{"commits": [{"timestamp": 1698678469, "sha": "65a1391a", "message": "feat(data/{list,multiset,finset}/*): `attach` and `filter` lemmas (#18087)\nLeft commutativity and cardinality of `list.filter`/`multiset.filter`/`finset.filter`. Interaction of `count`/`countp` and `attach`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "card_filter", ["finset"]], ["add", "theorem", "nat_cast_card_filter", ["finset"]], ["add", "theorem", "prod_map_val", ["finset"]], ["mod", "theorem", "sum_boole", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "card_val", ["finset"]]]}, {"oldPath": "src/data/finset/image.lean", "newPath": "src/data/finset/image.lean", "changes": [["add", "theorem", "filter_attach'", ["finset"]], ["add", "theorem", "filter_attach", ["finset"]], ["add", "theorem", "map_filter'", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "attach_nil", ["list"]], ["add", "theorem", "filter_attach'", ["list"]], ["add", "theorem", "filter_attach", ["list"]], ["add", "theorem", "filter_comm", ["list"]], ["add", "theorem", "map_filter'", ["list"]]]}, {"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "count_attach", ["list"]], ["add", "theorem", "countp_attach", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "attach_count_eq_count_coe", ["multiset"]], ["add", "theorem", "count_attach", ["multiset"]], ["add", "theorem", "countp_attach", ["multiset"]], ["add", "theorem", "filter_attach'", ["multiset"]], ["add", "theorem", "filter_attach", ["multiset"]], ["add", "theorem", "filter_comm", ["multiset"]], ["add", "theorem", "map_filter'", ["multiset"]]]}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": [["mod", "theorem", "sup_le", ["multiset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/number_theory/kummer_dedekind.lean", "newPath": "src/number_theory/kummer_dedekind.lean", "changes": []}]}, {"timestamp": 1698004298, "sha": "3365b20c", "message": "feat(combinatorics/simple_graph): More clique lemmas (#19203)\nMore lemmas about `is_clique`, `is_n_clique`, `edge_set`. Also define `clique_free_on`, a local version of `clique_free`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "simple_graph_refl", ["equiv"]], ["add", "theorem", "simple_graph_trans", ["equiv"]], ["add", "theorem", "symm_simple_graph", ["equiv"]], ["add", "theorem", "comap_comap", ["simple_graph"]], ["add", "theorem", "comap_id", ["simple_graph"]], ["add", "theorem", "comap_symm", ["simple_graph"]], ["add", "theorem", "delete_edges_eq", ["simple_graph"]], ["add", "theorem", "disjoint_edge_set", ["simple_graph"]], ["add", "theorem", "disjoint_from_edge_set", ["simple_graph"]], ["add", "theorem", "edge_set_eq_empty", ["simple_graph"]], ["add", "theorem", "edge_set_nonempty", ["simple_graph"]], ["add", "theorem", "coe_to_hom", ["simple_graph", "embedding"]], ["mod", "theorem", "map_adj_iff", ["simple_graph", "embedding"]], ["add", "theorem", "from_edge_set_disjoint", ["simple_graph"]], ["add", "theorem", "coe_id", ["simple_graph", "hom"]], ["add", "theorem", "coe_of_le", ["simple_graph", "hom"]], ["del", "def", "id", ["simple_graph", "hom"]], ["add", "def", "of_le", ["simple_graph", "hom"]], ["add", "theorem", "map_adj_apply", ["simple_graph"]], ["add", "theorem", "map_id", ["simple_graph"]], ["add", "theorem", "map_map", ["simple_graph"]], ["add", "theorem", "map_symm", ["simple_graph"]], ["add", "theorem", "not_mem_neighbor_set_self", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/clique.lean", "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": [["add", "theorem", "card_clique_finset_le", ["simple_graph"]], ["add", "theorem", "clique_finset_map", ["simple_graph"]], ["add", "theorem", "clique_finset_map_of_equiv", ["simple_graph"]], ["mod", "theorem", "clique_free_bot", ["simple_graph"]], ["add", "theorem", "anti", ["simple_graph", "clique_free_on"]], ["add", "theorem", "mono", ["simple_graph", "clique_free_on"]], ["add", "theorem", "of_succ", ["simple_graph", "clique_free_on"]], ["add", "theorem", "subset", ["simple_graph", "clique_free_on"]], ["add", "def", "clique_free_on", ["simple_graph"]], ["add", "theorem", "clique_free_on_empty", ["simple_graph"]], ["add", "theorem", "clique_free_on_of_card_lt", ["simple_graph"]], ["add", "theorem", "clique_free_on_singleton", ["simple_graph"]], ["add", "theorem", "clique_free_on_two", ["simple_graph"]], ["add", "theorem", "clique_free_on_univ", ["simple_graph"]], ["add", "theorem", "clique_free_two", ["simple_graph"]], ["add", "theorem", "clique_set_bot", ["simple_graph"]], ["add", "theorem", "clique_set_map", ["simple_graph"]], ["add", "theorem", "clique_set_map_of_equiv", ["simple_graph"]], ["add", "theorem", "clique_set_one", ["simple_graph"]], ["add", "theorem", "clique_set_zero", ["simple_graph"]], ["mod", "theorem", "coe_clique_finset", ["simple_graph"]], ["add", "theorem", "insert", ["simple_graph", "is_clique"]], ["mod", "theorem", "mono", ["simple_graph", "is_clique"]], ["mod", "theorem", "subset", ["simple_graph", "is_clique"]], ["add", "theorem", "is_clique_empty", ["simple_graph"]], ["add", "theorem", "is_clique_insert", ["simple_graph"]], ["add", "theorem", "is_clique_insert_of_not_mem", ["simple_graph"]], ["add", "theorem", "is_clique_pair", ["simple_graph"]], ["add", "theorem", "is_clique_singleton", ["simple_graph"]], ["add", "theorem", "insert", ["simple_graph", "is_n_clique"]], ["add", "theorem", "is_n_clique_empty", ["simple_graph"]], ["add", "theorem", "is_n_clique_one", ["simple_graph"]], ["add", "theorem", "is_n_clique_singleton", ["simple_graph"]], ["add", "theorem", "is_n_clique_zero", ["simple_graph"]], ["mod", "theorem", "mem_clique_finset_iff", ["simple_graph"]], ["mod", "theorem", "mem_clique_set_iff", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/triangle/basic.lean", "newPath": "src/combinatorics/simple_graph/triangle/basic.lean", "changes": []}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "exists_mem_ne", ["finset"]]]}, {"oldPath": "src/data/finset/preimage.lean", "newPath": "src/data/finset/preimage.lean", "changes": [["add", "theorem", "preimage_map", ["finset"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ne_left", ["iff"]], ["add", "theorem", "ne_right", ["iff"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "map_apply", ["relation"]], ["add", "theorem", "map_id_id", ["relation"]], ["add", "theorem", "map_map", ["relation"]]]}]}, {"timestamp": 1697468984, "sha": "b1abe23a", "message": "feat(measure_theory/order/upper_lower): Order-connected sets in `ℝⁿ` are measurable (#16976)\nProve that the frontier of an order-connected set in `ℝⁿ` (with the `∞`-metric, but it doesn't actually matter) has measure zero.\nAs a corollary, antichains in `ℝⁿ` have measure zero.", "changes": [{"oldPath": "src/analysis/normed/order/upper_lower.lean", "newPath": "src/analysis/normed/order/upper_lower.lean", "changes": [["add", "theorem", "bounded_inter", ["bdd_above"]], ["add", "theorem", "bounded_inter", ["bdd_below"]], ["add", "theorem", "bounded_iff_bdd_below_bdd_above", []], ["add", "theorem", "closure_lower_closure_comm", []], ["add", "theorem", "closure_upper_closure_comm", []], ["add", "theorem", "dist_anti_left", []], ["add", "theorem", "dist_anti_right", []], ["add", "theorem", "dist_inf_sup", []], ["add", "theorem", "dist_le_dist_of_le", []], ["add", "theorem", "dist_mono_left", []], ["add", "theorem", "dist_mono_right", []], ["add", "theorem", "interior_eq_empty", ["is_antichain"]], ["add", "theorem", "lower_closure_interior_subset'", []], ["add", "theorem", "upper_closure_interior_subset'", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "to_nnreal_abs", ["real"]]]}, {"oldPath": null, "newPath": "src/measure_theory/order/upper_lower.lean", "changes": [["add", "theorem", "volume_eq_zero", ["is_antichain"]], ["add", "theorem", "null_frontier", ["is_lower_set"]], ["add", "theorem", "null_frontier", ["is_upper_set"]], ["add", "theorem", "null_frontier", ["set", "ord_connected"]]]}, {"oldPath": "src/order/bounds/basic.lean", "newPath": "src/order/bounds/basic.lean", "changes": [["add", "theorem", "mem_lower_bounds_iff_subset_Ici", []], ["add", "theorem", "mem_upper_bounds_iff_subset_Iic", []]]}, {"oldPath": "src/topology/algebra/order/upper_lower.lean", "newPath": "src/topology/algebra/order/upper_lower.lean", "changes": [["add", "theorem", "bdd_above_closure", []], ["add", "theorem", "bdd_below_closure", []], ["add", "theorem", "lower_bounds_closure", []], ["add", "theorem", "upper_bounds_closure", []]]}]}, {"timestamp": 1697016287, "sha": "19c869ef", "message": "move old README.md to OLD_README.md", "changes": [{"oldPath": null, "newPath": "OLD_README.md", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1696978510, "sha": "3ac76ec5", "message": "doc: Add a warning mentioning Lean 4 to the readme (#19243)\nAlso correct links to point to the lean3 webpages; this means that users clicking them end up on pages which also have scary banners telling them not to use Lean 3.", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1696862278, "sha": "c8f30551", "message": "feat(topology/metric_space): diameter of pointwise zero and addition (#19028)", "changes": [{"oldPath": "src/analysis/normed/group/pointwise.lean", "newPath": "src/analysis/normed/group/pointwise.lean", "changes": [["add", "theorem", "ediam_mul_le", []], ["add", "theorem", "of_mul", ["metric", "bounded"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "bounded_of_image2_left", ["antilipschitz_with"]], ["add", "theorem", "bounded_of_image2_right", ["antilipschitz_with"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "diam_one", ["metric"]], ["add", "theorem", "nonempty_of_unbounded", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "diam_one", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "bounded_image2", ["lipschitz_on_with"]], ["add", "theorem", "ediam_image2_le", ["lipschitz_on_with"]]]}]}, {"timestamp": 1695051096, "sha": "ce64cd31", "message": "feat(topology/algebra/order/liminf_limsup): Eventual boundedness of neighborhoods (#18629)\nGeneralise `bounded_le_nhds`/`bounded_ge_nhds` using two ad hoc typeclasses. The goal here is to circumvent the fact that the product of order topologies is *not* an order topology, and apply those lemmas to `ℝⁿ`.", "changes": [{"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": [["add", "theorem", "eval_pi", ["filter", "eventually"]], ["add", "theorem", "eventually_pi", ["filter"]]]}, {"oldPath": "src/topology/algebra/order/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": [["mod", "theorem", "Union_Ici_eq_Ioi_of_lt_of_tendsto", []], ["mod", "theorem", "Union_Iic_eq_Iio_of_lt_of_tendsto", []], ["mod", "theorem", "bdd_above_range", ["filter", "tendsto"]], ["mod", "theorem", "bdd_above_range_of_cofinite", ["filter", "tendsto"]], ["mod", "theorem", "bdd_below_range", ["filter", "tendsto"]], ["mod", "theorem", "bdd_below_range_of_cofinite", ["filter", "tendsto"]], ["mod", "theorem", "is_bounded_under_ge", ["filter", "tendsto"]], ["mod", "theorem", "is_bounded_under_le", ["filter", "tendsto"]], ["mod", "theorem", "is_cobounded_under_ge", ["filter", "tendsto"]], ["mod", "theorem", "is_cobounded_under_le", ["filter", "tendsto"]], ["mod", "theorem", "is_bounded_ge_nhds", []]]}]}, {"timestamp": 1694562399, "sha": "001ffdc4", "message": "feat(probability/independence): Independence of singletons (#18506)\nCharacterisation of independence in terms of measure distributing over finite intersections, and lemmas connecting the different concepts of independence.\nAlso add supporting `measurable_space` and `set.preimage` lemmas", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_singleton", ["Prop"]]]}, {"oldPath": "src/data/set/image.lean", "newPath": "src/data/set/image.lean", "changes": [["add", "theorem", "preimage_singleton_false", ["set"]], ["add", "theorem", "preimage_singleton_true", ["set"]], ["add", "theorem", "preimage_symm_diff", ["set"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "comap_eq", ["measurable_embedding"]], ["add", "theorem", "iff_comap_eq", ["measurable_embedding"]], ["add", "theorem", "map_eq", ["measurable_equiv"]], ["add", "def", "of_involutive", ["measurable_equiv"]], ["add", "theorem", "of_involutive_apply", ["measurable_equiv"]], ["add", "theorem", "of_involutive_symm", ["measurable_equiv"]], ["add", "theorem", "measurable_mem", []], ["add", "theorem", "measurable_set_set_of", []], ["add", "theorem", "comap_compl", ["measurable_space"]], ["add", "theorem", "comap_const", ["measurable_space"]], ["add", "theorem", "comap_not", ["measurable_space"]], ["add", "theorem", "generate_from_singleton", ["measurable_space"]], ["add", "theorem", "map_const", ["measurable_space"]], ["add", "theorem", "measurable_to_prop", []]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["mod", "theorem", "const", ["measurable_set"]], ["mod", "theorem", "generate_from_singleton_empty", ["measurable_space"]], ["mod", "theorem", "generate_from_singleton_univ", ["measurable_space"]]]}, {"oldPath": "src/probability/independence/basic.lean", "newPath": "src/probability/independence/basic.lean", "changes": [["add", "theorem", "Indep_comap_mem_iff", ["probability_theory"]], ["add", "theorem", "Indep_set_iff_Indep_sets_singleton", ["probability_theory"]], ["add", "theorem", "Indep_set_iff_measure_Inter_eq_prod", ["probability_theory"]], ["add", "theorem", "Indep_set_of_mem", ["probability_theory", "Indep_sets"]], ["add", "theorem", "meas_Inter", ["probability_theory", "Indep_sets"]], ["add", "theorem", "Indep_sets_singleton_iff", ["probability_theory"]]]}]}, {"timestamp": 1694524324, "sha": "8818fdef", "message": "feat(combinatorics/set_family/ahlswede_zhang): Ahlswede-Zhang identity, part I (#18612)\nThe Ahlswede-Zhang identity is a sharpening of the [Lubell-Yamamoto-Meshalkin identity](https://leanprover-community.github.io/mathlib_docs/combinatorics/set_family/lym.html#finset.sum_card_slice_div_choose_le_one), by expliciting the correction term.\nThis PR defines `finset.truncated_sup`/`finset.truncated_inf`, whose cardinalities show up in the correction term.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/set_family/ahlswede_zhang.lean", "changes": [["add", "theorem", "card_truncated_sup_union_add_card_truncated_sup_infs", ["finset"]], ["add", "theorem", "compl_truncated_inf", ["finset"]], ["add", "theorem", "compl_truncated_sup", ["finset"]], ["add", "theorem", "le_truncated_sup", ["finset"]], ["add", "theorem", "map_truncated_inf", ["finset"]], ["add", "theorem", "map_truncated_sup", ["finset"]], ["add", "def", "truncated_inf", ["finset"]], ["add", "theorem", "truncated_inf_empty", ["finset"]], ["add", "theorem", "truncated_inf_le", ["finset"]], ["add", "theorem", "truncated_inf_of_mem", ["finset"]], ["add", "theorem", "truncated_inf_of_not_mem", ["finset"]], ["add", "theorem", "truncated_inf_sups", ["finset"]], ["add", "theorem", "truncated_inf_sups_of_not_mem", ["finset"]], ["add", "theorem", "truncated_inf_union", ["finset"]], ["add", "theorem", "truncated_inf_union_left", ["finset"]], ["add", "theorem", "truncated_inf_union_of_not_mem", ["finset"]], ["add", "theorem", "truncated_inf_union_right", ["finset"]], ["add", "def", "truncated_sup", ["finset"]], ["add", "theorem", "truncated_sup_empty", ["finset"]], ["add", "theorem", "truncated_sup_infs", ["finset"]], ["add", "theorem", "truncated_sup_infs_of_not_mem", ["finset"]], ["add", "theorem", "truncated_sup_of_mem", ["finset"]], ["add", "theorem", "truncated_sup_of_not_mem", ["finset"]], ["add", "theorem", "truncated_sup_union", ["finset"]], ["add", "theorem", "truncated_sup_union_left", ["finset"]], ["add", "theorem", "truncated_sup_union_of_not_mem", ["finset"]], ["add", "theorem", "truncated_sup_union_right", ["finset"]]]}, {"oldPath": "src/data/finset/sups.lean", "newPath": "src/data/finset/sups.lean", "changes": [["add", "theorem", "filter_infs_ge", ["finset"]], ["add", "theorem", "filter_sups_le", ["finset"]]]}, {"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": []}]}, {"timestamp": 1693471902, "sha": "442a83d7", "message": "feat(data/finset/lattice): `sup'`/`inf'` lemmas (#18989)\nMatch (most of) the lemmas between `finset.sup`/`finset.inf` and `finset.sup'`/`finset.inf'`. Also golf two proofs using `eq_of_forall_ge_iff` to make sure both APIs prove their lemmas in as closely as possible a way. Also define `finset.nontrivial` to match `set.nontrivial`.", "changes": [{"oldPath": "src/data/dfinsupp/multiset.lean", "newPath": "src/data/dfinsupp/multiset.lean", "changes": [["mod", "theorem", "to_dfinsupp_support", ["multiset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "attach_eq_empty_iff", ["finset"]], ["mod", "theorem", "attach_nonempty_iff", ["finset"]], ["add", "theorem", "cons_empty", ["finset"]], ["mod", "theorem", "eq_singleton_or_nontrivial", ["finset"]], ["add", "theorem", "filter_comm", ["finset"]], ["mod", "theorem", "filter_congr_decidable", ["finset"]], ["add", "theorem", "filter_const", ["finset"]], ["mod", "theorem", "filter_eq_empty_iff", ["finset"]], ["mod", "theorem", "filter_eq_self", ["finset"]], ["mod", "theorem", "filter_false", ["finset"]], ["mod", "theorem", "filter_false_of_mem", ["finset"]], ["mod", "theorem", "filter_true", ["finset"]], ["mod", "theorem", "filter_true_of_mem", ["finset"]], ["mod", "theorem", "exists_eq_singleton_or_nontrivial", ["finset", "nonempty"]], ["add", "theorem", "ne_singleton", ["finset", "nontrivial"]], ["add", "theorem", "nontrivial_iff_ne_singleton", ["finset"]], ["add", "theorem", "not_nontrivial_empty", ["finset"]], ["add", "theorem", "not_nontrivial_singleton", ["finset"]], ["del", "theorem", "sdiff_self", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf'_image", ["finset"]], ["add", "theorem", "inf'_product_left", ["finset"]], ["add", "theorem", "inf'_product_right", ["finset"]], ["add", "theorem", "inf'_sup_distrib_left", ["finset"]], ["add", "theorem", "inf'_sup_distrib_right", ["finset"]], ["add", "theorem", "inf'_sup_inf'", ["finset"]], ["add", "theorem", "inf'_union", ["finset"]], ["add", "theorem", "sup'_image", ["finset"]], ["add", "theorem", "sup'_inf_distrib_left", ["finset"]], ["add", "theorem", "sup'_inf_distrib_right", ["finset"]], ["add", "theorem", "sup'_inf_sup'", ["finset"]], ["add", "theorem", "sup'_product_left", ["finset"]], ["add", "theorem", "sup'_product_right", ["finset"]], ["add", "theorem", "sup'_union", ["finset"]], ["add", "theorem", "map_finset_inf'", []], ["add", "theorem", "map_finset_sup'", []]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": []}]}, {"timestamp": 1693223923, "sha": "ffde2d8a", "message": "chore(order/liminf_limsup): Generalise and move lemmas (#18628)\nGeneralise lemmas from semilattices to codirected orders. Move topology-less lemmas from `topology.algebra.order.liminf_limsup` to `order.liminf_limsup`. Also turn arguments to `bdd_above_insert` and friends implicit.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "infinite_of_not_bdd_below", ["set"]]]}, {"oldPath": "src/order/bounds/basic.lean", "newPath": "src/order/bounds/basic.lean", "changes": [["del", "theorem", "insert", ["bdd_above"]], ["mod", "theorem", "union", ["bdd_above"]], ["mod", "theorem", "bdd_above_insert", []], ["mod", "theorem", "bdd_above_union", []], ["mod", "theorem", "insert", ["bdd_below"]], ["mod", "theorem", "union", ["bdd_below"]], ["mod", "theorem", "bdd_below_insert", []], ["mod", "theorem", "bdd_below_union", []], ["add", "def", "scott_continuous", []]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["del", "def", "scott_continuous", []]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "bdd_above_range_of_tendsto_at_top_at_bot", ["filter"]], ["add", "theorem", "bdd_below_range_of_tendsto_at_top_at_top", ["filter"]], ["add", "theorem", "gt_mem_sets_of_Liminf_gt", ["filter"]], ["add", "theorem", "is_bounded_ge_at_top", ["filter"]], ["add", "theorem", "is_bounded_le_at_bot", ["filter"]], ["mod", "theorem", "bdd_above_range", ["filter", "is_bounded_under"]], ["mod", "theorem", "bdd_above_range_of_cofinite", ["filter", "is_bounded_under"]], ["mod", "theorem", "bdd_below_range", ["filter", "is_bounded_under"]], ["mod", "theorem", "bdd_below_range_of_cofinite", ["filter", "is_bounded_under"]], ["add", "theorem", "lt_mem_sets_of_Limsup_lt", ["filter"]], ["add", "theorem", "is_bounded_under_ge_at_top", ["filter", "tendsto"]], ["add", "theorem", "is_bounded_under_le_at_bot", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/order/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": [["del", "theorem", "bdd_above_range_of_tendsto_at_top_at_bot", []], ["del", "theorem", "bdd_below_range_of_tendsto_at_top_at_top", []], ["del", "theorem", "is_bounded_under_ge_at_top", ["filter", "tendsto"]], ["del", "theorem", "is_bounded_under_le_at_bot", ["filter", "tendsto"]], ["del", "theorem", "gt_mem_sets_of_Liminf_gt", []], ["del", "theorem", "is_bounded_ge_at_top", []], ["del", "theorem", "is_bounded_le_at_bot", []], ["del", "theorem", "lt_mem_sets_of_Limsup_lt", []]]}]}, {"timestamp": 1691258850, "sha": "32a7e535", "message": "feat(algebraic_topology/dold_kan): The Dold-Kan equivalence for abelian categories (#17926)", "changes": [{"oldPath": "src/algebraic_topology/dold_kan/compatibility.lean", "newPath": "src/algebraic_topology/dold_kan/compatibility.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/decomposition.lean", "newPath": "src/algebraic_topology/dold_kan/decomposition.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/degeneracies.lean", "newPath": "src/algebraic_topology/dold_kan/degeneracies.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/equivalence.lean", "changes": [["add", "def", "N", ["category_theory", "abelian", "dold_kan"]], ["add", "def", "comparison_N", ["category_theory", "abelian", "dold_kan"]], ["add", "def", "equivalence", ["category_theory", "abelian", "dold_kan"]], ["add", "theorem", "equivalence_inverse", ["category_theory", "abelian", "dold_kan"]], ["add", "def", "Γ", ["category_theory", "abelian", "dold_kan"]]]}, {"oldPath": "src/algebraic_topology/dold_kan/equivalence_additive.lean", "newPath": "src/algebraic_topology/dold_kan/equivalence_additive.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/equivalence_pseudoabelian.lean", "newPath": "src/algebraic_topology/dold_kan/equivalence_pseudoabelian.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/faces.lean", "newPath": "src/algebraic_topology/dold_kan/faces.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/functor_gamma.lean", "newPath": "src/algebraic_topology/dold_kan/functor_gamma.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/functor_n.lean", "newPath": "src/algebraic_topology/dold_kan/functor_n.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/gamma_comp_n.lean", "newPath": "src/algebraic_topology/dold_kan/gamma_comp_n.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/n_comp_gamma.lean", "newPath": "src/algebraic_topology/dold_kan/n_comp_gamma.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/n_reflects_iso.lean", "newPath": "src/algebraic_topology/dold_kan/n_reflects_iso.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/normalized.lean", "newPath": "src/algebraic_topology/dold_kan/normalized.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/notations.lean", "newPath": "src/algebraic_topology/dold_kan/notations.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/p_infty.lean", "newPath": "src/algebraic_topology/dold_kan/p_infty.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/projections.lean", "newPath": "src/algebraic_topology/dold_kan/projections.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/split_simplicial_object.lean", "newPath": "src/algebraic_topology/dold_kan/split_simplicial_object.lean", "changes": []}]}, {"timestamp": 1690994834, "sha": "48a058d7", "message": "feat(data/sum/interval): The lexicographic sum of two locally finite orders is locally finite (#11352)\nThis proves `locally_finite_order (α ⊕ₗ β)` where `α` and `β` are locally finite themselves.", "changes": [{"oldPath": "src/data/finset/sum.lean", "newPath": "src/data/finset/sum.lean", "changes": [["add", "theorem", "disj_sum_eq_empty", ["finset"]]]}, {"oldPath": "src/data/sum/interval.lean", "newPath": "src/data/sum/interval.lean", "changes": [["add", "theorem", "inl_mem_sum_lex_lift", ["finset"]], ["add", "theorem", "inr_mem_sum_lex_lift", ["finset"]], ["add", "theorem", "mem_sum_lex_lift", ["finset"]], ["add", "def", "sum_lex_lift", ["finset"]], ["add", "theorem", "sum_lex_lift_eq_empty", ["finset"]], ["add", "theorem", "sum_lex_lift_inl_inl", ["finset"]], ["add", "theorem", "sum_lex_lift_inl_inr", ["finset"]], ["add", "theorem", "sum_lex_lift_inr_inl", ["finset"]], ["add", "theorem", "sum_lex_lift_inr_inr", ["finset"]], ["add", "theorem", "sum_lex_lift_mono", ["finset"]], ["add", "theorem", "sum_lex_lift_nonempty", ["finset"]], ["add", "theorem", "Icc_inl_inl", ["sum", "lex"]], ["add", "theorem", "Icc_inl_inr", ["sum", "lex"]], ["add", "theorem", "Icc_inr_inl", ["sum", "lex"]], ["add", "theorem", "Icc_inr_inr", ["sum", "lex"]], ["add", "theorem", "Ico_inl_inl", ["sum", "lex"]], ["add", "theorem", "Ico_inl_inr", ["sum", "lex"]], ["add", "theorem", "Ico_inr_inl", ["sum", "lex"]], ["add", "theorem", "Ico_inr_inr", ["sum", "lex"]], ["add", "theorem", "Ioc_inl_inl", ["sum", "lex"]], ["add", "theorem", "Ioc_inl_inr", ["sum", "lex"]], ["add", "theorem", "Ioc_inr_inl", ["sum", "lex"]], ["add", "theorem", "Ioc_inr_inr", ["sum", "lex"]], ["add", "theorem", "Ioo_inl_inl", ["sum", "lex"]], ["add", "theorem", "Ioo_inl_inr", ["sum", "lex"]], ["add", "theorem", "Ioo_inr_inl", ["sum", "lex"]], ["add", "theorem", "Ioo_inr_inr", ["sum", "lex"]]]}]}, {"timestamp": 1690982457, "sha": "3ba15165", "message": "feat(analysis/convex/proj_Icc): Extending convex functions (#18797)\nConstantly extending monotone/antitone functions preserves their convexity.", "changes": [{"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": [["add", "theorem", "smul_max_of_nonpos", []], ["add", "theorem", "smul_min_of_nonpos", []]]}, {"oldPath": "src/algebra/order/monoid/lemmas.lean", "newPath": "src/algebra/order/monoid/lemmas.lean", "changes": [["add", "theorem", "max_mul_mul_le_max_mul_max'", []], ["add", "theorem", "min_mul_min_le_min_mul_mul'", []]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["add", "theorem", "smul_max", []], ["add", "theorem", "smul_min", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/proj_Icc.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "image_Icc_subset", ["antitone"]], ["add", "theorem", "image_Icc_subset", ["antitone_on"]], ["add", "theorem", "image_Icc_subset", ["monotone"]], ["add", "theorem", "image_Icc_subset", ["monotone_on"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "image_uIcc_subset", ["antitone"]], ["add", "theorem", "image_uIcc_subset", ["antitone_on"]], ["add", "theorem", "image_uIcc_subset", ["monotone"]], ["add", "theorem", "image_uIcc_subset", ["monotone_on"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "map_inf", ["antitone_on"]], ["add", "theorem", "map_sup", ["antitone_on"]], ["add", "theorem", "of_map_inf", ["antitone_on"]], ["add", "theorem", "of_map_sup", ["antitone_on"]], ["add", "theorem", "map_inf", ["monotone_on"]], ["add", "theorem", "map_sup", ["monotone_on"]], ["add", "theorem", "of_map_inf", ["monotone_on"]], ["add", "theorem", "of_map_sup", ["monotone_on"]]]}]}, {"timestamp": 1690712334, "sha": "63721b2c", "message": "feat(algebraic_topology/dold_kan): The Dold-Kan equivalence for pseudoabelian categories (#17925)", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/equivalence_pseudoabelian.lean", "changes": [["add", "def", "N", ["category_theory", "idempotents", "dold_kan"]], ["add", "def", "equivalence", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "equivalence_counit_iso", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "equivalence_functor", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "equivalence_inverse", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "equivalence_unit_iso", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "hN₁", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "hΓ₀", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "hε", ["category_theory", "idempotents", "dold_kan"]], ["add", "theorem", "hη", ["category_theory", "idempotents", "dold_kan"]], ["add", "def", "Γ", ["category_theory", "idempotents", "dold_kan"]], ["add", "def", "ε", ["category_theory", "idempotents", "dold_kan"]], ["add", "def", "η", ["category_theory", "idempotents", "dold_kan"]]]}, {"oldPath": "src/category_theory/functor/category.lean", "newPath": "src/category_theory/functor/category.lean", "changes": [["add", "theorem", "comp_app_assoc", ["category_theory", "nat_trans"]]]}]}, {"timestamp": 1690548483, "sha": "3b522651", "message": "feat(measure_theory/measure/haar_quotient): the Unfolding Trick (#18863)\nWe prove the \"unfolding trick\": Given a subgroup `Γ` of a group `G`, the integral of a function `f` on `G` times the lift to `G` of a function `g` on the coset space `G ⧸ Γ` with respect to a right-invariant measure `μ` on `G`, is equal to the integral over the coset space of the automorphization of `f` times `g`.\nWe also prove the following simplified version: Given a subgroup `Γ` of a group `G`, the integral of a function `f` on `G` with respect to a right-invariant measure `μ` is equal to the integral over the coset space `G ⧸ Γ` of the automorphization of `f`.\nA question: is it possible to deduce `ae_strongly_measurable (quotient_group.automorphize f) μ_𝓕` from `ae_strongly_measurable f μ` (as opposed to assuming it as a hypothesis in the main theorem)? It seems quite plausible...", "changes": [{"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "def", "to_add_equiv₀", ["distrib_mul_action"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable/basic.lean", "newPath": "src/measure_theory/function/strongly_measurable/basic.lean", "changes": [["add", "theorem", "ae_strongly_measurable_of_absolutely_continuous", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "integral_eq_tsum''", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "lintegral_eq_tsum''", ["measure_theory", "is_fundamental_domain"]]]}, {"oldPath": "src/measure_theory/measure/haar/quotient.lean", "newPath": "src/measure_theory/measure/haar/quotient.lean", "changes": [["add", "theorem", "ess_sup_comp_quotient_group_mk", []], ["mod", "theorem", "mk'", ["measure_preserving_quotient_group"]], ["add", "theorem", "absolutely_continuous_map", ["measure_theory", "is_fundamental_domain"]], ["mod", "theorem", "map_restrict_quotient", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "integral_mul_eq_integral_automorphize_mul", ["quotient_add_group"]], ["add", "theorem", "integral_eq_integral_automorphize", ["quotient_group"]], ["add", "theorem", "integral_mul_eq_integral_automorphize_mul", ["quotient_group"]]]}, {"oldPath": "src/topology/algebra/infinite_sum/basic.lean", "newPath": "src/topology/algebra/infinite_sum/basic.lean", "changes": [["add", "theorem", "automorphize_smul_left", ["add_action"]], ["add", "def", "automorphize", ["mul_action"]], ["add", "theorem", "automorphize_smul_left", ["mul_action"]], ["add", "theorem", "automorphize_smul_left", ["quotient_add_group"]], ["add", "def", "automorphize", ["quotient_group"]], ["add", "theorem", "automorphize_smul_left", ["quotient_group"]], ["add", "theorem", "tsum_const_smul''", []], ["add", "theorem", "tsum_const_smul'", []]]}]}, {"timestamp": 1690539069, "sha": "0c1d80f5", "message": "feat(linear_algebra/orientation): add `orientation.reindex` (#19236)", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "dom_dom_congr_smul", ["alternating_map"]], ["add", "def", "dom_dom_lcongr", ["alternating_map"]], ["add", "theorem", "dom_dom_lcongr_refl", ["alternating_map"]], ["add", "theorem", "dom_dom_lcongr_to_add_equiv", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_reindex'", ["basis"]]]}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "theorem", "orientation_reindex", ["basis"]], ["add", "def", "reindex", ["orientation"]], ["add", "theorem", "reindex_apply", ["orientation"]], ["add", "theorem", "reindex_refl", ["orientation"]], ["add", "theorem", "reindex_symm", ["orientation"]]]}]}, {"timestamp": 1690539068, "sha": "188a411e", "message": "feat(combinatorics/quiver/covering): Definition of coverings and unique lifting of paths (#17828)", "changes": [{"oldPath": null, "newPath": "src/combinatorics/quiver/covering.lean", "changes": [["add", "theorem", "bijective_costar_iff_bijective_star", ["prefunctor"]], ["add", "def", "costar", ["prefunctor"]], ["add", "theorem", "costar_apply", ["prefunctor"]], ["add", "theorem", "costar_comp", ["prefunctor"]], ["add", "theorem", "costar_conj_star", ["prefunctor"]], ["add", "theorem", "comp", ["prefunctor", "is_covering"]], ["add", "theorem", "map_injective", ["prefunctor", "is_covering"]], ["add", "theorem", "of_comp_left", ["prefunctor", "is_covering"]], ["add", "theorem", "of_comp_right", ["prefunctor", "is_covering"]], ["add", "theorem", "is_covering_of_bijective_costar", ["prefunctor"]], ["add", "theorem", "is_covering_of_bijective_star", ["prefunctor"]], ["add", "def", "path_star", ["prefunctor"]], ["add", "theorem", "path_star_apply", ["prefunctor"]], ["add", "theorem", "path_star_bijective", ["prefunctor"]], ["add", "theorem", "path_star_injective", ["prefunctor"]], ["add", "theorem", "path_star_surjective", ["prefunctor"]], ["add", "def", "star", ["prefunctor"]], ["add", "theorem", "star_apply", ["prefunctor"]], ["add", "theorem", "star_comp", ["prefunctor"]], ["add", "theorem", "symmetrify_star", ["prefunctor"]], ["add", "def", "costar", ["quiver"]], ["add", "def", "path_star", ["quiver"]], ["add", "def", "star", ["quiver"]], ["add", "def", "star_equiv_costar", ["quiver"]], ["add", "theorem", "star_equiv_costar_apply", ["quiver"]], ["add", "theorem", "star_equiv_costar_symm_apply", ["quiver"]], ["add", "def", "symmetrify_costar", ["quiver"]], ["add", "def", "symmetrify_star", ["quiver"]]]}]}, {"timestamp": 1690539066, "sha": "8900d545", "message": "feat(set_theory/game/pgame): small sets of pre-games / games / surreals are bounded (#15260)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["add", "theorem", "bdd_above_of_small", ["game"]], ["add", "theorem", "bdd_below_of_small", ["game"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "bdd_above_of_small", ["pgame"]], ["add", "theorem", "bdd_below_of_small", ["pgame"]], ["add", "theorem", "le_upper_bound", ["pgame"]], ["add", "def", "lower_bound", ["pgame"]], ["add", "theorem", "lower_bound_le", ["pgame"]], ["add", "theorem", "lower_bound_mem_lower_bounds", ["pgame"]], ["add", "def", "upper_bound", ["pgame"]], ["add", "theorem", "upper_bound_mem_upper_bounds", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "bdd_above_of_small", ["surreal"]], ["add", "theorem", "bdd_below_of_small", ["surreal"]], ["add", "theorem", "lower_bound_numeric", ["surreal"]], ["add", "theorem", "upper_bound_numeric", ["surreal"]]]}]}, {"timestamp": 1690529027, "sha": "e90e0a61", "message": "feat(tactic/positivity): Extension for `ite` (#17650)\nAdd `positivity_ite`, an extension for `ite`.", "changes": [{"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1690454444, "sha": "fe18deda", "message": "feat(analysis/normed_space/continuous_linear_map): generalize typeclass assumptions (#19108)", "changes": [{"oldPath": "src/analysis/normed_space/continuous_linear_map.lean", "newPath": "src/analysis/normed_space/continuous_linear_map.lean", "changes": []}]}, {"timestamp": 1690378782, "sha": "d11f435d", "message": "feat(linear_algebra/quadratic_form): some work from 'Clifford Algebras and Spinor Norms Over a Commutative Ring' (#18447)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["mod", "def", "associated", ["quadratic_form"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/quadratic_form/dual.lean", "changes": [["add", "theorem", "to_quadratic_form", ["bilin_form", "dual_prod"]], ["add", "def", "dual_prod", ["bilin_form"]], ["add", "theorem", "is_symm_dual_prod", ["bilin_form"]], ["add", "theorem", "nondenerate_dual_prod", ["bilin_form"]], ["add", "def", "dual_prod", ["quadratic_form"]], ["add", "def", "dual_prod_isometry", ["quadratic_form"]], ["add", "def", "dual_prod_prod_isometry", ["quadratic_form"]], ["add", "def", "to_dual_prod", ["quadratic_form"]], ["add", "theorem", "to_dual_prod_isometry", ["quadratic_form"]]]}]}, {"timestamp": 1690262773, "sha": "18ee5998", "message": "feat(algebraic_topology/dold_kan): tools for compatibilities, lemmas (#17923)", "changes": [{"oldPath": "src/algebraic_topology/dold_kan/compatibility.lean", "newPath": "src/algebraic_topology/dold_kan/compatibility.lean", "changes": [["add", "def", "equivalence_counit_iso", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence_counit_iso_eq", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence_unit_iso", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence_unit_iso_eq", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "τ₀", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "τ₁", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "υ", ["algebraic_topology", "dold_kan", "compatibility"]]]}]}, {"timestamp": 1690199408, "sha": "c0c52abb", "message": "feat(order/upper_lower/basic): Linear order (#19068)\nUpper/lower sets on a linear order themselves form a linear order.", "changes": [{"oldPath": "src/algebra/order/upper_lower.lean", "newPath": "src/algebra/order/upper_lower.lean", "changes": []}, {"oldPath": "src/order/upper_lower/basic.lean", "newPath": "src/order/upper_lower/basic.lean", "changes": [["add", "theorem", "total", ["is_lower_set"]], ["add", "theorem", "total", ["is_upper_set"]]]}, {"oldPath": "src/topology/algebra/order/upper_lower.lean", "newPath": "src/topology/algebra/order/upper_lower.lean", "changes": []}]}, {"timestamp": 1690189023, "sha": "4be58905", "message": "fix(group_theory/subgroup/basic): generalize `centralizer` from `subgroup G` to `set G` (#18965)\nThis is consistent with all the other `sub.centralizer` definitions.\nThis generalization reveals that a lot of downstream results are rather strangely stated about `zpowers`.\nThis does not attempt to change these, instead leaving the work for a follow up (either in a later mathlib3 PR or in mathlib4).", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["mod", "theorem", "commutator_eq_bot_iff_le_centralizer", ["subgroup"]]]}, {"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": [["mod", "theorem", "stabilizer_eq_centralizer", ["conj_act"]]]}, {"oldPath": "src/group_theory/group_action/quotient.lean", "newPath": "src/group_theory/group_action/quotient.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "def", "centralizer", ["subgroup"]], ["mod", "theorem", "centralizer_eq_top_iff_subset", ["subgroup"]], ["mod", "theorem", "centralizer_le", ["subgroup"]], ["del", "theorem", "centralizer_top", ["subgroup"]], ["add", "theorem", "centralizer_univ", ["subgroup"]], ["mod", "theorem", "le_centralizer", ["subgroup"]], ["mod", "theorem", "le_centralizer_iff", ["subgroup"]], ["mod", "theorem", "le_centralizer_iff_is_commutative", ["subgroup"]], ["mod", "theorem", "mem_centralizer_iff", ["subgroup"]], ["mod", "theorem", "mem_centralizer_iff_commutator_eq_one", ["subgroup"]]]}, {"oldPath": "src/group_theory/subgroup/zpowers.lean", "newPath": "src/group_theory/subgroup/zpowers.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/group_theory/transfer.lean", "newPath": "src/group_theory/transfer.lean", "changes": []}]}, {"timestamp": 1690189021, "sha": "148aefbd", "message": "docs(topology/dense_embedding): Improve explanation (#18134)\nAn attempt at improving understandability.\nCloses #1539", "changes": [{"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}]}, {"timestamp": 1690184860, "sha": "4b92a463", "message": "chore(ring_theory/kaehler): cleanup instances (#19234)\nThe previous module instance has the wrong defeqs, and was more work to construct.\nThe new one remains propositionally equal to the old one.", "changes": [{"oldPath": "src/ring_theory/ideal/cotangent.lean", "newPath": "src/ring_theory/ideal/cotangent.lean", "changes": []}, {"oldPath": "src/ring_theory/kaehler.lean", "newPath": "src/ring_theory/kaehler.lean", "changes": [["mod", "def", "End_equiv_derivation'", ["kaehler_differential"]]]}]}, {"timestamp": 1690105870, "sha": "88fcdc3d", "message": "feat(ring_theory/tensor_product): add missing scalar tower instances (#19143)", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["del", "theorem", "mul_assoc", ["algebra", "tensor_product"]], ["del", "theorem", "mul_one", ["algebra", "tensor_product"]], ["del", "theorem", "one_mul", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1690051287, "sha": "8047de4d", "message": "feat(topology/metric_space/basic): decomposition of a \"sphere\" hypercube (#18875)\nThe main result here is `sphere x r = (⋃ i : β, function.eval i ⁻¹' sphere (x i) r) ∩ closed_ball x r`, which attempts to express that you can form the surface of a cube by taking the union of the faces in each axis.\nThe `prod` result, `sphere (x, y) r = sphere x r ×ˢ closed_ball y r ∪ closed_ball x r ×ˢ sphere y r`, is a little easier to follow.\nI can imagine these being useful if we wanted to prove that the surface area of a \"sphere\" in `fin 3 -> R` was `24*r*r`!", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_pi_eq_iff", []], ["add", "theorem", "closed_ball_eq_sphere_of_nonpos", ["metric"]], ["add", "theorem", "nonneg_of_mem_sphere", ["metric"]], ["add", "theorem", "sphere_eq_empty_of_neg", ["metric"]], ["add", "theorem", "nndist_pi_eq_iff", []], ["add", "theorem", "nndist_pi_lt_iff", []], ["add", "theorem", "sphere_pi", []], ["add", "theorem", "sphere_prod", []]]}]}, {"timestamp": 1690017162, "sha": "573eea92", "message": "chore(*): add mathlib4 synchronization comments (#19239)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `order.irreducible`", "changes": [{"oldPath": "src/order/irreducible.lean", "newPath": "src/order/irreducible.lean", "changes": []}]}, {"timestamp": 1689748421, "sha": "8ea5598d", "message": "chore(set_theory/ordinal/basic): golf (#18547)", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["add", "theorem", "apply_subrel_iso", ["principal_seg"]], ["add", "theorem", "subrel_iso_apply", ["principal_seg"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "def", "enum", ["ordinal"]], ["mod", "def", "principal_seg", ["ordinal", "typein"]]]}]}, {"timestamp": 1689534099, "sha": "bf2428c9", "message": "feat(order/irreducible): Sup-irreducible elements (#18999)\nDefine sup- and inf- irreducible and prime elements in a lattice.", "changes": [{"oldPath": "src/data/fin/tuple/bubble_sort_induction.lean", "newPath": "src/data/fin/tuple/bubble_sort_induction.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["del", "theorem", "well_founded_gt", ["finite", "preorder"]], ["del", "theorem", "well_founded_lt", ["finite", "preorder"]]]}, {"oldPath": null, "newPath": "src/order/irreducible.lean", "changes": [["add", "theorem", "exists_inf_irred_decomposition", []], ["add", "theorem", "exists_sup_irred_decomposition", []], ["add", "theorem", "finset_inf_eq", ["inf_irred"]], ["add", "theorem", "ne_top", ["inf_irred"]], ["add", "def", "inf_irred", []], ["add", "theorem", "inf_irred_iff_not_is_max", []], ["add", "theorem", "inf_irred_of_dual", []], ["add", "theorem", "inf_irred_to_dual", []], ["add", "theorem", "finset_inf_le", ["inf_prime"]], ["add", "theorem", "inf_le", ["inf_prime"]], ["add", "theorem", "ne_top", ["inf_prime"]], ["add", "def", "inf_prime", []], ["add", "theorem", "inf_prime_iff_inf_irred", []], ["add", "theorem", "inf_prime_iff_not_is_max", []], ["add", "theorem", "inf_prime_of_dual", []], ["add", "theorem", "inf_prime_to_dual", []], ["add", "theorem", "not_inf_irred", ["is_max"]], ["add", "theorem", "not_inf_prime", ["is_max"]], ["add", "theorem", "not_sup_irred", ["is_min"]], ["add", "theorem", "not_sup_prime", ["is_min"]], ["add", "theorem", "not_inf_irred", []], ["add", "theorem", "not_inf_irred_top", []], ["add", "theorem", "not_inf_prime", []], ["add", "theorem", "not_inf_prime_top", []], ["add", "theorem", "not_sup_irred", []], ["add", "theorem", "not_sup_irred_bot", []], ["add", "theorem", "not_sup_prime", []], ["add", "theorem", "not_sup_prime_bot", []], ["add", "theorem", "finset_sup_eq", ["sup_irred"]], ["add", "theorem", "ne_bot", ["sup_irred"]], ["add", "theorem", "not_is_min", ["sup_irred"]], ["add", "def", "sup_irred", []], ["add", "theorem", "sup_irred_iff_not_is_min", []], ["add", "theorem", "sup_irred_of_dual", []], ["add", "theorem", "sup_irred_to_dual", []], ["add", "theorem", "le_finset_sup", ["sup_prime"]], ["add", "theorem", "le_sup", ["sup_prime"]], ["add", "theorem", "ne_bot", ["sup_prime"]], ["add", "theorem", "not_is_min", ["sup_prime"]], ["add", "def", "sup_prime", []], ["add", "theorem", "sup_prime_iff_not_is_min", []], ["add", "theorem", "sup_prime_iff_sup_irred", []], ["add", "theorem", "sup_prime_of_dual", []], ["add", "theorem", "sup_prime_to_dual", []]]}]}, {"timestamp": 1689512193, "sha": "08b081ea", "message": "chore(*): add mathlib4 synchronization comments (#19238)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.expr`\n* `algebraic_geometry.morphisms.finite_type`\n* `algebraic_geometry.morphisms.ring_hom_properties`\n* `arithcc`\n* `canonically_ordered_comm_semiring_two_mul`\n* `char_p_zero_ne_char_zero`\n* `cyclotomic_105`\n* `data.matrix.auto`\n* `direct_sum_is_internal`\n* `examples.mersenne_primes`\n* `examples.prop_encodable`\n* `geometry.manifold.instances.sphere`\n* `girard`\n* `homogeneous_prime_not_prime`\n* `imo.imo1959_q1`\n* `imo.imo1960_q1`\n* `imo.imo1962_q1`\n* `imo.imo1962_q4`\n* `imo.imo1964_q1`\n* `imo.imo1969_q1`\n* `imo.imo1972_q5`\n* `imo.imo1975_q1`\n* `imo.imo1977_q6`\n* `imo.imo1981_q3`\n* `imo.imo1987_q1`\n* `imo.imo1988_q6`\n* `imo.imo1994_q1`\n* `imo.imo1998_q2`\n* `imo.imo2001_q2`\n* `imo.imo2001_q6`\n* `imo.imo2005_q3`\n* `imo.imo2005_q4`\n* `imo.imo2006_q3`\n* `imo.imo2006_q5`\n* `imo.imo2008_q2`\n* `imo.imo2008_q3`\n* `imo.imo2008_q4`\n* `imo.imo2011_q3`\n* `imo.imo2011_q5`\n* `imo.imo2013_q1`\n* `imo.imo2013_q5`\n* `imo.imo2019_q1`\n* `imo.imo2019_q2`\n* `imo.imo2019_q4`\n* `imo.imo2020_q2`\n* `imo.imo2021_q1`\n* `linear_order_with_pos_mul_pos_eq_zero`\n* `map_floor`\n* `miu_language.basic`\n* `miu_language.decision_nec`\n* `miu_language.decision_suf`\n* `oxford_invariants.2021summer.week3_p1`\n* `phillips`\n* `pseudoelement`\n* `quadratic_form`\n* `seminorm_lattice_not_distrib`\n* `sensitivity`\n* `sorgenfrey_line`\n* `wiedijk_100_theorems.abel_ruffini`\n* `wiedijk_100_theorems.area_of_a_circle`\n* `wiedijk_100_theorems.ascending_descending_sequences`\n* `wiedijk_100_theorems.ballot_problem`\n* `wiedijk_100_theorems.birthday_problem`\n* `wiedijk_100_theorems.cubing_a_cube`\n* `wiedijk_100_theorems.friendship_graphs`\n* `wiedijk_100_theorems.herons_formula`\n* `wiedijk_100_theorems.inverse_triangle_sum`\n* `wiedijk_100_theorems.konigsberg`\n* `wiedijk_100_theorems.partition`\n* `wiedijk_100_theorems.perfect_numbers`\n* `wiedijk_100_theorems.solution_of_cubic`\n* `wiedijk_100_theorems.sum_of_prime_reciprocals_diverges`\n* `zero_divisors_in_add_monoid_algebras`", "changes": [{"oldPath": "archive/arithcc.lean", "newPath": "archive/arithcc.lean", "changes": []}, {"oldPath": "archive/examples/mersenne_primes.lean", "newPath": "archive/examples/mersenne_primes.lean", "changes": []}, {"oldPath": "archive/examples/prop_encodable.lean", "newPath": "archive/examples/prop_encodable.lean", "changes": []}, {"oldPath": "archive/imo/imo1959_q1.lean", "newPath": "archive/imo/imo1959_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1960_q1.lean", "newPath": "archive/imo/imo1960_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1962_q1.lean", "newPath": "archive/imo/imo1962_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": []}, {"oldPath": "archive/imo/imo1964_q1.lean", "newPath": "archive/imo/imo1964_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1969_q1.lean", "newPath": "archive/imo/imo1969_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1972_q5.lean", "newPath": "archive/imo/imo1972_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo1975_q1.lean", "newPath": "archive/imo/imo1975_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo1981_q3.lean", "newPath": "archive/imo/imo1981_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo1987_q1.lean", "newPath": "archive/imo/imo1987_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo1994_q1.lean", "newPath": "archive/imo/imo1994_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2001_q2.lean", "newPath": "archive/imo/imo2001_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2001_q6.lean", "newPath": "archive/imo/imo2001_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo2005_q3.lean", "newPath": "archive/imo/imo2005_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2005_q4.lean", "newPath": "archive/imo/imo2005_q4.lean", "changes": []}, {"oldPath": "archive/imo/imo2006_q3.lean", "newPath": "archive/imo/imo2006_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2006_q5.lean", "newPath": "archive/imo/imo2006_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q2.lean", "newPath": "archive/imo/imo2008_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "archive/imo/imo2011_q3.lean", "newPath": "archive/imo/imo2011_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2011_q5.lean", "newPath": "archive/imo/imo2011_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q1.lean", "newPath": "archive/imo/imo2013_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q1.lean", "newPath": "archive/imo/imo2019_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q2.lean", "newPath": "archive/imo/imo2019_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": []}, {"oldPath": "archive/imo/imo2020_q2.lean", "newPath": "archive/imo/imo2020_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2021_q1.lean", "newPath": "archive/imo/imo2021_q1.lean", "changes": []}, {"oldPath": "archive/miu_language/basic.lean", "newPath": "archive/miu_language/basic.lean", "changes": []}, {"oldPath": "archive/miu_language/decision_nec.lean", "newPath": "archive/miu_language/decision_nec.lean", "changes": []}, {"oldPath": "archive/miu_language/decision_suf.lean", "newPath": "archive/miu_language/decision_suf.lean", "changes": []}, {"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/abel_ruffini.lean", "newPath": "archive/wiedijk_100_theorems/abel_ruffini.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/area_of_a_circle.lean", "newPath": "archive/wiedijk_100_theorems/area_of_a_circle.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/ascending_descending_sequences.lean", "newPath": "archive/wiedijk_100_theorems/ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/ballot_problem.lean", "newPath": "archive/wiedijk_100_theorems/ballot_problem.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/birthday_problem.lean", "newPath": "archive/wiedijk_100_theorems/birthday_problem.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/cubing_a_cube.lean", "newPath": "archive/wiedijk_100_theorems/cubing_a_cube.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/friendship_graphs.lean", "newPath": "archive/wiedijk_100_theorems/friendship_graphs.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/herons_formula.lean", "newPath": "archive/wiedijk_100_theorems/herons_formula.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/inverse_triangle_sum.lean", "newPath": "archive/wiedijk_100_theorems/inverse_triangle_sum.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/konigsberg.lean", "newPath": "archive/wiedijk_100_theorems/konigsberg.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/partition.lean", "newPath": "archive/wiedijk_100_theorems/partition.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/perfect_numbers.lean", "newPath": "archive/wiedijk_100_theorems/perfect_numbers.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/solution_of_cubic.lean", "newPath": "archive/wiedijk_100_theorems/solution_of_cubic.lean", "changes": []}, {"oldPath": "archive/wiedijk_100_theorems/sum_of_prime_reciprocals_diverges.lean", "newPath": "archive/wiedijk_100_theorems/sum_of_prime_reciprocals_diverges.lean", "changes": []}, {"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}, {"oldPath": "counterexamples/char_p_zero_ne_char_zero.lean", "newPath": "counterexamples/char_p_zero_ne_char_zero.lean", "changes": []}, {"oldPath": "counterexamples/cyclotomic_105.lean", "newPath": "counterexamples/cyclotomic_105.lean", "changes": []}, {"oldPath": "counterexamples/direct_sum_is_internal.lean", "newPath": "counterexamples/direct_sum_is_internal.lean", "changes": []}, {"oldPath": "counterexamples/girard.lean", "newPath": "counterexamples/girard.lean", "changes": []}, {"oldPath": "counterexamples/homogeneous_prime_not_prime.lean", "newPath": "counterexamples/homogeneous_prime_not_prime.lean", "changes": []}, {"oldPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "newPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "changes": []}, {"oldPath": "counterexamples/map_floor.lean", "newPath": "counterexamples/map_floor.lean", "changes": []}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "counterexamples/pseudoelement.lean", "newPath": "counterexamples/pseudoelement.lean", "changes": []}, {"oldPath": "counterexamples/quadratic_form.lean", "newPath": "counterexamples/quadratic_form.lean", "changes": []}, {"oldPath": "counterexamples/seminorm_lattice_not_distrib.lean", "newPath": "counterexamples/seminorm_lattice_not_distrib.lean", "changes": []}, {"oldPath": "counterexamples/sorgenfrey_line.lean", "newPath": "counterexamples/sorgenfrey_line.lean", "changes": []}, {"oldPath": "counterexamples/zero_divisors_in_add_monoid_algebras.lean", "newPath": "counterexamples/zero_divisors_in_add_monoid_algebras.lean", "changes": []}, {"oldPath": "src/algebra/expr.lean", "newPath": "src/algebra/expr.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/finite_type.lean", "newPath": "src/algebraic_geometry/morphisms/finite_type.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/ring_hom_properties.lean", "newPath": "src/algebraic_geometry/morphisms/ring_hom_properties.lean", "changes": []}, {"oldPath": "src/data/matrix/auto.lean", "newPath": "src/data/matrix/auto.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1689500824, "sha": "88e6ad41", "message": "fix: handle archive and counterexamples correctly when adding port comments (#19237)", "changes": [{"oldPath": "scripts/add_port_comments.py", "newPath": "scripts/add_port_comments.py", "changes": []}]}, {"timestamp": 1689500823, "sha": "016138c2", "message": "fix(tactic/linarith): instantiate metavariables in linarith (#19233)\nThis probably isn't exhaustive, but catches the really trivial case.\nThis doesn't appear to need forward-porting.", "changes": [{"oldPath": "src/tactic/linarith/datatypes.lean", "newPath": "src/tactic/linarith/datatypes.lean", "changes": []}, {"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "src/tactic/linarith/parsing.lean", "newPath": "src/tactic/linarith/parsing.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": "src/tactic/linarith/verification.lean", "newPath": "src/tactic/linarith/verification.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1689493831, "sha": "31b269b6", "message": "feat(set_theory/ordinal/natural_ops): define natural multiplication (#14324)", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "def", "blsub₂", ["ordinal"]], ["add", "theorem", "lt_blsub₂", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": [["add", "theorem", "mul_le_nmul", ["nat_ordinal"]], ["add", "theorem", "add_one_nmul", ["ordinal"]], ["add", "theorem", "le_nadd_left", ["ordinal"]], ["add", "theorem", "le_nadd_right", ["ordinal"]], ["add", "theorem", "le_nadd_self", ["ordinal"]], ["add", "theorem", "le_self_nadd", ["ordinal"]], ["add", "theorem", "lt_nmul_iff", ["ordinal"]], ["add", "theorem", "lt_nmul_iff₃'", ["ordinal"]], ["add", "theorem", "lt_nmul_iff₃", ["ordinal"]], ["add", "theorem", "nadd_eq_add", ["ordinal"]], ["add", "theorem", "nadd_le_nadd", ["ordinal"]], ["add", "theorem", "nadd_left_comm", ["ordinal"]], ["add", "theorem", "nadd_lt_nadd", ["ordinal"]], ["add", "theorem", "nadd_lt_nadd_of_le_of_lt", ["ordinal"]], ["add", "theorem", "nadd_lt_nadd_of_lt_of_le", ["ordinal"]], ["add", "theorem", "nadd_nmul", ["ordinal"]], ["add", "theorem", "nadd_one_nmul", ["ordinal"]], ["add", "theorem", "nadd_right_comm", ["ordinal"]], ["add", "theorem", "nmul_add_one", ["ordinal"]], ["add", "theorem", "nmul_assoc", ["ordinal"]], ["add", "theorem", "nmul_comm", ["ordinal"]], ["add", "theorem", "nmul_def", ["ordinal"]], ["add", "theorem", "nmul_eq_mul", ["ordinal"]], ["add", "theorem", "nmul_le_iff", ["ordinal"]], ["add", "theorem", "nmul_le_iff₃'", ["ordinal"]], ["add", "theorem", "nmul_le_iff₃", ["ordinal"]], ["add", "theorem", "nmul_le_nmul_of_nonneg_left", ["ordinal"]], ["add", "theorem", "nmul_le_nmul_of_nonneg_right", ["ordinal"]], ["add", "theorem", "nmul_lt_nmul_of_pos_left", ["ordinal"]], ["add", "theorem", "nmul_lt_nmul_of_pos_right", ["ordinal"]], ["add", "theorem", "nmul_nadd", ["ordinal"]], ["add", "theorem", "nmul_nadd_le", ["ordinal"]], ["add", "theorem", "nmul_nadd_le₃'", ["ordinal"]], ["add", "theorem", "nmul_nadd_le₃", ["ordinal"]], ["add", "theorem", "nmul_nadd_lt", ["ordinal"]], ["add", "theorem", "nmul_nadd_lt₃'", ["ordinal"]], ["add", "theorem", "nmul_nadd_lt₃", ["ordinal"]], ["add", "theorem", "nmul_nadd_one", ["ordinal"]], ["add", "theorem", "nmul_nonempty", ["ordinal"]], ["add", "theorem", "nmul_one", ["ordinal"]], ["add", "theorem", "nmul_succ", ["ordinal"]], ["add", "theorem", "nmul_zero", ["ordinal"]], ["add", "theorem", "one_nmul", ["ordinal"]], ["add", "theorem", "succ_nmul", ["ordinal"]], ["mod", "theorem", "to_nat_ordinal_max", ["ordinal"]], ["mod", "theorem", "to_nat_ordinal_min", ["ordinal"]], ["add", "theorem", "zero_nmul", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": [["del", "def", "blsub₂", ["ordinal"]], ["del", "theorem", "lt_blsub₂", ["ordinal"]]]}]}, {"timestamp": 1689423570, "sha": "2fe465de", "message": "chore(*): add mathlib4 synchronization comments (#19231)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.big_operators.norm_num`\n* `algebraic_geometry.projective_spectrum.scheme`\n* `analysis.analytic.inverse`\n* `analysis.inner_product_space.of_norm`\n* `analysis.normed.group.SemiNormedGroup.completion`\n* `category_theory.monad.monadicity`\n* `data.buffer.parser.basic`\n* `data.buffer.parser.numeral`\n* `data.fintype.array`\n* `data.hash_map`\n* `geometry.manifold.algebra.left_invariant_derivation`\n* `geometry.manifold.cont_mdiff_mfderiv`\n* `geometry.manifold.vector_bundle.hom`\n* `linear_algebra.clifford_algebra.even_equiv`\n* `ring_theory.etale`\n* `ring_theory.kaehler`\n* `tactic.group`\n* `testing.slim_check.functions`", "changes": [{"oldPath": "src/algebra/big_operators/norm_num.lean", "newPath": "src/algebra/big_operators/norm_num.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "newPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/of_norm.lean", "newPath": "src/analysis/inner_product_space/of_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "changes": []}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/numeral.lean", "newPath": "src/data/buffer/parser/numeral.lean", "changes": []}, {"oldPath": "src/data/fintype/array.lean", "newPath": "src/data/fintype/array.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "newPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/hom.lean", "newPath": "src/geometry/manifold/vector_bundle/hom.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/even_equiv.lean", "newPath": "src/linear_algebra/clifford_algebra/even_equiv.lean", "changes": []}, {"oldPath": "src/ring_theory/etale.lean", "newPath": "src/ring_theory/etale.lean", "changes": []}, {"oldPath": "src/ring_theory/kaehler.lean", "newPath": "src/ring_theory/kaehler.lean", "changes": []}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}]}, {"timestamp": 1689383300, "sha": "c1acdccd", "message": "fix(tactic/norm_num): Do not allow typos in simp lemmas if they are unused (#17981)\nPreviously\n```lean\nimport tactic.norm_num\nexample : 1 + 1 = 2 :=\nby norm_num [nonsense]\n```\nwas legal. More realistically, if a lemma was added to the simp set then renamed, `norm_num [old_name]` would keep working even if the lemma no longer existed. This only seemed to happen once in mathlib, in the tests.\nIt feels a bit silly to build the lemma set only to discard it, but we already rebuild the same lemma set on every iteration of the `repeat1`", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1689379334, "sha": "6b711d2b", "message": "feat(data/matrix/auto): lemmas for arbitrary concrete matrices generated via auto_params (#15738)\nThis adds a lemma `matrix.mul_fin` that works for arbitrary dimensions of concrete matrices indexed by `fin`.\nIt uses a similar strategy to `category_theory.reassoc_of` to have a tactic populate wildcards in the lemma statement.\nFor example:\n```lean\nexample {α} [add_comm_monoid α] [has_mul α] (a₁₁ a₁₂ a₂₁ a₂₂ b₁₁ b₁₂ b₂₁ b₂₂ : α) :\n !![a₁₁, a₁₂;\n a₂₁, a₂₂] ⬝ !![b₁₁, b₁₂;\n b₂₁, b₂₂] = !![a₁₁ * b₁₁ + a₁₂ * b₂₁, a₁₁ * b₁₂ + a₁₂ * b₂₂;\n a₂₁ * b₁₁ + a₂₂ * b₂₁, a₂₁ * b₁₂ + a₂₂ * b₂₂] :=\nbegin\n rw mul_fin,\nend\nexample {α} [add_comm_monoid α] [has_mul α] (a₁₁ a₁₂ b₁₁ b₁₂ b₂₁ b₂₂ : α) :\n !![a₁₁, a₁₂] ⬝ !![b₁₁, b₁₂;\n b₂₁, b₂₂] = !![a₁₁ * b₁₁ + a₁₂ * b₂₁, a₁₁ * b₁₂ + a₁₂ * b₂₂;] :=\nbegin\n rw mul_fin,\nend\n```\nRelevant zulip threads:\n* [Explicit vector unfolding](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Explicit.20vector.20unfolding)\n* [concrete matrix multiplication](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/concrete.20matrix.20multiplication/near/291208624)\n* [A tactic for expanding matrices into coefficients](https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F-tactics/topic/A.20tactic.20for.20expanding.20matrices.20into.20coefficients)", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": null, "newPath": "src/algebra/expr.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/matrix/auto.lean", "changes": [["add", "def", "mmap", ["fin"]], ["add", "theorem", "fin_eta", ["matrix"]], ["add", "theorem", "of_mul_of_fin", ["matrix"]], ["add", "theorem", "of_mul_of_fin_aux", ["matrix"]]]}, {"oldPath": "test/matrix_reflection.lean", "newPath": "test/matrix_reflection.lean", "changes": []}]}, {"timestamp": 1689364729, "sha": "1d29de43", "message": "feat(data/*/interval): `finset.uIcc` on concrete structures (#18838)\nCalculate the size of `finset.uIcc` in `ℕ`, `ℤ`, `fin`, `prod`, `pi`, `multiset`, `finset`...", "changes": [{"oldPath": "src/data/dfinsupp/interval.lean", "newPath": "src/data/dfinsupp/interval.lean", "changes": [["add", "theorem", "card_uIcc", ["dfinsupp"]]]}, {"oldPath": "src/data/dfinsupp/multiset.lean", "newPath": "src/data/dfinsupp/multiset.lean", "changes": [["add", "theorem", "to_multiset_inf", ["dfinsupp"]], ["add", "theorem", "to_multiset_inj", ["dfinsupp"]], ["add", "theorem", "to_multiset_injective", ["dfinsupp"]], ["add", "theorem", "to_multiset_le_to_multiset", ["dfinsupp"]], ["add", "theorem", "to_multiset_lt_to_multiset", ["dfinsupp"]], ["add", "theorem", "to_multiset_sup", ["dfinsupp"]], ["mod", "theorem", "to_multiset_to_dfinsupp", ["dfinsupp"]], ["add", "theorem", "to_dfinsupp_inj", ["multiset"]], ["add", "theorem", "to_dfinsupp_injective", ["multiset"]], ["add", "theorem", "to_dfinsupp_inter", ["multiset"]], ["mod", "theorem", "to_dfinsupp_le_to_dfinsupp", ["multiset"]], ["add", "theorem", "to_dfinsupp_lt_to_dfinsupp", ["multiset"]], ["add", "theorem", "to_dfinsupp_union", ["multiset"]]]}, {"oldPath": "src/data/dfinsupp/order.lean", "newPath": "src/data/dfinsupp/order.lean", "changes": [["add", "theorem", "support_inf_union_support_sup", ["dfinsupp"]], ["add", "theorem", "support_sup_union_support_inf", ["dfinsupp"]]]}, {"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["add", "theorem", "card_fintype_uIcc", ["fin"]], ["add", "theorem", "card_uIcc", ["fin"]], ["add", "theorem", "coe_inf", ["fin"]], ["add", "theorem", "coe_max", ["fin"]], ["add", "theorem", "coe_min", ["fin"]], ["add", "theorem", "coe_sup", ["fin"]], ["add", "theorem", "map_subtype_embedding_uIcc", ["fin"]], ["add", "theorem", "uIcc_eq_finset_subtype", ["fin"]]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["mod", "theorem", "mem_uIcc_of_ge", ["finset"]], ["mod", "theorem", "mem_uIcc_of_le", ["finset"]], ["mod", "theorem", "uIcc_subset_uIcc_iff_le'", ["finset"]], ["mod", "theorem", "uIcc_subset_uIcc_left", ["finset"]], ["mod", "theorem", "uIcc_subset_uIcc_right", ["finset"]]]}, {"oldPath": "src/data/finsupp/interval.lean", "newPath": "src/data/finsupp/interval.lean", "changes": [["add", "theorem", "card_uIcc", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/order.lean", "newPath": "src/data/finsupp/order.lean", "changes": [["add", "theorem", "support_inf_union_support_sup", ["finsupp"]], ["add", "theorem", "support_sup_union_support_inf", ["finsupp"]]]}, {"oldPath": "src/data/int/interval.lean", "newPath": "src/data/int/interval.lean", "changes": [["mod", "theorem", "card_Icc", ["int"]], ["mod", "theorem", "card_Ico", ["int"]], ["mod", "theorem", "card_Ioc", ["int"]], ["mod", "theorem", "card_Ioo", ["int"]], ["add", "theorem", "card_fintype_uIcc", ["int"]], ["add", "theorem", "card_uIcc", ["int"]], ["add", "theorem", "uIcc_eq_finset_map", ["int"]]]}, {"oldPath": "src/data/multiset/interval.lean", "newPath": "src/data/multiset/interval.lean", "changes": [["add", "theorem", "card_uIcc", ["multiset"]], ["add", "theorem", "uIcc_eq", ["multiset"]]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "card_uIcc", ["nat"]], ["add", "theorem", "uIcc_eq_range'", ["nat"]]]}, {"oldPath": "src/data/pi/interval.lean", "newPath": "src/data/pi/interval.lean", "changes": [["mod", "theorem", "card_Ici", ["pi"]], ["mod", "theorem", "card_Ico", ["pi"]], ["mod", "theorem", "card_Iio", ["pi"]], ["mod", "theorem", "card_Ioc", ["pi"]], ["mod", "theorem", "card_Ioi", ["pi"]], ["mod", "theorem", "card_Ioo", ["pi"]], ["add", "theorem", "card_uIcc", ["pi"]], ["add", "theorem", "uIcc_eq", ["pi"]]]}, {"oldPath": "src/data/pnat/interval.lean", "newPath": "src/data/pnat/interval.lean", "changes": [["add", "theorem", "card_fintype_uIcc", ["pnat"]], ["add", "theorem", "card_uIcc", ["pnat"]], ["mod", "theorem", "map_subtype_embedding_Icc", ["pnat"]], ["mod", "theorem", "map_subtype_embedding_Ico", ["pnat"]], ["mod", "theorem", "map_subtype_embedding_Ioc", ["pnat"]], ["mod", "theorem", "map_subtype_embedding_Ioo", ["pnat"]], ["add", "theorem", "map_subtype_embedding_uIcc", ["pnat"]], ["add", "theorem", "uIcc_eq_finset_subtype", ["pnat"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "theorem", "finite_interval", ["set"]]]}]}, {"timestamp": 1689364728, "sha": "2c84c2c5", "message": "feat(order/well_founded_set): `prod.lex` is well-founded (#18665)", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["add", "theorem", "mono", ["well_founded"]], ["add", "theorem", "on_fun", ["well_founded"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "mono'", ["set", "well_founded_on"]], ["add", "theorem", "prod_lex_of_well_founded_on_fiber", ["set", "well_founded_on"]], ["add", "theorem", "sigma_lex_of_well_founded_on_fiber", ["set", "well_founded_on"]], ["add", "theorem", "well_founded_on_image", ["set"]], ["add", "theorem", "well_founded_on_range", ["set"]], ["add", "theorem", "well_founded_on_univ", ["set"]], ["add", "theorem", "prod_lex_of_well_founded_on_fiber", ["well_founded"]], ["add", "theorem", "sigma_lex_of_well_founded_on_fiber", ["well_founded"]], ["add", "theorem", "well_founded_on", ["well_founded"]]]}]}, {"timestamp": 1689352209, "sha": "d07245fd", "message": "feat(group_theory/order_of_element): Order in `α × β` (#18719)\nThe order of `(a, b)` is the lcm of the orders of `a` and `b`. Match `pow` and `zpow` lemmas. Also some `variables` noise because I could not use `x` to mean what I wanted, and incidentally the type `A` was mostly unused.", "changes": [{"oldPath": "src/data/prod/basic.lean", "newPath": "src/data/prod/basic.lean", "changes": [["mod", "theorem", "map_id", ["prod"]]]}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "is_fixed_pt_prod_map", ["function"]], ["add", "theorem", "is_periodic_pt_prod_map", ["function"]], ["add", "theorem", "iterate_prod_map", ["function"]], ["add", "theorem", "minimal_period_fst_dvd", ["function"]], ["add", "theorem", "minimal_period_prod_map", ["function"]], ["add", "theorem", "minimal_period_snd_dvd", ["function"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "injective_zpow_iff_not_is_of_fin_order", []], ["add", "theorem", "fst", ["is_of_fin_order"]], ["add", "theorem", "mono", ["is_of_fin_order"]], ["add", "theorem", "prod_mk", ["is_of_fin_order"]], ["add", "theorem", "snd", ["is_of_fin_order"]], ["mod", "theorem", "is_of_fin_order", ["monoid_hom"]], ["add", "theorem", "order_of_fst_dvd_order_of", []], ["add", "theorem", "order_of_snd_dvd_order_of", []], ["add", "theorem", "zpow_eq_one_iff_modeq", []], ["add", "theorem", "zpow_eq_zpow_iff_modeq", []]]}]}, {"timestamp": 1689256664, "sha": "d608fc5d", "message": "feat(analysis/calculus/fderiv/mul): derivative of inverse in division rings (#19127)", "changes": [{"oldPath": "src/analysis/calculus/fderiv/mul.lean", "newPath": "src/analysis/calculus/fderiv/mul.lean", "changes": [["add", "theorem", "inv'", ["differentiable"]], ["add", "theorem", "inverse", ["differentiable"]], ["add", "theorem", "inv'", ["differentiable_at"]], ["add", "theorem", "inverse", ["differentiable_at"]], ["add", "theorem", "differentiable_at_inv'", []], ["mod", "theorem", "differentiable_at_inverse", []], ["add", "theorem", "inv'", ["differentiable_on"]], ["add", "theorem", "inverse", ["differentiable_on"]], ["add", "theorem", "differentiable_on_inv'", []], ["add", "theorem", "differentiable_on_inverse", []], ["add", "theorem", "inv'", ["differentiable_within_at"]], ["add", "theorem", "inverse", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_inv'", []], ["add", "theorem", "differentiable_within_at_inverse", []], ["add", "theorem", "fderiv_inv'", []], ["add", "theorem", "fderiv_within_inv'", []], ["add", "theorem", "has_fderiv_at_inv'", []]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}]}, {"timestamp": 1689244868, "sha": "cd391184", "message": "feat(*/prod): `prod_prod_prod` equivs (#19235)\nThese send `((a, b), (c, d))` to `((a, c), (b, d))`, and this commit provides this bundled as `equiv`, `add_equiv`, `mul_equiv`, `ring_equiv`, and `linear_equiv`.\nWe already have something analogous for `tensor_product`.", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "def", "prod_prod_prod_comm", ["mul_equiv"]], ["add", "theorem", "prod_prod_prod_comm_symm", ["mul_equiv"]], ["add", "theorem", "prod_prod_prod_comm_to_equiv", ["mul_equiv"]]]}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": [["add", "def", "prod_prod_prod_comm", ["ring_equiv"]], ["add", "theorem", "prod_prod_prod_comm_symm", ["ring_equiv"]], ["add", "theorem", "prod_prod_prod_comm_to_add_equiv", ["ring_equiv"]], ["add", "theorem", "prod_prod_prod_comm_to_equiv", ["ring_equiv"]], ["add", "theorem", "prod_prod_prod_comm_to_mul_equiv", ["ring_equiv"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "def", "prod_prod_prod_comm", ["linear_equiv"]], ["add", "theorem", "prod_prod_prod_comm_symm", ["linear_equiv"]], ["add", "theorem", "prod_prod_prod_comm_to_add_equiv", ["linear_equiv"]]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "prod_prod_prod_comm", ["equiv"]], ["add", "theorem", "prod_prod_prod_comm_symm", ["equiv"]]]}]}, {"timestamp": 1689197916, "sha": "baa88307", "message": "feat(analysis/inner_product_space/of_norm): Create an inner product from a norm (#4798)\nA normed space respecting the polarization identity is an inner product space.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/of_norm.lean", "changes": [["add", "theorem", "to_inner_product_spaceable", ["inner_product_space"]], ["add", "theorem", "add_left", ["inner_product_spaceable"]], ["add", "theorem", "inner_", ["inner_product_spaceable", "continuous"]], ["add", "theorem", "conj_symm", ["inner_product_spaceable", "inner_"]], ["add", "theorem", "norm_sq", ["inner_product_spaceable", "inner_"]], ["add", "theorem", "inner_prop", ["inner_product_spaceable"]], ["add", "theorem", "inner_prop_neg_one", ["inner_product_spaceable"]], ["add", "theorem", "nat", ["inner_product_spaceable"]], ["add", "theorem", "nonempty_inner_product_space", []]]}, {"oldPath": "src/data/is_R_or_C/basic.lean", "newPath": "src/data/is_R_or_C/basic.lean", "changes": [["add", "theorem", "norm_I_of_ne_zero", ["is_R_or_C"]]]}]}, {"timestamp": 1689186464, "sha": "b01d6eb9", "message": "fix(control/traversable/derive): the `functor` deriving handler makes weird definitions for inductive types which have recursive arguments separated by a non-recursive argument (#19228)\nI found this bug during the porting.\nThe current deriving handler doesn't work for this.\n```lean\n@[derive [traversable,is_lawful_traversable]]\ninductive my_tree' (α : Type)\n| leaf : my_tree'\n| node : my_tree' → α → my_tree' → my_tree'\n```\nThis is because the `functor` deriving handler makes weird definitions for inductive types which have recursive arguments separated by a non-recursive argument.\nFortunatelly, the cause of this bug is just a mistake of the argument in `control.traversable.derive`.", "changes": [{"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "test/traversable.lean", "newPath": "test/traversable.lean", "changes": [["add", "inductive", "my_tree'", []]]}]}, {"timestamp": 1689186462, "sha": "41bef4ae", "message": "feat(analysis/normed/group/basic): norm lemmas for lipschitz and antilipschitz (#19103)\nThis also corrects some nonsense names produced by to_additive.", "changes": [{"oldPath": "src/analysis/calculus/fderiv/basic.lean", "newPath": "src/analysis/calculus/fderiv/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "le_mul_nnnorm'", ["antilipschitz_with"]], ["add", "theorem", "le_mul_norm'", ["antilipschitz_with"]], ["mod", "theorem", "le_mul_norm_div", ["antilipschitz_with"]], ["add", "theorem", "dist_le_norm_add_norm'", []], ["del", "theorem", "dist_le_norm_mul_norm", []], ["add", "theorem", "nnorm_le_mul'", ["lipschitz_with"]], ["add", "theorem", "norm_le_mul'", ["lipschitz_with"]], ["del", "theorem", "bound_of_antilipschitz", ["monoid_hom_class"]], ["add", "theorem", "bound_of_antilipschitz", ["one_hom_class"]]]}, {"oldPath": "src/analysis/normed_space/continuous_linear_map.lean", "newPath": "src/analysis/normed_space/continuous_linear_map.lean", "changes": []}]}, {"timestamp": 1689175712, "sha": "d3b54a9f", "message": "fix(tactic/interval_cases): instantiate metavars (#19232)\nThe test included in this commit fails without this change.\nThis does not need forward-porting, the test already passes in Lean 4.", "changes": [{"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "test/interval_cases.lean", "newPath": "test/interval_cases.lean", "changes": []}]}, {"timestamp": 1689175711, "sha": "d9e96a3e", "message": "feat(data/list/dedup): Lemmas about `list.dedup` (#19142)\nBasic lemmas about `dedup` applied with `cons`, `nil`, `head`, and `tail`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_finset_nonempty_iff", ["list"]], ["add", "theorem", "to_finset_nonempty", ["multiset"]]]}, {"oldPath": "src/data/list/dedup.lean", "newPath": "src/data/list/dedup.lean", "changes": [["add", "theorem", "dedup_eq_cons", ["list"]], ["add", "theorem", "dedup_eq_nil", ["list"]], ["add", "theorem", "head_dedup", ["list"]], ["add", "theorem", "tail_dedup", ["list"]]]}]}, {"timestamp": 1689175710, "sha": "92bd7b1f", "message": "feat(analysis/convex): convexity of n-ary sums (#18943)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "coe_convex_add_submonoid", []], ["add", "def", "convex_add_submonoid", []], ["add", "theorem", "convex_list_sum", []], ["add", "theorem", "convex_multiset_sum", []], ["add", "theorem", "convex_sum", []], ["add", "theorem", "convex_zero", []], ["add", "theorem", "mem_convex_add_submonoid", []]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["add", "def", "convex_hull_add_monoid_hom", []], ["add", "theorem", "convex_hull_list_sum", []], ["add", "theorem", "convex_hull_multiset_sum", []], ["add", "theorem", "convex_hull_sum", []]]}, {"oldPath": "src/analysis/convex/hull.lean", "newPath": "src/analysis/convex/hull.lean", "changes": [["add", "theorem", "convex_hull_zero", []]]}, {"oldPath": "src/measure_theory/measure/haar/of_basis.lean", "newPath": "src/measure_theory/measure/haar/of_basis.lean", "changes": []}]}, {"timestamp": 1689164134, "sha": "3a2b5524", "message": "feat(data/fin/basic): extra instances that cover `fin 0` (#18970)\nThese apply to `fin 0`, unlike the `comm_ring` instance which needs `ne_zero n`.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/defs.lean", "newPath": "src/data/zmod/defs.lean", "changes": []}]}, {"timestamp": 1689090363, "sha": "4e24c4bf", "message": "feat(data/set/intervals/proj_Icc): Extending from `Ici a` (#18795)\nDefine the `Ici` and `Iic` versions of `set.proj_Icc`/`set.Icc_extend`. Slightly reorder the lemmas to allow better overall structure.\nThis is useful for extending convex functions by a junk value.", "changes": [{"oldPath": "src/data/set/intervals/proj_Icc.lean", "newPath": "src/data/set/intervals/proj_Icc.lean", "changes": [["del", "theorem", "Icc_extend", ["monotone"]], ["add", "theorem", "Icc_extend_apply", ["set"]], ["add", "def", "Ici_extend", ["set"]], ["add", "theorem", "Ici_extend_apply", ["set"]], ["add", "theorem", "Ici_extend_coe", ["set"]], ["add", "theorem", "Ici_extend_of_le", ["set"]], ["add", "theorem", "Ici_extend_of_mem", ["set"]], ["add", "theorem", "Ici_extend_self", ["set"]], ["add", "def", "Iic_extend", ["set"]], ["add", "theorem", "Iic_extend_apply", ["set"]], ["add", "theorem", "Iic_extend_coe", ["set"]], ["add", "theorem", "Iic_extend_of_le", ["set"]], ["add", "theorem", "Iic_extend_of_mem", ["set"]], ["add", "theorem", "Iic_extend_self", ["set"]], ["add", "theorem", "coe_proj_Icc", ["set"]], ["add", "theorem", "coe_proj_Ici", ["set"]], ["add", "theorem", "coe_proj_Iic", ["set"]], ["add", "theorem", "monotone_proj_Ici", ["set"]], ["add", "theorem", "monotone_proj_Iic", ["set"]], ["mod", "theorem", "proj_Icc_surjective", ["set"]], ["add", "def", "proj_Ici", ["set"]], ["add", "theorem", "proj_Ici_coe", ["set"]], ["add", "theorem", "proj_Ici_eq_self", ["set"]], ["add", "theorem", "proj_Ici_of_le", ["set"]], ["add", "theorem", "proj_Ici_of_mem", ["set"]], ["add", "theorem", "proj_Ici_self", ["set"]], ["add", "theorem", "proj_Ici_surj_on", ["set"]], ["add", "theorem", "proj_Ici_surjective", ["set"]], ["add", "def", "proj_Iic", ["set"]], ["add", "theorem", "proj_Iic_coe", ["set"]], ["add", "theorem", "proj_Iic_eq_self", ["set"]], ["add", "theorem", "proj_Iic_of_le", ["set"]], ["add", "theorem", "proj_Iic_of_mem", ["set"]], ["add", "theorem", "proj_Iic_self", ["set"]], ["add", "theorem", "proj_Iic_surj_on", ["set"]], ["add", "theorem", "proj_Iic_surjective", ["set"]], ["add", "theorem", "range_Ici_extend", ["set"]], ["add", "theorem", "range_Iic_extend", ["set"]], ["mod", "theorem", "range_proj_Icc", ["set"]], ["add", "theorem", "range_proj_Ici", ["set"]], ["add", "theorem", "range_proj_Iic", ["set"]], ["add", "theorem", "strict_mono_on_proj_Ici", ["set"]], ["add", "theorem", "strict_mono_on_proj_Iic", ["set"]], ["add", "theorem", "strict_mono_on_Ici_extend", ["strict_mono"]], ["add", "theorem", "strict_mono_on_Iic_extend", ["strict_mono"]]]}]}, {"timestamp": 1689079214, "sha": "3ed3f98a", "message": "feat(data/nat/order/basic): `a + b - 1 ≤ a * b` (#18737)\nand golf `max_eq_zero_iff`/`min_eq_zero_iff`\nTo be used for Kneser's addition theorem.", "changes": [{"oldPath": "src/data/nat/order/basic.lean", "newPath": "src/data/nat/order/basic.lean", "changes": [["add", "theorem", "add_sub_one_le_mul", ["nat"]], ["mod", "theorem", "max_eq_zero_iff", ["nat"]], ["mod", "theorem", "min_eq_zero_iff", ["nat"]]]}]}, {"timestamp": 1689079213, "sha": "bd365b1a", "message": "feat(group_theory/sylow): add inverse to card_eq_multiplicity (#18300)\nThe lemma `card_eq_multiplicity` states that a Sylow group of a finite group has cardinality p^n, where n is\nthe multiplicity of p in the group order. This PR adds an inverse definition `card_eq_multiplicity_to_sylow`, promoting a subgroup of the right cardinality to a Sylow group, and a simplification lemma `coe_card_eq_multiplicity_to_sylow` for the coercion of the resulting Sylow group back to a subgroup.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "coe_of_card", ["sylow"]], ["add", "def", "of_card", ["sylow"]]]}]}, {"timestamp": 1688819698, "sha": "1a51edf1", "message": "chore(*): add mathlib4 synchronization comments (#19229)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Algebra.basic`\n* `algebra.category.Algebra.limits`\n* `algebra.category.Module.change_of_rings`\n* `algebra.module.pid`\n* `algebraic_geometry.elliptic_curve.point`\n* `algebraic_geometry.morphisms.quasi_compact`\n* `algebraic_geometry.morphisms.quasi_separated`\n* `algebraic_geometry.projective_spectrum.structure_sheaf`\n* `algebraic_topology.fundamental_groupoid.induced_maps`\n* `algebraic_topology.fundamental_groupoid.product`\n* `algebraic_topology.fundamental_groupoid.simply_connected`\n* `analysis.normed.group.SemiNormedGroup.kernels`\n* `category_theory.adjunction.lifting`\n* `category_theory.monoidal.internal.Module`\n* `data.qpf.multivariate.constructions.cofix`\n* `geometry.manifold.diffeomorph`\n* `geometry.manifold.vector_bundle.smooth_section`\n* `geometry.manifold.whitney_embedding`\n* `group_theory.finite_abelian`\n* `linear_algebra.clifford_algebra.contraction`\n* `linear_algebra.exterior_algebra.grading`\n* `linear_algebra.matrix.schur_complement`\n* `linear_algebra.tensor_algebra.to_tensor_power`\n* `model_theory.direct_limit`\n* `model_theory.fraisse`\n* `number_theory.modular_forms.basic`\n* `representation_theory.character`\n* `representation_theory.group_cohomology.basic`\n* `ring_theory.jacobson`\n* `ring_theory.nullstellensatz`\n* `topology.metric_space.gromov_hausdorff`\n* `topology.vector_bundle.hom`", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/change_of_rings.lean", "newPath": "src/algebra/category/Module/change_of_rings.lean", "changes": []}, {"oldPath": "src/algebra/module/pid.lean", "newPath": "src/algebra/module/pid.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/elliptic_curve/point.lean", "newPath": "src/algebraic_geometry/elliptic_curve/point.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "newPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/quasi_separated.lean", "newPath": "src/algebraic_geometry/morphisms/quasi_separated.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "newPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/induced_maps.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/induced_maps.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/simply_connected.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/simply_connected.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/lifting.lean", "newPath": "src/category_theory/adjunction/lifting.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/smooth_section.lean", "newPath": "src/geometry/manifold/vector_bundle/smooth_section.lean", "changes": []}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}, {"oldPath": "src/group_theory/finite_abelian.lean", "newPath": "src/group_theory/finite_abelian.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/contraction.lean", "newPath": "src/linear_algebra/clifford_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/schur_complement.lean", "newPath": "src/linear_algebra/matrix/schur_complement.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/to_tensor_power.lean", "newPath": "src/linear_algebra/tensor_algebra/to_tensor_power.lean", "changes": []}, {"oldPath": "src/model_theory/direct_limit.lean", "newPath": "src/model_theory/direct_limit.lean", "changes": []}, {"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/basic.lean", "newPath": "src/number_theory/modular_forms/basic.lean", "changes": []}, {"oldPath": "src/representation_theory/character.lean", "newPath": "src/representation_theory/character.lean", "changes": []}, {"oldPath": "src/representation_theory/group_cohomology/basic.lean", "newPath": "src/representation_theory/group_cohomology/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": []}]}, {"timestamp": 1688648739, "sha": "8905e5ed", "message": "feat(topology/algebra/module/strong_topology): golf `arrow_congrSL` introduced in #19107 (#19128)\nI added more general definitions `precomp` and `postcomp` for expressing that (pre/post)-composing by a *fixed* continuous linear maps is continuous. These were planned about a year ago when I defined the strong topology and follow from [uniform_on_fun.precomp_uniform_continuous](https://leanprover-community.github.io/mathlib_docs/topology/uniform_space/uniform_convergence_topology.html#uniform_on_fun.precomp_uniform_continuous) and [uniform_on_fun.postcomp_uniform_continuous](https://leanprover-community.github.io/mathlib_docs/topology/uniform_space/uniform_convergence_topology.html#uniform_on_fun.postcomp_uniform_continuous).\nThe proof of continuity of `arrow_congrSL` is a direct consequence of these, so we don't have to do it by hand.\nThis is not really a \"golf\" since I added more lines than I removed, but these more general constructions will be needed at some point anyway (my use case was distribution theory) so I'm doing some proactive golfing :smile:.", "changes": [{"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/hom.lean", "newPath": "src/geometry/manifold/vector_bundle/hom.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/strong_topology.lean", "newPath": "src/topology/algebra/module/strong_topology.lean", "changes": [["del", "def", "arrow_congrₛₗ", ["continuous_linear_equiv"]], ["del", "theorem", "arrow_congrₛₗ_continuous", ["continuous_linear_equiv"]], ["add", "def", "postcomp", ["continuous_linear_map"]], ["add", "def", "precomp", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": []}]}, {"timestamp": 1688454190, "sha": "5dc6092d", "message": "chore(topology/sheaves): revert universe generalizations from #19153 (#19230)\nThis reverts commit 13361559d66b84f80b6d5a1c4a26aa5054766725.\nThese are just too difficult to forward port as is because of the `max u v =?= max u ?v` issue https://github.com/leanprover/lean4/issues/2297.\nWe have another candidate approach to this, using a new `UnivLE` typeclass, and I would prefer if we investigated that without the pressure of the port at the same time.\nThis will delay @hrmacbeth's plans to define meromorphic functions, perhaps.", "changes": [{"oldPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "newPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "changes": [["mod", "theorem", "exists_pow_mul_eq_zero_of_res_basic_open_eq_zero_of_is_compact", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/morphisms/quasi_separated.lean", "newPath": "src/algebraic_geometry/morphisms/quasi_separated.lean", "changes": [["mod", "theorem", "exists_eq_pow_mul_of_is_compact_of_is_quasi_separated", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["del", "theorem", "pi_lift_π_apply'", ["category_theory", "limits", "types"]], ["del", "theorem", "pi_map_π_apply'", ["category_theory", "limits", "types"]], ["mod", "theorem", "pi_map_π_apply", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": [["mod", "def", "map_cone_fork", ["Top", "presheaf", "sheaf_condition"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": [["mod", "def", "continuous_prelocal", ["Top"]], ["mod", "def", "stalk_to_fiber", ["Top"]], ["mod", "theorem", "stalk_to_fiber_germ", ["Top"]], ["mod", "theorem", "stalk_to_fiber_injective", ["Top"]], ["mod", "theorem", "stalk_to_fiber_surjective", ["Top"]], ["mod", "def", "subpresheaf_to_Types", ["Top"]], ["mod", "def", "subsheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["mod", "def", "pullback", ["Top", "presheaf"]], ["mod", "def", "pullback_hom_iso_pushforward_inv", ["Top", "presheaf"]], ["mod", "def", "pullback_inv_iso_pushforward_hom", ["Top", "presheaf"]], ["mod", "def", "pullback_map", ["Top", "presheaf"]], ["mod", "def", "pullback_obj", ["Top", "presheaf"]], ["mod", "def", "pullback_obj_obj_of_image_open", ["Top", "presheaf"]], ["mod", "def", "pushforward_pullback_adjunction", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": [["mod", "def", "presheaf_to_Type", ["Top"]], ["mod", "def", "presheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": [["mod", "def", "sheaf_to_Type", ["Top"]], ["mod", "def", "sheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1688365085, "sha": "728ef9db", "message": "chore(*): add mathlib4 synchronization comments (#19226)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Mon.adjunctions`\n* `algebra.category.Semigroup.basic`\n* `algebraic_geometry.function_field`\n* `algebraic_geometry.morphisms.basic`\n* `algebraic_geometry.morphisms.open_immersion`\n* `algebraic_geometry.morphisms.universally_closed`\n* `analysis.complex.upper_half_plane.manifold`\n* `analysis.convex.cone.proper`\n* `category_theory.limits.constructions.over.basic`\n* `geometry.manifold.algebra.smooth_functions`\n* `geometry.manifold.derivation_bundle`\n* `number_theory.modular_forms.jacobi_theta.manifold`\n* `representation_theory.fdRep`\n* `representation_theory.invariants`\n* `ring_theory.witt_vector.isocrystal`\n* `set_theory.game.domineering`\n* `set_theory.game.short`\n* `set_theory.game.state`\n* `topology.homotopy.product`", "changes": [{"oldPath": "src/algebra/category/Mon/adjunctions.lean", "newPath": "src/algebra/category/Mon/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/function_field.lean", "newPath": "src/algebraic_geometry/function_field.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/basic.lean", "newPath": "src/algebraic_geometry/morphisms/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/open_immersion.lean", "newPath": "src/algebraic_geometry/morphisms/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/universally_closed.lean", "newPath": "src/algebraic_geometry/morphisms/universally_closed.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/manifold.lean", "newPath": "src/analysis/complex/upper_half_plane/manifold.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone/proper.lean", "newPath": "src/analysis/convex/cone/proper.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/basic.lean", "newPath": "src/category_theory/limits/constructions/over/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/jacobi_theta/manifold.lean", "newPath": "src/number_theory/modular_forms/jacobi_theta/manifold.lean", "changes": []}, {"oldPath": "src/representation_theory/fdRep.lean", "newPath": "src/representation_theory/fdRep.lean", "changes": []}, {"oldPath": "src/representation_theory/invariants.lean", "newPath": "src/representation_theory/invariants.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}, {"oldPath": "src/set_theory/game/domineering.lean", "newPath": "src/set_theory/game/domineering.lean", "changes": []}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/game/state.lean", "newPath": "src/set_theory/game/state.lean", "changes": []}, {"oldPath": "src/topology/homotopy/product.lean", "newPath": "src/topology/homotopy/product.lean", "changes": []}]}, {"timestamp": 1688308526, "sha": "e473c319", "message": "refactor: redefine `bundle.total_space` (#19221)\n- Use a custom structure for `bundle.total_space`.\n - Use `bundle.total_space.mk` instead of `bundle.total_space_mk`.\n - Use `bundle.total_space.to_prod` instead of `equiv.sigma_equiv_prod`.\n - Use `bundle.total_space.mk'` (scoped notation) to specify `F`.\n - Rename `bundle.trivial.proj_snd` to\n `bundle.total_space.trivial_snd` to allow dot notation. Should we\n just use `bundle.total_space.snd` since `bundle.trivial` is now\n reducible?\n- Add an unused argument to `bundle.total_space`.\n- Make `bundle.trivial` and `bundle.continuous_linear_map` reducible.\n- Drop instances that are no longer needed.", "changes": [{"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": [["del", "theorem", "coe_fst", ["bundle"]], ["del", "theorem", "coe_snd", ["bundle"]], ["mod", "theorem", "coe_snd_map_apply", ["bundle"]], ["mod", "theorem", "coe_snd_map_smul", ["bundle"]], ["mod", "def", "lift", ["bundle", "pullback"]], ["mod", "theorem", "lift_mk", ["bundle", "pullback"]], ["del", "theorem", "proj_lift", ["bundle", "pullback"]], ["mod", "def", "pullback", ["bundle"]], ["del", "theorem", "pullback_total_space_embedding_snd", ["bundle"]], ["del", "theorem", "sigma_mk_eq_total_space_mk", ["bundle"]], ["del", "theorem", "to_total_space_coe", ["bundle"]], ["add", "theorem", "coe_eq_mk", ["bundle", "total_space"]], ["add", "theorem", "coe_proj", ["bundle", "total_space"]], ["add", "theorem", "coe_snd", ["bundle", "total_space"]], ["mod", "theorem", "eta", ["bundle", "total_space"]], ["del", "def", "proj", ["bundle", "total_space"]], ["del", "theorem", "proj_mk", ["bundle", "total_space"]], ["add", "def", "to_prod", ["bundle", "total_space"]], ["add", "def", "trivial_snd", ["bundle", "total_space"]], ["add", "structure", "total_space", ["bundle"]], ["del", "def", "total_space", ["bundle"]], ["del", "def", "total_space_mk", ["bundle"]], ["del", "def", "proj_snd", ["bundle", "trivial"]], ["mod", "def", "trivial", ["bundle"]]]}, {"oldPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "newPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["del", "theorem", "tangent_map_fst", []], ["del", "theorem", "tangent_map_within_fst", []]]}, {"oldPath": "src/geometry/manifold/vector_bundle/basic.lean", "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": [["mod", "theorem", "cont_mdiff_at_proj", ["bundle"]], ["mod", "theorem", "cont_mdiff_at_total_space", ["bundle"]], ["mod", "theorem", "cont_mdiff_on_proj", ["bundle"]], ["mod", "theorem", "cont_mdiff_proj", ["bundle"]], ["mod", "theorem", "cont_mdiff_within_at_total_space", ["bundle"]], ["mod", "theorem", "smooth_at_proj", ["bundle"]], ["mod", "theorem", "smooth_on_proj", ["bundle"]], ["mod", "theorem", "smooth_proj", ["bundle"]], ["mod", "theorem", "smooth_zero_section", ["bundle"]], ["mod", "theorem", "charted_space_chart_at", ["fiber_bundle"]], ["mod", "theorem", "charted_space_chart_at_symm_fst", ["fiber_bundle"]]]}, {"oldPath": "src/geometry/manifold/vector_bundle/hom.lean", "newPath": "src/geometry/manifold/vector_bundle/hom.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/pullback.lean", "newPath": "src/geometry/manifold/vector_bundle/pullback.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/smooth_section.lean", "newPath": "src/geometry/manifold/vector_bundle/smooth_section.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/tangent.lean", "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": [["mod", "def", "tangent_bundle", []]]}, {"oldPath": "src/topology/covering.lean", "newPath": "src/topology/covering.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/basic.lean", "newPath": "src/topology/fiber_bundle/basic.lean", "changes": [["mod", "theorem", "continuous_at_total_space", ["fiber_bundle"]], ["mod", "theorem", "continuous_proj", ["fiber_bundle"]], ["mod", "theorem", "continuous_total_space_mk", ["fiber_bundle"]], ["mod", "theorem", "continuous_within_at_total_space", ["fiber_bundle"]], ["mod", "theorem", "is_open_map_proj", ["fiber_bundle"]], ["mod", "theorem", "map_proj_nhds", ["fiber_bundle"]], ["mod", "theorem", "mem_trivialization_at_proj_source", ["fiber_bundle"]], ["mod", "theorem", "quotient_map_proj", ["fiber_bundle"]], ["mod", "theorem", "surjective_proj", ["fiber_bundle"]], ["mod", "theorem", "trivialization_at_proj_fst", ["fiber_bundle"]], ["mod", "def", "local_triv_at", ["fiber_bundle_core"]], ["mod", "def", "total_space", ["fiber_bundle_core"]], ["mod", "theorem", "continuous_on_of_comp_right", ["fiber_prebundle"]], ["mod", "theorem", "continuous_proj", ["fiber_prebundle"]], ["mod", "theorem", "is_open_source", ["fiber_prebundle"]], ["mod", "theorem", "is_open_target_of_mem_pretrivialization_atlas_inter", ["fiber_prebundle"]], ["mod", "def", "total_space_topology", ["fiber_prebundle"]]]}, {"oldPath": "src/topology/fiber_bundle/constructions.lean", "newPath": "src/topology/fiber_bundle/constructions.lean", "changes": [["mod", "theorem", "eq_trivialization", ["bundle", "trivial"]], ["mod", "def", "trivialization", ["bundle", "trivial"]], ["mod", "theorem", "continuous_lift", ["pullback"]], ["mod", "theorem", "continuous_proj", ["pullback"]], ["mod", "def", "pullback_topology", []], ["mod", "theorem", "continuous_to_fun", ["trivialization", "prod"]], ["mod", "theorem", "left_inv", ["trivialization", "prod"]], ["mod", "def", "to_fun'", ["trivialization", "prod"]], ["mod", "theorem", "prod_symm_apply", ["trivialization"]]]}, {"oldPath": "src/topology/fiber_bundle/trivialization.lean", "newPath": "src/topology/fiber_bundle/trivialization.lean", "changes": [["mod", "theorem", "apply_mk_symm", ["pretrivialization"]], ["mod", "theorem", "coe_mem_source", ["pretrivialization"]], ["mod", "theorem", "coe_symm_of_not_mem", ["pretrivialization"]], ["mod", "theorem", "mk_symm", ["pretrivialization"]], ["mod", "theorem", "symm_apply", ["pretrivialization"]], ["mod", "theorem", "symm_apply_apply_mk", ["pretrivialization"]], ["mod", "theorem", "symm_apply_of_not_mem", ["pretrivialization"]], ["mod", "theorem", "symm_coe_proj", ["pretrivialization"]], ["mod", "theorem", "symm_proj_apply", ["pretrivialization"]], ["mod", "theorem", "apply_mk_symm", ["trivialization"]], ["mod", "theorem", "continuous_on_symm", ["trivialization"]], ["mod", "theorem", "mk_symm", ["trivialization"]], ["mod", "theorem", "symm_apply", ["trivialization"]], ["mod", "theorem", "symm_apply_apply", ["trivialization"]], ["mod", "theorem", "symm_apply_apply_mk", ["trivialization"]], ["mod", "theorem", "symm_apply_of_not_mem", ["trivialization"]], ["mod", "theorem", "symm_proj_apply", ["trivialization"]]]}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["mod", "def", "zero_section", ["bundle"]], ["mod", "theorem", "zero_section_proj", ["bundle"]], ["mod", "theorem", "zero_section_snd", ["bundle"]], ["mod", "theorem", "continuous_on_coord_change", []], ["mod", "theorem", "coe_linear_map_at", ["pretrivialization"]], ["mod", "theorem", "coe_linear_map_at_of_mem", ["pretrivialization"]], ["mod", "def", "linear_equiv_at", ["pretrivialization"]], ["mod", "theorem", "linear_map_at_apply", ["pretrivialization"]], ["mod", "theorem", "linear_map_at_def_of_mem", ["pretrivialization"]], ["mod", "theorem", "linear_map_at_def_of_not_mem", ["pretrivialization"]], ["mod", "theorem", "linear_map_at_eq_zero", ["pretrivialization"]], ["mod", "theorem", "linear_map_at_symmₗ", ["pretrivialization"]], ["mod", "theorem", "symmₗ_linear_map_at", ["pretrivialization"]], ["mod", "theorem", "apply_eq_prod_continuous_linear_equiv_at", ["trivialization"]], ["mod", "theorem", "apply_symm_apply_eq_coord_changeL", ["trivialization"]], ["mod", "theorem", "coe_continuous_linear_equiv_at_eq", ["trivialization"]], ["mod", "theorem", "coe_coord_changeL'", ["trivialization"]], ["mod", "theorem", "coe_coord_changeL", ["trivialization"]], ["mod", "theorem", "coe_linear_map_at", ["trivialization"]], ["mod", "theorem", "coe_linear_map_at_of_mem", ["trivialization"]], ["mod", "theorem", "coe_symmₗ", ["trivialization"]], ["mod", "theorem", "comp_continuous_linear_equiv_at_eq_coord_change", ["trivialization"]], ["mod", "def", "continuous_linear_equiv_at", ["trivialization"]], ["mod", "theorem", "continuous_linear_equiv_at_apply'", ["trivialization"]], ["mod", "def", "continuous_linear_map_at", ["trivialization"]], ["mod", "theorem", "continuous_linear_map_at_symmL", ["trivialization"]], ["mod", "def", "coord_changeL", ["trivialization"]], ["mod", "theorem", "coord_changeL_apply'", ["trivialization"]], ["mod", "theorem", "coord_changeL_apply", ["trivialization"]], ["mod", "theorem", "coord_changeL_symm_apply", ["trivialization"]], ["mod", "def", "linear_equiv_at", ["trivialization"]], ["mod", "theorem", "linear_equiv_at_apply", ["trivialization"]], ["mod", "theorem", "linear_equiv_at_symm_apply", ["trivialization"]], ["mod", "theorem", "linear_map_at_apply", ["trivialization"]], ["mod", "theorem", "linear_map_at_def_of_mem", ["trivialization"]], ["mod", "theorem", "linear_map_at_def_of_not_mem", ["trivialization"]], ["mod", "theorem", "linear_map_at_symmₗ", ["trivialization"]], ["mod", "theorem", "mk_coord_changeL", ["trivialization"]], ["mod", "def", "symmL", ["trivialization"]], ["mod", "theorem", "symmL_continuous_linear_map_at", ["trivialization"]], ["mod", "theorem", "symm_apply_eq_mk_continuous_linear_equiv_at_symm", ["trivialization"]], ["mod", "theorem", "symm_continuous_linear_equiv_at_eq", ["trivialization"]], ["mod", "theorem", "symm_coord_changeL", ["trivialization"]], ["mod", "theorem", "symmₗ_linear_map_at", ["trivialization"]], ["mod", "def", "local_triv", ["vector_bundle_core"]], ["mod", "def", "local_triv_at", ["vector_bundle_core"]]]}, {"oldPath": "src/topology/vector_bundle/constructions.lean", "newPath": "src/topology/vector_bundle/constructions.lean", "changes": [["mod", "theorem", "continuous_linear_equiv_at_prod", ["trivialization"]]]}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": []}]}, {"timestamp": 1688280683, "sha": "a176cb12", "message": "feat(linear_algebra/matrix/schur_complement): invertibility of block matrices (#19156)", "changes": [{"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/schur_complement.lean", "newPath": "src/linear_algebra/matrix/schur_complement.lean", "changes": [["add", "def", "from_blocks₁₁_invertible", ["matrix"]], ["add", "def", "from_blocks₂₂_invertible", ["matrix"]], ["add", "theorem", "inv_of_from_blocks₁₁_eq", ["matrix"]], ["add", "theorem", "inv_of_from_blocks₂₂_eq", ["matrix"]], ["add", "def", "invertible_equiv_from_blocks₁₁_invertible", ["matrix"]], ["add", "def", "invertible_equiv_from_blocks₂₂_invertible", ["matrix"]], ["add", "def", "invertible_of_from_blocks₁₁_invertible", ["matrix"]], ["add", "def", "invertible_of_from_blocks₂₂_invertible", ["matrix"]], ["add", "theorem", "is_unit_from_blocks_iff_of_invertible₁₁", ["matrix"]], ["add", "theorem", "is_unit_from_blocks_iff_of_invertible₂₂", ["matrix"]]]}]}, {"timestamp": 1688185654, "sha": "44b3f423", "message": "chore(scripts): update nolints.txt (#19227)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1688137759, "sha": "d0b19368", "message": "chore(*): add mathlib4 synchronization comments (#19220)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.fgModule.limits`\n* `algebra.homology.differential_object`\n* `algebraic_geometry.AffineScheme`\n* `algebraic_geometry.gluing`\n* `algebraic_geometry.limits`\n* `algebraic_geometry.properties`\n* `algebraic_geometry.pullbacks`\n* `linear_algebra.clifford_algebra.even`\n* `number_theory.legendre_symbol.norm_num`\n* `number_theory.zeta_function`\n* `order.category.omega_complete_partial_order`\n* `ring_theory.witt_vector.frobenius_fraction_field`\n* `set_theory.game.nim`\n* `set_theory.surreal.dyadic`\n* `topology.sheaves.skyscraper`", "changes": [{"oldPath": "src/algebra/category/fgModule/limits.lean", "newPath": "src/algebra/category/fgModule/limits.lean", "changes": []}, {"oldPath": "src/algebra/homology/differential_object.lean", "newPath": "src/algebra/homology/differential_object.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/gluing.lean", "newPath": "src/algebraic_geometry/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/limits.lean", "newPath": "src/algebraic_geometry/limits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/pullbacks.lean", "newPath": "src/algebraic_geometry/pullbacks.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/even.lean", "newPath": "src/linear_algebra/clifford_algebra/even.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/norm_num.lean", "newPath": "src/number_theory/legendre_symbol/norm_num.lean", "changes": []}, {"oldPath": "src/number_theory/zeta_function.lean", "newPath": "src/number_theory/zeta_function.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius_fraction_field.lean", "newPath": "src/ring_theory/witt_vector/frobenius_fraction_field.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}, {"oldPath": "src/topology/sheaves/skyscraper.lean", "newPath": "src/topology/sheaves/skyscraper.lean", "changes": []}]}, {"timestamp": 1688124576, "sha": "48fb5b52", "message": "refactor(*): move all `mk_simp_attribute` commands to 1 file (#19223)", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/control/basic.lean", "newPath": "src/control/basic.lean", "changes": []}, {"oldPath": "src/control/monad/basic.lean", "newPath": "src/control/monad/basic.lean", "changes": []}, {"oldPath": "src/data/is_R_or_C/basic.lean", "newPath": "src/data/is_R_or_C/basic.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/prod/basic.lean", "newPath": "src/data/prod/basic.lean", "changes": [["mod", "theorem", "map_mk", ["prod"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "inter_subset_left", ["set"]], ["mod", "theorem", "inter_univ", ["set"]], ["mod", "theorem", "mem_inter_iff", ["set"]], ["mod", "theorem", "mem_univ", ["set"]], ["mod", "theorem", "univ_inter", ["set"]]]}, {"oldPath": "src/data/set/image.lean", "newPath": "src/data/set/image.lean", "changes": [["mod", "theorem", "image_eq_empty", ["set"]], ["mod", "theorem", "mem_preimage", ["set"]], ["mod", "theorem", "mem_range_self", ["set"]], ["mod", "theorem", "preimage_id", ["set"]], ["mod", "theorem", "preimage_inter", ["set"]], ["mod", "theorem", "preimage_univ", ["set"]], ["mod", "theorem", "range_id", ["set"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["mod", "theorem", "mem_prod", ["set"]], ["mod", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["mod", "theorem", "range_prod_map", ["set"]], ["mod", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "theorem", "coe_mk", ["subtype"]]]}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "and_imp", []], ["mod", "theorem", "eq_iff_true_of_subsingleton", []], ["mod", "theorem", "forall_const", []], ["mod", "theorem", "heq_iff_eq", []]]}, {"oldPath": "src/logic/equiv/defs.lean", "newPath": "src/logic/equiv/defs.lean", "changes": [["mod", "theorem", "apply_symm_apply", ["equiv"]], ["mod", "def", "sigma_equiv_prod", ["equiv"]], ["mod", "theorem", "symm_apply_apply", ["equiv"]], ["mod", "theorem", "symm_symm", ["equiv"]]]}, {"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/mk_simp_attribute.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}]}, {"timestamp": 1688097852, "sha": "311ef8c4", "message": "chore(category_theory/concrete_category): reorder universes (#19222)\nThese will make life slightly easier dealing with our universe problems. Most of these changes have in fact already been made in mathlib4, and the remainder are in https://github.com/leanprover-community/mathlib4/pull/5605.", "changes": [{"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["mod", "def", "has_coe_to_sort", ["category_theory", "concrete_category"]], ["mod", "def", "forget", ["category_theory"]], ["mod", "def", "forget₂", ["category_theory"]], ["mod", "def", "has_forget_to_Type", ["category_theory"]], ["mod", "def", "mk'", ["category_theory", "has_forget₂"]]]}]}, {"timestamp": 1688050704, "sha": "9240e8be", "message": "chore(*): add mathlib4 synchronization comments (#19218)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_geometry.elliptic_curve.weierstrass`\n* `analysis.complex.upper_half_plane.basic`\n* `analysis.complex.upper_half_plane.functions_bounded_at_infty`\n* `analysis.complex.upper_half_plane.metric`\n* `analysis.complex.upper_half_plane.topology`\n* `analysis.fourier.riemann_lebesgue_lemma`\n* `analysis.inner_product_space.linear_pmap`\n* `analysis.special_functions.gamma.beta`\n* `category_theory.closed.ideal`\n* `category_theory.monad.equiv_mon`\n* `control.random`\n* `geometry.euclidean.monge_point`\n* `geometry.manifold.complex`\n* `geometry.manifold.partition_of_unity`\n* `logic.equiv.array`\n* `number_theory.legendre_symbol.jacobi_symbol`\n* `number_theory.modular`\n* `number_theory.modular_forms.jacobi_theta.basic`\n* `number_theory.modular_forms.slash_actions`\n* `number_theory.modular_forms.slash_invariant_forms`\n* `ring_theory.witt_vector.compare`\n* `ring_theory.witt_vector.discrete_valuation_ring`\n* `ring_theory.witt_vector.domain`\n* `ring_theory.witt_vector.frobenius`\n* `ring_theory.witt_vector.identities`\n* `ring_theory.witt_vector.init_tail`\n* `ring_theory.witt_vector.mul_coeff`\n* `ring_theory.witt_vector.truncated`\n* `ring_theory.witt_vector.verschiebung`\n* `set_theory.game.birthday`\n* `set_theory.game.impartial`\n* `set_theory.surreal.basic`\n* `testing.slim_check.gen`\n* `testing.slim_check.sampleable`\n* `testing.slim_check.testable`", "changes": [{"oldPath": "src/algebraic_geometry/elliptic_curve/weierstrass.lean", "newPath": "src/algebraic_geometry/elliptic_curve/weierstrass.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/functions_bounded_at_infty.lean", "newPath": "src/analysis/complex/upper_half_plane/functions_bounded_at_infty.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/metric.lean", "newPath": "src/analysis/complex/upper_half_plane/metric.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/topology.lean", "newPath": "src/analysis/complex/upper_half_plane/topology.lean", "changes": []}, {"oldPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "newPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/linear_pmap.lean", "newPath": "src/analysis/inner_product_space/linear_pmap.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma/beta.lean", "newPath": "src/analysis/special_functions/gamma/beta.lean", "changes": []}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": []}, {"oldPath": "src/control/random.lean", "newPath": "src/control/random.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/geometry/manifold/complex.lean", "newPath": "src/geometry/manifold/complex.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/logic/equiv/array.lean", "newPath": "src/logic/equiv/array.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "newPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/jacobi_theta/basic.lean", "newPath": "src/number_theory/modular_forms/jacobi_theta/basic.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/slash_actions.lean", "newPath": "src/number_theory/modular_forms/slash_actions.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "newPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/compare.lean", "newPath": "src/ring_theory/witt_vector/compare.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "newPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/domain.lean", "newPath": "src/ring_theory/witt_vector/domain.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/identities.lean", "newPath": "src/ring_theory/witt_vector/identities.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/init_tail.lean", "newPath": "src/ring_theory/witt_vector/init_tail.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/mul_coeff.lean", "newPath": "src/ring_theory/witt_vector/mul_coeff.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/verschiebung.lean", "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": []}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}]}, {"timestamp": 1688022112, "sha": "147b2943", "message": "feat(analysis/convex/cone/proper): add hyperplane_separation and comap (#19008)\nWe add the theorem `hyperplane_separation` which is a relative version of [convex_cone.hyperplane_separation_of_nonempty_of_is_closed_of_nmem](https://leanprover-community.github.io/mathlib_docs/analysis/convex/cone/dual.html#convex_cone.hyperplane_separation_of_nonempty_of_is_closed_of_nmem). This is the most general form of Farkas' lemma (that I know of) for convex cones. \nWe also add `proper_cone.comap` and a few theorems about it.", "changes": [{"oldPath": "src/analysis/convex/cone/proper.lean", "newPath": "src/analysis/convex/cone/proper.lean", "changes": [["add", "theorem", "coe_comap", ["proper_cone"]], ["add", "theorem", "comap_comap", ["proper_cone"]], ["add", "theorem", "comap_id", ["proper_cone"]], ["add", "theorem", "hyperplane_separation", ["proper_cone"]], ["add", "theorem", "hyperplane_separation_of_nmem", ["proper_cone"]], ["add", "theorem", "mem_comap", ["proper_cone"]]]}]}, {"timestamp": 1687932484, "sha": "08b63ab5", "message": "chore(*): add mathlib4 synchronization comments (#19216)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Mon.colimits`\n* `algebra.category.fgModule.basic`\n* `analysis.complex.upper_half_plane.basic`\n* `analysis.inner_product_space.linear_pmap`\n* `analysis.special_functions.gamma.beta`\n* `analysis.special_functions.gamma.bohr_mollerup`\n* `analysis.special_functions.gaussian`\n* `category_theory.closed.ideal`\n* `category_theory.monoidal.Bimod`\n* `combinatorics.simple_graph.regularity.bound`\n* `combinatorics.simple_graph.regularity.chunk`\n* `combinatorics.simple_graph.regularity.increment`\n* `combinatorics.simple_graph.regularity.lemma`\n* `control.random`\n* `geometry.manifold.complex`\n* `geometry.manifold.mfderiv`\n* `geometry.manifold.partition_of_unity`\n* `linear_algebra.exterior_algebra.of_alternating`\n* `logic.equiv.array`\n* `number_theory.bertrand`\n* `number_theory.legendre_symbol.gauss_eisenstein_lemmas`\n* `number_theory.legendre_symbol.gauss_sum`\n* `number_theory.legendre_symbol.jacobi_symbol`\n* `number_theory.legendre_symbol.quadratic_char.gauss_sum`\n* `number_theory.legendre_symbol.quadratic_reciprocity`\n* `number_theory.sum_two_squares`\n* `number_theory.zsqrtd.quadratic_reciprocity`\n* `ring_theory.dedekind_domain.selmer_group`\n* `ring_theory.witt_vector.frobenius`\n* `ring_theory.witt_vector.identities`\n* `ring_theory.witt_vector.init_tail`\n* `ring_theory.witt_vector.verschiebung`\n* `set_theory.game.basic`\n* `set_theory.game.impartial`\n* `set_theory.game.ordinal`\n* `set_theory.surreal.basic`\n* `testing.slim_check.gen`\n* `testing.slim_check.sampleable`\n* `testing.slim_check.testable`", "changes": [{"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/fgModule/basic.lean", "newPath": "src/algebra/category/fgModule/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma/bohr_mollerup.lean", "newPath": "src/analysis/special_functions/gamma/bohr_mollerup.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gaussian.lean", "newPath": "src/analysis/special_functions/gaussian.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Bimod.lean", "newPath": "src/category_theory/monoidal/Bimod.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/chunk.lean", "newPath": "src/combinatorics/simple_graph/regularity/chunk.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/increment.lean", "newPath": "src/combinatorics/simple_graph/regularity/increment.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/lemma.lean", "newPath": "src/combinatorics/simple_graph/regularity/lemma.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/of_alternating.lean", "newPath": "src/linear_algebra/exterior_algebra/of_alternating.lean", "changes": []}, {"oldPath": "src/number_theory/bertrand.lean", "newPath": "src/number_theory/bertrand.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "newPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char/gauss_sum.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char/gauss_sum.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/quadratic_reciprocity.lean", "newPath": "src/number_theory/zsqrtd/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/selmer_group.lean", "newPath": "src/ring_theory/dedekind_domain/selmer_group.lean", "changes": []}, {"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}]}, {"timestamp": 1687840115, "sha": "15db1b4f", "message": "chore(category_theory/limits/construction/over): rename default to basic (#19217)\nThis was a default file with content, so needs renaming. Afterwards it can just be ported as usual.", "changes": [{"oldPath": "src/category_theory/limits/constructions/over/default.lean", "newPath": "src/category_theory/limits/constructions/over/basic.lean", "changes": []}]}, {"timestamp": 1687792079, "sha": "8b981918", "message": "feat(analysis/inner_product_space): the adjoint for unbounded operators (#18820)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/linear_pmap.lean", "changes": [["add", "theorem", "to_pmap_adjoint_eq_adjoint_to_pmap_of_dense", ["continuous_linear_map"]], ["add", "def", "adjoint", ["linear_pmap"]], ["add", "theorem", "adjoint_apply_eq", ["linear_pmap"]], ["add", "theorem", "adjoint_apply_of_dense", ["linear_pmap"]], ["add", "theorem", "adjoint_apply_of_not_dense", ["linear_pmap"]], ["add", "def", "adjoint_aux", ["linear_pmap"]], ["add", "theorem", "adjoint_aux_inner", ["linear_pmap"]], ["add", "theorem", "adjoint_aux_unique", ["linear_pmap"]], ["add", "def", "adjoint_domain", ["linear_pmap"]], ["add", "def", "adjoint_domain_mk_clm", ["linear_pmap"]], ["add", "theorem", "adjoint_domain_mk_clm_apply", ["linear_pmap"]], ["add", "def", "adjoint_domain_mk_clm_extend", ["linear_pmap"]], ["add", "theorem", "adjoint_domain_mk_clm_extend_apply", ["linear_pmap"]], ["add", "theorem", "adjoint_is_formal_adjoint", ["linear_pmap"]], ["add", "theorem", "le_adjoint", ["linear_pmap", "is_formal_adjoint"]], ["add", "theorem", "symm", ["linear_pmap", "is_formal_adjoint"]], ["add", "def", "is_formal_adjoint", ["linear_pmap"]], ["add", "theorem", "mem_adjoint_domain_iff", ["linear_pmap"]], ["add", "theorem", "mem_adjoint_domain_of_exists", ["linear_pmap"]]]}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "to_pmap_domain", ["linear_map"]]]}]}, {"timestamp": 1687779320, "sha": "3ff3f2d6", "message": "feat(set_theory/cardinal/finite): prove lemmas to handle part_enat.card (#19198)\nProve some lemmas that allow to handle part_enat.card of finite cardinals,\nanalogous to those about nat.card", "changes": [{"oldPath": "src/data/finite/card.lean", "newPath": "src/data/finite/card.lean", "changes": [["add", "theorem", "card_eq_coe_nat_card", ["part_enat"]]]}, {"oldPath": "src/data/nat/part_enat.lean", "newPath": "src/data/nat/part_enat.lean", "changes": [["add", "theorem", "coe_succ_le_iff", ["part_enat"]], ["add", "theorem", "lt_coe_succ_iff_le", ["part_enat"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "sum_lt_prod", ["cardinal"]], ["add", "theorem", "to_nat_eq_iff_eq_of_lt_aleph_0", ["cardinal"]], ["add", "theorem", "to_part_enat_congr", ["cardinal"]], ["add", "theorem", "to_part_enat_eq_iff_eq_of_le_aleph_0", ["cardinal"]], ["add", "theorem", "to_part_enat_eq_top_iff_le_aleph_0", ["cardinal"]], ["add", "theorem", "to_part_enat_le_iff_le_of_le_aleph_0", ["cardinal"]], ["add", "theorem", "to_part_enat_le_iff_le_of_lt_aleph_0", ["cardinal"]], ["add", "theorem", "to_part_enat_lift", ["cardinal"]], ["add", "theorem", "to_part_enat_mono", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/finite.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": [["add", "theorem", "coe_nat_eq_to_part_enat_iff", ["cardinal"]], ["add", "theorem", "coe_nat_le_to_part_enat_iff", ["cardinal"]], ["add", "theorem", "coe_nat_lt_coe_iff_lt", ["cardinal"]], ["add", "theorem", "lt_coe_nat_iff_lt", ["cardinal"]], ["add", "theorem", "to_part_enat_eq_coe_nat_iff", ["cardinal"]], ["add", "theorem", "to_part_enat_le_coe_nat_iff", ["cardinal"]], ["add", "theorem", "card_congr", ["part_enat"]], ["add", "theorem", "card_eq_zero_iff_empty", ["part_enat"]], ["add", "theorem", "card_image_of_inj_on", ["part_enat"]], ["add", "theorem", "card_image_of_injective", ["part_enat"]], ["add", "theorem", "card_le_one_iff_subsingleton", ["part_enat"]], ["add", "theorem", "card_plift", ["part_enat"]], ["add", "theorem", "card_ulift", ["part_enat"]], ["add", "theorem", "is_finite_of_card", ["part_enat"]], ["add", "theorem", "one_lt_card_iff_nontrivial", ["part_enat"]]]}]}, {"timestamp": 1687755068, "sha": "30faa0c3", "message": "chore(*): add mathlib4 synchronization comments (#19215)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `field_theory.abel_ruffini`\n* `geometry.manifold.algebra.lie_group`\n* `geometry.manifold.algebra.monoid`\n* `geometry.manifold.algebra.structures`\n* `geometry.manifold.bump_function`\n* `geometry.manifold.cont_mdiff`\n* `geometry.manifold.cont_mdiff_map`\n* `geometry.manifold.vector_bundle.basic`\n* `geometry.manifold.vector_bundle.fiberwise_linear`\n* `geometry.manifold.vector_bundle.pullback`\n* `geometry.manifold.vector_bundle.tangent`\n* `linear_algebra.clifford_algebra.equivs`\n* `linear_algebra.clifford_algebra.fold`\n* `number_theory.class_number.finite`\n* `number_theory.class_number.function_field`\n* `number_theory.cyclotomic.gal`\n* `number_theory.cyclotomic.rat`\n* `number_theory.number_field.class_number`\n* `representation_theory.group_cohomology.resolution`\n* `topology.metric_space.dilation`", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/basic.lean", "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/fiberwise_linear.lean", "newPath": "src/geometry/manifold/vector_bundle/fiberwise_linear.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/pullback.lean", "newPath": "src/geometry/manifold/vector_bundle/pullback.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/tangent.lean", "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/fold.lean", "newPath": "src/linear_algebra/clifford_algebra/fold.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/function_field.lean", "newPath": "src/number_theory/class_number/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/rat.lean", "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/class_number.lean", "newPath": "src/number_theory/number_field/class_number.lean", "changes": []}, {"oldPath": "src/representation_theory/group_cohomology/resolution.lean", "newPath": "src/representation_theory/group_cohomology/resolution.lean", "changes": []}, {"oldPath": "src/topology/metric_space/dilation.lean", "newPath": "src/topology/metric_space/dilation.lean", "changes": []}]}, {"timestamp": 1687588492, "sha": "fdc286cc", "message": "chore(*): add mathlib4 synchronization comments (#19214)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_geometry.presheafed_space.gluing`\n* `analysis.calculus.bump_function_findim`\n* `field_theory.polynomial_galois_group`\n* `geometry.manifold.sheaf.basic`\n* `linear_algebra.clifford_algebra.conjugation`\n* `linear_algebra.clifford_algebra.grading`\n* `linear_algebra.clifford_algebra.star`\n* `linear_algebra.free_module.norm`\n* `number_theory.cyclotomic.discriminant`\n* `number_theory.legendre_symbol.add_character`\n* `number_theory.number_field.canonical_embedding`", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": []}, {"oldPath": "src/analysis/calculus/bump_function_findim.lean", "newPath": "src/analysis/calculus/bump_function_findim.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/sheaf/basic.lean", "newPath": "src/geometry/manifold/sheaf/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/star.lean", "newPath": "src/linear_algebra/clifford_algebra/star.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/norm.lean", "newPath": "src/linear_algebra/free_module/norm.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/canonical_embedding.lean", "newPath": "src/number_theory/number_field/canonical_embedding.lean", "changes": []}]}, {"timestamp": 1687547446, "sha": "93f88091", "message": "feat(topology/metric_space/dilation): Dilations on metric spaces (#14315)\nWe define `dilation α β` as the type of maps that satisfy `edist (f x) (f y) = r * edist x y` for all `x y`. Here `r : ℝ≥0`, so we do not exclude the degenerate case of dilations which collapse into constant maps. \nAfter this I will extend to `{linear, affine}_dilation_{equiv}`s and `{linear, affine}_isometry_{equiv}`s.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/topology/metric_space/dilation.lean", "changes": [["add", "theorem", "antilipschitz", ["dilation"]], ["add", "theorem", "cancel_left", ["dilation"]], ["add", "theorem", "cancel_right", ["dilation"]], ["add", "theorem", "coe_comp", ["dilation"]], ["add", "theorem", "coe_id", ["dilation"]], ["add", "theorem", "coe_mk", ["dilation"]], ["add", "theorem", "coe_mk_of_dist_eq", ["dilation"]], ["add", "theorem", "coe_mk_of_nndist_eq", ["dilation"]], ["add", "theorem", "coe_mul", ["dilation"]], ["add", "theorem", "coe_one", ["dilation"]], ["add", "def", "comp", ["dilation"]], ["add", "theorem", "comp_apply", ["dilation"]], ["add", "theorem", "comp_assoc", ["dilation"]], ["add", "theorem", "comp_continuous_iff", ["dilation"]], ["add", "theorem", "comp_continuous_on_iff", ["dilation"]], ["add", "theorem", "comp_id", ["dilation"]], ["add", "theorem", "comp_ratio", ["dilation"]], ["add", "theorem", "congr_arg", ["dilation"]], ["add", "theorem", "congr_fun", ["dilation"]], ["add", "theorem", "copy_eq_self", ["dilation"]], ["add", "theorem", "diam_image", ["dilation"]], ["add", "theorem", "diam_range", ["dilation"]], ["add", "theorem", "dist_eq", ["dilation"]], ["add", "theorem", "ediam_image", ["dilation"]], ["add", "theorem", "ediam_range", ["dilation"]], ["add", "theorem", "edist_eq", ["dilation"]], ["add", "theorem", "ext", ["dilation"]], ["add", "theorem", "ext_iff", ["dilation"]], ["add", "theorem", "id_comp", ["dilation"]], ["add", "theorem", "id_ratio", ["dilation"]], ["add", "theorem", "lipschitz", ["dilation"]], ["add", "theorem", "maps_to_ball", ["dilation"]], ["add", "theorem", "maps_to_closed_ball", ["dilation"]], ["add", "theorem", "maps_to_emetric_ball", ["dilation"]], ["add", "theorem", "maps_to_emetric_closed_ball", ["dilation"]], ["add", "theorem", "maps_to_sphere", ["dilation"]], ["add", "theorem", "mk_coe", ["dilation"]], ["add", "theorem", "mk_coe_of_dist_eq", ["dilation"]], ["add", "theorem", "mk_coe_of_nndist_eq", ["dilation"]], ["add", "def", "mk_of_dist_eq", ["dilation"]], ["add", "def", "mk_of_nndist_eq", ["dilation"]], ["add", "theorem", "mul_def", ["dilation"]], ["add", "theorem", "nndist_eq", ["dilation"]], ["add", "theorem", "one_def", ["dilation"]], ["add", "def", "ratio", ["dilation"]], ["add", "theorem", "ratio_ne_zero", ["dilation"]], ["add", "theorem", "ratio_pos", ["dilation"]], ["add", "theorem", "ratio_unique", ["dilation"]], ["add", "theorem", "ratio_unique_of_dist_ne_zero", ["dilation"]], ["add", "theorem", "ratio_unique_of_nndist_ne_zero", ["dilation"]], ["add", "theorem", "tendsto_nhds_iff", ["dilation"]], ["add", "theorem", "to_continuous", ["dilation"]], ["add", "theorem", "to_fun_eq_coe", ["dilation"]], ["add", "structure", "dilation", []]]}]}, {"timestamp": 1687502032, "sha": "5d0c7689", "message": "chore(*): add mathlib4 synchronization comments (#19213)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_geometry.Gamma_Spec_adjunction`\n* `algebraic_geometry.open_immersion.Scheme`\n* `analysis.calculus.implicit`\n* `analysis.matrix`\n* `analysis.normed_space.matrix_exponential`\n* `analysis.normed_space.star.matrix`\n* `data.matrix.invertible`\n* `linear_algebra.clifford_algebra.basic`\n* `linear_algebra.exterior_algebra.basic`\n* `number_theory.cyclotomic.basic`\n* `number_theory.cyclotomic.primitive_roots`\n* `number_theory.number_field.embeddings`\n* `number_theory.number_field.units`\n* `number_theory.zsqrtd.gaussian_int`\n* `ring_theory.dedekind_domain.S_integer`\n* `ring_theory.dedekind_domain.adic_valuation`\n* `ring_theory.dedekind_domain.finite_adele_ring`\n* `ring_theory.discriminant`\n* `ring_theory.ideal.norm`", "changes": [{"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion/Scheme.lean", "newPath": "src/algebraic_geometry/open_immersion/Scheme.lean", "changes": []}, {"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": []}, {"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/matrix_exponential.lean", "newPath": "src/analysis/normed_space/matrix_exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/matrix.lean", "newPath": "src/analysis/normed_space/star/matrix.lean", "changes": []}, {"oldPath": "src/data/matrix/invertible.lean", "newPath": "src/data/matrix/invertible.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/embeddings.lean", "newPath": "src/number_theory/number_field/embeddings.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/units.lean", "newPath": "src/number_theory/number_field/units.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/S_integer.lean", "newPath": "src/ring_theory/dedekind_domain/S_integer.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "newPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/finite_adele_ring.lean", "newPath": "src/ring_theory/dedekind_domain/finite_adele_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/norm.lean", "newPath": "src/ring_theory/ideal/norm.lean", "changes": []}]}, {"timestamp": 1687474827, "sha": "57f9349f", "message": "chore(analysis/complex/upper_half_plane,number_theory/modular_forms): reduce dependency on manifolds (#19212)\nMove some lemmas that use `mfderiv` or `mdifferentiable` to new files.", "changes": [{"oldPath": null, "newPath": "src/analysis/complex/upper_half_plane/manifold.lean", "changes": [["add", "theorem", "mdifferentiable_coe", ["upper_half_plane"]], ["add", "theorem", "smooth_coe", ["upper_half_plane"]]]}, {"oldPath": "src/analysis/complex/upper_half_plane/topology.lean", "newPath": "src/analysis/complex/upper_half_plane/topology.lean", "changes": [["del", "theorem", "mdifferentiable_coe", ["upper_half_plane"]], ["del", "theorem", "smooth_coe", ["upper_half_plane"]]]}, {"oldPath": "src/number_theory/modular_forms/basic.lean", "newPath": "src/number_theory/modular_forms/basic.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/jacobi_theta.lean", "newPath": "src/number_theory/modular_forms/jacobi_theta/basic.lean", "changes": [["del", "theorem", "mdifferentiable_jacobi_theta", []]]}, {"oldPath": null, "newPath": "src/number_theory/modular_forms/jacobi_theta/manifold.lean", "changes": [["add", "theorem", "mdifferentiable_jacobi_theta", []]]}, {"oldPath": "src/number_theory/zeta_function.lean", "newPath": "src/number_theory/zeta_function.lean", "changes": []}]}, {"timestamp": 1687436925, "sha": "d30d3126", "message": "feat(group_theory): simple lemmas for Wedderburn (#18862)\nThese lemmas are a bit disparate, but they are all useful for Wedderburn's little theorem.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "orbit_rel_apply", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": [["add", "theorem", "mem_orbit_conj_act", ["conj_act"]], ["add", "theorem", "orbit_rel_conj_act", ["conj_act"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "eq_of_left_mem_center", ["is_conj"]], ["add", "theorem", "eq_of_right_mem_center", ["is_conj"]]]}]}, {"timestamp": 1687410202, "sha": "1b089e3b", "message": "chore(*): add mathlib4 synchronization comments (#19211)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.adjunctions`\n* `analysis.constant_speed`\n* `analysis.convolution`\n* `category_theory.category.PartialFun`\n* `control.bitraversable.instances`\n* `control.uliftable`\n* `data.nat.nth`\n* `field_theory.cardinality`\n* `field_theory.finite.galois_field`\n* `field_theory.finite.trace`\n* `number_theory.function_field`\n* `number_theory.number_field.basic`\n* `number_theory.number_field.norm`\n* `number_theory.prime_counting`\n* `number_theory.zeta_values`\n* `probability.ident_distrib`\n* `probability.kernel.cond_distrib`\n* `probability.kernel.condexp`\n* `probability.moments`\n* `probability.strong_law`\n* `probability.variance`\n* `representation_theory.Rep`\n* `ring_theory.complex`\n* `ring_theory.valuation.ramification_group`\n* `ring_theory.valuation.valuation_subring`\n* `set_theory.ordinal.notation`", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/analysis/constant_speed.lean", "newPath": "src/analysis/constant_speed.lean", "changes": []}, {"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/category_theory/category/PartialFun.lean", "newPath": "src/category_theory/category/PartialFun.lean", "changes": []}, {"oldPath": "src/control/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/control/uliftable.lean", "newPath": "src/control/uliftable.lean", "changes": []}, {"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": []}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/finite/trace.lean", "newPath": "src/field_theory/finite/trace.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/basic.lean", "newPath": "src/number_theory/number_field/basic.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/norm.lean", "newPath": "src/number_theory/number_field/norm.lean", "changes": []}, {"oldPath": "src/number_theory/prime_counting.lean", "newPath": "src/number_theory/prime_counting.lean", "changes": []}, {"oldPath": "src/number_theory/zeta_values.lean", "newPath": "src/number_theory/zeta_values.lean", "changes": []}, {"oldPath": "src/probability/ident_distrib.lean", "newPath": "src/probability/ident_distrib.lean", "changes": []}, {"oldPath": "src/probability/kernel/cond_distrib.lean", "newPath": "src/probability/kernel/cond_distrib.lean", "changes": []}, {"oldPath": "src/probability/kernel/condexp.lean", "newPath": "src/probability/kernel/condexp.lean", "changes": []}, {"oldPath": "src/probability/moments.lean", "newPath": "src/probability/moments.lean", "changes": []}, {"oldPath": "src/probability/strong_law.lean", "newPath": "src/probability/strong_law.lean", "changes": []}, {"oldPath": "src/probability/variance.lean", "newPath": "src/probability/variance.lean", "changes": []}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": []}, {"oldPath": "src/ring_theory/complex.lean", "newPath": "src/ring_theory/complex.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/ramification_group.lean", "newPath": "src/ring_theory/valuation/ramification_group.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}]}, {"timestamp": 1687400631, "sha": "f4047663", "message": "feat(analysis/normed_space/multilinear): add lemmas/defs (#19114)\n* Add `simps` here and there.\n* Add `continuous_multilinear_map.norm_of_subsingleton_le` and `continuous_multilinear_map.nnnorm_of_subsingleton_le`.\n* Add `continuous_multilinear_map.cod_restrict`.\n* Add `continuous_multilinear_map.restrict_scalarsₗᵢ`, a `linear_isometry_equiv` version of `continuous_multilinear_map.restrict_scalars`.\n* Split `continuous_multilinear_map.dom_dom_congr` into 3 definitions: a map, an equivalence, and a linear isometry (the old def).", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["del", "def", "dom_dom_congr", ["continuous_multilinear_map"]], ["add", "def", "dom_dom_congrₗᵢ", ["continuous_multilinear_map"]], ["add", "theorem", "nnnorm_of_subsingleton_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_dom_dom_congr", ["continuous_multilinear_map"]], ["add", "theorem", "norm_of_subsingleton_le", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_restrict_scalars", ["continuous_multilinear_map"]], ["add", "def", "restrict_scalarsₗᵢ", ["continuous_multilinear_map"]]]}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["add", "def", "cod_restrict", ["continuous_multilinear_map"]], ["add", "def", "dom_dom_congr", ["continuous_multilinear_map"]], ["add", "def", "dom_dom_congr_equiv", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1687386256, "sha": "554bb38d", "message": "feat(order/monotone): add `decidable` instances (#19175)\nThese can be written in a very nice, elegant way.", "changes": [{"oldPath": "archive/wiedijk_100_theorems/ascending_descending_sequences.lean", "newPath": "archive/wiedijk_100_theorems/ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/order/monotone/basic.lean", "newPath": "src/order/monotone/basic.lean", "changes": []}]}, {"timestamp": 1687372169, "sha": "6285167a", "message": "chore(topology/algebra/module/basic): generalize `to_span_singleton` to topological spaces (#19116)\nThis should be straightforward to forward-port, as it involves deleting one hunk and pasting in another.", "changes": [{"oldPath": "src/analysis/normed_space/continuous_linear_map.lean", "newPath": "src/analysis/normed_space/continuous_linear_map.lean", "changes": [["del", "def", "to_span_singleton", ["continuous_linear_map"]], ["del", "theorem", "to_span_singleton_add", ["continuous_linear_map"]], ["del", "theorem", "to_span_singleton_apply", ["continuous_linear_map"]], ["del", "theorem", "to_span_singleton_smul'", ["continuous_linear_map"]], ["del", "theorem", "to_span_singleton_smul", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "def", "to_span_singleton", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_add", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_apply", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_smul'", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_smul", ["continuous_linear_map"]]]}]}, {"timestamp": 1687372168, "sha": "3efd324a", "message": "feat(topology/algebra/order/compact): remove conditional completeness assumption in `is_compact.exists_forall_le` (#18991)", "changes": [{"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "directed", ["is_total"]]]}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["add", "theorem", "bdd_above_range_of_has_compact_mul_support", ["continuous"]], ["add", "theorem", "bdd_below_range_of_has_compact_mul_support", ["continuous"]], ["add", "theorem", "bdd_above", ["is_compact"]], ["add", "theorem", "bdd_above_image", ["is_compact"]], ["add", "theorem", "bdd_below", ["is_compact"]], ["add", "theorem", "bdd_below_image", ["is_compact"]]]}, {"oldPath": "src/topology/order/basic.lean", "newPath": "src/topology/order/basic.lean", "changes": [["del", "theorem", "bdd_above_range_of_has_compact_mul_support", ["continuous"]], ["del", "theorem", "bdd_below_range_of_has_compact_mul_support", ["continuous"]], ["del", "theorem", "bdd_above", ["is_compact"]], ["del", "theorem", "bdd_above_image", ["is_compact"]], ["del", "theorem", "bdd_below", ["is_compact"]], ["del", "theorem", "bdd_below_image", ["is_compact"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "elim_directed_family_closed", ["is_compact"]]]}]}, {"timestamp": 1687372167, "sha": "eba78710", "message": "feat(data/finset/pointwise): `|s| ∣ |s * t|` (#18663)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "forall_of_forall_cons", ["finset"]], ["add", "theorem", "forall_of_forall_insert", ["finset"]]]}, {"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["add", "theorem", "card_dvd_card_image₂_left", ["finset"]], ["add", "theorem", "card_dvd_card_image₂_right", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "card_dvd_card_mul_left", ["finset"]], ["add", "theorem", "card_dvd_card_smul_right", ["finset"]]]}]}, {"timestamp": 1687363027, "sha": "f23a09ce", "message": "feat(analysis/special_functions/log/base): add `real.logb_mul_base` (#18979)\nAdd proof that states `logb (a * b) c = ((logb a c)⁻¹ + (logb b c)⁻¹)⁻¹`.", "changes": [{"oldPath": "src/analysis/special_functions/log/base.lean", "newPath": "src/analysis/special_functions/log/base.lean", "changes": [["add", "theorem", "div_logb", ["real"]], ["add", "theorem", "inv_logb", ["real"]], ["add", "theorem", "inv_logb_div_base", ["real"]], ["add", "theorem", "inv_logb_mul_base", ["real"]], ["add", "theorem", "logb_div_base", ["real"]], ["add", "theorem", "logb_mul_base", ["real"]], ["add", "theorem", "mul_logb", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "log_ne_zero", ["real"]]]}]}, {"timestamp": 1687339470, "sha": "e5ab837f", "message": "feat(manifold/{cont_mdiff,algebra/smooth_functions}): restriction as a homomorphism between spaces of smooth functions (#19209)\nThis splits out for separate review the part of #19094 that is blocking the port.", "changes": [{"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": [["add", "def", "comp_left_monoid_hom", ["smooth_map"]], ["add", "def", "comp_left_ring_hom", ["smooth_map"]], ["add", "def", "restrict_monoid_hom", ["smooth_map"]], ["add", "def", "restrict_ring_hom", ["smooth_map"]]]}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "cont_mdiff_inclusion", []], ["add", "theorem", "smooth_inclusion", []]]}]}, {"timestamp": 1687332298, "sha": "c14c8fcd", "message": "feat(measure_theory/integral/average): Lebesgue average (#19199)\nDefine the Lebesgue integral version of the average of a measurable function and prove the corresponding first moment method.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/average.lean", "newPath": "src/measure_theory/integral/average.lean", "changes": [["mod", "theorem", "average_const", ["measure_theory"]], ["del", "theorem", "average_to_real", ["measure_theory"]], ["add", "theorem", "exists_laverage_le", ["measure_theory"]], ["add", "theorem", "exists_le_laverage", ["measure_theory"]], ["add", "theorem", "exists_le_lintegral", ["measure_theory"]], ["add", "theorem", "exists_le_set_laverage", ["measure_theory"]], ["add", "theorem", "exists_lintegral_le", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_laverage_le", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_le_laverage", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_le_lintegral", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_lintegral_le", ["measure_theory"]], ["add", "theorem", "exists_set_laverage_le", ["measure_theory"]], ["add", "theorem", "laverage_add_measure", ["measure_theory"]], ["add", "theorem", "laverage_congr", ["measure_theory"]], ["add", "theorem", "laverage_const", ["measure_theory"]], ["add", "theorem", "laverage_eq'", ["measure_theory"]], ["add", "theorem", "laverage_eq", ["measure_theory"]], ["add", "theorem", "laverage_eq_lintegral", ["measure_theory"]], ["add", "theorem", "laverage_lt_top", ["measure_theory"]], ["add", "theorem", "laverage_mem_open_segment_compl_self", ["measure_theory"]], ["add", "theorem", "laverage_one", ["measure_theory"]], ["add", "theorem", "laverage_union", ["measure_theory"]], ["add", "theorem", "laverage_union_mem_open_segment", ["measure_theory"]], ["add", "theorem", "laverage_union_mem_segment", ["measure_theory"]], ["add", "theorem", "laverage_zero", ["measure_theory"]], ["add", "theorem", "laverage_zero_measure", ["measure_theory"]], ["add", "theorem", "lintegral_laverage", ["measure_theory"]], ["add", "theorem", "measure_laverage_le_pos", ["measure_theory"]], ["add", "theorem", "measure_le_laverage_pos", ["measure_theory"]], ["add", "theorem", "measure_le_lintegral_pos", ["measure_theory"]], ["add", "theorem", "measure_le_set_laverage_pos", ["measure_theory"]], ["add", "theorem", "measure_lintegral_le_pos", ["measure_theory"]], ["add", "theorem", "measure_mul_laverage", ["measure_theory"]], ["add", "theorem", "measure_mul_set_laverage", ["measure_theory"]], ["add", "theorem", "measure_set_laverage_le_pos", ["measure_theory"]], ["add", "theorem", "set_average_congr", ["measure_theory"]], ["add", "theorem", "set_average_congr_fun", ["measure_theory"]], ["del", "theorem", "set_average_congr_set_ae", ["measure_theory"]], ["del", "theorem", "set_average_to_real", ["measure_theory"]], ["add", "theorem", "set_laverage_congr", ["measure_theory"]], ["add", "theorem", "set_laverage_congr_fun", ["measure_theory"]], ["add", "theorem", "set_laverage_const", ["measure_theory"]], ["add", "theorem", "set_laverage_eq'", ["measure_theory"]], ["add", "theorem", "set_laverage_eq", ["measure_theory"]], ["add", "theorem", "set_laverage_lt_top", ["measure_theory"]], ["add", "theorem", "set_laverage_one", ["measure_theory"]], ["add", "theorem", "set_lintegral_set_laverage", ["measure_theory"]], ["add", "theorem", "to_real_laverage", ["measure_theory"]], ["add", "theorem", "to_real_set_laverage", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_eq_top_of_measure_eq_top_ne_zero", ["measure_theory"]], ["del", "theorem", "lintegral_eq_top_of_measure_eq_top_pos", ["measure_theory"]], ["add", "theorem", "lintegral_indicator_one", ["measure_theory"]], ["add", "theorem", "measure_eq_top_of_lintegral_ne_top", ["measure_theory"]], ["add", "theorem", "measure_eq_top_of_set_lintegral_ne_top", ["measure_theory"]], ["add", "theorem", "set_lintegral_eq_top_of_measure_eq_top_ne_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["mod", "theorem", "mul_indicator_ae_eq_one", ["set"]]]}, {"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": []}]}, {"timestamp": 1687327783, "sha": "e8e130de", "message": "chore(*): add mathlib4 synchronization comments (#19208)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_geometry.locally_ringed_space.has_colimits`\n* `analysis.bounded_variation`\n* `analysis.fourier.add_circle`\n* `analysis.fourier.poisson_summation`\n* `probability.borel_cantelli`\n* `probability.kernel.disintegration`\n* `probability.martingale.borel_cantelli`\n* `probability.martingale.convergence`\n* `probability.martingale.optional_stopping`\n* `probability.martingale.upcrossing`\n* `ring_theory.dedekind_domain.integral_closure`\n* `ring_theory.localization.norm`\n* `ring_theory.norm`\n* `ring_theory.polynomial.eisenstein.is_integral`\n* `ring_theory.trace`", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/analysis/bounded_variation.lean", "newPath": "src/analysis/bounded_variation.lean", "changes": []}, {"oldPath": "src/analysis/fourier/add_circle.lean", "newPath": "src/analysis/fourier/add_circle.lean", "changes": []}, {"oldPath": "src/analysis/fourier/poisson_summation.lean", "newPath": "src/analysis/fourier/poisson_summation.lean", "changes": []}, {"oldPath": "src/probability/borel_cantelli.lean", "newPath": "src/probability/borel_cantelli.lean", "changes": []}, {"oldPath": "src/probability/kernel/disintegration.lean", "newPath": "src/probability/kernel/disintegration.lean", "changes": []}, {"oldPath": "src/probability/martingale/borel_cantelli.lean", "newPath": "src/probability/martingale/borel_cantelli.lean", "changes": []}, {"oldPath": "src/probability/martingale/convergence.lean", "newPath": "src/probability/martingale/convergence.lean", "changes": []}, {"oldPath": "src/probability/martingale/optional_stopping.lean", "newPath": "src/probability/martingale/optional_stopping.lean", "changes": []}, {"oldPath": "src/probability/martingale/upcrossing.lean", "newPath": "src/probability/martingale/upcrossing.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "newPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/norm.lean", "newPath": "src/ring_theory/localization/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein/is_integral.lean", "newPath": "src/ring_theory/polynomial/eisenstein/is_integral.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1687302897, "sha": "722b3b15", "message": "refactor(data/matrix/invertible): more results about invertible matrices (#19204)\nMany results about `invertible` apply directly to matrices simply by replacing `*` with `matrix.mul`.\nThis also adds some missing lemmas about invertibility of products.", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "def", "copy'", ["invertible"]], ["add", "def", "mul", ["invertible"]], ["add", "def", "mul_left", ["invertible"]], ["add", "def", "mul_right", ["invertible"]], ["add", "def", "invertible_of_invertible_mul", []], ["add", "def", "invertible_of_mul_invertible", []]]}, {"oldPath": null, "newPath": "src/data/matrix/invertible.lean", "changes": [["add", "def", "matrix_mul", ["invertible"]], ["add", "def", "matrix_mul_left", ["invertible"]], ["add", "def", "matrix_mul_right", ["invertible"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}]}, {"timestamp": 1687296706, "sha": "431589bc", "message": "feat(geometry/manifold/sheaf/basic): sheaf of functions satisfying a `local_invariant_prop` (#19146)\nDefine `structure_groupoid.local_invariant_prop.sheaf`, the sheaf-of-types of functions `f : M → M'` (for charted spaces `M`, `M'`) satisfying some local property in the sense of `structure_groupoid.local_invariant_prop` (for example continuity, differentiability, smoothness).", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "theorem", "chart_at_inclusion_symm_eventually_eq", ["topological_space", "opens"]]]}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": [["add", "theorem", "lift_prop_at_iff_comp_inclusion", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_inclusion", ["structure_groupoid", "local_invariant_prop"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/sheaf/basic.lean", "changes": [["add", "def", "local_predicate", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "section_spec", ["structure_groupoid", "local_invariant_prop"]], ["add", "def", "sheaf", ["structure_groupoid", "local_invariant_prop"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "map_subtype_source", ["local_homeomorph"]], ["add", "theorem", "subtype_restr_symm_eq_on_of_le", ["local_homeomorph"]]]}]}, {"timestamp": 1687240843, "sha": "f2ad3645", "message": "chore(*): add mathlib4 synchronization comments (#19207)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_geometry.open_immersion.basic`\n* `analysis.schwartz_space`\n* `category_theory.monoidal.internal.types`\n* `dynamics.ergodic.add_circle`\n* `field_theory.is_alg_closed.algebraic_closure`\n* `measure_theory.group.add_circle`\n* `measure_theory.integral.periodic`\n* `number_theory.kummer_dedekind`\n* `number_theory.well_approximable`\n* `probability.kernel.integral_comp_prod`\n* `probability.martingale.basic`\n* `probability.martingale.centering`\n* `probability.martingale.optional_sampling`\n* `probability.process.hitting_time`\n* `ring_theory.is_adjoin_root`", "changes": [{"oldPath": "src/algebraic_geometry/open_immersion/basic.lean", "newPath": "src/algebraic_geometry/open_immersion/basic.lean", "changes": []}, {"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/types.lean", "newPath": "src/category_theory/monoidal/internal/types.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/add_circle.lean", "newPath": "src/dynamics/ergodic/add_circle.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": []}, {"oldPath": "src/measure_theory/group/add_circle.lean", "newPath": "src/measure_theory/group/add_circle.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/number_theory/kummer_dedekind.lean", "newPath": "src/number_theory/kummer_dedekind.lean", "changes": []}, {"oldPath": "src/number_theory/well_approximable.lean", "newPath": "src/number_theory/well_approximable.lean", "changes": []}, {"oldPath": "src/probability/kernel/integral_comp_prod.lean", "newPath": "src/probability/kernel/integral_comp_prod.lean", "changes": []}, {"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": []}, {"oldPath": "src/probability/martingale/centering.lean", "newPath": "src/probability/martingale/centering.lean", "changes": []}, {"oldPath": "src/probability/martingale/optional_sampling.lean", "newPath": "src/probability/martingale/optional_sampling.lean", "changes": []}, {"oldPath": "src/probability/process/hitting_time.lean", "newPath": "src/probability/process/hitting_time.lean", "changes": []}, {"oldPath": "src/ring_theory/is_adjoin_root.lean", "newPath": "src/ring_theory/is_adjoin_root.lean", "changes": []}]}, {"timestamp": 1687236774, "sha": "86c29aef", "message": "refactor(geometry/manifold/cont_mdiff_map): redefine as subtype not structure (#19147)\nWe have a long-running conversation in mathlib about whether function spaces should be implemented as subtypes or as structures. This PR proposes to change `cont_mdiff_map`, the type of smooth functions between manifolds `M` and `M'`, from a \"structure\" implementation to a \"subtype\" implementation. It honestly seems pretty painless, even though this is a widely used type -- the only change for users is that the field names are now `val` and `property` rather than `to_fun` and `cont_mdiff_to_fun`.\nThe motivation is to make it possible to make certain constructions about function spaces generic, so that work for the space of smooth functions can be reused for (for example) the spaces of continuous or differentiable functions.\nNotably, in #19146 we introduce a generic construction of a sheaf of functions on a manifold whose object over the open set `U` is the subtype of functions satisfying a \"local invariant property\". With this PR, when that construction is applied to the property \"smoothness\", the resulting sheaf has objects which are *by definition* the types `cont_mdiff_map`. They then inherit algebraic structures for free, see #19094.", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": [["add", "def", "cont_mdiff_map", []], ["del", "structure", "cont_mdiff_map", []]]}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}]}, {"timestamp": 1687205033, "sha": "0723536a", "message": "chore(data/zmod/algebra): make zmod.algebra a def (#19197)\n`zmod.algebra` creates a diamond about the `zmod p`-algebra structure on `zmod p`:\n```lean\nimport algebra.algebra.basic\nimport data.zmod.algebra\nexample (p : ℕ) : algebra.id (zmod p) =\n (zmod.algebra (zmod p) p) := rfl --fails\n```\nThis is also causing troubles with the port. We turn `zmod.algebra` into a def.", "changes": [{"oldPath": "src/data/zmod/algebra.lean", "newPath": "src/data/zmod/algebra.lean", "changes": [["add", "def", "algebra", ["zmod"]]]}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/finite/trace.lean", "newPath": "src/field_theory/finite/trace.lean", "changes": [["mod", "theorem", "trace_to_zmod_nondegenerate", ["finite_field"]]]}, {"oldPath": "src/field_theory/is_alg_closed/classification.lean", "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": [["mod", "theorem", "ring_equiv_of_cardinal_eq_of_char_eq", ["is_alg_closed"]], ["mod", "theorem", "ring_equiv_of_cardinal_eq_of_char_zero", ["is_alg_closed"]]]}, {"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/expand.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/expand.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}]}, {"timestamp": 1687156772, "sha": "e160cefe", "message": "chore(*): add mathlib4 synchronization comments (#19200)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.continued_fractions.computation.terminates_iff_rat`\n* `category_theory.enriched.basic`\n* `category_theory.monoidal.internal.limits`\n* `field_theory.krull_topology`\n* `measure_theory.function.conditional_expectation.basic`\n* `measure_theory.function.conditional_expectation.condexp_L1`\n* `measure_theory.function.conditional_expectation.condexp_L2`\n* `measure_theory.function.conditional_expectation.indicator`\n* `measure_theory.function.conditional_expectation.real`\n* `number_theory.legendre_symbol.basic`\n* `number_theory.legendre_symbol.quadratic_char.basic`\n* `probability.conditional_expectation`\n* `probability.notation`\n* `probability.process.adapted`\n* `probability.process.filtration`\n* `probability.process.stopping`", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/category_theory/enriched/basic.lean", "newPath": "src/category_theory/enriched/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/limits.lean", "newPath": "src/category_theory/monoidal/internal/limits.lean", "changes": []}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/condexp_L1.lean", "newPath": "src/measure_theory/function/conditional_expectation/condexp_L1.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/condexp_L2.lean", "newPath": "src/measure_theory/function/conditional_expectation/condexp_L2.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/indicator.lean", "newPath": "src/measure_theory/function/conditional_expectation/indicator.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/real.lean", "newPath": "src/measure_theory/function/conditional_expectation/real.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/basic.lean", "newPath": "src/number_theory/legendre_symbol/basic.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char/basic.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char/basic.lean", "changes": []}, {"oldPath": "src/probability/conditional_expectation.lean", "newPath": "src/probability/conditional_expectation.lean", "changes": []}, {"oldPath": "src/probability/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}, {"oldPath": "src/probability/process/adapted.lean", "newPath": "src/probability/process/adapted.lean", "changes": []}, {"oldPath": "src/probability/process/filtration.lean", "newPath": "src/probability/process/filtration.lean", "changes": []}, {"oldPath": "src/probability/process/stopping.lean", "newPath": "src/probability/process/stopping.lean", "changes": []}]}, {"timestamp": 1686982877, "sha": "2a0ce625", "message": "chore(*): add mathlib4 synchronization comments (#19196)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.BoolRing`\n* `algebra.continued_fractions.computation.approximation_corollaries`\n* `category_theory.monoidal.internal.functor_category`\n* `field_theory.galois`\n* `field_theory.minpoly.is_integrally_closed`\n* `field_theory.primitive_element`\n* `linear_algebra.matrix.ldl`\n* `number_theory.diophantine_approximation`\n* `number_theory.pell`\n* `number_theory.primes_congruent_one`\n* `order.category.FinBoolAlg`\n* `probability.kernel.composition`\n* `probability.kernel.cond_cdf`\n* `probability.kernel.invariance`\n* `ring_theory.polynomial.cyclotomic.eval`\n* `ring_theory.polynomial.cyclotomic.expand`\n* `ring_theory.polynomial.cyclotomic.roots`\n* `ring_theory.polynomial.gauss_lemma`\n* `ring_theory.polynomial.selmer`\n* `ring_theory.ring_hom.finite_type`\n* `ring_theory.roots_of_unity.minpoly`\n* `topology.category.UniformSpace`\n* `topology.continuous_function.zero_at_infty`\n* `topology.sheaves.operations`", "changes": [{"oldPath": "src/algebra/category/BoolRing.lean", "newPath": "src/algebra/category/BoolRing.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/functor_category.lean", "newPath": "src/category_theory/monoidal/internal/functor_category.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly/is_integrally_closed.lean", "newPath": "src/field_theory/minpoly/is_integrally_closed.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/ldl.lean", "newPath": "src/linear_algebra/matrix/ldl.lean", "changes": []}, {"oldPath": "src/number_theory/diophantine_approximation.lean", "newPath": "src/number_theory/diophantine_approximation.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/order/category/FinBoolAlg.lean", "newPath": "src/order/category/FinBoolAlg.lean", "changes": []}, {"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": []}, {"oldPath": "src/probability/kernel/cond_cdf.lean", "newPath": "src/probability/kernel/cond_cdf.lean", "changes": []}, {"oldPath": "src/probability/kernel/invariance.lean", "newPath": "src/probability/kernel/invariance.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/expand.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/expand.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/roots.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/selmer.lean", "newPath": "src/ring_theory/polynomial/selmer.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_hom/finite_type.lean", "newPath": "src/ring_theory/ring_hom/finite_type.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity/minpoly.lean", "newPath": "src/ring_theory/roots_of_unity/minpoly.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}, {"oldPath": "src/topology/sheaves/operations.lean", "newPath": "src/topology/sheaves/operations.lean", "changes": []}]}, {"timestamp": 1686936979, "sha": "893964fc", "message": "feat(algebra/homology/local_cohomology): Add equivalence of local cohomology along cofinal diagrams (#19105)\nAdd the natural equivalence of local cohomology along cofinal diagrams of ideals.", "changes": [{"oldPath": "src/algebra/homology/local_cohomology.lean", "newPath": "src/algebra/homology/local_cohomology.lean", "changes": [["del", "theorem", "exists_pow_le_of_le_radical_of_fg", ["ideal"]], ["add", "def", "diagram_comp", ["local_cohomology"]], ["add", "theorem", "exists_pow_le_of_le_radical_of_fg", ["local_cohomology", "ideal"]], ["mod", "def", "ideal_powers_to_self_le_radical", ["local_cohomology"]], ["del", "def", "ideal_powers_to_self_le_radical_comp_inclusion", ["local_cohomology"]], ["add", "def", "iso_of_final", ["local_cohomology"]], ["add", "def", "iso_of_same_radical", ["local_cohomology"]], ["add", "def", "iso_self_le_radical", ["local_cohomology"]], ["mod", "def", "of_self_le_radical", ["local_cohomology"]], ["add", "def", "cast", ["local_cohomology", "self_le_radical"]], ["add", "def", "iso_of_same_radical", ["local_cohomology", "self_le_radical"]]]}]}, {"timestamp": 1686916138, "sha": "22c4d2ff", "message": "feat(order/bounded_order): The lattice of complemented elements (#16267)\nDefine `complementeds`, the subtype of complemented elements, and show that it is a complemented bounded distributive lattice.", "changes": [{"oldPath": "src/order/disjoint.lean", "newPath": "src/order/disjoint.lean", "changes": [["add", "theorem", "codisjoint_coe", ["complementeds"]], ["add", "theorem", "coe_bot", ["complementeds"]], ["add", "theorem", "coe_inf", ["complementeds"]], ["add", "theorem", "coe_inj", ["complementeds"]], ["add", "theorem", "coe_injective", ["complementeds"]], ["add", "theorem", "coe_le_coe", ["complementeds"]], ["add", "theorem", "coe_lt_coe", ["complementeds"]], ["add", "theorem", "coe_sup", ["complementeds"]], ["add", "theorem", "coe_top", ["complementeds"]], ["add", "theorem", "disjoint_coe", ["complementeds"]], ["add", "theorem", "is_compl_coe", ["complementeds"]], ["add", "theorem", "mk_bot", ["complementeds"]], ["add", "theorem", "mk_inf_mk", ["complementeds"]], ["add", "theorem", "mk_sup_mk", ["complementeds"]], ["add", "theorem", "mk_top", ["complementeds"]], ["add", "def", "complementeds", []], ["add", "theorem", "inf", ["is_complemented"]], ["add", "theorem", "sup", ["is_complemented"]], ["add", "def", "is_complemented", []], ["add", "theorem", "is_complemented_bot", []], ["add", "theorem", "is_complemented_top", []]]}]}, {"timestamp": 1686904456, "sha": "c4c2ed62", "message": "feat(order/sup_indep): More lemmas (#11932)\nA few more lemmas about `finset.sup_indep` and `set.pairwise_disjoint`.", "changes": [{"oldPath": "src/data/finset/pairwise.lean", "newPath": "src/data/finset/pairwise.lean", "changes": [["add", "theorem", "attach", ["set", "pairwise_disjoint"]], ["mod", "theorem", "image_finset_of_le", ["set", "pairwise_disjoint"]]]}, {"oldPath": "src/data/set/pairwise/basic.lean", "newPath": "src/data/set/pairwise/basic.lean", "changes": [["add", "theorem", "prod", ["set", "pairwise_disjoint"]], ["add", "theorem", "pairwise_disjoint_pi", ["set"]]]}, {"oldPath": "src/data/set/pairwise/lattice.lean", "newPath": "src/data/set/pairwise/lattice.lean", "changes": [["mod", "theorem", "pairwise_Union", ["set"]], ["add", "theorem", "prod_left", ["set", "pairwise_disjoint"]], ["add", "theorem", "pairwise_disjoint_prod_left", ["set"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "set_pi", ["disjoint"]], ["add", "theorem", "set_prod_left", ["disjoint"]], ["add", "theorem", "set_prod_right", ["disjoint"]], ["add", "theorem", "disjoint_pi", ["set"]], ["mod", "theorem", "disjoint_prod", ["set"]], ["add", "theorem", "pi_eq_empty_iff'", ["set"]]]}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": [["mod", "theorem", "attach", ["finset", "sup_indep"]], ["add", "theorem", "image", ["finset", "sup_indep"]], ["add", "theorem", "le_sup_iff", ["finset", "sup_indep"]], ["add", "theorem", "product", ["finset", "sup_indep"]], ["add", "theorem", "sigma", ["finset", "sup_indep"]], ["add", "theorem", "sup_indep_attach", ["finset"]], ["add", "theorem", "sup_indep_map", ["finset"]], ["add", "theorem", "sup_indep_product_iff", ["finset"]]]}]}, {"timestamp": 1686893335, "sha": "5563b1b4", "message": "style(archive.100-theorems-list.xx_theorem_name): rename to `wiedijk_100_theorems.theorem_name` (#19195)\nhttps://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Archive.2E100-theorems-list.2EXXTheoremName.20causes.20error.20!4.235114", "changes": [{"oldPath": "archive/100-theorems-list/README.md", "newPath": "archive/wiedijk_100_theorems/README.md", "changes": []}, {"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/wiedijk_100_theorems/abel_ruffini.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/wiedijk_100_theorems/area_of_a_circle.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/wiedijk_100_theorems/ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/30_ballot_problem.lean", "newPath": "archive/wiedijk_100_theorems/ballot_problem.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/93_birthday_problem.lean", "newPath": "archive/wiedijk_100_theorems/birthday_problem.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/wiedijk_100_theorems/cubing_a_cube.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/wiedijk_100_theorems/friendship_graphs.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/57_herons_formula.lean", "newPath": "archive/wiedijk_100_theorems/herons_formula.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/wiedijk_100_theorems/inverse_triangle_sum.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/54_konigsberg.lean", "newPath": "archive/wiedijk_100_theorems/konigsberg.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/45_partition.lean", "newPath": "archive/wiedijk_100_theorems/partition.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/wiedijk_100_theorems/perfect_numbers.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "newPath": "archive/wiedijk_100_theorems/solution_of_cubic.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "newPath": "archive/wiedijk_100_theorems/sum_of_prime_reciprocals_diverges.lean", "changes": []}]}, {"timestamp": 1686893334, "sha": "cff8231f", "message": "chore(*): add mathlib4 synchronization comments (#19194)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.continued_fractions.computation.approximations`\n* `analysis.inner_product_space.rayleigh`\n* `analysis.inner_product_space.spectrum`\n* `analysis.normed.group.SemiNormedGroup`\n* `category_theory.closed.functor`\n* `field_theory.splitting_field.construction`\n* `geometry.euclidean.angle.sphere`\n* `linear_algebra.matrix.pos_def`\n* `linear_algebra.matrix.spectrum`\n* `order.category.BoolAlg`\n* `order.category.FinBddDistLat`\n* `ring_theory.local_properties`\n* `ring_theory.ring_hom.surjective`\n* `topology.sheaves.locally_surjective`", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/category_theory/closed/functor.lean", "newPath": "src/category_theory/closed/functor.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field/construction.lean", "newPath": "src/field_theory/splitting_field/construction.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/sphere.lean", "newPath": "src/geometry/euclidean/angle/sphere.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/pos_def.lean", "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/spectrum.lean", "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": []}, {"oldPath": "src/order/category/BoolAlg.lean", "newPath": "src/order/category/BoolAlg.lean", "changes": []}, {"oldPath": "src/order/category/FinBddDistLat.lean", "newPath": "src/order/category/FinBddDistLat.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_hom/surjective.lean", "newPath": "src/ring_theory/ring_hom/surjective.lean", "changes": []}, {"oldPath": "src/topology/sheaves/locally_surjective.lean", "newPath": "src/topology/sheaves/locally_surjective.lean", "changes": []}]}, {"timestamp": 1686889283, "sha": "5b2fe805", "message": "chore(number_theory/legendre_symbol/quadratic_reciprocity): split some files (#19193)\nThe best split here is separating `quadratic_reciprocity` into that and `legendre_symbol`.\nI was looking at this because the olean analyser in the port-progress-bot made an unlikely claim about unnecessary dependencies, and I wanted to make sure we weren't missing something in doubting it. We weren't. :-)", "changes": [{"oldPath": null, "newPath": "src/number_theory/legendre_symbol/basic.lean", "changes": [["add", "theorem", "at_neg_one", ["legendre_sym"]], ["add", "theorem", "at_one", ["legendre_sym"]], ["add", "theorem", "at_zero", ["legendre_sym"]], ["add", "theorem", "card_sqrts", ["legendre_sym"]], ["add", "theorem", "eq_neg_one_iff'", ["legendre_sym"]], ["add", "theorem", "eq_neg_one_iff", ["legendre_sym"]], ["add", "theorem", "eq_neg_one_iff_not_one", ["legendre_sym"]], ["add", "theorem", "eq_one_iff'", ["legendre_sym"]], ["add", "theorem", "eq_one_iff", ["legendre_sym"]], ["add", "theorem", "eq_one_of_sq_sub_mul_sq_eq_zero'", ["legendre_sym"]], ["add", "theorem", "eq_one_of_sq_sub_mul_sq_eq_zero", ["legendre_sym"]], ["add", "theorem", "eq_one_or_neg_one", ["legendre_sym"]], ["add", "theorem", "eq_pow", ["legendre_sym"]], ["add", "theorem", "eq_zero_iff", ["legendre_sym"]], ["add", "theorem", "eq_zero_mod_of_eq_neg_one", ["legendre_sym"]], ["add", "def", "hom", ["legendre_sym"]], ["add", "theorem", "mod", ["legendre_sym"]], ["add", "theorem", "mul", ["legendre_sym"]], ["add", "theorem", "prime_dvd_of_eq_neg_one", ["legendre_sym"]], ["add", "theorem", "sq_one'", ["legendre_sym"]], ["add", "theorem", "sq_one", ["legendre_sym"]], ["add", "def", "legendre_sym", []], ["add", "theorem", "euler_criterion", ["zmod"]], ["add", "theorem", "euler_criterion_units", ["zmod"]], ["add", "theorem", "exists_sq_eq_neg_one_iff", ["zmod"]], ["add", "theorem", "mod_four_ne_three_of_sq_eq_neg_one", ["zmod"]], ["add", "theorem", "mod_four_ne_three_of_sq_eq_neg_sq'", ["zmod"]], ["add", "theorem", "mod_four_ne_three_of_sq_eq_neg_sq", ["zmod"]], ["add", "theorem", "pow_div_two_eq_neg_one_or_one", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char/basic.lean", "changes": [["del", "theorem", "is_square_neg_two_iff", ["finite_field"]], ["del", "theorem", "is_square_odd_prime_iff", ["finite_field"]], ["del", "theorem", "is_square_two_iff", ["finite_field"]], ["del", "theorem", "quadratic_char_card_card", []], ["del", "theorem", "quadratic_char_neg_two", []], ["del", "theorem", "quadratic_char_odd_prime", []], ["del", "theorem", "quadratic_char_two", []]]}, {"oldPath": null, "newPath": "src/number_theory/legendre_symbol/quadratic_char/gauss_sum.lean", "changes": [["add", "theorem", "is_square_neg_two_iff", ["finite_field"]], ["add", "theorem", "is_square_odd_prime_iff", ["finite_field"]], ["add", "theorem", "is_square_two_iff", ["finite_field"]], ["add", "theorem", "quadratic_char_card_card", []], ["add", "theorem", "quadratic_char_neg_two", []], ["add", "theorem", "quadratic_char_odd_prime", []], ["add", "theorem", "quadratic_char_two", []]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["del", "theorem", "at_neg_one", ["legendre_sym"]], ["del", "theorem", "at_one", ["legendre_sym"]], ["del", "theorem", "at_zero", ["legendre_sym"]], ["del", "theorem", "card_sqrts", ["legendre_sym"]], ["del", "theorem", "eq_neg_one_iff'", ["legendre_sym"]], ["del", "theorem", "eq_neg_one_iff", ["legendre_sym"]], ["del", "theorem", "eq_neg_one_iff_not_one", ["legendre_sym"]], ["del", "theorem", "eq_one_iff'", ["legendre_sym"]], ["del", "theorem", "eq_one_iff", ["legendre_sym"]], ["del", "theorem", "eq_one_of_sq_sub_mul_sq_eq_zero'", ["legendre_sym"]], ["del", "theorem", "eq_one_of_sq_sub_mul_sq_eq_zero", ["legendre_sym"]], ["del", "theorem", "eq_one_or_neg_one", ["legendre_sym"]], ["del", "theorem", "eq_pow", ["legendre_sym"]], ["del", "theorem", "eq_zero_iff", ["legendre_sym"]], ["del", "theorem", "eq_zero_mod_of_eq_neg_one", ["legendre_sym"]], ["del", "def", "hom", ["legendre_sym"]], ["del", "theorem", "mod", ["legendre_sym"]], ["del", "theorem", "mul", ["legendre_sym"]], ["del", "theorem", "prime_dvd_of_eq_neg_one", ["legendre_sym"]], ["del", "theorem", "sq_one'", ["legendre_sym"]], ["del", "theorem", "sq_one", ["legendre_sym"]], ["del", "def", "legendre_sym", []], ["del", "theorem", "euler_criterion", ["zmod"]], ["del", "theorem", "euler_criterion_units", ["zmod"]], ["del", "theorem", "exists_sq_eq_neg_one_iff", ["zmod"]], ["del", "theorem", "mod_four_ne_three_of_sq_eq_neg_one", ["zmod"]], ["del", "theorem", "mod_four_ne_three_of_sq_eq_neg_sq'", ["zmod"]], ["del", "theorem", "mod_four_ne_three_of_sq_eq_neg_sq", ["zmod"]], ["del", "theorem", "pow_div_two_eq_neg_one_or_one", ["zmod"]]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": [["del", "theorem", "mod_four_eq_three_of_nat_prime_of_prime", ["gaussian_int"]], ["del", "theorem", "prime_iff_mod_four_eq_three_of_nat_prime", ["gaussian_int"]], ["del", "theorem", "prime_of_nat_prime_of_mod_four_eq_three", ["gaussian_int"]]]}, {"oldPath": null, "newPath": "src/number_theory/zsqrtd/quadratic_reciprocity.lean", "changes": [["add", "theorem", "mod_four_eq_three_of_nat_prime_of_prime", ["gaussian_int"]], ["add", "theorem", "prime_iff_mod_four_eq_three_of_nat_prime", ["gaussian_int"]], ["add", "theorem", "prime_of_nat_prime_of_mod_four_eq_three", ["gaussian_int"]]]}]}, {"timestamp": 1686843926, "sha": "bf9bbbcf", "message": "feat(field_theory/ratfunc): The numerator and denominator of a rational function are coprime (#18652)\nAlso make more arguments to `gcd_ne_zero_of_left`/`gcd_ne_zero_of_right` implicit.", "changes": [{"oldPath": "src/algebra/euclidean_domain/basic.lean", "newPath": "src/algebra/euclidean_domain/basic.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "theorem", "is_coprime_num_denom", ["ratfunc"]]]}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": [["mod", "theorem", "gcd_ne_zero_of_left", []], ["mod", "theorem", "gcd_ne_zero_of_right", []], ["add", "theorem", "is_coprime_div_gcd_div_gcd", []]]}]}, {"timestamp": 1686837275, "sha": "88474d1b", "message": "chore(algebraic_geometry/Scheme): remove @[simps] from Spec (#19188)\nThe `@[simps]` on `Spec` produces lemmas that aren't needed in mathlib3, and get in the way in mathlib4. This backports the removal of this attribute, to match https://github.com/leanprover-community/mathlib4/pull/5040.", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["mod", "def", "Spec", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}]}, {"timestamp": 1686823782, "sha": "4b05d3f4", "message": "chore(field_theory.finite.galois_field, number_theory.cyclotomic.basic): make splitting_field.algebra' an instance again (#19191)", "changes": [{"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}]}, {"timestamp": 1686810705, "sha": "e3f4be1f", "message": "chore(field_theory/splitting_field): refactor `splitting_field` (#19178)\nWe refactor the definition of `splitting_field`. The main motivation is to backport [!4#4891](https://github.com/leanprover-community/mathlib4/pull/4891) since the is seems very problematic to port the current design.\nZulip discussion relevant to this PR: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.234891.20.20FieldTheory.2ESplittingField", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field/construction.lean", "newPath": "src/field_theory/splitting_field/construction.lean", "changes": [["add", "def", "alg_equiv_splitting_field_aux", ["polynomial", "splitting_field"]], ["add", "def", "alg_equiv_quotient_mv_polynomial", ["polynomial", "splitting_field_aux"]], ["del", "theorem", "exists_lift", ["polynomial", "splitting_field_aux"]], ["add", "def", "of_mv_polynomial", ["polynomial", "splitting_field_aux"]], ["add", "theorem", "of_mv_polynomial_surjective", ["polynomial", "splitting_field_aux"]], ["mod", "def", "splitting_field_aux", ["polynomial"]], ["add", "def", "splitting_field_aux_aux", ["polynomial"]]]}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": [["add", "theorem", "prim", ["add_char", "primitive_add_char"]], ["add", "def", "primitive_add_char", ["add_char"]], ["del", "structure", "primitive_add_char", ["add_char"]]]}, {"oldPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "newPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}]}, {"timestamp": 1686805211, "sha": "8af7091a", "message": "chore(*): add mathlib4 synchronization comments (#19190)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.homology.Module`\n* `algebra.lie.weights`\n* `algebraic_geometry.Scheme`\n* `algebraic_geometry.Spec`\n* `analysis.analytic.isolated_zeros`\n* `analysis.analytic.uniqueness`\n* `analysis.complex.open_mapping`\n* `analysis.mellin_transform`\n* `analysis.special_functions.gamma.basic`\n* `category_theory.monoidal.CommMon_`\n* `geometry.euclidean.angle.oriented.affine`\n* `geometry.euclidean.angle.oriented.right_angle`\n* `geometry.euclidean.angle.oriented.rotation`\n* `geometry.euclidean.circumcenter`\n* `geometry.euclidean.sphere.ptolemy`\n* `geometry.euclidean.triangle`\n* `measure_theory.function.conditional_expectation.unique`\n* `order.category.BddDistLat`\n* `order.category.BddLat`\n* `order.category.CompleteLat`\n* `order.category.HeytAlg`\n* `probability.kernel.measurable_integral`\n* `probability.kernel.with_density`\n* `ring_theory.ring_hom.finite`\n* `topology.continuous_function.ideals`\n* `topology.gluing`", "changes": [{"oldPath": "src/algebra/homology/Module.lean", "newPath": "src/algebra/homology/Module.lean", "changes": []}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/analysis/analytic/isolated_zeros.lean", "newPath": "src/analysis/analytic/isolated_zeros.lean", "changes": []}, {"oldPath": "src/analysis/analytic/uniqueness.lean", "newPath": "src/analysis/analytic/uniqueness.lean", "changes": []}, {"oldPath": "src/analysis/complex/open_mapping.lean", "newPath": "src/analysis/complex/open_mapping.lean", "changes": []}, {"oldPath": "src/analysis/mellin_transform.lean", "newPath": "src/analysis/mellin_transform.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma/basic.lean", "newPath": "src/analysis/special_functions/gamma/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/CommMon_.lean", "newPath": "src/category_theory/monoidal/CommMon_.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/affine.lean", "newPath": "src/geometry/euclidean/angle/oriented/affine.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/right_angle.lean", "newPath": "src/geometry/euclidean/angle/oriented/right_angle.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "newPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/ptolemy.lean", "newPath": "src/geometry/euclidean/sphere/ptolemy.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/unique.lean", "newPath": "src/measure_theory/function/conditional_expectation/unique.lean", "changes": []}, {"oldPath": "src/order/category/BddDistLat.lean", "newPath": "src/order/category/BddDistLat.lean", "changes": []}, {"oldPath": "src/order/category/BddLat.lean", "newPath": "src/order/category/BddLat.lean", "changes": []}, {"oldPath": "src/order/category/CompleteLat.lean", "newPath": "src/order/category/CompleteLat.lean", "changes": []}, {"oldPath": "src/order/category/HeytAlg.lean", "newPath": "src/order/category/HeytAlg.lean", "changes": []}, {"oldPath": "src/probability/kernel/measurable_integral.lean", "newPath": "src/probability/kernel/measurable_integral.lean", "changes": []}, {"oldPath": "src/probability/kernel/with_density.lean", "newPath": "src/probability/kernel/with_density.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_hom/finite.lean", "newPath": "src/ring_theory/ring_hom/finite.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/ideals.lean", "newPath": "src/topology/continuous_function/ideals.lean", "changes": []}, {"oldPath": "src/topology/gluing.lean", "newPath": "src/topology/gluing.lean", "changes": []}]}, {"timestamp": 1686759468, "sha": "9f55d0d4", "message": "feat(measure_theory/constructions/polish): quotient group is a Borel space (#19186)\n* Suslin's theorem: an analytic set with analytic complement is measurable.\n* Image of a measurable set in a Polish space under a measurable map is an analytic set.\n* Preimage of a set under a measurable surjective map from a Polish\n space is measurable iff the original set is measurable.\n* Quotient space of a Polish space with quotient σ-algebra is a Borel space provided that it has second countable topology.\n* In particular, quotient group of a Polish topological group is a Borel space.\n* Change instance for `measurable_space` on `add_circle`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space/basic.lean", "newPath": "src/measure_theory/constructions/borel_space/basic.lean", "changes": [["add", "theorem", "borel_anti", []]]}, {"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": [["add", "theorem", "map_borel_eq", ["continuous"]], ["add", "theorem", "map_eq_borel", ["continuous"]], ["add", "theorem", "borel_space_codomain", ["measurable"]], ["add", "theorem", "map_measurable_space_eq", ["measurable"]], ["add", "theorem", "map_measurable_space_eq_borel", ["measurable"]], ["add", "theorem", "measurable_comp_iff_of_surjective", ["measurable"]], ["add", "theorem", "measurable_comp_iff_restrict", ["measurable"]], ["add", "theorem", "measurable_set_preimage_iff_inter_range", ["measurable"]], ["add", "theorem", "measurable_set_preimage_iff_of_surjective", ["measurable"]], ["add", "theorem", "measurable_set_preimage_iff_preimage_coe", ["measurable"]], ["add", "theorem", "analytic_set_image", ["measurable_set"]], ["add", "theorem", "measurable_set_of_compl", ["measure_theory", "analytic_set"]], ["mod", "theorem", "measurably_separable", ["measure_theory", "analytic_set"]], ["mod", "theorem", "measurably_separable_range_of_disjoint", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}]}, {"timestamp": 1686750235, "sha": "c8734e89", "message": "feat(data/mv_polynomial/basic): add more general smul compatibility instances (#19187)\nThese apply for things like actions by the units of the base ring.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1686750234, "sha": "8bdf5e9b", "message": "refactor(field_theory/polynomial_galois_group): remove `open_locale classical` (#19184)\nThis doesn't actually generalize any lemmas, but it reduces the chance of lemmas added in future being less general.\nThe `restrict_dvd_def` lemma is new, and deals with substituting an arbitray `decidable_eq` instance.", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "restrict_dvd_def", ["polynomial", "gal"]]]}]}, {"timestamp": 1686750233, "sha": "f9ec1871", "message": "feat(geometry/manifold/vector_bundle/smooth_section): define smooth sections (#19064)\n* Define the module of smooth sections of a smooth vector bundle over a smooth manifold.\n*", "changes": [{"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": [["add", "theorem", "div", ["cont_mdiff"]], ["add", "theorem", "inv", ["cont_mdiff"]], ["add", "theorem", "div", ["cont_mdiff_at"]], ["add", "theorem", "inv", ["cont_mdiff_at"]], ["add", "theorem", "div", ["cont_mdiff_on"]], ["add", "theorem", "inv", ["cont_mdiff_on"]], ["add", "theorem", "div", ["cont_mdiff_within_at"]], ["add", "theorem", "inv", ["cont_mdiff_within_at"]], ["add", "theorem", "div", ["smooth_at"]], ["add", "theorem", "inv", ["smooth_at"]], ["add", "theorem", "div", ["smooth_within_at"]], ["add", "theorem", "inv", ["smooth_within_at"]]]}, {"oldPath": "src/geometry/manifold/vector_bundle/basic.lean", "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": [["add", "theorem", "cont_mdiff_at_section", ["bundle"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/vector_bundle/smooth_section.lean", "changes": [["add", "theorem", "coe_add", ["cont_mdiff_section"]], ["add", "def", "coe_add_hom", ["cont_mdiff_section"]], ["add", "theorem", "coe_fn_mk", ["cont_mdiff_section"]], ["add", "theorem", "coe_inj", ["cont_mdiff_section"]], ["add", "theorem", "coe_injective", ["cont_mdiff_section"]], ["add", "theorem", "coe_neg", ["cont_mdiff_section"]], ["add", "theorem", "coe_nsmul", ["cont_mdiff_section"]], ["add", "theorem", "coe_smul", ["cont_mdiff_section"]], ["add", "theorem", "coe_sub", ["cont_mdiff_section"]], ["add", "theorem", "coe_zero", ["cont_mdiff_section"]], ["add", "theorem", "coe_zsmul", ["cont_mdiff_section"]], ["add", "theorem", "ext", ["cont_mdiff_section"]], ["add", "structure", "cont_mdiff_section", []], ["add", "def", "smooth_section", []]]}]}, {"timestamp": 1686738776, "sha": "1ac8d430", "message": "chore(*): fix `@[to_additive, simp]` to the correct order (#19169)\nWhilst making some files, I noticed that there is some lemmas that have the wrong order for `to_additive` and `simp`.", "changes": [{"oldPath": "src/algebra/hom/equiv/basic.lean", "newPath": "src/algebra/hom/equiv/basic.lean", "changes": [["mod", "theorem", "coe_monoid_hom_refl", ["mul_equiv"]], ["mod", "theorem", "coe_monoid_hom_trans", ["mul_equiv"]]]}, {"oldPath": "src/group_theory/subsemigroup/center.lean", "newPath": "src/group_theory/subsemigroup/center.lean", "changes": [["mod", "theorem", "center_eq_top", ["subsemigroup"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1686734911, "sha": "c3216069", "message": "chore(linear_algebra/eigenspace/minpoly): remove a silly use of `tauto` (#19183)\n`tauto` is not `refl`.", "changes": [{"oldPath": "src/linear_algebra/eigenspace/minpoly.lean", "newPath": "src/linear_algebra/eigenspace/minpoly.lean", "changes": []}]}, {"timestamp": 1686718085, "sha": "d07a9c87", "message": "chore(*): add mathlib4 synchronization comments (#19185)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.subobject`\n* `analysis.analytic.composition`\n* `analysis.convex.intrinsic`\n* `analysis.inner_product_space.two_dim`\n* `analysis.special_functions.japanese_bracket`\n* `category_theory.differential_object`\n* `geometry.euclidean.angle.oriented.basic`\n* `measure_theory.function.conditional_expectation.ae_measurable`\n* `order.category.BddOrd`\n* `order.category.Semilat`\n* `ring_theory.polynomial.hermite.basic`\n* `ring_theory.polynomial.hermite.gaussian`\n* `ring_theory.ring_hom.integral`\n* `ring_theory.ring_hom_properties`", "changes": [{"oldPath": "src/algebra/category/Group/subobject.lean", "newPath": "src/algebra/category/Group/subobject.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/convex/intrinsic.lean", "newPath": "src/analysis/convex/intrinsic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/two_dim.lean", "newPath": "src/analysis/inner_product_space/two_dim.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/japanese_bracket.lean", "newPath": "src/analysis/special_functions/japanese_bracket.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/basic.lean", "newPath": "src/geometry/euclidean/angle/oriented/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/ae_measurable.lean", "newPath": "src/measure_theory/function/conditional_expectation/ae_measurable.lean", "changes": []}, {"oldPath": "src/order/category/BddOrd.lean", "newPath": "src/order/category/BddOrd.lean", "changes": []}, {"oldPath": "src/order/category/Semilat.lean", "newPath": "src/order/category/Semilat.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/hermite/basic.lean", "newPath": "src/ring_theory/polynomial/hermite/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/hermite/gaussian.lean", "newPath": "src/ring_theory/polynomial/hermite/gaussian.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_hom/integral.lean", "newPath": "src/ring_theory/ring_hom/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_hom_properties.lean", "newPath": "src/ring_theory/ring_hom_properties.lean", "changes": []}]}, {"timestamp": 1686640021, "sha": "8efcf802", "message": "refactor(data/polynomial/ring_division): remove `open_locale classical` (#19182)\nThis makes the lemmas strictly more general.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "bUnion_roots_finite", ["polynomial"]], ["mod", "theorem", "count_map_roots", ["polynomial"]], ["mod", "theorem", "count_map_roots_of_injective", ["polynomial"]], ["mod", "theorem", "count_roots", ["polynomial"]], ["mod", "theorem", "exists_multiset_roots", ["polynomial"]], ["mod", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]], ["mod", "theorem", "root_multiplicity_X_sub_C", ["polynomial"]], ["mod", "theorem", "root_set_def", ["polynomial"]], ["add", "theorem", "roots_def", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/eigenspace/minpoly.lean", "newPath": "src/linear_algebra/eigenspace/minpoly.lean", "changes": []}]}, {"timestamp": 1686640019, "sha": "fbbd626e", "message": "chore(field_theory/abel_ruffini): Rename variables (#19180)\nRename variables for consistency.", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}]}, {"timestamp": 1686640016, "sha": "e2e7f2ac", "message": "feat(algebraic_geometry/elliptic_curve/point): the group law on the nonsingular rational points of a Weierstrass curve (#18000)\nDefine a group structure on the nonsingular rational points of a Weierstrass curve by constructing an explicit injective group homomorphism into the class group of its coordinate ring and therefore proving associativity of the addition law.\n- [x] depends on: #17999 \n- [x] depends on: #17194\n- [x] depends on: #18038 \n- [x] depends on: #18101 \n- [x] depends on: #19121", "changes": [{"oldPath": "src/algebraic_geometry/elliptic_curve/point.lean", "newPath": "src/algebraic_geometry/elliptic_curve/point.lean", "changes": [["add", "theorem", "C_add_polynomial", ["weierstrass_curve"]], ["add", "theorem", "XY_ideal'_eq", ["weierstrass_curve"]], ["add", "theorem", "XY_ideal_add_eq", ["weierstrass_curve"]], ["add", "theorem", "XY_ideal_eq₁", ["weierstrass_curve"]], ["add", "theorem", "XY_ideal_eq₂", ["weierstrass_curve"]], ["add", "theorem", "XY_ideal_mul_XY_ideal", ["weierstrass_curve"]], ["add", "theorem", "XY_ideal_neg_mul", ["weierstrass_curve"]], ["add", "theorem", "C_add_polynomial", ["weierstrass_curve", "coordinate_ring"]], ["add", "theorem", "C_add_polynomial_slope", ["weierstrass_curve", "coordinate_ring"]], ["add", "theorem", "mk_XY_ideal'_mul_mk_XY_ideal'", ["weierstrass_curve"]], ["add", "theorem", "mk_XY_ideal'_mul_mk_XY_ideal'_of_Y_eq", ["weierstrass_curve"]], ["add", "theorem", "add_assoc", ["weierstrass_curve", "point"]], ["add", "theorem", "add_comm", ["weierstrass_curve", "point"]], ["add", "theorem", "to_class_eq_zero", ["weierstrass_curve", "point"]], ["add", "theorem", "to_class_injective", ["weierstrass_curve", "point"]], ["add", "theorem", "to_class_some", ["weierstrass_curve", "point"]], ["add", "theorem", "to_class_zero", ["weierstrass_curve", "point"]]]}, {"oldPath": "src/algebraic_geometry/elliptic_curve/weierstrass.lean", "newPath": "src/algebraic_geometry/elliptic_curve/weierstrass.lean", "changes": []}]}, {"timestamp": 1686636019, "sha": "44e2ae8c", "message": "chore(*): add mathlib4 synchronization comments (#19181)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.simple`\n* `algebra.category.Module.subobject`\n* `algebra.lie.engel`\n* `analysis.normed_space.star.continuous_functional_calculus`\n* `category_theory.bicategory.functor_bicategory`\n* `category_theory.groupoid.subgroupoid`\n* `category_theory.monoidal.center`\n* `linear_algebra.eigenspace.minpoly`\n* `measure_theory.integral.torus_integral`\n* `probability.density`\n* `topology.metric_space.hausdorff_dimension`", "changes": [{"oldPath": "src/algebra/category/Module/simple.lean", "newPath": "src/algebra/category/Module/simple.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/subobject.lean", "newPath": "src/algebra/category/Module/subobject.lean", "changes": []}, {"oldPath": "src/algebra/lie/engel.lean", "newPath": "src/algebra/lie/engel.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/continuous_functional_calculus.lean", "newPath": "src/analysis/normed_space/star/continuous_functional_calculus.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/functor_bicategory.lean", "newPath": "src/category_theory/bicategory/functor_bicategory.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid/subgroupoid.lean", "newPath": "src/category_theory/groupoid/subgroupoid.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/center.lean", "newPath": "src/category_theory/monoidal/center.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace/minpoly.lean", "newPath": "src/linear_algebra/eigenspace/minpoly.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/torus_integral.lean", "newPath": "src/measure_theory/integral/torus_integral.lean", "changes": []}, {"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}]}, {"timestamp": 1686619270, "sha": "cec81510", "message": "refactor(representation_theory/Rep): define `ihom` concretely (#19170)", "changes": [{"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": [["mod", "theorem", "Action_ρ_eq_ρ", ["Rep"]], ["add", "theorem", "hom_comm_apply", ["Rep"]], ["add", "theorem", "hom_equiv_def", ["Rep"]], ["del", "theorem", "ihom_coev_app_def", ["Rep"]], ["mod", "theorem", "ihom_coev_app_hom", ["Rep"]], ["mod", "theorem", "ihom_ev_app_hom", ["Rep"]], ["del", "theorem", "ihom_map_hom", ["Rep"]], ["del", "theorem", "ihom_obj_ρ", ["Rep"]], ["mod", "theorem", "ihom_obj_ρ_def", ["Rep"]], ["add", "def", "linear_hom_equiv", ["Rep", "monoidal_closed"]], ["add", "def", "linear_hom_equiv_comm", ["Rep", "monoidal_closed"]], ["mod", "theorem", "linear_hom_equiv_comm_hom", ["Rep", "monoidal_closed"]], ["mod", "theorem", "linear_hom_equiv_comm_symm_hom", ["Rep", "monoidal_closed"]], ["mod", "theorem", "linear_hom_equiv_hom", ["Rep", "monoidal_closed"]], ["mod", "theorem", "linear_hom_equiv_symm_hom", ["Rep", "monoidal_closed"]], ["del", "theorem", "monoidal_closed_curry_hom", ["Rep"]], ["del", "theorem", "monoidal_closed_uncurry_hom", ["Rep"]], ["add", "theorem", "ρ_inv_self_apply", ["Rep"]], ["add", "theorem", "ρ_self_inv_apply", ["Rep"]]]}, {"oldPath": "src/representation_theory/group_cohomology/resolution.lean", "newPath": "src/representation_theory/group_cohomology/resolution.lean", "changes": []}]}, {"timestamp": 1686599565, "sha": "9fb89647", "message": "refactor(field_theory/splitting_field/is_splitting_field): use `root_set` (#19179)", "changes": [{"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field/construction.lean", "newPath": "src/field_theory/splitting_field/construction.lean", "changes": [["mod", "theorem", "adjoin_root_set", ["polynomial", "splitting_field"]], ["del", "theorem", "adjoin_roots", ["polynomial", "splitting_field"]], ["add", "theorem", "adjoin_root_set", ["polynomial", "splitting_field_aux"]], ["del", "theorem", "adjoin_roots", ["polynomial", "splitting_field_aux"]]]}, {"oldPath": "src/field_theory/splitting_field/is_splitting_field.lean", "newPath": "src/field_theory/splitting_field/is_splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["mod", "theorem", "adjoin_roots_cyclotomic_eq_adjoin_nth_roots", ["is_cyclotomic_extension"]], ["mod", "theorem", "adjoin_roots_cyclotomic_eq_adjoin_root_cyclotomic", ["is_cyclotomic_extension"]]]}]}, {"timestamp": 1686562395, "sha": "d8bbb04e", "message": "chore(measure_theory/function/conditional_expectation): split `measure_theory.function.conditional_expectation.basic` (#19177)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/function/conditional_expectation/ae_measurable.lean", "changes": [["add", "theorem", "induction_strongly_measurable", ["measure_theory", "Lp"]], ["add", "theorem", "induction_strongly_measurable_aux", ["measure_theory", "Lp"]], ["add", "theorem", "ae_fin_strongly_measurable'", ["measure_theory", "Lp_meas"]], ["add", "theorem", "ae_strongly_measurable'", ["measure_theory", "Lp_meas"]], ["add", "def", "Lp_meas", ["measure_theory"]], ["add", "theorem", "Lp_meas_coe", ["measure_theory"]], ["add", "def", "Lp_meas_subgroup", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_coe", ["measure_theory"]], ["add", "def", "Lp_meas_subgroup_to_Lp_meas_iso", ["measure_theory"]], ["add", "def", "Lp_meas_subgroup_to_Lp_trim", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_add", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_ae_eq", ["measure_theory"]], ["add", "def", "Lp_meas_subgroup_to_Lp_trim_iso", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_left_inv", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_neg", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_norm_map", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_right_inv", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_sub", ["measure_theory"]], ["add", "def", "Lp_meas_to_Lp_trim", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_ae_eq", ["measure_theory"]], ["add", "def", "Lp_meas_to_Lp_trim_lie", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_lie_symm_indicator", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_lie_symm_to_Lp", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_smul", ["measure_theory"]], ["add", "def", "Lp_trim_to_Lp_meas", ["measure_theory"]], ["add", "theorem", "Lp_trim_to_Lp_meas_ae_eq", ["measure_theory"]], ["add", "def", "Lp_trim_to_Lp_meas_subgroup", ["measure_theory"]], ["add", "theorem", "Lp_trim_to_Lp_meas_subgroup_ae_eq", ["measure_theory"]], ["add", "theorem", "ae_eq_trim_iff_of_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "add", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "ae_eq_mk", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "ae_strongly_measurable'_of_measurable_space_le_on", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "congr", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "const_inner", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "const_smul", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "continuous_comp", ["measure_theory", "ae_strongly_measurable'"]], ["add", "def", "mk", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "neg", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "strongly_measurable_mk", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "sub", ["measure_theory", "ae_strongly_measurable'"]], ["add", "def", "ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_of_ae_strongly_measurable'_trim", ["measure_theory"]], ["add", "theorem", "comp_ae_measurable'", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "is_closed_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "is_complete_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "isometry_Lp_meas_subgroup_to_Lp_trim", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_iff_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_indicator_const_Lp", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_self", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_subgroup_iff_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_subgroup_to_Lp_of_trim", ["measure_theory"]], ["add", "theorem", "induction_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_trim_of_mem_Lp_meas_subgroup", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'", ["measure_theory", "strongly_measurable"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": [["del", "theorem", "ae_eq_of_forall_set_integral_eq'", ["measure_theory", "Lp"]], ["del", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero'", ["measure_theory", "Lp"]], ["del", "theorem", "induction_strongly_measurable", ["measure_theory", "Lp"]], ["del", "theorem", "induction_strongly_measurable_aux", ["measure_theory", "Lp"]], ["del", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero", ["measure_theory", "Lp_meas"]], ["del", "theorem", "ae_fin_strongly_measurable'", ["measure_theory", "Lp_meas"]], ["del", "theorem", "ae_strongly_measurable'", ["measure_theory", "Lp_meas"]], ["del", "def", "Lp_meas", ["measure_theory"]], ["del", "theorem", "Lp_meas_coe", ["measure_theory"]], ["del", "def", "Lp_meas_subgroup", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_coe", ["measure_theory"]], ["del", "def", "Lp_meas_subgroup_to_Lp_meas_iso", ["measure_theory"]], ["del", "def", "Lp_meas_subgroup_to_Lp_trim", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_to_Lp_trim_add", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_to_Lp_trim_ae_eq", ["measure_theory"]], ["del", "def", "Lp_meas_subgroup_to_Lp_trim_iso", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_to_Lp_trim_left_inv", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_to_Lp_trim_neg", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_to_Lp_trim_norm_map", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_to_Lp_trim_right_inv", ["measure_theory"]], ["del", "theorem", "Lp_meas_subgroup_to_Lp_trim_sub", ["measure_theory"]], ["del", "def", "Lp_meas_to_Lp_trim", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_ae_eq", ["measure_theory"]], ["del", "def", "Lp_meas_to_Lp_trim_lie", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_lie_symm_indicator", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_lie_symm_to_Lp", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_smul", ["measure_theory"]], ["del", "def", "Lp_trim_to_Lp_meas", ["measure_theory"]], ["del", "theorem", "Lp_trim_to_Lp_meas_ae_eq", ["measure_theory"]], ["del", "def", "Lp_trim_to_Lp_meas_subgroup", ["measure_theory"]], ["del", "theorem", "Lp_trim_to_Lp_meas_subgroup_ae_eq", ["measure_theory"]], ["del", "theorem", "ae_eq_of_forall_set_integral_eq_of_sigma_finite'", ["measure_theory"]], ["del", "theorem", "ae_eq_trim_iff_of_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "add", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "ae_eq_mk", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "ae_strongly_measurable'_of_measurable_space_le_on", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "congr", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "const_inner", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "const_smul", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "continuous_comp", ["measure_theory", "ae_strongly_measurable'"]], ["del", "def", "mk", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "neg", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "strongly_measurable_mk", ["measure_theory", "ae_strongly_measurable'"]], ["del", "theorem", "sub", ["measure_theory", "ae_strongly_measurable'"]], ["del", "def", "ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "ae_strongly_measurable'_condexp_L1", ["measure_theory"]], ["del", "theorem", "ae_strongly_measurable'_condexp_L1_clm", ["measure_theory"]], ["del", "theorem", "ae_strongly_measurable'_condexp_L2", ["measure_theory"]], ["del", "theorem", "ae_strongly_measurable'_condexp_ind", ["measure_theory"]], ["del", "theorem", "ae_strongly_measurable'_condexp_ind_smul", ["measure_theory"]], ["del", "theorem", "ae_strongly_measurable'_of_ae_strongly_measurable'_trim", ["measure_theory"]], ["del", "theorem", "comp_ae_measurable'", ["measure_theory", "ae_strongly_measurable"]], ["del", "def", "condexp_L1", ["measure_theory"]], ["del", "theorem", "condexp_L1_add", ["measure_theory"]], ["del", "def", "condexp_L1_clm", ["measure_theory"]], ["del", "theorem", "condexp_L1_clm_Lp_meas", ["measure_theory"]], ["del", "theorem", "condexp_L1_clm_indicator_const", ["measure_theory"]], ["del", "theorem", "condexp_L1_clm_indicator_const_Lp", ["measure_theory"]], ["del", "theorem", "condexp_L1_clm_of_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "condexp_L1_clm_smul", ["measure_theory"]], ["del", "theorem", "condexp_L1_congr_ae", ["measure_theory"]], ["del", "theorem", "condexp_L1_eq", ["measure_theory"]], ["del", "theorem", "condexp_L1_measure_zero", ["measure_theory"]], ["del", "theorem", "condexp_L1_mono", ["measure_theory"]], ["del", "theorem", "condexp_L1_neg", ["measure_theory"]], ["del", "theorem", "condexp_L1_of_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "condexp_L1_smul", ["measure_theory"]], ["del", "theorem", "condexp_L1_sub", ["measure_theory"]], ["del", "theorem", "condexp_L1_undef", ["measure_theory"]], ["del", "theorem", "condexp_L1_zero", ["measure_theory"]], ["del", "def", "condexp_L2", ["measure_theory"]], ["del", "theorem", "condexp_L2_ae_eq_zero_of_ae_eq_zero", ["measure_theory"]], ["del", "theorem", "condexp_L2_comp_continuous_linear_map", ["measure_theory"]], ["del", "theorem", "condexp_L2_const_inner", ["measure_theory"]], ["del", "theorem", "condexp_L2_indicator_ae_eq_smul", ["measure_theory"]], ["del", "theorem", "condexp_L2_indicator_eq_to_span_singleton_comp", ["measure_theory"]], ["del", "theorem", "condexp_L2_indicator_nonneg", ["measure_theory"]], ["del", "theorem", "condexp_L2_indicator_of_measurable", ["measure_theory"]], ["del", "def", "condexp_ind", ["measure_theory"]], ["del", "def", "condexp_ind_L1", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_add", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_disjoint_union", ["measure_theory"]], ["del", "def", "condexp_ind_L1_fin", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_fin_add", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_fin_ae_eq_condexp_ind_smul", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_fin_disjoint_union", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_fin_smul'", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_fin_smul", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_of_measurable_set_of_measure_ne_top", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_of_measure_eq_top", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_of_not_measurable_set", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_smul'", ["measure_theory"]], ["del", "theorem", "condexp_ind_L1_smul", ["measure_theory"]], ["del", "theorem", "condexp_ind_ae_eq_condexp_ind_smul", ["measure_theory"]], ["del", "theorem", "condexp_ind_disjoint_union", ["measure_theory"]], ["del", "theorem", "condexp_ind_disjoint_union_apply", ["measure_theory"]], ["del", "theorem", "condexp_ind_empty", ["measure_theory"]], ["del", "theorem", "condexp_ind_nonneg", ["measure_theory"]], ["del", "theorem", "condexp_ind_of_measurable", ["measure_theory"]], ["del", "theorem", "condexp_ind_smul'", ["measure_theory"]], ["del", "def", "condexp_ind_smul", ["measure_theory"]], ["del", "theorem", "condexp_ind_smul_add", ["measure_theory"]], ["del", "theorem", "condexp_ind_smul_ae_eq_smul", ["measure_theory"]], ["del", "theorem", "condexp_ind_smul_empty", ["measure_theory"]], ["del", "theorem", "condexp_ind_smul_nonneg", ["measure_theory"]], ["del", "theorem", "condexp_ind_smul_smul'", ["measure_theory"]], ["del", "theorem", "condexp_ind_smul_smul", ["measure_theory"]], ["del", "theorem", "continuous_condexp_ind_L1", ["measure_theory"]], ["del", "theorem", "dominated_fin_meas_additive_condexp_ind", ["measure_theory"]], ["del", "theorem", "inner_condexp_L2_eq_inner_fun", ["measure_theory"]], ["del", "theorem", "inner_condexp_L2_left_eq_right", ["measure_theory"]], ["del", "theorem", "integrable_condexp_L1", ["measure_theory"]], ["del", "theorem", "integrable_condexp_L2_indicator", ["measure_theory"]], ["del", "theorem", "integrable_condexp_L2_of_is_finite_measure", ["measure_theory"]], ["del", "theorem", "integrable_condexp_ind_smul", ["measure_theory"]], ["del", "theorem", "integrable_on_condexp_L2_of_measure_ne_top", ["measure_theory"]], ["del", "theorem", "integral_condexp_L2_eq", ["measure_theory"]], ["del", "theorem", "integral_condexp_L2_eq_of_fin_meas_real", ["measure_theory"]], ["del", "theorem", "integral_norm_le_of_forall_fin_meas_integral_eq", ["measure_theory"]], ["del", "theorem", "is_closed_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "is_complete_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "isometry_Lp_meas_subgroup_to_Lp_trim", ["measure_theory"]], ["del", "theorem", "lintegral_nnnorm_condexp_L2_indicator_le", ["measure_theory"]], ["del", "theorem", "lintegral_nnnorm_condexp_L2_indicator_le_real", ["measure_theory"]], ["del", "theorem", "lintegral_nnnorm_condexp_L2_le", ["measure_theory"]], ["del", "theorem", "lintegral_nnnorm_condexp_ind_smul_le", ["measure_theory"]], ["del", "theorem", "lintegral_nnnorm_le_of_forall_fin_meas_integral_eq", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_iff_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_indicator_const_Lp", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_self", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_subgroup_iff_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_subgroup_to_Lp_of_trim", ["measure_theory"]], ["del", "theorem", "induction_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "mem_ℒp_trim_of_mem_Lp_meas_subgroup", ["measure_theory"]], ["del", "theorem", "norm_condexp_L2_coe_le", ["measure_theory"]], ["del", "theorem", "norm_condexp_L2_le", ["measure_theory"]], ["del", "theorem", "norm_condexp_L2_le_one", ["measure_theory"]], ["del", "theorem", "norm_condexp_ind_L1_fin_le", ["measure_theory"]], ["del", "theorem", "norm_condexp_ind_L1_le", ["measure_theory"]], ["del", "theorem", "norm_condexp_ind_apply_le", ["measure_theory"]], ["del", "theorem", "norm_condexp_ind_le", ["measure_theory"]], ["del", "theorem", "set_integral_condexp_L1", ["measure_theory"]], ["del", "theorem", "set_integral_condexp_L1_clm", ["measure_theory"]], ["del", "theorem", "set_integral_condexp_L1_clm_of_measure_ne_top", ["measure_theory"]], ["del", "theorem", "set_integral_condexp_L2_indicator", ["measure_theory"]], ["del", "theorem", "set_integral_condexp_ind", ["measure_theory"]], ["del", "theorem", "set_integral_condexp_ind_smul", ["measure_theory"]], ["del", "theorem", "set_lintegral_nnnorm_condexp_L2_indicator_le", ["measure_theory"]], ["del", "theorem", "set_lintegral_nnnorm_condexp_ind_smul_le", ["measure_theory"]], ["del", "theorem", "snorm_condexp_L2_le", ["measure_theory"]], ["del", "theorem", "ae_strongly_measurable'", ["measure_theory", "strongly_measurable"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/conditional_expectation/condexp_L1.lean", "changes": [["add", "theorem", "ae_strongly_measurable'_condexp_L1", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_L1_clm", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_ind", ["measure_theory"]], ["add", "def", "condexp_L1", ["measure_theory"]], ["add", "theorem", "condexp_L1_add", ["measure_theory"]], ["add", "def", "condexp_L1_clm", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_Lp_meas", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_indicator_const", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_indicator_const_Lp", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_of_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_smul", ["measure_theory"]], ["add", "theorem", "condexp_L1_congr_ae", ["measure_theory"]], ["add", "theorem", "condexp_L1_eq", ["measure_theory"]], ["add", "theorem", "condexp_L1_measure_zero", ["measure_theory"]], ["add", "theorem", "condexp_L1_mono", ["measure_theory"]], ["add", "theorem", "condexp_L1_neg", ["measure_theory"]], ["add", "theorem", "condexp_L1_of_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "condexp_L1_smul", ["measure_theory"]], ["add", "theorem", "condexp_L1_sub", ["measure_theory"]], ["add", "theorem", "condexp_L1_undef", ["measure_theory"]], ["add", "theorem", "condexp_L1_zero", ["measure_theory"]], ["add", "def", "condexp_ind", ["measure_theory"]], ["add", "def", "condexp_ind_L1", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_add", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_disjoint_union", ["measure_theory"]], ["add", "def", "condexp_ind_L1_fin", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_add", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_ae_eq_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_disjoint_union", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_smul'", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_of_measurable_set_of_measure_ne_top", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_of_measure_eq_top", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_of_not_measurable_set", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_smul'", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_ae_eq_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_disjoint_union", ["measure_theory"]], ["add", "theorem", "condexp_ind_disjoint_union_apply", ["measure_theory"]], ["add", "theorem", "condexp_ind_empty", ["measure_theory"]], ["add", "theorem", "condexp_ind_nonneg", ["measure_theory"]], ["add", "theorem", "condexp_ind_of_measurable", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul'", ["measure_theory"]], ["add", "theorem", "continuous_condexp_ind_L1", ["measure_theory"]], ["add", "theorem", "dominated_fin_meas_additive_condexp_ind", ["measure_theory"]], ["add", "theorem", "integrable_condexp_L1", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_L1_fin_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_L1_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_apply_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_le", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L1", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L1_clm", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L1_clm_of_measure_ne_top", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_ind", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/conditional_expectation/condexp_L2.lean", "changes": [["add", "theorem", "ae_strongly_measurable'_condexp_L2", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_ind_smul", ["measure_theory"]], ["add", "def", "condexp_L2", ["measure_theory"]], ["add", "theorem", "condexp_L2_ae_eq_zero_of_ae_eq_zero", ["measure_theory"]], ["add", "theorem", "condexp_L2_comp_continuous_linear_map", ["measure_theory"]], ["add", "theorem", "condexp_L2_const_inner", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_ae_eq_smul", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_eq_to_span_singleton_comp", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_nonneg", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_of_measurable", ["measure_theory"]], ["add", "def", "condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_add", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_ae_eq_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_empty", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_nonneg", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_smul'", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_smul", ["measure_theory"]], ["add", "theorem", "inner_condexp_L2_eq_inner_fun", ["measure_theory"]], ["add", "theorem", "inner_condexp_L2_left_eq_right", ["measure_theory"]], ["add", "theorem", "integrable_condexp_L2_indicator", ["measure_theory"]], ["add", "theorem", "integrable_condexp_L2_of_is_finite_measure", ["measure_theory"]], ["add", "theorem", "integrable_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "integrable_on_condexp_L2_of_measure_ne_top", ["measure_theory"]], ["add", "theorem", "integral_condexp_L2_eq", ["measure_theory"]], ["add", "theorem", "integral_condexp_L2_eq_of_fin_meas_real", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_L2_indicator_le", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_L2_indicator_le_real", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_L2_le", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_ind_smul_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_L2_coe_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_L2_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_L2_le_one", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L2_indicator", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "set_lintegral_nnnorm_condexp_L2_indicator_le", ["measure_theory"]], ["add", "theorem", "set_lintegral_nnnorm_condexp_ind_smul_le", ["measure_theory"]], ["add", "theorem", "snorm_condexp_L2_le", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/conditional_expectation/unique.lean", "changes": [["add", "theorem", "ae_eq_of_forall_set_integral_eq'", ["measure_theory", "Lp"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero'", ["measure_theory", "Lp"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero", ["measure_theory", "Lp_meas"]], ["add", "theorem", "ae_eq_of_forall_set_integral_eq_of_sigma_finite'", ["measure_theory"]], ["add", "theorem", "integral_norm_le_of_forall_fin_meas_integral_eq", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_le_of_forall_fin_meas_integral_eq", ["measure_theory"]]]}]}, {"timestamp": 1686551935, "sha": "087c325a", "message": "chore(*): add mathlib4 synchronization comments (#19176)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.filtered_colimits`\n* `analysis.normed_space.algebra`\n* `analysis.normed_space.spectrum`\n* `analysis.normed_space.star.gelfand_duality`\n* `analysis.normed_space.star.spectrum`\n* `category_theory.sites.surjective`\n* `measure_theory.measure.hausdorff`\n* `number_theory.dioph`\n* `number_theory.wilson`\n* `ring_theory.perfection`", "changes": [{"oldPath": "src/algebra/category/Module/filtered_colimits.lean", "newPath": "src/algebra/category/Module/filtered_colimits.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/algebra.lean", "newPath": "src/analysis/normed_space/algebra.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/gelfand_duality.lean", "newPath": "src/analysis/normed_space/star/gelfand_duality.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": []}, {"oldPath": "src/category_theory/sites/surjective.lean", "newPath": "src/category_theory/sites/surjective.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/wilson.lean", "newPath": "src/number_theory/wilson.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}]}, {"timestamp": 1686523442, "sha": "7fdd4f37", "message": "refactor(data/nat/nth): redefine, review API (#18760)\nRedefine `nat.nth` in terms of already available definitions, review API, generalize some lemmas.\nAlso fix some typos in `data/set/intervals/monotone`.", "changes": [{"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": [["add", "theorem", "count_nth", ["nat"]], ["del", "theorem", "count_nth_gc", ["nat"]], ["add", "theorem", "count_nth_succ", ["nat"]], ["add", "theorem", "exists_lt_card_finite_nth_eq", ["nat"]], ["add", "theorem", "exists_lt_card_nth_eq", ["nat"]], ["add", "theorem", "filter_range_nth_eq_insert", ["nat"]], ["mod", "theorem", "filter_range_nth_eq_insert_of_finite", ["nat"]], ["add", "theorem", "filter_range_nth_subset_insert", ["nat"]], ["add", "theorem", "gc_count_nth", ["nat"]], ["add", "theorem", "image_nth_Iio_card", ["nat"]], ["add", "theorem", "is_least_nth", ["nat"]], ["add", "theorem", "is_least_nth_of_infinite", ["nat"]], ["add", "theorem", "is_least_nth_of_lt_card", ["nat"]], ["add", "theorem", "le_nth", ["nat"]], ["add", "theorem", "le_nth_count'", ["nat"]], ["add", "theorem", "le_nth_count", ["nat"]], ["mod", "theorem", "le_nth_of_count_le", ["nat"]], ["add", "theorem", "le_nth_of_lt_nth_succ", ["nat"]], ["del", "theorem", "le_nth_of_lt_nth_succ_finite", ["nat"]], ["del", "theorem", "le_nth_of_lt_nth_succ_infinite", ["nat"]], ["add", "theorem", "le_of_nth_le_nth_of_lt_card", ["nat"]], ["add", "theorem", "lt_of_nth_lt_nth_of_lt_card", ["nat"]], ["add", "theorem", "nth_apply_eq_order_iso_of_nat", ["nat"]], ["mod", "theorem", "nth_count_eq_Inf", ["nat"]], ["del", "theorem", "nth_count_le", ["nat"]], ["add", "theorem", "nth_eq_Inf", ["nat"]], ["add", "theorem", "nth_eq_nthd_sort", ["nat"]], ["add", "theorem", "nth_eq_order_emb_of_fin", ["nat"]], ["mod", "theorem", "nth_eq_order_iso_of_nat", ["nat"]], ["add", "theorem", "nth_eq_zero", ["nat"]], ["add", "theorem", "nth_eq_zero_mono", ["nat"]], ["add", "theorem", "nth_inj_on", ["nat"]], ["add", "theorem", "nth_injective", ["nat"]], ["del", "theorem", "nth_injective_of_infinite", ["nat"]], ["add", "theorem", "nth_le_nth'", ["nat"]], ["add", "theorem", "nth_le_nth", ["nat"]], ["add", "theorem", "nth_le_nth_of_lt_card", ["nat"]], ["add", "theorem", "nth_lt_nth'", ["nat"]], ["add", "theorem", "nth_lt_nth", ["nat"]], ["add", "theorem", "nth_lt_nth_of_lt_card", ["nat"]], ["mod", "theorem", "nth_lt_of_lt_count", ["nat"]], ["add", "theorem", "nth_mem", ["nat"]], ["mod", "theorem", "nth_mem_of_infinite", ["nat"]], ["del", "theorem", "nth_mem_of_infinite_aux", ["nat"]], ["add", "theorem", "nth_mem_of_lt_card", ["nat"]], ["del", "theorem", "nth_mem_of_lt_card_finite", ["nat"]], ["del", "theorem", "nth_mem_of_lt_card_finite_aux", ["nat"]], ["del", "theorem", "nth_mono_of_finite", ["nat"]], ["mod", "theorem", "nth_monotone", ["nat"]], ["add", "theorem", "nth_of_card_le", ["nat"]], ["del", "theorem", "nth_set_card", ["nat"]], ["del", "theorem", "nth_set_card_aux", ["nat"]], ["del", "theorem", "nth_set_nonempty_of_lt_card", ["nat"]], ["mod", "theorem", "nth_strict_mono", ["nat"]], ["del", "theorem", "nth_strict_mono_of_finite", ["nat"]], ["add", "theorem", "nth_strict_mono_on", ["nat"]], ["mod", "theorem", "nth_zero", ["nat"]], ["del", "theorem", "nth_zero_of_nth_zero", ["nat"]], ["mod", "theorem", "nth_zero_of_zero", ["nat"]], ["add", "theorem", "range_nth_of_finite", ["nat"]], ["add", "theorem", "range_nth_of_infinite", ["nat"]], ["add", "theorem", "range_nth_subset", ["nat"]], ["add", "theorem", "subset_range_nth", ["nat"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "to_finset_eq_to_finset", ["set", "finite"]], ["add", "theorem", "to_finite_to_finset", ["set"]]]}, {"oldPath": "src/number_theory/prime_counting.lean", "newPath": "src/number_theory/prime_counting.lean", "changes": []}]}, {"timestamp": 1686486444, "sha": "ccdbfb6e", "message": "feat(measure_theory/integral/set_integral): First moment method (#18731)\nIntegrable functions are smaller/larger than their mean on a set of positive measure. We prove it for the Bochner and Lebesgue integrals.", "changes": [{"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "div_eq_inv_mul", ["ennreal"]], ["add", "theorem", "to_nnreal_ne_one", ["ennreal"]], ["add", "theorem", "to_nnreal_ne_zero", ["ennreal"]], ["add", "theorem", "to_real_ne_one", ["ennreal"]], ["add", "theorem", "to_real_ne_zero", ["ennreal"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "integrable_const", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/average.lean", "newPath": "src/measure_theory/integral/average.lean", "changes": [["add", "theorem", "average_to_real", ["measure_theory"]], ["add", "theorem", "exists_average_le", ["measure_theory"]], ["add", "theorem", "exists_integral_le", ["measure_theory"]], ["add", "theorem", "exists_le_average", ["measure_theory"]], ["add", "theorem", "exists_le_integral", ["measure_theory"]], ["add", "theorem", "exists_le_set_average", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_average_le", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_integral_le", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_le_average", ["measure_theory"]], ["add", "theorem", "exists_not_mem_null_le_integral", ["measure_theory"]], ["add", "theorem", "exists_set_average_le", ["measure_theory"]], ["add", "theorem", "integral_average", ["measure_theory"]], ["add", "theorem", "integral_average_sub", ["measure_theory"]], ["add", "theorem", "integral_sub_average", ["measure_theory"]], ["add", "theorem", "measure_average_le_pos", ["measure_theory"]], ["add", "theorem", "measure_integral_le_pos", ["measure_theory"]], ["add", "theorem", "measure_le_average_pos", ["measure_theory"]], ["add", "theorem", "measure_le_integral_pos", ["measure_theory"]], ["add", "theorem", "measure_le_set_average_pos", ["measure_theory"]], ["add", "theorem", "measure_set_average_le_pos", ["measure_theory"]], ["add", "theorem", "of_real_average", ["measure_theory"]], ["add", "theorem", "of_real_set_average", ["measure_theory"]], ["add", "theorem", "set_average_congr_set_ae", ["measure_theory"]], ["add", "theorem", "set_average_to_real", ["measure_theory"]], ["add", "theorem", "set_integral_set_average", ["measure_theory"]], ["add", "theorem", "set_integral_set_average_sub", ["measure_theory"]], ["add", "theorem", "set_integral_sub_set_average", ["measure_theory"]]]}]}, {"timestamp": 1686467088, "sha": "660b3a2d", "message": "chore(*): add mathlib4 synchronization comments (#19174)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.lie.cartan_matrix`\n* `algebra.module.zlattice`\n* `analysis.complex.polynomial`\n* `category_theory.monoidal.limits`\n* `category_theory.preadditive.schur`\n* `category_theory.sites.compatible_sheafification`\n* `data.polynomial.unit_trinomial`\n* `field_theory.is_alg_closed.classification`\n* `field_theory.is_alg_closed.spectrum`\n* `linear_algebra.eigenspace.is_alg_closed`\n* `linear_algebra.matrix.charpoly.eigs`\n* `measure_theory.measure.portmanteau`", "changes": [{"oldPath": "src/algebra/lie/cartan_matrix.lean", "newPath": "src/algebra/lie/cartan_matrix.lean", "changes": []}, {"oldPath": "src/algebra/module/zlattice.lean", "newPath": "src/algebra/module/zlattice.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/limits.lean", "newPath": "src/category_theory/monoidal/limits.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/category_theory/sites/compatible_sheafification.lean", "newPath": "src/category_theory/sites/compatible_sheafification.lean", "changes": []}, {"oldPath": "src/data/polynomial/unit_trinomial.lean", "newPath": "src/data/polynomial/unit_trinomial.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/classification.lean", "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/spectrum.lean", "newPath": "src/field_theory/is_alg_closed/spectrum.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace/is_alg_closed.lean", "newPath": "src/linear_algebra/eigenspace/is_alg_closed.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/eigs.lean", "newPath": "src/linear_algebra/matrix/charpoly/eigs.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/portmanteau.lean", "newPath": "src/measure_theory/measure/portmanteau.lean", "changes": []}]}, {"timestamp": 1686427222, "sha": "c471da71", "message": "chore(number_theory/legendre_symbol/gauss_eisenstein_lemmas): move zmod.wilsons_lemma (#19172)", "changes": [{"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": [["del", "theorem", "prod_Ico_one_prime", ["zmod"]], ["del", "theorem", "wilsons_lemma", ["zmod"]]]}, {"oldPath": "src/number_theory/wilson.lean", "newPath": "src/number_theory/wilson.lean", "changes": [["add", "theorem", "prod_Ico_one_prime", ["zmod"]], ["add", "theorem", "wilsons_lemma", ["zmod"]]]}]}, {"timestamp": 1686423362, "sha": "90b0d53e", "message": "feat(linear_algebra/free_module/ideal_quotient): prove dimension of quotient by ideal equals degree of norm of generator (#19121)\nAlso refactor file into `namespace ideal`.", "changes": [{"oldPath": "src/linear_algebra/free_module/ideal_quotient.lean", "newPath": "src/linear_algebra/free_module/ideal_quotient.lean", "changes": [["mod", "theorem", "finrank_quotient_eq_sum", ["ideal"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/free_module/norm.lean", "changes": [["add", "theorem", "associated_norm_prod_smith", []], ["add", "theorem", "finrank_quotient_span_eq_nat_degree_norm", []]]}]}, {"timestamp": 1686416499, "sha": "e1e7190e", "message": "feat(data/polynomial/div): add X_sub_C_dvd_sub_C_eval (#19120)", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "X_sub_C_dvd_sub_C_eval", ["polynomial"]], ["mod", "theorem", "dvd_iff_is_root", ["polynomial"]], ["add", "theorem", "mem_span_C_X_sub_C_X_sub_C_iff_eval_eval_eq_zero", ["polynomial"]]]}]}, {"timestamp": 1686375099, "sha": "fd4551cf", "message": "chore(*): add mathlib4 synchronization comments (#19171)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.lie.cartan_subalgebra`\n* `algebra.lie.nilpotent`\n* `analysis.ODE.picard_lindelof`\n* `analysis.calculus.affine_map`\n* `analysis.complex.abs_max`\n* `analysis.complex.cauchy_integral`\n* `analysis.complex.liouville`\n* `analysis.complex.locally_uniform_limit`\n* `analysis.complex.phragmen_lindelof`\n* `analysis.complex.removable_singularity`\n* `analysis.complex.schwarz`\n* `analysis.convex.measure`\n* `analysis.fourier.fourier_transform`\n* `analysis.normed_space.add_torsor_bases`\n* `analysis.normed_space.continuous_affine_map`\n* `analysis.special_functions.improper_integrals`\n* `analysis.special_functions.stirling`\n* `analysis.special_functions.trigonometric.euler_sine_prod`\n* `analysis.sum_integral_comparisons`\n* `category_theory.closed.cartesian`\n* `category_theory.closed.types`\n* `category_theory.closed.zero`\n* `category_theory.monoidal.Mod_`\n* `data.real.pi.bounds`\n* `data.vector3`\n* `field_theory.fixed`\n* `field_theory.is_alg_closed.basic`\n* `field_theory.normal`\n* `measure_theory.group.geometry_of_numbers`\n* `measure_theory.group.integration`\n* `measure_theory.integral.circle_integral`\n* `measure_theory.integral.circle_transform`\n* `measure_theory.integral.exp_decay`\n* `measure_theory.integral.integral_eq_improper`\n* `measure_theory.integral.layercake`\n* `number_theory.bernoulli_polynomials`\n* `probability.kernel.basic`\n* `topology.category.Profinite.cofiltered_limit`", "changes": [{"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/calculus/affine_map.lean", "newPath": "src/analysis/calculus/affine_map.lean", "changes": []}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": []}, {"oldPath": "src/analysis/complex/locally_uniform_limit.lean", "newPath": "src/analysis/complex/locally_uniform_limit.lean", "changes": []}, {"oldPath": "src/analysis/complex/phragmen_lindelof.lean", "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/complex/removable_singularity.lean", "newPath": "src/analysis/complex/removable_singularity.lean", "changes": []}, {"oldPath": "src/analysis/complex/schwarz.lean", "newPath": "src/analysis/complex/schwarz.lean", "changes": []}, {"oldPath": "src/analysis/convex/measure.lean", "newPath": "src/analysis/convex/measure.lean", "changes": []}, {"oldPath": "src/analysis/fourier/fourier_transform.lean", "newPath": "src/analysis/fourier/fourier_transform.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/continuous_affine_map.lean", "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/improper_integrals.lean", "newPath": "src/analysis/special_functions/improper_integrals.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/stirling.lean", "newPath": "src/analysis/special_functions/stirling.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/euler_sine_prod.lean", "newPath": "src/analysis/special_functions/trigonometric/euler_sine_prod.lean", "changes": []}, {"oldPath": "src/analysis/sum_integral_comparisons.lean", "newPath": "src/analysis/sum_integral_comparisons.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/closed/types.lean", "newPath": "src/category_theory/closed/types.lean", "changes": []}, {"oldPath": "src/category_theory/closed/zero.lean", "newPath": "src/category_theory/closed/zero.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mod_.lean", "newPath": "src/category_theory/monoidal/Mod_.lean", "changes": []}, {"oldPath": "src/data/real/pi/bounds.lean", "newPath": "src/data/real/pi/bounds.lean", "changes": []}, {"oldPath": "src/data/vector3.lean", "newPath": "src/data/vector3.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/measure_theory/group/geometry_of_numbers.lean", "newPath": "src/measure_theory/group/geometry_of_numbers.lean", "changes": []}, {"oldPath": "src/measure_theory/group/integration.lean", "newPath": "src/measure_theory/group/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_transform.lean", "newPath": "src/measure_theory/integral/circle_transform.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/exp_decay.lean", "newPath": "src/measure_theory/integral/exp_decay.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/layercake.lean", "newPath": "src/measure_theory/integral/layercake.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/probability/kernel/basic.lean", "newPath": "src/probability/kernel/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": []}]}, {"timestamp": 1686340944, "sha": "a3e83f0f", "message": "feat(algebra/module/zlattice): prove some results about Z-lattices (#18266)\nFor a ℤ-lattice `L` given by `L := submodule.span ℤ (set.range b)` where `b` is a basis of finite dimensional real vector space `E`, this PR defines the fundamental domain of `L` and proves that it is a fundamental domain in the sense of `measure_theory.group.fundamental_domain`. \nIt also introduces most of the tools that will be needed to prove that a discrete subgroup of `E` that spans `E` over `ℝ` is a \nℤ-lattice, see #18477", "changes": [{"oldPath": null, "newPath": "src/algebra/module/zlattice.lean", "changes": [["add", "def", "ceil", ["zspan"]], ["add", "theorem", "ceil_eq_self_of_mem", ["zspan"]], ["add", "theorem", "coe_floor_self", ["zspan"]], ["add", "theorem", "coe_fract_self", ["zspan"]], ["add", "theorem", "exist_unique_vadd_mem_fundamental_domain", ["zspan"]], ["add", "def", "floor", ["zspan"]], ["add", "theorem", "floor_eq_self_of_mem", ["zspan"]], ["add", "def", "fract", ["zspan"]], ["add", "theorem", "fract_add_zspan", ["zspan"]], ["add", "theorem", "fract_apply", ["zspan"]], ["add", "theorem", "fract_eq_fract", ["zspan"]], ["add", "theorem", "fract_eq_self", ["zspan"]], ["add", "theorem", "fract_fract", ["zspan"]], ["add", "theorem", "fract_mem_fundamental_domain", ["zspan"]], ["add", "theorem", "fract_zspan_add", ["zspan"]], ["add", "def", "fundamental_domain", ["zspan"]], ["add", "theorem", "fundamental_domain_bounded", ["zspan"]], ["add", "theorem", "fundamental_domain_measurable_set", ["zspan"]], ["add", "theorem", "mem_fundamental_domain", ["zspan"]], ["add", "theorem", "norm_fract_le", ["zspan"]], ["add", "theorem", "repr_ceil_apply", ["zspan"]], ["add", "theorem", "repr_floor_apply", ["zspan"]], ["add", "theorem", "repr_fract_apply", ["zspan"]], ["add", "theorem", "vadd_mem_fundamental_domain", ["zspan"]]]}]}, {"timestamp": 1686331597, "sha": "96aa788f", "message": "feat(linear_algebra/matrix/nonsingular_inverse): 2×2 block triangular matrices are invertible iff their diagonal is (#18849)", "changes": [{"oldPath": "src/linear_algebra/matrix/schur_complement.lean", "newPath": "src/linear_algebra/matrix/schur_complement.lean", "changes": [["add", "def", "from_blocks_zero₁₂_invertible", ["matrix"]], ["add", "def", "from_blocks_zero₁₂_invertible_equiv", ["matrix"]], ["add", "def", "from_blocks_zero₂₁_invertible", ["matrix"]], ["add", "def", "from_blocks_zero₂₁_invertible_equiv", ["matrix"]], ["add", "theorem", "inv_from_blocks_zero₁₂_of_is_unit_iff", ["matrix"]], ["add", "theorem", "inv_from_blocks_zero₂₁_of_is_unit_iff", ["matrix"]], ["add", "theorem", "inv_of_from_blocks_zero₁₂_eq", ["matrix"]], ["add", "theorem", "inv_of_from_blocks_zero₂₁_eq", ["matrix"]], ["add", "def", "invertible_of_from_blocks_zero₁₂_invertible", ["matrix"]], ["add", "def", "invertible_of_from_blocks_zero₂₁_invertible", ["matrix"]], ["add", "theorem", "is_unit_from_blocks_zero₁₂", ["matrix"]], ["add", "theorem", "is_unit_from_blocks_zero₂₁", ["matrix"]]]}]}, {"timestamp": 1686331596, "sha": "ba074af8", "message": "feat(probability/martingale): optional sampling theorem (#14065)\nWe prove the optional sampling theorem: if `τ` is a bounded stopping time and `σ` is another stopping time, then the value of a martingale `f` at the stopping time `min τ σ` is almost everywhere equal to `μ[stopped_value f τ | hσ.measurable_space]`.", "changes": [{"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/probability/martingale/optional_sampling.lean", "changes": [["add", "theorem", "condexp_stopped_value_stopping_time_ae_eq_restrict_le", ["measure_theory", "martingale"]], ["add", "theorem", "condexp_stopping_time_ae_eq_restrict_eq_const", ["measure_theory", "martingale"]], ["add", "theorem", "condexp_stopping_time_ae_eq_restrict_eq_const_of_le_const", ["measure_theory", "martingale"]], ["add", "theorem", "stopped_value_ae_eq_condexp_of_le", ["measure_theory", "martingale"]], ["add", "theorem", "stopped_value_ae_eq_condexp_of_le_const", ["measure_theory", "martingale"]], ["add", "theorem", "stopped_value_ae_eq_condexp_of_le_const_of_countable_range", ["measure_theory", "martingale"]], ["add", "theorem", "stopped_value_ae_eq_condexp_of_le_of_countable_range", ["measure_theory", "martingale"]], ["add", "theorem", "stopped_value_ae_eq_restrict_eq", ["measure_theory", "martingale"]], ["add", "theorem", "stopped_value_min_ae_eq_condexp", ["measure_theory", "martingale"]]]}, {"oldPath": "src/probability/process/stopping.lean", "newPath": "src/probability/process/stopping.lean", "changes": [["add", "theorem", "condexp_min_stopping_time_ae_eq_restrict_le", ["measure_theory"]], ["add", "theorem", "condexp_min_stopping_time_ae_eq_restrict_le_const", ["measure_theory"]], ["add", "theorem", "condexp_stopping_time_ae_eq_restrict_eq", ["measure_theory"]], ["add", "theorem", "condexp_stopping_time_ae_eq_restrict_eq_of_countable", ["measure_theory"]], ["add", "theorem", "condexp_stopping_time_ae_eq_restrict_eq_of_countable_range", ["measure_theory"]]]}]}, {"timestamp": 1686322220, "sha": "cc67cd75", "message": "chore(*/centralizer): add forgotten `to_additive`s (#19168)\nI forgot these in #18861. These are already in the forward-port PR, leanprover-community/mathlib4#4896.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "center_le_centralizer", ["subgroup"]], ["mod", "theorem", "centralizer_eq_top_iff_subset", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/centralizer.lean", "newPath": "src/group_theory/submonoid/centralizer.lean", "changes": [["mod", "theorem", "center_le_centralizer", ["submonoid"]], ["mod", "theorem", "centralizer_eq_top_iff_subset", ["submonoid"]]]}, {"oldPath": "src/group_theory/subsemigroup/centralizer.lean", "newPath": "src/group_theory/subsemigroup/centralizer.lean", "changes": [["mod", "theorem", "centralizer_eq_top_iff_subset", ["set"]], ["mod", "theorem", "centralizer_eq_top_iff_subset", ["subsemigroup"]]]}]}, {"timestamp": 1686295596, "sha": "59150e4a", "message": "chore(modular_forms/basic): fix typo in docs (#19166)", "changes": [{"oldPath": "src/number_theory/modular_forms/basic.lean", "newPath": "src/number_theory/modular_forms/basic.lean", "changes": []}]}, {"timestamp": 1686289069, "sha": "6b31d1ee", "message": "chore(*): add mathlib4 synchronization comments (#19167)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.algebra.spectrum`\n* `algebra.category.Module.algebra`\n* `algebra.lie.free`\n* `algebra.lie.normalizer`\n* `algebra.lie.quotient`\n* `algebra.lie.universal_enveloping`\n* `algebra.order.complete_field`\n* `algebra.order.interval`\n* `algebra.star.order`\n* `analysis.normed_space.enorm`\n* `analysis.special_functions.integrals`\n* `analysis.special_functions.non_integrable`\n* `analysis.special_functions.polar_coord`\n* `category_theory.monoidal.of_has_finite_products`\n* `category_theory.monoidal.opposite`\n* `category_theory.monoidal.skeleton`\n* `category_theory.monoidal.types.coyoneda`\n* `category_theory.preadditive.Mat`\n* `data.rat.star`\n* `data.real.pi.wallis`\n* `field_theory.adjoin`\n* `group_theory.schur_zassenhaus`\n* `linear_algebra.eigenspace.basic`\n* `linear_algebra.tensor_algebra.grading`\n* `measure_theory.covering.besicovitch`\n* `measure_theory.covering.besicovitch_vector_space`\n* `measure_theory.function.jacobian`\n* `measure_theory.integral.divergence_theorem`\n* `measure_theory.integral.fund_thm_calculus`\n* `measure_theory.measure.lebesgue.integral`\n* `number_theory.ramification_inertia`\n* `ring_theory.dedekind_domain.dvr`\n* `ring_theory.dedekind_domain.pid`\n* `ring_theory.discrete_valuation_ring.tfae`\n* `ring_theory.polynomial.cyclotomic.basic`\n* `ring_theory.witt_vector.basic`\n* `ring_theory.witt_vector.is_poly`\n* `ring_theory.witt_vector.mul_p`\n* `ring_theory.witt_vector.teichmuller`\n* `topology.algebra.continuous_affine_map`\n* `topology.algebra.module.character_space`\n* `topology.category.Compactum`\n* `topology.continuous_function.units`", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/algebra.lean", "newPath": "src/algebra/category/Module/algebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": []}, {"oldPath": "src/algebra/lie/normalizer.lean", "newPath": "src/algebra/lie/normalizer.lean", "changes": []}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}, {"oldPath": "src/algebra/order/complete_field.lean", "newPath": "src/algebra/order/complete_field.lean", "changes": []}, {"oldPath": "src/algebra/order/interval.lean", "newPath": "src/algebra/order/interval.lean", "changes": []}, {"oldPath": "src/algebra/star/order.lean", "newPath": "src/algebra/star/order.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polar_coord.lean", "newPath": "src/analysis/special_functions/polar_coord.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/opposite.lean", "newPath": "src/category_theory/monoidal/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/skeleton.lean", "newPath": "src/category_theory/monoidal/skeleton.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types/coyoneda.lean", "newPath": "src/category_theory/monoidal/types/coyoneda.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/data/rat/star.lean", "newPath": "src/data/rat/star.lean", "changes": []}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace/basic.lean", "newPath": "src/linear_algebra/eigenspace/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/grading.lean", "newPath": "src/linear_algebra/tensor_algebra/grading.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/fund_thm_calculus.lean", "newPath": "src/measure_theory/integral/fund_thm_calculus.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue/integral.lean", "newPath": "src/measure_theory/measure/lebesgue/integral.lean", "changes": []}, {"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/dvr.lean", "newPath": "src/ring_theory/dedekind_domain/dvr.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/pid.lean", "newPath": "src/ring_theory/dedekind_domain/pid.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring/tfae.lean", "newPath": "src/ring_theory/discrete_valuation_ring/tfae.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/mul_p.lean", "newPath": "src/ring_theory/witt_vector/mul_p.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/teichmuller.lean", "newPath": "src/ring_theory/witt_vector/teichmuller.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/units.lean", "newPath": "src/topology/continuous_function/units.lean", "changes": []}]}, {"timestamp": 1686273808, "sha": "74f1d619", "message": "feat(analysis/convex/cone/proper): define proper cone (#18913)\nPart of #16266\nWe define proper cones as nonempty, closed cones and define duals.\nNext todo: Prove Farkas' lemma from #19008", "changes": [{"oldPath": "src/analysis/convex/cone/proper.lean", "newPath": "src/analysis/convex/cone/proper.lean", "changes": [["add", "theorem", "closure_eq", ["convex_cone"]], ["mod", "theorem", "coe_closure", ["convex_cone"]], ["add", "theorem", "coe_dual", ["proper_cone"]], ["add", "theorem", "coe_map", ["proper_cone"]], ["add", "theorem", "coe_zero", ["proper_cone"]], ["add", "def", "dual", ["proper_cone"]], ["add", "theorem", "dual_dual", ["proper_cone"]], ["add", "theorem", "ext'", ["proper_cone"]], ["add", "theorem", "ext", ["proper_cone"]], ["add", "theorem", "map_id", ["proper_cone"]], ["add", "theorem", "mem_coe", ["proper_cone"]], ["add", "theorem", "mem_dual", ["proper_cone"]], ["add", "theorem", "mem_map", ["proper_cone"]], ["add", "theorem", "mem_zero", ["proper_cone"]], ["add", "theorem", "pointed_zero", ["proper_cone"]], ["add", "theorem", "to_convex_cone_eq_coe", ["proper_cone"]], ["add", "structure", "proper_cone", []]]}]}, {"timestamp": 1686199351, "sha": "7e5137f5", "message": "chore(*): add mathlib4 synchronization comments (#19165)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.lie.classical`\n* `analysis.calculus.bump_function_inner`\n* `analysis.calculus.monotone`\n* `analysis.calculus.parametric_interval_integral`\n* `analysis.normed_space.quaternion_exponential`\n* `analysis.special_functions.trigonometric.arctan_deriv`\n* `analysis.special_functions.trigonometric.bounds`\n* `category_theory.bicategory.coherence_tactic`\n* `category_theory.monoidal.Mon_`\n* `category_theory.monoidal.coherence`\n* `category_theory.monoidal.subcategory`\n* `category_theory.sites.compatible_plus`\n* `category_theory.sites.types`\n* `data.json`\n* `data.real.pi.leibniz`\n* `geometry.euclidean.angle.unoriented.right_angle`\n* `linear_algebra.tensor_algebra.basic`\n* `measure_theory.covering.density_theorem`\n* `measure_theory.covering.differentiation`\n* `measure_theory.covering.liminf_limsup`\n* `measure_theory.covering.one_dim`\n* `measure_theory.decomposition.lebesgue`\n* `measure_theory.decomposition.radon_nikodym`\n* `measure_theory.function.continuous_map_dense`\n* `measure_theory.function.l2_space`\n* `measure_theory.function.special_functions.arctan`\n* `measure_theory.integral.interval_average`\n* `measure_theory.integral.interval_integral`\n* `measure_theory.integral.peak_function`\n* `measure_theory.measure.finite_measure`\n* `measure_theory.measure.haar.quotient`\n* `measure_theory.measure.probability_measure`\n* `probability.integration`\n* `ring_theory.class_group`\n* `ring_theory.roots_of_unity.basic`\n* `ring_theory.roots_of_unity.complex`\n* `topology.order.hom.esakia`", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/analysis/calculus/bump_function_inner.lean", "newPath": "src/analysis/calculus/bump_function_inner.lean", "changes": []}, {"oldPath": "src/analysis/calculus/monotone.lean", "newPath": "src/analysis/calculus/monotone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_interval_integral.lean", "newPath": "src/analysis/calculus/parametric_interval_integral.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/quaternion_exponential.lean", "newPath": "src/analysis/normed_space/quaternion_exponential.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/bounds.lean", "newPath": "src/analysis/special_functions/trigonometric/bounds.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/coherence_tactic.lean", "newPath": "src/category_theory/bicategory/coherence_tactic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/coherence.lean", "newPath": "src/category_theory/monoidal/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/subcategory.lean", "newPath": "src/category_theory/monoidal/subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/sites/compatible_plus.lean", "newPath": "src/category_theory/sites/compatible_plus.lean", "changes": []}, {"oldPath": "src/category_theory/sites/types.lean", "newPath": "src/category_theory/sites/types.lean", "changes": []}, {"oldPath": "src/data/json.lean", "newPath": "src/data/json.lean", "changes": []}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/unoriented/right_angle.lean", "newPath": "src/geometry/euclidean/angle/unoriented/right_angle.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/basic.lean", "newPath": "src/linear_algebra/tensor_algebra/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/density_theorem.lean", "newPath": "src/measure_theory/covering/density_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/liminf_limsup.lean", "newPath": "src/measure_theory/covering/liminf_limsup.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/one_dim.lean", "newPath": "src/measure_theory/covering/one_dim.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/arctan.lean", "newPath": "src/measure_theory/function/special_functions/arctan.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_average.lean", "newPath": "src/measure_theory/integral/interval_average.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/peak_function.lean", "newPath": "src/measure_theory/integral/peak_function.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/finite_measure.lean", "newPath": "src/measure_theory/measure/finite_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar/quotient.lean", "newPath": "src/measure_theory/measure/haar/quotient.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/probability_measure.lean", "newPath": "src/measure_theory/measure/probability_measure.lean", "changes": []}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": []}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity/basic.lean", "newPath": "src/ring_theory/roots_of_unity/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity/complex.lean", "newPath": "src/ring_theory/roots_of_unity/complex.lean", "changes": []}, {"oldPath": "src/topology/order/hom/esakia.lean", "newPath": "src/topology/order/hom/esakia.lean", "changes": []}]}, {"timestamp": 1686166468, "sha": "b915e939", "message": "feat(ring_theory/subring): centralizer as a subring (#18861)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["add", "theorem", "center_le_centralizer", ["subalgebra"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["subalgebra"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "center_le_centralizer", ["subgroup"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/centralizer.lean", "newPath": "src/group_theory/submonoid/centralizer.lean", "changes": [["add", "theorem", "center_le_centralizer", ["submonoid"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["submonoid"]]]}, {"oldPath": "src/group_theory/subsemigroup/centralizer.lean", "newPath": "src/group_theory/subsemigroup/centralizer.lean", "changes": [["add", "theorem", "center_subset_centralizer", ["set"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["set"]], ["add", "theorem", "center_le_centralizer", ["subsemigroup"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["subsemigroup"]]]}, {"oldPath": "src/ring_theory/non_unital_subsemiring/basic.lean", "newPath": "src/ring_theory/non_unital_subsemiring/basic.lean", "changes": [["add", "theorem", "center_le_centralizer", ["non_unital_subsemiring"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["non_unital_subsemiring"]]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["add", "theorem", "center_le_centralizer", ["subring"]], ["add", "def", "centralizer", ["subring"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["subring"]], ["add", "theorem", "centralizer_le", ["subring"]], ["add", "theorem", "centralizer_to_submonoid", ["subring"]], ["add", "theorem", "centralizer_to_subsemiring", ["subring"]], ["add", "theorem", "centralizer_univ", ["subring"]], ["add", "theorem", "coe_centralizer", ["subring"]], ["add", "theorem", "mem_centralizer_iff", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "theorem", "center_le_centralizer", ["subsemiring"]], ["add", "theorem", "centralizer_eq_top_iff_subset", ["subsemiring"]]]}]}, {"timestamp": 1686155653, "sha": "31c24aa7", "message": "feat(algebra/star/basic): refactor `star_ordered_ring` to include `add_submonoid.closure` (#18854)\nPer [Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Star.20ordered.20ring), this refactors `star_ordered_ring` so that the condition `star_ordered_ring.nonneg_iff` is changed from `∀ r : R, 0 ≤ r ↔ ∃ s, r = star s * s` to something morally equivalent to `∀ x : R, 0 ≤ x ↔ x ∈ add_submonoid.closure (set.range (λ s : R, star s * s))`.\nIn fact, we actually change the structure field `nonneg_iff` to `le_iff`, which characterizes `· ≤ ·` instead of just `0 ≤ ·`. When `R` is a `non_unital_ring`, there is effectively no change (see how we recover `star_ordered_ring.nonneg_iff` and also `star_ordered_ring.of_nonneg_iff`), but it gives a more useful and sensible condition when `R` is only a `non_unital_semiring`. For instance, now `conjugate_le_conjugate` holds for `non_unital_semiring`. \nThere are essentially two reasons for this change.\n1. It would be nice if things like `ℚ` could be `star_ordered_ring`s. This is a minor reason, but it should be a nice convenience. This instance is added in this PR in a new file.\n2. Much more importantly, we want to declare the positive elements in a `star_ordered_ring` as an `add_submonoid`, but to accomplish this with the previous definition requires much more stringent type class assumptions (e.g., C⋆-algebras) and sophisticated machinery (the continuous functional calculus) in order to show that the sum of positive elements is positive. This change essentially allows us to defer that proof obligation to the settings where it will matter that a positive element really does have the form `star s * s`.\nWe remark that even for C⋆-algebras, the fact that the sum of positive elements (i.e., those of the form `star s * s`) is positive is a deep result which was first shown in 1952 by [Fukamiya](http://www.sci.kumamoto-u.ac.jp/~kjm/BKS/kjmpdf/KJSM/v1-4-fukamiya.pdf), and then again in 1953 by [Kelley and Vaught](https://www.ams.org/journals/tran/1953-074-01/S0002-9947-1953-0054175-2/S0002-9947-1953-0054175-2.pdf). These proofs are in essence very similar, but the latter is more aesthetically pleasing, and it is this proof that appears in all the textbooks. I went looking and did not see another proof anywhere in the literature.\nWe provide a few convenience constructors for `star_ordered_ring` in the form of reducible definitions which can apply when `R` is either a `non_unital_ring` (so we only need to characterize nonnegativity), and / or when positive elements have exactly the form `star s * s`. In this way, we can effectively maintain the status quo (see the instances for `real` and `complex`).", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["del", "theorem", "conjugate_le_conjugate'", []], ["del", "theorem", "conjugate_le_conjugate", []], ["del", "theorem", "conjugate_nonneg'", []], ["del", "theorem", "conjugate_nonneg", []], ["del", "theorem", "star_mul_self_nonneg'", []], ["del", "theorem", "star_mul_self_nonneg", []]]}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/star/order.lean", "changes": [["add", "theorem", "conjugate_le_conjugate'", []], ["add", "theorem", "conjugate_le_conjugate", []], ["add", "theorem", "conjugate_nonneg'", []], ["add", "theorem", "conjugate_nonneg", []], ["add", "theorem", "star_mul_self_nonneg'", []], ["add", "theorem", "star_mul_self_nonneg", []], ["add", "theorem", "nonneg_iff", ["star_ordered_ring"]], ["add", "def", "of_le_iff", ["star_ordered_ring"]], ["add", "def", "of_nonneg_iff'", ["star_ordered_ring"]], ["add", "def", "of_nonneg_iff", ["star_ordered_ring"]]]}, {"oldPath": "src/analysis/normed_space/star/continuous_functional_calculus.lean", "newPath": "src/analysis/normed_space/star/continuous_functional_calculus.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rat/star.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/dot_product.lean", "newPath": "src/linear_algebra/matrix/dot_product.lean", "changes": []}]}, {"timestamp": 1686142851, "sha": "e354e865", "message": "feat(geometry/manifold): lemmas from the sphere eversion project (#18877)\n* Also adds a new library note `comp_of_eq lemmas` about how (I think) we should better formulate composition lemmas of properties of functions.\n* About the library note `comp_of_eq lemmas`: exactly the same problems happen in Lean 4.\n* renamings \n```\nsmooth_iff_proj_smooth -> smooth_prod_iff\ndifferentiable_at.fderiv_within_prod -> differentiable_within_at.fderiv_within_prod\n```\n* We add a `path_connected_space` instance of the tangent space. This instance is sufficient to compile sphere-eversion, without any `normed_space` instances on the tangent space (which are not the canonical structure on the tangent space).\n* From the sphere eversion project", "changes": [{"oldPath": "src/analysis/calculus/fderiv/prod.lean", "newPath": "src/analysis/calculus/fderiv/prod.lean", "changes": [["del", "theorem", "fderiv_within_prod", ["differentiable_at"]], ["add", "theorem", "fderiv_within_prod", ["differentiable_within_at"]]]}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "comp_of_eq", ["cont_mdiff_at"]], ["add", "theorem", "cont_mdiff_on_ext_chart_at_symm", []], ["add", "theorem", "cont_mdiff_on_extend_symm", []], ["add", "theorem", "cont_mdiff_on_model_symm", []], ["add", "theorem", "cont_mdiff_prod_iff", []], ["add", "theorem", "comp_of_eq", ["cont_mdiff_within_at"]], ["add", "theorem", "smooth_at_prod_iff", []], ["del", "theorem", "smooth_iff_proj_smooth", []], ["add", "theorem", "smooth_prod_iff", []]]}, {"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": [["add", "def", "fst", ["cont_mdiff_map"]], ["add", "def", "prod_mk", ["cont_mdiff_map"]], ["add", "def", "snd", ["cont_mdiff_map"]]]}, {"oldPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "newPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "changes": [["add", "theorem", "mfderiv_apply", ["cont_mdiff_at"]]]}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "theorem", "has_mfderiv_at_fst", []], ["add", "theorem", "has_mfderiv_at_snd", []], ["add", "theorem", "has_mfderiv_within_at_fst", []], ["add", "theorem", "has_mfderiv_within_at_snd", []], ["add", "theorem", "prod_mk", ["mdifferentiable"]], ["add", "theorem", "prod_mk_space", ["mdifferentiable"]], ["add", "theorem", "mfderiv_prod", ["mdifferentiable_at"]], ["add", "theorem", "prod_mk", ["mdifferentiable_at"]], ["add", "theorem", "prod_mk_space", ["mdifferentiable_at"]], ["add", "theorem", "mdifferentiable_at_fst", []], ["add", "theorem", "mdifferentiable_at_snd", []], ["add", "theorem", "mdifferentiable_fst", []], ["add", "theorem", "prod_mk", ["mdifferentiable_on"]], ["add", "theorem", "prod_mk_space", ["mdifferentiable_on"]], ["add", "theorem", "mdifferentiable_on_fst", []], ["add", "theorem", "mdifferentiable_on_snd", []], ["add", "theorem", "mdifferentiable_snd", []], ["add", "theorem", "prod_mk", ["mdifferentiable_within_at"]], ["add", "theorem", "prod_mk_space", ["mdifferentiable_within_at"]], ["add", "theorem", "mdifferentiable_within_at_fst", []], ["add", "theorem", "mdifferentiable_within_at_snd", []], ["add", "theorem", "mfderiv_comp_of_eq", []], ["add", "theorem", "mfderiv_congr", []], ["add", "theorem", "mfderiv_congr_point", []], ["add", "theorem", "mfderiv_fst", []], ["add", "theorem", "mfderiv_prod_eq_add", []], ["add", "theorem", "mfderiv_prod_left", []], ["add", "theorem", "mfderiv_prod_right", []], ["add", "theorem", "mfderiv_snd", []], ["add", "theorem", "mfderiv_within_fst", []], ["add", "theorem", "mfderiv_within_snd", []], ["add", "theorem", "tangent_map_prod_fst", []], ["add", "theorem", "tangent_map_prod_snd", []], ["add", "theorem", "tangent_map_within_prod_fst", []], ["add", "theorem", "tangent_map_within_prod_snd", []]]}, {"oldPath": "src/geometry/manifold/vector_bundle/tangent.lean", "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "theorem", "comp_fst_add_comp_snd", ["continuous_linear_map"]], ["add", "theorem", "coprod_inl_inr", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "comp_of_eq", ["continuous_at"]]]}, {"oldPath": "test/continuity.lean", "newPath": "test/continuity.lean", "changes": []}]}, {"timestamp": 1686137718, "sha": "3b92d54a", "message": "chore(probability/kernel/composition): redefine kernel.comp using measure.bind, remove kernel.map_measure (#19160)\nWe replace the definition of `kernel.comp` with a new one using `measure.bind`: it removes the need for `is_s_finite_kernel` hypotheses in the definition and most lemmas. When the kernels are s-finite, the new definition coincides with the old one.\nWe remove `kernel.map_measure` because it is exactly the same as `measure.bind` applied to a kernel.", "changes": [{"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": [["mod", "def", "comp", ["probability_theory", "kernel"]], ["add", "theorem", "comp_apply'", ["probability_theory", "kernel"]], ["mod", "theorem", "comp_apply", ["probability_theory", "kernel"]], ["mod", "theorem", "comp_deterministic_eq_comap", ["probability_theory", "kernel"]], ["add", "theorem", "comp_eq_snd_comp_prod", ["probability_theory", "kernel"]], ["mod", "theorem", "deterministic_comp_eq_map", ["probability_theory", "kernel"]], ["mod", "theorem", "lintegral_comp", ["probability_theory", "kernel"]]]}, {"oldPath": "src/probability/kernel/invariance.lean", "newPath": "src/probability/kernel/invariance.lean", "changes": [["add", "theorem", "bind_add", ["probability_theory", "kernel"]], ["add", "theorem", "bind_smul", ["probability_theory", "kernel"]], ["del", "theorem", "comp_apply_eq_map_measure", ["probability_theory", "kernel"]], ["add", "theorem", "comp_const_apply_eq_bind", ["probability_theory", "kernel"]], ["del", "theorem", "comp_const_apply_eq_map_measure", ["probability_theory", "kernel"]], ["add", "theorem", "const_bind_eq_comp_const", ["probability_theory", "kernel"]], ["del", "theorem", "const_map_measure_eq_comp_const", ["probability_theory", "kernel"]], ["mod", "theorem", "comp", ["probability_theory", "kernel", "invariant"]], ["mod", "theorem", "comp_const", ["probability_theory", "kernel", "invariant"]], ["mod", "theorem", "def", ["probability_theory", "kernel", "invariant"]], ["del", "theorem", "lintegral_map_measure", ["probability_theory", "kernel"]], ["del", "def", "map_measure", ["probability_theory", "kernel"]], ["del", "theorem", "map_measure_add", ["probability_theory", "kernel"]], ["del", "theorem", "map_measure_apply", ["probability_theory", "kernel"]], ["del", "theorem", "map_measure_smul", ["probability_theory", "kernel"]], ["del", "theorem", "map_measure_zero", ["probability_theory", "kernel"]]]}]}, {"timestamp": 1686133697, "sha": "0dc40792", "message": "refactor(geometry/manifold/cont_mdiff_map): refactor to reduce imports (#19164)\nSee https://tqft.net/mathlib4/2023-06-07/geometry.manifold.algebra.left_invariant_derivation.pdf for the motivation.\nI'm happy if this one is shot down. :-)", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "newPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1686124503, "sha": "81843c08", "message": "feat (number_theory/zeta_function): func eqn + link to Bernoulli nos (#19158)\nFunctional equation relating `zeta (1 - s)` to `zeta s`, and formula for `zeta (-k)` for nat `k` in terms of Bernoulli numbers.", "changes": [{"oldPath": "src/number_theory/zeta_function.lean", "newPath": "src/number_theory/zeta_function.lean", "changes": [["add", "theorem", "riemann_completed_zeta_one_sub", []], ["add", "theorem", "riemann_completed_zeta₀_one_sub", []], ["add", "theorem", "riemann_zeta_four", []], ["add", "theorem", "riemann_zeta_neg_nat_eq_bernoulli", []], ["add", "theorem", "riemann_zeta_one_sub", []], ["add", "theorem", "riemann_zeta_two", []], ["add", "theorem", "riemann_zeta_two_mul_nat", []], ["del", "theorem", "zeta_eq_tsum_of_one_lt_re", []], ["add", "theorem", "zeta_eq_tsum_one_div_nat_add_one_cpow", []], ["add", "theorem", "zeta_eq_tsum_one_div_nat_cpow", []], ["add", "theorem", "zeta_nat_eq_tsum_of_gt_one", []]]}]}, {"timestamp": 1686120428, "sha": "6b016921", "message": "chore(linear_algebra/eigenspace): split file (#19163)", "changes": [{"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace/basic.lean", "changes": [["del", "theorem", "aeval_apply_of_has_eigenvector", ["module", "End"]], ["del", "theorem", "eigenspace_aeval_polynomial_degree_1", ["module", "End"]], ["del", "theorem", "exists_eigenvalue", ["module", "End"]], ["del", "theorem", "has_eigenvalue_iff_is_root", ["module", "End"]], ["del", "theorem", "has_eigenvalue_of_is_root", ["module", "End"]], ["del", "theorem", "is_root_of_has_eigenvalue", ["module", "End"]], ["del", "theorem", "ker_aeval_ring_hom'_unit_polynomial", ["module", "End"]], ["del", "theorem", "supr_generalized_eigenspace_eq_top", ["module", "End"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/eigenspace/is_alg_closed.lean", "changes": [["add", "theorem", "exists_eigenvalue", ["module", "End"]], ["add", "theorem", "supr_generalized_eigenspace_eq_top", ["module", "End"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/eigenspace/minpoly.lean", "changes": [["add", "theorem", "aeval_apply_of_has_eigenvector", ["module", "End"]], ["add", "theorem", "eigenspace_aeval_polynomial_degree_1", ["module", "End"]], ["add", "theorem", "has_eigenvalue_iff_is_root", ["module", "End"]], ["add", "theorem", "has_eigenvalue_of_is_root", ["module", "End"]], ["add", "theorem", "is_root_of_has_eigenvalue", ["module", "End"]], ["add", "theorem", "ker_aeval_ring_hom'_unit_polynomial", ["module", "End"]]]}]}, {"timestamp": 1686115446, "sha": "c2092722", "message": "chore(*): add mathlib4 synchronization comments (#19162)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.colimits`\n* `algebra.category.Module.monoidal.closed`\n* `algebra.homology.local_cohomology`\n* `analysis.box_integral.basic`\n* `analysis.box_integral.divergence_theorem`\n* `analysis.box_integral.integrability`\n* `analysis.calculus.parametric_integral`\n* `analysis.convex.integral`\n* `analysis.convex.specific_functions.deriv`\n* `analysis.special_functions.exponential`\n* `analysis.special_functions.pow.deriv`\n* `analysis.special_functions.trigonometric.arctan`\n* `analysis.special_functions.trigonometric.complex`\n* `analysis.special_functions.trigonometric.complex_deriv`\n* `analysis.special_functions.trigonometric.series`\n* `category_theory.closed.functor_category`\n* `category_theory.with_terminal`\n* `combinatorics.additive.behrend`\n* `combinatorics.derangements.exponential`\n* `data.set.ncard`\n* `field_theory.splitting_field.is_splitting_field`\n* `group_theory.schreier`\n* `group_theory.specific_groups.quaternion`\n* `linear_algebra.quadratic_form.complex`\n* `linear_algebra.quadratic_form.isometry`\n* `linear_algebra.quadratic_form.prod`\n* `linear_algebra.quadratic_form.real`\n* `measure_theory.constructions.prod.integral`\n* `measure_theory.function.ae_eq_of_integral`\n* `measure_theory.group.fundamental_domain`\n* `measure_theory.integral.average`\n* `measure_theory.integral.set_integral`\n* `measure_theory.measure.haar.inner_product_space`\n* `measure_theory.measure.with_density_vector_measure`\n* `representation_theory.Action`\n* `ring_theory.dedekind_domain.factorization`\n* `ring_theory.localization.away.adjoin_root`\n* `ring_theory.valuation.valuation_ring`", "changes": [{"oldPath": "src/algebra/category/Module/colimits.lean", "newPath": "src/algebra/category/Module/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/monoidal/closed.lean", "newPath": "src/algebra/category/Module/monoidal/closed.lean", "changes": []}, {"oldPath": "src/algebra/homology/local_cohomology.lean", "newPath": "src/algebra/homology/local_cohomology.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions/deriv.lean", "newPath": "src/analysis/convex/specific_functions/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/deriv.lean", "newPath": "src/analysis/special_functions/pow/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/series.lean", "newPath": "src/analysis/special_functions/trigonometric/series.lean", "changes": []}, {"oldPath": "src/category_theory/closed/functor_category.lean", "newPath": "src/category_theory/closed/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/with_terminal.lean", "newPath": "src/category_theory/with_terminal.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/behrend.lean", "newPath": "src/combinatorics/additive/behrend.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/exponential.lean", "newPath": "src/combinatorics/derangements/exponential.lean", "changes": []}, {"oldPath": "src/data/set/ncard.lean", "newPath": "src/data/set/ncard.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field/is_splitting_field.lean", "newPath": "src/field_theory/splitting_field/is_splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/complex.lean", "newPath": "src/linear_algebra/quadratic_form/complex.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/isometry.lean", "newPath": "src/linear_algebra/quadratic_form/isometry.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/prod.lean", "newPath": "src/linear_algebra/quadratic_form/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/real.lean", "newPath": "src/linear_algebra/quadratic_form/real.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod/integral.lean", "newPath": "src/measure_theory/constructions/prod/integral.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/average.lean", "newPath": "src/measure_theory/integral/average.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar/inner_product_space.lean", "newPath": "src/measure_theory/measure/haar/inner_product_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": []}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/factorization.lean", "newPath": "src/ring_theory/dedekind_domain/factorization.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/away/adjoin_root.lean", "newPath": "src/ring_theory/localization/away/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_ring.lean", "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": []}]}, {"timestamp": 1686071931, "sha": "58a27226", "message": "chore(algebra/algebra/spectrum): split file (#19161)\nThis splits off all the material related to polynomials from `algebra.algebra.spectrum` into a new file `field_theory.is_alg_closed.spectrum`, because (almost) all of it requires `is_alg_closed 𝕜`. This significantly simplifies the import tree for this file, and for a few files which import it.\nThis also does two minor housekeeping chores:\n1. generalizes type class assumptions for `alg_hom.mem_resolvent_set_apply` and `alg_hom.spectrum_apply_subset`\n2. rephrases `spectrum.nonempty_of_is_alg_closed_of_finite_dimensional` to use `set.nonempty`.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["del", "theorem", "exists_mem_of_not_is_unit_aeval_prod", ["spectrum"]], ["del", "theorem", "map_polynomial_aeval_of_degree_pos", ["spectrum"]], ["del", "theorem", "map_polynomial_aeval_of_nonempty", ["spectrum"]], ["del", "theorem", "map_pow_of_nonempty", ["spectrum"]], ["del", "theorem", "map_pow_of_pos", ["spectrum"]], ["del", "theorem", "nonempty_of_is_alg_closed_of_finite_dimensional", ["spectrum"]], ["del", "theorem", "pow_image_subset", ["spectrum"]], ["del", "theorem", "subset_polynomial_aeval", ["spectrum"]]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": null, "newPath": "src/field_theory/is_alg_closed/spectrum.lean", "changes": [["add", "theorem", "exists_mem_of_not_is_unit_aeval_prod", ["spectrum"]], ["add", "theorem", "map_polynomial_aeval_of_degree_pos", ["spectrum"]], ["add", "theorem", "map_polynomial_aeval_of_nonempty", ["spectrum"]], ["add", "theorem", "map_pow_of_nonempty", ["spectrum"]], ["add", "theorem", "map_pow_of_pos", ["spectrum"]], ["add", "theorem", "nonempty_of_is_alg_closed_of_finite_dimensional", ["spectrum"]], ["add", "theorem", "pow_image_subset", ["spectrum"]], ["add", "theorem", "subset_polynomial_aeval", ["spectrum"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1686028566, "sha": "36938f77", "message": "chore(*): add mathlib4 synchronization comments (#19159)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.monoidal.symmetric`\n* `algebra.lie.base_change`\n* `algebra.lie.character`\n* `algebra.lie.direct_sum`\n* `algebra.lie.semisimple`\n* `algebra.lie.skew_adjoint`\n* `algebra.lie.solvable`\n* `algebra.module.dedekind_domain`\n* `algebra.symmetrized`\n* `analysis.ODE.gronwall`\n* `analysis.box_integral.partition.measure`\n* `analysis.calculus.fderiv_analytic`\n* `analysis.calculus.series`\n* `analysis.inner_product_space.calculus`\n* `analysis.inner_product_space.euclidean_dist`\n* `analysis.special_functions.arsinh`\n* `analysis.special_functions.bernstein`\n* `analysis.special_functions.compare_exp`\n* `analysis.special_functions.complex.log_deriv`\n* `analysis.special_functions.log.deriv`\n* `analysis.special_functions.trigonometric.deriv`\n* `analysis.special_functions.trigonometric.inverse_deriv`\n* `category_theory.bicategory.natural_transformation`\n* `category_theory.monoidal.of_chosen_finite_products.symmetric`\n* `category_theory.monoidal.rigid.functor_category`\n* `category_theory.monoidal.rigid.of_equivalence`\n* `category_theory.monoidal.types.symmetric`\n* `category_theory.sites.canonical`\n* `data.complex.exponential_bounds`\n* `data.nat.sqrt_norm_num`\n* `field_theory.laurent`\n* `geometry.manifold.instances.real`\n* `geometry.manifold.instances.units_of_normed_algebra`\n* `geometry.manifold.metrizable`\n* `geometry.manifold.smooth_manifold_with_corners`\n* `group_theory.transfer`\n* `linear_algebra.quadratic_form.basic`\n* `measure_theory.integral.bochner`\n* `measure_theory.integral.vitali_caratheodory`\n* `measure_theory.measure.haar.normed_space`\n* `measure_theory.measure.lebesgue.eq_haar`\n* `number_theory.liouville.measure`\n* `ring_theory.dedekind_domain.ideal`\n* `ring_theory.polynomial.bernstein`\n* `ring_theory.witt_vector.defs`\n* `ring_theory.witt_vector.structure_polynomial`\n* `topology.continuous_function.stone_weierstrass`\n* `topology.continuous_function.weierstrass`", "changes": [{"oldPath": "src/algebra/category/Module/monoidal/symmetric.lean", "newPath": "src/algebra/category/Module/monoidal/symmetric.lean", "changes": []}, {"oldPath": "src/algebra/lie/base_change.lean", "newPath": "src/algebra/lie/base_change.lean", "changes": []}, {"oldPath": "src/algebra/lie/character.lean", "newPath": "src/algebra/lie/character.lean", "changes": []}, {"oldPath": "src/algebra/lie/direct_sum.lean", "newPath": "src/algebra/lie/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": []}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": []}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/module/dedekind_domain.lean", "newPath": "src/algebra/module/dedekind_domain.lean", "changes": []}, {"oldPath": "src/algebra/symmetrized.lean", "newPath": "src/algebra/symmetrized.lean", "changes": []}, {"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_analytic.lean", "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/series.lean", "newPath": "src/analysis/calculus/series.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/compare_exp.lean", "newPath": "src/analysis/special_functions/compare_exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log_deriv.lean", "newPath": "src/analysis/special_functions/complex/log_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/natural_transformation.lean", "newPath": "src/category_theory/bicategory/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products/symmetric.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products/symmetric.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/rigid/functor_category.lean", "newPath": "src/category_theory/monoidal/rigid/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/rigid/of_equivalence.lean", "newPath": "src/category_theory/monoidal/rigid/of_equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types/symmetric.lean", "newPath": "src/category_theory/monoidal/types/symmetric.lean", "changes": []}, {"oldPath": "src/category_theory/sites/canonical.lean", "newPath": "src/category_theory/sites/canonical.lean", "changes": []}, {"oldPath": "src/data/complex/exponential_bounds.lean", "newPath": "src/data/complex/exponential_bounds.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt_norm_num.lean", "newPath": "src/data/nat/sqrt_norm_num.lean", "changes": []}, {"oldPath": "src/field_theory/laurent.lean", "newPath": "src/field_theory/laurent.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "newPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "changes": []}, {"oldPath": "src/geometry/manifold/metrizable.lean", "newPath": "src/geometry/manifold/metrizable.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/group_theory/transfer.lean", "newPath": "src/group_theory/transfer.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar/normed_space.lean", "newPath": "src/measure_theory/measure/haar/normed_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue/eq_haar.lean", "newPath": "src/measure_theory/measure/lebesgue/eq_haar.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/measure.lean", "newPath": "src/number_theory/liouville/measure.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/weierstrass.lean", "newPath": "src/topology/continuous_function/weierstrass.lean", "changes": []}]}, {"timestamp": 1685953443, "sha": "a3209ddf", "message": "feat (special_functions/gamma): doubling formula (#19136)\nThis PR adds the proof of the Legendre doubling formula, relating `Gamma s * Gamma (s + 1 / 2)` to `Gamma (2 * s)`.", "changes": [{"oldPath": "src/analysis/analytic/isolated_zeros.lean", "newPath": "src/analysis/analytic/isolated_zeros.lean", "changes": [["add", "theorem", "eq_of_frequently_eq", ["analytic_on"]]]}, {"oldPath": "src/analysis/analytic/uniqueness.lean", "newPath": "src/analysis/analytic/uniqueness.lean", "changes": [["add", "theorem", "eq_of_eventually_eq", ["analytic_on"]]]}, {"oldPath": "src/analysis/special_functions/gamma/beta.lean", "newPath": "src/analysis/special_functions/gamma/beta.lean", "changes": [["add", "theorem", "Gamma_mul_Gamma_add_half", ["complex"]], ["add", "theorem", "Gamma_mul_Gamma_add_half", ["real"]]]}, {"oldPath": "src/analysis/special_functions/gamma/bohr_mollerup.lean", "newPath": "src/analysis/special_functions/gamma/bohr_mollerup.lean", "changes": [["add", "theorem", "add_const", ["concave_on"]], ["add", "theorem", "congr", ["concave_on"]], ["add", "theorem", "add_const", ["convex_on"]], ["add", "theorem", "congr", ["convex_on"]], ["add", "theorem", "Gamma_mul_Gamma_add_half_of_pos", ["real"]], ["add", "def", "doubling_Gamma", ["real"]], ["add", "theorem", "doubling_Gamma_add_one", ["real"]], ["add", "theorem", "doubling_Gamma_eq_Gamma", ["real"]], ["add", "theorem", "doubling_Gamma_log_convex_Ioi", ["real"]], ["add", "theorem", "doubling_Gamma_one", ["real"]], ["add", "theorem", "log_doubling_Gamma_eq", ["real"]], ["add", "theorem", "add_const", ["strict_concave_on"]], ["add", "theorem", "congr", ["strict_concave_on"]], ["add", "theorem", "add_const", ["strict_convex_on"]], ["add", "theorem", "congr", ["strict_convex_on"]]]}]}, {"timestamp": 1685946378, "sha": "575b4ea3", "message": "chore(*): add mathlib4 synchronization comments (#19157)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.lie.tensor_product`\n* `analysis.calculus.cont_diff`\n* `analysis.calculus.inverse`\n* `analysis.calculus.lagrange_multipliers`\n* `analysis.complex.real_deriv`\n* `analysis.special_functions.exp_deriv`\n* `analysis.special_functions.sqrt`\n* `category_theory.monoidal.functor_category`\n* `linear_algebra.tensor_power`\n* `number_theory.sum_four_squares`", "changes": [{"oldPath": "src/algebra/lie/tensor_product.lean", "newPath": "src/algebra/lie/tensor_product.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/sqrt.lean", "newPath": "src/analysis/special_functions/sqrt.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor_category.lean", "newPath": "src/category_theory/monoidal/functor_category.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_power.lean", "newPath": "src/linear_algebra/tensor_power.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1685946376, "sha": "4c3e1721", "message": "feat(topology/homotopy/homotopy_group): `group` and `comm_group` instances for `π_n` (#15681)\nThis PR adds:\n- Group instance for `π_(n+1)`\n- Commutative group instance for `π_(n+2)`", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/homotopy/homotopy_group.lean", "newPath": "src/topology/homotopy/homotopy_group.lean", "changes": [["mod", "def", "boundary", ["cube"]], ["del", "theorem", "continuous", ["cube", "head"]], ["del", "def", "head", ["cube"]], ["add", "def", "insert_at", ["cube"]], ["add", "theorem", "insert_at_boundary", ["cube"]], ["del", "theorem", "one_char", ["cube"]], ["del", "theorem", "proj_continuous", ["cube"]], ["add", "def", "split_at", ["cube"]], ["del", "def", "tail", ["cube"]], ["del", "def", "cube", []], ["add", "theorem", "boundary", ["gen_loop"]], ["add", "def", "c_comp_insert", ["gen_loop"]], ["add", "theorem", "coe_copy", ["gen_loop"]], ["mod", "def", "const", ["gen_loop"]], ["add", "theorem", "const_apply", ["gen_loop"]], ["add", "theorem", "continuous_from_loop", ["gen_loop"]], ["add", "theorem", "continuous_to_loop", ["gen_loop"]], ["add", "def", "copy", ["gen_loop"]], ["add", "theorem", "copy_eq", ["gen_loop"]], ["mod", "theorem", "ext", ["gen_loop"]], ["add", "def", "from_loop", ["gen_loop"]], ["add", "theorem", "from_loop_apply", ["gen_loop"]], ["add", "theorem", "from_loop_symm_to_loop", ["gen_loop"]], ["add", "theorem", "from_loop_trans_to_loop", ["gen_loop"]], ["mod", "theorem", "equiv", ["gen_loop", "homotopic"]], ["mod", "theorem", "refl", ["gen_loop", "homotopic"]], ["mod", "theorem", "symm", ["gen_loop", "homotopic"]], ["mod", "theorem", "trans", ["gen_loop", "homotopic"]], ["mod", "def", "homotopic", ["gen_loop"]], ["add", "theorem", "homotopic_from", ["gen_loop"]], ["add", "theorem", "homotopic_to", ["gen_loop"]], ["add", "def", "homotopy_from", ["gen_loop"]], ["add", "theorem", "homotopy_from_apply", ["gen_loop"]], ["add", "def", "homotopy_to", ["gen_loop"]], ["add", "theorem", "homotopy_to_apply", ["gen_loop"]], ["add", "def", "loop_homeo", ["gen_loop"]], ["mod", "theorem", "mk_apply", ["gen_loop"]], ["add", "def", "symm_at", ["gen_loop"]], ["add", "theorem", "to_from", ["gen_loop"]], ["add", "def", "to_loop", ["gen_loop"]], ["add", "theorem", "to_loop_apply", ["gen_loop"]], ["add", "def", "trans_at", ["gen_loop"]], ["add", "theorem", "trans_at_distrib", ["gen_loop"]], ["add", "def", "gen_loop", []], ["del", "structure", "gen_loop", []], ["add", "def", "gen_loop_equiv_of_unique", []], ["add", "def", "gen_loop_homeo_of_is_empty", []], ["del", "def", "gen_loop_one_equiv_path_self", []], ["del", "def", "gen_loop_zero_equiv", []], ["add", "def", "aux_group", ["homotopy_group"]], ["add", "theorem", "aux_group_indep", ["homotopy_group"]], ["add", "theorem", "inv_spec", ["homotopy_group"]], ["add", "theorem", "is_unital_aux_group", ["homotopy_group"]], ["add", "theorem", "mul_spec", ["homotopy_group"]], ["add", "theorem", "one_def", ["homotopy_group"]], ["add", "def", "pi", ["homotopy_group"]], ["add", "def", "pi_0_equiv_zeroth_homotopy", ["homotopy_group"]], ["add", "def", "pi_1_equiv_fundamental_group", ["homotopy_group"]], ["add", "theorem", "symm_at_indep", ["homotopy_group"]], ["add", "theorem", "trans_at_indep", ["homotopy_group"]], ["mod", "def", "homotopy_group", []], ["add", "def", "homotopy_group_equiv_fundamental_group", []], ["add", "def", "homotopy_group_equiv_fundamental_group_of_unique", []], ["add", "def", "homotopy_group_equiv_zeroth_homotopy_of_is_empty", []], ["add", "def", "loop_space", []], ["del", "def", "pi0_equiv_path_components", []], ["del", "def", "pi1_equiv_fundamental_group", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1685942123, "sha": "df76f433", "message": "chore(field_theory/splitting_field): split file (#19154)\nWe split `field_theory.splitting_field` into `field_theory.splitting_field.is_splitting_field` and `field_theory.splitting_field.construction`. This is useful for the port, but also quite a lot of Galois theory should not depend on the existence of splitting fields.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field/construction.lean", "changes": [["del", "theorem", "splits_of_splits", ["intermediate_field"]], ["del", "theorem", "finite_dimensional", ["polynomial", "is_splitting_field"]], ["del", "def", "lift", ["polynomial", "is_splitting_field"]], ["del", "theorem", "mul", ["polynomial", "is_splitting_field"]], ["del", "theorem", "of_alg_equiv", ["polynomial", "is_splitting_field"]], ["del", "theorem", "splits_iff", ["polynomial", "is_splitting_field"]]]}, {"oldPath": null, "newPath": "src/field_theory/splitting_field/is_splitting_field.lean", "changes": [["add", "theorem", "splits_of_splits", ["intermediate_field"]], ["add", "theorem", "finite_dimensional", ["polynomial", "is_splitting_field"]], ["add", "def", "lift", ["polynomial", "is_splitting_field"]], ["add", "theorem", "mul", ["polynomial", "is_splitting_field"]], ["add", "theorem", "of_alg_equiv", ["polynomial", "is_splitting_field"]], ["add", "theorem", "splits_iff", ["polynomial", "is_splitting_field"]]]}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}]}, {"timestamp": 1685931649, "sha": "30882647", "message": "chore(archive/imo): fix some naming inconsistencies and whitespace (#19155)\nI realize that this is the third PR concerning namespacing the files in `archive/imo`. These are some simple inconsistencies in naming. There is no rush in merging this PR, but in the long run it might help to have consistent namespacing, so that batch renames can be simpler.", "changes": [{"oldPath": "archive/imo/imo1975_q1.lean", "newPath": "archive/imo/imo1975_q1.lean", "changes": [["del", "theorem", "IMO_1975_Q1", ["imo1975_q1"]], ["add", "theorem", "imo1975_q1", []]]}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo1994_q1.lean", "newPath": "archive/imo/imo1994_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2001_q2.lean", "newPath": "archive/imo/imo2001_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2005_q3.lean", "newPath": "archive/imo/imo2005_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2005_q4.lean", "newPath": "archive/imo/imo2005_q4.lean", "changes": [["add", "theorem", "imo2005_q4", []]]}, {"oldPath": "archive/imo/imo2006_q3.lean", "newPath": "archive/imo/imo2006_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2006_q5.lean", "newPath": "archive/imo/imo2006_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q1.lean", "newPath": "archive/imo/imo2013_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q1.lean", "newPath": "archive/imo/imo2019_q1.lean", "changes": [["del", "theorem", "imo2019Q1", ["imo2019_q1"]], ["add", "theorem", "imo2019_q1", []]]}, {"oldPath": "archive/imo/imo2019_q2.lean", "newPath": "archive/imo/imo2019_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": [["del", "theorem", "imo2019_q4_upper_bound", ["imo2019_q4"]], ["add", "theorem", "upper_bound", ["imo2019_q4"]]]}, {"oldPath": "archive/imo/imo2021_q1.lean", "newPath": "archive/imo/imo2021_q1.lean", "changes": [["del", "theorem", "IMO_2021_Q1", ["imo2021_q1"]], ["add", "theorem", "imo2021_q1", []]]}]}, {"timestamp": 1685927426, "sha": "533f62f4", "message": "chore(algebraic_geometry/open_immersion): split (#19149)\nSplit `algebraic_geometry/open_immersion` into a 1000-line file which doesn't mention schemes and a 1000-line file which does.\nThis should open more porting targets (the first file should be available for porting immediately), but also helps towards a reorganization I have in mind for after-port: moving the [pre]sheafed-space and [locally-]ringed-space material from `algebraic_geometry` into a new folder in `topology` or `geometry`.", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/gluing.lean", "newPath": "src/algebraic_geometry/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion/Scheme.lean", "changes": [["del", "def", "iso_restrict", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "def", "lift", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "theorem", "lift_fac", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "theorem", "lift_range", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "theorem", "lift_uniq", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "def", "pullback_cone_of_left", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "def", "pullback_cone_of_left_is_limit", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "theorem", "pullback_snd_is_iso_of_range_subset", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["del", "def", "is_open_immersion", ["algebraic_geometry", "LocallyRingedSpace"]], ["del", "theorem", "LocallyRingedSpace_to_LocallyRingedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "SheafedSpace_to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "app_inv_app'", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "app_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "inv_app_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "inv_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "inv_naturality", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "is_iso_of_subset", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "iso_of_range_eq", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "iso_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "iso_restrict_hom_of_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "iso_restrict_inv_of_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "lift", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "lift_fac", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "lift_uniq", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "of_restrict_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "open_functor", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "pullback_cone_of_left", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "pullback_cone_of_left_condition", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "pullback_cone_of_left_fst", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "pullback_cone_of_left_is_limit", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "pullback_cone_of_left_lift", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "pullback_cone_of_left_lift_fst", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "pullback_cone_of_left_lift_snd", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "pullback_snd_is_iso_of_range_subset", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "to_LocallyRingedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "to_LocallyRingedSpace_hom", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "to_LocallyRingedSpace_hom_val", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "to_LocallyRingedSpace_to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "def", "to_SheafedSpace_hom", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "to_SheafedSpace_hom_base", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "to_SheafedSpace_hom_c", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "to_SheafedSpace_to_PresheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "to_iso", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["del", "theorem", "image_preimage_is_empty", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]], ["del", "theorem", "of_stalk_iso", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]], ["del", "theorem", "sigma_ι_open_embedding", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]], ["del", "def", "is_open_immersion", ["algebraic_geometry", "SheafedSpace"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/open_immersion/basic.lean", "changes": [["add", "def", "iso_restrict", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "def", "lift", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "lift_fac", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "lift_range", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "lift_uniq", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_is_limit", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_snd_is_iso_of_range_subset", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "def", "is_open_immersion", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "LocallyRingedSpace_to_LocallyRingedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "SheafedSpace_to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "app_inv_app'", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "app_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "inv_app_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "inv_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "inv_naturality", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "is_iso_of_subset", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "iso_of_range_eq", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "iso_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "iso_restrict_hom_of_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "iso_restrict_inv_of_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "lift", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "lift_fac", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "lift_uniq", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "of_restrict_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "open_functor", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_cone_of_left_condition", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_fst", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_is_limit", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_lift", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_cone_of_left_lift_fst", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_cone_of_left_lift_snd", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_snd_is_iso_of_range_subset", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_LocallyRingedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_LocallyRingedSpace_hom", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_LocallyRingedSpace_hom_val", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_LocallyRingedSpace_to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_SheafedSpace_hom", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_SheafedSpace_hom_base", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_SheafedSpace_hom_c", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_SheafedSpace_to_PresheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_iso", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "image_preimage_is_empty", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]], ["add", "theorem", "of_stalk_iso", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]], ["add", "theorem", "sigma_ι_open_embedding", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]], ["add", "def", "is_open_immersion", ["algebraic_geometry", "SheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": []}]}, {"timestamp": 1685895636, "sha": "13361559", "message": "chore(topology/sheaves/*): universe generalizations (#19153)\nNecessary but sadly insufficient for the request at https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2319146.20sheaves.20on.20manifolds", "changes": [{"oldPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "newPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "changes": [["mod", "theorem", "exists_pow_mul_eq_zero_of_res_basic_open_eq_zero_of_is_compact", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/morphisms/quasi_separated.lean", "newPath": "src/algebraic_geometry/morphisms/quasi_separated.lean", "changes": [["mod", "theorem", "exists_eq_pow_mul_of_is_compact_of_is_quasi_separated", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "pi_lift_π_apply'", ["category_theory", "limits", "types"]], ["add", "theorem", "pi_map_π_apply'", ["category_theory", "limits", "types"]], ["mod", "theorem", "pi_map_π_apply", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": [["mod", "def", "map_cone_fork", ["Top", "presheaf", "sheaf_condition"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": [["mod", "def", "continuous_prelocal", ["Top"]], ["mod", "def", "stalk_to_fiber", ["Top"]], ["mod", "theorem", "stalk_to_fiber_germ", ["Top"]], ["mod", "theorem", "stalk_to_fiber_injective", ["Top"]], ["mod", "theorem", "stalk_to_fiber_surjective", ["Top"]], ["mod", "def", "subpresheaf_to_Types", ["Top"]], ["mod", "def", "subsheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["mod", "def", "pullback", ["Top", "presheaf"]], ["mod", "def", "pullback_hom_iso_pushforward_inv", ["Top", "presheaf"]], ["mod", "def", "pullback_inv_iso_pushforward_hom", ["Top", "presheaf"]], ["mod", "def", "pullback_map", ["Top", "presheaf"]], ["mod", "def", "pullback_obj", ["Top", "presheaf"]], ["mod", "def", "pullback_obj_obj_of_image_open", ["Top", "presheaf"]], ["mod", "def", "pushforward_pullback_adjunction", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": [["mod", "def", "presheaf_to_Type", ["Top"]], ["mod", "def", "presheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": [["mod", "def", "sheaf_to_Type", ["Top"]], ["mod", "def", "sheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1685876870, "sha": "5f25c089", "message": "chore(archive/imo): change namespace `imo` to `imoYYYY_qX` (#19152)\nThis PR fixes a mistake that I made when namespacing files in `archive.imo`. Now, the files whose namespace was `imo` have namespace their file name (minus .lean).\nChanges:\n* namespace `imo` changed to `imoYYYY_qX`;\n* added `nolint dup_namespace` tags to the declarations that have a duplication;\n* changed namespace `imo_1987_q1` to `imo1987_q1` for consistency.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/mathport/near/363379951)", "changes": [{"oldPath": "archive/imo/imo1959_q1.lean", "newPath": "archive/imo/imo1959_q1.lean", "changes": [["del", "theorem", "calculation", ["imo"]], ["del", "theorem", "imo1959_q1", ["imo"]], ["add", "theorem", "calculation", ["imo1959_q1"]], ["add", "theorem", "imo1959_q1", []]]}, {"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": [["del", "theorem", "alt_equiv", ["imo"]], ["del", "def", "alt_formula", ["imo"]], ["del", "theorem", "cos_sum_equiv", ["imo"]], ["del", "theorem", "finding_zeros", ["imo"]], ["del", "theorem", "formula", ["imo"]], ["del", "theorem", "imo1962_q4'", ["imo"]], ["del", "theorem", "imo1962_q4", ["imo"]], ["del", "def", "problem_equation", ["imo"]], ["del", "def", "solution_set", ["imo"]], ["del", "theorem", "solve_cos2_half", ["imo"]], ["del", "theorem", "solve_cos2x_0", ["imo"]], ["del", "theorem", "solve_cos3x_0", ["imo"]], ["add", "theorem", "imo1962_q4'", []], ["add", "theorem", "alt_equiv", ["imo1962_q4"]], ["add", "def", "alt_formula", ["imo1962_q4"]], ["add", "theorem", "cos_sum_equiv", ["imo1962_q4"]], ["add", "theorem", "finding_zeros", ["imo1962_q4"]], ["add", "theorem", "formula", ["imo1962_q4"]], ["add", "def", "problem_equation", ["imo1962_q4"]], ["add", "def", "solution_set", ["imo1962_q4"]], ["add", "theorem", "solve_cos2_half", ["imo1962_q4"]], ["add", "theorem", "solve_cos2x_0", ["imo1962_q4"]], ["add", "theorem", "solve_cos3x_0", ["imo1962_q4"]], ["add", "theorem", "imo1962_q4", []]]}, {"oldPath": "archive/imo/imo1972_q5.lean", "newPath": "archive/imo/imo1972_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo1975_q1.lean", "newPath": "archive/imo/imo1975_q1.lean", "changes": [["del", "theorem", "IMO_1975_Q1", ["imo"]], ["add", "theorem", "IMO_1975_Q1", ["imo1975_q1"]]]}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": [["del", "theorem", "imo1977_q6", ["imo"]], ["del", "theorem", "imo1977_q6_nat", ["imo"]], ["add", "theorem", "imo1977_q6_nat", ["imo1977_q6"]], ["add", "theorem", "imo1977_q6", []]]}, {"oldPath": "archive/imo/imo1987_q1.lean", "newPath": "archive/imo/imo1987_q1.lean", "changes": [["add", "theorem", "card_fixed_points", ["imo1987_q1"]], ["add", "def", "fiber", ["imo1987_q1"]], ["add", "def", "fixed_points_equiv'", ["imo1987_q1"]], ["add", "def", "fixed_points_equiv", ["imo1987_q1"]], ["add", "theorem", "main", ["imo1987_q1"]], ["add", "theorem", "main_fintype", ["imo1987_q1"]], ["add", "theorem", "main₀", ["imo1987_q1"]], ["add", "theorem", "mem_fiber", ["imo1987_q1"]], ["add", "def", "p", ["imo1987_q1"]], ["del", "theorem", "card_fixed_points", ["imo_1987_q1"]], ["del", "def", "fiber", ["imo_1987_q1"]], ["del", "def", "fixed_points_equiv'", ["imo_1987_q1"]], ["del", "def", "fixed_points_equiv", ["imo_1987_q1"]], ["del", "theorem", "main", ["imo_1987_q1"]], ["del", "theorem", "main_fintype", ["imo_1987_q1"]], ["del", "theorem", "main₀", ["imo_1987_q1"]], ["del", "theorem", "mem_fiber", ["imo_1987_q1"]], ["del", "def", "p", ["imo_1987_q1"]]]}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": [["del", "theorem", "constant_descent_vieta_jumping", ["imo"]], ["del", "theorem", "imo1988_q6", ["imo"]], ["add", "theorem", "constant_descent_vieta_jumping", ["imo1988_q6"]], ["add", "theorem", "imo1988_q6", []]]}, {"oldPath": "archive/imo/imo1994_q1.lean", "newPath": "archive/imo/imo1994_q1.lean", "changes": [["del", "theorem", "imo1994_q1", ["imo"]], ["del", "theorem", "tedious", ["imo"]], ["add", "theorem", "tedious", ["imo1994_q1"]], ["add", "theorem", "imo1994_q1", []]]}, {"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": [["del", "def", "A", ["imo"]], ["del", "theorem", "A_card_lower_bound", ["imo"]], ["del", "theorem", "A_card_upper_bound", ["imo"]], ["del", "theorem", "A_fibre_over_contestant", ["imo"]], ["del", "theorem", "A_fibre_over_contestant_card", ["imo"]], ["del", "theorem", "A_fibre_over_judge_pair", ["imo"]], ["del", "theorem", "A_fibre_over_judge_pair_card", ["imo"]], ["del", "theorem", "A_maps_to_off_diag_judge_pair", ["imo"]], ["del", "theorem", "add_sq_add_sq_sub", ["imo"]], ["del", "def", "agreed_contestants", ["imo"]], ["del", "def", "contestant", ["imo", "agreed_triple"]], ["del", "def", "judge_pair", ["imo", "agreed_triple"]], ["del", "def", "agreed_triple", ["imo"]], ["del", "theorem", "clear_denominators", ["imo"]], ["del", "theorem", "distinct_judge_pairs_card_lower_bound", ["imo"]], ["del", "theorem", "imo1998_q2", ["imo"]], ["del", "def", "agree", ["imo", "judge_pair"]], ["del", "theorem", "agree_iff_same_rating", ["imo", "judge_pair"]], ["del", "def", "distinct", ["imo", "judge_pair"]], ["del", "def", "judge₁", ["imo", "judge_pair"]], ["del", "def", "judge₂", ["imo", "judge_pair"]], ["del", "def", "judge_pair", ["imo"]], ["del", "theorem", "judge_pairs_card_lower_bound", ["imo"]], ["del", "theorem", "norm_bound_of_odd_sum", ["imo"]], ["add", "def", "A", ["imo1998_q2"]], ["add", "theorem", "A_card_lower_bound", ["imo1998_q2"]], ["add", "theorem", "A_card_upper_bound", ["imo1998_q2"]], ["add", "theorem", "A_fibre_over_contestant", ["imo1998_q2"]], ["add", "theorem", "A_fibre_over_contestant_card", ["imo1998_q2"]], ["add", "theorem", "A_fibre_over_judge_pair", ["imo1998_q2"]], ["add", "theorem", "A_fibre_over_judge_pair_card", ["imo1998_q2"]], ["add", "theorem", "A_maps_to_off_diag_judge_pair", ["imo1998_q2"]], ["add", "theorem", "add_sq_add_sq_sub", ["imo1998_q2"]], ["add", "def", "agreed_contestants", ["imo1998_q2"]], ["add", "def", "contestant", ["imo1998_q2", "agreed_triple"]], ["add", "def", "judge_pair", ["imo1998_q2", "agreed_triple"]], ["add", "def", "agreed_triple", ["imo1998_q2"]], ["add", "theorem", "clear_denominators", ["imo1998_q2"]], ["add", "theorem", "distinct_judge_pairs_card_lower_bound", ["imo1998_q2"]], ["add", "def", "agree", ["imo1998_q2", "judge_pair"]], ["add", "theorem", "agree_iff_same_rating", ["imo1998_q2", "judge_pair"]], ["add", "def", "distinct", ["imo1998_q2", "judge_pair"]], ["add", "def", "judge₁", ["imo1998_q2", "judge_pair"]], ["add", "def", "judge₂", ["imo1998_q2", "judge_pair"]], ["add", "def", "judge_pair", ["imo1998_q2"]], ["add", "theorem", "judge_pairs_card_lower_bound", ["imo1998_q2"]], ["add", "theorem", "norm_bound_of_odd_sum", ["imo1998_q2"]], ["add", "theorem", "imo1998_q2", []]]}, {"oldPath": "archive/imo/imo2001_q2.lean", "newPath": "archive/imo/imo2001_q2.lean", "changes": [["del", "theorem", "bound", ["imo"]], ["del", "theorem", "denom_pos", ["imo"]], ["del", "theorem", "imo2001_q2'", ["imo"]], ["del", "theorem", "imo2001_q2", ["imo"]], ["add", "theorem", "bound", ["imo2001_q2"]], ["add", "theorem", "denom_pos", ["imo2001_q2"]], ["add", "theorem", "imo2001_q2'", ["imo2001_q2"]], ["add", "theorem", "imo2001_q2", []]]}, {"oldPath": "archive/imo/imo2001_q6.lean", "newPath": "archive/imo/imo2001_q6.lean", "changes": [["del", "theorem", "imo2001_q6", ["imo"]], ["add", "theorem", "imo2001_q6", []]]}, {"oldPath": "archive/imo/imo2005_q3.lean", "newPath": "archive/imo/imo2005_q3.lean", "changes": [["del", "theorem", "imo2005_q3", ["imo"]], ["del", "theorem", "key_insight", ["imo"]], ["add", "theorem", "key_insight", ["imo2005_q3"]], ["add", "theorem", "imo2005_q3", []]]}, {"oldPath": "archive/imo/imo2005_q4.lean", "newPath": "archive/imo/imo2005_q4.lean", "changes": [["del", "def", "a", ["imo"]], ["del", "theorem", "find_specified_factor", ["imo"]], ["add", "def", "a", ["imo2005_q4"]], ["add", "theorem", "find_specified_factor", ["imo2005_q4"]]]}, {"oldPath": "archive/imo/imo2006_q3.lean", "newPath": "archive/imo/imo2006_q3.lean", "changes": [["del", "theorem", "four_pow_four_pos", ["imo"]], ["del", "theorem", "imo2006_q3", ["imo"]], ["del", "theorem", "lhs_identity", ["imo"]], ["del", "theorem", "lhs_ineq", ["imo"]], ["del", "theorem", "mid_ineq", ["imo"]], ["del", "theorem", "proof₁", ["imo"]], ["del", "theorem", "proof₂", ["imo"]], ["del", "theorem", "rhs_ineq", ["imo"]], ["del", "theorem", "subst_proof₁", ["imo"]], ["del", "theorem", "subst_wlog", ["imo"]], ["del", "theorem", "zero_lt_32", ["imo"]], ["add", "theorem", "four_pow_four_pos", ["imo2006_q3"]], ["add", "theorem", "lhs_identity", ["imo2006_q3"]], ["add", "theorem", "lhs_ineq", ["imo2006_q3"]], ["add", "theorem", "mid_ineq", ["imo2006_q3"]], ["add", "theorem", "proof₁", ["imo2006_q3"]], ["add", "theorem", "proof₂", ["imo2006_q3"]], ["add", "theorem", "rhs_ineq", ["imo2006_q3"]], ["add", "theorem", "subst_proof₁", ["imo2006_q3"]], ["add", "theorem", "subst_wlog", ["imo2006_q3"]], ["add", "theorem", "zero_lt_32", ["imo2006_q3"]], ["add", "theorem", "imo2006_q3", []]]}, {"oldPath": "archive/imo/imo2006_q5.lean", "newPath": "archive/imo/imo2006_q5.lean", "changes": [["del", "theorem", "imo2006_q5'", ["imo"]], ["del", "theorem", "imo2006_q5", ["imo"]], ["del", "theorem", "add_eq_add_of_nat_abs_eq_of_nat_abs_eq", ["imo", "int"]], ["del", "theorem", "nat_abs_eq_of_chain_dvd", ["imo", "int"]], ["del", "theorem", "is_periodic_pt_eval_two", ["imo", "polynomial"]], ["del", "theorem", "iterate_comp_sub_X_ne", ["imo", "polynomial"]], ["add", "theorem", "imo2006_q5'", ["imo2006_q5"]], ["add", "theorem", "add_eq_add_of_nat_abs_eq_of_nat_abs_eq", ["imo2006_q5", "int"]], ["add", "theorem", "nat_abs_eq_of_chain_dvd", ["imo2006_q5", "int"]], ["add", "theorem", "is_periodic_pt_eval_two", ["imo2006_q5", "polynomial"]], ["add", "theorem", "iterate_comp_sub_X_ne", ["imo2006_q5", "polynomial"]], ["add", "theorem", "imo2006_q5", []]]}, {"oldPath": "archive/imo/imo2008_q2.lean", "newPath": "archive/imo/imo2008_q2.lean", "changes": [["del", "theorem", "imo2008_q2a", ["imo"]], ["del", "theorem", "imo2008_q2b", ["imo"]], ["del", "def", "rational_solutions", ["imo"]], ["del", "theorem", "subst_abc", ["imo"]], ["add", "theorem", "imo2008_q2a", ["imo2008_q2"]], ["add", "theorem", "imo2008_q2b", ["imo2008_q2"]], ["add", "def", "rational_solutions", ["imo2008_q2"]], ["add", "theorem", "subst_abc", ["imo2008_q2"]]]}, {"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": [["del", "theorem", "imo2008_q3", ["imo"]], ["del", "theorem", "p_lemma", ["imo"]], ["add", "theorem", "p_lemma", ["imo2008_q3"]], ["add", "theorem", "imo2008_q3", []]]}, {"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": [["del", "theorem", "abs_eq_one_of_pow_eq_one", ["imo"]], ["del", "theorem", "imo2008_q4", ["imo"]], ["add", "theorem", "abs_eq_one_of_pow_eq_one", ["imo2008_q4"]], ["add", "theorem", "imo2008_q4", []]]}, {"oldPath": "archive/imo/imo2011_q3.lean", "newPath": "archive/imo/imo2011_q3.lean", "changes": [["del", "theorem", "imo2011_q3", ["imo"]], ["add", "theorem", "imo2011_q3", []]]}, {"oldPath": "archive/imo/imo2011_q5.lean", "newPath": "archive/imo/imo2011_q5.lean", "changes": [["del", "theorem", "imo2011_q5", ["imo"]], ["add", "theorem", "imo2011_q5", []]]}, {"oldPath": "archive/imo/imo2013_q1.lean", "newPath": "archive/imo/imo2013_q1.lean", "changes": [["del", "theorem", "arith_lemma", ["imo"]], ["del", "theorem", "imo2013_q1", ["imo"]], ["del", "theorem", "prod_lemma", ["imo"]], ["add", "theorem", "arith_lemma", ["imo2013_q1"]], ["add", "theorem", "prod_lemma", ["imo2013_q1"]], ["add", "theorem", "imo2013_q1", []]]}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": [["del", "theorem", "f_pos_of_pos", ["imo"]], ["del", "theorem", "fixed_point_of_gt_1", ["imo"]], ["del", "theorem", "fixed_point_of_pos_nat_pow", ["imo"]], ["del", "theorem", "fx_gt_xm1", ["imo"]], ["del", "theorem", "imo2013_q5", ["imo"]], ["del", "theorem", "le_of_all_pow_lt_succ'", ["imo"]], ["del", "theorem", "le_of_all_pow_lt_succ", ["imo"]], ["del", "theorem", "pow_f_le_f_pow", ["imo"]], ["add", "theorem", "f_pos_of_pos", ["imo2013_q5"]], ["add", "theorem", "fixed_point_of_gt_1", ["imo2013_q5"]], ["add", "theorem", "fixed_point_of_pos_nat_pow", ["imo2013_q5"]], ["add", "theorem", "fx_gt_xm1", ["imo2013_q5"]], ["add", "theorem", "le_of_all_pow_lt_succ'", ["imo2013_q5"]], ["add", "theorem", "le_of_all_pow_lt_succ", ["imo2013_q5"]], ["add", "theorem", "pow_f_le_f_pow", ["imo2013_q5"]], ["add", "theorem", "imo2013_q5", []]]}, {"oldPath": "archive/imo/imo2019_q1.lean", "newPath": "archive/imo/imo2019_q1.lean", "changes": [["del", "theorem", "imo2019Q1", ["imo"]], ["add", "theorem", "imo2019Q1", ["imo2019_q1"]]]}, {"oldPath": "archive/imo/imo2019_q2.lean", "newPath": "archive/imo/imo2019_q2.lean", "changes": [["del", "theorem", "imo2019_q2", ["imo"]], ["del", "theorem", "A_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A_ne_A₁", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A_ne_B", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A_ne_C", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A₁_ne_B", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A₁_ne_C", ["imo", "imo2019q2_cfg"]], ["del", "def", "A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A₂_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_A", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_B", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_C", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_P", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "B_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "B_ne_C", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "B₁_ne_C", ["imo", "imo2019q2_cfg"]], ["del", "def", "B₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "B₂_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "B₂_ne_A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "B₂_ne_B", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "B₂_ne_Q", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "C_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "P_mem_ω", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "P₁_mem_ω", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "QP_parallel_BA", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "Q_mem_ω", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "Q_ne_B", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "Q_not_mem_CB", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "Q₁_mem_ω", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "Q₁_ne_A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "affine_independent_PQB₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "affine_independent_QPA₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "collinear_PAA₁A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "cospherical_A₁Q₁CA₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "cospherical_QPB₂A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "not_collinear_ABC", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "not_collinear_CA₂A₁", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "not_collinear_QPA₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "oangle_CQ₁Q_eq_oangle_CBA", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "oangle_CQ₁Q_sign_eq_oangle_CBA_sign", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "result", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "s_opp_side_CB_Q_Q₁", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "sbtw_A_A₁_A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "sbtw_A_B₁_C", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "sbtw_B_A₁_C", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "sbtw_B_B₁_B₂", ["imo", "imo2019q2_cfg"]], ["del", "def", "symm", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "symm_A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "symm_triangle_ABC", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "symm_triangle_ABC_circumsphere", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "symm_triangle_QPA₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "symm_ω", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "symm_ω_eq_triangle_PQB₂_circumsphere", ["imo", "imo2019q2_cfg"]], ["del", "def", "triangle_ABC", ["imo", "imo2019q2_cfg"]], ["del", "def", "triangle_PQB₂", ["imo", "imo2019q2_cfg"]], ["del", "def", "triangle_QPA₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_BAA₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_QB₂A₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_QQ₁A₂_eq_two_zsmul_oangle_QPA₂", ["imo", "imo2019q2_cfg"]], ["del", "theorem", "wbtw_B_Q_B₂", ["imo", "imo2019q2_cfg"]], ["del", "def", "ω", ["imo", "imo2019q2_cfg"]], ["del", "structure", "imo2019q2_cfg", ["imo"]], ["del", "def", "some_orientation", ["imo"]], ["add", "theorem", "A_mem_circumsphere", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A_ne_A₁", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A_ne_B", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A_ne_C", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A₁_ne_B", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A₁_ne_C", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "def", "A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A₂_mem_circumsphere", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_A", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_B", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_C", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_P", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "B_mem_circumsphere", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "B_ne_C", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "B₁_ne_C", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "def", "B₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "B₂_mem_circumsphere", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "B₂_ne_A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "B₂_ne_B", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "B₂_ne_Q", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "C_mem_circumsphere", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "P_mem_ω", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "P₁_mem_ω", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "QP_parallel_BA", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "Q_mem_ω", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "Q_ne_B", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "Q_not_mem_CB", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "Q₁_mem_ω", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "Q₁_ne_A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "affine_independent_PQB₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "affine_independent_QPA₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "collinear_PAA₁A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "cospherical_A₁Q₁CA₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "cospherical_QPB₂A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "not_collinear_ABC", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "not_collinear_CA₂A₁", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "not_collinear_QPA₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "oangle_CQ₁Q_eq_oangle_CBA", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "oangle_CQ₁Q_sign_eq_oangle_CBA_sign", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "result", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "s_opp_side_CB_Q_Q₁", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_A_A₁_A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_A_B₁_C", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_B_A₁_C", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_B_B₁_B₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "def", "symm", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "symm_A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "symm_triangle_ABC", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "symm_triangle_ABC_circumsphere", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "symm_triangle_QPA₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "symm_ω", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "symm_ω_eq_triangle_PQB₂_circumsphere", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "def", "triangle_ABC", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "def", "triangle_PQB₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "def", "triangle_QPA₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_BAA₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_QB₂A₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_QQ₁A₂_eq_two_zsmul_oangle_QPA₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "theorem", "wbtw_B_Q_B₂", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "def", "ω", ["imo2019_q2", "imo2019q2_cfg"]], ["add", "structure", "imo2019q2_cfg", ["imo2019_q2"]], ["add", "def", "some_orientation", ["imo2019_q2"]], ["add", "theorem", "imo2019_q2", []]]}, {"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": [["del", "theorem", "imo2019_q4", ["imo"]], ["del", "theorem", "imo2019_q4_upper_bound", ["imo"]], ["add", "theorem", "imo2019_q4_upper_bound", ["imo2019_q4"]], ["add", "theorem", "imo2019_q4", []]]}, {"oldPath": "archive/imo/imo2020_q2.lean", "newPath": "archive/imo/imo2020_q2.lean", "changes": [["del", "theorem", "imo2020_q2", ["imo"]], ["add", "theorem", "imo2020_q2", []]]}, {"oldPath": "archive/imo/imo2021_q1.lean", "newPath": "archive/imo/imo2021_q1.lean", "changes": [["del", "theorem", "IMO_2021_Q1", ["imo"]], ["del", "theorem", "exists_finset_3_le_card_with_pairs_summing_to_squares", ["imo"]], ["del", "theorem", "exists_numbers_in_interval", ["imo"]], ["del", "theorem", "exists_triplet_summing_to_squares", ["imo"]], ["del", "theorem", "lower_bound", ["imo"]], ["del", "theorem", "radical_inequality", ["imo"]], ["del", "theorem", "upper_bound", ["imo"]], ["add", "theorem", "IMO_2021_Q1", ["imo2021_q1"]], ["add", "theorem", "exists_finset_3_le_card_with_pairs_summing_to_squares", ["imo2021_q1"]], ["add", "theorem", "exists_numbers_in_interval", ["imo2021_q1"]], ["add", "theorem", "exists_triplet_summing_to_squares", ["imo2021_q1"]], ["add", "theorem", "lower_bound", ["imo2021_q1"]], ["add", "theorem", "radical_inequality", ["imo2021_q1"]], ["add", "theorem", "upper_bound", ["imo2021_q1"]]]}]}, {"timestamp": 1685857576, "sha": "5c1efce1", "message": "chore(*): add mathlib4 synchronization comments (#19151)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.jordan.basic`\n* `algebra.lie.abelian`\n* `algebra.lie.ideal_operations`\n* `algebra.lie.matrix`\n* `algebra.lie.of_associative`\n* `analysis.calculus.fderiv_symmetric`\n* `analysis.normed_space.dual_number`\n* `analysis.normed_space.triv_sq_zero_ext`\n* `category_theory.adhesive`\n* `data.mv_polynomial.pderiv`\n* `field_theory.chevalley_warning`\n* `linear_algebra.pi_tensor_product`\n* `number_theory.fermat_psp`\n* `number_theory.liouville.liouville_number`\n* `ring_theory.bezout`\n* `ring_theory.dedekind_domain.basic`\n* `ring_theory.derivation.lie`\n* `ring_theory.derivation.to_square_zero`\n* `topology.sheaves.sheafify`", "changes": [{"oldPath": "src/algebra/jordan/basic.lean", "newPath": "src/algebra/jordan/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": []}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": []}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual_number.lean", "newPath": "src/analysis/normed_space/dual_number.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/triv_sq_zero_ext.lean", "newPath": "src/analysis/normed_space/triv_sq_zero_ext.lean", "changes": []}, {"oldPath": "src/category_theory/adhesive.lean", "newPath": "src/category_theory/adhesive.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": []}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/number_theory/fermat_psp.lean", "newPath": "src/number_theory/fermat_psp.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_number.lean", "newPath": "src/number_theory/liouville/liouville_number.lean", "changes": []}, {"oldPath": "src/ring_theory/bezout.lean", "newPath": "src/ring_theory/bezout.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/basic.lean", "newPath": "src/ring_theory/dedekind_domain/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation/lie.lean", "newPath": "src/ring_theory/derivation/lie.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation/to_square_zero.lean", "newPath": "src/ring_theory/derivation/to_square_zero.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheafify.lean", "newPath": "src/topology/sheaves/sheafify.lean", "changes": []}]}, {"timestamp": 1685799591, "sha": "af471b9e", "message": "chore(*): add mathlib4 synchronization comments (#19148)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.gcd_monoid.integrally_closed`\n* `algebra.lie.submodule`\n* `algebraic_geometry.locally_ringed_space`\n* `algebraic_geometry.ringed_space`\n* `analysis.analytic.linear`\n* `analysis.analytic.radius_liminf`\n* `analysis.calculus.extend_deriv`\n* `analysis.calculus.lhopital`\n* `analysis.calculus.taylor`\n* `analysis.calculus.uniform_limits_deriv`\n* `analysis.inner_product_space.l2_space`\n* `analysis.inner_product_space.orientation`\n* `analysis.normed_space.exponential`\n* `analysis.normed_space.star.exponential`\n* `analysis.von_neumann_algebra.basic`\n* `category_theory.extensive`\n* `category_theory.monoidal.braided`\n* `category_theory.monoidal.rigid.basic`\n* `data.mv_polynomial.derivation`\n* `data.ordmap.ordset`\n* `field_theory.finite.basic`\n* `field_theory.finite.polynomial`\n* `linear_algebra.matrix.charpoly.finite_field`\n* `measure_theory.function.simple_func_dense_lp`\n* `measure_theory.function.strongly_measurable.lp`\n* `measure_theory.function.uniform_integrable`\n* `measure_theory.integral.set_to_l1`\n* `measure_theory.measure.lebesgue.basic`\n* `measure_theory.measure.lebesgue.complex`\n* `number_theory.liouville.basic`\n* `number_theory.liouville.liouville_with`\n* `number_theory.liouville.residual`\n* `probability.independence.basic`\n* `probability.independence.zero_one`\n* `ring_theory.derivation.basic`\n* `ring_theory.integrally_closed`\n* `ring_theory.polynomial.rational_root`\n* `ring_theory.valuation.integral`\n* `topology.homotopy.H_spaces`", "changes": [{"oldPath": "src/algebra/gcd_monoid/integrally_closed.lean", "newPath": "src/algebra/gcd_monoid/integrally_closed.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/analysis/analytic/linear.lean", "newPath": "src/analysis/analytic/linear.lean", "changes": []}, {"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/calculus/taylor.lean", "newPath": "src/analysis/calculus/taylor.lean", "changes": []}, {"oldPath": "src/analysis/calculus/uniform_limits_deriv.lean", "newPath": "src/analysis/calculus/uniform_limits_deriv.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/orientation.lean", "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/exponential.lean", "newPath": "src/analysis/normed_space/star/exponential.lean", "changes": []}, {"oldPath": "src/analysis/von_neumann_algebra/basic.lean", "newPath": "src/analysis/von_neumann_algebra/basic.lean", "changes": []}, {"oldPath": "src/category_theory/extensive.lean", "newPath": "src/category_theory/extensive.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/rigid/basic.lean", "newPath": "src/category_theory/monoidal/rigid/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/derivation.lean", "newPath": "src/data/mv_polynomial/derivation.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/finite_field.lean", "newPath": "src/linear_algebra/matrix/charpoly/finite_field.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable/lp.lean", "newPath": "src/measure_theory/function/strongly_measurable/lp.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue/basic.lean", "newPath": "src/measure_theory/measure/lebesgue/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue/complex.lean", "newPath": "src/measure_theory/measure/lebesgue/complex.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_with.lean", "newPath": "src/number_theory/liouville/liouville_with.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/residual.lean", "newPath": "src/number_theory/liouville/residual.lean", "changes": []}, {"oldPath": "src/probability/independence/basic.lean", "newPath": "src/probability/independence/basic.lean", "changes": []}, {"oldPath": "src/probability/independence/zero_one.lean", "newPath": "src/probability/independence/zero_one.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation/basic.lean", "newPath": "src/ring_theory/derivation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/integrally_closed.lean", "newPath": "src/ring_theory/integrally_closed.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integral.lean", "newPath": "src/ring_theory/valuation/integral.lean", "changes": []}, {"oldPath": "src/topology/homotopy/H_spaces.lean", "newPath": "src/topology/homotopy/H_spaces.lean", "changes": []}]}, {"timestamp": 1685723230, "sha": "7fdeecc0", "message": "chore(ring_theory/root_of_unity): move and split a file (#19144)\nWe split `ring_theory.roots_of_unity` (almost 1200 lines) into `ring_theory.roots_of_unity.basic` and `ring_theory.roots_of_unity.minpoly`. We also move `analysis.complex.roots_of_unity` to `ring_theory.roots_of_unity.complex`.", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "newPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/roots.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/roots.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity/basic.lean", "changes": [["del", "theorem", "is_integral", ["is_primitive_root"]], ["del", "theorem", "is_roots_of_minpoly", ["is_primitive_root"]], ["del", "theorem", "minpoly_dvd_X_pow_sub_one", ["is_primitive_root"]], ["del", "theorem", "minpoly_dvd_expand", ["is_primitive_root"]], ["del", "theorem", "minpoly_dvd_mod_p", ["is_primitive_root"]], ["del", "theorem", "minpoly_dvd_pow_mod", ["is_primitive_root"]], ["del", "theorem", "minpoly_eq_pow", ["is_primitive_root"]], ["del", "theorem", "minpoly_eq_pow_coprime", ["is_primitive_root"]], ["del", "theorem", "pow_is_root_minpoly", ["is_primitive_root"]], ["del", "theorem", "separable_minpoly_mod", ["is_primitive_root"]], ["del", "theorem", "squarefree_minpoly_mod", ["is_primitive_root"]], ["del", "theorem", "totient_le_degree_minpoly", ["is_primitive_root"]]]}, {"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity/complex.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/roots_of_unity/minpoly.lean", "changes": [["add", "theorem", "is_integral", ["is_primitive_root"]], ["add", "theorem", "is_roots_of_minpoly", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_X_pow_sub_one", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_expand", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_mod_p", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_pow_mod", ["is_primitive_root"]], ["add", "theorem", "minpoly_eq_pow", ["is_primitive_root"]], ["add", "theorem", "minpoly_eq_pow_coprime", ["is_primitive_root"]], ["add", "theorem", "pow_is_root_minpoly", ["is_primitive_root"]], ["add", "theorem", "separable_minpoly_mod", ["is_primitive_root"]], ["add", "theorem", "squarefree_minpoly_mod", ["is_primitive_root"]], ["add", "theorem", "totient_le_degree_minpoly", ["is_primitive_root"]]]}]}, {"timestamp": 1685717410, "sha": "3d5c4a7a", "message": "feat(measure_theory/measure/hausdorff): invariance instances (#19145)\nThese are a trivial consequence of the existing lemmas.\nThe additive cases here are the ones that actually are useful, and follow from `normed_add_torsor.to_has_isometric_vadd`.", "changes": [{"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}]}, {"timestamp": 1685707457, "sha": "571e13ca", "message": "feat(measure_theory/measure/hausdorff): the 1-measure of a segment is its length (#18981)\nOr in other words, length along a line segment is the distance between its endpoints.\nThis also proves that the `d`-dimensional Hausdorff measure scales by a factor of `‖r‖₊ ^ d` when the set is scaled by `r` (both linearly and affinely), and that it is translation-invariant.", "changes": [{"oldPath": "src/analysis/convex/between.lean", "newPath": "src/analysis/convex/between.lean", "changes": [["add", "theorem", "affine_segment_same", []]]}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["add", "theorem", "hausdorff_measure_affine_segment", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_homothety_image", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_homothety_preimage", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_line_map_image", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_segment", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_smul", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_smul_right_image", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_smul₀", ["measure_theory", "measure"]], ["add", "theorem", "mk_metric_nnreal_smul", ["measure_theory", "outer_measure"]], ["add", "theorem", "mk_metric_smul", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1685696484, "sha": "69b2e97a", "message": "chore(ring_theory/tensor_product): replace `is_scalar_tower` by `smul_comm_class` in `left_algebra` (#19118)\nWith this change, this instance works for both restriction (e.g tensor product over `ℂ` of complex algebras is a real algebra) and extension (e.g tensor product over `ℝ` of complex algebras is a complex algebra) of scalars. \n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Tensor.20products)\nI also removes [algebra.tensor_product.tensor_product.is_scalar_tower](https://leanprover-community.github.io/mathlib_docs/ring_theory/tensor_product.html#algebra.tensor_product.tensor_product.is_scalar_tower) since it is automatically inferred from [tensor_product.is_scalar_tower](https://leanprover-community.github.io/mathlib_docs/linear_algebra/tensor_product.html#tensor_product.is_scalar_tower)", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["mod", "theorem", "algebra_map_apply", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1685684493, "sha": "2ebc1d6c", "message": "chore(*): add mathlib4 synchronization comments (#19141)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_geometry.stalks`\n* `algebraic_geometry.structure_sheaf`\n* `analysis.analytic.basic`\n* `analysis.calculus.cont_diff_def`\n* `analysis.calculus.iterated_deriv`\n* `analysis.calculus.mean_value`\n* `analysis.inner_product_space.adjoint`\n* `analysis.inner_product_space.positive`\n* `analysis.normed_space.lp_equiv`\n* `analysis.normed_space.lp_space`\n* `measure_theory.constructions.pi`\n* `measure_theory.function.convergence_in_measure`\n* `measure_theory.function.locally_integrable`\n* `measure_theory.measure.haar.of_basis`\n* `probability.probability_mass_function.uniform`\n* `ring_theory.filtration`\n* `topology.algebra.valued_field`\n* `topology.metric_space.kuratowski`", "changes": [{"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/positive.lean", "newPath": "src/analysis/inner_product_space/positive.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_equiv.lean", "newPath": "src/analysis/normed_space/lp_equiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/function/locally_integrable.lean", "newPath": "src/measure_theory/function/locally_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar/of_basis.lean", "newPath": "src/measure_theory/measure/haar/of_basis.lean", "changes": []}, {"oldPath": "src/probability/probability_mass_function/uniform.lean", "newPath": "src/probability/probability_mass_function/uniform.lean", "changes": []}, {"oldPath": "src/ring_theory/filtration.lean", "newPath": "src/ring_theory/filtration.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}]}, {"timestamp": 1685684492, "sha": "a1666563", "message": "chore(analysis/convex/specific_functions/deriv): remove unnecessary imports (#19140)\nI accidentally left some extra imports in this file during the split #19031.", "changes": [{"oldPath": "src/analysis/convex/specific_functions/deriv.lean", "newPath": "src/analysis/convex/specific_functions/deriv.lean", "changes": []}, {"oldPath": "src/number_theory/bertrand.lean", "newPath": "src/number_theory/bertrand.lean", "changes": []}]}, {"timestamp": 1685680357, "sha": "6a5c8500", "message": "chore(analysis/special_functions/exp_deriv): downgrade import (#19139)\nMove lemma `complex.is_open_map_exp` from `special_functions/exp_deriv` to right before its (unique) place of use, in `complex.exp_local_homeomorph` in `special_functions/log_deriv`. Morally these belong together: being an open map and being a local homeomorphism are closely tied, they are both consequences of the inverse function theorem and the point of both is to set up being able to differentiate complex log as the inverse function of complex exp.\nThis removes the inverse function theorem from the dependencies of `special_functions/exp_deriv` (a surprisingly widely-imported file).", "changes": [{"oldPath": "src/analysis/special_functions/complex/log_deriv.lean", "newPath": "src/analysis/special_functions/complex/log_deriv.lean", "changes": [["add", "theorem", "is_open_map_exp", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": [["del", "theorem", "is_open_map_exp", ["complex"]]]}]}, {"timestamp": 1685650854, "sha": "34ebaffc", "message": "feat(number_theory/sum_two_squares): add result for general n (#19054)\nThis PR resolves the \"Todo\" that was left in `number_theory.sum_two_squares`, i.e., it adds the result that characterizes natural numbers that are sums of two squares in terms of their prime factorization:\n```lean\nlemma nat.eq_sq_add_sq_iff {n : ℕ} :\n (∃ x y : ℕ, n = x ^ 2 + y ^ 2) ↔\n ∀ {q : ℕ} (hq : q.prime) (h : q % 4 = 3), even (padic_val_nat q n) := ...\n```\nThere is some discussion on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Preferred.20spelling.20of.20p-adic.20valuation.3F/near/359896021) regarding how to spell out the condition on the right hand side.", "changes": [{"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": [["add", "theorem", "eq_sq_add_sq_iff", ["nat"]], ["add", "theorem", "eq_sq_add_sq_iff_eq_sq_mul", ["nat"]], ["add", "theorem", "eq_sq_add_sq_of_is_square_mod_neg_one", ["nat"]], ["add", "theorem", "mod_four_ne_three_of_dvd_is_square_neg_one", ["nat", "prime"]], ["mod", "theorem", "sq_add_sq", ["nat", "prime"]], ["add", "theorem", "sq_add_sq_mul", ["nat"]], ["add", "theorem", "sq_add_sq_mul", []], ["add", "theorem", "is_square_neg_one_iff'", ["zmod"]], ["add", "theorem", "is_square_neg_one_iff", ["zmod"]], ["add", "theorem", "is_square_neg_one_mul", ["zmod"]], ["add", "theorem", "is_square_neg_one_of_dvd", ["zmod"]], ["add", "theorem", "is_square_neg_one_of_eq_sq_add_sq_of_coprime", ["zmod"]], ["add", "theorem", "is_square_neg_one_of_eq_sq_add_sq_of_is_coprime", ["zmod"]]]}]}, {"timestamp": 1685646762, "sha": "b608348f", "message": "chore(ring_theory/derivation): split file (#19138)\nThe Stone-Weierstrass theorem shouldn't require the definition of Lie algebras.", "changes": [{"oldPath": "src/data/mv_polynomial/derivation.lean", "newPath": "src/data/mv_polynomial/derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation/basic.lean", "changes": [["del", "theorem", "commutator_apply", ["derivation"]], ["del", "theorem", "commutator_coe_linear_map", ["derivation"]], ["del", "def", "derivation_to_square_zero_equiv_lift", []], ["del", "def", "derivation_to_square_zero_of_lift", []], ["del", "theorem", "derivation_to_square_zero_of_lift_apply", []], ["del", "def", "diff_to_ideal_of_quotient_comp_eq", []], ["del", "theorem", "diff_to_ideal_of_quotient_comp_eq_apply", []], ["del", "def", "lift_of_derivation_to_square_zero", []], ["del", "theorem", "lift_of_derivation_to_square_zero_mk_apply", []]]}, {"oldPath": null, "newPath": "src/ring_theory/derivation/lie.lean", "changes": [["add", "theorem", "commutator_apply", ["derivation"]], ["add", "theorem", "commutator_coe_linear_map", ["derivation"]]]}, {"oldPath": null, "newPath": "src/ring_theory/derivation/to_square_zero.lean", "changes": [["add", "def", "derivation_to_square_zero_equiv_lift", []], ["add", "def", "derivation_to_square_zero_of_lift", []], ["add", "theorem", "derivation_to_square_zero_of_lift_apply", []], ["add", "def", "diff_to_ideal_of_quotient_comp_eq", []], ["add", "theorem", "diff_to_ideal_of_quotient_comp_eq_apply", []], ["add", "def", "lift_of_derivation_to_square_zero", []], ["add", "theorem", "lift_of_derivation_to_square_zero_mk_apply", []]]}, {"oldPath": "src/ring_theory/kaehler.lean", "newPath": "src/ring_theory/kaehler.lean", "changes": []}]}, {"timestamp": 1685636327, "sha": "d35b4ff4", "message": "chore(ring_theory): remove `splitting_field` dependency from `is_integrally_closed` (#19137)\nThe only declarations involving splitting fields were `integral_closure.mem_lifts_of_monic_of_dvd_map` and `is_integrally_closed.eq_map_mul_C_of_dvd`. Both are similar to Gauss' lemma and their only use is to prove Gauss' lemma, so I moved them to that file.", "changes": [{"oldPath": "src/ring_theory/integrally_closed.lean", "newPath": "src/ring_theory/integrally_closed.lean", "changes": [["del", "theorem", "mem_lifts_of_monic_of_dvd_map", ["integral_closure"]], ["del", "theorem", "eq_map_mul_C_of_dvd", ["is_integrally_closed"]]]}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": [["add", "theorem", "mem_lifts_of_monic_of_dvd_map", ["integral_closure"]], ["add", "theorem", "eq_map_mul_C_of_dvd", ["is_integrally_closed"]]]}]}, {"timestamp": 1685625610, "sha": "9d013ad8", "message": "doc(analysis/normed_space/pi_Lp): fix corrupt synchronization header (#19134)\nThe missing blank line makes a mess in doc-gen.\nHopefully this file was just strangely formatted, and this isn't a new bug in the script.", "changes": [{"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}]}, {"timestamp": 1685609700, "sha": "67237461", "message": "chore(field_theory/ratfunc): use `section` instead of `omit/include` (#19133)\nThis hopefully closes [#4513](https://github.com/leanprover-community/mathlib4/issues/4513) (or at least mitigates it) and will settle [!4#4373](https://github.com/leanprover-community/mathlib4/pull/4373) in mathlib3.", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["mod", "structure", "ratfunc", []]]}]}, {"timestamp": 1685601168, "sha": "599fffe7", "message": "chore(*): add mathlib4 synchronization comments (#19135)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `analysis.calculus.deriv.zpow`\n* `analysis.quaternion`\n* `analysis.specific_limits.floor_pow`\n* `category_theory.sites.closed`\n* `group_theory.nilpotent`\n* `measure_theory.function.l1_space`\n* `measure_theory.group.prod`\n* `measure_theory.integral.integrable_on`\n* `measure_theory.measure.haar.basic`\n* `topology.homotopy.homotopy_group`\n* `topology.sheaves.local_predicate`", "changes": [{"oldPath": "src/analysis/calculus/deriv/zpow.lean", "newPath": "src/analysis/calculus/deriv/zpow.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/floor_pow.lean", "newPath": "src/analysis/specific_limits/floor_pow.lean", "changes": []}, {"oldPath": "src/category_theory/sites/closed.lean", "newPath": "src/category_theory/sites/closed.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar/basic.lean", "newPath": "src/measure_theory/measure/haar/basic.lean", "changes": []}, {"oldPath": "src/topology/homotopy/homotopy_group.lean", "newPath": "src/topology/homotopy/homotopy_group.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}]}, {"timestamp": 1685596300, "sha": "04e80bb7", "message": "refactor(number_theory/liouville/liouville_number): review API, golf (#19126)\n* Protect `liouville.irrational` and `liouville.transcendental`.\n* Sync file name with definition name (Liouville constant vs Liouville number).\n* Move auxiliary definitions and lemmas about Liouville number to `liouville_number` namespace.\n* Rename auxiliary definitions, golf proofs (where it doesn't affect readability).", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": [["del", "theorem", "irrational", ["liouville"]], ["del", "theorem", "transcendental", ["liouville"]]]}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_number.lean", "changes": [["del", "theorem", "aux_calc", ["liouville"]], ["del", "theorem", "is_liouville", ["liouville"]], ["del", "theorem", "is_transcendental", ["liouville"]], ["del", "def", "liouville_number", ["liouville"]], ["del", "theorem", "liouville_number_eq_initial_terms_add_tail", ["liouville"]], ["del", "def", "liouville_number_initial_terms", ["liouville"]], ["del", "theorem", "liouville_number_rat_initial_terms", ["liouville"]], ["del", "def", "liouville_number_tail", ["liouville"]], ["del", "theorem", "liouville_number_tail_pos", ["liouville"]], ["del", "theorem", "tsum_one_div_pow_factorial_lt", ["liouville"]], ["add", "theorem", "liouville_liouville_number", []], ["add", "theorem", "aux_calc", ["liouville_number"]], ["add", "def", "partial_sum", ["liouville_number"]], ["add", "theorem", "partial_sum_add_remainder", ["liouville_number"]], ["add", "theorem", "partial_sum_eq_rat", ["liouville_number"]], ["add", "theorem", "partial_sum_succ", ["liouville_number"]], ["add", "def", "remainder", ["liouville_number"]], ["add", "theorem", "remainder_lt'", ["liouville_number"]], ["add", "theorem", "remainder_lt", ["liouville_number"]], ["add", "theorem", "remainder_pos", ["liouville_number"]], ["add", "theorem", "remainder_summable", ["liouville_number"]], ["add", "def", "liouville_number", []], ["add", "theorem", "transcendental_liouville_number", []]]}]}, {"timestamp": 1685561030, "sha": "cca40788", "message": "feat (number_theory/zeta_function): relate to Dirichlet series (#19131)\nThis PR adds two important properties of the Riemann zeta function: firstly, it is differentiable away from `s = 1` (which is easy for `s ≠ 0`, but much harder at `s = 0`); secondly, for `1 < re s` the zeta function is given by the usual Dirichlet series.\nJust for fun, we also add a formal statement of the Riemann hypothesis.", "changes": [{"oldPath": "src/analysis/special_functions/gamma/basic.lean", "newPath": "src/analysis/special_functions/gamma/basic.lean", "changes": [["add", "theorem", "tendsto_self_mul_Gamma_nhds_zero", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/gamma/beta.lean", "newPath": "src/analysis/special_functions/gamma/beta.lean", "changes": [["add", "theorem", "Gamma_ne_zero_of_re_pos", ["complex"]]]}, {"oldPath": "src/number_theory/zeta_function.lean", "newPath": "src/number_theory/zeta_function.lean", "changes": [["add", "theorem", "completed_zeta_eq_tsum_of_one_lt_re", []], ["add", "theorem", "differentiable_at_riemann_zeta", []], ["add", "theorem", "integral_cpow_mul_exp_neg_pi_mul_sq", []], ["add", "theorem", "mellin_zeta_kernel₁_eq_tsum", []], ["add", "def", "riemann_hypothesis", []], ["add", "theorem", "riemann_zeta_neg_two_mul_nat_add_one", []], ["add", "theorem", "zeta_eq_tsum_of_one_lt_re", []]]}]}, {"timestamp": 1685541403, "sha": "e137999b", "message": "feat(analysis/schwartz_space): Multiplication of Schwartz function and functions of temperate growth (#18649)", "changes": [{"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": [["add", "theorem", "norm_iterated_fderiv_le_uniform_aux", ["function", "has_temperate_growth"]], ["add", "def", "has_temperate_growth", ["function"]], ["add", "def", "bilin_left_clm", ["schwartz_map"]], ["add", "def", "comp_clm", ["schwartz_map"]]]}]}, {"timestamp": 1685536918, "sha": "00abe069", "message": "feat(probability/kernel/cond_distrib): regular conditional probability distributions (#19090)\nWe define the regular conditional probability distribution `cond_distrib Y X μ` of `Y : α → Ω` given `X : α → β`, where `Ω` is a standard Borel space. This is a `kernel β Ω` such that for almost all `a`, for all measurable set `s`, `cond_distrib Y X μ (X a) s` is equal to the conditional expectation `μ⟦Y ⁻¹' s | mβ.comap X⟧` evaluated at `a`.\nAlso define the above notation for the conditional expectation of the indicator of a set.", "changes": [{"oldPath": "src/measure_theory/constructions/prod/basic.lean", "newPath": "src/measure_theory/constructions/prod/basic.lean", "changes": [["add", "theorem", "fst_map_prod_mk", ["measure_theory", "measure"]], ["add", "theorem", "fst_map_prod_mk₀", ["measure_theory", "measure"]], ["add", "theorem", "snd_map_prod_mk", ["measure_theory", "measure"]], ["add", "theorem", "snd_map_prod_mk₀", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": [["add", "theorem", "comp_ae_measurable'", ["measure_theory", "ae_strongly_measurable"]]]}, {"oldPath": null, "newPath": "src/probability/kernel/cond_distrib.lean", "changes": [["add", "theorem", "ae_integrable_cond_distrib_map_iff", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "comp_snd_map_prod_mk", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "integral_cond_distrib", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "integral_cond_distrib_map", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "comp_snd_map_prod_mk", ["measure_theory", "integrable"]], ["add", "theorem", "cond_distrib_ae", ["measure_theory", "integrable"]], ["add", "theorem", "cond_distrib_ae_map", ["measure_theory", "integrable"]], ["add", "theorem", "integral_cond_distrib", ["measure_theory", "integrable"]], ["add", "theorem", "integral_cond_distrib_map", ["measure_theory", "integrable"]], ["add", "theorem", "integral_norm_cond_distrib", ["measure_theory", "integrable"]], ["add", "theorem", "integral_norm_cond_distrib_map", ["measure_theory", "integrable"]], ["add", "theorem", "norm_integral_cond_distrib", ["measure_theory", "integrable"]], ["add", "theorem", "norm_integral_cond_distrib_map", ["measure_theory", "integrable"]], ["add", "theorem", "ae_strongly_measurable'_integral_cond_distrib", ["probability_theory"]], ["add", "theorem", "ae_strongly_measurable_comp_snd_map_prod_mk_iff", ["probability_theory"]], ["add", "def", "cond_distrib", ["probability_theory"]], ["add", "theorem", "cond_distrib_ae_eq_condexp", ["probability_theory"]], ["add", "theorem", "condexp_ae_eq_integral_cond_distrib'", ["probability_theory"]], ["add", "theorem", "condexp_ae_eq_integral_cond_distrib", ["probability_theory"]], ["add", "theorem", "condexp_ae_eq_integral_cond_distrib_id", ["probability_theory"]], ["add", "theorem", "condexp_prod_ae_eq_integral_cond_distrib'", ["probability_theory"]], ["add", "theorem", "condexp_prod_ae_eq_integral_cond_distrib", ["probability_theory"]], ["add", "theorem", "condexp_prod_ae_eq_integral_cond_distrib₀", ["probability_theory"]], ["add", "theorem", "integrable_comp_snd_map_prod_mk_iff", ["probability_theory"]], ["add", "theorem", "integrable_to_real_cond_distrib", ["probability_theory"]], ["add", "theorem", "measurable_cond_distrib", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_distrib_of_measurable_set", ["probability_theory"]], ["add", "theorem", "set_lintegral_preimage_cond_distrib", ["probability_theory"]]]}, {"oldPath": null, "newPath": "src/probability/kernel/condexp.lean", "changes": [["add", "theorem", "comp_snd_map_prod_id", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "integral_condexp_kernel", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "comp_snd_map_prod_id", ["measure_theory", "integrable"]], ["add", "theorem", "condexp_kernel_ae", ["measure_theory", "integrable"]], ["add", "theorem", "integral_condexp_kernel", ["measure_theory", "integrable"]], ["add", "theorem", "integral_norm_condexp_kernel", ["measure_theory", "integrable"]], ["add", "theorem", "norm_integral_condexp_kernel", ["measure_theory", "integrable"]], ["add", "theorem", "ae_measurable_id''", ["probability_theory"]], ["add", "theorem", "ae_strongly_measurable'_integral_condexp_kernel", ["probability_theory"]], ["add", "theorem", "condexp_ae_eq_integral_condexp_kernel", ["probability_theory"]], ["add", "def", "condexp_kernel", ["probability_theory"]], ["add", "theorem", "integrable_to_real_condexp_kernel", ["probability_theory"]], ["add", "theorem", "measurable_condexp_kernel", ["probability_theory"]], ["add", "theorem", "measurable_id''", ["probability_theory"]]]}, {"oldPath": "src/probability/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}]}, {"timestamp": 1685525433, "sha": "a99f8522", "message": "feat(linear_algebra/matrix/adjugate): add `det_eq_sum_mul_adjugate_row` (#19117)\nFrom lean-matrix-cookbook", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "submatrix_update_column_succ_above", ["matrix"]], ["add", "theorem", "submatrix_update_row_succ_above", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["add", "theorem", "adjugate_fin_succ_eq_det_submatrix", ["matrix"]], ["add", "theorem", "det_eq_sum_mul_adjugate_col", ["matrix"]], ["add", "theorem", "det_eq_sum_mul_adjugate_row", ["matrix"]]]}]}, {"timestamp": 1685520121, "sha": "61b5e275", "message": "chore(*): add mathlib4 synchronization comments (#19132)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.adjunctions`\n* `analysis.calculus.darboux`\n* `analysis.calculus.deriv.inv`\n* `analysis.calculus.diff_cont_on_cl`\n* `analysis.calculus.dslope`\n* `analysis.inner_product_space.gram_schmidt_ortho`\n* `category_theory.abelian.ext`\n* `category_theory.abelian.left_derived`\n* `category_theory.bicategory.single_obj`\n* `data.real.golden_ratio`\n* `measure_theory.category.Meas`\n* `measure_theory.decomposition.jordan`\n* `measure_theory.decomposition.signed_hahn`\n* `measure_theory.group.action`\n* `measure_theory.group.measure`\n* `number_theory.arithmetic_function`\n* `number_theory.l_series`\n* `number_theory.von_mangoldt`\n* `topology.algebra.continuous_monoid_hom`\n* `topology.instances.discrete`\n* `topology.sheaves.stalks`\n* `topology.tietze_extension`", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/inv.lean", "newPath": "src/analysis/calculus/deriv/inv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/diff_cont_on_cl.lean", "newPath": "src/analysis/calculus/diff_cont_on_cl.lean", "changes": []}, {"oldPath": "src/analysis/calculus/dslope.lean", "newPath": "src/analysis/calculus/dslope.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/ext.lean", "newPath": "src/category_theory/abelian/ext.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/left_derived.lean", "newPath": "src/category_theory/abelian/left_derived.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/single_obj.lean", "newPath": "src/category_theory/bicategory/single_obj.lean", "changes": []}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/group/action.lean", "newPath": "src/measure_theory/group/action.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/l_series.lean", "newPath": "src/number_theory/l_series.lean", "changes": []}, {"oldPath": "src/number_theory/von_mangoldt.lean", "newPath": "src/number_theory/von_mangoldt.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": []}, {"oldPath": "src/topology/instances/discrete.lean", "newPath": "src/topology/instances/discrete.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}]}, {"timestamp": 1685492873, "sha": "12a85fac", "message": "chore(field_theory/finite/basic): move a lemma (#19130)\nMoving one instance we can erase `field_theory.splitting_field` from the imports of `field_theory.finite.basic)`.", "changes": [{"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}]}, {"timestamp": 1685488693, "sha": "32837559", "message": "chore(archive + counterexamples): namespaces imo, theorems_100, counterexample, plus three more (#19129)\nThis PR is a revision of #19122: it addresses namespacing in `archive` and `counterexamples`.\nThe main difference with #19122 is that it adds namespaces less aggressively: I added a namespace only if there was not an explicit namespace after the initial \"fluff\". In `counterexamples`, I added namespaces to all files.\nI introduced three \"main\" namespaces: `imo, theorems_100, counterexample` (the last one singular). Besides these, I also introduced the namespaces `prop_encodable, oxford_invariants, sensitivity`, to cover the left-over files in `archive`.\nNote that if a file has `namespace` early on, then it does not get a new namespace, even though it might be desirable for it to have one.\nComments are very welcome!\nNote: besides adding namespaces, the only files that I had to manually edit are the ones in\n* commit d337b99e3e6d147d440c91874d1809a3ee04ff16 -- I do not like these changes, but currently do not see how to avoid them;\n* commit 48471f35ec9f9929dd35363ee176f8c889042f6e -- I *removed* an pre-existing namespace, replacing it by `open `.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/mk_all.2Esh): this PR is motivated by the desire to port to mathlib4 the files in `archive, counterexamples`, taking advantage of `mathport`. The namespacing helps with avoiding clashes among names of declarations, as well as one-lettered declarations in the root namespace.", "changes": [{"oldPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "newPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "changes": [["del", "theorem", "cube_root_of_unity_sum", []], ["del", "theorem", "cubic_basic_eq_zero_iff", []], ["del", "theorem", "cubic_eq_zero_iff", []], ["del", "theorem", "cubic_eq_zero_iff_of_p_eq_zero", []], ["del", "theorem", "cubic_monic_eq_zero_iff", []], ["add", "theorem", "cube_root_of_unity_sum", ["theorems_100"]], ["add", "theorem", "cubic_basic_eq_zero_iff", ["theorems_100"]], ["add", "theorem", "cubic_eq_zero_iff", ["theorems_100"]], ["add", "theorem", "cubic_eq_zero_iff_of_p_eq_zero", ["theorems_100"]], ["add", "theorem", "cubic_monic_eq_zero_iff", ["theorems_100"]]]}, {"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": [["del", "theorem", "inverse_triangle_sum", []], ["add", "theorem", "inverse_triangle_sum", ["theorem_100"]]]}, {"oldPath": "archive/100-theorems-list/45_partition.lean", "newPath": "archive/100-theorems-list/45_partition.lean", "changes": [["del", "theorem", "coeff_indicator", []], ["del", "theorem", "coeff_indicator_neg", []], ["del", "theorem", "coeff_indicator_pos", []], ["del", "theorem", "coeff_prod_range", []], ["del", "theorem", "constant_coeff_indicator", []], ["del", "def", "cut", []], ["del", "theorem", "cut_empty_succ", []], ["del", "theorem", "cut_equiv_antidiag", []], ["del", "theorem", "cut_insert", []], ["del", "theorem", "cut_univ_fin_eq_antidiagonal_tuple", []], ["del", "theorem", "cut_zero", []], ["del", "theorem", "distinct_gf_prop", []], ["del", "def", "indicator_series", []], ["del", "theorem", "mem_cut", []], ["del", "def", "mk_odd", []], ["del", "theorem", "num_series'", []], ["del", "theorem", "odd_gf_prop", []], ["del", "def", "partial_distinct_gf", []], ["del", "theorem", "partial_distinct_gf_prop", []], ["del", "theorem", "partial_gf_prop", []], ["del", "def", "partial_odd_gf", []], ["del", "theorem", "partial_odd_gf_prop", []], ["del", "theorem", "partition_theorem", []], ["del", "theorem", "same_coeffs", []], ["del", "theorem", "same_gf", []], ["add", "theorem", "coeff_indicator", ["theorems_100"]], ["add", "theorem", "coeff_indicator_neg", ["theorems_100"]], ["add", "theorem", "coeff_indicator_pos", ["theorems_100"]], ["add", "theorem", "coeff_prod_range", ["theorems_100"]], ["add", "theorem", "constant_coeff_indicator", ["theorems_100"]], ["add", "def", "cut", ["theorems_100"]], ["add", "theorem", "cut_empty_succ", ["theorems_100"]], ["add", "theorem", "cut_equiv_antidiag", ["theorems_100"]], ["add", "theorem", "cut_insert", ["theorems_100"]], ["add", "theorem", "cut_univ_fin_eq_antidiagonal_tuple", ["theorems_100"]], ["add", "theorem", "cut_zero", ["theorems_100"]], ["add", "theorem", "distinct_gf_prop", ["theorems_100"]], ["add", "def", "indicator_series", ["theorems_100"]], ["add", "theorem", "mem_cut", ["theorems_100"]], ["add", "def", "mk_odd", ["theorems_100"]], ["add", "theorem", "num_series'", ["theorems_100"]], ["add", "theorem", "odd_gf_prop", ["theorems_100"]], ["add", "def", "partial_distinct_gf", ["theorems_100"]], ["add", "theorem", "partial_distinct_gf_prop", ["theorems_100"]], ["add", "theorem", "partial_gf_prop", ["theorems_100"]], ["add", "def", "partial_odd_gf", ["theorems_100"]], ["add", "theorem", "partial_odd_gf_prop", ["theorems_100"]], ["add", "theorem", "partition_theorem", ["theorems_100"]], ["add", "theorem", "same_coeffs", ["theorems_100"]], ["add", "theorem", "same_gf", ["theorems_100"]], ["add", "theorem", "two_series", ["theorems_100"]], ["del", "theorem", "two_series", []]]}, {"oldPath": "archive/100-theorems-list/57_herons_formula.lean", "newPath": "archive/100-theorems-list/57_herons_formula.lean", "changes": [["del", "theorem", "heron", []], ["add", "theorem", "heron", ["theorems_100"]]]}, {"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": [["del", "theorem", "eq_two_pow_mul_odd", ["nat"]], ["del", "theorem", "eq_two_pow_mul_prime_mersenne_of_even_perfect", ["nat"]], ["del", "theorem", "even_and_perfect_iff", ["nat"]], ["del", "theorem", "even_two_pow_mul_mersenne_of_prime", ["nat"]], ["del", "theorem", "ne_zero_of_prime_mersenne", ["nat"]], ["del", "theorem", "perfect_two_pow_mul_mersenne_of_prime", ["nat"]], ["del", "theorem", "sigma_two_pow_eq_mersenne_succ", ["nat"]], ["del", "theorem", "odd_mersenne_succ", []], ["add", "theorem", "eq_two_pow_mul_odd", ["theorems_100", "nat"]], ["add", "theorem", "eq_two_pow_mul_prime_mersenne_of_even_perfect", ["theorems_100", "nat"]], ["add", "theorem", "even_and_perfect_iff", ["theorems_100", "nat"]], ["add", "theorem", "even_two_pow_mul_mersenne_of_prime", ["theorems_100", "nat"]], ["add", "theorem", "ne_zero_of_prime_mersenne", ["theorems_100", "nat"]], ["add", "theorem", "perfect_two_pow_mul_mersenne_of_prime", ["theorems_100", "nat"]], ["add", "theorem", "sigma_two_pow_eq_mersenne_succ", ["theorems_100", "nat"]], ["add", "theorem", "odd_mersenne_succ", ["theorems_100"]]]}, {"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": [["del", "theorem", "erdos_szekeres", []], ["add", "theorem", "erdos_szekeres", ["theorems_100"]]]}, {"oldPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "newPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "changes": [["del", "theorem", "card_le_mul_sum", []], ["del", "theorem", "card_le_two_pow", []], ["del", "theorem", "card_le_two_pow_mul_sqrt", []], ["del", "theorem", "range_sdiff_eq_bUnion", []], ["del", "theorem", "tendsto_sum_one_div_prime_at_top", ["real"]], ["del", "theorem", "sum_lt_half_of_not_tendsto", []], ["add", "theorem", "card_le_mul_sum", ["theorems_100"]], ["add", "theorem", "card_le_two_pow", ["theorems_100"]], ["add", "theorem", "card_le_two_pow_mul_sqrt", ["theorems_100"]], ["add", "theorem", "range_sdiff_eq_bUnion", ["theorems_100"]], ["add", "theorem", "tendsto_sum_one_div_prime_at_top", ["theorems_100", "real"]], ["add", "theorem", "sum_lt_half_of_not_tendsto", ["theorems_100"]]]}, {"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": [["add", "theorem", "Ico_lemma", ["theorems_100", "«82»"]], ["add", "theorem", "b_le_b", ["theorems_100", "«82»"]], ["add", "def", "bcubes", ["theorems_100", "«82»"]], ["add", "theorem", "bottom_mem_side", ["theorems_100", "«82»"]], ["add", "theorem", "cannot_cube_a_cube", ["theorems_100", "«82»"]], ["add", "theorem", "b_add_w_le_one", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "nontrivial_fin", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "shift_up_bottom_subset_bottoms", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "side_subset", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "to_set_subset_unit_cube", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "w_ne_one", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "zero_le_b", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "zero_le_of_mem", ["theorems_100", "«82»", "correct"]], ["add", "theorem", "zero_le_of_mem_side", ["theorems_100", "«82»", "correct"]], ["add", "structure", "correct", ["theorems_100", "«82»"]], ["add", "theorem", "b_lt_xm", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "b_mem_bottom", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "b_mem_side", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "b_mem_to_set", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "b_ne_xm", ["theorems_100", "«82»", "cube"]], ["add", "def", "bottom", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "head_shift_up", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "hw'", ["theorems_100", "«82»", "cube"]], ["add", "def", "shift_up", ["theorems_100", "«82»", "cube"]], ["add", "def", "side", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "side_nonempty", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "side_tail", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "side_unit_cube", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "tail_shift_up", ["theorems_100", "«82»", "cube"]], ["add", "def", "to_set", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "to_set_disjoint", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "to_set_subset", ["theorems_100", "«82»", "cube"]], ["add", "def", "unit_cube", ["theorems_100", "«82»", "cube"]], ["add", "theorem", "univ_pi_side", ["theorems_100", "«82»", "cube"]], ["add", "def", "xm", ["theorems_100", "«82»", "cube"]], ["add", "structure", "cube", ["theorems_100", "«82»"]], ["add", "def", "decreasing_sequence", ["theorems_100", "«82»"]], ["add", "theorem", "exists_mi", ["theorems_100", "«82»"]], ["add", "theorem", "injective_sequence_of_cubes", ["theorems_100", "«82»"]], ["add", "def", "mi", ["theorems_100", "«82»"]], ["add", "theorem", "mi_mem_bcubes", ["theorems_100", "«82»"]], ["add", "theorem", "mi_minimal", ["theorems_100", "«82»"]], ["add", "theorem", "mi_not_on_boundary'", ["theorems_100", "«82»"]], ["add", "theorem", "mi_not_on_boundary", ["theorems_100", "«82»"]], ["add", "theorem", "mi_strict_minimal", ["theorems_100", "«82»"]], ["add", "theorem", "mi_xm_ne_one", ["theorems_100", "«82»"]], ["add", "theorem", "nonempty_bcubes", ["theorems_100", "«82»"]], ["add", "theorem", "nontrivial_bcubes", ["theorems_100", "«82»"]], ["add", "theorem", "not_correct", ["theorems_100", "«82»"]], ["add", "def", "on_boundary", ["theorems_100", "«82»"]], ["add", "theorem", "smallest_on_boundary", ["theorems_100", "«82»"]], ["add", "theorem", "strict_anti_sequence_of_cubes", ["theorems_100", "«82»"]], ["add", "theorem", "t_le_t", ["theorems_100", "«82»"]], ["add", "theorem", "tail_sub", ["theorems_100", "«82»"]], ["add", "def", "valley", ["theorems_100", "«82»"]], ["add", "theorem", "valley_mi", ["theorems_100", "«82»"]], ["add", "theorem", "valley_unit_cube", ["theorems_100", "«82»"]], ["add", "theorem", "w_lt_w", ["theorems_100", "«82»"]], ["del", "theorem", "Ico_lemma", ["«82»"]], ["del", "theorem", "b_le_b", ["«82»"]], ["del", "def", "bcubes", ["«82»"]], ["del", "theorem", "bottom_mem_side", ["«82»"]], ["del", "theorem", "cannot_cube_a_cube", ["«82»"]], ["del", "theorem", "b_add_w_le_one", ["«82»", "correct"]], ["del", "theorem", "nontrivial_fin", ["«82»", "correct"]], ["del", "theorem", "shift_up_bottom_subset_bottoms", ["«82»", "correct"]], ["del", "theorem", "side_subset", ["«82»", "correct"]], ["del", "theorem", "to_set_subset_unit_cube", ["«82»", "correct"]], ["del", "theorem", "w_ne_one", ["«82»", "correct"]], ["del", "theorem", "zero_le_b", ["«82»", "correct"]], ["del", "theorem", "zero_le_of_mem", ["«82»", "correct"]], ["del", "theorem", "zero_le_of_mem_side", ["«82»", "correct"]], ["del", "structure", "correct", ["«82»"]], ["del", "theorem", "b_lt_xm", ["«82»", "cube"]], ["del", "theorem", "b_mem_bottom", ["«82»", "cube"]], ["del", "theorem", "b_mem_side", ["«82»", "cube"]], ["del", "theorem", "b_mem_to_set", ["«82»", "cube"]], ["del", "theorem", "b_ne_xm", ["«82»", "cube"]], ["del", "def", "bottom", ["«82»", "cube"]], ["del", "theorem", "head_shift_up", ["«82»", "cube"]], ["del", "theorem", "hw'", ["«82»", "cube"]], ["del", "def", "shift_up", ["«82»", "cube"]], ["del", "def", "side", ["«82»", "cube"]], ["del", "theorem", "side_nonempty", ["«82»", "cube"]], ["del", "theorem", "side_tail", ["«82»", "cube"]], ["del", "theorem", "side_unit_cube", ["«82»", "cube"]], ["del", "theorem", "tail_shift_up", ["«82»", "cube"]], ["del", "def", "to_set", ["«82»", "cube"]], ["del", "theorem", "to_set_disjoint", ["«82»", "cube"]], ["del", "theorem", "to_set_subset", ["«82»", "cube"]], ["del", "def", "unit_cube", ["«82»", "cube"]], ["del", "theorem", "univ_pi_side", ["«82»", "cube"]], ["del", "def", "xm", ["«82»", "cube"]], ["del", "structure", "cube", ["«82»"]], ["del", "def", "decreasing_sequence", ["«82»"]], ["del", "theorem", "exists_mi", ["«82»"]], ["del", "theorem", "injective_sequence_of_cubes", ["«82»"]], ["del", "def", "mi", ["«82»"]], ["del", "theorem", "mi_mem_bcubes", ["«82»"]], ["del", "theorem", "mi_minimal", ["«82»"]], ["del", "theorem", "mi_not_on_boundary'", ["«82»"]], ["del", "theorem", "mi_not_on_boundary", ["«82»"]], ["del", "theorem", "mi_strict_minimal", ["«82»"]], ["del", "theorem", "mi_xm_ne_one", ["«82»"]], ["del", "theorem", "nonempty_bcubes", ["«82»"]], ["del", "theorem", "nontrivial_bcubes", ["«82»"]], ["del", "theorem", "not_correct", ["«82»"]], ["del", "def", "on_boundary", ["«82»"]], ["del", "theorem", "smallest_on_boundary", ["«82»"]], ["del", "theorem", "strict_anti_sequence_of_cubes", ["«82»"]], ["del", "theorem", "t_le_t", ["«82»"]], ["del", "theorem", "tail_sub", ["«82»"]], ["del", "def", "valley", ["«82»"]], ["del", "theorem", "valley_mi", ["«82»"]], ["del", "theorem", "valley_unit_cube", ["«82»"]], ["del", "theorem", "w_lt_w", ["«82»"]]]}, {"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": [["del", "def", "exists_politician", []], ["del", "theorem", "adj_matrix_mul_const_one_mod_p_of_regular", ["friendship"]], ["del", "theorem", "adj_matrix_pow_mod_p_of_regular", ["friendship"]], ["del", "theorem", "adj_matrix_pow_three_of_not_adj", ["friendship"]], ["del", "theorem", "adj_matrix_sq_mod_p_of_regular", ["friendship"]], ["del", "theorem", "adj_matrix_sq_mul_const_one_of_regular", ["friendship"]], ["del", "theorem", "adj_matrix_sq_of_ne", ["friendship"]], ["del", "theorem", "adj_matrix_sq_of_regular", ["friendship"]], ["del", "theorem", "card_mod_p_of_regular", ["friendship"]], ["del", "theorem", "card_of_regular", ["friendship"]], ["del", "theorem", "degree_eq_of_not_adj", ["friendship"]], ["del", "theorem", "exists_politician_of_degree_eq_two", ["friendship"]], ["del", "theorem", "exists_politician_of_degree_le_one", ["friendship"]], ["del", "theorem", "exists_politician_of_degree_le_two", ["friendship"]], ["del", "theorem", "false_of_three_le_degree", ["friendship"]], ["del", "theorem", "is_regular_of_not_exists_politician", ["friendship"]], ["del", "theorem", "neighbor_finset_eq_of_degree_eq_two", ["friendship"]], ["del", "def", "friendship", []], ["del", "theorem", "friendship_theorem", []], ["add", "def", "exists_politician", ["theorems_100"]], ["add", "theorem", "adj_matrix_mul_const_one_mod_p_of_regular", ["theorems_100", "friendship"]], ["add", "theorem", "adj_matrix_pow_mod_p_of_regular", ["theorems_100", "friendship"]], ["add", "theorem", "adj_matrix_pow_three_of_not_adj", ["theorems_100", "friendship"]], ["add", "theorem", "adj_matrix_sq_mod_p_of_regular", ["theorems_100", "friendship"]], ["add", "theorem", "adj_matrix_sq_mul_const_one_of_regular", ["theorems_100", "friendship"]], ["add", "theorem", "adj_matrix_sq_of_ne", ["theorems_100", "friendship"]], ["add", "theorem", "adj_matrix_sq_of_regular", ["theorems_100", "friendship"]], ["add", "theorem", "card_mod_p_of_regular", ["theorems_100", "friendship"]], ["add", "theorem", "card_of_regular", ["theorems_100", "friendship"]], ["add", "theorem", "degree_eq_of_not_adj", ["theorems_100", "friendship"]], ["add", "theorem", "exists_politician_of_degree_eq_two", ["theorems_100", "friendship"]], ["add", "theorem", "exists_politician_of_degree_le_one", ["theorems_100", "friendship"]], ["add", "theorem", "exists_politician_of_degree_le_two", ["theorems_100", "friendship"]], ["add", "theorem", "false_of_three_le_degree", ["theorems_100", "friendship"]], ["add", "theorem", "is_regular_of_not_exists_politician", ["theorems_100", "friendship"]], ["add", "theorem", "neighbor_finset_eq_of_degree_eq_two", ["theorems_100", "friendship"]], ["add", "def", "friendship", ["theorems_100"]], ["add", "theorem", "friendship_theorem", ["theorems_100"]]]}, {"oldPath": "archive/100-theorems-list/93_birthday_problem.lean", "newPath": "archive/100-theorems-list/93_birthday_problem.lean", "changes": [["del", "theorem", "birthday", []], ["del", "theorem", "birthday_measure", []], ["del", "theorem", "measure_apply", ["fin_fin"]], ["add", "theorem", "birthday", ["theorems_100"]], ["add", "theorem", "birthday_measure", ["theorems_100"]], ["add", "theorem", "measure_apply", ["theorems_100", "fin_fin"]]]}, {"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": [["del", "theorem", "area_disc", []], ["del", "def", "disc", []], ["del", "theorem", "disc_eq_region_between", []], ["del", "theorem", "measurable_set_disc", []], ["add", "theorem", "area_disc", ["theorems_100"]], ["add", "def", "disc", ["theorems_100"]], ["add", "theorem", "disc_eq_region_between", ["theorems_100"]], ["add", "theorem", "measurable_set_disc", ["theorems_100"]]]}, {"oldPath": "archive/examples/prop_encodable.lean", "newPath": "archive/examples/prop_encodable.lean", "changes": [["del", "def", "mk_fn0", []], ["del", "def", "mk_fn1", []], ["del", "def", "mk_fn2", []], ["add", "def", "mk_fn0", ["prop_encodable"]], ["add", "def", "mk_fn1", ["prop_encodable"]], ["add", "def", "mk_fn2", ["prop_encodable"]], ["add", "inductive", "prop_form", ["prop_encodable"]], ["del", "inductive", "prop_form", []]]}, {"oldPath": "archive/imo/imo1959_q1.lean", "newPath": "archive/imo/imo1959_q1.lean", "changes": [["del", "theorem", "calculation", []], ["add", "theorem", "calculation", ["imo"]], ["add", "theorem", "imo1959_q1", ["imo"]], ["del", "theorem", "imo1959_q1", []]]}, {"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": [["del", "theorem", "alt_equiv", []], ["del", "def", "alt_formula", []], ["del", "theorem", "cos_sum_equiv", []], ["del", "theorem", "finding_zeros", []], ["del", "theorem", "formula", []], ["add", "theorem", "alt_equiv", ["imo"]], ["add", "def", "alt_formula", ["imo"]], ["add", "theorem", "cos_sum_equiv", ["imo"]], ["add", "theorem", "finding_zeros", ["imo"]], ["add", "theorem", "formula", ["imo"]], ["add", "theorem", "imo1962_q4'", ["imo"]], ["add", "theorem", "imo1962_q4", ["imo"]], ["add", "def", "problem_equation", ["imo"]], ["add", "def", "solution_set", ["imo"]], ["add", "theorem", "solve_cos2_half", ["imo"]], ["add", "theorem", "solve_cos2x_0", ["imo"]], ["add", "theorem", "solve_cos3x_0", ["imo"]], ["del", "theorem", "imo1962_q4'", []], ["del", "theorem", "imo1962_q4", []], ["del", "def", "problem_equation", []], ["del", "def", "solution_set", []], ["del", "theorem", "solve_cos2_half", []], ["del", "theorem", "solve_cos2x_0", []], ["del", "theorem", "solve_cos3x_0", []]]}, {"oldPath": "archive/imo/imo1972_q5.lean", "newPath": "archive/imo/imo1972_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo1975_q1.lean", "newPath": "archive/imo/imo1975_q1.lean", "changes": [["del", "theorem", "IMO_1975_Q1", []], ["add", "theorem", "IMO_1975_Q1", ["imo"]]]}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": [["add", "theorem", "imo1977_q6", ["imo"]], ["add", "theorem", "imo1977_q6_nat", ["imo"]], ["del", "theorem", "imo1977_q6", []], ["del", "theorem", "imo1977_q6_nat", []]]}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": [["del", "theorem", "constant_descent_vieta_jumping", []], ["add", "theorem", "constant_descent_vieta_jumping", ["imo"]], ["add", "theorem", "imo1988_q6", ["imo"]], ["del", "theorem", "imo1988_q6", []]]}, {"oldPath": "archive/imo/imo1994_q1.lean", "newPath": "archive/imo/imo1994_q1.lean", "changes": [["add", "theorem", "imo1994_q1", ["imo"]], ["add", "theorem", "tedious", ["imo"]], ["del", "theorem", "imo1994_q1", []], ["del", "theorem", "tedious", []]]}, {"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": [["del", "def", "A", []], ["del", "theorem", "A_card_lower_bound", []], ["del", "theorem", "A_card_upper_bound", []], ["del", "theorem", "A_fibre_over_contestant", []], ["del", "theorem", "A_fibre_over_contestant_card", []], ["del", "theorem", "A_fibre_over_judge_pair", []], ["del", "theorem", "A_fibre_over_judge_pair_card", []], ["del", "theorem", "A_maps_to_off_diag_judge_pair", []], ["del", "theorem", "add_sq_add_sq_sub", []], ["del", "def", "agreed_contestants", []], ["del", "def", "contestant", ["agreed_triple"]], ["del", "def", "judge_pair", ["agreed_triple"]], ["del", "def", "agreed_triple", []], ["del", "theorem", "clear_denominators", []], ["del", "theorem", "distinct_judge_pairs_card_lower_bound", []], ["add", "def", "A", ["imo"]], ["add", "theorem", "A_card_lower_bound", ["imo"]], ["add", "theorem", "A_card_upper_bound", ["imo"]], ["add", "theorem", "A_fibre_over_contestant", ["imo"]], ["add", "theorem", "A_fibre_over_contestant_card", ["imo"]], ["add", "theorem", "A_fibre_over_judge_pair", ["imo"]], ["add", "theorem", "A_fibre_over_judge_pair_card", ["imo"]], ["add", "theorem", "A_maps_to_off_diag_judge_pair", ["imo"]], ["add", "theorem", "add_sq_add_sq_sub", ["imo"]], ["add", "def", "agreed_contestants", ["imo"]], ["add", "def", "contestant", ["imo", "agreed_triple"]], ["add", "def", "judge_pair", ["imo", "agreed_triple"]], ["add", "def", "agreed_triple", ["imo"]], ["add", "theorem", "clear_denominators", ["imo"]], ["add", "theorem", "distinct_judge_pairs_card_lower_bound", ["imo"]], ["add", "theorem", "imo1998_q2", ["imo"]], ["add", "def", "agree", ["imo", "judge_pair"]], ["add", "theorem", "agree_iff_same_rating", ["imo", "judge_pair"]], ["add", "def", "distinct", ["imo", "judge_pair"]], ["add", "def", "judge₁", ["imo", "judge_pair"]], ["add", "def", "judge₂", ["imo", "judge_pair"]], ["add", "def", "judge_pair", ["imo"]], ["add", "theorem", "judge_pairs_card_lower_bound", ["imo"]], ["add", "theorem", "norm_bound_of_odd_sum", ["imo"]], ["del", "theorem", "imo1998_q2", []], ["del", "def", "agree", ["judge_pair"]], ["del", "theorem", "agree_iff_same_rating", ["judge_pair"]], ["del", "def", "distinct", ["judge_pair"]], ["del", "def", "judge₁", ["judge_pair"]], ["del", "def", "judge₂", ["judge_pair"]], ["del", "def", "judge_pair", []], ["del", "theorem", "judge_pairs_card_lower_bound", []], ["del", "theorem", "norm_bound_of_odd_sum", []]]}, {"oldPath": "archive/imo/imo2001_q2.lean", "newPath": "archive/imo/imo2001_q2.lean", "changes": [["del", "theorem", "bound", []], ["del", "theorem", "denom_pos", []], ["add", "theorem", "bound", ["imo"]], ["add", "theorem", "denom_pos", ["imo"]], ["add", "theorem", "imo2001_q2'", ["imo"]], ["add", "theorem", "imo2001_q2", ["imo"]], ["del", "theorem", "imo2001_q2'", []], ["del", "theorem", "imo2001_q2", []]]}, {"oldPath": "archive/imo/imo2001_q6.lean", "newPath": "archive/imo/imo2001_q6.lean", "changes": [["add", "theorem", "imo2001_q6", ["imo"]], ["del", "theorem", "imo2001_q6", []]]}, {"oldPath": "archive/imo/imo2005_q3.lean", "newPath": "archive/imo/imo2005_q3.lean", "changes": [["add", "theorem", "imo2005_q3", ["imo"]], ["add", "theorem", "key_insight", ["imo"]], ["del", "theorem", "imo2005_q3", []], ["del", "theorem", "key_insight", []]]}, {"oldPath": "archive/imo/imo2005_q4.lean", "newPath": "archive/imo/imo2005_q4.lean", "changes": [["del", "def", "a", []], ["del", "theorem", "find_specified_factor", []], ["add", "def", "a", ["imo"]], ["add", "theorem", "find_specified_factor", ["imo"]]]}, {"oldPath": "archive/imo/imo2006_q3.lean", "newPath": "archive/imo/imo2006_q3.lean", "changes": [["del", "theorem", "four_pow_four_pos", []], ["add", "theorem", "four_pow_four_pos", ["imo"]], ["add", "theorem", "imo2006_q3", ["imo"]], ["add", "theorem", "lhs_identity", ["imo"]], ["add", "theorem", "lhs_ineq", ["imo"]], ["add", "theorem", "mid_ineq", ["imo"]], ["add", "theorem", "proof₁", ["imo"]], ["add", "theorem", "proof₂", ["imo"]], ["add", "theorem", "rhs_ineq", ["imo"]], ["add", "theorem", "subst_proof₁", ["imo"]], ["add", "theorem", "subst_wlog", ["imo"]], ["add", "theorem", "zero_lt_32", ["imo"]], ["del", "theorem", "imo2006_q3", []], ["del", "theorem", "lhs_identity", []], ["del", "theorem", "lhs_ineq", []], ["del", "theorem", "mid_ineq", []], ["del", "theorem", "proof₁", []], ["del", "theorem", "proof₂", []], ["del", "theorem", "rhs_ineq", []], ["del", "theorem", "subst_proof₁", []], ["del", "theorem", "subst_wlog", []], ["del", "theorem", "zero_lt_32", []]]}, {"oldPath": "archive/imo/imo2006_q5.lean", "newPath": "archive/imo/imo2006_q5.lean", "changes": [["add", "theorem", "imo2006_q5'", ["imo"]], ["add", "theorem", "imo2006_q5", ["imo"]], ["add", "theorem", "add_eq_add_of_nat_abs_eq_of_nat_abs_eq", ["imo", "int"]], ["add", "theorem", "nat_abs_eq_of_chain_dvd", ["imo", "int"]], ["add", "theorem", "is_periodic_pt_eval_two", ["imo", "polynomial"]], ["add", "theorem", "iterate_comp_sub_X_ne", ["imo", "polynomial"]], ["del", "theorem", "imo2006_q5'", []], ["del", "theorem", "imo2006_q5", []], ["del", "theorem", "add_eq_add_of_nat_abs_eq_of_nat_abs_eq", ["int"]], ["del", "theorem", "nat_abs_eq_of_chain_dvd", ["int"]], ["del", "theorem", "is_periodic_pt_eval_two", ["polynomial"]], ["del", "theorem", "iterate_comp_sub_X_ne", ["polynomial"]]]}, {"oldPath": "archive/imo/imo2008_q2.lean", "newPath": "archive/imo/imo2008_q2.lean", "changes": [["add", "theorem", "imo2008_q2a", ["imo"]], ["add", "theorem", "imo2008_q2b", ["imo"]], ["add", "def", "rational_solutions", ["imo"]], ["add", "theorem", "subst_abc", ["imo"]], ["del", "theorem", "imo2008_q2a", []], ["del", "theorem", "imo2008_q2b", []], ["del", "def", "rational_solutions", []], ["del", "theorem", "subst_abc", []]]}, {"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": [["add", "theorem", "imo2008_q3", ["imo"]], ["add", "theorem", "p_lemma", ["imo"]], ["del", "theorem", "imo2008_q3", []], ["del", "theorem", "p_lemma", []]]}, {"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": [["del", "theorem", "abs_eq_one_of_pow_eq_one", []], ["add", "theorem", "abs_eq_one_of_pow_eq_one", ["imo"]], ["add", "theorem", "imo2008_q4", ["imo"]], ["del", "theorem", "imo2008_q4", []]]}, {"oldPath": "archive/imo/imo2011_q3.lean", "newPath": "archive/imo/imo2011_q3.lean", "changes": [["add", "theorem", "imo2011_q3", ["imo"]], ["del", "theorem", "imo2011_q3", []]]}, {"oldPath": "archive/imo/imo2011_q5.lean", "newPath": "archive/imo/imo2011_q5.lean", "changes": [["add", "theorem", "imo2011_q5", ["imo"]], ["del", "theorem", "imo2011_q5", []]]}, {"oldPath": "archive/imo/imo2013_q1.lean", "newPath": "archive/imo/imo2013_q1.lean", "changes": [["del", "theorem", "arith_lemma", []], ["add", "theorem", "arith_lemma", ["imo"]], ["add", "theorem", "imo2013_q1", ["imo"]], ["add", "theorem", "prod_lemma", ["imo"]], ["del", "theorem", "imo2013_q1", []], ["del", "theorem", "prod_lemma", []]]}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": [["del", "theorem", "f_pos_of_pos", []], ["del", "theorem", "fixed_point_of_gt_1", []], ["del", "theorem", "fixed_point_of_pos_nat_pow", []], ["del", "theorem", "fx_gt_xm1", []], ["add", "theorem", "f_pos_of_pos", ["imo"]], ["add", "theorem", "fixed_point_of_gt_1", ["imo"]], ["add", "theorem", "fixed_point_of_pos_nat_pow", ["imo"]], ["add", "theorem", "fx_gt_xm1", ["imo"]], ["add", "theorem", "imo2013_q5", ["imo"]], ["add", "theorem", "le_of_all_pow_lt_succ'", ["imo"]], ["add", "theorem", "le_of_all_pow_lt_succ", ["imo"]], ["add", "theorem", "pow_f_le_f_pow", ["imo"]], ["del", "theorem", "imo2013_q5", []], ["del", "theorem", "le_of_all_pow_lt_succ'", []], ["del", "theorem", "le_of_all_pow_lt_succ", []], ["del", "theorem", "pow_f_le_f_pow", []]]}, {"oldPath": "archive/imo/imo2019_q1.lean", "newPath": "archive/imo/imo2019_q1.lean", "changes": [["add", "theorem", "imo2019Q1", ["imo"]], ["del", "theorem", "imo2019Q1", []]]}, {"oldPath": "archive/imo/imo2019_q2.lean", "newPath": "archive/imo/imo2019_q2.lean", "changes": [["add", "theorem", "imo2019_q2", ["imo"]], ["add", "theorem", "A_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A_ne_A₁", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A_ne_B", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A_ne_C", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A₁_ne_B", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A₁_ne_C", ["imo", "imo2019q2_cfg"]], ["add", "def", "A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A₂_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_A", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_B", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_C", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "A₂_ne_P", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "B_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "B_ne_C", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "B₁_ne_C", ["imo", "imo2019q2_cfg"]], ["add", "def", "B₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "B₂_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "B₂_ne_A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "B₂_ne_B", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "B₂_ne_Q", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "C_mem_circumsphere", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "P_mem_ω", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "P₁_mem_ω", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "QP_parallel_BA", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "Q_mem_ω", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "Q_ne_B", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "Q_not_mem_CB", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "Q₁_mem_ω", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "Q₁_ne_A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "affine_independent_PQB₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "affine_independent_QPA₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "collinear_PAA₁A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "cospherical_A₁Q₁CA₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "cospherical_QPB₂A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "not_collinear_ABC", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "not_collinear_CA₂A₁", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "not_collinear_QPA₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "oangle_CQ₁Q_eq_oangle_CBA", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "oangle_CQ₁Q_sign_eq_oangle_CBA_sign", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "result", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "s_opp_side_CB_Q_Q₁", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_A_A₁_A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_A_B₁_C", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_B_A₁_C", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "sbtw_B_B₁_B₂", ["imo", "imo2019q2_cfg"]], ["add", "def", "symm", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "symm_A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "symm_triangle_ABC", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "symm_triangle_ABC_circumsphere", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "symm_triangle_QPA₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "symm_ω", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "symm_ω_eq_triangle_PQB₂_circumsphere", ["imo", "imo2019q2_cfg"]], ["add", "def", "triangle_ABC", ["imo", "imo2019q2_cfg"]], ["add", "def", "triangle_PQB₂", ["imo", "imo2019q2_cfg"]], ["add", "def", "triangle_QPA₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_BAA₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_QB₂A₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "two_zsmul_oangle_QQ₁A₂_eq_two_zsmul_oangle_QPA₂", ["imo", "imo2019q2_cfg"]], ["add", "theorem", "wbtw_B_Q_B₂", ["imo", "imo2019q2_cfg"]], ["add", "def", "ω", ["imo", "imo2019q2_cfg"]], ["add", "structure", "imo2019q2_cfg", ["imo"]], ["add", "def", "some_orientation", ["imo"]], ["del", "theorem", "imo2019_q2", []], ["del", "theorem", "A_mem_circumsphere", ["imo2019q2_cfg"]], ["del", "theorem", "A_ne_A₁", ["imo2019q2_cfg"]], ["del", "theorem", "A_ne_B", ["imo2019q2_cfg"]], ["del", "theorem", "A_ne_C", ["imo2019q2_cfg"]], ["del", "theorem", "A₁_ne_B", ["imo2019q2_cfg"]], ["del", "theorem", "A₁_ne_C", ["imo2019q2_cfg"]], ["del", "def", "A₂", ["imo2019q2_cfg"]], ["del", "theorem", "A₂_mem_circumsphere", ["imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_A", ["imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_B", ["imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_C", ["imo2019q2_cfg"]], ["del", "theorem", "A₂_ne_P", ["imo2019q2_cfg"]], ["del", "theorem", "B_mem_circumsphere", ["imo2019q2_cfg"]], ["del", "theorem", "B_ne_C", ["imo2019q2_cfg"]], ["del", "theorem", "B₁_ne_C", ["imo2019q2_cfg"]], ["del", "def", "B₂", ["imo2019q2_cfg"]], ["del", "theorem", "B₂_mem_circumsphere", ["imo2019q2_cfg"]], ["del", "theorem", "B₂_ne_A₂", ["imo2019q2_cfg"]], ["del", "theorem", "B₂_ne_B", ["imo2019q2_cfg"]], ["del", "theorem", "B₂_ne_Q", ["imo2019q2_cfg"]], ["del", "theorem", "C_mem_circumsphere", ["imo2019q2_cfg"]], ["del", "theorem", "P_mem_ω", ["imo2019q2_cfg"]], ["del", "theorem", "P₁_mem_ω", ["imo2019q2_cfg"]], ["del", "theorem", "QP_parallel_BA", ["imo2019q2_cfg"]], ["del", "theorem", "Q_mem_ω", ["imo2019q2_cfg"]], ["del", "theorem", "Q_ne_B", ["imo2019q2_cfg"]], ["del", "theorem", "Q_not_mem_CB", ["imo2019q2_cfg"]], ["del", "theorem", "Q₁_mem_ω", ["imo2019q2_cfg"]], ["del", "theorem", "Q₁_ne_A₂", ["imo2019q2_cfg"]], ["del", "theorem", "affine_independent_PQB₂", ["imo2019q2_cfg"]], ["del", "theorem", "affine_independent_QPA₂", ["imo2019q2_cfg"]], ["del", "theorem", "collinear_PAA₁A₂", ["imo2019q2_cfg"]], ["del", "theorem", "cospherical_A₁Q₁CA₂", ["imo2019q2_cfg"]], ["del", "theorem", "cospherical_QPB₂A₂", ["imo2019q2_cfg"]], ["del", "theorem", "not_collinear_ABC", ["imo2019q2_cfg"]], ["del", "theorem", "not_collinear_CA₂A₁", ["imo2019q2_cfg"]], ["del", "theorem", "not_collinear_QPA₂", ["imo2019q2_cfg"]], ["del", "theorem", "oangle_CQ₁Q_eq_oangle_CBA", ["imo2019q2_cfg"]], ["del", "theorem", "oangle_CQ₁Q_sign_eq_oangle_CBA_sign", ["imo2019q2_cfg"]], ["del", "theorem", "result", ["imo2019q2_cfg"]], ["del", "theorem", "s_opp_side_CB_Q_Q₁", ["imo2019q2_cfg"]], ["del", "theorem", "sbtw_A_A₁_A₂", ["imo2019q2_cfg"]], ["del", "theorem", "sbtw_A_B₁_C", ["imo2019q2_cfg"]], ["del", "theorem", "sbtw_B_A₁_C", ["imo2019q2_cfg"]], ["del", "theorem", "sbtw_B_B₁_B₂", ["imo2019q2_cfg"]], ["del", "def", "symm", ["imo2019q2_cfg"]], ["del", "theorem", "symm_A₂", ["imo2019q2_cfg"]], ["del", "theorem", "symm_triangle_ABC", ["imo2019q2_cfg"]], ["del", "theorem", "symm_triangle_ABC_circumsphere", ["imo2019q2_cfg"]], ["del", "theorem", "symm_triangle_QPA₂", ["imo2019q2_cfg"]], ["del", "theorem", "symm_ω", ["imo2019q2_cfg"]], ["del", "theorem", "symm_ω_eq_triangle_PQB₂_circumsphere", ["imo2019q2_cfg"]], ["del", "def", "triangle_ABC", ["imo2019q2_cfg"]], ["del", "def", "triangle_PQB₂", ["imo2019q2_cfg"]], ["del", "def", "triangle_QPA₂", ["imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA", ["imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁", ["imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_BAA₂", ["imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_QB₂A₂", ["imo2019q2_cfg"]], ["del", "theorem", "two_zsmul_oangle_QQ₁A₂_eq_two_zsmul_oangle_QPA₂", ["imo2019q2_cfg"]], ["del", "theorem", "wbtw_B_Q_B₂", ["imo2019q2_cfg"]], ["del", "def", "ω", ["imo2019q2_cfg"]], ["del", "structure", "imo2019q2_cfg", []], ["del", "def", "some_orientation", []]]}, {"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": [["add", "theorem", "imo2019_q4", ["imo"]], ["add", "theorem", "imo2019_q4_upper_bound", ["imo"]], ["del", "theorem", "imo2019_q4", []], ["del", "theorem", "imo2019_q4_upper_bound", []]]}, {"oldPath": "archive/imo/imo2020_q2.lean", "newPath": "archive/imo/imo2020_q2.lean", "changes": [["add", "theorem", "imo2020_q2", ["imo"]], ["del", "theorem", "imo2020_q2", []]]}, {"oldPath": "archive/imo/imo2021_q1.lean", "newPath": "archive/imo/imo2021_q1.lean", "changes": [["del", "theorem", "IMO_2021_Q1", []], ["del", "theorem", "exists_finset_3_le_card_with_pairs_summing_to_squares", []], ["del", "theorem", "exists_numbers_in_interval", []], ["del", "theorem", "exists_triplet_summing_to_squares", []], ["add", "theorem", "IMO_2021_Q1", ["imo"]], ["add", "theorem", "exists_finset_3_le_card_with_pairs_summing_to_squares", ["imo"]], ["add", "theorem", "exists_numbers_in_interval", ["imo"]], ["add", "theorem", "exists_triplet_summing_to_squares", ["imo"]], ["add", "theorem", "lower_bound", ["imo"]], ["add", "theorem", "radical_inequality", ["imo"]], ["add", "theorem", "upper_bound", ["imo"]], ["del", "theorem", "lower_bound", []], ["del", "theorem", "radical_inequality", []], ["del", "theorem", "upper_bound", []]]}, {"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": [["add", "theorem", "week3_p1", ["oxford_invariants"]], ["del", "theorem", "week3_p1", []]]}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": [["del", "theorem", "adj_iff_proj_adj", ["Q"]], ["del", "theorem", "adj_iff_proj_eq", ["Q"]], ["del", "theorem", "symm", ["Q", "adjacent"]], ["del", "def", "adjacent", ["Q"]], ["del", "theorem", "card", ["Q"]], ["del", "theorem", "not_adjacent_zero", ["Q"]], ["del", "theorem", "succ_n_eq", ["Q"]], ["del", "def", "V", []], ["del", "theorem", "dim_V", []], ["del", "def", "dual_bases_e_ε", []], ["del", "theorem", "duality", []], ["del", "theorem", "e_zero_apply", []], ["del", "theorem", "epsilon_total", []], ["del", "theorem", "exists_eigenvalue", []], ["del", "theorem", "f_image_g", []], ["del", "theorem", "f_matrix", []], ["del", "theorem", "f_squared", []], ["del", "theorem", "f_succ_apply", []], ["del", "theorem", "f_zero", []], ["del", "theorem", "finrank_V", []], ["del", "theorem", "g_apply", []], ["del", "theorem", "g_injective", []], ["del", "theorem", "huang_degree_theorem", []], ["add", "theorem", "adj_iff_proj_adj", ["sensitivity", "Q"]], ["add", "theorem", "adj_iff_proj_eq", ["sensitivity", "Q"]], ["add", "theorem", "symm", ["sensitivity", "Q", "adjacent"]], ["add", "def", "adjacent", ["sensitivity", "Q"]], ["add", "theorem", "card", ["sensitivity", "Q"]], ["add", "theorem", "not_adjacent_zero", ["sensitivity", "Q"]], ["add", "theorem", "succ_n_eq", ["sensitivity", "Q"]], ["add", "def", "V", ["sensitivity"]], ["add", "theorem", "dim_V", ["sensitivity"]], ["add", "def", "dual_bases_e_ε", ["sensitivity"]], ["add", "theorem", "duality", ["sensitivity"]], ["add", "theorem", "e_zero_apply", ["sensitivity"]], ["add", "theorem", "epsilon_total", ["sensitivity"]], ["add", "theorem", "exists_eigenvalue", ["sensitivity"]], ["add", "theorem", "f_image_g", ["sensitivity"]], ["add", "theorem", "f_matrix", ["sensitivity"]], ["add", "theorem", "f_squared", ["sensitivity"]], ["add", "theorem", "f_succ_apply", ["sensitivity"]], ["add", "theorem", "f_zero", ["sensitivity"]], ["add", "theorem", "finrank_V", ["sensitivity"]], ["add", "theorem", "g_apply", ["sensitivity"]], ["add", "theorem", "g_injective", ["sensitivity"]], ["add", "theorem", "huang_degree_theorem", ["sensitivity"]], ["add", "def", "π", ["sensitivity"]], ["del", "def", "π", []]]}, {"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": [["del", "theorem", "add_le_add_left", ["Nxzmod_2"]], ["del", "theorem", "add_left_cancel", ["Nxzmod_2"]], ["del", "theorem", "le_of_add_le_add_left", ["Nxzmod_2"]], ["del", "theorem", "lt_def", ["Nxzmod_2"]], ["del", "theorem", "mul_lt_mul_of_pos_left", ["Nxzmod_2"]], ["del", "theorem", "mul_lt_mul_of_pos_right", ["Nxzmod_2"]], ["del", "theorem", "add_self_zmod_2", []], ["add", "theorem", "add_le_add_left", ["counterexample", "Nxzmod_2"]], ["add", "theorem", "add_left_cancel", ["counterexample", "Nxzmod_2"]], ["add", "theorem", "le_of_add_le_add_left", ["counterexample", "Nxzmod_2"]], ["add", "theorem", "lt_def", ["counterexample", "Nxzmod_2"]], ["add", "theorem", "mul_lt_mul_of_pos_left", ["counterexample", "Nxzmod_2"]], ["add", "theorem", "mul_lt_mul_of_pos_right", ["counterexample", "Nxzmod_2"]], ["add", "theorem", "add_self_zmod_2", ["counterexample"]], ["add", "def", "L", ["counterexample", "ex_L"]], ["add", "def", "L_subsemiring", ["counterexample", "ex_L"]], ["add", "theorem", "add_L", ["counterexample", "ex_L"]], ["add", "theorem", "bot_le", ["counterexample", "ex_L"]], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["counterexample", "ex_L"]], ["add", "theorem", "exists_add_of_le", ["counterexample", "ex_L"]], ["add", "theorem", "le_self_add", ["counterexample", "ex_L"]], ["add", "theorem", "mul_L", ["counterexample", "ex_L"]], ["add", "def", "K", ["counterexample", "from_Bhavik"]], ["add", "theorem", "mem_zmod_2", ["counterexample"]], ["del", "def", "L", ["ex_L"]], ["del", "def", "L_subsemiring", ["ex_L"]], ["del", "theorem", "add_L", ["ex_L"]], ["del", "theorem", "bot_le", ["ex_L"]], ["del", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["ex_L"]], ["del", "theorem", "exists_add_of_le", ["ex_L"]], ["del", "theorem", "le_self_add", ["ex_L"]], ["del", "theorem", "mul_L", ["ex_L"]], ["del", "def", "K", ["from_Bhavik"]], ["del", "theorem", "mem_zmod_2", []]]}, {"oldPath": "counterexamples/char_p_zero_ne_char_zero.lean", "newPath": "counterexamples/char_p_zero_ne_char_zero.lean", "changes": [["del", "theorem", "add_one_eq_one", []], ["add", "theorem", "add_one_eq_one", ["counterexample"]], ["add", "theorem", "with_zero_unit_char_p_zero", ["counterexample"]], ["add", "theorem", "with_zero_unit_not_char_zero", ["counterexample"]], ["del", "theorem", "with_zero_unit_char_p_zero", []], ["del", "theorem", "with_zero_unit_not_char_zero", []]]}, {"oldPath": "counterexamples/cyclotomic_105.lean", "newPath": "counterexamples/cyclotomic_105.lean", "changes": [["del", "theorem", "coeff_cyclotomic_105", []], ["add", "theorem", "coeff_cyclotomic_105", ["counterexample"]], ["add", "theorem", "cyclotomic_105", ["counterexample"]], ["add", "theorem", "cyclotomic_15", ["counterexample"]], ["add", "theorem", "cyclotomic_21", ["counterexample"]], ["add", "theorem", "cyclotomic_35", ["counterexample"]], ["add", "theorem", "cyclotomic_3", ["counterexample"]], ["add", "theorem", "cyclotomic_5", ["counterexample"]], ["add", "theorem", "cyclotomic_7", ["counterexample"]], ["add", "theorem", "not_forall_coeff_cyclotomic_neg_one_zero_one", ["counterexample"]], ["add", "theorem", "proper_divisors_105", ["counterexample"]], ["add", "theorem", "proper_divisors_15", ["counterexample"]], ["add", "theorem", "proper_divisors_21", ["counterexample"]], ["add", "theorem", "proper_divisors_35", ["counterexample"]], ["del", "theorem", "cyclotomic_105", []], ["del", "theorem", "cyclotomic_15", []], ["del", "theorem", "cyclotomic_21", []], ["del", "theorem", "cyclotomic_35", []], ["del", "theorem", "cyclotomic_3", []], ["del", "theorem", "cyclotomic_5", []], ["del", "theorem", "cyclotomic_7", []], ["del", "theorem", "not_forall_coeff_cyclotomic_neg_one_zero_one", []], ["del", "theorem", "proper_divisors_105", []], ["del", "theorem", "proper_divisors_15", []], ["del", "theorem", "proper_divisors_21", []], ["del", "theorem", "proper_divisors_35", []]]}, {"oldPath": "counterexamples/direct_sum_is_internal.lean", "newPath": "counterexamples/direct_sum_is_internal.lean", "changes": [["add", "theorem", "mem_with_sign_neg_one", ["counterexample"]], ["add", "theorem", "mem_with_sign_one", ["counterexample"]], ["add", "theorem", "one_ne_neg_one", ["counterexample", "units_int"]], ["add", "def", "independent", ["counterexample", "with_sign"]], ["add", "theorem", "is_compl", ["counterexample", "with_sign"]], ["add", "theorem", "not_injective", ["counterexample", "with_sign"]], ["add", "theorem", "not_internal", ["counterexample", "with_sign"]], ["add", "theorem", "supr", ["counterexample", "with_sign"]], ["add", "def", "with_sign", ["counterexample"]], ["del", "theorem", "mem_with_sign_neg_one", []], ["del", "theorem", "mem_with_sign_one", []], ["del", "theorem", "one_ne_neg_one", ["units_int"]], ["del", "def", "independent", ["with_sign"]], ["del", "theorem", "is_compl", ["with_sign"]], ["del", "theorem", "not_injective", ["with_sign"]], ["del", "theorem", "not_internal", ["with_sign"]], ["del", "theorem", "supr", ["with_sign"]], ["del", "def", "with_sign", []]]}, {"oldPath": "counterexamples/girard.lean", "newPath": "counterexamples/girard.lean", "changes": [["add", "theorem", "{u}", ["counterexample"]], ["del", "theorem", "{u}", []]]}, {"oldPath": "counterexamples/homogeneous_prime_not_prime.lean", "newPath": "counterexamples/homogeneous_prime_not_prime.lean", "changes": [["add", "def", "I", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["add", "theorem", "I_is_homogeneous", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["add", "theorem", "I_not_prime", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "decompose", ["counterexample", "counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "left_inv", ["counterexample", "counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "mul_mem", ["counterexample", "counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "one_mem", ["counterexample", "counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "right_inv", ["counterexample", "counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "def", "grading", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["add", "theorem", "homogeneous_mem_or_mem", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "submodule_o", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "submodule_z", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "two", ["counterexample", "counterexample_not_prime_but_homogeneous_prime"]], ["del", "def", "I", ["counterexample_not_prime_but_homogeneous_prime"]], ["del", "theorem", "I_is_homogeneous", ["counterexample_not_prime_but_homogeneous_prime"]], ["del", "theorem", "I_not_prime", ["counterexample_not_prime_but_homogeneous_prime"]], ["del", "def", "decompose", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["del", "theorem", "left_inv", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["del", "theorem", "mul_mem", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["del", "theorem", "one_mem", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["del", "theorem", "right_inv", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["del", "def", "grading", ["counterexample_not_prime_but_homogeneous_prime"]], ["del", "theorem", "homogeneous_mem_or_mem", ["counterexample_not_prime_but_homogeneous_prime"]], ["del", "def", "submodule_o", ["counterexample_not_prime_but_homogeneous_prime"]], ["del", "def", "submodule_z", ["counterexample_not_prime_but_homogeneous_prime"]], ["del", "def", "two", ["counterexample_not_prime_but_homogeneous_prime"]]]}, {"oldPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "newPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "changes": [["add", "def", "aux1", ["counterexample", "foo"]], ["add", "theorem", "aux1_inj", ["counterexample", "foo"]], ["add", "def", "mul", ["counterexample", "foo"]], ["add", "theorem", "not_mul_pos", ["counterexample", "foo"]], ["add", "inductive", "foo", ["counterexample"]], ["del", "def", "aux1", ["foo"]], ["del", "theorem", "aux1_inj", ["foo"]], ["del", "def", "mul", ["foo"]], ["del", "theorem", "not_mul_pos", ["foo"]], ["del", "inductive", "foo", []]]}, {"oldPath": "counterexamples/map_floor.lean", "newPath": "counterexamples/map_floor.lean", "changes": [["add", "def", "forget_epsilons", ["counterexample", "int_with_epsilon"]], ["add", "theorem", "forget_epsilons_apply", ["counterexample", "int_with_epsilon"]], ["add", "theorem", "forget_epsilons_floor_lt", ["counterexample", "int_with_epsilon"]], ["add", "theorem", "lt_forget_epsilons_ceil", ["counterexample", "int_with_epsilon"]], ["add", "theorem", "pos_iff", ["counterexample", "int_with_epsilon"]], ["del", "def", "forget_epsilons", ["int_with_epsilon"]], ["del", "theorem", "forget_epsilons_apply", ["int_with_epsilon"]], ["del", "theorem", "forget_epsilons_floor_lt", ["int_with_epsilon"]], ["del", "theorem", "lt_forget_epsilons_ceil", ["int_with_epsilon"]], ["del", "theorem", "pos_iff", ["int_with_epsilon"]]]}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": [["add", "def", "discrete_copy", ["counterexample"]], ["add", "theorem", "apply_f_eq_continuous_part", ["counterexample", "phillips_1940"]], ["add", "def", "C", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "abs_le_bound", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "additive", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "apply_countable", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "def", "continuous_part", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "continuous_part_apply_diff", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "continuous_part_apply_eq_zero_of_countable", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "countable_discrete_support", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "def", "discrete_part", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "discrete_part_apply", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "def", "discrete_support", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "empty", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "eq_add_parts", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "exists_discrete_support", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "exists_discrete_support_nonpos", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "le_bound", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "neg_apply", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "def", "restrict", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "restrict_apply", ["counterexample", "phillips_1940", "bounded_additive_measure"]], ["add", "structure", "bounded_additive_measure", ["counterexample", "phillips_1940"]], ["add", "def", "bounded_integrable_functions", ["counterexample", "phillips_1940"]], ["add", "def", "bounded_integrable_functions_integral_clm", ["counterexample", "phillips_1940"]], ["add", "theorem", "comp_ae_eq_const", ["counterexample", "phillips_1940"]], ["add", "theorem", "continuous_part_eval_clm_eq_zero", ["counterexample", "phillips_1940"]], ["add", "theorem", "countable_compl_spf", ["counterexample", "phillips_1940"]], ["add", "theorem", "countable_ne", ["counterexample", "phillips_1940"]], ["add", "theorem", "countable_spf_mem", ["counterexample", "phillips_1940"]], ["add", "theorem", "exists_linear_extension_to_bounded_functions", ["counterexample", "phillips_1940"]], ["add", "theorem", "extension_to_bounded_functions_apply", ["counterexample", "phillips_1940"]], ["add", "def", "f", ["counterexample", "phillips_1940"]], ["add", "theorem", "integrable_comp", ["counterexample", "phillips_1940"]], ["add", "theorem", "integral_comp", ["counterexample", "phillips_1940"]], ["add", "theorem", "measurable_comp", ["counterexample", "phillips_1940"]], ["add", "theorem", "no_pettis_integral", ["counterexample", "phillips_1940"]], ["add", "theorem", "norm_bound", ["counterexample", "phillips_1940"]], ["add", "theorem", "norm_indicator_le_one", ["counterexample", "phillips_1940"]], ["add", "theorem", "sierpinski_pathological_family", ["counterexample", "phillips_1940"]], ["add", "def", "spf", ["counterexample", "phillips_1940"]], ["add", "theorem", "to_functions_to_measure", ["counterexample", "phillips_1940"]], ["add", "theorem", "to_functions_to_measure_continuous_part", ["counterexample", "phillips_1940"]], ["del", "def", "discrete_copy", []], ["del", "theorem", "apply_f_eq_continuous_part", ["phillips_1940"]], ["del", "def", "C", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "abs_le_bound", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "additive", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "apply_countable", ["phillips_1940", "bounded_additive_measure"]], ["del", "def", "continuous_part", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "continuous_part_apply_diff", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "continuous_part_apply_eq_zero_of_countable", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "countable_discrete_support", ["phillips_1940", "bounded_additive_measure"]], ["del", "def", "discrete_part", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "discrete_part_apply", ["phillips_1940", "bounded_additive_measure"]], ["del", "def", "discrete_support", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "empty", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "eq_add_parts", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "exists_discrete_support", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "exists_discrete_support_nonpos", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "le_bound", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "neg_apply", ["phillips_1940", "bounded_additive_measure"]], ["del", "def", "restrict", ["phillips_1940", "bounded_additive_measure"]], ["del", "theorem", "restrict_apply", ["phillips_1940", "bounded_additive_measure"]], ["del", "structure", "bounded_additive_measure", ["phillips_1940"]], ["del", "def", "bounded_integrable_functions", ["phillips_1940"]], ["del", "def", "bounded_integrable_functions_integral_clm", ["phillips_1940"]], ["del", "theorem", "comp_ae_eq_const", ["phillips_1940"]], ["del", "theorem", "continuous_part_eval_clm_eq_zero", ["phillips_1940"]], ["del", "theorem", "countable_compl_spf", ["phillips_1940"]], ["del", "theorem", "countable_ne", ["phillips_1940"]], ["del", "theorem", "countable_spf_mem", ["phillips_1940"]], ["del", "theorem", "exists_linear_extension_to_bounded_functions", ["phillips_1940"]], ["del", "theorem", "extension_to_bounded_functions_apply", ["phillips_1940"]], ["del", "def", "f", ["phillips_1940"]], ["del", "theorem", "integrable_comp", ["phillips_1940"]], ["del", "theorem", "integral_comp", ["phillips_1940"]], ["del", "theorem", "measurable_comp", ["phillips_1940"]], ["del", "theorem", "no_pettis_integral", ["phillips_1940"]], ["del", "theorem", "norm_bound", ["phillips_1940"]], ["del", "theorem", "norm_indicator_le_one", ["phillips_1940"]], ["del", "theorem", "sierpinski_pathological_family", ["phillips_1940"]], ["del", "def", "spf", ["phillips_1940"]], ["del", "theorem", "to_functions_to_measure", ["phillips_1940"]], ["del", "theorem", "to_functions_to_measure_continuous_part", ["phillips_1940"]]]}, {"oldPath": "counterexamples/pseudoelement.lean", "newPath": "counterexamples/pseudoelement.lean", "changes": [["del", "theorem", "exist_ne_and_fst_eq_fst_and_snd_eq_snd", ["category_theory", "abelian", "pseudoelement"]], ["del", "theorem", "fst_mk_x_eq_fst_mk_y", ["category_theory", "abelian", "pseudoelement"]], ["del", "theorem", "fst_x_pseudo_eq_fst_y", ["category_theory", "abelian", "pseudoelement"]], ["del", "theorem", "mk_x_ne_mk_y", ["category_theory", "abelian", "pseudoelement"]], ["del", "theorem", "snd_mk_x_eq_snd_mk_y", ["category_theory", "abelian", "pseudoelement"]], ["del", "theorem", "snd_x_pseudo_eq_snd_y", ["category_theory", "abelian", "pseudoelement"]], ["del", "def", "x", ["category_theory", "abelian", "pseudoelement"]], ["del", "theorem", "x_not_pseudo_eq", ["category_theory", "abelian", "pseudoelement"]], ["del", "def", "y", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "exist_ne_and_fst_eq_fst_and_snd_eq_snd", ["counterexample"]], ["add", "theorem", "fst_mk_x_eq_fst_mk_y", ["counterexample"]], ["add", "theorem", "fst_x_pseudo_eq_fst_y", ["counterexample"]], ["add", "theorem", "mk_x_ne_mk_y", ["counterexample"]], ["add", "theorem", "snd_mk_x_eq_snd_mk_y", ["counterexample"]], ["add", "theorem", "snd_x_pseudo_eq_snd_y", ["counterexample"]], ["add", "def", "x", ["counterexample"]], ["add", "theorem", "x_not_pseudo_eq", ["counterexample"]], ["add", "def", "y", ["counterexample"]]]}, {"oldPath": "counterexamples/quadratic_form.lean", "newPath": "counterexamples/quadratic_form.lean", "changes": [["del", "def", "B", []], ["del", "theorem", "B_apply", []], ["del", "theorem", "B_ne_zero", []], ["add", "def", "B", ["counterexample"]], ["add", "theorem", "B_apply", ["counterexample"]], ["add", "theorem", "B_ne_zero", ["counterexample"]], ["add", "theorem", "is_alt_B", ["counterexample"]], ["add", "theorem", "is_symm_B", ["counterexample"]], ["add", "theorem", "{u}", ["counterexample"]], ["del", "theorem", "is_alt_B", []], ["del", "theorem", "is_symm_B", []], ["del", "theorem", "{u}", []]]}, {"oldPath": "counterexamples/seminorm_lattice_not_distrib.lean", "newPath": "counterexamples/seminorm_lattice_not_distrib.lean", "changes": [["add", "theorem", "eq_one", ["counterexample", "seminorm_not_distrib"]], ["add", "theorem", "not_distrib", ["counterexample", "seminorm_not_distrib"]], ["del", "theorem", "eq_one", ["seminorm_not_distrib"]], ["del", "theorem", "not_distrib", ["seminorm_not_distrib"]]]}, {"oldPath": "counterexamples/sorgenfrey_line.lean", "newPath": "counterexamples/sorgenfrey_line.lean", "changes": [["add", "theorem", "continuous_to_real", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "dense_range_coe_rat", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "exists_Ico_disjoint_closed", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_clopen_Ici", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_clopen_Ici_prod", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_clopen_Ico", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_clopen_Iio", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_closed_antidiagonal", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_closed_iff", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_closed_of_subset_antidiagonal", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_open_Ici", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_open_Ico", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "is_open_iff", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "map_to_real_nhds", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_antitone_basis_Ico_inv_pnat", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_basis_Ico", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_basis_Ico_inv_pnat", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_basis_Ico_rat", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_countable_basis_Ico_inv_pnat", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_eq_comap", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_eq_map", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "nhds_prod_antitone_basis_inv_pnat", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "not_metrizable_space", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "not_normal_space_prod", ["counterexample", "sorgenfrey_line"]], ["add", "theorem", "not_second_countable_topology", ["counterexample", "sorgenfrey_line"]], ["add", "def", "to_real", ["counterexample", "sorgenfrey_line"]], ["add", "def", "sorgenfrey_line", ["counterexample"]], ["del", "theorem", "continuous_to_real", ["sorgenfrey_line"]], ["del", "theorem", "dense_range_coe_rat", ["sorgenfrey_line"]], ["del", "theorem", "exists_Ico_disjoint_closed", ["sorgenfrey_line"]], ["del", "theorem", "is_clopen_Ici", ["sorgenfrey_line"]], ["del", "theorem", "is_clopen_Ici_prod", ["sorgenfrey_line"]], ["del", "theorem", "is_clopen_Ico", ["sorgenfrey_line"]], ["del", "theorem", "is_clopen_Iio", ["sorgenfrey_line"]], ["del", "theorem", "is_closed_antidiagonal", ["sorgenfrey_line"]], ["del", "theorem", "is_closed_iff", ["sorgenfrey_line"]], ["del", "theorem", "is_closed_of_subset_antidiagonal", ["sorgenfrey_line"]], ["del", "theorem", "is_open_Ici", ["sorgenfrey_line"]], ["del", "theorem", "is_open_Ico", ["sorgenfrey_line"]], ["del", "theorem", "is_open_iff", ["sorgenfrey_line"]], ["del", "theorem", "map_to_real_nhds", ["sorgenfrey_line"]], ["del", "theorem", "nhds_antitone_basis_Ico_inv_pnat", ["sorgenfrey_line"]], ["del", "theorem", "nhds_basis_Ico", ["sorgenfrey_line"]], ["del", "theorem", "nhds_basis_Ico_inv_pnat", ["sorgenfrey_line"]], ["del", "theorem", "nhds_basis_Ico_rat", ["sorgenfrey_line"]], ["del", "theorem", "nhds_countable_basis_Ico_inv_pnat", ["sorgenfrey_line"]], ["del", "theorem", "nhds_eq_comap", ["sorgenfrey_line"]], ["del", "theorem", "nhds_eq_map", ["sorgenfrey_line"]], ["del", "theorem", "nhds_prod_antitone_basis_inv_pnat", ["sorgenfrey_line"]], ["del", "theorem", "not_metrizable_space", ["sorgenfrey_line"]], ["del", "theorem", "not_normal_space_prod", ["sorgenfrey_line"]], ["del", "theorem", "not_second_countable_topology", ["sorgenfrey_line"]], ["del", "def", "to_real", ["sorgenfrey_line"]], ["del", "def", "sorgenfrey_line", []]]}, {"oldPath": "counterexamples/zero_divisors_in_add_monoid_algebras.lean", "newPath": "counterexamples/zero_divisors_in_add_monoid_algebras.lean", "changes": [["del", "theorem", "f010", ["F"]], ["del", "theorem", "f011", ["F"]], ["del", "theorem", "f110", ["F"]], ["del", "theorem", "f111", ["F"]], ["del", "theorem", "f1", ["F"]], ["del", "def", "val", ["F"]], ["del", "theorem", "z01", ["F"]], ["add", "theorem", "f010", ["counterexample", "F"]], ["add", "theorem", "f011", ["counterexample", "F"]], ["add", "theorem", "f110", ["counterexample", "F"]], ["add", "theorem", "f111", ["counterexample", "F"]], ["add", "theorem", "f1", ["counterexample", "F"]], ["add", "def", "val", ["counterexample", "F"]], ["add", "theorem", "z01", ["counterexample", "F"]], ["add", "def", "drop_until", ["counterexample", "list"]], ["add", "theorem", "single_zero_one", ["counterexample"]], ["add", "theorem", "zero_divisors_of_periodic", ["counterexample"]], ["add", "theorem", "zero_divisors_of_torsion", ["counterexample"]], ["del", "def", "drop_until", ["list"]], ["del", "theorem", "single_zero_one", []], ["del", "theorem", "zero_divisors_of_periodic", []], ["del", "theorem", "zero_divisors_of_torsion", []]]}]}, {"timestamp": 1685472638, "sha": "48dc6abe", "message": "feat(linear_algebra/matrix/charpoly/eigs): det and trace are product and sum of eigenvalues (#19079)\nThis adds two lemmas:\n1. `det_eq_prod_roots_charpoly`: the determinant of a square matrix is the product of the characteristic polynomial roots of that matrix.\n2. `trace_eq_sum_roots_charpoly`: the trace is similarly the sum of the characteristic polynomial roots.\nThese two lemmas are more commonly stated as trace is the sum of eigenvalues and determinant is the product of eigenvalues. Mathlib has already defined eigenvalues in [linear_algebra.eigenspace](https://leanprover-community.github.io/mathlib_docs/linear_algebra/eigenspace.html#module.End.eigenvalues) as the roots of the minimal polynomial of a linear endomorphism. These do not have correct multiplicity and cannot be used in the theorems above. Hence we express these theorems in terms of the roots of the characteristic polynomial directly.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/matrix/charpoly/eigs.lean", "changes": [["add", "theorem", "det_eq_prod_roots_charpoly", ["matrix"]], ["add", "theorem", "det_eq_prod_roots_charpoly_of_splits", ["matrix"]], ["add", "theorem", "trace_eq_sum_roots_charpoly", ["matrix"]], ["add", "theorem", "trace_eq_sum_roots_charpoly_of_splits", ["matrix"]]]}]}, {"timestamp": 1685468790, "sha": "938d3db9", "message": "feat(ring_theory/polynomial/hermite): proof of explicit formula for Hermite polynomial coefficients (#19044)\nAdd the explicit closed formula for the coefficients of Hermite polynomials.", "changes": [{"oldPath": "src/ring_theory/polynomial/hermite/basic.lean", "newPath": "src/ring_theory/polynomial/hermite/basic.lean", "changes": [["add", "theorem", "coeff_hermite", ["polynomial"]], ["add", "theorem", "coeff_hermite_explicit", ["polynomial"]], ["add", "theorem", "coeff_hermite_of_even_add", ["polynomial"]]]}]}, {"timestamp": 1685455442, "sha": "74c2af38", "message": "feat(data/set/ncard): noncomputable set cardinality (#18576)\nThis PR introduces a function `set.ncard` that (noncomputably) gives the cardinality of a finite `set`, or zero if the set is infinite. The intention is to give a way to reason about set cardinality that avoids data and going between `set` and `finset`. This is especially useful for reasoning about sets in a `finite` type.\nThe added file is somewhat large, but it is essentially just duplicating the API in `data.finset.card` (minus the induction lemmas).", "changes": [{"oldPath": null, "newPath": "src/data/set/ncard.lean", "changes": [["add", "theorem", "diff_nonempty_of_ncard_lt_ncard", ["set"]], ["add", "theorem", "eq_insert_of_ncard_eq_succ", ["set"]], ["add", "theorem", "eq_of_subset_of_ncard_le", ["set"]], ["add", "theorem", "exists_eq_insert_iff_ncard", ["set"]], ["add", "theorem", "exists_intermediate_set'", ["set"]], ["add", "theorem", "exists_intermediate_set", ["set"]], ["add", "theorem", "exists_mem_not_mem_of_ncard_lt_ncard", ["set"]], ["add", "theorem", "exists_ne_map_eq_of_ncard_lt_of_maps_to", ["set"]], ["add", "theorem", "exists_ne_of_one_lt_ncard", ["set"]], ["add", "theorem", "exists_smaller_set", ["set"]], ["add", "theorem", "exists_subset_or_subset_of_two_mul_lt_ncard", ["set"]], ["add", "theorem", "fiber_ncard_ne_zero_iff_mem_image", ["set"]], ["add", "theorem", "finite_of_ncard_ne_zero", ["set"]], ["add", "theorem", "finite_of_ncard_pos", ["set"]], ["add", "theorem", "exists_subset_ncard_eq", ["set", "infinite"]], ["add", "theorem", "exists_supset_ncard_eq", ["set", "infinite"]], ["add", "theorem", "ncard", ["set", "infinite"]], ["add", "theorem", "inj_on_of_ncard_image_eq", ["set"]], ["add", "theorem", "inj_on_of_surj_on_of_ncard_le", ["set"]], ["add", "theorem", "le_ncard_diff", ["set"]], ["add", "theorem", "le_ncard_of_inj_on_range", ["set"]], ["add", "theorem", "map_eq_of_subset", ["set"]], ["add", "theorem", "card_coe_set_eq", ["set", "nat"]], ["add", "theorem", "ncard_add_ncard_compl", ["set"]], ["add", "theorem", "ncard_coe_finset", ["set"]], ["add", "theorem", "ncard_congr", ["set"]], ["add", "theorem", "ncard_def", ["set"]], ["add", "theorem", "ncard_diff", ["set"]], ["add", "theorem", "ncard_diff_add_ncard", ["set"]], ["add", "theorem", "ncard_diff_add_ncard_eq_ncard", ["set"]], ["add", "theorem", "ncard_diff_singleton_add_one", ["set"]], ["add", "theorem", "ncard_diff_singleton_le", ["set"]], ["add", "theorem", "ncard_diff_singleton_lt_of_mem", ["set"]], ["add", "theorem", "ncard_diff_singleton_of_mem", ["set"]], ["add", "theorem", "ncard_empty", ["set"]], ["add", "theorem", "ncard_eq_ncard_iff_ncard_diff_eq_ncard_diff", ["set"]], ["add", "theorem", "ncard_eq_of_bijective", ["set"]], ["add", "theorem", "ncard_eq_one", ["set"]], ["add", "theorem", "ncard_eq_succ", ["set"]], ["add", "theorem", "ncard_eq_three", ["set"]], ["add", "theorem", "ncard_eq_to_finset_card", ["set"]], ["add", "theorem", "ncard_eq_two", ["set"]], ["add", "theorem", "ncard_eq_zero", ["set"]], ["add", "theorem", "ncard_exchange'", ["set"]], ["add", "theorem", "ncard_exchange", ["set"]], ["add", "theorem", "ncard_image_iff", ["set"]], ["add", "theorem", "ncard_image_le", ["set"]], ["add", "theorem", "ncard_image_of_inj_on", ["set"]], ["add", "theorem", "ncard_image_of_injective", ["set"]], ["add", "theorem", "ncard_insert_eq_ite", ["set"]], ["add", "theorem", "ncard_insert_le", ["set"]], ["add", "theorem", "ncard_insert_of_mem", ["set"]], ["add", "theorem", "ncard_insert_of_not_mem", ["set"]], ["add", "theorem", "ncard_inter_add_ncard_diff_eq_ncard", ["set"]], ["add", "theorem", "ncard_inter_add_ncard_union", ["set"]], ["add", "theorem", "ncard_inter_le_ncard_left", ["set"]], ["add", "theorem", "ncard_inter_le_ncard_right", ["set"]], ["add", "theorem", "ncard_le_ncard_diff_add_ncard", ["set"]], ["add", "theorem", "ncard_le_ncard_iff_ncard_diff_le_ncard_diff", ["set"]], ["add", "theorem", "ncard_le_ncard_insert", ["set"]], ["add", "theorem", "ncard_le_ncard_of_inj_on", ["set"]], ["add", "theorem", "ncard_le_of_subset", ["set"]], ["add", "theorem", "ncard_le_one", ["set"]], ["add", "theorem", "ncard_le_one_iff", ["set"]], ["add", "theorem", "ncard_le_one_iff_eq", ["set"]], ["add", "theorem", "ncard_le_one_iff_subset_singleton", ["set"]], ["add", "theorem", "ncard_le_one_of_subsingleton", ["set"]], ["add", "theorem", "ncard_lt_ncard", ["set"]], ["add", "theorem", "ncard_lt_ncard_iff_ncard_diff_lt_ncard_diff", ["set"]], ["add", "theorem", "ncard_map", ["set"]], ["add", "theorem", "ncard_mono", ["set"]], ["add", "theorem", "ncard_ne_zero_of_mem", ["set"]], ["add", "theorem", "ncard_pair", ["set"]], ["add", "theorem", "ncard_pos", ["set"]], ["add", "theorem", "ncard_preimage_of_injective_subset_range", ["set"]], ["add", "theorem", "ncard_singleton", ["set"]], ["add", "theorem", "ncard_singleton_inter", ["set"]], ["add", "theorem", "ncard_strict_mono", ["set"]], ["add", "theorem", "ncard_subtype", ["set"]], ["add", "theorem", "ncard_union_add_ncard_inter", ["set"]], ["add", "theorem", "ncard_union_eq", ["set"]], ["add", "theorem", "ncard_union_le", ["set"]], ["add", "theorem", "ncard_univ", ["set"]], ["add", "theorem", "nonempty_of_ncard_ne_zero", ["set"]], ["add", "theorem", "one_lt_ncard", ["set"]], ["add", "theorem", "one_lt_ncard_iff", ["set"]], ["add", "theorem", "pred_ncard_le_ncard_diff_singleton", ["set"]], ["add", "theorem", "sep_of_ncard_eq", ["set"]], ["add", "theorem", "subset_iff_eq_of_ncard_le", ["set"]], ["add", "theorem", "surj_on_of_inj_on_of_ncard_le", ["set"]], ["add", "theorem", "two_lt_card", ["set"]], ["add", "theorem", "two_lt_ncard_iff", ["set"]]]}]}, {"timestamp": 1685442272, "sha": "9a1ffe49", "message": "refactor(analysis/calculus/darboux): review API (#19125)\nAdd more versions of the main theorem, slightly generalize existing versions.", "changes": [{"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": [["add", "theorem", "image_deriv", ["convex"]], ["add", "theorem", "image_deriv_within", ["convex"]], ["add", "theorem", "image_has_deriv_within_at", ["convex"]], ["del", "theorem", "convex_image_has_deriv_at", []], ["del", "theorem", "deriv_forall_lt_or_forall_gt_of_forall_ne", []], ["add", "theorem", "exists_has_deriv_within_at_eq_of_ge_of_le", []], ["add", "theorem", "exists_has_deriv_within_at_eq_of_le_of_ge", []], ["add", "theorem", "has_deriv_within_at_forall_lt_or_forall_gt_of_forall_ne", []], ["add", "theorem", "image_deriv", ["set", "ord_connected"]], ["add", "theorem", "image_deriv_within", ["set", "ord_connected"]], ["add", "theorem", "image_has_deriv_within_at", ["set", "ord_connected"]]]}]}, {"timestamp": 1685436651, "sha": "f60c6087", "message": "chore(*): add mathlib4 synchronization comments (#19115)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.biproducts`\n* `algebra.category.Module.monoidal.basic`\n* `algebra.category.Ring.adjunctions`\n* `algebra.monoid_algebra.grading`\n* `analysis.calculus.deriv.add`\n* `analysis.calculus.deriv.basic`\n* `analysis.calculus.deriv.comp`\n* `analysis.calculus.deriv.inverse`\n* `analysis.calculus.deriv.linear`\n* `analysis.calculus.deriv.mul`\n* `analysis.calculus.deriv.polynomial`\n* `analysis.calculus.deriv.pow`\n* `analysis.calculus.deriv.prod`\n* `analysis.calculus.deriv.slope`\n* `analysis.calculus.deriv.star`\n* `analysis.calculus.deriv.support`\n* `analysis.calculus.fderiv_measurable`\n* `analysis.calculus.local_extr`\n* `analysis.convex.cone.dual`\n* `analysis.inner_product_space.lax_milgram`\n* `analysis.inner_product_space.pi_L2`\n* `category_theory.bicategory.coherence`\n* `category_theory.limits.fubini`\n* `category_theory.monoidal.coherence_lemmas`\n* `geometry.euclidean.sphere.basic`\n* `geometry.euclidean.sphere.power`\n* `geometry.euclidean.sphere.second_inter`\n* `group_theory.complement`\n* `group_theory.sylow`\n* `linear_algebra.matrix.hermitian`\n* `measure_theory.constructions.prod.basic`\n* `measure_theory.function.lp_order`\n* `measure_theory.function.lp_seminorm`\n* `measure_theory.function.lp_space`\n* `measure_theory.measure.complex`\n* `measure_theory.measure.vector_measure`\n* `number_theory.padics.ring_homs`\n* `ring_theory.ideal.cotangent`\n* `topology.metric_space.metrizable_uniformity`\n* `topology.sheaves.forget`\n* `topology.sheaves.sheaf_condition.unique_gluing`\n* `topology.sheaves.sheaf_of_functions`", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/monoidal/basic.lean", "newPath": "src/algebra/category/Module/monoidal/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/adjunctions.lean", "newPath": "src/algebra/category/Ring/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/add.lean", "newPath": "src/analysis/calculus/deriv/add.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/basic.lean", "newPath": "src/analysis/calculus/deriv/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/comp.lean", "newPath": "src/analysis/calculus/deriv/comp.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/inverse.lean", "newPath": "src/analysis/calculus/deriv/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/linear.lean", "newPath": "src/analysis/calculus/deriv/linear.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/mul.lean", "newPath": "src/analysis/calculus/deriv/mul.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/polynomial.lean", "newPath": "src/analysis/calculus/deriv/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/pow.lean", "newPath": "src/analysis/calculus/deriv/pow.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/prod.lean", "newPath": "src/analysis/calculus/deriv/prod.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/slope.lean", "newPath": "src/analysis/calculus/deriv/slope.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/star.lean", "newPath": "src/analysis/calculus/deriv/star.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv/support.lean", "newPath": "src/analysis/calculus/deriv/support.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone/dual.lean", "newPath": "src/analysis/convex/cone/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/lax_milgram.lean", "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/coherence.lean", "newPath": "src/category_theory/bicategory/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/coherence_lemmas.lean", "newPath": "src/category_theory/monoidal/coherence_lemmas.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/basic.lean", "newPath": "src/geometry/euclidean/sphere/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/power.lean", "newPath": "src/geometry/euclidean/sphere/power.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/second_inter.lean", "newPath": "src/geometry/euclidean/sphere/second_inter.lean", "changes": []}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod/basic.lean", "newPath": "src/measure_theory/constructions/prod/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_order.lean", "newPath": "src/measure_theory/function/lp_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_seminorm.lean", "newPath": "src/measure_theory/function/lp_seminorm.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/complex.lean", "newPath": "src/measure_theory/measure/complex.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/cotangent.lean", "newPath": "src/ring_theory/ideal/cotangent.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable_uniformity.lean", "newPath": "src/topology/metric_space/metrizable_uniformity.lean", "changes": []}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}]}, {"timestamp": 1685418583, "sha": "bd654783", "message": "chore(linear_algebra/alternating): make `ι` an explicit arg of `alternating_map.const_of_is_empty` (#19123)\nWhile for general multilinear maps one can deduce it from the type of `E : ι -> Type*`, this doesn't work for alternating maps.", "changes": [{"oldPath": "src/analysis/inner_product_space/orientation.lean", "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "det_is_empty", ["basis"]]]}]}, {"timestamp": 1685383001, "sha": "837f72de", "message": "chore(analysis/normed/group/add_torsor): nnnorm lemmas (#18997)\nFor every `dist`/`norm` lemma in these files, this adds the corresponding `nndist`/`nnnorm` lemma.", "changes": [{"oldPath": "src/analysis/normed/group/add_torsor.lean", "newPath": "src/analysis/normed/group/add_torsor.lean", "changes": [["add", "theorem", "nndist_eq_nnnorm_vsub'", []], ["add", "theorem", "nndist_eq_nnnorm_vsub", []], ["add", "theorem", "nndist_vadd_cancel_right", []], ["add", "theorem", "nndist_vadd_left", []], ["add", "theorem", "nndist_vadd_right", []], ["add", "theorem", "nndist_vsub_cancel_right", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "nndist_center_homothety", []], ["add", "theorem", "nndist_homothety_center", []], ["add", "theorem", "nndist_homothety_self", []], ["add", "theorem", "nndist_left_line_map", []], ["add", "theorem", "nndist_left_midpoint", []], ["add", "theorem", "nndist_line_map_left", []], ["add", "theorem", "nndist_line_map_line_map", []], ["add", "theorem", "nndist_line_map_right", []], ["add", "theorem", "nndist_midpoint_left", []], ["add", "theorem", "nndist_midpoint_midpoint_le'", []], ["add", "theorem", "nndist_midpoint_midpoint_le", []], ["add", "theorem", "nndist_midpoint_right", []], ["add", "theorem", "nndist_right_line_map", []], ["add", "theorem", "nndist_right_midpoint", []], ["add", "theorem", "nndist_self_homothety", []]]}]}, {"timestamp": 1685379220, "sha": "729d23f9", "message": "doc(topology/homotopy/H-spaces): add doc about H-spaces. (#19075)\nAdded doc about `H-spaces` in topology/homotopy/H-spaces.", "changes": [{"oldPath": "src/topology/homotopy/H_spaces.lean", "newPath": "src/topology/homotopy/H_spaces.lean", "changes": []}]}, {"timestamp": 1685349285, "sha": "a8410892", "message": "feat (number_theory/zeta_function): define zeta (#19027)\nThis PR defines the Riemann zeta function (as a function on the whole complex plane).", "changes": [{"oldPath": null, "newPath": "src/number_theory/zeta_function.lean", "changes": [["add", "theorem", "completed_zeta_eq_mellin_of_one_lt_re", []], ["add", "theorem", "continuous_at_zeta_kernel₁", []], ["add", "theorem", "differentiable_at_completed_zeta", []], ["add", "theorem", "differentiable_at_mellin_zeta_kernel₁", []], ["add", "theorem", "differentiable_completed_zeta₀", []], ["add", "theorem", "differentiable_mellin_zeta_kernel₂", []], ["add", "theorem", "has_mellin_one_div_sqrt_Ioc", []], ["add", "theorem", "has_mellin_one_div_sqrt_sub_one_div_two_Ioc", []], ["add", "theorem", "is_O_at_top_zeta_kernel₁", []], ["add", "theorem", "is_O_at_top_zeta_kernel₂", []], ["add", "theorem", "is_O_zero_zeta_kernel₁", []], ["add", "theorem", "is_O_zero_zeta_kernel₂", []], ["add", "theorem", "is_O_zero_zeta_kernel₂_rpow", []], ["add", "theorem", "locally_integrable_zeta_kernel₁", []], ["add", "theorem", "locally_integrable_zeta_kernel₂", []], ["add", "theorem", "mellin_zeta_kernel₂_eq_of_lt_re", []], ["add", "def", "riemann_completed_zeta", []], ["add", "def", "riemann_completed_zeta₀", []], ["add", "def", "riemann_zeta", []], ["add", "theorem", "riemann_zeta_zero", []], ["add", "theorem", "summable_exp_neg_pi_mul_nat_sq", []], ["add", "def", "zeta_kernel₁", []], ["add", "theorem", "zeta_kernel₁_eq_jacobi_theta", []], ["add", "def", "zeta_kernel₂", []], ["add", "theorem", "zeta_kernel₂_one_div", []]]}]}, {"timestamp": 1685336920, "sha": "e3e30a5c", "message": "feat(analysis/schwartz_space): partial derivatives (#18755)", "changes": [{"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": [["add", "def", "eval_clm", ["schwartz_map"]], ["add", "def", "iterated_pderiv", ["schwartz_map"]], ["add", "theorem", "iterated_pderiv_one", ["schwartz_map"]], ["add", "theorem", "iterated_pderiv_succ_left", ["schwartz_map"]], ["add", "theorem", "iterated_pderiv_succ_right", ["schwartz_map"]], ["add", "theorem", "iterated_pderiv_zero", ["schwartz_map"]], ["add", "def", "pderiv_clm", ["schwartz_map"]], ["add", "theorem", "pderiv_clm_apply", ["schwartz_map"]]]}]}, {"timestamp": 1685306753, "sha": "88a563b1", "message": "feat(analysis/normed_space/triv_sq_zero_ext): generalize some results to non-commutativity (#19049)", "changes": [{"oldPath": "src/analysis/normed_space/triv_sq_zero_ext.lean", "newPath": "src/analysis/normed_space/triv_sq_zero_ext.lean", "changes": [["add", "theorem", "exp_def_of_smul_comm", ["triv_sq_zero_ext"]], ["del", "theorem", "has_sum_exp_series", ["triv_sq_zero_ext"]], ["add", "theorem", "has_sum_exp_series_of_smul_comm", ["triv_sq_zero_ext"]], ["add", "theorem", "has_sum_fst_exp_series", ["triv_sq_zero_ext"]], ["add", "theorem", "has_sum_snd_exp_series_of_smul_comm", ["triv_sq_zero_ext"]]]}]}, {"timestamp": 1685302130, "sha": "7bf0850d", "message": "fix(scripts): Allow special character in file names (#11001)\nWe don't have any files like this in mathlib, but it probably doesn't hurt to be safe here.", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}]}, {"timestamp": 1685292933, "sha": "5c4b3d41", "message": "chore(ring_theory/adjoin_root): modify `field` instance on `adjoin_root` (#19119)\nWe copy the fields of `group_with_zero` instead of `field`. This speeds up the already ported `adjoin_root/AdjoinRoot` pair.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.234339.20.20FieldTheory.2ESplittingField)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1685285709, "sha": "f7ebde7e", "message": "refactor(topology/vector_bundle/hom): fibres of hom-bundle carry strong topology (#19107)\nCurrently, the \"hom-bundle\" between two vector bundles `E₁` and `E₂` has fibre over `x` which is a type synonym of `E₁ x →SL[σ] E₂ x`, but which carries a topology produced by the hom-bundle construction (using the identification by trivializations withe the model fibre `F₁ →SL[σ] F₂`). This was needed when this bundle was made (#14541) because at that time, `F₁ →SL[σ] F₂` (continuous linear maps between normed spaces) carried a topology in mathlib but `E₁ x →SL[σ] E₂ x` (continuous linear maps between topological vector spaces) did not.\nAs of #16053, continuous linear maps between topological vector spaces do carry a topology, the strong topology. So we can kill the old topology on the type synonym and just use the default one, which should avoid annoying issues later.\nA few minor changes are needed to make this go through:\n- we revert #14377: the question is whether the \"vector prebundle\" construction, whose canonical use is for the hom-bundle, should or should not require a topology on the fibres. Now that in applications it could happen either way (fibres do or don't come with a topology), it will be more convenient to assume that they do carry a topology, and put the \"artificial\" topology on the fibres if they happen to not.\n- some assumptions need to change from `[add_comm_monoid]` to `[add_comm_group]`, this is mathematically harmless since they are also modules over a field.\n- generalize the construction `continuous_linear_equiv.arrow_congrSL` from normed spaces to topological vector spaces", "changes": [{"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "def", "arrow_congr", ["continuous_linear_equiv"]], ["del", "def", "arrow_congrSL", ["continuous_linear_equiv"]]]}, {"oldPath": "src/geometry/manifold/vector_bundle/basic.lean", "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle/hom.lean", "newPath": "src/geometry/manifold/vector_bundle/hom.lean", "changes": [["del", "def", "aux", ["smooth_vector_bundle", "continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/module/strong_topology.lean", "newPath": "src/topology/algebra/module/strong_topology.lean", "changes": [["add", "def", "arrow_congr", ["continuous_linear_equiv"]], ["add", "def", "arrow_congrSL", ["continuous_linear_equiv"]], ["add", "def", "arrow_congrₛₗ", ["continuous_linear_equiv"]], ["add", "theorem", "arrow_congrₛₗ_continuous", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "inducing_const_prod", []], ["add", "theorem", "inducing_prod_const", []]]}, {"oldPath": "src/topology/fiber_bundle/basic.lean", "newPath": "src/topology/fiber_bundle/basic.lean", "changes": [["del", "def", "fiber_topology", ["fiber_prebundle"]], ["del", "theorem", "inducing_total_space_mk", ["fiber_prebundle"]], ["add", "theorem", "inducing_total_space_mk_of_inducing_comp", ["fiber_prebundle"]]]}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["del", "def", "fiber_topology", ["vector_prebundle"]], ["del", "theorem", "inducing_total_space_mk", ["vector_prebundle"]], ["mod", "def", "to_fiber_bundle", ["vector_prebundle"]]]}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": [["mod", "theorem", "continuous_linear_map_coord_change_apply", ["pretrivialization"]]]}]}, {"timestamp": 1685285708, "sha": "d87199d5", "message": "feat(linear_algebra/free_module/ideal_quotient): add ideal.finrank_quotient_eq_sum (#19084)", "changes": [{"oldPath": "src/linear_algebra/free_module/ideal_quotient.lean", "newPath": "src/linear_algebra/free_module/ideal_quotient.lean", "changes": [["add", "theorem", "finrank_quotient_eq_sum", ["ideal"]]]}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}]}, {"timestamp": 1685278618, "sha": "4f840b8d", "message": "feat(ring_theory/polynomial/quotient): generalise quotient_span_X_sub_C_alg_equiv (#19086)", "changes": [{"oldPath": "src/ring_theory/polynomial/quotient.lean", "newPath": "src/ring_theory/polynomial/quotient.lean", "changes": []}]}, {"timestamp": 1685220966, "sha": "917c3c07", "message": "feat (analysis/mellin_transform): API for mellin transforms (#19110)\nThis adds results about Mellin transforms of things like `f(a * x)` or `f (x ^ a)` in terms of the Mellin transform of `f`.", "changes": [{"oldPath": "src/analysis/mellin_transform.lean", "newPath": "src/analysis/mellin_transform.lean", "changes": [["add", "theorem", "cpow_mul_of_real_nonneg", ["complex"]], ["add", "def", "has_mellin", []], ["add", "theorem", "has_mellin_add", []], ["add", "theorem", "has_mellin_cpow_Ioc", []], ["add", "theorem", "has_mellin_one_Ioc", []], ["add", "theorem", "has_mellin_sub", []], ["mod", "def", "mellin", []], ["add", "theorem", "mellin_comp_inv", []], ["add", "theorem", "mellin_comp_mul_left", []], ["add", "theorem", "mellin_comp_mul_right", []], ["add", "theorem", "mellin_comp_rpow", []], ["add", "theorem", "mellin_const_smul", []], ["add", "theorem", "comp_mul_left", ["mellin_convergent"]], ["add", "theorem", "comp_rpow", ["mellin_convergent"]], ["add", "theorem", "const_smul", ["mellin_convergent"]], ["add", "theorem", "cpow_smul", ["mellin_convergent"]], ["add", "theorem", "div_const", ["mellin_convergent"]], ["add", "def", "mellin_convergent", []], ["add", "theorem", "mellin_cpow_smul", []], ["add", "theorem", "mellin_div_const", []]]}, {"oldPath": "src/analysis/special_functions/gamma/basic.lean", "newPath": "src/analysis/special_functions/gamma/basic.lean", "changes": []}]}, {"timestamp": 1685216400, "sha": "3bce8d80", "message": "chore(analysis/calculus/deriv): split file (#19113)\n* Split `analysis.calculus.deriv` into smaller files.\n* Add copyright headers and (stubs of) module docstrings.\n* Change proofs of derivatives of `pow` and `polynomial` so that `analysis.calculus.deriv.pow` does not depend on polynomials.", "changes": [{"oldPath": "src/analysis/bounded_variation.lean", "newPath": "src/analysis/bounded_variation.lean", "changes": []}, {"oldPath": "src/analysis/calculus/bump_function_inner.lean", "newPath": "src/analysis/calculus/bump_function_inner.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": null, "changes": [["del", "theorem", "comp", ["deriv"]], ["del", "theorem", "neg'", ["deriv"]], ["del", "theorem", "neg", ["deriv"]], ["del", "theorem", "scomp", ["deriv"]], ["del", "def", "deriv", []], ["del", "theorem", "deriv_add", []], ["del", "theorem", "deriv_add_const'", []], ["del", "theorem", "deriv_add_const", []], ["del", "theorem", "deriv_clm_apply", []], ["del", "theorem", "deriv_clm_comp", []], ["del", "theorem", "deriv_const'", []], ["del", "theorem", "deriv_const", []], ["del", "theorem", "deriv_const_add'", []], ["del", "theorem", "deriv_const_add", []], ["del", "theorem", "deriv_const_mul", []], ["del", "theorem", "deriv_const_mul_field'", []], ["del", "theorem", "deriv_const_mul_field", []], ["del", "theorem", "deriv_const_smul", []], ["del", "theorem", "deriv_const_sub", []], ["del", "theorem", "deriv_div", []], ["del", "theorem", "deriv_div_const", []], ["del", "theorem", "deriv_eq", []], ["del", "theorem", "deriv_fderiv", []], ["del", "theorem", "deriv_id''", []], ["del", "theorem", "deriv_id'", []], ["del", "theorem", "deriv_id", []], ["del", "theorem", "deriv_inv''", []], ["del", "theorem", "deriv_inv'", []], ["del", "theorem", "deriv_inv", []], ["del", "theorem", "deriv_mem_iff", []], ["del", "theorem", "deriv_mul", []], ["del", "theorem", "deriv_mul_const", []], ["del", "theorem", "deriv_mul_const_field'", []], ["del", "theorem", "deriv_mul_const_field", []], ["del", "theorem", "deriv_neg''", []], ["del", "theorem", "deriv_neg'", []], ["del", "theorem", "deriv_neg", []], ["del", "theorem", "deriv_pi", []], ["del", "theorem", "deriv_pow''", []], ["del", "theorem", "deriv_pow'", []], ["del", "theorem", "deriv_pow", []], ["del", "theorem", "deriv_smul", []], ["del", "theorem", "deriv_smul_const", []], ["del", "theorem", "deriv_sub", []], ["del", "theorem", "deriv_sub_const", []], ["del", "theorem", "deriv_sum", []], ["del", "theorem", "comp", ["deriv_within"]], ["del", "theorem", "neg", ["deriv_within"]], ["del", "theorem", "scomp", ["deriv_within"]], ["del", "def", "deriv_within", []], ["del", "theorem", "deriv_within_Ioi_eq_Ici", []], ["del", "theorem", "deriv_within_add", []], ["del", "theorem", "deriv_within_add_const", []], ["del", "theorem", "deriv_within_clm_apply", []], ["del", "theorem", "deriv_within_clm_comp", []], ["del", "theorem", "deriv_within_congr", []], ["del", "theorem", "deriv_within_congr_set'", []], ["del", "theorem", "deriv_within_congr_set", []], ["del", "theorem", "deriv_within_const", []], ["del", "theorem", "deriv_within_const_add", []], ["del", "theorem", "deriv_within_const_mul", []], ["del", "theorem", "deriv_within_const_smul", []], ["del", "theorem", "deriv_within_const_sub", []], ["del", "theorem", "deriv_within_div", []], ["del", "theorem", "deriv_within_div_const", []], ["del", "theorem", "deriv_within_fderiv_within", []], ["del", "theorem", "deriv_within_id", []], ["del", "theorem", "deriv_within_inter", []], ["del", "theorem", "deriv_within_inv'", []], ["del", "theorem", "deriv_within_inv", []], ["del", "theorem", "deriv_within_mem_iff", []], ["del", "theorem", "deriv_within_mul", []], ["del", "theorem", "deriv_within_mul_const", []], ["del", "theorem", "deriv_within_neg", []], ["del", "theorem", "deriv_within_of_mem", []], ["del", "theorem", "deriv_within_of_open", []], ["del", "theorem", "deriv_within_pi", []], ["del", "theorem", "deriv_within_pow'", []], ["del", "theorem", "deriv_within_pow", []], ["del", "theorem", "deriv_within_smul", []], ["del", "theorem", "deriv_within_smul_const", []], ["del", "theorem", "deriv_within_sub", []], ["del", "theorem", "deriv_within_sub_const", []], ["del", "theorem", "deriv_within_subset", []], ["del", "theorem", "deriv_within_sum", []], ["del", "theorem", "deriv_within_univ", []], ["del", "theorem", "deriv_within_zero_of_not_differentiable_within_at", []], ["del", "theorem", "deriv_within_zpow", []], ["del", "theorem", "deriv_zero_of_not_differentiable_at", []], ["del", "theorem", "deriv_zpow'", []], ["del", "theorem", "deriv_zpow", []], ["del", "theorem", "div", ["differentiable"]], ["del", "theorem", "div_const", ["differentiable"]], ["del", "theorem", "inv", ["differentiable"]], ["del", "theorem", "zpow", ["differentiable"]], ["del", "theorem", "deriv_within", ["differentiable_at"]], ["del", "theorem", "div", ["differentiable_at"]], ["del", "theorem", "div_const", ["differentiable_at"]], ["del", "theorem", "has_deriv_at", ["differentiable_at"]], ["del", "theorem", "inv", ["differentiable_at"]], ["del", "theorem", "zpow", ["differentiable_at"]], ["del", "theorem", "differentiable_at_inv", []], ["del", "theorem", "differentiable_at_of_deriv_ne_zero", []], ["del", "theorem", "differentiable_at_pow", []], ["del", "theorem", "differentiable_at_zpow", []], ["del", "theorem", "differentiable_neg", []], ["del", "theorem", "div", ["differentiable_on"]], ["del", "theorem", "div_const", ["differentiable_on"]], ["del", "theorem", "has_deriv_at", ["differentiable_on"]], ["del", "theorem", "inv", ["differentiable_on"]], ["del", "theorem", "zpow", ["differentiable_on"]], ["del", "theorem", "differentiable_on_inv", []], ["del", "theorem", "differentiable_on_neg", []], ["del", "theorem", "differentiable_on_pow", []], ["del", "theorem", "differentiable_on_zpow", []], ["del", "theorem", "differentiable_pow", []], ["del", "theorem", "div", ["differentiable_within_at"]], ["del", "theorem", "div_const", ["differentiable_within_at"]], ["del", "theorem", "has_deriv_within_at", ["differentiable_within_at"]], ["del", "theorem", "inv", ["differentiable_within_at"]], ["del", "theorem", "zpow", ["differentiable_within_at"]], ["del", "theorem", "differentiable_within_at_Ioi_iff_Ici", []], ["del", "theorem", "differentiable_within_at_inv", []], ["del", "theorem", "differentiable_within_at_of_deriv_within_ne_zero", []], ["del", "theorem", "differentiable_within_at_pow", []], ["del", "theorem", "differentiable_within_at_zpow", []], ["del", "theorem", "comp_deriv", ["fderiv"]], ["del", "theorem", "fderiv_deriv", []], ["del", "theorem", "fderiv_inv", []], ["del", "theorem", "comp_deriv_within", ["fderiv_within"]], ["del", "theorem", "fderiv_within_deriv_within", []], ["del", "theorem", "fderiv_within_inv", []], ["del", "theorem", "deriv_eq", ["filter", "eventually_eq"]], ["del", "theorem", "deriv_within_eq", ["filter", "eventually_eq"]], ["del", "theorem", "has_deriv_at_filter_iff", ["filter", "eventually_eq"]], ["del", "theorem", "deriv", ["has_compact_support"]], ["del", "theorem", "add", ["has_deriv_at"]], ["del", "theorem", "add_const", ["has_deriv_at"]], ["del", "theorem", "clm_apply", ["has_deriv_at"]], ["del", "theorem", "clm_comp", ["has_deriv_at"]], ["del", "theorem", "comp", ["has_deriv_at"]], ["del", "theorem", "comp_has_deriv_within_at", ["has_deriv_at"]], ["del", "theorem", "comp_has_fderiv_at", ["has_deriv_at"]], ["del", "theorem", "comp_has_fderiv_within_at", ["has_deriv_at"]], ["del", "theorem", "congr_of_eventually_eq", ["has_deriv_at"]], ["del", "theorem", "const_add", ["has_deriv_at"]], ["del", "theorem", "const_mul", ["has_deriv_at"]], ["del", "theorem", "const_smul", ["has_deriv_at"]], ["del", "theorem", "const_sub", ["has_deriv_at"]], ["del", "theorem", "continuous_at", ["has_deriv_at"]], ["del", "theorem", "deriv", ["has_deriv_at"]], ["del", "theorem", "differentiable_at", ["has_deriv_at"]], ["del", "theorem", "div", ["has_deriv_at"]], ["del", "theorem", "div_const", ["has_deriv_at"]], ["del", "theorem", "eventually_ne", ["has_deriv_at"]], ["del", "theorem", "has_deriv_at_filter", ["has_deriv_at"]], ["del", "theorem", "has_deriv_within_at", ["has_deriv_at"]], ["del", "theorem", "has_fderiv_at_equiv", ["has_deriv_at"]], ["del", "theorem", "inv", ["has_deriv_at"]], ["del", "theorem", "mul", ["has_deriv_at"]], ["del", "theorem", "mul_const", ["has_deriv_at"]], ["del", "theorem", "neg", ["has_deriv_at"]], ["del", "theorem", "of_local_left_inverse", ["has_deriv_at"]], ["del", "theorem", "pow", ["has_deriv_at"]], ["del", "theorem", "prod", ["has_deriv_at"]], ["del", "theorem", "scomp", ["has_deriv_at"]], ["del", "theorem", "scomp_has_deriv_within_at", ["has_deriv_at"]], ["del", "theorem", "smul", ["has_deriv_at"]], ["del", "theorem", "smul_const", ["has_deriv_at"]], ["del", "theorem", "sub", ["has_deriv_at"]], ["del", "theorem", "sub_const", ["has_deriv_at"]], ["del", "theorem", "sum", ["has_deriv_at"]], ["del", "theorem", "tendsto_punctured_nhds", ["has_deriv_at"]], ["del", "theorem", "unique", ["has_deriv_at"]], ["del", "def", "has_deriv_at", []], ["del", "theorem", "has_deriv_at_const", []], ["del", "theorem", "has_deriv_at_deriv_iff", []], ["del", "theorem", "add", ["has_deriv_at_filter"]], ["del", "theorem", "add_const", ["has_deriv_at_filter"]], ["del", "theorem", "comp", ["has_deriv_at_filter"]], ["del", "theorem", "comp_has_fderiv_at_filter", ["has_deriv_at_filter"]], ["del", "theorem", "congr_of_eventually_eq", ["has_deriv_at_filter"]], ["del", "theorem", "const_add", ["has_deriv_at_filter"]], ["del", "theorem", "const_smul", ["has_deriv_at_filter"]], ["del", "theorem", "const_sub", ["has_deriv_at_filter"]], ["del", "theorem", "is_O_sub", ["has_deriv_at_filter"]], ["del", "theorem", "is_O_sub_rev", ["has_deriv_at_filter"]], ["del", "theorem", "mono", ["has_deriv_at_filter"]], ["del", "theorem", "neg", ["has_deriv_at_filter"]], ["del", "theorem", "prod", ["has_deriv_at_filter"]], ["del", "theorem", "scomp", ["has_deriv_at_filter"]], ["del", "theorem", "sub", ["has_deriv_at_filter"]], ["del", "theorem", "sub_const", ["has_deriv_at_filter"]], ["del", "theorem", "sum", ["has_deriv_at_filter"]], ["del", "theorem", "tendsto_nhds", ["has_deriv_at_filter"]], ["del", "def", "has_deriv_at_filter", []], ["del", "theorem", "has_deriv_at_filter_const", []], ["del", "theorem", "has_deriv_at_filter_id", []], ["del", "theorem", "has_deriv_at_filter_iff_is_o", []], ["del", "theorem", "has_deriv_at_filter_iff_tendsto", []], ["del", "theorem", "has_deriv_at_filter_iff_tendsto_slope", []], ["del", "theorem", "has_deriv_at_filter_neg", []], ["del", "theorem", "has_deriv_at_filter_pi", []], ["del", "theorem", "has_deriv_at_id'", []], ["del", "theorem", "has_deriv_at_id", []], ["del", "theorem", "has_deriv_at_iff_has_fderiv_at", []], ["del", "theorem", "has_deriv_at_iff_is_o", []], ["del", "theorem", "has_deriv_at_iff_is_o_nhds_zero", []], ["del", "theorem", "has_deriv_at_iff_tendsto", []], ["del", "theorem", "has_deriv_at_iff_tendsto_slope", []], ["del", "theorem", "has_deriv_at_inv", []], ["del", "theorem", "has_deriv_at_mul_const", []], ["del", "theorem", "has_deriv_at_neg'", []], ["del", "theorem", "has_deriv_at_neg", []], ["del", "theorem", "has_deriv_at_pi", []], ["del", "theorem", "has_deriv_at_pow", []], ["del", "theorem", "has_deriv_at_zpow", []], ["del", "theorem", "Ioi_iff_Ioo", ["has_deriv_within_at"]], ["del", "theorem", "add", ["has_deriv_within_at"]], ["del", "theorem", "add_const", ["has_deriv_within_at"]], ["del", "theorem", "clm_apply", ["has_deriv_within_at"]], ["del", "theorem", "clm_comp", ["has_deriv_within_at"]], ["del", "theorem", "comp", ["has_deriv_within_at"]], ["del", "theorem", "comp_has_fderiv_within_at", ["has_deriv_within_at"]], ["del", "theorem", "congr", ["has_deriv_within_at"]], ["del", "theorem", "congr_mono", ["has_deriv_within_at"]], ["del", "theorem", "congr_of_eventually_eq", ["has_deriv_within_at"]], ["del", "theorem", "congr_of_eventually_eq_of_mem", ["has_deriv_within_at"]], ["del", "theorem", "congr_of_mem", ["has_deriv_within_at"]], ["del", "theorem", "const_add", ["has_deriv_within_at"]], ["del", "theorem", "const_mul", ["has_deriv_within_at"]], ["del", "theorem", "const_smul", ["has_deriv_within_at"]], ["del", "theorem", "const_sub", ["has_deriv_within_at"]], ["del", "theorem", "continuous_within_at", ["has_deriv_within_at"]], ["del", "theorem", "deriv_eq_zero", ["has_deriv_within_at"]], ["del", "theorem", "deriv_within", ["has_deriv_within_at"]], ["del", "theorem", "differentiable_within_at", ["has_deriv_within_at"]], ["del", "theorem", "div", ["has_deriv_within_at"]], ["del", "theorem", "div_const", ["has_deriv_within_at"]], ["del", "theorem", "has_deriv_at", ["has_deriv_within_at"]], ["del", "theorem", "has_fderiv_within_at", ["has_deriv_within_at"]], ["del", "theorem", "inv", ["has_deriv_within_at"]], ["del", "theorem", "liminf_right_norm_slope_le", ["has_deriv_within_at"]], ["del", "theorem", "liminf_right_slope_le", ["has_deriv_within_at"]], ["del", "theorem", "liminf_right_slope_norm_le", ["has_deriv_within_at"]], ["del", "theorem", "limsup_norm_slope_le", ["has_deriv_within_at"]], ["del", "theorem", "limsup_slope_le'", ["has_deriv_within_at"]], ["del", "theorem", "limsup_slope_le", ["has_deriv_within_at"]], ["del", "theorem", "limsup_slope_norm_le", ["has_deriv_within_at"]], ["del", "theorem", "mono", ["has_deriv_within_at"]], ["del", "theorem", "mono_of_mem", ["has_deriv_within_at"]], ["del", "theorem", "mul", ["has_deriv_within_at"]], ["del", "theorem", "mul_const", ["has_deriv_within_at"]], ["del", "theorem", "neg", ["has_deriv_within_at"]], ["del", "theorem", "nhds_within", ["has_deriv_within_at"]], ["del", "theorem", "pow", ["has_deriv_within_at"]], ["del", "theorem", "prod", ["has_deriv_within_at"]], ["del", "theorem", "scomp", ["has_deriv_within_at"]], ["del", "theorem", "scomp_has_deriv_at", ["has_deriv_within_at"]], ["del", "theorem", "smul", ["has_deriv_within_at"]], ["del", "theorem", "smul_const", ["has_deriv_within_at"]], ["del", "theorem", "sub", ["has_deriv_within_at"]], ["del", "theorem", "sub_const", ["has_deriv_within_at"]], ["del", "theorem", "sum", ["has_deriv_within_at"]], ["del", "theorem", "union", ["has_deriv_within_at"]], ["del", "def", "has_deriv_within_at", []], ["del", "theorem", "has_deriv_within_at_Iio_iff_Iic", []], ["del", "theorem", "has_deriv_within_at_Ioi_iff_Ici", []], ["del", "theorem", "has_deriv_within_at_congr_set'", []], ["del", "theorem", "has_deriv_within_at_congr_set", []], ["del", "theorem", "has_deriv_within_at_const", []], ["del", "theorem", "has_deriv_within_at_deriv_within_iff", []], ["del", "theorem", "has_deriv_within_at_diff_singleton", []], ["del", "theorem", "has_deriv_within_at_id", []], ["del", "theorem", "has_deriv_within_at_iff_has_fderiv_within_at", []], ["del", "theorem", "has_deriv_within_at_iff_is_o", []], ["del", "theorem", "has_deriv_within_at_iff_tendsto", []], ["del", "theorem", "has_deriv_within_at_iff_tendsto_slope'", []], ["del", "theorem", "has_deriv_within_at_iff_tendsto_slope", []], ["del", "theorem", "has_deriv_within_at_inter'", []], ["del", "theorem", "has_deriv_within_at_inter", []], ["del", "theorem", "has_deriv_within_at_inv", []], ["del", "theorem", "has_deriv_within_at_neg", []], ["del", "theorem", "has_deriv_within_at_pi", []], ["del", "theorem", "has_deriv_within_at_pow", []], ["del", "theorem", "has_deriv_within_at_univ", []], ["del", "theorem", "has_deriv_within_at_zpow", []], ["del", "theorem", "comp_has_deriv_at", ["has_fderiv_at"]], ["del", "theorem", "comp_has_deriv_within_at", ["has_fderiv_at"]], ["del", "theorem", "has_deriv_at", ["has_fderiv_at"]], ["del", "theorem", "has_deriv_at_filter", ["has_fderiv_at_filter"]], ["del", "theorem", "has_fderiv_at_filter_iff_has_deriv_at_filter", []], ["del", "theorem", "has_fderiv_at_iff_has_deriv_at", []], ["del", "theorem", "has_fderiv_at_inv", []], ["del", "theorem", "comp_has_deriv_within_at", ["has_fderiv_within_at"]], ["del", "theorem", "has_deriv_within_at", ["has_fderiv_within_at"]], ["del", "theorem", "has_fderiv_within_at_iff_has_deriv_within_at", []], ["del", "theorem", "has_fderiv_within_at_inv", []], ["del", "theorem", "add", ["has_strict_deriv_at"]], ["del", "theorem", "clm_apply", ["has_strict_deriv_at"]], ["del", "theorem", "clm_comp", ["has_strict_deriv_at"]], ["del", "theorem", "comp", ["has_strict_deriv_at"]], ["del", "theorem", "comp_has_strict_fderiv_at", ["has_strict_deriv_at"]], ["del", "theorem", "const_mul", ["has_strict_deriv_at"]], ["del", "theorem", "const_smul", ["has_strict_deriv_at"]], ["del", "theorem", "const_sub", ["has_strict_deriv_at"]], ["del", "theorem", "div", ["has_strict_deriv_at"]], ["del", "theorem", "div_const", ["has_strict_deriv_at"]], ["del", "theorem", "has_deriv_at", ["has_strict_deriv_at"]], ["del", "theorem", "has_strict_fderiv_at_equiv", ["has_strict_deriv_at"]], ["del", "theorem", "mul", ["has_strict_deriv_at"]], ["del", "theorem", "mul_const", ["has_strict_deriv_at"]], ["del", "theorem", "neg", ["has_strict_deriv_at"]], ["del", "theorem", "of_local_left_inverse", ["has_strict_deriv_at"]], ["del", "theorem", "prod", ["has_strict_deriv_at"]], ["del", "theorem", "scomp", ["has_strict_deriv_at"]], ["del", "theorem", "smul", ["has_strict_deriv_at"]], ["del", "theorem", "smul_const", ["has_strict_deriv_at"]], ["del", "theorem", "sub", ["has_strict_deriv_at"]], ["del", "theorem", "sum", ["has_strict_deriv_at"]], ["del", "def", "has_strict_deriv_at", []], ["del", "theorem", "has_strict_deriv_at_const", []], ["del", "theorem", "has_strict_deriv_at_id", []], ["del", "theorem", "has_strict_deriv_at_iff_has_strict_fderiv_at", []], ["del", "theorem", "has_strict_deriv_at_inv", []], ["del", "theorem", "has_strict_deriv_at_neg", []], ["del", "theorem", "has_strict_deriv_at_pi", []], ["del", "theorem", "has_strict_deriv_at_pow", []], ["del", "theorem", "has_strict_deriv_at_zpow", []], ["del", "theorem", "comp_has_strict_deriv_at", ["has_strict_fderiv_at"]], ["del", "theorem", "has_strict_fderiv_at_iff_has_strict_deriv_at", []], ["del", "theorem", "iter_deriv_inv'", []], ["del", "theorem", "iter_deriv_inv", []], ["del", "theorem", "iter_deriv_pow'", []], ["del", "theorem", "iter_deriv_pow", []], ["del", "theorem", "iter_deriv_zpow'", []], ["del", "theorem", "iter_deriv_zpow", []], ["del", "theorem", "has_deriv_at_symm", ["local_homeomorph"]], ["del", "theorem", "has_strict_deriv_at_symm", ["local_homeomorph"]], ["del", "theorem", "not_differentiable_at_of_local_left_inverse_has_deriv_at_zero", []], ["del", "theorem", "not_differentiable_within_at_of_local_left_inverse_has_deriv_within_at_zero", []], ["del", "theorem", "support_deriv_subset", []], ["del", "theorem", "eq_deriv", ["unique_diff_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/add.lean", "changes": [["add", "theorem", "neg'", ["deriv"]], ["add", "theorem", "neg", ["deriv"]], ["add", "theorem", "deriv_add", []], ["add", "theorem", "deriv_add_const'", []], ["add", "theorem", "deriv_add_const", []], ["add", "theorem", "deriv_const_add'", []], ["add", "theorem", "deriv_const_add", []], ["add", "theorem", "deriv_const_sub", []], ["add", "theorem", "deriv_neg''", []], ["add", "theorem", "deriv_neg'", []], ["add", "theorem", "deriv_neg", []], ["add", "theorem", "deriv_sub", []], ["add", "theorem", "deriv_sub_const", []], ["add", "theorem", "deriv_sum", []], ["add", "theorem", "neg", ["deriv_within"]], ["add", "theorem", "deriv_within_add", []], ["add", "theorem", "deriv_within_add_const", []], ["add", "theorem", "deriv_within_const_add", []], ["add", "theorem", "deriv_within_const_sub", []], ["add", "theorem", "deriv_within_neg", []], ["add", "theorem", "deriv_within_sub", []], ["add", "theorem", "deriv_within_sub_const", []], ["add", "theorem", "deriv_within_sum", []], ["add", "theorem", "differentiable_neg", []], ["add", "theorem", "differentiable_on_neg", []], ["add", "theorem", "add", ["has_deriv_at"]], ["add", "theorem", "add_const", ["has_deriv_at"]], ["add", "theorem", "const_add", ["has_deriv_at"]], ["add", "theorem", "const_sub", ["has_deriv_at"]], ["add", "theorem", "neg", ["has_deriv_at"]], ["add", "theorem", "sub", ["has_deriv_at"]], ["add", "theorem", "sub_const", ["has_deriv_at"]], ["add", "theorem", "sum", ["has_deriv_at"]], ["add", "theorem", "add", ["has_deriv_at_filter"]], ["add", "theorem", "add_const", ["has_deriv_at_filter"]], ["add", "theorem", "const_add", ["has_deriv_at_filter"]], ["add", "theorem", "const_sub", ["has_deriv_at_filter"]], ["add", "theorem", "neg", ["has_deriv_at_filter"]], ["add", "theorem", "sub", ["has_deriv_at_filter"]], ["add", "theorem", "sub_const", ["has_deriv_at_filter"]], ["add", "theorem", "sum", ["has_deriv_at_filter"]], ["add", "theorem", "has_deriv_at_filter_neg", []], ["add", "theorem", "has_deriv_at_neg'", []], ["add", "theorem", "has_deriv_at_neg", []], ["add", "theorem", "add", ["has_deriv_within_at"]], ["add", "theorem", "add_const", ["has_deriv_within_at"]], ["add", "theorem", "const_add", ["has_deriv_within_at"]], ["add", "theorem", "const_sub", ["has_deriv_within_at"]], ["add", "theorem", "neg", ["has_deriv_within_at"]], ["add", "theorem", "sub", ["has_deriv_within_at"]], ["add", "theorem", "sub_const", ["has_deriv_within_at"]], ["add", "theorem", "sum", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_neg", []], ["add", "theorem", "add", ["has_strict_deriv_at"]], ["add", "theorem", "const_sub", ["has_strict_deriv_at"]], ["add", "theorem", "neg", ["has_strict_deriv_at"]], ["add", "theorem", "sub", ["has_strict_deriv_at"]], ["add", "theorem", "sum", ["has_strict_deriv_at"]], ["add", "theorem", "has_strict_deriv_at_neg", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/basic.lean", "changes": [["add", "def", "deriv", []], ["add", "theorem", "deriv_const'", []], ["add", "theorem", "deriv_const", []], ["add", "theorem", "deriv_eq", []], ["add", "theorem", "deriv_fderiv", []], ["add", "theorem", "deriv_id''", []], ["add", "theorem", "deriv_id'", []], ["add", "theorem", "deriv_id", []], ["add", "theorem", "deriv_mem_iff", []], ["add", "def", "deriv_within", []], ["add", "theorem", "deriv_within_Ioi_eq_Ici", []], ["add", "theorem", "deriv_within_congr", []], ["add", "theorem", "deriv_within_congr_set'", []], ["add", "theorem", "deriv_within_congr_set", []], ["add", "theorem", "deriv_within_const", []], ["add", "theorem", "deriv_within_fderiv_within", []], ["add", "theorem", "deriv_within_id", []], ["add", "theorem", "deriv_within_inter", []], ["add", "theorem", "deriv_within_mem_iff", []], ["add", "theorem", "deriv_within_of_mem", []], ["add", "theorem", "deriv_within_of_open", []], ["add", "theorem", "deriv_within_subset", []], ["add", "theorem", "deriv_within_univ", []], ["add", "theorem", "deriv_within_zero_of_not_differentiable_within_at", []], ["add", "theorem", "deriv_zero_of_not_differentiable_at", []], ["add", "theorem", "deriv_within", ["differentiable_at"]], ["add", "theorem", "has_deriv_at", ["differentiable_at"]], ["add", "theorem", "differentiable_at_of_deriv_ne_zero", []], ["add", "theorem", "has_deriv_at", ["differentiable_on"]], ["add", "theorem", "has_deriv_within_at", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_Ioi_iff_Ici", []], ["add", "theorem", "differentiable_within_at_of_deriv_within_ne_zero", []], ["add", "theorem", "fderiv_deriv", []], ["add", "theorem", "fderiv_within_deriv_within", []], ["add", "theorem", "deriv_eq", ["filter", "eventually_eq"]], ["add", "theorem", "deriv_within_eq", ["filter", "eventually_eq"]], ["add", "theorem", "has_deriv_at_filter_iff", ["filter", "eventually_eq"]], ["add", "theorem", "congr_of_eventually_eq", ["has_deriv_at"]], ["add", "theorem", "continuous_at", ["has_deriv_at"]], ["add", "theorem", "deriv", ["has_deriv_at"]], ["add", "theorem", "differentiable_at", ["has_deriv_at"]], ["add", "theorem", "has_deriv_at_filter", ["has_deriv_at"]], ["add", "theorem", "has_deriv_within_at", ["has_deriv_at"]], ["add", "theorem", "unique", ["has_deriv_at"]], ["add", "def", "has_deriv_at", []], ["add", "theorem", "has_deriv_at_const", []], ["add", "theorem", "has_deriv_at_deriv_iff", []], ["add", "theorem", "congr_of_eventually_eq", ["has_deriv_at_filter"]], ["add", "theorem", "is_O_sub", ["has_deriv_at_filter"]], ["add", "theorem", "is_O_sub_rev", ["has_deriv_at_filter"]], ["add", "theorem", "mono", ["has_deriv_at_filter"]], ["add", "theorem", "tendsto_nhds", ["has_deriv_at_filter"]], ["add", "def", "has_deriv_at_filter", []], ["add", "theorem", "has_deriv_at_filter_const", []], ["add", "theorem", "has_deriv_at_filter_id", []], ["add", "theorem", "has_deriv_at_filter_iff_is_o", []], ["add", "theorem", "has_deriv_at_filter_iff_tendsto", []], ["add", "theorem", "has_deriv_at_id'", []], ["add", "theorem", "has_deriv_at_id", []], ["add", "theorem", "has_deriv_at_iff_has_fderiv_at", []], ["add", "theorem", "has_deriv_at_iff_is_o", []], ["add", "theorem", "has_deriv_at_iff_is_o_nhds_zero", []], ["add", "theorem", "has_deriv_at_iff_tendsto", []], ["add", "theorem", "Ioi_iff_Ioo", ["has_deriv_within_at"]], ["add", "theorem", "congr", ["has_deriv_within_at"]], ["add", "theorem", "congr_mono", ["has_deriv_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["has_deriv_within_at"]], ["add", "theorem", "congr_of_eventually_eq_of_mem", ["has_deriv_within_at"]], ["add", "theorem", "congr_of_mem", ["has_deriv_within_at"]], ["add", "theorem", "continuous_within_at", ["has_deriv_within_at"]], ["add", "theorem", "deriv_eq_zero", ["has_deriv_within_at"]], ["add", "theorem", "deriv_within", ["has_deriv_within_at"]], ["add", "theorem", "differentiable_within_at", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_at", ["has_deriv_within_at"]], ["add", "theorem", "has_fderiv_within_at", ["has_deriv_within_at"]], ["add", "theorem", "mono", ["has_deriv_within_at"]], ["add", "theorem", "mono_of_mem", ["has_deriv_within_at"]], ["add", "theorem", "nhds_within", ["has_deriv_within_at"]], ["add", "theorem", "union", ["has_deriv_within_at"]], ["add", "def", "has_deriv_within_at", []], ["add", "theorem", "has_deriv_within_at_Iio_iff_Iic", []], ["add", "theorem", "has_deriv_within_at_Ioi_iff_Ici", []], ["add", "theorem", "has_deriv_within_at_congr_set'", []], ["add", "theorem", "has_deriv_within_at_congr_set", []], ["add", "theorem", "has_deriv_within_at_const", []], ["add", "theorem", "has_deriv_within_at_deriv_within_iff", []], ["add", "theorem", "has_deriv_within_at_diff_singleton", []], ["add", "theorem", "has_deriv_within_at_id", []], ["add", "theorem", "has_deriv_within_at_iff_has_fderiv_within_at", []], ["add", "theorem", "has_deriv_within_at_iff_is_o", []], ["add", "theorem", "has_deriv_within_at_iff_tendsto", []], ["add", "theorem", "has_deriv_within_at_inter'", []], ["add", "theorem", "has_deriv_within_at_inter", []], ["add", "theorem", "has_deriv_within_at_univ", []], ["add", "theorem", "has_deriv_at", ["has_fderiv_at"]], ["add", "theorem", "has_deriv_at_filter", ["has_fderiv_at_filter"]], ["add", "theorem", "has_fderiv_at_filter_iff_has_deriv_at_filter", []], ["add", "theorem", "has_fderiv_at_iff_has_deriv_at", []], ["add", "theorem", "has_deriv_within_at", ["has_fderiv_within_at"]], ["add", "theorem", "has_fderiv_within_at_iff_has_deriv_within_at", []], ["add", "theorem", "has_deriv_at", ["has_strict_deriv_at"]], ["add", "def", "has_strict_deriv_at", []], ["add", "theorem", "has_strict_deriv_at_const", []], ["add", "theorem", "has_strict_deriv_at_id", []], ["add", "theorem", "has_strict_deriv_at_iff_has_strict_fderiv_at", []], ["add", "theorem", "has_strict_fderiv_at_iff_has_strict_deriv_at", []], ["add", "theorem", "eq_deriv", ["unique_diff_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/comp.lean", "changes": [["add", "theorem", "comp", ["deriv"]], ["add", "theorem", "scomp", ["deriv"]], ["add", "theorem", "comp", ["deriv_within"]], ["add", "theorem", "scomp", ["deriv_within"]], ["add", "theorem", "comp_deriv", ["fderiv"]], ["add", "theorem", "comp_deriv_within", ["fderiv_within"]], ["add", "theorem", "comp", ["has_deriv_at"]], ["add", "theorem", "comp_has_deriv_within_at", ["has_deriv_at"]], ["add", "theorem", "comp_has_fderiv_at", ["has_deriv_at"]], ["add", "theorem", "comp_has_fderiv_within_at", ["has_deriv_at"]], ["add", "theorem", "scomp", ["has_deriv_at"]], ["add", "theorem", "scomp_has_deriv_within_at", ["has_deriv_at"]], ["add", "theorem", "comp", ["has_deriv_at_filter"]], ["add", "theorem", "comp_has_fderiv_at_filter", ["has_deriv_at_filter"]], ["add", "theorem", "scomp", ["has_deriv_at_filter"]], ["add", "theorem", "comp", ["has_deriv_within_at"]], ["add", "theorem", "comp_has_fderiv_within_at", ["has_deriv_within_at"]], ["add", "theorem", "scomp", ["has_deriv_within_at"]], ["add", "theorem", "scomp_has_deriv_at", ["has_deriv_within_at"]], ["add", "theorem", "comp_has_deriv_at", ["has_fderiv_at"]], ["add", "theorem", "comp_has_deriv_within_at", ["has_fderiv_at"]], ["add", "theorem", "comp_has_deriv_within_at", ["has_fderiv_within_at"]], ["add", "theorem", "comp", ["has_strict_deriv_at"]], ["add", "theorem", "comp_has_strict_fderiv_at", ["has_strict_deriv_at"]], ["add", "theorem", "scomp", ["has_strict_deriv_at"]], ["add", "theorem", "comp_has_strict_deriv_at", ["has_strict_fderiv_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/inv.lean", "changes": [["add", "theorem", "deriv_div", []], ["add", "theorem", "deriv_inv''", []], ["add", "theorem", "deriv_inv'", []], ["add", "theorem", "deriv_inv", []], ["add", "theorem", "deriv_within_div", []], ["add", "theorem", "deriv_within_inv'", []], ["add", "theorem", "deriv_within_inv", []], ["add", "theorem", "div", ["differentiable"]], ["add", "theorem", "inv", ["differentiable"]], ["add", "theorem", "div", ["differentiable_at"]], ["add", "theorem", "inv", ["differentiable_at"]], ["add", "theorem", "differentiable_at_inv", []], ["add", "theorem", "div", ["differentiable_on"]], ["add", "theorem", "inv", ["differentiable_on"]], ["add", "theorem", "differentiable_on_inv", []], ["add", "theorem", "div", ["differentiable_within_at"]], ["add", "theorem", "inv", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_inv", []], ["add", "theorem", "fderiv_inv", []], ["add", "theorem", "fderiv_within_inv", []], ["add", "theorem", "div", ["has_deriv_at"]], ["add", "theorem", "inv", ["has_deriv_at"]], ["add", "theorem", "has_deriv_at_inv", []], ["add", "theorem", "div", ["has_deriv_within_at"]], ["add", "theorem", "inv", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_inv", []], ["add", "theorem", "has_fderiv_at_inv", []], ["add", "theorem", "has_fderiv_within_at_inv", []], ["add", "theorem", "div", ["has_strict_deriv_at"]], ["add", "theorem", "has_strict_deriv_at_inv", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/inverse.lean", "changes": [["add", "theorem", "eventually_ne", ["has_deriv_at"]], ["add", "theorem", "has_fderiv_at_equiv", ["has_deriv_at"]], ["add", "theorem", "of_local_left_inverse", ["has_deriv_at"]], ["add", "theorem", "tendsto_punctured_nhds", ["has_deriv_at"]], ["add", "theorem", "has_strict_fderiv_at_equiv", ["has_strict_deriv_at"]], ["add", "theorem", "of_local_left_inverse", ["has_strict_deriv_at"]], ["add", "theorem", "has_deriv_at_symm", ["local_homeomorph"]], ["add", "theorem", "has_strict_deriv_at_symm", ["local_homeomorph"]], ["add", "theorem", "not_differentiable_at_of_local_left_inverse_has_deriv_at_zero", []], ["add", "theorem", "not_differentiable_within_at_of_local_left_inverse_has_deriv_within_at_zero", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/linear.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/mul.lean", "changes": [["add", "theorem", "deriv_clm_apply", []], ["add", "theorem", "deriv_clm_comp", []], ["add", "theorem", "deriv_const_mul", []], ["add", "theorem", "deriv_const_mul_field'", []], ["add", "theorem", "deriv_const_mul_field", []], ["add", "theorem", "deriv_const_smul", []], ["add", "theorem", "deriv_div_const", []], ["add", "theorem", "deriv_mul", []], ["add", "theorem", "deriv_mul_const", []], ["add", "theorem", "deriv_mul_const_field'", []], ["add", "theorem", "deriv_mul_const_field", []], ["add", "theorem", "deriv_smul", []], ["add", "theorem", "deriv_smul_const", []], ["add", "theorem", "deriv_within_clm_apply", []], ["add", "theorem", "deriv_within_clm_comp", []], ["add", "theorem", "deriv_within_const_mul", []], ["add", "theorem", "deriv_within_const_smul", []], ["add", "theorem", "deriv_within_div_const", []], ["add", "theorem", "deriv_within_mul", []], ["add", "theorem", "deriv_within_mul_const", []], ["add", "theorem", "deriv_within_smul", []], ["add", "theorem", "deriv_within_smul_const", []], ["add", "theorem", "div_const", ["differentiable"]], ["add", "theorem", "div_const", ["differentiable_at"]], ["add", "theorem", "div_const", ["differentiable_on"]], ["add", "theorem", "div_const", ["differentiable_within_at"]], ["add", "theorem", "clm_apply", ["has_deriv_at"]], ["add", "theorem", "clm_comp", ["has_deriv_at"]], ["add", "theorem", "const_mul", ["has_deriv_at"]], ["add", "theorem", "const_smul", ["has_deriv_at"]], ["add", "theorem", "div_const", ["has_deriv_at"]], ["add", "theorem", "mul", ["has_deriv_at"]], ["add", "theorem", "mul_const", ["has_deriv_at"]], ["add", "theorem", "smul", ["has_deriv_at"]], ["add", "theorem", "smul_const", ["has_deriv_at"]], ["add", "theorem", "const_smul", ["has_deriv_at_filter"]], ["add", "theorem", "has_deriv_at_mul_const", []], ["add", "theorem", "clm_apply", ["has_deriv_within_at"]], ["add", "theorem", "clm_comp", ["has_deriv_within_at"]], ["add", "theorem", "const_mul", ["has_deriv_within_at"]], ["add", "theorem", "const_smul", ["has_deriv_within_at"]], ["add", "theorem", "div_const", ["has_deriv_within_at"]], ["add", "theorem", "mul", ["has_deriv_within_at"]], ["add", "theorem", "mul_const", ["has_deriv_within_at"]], ["add", "theorem", "smul", ["has_deriv_within_at"]], ["add", "theorem", "smul_const", ["has_deriv_within_at"]], ["add", "theorem", "clm_apply", ["has_strict_deriv_at"]], ["add", "theorem", "clm_comp", ["has_strict_deriv_at"]], ["add", "theorem", "const_mul", ["has_strict_deriv_at"]], ["add", "theorem", "const_smul", ["has_strict_deriv_at"]], ["add", "theorem", "div_const", ["has_strict_deriv_at"]], ["add", "theorem", "mul", ["has_strict_deriv_at"]], ["add", "theorem", "mul_const", ["has_strict_deriv_at"]], ["add", "theorem", "smul", ["has_strict_deriv_at"]], ["add", "theorem", "smul_const", ["has_strict_deriv_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/polynomial.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/pow.lean", "changes": [["add", "theorem", "deriv_pow''", []], ["add", "theorem", "deriv_pow'", []], ["add", "theorem", "deriv_pow", []], ["add", "theorem", "deriv_within_pow'", []], ["add", "theorem", "deriv_within_pow", []], ["add", "theorem", "differentiable_at_pow", []], ["add", "theorem", "differentiable_on_pow", []], ["add", "theorem", "differentiable_pow", []], ["add", "theorem", "differentiable_within_at_pow", []], ["add", "theorem", "pow", ["has_deriv_at"]], ["add", "theorem", "has_deriv_at_pow", []], ["add", "theorem", "pow", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_pow", []], ["add", "theorem", "has_strict_deriv_at_pow", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/prod.lean", "changes": [["add", "theorem", "deriv_pi", []], ["add", "theorem", "deriv_within_pi", []], ["add", "theorem", "prod", ["has_deriv_at"]], ["add", "theorem", "prod", ["has_deriv_at_filter"]], ["add", "theorem", "has_deriv_at_filter_pi", []], ["add", "theorem", "has_deriv_at_pi", []], ["add", "theorem", "prod", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_pi", []], ["add", "theorem", "prod", ["has_strict_deriv_at"]], ["add", "theorem", "has_strict_deriv_at_pi", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/slope.lean", "changes": [["add", "theorem", "has_deriv_at_filter_iff_tendsto_slope", []], ["add", "theorem", "has_deriv_at_iff_tendsto_slope", []], ["add", "theorem", "liminf_right_norm_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "liminf_right_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "liminf_right_slope_norm_le", ["has_deriv_within_at"]], ["add", "theorem", "limsup_norm_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "limsup_slope_le'", ["has_deriv_within_at"]], ["add", "theorem", "limsup_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "limsup_slope_norm_le", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_iff_tendsto_slope'", []], ["add", "theorem", "has_deriv_within_at_iff_tendsto_slope", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/star.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/support.lean", "changes": [["add", "theorem", "deriv", ["has_compact_support"]], ["add", "theorem", "support_deriv_subset", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/deriv/zpow.lean", "changes": [["add", "theorem", "deriv_within_zpow", []], ["add", "theorem", "deriv_zpow'", []], ["add", "theorem", "deriv_zpow", []], ["add", "theorem", "zpow", ["differentiable"]], ["add", "theorem", "zpow", ["differentiable_at"]], ["add", "theorem", "differentiable_at_zpow", []], ["add", "theorem", "zpow", ["differentiable_on"]], ["add", "theorem", "differentiable_on_zpow", []], ["add", "theorem", "zpow", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_zpow", []], ["add", "theorem", "has_deriv_at_zpow", []], ["add", "theorem", "has_deriv_within_at_zpow", []], ["add", "theorem", "has_strict_deriv_at_zpow", []], ["add", "theorem", "iter_deriv_inv'", []], ["add", "theorem", "iter_deriv_inv", []], ["add", "theorem", "iter_deriv_pow'", []], ["add", "theorem", "iter_deriv_pow", []], ["add", "theorem", "iter_deriv_zpow'", []], ["add", "theorem", "iter_deriv_zpow", []]]}, {"oldPath": "src/analysis/calculus/diff_cont_on_cl.lean", "newPath": "src/analysis/calculus/diff_cont_on_cl.lean", "changes": []}, {"oldPath": "src/analysis/calculus/dslope.lean", "newPath": "src/analysis/calculus/dslope.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_analytic.lean", "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/monotone.lean", "newPath": "src/analysis/calculus/monotone.lean", "changes": []}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions/deriv.lean", "newPath": "src/analysis/convex/specific_functions/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/deriv.lean", "newPath": "src/analysis/special_functions/pow/deriv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/fund_thm_calculus.lean", "newPath": "src/measure_theory/integral/fund_thm_calculus.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/hermite/gaussian.lean", "newPath": "src/ring_theory/polynomial/hermite/gaussian.lean", "changes": []}, {"oldPath": "test/simp_command.lean", "newPath": "test/simp_command.lean", "changes": []}]}, {"timestamp": 1685211433, "sha": "13b0d72f", "message": "feat(measure_theory/function/l1_space): generalize multiplicative results to is_unit (#19073)\nThis generalization lets us use these lemmas for left- and right- multiplication by non-commutative normed rings.\nThis doesn't make it all the way to `integral_mul_const`, but it's a step in that direction.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["del", "theorem", "smul'", ["measure_theory", "has_finite_integral"]], ["mod", "theorem", "smul", ["measure_theory", "has_finite_integral"]], ["mod", "theorem", "has_finite_integral_smul_iff", ["measure_theory"]], ["mod", "theorem", "smul", ["measure_theory", "integrable"]], ["mod", "theorem", "smul_ess_sup", ["measure_theory", "integrable"]], ["mod", "theorem", "integrable_smul_iff", ["measure_theory"]], ["add", "theorem", "integrable_smul_iff", ["measure_theory", "is_unit"]]]}, {"oldPath": "src/measure_theory/integral/peak_function.lean", "newPath": "src/measure_theory/integral/peak_function.lean", "changes": []}]}, {"timestamp": 1685207012, "sha": "5a2df4cd", "message": "chore(measure_theory/function/simple_func_dense_lp): generalize typeclasses (#19111)\nLemmas like `to_Lp_smul` now apply for `normed_ring`s, not just `normed_field`s.", "changes": [{"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": []}]}, {"timestamp": 1685200644, "sha": "0b7c740e", "message": "chore(*): add mathlib4 synchronization comments (#19099)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.abelian`\n* `algebra.category.Group.colimits`\n* `algebra.category.Group.images`\n* `algebra.category.Module.abelian`\n* `algebra.category.Module.biproducts`\n* `algebra.category.Module.images`\n* `algebra.category.Ring.constructions`\n* `algebra.category.Ring.filtered_colimits`\n* `algebra.category.Ring.limits`\n* `algebra.module.graded_module`\n* `algebra.module.torsion`\n* `algebraic_geometry.presheafed_space.has_colimits`\n* `algebraic_geometry.prime_spectrum.maximal`\n* `algebraic_geometry.prime_spectrum.noetherian`\n* `algebraic_geometry.sheafed_space`\n* `analysis.box_integral.partition.filter`\n* `analysis.calculus.conformal.inner_product`\n* `analysis.calculus.conformal.normed_space`\n* `analysis.calculus.fderiv.bilinear`\n* `analysis.calculus.fderiv.mul`\n* `analysis.complex.arg`\n* `analysis.complex.conformal`\n* `analysis.complex.unit_disc.basic`\n* `analysis.convex.krein_milman`\n* `analysis.convex.specific_functions.basic`\n* `analysis.inner_product_space.basic`\n* `analysis.inner_product_space.conformal_linear_map`\n* `analysis.inner_product_space.dual`\n* `analysis.inner_product_space.orthogonal`\n* `analysis.inner_product_space.projection`\n* `analysis.inner_product_space.symmetric`\n* `analysis.locally_convex.abs_convex`\n* `analysis.locally_convex.weak_dual`\n* `analysis.mean_inequalities`\n* `analysis.mean_inequalities_pow`\n* `analysis.normed_space.dual`\n* `analysis.normed_space.hahn_banach.separation`\n* `analysis.normed_space.pi_Lp`\n* `analysis.normed_space.star.multiplier`\n* `analysis.normed_space.weak_dual`\n* `analysis.p_series`\n* `analysis.special_functions.pow.asymptotics`\n* `analysis.special_functions.pow.continuity`\n* `category_theory.abelian.injective`\n* `category_theory.abelian.injective_resolution`\n* `category_theory.abelian.projective`\n* `category_theory.abelian.right_derived`\n* `category_theory.preadditive.yoneda.limits`\n* `data.nat.squarefree`\n* `data.zmod.quotient`\n* `field_theory.ratfunc`\n* `geometry.euclidean.angle.unoriented.affine`\n* `geometry.euclidean.angle.unoriented.basic`\n* `geometry.euclidean.angle.unoriented.conformal`\n* `geometry.euclidean.basic`\n* `geometry.euclidean.inversion`\n* `geometry.manifold.conformal_groupoid`\n* `group_theory.exponent`\n* `group_theory.p_group`\n* `group_theory.specific_groups.cyclic`\n* `group_theory.specific_groups.dihedral`\n* `group_theory.torsion`\n* `linear_algebra.free_module.ideal_quotient`\n* `linear_algebra.matrix.bilinear_form`\n* `linear_algebra.matrix.sesquilinear_form`\n* `measure_theory.function.egorov`\n* `measure_theory.function.special_functions.inner`\n* `measure_theory.function.strongly_measurable.inner`\n* `measure_theory.integral.mean_inequalities`\n* `model_theory.graph`\n* `model_theory.satisfiability`\n* `model_theory.types`\n* `model_theory.ultraproducts`\n* `number_theory.bernoulli`\n* `number_theory.padics.hensel`\n* `number_theory.padics.padic_integers`\n* `order.category.FinPartOrd`\n* `probability.probability_mass_function.constructions`\n* `ring_theory.adjoin.field`\n* `ring_theory.algebraic_independent`\n* `ring_theory.integral_domain`\n* `ring_theory.is_tensor_product`\n* `ring_theory.polynomial.dickson`\n* `topology.continuous_function.compact`\n* `topology.instances.complex`\n* `topology.metric_space.holder`\n* `topology.sheaves.functors`\n* `topology.sheaves.sheaf_condition.equalizer_products`\n* `topology.sheaves.sheaf_condition.pairwise_intersections`", "changes": [{"oldPath": "src/algebra/category/Group/abelian.lean", "newPath": "src/algebra/category/Group/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/biproducts.lean", "newPath": "src/algebra/category/Module/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/images.lean", "newPath": "src/algebra/category/Module/images.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/constructions.lean", "newPath": "src/algebra/category/Ring/constructions.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/filtered_colimits.lean", "newPath": "src/algebra/category/Ring/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/limits.lean", "newPath": "src/algebra/category/Ring/limits.lean", "changes": []}, {"oldPath": "src/algebra/module/graded_module.lean", "newPath": "src/algebra/module/graded_module.lean", "changes": []}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/maximal.lean", "newPath": "src/algebraic_geometry/prime_spectrum/maximal.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/noetherian.lean", "newPath": "src/algebraic_geometry/prime_spectrum/noetherian.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/filter.lean", "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": []}, {"oldPath": "src/analysis/calculus/conformal/inner_product.lean", "newPath": "src/analysis/calculus/conformal/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/calculus/conformal/normed_space.lean", "newPath": "src/analysis/calculus/conformal/normed_space.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/bilinear.lean", "newPath": "src/analysis/calculus/fderiv/bilinear.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/mul.lean", "newPath": "src/analysis/calculus/fderiv/mul.lean", "changes": []}, {"oldPath": "src/analysis/complex/arg.lean", "newPath": "src/analysis/complex/arg.lean", "changes": []}, {"oldPath": "src/analysis/complex/conformal.lean", "newPath": "src/analysis/complex/conformal.lean", "changes": []}, {"oldPath": "src/analysis/complex/unit_disc/basic.lean", "newPath": "src/analysis/complex/unit_disc/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/krein_milman.lean", "newPath": "src/analysis/convex/krein_milman.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions/basic.lean", "newPath": "src/analysis/convex/specific_functions/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "newPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/orthogonal.lean", "newPath": "src/analysis/inner_product_space/orthogonal.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/abs_convex.lean", "newPath": "src/analysis/locally_convex/abs_convex.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach/separation.lean", "newPath": "src/analysis/normed_space/hahn_banach/separation.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/multiplier.lean", "newPath": "src/analysis/normed_space/star/multiplier.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/asymptotics.lean", "newPath": "src/analysis/special_functions/pow/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/continuity.lean", "newPath": "src/analysis/special_functions/pow/continuity.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/injective.lean", "newPath": "src/category_theory/abelian/injective.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/injective_resolution.lean", "newPath": "src/category_theory/abelian/injective_resolution.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/right_derived.lean", "newPath": "src/category_theory/abelian/right_derived.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/yoneda/limits.lean", "newPath": "src/category_theory/preadditive/yoneda/limits.lean", "changes": []}, {"oldPath": "src/data/nat/squarefree.lean", "newPath": "src/data/nat/squarefree.lean", "changes": []}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/unoriented/affine.lean", "newPath": "src/geometry/euclidean/angle/unoriented/affine.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/unoriented/basic.lean", "newPath": "src/geometry/euclidean/angle/unoriented/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/unoriented/conformal.lean", "newPath": "src/geometry/euclidean/angle/unoriented/conformal.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/inversion.lean", "newPath": "src/geometry/euclidean/inversion.lean", "changes": []}, {"oldPath": "src/geometry/manifold/conformal_groupoid.lean", "newPath": "src/geometry/manifold/conformal_groupoid.lean", "changes": []}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": []}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": []}, {"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/ideal_quotient.lean", "newPath": "src/linear_algebra/free_module/ideal_quotient.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/bilinear_form.lean", "newPath": "src/linear_algebra/matrix/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/sesquilinear_form.lean", "newPath": "src/linear_algebra/matrix/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/measure_theory/function/egorov.lean", "newPath": "src/measure_theory/function/egorov.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/inner.lean", "newPath": "src/measure_theory/function/special_functions/inner.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable/inner.lean", "newPath": "src/measure_theory/function/strongly_measurable/inner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/model_theory/graph.lean", "newPath": "src/model_theory/graph.lean", "changes": []}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": []}, {"oldPath": "src/model_theory/types.lean", "newPath": "src/model_theory/types.lean", "changes": []}, {"oldPath": "src/model_theory/ultraproducts.lean", "newPath": "src/model_theory/ultraproducts.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/order/category/FinPartOrd.lean", "newPath": "src/order/category/FinPartOrd.lean", "changes": []}, {"oldPath": "src/probability/probability_mass_function/constructions.lean", "newPath": "src/probability/probability_mass_function/constructions.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/field.lean", "newPath": "src/ring_theory/adjoin/field.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/is_tensor_product.lean", "newPath": "src/ring_theory/is_tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/metric_space/holder.lean", "newPath": "src/topology/metric_space/holder.lean", "changes": []}, {"oldPath": "src/topology/sheaves/functors.lean", "newPath": "src/topology/sheaves/functors.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1685186183, "sha": "c4015acc", "message": "refactor(measure_theory/function/lp_space): split file (#19112)\nThis is the longest file that remains to port, and there is an obvious split to be made.\nThe new file is called `measure_theory.function/lp_seminorm`.\nOther than the module docstrings, which have been tweaked to represent the split, the contents of the new file is moved without modification from the old one.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/function/lp_seminorm.lean", "changes": [["add", "theorem", "mem_ℒp_map_measure_iff", ["measurable_embedding"]], ["add", "theorem", "snorm_ess_sup_map_measure", ["measurable_embedding"]], ["add", "theorem", "snorm_map_measure", ["measurable_embedding"]], ["add", "theorem", "mem_ℒp_map_measure_iff", ["measurable_equiv"]], ["add", "def", "Lp_add_const", ["measure_theory"]], ["add", "theorem", "Lp_add_const_lt_top", ["measure_theory"]], ["add", "theorem", "Lp_add_const_of_one_le", ["measure_theory"]], ["add", "theorem", "Lp_add_const_zero", ["measure_theory"]], ["add", "theorem", "ae_bdd_liminf_at_top_of_snorm_bdd", ["measure_theory"]], ["add", "theorem", "ae_bdd_liminf_at_top_rpow_of_snorm_bdd", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_of_snorm'_eq_zero", ["measure_theory"]], ["add", "theorem", "ae_le_snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "coe_nnnorm_ae_le_snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "ess_sup_trim", ["measure_theory"]], ["add", "theorem", "exists_Lp_half", ["measure_theory"]], ["add", "theorem", "limsup_trim", ["measure_theory"]], ["add", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm'", ["measure_theory"]], ["add", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm'_lt_top", ["measure_theory"]], ["add", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm_lt_top", ["measure_theory"]], ["add", "theorem", "meas_ge_le_mul_pow_snorm", ["measure_theory"]], ["add", "theorem", "meas_snorm_ess_sup_lt", ["measure_theory"]], ["add", "theorem", "add", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "ae_eq", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "congr_norm", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "const_mul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "const_smul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "im", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "left_of_add_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_of_exponent_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mono'", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mono_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "neg", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "norm", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_bound", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_le_mul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_measure_le_smul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_nnnorm_le_mul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "re", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "restrict", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "right_of_add_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "smul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "smul_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "smul_of_top_left", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "smul_of_top_right", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_lt_top", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_ne_top", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "sub", ["measure_theory", "mem_ℒp"]], ["add", "def", "mem_ℒp", ["measure_theory"]], ["add", "theorem", "mem_ℒp_congr_ae", ["measure_theory"]], ["add", "theorem", "mem_ℒp_congr_norm", ["measure_theory"]], ["add", "theorem", "mem_ℒp_const", ["measure_theory"]], ["add", "theorem", "mem_ℒp_const_iff", ["measure_theory"]], ["add", "theorem", "mem_ℒp_finset_sum'", ["measure_theory"]], ["add", "theorem", "mem_ℒp_finset_sum", ["measure_theory"]], ["add", "theorem", "mem_ℒp_map_measure_iff", ["measure_theory"]], ["add", "theorem", "mem_ℒp_neg_iff", ["measure_theory"]], ["add", "theorem", "mem_ℒp_norm_iff", ["measure_theory"]], ["add", "theorem", "mem_ℒp_of_mem_ℒp_trim", ["measure_theory"]], ["add", "theorem", "mem_ℒp_top_const", ["measure_theory"]], ["add", "theorem", "mem_ℒp_top_of_bound", ["measure_theory"]], ["add", "theorem", "mem_ℒp_zero_iff_ae_strongly_measurable", ["measure_theory"]], ["add", "theorem", "mul_meas_ge_le_pow_snorm'", ["measure_theory"]], ["add", "theorem", "mul_meas_ge_le_pow_snorm", ["measure_theory"]], ["add", "theorem", "pow_mul_meas_ge_le_snorm", ["measure_theory"]], ["add", "def", "snorm'", ["measure_theory"]], ["add", "theorem", "snorm'_add_le", ["measure_theory"]], ["add", "theorem", "snorm'_add_le_of_le_one", ["measure_theory"]], ["add", "theorem", "snorm'_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm'_congr_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm'_congr_norm_ae", ["measure_theory"]], ["add", "theorem", "snorm'_const'", ["measure_theory"]], ["add", "theorem", "snorm'_const", ["measure_theory"]], ["add", "theorem", "snorm'_const_of_is_probability_measure", ["measure_theory"]], ["add", "theorem", "snorm'_const_smul", ["measure_theory"]], ["add", "theorem", "snorm'_const_smul_le", ["measure_theory"]], ["add", "theorem", "snorm'_eq_zero_iff", ["measure_theory"]], ["add", "theorem", "snorm'_eq_zero_of_ae_zero'", ["measure_theory"]], ["add", "theorem", "snorm'_eq_zero_of_ae_zero", ["measure_theory"]], ["add", "theorem", "snorm'_exponent_zero", ["measure_theory"]], ["add", "theorem", "snorm'_le_nnreal_smul_snorm'_of_ae_le_mul", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm'_mul_rpow_measure_univ", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm'_mul_snorm'", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm'_of_exponent_le", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm_ess_sup_mul_rpow_measure_univ", ["measure_theory"]], ["add", "theorem", "snorm'_lt_top_of_snorm'_lt_top_of_exponent_le", ["measure_theory"]], ["add", "theorem", "snorm'_measure_zero_of_exponent_zero", ["measure_theory"]], ["add", "theorem", "snorm'_measure_zero_of_neg", ["measure_theory"]], ["add", "theorem", "snorm'_measure_zero_of_pos", ["measure_theory"]], ["add", "theorem", "snorm'_mono_ae", ["measure_theory"]], ["add", "theorem", "snorm'_mono_measure", ["measure_theory"]], ["add", "theorem", "snorm'_mono_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm'_neg", ["measure_theory"]], ["add", "theorem", "snorm'_norm", ["measure_theory"]], ["add", "theorem", "snorm'_norm_rpow", ["measure_theory"]], ["add", "theorem", "snorm'_smul_le_mul_snorm'", ["measure_theory"]], ["add", "theorem", "snorm'_smul_measure", ["measure_theory"]], ["add", "theorem", "snorm'_sum_le", ["measure_theory"]], ["add", "theorem", "snorm'_trim", ["measure_theory"]], ["add", "theorem", "snorm'_zero'", ["measure_theory"]], ["add", "theorem", "snorm'_zero", ["measure_theory"]], ["add", "def", "snorm", ["measure_theory"]], ["add", "theorem", "snorm_add_le'", ["measure_theory"]], ["add", "theorem", "snorm_add_le", ["measure_theory"]], ["add", "theorem", "snorm_add_lt_top", ["measure_theory"]], ["add", "theorem", "snorm_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm_congr_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm_congr_norm_ae", ["measure_theory"]], ["add", "theorem", "snorm_const'", ["measure_theory"]], ["add", "theorem", "snorm_const", ["measure_theory"]], ["add", "theorem", "snorm_const_lt_top_iff", ["measure_theory"]], ["add", "theorem", "snorm_const_smul", ["measure_theory"]], ["add", "theorem", "snorm_const_smul_le", ["measure_theory"]], ["add", "theorem", "snorm_eq_lintegral_rpow_nnnorm", ["measure_theory"]], ["add", "theorem", "snorm_eq_snorm'", ["measure_theory"]], ["add", "theorem", "snorm_eq_zero_and_zero_of_ae_le_mul_neg", ["measure_theory"]], ["add", "theorem", "snorm_eq_zero_iff", ["measure_theory"]], ["add", "def", "snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_add_le", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_const", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_const_smul", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_const_smul_le", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_eq_zero_iff", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_le_nnreal_smul_snorm_ess_sup_of_ae_le_mul", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_le_of_ae_bound", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_le_of_ae_nnnorm_bound", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_lt_top_of_ae_bound", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_lt_top_of_ae_nnnorm_bound", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_map_measure", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_measure_zero", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_mono_measure", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_mono_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_smul_measure", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_trim", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_zero", ["measure_theory"]], ["add", "theorem", "snorm_exponent_top", ["measure_theory"]], ["add", "theorem", "snorm_exponent_zero", ["measure_theory"]], ["add", "theorem", "snorm_indicator_ge_of_bdd_below", ["measure_theory"]], ["add", "theorem", "snorm_le_add_measure_left", ["measure_theory"]], ["add", "theorem", "snorm_le_add_measure_right", ["measure_theory"]], ["add", "theorem", "snorm_le_mul_snorm_of_ae_le_mul", ["measure_theory"]], ["add", "theorem", "snorm_le_nnreal_smul_snorm_of_ae_le_mul", ["measure_theory"]], ["add", "theorem", "snorm_le_of_ae_bound", ["measure_theory"]], ["add", "theorem", "snorm_le_of_ae_nnnorm_bound", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_mul_rpow_measure_univ", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_mul_snorm'_of_norm", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_mul_snorm_of_nnnorm", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_mul_snorm_top", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_of_exponent_le", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_top_mul_snorm", ["measure_theory"]], ["add", "theorem", "snorm_lt_top_iff_lintegral_rpow_nnnorm_lt_top", ["measure_theory"]], ["add", "theorem", "snorm_map_measure", ["measure_theory"]], ["add", "theorem", "snorm_measure_zero", ["measure_theory"]], ["add", "theorem", "snorm_mono", ["measure_theory"]], ["add", "theorem", "snorm_mono_ae", ["measure_theory"]], ["add", "theorem", "snorm_mono_ae_real", ["measure_theory"]], ["add", "theorem", "snorm_mono_measure", ["measure_theory"]], ["add", "theorem", "snorm_mono_nnnorm", ["measure_theory"]], ["add", "theorem", "snorm_mono_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm_mono_real", ["measure_theory"]], ["add", "theorem", "snorm_neg", ["measure_theory"]], ["add", "theorem", "snorm_norm", ["measure_theory"]], ["add", "theorem", "snorm_norm_rpow", ["measure_theory"]], ["add", "theorem", "snorm_one_add_measure", ["measure_theory"]], ["add", "theorem", "snorm_one_eq_lintegral_nnnorm", ["measure_theory"]], ["add", "theorem", "snorm_one_smul_measure", ["measure_theory"]], ["add", "theorem", "snorm_smul_le_mul_snorm", ["measure_theory"]], ["add", "theorem", "snorm_smul_le_snorm_mul_snorm_top", ["measure_theory"]], ["add", "theorem", "snorm_smul_le_snorm_top_mul_snorm", ["measure_theory"]], ["add", "theorem", "snorm_smul_measure_of_ne_top", ["measure_theory"]], ["add", "theorem", "snorm_smul_measure_of_ne_zero", ["measure_theory"]], ["add", "theorem", "snorm_sub_le'", ["measure_theory"]], ["add", "theorem", "snorm_sub_le", ["measure_theory"]], ["add", "theorem", "snorm_sum_le", ["measure_theory"]], ["add", "theorem", "snorm_trim", ["measure_theory"]], ["add", "theorem", "snorm_trim_ae", ["measure_theory"]], ["add", "theorem", "snorm_zero'", ["measure_theory"]], ["add", "theorem", "snorm_zero", ["measure_theory"]], ["add", "theorem", "zero_mem_ℒp'", ["measure_theory"]], ["add", "theorem", "zero_mem_ℒp", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["del", "theorem", "mem_ℒp_map_measure_iff", ["measurable_embedding"]], ["del", "theorem", "snorm_ess_sup_map_measure", ["measurable_embedding"]], ["del", "theorem", "snorm_map_measure", ["measurable_embedding"]], ["del", "theorem", "mem_ℒp_map_measure_iff", ["measurable_equiv"]], ["del", "def", "Lp_add_const", ["measure_theory"]], ["del", "theorem", "Lp_add_const_lt_top", ["measure_theory"]], ["del", "theorem", "Lp_add_const_of_one_le", ["measure_theory"]], ["del", "theorem", "Lp_add_const_zero", ["measure_theory"]], ["del", "theorem", "ae_bdd_liminf_at_top_of_snorm_bdd", ["measure_theory"]], ["del", "theorem", "ae_bdd_liminf_at_top_rpow_of_snorm_bdd", ["measure_theory"]], ["del", "theorem", "ae_eq_zero_of_snorm'_eq_zero", ["measure_theory"]], ["del", "theorem", "ae_le_snorm_ess_sup", ["measure_theory"]], ["del", "theorem", "coe_nnnorm_ae_le_snorm_ess_sup", ["measure_theory"]], ["del", "theorem", "ess_sup_trim", ["measure_theory"]], ["del", "theorem", "exists_Lp_half", ["measure_theory"]], ["del", "theorem", "limsup_trim", ["measure_theory"]], ["del", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm'", ["measure_theory"]], ["del", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm'_lt_top", ["measure_theory"]], ["del", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm_lt_top", ["measure_theory"]], ["del", "theorem", "meas_ge_le_mul_pow_snorm", ["measure_theory"]], ["del", "theorem", "meas_snorm_ess_sup_lt", ["measure_theory"]], ["del", "theorem", "add", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "ae_eq", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "ae_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "congr_norm", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "const_mul", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "const_smul", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "im", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "left_of_add_measure", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "mem_ℒp_of_exponent_le", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "mono'", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "mono_measure", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "neg", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "norm", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "of_bound", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "of_le", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "of_le_mul", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "of_measure_le_smul", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "of_nnnorm_le_mul", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "re", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "restrict", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "right_of_add_measure", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "smul", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "smul_measure", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "smul_of_top_left", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "smul_of_top_right", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "snorm_lt_top", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "snorm_ne_top", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "sub", ["measure_theory", "mem_ℒp"]], ["del", "def", "mem_ℒp", ["measure_theory"]], ["del", "theorem", "mem_ℒp_congr_ae", ["measure_theory"]], ["del", "theorem", "mem_ℒp_congr_norm", ["measure_theory"]], ["del", "theorem", "mem_ℒp_const", ["measure_theory"]], ["del", "theorem", "mem_ℒp_const_iff", ["measure_theory"]], ["del", "theorem", "mem_ℒp_finset_sum'", ["measure_theory"]], ["del", "theorem", "mem_ℒp_finset_sum", ["measure_theory"]], ["del", "theorem", "mem_ℒp_map_measure_iff", ["measure_theory"]], ["del", "theorem", "mem_ℒp_neg_iff", ["measure_theory"]], ["del", "theorem", "mem_ℒp_norm_iff", ["measure_theory"]], ["del", "theorem", "mem_ℒp_of_mem_ℒp_trim", ["measure_theory"]], ["del", "theorem", "mem_ℒp_top_const", ["measure_theory"]], ["del", "theorem", "mem_ℒp_top_of_bound", ["measure_theory"]], ["del", "theorem", "mem_ℒp_zero_iff_ae_strongly_measurable", ["measure_theory"]], ["del", "theorem", "mul_meas_ge_le_pow_snorm'", ["measure_theory"]], ["del", "theorem", "mul_meas_ge_le_pow_snorm", ["measure_theory"]], ["del", "theorem", "pow_mul_meas_ge_le_snorm", ["measure_theory"]], ["del", "def", "snorm'", ["measure_theory"]], ["del", "theorem", "snorm'_add_le", ["measure_theory"]], ["del", "theorem", "snorm'_add_le_of_le_one", ["measure_theory"]], ["del", "theorem", "snorm'_congr_ae", ["measure_theory"]], ["del", "theorem", "snorm'_congr_nnnorm_ae", ["measure_theory"]], ["del", "theorem", "snorm'_congr_norm_ae", ["measure_theory"]], ["del", "theorem", "snorm'_const'", ["measure_theory"]], ["del", "theorem", "snorm'_const", ["measure_theory"]], ["del", "theorem", "snorm'_const_of_is_probability_measure", ["measure_theory"]], ["del", "theorem", "snorm'_const_smul", ["measure_theory"]], ["del", "theorem", "snorm'_const_smul_le", ["measure_theory"]], ["del", "theorem", "snorm'_eq_zero_iff", ["measure_theory"]], ["del", "theorem", "snorm'_eq_zero_of_ae_zero'", ["measure_theory"]], ["del", "theorem", "snorm'_eq_zero_of_ae_zero", ["measure_theory"]], ["del", "theorem", "snorm'_exponent_zero", ["measure_theory"]], ["del", "theorem", "snorm'_le_nnreal_smul_snorm'_of_ae_le_mul", ["measure_theory"]], ["del", "theorem", "snorm'_le_snorm'_mul_rpow_measure_univ", ["measure_theory"]], ["del", "theorem", "snorm'_le_snorm'_mul_snorm'", ["measure_theory"]], ["del", "theorem", "snorm'_le_snorm'_of_exponent_le", ["measure_theory"]], ["del", "theorem", "snorm'_le_snorm_ess_sup", ["measure_theory"]], ["del", "theorem", "snorm'_le_snorm_ess_sup_mul_rpow_measure_univ", ["measure_theory"]], ["del", "theorem", "snorm'_lt_top_of_snorm'_lt_top_of_exponent_le", ["measure_theory"]], ["del", "theorem", "snorm'_measure_zero_of_exponent_zero", ["measure_theory"]], ["del", "theorem", "snorm'_measure_zero_of_neg", ["measure_theory"]], ["del", "theorem", "snorm'_measure_zero_of_pos", ["measure_theory"]], ["del", "theorem", "snorm'_mono_ae", ["measure_theory"]], ["del", "theorem", "snorm'_mono_measure", ["measure_theory"]], ["del", "theorem", "snorm'_mono_nnnorm_ae", ["measure_theory"]], ["del", "theorem", "snorm'_neg", ["measure_theory"]], ["del", "theorem", "snorm'_norm", ["measure_theory"]], ["del", "theorem", "snorm'_norm_rpow", ["measure_theory"]], ["del", "theorem", "snorm'_smul_le_mul_snorm'", ["measure_theory"]], ["del", "theorem", "snorm'_smul_measure", ["measure_theory"]], ["del", "theorem", "snorm'_sum_le", ["measure_theory"]], ["del", "theorem", "snorm'_trim", ["measure_theory"]], ["del", "theorem", "snorm'_zero'", ["measure_theory"]], ["del", "theorem", "snorm'_zero", ["measure_theory"]], ["del", "def", "snorm", ["measure_theory"]], ["del", "theorem", "snorm_add_le'", ["measure_theory"]], ["del", "theorem", "snorm_add_le", ["measure_theory"]], ["del", "theorem", "snorm_add_lt_top", ["measure_theory"]], ["del", "theorem", "snorm_congr_ae", ["measure_theory"]], ["del", "theorem", "snorm_congr_nnnorm_ae", ["measure_theory"]], ["del", "theorem", "snorm_congr_norm_ae", ["measure_theory"]], ["del", "theorem", "snorm_const'", ["measure_theory"]], ["del", "theorem", "snorm_const", ["measure_theory"]], ["del", "theorem", "snorm_const_lt_top_iff", ["measure_theory"]], ["del", "theorem", "snorm_const_smul", ["measure_theory"]], ["del", "theorem", "snorm_const_smul_le", ["measure_theory"]], ["del", "theorem", "snorm_eq_lintegral_rpow_nnnorm", ["measure_theory"]], ["del", "theorem", "snorm_eq_snorm'", ["measure_theory"]], ["del", "theorem", "snorm_eq_zero_and_zero_of_ae_le_mul_neg", ["measure_theory"]], ["del", "theorem", "snorm_eq_zero_iff", ["measure_theory"]], ["del", "def", "snorm_ess_sup", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_add_le", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_congr_ae", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_const", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_const_smul", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_const_smul_le", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_eq_zero_iff", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_le_nnreal_smul_snorm_ess_sup_of_ae_le_mul", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_le_of_ae_bound", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_le_of_ae_nnnorm_bound", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_lt_top_of_ae_bound", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_lt_top_of_ae_nnnorm_bound", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_map_measure", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_measure_zero", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_mono_measure", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_mono_nnnorm_ae", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_smul_measure", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_trim", ["measure_theory"]], ["del", "theorem", "snorm_ess_sup_zero", ["measure_theory"]], ["del", "theorem", "snorm_exponent_top", ["measure_theory"]], ["del", "theorem", "snorm_exponent_zero", ["measure_theory"]], ["del", "theorem", "snorm_indicator_ge_of_bdd_below", ["measure_theory"]], ["del", "theorem", "snorm_le_add_measure_left", ["measure_theory"]], ["del", "theorem", "snorm_le_add_measure_right", ["measure_theory"]], ["del", "theorem", "snorm_le_mul_snorm_of_ae_le_mul", ["measure_theory"]], ["del", "theorem", "snorm_le_nnreal_smul_snorm_of_ae_le_mul", ["measure_theory"]], ["del", "theorem", "snorm_le_of_ae_bound", ["measure_theory"]], ["del", "theorem", "snorm_le_of_ae_nnnorm_bound", ["measure_theory"]], ["del", "theorem", "snorm_le_snorm_mul_rpow_measure_univ", ["measure_theory"]], ["del", "theorem", "snorm_le_snorm_mul_snorm'_of_norm", ["measure_theory"]], ["del", "theorem", "snorm_le_snorm_mul_snorm_of_nnnorm", ["measure_theory"]], ["del", "theorem", "snorm_le_snorm_mul_snorm_top", ["measure_theory"]], ["del", "theorem", "snorm_le_snorm_of_exponent_le", ["measure_theory"]], ["del", "theorem", "snorm_le_snorm_top_mul_snorm", ["measure_theory"]], ["del", "theorem", "snorm_lt_top_iff_lintegral_rpow_nnnorm_lt_top", ["measure_theory"]], ["del", "theorem", "snorm_map_measure", ["measure_theory"]], ["del", "theorem", "snorm_measure_zero", ["measure_theory"]], ["del", "theorem", "snorm_mono", ["measure_theory"]], ["del", "theorem", "snorm_mono_ae", ["measure_theory"]], ["del", "theorem", "snorm_mono_ae_real", ["measure_theory"]], ["del", "theorem", "snorm_mono_measure", ["measure_theory"]], ["del", "theorem", "snorm_mono_nnnorm", ["measure_theory"]], ["del", "theorem", "snorm_mono_nnnorm_ae", ["measure_theory"]], ["del", "theorem", "snorm_mono_real", ["measure_theory"]], ["del", "theorem", "snorm_neg", ["measure_theory"]], ["del", "theorem", "snorm_norm", ["measure_theory"]], ["del", "theorem", "snorm_norm_rpow", ["measure_theory"]], ["del", "theorem", "snorm_one_add_measure", ["measure_theory"]], ["del", "theorem", "snorm_one_eq_lintegral_nnnorm", ["measure_theory"]], ["del", "theorem", "snorm_one_smul_measure", ["measure_theory"]], ["del", "theorem", "snorm_smul_le_mul_snorm", ["measure_theory"]], ["del", "theorem", "snorm_smul_le_snorm_mul_snorm_top", ["measure_theory"]], ["del", "theorem", "snorm_smul_le_snorm_top_mul_snorm", ["measure_theory"]], ["del", "theorem", "snorm_smul_measure_of_ne_top", ["measure_theory"]], ["del", "theorem", "snorm_smul_measure_of_ne_zero", ["measure_theory"]], ["del", "theorem", "snorm_sub_le'", ["measure_theory"]], ["del", "theorem", "snorm_sub_le", ["measure_theory"]], ["del", "theorem", "snorm_sum_le", ["measure_theory"]], ["del", "theorem", "snorm_trim", ["measure_theory"]], ["del", "theorem", "snorm_trim_ae", ["measure_theory"]], ["del", "theorem", "snorm_zero'", ["measure_theory"]], ["del", "theorem", "snorm_zero", ["measure_theory"]], ["del", "theorem", "zero_mem_ℒp'", ["measure_theory"]], ["del", "theorem", "zero_mem_ℒp", ["measure_theory"]]]}]}, {"timestamp": 1685175534, "sha": "78fdf68d", "message": "feat(linear_algebra/alternating): add 3 missing definitions (#19069)", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "coe_pi", ["alternating_map"]], ["add", "theorem", "coe_prod", ["alternating_map"]], ["add", "theorem", "coe_smul_right", ["alternating_map"]], ["add", "def", "pi", ["alternating_map"]], ["add", "def", "prod", ["alternating_map"]], ["add", "def", "smul_right", ["alternating_map"]], ["add", "theorem", "smul_right_eq_comp", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["mod", "def", "prod", ["multilinear_map"]]]}]}, {"timestamp": 1685171621, "sha": "b84aee74", "message": "feat (measure_theory/integral): some simple substitution rules (#19106)\nThis adds a few lemmas for evaluating integrals, and showing that integrability is preserved, by substitutions of the form `x ↦ a * x` or `x ↦ x ^ a`.", "changes": [{"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": [["add", "theorem", "det_one_smul_right", ["measure_theory"]], ["add", "theorem", "integrable_on_image_iff_integrable_on_abs_deriv_smul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["add", "theorem", "integrable_on_Ioi_comp_mul_left_iff", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_comp_mul_right_iff", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_comp_rpow_iff'", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_comp_rpow_iff", ["measure_theory"]], ["add", "theorem", "integral_comp_mul_left_Ioi", ["measure_theory"]], ["add", "theorem", "integral_comp_mul_right_Ioi", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/haar/normed_space.lean", "newPath": "src/measure_theory/measure/haar/normed_space.lean", "changes": [["add", "theorem", "comp_div", ["measure_theory", "integrable"]], ["add", "theorem", "comp_mul_left'", ["measure_theory", "integrable"]], ["add", "theorem", "comp_mul_right'", ["measure_theory", "integrable"]], ["add", "theorem", "comp_smul", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_comp_div_iff", ["measure_theory"]], ["add", "theorem", "integrable_comp_mul_left_iff", ["measure_theory"]], ["add", "theorem", "integrable_comp_mul_right_iff", ["measure_theory"]], ["add", "theorem", "integrable_comp_smul_iff", ["measure_theory"]], ["add", "theorem", "integral_comp_div", ["measure_theory", "measure"]], ["add", "theorem", "integral_comp_inv_mul_left", ["measure_theory", "measure"]], ["add", "theorem", "integral_comp_inv_mul_right", ["measure_theory", "measure"]], ["add", "theorem", "integral_comp_mul_left", ["measure_theory", "measure"]], ["add", "theorem", "integral_comp_mul_right", ["measure_theory", "measure"]]]}]}, {"timestamp": 1685131185, "sha": "ea0bcd84", "message": "feat(number_theory/class_number/finite): remove useless assumption [dedekind_domain R] (#19109)\nRemove the useless assumption `[dedekind_domain R]` from the final lemma [class_group.fintype_of_admissible_of_finite](https://leanprover-community.github.io/mathlib_docs/number_theory/class_number/finite.html#class_group.fintype_of_admissible_of_finite) since this can be inferred by the Euclidean domain one, that is in force thanks the standing assumption is that `R` has an admissible absolute value.", "changes": [{"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}]}, {"timestamp": 1685117626, "sha": "62748956", "message": "fix: missing continuity attribute (#19104)", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["mod", "theorem", "exp_continuous", []]]}]}, {"timestamp": 1685117624, "sha": "373b03b5", "message": "feat(analysis/convex/gauge): gauge of a convex nhd of zero is continuous (#19102)\nFrom the Brouwer Fixed Point Theorem project.", "changes": [{"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": [["add", "theorem", "lipschitz_with_gauge", ["convex"]], ["add", "theorem", "uniform_continuous_gauge", ["convex"]]]}]}, {"timestamp": 1685117623, "sha": "e0736bb5", "message": "refactor(measure_theory/function/lp_space): generalize actions from `normed_field` to `normed_ring` (#19083)\nThe motivation is that this makes it easier to work with integrals in non-commutative rings.\nThis makes the proof of Hölder's inequality slightly more painful, as we can no longer use `simp_rw [norm_smul]` and have to make monotonicity arguments instead. `rel_congr` may be able to clean this up in mathlib3.\nThe results in the `normed_space` section (including Hölder's inequality) have been largely moved to the `monotonicity` section, where they hold more generally for arbitrary binary functions.\nThe results about scalar actions now follow as trivial special cases.\nThis also makes the `fails_quickly` linter reject the `complete_space (Lp_meas F 𝕜 m p μ)` instance.\nSince Lean4 is around the corner and there are better debugging tools there, I think it's ok to just no-lint it.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "smul_comp_Lp", ["continuous_linear_map"]], ["mod", "theorem", "smul_comp_LpL", ["continuous_linear_map"]], ["del", "theorem", "smul_comp_LpL_apply", ["continuous_linear_map"]], ["del", "theorem", "norm_const_smul", ["measure_theory", "Lp"]], ["mod", "theorem", "const_mul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm'_const_smul_le", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm'_mul_snorm'", ["measure_theory"]], ["mod", "theorem", "snorm_const_smul", ["measure_theory"]], ["add", "theorem", "snorm_const_smul_le", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_const_smul", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_const_smul_le", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_mono_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_mul_snorm'_of_norm", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_mul_snorm_of_nnnorm", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_mul_snorm_top", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_top_mul_snorm", ["measure_theory"]]]}]}, {"timestamp": 1685107127, "sha": "5bb9fffd", "message": "feat(data/set/finite): add a version of `set.finite.bUnion` (#19098)\nAdd `set.finite.Union` and `equiv.set_finite_iff`.\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "set_finite_iff", ["equiv"]], ["add", "theorem", "Union", ["set", "finite"]]]}]}, {"timestamp": 1685096838, "sha": "a33d01f7", "message": "feat(analysis/inner_product_space/spectrum): add a decomposition instance (#14870)\nThis `decomposition` instances inherits the noncomputability of `orthogonal_projection`, but it is at least defeq to something useful.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "def", "decomposition", ["orthogonal_family"]], ["add", "theorem", "projection_direct_sum_coe_add_hom", ["orthogonal_family"]], ["add", "theorem", "sum_projection_of_mem_supr", ["orthogonal_family"]]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["add", "theorem", "direct_sum_decompose_apply", ["linear_map", "is_symmetric"]]]}]}, {"timestamp": 1685089989, "sha": "76f9c990", "message": "feat(topology/subset_properties): add `sigma_compact_space` instances (#19100)\nAdd instances for\n* `α × β`, `α ⊕ β`, `ulift α`;\n* `Π i : ι, π i`, assuming `finite ι`;\n* `Σ i : ι, π i`, assuming `countable ι`.\nIn each case, all input topological spaces are also assumed to be\nσ-compact.\nMotivated by the `prod` instance in the sphere eversion project.", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "closed_embedding_down", ["ulift"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1685082720, "sha": "42e9a1fd", "message": "feat(analysis/calculus/bump_function_inner): add `real.smooth_transition.proj_Icc` (#19097)\nAlso add `real.smooth_transition.continuous_at`.\nFrom the sphere eversion project", "changes": [{"oldPath": "src/analysis/calculus/bump_function_inner.lean", "newPath": "src/analysis/calculus/bump_function_inner.lean", "changes": []}, {"oldPath": "src/data/set/intervals/proj_Icc.lean", "newPath": "src/data/set/intervals/proj_Icc.lean", "changes": [["add", "theorem", "Icc_extend_eq_self", ["set"]]]}]}, {"timestamp": 1685082719, "sha": "c2258f7b", "message": "chore(topology/continuous_function/ideals): generalize type class requirements (#19093)\nFor the continuous functional calculus in non-unital algebras the subtype `C(R, R)₀ := { f : C(R, R) // f 0 = 0 }` will be useful, which is exactly `continuous_map.ideal_of_set`. However, it will be necessary to let `R` be `ℂ`, `ℝ` and `ℝ≥0`, and for the latter we need these more general type class assumptions.", "changes": [{"oldPath": "src/topology/continuous_function/ideals.lean", "newPath": "src/topology/continuous_function/ideals.lean", "changes": []}]}, {"timestamp": 1685082718, "sha": "d2d14e72", "message": "chore(measure_theory/function/lp_space): add and reorder monotonicity results (#19092)\nIn #19083, I generalize the normed_space results to work without a tight bound. This is much easier if I have the more general monotonicity results available first.\nThe `snorm'_le_nnreal_smul_snorm'_of_ae_le_mul` and `snorm_ess_sup_le_nnreal_smul_snorm_ess_sup_of_ae_le_mul` lemmas are new, and the `snorm_le_nnreal_smul_snorm_of_ae_le_mul` lemma has been adjusted to not rely on `snorm_const_smul`.\nAll the other lemmas have just been reordered.", "changes": [{"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "snorm'_le_nnreal_smul_snorm'_of_ae_le_mul", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_le_nnreal_smul_snorm_ess_sup_of_ae_le_mul", ["measure_theory"]]]}]}, {"timestamp": 1685071648, "sha": "cb425931", "message": "feat(data/real/basic): add `real.supr_nonneg` etc (#19096)\nMotivated by lemmas from the sphere eversion project", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1685054853, "sha": "d91e7f7a", "message": "feat(topology/{maps,separation}): add lemmas about closed and quotient maps (#19071)\nLemma statements are from Shamrock-Frost/BrouwerFixedPoint", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "to_quotient_map", ["is_closed_map"]], ["mod", "theorem", "quotient_map_iff", []], ["add", "theorem", "quotient_map_iff_closed", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "is_closed_map", ["continuous"]], ["add", "theorem", "of_surjective_continuous", ["quotient_map"]]]}]}, {"timestamp": 1685050480, "sha": "45a46f4f", "message": "doc(analysis/complex/arg): fix docs (#19095)\nThis is being backported from leanprover-community/mathlib4#4355.", "changes": [{"oldPath": "src/analysis/complex/arg.lean", "newPath": "src/analysis/complex/arg.lean", "changes": []}]}, {"timestamp": 1685044758, "sha": "e1a18cad", "message": "feat(analysis/special_functions/exponential): derivative of `u ↦ exp 𝕂 (u • x)` (#19062)\nRevived from an old branch of @ADedecker, golfed using new lemmas that I added in the meantime.", "changes": [{"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": [["add", "theorem", "has_deriv_at_exp_smul_const'", []], ["add", "theorem", "has_deriv_at_exp_smul_const", []], ["add", "theorem", "has_deriv_at_exp_smul_const_of_mem_ball'", []], ["add", "theorem", "has_deriv_at_exp_smul_const_of_mem_ball", []], ["add", "theorem", "has_fderiv_at_exp_smul_const'", []], ["add", "theorem", "has_fderiv_at_exp_smul_const", []], ["add", "theorem", "has_fderiv_at_exp_smul_const_of_mem_ball'", []], ["add", "theorem", "has_fderiv_at_exp_smul_const_of_mem_ball", []], ["add", "theorem", "has_strict_deriv_at_exp_smul_const'", []], ["add", "theorem", "has_strict_deriv_at_exp_smul_const", []], ["add", "theorem", "has_strict_deriv_at_exp_smul_const_of_mem_ball'", []], ["add", "theorem", "has_strict_deriv_at_exp_smul_const_of_mem_ball", []], ["add", "theorem", "has_strict_fderiv_at_exp_smul_const'", []], ["add", "theorem", "has_strict_fderiv_at_exp_smul_const", []], ["add", "theorem", "has_strict_fderiv_at_exp_smul_const_of_mem_ball'", []], ["add", "theorem", "has_strict_fderiv_at_exp_smul_const_of_mem_ball", []]]}]}, {"timestamp": 1685044757, "sha": "5a684ce8", "message": "feat(algebra/homology/local_cohomology): just the definition (#19061)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/category/Module/colimits.lean", "newPath": "src/algebra/category/Module/colimits.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/homology/local_cohomology.lean", "changes": [["add", "theorem", "exists_pow_le_of_le_radical_of_fg", ["ideal"]], ["add", "def", "diagram", ["local_cohomology"]], ["add", "def", "ideal_powers_diagram", ["local_cohomology"]], ["add", "def", "ideal_powers_to_self_le_radical", ["local_cohomology"]], ["add", "def", "ideal_powers_to_self_le_radical_comp_inclusion", ["local_cohomology"]], ["add", "def", "of_diagram", ["local_cohomology"]], ["add", "def", "of_self_le_radical", ["local_cohomology"]], ["add", "def", "ring_mod_ideals", ["local_cohomology"]], ["add", "def", "self_le_radical", ["local_cohomology"]], ["add", "def", "self_le_radical_diagram", ["local_cohomology"]], ["add", "def", "local_cohomology", []]]}]}, {"timestamp": 1685039564, "sha": "de83b437", "message": "feat(analysis/normed_space/lp_space): generalize from normed_field to `normed_ring` (#19085)\nThis provides a `module 𝕜 (lp E p)` instance for `normed_ring 𝕜` instead of `normed_field 𝕜`, as we didn't actually require that the bound on the norm of the scalar action was tight.", "changes": [{"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["add", "theorem", "norm_const_smul_le", ["lp"]]]}]}, {"timestamp": 1685034894, "sha": "6480bedf", "message": "chore(measure_theory/function/lp_space): add nnnorm lemmas (#19091)\nThis also adds a `has_nnnorm (Lp E p μ)` instance, which applies more generally (without `[fact (1 ≤ p)]`) than the version derived from `Lp.normed_add_comm_group`.\nIn general, `nnnorm` (`‖f x‖₊)` statements can often be easier to work with because there is no need to repeatedly remind Lean that the norm is non-negative. Most of the time, the `norm` (`‖x‖`) counterparts follow trivially from the `nnnorm` ones.\nNotably this removes the need for a proof-by-cases in `snorm_le_mul_snorm_of_ae_le_mul` and some similar lemmas.", "changes": [{"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "Lp_nnnorm_le", ["bounded_continuous_function"]], ["add", "theorem", "mem_Lp_of_ae_nnnorm_bound", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_of_nnnorm_ae_le", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_of_nnnorm_ae_le_mul", ["measure_theory", "Lp"]], ["add", "theorem", "nnnorm_def", ["measure_theory", "Lp"]], ["add", "theorem", "nnnorm_eq_zero_iff", ["measure_theory", "Lp"]], ["add", "theorem", "nnnorm_le_mul_nnnorm_of_ae_le_mul", ["measure_theory", "Lp"]], ["add", "theorem", "nnnorm_le_of_ae_bound", ["measure_theory", "Lp"]], ["add", "theorem", "nnnorm_neg", ["measure_theory", "Lp"]], ["add", "theorem", "nnnorm_to_Lp", ["measure_theory", "Lp"]], ["add", "theorem", "nnnorm_zero", ["measure_theory", "Lp"]], ["mod", "theorem", "norm_neg", ["measure_theory", "Lp"]], ["add", "theorem", "of_nnnorm_le_mul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm'_congr_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm'_mono_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm_congr_nnnorm_ae", ["measure_theory"]], ["add", "theorem", "snorm_eq_zero_and_zero_of_ae_le_mul_neg", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_le_of_ae_nnnorm_bound", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_lt_top_of_ae_nnnorm_bound", ["measure_theory"]], ["del", "theorem", "snorm_le_mul_snorm_aux_of_neg", ["measure_theory"]], ["del", "theorem", "snorm_le_mul_snorm_aux_of_nonneg", ["measure_theory"]], ["add", "theorem", "snorm_le_nnreal_smul_snorm_of_ae_le_mul", ["measure_theory"]], ["add", "theorem", "snorm_le_of_ae_nnnorm_bound", ["measure_theory"]], ["add", "theorem", "snorm_mono_nnnorm", ["measure_theory"]], ["add", "theorem", "snorm_mono_nnnorm_ae", ["measure_theory"]]]}]}, {"timestamp": 1684983544, "sha": "a87d2257", "message": "chore(*): add mathlib4 synchronization comments (#19089)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.filtered_colimits`\n* `algebra.category.Module.limits`\n* `algebra.direct_limit`\n* `algebraic_geometry.prime_spectrum.basic`\n* `algebraic_geometry.prime_spectrum.is_open_comap_C`\n* `analysis.calculus.fderiv.star`\n* `analysis.complex.isometry`\n* `analysis.locally_convex.with_seminorms`\n* `analysis.normed.mul_action`\n* `analysis.normed_space.hahn_banach.extension`\n* `data.fintype.quotient`\n* `field_theory.separable_degree`\n* `linear_algebra.charpoly.to_matrix`\n* `linear_algebra.matrix.general_linear_group`\n* `linear_algebra.matrix.to_linear_equiv`\n* `measure_theory.function.ae_eq_fun`\n* `model_theory.quotients`\n* `number_theory.modular_forms.congruence_subgroups`\n* `ring_theory.adjoin.power_basis`\n* `ring_theory.adjoin_root`\n* `ring_theory.laurent_series`\n* `topology.instances.rat_lemmas`\n* `topology.metric_space.gromov_hausdorff_realized`", "changes": [{"oldPath": "src/algebra/category/Group/filtered_colimits.lean", "newPath": "src/algebra/category/Group/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "newPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/star.lean", "newPath": "src/analysis/calculus/fderiv/star.lean", "changes": []}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": []}, {"oldPath": "src/analysis/normed/mul_action.lean", "newPath": "src/analysis/normed/mul_action.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach/extension.lean", "newPath": "src/analysis/normed_space/hahn_banach/extension.lean", "changes": []}, {"oldPath": "src/data/fintype/quotient.lean", "newPath": "src/data/fintype/quotient.lean", "changes": []}, {"oldPath": "src/field_theory/separable_degree.lean", "newPath": "src/field_theory/separable_degree.lean", "changes": []}, {"oldPath": "src/linear_algebra/charpoly/to_matrix.lean", "newPath": "src/linear_algebra/charpoly/to_matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/general_linear_group.lean", "newPath": "src/linear_algebra/matrix/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/model_theory/quotients.lean", "newPath": "src/model_theory/quotients.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/congruence_subgroups.lean", "newPath": "src/number_theory/modular_forms/congruence_subgroups.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": []}, {"oldPath": "src/topology/instances/rat_lemmas.lean", "newPath": "src/topology/instances/rat_lemmas.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1684983543, "sha": "10878f6b", "message": "feat(linear_algebra/span): generalise to_span_nonzero_singleton (#19082)", "changes": [{"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["mod", "def", "coord", ["linear_equiv"]], ["add", "theorem", "coord_apply_smul", ["linear_equiv"]], ["mod", "theorem", "coord_self", ["linear_equiv"]], ["mod", "def", "to_span_nonzero_singleton", ["linear_equiv"]], ["mod", "theorem", "to_span_nonzero_singleton_one", ["linear_equiv"]], ["mod", "theorem", "ker_to_span_singleton", ["linear_map"]]]}]}, {"timestamp": 1684963709, "sha": "96d2ccbe", "message": "fix: bump to Lean 3.51.1 (#19088)\nThis should fix the web editor", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1684942937, "sha": "ef95945c", "message": "feat(measure_theory/function/strongly_measurable/basic): generalize to `is_unit c` from `c ≠ 0` (#19081)\nWe already have this generalization for `measurable_const_smul_iff` and `ae_measurable_const_smul_iff`.", "changes": [{"oldPath": "src/measure_theory/function/strongly_measurable/basic.lean", "newPath": "src/measure_theory/function/strongly_measurable/basic.lean", "changes": [["add", "theorem", "ae_strongly_measurable_const_smul_iff", ["is_unit"]], ["add", "theorem", "strongly_measurable_const_smul_iff", ["is_unit"]]]}]}, {"timestamp": 1684942936, "sha": "0372d31f", "message": "feat(algebra/group/opposite): `is_unit` lemmas for `mul_opposite` (#19080)\nI need these to build lemmas about right-multiplication by a unit out of lemmas about the left-action by a unit of the opposite ring, and this lets me convert that hypothesis.", "changes": [{"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["add", "theorem", "op", ["is_unit"]], ["add", "theorem", "unop", ["is_unit"]], ["add", "theorem", "is_unit_op", []], ["add", "theorem", "is_unit_unop", []]]}]}, {"timestamp": 1684938921, "sha": "5bfbcca0", "message": "chore(ring_theory.polynomial.cyclotomic): split file (#19077)\n`ring_theory.polynomial.cyclotomic` is almost 1000 lines long and it can be nicely split.\nWe also fix some docstring.", "changes": [{"oldPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "newPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["del", "theorem", "is_root_cyclotomic", ["is_primitive_root"]], ["del", "theorem", "minpoly_dvd_cyclotomic", ["is_primitive_root"]], ["del", "theorem", "minpoly_eq_cyclotomic_of_irreducible", ["is_primitive_root"]], ["del", "theorem", "is_root_of_unity_iff", []], ["del", "theorem", "irreducible", ["polynomial", "cyclotomic"]], ["del", "theorem", "irreducible_rat", ["polynomial", "cyclotomic"]], ["del", "theorem", "is_coprime_rat", ["polynomial", "cyclotomic"]], ["del", "theorem", "roots_eq_primitive_roots_val", ["polynomial", "cyclotomic"]], ["del", "theorem", "roots_to_finset_eq_primitive_roots", ["polynomial", "cyclotomic"]], ["del", "theorem", "cyclotomic_eq_minpoly", ["polynomial"]], ["del", "theorem", "cyclotomic_eq_minpoly_rat", ["polynomial"]], ["del", "theorem", "cyclotomic_expand_eq_cyclotomic", ["polynomial"]], ["del", "theorem", "cyclotomic_expand_eq_cyclotomic_mul", ["polynomial"]], ["del", "theorem", "cyclotomic_injective", ["polynomial"]], ["del", "theorem", "cyclotomic_irreducible_of_irreducible_pow", ["polynomial"]], ["del", "theorem", "cyclotomic_irreducible_pow_of_irreducible_pow", ["polynomial"]], ["del", "theorem", "cyclotomic_mul_prime_dvd_eq_pow", ["polynomial"]], ["del", "theorem", "cyclotomic_mul_prime_eq_pow_of_not_dvd", ["polynomial"]], ["del", "theorem", "cyclotomic_mul_prime_pow_eq", ["polynomial"]], ["del", "theorem", "is_root_cyclotomic_iff", ["polynomial"]], ["del", "theorem", "is_root_cyclotomic_iff_char_zero", ["polynomial"]], ["del", "theorem", "is_root_cyclotomic_prime_pow_mul_iff_of_char_p", ["polynomial"]], ["del", "theorem", "is_root_of_unity_of_root_cyclotomic", ["polynomial"]], ["del", "theorem", "roots_cyclotomic_nodup", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/cyclotomic/expand.lean", "changes": [["add", "theorem", "cyclotomic_expand_eq_cyclotomic", ["polynomial"]], ["add", "theorem", "cyclotomic_expand_eq_cyclotomic_mul", ["polynomial"]], ["add", "theorem", "cyclotomic_irreducible_of_irreducible_pow", ["polynomial"]], ["add", "theorem", "cyclotomic_irreducible_pow_of_irreducible_pow", ["polynomial"]], ["add", "theorem", "cyclotomic_mul_prime_dvd_eq_pow", ["polynomial"]], ["add", "theorem", "cyclotomic_mul_prime_eq_pow_of_not_dvd", ["polynomial"]], ["add", "theorem", "cyclotomic_mul_prime_pow_eq", ["polynomial"]], ["add", "theorem", "is_root_cyclotomic_prime_pow_mul_iff_of_char_p", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/cyclotomic/roots.lean", "changes": [["add", "theorem", "is_root_cyclotomic", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_cyclotomic", ["is_primitive_root"]], ["add", "theorem", "minpoly_eq_cyclotomic_of_irreducible", ["is_primitive_root"]], ["add", "theorem", "is_root_of_unity_iff", []], ["add", "theorem", "irreducible", ["polynomial", "cyclotomic"]], ["add", "theorem", "irreducible_rat", ["polynomial", "cyclotomic"]], ["add", "theorem", "is_coprime_rat", ["polynomial", "cyclotomic"]], ["add", "theorem", "roots_eq_primitive_roots_val", ["polynomial", "cyclotomic"]], ["add", "theorem", "roots_to_finset_eq_primitive_roots", ["polynomial", "cyclotomic"]], ["add", "theorem", "cyclotomic_eq_minpoly", ["polynomial"]], ["add", "theorem", "cyclotomic_eq_minpoly_rat", ["polynomial"]], ["add", "theorem", "cyclotomic_injective", ["polynomial"]], ["add", "theorem", "is_root_cyclotomic_iff", ["polynomial"]], ["add", "theorem", "is_root_cyclotomic_iff_char_zero", ["polynomial"]], ["add", "theorem", "is_root_of_unity_of_root_cyclotomic", ["polynomial"]], ["add", "theorem", "roots_cyclotomic_nodup", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein/is_integral.lean", "newPath": "src/ring_theory/polynomial/eisenstein/is_integral.lean", "changes": []}]}, {"timestamp": 1684932291, "sha": "bc91ed70", "message": "feat(analysis/normed_space/basic): scaling a set scales its diameter, translating it leaves it unchanged (#18990)", "changes": [{"oldPath": "src/analysis/normed/mul_action.lean", "newPath": "src/analysis/normed/mul_action.lean", "changes": [["add", "theorem", "edist_smul_le", []], ["add", "theorem", "edist_smul₀", []], ["mod", "theorem", "lipschitz_with_smul", []], ["mod", "theorem", "nndist_smul₀", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["add", "theorem", "diam_smul₀", []], ["add", "theorem", "ediam_smul_le", []], ["add", "theorem", "ediam_smul₀", []], ["add", "theorem", "inf_dist_smul₀", []], ["add", "theorem", "inf_edist_smul₀", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "mul_le_iff_le_inv", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "inf_edist_smul", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/isometric_smul.lean", "newPath": "src/topology/metric_space/isometric_smul.lean", "changes": [["add", "theorem", "diam_smul", []], ["add", "theorem", "ediam_smul", []]]}]}, {"timestamp": 1684927813, "sha": "6315581f", "message": "feat(probability/kernel/disintegration): integral against `cond_kernel` (#19066)", "changes": [{"oldPath": "src/probability/kernel/disintegration.lean", "newPath": "src/probability/kernel/disintegration.lean", "changes": [["add", "theorem", "ae_integrable_cond_kernel_iff", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "integral_cond_kernel", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "cond_kernel_ae", ["measure_theory", "integrable"]], ["add", "theorem", "integral_cond_kernel", ["measure_theory", "integrable"]], ["add", "theorem", "integral_norm_cond_kernel", ["measure_theory", "integrable"]], ["add", "theorem", "norm_integral_cond_kernel", ["measure_theory", "integrable"]], ["add", "theorem", "integral_cond_kernel", ["probability_theory"]], ["add", "theorem", "set_integral_cond_kernel", ["probability_theory"]], ["add", "theorem", "set_integral_cond_kernel_univ_left", ["probability_theory"]], ["add", "theorem", "set_integral_cond_kernel_univ_right", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_kernel", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_kernel_eq_measure_prod", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_kernel_univ_left", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_kernel_univ_right", ["probability_theory"]]]}]}, {"timestamp": 1684901582, "sha": "61db041a", "message": "chore(*): add mathlib4 synchronization comments (#19076)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Ring.colimits`\n* `analysis.box_integral.partition.additive`\n* `analysis.calculus.formal_multilinear_series`\n* `analysis.convex.cone.basic`\n* `analysis.convex.side`\n* `data.nat.prime_norm_num`\n* `field_theory.ax_grothendieck`\n* `field_theory.intermediate_field`\n* `field_theory.separable`\n* `linear_algebra.annihilating_polynomial`\n* `linear_algebra.charpoly.basic`\n* `linear_algebra.free_module.strong_rank_condition`\n* `linear_algebra.matrix.charpoly.minpoly`\n* `linear_algebra.matrix.special_linear_group`\n* `linear_algebra.trace`\n* `measure_theory.function.strongly_measurable.basic`\n* `representation_theory.basic`\n* `ring_theory.fractional_ideal`\n* `ring_theory.hahn_series`\n* `ring_theory.henselian`\n* `ring_theory.ideal.over`\n* `ring_theory.localization.integral`\n* `ring_theory.power_basis`\n* `topology.instances.irrational`\n* `topology.sheaves.sheaf_condition.opens_le_cover`", "changes": [{"oldPath": "src/algebra/category/Ring/colimits.lean", "newPath": "src/algebra/category/Ring/colimits.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": []}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone/basic.lean", "newPath": "src/analysis/convex/cone/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/side.lean", "newPath": "src/analysis/convex/side.lean", "changes": []}, {"oldPath": "src/data/nat/prime_norm_num.lean", "newPath": "src/data/nat/prime_norm_num.lean", "changes": []}, {"oldPath": "src/field_theory/ax_grothendieck.lean", "newPath": "src/field_theory/ax_grothendieck.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/linear_algebra/annihilating_polynomial.lean", "newPath": "src/linear_algebra/annihilating_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "newPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/minpoly.lean", "newPath": "src/linear_algebra/matrix/charpoly/minpoly.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/special_linear_group.lean", "newPath": "src/linear_algebra/matrix/special_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable/basic.lean", "newPath": "src/measure_theory/function/strongly_measurable/basic.lean", "changes": []}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/ring_theory/henselian.lean", "newPath": "src/ring_theory/henselian.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}, {"oldPath": "src/topology/instances/irrational.lean", "newPath": "src/topology/instances/irrational.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}]}, {"timestamp": 1684895464, "sha": "3a69562d", "message": "feat(analysis/calculus): drop unneeded assumptions (#19045)\n* Prove more precise congruence lemmas for derivatives. In particular, adding or removing a single point from `s` doesn't change anything about derivatives within `s`.\n* Drop `has_fderiv_within_at.antimono` and `has_deriv_within_at.antimono`, use stronger `*.mono_of_mem` lemmas instead.\n* Prove some equalities about `(f)deriv_within` by using `simp` instead of `slit_ifs`: if `has_fderiv_within_at f f' s x ↔ has_fderiv_within_at g g' t y`, then `fderiv_within f s x = fderiv_within g t y`.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": [["add", "theorem", "cont_diff_on'", ["cont_diff_within_at"]], ["add", "theorem", "differentiable_within_at_iterated_fderiv_within", ["cont_diff_within_at"]], ["add", "theorem", "iterated_fderiv_within'", ["filter", "eventually_eq"]], ["add", "theorem", "iterated_fderiv_within_eq", ["filter", "eventually_eq"]], ["mod", "theorem", "iterated_fderiv_within_congr", []], ["add", "theorem", "iterated_fderiv_within_congr_set", []], ["add", "theorem", "iterated_fderiv_within_eventually_congr_set'", []], ["add", "theorem", "iterated_fderiv_within_eventually_congr_set", []], ["mod", "theorem", "iterated_fderiv_within_inter'", []], ["mod", "theorem", "iterated_fderiv_within_inter", []], ["mod", "theorem", "iterated_fderiv_within_inter_open", []]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_within_congr", []], ["add", "theorem", "deriv_within_congr_set'", []], ["add", "theorem", "deriv_within_congr_set", []], ["mod", "theorem", "deriv_within_inter", []], ["add", "theorem", "deriv_within_of_mem", []], ["mod", "theorem", "deriv_within_eq", ["filter", "eventually_eq"]], ["add", "theorem", "mono_of_mem", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_congr_set'", []], ["mod", "theorem", "has_deriv_within_at_congr_set", []]]}, {"oldPath": "src/analysis/calculus/fderiv/basic.lean", "newPath": "src/analysis/calculus/fderiv/basic.lean", "changes": [["del", "theorem", "antimono", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_congr_set'", []], ["add", "theorem", "differentiable_within_at_congr_set", []], ["mod", "theorem", "fderiv_within_congr'", []], ["mod", "theorem", "fderiv_within_congr", []], ["add", "theorem", "fderiv_within_congr_set'", []], ["add", "theorem", "fderiv_within_congr_set", []], ["add", "theorem", "fderiv_within_eventually_congr_set'", []], ["add", "theorem", "fderiv_within_eventually_congr_set", []], ["mod", "theorem", "fderiv_within_inter", []], ["add", "theorem", "fderiv_within_of_mem", []], ["del", "theorem", "fderiv_within_subset'", []], ["mod", "theorem", "fderiv_eq", ["filter", "eventually_eq"]], ["add", "theorem", "fderiv_within'", ["filter", "eventually_eq"]], ["mod", "theorem", "fderiv_within_eq", ["filter", "eventually_eq"]], ["mod", "theorem", "fderiv_within_eq_nhds", ["filter", "eventually_eq"]], ["del", "theorem", "antimono", ["has_fderiv_within_at"]], ["mod", "theorem", "congr'", ["has_fderiv_within_at"]], ["mod", "theorem", "congr", ["has_fderiv_within_at"]], ["mod", "theorem", "congr_mono", ["has_fderiv_within_at"]], ["mod", "theorem", "insert", ["has_fderiv_within_at"]], ["add", "theorem", "has_fderiv_within_at_congr_set'", []], ["add", "theorem", "has_fderiv_within_at_congr_set", []], ["add", "theorem", "has_fderiv_within_at_diff_singleton", []], ["mod", "theorem", "has_fderiv_within_at_insert", []], ["add", "theorem", "tsupport_fderiv_subset", []]]}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": [["add", "theorem", "differentiable_within_at_iterated_deriv_within", ["cont_diff_within_at"]], ["mod", "theorem", "iterated_deriv_within_one", []]]}, {"oldPath": "src/analysis/calculus/taylor.lean", "newPath": "src/analysis/calculus/taylor.lean", "changes": [["mod", "theorem", "has_deriv_within_at_taylor_coeff_within", []]]}, {"oldPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "newPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["mod", "theorem", "mfderiv_within_inter", []]]}, {"oldPath": "src/geometry/manifold/vector_bundle/tangent.lean", "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": []}]}, {"timestamp": 1684878353, "sha": "d4f691b9", "message": "feat(order/filter/basic): generalize some lemmas from `nhds_within` (#19070)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "set_eventually_eq_iff_inf_principal", ["filter"]], ["add", "theorem", "set_eventually_le_iff_inf_principal_le", ["filter"]], ["add", "theorem", "set_eventually_le_iff_mem_inf_principal", ["filter"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}]}, {"timestamp": 1684871052, "sha": "8d33f09c", "message": "feat(topology/homotopy/H_spaces): define H spaces (#16029)\nintroduce H-spaces and prove basic properties, in particular that every topological group is a H-space and that the path space at a point is a H-space.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/topology/homotopy/H_spaces.lean", "changes": [["add", "theorem", "continuous_delay_refl_left", ["path"]], ["add", "theorem", "continuous_delay_refl_right", ["path"]], ["add", "def", "delay_refl_left", ["path"]], ["add", "theorem", "delay_refl_left_one", ["path"]], ["add", "theorem", "delay_refl_left_zero", ["path"]], ["add", "def", "delay_refl_right", ["path"]], ["add", "theorem", "delay_refl_right_one", ["path"]], ["add", "theorem", "delay_refl_right_zero", ["path"]], ["add", "theorem", "one_eq_H_space_e", ["topological_group"]], ["add", "def", "Q_right", ["unit_interval"]], ["add", "theorem", "Q_right_one_left", ["unit_interval"]], ["add", "theorem", "Q_right_one_right", ["unit_interval"]], ["add", "theorem", "Q_right_zero_left", ["unit_interval"]], ["add", "theorem", "Q_right_zero_right", ["unit_interval"]], ["add", "theorem", "continuous_Q_right", ["unit_interval"]]]}]}, {"timestamp": 1684860860, "sha": "ba5ff5ad", "message": "refactor(analysis/normed_space/basic): generalize some results to actions by normed_rings (#19053)\nThis only moves the very basic lemmas for now.\nThis should be very easy to forward-port:\n* Let someone port the new file via the normal mechanism\n* Have them delete the duplicate lemmas that appear in CI\nA few downstream proofs need some small help with unification, as while the old `normed_space` argument was found by unification, the new `has_bounded_smul` has to be found by typeclass search.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed/mul_action.lean", "changes": [["add", "theorem", "dist_smul_le", []], ["add", "theorem", "dist_smul₀", []], ["add", "theorem", "of_norm_smul_le", ["has_bounded_smul"]], ["add", "theorem", "lipschitz_with_smul", []], ["add", "theorem", "nndist_smul_le", []], ["add", "theorem", "nndist_smul₀", []], ["add", "theorem", "nnnorm_smul", []], ["add", "theorem", "nnnorm_smul_le", []], ["add", "theorem", "norm_smul", []], ["add", "theorem", "norm_smul_le", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "dist_smul_le", []], ["del", "theorem", "dist_smul₀", []], ["del", "theorem", "lipschitz_with_smul", []], ["del", "theorem", "nndist_smul_le", []], ["del", "theorem", "nndist_smul₀", []], ["del", "theorem", "nnnorm_smul", []], ["del", "theorem", "nnnorm_smul_le", []], ["del", "theorem", "norm_smul", []], ["del", "theorem", "norm_smul_le", []]]}, {"oldPath": "src/analysis/normed_space/star/multiplier.lean", "newPath": "src/analysis/normed_space/star/multiplier.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}]}, {"timestamp": 1684853371, "sha": "b602702a", "message": "chore(number_theory/cyclotomic): tidying (#19067)\nNow that the splitting field diamond is gone, we can tidy the code around these areas a bit more. This also incidentally removed another diamond (the ℤ-algebra on `cyclotomic_ring`) and so we can remove ugliness related to this.", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["del", "def", "algebra_base", ["cyclotomic_ring"]]]}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}]}, {"timestamp": 1684845232, "sha": "ad84a13c", "message": "feat(analysis/calculus/fderiv/star): derivative of star in star-modules over a trivial star-ring (#19038)\nNotably this includes the complex and quaternion conjugates.\nWe need the `has_trivial_star` assumption in order to have `star (c • x) = c • star x` available; which in turn we need because `has_fderiv_at` consumes *linear* maps not *semi-linear* maps.\nIn the absence of an easy way to convert between linear and semi-linear maps, we bundle `star` (again) as a continuous linear equiv as `starL'`.\nSome alternative approaches are discussed [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Star-semilinear.20maps.20are.20semilinear.20when.20star.20is.20trivial/near/359552581).\nThese API here is just the API for `-` (`neg`), modified by replacing `neg` with `star` and `-f x` with `star (f x)`.\nSince we require `has_trivial_star` there is no point adding any lemmas for the derivative of `star` on the field itself.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/star.lean", "changes": [["add", "theorem", "star", ["differentiable"]], ["add", "theorem", "star", ["differentiable_at"]], ["add", "theorem", "differentiable_at_star_iff", []], ["add", "theorem", "star", ["differentiable_on"]], ["add", "theorem", "differentiable_on_star_iff", []], ["add", "theorem", "differentiable_star_iff", []], ["add", "theorem", "star", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_star_iff", []], ["add", "theorem", "fderiv_star", []], ["add", "theorem", "fderiv_within_star", []], ["add", "theorem", "star", ["has_fderiv_at"]], ["add", "theorem", "star", ["has_fderiv_at_filter"]], ["add", "theorem", "star", ["has_fderiv_within_at"]], ["add", "theorem", "star", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/topology/algebra/module/star.lean", "newPath": "src/topology/algebra/module/star.lean", "changes": [["add", "def", "starL'", []]]}]}, {"timestamp": 1684830945, "sha": "c0d694db", "message": "feat(probability/kernel/integral_comp_prod): Bochner integral against the composition-product of two kernels (#18976)", "changes": [{"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": [["add", "theorem", "ae_ae_of_ae_comp_prod", ["probability_theory", "kernel"]], ["add", "theorem", "ae_kernel_lt_top", ["probability_theory", "kernel"]], ["add", "theorem", "ae_null_of_comp_prod_null", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_null", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_restrict", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_restrict_left", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_restrict_right", ["probability_theory", "kernel"]], ["add", "theorem", "le_comp_prod_apply", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_comp_prod₀", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_comp_prod", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_comp_prod_univ_left", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_comp_prod_univ_right", ["probability_theory", "kernel"]]]}, {"oldPath": null, "newPath": "src/probability/kernel/integral_comp_prod.lean", "changes": [["add", "theorem", "comp_prod_mk_left", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "integral_kernel_comp_prod", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "comp_prod_mk_left_ae", ["measure_theory", "integrable"]], ["add", "theorem", "integral_comp_prod", ["measure_theory", "integrable"]], ["add", "theorem", "integral_norm_comp_prod", ["measure_theory", "integrable"]], ["add", "theorem", "has_finite_integral_comp_prod_iff'", ["probability_theory"]], ["add", "theorem", "has_finite_integral_comp_prod_iff", ["probability_theory"]], ["add", "theorem", "has_finite_integral_prod_mk_left", ["probability_theory"]], ["add", "theorem", "integrable_comp_prod_iff", ["probability_theory"]], ["add", "theorem", "integrable_kernel_prod_mk_left", ["probability_theory"]], ["add", "theorem", "integral_comp_prod", ["probability_theory"]], ["add", "theorem", "continuous_integral_integral", ["probability_theory", "kernel"]], ["add", "theorem", "integral_fn_integral_add", ["probability_theory", "kernel"]], ["add", "theorem", "integral_fn_integral_sub", ["probability_theory", "kernel"]], ["add", "theorem", "integral_integral_add'", ["probability_theory", "kernel"]], ["add", "theorem", "integral_integral_add", ["probability_theory", "kernel"]], ["add", "theorem", "integral_integral_sub'", ["probability_theory", "kernel"]], ["add", "theorem", "integral_integral_sub", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_fn_integral_sub", ["probability_theory", "kernel"]], ["add", "theorem", "set_integral_comp_prod", ["probability_theory"]], ["add", "theorem", "set_integral_comp_prod_univ_left", ["probability_theory"]], ["add", "theorem", "set_integral_comp_prod_univ_right", ["probability_theory"]]]}, {"oldPath": "src/probability/kernel/with_density.lean", "newPath": "src/probability/kernel/with_density.lean", "changes": [["add", "theorem", "integral_with_density", ["probability_theory", "kernel"]]]}]}, {"timestamp": 1684819475, "sha": "05b93a58", "message": "feat: update to Lean 3.51.0 (#19060)\nThis version:\n* Propagates goal tags through `unfreezingI`\n* Uses a more recent set of emscripten build tools\nIt's hard to know whether this will break the web editor, other than just pushing and finding out.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1684815386, "sha": "cb9077f7", "message": "chore(scripts): update nolints.txt (#19065)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1684804154, "sha": "38df578a", "message": "chore(*): add mathlib4 synchronization comments (#19063)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.algebraic_card`\n* `algebra.category.GroupWithZero`\n* `algebra.category.Ring.instances`\n* `algebra.dual_quaternion`\n* `algebra.quaternion`\n* `algebra.quaternion_basis`\n* `analysis.calculus.fderiv.add`\n* `analysis.calculus.fderiv.comp`\n* `analysis.calculus.fderiv.equiv`\n* `analysis.calculus.fderiv.linear`\n* `analysis.calculus.fderiv.prod`\n* `analysis.calculus.fderiv.restrict_scalars`\n* `analysis.convex.between`\n* `analysis.convex.strict_convex_between`\n* `analysis.locally_convex.strong_topology`\n* `combinatorics.configuration`\n* `data.real.irrational`\n* `dynamics.ergodic.conservative`\n* `field_theory.minpoly.basic`\n* `field_theory.minpoly.field`\n* `group_theory.perm.cycle.concrete`\n* `linear_algebra.bilinear_form`\n* `linear_algebra.bilinear_form.tensor_product`\n* `linear_algebra.coevaluation`\n* `linear_algebra.contraction`\n* `linear_algebra.dual`\n* `linear_algebra.matrix.dual`\n* `measure_theory.constructions.borel_space.metrizable`\n* `measure_theory.covering.vitali`\n* `measure_theory.function.special_functions.is_R_or_C`\n* `measure_theory.integral.lebesgue_normed_space`\n* `measure_theory.integral.riesz_markov_kakutani`\n* `measure_theory.measure.content`\n* `measure_theory.measure.giry_monad`\n* `number_theory.legendre_symbol.zmod_char`\n* `number_theory.padics.padic_numbers`\n* `order.interval`\n* `ring_theory.algebraic`\n* `ring_theory.artinian`\n* `ring_theory.discrete_valuation_ring.basic`\n* `ring_theory.graded_algebra.radical`\n* `ring_theory.integral_closure`\n* `ring_theory.localization.as_subring`\n* `ring_theory.localization.away.basic`\n* `ring_theory.localization.cardinality`\n* `ring_theory.localization.localization_localization`\n* `ring_theory.power_series.basic`\n* `ring_theory.power_series.well_known`\n* `ring_theory.witt_vector.witt_polynomial`\n* `topology.metric_space.metrizable`\n* `topology.metric_space.thickened_indicator`\n* `topology.sheaves.punit`\n* `topology.urysohns_bounded`\n* `topology.vector_bundle.basic`\n* `topology.vector_bundle.constructions`", "changes": [{"oldPath": "src/algebra/algebraic_card.lean", "newPath": "src/algebra/algebraic_card.lean", "changes": []}, {"oldPath": "src/algebra/category/GroupWithZero.lean", "newPath": "src/algebra/category/GroupWithZero.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/instances.lean", "newPath": "src/algebra/category/Ring/instances.lean", "changes": []}, {"oldPath": "src/algebra/dual_quaternion.lean", "newPath": "src/algebra/dual_quaternion.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/quaternion_basis.lean", "newPath": "src/algebra/quaternion_basis.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/add.lean", "newPath": "src/analysis/calculus/fderiv/add.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/comp.lean", "newPath": "src/analysis/calculus/fderiv/comp.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/equiv.lean", "newPath": "src/analysis/calculus/fderiv/equiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/linear.lean", "newPath": "src/analysis/calculus/fderiv/linear.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/prod.lean", "newPath": "src/analysis/calculus/fderiv/prod.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/restrict_scalars.lean", "newPath": "src/analysis/calculus/fderiv/restrict_scalars.lean", "changes": []}, {"oldPath": "src/analysis/convex/between.lean", "newPath": "src/analysis/convex/between.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict_convex_between.lean", "newPath": "src/analysis/convex/strict_convex_between.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/strong_topology.lean", "newPath": "src/analysis/locally_convex/strong_topology.lean", "changes": []}, {"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly/basic.lean", "newPath": "src/field_theory/minpoly/basic.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly/field.lean", "newPath": "src/field_theory/minpoly/field.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/concrete.lean", "newPath": "src/group_theory/perm/cycle/concrete.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form/tensor_product.lean", "newPath": "src/linear_algebra/bilinear_form/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/coevaluation.lean", "newPath": "src/linear_algebra/coevaluation.lean", "changes": []}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/dual.lean", "newPath": "src/linear_algebra/matrix/dual.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space/metrizable.lean", "newPath": "src/measure_theory/constructions/borel_space/metrizable.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/is_R_or_C.lean", "newPath": "src/measure_theory/function/special_functions/is_R_or_C.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue_normed_space.lean", "newPath": "src/measure_theory/integral/lebesgue_normed_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/riesz_markov_kakutani.lean", "newPath": "src/measure_theory/integral/riesz_markov_kakutani.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/giry_monad.lean", "newPath": "src/measure_theory/measure/giry_monad.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/zmod_char.lean", "newPath": "src/number_theory/legendre_symbol/zmod_char.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/order/interval.lean", "newPath": "src/order/interval.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring/basic.lean", "newPath": "src/ring_theory/discrete_valuation_ring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/as_subring.lean", "newPath": "src/ring_theory/localization/as_subring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/away/basic.lean", "newPath": "src/ring_theory/localization/away/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/cardinality.lean", "newPath": "src/ring_theory/localization/cardinality.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/localization_localization.lean", "newPath": "src/ring_theory/localization/localization_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": []}, {"oldPath": "src/topology/metric_space/thickened_indicator.lean", "newPath": "src/topology/metric_space/thickened_indicator.lean", "changes": []}, {"oldPath": "src/topology/sheaves/punit.lean", "newPath": "src/topology/sheaves/punit.lean", "changes": []}, {"oldPath": "src/topology/urysohns_bounded.lean", "newPath": "src/topology/urysohns_bounded.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/constructions.lean", "newPath": "src/topology/vector_bundle/constructions.lean", "changes": []}]}, {"timestamp": 1684795788, "sha": "6f8ab7de", "message": "feat(combinatorics/set_family/compression/uv): UV-compressing reduces the size of the shadow (#13149)\nProve `(∂ (𝓒 u v 𝒜)).card ≤ (∂ 𝒜).card`, which is key to Kruskal-Katona.", "changes": [{"oldPath": "src/combinatorics/set_family/compression/uv.lean", "newPath": "src/combinatorics/set_family/compression/uv.lean", "changes": [["mod", "theorem", "card_compress", ["uv"]], ["mod", "theorem", "card_compression", ["uv"]], ["add", "theorem", "card_shadow_compression_le", ["uv"]], ["add", "theorem", "compress_of_disjoint_of_le'", ["uv"]], ["add", "theorem", "compress_sdiff_sdiff", ["uv"]], ["add", "theorem", "disjoint_of_mem_compression_of_not_mem", ["uv"]], ["add", "theorem", "le_of_mem_compression_of_not_mem", ["uv"]], ["add", "theorem", "shadow_compression_subset_compression_shadow", ["uv"]], ["add", "theorem", "sup_sdiff_mem_of_mem_compression_of_not_mem", ["uv"]]]}]}, {"timestamp": 1684775516, "sha": "75e7fca5", "message": "feat(analysis/calculus/mean_value): functions are equal if their derivatives and a point are equal (#19059)\nAnd the version for equality within a convex set.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "eq_on_of_fderiv_within_eq", ["convex"]], ["add", "theorem", "eq_of_fderiv_eq", []]]}]}, {"timestamp": 1684766383, "sha": "55ec6e9a", "message": "chore(analysis/special_functions/non_integrable): split (#19047)\nSplit out a fairly niche special-functions lemma, reducing the dependencies of this file. This decreases by 5 the length of the path to the Cauchy integral formula.", "changes": [{"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}]}, {"timestamp": 1684759802, "sha": "b353176c", "message": "feat(field_theory/splitting_field): fix the diamond (#18857)\nThis re-implements how instances for `splitting_field` in such a way that we can now avoid diamonds with the N, Z and Q-actions. This makes a lot more instances safe, which is good for e.g. flt-regular.\nMany thanks to @Vierkantor for many of the ideas and all the `distrib_smul` PRs that were needed for this.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["del", "def", "algebra_base", ["cyclotomic_field"]]]}, {"oldPath": "src/number_theory/cyclotomic/rat.lean", "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": []}]}, {"timestamp": 1684750998, "sha": "3b88f400", "message": "feat(probability/kernel/disintegration): disintegration of finite measures on product spaces (#18834)\nDisintegration of finite measures on `α × Ω`, where `Ω` is a standard Borel space.", "changes": [{"oldPath": "src/measure_theory/constructions/prod/basic.lean", "newPath": "src/measure_theory/constructions/prod/basic.lean", "changes": [["add", "theorem", "prod_mk", ["measurable_embedding"]]]}, {"oldPath": "src/probability/kernel/cond_cdf.lean", "newPath": "src/probability/kernel/cond_cdf.lean", "changes": [["add", "theorem", "measurable_measure_cond_cdf", ["probability_theory"]], ["add", "theorem", "measure_cond_cdf_Iic", ["probability_theory"]], ["add", "theorem", "measure_cond_cdf_univ", ["probability_theory"]]]}, {"oldPath": null, "newPath": "src/probability/kernel/disintegration.lean", "changes": [["add", "def", "cond_kernel", ["measure_theory", "measure"]], ["add", "theorem", "ae_cond_kernel_real_eq_one", ["probability_theory"]], ["add", "theorem", "cond_kernel_def", ["probability_theory"]], ["add", "def", "cond_kernel_real", ["probability_theory"]], ["add", "theorem", "cond_kernel_real_Iic", ["probability_theory"]], ["add", "theorem", "exists_cond_kernel", ["probability_theory"]], ["add", "theorem", "const_eq_comp_prod", ["probability_theory", "kernel"]], ["add", "theorem", "const_eq_comp_prod_real", ["probability_theory", "kernel"]], ["add", "theorem", "const_unit_eq_comp_prod", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_cond_kernel", ["probability_theory"]], ["add", "theorem", "lintegral_cond_kernel_mem", ["probability_theory"]], ["add", "theorem", "lintegral_cond_kernel_real", ["probability_theory"]], ["add", "theorem", "lintegral_cond_kernel_real_mem", ["probability_theory"]], ["add", "theorem", "lintegral_cond_kernel_real_univ", ["probability_theory"]], ["add", "theorem", "measure_eq_comp_prod", ["probability_theory"]], ["add", "theorem", "measure_eq_comp_prod_real", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_kernel_real_Iic", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_kernel_real_prod", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_kernel_real_univ", ["probability_theory"]]]}]}, {"timestamp": 1684742770, "sha": "13bce9a6", "message": "chore(linear_algebra/basis): `simp` lemmas about `basis.equiv_fun` (#19021)", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "basis_fun_equiv_fun", ["pi_Lp"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "equiv_fun_of_equiv_fun", ["basis"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["add", "theorem", "basis_fun_equiv_fun", ["pi"]]]}]}, {"timestamp": 1684734424, "sha": "4280f5f3", "message": "chore(*): add mathlib4 synchronization comments (#19057)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.limits`\n* `algebra.category.Module.kernels`\n* `algebra.category.Mon.filtered_colimits`\n* `algebra.char_p.mixed_char_zero`\n* `algebraic_geometry.presheafed_space`\n* `algebraic_geometry.projective_spectrum.topology`\n* `analysis.calculus.fderiv.basic`\n* `analysis.normed_space.star.mul`\n* `analysis.special_functions.complex.circle`\n* `analysis.special_functions.pow.nnreal`\n* `linear_algebra.matrix.charpoly.basic`\n* `linear_algebra.matrix.charpoly.coeff`\n* `linear_algebra.matrix.charpoly.linear_map`\n* `measure_theory.constructions.borel_space.basic`\n* `measure_theory.constructions.borel_space.complex`\n* `measure_theory.constructions.borel_space.continuous_linear_map`\n* `measure_theory.constructions.polish`\n* `measure_theory.function.ae_measurable_order`\n* `measure_theory.function.ess_sup`\n* `measure_theory.function.floor`\n* `measure_theory.function.simple_func`\n* `measure_theory.function.simple_func_dense`\n* `measure_theory.function.special_functions.basic`\n* `measure_theory.integral.lebesgue`\n* `measure_theory.measure.regular`\n* `measure_theory.measure.stieltjes`\n* `number_theory.class_number.admissible_card_pow_degree`\n* `ring_theory.graded_algebra.homogeneous_ideal`\n* `ring_theory.graded_algebra.homogeneous_localization`\n* `ring_theory.ideal.minimal_prime`\n* `ring_theory.polynomial_algebra`\n* `topology.algebra.module.locally_convex`\n* `topology.continuous_function.bounded`\n* `topology.sheaves.sheaf_condition.sites`", "changes": [{"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/kernels.lean", "newPath": "src/algebra/category/Module/kernels.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/filtered_colimits.lean", "newPath": "src/algebra/category/Mon/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/char_p/mixed_char_zero.lean", "newPath": "src/algebra/char_p/mixed_char_zero.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv/basic.lean", "newPath": "src/analysis/calculus/fderiv/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/mul.lean", "newPath": "src/analysis/normed_space/star/mul.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/circle.lean", "newPath": "src/analysis/special_functions/complex/circle.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/nnreal.lean", "newPath": "src/analysis/special_functions/pow/nnreal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/basic.lean", "newPath": "src/linear_algebra/matrix/charpoly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/linear_map.lean", "newPath": "src/linear_algebra/matrix/charpoly/linear_map.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space/basic.lean", "newPath": "src/measure_theory/constructions/borel_space/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space/complex.lean", "newPath": "src/measure_theory/constructions/borel_space/complex.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space/continuous_linear_map.lean", "newPath": "src/measure_theory/constructions/borel_space/continuous_linear_map.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_order.lean", "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": []}, {"oldPath": "src/measure_theory/function/floor.lean", "newPath": "src/measure_theory/function/floor.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func.lean", "newPath": "src/measure_theory/function/simple_func.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/basic.lean", "newPath": "src/measure_theory/function/special_functions/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/minimal_prime.lean", "newPath": "src/ring_theory/ideal/minimal_prime.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/locally_convex.lean", "newPath": "src/topology/algebra/module/locally_convex.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1684709878, "sha": "1d4d3ca5", "message": "feat(combinatorics/simple_graph): Szemerédi's Regularity Lemma (#11000)\nProve (finally!) the equitable version of the Szemerédi Regularity Lemma.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/regularity/lemma.lean", "changes": [["add", "theorem", "szemeredi_regularity", []]]}]}, {"timestamp": 1684699814, "sha": "b2c89893", "message": "chore(data/multiset/pi): correct names and reorder (#19050)\n* `multiset.pi_cons_injective` is about `multiset.pi.cons` so should have a `.` in its name.\n* `multiset.pi.cons_ext` is not an ext lemma, but more closely resembles eta-reduction.\nThis also groups together the lemmas about `pi.cons`.", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": [["add", "theorem", "cons_injective", ["finset", "pi"]], ["del", "theorem", "pi_cons_injective", ["finset"]]]}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": [["add", "theorem", "cons_eta", ["multiset", "pi"]], ["del", "theorem", "cons_ext", ["multiset", "pi"]], ["add", "theorem", "cons_injective", ["multiset", "pi"]], ["del", "theorem", "pi_cons_injective", ["multiset"]]]}]}, {"timestamp": 1684650422, "sha": "1b0a28e1", "message": "chore(*): add mathlib4 synchronization comments (#19055)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.projective`\n* `algebra.monoid_algebra.to_direct_sum`\n* `analysis.convex.strict_convex_space`\n* `analysis.convex.uniform`\n* `analysis.normed_space.banach`\n* `analysis.normed_space.bounded_linear_maps`\n* `analysis.normed_space.complemented`\n* `analysis.normed_space.finite_dimension`\n* `analysis.normed_space.mazur_ulam`\n* `analysis.special_functions.log.base`\n* `analysis.special_functions.log.monotone`\n* `analysis.special_functions.pow.real`\n* `combinatorics.additive.salem_spencer`\n* `data.is_R_or_C.lemmas`\n* `linear_algebra.adic_completion`\n* `linear_algebra.cross_product`\n* `measure_theory.measure.doubling`\n* `ring_theory.graded_algebra.basic`\n* `ring_theory.mv_polynomial.homogeneous`\n* `ring_theory.valuation.extend_to_localization`\n* `topology.algebra.module.star`", "changes": [{"oldPath": "src/algebra/category/Module/projective.lean", "newPath": "src/algebra/category/Module/projective.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "newPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": []}, {"oldPath": "src/analysis/convex/uniform.lean", "newPath": "src/analysis/convex/uniform.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/base.lean", "newPath": "src/analysis/special_functions/log/base.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/monotone.lean", "newPath": "src/analysis/special_functions/log/monotone.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/real.lean", "newPath": "src/analysis/special_functions/pow/real.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": []}, {"oldPath": "src/data/is_R_or_C/lemmas.lean", "newPath": "src/data/is_R_or_C/lemmas.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/cross_product.lean", "newPath": "src/linear_algebra/cross_product.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/doubling.lean", "newPath": "src/measure_theory/measure/doubling.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/homogeneous.lean", "newPath": "src/ring_theory/mv_polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/extend_to_localization.lean", "newPath": "src/ring_theory/valuation/extend_to_localization.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/star.lean", "newPath": "src/topology/algebra/module/star.lean", "changes": []}]}, {"timestamp": 1684609640, "sha": "33c67ae6", "message": "chore(*): add mathlib4 synchronization comments (#19042)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Mon.limits`\n* `algebra.char_p.local_ring`\n* `algebra.direct_sum.decomposition`\n* `algebra.direct_sum.internal`\n* `algebra.module.bimodule`\n* `algebraic_topology.fundamental_groupoid.fundamental_group`\n* `algebraic_topology.fundamental_groupoid.punit`\n* `analysis.complex.operator_norm`\n* `analysis.normed_space.affine_isometry`\n* `analysis.normed_space.banach_steinhaus`\n* `analysis.normed_space.completion`\n* `analysis.normed_space.extend`\n* `analysis.normed_space.multilinear`\n* `analysis.special_functions.complex.arg`\n* `analysis.special_functions.complex.log`\n* `analysis.special_functions.pow.complex`\n* `category_theory.bicategory.free`\n* `category_theory.groupoid.free_groupoid`\n* `category_theory.monoidal.free.coherence`\n* `category_theory.monoidal.of_chosen_finite_products.basic`\n* `category_theory.monoidal.types.basic`\n* `data.matrix.kronecker`\n* `data.nat.factorial.double_factorial`\n* `data.polynomial.expand`\n* `linear_algebra.matrix.is_diag`\n* `linear_algebra.tensor_product.matrix`\n* `linear_algebra.unitary_group`\n* `number_theory.legendre_symbol.mul_character`\n* `number_theory.multiplicity`\n* `ring_theory.finite_presentation`\n* `ring_theory.ideal.local_ring`\n* `ring_theory.jacobson_ideal`\n* `ring_theory.localization.at_prime`\n* `ring_theory.matrix_algebra`\n* `ring_theory.nakayama`\n* `set_theory.game.pgame`\n* `topology.category.TopCommRing`\n* `topology.fiber_bundle.constructions`\n* `topology.sheaves.limits`\n* `topology.sheaves.presheaf`\n* `topology.sheaves.presheaf_of_functions`\n* `topology.sheaves.sheaf`", "changes": [{"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": []}, {"oldPath": "src/algebra/char_p/local_ring.lean", "newPath": "src/algebra/char_p/local_ring.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/decomposition.lean", "newPath": "src/algebra/direct_sum/decomposition.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": []}, {"oldPath": "src/algebra/module/bimodule.lean", "newPath": "src/algebra/module/bimodule.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/fundamental_group.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/fundamental_group.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/punit.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/punit.lean", "changes": []}, {"oldPath": "src/analysis/complex/operator_norm.lean", "newPath": "src/analysis/complex/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach_steinhaus.lean", "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/completion.lean", "newPath": "src/analysis/normed_space/completion.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/complex.lean", "newPath": "src/analysis/special_functions/pow/complex.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/free.lean", "newPath": "src/category_theory/bicategory/free.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid/free_groupoid.lean", "newPath": "src/category_theory/groupoid/free_groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/coherence.lean", "newPath": "src/category_theory/monoidal/free/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products/basic.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types/basic.lean", "newPath": "src/category_theory/monoidal/types/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/double_factorial.lean", "newPath": "src/data/nat/factorial/double_factorial.lean", "changes": []}, {"oldPath": "src/data/polynomial/expand.lean", "newPath": "src/data/polynomial/expand.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/is_diag.lean", "newPath": "src/linear_algebra/matrix/is_diag.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product/matrix.lean", "newPath": "src/linear_algebra/tensor_product/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/mul_character.lean", "newPath": "src/number_theory/legendre_symbol/mul_character.lean", "changes": []}, {"oldPath": "src/number_theory/multiplicity.lean", "newPath": "src/number_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/finite_presentation.lean", "newPath": "src/ring_theory/finite_presentation.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/at_prime.lean", "newPath": "src/ring_theory/localization/at_prime.lean", "changes": []}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/nakayama.lean", "newPath": "src/ring_theory/nakayama.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/constructions.lean", "newPath": "src/topology/fiber_bundle/constructions.lean", "changes": []}, {"oldPath": "src/topology/sheaves/limits.lean", "newPath": "src/topology/sheaves/limits.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": []}]}, {"timestamp": 1684600112, "sha": "b9e46fe1", "message": "refactor(topology): fix definition of residual (#18962)\nThe current definition of `residual` in mathlib is incorrect for non-Baire spaces. This fixes it.", "changes": [{"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": [["add", "def", "countable_generate", ["filter"]], ["add", "theorem", "countable_generate_is_greatest", ["filter"]], ["add", "inductive", "countable_generate_sets", ["filter"]], ["add", "theorem", "le_countable_generate_iff_of_countable_Inter_filter", ["filter"]], ["add", "theorem", "mem_countable_generate_iff", ["filter"]]]}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": [["add", "theorem", "mem_residual_iff", []], ["add", "theorem", "residual_of_dense_Gδ", []], ["add", "theorem", "residual_of_dense_open", []]]}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["mod", "theorem", "dense_of_mem_residual", []]]}]}, {"timestamp": 1684579286, "sha": "9b33e5f3", "message": "feat(measure_theory/function/l1_space): generalize from fields to rings (#19052)", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "const_mul", ["measure_theory", "has_finite_integral"]], ["mod", "theorem", "mul_const", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "smul'", ["measure_theory", "has_finite_integral"]], ["mod", "theorem", "smul", ["measure_theory", "has_finite_integral"]], ["mod", "theorem", "has_finite_integral_smul_iff", ["measure_theory"]], ["add", "theorem", "integrable_const_mul_iff", ["measure_theory"]], ["add", "theorem", "integrable_mul_const_iff", ["measure_theory"]]]}]}, {"timestamp": 1684536770, "sha": "bf7ef0e8", "message": "feat(combinatorics/simple_graph/regularity): Increment partition (#19051)\nDefine the increment partition and prove its two crucial properties:\n* It has size depending only on the size of the original partition\n* It increases the energy by a fixed amount\nThis is all internal to the proof of SRL, so I made most lemmas `private`.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/chunk.lean", "newPath": "src/combinatorics/simple_graph/regularity/chunk.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/energy.lean", "newPath": "src/combinatorics/simple_graph/regularity/energy.lean", "changes": [["add", "theorem", "coe_energy", ["finpartition"]]]}, {"oldPath": "src/combinatorics/simple_graph/regularity/equitabilise.lean", "newPath": "src/combinatorics/simple_graph/regularity/equitabilise.lean", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/regularity/increment.lean", "changes": [["add", "theorem", "card_increment", ["szemeredi_regularity"]], ["add", "theorem", "energy_increment", ["szemeredi_regularity"]], ["add", "theorem", "increment_is_equipartition", ["szemeredi_regularity"]], ["add", "theorem", "off_diag_pairs_le_increment_energy", ["szemeredi_regularity"]], ["add", "theorem", "pair_contrib_lower_bound", ["szemeredi_regularity"]], ["add", "theorem", "uniform_add_nonuniform_eq_off_diag_pairs", ["szemeredi_regularity"]]]}, {"oldPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "newPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "changes": []}]}, {"timestamp": 1684514914, "sha": "f51de876", "message": "feat(combinatorics/simple_graph/regularity/chunk): Partition of a part (#18371)\nThe heart of the calculation of Szemerédi Regularity Lemma. Define the partition of a part of the original partition and show it locally increases the energy.\nThis is all internal to the proof of SRL, so I made most lemmas `private`", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/regularity/chunk.lean", "changes": [["add", "theorem", "bUnion_star_subset_nonuniform_witness", ["szemeredi_regularity"]], ["add", "theorem", "card_bUnion_star_le_m_add_one_card_star_mul", ["szemeredi_regularity"]], ["add", "theorem", "card_chunk", ["szemeredi_regularity"]], ["add", "theorem", "card_eq_of_mem_parts_chunk", ["szemeredi_regularity"]], ["add", "theorem", "card_le_m_add_one_of_mem_chunk_parts", ["szemeredi_regularity"]], ["add", "theorem", "edge_density_chunk_not_uniform", ["szemeredi_regularity"]], ["add", "theorem", "edge_density_chunk_uniform", ["szemeredi_regularity"]], ["add", "theorem", "m_le_card_of_mem_chunk_parts", ["szemeredi_regularity"]], ["add", "theorem", "star_subset_chunk", ["szemeredi_regularity"]]]}, {"oldPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "newPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "changes": [["add", "theorem", "le_card_nonuniform_witness", ["simple_graph"]], ["del", "theorem", "nonuniform_witness_card_le", ["simple_graph"]]]}]}, {"timestamp": 1684502184, "sha": "ef7403fe", "message": "chore(.github/workflows): don't rely on linkifier in maintainer merge messages (#19046)\nNot tested, and I'm just guessing that the relevant properties exist as I can't find the relevant API docs...", "changes": [{"oldPath": ".github/workflows/maintainer_merge_comment.yml", "newPath": ".github/workflows/maintainer_merge_comment.yml", "changes": []}, {"oldPath": ".github/workflows/maintainer_merge_review.yml", "newPath": ".github/workflows/maintainer_merge_review.yml", "changes": []}, {"oldPath": ".github/workflows/maintainer_merge_review_comment.yml", "newPath": ".github/workflows/maintainer_merge_review_comment.yml", "changes": []}]}, {"timestamp": 1684502183, "sha": "a7c017d7", "message": "chore(ring_theory/localization/away): split (#19041)\nThis breaks off a large initial segment of the [longest chain](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/port.20progress/near/359494005) remaining to port.", "changes": [{"oldPath": "src/algebra/category/Ring/instances.lean", "newPath": "src/algebra/category/Ring/instances.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/localization/away/adjoin_root.lean", "changes": [["add", "theorem", "adjoin_inv", ["is_localization"]], ["add", "theorem", "finite_presentation", ["is_localization", "away"]]]}, {"oldPath": "src/ring_theory/localization/away.lean", "newPath": "src/ring_theory/localization/away/basic.lean", "changes": [["del", "theorem", "adjoin_inv", ["is_localization"]], ["del", "theorem", "finite_presentation", ["is_localization", "away"]]]}, {"oldPath": "src/ring_theory/ring_hom/integral.lean", "newPath": "src/ring_theory/ring_hom/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_hom_properties.lean", "newPath": "src/ring_theory/ring_hom_properties.lean", "changes": []}]}, {"timestamp": 1684497673, "sha": "915591b2", "message": "chore(analysis/convex/cone/basic): split (#19043)\nSplit out the inner product space material (the dual cone) from `analysis/convex/cone/basic`. What's left imports almost nothing, and can probably be ported immediately.", "changes": [{"oldPath": "src/analysis/convex/cone/basic.lean", "newPath": "src/analysis/convex/cone/basic.lean", "changes": [["del", "theorem", "hyperplane_separation_of_nonempty_of_is_closed_of_nmem", ["convex_cone"]], ["del", "theorem", "inner_dual_cone_of_inner_dual_cone_eq_self", ["convex_cone"]], ["del", "theorem", "pointed_of_nonempty_of_is_closed", ["convex_cone"]], ["del", "theorem", "inner_dual_cone_Union", []], ["del", "theorem", "inner_dual_cone_empty", []], ["del", "theorem", "inner_dual_cone_eq_Inter_inner_dual_cone_singleton", []], ["del", "theorem", "inner_dual_cone_insert", []], ["del", "theorem", "inner_dual_cone_le_inner_dual_cone", []], ["del", "theorem", "inner_dual_cone_sUnion", []], ["del", "theorem", "inner_dual_cone_singleton", []], ["del", "theorem", "inner_dual_cone_union", []], ["del", "theorem", "inner_dual_cone_univ", []], ["del", "theorem", "inner_dual_cone_zero", []], ["del", "theorem", "is_closed_inner_dual_cone", []], ["del", "theorem", "mem_inner_dual_cone", []], ["del", "theorem", "pointed_inner_dual_cone", []], ["del", "def", "inner_dual_cone", ["set"]]]}, {"oldPath": null, "newPath": "src/analysis/convex/cone/dual.lean", "changes": [["add", "theorem", "hyperplane_separation_of_nonempty_of_is_closed_of_nmem", ["convex_cone"]], ["add", "theorem", "inner_dual_cone_of_inner_dual_cone_eq_self", ["convex_cone"]], ["add", "theorem", "pointed_of_nonempty_of_is_closed", ["convex_cone"]], ["add", "theorem", "inner_dual_cone_Union", []], ["add", "theorem", "inner_dual_cone_empty", []], ["add", "theorem", "inner_dual_cone_eq_Inter_inner_dual_cone_singleton", []], ["add", "theorem", "inner_dual_cone_insert", []], ["add", "theorem", "inner_dual_cone_le_inner_dual_cone", []], ["add", "theorem", "inner_dual_cone_sUnion", []], ["add", "theorem", "inner_dual_cone_singleton", []], ["add", "theorem", "inner_dual_cone_union", []], ["add", "theorem", "inner_dual_cone_univ", []], ["add", "theorem", "inner_dual_cone_zero", []], ["add", "theorem", "is_closed_inner_dual_cone", []], ["add", "theorem", "mem_inner_dual_cone", []], ["add", "theorem", "pointed_inner_dual_cone", []], ["add", "def", "inner_dual_cone", ["set"]]]}, {"oldPath": "src/analysis/convex/cone/proper.lean", "newPath": "src/analysis/convex/cone/proper.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach/extension.lean", "newPath": "src/analysis/normed_space/hahn_banach/extension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach/separation.lean", "newPath": "src/analysis/normed_space/hahn_banach/separation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}]}, {"timestamp": 1684481862, "sha": "7ae139f9", "message": "feat(linear_algebra/matrix/charpoly/minpoly): `minpoly` is unaffected by `to_lin` and `to_matrix` (#19036)", "changes": [{"oldPath": "src/linear_algebra/matrix/charpoly/minpoly.lean", "newPath": "src/linear_algebra/matrix/charpoly/minpoly.lean", "changes": [["add", "theorem", "minpoly_to_matrix'", ["linear_map"]], ["add", "theorem", "minpoly_to_matrix", ["linear_map"]], ["add", "theorem", "minpoly_to_lin'", ["matrix"]], ["add", "theorem", "minpoly_to_lin", ["matrix"]]]}]}, {"timestamp": 1684453224, "sha": "fd5edc43", "message": "chore(measure_theory/{constructions/prod,measure/lebesgue}): split (#19039)\nReorganize some files in measure theory, with the goal of removing the dependence of Lebesgue measure on the Bochner integral.\n`measure_theory/constructions/prod` is split into `prod/basic` and `prod/integral`; the former imports the Lebesgue integral but not the Bochner integral.\n`measure_theory/measure/haar` is renamed `measure_theory/measure/haar/basic`.\n`measure_theory/measure/haar_of_inner` is renamed `measure_theory/measure/haar/inner_product_space`.\n`measure_theory/measure/haar_of_basis` is renamed `measure_theory/measure/haar/of_basis`.\n`measure_theory/measure/lebesgue` is split into `measure_theory/measure/lebesgue/basic` and `measure_theory/measure/lebesgue/integral`, with the former not importing the Bochner integral.\n`measure_theory/measure/complex_lebesgue` is renamed `measure_theory/measure/lebesgue/complex`.\n`measure_theory/measure/haar_lebesgue` is split into `measure_theory/measure/lebesgue/eq_haar` and `measure_theory/measure/haar/normed_space`, with the former not importing the Bochner integral.\nA few lemmas about Haar measure in normed spaces or fields are also moved from `measure_theory/group/measure` to the newly-created `measure_theory/measure/haar/normed_space`, since the former no longer imports `normed_space`.", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": []}, {"oldPath": "src/analysis/calculus/bump_function_findim.lean", "newPath": "src/analysis/calculus/bump_function_findim.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/measure.lean", "newPath": "src/analysis/convex/measure.lean", "changes": []}, {"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/analysis/fourier/fourier_transform.lean", "newPath": "src/analysis/fourier/fourier_transform.lean", "changes": []}, {"oldPath": "src/analysis/fourier/poisson_summation.lean", "newPath": "src/analysis/fourier/poisson_summation.lean", "changes": []}, {"oldPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "newPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/improper_integrals.lean", "newPath": "src/analysis/special_functions/improper_integrals.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/japanese_bracket.lean", "newPath": "src/analysis/special_functions/japanese_bracket.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod/basic.lean", "changes": [["del", "theorem", "measurable_set_integrable", []], ["del", "theorem", "fst", ["measure_theory", "ae_strongly_measurable"]], ["del", "theorem", "integral_prod_right'", ["measure_theory", "ae_strongly_measurable"]], ["del", "theorem", "prod_mk_left", ["measure_theory", "ae_strongly_measurable"]], ["del", "theorem", "prod_swap", ["measure_theory", "ae_strongly_measurable"]], ["del", "theorem", "snd", ["measure_theory", "ae_strongly_measurable"]], ["del", "theorem", "continuous_integral_integral", ["measure_theory"]], ["del", "theorem", "has_finite_integral_prod_iff'", ["measure_theory"]], ["del", "theorem", "has_finite_integral_prod_iff", ["measure_theory"]], ["del", "theorem", "integral_norm_prod_left", ["measure_theory", "integrable"]], ["del", "theorem", "integral_norm_prod_right", ["measure_theory", "integrable"]], ["del", "theorem", "integral_prod_left", ["measure_theory", "integrable"]], ["del", "theorem", "integral_prod_right", ["measure_theory", "integrable"]], ["del", "theorem", "prod_left_ae", ["measure_theory", "integrable"]], ["del", "theorem", "prod_right_ae", ["measure_theory", "integrable"]], ["del", "theorem", "swap", ["measure_theory", "integrable"]], ["del", "theorem", "integrable_prod_iff'", ["measure_theory"]], ["del", "theorem", "integrable_prod_iff", ["measure_theory"]], ["del", "theorem", "integrable_prod_mul", ["measure_theory"]], ["del", "theorem", "integrable_swap_iff", ["measure_theory"]], ["del", "theorem", "integral_fn_integral_add", ["measure_theory"]], ["del", "theorem", "integral_fn_integral_sub", ["measure_theory"]], ["del", "theorem", "integral_integral", ["measure_theory"]], ["del", "theorem", "integral_integral_add'", ["measure_theory"]], ["del", "theorem", "integral_integral_add", ["measure_theory"]], ["del", "theorem", "integral_integral_sub'", ["measure_theory"]], ["del", "theorem", "integral_integral_sub", ["measure_theory"]], ["del", "theorem", "integral_integral_swap", ["measure_theory"]], ["del", "theorem", "integral_integral_symm", ["measure_theory"]], ["del", "theorem", "integral_prod", ["measure_theory"]], ["del", "theorem", "integral_prod_mul", ["measure_theory"]], ["del", "theorem", "integral_prod_swap", ["measure_theory"]], ["del", "theorem", "integral_prod_symm", ["measure_theory"]], ["del", "theorem", "lintegral_fn_integral_sub", ["measure_theory"]], ["del", "theorem", "integrable_measure_prod_mk_left", ["measure_theory", "measure"]], ["del", "theorem", "set_integral_prod", ["measure_theory"]], ["del", "theorem", "set_integral_prod_mul", ["measure_theory"]], ["del", "theorem", "integral_prod_left'", ["measure_theory", "strongly_measurable"]], ["del", "theorem", "integral_prod_left", ["measure_theory", "strongly_measurable"]], ["del", "theorem", "integral_prod_right'", ["measure_theory", "strongly_measurable"]], ["del", "theorem", "integral_prod_right", ["measure_theory", "strongly_measurable"]]]}, {"oldPath": null, "newPath": "src/measure_theory/constructions/prod/integral.lean", "changes": [["add", "theorem", "measurable_set_integrable", []], ["add", "theorem", "fst", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "integral_prod_right'", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "prod_mk_left", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "prod_swap", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "snd", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "continuous_integral_integral", ["measure_theory"]], ["add", "theorem", "has_finite_integral_prod_iff'", ["measure_theory"]], ["add", "theorem", "has_finite_integral_prod_iff", ["measure_theory"]], ["add", "theorem", "integral_norm_prod_left", ["measure_theory", "integrable"]], ["add", "theorem", "integral_norm_prod_right", ["measure_theory", "integrable"]], ["add", "theorem", "integral_prod_left", ["measure_theory", "integrable"]], ["add", "theorem", "integral_prod_right", ["measure_theory", "integrable"]], ["add", "theorem", "prod_left_ae", ["measure_theory", "integrable"]], ["add", "theorem", "prod_right_ae", ["measure_theory", "integrable"]], ["add", "theorem", "swap", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_prod_iff'", ["measure_theory"]], ["add", "theorem", "integrable_prod_iff", ["measure_theory"]], ["add", "theorem", "integrable_prod_mul", ["measure_theory"]], ["add", "theorem", "integrable_swap_iff", ["measure_theory"]], ["add", "theorem", "integral_fn_integral_add", ["measure_theory"]], ["add", "theorem", "integral_fn_integral_sub", ["measure_theory"]], ["add", "theorem", "integral_integral", ["measure_theory"]], ["add", "theorem", "integral_integral_add'", ["measure_theory"]], ["add", "theorem", "integral_integral_add", ["measure_theory"]], ["add", "theorem", "integral_integral_sub'", ["measure_theory"]], ["add", "theorem", "integral_integral_sub", ["measure_theory"]], ["add", "theorem", "integral_integral_swap", ["measure_theory"]], ["add", "theorem", "integral_integral_symm", ["measure_theory"]], ["add", "theorem", "integral_prod", ["measure_theory"]], ["add", "theorem", "integral_prod_mul", ["measure_theory"]], ["add", "theorem", "integral_prod_swap", ["measure_theory"]], ["add", "theorem", "integral_prod_symm", ["measure_theory"]], ["add", "theorem", "lintegral_fn_integral_sub", ["measure_theory"]], ["add", "theorem", "integrable_measure_prod_mk_left", ["measure_theory", "measure"]], ["add", "theorem", "set_integral_prod", ["measure_theory"]], ["add", "theorem", "set_integral_prod_mul", ["measure_theory"]], ["add", "theorem", "integral_prod_left'", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_prod_left", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_prod_right'", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_prod_right", ["measure_theory", "strongly_measurable"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/one_dim.lean", "newPath": "src/measure_theory/covering/one_dim.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/group/geometry_of_numbers.lean", "newPath": "src/measure_theory/group/geometry_of_numbers.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/torus_integral.lean", "newPath": "src/measure_theory/integral/torus_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_of_inner.lean", "newPath": "src/measure_theory/measure/haar/inner_product_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/measure/haar/normed_space.lean", "changes": [["add", "theorem", "integral_comp_inv_smul", ["measure_theory", "measure"]], ["add", "theorem", "integral_comp_inv_smul_of_nonneg", ["measure_theory", "measure"]], ["add", "theorem", "integral_comp_smul", ["measure_theory", "measure"]], ["add", "theorem", "integral_comp_smul_of_nonneg", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/haar_of_basis.lean", "newPath": "src/measure_theory/measure/haar/of_basis.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_quotient.lean", "newPath": "src/measure_theory/measure/haar/quotient.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue/basic.lean", "changes": [["del", "theorem", "integral_comp_neg_Iic", []], ["del", "theorem", "integral_comp_neg_Ioi", []], ["del", "theorem", "integrable_of_summable_norm_Icc", ["real"]], ["del", "theorem", "volume_region_between_eq_integral'", []], ["del", "theorem", "volume_region_between_eq_integral", []]]}, {"oldPath": "src/measure_theory/measure/complex_lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue/complex.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue/eq_haar.lean", "changes": [["del", "theorem", "integral_comp_inv_smul", ["measure_theory", "measure"]], ["del", "theorem", "integral_comp_inv_smul_of_nonneg", ["measure_theory", "measure"]], ["del", "theorem", "integral_comp_smul", ["measure_theory", "measure"]], ["del", "theorem", "integral_comp_smul_of_nonneg", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/lebesgue/integral.lean", "changes": [["add", "theorem", "integral_comp_neg_Iic", []], ["add", "theorem", "integral_comp_neg_Ioi", []], ["add", "theorem", "integrable_of_summable_norm_Icc", ["real"]], ["add", "theorem", "volume_region_between_eq_integral'", []], ["add", "theorem", "volume_region_between_eq_integral", []]]}, {"oldPath": "src/measure_theory/measure/portmanteau.lean", "newPath": "src/measure_theory/measure/portmanteau.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/measure.lean", "newPath": "src/number_theory/liouville/measure.lean", "changes": []}, {"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": []}, {"oldPath": "src/probability/kernel/basic.lean", "newPath": "src/probability/kernel/basic.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1684453222, "sha": "aa666983", "message": "feat(topology/algebra/module/star): continuity results for star_modules (#19037)\nNotably this adds `starL`.\nThis also fixes some unnecessary typeclass arguments in `star_linear_equiv`.", "changes": [{"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["add", "theorem", "starₗᵢ_to_continuous_linear_equiv", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/module/star.lean", "changes": [["add", "theorem", "continuous_decompose_prod_adjoint", []], ["add", "theorem", "continuous_decompose_prod_adjoint_symm", []], ["add", "theorem", "continuous_self_adjoint_part", []], ["add", "theorem", "continuous_skew_adjoint_part", []], ["add", "def", "self_adjoint_partL", []], ["add", "def", "skew_adjoint_partL", []], ["add", "def", "starL", []], ["add", "def", "decompose_prod_adjointL", ["star_module"]]]}]}, {"timestamp": 1684447243, "sha": "83a66c87", "message": "chore(measure_theory/special_functions/basic): split (#19040)\nSplit out the facts about `is_R_or_C` from `measure_theory/function/special_functions/basic` (a foundational file, imported by the Bochner integral construction). These facts are heavier-weight than one would expect because the fact that an `is_R_or_C` field is a proper space currently passes through the corresponding fact for a general finite-dimensional normed space.", "changes": [{"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/basic.lean", "newPath": "src/measure_theory/function/special_functions/basic.lean", "changes": [["del", "theorem", "im", ["ae_measurable"]], ["del", "theorem", "re", ["ae_measurable"]], ["del", "theorem", "ae_measurable_of_re_im", []], ["del", "theorem", "measurable_im", ["is_R_or_C"]], ["del", "theorem", "measurable_of_real", ["is_R_or_C"]], ["del", "theorem", "measurable_re", ["is_R_or_C"]], ["del", "theorem", "im", ["measurable"]], ["del", "theorem", "re", ["measurable"]], ["del", "theorem", "measurable_of_re_im", []]]}, {"oldPath": null, "newPath": "src/measure_theory/function/special_functions/is_R_or_C.lean", "changes": [["add", "theorem", "im", ["ae_measurable"]], ["add", "theorem", "re", ["ae_measurable"]], ["add", "theorem", "ae_measurable_of_re_im", []], ["add", "theorem", "measurable_im", ["is_R_or_C"]], ["add", "theorem", "measurable_of_real", ["is_R_or_C"]], ["add", "theorem", "measurable_re", ["is_R_or_C"]], ["add", "theorem", "im", ["measurable"]], ["add", "theorem", "re", ["measurable"]], ["add", "theorem", "measurable_of_re_im", []]]}]}, {"timestamp": 1684432679, "sha": "95a87616", "message": "chore(category_theory/monoidal/types): split file (#19035)", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/category_theory/enriched/basic.lean", "newPath": "src/category_theory/enriched/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/types.lean", "newPath": "src/category_theory/monoidal/internal/types.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products/basic.lean", "changes": [["del", "theorem", "braiding_naturality", ["category_theory", "monoidal_of_chosen_finite_products"]], ["del", "theorem", "hexagon_forward", ["category_theory", "monoidal_of_chosen_finite_products"]], ["del", "theorem", "hexagon_reverse", ["category_theory", "monoidal_of_chosen_finite_products"]], ["del", "theorem", "symmetry", ["category_theory", "monoidal_of_chosen_finite_products"]], ["del", "def", "symmetric_of_chosen_finite_products", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/of_chosen_finite_products/symmetric.lean", "changes": [["add", "theorem", "braiding_naturality", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "hexagon_forward", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "hexagon_reverse", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "symmetry", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "def", "symmetric_of_chosen_finite_products", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types/basic.lean", "changes": [["del", "theorem", "braiding_hom_apply", ["category_theory"]], ["del", "theorem", "braiding_inv_apply", ["category_theory"]], ["del", "def", "coyoneda_tensor_unit", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/types/coyoneda.lean", "changes": [["add", "def", "coyoneda_tensor_unit", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/types/symmetric.lean", "changes": [["add", "theorem", "braiding_hom_apply", ["category_theory"]], ["add", "theorem", "braiding_inv_apply", ["category_theory"]]]}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": []}]}, {"timestamp": 1684432678, "sha": "74403a3b", "message": "chore(algebra/category/Module/monoidal): split file (#19034)", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal/basic.lean", "changes": [["del", "def", "braiding", ["Module"]], ["del", "theorem", "braiding_naturality", ["Module"]], ["del", "theorem", "hexagon_forward", ["Module"]], ["del", "theorem", "hexagon_reverse", ["Module"]], ["del", "theorem", "ihom_coev_app", ["Module"]], ["del", "theorem", "ihom_ev_app", ["Module"]], ["del", "theorem", "ihom_map_apply", ["Module"]], ["del", "theorem", "braiding_hom_apply", ["Module", "monoidal_category"]], ["del", "theorem", "braiding_inv_apply", ["Module", "monoidal_category"]], ["del", "theorem", "monoidal_closed_curry", ["Module"]], ["del", "def", "monoidal_closed_hom_equiv", ["Module"]], ["del", "theorem", "monoidal_closed_pre_app", ["Module"]], ["del", "theorem", "monoidal_closed_uncurry", ["Module"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/monoidal/closed.lean", "changes": [["add", "theorem", "ihom_coev_app", ["Module"]], ["add", "theorem", "ihom_ev_app", ["Module"]], ["add", "theorem", "ihom_map_apply", ["Module"]], ["add", "theorem", "monoidal_closed_curry", ["Module"]], ["add", "def", "monoidal_closed_hom_equiv", ["Module"]], ["add", "theorem", "monoidal_closed_pre_app", ["Module"]], ["add", "theorem", "monoidal_closed_uncurry", ["Module"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/monoidal/symmetric.lean", "changes": [["add", "def", "braiding", ["Module"]], ["add", "theorem", "braiding_hom_apply", ["Module", "monoidal_category"]], ["add", "theorem", "braiding_inv_apply", ["Module", "monoidal_category"]], ["add", "theorem", "braiding_naturality", ["Module", "monoidal_category"]], ["add", "theorem", "hexagon_forward", ["Module", "monoidal_category"]], ["add", "theorem", "hexagon_reverse", ["Module", "monoidal_category"]]]}, {"oldPath": "src/algebra/category/fgModule/basic.lean", "newPath": "src/algebra/category/fgModule/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": []}]}, {"timestamp": 1684423164, "sha": "5a4ea845", "message": "chore(data/set/Union_lift) generalize Union_lift to Sort (#19033)", "changes": [{"oldPath": "src/data/set/Union_lift.lean", "newPath": "src/data/set/Union_lift.lean", "changes": []}]}, {"timestamp": 1684418074, "sha": "8f9fea08", "message": "refactor(analysis/convex/specific_functions): split (#19031)\nSplit `analysis/convex/specific_function` into a part which doesn't require differentiation (as of #19026) and a part which does. This removes the dependence of `measure_theory/integral/bochner` on differentiation, and decreases by 11 the length of the longest path in mathlib.\nSee [Zulip](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Shortcut.20to.20integration)", "changes": [{"oldPath": "src/analysis/calculus/bump_function_inner.lean", "newPath": "src/analysis/calculus/bump_function_inner.lean", "changes": []}, {"oldPath": "src/analysis/calculus/monotone.lean", "newPath": "src/analysis/calculus/monotone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions/basic.lean", "changes": [["del", "theorem", "deriv2_sqrt_mul_log", []], ["del", "theorem", "deriv_sqrt_mul_log'", []], ["del", "theorem", "deriv_sqrt_mul_log", []], ["del", "theorem", "strict_convex_on_pow", ["even"]], ["del", "theorem", "prod_nonneg_of_card_nonpos_even", ["finset"]], ["del", "theorem", "has_deriv_at_sqrt_mul_log", []], ["del", "theorem", "int_prod_range_nonneg", []], ["del", "theorem", "int_prod_range_pos", []], ["del", "theorem", "pow_sum_div_card_le_sum_pow", ["nnreal"]], ["del", "theorem", "pow_sum_div_card_le_sum_pow", ["real"]], ["del", "theorem", "strict_concave_on_cos_Icc", []], ["del", "theorem", "strict_concave_on_sin_Icc", []], ["del", "theorem", "strict_concave_on_sqrt_mul_log_Ioi", []], ["del", "theorem", "strict_convex_on_pow", []], ["del", "theorem", "strict_convex_on_zpow", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/specific_functions/deriv.lean", "changes": [["add", "theorem", "deriv2_sqrt_mul_log", []], ["add", "theorem", "deriv_sqrt_mul_log'", []], ["add", "theorem", "deriv_sqrt_mul_log", []], ["add", "theorem", "strict_convex_on_pow", ["even"]], ["add", "theorem", "prod_nonneg_of_card_nonpos_even", ["finset"]], ["add", "theorem", "has_deriv_at_sqrt_mul_log", []], ["add", "theorem", "int_prod_range_nonneg", []], ["add", "theorem", "int_prod_range_pos", []], ["add", "theorem", "strict_concave_on_cos_Icc", []], ["add", "theorem", "strict_concave_on_sin_Icc", []], ["add", "theorem", "strict_concave_on_sqrt_mul_log_Ioi", []], ["add", "theorem", "strict_convex_on_pow", []], ["add", "theorem", "strict_convex_on_zpow", []]]}, {"oldPath": "src/analysis/fourier/add_circle.lean", "newPath": "src/analysis/fourier/add_circle.lean", "changes": []}, {"oldPath": "src/analysis/fourier/fourier_transform.lean", "newPath": "src/analysis/fourier/fourier_transform.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": [["add", "theorem", "pow_sum_div_card_le_sum_pow", ["nnreal"]], ["add", "theorem", "pow_sum_div_card_le_sum_pow", ["real"]]]}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polar_coord.lean", "newPath": "src/analysis/special_functions/polar_coord.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/number_theory/bertrand.lean", "newPath": "src/number_theory/bertrand.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}]}, {"timestamp": 1684401190, "sha": "df0098f0", "message": "feat(field_theory/minpoly/basic): `minpoly` is unaffected by injective `alg_hom`s (#19030)", "changes": [{"oldPath": "src/field_theory/minpoly/basic.lean", "newPath": "src/field_theory/minpoly/basic.lean", "changes": [["add", "theorem", "minpoly_alg_equiv", ["minpoly"]], ["add", "theorem", "minpoly_alg_hom", ["minpoly"]]]}]}, {"timestamp": 1684393277, "sha": "50251fd6", "message": "chore(*): add mathlib4 synchronization comments (#19032)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.direct_sum.algebra`\n* `algebra.direct_sum.ring`\n* `algebra.homology.opposite`\n* `algebra.homology.quasi_iso`\n* `algebraic_topology.fundamental_groupoid.basic`\n* `analysis.box_integral.partition.subbox_induction`\n* `analysis.complex.circle`\n* `analysis.normed_space.is_R_or_C`\n* `analysis.normed_space.operator_norm`\n* `analysis.special_functions.trigonometric.angle`\n* `analysis.special_functions.trigonometric.basic`\n* `analysis.special_functions.trigonometric.inverse`\n* `category_theory.limits.constructions.over.products`\n* `category_theory.preadditive.endo_functor`\n* `combinatorics.simple_graph.ends.properties`\n* `combinatorics.simple_graph.finsubgraph`\n* `linear_algebra.multilinear.finite_dimensional`\n* `ring_theory.free_comm_ring`\n* `ring_theory.polynomial.quotient`\n* `ring_theory.tensor_product`\n* `topology.algebra.module.finite_dimension`\n* `topology.metric_space.partition_of_unity`", "changes": [{"oldPath": "src/algebra/direct_sum/algebra.lean", "newPath": "src/algebra/direct_sum/algebra.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/homology/opposite.lean", "newPath": "src/algebra/homology/opposite.lean", "changes": []}, {"oldPath": "src/algebra/homology/quasi_iso.lean", "newPath": "src/algebra/homology/quasi_iso.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/basic.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/subbox_induction.lean", "newPath": "src/analysis/box_integral/partition/subbox_induction.lean", "changes": []}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/products.lean", "newPath": "src/category_theory/limits/constructions/over/products.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/endo_functor.lean", "newPath": "src/category_theory/preadditive/endo_functor.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/ends/properties.lean", "newPath": "src/combinatorics/simple_graph/ends/properties.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/finsubgraph.lean", "newPath": "src/combinatorics/simple_graph/finsubgraph.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "newPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/quotient.lean", "newPath": "src/ring_theory/polynomial/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/metric_space/partition_of_unity.lean", "newPath": "src/topology/metric_space/partition_of_unity.lean", "changes": []}]}, {"timestamp": 1684393276, "sha": "c720ca16", "message": "chore(number_theory/modular_forms): don't define jacobi_theta on subtype (#19029)\nIn a previous PR, the Jacobi theta function was defined on the subtype `ℍ` of `ℂ` and this is slightly annoying to work with. This PR tweaks it to be a function on `ℂ` (whose values outside `ℍ` are uninteresting, but well-defined). Split off from #19027.", "changes": [{"oldPath": "src/number_theory/modular_forms/jacobi_theta.lean", "newPath": "src/number_theory/modular_forms/jacobi_theta.lean", "changes": [["add", "theorem", "continuous_at_jacobi_theta", []], ["del", "theorem", "continuous_jacobi_theta", []], ["add", "theorem", "differentiable_at_jacobi_theta", []], ["del", "theorem", "differentiable_at_tsum_exp_mul_sq", []], ["mod", "theorem", "has_sum_nat_jacobi_theta", []], ["mod", "theorem", "jacobi_theta_T_sq_smul", []], ["mod", "theorem", "jacobi_theta_eq_tsum_nat", []], ["add", "theorem", "jacobi_theta_two_add", []], ["del", "theorem", "jacobi_theta_two_vadd", []], ["mod", "theorem", "mdifferentiable_jacobi_theta", []], ["mod", "theorem", "norm_jacobi_theta_sub_one_le", []]]}]}, {"timestamp": 1684393275, "sha": "56b71f0b", "message": "feat(algebra/category/Module/change_of_rings): coextension of scalars (#15958)", "changes": [{"oldPath": "src/algebra/category/Module/change_of_rings.lean", "newPath": "src/algebra/category/Module/change_of_rings.lean", "changes": [["add", "def", "map'", ["category_theory", "Module", "coextend_scalars"]], ["add", "theorem", "map_apply", ["category_theory", "Module", "coextend_scalars"]], ["add", "def", "obj'", ["category_theory", "Module", "coextend_scalars"]], ["add", "theorem", "smul_apply'", ["category_theory", "Module", "coextend_scalars"]], ["add", "theorem", "smul_apply", ["category_theory", "Module", "coextend_scalars"]], ["add", "def", "coextend_scalars", ["category_theory", "Module"]], ["add", "def", "restrict_coextend_scalars_adj", ["category_theory", "Module"]], ["add", "def", "from_restriction", ["category_theory", "Module", "restriction_coextension_adj", "hom_equiv"]], ["add", "def", "to_restriction", ["category_theory", "Module", "restriction_coextension_adj", "hom_equiv"]]]}]}, {"timestamp": 1684389394, "sha": "7daeaf30", "message": "feat(nat/factorial): add double factorials (#18994)\nAdd double factorials.", "changes": [{"oldPath": null, "newPath": "src/data/nat/factorial/double_factorial.lean", "changes": [["add", "def", "double_factorial", ["nat"]], ["add", "theorem", "double_factorial_add_one", ["nat"]], ["add", "theorem", "double_factorial_add_two", ["nat"]], ["add", "theorem", "double_factorial_eq_prod_even", ["nat"]], ["add", "theorem", "double_factorial_eq_prod_odd", ["nat"]], ["add", "theorem", "double_factorial_two_mul", ["nat"]], ["add", "theorem", "factorial_eq_mul_double_factorial", ["nat"]]]}]}, {"timestamp": 1684362980, "sha": "a8b2226c", "message": "feat(analysis/convex/specific_functions): elementary convexity proofs (#19026)\nGive elementary proofs for the convexity of `pow`, `zpow`, `exp`, `log` and `rpow`, avoiding the second derivative test.\nSee [Zulip](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Shortcut.20to.20integration)", "changes": [{"oldPath": "src/analysis/convex/slope.lean", "newPath": "src/analysis/convex/slope.lean", "changes": [["add", "theorem", "secant_mono", ["convex_on"]], ["add", "theorem", "secant_mono_aux1", ["convex_on"]], ["add", "theorem", "secant_mono_aux2", ["convex_on"]], ["add", "theorem", "secant_mono_aux3", ["convex_on"]], ["add", "theorem", "secant_strict_mono", ["strict_concave_on"]], ["add", "theorem", "secant_strict_mono", ["strict_convex_on"]], ["add", "theorem", "secant_strict_mono_aux1", ["strict_convex_on"]], ["add", "theorem", "secant_strict_mono_aux2", ["strict_convex_on"]], ["add", "theorem", "secant_strict_mono_aux3", ["strict_convex_on"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["mod", "theorem", "convex_on_zpow", []], ["add", "theorem", "one_add_mul_self_le_rpow_one_add", []], ["add", "theorem", "one_add_mul_self_lt_rpow_one_add", []]]}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "log_lt_sub_one_of_pos", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["del", "theorem", "add_one_le_exp_of_nonpos", ["real"]], ["add", "theorem", "add_one_lt_exp_of_neg", ["real"]], ["add", "theorem", "add_one_lt_exp_of_nonzero", ["real"]], ["add", "theorem", "add_one_lt_exp_of_pos", ["real"]], ["add", "theorem", "exp_bound_div_one_sub_of_interval'", ["real"]], ["del", "theorem", "exp_bound_div_one_sub_of_interval_approx", ["real"]], ["add", "theorem", "one_sub_le_exp_minus_of_nonneg", ["real"]], ["del", "theorem", "one_sub_le_exp_minus_of_pos", ["real"]], ["add", "theorem", "one_sub_lt_exp_minus_of_pos", ["real"]], ["add", "theorem", "quadratic_le_exp_of_nonneg", ["real"]], ["add", "theorem", "sum_le_exp_of_nonneg", ["real"]]]}]}, {"timestamp": 1684341990, "sha": "c89fe2d5", "message": "feat(geometry/manifold/vector_bundle/hom): the hom bundle is smooth (#18828)\n* From the sphere eversion project", "changes": [{"oldPath": "src/geometry/manifold/vector_bundle/basic.lean", "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": [["add", "theorem", "mk_smooth_coord_change", ["vector_prebundle"]], ["add", "theorem", "smooth_coord_change_apply", ["vector_prebundle"]], ["add", "theorem", "smooth_on_smooth_coord_change", ["vector_prebundle"]], ["add", "theorem", "smooth_vector_bundle", ["vector_prebundle"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/vector_bundle/hom.lean", "changes": [["add", "theorem", "cont_mdiff_at_hom_bundle", []], ["add", "theorem", "hom_chart", []], ["add", "theorem", "smooth_at_hom_bundle", []], ["add", "theorem", "smooth_on_continuous_linear_map_coord_change", []], ["add", "def", "aux", ["smooth_vector_bundle", "continuous_linear_map"]]]}]}, {"timestamp": 1684336377, "sha": "17fe3632", "message": "feat(geometry/manifold/cont_mdiff_mfderiv): prove that mfderiv is smooth (#18827)\n* From the sphere eversion project\n* `cont_mdiff_at.mfderiv` is strong enough to prove `cont_mdiff.cont_mdiff_tangent_map`. This is already done in [the sphere eversion project](https://github.com/leanprover-community/sphere-eversion/blob/9486e7f42c283041bc512f133daec359b73d4986/src/to_mathlib/unused/geometry_manifold_misc.lean#L383). We would need to generalize `cont_mdiff_at.mfderiv` to something like `cont_mdiff_within_at.mfderiv_within` to prove the full version of `cont_mdiff_on.cont_mdiff_on_tangent_map_within`. This is non-trivial and needs additions to already ported files, so I'll wait with doing that till after the port.", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "newPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "changes": [["add", "theorem", "mfderiv", ["cont_mdiff_at"]], ["add", "theorem", "mfderiv_const", ["cont_mdiff_at"]]]}, {"oldPath": "src/geometry/manifold/vector_bundle/tangent.lean", "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": [["add", "theorem", "in_coordinates_tangent_bundle_core_model_space", []], ["add", "def", "in_tangent_coordinates", []], ["add", "theorem", "in_tangent_coordinates_eq", []], ["add", "theorem", "in_tangent_coordinates_model_space", []]]}]}, {"timestamp": 1684327312, "sha": "8ff51ea9", "message": "feat(analysis/inner_product_space/pi_L2): norms of basis vectors (#19020)\nThis adds `‖euclidean_space.single i (a : 𝕜)‖ = ‖a‖` and other similar results.\nThey hold more generally for `pi_Lp`, so they are proven there first.\nThe statement of `linear_isometry_equiv.pi_Lp_congr_left_single` has also been corrected to include the missing typecast.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "dist_single_same", ["euclidean_space"]], ["add", "theorem", "edist_single_same", ["euclidean_space"]], ["add", "theorem", "nndist_single_same", ["euclidean_space"]], ["add", "theorem", "nnnorm_single", ["euclidean_space"]], ["add", "theorem", "norm_single", ["euclidean_space"]], ["add", "theorem", "orthonormal_single", ["euclidean_space"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "dist_equiv_symm_single_same", ["pi_Lp"]], ["add", "theorem", "edist_equiv_symm_single_same", ["pi_Lp"]], ["add", "theorem", "nndist_equiv_symm_single_same", ["pi_Lp"]], ["add", "theorem", "nnnorm_equiv_symm_single", ["pi_Lp"]], ["add", "theorem", "norm_equiv_symm_single", ["pi_Lp"]]]}]}, {"timestamp": 1684319164, "sha": "20d57630", "message": "feat(probability/kernel/cond_cdf): conditional cumulative distribution function (#18988)\nWe define `cond_cdf ρ : α → stieltjes_function`, the conditional cdf of `ρ : measure (α × ℝ)`, and prove its main properties: it is monotone and right-continuous with limit 0 at -∞ and limit 1 at +∞; for all `x : ℝ`, `a ↦ cond_cdf ρ a x` is measurable; for all `x : ℝ` and measurable set `s`, it satisfies `∫⁻ a in s, ennreal.of_real (cond_cdf ρ a x) ∂ρ.fst = ρ (s ×ˢ Iic x)`", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space/basic.lean", "newPath": "src/measure_theory/constructions/borel_space/basic.lean", "changes": [["add", "theorem", "borel_eq_generate_from_Ici", []], ["add", "theorem", "borel_eq_generate_from_Iic", []]]}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": [["add", "theorem", "infi_Ioi_eq_infi_rat_gt", []], ["add", "theorem", "right_lim_eq_Inf", []], ["add", "theorem", "right_lim_eq_of_tendsto", []], ["add", "theorem", "infi_Ioi_eq", ["stieltjes_function"]], ["add", "theorem", "infi_rat_gt_eq", ["stieltjes_function"]], ["add", "theorem", "right_lim_eq", ["stieltjes_function"]]]}, {"oldPath": null, "newPath": "src/probability/kernel/cond_cdf.lean", "changes": [["add", "theorem", "at_bot_le_nhds_bot", []], ["add", "theorem", "at_top_le_nhds_top", []], ["add", "theorem", "sequence_anti", ["directed"]], ["add", "theorem", "sequence_le", ["directed"]], ["add", "theorem", "of_real_cinfi", ["ennreal"]], ["add", "theorem", "is_pi_system_Ici", []], ["add", "theorem", "is_pi_system_Iic", []], ["add", "theorem", "lintegral_infi_directed_of_measurable", []], ["add", "def", "Iic_snd", ["measure_theory", "measure"]], ["add", "theorem", "Iic_snd_ac_fst", ["measure_theory", "measure"]], ["add", "theorem", "Iic_snd_apply", ["measure_theory", "measure"]], ["add", "theorem", "Iic_snd_le_fst", ["measure_theory", "measure"]], ["add", "theorem", "Iic_snd_mono", ["measure_theory", "measure"]], ["add", "theorem", "Iic_snd_univ", ["measure_theory", "measure"]], ["add", "theorem", "infi_Iic_snd_gt", ["measure_theory", "measure"]], ["add", "theorem", "Iic_snd", ["measure_theory", "measure", "is_finite_measure"]], ["add", "theorem", "tendsto_Iic_snd_at_bot", ["measure_theory", "measure"]], ["add", "theorem", "tendsto_Iic_snd_at_top", ["measure_theory", "measure"]], ["add", "theorem", "bdd_below_range_cond_cdf_rat_gt", ["probability_theory"]], ["add", "def", "cond_cdf'", ["probability_theory"]], ["add", "theorem", "cond_cdf'_def", ["probability_theory"]], ["add", "theorem", "cond_cdf'_eq_cond_cdf_rat", ["probability_theory"]], ["add", "theorem", "cond_cdf'_nonneg", ["probability_theory"]], ["add", "def", "cond_cdf", ["probability_theory"]], ["add", "theorem", "cond_cdf_ae_eq", ["probability_theory"]], ["add", "theorem", "cond_cdf_eq_cond_cdf_rat", ["probability_theory"]], ["add", "theorem", "cond_cdf_le_one", ["probability_theory"]], ["add", "theorem", "cond_cdf_nonneg", ["probability_theory"]], ["add", "def", "cond_cdf_rat", ["probability_theory"]], ["add", "theorem", "cond_cdf_rat_ae_eq", ["probability_theory"]], ["add", "theorem", "cond_cdf_rat_le_one", ["probability_theory"]], ["add", "theorem", "cond_cdf_rat_nonneg", ["probability_theory"]], ["add", "theorem", "cond_cdf_rat_of_mem", ["probability_theory"]], ["add", "theorem", "cond_cdf_rat_of_not_mem", ["probability_theory"]], ["add", "def", "cond_cdf_set", ["probability_theory"]], ["add", "theorem", "continuous_within_at_cond_cdf'_Ici", ["probability_theory"]], ["add", "structure", "has_cond_cdf", ["probability_theory"]], ["add", "theorem", "has_cond_cdf_ae", ["probability_theory"]], ["add", "theorem", "has_cond_cdf_of_mem_cond_cdf_set", ["probability_theory"]], ["add", "theorem", "inf_gt_cond_cdf_rat", ["probability_theory"]], ["add", "theorem", "inf_gt_pre_cdf", ["probability_theory"]], ["add", "theorem", "integrable_cond_cdf", ["probability_theory"]], ["add", "theorem", "integral_cond_cdf", ["probability_theory"]], ["add", "theorem", "lintegral_cond_cdf", ["probability_theory"]], ["add", "theorem", "measurable_cond_cdf", ["probability_theory"]], ["add", "theorem", "measurable_cond_cdf_rat", ["probability_theory"]], ["add", "theorem", "measurable_pre_cdf", ["probability_theory"]], ["add", "theorem", "measurable_set_cond_cdf_set", ["probability_theory"]], ["add", "theorem", "mem_cond_cdf_set_ae", ["probability_theory"]], ["add", "theorem", "monotone_cond_cdf'", ["probability_theory"]], ["add", "theorem", "monotone_cond_cdf_rat", ["probability_theory"]], ["add", "theorem", "monotone_pre_cdf", ["probability_theory"]], ["add", "theorem", "of_real_cond_cdf_ae_eq", ["probability_theory"]], ["add", "theorem", "of_real_cond_cdf_rat_ae_eq", ["probability_theory"]], ["add", "def", "pre_cdf", ["probability_theory"]], ["add", "theorem", "pre_cdf_le_one", ["probability_theory"]], ["add", "theorem", "set_integral_cond_cdf", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_cdf", ["probability_theory"]], ["add", "theorem", "set_lintegral_cond_cdf_rat", ["probability_theory"]], ["add", "theorem", "set_lintegral_infi_gt_pre_cdf", ["probability_theory"]], ["add", "theorem", "set_lintegral_pre_cdf_fst", ["probability_theory"]], ["add", "theorem", "strongly_measurable_cond_cdf", ["probability_theory"]], ["add", "theorem", "tendsto_cond_cdf_at_bot", ["probability_theory"]], ["add", "theorem", "tendsto_cond_cdf_at_top", ["probability_theory"]], ["add", "theorem", "tendsto_cond_cdf_rat_at_bot", ["probability_theory"]], ["add", "theorem", "tendsto_cond_cdf_rat_at_top", ["probability_theory"]], ["add", "theorem", "tendsto_lintegral_pre_cdf_at_bot", ["probability_theory"]], ["add", "theorem", "tendsto_lintegral_pre_cdf_at_top", ["probability_theory"]], ["add", "theorem", "tendsto_pre_cdf_at_bot_zero", ["probability_theory"]], ["add", "theorem", "tendsto_pre_cdf_at_top_one", ["probability_theory"]], ["add", "theorem", "with_density_pre_cdf", ["probability_theory"]], ["add", "theorem", "prod_Inter", []], ["add", "theorem", "Inter_Iic_rat", ["real"]], ["add", "theorem", "Union_Iic_rat", ["real"]], ["add", "theorem", "tendsto_of_antitone", []]]}]}, {"timestamp": 1684282995, "sha": "2ed2c631", "message": "chore(*): add mathlib4 synchronization comments (#19024)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.module.localized_module`\n* `analysis.box_integral.partition.tagged`\n* `analysis.calculus.tangent_cone`\n* `analysis.complex.basic`\n* `analysis.complex.re_im_topology`\n* `analysis.normed.group.add_circle`\n* `analysis.special_functions.exp`\n* `analysis.special_functions.log.basic`\n* `category_theory.cofiltered_system`\n* `category_theory.endofunctor.algebra`\n* `category_theory.sites.dense_subsite`\n* `category_theory.sites.induced_topology`\n* `category_theory.sites.subsheaf`\n* `combinatorics.hall.basic`\n* `combinatorics.simple_graph.ends.defs`\n* `data.polynomial.laurent`\n* `group_theory.nielsen_schreier`\n* `order.category.Frm`\n* `topology.category.Locale`\n* `topology.instances.add_circle`", "changes": [{"oldPath": "src/algebra/module/localized_module.lean", "newPath": "src/algebra/module/localized_module.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/tagged.lean", "newPath": "src/analysis/box_integral/partition/tagged.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/re_im_topology.lean", "newPath": "src/analysis/complex/re_im_topology.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/add_circle.lean", "newPath": "src/analysis/normed/group/add_circle.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": []}, {"oldPath": "src/category_theory/cofiltered_system.lean", "newPath": "src/category_theory/cofiltered_system.lean", "changes": []}, {"oldPath": "src/category_theory/endofunctor/algebra.lean", "newPath": "src/category_theory/endofunctor/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/sites/dense_subsite.lean", "newPath": "src/category_theory/sites/dense_subsite.lean", "changes": []}, {"oldPath": "src/category_theory/sites/induced_topology.lean", "newPath": "src/category_theory/sites/induced_topology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/subsheaf.lean", "newPath": "src/category_theory/sites/subsheaf.lean", "changes": []}, {"oldPath": "src/combinatorics/hall/basic.lean", "newPath": "src/combinatorics/hall/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/ends/defs.lean", "newPath": "src/combinatorics/simple_graph/ends/defs.lean", "changes": []}, {"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": []}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": []}, {"oldPath": "src/order/category/Frm.lean", "newPath": "src/order/category/Frm.lean", "changes": []}, {"oldPath": "src/topology/category/Locale.lean", "newPath": "src/topology/category/Locale.lean", "changes": []}, {"oldPath": "src/topology/instances/add_circle.lean", "newPath": "src/topology/instances/add_circle.lean", "changes": []}]}, {"timestamp": 1684275284, "sha": "b1859b6d", "message": "feat(measure_theory/measure/hausdorff): `(μH[1] : measure ℝ) = volume` (#18982)\nAnd similarly for `(μH[2] : measure ℝ × ℝ) = volume`.\nThis addresses the TODO comment in the docstring.\nThe `hausdorff_measure_pi_real` proof has been moved to the bottom of the file so that it can be kept next to the new results.", "changes": [{"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["add", "theorem", "map_hausdorff_measure", ["isometry_equiv"]], ["add", "theorem", "measure_preserving_hausdorff_measure", ["isometry_equiv"]], ["add", "theorem", "hausdorff_measure_measure_preserving_fun_unique", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_measure_preserving_pi_fin_two", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_prod_real", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_real", ["measure_theory"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "def", "fun_unique", ["isometry_equiv"]], ["add", "def", "pi_fin_two", ["isometry_equiv"]]]}]}, {"timestamp": 1684266058, "sha": "f8c79b0a", "message": "doc(linear_algebra/std_basis): add a missing backtick (#19025)", "changes": [{"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}]}, {"timestamp": 1684213671, "sha": "b76e9f65", "message": "feat(analysis/special_functions/gamma): holomorphy of `1 / Gamma` (#19012)\nThis PR makes two changes to the Gamma function code: \n- drastically shorten the proof of differentiability of the Gamma function by applying general results on Mellin transforms;\n- add the fact that `1 / Gamma` is differentiable everywhere (including at the poles of the Gamma function).", "changes": [{"oldPath": "src/analysis/special_functions/gamma/basic.lean", "newPath": "src/analysis/special_functions/gamma/basic.lean", "changes": [["add", "theorem", "Gamma_integral_eq_mellin", ["complex"]], ["mod", "theorem", "has_deriv_at_Gamma_integral", ["complex"]], ["del", "theorem", "dGamma_integral_abs_convergent", []], ["del", "def", "dGamma_integrand", []], ["del", "theorem", "dGamma_integrand_is_o_at_top", []], ["del", "def", "dGamma_integrand_real", []], ["del", "theorem", "loc_unif_bound_dGamma_integrand", []]]}, {"oldPath": "src/analysis/special_functions/gamma/beta.lean", "newPath": "src/analysis/special_functions/gamma/beta.lean", "changes": [["add", "theorem", "differentiable_one_div_Gamma", ["complex"]], ["add", "theorem", "one_div_Gamma_eq_self_mul_one_div_Gamma_add_one", ["complex"]]]}]}, {"timestamp": 1684196605, "sha": "4fa54b33", "message": "chore(analysis/special_functions/pow): move around rpow/cpow tactics (#19022)\nThis PR splits up the code that implements `norm_num` and `positivity` for real / complex powers, and puts it into the files where those operations are defined, for easier discoverability.", "changes": [{"oldPath": "src/analysis/fourier/poisson_summation.lean", "newPath": "src/analysis/fourier/poisson_summation.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/japanese_bracket.lean", "newPath": "src/analysis/special_functions/japanese_bracket.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow/complex.lean", "newPath": "src/analysis/special_functions/pow/complex.lean", "changes": [["add", "theorem", "cpow_neg", ["norm_num"]], ["add", "theorem", "cpow_pos", ["norm_num"]]]}, {"oldPath": "src/analysis/special_functions/pow/nnreal.lean", "newPath": "src/analysis/special_functions/pow/nnreal.lean", "changes": [["add", "theorem", "ennrpow_neg", ["norm_num"]], ["add", "theorem", "ennrpow_pos", ["norm_num"]], ["add", "theorem", "nnrpow_neg", ["norm_num"]], ["add", "theorem", "nnrpow_pos", ["norm_num"]]]}, {"oldPath": "src/analysis/special_functions/pow/real.lean", "newPath": "src/analysis/special_functions/pow/real.lean", "changes": [["add", "theorem", "rpow_neg", ["norm_num"]], ["add", "theorem", "rpow_pos", ["norm_num"]]]}, {"oldPath": "src/analysis/special_functions/pow/tactic.lean", "newPath": null, "changes": [["del", "theorem", "cpow_neg", ["norm_num"]], ["del", "theorem", "cpow_pos", ["norm_num"]], ["del", "theorem", "ennrpow_neg", ["norm_num"]], ["del", "theorem", "ennrpow_pos", ["norm_num"]], ["del", "theorem", "nnrpow_neg", ["norm_num"]], ["del", "theorem", "nnrpow_pos", ["norm_num"]], ["del", "theorem", "rpow_neg", ["norm_num"]], ["del", "theorem", "rpow_pos", ["norm_num"]]]}, {"oldPath": "src/combinatorics/additive/behrend.lean", "newPath": "src/combinatorics/additive/behrend.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/number_theory/bertrand.lean", "newPath": "src/number_theory/bertrand.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1684180339, "sha": "0b9eaaa7", "message": "chore(analysis/special_functions): split up `pow.lean` (#19006)\nThis PR splits up the monster file `analysis.special_functions.pow` into the following 6 files:\n- `pow_complex`: definition of `a ^ b` for complex a, b and basic properties (179 lines)\n- `pow_real`: definition of `a ^ b` for real a, b & lemmas about order / monotonicity (641 lines)\n- `pow_nnreal`: definitions for nnreal and ennreal types (693 lines)\n- `pow_asymptotics`: limiting behaviour at infinity (282 lines)\n- `pow_continuity`: continuity properties (500 lines)\n- `pow_tactic`: extensions to `positivity` and `norm_num` for powers (209 lines)\nNo code has been added or removed, only moved around, and the only changes outside these files are adjustments to imports.", "changes": [{"oldPath": "archive/imo/imo2001_q2.lean", "newPath": "archive/imo/imo2001_q2.lean", "changes": []}, {"oldPath": "src/algebra/order/complete_field.lean", "newPath": "src/algebra/order/complete_field.lean", "changes": []}, {"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/fourier/poisson_summation.lean", "newPath": "src/analysis/fourier/poisson_summation.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/multiplier.lean", "newPath": "src/analysis/normed_space/star/multiplier.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/compare_exp.lean", "newPath": "src/analysis/special_functions/compare_exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/japanese_bracket.lean", "newPath": "src/analysis/special_functions/japanese_bracket.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/base.lean", "newPath": "src/analysis/special_functions/log/base.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/monotone.lean", "newPath": "src/analysis/special_functions/log/monotone.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": null, "changes": [["del", "theorem", "rpow", ["asymptotics", "is_O"]], ["del", "theorem", "rpow", ["asymptotics", "is_O_with"]], ["del", "theorem", "rpow", ["asymptotics", "is_o"]], ["del", "theorem", "abs_cpow_eq_rpow_re_of_nonneg", ["complex"]], ["del", "theorem", "abs_cpow_eq_rpow_re_of_pos", ["complex"]], ["del", "theorem", "abs_cpow_inv_nat", ["complex"]], ["del", "theorem", "abs_cpow_le", ["complex"]], ["del", "theorem", "abs_cpow_of_imp", ["complex"]], ["del", "theorem", "abs_cpow_of_ne_zero", ["complex"]], ["del", "theorem", "abs_cpow_real", ["complex"]], ["del", "theorem", "conj_cpow", ["complex"]], ["del", "theorem", "conj_cpow_eq_ite", ["complex"]], ["del", "theorem", "continuous_at_cpow_const_of_re_pos", ["complex"]], ["del", "theorem", "continuous_at_cpow_of_re_pos", ["complex"]], ["del", "theorem", "continuous_at_cpow_zero_of_re_pos", ["complex"]], ["del", "theorem", "continuous_at_of_real_cpow", ["complex"]], ["del", "theorem", "continuous_at_of_real_cpow_const", ["complex"]], ["del", "theorem", "continuous_of_real_cpow_const", ["complex"]], ["del", "theorem", "cpow_add", ["complex"]], ["del", "theorem", "cpow_conj", ["complex"]], ["del", "theorem", "cpow_def", ["complex"]], ["del", "theorem", "cpow_def_of_ne_zero", ["complex"]], ["del", "theorem", "cpow_eq_pow", ["complex"]], ["del", "theorem", "cpow_eq_zero_iff", ["complex"]], ["del", "theorem", "cpow_int_cast", ["complex"]], ["del", "theorem", "cpow_mul", ["complex"]], ["del", "theorem", "cpow_nat_cast", ["complex"]], ["del", "theorem", "cpow_nat_inv_pow", ["complex"]], ["del", "theorem", "cpow_neg", ["complex"]], ["del", "theorem", "cpow_neg_one", ["complex"]], ["del", "theorem", "cpow_one", ["complex"]], ["del", "theorem", "cpow_sub", ["complex"]], ["del", "theorem", "cpow_two", ["complex"]], ["del", "theorem", "cpow_zero", ["complex"]], ["del", "theorem", "eq_zero_cpow_iff", ["complex"]], ["del", "theorem", "inv_cpow", ["complex"]], ["del", "theorem", "inv_cpow_eq_ite'", ["complex"]], ["del", "theorem", "inv_cpow_eq_ite", ["complex"]], ["del", "theorem", "is_O_cpow_rpow", ["complex"]], ["del", "theorem", "is_Theta_cpow_const_rpow", ["complex"]], ["del", "theorem", "is_Theta_cpow_rpow", ["complex"]], ["del", "theorem", "is_Theta_exp_arg_mul_im", ["complex"]], ["del", "theorem", "mul_cpow_of_real_nonneg", ["complex"]], ["del", "theorem", "of_real_cpow", ["complex"]], ["del", "theorem", "of_real_cpow_of_nonpos", ["complex"]], ["del", "theorem", "one_cpow", ["complex"]], ["del", "theorem", "zero_cpow", ["complex"]], ["del", "theorem", "zero_cpow_eq_iff", ["complex"]], ["del", "theorem", "const_cpow", ["continuous"]], ["del", "theorem", "cpow", ["continuous"]], ["del", "theorem", "rpow", ["continuous"]], ["del", "theorem", "rpow_const", ["continuous"]], ["del", "theorem", "const_cpow", ["continuous_at"]], ["del", "theorem", "cpow", ["continuous_at"]], ["del", "theorem", "rpow", ["continuous_at"]], ["del", "theorem", "rpow_const", ["continuous_at"]], ["del", "theorem", "continuous_at_const_cpow'", []], ["del", "theorem", "continuous_at_const_cpow", []], ["del", "theorem", "continuous_at_cpow", []], ["del", "theorem", "continuous_at_cpow_const", []], ["del", "theorem", "const_cpow", ["continuous_on"]], ["del", "theorem", "cpow", ["continuous_on"]], ["del", "theorem", "cpow_const", ["continuous_on"]], ["del", "theorem", "rpow", ["continuous_on"]], ["del", "theorem", "rpow_const", ["continuous_on"]], ["del", "theorem", "const_cpow", ["continuous_within_at"]], ["del", "theorem", "cpow", ["continuous_within_at"]], ["del", "theorem", "rpow", ["continuous_within_at"]], ["del", "theorem", "rpow_const", ["continuous_within_at"]], ["del", "theorem", "cpow_eq_nhds'", []], ["del", "theorem", "cpow_eq_nhds", []], ["del", "theorem", "coe_mul_rpow", ["ennreal"]], ["del", "theorem", "coe_rpow_def", ["ennreal"]], ["del", "theorem", "coe_rpow_of_ne_zero", ["ennreal"]], ["del", "theorem", "coe_rpow_of_nonneg", ["ennreal"]], ["del", "theorem", "continuous_rpow_const", ["ennreal"]], ["del", "theorem", "div_rpow_of_nonneg", ["ennreal"]], ["del", "theorem", "eventually_pow_one_div_le", ["ennreal"]], ["del", "theorem", "inv_rpow", ["ennreal"]], ["del", "theorem", "le_rpow_one_div_iff", ["ennreal"]], ["del", "theorem", "le_rpow_self_of_one_le", ["ennreal"]], ["del", "theorem", "lt_rpow_one_div_iff", ["ennreal"]], ["del", "theorem", "monotone_rpow_of_nonneg", ["ennreal"]], ["del", "theorem", "mul_rpow_eq_ite", ["ennreal"]], ["del", "theorem", "mul_rpow_of_ne_top", ["ennreal"]], ["del", "theorem", "mul_rpow_of_ne_zero", ["ennreal"]], ["del", "theorem", "mul_rpow_of_nonneg", ["ennreal"]], ["del", "theorem", "of_real_rpow_of_nonneg", ["ennreal"]], ["del", "theorem", "of_real_rpow_of_pos", ["ennreal"]], ["del", "theorem", "one_le_rpow", ["ennreal"]], ["del", "theorem", "one_le_rpow_of_pos_of_le_one_of_neg", ["ennreal"]], ["del", "theorem", "one_lt_rpow", ["ennreal"]], ["del", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["ennreal"]], ["del", "theorem", "one_rpow", ["ennreal"]], ["del", "def", "order_iso_rpow", ["ennreal"]], ["del", "theorem", "order_iso_rpow_symm_apply", ["ennreal"]], ["del", "theorem", "rpow_add", ["ennreal"]], ["del", "theorem", "rpow_eq_pow", ["ennreal"]], ["del", "theorem", "rpow_eq_top_iff", ["ennreal"]], ["del", "theorem", "rpow_eq_top_iff_of_pos", ["ennreal"]], ["del", "theorem", "rpow_eq_top_of_nonneg", ["ennreal"]], ["del", "theorem", "rpow_eq_zero_iff", ["ennreal"]], ["del", "theorem", "rpow_le_one", ["ennreal"]], ["del", "theorem", "rpow_le_one_of_one_le_of_neg", ["ennreal"]], ["del", "theorem", "rpow_le_rpow", ["ennreal"]], ["del", "theorem", "rpow_le_rpow_iff", ["ennreal"]], ["del", "theorem", "rpow_le_rpow_of_exponent_ge", ["ennreal"]], ["del", "theorem", "rpow_le_rpow_of_exponent_le", ["ennreal"]], ["del", "theorem", "rpow_le_self_of_le_one", ["ennreal"]], ["del", "theorem", "rpow_left_bijective", ["ennreal"]], ["del", "theorem", "rpow_left_injective", ["ennreal"]], ["del", "theorem", "rpow_left_surjective", ["ennreal"]], ["del", "theorem", "rpow_lt_one", ["ennreal"]], ["del", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["ennreal"]], ["del", "theorem", "rpow_lt_rpow", ["ennreal"]], ["del", "theorem", "rpow_lt_rpow_iff", ["ennreal"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_gt", ["ennreal"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_lt", ["ennreal"]], ["del", "theorem", "rpow_lt_top_of_nonneg", ["ennreal"]], ["del", "theorem", "rpow_mul", ["ennreal"]], ["del", "theorem", "rpow_nat_cast", ["ennreal"]], ["del", "theorem", "rpow_ne_top_of_nonneg", ["ennreal"]], ["del", "theorem", "rpow_neg", ["ennreal"]], ["del", "theorem", "rpow_neg_one", ["ennreal"]], ["del", "theorem", "rpow_one", ["ennreal"]], ["del", "theorem", "rpow_one_div_le_iff", ["ennreal"]], ["del", "theorem", "rpow_pos", ["ennreal"]], ["del", "theorem", "rpow_pos_of_nonneg", ["ennreal"]], ["del", "theorem", "rpow_sub", ["ennreal"]], ["del", "theorem", "rpow_two", ["ennreal"]], ["del", "theorem", "rpow_zero", ["ennreal"]], ["del", "theorem", "strict_mono_rpow_of_pos", ["ennreal"]], ["del", "theorem", "tendsto_const_mul_rpow_nhds_zero_of_pos", ["ennreal"]], ["del", "theorem", "tendsto_rpow_at_top", ["ennreal"]], ["del", "theorem", "to_nnreal_rpow", ["ennreal"]], ["del", "theorem", "to_real_rpow", ["ennreal"]], ["del", "theorem", "top_rpow_def", ["ennreal"]], ["del", "theorem", "top_rpow_of_neg", ["ennreal"]], ["del", "theorem", "top_rpow_of_pos", ["ennreal"]], ["del", "theorem", "zero_rpow_def", ["ennreal"]], ["del", "theorem", "zero_rpow_mul_self", ["ennreal"]], ["del", "theorem", "zero_rpow_of_neg", ["ennreal"]], ["del", "theorem", "zero_rpow_of_pos", ["ennreal"]], ["del", "theorem", "const_cpow", ["filter", "tendsto"]], ["del", "theorem", "cpow", ["filter", "tendsto"]], ["del", "theorem", "ennrpow_const", ["filter", "tendsto"]], ["del", "theorem", "nnrpow", ["filter", "tendsto"]], ["del", "theorem", "rpow", ["filter", "tendsto"]], ["del", "theorem", "rpow_const", ["filter", "tendsto"]], ["del", "theorem", "is_o_abs_log_rpow_rpow_nhds_zero", []], ["del", "theorem", "is_o_exp_neg_mul_rpow_at_top", []], ["del", "theorem", "is_o_log_rpow_at_top", []], ["del", "theorem", "is_o_log_rpow_nhds_zero", []], ["del", "theorem", "is_o_log_rpow_rpow_at_top", []], ["del", "theorem", "is_o_pow_exp_pos_mul_at_top", []], ["del", "theorem", "is_o_rpow_exp_at_top", []], ["del", "theorem", "is_o_rpow_exp_pos_mul_at_top", []], ["del", "theorem", "is_o_zpow_exp_pos_mul_at_top", []], ["del", "theorem", "coe_rpow", ["nnreal"]], ["del", "theorem", "continuous_at_rpow", ["nnreal"]], ["del", "theorem", "continuous_at_rpow_const", ["nnreal"]], ["del", "theorem", "continuous_rpow_const", ["nnreal"]], ["del", "theorem", "div_rpow", ["nnreal"]], ["del", "theorem", "eq_rpow_one_div_iff", ["nnreal"]], ["del", "theorem", "eventually_pow_one_div_le", ["nnreal"]], ["del", "theorem", "inv_rpow", ["nnreal"]], ["del", "theorem", "le_rpow_one_div_iff", ["nnreal"]], ["del", "theorem", "mul_rpow", ["nnreal"]], ["del", "theorem", "one_le_rpow", ["nnreal"]], ["del", "theorem", "one_le_rpow_of_pos_of_le_one_of_nonpos", ["nnreal"]], ["del", "theorem", "one_lt_rpow", ["nnreal"]], ["del", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["nnreal"]], ["del", "theorem", "one_rpow", ["nnreal"]], ["del", "theorem", "pow_nat_rpow_nat_inv", ["nnreal"]], ["del", "theorem", "rpow_add'", ["nnreal"]], ["del", "theorem", "rpow_add", ["nnreal"]], ["del", "theorem", "rpow_eq_pow", ["nnreal"]], ["del", "theorem", "rpow_eq_rpow_iff", ["nnreal"]], ["del", "theorem", "rpow_eq_zero_iff", ["nnreal"]], ["del", "theorem", "rpow_inv_rpow_self", ["nnreal"]], ["del", "theorem", "rpow_le_one", ["nnreal"]], ["del", "theorem", "rpow_le_one_of_one_le_of_nonpos", ["nnreal"]], ["del", "theorem", "rpow_le_rpow", ["nnreal"]], ["del", "theorem", "rpow_le_rpow_iff", ["nnreal"]], ["del", "theorem", "rpow_le_rpow_of_exponent_ge", ["nnreal"]], ["del", "theorem", "rpow_le_rpow_of_exponent_le", ["nnreal"]], ["del", "theorem", "rpow_le_self_of_le_one", ["nnreal"]], ["del", "theorem", "rpow_left_bijective", ["nnreal"]], ["del", "theorem", "rpow_left_injective", ["nnreal"]], ["del", "theorem", "rpow_left_surjective", ["nnreal"]], ["del", "theorem", "rpow_lt_one", ["nnreal"]], ["del", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["nnreal"]], ["del", "theorem", "rpow_lt_rpow", ["nnreal"]], ["del", "theorem", "rpow_lt_rpow_iff", ["nnreal"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_gt", ["nnreal"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_lt", ["nnreal"]], ["del", "theorem", "rpow_mul", ["nnreal"]], ["del", "theorem", "rpow_nat_cast", ["nnreal"]], ["del", "theorem", "rpow_nat_inv_pow_nat", ["nnreal"]], ["del", "theorem", "rpow_neg", ["nnreal"]], ["del", "theorem", "rpow_neg_one", ["nnreal"]], ["del", "theorem", "rpow_one", ["nnreal"]], ["del", "theorem", "rpow_one_div_eq_iff", ["nnreal"]], ["del", "theorem", "rpow_one_div_le_iff", ["nnreal"]], ["del", "theorem", "rpow_pos", ["nnreal"]], ["del", "theorem", "rpow_self_rpow_inv", ["nnreal"]], ["del", "theorem", "rpow_sub'", ["nnreal"]], ["del", "theorem", "rpow_sub", ["nnreal"]], ["del", "theorem", "rpow_two", ["nnreal"]], ["del", "theorem", "rpow_zero", ["nnreal"]], ["del", "theorem", "sqrt_eq_rpow", ["nnreal"]], ["del", "theorem", "tendsto_rpow_at_top", ["nnreal"]], ["del", "theorem", "zero_rpow", ["nnreal"]], ["del", "theorem", "cpow_neg", ["norm_num"]], ["del", "theorem", "cpow_pos", ["norm_num"]], ["del", "theorem", "ennrpow_neg", ["norm_num"]], ["del", "theorem", "ennrpow_pos", ["norm_num"]], ["del", "theorem", "nnrpow_neg", ["norm_num"]], ["del", "theorem", "nnrpow_pos", ["norm_num"]], ["del", "theorem", "rpow_neg", ["norm_num"]], ["del", "theorem", "rpow_pos", ["norm_num"]], ["del", "theorem", "abs_log_mul_self_rpow_lt", ["real"]], ["del", "theorem", "abs_rpow_le_abs_rpow", ["real"]], ["del", "theorem", "abs_rpow_le_exp_log_mul", ["real"]], ["del", "theorem", "abs_rpow_of_nonneg", ["real"]], ["del", "theorem", "continuous_at_const_rpow'", ["real"]], ["del", "theorem", "continuous_at_const_rpow", ["real"]], ["del", "theorem", "continuous_at_rpow", ["real"]], ["del", "theorem", "continuous_at_rpow_const", ["real"]], ["del", "theorem", "continuous_at_rpow_of_ne", ["real"]], ["del", "theorem", "continuous_at_rpow_of_pos", ["real"]], ["del", "theorem", "div_rpow", ["real"]], ["del", "theorem", "eq_zero_rpow_iff", ["real"]], ["del", "theorem", "exists_rat_pow_btwn", ["real"]], ["del", "theorem", "exists_rat_pow_btwn_rat", ["real"]], ["del", "theorem", "exists_rat_pow_btwn_rat_aux", ["real"]], ["del", "theorem", "exp_mul", ["real"]], ["del", "theorem", "exp_one_rpow", ["real"]], ["del", "theorem", "inv_rpow", ["real"]], ["del", "theorem", "le_rpow_add", ["real"]], ["del", "theorem", "le_rpow_iff_log_le", ["real"]], ["del", "theorem", "le_rpow_inv_iff_of_neg", ["real"]], ["del", "theorem", "le_rpow_of_log_le", ["real"]], ["del", "theorem", "log_rpow", ["real"]], ["del", "theorem", "lt_rpow_iff_log_lt", ["real"]], ["del", "theorem", "lt_rpow_inv_iff_of_neg", ["real"]], ["del", "theorem", "lt_rpow_of_log_lt", ["real"]], ["del", "theorem", "mul_rpow", ["real"]], ["del", "theorem", "norm_rpow_of_nonneg", ["real"]], ["del", "theorem", "one_le_rpow", ["real"]], ["del", "theorem", "one_le_rpow_of_pos_of_le_one_of_nonpos", ["real"]], ["del", "theorem", "one_lt_rpow", ["real"]], ["del", "theorem", "one_lt_rpow_iff", ["real"]], ["del", "theorem", "one_lt_rpow_iff_of_pos", ["real"]], ["del", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["real"]], ["del", "theorem", "one_rpow", ["real"]], ["del", "theorem", "pow_nat_rpow_nat_inv", ["real"]], ["del", "theorem", "rpow_add'", ["real"]], ["del", "theorem", "rpow_add", ["real"]], ["del", "theorem", "rpow_add_int", ["real"]], ["del", "theorem", "rpow_add_nat", ["real"]], ["del", "theorem", "rpow_add_of_nonneg", ["real"]], ["del", "theorem", "rpow_add_one", ["real"]], ["del", "theorem", "rpow_def", ["real"]], ["del", "theorem", "rpow_def_of_neg", ["real"]], ["del", "theorem", "rpow_def_of_nonneg", ["real"]], ["del", "theorem", "rpow_def_of_nonpos", ["real"]], ["del", "theorem", "rpow_def_of_pos", ["real"]], ["del", "theorem", "rpow_div_two_eq_sqrt", ["real"]], ["del", "theorem", "rpow_eq_nhds_of_neg", ["real"]], ["del", "theorem", "rpow_eq_nhds_of_pos", ["real"]], ["del", "theorem", "rpow_eq_pow", ["real"]], ["del", "theorem", "rpow_eq_zero_iff_of_nonneg", ["real"]], ["del", "theorem", "rpow_int_cast", ["real"]], ["del", "theorem", "rpow_inv_le_iff_of_neg", ["real"]], ["del", "theorem", "rpow_inv_lt_iff_of_neg", ["real"]], ["del", "theorem", "rpow_le_one", ["real"]], ["del", "theorem", "rpow_le_one_iff_of_pos", ["real"]], ["del", "theorem", "rpow_le_one_of_one_le_of_nonpos", ["real"]], ["del", "theorem", "rpow_le_rpow", ["real"]], ["del", "theorem", "rpow_le_rpow_iff", ["real"]], ["del", "theorem", "rpow_le_rpow_left_iff", ["real"]], ["del", "theorem", "rpow_le_rpow_left_iff_of_base_lt_one", ["real"]], ["del", "theorem", "rpow_le_rpow_of_exponent_ge'", ["real"]], ["del", "theorem", "rpow_le_rpow_of_exponent_ge", ["real"]], ["del", "theorem", "rpow_le_rpow_of_exponent_le", ["real"]], ["del", "theorem", "rpow_left_inj_on", ["real"]], ["del", "theorem", "rpow_lt_one", ["real"]], ["del", "theorem", "rpow_lt_one_iff", ["real"]], ["del", "theorem", "rpow_lt_one_iff_of_pos", ["real"]], ["del", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["real"]], ["del", "theorem", "rpow_lt_rpow", ["real"]], ["del", "theorem", "rpow_lt_rpow_iff", ["real"]], ["del", "theorem", "rpow_lt_rpow_left_iff", ["real"]], ["del", "theorem", "rpow_lt_rpow_left_iff_of_base_lt_one", ["real"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_gt", ["real"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_lt", ["real"]], ["del", "theorem", "rpow_mul", ["real"]], ["del", "theorem", "rpow_nat_cast", ["real"]], ["del", "theorem", "rpow_nat_inv_pow_nat", ["real"]], ["del", "theorem", "rpow_neg", ["real"]], ["del", "theorem", "rpow_neg_one", ["real"]], ["del", "theorem", "rpow_nonneg_of_nonneg", ["real"]], ["del", "theorem", "rpow_one", ["real"]], ["del", "theorem", "rpow_pos_of_pos", ["real"]], ["del", "theorem", "rpow_sub'", ["real"]], ["del", "theorem", "rpow_sub", ["real"]], ["del", "theorem", "rpow_sub_int", ["real"]], ["del", "theorem", "rpow_sub_nat", ["real"]], ["del", "theorem", "rpow_sub_one", ["real"]], ["del", "theorem", "rpow_sum_of_nonneg", ["real"]], ["del", "theorem", "rpow_sum_of_pos", ["real"]], ["del", "theorem", "rpow_two", ["real"]], ["del", "theorem", "rpow_zero", ["real"]], ["del", "theorem", "sqrt_eq_rpow", ["real"]], ["del", "theorem", "to_nnreal_rpow_of_nonneg", ["real"]], ["del", "theorem", "zero_rpow", ["real"]], ["del", "theorem", "zero_rpow_eq_iff", ["real"]], ["del", "theorem", "zero_rpow_le_one", ["real"]], ["del", "theorem", "zero_rpow_nonneg", ["real"]], ["del", "theorem", "tendsto_exp_div_rpow_at_top", []], ["del", "theorem", "tendsto_exp_mul_div_rpow_at_top", []], ["del", "theorem", "tendsto_log_div_rpow_nhds_zero", []], ["del", "theorem", "tendsto_log_mul_rpow_nhds_zero", []], ["del", "theorem", "tendsto_rpow_at_top", []], ["del", "theorem", "tendsto_rpow_div", []], ["del", "theorem", "tendsto_rpow_div_mul_add", []], ["del", "theorem", "tendsto_rpow_mul_exp_neg_mul_at_top_nhds_0", []], ["del", "theorem", "tendsto_rpow_neg_at_top", []], ["del", "theorem", "tendsto_rpow_neg_div", []], ["del", "theorem", "zero_cpow_eq_nhds", []]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow/asymptotics.lean", "changes": [["add", "theorem", "rpow", ["asymptotics", "is_O"]], ["add", "theorem", "rpow", ["asymptotics", "is_O_with"]], ["add", "theorem", "rpow", ["asymptotics", "is_o"]], ["add", "theorem", "is_O_cpow_rpow", ["complex"]], ["add", "theorem", "is_Theta_cpow_const_rpow", ["complex"]], ["add", "theorem", "is_Theta_cpow_rpow", ["complex"]], ["add", "theorem", "is_Theta_exp_arg_mul_im", ["complex"]], ["add", "theorem", "tendsto_rpow_at_top", ["ennreal"]], ["add", "theorem", "is_o_abs_log_rpow_rpow_nhds_zero", []], ["add", "theorem", "is_o_exp_neg_mul_rpow_at_top", []], ["add", "theorem", "is_o_log_rpow_at_top", []], ["add", "theorem", "is_o_log_rpow_nhds_zero", []], ["add", "theorem", "is_o_log_rpow_rpow_at_top", []], ["add", "theorem", "is_o_pow_exp_pos_mul_at_top", []], ["add", "theorem", "is_o_rpow_exp_at_top", []], ["add", "theorem", "is_o_rpow_exp_pos_mul_at_top", []], ["add", "theorem", "is_o_zpow_exp_pos_mul_at_top", []], ["add", "theorem", "tendsto_rpow_at_top", ["nnreal"]], ["add", "theorem", "tendsto_exp_div_rpow_at_top", []], ["add", "theorem", "tendsto_exp_mul_div_rpow_at_top", []], ["add", "theorem", "tendsto_log_div_rpow_nhds_zero", []], ["add", "theorem", "tendsto_log_mul_rpow_nhds_zero", []], ["add", "theorem", "tendsto_rpow_at_top", []], ["add", "theorem", "tendsto_rpow_div", []], ["add", "theorem", "tendsto_rpow_div_mul_add", []], ["add", "theorem", "tendsto_rpow_mul_exp_neg_mul_at_top_nhds_0", []], ["add", "theorem", "tendsto_rpow_neg_at_top", []], ["add", "theorem", "tendsto_rpow_neg_div", []]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow/complex.lean", "changes": [["add", "theorem", "conj_cpow", ["complex"]], ["add", "theorem", "conj_cpow_eq_ite", ["complex"]], ["add", "theorem", "cpow_add", ["complex"]], ["add", "theorem", "cpow_conj", ["complex"]], ["add", "theorem", "cpow_def", ["complex"]], ["add", "theorem", "cpow_def_of_ne_zero", ["complex"]], ["add", "theorem", "cpow_eq_pow", ["complex"]], ["add", "theorem", "cpow_eq_zero_iff", ["complex"]], ["add", "theorem", "cpow_int_cast", ["complex"]], ["add", "theorem", "cpow_mul", ["complex"]], ["add", "theorem", "cpow_nat_cast", ["complex"]], ["add", "theorem", "cpow_nat_inv_pow", ["complex"]], ["add", "theorem", "cpow_neg", ["complex"]], ["add", "theorem", "cpow_neg_one", ["complex"]], ["add", "theorem", "cpow_one", ["complex"]], ["add", "theorem", "cpow_sub", ["complex"]], ["add", "theorem", "cpow_two", ["complex"]], ["add", "theorem", "cpow_zero", ["complex"]], ["add", "theorem", "eq_zero_cpow_iff", ["complex"]], ["add", "theorem", "inv_cpow", ["complex"]], ["add", "theorem", "inv_cpow_eq_ite'", ["complex"]], ["add", "theorem", "inv_cpow_eq_ite", ["complex"]], ["add", "theorem", "mul_cpow_of_real_nonneg", ["complex"]], ["add", "theorem", "one_cpow", ["complex"]], ["add", "theorem", "zero_cpow", ["complex"]], ["add", "theorem", "zero_cpow_eq_iff", ["complex"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow/continuity.lean", "changes": [["add", "theorem", "continuous_at_cpow_const_of_re_pos", ["complex"]], ["add", "theorem", "continuous_at_cpow_of_re_pos", ["complex"]], ["add", "theorem", "continuous_at_cpow_zero_of_re_pos", ["complex"]], ["add", "theorem", "continuous_at_of_real_cpow", ["complex"]], ["add", "theorem", "continuous_at_of_real_cpow_const", ["complex"]], ["add", "theorem", "continuous_of_real_cpow_const", ["complex"]], ["add", "theorem", "const_cpow", ["continuous"]], ["add", "theorem", "cpow", ["continuous"]], ["add", "theorem", "rpow", ["continuous"]], ["add", "theorem", "rpow_const", ["continuous"]], ["add", "theorem", "const_cpow", ["continuous_at"]], ["add", "theorem", "cpow", ["continuous_at"]], ["add", "theorem", "rpow", ["continuous_at"]], ["add", "theorem", "rpow_const", ["continuous_at"]], ["add", "theorem", "continuous_at_const_cpow'", []], ["add", "theorem", "continuous_at_const_cpow", []], ["add", "theorem", "continuous_at_cpow", []], ["add", "theorem", "continuous_at_cpow_const", []], ["add", "theorem", "const_cpow", ["continuous_on"]], ["add", "theorem", "cpow", ["continuous_on"]], ["add", "theorem", "cpow_const", ["continuous_on"]], ["add", "theorem", "rpow", ["continuous_on"]], ["add", "theorem", "rpow_const", ["continuous_on"]], ["add", "theorem", "const_cpow", ["continuous_within_at"]], ["add", "theorem", "cpow", ["continuous_within_at"]], ["add", "theorem", "rpow", ["continuous_within_at"]], ["add", "theorem", "rpow_const", ["continuous_within_at"]], ["add", "theorem", "cpow_eq_nhds'", []], ["add", "theorem", "cpow_eq_nhds", []], ["add", "theorem", "continuous_rpow_const", ["ennreal"]], ["add", "theorem", "eventually_pow_one_div_le", ["ennreal"]], ["add", "theorem", "tendsto_const_mul_rpow_nhds_zero_of_pos", ["ennreal"]], ["add", "theorem", "const_cpow", ["filter", "tendsto"]], ["add", "theorem", "cpow", ["filter", "tendsto"]], ["add", "theorem", "ennrpow_const", ["filter", "tendsto"]], ["add", "theorem", "nnrpow", ["filter", "tendsto"]], ["add", "theorem", "rpow", ["filter", "tendsto"]], ["add", "theorem", "rpow_const", ["filter", "tendsto"]], ["add", "theorem", "continuous_at_rpow", ["nnreal"]], ["add", "theorem", "continuous_at_rpow_const", ["nnreal"]], ["add", "theorem", "continuous_rpow_const", ["nnreal"]], ["add", "theorem", "eventually_pow_one_div_le", ["nnreal"]], ["add", "theorem", "continuous_at_const_rpow'", ["real"]], ["add", "theorem", "continuous_at_const_rpow", ["real"]], ["add", "theorem", "continuous_at_rpow", ["real"]], ["add", "theorem", "continuous_at_rpow_const", ["real"]], ["add", "theorem", "continuous_at_rpow_of_ne", ["real"]], ["add", "theorem", "continuous_at_rpow_of_pos", ["real"]], ["add", "theorem", "rpow_eq_nhds_of_neg", ["real"]], ["add", "theorem", "rpow_eq_nhds_of_pos", ["real"]], ["add", "theorem", "zero_cpow_eq_nhds", []]]}, {"oldPath": "src/analysis/special_functions/pow_deriv.lean", "newPath": "src/analysis/special_functions/pow/deriv.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow/nnreal.lean", "changes": [["add", "theorem", "coe_mul_rpow", ["ennreal"]], ["add", "theorem", "coe_rpow_def", ["ennreal"]], ["add", "theorem", "coe_rpow_of_ne_zero", ["ennreal"]], ["add", "theorem", "coe_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "div_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "inv_rpow", ["ennreal"]], ["add", "theorem", "le_rpow_one_div_iff", ["ennreal"]], ["add", "theorem", "le_rpow_self_of_one_le", ["ennreal"]], ["add", "theorem", "lt_rpow_one_div_iff", ["ennreal"]], ["add", "theorem", "monotone_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "mul_rpow_eq_ite", ["ennreal"]], ["add", "theorem", "mul_rpow_of_ne_top", ["ennreal"]], ["add", "theorem", "mul_rpow_of_ne_zero", ["ennreal"]], ["add", "theorem", "mul_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "of_real_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "of_real_rpow_of_pos", ["ennreal"]], ["add", "theorem", "one_le_rpow", ["ennreal"]], ["add", "theorem", "one_le_rpow_of_pos_of_le_one_of_neg", ["ennreal"]], ["add", "theorem", "one_lt_rpow", ["ennreal"]], ["add", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["ennreal"]], ["add", "theorem", "one_rpow", ["ennreal"]], ["add", "def", "order_iso_rpow", ["ennreal"]], ["add", "theorem", "order_iso_rpow_symm_apply", ["ennreal"]], ["add", "theorem", "rpow_add", ["ennreal"]], ["add", "theorem", "rpow_eq_pow", ["ennreal"]], ["add", "theorem", "rpow_eq_top_iff", ["ennreal"]], ["add", "theorem", "rpow_eq_top_iff_of_pos", ["ennreal"]], ["add", "theorem", "rpow_eq_top_of_nonneg", ["ennreal"]], ["add", "theorem", "rpow_eq_zero_iff", ["ennreal"]], ["add", "theorem", "rpow_le_one", ["ennreal"]], ["add", "theorem", "rpow_le_one_of_one_le_of_neg", ["ennreal"]], ["add", "theorem", "rpow_le_rpow", ["ennreal"]], ["add", "theorem", "rpow_le_rpow_iff", ["ennreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["ennreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["ennreal"]], ["add", "theorem", "rpow_le_self_of_le_one", ["ennreal"]], ["add", "theorem", "rpow_left_bijective", ["ennreal"]], ["add", "theorem", "rpow_left_injective", ["ennreal"]], ["add", "theorem", "rpow_left_surjective", ["ennreal"]], ["add", "theorem", "rpow_lt_one", ["ennreal"]], ["add", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow_iff", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["ennreal"]], ["add", "theorem", "rpow_lt_top_of_nonneg", ["ennreal"]], ["add", "theorem", "rpow_mul", ["ennreal"]], ["add", "theorem", "rpow_nat_cast", ["ennreal"]], ["add", "theorem", "rpow_ne_top_of_nonneg", ["ennreal"]], ["add", "theorem", "rpow_neg", ["ennreal"]], ["add", "theorem", "rpow_neg_one", ["ennreal"]], ["add", "theorem", "rpow_one", ["ennreal"]], ["add", "theorem", "rpow_one_div_le_iff", ["ennreal"]], ["add", "theorem", "rpow_pos", ["ennreal"]], ["add", "theorem", "rpow_pos_of_nonneg", ["ennreal"]], ["add", "theorem", "rpow_sub", ["ennreal"]], ["add", "theorem", "rpow_two", ["ennreal"]], ["add", "theorem", "rpow_zero", ["ennreal"]], ["add", "theorem", "strict_mono_rpow_of_pos", ["ennreal"]], ["add", "theorem", "to_nnreal_rpow", ["ennreal"]], ["add", "theorem", "to_real_rpow", ["ennreal"]], ["add", "theorem", "top_rpow_def", ["ennreal"]], ["add", "theorem", "top_rpow_of_neg", ["ennreal"]], ["add", "theorem", "top_rpow_of_pos", ["ennreal"]], ["add", "theorem", "zero_rpow_def", ["ennreal"]], ["add", "theorem", "zero_rpow_mul_self", ["ennreal"]], ["add", "theorem", "zero_rpow_of_neg", ["ennreal"]], ["add", "theorem", "zero_rpow_of_pos", ["ennreal"]], ["add", "theorem", "coe_rpow", ["nnreal"]], ["add", "theorem", "div_rpow", ["nnreal"]], ["add", "theorem", "eq_rpow_one_div_iff", ["nnreal"]], ["add", "theorem", "inv_rpow", ["nnreal"]], ["add", "theorem", "le_rpow_one_div_iff", ["nnreal"]], ["add", "theorem", "mul_rpow", ["nnreal"]], ["add", "theorem", "one_le_rpow", ["nnreal"]], ["add", "theorem", "one_le_rpow_of_pos_of_le_one_of_nonpos", ["nnreal"]], ["add", "theorem", "one_lt_rpow", ["nnreal"]], ["add", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["nnreal"]], ["add", "theorem", "one_rpow", ["nnreal"]], ["add", "theorem", "pow_nat_rpow_nat_inv", ["nnreal"]], ["add", "theorem", "rpow_add'", ["nnreal"]], ["add", "theorem", "rpow_add", ["nnreal"]], ["add", "theorem", "rpow_eq_pow", ["nnreal"]], ["add", "theorem", "rpow_eq_rpow_iff", ["nnreal"]], ["add", "theorem", "rpow_eq_zero_iff", ["nnreal"]], ["add", "theorem", "rpow_inv_rpow_self", ["nnreal"]], ["add", "theorem", "rpow_le_one", ["nnreal"]], ["add", "theorem", "rpow_le_one_of_one_le_of_nonpos", ["nnreal"]], ["add", "theorem", "rpow_le_rpow", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_iff", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["nnreal"]], ["add", "theorem", "rpow_le_self_of_le_one", ["nnreal"]], ["add", "theorem", "rpow_left_bijective", ["nnreal"]], ["add", "theorem", "rpow_left_injective", ["nnreal"]], ["add", "theorem", "rpow_left_surjective", ["nnreal"]], ["add", "theorem", "rpow_lt_one", ["nnreal"]], ["add", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_iff", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["nnreal"]], ["add", "theorem", "rpow_mul", ["nnreal"]], ["add", "theorem", "rpow_nat_cast", ["nnreal"]], ["add", "theorem", "rpow_nat_inv_pow_nat", ["nnreal"]], ["add", "theorem", "rpow_neg", ["nnreal"]], ["add", "theorem", "rpow_neg_one", ["nnreal"]], ["add", "theorem", "rpow_one", ["nnreal"]], ["add", "theorem", "rpow_one_div_eq_iff", ["nnreal"]], ["add", "theorem", "rpow_one_div_le_iff", ["nnreal"]], ["add", "theorem", "rpow_pos", ["nnreal"]], ["add", "theorem", "rpow_self_rpow_inv", ["nnreal"]], ["add", "theorem", "rpow_sub'", ["nnreal"]], ["add", "theorem", "rpow_sub", ["nnreal"]], ["add", "theorem", "rpow_two", ["nnreal"]], ["add", "theorem", "rpow_zero", ["nnreal"]], ["add", "theorem", "sqrt_eq_rpow", ["nnreal"]], ["add", "theorem", "zero_rpow", ["nnreal"]], ["add", "theorem", "to_nnreal_rpow_of_nonneg", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow/real.lean", "changes": [["add", "theorem", "abs_cpow_eq_rpow_re_of_nonneg", ["complex"]], ["add", "theorem", "abs_cpow_eq_rpow_re_of_pos", ["complex"]], ["add", "theorem", "abs_cpow_inv_nat", ["complex"]], ["add", "theorem", "abs_cpow_le", ["complex"]], ["add", "theorem", "abs_cpow_of_imp", ["complex"]], ["add", "theorem", "abs_cpow_of_ne_zero", ["complex"]], ["add", "theorem", "abs_cpow_real", ["complex"]], ["add", "theorem", "of_real_cpow", ["complex"]], ["add", "theorem", "of_real_cpow_of_nonpos", ["complex"]], ["add", "theorem", "abs_log_mul_self_rpow_lt", ["real"]], ["add", "theorem", "abs_rpow_le_abs_rpow", ["real"]], ["add", "theorem", "abs_rpow_le_exp_log_mul", ["real"]], ["add", "theorem", "abs_rpow_of_nonneg", ["real"]], ["add", "theorem", "div_rpow", ["real"]], ["add", "theorem", "eq_zero_rpow_iff", ["real"]], ["add", "theorem", "exists_rat_pow_btwn", ["real"]], ["add", "theorem", "exists_rat_pow_btwn_rat", ["real"]], ["add", "theorem", "exists_rat_pow_btwn_rat_aux", ["real"]], ["add", "theorem", "exp_mul", ["real"]], ["add", "theorem", "exp_one_rpow", ["real"]], ["add", "theorem", "inv_rpow", ["real"]], ["add", "theorem", "le_rpow_add", ["real"]], ["add", "theorem", "le_rpow_iff_log_le", ["real"]], ["add", "theorem", "le_rpow_inv_iff_of_neg", ["real"]], ["add", "theorem", "le_rpow_of_log_le", ["real"]], ["add", "theorem", "log_rpow", ["real"]], ["add", "theorem", "lt_rpow_iff_log_lt", ["real"]], ["add", "theorem", "lt_rpow_inv_iff_of_neg", ["real"]], ["add", "theorem", "lt_rpow_of_log_lt", ["real"]], ["add", "theorem", "mul_rpow", ["real"]], ["add", "theorem", "norm_rpow_of_nonneg", ["real"]], ["add", "theorem", "one_le_rpow", ["real"]], ["add", "theorem", "one_le_rpow_of_pos_of_le_one_of_nonpos", ["real"]], ["add", "theorem", "one_lt_rpow", ["real"]], ["add", "theorem", "one_lt_rpow_iff", ["real"]], ["add", "theorem", "one_lt_rpow_iff_of_pos", ["real"]], ["add", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["real"]], ["add", "theorem", "one_rpow", ["real"]], ["add", "theorem", "pow_nat_rpow_nat_inv", ["real"]], ["add", "theorem", "rpow_add'", ["real"]], ["add", "theorem", "rpow_add", ["real"]], ["add", "theorem", "rpow_add_int", ["real"]], ["add", "theorem", "rpow_add_nat", ["real"]], ["add", "theorem", "rpow_add_of_nonneg", ["real"]], ["add", "theorem", "rpow_add_one", ["real"]], ["add", "theorem", "rpow_def", ["real"]], ["add", "theorem", "rpow_def_of_neg", ["real"]], ["add", "theorem", "rpow_def_of_nonneg", ["real"]], ["add", "theorem", "rpow_def_of_nonpos", ["real"]], ["add", "theorem", "rpow_def_of_pos", ["real"]], ["add", "theorem", "rpow_div_two_eq_sqrt", ["real"]], ["add", "theorem", "rpow_eq_pow", ["real"]], ["add", "theorem", "rpow_eq_zero_iff_of_nonneg", ["real"]], ["add", "theorem", "rpow_int_cast", ["real"]], ["add", "theorem", "rpow_inv_le_iff_of_neg", ["real"]], ["add", "theorem", "rpow_inv_lt_iff_of_neg", ["real"]], ["add", "theorem", "rpow_le_one", ["real"]], ["add", "theorem", "rpow_le_one_iff_of_pos", ["real"]], ["add", "theorem", "rpow_le_one_of_one_le_of_nonpos", ["real"]], ["add", "theorem", "rpow_le_rpow", ["real"]], ["add", "theorem", "rpow_le_rpow_iff", ["real"]], ["add", "theorem", "rpow_le_rpow_left_iff", ["real"]], ["add", "theorem", "rpow_le_rpow_left_iff_of_base_lt_one", ["real"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge'", ["real"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["real"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["real"]], ["add", "theorem", "rpow_left_inj_on", ["real"]], ["add", "theorem", "rpow_lt_one", ["real"]], ["add", "theorem", "rpow_lt_one_iff", ["real"]], ["add", "theorem", "rpow_lt_one_iff_of_pos", ["real"]], ["add", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["real"]], ["add", "theorem", "rpow_lt_rpow", ["real"]], ["add", "theorem", "rpow_lt_rpow_iff", ["real"]], ["add", "theorem", "rpow_lt_rpow_left_iff", ["real"]], ["add", "theorem", "rpow_lt_rpow_left_iff_of_base_lt_one", ["real"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["real"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["real"]], ["add", "theorem", "rpow_mul", ["real"]], ["add", "theorem", "rpow_nat_cast", ["real"]], ["add", "theorem", "rpow_nat_inv_pow_nat", ["real"]], ["add", "theorem", "rpow_neg", ["real"]], ["add", "theorem", "rpow_neg_one", ["real"]], ["add", "theorem", "rpow_nonneg_of_nonneg", ["real"]], ["add", "theorem", "rpow_one", ["real"]], ["add", "theorem", "rpow_pos_of_pos", ["real"]], ["add", "theorem", "rpow_sub'", ["real"]], ["add", "theorem", "rpow_sub", ["real"]], ["add", "theorem", "rpow_sub_int", ["real"]], ["add", "theorem", "rpow_sub_nat", ["real"]], ["add", "theorem", "rpow_sub_one", ["real"]], ["add", "theorem", "rpow_sum_of_nonneg", ["real"]], ["add", "theorem", "rpow_sum_of_pos", ["real"]], ["add", "theorem", "rpow_two", ["real"]], ["add", "theorem", "rpow_zero", ["real"]], ["add", "theorem", "sqrt_eq_rpow", ["real"]], ["add", "theorem", "zero_rpow", ["real"]], ["add", "theorem", "zero_rpow_eq_iff", ["real"]], ["add", "theorem", "zero_rpow_le_one", ["real"]], ["add", "theorem", "zero_rpow_nonneg", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow/tactic.lean", "changes": [["add", "theorem", "cpow_neg", ["norm_num"]], ["add", "theorem", "cpow_pos", ["norm_num"]], ["add", "theorem", "ennrpow_neg", ["norm_num"]], ["add", "theorem", "ennrpow_pos", ["norm_num"]], ["add", "theorem", "nnrpow_neg", ["norm_num"]], ["add", "theorem", "nnrpow_pos", ["norm_num"]], ["add", "theorem", "rpow_neg", ["norm_num"]], ["add", "theorem", "rpow_pos", ["norm_num"]]]}, {"oldPath": "src/analysis/specific_limits/floor_pow.lean", "newPath": "src/analysis/specific_limits/floor_pow.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/behrend.lean", "newPath": "src/combinatorics/additive/behrend.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/complex.lean", "newPath": "src/linear_algebra/quadratic_form/complex.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/real.lean", "newPath": "src/linear_algebra/quadratic_form/real.lean", "changes": []}, {"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/basic.lean", "newPath": "src/measure_theory/function/special_functions/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/number_theory/bertrand.lean", "newPath": "src/number_theory/bertrand.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_with.lean", "newPath": "src/number_theory/liouville/liouville_with.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/topology/metric_space/holder.lean", "newPath": "src/topology/metric_space/holder.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1684168223, "sha": "24e0c854", "message": "chore(measure_theory/{integral/set_integral,function/*}): split out inner product space material (#19019)\nSplit out inner product space material from\n```text\nmeasure_theory/function/lp_space\nmeasure_theory/function/l1_space\nmeasure_theory/integral/set_integral\n```\ninto `measure_theory/integral/l2_space`, the only place it's used. This removes the dependence of the Bochner integral file on `inner_product_space`.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["del", "theorem", "const_inner", ["measure_theory", "integrable"]], ["del", "theorem", "inner_const", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": [["add", "theorem", "integral_eq_zero_of_forall_integral_inner_eq_zero", []], ["add", "theorem", "integral_inner", []], ["add", "theorem", "const_inner", ["measure_theory", "integrable"]], ["add", "theorem", "inner_const", ["measure_theory", "integrable"]], ["add", "theorem", "const_inner", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "inner_const", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["del", "theorem", "const_inner", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "inner_const", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["del", "theorem", "integral_eq_zero_of_forall_integral_inner_eq_zero", []], ["del", "theorem", "integral_inner", []]]}]}, {"timestamp": 1684148216, "sha": "1fd85189", "message": "chore(measure_theory/measure/haar_lebesgue): remove unecessary parens (#19017)\nSome cleanup extracted from a larger refactor.", "changes": [{"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}]}, {"timestamp": 1684140011, "sha": "dbdf71ce", "message": "chore(*): add mathlib4 synchronization comments (#19009)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.injective`\n* `algebra.category.Ring.basic`\n* `algebra.homology.augment`\n* `analysis.convex.contractible`\n* `analysis.convex.gauge`\n* `category_theory.abelian.homology`\n* `category_theory.subterminal`\n* `model_theory.bundled`\n* `model_theory.elementary_maps`\n* `model_theory.finitely_generated`\n* `model_theory.skolem`\n* `topology.category.Top.limits.cofiltered`\n* `topology.category.Top.limits.konig`\n* `topology.homotopy.contractible`\n* `topology.homotopy.path`\n* `topology.sheaves.abelian`", "changes": [{"oldPath": "src/algebra/category/Group/injective.lean", "newPath": "src/algebra/category/Group/injective.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/basic.lean", "newPath": "src/algebra/category/Ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": []}, {"oldPath": "src/analysis/convex/contractible.lean", "newPath": "src/analysis/convex/contractible.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/homology.lean", "newPath": "src/category_theory/abelian/homology.lean", "changes": []}, {"oldPath": "src/category_theory/subterminal.lean", "newPath": "src/category_theory/subterminal.lean", "changes": []}, {"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": []}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": []}, {"oldPath": "src/model_theory/skolem.lean", "newPath": "src/model_theory/skolem.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits/cofiltered.lean", "newPath": "src/topology/category/Top/limits/cofiltered.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits/konig.lean", "newPath": "src/topology/category/Top/limits/konig.lean", "changes": []}, {"oldPath": "src/topology/homotopy/contractible.lean", "newPath": "src/topology/homotopy/contractible.lean", "changes": []}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": []}, {"oldPath": "src/topology/sheaves/abelian.lean", "newPath": "src/topology/sheaves/abelian.lean", "changes": []}]}, {"timestamp": 1684134505, "sha": "e9f2a838", "message": "chore(analysis/normed_space/pi_Lp): add `pi_Lp.continuous_linear_equiv` (#19014)\nThis bundling is often useful to have.\nWe keep around `pi_Lp.linear_equiv` as this is shorter to write than `pi_Lp.continuous_linear_equiv.to_linear_equiv`.", "changes": [{"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}]}, {"timestamp": 1684134504, "sha": "4b884eff", "message": "chore(measure_theory/measure/haar_of_basis): lemmas about `basis.parallelepiped` (#18873)\nThese are bundled versions of the lemmas about `parallelepiped`.\nThis is working towards the result that the measure on `euclidean_space` and the corresponding pi type agree.", "changes": [{"oldPath": "src/measure_theory/measure/haar_of_basis.lean", "newPath": "src/measure_theory/measure/haar_of_basis.lean", "changes": [["add", "theorem", "coe_parallelepiped", ["basis"]], ["add", "theorem", "parallelepiped_map", ["basis"]], ["add", "theorem", "parallelepiped_reindex", ["basis"]]]}]}, {"timestamp": 1684130583, "sha": "74a27133", "message": "feat(number_theory/legendre_symbol/*): add some API for the Legendre and the Jacobi symbol (#19011)\nThis PR adds some additional API lemmas for the Legendre symbol (related to solutions mod `p` of `x^2-a*y^2 = 0`) and for the Jacobi symbol. These are useful for a project formalizing the proof that a certain diophantine equation has no integral solutions, but also appear to make sense more generally.", "changes": [{"oldPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "newPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "changes": [["add", "theorem", "eq_neg_one_at_prime_divisor_of_eq_neg_one", ["jacobi_sym"]], ["add", "theorem", "list_prod_left", ["jacobi_sym"]], ["add", "theorem", "list_prod_right", ["jacobi_sym"]], ["add", "theorem", "prime_dvd_of_eq_neg_one", ["jacobi_sym"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["add", "theorem", "eq_one_of_sq_sub_mul_sq_eq_zero'", ["legendre_sym"]], ["add", "theorem", "eq_one_of_sq_sub_mul_sq_eq_zero", ["legendre_sym"]], ["add", "theorem", "eq_zero_mod_of_eq_neg_one", ["legendre_sym"]], ["add", "theorem", "prime_dvd_of_eq_neg_one", ["legendre_sym"]]]}]}, {"timestamp": 1684125577, "sha": "bf6a0135", "message": "chore(measure_theory/{constructions/borel_space,integral/lebesgue}): split (#19015)\nRemove dependence on\n```text\nimport analysis.complex.basic\nimport analysis.normed_space.basic\nimport topology.instances.add_circle\nimport topology.metric_space.metrizable\n```\nfrom `measure_theory.constructions.borel_space` (in particular this gets rid of the `operator_norm` dependency, which is currently the big blocker) and `measure_theory.integral.lebesgue`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space/basic.lean", "changes": [["del", "theorem", "apply_continuous_linear_map", ["ae_measurable"]], ["del", "theorem", "ae_measurable_of_tendsto_metrizable_ae'", []], ["del", "theorem", "ae_measurable_of_tendsto_metrizable_ae", []], ["del", "theorem", "ae_measurable_of_unif_approx", []], ["del", "theorem", "ae_measurable_smul_const", []], ["del", "theorem", "measurable_apply'", ["continuous_linear_map"]], ["del", "theorem", "measurable_apply", ["continuous_linear_map"]], ["del", "theorem", "measurable_coe", ["continuous_linear_map"]], ["del", "theorem", "measurable_comp", ["continuous_linear_map"]], ["del", "theorem", "apply_continuous_linear_map", ["measurable"]], ["del", "theorem", "measurable_limit_of_tendsto_metrizable_ae", []], ["del", "theorem", "measurable_of_tendsto_ennreal'", []], ["del", "theorem", "measurable_of_tendsto_ennreal", []], ["del", "theorem", "measurable_of_tendsto_metrizable'", []], ["del", "theorem", "measurable_of_tendsto_metrizable", []], ["del", "theorem", "measurable_of_tendsto_metrizable_ae", []], ["del", "theorem", "measurable_of_tendsto_nnreal'", []], ["del", "theorem", "measurable_of_tendsto_nnreal", []], ["del", "theorem", "measurable_smul_const", []]]}, {"oldPath": null, "newPath": "src/measure_theory/constructions/borel_space/complex.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/constructions/borel_space/continuous_linear_map.lean", "changes": [["add", "theorem", "apply_continuous_linear_map", ["ae_measurable"]], ["add", "theorem", "ae_measurable_smul_const", []], ["add", "theorem", "measurable_apply'", ["continuous_linear_map"]], ["add", "theorem", "measurable_apply", ["continuous_linear_map"]], ["add", "theorem", "measurable_coe", ["continuous_linear_map"]], ["add", "theorem", "measurable_comp", ["continuous_linear_map"]], ["add", "theorem", "apply_continuous_linear_map", ["measurable"]], ["add", "theorem", "measurable_smul_const", []]]}, {"oldPath": null, "newPath": "src/measure_theory/constructions/borel_space/metrizable.lean", "changes": [["add", "theorem", "ae_measurable_of_tendsto_metrizable_ae'", []], ["add", "theorem", "ae_measurable_of_tendsto_metrizable_ae", []], ["add", "theorem", "ae_measurable_of_unif_approx", []], ["add", "theorem", "measurable_limit_of_tendsto_metrizable_ae", []], ["add", "theorem", "measurable_of_tendsto_ennreal'", []], ["add", "theorem", "measurable_of_tendsto_ennreal", []], ["add", "theorem", "measurable_of_tendsto_metrizable'", []], ["add", "theorem", "measurable_of_tendsto_metrizable", []], ["add", "theorem", "measurable_of_tendsto_metrizable_ae", []], ["add", "theorem", "measurable_of_tendsto_nnreal'", []], ["add", "theorem", "measurable_of_tendsto_nnreal", []]]}, {"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_order.lean", "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": []}, {"oldPath": "src/measure_theory/function/floor.lean", "newPath": "src/measure_theory/function/floor.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func.lean", "newPath": "src/measure_theory/function/simple_func.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/arctan.lean", "newPath": "src/measure_theory/function/special_functions/arctan.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/basic.lean", "newPath": "src/measure_theory/function/special_functions/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/inner.lean", "newPath": "src/measure_theory/function/special_functions/inner.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable/basic.lean", "newPath": "src/measure_theory/function/strongly_measurable/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["del", "theorem", "ae_measurable_with_density_iff", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/lebesgue_normed_space.lean", "changes": [["add", "theorem", "ae_measurable_with_density_iff", []]]}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}]}, {"timestamp": 1684102884, "sha": "2f5b500a", "message": "fix(data/mv_polynomial): add missing `decidable_eq` arguments to lemmas (#18848)\nThis does not change the type of any definitions; the effect of this PR is to make the *statement* of the lemmas syntactically more general.\nTo ensure this catches them all, this removes `open_locale classical` from the beginning of every file in `data/mv_polynomial` and `ring_theory/mv_polynomial`.\nFor definitions which bake in a `classical.dec_eq` assumption, this adds a lemma proven by `convert rfl` that unfolds them to a version with an arbitrary `decidable_eq` instance, following a pattern established elsewhere.\nUnlike previous refactors of this style this doesn't seemed to have helped any downstream proofs much.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "support_add", ["mv_polynomial"]], ["mod", "theorem", "support_mul", ["mv_polynomial"]], ["mod", "theorem", "support_sum", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["mod", "theorem", "degrees_sub", ["mv_polynomial"]], ["mod", "theorem", "support_sub", ["mv_polynomial"]], ["mod", "theorem", "vars_sub_of_disjoint", ["mv_polynomial"]], ["mod", "theorem", "vars_sub_subset", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": [["mod", "theorem", "vars_bind₁", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": [["mod", "theorem", "pderiv_X", ["mv_polynomial"]], ["mod", "theorem", "pderiv_X_self", ["mv_polynomial"]], ["add", "theorem", "pderiv_def", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["mod", "theorem", "support_rename_of_injective", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/supported.lean", "newPath": "src/data/mv_polynomial/supported.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["mod", "def", "degree_of", ["mv_polynomial"]], ["mod", "theorem", "degree_of_X", ["mv_polynomial"]], ["add", "theorem", "degree_of_def", ["mv_polynomial"]], ["mod", "theorem", "degrees_add", ["mv_polynomial"]], ["mod", "theorem", "degrees_add_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "degrees_def", ["mv_polynomial"]], ["mod", "theorem", "degrees_sum", ["mv_polynomial"]], ["mod", "def", "vars", ["mv_polynomial"]], ["mod", "theorem", "vars_add_of_disjoint", ["mv_polynomial"]], ["mod", "theorem", "vars_add_subset", ["mv_polynomial"]], ["add", "theorem", "vars_def", ["mv_polynomial"]], ["mod", "theorem", "vars_eq_support_bUnion_support", ["mv_polynomial"]], ["mod", "theorem", "vars_mul", ["mv_polynomial"]], ["mod", "theorem", "vars_prod", ["mv_polynomial"]], ["mod", "theorem", "vars_rename", ["mv_polynomial"]], ["mod", "theorem", "vars_sum_of_disjoint", ["mv_polynomial"]], ["mod", "theorem", "vars_sum_subset", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "mem_restrict_degree_iff_sup", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/mv_polynomial/homogeneous.lean", "newPath": "src/ring_theory/mv_polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/symmetric.lean", "newPath": "src/ring_theory/mv_polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/weighted_homogeneous.lean", "newPath": "src/ring_theory/mv_polynomial/weighted_homogeneous.lean", "changes": [["mod", "theorem", "coeff_weighted_homogeneous_component", ["mv_polynomial"]], ["mod", "theorem", "weighted_homogeneous_component_apply", ["mv_polynomial"]], ["mod", "theorem", "weighted_homogeneous_component_weighted_homogeneous_polynomial", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/witt_vector/mul_coeff.lean", "newPath": "src/ring_theory/witt_vector/mul_coeff.lean", "changes": []}]}, {"timestamp": 1684077249, "sha": "7ad820c4", "message": "doc(number_theory/pell): fix links in module docstring (#19010)\nThis PR fixes two typos in the module docstring of `number_theory.pell` (a missing and a mis-spelt namespace part), which prevented doc-gen from linking to the relevant statements.", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}]}, {"timestamp": 1684055206, "sha": "79827670", "message": "chore(analysis/special_functions/gamma): split into 3 files (#19004)\nThis PR splits the existing 1500-line file `analysis.special_functions.gamma` into 3 files. There are no changes to the content of the files (other than top-of-file docstrings and imports).", "changes": [{"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": null, "changes": [["del", "def", "Gamma", ["complex"]], ["del", "theorem", "Gamma_add_one", ["complex"]], ["del", "theorem", "Gamma_aux_recurrence1", ["complex"]], ["del", "theorem", "Gamma_aux_recurrence2", ["complex"]], ["del", "theorem", "Gamma_conj", ["complex"]], ["del", "theorem", "Gamma_eq_Gamma_aux", ["complex"]], ["del", "theorem", "Gamma_eq_integral", ["complex"]], ["del", "theorem", "Gamma_eq_zero_iff", ["complex"]], ["del", "def", "Gamma_integral", ["complex"]], ["del", "theorem", "Gamma_integral_add_one", ["complex"]], ["del", "theorem", "Gamma_integral_conj", ["complex"]], ["del", "theorem", "Gamma_integral_convergent", ["complex"]], ["del", "theorem", "Gamma_integral_of_real", ["complex"]], ["del", "theorem", "Gamma_integral_one", ["complex"]], ["del", "theorem", "Gamma_mul_Gamma_eq_beta_integral", ["complex"]], ["del", "theorem", "Gamma_mul_Gamma_one_sub", ["complex"]], ["del", "theorem", "Gamma_nat_eq_factorial", ["complex"]], ["del", "theorem", "Gamma_ne_zero", ["complex"]], ["del", "theorem", "Gamma_neg_nat_eq_zero", ["complex"]], ["del", "theorem", "Gamma_of_real", ["complex"]], ["del", "theorem", "Gamma_one", ["complex"]], ["del", "theorem", "Gamma_seq_add_one_left", ["complex"]], ["del", "theorem", "Gamma_seq_eq_approx_Gamma_integral", ["complex"]], ["del", "theorem", "Gamma_seq_eq_beta_integral_of_re_pos", ["complex"]], ["del", "theorem", "Gamma_seq_mul", ["complex"]], ["del", "theorem", "Gamma_seq_tendsto_Gamma", ["complex"]], ["del", "theorem", "Gamma_zero", ["complex"]], ["del", "theorem", "approx_Gamma_integral_tendsto_Gamma_integral", ["complex"]], ["del", "theorem", "beta_integral_convergent", ["complex"]], ["del", "theorem", "beta_integral_convergent_left", ["complex"]], ["del", "theorem", "beta_integral_eval_nat_add_one_right", ["complex"]], ["del", "theorem", "beta_integral_eval_one_right", ["complex"]], ["del", "theorem", "beta_integral_recurrence", ["complex"]], ["del", "theorem", "beta_integral_scaled", ["complex"]], ["del", "theorem", "beta_integral_symm", ["complex"]], ["del", "theorem", "differentiable_at_Gamma", ["complex"]], ["del", "theorem", "differentiable_at_Gamma_aux", ["complex"]], ["del", "theorem", "has_deriv_at_Gamma_integral", ["complex"]], ["del", "def", "partial_Gamma", ["complex"]], ["del", "theorem", "partial_Gamma_add_one", ["complex"]], ["del", "theorem", "tendsto_partial_Gamma", ["complex"]], ["del", "theorem", "dGamma_integral_abs_convergent", []], ["del", "def", "dGamma_integrand", []], ["del", "theorem", "dGamma_integrand_is_o_at_top", []], ["del", "def", "dGamma_integrand_real", []], ["del", "theorem", "loc_unif_bound_dGamma_integrand", []], ["del", "def", "Gamma", ["real"]], ["del", "theorem", "Gamma_add_one", ["real"]], ["del", "theorem", "Gamma_eq_integral", ["real"]], ["del", "theorem", "Gamma_eq_zero_iff", ["real"]], ["del", "theorem", "Gamma_integral_convergent", ["real"]], ["del", "theorem", "Gamma_integrand_is_o", ["real"]], ["del", "theorem", "Gamma_mul_Gamma_one_sub", ["real"]], ["del", "theorem", "Gamma_mul_add_mul_le_rpow_Gamma_mul_rpow_Gamma", ["real"]], ["del", "theorem", "Gamma_nat_eq_factorial", ["real"]], ["del", "theorem", "Gamma_ne_zero", ["real"]], ["del", "theorem", "Gamma_neg_nat_eq_zero", ["real"]], ["del", "theorem", "Gamma_one", ["real"]], ["del", "theorem", "Gamma_pos_of_pos", ["real"]], ["del", "theorem", "Gamma_seq_tendsto_Gamma", ["real"]], ["del", "theorem", "Gamma_strict_mono_on_Ici", ["real"]], ["del", "theorem", "Gamma_three_div_two_lt_one", ["real"]], ["del", "theorem", "Gamma_two", ["real"]], ["del", "theorem", "Gamma_zero", ["real"]], ["del", "theorem", "f_add_nat_eq", ["real", "bohr_mollerup"]], ["del", "theorem", "f_add_nat_ge", ["real", "bohr_mollerup"]], ["del", "theorem", "f_add_nat_le", ["real", "bohr_mollerup"]], ["del", "theorem", "f_nat_eq", ["real", "bohr_mollerup"]], ["del", "theorem", "ge_log_gamma_seq", ["real", "bohr_mollerup"]], ["del", "theorem", "le_log_gamma_seq", ["real", "bohr_mollerup"]], ["del", "def", "log_gamma_seq", ["real", "bohr_mollerup"]], ["del", "theorem", "log_gamma_seq_add_one", ["real", "bohr_mollerup"]], ["del", "theorem", "tendsto_log_Gamma", ["real", "bohr_mollerup"]], ["del", "theorem", "tendsto_log_gamma_seq", ["real", "bohr_mollerup"]], ["del", "theorem", "tendsto_log_gamma_seq_of_le_one", ["real", "bohr_mollerup"]], ["del", "theorem", "convex_on_Gamma", ["real"]], ["del", "theorem", "convex_on_log_Gamma", ["real"]], ["del", "theorem", "differentiable_at_Gamma", ["real"]], ["del", "theorem", "eq_Gamma_of_log_convex", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/gamma/basic.lean", "changes": [["add", "def", "Gamma", ["complex"]], ["add", "theorem", "Gamma_add_one", ["complex"]], ["add", "theorem", "Gamma_aux_recurrence1", ["complex"]], ["add", "theorem", "Gamma_aux_recurrence2", ["complex"]], ["add", "theorem", "Gamma_conj", ["complex"]], ["add", "theorem", "Gamma_eq_Gamma_aux", ["complex"]], ["add", "theorem", "Gamma_eq_integral", ["complex"]], ["add", "def", "Gamma_integral", ["complex"]], ["add", "theorem", "Gamma_integral_add_one", ["complex"]], ["add", "theorem", "Gamma_integral_conj", ["complex"]], ["add", "theorem", "Gamma_integral_convergent", ["complex"]], ["add", "theorem", "Gamma_integral_of_real", ["complex"]], ["add", "theorem", "Gamma_integral_one", ["complex"]], ["add", "theorem", "Gamma_nat_eq_factorial", ["complex"]], ["add", "theorem", "Gamma_neg_nat_eq_zero", ["complex"]], ["add", "theorem", "Gamma_of_real", ["complex"]], ["add", "theorem", "Gamma_one", ["complex"]], ["add", "theorem", "Gamma_zero", ["complex"]], ["add", "theorem", "differentiable_at_Gamma", ["complex"]], ["add", "theorem", "differentiable_at_Gamma_aux", ["complex"]], ["add", "theorem", "has_deriv_at_Gamma_integral", ["complex"]], ["add", "def", "partial_Gamma", ["complex"]], ["add", "theorem", "partial_Gamma_add_one", ["complex"]], ["add", "theorem", "tendsto_partial_Gamma", ["complex"]], ["add", "theorem", "dGamma_integral_abs_convergent", []], ["add", "def", "dGamma_integrand", []], ["add", "theorem", "dGamma_integrand_is_o_at_top", []], ["add", "def", "dGamma_integrand_real", []], ["add", "theorem", "loc_unif_bound_dGamma_integrand", []], ["add", "def", "Gamma", ["real"]], ["add", "theorem", "Gamma_add_one", ["real"]], ["add", "theorem", "Gamma_eq_integral", ["real"]], ["add", "theorem", "Gamma_eq_zero_iff", ["real"]], ["add", "theorem", "Gamma_integral_convergent", ["real"]], ["add", "theorem", "Gamma_integrand_is_o", ["real"]], ["add", "theorem", "Gamma_nat_eq_factorial", ["real"]], ["add", "theorem", "Gamma_ne_zero", ["real"]], ["add", "theorem", "Gamma_neg_nat_eq_zero", ["real"]], ["add", "theorem", "Gamma_one", ["real"]], ["add", "theorem", "Gamma_pos_of_pos", ["real"]], ["add", "theorem", "Gamma_zero", ["real"]], ["add", "theorem", "differentiable_at_Gamma", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/gamma/beta.lean", "changes": [["add", "theorem", "Gamma_eq_zero_iff", ["complex"]], ["add", "theorem", "Gamma_mul_Gamma_eq_beta_integral", ["complex"]], ["add", "theorem", "Gamma_mul_Gamma_one_sub", ["complex"]], ["add", "theorem", "Gamma_ne_zero", ["complex"]], ["add", "theorem", "Gamma_seq_add_one_left", ["complex"]], ["add", "theorem", "Gamma_seq_eq_approx_Gamma_integral", ["complex"]], ["add", "theorem", "Gamma_seq_eq_beta_integral_of_re_pos", ["complex"]], ["add", "theorem", "Gamma_seq_mul", ["complex"]], ["add", "theorem", "Gamma_seq_tendsto_Gamma", ["complex"]], ["add", "theorem", "approx_Gamma_integral_tendsto_Gamma_integral", ["complex"]], ["add", "theorem", "beta_integral_convergent", ["complex"]], ["add", "theorem", "beta_integral_convergent_left", ["complex"]], ["add", "theorem", "beta_integral_eval_nat_add_one_right", ["complex"]], ["add", "theorem", "beta_integral_eval_one_right", ["complex"]], ["add", "theorem", "beta_integral_recurrence", ["complex"]], ["add", "theorem", "beta_integral_scaled", ["complex"]], ["add", "theorem", "beta_integral_symm", ["complex"]], ["add", "theorem", "Gamma_mul_Gamma_one_sub", ["real"]], ["add", "theorem", "Gamma_seq_tendsto_Gamma", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/gamma/bohr_mollerup.lean", "changes": [["add", "theorem", "Gamma_mul_add_mul_le_rpow_Gamma_mul_rpow_Gamma", ["real"]], ["add", "theorem", "Gamma_strict_mono_on_Ici", ["real"]], ["add", "theorem", "Gamma_three_div_two_lt_one", ["real"]], ["add", "theorem", "Gamma_two", ["real"]], ["add", "theorem", "f_add_nat_eq", ["real", "bohr_mollerup"]], ["add", "theorem", "f_add_nat_ge", ["real", "bohr_mollerup"]], ["add", "theorem", "f_add_nat_le", ["real", "bohr_mollerup"]], ["add", "theorem", "f_nat_eq", ["real", "bohr_mollerup"]], ["add", "theorem", "ge_log_gamma_seq", ["real", "bohr_mollerup"]], ["add", "theorem", "le_log_gamma_seq", ["real", "bohr_mollerup"]], ["add", "def", "log_gamma_seq", ["real", "bohr_mollerup"]], ["add", "theorem", "log_gamma_seq_add_one", ["real", "bohr_mollerup"]], ["add", "theorem", "tendsto_log_Gamma", ["real", "bohr_mollerup"]], ["add", "theorem", "tendsto_log_gamma_seq", ["real", "bohr_mollerup"]], ["add", "theorem", "tendsto_log_gamma_seq_of_le_one", ["real", "bohr_mollerup"]], ["add", "theorem", "convex_on_Gamma", ["real"]], ["add", "theorem", "convex_on_log_Gamma", ["real"]], ["add", "theorem", "eq_Gamma_of_log_convex", ["real"]]]}, {"oldPath": "src/analysis/special_functions/gaussian.lean", "newPath": "src/analysis/special_functions/gaussian.lean", "changes": []}]}, {"timestamp": 1684001241, "sha": "e3fb8404", "message": "chore(analysis/calculus/fderiv): split huge file into many pieces (#18995)\nSplits `analysis/calculus/fderiv.lean` into many subfiles. The file was already structured into well-organized sections. Small sections that fit well-together contentwise end up in a single file. Larger sections get their own file.\nThe order of the sections changed a bit (to the extent that it still makes sense to say that they are ordered, after the split). But none of the sections were split into subsections.", "changes": [{"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/calculus/conformal/normed_space.lean", "newPath": "src/analysis/calculus/conformal/normed_space.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/add.lean", "changes": [["add", "theorem", "add", ["differentiable"]], ["add", "theorem", "add_const", ["differentiable"]], ["add", "theorem", "const_add", ["differentiable"]], ["add", "theorem", "const_smul", ["differentiable"]], ["add", "theorem", "const_sub", ["differentiable"]], ["add", "theorem", "neg", ["differentiable"]], ["add", "theorem", "sub", ["differentiable"]], ["add", "theorem", "sub_const", ["differentiable"]], ["add", "theorem", "sum", ["differentiable"]], ["add", "theorem", "differentiable_add_const_iff", []], ["add", "theorem", "add", ["differentiable_at"]], ["add", "theorem", "add_const", ["differentiable_at"]], ["add", "theorem", "const_add", ["differentiable_at"]], ["add", "theorem", "const_smul", ["differentiable_at"]], ["add", "theorem", "const_sub", ["differentiable_at"]], ["add", "theorem", "neg", ["differentiable_at"]], ["add", "theorem", "sub", ["differentiable_at"]], ["add", "theorem", "sub_const", ["differentiable_at"]], ["add", "theorem", "sum", ["differentiable_at"]], ["add", "theorem", "differentiable_at_add_const_iff", []], ["add", "theorem", "differentiable_at_const_add_iff", []], ["add", "theorem", "differentiable_at_const_sub_iff", []], ["add", "theorem", "differentiable_at_neg_iff", []], ["add", "theorem", "differentiable_at_sub_const_iff", []], ["add", "theorem", "differentiable_const_add_iff", []], ["add", "theorem", "differentiable_const_sub_iff", []], ["add", "theorem", "differentiable_neg_iff", []], ["add", "theorem", "add", ["differentiable_on"]], ["add", "theorem", "add_const", ["differentiable_on"]], ["add", "theorem", "const_add", ["differentiable_on"]], ["add", "theorem", "const_smul", ["differentiable_on"]], ["add", "theorem", "const_sub", ["differentiable_on"]], ["add", "theorem", "neg", ["differentiable_on"]], ["add", "theorem", "sub", ["differentiable_on"]], ["add", "theorem", "sub_const", ["differentiable_on"]], ["add", "theorem", "sum", ["differentiable_on"]], ["add", "theorem", "differentiable_on_add_const_iff", []], ["add", "theorem", "differentiable_on_const_add_iff", []], ["add", "theorem", "differentiable_on_const_sub_iff", []], ["add", "theorem", "differentiable_on_neg_iff", []], ["add", "theorem", "differentiable_on_sub_const_iff", []], ["add", "theorem", "differentiable_sub_const_iff", []], ["add", "theorem", "add", ["differentiable_within_at"]], ["add", "theorem", "add_const", ["differentiable_within_at"]], ["add", "theorem", "const_add", ["differentiable_within_at"]], ["add", "theorem", "const_smul", ["differentiable_within_at"]], ["add", "theorem", "const_sub", ["differentiable_within_at"]], ["add", "theorem", "neg", ["differentiable_within_at"]], ["add", "theorem", "sub", ["differentiable_within_at"]], ["add", "theorem", "sub_const", ["differentiable_within_at"]], ["add", "theorem", "sum", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_add_const_iff", []], ["add", "theorem", "differentiable_within_at_const_add_iff", []], ["add", "theorem", "differentiable_within_at_const_sub_iff", []], ["add", "theorem", "differentiable_within_at_neg_iff", []], ["add", "theorem", "differentiable_within_at_sub_const_iff", []], ["add", "theorem", "fderiv_add", []], ["add", "theorem", "fderiv_add_const", []], ["add", "theorem", "fderiv_const_add", []], ["add", "theorem", "fderiv_const_smul", []], ["add", "theorem", "fderiv_const_sub", []], ["add", "theorem", "fderiv_neg", []], ["add", "theorem", "fderiv_sub", []], ["add", "theorem", "fderiv_sub_const", []], ["add", "theorem", "fderiv_sum", []], ["add", "theorem", "fderiv_within_add", []], ["add", "theorem", "fderiv_within_add_const", []], ["add", "theorem", "fderiv_within_const_add", []], ["add", "theorem", "fderiv_within_const_smul", []], ["add", "theorem", "fderiv_within_const_sub", []], ["add", "theorem", "fderiv_within_neg", []], ["add", "theorem", "fderiv_within_sub", []], ["add", "theorem", "fderiv_within_sub_const", []], ["add", "theorem", "fderiv_within_sum", []], ["add", "theorem", "add", ["has_fderiv_at"]], ["add", "theorem", "add_const", ["has_fderiv_at"]], ["add", "theorem", "const_add", ["has_fderiv_at"]], ["add", "theorem", "const_smul", ["has_fderiv_at"]], ["add", "theorem", "const_sub", ["has_fderiv_at"]], ["add", "theorem", "neg", ["has_fderiv_at"]], ["add", "theorem", "sub", ["has_fderiv_at"]], ["add", "theorem", "sub_const", ["has_fderiv_at"]], ["add", "theorem", "sum", ["has_fderiv_at"]], ["add", "theorem", "add", ["has_fderiv_at_filter"]], ["add", "theorem", "add_const", ["has_fderiv_at_filter"]], ["add", "theorem", "const_add", ["has_fderiv_at_filter"]], ["add", "theorem", "const_smul", ["has_fderiv_at_filter"]], ["add", "theorem", "const_sub", ["has_fderiv_at_filter"]], ["add", "theorem", "neg", ["has_fderiv_at_filter"]], ["add", "theorem", "sub", ["has_fderiv_at_filter"]], ["add", "theorem", "sub_const", ["has_fderiv_at_filter"]], ["add", "theorem", "sum", ["has_fderiv_at_filter"]], ["add", "theorem", "add", ["has_fderiv_within_at"]], ["add", "theorem", "add_const", ["has_fderiv_within_at"]], ["add", "theorem", "const_add", ["has_fderiv_within_at"]], ["add", "theorem", "const_smul", ["has_fderiv_within_at"]], ["add", "theorem", "const_sub", ["has_fderiv_within_at"]], ["add", "theorem", "neg", ["has_fderiv_within_at"]], ["add", "theorem", "sub", ["has_fderiv_within_at"]], ["add", "theorem", "sub_const", ["has_fderiv_within_at"]], ["add", "theorem", "sum", ["has_fderiv_within_at"]], ["add", "theorem", "add", ["has_strict_fderiv_at"]], ["add", "theorem", "add_const", ["has_strict_fderiv_at"]], ["add", "theorem", "const_add", ["has_strict_fderiv_at"]], ["add", "theorem", "const_smul", ["has_strict_fderiv_at"]], ["add", "theorem", "const_sub", ["has_strict_fderiv_at"]], ["add", "theorem", "neg", ["has_strict_fderiv_at"]], ["add", "theorem", "sub", ["has_strict_fderiv_at"]], ["add", "theorem", "sub_const", ["has_strict_fderiv_at"]], ["add", "theorem", "sum", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv/basic.lean", "newPath": "src/analysis/calculus/fderiv/basic.lean", "changes": [["del", "theorem", "comp_differentiable_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_differentiable_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_differentiable_on_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_differentiable_within_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_fderiv", ["continuous_linear_equiv"]], ["del", "theorem", "comp_fderiv_within", ["continuous_linear_equiv"]], ["del", "theorem", "comp_has_fderiv_at_iff'", ["continuous_linear_equiv"]], ["del", "theorem", "comp_has_fderiv_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_has_fderiv_within_at_iff'", ["continuous_linear_equiv"]], ["del", "theorem", "comp_has_fderiv_within_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_has_strict_fderiv_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_differentiable_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_differentiable_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_differentiable_on_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_differentiable_within_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_fderiv", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_fderiv_within", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_has_fderiv_at_iff'", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_has_fderiv_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_has_fderiv_within_at_iff'", ["continuous_linear_equiv"]], ["del", "theorem", "comp_right_has_fderiv_within_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "unique_diff_on_image", ["continuous_linear_equiv"]], ["del", "theorem", "unique_diff_on_image_iff", ["continuous_linear_equiv"]], ["del", "theorem", "unique_diff_on_preimage_iff", ["continuous_linear_equiv"]], ["del", "theorem", "fderiv_of_bilinear", ["continuous_linear_map"]], ["del", "theorem", "fderiv_within_of_bilinear", ["continuous_linear_map"]], ["del", "theorem", "has_fderiv_at_of_bilinear", ["continuous_linear_map"]], ["del", "theorem", "has_fderiv_within_at_of_bilinear", ["continuous_linear_map"]], ["del", "theorem", "add", ["differentiable"]], ["del", "theorem", "add_const", ["differentiable"]], ["del", "theorem", "clm_apply", ["differentiable"]], ["del", "theorem", "clm_comp", ["differentiable"]], ["del", "theorem", "comp", ["differentiable"]], ["del", "theorem", "comp_differentiable_on", ["differentiable"]], ["del", "theorem", "const_add", ["differentiable"]], ["del", "theorem", "const_mul", ["differentiable"]], ["del", "theorem", "const_smul", ["differentiable"]], ["del", "theorem", "const_sub", ["differentiable"]], ["del", "theorem", "mul", ["differentiable"]], ["del", "theorem", "mul_const", ["differentiable"]], ["del", "theorem", "neg", ["differentiable"]], ["del", "theorem", "pow", ["differentiable"]], ["del", "theorem", "prod", ["differentiable"]], ["del", "theorem", "restrict_scalars", ["differentiable"]], ["del", "theorem", "smul", ["differentiable"]], ["del", "theorem", "smul_const", ["differentiable"]], ["del", "theorem", "sub", ["differentiable"]], ["del", "theorem", "sub_const", ["differentiable"]], ["del", "theorem", "sum", ["differentiable"]], ["del", "theorem", "differentiable_add_const_iff", []], ["del", "theorem", "add", ["differentiable_at"]], ["del", "theorem", "add_const", ["differentiable_at"]], ["del", "theorem", "clm_apply", ["differentiable_at"]], ["del", "theorem", "clm_comp", ["differentiable_at"]], ["del", "theorem", "comp", ["differentiable_at"]], ["del", "theorem", "comp_differentiable_within_at", ["differentiable_at"]], ["del", "theorem", "const_add", ["differentiable_at"]], ["del", "theorem", "const_mul", ["differentiable_at"]], ["del", "theorem", "const_smul", ["differentiable_at"]], ["del", "theorem", "const_sub", ["differentiable_at"]], ["del", "theorem", "fderiv_prod", ["differentiable_at"]], ["del", "theorem", "fderiv_restrict_scalars", ["differentiable_at"]], ["del", "theorem", "fderiv_within_prod", ["differentiable_at"]], ["del", "theorem", "mul", ["differentiable_at"]], ["del", "theorem", "mul_const", ["differentiable_at"]], ["del", "theorem", "neg", ["differentiable_at"]], ["del", "theorem", "pow", ["differentiable_at"]], ["del", "theorem", "prod", ["differentiable_at"]], ["del", "theorem", "restrict_scalars", ["differentiable_at"]], ["del", "theorem", "smul", ["differentiable_at"]], ["del", "theorem", "smul_const", ["differentiable_at"]], ["del", "theorem", "sub", ["differentiable_at"]], ["del", "theorem", "sub_const", ["differentiable_at"]], ["del", "theorem", "sum", ["differentiable_at"]], ["del", "theorem", "differentiable_at_add_const_iff", []], ["del", "theorem", "differentiable_at_const_add_iff", []], ["del", "theorem", "differentiable_at_const_sub_iff", []], ["del", "theorem", "differentiable_at_fst", []], ["del", "theorem", "differentiable_at_iff_restrict_scalars", []], ["del", "theorem", "differentiable_at_inverse", []], ["del", "theorem", "differentiable_at_neg_iff", []], ["del", "theorem", "differentiable_at_pi", []], ["del", "theorem", "differentiable_at_snd", []], ["del", "theorem", "differentiable_at_sub_const_iff", []], ["del", "theorem", "differentiable_const_add_iff", []], ["del", "theorem", "differentiable_const_sub_iff", []], ["del", "theorem", "differentiable_fst", []], ["del", "theorem", "differentiable_neg_iff", []], ["del", "theorem", "add", ["differentiable_on"]], ["del", "theorem", "add_const", ["differentiable_on"]], ["del", "theorem", "clm_apply", ["differentiable_on"]], ["del", "theorem", "clm_comp", ["differentiable_on"]], ["del", "theorem", "comp", ["differentiable_on"]], ["del", "theorem", "const_add", ["differentiable_on"]], ["del", "theorem", "const_mul", ["differentiable_on"]], ["del", "theorem", "const_smul", ["differentiable_on"]], ["del", "theorem", "const_sub", ["differentiable_on"]], ["del", "theorem", "mul", ["differentiable_on"]], ["del", "theorem", "mul_const", ["differentiable_on"]], ["del", "theorem", "neg", ["differentiable_on"]], ["del", "theorem", "pow", ["differentiable_on"]], ["del", "theorem", "prod", ["differentiable_on"]], ["del", "theorem", "restrict_scalars", ["differentiable_on"]], ["del", "theorem", "smul", ["differentiable_on"]], ["del", "theorem", "smul_const", ["differentiable_on"]], ["del", "theorem", "sub", ["differentiable_on"]], ["del", "theorem", "sub_const", ["differentiable_on"]], ["del", "theorem", "sum", ["differentiable_on"]], ["del", "theorem", "differentiable_on_add_const_iff", []], ["del", "theorem", "differentiable_on_const_add_iff", []], ["del", "theorem", "differentiable_on_const_sub_iff", []], ["del", "theorem", "differentiable_on_fst", []], ["del", "theorem", "differentiable_on_neg_iff", []], ["del", "theorem", "differentiable_on_pi", []], ["del", "theorem", "differentiable_on_snd", []], ["del", "theorem", "differentiable_on_sub_const_iff", []], ["del", "theorem", "differentiable_pi", []], ["del", "theorem", "differentiable_snd", []], ["del", "theorem", "differentiable_sub_const_iff", []], ["del", "theorem", "add", ["differentiable_within_at"]], ["del", "theorem", "add_const", ["differentiable_within_at"]], ["del", "theorem", "clm_apply", ["differentiable_within_at"]], ["del", "theorem", "clm_comp", ["differentiable_within_at"]], ["del", "theorem", "comp'", ["differentiable_within_at"]], ["del", "theorem", "comp", ["differentiable_within_at"]], ["del", "theorem", "const_add", ["differentiable_within_at"]], ["del", "theorem", "const_mul", ["differentiable_within_at"]], ["del", "theorem", "const_smul", ["differentiable_within_at"]], ["del", "theorem", "const_sub", ["differentiable_within_at"]], ["del", "theorem", "mul", ["differentiable_within_at"]], ["del", "theorem", "mul_const", ["differentiable_within_at"]], ["del", "theorem", "neg", ["differentiable_within_at"]], ["del", "theorem", "pow", ["differentiable_within_at"]], ["del", "theorem", "prod", ["differentiable_within_at"]], ["del", "theorem", "restrict_scalars", ["differentiable_within_at"]], ["del", "theorem", "smul", ["differentiable_within_at"]], ["del", "theorem", "smul_const", ["differentiable_within_at"]], ["del", "theorem", "sub", ["differentiable_within_at"]], ["del", "theorem", "sub_const", ["differentiable_within_at"]], ["del", "theorem", "sum", ["differentiable_within_at"]], ["del", "theorem", "differentiable_within_at_add_const_iff", []], ["del", "theorem", "differentiable_within_at_const_add_iff", []], ["del", "theorem", "differentiable_within_at_const_sub_iff", []], ["del", "theorem", "differentiable_within_at_fst", []], ["del", "theorem", "differentiable_within_at_iff_restrict_scalars", []], ["del", "theorem", "differentiable_within_at_neg_iff", []], ["del", "theorem", "differentiable_within_at_pi", []], ["del", "theorem", "differentiable_within_at_snd", []], ["del", "theorem", "differentiable_within_at_sub_const_iff", []], ["del", "theorem", "comp", ["fderiv"]], ["del", "theorem", "comp_fderiv_within", ["fderiv"]], ["del", "theorem", "fst", ["fderiv"]], ["del", "theorem", "snd", ["fderiv"]], ["del", "theorem", "fderiv_add", []], ["del", "theorem", "fderiv_add_const", []], ["del", "theorem", "fderiv_clm_apply", []], ["del", "theorem", "fderiv_clm_comp", []], ["del", "theorem", "fderiv_const_add", []], ["del", "theorem", "fderiv_const_mul", []], ["del", "theorem", "fderiv_const_smul", []], ["del", "theorem", "fderiv_const_sub", []], ["del", "theorem", "fderiv_fst", []], ["del", "theorem", "fderiv_inverse", []], ["del", "theorem", "fderiv_mul'", []], ["del", "theorem", "fderiv_mul", []], ["del", "theorem", "fderiv_mul_const'", []], ["del", "theorem", "fderiv_mul_const", []], ["del", "theorem", "fderiv_neg", []], ["del", "theorem", "fderiv_pi", []], ["del", "theorem", "fderiv_smul", []], ["del", "theorem", "fderiv_smul_const", []], ["del", "theorem", "fderiv_snd", []], ["del", "theorem", "fderiv_sub", []], ["del", "theorem", "fderiv_sub_const", []], ["del", "theorem", "fderiv_sum", []], ["del", "theorem", "comp", ["fderiv_within"]], ["del", "theorem", "comp₃", ["fderiv_within"]], ["del", "theorem", "fst", ["fderiv_within"]], ["del", "theorem", "snd", ["fderiv_within"]], ["del", "theorem", "fderiv_within_add", []], ["del", "theorem", "fderiv_within_add_const", []], ["del", "theorem", "fderiv_within_clm_apply", []], ["del", "theorem", "fderiv_within_clm_comp", []], ["del", "theorem", "fderiv_within_const_add", []], ["del", "theorem", "fderiv_within_const_mul", []], ["del", "theorem", "fderiv_within_const_smul", []], ["del", "theorem", "fderiv_within_const_sub", []], ["del", "theorem", "fderiv_within_fderiv_within", []], ["del", "theorem", "fderiv_within_fst", []], ["del", "theorem", "fderiv_within_mul'", []], ["del", "theorem", "fderiv_within_mul", []], ["del", "theorem", "fderiv_within_mul_const'", []], ["del", "theorem", "fderiv_within_mul_const", []], ["del", "theorem", "fderiv_within_neg", []], ["del", "theorem", "fderiv_within_pi", []], ["del", "theorem", "fderiv_within_smul", []], ["del", "theorem", "fderiv_within_smul_const", []], ["del", "theorem", "fderiv_within_snd", []], ["del", "theorem", "fderiv_within_sub", []], ["del", "theorem", "fderiv_within_sub_const", []], ["del", "theorem", "fderiv_within_sum", []], ["del", "theorem", "add", ["has_fderiv_at"]], ["del", "theorem", "add_const", ["has_fderiv_at"]], ["del", "theorem", "clm_apply", ["has_fderiv_at"]], ["del", "theorem", "clm_comp", ["has_fderiv_at"]], ["del", "theorem", "comp", ["has_fderiv_at"]], ["del", "theorem", "comp_has_fderiv_within_at", ["has_fderiv_at"]], ["del", "theorem", "const_add", ["has_fderiv_at"]], ["del", "theorem", "const_mul", ["has_fderiv_at"]], ["del", "theorem", "const_smul", ["has_fderiv_at"]], ["del", "theorem", "const_sub", ["has_fderiv_at"]], ["del", "theorem", "eventually_ne", ["has_fderiv_at"]], ["del", "theorem", "lim_real", ["has_fderiv_at"]], ["del", "theorem", "mul'", ["has_fderiv_at"]], ["del", "theorem", "mul", ["has_fderiv_at"]], ["del", "theorem", "mul_const'", ["has_fderiv_at"]], ["del", "theorem", "mul_const", ["has_fderiv_at"]], ["del", "theorem", "neg", ["has_fderiv_at"]], ["del", "theorem", "of_local_left_inverse", ["has_fderiv_at"]], ["del", "theorem", "prod", ["has_fderiv_at"]], ["del", "theorem", "restrict_scalars", ["has_fderiv_at"]], ["del", "theorem", "smul", ["has_fderiv_at"]], ["del", "theorem", "smul_const", ["has_fderiv_at"]], ["del", "theorem", "sub", ["has_fderiv_at"]], ["del", "theorem", "sub_const", ["has_fderiv_at"]], ["del", "theorem", "sum", ["has_fderiv_at"]], ["del", "theorem", "add", ["has_fderiv_at_filter"]], ["del", "theorem", "add_const", ["has_fderiv_at_filter"]], ["del", "theorem", "comp", ["has_fderiv_at_filter"]], ["del", "theorem", "const_add", ["has_fderiv_at_filter"]], ["del", "theorem", "const_smul", ["has_fderiv_at_filter"]], ["del", "theorem", "const_sub", ["has_fderiv_at_filter"]], ["del", "theorem", "neg", ["has_fderiv_at_filter"]], ["del", "theorem", "prod", ["has_fderiv_at_filter"]], ["del", "theorem", "restrict_scalars", ["has_fderiv_at_filter"]], ["del", "theorem", "sub", ["has_fderiv_at_filter"]], ["del", "theorem", "sub_const", ["has_fderiv_at_filter"]], ["del", "theorem", "sum", ["has_fderiv_at_filter"]], ["del", "theorem", "has_fderiv_at_filter_fst", []], ["del", "theorem", "has_fderiv_at_filter_pi'", []], ["del", "theorem", "has_fderiv_at_filter_pi", []], ["del", "theorem", "has_fderiv_at_filter_real_equiv", []], ["del", "theorem", "has_fderiv_at_filter_snd", []], ["del", "theorem", "has_fderiv_at_fst", []], ["del", "theorem", "has_fderiv_at_of_restrict_scalars", []], ["del", "theorem", "has_fderiv_at_pi'", []], ["del", "theorem", "has_fderiv_at_pi", []], ["del", "theorem", "has_fderiv_at_prod_mk_left", []], ["del", "theorem", "has_fderiv_at_prod_mk_right", []], ["del", "theorem", "has_fderiv_at_ring_inverse", []], ["del", "theorem", "has_fderiv_at_snd", []], ["del", "theorem", "add", ["has_fderiv_within_at"]], ["del", "theorem", "add_const", ["has_fderiv_within_at"]], ["del", "theorem", "clm_apply", ["has_fderiv_within_at"]], ["del", "theorem", "clm_comp", ["has_fderiv_within_at"]], ["del", "theorem", "comp", ["has_fderiv_within_at"]], ["del", "theorem", "comp_of_mem", ["has_fderiv_within_at"]], ["del", "theorem", "const_add", ["has_fderiv_within_at"]], ["del", "theorem", "const_mul", ["has_fderiv_within_at"]], ["del", "theorem", "const_smul", ["has_fderiv_within_at"]], ["del", "theorem", "const_sub", ["has_fderiv_within_at"]], ["del", "theorem", "eventually_ne", ["has_fderiv_within_at"]], ["del", "theorem", "maps_to_tangent_cone", ["has_fderiv_within_at"]], ["del", "theorem", "mul'", ["has_fderiv_within_at"]], ["del", "theorem", "mul", ["has_fderiv_within_at"]], ["del", "theorem", "mul_const'", ["has_fderiv_within_at"]], ["del", "theorem", "mul_const", ["has_fderiv_within_at"]], ["del", "theorem", "neg", ["has_fderiv_within_at"]], ["del", "theorem", "prod", ["has_fderiv_within_at"]], ["del", "theorem", "restrict_scalars", ["has_fderiv_within_at"]], ["del", "theorem", "smul", ["has_fderiv_within_at"]], ["del", "theorem", "smul_const", ["has_fderiv_within_at"]], ["del", "theorem", "sub", ["has_fderiv_within_at"]], ["del", "theorem", "sub_const", ["has_fderiv_within_at"]], ["del", "theorem", "sum", ["has_fderiv_within_at"]], ["del", "theorem", "unique_diff_within_at", ["has_fderiv_within_at"]], ["del", "theorem", "unique_diff_within_at_of_continuous_linear_equiv", ["has_fderiv_within_at"]], ["del", "theorem", "has_fderiv_within_at_fst", []], ["del", "theorem", "has_fderiv_within_at_of_restrict_scalars", []], ["del", "theorem", "has_fderiv_within_at_pi'", []], ["del", "theorem", "has_fderiv_within_at_pi", []], ["del", "theorem", "has_fderiv_within_at_snd", []], ["del", "theorem", "add", ["has_strict_fderiv_at"]], ["del", "theorem", "add_const", ["has_strict_fderiv_at"]], ["del", "theorem", "clm_apply", ["has_strict_fderiv_at"]], ["del", "theorem", "clm_comp", ["has_strict_fderiv_at"]], ["del", "theorem", "const_add", ["has_strict_fderiv_at"]], ["del", "theorem", "const_mul", ["has_strict_fderiv_at"]], ["del", "theorem", "const_smul", ["has_strict_fderiv_at"]], ["del", "theorem", "const_sub", ["has_strict_fderiv_at"]], ["del", "theorem", "mul'", ["has_strict_fderiv_at"]], ["del", "theorem", "mul", ["has_strict_fderiv_at"]], ["del", "theorem", "mul_const'", ["has_strict_fderiv_at"]], ["del", "theorem", "mul_const", ["has_strict_fderiv_at"]], ["del", "theorem", "neg", ["has_strict_fderiv_at"]], ["del", "theorem", "of_local_left_inverse", ["has_strict_fderiv_at"]], ["del", "theorem", "restrict_scalars", ["has_strict_fderiv_at"]], ["del", "theorem", "smul", ["has_strict_fderiv_at"]], ["del", "theorem", "smul_const", ["has_strict_fderiv_at"]], ["del", "theorem", "sub", ["has_strict_fderiv_at"]], ["del", "theorem", "sub_const", ["has_strict_fderiv_at"]], ["del", "theorem", "sum", ["has_strict_fderiv_at"]], ["del", "theorem", "has_strict_fderiv_at_fst", []], ["del", "theorem", "has_strict_fderiv_at_pi'", []], ["del", "theorem", "has_strict_fderiv_at_pi", []], ["del", "theorem", "has_strict_fderiv_at_snd", []], ["del", "theorem", "differentiable", ["is_bounded_bilinear_map"]], ["del", "theorem", "differentiable_at", ["is_bounded_bilinear_map"]], ["del", "theorem", "differentiable_on", ["is_bounded_bilinear_map"]], ["del", "theorem", "differentiable_within_at", ["is_bounded_bilinear_map"]], ["del", "theorem", "fderiv", ["is_bounded_bilinear_map"]], ["del", "theorem", "fderiv_within", ["is_bounded_bilinear_map"]], ["del", "theorem", "has_fderiv_at", ["is_bounded_bilinear_map"]], ["del", "theorem", "has_fderiv_within_at", ["is_bounded_bilinear_map"]], ["del", "theorem", "has_strict_fderiv_at", ["is_bounded_bilinear_map"]], ["del", "theorem", "differentiable", ["is_bounded_linear_map"]], ["del", "theorem", "differentiable_at", ["is_bounded_linear_map"]], ["del", "theorem", "differentiable_on", ["is_bounded_linear_map"]], ["del", "theorem", "differentiable_within_at", ["is_bounded_linear_map"]], ["del", "theorem", "fderiv", ["is_bounded_linear_map"]], ["del", "theorem", "fderiv_within", ["is_bounded_linear_map"]], ["del", "theorem", "has_fderiv_at", ["is_bounded_linear_map"]], ["del", "theorem", "has_fderiv_at_filter", ["is_bounded_linear_map"]], ["del", "theorem", "has_fderiv_within_at", ["is_bounded_linear_map"]], ["del", "theorem", "comp_differentiable_at_iff", ["linear_isometry_equiv"]], ["del", "theorem", "comp_differentiable_iff", ["linear_isometry_equiv"]], ["del", "theorem", "comp_differentiable_on_iff", ["linear_isometry_equiv"]], ["del", "theorem", "comp_differentiable_within_at_iff", ["linear_isometry_equiv"]], ["del", "theorem", "comp_fderiv", ["linear_isometry_equiv"]], ["del", "theorem", "comp_fderiv_within", ["linear_isometry_equiv"]], ["del", "theorem", "comp_has_fderiv_at_iff'", ["linear_isometry_equiv"]], ["del", "theorem", "comp_has_fderiv_at_iff", ["linear_isometry_equiv"]], ["del", "theorem", "comp_has_fderiv_within_at_iff'", ["linear_isometry_equiv"]], ["del", "theorem", "comp_has_fderiv_within_at_iff", ["linear_isometry_equiv"]], ["del", "theorem", "comp_has_strict_fderiv_at_iff", ["linear_isometry_equiv"]], ["del", "theorem", "has_fderiv_at_symm", ["local_homeomorph"]], ["del", "theorem", "has_strict_fderiv_at_symm", ["local_homeomorph"]], ["del", "theorem", "image", ["unique_diff_on"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/bilinear.lean", "changes": [["add", "theorem", "fderiv_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "fderiv_within_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "has_fderiv_at_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "has_fderiv_within_at_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "differentiable", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable_on", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable_within_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "fderiv", ["is_bounded_bilinear_map"]], ["add", "theorem", "fderiv_within", ["is_bounded_bilinear_map"]], ["add", "theorem", "has_fderiv_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "has_fderiv_within_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "has_strict_fderiv_at", ["is_bounded_bilinear_map"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/comp.lean", "changes": [["add", "theorem", "comp", ["differentiable"]], ["add", "theorem", "comp_differentiable_on", ["differentiable"]], ["add", "theorem", "comp", ["differentiable_at"]], ["add", "theorem", "comp_differentiable_within_at", ["differentiable_at"]], ["add", "theorem", "comp", ["differentiable_on"]], ["add", "theorem", "comp'", ["differentiable_within_at"]], ["add", "theorem", "comp", ["differentiable_within_at"]], ["add", "theorem", "comp", ["fderiv"]], ["add", "theorem", "comp_fderiv_within", ["fderiv"]], ["add", "theorem", "comp", ["fderiv_within"]], ["add", "theorem", "comp₃", ["fderiv_within"]], ["add", "theorem", "fderiv_within_fderiv_within", []], ["add", "theorem", "comp", ["has_fderiv_at"]], ["add", "theorem", "comp_has_fderiv_within_at", ["has_fderiv_at"]], ["add", "theorem", "comp", ["has_fderiv_at_filter"]], ["add", "theorem", "comp", ["has_fderiv_within_at"]], ["add", "theorem", "comp_of_mem", ["has_fderiv_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/equiv.lean", "changes": [["add", "theorem", "comp_differentiable_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_on_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_fderiv", ["continuous_linear_equiv"]], ["add", "theorem", "comp_fderiv_within", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_strict_fderiv_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_differentiable_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_differentiable_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_differentiable_on_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_differentiable_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_fderiv", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_fderiv_within", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_within_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "unique_diff_on_image", ["continuous_linear_equiv"]], ["add", "theorem", "unique_diff_on_image_iff", ["continuous_linear_equiv"]], ["add", "theorem", "unique_diff_on_preimage_iff", ["continuous_linear_equiv"]], ["add", "theorem", "eventually_ne", ["has_fderiv_at"]], ["add", "theorem", "lim_real", ["has_fderiv_at"]], ["add", "theorem", "of_local_left_inverse", ["has_fderiv_at"]], ["add", "theorem", "has_fderiv_at_filter_real_equiv", []], ["add", "theorem", "eventually_ne", ["has_fderiv_within_at"]], ["add", "theorem", "maps_to_tangent_cone", ["has_fderiv_within_at"]], ["add", "theorem", "unique_diff_within_at", ["has_fderiv_within_at"]], ["add", "theorem", "unique_diff_within_at_of_continuous_linear_equiv", ["has_fderiv_within_at"]], ["add", "theorem", "of_local_left_inverse", ["has_strict_fderiv_at"]], ["add", "theorem", "comp_differentiable_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_differentiable_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_differentiable_on_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_differentiable_within_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_fderiv", ["linear_isometry_equiv"]], ["add", "theorem", "comp_fderiv_within", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff'", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff'", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_strict_fderiv_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "has_fderiv_at_symm", ["local_homeomorph"]], ["add", "theorem", "has_strict_fderiv_at_symm", ["local_homeomorph"]], ["add", "theorem", "image", ["unique_diff_on"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/linear.lean", "changes": [["add", "theorem", "differentiable", ["is_bounded_linear_map"]], ["add", "theorem", "differentiable_at", ["is_bounded_linear_map"]], ["add", "theorem", "differentiable_on", ["is_bounded_linear_map"]], ["add", "theorem", "differentiable_within_at", ["is_bounded_linear_map"]], ["add", "theorem", "fderiv", ["is_bounded_linear_map"]], ["add", "theorem", "fderiv_within", ["is_bounded_linear_map"]], ["add", "theorem", "has_fderiv_at", ["is_bounded_linear_map"]], ["add", "theorem", "has_fderiv_at_filter", ["is_bounded_linear_map"]], ["add", "theorem", "has_fderiv_within_at", ["is_bounded_linear_map"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/mul.lean", "changes": [["add", "theorem", "clm_apply", ["differentiable"]], ["add", "theorem", "clm_comp", ["differentiable"]], ["add", "theorem", "const_mul", ["differentiable"]], ["add", "theorem", "mul", ["differentiable"]], ["add", "theorem", "mul_const", ["differentiable"]], ["add", "theorem", "pow", ["differentiable"]], ["add", "theorem", "smul", ["differentiable"]], ["add", "theorem", "smul_const", ["differentiable"]], ["add", "theorem", "clm_apply", ["differentiable_at"]], ["add", "theorem", "clm_comp", ["differentiable_at"]], ["add", "theorem", "const_mul", ["differentiable_at"]], ["add", "theorem", "mul", ["differentiable_at"]], ["add", "theorem", "mul_const", ["differentiable_at"]], ["add", "theorem", "pow", ["differentiable_at"]], ["add", "theorem", "smul", ["differentiable_at"]], ["add", "theorem", "smul_const", ["differentiable_at"]], ["add", "theorem", "differentiable_at_inverse", []], ["add", "theorem", "clm_apply", ["differentiable_on"]], ["add", "theorem", "clm_comp", ["differentiable_on"]], ["add", "theorem", "const_mul", ["differentiable_on"]], ["add", "theorem", "mul", ["differentiable_on"]], ["add", "theorem", "mul_const", ["differentiable_on"]], ["add", "theorem", "pow", ["differentiable_on"]], ["add", "theorem", "smul", ["differentiable_on"]], ["add", "theorem", "smul_const", ["differentiable_on"]], ["add", "theorem", "clm_apply", ["differentiable_within_at"]], ["add", "theorem", "clm_comp", ["differentiable_within_at"]], ["add", "theorem", "const_mul", ["differentiable_within_at"]], ["add", "theorem", "mul", ["differentiable_within_at"]], ["add", "theorem", "mul_const", ["differentiable_within_at"]], ["add", "theorem", "pow", ["differentiable_within_at"]], ["add", "theorem", "smul", ["differentiable_within_at"]], ["add", "theorem", "smul_const", ["differentiable_within_at"]], ["add", "theorem", "fderiv_clm_apply", []], ["add", "theorem", "fderiv_clm_comp", []], ["add", "theorem", "fderiv_const_mul", []], ["add", "theorem", "fderiv_inverse", []], ["add", "theorem", "fderiv_mul'", []], ["add", "theorem", "fderiv_mul", []], ["add", "theorem", "fderiv_mul_const'", []], ["add", "theorem", "fderiv_mul_const", []], ["add", "theorem", "fderiv_smul", []], ["add", "theorem", "fderiv_smul_const", []], ["add", "theorem", "fderiv_within_clm_apply", []], ["add", "theorem", "fderiv_within_clm_comp", []], ["add", "theorem", "fderiv_within_const_mul", []], ["add", "theorem", "fderiv_within_mul'", []], ["add", "theorem", "fderiv_within_mul", []], ["add", "theorem", "fderiv_within_mul_const'", []], ["add", "theorem", "fderiv_within_mul_const", []], ["add", "theorem", "fderiv_within_smul", []], ["add", "theorem", "fderiv_within_smul_const", []], ["add", "theorem", "clm_apply", ["has_fderiv_at"]], ["add", "theorem", "clm_comp", ["has_fderiv_at"]], ["add", "theorem", "const_mul", ["has_fderiv_at"]], ["add", "theorem", "mul'", ["has_fderiv_at"]], ["add", "theorem", "mul", ["has_fderiv_at"]], ["add", "theorem", "mul_const'", ["has_fderiv_at"]], ["add", "theorem", "mul_const", ["has_fderiv_at"]], ["add", "theorem", "smul", ["has_fderiv_at"]], ["add", "theorem", "smul_const", ["has_fderiv_at"]], ["add", "theorem", "has_fderiv_at_ring_inverse", []], ["add", "theorem", "clm_apply", ["has_fderiv_within_at"]], ["add", "theorem", "clm_comp", ["has_fderiv_within_at"]], ["add", "theorem", "const_mul", ["has_fderiv_within_at"]], ["add", "theorem", "mul'", ["has_fderiv_within_at"]], ["add", "theorem", "mul", ["has_fderiv_within_at"]], ["add", "theorem", "mul_const'", ["has_fderiv_within_at"]], ["add", "theorem", "mul_const", ["has_fderiv_within_at"]], ["add", "theorem", "smul", ["has_fderiv_within_at"]], ["add", "theorem", "smul_const", ["has_fderiv_within_at"]], ["add", "theorem", "clm_apply", ["has_strict_fderiv_at"]], ["add", "theorem", "clm_comp", ["has_strict_fderiv_at"]], ["add", "theorem", "const_mul", ["has_strict_fderiv_at"]], ["add", "theorem", "mul'", ["has_strict_fderiv_at"]], ["add", "theorem", "mul", ["has_strict_fderiv_at"]], ["add", "theorem", "mul_const'", ["has_strict_fderiv_at"]], ["add", "theorem", "mul_const", ["has_strict_fderiv_at"]], ["add", "theorem", "smul", ["has_strict_fderiv_at"]], ["add", "theorem", "smul_const", ["has_strict_fderiv_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/prod.lean", "changes": [["add", "theorem", "prod", ["differentiable"]], ["add", "theorem", "fderiv_prod", ["differentiable_at"]], ["add", "theorem", "fderiv_within_prod", ["differentiable_at"]], ["add", "theorem", "prod", ["differentiable_at"]], ["add", "theorem", "differentiable_at_fst", []], ["add", "theorem", "differentiable_at_pi", []], ["add", "theorem", "differentiable_at_snd", []], ["add", "theorem", "differentiable_fst", []], ["add", "theorem", "prod", ["differentiable_on"]], ["add", "theorem", "differentiable_on_fst", []], ["add", "theorem", "differentiable_on_pi", []], ["add", "theorem", "differentiable_on_snd", []], ["add", "theorem", "differentiable_pi", []], ["add", "theorem", "differentiable_snd", []], ["add", "theorem", "prod", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_fst", []], ["add", "theorem", "differentiable_within_at_pi", []], ["add", "theorem", "differentiable_within_at_snd", []], ["add", "theorem", "fst", ["fderiv"]], ["add", "theorem", "snd", ["fderiv"]], ["add", "theorem", "fderiv_fst", []], ["add", "theorem", "fderiv_pi", []], ["add", "theorem", "fderiv_snd", []], ["add", "theorem", "fst", ["fderiv_within"]], ["add", "theorem", "snd", ["fderiv_within"]], ["add", "theorem", "fderiv_within_fst", []], ["add", "theorem", "fderiv_within_pi", []], ["add", "theorem", "fderiv_within_snd", []], ["add", "theorem", "prod", ["has_fderiv_at"]], ["add", "theorem", "prod", ["has_fderiv_at_filter"]], ["add", "theorem", "has_fderiv_at_filter_fst", []], ["add", "theorem", "has_fderiv_at_filter_pi'", []], ["add", "theorem", "has_fderiv_at_filter_pi", []], ["add", "theorem", "has_fderiv_at_filter_snd", []], ["add", "theorem", "has_fderiv_at_fst", []], ["add", "theorem", "has_fderiv_at_pi'", []], ["add", "theorem", "has_fderiv_at_pi", []], ["add", "theorem", "has_fderiv_at_prod_mk_left", []], ["add", "theorem", "has_fderiv_at_prod_mk_right", []], ["add", "theorem", "has_fderiv_at_snd", []], ["add", "theorem", "prod", ["has_fderiv_within_at"]], ["add", "theorem", "has_fderiv_within_at_fst", []], ["add", "theorem", "has_fderiv_within_at_pi'", []], ["add", "theorem", "has_fderiv_within_at_pi", []], ["add", "theorem", "has_fderiv_within_at_snd", []], ["add", "theorem", "has_strict_fderiv_at_fst", []], ["add", "theorem", "has_strict_fderiv_at_pi'", []], ["add", "theorem", "has_strict_fderiv_at_pi", []], ["add", "theorem", "has_strict_fderiv_at_snd", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv/restrict_scalars.lean", "changes": [["add", "theorem", "restrict_scalars", ["differentiable"]], ["add", "theorem", "fderiv_restrict_scalars", ["differentiable_at"]], ["add", "theorem", "restrict_scalars", ["differentiable_at"]], ["add", "theorem", "differentiable_at_iff_restrict_scalars", []], ["add", "theorem", "restrict_scalars", ["differentiable_on"]], ["add", "theorem", "restrict_scalars", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_iff_restrict_scalars", []], ["add", "theorem", "restrict_scalars", ["has_fderiv_at"]], ["add", "theorem", "restrict_scalars", ["has_fderiv_at_filter"]], ["add", "theorem", "has_fderiv_at_of_restrict_scalars", []], ["add", "theorem", "restrict_scalars", ["has_fderiv_within_at"]], ["add", "theorem", "has_fderiv_within_at_of_restrict_scalars", []], ["add", "theorem", "restrict_scalars", ["has_strict_fderiv_at"]]]}]}, {"timestamp": 1683984017, "sha": "6cf59007", "message": "chore(*): add mathlib4 synchronization comments (#19005)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.homology.short_exact.abelian`\n* `algebra.modeq`\n* `algebra.ring.boolean_ring`\n* `analysis.locally_convex.continuous_of_bounded`\n* `analysis.normed_space.units`\n* `category_theory.abelian.diagram_lemmas.four`\n* `category_theory.abelian.generator`\n* `category_theory.idempotents.biproducts`\n* `data.is_R_or_C.basic`\n* `model_theory.definability`\n* `model_theory.order`\n* `model_theory.semantics`\n* `model_theory.substructures`\n* `topology.category.Top.limits.pullbacks`", "changes": [{"oldPath": "src/algebra/homology/short_exact/abelian.lean", "newPath": "src/algebra/homology/short_exact/abelian.lean", "changes": []}, {"oldPath": "src/algebra/modeq.lean", "newPath": "src/algebra/modeq.lean", "changes": []}, {"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/continuous_of_bounded.lean", "newPath": "src/analysis/locally_convex/continuous_of_bounded.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/generator.lean", "newPath": "src/category_theory/abelian/generator.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/biproducts.lean", "newPath": "src/category_theory/idempotents/biproducts.lean", "changes": []}, {"oldPath": "src/data/is_R_or_C/basic.lean", "newPath": "src/data/is_R_or_C/basic.lean", "changes": []}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/model_theory/order.lean", "newPath": "src/model_theory/order.lean", "changes": []}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": []}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits/pullbacks.lean", "newPath": "src/topology/category/Top/limits/pullbacks.lean", "changes": []}]}, {"timestamp": 1683979450, "sha": "1d650c2e", "message": "chore(category_theory/sites/dense_subsite): minor refactor (#19002)\nLean 4 pointed out that `include H` came slightly too early in `category_theory/sites_dense_subsite`; it doesn't need to be in the definition of https://leanprover-community.github.io/mathlib_docs/category_theory/sites/dense_subsite.html#category_theory.cover_dense.types.pushforward_family , for example. I removed both the `include`s in the file, which changes the types of at least one declaration (a superfluous `H` is no longer there). This file is not a leaf file -- it's imported by all the algebraic geometry hierarchy for example -- but mathlib still compiles with these edits and I propose making this change in the ported version of this file.", "changes": [{"oldPath": "src/category_theory/sites/dense_subsite.lean", "newPath": "src/category_theory/sites/dense_subsite.lean", "changes": []}]}, {"timestamp": 1683974212, "sha": "58537299", "message": "chore(analysis/calculus/fderiv): move large file to dedicated subfolder, prepare for split (#19007)", "changes": [{"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/calculus/conformal/normed_space.lean", "newPath": "src/analysis/calculus/conformal/normed_space.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv/basic.lean", "changes": []}]}, {"timestamp": 1683917383, "sha": "403190b5", "message": "feat(algebra/category/Module/change_of_rings): extension and restriction of scalars are adjoint (#15564)", "changes": [{"oldPath": "src/algebra/category/Module/change_of_rings.lean", "newPath": "src/algebra/category/Module/change_of_rings.lean", "changes": [["add", "def", "map", ["category_theory", "Module", "extend_restrict_scalars_adj", "counit"]], ["add", "def", "counit", ["category_theory", "Module", "extend_restrict_scalars_adj"]], ["add", "def", "from_extend_scalars", ["category_theory", "Module", "extend_restrict_scalars_adj", "hom_equiv"]], ["add", "def", "to_restrict_scalars", ["category_theory", "Module", "extend_restrict_scalars_adj", "hom_equiv"]], ["add", "def", "hom_equiv", ["category_theory", "Module", "extend_restrict_scalars_adj"]], ["add", "def", "map", ["category_theory", "Module", "extend_restrict_scalars_adj", "unit"]], ["add", "def", "unit", ["category_theory", "Module", "extend_restrict_scalars_adj"]], ["add", "def", "extend_restrict_scalars_adj", ["category_theory", "Module"]]]}]}, {"timestamp": 1683909143, "sha": "ee7b9f9a", "message": "doc(algebra/euclidean_domain/defs): correct typos in doc (#19001)\nCorrect two typos in the doc about the Main Statements about Euclidean Domains. The corresponding `mathlib-4` PR is [#3945. ](https://github.com/leanprover-community/mathlib4/pull/3945)", "changes": [{"oldPath": "src/algebra/euclidean_domain/defs.lean", "newPath": "src/algebra/euclidean_domain/defs.lean", "changes": []}]}, {"timestamp": 1683881189, "sha": "bd15ff41", "message": "chore(*): add mathlib4 synchronization comments (#18992)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.module.injective`\n* `category_theory.preadditive.yoneda.injective`\n* `category_theory.preadditive.yoneda.projective`\n* `category_theory.sites.cover_lifting`\n* `category_theory.sites.pushforward`\n* `computability.reduce`\n* `computability.tm_to_partrec`\n* `measure_theory.group.measurable_equiv`\n* `measure_theory.group.pointwise`\n* `probability.cond_count`\n* `probability.probability_mass_function.monad`\n* `topology.continuous_function.polynomial`", "changes": [{"oldPath": "src/algebra/module/injective.lean", "newPath": "src/algebra/module/injective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/yoneda/injective.lean", "newPath": "src/category_theory/preadditive/yoneda/injective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/yoneda/projective.lean", "newPath": "src/category_theory/preadditive/yoneda/projective.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_lifting.lean", "newPath": "src/category_theory/sites/cover_lifting.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pushforward.lean", "newPath": "src/category_theory/sites/pushforward.lean", "changes": []}, {"oldPath": "src/computability/reduce.lean", "newPath": "src/computability/reduce.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measurable_equiv.lean", "newPath": "src/measure_theory/group/measurable_equiv.lean", "changes": []}, {"oldPath": "src/measure_theory/group/pointwise.lean", "newPath": "src/measure_theory/group/pointwise.lean", "changes": []}, {"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": []}, {"oldPath": "src/probability/probability_mass_function/monad.lean", "newPath": "src/probability/probability_mass_function/monad.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}]}, {"timestamp": 1683881188, "sha": "343e8020", "message": "chore(measure_theory/measure/outer_measure): lemmas about zero and top (#18983)", "changes": [{"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["add", "theorem", "mk_metric_top", ["measure_theory", "measure"]], ["add", "theorem", "mk_metric_top", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "to_outer_measure_top", ["measure_theory", "measure"]], ["add", "theorem", "to_measure_top", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "theorem", "extend_top", ["measure_theory"]], ["add", "theorem", "bounded_by_top", ["measure_theory", "outer_measure"]], ["add", "theorem", "bounded_by_zero", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_top", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1683881187, "sha": "066ecdb4", "message": "feat(ring_theory/polynomial): show gaussian form of `hermite n` (#18896)\nShow the equivalence of the polynomial form of the Hermite polynomials to the explicit form involving derivatives of the gaussian function.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "iterate_deriv'", ["cont_diff"]], ["add", "theorem", "iterate_deriv", ["cont_diff"]]]}, {"oldPath": "src/ring_theory/polynomial/hermite.lean", "newPath": "src/ring_theory/polynomial/hermite/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/hermite/gaussian.lean", "changes": [["add", "theorem", "deriv_gaussian_eq_hermite_mul_gaussian", ["polynomial"]], ["add", "theorem", "hermite_eq_deriv_gaussian'", ["polynomial"]], ["add", "theorem", "hermite_eq_deriv_gaussian", ["polynomial"]]]}]}, {"timestamp": 1683881185, "sha": "9e6d4aec", "message": "feat(analysis/mellin_transform): Mellin transforms (#18822)\nThis PR defines the Mellin transform of a locally integrable function, and proves it is holomorphic on a suitable vertical strip.", "changes": [{"oldPath": null, "newPath": "src/analysis/mellin_transform.lean", "changes": [["add", "theorem", "is_O_rpow_top_log_smul", []], ["add", "theorem", "is_O_rpow_zero_log_smul", []], ["add", "def", "mellin", []], ["add", "theorem", "mellin_convergent_iff_norm", []], ["add", "theorem", "mellin_convergent_of_is_O_rpow", []], ["add", "theorem", "mellin_convergent_of_is_O_rpow_exp", []], ["add", "theorem", "mellin_convergent_of_is_O_scalar", []], ["add", "theorem", "mellin_convergent_top_of_is_O", []], ["add", "theorem", "mellin_convergent_zero_of_is_O", []], ["add", "theorem", "mellin_differentiable_at_of_is_O_rpow", []], ["add", "theorem", "mellin_differentiable_at_of_is_O_rpow_exp", []], ["add", "theorem", "mellin_has_deriv_of_is_O_rpow", []]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "is_o_exp_neg_mul_rpow_at_top", []]]}]}, {"timestamp": 1683870242, "sha": "b599f4e4", "message": "chore(algebra/order/group/defs): remove some instances that cause timeouts with etaExperiment (#18985)\nSeeing what CI thinks about removing these instances.\nThis is a backport of https://github.com/leanprover-community/mathlib4/pull/3905", "changes": [{"oldPath": "src/algebra/order/group/defs.lean", "newPath": "src/algebra/order/group/defs.lean", "changes": [["add", "theorem", "to_contravariant_class_left_le", ["ordered_comm_group"]], ["add", "theorem", "to_contravariant_class_right_le", ["ordered_comm_group"]]]}]}, {"timestamp": 1683840627, "sha": "8c1b484d", "message": "feat(topology/sets/compacts): add `positive_compacts.map` (#18872)\nAlso adds some missing functorial lemmas about `map`.", "changes": [{"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": [["mod", "theorem", "coe_map", ["topological_space", "compact_opens"]], ["add", "theorem", "map_comp", ["topological_space", "compact_opens"]], ["add", "theorem", "map_id", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_equiv_apply_eq_preimage", ["topological_space", "compacts"]], ["mod", "theorem", "coe_map", ["topological_space", "compacts"]], ["add", "theorem", "equiv_refl", ["topological_space", "compacts"]], ["add", "theorem", "equiv_symm", ["topological_space", "compacts"]], ["del", "theorem", "equiv_to_fun_val", ["topological_space", "compacts"]], ["add", "theorem", "equiv_trans", ["topological_space", "compacts"]], ["add", "theorem", "map_comp", ["topological_space", "compacts"]], ["add", "theorem", "map_id", ["topological_space", "compacts"]], ["add", "theorem", "coe_map", ["topological_space", "positive_compacts"]], ["add", "theorem", "map_comp", ["topological_space", "positive_compacts"]], ["add", "theorem", "map_id", ["topological_space", "positive_compacts"]]]}]}, {"timestamp": 1683789751, "sha": "2f834701", "message": "chore(probability/independence): create independence folder, split old file into two parts (#18987)\nSplit `probability/independence` into two files, to put Kolmogorov's zero-one law in its own file. The two new files are placed in an `independence` folder.\nAlso fix a typo in a name in `probability/borel_cantelli`.", "changes": [{"oldPath": "src/probability/borel_cantelli.lean", "newPath": "src/probability/borel_cantelli.lean", "changes": [["del", "theorem", "condexp_natrual_ae_eq_of_lt", ["probability_theory", "Indep_fun"]], ["add", "theorem", "condexp_natural_ae_eq_of_lt", ["probability_theory", "Indep_fun"]]]}, {"oldPath": "src/probability/conditional_expectation.lean", "newPath": "src/probability/conditional_expectation.lean", "changes": []}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence/basic.lean", "changes": [["del", "theorem", "indep_bsupr_compl", ["probability_theory"]], ["del", "theorem", "indep_bsupr_limsup", ["probability_theory"]], ["del", "theorem", "indep_limsup_at_bot_self", ["probability_theory"]], ["del", "theorem", "indep_limsup_at_top_self", ["probability_theory"]], ["del", "theorem", "indep_limsup_self", ["probability_theory"]], ["del", "theorem", "indep_supr_directed_limsup", ["probability_theory"]], ["del", "theorem", "indep_supr_limsup", ["probability_theory"]], ["del", "theorem", "measure_eq_zero_or_one_of_indep_set_self", ["probability_theory"]], ["del", "theorem", "measure_eq_zero_or_one_or_top_of_indep_set_self", ["probability_theory"]], ["del", "theorem", "measure_zero_or_one_of_measurable_set_limsup", ["probability_theory"]], ["del", "theorem", "measure_zero_or_one_of_measurable_set_limsup_at_bot", ["probability_theory"]], ["del", "theorem", "measure_zero_or_one_of_measurable_set_limsup_at_top", ["probability_theory"]]]}, {"oldPath": null, "newPath": "src/probability/independence/zero_one.lean", "changes": [["add", "theorem", "indep_bsupr_compl", ["probability_theory"]], ["add", "theorem", "indep_bsupr_limsup", ["probability_theory"]], ["add", "theorem", "indep_limsup_at_bot_self", ["probability_theory"]], ["add", "theorem", "indep_limsup_at_top_self", ["probability_theory"]], ["add", "theorem", "indep_limsup_self", ["probability_theory"]], ["add", "theorem", "indep_supr_directed_limsup", ["probability_theory"]], ["add", "theorem", "indep_supr_limsup", ["probability_theory"]], ["add", "theorem", "measure_eq_zero_or_one_of_indep_set_self", ["probability_theory"]], ["add", "theorem", "measure_eq_zero_or_one_or_top_of_indep_set_self", ["probability_theory"]], ["add", "theorem", "measure_zero_or_one_of_measurable_set_limsup", ["probability_theory"]], ["add", "theorem", "measure_zero_or_one_of_measurable_set_limsup_at_bot", ["probability_theory"]], ["add", "theorem", "measure_zero_or_one_of_measurable_set_limsup_at_top", ["probability_theory"]]]}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": []}]}, {"timestamp": 1683789750, "sha": "781cb2ee", "message": "chore(*): add mathlib4 synchronization comments (#18984)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.epi_mono`\n* `algebra.category.Group.equivalence_Group_AddGroup`\n* `algebra.continued_fractions.computation.correctness_terminating`\n* `analysis.convex.partition_of_unity`\n* `analysis.normed.group.controlled_closure`\n* `analysis.normed_space.compact_operator`\n* `category_theory.abelian.pseudoelements`\n* `category_theory.preadditive.hom_orthogonal`\n* `category_theory.sites.cover_preserving`\n* `computability.halting`\n* `computability.partrec_code`\n* `dynamics.ergodic.ergodic`\n* `dynamics.ergodic.measure_preserving`\n* `measure_theory.covering.vitali_family`\n* `measure_theory.decomposition.unsigned_hahn`\n* `measure_theory.group.arithmetic`\n* `measure_theory.lattice`\n* `measure_theory.measure.mutually_singular`\n* `measure_theory.measure.open_pos`\n* `probability.conditional_probability`\n* `topology.algebra.equicontinuity`\n* `topology.category.Profinite.as_limit`\n* `topology.category.Top.limits.products`\n* `topology.continuous_function.locally_constant`", "changes": [{"oldPath": "src/algebra/category/Group/epi_mono.lean", "newPath": "src/algebra/category/Group/epi_mono.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/equivalence_Group_AddGroup.lean", "newPath": "src/algebra/category/Group/equivalence_Group_AddGroup.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/analysis/convex/partition_of_unity.lean", "newPath": "src/analysis/convex/partition_of_unity.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/controlled_closure.lean", "newPath": "src/analysis/normed/group/controlled_closure.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/compact_operator.lean", "newPath": "src/analysis/normed_space/compact_operator.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/hom_orthogonal.lean", "newPath": "src/category_theory/preadditive/hom_orthogonal.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/ergodic.lean", "newPath": "src/dynamics/ergodic/ergodic.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali_family.lean", "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/lattice.lean", "newPath": "src/measure_theory/lattice.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/mutually_singular.lean", "newPath": "src/measure_theory/measure/mutually_singular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/open_pos.lean", "newPath": "src/measure_theory/measure/open_pos.lean", "changes": []}, {"oldPath": "src/probability/conditional_probability.lean", "newPath": "src/probability/conditional_probability.lean", "changes": []}, {"oldPath": "src/topology/algebra/equicontinuity.lean", "newPath": "src/topology/algebra/equicontinuity.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/as_limit.lean", "newPath": "src/topology/category/Profinite/as_limit.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits/products.lean", "newPath": "src/topology/category/Top/limits/products.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/locally_constant.lean", "newPath": "src/topology/continuous_function/locally_constant.lean", "changes": []}]}, {"timestamp": 1683784655, "sha": "5dc275ec", "message": "feat(analysis/normed/order/lattice): add has_solid_norm (#18554)\nSee [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Solid)", "changes": [{"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": [["add", "def", "is_solid", ["lattice_ordered_add_comm_group"]], ["add", "theorem", "is_solid_solid_closure", ["lattice_ordered_add_comm_group"]], ["add", "def", "solid_closure", ["lattice_ordered_add_comm_group"]], ["add", "theorem", "solid_closure_min", ["lattice_ordered_add_comm_group"]]]}, {"oldPath": "src/analysis/normed/order/lattice.lean", "newPath": "src/analysis/normed/order/lattice.lean", "changes": [["add", "theorem", "is_solid_ball", ["lattice_ordered_add_comm_group"]], ["add", "theorem", "norm_le_norm_of_abs_le_abs", []], ["del", "theorem", "solid", []]]}, {"oldPath": "src/measure_theory/function/lp_order.lean", "newPath": "src/measure_theory/function/lp_order.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1683760240, "sha": "ec4b2eeb", "message": "chore(topology/instances/ennreal): missing smul lemmas (#18980)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "smul_top", ["ennreal"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "theorem", "smul_extend", ["measure_theory"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "smul_Sup", ["ennreal"]], ["add", "theorem", "smul_supr", ["ennreal"]]]}]}, {"timestamp": 1683760239, "sha": "2d44d682", "message": "feat(data/finset/lattice): Distributivity lemmas (#18611)\nDualise a few existing lemmas, protect `finset.sup_eq_bot_iff`/`finset.inf_eq_top_iff`, move `map_finset_sup`/`map_finset_inf` from `order.hom.lattice` to `data.finset.lattice`, make binders semi-implicit in `finset.disjoint_sup_left` and friends to avoid overly explicit binders in a local assumption after rewriting.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["del", "theorem", "inf_eq_top_iff", ["finset"]], ["add", "theorem", "inf_himp_right", ["finset"]], ["add", "theorem", "inf_sup", ["finset"]], ["add", "theorem", "inf_sup_inf", ["finset"]], ["del", "theorem", "sup_eq_bot_iff", ["finset"]], ["add", "theorem", "sup_himp_left", ["finset"]], ["add", "theorem", "sup_himp_right", ["finset"]], ["add", "theorem", "sup_inf", ["finset"]], ["add", "theorem", "sup_inf_sup", ["finset"]]]}]}, {"timestamp": 1683754800, "sha": "213b0cff", "message": "feat(algebra/order/to_interval_mod): add circular_order instance for add_circle (#17743)\nThis also provides us with the same instance for `real.angle`.", "changes": [{"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["add", "theorem", "btw_coe_iff'", ["quotient_add_group"]], ["add", "theorem", "btw_coe_iff", ["quotient_add_group"]], ["add", "theorem", "equiv_Ico_mod_zero", ["quotient_add_group"]], ["add", "theorem", "equiv_Ioc_mod_zero", ["quotient_add_group"]], ["add", "theorem", "to_Ico_div_eq_sub", []], ["add", "theorem", "to_Ico_mod_add_to_Ioc_mod_zero", []], ["add", "theorem", "to_Ico_mod_eq_sub", []], ["add", "theorem", "to_Ico_mod_zero_sub_comm", []], ["add", "theorem", "to_Ioc_div_eq_sub", []], ["add", "theorem", "to_Ioc_mod_add_to_Ico_mod_zero", []], ["add", "theorem", "to_Ioc_mod_eq_sub", []], ["add", "theorem", "to_Ioc_mod_zero_sub_comm", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}, {"oldPath": "src/order/circular.lean", "newPath": "src/order/circular.lean", "changes": []}, {"oldPath": "src/topology/instances/add_circle.lean", "newPath": "src/topology/instances/add_circle.lean", "changes": []}]}, {"timestamp": 1683750893, "sha": "28b2a92f", "message": "feat(probability/kernel/measurable_integral): the integral against a kernel is strongly measurable (#18974)\nWe also rename the measurability lemmas to use the same convention as in the file measure_theory/constructions/prod, which contains very similar lemmas for the integral against a measure (a particular case of what we are proving here).", "changes": [{"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": []}, {"oldPath": "src/probability/kernel/measurable_integral.lean", "newPath": "src/probability/kernel/measurable_integral.lean", "changes": [["add", "theorem", "lintegral_kernel", ["measurable"]], ["add", "theorem", "lintegral_kernel_prod_left'", ["measurable"]], ["add", "theorem", "lintegral_kernel_prod_left", ["measurable"]], ["add", "theorem", "lintegral_kernel_prod_right''", ["measurable"]], ["add", "theorem", "lintegral_kernel_prod_right'", ["measurable"]], ["add", "theorem", "lintegral_kernel_prod_right", ["measurable"]], ["add", "theorem", "set_lintegral_kernel", ["measurable"]], ["add", "theorem", "set_lintegral_kernel_prod_left", ["measurable"]], ["add", "theorem", "set_lintegral_kernel_prod_right", ["measurable"]], ["add", "theorem", "integral_kernel_prod_left''", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_kernel_prod_left'", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_kernel_prod_left", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_kernel_prod_right''", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_kernel_prod_right'", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_kernel_prod_right", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "measurable_kernel_prod_mk_left'", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_kernel_prod_mk_left", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_kernel_prod_mk_left_of_finite", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_kernel_prod_mk_right", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_lintegral'", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_lintegral", ["probability_theory", "kernel"]], ["mod", "theorem", "measurable_lintegral_indicator_const", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_prod_mk_mem", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_prod_mk_mem_of_finite", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_set_lintegral'", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_set_lintegral", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_set_kernel_integrable", ["probability_theory"]]]}, {"oldPath": "src/probability/kernel/with_density.lean", "newPath": "src/probability/kernel/with_density.lean", "changes": []}]}, {"timestamp": 1683730290, "sha": "a2706b55", "message": "chore(*): add mathlib4 synchronization comments (#18977)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `category_theory.functor.flat`\n* `category_theory.preadditive.injective`\n* `category_theory.preadditive.injective_resolution`\n* `linear_algebra.projective_space.subspace`\n* `measure_theory.measure.ae_measurable`\n* `measure_theory.measure.measure_space`\n* `measure_theory.measure.sub`\n* `probability.probability_mass_function.basic`\n* `topology.partition_of_unity`", "changes": [{"oldPath": "src/category_theory/functor/flat.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective_resolution.lean", "newPath": "src/category_theory/preadditive/injective_resolution.lean", "changes": []}, {"oldPath": "src/linear_algebra/projective_space/subspace.lean", "newPath": "src/linear_algebra/projective_space/subspace.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/sub.lean", "newPath": "src/measure_theory/measure/sub.lean", "changes": []}, {"oldPath": "src/probability/probability_mass_function/basic.lean", "newPath": "src/probability/probability_mass_function/basic.lean", "changes": []}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}]}, {"timestamp": 1683730289, "sha": "e25a3174", "message": "feat(number_theory/diophantine_approximation): add Legendre's thm on rat'l approximations (#18460)\nThis adds *Legendre's Theorem* on rational approximations:\n```lean\nlemma ex_continued_fraction_convergent_eq_rat {ξ : ℝ} {q : ℚ} (h : |ξ - q| < 1 / (2 * q.denom ^ 2)) :\n ∃ n, (generalized_continued_fraction.of ξ).convergents n = q\n```\nSee this [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Diophantine.20approximation/near/323758115).", "changes": [{"oldPath": "src/number_theory/diophantine_approximation.lean", "newPath": "src/number_theory/diophantine_approximation.lean", "changes": [["add", "theorem", "aux₃", ["real"]], ["add", "def", "ass", ["real", "contfrac_legendre"]], ["add", "theorem", "continued_fraction_convergent_eq_convergent", ["real"]], ["add", "theorem", "convergent_of_int", ["real"]], ["add", "theorem", "convergent_of_zero", ["real"]], ["add", "theorem", "convergent_succ", ["real"]], ["add", "theorem", "convergent_zero", ["real"]], ["add", "theorem", "exists_continued_fraction_convergent_eq_rat", ["real"]], ["add", "theorem", "exists_rat_eq_convergent'", ["real"]], ["add", "theorem", "exists_rat_eq_convergent", ["real"]]]}]}, {"timestamp": 1683718422, "sha": "a07d7509", "message": "refactor(algebra): Redefine `a ≡ b [PMOD p]` (#18958)\nas `∃ n : ℤ, b - a = n • p` instead of `∀ n : ℤ, b - n • p ∉ set.Ioo a (a + p)`. Since this new definition doesn't require an order on `α`, we move it to a new file `algebra.modeq`. Expand the API.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_mul_cancel'''", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "cast_mul_eq_zsmul_cast", ["int"]]]}, {"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/modeq.lean", "changes": [["add", "theorem", "add_modeq_left", ["add_comm_group"]], ["add", "theorem", "add_modeq_right", ["add_comm_group"]], ["add", "theorem", "add_nsmul_modeq", ["add_comm_group"]], ["add", "theorem", "add_zsmul_modeq", ["add_comm_group"]], ["add", "theorem", "int_cast_modeq_int_cast", ["add_comm_group"]], ["add", "theorem", "trans", ["add_comm_group", "modeq"]], ["add", "def", "modeq", ["add_comm_group"]], ["add", "theorem", "modeq_comm", ["add_comm_group"]], ["add", "theorem", "modeq_iff_eq_add_zsmul", ["add_comm_group"]], ["add", "theorem", "modeq_iff_eq_mod_zmultiples", ["add_comm_group"]], ["add", "theorem", "modeq_iff_int_modeq", ["add_comm_group"]], ["add", "theorem", "modeq_neg", ["add_comm_group"]], ["add", "theorem", "modeq_refl", ["add_comm_group"]], ["add", "theorem", "modeq_rfl", ["add_comm_group"]], ["add", "theorem", "modeq_sub", ["add_comm_group"]], ["add", "theorem", "modeq_sub_iff_add_modeq'", ["add_comm_group"]], ["add", "theorem", "modeq_sub_iff_add_modeq", ["add_comm_group"]], ["add", "theorem", "modeq_zero", ["add_comm_group"]], ["add", "theorem", "nat_cast_modeq_nat_cast", ["add_comm_group"]], ["add", "theorem", "neg_modeq_neg", ["add_comm_group"]], ["add", "theorem", "not_modeq_iff_ne_add_zsmul", ["add_comm_group"]], ["add", "theorem", "not_modeq_iff_ne_mod_zmultiples", ["add_comm_group"]], ["add", "theorem", "nsmul_add_modeq", ["add_comm_group"]], ["add", "theorem", "nsmul_modeq_nsmul", ["add_comm_group"]], ["add", "theorem", "self_modeq_zero", ["add_comm_group"]], ["add", "theorem", "sub_modeq_iff_modeq_add'", ["add_comm_group"]], ["add", "theorem", "sub_modeq_iff_modeq_add", ["add_comm_group"]], ["add", "theorem", "sub_modeq_zero", ["add_comm_group"]], ["add", "theorem", "zsmul_add_modeq", ["add_comm_group"]], ["add", "theorem", "zsmul_modeq_zero", ["add_comm_group"]], ["add", "theorem", "zsmul_modeq_zsmul", ["add_comm_group"]]]}, {"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["del", "def", "modeq", ["add_comm_group"]], ["del", "theorem", "modeq_iff_eq_add_zsmul", ["add_comm_group"]], ["del", "theorem", "modeq_iff_eq_mod_zmultiples", ["add_comm_group"]], ["add", "theorem", "modeq_iff_not_forall_mem_Ioo_mod", ["add_comm_group"]], ["mod", "theorem", "modeq_iff_to_Ico_mod_eq_left", ["add_comm_group"]], ["del", "theorem", "not_modeq_iff_ne_add_zsmul", ["add_comm_group"]], ["del", "theorem", "not_modeq_iff_ne_mod_zmultiples", ["add_comm_group"]], ["add", "theorem", "to_Ico_mod_inj", []]]}, {"oldPath": "src/topology/instances/add_circle.lean", "newPath": "src/topology/instances/add_circle.lean", "changes": []}]}, {"timestamp": 1683718421, "sha": "0b20dffb", "message": "feat(number_theory/pell): add def and properties of fundamental solutions (#18901)\nThis is the next step in developing the theory of Pell's equation.\nWe define what a *fundamental solution* is, show that it exists and is unique and that it is characterized by the property that it (is positive and) generates the group of solutions up to sign.\nSee [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Proving.20Pell's.20equation.20is.20solvable/near/343270338).", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["add", "theorem", "exists_unique_pos_generator", ["pell"]], ["add", "theorem", "d_nonsquare", ["pell", "is_fundamental"]], ["add", "theorem", "d_pos", ["pell", "is_fundamental"]], ["add", "theorem", "eq_pow_of_nonneg", ["pell", "is_fundamental"]], ["add", "theorem", "eq_zpow_or_neg_zpow", ["pell", "is_fundamental"]], ["add", "theorem", "exists_of_not_is_square", ["pell", "is_fundamental"]], ["add", "theorem", "mul_inv_x_lt_x", ["pell", "is_fundamental"]], ["add", "theorem", "mul_inv_x_pos", ["pell", "is_fundamental"]], ["add", "theorem", "mul_inv_y_nonneg", ["pell", "is_fundamental"]], ["add", "theorem", "subsingleton", ["pell", "is_fundamental"]], ["add", "theorem", "x_le_x", ["pell", "is_fundamental"]], ["add", "theorem", "x_mul_y_le_y_mul_x", ["pell", "is_fundamental"]], ["add", "theorem", "x_pos", ["pell", "is_fundamental"]], ["add", "theorem", "y_le_y", ["pell", "is_fundamental"]], ["add", "theorem", "y_strict_mono", ["pell", "is_fundamental"]], ["add", "theorem", "zpow_eq_one_iff", ["pell", "is_fundamental"]], ["add", "theorem", "zpow_ne_neg_zpow", ["pell", "is_fundamental"]], ["add", "theorem", "zpow_y_lt_iff_lt", ["pell", "is_fundamental"]], ["add", "def", "is_fundamental", ["pell"]], ["add", "theorem", "pos_generator_iff_fundamental", ["pell"]], ["add", "theorem", "d_nonsquare_of_one_lt_x", ["pell", "solution₁"]], ["add", "theorem", "d_pos_of_one_lt_x", ["pell", "solution₁"]], ["add", "theorem", "y_zpow_pos", ["pell", "solution₁"]]]}]}, {"timestamp": 1683707610, "sha": "0013240b", "message": "chore(algebra/order/absolute_value): remove unneeded imports (#18978)\nThis is just a CI verification backport of https://github.com/leanprover-community/mathlib4/pull/3869. Feel free to either close or merge!", "changes": [{"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}]}, {"timestamp": 1683652811, "sha": "cc5dd624", "message": "chore(representation_theory/group_cohomology): use `fin.cast_succ` instead of coe (#18950)\nThis replaces the cast from `fin n` to `fin (n + 1)` (defined as `⟨↑i % (n + 1), _⟩`) with `fin.cast_succ` (defined as `⟨↑i, _⟩`).\nThis is the preferred spelling, and using it lets us simplify some proofs.\nThis also removes the `g` argument from `partial_prod_right_inv`, as it was not used, and the interesting statement is the one without it.", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": []}, {"oldPath": "src/representation_theory/group_cohomology/basic.lean", "newPath": "src/representation_theory/group_cohomology/basic.lean", "changes": []}, {"oldPath": "src/representation_theory/group_cohomology/resolution.lean", "newPath": "src/representation_theory/group_cohomology/resolution.lean", "changes": []}]}, {"timestamp": 1683608870, "sha": "7d34004e", "message": "chore(*): add mathlib4 synchronization comments (#18966)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.continued_fractions.computation.translations`\n* `analysis.normed.group.quotient`\n* `analysis.specific_limits.normed`\n* `computability.partrec`\n* `data.complex.orientation`\n* `data.sym.card`\n* `linear_algebra.orientation`\n* `measure_theory.tactic`\n* `topology.algebra.nonarchimedean.adic_topology`\n* `topology.category.Top.open_nhds`\n* `topology.continuous_function.algebra`", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/data/complex/orientation.lean", "newPath": "src/data/complex/orientation.lean", "changes": []}, {"oldPath": "src/data/sym/card.lean", "newPath": "src/data/sym/card.lean", "changes": []}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": []}, {"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "newPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1683587345, "sha": "949dc57e", "message": "feat(*): generalise+add algebraic instances (#18947)\nThese are needed for #18857 (splitting field diamond), and I feel as though it's getting unwieldy so having these separately for review may be nice.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["mod", "theorem", "of_is_splitting_field", ["normal"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "smul_mk", ["adjoin_root"]], ["add", "theorem", "smul_of", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}]}, {"timestamp": 1683578537, "sha": "c1686dff", "message": "feat(data/real/ennreal): interactions between infi/supr and to_nnreal/to_real (#18946)\nAdd lemmas relating `ennreal.to_real` and `ennreal.to_nnreal` to the indexed infimum.\nNote that a slightly different set of lemmas and proofs were added in leanprover-community/mathlib4#3457.\nPlease make sure to switch to these versions when forward-porting, and add `#align`s to the existing lemmas.\nThis also adds `inf_dist_eq_infi`, which is from the same mathlib4 PR.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_infi", ["ennreal"]], ["add", "theorem", "coe_supr", ["ennreal"]], ["add", "theorem", "to_nnreal_Inf", ["ennreal"]], ["add", "theorem", "to_nnreal_Sup", ["ennreal"]], ["add", "theorem", "to_nnreal_infi", ["ennreal"]], ["add", "theorem", "to_nnreal_supr", ["ennreal"]], ["add", "theorem", "to_real_Inf", ["ennreal"]], ["add", "theorem", "to_real_Sup", ["ennreal"]], ["add", "theorem", "to_real_infi", ["ennreal"]], ["add", "theorem", "to_real_supr", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "inf_dist_eq_infi", ["metric"]]]}]}, {"timestamp": 1683566791, "sha": "d4437c68", "message": "feat(field_theory/adjoin,normal): `field_range` lemmas (#18959)\nThis PR adds a couple useful lemmas regarding `field_range`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "field_range_eq_top", ["alg_equiv"]], ["add", "theorem", "field_range_eq_top", ["alg_hom"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "field_range_of_normal", ["alg_hom"]]]}]}, {"timestamp": 1683566790, "sha": "c596622f", "message": "feat(field_theory/intermediate_field): Inhabited instance (#18956)\nIf `S : intermediate_field K L`, then `S →ₐ[K] L` is nonempty.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}]}, {"timestamp": 1683542229, "sha": "a9545e8a", "message": "feat(probability/kernel/basic): integrals of basic kernels (#18961)\nLebesgue and Bochner integral of a function against deterministic, constant and restricted kernels.", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "set_integral_dirac'", ["measure_theory"]], ["add", "theorem", "set_integral_dirac", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "restrict_dirac'", ["measure_theory"]], ["add", "theorem", "restrict_dirac", ["measure_theory"]], ["add", "theorem", "set_lintegral_dirac'", ["measure_theory"]], ["add", "theorem", "set_lintegral_dirac", ["measure_theory"]]]}, {"oldPath": "src/probability/kernel/basic.lean", "newPath": "src/probability/kernel/basic.lean", "changes": [["add", "theorem", "integral_const", ["probability_theory", "kernel"]], ["add", "theorem", "integral_deterministic'", ["probability_theory", "kernel"]], ["add", "theorem", "integral_deterministic", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_const", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_deterministic'", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_deterministic", ["probability_theory", "kernel"]], ["add", "theorem", "restrict_univ", ["probability_theory", "kernel"]], ["add", "theorem", "set_integral_const", ["probability_theory", "kernel"]], ["add", "theorem", "set_integral_deterministic'", ["probability_theory", "kernel"]], ["add", "theorem", "set_integral_deterministic", ["probability_theory", "kernel"]], ["add", "theorem", "set_integral_restrict", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_const", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_deterministic'", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_deterministic", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_restrict", ["probability_theory", "kernel"]]]}, {"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": []}, {"oldPath": "src/probability/kernel/invariance.lean", "newPath": "src/probability/kernel/invariance.lean", "changes": []}]}, {"timestamp": 1683542228, "sha": "63decdb8", "message": "feat(probability/kernel/basic): add `kernel.comap_right` and `kernel.piecewise` (#18917)\nAlso put `is_s_finite_kernel` in the same namespace as the other classes of kernels and add `iff` variants of the ext lemmas.", "changes": [{"oldPath": "src/probability/kernel/basic.lean", "newPath": "src/probability/kernel/basic.lean", "changes": [["add", "def", "comap_right", ["probability_theory", "kernel"]], ["add", "theorem", "comap_right_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "comap_right_apply", ["probability_theory", "kernel"]], ["mod", "theorem", "ext", ["probability_theory", "kernel"]], ["mod", "theorem", "ext_fun", ["probability_theory", "kernel"]], ["add", "theorem", "ext_fun_iff", ["probability_theory", "kernel"]], ["add", "theorem", "ext_iff'", ["probability_theory", "kernel"]], ["add", "theorem", "ext_iff", ["probability_theory", "kernel"]], ["add", "theorem", "integral_piecewise", ["probability_theory", "kernel"]], ["add", "theorem", "comap_right", ["probability_theory", "kernel", "is_markov_kernel"]], ["add", "theorem", "lintegral_piecewise", ["probability_theory", "kernel"]], ["add", "def", "piecewise", ["probability_theory", "kernel"]], ["add", "theorem", "piecewise_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "piecewise_apply", ["probability_theory", "kernel"]], ["add", "theorem", "set_integral_piecewise", ["probability_theory", "kernel"]], ["add", "theorem", "set_lintegral_piecewise", ["probability_theory", "kernel"]]]}]}, {"timestamp": 1683530988, "sha": "6632ca20", "message": "feat(algebra/order/group/order_iso): add `order_iso.div_{left,right}` (#18968)", "changes": [{"oldPath": "src/algebra/order/group/order_iso.lean", "newPath": "src/algebra/order/group/order_iso.lean", "changes": [["add", "def", "div_left", ["order_iso"]], ["add", "def", "div_right", ["order_iso"]]]}]}, {"timestamp": 1683530987, "sha": "f81174bd", "message": "feat(analysis/calculus/deriv): `polynomial.aeval` lemmas (#18945)\nThis duplicates every lemma about differentiation of `polynomial.eval` for `polynomial.aeval` too.\nSome of these turned out to be needed in #18896.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}]}, {"timestamp": 1683526792, "sha": "937b1c59", "message": "feat(order/category): Category of finite distributive lattices (#11677)\nDefine `FinBddDistLat`, the category of finite distributive lattices with bounded lattice homomorphisms. This is one of the two categories involved in Birkhoff's representation theorem.", "changes": [{"oldPath": null, "newPath": "src/order/category/FinBddDistLat.lean", "changes": [["add", "def", "dual", ["FinBddDistLat"]], ["add", "def", "dual_equiv", ["FinBddDistLat"]], ["add", "def", "mk", ["FinBddDistLat", "iso"]], ["add", "def", "of'", ["FinBddDistLat"]], ["add", "def", "of", ["FinBddDistLat"]], ["add", "structure", "FinBddDistLat", []], ["add", "theorem", "FinBddDistLat_dual_comp_forget_to_BddDistLat", []]]}, {"oldPath": "src/order/category/FinBoolAlg.lean", "newPath": "src/order/category/FinBoolAlg.lean", "changes": [["add", "theorem", "FinBoolAlg_dual_comp_forget_to_FinBddDistLat", []]]}, {"oldPath": "src/order/category/FinPartOrd.lean", "newPath": "src/order/category/FinPartOrd.lean", "changes": []}]}, {"timestamp": 1683511212, "sha": "3f655f52", "message": "refactor(data/is_R_or_C,analysis/inner_product_space): review API (#18919)\n## Drop `is_R_or_C.abs` and lemmas about it\nUse `has_norm.norm` instead. The norm is definitionally equal both to\n`real.abs` and `complex.abs`, so it's easier to specialize generic\ntheorems to real numbers. Also, we don't have to convert between norm\nand `is_R_or_C.abs` here and there.\n- Drop `is_R_or_C.abs`, `is_R_or_C.norm_eq_abs`,\n `is_R_or_C.abs_of_nonneg`, `is_R_or_C.abs_zero`,\n `is_R_or_C.abs_one`, `is_R_or_C.abs_nonneg`,\n `is_R_or_C.abs_eq_zero`, `is_R_or_C.abs_ne_zero`,\n `is_R_or_C.abs_mul`, `is_R_or_C.abs_add`,\n `is_R_or_C.is_absolute_value`, `is_R_or_C.abs_abs`,\n `is_R_or_C.abs_pos`, `is_R_or_C.abs_neg`, `is_R_or_C.abs_inv`,\n `is_R_or_C.abs_div`, `is_R_or_C.abs_abs_sub_le_abs_sub`,\n `is_R_or_C.norm_sq_eq_abs`, `is_R_or_C.abs_to_real`,\n `is_R_or_C.continuous_abs`, `is_R_or_C.abs_to_complex`,\n `inner_product_space.core.abs_inner_symm`, `abs_inner_le_norm`.\n## Rename/merge lemmas\n### `is_R_or_C`\n- Rename `is_R_or_C.of_real_smul` to `is_R_or_C.real_smul_of_real`.\n- Merge `is_R_or_C.norm_real`, `is_R_or_C.norm_of_real`, and\n `is_R_or_C.abs_of_real` into `is_R_or_C.norm_of_real`.\n- Merge `is_R_or_C.abs_of_nat` and `is_R_or_C.abs_cast_nat` into\n `is_R_or_C.norm_nat_cast`, use `has_norm.norm`, make it a `simp,\n priority 900, is_R_or_C_simps, norm_cast` lemma.\n- Rename `is_R_or_C.mul_self_abs` to `is_R_or_C.mul_self_norm`, use\n `has_norm.norm`.\n- Rename `is_R_or_C.abs_two` to `is_R_or_C.norm_two`, use\n `has_norm.norm`.\n- Rename `is_R_or_C.abs_conj` to `is_R_or_C.norm_conj`, use\n `has_norm.norm`.\n- Rename `is_R_or_C.abs_re_le_abs` to `is_R_or_C.abs_re_le_norm`, use\n `has_norm.norm`.\n- Rename `is_R_or_C.abs_im_le_abs` to `is_R_or_C.abs_im_le_norm`, use\n `has_norm.norm`.\n- Rename `is_R_or_C.re_le_abs` and `is_R_or_C.im_le_abs` to\n `is_R_or_C.re_le_norm` and `is_R_or_C.im_le_norm`, respectively; use\n `has_norm.norm`.\n- Use `has_norm.norm` in `is_R_or_C.im_eq_zero_of_le` and\n `is_R_or_C.re_eq_self_of_le`.\n- Rename `is_R_or_C.abs_re_div_abs_le_one` and\n `is_R_or_C.abs_im_div_abs_le_one` to\n `is_R_or_C.abs_re_div_norm_le_one` and\n `is_R_or_C.abs_im_div_norm_le_one`, respectively; use\n `has_norm.norm`.\n- Rename `is_R_or_C.re_eq_abs_of_mul_conj` to\n `is_R_or_C.re_eq_norm_of_mul_conj`, use `has_norm.norm`.\n- Rename `is_R_or_C.abs_sq_re_add_conj` and\n `is_R_or_C.abs_sq_re_add_conj'` to `is_R_or_C.norm_sq_re_add_conj`\n and `is_R_or_C.norm_sq_re_conj_add`, respectively; use\n `has_norm.norm`.\n- Use `has_norm.norm` in all lemmas/definitions about `is_cau_seq` and\n `cau_seq` sequences of `is_R_or_C` numbers.\n- Rename `is_R_or_C.is_cau_seq_abs` to `is_R_or_C.is_cau_seq_norm`,\n use `has_norm.norm`.\n### Inner products\n- Rename `inner_product_space.core.inner_mul_conj_re_abs` to\n `inner_product_space.core.inner_mul_symm_re_eq_norm`, use\n `has_norm.norm`.\n- Do the same in the root NS.\n- Rename `inner_self_re_abs` to `inner_self_re_eq_norm`, use\n `has_norm.norm`.\n- Rename `inner_self_abs_to_K` to `inner_self_norm_to_K`, use\n `has_norm.norm`.\n- Rename `abs_inner_symm` to `norm_inner_symm`, use `has_norm.norm`.\n- Rename\n `abs_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul` to\n `norm_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul`, use\n `has_norm.norm`.\n## Add lemmas\n- Add `is_R_or_C.is_real_tfae` and `is_real_tfae.conj_eq_iff_im`.\n- Add `is_R_or_C.norm_sq_apply`.\n## Change attributes\n- `is_R_or_C.zero_re'` is no longer a `simp` lemma\n- `is_R_or_C.norm_conj` is now a `simp` lemma.\n## Misc\n- Reorder lemmas here and there to golf.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/analysis/calculus/uniform_limits_deriv.lean", "newPath": "src/analysis/calculus/uniform_limits_deriv.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["del", "theorem", "abs_to_complex", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_to_complex", ["is_R_or_C"]]]}, {"oldPath": "src/analysis/complex/schwarz.lean", "newPath": "src/analysis/complex/schwarz.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["del", "theorem", "abs_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul", []], ["del", "theorem", "abs_inner_le_norm", []], ["del", "theorem", "abs_inner_symm", []], ["mod", "theorem", "abs_real_inner_div_norm_mul_norm_le_one", []], ["del", "theorem", "inner_mul_conj_re_abs", []], ["add", "theorem", "inner_mul_symm_re_eq_norm", []], ["del", "theorem", "abs_inner_symm", ["inner_product_space", "core"]], ["del", "theorem", "inner_mul_conj_re_abs", ["inner_product_space", "core"]], ["add", "theorem", "inner_mul_symm_re_eq_norm", ["inner_product_space", "core"]], ["del", "theorem", "inner_self_abs_to_K", []], ["add", "theorem", "inner_self_norm_to_K", []], ["del", "theorem", "inner_self_re_abs", []], ["add", "theorem", "inner_self_re_eq_norm", []], ["add", "theorem", "norm_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul", []], ["add", "theorem", "norm_inner_symm", []], ["mod", "theorem", "real_inner_self_abs", []]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/continuous_of_bounded.lean", "newPath": "src/analysis/locally_convex/continuous_of_bounded.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/data/is_R_or_C/basic.lean", "newPath": "src/data/is_R_or_C/basic.lean", "changes": [["del", "theorem", "abs_abs", ["is_R_or_C"]], ["del", "theorem", "abs_abs_sub_le_abs_sub", ["is_R_or_C"]], ["del", "theorem", "abs_add", ["is_R_or_C"]], ["del", "theorem", "abs_cast_nat", ["is_R_or_C"]], ["del", "theorem", "abs_conj", ["is_R_or_C"]], ["del", "theorem", "abs_div", ["is_R_or_C"]], ["del", "theorem", "abs_eq_zero", ["is_R_or_C"]], ["del", "theorem", "abs_im_div_abs_le_one", ["is_R_or_C"]], ["add", "theorem", "abs_im_div_norm_le_one", ["is_R_or_C"]], ["del", "theorem", "abs_im_le_abs", ["is_R_or_C"]], ["add", "theorem", "abs_im_le_norm", ["is_R_or_C"]], ["del", "theorem", "abs_inv", ["is_R_or_C"]], ["del", "theorem", "abs_mul", ["is_R_or_C"]], ["del", "theorem", "abs_ne_zero", ["is_R_or_C"]], ["del", "theorem", "abs_neg", ["is_R_or_C"]], ["del", "theorem", "abs_nonneg", ["is_R_or_C"]], ["del", "theorem", "abs_of_nat", ["is_R_or_C"]], ["del", "theorem", "abs_of_nonneg", ["is_R_or_C"]], ["del", "theorem", "abs_of_real", ["is_R_or_C"]], ["del", "theorem", "abs_one", ["is_R_or_C"]], ["del", "theorem", "abs_pos", ["is_R_or_C"]], ["del", "theorem", "abs_re_div_abs_le_one", ["is_R_or_C"]], ["add", "theorem", "abs_re_div_norm_le_one", ["is_R_or_C"]], ["del", "theorem", "abs_re_le_abs", ["is_R_or_C"]], ["add", "theorem", "abs_re_le_norm", ["is_R_or_C"]], ["del", "theorem", "abs_sq_re_add_conj'", ["is_R_or_C"]], ["del", "theorem", "abs_sq_re_add_conj", ["is_R_or_C"]], ["del", "theorem", "abs_sub", ["is_R_or_C"]], ["del", "theorem", "abs_sub_le", ["is_R_or_C"]], ["del", "theorem", "abs_to_real", ["is_R_or_C"]], ["del", "theorem", "abs_two", ["is_R_or_C"]], ["del", "theorem", "abs_zero", ["is_R_or_C"]], ["mod", "theorem", "add_conj", ["is_R_or_C"]], ["add", "theorem", "conj_eq_iff_im", ["is_R_or_C"]], ["mod", "theorem", "conj_eq_re_sub_im", ["is_R_or_C"]], ["del", "theorem", "continuous_abs", ["is_R_or_C"]], ["mod", "theorem", "continuous_norm_sq", ["is_R_or_C"]], ["mod", "theorem", "im_eq_zero_of_le", ["is_R_or_C"]], ["del", "theorem", "im_le_abs", ["is_R_or_C"]], ["add", "theorem", "im_le_norm", ["is_R_or_C"]], ["del", "theorem", "is_cau_seq_abs", ["is_R_or_C"]], ["mod", "theorem", "is_cau_seq_im", ["is_R_or_C"]], ["add", "theorem", "is_cau_seq_norm", ["is_R_or_C"]], ["mod", "theorem", "is_cau_seq_re", ["is_R_or_C"]], ["add", "theorem", "is_real_tfae", ["is_R_or_C"]], ["del", "theorem", "mul_self_abs", ["is_R_or_C"]], ["add", "theorem", "mul_self_norm", ["is_R_or_C"]], ["mod", "theorem", "norm_conj", ["is_R_or_C"]], ["del", "theorem", "norm_eq_abs", ["is_R_or_C"]], ["mod", "theorem", "norm_im_le_norm", ["is_R_or_C"]], ["add", "theorem", "norm_nat_cast", ["is_R_or_C"]], ["mod", "theorem", "norm_of_nonneg", ["is_R_or_C"]], ["mod", "theorem", "norm_of_real", ["is_R_or_C"]], ["mod", "theorem", "norm_re_le_norm", ["is_R_or_C"]], ["del", "theorem", "norm_real", ["is_R_or_C"]], ["add", "theorem", "norm_sq_apply", ["is_R_or_C"]], ["del", "theorem", "norm_sq_eq_abs", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_eq_def'", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_eq_def", ["is_R_or_C"]], ["add", "theorem", "norm_sq_re_add_conj", ["is_R_or_C"]], ["add", "theorem", "norm_sq_re_conj_add", ["is_R_or_C"]], ["add", "theorem", "norm_two", ["is_R_or_C"]], ["mod", "theorem", "of_real_inj", ["is_R_or_C"]], ["del", "theorem", "of_real_smul", ["is_R_or_C"]], ["mod", "theorem", "of_real_zero", ["is_R_or_C"]], ["del", "theorem", "re_eq_abs_of_mul_conj", ["is_R_or_C"]], ["add", "theorem", "re_eq_norm_of_mul_conj", ["is_R_or_C"]], ["mod", "theorem", "re_eq_self_of_le", ["is_R_or_C"]], ["del", "theorem", "re_le_abs", ["is_R_or_C"]], ["add", "theorem", "re_le_norm", ["is_R_or_C"]], ["add", "theorem", "real_smul_of_real", ["is_R_or_C"]], ["mod", "theorem", "smul_im", ["is_R_or_C"]], ["mod", "theorem", "smul_re", ["is_R_or_C"]], ["mod", "theorem", "sub_conj", ["is_R_or_C"]], ["mod", "theorem", "zero_re'", ["is_R_or_C"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}]}, {"timestamp": 1683495540, "sha": "b1c01758", "message": "refactor(linear_algebra/dual): make `module.dual` reducible (#18963)\nOtherwise Lean 4 can't apply `simp` lemmas about linear maps to elements of `module.dual`.\nThere is no need for this to be reducible anyway, as all the instances on `dual` agree with the instances on linear maps.\nAlso delete `basis.to_dual_equiv_symm_apply`, which stated `⇑(b.to_dual_equiv.symm) f = ⇑((linear_equiv.of_injective b.to_dual _).symm) (⇑((linear_equiv.of_top (linear_map.range b.to_dual) _).symm) f)` which was hardly helpful.", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "theorem", "to_dual_equiv_apply", ["basis"]], ["add", "def", "dual", ["module"]]]}]}, {"timestamp": 1683486661, "sha": "08e1d8d4", "message": "feat(measure_theory/measure/stieltjes): add measure_Iic, measure_Ici, measure_univ (#18884)", "changes": [{"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": [["add", "theorem", "exists_seq_antitone_tendsto_at_top_at_bot", []], ["add", "theorem", "exists_seq_monotone_tendsto_at_top_at_top", []], ["add", "theorem", "tendsto_measure_Ici_at_bot", ["measure_theory"]], ["add", "theorem", "tendsto_measure_Ico_at_top", ["measure_theory"]], ["add", "theorem", "tendsto_measure_Iic_at_top", ["measure_theory"]], ["add", "theorem", "tendsto_measure_Ioc_at_bot", ["measure_theory"]], ["add", "theorem", "measure_Ici", ["stieltjes_function"]], ["add", "theorem", "measure_Iic", ["stieltjes_function"]], ["add", "theorem", "measure_univ", ["stieltjes_function"]], ["add", "theorem", "supr_eq_supr_subseq_of_antitone", []]]}]}, {"timestamp": 1683454582, "sha": "483dd86c", "message": "chore(probability/kernel/basic): split into three files (#18957)\nSplit `probability/kernel/basic` into 3 files:\n- basic: definitions of a kernel, classes of kernels and some elementary kernels\n- measurable_integral: measurability of the Lebesgue integral against a kernel. I am about to add a lot more material to this file, about (ae-)strong measurability, the Bochner integral, etc. This planned increase in size is the motivation for this PR.\n- with_density: the kernel `with_density`. It requires results about measurability of the integral, hence it cannot remain in basic.", "changes": [{"oldPath": "src/probability/kernel/basic.lean", "newPath": "src/probability/kernel/basic.lean", "changes": [["del", "theorem", "is_finite_kernel_with_density_of_bounded", ["probability_theory", "kernel"]], ["del", "theorem", "with_density", ["probability_theory", "kernel", "is_s_finite_kernel"]], ["del", "theorem", "is_s_finite_kernel_with_density_of_is_finite_kernel", ["probability_theory", "kernel"]], ["del", "theorem", "lintegral_with_density", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_lintegral'", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_lintegral", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_lintegral_indicator_const", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_prod_mk_mem", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_prod_mk_mem_of_finite", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_set_lintegral'", ["probability_theory", "kernel"]], ["del", "theorem", "measurable_set_lintegral", ["probability_theory", "kernel"]], ["del", "def", "with_density", ["probability_theory", "kernel"]], ["del", "theorem", "with_density_add_left", ["probability_theory", "kernel"]], ["del", "theorem", "with_density_apply'", ["probability_theory", "kernel"]], ["del", "theorem", "with_density_kernel_sum", ["probability_theory", "kernel"]], ["del", "theorem", "with_density_of_not_measurable", ["probability_theory", "kernel"]], ["del", "theorem", "with_density_tsum", ["probability_theory", "kernel"]]]}, {"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": []}, {"oldPath": null, "newPath": "src/probability/kernel/measurable_integral.lean", "changes": [["add", "theorem", "measurable_lintegral'", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_lintegral", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_lintegral_indicator_const", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_prod_mk_mem", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_prod_mk_mem_of_finite", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_set_lintegral'", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_set_lintegral", ["probability_theory", "kernel"]]]}, {"oldPath": null, "newPath": "src/probability/kernel/with_density.lean", "changes": [["add", "theorem", "is_finite_kernel_with_density_of_bounded", ["probability_theory", "kernel"]], ["add", "theorem", "with_density", ["probability_theory", "kernel", "is_s_finite_kernel"]], ["add", "theorem", "is_s_finite_kernel_with_density_of_is_finite_kernel", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_with_density", ["probability_theory", "kernel"]], ["add", "def", "with_density", ["probability_theory", "kernel"]], ["add", "theorem", "with_density_add_left", ["probability_theory", "kernel"]], ["add", "theorem", "with_density_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "with_density_kernel_sum", ["probability_theory", "kernel"]], ["add", "theorem", "with_density_of_not_measurable", ["probability_theory", "kernel"]], ["add", "theorem", "with_density_tsum", ["probability_theory", "kernel"]]]}]}, {"timestamp": 1683449161, "sha": "b5ad1414", "message": "chore(*): add mathlib4 synchronization comments (#18944)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.continued_fractions.computation.basic`\n* `algebra.continued_fractions.continuants_recurrence`\n* `algebra.continued_fractions.convergents_equiv`\n* `algebra.continued_fractions.terminated_stable`\n* `algebra.continued_fractions.translations`\n* `linear_algebra.lagrange`\n* `measure_theory.function.ae_measurable_sequence`\n* `measure_theory.measure.ae_disjoint`\n* `measure_theory.measure.measure_space_def`\n* `measure_theory.measure.null_measurable`\n* `ring_theory.ideal.associated_prime`", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "newPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/terminated_stable.lean", "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/translations.lean", "newPath": "src/algebra/continued_fractions/translations.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_sequence.lean", "newPath": "src/measure_theory/function/ae_measurable_sequence.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/null_measurable.lean", "newPath": "src/measure_theory/measure/null_measurable.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/associated_prime.lean", "newPath": "src/ring_theory/ideal/associated_prime.lean", "changes": []}]}, {"timestamp": 1683441533, "sha": "ba2eb704", "message": "feat(algebra/order/to_interval_mod): notation for `add_comm_group.modeq` (#18955)\nSplit from #18941", "changes": [{"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["mod", "theorem", "modeq_iff_eq_add_zsmul", ["add_comm_group"]], ["mod", "theorem", "modeq_iff_to_Ioc_mod_eq_right", ["add_comm_group"]], ["mod", "theorem", "not_modeq_iff_ne_add_zsmul", ["add_comm_group"]]]}]}, {"timestamp": 1683408496, "sha": "75810309", "message": "feat(order/category): Free functor `Lat ⥤ BddLat` (#18949)\nConstruct the free functor from the category of lattices to the category of bounded lattices. Concretely, it adds a bottom and a top element.", "changes": [{"oldPath": "src/order/category/BddLat.lean", "newPath": "src/order/category/BddLat.lean", "changes": [["add", "def", "Lat_to_BddLat", []], ["add", "def", "Lat_to_BddLat_comp_dual_iso_dual_comp_Lat_to_BddLat", []], ["add", "def", "Lat_to_BddLat_forget_adjunction", []]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["add", "def", "with_bot'", ["inf_hom"]], ["add", "theorem", "with_bot_comp", ["inf_hom"]], ["add", "theorem", "with_bot_id", ["inf_hom"]], ["add", "def", "with_top'", ["inf_hom"]], ["add", "theorem", "with_top_comp", ["inf_hom"]], ["add", "theorem", "with_top_id", ["inf_hom"]], ["add", "def", "with_bot'", ["lattice_hom"]], ["add", "theorem", "with_bot_comp", ["lattice_hom"]], ["add", "theorem", "with_bot_id", ["lattice_hom"]], ["add", "def", "with_top'", ["lattice_hom"]], ["add", "theorem", "with_top_comp", ["lattice_hom"]], ["add", "theorem", "with_top_id", ["lattice_hom"]], ["add", "def", "with_top_with_bot'", ["lattice_hom"]], ["add", "def", "with_top_with_bot", ["lattice_hom"]], ["add", "theorem", "with_top_with_bot_comp", ["lattice_hom"]], ["add", "theorem", "with_top_with_bot_id", ["lattice_hom"]], ["add", "def", "with_bot'", ["sup_hom"]], ["add", "theorem", "with_bot_comp", ["sup_hom"]], ["add", "theorem", "with_bot_id", ["sup_hom"]], ["add", "def", "with_top'", ["sup_hom"]], ["add", "theorem", "with_top_comp", ["sup_hom"]], ["add", "theorem", "with_top_id", ["sup_hom"]]]}]}, {"timestamp": 1683378653, "sha": "4c8f86bd", "message": "feat(algebra/order/to_interval_mod): symmetric variants of lemmas (#18942)\nThese lemmas are about expressions in the second instead of third arguments of the `I{co,oc}_{mod,div}` functions.\nSome existing lemmas clashed with these new lemmas; they have been renamed as follows:\n* `to_Ico_div_sub'` → `to_Ico_div_sub_eq_to_Ico_div_add`\n* `to_Ioc_div_sub'` → `to_Ioc_div_sub_eq_to_Ioc_div_add`\n* `to_Ico_div_add_right'` → `to_Ico_div_sub_eq_to_Ico_div_add'` (and reversed)\n* `to_Ioc_div_add_right'` → `to_Ioc_div_sub_eq_to_Ioc_div_add'` (and reversed)\n* `to_Ico_mod_sub'` → `to_Ico_mod_sub_eq_sub`\n* `to_Ioc_mod_sub'` → `to_Ioc_mod_sub_eq_sub`\n* `to_Ico_mod_add_right'` → `to_Ico_mod_add_right_eq_add`\n* `to_Ioc_mod_add_right'` → `to_Ioc_mod_add_right_eq_add`\nThe statement of `to_Ioc_div_zsmul_add` is commuted to be consistent with the lemmas around it; presumably it was a copy-and-paste error.", "changes": [{"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["add", "theorem", "to_Ico_div_add_left'", []], ["mod", "theorem", "to_Ico_div_add_right'", []], ["add", "theorem", "to_Ico_div_add_zsmul'", []], ["add", "theorem", "to_Ico_div_neg'", []], ["mod", "theorem", "to_Ico_div_sub'", []], ["add", "theorem", "to_Ico_div_sub_eq_to_Ico_div_add'", []], ["add", "theorem", "to_Ico_div_sub_eq_to_Ico_div_add", []], ["add", "theorem", "to_Ico_div_sub_zsmul'", []], ["add", "theorem", "to_Ico_mod_add_left'", []], ["mod", "theorem", "to_Ico_mod_add_right'", []], ["add", "theorem", "to_Ico_mod_add_right_eq_add", []], ["add", "theorem", "to_Ico_mod_add_zsmul'", []], ["add", "theorem", "to_Ico_mod_neg'", []], ["mod", "theorem", "to_Ico_mod_sub'", []], ["add", "theorem", "to_Ico_mod_sub_eq_sub", []], ["add", "theorem", "to_Ico_mod_sub_zsmul'", []], ["add", "theorem", "to_Ico_mod_zsmul_add'", []], ["add", "theorem", "to_Ioc_div_add_left'", []], ["mod", "theorem", "to_Ioc_div_add_right'", []], ["add", "theorem", "to_Ioc_div_add_zsmul'", []], ["add", "theorem", "to_Ioc_div_neg'", []], ["mod", "theorem", "to_Ioc_div_sub'", []], ["add", "theorem", "to_Ioc_div_sub_eq_to_Ioc_div_add'", []], ["add", "theorem", "to_Ioc_div_sub_eq_to_Ioc_div_add", []], ["add", "theorem", "to_Ioc_div_sub_zsmul'", []], ["add", "theorem", "to_Ioc_mod_add_left'", []], ["mod", "theorem", "to_Ioc_mod_add_right'", []], ["add", "theorem", "to_Ioc_mod_add_right_eq_add", []], ["add", "theorem", "to_Ioc_mod_add_zsmul'", []], ["add", "theorem", "to_Ioc_mod_neg'", []], ["mod", "theorem", "to_Ioc_mod_sub'", []], ["add", "theorem", "to_Ioc_mod_sub_eq_sub", []], ["add", "theorem", "to_Ioc_mod_sub_zsmul'", []], ["add", "theorem", "to_Ioc_mod_zsmul_add'", []]]}]}, {"timestamp": 1683368805, "sha": "db07e6fe", "message": "chore(algebra/order/lattice_group): remove redundant instance (#18951)\nThis instance was redundant. It can be synthesised at the declaration site via:\n```\nexample (α : Type u) [linear_ordered_comm_group α] : covariant_class α α (*) (≤) := by show_term {apply_instance}\n-- ordered_comm_group.to_covariant_class_left_le α\n```\nMoreover, it is implicated in a timeout in the reenableeta branches, so I want it gone!\nThis PR is just a verification that mathlib still compiles. I don't care if it is merged.", "changes": [{"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": []}]}, {"timestamp": 1683362302, "sha": "fa4a805d", "message": "feat(order/category): Forgetful functor `NonemptyFinLinOrd ⥤ FinPartOrd` (#18948)\nAlso fix a wrong docstring", "changes": [{"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": [["add", "def", "NonemptyFinLinOrd_dual_comp_forget_to_FinPartOrd", []]]}]}, {"timestamp": 1683276618, "sha": "3905fa80", "message": "doc(measure_theory): Fix some names and docstrings (#18910)", "changes": [{"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "measurable_injection_cantor_of_countably_generated", ["measurable_space"]], ["add", "theorem", "measurable_injection_nat_bool_of_countably_generated", ["measurable_space"]]]}, {"oldPath": "src/topology/perfect.lean", "newPath": "src/topology/perfect.lean", "changes": []}]}, {"timestamp": 1683265877, "sha": "00f91228", "message": "feat(number_theory/number_field/units): add is_unit_iff_norm (#18866)\nThis PR creates the file `number_theory/number_field/units.lean` and proves the result : \n```lean\nlemma is_unit_iff_norm [number_field K] (x : 𝓞 K) :\n is_unit x ↔ abs (ring_of_integers.norm ℚ x : ℚ) = 1 \n```", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "abs_pow_eq_one", []]]}, {"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": [["add", "theorem", "map_eq_neg_one_iff", ["ring_equiv"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["add", "theorem", "of_algebraic", ["is_alg_closure"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/norm.lean", "newPath": "src/number_theory/number_field/norm.lean", "changes": [["add", "theorem", "coe_norm_algebra_map", ["ring_of_integers"]], ["mod", "theorem", "is_unit_norm", ["ring_of_integers"]], ["add", "theorem", "is_unit_norm_of_is_galois", ["ring_of_integers"]], ["add", "theorem", "norm_algebra_map", ["ring_of_integers"]], ["add", "theorem", "norm_norm", ["ring_of_integers"]]]}, {"oldPath": null, "newPath": "src/number_theory/number_field/units.lean", "changes": [["add", "theorem", "is_unit_iff_norm", []], ["add", "theorem", "is_unit_iff", ["rat", "ring_of_integers"]]]}]}, {"timestamp": 1683250846, "sha": "25580801", "message": "chore(data/is_R_or_C/basic): rename `conj_mul_eq_norm_sq_left` to `conj_mul` (#18939)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/data/is_R_or_C/basic.lean", "newPath": "src/data/is_R_or_C/basic.lean", "changes": [["add", "theorem", "conj_mul", ["is_R_or_C"]], ["del", "theorem", "conj_mul_eq_norm_sq_left", ["is_R_or_C"]]]}, {"oldPath": "src/topology/continuous_function/ideals.lean", "newPath": "src/topology/continuous_function/ideals.lean", "changes": []}]}, {"timestamp": 1683246187, "sha": "efed3cad", "message": "feat(field_theory/intermediate_field): Add lemma for the `field_range` of `val` (#18940)\nThis PR adds a simple lemma for the `field_range` of `val`.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "field_range_val", ["intermediate_field"]]]}]}, {"timestamp": 1683230445, "sha": "738054fa", "message": "chore(number_theory/modular_forms/slash_invariant_forms): golf and rename (#18933)\nIn the `slash_action` namespace, this renames:\n* `right_action` to `slash_mul` (and reverses the direction), to match `slash_one`\n* `add_action` to `add_slash`, to match `zero_slash`\n* `smul_action` to `smul_slash`, to match `zero_slash`", "changes": [{"oldPath": "src/number_theory/modular_forms/slash_actions.lean", "newPath": "src/number_theory/modular_forms/slash_actions.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "newPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "changes": []}]}, {"timestamp": 1683207868, "sha": "570e9f48", "message": "feat(ring_theory/localization/away) : Add `num_denom` section (#18830)\nAdded a section `num_denom`: the main result is the lemma `exists_reduced_fraction` that shows that every non-zero element `b` in a `localization.away x` of a UFM can be written in a unique way as `b=x^n * a` with `n : ℤ` and `a` not divisible by `x`.", "changes": [{"oldPath": "src/ring_theory/localization/away.lean", "newPath": "src/ring_theory/localization/away.lean", "changes": [["add", "theorem", "exists_reduced_fraction'", []], ["add", "theorem", "self_zpow_add", []], ["add", "theorem", "self_zpow_coe_nat", []], ["add", "theorem", "self_zpow_mul_neg", []], ["add", "theorem", "self_zpow_neg_coe_nat", []], ["add", "theorem", "self_zpow_neg_mul", []], ["add", "theorem", "self_zpow_of_neg", []], ["add", "theorem", "self_zpow_of_nonneg", []], ["add", "theorem", "self_zpow_of_nonpos", []], ["add", "theorem", "self_zpow_pow_sub", []], ["add", "theorem", "self_zpow_sub_cast_nat", []], ["add", "theorem", "self_zpow_zero", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "count_normalized_factors_eq'", ["unique_factorization_monoid"]], ["mod", "theorem", "count_normalized_factors_eq", ["unique_factorization_monoid"]], ["mod", "theorem", "le_multiplicity_iff_replicate_le_normalized_factors", ["unique_factorization_monoid"]], ["add", "theorem", "max_power_factor", ["unique_factorization_monoid"]], ["mod", "theorem", "multiplicity_eq_count_normalized_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1683200281, "sha": "26ae6f67", "message": "chore(ring_theory/derivation): generalize tower instance (#18937)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}]}, {"timestamp": 1683200280, "sha": "2f39bcbc", "message": "chore(ring_theory/ideal/quotient): add missing smul compatibility instances (#18934)\nThe low priority is needed to avoid a timeout in what will be `ring_theory/kaehler.lean`.\nThese instances are more general cases of the instances implied by `algebra α c.quotient` and `algebra α (R ⧸ I)`, which work for cases like `α = units R`.", "changes": [{"oldPath": "src/ring_theory/congruence.lean", "newPath": "src/ring_theory/congruence.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}]}, {"timestamp": 1683200278, "sha": "338fe44f", "message": "feat(data/is_R_or_C/basic): drop 2 fields, golf (#18931)\n* Drop fields `inv_def_ax` and `div_I_ax` in `is_R_or_C`, deduce them instead.\n* Use lemmas about `ring_hom`s to prove properties of coercion, `is_R_or_C.re` etc.\n* Drop `is_R_or_C.of_real_hom` and `is_R_or_C.coe_hom`.\n* Drop `is_R_or_C.inv_zero` and `is_R_or_C.mul_inv_cancel`.\n* Move some lemmas to more appropriate sections.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/data/is_R_or_C/basic.lean", "newPath": "src/data/is_R_or_C/basic.lean", "changes": [["mod", "theorem", "I_mul_I_of_nonzero", ["is_R_or_C"]], ["mod", "theorem", "bit0_im", ["is_R_or_C"]], ["mod", "theorem", "bit0_re", ["is_R_or_C"]], ["mod", "theorem", "conj_bit0", ["is_R_or_C"]], ["mod", "theorem", "conj_bit1", ["is_R_or_C"]], ["mod", "theorem", "ext", ["is_R_or_C"]], ["mod", "theorem", "ext_iff", ["is_R_or_C"]], ["mod", "theorem", "inv_im", ["is_R_or_C"]], ["mod", "theorem", "of_real_add", ["is_R_or_C"]], ["mod", "theorem", "of_real_bit0", ["is_R_or_C"]], ["mod", "theorem", "of_real_eq_zero", ["is_R_or_C"]], ["add", "theorem", "of_real_injective", ["is_R_or_C"]], ["mod", "theorem", "of_real_int_cast", ["is_R_or_C"]], ["mod", "theorem", "of_real_inv", ["is_R_or_C"]], ["mod", "theorem", "of_real_mul", ["is_R_or_C"]], ["mod", "theorem", "of_real_ne_zero", ["is_R_or_C"]], ["mod", "theorem", "of_real_neg", ["is_R_or_C"]], ["mod", "theorem", "of_real_one", ["is_R_or_C"]], ["mod", "theorem", "of_real_pow", ["is_R_or_C"]], ["mod", "theorem", "of_real_sub", ["is_R_or_C"]], ["mod", "theorem", "one_im", ["is_R_or_C"]], ["mod", "theorem", "one_re", ["is_R_or_C"]]]}]}, {"timestamp": 1683200277, "sha": "caf83ba4", "message": "chore(probability/kernel/basic): make the function argument of kernel.deterministic explicit (#18930)\nIf that argument is implicit, the infoview often shows only `deterministic _`, which does not allow to see which function is used. Making it explicit fixes that problem.", "changes": [{"oldPath": "src/probability/kernel/basic.lean", "newPath": "src/probability/kernel/basic.lean", "changes": [["mod", "def", "deterministic", ["probability_theory", "kernel"]]]}, {"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": []}]}, {"timestamp": 1683200276, "sha": "698c80e9", "message": "chore(probability/kernel/composition): swap the order of the arguments of prod_mk_left (#18929)\nSince `prod_mk_left γ κ` creates a `kernel (γ × α) β` from `κ : kernel α β`, it makes more sense to put the `γ` argument to the left.", "changes": [{"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": [["mod", "def", "prod_mk_left", ["probability_theory", "kernel"]]]}]}, {"timestamp": 1683193284, "sha": "07992a1d", "message": "chore(analysis/inner_product_space/basic): golf the proof of Cauchy-Schwarz (#18938)\n## API changes\n- Add `inner_product_space.to_core`.\n- Make `inner_product_space.core` extend `has_inner`.\n- Rename namespace from `inner_product_space.of_core` to `inner_product_space.core`.\n- Rename `inner_product_space.of_core.inner_norm_sq_eq_inner_self` to\n `inner_product_space.core.coe_norm_sq_eq_inner_self`.\n- Add `inner_product_space.core.norm_inner_symm`.\n- Add `inner_product_space.core.cauchy_schwarz_aux`, use it to golf\n the proof of the Cauchy-Schwarz inequality and its versions.\n- Use norm instead of `is_R_or_C.abs` here and there, the rest will\n migrate in #18919.\n- Rename `inner_product_space.of_core.abs_inner_le_norm` to\n `inner_product_space.core.norm_inner_le_norm`, use norm.\n- Add `norm_inner_eq_norm_tfae` and `inner_eq_norm_mul_iff_div`.\n- Rename `abs_inner_div_norm_mul_norm_eq_one_iff` to\n `norm_inner_div_norm_mul_norm_eq_one_iff`, use norm.\n- Rename `inner_eq_norm_mul_iff_of_norm_one` to\n `inner_eq_one_iff_of_norm_one`.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["del", "theorem", "abs_inner_div_norm_mul_norm_eq_one_iff", []], ["del", "theorem", "abs_inner_eq_norm_iff", []], ["mod", "theorem", "abs_real_inner_le_norm", []], ["add", "theorem", "inner_eq_norm_mul_iff_div", []], ["del", "theorem", "inner_eq_norm_mul_iff_of_norm_one", []], ["add", "theorem", "inner_eq_one_iff_of_norm_one", []], ["mod", "theorem", "inner_mul_inner_self_le", []], ["add", "theorem", "abs_inner_symm", ["inner_product_space", "core"]], ["add", "theorem", "cauchy_schwarz_aux", ["inner_product_space", "core"]], ["add", "theorem", "coe_norm_sq_eq_inner_self", ["inner_product_space", "core"]], ["add", "theorem", "inner_add_add_self", ["inner_product_space", "core"]], ["add", "theorem", "inner_add_left", ["inner_product_space", "core"]], ["add", "theorem", "inner_add_right", ["inner_product_space", "core"]], ["add", "theorem", "inner_conj_symm", ["inner_product_space", "core"]], ["add", "theorem", "inner_im_symm", ["inner_product_space", "core"]], ["add", "theorem", "inner_mul_conj_re_abs", ["inner_product_space", "core"]], ["add", "theorem", "inner_mul_inner_self_le", ["inner_product_space", "core"]], ["add", "theorem", "inner_neg_left", ["inner_product_space", "core"]], ["add", "theorem", "inner_neg_right", ["inner_product_space", "core"]], ["add", "theorem", "inner_re_symm", ["inner_product_space", "core"]], ["add", "theorem", "inner_self_eq_norm_mul_norm", ["inner_product_space", "core"]], ["add", "theorem", "inner_self_eq_zero", ["inner_product_space", "core"]], ["add", "theorem", "inner_self_im", ["inner_product_space", "core"]], ["add", "theorem", "inner_self_ne_zero", ["inner_product_space", "core"]], ["add", "theorem", "inner_self_nonneg", ["inner_product_space", "core"]], ["add", "theorem", "inner_self_re_to_K", ["inner_product_space", "core"]], ["add", "theorem", "inner_smul_left", ["inner_product_space", "core"]], ["add", "theorem", "inner_smul_right", ["inner_product_space", "core"]], ["add", "theorem", "inner_sub_left", ["inner_product_space", "core"]], ["add", "theorem", "inner_sub_right", ["inner_product_space", "core"]], ["add", "theorem", "inner_sub_sub_self", ["inner_product_space", "core"]], ["add", "theorem", "inner_zero_left", ["inner_product_space", "core"]], ["add", "theorem", "inner_zero_right", ["inner_product_space", "core"]], ["add", "theorem", "norm_eq_sqrt_inner", ["inner_product_space", "core"]], ["add", "theorem", "norm_inner_le_norm", ["inner_product_space", "core"]], ["add", "theorem", "norm_inner_symm", ["inner_product_space", "core"]], ["add", "def", "norm_sq", ["inner_product_space", "core"]], ["add", "theorem", "norm_sq_eq_zero", ["inner_product_space", "core"]], ["add", "theorem", "sqrt_norm_sq_eq_norm", ["inner_product_space", "core"]], ["add", "def", "to_has_inner'", ["inner_product_space", "core"]], ["add", "def", "to_has_norm", ["inner_product_space", "core"]], ["add", "def", "to_normed_add_comm_group", ["inner_product_space", "core"]], ["add", "def", "to_normed_space", ["inner_product_space", "core"]], ["mod", "structure", "core", ["inner_product_space"]], ["del", "theorem", "abs_inner_le_norm", ["inner_product_space", "of_core"]], ["del", "theorem", "abs_inner_symm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_add_add_self", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_add_left", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_add_right", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_conj_symm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_im_symm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_mul_conj_re_abs", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_mul_inner_self_le", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_neg_left", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_neg_right", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_norm_sq_eq_inner_self", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_re_symm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_eq_norm_mul_norm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_eq_zero", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_im", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_ne_zero", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_nonneg", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_re_to_K", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_smul_left", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_smul_right", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_sub_left", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_sub_right", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_sub_sub_self", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_zero_left", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_zero_right", ["inner_product_space", "of_core"]], ["del", "theorem", "norm_eq_sqrt_inner", ["inner_product_space", "of_core"]], ["del", "def", "norm_sq", ["inner_product_space", "of_core"]], ["del", "theorem", "norm_sq_eq_zero", ["inner_product_space", "of_core"]], ["del", "theorem", "sqrt_norm_sq_eq_norm", ["inner_product_space", "of_core"]], ["del", "def", "to_has_inner", ["inner_product_space", "of_core"]], ["del", "def", "to_has_norm", ["inner_product_space", "of_core"]], ["del", "def", "to_normed_add_comm_group", ["inner_product_space", "of_core"]], ["del", "def", "to_normed_space", ["inner_product_space", "of_core"]], ["add", "def", "to_core", ["inner_product_space"]], ["add", "theorem", "norm_inner_div_norm_mul_norm_eq_one_iff", []], ["add", "theorem", "norm_inner_eq_norm_iff", []], ["add", "theorem", "norm_inner_eq_norm_tfae", []]]}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/pos_def.lean", "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": []}]}, {"timestamp": 1683193283, "sha": "4e529b03", "message": "feat(field_theory/ax_grothendieck): Ax-Grothendieck for algebraic extensions of finite fields (#18479)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "eval_mem", ["mv_polynomial"]], ["add", "theorem", "eval₂_mem", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/field_theory/ax_grothendieck.lean", "changes": [["add", "theorem", "ax_grothendieck_of_locally_finite", []]]}]}, {"timestamp": 1683186733, "sha": "fe8d0ff4", "message": "chore(*): add mathlib4 synchronization comments (#18923)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.continued_fractions.basic`\n* `analysis.convex.complex`\n* `analysis.special_functions.trigonometric.chebyshev`\n* `category_theory.category.Groupoid`\n* `category_theory.functor.left_derived`\n* `category_theory.monoidal.free.basic`\n* `category_theory.monoidal.tor`\n* `category_theory.sites.left_exact`\n* `data.complex.determinant`\n* `data.complex.module`\n* `data.matrix.rank`\n* `linear_algebra.affine_space.finite_dimensional`\n* `linear_algebra.affine_space.matrix`\n* `linear_algebra.determinant`\n* `linear_algebra.free_module.determinant`\n* `measure_theory.measure.outer_measure`\n* `ring_theory.localization.inv_submonoid`\n* `topology.algebra.module.determinant`", "changes": [{"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/complex.lean", "newPath": "src/analysis/convex/complex.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "newPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "changes": []}, {"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/functor/left_derived.lean", "newPath": "src/category_theory/functor/left_derived.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/basic.lean", "newPath": "src/category_theory/monoidal/free/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/tor.lean", "newPath": "src/category_theory/monoidal/tor.lean", "changes": []}, {"oldPath": "src/category_theory/sites/left_exact.lean", "newPath": "src/category_theory/sites/left_exact.lean", "changes": []}, {"oldPath": "src/data/complex/determinant.lean", "newPath": "src/data/complex/determinant.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/matrix.lean", "newPath": "src/linear_algebra/affine_space/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/determinant.lean", "newPath": "src/linear_algebra/free_module/determinant.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/inv_submonoid.lean", "newPath": "src/ring_theory/localization/inv_submonoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/determinant.lean", "newPath": "src/topology/algebra/module/determinant.lean", "changes": []}]}, {"timestamp": 1683171409, "sha": "aa1dbeab", "message": "chore(analysis/normed_space/extend): golf, add aux lemmas (#18927)\n* Add `linear_map.extend_to_𝕜'_apply_re`,\n `linear_map.sq_norm_extend_to_𝕜'_apply`,\n `continuous_linear_map.norm_extend_to_𝕜`, and\n `continuous_linear_map.norm_extend_to_𝕜'`.\n* Rename `norm_bound` to\n `continuous_linear_map.norm_extend_to_𝕜'_bound`.\n* Golf, use `namespace`s.", "changes": [{"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": [["mod", "theorem", "extend_to_𝕜'_apply", ["continuous_linear_map"]], ["add", "theorem", "norm_extend_to_𝕜'", ["continuous_linear_map"]], ["add", "theorem", "norm_extend_to_𝕜'_bound", ["continuous_linear_map"]], ["add", "theorem", "norm_extend_to_𝕜", ["continuous_linear_map"]], ["mod", "theorem", "extend_to_𝕜'_apply", ["linear_map"]], ["add", "theorem", "extend_to_𝕜'_apply_re", ["linear_map"]], ["add", "theorem", "norm_extend_to_𝕜'_apply_sq", ["linear_map"]], ["del", "theorem", "norm_bound", []]]}, {"oldPath": "src/analysis/normed_space/hahn_banach/extension.lean", "newPath": "src/analysis/normed_space/hahn_banach/extension.lean", "changes": []}]}, {"timestamp": 1683164532, "sha": "f0c8bf92", "message": "chore(*): removed unneeded imports (#18926)\nThis is another run of https://github.com/leanprover-community/mathlib/pull/17568, scrubbing unnecessary imports.\nLike last time we only remove genuinely unneeded imports, and leave merely transitively redundant imports alone.\n(I *still* disagree with the objectors to removing transitively redundant imports", "changes": [{"oldPath": "src/algebra/category/Module/biproducts.lean", "newPath": "src/algebra/category/Module/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/order/interval.lean", "newPath": "src/algebra/order/interval.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/elliptic_curve/point.lean", "newPath": "src/algebraic_geometry/elliptic_curve/point.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/open_immersion.lean", "newPath": "src/algebraic_geometry/morphisms/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/analysis/bounded_variation.lean", "newPath": "src/analysis/bounded_variation.lean", "changes": []}, {"oldPath": "src/analysis/calculus/bump_function_findim.lean", "newPath": "src/analysis/calculus/bump_function_findim.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/topology.lean", "newPath": "src/analysis/complex/upper_half_plane/topology.lean", "changes": []}, {"oldPath": "src/analysis/constant_speed.lean", "newPath": "src/analysis/constant_speed.lean", "changes": []}, {"oldPath": "src/analysis/convex/between.lean", "newPath": "src/analysis/convex/between.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone/proper.lean", "newPath": "src/analysis/convex/cone/proper.lean", "changes": []}, {"oldPath": "src/analysis/convex/intrinsic.lean", "newPath": "src/analysis/convex/intrinsic.lean", "changes": []}, {"oldPath": "src/analysis/fourier/fourier_transform.lean", "newPath": "src/analysis/fourier/fourier_transform.lean", "changes": []}, {"oldPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "newPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/orthogonal.lean", "newPath": "src/analysis/inner_product_space/orthogonal.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/compact_operator.lean", "newPath": "src/analysis/normed_space/compact_operator.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/quaternion_exponential.lean", "newPath": "src/analysis/normed_space/quaternion_exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/japanese_bracket.lean", "newPath": "src/analysis/special_functions/japanese_bracket.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/generator.lean", "newPath": "src/category_theory/abelian/generator.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/injective_resolution.lean", "newPath": "src/category_theory/abelian/injective_resolution.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly/basic.lean", "newPath": "src/field_theory/minpoly/basic.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly/is_integrally_closed.lean", "newPath": "src/field_theory/minpoly/is_integrally_closed.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/basic.lean", "newPath": "src/geometry/euclidean/angle/oriented/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "newPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form/tensor_product.lean", "newPath": "src/linear_algebra/bilinear_form/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/complex_lebesgue.lean", "newPath": "src/measure_theory/measure/complex_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_of_basis.lean", "newPath": "src/measure_theory/measure/haar_of_basis.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/probability_measure.lean", "newPath": "src/measure_theory/measure/probability_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/diophantine_approximation.lean", "newPath": "src/number_theory/diophantine_approximation.lean", "changes": []}, {"oldPath": "src/number_theory/kummer_dedekind.lean", "newPath": "src/number_theory/kummer_dedekind.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/mul_character.lean", "newPath": "src/number_theory/legendre_symbol/mul_character.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/jacobi_theta.lean", "newPath": "src/number_theory/modular_forms/jacobi_theta.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/basic.lean", "newPath": "src/number_theory/number_field/basic.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/number_theory/well_approximable.lean", "newPath": "src/number_theory/well_approximable.lean", "changes": []}, {"oldPath": "src/number_theory/zeta_values.lean", "newPath": "src/number_theory/zeta_values.lean", "changes": []}, {"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": []}, {"oldPath": "src/probability/variance.lean", "newPath": "src/probability/variance.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "newPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/dvr.lean", "newPath": "src/ring_theory/dedekind_domain/dvr.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/finite_adele_ring.lean", "newPath": "src/ring_theory/dedekind_domain/finite_adele_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring/tfae.lean", "newPath": "src/ring_theory/discrete_valuation_ring/tfae.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/associated_prime.lean", "newPath": "src/ring_theory/ideal/associated_prime.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/norm.lean", "newPath": "src/ring_theory/ideal/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/nakayama.lean", "newPath": "src/ring_theory/nakayama.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "newPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "changes": []}, {"oldPath": "src/topology/instances/add_circle.lean", "newPath": "src/topology/instances/add_circle.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}]}, {"timestamp": 1683155280, "sha": "73f96237", "message": "chore(ring_theory/kaehler): extract from `ring_theory/derivation` (#18935)\nThis section of the file needs heavier imports than the first half; and this splits the content nicely in two.\nThe lemmas are moved without modification. One very minor docstring typo is fixed.", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["del", "def", "comp_algebra_map", ["derivation"]], ["del", "def", "lift_kaehler_differential", ["derivation"]], ["del", "theorem", "lift_kaehler_differential_D", ["derivation"]], ["del", "theorem", "lift_kaehler_differential_apply", ["derivation"]], ["del", "theorem", "lift_kaehler_differential_comp", ["derivation"]], ["del", "theorem", "lift_kaehler_differential_comp_D", ["derivation"]], ["del", "theorem", "lift_kaehler_differential_unique", ["derivation"]], ["del", "def", "tensor_product_to", ["derivation"]], ["del", "theorem", "tensor_product_to_mul", ["derivation"]], ["del", "theorem", "tensor_product_to_tmul", ["derivation"]], ["del", "def", "D", ["kaehler_differential"]], ["del", "theorem", "D_apply", ["kaehler_differential"]], ["del", "def", "D_linear_map", ["kaehler_differential"]], ["del", "theorem", "D_linear_map_apply", ["kaehler_differential"]], ["del", "theorem", "D_tensor_product_to", ["kaehler_differential"]], ["del", "def", "End_equiv", ["kaehler_differential"]], ["del", "theorem", "End_equiv_aux", ["kaehler_differential"]], ["del", "def", "End_equiv_aux_equiv", ["kaehler_differential"]], ["del", "def", "End_equiv_derivation'", ["kaehler_differential"]], ["del", "def", "derivation_quot_ker_total", ["kaehler_differential"]], ["del", "theorem", "derivation_quot_ker_total_apply", ["kaehler_differential"]], ["del", "theorem", "derivation_quot_ker_total_lift_comp_total", ["kaehler_differential"]], ["del", "def", "from_ideal", ["kaehler_differential"]], ["del", "def", "ideal", ["kaehler_differential"]], ["del", "def", "ker_total", ["kaehler_differential"]], ["del", "theorem", "ker_total_eq", ["kaehler_differential"]], ["del", "theorem", "ker_total_map", ["kaehler_differential"]], ["del", "theorem", "ker_total_mkq_single_add", ["kaehler_differential"]], ["del", "theorem", "ker_total_mkq_single_algebra_map", ["kaehler_differential"]], ["del", "theorem", "ker_total_mkq_single_algebra_map_one", ["kaehler_differential"]], ["del", "theorem", "ker_total_mkq_single_mul", ["kaehler_differential"]], ["del", "theorem", "ker_total_mkq_single_smul", ["kaehler_differential"]], ["del", "def", "linear_map_equiv_derivation", ["kaehler_differential"]], ["del", "def", "map", ["kaehler_differential"]], ["del", "theorem", "map_D", ["kaehler_differential"]], ["del", "def", "map_base_change", ["kaehler_differential"]], ["del", "theorem", "map_base_change_tmul", ["kaehler_differential"]], ["del", "theorem", "map_comp_der", ["kaehler_differential"]], ["del", "theorem", "map_surjective_of_surjective", ["kaehler_differential"]], ["del", "theorem", "one_smul_sub_smul_one_mem_ideal", ["kaehler_differential"]], ["del", "def", "quot_ker_total_equiv", ["kaehler_differential"]], ["del", "theorem", "quot_ker_total_equiv_symm_comp_D", ["kaehler_differential"]], ["del", "def", "quotient_cotangent_ideal", ["kaehler_differential"]], ["del", "def", "quotient_cotangent_ideal_ring_equiv", ["kaehler_differential"]], ["del", "theorem", "span_range_derivation", ["kaehler_differential"]], ["del", "theorem", "span_range_eq_ideal", ["kaehler_differential"]], ["del", "theorem", "submodule_span_range_eq_ideal", ["kaehler_differential"]], ["del", "theorem", "tensor_product_to_surjective", ["kaehler_differential"]], ["del", "theorem", "total_surjective", ["kaehler_differential"]], ["del", "def", "kaehler_differential", []]]}, {"oldPath": "src/ring_theory/etale.lean", "newPath": "src/ring_theory/etale.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/kaehler.lean", "changes": [["add", "def", "comp_algebra_map", ["derivation"]], ["add", "def", "lift_kaehler_differential", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_D", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_apply", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_comp", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_comp_D", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_unique", ["derivation"]], ["add", "def", "tensor_product_to", ["derivation"]], ["add", "theorem", "tensor_product_to_mul", ["derivation"]], ["add", "theorem", "tensor_product_to_tmul", ["derivation"]], ["add", "def", "D", ["kaehler_differential"]], ["add", "theorem", "D_apply", ["kaehler_differential"]], ["add", "def", "D_linear_map", ["kaehler_differential"]], ["add", "theorem", "D_linear_map_apply", ["kaehler_differential"]], ["add", "theorem", "D_tensor_product_to", ["kaehler_differential"]], ["add", "def", "End_equiv", ["kaehler_differential"]], ["add", "theorem", "End_equiv_aux", ["kaehler_differential"]], ["add", "def", "End_equiv_aux_equiv", ["kaehler_differential"]], ["add", "def", "End_equiv_derivation'", ["kaehler_differential"]], ["add", "def", "derivation_quot_ker_total", ["kaehler_differential"]], ["add", "theorem", "derivation_quot_ker_total_apply", ["kaehler_differential"]], ["add", "theorem", "derivation_quot_ker_total_lift_comp_total", ["kaehler_differential"]], ["add", "def", "from_ideal", ["kaehler_differential"]], ["add", "def", "ideal", ["kaehler_differential"]], ["add", "def", "ker_total", ["kaehler_differential"]], ["add", "theorem", "ker_total_eq", ["kaehler_differential"]], ["add", "theorem", "ker_total_map", ["kaehler_differential"]], ["add", "theorem", "ker_total_mkq_single_add", ["kaehler_differential"]], ["add", "theorem", "ker_total_mkq_single_algebra_map", ["kaehler_differential"]], ["add", "theorem", "ker_total_mkq_single_algebra_map_one", ["kaehler_differential"]], ["add", "theorem", "ker_total_mkq_single_mul", ["kaehler_differential"]], ["add", "theorem", "ker_total_mkq_single_smul", ["kaehler_differential"]], ["add", "def", "linear_map_equiv_derivation", ["kaehler_differential"]], ["add", "def", "map", ["kaehler_differential"]], ["add", "theorem", "map_D", ["kaehler_differential"]], ["add", "def", "map_base_change", ["kaehler_differential"]], ["add", "theorem", "map_base_change_tmul", ["kaehler_differential"]], ["add", "theorem", "map_comp_der", ["kaehler_differential"]], ["add", "theorem", "map_surjective_of_surjective", ["kaehler_differential"]], ["add", "theorem", "one_smul_sub_smul_one_mem_ideal", ["kaehler_differential"]], ["add", "def", "quot_ker_total_equiv", ["kaehler_differential"]], ["add", "theorem", "quot_ker_total_equiv_symm_comp_D", ["kaehler_differential"]], ["add", "def", "quotient_cotangent_ideal", ["kaehler_differential"]], ["add", "def", "quotient_cotangent_ideal_ring_equiv", ["kaehler_differential"]], ["add", "theorem", "span_range_derivation", ["kaehler_differential"]], ["add", "theorem", "span_range_eq_ideal", ["kaehler_differential"]], ["add", "theorem", "submodule_span_range_eq_ideal", ["kaehler_differential"]], ["add", "theorem", "tensor_product_to_surjective", ["kaehler_differential"]], ["add", "theorem", "total_surjective", ["kaehler_differential"]], ["add", "def", "kaehler_differential", []]]}]}, {"timestamp": 1683138276, "sha": "92c69b77", "message": "chore(analysis/inner_product_space/basic): golf, add/merge lemmas (#18928)\n- Merge `inner_product_space.of_core.inner_self_nonneg_im` and `inner_product_space.of_core.inner_self_im_zero` into `inner_product_space.of_core.inner_self_im`.\n- Rename `inner_product_space.of_core.inner_abs_conj_symm` to `inner_product_space.of_core.abs_inner_symm`.\n- Rename `inner_abs_conj_symm` to `abs_inner_symm`.\n- Add `inner_product_space.of_core.norm_sq_eq_zero`.\n- Merge `inner_self_nonneg_im` and `inner_self_im_zero` into `inner_self_im`.\n- Reorder, golf.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "abs_inner_symm", []], ["del", "theorem", "inner_abs_conj_symm", []], ["add", "theorem", "abs_inner_symm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_abs_conj_symm", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_im", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_im_zero", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_nonneg_im", ["inner_product_space", "of_core"]], ["add", "theorem", "norm_sq_eq_zero", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_im", []], ["del", "theorem", "inner_self_im_zero", []], ["del", "theorem", "inner_self_nonneg_im", []]]}]}, {"timestamp": 1683138274, "sha": "726d2fe4", "message": "feat(measure_theory/constructions/prod): marginal measures (#18915)\nFor `ρ : measure (α × β)`, define `ρ.fst : measure α := ρ.map prod.fst`, and define `ρ.snd` similarly.", "changes": [{"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["add", "def", "fst", ["measure_theory", "measure"]], ["add", "theorem", "fst_apply", ["measure_theory", "measure"]], ["add", "theorem", "fst_univ", ["measure_theory", "measure"]], ["add", "def", "snd", ["measure_theory", "measure"]], ["add", "theorem", "snd_apply", ["measure_theory", "measure"]], ["add", "theorem", "snd_univ", ["measure_theory", "measure"]]]}]}, {"timestamp": 1683131681, "sha": "c163ec99", "message": "chore(ring_theory/discrete_valuation_ring): create folder ring_theory/discrete_valuation_ring (#18867)\nMoved the file `ring_theory/discrete_valuation_ring.lean` inside the folder and renamed it as `basic.lean`; also, added the file `valuation.tfae` giving equivalent conditions for being a dvr to the folder.", "changes": [{"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/dvr.lean", "newPath": "src/ring_theory/dedekind_domain/dvr.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/tfae.lean", "newPath": "src/ring_theory/discrete_valuation_ring/tfae.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_ring.lean", "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "newPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "changes": []}]}, {"timestamp": 1683119089, "sha": "ef997baa", "message": "feat(representation_theory/group_cohomology/basic): add standard definition of group cohomology (#18341)\nWe define the complex of inhomogeneous cochains, define group cohomology to be its cohomology, and prove this is isomorphic to the appropriate Ext groups.", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "theorem", "inv_partial_prod_mul_eq_contract_nth", ["fin"]]]}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "def", "contract_nth", ["fin"]], ["add", "theorem", "contract_nth_apply_of_eq", ["fin"]], ["add", "theorem", "contract_nth_apply_of_gt", ["fin"]], ["add", "theorem", "contract_nth_apply_of_lt", ["fin"]], ["add", "theorem", "contract_nth_apply_of_ne", ["fin"]]]}, {"oldPath": null, "newPath": "src/representation_theory/group_cohomology/basic.lean", "changes": [["add", "def", "inhomogeneous_cochains_iso", ["group_cohomology"]], ["add", "def", "linear_yoneda_obj_resolution", ["group_cohomology"]], ["add", "theorem", "linear_yoneda_obj_resolution_d_apply", ["group_cohomology"]], ["add", "def", "group_cohomology", []], ["add", "def", "group_cohomology_iso_Ext", []], ["add", "def", "d", ["inhomogeneous_cochains"]], ["add", "theorem", "d_eq", ["inhomogeneous_cochains"]]]}, {"oldPath": "src/representation_theory/group_cohomology_resolution.lean", "newPath": "src/representation_theory/group_cohomology/resolution.lean", "changes": [["mod", "theorem", "diagonal_hom_equiv_apply", ["Rep"]], ["mod", "theorem", "diagonal_hom_equiv_symm_apply", ["Rep"]], ["add", "theorem", "diagonal_hom_equiv_symm_partial_prod_succ", ["Rep"]]]}]}, {"timestamp": 1683095278, "sha": "4d06b17a", "message": "chore(data/set/intervals/monotone): fix names (#18924)\nSome lemmas used `Iic` instead of `Ici` in the names, probably because of a copy+paste error.", "changes": [{"oldPath": "src/data/set/intervals/monotone.lean", "newPath": "src/data/set/intervals/monotone.lean", "changes": [["add", "theorem", "strict_anti_on_Ici_of_lt_pred", []], ["del", "theorem", "strict_anti_on_Iic_of_lt_pred", []], ["add", "theorem", "Ici_le_id", ["strict_mono_on"]], ["del", "theorem", "Iic_le_id", ["strict_mono_on"]], ["add", "theorem", "strict_mono_on_Ici_of_pred_lt", []], ["del", "theorem", "strict_mono_on_Iic_of_pred_lt", []]]}]}, {"timestamp": 1683095277, "sha": "f9dd3204", "message": "chore(analysis/normed_space/basic): rename `abs_norm_eq_norm` to `abs_norm` (#18921)", "changes": [{"oldPath": "src/analysis/complex/open_mapping.lean", "newPath": "src/analysis/complex/open_mapping.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "abs_norm", []], ["del", "theorem", "abs_norm_eq_norm", []]]}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/continuous_functional_calculus.lean", "newPath": "src/analysis/normed_space/star/continuous_functional_calculus.lean", "changes": []}]}, {"timestamp": 1683083691, "sha": "caa58cbf", "message": "chore(data/{complex,is_R_or_C}/basic): fix name of `eq_conj_iff_*` lemmas (#18922)\nThese were all about `conj x = x` not `x = conj x`.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane/metric.lean", "newPath": "src/analysis/complex/upper_half_plane/metric.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/positive.lean", "newPath": "src/analysis/inner_product_space/positive.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "conj_eq_iff_im", ["complex"]], ["add", "theorem", "conj_eq_iff_re", ["complex"]], ["add", "theorem", "conj_eq_iff_real", ["complex"]], ["del", "theorem", "eq_conj_iff_im", ["complex"]], ["del", "theorem", "eq_conj_iff_re", ["complex"]], ["del", "theorem", "eq_conj_iff_real", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/is_R_or_C/basic.lean", "newPath": "src/data/is_R_or_C/basic.lean", "changes": [["add", "theorem", "conj_eq_iff_re", ["is_R_or_C"]], ["add", "theorem", "conj_eq_iff_real", ["is_R_or_C"]], ["del", "theorem", "eq_conj_iff_re", ["is_R_or_C"]], ["del", "theorem", "eq_conj_iff_real", ["is_R_or_C"]]]}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": []}, {"oldPath": "src/number_theory/number_field/embeddings.lean", "newPath": "src/number_theory/number_field/embeddings.lean", "changes": []}]}, {"timestamp": 1683083690, "sha": "15e02bcd", "message": "feat(probability/kernel/composition): add a notation for the product of kernels (#18918)\nDefine `κ ×ₖ η = probability_theory.kernel.prod κ η`.", "changes": [{"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": []}]}, {"timestamp": 1683083689, "sha": "61d8b824", "message": "chore(ring_theory/polynomial/quotient): remove spurious restrict_scalars (#18916)\nVerifying that the `restrict_scalars` here is spurious. This proof is timing out badly in mathlib4.\nIf someone would like to merge this, please do so, but please then handle updating the SHA in mathlib4 as well. :-)", "changes": [{"oldPath": "src/ring_theory/polynomial/quotient.lean", "newPath": "src/ring_theory/polynomial/quotient.lean", "changes": []}]}, {"timestamp": 1683083688, "sha": "645b6de4", "message": "refactor(algebra/order/to_interval_mod): Negate the definition of `mem_Ioo_mod` (#18912)\nThis replaces `mem_Ioo_mod hp a b` with `¬add_comm_group.modeq p a b`.\nThis is more consistent with `int.modeq`, `nat.modeq`, and `smodeq`.\nThere's still some duplication here, but at least these four ideas are now conceptually aligned.\nThis remove any lemmas of the form `¬modeq p a b ↔ _ ≠ _` as these are now trivial consequences of the `modeq p a b ↔ _ = _` versions,", "changes": [{"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["add", "def", "modeq", ["add_comm_group"]], ["add", "theorem", "modeq_iff_eq_add_zsmul", ["add_comm_group"]], ["add", "theorem", "modeq_iff_eq_mod_zmultiples", ["add_comm_group"]], ["add", "theorem", "modeq_iff_to_Ico_div_eq_to_Ioc_div_add_one", ["add_comm_group"]], ["add", "theorem", "modeq_iff_to_Ico_mod_add_period_eq_to_Ioc_mod", ["add_comm_group"]], ["add", "theorem", "modeq_iff_to_Ico_mod_eq_left", ["add_comm_group"]], ["add", "theorem", "modeq_iff_to_Ico_mod_ne_to_Ioc_mod", ["add_comm_group"]], ["add", "theorem", "modeq_iff_to_Ioc_mod_eq_right", ["add_comm_group"]], ["add", "theorem", "not_modeq_iff_ne_add_zsmul", ["add_comm_group"]], ["add", "theorem", "not_modeq_iff_ne_mod_zmultiples", ["add_comm_group"]], ["add", "theorem", "not_modeq_iff_to_Ico_div_eq_to_Ioc_div", ["add_comm_group"]], ["add", "theorem", "not_modeq_iff_to_Ico_mod_eq_to_Ioc_mod", ["add_comm_group"]], ["add", "theorem", "tfae_modeq", ["add_comm_group"]], ["del", "def", "mem_Ioo_mod", []], ["del", "theorem", "mem_Ioo_mod_iff_ne_add_zsmul", []], ["del", "theorem", "mem_Ioo_mod_iff_ne_mod_zmultiples", []], ["del", "theorem", "mem_Ioo_mod_iff_to_Ico_div_eq_to_Ioc_div", []], ["del", "theorem", "mem_Ioo_mod_iff_to_Ico_div_ne_to_Ioc_div_add_one", []], ["del", "theorem", "mem_Ioo_mod_iff_to_Ico_mod_add_period_ne_to_Ioc_mod", []], ["del", "theorem", "mem_Ioo_mod_iff_to_Ico_mod_eq_to_Ioc_mod", []], ["del", "theorem", "mem_Ioo_mod_iff_to_Ico_mod_ne_left", []], ["del", "theorem", "mem_Ioo_mod_iff_to_Ioc_mod_ne_right", []], ["del", "theorem", "not_mem_Ioo_mod_iff_eq_add_zsmul", []], ["del", "theorem", "not_mem_Ioo_mod_iff_eq_mod_zmultiples", []], ["del", "theorem", "not_mem_Ioo_mod_iff_to_Ico_div_eq_to_Ioc_div_add_one", []], ["del", "theorem", "not_mem_Ioo_mod_iff_to_Ico_mod_add_period_eq_to_Ioc_mod", []], ["del", "theorem", "not_mem_Ioo_mod_iff_to_Ico_mod_eq_left", []], ["del", "theorem", "not_mem_Ioo_mod_iff_to_Ioc_eq_right", []], ["del", "theorem", "tfae_mem_Ioo_mod", []]]}, {"oldPath": "src/topology/instances/add_circle.lean", "newPath": "src/topology/instances/add_circle.lean", "changes": []}]}, {"timestamp": 1683083687, "sha": "f69db8ce", "message": "feat(data/mv_polynomial/basic): add and generalize some lemmas from finsupp and monoid_algebra (#18855)\nMost of these changes generalize from `distrib_mul_action` to `smul_zero_class`.\nThe new lemmas are all just proved using corresponding lemmas on the underlying types.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "support_smul", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "coeff_smul", ["mv_polynomial"]], ["mod", "theorem", "constant_coeff_smul", ["mv_polynomial"]], ["add", "theorem", "smul_monomial", ["mv_polynomial"]], ["add", "theorem", "support_eq_empty", ["mv_polynomial"]], ["mod", "theorem", "support_smul", ["mv_polynomial"]], ["add", "theorem", "support_smul_eq", ["mv_polynomial"]]]}]}, {"timestamp": 1683083686, "sha": "ec452806", "message": "feat(analysis/special_functions): file for evaluations of specific improper integrals (#18821)\nWe have the file `analysis/special_functions/integrals.lean` which has numerous evaluations of interval integrals. This adds a counterpart file for integrals over infinite intervals.\n(Added as preparation for a forthcoming PR about Mellin transforms -- I wanted somewhere to put the fact that `x ^ (-a)` is integrable on `[1, infinity)`).", "changes": [{"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": [["del", "theorem", "integral_exp_neg_Ioi", []]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/improper_integrals.lean", "changes": [["add", "theorem", "integrable_on_Ioi_cpow_of_lt", []], ["add", "theorem", "integrable_on_Ioi_rpow_of_lt", []], ["add", "theorem", "integrable_on_exp_Iic", []], ["add", "theorem", "integral_Ioi_cpow_of_lt", []], ["add", "theorem", "integral_Ioi_rpow_of_lt", []], ["add", "theorem", "integral_exp_Iic", []], ["add", "theorem", "integral_exp_Iic_zero", []], ["add", "theorem", "integral_exp_neg_Ioi", []], ["add", "theorem", "integral_exp_neg_Ioi_zero", []]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["add", "theorem", "integral_comp_neg_Iic", []], ["add", "theorem", "integral_comp_neg_Ioi", []]]}]}, {"timestamp": 1683061816, "sha": "7413128c", "message": "feat(data/list/cycle): well-founded or transitive irreflexive relations don't have cycles (#18512)\nSince `simp` can prove statements such as `cycle r [a, b, c] ↔ r a b ∧ r b c ∧ r c a`, this gives us a nice generalization of asymmetry.", "changes": [{"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "eq_nil_of_irrefl", ["cycle", "chain"]], ["add", "theorem", "eq_nil_of_well_founded", ["cycle", "chain"]], ["add", "theorem", "imp", ["cycle", "chain"]], ["add", "theorem", "chain_mono", ["cycle"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}]}, {"timestamp": 1683044117, "sha": "36b8aa61", "message": "feat(algebra/algebra/basic): add shortcut instance (#18907)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}]}, {"timestamp": 1683035288, "sha": "ef553359", "message": "chore(*): add mathlib4 synchronization comments (#18897)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.Z_Module_equivalence`\n* `algebraic_topology.extra_degeneracy`\n* `category_theory.abelian.exact`\n* `category_theory.abelian.transfer`\n* `category_theory.monad.coequalizer`\n* `category_theory.preadditive.projective_resolution`\n* `data.mv_polynomial.polynomial`\n* `data.ordmap.ordnode`\n* `field_theory.tower`\n* `linear_algebra.projective_space.basic`\n* `linear_algebra.projective_space.independence`\n* `linear_algebra.symplectic_group`\n* `topology.category.Profinite.basic`\n* `topology.category.Profinite.projective`", "changes": [{"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebraic_topology/extra_degeneracy.lean", "newPath": "src/algebraic_topology/extra_degeneracy.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/transfer.lean", "newPath": "src/category_theory/abelian/transfer.lean", "changes": []}, {"oldPath": "src/category_theory/monad/coequalizer.lean", "newPath": "src/category_theory/monad/coequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective_resolution.lean", "newPath": "src/category_theory/preadditive/projective_resolution.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/polynomial.lean", "newPath": "src/data/mv_polynomial/polynomial.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordnode.lean", "newPath": "src/data/ordmap/ordnode.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/linear_algebra/projective_space/basic.lean", "newPath": "src/linear_algebra/projective_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/projective_space/independence.lean", "newPath": "src/linear_algebra/projective_space/independence.lean", "changes": []}, {"oldPath": "src/linear_algebra/symplectic_group.lean", "newPath": "src/linear_algebra/symplectic_group.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/basic.lean", "newPath": "src/topology/category/Profinite/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/projective.lean", "newPath": "src/topology/category/Profinite/projective.lean", "changes": []}]}, {"timestamp": 1683027759, "sha": "11d5ff21", "message": "feat(measure_theory/constructions/polish): a Polish Borel space is measurably equivalent to a subset of the reals (#18881)", "changes": [{"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": [["add", "theorem", "exists_measurable_embedding_real", ["measure_theory"]], ["add", "theorem", "exists_nat_measurable_equiv_range_coe_fin_of_finite", ["measure_theory"]], ["add", "theorem", "exists_subset_real_measurable_equiv", ["measure_theory"]], ["add", "theorem", "measurable_equiv_range_coe_nat_of_infinite_of_countable", ["measure_theory"]]]}]}, {"timestamp": 1682996189, "sha": "2c1d8ca2", "message": "chore(analysis/special_functions): Reduce imports in special_functions (#18909)\nRemove a bunch of imports in `analysis/special_functions` and `analysis/calculus` which are unnecessary by transitivity, and a few more which are genuinely nontrivial (i.e. the import isn't in the transitive closure of the other imports) but nonetheless aren't needed for the file to compile.", "changes": [{"oldPath": "src/analysis/calculus/bump_function_findim.lean", "newPath": "src/analysis/calculus/bump_function_findim.lean", "changes": []}, {"oldPath": "src/analysis/calculus/bump_function_inner.lean", "newPath": "src/analysis/calculus/bump_function_inner.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": []}, {"oldPath": "src/analysis/calculus/dslope.lean", "newPath": "src/analysis/calculus/dslope.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_analytic.lean", "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/monotone.lean", "newPath": "src/analysis/calculus/monotone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/calculus/taylor.lean", "newPath": "src/analysis/calculus/taylor.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gaussian.lean", "newPath": "src/analysis/special_functions/gaussian.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/japanese_bracket.lean", "newPath": "src/analysis/special_functions/japanese_bracket.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/base.lean", "newPath": "src/analysis/special_functions/log/base.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/monotone.lean", "newPath": "src/analysis/special_functions/log/monotone.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/stirling.lean", "newPath": "src/analysis/special_functions/stirling.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/bounds.lean", "newPath": "src/analysis/special_functions/trigonometric/bounds.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "newPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/euler_sine_prod.lean", "newPath": "src/analysis/special_functions/trigonometric/euler_sine_prod.lean", "changes": []}, {"oldPath": "src/probability/martingale/upcrossing.lean", "newPath": "src/probability/martingale/upcrossing.lean", "changes": []}]}, {"timestamp": 1682992127, "sha": "33085c97", "message": "chore(category_theory/monoidal/Mod): rename to Mod_ to avoid name clash in mathlib4 (#18911)\nThis matches the existing `Mon_`.", "changes": [{"oldPath": "src/category_theory/monoidal/Mod.lean", "newPath": "src/category_theory/monoidal/Mod_.lean", "changes": [["del", "theorem", "assoc_flip", ["Mod"]], ["del", "def", "comap", ["Mod"]], ["del", "def", "comp", ["Mod"]], ["del", "theorem", "comp_hom'", ["Mod"]], ["del", "def", "forget", ["Mod"]], ["del", "structure", "hom", ["Mod"]], ["del", "def", "id", ["Mod"]], ["del", "theorem", "id_hom'", ["Mod"]], ["del", "def", "regular", ["Mod"]], ["del", "structure", "Mod", []], ["add", "theorem", "assoc_flip", ["Mod_"]], ["add", "def", "comap", ["Mod_"]], ["add", "def", "comp", ["Mod_"]], ["add", "theorem", "comp_hom'", ["Mod_"]], ["add", "def", "forget", ["Mod_"]], ["add", "structure", "hom", ["Mod_"]], ["add", "def", "id", ["Mod_"]], ["add", "theorem", "id_hom'", ["Mod_"]], ["add", "def", "regular", ["Mod_"]], ["add", "structure", "Mod_", []]]}]}, {"timestamp": 1682992126, "sha": "362c2263", "message": "refactor(category_theory): removing additive_category (#18903)\nThis PR removes the class `additive_category` which was essentially unused, and was creating instance issues during the port.", "changes": [{"oldPath": "src/category_theory/additive/basic.lean", "newPath": null, "changes": []}, {"oldPath": "src/category_theory/idempotents/biproducts.lean", "newPath": "src/category_theory/idempotents/biproducts.lean", "changes": []}]}, {"timestamp": 1682992125, "sha": "ef74e2bd", "message": "refactor(number_theory/modular_forms/slash_actions): use the same notation everywhere (#18886)\nPreviously we had both `f ∣[k] A` and `f ∣[k, A]` notation, this keeps only the former (on the assumption it more closely resembles the LaTeX). `f ∣[k;γ] A` is then added as notation for the more general `γ`-invariant case that the typeclass is designed around, even though that is never used.\nThis makes `slash_action.map` the canonical spelling of slash actions, as opposed to a mix of this spelling and `modular_form.slash`. \nSince `modular_form.slash` is no longer canonical, all the lemmas about it are made private as they are immediately subsumed by the typeclass lemmas.\nRather than defining the same local notation in each file, this now just opens the locale.\nThis also ungeneralizes `has_zero` + `has_add` to `add_monoid`, since the extra generality is not used, and we do not have it for the (suspiciously!) analogous `distrib_mul_action`.", "changes": [{"oldPath": "src/number_theory/modular_forms/basic.lean", "newPath": "src/number_theory/modular_forms/basic.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/slash_actions.lean", "newPath": "src/number_theory/modular_forms/slash_actions.lean", "changes": [["mod", "theorem", "SL_slash", ["modular_form"]], ["mod", "theorem", "is_invariant_one", ["modular_form"]], ["del", "theorem", "neg_slash", ["modular_form"]], ["del", "theorem", "slash_add", ["modular_form"]], ["add", "theorem", "slash_def", ["modular_form"]], ["del", "theorem", "slash_one", ["modular_form"]], ["del", "theorem", "slash_right_action", ["modular_form"]], ["del", "theorem", "smul_slash", ["modular_form"]], ["del", "theorem", "zero_slash", ["modular_form"]], ["mod", "def", "monoid_hom_slash_action", []], ["add", "theorem", "neg_slash", ["slash_action"]], ["add", "theorem", "smul_slash_of_tower", ["slash_action"]]]}, {"oldPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "newPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "changes": []}]}, {"timestamp": 1682992124, "sha": "fecd3520", "message": "feat(ring_theory/norm): add norm_norm (#18860)\nProve the transitivity of the algebra.norm\n```lean\nlemma algebra.norm_norm [is_scalar_tower K L F] [finite_dimensional K F] [is_separable K F] (x : F) :\n norm K (norm L x) = norm K x \n```", "changes": [{"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["add", "theorem", "norm_eq_one_of_not_module_finite", ["algebra"]], ["add", "theorem", "norm_norm", ["algebra"]]]}]}, {"timestamp": 1682992123, "sha": "620ba06c", "message": "feat(analysis/convex/cone/proper): define closure of a convex cone (#16335)\nPart of #16266 \nWe define the closure of a convex cone. This definition is only used for defining maps between proper cones and hence is in this file and not cone/basic.lean\nNext todo: define proper cones and add some proper cone API", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/analysis/convex/cone/proper.lean", "changes": [["add", "theorem", "coe_closure", ["convex_cone"]]]}]}, {"timestamp": 1682982772, "sha": "b2d7b50d", "message": "chore(algebra/order/to_interval_mod): Reorder arguments (#18908)\nThe current argument order to `to_Ixx_mod` is a bit poor: In `to_Ico a hb x`, `a` and `x` play a similar role while `b` is completely separate. This PR changes this to `to_Ico hp a b`, where the translation is as follows:\n* `mem_Ioo_mod a p b` → `mem_Ioo_mod p a b` (this is more consistent with `int.modeq p a b`)\n* `to_Ico_div a hp b` → `to_Ico_div hp a b`\n* `to_Ioc_div a hp b` → `to_Ioc_div hp a b`\n* `to_Ico_mod a hp b` → `to_Ico_mod hp a b`\n* `to_Ioc_mod a hp b` → `to_Ioc_mod hp a b`\nWhile it might be tempting to order`to_Ico_div hp a b` as `to_Ico_div b a hp` to match the order of the morally equivalent `(b - a) / p + a`, we opt for the simpler convention of being consistent with `mem_Ioo_mod`, as in downstream files we also find it convenient to have `b` as the last argument.\nGenerally speaking, the variables have been renamed to\n* `a` → `a` (the left end)\n* `b` → `p` (the period)\n* `x` → `b` (the interval length)\n* `y` → `c` (additional argument similar to the left end and interval length)\n* `z` → `n` (the euclidean dividend)\nProofs are golfed slightly. The only lemma statements that changed are `to_Ico_div_eq_of_sub_zsmul_mem_Ico`/`to_Ioc_div_eq_of_sub_zsmul_mem_Ioc` that now state `to_Ico_div hp a b = n` rather than `n = to_Ico_div hp a b` (they were always used in this new direction).", "changes": [{"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["mod", "theorem", "Union_Icc_add_zsmul", []], ["mod", "theorem", "Union_Icc_zsmul", []], ["mod", "theorem", "Union_Ico_add_zsmul", []], ["mod", "theorem", "Union_Ico_zsmul", []], ["mod", "theorem", "Union_Ioc_add_zsmul", []], ["mod", "theorem", "Union_Ioc_zsmul", []], ["del", "theorem", "eq_to_Ico_div_of_sub_zsmul_mem_Ico", []], ["del", "theorem", "eq_to_Ioc_div_of_sub_zsmul_mem_Ioc", []], ["mod", "theorem", "left_le_to_Ico_mod", []], ["mod", "theorem", "left_lt_to_Ioc_mod", []], ["mod", "def", "mem_Ioo_mod", []], ["mod", "theorem", "mem_Ioo_mod_iff_ne_add_zsmul", []], ["mod", "theorem", "mem_Ioo_mod_iff_to_Ioc_mod_ne_right", []], ["mod", "theorem", "not_mem_Ioo_mod_iff_eq_add_zsmul", []], ["mod", "theorem", "not_mem_Ioo_mod_iff_to_Ico_mod_eq_left", []], ["mod", "theorem", "not_mem_Ioo_mod_iff_to_Ioc_eq_right", []], ["mod", "def", "equiv_Ico_mod", ["quotient_add_group"]], ["mod", "theorem", "equiv_Ico_mod_coe", ["quotient_add_group"]], ["mod", "def", "equiv_Ioc_mod", ["quotient_add_group"]], ["mod", "theorem", "equiv_Ioc_mod_coe", ["quotient_add_group"]], ["mod", "theorem", "self_sub_to_Ico_div_zsmul", []], ["mod", "theorem", "self_sub_to_Ico_mod", []], ["mod", "theorem", "self_sub_to_Ioc_div_zsmul", []], ["mod", "theorem", "self_sub_to_Ioc_mod", []], ["mod", "theorem", "sub_to_Ico_div_zsmul_mem_Ico", []], ["mod", "theorem", "sub_to_Ioc_div_zsmul_mem_Ioc", []], ["mod", "def", "to_Ico_div", []], ["mod", "theorem", "to_Ico_div_add_left", []], ["mod", "theorem", "to_Ico_div_add_right'", []], ["mod", "theorem", "to_Ico_div_add_right", []], ["mod", "theorem", "to_Ico_div_add_zsmul", []], ["mod", "theorem", "to_Ico_div_apply_left", []], ["mod", "theorem", "to_Ico_div_apply_right", []], ["mod", "theorem", "to_Ico_div_eq_floor", []], ["add", "theorem", "to_Ico_div_eq_of_sub_zsmul_mem_Ico", []], ["mod", "theorem", "to_Ico_div_neg", []], ["mod", "theorem", "to_Ico_div_sub'", []], ["mod", "theorem", "to_Ico_div_sub", []], ["mod", "theorem", "to_Ico_div_sub_zsmul", []], ["mod", "theorem", "to_Ico_div_zero_one", []], ["mod", "theorem", "to_Ico_div_zsmul_add", []], ["mod", "theorem", "to_Ico_div_zsmul_sub_self", []], ["mod", "theorem", "to_Ico_div_zsmul_sub_to_Ico_mod", []], ["mod", "def", "to_Ico_mod", []], ["mod", "theorem", "to_Ico_mod_add_left", []], ["mod", "theorem", "to_Ico_mod_add_right'", []], ["mod", "theorem", "to_Ico_mod_add_right", []], ["mod", "theorem", "to_Ico_mod_add_to_Ico_div_zsmul", []], ["mod", "theorem", "to_Ico_mod_add_zsmul", []], ["mod", "theorem", "to_Ico_mod_apply_left", []], ["mod", "theorem", "to_Ico_mod_apply_right", []], ["mod", "theorem", "to_Ico_mod_eq_add_fract_mul", []], ["mod", "theorem", "to_Ico_mod_eq_fract_mul", []], ["mod", "theorem", "to_Ico_mod_eq_iff", []], ["mod", "theorem", "to_Ico_mod_eq_self", []], ["mod", "theorem", "to_Ico_mod_eq_to_Ico_mod", []], ["mod", "theorem", "to_Ico_mod_le_to_Ioc_mod", []], ["mod", "theorem", "to_Ico_mod_lt_right", []], ["mod", "theorem", "to_Ico_mod_mem_Ico'", []], ["mod", "theorem", "to_Ico_mod_mem_Ico", []], ["mod", "theorem", "to_Ico_mod_neg", []], ["mod", "theorem", "to_Ico_mod_periodic", []], ["mod", "theorem", "to_Ico_mod_sub'", []], ["mod", "theorem", "to_Ico_mod_sub", []], ["mod", "theorem", "to_Ico_mod_sub_self", []], ["mod", "theorem", "to_Ico_mod_sub_zsmul", []], ["mod", "theorem", "to_Ico_mod_to_Ico_mod", []], ["mod", "theorem", "to_Ico_mod_to_Ioc_mod", []], ["mod", "theorem", "to_Ico_mod_zero_one", []], ["mod", "theorem", "to_Ico_mod_zsmul_add", []], ["mod", "def", "to_Ioc_div", []], ["mod", "theorem", "to_Ioc_div_add_left", []], ["mod", "theorem", "to_Ioc_div_add_right'", []], ["mod", "theorem", "to_Ioc_div_add_right", []], ["mod", "theorem", "to_Ioc_div_add_zsmul", []], ["mod", "theorem", "to_Ioc_div_apply_left", []], ["mod", "theorem", "to_Ioc_div_apply_right", []], ["mod", "theorem", "to_Ioc_div_eq_neg_floor", []], ["add", "theorem", "to_Ioc_div_eq_of_sub_zsmul_mem_Ioc", []], ["mod", "theorem", "to_Ioc_div_neg", []], ["mod", "theorem", "to_Ioc_div_sub'", []], ["mod", "theorem", "to_Ioc_div_sub", []], ["mod", "theorem", "to_Ioc_div_sub_zsmul", []], ["mod", "theorem", "to_Ioc_div_wcovby_to_Ico_div", []], ["mod", "theorem", "to_Ioc_div_zsmul_add", []], ["mod", "theorem", "to_Ioc_div_zsmul_sub_self", []], ["mod", "theorem", "to_Ioc_div_zsmul_sub_to_Ioc_mod", []], ["mod", "def", "to_Ioc_mod", []], ["mod", "theorem", "to_Ioc_mod_add_left", []], ["mod", "theorem", "to_Ioc_mod_add_right'", []], ["mod", "theorem", "to_Ioc_mod_add_right", []], ["mod", "theorem", "to_Ioc_mod_add_to_Ioc_div_zsmul", []], ["mod", "theorem", "to_Ioc_mod_add_zsmul", []], ["mod", "theorem", "to_Ioc_mod_apply_left", []], ["mod", "theorem", "to_Ioc_mod_apply_right", []], ["mod", "theorem", "to_Ioc_mod_eq_iff", []], ["mod", "theorem", "to_Ioc_mod_eq_self", []], ["mod", "theorem", "to_Ioc_mod_eq_sub_fract_mul", []], ["mod", "theorem", "to_Ioc_mod_eq_to_Ioc_mod", []], ["mod", "theorem", "to_Ioc_mod_le_right", []], ["mod", "theorem", "to_Ioc_mod_le_to_Ico_mod_add", []], ["mod", "theorem", "to_Ioc_mod_mem_Ioc", []], ["mod", "theorem", "to_Ioc_mod_neg", []], ["mod", "theorem", "to_Ioc_mod_periodic", []], ["mod", "theorem", "to_Ioc_mod_sub'", []], ["mod", "theorem", "to_Ioc_mod_sub", []], ["mod", "theorem", "to_Ioc_mod_sub_self", []], ["mod", "theorem", "to_Ioc_mod_sub_zsmul", []], ["mod", "theorem", "to_Ioc_mod_to_Ico_mod", []], ["mod", "theorem", "to_Ioc_mod_to_Ioc_mod", []], ["mod", "theorem", "to_Ioc_mod_zsmul_add", []]]}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["mod", "theorem", "coe_to_Ico_mod", ["real", "angle"]], ["mod", "theorem", "coe_to_Ioc_mod", ["real", "angle"]], ["mod", "theorem", "to_Ioc_mod_to_real", ["real", "angle"]], ["mod", "theorem", "to_real_coe", ["real", "angle"]]]}, {"oldPath": "src/topology/instances/add_circle.lean", "newPath": "src/topology/instances/add_circle.lean", "changes": [["mod", "def", "equiv_Ico", ["add_circle"]], ["mod", "def", "equiv_Ioc", ["add_circle"]], ["mod", "theorem", "continuous_at_to_Ico_mod", []], ["mod", "theorem", "continuous_at_to_Ioc_mod", []], ["mod", "theorem", "continuous_left_to_Ioc_mod", []], ["mod", "theorem", "continuous_right_to_Ico_mod", []], ["mod", "theorem", "to_Ico_mod_eventually_eq_to_Ioc_mod", []]]}]}, {"timestamp": 1682971255, "sha": "39478763", "message": "chore(category_theory/limits/preserves): fix typo (#18906)", "changes": [{"oldPath": "src/category_theory/functor/flat.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": [["add", "def", "preserves_limit_of_Lan_preserves_limit", ["category_theory"]], ["del", "def", "preserves_limit_of_Lan_presesrves_limit", ["category_theory"]]]}]}, {"timestamp": 1682918131, "sha": "8130e515", "message": "fix(algebra/module/submodule/basic): remove `submodule_class` (#18902)\nThis is redundant in the face of `smul_mem_class`.\nThis also adds a missing instance.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule/basic.lean", "newPath": "src/algebra/module/submodule/basic.lean", "changes": []}]}, {"timestamp": 1682913188, "sha": "7317149f", "message": "chore(measure_theory/integral): split up measure_theory.integral.lebesgue (#18904)\nThis PR shortens the 3056-line-long file `measure_theory.integral.lebesgue`, by removing a 1000-line initial segment into a new file `measure_theory.function.simple_func`.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/function/simple_func.lean", "changes": [["add", "theorem", "ennreal_induction", ["measurable"]], ["add", "theorem", "add_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "apply_mk", ["measure_theory", "simple_func"]], ["add", "def", "approx", ["measure_theory", "simple_func"]], ["add", "theorem", "approx_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "approx_comp", ["measure_theory", "simple_func"]], ["add", "def", "bind", ["measure_theory", "simple_func"]], ["add", "theorem", "bind_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "bind_const", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_comp", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_const", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_div", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_inf", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_injective", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_inv", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_le", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_map", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_mul", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_one", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_piecewise", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_pow", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_range", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_smul", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_sup", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_zpow", ["measure_theory", "simple_func"]], ["add", "def", "comp", ["measure_theory", "simple_func"]], ["add", "def", "const", ["measure_theory", "simple_func"]], ["add", "theorem", "const_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "const_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "const_lintegral_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "const_mul_eq_map", ["measure_theory", "simple_func"]], ["add", "theorem", "const_mul_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "const_one", ["measure_theory", "simple_func"]], ["add", "theorem", "div_apply", ["measure_theory", "simple_func"]], ["add", "def", "eapprox", ["measure_theory", "simple_func"]], ["add", "theorem", "eapprox_comp", ["measure_theory", "simple_func"]], ["add", "def", "eapprox_diff", ["measure_theory", "simple_func"]], ["add", "theorem", "eapprox_lt_top", ["measure_theory", "simple_func"]], ["add", "def", "ennreal_rat_embed", ["measure_theory", "simple_func"]], ["add", "theorem", "ennreal_rat_embed_encode", ["measure_theory", "simple_func"]], ["add", "theorem", "eq_zero_of_mem_range_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "exists_forall_le", ["measure_theory", "simple_func"]], ["add", "theorem", "exists_range_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "ext", ["measure_theory", "simple_func"]], ["add", "def", "extend", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_apply'", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_comp_eq'", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_comp_eq", ["measure_theory", "simple_func"]], ["add", "theorem", "iff_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "map_iff", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "meas_preimage_singleton_ne_zero", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "of_lintegral_ne_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "of_map", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "fin_meas_supp_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "fin_meas_supp_iff_support", ["measure_theory", "simple_func"]], ["add", "theorem", "finite_range", ["measure_theory", "simple_func"]], ["add", "theorem", "finset_sup_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "forall_range_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "inf_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "inv_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "le_sup_lintegral", ["measure_theory", "simple_func"]], ["add", "def", "lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_add", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_eq_of_measure_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_eq_of_subset'", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_eq_of_subset", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_map'", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_map", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_smul", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_sum", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_zero", ["measure_theory", "simple_func"]], ["add", "def", "lintegralₗ", ["measure_theory", "simple_func"]], ["add", "def", "map", ["measure_theory", "simple_func"]], ["add", "theorem", "map_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "map_coe_ennreal_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "map_coe_nnreal_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "map_const", ["measure_theory", "simple_func"]], ["add", "theorem", "map_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "map_map", ["measure_theory", "simple_func"]], ["add", "theorem", "map_mul", ["measure_theory", "simple_func"]], ["add", "theorem", "map_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "map_preimage_singleton", ["measure_theory", "simple_func"]], ["add", "theorem", "map_restrict_of_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_bind", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_set_cut", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_set_fiber", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_set_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_set_support", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_image_of_mem_range_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_range", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_range_of_measure_ne_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_range_self", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_restrict_range", ["measure_theory", "simple_func"]], ["add", "theorem", "monotone_approx", ["measure_theory", "simple_func"]], ["add", "theorem", "monotone_eapprox", ["measure_theory", "simple_func"]], ["add", "theorem", "mul_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "mul_eq_map₂", ["measure_theory", "simple_func"]], ["add", "def", "of_is_empty", ["measure_theory", "simple_func"]], ["add", "def", "pair", ["measure_theory", "simple_func"]], ["add", "theorem", "pair_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "pair_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "pair_preimage_singleton", ["measure_theory", "simple_func"]], ["add", "def", "piecewise", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_compl", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_empty", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_univ", ["measure_theory", "simple_func"]], ["add", "theorem", "pow_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "preimage_eq_empty_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "range_comp_subset_range", ["measure_theory", "simple_func"]], ["add", "theorem", "range_const", ["measure_theory", "simple_func"]], ["add", "theorem", "range_const_subset", ["measure_theory", "simple_func"]], ["add", "theorem", "range_eq_empty_of_is_empty", ["measure_theory", "simple_func"]], ["add", "theorem", "range_indicator", ["measure_theory", "simple_func"]], ["add", "theorem", "range_map", ["measure_theory", "simple_func"]], ["add", "theorem", "range_one", ["measure_theory", "simple_func"]], ["add", "def", "restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_const_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_empty", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_lintegral_eq_lintegral_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_of_not_measurable", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_preimage_singleton", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_univ", ["measure_theory", "simple_func"]], ["add", "def", "seq", ["measure_theory", "simple_func"]], ["add", "theorem", "seq_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "simple_func_bot'", ["measure_theory", "simple_func"]], ["add", "theorem", "simple_func_bot", ["measure_theory", "simple_func"]], ["add", "theorem", "smul_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "smul_eq_map", ["measure_theory", "simple_func"]], ["add", "theorem", "sum_eapprox_diff", ["measure_theory", "simple_func"]], ["add", "theorem", "sum_range_measure_preimage_singleton", ["measure_theory", "simple_func"]], ["add", "theorem", "sup_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "sup_eq_map₂", ["measure_theory", "simple_func"]], ["add", "theorem", "support_eq", ["measure_theory", "simple_func"]], ["add", "theorem", "support_indicator", ["measure_theory", "simple_func"]], ["add", "theorem", "supr_approx_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "supr_eapprox_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "tsum_eapprox_diff", ["measure_theory", "simple_func"]], ["add", "theorem", "zero_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "zpow_apply", ["measure_theory", "simple_func"]], ["add", "structure", "{u", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable/basic.lean", "newPath": "src/measure_theory/function/strongly_measurable/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["del", "theorem", "ennreal_induction", ["measurable"]], ["del", "theorem", "add_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "apply_mk", ["measure_theory", "simple_func"]], ["del", "def", "approx", ["measure_theory", "simple_func"]], ["del", "theorem", "approx_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "approx_comp", ["measure_theory", "simple_func"]], ["del", "def", "bind", ["measure_theory", "simple_func"]], ["del", "theorem", "bind_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "bind_const", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_comp", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_const", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_div", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_inf", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_injective", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_inv", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_le", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_map", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_mul", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_one", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_piecewise", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_pow", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_range", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_smul", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_sup", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_zpow", ["measure_theory", "simple_func"]], ["del", "def", "comp", ["measure_theory", "simple_func"]], ["del", "def", "const", ["measure_theory", "simple_func"]], ["del", "theorem", "const_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "const_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "const_lintegral_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "const_mul_eq_map", ["measure_theory", "simple_func"]], ["del", "theorem", "const_mul_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "const_one", ["measure_theory", "simple_func"]], ["del", "theorem", "div_apply", ["measure_theory", "simple_func"]], ["del", "def", "eapprox", ["measure_theory", "simple_func"]], ["del", "theorem", "eapprox_comp", ["measure_theory", "simple_func"]], ["del", "def", "eapprox_diff", ["measure_theory", "simple_func"]], ["del", "theorem", "eapprox_lt_top", ["measure_theory", "simple_func"]], ["del", "def", "ennreal_rat_embed", ["measure_theory", "simple_func"]], ["del", "theorem", "ennreal_rat_embed_encode", ["measure_theory", "simple_func"]], ["del", "theorem", "eq_zero_of_mem_range_zero", ["measure_theory", "simple_func"]], ["del", "theorem", "exists_forall_le", ["measure_theory", "simple_func"]], ["del", "theorem", "exists_range_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "ext", ["measure_theory", "simple_func"]], ["del", "def", "extend", ["measure_theory", "simple_func"]], ["del", "theorem", "extend_apply'", ["measure_theory", "simple_func"]], ["del", "theorem", "extend_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "extend_comp_eq'", ["measure_theory", "simple_func"]], ["del", "theorem", "extend_comp_eq", ["measure_theory", "simple_func"]], ["del", "theorem", "iff_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "map_iff", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "meas_preimage_singleton_ne_zero", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "of_lintegral_ne_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "of_map", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "fin_meas_supp_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "fin_meas_supp_iff_support", ["measure_theory", "simple_func"]], ["del", "theorem", "finite_range", ["measure_theory", "simple_func"]], ["del", "theorem", "finset_sup_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "forall_range_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "inf_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "inv_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "le_sup_lintegral", ["measure_theory", "simple_func"]], ["del", "def", "lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_add", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_congr", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_eq_of_measure_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_eq_of_subset'", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_eq_of_subset", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_map'", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_map", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_mono", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_smul", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_sum", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_zero", ["measure_theory", "simple_func"]], ["del", "def", "lintegralₗ", ["measure_theory", "simple_func"]], ["del", "def", "map", ["measure_theory", "simple_func"]], ["del", "theorem", "map_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "map_coe_ennreal_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "map_coe_nnreal_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "map_const", ["measure_theory", "simple_func"]], ["del", "theorem", "map_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "map_map", ["measure_theory", "simple_func"]], ["del", "theorem", "map_mul", ["measure_theory", "simple_func"]], ["del", "theorem", "map_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "map_preimage_singleton", ["measure_theory", "simple_func"]], ["del", "theorem", "map_restrict_of_zero", ["measure_theory", "simple_func"]], ["del", "theorem", "measurable_bind", ["measure_theory", "simple_func"]], ["del", "theorem", "measurable_set_cut", ["measure_theory", "simple_func"]], ["del", "theorem", "measurable_set_fiber", ["measure_theory", "simple_func"]], ["del", "theorem", "measurable_set_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "measurable_set_support", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_image_of_mem_range_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_range", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_range_of_measure_ne_zero", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_range_self", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_restrict_range", ["measure_theory", "simple_func"]], ["del", "theorem", "monotone_approx", ["measure_theory", "simple_func"]], ["del", "theorem", "monotone_eapprox", ["measure_theory", "simple_func"]], ["del", "theorem", "mul_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "mul_eq_map₂", ["measure_theory", "simple_func"]], ["del", "def", "of_is_empty", ["measure_theory", "simple_func"]], ["del", "def", "pair", ["measure_theory", "simple_func"]], ["del", "theorem", "pair_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "pair_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "pair_preimage_singleton", ["measure_theory", "simple_func"]], ["del", "def", "piecewise", ["measure_theory", "simple_func"]], ["del", "theorem", "piecewise_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "piecewise_compl", ["measure_theory", "simple_func"]], ["del", "theorem", "piecewise_empty", ["measure_theory", "simple_func"]], ["del", "theorem", "piecewise_univ", ["measure_theory", "simple_func"]], ["del", "theorem", "pow_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "preimage_eq_empty_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "range_comp_subset_range", ["measure_theory", "simple_func"]], ["del", "theorem", "range_const", ["measure_theory", "simple_func"]], ["del", "theorem", "range_const_subset", ["measure_theory", "simple_func"]], ["del", "theorem", "range_eq_empty_of_is_empty", ["measure_theory", "simple_func"]], ["del", "theorem", "range_indicator", ["measure_theory", "simple_func"]], ["del", "theorem", "range_map", ["measure_theory", "simple_func"]], ["del", "theorem", "range_one", ["measure_theory", "simple_func"]], ["del", "def", "restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_const_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_empty", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_lintegral_eq_lintegral_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_mono", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_of_not_measurable", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_preimage_singleton", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_univ", ["measure_theory", "simple_func"]], ["del", "def", "seq", ["measure_theory", "simple_func"]], ["del", "theorem", "seq_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "simple_func_bot'", ["measure_theory", "simple_func"]], ["del", "theorem", "simple_func_bot", ["measure_theory", "simple_func"]], ["del", "theorem", "smul_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "smul_eq_map", ["measure_theory", "simple_func"]], ["del", "theorem", "sum_eapprox_diff", ["measure_theory", "simple_func"]], ["del", "theorem", "sum_range_measure_preimage_singleton", ["measure_theory", "simple_func"]], ["del", "theorem", "sup_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "sup_eq_map₂", ["measure_theory", "simple_func"]], ["del", "theorem", "support_eq", ["measure_theory", "simple_func"]], ["del", "theorem", "support_indicator", ["measure_theory", "simple_func"]], ["del", "theorem", "supr_approx_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "supr_eapprox_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "tsum_eapprox_diff", ["measure_theory", "simple_func"]], ["del", "theorem", "zero_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "zpow_apply", ["measure_theory", "simple_func"]], ["del", "structure", "{u", ["measure_theory"]]]}]}, {"timestamp": 1682896996, "sha": "d20a8cd5", "message": "chore(.github/workflows): update gh-get-current-pr (#18763)\nThe test that this upgrade works ok is that the awaiting-CI label is removed", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1682885351, "sha": "8b8ba04e", "message": "feat (measure_theory/integral): lemmas `integral_Ioi_eq_integral_Ici` etc (#18899)\nWe already have some lemmas relating integrals over open vs. closed intervals, but some were missing (notably half-infinite integrals). This should now be a full set.", "changes": [{"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ico'", []], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ico", []], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc'", []], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc", []], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioo'", []], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioo", []], ["add", "theorem", "integrable_on_Ici_iff_integrable_on_Ioi'", []], ["add", "theorem", "integrable_on_Ici_iff_integrable_on_Ioi", []], ["add", "theorem", "integrable_on_Ico_iff_integrable_on_Ioo'", []], ["add", "theorem", "integrable_on_Ico_iff_integrable_on_Ioo", []], ["add", "theorem", "integrable_on_Iic_iff_integrable_on_Iio'", []], ["add", "theorem", "integrable_on_Iic_iff_integrable_on_Iio", []], ["add", "theorem", "integrable_on_Ioc_iff_integrable_on_Ioo'", []], ["add", "theorem", "integrable_on_Ioc_iff_integrable_on_Ioo", []]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["del", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc'", []], ["del", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc", []], ["del", "theorem", "integrable_on_Icc_iff_integrable_on_Ioo", []], ["del", "theorem", "integrable_on_Ici_iff_integrable_on_Ioi'", []], ["del", "theorem", "integrable_on_Ici_iff_integrable_on_Ioi", []], ["del", "theorem", "integrable_on_Ioc_iff_integrable_on_Ioo'", []], ["del", "theorem", "integrable_on_Ioc_iff_integrable_on_Ioo", []]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_Icc_eq_integral_Ico'", ["measure_theory"]], ["add", "theorem", "integral_Icc_eq_integral_Ico", ["measure_theory"]], ["mod", "theorem", "integral_Icc_eq_integral_Ioc'", ["measure_theory"]], ["mod", "theorem", "integral_Icc_eq_integral_Ioc", ["measure_theory"]], ["add", "theorem", "integral_Icc_eq_integral_Ioo'", ["measure_theory"]], ["add", "theorem", "integral_Icc_eq_integral_Ioo", ["measure_theory"]], ["add", "theorem", "integral_Ici_eq_integral_Ioi'", ["measure_theory"]], ["add", "theorem", "integral_Ici_eq_integral_Ioi", ["measure_theory"]], ["add", "theorem", "integral_Ico_eq_integral_Ioo'", ["measure_theory"]], ["add", "theorem", "integral_Ico_eq_integral_Ioo", ["measure_theory"]], ["add", "theorem", "integral_Iic_eq_integral_Iio'", ["measure_theory"]], ["add", "theorem", "integral_Iic_eq_integral_Iio", ["measure_theory"]], ["mod", "theorem", "integral_Ioc_eq_integral_Ioo'", ["measure_theory"]], ["mod", "theorem", "integral_Ioc_eq_integral_Ioo", ["measure_theory"]]]}]}, {"timestamp": 1682885350, "sha": "e42cfdb0", "message": "chore(linear_algebra/matrix/to_linear_equiv): golf using existing morphisms (#18895)\nAlso changes the statement of `matrix.to_linear_equiv'_symm_apply` to be `rfl`, since it's easy to change to another spelling at the call site.", "changes": [{"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}]}, {"timestamp": 1682885349, "sha": "9425b6f8", "message": "feat(analysis/fourier): Riemann-Lebesgue lemma (#17719)\nThis PR adds a proof that for any function `f` on a finite-dimensional real vector space `V`, the integral `∫ (v : V), exp (-2 * π * w v * I) • f x` tends to 0 as `w` goes to infinity (wrt the cocompact filter on the dual space `W` of `V`).", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/fourier/fourier_transform.lean", "newPath": "src/analysis/fourier/fourier_transform.lean", "changes": [["del", "theorem", "fourier_integral_norm_le", ["fourier"]], ["add", "theorem", "norm_fourier_integral_le_integral_norm", ["fourier"]], ["del", "theorem", "fourier_integral_convergent", ["vector_fourier"]], ["add", "theorem", "fourier_integral_convergent_iff", ["vector_fourier"]], ["del", "theorem", "fourier_integral_norm_le", ["vector_fourier"]], ["add", "theorem", "norm_fourier_integral_le_integral_norm", ["vector_fourier"]]]}, {"oldPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "newPath": "src/analysis/fourier/riemann_lebesgue_lemma.lean", "changes": [["mod", "theorem", "fourier_integral_eq_half_sub_half_period_translate", []], ["mod", "theorem", "fourier_integral_half_period_translate", []], ["mod", "theorem", "fourier_integrand_integrable", []], ["del", "theorem", "fourier_integral_zero_at_infty_of_continuous_compact_support", ["real"]], ["add", "theorem", "tendsto_integral_exp_smul_cocompact", ["real"]], ["add", "theorem", "zero_at_infty_fourier_integral", ["real"]], ["add", "theorem", "zero_at_infty_vector_fourier_integral", ["real"]], ["add", "theorem", "tendsto_integral_exp_inner_smul_cocompact", []], ["add", "theorem", "tendsto_integral_exp_inner_smul_cocompact_of_continuous_compact_support", []], ["add", "theorem", "tendsto_integral_exp_smul_cocompact", []], ["add", "theorem", "tendsto_integral_exp_smul_cocompact_of_inner_product", []], ["del", "theorem", "tendsto_integral_mul_exp_at_bot_of_continuous_compact_support", []], ["del", "theorem", "tendsto_integral_mul_exp_at_top_of_continuous_compact_support", []], ["del", "theorem", "zero_at_infty_integral_mul_exp_of_continuous_compact_support", []]]}, {"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": [["mod", "def", "to_euclidean", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["del", "theorem", "coe_constrL", ["basis"]], ["del", "def", "constrL", ["basis"]], ["del", "theorem", "constrL_apply", ["basis"]], ["del", "theorem", "constrL_basis", ["basis"]], ["del", "def", "equiv_funL", ["basis"]], ["del", "def", "of_finrank_eq", ["continuous_linear_equiv"]], ["del", "theorem", "nonempty_continuous_linear_equiv_iff_finrank_eq", ["finite_dimensional"]], ["del", "theorem", "nonempty_continuous_linear_equiv_of_finrank_eq", ["finite_dimensional"]]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": [["add", "theorem", "coe_constrL", ["basis"]], ["add", "def", "constrL", ["basis"]], ["add", "theorem", "constrL_apply", ["basis"]], ["add", "theorem", "constrL_basis", ["basis"]], ["add", "def", "equiv_funL", ["basis"]], ["add", "def", "of_finrank_eq", ["continuous_linear_equiv"]], ["add", "theorem", "nonempty_continuous_linear_equiv_iff_finrank_eq", ["finite_dimensional"]], ["add", "theorem", "nonempty_continuous_linear_equiv_of_finrank_eq", ["finite_dimensional"]]]}]}, {"timestamp": 1682874703, "sha": "9d684a89", "message": "chore(data/finset/lattice): Move lemmas around (#18900)\nMove `map_finset_sup`/`map_finset_inf` from `order.hom.lattice` to `data.finset.lattice`. This breaks a few unqualified downstream uses of `submodule.map_bot`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "inf_sdiff_left", ["finset"]], ["mod", "theorem", "inf_sdiff_right", ["finset"]], ["mod", "theorem", "sup_sdiff_left", ["finset"]], ["add", "theorem", "map_finset_inf", []], ["add", "theorem", "map_finset_sup", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["del", "theorem", "map_finset_inf", []], ["del", "theorem", "map_finset_sup", []]]}]}, {"timestamp": 1682868579, "sha": "b88d81c8", "message": "feat(ring_theory/ideal/quotient_operations): add double quotient of an algebra (#18452)\nThis adds definitions and lemmas on the double quotient `A / (I ⊔ J)` of a commutative algebra `A` by ideals `I` and `J`, analogous to existing definitions and lemmas on the double quotient of a commutative ring.", "changes": [{"oldPath": "src/ring_theory/ideal/quotient_operations.lean", "newPath": "src/ring_theory/ideal/quotient_operations.lean", "changes": [["add", "theorem", "coe_lift_sup_quot_quot_mkₐ", ["double_quot"]], ["add", "theorem", "coe_quot_left_to_quot_supₐ", ["double_quot"]], ["add", "theorem", "coe_quot_quot_equiv_commₐ", ["double_quot"]], ["add", "theorem", "coe_quot_quot_equiv_quot_of_leₐ", ["double_quot"]], ["add", "theorem", "coe_quot_quot_equiv_quot_of_leₐ_symm", ["double_quot"]], ["add", "theorem", "coe_quot_quot_equiv_quot_supₐ", ["double_quot"]], ["add", "theorem", "coe_quot_quot_equiv_quot_supₐ_symm:", ["double_quot"]], ["add", "theorem", "coe_quot_quot_mkₐ", ["double_quot"]], ["add", "theorem", "coe_quot_quot_to_quot_supₐ", ["double_quot"]], ["add", "def", "lift_sup_quot_quot_mkₐ", ["double_quot"]], ["add", "theorem", "lift_sup_quot_quot_mkₐ_to_ring_hom", ["double_quot"]], ["add", "def", "quot_left_to_quot_supₐ", ["double_quot"]], ["add", "theorem", "quot_left_to_quot_supₐ_to_ring_hom", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_comp_quot_quot_mkₐ", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_symmₐ", ["double_quot"]], ["add", "def", "quot_quot_equiv_commₐ", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_commₐ_to_ring_equiv", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_le_comp_quot_quot_mkₐ", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_le_symm_comp_mkₐ", ["double_quot"]], ["add", "def", "quot_quot_equiv_quot_of_leₐ", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_leₐ_symm_to_ring_equiv", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_leₐ_to_ring_equiv", ["double_quot"]], ["add", "def", "quot_quot_equiv_quot_supₐ", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_supₐ_symm_to_ring_equiv:", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_supₐ_to_ring_equiv", ["double_quot"]], ["add", "def", "quot_quot_mkₐ", ["double_quot"]], ["add", "theorem", "quot_quot_mkₐ_to_ring_hom", ["double_quot"]], ["add", "def", "quot_quot_to_quot_supₐ", ["double_quot"]], ["add", "theorem", "quot_quot_to_quot_supₐ_to_ring_hom", ["double_quot"]]]}]}, {"timestamp": 1682857499, "sha": "4367b192", "message": "feat(data/set/intervals/basic): generalize from `linear_order` to `preorder` (#18876)\nThe lemma statements are unchanged, but the proofs are rewritten", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "not_mem_Icc_of_gt", ["set"]], ["mod", "theorem", "not_mem_Icc_of_lt", ["set"]], ["mod", "theorem", "not_mem_Ico_of_ge", ["set"]], ["mod", "theorem", "not_mem_Ico_of_lt", ["set"]], ["mod", "theorem", "not_mem_Ioc_of_gt", ["set"]], ["mod", "theorem", "not_mem_Ioc_of_le", ["set"]], ["mod", "theorem", "not_mem_Ioo_of_ge", ["set"]], ["mod", "theorem", "not_mem_Ioo_of_le", ["set"]]]}]}, {"timestamp": 1682841516, "sha": "e4bc74cb", "message": "feat(data/set/intervals/pi): `f.update i '' Icc a b = Icc (f.update i a) (f.update i b)` (#18892)\nand corresponding lemmas for `pi.single`", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "mul_single_inf", ["pi"]], ["add", "theorem", "mul_single_sup", ["pi"]]]}, {"oldPath": "src/data/set/intervals/pi.lean", "newPath": "src/data/set/intervals/pi.lean", "changes": [["add", "theorem", "image_mul_single_Icc", ["set"]], ["add", "theorem", "image_mul_single_Icc_left", ["set"]], ["add", "theorem", "image_mul_single_Icc_right", ["set"]], ["add", "theorem", "image_mul_single_Ico", ["set"]], ["add", "theorem", "image_mul_single_Ico_left", ["set"]], ["add", "theorem", "image_mul_single_Ico_right", ["set"]], ["add", "theorem", "image_mul_single_Ioc", ["set"]], ["add", "theorem", "image_mul_single_Ioc_left", ["set"]], ["add", "theorem", "image_mul_single_Ioc_right", ["set"]], ["add", "theorem", "image_mul_single_Ioo", ["set"]], ["add", "theorem", "image_mul_single_Ioo_left", ["set"]], ["add", "theorem", "image_mul_single_Ioo_right", ["set"]], ["add", "theorem", "image_mul_single_uIcc", ["set"]], ["add", "theorem", "image_mul_single_uIcc_left", ["set"]], ["add", "theorem", "image_mul_single_uIcc_right", ["set"]], ["add", "theorem", "image_update_Icc", ["set"]], ["add", "theorem", "image_update_Icc_left", ["set"]], ["add", "theorem", "image_update_Icc_right", ["set"]], ["add", "theorem", "image_update_Ico", ["set"]], ["add", "theorem", "image_update_Ico_left", ["set"]], ["add", "theorem", "image_update_Ico_right", ["set"]], ["add", "theorem", "image_update_Ioc", ["set"]], ["add", "theorem", "image_update_Ioc_left", ["set"]], ["add", "theorem", "image_update_Ioc_right", ["set"]], ["add", "theorem", "image_update_Ioo", ["set"]], ["add", "theorem", "image_update_Ioo_left", ["set"]], ["add", "theorem", "image_update_Ioo_right", ["set"]], ["add", "theorem", "image_update_uIcc", ["set"]], ["add", "theorem", "image_update_uIcc_left", ["set"]], ["add", "theorem", "image_update_uIcc_right", ["set"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "update_inf", ["function"]], ["add", "theorem", "update_sup", ["function"]]]}]}, {"timestamp": 1682837516, "sha": "011cafb4", "message": "chore (measure_theory/integral): split interval_integral.lean into two (#18898)\nThis divides `interval_integral.lean` (currently 2800 lines) into two roughly equal chunks -- moving the variants of FTC into a new file `fund_thm_calculus.lean` and leaving definitions and basic lemmas in the original file.", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "src/analysis/fourier/add_circle.lean", "newPath": "src/analysis/fourier/add_circle.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/integral/fund_thm_calculus.lean", "changes": [["add", "theorem", "deriv_integral", ["continuous"]], ["add", "theorem", "integral_has_strict_deriv_at", ["continuous"]], ["add", "theorem", "finite_at_inner", ["interval_integral", "FTC_filter"]], ["add", "theorem", "deriv_integral_left", ["interval_integral"]], ["add", "theorem", "deriv_integral_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "deriv_integral_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "deriv_integral_right", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_left", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_right", ["interval_integral"]], ["add", "theorem", "differentiable_on_integral_of_continuous", ["interval_integral"]], ["add", "theorem", "fderiv_integral", ["interval_integral"]], ["add", "theorem", "fderiv_integral_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "fderiv_within_integral_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integrable_on_deriv_of_nonneg", ["interval_integral"]], ["add", "theorem", "integrable_on_deriv_right_of_nonneg", ["interval_integral"]], ["add", "theorem", "integral_comp_mul_deriv'''", ["interval_integral"]], ["add", "theorem", "integral_comp_mul_deriv''", ["interval_integral"]], ["add", "theorem", "integral_comp_mul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_comp_mul_deriv", ["interval_integral"]], ["add", "theorem", "integral_comp_smul_deriv'''", ["interval_integral"]], ["add", "theorem", "integral_comp_smul_deriv''", ["interval_integral"]], ["add", "theorem", "integral_comp_smul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_comp_smul_deriv", ["interval_integral"]], ["add", "theorem", "integral_deriv_comp_mul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_deriv_comp_mul_deriv", ["interval_integral"]], ["add", "theorem", "integral_deriv_comp_smul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_deriv_comp_smul_deriv", ["interval_integral"]], ["add", "theorem", "integral_deriv_eq_sub'", ["interval_integral"]], ["add", "theorem", "integral_deriv_eq_sub", ["interval_integral"]], ["add", "theorem", "integral_deriv_mul_eq_sub", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_at", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_at_of_le", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_at_of_tendsto", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_right", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_right_of_le", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_right_of_le_real", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_left", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_right", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_left", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_right", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_at", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_within_at", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_within_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_left", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_right", ["interval_integral"]], ["add", "theorem", "integral_has_strict_fderiv_at", ["interval_integral"]], ["add", "theorem", "integral_has_strict_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_le_sub_of_has_deriv_right_of_le", ["interval_integral"]], ["add", "theorem", "integral_mul_deriv_eq_deriv_mul", ["interval_integral"]], ["add", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "interval_integrable_deriv_of_nonneg", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae'", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_ge'", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_ge", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_le'", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_le", ["interval_integral"]], ["add", "theorem", "sub_le_integral_of_has_deriv_right_of_le", ["interval_integral"]], ["add", "theorem", "sub_le_integral_of_has_deriv_right_of_le_Ico", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["del", "theorem", "deriv_integral", ["continuous"]], ["del", "theorem", "integral_has_strict_deriv_at", ["continuous"]], ["del", "theorem", "finite_at_inner", ["interval_integral", "FTC_filter"]], ["del", "theorem", "deriv_integral_left", ["interval_integral"]], ["del", "theorem", "deriv_integral_of_tendsto_ae_left", ["interval_integral"]], ["del", "theorem", "deriv_integral_of_tendsto_ae_right", ["interval_integral"]], ["del", "theorem", "deriv_integral_right", ["interval_integral"]], ["del", "theorem", "deriv_within_integral_left", ["interval_integral"]], ["del", "theorem", "deriv_within_integral_of_tendsto_ae_left", ["interval_integral"]], ["del", "theorem", "deriv_within_integral_of_tendsto_ae_right", ["interval_integral"]], ["del", "theorem", "deriv_within_integral_right", ["interval_integral"]], ["del", "theorem", "differentiable_on_integral_of_continuous", ["interval_integral"]], ["del", "theorem", "fderiv_integral", ["interval_integral"]], ["del", "theorem", "fderiv_integral_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "fderiv_within_integral_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "integrable_on_deriv_of_nonneg", ["interval_integral"]], ["del", "theorem", "integrable_on_deriv_right_of_nonneg", ["interval_integral"]], ["del", "theorem", "integral_comp_mul_deriv'''", ["interval_integral"]], ["del", "theorem", "integral_comp_mul_deriv''", ["interval_integral"]], ["del", "theorem", "integral_comp_mul_deriv'", ["interval_integral"]], ["del", "theorem", "integral_comp_mul_deriv", ["interval_integral"]], ["del", "theorem", "integral_comp_smul_deriv'''", ["interval_integral"]], ["del", "theorem", "integral_comp_smul_deriv''", ["interval_integral"]], ["del", "theorem", "integral_comp_smul_deriv'", ["interval_integral"]], ["del", "theorem", "integral_comp_smul_deriv", ["interval_integral"]], ["del", "theorem", "integral_deriv_comp_mul_deriv'", ["interval_integral"]], ["del", "theorem", "integral_deriv_comp_mul_deriv", ["interval_integral"]], ["del", "theorem", "integral_deriv_comp_smul_deriv'", ["interval_integral"]], ["del", "theorem", "integral_deriv_comp_smul_deriv", ["interval_integral"]], ["del", "theorem", "integral_deriv_eq_sub'", ["interval_integral"]], ["del", "theorem", "integral_deriv_eq_sub", ["interval_integral"]], ["del", "theorem", "integral_deriv_mul_eq_sub", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_at", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_at_of_le", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_at_of_tendsto", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_right", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_right_of_le", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_right_of_le_real", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_at_left", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_at_right", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_within_at_left", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_left", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_right", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_within_at_right", ["interval_integral"]], ["del", "theorem", "integral_has_fderiv_at", ["interval_integral"]], ["del", "theorem", "integral_has_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "integral_has_fderiv_within_at", ["interval_integral"]], ["del", "theorem", "integral_has_fderiv_within_at_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "integral_has_strict_deriv_at_left", ["interval_integral"]], ["del", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["del", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["del", "theorem", "integral_has_strict_deriv_at_right", ["interval_integral"]], ["del", "theorem", "integral_has_strict_fderiv_at", ["interval_integral"]], ["del", "theorem", "integral_has_strict_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "integral_le_sub_of_has_deriv_right_of_le", ["interval_integral"]], ["del", "theorem", "integral_mul_deriv_eq_deriv_mul", ["interval_integral"]], ["del", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae_left", ["interval_integral"]], ["del", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae_right", ["interval_integral"]], ["del", "theorem", "integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "interval_integrable_deriv_of_nonneg", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae_left", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae_right", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae'", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_ge'", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_ge", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_le'", ["interval_integral"]], ["del", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_le", ["interval_integral"]], ["del", "theorem", "sub_le_integral_of_has_deriv_right_of_le", ["interval_integral"]], ["del", "theorem", "sub_le_integral_of_has_deriv_right_of_le_Ico", ["interval_integral"]]]}]}, {"timestamp": 1682771945, "sha": "86d04064", "message": "chore(.github/workflows): update get-changed-files and download-artifact version (#18765)\nTo stay ahead of the node 12 to node 16 deprecation due \"summer 2023\" https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/", "changes": [{"oldPath": ".github/workflows/add_ported_warnings.yml", "newPath": ".github/workflows/add_ported_warnings.yml", "changes": []}, {"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1682765596, "sha": "7cc39182", "message": "chore(.github/workflows): update checkout and setup python versions (#18764)\nTo stay ahead of the node 12 to node 16 deprecation due \"summer 2023\" https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/", "changes": [{"oldPath": ".github/workflows/add_port_comment.yml", "newPath": ".github/workflows/add_port_comment.yml", "changes": []}, {"oldPath": ".github/workflows/add_ported_warnings.yml", "newPath": ".github/workflows/add_ported_warnings.yml", "changes": []}, {"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}, {"oldPath": ".github/workflows/lint_self_test.yml", "newPath": ".github/workflows/lint_self_test.yml", "changes": []}]}, {"timestamp": 1682759877, "sha": "cf7a7252", "message": "refactor(algebra/quaternion): remove `quaternion.conj` (#18803)\nInstead we use `star` directly. We keep only the lemmas that refer to quaternion-specific operators, as the rest are already covered by the star API.\nIn practice, this is mostly the lemmas about the real and imaginary parts of quaternions.\nThe `commute_self_conj` lemma has been replaced by a `is_star_normal` instance.", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["del", "theorem", "coe_conj_ae", ["quaternion"]], ["add", "theorem", "coe_star_ae", ["quaternion"]], ["del", "theorem", "commute_conj_conj", ["quaternion"]], ["del", "theorem", "commute_conj_self", ["quaternion"]], ["del", "theorem", "commute_self_conj", ["quaternion"]], ["del", "def", "conj", ["quaternion"]], ["del", "theorem", "conj_add", ["quaternion"]], ["del", "theorem", "conj_add_self'", ["quaternion"]], ["del", "theorem", "conj_add_self", ["quaternion"]], ["del", "def", "conj_ae", ["quaternion"]], ["del", "theorem", "conj_coe", ["quaternion"]], ["del", "theorem", "conj_conj", ["quaternion"]], ["del", "theorem", "conj_conj_mul", ["quaternion"]], ["del", "theorem", "conj_eq_neg", ["quaternion"]], ["del", "theorem", "conj_eq_self", ["quaternion"]], ["del", "theorem", "conj_eq_two_re_sub", ["quaternion"]], ["del", "theorem", "conj_im", ["quaternion"]], ["del", "theorem", "conj_im_i", ["quaternion"]], ["del", "theorem", "conj_im_j", ["quaternion"]], ["del", "theorem", "conj_im_k", ["quaternion"]], ["del", "theorem", "conj_int_cast", ["quaternion"]], ["del", "theorem", "conj_inv", ["quaternion"]], ["del", "theorem", "conj_mul", ["quaternion"]], ["del", "theorem", "conj_mul_conj", ["quaternion"]], ["del", "theorem", "conj_mul_eq_coe", ["quaternion"]], ["del", "theorem", "conj_mul_self", ["quaternion"]], ["del", "theorem", "conj_nat_cast", ["quaternion"]], ["del", "theorem", "conj_neg", ["quaternion"]], ["del", "theorem", "conj_one", ["quaternion"]], ["del", "theorem", "conj_pow", ["quaternion"]], ["del", "theorem", "conj_rat_cast", ["quaternion"]], ["del", "theorem", "conj_re", ["quaternion"]], ["del", "theorem", "conj_smul", ["quaternion"]], ["del", "theorem", "conj_sub", ["quaternion"]], ["del", "theorem", "conj_zero", ["quaternion"]], ["del", "theorem", "conj_zpow", ["quaternion"]], ["del", "theorem", "im_conj", ["quaternion"]], ["add", "theorem", "im_star", ["quaternion"]], ["del", "theorem", "mul_conj_eq_coe", ["quaternion"]], ["add", "theorem", "mul_star_eq_coe", ["quaternion"]], ["mod", "theorem", "norm_sq_add", ["quaternion"]], ["del", "theorem", "norm_sq_conj", ["quaternion"]], ["mod", "theorem", "norm_sq_def", ["quaternion"]], ["add", "theorem", "norm_sq_star", ["quaternion"]], ["del", "theorem", "self_add_conj'", ["quaternion"]], ["del", "theorem", "self_add_conj", ["quaternion"]], ["add", "theorem", "self_add_star'", ["quaternion"]], ["add", "theorem", "self_add_star", ["quaternion"]], ["del", "theorem", "self_mul_conj", ["quaternion"]], ["add", "theorem", "self_mul_star", ["quaternion"]], ["add", "theorem", "star_add_self'", ["quaternion"]], ["add", "theorem", "star_add_self", ["quaternion"]], ["add", "def", "star_ae", ["quaternion"]], ["add", "theorem", "star_coe", ["quaternion"]], ["add", "theorem", "star_eq_neg", ["quaternion"]], ["add", "theorem", "star_eq_self", ["quaternion"]], ["add", "theorem", "star_eq_two_re_sub", ["quaternion"]], ["add", "theorem", "star_im", ["quaternion"]], ["add", "theorem", "star_im_i", ["quaternion"]], ["add", "theorem", "star_im_j", ["quaternion"]], ["add", "theorem", "star_im_k", ["quaternion"]], ["add", "theorem", "star_mul_eq_coe", ["quaternion"]], ["add", "theorem", "star_mul_self", ["quaternion"]], ["add", "theorem", "star_re", ["quaternion"]], ["add", "theorem", "star_smul", ["quaternion"]], ["del", "theorem", "coe_conj_ae", ["quaternion_algebra"]], ["add", "theorem", "coe_star_ae", ["quaternion_algebra"]], ["del", "theorem", "commute_conj_conj", ["quaternion_algebra"]], ["del", "theorem", "commute_conj_self", ["quaternion_algebra"]], ["del", "theorem", "commute_self_conj", ["quaternion_algebra"]], ["del", "def", "conj", ["quaternion_algebra"]], ["del", "theorem", "conj_add", ["quaternion_algebra"]], ["del", "theorem", "conj_add_self'", ["quaternion_algebra"]], ["del", "theorem", "conj_add_self", ["quaternion_algebra"]], ["del", "def", "conj_ae", ["quaternion_algebra"]], ["del", "theorem", "conj_coe", ["quaternion_algebra"]], ["del", "theorem", "conj_conj", ["quaternion_algebra"]], ["del", "theorem", "conj_conj_mul", ["quaternion_algebra"]], ["del", "theorem", "conj_eq_neg", ["quaternion_algebra"]], ["del", "theorem", "conj_eq_self", ["quaternion_algebra"]], ["del", "theorem", "conj_eq_two_re_sub", ["quaternion_algebra"]], ["del", "theorem", "conj_im", ["quaternion_algebra"]], ["del", "theorem", "conj_int_cast", ["quaternion_algebra"]], ["del", "theorem", "conj_mk", ["quaternion_algebra"]], ["del", "theorem", "conj_mul", ["quaternion_algebra"]], ["del", "theorem", "conj_mul_conj", ["quaternion_algebra"]], ["del", "theorem", "conj_mul_eq_coe", ["quaternion_algebra"]], ["del", "theorem", "conj_nat_cast", ["quaternion_algebra"]], ["del", "theorem", "conj_neg", ["quaternion_algebra"]], ["del", "theorem", "conj_one", ["quaternion_algebra"]], ["del", "theorem", "conj_pow", ["quaternion_algebra"]], ["del", "theorem", "conj_smul", ["quaternion_algebra"]], ["del", "theorem", "conj_sub", ["quaternion_algebra"]], ["del", "theorem", "conj_zero", ["quaternion_algebra"]], ["del", "theorem", "im_conj", ["quaternion_algebra"]], ["del", "theorem", "im_i_conj", ["quaternion_algebra"]], ["add", "theorem", "im_i_star", ["quaternion_algebra"]], ["del", "theorem", "im_j_conj", ["quaternion_algebra"]], ["add", "theorem", "im_j_star", ["quaternion_algebra"]], ["del", "theorem", "im_k_conj", ["quaternion_algebra"]], ["add", "theorem", "im_k_star", ["quaternion_algebra"]], ["add", "theorem", "im_star", ["quaternion_algebra"]], ["del", "theorem", "mul_conj_eq_coe", ["quaternion_algebra"]], ["add", "theorem", "mul_star_eq_coe", ["quaternion_algebra"]], ["del", "theorem", "re_conj", ["quaternion_algebra"]], ["add", "theorem", "re_star", ["quaternion_algebra"]], ["del", "theorem", "self_add_conj'", ["quaternion_algebra"]], ["del", "theorem", "self_add_conj", ["quaternion_algebra"]], ["add", "theorem", "self_add_star'", ["quaternion_algebra"]], ["add", "theorem", "self_add_star", ["quaternion_algebra"]], ["add", "theorem", "star_add_self'", ["quaternion_algebra"]], ["add", "theorem", "star_add_self", ["quaternion_algebra"]], ["add", "def", "star_ae", ["quaternion_algebra"]], ["add", "theorem", "star_coe", ["quaternion_algebra"]], ["del", "theorem", "star_def", ["quaternion_algebra"]], ["add", "theorem", "star_eq_neg", ["quaternion_algebra"]], ["add", "theorem", "star_eq_self", ["quaternion_algebra"]], ["add", "theorem", "star_eq_two_re_sub", ["quaternion_algebra"]], ["add", "theorem", "star_im", ["quaternion_algebra"]], ["add", "theorem", "star_mk", ["quaternion_algebra"]], ["add", "theorem", "star_mul_eq_coe", ["quaternion_algebra"]], ["add", "theorem", "star_smul", ["quaternion_algebra"]]]}, {"oldPath": "src/analysis/normed_space/quaternion_exponential.lean", "newPath": "src/analysis/normed_space/quaternion_exponential.lean", "changes": [["del", "theorem", "conj_exp", ["quaternion"]]]}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": [["del", "theorem", "continuous_conj", ["quaternion"]], ["mod", "theorem", "inner_def", ["quaternion"]], ["del", "theorem", "nnnorm_conj", ["quaternion"]], ["add", "theorem", "nnnorm_star", ["quaternion"]], ["del", "theorem", "norm_conj", ["quaternion"]], ["add", "theorem", "norm_star", ["quaternion"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["del", "theorem", "of_quaternion_conj", ["clifford_algebra_quaternion"]], ["add", "theorem", "of_quaternion_star", ["clifford_algebra_quaternion"]]]}]}, {"timestamp": 1682746494, "sha": "f2b757fc", "message": "chore(*): add mathlib4 synchronization comments (#18889)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_topology.nerve`\n* `algebraic_topology.simplicial_set`\n* `analysis.convex.stone_separation`\n* `category_theory.action`\n* `category_theory.limits.filtered_colimit_commutes_finite_limit`\n* `category_theory.noetherian`\n* `category_theory.preadditive.projective`\n* `category_theory.simple`\n* `category_theory.sites.adjunction`\n* `linear_algebra.free_module.finite.matrix`\n* `linear_algebra.matrix.basis`\n* `linear_algebra.matrix.block`\n* `linear_algebra.matrix.diagonal`\n* `linear_algebra.matrix.finite_dimensional`\n* `linear_algebra.matrix.invariant_basis_number`\n* `linear_algebra.matrix.to_lin`\n* `linear_algebra.matrix.transvection`\n* `linear_algebra.matrix.zpow`\n* `topology.algebra.module.multilinear`\n* `topology.algebra.module.strong_topology`\n* `topology.algebra.uniform_convergence`\n* `topology.category.CompHaus.basic`\n* `topology.category.CompHaus.projective`\n* `topology.category.Top.limits.basic`\n* `topology.category.Top.opens`", "changes": [{"oldPath": "src/algebraic_topology/nerve.lean", "newPath": "src/algebraic_topology/nerve.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": []}, {"oldPath": "src/analysis/convex/stone_separation.lean", "newPath": "src/analysis/convex/stone_separation.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/noetherian.lean", "newPath": "src/category_theory/noetherian.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/category_theory/sites/adjunction.lean", "newPath": "src/category_theory/sites/adjunction.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/matrix.lean", "newPath": "src/linear_algebra/free_module/finite/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/finite_dimensional.lean", "newPath": "src/linear_algebra/matrix/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/invariant_basis_number.lean", "newPath": "src/linear_algebra/matrix/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/strong_topology.lean", "newPath": "src/topology/algebra/module/strong_topology.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_convergence.lean", "newPath": "src/topology/algebra/uniform_convergence.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/basic.lean", "newPath": "src/topology/category/CompHaus/basic.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/projective.lean", "newPath": "src/topology/category/CompHaus/projective.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits/basic.lean", "newPath": "src/topology/category/Top/limits/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}]}, {"timestamp": 1682701518, "sha": "a4f99eae", "message": "chore(.github/workflows): replace set-output commands (#18762)\nFollowing deprecation, c.f. https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/\nThe check that this change worked ok is that the action produces a correctly named artifact", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1682701517, "sha": "eee67e6e", "message": "chore(.github/workflows): update cancel workflow action (#18761)\nTo stop deprecation warnings on every PR.\nThe test commit shows that this works as intended", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}, {"oldPath": ".github/workflows/dependent-issues.yml", "newPath": ".github/workflows/dependent-issues.yml", "changes": []}]}, {"timestamp": 1682701516, "sha": "84771a9f", "message": "feat(algebra/group/basic): `a * b ≠ b ↔ a ≠ 1` (#18635)\nA few convenient corollaries of existing lemmas and `a / 2 ≤ a ↔ 0 ≤ a`.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "mul_left_ne_self", []], ["add", "theorem", "mul_right_ne_self", []], ["add", "theorem", "self_ne_mul_left", []], ["add", "theorem", "self_ne_mul_right", []]]}, {"oldPath": "src/algebra/order/field/basic.lean", "newPath": "src/algebra/order/field/basic.lean", "changes": [["del", "theorem", "div_two_lt_of_pos", []], ["del", "theorem", "half_le_self", []], ["add", "theorem", "half_le_self_iff", []], ["del", "theorem", "half_lt_self", []], ["add", "theorem", "half_lt_self_iff", []]]}]}, {"timestamp": 1682691258, "sha": "c813ed7d", "message": "chore(data/finset/lattice): Remove `finset.sup_finset_image` (#18893)\nin favor of the identical `finset.sup_image` (up to argument order) in the same file.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["del", "theorem", "sup_finset_image", ["finset"]]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/symmetric.lean", "newPath": "src/ring_theory/mv_polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1682691257, "sha": "c7bce281", "message": "feat(field_theory/tower): generalize `rank_mul_rank` to rings (#18885)\nThis also renames `rank_mul_rank` to `lift_rank_mul_lift_rank`", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": [["add", "theorem", "finrank_mul_finrank'", ["finite_dimensional"]], ["mod", "theorem", "finrank_mul_finrank", ["finite_dimensional"]], ["add", "theorem", "lift_rank_mul_lift_rank", []], ["del", "theorem", "rank_mul_rank'", []], ["mod", "theorem", "rank_mul_rank", []]]}]}, {"timestamp": 1682691256, "sha": "f231b9d8", "message": "chore(measure_theory/integral/lebesgue): generalize lintegral_sub and lintegral_sub_le to ae_measurable (#18883)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_sub'", ["measure_theory"]], ["add", "theorem", "lintegral_sub_le'", ["measure_theory"]]]}]}, {"timestamp": 1682691254, "sha": "9c5398f2", "message": "feat(measure_theory/constructions/borel_space): add measurable_c{Inf/supr/infi} (#18882)\n`measurable_cSup` was already there.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "measurable_cInf", []], ["add", "theorem", "measurable_cinfi", []], ["add", "theorem", "measurable_csupr", []]]}]}, {"timestamp": 1682691253, "sha": "ef093414", "message": "chore(measure_theory/measure/haar_of_basis): axis-aligned parallepipeds are cuboids (#18829)\nThis was particularly annoying to prove; it feels like I might be missing some API somewhere.\nThis also includes a result that @YaelDillies proved for me that shows a parallepiped can be formed by summing all the elements on its primary edges.", "changes": [{"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "theorem", "parallelepiped_basis_fun", ["basis"]]]}, {"oldPath": "src/measure_theory/measure/haar_of_basis.lean", "newPath": "src/measure_theory/measure/haar_of_basis.lean", "changes": [["add", "theorem", "convex_parallelepiped", []], ["add", "theorem", "parallelepiped_eq_convex_hull", []], ["add", "theorem", "parallelepiped_eq_sum_segment", []], ["add", "theorem", "parallelepiped_single", []]]}]}, {"timestamp": 1682680668, "sha": "3974a774", "message": "chore(category_theory/limits/preserves/finite): avoid instances with unbound universes (#18890)\nThere were some instances with unbounded universe variables, which Lean 4 couldn't cope with (reasonably!).\nThis PR backports some changes made in https://github.com/leanprover-community/mathlib4/pull/3615 to remove these bad instances.", "changes": [{"oldPath": "src/category_theory/limits/preserves/finite.lean", "newPath": "src/category_theory/limits/preserves/finite.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}]}, {"timestamp": 1682680667, "sha": "fa230957", "message": "fix(algebra/big_operators): add missing `to_additive`s (#18878)\nThese lemmas were written before `pi.mul_single` existed.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_erase_lt_of_one_lt", ["finset"]], ["add", "theorem", "prod_pi_mul_single'", ["finset"]], ["add", "theorem", "prod_pi_mul_single", ["finset"]], ["del", "theorem", "sum_erase_lt_of_pos", ["finset"]], ["del", "theorem", "sum_pi_single'", ["finset"]], ["del", "theorem", "sum_pi_single", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["del", "theorem", "functions_ext'", ["add_monoid_hom"]], ["del", "theorem", "functions_ext", ["add_monoid_hom"]], ["add", "theorem", "univ_prod_mul_single", ["finset"]], ["del", "theorem", "univ_sum_single", ["finset"]], ["add", "theorem", "functions_ext'", ["monoid_hom"]], ["add", "theorem", "functions_ext", ["monoid_hom"]]]}]}, {"timestamp": 1682674416, "sha": "f95ecd88", "message": "chore(field_theory/tower): remove unneeded imports (#18891)", "changes": [{"oldPath": "docs/tutorial/representation_theory/etingof.lean", "newPath": "docs/tutorial/representation_theory/etingof.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}]}, {"timestamp": 1682674414, "sha": "16e59248", "message": "chore(topology/continuous_function/algebra): simplify definition and proof (#18888)\nThe definition isn't benefiting from the `coe_sort`, and the proof can save a lot of effort by staying within the subalgebra. This proof was proving annoying to port.", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}]}, {"timestamp": 1682667244, "sha": "c060baa7", "message": "chore(data/matrix/block): the block matrix of zeros is zero (#18879)", "changes": [{"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "from_blocks_zero", ["matrix"]]]}]}, {"timestamp": 1682667243, "sha": "0b899341", "message": "chore(mv_polynomial/funext): backport golfed proof (#18839)\nThis proof was timing out in https://github.com/leanprover-community/mathlib4/pull/3225, so I completely rewrote it using smaller lemmas. This is the backport.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "eval_eval₂", ["mv_polynomial"]], ["add", "theorem", "eval₂_id", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/mv_polynomial/polynomial.lean", "changes": [["add", "theorem", "eval_polynomial_eval_fin_succ_equiv", ["mv_polynomial"]], ["add", "theorem", "polynomial_eval_eval₂", ["mv_polynomial"]]]}]}, {"timestamp": 1682662947, "sha": "a5ff45a1", "message": "chore(category_theory/abelian): backport removal of abelian.has_finite_biproducts instance (#18740)\nThis backports a proposed removal of the `abelian.has_finite_biproducts` global instance, instead enabling it locally in the files that need it.\nThe reason for removing it is that it triggers the ~~dreaded~~ https://github.com/leanprover/lean4/issues/2055 during the simpNF linter in https://github.com/leanprover-community/mathlib4/pull/2769, the mathlib4 port of `category_theory.abelian.basic`.\nThis backport verifies that we won't run into further problems downstream if we (hopefully temporarily) remove these instances in mathlib4.", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "theorem", "has_finite_biproducts", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/opposite.lean", "newPath": "src/category_theory/abelian/opposite.lean", "changes": []}]}, {"timestamp": 1682629626, "sha": "b17e2720", "message": "feat(ring_theory/polynomial): add properties of `coeff (hermite n)` (#18837)\nAdded lemmas showing recursive relations between coefficients of `polynomial.hermite n`:\n- `coeff (hermite (n + 1)) 0 = -(coeff (hermite n) 1)`\n- `coeff (hermite (n + 1)) (k + 1) = coeff (hermite n) k - (k + 2) * (coeff (hermite n) (k + 2))`\nShowed some more properties of the coefficients of Hermite polynomials:\n- for `k>n`, the `k`th coefficient of the `n`th Hermite polynomial is zero\n- the `n`th Hermite polynomial is of degree `n`\n- the Hermite polynomials are monic", "changes": [{"oldPath": "src/ring_theory/polynomial/hermite.lean", "newPath": "src/ring_theory/polynomial/hermite.lean", "changes": [["add", "theorem", "coeff_hermite_of_lt", ["polynomial"]], ["add", "theorem", "coeff_hermite_of_odd_add", ["polynomial"]], ["add", "theorem", "coeff_hermite_self", ["polynomial"]], ["add", "theorem", "coeff_hermite_succ_succ", ["polynomial"]], ["add", "theorem", "coeff_hermite_succ_zero", ["polynomial"]], ["add", "theorem", "degree_hermite", ["polynomial"]], ["add", "theorem", "hermite_monic", ["polynomial"]], ["add", "theorem", "leading_coeff_hermite", ["polynomial"]], ["add", "theorem", "nat_degree_hermite", ["polynomial"]]]}]}, {"timestamp": 1682594330, "sha": "fa78268d", "message": "chore(ring_theory/finiteness): generalize `module.finite.trans` (#18880)\nThis was stated for algebras but holds more generally for modules.\nThis now can be used to prove `finite_dimensional.trans`.\nA few downstream proofs were providing the instances arguments explicitly and consequently broke.\nPassing those instances via `haveI` fixes those proofs and makes them less fragile.", "changes": [{"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["mod", "theorem", "trans", ["module", "finite"]]]}]}, {"timestamp": 1682585020, "sha": "04cdee31", "message": "feat(linear_algebra/basis): add basis.restrict_scalars (#18814)", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "mem_span_iff_repr_mem", ["basis"]], ["add", "theorem", "restrict_scalars_apply", ["basis"]], ["add", "theorem", "restrict_scalars_repr_apply", ["basis"]]]}]}, {"timestamp": 1682572686, "sha": "9d2f0748", "message": "chore(*): add mathlib4 synchronization comments (#18853)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.tannaka`\n* `algebra.homology.homotopy_category`\n* `algebra.homology.short_exact.preadditive`\n* `algebraic_topology.dold_kan.equivalence_additive`\n* `algebraic_topology.dold_kan.functor_gamma`\n* `algebraic_topology.dold_kan.gamma_comp_n`\n* `algebraic_topology.dold_kan.homotopy_equivalence`\n* `algebraic_topology.dold_kan.n_comp_gamma`\n* `algebraic_topology.dold_kan.normalized`\n* `analysis.box_integral.partition.basic`\n* `analysis.box_integral.partition.split`\n* `analysis.convex.caratheodory`\n* `analysis.convex.combination`\n* `analysis.convex.independent`\n* `analysis.convex.jensen`\n* `analysis.convex.join`\n* `analysis.convex.normed`\n* `analysis.convex.simplicial_complex.basic`\n* `analysis.convex.topology`\n* `analysis.locally_convex.bounded`\n* `analysis.normed_space.conformal_linear_map`\n* `analysis.normed_space.linear_isometry`\n* `analysis.normed_space.star.basic`\n* `analysis.seminorm`\n* `category_theory.abelian.opposite`\n* `category_theory.abelian.subobject`\n* `category_theory.adjunction.adjoint_functor_theorems`\n* `category_theory.concrete_category.unbundled_hom`\n* `category_theory.generator`\n* `category_theory.limits.constructions.weakly_initial`\n* `category_theory.limits.preserves.functor_category`\n* `category_theory.limits.presheaf`\n* `category_theory.limits.shapes.wide_equalizers`\n* `category_theory.linear.yoneda`\n* `category_theory.preadditive.generator`\n* `category_theory.preadditive.yoneda.basic`\n* `category_theory.subobject.comma`\n* `data.real.hyperreal`\n* `data.string.defs`\n* `linear_algebra.affine_space.basis`\n* `linear_algebra.finite_dimensional`\n* `linear_algebra.matrix.absolute_value`\n* `linear_algebra.matrix.circulant`\n* `linear_algebra.matrix.nonsingular_inverse`\n* `linear_algebra.vandermonde`\n* `topology.extremally_disconnected`\n* `topology.instances.matrix`", "changes": [{"oldPath": "src/algebra/category/Module/tannaka.lean", "newPath": "src/algebra/category/Module/tannaka.lean", "changes": []}, {"oldPath": "src/algebra/homology/homotopy_category.lean", "newPath": "src/algebra/homology/homotopy_category.lean", "changes": []}, {"oldPath": "src/algebra/homology/short_exact/preadditive.lean", "newPath": "src/algebra/homology/short_exact/preadditive.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/equivalence_additive.lean", "newPath": "src/algebraic_topology/dold_kan/equivalence_additive.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/functor_gamma.lean", "newPath": "src/algebraic_topology/dold_kan/functor_gamma.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/gamma_comp_n.lean", "newPath": "src/algebraic_topology/dold_kan/gamma_comp_n.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/homotopy_equivalence.lean", "newPath": "src/algebraic_topology/dold_kan/homotopy_equivalence.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/n_comp_gamma.lean", "newPath": "src/algebraic_topology/dold_kan/n_comp_gamma.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/normalized.lean", "newPath": "src/algebraic_topology/dold_kan/normalized.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/split.lean", "newPath": "src/analysis/box_integral/partition/split.lean", "changes": []}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/convex/independent.lean", "newPath": "src/analysis/convex/independent.lean", "changes": []}, {"oldPath": "src/analysis/convex/jensen.lean", "newPath": "src/analysis/convex/jensen.lean", "changes": []}, {"oldPath": "src/analysis/convex/join.lean", "newPath": "src/analysis/convex/join.lean", "changes": []}, {"oldPath": "src/analysis/convex/normed.lean", "newPath": "src/analysis/convex/normed.lean", "changes": []}, {"oldPath": "src/analysis/convex/simplicial_complex/basic.lean", "newPath": "src/analysis/convex/simplicial_complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/opposite.lean", "newPath": "src/category_theory/abelian/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/subobject.lean", "newPath": "src/category_theory/abelian/subobject.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/adjoint_functor_theorems.lean", "newPath": "src/category_theory/adjunction/adjoint_functor_theorems.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/unbundled_hom.lean", "newPath": "src/category_theory/concrete_category/unbundled_hom.lean", "changes": []}, {"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/weakly_initial.lean", "newPath": "src/category_theory/limits/constructions/weakly_initial.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_equalizers.lean", "newPath": "src/category_theory/limits/shapes/wide_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/linear/yoneda.lean", "newPath": "src/category_theory/linear/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/generator.lean", "newPath": "src/category_theory/preadditive/generator.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/yoneda/basic.lean", "newPath": "src/category_theory/preadditive/yoneda/basic.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/comma.lean", "newPath": "src/category_theory/subobject/comma.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/absolute_value.lean", "newPath": "src/linear_algebra/matrix/absolute_value.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/circulant.lean", "newPath": "src/linear_algebra/matrix/circulant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": []}, {"oldPath": "src/topology/extremally_disconnected.lean", "newPath": "src/topology/extremally_disconnected.lean", "changes": []}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": []}]}, {"timestamp": 1682542502, "sha": "57911c5a", "message": "chore(finsupp/basic): weaken hypotheses (#18874)\nthese are already in mathlib4, I just missed them in mathlib3.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_smul", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]], ["mod", "theorem", "finsupp", ["is_smul_regular"]]]}]}, {"timestamp": 1682533270, "sha": "9b2b58d6", "message": "feat(measure_theory/constructions): add the Borel isomorphism theorem. (#18864)\nAdd a file `measure_theory/constructions/borel_isomorphism.lean` with several versions of the Borel isomorphism theorem. Also add fairly small supporting lemmas in several other files. Most notable here is the addition of a type class for measurable_spaces whose sigma-algebras are generated by some countable set, and a theorem that such spaces admit measurable injections to the Cantor space.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": [["add", "def", "borel_schroeder_bernstein", ["polish_space"]], ["add", "def", "measurable_equiv", ["polish_space", "equiv"]], ["add", "def", "measurable_equiv_nat_bool_of_not_countable", ["polish_space"]], ["add", "def", "measurable_equiv_of_not_countable", ["polish_space"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_injection_cantor_of_countably_generated", ["measurable_space"]], ["add", "theorem", "measurable_to_bool", []], ["add", "theorem", "measurable_to_countable'", []]]}, {"oldPath": "src/topology/perfect.lean", "newPath": "src/topology/perfect.lean", "changes": [["add", "theorem", "exists_nat_bool_injection_of_not_countable", ["is_closed"]]]}]}, {"timestamp": 1682533268, "sha": "dc7ac07a", "message": "chore(algebra/star/basic): generalize quaternion lemmas (#18802)\nWe already had most of these lemmas specialized to quaternions; this generalizes them to any star ring.\nWe should consider replacing `quaternion.conj` with `star` in future.", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["mod", "theorem", "conj_conj_mul", ["quaternion_algebra"]], ["mod", "theorem", "conj_mul_conj", ["quaternion_algebra"]]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "commute_star_comm", []], ["add", "theorem", "commute_star_star", []], ["add", "theorem", "semiconj_by_star_star_star", []], ["add", "theorem", "star_inj", []], ["add", "theorem", "star_mul_star", []], ["add", "theorem", "star_star_mul", []]]}]}, {"timestamp": 1682533267, "sha": "cdb01be3", "message": "feat(algebra/big_operators/fin): The equivalence between `fin n → fin m` and `fin (m ^ n)` (#14817)", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "def", "fin_function_fin_equiv", []], ["add", "theorem", "fin_function_fin_equiv_apply", []], ["add", "theorem", "fin_function_fin_equiv_single", []], ["add", "def", "fin_pi_fin_equiv", []], ["add", "theorem", "fin_pi_fin_equiv_apply", []], ["add", "theorem", "fin_pi_fin_equiv_single", []]]}]}, {"timestamp": 1682524864, "sha": "178a3265", "message": "chore(topology/category/Top/limits): split file (#18871)\nPer \nhttps://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.233487.20last.20minute.20split.3F\nThis file is already being ported at https://github.com/leanprover-community/mathlib4/pull/3487, but:\n* it's not going so well right now\n* it is going well up to the point of the proposed new `limits/basic.lean`\n* that is sufficient to port the files needed for Copenhagen", "changes": [{"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": []}, {"oldPath": "src/category_theory/cofiltered_system.lean", "newPath": "src/category_theory/cofiltered_system.lean", "changes": []}, {"oldPath": "src/category_theory/extensive.lean", "newPath": "src/category_theory/extensive.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/basic.lean", "newPath": "src/topology/category/CompHaus/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": null, "changes": [["del", "def", "binary_cofan", ["Top"]], ["del", "def", "binary_cofan_is_colimit", ["Top"]], ["del", "theorem", "binary_cofan_is_colimit_iff", ["Top"]], ["del", "theorem", "coequalizer_is_open_iff", ["Top"]], ["del", "theorem", "coinduced_of_is_colimit", ["Top"]], ["del", "def", "colimit_cocone", ["Top"]], ["del", "def", "colimit_cocone_is_colimit", ["Top"]], ["del", "theorem", "colimit_is_open_iff", ["Top"]], ["del", "theorem", "colimit_topology", ["Top"]], ["del", "theorem", "embedding_of_pullback_embeddings", ["Top"]], ["del", "theorem", "embedding_prod_map", ["Top"]], ["del", "theorem", "embedding_pullback_to_prod", ["Top"]], ["del", "theorem", "fst_embedding_of_right_embedding", ["Top"]], ["del", "theorem", "fst_iso_of_right_embedding_range_subset", ["Top"]], ["del", "theorem", "fst_open_embedding_of_right_open_embedding", ["Top"]], ["del", "theorem", "induced_of_is_limit", ["Top"]], ["del", "theorem", "inducing_prod_map", ["Top"]], ["del", "theorem", "inducing_pullback_to_prod", ["Top"]], ["del", "def", "initial_iso_pempty", ["Top"]], ["del", "def", "is_initial_pempty", ["Top"]], ["del", "def", "is_terminal_punit", ["Top"]], ["del", "theorem", "is_topological_basis_cofiltered_limit", ["Top"]], ["del", "def", "limit_cone", ["Top"]], ["del", "def", "limit_cone_infi", ["Top"]], ["del", "def", "limit_cone_infi_is_limit", ["Top"]], ["del", "def", "limit_cone_is_limit", ["Top"]], ["del", "theorem", "limit_topology", ["Top"]], ["del", "theorem", "nonempty_limit_cone_of_compact_t2_cofiltered_system", ["Top"]], ["del", "theorem", "open_embedding_of_pullback_open_embeddings", ["Top"]], ["del", "theorem", "closed", ["Top", "partial_sections"]], ["del", "theorem", "directed", ["Top", "partial_sections"]], ["del", "theorem", "nonempty", ["Top", "partial_sections"]], ["del", "def", "partial_sections", ["Top"]], ["del", "def", "pi_fan", ["Top"]], ["del", "def", "pi_fan_is_limit", ["Top"]], ["del", "def", "pi_iso_pi", ["Top"]], ["del", "theorem", "pi_iso_pi_hom_apply", ["Top"]], ["del", "theorem", "pi_iso_pi_inv_π", ["Top"]], ["del", "theorem", "pi_iso_pi_inv_π_apply", ["Top"]], ["del", "def", "pi_π", ["Top"]], ["del", "def", "prod_binary_fan", ["Top"]], ["del", "def", "prod_binary_fan_is_limit", ["Top"]], ["del", "def", "prod_fst", ["Top"]], ["del", "def", "prod_iso_prod", ["Top"]], ["del", "theorem", "prod_iso_prod_hom_apply", ["Top"]], ["del", "theorem", "prod_iso_prod_hom_fst", ["Top"]], ["del", "theorem", "prod_iso_prod_hom_snd", ["Top"]], ["del", "theorem", "prod_iso_prod_inv_fst", ["Top"]], ["del", "theorem", "prod_iso_prod_inv_snd", ["Top"]], ["del", "def", "prod_snd", ["Top"]], ["del", "theorem", "prod_topology", ["Top"]], ["del", "def", "pullback_cone", ["Top"]], ["del", "def", "pullback_cone_is_limit", ["Top"]], ["del", "def", "pullback_fst", ["Top"]], ["del", "theorem", "pullback_fst_image_snd_preimage", ["Top"]], ["del", "theorem", "pullback_fst_range", ["Top"]], ["del", "def", "pullback_iso_prod_subtype", ["Top"]], ["del", "theorem", "pullback_iso_prod_subtype_hom_apply", ["Top"]], ["del", "theorem", "pullback_iso_prod_subtype_hom_fst", ["Top"]], ["del", "theorem", "pullback_iso_prod_subtype_hom_snd", ["Top"]], ["del", "theorem", "pullback_iso_prod_subtype_inv_fst", ["Top"]], ["del", "theorem", "pullback_iso_prod_subtype_inv_fst_apply", ["Top"]], ["del", "theorem", "pullback_iso_prod_subtype_inv_snd", ["Top"]], ["del", "theorem", "pullback_iso_prod_subtype_inv_snd_apply", ["Top"]], ["del", "theorem", "pullback_map_embedding_of_embeddings", ["Top"]], ["del", "theorem", "pullback_map_open_embedding_of_open_embeddings", ["Top"]], ["del", "def", "pullback_snd", ["Top"]], ["del", "theorem", "pullback_snd_image_fst_preimage", ["Top"]], ["del", "theorem", "pullback_snd_range", ["Top"]], ["del", "theorem", "pullback_topology", ["Top"]], ["del", "theorem", "range_prod_map", ["Top"]], ["del", "theorem", "range_pullback_map", ["Top"]], ["del", "theorem", "range_pullback_to_prod", ["Top"]], ["del", "def", "sigma_cofan", ["Top"]], ["del", "def", "sigma_cofan_is_colimit", ["Top"]], ["del", "def", "sigma_iso_sigma", ["Top"]], ["del", "theorem", "sigma_iso_sigma_hom_ι", ["Top"]], ["del", "theorem", "sigma_iso_sigma_hom_ι_apply", ["Top"]], ["del", "theorem", "sigma_iso_sigma_inv_apply", ["Top"]], ["del", "def", "sigma_ι", ["Top"]], ["del", "theorem", "snd_embedding_of_left_embedding", ["Top"]], ["del", "theorem", "snd_iso_of_left_embedding_range_subset", ["Top"]], ["del", "theorem", "snd_open_embedding_of_left_open_embedding", ["Top"]], ["del", "def", "terminal_iso_punit", ["Top"]]]}, {"oldPath": null, "newPath": "src/topology/category/Top/limits/basic.lean", "changes": [["add", "def", "colimit_cocone", ["Top"]], ["add", "def", "colimit_cocone_is_colimit", ["Top"]], ["add", "def", "initial_iso_pempty", ["Top"]], ["add", "def", "is_initial_pempty", ["Top"]], ["add", "def", "is_terminal_punit", ["Top"]], ["add", "def", "limit_cone", ["Top"]], ["add", "def", "limit_cone_infi", ["Top"]], ["add", "def", "limit_cone_infi_is_limit", ["Top"]], ["add", "def", "limit_cone_is_limit", ["Top"]], ["add", "def", "terminal_iso_punit", ["Top"]]]}, {"oldPath": null, "newPath": "src/topology/category/Top/limits/cofiltered.lean", "changes": [["add", "theorem", "is_topological_basis_cofiltered_limit", ["Top"]]]}, {"oldPath": null, "newPath": "src/topology/category/Top/limits/konig.lean", "changes": [["add", "theorem", "nonempty_limit_cone_of_compact_t2_cofiltered_system", ["Top"]], ["add", "theorem", "closed", ["Top", "partial_sections"]], ["add", "theorem", "directed", ["Top", "partial_sections"]], ["add", "theorem", "nonempty", ["Top", "partial_sections"]], ["add", "def", "partial_sections", ["Top"]]]}, {"oldPath": null, "newPath": "src/topology/category/Top/limits/products.lean", "changes": [["add", "def", "binary_cofan", ["Top"]], ["add", "def", "binary_cofan_is_colimit", ["Top"]], ["add", "theorem", "binary_cofan_is_colimit_iff", ["Top"]], ["add", "theorem", "embedding_prod_map", ["Top"]], ["add", "theorem", "induced_of_is_limit", ["Top"]], ["add", "theorem", "inducing_prod_map", ["Top"]], ["add", "theorem", "limit_topology", ["Top"]], ["add", "def", "pi_fan", ["Top"]], ["add", "def", "pi_fan_is_limit", ["Top"]], ["add", "def", "pi_iso_pi", ["Top"]], ["add", "theorem", "pi_iso_pi_hom_apply", ["Top"]], ["add", "theorem", "pi_iso_pi_inv_π", ["Top"]], ["add", "theorem", "pi_iso_pi_inv_π_apply", ["Top"]], ["add", "def", "pi_π", ["Top"]], ["add", "def", "prod_binary_fan", ["Top"]], ["add", "def", "prod_binary_fan_is_limit", ["Top"]], ["add", "def", "prod_fst", ["Top"]], ["add", "def", "prod_iso_prod", ["Top"]], ["add", "theorem", "prod_iso_prod_hom_apply", ["Top"]], ["add", "theorem", "prod_iso_prod_hom_fst", ["Top"]], ["add", "theorem", "prod_iso_prod_hom_snd", ["Top"]], ["add", "theorem", "prod_iso_prod_inv_fst", ["Top"]], ["add", "theorem", "prod_iso_prod_inv_snd", ["Top"]], ["add", "def", "prod_snd", ["Top"]], ["add", "theorem", "prod_topology", ["Top"]], ["add", "theorem", "range_prod_map", ["Top"]], ["add", "def", "sigma_cofan", ["Top"]], ["add", "def", "sigma_cofan_is_colimit", ["Top"]], ["add", "def", "sigma_iso_sigma", ["Top"]], ["add", "theorem", "sigma_iso_sigma_hom_ι", ["Top"]], ["add", "theorem", "sigma_iso_sigma_hom_ι_apply", ["Top"]], ["add", "theorem", "sigma_iso_sigma_inv_apply", ["Top"]], ["add", "def", "sigma_ι", ["Top"]]]}, {"oldPath": null, "newPath": "src/topology/category/Top/limits/pullbacks.lean", "changes": [["add", "theorem", "coequalizer_is_open_iff", ["Top"]], ["add", "theorem", "coinduced_of_is_colimit", ["Top"]], ["add", "theorem", "colimit_is_open_iff", ["Top"]], ["add", "theorem", "colimit_topology", ["Top"]], ["add", "theorem", "embedding_of_pullback_embeddings", ["Top"]], ["add", "theorem", "embedding_pullback_to_prod", ["Top"]], ["add", "theorem", "fst_embedding_of_right_embedding", ["Top"]], ["add", "theorem", "fst_iso_of_right_embedding_range_subset", ["Top"]], ["add", "theorem", "fst_open_embedding_of_right_open_embedding", ["Top"]], ["add", "theorem", "inducing_pullback_to_prod", ["Top"]], ["add", "theorem", "open_embedding_of_pullback_open_embeddings", ["Top"]], ["add", "def", "pullback_cone", ["Top"]], ["add", "def", "pullback_cone_is_limit", ["Top"]], ["add", "def", "pullback_fst", ["Top"]], ["add", "theorem", "pullback_fst_image_snd_preimage", ["Top"]], ["add", "theorem", "pullback_fst_range", ["Top"]], ["add", "def", "pullback_iso_prod_subtype", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_hom_apply", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_hom_fst", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_hom_snd", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_fst", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_fst_apply", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_snd", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_snd_apply", ["Top"]], ["add", "theorem", "pullback_map_embedding_of_embeddings", ["Top"]], ["add", "theorem", "pullback_map_open_embedding_of_open_embeddings", ["Top"]], ["add", "def", "pullback_snd", ["Top"]], ["add", "theorem", "pullback_snd_image_fst_preimage", ["Top"]], ["add", "theorem", "pullback_snd_range", ["Top"]], ["add", "theorem", "pullback_topology", ["Top"]], ["add", "theorem", "range_pullback_map", ["Top"]], ["add", "theorem", "range_pullback_to_prod", ["Top"]], ["add", "theorem", "snd_embedding_of_left_embedding", ["Top"]], ["add", "theorem", "snd_iso_of_left_embedding_range_subset", ["Top"]], ["add", "theorem", "snd_open_embedding_of_left_open_embedding", ["Top"]]]}, {"oldPath": "src/topology/gluing.lean", "newPath": "src/topology/gluing.lean", "changes": []}]}, {"timestamp": 1682524863, "sha": "fa2cb8a9", "message": "feat(data/set/pointwise/big_operators): image distributes across pointwise big operators (#18840)\nThe main results here are:\n* `set.image_finset_prod : f '' (∏ i in m, s i) = (∏ i in m, f '' s i)`, which says that the image under a monoid morphism commutes with the pointwise n-ary product of sets\n* `set.image_finset_prod_pi : (λ f : ι → α, ∏ i in l, f i) '' (l : set ι).pi S = (∏ i in l, S i)`, which says that turning a family of sets into a set of families and taking the product over each family is the same as taking the pointwise product.\nBoth are n-ary versions of existing binary results.", "changes": [{"oldPath": "src/data/set/pointwise/big_operators.lean", "newPath": "src/data/set/pointwise/big_operators.lean", "changes": [["add", "theorem", "image_finset_prod", ["set"]], ["add", "theorem", "image_finset_prod_pi", ["set"]], ["add", "theorem", "image_fintype_prod_pi", ["set"]], ["add", "theorem", "image_list_prod", ["set"]], ["add", "theorem", "image_multiset_prod", ["set"]]]}]}, {"timestamp": 1682502961, "sha": "b5665fd3", "message": "feat(data/matrix/block): injectivity lemmas (#18842)\nBlock matrices are equal if their blocks are equal", "changes": [{"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "block_diagonal'_inj", ["matrix"]], ["add", "theorem", "block_diagonal'_injective", ["matrix"]], ["add", "theorem", "block_diagonal_inj", ["matrix"]], ["add", "theorem", "block_diagonal_injective", ["matrix"]], ["add", "theorem", "ext_iff_blocks", ["matrix"]], ["add", "theorem", "from_blocks_inj", ["matrix"]]]}]}, {"timestamp": 1682496581, "sha": "83df6d6e", "message": "feat(measure_theory/measure/haar_of_basis): put the canonical measure on euclidean space (#18870)", "changes": [{"oldPath": "src/measure_theory/measure/haar_of_basis.lean", "newPath": "src/measure_theory/measure/haar_of_basis.lean", "changes": [["add", "theorem", "coe_measurable_equiv", ["euclidean_space"]]]}]}, {"timestamp": 1682473580, "sha": "8000bbbe", "message": "feat(analysis/normed_space/basic): spheres have no interior (#18869)\nThis follows the pattern set by the nearby lemmas of having a primed and unprimed version.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "frontier_sphere'", []], ["add", "theorem", "frontier_sphere", []], ["add", "theorem", "interior_sphere'", []], ["add", "theorem", "interior_sphere", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "closure_sphere", ["metric"]]]}]}, {"timestamp": 1682463789, "sha": "f0b3759a", "message": "chore(set_theory/zfc/basic): reverse `sInter_coe` (#18773)\nIt now matches `coe_sUnion`, and works as a `norm_cast` lemma.\nMathlib 4: https://github.com/leanprover-community/mathlib4/pull/3345", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "coe_sInter", ["Class"]], ["del", "theorem", "sInter_coe", ["Class"]]]}]}, {"timestamp": 1682463788, "sha": "52fa514e", "message": "feat(data/set/finite): Add lemmas relating definitions of infinite sets (#18620)\nProve the following lemmas (and their dual)\n* `set.infinite_of_forall_exists_lt`: `(∀ a, ∃ b ∈ s, a < b) → s.infinite` in a nonempty preorder\n* `set.infinite_iff_exists_lt`: `(∀ a, ∃ b ∈ s, a < b) ↔ s.infinite` in a locally finite order with a bottom element", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "exists_gt", ["set", "infinite"]], ["add", "theorem", "exists_lt", ["set", "infinite"]], ["add", "theorem", "not_bdd_above", ["set", "infinite"]], ["add", "theorem", "not_bdd_below", ["set", "infinite"]], ["add", "theorem", "infinite_iff_exists_gt", ["set"]], ["add", "theorem", "infinite_iff_exists_lt", ["set"]]]}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "exists_nat_lt", ["set", "infinite"]], ["add", "theorem", "infinite_of_forall_exists_gt", ["set"]], ["add", "theorem", "infinite_of_forall_exists_lt", ["set"]]]}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": []}]}, {"timestamp": 1682458469, "sha": "efe03a53", "message": "fix(topology/continuous_function/algebra): let `continuous_map.module'` use a `semiring` instead of ` ring` (#18868)\nThis fixes an issue where Lean couldn't recognize via TC inference that, for a topological semiring `R`, that `C(R, R)` is an `R`-module, despite the fact that it knows it is an `R`-algebra through `continuous_map.algebra`. All that is necessary is to weaken the type class assumptions.", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1682444590, "sha": "d2d964c6", "message": "feat(topology/vector_bundle/basic): define in_coordinates (#18826)\n* From the sphere eversion project", "changes": [{"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["add", "def", "in_coordinates", ["continuous_linear_map"]], ["add", "theorem", "in_coordinates_eq", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": [["del", "def", "continuous_linear_map", ["bundle"]], ["add", "theorem", "hom_trivialization_at_apply", []], ["add", "theorem", "hom_trivialization_at_source", []], ["add", "theorem", "hom_trivialization_at_target", []]]}]}, {"timestamp": 1682427242, "sha": "98bd247d", "message": "feat(model_theory/types): Realized types (#17848)\nDefines `first_order.language.Theory.type_of`, the type of a given tuple.\nDefines what it means for a type to be realized.", "changes": [{"oldPath": "src/model_theory/types.lean", "newPath": "src/model_theory/types.lean", "changes": [["add", "theorem", "formula_mem_type_of", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "mem_type_of", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "exists_Model_is_realized_in", ["first_order", "language", "Theory"]], ["add", "def", "realized_types", ["first_order", "language", "Theory"]], ["add", "def", "type_of", ["first_order", "language", "Theory"]]]}]}, {"timestamp": 1682414998, "sha": "aa68866e", "message": "feat(analysis/calculus/cont_diff): bound for the n-th derivative of a composition (#18643)\nWe prove the bound `n! * C * D^n` for the `n`-th derivative of `g ∘ f` if the derivatives of `g` are bounded by `C` and the `i`-th derivative of `f` is bounded by `D^i`.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "norm_iterated_fderiv_comp_le", []], ["add", "theorem", "norm_iterated_fderiv_within_comp_le", []], ["add", "theorem", "norm_iterated_fderiv_within_comp_le_aux", []]]}]}, {"timestamp": 1682341766, "sha": "2651125b", "message": "feat(algebra & polynomial): some (q)smul lemmas+generalisations (#18852)\nThere is many generalisations around these areas too, but I am specifically not doing them as it will be easier done after the port. I am only doing what I need for merging in the splitting field diamond fix.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "smul_one_eq_coe", ["rat"]]]}, {"oldPath": "src/algebra/field/defs.lean", "newPath": "src/algebra/field/defs.lean", "changes": [["add", "theorem", "smul_one_eq_coe", ["rat"]]]}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_smul", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]], ["mod", "theorem", "smul_single", ["finsupp"]], ["mod", "theorem", "finsupp", ["is_smul_regular"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "rat_smul_eq_C_mul", ["polynomial"]], ["mod", "theorem", "smul_C", ["polynomial"]], ["mod", "theorem", "smul_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["mod", "theorem", "coeff_smul", ["polynomial"]]]}]}, {"timestamp": 1682327304, "sha": "a07a7ae9", "message": "refactor(linear_algebra/matrix/nonsingular_inverse): move results about block matrices to `schur_complement` (#18850)\nThis gets these out of the critical path for porting, and also balances the size of these files a little better.\nI've added myself second rather than last on the author list since the bulk of these moved lemmas are mine, and they are about equal in number of lines to the existing lemmas.\nThe lemmas have been moved without modification, though the module docstring for `schur_complement` has been adapted accordingly.", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["del", "theorem", "det_from_blocks_one₁₁", ["matrix"]], ["del", "theorem", "det_from_blocks_one₂₂", ["matrix"]], ["del", "theorem", "det_from_blocks₁₁", ["matrix"]], ["del", "theorem", "det_from_blocks₂₂", ["matrix"]], ["del", "theorem", "det_mul_add_one_comm", ["matrix"]], ["del", "theorem", "det_one_add_col_mul_row", ["matrix"]], ["del", "theorem", "det_one_add_mul_comm", ["matrix"]], ["del", "theorem", "det_one_sub_mul_comm", ["matrix"]], ["del", "theorem", "from_blocks_eq_of_invertible₁₁", ["matrix"]], ["del", "theorem", "from_blocks_eq_of_invertible₂₂", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/schur_complement.lean", "newPath": "src/linear_algebra/matrix/schur_complement.lean", "changes": [["add", "theorem", "det_from_blocks_one₁₁", ["matrix"]], ["add", "theorem", "det_from_blocks_one₂₂", ["matrix"]], ["add", "theorem", "det_from_blocks₁₁", ["matrix"]], ["add", "theorem", "det_from_blocks₂₂", ["matrix"]], ["add", "theorem", "det_mul_add_one_comm", ["matrix"]], ["add", "theorem", "det_one_add_col_mul_row", ["matrix"]], ["add", "theorem", "det_one_add_mul_comm", ["matrix"]], ["add", "theorem", "det_one_sub_mul_comm", ["matrix"]], ["add", "theorem", "from_blocks_eq_of_invertible₁₁", ["matrix"]], ["add", "theorem", "from_blocks_eq_of_invertible₂₂", ["matrix"]]]}]}, {"timestamp": 1682294853, "sha": "74ad1c88", "message": "chore(zmod/basic): alphabetise imports (#18858)\nThis wasn't noticed in #18856", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1682285324, "sha": "473ee9e0", "message": "chore(zmod/basic): remove unneeded import (#18856)\nThis file was importing a weird dependency; I am now minimising this.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1682204368, "sha": "09079525", "message": "chore(analysis/normed/group/seminorm): use coe_nonneg instead of ℝ≥0.prop (#18833)\nThe change in `analysis.seminorm` has already been forward-ported in https://github.com/leanprover-community/mathlib4/pull/3484 to fix an error. Presumably the other changes will prevent the corresponding errors when we get to porting these files.\nThis is needed in Lean 4 because `.prop` is about `Subtype.val` but `.coe_nonneg` is about `NNReal.toReal`.\nThe two are defeq (and there is a simp lemma `NNReal.val_eq_coe` to convert between them), but not reducibly equal.\nIn Lean 3 both are just about `coe`, so the change doesn't matter.", "changes": [{"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}]}, {"timestamp": 1682176704, "sha": "7e281def", "message": "feat(topology/extremally_disconnected): Extremally disconnected topological spaces (#8196)\nFrom LTE\nAuthor: Johan Commelin\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/267928-condensed-mathematics/topic/extremally.20disconnected.20sets)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/topology/extremally_disconnected.lean", "changes": [["add", "def", "projective", ["compact_t2"]], ["add", "theorem", "projective", ["stone_cech"]]]}]}, {"timestamp": 1682171432, "sha": "323b7f26", "message": "feat(analysis/calculus/cont_diff): iterated derivatives of maps into clm's (#18756)", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "iterated_fderiv_const_of_ne", []], ["add", "theorem", "iterated_fderiv_succ_const", []], ["add", "theorem", "norm_iterated_fderiv_clm_apply", []], ["add", "theorem", "norm_iterated_fderiv_clm_apply_const", []], ["add", "theorem", "norm_iterated_fderiv_within_clm_apply", []], ["add", "theorem", "norm_iterated_fderiv_within_clm_apply_const", []]]}]}, {"timestamp": 1682151746, "sha": "4f81bc21", "message": "chore(*): add mathlib4 synchronization comments (#18851)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.monoid_algebra.ideal`\n* `algebra.ring_quot`\n* `algebraic_topology.dold_kan.decomposition`\n* `algebraic_topology.dold_kan.degeneracies`\n* `algebraic_topology.dold_kan.n_reflects_iso`\n* `algebraic_topology.dold_kan.split_simplicial_object`\n* `category_theory.adjunction.over`\n* `data.polynomial.module`\n* `linear_algebra.affine_space.independent`\n* `linear_algebra.matrix.adjugate`\n* `linear_algebra.matrix.nondegenerate`\n* `ring_theory.mv_polynomial.ideal`", "changes": [{"oldPath": "src/algebra/monoid_algebra/ideal.lean", "newPath": "src/algebra/monoid_algebra/ideal.lean", "changes": []}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/decomposition.lean", "newPath": "src/algebraic_topology/dold_kan/decomposition.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/degeneracies.lean", "newPath": "src/algebraic_topology/dold_kan/degeneracies.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/n_reflects_iso.lean", "newPath": "src/algebraic_topology/dold_kan/n_reflects_iso.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/split_simplicial_object.lean", "newPath": "src/algebraic_topology/dold_kan/split_simplicial_object.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/over.lean", "newPath": "src/category_theory/adjunction/over.lean", "changes": []}, {"oldPath": "src/data/polynomial/module.lean", "newPath": "src/data/polynomial/module.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nondegenerate.lean", "newPath": "src/linear_algebra/matrix/nondegenerate.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/ideal.lean", "newPath": "src/ring_theory/mv_polynomial/ideal.lean", "changes": []}]}, {"timestamp": 1682147382, "sha": "7dfe8583", "message": "feat(geometry/manifold/vector_bundle/tangent): some equations about trivializations (#18825)\n* From the sphere eversion project", "changes": [{"oldPath": "src/geometry/manifold/vector_bundle/tangent.lean", "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": [["add", "theorem", "continuous_linear_map_at_model_space", ["tangent_bundle"]], ["add", "theorem", "coord_change_model_space", ["tangent_bundle"]], ["add", "theorem", "symmL_model_space", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_continuous_linear_map_at", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_symmL", ["tangent_bundle"]], ["add", "theorem", "tangent_bundle_core_coord_change_model_space", []]]}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["add", "theorem", "local_triv_continuous_linear_map_at", ["vector_bundle_core"]], ["add", "theorem", "local_triv_symmL", ["vector_bundle_core"]], ["del", "def", "proj", ["vector_bundle_core"]], ["del", "def", "total_space", ["vector_bundle_core"]], ["add", "theorem", "trivialization_at_continuous_linear_map_at", ["vector_bundle_core"]], ["add", "theorem", "trivialization_at_coord_change_eq", ["vector_bundle_core"]], ["add", "theorem", "trivialization_at_symmL", ["vector_bundle_core"]]]}]}, {"timestamp": 1682143237, "sha": "d4817f88", "message": "feat(measure_theory/integral/integral_eq_improper): fundamental theorem of calculus on (a, +\\infty) (#18844)\nIt became apparent in several applications that we are missing API here. As an illustration, two existing proofs in the library are shortened with the new API.", "changes": [{"oldPath": "src/analysis/special_functions/gaussian.lean", "newPath": "src/analysis/special_functions/gaussian.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/exp_decay.lean", "newPath": "src/measure_theory/integral/exp_decay.lean", "changes": [["del", "theorem", "integral_exp_neg_le", []]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["add", "theorem", "integrable_on_Ioi_deriv_of_nonneg'", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_deriv_of_nonneg", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_deriv_of_nonpos'", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_deriv_of_nonpos", ["measure_theory"]], ["add", "theorem", "integral_Ioi_of_has_deriv_at_of_nonneg'", ["measure_theory"]], ["add", "theorem", "integral_Ioi_of_has_deriv_at_of_nonneg", ["measure_theory"]], ["add", "theorem", "integral_Ioi_of_has_deriv_at_of_nonpos'", ["measure_theory"]], ["add", "theorem", "integral_Ioi_of_has_deriv_at_of_nonpos", ["measure_theory"]], ["add", "theorem", "integral_Ioi_of_has_deriv_at_of_tendsto'", ["measure_theory"]], ["add", "theorem", "integral_Ioi_of_has_deriv_at_of_tendsto", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "integrable_on_deriv_of_nonneg", ["interval_integral"]], ["mod", "theorem", "integrable_on_deriv_right_of_nonneg", ["interval_integral"]]]}]}, {"timestamp": 1682105478, "sha": "52932b3a", "message": "chore(measure_theory/function/ess_sup): Generalise (#18669)\nA handful of lemmas hold for bounded filters in conditionally complete lattices, rather than just filter in complete lattices (which are automatically bounded).\nAlso prove that `μ {y | x < f y} = 0` when `x` is greater than the essential supremum of `f`, and dually.", "changes": [{"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["add", "theorem", "ae_ess_inf_le", []], ["add", "theorem", "ae_le_ess_sup", []], ["mod", "theorem", "ae_lt_of_ess_sup_lt", []], ["mod", "theorem", "ae_lt_of_lt_ess_inf", []], ["add", "theorem", "coe_ess_sup", ["ennreal"]], ["add", "theorem", "ess_inf_const'", []], ["add", "theorem", "ess_inf_eq_Sup", []], ["add", "theorem", "ess_sup_const'", []], ["add", "theorem", "meas_ess_sup_lt", []], ["add", "theorem", "meas_lt_ess_inf", []]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "ae_le_snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "meas_snorm_ess_sup_lt", ["measure_theory"]]]}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": [["add", "theorem", "eventually_le_limsup", []], ["add", "theorem", "eventually_liminf_le", []], ["add", "theorem", "liminf_eq_top", []], ["add", "theorem", "limsup_eq_bot", []]]}]}, {"timestamp": 1682094550, "sha": "86d1873c", "message": "chore(*): add mathlib4 synchronization comments (#18845)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.products`\n* `algebra.homology.additive`\n* `algebra.homology.homotopy`\n* `algebraic_topology.alternating_face_map_complex`\n* `algebraic_topology.cech_nerve`\n* `algebraic_topology.dold_kan.faces`\n* `algebraic_topology.dold_kan.functor_n`\n* `algebraic_topology.dold_kan.homotopies`\n* `algebraic_topology.dold_kan.notations`\n* `algebraic_topology.dold_kan.p_infty`\n* `algebraic_topology.dold_kan.projections`\n* `analysis.normed_space.ball_action`\n* `category_theory.idempotents.homological_complex`\n* `category_theory.monad.adjunction`\n* `category_theory.monad.algebra`\n* `category_theory.monad.limits`\n* `category_theory.monad.products`\n* `category_theory.preadditive.eilenberg_moore`\n* `category_theory.preadditive.opposite`\n* `category_theory.sites.limits`\n* `data.complex.cardinality`\n* `data.matrix.notation`\n* `data.matrix.reflection`\n* `data.mv_polynomial.funext`\n* `linear_algebra.free_module.pid`\n* `linear_algebra.matrix.determinant`\n* `linear_algebra.matrix.mv_polynomial`\n* `linear_algebra.matrix.polynomial`\n* `linear_algebra.matrix.reindex`\n* `logic.equiv.transfer_instance`\n* `ring_theory.chain_of_divisors`\n* `ring_theory.localization.submodule`\n* `topology.metric_space.polish`", "changes": [{"oldPath": "src/algebra/category/Module/products.lean", "newPath": "src/algebra/category/Module/products.lean", "changes": []}, {"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": []}, {"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": []}, {"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/faces.lean", "newPath": "src/algebraic_topology/dold_kan/faces.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/functor_n.lean", "newPath": "src/algebraic_topology/dold_kan/functor_n.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/homotopies.lean", "newPath": "src/algebraic_topology/dold_kan/homotopies.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/notations.lean", "newPath": "src/algebraic_topology/dold_kan/notations.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/p_infty.lean", "newPath": "src/algebraic_topology/dold_kan/p_infty.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/projections.lean", "newPath": "src/algebraic_topology/dold_kan/projections.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ball_action.lean", "newPath": "src/analysis/normed_space/ball_action.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/homological_complex.lean", "newPath": "src/category_theory/idempotents/homological_complex.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monad/products.lean", "newPath": "src/category_theory/monad/products.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/eilenberg_moore.lean", "newPath": "src/category_theory/preadditive/eilenberg_moore.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/opposite.lean", "newPath": "src/category_theory/preadditive/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}, {"oldPath": "src/data/complex/cardinality.lean", "newPath": "src/data/complex/cardinality.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/matrix/reflection.lean", "newPath": "src/data/matrix/reflection.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/mv_polynomial.lean", "newPath": "src/linear_algebra/matrix/mv_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/polynomial.lean", "newPath": "src/linear_algebra/matrix/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": []}, {"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/ring_theory/chain_of_divisors.lean", "newPath": "src/ring_theory/chain_of_divisors.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/submodule.lean", "newPath": "src/ring_theory/localization/submodule.lean", "changes": []}, {"oldPath": "src/topology/metric_space/polish.lean", "newPath": "src/topology/metric_space/polish.lean", "changes": []}]}, {"timestamp": 1682087220, "sha": "e49764de", "message": "feat(linear_algebra/matrix/nonsingular_inverse): decomposition of block matrices with an invertible corner (#18847)\nThis result was already in a `have` statement of an existing proof; the lemma generalizes the indices slightly to not require that the overall matrix is square.", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "from_blocks_eq_of_invertible₁₁", ["matrix"]], ["add", "theorem", "from_blocks_eq_of_invertible₂₂", ["matrix"]]]}]}, {"timestamp": 1682087219, "sha": "eba5bb31", "message": "feat(data/matrix/basic): miscellaneous defs and lemmas (#8289)\nmiscellaneous defs and lemmas", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "dot_product_one", ["matrix"]], ["mod", "theorem", "mul_submatrix_one", ["matrix"]], ["add", "theorem", "mul_vec_one", ["matrix"]], ["add", "theorem", "one_dot_product", ["matrix"]], ["add", "theorem", "one_dot_product_one", ["matrix"]], ["mod", "theorem", "one_submatrix_mul", ["matrix"]], ["add", "theorem", "vec_one_mul", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "dot_product_block", ["matrix"]]]}]}, {"timestamp": 1682075581, "sha": "90df25de", "message": "feat(order/monotone/basic): `function.update` is monotone (#18841)\nand `pi.single` too", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "mul_single_mono", ["pi"]], ["add", "theorem", "mul_single_strict_mono", ["pi"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "update_le_update_iff'", []], ["add", "theorem", "update_lt_update_iff", []]]}, {"oldPath": "src/order/monotone/basic.lean", "newPath": "src/order/monotone/basic.lean", "changes": [["add", "theorem", "update_mono", ["function"]], ["add", "theorem", "update_strict_mono", ["function"]]]}]}, {"timestamp": 1682068133, "sha": "10ee9413", "message": "fix(group_theory/monoid_localization): fix timeout (#18846)\nSplitting this into two definitions seems to make both much faster", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}]}, {"timestamp": 1682028273, "sha": "e8cf0cfe", "message": "feat(order/compactly_generated): For any `b`, there exists a set of independent atoms `s` such that `Sup s` is the complement of `b`. (#8475)\nThis new lemma is carved out of the proof that atomistic lattices are complemented.\nAlso provide directed versions of the interaction between suprema and disjointness.", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "inf_Sup_eq", ["directed_on"]], ["add", "theorem", "exists_set_independent_is_compl_Sup_atoms", []], ["add", "theorem", "exists_set_independent_of_Sup_atoms_eq_top", []], ["del", "theorem", "inf_Sup_eq_of_directed_on", []]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["mod", "theorem", "directed_on_range", []]]}]}, {"timestamp": 1682007775, "sha": "246f6f79", "message": "feat(algebra/group_with_zero): add lemmas about `f * pi.single i x` (#6418)", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "single_mul_left", ["pi"]], ["add", "theorem", "single_mul_left_apply", ["pi"]], ["add", "theorem", "single_mul_right", ["pi"]], ["add", "theorem", "single_mul_right_apply", ["pi"]]]}]}, {"timestamp": 1682001628, "sha": "996a8530", "message": "feat(linear_algebra/matrix/nonsingular_inverse): interchange of matrix reindexing and inversion (#18812)\nThis follows the strategy taken in #13827, which gives us all of:\n* `is_unit (A.submatrix e₁ e₂) ↔ is_unit A`\n* `(A.submatrix e₁ e₂)⁻¹ = (A⁻¹).submatrix e₂ e₁`\n* `⅟(A.submatrix e₁ e₂) = (⅟A).submatrix e₂ e₁`\n* `invertible (A.submatrix e₁ e₂) ≃ invertible A`", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "inv_of_submatrix_equiv_eq", ["matrix"]], ["add", "theorem", "inv_reindex", ["matrix"]], ["add", "theorem", "inv_submatrix_equiv", ["matrix"]], ["add", "def", "invertible_of_submatrix_equiv_invertible", ["matrix"]], ["add", "theorem", "is_unit_submatrix_equiv", ["matrix"]], ["add", "def", "submatrix_equiv_invertible", ["matrix"]], ["add", "def", "submatrix_equiv_invertible_equiv_invertible", ["matrix"]]]}]}, {"timestamp": 1681990511, "sha": "44e29dbc", "message": "feat(algebra/order/ring/defs): negative versions of order lemmas (#18831)\nFor each of a handful of lemmas with a `0 <` or `0 ≤` assumption, this adds a variant with a `< 0` or `≤ 0` assumption.", "changes": [{"oldPath": "src/algebra/order/field/basic.lean", "newPath": "src/algebra/order/field/basic.lean", "changes": [["add", "theorem", "div_le_one_of_ge", []]]}, {"oldPath": "src/algebra/order/ring/defs.lean", "newPath": "src/algebra/order/ring/defs.lean", "changes": [["add", "theorem", "le_mul_of_le_one_left", []], ["add", "theorem", "le_mul_of_le_one_right", []], ["add", "theorem", "lt_mul_of_lt_one_left", []], ["add", "theorem", "lt_mul_of_lt_one_right", []], ["add", "theorem", "mul_le_of_one_le_left", []], ["add", "theorem", "mul_le_of_one_le_right", []], ["add", "theorem", "mul_lt_of_one_lt_left", []], ["add", "theorem", "mul_lt_of_one_lt_right", []]]}, {"oldPath": "src/algebra/order/ring/lemmas.lean", "newPath": "src/algebra/order/ring/lemmas.lean", "changes": []}]}, {"timestamp": 1681990510, "sha": "f784cc61", "message": "feat(linear_algebra/tensor_product/matrix): connect with `matrix.kronecker` (#18616)\nThis shows that `to_matrix _ _ (tensor_product.map f g) = to_matrix _ _ f ⊗ₖ to_matrix _ _ g` , and the equivalent statement for `to_lin`.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/tensor_product/matrix.lean", "changes": [["add", "theorem", "to_lin_kronecker", ["matrix"]], ["add", "theorem", "to_matrix_assoc", ["tensor_product"]], ["add", "theorem", "to_matrix_comm", ["tensor_product"]], ["add", "theorem", "to_matrix_map", ["tensor_product"]]]}, {"oldPath": "src/linear_algebra/tensor_product_basis.lean", "newPath": "src/linear_algebra/tensor_product_basis.lean", "changes": [["add", "theorem", "tensor_product_repr_tmul_apply", ["basis"]]]}]}, {"timestamp": 1681990508, "sha": "485b24ed", "message": "feat(order/directed): Scott continuous functions (#18517)\nWe prove an insert result for directed sets when the relation is reflexive. This is then used to show that a Scott continuous function is monotone.\nThis result is required in the [construction of the Scott topology on a preorder](https://github.com/leanprover-community/mathlib4/pull/2508) (see also #18448).\nHolding PR for mathlib4: leanprover-community/mathlib4#2543", "changes": [{"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "insert", ["directed_on"]], ["add", "theorem", "directed_on_pair'", []], ["add", "theorem", "directed_on_pair", []], ["add", "theorem", "directed_on_singleton", []], ["add", "def", "scott_continuous", []]]}]}, {"timestamp": 1681979923, "sha": "4020ddee", "message": "feat(data/set/intervals/unordered_interval): `prod` and `pi` lemmas (#18835)", "changes": [{"oldPath": "src/data/set/intervals/pi.lean", "newPath": "src/data/set/intervals/pi.lean", "changes": [["add", "theorem", "pi_univ_uIcc", ["set"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "uIcc_prod_eq", ["set"]], ["add", "theorem", "uIcc_prod_uIcc", ["set"]]]}]}, {"timestamp": 1681974375, "sha": "cdc34484", "message": "refactor(algebra/module/dedekind_domain): eliminate existentials (#14734)\nThis extracts some constructions from some long existentials so that we don't have to prove everything about the construction in a single place.\nThis makes some of the statements longer, so in places the existential version is kept in terms of the definition one.", "changes": [{"oldPath": "src/algebra/module/dedekind_domain.lean", "newPath": "src/algebra/module/dedekind_domain.lean", "changes": [["add", "theorem", "exists_is_internal_prime_power_torsion", ["submodule"]]]}, {"oldPath": "src/algebra/module/pid.lean", "newPath": "src/algebra/module/pid.lean", "changes": [["add", "theorem", "exists_is_internal_prime_power_torsion_of_pid", ["submodule"]]]}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": [["add", "theorem", "is_torsion_by_set_annihilator_top", ["module"]], ["add", "theorem", "annihilator_top_inter_non_zero_divisors", ["submodule"]], ["del", "theorem", "is_torsion_by_ideal_of_finite_of_is_torsion", ["submodule"]]]}]}, {"timestamp": 1681946318, "sha": "9ac7c0c8", "message": "feat(data/finset/basic): `insert` and `erase` lemmas (#18729)\nInteraction of `insert` and `erase` with `inter`, `union` and `disjoint`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "disjoint_erase_comm", ["finset"]], ["add", "theorem", "disjoint_of_erase_left", ["finset"]], ["add", "theorem", "disjoint_of_erase_right", ["finset"]], ["add", "theorem", "erase_eq", ["finset"]], ["add", "theorem", "erase_inter", ["finset"]], ["add", "theorem", "erase_inter_comm", ["finset"]], ["add", "theorem", "erase_sdiff_comm", ["finset"]], ["add", "theorem", "erase_sdiff_distrib", ["finset"]], ["add", "theorem", "erase_union_distrib", ["finset"]], ["add", "theorem", "erase_union_of_mem", ["finset"]], ["add", "theorem", "insert_inter_distrib", ["finset"]], ["add", "theorem", "insert_union_comm", ["finset"]], ["add", "theorem", "inter_erase", ["finset"]], ["mod", "theorem", "sdiff_erase", ["finset"]], ["add", "theorem", "sdiff_erase_self", ["finset"]], ["add", "theorem", "sdiff_sdiff_eq_sdiff_union", ["finset"]], ["add", "theorem", "sdiff_singleton_eq_self", ["finset"]], ["del", "theorem", "sdiff_singleton_not_mem_eq_self", ["finset"]], ["add", "theorem", "sdiff_union_erase_cancel", ["finset"]], ["add", "theorem", "sdiff_union_sdiff_cancel", ["finset"]], ["add", "theorem", "union_erase_of_mem", ["finset"]], ["add", "theorem", "union_sdiff_cancel_left", ["finset"]], ["add", "theorem", "union_sdiff_cancel_right", ["finset"]], ["add", "theorem", "union_subset_union_left", ["finset"]], ["add", "theorem", "union_subset_union_right", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_diff_eq_sdiff_union", ["set"]], ["add", "theorem", "diff_union_diff_cancel", ["set"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "codisjoint_himp_self_left", []], ["add", "theorem", "codisjoint_himp_self_right", []], ["add", "theorem", "disjoint_sdiff_comm", []], ["add", "theorem", "himp_le", []]]}, {"oldPath": "src/order/heyting/basic.lean", "newPath": "src/order/heyting/basic.lean", "changes": [["add", "theorem", "himp_le_of_right_le", ["codisjoint"]], ["add", "theorem", "le_sdiff_of_le_left", ["disjoint"]]]}]}, {"timestamp": 1681938405, "sha": "13b8e258", "message": "feat(group_theory/monoid_localization): Order (#18724)\nProve that every (linearly) ordered cancellative monoid can be embedded into a (linearly) ordered group, namely its Grothendieck group. Note that cancellativity is necessary since submonoids of a group are cancellative.", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "mk_eq_mk_iff'", ["localization"]], ["add", "theorem", "mk_le_mk", ["localization"]], ["add", "theorem", "mk_left_injective", ["localization"]], ["add", "theorem", "mk_lt_mk", ["localization"]], ["add", "def", "rec_on_subsingleton₂", ["localization"]]]}]}, {"timestamp": 1681930039, "sha": "730c6d4c", "message": "chore(order/initial_seg): tweak `subsingleton_of_trichotomous_of_irrefl` (#18749)\nWe rename it, turn it into an instance, and golf the next instance with it.", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["del", "theorem", "unique_of_trichotomous_of_irrefl", ["initial_seg"]]]}]}, {"timestamp": 1681922337, "sha": "17219820", "message": "feat(data/matrix/rank): rank of `Aᵀ ⬝ A` and `Aᴴ ⬝ A` (#18818)\nSince these results imply it trivially, this also includes lemmas about the rank of `Aᵀ` and `Aᴴ`.\nHowever, these lemmas are not stated very generally, and are surely true in wider cases than the ones proven here.", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": [["add", "theorem", "ker_mul_vec_lin_conj_transpose_mul_self", ["matrix"]], ["add", "theorem", "ker_mul_vec_lin_transpose_mul_self", ["matrix"]], ["add", "theorem", "rank_conj_transpose", ["matrix"]], ["add", "theorem", "rank_conj_transpose_mul_self", ["matrix"]], ["add", "theorem", "rank_eq_finrank_span_row", ["matrix"]], ["add", "theorem", "rank_self_mul_conj_transpose", ["matrix"]], ["add", "theorem", "rank_self_mul_transpose", ["matrix"]], ["add", "theorem", "rank_transpose", ["matrix"]], ["add", "theorem", "rank_transpose_mul_self", ["matrix"]]]}]}, {"timestamp": 1681916248, "sha": "8eb9c42d", "message": "chore(*): add mathlib4 synchronization comments (#18832)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.homology.exact`\n* `algebra.homology.flip`\n* `algebra.homology.functor`\n* `algebra.homology.homology`\n* `algebra.homology.single`\n* `category_theory.monad.types`\n* `category_theory.subobject.types`\n* `computability.tm_computable`\n* `control.bitraversable.lemmas`\n* `data.qpf.univariate.basic`\n* `data.real.cardinality`\n* `model_theory.encoding`\n* `ring_theory.localization.ideal`\n* `topology.algebra.valuation`\n* `topology.metric_space.cantor_scheme`\n* `topology.urysohns_lemma`", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": []}, {"oldPath": "src/algebra/homology/flip.lean", "newPath": "src/algebra/homology/flip.lean", "changes": []}, {"oldPath": "src/algebra/homology/functor.lean", "newPath": "src/algebra/homology/functor.lean", "changes": []}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/algebra/homology/single.lean", "newPath": "src/algebra/homology/single.lean", "changes": []}, {"oldPath": "src/category_theory/monad/types.lean", "newPath": "src/category_theory/monad/types.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/types.lean", "newPath": "src/category_theory/subobject/types.lean", "changes": []}, {"oldPath": "src/computability/tm_computable.lean", "newPath": "src/computability/tm_computable.lean", "changes": []}, {"oldPath": "src/control/bitraversable/lemmas.lean", "newPath": "src/control/bitraversable/lemmas.lean", "changes": []}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/ideal.lean", "newPath": "src/ring_theory/localization/ideal.lean", "changes": []}, {"oldPath": "src/topology/algebra/valuation.lean", "newPath": "src/topology/algebra/valuation.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cantor_scheme.lean", "newPath": "src/topology/metric_space/cantor_scheme.lean", "changes": []}, {"oldPath": "src/topology/urysohns_lemma.lean", "newPath": "src/topology/urysohns_lemma.lean", "changes": []}]}, {"timestamp": 1681893629, "sha": "c6275ef4", "message": "feat(ring_theory/polynomial): define the probabilist's Hermite polynomials (#18739)\nDefine the Hermite polynomials recursively, and show this is equivalent to the result of iterating the operation `x - d/dx` on the constant polynomial `1`.\nFuture PRs will include several equivalent characterizations:\n- Recursive and explicit expressions for the coefficients\n- Definition based on the nth derivative of the Gaussian function", "changes": [{"oldPath": null, "newPath": "src/ring_theory/polynomial/hermite.lean", "changes": [["add", "theorem", "hermite_eq_iterate", ["polynomial"]], ["add", "theorem", "hermite_one", ["polynomial"]], ["add", "theorem", "hermite_succ", ["polynomial"]], ["add", "theorem", "hermite_zero", ["polynomial"]]]}]}, {"timestamp": 1681802456, "sha": "cd8fafa2", "message": "chore(data/complex/module): split out orientation to a separate file (#18824)\nThis removes the imports\n- linear_algebra.matrix.determinant\n- linear_algebra.matrix.mv_polynomial\n- linear_algebra.matrix.adjugate\n- linear_algebra.matrix.nonsingular_inverse\n- linear_algebra.matrix.basis\n- linear_algebra.determinant\n- linear_algebra.orientation\nfrom `data.complex.module`, which aren't otherwise needed here.", "changes": [{"oldPath": "src/analysis/inner_product_space/two_dim.lean", "newPath": "src/analysis/inner_product_space/two_dim.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/complex/orientation.lean", "changes": []}]}, {"timestamp": 1681802454, "sha": "6c263e4b", "message": "chore(linear_algebra/matrix/basis): reduce imports (#18823)\nThis is a slight simplification on the current maximal path for the port.", "changes": [{"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": []}]}, {"timestamp": 1681794813, "sha": "ce38d86c", "message": "chore(*): add mathlib4 synchronization comments (#18813)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.homology.homological_complex`\n* `algebra.homology.image_to_kernel`\n* `algebraic_topology.Moore_complex`\n* `algebraic_topology.topological_simplex`\n* `analysis.asymptotics.asymptotic_equivalent`\n* `analysis.box_integral.box.subbox_induction`\n* `analysis.convex.body`\n* `analysis.convex.exposed`\n* `analysis.normed.group.add_torsor`\n* `analysis.normed.ring.seminorm`\n* `analysis.normed_space.add_torsor`\n* `analysis.normed_space.pointwise`\n* `analysis.special_functions.polynomials`\n* `category_theory.sites.whiskering`\n* `category_theory.subobject.basic`\n* `category_theory.subobject.factor_thru`\n* `category_theory.subobject.lattice`\n* `category_theory.subobject.limits`\n* `category_theory.subobject.mono_over`\n* `category_theory.subobject.well_powered`\n* `data.num.prime`\n* `dynamics.circle.rotation_number.translation_number`\n* `geometry.manifold.local_invariant_properties`\n* `group_theory.free_abelian_group_finsupp`\n* `linear_algebra.free_module.finite.rank`\n* `model_theory.syntax`\n* `number_theory.lucas_lehmer`\n* `number_theory.pell_matiyasevic`\n* `order.category.DistLat`\n* `ring_theory.non_unital_subsemiring.basic`\n* `topology.algebra.nonarchimedean.bases`\n* `topology.metric_space.baire`\n* `topology.metric_space.closeds`", "changes": [{"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": []}, {"oldPath": "src/algebra/homology/image_to_kernel.lean", "newPath": "src/algebra/homology/image_to_kernel.lean", "changes": []}, {"oldPath": "src/algebraic_topology/Moore_complex.lean", "newPath": "src/algebraic_topology/Moore_complex.lean", "changes": []}, {"oldPath": "src/algebraic_topology/topological_simplex.lean", "newPath": "src/algebraic_topology/topological_simplex.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/subbox_induction.lean", "newPath": "src/analysis/box_integral/box/subbox_induction.lean", "changes": []}, {"oldPath": "src/analysis/convex/body.lean", "newPath": "src/analysis/convex/body.lean", "changes": []}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/add_torsor.lean", "newPath": "src/analysis/normed/group/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed/ring/seminorm.lean", "newPath": "src/analysis/normed/ring/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/category_theory/sites/whiskering.lean", "newPath": "src/category_theory/sites/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/factor_thru.lean", "newPath": "src/category_theory/subobject/factor_thru.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/mono_over.lean", "newPath": "src/category_theory/subobject/mono_over.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/well_powered.lean", "newPath": "src/category_theory/subobject/well_powered.lean", "changes": []}, {"oldPath": "src/data/num/prime.lean", "newPath": "src/data/num/prime.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": []}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/pell_matiyasevic.lean", "newPath": "src/number_theory/pell_matiyasevic.lean", "changes": []}, {"oldPath": "src/order/category/DistLat.lean", "newPath": "src/order/category/DistLat.lean", "changes": []}, {"oldPath": "src/ring_theory/non_unital_subsemiring/basic.lean", "newPath": "src/ring_theory/non_unital_subsemiring/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/bases.lean", "newPath": "src/topology/algebra/nonarchimedean/bases.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}]}, {"timestamp": 1681764563, "sha": "49b7f94a", "message": "feat(topology/perfect): Schemes, embedding of the Cantor space (#18248)\nAdd to `topology.perfect` the following theorem: In a complete metric space, any nonempty perfect set admits a continuous embedding of the Cantor space.\nThe proof uses an object which in descriptive set theory is sometimes called a \"scheme\". Some attempt was made to include in `topology.metric_space.cantor_scheme` a general theory of these schemes, since they should be useful down the line in other results as well.\nWe also define `pi_nat.res` in `topology.metric_space.pi_nat`.", "changes": [{"oldPath": null, "newPath": "src/topology/metric_space/cantor_scheme.lean", "changes": [["add", "theorem", "map_of_vanishing_diam", ["cantor_scheme", "closure_antitone"]], ["add", "def", "closure_antitone", ["cantor_scheme"]], ["add", "theorem", "map_injective", ["cantor_scheme", "disjoint"]], ["add", "theorem", "map_mem", ["cantor_scheme"]], ["add", "theorem", "dist_lt", ["cantor_scheme", "vanishing_diam"]], ["add", "theorem", "map_continuous", ["cantor_scheme", "vanishing_diam"]], ["add", "def", "vanishing_diam", ["cantor_scheme"]]]}, {"oldPath": "src/topology/metric_space/pi_nat.lean", "newPath": "src/topology/metric_space/pi_nat.lean", "changes": [["add", "theorem", "cylinder_eq_res", ["pi_nat"]], ["add", "theorem", "is_open_cylinder", ["pi_nat"]], ["mod", "theorem", "is_topological_basis_cylinders", ["pi_nat"]], ["add", "def", "res", ["pi_nat"]], ["add", "theorem", "res_eq_res", ["pi_nat"]], ["add", "theorem", "res_injective", ["pi_nat"]], ["add", "theorem", "res_length", ["pi_nat"]], ["add", "theorem", "res_succ", ["pi_nat"]], ["add", "theorem", "res_zero", ["pi_nat"]]]}, {"oldPath": "src/topology/perfect.lean", "newPath": "src/topology/perfect.lean", "changes": [["add", "theorem", "exists_nat_bool_injection", ["perfect"]], ["add", "theorem", "small_diam_splitting", ["perfect"]]]}]}, {"timestamp": 1681748650, "sha": "13bf7613", "message": "feat(measure_theory/functions/lp_space): bounds on the sum of functions in L^p, p < 1, and applications (#18796)\nThe `L^p` space satisfies the triangular inequality for `p ≥ 1`. We show that, for `p < 1`, it satisfies a weaker inequality (with the loss of a multiplicative constant `2^(1/p - 1)`), which is still enough for several results. This makes it possible to remove the assumptions on `p` in results on density of continuous functions.", "changes": [{"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": [["add", "theorem", "rpow_add_le_mul_rpow_add_rpow", ["ennreal"]], ["add", "theorem", "rpow_add_le_mul_rpow_add_rpow", ["nnreal"]]]}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": [["mod", "theorem", "exists_bounded_continuous_snorm_sub_le", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "def", "Lp_add_const", ["measure_theory"]], ["add", "theorem", "Lp_add_const_lt_top", ["measure_theory"]], ["add", "theorem", "Lp_add_const_of_one_le", ["measure_theory"]], ["add", "theorem", "Lp_add_const_zero", ["measure_theory"]], ["add", "theorem", "exists_Lp_half", ["measure_theory"]], ["add", "theorem", "snorm'_add_le_of_le_one", ["measure_theory"]], ["del", "theorem", "snorm'_add_lt_top_of_le_one", ["measure_theory"]], ["add", "theorem", "snorm_add_le'", ["measure_theory"]], ["del", "theorem", "snorm_add_lt_top_of_one_le", ["measure_theory"]], ["add", "theorem", "snorm_sub_le'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": [["add", "theorem", "exists_simple_func_snorm_sub_lt", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "induction_dense", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": [["add", "theorem", "lintegral_Lp_add_le_of_le_one", ["ennreal"]]]}]}, {"timestamp": 1681731652, "sha": "155d5519", "message": "feat(algebra/module/submodule/basic): add has_vadd (#18815)", "changes": [{"oldPath": "src/algebra/module/submodule/basic.lean", "newPath": "src/algebra/module/submodule/basic.lean", "changes": [["add", "theorem", "vadd_def", ["submodule"]]]}]}, {"timestamp": 1681727723, "sha": "991ff3b5", "message": "golf(set_theory/ordinal/cantor_normal_form): golf theorems (#16009)\nWe move `div_opow_log_pos` out of a proof and open the `list` namespace.\nMathlib 4: https://github.com/leanprover-community/mathlib4/pull/3189", "changes": [{"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": []}]}, {"timestamp": 1681714069, "sha": "a968611b", "message": "feat(analysis/schwartz_space): lemmas for supremum of seminorms (#18648)\nThe main result is the bound `one_add_le_seminorm_sup_apply`, which is sometimes in the literature used as the definition of the Schwartz space.\nWe don't really care about the `2^k` factor, since this result is usually used to prove that certain operators are bounded on Schwartz space and hence finiteness of the right hand side is all that matters.\nOne application is to show that the product of a Schwartz function and a smooth polynomially growing function is again Schwartz.", "changes": [{"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": [["add", "theorem", "one_add_le_sup_seminorm_apply", ["schwartz_map"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf'_le_of_le", ["finset"]], ["add", "theorem", "inf_le_of_le", ["finset"]], ["add", "theorem", "le_sup'_of_le", ["finset"]], ["add", "theorem", "le_sup_of_le", ["finset"]]]}]}, {"timestamp": 1681691594, "sha": "95e83ced", "message": "feat(category_theory/site/limits): generalise universes (#18817)\nThe objects in category `C` in this file had type `Type max v u` but there's no reason they can't just have type `Type u`. There are no uses in this file of `u` as a universe by itself, so this does not make any results less general.\nThis makes porting the file easier. [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Universe.20issues.20with.20concrete.20categories/near/350340297)", "changes": [{"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}]}, {"timestamp": 1681676996, "sha": "17ad94b4", "message": "ci: fix bibtool installation (#18816)\nAdding `sudo apt-get update` seems to fix the installation failure; perhaps our package list referred to an old version that the default mirror decided not to bother hosting any more.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1681533124, "sha": "4f4a1c87", "message": "chore(*): add mathlib4 synchronization comments (#18807)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.epi_mono`\n* `algebraic_topology.split_simplicial_object`\n* `analysis.asymptotics.specific_asymptotics`\n* `analysis.asymptotics.superpolynomial_decay`\n* `analysis.asymptotics.theta`\n* `analysis.box_integral.box.basic`\n* `analysis.locally_convex.balanced_core_hull`\n* `analysis.normed_space.extr`\n* `category_theory.limits.over`\n* `category_theory.sites.sheafification`\n* `linear_algebra.free_module.rank`\n* `order.filter.zero_and_bounded_at_filter`\n* `topology.category.Top.epi_mono`", "changes": [{"oldPath": "src/algebra/category/Module/epi_mono.lean", "newPath": "src/algebra/category/Module/epi_mono.lean", "changes": []}, {"oldPath": "src/algebraic_topology/split_simplicial_object.lean", "newPath": "src/algebraic_topology/split_simplicial_object.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/theta.lean", "newPath": "src/analysis/asymptotics/theta.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extr.lean", "newPath": "src/analysis/normed_space/extr.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": []}, {"oldPath": "src/order/filter/zero_and_bounded_at_filter.lean", "newPath": "src/order/filter/zero_and_bounded_at_filter.lean", "changes": []}, {"oldPath": "src/topology/category/Top/epi_mono.lean", "newPath": "src/topology/category/Top/epi_mono.lean", "changes": []}]}, {"timestamp": 1681512551, "sha": "e95e4f92", "message": "feat(linear_algebra/finite_dimensional): generalize results to `module.finite` (#18811)\nThis generalize the following from `finite_dimensional` over division rings to `module.finite` over free modules:\n* `finite_dimensional.nonempty_linear_equiv_of_finrank_eq` (moved from `nonempty_linear_equiv_of_finrank_eq`)\n* `finite_dimensional.nonempty_linear_equiv_iff_finrank_eq` (moved from `nonempty_linear_equiv_iff_finrank_eq`)\n* `linear_equiv.of_finrank_eq`\n* `module.finite.map` (moved from `finite_dimensional.submodule.map.finite_dimensional`). This is the only lemma moved across the porting tide.\n* `submodule.finrank_map_le` (moved from `finite_dimensional.finrank_map_le`)\n* `submodule.finrank_map_subtype_eq` (moved from `finite_dimensional.finrank_map_subtype_eq`, needs no finite or free assumptions at all)\n* `submodule.finrank_le_finrank_of_le`", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "finrank_map_le", ["finite_dimensional"]], ["del", "theorem", "finrank_map_subtype_eq", ["finite_dimensional"]], ["del", "theorem", "nonempty_linear_equiv_iff_finrank_eq", ["finite_dimensional"]], ["del", "theorem", "nonempty_linear_equiv_of_finrank_eq", ["finite_dimensional"]], ["del", "theorem", "finrank_le_finrank_of_le", ["submodule"]]]}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["add", "theorem", "nonempty_linear_equiv_iff_finrank_eq", ["finite_dimensional"]], ["add", "theorem", "nonempty_linear_equiv_of_finrank_eq", ["finite_dimensional"]], ["add", "theorem", "finrank_map_subtype_eq", ["finite_dimensional", "submodule"]], ["add", "theorem", "finrank_le_finrank_of_le", ["submodule"]], ["add", "theorem", "finrank_map_le", ["submodule"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1681501633, "sha": "de29c328", "message": "feat(algebra/order/sub/defs): make `has_ordered_sub` a Prop (#18810)\n`has_ordered_sub` was incorrectly a Type, because of a Lean 3 bug. This is a backport of mathlib4 [#3436](https://github.com/leanprover-community/mathlib4/pull/3436) .", "changes": [{"oldPath": "src/algebra/order/sub/defs.lean", "newPath": "src/algebra/order/sub/defs.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1681494035, "sha": "0e2aab2b", "message": "feat(data/matrix/basic): more lemmas about submatrix (#18738)\nThis adds trivial results about reordering rows and columns in a matrix:\n* Reordering can be moved around `dot_product`, `mul_vec`, and `vec_mul` (previouly we only had `mul`)\n* Reordering can be moved through `adjugate`\n* Reordering can be moved through row and column updates.\n* Reordering can be moved through `to_lin'`\n* Reordering does not affect `matrix.rank`\nAlso adds some missing `of` wrappers.\nLemmas about reindexing are useful when working with block matrices, as they make it possible to make symmetry arguments.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "comp_equiv_dot_product_comp_equiv", ["matrix"]], ["add", "theorem", "comp_equiv_symm_dot_product", ["matrix"]], ["add", "theorem", "dot_product_comp_equiv_symm", ["matrix"]], ["add", "theorem", "reindex_update_column", ["matrix"]], ["add", "theorem", "reindex_update_row", ["matrix"]], ["add", "theorem", "submatrix_mul_vec_equiv", ["matrix"]], ["add", "theorem", "submatrix_update_column_equiv", ["matrix"]], ["add", "theorem", "submatrix_update_row_equiv", ["matrix"]], ["add", "theorem", "submatrix_vec_mul_equiv", ["matrix"]], ["add", "theorem", "update_column_reindex", ["matrix"]], ["add", "theorem", "update_column_submatrix_equiv", ["matrix"]], ["add", "theorem", "update_row_reindex", ["matrix"]], ["add", "theorem", "update_row_submatrix_equiv", ["matrix"]]]}, {"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": [["add", "theorem", "rank_reindex", ["matrix"]], ["add", "theorem", "rank_submatrix", ["matrix"]], ["add", "theorem", "rank_submatrix_le", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["add", "theorem", "adjugate_reindex", ["matrix"]], ["add", "theorem", "adjugate_submatrix_equiv_self", ["matrix"]], ["add", "theorem", "cramer_reindex", ["matrix"]], ["add", "theorem", "cramer_submatrix_equiv", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "mul_vec_lin_reindex", ["matrix"]], ["add", "theorem", "mul_vec_lin_submatrix", ["matrix"]], ["add", "theorem", "to_lin'_reindex", ["matrix"]], ["add", "theorem", "to_lin'_submatrix", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}]}, {"timestamp": 1681452700, "sha": "2cf3ee29", "message": "feat(analysis/calculus/cont_diff_def): no continuity is needed for has_ftaylor_series_up_to if n = ∞ (#18808)\nWe also add `has_ftaylor_series_up_to_iff_top` in order that the notation is consistent between `has_ftaylor_series_up_to` and `has_ftaylor_series_up_to_on`.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": [["add", "theorem", "has_ftaylor_series_up_to_on_top_iff'", []], ["add", "theorem", "has_ftaylor_series_up_to_top_iff'", []], ["add", "theorem", "has_ftaylor_series_up_to_top_iff", []]]}]}, {"timestamp": 1681420331, "sha": "820b2296", "message": "feat(data/matrix/reflection): add `mul_vec` and `vec_mul` (#18805)\nThis follows the pattern already established by `mul`.\nThe motivation was an example on Zulip which wanted to compute the product of\n```lean\ndef M := !![(2:ℂ), 0, 0; 0, 1, 0; 0, 0, 1]\ndef v := ![(0:ℂ), 0, 1]\n```\nAs before, the meta code that makes this pleasant to use is absent, but I will add it along with the rest of the meta code in #15738.", "changes": [{"oldPath": "src/data/matrix/reflection.lean", "newPath": "src/data/matrix/reflection.lean", "changes": [["add", "def", "mul_vecᵣ", ["matrix"]], ["add", "theorem", "mul_vecᵣ_eq", ["matrix"]], ["add", "def", "vec_mulᵣ", ["matrix"]], ["add", "theorem", "vec_mulᵣ_eq", ["matrix"]]]}]}, {"timestamp": 1681413922, "sha": "7ebf83ed", "message": "chore(analysis/seminorm): add new le_def/lt_def and renaming (#18801)", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "coe_le_coe", ["seminorm"]], ["add", "theorem", "coe_lt_coe", ["seminorm"]], ["mod", "theorem", "le_def", ["seminorm"]], ["mod", "theorem", "lt_def", ["seminorm"]]]}]}, {"timestamp": 1681407141, "sha": "86add5ce", "message": "refactor(linear_algebra/matrix/rank): remove `decidable_eq` arguments (#18800)\n`matrix.to_lin' M` is just `matrix.vec_mul_lin M` with an unused decidability argument.\nWe're a bit close to the tide to risk attempting to do a global replacement, so this just:\n* Refactors some lemmas about `matrix.to_lin'` to be first proven about `matrix.vec_mul_lin`\n* Changes `matrix.rank` to be defined in terms of the latter.", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": [["mod", "theorem", "rank_eq_finrank_range_to_lin", ["matrix"]], ["mod", "theorem", "rank_of_is_unit", ["matrix"]], ["mod", "theorem", "rank_one", ["matrix"]], ["mod", "theorem", "rank_unit", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "ker_mul_vec_lin_eq_bot_iff", ["matrix"]], ["mod", "def", "mul_vec_lin", ["matrix"]], ["add", "theorem", "mul_vec_lin_add", ["matrix"]], ["add", "theorem", "mul_vec_lin_apply", ["matrix"]], ["add", "theorem", "mul_vec_lin_mul", ["matrix"]], ["add", "theorem", "mul_vec_lin_one", ["matrix"]], ["add", "theorem", "mul_vec_lin_zero", ["matrix"]], ["mod", "theorem", "mul_vec_std_basis", ["matrix"]], ["mod", "theorem", "mul_vec_std_basis_apply", ["matrix"]], ["add", "theorem", "range_mul_vec_lin", ["matrix"]], ["add", "theorem", "to_lin'_apply'", ["matrix"]]]}]}, {"timestamp": 1681399515, "sha": "465d4301", "message": "chore(linear_algebra/free_module/rank): golf a slow proof (#18804)\nWe already do all the work for this when constructing the basis elsewhere.", "changes": [{"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": []}]}, {"timestamp": 1681379043, "sha": "47a5f818", "message": "feat(data/matrix/rank): rank of multiplication (#18784)\nThis adds a universe-polymorphic version of `rank_comp_le_right`, and then uses it to show `(A ⬝ B).rank ≤ B.rank`; previously we only had `(A ⬝ B).rank ≤ A.rank`.\nFor convenience, this adds the spellings `(A ⬝ B).rank ≤ min A.rank B.rank` and `rank (f.comp g) ≤ min (rank f) (rank g)`, as these map well to the way that rank would be described in words.", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": [["add", "theorem", "rank_mul_le_left", ["matrix"]], ["add", "theorem", "rank_mul_le_right", ["matrix"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "lift_rank_comp_le", ["linear_map"]], ["add", "theorem", "lift_rank_comp_le_right", ["linear_map"]], ["add", "theorem", "rank_comp_le", ["linear_map"]]]}]}, {"timestamp": 1681366793, "sha": "9a48a083", "message": "chore(*): add mathlib4 synchronization comments (#18799)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `analysis.asymptotics.asymptotics`\n* `analysis.convex.quasiconvex`\n* `analysis.locally_convex.basic`\n* `analysis.normed.order.upper_lower`\n* `analysis.normed_space.continuous_linear_map`\n* `analysis.normed_space.ray`\n* `analysis.normed_space.riesz_lemma`\n* `category_theory.idempotents.simplicial_object`\n* `group_theory.specific_groups.alternating`\n* `linear_algebra.finrank`\n* `model_theory.language_map`", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/order/upper_lower.lean", "newPath": "src/analysis/normed/order/upper_lower.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/continuous_linear_map.lean", "newPath": "src/analysis/normed_space/continuous_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ray.lean", "newPath": "src/analysis/normed_space/ray.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/simplicial_object.lean", "newPath": "src/category_theory/idempotents/simplicial_object.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/finrank.lean", "newPath": "src/linear_algebra/finrank.lean", "changes": []}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": []}]}, {"timestamp": 1681363018, "sha": "21407283", "message": "feat(data/matrix/rank): rank of a matrix is the rank of its column space (#18778)\nThis is a TODO comment in this file left from #10826. Proving the link to the row space is harder, and only easy to prove for `is_R_or_C`; so I've left it for another time.", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": [["add", "theorem", "rank_eq_finrank_span_cols", ["matrix"]]]}]}, {"timestamp": 1681343516, "sha": "5ac1dab1", "message": "chore(linear_algebra/matrix/dot_product): weaken typeclasses (#18798)\nThis makes unification slightly harder on Lean, so `: _`s are added.\nFixes a stupid error in #18783", "changes": [{"oldPath": "src/linear_algebra/matrix/dot_product.lean", "newPath": "src/linear_algebra/matrix/dot_product.lean", "changes": []}]}, {"timestamp": 1681314491, "sha": "347636a7", "message": "chore(linear_algebra/finrank): backport removal of simp lemmas (#18794)\nTesting a solution to the simpNF linter problems at https://github.com/leanprover-community/mathlib4/pull/3378", "changes": [{"oldPath": "src/linear_algebra/finrank.lean", "newPath": "src/linear_algebra/finrank.lean", "changes": []}]}, {"timestamp": 1681293145, "sha": "b5b5dd5a", "message": "feat(linear_algebra/free_module/finite/rank): remove `module.free` assumption (#18792)\nCombined with the result in #18787, this lets us golf a downstream proof about matrices.", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "linear_independent_le_span_finset", []]]}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["mod", "theorem", "finrank_le_finrank_of_injective", ["linear_map"]], ["mod", "theorem", "finrank_range_le", ["linear_map"]], ["mod", "theorem", "finrank_le", ["submodule"]], ["mod", "theorem", "finrank_quotient_le", ["submodule"]]]}]}, {"timestamp": 1681284142, "sha": "814d76e2", "message": "chore(*): add mathlib4 synchronization comments (#18793)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Module.basic`\n* `algebra.linear_recurrence`\n* `algebra.order.chebyshev`\n* `algebra.order.to_interval_mod`\n* `algebraic_topology.simplicial_object`\n* `analysis.convex.extrema`\n* `analysis.convex.slope`\n* `analysis.normed.order.basic`\n* `analysis.normed_space.basic`\n* `category_theory.graded_object`\n* `computability.encoding`\n* `geometry.manifold.charted_space`\n* `linear_algebra.free_algebra`\n* `linear_algebra.quotient_pi`\n* `ring_theory.polynomial.eisenstein.basic`\n* `topology.category.Top.adjunctions`\n* `topology.category.Top.basic`", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/order/chebyshev.lean", "newPath": "src/algebra/order/chebyshev.lean", "changes": []}, {"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/convex/slope.lean", "newPath": "src/analysis/convex/slope.lean", "changes": []}, {"oldPath": "src/analysis/normed/order/basic.lean", "newPath": "src/analysis/normed/order/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/computability/encoding.lean", "newPath": "src/computability/encoding.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_algebra.lean", "newPath": "src/linear_algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient_pi.lean", "newPath": "src/linear_algebra/quotient_pi.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein/basic.lean", "newPath": "src/ring_theory/polynomial/eisenstein/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}]}, {"timestamp": 1681284141, "sha": "9bb28972", "message": "chore(set_theory/cardinal/basic): reinstate `partial_order` (#18781)\nThis change from #18714 was causing computability issues in Lean 4.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1681280099, "sha": "46822d96", "message": "feat(linear_algebra/matrix/dot_product): `dot_product_self_eq_zero` (#18783)", "changes": [{"oldPath": "src/linear_algebra/matrix/dot_product.lean", "newPath": "src/linear_algebra/matrix/dot_product.lean", "changes": [["add", "theorem", "dot_product_self_eq_zero", ["matrix"]], ["add", "theorem", "dot_product_self_star_eq_zero", ["matrix"]], ["add", "theorem", "dot_product_star_self_eq_zero", ["matrix"]]]}]}, {"timestamp": 1681219295, "sha": "039ef89b", "message": "chore(ring_theory/finiteness): generalize `finite_dimensional_range` to modules (#18787)", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1681214585, "sha": "23b80727", "message": "chore(analysis/inner_product_space/symmetric): change lemma name (#18777)\nchanged name from [`linear_map.is_symmetric.inner_map_eq_zero`](https://leanprover-community.github.io/mathlib_docs/analysis/inner_product_space/symmetric.html#linear_map.is_symmetric.inner_map_eq_zero) to `linear_map.is_symmetric.inner_map_self_eq_zero` to match [`inner_map_self_eq_zero`](https://leanprover-community.github.io/mathlib_docs/analysis/inner_product_space/basic.html#inner_map_self_eq_zero)", "changes": [{"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": [["del", "theorem", "inner_map_eq_zero", ["linear_map", "is_symmetric"]], ["add", "theorem", "inner_map_self_eq_zero", ["linear_map", "is_symmetric"]]]}]}, {"timestamp": 1681199443, "sha": "25a9423c", "message": "chore(*): add mathlib4 synchronization comments (#18772)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.module.projective`\n* `algebra.order.rearrangement`\n* `analysis.convex.function`\n* `analysis.locally_convex.polar`\n* `category_theory.Fintype`\n* `category_theory.abelian.functor_category`\n* `category_theory.sites.plus`\n* `category_theory.triangulated.pretriangulated`\n* `category_theory.triangulated.rotate`\n* `category_theory.triangulated.triangulated`\n* `control.fold`\n* `data.finset.sups`\n* `data.list.to_finsupp`\n* `data.num.lemmas`\n* `field_theory.finiteness`\n* `field_theory.mv_polynomial`\n* `linear_algebra.alternating`\n* `linear_algebra.dimension`\n* `linear_algebra.free_module.finite.basic`\n* `order.height`\n* `set_theory.zfc.ordinal`\n* `topology.algebra.module.weak_dual`\n* `topology.local_at_target`\n* `topology.metric_space.contracting`\n* `topology.metric_space.pi_nat`", "changes": [{"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": []}, {"oldPath": "src/algebra/order/rearrangement.lean", "newPath": "src/algebra/order/rearrangement.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/polar.lean", "newPath": "src/analysis/locally_convex/polar.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/functor_category.lean", "newPath": "src/category_theory/abelian/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/triangulated.lean", "newPath": "src/category_theory/triangulated/triangulated.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/data/finset/sups.lean", "newPath": "src/data/finset/sups.lean", "changes": []}, {"oldPath": "src/data/list/to_finsupp.lean", "newPath": "src/data/list/to_finsupp.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/basic.lean", "newPath": "src/linear_algebra/free_module/finite/basic.lean", "changes": []}, {"oldPath": "src/order/height.lean", "newPath": "src/order/height.lean", "changes": []}, {"oldPath": "src/set_theory/zfc/ordinal.lean", "newPath": "src/set_theory/zfc/ordinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/local_at_target.lean", "newPath": "src/topology/local_at_target.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_nat.lean", "newPath": "src/topology/metric_space/pi_nat.lean", "changes": []}]}, {"timestamp": 1681194126, "sha": "a493616c", "message": "feat(analysis/calculus/cont_diff_def): C^(n+1) iff C^n derivative (#18767)", "changes": [{"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": [["add", "theorem", "cont_diff_on_succ_iff_has_fderiv_within", []], ["add", "theorem", "cont_diff_succ_iff_has_fderiv", []]]}]}, {"timestamp": 1681163683, "sha": "37ffa4ee", "message": "refactor(topology.continuous_function.algebra): Loosen continuous_subsemiring hypothesis (#18790)\nThe current hypothesis of `continuous_subsemiring` and `continuous_submonoid` are unnecessarily restrictive.", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1681146044, "sha": "c9236f47", "message": "ci: fix label name for ported files (#18788)", "changes": [{"oldPath": ".github/workflows/add_ported_warnings.yml", "newPath": ".github/workflows/add_ported_warnings.yml", "changes": []}]}, {"timestamp": 1681141223, "sha": "a8c97ed3", "message": "feat(measure_theory/function/continuous_map_dense): compactly supported functions are dense in L^p (#18710)\nWe have already the fact that bounded continuous functions are dense in L^p. We refactor the proof to extract an approach that is common to bounded continuous functions and to compactly supported functions, to avoid code duplication as much as possible. We also give elementary versions of the statements (in the form: for all epsilon > 0, there exists g such that...) as they may be easier to use, and specialized versions for integrable functions.", "changes": [{"oldPath": "src/analysis/fourier/add_circle.lean", "newPath": "src/analysis/fourier/add_circle.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": [["mod", "theorem", "bounded_continuous_function_dense", ["measure_theory", "Lp"]], ["add", "theorem", "exists_continuous_snorm_sub_le_of_closed", ["measure_theory"]], ["add", "theorem", "exists_bounded_continuous_integral_sub_le", ["measure_theory", "integrable"]], ["add", "theorem", "exists_bounded_continuous_lintegral_sub_le", ["measure_theory", "integrable"]], ["add", "theorem", "exists_has_compact_support_integral_sub_le", ["measure_theory", "integrable"]], ["add", "theorem", "exists_has_compact_support_lintegral_sub_le", ["measure_theory", "integrable"]], ["add", "theorem", "exists_bounded_continuous_integral_rpow_sub_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "exists_bounded_continuous_snorm_sub_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "exists_has_compact_support_integral_rpow_sub_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "exists_has_compact_support_snorm_sub_le", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "exists_snorm_indicator_le", ["measure_theory"]], ["add", "theorem", "snorm_indicator_const_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": [["add", "theorem", "induction_dense", ["measure_theory", "mem_ℒp"]]]}]}, {"timestamp": 1681130459, "sha": "df5e9937", "message": "chore(algebra/group_with_zero/units/basic): Deduplicate instance (#18785)\n`group_with_zero.cancel_monoid_with_zero` was a duplicate of `group_with_zero.to_cancel_monoid_with_zero`.\n`comm_group_with_zero.cancel_comm_monoid_with_zero` is renamed to include the usual `to_` prefix.\nThis should have been done in #18698.", "changes": [{"oldPath": "src/algebra/group_with_zero/units/basic.lean", "newPath": "src/algebra/group_with_zero/units/basic.lean", "changes": []}]}, {"timestamp": 1681130458, "sha": "0a0b3b41", "message": "feat(analysis/calculus/cont_diff): smoothness from Taylor series (#18768)\nThe proofs are basically trivial, but I think it is very nice to have the API.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": [["add", "theorem", "cont_diff", ["has_ftaylor_series_up_to"]], ["add", "theorem", "cont_diff_on", ["has_ftaylor_series_up_to_on"]]]}]}, {"timestamp": 1681126531, "sha": "8cab1cd8", "message": "feat(analysis/schwartz_space): 1-dimensional derivative (#18745)", "changes": [{"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": [["add", "def", "deriv_clm", ["schwartz_map"]], ["add", "theorem", "deriv_clm_apply", ["schwartz_map"]], ["add", "theorem", "differentiable_at", ["schwartz_map"]], ["add", "theorem", "le_seminorm'", ["schwartz_map"]], ["add", "theorem", "seminorm_le_bound'", ["schwartz_map"]]]}]}, {"timestamp": 1681102090, "sha": "9c444b9f", "message": "feat(.github/workflows): add modifies ported label automatically (#18782)", "changes": [{"oldPath": ".github/workflows/add_ported_warnings.yml", "newPath": ".github/workflows/add_ported_warnings.yml", "changes": []}, {"oldPath": "scripts/detect_ported_files.py", "newPath": "scripts/detect_ported_files.py", "changes": []}]}, {"timestamp": 1681042627, "sha": "e05ead79", "message": "chore(set_theory/cardinal/basic): less awkward placement of theorems (#18771)\nSome of the new results on limit cardinals were awkwardly breaking up blocks of code with related theorems, probably due to some botched merge. We reorder them to avoid this.\nPorted along other changes to this file in: https://github.com/leanprover-community/mathlib4/pull/3343", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1681026678, "sha": "b1c23399", "message": "refactor(linear_algebra/matrix/finite_dimensional): deduplicate (#18770)\n* `matrix.finrank_matrix` was a duplicate of `finite_dimensional.finrank_matrix`.\n* `linear_map.finrank_linear_map` was a duplicate of `finrank_linear_hom`, now merged to `finite_dimensional.finrank_linear_map`\n* `finite_dimensional.linear_map` was a duplicate of `linear_map.finite_dimensional` and can be golfed using `module.finite.linear_map`\n* `finite_dimensional.matrix` can be golfed using `module.finite.matrix`\nFor now, I've left behind `finite_dimensional` instances, but proved them in terms of the `module.finite` versions.\nTo enable this, some imports have been adjusted.\nThe resulting import structure substantially cuts the dependencies consumed by `linear_algebra.matrix.to_lin`; it no longer needs `module.rank` to be available.", "changes": [{"oldPath": "src/algebra/category/fgModule/basic.lean", "newPath": "src/algebra/category/fgModule/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": [["del", "theorem", "finrank_linear_map", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/matrix.lean", "newPath": "src/linear_algebra/free_module/finite/matrix.lean", "changes": [["add", "theorem", "finrank_linear_map", ["finite_dimensional"]], ["add", "theorem", "rank_vec_mul_vec", ["matrix"]], ["del", "theorem", "finrank_linear_hom", ["module", "free"]]]}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["mod", "theorem", "finrank_matrix", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/finite_dimensional.lean", "newPath": "src/linear_algebra/matrix/finite_dimensional.lean", "changes": [["del", "theorem", "finrank_matrix", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["del", "theorem", "finrank_linear_map", ["linear_map"]], ["del", "theorem", "rank_vec_mul_vec", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}]}, {"timestamp": 1680986770, "sha": "45ce3929", "message": "chore(linear_algebra/dimension): tidy lemma names for `linear_map.rank` (#18769)\n`le1` and `le2` don't really fit the usual naming convention.\nAlso generalizes `rank_le_domain` to rings and `rank_le_range` across universes.", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "rank_comp_le1", ["linear_map"]], ["del", "theorem", "rank_comp_le2", ["linear_map"]], ["add", "theorem", "rank_comp_le_left", ["linear_map"]], ["add", "theorem", "rank_comp_le_right", ["linear_map"]], ["mod", "theorem", "rank_le_range", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["mod", "theorem", "rank_vec_mul_vec", ["matrix"]]]}]}, {"timestamp": 1680979804, "sha": "284fdd29", "message": "chore(linear_algebra/alternating,topology/algebra/module/multilinear): add a fun_like instance (#18766)", "changes": [{"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff_def.lean", "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["del", "theorem", "to_multilinear_map_inj", ["continuous_multilinear_map"]], ["add", "theorem", "to_multilinear_map_injective", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1680967796, "sha": "36172d66", "message": "feat(analysis/inner_product_space/symmetric): Polarization for `is_R_or_C` (#18397)\nThis PR contains\n* polarization identity for `is_R_or_C` for `T.is_symmetric`\n* `T.is_symmetric` implies `(∀ x, ⟪x, T x⟫ = 0) ↔ T = 0`", "changes": [{"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": [["add", "theorem", "inner_map_eq_zero", ["linear_map", "is_symmetric"]], ["add", "theorem", "inner_map_polarization", ["linear_map", "is_symmetric"]]]}]}, {"timestamp": 1680959878, "sha": "19cb3751", "message": "chore(*): add mathlib4 synchronization comments (#18753)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_topology.simplex_category`\n* `analysis.hofer`\n* `analysis.normed.group.pointwise`\n* `analysis.specific_limits.basic`\n* `category_theory.idempotents.basic`\n* `category_theory.idempotents.functor_categories`\n* `category_theory.idempotents.functor_extension`\n* `category_theory.idempotents.karoubi`\n* `category_theory.idempotents.karoubi_karoubi`\n* `data.matrix.pequiv`\n* `data.nat.choose.multinomial`\n* `group_theory.perm.fin`\n* `linear_algebra.affine_space.combination`\n* `linear_algebra.finsupp_vector_space`\n* `linear_algebra.free_module.basic`\n* `linear_algebra.matrix.dot_product`\n* `linear_algebra.multilinear.basic`\n* `linear_algebra.multilinear.basis`\n* `linear_algebra.multilinear.tensor_product`\n* `linear_algebra.std_basis`\n* `linear_algebra.tensor_product_basis`\n* `ring_theory.mv_polynomial.basic`\n* `ring_theory.quotient_nilpotent`\n* `ring_theory.quotient_noetherian`\n* `ring_theory.simple_module`\n* `ring_theory.valuation.quotient`\n* `set_theory.zfc.basic`\n* `topology.algebra.filter_basis`\n* `topology.algebra.module.linear_pmap`\n* `topology.algebra.module.simple`\n* `topology.algebra.star_subalgebra`\n* `topology.algebra.uniform_field`\n* `topology.algebra.uniform_filter_basis`\n* `topology.metric_space.hausdorff_distance`", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/pointwise.lean", "newPath": "src/analysis/normed/group/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/basic.lean", "newPath": "src/category_theory/idempotents/basic.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/functor_categories.lean", "newPath": "src/category_theory/idempotents/functor_categories.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/functor_extension.lean", "newPath": "src/category_theory/idempotents/functor_extension.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/karoubi.lean", "newPath": "src/category_theory/idempotents/karoubi.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/karoubi_karoubi.lean", "newPath": "src/category_theory/idempotents/karoubi_karoubi.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/nat/choose/multinomial.lean", "newPath": "src/data/nat/choose/multinomial.lean", "changes": []}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/dot_product.lean", "newPath": "src/linear_algebra/matrix/dot_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basis.lean", "newPath": "src/linear_algebra/multilinear/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/tensor_product.lean", "newPath": "src/linear_algebra/multilinear/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product_basis.lean", "newPath": "src/linear_algebra/tensor_product_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/quotient_nilpotent.lean", "newPath": "src/ring_theory/quotient_nilpotent.lean", "changes": []}, {"oldPath": "src/ring_theory/quotient_noetherian.lean", "newPath": "src/ring_theory/quotient_noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/quotient.lean", "newPath": "src/ring_theory/valuation/quotient.lean", "changes": []}, {"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/linear_pmap.lean", "newPath": "src/topology/algebra/module/linear_pmap.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/simple.lean", "newPath": "src/topology/algebra/module/simple.lean", "changes": []}, {"oldPath": "src/topology/algebra/star_subalgebra.lean", "newPath": "src/topology/algebra/star_subalgebra.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_filter_basis.lean", "newPath": "src/topology/algebra/uniform_filter_basis.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1680959877, "sha": "8535b76e", "message": "feat(linear_algebra/matrix/rank): generalize to rings (#18748)\nThis addresses a TODO comment.\nTo achieve this we generalize `submodule.finrank_le`, `submodule.finrank_quotient_le`, and `finrank_le_finrank_of_injective` from vector spaces to free modules, and add a new lemma `linear_map.finrank_range_le`.", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": [["mod", "theorem", "rank_le_card_height", ["matrix"]], ["mod", "theorem", "rank_le_card_width", ["matrix"]], ["mod", "theorem", "rank_le_height", ["matrix"]], ["mod", "theorem", "rank_le_width", ["matrix"]], ["mod", "theorem", "rank_mul_le", ["matrix"]], ["mod", "theorem", "rank_of_is_unit", ["matrix"]], ["mod", "theorem", "rank_one", ["matrix"]], ["mod", "theorem", "rank_unit", ["matrix"]], ["mod", "theorem", "rank_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "finrank_le_finrank_of_injective", ["linear_map"]], ["del", "theorem", "finrank_le", ["submodule"]], ["del", "theorem", "finrank_quotient_le", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finrank.lean", "newPath": "src/linear_algebra/finrank.lean", "changes": [["add", "theorem", "finrank_le_finrank_of_rank_le_rank", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["add", "theorem", "finrank_le_finrank_of_injective", ["linear_map"]], ["add", "theorem", "finrank_range_le", ["linear_map"]], ["add", "theorem", "finrank_le", ["submodule"]], ["add", "theorem", "finrank_quotient_le", ["submodule"]]]}]}, {"timestamp": 1680953803, "sha": "2efd2423", "message": "chore(category_theory): simps should not add hom lemmas (#18742)\n`@[simps]` should not be used to simplify the `hom` field of a category instance.\nVery little needs to be changed when removing it.\nHowever the problem in https://github.com/leanprover-community/mathlib4/pull/3244 with a proof by `simp` failing seems to be implicated by this problem. If we remove the `@[simps]` generated lemma for `Hom` there, the original proof works (although is extremely slow).", "changes": [{"oldPath": "src/category_theory/category/basic.lean", "newPath": "src/category_theory/category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}]}, {"timestamp": 1680940416, "sha": "3a2039ad", "message": "chore(linear_algebra/dimension): remove outdated comment (#18759)\nThis used to be about `vector_space.dim`, but was caught up in the rename that fixed the naming inconsistency and is now nonsense.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}]}, {"timestamp": 1680905632, "sha": "f29120f8", "message": "chore(order/rel_iso/basic): better `namespace` management (#18758)\nWe remove a lot of `_root_` by simply closing and reopening a namespace.", "changes": [{"oldPath": "src/order/rel_iso/basic.lean", "newPath": "src/order/rel_iso/basic.lean", "changes": [["mod", "theorem", "acc_lift_on₂'_iff", []], ["mod", "theorem", "acc_lift₂_iff", []], ["mod", "def", "mk_rel_hom", ["quotient"]], ["mod", "theorem", "well_founded_lift_on₂'_iff", []], ["mod", "theorem", "well_founded_lift₂_iff", []]]}]}, {"timestamp": 1680881482, "sha": "dc65937e", "message": "feat(number_theory/pell): add API for solutions (#18626)\nThis continues the devlopment of the theory of Pell's equation.\nWe add some API lemmas for solutions, which will be needed for defining of the fundamental solution and proving its properties.\nSee [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Proving.20Pell's.20equation.20is.20solvable/near/343270338).", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["del", "theorem", "exists_pos_of_not_is_square", ["pell"]], ["add", "theorem", "eq_one_of_x_eq_one", ["pell", "solution₁"]], ["add", "theorem", "eq_one_or_neg_one_iff_y_eq_zero", ["pell", "solution₁"]], ["add", "theorem", "eq_zero_of_d_neg", ["pell", "solution₁"]], ["add", "theorem", "exists_nontrivial_of_not_is_square", ["pell", "solution₁"]], ["add", "theorem", "exists_pos_of_not_is_square", ["pell", "solution₁"]], ["add", "theorem", "exists_pos_variant", ["pell", "solution₁"]], ["add", "theorem", "sign_y_zpow_eq_sign_of_x_pos_of_y_pos", ["pell", "solution₁"]], ["add", "theorem", "x_mul_pos", ["pell", "solution₁"]], ["add", "theorem", "x_ne_zero", ["pell", "solution₁"]], ["add", "theorem", "x_pow_pos", ["pell", "solution₁"]], ["add", "theorem", "x_zpow_pos", ["pell", "solution₁"]], ["add", "theorem", "y_mul_pos", ["pell", "solution₁"]], ["add", "theorem", "y_ne_zero_of_one_lt_x", ["pell", "solution₁"]], ["add", "theorem", "y_pow_succ_pos", ["pell", "solution₁"]]]}]}, {"timestamp": 1680861647, "sha": "9dba31df", "message": "chore(set_theory/cardinal/basic): missing lemmas about `<`/`≤` and `lift c`/`↑n` (#18752)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "lift_le_nat_iff", ["cardinal"]], ["add", "theorem", "lift_lt_nat_iff", ["cardinal"]], ["add", "theorem", "nat_le_lift_iff", ["cardinal"]], ["add", "theorem", "nat_lt_lift_iff", ["cardinal"]]]}]}, {"timestamp": 1680802912, "sha": "5ec62c81", "message": "feat(linear_algebra/finrank): generalize finrank to ring in more places (#18716)\nThis replaces `[division_ring K]` with the first of the following which compiles:\n* `[ring K]`\n* `[ring K] [nontrivial K]`\n* `[ring K] [strong_rank_condition K]` (implies the previous one via the non-instance `nontrivial_of_invariant_basis_number`)", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finrank.lean", "newPath": "src/linear_algebra/finrank.lean", "changes": [["mod", "theorem", "nontrivial_of_finrank_eq_succ", ["finite_dimensional"]], ["mod", "theorem", "nontrivial_of_finrank_pos", ["finite_dimensional"]], ["mod", "theorem", "finrank_bot", []], ["mod", "theorem", "finrank_eq_one", []], ["mod", "theorem", "finrank_bot", ["subalgebra"]], ["mod", "theorem", "rank_bot", ["subalgebra"]]]}]}, {"timestamp": 1680792280, "sha": "e08a42b2", "message": "chore(set_theory/cardinal/basic): missing lemmas about `lift c < ℵ₀` and `ℵ₀ < lift c` (#18746)\nWe already had the `le` versions `lift_le_aleph0` and `aleph0_le_lift`, this adds the `lt` ones `lift_lt_aleph0` and `aleph0_lt_lift`.\nThis turns out to be useful for proving some results about `finrank`, as well as golfing some existing proofs.\nSince they're trivial, this adds the same lemmas about `continuum` too.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "aleph_0_lt_lift", ["cardinal"]], ["add", "theorem", "lift_lt_aleph_0", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": [["add", "theorem", "continuum_le_lift", ["cardinal"]], ["add", "theorem", "continuum_lt_lift", ["cardinal"]], ["add", "theorem", "lift_le_continuum", ["cardinal"]], ["add", "theorem", "lift_lt_continuum", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}]}, {"timestamp": 1680785135, "sha": "67e606ea", "message": "chore(linear_algebra/dimension): fix lemma names (#18747)\nThis fixes some lemma names which use `rank` but are about `finrank`:\n* `rank_sup_add_rank_inf_eq` → `submodule.rank_sup_add_rank_inf_eq`\n* `rank_add_le_rank_add_rank` → `submodule.rank_add_le_rank_add_rank`\n* `submodule.rank_sup_add_rank_inf_eq` → `submodule.finrank_sup_add_finrank_inf_eq`\n* `submodule.rank_add_le_rank_add_rank` → `submodule.finrank_add_le_finrank_add_finrank`", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "rank_add_le_rank_add_rank", []], ["del", "theorem", "rank_sup_add_rank_inf_eq", []], ["add", "theorem", "rank_add_le_rank_add_rank", ["submodule"]], ["add", "theorem", "rank_sup_add_rank_inf_eq", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_add_le_finrank_add_finrank", ["submodule"]], ["add", "theorem", "finrank_sup_add_finrank_inf_eq", ["submodule"]], ["del", "theorem", "rank_add_le_rank_add_rank", ["submodule"]], ["del", "theorem", "rank_sup_add_rank_inf_eq", ["submodule"]]]}]}, {"timestamp": 1680776530, "sha": "60da01b4", "message": "feat(number_theory/number_field/canonical_embedding): add canonical embedding (#17783)\nThis PR defines the canonical embedding of a number field $K$ of signature $(r_1, r_2)$ into $\\mathbb{R}^{r_1} × \\mathbb{C}^{r_2}$ and prove various results about this embedding, including the fact that the image of the ring of integers of $K$ is discrete.", "changes": [{"oldPath": null, "newPath": "src/number_theory/number_field/canonical_embedding.lean", "changes": [["add", "theorem", "apply_at_complex_infinite_place", ["number_field", "canonical_embedding"]], ["add", "theorem", "apply_at_real_infinite_place", ["number_field", "canonical_embedding"]], ["add", "def", "equiv_integer_lattice", ["number_field", "canonical_embedding"]], ["add", "theorem", "inter_ball_finite", ["number_field", "canonical_embedding", "integer_lattice"]], ["add", "def", "integer_lattice", ["number_field", "canonical_embedding"]], ["add", "theorem", "nnnorm_eq", ["number_field", "canonical_embedding"]], ["add", "theorem", "non_trivial_space", ["number_field", "canonical_embedding"]], ["add", "theorem", "norm_le_iff", ["number_field", "canonical_embedding"]], ["add", "theorem", "space_rank", ["number_field", "canonical_embedding"]], ["add", "def", "canonical_embedding", ["number_field"]], ["add", "theorem", "canonical_embedding_injective", ["number_field"]]]}, {"oldPath": "src/number_theory/number_field/embeddings.lean", "newPath": "src/number_theory/number_field/embeddings.lean", "changes": [["add", "theorem", "abs_embedding_apply", ["number_field", "infinite_place", "is_real"]], ["add", "theorem", "is_real_or_is_complex", ["number_field", "infinite_place"]], ["add", "theorem", "not_is_complex_iff_is_real", ["number_field", "infinite_place"]], ["mod", "theorem", "not_is_real_iff_is_complex", ["number_field", "infinite_place"]]]}]}, {"timestamp": 1680769405, "sha": "5aa3c1de", "message": "chore(linear_algebra/dimension): deduplicate lemmas (#18743)\nWe have some lemmas in the `module.free` namespace which duplicate lemmas in the root namespace. This moves all the remaining `rank` lemmas in this namespace into the root namespace, and cleans up the overlapping lemmas this creates.\nThe changes are:\n* `module.free.rank_eq_card_choose_basis_index`: unchanged but moved to an earlier file\n* `rank_prod` → `rank_prod'` (the non-universe polymorphic version)\n* `module.free.rank_prod` → `rank_prod`\n* none → `rank_finsupp` (new lemma)\n* `finsupp.rank_eq` → `rank_finsupp'` (the non-universe polymorphic version)\n* `module.free.rank_finsupp` → `rank_finsupp_self`\n* `module.free.rank_finsupp'` → `rank_finsupp_self'` (the non-universe polymorphic version)\n* `module.free.rank_pi_finite` → `rank_pi` (these were duplicates)\n* For everything else, `module.free.rank_*` → `rank_*`", "changes": [{"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "rank_eq", ["finsupp"]], ["add", "theorem", "rank_eq_card_choose_basis_index", ["module", "free"]], ["mod", "theorem", "rank_pi", []], ["add", "theorem", "rank_prod'", []], ["mod", "theorem", "rank_prod", []]]}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": [["del", "theorem", "rank_direct_sum", ["module", "free"]], ["del", "theorem", "rank_eq_card_choose_basis_index", ["module", "free"]], ["del", "theorem", "rank_finsupp'", ["module", "free"]], ["del", "theorem", "rank_finsupp", ["module", "free"]], ["del", "theorem", "rank_matrix''", ["module", "free"]], ["del", "theorem", "rank_matrix'", ["module", "free"]], ["del", "theorem", "rank_matrix", ["module", "free"]], ["del", "theorem", "rank_pi_finite", ["module", "free"]], ["del", "theorem", "rank_prod'", ["module", "free"]], ["del", "theorem", "rank_prod", ["module", "free"]], ["del", "theorem", "rank_tensor_product'", ["module", "free"]], ["del", "theorem", "rank_tensor_product", ["module", "free"]], ["add", "theorem", "rank_direct_sum", []], ["add", "theorem", "rank_finsupp'", []], ["add", "theorem", "rank_finsupp", []], ["add", "theorem", "rank_finsupp_self'", []], ["add", "theorem", "rank_finsupp_self", []], ["add", "theorem", "rank_matrix''", []], ["add", "theorem", "rank_matrix'", []], ["add", "theorem", "rank_matrix", []], ["add", "theorem", "rank_tensor_product'", []], ["add", "theorem", "rank_tensor_product", []]]}]}, {"timestamp": 1680744835, "sha": "75be6b61", "message": "chore(*): add mathlib4 synchronization comments (#18744)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.char_p.char_and_card`\n* `category_theory.abelian.basic`\n* `category_theory.grothendieck`\n* `category_theory.sites.sheaf`\n* `combinatorics.simple_graph.adj_matrix`\n* `combinatorics.simple_graph.inc_matrix`\n* `computability.ackermann`\n* `data.string.basic`\n* `group_theory.perm.cycle.type`\n* `order.category.Lat`\n* `order.category.LinOrd`\n* `order.category.NonemptyFinLinOrd`\n* `order.category.PartOrd`\n* `order.category.Preord`\n* `ring_theory.eisenstein_criterion`\n* `ring_theory.ideal.quotient_operations`\n* `topology.algebra.algebra`\n* `topology.algebra.infinite_sum.module`\n* `topology.instances.real_vector_space`\n* `topology.instances.triv_sq_zero_ext`", "changes": [{"oldPath": "src/algebra/char_p/char_and_card.lean", "newPath": "src/algebra/char_p/char_and_card.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/inc_matrix.lean", "newPath": "src/combinatorics/simple_graph/inc_matrix.lean", "changes": []}, {"oldPath": "src/computability/ackermann.lean", "newPath": "src/computability/ackermann.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": []}, {"oldPath": "src/order/category/Lat.lean", "newPath": "src/order/category/Lat.lean", "changes": []}, {"oldPath": "src/order/category/LinOrd.lean", "newPath": "src/order/category/LinOrd.lean", "changes": []}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/category/PartOrd.lean", "newPath": "src/order/category/PartOrd.lean", "changes": []}, {"oldPath": "src/order/category/Preord.lean", "newPath": "src/order/category/Preord.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient_operations.lean", "newPath": "src/ring_theory/ideal/quotient_operations.lean", "changes": []}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum/module.lean", "newPath": "src/topology/algebra/infinite_sum/module.lean", "changes": []}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}, {"oldPath": "src/topology/instances/triv_sq_zero_ext.lean", "newPath": "src/topology/instances/triv_sq_zero_ext.lean", "changes": []}]}, {"timestamp": 1680707584, "sha": "06a655b5", "message": "feat(data/list/to_finsupp): computable finsupp from list (#15161)\nvia `list.nthd`\nOn the way to computable list-based polynomials", "changes": [{"oldPath": null, "newPath": "src/data/list/to_finsupp.lean", "changes": [["add", "theorem", "coe_to_finsupp", ["list"]], ["add", "def", "to_finsupp", ["list"]], ["add", "theorem", "to_finsupp_apply", ["list"]], ["add", "theorem", "to_finsupp_apply_le", ["list"]], ["add", "theorem", "to_finsupp_apply_lt", ["list"]], ["add", "theorem", "to_finsupp_concat_eq_to_finsupp_add_single", ["list"]], ["add", "theorem", "to_finsupp_cons_apply_succ", ["list"]], ["add", "theorem", "to_finsupp_cons_apply_zero", ["list"]], ["add", "theorem", "to_finsupp_cons_eq_single_add_emb_domain", ["list"]], ["add", "theorem", "to_finsupp_eq_sum_map_enum_single", ["list"]], ["add", "theorem", "to_finsupp_nil", ["list"]], ["add", "theorem", "to_finsupp_singleton", ["list"]], ["add", "theorem", "to_finsupp_support", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "pairwise_nil", ["multiset"]], ["add", "theorem", "pairwise_zero", ["multiset"]]]}]}, {"timestamp": 1680700794, "sha": "55102fc1", "message": "chore(linear_algebra/matrix/adjugate): add missing `matrix.of` wrapper (#18736)", "changes": [{"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["mod", "def", "adjugate", ["matrix"]]]}]}, {"timestamp": 1680700793, "sha": "9c6816ca", "message": "chore(category_theory/monad/basic): remove some simp lemmas (#18727)\nThis is a backport from mathlib4, where the simpNF (correctly) linter disapproves of these lemmas. Mostly this PR exists to verify that these are not needed in the simp set.\nhttps://github.com/leanprover-community/mathlib4/pull/2969", "changes": [{"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}]}, {"timestamp": 1680692155, "sha": "039a089d", "message": "refactor(linear_algebra/dimension): use `rank` in lemma names instead of `dim` (#18741)\nThe `dim` name is left from the previous name of the function, `vector_space.dim`. When that was merged with `module.rank` in #7322, we left renaming the existing lemmas as future work.\nThis commit was made by replacing `(\\b|(?<=_))dim(\\b|(?=_))` with `rank` in the `dimension` and `finite_dimensional` files, and then manually fixing downstream breakages; it's important not to rename `power_basis.dim` at the same time!\nDeciding whether to move some of these to the `module` namespace is left as future work, the diff is already big enough.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": [["del", "theorem", "sol_space_dim", ["linear_recurrence"]], ["add", "theorem", "sol_space_rank", ["linear_recurrence"]]]}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["del", "theorem", "dim_eq_four", ["quaternion"]], ["add", "theorem", "rank_eq_four", ["quaternion"]], ["del", "theorem", "dim_eq_four", ["quaternion_algebra"]], ["add", "theorem", "rank_eq_four", ["quaternion_algebra"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["del", "theorem", "dim_real_complex", ["complex"]], ["add", "theorem", "rank_real_complex", ["complex"]], ["mod", "theorem", "{u}", ["complex"]], ["del", "theorem", "dim_real_of_complex", []], ["add", "theorem", "rank_real_of_complex", []]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["del", "theorem", "bot_eq_top_of_dim_adjoin_eq_one", ["intermediate_field"]], ["add", "theorem", "bot_eq_top_of_rank_adjoin_eq_one", ["intermediate_field"]], ["del", "theorem", "dim_adjoin_eq_one_iff", ["intermediate_field"]], ["del", "theorem", "dim_adjoin_simple_eq_one_iff", ["intermediate_field"]], ["del", "theorem", "dim_bot", ["intermediate_field"]], ["del", "theorem", "dim_eq_one_iff", ["intermediate_field"]], ["add", "theorem", "rank_adjoin_eq_one_iff", ["intermediate_field"]], ["add", "theorem", "rank_adjoin_simple_eq_one_iff", ["intermediate_field"]], ["add", "theorem", "rank_bot", ["intermediate_field"]], ["add", "theorem", "rank_eq_one_iff", ["intermediate_field"]], ["del", "theorem", "subsingleton_of_dim_adjoin_eq_one", ["intermediate_field"]], ["add", "theorem", "subsingleton_of_rank_adjoin_eq_one", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": [["del", "theorem", "dim_R", ["mv_polynomial"]], ["add", "theorem", "rank_R", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": [["del", "theorem", "dim_lt_aleph_0", ["is_noetherian"]], ["del", "theorem", "iff_dim_lt_aleph_0", ["is_noetherian"]], ["add", "theorem", "iff_rank_lt_aleph_0", ["is_noetherian"]], ["add", "theorem", "rank_lt_aleph_0", ["is_noetherian"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["del", "theorem", "dim_le_card", ["fixed_points"]], ["add", "theorem", "rank_le_card", ["fixed_points"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["del", "theorem", "dim_eq_dim_subalgebra", ["intermediate_field"]], ["add", "theorem", "rank_eq_rank_subalgebra", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["del", "theorem", "dim_mv_polynomial", ["mv_polynomial"]], ["add", "theorem", "rank_mv_polynomial", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": [["del", "theorem", "dim_mul_dim'", []], ["del", "theorem", "dim_mul_dim", []], ["add", "theorem", "rank_mul_rank'", []], ["add", "theorem", "rank_mul_rank", []]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["del", "theorem", "collinear_iff_dim_le_one", []], ["add", "theorem", "collinear_iff_rank_le_one", []]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "finite_index_of_dim_lt_aleph_0", ["basis"]], ["add", "theorem", "finite_index_of_rank_lt_aleph_0", ["basis"]], ["del", "theorem", "finite_of_vector_space_index_of_dim_lt_aleph_0", ["basis"]], ["add", "theorem", "finite_of_vector_space_index_of_rank_lt_aleph_0", ["basis"]], ["del", "theorem", "mk_eq_dim''", ["basis"]], ["del", "theorem", "mk_eq_dim", ["basis"]], ["add", "theorem", "mk_eq_rank''", ["basis"]], ["add", "theorem", "mk_eq_rank", ["basis"]], ["del", "theorem", "mk_range_eq_dim", ["basis"]], ["add", "theorem", "mk_range_eq_rank", ["basis"]], ["del", "theorem", "nonempty_fintype_index_of_dim_lt_aleph_0", ["basis"]], ["add", "theorem", "nonempty_fintype_index_of_rank_lt_aleph_0", ["basis"]], ["del", "def", "of_dim_eq_zero", ["basis"]], ["del", "theorem", "of_dim_eq_zero_apply", ["basis"]], ["add", "def", "of_rank_eq_zero", ["basis"]], ["add", "theorem", "of_rank_eq_zero_apply", ["basis"]], ["del", "theorem", "cardinal_le_dim_of_linear_independent'", []], ["del", "theorem", "cardinal_le_dim_of_linear_independent", []], ["add", "theorem", "cardinal_le_rank_of_linear_independent'", []], ["add", "theorem", "cardinal_le_rank_of_linear_independent", []], ["del", "theorem", "cardinal_lift_le_dim_of_linear_independent'", []], ["add", "theorem", "cardinal_lift_le_rank_of_linear_independent'", []], ["del", "theorem", "dim_add_dim_split", []], ["del", "theorem", "dim_add_le_dim_add_dim", []], ["del", "theorem", "dim_bot", []], ["del", "theorem", "dim_eq_card_basis", []], ["del", "theorem", "dim_eq_of_injective", []], ["del", "theorem", "dim_eq_of_surjective", []], ["del", "theorem", "dim_fin_fun", []], ["del", "theorem", "dim_fun'", []], ["del", "theorem", "dim_fun", []], ["del", "theorem", "dim_fun_eq_lift_mul", []], ["del", "theorem", "dim_le", []], ["del", "theorem", "dim_le_of_submodule", []], ["del", "theorem", "dim_le_one_iff", []], ["del", "theorem", "dim_map_le", []], ["del", "theorem", "dim_pi", []], ["del", "theorem", "dim_pos", []], ["del", "theorem", "dim_pos_iff_exists_ne_zero", []], ["del", "theorem", "dim_pos_iff_nontrivial", []], ["del", "theorem", "dim_prod", []], ["del", "theorem", "dim_punit", []], ["del", "theorem", "dim_quotient_add_dim", []], ["del", "theorem", "dim_quotient_le", []], ["del", "theorem", "dim_range_add_dim_ker", []], ["del", "theorem", "dim_range_le", []], ["del", "theorem", "dim_range_of_surjective", []], ["del", "theorem", "dim_self", []], ["del", "theorem", "dim_span", []], ["del", "theorem", "dim_span_le", []], ["del", "theorem", "dim_span_of_finset", []], ["del", "theorem", "dim_span_set", []], ["del", "theorem", "dim_submodule_le", []], ["del", "theorem", "dim_submodule_le_one_iff'", []], ["del", "theorem", "dim_submodule_le_one_iff", []], ["del", "theorem", "dim_subsingleton", []], ["del", "theorem", "dim_sup_add_dim_inf_eq", []], ["del", "theorem", "dim_top", []], ["del", "theorem", "dim_zero_iff", []], ["del", "theorem", "dim_zero_iff_forall_zero", []], ["del", "theorem", "exists_mem_ne_zero_of_dim_pos", []], ["add", "theorem", "exists_mem_ne_zero_of_rank_pos", []], ["del", "theorem", "dim_eq", ["finsupp"]], ["add", "theorem", "rank_eq", ["finsupp"]], ["del", "theorem", "le_dim_iff_exists_linear_independent", []], ["del", "theorem", "le_dim_iff_exists_linear_independent_finset", []], ["add", "theorem", "le_rank_iff_exists_linear_independent", []], ["add", "theorem", "le_rank_iff_exists_linear_independent_finset", []], ["del", "theorem", "lift_dim_map_le", []], ["del", "theorem", "lift_dim_range_le", []], ["add", "theorem", "lift_rank_map_le", []], ["add", "theorem", "lift_rank_range_le", []], ["del", "theorem", "dim_eq", ["linear_equiv"]], ["del", "theorem", "dim_map_eq", ["linear_equiv"]], ["del", "theorem", "lift_dim_eq", ["linear_equiv"]], ["add", "theorem", "lift_rank_eq", ["linear_equiv"]], ["del", "theorem", "nonempty_equiv_iff_dim_eq", ["linear_equiv"]], ["del", "theorem", "nonempty_equiv_iff_lift_dim_eq", ["linear_equiv"]], ["add", "theorem", "nonempty_equiv_iff_lift_rank_eq", ["linear_equiv"]], ["add", "theorem", "nonempty_equiv_iff_rank_eq", ["linear_equiv"]], ["del", "def", "of_dim_eq", ["linear_equiv"]], ["del", "def", "of_lift_dim_eq", ["linear_equiv"]], ["add", "def", "of_lift_rank_eq", ["linear_equiv"]], ["add", "def", "of_rank_eq", ["linear_equiv"]], ["add", "theorem", "rank_eq", ["linear_equiv"]], ["add", "theorem", "rank_map_eq", ["linear_equiv"]], ["del", "theorem", "dim_le_of_injective", ["linear_map"]], ["del", "theorem", "dim_le_of_surjective", ["linear_map"]], ["del", "theorem", "lift_dim_le_of_injective", ["linear_map"]], ["add", "theorem", "lift_rank_le_of_injective", ["linear_map"]], ["add", "theorem", "rank_le_of_injective", ["linear_map"]], ["add", "theorem", "rank_le_of_surjective", ["linear_map"]], ["del", "theorem", "nonempty_linear_equiv_of_dim_eq", []], ["del", "theorem", "nonempty_linear_equiv_of_lift_dim_eq", []], ["add", "theorem", "nonempty_linear_equiv_of_lift_rank_eq", []], ["add", "theorem", "nonempty_linear_equiv_of_rank_eq", []], ["add", "theorem", "rank_add_le_rank_add_rank", []], ["add", "theorem", "rank_add_rank_split", []], ["add", "theorem", "rank_bot", []], ["add", "theorem", "rank_eq_card_basis", []], ["add", "theorem", "rank_eq_of_injective", []], ["add", "theorem", "rank_eq_of_surjective", []], ["add", "theorem", "rank_fin_fun", []], ["add", "theorem", "rank_fun'", []], ["add", "theorem", "rank_fun", []], ["add", "theorem", "rank_fun_eq_lift_mul", []], ["add", "theorem", "rank_le", []], ["add", "theorem", "rank_le_of_submodule", []], ["add", "theorem", "rank_le_one_iff", []], ["add", "theorem", "rank_map_le", []], ["add", "theorem", "rank_pi", []], ["add", "theorem", "rank_pos", []], ["add", "theorem", "rank_pos_iff_exists_ne_zero", []], ["add", "theorem", "rank_pos_iff_nontrivial", []], ["add", "theorem", "rank_prod", []], ["add", "theorem", "rank_punit", []], ["add", "theorem", "rank_quotient_add_rank", []], ["add", "theorem", "rank_quotient_le", []], ["add", "theorem", "rank_range_add_rank_ker", []], ["add", "theorem", "rank_range_le", []], ["add", "theorem", "rank_range_of_surjective", []], ["add", "theorem", "rank_self", []], ["add", "theorem", "rank_span", []], ["add", "theorem", "rank_span_le", []], ["add", "theorem", "rank_span_of_finset", []], ["add", "theorem", "rank_span_set", []], ["add", "theorem", "rank_submodule_le", []], ["add", "theorem", "rank_submodule_le_one_iff'", []], ["add", "theorem", "rank_submodule_le_one_iff", []], ["add", "theorem", "rank_subsingleton", []], ["add", "theorem", "rank_sup_add_rank_inf_eq", []], ["add", "theorem", "rank_top", []], ["add", "theorem", "rank_zero_iff", []], ["add", "theorem", "rank_zero_iff_forall_zero", []], ["mod", "theorem", "{m}", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["del", "theorem", "dual_dim_eq", ["basis"]], ["add", "theorem", "dual_rank_eq", ["basis"]], ["del", "theorem", "dual_dim_eq", ["module"]], ["add", "theorem", "dual_rank_eq", ["module"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "bot_eq_top_of_dim_eq_zero", []], ["add", "theorem", "bot_eq_top_of_rank_eq_zero", []], ["del", "theorem", "cardinal_mk_eq_cardinal_mk_field_pow_dim", []], ["add", "theorem", "cardinal_mk_eq_cardinal_mk_field_pow_rank", []], ["del", "theorem", "dim_eq_zero", []], ["del", "theorem", "exists_nontrivial_relation_of_dim_lt_card", ["finite_dimensional"]], ["add", "theorem", "exists_nontrivial_relation_of_rank_lt_card", ["finite_dimensional"]], ["del", "theorem", "exists_nontrivial_relation_sum_zero_of_dim_succ_lt_card", ["finite_dimensional"]], ["add", "theorem", "exists_nontrivial_relation_sum_zero_of_rank_succ_lt_card", ["finite_dimensional"]], ["del", "theorem", "exists_relation_sum_zero_pos_coefficient_of_dim_succ_lt_card", ["finite_dimensional"]], ["add", "theorem", "exists_relation_sum_zero_pos_coefficient_of_rank_succ_lt_card", ["finite_dimensional"]], ["del", "theorem", "finrank_eq_dim", ["finite_dimensional"]], ["add", "theorem", "finrank_eq_rank'", ["finite_dimensional"]], ["del", "theorem", "finite_dimensional_of_dim_eq_nat", []], ["del", "theorem", "finite_dimensional_of_dim_eq_one", []], ["del", "theorem", "finite_dimensional_of_dim_eq_zero", []], ["add", "theorem", "finite_dimensional_of_rank_eq_nat", []], ["add", "theorem", "finite_dimensional_of_rank_eq_one", []], ["add", "theorem", "finite_dimensional_of_rank_eq_zero", []], ["del", "theorem", "finrank_eq_zero_of_dim_eq_zero", []], ["add", "theorem", "finrank_eq_zero_of_rank_eq_zero", []], ["add", "theorem", "rank_eq_zero", []], ["del", "theorem", "bot_eq_top_iff_dim_eq_one", ["subalgebra"]], ["add", "theorem", "bot_eq_top_iff_rank_eq_one", ["subalgebra"]], ["del", "theorem", "dim_eq_one_iff", ["subalgebra"]], ["del", "theorem", "eq_bot_of_dim_le_one", ["subalgebra"]], ["add", "theorem", "eq_bot_of_rank_le_one", ["subalgebra"]], ["add", "theorem", "rank_eq_one_iff", ["subalgebra"]], ["del", "theorem", "dim_add_le_dim_add_dim", ["submodule"]], ["del", "theorem", "dim_sup_add_dim_inf_eq", ["submodule"]], ["add", "theorem", "rank_add_le_rank_add_rank", ["submodule"]], ["add", "theorem", "rank_sup_add_rank_inf_eq", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finrank.lean", "newPath": "src/linear_algebra/finrank.lean", "changes": [["del", "theorem", "dim_lt_of_finrank_lt", ["finite_dimensional"]], ["del", "theorem", "finrank_eq_of_dim_eq", ["finite_dimensional"]], ["add", "theorem", "finrank_eq_of_rank_eq", ["finite_dimensional"]], ["del", "theorem", "finrank_le_of_dim_le", ["finite_dimensional"]], ["add", "theorem", "finrank_le_of_rank_le", ["finite_dimensional"]], ["del", "theorem", "finrank_lt_of_dim_lt", ["finite_dimensional"]], ["add", "theorem", "finrank_lt_of_rank_lt", ["finite_dimensional"]], ["add", "theorem", "rank_lt_of_finrank_lt", ["finite_dimensional"]], ["del", "theorem", "dim_bot", ["subalgebra"]], ["del", "theorem", "dim_to_submodule", ["subalgebra"]], ["del", "theorem", "dim_top", ["subalgebra"]], ["add", "theorem", "rank_bot", ["subalgebra"]], ["add", "theorem", "rank_to_submodule", ["subalgebra"]], ["add", "theorem", "rank_top", ["subalgebra"]], ["del", "theorem", "subalgebra_top_dim_eq_submodule_top_dim", []], ["add", "theorem", "subalgebra_top_rank_eq_submodule_top_rank", []]]}, {"oldPath": "src/linear_algebra/free_algebra.lean", "newPath": "src/linear_algebra/free_algebra.lean", "changes": [["del", "theorem", "dim_eq", ["free_algebra"]], ["add", "theorem", "rank_eq", ["free_algebra"]]]}, {"oldPath": "src/linear_algebra/free_module/finite/matrix.lean", "newPath": "src/linear_algebra/free_module/finite/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": [["del", "theorem", "dim_pow_quot", ["ideal"]], ["del", "theorem", "dim_pow_quot_aux", ["ideal"]], ["del", "theorem", "dim_prime_pow_ramification_idx", ["ideal"]], ["add", "theorem", "rank_pow_quot", ["ideal"]], ["add", "theorem", "rank_pow_quot_aux", ["ideal"]], ["add", "theorem", "rank_prime_pow_ramification_idx", ["ideal"]]]}]}, {"timestamp": 1680692154, "sha": "0ac3057e", "message": "feat(field_theory/is_alg_closed/algebraic_closure): add instances normal and is_galois for algebraic closure (#18730)", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}]}, {"timestamp": 1680692153, "sha": "b2a5f0d6", "message": "feat(analysis/schwartz_space): construction of continuous linear maps (#18651)\nThis PR has two parts: (a) create two definitions to construct continuous linear maps (the point being that one wants to reuse the boundedness estimate for both the well-posedness and the continuity) and (b) drastically reduce the boilerplate for `schwartz_map.fderiv_clm`.", "changes": [{"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": [["del", "theorem", "coe_fderiv", ["schwartz_map"]], ["del", "def", "fderiv", ["schwartz_map"]], ["del", "theorem", "fderiv_apply", ["schwartz_map"]], ["mod", "theorem", "fderiv_clm_apply", ["schwartz_map"]], ["del", "def", "fderiv_lm", ["schwartz_map"]], ["del", "theorem", "fderiv_lm_apply", ["schwartz_map"]], ["add", "def", "mk_clm", ["schwartz_map"]], ["add", "def", "mk_lm", ["schwartz_map"]]]}]}, {"timestamp": 1680680893, "sha": "e8638a0f", "message": "feat(algebra/divisibility/basic): Dot notation aliases (#18698)\nA few convenience shortcuts for `dvd` along with some simple `nat` lemmas. Also\n* Drop `neg_dvd_of_dvd`/`dvd_of_neg_dvd`/`dvd_neg_of_dvd`/`dvd_of_dvd_neg` in favor of the aforementioned shortcuts.\n* Remove explicit arguments to `dvd_neg`/`neg_dvd`.\n* Drop `int.of_nat_dvd_of_dvd_nat_abs`/`int.dvd_nat_abs_of_of_nat_dvd` because they are the two directions of `int.coe_nat_dvd_left`.\n* Move `group_with_zero.to_cancel_monoid_with_zero` from `algebra.group_with_zero.units.basic` back to `algebra.group_with_zero.basic`. It was erroneously moved during the Great Splits.", "changes": [{"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo2011_q5.lean", "newPath": "archive/imo/imo2011_q5.lean", "changes": []}, {"oldPath": "src/algebra/divisibility/basic.lean", "newPath": "src/algebra/divisibility/basic.lean", "changes": [["add", "theorem", "dvd_of_eq", []]]}, {"oldPath": "src/algebra/euclidean_domain/basic.lean", "newPath": "src/algebra/euclidean_domain/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "eq_one_of_mul_left", []], ["add", "theorem", "eq_one_of_mul_right", []], ["add", "theorem", "mul_eq_one", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "left_eq_mul₀", []], ["add", "theorem", "mul_eq_left₀", []], ["add", "theorem", "mul_eq_right₀", []], ["add", "theorem", "right_eq_mul₀", []]]}, {"oldPath": "src/algebra/group_with_zero/divisibility.lean", "newPath": "src/algebra/group_with_zero/divisibility.lean", "changes": [["add", "theorem", "dvd_antisymm'", []], ["add", "theorem", "dvd_antisymm", []], ["add", "theorem", "eq_of_forall_dvd'", []], ["add", "theorem", "eq_of_forall_dvd", []]]}, {"oldPath": "src/algebra/order/monoid/canonical/defs.lean", "newPath": "src/algebra/order/monoid/canonical/defs.lean", "changes": []}, {"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": [["add", "theorem", "add_eq_zero'", []], ["del", "theorem", "add_eq_zero", []]]}, {"oldPath": "src/algebra/ring/divisibility.lean", "newPath": "src/algebra/ring/divisibility.lean", "changes": [["del", "theorem", "dvd_add_iff_left", []], ["del", "theorem", "dvd_add_iff_right", []], ["mod", "theorem", "dvd_add_right", []], ["mod", "theorem", "dvd_iff_dvd_of_dvd_sub", []], ["mod", "theorem", "dvd_neg", []], ["del", "theorem", "dvd_neg_of_dvd", []], ["del", "theorem", "dvd_of_dvd_neg", []], ["del", "theorem", "dvd_of_neg_dvd", []], ["add", "theorem", "dvd_sub_left", []], ["add", "theorem", "dvd_sub_right", []], ["add", "theorem", "dvd_sub_self_left", []], ["add", "theorem", "dvd_sub_self_right", []], ["mod", "theorem", "neg_dvd", []], ["del", "theorem", "neg_dvd_of_dvd", []], ["mod", "theorem", "two_dvd_bit1", []]]}, {"oldPath": "src/data/int/dvd/basic.lean", "newPath": "src/data/int/dvd/basic.lean", "changes": [["del", "theorem", "dvd_nat_abs_of_of_nat_dvd", ["int"]], ["del", "theorem", "of_nat_dvd_of_dvd_nat_abs", ["int"]]]}, {"oldPath": "src/data/int/dvd/pow.lean", "newPath": "src/data/int/dvd/pow.lean", "changes": []}, {"oldPath": "src/data/int/order/basic.lean", "newPath": "src/data/int/order/basic.lean", "changes": []}, {"oldPath": "src/data/nat/gcd/basic.lean", "newPath": "src/data/nat/gcd/basic.lean", "changes": [["add", "theorem", "lcm_pos", ["nat"]]]}, {"oldPath": "src/data/nat/order/basic.lean", "newPath": "src/data/nat/order/basic.lean", "changes": [["del", "theorem", "mul_eq_one_iff", ["nat"]]]}, {"oldPath": "src/data/nat/order/lemmas.lean", "newPath": "src/data/nat/order/lemmas.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/basic.lean", "newPath": "src/group_theory/perm/cycle/basic.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/number_theory/multiplicity.lean", "newPath": "src/number_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}]}, {"timestamp": 1680672684, "sha": "d64d67d0", "message": "chore(*): add mathlib4 synchronization comments (#18726)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebraic_topology.dold_kan.compatibility`\n* `category_theory.shift.basic`\n* `category_theory.sites.sheaf_of_types`\n* `category_theory.triangulated.basic`\n* `combinatorics.additive.e_transform`\n* `computability.regular_expressions`\n* `data.fin.tuple.reflection`\n* `data.finset.interval`\n* `data.list.intervals`\n* `data.matrix.basis`\n* `data.matrix.block`\n* `data.matrix.char_p`\n* `data.matrix.dual_number`\n* `data.matrix.hadamard`\n* `data.mv_polynomial.expand`\n* `data.mv_polynomial.monad`\n* `linear_algebra.isomorphisms`\n* `linear_algebra.matrix.orthogonal`\n* `linear_algebra.matrix.symmetric`\n* `linear_algebra.matrix.trace`\n* `logic.hydra`\n* `ring_theory.finite_type`\n* `ring_theory.rees_algebra`\n* `ring_theory.zmod`\n* `topology.algebra.module.basic`\n* `topology.uniform_space.matrix`", "changes": [{"oldPath": "src/algebraic_topology/dold_kan/compatibility.lean", "newPath": "src/algebraic_topology/dold_kan/compatibility.lean", "changes": []}, {"oldPath": "src/category_theory/shift/basic.lean", "newPath": "src/category_theory/shift/basic.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/e_transform.lean", "newPath": "src/combinatorics/additive/e_transform.lean", "changes": []}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": []}, {"oldPath": "src/data/fin/tuple/reflection.lean", "newPath": "src/data/fin/tuple/reflection.lean", "changes": []}, {"oldPath": "src/data/finset/interval.lean", "newPath": "src/data/finset/interval.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": []}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": []}, {"oldPath": "src/data/matrix/char_p.lean", "newPath": "src/data/matrix/char_p.lean", "changes": []}, {"oldPath": "src/data/matrix/dual_number.lean", "newPath": "src/data/matrix/dual_number.lean", "changes": []}, {"oldPath": "src/data/matrix/hadamard.lean", "newPath": "src/data/matrix/hadamard.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/expand.lean", "newPath": "src/data/mv_polynomial/expand.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}, {"oldPath": "src/linear_algebra/isomorphisms.lean", "newPath": "src/linear_algebra/isomorphisms.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/orthogonal.lean", "newPath": "src/linear_algebra/matrix/orthogonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/symmetric.lean", "newPath": "src/linear_algebra/matrix/symmetric.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": []}, {"oldPath": "src/logic/hydra.lean", "newPath": "src/logic/hydra.lean", "changes": []}, {"oldPath": "src/ring_theory/finite_type.lean", "newPath": "src/ring_theory/finite_type.lean", "changes": []}, {"oldPath": "src/ring_theory/rees_algebra.lean", "newPath": "src/ring_theory/rees_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/zmod.lean", "newPath": "src/ring_theory/zmod.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/matrix.lean", "newPath": "src/topology/uniform_space/matrix.lean", "changes": []}]}, {"timestamp": 1680645641, "sha": "3b1890e7", "message": "chore(topology/algebra/group): generalise instances (#15171)\nUsing the generalisation linter make the following generalisations in `topology.algebra.group.basic`.\nNote that topological spaces that are groups with continuous multiplication but noncontinuous inverse do exist at least when the space is noncompact (they are known as paratopological spaces) I do not claim that they are used in mathlib though ;).\nIn summary we generalise:\n- `tendsto_inv_nhds_within_Ioi` and all variants to only require continuous inverse rather that topological group\n- the `continuous_inv` operation on the multiplicative opposite to only require a `has_inv`, rather than a group\n- `topological_group.t1_space` from topological groups to only continuous mul\n- `topological_group.regular_space` (and `t2_space`) from assuming the base is t1 to just topological group.\n- `compact_open_separated_mul_right/left`, from topological group to `mul_one_class` with a continuous mul\n- various `quotient_group.has_continuous_const_smul` type lemmas to continuous_mul\n- `tsum_sigma`/`tsum_prod` from t1 to t0\nand their additivised versions.", "changes": [{"oldPath": "src/topology/algebra/group/basic.lean", "newPath": "src/topology/algebra/group/basic.lean", "changes": [["mod", "theorem", "t2_space", ["topological_group"]], ["mod", "theorem", "t3_space", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/infinite_sum/basic.lean", "newPath": "src/topology/algebra/infinite_sum/basic.lean", "changes": [["mod", "theorem", "tsum_comm", []], ["mod", "theorem", "tsum_prod", []], ["mod", "theorem", "tsum_sigma", []]]}]}, {"timestamp": 1680626618, "sha": "1a4df69c", "message": "feat(analysis/inner_product_space/basic): orthogonal submodules (#18705)\nThis adds `submodule.is_ortho U V`, with notation `U ⟂ V`, as a shorthand for `U ≤ Vᗮ`.\nTo make this useful, this also adds about 30 lemmas of basic API.\nSome downstream proofs are golfed using the new API.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/orthogonal.lean", "newPath": "src/analysis/inner_product_space/orthogonal.lean", "changes": [["add", "theorem", "bilin_form_of_real_inner_orthogonal", []], ["add", "theorem", "is_ortho", ["orthogonal_family"]], ["add", "theorem", "orthogonal_family_iff_pairwise", []], ["add", "theorem", "comap", ["submodule", "is_ortho"]], ["add", "theorem", "comap_iff", ["submodule", "is_ortho"]], ["add", "theorem", "disjoint", ["submodule", "is_ortho"]], ["add", "theorem", "ge", ["submodule", "is_ortho"]], ["add", "theorem", "inner_eq", ["submodule", "is_ortho"]], ["add", "theorem", "le", ["submodule", "is_ortho"]], ["add", "theorem", "map", ["submodule", "is_ortho"]], ["add", "theorem", "map_iff", ["submodule", "is_ortho"]], ["add", "theorem", "mono", ["submodule", "is_ortho"]], ["add", "theorem", "mono_left", ["submodule", "is_ortho"]], ["add", "theorem", "mono_right", ["submodule", "is_ortho"]], ["add", "theorem", "symm", ["submodule", "is_ortho"]], ["add", "def", "is_ortho", ["submodule"]], ["add", "theorem", "is_ortho_Sup_left", ["submodule"]], ["add", "theorem", "is_ortho_Sup_right", ["submodule"]], ["add", "theorem", "is_ortho_bot_left", ["submodule"]], ["add", "theorem", "is_ortho_bot_right", ["submodule"]], ["add", "theorem", "is_ortho_comm", ["submodule"]], ["add", "theorem", "is_ortho_iff_inner_eq", ["submodule"]], ["add", "theorem", "is_ortho_iff_le", ["submodule"]], ["add", "theorem", "is_ortho_orthogonal_left", ["submodule"]], ["add", "theorem", "is_ortho_orthogonal_right", ["submodule"]], ["add", "theorem", "is_ortho_self", ["submodule"]], ["add", "theorem", "is_ortho_span", ["submodule"]], ["add", "theorem", "is_ortho_sup_left", ["submodule"]], ["add", "theorem", "is_ortho_sup_right", ["submodule"]], ["add", "theorem", "is_ortho_supr_left", ["submodule"]], ["add", "theorem", "is_ortho_supr_right", ["submodule"]], ["add", "theorem", "is_ortho_top_left", ["submodule"]], ["add", "theorem", "is_ortho_top_right", ["submodule"]], ["add", "theorem", "symmetric_is_ortho", ["submodule"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "orthogonal_projection_comp_subtypeL_eq_zero_iff", []], ["add", "theorem", "orthogonal_projection_comp_subtypeL", ["submodule", "is_ortho"]]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["add", "theorem", "vector_span_is_ortho_altitude_direction", ["affine", "simplex"]], ["del", "theorem", "vector_span_le_altitude_direction_orthogonal", ["affine", "simplex"]]]}]}, {"timestamp": 1680615311, "sha": "d524d0a5", "message": "feat(analysis/calculus/iterated_deriv): equality of norms of iterated derivative (#18728)", "changes": [{"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": [["add", "theorem", "norm_iterated_fderiv_eq_norm_iterated_deriv", []], ["add", "theorem", "norm_iterated_fderiv_within_eq_norm_iterated_deriv_within", []]]}]}, {"timestamp": 1680608277, "sha": "be2ac64b", "message": "chore(linear_algebra/dimension): rename `rank` to `linear_map.rank` (#18734)\nIt's a bit weird having `rank` in the root namespace, defined in terms of `module.rank` which isn't.\nThis moves all the lemmas into a single block at the end of the file, as they were previously spread through the file.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["mod", "theorem", "is_open_set_of_nat_le_rank", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "le_rank_iff_exists_linear_independent", []], ["del", "theorem", "le_rank_iff_exists_linear_independent_finset", []], ["add", "theorem", "le_rank_iff_exists_linear_independent", ["linear_map"]], ["add", "theorem", "le_rank_iff_exists_linear_independent_finset", ["linear_map"]], ["add", "def", "rank", ["linear_map"]], ["add", "theorem", "rank_add_le", ["linear_map"]], ["add", "theorem", "rank_comp_le1", ["linear_map"]], ["add", "theorem", "rank_comp_le2", ["linear_map"]], ["add", "theorem", "rank_finset_sum_le", ["linear_map"]], ["add", "theorem", "rank_le_domain", ["linear_map"]], ["add", "theorem", "rank_le_range", ["linear_map"]], ["add", "theorem", "rank_zero", ["linear_map"]], ["del", "def", "rank", []], ["del", "theorem", "rank_add_le", []], ["del", "theorem", "rank_comp_le1", []], ["del", "theorem", "rank_comp_le2", []], ["del", "theorem", "rank_finset_sum_le", []], ["del", "theorem", "rank_le_domain", []], ["del", "theorem", "rank_le_range", []], ["del", "theorem", "rank_zero", []]]}]}, {"timestamp": 1680608276, "sha": "4cf7ca0e", "message": "chore(linear_algebra/free_module/finite/rank): move lemmas from `module.free` to `finite_dimensional` (#18733)\nThe lemmas about finite-dimensional spaces are currently scattered between namespaces.\nThis commit mostly addresses the confusion by renaming all the `module.free.finrank_*` lemmas to `finite_dimensional.finrank_*`.\nThis rename makes it apparent that `finrank_eq_dim` and `finrank_eq_rank` are duplicates; though it seems that for performances reasons it's still useful in one or two places to keep both.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/naming.3A.20finrank.20and.20rank.20lemmas/near/346701602)", "changes": [{"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["add", "theorem", "finrank_direct_sum", ["finite_dimensional"]], ["add", "theorem", "finrank_eq_card_choose_basis_index", ["finite_dimensional"]], ["add", "theorem", "finrank_eq_rank", ["finite_dimensional"]], ["add", "theorem", "finrank_finsupp", ["finite_dimensional"]], ["add", "theorem", "finrank_matrix", ["finite_dimensional"]], ["add", "theorem", "finrank_pi", ["finite_dimensional"]], ["add", "theorem", "finrank_pi_fintype", ["finite_dimensional"]], ["add", "theorem", "finrank_prod", ["finite_dimensional"]], ["add", "theorem", "finrank_tensor_product", ["finite_dimensional"]], ["add", "theorem", "rank_lt_aleph_0", ["finite_dimensional"]], ["del", "theorem", "finrank_direct_sum", ["module", "free"]], ["del", "theorem", "finrank_eq_card_choose_basis_index", ["module", "free"]], ["del", "theorem", "finrank_eq_rank", ["module", "free"]], ["del", "theorem", "finrank_finsupp", ["module", "free"]], ["del", "theorem", "finrank_matrix", ["module", "free"]], ["del", "theorem", "finrank_pi", ["module", "free"]], ["del", "theorem", "finrank_pi_fintype", ["module", "free"]], ["del", "theorem", "finrank_prod", ["module", "free"]], ["del", "theorem", "finrank_tensor_product", ["module", "free"]], ["del", "theorem", "rank_lt_aleph_0", ["module", "free"]]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}, {"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "newPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "changes": []}]}, {"timestamp": 1680601363, "sha": "0ce07501", "message": "chore(linear_algebra/finite_dimensional): generalize from Type to Sort (#18723)\nThe replacement of `fintype` with `finite` means there's no longer a need to handle these cases (added in #12877) separately.\nI verified that `{ι : Sort*}` is not being inferred as `{ι : Sort (u + 1)}`.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1680594117, "sha": "7aac545b", "message": "chore(linear_algebra/dimension): remove unecessary `nontrivial` argument (#18725)\nThis is implied by another hypothesis via `nontrivial_of_invariant_basis_number`", "changes": [{"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_fin_fun", []], ["mod", "theorem", "dim_fun'", []], ["mod", "theorem", "dim_fun", []], ["mod", "theorem", "dim_fun_eq_lift_mul", []], ["mod", "theorem", "dim_pi", []]]}]}, {"timestamp": 1680589486, "sha": "08a4542b", "message": "feat(measure_theory/function): Functions locally integrable on a set (#18673)\nThis PR adds a definition for local integrability of a function on a set (a relative version of the existing \"locally integrable\"), and proves some elementary properties of this definition (in particular, functions continuous on `s` are locally integrable on `s`).", "changes": [{"oldPath": "src/measure_theory/function/locally_integrable.lean", "newPath": "src/measure_theory/function/locally_integrable.lean", "changes": [["add", "theorem", "locally_integrable_on", ["continuous_on"]], ["del", "theorem", "integrable_on_of_nhds_within", ["is_compact"]], ["add", "theorem", "continuous_on_smul", ["measure_theory", "integrable_on"]], ["add", "theorem", "locally_integrable_on", ["measure_theory", "integrable_on"]], ["add", "theorem", "smul_continuous_on", ["measure_theory", "integrable_on"]], ["add", "theorem", "locally_integrable_on", ["measure_theory", "locally_integrable"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "continuous_on_mul", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "continuous_on_smul", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "integrable_on_compact_subset", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "integrable_on_is_compact", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "mono", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "mul_continuous_on", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "norm", ["measure_theory", "locally_integrable_on"]], ["add", "theorem", "smul_continuous_on", ["measure_theory", "locally_integrable_on"]], ["add", "def", "locally_integrable_on", ["measure_theory"]], ["add", "theorem", "locally_integrable_on_const", ["measure_theory"]], ["add", "theorem", "locally_integrable_on_iff", ["measure_theory"]], ["add", "theorem", "locally_integrable_on_iff_locally_integrable_restrict", ["measure_theory"]], ["add", "theorem", "locally_integrable_on_of_locally_integrable_restrict", ["measure_theory"]], ["add", "theorem", "locally_integrable_on_univ", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["del", "theorem", "integrable_on'", ["measure_theory", "integrable"]], ["del", "theorem", "congr_fun'", ["measure_theory", "integrable_on"]], ["add", "theorem", "congr_fun_ae", ["measure_theory", "integrable_on"]], ["add", "theorem", "integrable_on_congr_fun", ["measure_theory"]], ["add", "theorem", "integrable_on_congr_fun_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/layercake.lean", "newPath": "src/measure_theory/integral/layercake.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}]}, {"timestamp": 1680554706, "sha": "e655e4ea", "message": "feat(algebra/group_power/lemmas): Induction principle for powers (#18668)\nA property holds for all powers of `g` if it is holds for `1` and is preserved under multiplication and division by `g`.\nAlso rename `subgroup.zpowers_subset`/`add_subgroup.zmultiples_subset` to `subgroup.zpowers_le_of_mem`/`add_subgroup.zmultiples_le_of_mem` because there is no `⊆` in the statement.\nThe motivation is the Cauchy-Davenport theorem:\nhttps://github.com/leanprover-community/mathlib/blob/321b67021163ac504c6cfa35d5678a47b357869d/src/combinatorics/additive/cauchy_davenport.lean#L176-L181", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "zpow_induction_left", []], ["add", "theorem", "zpow_induction_right", []]]}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["mod", "theorem", "closure_induction_left", ["subgroup"]], ["mod", "theorem", "closure_induction_right", ["subgroup"]]]}, {"oldPath": "src/group_theory/subgroup/zpowers.lean", "newPath": "src/group_theory/subgroup/zpowers.lean", "changes": [["add", "theorem", "coe_zpowers", ["subgroup"]], ["add", "theorem", "zpowers_ne_bot", ["subgroup"]], ["del", "theorem", "zpowers_subset", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "coe_powers", ["submonoid"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1680540469, "sha": "3cacc945", "message": "feat(linear_algebra/dimension): free generalizations (#18722)\nGeneralizes many results about `module.rank` from `[division_ring K]` to `[ring K] [strong_rank_condition K] [module.free K V]`.\nSome lemmas have been moved around in the file to make use of existing `variables` groupings.\nThere are some lemmas about division rings that I wasn't able to weaken the assumptions on.\nI'll make the corresponding generalizations to `finrank` in a follow-up PR.", "changes": [{"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_fin_fun", []], ["mod", "theorem", "dim_fun'", []], ["mod", "theorem", "dim_fun", []], ["mod", "theorem", "dim_fun_eq_lift_mul", []], ["mod", "theorem", "dim_pi", []], ["mod", "theorem", "exists_mem_ne_zero_of_dim_pos", []], ["mod", "theorem", "nonempty_linear_equiv_of_dim_eq", []]]}]}, {"timestamp": 1680528830, "sha": "00d163e3", "message": "feat(ring_theory/zmod): Criterion for `zmod` to be a reduced ring (#16998)\nI couldn't find a good place for this without adding some imports, so a new file seemed appropriate.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "squarefree_coe_nat", ["int"]], ["add", "theorem", "squarefree_nat_abs", ["int"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_surjective", ["int"]]]}, {"oldPath": null, "newPath": "src/ring_theory/zmod.lean", "changes": [["add", "theorem", "is_reduced_zmod", []]]}]}, {"timestamp": 1680517579, "sha": "59628387", "message": "refactor(linear_algebra): make `module.free` available inside `linear_algebra/dimension` (#18717)\nMany of the results here should generalize from `division_ring K` to `module.free K V`, though this PR doesn't bother itself with making them.\nThis PR just flips around the imports and moves the lemmas that can't stay in the old home, and makes no attempt to actually make this generalization.\nThis also removes some duplicates:\n* `lemma equiv_of_dim_eq_lift_dim` duplicates `nonempty_linear_equiv_of_lift_dim_eq`\n* `def equiv_of_dim_eq_dim` duplicates `linear_equiv.of_dim_eq`\nA few downstream files now need to directly import `linear_algebra.dimension`, which previously was implied transitively.", "changes": [{"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "def", "fin_dim_vectorspace_equiv", []], ["add", "theorem", "dim_eq", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["del", "def", "equiv_of_dim_eq_dim", []], ["del", "theorem", "equiv_of_dim_eq_lift_dim", []], ["del", "def", "fin_dim_vectorspace_equiv", []], ["del", "theorem", "dim_eq", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/free_algebra.lean", "newPath": "src/linear_algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/basic.lean", "newPath": "src/linear_algebra/free_module/finite/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": []}]}, {"timestamp": 1680508946, "sha": "7c2ce0c2", "message": "refactor(set_theory/cardinal/basic): redefine `cardinal.is_limit` in terms of `is_succ_limit` (#18523)\nWe redefine `cardinal.is_limit x` as `x ≠ 0 ∧ is_succ_limit x`. This will allow us to make use of the extensive `is_succ_limit` API in the future.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "aleph_0_le", ["cardinal", "is_limit"]], ["add", "theorem", "succ_lt", ["cardinal", "is_limit"]], ["add", "def", "is_limit", ["cardinal"]], ["add", "theorem", "is_limit_aleph_0", ["cardinal"]], ["add", "theorem", "is_succ_limit_aleph_0", ["cardinal"]], ["add", "theorem", "is_succ_limit_zero", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["del", "theorem", "aleph_0_le", ["cardinal", "is_limit"]], ["del", "theorem", "ne_zero", ["cardinal", "is_limit"]], ["del", "theorem", "succ_lt", ["cardinal", "is_limit"]], ["del", "def", "is_limit", ["cardinal"]], ["del", "theorem", "is_limit_aleph_0", ["cardinal"]], ["mod", "theorem", "is_strong_limit_beth", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["mod", "theorem", "aleph'_limit", ["cardinal"]], ["mod", "theorem", "aleph_limit", ["cardinal"]], ["mod", "theorem", "beth_limit", ["cardinal"]], ["mod", "theorem", "ord_aleph_is_limit", ["cardinal"]]]}]}, {"timestamp": 1680500635, "sha": "94eaaaa6", "message": "chore(*): add mathlib4 synchronization comments (#18721)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `category_theory.monad.kleisli`\n* `data.matrix.basic`\n* `ring_theory.adjoin.tower`", "changes": [{"oldPath": "src/category_theory/monad/kleisli.lean", "newPath": "src/category_theory/monad/kleisli.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/tower.lean", "newPath": "src/ring_theory/adjoin/tower.lean", "changes": []}]}, {"timestamp": 1680476761, "sha": "47a1a733", "message": "feat(data/{int,nat}/modeq): `a/c ≡ b/c mod m/c → a ≡ b mod m` (#18666)\nAlso prove `-a ≡ -b [ZMOD n] ↔ a ≡ b [ZMOD n]`, `a ≡ b [ZMOD -n] ↔ a ≡ b [ZMOD n]`, generalise `int.modeq.mul_left'`/`int.modeq.mul_right'`, and rename\n* `int.gcd_pos_of_non_zero_left` → `int.gcd_pos_of_ne_zero_left`\n* `int.gcd_pos_of_non_zero_right` → `int.gcd_pos_of_ne_zero_right`\n* `eq_iff_modeq_int`, `char_p.int_coe_eq_int_coe_iff` → `char_p.int_cast_eq_int_cast` (they were duplicates)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "int_cast_eq_int_cast", ["char_p"]], ["del", "theorem", "int_coe_eq_int_coe_iff", ["char_p"]], ["add", "theorem", "nat_cast_eq_nat_cast", ["char_p"]], ["del", "theorem", "eq_iff_modeq_int", []]]}, {"oldPath": "src/algebra/ring/divisibility.lean", "newPath": "src/algebra/ring/divisibility.lean", "changes": [["add", "theorem", "dvd_sub_comm", []]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "gcd_pos_of_ne_zero_left", ["int"]], ["add", "theorem", "gcd_pos_of_ne_zero_right", ["int"]], ["del", "theorem", "gcd_pos_of_non_zero_left", ["int"]], ["del", "theorem", "gcd_pos_of_non_zero_right", ["int"]]]}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": [["add", "theorem", "add_modeq_left", ["int"]], ["add", "theorem", "add_modeq_right", ["int"]], ["add", "theorem", "cancel_left_div_gcd", ["int", "modeq"]], ["add", "theorem", "cancel_right_div_gcd", ["int", "modeq"]], ["add", "theorem", "of_div", ["int", "modeq"]], ["add", "theorem", "modeq_comm", ["int"]], ["add", "theorem", "modeq_neg", ["int"]], ["add", "theorem", "modeq_zero_iff", ["int"]], ["add", "theorem", "neg_modeq_neg", ["int"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "of_div", ["nat", "modeq"]]]}, {"oldPath": "src/data/nat/order/lemmas.lean", "newPath": "src/data/nat/order/lemmas.lean", "changes": [["add", "theorem", "le_of_lt_add_of_dvd", ["nat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1680465080, "sha": "31ca6f9c", "message": "chore(*): add mathlib4 synchronization comments (#18662)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.preadditive`\n* `algebra.category.Group.zero`\n* `algebra.char_p.quotient`\n* `algebra.cubic_discriminant`\n* `algebra.gcd_monoid.div`\n* `algebra.monoid_algebra.division`\n* `algebra.star.chsh`\n* `analysis.convex.basic`\n* `analysis.convex.extreme`\n* `analysis.convex.hull`\n* `analysis.convex.strict`\n* `category_theory.adjunction.opposites`\n* `category_theory.category.Twop`\n* `category_theory.elements`\n* `category_theory.glue_data`\n* `category_theory.localization.opposite`\n* `category_theory.localization.predicate`\n* `category_theory.monoidal.discrete`\n* `category_theory.monoidal.linear`\n* `category_theory.monoidal.transport`\n* `category_theory.sites.pretopology`\n* `category_theory.sites.spaces`\n* `combinatorics.derangements.finite`\n* `combinatorics.simple_graph.matching`\n* `computability.primrec`\n* `data.mllist`\n* `data.mv_polynomial.cardinal`\n* `data.mv_polynomial.division`\n* `data.nat.choose.factorization`\n* `data.nat.factorization.basic`\n* `data.nat.factorization.prime_pow`\n* `data.nat.totient`\n* `data.polynomial.degree.card_pow_degree`\n* `data.polynomial.mirror`\n* `data.polynomial.partial_fractions`\n* `data.polynomial.splits`\n* `data.set.list`\n* `data.set.pairwise.lattice`\n* `linear_algebra.affine_space.midpoint_zero`\n* `linear_algebra.affine_space.ordered`\n* `linear_algebra.affine_space.pointwise`\n* `linear_algebra.direct_sum.finsupp`\n* `linear_algebra.direct_sum.tensor_product`\n* `model_theory.basic`\n* `number_theory.lucas_primality`\n* `order.upper_lower.locally_finite`\n* `representation_theory.maschke`\n* `ring_theory.adjoin.fg`\n* `ring_theory.localization.module`\n* `ring_theory.mv_polynomial.weighted_homogeneous`\n* `ring_theory.polynomial.basic`\n* `ring_theory.polynomial.vieta`\n* `topology.algebra.polynomial`", "changes": [{"oldPath": "src/algebra/category/Group/preadditive.lean", "newPath": "src/algebra/category/Group/preadditive.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": "src/algebra/char_p/quotient.lean", "newPath": "src/algebra/char_p/quotient.lean", "changes": []}, {"oldPath": "src/algebra/cubic_discriminant.lean", "newPath": "src/algebra/cubic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/div.lean", "newPath": "src/algebra/gcd_monoid/div.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/division.lean", "newPath": "src/algebra/monoid_algebra/division.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/hull.lean", "newPath": "src/analysis/convex/hull.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/category/Twop.lean", "newPath": "src/category_theory/category/Twop.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/glue_data.lean", "newPath": "src/category_theory/glue_data.lean", "changes": []}, {"oldPath": "src/category_theory/localization/opposite.lean", "newPath": "src/category_theory/localization/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/localization/predicate.lean", "newPath": "src/category_theory/localization/predicate.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/discrete.lean", "newPath": "src/category_theory/monoidal/discrete.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/linear.lean", "newPath": "src/category_theory/monoidal/linear.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/transport.lean", "newPath": "src/category_theory/monoidal/transport.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/spaces.lean", "newPath": "src/category_theory/sites/spaces.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/finite.lean", "newPath": "src/combinatorics/derangements/finite.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/cardinal.lean", "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/division.lean", "newPath": "src/data/mv_polynomial/division.lean", "changes": []}, {"oldPath": "src/data/nat/choose/factorization.lean", "newPath": "src/data/nat/choose/factorization.lean", "changes": []}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}, {"oldPath": "src/data/nat/factorization/prime_pow.lean", "newPath": "src/data/nat/factorization/prime_pow.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/card_pow_degree.lean", "newPath": "src/data/polynomial/degree/card_pow_degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/polynomial/partial_fractions.lean", "newPath": "src/data/polynomial/partial_fractions.lean", "changes": []}, {"oldPath": "src/data/polynomial/splits.lean", "newPath": "src/data/polynomial/splits.lean", "changes": []}, {"oldPath": "src/data/set/list.lean", "newPath": "src/data/set/list.lean", "changes": []}, {"oldPath": "src/data/set/pairwise/lattice.lean", "newPath": "src/data/set/pairwise/lattice.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/midpoint_zero.lean", "newPath": "src/linear_algebra/affine_space/midpoint_zero.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/pointwise.lean", "newPath": "src/linear_algebra/affine_space/pointwise.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/tensor_product.lean", "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_primality.lean", "newPath": "src/number_theory/lucas_primality.lean", "changes": []}, {"oldPath": "src/order/upper_lower/locally_finite.lean", "newPath": "src/order/upper_lower/locally_finite.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/module.lean", "newPath": "src/ring_theory/localization/module.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/weighted_homogeneous.lean", "newPath": "src/ring_theory/mv_polynomial/weighted_homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1680461097, "sha": "d95bef0d", "message": "feat(data/matrix/reflection): lemmas for arbitrary concrete matrices, proved via reflection (#18711)\nSplit from #15738.\nThis contains no meta code, so should be straightforward to port to mathlib4.", "changes": [{"oldPath": null, "newPath": "src/data/fin/tuple/reflection.lean", "changes": [["add", "def", "eta_expand", ["fin_vec"]], ["add", "theorem", "eta_expand_eq", ["fin_vec"]], ["add", "theorem", "exists_iff", ["fin_vec"]], ["add", "theorem", "forall_iff", ["fin_vec"]], ["add", "def", "map", ["fin_vec"]], ["add", "theorem", "map_eq", ["fin_vec"]], ["add", "def", "seq", ["fin_vec"]], ["add", "theorem", "seq_eq", ["fin_vec"]], ["add", "def", "sum", ["fin_vec"]], ["add", "theorem", "sum_eq", ["fin_vec"]], ["add", "def", "«exists»", ["fin_vec"]], ["add", "def", "«forall»", ["fin_vec"]]]}, {"oldPath": null, "newPath": "src/data/matrix/reflection.lean", "changes": [["add", "def", "dot_productᵣ", ["matrix"]], ["add", "theorem", "dot_productᵣ_eq", ["matrix"]], ["add", "def", "eta_expand", ["matrix"]], ["add", "theorem", "eta_expand_eq", ["matrix"]], ["add", "theorem", "exists_iff", ["matrix"]], ["add", "theorem", "forall_iff", ["matrix"]], ["add", "def", "mulᵣ", ["matrix"]], ["add", "theorem", "mulᵣ_eq", ["matrix"]], ["add", "def", "transposeᵣ", ["matrix"]], ["add", "theorem", "transposeᵣ_eq", ["matrix"]], ["add", "def", "«exists»", ["matrix"]], ["add", "def", "«forall»", ["matrix"]]]}, {"oldPath": null, "newPath": "test/matrix_reflection.lean", "changes": []}]}, {"timestamp": 1680461095, "sha": "e5820f6c", "message": "chore(algebra/ring_quot): link ring_quot.rel with ring_con_gen (#17892)\nIt's not clear to me whether it's worth keeping `ring_quot.rel r` around, or if it would be better to replace it entirely with `ring_con_gen`.", "changes": [{"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": [["add", "theorem", "coe_algebra_map", ["ring_con"]], ["add", "theorem", "eqv_gen_rel_eq", ["ring_quot"]], ["add", "def", "ring_con", ["ring_quot"]]]}]}, {"timestamp": 1680454105, "sha": "500ccb10", "message": "chore(linear_algebra/dimension): remove a nontriviality assumption (#18715)\n`dim_pos` does not need `nontrivial R`.\nAlso adds a new lemma that demonstrates why the assumption is still needed on some later results.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_pos", []], ["add", "theorem", "dim_subsingleton", []]]}]}, {"timestamp": 1680447441, "sha": "5f6e827d", "message": "chore(measure_theory/measure/doubling): rename `is_doubling_measure` to `is_unif_loc_doubling_measure` (#18709)\nWith thanks to Jireh for highlighting our non-standard terminology.\nSee also [Zulip conversation](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/definition.20of.20doubling.20measures).", "changes": [{"oldPath": "src/analysis/calculus/monotone.lean", "newPath": "src/analysis/calculus/monotone.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/add_circle.lean", "newPath": "src/dynamics/ergodic/add_circle.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/density_theorem.lean", "newPath": "src/measure_theory/covering/density_theorem.lean", "changes": [["del", "theorem", "ae_tendsto_average", ["is_doubling_measure"]], ["del", "theorem", "ae_tendsto_average_norm_sub", ["is_doubling_measure"]], ["del", "theorem", "ae_tendsto_measure_inter_div", ["is_doubling_measure"]], ["del", "theorem", "closed_ball_mem_vitali_family_of_dist_le_mul", ["is_doubling_measure"]], ["del", "theorem", "tendsto_closed_ball_filter_at", ["is_doubling_measure"]], ["del", "def", "vitali_family", ["is_doubling_measure"]], ["add", "theorem", "ae_tendsto_average", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "ae_tendsto_average_norm_sub", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "ae_tendsto_measure_inter_div", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "closed_ball_mem_vitali_family_of_dist_le_mul", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "tendsto_closed_ball_filter_at", ["is_unif_loc_doubling_measure"]], ["add", "def", "vitali_family", ["is_unif_loc_doubling_measure"]]]}, {"oldPath": "src/measure_theory/covering/liminf_limsup.lean", "newPath": "src/measure_theory/covering/liminf_limsup.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/one_dim.lean", "newPath": "src/measure_theory/covering/one_dim.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/doubling.lean", "newPath": "src/measure_theory/measure/doubling.lean", "changes": [["del", "def", "doubling_constant", ["is_doubling_measure"]], ["del", "theorem", "eventually_measure_le_scaling_constant_mul'", ["is_doubling_measure"]], ["del", "theorem", "eventually_measure_le_scaling_constant_mul", ["is_doubling_measure"]], ["del", "theorem", "eventually_measure_mul_le_scaling_constant_of_mul", ["is_doubling_measure"]], ["del", "theorem", "exists_eventually_forall_measure_closed_ball_le_mul", ["is_doubling_measure"]], ["del", "theorem", "exists_measure_closed_ball_le_mul'", ["is_doubling_measure"]], ["del", "theorem", "measure_mul_le_scaling_constant_of_mul", ["is_doubling_measure"]], ["del", "theorem", "one_le_scaling_constant_of", ["is_doubling_measure"]], ["del", "def", "scaling_constant_of", ["is_doubling_measure"]], ["del", "def", "scaling_scale_of", ["is_doubling_measure"]], ["del", "theorem", "scaling_scale_of_pos", ["is_doubling_measure"]], ["add", "def", "doubling_constant", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "eventually_measure_le_scaling_constant_mul'", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "eventually_measure_le_scaling_constant_mul", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "eventually_measure_mul_le_scaling_constant_of_mul", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "exists_eventually_forall_measure_closed_ball_le_mul", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "exists_measure_closed_ball_le_mul'", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "measure_mul_le_scaling_constant_of_mul", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "one_le_scaling_constant_of", ["is_unif_loc_doubling_measure"]], ["add", "def", "scaling_constant_of", ["is_unif_loc_doubling_measure"]], ["add", "def", "scaling_scale_of", ["is_unif_loc_doubling_measure"]], ["add", "theorem", "scaling_scale_of_pos", ["is_unif_loc_doubling_measure"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}]}, {"timestamp": 1680438801, "sha": "ea050b44", "message": "feat(set_theory/cardinal/basic): clean up instances (#18714)\nWe add a missing `linear_ordered_comm_monoid_with_zero` instance and reorder others.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1680426782, "sha": "6b600207", "message": "chore(group_theory/subgroup/basic): Protect `subgroup.subtype` (#18712)\nand `subgroup_class.subtype`. This was breaking the `subtype` notation for me in #18684. The longer term fix would be to add a `_root_` in the notation declaration.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "def", "subtype", ["subgroup"]], ["mod", "theorem", "subtype_injective", ["subgroup"]], ["mod", "theorem", "coe_subtype", ["subgroup_class"]], ["del", "def", "subtype", ["subgroup_class"]]]}]}, {"timestamp": 1680369053, "sha": "88fcb83f", "message": "feat(measure_theory/measurable_space): Cast of natural is measurable (#18676)\nA few simple lemmas", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_int_cast", []], ["add", "theorem", "measurable_nat_cast", []]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "measure_univ_ne_zero", ["measure_theory", "measure"]], ["add", "theorem", "measure_univ_pos", ["measure_theory", "measure"]]]}]}, {"timestamp": 1680364512, "sha": "207c9259", "message": "feat(combinatorics/additive/e_transform): e-transforms (#18683)\nDefine the general e-transform along with two special cases:\n* The Dyson e-transform, which turns `(s, t)` into `(s ∪ e • t, t ∩ e⁻¹ • s)`.\n* An pair of unnamed transforms, which turn `(s, t)` into `(s ∩ s • e, t ∪ e⁻¹ • t)` and `(s ∪ s • e, t ∩ e⁻¹ • t)`.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/additive/e_transform.lean", "changes": [["add", "theorem", "card", ["finset", "mul_dyson_e_transform"]], ["add", "theorem", "smul_finset_snd_subset_fst", ["finset", "mul_dyson_e_transform"]], ["add", "theorem", "subset", ["finset", "mul_dyson_e_transform"]], ["add", "def", "mul_dyson_e_transform", ["finset"]], ["add", "theorem", "mul_dyson_e_transform_idem", ["finset"]], ["add", "theorem", "card", ["finset", "mul_e_transform_left"]], ["add", "theorem", "fst_mul_snd_subset", ["finset", "mul_e_transform_left"]], ["add", "def", "mul_e_transform_left", ["finset"]], ["add", "theorem", "mul_e_transform_left_inv", ["finset"]], ["add", "theorem", "mul_e_transform_left_one", ["finset"]], ["add", "theorem", "card", ["finset", "mul_e_transform_right"]], ["add", "theorem", "fst_mul_snd_subset", ["finset", "mul_e_transform_right"]], ["add", "def", "mul_e_transform_right", ["finset"]], ["add", "theorem", "mul_e_transform_right_inv", ["finset"]], ["add", "theorem", "mul_e_transform_right_one", ["finset"]]]}]}, {"timestamp": 1680352811, "sha": "3c1368ca", "message": "fix(data/nat/squarefree): `norm_num` only supports `squarefree` on naturals (#18708)\nWe have a `norm_num` extension for proving whether natural numbers are squarefree. This tactic does not work on other rings, like integers, but the check for this case was broken, meaning it returned a proof with a type error instead of skipping the goal.\nThis PR changes the check to only fire the `norm_num` extension on natural numbers. I've included a small test that checks `norm_num` fails on integers, instead of returning a type-incorrect proof. We'd have to replace this test if `norm_num` gains support for `squarefree` on integers.", "changes": [{"oldPath": "src/data/nat/squarefree.lean", "newPath": "src/data/nat/squarefree.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1680312941, "sha": "474656fd", "message": "chore(algebra/order/lattice_group): Golf (#18046)\nGolf proofs and remove a duplicate lemma.", "changes": [{"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": [["add", "theorem", "inf_mul", []], ["del", "theorem", "mul_inf_eq_mul_inf_mul", ["lattice_ordered_comm_group"]], ["mod", "theorem", "neg_eq_one_iff'", ["lattice_ordered_comm_group"]], ["mod", "theorem", "pos_eq_neg_inv", ["lattice_ordered_comm_group"]], ["mod", "theorem", "pos_eq_one_iff", ["lattice_ordered_comm_group"]], ["add", "theorem", "sup_mul", []]]}]}, {"timestamp": 1680301210, "sha": "5e526d18", "message": "feat(data/{set,finset}/pointwise): `a • t ⊆ s • t` (#18697)\nEta expansion in the lemma statements is deliberate, to make the left and right lemmas more similar and allow further rewrites.\nAlso additivise `finset.bUnion_smul_finset`, fix the name of `finset.smul_finset_mem_smul_finset` to `finset.smul_mem_smul_finset`, move `image2_swap`/`image₂_swap` further up the file to let them be used in earlier proofs.", "changes": [{"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["mod", "theorem", "image_subset_image₂_right", ["finset"]], ["add", "theorem", "image₂_insert_left", ["finset"]], ["add", "theorem", "image₂_insert_right", ["finset"]], ["add", "theorem", "image₂_inter_union_subset_union", ["finset"]], ["add", "theorem", "image₂_subset_iff_left", ["finset"]], ["add", "theorem", "image₂_subset_iff_right", ["finset"]], ["add", "theorem", "image₂_union_inter_subset_union", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "bUnion_op_smul_finset", ["finset"]], ["mod", "theorem", "bUnion_smul_finset", ["finset"]], ["add", "theorem", "inter_div_union_subset_union", ["finset"]], ["add", "theorem", "inter_mul_union_subset_union", ["finset"]], ["add", "theorem", "inter_smul_union_subset_union", ["finset"]], ["add", "theorem", "mul_subset_iff_left", ["finset"]], ["add", "theorem", "mul_subset_iff_right", ["finset"]], ["add", "theorem", "op_smul_finset_mul_eq_mul_smul_finset", ["finset"]], ["add", "theorem", "op_smul_finset_smul_eq_smul_smul_finset", ["finset"]], ["add", "theorem", "op_smul_finset_subset_mul", ["finset"]], ["del", "theorem", "smul_finset_mem_smul_finset", ["finset"]], ["add", "theorem", "smul_finset_subset_smul", ["finset"]], ["add", "theorem", "smul_mem_smul_finset", ["finset"]], ["add", "theorem", "union_div_inter_subset_union", ["finset"]], ["add", "theorem", "union_mul_inter_subset_union", ["finset"]], ["add", "theorem", "union_smul_inter_subset_union", ["finset"]]]}, {"oldPath": "src/data/set/n_ary.lean", "newPath": "src/data/set/n_ary.lean", "changes": [["add", "theorem", "image2_insert_left", ["set"]], ["add", "theorem", "image2_insert_right", ["set"]], ["add", "theorem", "image2_inter_union_subset_union", ["set"]], ["add", "theorem", "image2_subset_iff_left", ["set"]], ["add", "theorem", "image2_subset_iff_right", ["set"]], ["mod", "theorem", "image2_swap", ["set"]], ["add", "theorem", "image2_union_inter_subset_union", ["set"]]]}, {"oldPath": "src/data/set/pointwise/basic.lean", "newPath": "src/data/set/pointwise/basic.lean", "changes": [["add", "theorem", "inter_div_union_subset_union", ["set"]], ["add", "theorem", "inter_mul_union_subset_union", ["set"]], ["add", "theorem", "union_div_inter_subset_union", ["set"]], ["add", "theorem", "union_mul_inter_subset_union", ["set"]]]}, {"oldPath": "src/data/set/pointwise/smul.lean", "newPath": "src/data/set/pointwise/smul.lean", "changes": [["mod", "theorem", "bUnion_op_smul_set", ["set"]], ["add", "theorem", "inter_smul_union_subset_union", ["set"]], ["add", "theorem", "inter_vsub_union_subset_union", ["set"]], ["add", "theorem", "mul_subset_iff_left", ["set"]], ["add", "theorem", "mul_subset_iff_right", ["set"]], ["add", "theorem", "op_smul_set_mul_eq_mul_smul_set", ["set"]], ["add", "theorem", "op_smul_set_smul_eq_smul_smul_set", ["set"]], ["add", "theorem", "op_smul_set_subset_mul", ["set"]], ["add", "theorem", "smul_set_subset_smul", ["set"]], ["add", "theorem", "union_smul_inter_subset_union", ["set"]], ["add", "theorem", "union_vsub_inter_subset_union", ["set"]]]}]}, {"timestamp": 1680301208, "sha": "210657c4", "message": "refactor(order/well_founded): ditch `well_founded_iff_has_min'` and `well_founded_iff_has_max'` (#15071)\nThe predicate `x ≤ y → y = x` is no more convenient than `¬ x < y`. For this reason, we ditch `well_founded.well_founded_iff_has_min'` and `well_founded.well_founded_iff_has_max'` in favor of `well_founded.well_founded_iff_has_min` (or in some cases, just `well_founded.has_min`. We also remove the misplaced lemma `well_founded.eq_iff_not_lt_of_le`, and we golf the theorems that used the removed theorems.\nThe lemma `well_founded.well_founded_iff_has_min` has a misleading name when applied on `well_founded (>)`, and mildly screws over dot notation and rewriting by virtue of using `>`, but a future refactor will fix this.", "changes": [{"oldPath": "src/algebra/lie/engel.lean", "newPath": "src/algebra/lie/engel.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "eq_iff_not_lt_of_le", []]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["del", "theorem", "eq_iff_not_lt_of_le", ["well_founded"]], ["del", "theorem", "well_founded_iff_has_max'", ["well_founded"]], ["del", "theorem", "well_founded_iff_has_min'", ["well_founded"]]]}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/associated_prime.lean", "newPath": "src/ring_theory/ideal/associated_prime.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1680295264, "sha": "02e095b2", "message": "feat(measure_theory/group/geometry_of_numbers): Blichfeldt and Minkowski's theorems (#2819)\nI had a go at Minkowski's convex body theorem and it works thanks to @urkud 's pidgeonhole for measurable spaces.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/group/geometry_of_numbers.lean", "changes": [["add", "theorem", "exists_ne_zero_mem_lattice_of_measure_mul_two_pow_lt_measure", ["measure_theory"]], ["add", "theorem", "exists_pair_mem_lattice_not_disjoint_vadd", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "theorem", "add_haar_smul_of_nonneg", ["measure_theory", "measure"]], ["add", "theorem", "const_smul", ["measure_theory", "measure", "null_measurable_set"]]]}]}, {"timestamp": 1680285355, "sha": "172bf281", "message": "feat(data/pnat/basic): pnat is a well-order (#18700)", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}]}, {"timestamp": 1680273027, "sha": "47b12e7f", "message": "chore(analysis/locally_convex/strong_topology): generalize to semilinear maps (#18679)\nThis is needed to show that the space of C-linear maps is locally convex.\nAlso generalizes the ring from `real` to a general ordered semiring, since the proofs didn't need the `real`s.", "changes": [{"oldPath": "src/analysis/locally_convex/strong_topology.lean", "newPath": "src/analysis/locally_convex/strong_topology.lean", "changes": []}]}, {"timestamp": 1680273026, "sha": "29cb56a7", "message": "chore(*): Miscellaneous lemmas (#18677)\n* `algebra.support`: `support n = univ` if `n ≠ 0`, `mul_support n = univ` if `n ≠ 1`\n* `data.int.char_zero`: `↑n = 1 ↔ n = 1`\n* `data.real.ennreal`: `of_real a.to_real = a ↔ a ≠ ⊤`, `(of_real a).to_real = a ↔ 0 ≤ a`\n* `data.set.basic`: `s ∩ {a | p a} = {a ∈ s | p a}`\n* `logic.function.basic`: `on_fun f g a b = f (g a) (g b)`\n* `order.conditionally_complete_lattice.basic`: Lemmas unfolding the definition of `Sup`/`Inf` on `with_top`/`with_bot`", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "mul_support_int_cast", ["function"]], ["add", "theorem", "mul_support_nat_cast", ["function"]], ["add", "theorem", "mul_support_zero", ["function"]], ["add", "theorem", "support_int_cast", ["function"]], ["add", "theorem", "support_nat_cast", ["function"]], ["add", "theorem", "support_one", ["function"]]]}, {"oldPath": "src/data/int/char_zero.lean", "newPath": "src/data/int/char_zero.lean", "changes": [["add", "theorem", "cast_eq_one", ["int"]], ["add", "theorem", "cast_ne_one", ["int"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_to_real_eq_iff", ["ennreal"]], ["add", "theorem", "to_real_of_real_eq_iff", ["ennreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_singleton_ssubset", ["set"]], ["add", "theorem", "insert_diff_singleton_comm", ["set"]], ["add", "theorem", "inter_diff_distrib_left", ["set"]], ["add", "theorem", "inter_diff_distrib_right", ["set"]], ["add", "theorem", "inter_set_of_eq_sep", ["set"]], ["add", "theorem", "set_of_inter_eq_sep", ["set"]], ["add", "theorem", "singleton_subset_singleton", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "on_fun_apply", ["function"]]]}, {"oldPath": "src/order/conditionally_complete_lattice/basic.lean", "newPath": "src/order/conditionally_complete_lattice/basic.lean", "changes": [["add", "theorem", "Inf_eq", ["with_bot"]], ["add", "theorem", "Sup_eq", ["with_bot"]], ["add", "theorem", "Inf_eq", ["with_top"]], ["add", "theorem", "Sup_eq", ["with_top"]]]}]}, {"timestamp": 1680261575, "sha": "5923c4c7", "message": "feat(order/rel_iso): well-founded instances for subtypes (#18699)", "changes": [{"oldPath": "src/order/rel_iso/basic.lean", "newPath": "src/order/rel_iso/basic.lean", "changes": []}]}, {"timestamp": 1680211942, "sha": "3e068ece", "message": "refactor(data/matrix/basic): work around leanprover/lean4#2042 (#18696)\nThis adjust definitions such that everything is well-behaved in the case that things are unfolded. For each such definition, a lemma is added that replaces the equation lemma. Before this PR, we used\n```lean\ndef transpose (M : matrix m n α) : matrix n m α\n| x y := M y x\n```\nwhich has the nice behavior (in Lean 3 only) of `rw transpose` only unfolding the definition when it is of the applied form `transpose M i j`. If `dunfold transpose` is used then it becomes the undesirable `λ x y, M y x` in both Lean versions. After this PR, we use\n```lean\ndef transpose (M : matrix m n α) : matrix n m α :=\nof $ λ x y, M y x\n-- TODO: set as an equation lemma for `transpose`, see mathlib4#3024\n@[simp] lemma transpose_apply (M : matrix m n α) (i j) :\n transpose M i j = M j i := rfl\n```\nThis no longer has the nice `rw` behavior, but we can't have that in Lean4 anyway (leanprover/lean4#2042). It also makes `dunfold` insert the `of`, which is better for type-safety.\nThis affects\n* `matrix.transpose`\n* `matrix.row`\n* `matrix.col`\n* `matrix.diagonal`\n* `matrix.vec_mul_vec`\n* `matrix.block_diagonal`\n* `matrix.block_diagonal'`\n* `matrix.hadamard`\n* `matrix.kronecker_map`\n* `pequiv.to_matrix`\n* `matrix.circulant`\n* `matrix.mv_polynomial_X`\n* `algebra.trace_matrix`\n* `algebra.embeddings_matrix`\nWhile this just adds `_apply` noise in Lean 3, it is necessary when porting to Lean 4 as there the equation lemma is not generated in the way that we want.\nThis is hopefully exhaustive; it was found by looking for lines ending in `matrix .*` followed by a `|` line", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": [["mod", "def", "adj_matrix", ["simple_graph"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "col", ["matrix"]], ["mod", "theorem", "col_apply", ["matrix"]], ["mod", "def", "diagonal", ["matrix"]], ["add", "theorem", "diagonal_apply", ["matrix"]], ["mod", "def", "row", ["matrix"]], ["mod", "theorem", "row_apply", ["matrix"]], ["mod", "def", "transpose", ["matrix"]], ["mod", "theorem", "transpose_apply", ["matrix"]], ["mod", "def", "vec_mul_vec", ["matrix"]], ["add", "theorem", "vec_mul_vec_apply", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["mod", "def", "block_diag'", ["matrix"]], ["add", "theorem", "block_diag'_apply", ["matrix"]], ["mod", "def", "block_diag", ["matrix"]], ["add", "theorem", "block_diag_apply", ["matrix"]], ["mod", "def", "block_diagonal'", ["matrix"]], ["add", "theorem", "block_diagonal'_apply'", ["matrix"]], ["mod", "def", "block_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal_apply'", ["matrix"]]]}, {"oldPath": "src/data/matrix/hadamard.lean", "newPath": "src/data/matrix/hadamard.lean", "changes": [["mod", "def", "hadamard", ["matrix"]], ["add", "theorem", "hadamard_apply", ["matrix"]]]}, {"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": [["mod", "def", "kronecker_map", ["matrix"]], ["add", "theorem", "kronecker_map_apply", ["matrix"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["mod", "def", "to_matrix", ["pequiv"]], ["add", "theorem", "to_matrix_apply", ["pequiv"]]]}, {"oldPath": "src/linear_algebra/matrix/circulant.lean", "newPath": "src/linear_algebra/matrix/circulant.lean", "changes": [["mod", "def", "circulant", ["matrix"]], ["add", "theorem", "circulant_apply", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/mv_polynomial.lean", "newPath": "src/linear_algebra/matrix/mv_polynomial.lean", "changes": [["add", "theorem", "mv_polynomial_X_apply", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/symmetric.lean", "newPath": "src/linear_algebra/matrix/symmetric.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["mod", "def", "embeddings_matrix", ["algebra"]], ["add", "theorem", "embeddings_matrix_apply", ["algebra"]], ["mod", "def", "trace_matrix", ["algebra"]], ["add", "theorem", "trace_matrix_apply", ["algebra"]], ["del", "theorem", "trace_matrix_def", ["algebra"]]]}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": []}]}, {"timestamp": 1680202338, "sha": "ce11c3c2", "message": "refactor(linear_algebra/{multilinear,pi_tensor_product}): remove the decidable_eq argument (#10140)\nThere is no need to include this argument in the type of `multilinear_map`, as it is only used to state the propositions.\nInstead, we move it into a binder in the `map_add` and `map_smul` fields.\nThe same trick is done for the relation for `pi_tensor_product`.\nThe benefit here is pretty marginal; the main one is that `mutlilinear_map.mk_pi_algebra` no longer requires a `decidable_eq I` instance. However, it still requires `fintype I`, and in practice all computably finite types are also computably decidable.\nThis does at least mean that `0 : multilinear_map ...` rightfully no longer requires decidable equality!\nThe downside of this PR is that the `map_add'` and `map_smul'` fields are often more annoying to prove as there are sometimes duplicate decidable instances to eliminate.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/A.20possible.20diamond/near/260179946)", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "theorem", "norm_image_sub_le'", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_image_sub_le_of_bound'", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["mod", "theorem", "coe_alternatization", ["alternating_map"]], ["mod", "theorem", "dom_dom_congr_perm", ["alternating_map"]], ["mod", "theorem", "map_add", ["alternating_map"]], ["mod", "theorem", "map_add_swap", ["alternating_map"]], ["mod", "theorem", "map_congr_perm", ["alternating_map"]], ["mod", "theorem", "map_neg", ["alternating_map"]], ["mod", "theorem", "map_perm", ["alternating_map"]], ["mod", "theorem", "map_smul", ["alternating_map"]], ["mod", "theorem", "map_sub", ["alternating_map"]], ["mod", "theorem", "map_swap", ["alternating_map"]], ["mod", "theorem", "map_swap_add", ["alternating_map"]], ["mod", "theorem", "map_update_self", ["alternating_map"]], ["mod", "theorem", "map_update_sum", ["alternating_map"]], ["mod", "theorem", "map_update_update", ["alternating_map"]], ["mod", "theorem", "map_update_zero", ["alternating_map"]], ["mod", "theorem", "dom_coprod_alternization", ["multilinear_map"]], ["mod", "theorem", "dom_coprod_alternization_coe", ["multilinear_map"]], ["mod", "theorem", "dom_coprod_alternization_eq", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "map_basis_eq_zero_iff", ["alternating_map"]], ["mod", "theorem", "map_basis_ne_zero_iff", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra/of_alternating.lean", "newPath": "src/linear_algebra/exterior_algebra/of_alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["mod", "def", "dom_dom_congr_linear_equiv'", ["multilinear_map"]], ["mod", "def", "dom_dom_congr_linear_equiv", ["multilinear_map"]], ["mod", "theorem", "map_add_univ", ["multilinear_map"]], ["mod", "theorem", "map_neg", ["multilinear_map"]], ["mod", "theorem", "map_piecewise_add", ["multilinear_map"]], ["mod", "theorem", "map_piecewise_smul", ["multilinear_map"]], ["mod", "theorem", "map_sub", ["multilinear_map"]], ["mod", "theorem", "map_sum", ["multilinear_map"]], ["mod", "theorem", "map_sum_finset", ["multilinear_map"]], ["mod", "theorem", "map_sum_finset_aux", ["multilinear_map"]], ["mod", "theorem", "map_update_smul", ["multilinear_map"]], ["mod", "theorem", "map_update_sum", ["multilinear_map"]], ["mod", "theorem", "map_update_zero", ["multilinear_map"]], ["mod", "def", "to_linear_map", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear/basis.lean", "newPath": "src/linear_algebra/multilinear/basis.lean", "changes": [["mod", "theorem", "ext_multilinear", ["basis"]]]}, {"oldPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "newPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/tensor_product.lean", "newPath": "src/linear_algebra/multilinear/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["mod", "def", "some_basis", ["orientation"]], ["mod", "theorem", "some_basis_orientation", ["orientation"]]]}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": [["mod", "theorem", "add_tprod_coeff", ["pi_tensor_product"]], ["mod", "theorem", "smul_tprod_coeff", ["pi_tensor_product"]], ["mod", "theorem", "smul_tprod_coeff_aux", ["pi_tensor_product"]]]}, {"oldPath": "src/linear_algebra/tensor_power.lean", "newPath": "src/linear_algebra/tensor_power.lean", "changes": [["mod", "theorem", "graded_monoid_eq_of_reindex_cast", ["pi_tensor_product"]]]}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["mod", "theorem", "map_add", ["continuous_multilinear_map"]], ["mod", "theorem", "map_add_univ", ["continuous_multilinear_map"]], ["mod", "theorem", "map_piecewise_add", ["continuous_multilinear_map"]], ["mod", "theorem", "map_piecewise_smul", ["continuous_multilinear_map"]], ["mod", "theorem", "map_smul", ["continuous_multilinear_map"]], ["mod", "theorem", "map_sub", ["continuous_multilinear_map"]], ["mod", "theorem", "map_sum", ["continuous_multilinear_map"]], ["mod", "theorem", "map_sum_finset", ["continuous_multilinear_map"]], ["mod", "def", "to_continuous_linear_map", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1680195991, "sha": "6e272cd8", "message": "refactor(analysis/inner_product_space): split `submodule.orthogonal` to a new file (#18706)\nThis file is pretty long, and this seems to split out naturally.\nThe lemmas are copied with minimal modification; the only change is that everything is now wrapped in `namespace submodule` rather than having `submodule.` prefixing every lemma.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["del", "theorem", "orthogonal_eq_inter", []], ["del", "theorem", "Inf_orthogonal", ["submodule"]], ["del", "theorem", "bot_orthogonal_eq_top", ["submodule"]], ["del", "theorem", "inf_orthogonal", ["submodule"]], ["del", "theorem", "inf_orthogonal_eq_bot", ["submodule"]], ["del", "theorem", "infi_orthogonal", ["submodule"]], ["del", "theorem", "inner_left_of_mem_orthogonal", ["submodule"]], ["del", "theorem", "inner_right_of_mem_orthogonal", ["submodule"]], ["del", "theorem", "is_closed_orthogonal", ["submodule"]], ["del", "theorem", "le_orthogonal_orthogonal", ["submodule"]], ["del", "theorem", "mem_orthogonal'", ["submodule"]], ["del", "theorem", "mem_orthogonal", ["submodule"]], ["del", "theorem", "mem_orthogonal_singleton_iff_inner_left", ["submodule"]], ["del", "theorem", "mem_orthogonal_singleton_iff_inner_right", ["submodule"]], ["del", "def", "orthogonal", ["submodule"]], ["del", "theorem", "orthogonal_disjoint", ["submodule"]], ["del", "theorem", "orthogonal_eq_top_iff", ["submodule"]], ["del", "theorem", "orthogonal_family_self", ["submodule"]], ["del", "theorem", "orthogonal_gc", ["submodule"]], ["del", "theorem", "orthogonal_le", ["submodule"]], ["del", "theorem", "orthogonal_orthogonal_monotone", ["submodule"]], ["del", "theorem", "sub_mem_orthogonal_of_inner_left", ["submodule"]], ["del", "theorem", "sub_mem_orthogonal_of_inner_right", ["submodule"]], ["del", "theorem", "top_orthogonal_eq_bot", ["submodule"]]]}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/orthogonal.lean", "changes": [["add", "theorem", "Inf_orthogonal", ["submodule"]], ["add", "theorem", "bot_orthogonal_eq_top", ["submodule"]], ["add", "theorem", "inf_orthogonal", ["submodule"]], ["add", "theorem", "inf_orthogonal_eq_bot", ["submodule"]], ["add", "theorem", "infi_orthogonal", ["submodule"]], ["add", "theorem", "inner_left_of_mem_orthogonal", ["submodule"]], ["add", "theorem", "inner_right_of_mem_orthogonal", ["submodule"]], ["add", "theorem", "is_closed_orthogonal", ["submodule"]], ["add", "theorem", "le_orthogonal_orthogonal", ["submodule"]], ["add", "theorem", "mem_orthogonal'", ["submodule"]], ["add", "theorem", "mem_orthogonal", ["submodule"]], ["add", "theorem", "mem_orthogonal_singleton_iff_inner_left", ["submodule"]], ["add", "theorem", "mem_orthogonal_singleton_iff_inner_right", ["submodule"]], ["add", "def", "orthogonal", ["submodule"]], ["add", "theorem", "orthogonal_disjoint", ["submodule"]], ["add", "theorem", "orthogonal_eq_inter", ["submodule"]], ["add", "theorem", "orthogonal_eq_top_iff", ["submodule"]], ["add", "theorem", "orthogonal_family_self", ["submodule"]], ["add", "theorem", "orthogonal_gc", ["submodule"]], ["add", "theorem", "orthogonal_le", ["submodule"]], ["add", "theorem", "orthogonal_orthogonal_monotone", ["submodule"]], ["add", "theorem", "sub_mem_orthogonal_of_inner_left", ["submodule"]], ["add", "theorem", "sub_mem_orthogonal_of_inner_right", ["submodule"]], ["add", "theorem", "top_orthogonal_eq_bot", ["submodule"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}]}, {"timestamp": 1680195990, "sha": "94d4e70e", "message": "chore(category_theory): removed stupid example (#18701)", "changes": [{"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": []}]}, {"timestamp": 1680195989, "sha": "f8d8465c", "message": "chore(category_theory/preadditive/projective): split out two lemmas to reduce imports (#18688)\nMotivated by all the unneeded imports visible in https://tqft.net/mathlib4/2023-03-29/category_theory.monoidal.tor.pdf", "changes": [{"oldPath": "src/algebra/module/injective.lean", "newPath": "src/algebra/module/injective.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/injective.lean", "newPath": "src/category_theory/abelian/injective.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["del", "theorem", "injective_iff_preserves_epimorphisms_preadditive_yoneda_obj'", ["category_theory", "injective"]], ["del", "theorem", "injective_iff_preserves_epimorphisms_preadditive_yoneda_obj", ["category_theory", "injective"]]]}, {"oldPath": "src/category_theory/preadditive/opposite.lean", "newPath": "src/category_theory/preadditive/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": [["del", "theorem", "projective_iff_preserves_epimorphisms_preadditive_coyoneda_obj'", ["category_theory", "projective"]], ["del", "theorem", "projective_iff_preserves_epimorphisms_preadditive_coyoneda_obj", ["category_theory", "projective"]]]}, {"oldPath": null, "newPath": "src/category_theory/preadditive/yoneda/injective.lean", "changes": [["add", "theorem", "injective_iff_preserves_epimorphisms_preadditive_yoneda_obj'", ["category_theory", "injective"]], ["add", "theorem", "injective_iff_preserves_epimorphisms_preadditive_yoneda_obj", ["category_theory", "injective"]]]}, {"oldPath": null, "newPath": "src/category_theory/preadditive/yoneda/projective.lean", "changes": [["add", "theorem", "projective_iff_preserves_epimorphisms_preadditive_coyoneda_obj'", ["category_theory", "projective"]], ["add", "theorem", "projective_iff_preserves_epimorphisms_preadditive_coyoneda_obj", ["category_theory", "projective"]]]}]}, {"timestamp": 1680195988, "sha": "ec1c7d81", "message": "chore(ring_theory/ideal/local_ring): move ring_equiv.local_ring into local_ring.lean (#18686)\nBy having `ring_theory.ideal.local_ring` depend on `logic.equiv.transfer_instance`, rather than the other way around, we avoid importing all the dependencies for `local_ring` into files that just need to transfer \"elementary\" algebraic structures across equivalences.", "changes": [{"oldPath": "src/algebra/module/injective.lean", "newPath": "src/algebra/module/injective.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/degeneracies.lean", "newPath": "src/algebraic_topology/dold_kan/degeneracies.lean", "changes": []}, {"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}]}, {"timestamp": 1680178549, "sha": "d97a0c9f", "message": "feat(linear_algebra/tensor_power): the tensor powers form a graded algebra (#10255)", "changes": [{"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "append_left_eq_cons", ["fin"]], ["add", "theorem", "append_right_eq_snoc", ["fin"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/tensor_algebra/to_tensor_power.lean", "changes": [["add", "def", "equiv_direct_sum", ["tensor_algebra"]], ["add", "theorem", "mk_reindex_cast", ["tensor_algebra"]], ["add", "theorem", "mk_reindex_fin_cast", ["tensor_algebra"]], ["add", "def", "of_direct_sum", ["tensor_algebra"]], ["add", "theorem", "of_direct_sum_comp_to_direct_sum", ["tensor_algebra"]], ["add", "theorem", "of_direct_sum_of_tprod", ["tensor_algebra"]], ["add", "theorem", "of_direct_sum_to_direct_sum", ["tensor_algebra"]], ["add", "def", "to_direct_sum", ["tensor_algebra"]], ["add", "theorem", "to_direct_sum_comp_of_direct_sum", ["tensor_algebra"]], ["add", "theorem", "to_direct_sum_of_direct_sum", ["tensor_algebra"]], ["add", "theorem", "to_direct_sum_tensor_power_tprod", ["tensor_algebra"]], ["add", "theorem", "to_direct_sum_ι", ["tensor_algebra"]], ["add", "theorem", "list_prod_graded_monoid_mk_single", ["tensor_power"]], ["add", "def", "to_tensor_algebra", ["tensor_power"]], ["add", "theorem", "to_tensor_algebra_galgebra_to_fun", ["tensor_power"]], ["add", "theorem", "to_tensor_algebra_ghas_mul", ["tensor_power"]], ["add", "theorem", "to_tensor_algebra_ghas_one", ["tensor_power"]], ["add", "theorem", "to_tensor_algebra_tprod", ["tensor_power"]]]}, {"oldPath": "src/linear_algebra/tensor_power.lean", "newPath": "src/linear_algebra/tensor_power.lean", "changes": [["add", "theorem", "graded_monoid_eq_of_reindex_cast", ["pi_tensor_product"]], ["add", "def", "algebra_map₀", ["tensor_power"]], ["add", "theorem", "algebra_map₀_eq_smul_one", ["tensor_power"]], ["add", "theorem", "algebra_map₀_mul", ["tensor_power"]], ["add", "theorem", "algebra_map₀_mul_algebra_map₀", ["tensor_power"]], ["add", "theorem", "algebra_map₀_one", ["tensor_power"]], ["add", "def", "cast", ["tensor_power"]], ["add", "theorem", "cast_cast", ["tensor_power"]], ["add", "theorem", "cast_eq_cast", ["tensor_power"]], ["add", "theorem", "cast_refl", ["tensor_power"]], ["add", "theorem", "cast_symm", ["tensor_power"]], ["add", "theorem", "cast_tprod", ["tensor_power"]], ["add", "theorem", "cast_trans", ["tensor_power"]], ["add", "theorem", "galgebra_to_fun_def", ["tensor_power"]], ["add", "theorem", "ghas_mul_eq_coe_linear_map", ["tensor_power"]], ["mod", "theorem", "ghas_one_def", ["tensor_power"]], ["add", "theorem", "graded_monoid_eq_of_cast", ["tensor_power"]], ["add", "theorem", "mul_algebra_map₀", ["tensor_power"]], ["add", "theorem", "mul_assoc", ["tensor_power"]], ["add", "theorem", "mul_one", ["tensor_power"]], ["add", "theorem", "one_mul", ["tensor_power"]], ["add", "theorem", "tprod_mul_tprod", ["tensor_power"]]]}]}, {"timestamp": 1680167237, "sha": "c941bb94", "message": "feat(data/set/finite): When `s ×ˢ t` is finite (#18674)\nThe one non-trivial result is `infinite_image2`, because it requires only injectivity of the `f a` and `λ a, f a b` rather than of the uncurrying of `f`.", "changes": [{"oldPath": "archive/imo/imo2008_q2.lean", "newPath": "archive/imo/imo2008_q2.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "image2", ["set", "finite"]], ["add", "theorem", "of_prod_left", ["set", "finite"]], ["add", "theorem", "of_prod_right", ["set", "finite"]], ["del", "theorem", "off_diag", ["set", "finite"]], ["del", "theorem", "prod", ["set", "finite"]], ["add", "theorem", "finite_prod", ["set"]], ["del", "theorem", "nonempty", ["set", "infinite"]], ["add", "theorem", "of_image", ["set", "infinite"]], ["add", "theorem", "infinite_image2", ["set"]], ["del", "theorem", "infinite_of_infinite_image", ["set"]]]}, {"oldPath": "src/data/set/pointwise/finite.lean", "newPath": "src/data/set/pointwise/finite.lean", "changes": [["add", "theorem", "finite_smul_set", ["set"]], ["add", "theorem", "of_smul_set", ["set", "infinite"]], ["add", "theorem", "infinite_mul", ["set"]], ["add", "theorem", "infinite_smul_set", ["set"]]]}]}, {"timestamp": 1680158217, "sha": "fe44cd36", "message": "feat (number_theory/modular_forms): holomorphy of the Jacobi theta function (#18631)\nShow that the Jacobi theta function is holomorphic on the upper half-plane, with exponential decay at infinity.", "changes": [{"oldPath": "src/analysis/complex/locally_uniform_limit.lean", "newPath": "src/analysis/complex/locally_uniform_limit.lean", "changes": [["add", "theorem", "differentiable_on_tsum_of_summable_norm", ["complex"]], ["add", "theorem", "has_sum_deriv_of_summable_norm", ["complex"]]]}, {"oldPath": "src/analysis/complex/upper_half_plane/topology.lean", "newPath": "src/analysis/complex/upper_half_plane/topology.lean", "changes": [["add", "theorem", "mdifferentiable_coe", ["upper_half_plane"]], ["add", "theorem", "smooth_coe", ["upper_half_plane"]]]}, {"oldPath": "src/number_theory/modular_forms/basic.lean", "newPath": "src/number_theory/modular_forms/basic.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/jacobi_theta.lean", "newPath": "src/number_theory/modular_forms/jacobi_theta.lean", "changes": [["add", "theorem", "continuous_jacobi_theta", []], ["add", "theorem", "differentiable_at_tsum_exp_mul_sq", []], ["add", "theorem", "exists_summable_bound_exp_mul_sq", []], ["add", "theorem", "has_sum_nat_jacobi_theta", []], ["add", "theorem", "is_O_at_im_infty_jacobi_theta_sub_one", []], ["add", "theorem", "jacobi_theta_eq_tsum_nat", []], ["del", "theorem", "jacobi_theta_summable", []], ["del", "theorem", "jacobi_theta_unif_summable", []], ["add", "theorem", "mdifferentiable_jacobi_theta", []], ["add", "theorem", "norm_exp_mul_sq_le", []], ["add", "theorem", "norm_jacobi_theta_sub_one_le", []], ["add", "theorem", "summable_exp_mul_sq", []]]}]}, {"timestamp": 1680147644, "sha": "2ec920d3", "message": "feat(data/list/lemmas): add lemmas about `set.range list.nth*` (#18647)\nAdd versions for `list.nth_le`, `list.nth`, `list.nthd`, and `list.inth`. Also move lemmas from `list` to `set` namespace.", "changes": [{"oldPath": "src/data/list/lemmas.lean", "newPath": "src/data/list/lemmas.lean", "changes": [["del", "theorem", "range_map", ["list"]], ["del", "theorem", "range_map_coe", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/set/list.lean", "changes": [["add", "theorem", "range_list_inth", ["set"]], ["add", "theorem", "range_list_map", ["set"]], ["add", "theorem", "range_list_map_coe", ["set"]], ["add", "theorem", "range_list_nth", ["set"]], ["add", "theorem", "range_list_nth_le", ["set"]], ["add", "theorem", "range_list_nthd", ["set"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": []}]}, {"timestamp": 1680136334, "sha": "71b36b6f", "message": "chore(order/category): Partially revert categories (#18690)\nIt was pointed out in leanprover-community/mathlib4#3164 that certain changes in #18657 were unsound. This PR reverts those unsound changes.", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": []}]}, {"timestamp": 1680136333, "sha": "a6ece354", "message": "chore(algebra/star/self_adjoint): generalize a lemma to `semifield` (#18687)\nThis was missed in a previous commit, and backports a change made during forward-porting.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": []}]}, {"timestamp": 1680136332, "sha": "91862a60", "message": "feat(analysis/calculus/cont_diff): bound for the iterated derivative of a product (#18632)\nWe show that `‖D^n (x ↦ B (f x) (g x))‖ ≤ ‖B‖ ∑_{k ≤ n} n.choose k ‖D^k f‖ ‖D^{n-k} g‖` for a general continuous bilinear map `B`, and specialize this inequality to the case of the product of two functions.\nThis is a first step to control the norm of the iterated derivative of a composition.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "norm_iterated_fderiv_le_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "norm_iterated_fderiv_le_of_bilinear_of_le_one", ["continuous_linear_map"]], ["add", "theorem", "norm_iterated_fderiv_within_le_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "norm_iterated_fderiv_within_le_of_bilinear_aux", ["continuous_linear_map"]], ["add", "theorem", "norm_iterated_fderiv_within_le_of_bilinear_of_le_one", ["continuous_linear_map"]], ["add", "theorem", "sum_antidiagonal_choose_succ_mul", ["finset"]], ["add", "theorem", "sum_choose_succ_mul", ["finset"]], ["add", "theorem", "norm_iterated_fderiv_mul_le", []], ["add", "theorem", "norm_iterated_fderiv_smul_le", []], ["add", "theorem", "norm_iterated_fderiv_within_mul_le", []], ["add", "theorem", "norm_iterated_fderiv_within_smul_le", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_mul_le", ["continuous_linear_map"]]]}]}, {"timestamp": 1680136330, "sha": "c04bc6e9", "message": "refactor(representation_theory/group_cohomology_resolution): refactor `k[G^{n + 1}]` isomorphism (#18271)\nThis refactors the isomorphism $k[G^{n + 1}] \\cong k[G] \\otimes_k k[G^n]$ (where $G$ acts by left multiplication on $k[G^{n + 1}]$ and $k[G]$ but trivially on $k[G^n]$) to use an isomorphism of $G$-sets $G^{n + 1} \\cong G \\times G^n.$", "changes": [{"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "def", "diagonal", ["Action"]], ["add", "def", "diagonal_one_iso_left_regular", ["Action"]], ["add", "def", "diagonal_succ", ["Action"]], ["add", "def", "left_regular", ["Action"]], ["add", "def", "left_regular_tensor_iso", ["Action"]], ["add", "def", "tensor_unit_iso", ["Action"]], ["mod", "def", "map_Action", ["category_theory", "monoidal_functor"]], ["add", "theorem", "map_Action_ε_inv_hom", ["category_theory", "monoidal_functor"]], ["add", "theorem", "map_Action_μ_inv_hom", ["category_theory", "monoidal_functor"]]]}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": [["del", "theorem", "linearization_map_hom_of", ["Rep"]], ["add", "theorem", "linearization_map_hom_single", ["Rep"]], ["add", "theorem", "linearization_ε_hom", ["Rep"]], ["add", "theorem", "linearization_ε_inv_hom_apply", ["Rep"]], ["add", "theorem", "linearization_μ_hom", ["Rep"]], ["add", "theorem", "linearization_μ_inv_hom", ["Rep"]], ["add", "def", "trivial", ["Rep"]], ["add", "theorem", "trivial_def", ["Rep"]]]}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["mod", "def", "trivial", ["representation"]], ["mod", "theorem", "trivial_def", ["representation"]]]}, {"oldPath": "src/representation_theory/group_cohomology_resolution.lean", "newPath": "src/representation_theory/group_cohomology_resolution.lean", "changes": [["add", "def", "Action_diagonal_succ", ["group_cohomology", "resolution"]], ["add", "theorem", "Action_diagonal_succ_hom_apply", ["group_cohomology", "resolution"]], ["add", "theorem", "Action_diagonal_succ_inv_apply", ["group_cohomology", "resolution"]], ["add", "def", "diagonal_succ", ["group_cohomology", "resolution"]], ["add", "theorem", "diagonal_succ_hom_single", ["group_cohomology", "resolution"]], ["add", "theorem", "diagonal_succ_inv_single_left", ["group_cohomology", "resolution"]], ["add", "theorem", "diagonal_succ_inv_single_right", ["group_cohomology", "resolution"]], ["add", "theorem", "diagonal_succ_inv_single_single", ["group_cohomology", "resolution"]], ["del", "def", "equiv_tensor", ["group_cohomology", "resolution"]], ["del", "theorem", "equiv_tensor_def", ["group_cohomology", "resolution"]], ["del", "theorem", "equiv_tensor_inv_def", ["group_cohomology", "resolution"]], ["del", "def", "of_tensor", ["group_cohomology", "resolution"]], ["del", "def", "of_tensor_aux", ["group_cohomology", "resolution"]], ["del", "theorem", "of_tensor_aux_comm_of_mul_action", ["group_cohomology", "resolution"]], ["del", "theorem", "of_tensor_aux_single", ["group_cohomology", "resolution"]], ["del", "theorem", "of_tensor_single'", ["group_cohomology", "resolution"]], ["del", "theorem", "of_tensor_single", ["group_cohomology", "resolution"]], ["del", "def", "to_tensor", ["group_cohomology", "resolution"]], ["del", "def", "to_tensor_aux", ["group_cohomology", "resolution"]], ["del", "theorem", "to_tensor_aux_left_inv", ["group_cohomology", "resolution"]], ["del", "theorem", "to_tensor_aux_of_mul_action", ["group_cohomology", "resolution"]], ["del", "theorem", "to_tensor_aux_right_inv", ["group_cohomology", "resolution"]], ["del", "theorem", "to_tensor_aux_single", ["group_cohomology", "resolution"]], ["del", "theorem", "to_tensor_single", ["group_cohomology", "resolution"]], ["mod", "def", "ε", ["group_cohomology", "resolution"]]]}]}, {"timestamp": 1680136328, "sha": "564bcc44", "message": "fix(algebra.group.ulift): fix to_additive name for cancel_comm_monoid (#18268)\nThis is a fix to match mathlib 4\nhttps://leanprover-community.github.io/mathlib4_docs/Mathlib/Algebra/Group/ULift.html#ULift.addCancelCommMonoid", "changes": [{"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}]}, {"timestamp": 1680136326, "sha": "229f6f14", "message": "feat(set_theory/zfc/basic): define Set and Class intersection (#18232)", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "mem_of_mem_sInter", ["Class"]], ["add", "theorem", "mem_sInter", ["Class"]], ["add", "def", "sInter", ["Class"]], ["add", "theorem", "sInter_apply", ["Class"]], ["add", "theorem", "sInter_coe", ["Class"]], ["add", "theorem", "sInter_empty", ["Class"]], ["mod", "theorem", "sUnion_empty", ["Class"]], ["add", "theorem", "mem_of_mem_sInter", ["Set"]], ["add", "theorem", "mem_sInter", ["Set"]], ["add", "theorem", "not_mem_sInter_of_not_mem", ["Set"]], ["add", "theorem", "sInter_empty", ["Set"]], ["add", "theorem", "sInter_singleton", ["Set"]], ["mod", "theorem", "sUnion_empty", ["Set"]], ["add", "theorem", "to_set_sInter", ["Set"]]]}]}, {"timestamp": 1680136325, "sha": "1c775cc6", "message": "docs(tutorials/representation_theory): beginnings of a tutorial following Etingof's notes (#13911)", "changes": [{"oldPath": null, "newPath": "docs/tutorial/representation_theory/etingof.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/algebra.lean", "newPath": "src/algebra/category/Module/algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}]}, {"timestamp": 1680090001, "sha": "b685f506", "message": "feat(data/finset/pointwise): `a • (s ∩ t) = a • s ∩ a • t` (#18682)\nI added the corresponding `set` lemmas a while back, but forgot about their `finset` counterpart. Also additivise `finset.is_central_scalar`/`set.is_central_scalar`.", "changes": [{"oldPath": "src/data/finset/image.lean", "newPath": "src/data/finset/image.lean", "changes": [["add", "theorem", "image_sdiff", ["finset"]], ["add", "theorem", "image_symm_diff", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "smul_finset_inter", ["finset"]], ["add", "theorem", "smul_finset_inter₀", ["finset"]], ["add", "theorem", "smul_finset_sdiff", ["finset"]], ["add", "theorem", "smul_finset_sdiff₀", ["finset"]], ["add", "theorem", "smul_finset_symm_diff", ["finset"]], ["add", "theorem", "smul_finset_symm_diff₀", ["finset"]], ["add", "theorem", "smul_finset_univ", ["finset"]], ["add", "theorem", "smul_univ", ["finset"]]]}, {"oldPath": "src/data/set/pointwise/smul.lean", "newPath": "src/data/set/pointwise/smul.lean", "changes": []}]}, {"timestamp": 1680079838, "sha": "9cb72061", "message": "doc(representation_theory/basic): add docstring to dual_tensor_hom_comm (#18661)\nadd a docstring to dual_tensor_hom_comm to describe its mathematical content explicitly", "changes": [{"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": []}]}, {"timestamp": 1680074249, "sha": "2de9c37f", "message": "chore(linear_algebra/affine_space/combination): make k explicit in affine_combination (#18689)\nThe implicitness caused problems in elaboration. In Lean 3 it only amounts to long elaboration times, but in Lean 4 elaboration fails.", "changes": [{"oldPath": "src/analysis/convex/between.lean", "newPath": "src/analysis/convex/between.lean", "changes": []}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/matrix.lean", "newPath": "src/linear_algebra/affine_space/matrix.lean", "changes": []}]}, {"timestamp": 1680069628, "sha": "bcbee715", "message": "feat(ring_theory/mv_polynomial/weighted homogeneous): add weighted homogeneous polynomials (#17855)\nIt is possible to assign weights (in a commutative additive monoid `M`) to the variables of a\nmultivariate polynomial ring, so that monomials of the ring then have a weighted degree with respect to the weights of the variables. The weights are represented by a function `w : σ → M`, where `σ` are the indeterminates.\nA multivariate polynomial `φ` is weighted homogeneous of weighted degree `m : M` if all monomials occuring in `φ` have the same weighted degree `m`.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/mv_polynomial/weighted_homogeneous.lean", "changes": [["add", "theorem", "coeff_weighted_homogeneous_component", ["mv_polynomial"]], ["add", "theorem", "add", ["mv_polynomial", "is_weighted_homogeneous"]], ["add", "theorem", "coeff_eq_zero", ["mv_polynomial", "is_weighted_homogeneous"]], ["add", "theorem", "inj_right", ["mv_polynomial", "is_weighted_homogeneous"]], ["add", "theorem", "mul", ["mv_polynomial", "is_weighted_homogeneous"]], ["add", "theorem", "prod", ["mv_polynomial", "is_weighted_homogeneous"]], ["add", "theorem", "sum", ["mv_polynomial", "is_weighted_homogeneous"]], ["add", "theorem", "weighted_total_degree", ["mv_polynomial", "is_weighted_homogeneous"]], ["add", "def", "is_weighted_homogeneous", ["mv_polynomial"]], ["add", "theorem", "is_weighted_homogeneous_C", ["mv_polynomial"]], ["add", "theorem", "is_weighted_homogeneous_X", ["mv_polynomial"]], ["add", "theorem", "is_weighted_homogeneous_monomial", ["mv_polynomial"]], ["add", "theorem", "is_weighted_homogeneous_of_total_degree_zero", ["mv_polynomial"]], ["add", "theorem", "is_weighted_homogeneous_one", ["mv_polynomial"]], ["add", "theorem", "is_weighted_homogeneous_zero", ["mv_polynomial"]], ["add", "theorem", "le_weighted_total_degree", ["mv_polynomial"]], ["add", "theorem", "mem_weighted_homogeneous_submodule", ["mv_polynomial"]], ["add", "theorem", "sum_weighted_homogeneous_component", ["mv_polynomial"]], ["add", "def", "weighted_degree'", ["mv_polynomial"]], ["add", "def", "weighted_homogeneous_component", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_C_mul", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_apply", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_eq_zero'", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_eq_zero", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_finsupp", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_is_weighted_homogeneous", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_weighted_homogeneous_polynomial", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_component_zero", ["mv_polynomial"]], ["add", "def", "weighted_homogeneous_submodule", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_submodule_eq_finsupp_supported", ["mv_polynomial"]], ["add", "theorem", "weighted_homogeneous_submodule_mul", ["mv_polynomial"]], ["add", "def", "weighted_total_degree'", ["mv_polynomial"]], ["add", "theorem", "weighted_total_degree'_eq_bot_iff", ["mv_polynomial"]], ["add", "theorem", "weighted_total_degree'_zero", ["mv_polynomial"]], ["add", "def", "weighted_total_degree", ["mv_polynomial"]], ["add", "theorem", "weighted_total_degree_coe", ["mv_polynomial"]], ["add", "theorem", "weighted_total_degree_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1680065028, "sha": "eb810cf5", "message": "feat(measure_theory/group/fundamental_domain): integral_eq_tsum (#18132)\nThis is `integral` analogues of existing `lintegral` lemmas. Also added `lintegral` versions of `sum_lintegral` and fixing naming consistency with primes vs no primes. (The prime goes with the `\\inv`.)", "changes": [{"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "integral_eq_tsum'", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "integral_eq_tsum", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "integral_eq_tsum_of_ac", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "lintegral_eq_tsum'", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "set_integral_eq_tsum'", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "set_integral_eq_tsum", ["measure_theory", "is_fundamental_domain"]]]}]}, {"timestamp": 1680065027, "sha": "200eda15", "message": "feat(category_theory/idempotents): idempotent completeness of homological_complex (#17921)", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": [["add", "def", "map_homological_complex", ["category_theory", "equivalence"]], ["add", "def", "map_homological_complex_id_iso", ["category_theory", "functor"]], ["add", "def", "map_homological_complex", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/idempotents/homological_complex.lean", "newPath": "src/category_theory/idempotents/homological_complex.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/karoubi.lean", "newPath": "src/category_theory/idempotents/karoubi.lean", "changes": [["add", "def", "to_karoubi_equivalence", ["category_theory", "idempotents"]]]}]}, {"timestamp": 1680058018, "sha": "d3acee0d", "message": "feat(ring_theory/ideal/norm): add ideal.finite_set_of_abs_norm_eq (#18569)\nProve that there are only finitely many ideals of `abs_norm` equal to $n$ for $n$ positive.", "changes": [{"oldPath": "src/ring_theory/ideal/norm.lean", "newPath": "src/ring_theory/ideal/norm.lean", "changes": [["add", "theorem", "abs_norm_ne_zero_iff", ["ideal"]], ["add", "theorem", "finite_set_of_abs_norm_eq", ["ideal"]], ["add", "theorem", "span_singleton_abs_norm_le", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/quotient_operations.lean", "newPath": "src/ring_theory/ideal/quotient_operations.lean", "changes": [["add", "theorem", "comap_map_mk", ["ideal"]]]}]}, {"timestamp": 1680058017, "sha": "98bbc352", "message": "feat(set_theory/zfc/ordinal): more lemmas on transitive sets (#18307)", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "sUnion_pair", ["Set"]]]}, {"oldPath": "src/set_theory/zfc/ordinal.lean", "newPath": "src/set_theory/zfc/ordinal.lean", "changes": []}]}, {"timestamp": 1680058016, "sha": "a7e36e48", "message": "refactor(data/seq): scope seq and wseq to namespace stream (#18284)\nAdds namespace `stream` to `seq` and `wseq` to ease the Mathlib4 port (as `Seq` now name clashes with class `Seq` (`has_seq` in Lean 3).\nThis requires disambiguation between `stream` and `computation` where lemmas in each namespace have the same name, and requires explicit scoping to mathlib files that reference `seq` and `wseq` (often by `open stream.seq as seq`)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/terminated_stable.lean", "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/translations.lean", "newPath": "src/algebra/continued_fractions/translations.lean", "changes": []}, {"oldPath": "src/data/seq/parallel.lean", "newPath": "src/data/seq/parallel.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["del", "def", "append", ["seq"]], ["del", "theorem", "append_assoc", ["seq"]], ["del", "theorem", "append_nil", ["seq"]], ["del", "def", "bisim_o", ["seq"]], ["del", "theorem", "coinduction2", ["seq"]], ["del", "theorem", "coinduction", ["seq"]], ["del", "def", "cons", ["seq"]], ["del", "theorem", "cons_append", ["seq"]], ["del", "theorem", "cons_injective2", ["seq"]], ["del", "theorem", "cons_left_injective", ["seq"]], ["del", "theorem", "cons_right_injective", ["seq"]], ["del", "def", "F", ["seq", "corec"]], ["del", "def", "corec", ["seq"]], ["del", "theorem", "corec_eq", ["seq"]], ["del", "def", "destruct", ["seq"]], ["del", "theorem", "destruct_cons", ["seq"]], ["del", "theorem", "destruct_eq_cons", ["seq"]], ["del", "theorem", "destruct_eq_nil", ["seq"]], ["del", "theorem", "destruct_nil", ["seq"]], ["del", "def", "drop", ["seq"]], ["del", "theorem", "dropn_add", ["seq"]], ["del", "theorem", "dropn_tail", ["seq"]], ["del", "def", "enum", ["seq"]], ["del", "theorem", "enum_cons", ["seq"]], ["del", "theorem", "enum_nil", ["seq"]], ["del", "theorem", "eq_of_bisim", ["seq"]], ["del", "theorem", "eq_or_mem_of_mem_cons", ["seq"]], ["del", "theorem", "exists_of_mem_map", ["seq"]], ["del", "theorem", "ge_stable", ["seq"]], ["del", "def", "head", ["seq"]], ["del", "theorem", "head_cons", ["seq"]], ["del", "theorem", "head_dropn", ["seq"]], ["del", "theorem", "head_eq_destruct", ["seq"]], ["del", "theorem", "head_nil", ["seq"]], ["del", "def", "is_bisimulation", ["seq"]], ["del", "def", "join", ["seq"]], ["del", "theorem", "join_append", ["seq"]], ["del", "theorem", "join_cons", ["seq"]], ["del", "theorem", "join_cons_cons", ["seq"]], ["del", "theorem", "join_cons_nil", ["seq"]], ["del", "theorem", "join_nil", ["seq"]], ["del", "theorem", "le_stable", ["seq"]], ["del", "def", "map", ["seq"]], ["del", "theorem", "map_append", ["seq"]], ["del", "theorem", "map_comp", ["seq"]], ["del", "theorem", "map_cons", ["seq"]], ["del", "theorem", "map_id", ["seq"]], ["del", "theorem", "map_nil", ["seq"]], ["del", "theorem", "map_nth", ["seq"]], ["del", "theorem", "map_tail", ["seq"]], ["del", "theorem", "mem_append_left", ["seq"]], ["del", "theorem", "mem_cons", ["seq"]], ["del", "theorem", "mem_cons_iff", ["seq"]], ["del", "theorem", "mem_cons_of_mem", ["seq"]], ["del", "theorem", "mem_map", ["seq"]], ["del", "theorem", "mem_rec_on", ["seq"]], ["del", "def", "nats", ["seq"]], ["del", "theorem", "nats_nth", ["seq"]], ["del", "def", "nil", ["seq"]], ["del", "theorem", "nil_append", ["seq"]], ["del", "theorem", "not_mem_nil", ["seq"]], ["del", "theorem", "not_terminates_iff", ["seq"]], ["del", "def", "nth", ["seq"]], ["del", "theorem", "nth_cons_succ", ["seq"]], ["del", "theorem", "nth_cons_zero", ["seq"]], ["del", "theorem", "nth_enum", ["seq"]], ["del", "theorem", "nth_mk", ["seq"]], ["del", "theorem", "nth_nil", ["seq"]], ["del", "theorem", "nth_tail", ["seq"]], ["del", "theorem", "nth_zip", ["seq"]], ["del", "theorem", "nth_zip_with", ["seq"]], ["del", "def", "of_lazy_list", ["seq"]], ["del", "def", "of_list", ["seq"]], ["del", "theorem", "of_list_append", ["seq"]], ["del", "theorem", "of_list_cons", ["seq"]], ["del", "theorem", "of_list_nil", ["seq"]], ["del", "theorem", "of_list_nth", ["seq"]], ["del", "theorem", "of_mem_append", ["seq"]], ["del", "def", "of_stream", ["seq"]], ["del", "theorem", "of_stream_append", ["seq"]], ["del", "theorem", "of_stream_cons", ["seq"]], ["del", "def", "omap", ["seq"]], ["del", "def", "rec_on", ["seq"]], ["del", "def", "split_at", ["seq"]], ["del", "def", "tail", ["seq"]], ["del", "theorem", "tail_cons", ["seq"]], ["del", "theorem", "tail_nil", ["seq"]], ["del", "def", "take", ["seq"]], ["del", "def", "terminated_at", ["seq"]], ["del", "theorem", "terminated_stable", ["seq"]], ["del", "def", "terminates", ["seq"]], ["del", "def", "to_list'", ["seq"]], ["del", "def", "to_list", ["seq"]], ["del", "def", "to_list_or_stream", ["seq"]], ["del", "def", "to_stream", ["seq"]], ["del", "def", "unzip", ["seq"]], ["del", "theorem", "val_cons", ["seq"]], ["del", "def", "zip", ["seq"]], ["del", "def", "zip_with", ["seq"]], ["del", "def", "bind", ["seq1"]], ["del", "theorem", "bind_assoc", ["seq1"]], ["del", "theorem", "bind_ret", ["seq1"]], ["del", "def", "join", ["seq1"]], ["del", "theorem", "join_cons", ["seq1"]], ["del", "theorem", "join_join", ["seq1"]], ["del", "theorem", "join_map_ret", ["seq1"]], ["del", "theorem", "join_nil", ["seq1"]], ["del", "def", "map", ["seq1"]], ["del", "theorem", "map_id", ["seq1"]], ["del", "theorem", "map_join'", ["seq1"]], ["del", "theorem", "map_join", ["seq1"]], ["del", "def", "ret", ["seq1"]], ["del", "theorem", "ret_bind", ["seq1"]], ["del", "def", "to_seq", ["seq1"]], ["del", "def", "seq1", []], ["del", "def", "seq", []], ["mod", "def", "is_seq", ["stream"]], ["add", "def", "append", ["stream", "seq"]], ["add", "theorem", "append_assoc", ["stream", "seq"]], ["add", "theorem", "append_nil", ["stream", "seq"]], ["add", "def", "bisim_o", ["stream", "seq"]], ["add", "theorem", "coinduction2", ["stream", "seq"]], ["add", "theorem", "coinduction", ["stream", "seq"]], ["add", "def", "cons", ["stream", "seq"]], ["add", "theorem", "cons_append", ["stream", "seq"]], ["add", "theorem", "cons_injective2", ["stream", "seq"]], ["add", "theorem", "cons_left_injective", ["stream", "seq"]], ["add", "theorem", "cons_right_injective", ["stream", "seq"]], ["add", "def", "F", ["stream", "seq", "corec"]], ["add", "def", "corec", ["stream", "seq"]], ["add", "theorem", "corec_eq", ["stream", "seq"]], ["add", "def", "destruct", ["stream", "seq"]], ["add", "theorem", "destruct_cons", ["stream", "seq"]], ["add", "theorem", "destruct_eq_cons", ["stream", "seq"]], ["add", "theorem", "destruct_eq_nil", ["stream", "seq"]], ["add", "theorem", "destruct_nil", ["stream", "seq"]], ["add", "def", "drop", ["stream", "seq"]], ["add", "theorem", "dropn_add", ["stream", "seq"]], ["add", "theorem", "dropn_tail", ["stream", "seq"]], ["add", "def", "enum", ["stream", "seq"]], ["add", "theorem", "enum_cons", ["stream", "seq"]], ["add", "theorem", "enum_nil", ["stream", "seq"]], ["add", "theorem", "eq_of_bisim", ["stream", "seq"]], ["add", "theorem", "eq_or_mem_of_mem_cons", ["stream", "seq"]], ["add", "theorem", "exists_of_mem_map", ["stream", "seq"]], ["add", "theorem", "ge_stable", ["stream", "seq"]], ["add", "def", "head", ["stream", "seq"]], ["add", "theorem", "head_cons", ["stream", "seq"]], ["add", "theorem", "head_dropn", ["stream", "seq"]], ["add", "theorem", "head_eq_destruct", ["stream", "seq"]], ["add", "theorem", "head_nil", ["stream", "seq"]], ["add", "def", "is_bisimulation", ["stream", "seq"]], ["add", "def", "join", ["stream", "seq"]], ["add", "theorem", "join_append", ["stream", "seq"]], ["add", "theorem", "join_cons", ["stream", "seq"]], ["add", "theorem", "join_cons_cons", ["stream", "seq"]], ["add", "theorem", "join_cons_nil", ["stream", "seq"]], ["add", "theorem", "join_nil", ["stream", "seq"]], ["add", "theorem", "le_stable", ["stream", "seq"]], ["add", "def", "map", ["stream", "seq"]], ["add", "theorem", "map_append", ["stream", "seq"]], ["add", "theorem", "map_comp", ["stream", "seq"]], ["add", "theorem", "map_cons", ["stream", "seq"]], ["add", "theorem", "map_id", ["stream", "seq"]], ["add", "theorem", "map_nil", ["stream", "seq"]], ["add", "theorem", "map_nth", ["stream", "seq"]], ["add", "theorem", "map_tail", ["stream", "seq"]], ["add", "theorem", "mem_append_left", ["stream", "seq"]], ["add", "theorem", "mem_cons", ["stream", "seq"]], ["add", "theorem", "mem_cons_iff", ["stream", "seq"]], ["add", "theorem", "mem_cons_of_mem", ["stream", "seq"]], ["add", "theorem", "mem_map", ["stream", "seq"]], ["add", "theorem", "mem_rec_on", ["stream", "seq"]], ["add", "def", "nats", ["stream", "seq"]], ["add", "theorem", "nats_nth", ["stream", "seq"]], ["add", "def", "nil", ["stream", "seq"]], ["add", "theorem", "nil_append", ["stream", "seq"]], ["add", "theorem", "not_mem_nil", ["stream", "seq"]], ["add", "theorem", "not_terminates_iff", ["stream", "seq"]], ["add", "def", "nth", ["stream", "seq"]], ["add", "theorem", "nth_cons_succ", ["stream", "seq"]], ["add", "theorem", "nth_cons_zero", ["stream", "seq"]], ["add", "theorem", "nth_enum", ["stream", "seq"]], ["add", "theorem", "nth_mk", ["stream", "seq"]], ["add", "theorem", "nth_nil", ["stream", "seq"]], ["add", "theorem", "nth_tail", ["stream", "seq"]], ["add", "theorem", "nth_zip", ["stream", "seq"]], ["add", "theorem", "nth_zip_with", ["stream", "seq"]], ["add", "def", "of_lazy_list", ["stream", "seq"]], ["add", "def", "of_list", ["stream", "seq"]], ["add", "theorem", "of_list_append", ["stream", "seq"]], ["add", "theorem", "of_list_cons", ["stream", "seq"]], ["add", "theorem", "of_list_nil", ["stream", "seq"]], ["add", "theorem", "of_list_nth", ["stream", "seq"]], ["add", "theorem", "of_mem_append", ["stream", "seq"]], ["add", "def", "of_stream", ["stream", "seq"]], ["add", "theorem", "of_stream_append", ["stream", "seq"]], ["add", "theorem", "of_stream_cons", ["stream", "seq"]], ["add", "def", "omap", ["stream", "seq"]], ["add", "def", "rec_on", ["stream", "seq"]], ["add", "def", "split_at", ["stream", "seq"]], ["add", "def", "tail", ["stream", "seq"]], ["add", "theorem", "tail_cons", ["stream", "seq"]], ["add", "theorem", "tail_nil", ["stream", "seq"]], ["add", "def", "take", ["stream", "seq"]], ["add", "def", "terminated_at", ["stream", "seq"]], ["add", "theorem", "terminated_stable", ["stream", "seq"]], ["add", "def", "terminates", ["stream", "seq"]], ["add", "def", "to_list'", ["stream", "seq"]], ["add", "def", "to_list", ["stream", "seq"]], ["add", "def", "to_list_or_stream", ["stream", "seq"]], ["add", "def", "to_stream", ["stream", "seq"]], ["add", "def", "unzip", ["stream", "seq"]], ["add", "theorem", "val_cons", ["stream", "seq"]], ["add", "def", "zip", ["stream", "seq"]], ["add", "def", "zip_with", ["stream", "seq"]], ["add", "def", "bind", ["stream", "seq1"]], ["add", "theorem", "bind_assoc", ["stream", "seq1"]], ["add", "theorem", "bind_ret", ["stream", "seq1"]], ["add", "def", "join", ["stream", "seq1"]], ["add", "theorem", "join_cons", ["stream", "seq1"]], ["add", "theorem", "join_join", ["stream", "seq1"]], ["add", "theorem", "join_map_ret", ["stream", "seq1"]], ["add", "theorem", "join_nil", ["stream", "seq1"]], ["add", "def", "map", ["stream", "seq1"]], ["add", "theorem", "map_id", ["stream", "seq1"]], ["add", "theorem", "map_join'", ["stream", "seq1"]], ["add", "theorem", "map_join", ["stream", "seq1"]], ["add", "def", "ret", ["stream", "seq1"]], ["add", "theorem", "ret_bind", ["stream", "seq1"]], ["add", "def", "to_seq", ["stream", "seq1"]], ["add", "def", "seq1", ["stream"]], ["add", "def", "seq", ["stream"]]]}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": [["add", "def", "all", ["stream", "wseq"]], ["add", "def", "any", ["stream", "wseq"]], ["add", "def", "append", ["stream", "wseq"]], ["add", "theorem", "append_assoc", ["stream", "wseq"]], ["add", "theorem", "append_nil", ["stream", "wseq"]], ["add", "def", "bind", ["stream", "wseq"]], ["add", "theorem", "bind_assoc", ["stream", "wseq"]], ["add", "theorem", "bind_congr", ["stream", "wseq"]], ["add", "theorem", "bind_ret", ["stream", "wseq"]], ["add", "theorem", "imp", ["stream", "wseq", "bisim_o"]], ["add", "def", "bisim_o", ["stream", "wseq"]], ["add", "def", "collect", ["stream", "wseq"]], ["add", "def", "compute", ["stream", "wseq"]], ["add", "def", "cons", ["stream", "wseq"]], ["add", "theorem", "cons_append", ["stream", "wseq"]], ["add", "theorem", "cons_congr", ["stream", "wseq"]], ["add", "def", "destruct", ["stream", "wseq"]], ["add", "def", "aux", ["stream", "wseq", "destruct_append"]], ["add", "theorem", "destruct_append", ["stream", "wseq"]], ["add", "theorem", "destruct_congr", ["stream", "wseq"]], ["add", "theorem", "destruct_congr_iff", ["stream", "wseq"]], ["add", "theorem", "destruct_cons", ["stream", "wseq"]], ["add", "theorem", "destruct_dropn", ["stream", "wseq"]], ["add", "theorem", "destruct_flatten", ["stream", "wseq"]], ["add", "def", "aux", ["stream", "wseq", "destruct_join"]], ["add", "theorem", "destruct_join", ["stream", "wseq"]], ["add", "theorem", "destruct_map", ["stream", "wseq"]], ["add", "theorem", "destruct_nil", ["stream", "wseq"]], ["add", "theorem", "destruct_of_seq", ["stream", "wseq"]], ["add", "theorem", "destruct_some_of_destruct_tail_some", ["stream", "wseq"]], ["add", "theorem", "destruct_tail", ["stream", "wseq"]], ["add", "theorem", "destruct_terminates_of_nth_terminates", ["stream", "wseq"]], ["add", "theorem", "destruct_think", ["stream", "wseq"]], ["add", "def", "aux", ["stream", "wseq", "drop"]], ["add", "theorem", "aux_none", ["stream", "wseq", "drop"]], ["add", "def", "drop", ["stream", "wseq"]], ["add", "theorem", "dropn_add", ["stream", "wseq"]], ["add", "theorem", "dropn_congr", ["stream", "wseq"]], ["add", "theorem", "dropn_cons", ["stream", "wseq"]], ["add", "theorem", "dropn_nil", ["stream", "wseq"]], ["add", "theorem", "dropn_of_seq", ["stream", "wseq"]], ["add", "theorem", "dropn_tail", ["stream", "wseq"]], ["add", "theorem", "dropn_think", ["stream", "wseq"]], ["add", "theorem", "eq_or_mem_iff_mem", ["stream", "wseq"]], ["add", "theorem", "equivalence", ["stream", "wseq", "equiv"]], ["add", "theorem", "ext", ["stream", "wseq", "equiv"]], ["add", "theorem", "refl", ["stream", "wseq", "equiv"]], ["add", "theorem", "symm", ["stream", "wseq", "equiv"]], ["add", "theorem", "trans", ["stream", "wseq", "equiv"]], ["add", "def", "equiv", ["stream", "wseq"]], ["add", "theorem", "exists_dropn_of_mem", ["stream", "wseq"]], ["add", "theorem", "exists_nth_of_mem", ["stream", "wseq"]], ["add", "theorem", "exists_of_lift_rel_left", ["stream", "wseq"]], ["add", "theorem", "exists_of_lift_rel_right", ["stream", "wseq"]], ["add", "theorem", "exists_of_mem_bind", ["stream", "wseq"]], ["add", "theorem", "exists_of_mem_join", ["stream", "wseq"]], ["add", "theorem", "exists_of_mem_map", ["stream", "wseq"]], ["add", "def", "filter", ["stream", "wseq"]], ["add", "def", "filter_map", ["stream", "wseq"]], ["add", "def", "find", ["stream", "wseq"]], ["add", "def", "find_index", ["stream", "wseq"]], ["add", "def", "find_indexes", ["stream", "wseq"]], ["add", "def", "flatten", ["stream", "wseq"]], ["add", "theorem", "flatten_congr", ["stream", "wseq"]], ["add", "theorem", "flatten_equiv", ["stream", "wseq"]], ["add", "theorem", "flatten_ret", ["stream", "wseq"]], ["add", "theorem", "flatten_think", ["stream", "wseq"]], ["add", "def", "get", ["stream", "wseq"]], ["add", "def", "head", ["stream", "wseq"]], ["add", "theorem", "head_congr", ["stream", "wseq"]], ["add", "theorem", "head_cons", ["stream", "wseq"]], ["add", "theorem", "head_nil", ["stream", "wseq"]], ["add", "theorem", "head_of_seq", ["stream", "wseq"]], ["add", "theorem", "head_some_of_head_tail_some", ["stream", "wseq"]], ["add", "theorem", "head_some_of_nth_some", ["stream", "wseq"]], ["add", "theorem", "head_terminates_iff", ["stream", "wseq"]], ["add", "theorem", "head_terminates_of_head_tail_terminates", ["stream", "wseq"]], ["add", "theorem", "head_terminates_of_mem", ["stream", "wseq"]], ["add", "theorem", "head_terminates_of_nth_terminates", ["stream", "wseq"]], ["add", "theorem", "head_think", ["stream", "wseq"]], ["add", "def", "index_of", ["stream", "wseq"]], ["add", "def", "indexes_of", ["stream", "wseq"]], ["add", "def", "inits", ["stream", "wseq"]], ["add", "def", "is_empty", ["stream", "wseq"]], ["add", "def", "join", ["stream", "wseq"]], ["add", "theorem", "join_append", ["stream", "wseq"]], ["add", "theorem", "join_congr", ["stream", "wseq"]], ["add", "theorem", "join_cons", ["stream", "wseq"]], ["add", "theorem", "join_join", ["stream", "wseq"]], ["add", "theorem", "join_map_ret", ["stream", "wseq"]], ["add", "theorem", "join_nil", ["stream", "wseq"]], ["add", "theorem", "join_ret", ["stream", "wseq"]], ["add", "theorem", "join_think", ["stream", "wseq"]], ["add", "def", "length", ["stream", "wseq"]], ["add", "theorem", "length_eq_map", ["stream", "wseq"]], ["add", "theorem", "equiv", ["stream", "wseq", "lift_rel"]], ["add", "theorem", "refl", ["stream", "wseq", "lift_rel"]], ["add", "theorem", "swap", ["stream", "wseq", "lift_rel"]], ["add", "theorem", "swap_lem", ["stream", "wseq", "lift_rel"]], ["add", "theorem", "symm", ["stream", "wseq", "lift_rel"]], ["add", "theorem", "trans", ["stream", "wseq", "lift_rel"]], ["add", "def", "lift_rel", ["stream", "wseq"]], ["add", "theorem", "lift_rel_append", ["stream", "wseq"]], ["add", "theorem", "lift_rel_bind", ["stream", "wseq"]], ["add", "theorem", "lift_rel_cons", ["stream", "wseq"]], ["add", "theorem", "lift_rel_destruct", ["stream", "wseq"]], ["add", "theorem", "lift_rel_destruct_iff", ["stream", "wseq"]], ["add", "theorem", "lift_rel_dropn_destruct", ["stream", "wseq"]], ["add", "theorem", "lift_rel_flatten", ["stream", "wseq"]], ["add", "theorem", "lem", ["stream", "wseq", "lift_rel_join"]], ["add", "theorem", "lift_rel_join", ["stream", "wseq"]], ["add", "theorem", "lift_rel_map", ["stream", "wseq"]], ["add", "theorem", "lift_rel_nil", ["stream", "wseq"]], ["add", "theorem", "imp", ["stream", "wseq", "lift_rel_o"]], ["add", "theorem", "imp_right", ["stream", "wseq", "lift_rel_o"]], ["add", "theorem", "swap", ["stream", "wseq", "lift_rel_o"]], ["add", "def", "lift_rel_o", ["stream", "wseq"]], ["add", "theorem", "lift_rel_think_left", ["stream", "wseq"]], ["add", "theorem", "lift_rel_think_right", ["stream", "wseq"]], ["add", "def", "map", ["stream", "wseq"]], ["add", "theorem", "map_append", ["stream", "wseq"]], ["add", "theorem", "map_comp", ["stream", "wseq"]], ["add", "theorem", "map_congr", ["stream", "wseq"]], ["add", "theorem", "map_cons", ["stream", "wseq"]], ["add", "theorem", "map_id", ["stream", "wseq"]], ["add", "theorem", "map_join", ["stream", "wseq"]], ["add", "theorem", "map_nil", ["stream", "wseq"]], ["add", "theorem", "map_ret", ["stream", "wseq"]], ["add", "theorem", "map_think", ["stream", "wseq"]], ["add", "theorem", "mem_append_left", ["stream", "wseq"]], ["add", "theorem", "mem_congr", ["stream", "wseq"]], ["add", "theorem", "mem_cons", ["stream", "wseq"]], ["add", "theorem", "mem_cons_iff", ["stream", "wseq"]], ["add", "theorem", "mem_cons_of_mem", ["stream", "wseq"]], ["add", "theorem", "mem_map", ["stream", "wseq"]], ["add", "theorem", "mem_of_mem_dropn", ["stream", "wseq"]], ["add", "theorem", "mem_of_mem_tail", ["stream", "wseq"]], ["add", "theorem", "mem_rec_on", ["stream", "wseq"]], ["add", "theorem", "mem_think", ["stream", "wseq"]], ["add", "def", "nil", ["stream", "wseq"]], ["add", "theorem", "nil_append", ["stream", "wseq"]], ["add", "theorem", "not_mem_nil", ["stream", "wseq"]], ["add", "def", "nth", ["stream", "wseq"]], ["add", "theorem", "nth_add", ["stream", "wseq"]], ["add", "theorem", "nth_congr", ["stream", "wseq"]], ["add", "theorem", "nth_mem", ["stream", "wseq"]], ["add", "theorem", "nth_of_seq", ["stream", "wseq"]], ["add", "theorem", "nth_tail", ["stream", "wseq"]], ["add", "theorem", "nth_terminates_le", ["stream", "wseq"]], ["add", "def", "of_list", ["stream", "wseq"]], ["add", "theorem", "of_list_cons", ["stream", "wseq"]], ["add", "theorem", "of_list_nil", ["stream", "wseq"]], ["add", "theorem", "of_mem_append", ["stream", "wseq"]], ["add", "def", "of_seq", ["stream", "wseq"]], ["add", "def", "of_stream", ["stream", "wseq"]], ["add", "theorem", "productive_congr", ["stream", "wseq"]], ["add", "theorem", "productive_iff", ["stream", "wseq"]], ["add", "def", "rec_on", ["stream", "wseq"]], ["add", "def", "remove_nth", ["stream", "wseq"]], ["add", "def", "ret", ["stream", "wseq"]], ["add", "theorem", "ret_bind", ["stream", "wseq"]], ["add", "def", "scanl", ["stream", "wseq"]], ["add", "theorem", "seq_destruct_cons", ["stream", "wseq"]], ["add", "theorem", "seq_destruct_nil", ["stream", "wseq"]], ["add", "theorem", "seq_destruct_think", ["stream", "wseq"]], ["add", "def", "split_at", ["stream", "wseq"]], ["add", "def", "aux", ["stream", "wseq", "tail"]], ["add", "def", "tail", ["stream", "wseq"]], ["add", "theorem", "tail_congr", ["stream", "wseq"]], ["add", "theorem", "tail_cons", ["stream", "wseq"]], ["add", "theorem", "tail_nil", ["stream", "wseq"]], ["add", "theorem", "tail_of_seq", ["stream", "wseq"]], ["add", "theorem", "tail_think", ["stream", "wseq"]], ["add", "def", "take", ["stream", "wseq"]], ["add", "def", "think", ["stream", "wseq"]], ["add", "theorem", "think_append", ["stream", "wseq"]], ["add", "theorem", "think_congr", ["stream", "wseq"]], ["add", "theorem", "think_equiv", ["stream", "wseq"]], ["add", "theorem", "to_list'_cons", ["stream", "wseq"]], ["add", "theorem", "to_list'_map", ["stream", "wseq"]], ["add", "theorem", "to_list'_nil", ["stream", "wseq"]], ["add", "theorem", "to_list'_think", ["stream", "wseq"]], ["add", "def", "to_list", ["stream", "wseq"]], ["add", "theorem", "to_list_cons", ["stream", "wseq"]], ["add", "theorem", "to_list_nil", ["stream", "wseq"]], ["add", "theorem", "to_list_of_list", ["stream", "wseq"]], ["add", "def", "to_seq", ["stream", "wseq"]], ["add", "theorem", "to_seq_of_seq", ["stream", "wseq"]], ["add", "def", "union", ["stream", "wseq"]], ["add", "def", "update_nth", ["stream", "wseq"]], ["add", "def", "zip", ["stream", "wseq"]], ["add", "def", "zip_with", ["stream", "wseq"]], ["add", "def", "wseq", ["stream"]], ["del", "def", "all", ["wseq"]], ["del", "def", "any", ["wseq"]], ["del", "def", "append", ["wseq"]], ["del", "theorem", "append_assoc", ["wseq"]], ["del", "theorem", "append_nil", ["wseq"]], ["del", "def", "bind", ["wseq"]], ["del", "theorem", "bind_assoc", ["wseq"]], ["del", "theorem", "bind_congr", ["wseq"]], ["del", "theorem", "bind_ret", ["wseq"]], ["del", "theorem", "imp", ["wseq", "bisim_o"]], ["del", "def", "bisim_o", ["wseq"]], ["del", "def", "collect", ["wseq"]], ["del", "def", "compute", ["wseq"]], ["del", "def", "cons", ["wseq"]], ["del", "theorem", "cons_append", ["wseq"]], ["del", "theorem", "cons_congr", ["wseq"]], ["del", "def", "destruct", ["wseq"]], ["del", "def", "aux", ["wseq", "destruct_append"]], ["del", "theorem", "destruct_append", ["wseq"]], ["del", "theorem", "destruct_congr", ["wseq"]], ["del", "theorem", "destruct_congr_iff", ["wseq"]], ["del", "theorem", "destruct_cons", ["wseq"]], ["del", "theorem", "destruct_dropn", ["wseq"]], ["del", "theorem", "destruct_flatten", ["wseq"]], ["del", "def", "aux", ["wseq", "destruct_join"]], ["del", "theorem", "destruct_join", ["wseq"]], ["del", "theorem", "destruct_map", ["wseq"]], ["del", "theorem", "destruct_nil", ["wseq"]], ["del", "theorem", "destruct_of_seq", ["wseq"]], ["del", "theorem", "destruct_some_of_destruct_tail_some", ["wseq"]], ["del", "theorem", "destruct_tail", ["wseq"]], ["del", "theorem", "destruct_terminates_of_nth_terminates", ["wseq"]], ["del", "theorem", "destruct_think", ["wseq"]], ["del", "def", "aux", ["wseq", "drop"]], ["del", "theorem", "aux_none", ["wseq", "drop"]], ["del", "def", "drop", ["wseq"]], ["del", "theorem", "dropn_add", ["wseq"]], ["del", "theorem", "dropn_congr", ["wseq"]], ["del", "theorem", "dropn_cons", ["wseq"]], ["del", "theorem", "dropn_nil", ["wseq"]], ["del", "theorem", "dropn_of_seq", ["wseq"]], ["del", "theorem", "dropn_tail", ["wseq"]], ["del", "theorem", "dropn_think", ["wseq"]], ["del", "theorem", "eq_or_mem_iff_mem", ["wseq"]], ["del", "theorem", "equivalence", ["wseq", "equiv"]], ["del", "theorem", "ext", ["wseq", "equiv"]], ["del", "theorem", "refl", ["wseq", "equiv"]], ["del", "theorem", "symm", ["wseq", "equiv"]], ["del", "theorem", "trans", ["wseq", "equiv"]], ["del", "def", "equiv", ["wseq"]], ["del", "theorem", "exists_dropn_of_mem", ["wseq"]], ["del", "theorem", "exists_nth_of_mem", ["wseq"]], ["del", "theorem", "exists_of_lift_rel_left", ["wseq"]], ["del", "theorem", "exists_of_lift_rel_right", ["wseq"]], ["del", "theorem", "exists_of_mem_bind", ["wseq"]], ["del", "theorem", "exists_of_mem_join", ["wseq"]], ["del", "theorem", "exists_of_mem_map", ["wseq"]], ["del", "def", "filter", ["wseq"]], ["del", "def", "filter_map", ["wseq"]], ["del", "def", "find", ["wseq"]], ["del", "def", "find_index", ["wseq"]], ["del", "def", "find_indexes", ["wseq"]], ["del", "def", "flatten", ["wseq"]], ["del", "theorem", "flatten_congr", ["wseq"]], ["del", "theorem", "flatten_equiv", ["wseq"]], ["del", "theorem", "flatten_ret", ["wseq"]], ["del", "theorem", "flatten_think", ["wseq"]], ["del", "def", "get", ["wseq"]], ["del", "def", "head", ["wseq"]], ["del", "theorem", "head_congr", ["wseq"]], ["del", "theorem", "head_cons", ["wseq"]], ["del", "theorem", "head_nil", ["wseq"]], ["del", "theorem", "head_of_seq", ["wseq"]], ["del", "theorem", "head_some_of_head_tail_some", ["wseq"]], ["del", "theorem", "head_some_of_nth_some", ["wseq"]], ["del", "theorem", "head_terminates_iff", ["wseq"]], ["del", "theorem", "head_terminates_of_head_tail_terminates", ["wseq"]], ["del", "theorem", "head_terminates_of_mem", ["wseq"]], ["del", "theorem", "head_terminates_of_nth_terminates", ["wseq"]], ["del", "theorem", "head_think", ["wseq"]], ["del", "def", "index_of", ["wseq"]], ["del", "def", "indexes_of", ["wseq"]], ["del", "def", "inits", ["wseq"]], ["del", "def", "is_empty", ["wseq"]], ["del", "def", "join", ["wseq"]], ["del", "theorem", "join_append", ["wseq"]], ["del", "theorem", "join_congr", ["wseq"]], ["del", "theorem", "join_cons", ["wseq"]], ["del", "theorem", "join_join", ["wseq"]], ["del", "theorem", "join_map_ret", ["wseq"]], ["del", "theorem", "join_nil", ["wseq"]], ["del", "theorem", "join_ret", ["wseq"]], ["del", "theorem", "join_think", ["wseq"]], ["del", "def", "length", ["wseq"]], ["del", "theorem", "length_eq_map", ["wseq"]], ["del", "theorem", "equiv", ["wseq", "lift_rel"]], ["del", "theorem", "refl", ["wseq", "lift_rel"]], ["del", "theorem", "swap", ["wseq", "lift_rel"]], ["del", "theorem", "swap_lem", ["wseq", "lift_rel"]], ["del", "theorem", "symm", ["wseq", "lift_rel"]], ["del", "theorem", "trans", ["wseq", "lift_rel"]], ["del", "def", "lift_rel", ["wseq"]], ["del", "theorem", "lift_rel_append", ["wseq"]], ["del", "theorem", "lift_rel_bind", ["wseq"]], ["del", "theorem", "lift_rel_cons", ["wseq"]], ["del", "theorem", "lift_rel_destruct", ["wseq"]], ["del", "theorem", "lift_rel_destruct_iff", ["wseq"]], ["del", "theorem", "lift_rel_dropn_destruct", ["wseq"]], ["del", "theorem", "lift_rel_flatten", ["wseq"]], ["del", "theorem", "lem", ["wseq", "lift_rel_join"]], ["del", "theorem", "lift_rel_join", ["wseq"]], ["del", "theorem", "lift_rel_map", ["wseq"]], ["del", "theorem", "lift_rel_nil", ["wseq"]], ["del", "theorem", "imp", ["wseq", "lift_rel_o"]], ["del", "theorem", "imp_right", ["wseq", "lift_rel_o"]], ["del", "theorem", "swap", ["wseq", "lift_rel_o"]], ["del", "def", "lift_rel_o", ["wseq"]], ["del", "theorem", "lift_rel_think_left", ["wseq"]], ["del", "theorem", "lift_rel_think_right", ["wseq"]], ["del", "def", "map", ["wseq"]], ["del", "theorem", "map_append", ["wseq"]], ["del", "theorem", "map_comp", ["wseq"]], ["del", "theorem", "map_congr", ["wseq"]], ["del", "theorem", "map_cons", ["wseq"]], ["del", "theorem", "map_id", ["wseq"]], ["del", "theorem", "map_join", ["wseq"]], ["del", "theorem", "map_nil", ["wseq"]], ["del", "theorem", "map_ret", ["wseq"]], ["del", "theorem", "map_think", ["wseq"]], ["del", "theorem", "mem_append_left", ["wseq"]], ["del", "theorem", "mem_congr", ["wseq"]], ["del", "theorem", "mem_cons", ["wseq"]], ["del", "theorem", "mem_cons_iff", ["wseq"]], ["del", "theorem", "mem_cons_of_mem", ["wseq"]], ["del", "theorem", "mem_map", ["wseq"]], ["del", "theorem", "mem_of_mem_dropn", ["wseq"]], ["del", "theorem", "mem_of_mem_tail", ["wseq"]], ["del", "theorem", "mem_rec_on", ["wseq"]], ["del", "theorem", "mem_think", ["wseq"]], ["del", "def", "nil", ["wseq"]], ["del", "theorem", "nil_append", ["wseq"]], ["del", "theorem", "not_mem_nil", ["wseq"]], ["del", "def", "nth", ["wseq"]], ["del", "theorem", "nth_add", ["wseq"]], ["del", "theorem", "nth_congr", ["wseq"]], ["del", "theorem", "nth_mem", ["wseq"]], ["del", "theorem", "nth_of_seq", ["wseq"]], ["del", "theorem", "nth_tail", ["wseq"]], ["del", "theorem", "nth_terminates_le", ["wseq"]], ["del", "def", "of_list", ["wseq"]], ["del", "theorem", "of_list_cons", ["wseq"]], ["del", "theorem", "of_list_nil", ["wseq"]], ["del", "theorem", "of_mem_append", ["wseq"]], ["del", "def", "of_seq", ["wseq"]], ["del", "def", "of_stream", ["wseq"]], ["del", "theorem", "productive_congr", ["wseq"]], ["del", "theorem", "productive_iff", ["wseq"]], ["del", "def", "rec_on", ["wseq"]], ["del", "def", "remove_nth", ["wseq"]], ["del", "def", "ret", ["wseq"]], ["del", "theorem", "ret_bind", ["wseq"]], ["del", "def", "scanl", ["wseq"]], ["del", "theorem", "seq_destruct_cons", ["wseq"]], ["del", "theorem", "seq_destruct_nil", ["wseq"]], ["del", "theorem", "seq_destruct_think", ["wseq"]], ["del", "def", "split_at", ["wseq"]], ["del", "def", "aux", ["wseq", "tail"]], ["del", "def", "tail", ["wseq"]], ["del", "theorem", "tail_congr", ["wseq"]], ["del", "theorem", "tail_cons", ["wseq"]], ["del", "theorem", "tail_nil", ["wseq"]], ["del", "theorem", "tail_of_seq", ["wseq"]], ["del", "theorem", "tail_think", ["wseq"]], ["del", "def", "take", ["wseq"]], ["del", "def", "think", ["wseq"]], ["del", "theorem", "think_append", ["wseq"]], ["del", "theorem", "think_congr", ["wseq"]], ["del", "theorem", "think_equiv", ["wseq"]], ["del", "theorem", "to_list'_cons", ["wseq"]], ["del", "theorem", "to_list'_map", ["wseq"]], ["del", "theorem", "to_list'_nil", ["wseq"]], ["del", "theorem", "to_list'_think", ["wseq"]], ["del", "def", "to_list", ["wseq"]], ["del", "theorem", "to_list_cons", ["wseq"]], ["del", "theorem", "to_list_nil", ["wseq"]], ["del", "theorem", "to_list_of_list", ["wseq"]], ["del", "def", "to_seq", ["wseq"]], ["del", "theorem", "to_seq_of_seq", ["wseq"]], ["del", "def", "union", ["wseq"]], ["del", "def", "update_nth", ["wseq"]], ["del", "def", "zip", ["wseq"]], ["del", "def", "zip_with", ["wseq"]], ["del", "def", "wseq", []]]}]}, {"timestamp": 1680058015, "sha": "95127066", "message": "chore(scripts/list-attributes.sh): script to track attributes semireducible/irreducible (#18165)\nThis script generates the data for #18164", "changes": [{"oldPath": null, "newPath": "scripts/list-attributes.sh", "changes": []}]}, {"timestamp": 1680047120, "sha": "3e175454", "message": "feat(order/upper_lower/locally_finite): Upper closure preserves finiteness (#18678)\n`locally_finite_order` and `upper_set` don't naturally impot one another, so I'm dumping those two lemmas in a new file.", "changes": [{"oldPath": null, "newPath": "src/order/upper_lower/locally_finite.lean", "changes": []}]}, {"timestamp": 1680047118, "sha": "6876fa15", "message": "refactor(category_theory/shift): improve automation (#18670)", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["add", "def", "shift_zero", ["category_theory", "differential_object"]], ["del", "def", "shift_ε", ["category_theory", "differential_object"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": null, "changes": [["del", "def", "add_neg_equiv", ["category_theory"]], ["del", "theorem", "eq_to_hom_comp_shift_add_inv₁", ["category_theory"]], ["del", "theorem", "eq_to_hom_comp_shift_add_inv₁₂", ["category_theory"]], ["del", "theorem", "eq_to_hom_comp_shift_add_inv₂", ["category_theory"]], ["del", "theorem", "eq_to_hom_μ_app", ["category_theory"]], ["del", "theorem", "shift_obj_obj", ["category_theory", "has_shift"]], ["del", "def", "has_shift_mk", ["category_theory"]], ["del", "def", "has_shift_of_fully_faithful", ["category_theory"]], ["del", "def", "has_shift_of_fully_faithful_comm", ["category_theory"]], ["del", "def", "shift_add", ["category_theory"]], ["del", "theorem", "shift_add_hom_comp_eq_to_hom₁", ["category_theory"]], ["del", "theorem", "shift_add_hom_comp_eq_to_hom₁₂", ["category_theory"]], ["del", "theorem", "shift_add_hom_comp_eq_to_hom₂", ["category_theory"]], ["del", "theorem", "shift_comm'", ["category_theory"]], ["del", "def", "shift_comm", ["category_theory"]], ["del", "theorem", "shift_comm_hom_comp", ["category_theory"]], ["del", "theorem", "shift_comm_symm", ["category_theory"]], ["del", "def", "shift_equiv", ["category_theory"]], ["del", "theorem", "shift_equiv_triangle", ["category_theory"]], ["del", "def", "shift_functor", ["category_theory"]], ["del", "def", "shift_functor_add", ["category_theory"]], ["del", "def", "shift_functor_comp_shift_functor_neg", ["category_theory"]], ["del", "theorem", "shift_functor_inv", ["category_theory"]], ["del", "def", "shift_functor_neg_comp_shift_functor", ["category_theory"]], ["del", "def", "shift_functor_zero", ["category_theory"]], ["del", "structure", "shift_mk_core", ["category_theory"]], ["del", "def", "shift_monoidal_functor", ["category_theory"]], ["del", "theorem", "shift_neg_shift'", ["category_theory"]], ["del", "def", "shift_neg_shift", ["category_theory"]], ["del", "theorem", "shift_shift'", ["category_theory"]], ["del", "theorem", "shift_shift_neg'", ["category_theory"]], ["del", "def", "shift_shift_neg", ["category_theory"]], ["del", "theorem", "shift_shift_neg_hom_shift", ["category_theory"]], ["del", "theorem", "shift_shift_neg_inv_shift", ["category_theory"]], ["del", "theorem", "shift_shift_neg_shift_eq", ["category_theory"]], ["del", "theorem", "shift_zero'", ["category_theory"]], ["del", "def", "shift_zero", ["category_theory"]], ["del", "theorem", "shift_zero_eq_zero", ["category_theory"]], ["del", "theorem", "μ_inv_app_eq_to_hom", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/shift/basic.lean", "changes": [["add", "theorem", "shift_obj_obj", ["category_theory", "has_shift"]], ["add", "def", "has_shift_mk", ["category_theory"]], ["add", "def", "has_shift_of_fully_faithful", ["category_theory"]], ["add", "def", "has_shift_of_fully_faithful_add", ["category_theory"]], ["add", "def", "has_shift_of_fully_faithful_zero", ["category_theory"]], ["add", "theorem", "map_has_shift_of_fully_faithful_add_hom_app", ["category_theory"]], ["add", "theorem", "map_has_shift_of_fully_faithful_add_inv_app", ["category_theory"]], ["add", "theorem", "map_has_shift_of_fully_faithful_zero_hom_app", ["category_theory"]], ["add", "theorem", "map_has_shift_of_fully_faithful_zero_inv_app", ["category_theory"]], ["add", "def", "shift_add", ["category_theory"]], ["add", "theorem", "shift_comm'", ["category_theory"]], ["add", "def", "shift_comm", ["category_theory"]], ["add", "theorem", "shift_comm_hom_comp", ["category_theory"]], ["add", "theorem", "shift_comm_symm", ["category_theory"]], ["add", "def", "shift_equiv'", ["category_theory"]], ["add", "def", "shift_equiv", ["category_theory"]], ["add", "theorem", "shift_equiv_triangle", ["category_theory"]], ["add", "def", "shift_functor", ["category_theory"]], ["add", "def", "shift_functor_add'", ["category_theory"]], ["add", "theorem", "shift_functor_add'_add_zero", ["category_theory"]], ["add", "theorem", "shift_functor_add'_add_zero_hom_app", ["category_theory"]], ["add", "theorem", "shift_functor_add'_add_zero_inv_app", ["category_theory"]], ["add", "theorem", "shift_functor_add'_assoc", ["category_theory"]], ["add", "theorem", "shift_functor_add'_assoc_hom_app", ["category_theory"]], ["add", "theorem", "shift_functor_add'_assoc_inv_app", ["category_theory"]], ["add", "theorem", "shift_functor_add'_eq_shift_functor_add", ["category_theory"]], ["add", "theorem", "shift_functor_add'_zero_add", ["category_theory"]], ["add", "theorem", "shift_functor_add'_zero_add_hom_app", ["category_theory"]], ["add", "theorem", "shift_functor_add'_zero_add_inv_app", ["category_theory"]], ["add", "def", "shift_functor_add", ["category_theory"]], ["add", "theorem", "shift_functor_add_add_zero_hom_app", ["category_theory"]], ["add", "theorem", "shift_functor_add_add_zero_inv_app", ["category_theory"]], ["add", "theorem", "shift_functor_add_assoc", ["category_theory"]], ["add", "theorem", "shift_functor_add_assoc_hom_app", ["category_theory"]], ["add", "theorem", "shift_functor_add_assoc_inv_app", ["category_theory"]], ["add", "theorem", "shift_functor_add_zero_add_hom_app", ["category_theory"]], ["add", "theorem", "shift_functor_add_zero_add_inv_app", ["category_theory"]], ["add", "def", "shift_functor_comm", ["category_theory"]], ["add", "theorem", "shift_functor_comm_eq", ["category_theory"]], ["add", "theorem", "shift_functor_comm_hom_app_comp_shift_shift_functor_add_hom_app", ["category_theory"]], ["add", "theorem", "shift_functor_comm_symm", ["category_theory"]], ["add", "def", "shift_functor_comp_iso_id", ["category_theory"]], ["add", "theorem", "shift_functor_inv", ["category_theory"]], ["add", "def", "shift_functor_zero", ["category_theory"]], ["add", "theorem", "shift_functor_zero_hom_app_shift", ["category_theory"]], ["add", "theorem", "shift_functor_zero_inv_app_shift", ["category_theory"]], ["add", "theorem", "add_zero_inv_app", ["category_theory", "shift_mk_core"]], ["add", "theorem", "assoc_inv_app", ["category_theory", "shift_mk_core"]], ["add", "theorem", "shift_functor_add_eq", ["category_theory", "shift_mk_core"]], ["add", "theorem", "shift_functor_eq", ["category_theory", "shift_mk_core"]], ["add", "theorem", "shift_functor_zero_eq", ["category_theory", "shift_mk_core"]], ["add", "theorem", "zero_add_inv_app", ["category_theory", "shift_mk_core"]], ["add", "structure", "shift_mk_core", ["category_theory"]], ["add", "def", "shift_monoidal_functor", ["category_theory"]], ["add", "theorem", "shift_neg_shift'", ["category_theory"]], ["add", "def", "shift_neg_shift", ["category_theory"]], ["add", "theorem", "shift_shift'", ["category_theory"]], ["add", "theorem", "shift_shift_functor_comp_iso_id_add_neg_self_hom_app", ["category_theory"]], ["add", "theorem", "shift_shift_functor_comp_iso_id_add_neg_self_inv_app", ["category_theory"]], ["add", "theorem", "shift_shift_functor_comp_iso_id_hom_app", ["category_theory"]], ["add", "theorem", "shift_shift_functor_comp_iso_id_inv_app", ["category_theory"]], ["add", "theorem", "shift_shift_functor_comp_iso_id_neg_add_self_hom_app", ["category_theory"]], ["add", "theorem", "shift_shift_functor_comp_iso_id_neg_add_self_inv_app", ["category_theory"]], ["add", "theorem", "shift_shift_neg'", ["category_theory"]], ["add", "def", "shift_shift_neg", ["category_theory"]], ["add", "theorem", "shift_zero'", ["category_theory"]], ["add", "def", "shift_zero", ["category_theory"]], ["add", "theorem", "shift_zero_eq_zero", ["category_theory"]]]}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": [["add", "def", "hom_mk", ["category_theory", "pretriangulated", "triangle"]], ["add", "def", "iso_mk", ["category_theory", "pretriangulated", "triangle"]]]}, {"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": [["del", "theorem", "map_distinguished", ["category_theory", "pretriangulated", "triangulated_functor"]], ["del", "def", "map_triangle", ["category_theory", "pretriangulated", "triangulated_functor"]], ["del", "structure", "triangulated_functor", ["category_theory", "pretriangulated"]], ["del", "def", "id", ["category_theory", "pretriangulated", "triangulated_functor_struct"]], ["del", "def", "map_triangle", ["category_theory", "pretriangulated", "triangulated_functor_struct"]], ["del", "structure", "triangulated_functor_struct", ["category_theory", "pretriangulated"]]]}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": [["del", "def", "from_inv_rotate_rotate", ["category_theory", "pretriangulated"]], ["del", "def", "from_rotate_inv_rotate", ["category_theory", "pretriangulated"]], ["del", "def", "inv_rot_comp_rot_hom", ["category_theory", "pretriangulated"]], ["del", "def", "inv_rot_comp_rot_inv", ["category_theory", "pretriangulated"]], ["del", "def", "rot_comp_inv_rot_hom", ["category_theory", "pretriangulated"]], ["del", "def", "rot_comp_inv_rot_inv", ["category_theory", "pretriangulated"]], ["del", "def", "to_inv_rotate_rotate", ["category_theory", "pretriangulated"]], ["del", "def", "to_rotate_inv_rotate", ["category_theory", "pretriangulated"]], ["del", "def", "inv_rotate", ["category_theory", "pretriangulated", "triangle_morphism"]], ["del", "def", "rotate", ["category_theory", "pretriangulated", "triangle_morphism"]]]}]}, {"timestamp": 1680047116, "sha": "e8ac6315", "message": "chore(order/category): Rename categories (#18657)\nThe Lean 4 naming convention forces us to rename the categories of orders. Instead of blankly appending `Cat` to the names, we proactively shorten the names. Incidentally, this gets them closer to the way they're referred in the literature.\n* `Preorder` → `Preord` (the literature name is `Ord`, but Lean 4 already takes it)\n* `PartialOrder` → `PartOrd`\n* `BoundedOrder` → `BddOrd`\n* `FinPartialOrder` → `FinPartOrd`\n* `SemilatticeSup` → `SemilatSup`\n* `SemilatticeInf` → `SemilatInf`\n* `Lattice` → `Lat`\n* `DistribLattice` → `DistLat`\n* `BoundedLattice` → `BddLat`\n* `BoundedDistribLattice` → `BddDistLat`\n* `LinearOrder` → `LinOrd`\n* `CompleteLattice` → `CompleteLat`\n* `Frame` → `Frm` (the corresponding class is `Order.Frame`, but better be safe)", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/category/BddDistLat.lean", "changes": [["add", "theorem", "coe_of", ["BddDistLat"]], ["add", "theorem", "coe_to_BddLat", ["BddDistLat"]], ["add", "def", "dual", ["BddDistLat"]], ["add", "def", "dual_equiv", ["BddDistLat"]], ["add", "theorem", "forget_BddLat_Lat_eq_forget_DistLat_Lat", ["BddDistLat"]], ["add", "def", "mk", ["BddDistLat", "iso"]], ["add", "def", "of", ["BddDistLat"]], ["add", "def", "to_BddLat", ["BddDistLat"]], ["add", "structure", "BddDistLat", []], ["add", "theorem", "BddDistLat_dual_comp_forget_to_DistLat", []]]}, {"oldPath": null, "newPath": "src/order/category/BddLat.lean", "changes": [["add", "theorem", "coe_forget_to_BddOrd", ["BddLat"]], ["add", "theorem", "coe_forget_to_Lat", ["BddLat"]], ["add", "theorem", "coe_forget_to_SemilatInf", ["BddLat"]], ["add", "theorem", "coe_forget_to_SemilatSup", ["BddLat"]], ["add", "theorem", "coe_of", ["BddLat"]], ["add", "def", "dual", ["BddLat"]], ["add", "def", "dual_equiv", ["BddLat"]], ["add", "theorem", "forget_Lat_PartOrd_eq_forget_BddOrd_PartOrd", ["BddLat"]], ["add", "theorem", "forget_SemilatInf_PartOrd_eq_forget_BddOrd_PartOrd", ["BddLat"]], ["add", "theorem", "forget_SemilatSup_PartOrd_eq_forget_BddOrd_PartOrd", ["BddLat"]], ["add", "def", "mk", ["BddLat", "iso"]], ["add", "def", "of", ["BddLat"]], ["add", "structure", "BddLat", []], ["add", "theorem", "BddLat_dual_comp_forget_to_BddOrd", []], ["add", "theorem", "BddLat_dual_comp_forget_to_Lat", []], ["add", "theorem", "BddLat_dual_comp_forget_to_SemilatInf", []], ["add", "theorem", "BddLat_dual_comp_forget_to_SemilatSup", []]]}, {"oldPath": null, "newPath": "src/order/category/BddOrd.lean", "changes": [["add", "theorem", "coe_of", ["BddOrd"]], ["add", "def", "dual", ["BddOrd"]], ["add", "def", "dual_equiv", ["BddOrd"]], ["add", "def", "mk", ["BddOrd", "iso"]], ["add", "def", "of", ["BddOrd"]], ["add", "structure", "BddOrd", []], ["add", "theorem", "BddOrd_dual_comp_forget_to_Bipointed", []], ["add", "theorem", "BddOrd_dual_comp_forget_to_PartOrd", []]]}, {"oldPath": "src/order/category/BoolAlg.lean", "newPath": "src/order/category/BoolAlg.lean", "changes": [["add", "theorem", "coe_to_BddDistLat", ["BoolAlg"]], ["del", "theorem", "coe_to_BoundedDistribLattice", ["BoolAlg"]], ["add", "def", "to_BddDistLat", ["BoolAlg"]], ["del", "def", "to_BoundedDistribLattice", ["BoolAlg"]], ["add", "theorem", "BoolAlg_dual_comp_forget_to_BddDistLat", []], ["del", "theorem", "BoolAlg_dual_comp_forget_to_BoundedDistribLattice", []]]}, {"oldPath": "src/order/category/BoundedDistribLattice.lean", "newPath": null, "changes": [["del", "theorem", "coe_of", ["BoundedDistribLattice"]], ["del", "theorem", "coe_to_BoundedLattice", ["BoundedDistribLattice"]], ["del", "def", "dual", ["BoundedDistribLattice"]], ["del", "def", "dual_equiv", ["BoundedDistribLattice"]], ["del", "theorem", "forget_BoundedLattice_Lattice_eq_forget_DistribLattice_Lattice", ["BoundedDistribLattice"]], ["del", "def", "mk", ["BoundedDistribLattice", "iso"]], ["del", "def", "of", ["BoundedDistribLattice"]], ["del", "def", "to_BoundedLattice", ["BoundedDistribLattice"]], ["del", "structure", "BoundedDistribLattice", []], ["del", "theorem", "BoundedDistribLattice_dual_comp_forget_to_DistribLattice", []]]}, {"oldPath": "src/order/category/BoundedLattice.lean", "newPath": null, "changes": [["del", "theorem", "coe_forget_to_BoundedOrder", ["BoundedLattice"]], ["del", "theorem", "coe_forget_to_Lattice", ["BoundedLattice"]], ["del", "theorem", "coe_forget_to_SemilatticeInf", ["BoundedLattice"]], ["del", "theorem", "coe_forget_to_SemilatticeSup", ["BoundedLattice"]], ["del", "theorem", "coe_of", ["BoundedLattice"]], ["del", "def", "dual", ["BoundedLattice"]], ["del", "def", "dual_equiv", ["BoundedLattice"]], ["del", "theorem", "forget_Lattice_PartialOrder_eq_forget_BoundedOrder_PartialOrder", ["BoundedLattice"]], ["del", "theorem", "forget_SemilatticeInf_PartialOrder_eq_forget_BoundedOrder_PartialOrder", ["BoundedLattice"]], ["del", "theorem", "forget_SemilatticeSup_PartialOrder_eq_forget_BoundedOrder_PartialOrder", ["BoundedLattice"]], ["del", "def", "mk", ["BoundedLattice", "iso"]], ["del", "def", "of", ["BoundedLattice"]], ["del", "structure", "BoundedLattice", []], ["del", "theorem", "BoundedLattice_dual_comp_forget_to_BoundedOrder", []], ["del", "theorem", "BoundedLattice_dual_comp_forget_to_Lattice", []], ["del", "theorem", "BoundedLattice_dual_comp_forget_to_SemilatticeInf", []], ["del", "theorem", "BoundedLattice_dual_comp_forget_to_SemilatticeSup", []]]}, {"oldPath": "src/order/category/BoundedOrder.lean", "newPath": null, "changes": [["del", "theorem", "coe_of", ["BoundedOrder"]], ["del", "def", "dual", ["BoundedOrder"]], ["del", "def", "dual_equiv", ["BoundedOrder"]], ["del", "def", "mk", ["BoundedOrder", "iso"]], ["del", "def", "of", ["BoundedOrder"]], ["del", "structure", "BoundedOrder", []], ["del", "theorem", "BoundedOrder_dual_comp_forget_to_Bipointed", []], ["del", "theorem", "BoundedOrder_dual_comp_forget_to_PartialOrder", []]]}, {"oldPath": null, "newPath": "src/order/category/CompleteLat.lean", "changes": [["add", "theorem", "coe_of", ["CompleteLat"]], ["add", "def", "dual", ["CompleteLat"]], ["add", "def", "dual_equiv", ["CompleteLat"]], ["add", "def", "mk", ["CompleteLat", "iso"]], ["add", "def", "of", ["CompleteLat"]], ["add", "def", "CompleteLat", []], ["add", "theorem", "CompleteLat_dual_comp_forget_to_BddLat", []]]}, {"oldPath": "src/order/category/CompleteLattice.lean", "newPath": null, "changes": [["del", "theorem", "coe_of", ["CompleteLattice"]], ["del", "def", "dual", ["CompleteLattice"]], ["del", "def", "dual_equiv", ["CompleteLattice"]], ["del", "def", "mk", ["CompleteLattice", "iso"]], ["del", "def", "of", ["CompleteLattice"]], ["del", "def", "CompleteLattice", []], ["del", "theorem", "CompleteLattice_dual_comp_forget_to_BoundedLattice", []]]}, {"oldPath": null, "newPath": "src/order/category/DistLat.lean", "changes": [["add", "theorem", "coe_of", ["DistLat"]], ["add", "def", "dual", ["DistLat"]], ["add", "def", "dual_equiv", ["DistLat"]], ["add", "def", "mk", ["DistLat", "iso"]], ["add", "def", "of", ["DistLat"]], ["add", "def", "DistLat", []], ["add", "theorem", "DistLat_dual_comp_forget_to_Lat", []]]}, {"oldPath": "src/order/category/DistribLattice.lean", "newPath": null, "changes": [["del", "theorem", "coe_of", ["DistribLattice"]], ["del", "def", "dual", ["DistribLattice"]], ["del", "def", "dual_equiv", ["DistribLattice"]], ["del", "def", "mk", ["DistribLattice", "iso"]], ["del", "def", "of", ["DistribLattice"]], ["del", "def", "DistribLattice", []], ["del", "theorem", "DistribLattice_dual_comp_forget_to_Lattice", []]]}, {"oldPath": "src/order/category/FinBoolAlg.lean", "newPath": "src/order/category/FinBoolAlg.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/category/FinPartOrd.lean", "changes": [["add", "theorem", "coe_of", ["FinPartOrd"]], ["add", "theorem", "coe_to_PartOrd", ["FinPartOrd"]], ["add", "def", "dual", ["FinPartOrd"]], ["add", "def", "dual_equiv", ["FinPartOrd"]], ["add", "def", "mk", ["FinPartOrd", "iso"]], ["add", "def", "of", ["FinPartOrd"]], ["add", "structure", "FinPartOrd", []], ["add", "theorem", "FinPartOrd_dual_comp_forget_to_PartOrd", []]]}, {"oldPath": "src/order/category/FinPartialOrder.lean", "newPath": null, "changes": [["del", "theorem", "coe_of", ["FinPartialOrder"]], ["del", "theorem", "coe_to_PartialOrder", ["FinPartialOrder"]], ["del", "def", "dual", ["FinPartialOrder"]], ["del", "def", "dual_equiv", ["FinPartialOrder"]], ["del", "def", "mk", ["FinPartialOrder", "iso"]], ["del", "def", "of", ["FinPartialOrder"]], ["del", "structure", "FinPartialOrder", []], ["del", "theorem", "FinPartialOrder_dual_comp_forget_to_PartialOrder", []]]}, {"oldPath": "src/order/category/Frame.lean", "newPath": "src/order/category/Frm.lean", "changes": [["del", "theorem", "coe_of", ["Frame"]], ["del", "def", "hom", ["Frame"]], ["del", "def", "mk", ["Frame", "iso"]], ["del", "def", "of", ["Frame"]], ["del", "def", "Frame", []], ["add", "theorem", "coe_of", ["Frm"]], ["add", "def", "hom", ["Frm"]], ["add", "def", "mk", ["Frm", "iso"]], ["add", "def", "of", ["Frm"]], ["add", "def", "Frm", []], ["mod", "def", "Top_op_to_Frame", []]]}, {"oldPath": "src/order/category/HeytAlg.lean", "newPath": "src/order/category/HeytAlg.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/category/Lat.lean", "changes": [["add", "theorem", "coe_of", ["Lat"]], ["add", "def", "dual", ["Lat"]], ["add", "def", "dual_equiv", ["Lat"]], ["add", "def", "mk", ["Lat", "iso"]], ["add", "def", "of", ["Lat"]], ["add", "def", "Lat", []], ["add", "theorem", "Lat_dual_comp_forget_to_PartOrd", []]]}, {"oldPath": "src/order/category/Lattice.lean", "newPath": null, "changes": [["del", "theorem", "coe_of", ["Lattice"]], ["del", "def", "dual", ["Lattice"]], ["del", "def", "dual_equiv", ["Lattice"]], ["del", "def", "mk", ["Lattice", "iso"]], ["del", "def", "of", ["Lattice"]], ["del", "def", "Lattice", []], ["del", "theorem", "Lattice_dual_comp_forget_to_PartialOrder", []]]}, {"oldPath": null, "newPath": "src/order/category/LinOrd.lean", "changes": [["add", "theorem", "coe_of", ["LinOrd"]], ["add", "def", "dual", ["LinOrd"]], ["add", "def", "dual_equiv", ["LinOrd"]], ["add", "def", "mk", ["LinOrd", "iso"]], ["add", "def", "of", ["LinOrd"]], ["add", "def", "LinOrd", []], ["add", "theorem", "LinOrd_dual_comp_forget_to_Lat", []]]}, {"oldPath": "src/order/category/LinearOrder.lean", "newPath": null, "changes": [["del", "theorem", "coe_of", ["LinearOrder"]], ["del", "def", "dual", ["LinearOrder"]], ["del", "def", "dual_equiv", ["LinearOrder"]], ["del", "def", "mk", ["LinearOrder", "iso"]], ["del", "def", "of", ["LinearOrder"]], ["del", "def", "LinearOrder", []], ["del", "theorem", "LinearOrder_dual_comp_forget_to_Lattice", []]]}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": [["add", "theorem", "NonemptyFinLinOrd_dual_comp_forget_to_LinOrd", []], ["del", "theorem", "NonemptyFinLinOrd_dual_comp_forget_to_LinearOrder", []]]}, {"oldPath": "src/order/category/PartialOrder.lean", "newPath": "src/order/category/PartOrd.lean", "changes": [["add", "theorem", "coe_of", ["PartOrd"]], ["add", "def", "dual", ["PartOrd"]], ["add", "def", "dual_equiv", ["PartOrd"]], ["add", "def", "mk", ["PartOrd", "iso"]], ["add", "def", "of", ["PartOrd"]], ["add", "def", "PartOrd", []], ["add", "theorem", "PartOrd_dual_comp_forget_to_Preord", []], ["del", "theorem", "coe_of", ["PartialOrder"]], ["del", "def", "dual", ["PartialOrder"]], ["del", "def", "dual_equiv", ["PartialOrder"]], ["del", "def", "mk", ["PartialOrder", "iso"]], ["del", "def", "of", ["PartialOrder"]], ["del", "def", "PartialOrder", []], ["del", "theorem", "PartialOrder_dual_comp_forget_to_Preorder", []], ["add", "def", "Preord_to_PartOrd", []], ["add", "def", "Preord_to_PartOrd_comp_to_dual_iso_to_dual_comp_Preord_to_PartOrd", []], ["add", "def", "Preord_to_PartOrd_forget_adjunction", []], ["del", "def", "Preorder_to_PartialOrder", []], ["del", "def", "Preorder_to_PartialOrder_comp_to_dual_iso_to_dual_comp_Preorder_to_PartialOrder", []], ["del", "def", "Preorder_to_PartialOrder_forget_adjunction", []]]}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preord.lean", "changes": [["add", "theorem", "coe_of", ["Preord"]], ["add", "def", "dual", ["Preord"]], ["add", "def", "dual_equiv", ["Preord"]], ["add", "def", "mk", ["Preord", "iso"]], ["add", "def", "of", ["Preord"]], ["add", "def", "Preord", []], ["add", "def", "Preord_to_Cat", []], ["del", "theorem", "coe_of", ["Preorder"]], ["del", "def", "dual", ["Preorder"]], ["del", "def", "dual_equiv", ["Preorder"]], ["del", "def", "mk", ["Preorder", "iso"]], ["del", "def", "of", ["Preorder"]], ["del", "def", "Preorder", []], ["del", "def", "Preorder_to_Cat", []]]}, {"oldPath": null, "newPath": "src/order/category/Semilat.lean", "changes": [["add", "theorem", "coe_forget_to_PartOrd", ["SemilatInf"]], ["add", "theorem", "coe_of", ["SemilatInf"]], ["add", "def", "dual", ["SemilatInf"]], ["add", "def", "mk", ["SemilatInf", "iso"]], ["add", "def", "of", ["SemilatInf"]], ["add", "structure", "SemilatInf", []], ["add", "theorem", "SemilatInf_dual_comp_forget_to_PartOrd", []], ["add", "theorem", "coe_forget_to_PartOrd", ["SemilatSup"]], ["add", "theorem", "coe_of", ["SemilatSup"]], ["add", "def", "dual", ["SemilatSup"]], ["add", "def", "mk", ["SemilatSup", "iso"]], ["add", "def", "of", ["SemilatSup"]], ["add", "structure", "SemilatSup", []], ["add", "theorem", "SemilatSup_dual_comp_forget_to_PartOrd", []], ["add", "def", "SemilatSup_equiv_SemilatInf", []]]}, {"oldPath": "src/order/category/Semilattice.lean", "newPath": null, "changes": [["del", "theorem", "coe_forget_to_PartialOrder", ["SemilatticeInf"]], ["del", "theorem", "coe_of", ["SemilatticeInf"]], ["del", "def", "dual", ["SemilatticeInf"]], ["del", "def", "mk", ["SemilatticeInf", "iso"]], ["del", "def", "of", ["SemilatticeInf"]], ["del", "structure", "SemilatticeInf", []], ["del", "theorem", "SemilatticeInf_dual_comp_forget_to_PartialOrder", []], ["del", "theorem", "coe_forget_to_PartialOrder", ["SemilatticeSup"]], ["del", "theorem", "coe_of", ["SemilatticeSup"]], ["del", "def", "dual", ["SemilatticeSup"]], ["del", "def", "mk", ["SemilatticeSup", "iso"]], ["del", "def", "of", ["SemilatticeSup"]], ["del", "structure", "SemilatticeSup", []], ["del", "theorem", "SemilatticeSup_dual_comp_forget_to_PartialOrder", []], ["del", "def", "SemilatticeSup_equiv_SemilatticeInf", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": []}, {"oldPath": "src/topology/category/Locale.lean", "newPath": "src/topology/category/Locale.lean", "changes": [["mod", "def", "of", ["Locale"]], ["mod", "def", "Locale", []]]}]}, {"timestamp": 1680047114, "sha": "01876449", "message": "feat(geometry/manifold/vector_bundle/tangent): use the new tangent bundle definition in the library (#18601)\n* Stop using the old tangent bundle definition, and use the new one instead\n* This affects `geometry.manifold.mfderiv` and later files.\n* We remove `cont_mdiff_at_iff_target`, which doesn't hold anymore in the new setting. \n* We prove `cont_mdiff_at_total_space`, which characterizes `C^n` maps into a vector bundle. We need a bunch of basic lemmas to prove this. This makes it easy to prove `smooth_zero_section`.\n* We move some results from `cont_mdiff_mfderiv` to `manifold/vector_bundle/basic`", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "cont_mdiff_at_prod_iff", []], ["add", "theorem", "fst", ["cont_mdiff_within_at"]], ["add", "theorem", "snd", ["cont_mdiff_within_at"]], ["add", "theorem", "cont_mdiff_within_at_prod_iff", []]]}, {"oldPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "newPath": "src/geometry/manifold/cont_mdiff_mfderiv.lean", "changes": [["del", "theorem", "cont_mdiff_at_iff_target", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "cont_mdiff_at_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "cont_mdiff_on_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "cont_mdiff_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "cont_mdiff_within_at_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "smooth_at_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "smooth_const_section", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "smooth_iff_target", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "smooth_on_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "smooth_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "smooth_within_at_proj", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "cont_mdiff_at_proj", ["tangent_bundle"]], ["del", "theorem", "cont_mdiff_on_proj", ["tangent_bundle"]], ["del", "theorem", "cont_mdiff_proj", ["tangent_bundle"]], ["del", "theorem", "cont_mdiff_within_at_proj", ["tangent_bundle"]], ["del", "theorem", "smooth_at_proj", ["tangent_bundle"]], ["del", "theorem", "smooth_on_proj", ["tangent_bundle"]], ["del", "theorem", "smooth_proj", ["tangent_bundle"]], ["del", "theorem", "smooth_within_at_proj", ["tangent_bundle"]], ["del", "theorem", "smooth_zero_section", ["tangent_bundle"]], ["del", "def", "zero_section", ["tangent_bundle"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "theorem", "tangent_map_fst", []], ["del", "theorem", "tangent_map_tangent_bundle_proj", []], ["add", "theorem", "tangent_map_within_fst", []], ["del", "theorem", "tangent_map_within_tangent_bundle_proj", []]]}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": null, "changes": [["del", "theorem", "base_set", ["basic_smooth_vector_bundle_core"]], ["del", "def", "chart", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "chart_apply", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "chart_source", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "chart_target", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coe_chart_at_fst", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coe_chart_at_symm_fst", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coord_change_comp'", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coord_change_comp_eq_self'", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coord_change_comp_eq_self", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coord_change_continuous", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coord_change_self'", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "coord_change_smooth", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "mem_atlas_iff", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "mem_chart_source_iff", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "mem_chart_target_iff", ["basic_smooth_vector_bundle_core"]], ["del", "theorem", "target", ["basic_smooth_vector_bundle_core"]], ["del", "def", "to_vector_bundle_core", ["basic_smooth_vector_bundle_core"]], ["del", "structure", "basic_smooth_vector_bundle_core", []], ["del", "def", "proj", ["tangent_bundle"]], ["del", "theorem", "proj_apply", ["tangent_bundle"]], ["del", "def", "tangent_bundle", []], ["del", "def", "tangent_bundle_core", []], ["del", "theorem", "tangent_bundle_model_space_chart_at", []], ["del", "theorem", "tangent_bundle_model_space_coe_chart_at", []], ["del", "theorem", "tangent_bundle_model_space_coe_chart_at_symm", []], ["del", "def", "tangent_bundle_model_space_homeomorph", []], ["del", "theorem", "tangent_bundle_model_space_homeomorph_coe", []], ["del", "theorem", "tangent_bundle_model_space_homeomorph_coe_symm", []], ["del", "theorem", "tangent_bundle_proj_continuous", []], ["del", "theorem", "tangent_bundle_proj_open", []], ["del", "def", "tangent_space", []], ["del", "def", "trivial_basic_smooth_vector_bundle_core", []]]}, {"oldPath": "src/geometry/manifold/vector_bundle/basic.lean", "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": [["add", "theorem", "cont_mdiff_at_proj", ["bundle"]], ["add", "theorem", "cont_mdiff_at_total_space", ["bundle"]], ["add", "theorem", "cont_mdiff_on_proj", ["bundle"]], ["add", "theorem", "cont_mdiff_proj", ["bundle"]], ["add", "theorem", "cont_mdiff_within_at_proj", ["bundle"]], ["add", "theorem", "cont_mdiff_within_at_total_space", ["bundle"]], ["add", "theorem", "smooth_at_proj", ["bundle"]], ["add", "theorem", "smooth_on_proj", ["bundle"]], ["add", "theorem", "smooth_proj", ["bundle"]], ["add", "theorem", "smooth_within_at_proj", ["bundle"]], ["add", "theorem", "smooth_zero_section", ["bundle"]], ["add", "theorem", "charted_space_chart_at_symm_fst", ["fiber_bundle"]]]}, {"oldPath": "src/geometry/manifold/vector_bundle/tangent.lean", "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": [["add", "theorem", "cont_diff_on_fderiv_coord_change", []], ["del", "theorem", "cont_diff_on_fderiv_coord_change", ["hidden"]], ["del", "def", "tangent_bundle", ["hidden"]], ["del", "def", "tangent_bundle_core", ["hidden"]], ["del", "theorem", "tangent_bundle_core_coord_change_achart", ["hidden"]], ["del", "theorem", "tangent_bundle_model_space_chart_at", ["hidden"]], ["del", "theorem", "tangent_bundle_model_space_coe_chart_at", ["hidden"]], ["del", "theorem", "tangent_bundle_model_space_coe_chart_at_symm", ["hidden"]], ["del", "def", "tangent_bundle_model_space_homeomorph", ["hidden"]], ["del", "theorem", "tangent_bundle_model_space_homeomorph_coe", ["hidden"]], ["del", "theorem", "tangent_bundle_model_space_homeomorph_coe_symm", ["hidden"]], ["del", "def", "tangent_space", ["hidden"]], ["del", "theorem", "tangent_space_chart_at", ["hidden"]], ["del", "theorem", "tangent_space_chart_at_to_local_equiv", ["hidden"]], ["add", "theorem", "chart_at_to_local_equiv", ["tangent_bundle"]], ["add", "theorem", "coe_chart_at_fst", ["tangent_bundle"]], ["add", "theorem", "coe_chart_at_symm_fst", ["tangent_bundle"]], ["add", "theorem", "mem_chart_source_iff", ["tangent_bundle"]], ["add", "theorem", "mem_chart_target_iff", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_apply", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_base_set", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_eq_local_triv", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_fst", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_source", ["tangent_bundle"]], ["add", "theorem", "trivialization_at_target", ["tangent_bundle"]], ["add", "def", "tangent_bundle", []], ["add", "def", "tangent_bundle_core", []], ["add", "theorem", "tangent_bundle_core_coord_change_achart", []], ["add", "theorem", "tangent_bundle_model_space_chart_at", []], ["add", "theorem", "tangent_bundle_model_space_coe_chart_at", []], ["add", "theorem", "tangent_bundle_model_space_coe_chart_at_symm", []], ["add", "def", "tangent_bundle_model_space_homeomorph", []], ["add", "theorem", "tangent_bundle_model_space_homeomorph_coe", []], ["add", "theorem", "tangent_bundle_model_space_homeomorph_coe_symm", []], ["add", "def", "tangent_space", []]]}, {"oldPath": "src/topology/fiber_bundle/basic.lean", "newPath": "src/topology/fiber_bundle/basic.lean", "changes": [["add", "theorem", "continuous_at_total_space", ["fiber_bundle"]], ["add", "theorem", "continuous_within_at_total_space", ["fiber_bundle"]], ["add", "theorem", "mem_trivialization_at_proj_source", ["fiber_bundle"]], ["add", "theorem", "trivialization_at_proj_fst", ["fiber_bundle"]]]}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["add", "def", "zero_section", ["bundle"]], ["add", "theorem", "zero_section_proj", ["bundle"]], ["add", "theorem", "zero_section_snd", ["bundle"]]]}]}, {"timestamp": 1680042560, "sha": "b99e2d58", "message": "feat(combinatorics/simple_graph/connected): support of connected components (#18442)", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "connected_component_mk_eq_of_adj", ["simple_graph", "connected_component"]], ["add", "theorem", "connected_component_mk_mem", ["simple_graph", "connected_component"]], ["add", "def", "iso_equiv_supp", ["simple_graph", "connected_component"]], ["add", "theorem", "iso_image_comp_eq_map_iff_eq_comp", ["simple_graph", "connected_component"]], ["add", "theorem", "iso_inv_image_comp_eq_iff_eq_map", ["simple_graph", "connected_component"]], ["add", "theorem", "mem_supp_iff", ["simple_graph", "connected_component"]], ["add", "def", "supp", ["simple_graph", "connected_component"]], ["add", "theorem", "supp_inj", ["simple_graph", "connected_component"]], ["add", "theorem", "supp_injective", ["simple_graph", "connected_component"]], ["add", "def", "connected_component_equiv", ["simple_graph", "iso"]], ["add", "theorem", "connected_component_equiv_refl", ["simple_graph", "iso"]], ["add", "theorem", "connected_component_equiv_symm", ["simple_graph", "iso"]], ["add", "theorem", "connected_component_equiv_trans", ["simple_graph", "iso"]], ["add", "theorem", "reachable_iff", ["simple_graph", "iso"]], ["add", "theorem", "symm_apply_reachable", ["simple_graph", "iso"]]]}, {"oldPath": "src/combinatorics/simple_graph/ends/defs.lean", "newPath": "src/combinatorics/simple_graph/ends/defs.lean", "changes": []}]}, {"timestamp": 1680037345, "sha": "160f568d", "message": "feat(algebraic_topology/dold_kan): tools for compatibilities (#17922)\nTools are introduced in order to construct Dold-Kan equivalences with good definitional properties.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/compatibility.lean", "changes": [["add", "def", "equivalence", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence_functor", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence₀", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence₁", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence₁_counit_iso", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence₁_counit_iso_eq", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence₁_inverse", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence₁_unit_iso", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence₁_unit_iso_eq", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence₂", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence₂_counit_iso", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence₂_counit_iso_eq", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence₂_inverse", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "def", "equivalence₂_unit_iso", ["algebraic_topology", "dold_kan", "compatibility"]], ["add", "theorem", "equivalence₂_unit_iso_eq", ["algebraic_topology", "dold_kan", "compatibility"]]]}]}, {"timestamp": 1680002521, "sha": "0148d455", "message": "chore(category_theory/adjunction/opposites): backport removal of simp lemmas (#18680)\nSome of the lemmas generated by `simps` in https://github.com/leanprover-community/mathlib4/pull/2424 are bad according to the simpNF linter, and have proved hard to fix by hand. Fortunately, they are simply not needed. This PR verifies this by backporting their removal to mathlib3. Compiles locally, lets hope CI agrees.", "changes": [{"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": [["mod", "def", "adjoint_of_op_adjoint_op", ["category_theory", "adjunction"]], ["mod", "def", "op_adjoint_op_of_adjoint", ["category_theory", "adjunction"]]]}]}, {"timestamp": 1679988517, "sha": "ef5f2ce9", "message": "feat(set_theory/zfc/basic): simpler/more general `Class.ext` (#18306)\nI failed to notice `set.ext` was simpler and more general than my custom `Class.ext` lemma. As such, I've replaced it.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["mod", "theorem", "ext", ["Class"]], ["mod", "theorem", "ext_iff", ["Class"]]]}]}, {"timestamp": 1679967118, "sha": "b31173ee", "message": "chore(analysis/locally_convex/with_seminorms): remove unnecessary positivity assumption (#18659)\nIn the boundedness definition it is not necessary to assume that the bound is positive.", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": []}, {"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": []}]}, {"timestamp": 1679943544, "sha": "de87d505", "message": "feat(algebra/order/monoid/min_max): `a₁ * b₁ ≤ a₂ * b₂ → a₁ ≤ a₂ ∨ b₁ ≤ b₂` (#18667)\nComplete the API.", "changes": [{"oldPath": "src/algebra/order/monoid/canonical/defs.lean", "newPath": "src/algebra/order/monoid/canonical/defs.lean", "changes": [["add", "theorem", "le_mul_of_le_left", []], ["add", "theorem", "le_mul_of_le_right", []]]}, {"oldPath": "src/algebra/order/monoid/min_max.lean", "newPath": "src/algebra/order/monoid/min_max.lean", "changes": [["add", "theorem", "le_or_le_of_mul_le_mul", []], ["add", "theorem", "le_or_lt_of_mul_le_mul", []], ["add", "theorem", "lt_or_le_of_mul_le_mul", []], ["mod", "theorem", "lt_or_lt_of_mul_lt_mul", []], ["mod", "theorem", "mul_lt_mul_iff_of_le_of_le", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "gt_or_eq_of_le", []]]}]}, {"timestamp": 1679924721, "sha": "728baa2f", "message": "feat(archive/imo/imo2006_q5): IMO 2006 Q5 (#15613)\nSee module docstring for a thorough explanation of the proof.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2006_q5.lean", "changes": [["add", "theorem", "imo2006_q5'", []], ["add", "theorem", "imo2006_q5", []], ["add", "theorem", "add_eq_add_of_nat_abs_eq_of_nat_abs_eq", ["int"]], ["add", "theorem", "nat_abs_eq_of_chain_dvd", ["int"]], ["add", "theorem", "is_periodic_pt_eval_two", ["polynomial"]], ["add", "theorem", "iterate_comp_sub_X_ne", ["polynomial"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "sign_coe_add_one", ["int"]], ["add", "theorem", "sign_neg_succ_of_nat", ["int"]]]}, {"oldPath": "src/data/int/order/basic.lean", "newPath": "src/data/int/order/basic.lean", "changes": [["add", "theorem", "sign_add_eq_of_sign_eq", ["int"]]]}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "mem_map", ["cycle"]]]}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "nat_degree_iterate_comp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "iterate_comp_eval", ["polynomial"]], ["add", "theorem", "iterate_comp_eval₂", ["polynomial"]]]}]}, {"timestamp": 1679916017, "sha": "b8627dba", "message": "refactor(topology/algebra/module/strong_topology): split of local convexity (#18671)\nThe reason for this split is not only to reduce the import tree, but also to find a good home for proving `with_seminorm` versions of the local convexity results.", "changes": [{"oldPath": null, "newPath": "src/analysis/locally_convex/strong_topology.lean", "changes": [["add", "theorem", "locally_convex_space", ["continuous_linear_map", "strong_topology"]]]}, {"oldPath": "src/topology/algebra/module/strong_topology.lean", "newPath": "src/topology/algebra/module/strong_topology.lean", "changes": [["del", "theorem", "locally_convex_space", ["continuous_linear_map", "strong_topology"]]]}]}, {"timestamp": 1679912080, "sha": "9015c511", "message": "feat(ring_theory/complex): trace and norm of a complex number (#18658)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/complex.lean", "changes": [["add", "theorem", "left_mul_matrix_complex", ["algebra"]], ["add", "theorem", "norm_complex_apply", ["algebra"]], ["add", "theorem", "norm_complex_eq", ["algebra"]], ["add", "theorem", "trace_complex_apply", ["algebra"]]]}]}, {"timestamp": 1679912079, "sha": "b68f3403", "message": "feat(ring_theory/trace): trace of product rings (#18656)\nProbably not a very useful result, but thought I'd add it to get some intuition for `trace`.\nI didn't bother with `pi` because we don't have the analogous `linear_map.trace` statements either.", "changes": [{"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "trace_prod", ["algebra"]], ["add", "theorem", "trace_prod_apply", ["algebra"]]]}]}, {"timestamp": 1679906259, "sha": "f209a5a9", "message": "feat(data/zmod/basic): `zmod.val_min_abs` lemmas (#18119)", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "val_min_abs_nat_cast_of_half_lt", ["zmod"]], ["add", "theorem", "val_min_abs_nat_cast_of_le_half", ["zmod"]], ["add", "theorem", "val_min_nat_abs_nat_cast_eq_self", ["zmod"]]]}]}, {"timestamp": 1679884709, "sha": "3dec44d0", "message": "feat(representation_theory/group_cohomology_resolution): add isomorphism with nth inhomogeneous cochains (#18159)\nGiven a $k$-linear $G$-representation $A,$ this defines the $k$-linear isomorphism between functions $G^n \\to A$ and representation morphisms $Hom(k[G^{n + 1}], A),$ called `Rep.diagonal_hom_equiv`.", "changes": [{"oldPath": "src/category_theory/linear/basic.lean", "newPath": "src/category_theory/linear/basic.lean", "changes": [["add", "def", "hom_congr", ["category_theory", "linear"]], ["add", "theorem", "hom_congr_apply", ["category_theory", "linear"]], ["add", "theorem", "hom_congr_symm_apply", ["category_theory", "linear"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "llift_apply", ["finsupp"]], ["add", "theorem", "llift_symm_apply", ["finsupp"]]]}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": []}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": [["add", "theorem", "Action_ρ_eq_ρ", ["Rep"]], ["add", "theorem", "left_regular_hom_apply", ["Rep"]], ["add", "theorem", "left_regular_hom_equiv_symm_single", ["Rep"]], ["add", "theorem", "braiding_hom_apply", ["Rep", "monoidal_category"]], ["add", "theorem", "braiding_inv_apply", ["Rep", "monoidal_category"]], ["add", "theorem", "linear_hom_equiv_comm_hom", ["Rep", "monoidal_closed"]], ["add", "theorem", "linear_hom_equiv_comm_symm_hom", ["Rep", "monoidal_closed"]], ["add", "theorem", "linear_hom_equiv_hom", ["Rep", "monoidal_closed"]], ["add", "theorem", "linear_hom_equiv_symm_hom", ["Rep", "monoidal_closed"]], ["add", "theorem", "of_ρ_apply", ["Rep"]], ["add", "def", "Rep_of_tprod_iso", ["representation"]], ["add", "theorem", "Rep_of_tprod_iso_apply", ["representation"]], ["add", "theorem", "Rep_of_tprod_iso_inv_apply", ["representation"]]]}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["add", "theorem", "of_mul_action_single", ["representation"]]]}, {"oldPath": "src/representation_theory/group_cohomology_resolution.lean", "newPath": "src/representation_theory/group_cohomology_resolution.lean", "changes": [["add", "theorem", "diagonal_hom_equiv_apply", ["Rep"]], ["add", "theorem", "diagonal_hom_equiv_symm_apply", ["Rep"]]]}]}, {"timestamp": 1679874547, "sha": "c5dd9310", "message": "feat(set_theory/zfc/basic): tweak Class hom lemmas (#18295)\nThis PR renames a bunch of `hom` lemmas to better match the style of the rest of mathlib, and tags them as `norm_cast`. We also add the corresponding lemmas for the union.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "coe_apply", ["Class"]], ["add", "theorem", "coe_diff", ["Class"]], ["add", "theorem", "coe_empty", ["Class"]], ["add", "theorem", "coe_insert", ["Class"]], ["add", "theorem", "coe_inter", ["Class"]], ["add", "theorem", "coe_mem", ["Class"]], ["del", "theorem", "coe_mem_powerset", ["Class"]], ["add", "theorem", "coe_powerset", ["Class"]], ["add", "theorem", "coe_sUnion", ["Class"]], ["add", "theorem", "coe_sep", ["Class"]], ["add", "theorem", "coe_subset", ["Class"]], ["add", "theorem", "coe_union", ["Class"]], ["del", "theorem", "diff_hom", ["Class"]], ["del", "theorem", "empty_hom", ["Class"]], ["del", "theorem", "insert_hom", ["Class"]], ["del", "theorem", "inter_hom", ["Class"]], ["del", "theorem", "mem_hom_left", ["Class"]], ["del", "theorem", "mem_hom_right", ["Class"]], ["add", "theorem", "powerset_apply", ["Class"]], ["del", "theorem", "powerset_hom", ["Class"]], ["add", "theorem", "sUnion_apply", ["Class"]], ["del", "theorem", "sUnion_hom", ["Class"]], ["del", "theorem", "sep_hom", ["Class"]], ["del", "theorem", "subset_hom", ["Class"]], ["del", "theorem", "union_hom", ["Class"]]]}]}, {"timestamp": 1679857816, "sha": "ce86f4e0", "message": "feat(analysis/locally_convex/with_seminorms): convergence along filters (#18664)", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["add", "theorem", "tendsto_nhds'", ["with_seminorms"]], ["add", "theorem", "tendsto_nhds", ["with_seminorms"]], ["add", "theorem", "tendsto_nhds_at_top", ["with_seminorms"]]]}]}, {"timestamp": 1679850047, "sha": "cea83e19", "message": "feat(data/finmap): add an equivalence with pairs `(keys, lookup)` (#18151)\nA non-dependent version of the equivalence requested [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Proving.20equality.20of.20sigma.20types).", "changes": [{"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["add", "def", "keys_lookup_equiv", ["finmap"]], ["add", "theorem", "keys_lookup_equiv_symm_apply_keys", ["finmap"]], ["add", "theorem", "keys_lookup_equiv_symm_apply_lookup", ["finmap"]], ["add", "theorem", "lookup_eq_some_iff", ["finmap"]], ["add", "theorem", "mem_lookup_iff", ["finmap"]], ["add", "theorem", "nodup_entries", ["finmap"]], ["add", "theorem", "sigma_keys_lookup", ["finmap"]], ["add", "theorem", "nodup_keys", ["multiset"]], ["add", "theorem", "nodup", ["multiset", "nodupkeys"]]]}]}, {"timestamp": 1679850046, "sha": "b67044ba", "message": "feat(set_theory/ordinal/arithmetic): miscellaneous arithmetic lemmas (#15990)\nWill be used to prove statements about the Cantor Normal Form.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "add_sub_add_cancel", ["ordinal"]], ["add", "theorem", "mod_le", ["ordinal"]], ["add", "theorem", "mod_mod", ["ordinal"]], ["add", "theorem", "mod_mod_of_dvd", ["ordinal"]], ["add", "theorem", "mul_add_mod_self", ["ordinal"]], ["add", "theorem", "mul_mod", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/exponential.lean", "newPath": "src/set_theory/ordinal/exponential.lean", "changes": [["add", "theorem", "div_opow_log_pos", ["ordinal"]], ["mod", "theorem", "opow_dvd_opow", ["ordinal"]], ["mod", "theorem", "opow_dvd_opow_iff", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}]}, {"timestamp": 1679839050, "sha": "c227d107", "message": "chore(data/set/pairwise): split (#17880)\nThis PR will split most of the lemmas in `data.set.pairwise` which are independent of the `data.set.lattice`. It makes a lot of files no longer depend on `data.set.lattice`.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/port.20progress/near/315072418)\nmathlib4 PR: https://github.com/leanprover-community/mathlib4/pull/1184", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/data/finset/option.lean", "newPath": "src/data/finset/option.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": []}, {"oldPath": "src/data/prod/tprod.lean", "newPath": "src/data/prod/tprod.lean", "changes": []}, {"oldPath": "src/data/set/intervals/group.lean", "newPath": "src/data/set/intervals/group.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise/basic.lean", "changes": [["del", "theorem", "bUnion_injective", ["pairwise"]], ["del", "theorem", "subset_of_bUnion_subset_bUnion", ["pairwise"]], ["del", "theorem", "bUnion_diff_bUnion_eq", ["set"]], ["del", "theorem", "pairwise_Union", ["set"]], ["del", "theorem", "bUnion", ["set", "pairwise_disjoint"]], ["del", "theorem", "subset_of_bUnion_subset_bUnion", ["set", "pairwise_disjoint"]], ["del", "theorem", "pairwise_disjoint_Union", ["set"]], ["del", "theorem", "pairwise_disjoint_sUnion", ["set"]], ["del", "theorem", "pairwise_sUnion", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/pairwise/lattice.lean", "changes": [["add", "theorem", "bUnion_injective", ["pairwise"]], ["add", "theorem", "subset_of_bUnion_subset_bUnion", ["pairwise"]], ["add", "theorem", "bUnion_diff_bUnion_eq", ["set"]], ["add", "theorem", "pairwise_Union", ["set"]], ["add", "theorem", "bUnion", ["set", "pairwise_disjoint"]], ["add", "theorem", "subset_of_bUnion_subset_bUnion", ["set", "pairwise_disjoint"]], ["add", "theorem", "pairwise_disjoint_Union", ["set"]], ["add", "theorem", "pairwise_disjoint_sUnion", ["set"]], ["add", "theorem", "pairwise_sUnion", ["set"]]]}, {"oldPath": "src/data/set/pointwise/smul.lean", "newPath": "src/data/set/pointwise/smul.lean", "changes": []}, {"oldPath": "src/order/antichain.lean", "newPath": "src/order/antichain.lean", "changes": []}, {"oldPath": "src/order/chain.lean", "newPath": "src/order/chain.lean", "changes": []}, {"oldPath": "src/order/succ_pred/interval_succ.lean", "newPath": "src/order/succ_pred/interval_succ.lean", "changes": []}]}, {"timestamp": 1679827576, "sha": "76de8ae0", "message": "chore(*): Fix mistakes (#18654)\nFix naming errors and non-defeq diamonds recently introduced. Those were discovered during the port.", "changes": [{"oldPath": "src/algebra/field/opposite.lean", "newPath": "src/algebra/field/opposite.lean", "changes": []}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": []}, {"oldPath": "src/algebra/ring/defs.lean", "newPath": "src/algebra/ring/defs.lean", "changes": []}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/number_theory/multiplicity.lean", "newPath": "src/number_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1679792713, "sha": "e8da5f21", "message": "chore(topology/basic): backport another generalization to `Sort*` (#18660)\n* Generalize `is_closed_Union` to `Sort*`.\n* Drop `is_open_Inter_prop` and `is_closed_Union_prop`.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "is_closed_Union", []], ["del", "theorem", "is_closed_Union_prop", []], ["del", "theorem", "is_open_Inter_prop", []]]}]}, {"timestamp": 1679765264, "sha": "55d771df", "message": "feat(topology/*): add lemmas about `𝓝[⋃ i, s i] a` (#18321)\n* Add `theorem nhds_within_eq_nhds`, `nhds_within_bUnion`, `nhds_within_sUnion`, `nhds_within_Union`, `nhds_within_inter_of_mem'`.\n* Add `locally_finite.nhds_within_Union`, use it to golf `locally_finite.is_closed_Union` and `locally_finite.closure_Union`.\n* Reformulate `continuous_subtype_nhds_cover` in terms of `continuous_on`, rename to `continuous_of_cover_nhds`.\n* Reformulate `continuous_subtype_is_closed_cover` in terms of `continuous_on`, several versions are named `locally_finite.continuous_on_Union`, `locally_finite.continuous`, and primed versions of these lemmas.\n* Reorder imports.", "changes": [{"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["del", "theorem", "continuous_subtype_is_closed_cover", []], ["del", "theorem", "continuous_subtype_nhds_cover", []]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_of_cover_nhds", []], ["add", "theorem", "nhds_within_Union", []], ["add", "theorem", "nhds_within_bUnion", []], ["add", "theorem", "nhds_within_eq_nhds", []], ["add", "theorem", "nhds_within_inter_of_mem'", []], ["add", "theorem", "nhds_within_sUnion", []]]}, {"oldPath": "src/topology/locally_finite.lean", "newPath": "src/topology/locally_finite.lean", "changes": [["add", "theorem", "continuous_on_Union'", ["locally_finite"]], ["add", "theorem", "continuous_on_Union", ["locally_finite"]], ["mod", "theorem", "is_closed_Union", ["locally_finite"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1679759050, "sha": "d3af0609", "message": "chore(analysis/normed_space/basic): introduce `norm_smul_le` (#18650)\nCurrently `norm_smul_le x y` is just a special case of `(norm_smul x y).le`; but if in future we generalize `normed_space` to work over normed rings, it will continue to hold where `norm_smul` no longer does. This adjusts downstream proofs to use the weaker lemma too when the stronger one isn't needed, both so that we have less to fix if/when we make the suggested refactor, and because the new spelling is shorter.\nThis adds the corresponding `nnnorm` and `dist` and `nndist` lemmas too.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "dist_smul_le", []], ["add", "theorem", "nndist_smul_le", []], ["add", "theorem", "nnnorm_smul_le", []], ["add", "theorem", "norm_smul_le", []]]}, {"oldPath": "src/analysis/normed_space/completion.lean", "newPath": "src/analysis/normed_space/completion.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/multiplier.lean", "newPath": "src/analysis/normed_space/star/multiplier.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable/basic.lean", "newPath": "src/measure_theory/function/strongly_measurable/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}]}, {"timestamp": 1679759049, "sha": "0e3aacdc", "message": "feat(analysis/convex/topology): Closure of an open segment (#18589)\nThe closure of an open segment is the corresponding closed segment.", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "closure_open_segment", []], ["add", "theorem", "segment_subset_closure_open_segment", []]]}]}, {"timestamp": 1679747945, "sha": "517cc149", "message": "feat(data/finset/pointwise): `s ∩ t * s ∪ t ⊆ s * t` (#17961)\nand distributivity of `set.to_finset`/`set.finite.to_finset` over algebraic operations.", "changes": [{"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["add", "theorem", "image₂_inter_union_subset", ["finset"]], ["add", "theorem", "image₂_union_inter_subset", ["finset"]], ["add", "theorem", "to_finset_image2", ["set", "finite"]], ["add", "theorem", "to_finset_image2", ["set"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "card_one", ["finset"]], ["add", "theorem", "card_smul_finset", ["finset"]], ["add", "theorem", "image_smul_comm", ["finset"]], ["add", "theorem", "image_smul_distrib", ["finset"]], ["add", "theorem", "inter_mul_union_subset", ["finset"]], ["add", "theorem", "union_mul_inter_subset", ["finset"]], ["add", "theorem", "to_finset_mul", ["set", "finite"]], ["add", "theorem", "to_finset_one", ["set", "finite"]], ["add", "theorem", "to_finset_smul", ["set", "finite"]], ["add", "theorem", "to_finset_smul_set", ["set", "finite"]], ["add", "theorem", "to_finset_vsub", ["set", "finite"]], ["add", "theorem", "to_finset_mul", ["set"]], ["add", "theorem", "to_finset_one", ["set"]], ["add", "theorem", "to_finset_smul", ["set"]], ["add", "theorem", "to_finset_smul_set", ["set"]], ["add", "theorem", "to_finset_vsub", ["set"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/n_ary.lean", "newPath": "src/data/set/n_ary.lean", "changes": [["add", "theorem", "image2_inter_union_subset", ["set"]], ["add", "theorem", "image2_union_inter_subset", ["set"]]]}, {"oldPath": "src/data/set/pointwise/basic.lean", "newPath": "src/data/set/pointwise/basic.lean", "changes": [["add", "theorem", "inter_mul_union_subset", ["set"]], ["add", "theorem", "union_mul_inter_subset", ["set"]]]}, {"oldPath": "src/data/set/pointwise/finite.lean", "newPath": "src/data/set/pointwise/finite.lean", "changes": [["add", "theorem", "finite_one", ["set"]]]}, {"oldPath": "src/data/set/pointwise/smul.lean", "newPath": "src/data/set/pointwise/smul.lean", "changes": [["add", "theorem", "image_smul_comm", ["set"]], ["add", "theorem", "image_smul_distrib", ["set"]]]}]}, {"timestamp": 1679739266, "sha": "0ca15f46", "message": "chore(category_theory/limits/shapes/concrete_category): Delete empty file (#18653)\nThis file was made empty in #9864 but not deleted.", "changes": [{"oldPath": "src/category_theory/limits/shapes/concrete_category.lean", "newPath": null, "changes": []}]}, {"timestamp": 1679725868, "sha": "cb3ceec8", "message": "chore(*): add mathlib4 synchronization comments (#18646)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Group.basic`\n* `algebra.star.free`\n* `analysis.convex.segment`\n* `analysis.convex.star`\n* `category_theory.concrete_category.elementwise`\n* `category_theory.limits.concrete_category`\n* `category_theory.limits.shapes.diagonal`\n* `category_theory.limits.shapes.types`\n* `category_theory.localization.construction`\n* `category_theory.monad.basic`\n* `category_theory.monoidal.natural_transformation`\n* `category_theory.morphism_property`\n* `category_theory.sites.grothendieck`\n* `data.finset.sym`\n* `data.mv_polynomial.equiv`\n* `data.polynomial.field_division`\n* `group_theory.free_product`\n* `information_theory.hamming`\n* `linear_algebra.affine_space.affine_subspace`\n* `linear_algebra.affine_space.midpoint`\n* `linear_algebra.affine_space.restrict`\n* `number_theory.fermat4`\n* `number_theory.padics.padic_norm`\n* `ring_theory.polynomial.content`", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/free.lean", "newPath": "src/algebra/star/free.lean", "changes": []}, {"oldPath": "src/analysis/convex/segment.lean", "newPath": "src/analysis/convex/segment.lean", "changes": []}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/elementwise.lean", "newPath": "src/category_theory/concrete_category/elementwise.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/diagonal.lean", "newPath": "src/category_theory/limits/shapes/diagonal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/category_theory/localization/construction.lean", "newPath": "src/category_theory/localization/construction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/natural_transformation.lean", "newPath": "src/category_theory/monoidal/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/morphism_property.lean", "newPath": "src/category_theory/morphism_property.lean", "changes": []}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/data/finset/sym.lean", "newPath": "src/data/finset/sym.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/information_theory/hamming.lean", "newPath": "src/information_theory/hamming.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/restrict.lean", "newPath": "src/linear_algebra/affine_space/restrict.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}]}, {"timestamp": 1679694092, "sha": "72e87ce0", "message": "fix(tactic/ring_exp): `X^(2^3) = X^8` not `X^6` (#18645)\nApparently `ring_exp` didn't correctly handle the exponentiation of coefficients, returning the product instead of the power as a coefficient. It still returned the right `expr`, so the faulty value is only used when checking that two terms are the same and so we can add their coefficients. In other words, this bug could only be triggered when `ring_exp` ends up adding `X^(a^b)` with `X^(a*b)` where `a` and `b` are both numerals.\nThanks to @alainchmt for reporting the bug!", "changes": [{"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1679694091, "sha": "46b633fd", "message": "refactor(analysis/inner_product_space/basic): do not extend normed_add_comm_group (#18583)\nThis replaces `[inner_product_space K V]` with `[normed_add_comm_group V] [inner_product_space K V]`.\nBefore this PR, we had `inner_product_space K V extends normed_add_comm_group V`.\nAt first glance this is a rather strange arrangement; we certainly don't have `module R V extends add_comm_group V`.\nThe argument usually goes that `Derived A B extends Base B` is unsafe, because the `Derived.toBase` instance has no way of knowing which `A` to look for.\nFor `inner_product_space K V` we argued that this problem doesn't apply, as `is_R_or_C K` means that in practice there are only two possible values of `K`. This is indeed enough to stop typeclass search grinding to a halt.\nThe motivation for the old design is described by @dupuisf [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Dangerous.20instance.20vs.20elaboration.20problems/near/210594971):\n> However, when I do (the contents of this PR), I run into some very annoying elaboration issues where I have to constantly spoonfeed it `𝕜` and/or `α` in lemmas that rewrite norms in terms of inner products, even though the relevant instance is directly present in the context.\nWhile it may ease elaboration issues, there are a number of new problems that `inner_product_space K V extends normed_add_comm_group V` causes:\n1. It is confusing when compared to all other typeclasses. After being told to write\n ```lean\n variables [add_comm_group U] [module R U]\n variables [normed_add_comm_group V] [normed_space R V]\n ```\n it is natural to assume that the inner product space version would be\n ```lean\n variables [normed_add_comm_group W] [inner_product_space K W]\n ```\n But writing this leads to `W` having two unrelated addition operations!\n2. It doesn't allow a space `W` to be an inner product space over both R and C. For a (normed) module, you can write\n ```lean\n variables [add_comm_group U] [module R U] [module C U]\n variables [normed_add_comm_group V] [normed_space R V] [normed_space C V]\n ```\n but writing `[inner_product_space R W] [inner_product_space C W]` again puts two unrelated `+` operators on `V`\n3. It doesn't compose with other normed typeclasses. We can talk about a (normed) module with multiplication as\n ```lean\n variables [ring U] [module R U]\n variables [normed_ring V] [normed_space K V]\n ```\n but once again, typing `[normed_ring W] [inner_product_space K W]` gives us two unrelated `+` operators.\n This prevents us generalizing over `real`, `complex`, and `quaternion`.\n We could work around this by defining variants of `inner_product_space` for `normed_ring A`, `normed_comm_ring A`, `normed_division_ring A`, `normed_field A`, but this doesn't scale well. If we do things \"the module way\" then we only need one new typeclass instead of four,\n ```lean\n class inner_product_algebra (K A) [is_R_or_C K] [normed_ring A]\n extends normed_algebra K A, inner_product_space K A\n ```\n5. The \"`is_R_or_C` makes it OK\" argument stops working if we generalize to [quaternionic inner product spaces](https://link.springer.com/chapter/10.1007/978-94-009-3713-0_13)\nThe majority of this PR is adding `[normed_add_comm_group _]` to every `variables` line about `inner_product_space`.\nThe rest is specifying the scalar manually where previously unification would find it for us.\n[This Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/inner_product_space.20and.20normed_algebra/near/341848831) has some initial discussion about this change.", "changes": [{"oldPath": "archive/100-theorems-list/57_herons_formula.lean", "newPath": "archive/100-theorems-list/57_herons_formula.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q2.lean", "newPath": "archive/imo/imo2019_q2.lean", "changes": []}, {"oldPath": "src/analysis/calculus/bump_function_inner.lean", "newPath": "src/analysis/calculus/bump_function_inner.lean", "changes": []}, {"oldPath": "src/analysis/calculus/conformal/inner_product.lean", "newPath": "src/analysis/calculus/conformal/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone/basic.lean", "newPath": "src/analysis/convex/cone/basic.lean", "changes": []}, {"oldPath": "src/analysis/fourier/add_circle.lean", "newPath": "src/analysis/fourier/add_circle.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "theorem", "inner_map_complex", []], ["mod", "def", "orthogonal_family", []], ["mod", "theorem", "real_inner_comm", []], ["mod", "theorem", "real_inner_self_nonneg", []]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "newPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/lax_milgram.lean", "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/orientation.lean", "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": [["mod", "theorem", "volume_form_map", ["orientation"]]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/positive.lean", "newPath": "src/analysis/inner_product_space/positive.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["mod", "theorem", "map_orthogonal_projection'", ["linear_isometry"]], ["mod", "theorem", "map_orthogonal_projection", ["linear_isometry"]], ["mod", "theorem", "orthogonal_projection_map_apply", []], ["mod", "theorem", "reflection_map", []], ["mod", "theorem", "reflection_map_apply", []]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/two_dim.lean", "newPath": "src/analysis/inner_product_space/two_dim.lean", "changes": [["mod", "theorem", "area_form_map", ["orientation"]], ["mod", "theorem", "kahler_map", ["orientation"]], ["mod", "theorem", "right_angle_rotation_map'", ["orientation"]], ["mod", "theorem", "right_angle_rotation_map", ["orientation"]]]}, {"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/analysis/von_neumann_algebra/basic.lean", "newPath": "src/analysis/von_neumann_algebra/basic.lean", "changes": [["mod", "structure", "von_neumann_algebra", []]]}, {"oldPath": "src/geometry/euclidean/angle/oriented/affine.lean", "newPath": "src/geometry/euclidean/angle/oriented/affine.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/basic.lean", "newPath": "src/geometry/euclidean/angle/oriented/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/right_angle.lean", "newPath": "src/geometry/euclidean/angle/oriented/right_angle.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "newPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/sphere.lean", "newPath": "src/geometry/euclidean/angle/sphere.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/unoriented/affine.lean", "newPath": "src/geometry/euclidean/angle/unoriented/affine.lean", "changes": [["mod", "theorem", "angle_map", ["affine_isometry"]]]}, {"oldPath": "src/geometry/euclidean/angle/unoriented/basic.lean", "newPath": "src/geometry/euclidean/angle/unoriented/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/unoriented/conformal.lean", "newPath": "src/geometry/euclidean/angle/unoriented/conformal.lean", "changes": [["mod", "theorem", "preserves_angle", ["inner_product_geometry", "conformal_at"]], ["mod", "theorem", "preserves_angle", ["inner_product_geometry", "is_conformal_map"]]]}, {"oldPath": "src/geometry/euclidean/angle/unoriented/right_angle.lean", "newPath": "src/geometry/euclidean/angle/unoriented/right_angle.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/inversion.lean", "newPath": "src/geometry/euclidean/inversion.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/basic.lean", "newPath": "src/geometry/euclidean/sphere/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/power.lean", "newPath": "src/geometry/euclidean/sphere/power.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/ptolemy.lean", "newPath": "src/geometry/euclidean/sphere/ptolemy.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere/second_inter.lean", "newPath": "src/geometry/euclidean/sphere/second_inter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/ldl.lean", "newPath": "src/linear_algebra/matrix/ldl.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/pos_def.lean", "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": [["add", "def", "of_matrix", ["matrix", "inner_product_space"]]]}, {"oldPath": "src/linear_algebra/matrix/spectrum.lean", "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["mod", "theorem", "ae_eq_zero_of_forall_inner", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": [["mod", "theorem", "const_inner", ["measure_theory", "ae_strongly_measurable'"]], ["mod", "theorem", "norm_condexp_L2_le_one", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions/inner.lean", "newPath": "src/measure_theory/function/special_functions/inner.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable/inner.lean", "newPath": "src/measure_theory/function/strongly_measurable/inner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_of_basis.lean", "newPath": "src/measure_theory/measure/haar_of_basis.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_of_inner.lean", "newPath": "src/measure_theory/measure/haar_of_inner.lean", "changes": []}]}, {"timestamp": 1679682429, "sha": "d11893b4", "message": "fix(*): missing universe polymorphism (#18644)\nThese are all just typo fixes, no proof adaptations.\nThis deliberately leaves alone things related to category theory and algebraic geometry, as there the lack of polymorphism is likely deliberate.", "changes": [{"oldPath": "src/analysis/normed_space/M_structure.lean", "newPath": "src/analysis/normed_space/M_structure.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": [["mod", "theorem", "nil_sub", ["list", "func"]], ["mod", "theorem", "sub_nil", ["list", "func"]]]}, {"oldPath": "src/field_theory/separable_degree.lean", "newPath": "src/field_theory/separable_degree.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/logic/equiv/list.lean", "newPath": "src/logic/equiv/list.lean", "changes": [["mod", "def", "list_equiv_self_of_equiv_nat", ["equiv"]]]}, {"oldPath": "src/measure_theory/integral/circle_transform.lean", "newPath": "src/measure_theory/integral/circle_transform.lean", "changes": []}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["mod", "theorem", "map_bounded_formula", ["first_order", "language", "elementary_embedding"]], ["mod", "theorem", "map_formula", ["first_order", "language", "elementary_embedding"]]]}, {"oldPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "newPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "changes": [["mod", "theorem", "card_pow_card", ["char"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["mod", "theorem", "quadratic_char_card_card", []]]}]}, {"timestamp": 1679668402, "sha": "945bc74e", "message": "chore(data/matrix/kronecker): make the `R` argument implicit (#18624)\nThis was copied erroneously from the `tensor_product` section, where an explicit `R` _is_ needed.", "changes": [{"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": []}]}, {"timestamp": 1679662431, "sha": "540b766a", "message": "feat(tactic/linear_combination): allow `linear_combination with { exponent := n }` (#15428)\n#15425 will solve problems where the goal is not a linear combination of hypotheses, but a *power* of the goal is. This PR provides a more natural certificate for these proofs. Writing `linear_combination ... with { exponent := 2 }` will square the goal before subtracting the linear combination. In principle this could be useful even outside of `polyrith`.", "changes": [{"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": []}, {"oldPath": "test/linear_combination.lean", "newPath": "test/linear_combination.lean", "changes": []}]}, {"timestamp": 1679643445, "sha": "97eab485", "message": "chore(*): add mathlib4 synchronization comments (#18642)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.char_p.algebra`\n* `analysis.normed_space.M_structure`\n* `category_theory.groupoid.vertex_group`\n* `category_theory.limits.shapes.multiequalizer`\n* `category_theory.limits.shapes.reflexive`\n* `combinatorics.derangements.basic`\n* `combinatorics.simple_graph.degree_sum`\n* `data.polynomial.denoms_clearable`\n* `data.polynomial.ring_division`\n* `data.set.sups`\n* `linear_algebra.affine_space.affine_equiv`\n* `number_theory.pythagorean_triples`\n* `number_theory.zsqrtd.basic`\n* `number_theory.zsqrtd.to_real`\n* `ring_theory.localization.num_denom`\n* `topology.path_connected`", "changes": [{"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/M_structure.lean", "newPath": "src/analysis/normed_space/M_structure.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid/vertex_group.lean", "newPath": "src/category_theory/groupoid/vertex_group.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/reflexive.lean", "newPath": "src/category_theory/limits/shapes/reflexive.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/basic.lean", "newPath": "src/combinatorics/derangements/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/set/sups.lean", "newPath": "src/data/set/sups.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/to_real.lean", "newPath": "src/number_theory/zsqrtd/to_real.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/num_denom.lean", "newPath": "src/ring_theory/localization/num_denom.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1679622212, "sha": "e9ce88cd", "message": "feat(order/upper_lower/basic): The upper closure is bounded below (#18637)\nand its lower bounds are the same as those of the original set.", "changes": [{"oldPath": "src/order/upper_lower/basic.lean", "newPath": "src/order/upper_lower/basic.lean", "changes": [["add", "theorem", "bdd_above_lower_closure", []], ["add", "theorem", "bdd_below_upper_closure", []], ["add", "theorem", "lower_bounds_upper_closure", []], ["add", "theorem", "upper_bounds_lower_closure", []]]}]}, {"timestamp": 1679614866, "sha": "72c366d0", "message": "feat(ring_theory/mv_polynomial/ideal): lemmas about monomial ideals (#18633)\nInspired by [this Zulip message](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/.F0.9D.94.BD.E2.82.82.5B.CE.B1.2C.20.CE.B2.2C.20.CE.B3.5D.20.2F.20.28.CE.B1.C2.B2.2C.20.CE.B2.C2.B2.2C.20.CE.B3.C2.B2.29/near/292327061). Instead of defining `ideal_ge'` directly, we show results about the more natural spelling with `ideal.span`.\nThis also adds a handful of results about `dvd` on `mv_polynomial`.", "changes": [{"oldPath": "src/algebra/monoid_algebra/division.lean", "newPath": "src/algebra/monoid_algebra/division.lean", "changes": [["add", "theorem", "of'_dvd_iff_mod_of_eq_zero", ["add_monoid_algebra"]]]}, {"oldPath": null, "newPath": "src/algebra/monoid_algebra/ideal.lean", "changes": [["add", "theorem", "mem_ideal_span_of'_image", ["add_monoid_algebra"]], ["add", "theorem", "mem_ideal_span_of_image", ["monoid_algebra"]]]}, {"oldPath": "src/data/mv_polynomial/division.lean", "newPath": "src/data/mv_polynomial/division.lean", "changes": [["add", "theorem", "X_dvd_X", ["mv_polynomial"]], ["add", "theorem", "X_dvd_iff_mod_monomial_eq_zero", ["mv_polynomial"]], ["add", "theorem", "X_dvd_monomial", ["mv_polynomial"]], ["add", "theorem", "monomial_dvd_monomial", ["mv_polynomial"]], ["add", "theorem", "monomial_one_dvd_iff_mod_monomial_eq_zero", ["mv_polynomial"]], ["add", "theorem", "monomial_one_dvd_monomial_one", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/mv_polynomial/ideal.lean", "changes": [["add", "theorem", "mem_ideal_span_X_image", ["mv_polynomial"]], ["add", "theorem", "mem_ideal_span_monomial_image", ["mv_polynomial"]], ["add", "theorem", "mem_ideal_span_monomial_image_iff_dvd", ["mv_polynomial"]]]}]}, {"timestamp": 1679610053, "sha": "0caf3701", "message": "feat(representation_theory/Rep): describe monoidal closed structure (#18148)\nThe monoidal closed structure on `Rep k G` defines an internal hom of representations; we show this agrees with `representation.lin_hom`. Moreover, the maps defining the hom-set bijection come from the tensor-hom adjunction for $k$-modules.", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["add", "theorem", "ihom_coev_app", ["Module"]], ["add", "theorem", "ihom_ev_app", ["Module"]], ["add", "theorem", "ihom_map_apply", ["Module"]], ["add", "theorem", "monoidal_closed_pre_app", ["Module"]]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/category_theory/closed/functor_category.lean", "newPath": "src/category_theory/closed/functor_category.lean", "changes": [["add", "theorem", "ihom_coev_app", ["category_theory", "functor"]], ["add", "theorem", "ihom_ev_app", ["category_theory", "functor"]], ["add", "theorem", "ihom_map", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": [["add", "theorem", "of_equiv_curry_def", ["category_theory", "monoidal_closed"]], ["add", "theorem", "of_equiv_uncurry_def", ["category_theory", "monoidal_closed"]]]}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "theorem", "functor_def", ["Action", "functor_category_equivalence"]], ["add", "theorem", "inverse_def", ["Action", "functor_category_equivalence"]], ["add", "theorem", "counit_app", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "functor_map", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "inv_counit_app_hom", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "inv_unit_app_app", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "inverse_map", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "unit_app_hom", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "ε_app", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "μ_app", ["Action", "functor_category_monoidal_equivalence"]], ["add", "theorem", "μ_iso_inv_app", ["Action", "functor_category_monoidal_equivalence"]]]}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": [["add", "theorem", "ihom_coev_app_def", ["Rep"]], ["add", "theorem", "ihom_coev_app_hom", ["Rep"]], ["add", "theorem", "ihom_ev_app_hom", ["Rep"]], ["add", "theorem", "ihom_map_hom", ["Rep"]], ["add", "theorem", "ihom_obj_ρ", ["Rep"]], ["add", "theorem", "ihom_obj_ρ_def", ["Rep"]], ["add", "theorem", "monoidal_closed_curry_hom", ["Rep"]], ["add", "theorem", "monoidal_closed_uncurry_hom", ["Rep"]]]}]}, {"timestamp": 1679606311, "sha": "842557b6", "message": "chore(number_theory/pell): Move def. of solution type and API to beginning (#18639)\nOn the suggestion of @eric-wieser, this PR separates moving the definition of the type of solutions and the API lemmas to the beginning of the file, to help with the reviewing of #18626.", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}]}, {"timestamp": 1679596657, "sha": "b19481de", "message": "feat(order/antichain): Antichains are order-connected (#18636)", "changes": [{"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/order/antichain.lean", "newPath": "src/order/antichain.lean", "changes": [["add", "theorem", "not_lt", ["is_antichain"]], ["add", "theorem", "is_antichain_iff_forall_not_lt", []]]}]}, {"timestamp": 1679585139, "sha": "3353f661", "message": "chore(*): golf using `acc_lift₂_iff` and `well_founded_lift₂_iff` (#18526)", "changes": [{"oldPath": "src/order/antisymmetrization.lean", "newPath": "src/order/antisymmetrization.lean", "changes": []}, {"oldPath": "src/order/rel_iso/basic.lean", "newPath": "src/order/rel_iso/basic.lean", "changes": [["add", "theorem", "acc_lift_on₂'_iff", []], ["add", "theorem", "acc_lift₂_iff", []], ["add", "def", "mk_rel_hom", ["quotient"]], ["add", "theorem", "well_founded_lift_on₂'_iff", []], ["mod", "theorem", "well_founded_lift₂_iff", []]]}, {"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["mod", "theorem", "mem_wf", ["Set"]]]}]}, {"timestamp": 1679566909, "sha": "dc9e5ba6", "message": "chore(set_theory/game/pgame): golf le and lf basic API (#18498)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "def", "le_lf", ["pgame"]], ["mod", "theorem", "not_ge", ["pgame", "lf"]], ["mod", "def", "lf", ["pgame"]], ["mod", "theorem", "not_lf", ["pgame"]]]}]}, {"timestamp": 1679557975, "sha": "8ef6f08f", "message": "chore(*): add mathlib4 synchronization comments (#18634)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.lie.subalgebra`\n* `category_theory.limits.shapes.kernel_pair`\n* `category_theory.monoidal.preadditive`\n* `category_theory.preadditive.single_obj`\n* `linear_algebra.sesquilinear_form`\n* `number_theory.padics.padic_val`\n* `ring_theory.localization.fraction_ring`\n* `topology.algebra.uniform_ring`\n* `topology.covering`\n* `topology.fiber_bundle.basic`", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernel_pair.lean", "newPath": "src/category_theory/limits/shapes/kernel_pair.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/preadditive.lean", "newPath": "src/category_theory/monoidal/preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/single_obj.lean", "newPath": "src/category_theory/preadditive/single_obj.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/fraction_ring.lean", "newPath": "src/ring_theory/localization/fraction_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/covering.lean", "newPath": "src/topology/covering.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/basic.lean", "newPath": "src/topology/fiber_bundle/basic.lean", "changes": []}]}, {"timestamp": 1679479548, "sha": "57e09a12", "message": "feat(algebra/monoid_algebra): add division by a generator (#15905)\nThis generalizes `polynomial.div_X`.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/X_i.20divides.20f.20if.20f.3D0.20when.20X_i.3D0/near/339570367)", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "theorem", "mul_single_apply_of_not_exists_add", ["add_monoid_algebra"]], ["add", "theorem", "single_mul_apply_of_not_exists_add", ["add_monoid_algebra"]], ["add", "theorem", "mul_single_apply_of_not_exists_mul", ["monoid_algebra"]], ["add", "theorem", "single_mul_apply_of_not_exists_mul", ["monoid_algebra"]]]}, {"oldPath": null, "newPath": "src/algebra/monoid_algebra/division.lean", "changes": [["add", "theorem", "add_div_of", ["add_monoid_algebra"]], ["add", "theorem", "div_of_add", ["add_monoid_algebra"]], ["add", "theorem", "div_of_add_mod_of", ["add_monoid_algebra"]], ["add", "theorem", "div_of_apply", ["add_monoid_algebra"]], ["add", "theorem", "div_of_zero", ["add_monoid_algebra"]], ["add", "theorem", "mod_of_add_div_of", ["add_monoid_algebra"]], ["add", "theorem", "mod_of_apply_add_self", ["add_monoid_algebra"]], ["add", "theorem", "mod_of_apply_of_exists_add", ["add_monoid_algebra"]], ["add", "theorem", "mod_of_apply_of_not_exists_add", ["add_monoid_algebra"]], ["add", "theorem", "mod_of_apply_self_add", ["add_monoid_algebra"]], ["add", "theorem", "mul_of'_div_of", ["add_monoid_algebra"]], ["add", "theorem", "mul_of'_mod_of", ["add_monoid_algebra"]], ["add", "theorem", "of'_div_of", ["add_monoid_algebra"]], ["add", "theorem", "of'_mod_of", ["add_monoid_algebra"]], ["add", "theorem", "of'_mul_div_of", ["add_monoid_algebra"]], ["add", "theorem", "of'_mul_mod_of", ["add_monoid_algebra"]], ["add", "theorem", "support_div_of", ["add_monoid_algebra"]], ["add", "theorem", "zero_div_of", ["add_monoid_algebra"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/division.lean", "changes": [["add", "theorem", "X_div_monomial", ["mv_polynomial"]], ["add", "theorem", "X_mul_div_monomial", ["mv_polynomial"]], ["add", "theorem", "X_mul_mod_monomial", ["mv_polynomial"]], ["add", "theorem", "add_div_monomial", ["mv_polynomial"]], ["add", "theorem", "coeff_div_monomial", ["mv_polynomial"]], ["add", "theorem", "coeff_mod_monomial_of_le", ["mv_polynomial"]], ["add", "theorem", "coeff_mod_monomial_of_not_le", ["mv_polynomial"]], ["add", "theorem", "div_monomial_add", ["mv_polynomial"]], ["add", "theorem", "div_monomial_add_mod_monomial", ["mv_polynomial"]], ["add", "theorem", "div_monomial_add_mod_monomial_single", ["mv_polynomial"]], ["add", "theorem", "div_monomial_monomial", ["mv_polynomial"]], ["add", "theorem", "div_monomial_monomial_mul", ["mv_polynomial"]], ["add", "theorem", "div_monomial_mul_monomial", ["mv_polynomial"]], ["add", "theorem", "div_monomial_zero", ["mv_polynomial"]], ["add", "theorem", "mod_monomial_X", ["mv_polynomial"]], ["add", "theorem", "mod_monomial_add_div_monomial", ["mv_polynomial"]], ["add", "theorem", "mod_monomial_add_div_monomial_single", ["mv_polynomial"]], ["add", "theorem", "monomial_mod_monomial", ["mv_polynomial"]], ["add", "theorem", "monomial_mul_mod_monomial", ["mv_polynomial"]], ["add", "theorem", "mul_X_div_monomial", ["mv_polynomial"]], ["add", "theorem", "mul_X_mod_monomial", ["mv_polynomial"]], ["add", "theorem", "mul_monomial_mod_monomial", ["mv_polynomial"]], ["add", "theorem", "support_div_monomial", ["mv_polynomial"]], ["add", "theorem", "zero_div_monomial", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": []}]}, {"timestamp": 1679465598, "sha": "c085f304", "message": "chore(*): add mathlib4 synchronization comments (#18630)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.category.Mon.basic`\n* `algebra.squarefree`\n* `category_theory.closed.monoidal`\n* `category_theory.single_obj`\n* `data.zmod.coprime`\n* `field_theory.perfect_closure`\n* `linear_algebra.invariant_basis_number`\n* `ring_theory.euclidean_domain`\n* `ring_theory.flat`\n* `ring_theory.int.basic`\n* `ring_theory.principal_ideal_domain`\n* `ring_theory.unique_factorization_domain`", "changes": [{"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/data/zmod/coprime.lean", "newPath": "src/data/zmod/coprime.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/flat.lean", "newPath": "src/ring_theory/flat.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1679427677, "sha": "dd6388c4", "message": "chore(analysis/calculus/cont_diff): split into two files (#18627)\nThe file `cont_diff.lean` takes 3824 lines. We cut it into two files, `cont_diff_def.lean` and `cont_diff.lean`, the former (of 1597 lines) containing general definitions and the latter (of 2264 lines) containing results on the preservation of smoothness by the usual operations and various API extensions that depend on these.\nThere is no single change in maths or code, this is purely a split PR.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["del", "theorem", "cont_diff_at", ["cont_diff"]], ["del", "theorem", "cont_diff_on", ["cont_diff"]], ["del", "theorem", "cont_diff_within_at", ["cont_diff"]], ["del", "theorem", "continuous", ["cont_diff"]], ["del", "theorem", "continuous_fderiv", ["cont_diff"]], ["del", "theorem", "continuous_fderiv_apply", ["cont_diff"]], ["del", "theorem", "continuous_iterated_fderiv", ["cont_diff"]], ["del", "theorem", "differentiable", ["cont_diff"]], ["del", "theorem", "differentiable_iterated_fderiv", ["cont_diff"]], ["del", "theorem", "of_le", ["cont_diff"]], ["del", "theorem", "of_succ", ["cont_diff"]], ["del", "theorem", "one_of_succ", ["cont_diff"]], ["del", "def", "cont_diff", []], ["del", "theorem", "cont_diff_all_iff_nat", []], ["del", "theorem", "congr_of_eventually_eq", ["cont_diff_at"]], ["del", "theorem", "cont_diff_within_at", ["cont_diff_at"]], ["del", "theorem", "continuous_at", ["cont_diff_at"]], ["del", "theorem", "differentiable_at", ["cont_diff_at"]], ["del", "theorem", "of_le", ["cont_diff_at"]], ["del", "def", "cont_diff_at", []], ["del", "theorem", "cont_diff_at_one_iff", []], ["del", "theorem", "cont_diff_at_succ_iff_has_fderiv_at", []], ["del", "theorem", "cont_diff_at_top", []], ["del", "theorem", "cont_diff_at_zero", []], ["del", "theorem", "cont_diff_iff_cont_diff_at", []], ["del", "theorem", "cont_diff_iff_continuous_differentiable", []], ["del", "theorem", "cont_diff_iff_forall_nat_le", []], ["del", "theorem", "cont_diff_iff_ftaylor_series", []], ["del", "theorem", "cont_diff_of_differentiable_iterated_fderiv", []], ["del", "theorem", "congr", ["cont_diff_on"]], ["del", "theorem", "congr_mono", ["cont_diff_on"]], ["del", "theorem", "cont_diff_within_at", ["cont_diff_on"]], ["del", "theorem", "continuous_on", ["cont_diff_on"]], ["del", "theorem", "continuous_on_fderiv_of_open", ["cont_diff_on"]], ["del", "theorem", "continuous_on_fderiv_within", ["cont_diff_on"]], ["del", "theorem", "continuous_on_iterated_fderiv_within", ["cont_diff_on"]], ["del", "theorem", "differentiable_on", ["cont_diff_on"]], ["del", "theorem", "differentiable_on_iterated_fderiv_within", ["cont_diff_on"]], ["del", "theorem", "fderiv_of_open", ["cont_diff_on"]], ["del", "theorem", "fderiv_within", ["cont_diff_on"]], ["del", "theorem", "ftaylor_series_within", ["cont_diff_on"]], ["del", "theorem", "mono", ["cont_diff_on"]], ["del", "theorem", "of_le", ["cont_diff_on"]], ["del", "theorem", "of_succ", ["cont_diff_on"]], ["del", "theorem", "one_of_succ", ["cont_diff_on"]], ["del", "def", "cont_diff_on", []], ["del", "theorem", "cont_diff_on_all_iff_nat", []], ["del", "theorem", "cont_diff_on_congr", []], ["del", "theorem", "cont_diff_on_iff_continuous_on_differentiable_on", []], ["del", "theorem", "cont_diff_on_iff_forall_nat_le", []], ["del", "theorem", "cont_diff_on_of_continuous_on_differentiable_on", []], ["del", "theorem", "cont_diff_on_of_differentiable_on", []], ["del", "theorem", "cont_diff_on_of_locally_cont_diff_on", []], ["del", "theorem", "cont_diff_on_succ_iff_fderiv_of_open", []], ["del", "theorem", "cont_diff_on_succ_iff_fderiv_within", []], ["del", "theorem", "cont_diff_on_succ_iff_has_fderiv_within_at", []], ["del", "theorem", "cont_diff_on_succ_of_fderiv_within", []], ["del", "theorem", "cont_diff_on_top", []], ["del", "theorem", "cont_diff_on_top_iff_fderiv_of_open", []], ["del", "theorem", "cont_diff_on_top_iff_fderiv_within", []], ["del", "theorem", "cont_diff_on_univ", []], ["del", "theorem", "cont_diff_on_zero", []], ["del", "theorem", "cont_diff_one_iff_fderiv", []], ["del", "theorem", "cont_diff_succ_iff_fderiv", []], ["del", "theorem", "cont_diff_top", []], ["del", "theorem", "cont_diff_top_iff_fderiv", []], ["del", "theorem", "congr'", ["cont_diff_within_at"]], ["del", "theorem", "congr", ["cont_diff_within_at"]], ["del", "theorem", "congr_nhds", ["cont_diff_within_at"]], ["del", "theorem", "congr_of_eventually_eq'", ["cont_diff_within_at"]], ["del", "theorem", "congr_of_eventually_eq", ["cont_diff_within_at"]], ["del", "theorem", "congr_of_eventually_eq_insert", ["cont_diff_within_at"]], ["del", "theorem", "cont_diff_at", ["cont_diff_within_at"]], ["del", "theorem", "cont_diff_on", ["cont_diff_within_at"]], ["del", "theorem", "continuous_within_at", ["cont_diff_within_at"]], ["del", "theorem", "differentiable_within_at'", ["cont_diff_within_at"]], ["del", "theorem", "differentiable_within_at", ["cont_diff_within_at"]], ["del", "theorem", "insert", ["cont_diff_within_at"]], ["del", "theorem", "mono", ["cont_diff_within_at"]], ["del", "theorem", "mono_of_mem", ["cont_diff_within_at"]], ["del", "theorem", "of_le", ["cont_diff_within_at"]], ["del", "def", "cont_diff_within_at", []], ["del", "theorem", "cont_diff_within_at_congr_nhds", []], ["del", "theorem", "cont_diff_within_at_iff_forall_nat_le", []], ["del", "theorem", "cont_diff_within_at_insert", []], ["del", "theorem", "cont_diff_within_at_inter'", []], ["del", "theorem", "cont_diff_within_at_inter", []], ["del", "theorem", "cont_diff_within_at_nat", []], ["del", "theorem", "cont_diff_within_at_succ_iff_has_fderiv_within_at'", []], ["del", "theorem", "cont_diff_within_at_succ_iff_has_fderiv_within_at", []], ["del", "theorem", "cont_diff_within_at_top", []], ["del", "theorem", "cont_diff_within_at_univ", []], ["del", "theorem", "cont_diff_within_at_zero", []], ["del", "theorem", "cont_diff_zero", []], ["del", "theorem", "fderiv_iterated_fderiv", []], ["del", "theorem", "cont_diff_within_at_iff", ["filter", "eventually_eq"]], ["del", "def", "ftaylor_series", []], ["del", "def", "ftaylor_series_within", []], ["del", "theorem", "ftaylor_series_within_univ", []], ["del", "theorem", "iterated_fderiv", ["has_compact_support"]], ["del", "theorem", "continuous", ["has_ftaylor_series_up_to"]], ["del", "theorem", "differentiable", ["has_ftaylor_series_up_to"]], ["del", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to"]], ["del", "theorem", "has_ftaylor_series_up_to_on", ["has_ftaylor_series_up_to"]], ["del", "theorem", "of_le", ["has_ftaylor_series_up_to"]], ["del", "theorem", "zero_eq'", ["has_ftaylor_series_up_to"]], ["del", "structure", "has_ftaylor_series_up_to", []], ["del", "theorem", "congr", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "continuous_on", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "differentiable_at", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "differentiable_on", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "eq_ftaylor_series_of_unique_diff_on", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "eventually_has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "has_fderiv_within_at", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "mono", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "of_le", ["has_ftaylor_series_up_to_on"]], ["del", "theorem", "zero_eq'", ["has_ftaylor_series_up_to_on"]], ["del", "structure", "has_ftaylor_series_up_to_on", []], ["del", "theorem", "has_ftaylor_series_up_to_on_succ_iff_left", []], ["del", "theorem", "has_ftaylor_series_up_to_on_succ_iff_right", []], ["del", "theorem", "has_ftaylor_series_up_to_on_top_iff", []], ["del", "theorem", "has_ftaylor_series_up_to_on_univ_iff", []], ["del", "theorem", "has_ftaylor_series_up_to_on_zero_iff", []], ["del", "theorem", "has_ftaylor_series_up_to_succ_iff_right", []], ["del", "theorem", "has_ftaylor_series_up_to_zero_iff", []], ["del", "theorem", "iterated_fderiv_one_apply", []], ["del", "theorem", "iterated_fderiv_succ_apply_left", []], ["del", "theorem", "iterated_fderiv_succ_apply_right", []], ["del", "theorem", "iterated_fderiv_succ_eq_comp_left", []], ["del", "theorem", "iterated_fderiv_succ_eq_comp_right", []], ["del", "theorem", "iterated_fderiv_with_zero_eq", []], ["del", "theorem", "iterated_fderiv_within_congr", []], ["del", "theorem", "iterated_fderiv_within_inter'", []], ["del", "theorem", "iterated_fderiv_within_inter", []], ["del", "theorem", "iterated_fderiv_within_inter_open", []], ["del", "theorem", "iterated_fderiv_within_of_is_open", []], ["del", "theorem", "iterated_fderiv_within_one_apply", []], ["del", "theorem", "iterated_fderiv_within_succ_apply_left", []], ["del", "theorem", "iterated_fderiv_within_succ_apply_right", []], ["del", "theorem", "iterated_fderiv_within_succ_eq_comp_left", []], ["del", "theorem", "iterated_fderiv_within_succ_eq_comp_right", []], ["del", "theorem", "iterated_fderiv_within_univ", []], ["del", "theorem", "iterated_fderiv_within_zero_apply", []], ["del", "theorem", "iterated_fderiv_within_zero_eq_comp", []], ["del", "theorem", "iterated_fderiv_zero_apply", []], ["del", "theorem", "iterated_fderiv_zero_eq_comp", []], ["del", "theorem", "norm_fderiv_iterated_fderiv", []], ["del", "theorem", "norm_fderiv_within_iterated_fderiv_within", []], ["del", "theorem", "norm_iterated_fderiv_fderiv", []], ["del", "theorem", "norm_iterated_fderiv_within_fderiv_within", []], ["del", "theorem", "norm_iterated_fderiv_within_zero", []], ["del", "theorem", "norm_iterated_fderiv_zero", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/cont_diff_def.lean", "changes": [["add", "theorem", "cont_diff_at", ["cont_diff"]], ["add", "theorem", "cont_diff_on", ["cont_diff"]], ["add", "theorem", "cont_diff_within_at", ["cont_diff"]], ["add", "theorem", "continuous", ["cont_diff"]], ["add", "theorem", "continuous_fderiv", ["cont_diff"]], ["add", "theorem", "continuous_fderiv_apply", ["cont_diff"]], ["add", "theorem", "continuous_iterated_fderiv", ["cont_diff"]], ["add", "theorem", "differentiable", ["cont_diff"]], ["add", "theorem", "differentiable_iterated_fderiv", ["cont_diff"]], ["add", "theorem", "of_le", ["cont_diff"]], ["add", "theorem", "of_succ", ["cont_diff"]], ["add", "theorem", "one_of_succ", ["cont_diff"]], ["add", "def", "cont_diff", []], ["add", "theorem", "cont_diff_all_iff_nat", []], ["add", "theorem", "congr_of_eventually_eq", ["cont_diff_at"]], ["add", "theorem", "cont_diff_within_at", ["cont_diff_at"]], ["add", "theorem", "continuous_at", ["cont_diff_at"]], ["add", "theorem", "differentiable_at", ["cont_diff_at"]], ["add", "theorem", "of_le", ["cont_diff_at"]], ["add", "def", "cont_diff_at", []], ["add", "theorem", "cont_diff_at_one_iff", []], ["add", "theorem", "cont_diff_at_succ_iff_has_fderiv_at", []], ["add", "theorem", "cont_diff_at_top", []], ["add", "theorem", "cont_diff_at_zero", []], ["add", "theorem", "cont_diff_iff_cont_diff_at", []], ["add", "theorem", "cont_diff_iff_continuous_differentiable", []], ["add", "theorem", "cont_diff_iff_forall_nat_le", []], ["add", "theorem", "cont_diff_iff_ftaylor_series", []], ["add", "theorem", "cont_diff_of_differentiable_iterated_fderiv", []], ["add", "theorem", "congr", ["cont_diff_on"]], ["add", "theorem", "congr_mono", ["cont_diff_on"]], ["add", "theorem", "cont_diff_within_at", ["cont_diff_on"]], ["add", "theorem", "continuous_on", ["cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_of_open", ["cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_within", ["cont_diff_on"]], ["add", "theorem", "continuous_on_iterated_fderiv_within", ["cont_diff_on"]], ["add", "theorem", "differentiable_on", ["cont_diff_on"]], ["add", "theorem", "differentiable_on_iterated_fderiv_within", ["cont_diff_on"]], ["add", "theorem", "fderiv_of_open", ["cont_diff_on"]], ["add", "theorem", "fderiv_within", ["cont_diff_on"]], ["add", "theorem", "ftaylor_series_within", ["cont_diff_on"]], ["add", "theorem", "mono", ["cont_diff_on"]], ["add", "theorem", "of_le", ["cont_diff_on"]], ["add", "theorem", "of_succ", ["cont_diff_on"]], ["add", "theorem", "one_of_succ", ["cont_diff_on"]], ["add", "def", "cont_diff_on", []], ["add", "theorem", "cont_diff_on_all_iff_nat", []], ["add", "theorem", "cont_diff_on_congr", []], ["add", "theorem", "cont_diff_on_iff_continuous_on_differentiable_on", []], ["add", "theorem", "cont_diff_on_iff_forall_nat_le", []], ["add", "theorem", "cont_diff_on_of_continuous_on_differentiable_on", []], ["add", "theorem", "cont_diff_on_of_differentiable_on", []], ["add", "theorem", "cont_diff_on_of_locally_cont_diff_on", []], ["add", "theorem", "cont_diff_on_succ_iff_fderiv_of_open", []], ["add", "theorem", "cont_diff_on_succ_iff_fderiv_within", []], ["add", "theorem", "cont_diff_on_succ_iff_has_fderiv_within_at", []], ["add", "theorem", "cont_diff_on_succ_of_fderiv_within", []], ["add", "theorem", "cont_diff_on_top", []], ["add", "theorem", "cont_diff_on_top_iff_fderiv_of_open", []], ["add", "theorem", "cont_diff_on_top_iff_fderiv_within", []], ["add", "theorem", "cont_diff_on_univ", []], ["add", "theorem", "cont_diff_on_zero", []], ["add", "theorem", "cont_diff_one_iff_fderiv", []], ["add", "theorem", "cont_diff_succ_iff_fderiv", []], ["add", "theorem", "cont_diff_top", []], ["add", "theorem", "cont_diff_top_iff_fderiv", []], ["add", "theorem", "congr'", ["cont_diff_within_at"]], ["add", "theorem", "congr", ["cont_diff_within_at"]], ["add", "theorem", "congr_nhds", ["cont_diff_within_at"]], ["add", "theorem", "congr_of_eventually_eq'", ["cont_diff_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["cont_diff_within_at"]], ["add", "theorem", "congr_of_eventually_eq_insert", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_at", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_on", ["cont_diff_within_at"]], ["add", "theorem", "continuous_within_at", ["cont_diff_within_at"]], ["add", "theorem", "differentiable_within_at'", ["cont_diff_within_at"]], ["add", "theorem", "differentiable_within_at", ["cont_diff_within_at"]], ["add", "theorem", "insert", ["cont_diff_within_at"]], ["add", "theorem", "mono", ["cont_diff_within_at"]], ["add", "theorem", "mono_of_mem", ["cont_diff_within_at"]], ["add", "theorem", "of_le", ["cont_diff_within_at"]], ["add", "def", "cont_diff_within_at", []], ["add", "theorem", "cont_diff_within_at_congr_nhds", []], ["add", "theorem", "cont_diff_within_at_iff_forall_nat_le", []], ["add", "theorem", "cont_diff_within_at_insert", []], ["add", "theorem", "cont_diff_within_at_inter'", []], ["add", "theorem", "cont_diff_within_at_inter", []], ["add", "theorem", "cont_diff_within_at_nat", []], ["add", "theorem", "cont_diff_within_at_succ_iff_has_fderiv_within_at'", []], ["add", "theorem", "cont_diff_within_at_succ_iff_has_fderiv_within_at", []], ["add", "theorem", "cont_diff_within_at_top", []], ["add", "theorem", "cont_diff_within_at_univ", []], ["add", "theorem", "cont_diff_within_at_zero", []], ["add", "theorem", "cont_diff_zero", []], ["add", "theorem", "fderiv_iterated_fderiv", []], ["add", "theorem", "cont_diff_within_at_iff", ["filter", "eventually_eq"]], ["add", "def", "ftaylor_series", []], ["add", "def", "ftaylor_series_within", []], ["add", "theorem", "ftaylor_series_within_univ", []], ["add", "theorem", "iterated_fderiv", ["has_compact_support"]], ["add", "theorem", "continuous", ["has_ftaylor_series_up_to"]], ["add", "theorem", "differentiable", ["has_ftaylor_series_up_to"]], ["add", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to"]], ["add", "theorem", "has_ftaylor_series_up_to_on", ["has_ftaylor_series_up_to"]], ["add", "theorem", "of_le", ["has_ftaylor_series_up_to"]], ["add", "theorem", "zero_eq'", ["has_ftaylor_series_up_to"]], ["add", "structure", "has_ftaylor_series_up_to", []], ["add", "theorem", "congr", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "continuous_on", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "differentiable_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "differentiable_on", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "eq_ftaylor_series_of_unique_diff_on", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "eventually_has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "has_fderiv_within_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "mono", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "of_le", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "zero_eq'", ["has_ftaylor_series_up_to_on"]], ["add", "structure", "has_ftaylor_series_up_to_on", []], ["add", "theorem", "has_ftaylor_series_up_to_on_succ_iff_left", []], ["add", "theorem", "has_ftaylor_series_up_to_on_succ_iff_right", []], ["add", "theorem", "has_ftaylor_series_up_to_on_top_iff", []], ["add", "theorem", "has_ftaylor_series_up_to_on_univ_iff", []], ["add", "theorem", "has_ftaylor_series_up_to_on_zero_iff", []], ["add", "theorem", "has_ftaylor_series_up_to_succ_iff_right", []], ["add", "theorem", "has_ftaylor_series_up_to_zero_iff", []], ["add", "theorem", "iterated_fderiv_one_apply", []], ["add", "theorem", "iterated_fderiv_succ_apply_left", []], ["add", "theorem", "iterated_fderiv_succ_apply_right", []], ["add", "theorem", "iterated_fderiv_succ_eq_comp_left", []], ["add", "theorem", "iterated_fderiv_succ_eq_comp_right", []], ["add", "theorem", "iterated_fderiv_with_zero_eq", []], ["add", "theorem", "iterated_fderiv_within_congr", []], ["add", "theorem", "iterated_fderiv_within_inter'", []], ["add", "theorem", "iterated_fderiv_within_inter", []], ["add", "theorem", "iterated_fderiv_within_inter_open", []], ["add", "theorem", "iterated_fderiv_within_of_is_open", []], ["add", "theorem", "iterated_fderiv_within_one_apply", []], ["add", "theorem", "iterated_fderiv_within_succ_apply_left", []], ["add", "theorem", "iterated_fderiv_within_succ_apply_right", []], ["add", "theorem", "iterated_fderiv_within_succ_eq_comp_left", []], ["add", "theorem", "iterated_fderiv_within_succ_eq_comp_right", []], ["add", "theorem", "iterated_fderiv_within_univ", []], ["add", "theorem", "iterated_fderiv_within_zero_apply", []], ["add", "theorem", "iterated_fderiv_within_zero_eq_comp", []], ["add", "theorem", "iterated_fderiv_zero_apply", []], ["add", "theorem", "iterated_fderiv_zero_eq_comp", []], ["add", "theorem", "norm_fderiv_iterated_fderiv", []], ["add", "theorem", "norm_fderiv_within_iterated_fderiv_within", []], ["add", "theorem", "norm_iterated_fderiv_fderiv", []], ["add", "theorem", "norm_iterated_fderiv_within_fderiv_within", []], ["add", "theorem", "norm_iterated_fderiv_within_zero", []], ["add", "theorem", "norm_iterated_fderiv_zero", []]]}]}, {"timestamp": 1679419737, "sha": "aa3a4205", "message": "chore(*): add mathlib4 synchronization comments (#18625)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.direct_sum.finsupp`\n* `algebra.free_algebra`\n* `ring_theory.noetherian`", "changes": [{"oldPath": "src/algebra/direct_sum/finsupp.lean", "newPath": "src/algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1679381496, "sha": "4601791e", "message": "feat(analysis/calculus/cont_diff): formula for iterated derivative of composition with linear maps (#18592)\nAnd missing API for derivatives and iterated derivatives.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "fderiv_right", ["cont_diff"]], ["del", "theorem", "cont_diff_at_fderiv", ["cont_diff_at"]], ["add", "theorem", "fderiv", ["cont_diff_at"]], ["add", "theorem", "fderiv_right", ["cont_diff_at"]], ["add", "theorem", "cont_diff_iff_ftaylor_series", []], ["del", "theorem", "cont_diff_on_iff_ftaylor_series", []], ["add", "theorem", "iterated_fderiv_within_comp_left", ["continuous_linear_equiv"]], ["add", "theorem", "iterated_fderiv_within_comp_right", ["continuous_linear_equiv"]], ["add", "theorem", "iterated_fderiv_comp_left", ["continuous_linear_map"]], ["add", "theorem", "iterated_fderiv_comp_right", ["continuous_linear_map"]], ["add", "theorem", "iterated_fderiv_within_comp_left", ["continuous_linear_map"]], ["add", "theorem", "iterated_fderiv_within_comp_right", ["continuous_linear_map"]], ["add", "theorem", "iterated_fderiv_add_apply'", []], ["add", "theorem", "iterated_fderiv_within_add_apply'", []], ["add", "theorem", "norm_iterated_fderiv_comp_left", ["linear_isometry"]], ["add", "theorem", "norm_iterated_fderiv_within_comp_left", ["linear_isometry"]], ["add", "theorem", "norm_iterated_fderiv_comp_left", ["linear_isometry_equiv"]], ["add", "theorem", "norm_iterated_fderiv_comp_right", ["linear_isometry_equiv"]], ["add", "theorem", "norm_iterated_fderiv_within_comp_left", ["linear_isometry_equiv"]], ["add", "theorem", "norm_iterated_fderiv_within_comp_right", ["linear_isometry_equiv"]], ["mod", "theorem", "norm_iterated_fderiv_within_zero", []], ["mod", "theorem", "norm_iterated_fderiv_zero", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "comp_right_differentiable_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_differentiable_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_differentiable_on_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_differentiable_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_fderiv", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_fderiv_within", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_within_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_right_has_fderiv_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "fderiv_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "fderiv_within_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "has_fderiv_at_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "has_fderiv_within_at_of_bilinear", ["continuous_linear_map"]], ["add", "theorem", "fderiv_within_congr'", []]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "def", "ulift", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "def", "comp_continuous_multilinear_mapL", ["continuous_linear_equiv"]], ["add", "theorem", "comp_continuous_multilinear_mapL_apply", ["continuous_linear_equiv"]], ["add", "theorem", "comp_continuous_multilinear_mapL_symm", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_continuous_linear_mapL_apply", ["continuous_multilinear_map"]], ["add", "def", "comp_continuous_linear_map_equivL", ["continuous_multilinear_map"]], ["add", "theorem", "comp_continuous_linear_map_equivL_apply", ["continuous_multilinear_map"]], ["add", "theorem", "comp_continuous_linear_map_equivL_symm", ["continuous_multilinear_map"]], ["add", "theorem", "norm_comp_continuous_linear_isometry_equiv", ["continuous_multilinear_map"]], ["add", "theorem", "norm_comp_continuous_linear_isometry_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_comp_continuous_multilinear_map", ["linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "norm_compL_le", ["continuous_linear_map"]], ["add", "theorem", "norm_compSL_le", ["continuous_linear_map"]], ["add", "theorem", "norm_precompL_le", ["continuous_linear_map"]], ["add", "theorem", "norm_precompR_le", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": []}]}, {"timestamp": 1679294955, "sha": "290a7ba0", "message": "chore(*): add mathlib4 synchronization comments (#18623)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.dual_number`\n* `data.finsupp.well_founded`\n* `data.nat.multiplicity`\n* `data.polynomial.div`\n* `data.zmod.algebra`\n* `data.zmod.parity`\n* `ring_theory.ideal.idempotent_fg`\n* `ring_theory.mv_polynomial.symmetric`", "changes": [{"oldPath": "src/algebra/dual_number.lean", "newPath": "src/algebra/dual_number.lean", "changes": []}, {"oldPath": "src/data/finsupp/well_founded.lean", "newPath": "src/data/finsupp/well_founded.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/zmod/algebra.lean", "newPath": "src/data/zmod/algebra.lean", "changes": []}, {"oldPath": "src/data/zmod/parity.lean", "newPath": "src/data/zmod/parity.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/idempotent_fg.lean", "newPath": "src/ring_theory/ideal/idempotent_fg.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/symmetric.lean", "newPath": "src/ring_theory/mv_polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1679257272, "sha": "40cc79df", "message": "feat(data/matrix/kronecker): lemmas about trace, det, and inv (#18610)\nThe key results here are:\n* `det (A ⊗ₖ B) = det A ^ fintype.card n * det B ^ fintype.card m`\n* `trace (A ⊗ₖ B) = trace A * trace B`\n* `(A ⊗ₖ B)⁻¹ = (A⁻¹ ⊗ₖ B⁻¹)`\nand the tensor analogues:\n* `det (A ⊗ₖₜ[R] B) = (det A ^ fintype.card n) ⊗ₜ[R] (det B ^ fintype.card m)`\n* `trace (A ⊗ₖₜ[R] B) = trace A ⊗ₜ[R] trace B`\nThis also adds some lemmas linking the kronecker product to block diagonal matrices.\nGeneralized from https://github.com/eric-wieser/lean-matrix-cookbook", "changes": [{"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": [["add", "theorem", "det_kronecker", ["matrix"]], ["add", "theorem", "det_kronecker_map_bilinear", ["matrix"]], ["add", "theorem", "det_kronecker_tmul", ["matrix"]], ["add", "theorem", "diagonal_kronecker", ["matrix"]], ["add", "theorem", "diagonal_kronecker_tmul", ["matrix"]], ["add", "theorem", "inv_kronecker", ["matrix"]], ["add", "theorem", "kronecker_diagonal", ["matrix"]], ["add", "theorem", "kronecker_map_diagonal_left", ["matrix"]], ["add", "theorem", "kronecker_map_diagonal_right", ["matrix"]], ["add", "theorem", "kronecker_one", ["matrix"]], ["add", "theorem", "kronecker_tmul_diagonal", ["matrix"]], ["add", "theorem", "one_kronecker", ["matrix"]], ["add", "theorem", "trace_kronecker", ["matrix"]], ["add", "theorem", "trace_kronecker_map_bilinear", ["matrix"]], ["add", "theorem", "trace_kronecker_tmul", ["matrix"]]]}]}, {"timestamp": 1679257271, "sha": "9abfa6f0", "message": "refactor(linear_algebra/matrix/hermitian): golf and generalize (#18565)\nA handful of these results can be proven trivially using results about `is_self_adjoint`.\nThis also generalizes the typeclass arguments throughout the file, though largely in a mathematically meaningless way.", "changes": [{"oldPath": "src/algebra/star/pi.lean", "newPath": "src/algebra/star/pi.lean", "changes": []}, {"oldPath": "src/algebra/star/prod.lean", "newPath": "src/algebra/star/prod.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "is_self_adjoint_add_star_self", []], ["add", "theorem", "is_self_adjoint_star_add_self", []]]}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": [["mod", "theorem", "is_hermitian_diagonal", ["matrix"]], ["add", "theorem", "is_hermitian_diagonal_of_self_adjoint", ["matrix"]], ["mod", "theorem", "is_hermitian_mul_conj_transpose_self", ["matrix"]], ["mod", "theorem", "is_hermitian_transpose_mul_self", ["matrix"]]]}]}, {"timestamp": 1679253240, "sha": "7ec29468", "message": "feat(number_theory/pell): group structure (#18568)\nThis continues the sequence of PRs related to the Pell equation.\nWe define a type for the solutions of `x^2 - d*y^2 = 1` and give it the structure of a commutative mutiplicative group with compatible negation.\nSee [this thread on Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Proving.20Pell's.20equation.20is.20solvable/near/338175458).", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["add", "theorem", "is_pell_solution_iff_mem_unitary", ["pell"]], ["add", "theorem", "coe_mk", ["pell", "solution₁"]], ["add", "theorem", "ext", ["pell", "solution₁"]], ["add", "def", "mk", ["pell", "solution₁"]], ["add", "theorem", "prop", ["pell", "solution₁"]], ["add", "theorem", "prop_x", ["pell", "solution₁"]], ["add", "theorem", "prop_y", ["pell", "solution₁"]], ["add", "theorem", "x_inv", ["pell", "solution₁"]], ["add", "theorem", "x_mk", ["pell", "solution₁"]], ["add", "theorem", "x_mul", ["pell", "solution₁"]], ["add", "theorem", "x_neg", ["pell", "solution₁"]], ["add", "theorem", "x_one", ["pell", "solution₁"]], ["add", "theorem", "y_inv", ["pell", "solution₁"]], ["add", "theorem", "y_mk", ["pell", "solution₁"]], ["add", "theorem", "y_mul", ["pell", "solution₁"]], ["add", "theorem", "y_neg", ["pell", "solution₁"]], ["add", "theorem", "y_one", ["pell", "solution₁"]], ["add", "def", "solution₁", ["pell"]]]}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": [["add", "theorem", "mker_norm_eq_unitary", ["zsqrtd"]], ["add", "theorem", "norm_eq_one_iff_mem_unitary", ["zsqrtd"]]]}]}, {"timestamp": 1679224615, "sha": "e96bdfbd", "message": "chore(linear_algebra/affine_space/affine_subspace) add set_like instance (#18622)\nNeeded for the port.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["mod", "theorem", "coe_injective", ["affine_subspace"]], ["add", "theorem", "ext", ["affine_subspace"]]]}, {"oldPath": "src/linear_algebra/affine_space/pointwise.lean", "newPath": "src/linear_algebra/affine_space/pointwise.lean", "changes": []}]}, {"timestamp": 1679214269, "sha": "c78cad35", "message": "chore(analysis/inner_product_space/basic): explicit `𝕜` argument for `innerₛₗ` and `innerSL` (#18613)\nA reasonable fraction of the uses of these functions required either `@` or a type annotation before this change.", "changes": [{"oldPath": "src/analysis/convex/cone/basic.lean", "newPath": "src/analysis/convex/cone/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "theorem", "innerSL_apply", []], ["mod", "theorem", "innerSL_apply_coe", []], ["mod", "theorem", "innerSL_apply_norm", []], ["mod", "theorem", "innerSL_flip_apply", []], ["mod", "theorem", "innerₛₗ_apply", []], ["mod", "theorem", "innerₛₗ_apply_coe", []], ["mod", "theorem", "orthogonal_eq_inter", []]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["mod", "theorem", "innerSL_norm", ["inner_product_space"]]]}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/two_dim.lean", "newPath": "src/analysis/inner_product_space/two_dim.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}]}, {"timestamp": 1679206209, "sha": "1dac236e", "message": "chore(*): add mathlib4 synchronization comments (#18621)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.group_ring_action.invariant`\n* `algebra.quadratic_discriminant`\n* `data.dfinsupp.well_founded`\n* `data.mv_polynomial.comm_ring`\n* `data.mv_polynomial.invertible`\n* `data.mv_polynomial.supported`\n* `data.mv_polynomial.variables`\n* `data.zmod.basic`\n* `ring_theory.finiteness`\n* `ring_theory.multiplicity`\n* `ring_theory.polynomial.chebyshev`\n* `ring_theory.valuation.integers`\n* `topology.category.Born`", "changes": [{"oldPath": "src/algebra/group_ring_action/invariant.lean", "newPath": "src/algebra/group_ring_action/invariant.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/well_founded.lean", "newPath": "src/data/dfinsupp/well_founded.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/invertible.lean", "newPath": "src/data/mv_polynomial/invertible.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/supported.lean", "newPath": "src/data/mv_polynomial/supported.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integers.lean", "newPath": "src/ring_theory/valuation/integers.lean", "changes": []}, {"oldPath": "src/topology/category/Born.lean", "newPath": "src/topology/category/Born.lean", "changes": []}]}, {"timestamp": 1679189781, "sha": "05101c3d", "message": "feat(algebra/group/commute): `div` lemmas (#18607)\n`commute` analogs of existing lemmas. Also normalise lemma names about `commute` and `nat.cast`/`int.cast`, following existing `int.cast` lemmas.", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": [["del", "theorem", "inv_inv", ["commute"]]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "cast_int_left", ["commute"]], ["mod", "theorem", "cast_int_right", ["commute"]], ["mod", "theorem", "cast_nat_mul_self", ["commute"]], ["mod", "theorem", "self_cast_nat_mul", ["commute"]], ["mod", "theorem", "self_cast_nat_mul_cast_nat_mul", ["commute"]]]}]}, {"timestamp": 1679182565, "sha": "4e7e7009", "message": "chore(linear_algebra/free_module/basic): golf a proof (#18615)\nWe construct the basis in another file, we may as well use it.", "changes": [{"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": []}]}, {"timestamp": 1679164174, "sha": "1f4705cc", "message": "perf(group_theory/torsion): Speedup `torsion_mul_equiv` (#18614)\nFrom 17s to 0.1s on my gitpod.", "changes": [{"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": [["add", "theorem", "torsion_mul_equiv_apply", ["monoid", "is_torsion"]], ["add", "theorem", "torsion_mul_equiv_symm_apply_coe", ["monoid", "is_torsion"]]]}]}, {"timestamp": 1679139498, "sha": "f430769b", "message": "chore(topology/algebra/module/basic): move a lemma to a new file (#18608)\nAlso slightly generalize from `[is_simple_module R R]` to `[is_simple_module R N]`.", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["del", "theorem", "is_closed_or_dense_ker", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/module/simple.lean", "changes": [["add", "theorem", "is_closed_or_dense_ker", ["linear_map"]]]}]}, {"timestamp": 1679133491, "sha": "027ff1e4", "message": "chore(geometry/euclidean/sphere/basic): generalize typeclasses (#18605)\n`cospherical_empty` asks for `P` to be a real inner product space when all it needs is `nonempty P`.\nThe motivation for this PR is that it fixes a linter error in #18583; lean complains that we are carrying around the type `V` for no reason.\nThe alternative here would be to force all these typeclass arguments to be present in the constructor for `euclidean_space.sphere` and use `no_lint unused_arguments`", "changes": [{"oldPath": "src/geometry/euclidean/sphere/basic.lean", "newPath": "src/geometry/euclidean/sphere/basic.lean", "changes": [["mod", "theorem", "cospherical_empty", ["euclidean_geometry"]], ["mod", "structure", "sphere", ["euclidean_geometry"]]]}]}, {"timestamp": 1679121616, "sha": "93287238", "message": "chore(*): add mathlib4 synchronization comments (#18595)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.algebra.subalgebra.pointwise`\n* `algebra.algebra.unitization`\n* `algebra.char_p.exp_char`\n* `algebra.direct_sum.module`\n* `algebra.field.ulift`\n* `algebra.monoid_algebra.degree`\n* `algebra.monoid_algebra.no_zero_divisors`\n* `algebra.triv_sq_zero_ext`\n* `category_theory.category.Bipointed`\n* `category_theory.concrete_category.bundled_hom`\n* `category_theory.elementwise`\n* `category_theory.preadditive.of_biproducts`\n* `data.complex.exponential`\n* `data.mv_polynomial.basic`\n* `data.mv_polynomial.comap`\n* `data.mv_polynomial.counit`\n* `data.mv_polynomial.rename`\n* `data.polynomial.cancel_leads`\n* `data.polynomial.identities`\n* `group_theory.perm.cycle.basic`\n* `measure_theory.card_measurable_space`\n* `ring_theory.algebra_tower`\n* `ring_theory.coprime.ideal`\n* `ring_theory.free_ring`\n* `ring_theory.ideal.prod`\n* `ring_theory.mv_polynomial.tower`\n* `ring_theory.polynomial.opposites`\n* `ring_theory.subring.pointwise`\n* `ring_theory.valuation.basic`\n* `topology.algebra.nonarchimedean.basic`\n* `topology.algebra.open_subgroup`\n* `topology.algebra.with_zero_topology`\n* `topology.homotopy.equiv`", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/pointwise.lean", "newPath": "src/algebra/algebra/subalgebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/algebra/unitization.lean", "newPath": "src/algebra/algebra/unitization.lean", "changes": []}, {"oldPath": "src/algebra/char_p/exp_char.lean", "newPath": "src/algebra/char_p/exp_char.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": []}, {"oldPath": "src/algebra/field/ulift.lean", "newPath": "src/algebra/field/ulift.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/degree.lean", "newPath": "src/algebra/monoid_algebra/degree.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/no_zero_divisors.lean", "newPath": "src/algebra/monoid_algebra/no_zero_divisors.lean", "changes": []}, {"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": []}, {"oldPath": "src/category_theory/category/Bipointed.lean", "newPath": "src/category_theory/category/Bipointed.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": "src/category_theory/elementwise.lean", "newPath": "src/category_theory/elementwise.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/of_biproducts.lean", "newPath": "src/category_theory/preadditive/of_biproducts.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/comap.lean", "newPath": "src/data/mv_polynomial/comap.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/counit.lean", "newPath": "src/data/mv_polynomial/counit.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": []}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/basic.lean", "newPath": "src/group_theory/perm/cycle/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime/ideal.lean", "newPath": "src/ring_theory/coprime/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/prod.lean", "newPath": "src/ring_theory/ideal/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/tower.lean", "newPath": "src/ring_theory/mv_polynomial/tower.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/opposites.lean", "newPath": "src/ring_theory/polynomial/opposites.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/pointwise.lean", "newPath": "src/ring_theory/subring/pointwise.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": []}, {"oldPath": "src/topology/homotopy/equiv.lean", "newPath": "src/topology/homotopy/equiv.lean", "changes": []}]}, {"timestamp": 1679113015, "sha": "e085d1df", "message": "feat(algebra/quadratic_discriminant): generalize, use `ne_zero` (#18606)\n* Add `discrim_neg`.\n* Add `discrim_eq_sq_of_quadratic_eq_zero`, an implication from `quadratic_eq_zero_iff_discrim_eq_sq` that doesn't need extra assumptions.\n* Assume `[ne_zero (2 : _)]` instead of `2 ≠ 0` or `[invertible (2 : _)]`.\n* Drop unneeded assumptions in `quadratic_ne_zero_of_discrim_ne_sq`, use `s ^ 2` instead of `s * s`.\n* Add `discrim_le_zero_of_nonpos` and `discrim_lt_zero_of_neg`.", "changes": [{"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": [["add", "theorem", "discrim_eq_sq_of_quadratic_eq_zero", []], ["add", "theorem", "discrim_le_zero_of_nonpos", []], ["add", "theorem", "discrim_lt_zero_of_neg", []], ["add", "theorem", "discrim_neg", []], ["mod", "theorem", "quadratic_eq_zero_iff_discrim_eq_sq", []], ["mod", "theorem", "quadratic_ne_zero_of_discrim_ne_sq", []]]}]}, {"timestamp": 1679101833, "sha": "20715f4a", "message": "feat(data/set/sups): Set family operations (#18172)\nFollowup to #17947. Add a similar `set` API (but do not define `set.disj_sups` because I don't need it), correct a few lemma names and connect to upper/lower sets.", "changes": [{"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["mod", "theorem", "image_subset_image₂_left", ["finset"]], ["mod", "theorem", "image_subset_image₂_right", ["finset"]], ["add", "theorem", "image₂_image₂_image₂_comm", ["finset"]]]}, {"oldPath": "src/data/finset/sups.lean", "newPath": "src/data/finset/sups.lean", "changes": [["mod", "theorem", "coe_infs", ["finset"]], ["mod", "theorem", "coe_sups", ["finset"]], ["add", "theorem", "disj_sups_disj_sups_disj_sups_comm", ["finset"]], ["add", "theorem", "empty_infs", ["finset"]], ["add", "theorem", "empty_sups", ["finset"]], ["mod", "theorem", "image_subset_infs_left", ["finset"]], ["mod", "theorem", "image_subset_infs_right", ["finset"]], ["mod", "theorem", "image_subset_sups_left", ["finset"]], ["mod", "theorem", "image_subset_sups_right", ["finset"]], ["del", "def", "infs", ["finset"]], ["add", "theorem", "infs_empty", ["finset"]], ["del", "theorem", "infs_empty_left", ["finset"]], ["del", "theorem", "infs_empty_right", ["finset"]], ["add", "theorem", "infs_eq_empty", ["finset"]], ["del", "theorem", "infs_eq_empty_iff", ["finset"]], ["add", "theorem", "infs_infs_infs_comm", ["finset"]], ["add", "theorem", "infs_nonempty", ["finset"]], ["del", "theorem", "infs_nonempty_iff", ["finset"]], ["mod", "theorem", "infs_singleton", ["finset"]], ["del", "theorem", "infs_singleton_left'", ["finset"]], ["del", "theorem", "infs_singleton_left", ["finset"]], ["del", "theorem", "infs_singleton_right", ["finset"]], ["add", "theorem", "infs_sups_subset_left", ["finset"]], ["add", "theorem", "infs_sups_subset_right", ["finset"]], ["mod", "theorem", "mem_infs", ["finset"]], ["mod", "theorem", "mem_sups", ["finset"]], ["del", "theorem", "infs", ["finset", "nonempty"]], ["del", "theorem", "sups", ["finset", "nonempty"]], ["add", "theorem", "singleton_infs", ["finset"]], ["add", "theorem", "singleton_infs_singleton", ["finset"]], ["add", "theorem", "singleton_sups", ["finset"]], ["add", "theorem", "singleton_sups_singleton", ["finset"]], ["del", "def", "sups", ["finset"]], ["add", "theorem", "sups_empty", ["finset"]], ["del", "theorem", "sups_empty_left", ["finset"]], ["del", "theorem", "sups_empty_right", ["finset"]], ["add", "theorem", "sups_eq_empty", ["finset"]], ["del", "theorem", "sups_eq_empty_iff", ["finset"]], ["add", "theorem", "sups_infs_subset_left", ["finset"]], ["add", "theorem", "sups_infs_subset_right", ["finset"]], ["add", "theorem", "sups_nonempty", ["finset"]], ["del", "theorem", "sups_nonempty_iff", ["finset"]], ["mod", "theorem", "sups_singleton", ["finset"]], ["del", "theorem", "sups_singleton_left'", ["finset"]], ["del", "theorem", "sups_singleton_left", ["finset"]], ["del", "theorem", "sups_singleton_right", ["finset"]], ["add", "theorem", "sups_sups_sups_comm", ["finset"]]]}, {"oldPath": "src/data/set/n_ary.lean", "newPath": "src/data/set/n_ary.lean", "changes": [["add", "theorem", "image2_image2_image2_comm", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/sups.lean", "changes": [["add", "theorem", "lower_closure_infs", []], ["add", "theorem", "Union_image_inf_left", ["set"]], ["add", "theorem", "Union_image_inf_right", ["set"]], ["add", "theorem", "Union_image_sup_left", ["set"]], ["add", "theorem", "Union_image_sup_right", ["set"]], ["add", "theorem", "empty_infs", ["set"]], ["add", "theorem", "empty_sups", ["set"]], ["add", "theorem", "forall_infs_iff", ["set"]], ["add", "theorem", "forall_sups_iff", ["set"]], ["add", "theorem", "image_inf_prod", ["set"]], ["add", "theorem", "image_subset_infs_left", ["set"]], ["add", "theorem", "image_subset_infs_right", ["set"]], ["add", "theorem", "image_subset_sups_left", ["set"]], ["add", "theorem", "image_subset_sups_right", ["set"]], ["add", "theorem", "image_sup_prod", ["set"]], ["add", "theorem", "inf_mem_infs", ["set"]], ["add", "theorem", "infs_assoc", ["set"]], ["add", "theorem", "infs_comm", ["set"]], ["add", "theorem", "infs_empty", ["set"]], ["add", "theorem", "infs_eq_empty", ["set"]], ["add", "theorem", "infs_infs_infs_comm", ["set"]], ["add", "theorem", "infs_inter_subset_left", ["set"]], ["add", "theorem", "infs_inter_subset_right", ["set"]], ["add", "theorem", "infs_left_comm", ["set"]], ["add", "theorem", "infs_nonempty", ["set"]], ["add", "theorem", "infs_right_comm", ["set"]], ["add", "theorem", "infs_singleton", ["set"]], ["add", "theorem", "infs_subset", ["set"]], ["add", "theorem", "infs_subset_iff", ["set"]], ["add", "theorem", "infs_subset_left", ["set"]], ["add", "theorem", "infs_subset_right", ["set"]], ["add", "theorem", "infs_sups_subset_left", ["set"]], ["add", "theorem", "infs_sups_subset_right", ["set"]], ["add", "theorem", "infs_union_left", ["set"]], ["add", "theorem", "infs_union_right", ["set"]], ["add", "theorem", "mem_infs", ["set"]], ["add", "theorem", "mem_sups", ["set"]], ["add", "theorem", "of_infs_left", ["set", "nonempty"]], ["add", "theorem", "of_infs_right", ["set", "nonempty"]], ["add", "theorem", "of_sups_left", ["set", "nonempty"]], ["add", "theorem", "of_sups_right", ["set", "nonempty"]], ["add", "theorem", "singleton_infs", ["set"]], ["add", "theorem", "singleton_infs_singleton", ["set"]], ["add", "theorem", "singleton_sups", ["set"]], ["add", "theorem", "singleton_sups_singleton", ["set"]], ["add", "theorem", "sup_mem_sups", ["set"]], ["add", "theorem", "sups_assoc", ["set"]], ["add", "theorem", "sups_comm", ["set"]], ["add", "theorem", "sups_empty", ["set"]], ["add", "theorem", "sups_eq_empty", ["set"]], ["add", "theorem", "sups_infs_subset_left", ["set"]], ["add", "theorem", "sups_infs_subset_right", ["set"]], ["add", "theorem", "sups_inter_subset_left", ["set"]], ["add", "theorem", "sups_inter_subset_right", ["set"]], ["add", "theorem", "sups_left_comm", ["set"]], ["add", "theorem", "sups_nonempty", ["set"]], ["add", "theorem", "sups_right_comm", ["set"]], ["add", "theorem", "sups_singleton", ["set"]], ["add", "theorem", "sups_subset", ["set"]], ["add", "theorem", "sups_subset_iff", ["set"]], ["add", "theorem", "sups_subset_left", ["set"]], ["add", "theorem", "sups_subset_right", ["set"]], ["add", "theorem", "sups_sups_sups_comm", ["set"]], ["add", "theorem", "sups_union_left", ["set"]], ["add", "theorem", "sups_union_right", ["set"]], ["add", "theorem", "upper_closure_sups", []]]}]}, {"timestamp": 1679080682, "sha": "acebd8d4", "message": "feat(algebra/*/opposite): Missing instances (#18602)\nA few missing instances about `nat.cast`/`int.cast`/`rat.cast` and `mul_opposite`/`add_opposite`.\nAlso add the (weirdly) missing `add_comm_group_with_one → add_comm_monoid_with_one`.\nFinally, this changes the defeq of `rat.cast` on `mul_opposite` to be simpler.", "changes": [{"oldPath": "src/algebra/field/opposite.lean", "newPath": "src/algebra/field/opposite.lean", "changes": [["add", "theorem", "op_rat_cast", ["mul_opposite"]], ["add", "theorem", "unop_rat_cast", ["mul_opposite"]]]}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["add", "theorem", "op_int_cast", ["mul_opposite"]], ["add", "theorem", "op_nat_cast", ["mul_opposite"]], ["add", "theorem", "unop_int_cast", ["mul_opposite"]], ["add", "theorem", "unop_nat_cast", ["mul_opposite"]]]}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/data/int/cast/defs.lean", "newPath": "src/data/int/cast/defs.lean", "changes": []}, {"oldPath": "src/data/int/cast/lemmas.lean", "newPath": "src/data/int/cast/lemmas.lean", "changes": [["del", "theorem", "op_int_cast", ["mul_opposite"]], ["del", "theorem", "unop_int_cast", ["mul_opposite"]]]}, {"oldPath": "src/data/nat/cast/basic.lean", "newPath": "src/data/nat/cast/basic.lean", "changes": [["del", "theorem", "op_nat_cast", ["mul_opposite"]], ["del", "theorem", "unop_nat_cast", ["mul_opposite"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["del", "theorem", "op_rat_cast", ["mul_opposite"]], ["del", "theorem", "unop_rat_cast", ["mul_opposite"]]]}]}, {"timestamp": 1679065091, "sha": "02ba8949", "message": "chore (data/finset/sym): remove unnecessary alias (#18603)\nSee the discussion in this [PR](https://github.com/leanprover-community/mathlib4/pull/2168)", "changes": [{"oldPath": "src/data/finset/sym.lean", "newPath": "src/data/finset/sym.lean", "changes": []}]}, {"timestamp": 1679065090, "sha": "9f0d61b4", "message": "fix(analysis/inner_product_space/pi_L2): add missing type cast functions (#18574)\nThe preferred way to convert between `ι → 𝕜` and `euclidean_space 𝕜 ι` is via `pi_Lp.equiv`, as this preserves the right typing information.\nWe use the local notation `⟪x, y⟫ₑ` to refer the euclidean inner product of `x y : ι → 𝕜`, which inserts the casting within the notation.\nThis adds a new definition `matrix.to_euclidean_lin` as a shorthand to turn a matrix into a `linear_map` over `euclidean_space`.\nIt also generalizes `inner_matrix_row_row` and `inner_matrix_col_col` away from `fin n` to arbitrary index types.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["del", "theorem", "conj_transpose_eq_adjoint", ["matrix"]], ["add", "theorem", "to_euclidean_lin_conj_transpose_eq_adjoint", ["matrix"]]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "inner_pi_Lp_equiv_symm", ["euclidean_space"]], ["mod", "theorem", "inner_matrix_col_col", []], ["mod", "theorem", "inner_matrix_row_row", []], ["add", "theorem", "pi_Lp_equiv_to_euclidean_lin", ["matrix"]], ["add", "def", "to_euclidean_lin", ["matrix"]], ["add", "theorem", "to_euclidean_lin_eq_to_lin", ["matrix"]], ["add", "theorem", "to_euclidean_lin_pi_Lp_equiv_symm", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/ldl.lean", "newPath": "src/linear_algebra/matrix/ldl.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/spectrum.lean", "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": []}]}, {"timestamp": 1679065089, "sha": "88b8a77d", "message": "chore(topology/basic): backport a generalization to Sort (#18544)\nmathport currently complains that these don't align.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "is_open_Inter", []]]}]}, {"timestamp": 1679056225, "sha": "75957565", "message": "chore(data/fintype/fin): add Iio lemmas (#18600)\nThese are the analogue to the existing `Ioi` lemmas in this file.\n`Iio_last_eq_map` is the dual of `Ioi_zero_eq_map`, and `Iio_cast_succ` is the dual of `Ioi_succ`.\nI couldn't find a better home for `map_subtype_embedding_univ`.\nNote that it is deliberately `subtype_embedding` and not `coe_embedding` to match the similarly-misnamed `fin.map_subtype_embedding_Iio`", "changes": [{"oldPath": "src/data/fintype/fin.lean", "newPath": "src/data/fintype/fin.lean", "changes": [["add", "theorem", "Iio_cast_succ", ["fin"]], ["add", "theorem", "Iio_last_eq_map", ["fin"]], ["add", "theorem", "map_subtype_embedding_univ", ["fin"]]]}]}, {"timestamp": 1679056223, "sha": "2d5739b6", "message": "chore(ring_theory/power_series/basic): remove commutativity assumption (#18599)\nAlso moves a lost lemma that belongs in an earlier file.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "algebra_map_apply", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["del", "theorem", "algebra_map_apply", ["mv_polynomial"]]]}]}, {"timestamp": 1679045949, "sha": "30413fc8", "message": "chore(algebra): generalize typeclass arguments from field to semifield (#18597)\nThis generalizes some typeclass arguments from `field` to `semifield` and `division_ring` to `division_semiring`.\nThe proof for `map_inv_nat_cast_smul` had to be rewritten, as it was previously proved in terms of `map_inv_int_cast_smul`.\nThe latter is now instead proved in terms of the former.\nForward-ported in https://github.com/leanprover-community/mathlib4/pull/2926", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "inv_nat_cast_smul_comm", []], ["mod", "theorem", "inv_nat_cast_smul_eq", []], ["mod", "theorem", "map_inv_nat_cast_smul", []]]}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["mod", "theorem", "const_inv_mul", ["function", "antiperiodic"]], ["mod", "theorem", "const_inv_smul₀", ["function", "antiperiodic"]], ["mod", "theorem", "const_mul", ["function", "antiperiodic"]], ["mod", "theorem", "const_smul₀", ["function", "antiperiodic"]], ["mod", "theorem", "mul_const'", ["function", "antiperiodic"]], ["mod", "theorem", "mul_const", ["function", "antiperiodic"]], ["mod", "theorem", "mul_const_inv", ["function", "antiperiodic"]], ["mod", "theorem", "const_inv_mul", ["function", "periodic"]], ["mod", "theorem", "const_inv_smul₀", ["function", "periodic"]], ["mod", "theorem", "const_smul₀", ["function", "periodic"]], ["mod", "theorem", "div_const", ["function", "periodic"]], ["mod", "theorem", "mul_const'", ["function", "periodic"]], ["mod", "theorem", "mul_const", ["function", "periodic"]], ["mod", "theorem", "mul_const_inv", ["function", "periodic"]]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["mod", "theorem", "star_div'", []], ["mod", "theorem", "star_inv'", []], ["mod", "theorem", "star_zpow₀", []]]}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": [["mod", "theorem", "star_inv_nat_cast_smul", []]]}, {"oldPath": "src/algebra/star/pointwise.lean", "newPath": "src/algebra/star/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "conj_transpose_inv_nat_cast_smul", ["matrix"]]]}]}, {"timestamp": 1679013154, "sha": "13e18cfa", "message": "chore(algebra/ring/ulift): Split off and golf field instances (#18590)\nMove field-like instances on `ulift` from `algebra.ring.ulift` to a new file `algebra.field.ulift`. Golf them by declaring the `has_nat_cast` and `has_int_cast` instances earlier.", "changes": [{"oldPath": null, "newPath": "src/algebra/field/ulift.lean", "changes": [["add", "theorem", "down_rat_cast", ["ulift"]], ["add", "theorem", "up_rat_cast", ["ulift"]]]}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": [["add", "theorem", "down_int_cast", ["ulift"]], ["add", "theorem", "down_nat_cast", ["ulift"]], ["del", "theorem", "int_cast_down", ["ulift"]], ["del", "theorem", "nat_cast_down", ["ulift"]], ["add", "theorem", "up_int_cast", ["ulift"]], ["add", "theorem", "up_nat_cast", ["ulift"]]]}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": [["del", "theorem", "rat_cast_down", ["ulift"]]]}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}]}, {"timestamp": 1678999283, "sha": "da3fc4a3", "message": "feat(analysis/normed_space/quaternion_exponential): lemmas about the quaternion exponential (#18349)\nThis gives the result that $\\exp q = \\exp r (\\cos \\|v\\| + \\frac{v}{\\|v\\|} \\sin \\|v\\|)$ where $r$ is the real part and $v$ the imaginary part.\nAfter adding some missing algebraic lemmas, the result that $\\|\\exp q\\| = \\|\\exp r\\|$ is then simple.", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["add", "theorem", "conj_eq_neg", ["quaternion"]], ["add", "theorem", "conj_eq_self", ["quaternion"]], ["del", "theorem", "conj_fixed", ["quaternion"]], ["add", "theorem", "norm_sq_add", ["quaternion"]], ["add", "theorem", "norm_sq_smul", ["quaternion"]], ["add", "theorem", "sq_eq_neg_norm_sq", ["quaternion"]], ["add", "theorem", "sq_eq_norm_sq", ["quaternion"]], ["add", "theorem", "conj_eq_neg", ["quaternion_algebra"]], ["add", "theorem", "conj_eq_self", ["quaternion_algebra"]], ["del", "theorem", "conj_fixed", ["quaternion_algebra"]]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "exp_series_apply_zero", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/quaternion_exponential.lean", "changes": [["add", "theorem", "conj_exp", ["quaternion"]], ["add", "theorem", "exp_coe", ["quaternion"]], ["add", "theorem", "exp_eq", ["quaternion"]], ["add", "theorem", "exp_of_re_eq_zero", ["quaternion"]], ["add", "theorem", "has_sum_exp_series_of_imaginary", ["quaternion"]], ["add", "theorem", "im_exp", ["quaternion"]], ["add", "theorem", "norm_exp", ["quaternion"]], ["add", "theorem", "norm_sq_exp", ["quaternion"]], ["add", "theorem", "re_exp", ["quaternion"]]]}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": [["add", "theorem", "has_sum_coe", ["quaternion"]], ["add", "theorem", "summable_coe", ["quaternion"]], ["add", "theorem", "tsum_coe", ["quaternion"]]]}]}, {"timestamp": 1678986223, "sha": "acee671f", "message": "chore(data/{nat,int}/cast/field): generalize to division_ring (#18598)\nNotably, this now works on quaternions.\nForward-ported at https://github.com/leanprover-community/mathlib4/pull/2928", "changes": [{"oldPath": "src/algebra/char_zero/lemmas.lean", "newPath": "src/algebra/char_zero/lemmas.lean", "changes": [["mod", "theorem", "cast_div_char_zero", ["nat"]]]}, {"oldPath": "src/data/int/cast/field.lean", "newPath": "src/data/int/cast/field.lean", "changes": [["mod", "theorem", "cast_div", ["int"]], ["mod", "theorem", "cast_neg_nat_cast", ["int"]]]}, {"oldPath": "src/data/int/char_zero.lean", "newPath": "src/data/int/char_zero.lean", "changes": [["mod", "theorem", "cast_div_char_zero", ["int"]]]}, {"oldPath": "src/data/nat/cast/field.lean", "newPath": "src/data/nat/cast/field.lean", "changes": [["mod", "theorem", "cast_div", ["nat"]], ["mod", "theorem", "cast_div_div_div_cancel_right", ["nat"]]]}]}, {"timestamp": 1678986221, "sha": "34d37973", "message": "feat(number_theory/modular_forms): Jacobi theta function (#18564)\nDefine Jacobi's theta function, and prove its functional equation using Poisson summation.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": [["mod", "theorem", "modular_S_smul", ["upper_half_plane"]], ["add", "theorem", "modular_T_smul", ["upper_half_plane"]], ["add", "theorem", "modular_T_zpow_smul", ["upper_half_plane"]]]}, {"oldPath": "src/analysis/special_functions/gaussian.lean", "newPath": "src/analysis/special_functions/gaussian.lean", "changes": [["add", "theorem", "tsum_exp_neg_mul_int_sq", ["complex"]], ["mod", "theorem", "fourier_transform_gaussian_pi", []], ["add", "theorem", "is_o_exp_neg_mul_sq_cocompact", []], ["add", "theorem", "tsum_exp_neg_mul_int_sq", ["real"]], ["add", "theorem", "tendsto_rpow_abs_mul_exp_neg_mul_sq_cocompact", []]]}, {"oldPath": null, "newPath": "src/number_theory/modular_forms/jacobi_theta.lean", "changes": [["add", "theorem", "jacobi_theta_S_smul", []], ["add", "theorem", "jacobi_theta_T_sq_smul", []], ["add", "theorem", "jacobi_theta_summable", []], ["add", "theorem", "jacobi_theta_two_vadd", []], ["add", "theorem", "jacobi_theta_unif_summable", []]]}]}, {"timestamp": 1678986220, "sha": "22f57723", "message": "feat(analysis/inner_product_space/projection): express `orthogonal_projection` using `linear_proj_of_is_compl` (#18243)\nWe currently don't have any link between `orthogonal_projection` and `linear_proj_of_is_compl`, which blocks us from applying general algebraic facts about projection to `orthogonal_projection`. This PR fixes that.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "orthogonal_projection_coe_linear_map_eq_linear_proj", []], ["add", "theorem", "orthogonal_projection_eq_linear_proj", []]]}]}, {"timestamp": 1678973635, "sha": "b3f4f007", "message": "chore(algebra/order/nonneg/*): Separate `floor_ring` from `field` (#18596)\nMove the `archimedean` and `floor_ring` instances out of `algebra.order.nonneg.field` into a new file `algebra.order.nonneg.floor`.", "changes": [{"oldPath": "src/algebra/order/nonneg/field.lean", "newPath": "src/algebra/order/nonneg/field.lean", "changes": [["del", "theorem", "nat_ceil_coe", ["nonneg"]], ["del", "theorem", "nat_floor_coe", ["nonneg"]]]}, {"oldPath": null, "newPath": "src/algebra/order/nonneg/floor.lean", "changes": [["add", "theorem", "nat_ceil_coe", ["nonneg"]], ["add", "theorem", "nat_floor_coe", ["nonneg"]]]}, {"oldPath": "src/data/rat/nnrat.lean", "newPath": "src/data/rat/nnrat.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1678973634, "sha": "acb3d204", "message": "chore(algebra/order/field/basic): Rename `pow_minus_two_nonneg` (#18591)\nRename `pow_minus_two_nonneg` to `zpow_neg_two_nonneg` and move it to `algebra.order.field.power`.", "changes": [{"oldPath": "src/algebra/order/field/basic.lean", "newPath": "src/algebra/order/field/basic.lean", "changes": [["del", "theorem", "pow_minus_two_nonneg", []]]}, {"oldPath": "src/algebra/order/field/power.lean", "newPath": "src/algebra/order/field/power.lean", "changes": [["add", "theorem", "zpow_neg_two_nonneg", []]]}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}]}, {"timestamp": 1678965319, "sha": "eea141bc", "message": "refactor(geometry/euclidean): split out spheres (#18220)\nRearrange material related to spheres as follows:\n* `geometry.euclidean.sphere.power` has most of the content from the previous `geometry.euclidean.sphere` (intersecting chords / secants, which at some point should probably be refactored using an explicit definition of the power of a point).\n* `geometry.euclidean.sphere.ptolemy` has the proof of Ptolemy's theorem that was previously in `geometry.euclidean.sphere`.\n* `geometry.euclidean.sphere.basic` has most of the material previously in `geometry.euclidean.basic`: definitions of `sphere`, `cospherical` and `concyclic` and associated lemmas.\n* `geometry.euclidean.sphere.second_inter` has the definition and lemmas about `second_inter`.\nThere are no changes to API or proofs.", "changes": [{"oldPath": "archive/imo/imo2019_q2.lean", "newPath": "archive/imo/imo2019_q2.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["del", "theorem", "subset", ["euclidean_geometry", "concyclic"]], ["del", "structure", "concyclic", ["euclidean_geometry"]], ["del", "theorem", "concyclic_empty", ["euclidean_geometry"]], ["del", "theorem", "concyclic_pair", ["euclidean_geometry"]], ["del", "theorem", "concyclic_singleton", ["euclidean_geometry"]], ["del", "theorem", "affine_independent", ["euclidean_geometry", "cospherical"]], ["del", "theorem", "affine_independent_of_mem_of_ne", ["euclidean_geometry", "cospherical"]], ["del", "theorem", "affine_independent_of_ne", ["euclidean_geometry", "cospherical"]], ["del", "theorem", "subset", ["euclidean_geometry", "cospherical"]], ["del", "def", "cospherical", ["euclidean_geometry"]], ["del", "theorem", "cospherical_def", ["euclidean_geometry"]], ["del", "theorem", "cospherical_empty", ["euclidean_geometry"]], ["del", "theorem", "cospherical_iff_exists_sphere", ["euclidean_geometry"]], ["del", "theorem", "cospherical_pair", ["euclidean_geometry"]], ["del", "theorem", "cospherical_singleton", ["euclidean_geometry"]], ["del", "theorem", "dist_center_eq_dist_center_of_mem_sphere'", ["euclidean_geometry"]], ["del", "theorem", "dist_center_eq_dist_center_of_mem_sphere", ["euclidean_geometry"]], ["del", "theorem", "dist_of_mem_subset_mk_sphere", ["euclidean_geometry"]], ["del", "theorem", "dist_of_mem_subset_sphere", ["euclidean_geometry"]], ["del", "theorem", "eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two", ["euclidean_geometry"]], ["del", "theorem", "eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two", ["euclidean_geometry"]], ["del", "theorem", "inner_nonneg_of_dist_le_radius", ["euclidean_geometry"]], ["del", "theorem", "inner_pos_of_dist_lt_radius", ["euclidean_geometry"]], ["del", "theorem", "inner_pos_or_eq_of_dist_le_radius", ["euclidean_geometry"]], ["del", "theorem", "inner_vsub_vsub_of_mem_sphere_of_mem_sphere", ["euclidean_geometry"]], ["del", "theorem", "mem_sphere'", ["euclidean_geometry"]], ["del", "theorem", "mem_sphere", ["euclidean_geometry"]], ["del", "theorem", "sbtw_of_collinear_of_dist_center_lt_radius", ["euclidean_geometry"]], ["del", "theorem", "center_eq_iff_eq_of_mem", ["euclidean_geometry", "sphere"]], ["del", "theorem", "center_ne_iff_ne_of_mem", ["euclidean_geometry", "sphere"]], ["del", "theorem", "coe_def", ["euclidean_geometry", "sphere"]], ["del", "theorem", "coe_mk", ["euclidean_geometry", "sphere"]], ["del", "theorem", "cospherical", ["euclidean_geometry", "sphere"]], ["del", "theorem", "eq_or_eq_second_inter_of_mem_mk'_span_singleton_iff_mem", ["euclidean_geometry", "sphere"]], ["del", "theorem", "mem_coe", ["euclidean_geometry", "sphere"]], ["del", "theorem", "mk_center", ["euclidean_geometry", "sphere"]], ["del", "theorem", "mk_center_radius", ["euclidean_geometry", "sphere"]], ["del", "theorem", "mk_radius", ["euclidean_geometry", "sphere"]], ["del", "theorem", "ne_iff", ["euclidean_geometry", "sphere"]], ["del", "theorem", "sbtw_second_inter", ["euclidean_geometry", "sphere"]], ["del", "def", "second_inter", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_collinear", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_dist", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_eq_line_map", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_eq_self_iff", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_mem", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_neg", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_second_inter", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_smul", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_vsub_mem_affine_span", ["euclidean_geometry", "sphere"]], ["del", "theorem", "second_inter_zero", ["euclidean_geometry", "sphere"]], ["del", "theorem", "wbtw_second_inter", ["euclidean_geometry", "sphere"]], ["del", "structure", "sphere", ["euclidean_geometry"]], ["del", "theorem", "subset_sphere", ["euclidean_geometry"]], ["del", "theorem", "wbtw_of_collinear_of_dist_center_le_radius", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": null, "newPath": "src/geometry/euclidean/sphere/basic.lean", "changes": [["add", "theorem", "subset", ["euclidean_geometry", "concyclic"]], ["add", "structure", "concyclic", ["euclidean_geometry"]], ["add", "theorem", "concyclic_empty", ["euclidean_geometry"]], ["add", "theorem", "concyclic_pair", ["euclidean_geometry"]], ["add", "theorem", "concyclic_singleton", ["euclidean_geometry"]], ["add", "theorem", "affine_independent", ["euclidean_geometry", "cospherical"]], ["add", "theorem", "affine_independent_of_mem_of_ne", ["euclidean_geometry", "cospherical"]], ["add", "theorem", "affine_independent_of_ne", ["euclidean_geometry", "cospherical"]], ["add", "theorem", "subset", ["euclidean_geometry", "cospherical"]], ["add", "def", "cospherical", ["euclidean_geometry"]], ["add", "theorem", "cospherical_def", ["euclidean_geometry"]], ["add", "theorem", "cospherical_empty", ["euclidean_geometry"]], ["add", "theorem", "cospherical_iff_exists_sphere", ["euclidean_geometry"]], ["add", "theorem", "cospherical_pair", ["euclidean_geometry"]], ["add", "theorem", "cospherical_singleton", ["euclidean_geometry"]], ["add", "theorem", "dist_center_eq_dist_center_of_mem_sphere'", ["euclidean_geometry"]], ["add", "theorem", "dist_center_eq_dist_center_of_mem_sphere", ["euclidean_geometry"]], ["add", "theorem", "dist_of_mem_subset_mk_sphere", ["euclidean_geometry"]], ["add", "theorem", "dist_of_mem_subset_sphere", ["euclidean_geometry"]], ["add", "theorem", "eq_of_mem_sphere_of_mem_sphere_of_finrank_eq_two", ["euclidean_geometry"]], ["add", "theorem", "eq_of_mem_sphere_of_mem_sphere_of_mem_of_finrank_eq_two", ["euclidean_geometry"]], ["add", "theorem", "inner_nonneg_of_dist_le_radius", ["euclidean_geometry"]], ["add", "theorem", "inner_pos_of_dist_lt_radius", ["euclidean_geometry"]], ["add", "theorem", "inner_pos_or_eq_of_dist_le_radius", ["euclidean_geometry"]], ["add", "theorem", "inner_vsub_vsub_of_mem_sphere_of_mem_sphere", ["euclidean_geometry"]], ["add", "theorem", "mem_sphere'", ["euclidean_geometry"]], ["add", "theorem", "mem_sphere", ["euclidean_geometry"]], ["add", "theorem", "sbtw_of_collinear_of_dist_center_lt_radius", ["euclidean_geometry"]], ["add", "theorem", "center_eq_iff_eq_of_mem", ["euclidean_geometry", "sphere"]], ["add", "theorem", "center_ne_iff_ne_of_mem", ["euclidean_geometry", "sphere"]], ["add", "theorem", "coe_def", ["euclidean_geometry", "sphere"]], ["add", "theorem", "coe_mk", ["euclidean_geometry", "sphere"]], ["add", "theorem", "cospherical", ["euclidean_geometry", "sphere"]], ["add", "theorem", "mem_coe", ["euclidean_geometry", "sphere"]], ["add", "theorem", "mk_center", ["euclidean_geometry", "sphere"]], ["add", "theorem", "mk_center_radius", ["euclidean_geometry", "sphere"]], ["add", "theorem", "mk_radius", ["euclidean_geometry", "sphere"]], ["add", "theorem", "ne_iff", ["euclidean_geometry", "sphere"]], ["add", "structure", "sphere", ["euclidean_geometry"]], ["add", "theorem", "subset_sphere", ["euclidean_geometry"]], ["add", "theorem", "wbtw_of_collinear_of_dist_center_le_radius", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere/power.lean", "changes": [["del", "theorem", "mul_dist_add_mul_dist_eq_mul_dist_of_cospherical", ["euclidean_geometry"]]]}, {"oldPath": null, "newPath": "src/geometry/euclidean/sphere/ptolemy.lean", "changes": [["add", "theorem", "mul_dist_add_mul_dist_eq_mul_dist_of_cospherical", ["euclidean_geometry"]]]}, {"oldPath": null, "newPath": "src/geometry/euclidean/sphere/second_inter.lean", "changes": [["add", "theorem", "eq_or_eq_second_inter_of_mem_mk'_span_singleton_iff_mem", ["euclidean_geometry", "sphere"]], ["add", "theorem", "sbtw_second_inter", ["euclidean_geometry", "sphere"]], ["add", "def", "second_inter", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_collinear", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_dist", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_eq_line_map", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_eq_self_iff", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_mem", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_neg", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_second_inter", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_smul", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_vsub_mem_affine_span", ["euclidean_geometry", "sphere"]], ["add", "theorem", "second_inter_zero", ["euclidean_geometry", "sphere"]], ["add", "theorem", "wbtw_second_inter", ["euclidean_geometry", "sphere"]]]}]}, {"timestamp": 1678954219, "sha": "5120cf49", "message": "chore(data/mv_polynomial): reverse an import (#18593)\nAs proposed on [zulip](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.232887.20Data.2EMvPolynomial.2EMonad/near/342140597)", "changes": [{"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": [["add", "theorem", "mem_vars_bind₁", ["mv_polynomial"]], ["add", "theorem", "vars_bind₁", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["del", "theorem", "mem_vars_bind₁", ["mv_polynomial"]], ["del", "theorem", "vars_bind₁", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/quotient.lean", "newPath": "src/ring_theory/polynomial/quotient.lean", "changes": []}]}, {"timestamp": 1678949007, "sha": "97d1aa95", "message": "feat(probability/kernel/invariance): Define pushforward of measure along a kernel (#18244)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/probability/kernel/basic.lean", "newPath": "src/probability/kernel/basic.lean", "changes": [["add", "theorem", "const_apply", ["probability_theory", "kernel"]]]}, {"oldPath": "src/probability/kernel/composition.lean", "newPath": "src/probability/kernel/composition.lean", "changes": []}, {"oldPath": null, "newPath": "src/probability/kernel/invariance.lean", "changes": [["add", "theorem", "comp_apply_eq_map_measure", ["probability_theory", "kernel"]], ["add", "theorem", "comp_const_apply_eq_map_measure", ["probability_theory", "kernel"]], ["add", "theorem", "const_map_measure_eq_comp_const", ["probability_theory", "kernel"]], ["add", "theorem", "comp", ["probability_theory", "kernel", "invariant"]], ["add", "theorem", "comp_const", ["probability_theory", "kernel", "invariant"]], ["add", "theorem", "def", ["probability_theory", "kernel", "invariant"]], ["add", "def", "invariant", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_map_measure", ["probability_theory", "kernel"]], ["add", "def", "map_measure", ["probability_theory", "kernel"]], ["add", "theorem", "map_measure_add", ["probability_theory", "kernel"]], ["add", "theorem", "map_measure_apply", ["probability_theory", "kernel"]], ["add", "theorem", "map_measure_smul", ["probability_theory", "kernel"]], ["add", "theorem", "map_measure_zero", ["probability_theory", "kernel"]]]}]}, {"timestamp": 1678896162, "sha": "ce7e9d53", "message": "feat(algebra/triv_sq_zero_ext): lemmas about big operators (#18488)\nSome more results following on from #18384.\nFor now this just has the list lemmas. The multiset and finset lemmas are hard to state cleanly.", "changes": [{"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": [["add", "theorem", "fst_list_prod", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_list_prod", ["triv_sq_zero_ext"]]]}]}, {"timestamp": 1678890743, "sha": "a3786508", "message": "chore(analysis/inner_product_space/basic): add inner_self_ne_zero (#18587)\nThis result is trivial, but it's presence is consistent with how we have both `norm_ne_zero` and `norm_ne_zero_iff`.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_self_ne_zero", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_ne_zero", []]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/unoriented/basic.lean", "newPath": "src/geometry/euclidean/angle/unoriented/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1678890741, "sha": "83f81aea", "message": "refactor(topology/algebra/open_subgroup): use `set_like` (#18585)", "changes": [{"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["add", "theorem", "coe_coe_opens", ["open_subgroup"]], ["add", "theorem", "coe_coe_subgroup", ["open_subgroup"]], ["del", "theorem", "coe_injective", ["open_subgroup"]], ["add", "theorem", "coe_opens_inf", ["open_subgroup"]], ["add", "theorem", "coe_opens_top", ["open_subgroup"]], ["add", "theorem", "coe_prod", ["open_subgroup"]], ["add", "theorem", "coe_subgroup_comap", ["open_subgroup"]], ["add", "theorem", "coe_subgroup_inf", ["open_subgroup"]], ["add", "theorem", "coe_subgroup_injective", ["open_subgroup"]], ["add", "theorem", "coe_subgroup_prod", ["open_subgroup"]], ["add", "theorem", "coe_subgroup_sup", ["open_subgroup"]], ["add", "theorem", "coe_subgroup_top", ["open_subgroup"]], ["del", "theorem", "coe_subset", ["open_subgroup"]], ["add", "theorem", "coe_top", ["open_subgroup"]], ["mod", "def", "comap", ["open_subgroup"]], ["mod", "theorem", "ext", ["open_subgroup"]], ["del", "theorem", "ext_iff", ["open_subgroup"]], ["add", "theorem", "is_clopen", ["open_subgroup"]], ["del", "theorem", "mem_coe", ["open_subgroup"]], ["add", "theorem", "mem_inf", ["open_subgroup"]], ["add", "theorem", "mem_top", ["open_subgroup"]], ["mod", "theorem", "is_open_of_one_mem_interior", ["subgroup"]], ["mod", "theorem", "is_open_of_open_subgroup", ["subgroup"]]]}]}, {"timestamp": 1678890740, "sha": "992efbda", "message": "feat(analysis/normed/order/upper_lower): Thickening an upper set (#17257)\nResults about upper sets in normed ordered groups.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed/order/upper_lower.lean", "changes": [["add", "theorem", "exists_subset_ball", ["is_lower_set"]], ["add", "theorem", "mem_interior_of_forall_lt", ["is_lower_set"]], ["add", "theorem", "exists_subset_ball", ["is_upper_set"]], ["add", "theorem", "mem_interior_of_forall_lt", ["is_upper_set"]]]}, {"oldPath": "src/topology/algebra/order/upper_lower.lean", "newPath": "src/topology/algebra/order/upper_lower.lean", "changes": []}]}, {"timestamp": 1678879056, "sha": "29d5700b", "message": "chore(geometry/manifold/instances/sphere): speedup a proof (#18586)\nThis goes from 15s to 1.75 seconds.\nI've squeezed this in multiple steps to make the proof easier to follow.", "changes": [{"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1678879055, "sha": "01118344", "message": "chore(order/with_bot): lemmas about unbot and untop (#18582)", "changes": [{"oldPath": "src/algebra/order/monoid/with_top.lean", "newPath": "src/algebra/order/monoid/with_top.lean", "changes": [["add", "theorem", "unbot_one'", ["with_bot"]], ["add", "theorem", "unbot_one", ["with_bot"]], ["add", "theorem", "untop_one'", ["with_top"]], ["add", "theorem", "untop_one", ["with_top"]]]}, {"oldPath": "src/algebra/order/ring/with_top.lean", "newPath": "src/algebra/order/ring/with_top.lean", "changes": []}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "succ_unbot", ["with_bot"]], ["add", "theorem", "pred_untop", ["with_top"]]]}, {"oldPath": "src/order/with_bot.lean", "newPath": "src/order/with_bot.lean", "changes": []}]}, {"timestamp": 1678870685, "sha": "10bf4f82", "message": "chore(*): add mathlib4 synchronization comments (#18578)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.char_p.basic`\n* `algebra.char_p.invertible`\n* `algebra.char_p.pi`\n* `algebra.char_p.subring`\n* `algebra.char_p.two`\n* `algebra.polynomial.group_ring_action`\n* `analysis.normed.field.basic`\n* `analysis.normed.field.infinite_sum`\n* `analysis.normed.field.unit_ball`\n* `analysis.normed.order.lattice`\n* `analysis.normed_space.int`\n* `category_theory.bicategory.locally_discrete`\n* `category_theory.category.Cat.limit`\n* `category_theory.category.Pointed`\n* `category_theory.category.Quiv`\n* `category_theory.connected_components`\n* `category_theory.limits.colimit_limit`\n* `category_theory.limits.connected`\n* `category_theory.limits.constructions.filtered`\n* `category_theory.limits.constructions.over.connected`\n* `category_theory.limits.constructions.zero_objects`\n* `category_theory.limits.final`\n* `category_theory.limits.pi`\n* `category_theory.limits.preserves.opposites`\n* `category_theory.limits.preserves.shapes.images`\n* `category_theory.limits.preserves.shapes.kernels`\n* `category_theory.limits.shapes.comm_sq`\n* `category_theory.linear.linear_functor`\n* `category_theory.preadditive.left_exact`\n* `combinatorics.catalan`\n* `data.polynomial.algebra_map`\n* `data.polynomial.hasse_deriv`\n* `data.polynomial.integral_normalization`\n* `data.polynomial.lifts`\n* `data.polynomial.taylor`\n* `group_theory.free_abelian_group`\n* `linear_algebra.smodeq`\n* `ring_theory.localization.integer`\n* `ring_theory.polynomial.scale_roots`\n* `ring_theory.polynomial.tower`\n* `topology.homotopy.basic`\n* `topology.instances.ereal`\n* `topology.metric_space.cau_seq_filter`\n* `topology.semicontinuous`", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_p/invertible.lean", "newPath": "src/algebra/char_p/invertible.lean", "changes": []}, {"oldPath": "src/algebra/char_p/pi.lean", "newPath": "src/algebra/char_p/pi.lean", "changes": []}, {"oldPath": "src/algebra/char_p/subring.lean", "newPath": "src/algebra/char_p/subring.lean", "changes": []}, {"oldPath": "src/algebra/char_p/two.lean", "newPath": "src/algebra/char_p/two.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/infinite_sum.lean", "newPath": "src/analysis/normed/field/infinite_sum.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/unit_ball.lean", "newPath": "src/analysis/normed/field/unit_ball.lean", "changes": []}, {"oldPath": "src/analysis/normed/order/lattice.lean", "newPath": "src/analysis/normed/order/lattice.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/int.lean", "newPath": "src/analysis/normed_space/int.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/locally_discrete.lean", "newPath": "src/category_theory/bicategory/locally_discrete.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat/limit.lean", "newPath": "src/category_theory/category/Cat/limit.lean", "changes": []}, {"oldPath": "src/category_theory/category/Pointed.lean", "newPath": "src/category_theory/category/Pointed.lean", "changes": []}, {"oldPath": "src/category_theory/category/Quiv.lean", "newPath": "src/category_theory/category/Quiv.lean", "changes": []}, {"oldPath": "src/category_theory/connected_components.lean", "newPath": "src/category_theory/connected_components.lean", "changes": []}, {"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/filtered.lean", "newPath": "src/category_theory/limits/constructions/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/connected.lean", "newPath": "src/category_theory/limits/constructions/over/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/zero_objects.lean", "newPath": "src/category_theory/limits/constructions/zero_objects.lean", "changes": []}, {"oldPath": "src/category_theory/limits/final.lean", "newPath": "src/category_theory/limits/final.lean", "changes": []}, {"oldPath": "src/category_theory/limits/pi.lean", "newPath": "src/category_theory/limits/pi.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/opposites.lean", "newPath": "src/category_theory/limits/preserves/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/images.lean", "newPath": "src/category_theory/limits/preserves/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "newPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": []}, {"oldPath": "src/category_theory/linear/linear_functor.lean", "newPath": "src/category_theory/linear/linear_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/left_exact.lean", "newPath": "src/category_theory/preadditive/left_exact.lean", "changes": []}, {"oldPath": "src/combinatorics/catalan.lean", "newPath": "src/combinatorics/catalan.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/data/polynomial/taylor.lean", "newPath": "src/data/polynomial/taylor.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/smodeq.lean", "newPath": "src/linear_algebra/smodeq.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integer.lean", "newPath": "src/ring_theory/localization/integer.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/tower.lean", "newPath": "src/ring_theory/polynomial/tower.lean", "changes": []}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}]}, {"timestamp": 1678865337, "sha": "4681620d", "message": "fix(analysis/inner_product_space): make type families explicit for `orthogonal_family` and `is_hilbert_sum` (#18584)\nPretty much every single use of `orthogonal_family` was unable to infer this argument and so used `@`.\n`is_hilbert_sum` is changed for consistency.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "def", "orthogonal_family", []]]}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}]}, {"timestamp": 1678818043, "sha": "1a313d8b", "message": "feat(order/initial_seg): add lemmas about `acc` and `well_founded` (#18527)", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["add", "theorem", "well_founded_iff_well_founded_subrel", []], ["add", "theorem", "{u}", []]]}]}, {"timestamp": 1678808200, "sha": "3fc0b254", "message": "chore(analysis/inner_product_space): rename `_sym` to `_symm` (#18580)\nThis is the preferred spelling of `symmetric` in mathlib. `sym` refers to the type of unordered pairs.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["del", "theorem", "inner_abs_conj_sym", []], ["add", "theorem", "inner_abs_conj_symm", []], ["del", "theorem", "inner_conj_sym", []], ["add", "theorem", "inner_conj_symm", []], ["del", "theorem", "inner_eq_zero_sym", []], ["add", "theorem", "inner_eq_zero_symm", []], ["del", "theorem", "inner_abs_conj_sym", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_abs_conj_symm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_conj_sym", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_conj_symm", ["inner_product_space", "of_core"]], ["mod", "theorem", "real_inner_comm", []]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/ldl.lean", "newPath": "src/linear_algebra/matrix/ldl.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/pos_def.lean", "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}]}, {"timestamp": 1678801903, "sha": "af8f9bc2", "message": "chore(analysis/inner_product_space/basic): make arguments explicit (#18579)\nThis applies the regex\n```regex\n\\{(x[^}]+)\\}(?![^\\n]*↔)(?=[^\\n]* =)\n```\nand replaces it with `($1)` in appropriate places. The heuristic is \"equalities should take their arguments explicitly\".\nUnderscores are then inserted as necessary to fix the build.", "changes": [{"oldPath": "src/analysis/convex/cone/basic.lean", "newPath": "src/analysis/convex/cone/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "theorem", "innerSL_flip_apply", []], ["mod", "theorem", "inner_abs_conj_sym", []], ["mod", "theorem", "inner_add_add_self", []], ["mod", "theorem", "inner_add_left", []], ["mod", "theorem", "inner_add_right", []], ["mod", "theorem", "inner_im_symm", []], ["mod", "theorem", "inner_mul_conj_re_abs", []], ["mod", "theorem", "inner_neg_left", []], ["mod", "theorem", "inner_neg_neg", []], ["mod", "theorem", "inner_neg_right", []], ["mod", "theorem", "inner_abs_conj_sym", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_add_add_self", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_add_left", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_add_right", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_im_symm", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_mul_conj_re_abs", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_neg_left", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_neg_right", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_re_symm", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_self_im_zero", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_self_nonneg_im", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_self_re_to_K", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_smul_left", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_smul_right", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_sub_left", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_sub_right", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_sub_sub_self", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_zero_left", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_zero_right", ["inner_product_space", "of_core"]], ["mod", "theorem", "sqrt_norm_sq_eq_norm", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_re_symm", []], ["mod", "theorem", "inner_re_zero_left", []], ["mod", "theorem", "inner_re_zero_right", []], ["mod", "theorem", "inner_self_abs_to_K", []], ["mod", "theorem", "inner_self_conj", []], ["mod", "theorem", "inner_self_im_zero", []], ["mod", "theorem", "inner_self_nonneg_im", []], ["mod", "theorem", "inner_self_re_abs", []], ["mod", "theorem", "inner_self_re_to_K", []], ["mod", "theorem", "inner_smul_left", []], ["mod", "theorem", "inner_smul_real_left", []], ["mod", "theorem", "inner_smul_real_right", []], ["mod", "theorem", "inner_smul_right", []], ["mod", "theorem", "inner_sub_left", []], ["mod", "theorem", "inner_sub_right", []], ["mod", "theorem", "inner_sub_sub_self", []], ["mod", "theorem", "inner_zero_left", []], ["mod", "theorem", "inner_zero_right", []], ["mod", "theorem", "norm_add_mul_self", []], ["mod", "theorem", "norm_add_mul_self_real", []], ["mod", "theorem", "norm_add_sq", []], ["mod", "theorem", "norm_add_sq_real", []], ["mod", "theorem", "norm_sub_mul_self", []], ["mod", "theorem", "norm_sub_mul_self_real", []], ["mod", "theorem", "norm_sub_sq", []], ["mod", "theorem", "norm_sub_sq_real", []], ["mod", "theorem", "real_inner_add_add_self", []], ["mod", "theorem", "real_inner_self_abs", []], ["mod", "theorem", "real_inner_smul_left", []], ["mod", "theorem", "real_inner_smul_right", []], ["mod", "theorem", "real_inner_sub_sub_self", []]]}, {"oldPath": "src/analysis/inner_product_space/lax_milgram.lean", "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}]}, {"timestamp": 1678792915, "sha": "ceb887dd", "message": "feat(algebra/char_p/basic): refactor proof of add_pow_char_of_commute to extract a statement true in all rings (#11364)\nIf x and y commute, the pth power of their sum is the sum of the pth powers plus a multiple of p.\nThis holds in any semiring and easily implies the additivity of frobenius in char p, but is occasionally useful in characteristic 0.\nAlso make the fact that p is 0 in a char_p ring a simp lemma.\nFrom flt-regular", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "add_pow_char_of_commute", []], ["mod", "theorem", "add_pow_char_pow_of_commute", []], ["add", "theorem", "add_pow_prime_eq", []], ["add", "theorem", "add_pow_prime_pow_eq", []], ["add", "theorem", "exists_add_pow_prime_eq", []], ["add", "theorem", "exists_add_pow_prime_pow_eq", []]]}, {"oldPath": "src/combinatorics/additive/behrend.lean", "newPath": "src/combinatorics/additive/behrend.lean", "changes": []}, {"oldPath": "src/data/enat/basic.lean", "newPath": "src/data/enat/basic.lean", "changes": [["mod", "theorem", "coe_zero", ["enat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": [["add", "theorem", "dvd_choose_pow", ["nat", "prime"]], ["add", "theorem", "dvd_choose_pow_iff", ["nat", "prime"]], ["mod", "theorem", "multiplicity_choose_prime_pow_add_multiplicity", ["nat", "prime"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["mod", "theorem", "multiplicity_eq_zero", ["multiplicity"]], ["add", "theorem", "multiplicity_ne_zero", ["multiplicity"]]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein/is_integral.lean", "newPath": "src/ring_theory/polynomial/eisenstein/is_integral.lean", "changes": []}]}, {"timestamp": 1678766903, "sha": "2fd0de23", "message": "chore(analysis/normed_space/pi_Lp): missing scalar tower instances (#18577)\nExtracted from #6799. Note these have rather strong requirements on `𝕜` and `𝕜''` as those are the requirements for there to be a `smul` operation.", "changes": [{"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}]}, {"timestamp": 1678747790, "sha": "bd1fc183", "message": "refactor(linear_algebra/affine_space/affine_{map,equiv}): add fun_like instances (#18575)\nGoing all the way and defining a new `affine_map_class` class can wait till after the port; but adding `fun_like` makes the port easier.\nThis has to reorder a few declarations in `affine_equiv.lean`.\nThe only new declarations are the new instances.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["mod", "def", "to_affine_map", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": [["mod", "theorem", "coe_injective", ["continuous_affine_map"]], ["mod", "theorem", "congr_fun", ["continuous_affine_map"]], ["mod", "theorem", "to_affine_map_injective", ["continuous_affine_map"]]]}]}, {"timestamp": 1678709550, "sha": "2196ab36", "message": "refactor(algebra/group/basic): rework lemmas on inv and neg (#17483)\nThis PR adds the following lemma (and its additive equivalent).\n```lean\ntheorem inv_eq_iff_eq_inv : a⁻¹ = b ↔ a = b⁻¹\n```\nand removes `eq_inv_of_eq_inv`, `eq_inv_iff_eq_inv` and `inv_eq_iff_inv_eq` (and their additive equivalents).", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "eq_inv_iff_eq_inv", []], ["del", "theorem", "eq_inv_of_eq_inv", []], ["add", "theorem", "inv_eq_iff_eq_inv", []], ["del", "theorem", "inv_eq_iff_inv_eq", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/group/abs.lean", "newPath": "src/algebra/order/group/abs.lean", "changes": []}, {"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/elliptic_curve/point.lean", "newPath": "src/algebraic_geometry/elliptic_curve/point.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/data/set/pointwise/interval.lean", "newPath": "src/data/set/pointwise/interval.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/basic.lean", "newPath": "src/geometry/euclidean/angle/oriented/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "newPath": "src/geometry/euclidean/angle/oriented/rotation.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/even_equiv.lean", "newPath": "src/linear_algebra/clifford_algebra/even_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/probability/martingale/borel_cantelli.lean", "newPath": "src/probability/martingale/borel_cantelli.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1678689700, "sha": "69c6a5a1", "message": "chore(*): add mathlib4 synchronization comments (#18566)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.algebra.subalgebra.basic`\n* `algebra.algebra.subalgebra.tower`\n* `algebra.free_non_unital_non_assoc_algebra`\n* `algebra.monoid_algebra.basic`\n* `algebra.monoid_algebra.support`\n* `algebra.polynomial.big_operators`\n* `algebra.star.subalgebra`\n* `analysis.normed.group.ball_sphere`\n* `analysis.normed.group.basic`\n* `analysis.normed.group.completion`\n* `analysis.normed.group.hom`\n* `analysis.normed.group.hom_completion`\n* `analysis.normed.group.infinite_sum`\n* `analysis.normed.group.seminorm`\n* `analysis.normed_space.indicator_function`\n* `analysis.subadditive`\n* `category_theory.abelian.images`\n* `category_theory.abelian.non_preadditive`\n* `category_theory.adjunction.comma`\n* `category_theory.concrete_category.reflects_isomorphisms`\n* `category_theory.is_connected`\n* `category_theory.limits.bicones`\n* `category_theory.limits.comma`\n* `category_theory.limits.cone_category`\n* `category_theory.limits.constructions.equalizers`\n* `category_theory.limits.constructions.finite_products_of_binary_products`\n* `category_theory.limits.constructions.limits_of_products_and_equalizers`\n* `category_theory.limits.essentially_small`\n* `category_theory.limits.kan_extension`\n* `category_theory.limits.lattice`\n* `category_theory.limits.mono_coprod`\n* `category_theory.limits.opposites`\n* `category_theory.limits.preserves.filtered`\n* `category_theory.limits.preserves.shapes.biproducts`\n* `category_theory.limits.preserves.shapes.zero`\n* `category_theory.limits.shapes.biproducts`\n* `category_theory.limits.shapes.finite_products`\n* `category_theory.limits.shapes.functor_category`\n* `category_theory.limits.shapes.kernels`\n* `category_theory.limits.shapes.normal_mono.basic`\n* `category_theory.limits.shapes.normal_mono.equalizers`\n* `category_theory.limits.shapes.zero_morphisms`\n* `category_theory.limits.small_complete`\n* `category_theory.limits.types`\n* `category_theory.linear.basic`\n* `category_theory.linear.functor_category`\n* `category_theory.monoidal.End`\n* `category_theory.preadditive.additive_functor`\n* `category_theory.preadditive.basic`\n* `category_theory.preadditive.biproducts`\n* `category_theory.preadditive.functor_category`\n* `combinatorics.hindman`\n* `control.bifunctor`\n* `control.bitraversable.basic`\n* `data.complex.basic`\n* `data.nat.choose.cast`\n* `data.nat.choose.vandermonde`\n* `data.nat.factorial.cast`\n* `data.polynomial.basic`\n* `data.polynomial.cardinal`\n* `data.polynomial.coeff`\n* `data.polynomial.degree.definitions`\n* `data.polynomial.degree.lemmas`\n* `data.polynomial.degree.trailing_degree`\n* `data.polynomial.derivative`\n* `data.polynomial.erase_lead`\n* `data.polynomial.eval`\n* `data.polynomial.induction`\n* `data.polynomial.inductions`\n* `data.polynomial.monic`\n* `data.polynomial.monomial`\n* `data.polynomial.reverse`\n* `data.real.sqrt`\n* `data.tree`\n* `linear_algebra.affine_space.slope`\n* `logic.equiv.functor`\n* `number_theory.basic`\n* `order.jordan_holder`\n* `ring_theory.adjoin.basic`\n* `ring_theory.ideal.operations`\n* `ring_theory.ideal.quotient`\n* `ring_theory.localization.basic`\n* `ring_theory.nilpotent`\n* `ring_theory.polynomial.pochhammer`\n* `topology.algebra.affine`\n* `topology.algebra.localization`\n* `topology.algebra.ring.ideal`\n* `topology.fiber_bundle.trivialization`\n* `topology.instances.ennreal`\n* `topology.metric_space.completion`\n* `topology.metric_space.gluing`\n* `topology.metric_space.isometric_smul`\n* `topology.metric_space.isometry`\n* `topology.uniform_space.compare_reals`\n* `topology.unit_interval`", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra/tower.lean", "newPath": "src/algebra/algebra/subalgebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/support.lean", "newPath": "src/algebra/monoid_algebra/support.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/star/subalgebra.lean", "newPath": "src/algebra/star/subalgebra.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/ball_sphere.lean", "newPath": "src/analysis/normed/group/ball_sphere.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/completion.lean", "newPath": "src/analysis/normed/group/completion.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom_completion.lean", "newPath": "src/analysis/normed/group/hom_completion.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/infinite_sum.lean", "newPath": "src/analysis/normed/group/infinite_sum.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/indicator_function.lean", "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": []}, {"oldPath": "src/analysis/subadditive.lean", "newPath": "src/analysis/subadditive.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/images.lean", "newPath": "src/category_theory/abelian/images.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/comma.lean", "newPath": "src/category_theory/adjunction/comma.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "newPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "changes": []}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/bicones.lean", "newPath": "src/category_theory/limits/bicones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/comma.lean", "newPath": "src/category_theory/limits/comma.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cone_category.lean", "newPath": "src/category_theory/limits/cone_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/equalizers.lean", "newPath": "src/category_theory/limits/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/essentially_small.lean", "newPath": "src/category_theory/limits/essentially_small.lean", "changes": []}, {"oldPath": "src/category_theory/limits/kan_extension.lean", "newPath": "src/category_theory/limits/kan_extension.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/mono_coprod.lean", "newPath": "src/category_theory/limits/mono_coprod.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/filtered.lean", "newPath": "src/category_theory/limits/preserves/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "newPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/zero.lean", "newPath": "src/category_theory/limits/preserves/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/functor_category.lean", "newPath": "src/category_theory/limits/shapes/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/normal_mono/basic.lean", "newPath": "src/category_theory/limits/shapes/normal_mono/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/normal_mono/equalizers.lean", "newPath": "src/category_theory/limits/shapes/normal_mono/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": []}, {"oldPath": "src/category_theory/limits/small_complete.lean", "newPath": "src/category_theory/limits/small_complete.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/linear/basic.lean", "newPath": "src/category_theory/linear/basic.lean", "changes": []}, {"oldPath": "src/category_theory/linear/functor_category.lean", "newPath": "src/category_theory/linear/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/End.lean", "newPath": "src/category_theory/monoidal/End.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/basic.lean", "newPath": "src/category_theory/preadditive/basic.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/functor_category.lean", "newPath": "src/category_theory/preadditive/functor_category.lean", "changes": []}, {"oldPath": "src/combinatorics/hindman.lean", "newPath": "src/combinatorics/hindman.lean", "changes": []}, {"oldPath": "src/control/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": []}, {"oldPath": "src/control/bitraversable/basic.lean", "newPath": "src/control/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose/cast.lean", "newPath": "src/data/nat/choose/cast.lean", "changes": []}, {"oldPath": "src/data/nat/choose/vandermonde.lean", "newPath": "src/data/nat/choose/vandermonde.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/cast.lean", "newPath": "src/data/nat/factorial/cast.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/cardinal.lean", "newPath": "src/data/polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/induction.lean", "newPath": "src/data/polynomial/induction.lean", "changes": []}, {"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/slope.lean", "newPath": "src/linear_algebra/affine_space/slope.lean", "changes": []}, {"oldPath": "src/logic/equiv/functor.lean", "newPath": "src/logic/equiv/functor.lean", "changes": []}, {"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}, {"oldPath": "src/topology/algebra/localization.lean", "newPath": "src/topology/algebra/localization.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring/ideal.lean", "newPath": "src/topology/algebra/ring/ideal.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/trivialization.lean", "newPath": "src/topology/fiber_bundle/trivialization.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometric_smul.lean", "newPath": "src/topology/metric_space/isometric_smul.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}, {"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": []}]}, {"timestamp": 1678683661, "sha": "795b5018", "message": "chore(number_theory/pell_matiyasevic): generalize `is_pell` to arbitary `d` (#18573)\nNot much else in the file generalizes, but we may as well generalize the definition.", "changes": [{"oldPath": "src/number_theory/pell_matiyasevic.lean", "newPath": "src/number_theory/pell_matiyasevic.lean", "changes": [["mod", "theorem", "is_pell_nat", ["pell"]], ["mod", "theorem", "is_pell_one", ["pell"]]]}]}, {"timestamp": 1678660689, "sha": "1e320130", "message": "feat(analysis/normed_space/*exponential): more results about `star` (#18553)\nThese are trivial consequences of existing results.\nIt turns out we already had a proof about `exp _ x` belonging to `unitary X`; this weakens the conditions.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "smul_mem_skew_adjoint", ["is_self_adjoint"]], ["add", "theorem", "is_self_adjoint_smul_of_mem_skew_adjoint", []]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "exp_mem_unitary_of_mem_skew_adjoint", []], ["add", "theorem", "exp", ["is_self_adjoint"]]]}, {"oldPath": "src/analysis/normed_space/matrix_exponential.lean", "newPath": "src/analysis/normed_space/matrix_exponential.lean", "changes": [["add", "theorem", "exp", ["matrix", "is_hermitian"]], ["add", "theorem", "exp", ["matrix", "is_symm"]]]}, {"oldPath": "src/analysis/normed_space/star/exponential.lean", "newPath": "src/analysis/normed_space/star/exponential.lean", "changes": [["del", "theorem", "exp_i_smul_unitary", ["is_self_adjoint"]]]}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": []}]}, {"timestamp": 1678653574, "sha": "2af08364", "message": "refactor(number_theory/zsqrtd): replace `zsqrtd.conj` with `star` (#18572)\nThis allows more existing lemmas to be used; notably, `unitary (zqsrt d)` becomes something we can talk about.", "changes": [{"oldPath": "src/number_theory/pell_matiyasevic.lean", "newPath": "src/number_theory/pell_matiyasevic.lean", "changes": [["del", "theorem", "is_pell_conj", ["pell"]], ["add", "theorem", "is_pell_iff_mem_unitary", ["pell"]], ["mod", "theorem", "is_pell_norm", ["pell"]], ["add", "theorem", "is_pell_star", ["pell"]], ["mod", "theorem", "pell_zd_sub", ["pell"]]]}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": [["del", "def", "conj", ["zsqrtd"]], ["del", "theorem", "conj_add", ["zsqrtd"]], ["del", "theorem", "conj_conj", ["zsqrtd"]], ["del", "def", "conj_hom", ["zsqrtd"]], ["del", "theorem", "conj_im", ["zsqrtd"]], ["del", "theorem", "conj_mul", ["zsqrtd"]], ["del", "theorem", "conj_neg", ["zsqrtd"]], ["del", "theorem", "conj_one", ["zsqrtd"]], ["del", "theorem", "conj_re", ["zsqrtd"]], ["del", "theorem", "conj_sub", ["zsqrtd"]], ["del", "theorem", "conj_zero", ["zsqrtd"]], ["del", "theorem", "mul_conj", ["zsqrtd"]], ["add", "theorem", "mul_star", ["zsqrtd"]], ["mod", "theorem", "norm_conj", ["zsqrtd"]], ["mod", "theorem", "norm_eq_mul_conj", ["zsqrtd"]], ["add", "theorem", "star_im", ["zsqrtd"]], ["add", "theorem", "star_mk", ["zsqrtd"]], ["add", "theorem", "star_re", ["zsqrtd"]]]}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": [["mod", "theorem", "div_def", ["gaussian_int"]], ["add", "theorem", "to_complex_star", ["gaussian_int"]]]}]}, {"timestamp": 1678580624, "sha": "c985ae98", "message": "chore(topology/order/basic): generalise frontier_Icc (#18571)", "changes": [{"oldPath": "src/topology/order/basic.lean", "newPath": "src/topology/order/basic.lean", "changes": [["mod", "theorem", "frontier_Icc", []]]}]}, {"timestamp": 1678558822, "sha": "f24cc289", "message": "chore(data/finset/locally_finite): lemmas about open intervals (#18533)\nWe had `cons` lemmas for the other four cases, but not these two.\nThe new lemmas golf a proof a little.\nAlso adds some docstrings to makes these lemmas easier to find.\nForward-ported in https://github.com/leanprover-community/mathlib4/pull/2812", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Ico_eq_cons_Ioo", ["finset"]], ["add", "theorem", "Ioc_eq_cons_Ioo", ["finset"]]]}]}, {"timestamp": 1678526800, "sha": "da420a8c", "message": "refactor(*): reduce dependencies on ring_theory.ideal.quotient_operations (#18530)", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["del", "theorem", "quotient_span_X_sub_C_alg_equiv_mk", ["polynomial"]], ["del", "theorem", "quotient_span_X_sub_C_alg_equiv_symm_apply", ["polynomial"]]]}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/number_theory/multiplicity.lean", "newPath": "src/number_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/etale.lean", "newPath": "src/ring_theory/etale.lean", "changes": []}, {"oldPath": "src/ring_theory/finite_presentation.lean", "newPath": "src/ring_theory/finite_presentation.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["del", "theorem", "induction_on", ["ideal", "is_nilpotent"]], ["del", "theorem", "is_radical_iff_quotient_reduced", ["ideal"]], ["del", "theorem", "is_unit_quotient_mk_iff", ["is_nilpotent"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["del", "theorem", "eq_zero_of_polynomial_mem_map_range", ["ideal"]], ["del", "theorem", "eval₂_C_mk_eq_zero", ["ideal"]], ["del", "theorem", "is_domain_map_C_quotient", ["ideal"]], ["add", "theorem", "is_prime_map_C_iff_is_prime", ["ideal"]], ["del", "def", "polynomial_quotient_equiv_quotient_polynomial", ["ideal"]], ["del", "theorem", "polynomial_quotient_equiv_quotient_polynomial_map_mk", ["ideal"]], ["del", "theorem", "polynomial_quotient_equiv_quotient_polynomial_symm_mk", ["ideal"]], ["del", "theorem", "quotient_map_C_eq_zero", ["ideal"]], ["del", "theorem", "eval₂_C_mk_eq_zero", ["mv_polynomial"]], ["del", "def", "quotient_equiv_quotient_mv_polynomial", ["mv_polynomial"]], ["del", "theorem", "quotient_map_C_eq_zero", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/quotient.lean", "changes": [["add", "theorem", "eq_zero_of_polynomial_mem_map_range", ["ideal"]], ["add", "theorem", "eval₂_C_mk_eq_zero", ["ideal"]], ["add", "theorem", "is_domain_map_C_quotient", ["ideal"]], ["add", "def", "polynomial_quotient_equiv_quotient_polynomial", ["ideal"]], ["add", "theorem", "polynomial_quotient_equiv_quotient_polynomial_map_mk", ["ideal"]], ["add", "theorem", "polynomial_quotient_equiv_quotient_polynomial_symm_mk", ["ideal"]], ["add", "theorem", "quotient_map_C_eq_zero", ["ideal"]], ["add", "theorem", "eval₂_C_mk_eq_zero", ["mv_polynomial"]], ["add", "def", "quotient_equiv_quotient_mv_polynomial", ["mv_polynomial"]], ["add", "theorem", "quotient_map_C_eq_zero", ["mv_polynomial"]], ["add", "theorem", "quotient_span_X_sub_C_alg_equiv_mk", ["polynomial"]], ["add", "theorem", "quotient_span_X_sub_C_alg_equiv_symm_apply", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/quotient_nilpotent.lean", "changes": [["add", "theorem", "induction_on", ["ideal", "is_nilpotent"]], ["add", "theorem", "is_radical_iff_quotient_reduced", ["ideal"]], ["add", "theorem", "is_unit_quotient_mk_iff", ["is_nilpotent"]]]}, {"oldPath": null, "newPath": "src/ring_theory/quotient_noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["del", "theorem", "comap_on_quot_eq", ["add_valuation"]], ["del", "theorem", "comap_supp", ["add_valuation"]], ["del", "def", "on_quot", ["add_valuation"]], ["del", "theorem", "on_quot_comap_eq", ["add_valuation"]], ["del", "def", "on_quot_val", ["add_valuation"]], ["del", "theorem", "self_le_supp_comap", ["add_valuation"]], ["del", "theorem", "supp_quot", ["add_valuation"]], ["del", "theorem", "supp_quot_supp", ["add_valuation"]], ["del", "theorem", "comap_on_quot_eq", ["valuation"]], ["del", "def", "on_quot", ["valuation"]], ["del", "theorem", "on_quot_comap_eq", ["valuation"]], ["del", "def", "on_quot_val", ["valuation"]], ["del", "theorem", "self_le_supp_comap", ["valuation"]], ["del", "theorem", "supp_quot", ["valuation"]], ["del", "theorem", "supp_quot_supp", ["valuation"]]]}, {"oldPath": null, "newPath": "src/ring_theory/valuation/quotient.lean", "changes": [["add", "theorem", "comap_on_quot_eq", ["add_valuation"]], ["add", "theorem", "comap_supp", ["add_valuation"]], ["add", "def", "on_quot", ["add_valuation"]], ["add", "theorem", "on_quot_comap_eq", ["add_valuation"]], ["add", "def", "on_quot_val", ["add_valuation"]], ["add", "theorem", "self_le_supp_comap", ["add_valuation"]], ["add", "theorem", "supp_quot", ["add_valuation"]], ["add", "theorem", "supp_quot_supp", ["add_valuation"]], ["add", "theorem", "comap_on_quot_eq", ["valuation"]], ["add", "def", "on_quot", ["valuation"]], ["add", "theorem", "on_quot_comap_eq", ["valuation"]], ["add", "def", "on_quot_val", ["valuation"]], ["add", "theorem", "self_le_supp_comap", ["valuation"]], ["add", "theorem", "supp_quot", ["valuation"]], ["add", "theorem", "supp_quot_supp", ["valuation"]]]}]}, {"timestamp": 1678448290, "sha": "3180fab6", "message": "feat(probability/kernel/composition): composition of kernels (#17974)\nWe define the product, map, comap and composition of s-finite kernels.", "changes": [{"oldPath": null, "newPath": "src/probability/kernel/composition.lean", "changes": [["add", "def", "comap", ["probability_theory", "kernel"]], ["add", "theorem", "comap_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "comap_apply", ["probability_theory", "kernel"]], ["add", "def", "comp", ["probability_theory", "kernel"]], ["add", "theorem", "comp_apply", ["probability_theory", "kernel"]], ["add", "theorem", "comp_assoc", ["probability_theory", "kernel"]], ["add", "theorem", "comp_deterministic_eq_comap", ["probability_theory", "kernel"]], ["add", "def", "comp_prod", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_apply", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_apply_eq_comp_prod_fun", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_apply_univ_le", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_eq_sum_comp_prod", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_eq_sum_comp_prod_left", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_eq_sum_comp_prod_right", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_eq_tsum_comp_prod", ["probability_theory", "kernel"]], ["add", "def", "comp_prod_fun", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_fun_Union", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_fun_empty", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_fun_eq_tsum", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_fun_tsum_left", ["probability_theory", "kernel"]], ["add", "theorem", "comp_prod_fun_tsum_right", ["probability_theory", "kernel"]], ["add", "theorem", "deterministic_comp_eq_map", ["probability_theory", "kernel"]], ["add", "def", "fst", ["probability_theory", "kernel"]], ["add", "theorem", "fst_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "fst_apply", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_comap", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_comp", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_comp_prod'", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_comp_prod", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_fst", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_map", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_prod", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_prod_mk_left", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_snd", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_swap_left", ["probability_theory", "kernel"]], ["add", "theorem", "lintegral_swap_right", ["probability_theory", "kernel"]], ["add", "def", "map", ["probability_theory", "kernel"]], ["add", "theorem", "map_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "map_apply", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_comp_prod_fun", ["probability_theory", "kernel"]], ["add", "theorem", "measurable_comp_prod_fun_of_finite", ["probability_theory", "kernel"]], ["add", "def", "prod", ["probability_theory", "kernel"]], ["add", "theorem", "prod_apply", ["probability_theory", "kernel"]], ["add", "def", "prod_mk_left", ["probability_theory", "kernel"]], ["add", "theorem", "prod_mk_left_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "prod_mk_left_apply", ["probability_theory", "kernel"]], ["add", "def", "snd", ["probability_theory", "kernel"]], ["add", "theorem", "snd_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "snd_apply", ["probability_theory", "kernel"]], ["add", "theorem", "sum_comap_seq", ["probability_theory", "kernel"]], ["add", "theorem", "sum_map_seq", ["probability_theory", "kernel"]], ["add", "def", "swap_left", ["probability_theory", "kernel"]], ["add", "theorem", "swap_left_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "swap_left_apply", ["probability_theory", "kernel"]], ["add", "def", "swap_right", ["probability_theory", "kernel"]], ["add", "theorem", "swap_right_apply'", ["probability_theory", "kernel"]], ["add", "theorem", "swap_right_apply", ["probability_theory", "kernel"]]]}]}, {"timestamp": 1678442121, "sha": "4ac69b29", "message": "feat(probability/probability_mass_function): basic lawful monad lemmas for `pmf`. (#18469)\nThis file adds basic lemmas for monadic operations on `pmf`, mirroring the lemmas for `is_lawful_monad`.", "changes": [{"oldPath": "src/probability/probability_mass_function/basic.lean", "newPath": "src/probability/probability_mass_function/basic.lean", "changes": [["add", "theorem", "coe_ne_zero", ["pmf"]], ["add", "theorem", "ext_iff", ["pmf"]], ["add", "theorem", "support_nonempty", ["pmf"]]]}, {"oldPath": "src/probability/probability_mass_function/constructions.lean", "newPath": "src/probability/probability_mass_function/constructions.lean", "changes": [["add", "theorem", "bind_map", ["pmf"]], ["add", "theorem", "map_bind", ["pmf"]], ["mod", "theorem", "map_comp", ["pmf"]], ["add", "theorem", "map_const", ["pmf"]], ["mod", "theorem", "map_id", ["pmf"]], ["mod", "theorem", "pure_map", ["pmf"]]]}, {"oldPath": "src/probability/probability_mass_function/monad.lean", "newPath": "src/probability/probability_mass_function/monad.lean", "changes": [["add", "theorem", "bind_const", ["pmf"]], ["add", "theorem", "pure_apply_of_ne", ["pmf"]], ["add", "theorem", "pure_apply_self", ["pmf"]]]}]}, {"timestamp": 1678383099, "sha": "ddec54a7", "message": "feat(geometry/manifold/vector_bundle/tangent): the tangent bundle is a smooth vector bundle (#17680)\n* This defines a tangent bundle as a smooth vector bundle\n* Currently we still use the old definition in the library (e.g. for `mfderiv`). Therefore we put the new version temporarily in the `hidden` namespace, to avoid a name clash (we could skip this PR and immediately merge #18068, but that will be a big PR).\nCo-authored by: Heather Macbeth 25316162+hrmacbeth@users.noreply.github.com", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_within_fderiv_within", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "cont_diff_within_at_extend_coord_change'", ["local_homeomorph"]], ["add", "theorem", "extend_coord_change_source_mem_nhds_within'", ["local_homeomorph"]], ["add", "theorem", "extend_coord_change_source_mem_nhds_within", ["local_homeomorph"]], ["add", "theorem", "extend_left_inv", ["local_homeomorph"]]]}, {"oldPath": "src/geometry/manifold/vector_bundle/basic.lean", "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": [["add", "theorem", "charted_space_chart_at", ["fiber_bundle"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/vector_bundle/tangent.lean", "changes": [["add", "theorem", "cont_diff_on_fderiv_coord_change", ["hidden"]], ["add", "def", "tangent_bundle", ["hidden"]], ["add", "def", "tangent_bundle_core", ["hidden"]], ["add", "theorem", "tangent_bundle_core_coord_change_achart", ["hidden"]], ["add", "theorem", "tangent_bundle_model_space_chart_at", ["hidden"]], ["add", "theorem", "tangent_bundle_model_space_coe_chart_at", ["hidden"]], ["add", "theorem", "tangent_bundle_model_space_coe_chart_at_symm", ["hidden"]], ["add", "def", "tangent_bundle_model_space_homeomorph", ["hidden"]], ["add", "theorem", "tangent_bundle_model_space_homeomorph_coe", ["hidden"]], ["add", "theorem", "tangent_bundle_model_space_homeomorph_coe_symm", ["hidden"]], ["add", "def", "tangent_space", ["hidden"]], ["add", "theorem", "tangent_space_chart_at", ["hidden"]], ["add", "theorem", "tangent_space_chart_at_to_local_equiv", ["hidden"]]]}]}, {"timestamp": 1678356688, "sha": "5b05c634", "message": "feat(number_theory/pell): add exists_pos_of_not_is_square (#18567)\nThis PR continues work on the theory of the Pell equation for general (nonsquare and positive) `d`.\nIn preparation for proving statements on the structure of the solution set, this adds\n```lean\nlemma exists_pos_of_not_is_square {d : ℤ} (h₀ : 0 < d) (hd : ¬ is_square d) :\n ∃ x y : ℤ, x ^ 2 - d * y ^ 2 = 1 ∧ 1 < x ∧ 0 < y := ...\n```\nas a prerequisite for defining the fundamental solution as the solution with smallest `x > 1` and positive `y`.\nSee [this thread on Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Proving.20Pell's.20equation.20is.20solvable/near/338175458).", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "theorem", "exists_iff_not_is_square", ["pell"]], ["mod", "theorem", "exists_of_not_is_square", ["pell"]], ["add", "theorem", "exists_pos_of_not_is_square", ["pell"]]]}]}, {"timestamp": 1678301390, "sha": "21e3562c", "message": "chore(data/matrix/basic): add a star_module instance (#18557)\nWe already have instances for the other star properties, but missed this one.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1678293806, "sha": "d23150d1", "message": "chore(data/matrix/basic): generalize an instance (#18563)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1678283147, "sha": "671d5d9a", "message": "feat(algebra/star/self_adjoint): add and generalize trivial lemmas (#18558)\nThis:\n* Generalizes `is_self_adjoint.smul`, which makes it easier to show that `0.5 • x` is self-adjoint when `x` is, even if `0.5` is a complex number.\n* Generalizes `is_self_adjoint.add` to match `matrix.is_hermitian.add` (for a later refactor), along with many other lemmas.\n* Removes re-proofs of `star_nat_cast` and `star_int_cast`.\nThe first is motivated by showing that `exp K m` for some matrix `m` is positive definite if `is_self_adjoint m`.\nForward-ported at https://github.com/leanprover-community/mathlib4/pull/2719.", "changes": [{"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "all", ["is_self_adjoint"]], ["mod", "theorem", "smul", ["is_self_adjoint"]], ["add", "theorem", "is_self_adjoint_int_cast", []], ["add", "theorem", "is_self_adjoint_nat_cast", []], ["add", "theorem", "is_self_adjoint_rat_cast", []], ["del", "theorem", "rat_cast_mem", ["self_adjoint"]]]}]}, {"timestamp": 1678269063, "sha": "90ac7a91", "message": "chore(topology/instances/ennreal): drop a dependency (#18562)\nDrop dependency on `analysis.normed.group.basic` by using `nnabs` instead of `nnnorm`.", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1678269062, "sha": "e2e38c00", "message": "chore(category_theory/sites/pushforward): move pushforwards to own file to reduce imports (#18561)\nWe had unnecessarily dragged in the development of sheafification to material about [dense subsites](https://tqft.net/mathlib4/2023-03-08/category_theory.sites.dense_subsite.pdf).", "changes": [{"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": [["del", "def", "pullback_pushforward_adjunction", ["category_theory", "sites"]], ["del", "def", "pushforward", ["category_theory", "sites"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/pushforward.lean", "changes": [["add", "def", "pullback_pushforward_adjunction", ["category_theory", "sites"]], ["add", "def", "pushforward", ["category_theory", "sites"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1678269060, "sha": "3e0c4d76", "message": "chore(topology/algebra/with_zero_topology): move to a new NS, used `localized` (#18560)\nThis way we can naturally use `scoped instance` in Lean 4.", "changes": [{"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": [["del", "theorem", "Iio_mem_nhds", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "Iio_mem_nhds_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "has_basis_nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "has_basis_nhds_units", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "has_basis_nhds_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "is_closed_iff", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "is_open_Iio", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "is_open_iff", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "nhds_coe_units", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "nhds_eq_update", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "nhds_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "nhds_zero_of_units", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "singleton_mem_nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "singleton_mem_nhds_of_units", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "tendsto_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "tendsto_units", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "tendsto_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "Iio_mem_nhds", ["with_zero_topology"]], ["add", "theorem", "Iio_mem_nhds_zero", ["with_zero_topology"]], ["add", "theorem", "has_basis_nhds_of_ne_zero", ["with_zero_topology"]], ["add", "theorem", "has_basis_nhds_units", ["with_zero_topology"]], ["add", "theorem", "has_basis_nhds_zero", ["with_zero_topology"]], ["add", "theorem", "is_closed_iff", ["with_zero_topology"]], ["add", "theorem", "is_open_Iio", ["with_zero_topology"]], ["add", "theorem", "is_open_iff", ["with_zero_topology"]], ["add", "theorem", "nhds_coe_units", ["with_zero_topology"]], ["add", "theorem", "nhds_eq_update", ["with_zero_topology"]], ["add", "theorem", "nhds_of_ne_zero", ["with_zero_topology"]], ["add", "theorem", "nhds_zero", ["with_zero_topology"]], ["add", "theorem", "nhds_zero_of_units", ["with_zero_topology"]], ["add", "theorem", "singleton_mem_nhds_of_ne_zero", ["with_zero_topology"]], ["add", "theorem", "singleton_mem_nhds_of_units", ["with_zero_topology"]], ["add", "theorem", "t3_space", ["with_zero_topology"]], ["add", "theorem", "tendsto_of_ne_zero", ["with_zero_topology"]], ["add", "theorem", "tendsto_units", ["with_zero_topology"]], ["add", "theorem", "tendsto_zero", ["with_zero_topology"]]]}]}, {"timestamp": 1678269059, "sha": "09f981f7", "message": "chore(category_theory/preadditive): reduce unnecessary imports (#18559)\nLooking at the [port-progress bot output](https://tqft.net/mathlib4/2023-03-08/category_theory.monoidal.tor.pdf) for `category_theory.monoidal.tor`, it is clear that most of the algebra imports are only needed to show `Module R` is abelian, which we don't in fact need for setting up `Tor`. This PR splits files to reflect that.", "changes": [{"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/generator.lean", "newPath": "src/category_theory/abelian/generator.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/injective.lean", "newPath": "src/category_theory/abelian/injective.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": []}, {"oldPath": "src/category_theory/linear/yoneda.lean", "newPath": "src/category_theory/linear/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/tor.lean", "newPath": "src/category_theory/monoidal/tor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/generator.lean", "newPath": "src/category_theory/preadditive/generator.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/yoneda.lean", "newPath": "src/category_theory/preadditive/yoneda/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/preadditive/yoneda/limits.lean", "changes": []}]}, {"timestamp": 1678258835, "sha": "f4758115", "message": "chore(*): add mathlib4 synchronization comments (#18546)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.algebra.operations`\n* `algebra.algebra.restrict_scalars`\n* `algebra.lie.non_unital_non_assoc_algebra`\n* `algebra.order.algebra`\n* `algebra.star.module`\n* `algebra.star.star_alg_hom`\n* `category_theory.adjunction.evaluation`\n* `category_theory.adjunction.limits`\n* `category_theory.category.pairwise`\n* `category_theory.concrete_category.basic`\n* `category_theory.limits.constructions.binary_products`\n* `category_theory.limits.constructions.epi_mono`\n* `category_theory.limits.constructions.pullbacks`\n* `category_theory.limits.creates`\n* `category_theory.limits.exact_functor`\n* `category_theory.limits.full_subcategory`\n* `category_theory.limits.functor_category`\n* `category_theory.limits.preserves.finite`\n* `category_theory.limits.preserves.shapes.binary_products`\n* `category_theory.limits.preserves.shapes.equalizers`\n* `category_theory.limits.preserves.shapes.products`\n* `category_theory.limits.preserves.shapes.pullbacks`\n* `category_theory.limits.preserves.shapes.terminal`\n* `category_theory.limits.shapes.binary_products`\n* `category_theory.limits.shapes.disjoint_coproduct`\n* `category_theory.limits.shapes.equalizers`\n* `category_theory.limits.shapes.equivalence`\n* `category_theory.limits.shapes.finite_limits`\n* `category_theory.limits.shapes.images`\n* `category_theory.limits.shapes.products`\n* `category_theory.limits.shapes.pullbacks`\n* `category_theory.limits.shapes.regular_mono`\n* `category_theory.limits.shapes.split_coequalizer`\n* `category_theory.limits.shapes.strict_initial`\n* `category_theory.limits.shapes.terminal`\n* `category_theory.limits.shapes.zero_objects`\n* `category_theory.limits.unit`\n* `category_theory.limits.yoneda`\n* `category_theory.over`\n* `category_theory.path_category`\n* `category_theory.quotient`\n* `category_theory.sites.sieves`\n* `category_theory.structured_arrow`\n* `combinatorics.simple_graph.hasse`\n* `combinatorics.simple_graph.metric`\n* `combinatorics.simple_graph.prod`\n* `combinatorics.simple_graph.regularity.energy`\n* `combinatorics.simple_graph.trails`\n* `control.lawful_fix`\n* `group_theory.solvable`\n* `linear_algebra.affine_space.affine_map`\n* `linear_algebra.dfinsupp`\n* `topology.algebra.field`\n* `topology.algebra.group_completion`\n* `topology.algebra.infinite_sum.basic`\n* `topology.algebra.infinite_sum.order`\n* `topology.algebra.infinite_sum.real`\n* `topology.algebra.infinite_sum.ring`\n* `topology.algebra.order.field`\n* `topology.algebra.order.upper_lower`\n* `topology.algebra.ring.basic`\n* `topology.algebra.uniform_mul_action`\n* `topology.instances.int`\n* `topology.instances.nat`\n* `topology.instances.nnreal`\n* `topology.instances.rat`\n* `topology.instances.real`\n* `topology.locally_constant.algebra`\n* `topology.metric_space.algebra`\n* `topology.metric_space.antilipschitz`\n* `topology.metric_space.basic`\n* `topology.metric_space.emetric_paracompact`\n* `topology.metric_space.emetric_space`\n* `topology.metric_space.equicontinuity`\n* `topology.metric_space.infsep`\n* `topology.metric_space.lipschitz`\n* `topology.metric_space.metric_separated`\n* `topology.metric_space.shrinking_lemma`\n* `topology.sequences`", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/algebra/restrict_scalars.lean", "newPath": "src/algebra/algebra/restrict_scalars.lean", "changes": []}, {"oldPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "changes": []}, {"oldPath": "src/algebra/order/algebra.lean", "newPath": "src/algebra/order/algebra.lean", "changes": []}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/algebra/star/star_alg_hom.lean", "newPath": "src/algebra/star/star_alg_hom.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/evaluation.lean", "newPath": "src/category_theory/adjunction/evaluation.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/pairwise.lean", "newPath": "src/category_theory/category/pairwise.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/epi_mono.lean", "newPath": "src/category_theory/limits/constructions/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/exact_functor.lean", "newPath": "src/category_theory/limits/exact_functor.lean", "changes": []}, {"oldPath": "src/category_theory/limits/full_subcategory.lean", "newPath": "src/category_theory/limits/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/finite.lean", "newPath": "src/category_theory/limits/preserves/finite.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "newPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/products.lean", "newPath": "src/category_theory/limits/preserves/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/disjoint_coproduct.lean", "newPath": "src/category_theory/limits/shapes/disjoint_coproduct.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equivalence.lean", "newPath": "src/category_theory/limits/shapes/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "newPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/strict_initial.lean", "newPath": "src/category_theory/limits/shapes/strict_initial.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero_objects.lean", "newPath": "src/category_theory/limits/shapes/zero_objects.lean", "changes": []}, {"oldPath": "src/category_theory/limits/unit.lean", "newPath": "src/category_theory/limits/unit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/yoneda.lean", "newPath": "src/category_theory/limits/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/path_category.lean", "newPath": "src/category_theory/path_category.lean", "changes": []}, {"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": []}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/hasse.lean", "newPath": "src/combinatorics/simple_graph/hasse.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/metric.lean", "newPath": "src/combinatorics/simple_graph/metric.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/prod.lean", "newPath": "src/combinatorics/simple_graph/prod.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/energy.lean", "newPath": "src/combinatorics/simple_graph/regularity/energy.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/trails.lean", "newPath": "src/combinatorics/simple_graph/trails.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum/basic.lean", "newPath": "src/topology/algebra/infinite_sum/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum/order.lean", "newPath": "src/topology/algebra/infinite_sum/order.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum/real.lean", "newPath": "src/topology/algebra/infinite_sum/real.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum/ring.lean", "newPath": "src/topology/algebra/infinite_sum/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/field.lean", "newPath": "src/topology/algebra/order/field.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/upper_lower.lean", "newPath": "src/topology/algebra/order/upper_lower.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring/basic.lean", "newPath": "src/topology/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_mul_action.lean", "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": []}, {"oldPath": "src/topology/instances/int.lean", "newPath": "src/topology/instances/int.lean", "changes": []}, {"oldPath": "src/topology/instances/nat.lean", "newPath": "src/topology/instances/nat.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/rat.lean", "newPath": "src/topology/instances/rat.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/algebra.lean", "newPath": "src/topology/metric_space/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_paracompact.lean", "newPath": "src/topology/metric_space/emetric_paracompact.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/equicontinuity.lean", "newPath": "src/topology/metric_space/equicontinuity.lean", "changes": []}, {"oldPath": "src/topology/metric_space/infsep.lean", "newPath": "src/topology/metric_space/infsep.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metric_separated.lean", "newPath": "src/topology/metric_space/metric_separated.lean", "changes": []}, {"oldPath": "src/topology/metric_space/shrinking_lemma.lean", "newPath": "src/topology/metric_space/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1678220415, "sha": "38f16f96", "message": "feat(analysis/fourier): Poisson summation for polynomially-decaying functions (#18556)\nThis PR proves some alternate formulations of Poisson's summation formula with less general, but simpler-to-verify, hypotheses.", "changes": [{"oldPath": "src/analysis/fourier/poisson_summation.lean", "newPath": "src/analysis/fourier/poisson_summation.lean", "changes": [["add", "theorem", "is_O_norm_Icc_restrict_at_bot", []], ["add", "theorem", "is_O_norm_Icc_restrict_at_top", []], ["add", "theorem", "is_O_norm_restrict_cocompact", []], ["add", "theorem", "tsum_eq_tsum_fourier_integral_of_rpow_decay", ["real"]], ["add", "theorem", "tsum_eq_tsum_fourier_integral_of_rpow_decay_of_summable", ["real"]], ["add", "theorem", "tsum_eq_tsum_fourier_integral", ["schwartz_map"]]]}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": [["add", "theorem", "summable_abs_int_rpow", ["real"]]]}, {"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": [["add", "theorem", "is_O_cocompact_rpow", ["schwartz_map"]], ["add", "theorem", "is_O_cocompact_zpow", ["schwartz_map"]], ["add", "theorem", "is_O_cocompact_zpow_neg_nat", ["schwartz_map"]], ["add", "def", "to_continuous_map", ["schwartz_map"]]]}]}, {"timestamp": 1678216094, "sha": "be2c24f5", "message": "feat(geometry/manifold/vector_bundle/basic): smooth vector bundles (#17611)\nDefinition of smooth vector bundle, and basic constructions (direct sum, pullback, core construction).", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "clm_apply", ["cont_mdiff"]], ["mod", "theorem", "clm_comp", ["cont_mdiff"]], ["add", "theorem", "clm_prod_map", ["cont_mdiff"]], ["add", "theorem", "clm_apply", ["cont_mdiff_at"]], ["mod", "theorem", "clm_comp", ["cont_mdiff_at"]], ["add", "theorem", "clm_prod_map", ["cont_mdiff_at"]], ["add", "theorem", "clm_apply", ["cont_mdiff_on"]], ["mod", "theorem", "clm_comp", ["cont_mdiff_on"]], ["add", "theorem", "clm_prod_map", ["cont_mdiff_on"]], ["add", "theorem", "clm_apply", ["cont_mdiff_within_at"]], ["mod", "theorem", "clm_comp", ["cont_mdiff_within_at"]], ["add", "theorem", "clm_prod_map", ["cont_mdiff_within_at"]]]}, {"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": []}, {"oldPath": null, "newPath": "src/geometry/manifold/vector_bundle/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/vector_bundle.lean", "newPath": "src/geometry/manifold/vector_bundle/fiberwise_linear.lean", "changes": [["add", "theorem", "mem_smooth_fiberwise_linear_iff", []]]}, {"oldPath": null, "newPath": "src/geometry/manifold/vector_bundle/pullback.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/basic.lean", "newPath": "src/topology/fiber_bundle/basic.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/constructions.lean", "newPath": "src/topology/fiber_bundle/constructions.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/is_homeomorphic_trivial_bundle.lean", "newPath": "src/topology/fiber_bundle/is_homeomorphic_trivial_bundle.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle/trivialization.lean", "newPath": "src/topology/fiber_bundle/trivialization.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["add", "theorem", "apply_symm_apply_eq_coord_changeL", ["trivialization"]], ["add", "theorem", "coe_coord_changeL'", ["trivialization"]], ["add", "theorem", "symm_coord_changeL", ["trivialization"]]]}, {"oldPath": "src/topology/vector_bundle/constructions.lean", "newPath": "src/topology/vector_bundle/constructions.lean", "changes": [["add", "theorem", "coord_changeL_prod", ["trivialization"]]]}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": []}]}, {"timestamp": 1678174021, "sha": "78261225", "message": "chore(linear_algebra/affine_space/midpoint): factor out lemmas about char_zero (#18555)\nThis removes the dependency on `char_p` in `analysis.convex.segment` and `analysis.normed.group.add_torsor`.", "changes": [{"oldPath": "src/analysis/convex/between.lean", "newPath": "src/analysis/convex/between.lean", "changes": []}, {"oldPath": "src/analysis/convex/slope.lean", "newPath": "src/analysis/convex/slope.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": [["del", "theorem", "homothety_inv_of_two", []], ["del", "theorem", "homothety_inv_two", []], ["del", "theorem", "homothety_one_half", []], ["del", "theorem", "line_map_inv_two", []], ["del", "theorem", "line_map_one_half", []], ["del", "theorem", "pi_midpoint_apply", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/midpoint_zero.lean", "changes": [["add", "theorem", "homothety_inv_of_two", []], ["add", "theorem", "homothety_inv_two", []], ["add", "theorem", "homothety_one_half", []], ["add", "theorem", "line_map_inv_two", []], ["add", "theorem", "line_map_one_half", []], ["add", "theorem", "pi_midpoint_apply", []]]}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}]}, {"timestamp": 1677993298, "sha": "3b267e70", "message": "feat(topology/homeomorph): add `homeomorph.symm_symm` (#18551)\nI'm surprised we didn't have this lemma.", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "symm_symm", ["homeomorph"]]]}]}, {"timestamp": 1677974237, "sha": "346bace1", "message": "feat(measure_theory/function/l1_space): Hölder's inequality specialized to integrable functions (#18550)\nSpecialize Hölder's inequality for scalar product of an integrable and a finite-essential-supremum function.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "ess_sup_smul", ["measure_theory", "integrable"]], ["add", "theorem", "smul_ess_sup", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1677967679, "sha": "fbde2f60", "message": "feat(measure_theory/integral): integral_tsum (#18549)\nInterchanging Bochner integrals with `tsum`s.\nReplaces #18508 with a quicker approach.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "nnreal_tsum", ["ae_measurable"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_tsum", ["measure_theory"]]]}]}, {"timestamp": 1677882319, "sha": "641b6a82", "message": "feat(number_theory/number_field/basic): add integral_basis (#18474)", "changes": [{"oldPath": "src/number_theory/number_field/basic.lean", "newPath": "src/number_theory/number_field/basic.lean", "changes": [["add", "theorem", "integral_basis_apply", ["number_field"]], ["mod", "theorem", "not_is_field", ["number_field", "ring_of_integers"]], ["add", "theorem", "rank", ["number_field", "ring_of_integers"]]]}, {"oldPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "newPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "changes": [["add", "theorem", "is_localization", ["is_integral_closure"]], ["add", "theorem", "module_free", ["is_integral_closure"]], ["add", "theorem", "rank", ["is_integral_closure"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "no_zero_smul_divisors", ["is_integral_closure"]]]}]}, {"timestamp": 1677870102, "sha": "d2d8742b", "message": "chore(logic/equiv/basic): Generalize Type to Sort (#18543)\nThis backports a change that was already made in mathlib4.\nIndeed, mathport complains that the change was made, see the comments in https://github.com/leanprover-community/mathlib3port/blob/e3a205b1f51e409563e9e4294f41dd4df61f578a/Mathbin/Logic/Equiv/Basic.lean#L1729-L1735\nBy backporting this, we can deal with the fallout up-front rather than during porting.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["mod", "def", "foldl_with_index", ["list"]], ["mod", "def", "foldl_with_index_aux", ["list"]], ["mod", "def", "foldr_with_index", ["list"]], ["mod", "def", "foldr_with_index_aux", ["list"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "eq_iff_eq_cancel_left", []], ["mod", "theorem", "eq_iff_eq_cancel_right", []]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["mod", "def", "subtype_equiv_prop", ["equiv"]], ["mod", "def", "subtype_subtype_equiv_subtype_exists", ["equiv"]], ["mod", "def", "subtype_subtype_equiv_subtype_inter", ["equiv"]], ["mod", "theorem", "map_swap", ["function", "injective"]]]}, {"oldPath": "src/logic/nonempty.lean", "newPath": "src/logic/nonempty.lean", "changes": [["mod", "theorem", "nonempty", ["function", "surjective"]]]}]}, {"timestamp": 1677852244, "sha": "62e8311c", "message": "fix(data/set/semiring): fix lemma name (#18545)\nThis was a typo by me", "changes": [{"oldPath": "src/data/set/semiring.lean", "newPath": "src/data/set/semiring.lean", "changes": [["del", "theorem", "down_image_def", ["set_semiring"]], ["add", "theorem", "image_hom_def", ["set_semiring"]]]}]}, {"timestamp": 1677790576, "sha": "ec80bb15", "message": "feat(field_theory/ratfunc): add lemma `coe_sub` (#18542)\nadd lemma `coe_sub` stating that the coercion from rational functions to Laurent series commutes with subtraction. It is part of the long list of lemmas like `coe_add`, `coe_mul` and the like that were already there.", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "theorem", "coe_neg", ["ratfunc"]], ["add", "theorem", "coe_pow", ["ratfunc"]], ["add", "theorem", "coe_sub", ["ratfunc"]]]}]}, {"timestamp": 1677790574, "sha": "a484a7d0", "message": "feat(ring_theory/hahn_series): add lemma neg_order (#18541)\nadded lemma `neg_order` stating that the order of the opposite of a Hahn series (with coefficients in an `add_group`) is the same of the order of the series itself.", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "order_neg", ["hahn_series"]]]}]}, {"timestamp": 1677780318, "sha": "c310cfdc", "message": "chore(algebra/algebra/restrict_scalars): replace `restrict_scalars_smul_def` with version that does not commit defeq-abuse. (#18540)\nThis lemma abuses definitional equality and I think we are better without it. My immediate motivation is the trouble it is causing in the Mathlib4 porting PR: https://github.com/leanprover-community/mathlib4/pull/2563\nNote that it was only used in one place and there is a better proof.", "changes": [{"oldPath": "src/algebra/algebra/restrict_scalars.lean", "newPath": "src/algebra/algebra/restrict_scalars.lean", "changes": [["add", "theorem", "smul_def", ["restrict_scalars"]], ["del", "theorem", "restrict_scalars_smul_def", []]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}]}, {"timestamp": 1677780313, "sha": "27b54c47", "message": "fix(algebra/algebra/operations): add missing `set_semiring.down` casts (#18539)\nPreviously this was abusing the defeq of the types, resulting in lemmas stated in weird ways.\nThis also fixes a type in #18449, and adds three missing lemmas about `image_hom`.\nForward port of `set_semiring` will be included in https://github.com/leanprover-community/mathlib4/pull/2518", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["mod", "theorem", "smul_def", ["submodule"]], ["mod", "theorem", "smul_le_smul", ["submodule"]]]}, {"oldPath": "src/data/set/semiring.lean", "newPath": "src/data/set/semiring.lean", "changes": [["add", "theorem", "up_image", ["set"]], ["add", "theorem", "down_image_def", ["set_semiring"]], ["add", "theorem", "down_image_hom", ["set_semiring"]], ["mod", "theorem", "down_mul", ["set_semiring"]]]}]}, {"timestamp": 1677780310, "sha": "f5edf469", "message": "chore(ring_theory/finiteness): remove references to `ideal.quotient` (#18538)\nThis proof is not meaningfully more complex, and it removes a dependency that has to be ported before this file can be ported.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1677780306, "sha": "832f7b91", "message": "chore(*): add mathlib4 synchronization comments (#18535)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.algebra.bilinear`\n* `algebra.algebra.pi`\n* `algebra.algebra.tower`\n* `category_theory.limits.filtered`\n* `category_theory.limits.preserves.basic`\n* `category_theory.limits.preserves.limits`\n* `category_theory.limits.shapes.wide_pullbacks`\n* `combinatorics.simple_graph.acyclic`\n* `combinatorics.simple_graph.connectivity`\n* `combinatorics.simple_graph.regularity.uniform`\n* `data.nat.digits`\n* `linear_algebra.basis.bilinear`\n* `linear_algebra.tensor_product`", "changes": [{"oldPath": "src/algebra/algebra/bilinear.lean", "newPath": "src/algebra/algebra/bilinear.lean", "changes": []}, {"oldPath": "src/algebra/algebra/pi.lean", "newPath": "src/algebra/algebra/pi.lean", "changes": []}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered.lean", "newPath": "src/category_theory/limits/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/limits.lean", "newPath": "src/category_theory/limits/preserves/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/acyclic.lean", "newPath": "src/combinatorics/simple_graph/acyclic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "newPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis/bilinear.lean", "newPath": "src/linear_algebra/basis/bilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1677769994, "sha": "f62c15c0", "message": "feat(linear_algebra/free_module/pid): rename module.free_of_finite_type_torsion_free (#18537)\nSee https://github.com/leanprover-community/mathlib/pull/18474#discussion_r1122802316", "changes": [{"oldPath": "src/algebra/module/pid.lean", "newPath": "src/algebra/module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": [["add", "theorem", "free_of_finite_type_torsion_free'", ["module"]], ["add", "theorem", "free_of_finite_type_torsion_free", ["module"]]]}]}, {"timestamp": 1677769992, "sha": "c10e724b", "message": "refactor(topology/algebra/field): drop `topological_space_units` (#18536)\nSee [Zulip chat](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/topology.20on.20units/near/324188800)\nAlso generalize TC assumptions in `inv_mem_iff`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "inv_mem_iff", []]]}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["mod", "theorem", "inv_coe_set", []]]}, {"oldPath": "src/topology/algebra/constructions.lean", "newPath": "src/topology/algebra/constructions.lean", "changes": [["add", "theorem", "embedding_coe_mk", ["units"]], ["add", "theorem", "topology_eq_inf", ["units"]]]}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": [["del", "theorem", "continuous_units_inv", ["topological_division_ring"]], ["del", "theorem", "units_top_group", ["topological_division_ring"]], ["del", "theorem", "continuous_coe", ["topological_ring", "induced_units"]], ["del", "def", "topological_space_units", ["topological_ring"]], ["del", "theorem", "units_embedding", ["topological_ring"]], ["del", "theorem", "units_topology_eq", ["topological_ring"]]]}, {"oldPath": "src/topology/algebra/group/basic.lean", "newPath": "src/topology/algebra/group/basic.lean", "changes": [["add", "def", "to_units_homeomorph", []]]}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["add", "theorem", "embedding_coe₀", ["units"]]]}]}, {"timestamp": 1677762652, "sha": "8da9e305", "message": "chore(set_theory/ordinal/initial_seg): swap the names of `init` and `init'` (#18534)\nThe former `init` was stated with the non-preferred `to_embedding` spelling, and the primed `init'` used `coe_fn`.\nSwapping them around is consistent with how most other bundled morphisms are handled.\nmathlib4 PR: https://github.com/leanprover-community/mathlib4/pull/2581", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["del", "theorem", "init'", ["initial_seg"]], ["add", "theorem", "init", ["initial_seg"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1677749274, "sha": "9b9d125b", "message": "feat(linear_algebra/direct_sum/tensor_product): one-sided distributivity constructions (#18514)\nWe had the two-sided distributivity already, analogous to `finset.sum_mul_sum`.\nThis PR adds constructions analogous to `finset.mul_sum` and `finset.sum_mul`.\nThis also tidies some namespacing and explicitness issues.", "changes": [{"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/tensor_product.lean", "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": [["del", "def", "direct_sum", ["tensor_product"]], ["add", "def", "direct_sum_left", ["tensor_product"]], ["add", "theorem", "direct_sum_left_symm_lof_tmul", ["tensor_product"]], ["add", "theorem", "direct_sum_left_tmul_lof", ["tensor_product"]], ["add", "def", "direct_sum_right", ["tensor_product"]], ["add", "theorem", "direct_sum_right_symm_lof_tmul", ["tensor_product"]], ["add", "theorem", "direct_sum_right_tmul_lof", ["tensor_product"]]]}]}, {"timestamp": 1677740503, "sha": "e7f0ddbf", "message": "refactor(ring_theory/ideal/operations): split quotients to a new file (#18531)\nThis file is growing quite long.\nSplitting it will reduce dependencies in (some) downstream files, and by becoming shorter also makes this file easier to edit and port.\nThis doesn't attempt to change any proofs in downstream files; instead, it just adds new imports to keep them compiling.\nThere are 9 downstream files which no longer depend on the `quotient_operations` file, although one of these now depends on `ring_theory.ideal.quotient`.\nA future PR will remove the `ring_theory.ideal.quotient_operations` import from more files.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "theorem", "ker_quot_left_to_quot_sup", ["double_quot"]], ["del", "theorem", "ker_quot_quot_mk", ["double_quot"]], ["del", "def", "lift_sup_quot_quot_mk", ["double_quot"]], ["del", "def", "quot_left_to_quot_sup", ["double_quot"]], ["del", "def", "quot_quot_equiv_comm", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_comm_algebra_map", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_comm_comp_quot_quot_mk", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_comm_mk_mk", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_comm_quot_quot_mk", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_comm_symm", ["double_quot"]], ["del", "def", "quot_quot_equiv_quot_of_le", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_quot_of_le_comp_quot_quot_mk", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_quot_of_le_quot_quot_mk", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_quot_of_le_symm_comp_mk", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_quot_of_le_symm_mk", ["double_quot"]], ["del", "def", "quot_quot_equiv_quot_sup", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_quot_sup_quot_quot_algebra_map", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_quot_sup_quot_quot_mk", ["double_quot"]], ["del", "theorem", "quot_quot_equiv_quot_sup_symm_quot_quot_mk", ["double_quot"]], ["del", "def", "quot_quot_mk", ["double_quot"]], ["del", "def", "quot_quot_to_quot_sup", ["double_quot"]], ["del", "theorem", "algebra_map_quotient_injective", ["ideal"]], ["del", "theorem", "bot_quotient_is_maximal_iff", ["ideal"]], ["del", "theorem", "comp_quotient_map_eq_of_comp_eq", ["ideal"]], ["del", "theorem", "map_smul", ["ideal", "ker_lift"]], ["del", "def", "ker_lift_alg", ["ideal"]], ["del", "theorem", "ker_lift_alg_injective", ["ideal"]], ["del", "theorem", "ker_lift_alg_mk", ["ideal"]], ["del", "theorem", "ker_lift_alg_to_ring_hom", ["ideal"]], ["del", "theorem", "ker_quotient_lift", ["ideal"]], ["del", "theorem", "map_mk_eq_bot_of_le", ["ideal"]], ["del", "theorem", "map_quotient_self", ["ideal"]], ["del", "theorem", "mem_quotient_iff_mem", ["ideal"]], ["del", "theorem", "mem_quotient_iff_mem_sup", ["ideal"]], ["del", "theorem", "mk_ker", ["ideal"]], ["del", "theorem", "alg_hom_ext", ["ideal", "quotient"]], ["del", "theorem", "alg_map_eq", ["ideal", "quotient"]], ["del", "theorem", "algebra_map_eq", ["ideal", "quotient"]], ["del", "def", "liftₐ", ["ideal", "quotient"]], ["del", "theorem", "liftₐ_apply", ["ideal", "quotient"]], ["del", "theorem", "liftₐ_comp", ["ideal", "quotient"]], ["del", "theorem", "mk_algebra_map", ["ideal", "quotient"]], ["del", "theorem", "mk_comp_algebra_map", ["ideal", "quotient"]], ["del", "def", "mkₐ", ["ideal", "quotient"]], ["del", "theorem", "mkₐ_eq_mk", ["ideal", "quotient"]], ["del", "theorem", "mkₐ_ker", ["ideal", "quotient"]], ["del", "theorem", "mkₐ_surjective", ["ideal", "quotient"]], ["del", "theorem", "mkₐ_to_ring_hom", ["ideal", "quotient"]], ["del", "def", "quotient_equiv", ["ideal"]], ["del", "def", "quotient_equiv_alg", ["ideal"]], ["del", "def", "quotient_equiv_alg_of_eq", ["ideal"]], ["del", "theorem", "quotient_equiv_alg_of_eq_mk", ["ideal"]], ["del", "theorem", "quotient_equiv_alg_of_eq_symm", ["ideal"]], ["del", "theorem", "quotient_equiv_mk", ["ideal"]], ["del", "theorem", "quotient_equiv_symm_mk", ["ideal"]], ["del", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse"]], ["del", "def", "quotient_ker_alg_equiv_of_right_inverse", ["ideal"]], ["del", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse_symm"]], ["del", "def", "quotient_map", ["ideal"]], ["del", "theorem", "quotient_map_algebra_map", ["ideal"]], ["del", "theorem", "quotient_map_comp_mk", ["ideal"]], ["del", "theorem", "quotient_map_comp_mkₐ", ["ideal"]], ["del", "theorem", "quotient_map_injective'", ["ideal"]], ["del", "theorem", "quotient_map_injective", ["ideal"]], ["del", "theorem", "quotient_map_mk", ["ideal"]], ["del", "theorem", "quotient_map_mkₐ", ["ideal"]], ["del", "theorem", "quotient_map_surjective", ["ideal"]], ["del", "def", "quotient_mapₐ", ["ideal"]], ["del", "def", "ker_lift", ["ring_hom"]], ["del", "theorem", "ker_lift_injective", ["ring_hom"]], ["del", "theorem", "ker_lift_mk", ["ring_hom"]], ["del", "theorem", "lift_injective_of_ker_le_ideal", ["ring_hom"]], ["del", "theorem", "apply", ["ring_hom", "quotient_ker_equiv_of_right_inverse"]], ["del", "theorem", "apply", ["ring_hom", "quotient_ker_equiv_of_right_inverse", "symm"]], ["del", "def", "quotient_ker_equiv_of_right_inverse", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ideal/quotient_operations.lean", "changes": [["add", "theorem", "ker_quot_left_to_quot_sup", ["double_quot"]], ["add", "theorem", "ker_quot_quot_mk", ["double_quot"]], ["add", "def", "lift_sup_quot_quot_mk", ["double_quot"]], ["add", "def", "quot_left_to_quot_sup", ["double_quot"]], ["add", "def", "quot_quot_equiv_comm", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_algebra_map", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_comp_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_mk_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_symm", ["double_quot"]], ["add", "def", "quot_quot_equiv_quot_of_le", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_le_comp_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_le_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_le_symm_comp_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_of_le_symm_mk", ["double_quot"]], ["add", "def", "quot_quot_equiv_quot_sup", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_sup_quot_quot_algebra_map", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_sup_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_sup_symm_quot_quot_mk", ["double_quot"]], ["add", "def", "quot_quot_mk", ["double_quot"]], ["add", "def", "quot_quot_to_quot_sup", ["double_quot"]], ["add", "theorem", "algebra_map_quotient_injective", ["ideal"]], ["add", "theorem", "bot_quotient_is_maximal_iff", ["ideal"]], ["add", "theorem", "comp_quotient_map_eq_of_comp_eq", ["ideal"]], ["add", "theorem", "map_smul", ["ideal", "ker_lift"]], ["add", "def", "ker_lift_alg", ["ideal"]], ["add", "theorem", "ker_lift_alg_injective", ["ideal"]], ["add", "theorem", "ker_lift_alg_mk", ["ideal"]], ["add", "theorem", "ker_lift_alg_to_ring_hom", ["ideal"]], ["add", "theorem", "ker_quotient_lift", ["ideal"]], ["add", "theorem", "map_mk_eq_bot_of_le", ["ideal"]], ["add", "theorem", "map_quotient_self", ["ideal"]], ["add", "theorem", "mem_quotient_iff_mem", ["ideal"]], ["add", "theorem", "mem_quotient_iff_mem_sup", ["ideal"]], ["add", "theorem", "mk_ker", ["ideal"]], ["add", "theorem", "alg_hom_ext", ["ideal", "quotient"]], ["add", "theorem", "alg_map_eq", ["ideal", "quotient"]], ["add", "theorem", "algebra_map_eq", ["ideal", "quotient"]], ["add", "def", "liftₐ", ["ideal", "quotient"]], ["add", "theorem", "liftₐ_apply", ["ideal", "quotient"]], ["add", "theorem", "liftₐ_comp", ["ideal", "quotient"]], ["add", "theorem", "mk_algebra_map", ["ideal", "quotient"]], ["add", "theorem", "mk_comp_algebra_map", ["ideal", "quotient"]], ["add", "def", "mkₐ", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_eq_mk", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_ker", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_surjective", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_to_ring_hom", ["ideal", "quotient"]], ["add", "def", "quotient_equiv", ["ideal"]], ["add", "def", "quotient_equiv_alg", ["ideal"]], ["add", "def", "quotient_equiv_alg_of_eq", ["ideal"]], ["add", "theorem", "quotient_equiv_alg_of_eq_mk", ["ideal"]], ["add", "theorem", "quotient_equiv_alg_of_eq_symm", ["ideal"]], ["add", "theorem", "quotient_equiv_mk", ["ideal"]], ["add", "theorem", "quotient_equiv_symm_mk", ["ideal"]], ["add", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse"]], ["add", "def", "quotient_ker_alg_equiv_of_right_inverse", ["ideal"]], ["add", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse_symm"]], ["add", "def", "quotient_map", ["ideal"]], ["add", "theorem", "quotient_map_algebra_map", ["ideal"]], ["add", "theorem", "quotient_map_comp_mk", ["ideal"]], ["add", "theorem", "quotient_map_comp_mkₐ", ["ideal"]], ["add", "theorem", "quotient_map_injective'", ["ideal"]], ["add", "theorem", "quotient_map_injective", ["ideal"]], ["add", "theorem", "quotient_map_mk", ["ideal"]], ["add", "theorem", "quotient_map_mkₐ", ["ideal"]], ["add", "theorem", "quotient_map_surjective", ["ideal"]], ["add", "def", "quotient_mapₐ", ["ideal"]], ["add", "def", "ker_lift", ["ring_hom"]], ["add", "theorem", "ker_lift_injective", ["ring_hom"]], ["add", "theorem", "ker_lift_mk", ["ring_hom"]], ["add", "theorem", "lift_injective_of_ker_le_ideal", ["ring_hom"]], ["add", "theorem", "apply", ["ring_hom", "quotient_ker_equiv_of_right_inverse"]], ["add", "theorem", "apply", ["ring_hom", "quotient_ker_equiv_of_right_inverse", "symm"]], ["add", "def", "quotient_ker_equiv_of_right_inverse", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/localization/ideal.lean", "newPath": "src/ring_theory/localization/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1677715910, "sha": "9a59dcb7", "message": "chore(topology/algebra/ring): split into 2 files (#18532)", "changes": [{"oldPath": "src/analysis/normed/group/infinite_sum.lean", "newPath": "src/analysis/normed/group/infinite_sum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum/real.lean", "newPath": "src/topology/algebra/infinite_sum/real.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum/ring.lean", "newPath": "src/topology/algebra/infinite_sum/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/localization.lean", "newPath": "src/topology/algebra/localization.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/field.lean", "newPath": "src/topology/algebra/order/field.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring/basic.lean", "changes": [["del", "def", "closure", ["ideal"]], ["del", "theorem", "closure_eq_of_is_closed", ["ideal"]], ["del", "theorem", "coe_closure", ["ideal"]], ["del", "theorem", "is_open_map_coe", ["quotient_ring"]], ["del", "theorem", "quotient_map_coe_coe", ["quotient_ring"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/ring/ideal.lean", "changes": [["add", "theorem", "closure_eq_of_is_closed", ["ideal"]], ["add", "theorem", "coe_closure", ["ideal"]], ["add", "theorem", "is_open_map_coe", ["quotient_ring"]], ["add", "theorem", "quotient_map_coe_coe", ["quotient_ring"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1677705684, "sha": "742aa2cb", "message": "feat(data.polynomial.div): add `theorem X_pow_dvd_iff` (#18528)\nAdd the `theorem X_pow_dvd_iff` saying that a polynomial is divisible by $X^n$ if and only if its first $(n-1)$ coefficients are $0$.", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["mod", "theorem", "X_dvd_iff", ["polynomial"]], ["add", "theorem", "X_pow_dvd_iff", ["polynomial"]]]}]}, {"timestamp": 1677705682, "sha": "f06058e6", "message": "feat(analysis/complex/upper_half_plane/metric): prove that SL(2, ℝ) acts isometrically on upper half space with the hyperbolic metric (#18379)\nA key part of the argument is to show that the element `modular_group.S` acts isometrically. We thus move the definition `modular_group.S` (and its partner `modular_group.T`) earlier in the import hierarchy to make it available without introducing a dependency on the theory of the modular group.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": [["add", "theorem", "exists_SL2_smul_eq_of_apply_zero_one_eq_zero", ["upper_half_plane"]], ["add", "theorem", "exists_SL2_smul_eq_of_apply_zero_one_ne_zero", ["upper_half_plane"]], ["add", "theorem", "im_inv_neg_coe_pos", ["upper_half_plane"]], ["add", "theorem", "modular_S_smul", ["upper_half_plane"]], ["add", "theorem", "special_linear_group_apply", ["upper_half_plane"]]]}, {"oldPath": "src/analysis/complex/upper_half_plane/metric.lean", "newPath": "src/analysis/complex/upper_half_plane/metric.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": [["add", "theorem", "dist_inv_inv₀", []], ["add", "theorem", "nndist_inv_inv₀", []]]}, {"oldPath": "src/linear_algebra/matrix/special_linear_group.lean", "newPath": "src/linear_algebra/matrix/special_linear_group.lean", "changes": [["add", "theorem", "fin_two_exists_eq_mk_of_apply_zero_one_eq_zero", ["matrix", "special_linear_group"]], ["add", "theorem", "fin_two_induction", ["matrix", "special_linear_group"]], ["add", "def", "S", ["modular_group"]], ["add", "def", "T", ["modular_group"]], ["add", "theorem", "T_inv_mul_apply_one", ["modular_group"]], ["add", "theorem", "T_mul_apply_one", ["modular_group"]], ["add", "theorem", "T_pow_mul_apply_one", ["modular_group"]], ["add", "theorem", "coe_S", ["modular_group"]], ["add", "theorem", "coe_T", ["modular_group"]], ["add", "theorem", "coe_T_inv", ["modular_group"]], ["add", "theorem", "coe_T_zpow", ["modular_group"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": [["del", "def", "S", ["modular_group"]], ["del", "def", "T", ["modular_group"]], ["del", "theorem", "T_inv_mul_apply_one", ["modular_group"]], ["del", "theorem", "T_mul_apply_one", ["modular_group"]], ["del", "theorem", "T_pow_mul_apply_one", ["modular_group"]], ["del", "theorem", "coe_S", ["modular_group"]], ["del", "theorem", "coe_T", ["modular_group"]], ["del", "theorem", "coe_T_inv", ["modular_group"]], ["del", "theorem", "coe_T_zpow", ["modular_group"]]]}]}, {"timestamp": 1677705681, "sha": "842328d9", "message": "feat(data/finsupp/indicator, algebra/big_operators/finsupp): add some lemmas about `finsupp.indicator` (#17413)\nmathlib4 PR: https://github.com/leanprover-community/mathlib4/pull/2258", "changes": [{"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": [["add", "theorem", "indicator_eq_sum_single", ["finsupp"]], ["add", "theorem", "prod_indicator_index", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/defs.lean", "newPath": "src/data/finsupp/defs.lean", "changes": [["del", "theorem", "single_eq_indicator", ["finsupp"]], ["add", "theorem", "single_eq_set_indicator", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/indicator.lean", "newPath": "src/data/finsupp/indicator.lean", "changes": [["add", "theorem", "single_eq_indicator", ["finsupp"]]]}]}, {"timestamp": 1677693977, "sha": "195fcd60", "message": "refactor(topology/uniform_space/basic): review API (#18516)\n### API about uniform embeddings\n* Add `mk_iff` to `uniform_inducing` and `uniform_embedding`.\n* Move lemmas about `uniform_inducing` up.\n* Add `uniform_inducing.comap_uniform_space`, `uniform_inducing_iff'`, and `filter.has_basis.uniform_inducing_iff`.\n* Add `uniform_embedding_iff'`, `filter.has_basis.uniform_embedding_iff'`, and `filter.has_basis.uniform_embedding_iff`.\n* Drop `uniform_embedding_def` and `uniform_embedding_def'`.\n* Add `uniform_embedding_iff_uniform_inducing`.\n### Other changes\n* Add `rescale_to_shell_semi_normed_zpow` and `rescale_to_shell_zpow`.\n* Generalize `continuous_linear_map.antilipschitz_of_uniform_embedding` to `continuous_linear_map.antilipschitz_of_embedding`, add an even more general version `linear_map.antilipschitz_of_comap_nhds_le`.\n* Use `fully_applied := ff` to generate `equiv.prod_congr_apply`.\n* Use `edist := λ _ _, 0` in `metric_space` instances for `empty` and `punit`.\n* Add `inducing.injective`, `inducing.embedding`, and `embedding_iff_inducing`\n* Allow `Sort*`s in `filter.has_basis.uniform_continuous_iff` and `filter.has_basis.uniform_continuous_on_iff`.\n* Rename\n * `metric.of_t0_pseudo_metric_space` to `metric_space.of_t0_pseudo_metric_space`;\n * `emetric.of_t0_pseudo_emetric_space` to `emetric_space.of_t0_pseudo_emetric_space`;\n * `metric.metric_space.to_emetric_space` to `metric_space.to_emetric_space`;\n * `uniform_embedding_iff'` to `emetric.uniform_embedding_iff'`", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "rescale_to_shell_semi_normed_zpow", []], ["add", "theorem", "rescale_to_shell_zpow", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "antilipschitz_of_embedding", ["continuous_linear_map"]], ["del", "theorem", "antilipschitz_of_uniform_embedding", ["continuous_linear_map"]], ["add", "theorem", "antilipschitz_of_comap_nhds_le", ["linear_map"]], ["mod", "theorem", "bound_of_ball_bound", ["linear_map"]], ["mod", "theorem", "bound_of_shell", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "def", "to_metric_space", ["emetric_space"]], ["del", "def", "of_t0_pseudo_metric_space", ["metric"]], ["add", "def", "of_t0_pseudo_metric_space", ["metric_space"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["del", "def", "of_t0_pseudo_emetric_space", ["emetric"]], ["add", "theorem", "uniform_embedding_iff'", ["emetric"]], ["add", "def", "of_t0_pseudo_emetric_space", ["emetric_space"]], ["del", "theorem", "uniform_embedding_iff'", []]]}, {"oldPath": "src/topology/metric_space/metrizable_uniformity.lean", "newPath": "src/topology/metric_space/metrizable_uniformity.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "embedding_iff_inducing", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "uniform_continuous_iff", ["filter", "has_basis"]], ["mod", "theorem", "uniform_continuous_on_iff", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "uniform_embedding_iff'", ["filter", "has_basis"]], ["add", "theorem", "uniform_embedding_iff", ["filter", "has_basis"]], ["del", "theorem", "embedding", ["uniform_embedding"]], ["del", "theorem", "uniform_embedding_def'", []], ["del", "theorem", "uniform_embedding_def", []], ["add", "theorem", "uniform_embedding_iff'", []], ["add", "theorem", "uniform_embedding_iff_uniform_inducing", []], ["del", "theorem", "inducing", ["uniform_inducing"]], ["add", "theorem", "uniform_inducing_iff'", []]]}]}, {"timestamp": 1677688997, "sha": "989433cb", "message": "perf(analysis/inner_product_space/spectrum): Squeeze simps (#18529)\nFrom 17.6s to 1.8s on my machine.", "changes": [{"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}]}, {"timestamp": 1677681441, "sha": "fee218fb", "message": "doc(order/game_add): minor doc improvement (#18525)\nPorted along with other changes to the file: https://github.com/leanprover-community/mathlib4/pull/2532", "changes": [{"oldPath": "src/order/game_add.lean", "newPath": "src/order/game_add.lean", "changes": []}]}, {"timestamp": 1677681439, "sha": "dfb0adb7", "message": "chore(ring_theory/polynomial): squeeze a `simpa` (#18524)\nThis turns the tactic execution time from over 18s to under 700ms on my machine.\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Timeout.20in.20ring_theory.2Epolynomial.2Ebasic", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1677673828, "sha": "8ee653c0", "message": "doc(set_theory/ordinal/exponential): improve module docstring (#18522)\nPair: https://github.com/leanprover-community/mathlib4/pull/2551", "changes": [{"oldPath": "src/set_theory/ordinal/exponential.lean", "newPath": "src/set_theory/ordinal/exponential.lean", "changes": []}]}, {"timestamp": 1677673826, "sha": "c5773405", "message": "feat(analysis/convex/extreme): Extreme points of `s ×ˢ t` (#18171)\nCharacterise `segment`, `open_segment`, `extreme_points` in `prod` and `pi`.", "changes": [{"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": [["del", "theorem", "extreme_points_def", []], ["add", "theorem", "extreme_points_pi", []], ["add", "theorem", "extreme_points_prod", []], ["mod", "theorem", "is_extreme_Inter", []], ["mod", "theorem", "is_extreme_bInter", []], ["add", "theorem", "mem_extreme_points", []]]}, {"oldPath": "src/analysis/convex/segment.lean", "newPath": "src/analysis/convex/segment.lean", "changes": [["add", "theorem", "image_open_segment", []], ["add", "theorem", "image_segment", []], ["mod", "theorem", "mem_segment_translate", []], ["del", "theorem", "open_segment_image", []], ["add", "theorem", "image_update_open_segment", ["pi"]], ["add", "theorem", "image_update_segment", ["pi"]], ["add", "theorem", "open_segment_subset", ["pi"]], ["add", "theorem", "segment_subset", ["pi"]], ["add", "theorem", "image_mk_open_segment_left", ["prod"]], ["add", "theorem", "image_mk_open_segment_right", ["prod"]], ["add", "theorem", "image_mk_segment_left", ["prod"]], ["add", "theorem", "image_mk_segment_right", ["prod"]], ["add", "theorem", "open_segment_subset", ["prod"]], ["add", "theorem", "segment_subset", ["prod"]], ["del", "theorem", "segment_image", []], ["add", "theorem", "vadd_open_segment", []], ["add", "theorem", "vadd_segment", []]]}]}, {"timestamp": 1677668627, "sha": "e876965f", "message": "chore(combinatorics/simple_graph/connectivity): open a namespace block for `connected_component` (#18520)", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["mod", "def", "map", ["simple_graph", "connected_component"]], ["mod", "theorem", "map_comp", ["simple_graph", "connected_component"]], ["mod", "theorem", "map_id", ["simple_graph", "connected_component"]], ["mod", "theorem", "map_mk", ["simple_graph", "connected_component"]], ["mod", "theorem", "subsingleton_connected_component", ["simple_graph", "preconnected"]]]}]}, {"timestamp": 1677660934, "sha": "35882ddc", "message": "fix(algebra/star/star_alg_hom): fix typo in `star_alg_hom.coe_coe` (#18519)", "changes": [{"oldPath": "src/algebra/star/star_alg_hom.lean", "newPath": "src/algebra/star/star_alg_hom.lean", "changes": [["mod", "theorem", "coe_coe", ["star_alg_hom"]]]}]}, {"timestamp": 1677660932, "sha": "c6ef6387", "message": "feat(combinatorics/simple_graph/basic): Simple graphs form a complete boolean algebra (#18285)\nUpgrade the `boolean_algebra (simple_graph α)` and `lattice G.subgraph` instances to `complete_boolean_algebra (simple_graph α)` and `complete_distrib_lattice G.subgraph` respectively. Add `distrib_lattice`/`complete_distrib_lattice` instances for `G.finsubgraph`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "Inf_adj", ["simple_graph"]], ["add", "theorem", "Inf_adj_of_nonempty", ["simple_graph"]], ["add", "theorem", "Sup_adj", ["simple_graph"]], ["add", "theorem", "adj_inj", ["simple_graph"]], ["add", "theorem", "adj_injective", ["simple_graph"]], ["add", "theorem", "infi_adj", ["simple_graph"]], ["add", "theorem", "infi_adj_of_nonempty", ["simple_graph"]], ["add", "theorem", "supr_adj", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/finsubgraph.lean", "newPath": "src/combinatorics/simple_graph/finsubgraph.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "Inf_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "Inf_adj_of_nonempty", ["simple_graph", "subgraph"]], ["add", "theorem", "Sup_adj", ["simple_graph", "subgraph"]], ["del", "def", "bot", ["simple_graph", "subgraph"]], ["del", "theorem", "bot_verts", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_Inf", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_Sup", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_infi", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_supr", ["simple_graph", "subgraph"]], ["mod", "theorem", "inf_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "infi_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "infi_adj_of_nonempty", ["simple_graph", "subgraph"]], ["del", "def", "inter", ["simple_graph", "subgraph"]], ["del", "def", "is_subgraph", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_Inf", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_Sup", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_bot", ["simple_graph", "subgraph"]], ["mod", "theorem", "neighbor_set_inf", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_infi", ["simple_graph", "subgraph"]], ["mod", "theorem", "neighbor_set_sup", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_supr", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_top", ["simple_graph", "subgraph"]], ["mod", "theorem", "not_bot_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "spanning_coe_inj", ["simple_graph", "subgraph"]], ["mod", "theorem", "sup_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "supr_adj", ["simple_graph", "subgraph"]], ["del", "def", "top", ["simple_graph", "subgraph"]], ["add", "theorem", "top_adj", ["simple_graph", "subgraph"]], ["del", "theorem", "top_adj_iff", ["simple_graph", "subgraph"]], ["del", "theorem", "top_verts", ["simple_graph", "subgraph"]], ["del", "def", "union", ["simple_graph", "subgraph"]], ["add", "theorem", "verts_Inf", ["simple_graph", "subgraph"]], ["add", "theorem", "verts_Sup", ["simple_graph", "subgraph"]], ["add", "theorem", "verts_bot", ["simple_graph", "subgraph"]], ["mod", "theorem", "verts_inf", ["simple_graph", "subgraph"]], ["add", "theorem", "verts_infi", ["simple_graph", "subgraph"]], ["mod", "theorem", "verts_sup", ["simple_graph", "subgraph"]], ["add", "theorem", "verts_supr", ["simple_graph", "subgraph"]], ["add", "theorem", "verts_top", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1677650349, "sha": "ee05e9ce", "message": "chore(*): add mathlib4 synchronization comments (#18494)\nRegenerated from the [port status wiki page](https://github.com/leanprover-community/mathlib/wiki/mathlib4-port-status).\nRelates to the following files:\n* `algebra.algebra.equiv`\n* `algebra.hom.non_unital_alg`\n* `algebra.lie.basic`\n* `algebra.module.submodule.bilinear`\n* `algebra.order.hom.ring`\n* `category_theory.adjunction.mates`\n* `category_theory.adjunction.reflective`\n* `category_theory.bicategory.functor`\n* `category_theory.filtered`\n* `category_theory.limits.cones`\n* `category_theory.limits.has_limits`\n* `category_theory.limits.is_limit`\n* `category_theory.monoidal.functorial`\n* `category_theory.sums.associator`\n* `combinatorics.simple_graph.basic`\n* `combinatorics.simple_graph.clique`\n* `combinatorics.simple_graph.coloring`\n* `combinatorics.simple_graph.density`\n* `combinatorics.simple_graph.partition`\n* `combinatorics.simple_graph.strongly_regular`\n* `combinatorics.simple_graph.subgraph`\n* `combinatorics.simple_graph.triangle.basic`\n* `data.W.cardinal`\n* `data.real.conjugate_exponents`\n* `data.real.enat_ennreal`\n* `data.real.ennreal`\n* `data.real.ereal`\n* `dynamics.omega_limit`\n* `group_theory.perm.option`\n* `group_theory.perm.sign`\n* `linear_algebra.basis`\n* `linear_algebra.bilinear_map`\n* `linear_algebra.linear_pmap`\n* `linear_algebra.ray`\n* `logic.equiv.fintype`\n* `order.filter.ennreal`\n* `set_theory.cardinal.cofinality`\n* `set_theory.cardinal.continuum`\n* `set_theory.cardinal.divisibility`\n* `set_theory.ordinal.cantor_normal_form`\n* `topology.algebra.order.floor`\n* `topology.algebra.uniform_group`\n* `topology.tactic`\n* `topology.uniform_space.compact`\n* `topology.uniform_space.equicontinuity`\n* `topology.uniform_space.uniform_convergence_topology`", "changes": [{"oldPath": "src/algebra/algebra/equiv.lean", "newPath": "src/algebra/algebra/equiv.lean", "changes": []}, {"oldPath": "src/algebra/hom/non_unital_alg.lean", "newPath": "src/algebra/hom/non_unital_alg.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule/bilinear.lean", "newPath": "src/algebra/module/submodule/bilinear.lean", "changes": []}, {"oldPath": "src/algebra/order/hom/ring.lean", "newPath": "src/algebra/order/hom/ring.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/mates.lean", "newPath": "src/category_theory/adjunction/mates.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/functor.lean", "newPath": "src/category_theory/bicategory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functorial.lean", "newPath": "src/category_theory/monoidal/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/sums/associator.lean", "newPath": "src/category_theory/sums/associator.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/clique.lean", "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/coloring.lean", "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/density.lean", "newPath": "src/combinatorics/simple_graph/density.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/partition.lean", "newPath": "src/combinatorics/simple_graph/partition.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/strongly_regular.lean", "newPath": "src/combinatorics/simple_graph/strongly_regular.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/triangle/basic.lean", "newPath": "src/combinatorics/simple_graph/triangle/basic.lean", "changes": []}, {"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": []}, {"oldPath": "src/data/real/enat_ennreal.lean", "newPath": "src/data/real/enat_ennreal.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/group_theory/perm/option.lean", "newPath": "src/group_theory/perm/option.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": []}, {"oldPath": "src/logic/equiv/fintype.lean", "newPath": "src/logic/equiv/fintype.lean", "changes": []}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/divisibility.lean", "newPath": "src/set_theory/cardinal/divisibility.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/floor.lean", "newPath": "src/topology/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/tactic.lean", "newPath": "src/topology/tactic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact.lean", "newPath": "src/topology/uniform_space/compact.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/equicontinuity.lean", "newPath": "src/topology/uniform_space/equicontinuity.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "newPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "changes": []}]}, {"timestamp": 1677645810, "sha": "8195826f", "message": "refactor(category theory/cofiltered_systems): rename `mittag_leffler.lean` and move `nonempty_sections_of_fintype_cofiltered_system` into new file (#18433)\n* Create new file `category_theory/cofiltered_system.lean`.\n* Delete `category_theory/mittag_leffler.lean` and move its content there.\n* Move `nonempty_sections_of_fintype_cofiltered_system` and `nonempty_sections_of_fintype_inverse_system` there.\n* Some new lemmas.", "changes": [{"oldPath": "src/category_theory/mittag_leffler.lean", "newPath": "src/category_theory/cofiltered_system.lean", "changes": [["add", "theorem", "eval_section_injective_of_eventually_injective", ["category_theory", "functor"]], ["add", "theorem", "eval_section_surjective_of_surjective", ["category_theory", "functor"]], ["add", "theorem", "eventually_injective", ["category_theory", "functor"]], ["mod", "theorem", "surjective_to_eventual_ranges", ["category_theory", "functor"]], ["mod", "theorem", "thin_diagram_of_surjective", ["category_theory", "functor"]], ["add", "theorem", "to_preimages_nonempty_of_surjective", ["category_theory", "functor"]], ["add", "theorem", "init", ["nonempty_sections_of_finite_cofiltered_system"]], ["add", "theorem", "nonempty_sections_of_finite_cofiltered_system", []], ["add", "theorem", "nonempty_sections_of_finite_inverse_system", []]]}, {"oldPath": "src/combinatorics/hall/basic.lean", "newPath": "src/combinatorics/hall/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/ends/defs.lean", "newPath": "src/combinatorics/simple_graph/ends/defs.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/finsubgraph.lean", "newPath": "src/combinatorics/simple_graph/finsubgraph.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["mod", "theorem", "nonempty", ["Top", "partial_sections"]], ["del", "theorem", "init", ["nonempty_sections_of_fintype_cofiltered_system"]], ["del", "theorem", "nonempty_sections_of_fintype_cofiltered_system", []], ["del", "theorem", "nonempty_sections_of_fintype_inverse_system", []]]}]}, {"timestamp": 1677638547, "sha": "7a0dd7b2", "message": "feat(combinatorics/simple_graph/regularity/bound): Local `positivity` extension (#18368)\nI was finding myself writing long positivity proofs that relied only on a few Szemerédi Regularity Lemma-specific lemmas before applying a bunch of usual positivity lemmas.\nThis provides a SRL-specific `positivity` extension, which I turn on locally in the files internal to the proof of SRL. It works great and has significantly reduced the clutter.", "changes": [{"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": [["mod", "theorem", "coe_m_add_one_pos", ["szemeredi_regularity"]], ["del", "theorem", "m_coe_pos", ["szemeredi_regularity"]], ["mod", "theorem", "m_pos", ["szemeredi_regularity"]]]}]}, {"timestamp": 1677638546, "sha": "0dd4319a", "message": "chore(set_theory/ordinal/fixed_point): style + comments (#18322)\nWe add some missing brackets, and some much-needed comments on various functions.", "changes": [{"oldPath": "src/set_theory/ordinal/fixed_point.lean", "newPath": "src/set_theory/ordinal/fixed_point.lean", "changes": [["mod", "theorem", "nfp_le", ["ordinal"]]]}]}, {"timestamp": 1677626332, "sha": "ed90a7d3", "message": "refactor(ring_theory): submodules that are units are finitely generated (#18510)\n+ generalize from fractional_ideal to submodule.\n+ the algebra doesn't have to be commutative.\n+ introduce `fractional_ideal.coe_submodule_hom`.\nPotential future project: since we have [fractional_ideal.is_fractional_of_fg](https://leanprover-community.github.io/mathlib_docs/ring_theory/fractional_ideal.html#fractional_ideal.is_fractional_of_fg), submodules in a localization that are units are automatically fractional ideals, so [class_group](https://leanprover-community.github.io/mathlib_docs/ring_theory/class_group.html#class_group) could be defined as the invertible submodules in the fraction_ring modulo principal ones, without mentioning `is_fractional`. This might make `class_group` less complicated and therefore faster.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "fg_of_is_unit", ["submodule"]], ["add", "theorem", "fg_unit", ["submodule"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "def", "coe_submodule_hom", ["fractional_ideal"]]]}]}, {"timestamp": 1677622299, "sha": "8f66c29c", "message": "feat(set_theory/zfc/basic): range of indexed family of sets (#18296)", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "mem_range", ["Set"]], ["add", "theorem", "to_set_range", ["Set"]]]}]}, {"timestamp": 1677607472, "sha": "4c586d29", "message": "chore(data/{multiset,finset}/pi): generalize from `Type` to `Sort` (#18429)\nEverything in this file about `multiset.pi.cons` generalizes to `Sort`.\nThe parts of the file which don't generalize now use `β` instead.\nThis is motivated by #18417, though I do not know if supporting `Sort` is actually important there.\nForward-ported as https://github.com/leanprover-community/mathlib4/pull/2220", "changes": [{"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": [["mod", "theorem", "mem_pi", ["finset"]], ["mod", "def", "pi", ["finset"]], ["mod", "theorem", "pi_empty", ["finset"]], ["mod", "theorem", "pi_insert", ["finset"]], ["mod", "theorem", "pi_subset", ["finset"]], ["mod", "theorem", "pi_val", ["finset"]]]}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": [["mod", "theorem", "card_pi", ["multiset"]], ["mod", "theorem", "mem_pi", ["multiset"]], ["mod", "def", "empty", ["multiset", "pi"]], ["mod", "def", "pi", ["multiset"]], ["mod", "theorem", "pi_cons", ["multiset"]], ["mod", "theorem", "pi_zero", ["multiset"]]]}]}, {"timestamp": 1677607471, "sha": "e6577119", "message": "feat(analysis/normed_space/star/continuous_functional_calculus): prove spectral permanence and construct the `continuous_functional_calculus` (#17164)\nThis PR proves the **spectral permanence** property for C⋆-algebras and constructs the **continuous functional calculus** for normal elements.\n- [x] depends on: #17000\n- [x] depends on: #17136 \n- [x] depends on: #17156\n- [x] depends on: #17166\n- [x] depends on: #17167\n- [x] depends on: #17169\n- [x] depends on: #17170\n- [x] depends on: #17178\n- [x] depends on: #17183\n- [x] depends on: #17504", "changes": [{"oldPath": "src/analysis/inner_product_space/two_dim.lean", "newPath": "src/analysis/inner_product_space/two_dim.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/star/continuous_functional_calculus.lean", "changes": [["add", "theorem", "continuous_functional_calculus_map_id", []], ["add", "theorem", "bijective_character_space_to_spectrum", ["elemental_star_algebra"]], ["add", "theorem", "continuous_character_space_to_spectrum", ["elemental_star_algebra"]], ["add", "theorem", "is_unit_of_is_unit_of_is_star_normal", ["elemental_star_algebra"]], ["add", "theorem", "spectrum_star_mul_self_of_is_star_normal", []], ["add", "theorem", "coe_is_unit", ["star_subalgebra"]], ["add", "theorem", "is_unit_coe_inv_mem", ["star_subalgebra"]], ["add", "theorem", "mem_spectrum_iff", ["star_subalgebra"]], ["add", "theorem", "spectrum_eq", ["star_subalgebra"]]]}, {"oldPath": "src/analysis/normed_space/star/gelfand_duality.lean", "newPath": "src/analysis/normed_space/star/gelfand_duality.lean", "changes": [["add", "theorem", "mem_spectrum_iff_exists", ["weak_dual", "character_space"]]]}, {"oldPath": "src/number_theory/modular_forms/slash_actions.lean", "newPath": "src/number_theory/modular_forms/slash_actions.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "newPath": "src/number_theory/modular_forms/slash_invariant_forms.lean", "changes": []}]}, {"timestamp": 1677599767, "sha": "da083dad", "message": "feat(combinatorics/simple_graph/hom): add basic definitions and lemmas for finite subgraphs (#16382)\nWe define `finsubgraph` and its corresponding vertex- and edge-based singletons, and prove some basic ordering lemmas on the singletons. This is primarily preparatory work for proving the De Bruijn-Erdős theorem (generalised to arbitrary finite codomain graphs).\n X\n | |\n snd 0\n | |\n v v\n Y", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/constructions/zero_objects.lean", "changes": [["add", "def", "binary_cofan_zero_left", ["category_theory", "limits"]], ["add", "def", "binary_cofan_zero_left_is_colimit", ["category_theory", "limits"]], ["add", "def", "binary_cofan_zero_right", ["category_theory", "limits"]], ["add", "def", "binary_cofan_zero_right_is_colimit", ["category_theory", "limits"]], ["add", "def", "binary_fan_zero_left", ["category_theory", "limits"]], ["add", "def", "binary_fan_zero_left_is_limit", ["category_theory", "limits"]], ["add", "def", "binary_fan_zero_right", ["category_theory", "limits"]], ["add", "def", "binary_fan_zero_right_is_limit", ["category_theory", "limits"]], ["add", "def", "coprod_zero_iso", ["category_theory", "limits"]], ["add", "theorem", "coprod_zero_iso_inv", ["category_theory", "limits"]], ["add", "theorem", "inl_pushout_zero_zero_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "inl_pushout_zero_zero_iso_inv", ["category_theory", "limits"]], ["add", "theorem", "inr_coprod_zeroiso_hom", ["category_theory", "limits"]], ["add", "theorem", "inr_pushout_zero_zero_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "inr_pushout_zero_zero_iso_inv", ["category_theory", "limits"]], ["add", "theorem", "inr_zero_coprod_iso_hom", ["category_theory", "limits"]], ["add", "def", "prod_zero_iso", ["category_theory", "limits"]], ["add", "theorem", "prod_zero_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "prod_zero_iso_iso_inv_snd", ["category_theory", "limits"]], ["add", "def", "pullback_zero_zero_iso", ["category_theory", "limits"]], ["add", "theorem", "pullback_zero_zero_iso_hom_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_zero_zero_iso_hom_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_zero_zero_iso_inv_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_zero_zero_iso_inv_snd", ["category_theory", "limits"]], ["add", "def", "pushout_zero_zero_iso", ["category_theory", "limits"]], ["add", "def", "zero_coprod_iso", ["category_theory", "limits"]], ["add", "theorem", "zero_coprod_iso_inv", ["category_theory", "limits"]], ["add", "def", "zero_prod_iso", ["category_theory", "limits"]], ["add", "theorem", "zero_prod_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "zero_prod_iso_inv_snd", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "is_colimit_mk", ["category_theory", "limits", "binary_cofan"]], ["add", "def", "is_limit_mk", ["category_theory", "limits", "binary_fan"]]]}, {"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": [["add", "theorem", "flip", ["category_theory", "bicartesian_sq"]], ["add", "theorem", "of_has_biproduct₁", ["category_theory", "bicartesian_sq"]], ["add", "theorem", "of_has_biproduct₂", ["category_theory", "bicartesian_sq"]], ["add", "theorem", "of_is_biproduct₁", ["category_theory", "bicartesian_sq"]], ["add", "theorem", "of_is_biproduct₂", ["category_theory", "bicartesian_sq"]], ["add", "theorem", "of_is_pullback_is_pushout", ["category_theory", "bicartesian_sq"]], ["add", "structure", "bicartesian_sq", ["category_theory"]], ["add", "theorem", "inl_snd'", ["category_theory", "is_pullback"]], ["add", "theorem", "inl_snd", ["category_theory", "is_pullback"]], ["add", "theorem", "inr_fst'", ["category_theory", "is_pullback"]], ["add", "theorem", "inr_fst", ["category_theory", "is_pullback"]], ["add", "theorem", "of_has_binary_biproduct", ["category_theory", "is_pullback"]], ["add", "theorem", "of_has_biproduct", ["category_theory", "is_pullback"]], ["add", "theorem", "of_is_bilimit'", ["category_theory", "is_pullback"]], ["add", "theorem", "of_is_bilimit", ["category_theory", "is_pullback"]], ["add", "theorem", "of_is_product'", ["category_theory", "is_pullback"]], ["add", "def", "pullback_biprod_inl_biprod_inr", ["category_theory", "is_pullback"]], ["add", "theorem", "zero_bot", ["category_theory", "is_pullback"]], ["mod", "theorem", "zero_left", ["category_theory", "is_pullback"]], ["add", "theorem", "zero_right", ["category_theory", "is_pullback"]], ["mod", "theorem", "zero_top", ["category_theory", "is_pullback"]], ["mod", "structure", "is_pullback", ["category_theory"]], ["add", "theorem", "inl_snd'", ["category_theory", "is_pushout"]], ["add", "theorem", "inl_snd", ["category_theory", "is_pushout"]], ["add", "theorem", "inr_fst'", ["category_theory", "is_pushout"]], ["add", "theorem", "inr_fst", ["category_theory", "is_pushout"]], ["add", "theorem", "of_has_binary_biproduct", ["category_theory", "is_pushout"]], ["add", "theorem", "of_has_biproduct", ["category_theory", "is_pushout"]], ["add", "theorem", "of_is_bilimit'", ["category_theory", "is_pushout"]], ["add", "theorem", "of_is_bilimit", ["category_theory", "is_pushout"]], ["add", "theorem", "of_is_coproduct'", ["category_theory", "is_pushout"]], ["add", "def", "pushout_biprod_fst_biprod_snd", ["category_theory", "is_pushout"]], ["mod", "theorem", "zero_bot", ["category_theory", "is_pushout"]], ["add", "theorem", "zero_left", ["category_theory", "is_pushout"]], ["mod", "theorem", "zero_right", ["category_theory", "is_pushout"]], ["add", "theorem", "zero_top", ["category_theory", "is_pushout"]], ["mod", "structure", "is_pushout", ["category_theory"]]]}]}, {"timestamp": 1664943007, "sha": "ae17d05f", "message": "chore(algebra/hom/non_unital_alg): add missing `non_unital_ring_hom_class` instance (#16783)\nThis instance was missing because `non_unital_alg_hom` was defined before `non_unital_ring_hom`.", "changes": [{"oldPath": "src/algebra/hom/non_unital_alg.lean", "newPath": "src/algebra/hom/non_unital_alg.lean", "changes": []}]}, {"timestamp": 1664934144, "sha": "8f83c26d", "message": "feat(ring_theory/ideal/minimal_prime): Minimal prime ideals over an ideal (#16136)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "Inf_is_prime_of_is_chain", ["ideal"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ideal/minimal_prime.lean", "changes": [["add", "theorem", "Inf_minimal_primes", ["ideal"]], ["add", "theorem", "comap_minimal_primes_eq_of_surjective", ["ideal"]], ["add", "theorem", "exists_comap_eq_of_mem_minimal_primes", ["ideal"]], ["add", "theorem", "exists_comap_eq_of_mem_minimal_primes_of_injective", ["ideal"]], ["add", "theorem", "exists_minimal_primes_comap_eq", ["ideal"]], ["add", "theorem", "exists_minimal_primes_le", ["ideal"]], ["add", "theorem", "mimimal_primes_comap_of_surjective", ["ideal"]], ["add", "def", "minimal_primes", ["ideal"]], ["add", "theorem", "minimal_primes_eq_comap", ["ideal"]], ["add", "theorem", "minimal_primes_eq_subsingleton", ["ideal"]], ["add", "theorem", "minimal_primes_eq_subsingleton_self", ["ideal"]], ["add", "theorem", "radical_minimal_primes", ["ideal"]], ["add", "def", "minimal_primes", []]]}]}, {"timestamp": 1664918466, "sha": "e36ae183", "message": "feat(data/set/prod): `set.off_diag` (#16803)\nDefine the off-diagonal of a set, which is the set of pairs of points whose components are distinct.", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "disjoint_diagonal_off_diag", ["set"]], ["add", "theorem", "mem_off_diag", ["set"]], ["add", "def", "off_diag", ["set"]], ["add", "theorem", "off_diag_empty", ["set"]], ["add", "theorem", "off_diag_eq_empty", ["set"]], ["add", "theorem", "off_diag_eq_sep_prod", ["set"]], ["add", "theorem", "off_diag_insert", ["set"]], ["add", "theorem", "off_diag_inter", ["set"]], ["add", "theorem", "off_diag_mono", ["set"]], ["add", "theorem", "off_diag_nonempty", ["set"]], ["add", "theorem", "off_diag_singleton", ["set"]], ["add", "theorem", "off_diag_subset_prod", ["set"]], ["add", "theorem", "off_diag_union", ["set"]], ["add", "theorem", "off_diag_univ", ["set"]], ["add", "theorem", "prod_sdiff_diagonal", ["set"]]]}]}, {"timestamp": 1664918465, "sha": "3946a602", "message": "fix(docs/references.bib): fix Fröhlich's name in the references (#16802)\nCorrect the BibTeX entry for the book by Cassels and Frohlich, copy-pasting it from MathSciNet.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1664907867, "sha": "8f40883e", "message": "chore(topology/algebra/polynomial): golf `polynomial.coeff_le_of_roots_le` (#16789)\n... and generalize from [field F] to [comm_ring F].", "changes": [{"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1664907866, "sha": "5c88020d", "message": "feat(data/{finsupp,pi}/lex): generalize from linear_order to partial_order (#16740)\nIncluded in #16777. Should be closed if #16777 is merged first.", "changes": [{"oldPath": "src/data/finsupp/lex.lean", "newPath": "src/data/finsupp/lex.lean", "changes": []}, {"oldPath": "src/data/pi/lex.lean", "newPath": "src/data/pi/lex.lean", "changes": [["mod", "theorem", "le_of_forall_le", ["pi", "lex"]], ["mod", "theorem", "le_of_of_lex_le", ["pi", "lex"]], ["mod", "theorem", "to_lex_monotone", ["pi"]]]}]}, {"timestamp": 1664907865, "sha": "6858e178", "message": "feat(number_theory/padic_numbers): bundle padic_norm_e (#16650)\nWe turn `padic_norm_e` into a docs#absolute_value, removing the need for many specific methods.", "changes": [{"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": [["add", "theorem", "zero_def", ["padic"]], ["del", "theorem", "sub_rev", ["padic_norm_e"]], ["del", "theorem", "triangle_ineq", ["padic_norm_e"]], ["del", "theorem", "zero_def", ["padic_norm_e"]], ["del", "theorem", "zero_iff", ["padic_norm_e"]], ["mod", "def", "padic_norm_e", []]]}]}, {"timestamp": 1664888148, "sha": "b2e818bb", "message": "chore(data/complex/basic): golf 2 proofs (#16788)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}]}, {"timestamp": 1664888147, "sha": "9fe85cd0", "message": "feat(tactic/qify) : `qify` tactic (#16313)\nThis file mainly introduces `qify` which casts goals or hypotheses about natural numbers or integers to the ones about rational numbers.\nNote that this file is following from `zify`.\nThis is motivated by thinking about division in natural numbers or integers. Division in natural numbers or integers is not always working fine (e.g. (5 : ℕ) / 2 = 2), so it's easier to work in `ℚ`, where division and subtraction are well behaved.", "changes": [{"oldPath": null, "newPath": "src/tactic/qify.lean", "changes": [["add", "theorem", "coe_int_eq_coe_int_iff", ["qify", "rat"]], ["add", "theorem", "coe_int_le_coe_int_iff", ["qify", "rat"]], ["add", "theorem", "coe_int_lt_coe_int_iff", ["qify", "rat"]], ["add", "theorem", "coe_int_ne_coe_int_iff", ["qify", "rat"]], ["add", "theorem", "coe_nat_eq_coe_nat_iff", ["qify", "rat"]], ["add", "theorem", "coe_nat_le_coe_nat_iff", ["qify", "rat"]], ["add", "theorem", "coe_nat_lt_coe_nat_iff", ["qify", "rat"]], ["add", "theorem", "coe_nat_ne_coe_nat_iff", ["qify", "rat"]]]}, {"oldPath": null, "newPath": "test/qify.lean", "changes": []}]}, {"timestamp": 1664878947, "sha": "91df768e", "message": "feat(tactic/positivity): Extension for `int.nat_abs` (#16787)\nAdd `positivity_nat_abs`, a positivity extension for `int.nat_abs`.", "changes": [{"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1664878945, "sha": "16749fc4", "message": "feat(algebra/monoid_algebra/support): lemmas about support and multiplying with single (#16326)\nThe new lemmas use weaker assumptions and can be used to shorten some proofs.", "changes": [{"oldPath": "src/algebra/monoid_algebra/support.lean", "newPath": "src/algebra/monoid_algebra/support.lean", "changes": [["add", "theorem", "support_mul_single_eq_image", ["monoid_algebra"]], ["add", "theorem", "support_mul_single_subset", ["monoid_algebra"]], ["add", "theorem", "support_single_mul_eq_image", ["monoid_algebra"]], ["add", "theorem", "support_single_mul_subset", ["monoid_algebra"]]]}]}, {"timestamp": 1664878944, "sha": "93354783", "message": "refactor(algebra/symmetrized): Bundle `sym` and `unsym` as equivalences (#14334)\nCoercions to and from a type synonym should be bundled as (decorated) equivalences to be maximally useful. This PR bundles `sym_alg.sym` and `sym_alg.unsym` that way. As a result, `sym_alg.sym_equiv` is now redundant.", "changes": [{"oldPath": "src/algebra/symmetrized.lean", "newPath": "src/algebra/symmetrized.lean", "changes": [["mod", "def", "sym", ["sym_alg"]], ["mod", "theorem", "sym_bijective", ["sym_alg"]], ["del", "def", "sym_equiv", ["sym_alg"]], ["mod", "theorem", "sym_injective", ["sym_alg"]], ["mod", "theorem", "sym_surjective", ["sym_alg"]], ["add", "theorem", "sym_symm", ["sym_alg"]], ["mod", "def", "unsym", ["sym_alg"]], ["mod", "theorem", "unsym_bijective", ["sym_alg"]], ["mod", "theorem", "unsym_injective", ["sym_alg"]], ["mod", "theorem", "unsym_surjective", ["sym_alg"]], ["add", "theorem", "unsym_symm", ["sym_alg"]]]}]}, {"timestamp": 1664874895, "sha": "7aaa53f7", "message": "refactor(order/succ_pred/limit): redefine successor/predecessor limits (#15655)\nI realized too late that there is a much simpler definition for a successor/predecessor limit (defined in #15001) in terms of the covering relation. We redefine these predicates and port over the existing API. Note that this new definition is only equivalent to the old one in partial orders.\nThe API has remained exactly the same with two caveats:\n- A few theorems need their assumptions strengthened from preorders to partial orders. \n- Since `is_succ_limit` is now defined outside of the `order` namespace, all its theorems are moved outside of it too.", "changes": [{"oldPath": "src/order/succ_pred/limit.lean", "newPath": "src/order/succ_pred/limit.lean", "changes": [["mod", "theorem", "lt_pred", ["order", "is_pred_limit"]], ["mod", "theorem", "lt_pred_iff", ["order", "is_pred_limit"]], ["mod", "theorem", "pred_ne", ["order", "is_pred_limit"]], ["mod", "def", "is_pred_limit", ["order"]], ["mod", "theorem", "is_pred_limit_iff_lt_pred", ["order"]], ["del", "theorem", "is_pred_limit_iff_pred_ne", ["order"]], ["add", "theorem", "is_pred_limit_of_dense", ["order"]], ["del", "theorem", "is_pred_limit_of_lt_pred", ["order"]], ["add", "theorem", "is_pred_limit_of_pred_lt", ["order"]], ["mod", "theorem", "is_pred_limit_of_pred_ne", ["order"]], ["mod", "theorem", "is_pred_limit_rec_on_limit", ["order"]], ["mod", "theorem", "is_pred_limit_rec_on_pred'", ["order"]], ["mod", "theorem", "is_pred_limit_rec_on_pred", ["order"]], ["add", "theorem", "is_pred_limit_to_dual_iff", ["order"]], ["mod", "theorem", "is_pred_limit_top", ["order"]], ["mod", "theorem", "succ_ne", ["order", "is_succ_limit"]], ["mod", "def", "is_succ_limit", ["order"]], ["mod", "theorem", "is_succ_limit_bot", ["order"]], ["add", "theorem", "is_succ_limit_of_dense", ["order"]], ["mod", "theorem", "is_succ_limit_of_succ_ne", ["order"]], ["mod", "theorem", "is_succ_limit_rec_on_limit", ["order"]], ["mod", "theorem", "is_succ_limit_rec_on_succ'", ["order"]], ["mod", "theorem", "is_succ_limit_rec_on_succ", ["order"]], ["add", "theorem", "is_succ_limit_to_dual_iff", ["order"]], ["mod", "theorem", "mem_range_pred_of_not_is_pred_limit", ["order"]], ["del", "theorem", "not_is_pred_limit_iff'", ["order"]], ["add", "theorem", "not_is_pred_limit_iff_exists_covby", ["order"]], ["add", "theorem", "not_is_succ_limit_iff_exists_covby", ["order"]]]}]}, {"timestamp": 1664862739, "sha": "efb178db", "message": "chore(scripts): update nolints.txt (#16793)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1664862738, "sha": "3f6d1de3", "message": "feat(overview.yaml): add divergence theorem (#16781)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1664862737, "sha": "8230606c", "message": "feat(ring_theory/roots_of_unity): add geom_sum_eq_zero (#16755)\nWe add `geom_sum_eq_zero`: the geometric sum of a primitive root of unity is `0`.\nFrom flt-regular", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "geom_sum_eq_zero", ["is_primitive_root"]], ["add", "theorem", "ne_one", ["is_primitive_root"]], ["add", "theorem", "pow_sub_one_eq", ["is_primitive_root"]]]}]}, {"timestamp": 1664862736, "sha": "522ace49", "message": "feat(order/antisymmetrization): (<) is well-founded for a preorder iff well-founded on its antisymmetrization (#16741)\n+ Show that the antisymmetrization of a well-founded preorder is a well-founded partial order. Useful for reducing well-foundedness of preorders to partial orders.\n+ fix reference to renamed lemma `well_founded.prod_game_add` in docstring.", "changes": [{"oldPath": "src/order/antisymmetrization.lean", "newPath": "src/order/antisymmetrization.lean", "changes": [["add", "theorem", "acc_antisymmetrization_iff", []], ["add", "theorem", "antisymmetrization_fibration", []], ["add", "theorem", "well_founded_antisymmetrization_iff", []]]}, {"oldPath": "src/order/game_add.lean", "newPath": "src/order/game_add.lean", "changes": []}]}, {"timestamp": 1664862735, "sha": "561202d0", "message": "refactor(data/list/count): review API, add lemmas (#16736)\n* add `list.countp_join`, `list.countp_map`, `list.countp_mono_left`,\n `list.countp_congr`, and `list.count_join`;\n* add `@[simp]` attrs to `list.countp_eq_zero`,\n `list.countp_eq_length`, `list.count_eq_zero`, and\n `list.count_eq_length`;\n* golf the proofs of `list.count_bind`, `list.count_map_of_injective`,\n and `list.count_le_count_map`.", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["mod", "theorem", "count_eq_length", ["list"]], ["mod", "theorem", "count_eq_zero", ["list"]], ["add", "theorem", "count_join", ["list"]], ["add", "theorem", "countp_congr", ["list"]], ["mod", "theorem", "countp_eq_length", ["list"]], ["mod", "theorem", "countp_eq_zero", ["list"]], ["mod", "theorem", "countp_false", ["list"]], ["mod", "theorem", "countp_filter", ["list"]], ["add", "theorem", "countp_join", ["list"]], ["add", "theorem", "countp_map", ["list"]], ["add", "theorem", "countp_mono_left", ["list"]], ["mod", "theorem", "countp_true", ["list"]]]}]}, {"timestamp": 1664862734, "sha": "b5ce4aa2", "message": "feat(analysis/inner_product_space/pi_L2): extend an indexed orthonormal set to an orthonormal basis (#16478)\nGiven a finite-dimensional inner product space `E`, a fintype `ι` whose cardinality is the dimension of `E`, and a function `v : ι → E` whose restriction to some set `s` in `ι` is orthonormal, modify `v` to give an orthonormal basis for `E` indexed by `ι` which agrees on `s` with `v`. We already have this lemma for sets (`orthonormal.exists_orthonormal_basis_extension`); this is just some messing round to get the indexed version.\nAlso rename `orthonormal.coe_range` to `orthonormal.to_subtype_range`, matching the naming convention for `linear_independent.to_subtype_range`.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["del", "theorem", "coe_range", ["orthonormal"]], ["add", "theorem", "to_subtype_range", ["orthonormal"]], ["add", "theorem", "orthonormal_subtype_range", []]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "exists_orthonormal_basis_extension_of_card_eq", ["orthonormal"]]]}]}, {"timestamp": 1664853312, "sha": "41a72546", "message": "feat(algebra/free_monoid): action of the `free_monoid` (#16746)", "changes": [{"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["add", "theorem", "map_id", ["free_monoid"]], ["add", "def", "mk_mul_action", ["free_monoid"]], ["add", "theorem", "of_smul", ["free_monoid"]]]}]}, {"timestamp": 1664845098, "sha": "f3dd4ac6", "message": "feat(group_theory/sylow): Injectivity of `sylow.subtype` (#16717)\n`sylow.subtype` is injective if both Sylow subgroups are contained in the subgroup that you are restricting to.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "subtype_injective", ["sylow"]]]}]}, {"timestamp": 1664845097, "sha": "a1b96f80", "message": "feat(group_theory/index): Index of finite intersection (#16393)\nThis PR proves that the index of a finite intersection is at most the product of the indices.", "changes": [{"oldPath": "src/data/finite/card.lean", "newPath": "src/data/finite/card.lean", "changes": [["add", "theorem", "card_eq_zero_of_embedding", ["finite"]], ["add", "theorem", "card_eq_zero_of_injective", ["finite"]], ["add", "theorem", "card_eq_zero_of_surjective", ["finite"]], ["add", "theorem", "card_le_of_embedding'", ["finite"]], ["add", "theorem", "card_le_of_injective'", ["finite"]], ["add", "theorem", "card_le_of_surjective'", ["finite"]]]}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_infi_le", ["subgroup"]], ["add", "theorem", "index_infi_ne_zero", ["subgroup"]], ["add", "theorem", "relindex_infi_le", ["subgroup"]], ["add", "theorem", "relindex_infi_ne_zero", ["subgroup"]]]}, {"oldPath": "src/set_theory/cardinal/finite.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": [["add", "theorem", "finite_of_card_ne_zero", ["nat"]]]}]}, {"timestamp": 1664833764, "sha": "ec0b1144", "message": "feat(measure_theory/group/prod.lean): use measure_preserving predicate (#16668)\n* Also use `quasi_measure_preserving` more in various files. In particular, `ae_[strongly_]measurable.comp_measurable'` is now `.comp_quasi_measure_preserving`.\n* Remove lemmas that are direct consequences of `[quasi_]measure_preserving` properties.\n* This simplifies various proofs.", "changes": [{"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["add", "theorem", "measure_preserving_swap", ["measure_theory", "measure"]], ["del", "theorem", "prod_fst_absolutely_continuous", ["measure_theory", "measure"]], ["del", "theorem", "prod_snd_absolutely_continuous", ["measure_theory", "measure"]], ["add", "theorem", "quasi_measure_preserving_fst", ["measure_theory", "measure"]], ["add", "theorem", "quasi_measure_preserving_snd", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["del", "theorem", "comp_measurable'", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "comp_quasi_measure_preserving", ["measure_theory", "ae_strongly_measurable"]]]}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": [["add", "theorem", "measure_preserving_div_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": [["del", "theorem", "map_div_left_absolutely_continuous", ["measure_theory"]], ["del", "theorem", "map_inv_absolutely_continuous", ["measure_theory"]], ["del", "theorem", "map_mul_right_absolutely_continuous", ["measure_theory"]], ["del", "theorem", "map_prod_inv_mul_eq", ["measure_theory"]], ["del", "theorem", "map_prod_inv_mul_eq_swap", ["measure_theory"]], ["del", "theorem", "map_prod_mul_eq", ["measure_theory"]], ["del", "theorem", "map_prod_mul_eq_swap", ["measure_theory"]], ["del", "theorem", "map_prod_mul_inv_eq", ["measure_theory"]], ["add", "theorem", "measure_preserving_mul_prod_inv", ["measure_theory"]], ["add", "theorem", "measure_preserving_prod_inv_mul", ["measure_theory"]], ["add", "theorem", "measure_preserving_prod_inv_mul_swap", ["measure_theory"]], ["add", "theorem", "measure_preserving_prod_mul", ["measure_theory"]], ["add", "theorem", "measure_preserving_prod_mul_swap", ["measure_theory"]], ["mod", "theorem", "quasi_measure_preserving_mul_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": [["del", "theorem", "comp_measurable'", ["ae_measurable"]], ["add", "theorem", "comp_quasi_measure_preserving", ["ae_measurable"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_eq_comp", ["measure_theory", "measure", "quasi_measure_preserving"]]]}]}, {"timestamp": 1664833763, "sha": "075b3f7d", "message": "feat(linear_algebra/matrix): Add matrix properties for sesquilinear forms (#15906)\nThe main goal of this PR is to move `linear_algebra/matrix/bilinear_form` to the curried bilinear map form. Since this file as quite few dependencies we copy it to a new file `linear_algebra/matrix/sesquilinear_form` and then move all the dependencies.\nThe structure is taken literally from `linear_algebra/matrix/bilinear_form` with generalizations and easier proofs where possible. The new lemmas are named exactly as the old ones with the following changes:\n- the namespace changed from `bilin_form` to `linear_map`\n- `bilin` is changed to `linear_map₂`. In case there is the necessity for separate bilinear and semi-bilinear lemmas we use `linear_map₂` and `linear_mapₛₗ₂`\n- If `bilin` is not in the name of a lemma, `matrix` is changed to `matrix₂` to avoid nameclashes with lemmas for linear maps `M →ₛₗ[ρ₁₂] N`\nMoreover, the following changes were necessary:\n`linear_algebra/bilinear_map`:\n- Weakened some typeclass assumptions\n- Added bilinear version of `sum_repr_mul_repr_mul` and moved sesquilinear version to `sum_repr_mul_repr_mulₛₗ`\n`linear_algebra/matrix/bilinear_form`:\n- Moved `basis.equiv_fun_symm_std_basis` to `linear_algebra/std_basis`\n- `adjoint_pair` section: Removed a few definitions (they are now in `linear_algebra/matrix/sesquilinear_form`) and added a prime to the names of lemmas that have the same name as the version in `linear_algebra/matrix/sesquilinear_form`\n`linear_algebra/sesquilinear_form`:\n- Added a few missing lemmas about left-separating bilinear forms (note that `separating_left` was previously known as `nondegenerate`)\n`linear_algebra/std_basis`:\n- Lemma `std_basis_apply'` for calculating the application of `i' : ι` to `(std_basis R (λ (_x : ι), R) i)`\n`algebra/hom/ring/`:\n- Lemmas for calculating a ring homomorphism applied to `ite 0 1` and `ite 1 0`\nThe last two additions are needed to get a reasonable proof for `matrix.to_linear_map₂'_aux_std_basis`.", "changes": [{"oldPath": "src/algebra/hom/ring.lean", "newPath": "src/algebra/hom/ring.lean", "changes": [["add", "theorem", "map_ite_one_zero", ["ring_hom"]], ["add", "theorem", "map_ite_zero_one", ["ring_hom"]]]}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": [["add", "theorem", "compl₁₂_id_id", ["linear_map"]], ["add", "theorem", "compl₂_id", ["linear_map"]], ["mod", "theorem", "sum_repr_mul_repr_mul", ["linear_map"]], ["add", "theorem", "sum_repr_mul_repr_mulₛₗ", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["add", "theorem", "equiv_fun_symm_std_basis", ["basis"]], ["add", "theorem", "sum_single_ite", ["finset"]]]}, {"oldPath": "src/linear_algebra/matrix/bilinear_form.lean", "newPath": "src/linear_algebra/matrix/bilinear_form.lean", "changes": [["del", "theorem", "equiv_fun_symm_std_basis", ["basis"]], ["del", "def", "is_adjoint_pair", ["matrix"]], ["add", "theorem", "is_adjoint_pair_equiv'", ["matrix"]], ["del", "theorem", "is_adjoint_pair_equiv", ["matrix"]], ["del", "def", "is_self_adjoint", ["matrix"]], ["del", "def", "is_skew_adjoint", ["matrix"]], ["add", "theorem", "mem_pair_self_adjoint_matrices_submodule'", []], ["del", "theorem", "mem_pair_self_adjoint_matrices_submodule", []], ["add", "theorem", "mem_self_adjoint_matrices_submodule'", []], ["del", "theorem", "mem_self_adjoint_matrices_submodule", []], ["add", "theorem", "mem_skew_adjoint_matrices_submodule'", []], ["del", "theorem", "mem_skew_adjoint_matrices_submodule", []], ["add", "def", "pair_self_adjoint_matrices_submodule'", []], ["del", "def", "pair_self_adjoint_matrices_submodule", []], ["add", "def", "self_adjoint_matrices_submodule'", []], ["del", "def", "self_adjoint_matrices_submodule", []], ["add", "def", "skew_adjoint_matrices_submodule'", []], ["del", "def", "skew_adjoint_matrices_submodule", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/sesquilinear_form.lean", "changes": [["add", "theorem", "is_adjoint_pair_to_linear_map₂'", []], ["add", "theorem", "is_adjoint_pair_to_linear_map₂", []], ["add", "theorem", "mul_to_matrix'", ["linear_map"]], ["add", "theorem", "mul_to_matrix₂'_mul", ["linear_map"]], ["add", "theorem", "mul_to_matrix₂", ["linear_map"]], ["add", "theorem", "mul_to_matrix₂_mul", ["linear_map"]], ["add", "theorem", "nondegenerate_to_matrix_iff", ["linear_map"]], ["add", "theorem", "nondegenerate_to_matrix₂'_iff", ["linear_map"]], ["add", "theorem", "to_matrix₂'", ["linear_map", "separating_left"]], ["add", "theorem", "to_matrix₂", ["linear_map", "separating_left"]], ["add", "theorem", "separating_left_iff_det_ne_zero", ["linear_map"]], ["add", "theorem", "separating_left_of_det_ne_zero", ["linear_map"]], ["add", "theorem", "separating_left_to_linear_map₂'_iff_det_ne_zero", ["linear_map"]], ["add", "theorem", "separating_left_to_linear_map₂'_of_det_ne_zero'", ["linear_map"]], ["add", "theorem", "to_linear_map₂'_aux_to_matrix₂_aux", ["linear_map"]], ["add", "theorem", "to_matrix'_to_linear_map₂'", ["linear_map"]], ["add", "theorem", "to_matrix'_to_linear_mapₛₗ₂'", ["linear_map"]], ["add", "def", "to_matrix₂'", ["linear_map"]], ["add", "theorem", "to_matrix₂'_apply", ["linear_map"]], ["add", "theorem", "to_matrix₂'_comp", ["linear_map"]], ["add", "theorem", "to_matrix₂'_compl₁₂", ["linear_map"]], ["add", "theorem", "to_matrix₂'_compl₂", ["linear_map"]], ["add", "theorem", "to_matrix₂'_mul", ["linear_map"]], ["add", "theorem", "to_matrix₂_apply", ["linear_map"]], ["add", "def", "to_matrix₂_aux", ["linear_map"]], ["add", "theorem", "to_matrix₂_aux_apply", ["linear_map"]], ["add", "theorem", "to_matrix₂_aux_eq", ["linear_map"]], ["add", "theorem", "to_matrix₂_basis_fun", ["linear_map"]], ["add", "theorem", "to_matrix₂_comp", ["linear_map"]], ["add", "theorem", "to_matrix₂_compl₁₂", ["linear_map"]], ["add", "theorem", "to_matrix₂_compl₂", ["linear_map"]], ["add", "theorem", "to_matrix₂_mul", ["linear_map"]], ["add", "theorem", "to_matrix₂_mul_basis_to_matrix", ["linear_map"]], ["add", "theorem", "to_matrix₂_symm", ["linear_map"]], ["add", "theorem", "to_matrix₂_to_linear_map₂", ["linear_map"]], ["add", "def", "to_matrixₛₗ₂'", ["linear_map"]], ["add", "theorem", "to_matrixₛₗ₂'_apply", ["linear_map"]], ["add", "theorem", "to_matrixₛₗ₂'_symm", ["linear_map"]], ["add", "def", "is_adjoint_pair", ["matrix"]], ["add", "theorem", "is_adjoint_pair_equiv", ["matrix"]], ["add", "def", "is_self_adjoint", ["matrix"]], ["add", "def", "is_skew_adjoint", ["matrix"]], ["add", "theorem", "to_linear_map₂'", ["matrix", "nondegenerate"]], ["add", "theorem", "to_linear_map₂", ["matrix", "nondegenerate"]], ["add", "theorem", "separating_left_to_linear_map₂'_iff", ["matrix"]], ["add", "theorem", "separating_left_to_linear_map₂'_iff_separating_left_to_linear_map₂", ["matrix"]], ["add", "theorem", "separating_left_to_linear_map₂_iff", ["matrix"]], ["add", "def", "to_linear_map₂'", ["matrix"]], ["add", "theorem", "to_linear_map₂'_apply'", ["matrix"]], ["add", "theorem", "to_linear_map₂'_apply", ["matrix"]], ["add", "def", "to_linear_map₂'_aux", ["matrix"]], ["add", "theorem", "to_linear_map₂'_aux_std_basis", ["matrix"]], ["add", "theorem", "to_linear_map₂'_comp", ["matrix"]], ["add", "theorem", "to_linear_map₂'_std_basis", ["matrix"]], ["add", "theorem", "to_linear_map₂'_to_matrix'", ["matrix"]], ["add", "theorem", "to_linear_map₂_apply", ["matrix"]], ["add", "theorem", "to_linear_map₂_basis_fun", ["matrix"]], ["add", "theorem", "to_linear_map₂_compl₁₂", ["matrix"]], ["add", "theorem", "to_linear_map₂_symm", ["matrix"]], ["add", "theorem", "to_linear_map₂_to_matrix₂", ["matrix"]], ["add", "def", "to_linear_mapₛₗ₂'", ["matrix"]], ["add", "theorem", "to_linear_mapₛₗ₂'_apply", ["matrix"]], ["add", "theorem", "to_linear_mapₛₗ₂'_aux_eq", ["matrix"]], ["add", "theorem", "to_linear_mapₛₗ₂'_std_basis", ["matrix"]], ["add", "theorem", "to_linear_mapₛₗ₂'_symm", ["matrix"]], ["add", "theorem", "to_linear_mapₛₗ₂'_to_matrix'", ["matrix"]], ["add", "theorem", "to_matrix₂_aux_to_linear_map₂'_aux", ["matrix"]], ["add", "theorem", "mem_pair_self_adjoint_matrices_submodule", []], ["add", "theorem", "mem_self_adjoint_matrices_submodule", []], ["add", "theorem", "mem_skew_adjoint_matrices_submodule", []], ["add", "def", "pair_self_adjoint_matrices_submodule", []], ["add", "def", "self_adjoint_matrices_submodule", []], ["add", "def", "skew_adjoint_matrices_submodule", []]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "theorem", "not_separating_left_zero", ["linear_map"]], ["add", "theorem", "congr", ["linear_map", "separating_left"]], ["add", "theorem", "ne_zero", ["linear_map", "separating_left"]], ["add", "theorem", "separating_left_congr_iff", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["add", "theorem", "std_basis_apply'", ["linear_map"]]]}]}, {"timestamp": 1664818856, "sha": "b40ce7d0", "message": "feat(measure_theory/integral/average): average of constant functions (#16776)\nAlso make the API more coherent, by renaming `average_def'` to `average_eq` to match `set_average_eq`. And rename `lintegral_to_real_le_lintegral_nnnorm` to `lintegral_of_real_le_lintegral_nnnorm`.", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "nnnorm_sub_le", []]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "integrable_inv_smul_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/average.lean", "newPath": "src/measure_theory/integral/average.lean", "changes": [["add", "theorem", "average_const", ["measure_theory"]], ["del", "theorem", "average_def'", ["measure_theory"]], ["del", "theorem", "average_def", ["measure_theory"]], ["add", "theorem", "average_eq'", ["measure_theory"]], ["add", "theorem", "average_eq", ["measure_theory"]], ["add", "theorem", "set_average_const", ["measure_theory"]], ["add", "theorem", "set_average_eq'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_of_real_le_lintegral_nnnorm", ["measure_theory"]], ["del", "theorem", "lintegral_to_real_le_lintegral_nnnorm", ["measure_theory"]]]}]}, {"timestamp": 1664818855, "sha": "ce4a8b89", "message": "feat(topology/algebra/group): quotient of a second countable group (#16738)\nQuotient of a second countable group is second countable", "changes": [{"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": [["add", "theorem", "second_countable_topology", ["has_continuous_const_smul"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "quotient", ["topological_space", "is_topological_basis"]], ["add", "theorem", "quotient_map", ["topological_space", "is_topological_basis"]], ["add", "theorem", "second_countable_topology", ["topological_space", "quotient"]], ["add", "theorem", "second_countable_topology", ["topological_space", "quotient_map"]]]}]}, {"timestamp": 1664818854, "sha": "7802ba77", "message": "refactor(data/set/basic): review API of `set.nontrivial` (#16737)\n* make `z` an explicit argument in `set.nontrivial.exists_ne`;\n* rename `set.nontrivial.iff_exists_lt` to `set.nontrivial_iff_exists_lt`;\n* protect lemmas `set.nontrivial.nonempty` and `set.nontrivial.ne_empty`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "exists_ne", ["set", "nontrivial"]], ["del", "theorem", "iff_exists_lt", ["set", "nontrivial"]], ["del", "theorem", "ne_empty", ["set", "nontrivial"]], ["del", "theorem", "nonempty", ["set", "nontrivial"]], ["add", "theorem", "nontrivial_iff_exists_lt", ["set"]]]}]}, {"timestamp": 1664818853, "sha": "6d5dda18", "message": "feat(geometry/euclidean/basic): angles and betweenness (#16734)\nAdd some basic lemmas about the relation between (unoriented) angles and betweenness of points.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "angle_eq_pi_iff_sbtw", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_zero_iff_eq_and_ne_or_sbtw", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_zero_iff_ne_and_wbtw", ["euclidean_geometry"]], ["add", "theorem", "angle₁₂₃_eq_pi", ["sbtw"]], ["add", "theorem", "angle₁₃₂_eq_zero", ["sbtw"]], ["add", "theorem", "angle₂₁₃_eq_zero", ["sbtw"]], ["add", "theorem", "angle₂₃₁_eq_zero", ["sbtw"]], ["add", "theorem", "angle₃₁₂_eq_zero", ["sbtw"]], ["add", "theorem", "angle₃₂₁_eq_pi", ["sbtw"]], ["add", "theorem", "angle₁₃₂_eq_zero_of_ne", ["wbtw"]], ["add", "theorem", "angle₂₁₃_eq_zero_of_ne", ["wbtw"]], ["add", "theorem", "angle₂₃₁_eq_zero_of_ne", ["wbtw"]], ["add", "theorem", "angle₃₁₂_eq_zero_of_ne", ["wbtw"]]]}]}, {"timestamp": 1664818852, "sha": "b0b0d5e3", "message": "feat(tactic/positivity): Extensions for `nat` constructions (#16728)\nIntroduce the following `positivity` extensions:\n* `positivity_succ`\n* `positivity_factorial`\n* `positivity_asc_factorial`", "changes": [{"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1664818851, "sha": "5ca6e9d2", "message": "feat(logic/relation): characterization of the accessible predicate in terms of `well_founded_on` (#16720)\n+ Show that `acc r a` (read: `a` is accessible under the relation `r`) if and only if `r` is well-founded on the subset of elements below `a` (transitively) under `r`, including (`refl_trans_gen`) or excluding (`trans_gen`) `a`. Stated as a `list.tfae`.\n+ Move `relation.fibration` (used by the proof) to *logic/relation* to avoid importing *logic/hydra*. Add lemma `acc_trans_gen_iff` used in the proof.", "changes": [{"oldPath": "src/logic/hydra.lean", "newPath": "src/logic/hydra.lean", "changes": [["del", "theorem", "of_downward_closed", ["acc"]], ["del", "theorem", "of_fibration", ["acc"]], ["del", "def", "fibration", ["relation"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "of_downward_closed", ["acc"]], ["add", "theorem", "of_fibration", ["acc"]], ["mod", "theorem", "trans_gen", ["acc"]], ["add", "theorem", "acc_trans_gen_iff", []], ["add", "def", "fibration", ["relation"]], ["mod", "theorem", "trans_gen", ["well_founded"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "acc_iff_well_founded_on", ["set", "well_founded_on"]]]}]}, {"timestamp": 1664818849, "sha": "486cb2f3", "message": "feat(ring_theory/graded_algebra/homogeneous_localization): generalise homogeneous localization to any submonoid (#16653)\nhomogeneous localization is generalised to work on any `submonoid` and introduced `homogneous_localization.prime` and `homogeneous_localization.away`", "changes": [{"oldPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "newPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": [["add", "def", "at_prime", ["homogeneous_localization"]], ["add", "def", "away", ["homogeneous_localization"]], ["mod", "theorem", "denom_mem", ["homogeneous_localization"]], ["add", "theorem", "denom_mem_deg", ["homogeneous_localization"]], ["del", "theorem", "denom_not_mem", ["homogeneous_localization"]], ["mod", "theorem", "is_unit_iff_is_unit_val", ["homogeneous_localization"]], ["del", "theorem", "num_mem", ["homogeneous_localization"]], ["add", "theorem", "num_mem_deg", ["homogeneous_localization"]]]}]}, {"timestamp": 1664818848, "sha": "5cf34f8f", "message": "feat(topology/algebra/continuous_monoid_hom): Continuity of composition (#16319)\nThis PR adds some API regarding continuity of compositions of `continuous_monoid_hom`s.", "changes": [{"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": [["add", "theorem", "closed_embedding_to_continuous_map", ["continuous_monoid_hom"]], ["add", "def", "comp_left", ["continuous_monoid_hom"]], ["add", "def", "comp_right", ["continuous_monoid_hom"]], ["add", "theorem", "continuous_comp", ["continuous_monoid_hom"]], ["add", "theorem", "continuous_comp_left", ["continuous_monoid_hom"]], ["add", "theorem", "continuous_comp_right", ["continuous_monoid_hom"]], ["add", "theorem", "continuous_of_continuous_uncurry", ["continuous_monoid_hom"]], ["add", "theorem", "embedding_to_continuous_map", ["continuous_monoid_hom"]], ["mod", "theorem", "ext", ["continuous_monoid_hom"]], ["add", "theorem", "inducing_to_continuous_map", ["continuous_monoid_hom"]], ["del", "theorem", "is_closed_embedding", ["continuous_monoid_hom"]], ["del", "theorem", "is_embedding", ["continuous_monoid_hom"]], ["del", "theorem", "is_inducing", ["continuous_monoid_hom"]], ["add", "theorem", "map_apply", ["pontryagin_dual"]], ["add", "theorem", "map_comp", ["pontryagin_dual"]], ["add", "theorem", "map_mul", ["pontryagin_dual"]], ["add", "theorem", "map_one", ["pontryagin_dual"]]]}]}, {"timestamp": 1664818847, "sha": "77615d00", "message": "chore(data/seq/*): `cases_on` → `rec_on` (#15843)\nWe rename recursion principles on `Sort` from `cases_on` to `rec_on`.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": [["del", "def", "cases_on", ["computation"]], ["add", "def", "rec_on", ["computation"]]]}, {"oldPath": "src/data/seq/parallel.lean", "newPath": "src/data/seq/parallel.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["del", "def", "cases_on", ["seq"]], ["add", "def", "rec_on", ["seq"]]]}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": [["del", "def", "cases_on", ["wseq"]], ["add", "def", "rec_on", ["wseq"]]]}]}, {"timestamp": 1664818846, "sha": "9aec1a28", "message": "feat(ring_theory/dedekind_domain/selmer_group): add Selmer groups of Dedekind domains (#15405)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/dedekind_domain/selmer_group.lean", "changes": [["add", "def", "valuation_of_ne_zero", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_of_ne_zero_eq", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "def", "valuation_of_ne_zero_mod", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "def", "valuation_of_ne_zero_to_fun", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_of_ne_zero_to_fun_eq", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_of_unit_eq", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_of_unit_mod_eq", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "def", "from_unit", ["is_dedekind_domain", "selmer_group"]], ["add", "theorem", "from_unit_ker", ["is_dedekind_domain", "selmer_group"]], ["add", "def", "from_unit_lift", ["is_dedekind_domain", "selmer_group"]], ["add", "theorem", "from_unit_lift_injective", ["is_dedekind_domain", "selmer_group"]], ["add", "theorem", "monotone", ["is_dedekind_domain", "selmer_group"]], ["add", "def", "valuation", ["is_dedekind_domain", "selmer_group"]], ["add", "theorem", "valuation_ker_eq", ["is_dedekind_domain", "selmer_group"]], ["add", "def", "selmer_group", ["is_dedekind_domain"]]]}]}, {"timestamp": 1664818845, "sha": "a3470769", "message": "feat(set_theory/game/birthday): birthday of addition equals natural addition of birthdays (#14549)", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "max_max_max_comm", []], ["add", "theorem", "min_min_min_comm", []]]}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": [["add", "theorem", "birthday_add", ["pgame"]], ["add", "theorem", "birthday_add_nat", ["pgame"]], ["add", "theorem", "birthday_add_one", ["pgame"]], ["mod", "theorem", "birthday_add_zero", ["pgame"]], ["mod", "theorem", "birthday_eq_zero", ["pgame"]], ["add", "theorem", "birthday_nat_add", ["pgame"]], ["add", "theorem", "birthday_nat_cast", ["pgame"]], ["add", "theorem", "birthday_one_add", ["pgame"]], ["mod", "theorem", "birthday_zero_add", ["pgame"]], ["mod", "theorem", "neg_birthday_le", ["pgame"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "lsub_sum", ["ordinal"]], ["add", "theorem", "one_add_nat_cast", ["ordinal"]], ["add", "theorem", "sup_sum", ["ordinal"]]]}]}, {"timestamp": 1664818843, "sha": "ee02a30e", "message": "feat(set_theory/surreal/basic): relabellings preserve being numeric (#14406)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "numeric_congr", ["pgame", "relabelling"]], ["add", "theorem", "numeric_imp", ["pgame", "relabelling"]]]}]}, {"timestamp": 1664807318, "sha": "eb973896", "message": "feat(linear_algebra/affine_space/affine_subspace): spans of two points (#16770)\nAdd lemmas about the `vector_span` and `affine_span` of two points (analogous to `span_singleton` lemmas for `submodule`).", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "line_map_mem_affine_span_pair", ["affine_map"]], ["add", "theorem", "line_map_rev_mem_affine_span_pair", ["affine_map"]], ["add", "theorem", "left_mem_affine_span_pair", []], ["add", "theorem", "mem_vector_span_pair", []], ["add", "theorem", "mem_vector_span_pair_rev", []], ["add", "theorem", "right_mem_affine_span_pair", []], ["add", "theorem", "smul_vsub_mem_vector_span_pair", []], ["add", "theorem", "smul_vsub_rev_mem_vector_span_pair", []], ["add", "theorem", "smul_vsub_rev_vadd_mem_affine_span_pair", []], ["add", "theorem", "smul_vsub_vadd_mem_affine_span_pair", []], ["add", "theorem", "vadd_left_mem_affine_span_pair", []], ["add", "theorem", "vadd_right_mem_affine_span_pair", []], ["add", "theorem", "vector_span_pair", []], ["add", "theorem", "vector_span_pair_rev", []], ["add", "theorem", "vsub_mem_vector_span_pair", []], ["add", "theorem", "vsub_rev_mem_vector_span_pair", []]]}]}, {"timestamp": 1664807317, "sha": "f1f9d66a", "message": "feat(analysis/convex/between): `wbtw` and distinct end points (#16768)\nAdd lemmas that `wbtw`, together with the middle point being distinct from one of the end points, implies the two end points are distinct, and use one of those lemmas in the proof of `sbtw.left_ne_right`.", "changes": [{"oldPath": "src/analysis/convex/between.lean", "newPath": "src/analysis/convex/between.lean", "changes": [["add", "theorem", "left_ne_right_of_ne_left", ["wbtw"]], ["add", "theorem", "left_ne_right_of_ne_right", ["wbtw"]]]}]}, {"timestamp": 1664807315, "sha": "580e52cb", "message": "feat(analysis/convex/between): betweenness and `same_ray` (#16767)\nAdd some lemmas about the relation between `wbtw` and `same_ray`.", "changes": [{"oldPath": "src/analysis/convex/between.lean", "newPath": "src/analysis/convex/between.lean", "changes": [["add", "theorem", "same_ray_vsub", ["wbtw"]], ["add", "theorem", "same_ray_vsub_left", ["wbtw"]], ["add", "theorem", "same_ray_vsub_right", ["wbtw"]], ["add", "theorem", "wbtw_iff_same_ray_vsub", []]]}]}, {"timestamp": 1664807314, "sha": "64b6d04f", "message": "feat(linear_algebra/affine_space/affine_subspace): `vector_span_insert_eq_vector_span` (#16765)\nAdd a variant of `affine_span_insert_eq_affine_span` for the `vector_span`.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "vector_span_insert_eq_vector_span", []]]}]}, {"timestamp": 1664807313, "sha": "81120aec", "message": "refactor(number_theory): reorganize number field results into new subfolder (#16764)\n- Create a new dir `number_field` in `number_theory`\n- Move the current file `number_field.lean` to `number_theory/number_field/basic.lean`\n- Move the results about embeddings from this file to a new file `number_theory/number_field/embeddings.lean`\n- Move the file `number_theory/class_number/number_field.lean` to `number_theory/number_field/class_number.lean`", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/number_theory/number_field/basic.lean", "changes": [["add", "theorem", "not_is_field", ["int"]], ["add", "theorem", "is_integral_of_mem_ring_of_integers", ["number_field"]], ["add", "theorem", "mem_ring_of_integers", ["number_field"]], ["add", "theorem", "is_integral_coe", ["number_field", "ring_of_integers"]], ["add", "theorem", "not_is_field", ["number_field", "ring_of_integers"]], ["add", "def", "ring_of_integers", ["number_field"]], ["add", "def", "ring_of_integers_algebra", ["number_field"]]]}, {"oldPath": "src/number_theory/class_number/number_field.lean", "newPath": "src/number_theory/number_field/class_number.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field/embeddings.lean", "changes": [["del", "theorem", "not_is_field", ["int"]], ["del", "theorem", "is_integral_of_mem_ring_of_integers", ["number_field"]], ["del", "theorem", "mem_ring_of_integers", ["number_field"]], ["del", "theorem", "is_integral_coe", ["number_field", "ring_of_integers"]], ["del", "theorem", "not_is_field", ["number_field", "ring_of_integers"]], ["del", "def", "ring_of_integers", ["number_field"]], ["del", "def", "ring_of_integers_algebra", ["number_field"]]]}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}]}, {"timestamp": 1664807312, "sha": "8a1b982f", "message": "feat(data/{fin,}set/pointwise): add `{fin,}set.inv_insert` (#16748)", "changes": [{"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "inv_insert", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "inv_insert", ["set"]]]}]}, {"timestamp": 1664807311, "sha": "c7aa2dfa", "message": "refactor(data/fin/basic): merge `fin.rev` and `order_iso.fin_equiv` (#16745)\nAlso add some missing lemmas.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "coe_rev", ["fin"]], ["mod", "theorem", "is_lt", ["fin"]], ["add", "theorem", "last_sub", ["fin"]], ["mod", "theorem", "pos_iff_nonempty", ["fin"]], ["mod", "def", "rev", ["fin"]], ["add", "theorem", "rev_bijective", ["fin"]], ["add", "theorem", "rev_inj", ["fin"]], ["add", "theorem", "rev_injective", ["fin"]], ["add", "theorem", "rev_involutive", ["fin"]], ["add", "theorem", "rev_le_rev", ["fin"]], ["add", "theorem", "rev_lt_rev", ["fin"]], ["add", "def", "rev_order_iso", ["fin"]], ["add", "theorem", "rev_order_iso_symm_apply", ["fin"]], ["add", "theorem", "rev_rev", ["fin"]], ["add", "theorem", "rev_surjective", ["fin"]], ["add", "theorem", "rev_symm", ["fin"]], ["mod", "theorem", "sub_one_lt_iff", ["fin"]], ["del", "def", "fin_equiv", ["order_iso"]], ["del", "theorem", "fin_equiv_apply", ["order_iso"]], ["del", "theorem", "fin_equiv_symm_apply", ["order_iso"]]]}]}, {"timestamp": 1664787549, "sha": "9dbe038e", "message": "fix({ tactic/fin_cases + test/interval_cases }): add `focus1` and a test (#16752)\nFix [this bug](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/interval_cases.20bug), reported by @hrmacbeth.\nThe current solution is to move the `focus1` to `fin_cases_at`, instead of relying on `fin_cases` and `interval_cases` to call `focus1`. Having `interval_cases` wrapped in `focus1` is the reason for this PR.\nAn older (compiling) solution was to just use `focus1` inside `interval_cases`, but calling it in `fin_cases_at` seems more stable.\nThe link above is to a Zulip discussion with more details.", "changes": [{"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "test/interval_cases.lean", "newPath": "test/interval_cases.lean", "changes": []}]}, {"timestamp": 1664787548, "sha": "2e433a50", "message": "feat(category_theory/groupoid/free): free groupoid on a quiver (#16666)\nDefine the free groupoid on a quiver and prove its universal property.", "changes": [{"oldPath": "src/category_theory/functor/basic.lean", "newPath": "src/category_theory/functor/basic.lean", "changes": [["add", "theorem", "to_prefunctor_comp", ["category_theory", "functor"]], ["add", "theorem", "to_prefunctor_map", ["category_theory", "functor"]], ["add", "theorem", "to_prefunctor_obj", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/groupoid/free_groupoid.lean", "changes": [["add", "theorem", "congr_comp_reverse", ["category_theory", "groupoid", "free"]], ["add", "theorem", "congr_reverse", ["category_theory", "groupoid", "free"]], ["add", "theorem", "congr_reverse_comp", ["category_theory", "groupoid", "free"]], ["add", "def", "free_groupoid", ["category_theory", "groupoid", "free"]], ["add", "def", "lift", ["category_theory", "groupoid", "free"]], ["add", "theorem", "lift_spec", ["category_theory", "groupoid", "free"]], ["add", "theorem", "lift_unique_spec", ["category_theory", "groupoid", "free"]], ["add", "def", "of", ["category_theory", "groupoid", "free"]], ["add", "theorem", "of_eq", ["category_theory", "groupoid", "free"]], ["add", "def", "to_neg", ["category_theory", "groupoid", "free", "quiver", "hom"]], ["add", "def", "to_neg_path", ["category_theory", "groupoid", "free", "quiver", "hom"]], ["add", "def", "to_pos", ["category_theory", "groupoid", "free", "quiver", "hom"]], ["add", "def", "to_pos_path", ["category_theory", "groupoid", "free", "quiver", "hom"]], ["add", "def", "quot_inv", ["category_theory", "groupoid", "free"]], ["add", "inductive", "red_step", ["category_theory", "groupoid", "free"]]]}, {"oldPath": "src/category_theory/path_category.lean", "newPath": "src/category_theory/path_category.lean", "changes": [["add", "def", "lift", ["category_theory", "paths"]], ["add", "theorem", "lift_cons", ["category_theory", "paths"]], ["add", "theorem", "lift_nil", ["category_theory", "paths"]], ["add", "theorem", "lift_spec", ["category_theory", "paths"]], ["add", "theorem", "lift_spec_unique", ["category_theory", "paths"]], ["add", "theorem", "lift_to_path", ["category_theory", "paths"]]]}, {"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": [["add", "theorem", "lift_spec", ["category_theory", "quotient"]], ["add", "theorem", "lift_spec_unique", ["category_theory", "quotient"]]]}, {"oldPath": "src/combinatorics/quiver/basic.lean", "newPath": "src/combinatorics/quiver/basic.lean", "changes": [["add", "theorem", "comp_assoc", ["prefunctor"]], ["add", "theorem", "ext", ["prefunctor"]]]}, {"oldPath": "src/combinatorics/quiver/connected_component.lean", "newPath": "src/combinatorics/quiver/connected_component.lean", "changes": [["mod", "def", "reverse", ["quiver", "path"]], ["add", "theorem", "reverse_comp", ["quiver", "path"]], ["add", "theorem", "reverse_reverse", ["quiver", "path"]], ["add", "theorem", "reverse_to_path", ["quiver", "path"]], ["mod", "def", "reverse", ["quiver"]], ["add", "theorem", "reverse_reverse", ["quiver"]], ["add", "def", "lift", ["quiver", "symmetrify"]], ["add", "theorem", "lift_reverse", ["quiver", "symmetrify"]], ["add", "theorem", "lift_spec", ["quiver", "symmetrify"]], ["add", "theorem", "lift_spec_unique", ["quiver", "symmetrify"]], ["add", "def", "of", ["quiver", "symmetrify"]]]}, {"oldPath": "src/combinatorics/quiver/path.lean", "newPath": "src/combinatorics/quiver/path.lean", "changes": []}]}, {"timestamp": 1664787547, "sha": "35bc69bc", "message": "feat(group_theory/subgroup): add several trivial lemmas (#16633)\n* add `subgroup.top_to_submonoid` and `subgroup.bot_to_submonoid`;\n* add `free_monoid.mrange_lift`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "bot_to_submonoid", ["subgroup"]], ["add", "theorem", "top_to_submonoid", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mrange_lift", ["free_monoid"]]]}]}, {"timestamp": 1664787545, "sha": "3cf2547c", "message": "feat(data/fintype/basic): Existence of a bijection with specified behaviour on a subset (#16479)\nGiven a function `f : α → β` which is injective on a set `s` in `α`, and a set `t` in `β` which has the same finite cardinality as the type `α` and which contains the image `f '' s`, extend/modify to a bijection between `α` and `t` which agrees on `s` with the original `f`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "exists_equiv_extend_of_card_eq", ["finset"]], ["add", "theorem", "exists_equiv_extend_of_card_eq", ["set", "maps_to"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "ne_iff", ["set", "inj_on"]]]}]}, {"timestamp": 1664779000, "sha": "d2461773", "message": "chore(analysis/locally_convex/with_seminorms): fix namespaces for dot-notation (#16771)\nSome lemmas where in the wrong namespaces.", "changes": [{"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["del", "theorem", "to_locally_convex_space", ["seminorm_family"]], ["del", "theorem", "with_seminorms_eq", ["seminorm_family"]], ["add", "theorem", "to_locally_convex_space", ["with_seminorms"]], ["add", "theorem", "with_seminorms_eq", ["with_seminorms"]]]}, {"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": []}]}, {"timestamp": 1664778999, "sha": "ebe6bda5", "message": "feat(analysis/normed/group/add_circle): define the additive circle (#16201)", "changes": [{"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["del", "theorem", "archimedean", ["floor_ring"]]]}, {"oldPath": "src/algebra/order/to_interval_mod.lean", "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["add", "theorem", "to_Ico_mod_eq_fract_mul", []], ["add", "theorem", "to_Ico_mod_mem_Ico'", []]]}, {"oldPath": null, "newPath": "src/analysis/normed/group/add_circle.lean", "changes": [["add", "theorem", "norm_coe_mul", ["add_circle"]], ["add", "theorem", "norm_eq", ["add_circle"]], ["add", "theorem", "norm_eq_of_zero", ["add_circle"]], ["add", "theorem", "norm_eq", ["unit_add_circle"]]]}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": [["add", "theorem", "quotient_norm_eq", ["add_subgroup"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["mod", "def", "angle", ["real"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "int_cast_mem_zmultiples_one", ["add_subgroup"]], ["add", "theorem", "int_cast_mul_mem_zmultiples", ["add_subgroup"]], ["add", "theorem", "zpow_mem_zpowers", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/topology/instances/add_circle.lean", "changes": [["add", "theorem", "coe_equiv_Ico_mk_apply", ["add_circle"]], ["add", "theorem", "coe_image_Icc_eq", ["add_circle"]], ["add", "theorem", "compact_space", ["add_circle"]], ["add", "theorem", "continuous_equiv_Ico_symm", ["add_circle"]], ["add", "def", "equiv_Ico", ["add_circle"]], ["add", "def", "equiv_add_circle", ["add_circle"]], ["add", "theorem", "equiv_add_circle_apply_mk", ["add_circle"]], ["add", "theorem", "equiv_add_circle_symm_apply_mk", ["add_circle"]], ["add", "def", "add_circle", []], ["add", "def", "unit_add_circle", []]]}]}, {"timestamp": 1664775829, "sha": "08bb56fb", "message": "feat(algebra/module/projective): weaken assumptions in lifting_property (#16750)\nThese `add_comm_group` structures are not necessary, nor is the universe restriction on `M`.", "changes": [{"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": [["mod", "theorem", "projective_def", ["module"]]]}]}, {"timestamp": 1664770141, "sha": "8818d823", "message": "chore(scripts): update nolints.txt (#16773)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1664762811, "sha": "3665254a", "message": "feat(analysis/convex/cone/basic): add `has_add`, `add_zero_class`, and `add_comm_semigroup` instances to `convex_cone` (#16213)\nAdds `has_add`, `add_zero_class`, and `add_comm_semigroup` instance to `convex_cone`s.", "changes": [{"oldPath": "src/analysis/convex/cone/basic.lean", "newPath": "src/analysis/convex/cone/basic.lean", "changes": [["add", "theorem", "mem_add", ["convex_cone"]]]}]}, {"timestamp": 1664759610, "sha": "a4e0a656", "message": "feat(linear_algebra/matrix/hermitian): complex_hermitian_real_diagonal (#16380)\nThe diagonal elements of a complex Hermitian matrix are real.", "changes": [{"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": [["add", "theorem", "coe_re_apply_self", ["matrix", "is_hermitian"]], ["add", "theorem", "coe_re_diag", ["matrix", "is_hermitian"]]]}]}, {"timestamp": 1664746752, "sha": "b2d70ba0", "message": "feat(order/liminf_limsup): add limsup/liminf variants of some Limsup/Liminf lemmas (#16759)\nAlso make sure that similar lemmas follow each other in the order Limsup, Liminf, limsup, liminf.", "changes": [{"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "infi_le_liminf", ["filter"]], ["add", "theorem", "le_liminf_of_le", ["filter"]], ["add", "theorem", "le_limsup_of_le", ["filter"]], ["add", "theorem", "liminf_le_of_le", ["filter"]], ["add", "theorem", "limsup_le_of_le", ["filter"]], ["add", "theorem", "limsup_le_supr", ["filter"]]]}]}, {"timestamp": 1664742506, "sha": "2ce380c2", "message": "docs(analysis/locally_convex/bounded): fix hyperlink (#16753)", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}]}, {"timestamp": 1664742505, "sha": "51696a64", "message": "chore(data/analysis/*): Fix lint and docs (#16751)\nWrite the missing docstrings and module docs for `data.analysis.filter` and `data.analysis.topology`. Satisfy the `has_nonempty_instance` and `unused_arguments` linters.", "changes": [{"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": [["mod", "def", "realizer", ["compact"]], ["mod", "theorem", "nhds_F", ["ctop", "realizer"]], ["mod", "theorem", "nhds_σ", ["ctop", "realizer"]]]}]}, {"timestamp": 1664738528, "sha": "2bb1bae8", "message": "chore(analysis/locally_convex/[continuous_of_]bounded): import `analysis.normed_space.is_R_or_C` later (#16758)\nWe don't want to import `analysis/normed_space/is_R_or_C` in `analysis/locally_convex/bounded` because it will create a cycle when defining the strong topology on `continuous_linear_map`, because we will have to (transitively) import `analysis/locally_convex/bounded` in `analysis/normed_space/operator_norm`.\nSo I moved the material of #16550 in a new file `analysis/locally_convex/continuous_of_bounded`", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["del", "def", "clm_of_exists_bounded_image", ["linear_map"]], ["del", "theorem", "clm_of_exists_bounded_image_apply", ["linear_map"]], ["del", "theorem", "clm_of_exists_bounded_image_coe", ["linear_map"]], ["del", "theorem", "continuous_at_zero_of_locally_bounded", ["linear_map"]], ["del", "theorem", "continuous_of_locally_bounded", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/analysis/locally_convex/continuous_of_bounded.lean", "changes": [["add", "def", "clm_of_exists_bounded_image", ["linear_map"]], ["add", "theorem", "clm_of_exists_bounded_image_apply", ["linear_map"]], ["add", "theorem", "clm_of_exists_bounded_image_coe", ["linear_map"]], ["add", "theorem", "continuous_at_zero_of_locally_bounded", ["linear_map"]], ["add", "theorem", "continuous_of_locally_bounded", ["linear_map"]]]}]}, {"timestamp": 1664727834, "sha": "c4878d17", "message": "feat(data/fintype): complement of univ (#16623)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "compl_eq_empty_iff", ["finset"]], ["add", "theorem", "compl_eq_univ_iff", ["finset"]], ["add", "theorem", "compl_univ", ["finset"]], ["add", "theorem", "top_eq_univ", ["finset"]]]}]}, {"timestamp": 1664723870, "sha": "b2381e5a", "message": "feat(analysis/locally_convex/with_seminorms): boundedness of images (#16674)\nThis PR adds two lemmas that are very useful in proving that semilinear maps are locally bounded (and hence continuous). We also add some documentation for these lemmas and remove documentation for the ad-hoc lemmas.", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["del", "theorem", "is_vonN_bounded_iff_seminorm_bounded", ["bornology"]], ["add", "theorem", "image_is_vonN_bounded_iff_finset_seminorm_bounded", ["with_seminorms"]], ["add", "theorem", "image_is_vonN_bounded_iff_seminorm_bounded", ["with_seminorms"]], ["add", "theorem", "is_vonN_bounded_iff_seminorm_bounded", ["with_seminorms"]]]}]}, {"timestamp": 1664714390, "sha": "73d05c46", "message": "feat(analysis/locally_convex): first countable topologies from countable families of seminorms (#16595)\nThis PR proves that if the topology is induced by a countable family of seminorms, then it is first countable.", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["add", "theorem", "first_countable", ["with_seminorms"]]]}]}, {"timestamp": 1664693612, "sha": "df6a0b2e", "message": "feat(analysis/convex/body): define bodies and implement module instance (#16297)\nDefines the type `convex_body V` and endows it with a\nmodule structure over the nonnegative reals.\nThis commit also introduces `set_like` and `inhabited` instances.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/body.lean", "changes": [["add", "theorem", "coe_add", ["convex_body"]], ["add", "theorem", "coe_mk", ["convex_body"]], ["add", "theorem", "coe_smul'", ["convex_body"]], ["add", "theorem", "coe_smul", ["convex_body"]], ["add", "theorem", "coe_zero", ["convex_body"]], ["add", "theorem", "convex", ["convex_body"]], ["add", "theorem", "is_compact", ["convex_body"]], ["add", "theorem", "nonempty", ["convex_body"]], ["add", "structure", "convex_body", []]]}, {"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": [["add", "theorem", "smul", ["is_compact"]]]}]}, {"timestamp": 1664690110, "sha": "d79c3671", "message": "feat(algebraic_topology): extra degeneracy of augmented simplicial objects (#16411)\nThis PR introduces the notion of extra degeneracy of augmented simplicial objects. In homotopy theory, this is a condition that is used to show that the connected components of simplicial sets are contractible. This notion is formalized for augmented simplicial objects in any category and it is shown that the standard `n`-simplex has an extra degeneracy.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/extra_degeneracy.lean", "changes": [["add", "def", "extra_degeneracy", ["sSet", "augmented", "standard_simplex"]], ["add", "def", "shift", ["sSet", "augmented", "standard_simplex"]], ["add", "def", "shift_fun", ["sSet", "augmented", "standard_simplex"]], ["add", "theorem", "shift_fun_0", ["sSet", "augmented", "standard_simplex"]], ["add", "theorem", "shift_fun_succ", ["sSet", "augmented", "standard_simplex"]], ["add", "def", "map", ["simplicial_object", "augmented", "extra_degeneracy"]], ["add", "structure", "extra_degeneracy", ["simplicial_object", "augmented"]]]}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "theorem", "w₀", ["category_theory", "simplicial_object", "augmented"]]]}, {"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": [["add", "def", "augmented", ["sSet"]]]}]}, {"timestamp": 1664685695, "sha": "f063221a", "message": "feat(topology/sheaves/skyscraper): skyscraper presheaf as a functor (#16685)", "changes": [{"oldPath": "src/topology/sheaves/skyscraper.lean", "newPath": "src/topology/sheaves/skyscraper.lean", "changes": [["add", "def", "map'", ["skyscraper_presheaf_functor"]], ["add", "theorem", "map'_comp", ["skyscraper_presheaf_functor"]], ["add", "theorem", "map'_id", ["skyscraper_presheaf_functor"]], ["add", "def", "skyscraper_presheaf_functor", []], ["add", "def", "skyscraper_sheaf_functor", []]]}]}, {"timestamp": 1664668649, "sha": "852b23b5", "message": "chore(topology,analysis): make the sup metric and norm computable (#16570)\nTo make this work, we replace `max` with `sup` in the implementation (the two are defeq, but the former has stronger typeclass arguments), and add some missing shortcut instances for `ennreal` which are needed for the emetric structure.\nAs a result, we can can now perform useless \"computation\"s like:\n```lean\n#eval ∥((3 : ℤ), (4 : ℤ))∥\n-- real.of_cauchy (sorry /- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ... -/)\n```\n(this isn't totally useless; it's enough to inform the reader that they're not looking at a euclidean norm, which is a common source of confusion)", "changes": [{"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["del", "def", "diam", ["emetric"]]]}]}, {"timestamp": 1664659839, "sha": "77db6f75", "message": "feat(analysis/locally_convex/with_seminorms): split `continuous_from_bounded` to get an extra continuity criterion (#16710)\nThis split should also help with proving that `continuous_from_bounded` is an `iff` under some assumptions, because the only remaining fact to prove is that a continuous seminorm is necessarily greater than a constant times the supremum of a finite number of generating seminorms.", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["add", "theorem", "continuous_iff_continuous_comp", ["seminorm"]], ["add", "theorem", "continuous_of_continuous_comp", ["seminorm"]], ["add", "theorem", "continuous_seminorm", ["with_seminorms"]]]}]}, {"timestamp": 1664649157, "sha": "d638c7f7", "message": "feat(group_theory/subgroup/basic): If `H` is commutative, then `H ≤ H.centralizer` (#16718)\nIf `H` is commutative, then `H ≤ H.centralizer`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "le_centralizer", ["subgroup"]], ["add", "theorem", "le_centralizer_iff_is_commutative", ["subgroup"]]]}]}, {"timestamp": 1664649155, "sha": "567220c2", "message": "refactor(analysis/inner_product_space/pi_L2): Delete `orthonormal_basis_index` (#16698)\n`std_orthonormal_basis` was indexed by `orthonormal_basis_index` while it can simply be indexed by `fin (finrank 𝕜 E)`. As a result, `fin_std_orthonormal_basis` becomes a trivial reindexation of `std_orthonormal_basis` so we delete it.", "changes": [{"oldPath": "src/analysis/inner_product_space/orientation.lean", "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["del", "theorem", "coe_std_orthonormal_basis", []], ["del", "def", "fin_std_orthonormal_basis", []], ["del", "def", "orthonormal_basis_index", []], ["mod", "def", "std_orthonormal_basis", []]]}]}, {"timestamp": 1664649154, "sha": "ba197e48", "message": "feat(order/filter/*,topology/noetherian_space): add lemmas about `cofinite` (#16498)\n* A filter is disjoint with `cofinite` iff there exists a finite set that belongs to this filter.\n* An ultrafilter is either less than or equal to `cofinite`, or is equal to `pure a` for some `a`.\n* Any type with cofinite topology is a Noetherian (hence, is a compact) space.", "changes": [{"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "disjoint_cofinite_left", ["filter"]], ["add", "theorem", "disjoint_cofinite_right", ["filter"]], ["mod", "theorem", "le_cofinite_iff_compl_singleton_mem", ["filter"]], ["mod", "theorem", "le_cofinite_iff_eventually_ne", ["filter"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "disjoint_iff_not_le", ["ultrafilter"]], ["mod", "theorem", "eq_pure_of_finite", ["ultrafilter"]], ["mod", "theorem", "eq_pure_of_finite_mem", ["ultrafilter"]], ["add", "theorem", "inf_ne_bot_iff", ["ultrafilter"]], ["add", "theorem", "le_cofinite_or_eq_pure", ["ultrafilter"]], ["add", "theorem", "le_sup_iff", ["ultrafilter"]], ["mod", "theorem", "union_mem_iff", ["ultrafilter"]]]}, {"oldPath": "src/topology/noetherian_space.lean", "newPath": "src/topology/noetherian_space.lean", "changes": []}]}, {"timestamp": 1664638864, "sha": "7f034c52", "message": "feat(topology/algebra/module/character_space): kernels of terms of the `character_space` (#16722)\nThis shows that the kernel of a element `φ` of `character_space 𝕜 A` is a maximal ideal. Moreover, `φ` and `ψ` are equal if their kernels coincide.\nIn addition, we provide a missing `ext` lemma, and protect a lemma named `is_closed` in this namespace.", "changes": [{"oldPath": "src/analysis/normed_space/algebra.lean", "newPath": "src/analysis/normed_space/algebra.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": [["add", "theorem", "ext", ["weak_dual", "character_space"]], ["add", "theorem", "ext_ker", ["weak_dual", "character_space"]], ["del", "theorem", "is_closed", ["weak_dual", "character_space"]]]}]}, {"timestamp": 1664638863, "sha": "c2d85cec", "message": "feat(data/list/basic): `λ a, [a]` is injective (#16716)\nAlso add a `@[simp]` lemma `list.cons_eq_cons`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "cons_eq_cons", ["list"]], ["add", "theorem", "singleton_inj", ["list"]], ["add", "theorem", "singleton_injective", ["list"]]]}]}, {"timestamp": 1664633159, "sha": "21347ef2", "message": "feat(analysis/convolution): prove that parametric convolution tends to a specific value (#16704)\n* Prove `convolution_tendsto_right` which shows that the convolution tends to a value when all three relevant arguments vary (in the previous version only the first argument varied).\n* This lemma can be used to simplify a proof in the sphere eversion project", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["add", "theorem", "tendsto_support_normed_small_sets", ["cont_diff_bump_of_inner"]]]}, {"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": [["del", "theorem", "convolution_tendsto_right'", ["cont_diff_bump_of_inner"]], ["add", "theorem", "convolution_tendsto_right_of_continuous", ["cont_diff_bump_of_inner"]], ["mod", "theorem", "convolution_tendsto_right", []], ["mod", "theorem", "dist_convolution_le'", []], ["mod", "theorem", "dist_convolution_le", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "eventually_nhds_prod_iff", ["metric"]], ["add", "theorem", "eventually_prod_nhds_iff", ["metric"]]]}]}, {"timestamp": 1664633158, "sha": "180f4f20", "message": "feat(analysis/locally_convex): locally bounded implies continuous (#16550)\nWe prove that locally bounded linear maps are continuous provided the domain is first countable. In the literature this is usually stated with pseudometrizable, but first countable is equivalent.", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "theorem", "continuous_at_zero_of_locally_bounded", ["linear_map"]], ["add", "theorem", "continuous_of_locally_bounded", ["linear_map"]]]}]}, {"timestamp": 1664633157, "sha": "bf783181", "message": "feat(number_theory/number_field): add mem_roots_of_unity_of_norm_eq_one (#15143)\nWe prove that an algebraic integer whose conjugates are all of norm 1 is a root of unity. For that, we prove first that the set of algebraic integers (in a fixed number field) with bounded conjugates is finite.\nThe counterpart of the result, that is roots of unity are of norm 1, is #16426 \nFrom flt-regular", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "degree_le", ["minpoly"]], ["add", "theorem", "nat_degree_le", ["minpoly"]]]}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["add", "theorem", "coeff_bdd_of_norm_le", ["number_field", "embeddings"]], ["add", "theorem", "finite_of_norm_le", ["number_field", "embeddings"]], ["add", "theorem", "pow_eq_one_of_norm_eq_one", ["number_field", "embeddings"]], ["mod", "theorem", "rat_range_eq_roots", ["number_field", "embeddings"]]]}]}, {"timestamp": 1664623029, "sha": "7295c811", "message": "feat(topology/sheaves/skyscraper): skyscraper presheaf is a sheaf (#16649)\n- [x] depends on: #16694", "changes": [{"oldPath": "src/topology/sheaves/skyscraper.lean", "newPath": "src/topology/sheaves/skyscraper.lean", "changes": [["add", "theorem", "skyscraper_presheaf_eq_pushforward", []], ["add", "theorem", "skyscraper_presheaf_is_sheaf", []], ["add", "def", "skyscraper_sheaf", []]]}]}, {"timestamp": 1664623028, "sha": "8150c5eb", "message": "feat(category_theory/morphism_property): miscellaneous basic results (#16444)\nThis PR establishes miscellaneous results about `morphism_property` in category theory: how `stable_under_composition`, etc, behave with passing to the opposite category, the definition of the inverse image of a `morphism_property` by a functor, the definition of isomorphisms/monomorphisms/epimorphisms as morphism properties.", "changes": [{"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": [["add", "theorem", "of_horiz_is_iso", ["category_theory", "is_pushout"]], ["add", "theorem", "of_vert_is_iso", ["category_theory", "is_pushout"]]]}, {"oldPath": "src/category_theory/morphism_property.lean", "newPath": "src/category_theory/morphism_property.lean", "changes": [["add", "theorem", "iff", ["category_theory", "morphism_property", "epimorphisms"]], ["add", "theorem", "infer_property", ["category_theory", "morphism_property", "epimorphisms"]], ["add", "def", "epimorphisms", ["category_theory", "morphism_property"]], ["add", "def", "inverse_image", ["category_theory", "morphism_property"]], ["add", "theorem", "iff", ["category_theory", "morphism_property", "isomorphisms"]], ["add", "theorem", "infer_property", ["category_theory", "morphism_property", "isomorphisms"]], ["add", "def", "isomorphisms", ["category_theory", "morphism_property"]], ["add", "theorem", "iff", ["category_theory", "morphism_property", "monomorphisms"]], ["add", "theorem", "infer_property", ["category_theory", "morphism_property", "monomorphisms"]], ["add", "def", "monomorphisms", ["category_theory", "morphism_property"]], ["add", "def", "op", ["category_theory", "morphism_property"]], ["add", "theorem", "op_unop", ["category_theory", "morphism_property"]], ["add", "theorem", "epimorphisms", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "inverse_image", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "isomorphisms", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "monomorphisms", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "op", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "unop", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "op", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "unop", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "inl", ["category_theory", "morphism_property", "stable_under_cobase_change"]], ["add", "theorem", "inr", ["category_theory", "morphism_property", "stable_under_cobase_change"]], ["add", "theorem", "mk", ["category_theory", "morphism_property", "stable_under_cobase_change"]], ["add", "theorem", "op", ["category_theory", "morphism_property", "stable_under_cobase_change"]], ["add", "theorem", "respects_iso", ["category_theory", "morphism_property", "stable_under_cobase_change"]], ["add", "theorem", "unop", ["category_theory", "morphism_property", "stable_under_cobase_change"]], ["add", "def", "stable_under_cobase_change", ["category_theory", "morphism_property"]], ["add", "theorem", "epimorphisms", ["category_theory", "morphism_property", "stable_under_composition"]], ["add", "theorem", "inverse_image", ["category_theory", "morphism_property", "stable_under_composition"]], ["add", "theorem", "isomorphisms", ["category_theory", "morphism_property", "stable_under_composition"]], ["add", "theorem", "monomorphisms", ["category_theory", "morphism_property", "stable_under_composition"]], ["add", "theorem", "op", ["category_theory", "morphism_property", "stable_under_composition"]], ["add", "theorem", "unop", ["category_theory", "morphism_property", "stable_under_composition"]], ["add", "theorem", "op", ["category_theory", "morphism_property", "stable_under_inverse"]], ["add", "theorem", "unop", ["category_theory", "morphism_property", "stable_under_inverse"]], ["add", "def", "unop", ["category_theory", "morphism_property"]], ["add", "theorem", "unop_op", ["category_theory", "morphism_property"]]]}]}, {"timestamp": 1664623027, "sha": "9af20344", "message": "feat(algebraic_topology/dold_kan): decomposition of Q (#16357)\nIn this PR, a decomposition of the endomorphisms `Q q` acting on `X _[n+1]` is obtained. In the case of abelian categories, it shows that the image of `Q q` is contained in a certain sum of images of degeneracy operators. Critical tools are also introduced in order to show (in a future PR) that the normalized Moore complex functor reflects isomorphisms.", "changes": [{"oldPath": "src/algebraic_topology/Moore_complex.lean", "newPath": "src/algebraic_topology/Moore_complex.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/decomposition.lean", "changes": [["add", "theorem", "decomposition_Q", ["algebraic_topology", "dold_kan"]], ["add", "def", "id", ["algebraic_topology", "dold_kan", "morph_components"]], ["add", "theorem", "id_φ", ["algebraic_topology", "dold_kan", "morph_components"]], ["add", "def", "post_comp", ["algebraic_topology", "dold_kan", "morph_components"]], ["add", "theorem", "post_comp_φ", ["algebraic_topology", "dold_kan", "morph_components"]], ["add", "def", "pre_comp", ["algebraic_topology", "dold_kan", "morph_components"]], ["add", "theorem", "pre_comp_φ", ["algebraic_topology", "dold_kan", "morph_components"]], ["add", "def", "φ", ["algebraic_topology", "dold_kan", "morph_components"]], ["add", "structure", "morph_components", ["algebraic_topology", "dold_kan"]]]}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "theorem", "δ_naturality", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "σ_naturality", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "δ_naturality", ["category_theory", "simplicial_object"]], ["add", "theorem", "σ_naturality", ["category_theory", "simplicial_object"]]]}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "def", "rev", ["fin"]], ["add", "theorem", "rev_eq", ["fin"]]]}]}, {"timestamp": 1664623026, "sha": "563aed34", "message": "feat(algebraic_topology/simplex_category): strong epi mono factorisations (#16276)\nIn this PR, it is shown that there exists (unique) strong epi mono factorisations in `simplex_category`.", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["mod", "theorem", "eq_id_of_is_iso", ["simplex_category"]], ["add", "theorem", "factor_thru_image_eq", ["simplex_category"]], ["add", "theorem", "image_eq", ["simplex_category"]], ["add", "theorem", "image_ι_eq", ["simplex_category"]], ["add", "theorem", "coe_map", ["simplex_category", "skeletal_functor"]]]}, {"oldPath": "src/category_theory/functor/epi_mono.lean", "newPath": "src/category_theory/functor/epi_mono.lean", "changes": [["add", "def", "split_epi_category_imp_of_is_equivalence", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "has_strong_epi_mono_factorisations_imp_of_is_equivalence", ["category_theory", "functor"]]]}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": [["add", "theorem", "epi_iff_surjective", ["NonemptyFinLinOrd"]], ["add", "theorem", "mono_iff_injective", ["NonemptyFinLinOrd"]]]}]}, {"timestamp": 1664613023, "sha": "8f78eb9c", "message": "feat(*): generalize to and add distrib_smul instances (#16132)\nThis PR builds on #16123 by adding `distrib_smul` (and `smul_zero_class`) instances for:\n * `finsupp`\n * `add_monoid_algebra`\n * `polynomial`\n * submodule quotients\n * scalar multiplication by `ℚ`\nIt also generalizes some results by weakening `distrib_mul_action` to `distrib_smul`. The choice of instances and generalizations is based on which are necessary to solve instance diamonds in `splitting_field`, so I probably missed a lot of additional changes. Since I'm not so interested in generalizing everything at the moment, I'd rather leave missing instances to follow-up PRs.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_smul", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]], ["mod", "theorem", "sum_smul_index'", ["finsupp"]], ["mod", "theorem", "finsupp", ["is_smul_regular"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "theorem", "of_finsupp_smul", ["polynomial"]], ["mod", "theorem", "to_finsupp_smul", ["polynomial"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/big_operators.lean", "newPath": "src/group_theory/group_action/big_operators.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "def", "comp_fun", ["distrib_smul"]], ["add", "def", "to_add_monoid_hom", ["distrib_smul"]], ["add", "def", "distrib_smul_left", ["function", "surjective"]], ["add", "def", "smul_zero_class_left", ["function", "surjective"]], ["mod", "theorem", "smul_add", []], ["mod", "theorem", "smul_zero", []], ["add", "def", "comp_fun", ["smul_zero_class"]], ["add", "def", "to_zero_hom", ["smul_zero_class"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1664608536, "sha": "25c8333e", "message": "chore(number_theory/bernoulli_polynomials): removed unnecessary cast_succ from sum_bernoulli (#16731)", "changes": [{"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}]}, {"timestamp": 1664589935, "sha": "2a543b0d", "message": "perf(algebraic_topology/simplicial_object): Speedup `simplicial_cosimplicial_augmented_equiv` (#16729)\nUse `equivalence.mk` rather than `equivalence.mk'`. Restrict the `simps` to `functor` and `inverse`.\nThis roughly speeds everything up by a factor of 2.", "changes": [{"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}]}, {"timestamp": 1664589934, "sha": "5fefdfa1", "message": "feat(group_theory/schreier): The size of the commutator subgroup is bounded in terms of the index of the center and the number of commutators (#16679)\nThis PR proves that the size of the commutator subgroup is bounded in terms of the index of the center and the number of commutators. The proof uses Schreier's lemma and the transfer homomorphism.\nI included lots of comments since the proof is rather technical. But please let me know if I went overboard.\nUltimately, this is building up to a bound on the size of the commutator subgroup just in terms of the number of commutators.", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["add", "theorem", "rank_commutator_le_card", []]]}, {"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": [["add", "theorem", "card_commutator_dvd_index_center_pow", ["subgroup"]]]}]}, {"timestamp": 1664581042, "sha": "7aebb349", "message": "refactor(ring_theory/polynomial/tower): review APIs (#16678)\nSplit from #16412.\nAll of the following lemmas move from namespace `is_scalar_tower` to namespace `polynomial`.\nRename `aeval_apply` to `aeval_map_algebra_map` and swap the sides of the equality, remove `aeval_map` which is just the same as `aeval_map_algebra_map`.\nRename `algebra_map_aeval` to `aeval_algebra_map_apply` and swap the sides of the equality, rename original `aeval_algebra_map_apply` to `aeval_algebra_map_apply_eq_algebra_map_eval`. Make the new lemma a `simp` lemma and remove `simp` from the original one.\nRename `aeval_eq_zero_of_aeval_algebra_map_eq_zero` to `aeval_algebra_map_eq_zero_iff_of_injective` and make it an iff lemma.\nReplace `aeval_eq_zero_of_aeval_algebra_map_eq_zero_field` by `aeval_algebra_map_eq_zero_iff`, it has weaker assumptions and is also an iff lemma.\n- [x] depends on: #16673", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "newPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["del", "theorem", "aeval_algebra_map_apply", ["polynomial"]], ["add", "theorem", "aeval_algebra_map_apply_eq_algebra_map_eval", ["polynomial"]], ["del", "theorem", "aeval_map", ["polynomial"]]]}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/tower.lean", "newPath": "src/ring_theory/polynomial/tower.lean", "changes": [["del", "theorem", "aeval_apply", ["is_scalar_tower"]], ["del", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero", ["is_scalar_tower"]], ["del", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero_field", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_aeval", ["is_scalar_tower"]], ["add", "theorem", "aeval_algebra_map_apply", ["polynomial"]], ["add", "theorem", "aeval_algebra_map_eq_zero_iff", ["polynomial"]], ["add", "theorem", "aeval_algebra_map_eq_zero_iff_of_injective", ["polynomial"]], ["add", "theorem", "aeval_map_algebra_map", ["polynomial"]], ["mod", "theorem", "aeval_coe", ["subalgebra"]]]}]}, {"timestamp": 1664581041, "sha": "a753abcf", "message": "feat(linear_algebra/{basis, determinant, orientation}): determinant of `adjust_to_orientation` of a basis (#16476)\nPerforming the operation `adjust_to_orientation` on a basis either preserves the determinant with respect to that basis, or negates it.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "coord_units_smul", ["basis"]], ["add", "theorem", "repr_units_smul", ["basis"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "det_units_smul", ["basis"]], ["add", "theorem", "det_units_smul_self", ["basis"]]]}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "theorem", "abs_det_adjust_to_orientation", ["basis"]], ["add", "theorem", "det_adjust_to_orientation", ["basis"]]]}]}, {"timestamp": 1664581040, "sha": "c1a28cb2", "message": "feat(topology/semicontinuous): characterization by closed sets of semicontinuous maps to a linear order (#16442)", "changes": [{"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": [["add", "theorem", "is_closed_preimage", ["lower_semicontinuous"]], ["add", "theorem", "lower_semicontinuous_iff_is_closed_preimage", []], ["del", "theorem", "lower_semicontinuous_iff_is_open", []], ["add", "theorem", "lower_semicontinuous_iff_is_open_preimage", []], ["add", "theorem", "is_closed_preimage", ["upper_semicontinuous"]], ["add", "theorem", "upper_semicontinuous_iff_is_closed_preimage", []], ["del", "theorem", "upper_semicontinuous_iff_is_open", []], ["add", "theorem", "upper_semicontinuous_iff_is_open_preimage", []]]}]}, {"timestamp": 1664581039, "sha": "e4ee4e30", "message": "feat(category_theory/limits): colimits from finite colimits and filtered colimits (#16373)\nWe will use this in the future to show that if C has finite colimits, then Ind(C) is cocomplete.", "changes": [{"oldPath": "src/category_theory/functor/flat.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": [["add", "theorem", "cofiltered_of_has_finite_limits", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/constructions/filtered.lean", "changes": [["add", "def", "lift_to_finset", ["category_theory", "limits", "coproducts_from_finite_filtered"]], ["add", "def", "lift_to_finset_colimit_cocone", ["category_theory", "limits", "coproducts_from_finite_filtered"]], ["add", "theorem", "has_colimits_of_finite_and_filtered", ["category_theory", "limits"]], ["add", "theorem", "has_coproducts_of_finite_and_filtered", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_finite_and_cofiltered", ["category_theory", "limits"]], ["add", "theorem", "has_products_of_finite_and_cofiltered", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "theorem", "has_cofiltered_limits_of_has_filtered_colimits_op", ["category_theory", "limits"]], ["add", "theorem", "has_colimit_of_has_limit_op", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_of_has_limits_op", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_of_shape_of_has_limits_of_shape_op", ["category_theory", "limits"]], ["del", "theorem", "has_colimits_of_shape_op_of_has_limits_of_shape", ["category_theory", "limits"]], ["add", "theorem", "has_coproducts_of_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_coproducts_of_shape_of_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_filtered_colimits_of_has_cofiltered_limits_op", ["category_theory", "limits"]], ["add", "theorem", "has_finite_coproducts_of_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_finite_products_of_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_limit_of_has_colimit_op", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_has_colimits_op", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_shape_of_has_colimits_of_shape_op", ["category_theory", "limits"]], ["add", "theorem", "has_products_of_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_products_of_shape_of_opposite", ["category_theory", "limits"]]]}]}, {"timestamp": 1664581038, "sha": "aa701d8f", "message": "feat(algebra/module/localized_module): universal property of localized module (#15559)\nas $R$ module. `is_localized_module` also characterises localized module upto isomorphism as $R\\_S$ module, this can be found in #16084", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "End_algebra_map_is_unit_inv_apply_eq_iff'", ["module"]], ["add", "theorem", "End_algebra_map_is_unit_inv_apply_eq_iff", ["module"]], ["add", "theorem", "End_is_unit_apply_inv_apply_of_is_unit", ["module"]], ["add", "theorem", "End_is_unit_iff", ["module"]], ["add", "theorem", "End_is_unit_inv_apply_apply_of_is_unit", ["module"]]]}, {"oldPath": "src/algebra/module/localized_module.lean", "newPath": "src/algebra/module/localized_module.lean", "changes": [["add", "theorem", "from_localized_module'_add", ["is_localized_module"]], ["add", "theorem", "from_localized_module'_mk", ["is_localized_module"]], ["add", "theorem", "from_localized_module'_smul", ["is_localized_module"]], ["add", "theorem", "bij", ["is_localized_module", "from_localized_module"]], ["add", "theorem", "inj", ["is_localized_module", "from_localized_module"]], ["add", "theorem", "surj", ["is_localized_module", "from_localized_module"]], ["add", "theorem", "from_localized_module_mk", ["is_localized_module"]], ["add", "theorem", "is_universal", ["is_localized_module"]], ["add", "theorem", "iso_apply_mk", ["is_localized_module"]], ["add", "theorem", "iso_symm_apply'", ["is_localized_module"]], ["add", "theorem", "iso_symm_apply_aux", ["is_localized_module"]], ["add", "theorem", "iso_symm_comp", ["is_localized_module"]], ["add", "theorem", "lift_comp", ["is_localized_module"]], ["add", "theorem", "lift_unique", ["is_localized_module"]], ["add", "theorem", "ring_hom_ext", ["is_localized_module"]], ["add", "theorem", "lift'_add", ["localized_module"]], ["add", "theorem", "lift'_mk", ["localized_module"]], ["add", "theorem", "lift'_smul", ["localized_module"]], ["add", "theorem", "lift_comp", ["localized_module"]], ["add", "theorem", "lift_mk", ["localized_module"]], ["add", "theorem", "lift_unique", ["localized_module"]]]}]}, {"timestamp": 1664573340, "sha": "866664b8", "message": "feat(data/polynomial/ring_division): add bUnion_roots_finite (#16670)\nAdd three lemmas about polynomials needed for #15143 \nFrom flt-regular", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "ext_iff_degree_le", ["polynomial"]], ["add", "theorem", "ext_iff_nat_degree_le", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "bUnion_roots_finite", ["polynomial"]]]}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": [["add", "theorem", "coeff_bdd_of_roots_le", ["polynomial"]], ["add", "theorem", "eq_one_of_roots_le", ["polynomial"]]]}]}, {"timestamp": 1664573338, "sha": "2fb109f0", "message": "feat(analysis/inner_product/orientation, geometry/euclidean/oriented_angle): use bundled orthonormal bases (#16475)\nBundled orthonormal bases (as opposed to bases with a mixin predicate `orthonormal`) were defined in #12060, and some of the use cases were switched over in #12253. This PR completes the job, switching to bundled orthonormal bases in `inner_product/orientation` and `euclidean/oriented_angle` as well as in one remaining construction (the standard ` ℝ`-orthonormal basis of `ℂ`) in `inner_product/pi_L2`.\nFormalized as part of the Sphere Eversion project. The part that I will be using in future PRs is the bundled version of the construction `orthonormal_basis.adjust_to_orientation` in `inner_product/orientation`.", "changes": [{"oldPath": "src/analysis/inner_product_space/orientation.lean", "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": [["del", "theorem", "orthonormal_adjust_to_orientation", ["orthonormal"]], ["add", "def", "adjust_to_orientation", ["orthonormal_basis"]], ["add", "theorem", "adjust_to_orientation_apply_eq_or_eq_neg", ["orthonormal_basis"]], ["add", "theorem", "orientation_adjust_to_orientation", ["orthonormal_basis"]], ["add", "theorem", "orthonormal_adjust_to_orientation", ["orthonormal_basis"]], ["add", "theorem", "to_basis_adjust_to_orientation", ["orthonormal_basis"]]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["del", "theorem", "map_isometry_euclidean_of_orthonormal", ["basis"]], ["add", "theorem", "coe_orthonormal_basis_one_I", ["complex"]], ["del", "def", "isometry_euclidean", ["complex"]], ["del", "theorem", "isometry_euclidean_apply_one", ["complex"]], ["del", "theorem", "isometry_euclidean_apply_zero", ["complex"]], ["del", "theorem", "isometry_euclidean_proj_eq_self", ["complex"]], ["del", "theorem", "isometry_euclidean_symm_apply", ["complex"]], ["mod", "def", "isometry_of_orthonormal", ["complex"]], ["mod", "theorem", "map_isometry_of_orthonormal", ["complex"]], ["add", "def", "orthonormal_basis_one_I", ["complex"]], ["add", "theorem", "orthonormal_basis_one_I_repr_apply", ["complex"]], ["add", "theorem", "orthonormal_basis_one_I_repr_symm_apply", ["complex"]], ["add", "theorem", "to_basis_orthonormal_basis_one_I", ["complex"]]]}, {"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["mod", "theorem", "oangle_eq_basis_oangle", ["orientation"]], ["mod", "theorem", "rotation_eq_basis_rotation", ["orientation"]], ["del", "theorem", "angle_eq_abs_oangle_to_real", ["orthonormal"]], ["del", "def", "conj_lie", ["orthonormal"]], ["del", "theorem", "conj_lie_symm", ["orthonormal"]], ["del", "theorem", "continuous_at_oangle", ["orthonormal"]], ["del", "theorem", "cos_oangle_eq_cos_angle", ["orthonormal"]], ["del", "theorem", "cos_oangle_eq_inner_div_norm_mul_norm", ["orthonormal"]], ["del", "theorem", "det_conj_lie", ["orthonormal"]], ["del", "theorem", "det_rotation", ["orthonormal"]], ["del", "theorem", "eq_iff_norm_eq_and_oangle_eq_zero", ["orthonormal"]], ["del", "theorem", "eq_iff_norm_eq_of_oangle_eq_zero", ["orthonormal"]], ["del", "theorem", "eq_iff_oangle_eq_zero_of_norm_eq", ["orthonormal"]], ["del", "theorem", "eq_rotation_self_iff", ["orthonormal"]], ["del", "theorem", "eq_rotation_self_iff_angle_eq_zero", ["orthonormal"]], ["del", "theorem", "eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero", ["orthonormal"]], ["del", "theorem", "exists_linear_isometry_equiv_eq", ["orthonormal"]], ["del", "theorem", "exists_linear_isometry_equiv_eq_of_det_neg", ["orthonormal"]], ["del", "theorem", "exists_linear_isometry_equiv_eq_of_det_pos", ["orthonormal"]], ["del", "theorem", "exists_linear_isometry_equiv_map_eq_of_orientation_eq", ["orthonormal"]], ["del", "theorem", "exists_linear_isometry_equiv_map_eq_of_orientation_eq_neg", ["orthonormal"]], ["del", "theorem", "inner_eq_norm_mul_norm_mul_cos_oangle", ["orthonormal"]], ["del", "theorem", "linear_equiv_det_conj_lie", ["orthonormal"]], ["del", "theorem", "linear_equiv_det_rotation", ["orthonormal"]], ["del", "def", "oangle", ["orthonormal"]], ["del", "theorem", "oangle_add", ["orthonormal"]], ["del", "theorem", "oangle_add_cyc3", ["orthonormal"]], ["del", "theorem", "oangle_add_cyc3_neg_left", ["orthonormal"]], ["del", "theorem", "oangle_add_cyc3_neg_right", ["orthonormal"]], ["del", "theorem", "oangle_add_oangle_rev", ["orthonormal"]], ["del", "theorem", "oangle_add_oangle_rev_neg_left", ["orthonormal"]], ["del", "theorem", "oangle_add_oangle_rev_neg_right", ["orthonormal"]], ["del", "theorem", "oangle_add_swap", ["orthonormal"]], ["del", "theorem", "oangle_conj_lie", ["orthonormal"]], ["del", "theorem", "oangle_eq_angle_or_eq_neg_angle", ["orthonormal"]], ["del", "theorem", "oangle_eq_iff_angle_eq_of_sign_eq", ["orthonormal"]], ["del", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_of_ne_zero", ["orthonormal"]], ["del", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_or_eq_zero", ["orthonormal"]], ["del", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_of_ne_zero", ["orthonormal"]], ["del", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_or_eq_zero", ["orthonormal"]], ["del", "theorem", "oangle_eq_neg_of_orientation_eq_neg", ["orthonormal"]], ["del", "theorem", "oangle_eq_of_angle_eq_of_sign_eq", ["orthonormal"]], ["del", "theorem", "oangle_eq_of_orientation_eq", ["orthonormal"]], ["del", "theorem", "oangle_eq_pi_iff_angle_eq_pi", ["orthonormal"]], ["del", "theorem", "oangle_eq_pi_iff_oangle_rev_eq_pi", ["orthonormal"]], ["del", "theorem", "oangle_eq_pi_iff_same_ray_neg", ["orthonormal"]], ["del", "theorem", "oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal"]], ["del", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal"]], ["del", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq_real", ["orthonormal"]], ["del", "theorem", "oangle_eq_zero_iff_angle_eq_zero", ["orthonormal"]], ["del", "theorem", "oangle_eq_zero_iff_oangle_rev_eq_zero", ["orthonormal"]], ["del", "theorem", "oangle_eq_zero_iff_same_ray", ["orthonormal"]], ["del", "theorem", "oangle_eq_zero_or_eq_pi_iff_not_linear_independent", ["orthonormal"]], ["del", "theorem", "oangle_eq_zero_or_eq_pi_iff_right_eq_smul", ["orthonormal"]], ["del", "theorem", "oangle_map", ["orthonormal"]], ["del", "theorem", "oangle_ne_zero_and_ne_pi_iff_linear_independent", ["orthonormal"]], ["del", "theorem", "oangle_neg_left", ["orthonormal"]], ["del", "theorem", "oangle_neg_left_eq_neg_right", ["orthonormal"]], ["del", "theorem", "oangle_neg_neg", ["orthonormal"]], ["del", "theorem", "oangle_neg_right", ["orthonormal"]], ["del", "theorem", "oangle_neg_self_left", ["orthonormal"]], ["del", "theorem", "oangle_neg_self_right", ["orthonormal"]], ["del", "theorem", "oangle_rev", ["orthonormal"]], ["del", "theorem", "oangle_rotation", ["orthonormal"]], ["del", "theorem", "oangle_rotation_left", ["orthonormal"]], ["del", "theorem", "oangle_rotation_oangle_left", ["orthonormal"]], ["del", "theorem", "oangle_rotation_oangle_right", ["orthonormal"]], ["del", "theorem", "oangle_rotation_right", ["orthonormal"]], ["del", "theorem", "oangle_rotation_self_left", ["orthonormal"]], ["del", "theorem", "oangle_rotation_self_right", ["orthonormal"]], ["del", "theorem", "oangle_self", ["orthonormal"]], ["del", "theorem", "oangle_sign_add_smul_left", ["orthonormal"]], ["del", "theorem", "oangle_sign_neg_left", ["orthonormal"]], ["del", "theorem", "oangle_sign_neg_right", ["orthonormal"]], ["del", "theorem", "oangle_sign_smul_add_right", ["orthonormal"]], ["del", "theorem", "oangle_sign_smul_add_smul_left", ["orthonormal"]], ["del", "theorem", "oangle_sign_smul_add_smul_right", ["orthonormal"]], ["del", "theorem", "oangle_sign_smul_add_smul_smul_add_smul", ["orthonormal"]], ["del", "theorem", "oangle_sign_smul_left", ["orthonormal"]], ["del", "theorem", "oangle_sign_smul_right", ["orthonormal"]], ["del", "theorem", "oangle_sign_sub_smul_left", ["orthonormal"]], ["del", "theorem", "oangle_sign_sub_smul_right", ["orthonormal"]], ["del", "theorem", "oangle_smul_add_right_eq_zero_or_eq_pi_iff", ["orthonormal"]], ["del", "theorem", "oangle_smul_left_of_neg", ["orthonormal"]], ["del", "theorem", "oangle_smul_left_of_pos", ["orthonormal"]], ["del", "theorem", "oangle_smul_left_self_of_nonneg", ["orthonormal"]], ["del", "theorem", "oangle_smul_right_of_neg", ["orthonormal"]], ["del", "theorem", "oangle_smul_right_of_pos", ["orthonormal"]], ["del", "theorem", "oangle_smul_right_self_of_nonneg", ["orthonormal"]], ["del", "theorem", "oangle_smul_smul_self_of_nonneg", ["orthonormal"]], ["del", "theorem", "oangle_sub_eq_oangle_sub_rev_of_norm_eq", ["orthonormal"]], ["del", "theorem", "oangle_sub_left", ["orthonormal"]], ["del", "theorem", "oangle_sub_right", ["orthonormal"]], ["del", "theorem", "oangle_zero_left", ["orthonormal"]], ["del", "theorem", "oangle_zero_right", ["orthonormal"]], ["del", "def", "rotation", ["orthonormal"]], ["del", "theorem", "rotation_eq_of_orientation_eq", ["orthonormal"]], ["del", "theorem", "rotation_eq_rotation_neg_of_orientation_eq_neg", ["orthonormal"]], ["del", "theorem", "rotation_eq_self_iff", ["orthonormal"]], ["del", "theorem", "rotation_eq_self_iff_angle_eq_zero", ["orthonormal"]], ["del", "theorem", "rotation_oangle_eq_iff_norm_eq", ["orthonormal"]], ["del", "theorem", "rotation_pi", ["orthonormal"]], ["del", "theorem", "rotation_symm", ["orthonormal"]], ["del", "theorem", "rotation_trans", ["orthonormal"]], ["del", "theorem", "rotation_zero", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_neg_left", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_neg_right", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_neg_self_left", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_neg_self_right", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_smul_left_of_ne_zero", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_smul_left_self", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_smul_right_of_ne_zero", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_smul_right_self", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_smul_smul_self", ["orthonormal"]], ["del", "theorem", "two_zsmul_oangle_sub_eq_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal"]], ["add", "theorem", "angle_eq_abs_oangle_to_real", ["orthonormal_basis"]], ["add", "def", "conj_lie", ["orthonormal_basis"]], ["add", "theorem", "conj_lie_symm", ["orthonormal_basis"]], ["add", "theorem", "continuous_at_oangle", ["orthonormal_basis"]], ["add", "theorem", "cos_oangle_eq_cos_angle", ["orthonormal_basis"]], ["add", "theorem", "cos_oangle_eq_inner_div_norm_mul_norm", ["orthonormal_basis"]], ["add", "theorem", "det_conj_lie", ["orthonormal_basis"]], ["add", "theorem", "det_rotation", ["orthonormal_basis"]], ["add", "theorem", "eq_iff_norm_eq_and_oangle_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "eq_iff_norm_eq_of_oangle_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "eq_iff_oangle_eq_zero_of_norm_eq", ["orthonormal_basis"]], ["add", "theorem", "eq_rotation_self_iff", ["orthonormal_basis"]], ["add", "theorem", "eq_rotation_self_iff_angle_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "exists_linear_isometry_equiv_eq", ["orthonormal_basis"]], ["add", "theorem", "exists_linear_isometry_equiv_eq_of_det_neg", ["orthonormal_basis"]], ["add", "theorem", "exists_linear_isometry_equiv_eq_of_det_pos", ["orthonormal_basis"]], ["add", "theorem", "exists_linear_isometry_equiv_map_eq_of_orientation_eq", ["orthonormal_basis"]], ["add", "theorem", "exists_linear_isometry_equiv_map_eq_of_orientation_eq_neg", ["orthonormal_basis"]], ["add", "theorem", "inner_eq_norm_mul_norm_mul_cos_oangle", ["orthonormal_basis"]], ["add", "theorem", "linear_equiv_det_conj_lie", ["orthonormal_basis"]], ["add", "theorem", "linear_equiv_det_rotation", ["orthonormal_basis"]], ["add", "def", "oangle", ["orthonormal_basis"]], ["add", "theorem", "oangle_add", ["orthonormal_basis"]], ["add", "theorem", "oangle_add_cyc3", ["orthonormal_basis"]], ["add", "theorem", "oangle_add_cyc3_neg_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_add_cyc3_neg_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_add_oangle_rev", ["orthonormal_basis"]], ["add", "theorem", "oangle_add_oangle_rev_neg_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_add_oangle_rev_neg_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_add_swap", ["orthonormal_basis"]], ["add", "theorem", "oangle_conj_lie", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_angle_or_eq_neg_angle", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_iff_angle_eq_of_sign_eq", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_of_ne_zero", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_or_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_of_ne_zero", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_or_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_neg_of_orientation_eq_neg", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_of_angle_eq_of_sign_eq", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_of_orientation_eq", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_pi_iff_angle_eq_pi", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_pi_iff_oangle_rev_eq_pi", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_pi_iff_same_ray_neg", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq_real", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_zero_iff_angle_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_zero_iff_oangle_rev_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_zero_iff_same_ray", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_zero_or_eq_pi_iff_not_linear_independent", ["orthonormal_basis"]], ["add", "theorem", "oangle_eq_zero_or_eq_pi_iff_right_eq_smul", ["orthonormal_basis"]], ["add", "theorem", "oangle_map", ["orthonormal_basis"]], ["add", "theorem", "oangle_ne_zero_and_ne_pi_iff_linear_independent", ["orthonormal_basis"]], ["add", "theorem", "oangle_neg_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_neg_left_eq_neg_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_neg_neg", ["orthonormal_basis"]], ["add", "theorem", "oangle_neg_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_neg_self_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_neg_self_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_rev", ["orthonormal_basis"]], ["add", "theorem", "oangle_rotation", ["orthonormal_basis"]], ["add", "theorem", "oangle_rotation_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_rotation_oangle_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_rotation_oangle_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_rotation_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_rotation_self_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_rotation_self_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_self", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_add_smul_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_neg_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_neg_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_smul_add_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_smul_add_smul_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_smul_add_smul_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_smul_add_smul_smul_add_smul", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_smul_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_smul_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_sub_smul_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_sign_sub_smul_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_add_right_eq_zero_or_eq_pi_iff", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_left_of_neg", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_left_of_pos", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_left_self_of_nonneg", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_right_of_neg", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_right_of_pos", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_right_self_of_nonneg", ["orthonormal_basis"]], ["add", "theorem", "oangle_smul_smul_self_of_nonneg", ["orthonormal_basis"]], ["add", "theorem", "oangle_sub_eq_oangle_sub_rev_of_norm_eq", ["orthonormal_basis"]], ["add", "theorem", "oangle_sub_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_sub_right", ["orthonormal_basis"]], ["add", "theorem", "oangle_zero_left", ["orthonormal_basis"]], ["add", "theorem", "oangle_zero_right", ["orthonormal_basis"]], ["add", "def", "rotation", ["orthonormal_basis"]], ["add", "theorem", "rotation_eq_of_orientation_eq", ["orthonormal_basis"]], ["add", "theorem", "rotation_eq_rotation_neg_of_orientation_eq_neg", ["orthonormal_basis"]], ["add", "theorem", "rotation_eq_self_iff", ["orthonormal_basis"]], ["add", "theorem", "rotation_eq_self_iff_angle_eq_zero", ["orthonormal_basis"]], ["add", "theorem", "rotation_oangle_eq_iff_norm_eq", ["orthonormal_basis"]], ["add", "theorem", "rotation_pi", ["orthonormal_basis"]], ["add", "theorem", "rotation_symm", ["orthonormal_basis"]], ["add", "theorem", "rotation_trans", ["orthonormal_basis"]], ["add", "theorem", "rotation_zero", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_neg_left", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_neg_right", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_neg_self_left", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_neg_self_right", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_smul_left_of_ne_zero", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_smul_left_self", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_smul_right_of_ne_zero", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_smul_right_self", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_smul_smul_self", ["orthonormal_basis"]], ["add", "theorem", "two_zsmul_oangle_sub_eq_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal_basis"]]]}]}, {"timestamp": 1664562275, "sha": "73afba48", "message": "refactor(analysis/normed/group/basic): Replace `normed_add_comm_group.core` with group norms (#16238)\nDelete `seminormed_add_comm_group.core`/`normed_add_comm_group.core` in favor of `add_group_norm`/`group_norm`. The former are unbundled prop versions of the latter, specialized to `∥ ∥`.", "changes": [{"oldPath": "src/algebra/order/hom/basic.lean", "newPath": "src/algebra/order/hom/basic.lean", "changes": [["add", "theorem", "le_map_div_mul_map_div", []], ["add", "theorem", "le_map_mul_map_div", []]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "def", "to_normed_add_comm_group", ["add_group_norm"]], ["add", "def", "to_seminormed_add_comm_group", ["add_group_seminorm"]], ["del", "theorem", "core", ["normed_add_comm_group", "core", "to_seminormed_add_comm_group"]], ["del", "structure", "core", ["normed_add_comm_group"]], ["del", "def", "of_core", ["normed_add_comm_group"]], ["del", "structure", "core", ["seminormed_add_comm_group"]], ["del", "def", "of_core", ["seminormed_add_comm_group"]]]}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/continuous_affine_map.lean", "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["mod", "theorem", "norm_eq_zero_iff", ["lp"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "op_norm_zero", ["continuous_multilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}]}, {"timestamp": 1664562274, "sha": "98c61b1e", "message": "feat(order/hom/heyting): Heyting homomorphisms (#15308)\nDefine the type of Heyting homomorphisms, maps between Heyting algebras that preserve Heyting implication.", "changes": [{"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": []}, {"oldPath": "src/data/fun_like/equiv.lean", "newPath": "src/data/fun_like/equiv.lean", "changes": [["add", "theorem", "apply_inv_apply", ["equiv_like"]], ["add", "theorem", "inv_apply_apply", ["equiv_like"]]]}, {"oldPath": "src/order/heyting/basic.lean", "newPath": "src/order/heyting/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/heyting/hom.lean", "changes": [["add", "theorem", "cancel_left", ["biheyting_hom"]], ["add", "theorem", "cancel_right", ["biheyting_hom"]], ["add", "theorem", "coe_comp", ["biheyting_hom"]], ["add", "theorem", "coe_id", ["biheyting_hom"]], ["add", "def", "comp", ["biheyting_hom"]], ["add", "theorem", "comp_apply", ["biheyting_hom"]], ["add", "theorem", "comp_assoc", ["biheyting_hom"]], ["add", "theorem", "comp_id", ["biheyting_hom"]], ["add", "theorem", "ext", ["biheyting_hom"]], ["add", "theorem", "id_apply", ["biheyting_hom"]], ["add", "theorem", "id_comp", ["biheyting_hom"]], ["add", "theorem", "to_fun_eq_coe", ["biheyting_hom"]], ["add", "structure", "biheyting_hom", []], ["add", "def", "to_biheyting_hom_class", ["bounded_lattice_hom_class"]], ["add", "theorem", "cancel_left", ["coheyting_hom"]], ["add", "theorem", "cancel_right", ["coheyting_hom"]], ["add", "theorem", "coe_comp", ["coheyting_hom"]], ["add", "theorem", "coe_id", ["coheyting_hom"]], ["add", "def", "comp", ["coheyting_hom"]], ["add", "theorem", "comp_apply", ["coheyting_hom"]], ["add", "theorem", "comp_assoc", ["coheyting_hom"]], ["add", "theorem", "comp_id", ["coheyting_hom"]], ["add", "theorem", "ext", ["coheyting_hom"]], ["add", "theorem", "id_apply", ["coheyting_hom"]], ["add", "theorem", "id_comp", ["coheyting_hom"]], ["add", "theorem", "to_fun_eq_coe", ["coheyting_hom"]], ["add", "structure", "coheyting_hom", []], ["add", "theorem", "cancel_left", ["heyting_hom"]], ["add", "theorem", "cancel_right", ["heyting_hom"]], ["add", "theorem", "coe_comp", ["heyting_hom"]], ["add", "theorem", "coe_id", ["heyting_hom"]], ["add", "def", "comp", ["heyting_hom"]], ["add", "theorem", "comp_apply", ["heyting_hom"]], ["add", "theorem", "comp_assoc", ["heyting_hom"]], ["add", "theorem", "comp_id", ["heyting_hom"]], ["add", "theorem", "ext", ["heyting_hom"]], ["add", "theorem", "id_apply", ["heyting_hom"]], ["add", "theorem", "id_comp", ["heyting_hom"]], ["add", "theorem", "to_fun_eq_coe", ["heyting_hom"]], ["add", "structure", "heyting_hom", []], ["add", "theorem", "map_bihimp", []], ["add", "theorem", "map_compl", []], ["add", "theorem", "map_hnot", []], ["add", "theorem", "map_symm_diff", []]]}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["add", "theorem", "map_compl'", []], ["del", "theorem", "map_compl", []], ["add", "theorem", "map_sdiff'", []], ["del", "theorem", "map_sdiff", []], ["add", "theorem", "map_symm_diff'", []], ["del", "theorem", "map_symm_diff", []]]}]}, {"timestamp": 1664562272, "sha": "6e5e3f68", "message": "feat(analysis/locally_convex): the topology of a locally convex space is generated by seminorms (#15035)\nThis PR provides the proof that every locally convex space has a family of seminorms that induces the topology.\nThis PR also adds a new simp-lemma `is_R_or_C.real_norm`, which calculates the norm of a real number `r` coerced into a `is_R_or_C` type as the norm of `r`. This made it necessary to change some proofs in a few places.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "theorem", "norm_real", ["complex"]]]}, {"oldPath": null, "newPath": "src/analysis/locally_convex/abs_convex.lean", "changes": [["add", "theorem", "coe_balanced", ["abs_convex_open_sets"]], ["add", "theorem", "coe_convex", ["abs_convex_open_sets"]], ["add", "theorem", "coe_is_open", ["abs_convex_open_sets"]], ["add", "theorem", "coe_nhds", ["abs_convex_open_sets"]], ["add", "theorem", "coe_zero_mem", ["abs_convex_open_sets"]], ["add", "def", "abs_convex_open_sets", []], ["add", "def", "gauge_seminorm_family", []], ["add", "theorem", "gauge_seminorm_family_ball", []], ["add", "theorem", "nhds_basis_abs_convex", []], ["add", "theorem", "nhds_basis_abs_convex_open", []], ["add", "theorem", "with_gauge_seminorm_family", []]]}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["add", "theorem", "balanced_convex_hull_of_balanced", []]]}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": [["mod", "theorem", "norm_coe_norm", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "norm_real", ["is_R_or_C"]], ["del", "theorem", "norm_sq_of_real", ["is_R_or_C"]]]}, {"oldPath": "src/topology/algebra/module/locally_convex.lean", "newPath": "src/topology/algebra/module/locally_convex.lean", "changes": []}]}, {"timestamp": 1664543426, "sha": "be05d53c", "message": "feat(algebra/free_monoid): add 2 lemmas (#16712)", "changes": [{"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["add", "theorem", "of_mul_eq_cons", ["free_monoid"]], ["add", "theorem", "prod_eq_join", ["free_monoid"]]]}]}, {"timestamp": 1664543424, "sha": "cc967daa", "message": "feat(algebra/hom/group): `simp` lemmas for applying generic morphism coercions (#16700)\nThere are a bunch of random specific versions of these lemmas floating around, which can be made generic to apply to all `one_hom_class`/`mul_hom_class`/`monoid_hom_class` instances. Compare existing `ring_hom.coe_coe`.", "changes": [{"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["add", "theorem", "coe_coe", ["monoid_hom"]], ["add", "theorem", "coe_coe", ["monoid_with_zero_hom"]], ["add", "theorem", "coe_coe", ["mul_hom"]], ["add", "theorem", "coe_coe", ["one_hom"]]]}]}, {"timestamp": 1664543421, "sha": "64ad902d", "message": "refactor(algebra/order/{smul,module}): Turn lemmas around (#16696)\nMatch the `mul` lemmas by having the `⁻¹` on the LHS in `inv_smul_le_iff`, `inv_smul_lt_iff`, etc... Also generalize for free to `ordered_add_comm_monoid`.", "changes": [{"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": [["add", "theorem", "inv_smul_le_iff_of_neg", []], ["add", "theorem", "inv_smul_lt_iff_of_neg", []], ["del", "theorem", "lt_smul_iff_of_neg", []], ["add", "theorem", "smul_inv_le_iff_of_neg", []], ["add", "theorem", "smul_inv_lt_iff_of_neg", []], ["del", "theorem", "smul_lt_iff_of_neg", []]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["add", "theorem", "inv_smul_le_iff", []], ["add", "theorem", "inv_smul_lt_iff", []], ["add", "theorem", "le_inv_smul_iff", []], ["del", "theorem", "le_smul_iff_of_pos", []], ["add", "theorem", "lt_inv_smul_iff", []], ["del", "theorem", "lt_smul_iff_of_pos", []], ["del", "theorem", "smul_le_iff_of_pos", []], ["del", "theorem", "smul_lt_iff_of_pos", []]]}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}]}, {"timestamp": 1664543420, "sha": "a52be2a5", "message": "feat(category_theory/localization): whiskering_left_equivalence and definition of the predicate (#16646)\nIn this PR, an equivalence `localization.construction.whiskering_left_equivalence W D : (W.localization ⥤ D) ≌ W.functors_inverting D` is obtained and the predicate `L.is_localization W` is defined for a functor `L : C ⥤ D`.", "changes": [{"oldPath": "src/category_theory/localization/construction.lean", "newPath": "src/category_theory/localization/construction.lean", "changes": [["add", "theorem", "nat_trans_hcomp_injective", ["category_theory", "localization", "construction"]], ["add", "def", "counit_iso", ["category_theory", "localization", "construction", "whiskering_left_equivalence"]], ["add", "def", "functor", ["category_theory", "localization", "construction", "whiskering_left_equivalence"]], ["add", "def", "inverse", ["category_theory", "localization", "construction", "whiskering_left_equivalence"]], ["add", "def", "unit_iso", ["category_theory", "localization", "construction", "whiskering_left_equivalence"]], ["add", "def", "whiskering_left_equivalence", ["category_theory", "localization", "construction"]], ["add", "theorem", "Q_inverts", ["category_theory", "morphism_property"]]]}, {"oldPath": null, "newPath": "src/category_theory/localization/predicate.lean", "changes": []}, {"oldPath": "src/category_theory/morphism_property.lean", "newPath": "src/category_theory/morphism_property.lean", "changes": [["add", "def", "mk", ["category_theory", "morphism_property", "functors_inverting"]], ["add", "def", "functors_inverting", ["category_theory", "morphism_property"]], ["add", "theorem", "of_comp", ["category_theory", "morphism_property", "is_inverted_by"]]]}]}, {"timestamp": 1664543419, "sha": "c804ede6", "message": "feat(category_theory/groupoid): simplify groupoid.inv to category_theory.inv (#16624)\nAdd simp lemma `groupoid.inv_eq_inv` to simplify `groupoid.inv` to `category_theory.inv` (which uses the `is_iso` instance) to gain access to the developed API around `category_theory.inv`. This isn't a defeq though so I can imagine sometimes we may want to `simp [-groupoid.inv_eq_inv]`, but most of the times this simp lemma makes things smoother.", "changes": [{"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["add", "theorem", "inv_eq_inv", ["category_theory", "groupoid"]], ["add", "def", "inv_equiv", ["category_theory", "groupoid"]]]}]}, {"timestamp": 1664543418, "sha": "3df3c617", "message": "feat(linear_algebra/quadratic_form/basic): algebraic lemmas about `bilin_form.to_quadratic_form` (#16616)\nFollowing the usual pattern, we defined the bundle additive morphism so that we can copy across the salient lemmas about sums.\nThe `polar_to_quadratic_form` lemma in the diff was an existing lemma that has just been moved below the new `semiring` section.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["add", "theorem", "to_quadratic_form_add", ["bilin_form"]], ["add", "def", "to_quadratic_form_add_monoid_hom", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_list_sum", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_multiset_sum", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_neg", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_smul", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_sub", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_sum", ["bilin_form"]]]}]}, {"timestamp": 1664543416, "sha": "98ed2a20", "message": "move(algebra/order/ring_lemmas): Rename file (#16520)\nRename `algebra.order.monoid_lemmas_zero_lt` to `algebra.order.ring_lemmas` because `algebra.order.monoid_lemmas_zero_lt` is to `algebra.order.ring` what `algebra.order.monoid_lemmas` is to `algebra.order.monoid`.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/ring_lemmas.lean", "changes": []}]}, {"timestamp": 1664543415, "sha": "699c2cab", "message": "feat(analysis/convex/between): betweenness in affine spaces (#16191)\nDefine the notions of (weak and strict) betweenness for points in\naffine spaces over an ordered ring, for use in describing geometrical\nconfigurations.\nUntil convexity is refactored to support abstract affine combination\nspaces, this means having a definition `affine_segment` that\nduplicates `segment` in the affine space case (and is proved to equal\n`segment` when the affine space is a module considered as an affine\nspace over itself). However, the bulk of results concern betweenness,\nnot `affine_segment`, and so would be just as relevant after such a\nrefactor, even if some of the proofs would change, and indeed most of\nthe things stated about `affine_segment` involve `+ᵥ` and `-ᵥ` and so\nwould still be meaningful results, distinct from those already present\nfor `segment`, after such a refactor (at which point they might apply\nfor whatever typeclass describes an `add_torsor` for a module that is\nalso an abstract affine combination space where the two affine\ncombination structures agree). So I think the actual duplication here\nis minimal and defining `affine_segment` is a reasonable approach to\nallow betweenness to be handled in affine spaces now rather than\nmaking it depend on a possible future refactor.\nThere are certainly more things that could sensibly be stated about\nbetweenness (e.g. various forms of Pasch's axiom), but I think this is\na reasonable starting point.\nOne thing I definitely intend to add in a followup is notions of two\npoints being (weakly or strictly) on the same side or opposite sides\nof an affine subspace (e.g. a line); I think it will probably be most\nconvenient to define those notions in terms of `same_ray` and then\nprove appropriate results about how they relate to betweenness for\npoints.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/between.lean", "changes": [["add", "theorem", "sbtw_map_iff", ["affine_equiv"]], ["add", "theorem", "wbtw_map_iff", ["affine_equiv"]], ["add", "def", "affine_segment", []], ["add", "theorem", "affine_segment_comm", []], ["add", "theorem", "affine_segment_const_vadd_image", []], ["add", "theorem", "affine_segment_const_vsub_image", []], ["add", "theorem", "affine_segment_eq_segment", []], ["add", "theorem", "affine_segment_image", []], ["add", "theorem", "affine_segment_vadd_const_image", []], ["add", "theorem", "affine_segment_vsub_const_image", []], ["add", "theorem", "wbtw_or_wbtw_or_wbtw", ["collinear"]], ["add", "theorem", "sbtw_map_iff", ["function", "injective"]], ["add", "theorem", "wbtw_map_iff", ["function", "injective"]], ["add", "theorem", "left_mem_affine_segment", []], ["add", "theorem", "mem_const_vadd_affine_segment", []], ["add", "theorem", "mem_const_vsub_affine_segment", []], ["add", "theorem", "mem_vadd_const_affine_segment", []], ["add", "theorem", "mem_vsub_const_affine_segment", []], ["add", "theorem", "not_sbtw_self", []], ["add", "theorem", "not_sbtw_self_left", []], ["add", "theorem", "not_sbtw_self_right", []], ["add", "theorem", "right_mem_affine_segment", []], ["add", "theorem", "left_ne", ["sbtw"]], ["add", "theorem", "left_ne_right", ["sbtw"]], ["add", "theorem", "mem_image_Ioo", ["sbtw"]], ["add", "theorem", "ne_left", ["sbtw"]], ["add", "theorem", "ne_right", ["sbtw"]], ["add", "theorem", "not_rotate", ["sbtw"]], ["add", "theorem", "not_swap_left", ["sbtw"]], ["add", "theorem", "not_swap_right", ["sbtw"]], ["add", "theorem", "right_ne", ["sbtw"]], ["add", "theorem", "trans_left", ["sbtw"]], ["add", "theorem", "trans_left_right", ["sbtw"]], ["add", "theorem", "trans_right", ["sbtw"]], ["add", "theorem", "trans_right_left", ["sbtw"]], ["add", "theorem", "wbtw", ["sbtw"]], ["add", "def", "sbtw", []], ["add", "theorem", "sbtw_comm", []], ["add", "theorem", "sbtw_const_vadd_iff", []], ["add", "theorem", "sbtw_const_vsub_iff", []], ["add", "theorem", "sbtw_iff_mem_image_Ioo_and_ne", []], ["add", "theorem", "sbtw_vadd_const_iff", []], ["add", "theorem", "sbtw_vsub_const_iff", []], ["add", "theorem", "collinear", ["wbtw"]], ["add", "theorem", "map", ["wbtw"]], ["add", "theorem", "rotate_iff", ["wbtw"]], ["add", "theorem", "swap_left_iff", ["wbtw"]], ["add", "theorem", "swap_right_iff", ["wbtw"]], ["add", "theorem", "trans_left", ["wbtw"]], ["add", "theorem", "trans_left_right", ["wbtw"]], ["add", "theorem", "trans_right", ["wbtw"]], ["add", "theorem", "trans_right_left", ["wbtw"]], ["add", "theorem", "trans_sbtw_left", ["wbtw"]], ["add", "theorem", "trans_sbtw_right", ["wbtw"]], ["add", "def", "wbtw", []], ["add", "theorem", "wbtw_comm", []], ["add", "theorem", "wbtw_const_vadd_iff", []], ["add", "theorem", "wbtw_const_vsub_iff", []], ["add", "theorem", "wbtw_or_wbtw_smul_vadd_of_nonneg", []], ["add", "theorem", "wbtw_or_wbtw_smul_vadd_of_nonpos", []], ["add", "theorem", "wbtw_rotate_iff", []], ["add", "theorem", "wbtw_self_iff", []], ["add", "theorem", "wbtw_self_left", []], ["add", "theorem", "wbtw_self_right", []], ["add", "theorem", "wbtw_smul_vadd_smul_vadd_of_nonneg_of_le", []], ["add", "theorem", "wbtw_smul_vadd_smul_vadd_of_nonneg_of_nonpos", []], ["add", "theorem", "wbtw_smul_vadd_smul_vadd_of_nonpos_of_le", []], ["add", "theorem", "wbtw_smul_vadd_smul_vadd_of_nonpos_of_nonneg", []], ["add", "theorem", "wbtw_swap_left_iff", []], ["add", "theorem", "wbtw_swap_right_iff", []], ["add", "theorem", "wbtw_vadd_const_iff", []], ["add", "theorem", "wbtw_vsub_const_iff", []]]}]}, {"timestamp": 1664524963, "sha": "b2a65720", "message": "feat(topology/instances/nnreal): generalize `has_continuous_smul` instance (#16713)\nThis generalizes the `has_continuous_smul ℝ≥0 ℝ` instance to `has_continuous_smul ℝ≥0 α` whenever there is a `mul_action ℝ α` with `has_continuous_smul R α` (the `mul_action` is the minimal assumption to get an induced action of `ℝ≥0` on `α` in mathlib).", "changes": [{"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1664524962, "sha": "af90fef9", "message": "feat(data/fin): golf, add lemmas (#16711)\n* add `fin.range_succ`, `fin.exists_succ_eq_iff`, and\n `fin.range_fin_succ`;\n* golf `fin.eq_succ_of_ne_zero` and `fin.range_cons`.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "exists_succ_eq_iff", ["fin"]], ["add", "theorem", "range_succ", ["fin"]]]}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["mod", "theorem", "range_cons", ["fin"]], ["add", "theorem", "range_fin_succ", ["fin"]]]}]}, {"timestamp": 1664524961, "sha": "d610cec7", "message": "feat(group_theory/quotient_group): `simp` lemmas for `quotient_group.map` (#16703)\nLittle lemmas that I needed to work with the class group of a ring of integers.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "map_comp_map", ["quotient_group"]], ["add", "theorem", "map_id", ["quotient_group"]], ["add", "theorem", "map_id_apply", ["quotient_group"]], ["add", "theorem", "map_map", ["quotient_group"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "comap_id", ["subgroup"]]]}]}, {"timestamp": 1664524960, "sha": "001ba509", "message": "feat(ring_theory/fractional_ideal): `simp` lemmas for `fractional_ideal.canonical_equiv` (#16702)\nSome lemmas I needed for working with the class group of a ring of integers.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "canonical_equiv_canonical_equiv", ["fractional_ideal"]], ["add", "theorem", "canonical_equiv_coe_ideal", ["fractional_ideal"]], ["mod", "theorem", "canonical_equiv_flip", ["fractional_ideal"]], ["add", "theorem", "canonical_equiv_self", ["fractional_ideal"]], ["add", "theorem", "canonical_equiv_trans_canonical_equiv", ["fractional_ideal"]]]}]}, {"timestamp": 1664524959, "sha": "acd02bbd", "message": "feat(algebra/hom/equiv): two little `simp` lemmas for `units.map_equiv` (#16701)\nTwo lemmas I needed for working with the class group of rings.", "changes": [{"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["add", "theorem", "coe_map_equiv", ["units"]], ["add", "theorem", "map_equiv_symm", ["units"]]]}]}, {"timestamp": 1664524958, "sha": "3a0be826", "message": "feat(topology/sheaves): presheaf on indiscrete space is sheaf iff value at empty is terminal (#16694)\n+ Show that the indiscrete topology (⊤ : topological_space α), defined to be the topology generated by nothing, consists of exactly the empty set and the whole space.\n+ Show that a presheaf on an indiscrete space (in particular the one point space) is a sheaf if its value at the empty set is a terminal object.\n+ Generalize universe level in the converse `is_terminal_of_empty` (which holds for any space).", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "is_open_top_iff", ["topological_space"]]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": [["add", "theorem", "eq_bot_or_top", ["topological_space", "opens"]]]}, {"oldPath": null, "newPath": "src/topology/sheaves/punit.lean", "changes": [["add", "theorem", "is_sheaf_iff_is_terminal_of_indiscrete", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_of_is_terminal_of_indiscrete", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_on_punit_iff_is_terminal", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_on_punit_of_is_terminal", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1664517687, "sha": "9b1e9204", "message": "feat(topology/continuous_function/{basic, compact}): add a few missing lemmas (#16714)", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "coe_coe", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "nnnorm_lt_iff", ["continuous_map"]], ["add", "theorem", "nnnorm_lt_iff_of_nonempty", ["continuous_map"]]]}]}, {"timestamp": 1664517686, "sha": "667f2a62", "message": "feat(analysis/normed_space/basic): add `norm_algebra_map_nnreal` (#16709)\nThis adds `simp` lemmas saying that `∥algebra_map ℝ≥0 𝕜 x∥ = x` and similarly for `∥⬝∥₊` whenever `𝕜` is a normed `ℝ`-algebra and satisfies `norm_one_class`. These are needed separately from `norm_algebra_map'` and `nnnorm_algebra_map'` because `𝕜` cannot be a normed `ℝ≥0`-algebra for the simple reason that `ℝ≥0` is not a normed field.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_algebra_map_nnreal", []], ["add", "theorem", "norm_algebra_map_nnreal", []]]}]}, {"timestamp": 1664507245, "sha": "07e46bcf", "message": "feat(data/fin): iff on add or sub across last-0 break (#15916)", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "add_one_le_iff", ["fin"]], ["add", "theorem", "add_one_lt_iff", ["fin"]], ["add", "theorem", "last_le_iff", ["fin"]], ["add", "theorem", "le_sub_one_iff", ["fin"]], ["add", "theorem", "le_zero_iff", ["fin"]], ["add", "theorem", "lt_add_one_iff", ["fin"]], ["add", "theorem", "lt_sub_one_iff", ["fin"]], ["add", "theorem", "sub_one_lt_iff", ["fin"]]]}]}, {"timestamp": 1664496067, "sha": "4ed50443", "message": "feat(tactic/positivity): Extension for `finset.card` (#16637)\nA best effort `positivity` extension for `finset.card`. This looks for an assumption of the form `s.nonempty` in context to prove `0 < s.card`.", "changes": [{"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1664496066, "sha": "6fc2df65", "message": "feat(order/filter/{prod,pi}): add `filter.prod_le_prod`, `filter.pi_le_pi` etc (#16468)", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "subset_eval_image_pi", ["set"]]]}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": [["add", "theorem", "map_eval_pi", ["filter"]], ["add", "theorem", "pi_inj", ["filter"]], ["add", "theorem", "pi_le_pi", ["filter"]]]}, {"oldPath": "src/order/filter/prod.lean", "newPath": "src/order/filter/prod.lean", "changes": [["add", "theorem", "map_fst_prod", ["filter"]], ["add", "theorem", "map_snd_prod", ["filter"]], ["add", "theorem", "prod_inj", ["filter"]], ["add", "theorem", "prod_le_prod", ["filter"]]]}, {"oldPath": "src/topology/inseparable.lean", "newPath": "src/topology/inseparable.lean", "changes": [["add", "theorem", "prod", ["inseparable"]], ["add", "theorem", "inseparable_pi", []], ["add", "theorem", "inseparable_prod", []], ["add", "theorem", "prod", ["specializes"]], ["add", "theorem", "specializes_pi", []], ["add", "theorem", "specializes_prod", []]]}]}, {"timestamp": 1664488457, "sha": "ed33fcf8", "message": "feat(order/filter/*): a family of pairwise disjoint filters has a family of pairwise disjoint members (#16504)", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "exists_mem_filter_basis", ["disjoint"]], ["add", "theorem", "exists_mem_filter_basis_of_disjoint", ["pairwise"]], ["add", "theorem", "exists_mem_filter_basis", ["set", "pairwise_disjoint"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "exists_mem_filter_of_disjoint", ["pairwise"]], ["add", "theorem", "exists_mem_filter", ["set", "pairwise_disjoint"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "pairwise_disjoint_nhds", []], ["add", "theorem", "t2_separation", ["set", "finite"]], ["del", "theorem", "t2_separation_finset", []]]}]}, {"timestamp": 1664480891, "sha": "71e28e0c", "message": "feat(topology/uniform_space/uniform_convergence_topology): bases for uniform structures of 𝔖-convergence (#14778)\nBy definition, the sets `S(V) := {(f, g) | ∀ x, (f x, g x) ∈ V}` for `V∈𝓤 β` form a basis for the uniformity of uniform convergence on `α → β`. We extend this result in the two following ways : \n- we show that it suffices to consider only the sets `V` in a basis of `𝓤 β` instead of all the entourages\n- we deduce a similar result for the uniformity of 𝔖-convergence for a directed 𝔖 : in that case, a basis is given by the sets `S'(A,V) := {(f, g) | ∀ x ∈ A, (f x, g x) ∈ V}` for `A ∈𝔖` and `V` in a basis of `𝓤 β`", "changes": [{"oldPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "newPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "changes": []}]}, {"timestamp": 1664469783, "sha": "c8760bde", "message": "refactor(algebra/ring/basic): replace `neg_zero'` by `neg_zero_class` instance (#16686)\nEliminate the separate `neg_zero'` lemma for the combination of `mul_zero_class` with `has_distrib_neg` by adding a `neg_zero_class` instance for that case.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "neg_zero'", []]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": []}, {"oldPath": "src/data/sign.lean", "newPath": "src/data/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/symplectic_group.lean", "newPath": "src/linear_algebra/symplectic_group.lean", "changes": []}, {"oldPath": "src/probability/moments.lean", "newPath": "src/probability/moments.lean", "changes": []}]}, {"timestamp": 1664469782, "sha": "d755c086", "message": "feat(data/set/intervals/monotone): extend a monotone function on a set to a globally monotone function (#16682)", "changes": [{"oldPath": "src/data/set/intervals/monotone.lean", "newPath": "src/data/set/intervals/monotone.lean", "changes": [["add", "theorem", "exists_antitone_extension", ["antitone_on"]], ["add", "theorem", "exists_monotone_extension", ["monotone_on"]]]}]}, {"timestamp": 1664462509, "sha": "42604284", "message": "refactor(*): `inv_one_class`, `neg_zero_class` instances replacing lemmas (#16699)\nReplace `inv_one` lemmas for `matrix`, `fractional_ideal`, `mv_power_series` and `power_series` with `inv_one_class` instances, and a `neg_zero` lemma for `pgame` with a `neg_zero_class` instance.", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["del", "theorem", "inv_one", ["matrix"]]]}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["del", "theorem", "inv_one", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["del", "theorem", "inv_one", ["mv_power_series"]], ["del", "theorem", "inv_one", ["power_series"]]]}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1664456081, "sha": "2e09d790", "message": "feat(topology/algebra/algebra): `algebra_clm` does not need a normed space or field (#16690)\nThis also clean up the variables in the `topology/algebra/algebra.lean` file, to ensure that the type variables come first (as this is a useful convention for when using `@` notation).", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "def", "algebra_map_clm", []], ["del", "theorem", "algebra_map_clm_coe", []], ["del", "theorem", "algebra_map_clm_to_linear_map", []]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": [["add", "def", "algebra_map_clm", []], ["add", "theorem", "algebra_map_clm_coe", []], ["add", "theorem", "algebra_map_clm_to_linear_map", []], ["mod", "theorem", "continuous_algebra_map", []], ["mod", "theorem", "continuous_algebra_map_iff_smul", []], ["mod", "theorem", "has_continuous_smul_of_algebra_map", []]]}]}, {"timestamp": 1664456080, "sha": "37cfab4b", "message": "feat(topology/path_connected): add five lemmas (#16501)\nadd five lemmas about `symm` and `trans` operations on paths", "changes": [{"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "path_eval", ["continuous"]], ["add", "theorem", "path_trans", ["continuous"]], ["add", "theorem", "continuous_eval", ["path"]], ["add", "theorem", "continuous_symm", ["path"]], ["add", "theorem", "continuous_trans", ["path"]], ["add", "theorem", "continuous_uncurry_iff", ["path"]]]}]}, {"timestamp": 1664448539, "sha": "a630444a", "message": "feat(analysis/analytic/isolated_zeros): the uniqueness theorem for analytic fns (#16489)", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "analytic_at_const", []], ["add", "theorem", "add", ["analytic_on"]], ["add", "theorem", "sub", ["analytic_on"]], ["add", "theorem", "analytic_on_const", []], ["add", "theorem", "const_formal_multilinear_series_radius", ["formal_multilinear_series"]], ["add", "theorem", "has_fpower_series_at_const", []], ["add", "theorem", "has_fpower_series_on_ball_const", []]]}, {"oldPath": "src/analysis/analytic/isolated_zeros.lean", "newPath": "src/analysis/analytic/isolated_zeros.lean", "changes": [["add", "theorem", "frequently_zero_iff_eventually_zero", ["analytic_at"]], ["add", "theorem", "eq_on_of_preconnected_of_frequently_eq'", ["analytic_on"]], ["add", "theorem", "eq_on_of_preconnected_of_frequently_eq", ["analytic_on"]], ["add", "theorem", "eq_on_of_preconnected_of_mem_closure'", ["analytic_on"]], ["add", "theorem", "eq_on_of_preconnected_of_mem_closure", ["analytic_on"]]]}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": [["add", "def", "const_formal_multilinear_series", []], ["add", "theorem", "const_formal_multilinear_series_apply", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "frequently_nhds_within_iff", []], ["add", "theorem", "mem_closure_ne_iff_frequently_within", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_open_set_of_eventually_nhds_within", []]]}]}, {"timestamp": 1664448538, "sha": "7944d185", "message": "feat(number_theory/multiplicity): lifting the exponent lemma (#8915)\n`multiplicity.int.pow_sub_pow` is the [lifting the exponent lemma](https://en.wikipedia.org/wiki/Lifting-the-exponent_lemma) for odd primes. Some variations are also proved.", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "geom_sum₂_comm", []]]}, {"oldPath": null, "newPath": "src/number_theory/multiplicity.lean", "changes": [["add", "theorem", "dvd_geom_sum₂_iff_of_dvd_sub'", []], ["add", "theorem", "dvd_geom_sum₂_iff_of_dvd_sub", []], ["add", "theorem", "dvd_geom_sum₂_self", []], ["add", "theorem", "sq_mod_four_eq_one_of_odd", ["int"]], ["add", "theorem", "two_pow_sub_pow'", ["int"]], ["add", "theorem", "two_pow_sub_pow", ["int"]], ["add", "theorem", "two_pow_two_pow_add_two_pow_two_pow", ["int"]], ["add", "theorem", "two_pow_two_pow_sub_pow_two_pow", ["int"]], ["add", "theorem", "geom_sum₂_eq_one", ["multiplicity"]], ["add", "theorem", "pow_add_pow", ["multiplicity", "int"]], ["add", "theorem", "pow_sub_pow", ["multiplicity", "int"]], ["add", "theorem", "pow_add_pow", ["multiplicity", "nat"]], ["add", "theorem", "pow_sub_pow", ["multiplicity", "nat"]], ["add", "theorem", "pow_prime_pow_sub_pow_prime_pow", ["multiplicity"]], ["add", "theorem", "pow_prime_sub_pow_prime", ["multiplicity"]], ["add", "theorem", "pow_sub_pow_of_prime", ["multiplicity"]], ["add", "theorem", "two_pow_sub_pow", ["nat"]], ["add", "theorem", "not_dvd_geom_sum₂", []], ["add", "theorem", "odd_sq_dvd_geom_sum₂_sub", []], ["add", "theorem", "pow_add_pow", ["padic_val_nat"]], ["add", "theorem", "pow_sub_pow", ["padic_val_nat"]], ["add", "theorem", "pow_two_sub_pow", ["padic_val_nat"]], ["add", "theorem", "pow_two_pow_sub_pow_two_pow", []], ["add", "theorem", "sq_dvd_add_pow_sub_sub", []]]}]}, {"timestamp": 1664433999, "sha": "d95851bc", "message": "chore(data/finset/lattice): use more common name, fix spaces (#16336)\n`coe_le_max_of_mem` -> `le_max`\n`le_max_of_mem` -> `le_max_of_eq`\n`min_le_coe_of_mem` -> `min_le`\n`min_le_of_mem` -> `min_le_of_eq`\n`coe_le_max_of_mem` is an analogue of `le_sup` and `min_le_coe_of_mem` is an analogue of `inf_le`, new names are more consistent with them.", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["del", "theorem", "coe_le_max_of_mem", ["finset"]], ["mod", "theorem", "inf_congr", ["finset"]], ["mod", "theorem", "inf_id_set_eq_sInter", ["finset"]], ["mod", "theorem", "inf_mono_fun", ["finset"]], ["mod", "theorem", "le_inf", ["finset"]], ["add", "theorem", "le_max", ["finset"]], ["add", "theorem", "le_max_of_eq", ["finset"]], ["del", "theorem", "le_max_of_mem", ["finset"]], ["add", "theorem", "min_le", ["finset"]], ["del", "theorem", "min_le_coe_of_mem", ["finset"]], ["add", "theorem", "min_le_of_eq", ["finset"]], ["del", "theorem", "min_le_of_mem", ["finset"]], ["mod", "theorem", "sup_congr", ["finset"]], ["mod", "theorem", "sup_eq_supr", ["finset"]], ["mod", "theorem", "sup_le", ["finset"]], ["mod", "theorem", "sup_mono_fun", ["finset"]]]}]}, {"timestamp": 1664413368, "sha": "78764375", "message": "refactor(data/real/ennreal): `div_inv_one_monoid` instance (#16689)\nAdd a `div_inv_one_monoid` instance for `ennreal`, so eliminating its `inv_one` and `div_one` lemmas. (Once we have typeclasses for antitone `inv`, more separate `ennreal` lemmas can be eliminated.)", "changes": [{"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "div_one", ["ennreal"]], ["del", "theorem", "inv_one", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integral/average.lean", "newPath": "src/measure_theory/integral/average.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}]}, {"timestamp": 1664413367, "sha": "0ec98ed0", "message": "refactor(data/real/ereal): `sub_neg_zero_monoid` instance (#16688)\nAdd a `sub_neg_zero_monoid` instance for `ereal`, so eliminating its `neg_zero`, `sub_zero` and `sub_eq_add_neg` lemmas and allowing results for `neg_zero_class` to be applied to `ereal`.", "changes": [{"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["del", "theorem", "neg_zero", ["ereal"]], ["del", "theorem", "sub_eq_add_neg", ["ereal"]], ["del", "theorem", "sub_zero", ["ereal"]]]}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}]}, {"timestamp": 1664413366, "sha": "8f89631e", "message": "refactor(algebra/periodic): use `neg_zero_class` for `antiperiodic.nat_mul_eq_of_eq_zero` (#16687)\nWeaken the typeclass assumption on the codomain of the antiperiodic function in `antiperiodic.nat_mul_eq_of_eq_zero` from `subtraction_monoid` to `neg_zero_class`.\nThe corresponding `int` lemma also requires involutive `neg` so will be dealt with separately once we have a further typeclass for the combination of `neg_zero_class` with `has_involutive_neg`.", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["mod", "theorem", "nat_mul_eq_of_eq_zero", ["function", "antiperiodic"]]]}]}, {"timestamp": 1664413365, "sha": "e63a4d5e", "message": "feat(analysis/special_functions/pow): sqrt and inequalities (#16515)\nThis PR proves a few lemmas about `real.sqrt` and `real.rpow` as well as inequality lemmas for negative powers.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "le_rpow_inv_iff_of_neg", ["real"]], ["add", "theorem", "lt_rpow_inv_iff_of_neg", ["real"]], ["add", "theorem", "rpow_div_two_eq_sqrt", ["real"]], ["add", "theorem", "rpow_inv_le_iff_of_neg", ["real"]], ["add", "theorem", "rpow_inv_lt_iff_of_neg", ["real"]]]}]}, {"timestamp": 1664402296, "sha": "345b38d6", "message": "feat(measure_theory/measure/lebesgue): deduce that a property is almost sure from a localized version in intervals (#16684)", "changes": [{"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["add", "theorem", "ae_of_mem_of_ae_of_mem_inter_Ioo", []], ["add", "theorem", "ae_restrict_of_ae_restrict_inter_Ioo", []]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_restrict_Union_iff", ["measure_theory"]], ["add", "theorem", "ae_restrict_bUnion_finset_iff", ["measure_theory"]], ["add", "theorem", "ae_restrict_bUnion_iff", ["measure_theory"]], ["add", "theorem", "ae_restrict_union_iff", ["measure_theory"]]]}]}, {"timestamp": 1664402295, "sha": "acc2a10b", "message": "feat(algebra/module/basic): weaken assumption (#16673)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1664402294, "sha": "0abedaf8", "message": "feat(data/nat/parity): iterations of involutive functions (#16630)", "changes": [{"oldPath": "src/data/bool/basic.lean", "newPath": "src/data/bool/basic.lean", "changes": [["add", "theorem", "bnot_ne_id", ["bool"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "iterate_bit0", ["function", "involutive"]], ["add", "theorem", "iterate_bit1", ["function", "involutive"]], ["add", "theorem", "iterate_eq_id", ["function", "involutive"]], ["add", "theorem", "iterate_eq_self", ["function", "involutive"]], ["add", "theorem", "iterate_even", ["function", "involutive"]], ["add", "theorem", "iterate_odd", ["function", "involutive"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "involutive_bnot", ["bool"]]]}]}, {"timestamp": 1664402292, "sha": "f7698588", "message": "feat(tactic/push_neg): option for an alternate normal form of `¬ (P ∧ Q)` (#16586)\nBackport a feature of the [mathlib4 version](https://github.com/leanprover-community/mathlib4/pull/344) of `push_neg`: an option to make `¬ (P ∧ Q)` be normalized to `¬ P ∨ ¬ Q`, rather than `P → ¬ Q`. That was actually the original behaviour, but it was changed in #3362.\nI have implemented this as a global option `trace.push_neg.use_distrib` (using the [tracing option hack](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/custom.20options)) rather than as a piece of configuration information which is passed when using the tactic, because I imagine this feature will mostly be used in teaching (that was both my motivation and also @PatrickMassot's when he wrote the original version), where it is convenient to \"set it and forget it\". This is also how it is implemented in the mathlib4 version (cc @dupuisf @j-loreaux).\nZulip:\nhttps://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F-tactics/topic/alternative.20normal.20form.20for.20push_neg", "changes": [{"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": [["add", "theorem", "not_and_distrib_eq", ["push_neg"]]]}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1664402291, "sha": "25e7fe6b", "message": "chore(algebra/order/monoid_lemmas_zero_lt): reorder, create aliases (#16522)\nThe first part of #16449", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "le_of_mul_le_mul_left", []], ["del", "theorem", "le_of_mul_le_mul_of_pos_left", []], ["del", "theorem", "le_of_mul_le_mul_of_pos_right", []], ["add", "theorem", "le_of_mul_le_mul_right", []], ["mod", "theorem", "lt_of_mul_lt_mul_left", []], ["mod", "theorem", "lt_of_mul_lt_mul_right", []], ["mod", "theorem", "mul_le_mul_left", []], ["mod", "theorem", "mul_le_mul_of_nonneg_left", []], ["mod", "theorem", "mul_le_mul_of_nonneg_right", []], ["mod", "theorem", "mul_le_mul_right", []], ["mod", "theorem", "mul_lt_mul_left", []], ["mod", "theorem", "mul_lt_mul_of_pos_left", []], ["mod", "theorem", "mul_lt_mul_of_pos_right", []], ["mod", "theorem", "mul_lt_mul_right", []]]}]}, {"timestamp": 1664402290, "sha": "76747cab", "message": "feat(set_theory/cardinal/ordinal): some lemmas about adding finite cardinals and (in)equalities (#16262)\nThese lemmas arose from [this Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/cardinal.2Ele_of_add_le_add).\nComments are welcome!", "changes": [{"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["add", "theorem", "add_le_add_iff_of_lt_aleph_0", ["cardinal"]], ["add", "theorem", "add_nat_eq", ["cardinal"]], ["add", "theorem", "add_nat_inj", ["cardinal"]], ["add", "theorem", "add_nat_le_add_nat_iff_of_lt_aleph_0", ["cardinal"]], ["add", "theorem", "add_one_inj", ["cardinal"]], ["add", "theorem", "add_one_le_add_one_iff_of_lt_aleph_0", ["cardinal"]], ["add", "theorem", "add_right_inj_of_lt_aleph_0", ["cardinal"]]]}]}, {"timestamp": 1664402289, "sha": "326722b3", "message": "feat(set_theory/zfc/basic): nonempty predicate (#15546)\nWe define `Set.nonempty` matching `set.nonempty` and prove the basic results.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "nonempty_def", ["Set"]], ["add", "theorem", "nonempty_mk_iff", ["Set"]], ["add", "theorem", "nonempty_of_mem", ["Set"]], ["add", "theorem", "nonempty_to_set_iff", ["Set"]], ["add", "theorem", "not_nonempty_empty", ["Set"]], ["add", "theorem", "nonempty_def", ["pSet"]], ["add", "theorem", "nonempty_of_mem", ["pSet"]], ["add", "theorem", "nonempty_of_nonempty_type", ["pSet"]], ["add", "theorem", "nonempty_to_set_iff", ["pSet"]], ["add", "theorem", "nonempty_type_iff_nonempty", ["pSet"]], ["add", "theorem", "not_nonempty_empty", ["pSet"]]]}]}, {"timestamp": 1664402288, "sha": "fe840598", "message": "feat(set_theory/game/pgame): ditch `restricted` (#15037)\nWe ditch `pgame.restricted`. The docstring erroneously claimed it to be something other than what it was, and in its current form, it really only served as a worse form of `le_def`. It was barely used anyways.\nSee also my comments on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Well-founded.20recursion.20for.20pgames/near/287531824).", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "ge", ["pgame", "relabelling"]], ["mod", "theorem", "le", ["pgame", "relabelling"]], ["del", "def", "restricted", ["pgame", "relabelling"]], ["del", "theorem", "le", ["pgame", "restricted"]], ["del", "def", "refl", ["pgame", "restricted"]], ["del", "def", "trans", ["pgame", "restricted"]], ["del", "inductive", "restricted", ["pgame"]]]}]}, {"timestamp": 1664391388, "sha": "35f0f1ba", "message": "feat(data/set/basic): Refactor and additions of sep lemmas (#16566)\nAdd and refactor sep lemmas.", "changes": [{"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "eq_sep_of_subset", ["set"]], ["del", "theorem", "forall_not_of_sep_empty", ["set"]], ["mod", "theorem", "mem_sep", ["set"]], ["mod", "theorem", "mem_sep_iff", ["set"]], ["add", "theorem", "sep_and", ["set"]], ["mod", "theorem", "sep_empty", ["set"]], ["add", "theorem", "sep_eq_empty_iff_mem_false", ["set"]], ["add", "theorem", "sep_eq_of_subset", ["set"]], ["add", "theorem", "sep_eq_self_iff_mem_true", ["set"]], ["add", "theorem", "sep_ext_iff", ["set"]], ["mod", "theorem", "sep_false", ["set"]], ["add", "theorem", "sep_inter", ["set"]], ["del", "theorem", "sep_inter_sep", ["set"]], ["mod", "theorem", "sep_mem_eq", ["set"]], ["add", "theorem", "sep_or", ["set"]], ["mod", "theorem", "sep_set_of", ["set"]], ["mod", "theorem", "sep_true", ["set"]], ["add", "theorem", "sep_union", ["set"]], ["mod", "theorem", "sep_univ", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}]}, {"timestamp": 1664380511, "sha": "4dc217e4", "message": "feat(algebra/order/floor): Positivity extensions for `floor` and `ceil` (#16635)\nAdd two `positivity` extensions:\n* `positivity_floor` for `int.floor`\n* `positivity_ceil` for `nat.ceil`, `int.ceil`", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1664380510, "sha": "7247a3cc", "message": "refactor(algebra/group/defs): `inv_one_class`, `neg_zero_class` (#16187)\nDefine typeclasses `inv_one_class` and `neg_zero_class`, to allow\nresults depending on those properties to be proved more generally than\nfor `division_monoid` and `subtraction_monoid` without requiring\nduplication. Also define `div_inv_one_monoid` and `sub_neg_zero_monoid`.\nThe only instances added here are those deduced from `division_monoid`\nand `subtraction_monoid`, and the only lemmas generalized to these\nclasses were previously proved for those classes. Additional\ninstances intended for followups include:\n* `neg_zero_class` for the combination of `mul_zero_class` with\n `has_distrib_neg`, so eliminating the separate `neg_zero'` lemma.\n* `sub_neg_zero_monoid` for `ereal`.\n* `div_inv_one_monoid` for `ennreal`.\n* The usual `pointwise`, `pi` and `prod` instances.\nAdditional lemmas intended to be generalized to use these typeclasses\nin followups include:\n* `antiperiodic.nat_mul_eq_of_eq_zero` and\n `antiperiodic.int_mul_eq_of_eq_zero`, which currently require the\n codomain of the antiperiodic function to be a `subtraction_monoid`.\n (The latter will also require involutive `neg`, as will some lemmas\n about inequalities.)\n* Given appropriate typeclasses for the interaction of inequalities\n with `inv` and `neg` (which will also enabling combining `left` and\n `right` variants, which is the main motivation of these changes),\n lemmas such as `left.inv_le_one_iff`, `left.one_le_inv_iff`,\n `left.one_lt_inv_iff`, `left.inv_lt_one_iff` and their `right` and\n additive variants. Some of these currently have duplicates for\n `ennreal`, for example.\n Zulip thread raising question of such typeclasses:\n https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/typeclasses.20for.20orders.20with.20neg.20and.20inv", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "div_one", []], ["del", "theorem", "inv_one", []], ["mod", "theorem", "one_div_one", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["add", "theorem", "inv_one", []]]}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}]}, {"timestamp": 1664374546, "sha": "60851c93", "message": "feat(topology/order/lattice): add `topological_lattice` instance for linear orders with an order closed topology (#16664)\nThis adds a `topological_lattice` instance for and linear order with an order closed topology. In particular, this gives us previously nonexistent `topological_lattice` instances for `ℝ≥0`, `ℝ≥0∞` and things like `set.Icc (a : ℝ) b` as well as many others. In addition, it makes the `topological_lattice` instance for `ℝ` available earlier in the import hierarchy, because the previously existing instance was derived from `real.normed_lattice_add_comm_group` via `normed_lattice_add_comm_group_topological_lattice`.", "changes": [{"oldPath": "src/topology/order/lattice.lean", "newPath": "src/topology/order/lattice.lean", "changes": []}]}, {"timestamp": 1664351113, "sha": "8ef6d8f2", "message": "feat(analysis/schwartz_space): add lemmas for seminorms (#16634)", "changes": [{"oldPath": "src/analysis/schwartz_space.lean", "newPath": "src/analysis/schwartz_space.lean", "changes": [["add", "theorem", "norm_iterated_fderiv_le_seminorm", ["schwartz_map"]], ["add", "theorem", "norm_pow_mul_le_seminorm", ["schwartz_map"]]]}]}, {"timestamp": 1664346076, "sha": "494b1f8e", "message": "feat(linear_algebra/affine_space/affine_subspace): `parallel` (#16298)\nDefine the notion of two affine subspaces being parallel and set up\nassociated API.\nThis notion is very similar to the subspaces having equal `direction`,\nand in many cases I expect equality of direction will remain more\nconvenient to use. However, the notions aren't exactly the same (the\nempty affine subspace and a single-point subspace have the same\n`direction` but aren't considered parallel), and having a definition\nof `parallel`, even if not used much, allows geometrical statements\ninvolving things being parallel to be made in a way corresponding more\nclosely to the informal formulation.\nNote that the notation defined for `parallel` is based on what\ncharacters are available rather than on their proper Unicode\nsemantics. There are at least four characters in Unicode with\nsomewhat similar appearance:\n* U+01C1 LATIN LETTER LATERAL CLICK `ǁ`\n* U+2016 DOUBLE VERTICAL LINE `‖` (for which the Unicode Character\n Database says \"used in pairs to indicate norm of a matrix\")\n* U+2225 PARALLEL TO `∥`\n* U+23F8 DOUBLE VERTICAL BAR `⏸`\nBased on the Unicode descriptions, U+2225 would be natural to use for\n`parallel`, and U+2016 for norms.\nHowever, mathlib makes extensive use of U+2225 for norms; for\ngeometry, both norms and `parallel` are of use and it doesn't work\nwell to try to use the notation for both (unless there's some way to\nset the precedences of the different notations that will make Lean\nparse both uses correctly). (There's a local notation using U+2225\nfor `fuzzy` in the context of games, which seems a more appropriate\nuse of U+2225 and probably doesn't cause problems because of games and\nnorms not being used together.)\nSo this PR uses U+2016 for `parallel` instead of the logical U+2225\n(even if in principle the uses for `parallel` and norms should be\nswapped to correspond better to the Unicode semantics). There are\nother local uses of U+2016 for `fintype.card` in a few places, but I\ndon't expect those to cause a problem.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "bot_parallel_iff_eq_bot", ["affine_subspace"]], ["add", "theorem", "direction_eq", ["affine_subspace", "parallel"]], ["add", "theorem", "refl", ["affine_subspace", "parallel"]], ["add", "theorem", "symm", ["affine_subspace", "parallel"]], ["add", "theorem", "trans", ["affine_subspace", "parallel"]], ["add", "def", "parallel", ["affine_subspace"]], ["add", "theorem", "parallel_bot_iff_eq_bot", ["affine_subspace"]], ["add", "theorem", "parallel_comm", ["affine_subspace"]], ["add", "theorem", "parallel_iff_direction_eq_and_eq_bot_iff_eq_bot", ["affine_subspace"]]]}]}, {"timestamp": 1664342981, "sha": "6fe90f28", "message": "feat(algebra/jordan/special): The symmetrization of an associative ring is a commutative Jordan multiplication (#11401)\nA commutative multiplication on a real or complex space can be constructed from any multiplication by\n\"symmetrisation\" i.e\n```\na∘b = 1/2(ab+ba).\n```\nWhen the original multiplication is associative, the symmetrised algebra is a commutative Jordan\nalgebra. A commutative Jordan algebra which can be constructed in this way from an associative\nmultiplication is said to be a special Jordan algebra.\nThis PR shows more generally that for a ring where the scalar `2` is invertible, the symmetrised multiplication is a commutative Jordan multiplication.", "changes": [{"oldPath": "src/algebra/jordan/basic.lean", "newPath": "src/algebra/jordan/basic.lean", "changes": []}, {"oldPath": "src/algebra/symmetrized.lean", "newPath": "src/algebra/symmetrized.lean", "changes": []}]}, {"timestamp": 1664316036, "sha": "c251522d", "message": "feat(order/atoms): link `set` to `is_atom` API (#16665)", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "is_atom_iff", ["set"]], ["add", "theorem", "is_atom_singleton", ["set"]], ["add", "theorem", "is_coatom_iff", ["set"]], ["add", "theorem", "is_coatom_singleton_compl", ["set"]]]}]}, {"timestamp": 1664316034, "sha": "999e0925", "message": "feat(group_theory/finiteness): Add variants of `rank_closure_le_card` (#16364)\nThis PR adds some more API lemmas for `group.rank`.\n`rank_congr` is useful since `rw h` and `simp only [h]` have run into trouble.", "changes": [{"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": [["add", "theorem", "rank_closure_finite_le_nat_card", ["subgroup"]], ["add", "theorem", "rank_closure_finset_le_card", ["subgroup"]], ["add", "theorem", "rank_congr", ["subgroup"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "closure_preimage_eq_top", ["subgroup"]]]}]}, {"timestamp": 1664310248, "sha": "8e8c7fd5", "message": "feat(analysis/normed_space/star/basic): in a C⋆-ring `star x * x = 0 ↔ x = 0` (#16672)\nThis adds a few convenience lemmas for C⋆-rings regarding criteria for being equal, or not equal, to zero.", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["add", "theorem", "mul_star_self_eq_zero_iff", ["cstar_ring"]], ["add", "theorem", "mul_star_self_ne_zero_iff", ["cstar_ring"]], ["add", "theorem", "star_mul_self_eq_zero_iff", ["cstar_ring"]], ["add", "theorem", "star_mul_self_ne_zero_iff", ["cstar_ring"]]]}]}, {"timestamp": 1664310247, "sha": "99e885b9", "message": "chore(ring_theory/(mv_)polynomial/{symmetric, homogeneous}): move files (#16414)", "changes": [{"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/mv_polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/mv_polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}]}, {"timestamp": 1664299458, "sha": "ec74a7cc", "message": "feat(topology/algebra/[uniform_]group): more `ext` lemmas (#16667)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "ext_iff", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "ext", ["uniform_group"]], ["add", "theorem", "ext_iff", ["uniform_group"]]]}]}, {"timestamp": 1664299457, "sha": "a652850a", "message": "feat(algebra/group/type_tags): finite & infinite instances for additive/multiplicative group type tags (#16662)\n- adds finite & infinite instances for additive/multiplicative group type tags", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}]}, {"timestamp": 1664299456, "sha": "6f9edf5b", "message": "fix(tactic/positivity + test): instantiate meta-variables and add a test (#16647)\nFix an issue with `positivity` reported by @YaelDillies [here](https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F-tactics/topic/New.20tactic.3A.20.60positivity.60/near/300639970).\nFor the fix, it seems that instantiating meta-variables is enough.", "changes": [{"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1664299455, "sha": "3bfcb4ce", "message": "feat(analysis/locally_convex): boundedness in normed spaces (#16636)", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "theorem", "image_is_vonN_bounded_iff", ["normed_space"]], ["add", "theorem", "is_vonN_bounded_iff'", ["normed_space"]]]}]}, {"timestamp": 1664299454, "sha": "c433ac05", "message": "feat(analysis/calculus): add lemma for norm of zeroth iterated derivative (#16631)", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "norm_iterated_fderiv_zero", []]]}]}, {"timestamp": 1664299453, "sha": "d0f92493", "message": "feat(data/list/chain): add `list.chain'_is_infix` (#16627)", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "chain'_is_infix", ["list"]]]}]}, {"timestamp": 1664299452, "sha": "7a4b066c", "message": "chore(probability/martingale): use volume_tac in definitions (#16619)\nUse the tactic `volume_tac` in the definitions `martingale`, `submartingale`, `supermartingale`, `martingale_part` and `predictable_part`.\nIn order to do that, change the order of the arguments of `martingale_part` and `predictable_part`.", "changes": [{"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": [["mod", "def", "martingale", ["measure_theory"]], ["mod", "def", "submartingale", ["measure_theory"]], ["mod", "def", "supermartingale", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale/borel_cantelli.lean", "newPath": "src/probability/martingale/borel_cantelli.lean", "changes": []}, {"oldPath": "src/probability/martingale/centering.lean", "newPath": "src/probability/martingale/centering.lean", "changes": [["mod", "theorem", "adapted_predictable_part'", ["measure_theory"]], ["mod", "theorem", "adapted_predictable_part", ["measure_theory"]], ["mod", "theorem", "predictable_part_zero", ["measure_theory"]]]}]}, {"timestamp": 1664299451, "sha": "89417b90", "message": "feat(geometry/euclidean/basic): angles in subspaces (#16610)\nAdd lemmas that the angle between two vectors or three points in a subspace equals the angle between those vectors or points in the whole space.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "angle_coe", ["affine_subspace"]], ["add", "theorem", "angle_coe", ["submodule"]]]}]}, {"timestamp": 1664299450, "sha": "33c6eeae", "message": "chore(topology/separation): rename `separated` to `separated_nhds` (#16604)\nE.g., Wikipedia uses \"separated\" for `disjoint (closure s) t ∧ disjoint s (closure t)`.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "comm", ["separated"]], ["del", "theorem", "disjoint_closure_left", ["separated"]], ["del", "theorem", "disjoint_closure_right", ["separated"]], ["del", "theorem", "empty_left", ["separated"]], ["del", "theorem", "empty_right", ["separated"]], ["del", "theorem", "mono", ["separated"]], ["del", "theorem", "preimage", ["separated"]], ["del", "theorem", "symm", ["separated"]], ["del", "theorem", "union_left", ["separated"]], ["del", "theorem", "union_right", ["separated"]], ["del", "def", "separated", []], ["del", "theorem", "separated_iff_disjoint", []], ["add", "theorem", "comm", ["separated_nhds"]], ["add", "theorem", "disjoint_closure_left", ["separated_nhds"]], ["add", "theorem", "disjoint_closure_right", ["separated_nhds"]], ["add", "theorem", "empty_left", ["separated_nhds"]], ["add", "theorem", "empty_right", ["separated_nhds"]], ["add", "theorem", "mono", ["separated_nhds"]], ["add", "theorem", "preimage", ["separated_nhds"]], ["add", "theorem", "symm", ["separated_nhds"]], ["add", "theorem", "union_left", ["separated_nhds"]], ["add", "theorem", "union_right", ["separated_nhds"]], ["add", "def", "separated_nhds", []], ["add", "theorem", "separated_nhds_iff_disjoint", []]]}]}, {"timestamp": 1664299449, "sha": "dc1ac244", "message": "feat(topology/subset_properties): lemmas about `disjoint`, `nhds_set`, and `is_compact` (#16591)\nThe set neighborhoods filter of a compact set is disjoint with a filter `l` if and only if the neighborhoods filter of each point of this set is disjoint with `l`.", "changes": [{"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": [["mod", "theorem", "monotone_nhds_set", []], ["add", "theorem", "nhds_le_nhds_set", []], ["add", "theorem", "nhds_set_mono", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "nhds_le_nhds_set", []], ["add", "theorem", "nhds_le_nhds_set_iff", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "disjoint_nhds_set_left", ["is_compact"]], ["add", "theorem", "disjoint_nhds_set_right", ["is_compact"]]]}]}, {"timestamp": 1664288912, "sha": "801c013f", "message": "refactor(tactic/lift): remove attribute/simp-set and swap side goal (#16565)\nThis PR accomplishes two things:\n* It simplifies the design of the `lift` tactic (while keeping roughly the same user interface, see below). Specifically, it does not need an attribute set to simplify expressions coming from `can_lift` instances.\n - This will make the tactic easier to port to Lean 4.\n - It accomplishes this by moving two fields of `can_lift` into `out_param`s. So writing the instances is slightly different from before.\n* If the `using h` clause is left out, then `lift` produces a subgoal. This subgoal used to come after the main goal. But I think it is natural to make it the first goal. So that you can write\n```\nlift n to nat with k, { linarith },\n```\ninstead of\n```\nlift n to nat using by { linarith } with k,\n```", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/defs.lean", "newPath": "src/data/finsupp/defs.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": []}, {"oldPath": "src/data/rat/nnrat.lean", "newPath": "src/data/rat/nnrat.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}, {"oldPath": "src/order/interval.lean", "newPath": "src/order/interval.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/units.lean", "newPath": "src/topology/continuous_function/units.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": []}, {"oldPath": "test/lift.lean", "newPath": "test/lift.lean", "changes": []}]}, {"timestamp": 1664279583, "sha": "f48c65aa", "message": "feat(analysis/convex/topology): connectedness and `same_ray` (#16661)\nAdd lemmas that the set of vectors in the same ray as a given vector, and the set of nonzero vectors in the same ray as a given nonzero vector, are connected (in a real normed space).", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "is_connected_set_of_same_ray", []], ["add", "theorem", "is_connected_set_of_same_ray_and_ne_zero", []]]}]}, {"timestamp": 1664279581, "sha": "72944168", "message": "feat(topology/instances/real): classify discrete subgroups (#16592)\nThe subgroups aℤ (i.e. `zmultiples a`) of ℝ are discrete, in the sense of having finite intersection with any compact subset.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "coe_comp_range_restrict", ["monoid_hom"]], ["add", "theorem", "subtype_comp_range_restrict", ["monoid_hom"]]]}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": [["add", "theorem", "tendsto_cocompact_mul_left₀", ["filter"]], ["add", "theorem", "tendsto_cocompact_mul_right₀", ["filter"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "tendsto_cocompact_mul_left", ["filter"]], ["add", "theorem", "tendsto_cocompact_mul_right", ["filter"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "tendsto_zmultiples_subtype_cofinite", ["add_subgroup"]], ["add", "theorem", "tendsto_coe_cofinite", ["int"]], ["add", "theorem", "tendsto_zmultiples_hom_cofinite", ["int"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "tendsto_coe_cofinite", ["int"]]]}]}, {"timestamp": 1664279580, "sha": "ac49df81", "message": "feat(group_theory/exponent): `card G ∣ exponent G ^ rank G` (#16354)\nThis PR adds a lemma stating that `nat.card G ∣ monoid.exponent G ^ group.rank G`.", "changes": [{"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": [["add", "theorem", "card_dvd_exponent_pow_rank'", []], ["add", "theorem", "card_dvd_exponent_pow_rank", []]]}]}, {"timestamp": 1664279579, "sha": "3c139aa9", "message": "feat(combinatorics/quiver/path): Turn a quiver path into a list (#15240)\nDefine `quiver.path.to_list : path a b → list V`.", "changes": [{"oldPath": "src/combinatorics/quiver/path.lean", "newPath": "src/combinatorics/quiver/path.lean", "changes": [["add", "theorem", "eq_of_length_zero", ["quiver", "path"]], ["add", "def", "to_list", ["quiver", "path"]], ["add", "theorem", "to_list_chain_nonempty", ["quiver", "path"]], ["add", "theorem", "to_list_comp", ["quiver", "path"]], ["add", "theorem", "to_list_inj", ["quiver", "path"]], ["add", "theorem", "to_list_injective", ["quiver", "path"]]]}]}, {"timestamp": 1664271329, "sha": "3397560e", "message": "chore(topology/algebra/module/basic): remove `continuous_linear_map.ker` and `continuous_linear_map.range` (#16208)\nThis PR removes `continuous_linear_map.ker` and `continuous_linear_map.range`, which are now obsolete since `linear_map.ker` and `linear_map.range` are defined for any `linear_map_class` morphism.", "changes": [{"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": [["mod", "theorem", "eq_implicit_function", ["has_strict_fderiv_at"]], ["mod", "def", "implicit_function", ["has_strict_fderiv_at"]], ["mod", "def", "implicit_to_local_homeomorph", ["has_strict_fderiv_at"]], ["mod", "theorem", "map_implicit_function_eq", ["has_strict_fderiv_at"]], ["mod", "theorem", "to_implicit_function", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "theorem", "orthogonal_eq_inter", []]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/lax_milgram.lean", "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": [["mod", "theorem", "closed_range", ["is_coercive"]], ["mod", "theorem", "ker_eq_bot", ["is_coercive"]], ["mod", "theorem", "range_eq_top", ["is_coercive"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["mod", "theorem", "coe_fn_of_bijective", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_of_bijective", ["continuous_linear_equiv"]], ["mod", "theorem", "of_bijective_apply_symm_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "of_bijective_symm_apply_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "exists_nonlinear_right_inverse_of_surjective", ["continuous_linear_map"]], ["mod", "theorem", "nonlinear_right_inverse_of_surjective_nnnorm_pos", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": [["mod", "def", "equiv_prod_of_surjective_of_is_compl", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "ker_eq_bot", ["linear_map"]], ["mod", "theorem", "sub_mem_ker_iff", ["linear_map"]], ["add", "theorem", "ker_eq_bot", ["linear_map_class"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["del", "theorem", "apply_ker", ["continuous_linear_map"]], ["mod", "theorem", "infi_ker_proj", ["continuous_linear_map"]], ["mod", "theorem", "is_closed_ker", ["continuous_linear_map"]], ["del", "def", "ker", ["continuous_linear_map"]], ["del", "theorem", "ker_coe", ["continuous_linear_map"]], ["del", "theorem", "mem_ker", ["continuous_linear_map"]], ["del", "theorem", "mem_range", ["continuous_linear_map"]], ["del", "theorem", "mem_range_self", ["continuous_linear_map"]], ["del", "def", "range", ["continuous_linear_map"]], ["del", "theorem", "range_coe", ["continuous_linear_map"]], ["mod", "theorem", "range_prod_eq", ["continuous_linear_map"]], ["del", "theorem", "range_prod_le", ["continuous_linear_map"]], ["mod", "theorem", "ker_subtypeL", ["submodule"]], ["mod", "theorem", "range_subtypeL", ["submodule"]]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}]}, {"timestamp": 1664263965, "sha": "e2621d93", "message": "chore(number_theory/legendre_symbol/norm_num): remove now unnecessary instance (#16659)\nThis just removes a shortcut instance in `number_theory/legendre_symnol/norm_num` that was necessary to avoid computability trouble with the meta code, but is no longer so, since the root cause was fixed by #16463.", "changes": [{"oldPath": "src/number_theory/legendre_symbol/norm_num.lean", "newPath": "src/number_theory/legendre_symbol/norm_num.lean", "changes": []}]}, {"timestamp": 1664237704, "sha": "e46daa0a", "message": "feat(analysis/normed_space/operator_norm): remove to_span_singleton_norm (#16654)\nRemove `continuous_linear_map.to_span_singleton_norm`. It is a duplicate of `continuous_linear_map.norm_to_span_singleton` (which has more explicit arguments and weaker type-class assumptions).", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "to_span_singleton_norm", ["continuous_linear_map"]]]}]}, {"timestamp": 1664229594, "sha": "1a4f9279", "message": "chore(analysis/special_functions/pow): squeezing some simps (#16660)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}]}, {"timestamp": 1664229593, "sha": "ab2e9fb6", "message": "feat(algebra/category/Group/injective): divisible groups are injective in category of `AddCommGroup` (#16110)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Group/injective.lean", "changes": [["add", "theorem", "injective_as_module_of_injective_as_Ab", ["AddCommGroup"]], ["add", "theorem", "injective_of_injective_as_module", ["AddCommGroup"]]]}]}, {"timestamp": 1664221764, "sha": "b3d23d74", "message": "chore(analysis/special_functions/pow): squeeze a nonterminal simp (#16657)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}]}, {"timestamp": 1664221762, "sha": "9f972c7e", "message": "feat(topology/uniform_space/completion): add uniform_completion.complete_equiv_self (#16612)\n- Change ```abstract_completion.compare_equiv``` to uniform bijection.\n- Define the ```abstract_completion α``` given by ```α``` when it is complete. \n- Use it to prove that there is a uniform bijection between a complete space and its ```uniform_completion```.\n- Upgrade the bijection between ```Bourbaki reals``` and ```Cauchy reals``` to a uniform bijection. \n- Add a new function ```function.dense_range_id``` (needed in one of the proofs)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "dense_range_id", []]]}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": [["mod", "def", "compare_equiv", ["abstract_completion"]], ["add", "def", "of_complete", ["abstract_completion"]]]}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["add", "def", "complete_equiv_self", ["uniform_space", "completion", "uniform_completion"]]]}]}, {"timestamp": 1664221761, "sha": "f38b4dfe", "message": "feat(topology/sheaves/skyscraper): define skyscraper presheaves and calculate stalks (#15934)", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "comp_eq_to_hom_iff", ["category_theory"]], ["add", "theorem", "eq_to_hom_comp_iff", ["category_theory"]]]}, {"oldPath": "src/topology/inseparable.lean", "newPath": "src/topology/inseparable.lean", "changes": [["add", "theorem", "not_specializes_iff_exists_closed", []], ["add", "theorem", "not_specializes_iff_exists_open", []]]}, {"oldPath": null, "newPath": "src/topology/sheaves/skyscraper.lean", "changes": [["add", "def", "skyscraper_presheaf", []], ["add", "def", "skyscraper_presheaf_cocone", []], ["add", "def", "skyscraper_presheaf_cocone_of_specializes", []], ["add", "def", "skyscraper_presheaf_stalk_of_not_specializes_is_terminal", []]]}]}, {"timestamp": 1664221760, "sha": "db24ba7c", "message": "chore(number_theory/padics): stylistic changes (#15755)\nExtracted stylistic changes (backticks, brackets, linebreaks, naming, spacing) from #15221 as suggested in the comments.", "changes": [{"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": [["mod", "theorem", "exists_pow_neg_lt", ["padic_int"]], ["mod", "theorem", "exists_pow_neg_lt_rat", ["padic_int"]], ["mod", "theorem", "ideal_eq_span_pow_p", ["padic_int"]], ["mod", "theorem", "inv_mul", ["padic_int"]], ["mod", "theorem", "irreducible_p", ["padic_int"]], ["mod", "theorem", "mk_units_eq", ["padic_int"]], ["mod", "theorem", "norm_eq_of_norm_add_lt_left", ["padic_int"]], ["mod", "theorem", "norm_eq_of_norm_add_lt_right", ["padic_int"]], ["mod", "theorem", "norm_eq_padic_norm", ["padic_int"]], ["mod", "theorem", "norm_eq_pow_val", ["padic_int"]], ["mod", "theorem", "norm_int_cast_eq_padic_norm", ["padic_int"]], ["mod", "theorem", "norm_int_le_pow_iff_dvd", ["padic_int"]], ["mod", "theorem", "norm_le_pow_iff_norm_lt_pow_add_one", ["padic_int"]], ["mod", "theorem", "norm_lt_pow_iff_norm_le_pow_sub_one", ["padic_int"]], ["mod", "theorem", "norm_mul", ["padic_int"]], ["mod", "theorem", "norm_pow", ["padic_int"]], ["mod", "theorem", "norm_units", ["padic_int"]], ["mod", "theorem", "padic_norm_e_of_padic_int", ["padic_int"]], ["mod", "theorem", "valuation_one", ["padic_int"]], ["mod", "theorem", "valuation_p", ["padic_int"]], ["mod", "theorem", "valuation_zero", ["padic_int"]]]}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["mod", "theorem", "padic_norm_p", ["padic_norm"]], ["mod", "theorem", "padic_norm_p_of_prime", ["padic_norm"]], ["mod", "def", "padic_norm", []]]}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": [["mod", "theorem", "apply", ["padic", "add_valuation"]], ["mod", "def", "add_valuation_def", ["padic"]], ["mod", "theorem", "norm_eq_pow_val", ["padic"]], ["mod", "theorem", "norm_le_pow_iff_norm_lt_pow_add_one", ["padic"]], ["mod", "theorem", "norm_lt_pow_iff_norm_le_pow_sub_one", ["padic"]], ["mod", "theorem", "padic_norm_e_lim_le", ["padic"]], ["mod", "theorem", "rat_dense'", ["padic"]], ["mod", "theorem", "rat_dense", ["padic"]], ["mod", "def", "valuation", ["padic"]], ["mod", "theorem", "valuation_zero", ["padic"]], ["mod", "theorem", "add_eq_max_of_ne", ["padic_norm_e"]], ["mod", "theorem", "eq_of_norm_add_lt_left", ["padic_norm_e"]], ["mod", "theorem", "eq_of_norm_add_lt_right", ["padic_norm_e"]], ["mod", "theorem", "eq_padic_norm", ["padic_norm_e"]], ["mod", "theorem", "norm_int_le_pow_iff_dvd", ["padic_norm_e"]], ["mod", "theorem", "norm_p_pow", ["padic_norm_e"]], ["mod", "theorem", "eq_zero_iff_equiv_zero", ["padic_seq"]], ["mod", "def", "norm", ["padic_seq"]], ["mod", "theorem", "norm_eq_pow_val", ["padic_seq"]], ["mod", "theorem", "norm_neg", ["padic_seq"]], ["mod", "theorem", "norm_nonarchimedean", ["padic_seq"]], ["mod", "theorem", "norm_nonzero_of_not_equiv_zero", ["padic_seq"]], ["mod", "theorem", "norm_values_discrete", ["padic_seq"]], ["mod", "theorem", "not_equiv_zero_const_of_nonzero", ["padic_seq"]], ["mod", "def", "stationary_point", ["padic_seq"]]]}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": [["mod", "theorem", "dvd_of_one_le_padic_val_nat", []], ["mod", "theorem", "of_nat", ["padic_val_int"]], ["mod", "theorem", "self", ["padic_val_int"]], ["mod", "def", "padic_val_int", []], ["mod", "theorem", "padic_val_nat_dvd_iff", []], ["mod", "theorem", "padic_val_nat_primes", []], ["mod", "theorem", "le_padic_val_rat_add_of_le", ["padic_val_rat"]], ["mod", "theorem", "self", ["padic_val_rat"]], ["mod", "theorem", "sum_pos_of_pos", ["padic_val_rat"]], ["mod", "def", "padic_val_rat", []], ["mod", "theorem", "padic_val_rat_of_nat", []], ["mod", "theorem", "pow_padic_val_nat_dvd", []], ["mod", "theorem", "pow_succ_padic_val_nat_not_dvd", []], ["mod", "theorem", "range_pow_padic_val_nat_subset_divisors'", []], ["mod", "theorem", "range_pow_padic_val_nat_subset_divisors", []]]}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}]}, {"timestamp": 1664212021, "sha": "a12363e2", "message": "perf(analysis/normed_space/continuous_affine_map): Speedup (#16652)\nThis changes the compilation time of `continuous_affine_map.to_const_prod_continuous_linear_map` from 19s to 3s for me locally.", "changes": [{"oldPath": "src/analysis/normed_space/continuous_affine_map.lean", "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": []}]}, {"timestamp": 1664212020, "sha": "b41babaa", "message": "doc(analysis/special_functions/stirling): fix equation (#16651)", "changes": [{"oldPath": "src/analysis/special_functions/stirling.lean", "newPath": "src/analysis/special_functions/stirling.lean", "changes": []}]}, {"timestamp": 1664212019, "sha": "dfd17f2f", "message": "feat(data/fintype/basic): `set.to_finset_of_finset` (#16460)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "to_finset_of_finset", ["set"]]]}]}, {"timestamp": 1664212018, "sha": "a44ce4da", "message": "feat(real/ennreal): basic lemmas about `ennreal.to_nnreal` and `ennreal.to_real` (#16318)\nProvides lemmas for when `to_nnreal` or `to_real` equal `1`, and when two instances of `to_nnreal` and `to_real` equal each other.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_nnreal_eq_one_iff", ["ennreal"]], ["add", "theorem", "to_nnreal_eq_to_nnreal_iff'", ["ennreal"]], ["add", "theorem", "to_nnreal_eq_to_nnreal_iff", ["ennreal"]], ["add", "theorem", "to_real_eq_one_iff", ["ennreal"]], ["add", "theorem", "to_real_eq_to_real_iff'", ["ennreal"]], ["add", "theorem", "to_real_eq_to_real_iff", ["ennreal"]]]}]}, {"timestamp": 1664203073, "sha": "d5e1961f", "message": "feat(topology/sheaves/abelian): category of sheaves is abelian (#16403)\nand that sheafification functor is additive", "changes": [{"oldPath": null, "newPath": "src/topology/sheaves/abelian.lean", "changes": []}]}, {"timestamp": 1664193666, "sha": "525ffd73", "message": "feat(group_theory/subgroup/basic): golf proof of instance normal_inf_normal (#16620)\nRemoved some `rw` from the proof of the instance `normal_inf_normal`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}]}, {"timestamp": 1664185025, "sha": "ebf8ff42", "message": "feat(algebraic_geometry/projective_spectrum/Scheme): the function from Spec to Proj restricted to basic open set. (#15259)\nWe want to have a homeomorphism between $\\mathrm{Proj}|_{D(f)}$ to $\\mathrm{Spec}{A^0_f}$, we have the forward direction already. This PR is the underlying function of backward direction. Continuity will be proved separately.", "changes": [{"oldPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "newPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "changes": [["add", "theorem", "add_mem", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier"]], ["add", "def", "as_homogeneous_ideal", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier"]], ["add", "theorem", "homogeneous", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier", "as_ideal"]], ["add", "theorem", "ne_top", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier", "as_ideal"]], ["add", "theorem", "prime", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier", "as_ideal"]], ["add", "def", "as_ideal", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier"]], ["add", "theorem", "denom_not_mem", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier"]], ["add", "theorem", "relevant", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier"]], ["add", "theorem", "smul_mem", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier"]], ["add", "theorem", "zero_mem", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec", "carrier"]], ["add", "def", "carrier", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec"]], ["add", "theorem", "mem_carrier_iff", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec"]], ["add", "def", "to_fun", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "from_Spec"]], ["add", "theorem", "coe_one", ["algebraic_geometry", "degree_zero_part"]], ["add", "theorem", "coe_sum", ["algebraic_geometry", "degree_zero_part"]]]}]}, {"timestamp": 1664170370, "sha": "3b4e9d58", "message": "feat(data/option/basic): `option.map` is injective (#16626)\n* prove that `option.map : (α → β) → (option α → option β)` is injective;\n* add `iff` version of this lemma;\n* add `option.map_comp_some` and `option.map_eq_id`;\n* drop `option.map_id'`: it was the same as `option.map_id`.", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "map_comp_some", ["option"]], ["add", "theorem", "map_eq_id", ["option"]], ["del", "theorem", "map_id'", ["option"]], ["add", "theorem", "map_inj", ["option"]], ["add", "theorem", "map_injective'", ["option"]]]}]}, {"timestamp": 1664170369, "sha": "a48b8eff", "message": "feat(data/list/basic): `list.head`, `list.head'`, and `list.tail` are surjective (#16625)\nAlso add `list.eq_cons_of_mem_head'`, a more specific version of `list.mem_of_mem_head'`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "eq_cons_of_mem_head'", ["list"]], ["mod", "theorem", "mem_of_mem_head'", ["list"]], ["add", "theorem", "surjective_head'", ["list"]], ["add", "theorem", "surjective_head", ["list"]], ["add", "theorem", "surjective_tail", ["list"]]]}]}, {"timestamp": 1664162438, "sha": "19deedcc", "message": "feat(combinatorics/simple_graph/density): `positivity` extension for `edge_density` (#16640)\nAdd a `positivity` extension for `rel.edge_density` and `simple_graph.edge_density`.\nAlso golf the file a little using `positivity`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/density.lean", "newPath": "src/combinatorics/simple_graph/density.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1664158794, "sha": "653307ac", "message": "chore(number_theory/cyclotomic): fix typo in lemma name (#16643)", "changes": [{"oldPath": "src/number_theory/cyclotomic/rat.lean", "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": [["add", "theorem", "is_integral_closure_adjoin_singleton_of_prime", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "is_integral_closure_adjoin_singleton_of_prime_pow", ["is_cyclotomic_extension", "rat"]], ["del", "theorem", "is_integral_closure_adjoing_singleton_of_prime", ["is_cyclotomic_extension", "rat"]], ["del", "theorem", "is_integral_closure_adjoing_singleton_of_prime_pow", ["is_cyclotomic_extension", "rat"]]]}]}, {"timestamp": 1664153666, "sha": "765955fb", "message": "feat(linear_algebra/ray): `iff` versions of some lemmas (#16642)\nAdd `iff` versions of some `same_ray` lemmas. These are lemmas where we already have some form of both directions, but not the `iff` version (and the separate directions are still useful on their own, since one direction is true for weaker typeclass assumptions than the `iff` version and the other is available with dot notation).", "changes": [{"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": [["add", "theorem", "exists_nonneg_left_iff_same_ray", []], ["add", "theorem", "exists_nonneg_right_iff_same_ray", []], ["add", "theorem", "exists_pos_left_iff_same_ray", []], ["add", "theorem", "exists_pos_left_iff_same_ray_and_ne_zero", []], ["add", "theorem", "exists_pos_right_iff_same_ray", []], ["add", "theorem", "exists_pos_right_iff_same_ray_and_ne_zero", []]]}]}, {"timestamp": 1664141127, "sha": "a337782b", "message": "chore(data/list/range): fix incorrect docstring (#16622)\nThe description of `iota` was incorrect (this can be easily checked by viewing its definition, using `#eval` or looking at any of the lemmas about it)", "changes": [{"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}]}, {"timestamp": 1664141126, "sha": "74f6e95c", "message": "feat(data/real/ennreal): make of_real_sub easier to rewrite with (#16621)\nA tiny edit to make this lemma more general for the purpose of rewriting - previously `q` was only for `nnreal` (even though it had the assumption of nonnegativity).", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "of_real_sub", ["ennreal"]]]}]}, {"timestamp": 1664136926, "sha": "868ee2c6", "message": "chore(.docker): fix build failure in docker images (#16590)", "changes": [{"oldPath": ".docker/debian/lean/Dockerfile", "newPath": ".docker/debian/lean/Dockerfile", "changes": []}]}, {"timestamp": 1664130409, "sha": "5a8eded1", "message": "refactor(linear_algebra/affine_space): remove `open_locale classical` (#16628)\nUse of `open_locale classical` in mathlib is liable to cause problems if it results in the classical decidability instances forming part of the type of a lemma, making that lemma harder to use in any context where typeclass inference finds a different decidability instance. Remove it from affine space files, adding explicit decidability instance parameters where needed for the type of a lemma and uses of the `classical` tactic when only needed for a proof.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["mod", "theorem", "vector_span_eq_span_vsub_finset_right_ne", []]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["mod", "theorem", "attach_affine_combination_of_injective", ["finset"]], ["mod", "theorem", "centroid_pair", ["finset"]], ["mod", "theorem", "weighted_vsub_of_point_erase", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}]}, {"timestamp": 1664126289, "sha": "4a927b25", "message": "feat(algebra/order/hom/monoid): add `monotone_iff_map_nonneg/pos` + golf (#16601)\nIf the source is an ordered add_group, a monoid hom is monotone if and only if it sends nonnegative elements to a nonnegative elements. This connects the notion of [positive linear functional](https://en.wikipedia.org/wiki/Positive_linear_functional) to monotonicity.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Amenable.20Groups/near/300076886)", "changes": [{"oldPath": "src/algebra/order/complete_field.lean", "newPath": "src/algebra/order/complete_field.lean", "changes": []}, {"oldPath": "src/algebra/order/hom/monoid.lean", "newPath": "src/algebra/order/hom/monoid.lean", "changes": [["add", "theorem", "antitone_iff_map_nonneg", []], ["add", "theorem", "antitone_iff_map_nonpos", []], ["add", "theorem", "monotone_iff_map_nonneg", []], ["add", "theorem", "monotone_iff_map_nonpos", []], ["add", "theorem", "strict_anti_iff_map_neg", []], ["add", "theorem", "strict_anti_iff_map_pos", []], ["add", "theorem", "strict_mono_iff_map_neg", []], ["add", "theorem", "strict_mono_iff_map_pos", []]]}]}, {"timestamp": 1664118870, "sha": "1313934b", "message": "feat(analysis/inner_product_space/l2_space): compute orthogonal projection on U given a hilbert basis of U (#15541)", "changes": [{"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}]}, {"timestamp": 1664105062, "sha": "3b727dc2", "message": "feat(algebra/module/basic): More general `smul_ne_zero` (#16608)\nProve the one way implication of `smul_ne_zero` that holds without `smul_eq_zero` separately. Call it `smul_ne_zero` and rename `smul_ne_zero` to `smul_ne_zero_iff`.\nThis matches `mul_ne_zero` and `mul_ne_zero_iff`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "smul_eq_zero", []], ["mod", "theorem", "smul_ne_zero", []], ["add", "theorem", "smul_ne_zero_iff", []]]}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["mod", "theorem", "support_smul", ["function"]]]}, {"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": []}]}, {"timestamp": 1664105061, "sha": "8f09a402", "message": "chore(category_theory/preadditive/biproducts): speed up biprod.of_components_eq (#16516)", "changes": [{"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}]}, {"timestamp": 1664093858, "sha": "8cd94b84", "message": "feat(order/symm_diff): Heyting bi-implication (#16544)\nDefine `bihimp`, the Heyting bi-implication operator. This is dual to `symm_diff` and generalizes `iff` on propositions.\nDelete `order.imp` as all the material there is now fully superseded by the Heyting algebra material (`himp`, defined in `order.heyting.basic`).", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_himp", []], ["add", "theorem", "compl_himp_compl", []], ["mod", "theorem", "compl_sdiff", []], ["add", "theorem", "compl_sdiff_compl", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "is_compl_iff", []]]}, {"oldPath": "src/order/heyting/basic.lean", "newPath": "src/order/heyting/basic.lean", "changes": [["add", "theorem", "himp_idem", []]]}, {"oldPath": "src/order/imp.lean", "newPath": null, "changes": [["del", "def", "biimp", ["lattice"]], ["del", "theorem", "biimp_comm", ["lattice"]], ["del", "theorem", "biimp_eq_iff", ["lattice"]], ["del", "theorem", "biimp_eq_top_iff", ["lattice"]], ["del", "theorem", "biimp_mp", ["lattice"]], ["del", "theorem", "biimp_mpr", ["lattice"]], ["del", "theorem", "biimp_self", ["lattice"]], ["del", "theorem", "biimp_symm", ["lattice"]], ["del", "theorem", "bot_imp", ["lattice"]], ["del", "theorem", "compl_biimp", ["lattice"]], ["del", "theorem", "compl_biimp_compl", ["lattice"]], ["del", "theorem", "compl_imp", ["lattice"]], ["del", "theorem", "compl_imp_compl", ["lattice"]], ["del", "theorem", "compl_sdiff", ["lattice"]], ["del", "theorem", "compl_symm_diff", ["lattice"]], ["del", "def", "imp", ["lattice"]], ["del", "theorem", "imp_bot", ["lattice"]], ["del", "theorem", "imp_eq_arrow", ["lattice"]], ["del", "theorem", "imp_eq_bot_iff", ["lattice"]], ["del", "theorem", "imp_eq_top_iff", ["lattice"]], ["del", "theorem", "imp_inf_le", ["lattice"]], ["del", "theorem", "imp_mono", ["lattice"]], ["del", "theorem", "imp_self", ["lattice"]], ["del", "theorem", "imp_top", ["lattice"]], ["del", "theorem", "inf_imp_eq", ["lattice"]], ["del", "theorem", "inf_imp_eq_imp_imp", ["lattice"]], ["del", "theorem", "le_imp_iff", ["lattice"]], ["del", "theorem", "top_imp", ["lattice"]]]}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["add", "def", "bihimp", []], ["add", "theorem", "bihimp_assoc", []], ["add", "theorem", "bihimp_bihimp_bihimp_comm", []], ["add", "theorem", "bihimp_bihimp_cancel_left", []], ["add", "theorem", "bihimp_bihimp_cancel_right", []], ["add", "theorem", "bihimp_bihimp_self", []], ["add", "theorem", "bihimp_bihimp_sup", []], ["add", "theorem", "bihimp_bot", []], ["add", "theorem", "bihimp_comm", []], ["add", "theorem", "bihimp_def", []], ["add", "theorem", "bihimp_eq'", []], ["add", "theorem", "bihimp_eq", []], ["add", "theorem", "bihimp_eq_bot", []], ["add", "theorem", "bihimp_eq_inf", []], ["add", "theorem", "bihimp_eq_inf_himp_inf", []], ["add", "theorem", "bihimp_eq_left", []], ["add", "theorem", "bihimp_eq_right", []], ["add", "theorem", "bihimp_eq_top", []], ["add", "theorem", "bihimp_fst", []], ["add", "theorem", "bihimp_himp_eq_inf", []], ["add", "theorem", "bihimp_himp_left", []], ["add", "theorem", "bihimp_himp_right", []], ["add", "theorem", "bihimp_hnot_self", []], ["add", "theorem", "bihimp_iff_iff", []], ["add", "theorem", "bihimp_inf_sup", []], ["add", "theorem", "bihimp_le_iff_left", []], ["add", "theorem", "bihimp_le_iff_right", []], ["add", "theorem", "bihimp_left_comm", []], ["add", "theorem", "bihimp_left_inj", []], ["add", "theorem", "bihimp_left_injective", []], ["add", "theorem", "bihimp_left_involutive", []], ["add", "theorem", "bihimp_left_surjective", []], ["add", "theorem", "bihimp_of_ge", []], ["add", "theorem", "bihimp_of_le", []], ["add", "theorem", "bihimp_right_comm", []], ["add", "theorem", "bihimp_right_inj", []], ["add", "theorem", "bihimp_right_injective", []], ["add", "theorem", "bihimp_right_involutive", []], ["add", "theorem", "bihimp_right_surjective", []], ["add", "theorem", "bihimp_self", []], ["add", "theorem", "bihimp_snd", []], ["add", "theorem", "bihimp_top", []], ["add", "theorem", "bihimp_triangle", []], ["add", "theorem", "bot_bihimp", []], ["add", "theorem", "bihimp_eq_inf", ["codisjoint"]], ["add", "theorem", "codisjoint_bihimp_sup", []], ["add", "theorem", "compl_bihimp", []], ["add", "theorem", "compl_bihimp_compl", []], ["add", "theorem", "compl_bihimp_self", []], ["mod", "theorem", "compl_symm_diff", []], ["add", "theorem", "compl_symm_diff_compl", []], ["add", "theorem", "himp_bihimp", []], ["add", "theorem", "himp_bihimp_eq_inf", []], ["add", "theorem", "himp_bihimp_left", []], ["add", "theorem", "himp_bihimp_right", []], ["add", "theorem", "inf_himp_bihimp", []], ["add", "theorem", "inf_le_bihimp", []], ["add", "theorem", "bihimp_eq_bot", ["is_compl"]], ["add", "theorem", "le_bihimp", []], ["add", "theorem", "le_bihimp_iff", []], ["add", "theorem", "of_dual_bihimp", []], ["add", "theorem", "of_dual_symm_diff", []], ["add", "theorem", "bihimp_apply", ["pi"]], ["add", "theorem", "bihimp_def", ["pi"]], ["add", "theorem", "symm_diff_apply", ["pi"]], ["add", "theorem", "symm_diff_def", ["pi"]], ["add", "theorem", "sdiff_symm_diff_left", []], ["add", "theorem", "sdiff_symm_diff_right", []], ["del", "theorem", "sdiff_symm_diff_self", []], ["add", "theorem", "sup_bihimp_bihimp", []], ["add", "theorem", "sup_himp_bihimp", []], ["add", "theorem", "sup_inf_bihimp", []], ["add", "theorem", "symm_diff_eq'", []], ["mod", "theorem", "symm_diff_eq_bot", []], ["add", "theorem", "symm_diff_eq_top", []], ["del", "theorem", "symm_diff_eq_top_iff", []], ["add", "theorem", "symm_diff_fst", []], ["add", "theorem", "symm_diff_snd", []], ["add", "theorem", "to_dual_bihimp", []], ["add", "theorem", "to_dual_symm_diff", []], ["add", "theorem", "top_bihimp", []]]}]}, {"timestamp": 1664051027, "sha": "2d915e4e", "message": "chore(tactic/{core + compute_degree}): tightening up compute_degree_le (#15649)\nThis PR instantiates meta-variables to fix [this bug](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/debugging.20.60compute_degree_le.60), using code of Floris.\nI also tightened up the main tactic: it uses focus1 and it has a version that does not throw errors, suitable for iterations.", "changes": [{"oldPath": "src/tactic/compute_degree.lean", "newPath": "src/tactic/compute_degree.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "test/compute_degree.lean", "newPath": "test/compute_degree.lean", "changes": []}]}, {"timestamp": 1664028471, "sha": "ba80091d", "message": "feat(data/complex/basic): bundle complex.abs (#16347)\nDoing this this way round makes the refactor in #16340 much easier. I will follow up this PR with similar PRs for `padic_norm` and `padic_norm_e`.", "changes": [{"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": [["add", "theorem", "coe_mk", ["absolute_value"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": []}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/complex/phragmen_lindelof.lean", "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/functions_bounded_at_infty.lean", "newPath": "src/analysis/complex/upper_half_plane/functions_bounded_at_infty.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/compare_exp.lean", "newPath": "src/analysis/special_functions/compare_exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polar_coord.lean", "newPath": "src/analysis/special_functions/polar_coord.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["del", "theorem", "abs_abs_sub_le_abs_sub", ["complex"]], ["del", "theorem", "abs_add", ["complex"]], ["add", "theorem", "abs_apply", ["complex"]], ["mod", "theorem", "abs_conj", ["complex"]], ["add", "theorem", "abs_def", ["complex"]], ["del", "theorem", "abs_div", ["complex"]], ["del", "theorem", "abs_eq_zero", ["complex"]], ["del", "theorem", "abs_inv", ["complex"]], ["del", "theorem", "abs_mul", ["complex"]], ["del", "theorem", "abs_ne_zero", ["complex"]], ["del", "theorem", "abs_neg", ["complex"]], ["del", "theorem", "abs_nonneg", ["complex"]], ["del", "theorem", "abs_one", ["complex"]], ["del", "theorem", "abs_pos", ["complex"]], ["del", "theorem", "abs_sub_comm", ["complex"]], ["del", "theorem", "abs_sub_le", ["complex"]], ["add", "theorem", "abs_conj", ["complex", "abs_theory"]], ["del", "theorem", "abs_zero", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_transform.lean", "newPath": "src/measure_theory/integral/circle_transform.lean", "changes": []}, {"oldPath": "src/number_theory/l_series.lean", "newPath": "src/number_theory/l_series.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}]}, {"timestamp": 1663995997, "sha": "5947fb69", "message": "chore(scripts): update nolints.txt (#16618)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1663976154, "sha": "44eb23a5", "message": "chore(linear_algebra/matrix/adjugate): remove unnecessary fin_cases with (#16605)\nThis was the only use of `fin_cases ... with ...` in mathlib, and it wasn't even necessary. Removing it to avoid having to port unused tactic features.", "changes": [{"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}]}, {"timestamp": 1663964793, "sha": "ac01c538", "message": "chore(data/finset/basic): Scope variables over smaller sections (#16613)\nHaving everything in huge sections makes it harder to adjust typeclasses and variable names locally.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}]}, {"timestamp": 1663954442, "sha": "27b90386", "message": "feat(algebra/punit_instances): linear_ordered_add_comm_monoid_with_top punit (#16609)", "changes": [{"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}]}, {"timestamp": 1663954441, "sha": "01894cc4", "message": "chore(docs): run `bibtool` on `references.bib` (#16606)\nIt seems that this file is frequently extended in the wrong format. This PR just runs the suggested reformatter.\nAt some point we should do this in CI.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1663954439, "sha": "8deb2a68", "message": "feat(topology/separation): connected sets in a t1 space are infinite (#16584)\nAlso rename `eq_univ_of_nonempty_clopen` to `is_clopen.eq_univ`.", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["del", "theorem", "eq_univ_of_nonempty_clopen", []], ["add", "theorem", "eq_univ", ["is_clopen"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "infinite", ["connected_space"]], ["add", "theorem", "infinite_of_nontrivial", ["is_preconnected"]], ["add", "theorem", "trivial_of_discrete", ["preconnected_space"]]]}]}, {"timestamp": 1663954438, "sha": "e1783b0f", "message": "doc(group_theory/sylow): update docstring to include card_eq_multiplicity as a main result (#14354)\nSylow subgroups have been redefined to be maximal p-subgroups, instead of subgroups of cardinality `p^n` where `n` is the multiplicity of `p` in the cardinality of G. Sylow's first theorem basically proves that these two are equivalent. With the new definition the hard part of Sylow's first theorem is really proving the lemma `sylow.card_eq_multiplicity` and not proving the existence of a Sylow subgroup so I included it as a main result.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1663944352, "sha": "8f66240c", "message": "feat(group_theory/group_action): define `distrib_smul` and `smul_zero_class` (#16123)\nThese are two new superclasses of `distrib_mul_action` that get rid of the `mul_action` part:\n * `smul_zero_class` is `has_smul` + `a • 0 = 0`\n * `distrib_smul` is `smul_zero_class` + `a • (x + y) = a • x + a • y`.\nThe motivation for these classes is to instantiate `qsmul` on `splitting_field`: in general scalar multiplication with rational numbers is not a `distrib_mul_action` but it is a `distrib_smul`, and `distrib_smul` is sufficient to lift an action to the `splitting_field`.\nI set up both `distrib_mul_action` and `smul_with_zero` to be subclasses of the above classes, and unify `smul_zero` (depending on `distrib_mul_action`) and `smul_zero'` (depending on `smul_with_zero`) into one lemma.\nThere are a few places where I need to help the elaborator because e.g. it's expecting `units.mk0 a ha • 0 = 0` (with `smul` coming from `distrib_mul_action`) and getting `a • 0 = 0` (with `smul` coming from `smul_zero_class`). Apparently having both the type and instance differ is too hard for the unifier. Because we don't have definitional eta for structures yet, setting up the inheritance is a bit more tricky than you might think; I added an `example` test case to ensure everything stays OK.", "changes": [{"oldPath": "src/algebra/algebra/unitization.lean", "newPath": "src/algebra/algebra/unitization.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/change_of_rings.lean", "newPath": "src/algebra/category/Module/change_of_rings.lean", "changes": [["mod", "theorem", "smul_def'", ["category_theory", "Module", "restrict_scalars"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": "src/algebra/module/prod.lean", "newPath": "src/algebra/module/prod.lean", "changes": []}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}, {"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": []}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": [["del", "theorem", "smul_zero'", []]]}, {"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": []}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": []}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/real/pointwise.lean", "newPath": "src/data/real/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "theorem", "smul_add", []], ["mod", "theorem", "smul_zero", []]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": []}, {"oldPath": "src/information_theory/hamming.lean", "newPath": "src/information_theory/hamming.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/module.lean", "newPath": "src/ring_theory/localization/module.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/topology/support.lean", "newPath": "src/topology/support.lean", "changes": []}]}, {"timestamp": 1663944351, "sha": "249a9c91", "message": "feat(category_theory/limits/shapes/biproducts): more (co)kernel instances (#14188)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "cokernel_biprod_inl_iso", ["category_theory", "limits"]], ["add", "def", "cokernel_biprod_inr_iso", ["category_theory", "limits"]], ["add", "def", "cokernel_biproduct_from_subtype_iso", ["category_theory", "limits"]], ["add", "def", "cokernel_biproduct_ι_iso", ["category_theory", "limits"]], ["add", "def", "cokernel_cofork_biproduct_from_subtype", ["category_theory", "limits"]], ["add", "def", "kernel_biprod_fst_iso", ["category_theory", "limits"]], ["add", "def", "kernel_biprod_snd_iso", ["category_theory", "limits"]], ["add", "def", "kernel_biproduct_to_subtype_iso", ["category_theory", "limits"]], ["add", "def", "kernel_biproduct_π_iso", ["category_theory", "limits"]], ["add", "def", "kernel_fork_biproduct_to_subtype", ["category_theory", "limits"]]]}]}, {"timestamp": 1663934124, "sha": "313f36d4", "message": "feat(order/filter/lift): replace some implications with iffs (#16452)", "changes": [{"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "le_lift'", ["filter"]], ["mod", "theorem", "le_lift", ["filter"]], ["mod", "theorem", "mem_lift'_sets", ["filter"]], ["mod", "theorem", "principal_le_lift'", ["filter"]], ["add", "theorem", "sInter_lift'_sets", ["filter"]], ["add", "theorem", "sInter_lift_sets", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1663934123, "sha": "24b50bfc", "message": "chore(data/finset/basic): move `disjoint` proofs earlier (#16436)\nThis avoids repeating work for `disj_union`, and takes the stance that `disjoint` is part of the lattice API.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "of_image_finset", ["disjoint"]], ["mod", "theorem", "bot_eq_empty", ["finset"]], ["mod", "theorem", "disjoint_bUnion_left", ["finset"]], ["mod", "theorem", "disjoint_bUnion_right", ["finset"]], ["mod", "theorem", "disjoint_filter", ["finset"]], ["mod", "theorem", "disjoint_filter_filter", ["finset"]], ["mod", "theorem", "disjoint_image", ["finset"]], ["mod", "theorem", "disjoint_map", ["finset"]]]}]}, {"timestamp": 1663921356, "sha": "d0507e7b", "message": "feat(analysis/normed_space/affine_isometry): `subtypeₐᵢ` (#16573)\nNow that we have `affine_subspace.subtype`, add the corresponding definition as a bundled affine isometry (so resolving a comment about that being missing).\nThe name uses subscript `ₐᵢ` rather than superscript `ᵃⁱ` as in the notation for `affine_isometry` because Lean does not accept the superscript in identifiers.", "changes": [{"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["add", "theorem", "coe_subtypeₐᵢ", ["affine_subspace"]], ["add", "def", "subtypeₐᵢ", ["affine_subspace"]], ["add", "theorem", "subtypeₐᵢ_linear", ["affine_subspace"]], ["add", "theorem", "subtypeₐᵢ_linear_isometry", ["affine_subspace"]], ["add", "theorem", "subtypeₐᵢ_to_affine_map", ["affine_subspace"]]]}]}, {"timestamp": 1663921355, "sha": "f89fa08b", "message": "chore(tactic): typos in docs (#16510)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1663921353, "sha": "02022cd6", "message": "feat(topology/subset_properties): an infinite type with cofinite topology is irreducible (#16499)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "is_irreducible_iff_singleton", []], ["mod", "theorem", "is_preirreducible_iff_subsingleton", []], ["add", "theorem", "not_preirreducible_nontrivial_t2", []]]}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1663921352, "sha": "53322d0d", "message": "feat(analysis/special_functions/pow, set_theory/*): `positivity` extension for powers (#16462)\nAdd the following `positivity` extensions to handle powers:\n* `positivity_rpow` for real powers\n* `positivity_opow` for ordinal powers\n* `positivity_cardinal_pow` for cardinal powers", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "power_pos", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1663907826, "sha": "028afe5d", "message": "chore(category/endomorphism): remove unneeded ext attribute (#16603)\nRemoves an unnecessary `@[ext]` attribute that used an extended syntax which we are not planning to port to mathlib4.\nCloses #16602.", "changes": [{"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}]}, {"timestamp": 1663907825, "sha": "39723052", "message": "chore(topology/basic): rename lemmas (#16598)\n`interior_eq_iff_open` -> `interior_eq_iff_is_open`, it's dual lemma `closure_eq_iff_is_closed` renamed in #4\n`subset_interior_iff_open` -> `subset_interior_iff_is_open`\n`subset_interior_iff_subset_of_open` -> `is_open.subset_interior_iff`, it's dual lemma `is_closed.closure_subset_iff` renamed in #3251\n`closure_inter_open` -> `is_open.closure_inter`\n`closure_inter_open'` -> `is_open.closure_inter'`", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "closure_inter_open'", []], ["del", "theorem", "closure_inter_open", []], ["add", "theorem", "interior_eq_iff_is_open", []], ["del", "theorem", "interior_eq_iff_open", []], ["mod", "theorem", "mem_iff_closure_subset", ["is_closed"]], ["add", "theorem", "closure_inter'", ["is_open"]], ["add", "theorem", "closure_inter", ["is_open"]], ["add", "theorem", "subset_interior_iff", ["is_open"]], ["mod", "theorem", "is_open_singleton_iff_nhds_eq_pure", []], ["add", "theorem", "subset_interior_iff_is_open", []], ["del", "theorem", "subset_interior_iff_open", []], ["del", "theorem", "subset_interior_iff_subset_of_open", []]]}, {"oldPath": "src/topology/locally_finite.lean", "newPath": "src/topology/locally_finite.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": []}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1663907824, "sha": "79a2eb39", "message": "chore(.github/workflows): `maintainer merge` workflow (#16555)\nThis PR adds a workflow that will listen for PR comments containing the phrase `maintainer merge` at the beginning of a line. It is intended for use by mathlib reviewers to flag to mathlib maintainers that they have reviewed a PR and consider it ready for merging.\n- The workflow will send a message to the maintainer stream on zulip to ping maintainers.\n- The workflow will add a comment confirming that the ping has been sent.\n- The workflow will only work for messages from members of the \"mathlib reviewers\" team in the leanprover-community organization.", "changes": [{"oldPath": null, "newPath": ".github/workflows/maintainer_merge_comment.yml", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/maintainer_merge_review.yml", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/maintainer_merge_review_comment.yml", "changes": []}]}, {"timestamp": 1663907823, "sha": "98cbfb45", "message": "chore(tactic/monotonicity/lemmas): Move lemmas to the correct places (#16509)\nA few lemmas were gathered in `tactic.monotonicity.lemmas` rather than the files they belong to. Generalize them, move them and fix their names.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "lt_of_mul_lt_mul_of_nonpos_left", []], ["add", "theorem", "lt_of_mul_lt_mul_of_nonpos_right", []]]}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "tsub_lt_tsub_left_of_le", []]]}, {"oldPath": "src/analysis/calculus/taylor.lean", "newPath": "src/analysis/calculus/taylor.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": [["del", "theorem", "lt_of_mul_lt_mul_neg_right", []], ["del", "theorem", "mul_mono_nonneg", []], ["del", "theorem", "mul_mono_nonpos", []], ["del", "theorem", "sub_mono_left_strict", ["nat"]], ["del", "theorem", "sub_mono_right_strict", ["nat"]]]}]}, {"timestamp": 1663886738, "sha": "33075a02", "message": "chore(analysis): golf a few proofs (#16600)", "changes": [{"oldPath": "src/analysis/calculus/taylor.lean", "newPath": "src/analysis/calculus/taylor.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/stirling.lean", "newPath": "src/analysis/special_functions/stirling.lean", "changes": []}]}, {"timestamp": 1663886737, "sha": "9806b5c3", "message": "doc(topology/algebra/filter_basis): modify doc of `add_group_filter_basis_of_comm` (#16597)\nAdded the `additive` adjective to the doc for the @additive variation `add_group_filter_basis_of_comm` of `group_filter_basis_of_comm`", "changes": [{"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": []}]}, {"timestamp": 1663886736, "sha": "1732f9cf", "message": "chore(topology): golf (#16585)\n2 minor golfs from an old branch", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1663886735, "sha": "f18afbe9", "message": "feat(set_theory/game/nim): recursors for left/right nim moves (#15408)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "def", "left_moves_nim_rec_on", ["pgame"]], ["add", "def", "right_moves_nim_rec_on", ["pgame"]]]}]}, {"timestamp": 1663872087, "sha": "951bf1d9", "message": "refactor(data/set/basic): Remove _eq lemmas (#16572)\nThis PR removes `_eq` lemmas from `data.set.basic` which asset a `rfl` propositional equality, in favour of the `iff` versions, and makes the latter `simp` lemmas if they weren't already.", "changes": [{"oldPath": "archive/100-theorems-list/30_ballot_problem.lean", "newPath": "archive/100-theorems-list/30_ballot_problem.lean", "changes": []}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": []}, {"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "newPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/split.lean", "newPath": "src/analysis/box_integral/partition/split.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/convex/join.lean", "newPath": "src/analysis/convex/join.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polar_coord.lean", "newPath": "src/analysis/special_functions/polar_coord.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/inc_matrix.lean", "newPath": "src/combinatorics/simple_graph/inc_matrix.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "mem_compl_eq", ["set"]], ["mod", "theorem", "mem_compl_iff", ["set"]], ["del", "theorem", "mem_empty_eq", ["set"]], ["add", "theorem", "mem_empty_iff_false", ["set"]], ["del", "theorem", "mem_image2_eq", ["set"]], ["del", "theorem", "mem_image_eq", ["set"]], ["del", "theorem", "mem_inter_eq", ["set"]], ["mod", "theorem", "mem_inter_iff", ["set"]], ["del", "theorem", "mem_sep_eq", ["set"]], ["mod", "theorem", "mem_sep_iff", ["set"]], ["mod", "theorem", "mem_union", ["set"]], ["del", "theorem", "mem_union_eq", ["set"]], ["del", "theorem", "nmem_set_of_eq", ["set"]], ["add", "theorem", "nmem_set_of_iff", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali_family.lean", "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_order.lean", "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/function/egorov.lean", "newPath": "src/measure_theory/function/egorov.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/curry.lean", "newPath": "src/order/filter/curry.lean", "changes": []}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": []}, {"oldPath": "src/probability/martingale/borel_cantelli.lean", "newPath": "src/probability/martingale/borel_cantelli.lean", "changes": []}, {"oldPath": "src/probability/process/hitting_time.lean", "newPath": "src/probability/process/hitting_time.lean", "changes": []}, {"oldPath": "src/probability/process/stopping.lean", "newPath": "src/probability/process/stopping.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/locally_finite.lean", "newPath": "src/topology/locally_finite.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/partition_of_unity.lean", "newPath": "src/topology/metric_space/partition_of_unity.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_convergence.lean", "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}]}, {"timestamp": 1663863953, "sha": "3dc8592b", "message": "feat(tactic/positivity): Extension for `coe` (#16141)\nAdd:\n* a case in the main `positivity` tactic to show that `0 ≤ a` in a `canonically_ordered_add_monoid`\n* `positivity_coe`, an extension to `positivity`, to turn `0 ≤ a`/`0 < a` into `0 ≤ ↑a`/`0 < ↑a` when `a` is of type `ℕ`, `ℤ`, `ℚ`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_nonneg", ["ennreal"]]]}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["add", "theorem", "coe_ennreal_pos", ["ereal"]], ["mod", "theorem", "coe_ennreal_top", ["ereal"]], ["mod", "theorem", "coe_ennreal_zero", ["ereal"]], ["mod", "theorem", "coe_zero", ["ereal"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["add", "theorem", "coe_nonneg", ["hyperreal"]], ["mod", "theorem", "coe_pos", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1663852331, "sha": "69071436", "message": "feat(geometry/manifold/instances/sphere): the differential of the embedding of the sphere into its ambient space (#16466)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": [["add", "theorem", "has_fderiv_at_stereo_inv_fun_aux", []], ["add", "theorem", "has_fderiv_at_stereo_inv_fun_aux_comp_coe", []], ["add", "theorem", "mfderiv_coe_sphere_injective", []], ["add", "theorem", "range_mfderiv_coe_sphere", []], ["add", "theorem", "stereographic_apply_neg", []], ["add", "theorem", "stereographic_neg_apply", []]]}]}, {"timestamp": 1663844273, "sha": "e18fa7b9", "message": "feat(probability/martingale/centering): uniqueness of Doob's decomposition (#16532)", "changes": [{"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": [["add", "theorem", "eq_zero_of_predicatable", ["measure_theory", "martingale"]], ["add", "theorem", "zero_le_of_predictable", ["measure_theory", "submartingale"]], ["add", "theorem", "le_zero_of_predictable", ["measure_theory", "supermartingale"]]]}, {"oldPath": "src/probability/martingale/centering.lean", "newPath": "src/probability/martingale/centering.lean", "changes": [["add", "theorem", "martingale_part_add_ae_eq", ["measure_theory"]], ["add", "theorem", "predictable_part_add_ae_eq", ["measure_theory"]]]}, {"oldPath": "src/probability/process/adapted.lean", "newPath": "src/probability/process/adapted.lean", "changes": [["add", "theorem", "adapted", ["measure_theory", "predictable"]]]}]}, {"timestamp": 1663829643, "sha": "f4210e94", "message": "feat(data/polynomial/ring_division): move lemmas, add lemmas (#16432)\nRename `count_map_roots` to `count_map_roots_of_injective`.\nAdd 8 lemmas:\n```\nle_root_multiplicity_iff\nroot_multiplicity_le_iff\npow_root_multiplicity_not_dvd\n_root_.multiset.prod_X_sub_C_dvd_iff_le_roots\ncount_map_roots\nmap_roots_le\nmap_roots_le_of_injective\ncard_roots_le_map\n```\nRemove `root_multiplicity_of_dvd`, it's just the left direction of `le_root_multiplicity_iff`.\nMove and golf 3 lemmas:\n```\nle_root_multiplicity_map (8 -> 5)\neq_root_multiplicity_map (10 -> 7)\nroots_map_of_injective_card_eq_total_degree (7 -> 4)\n```\n- [x] depends on: #16440", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "prod_X_sub_C_dvd_iff_le_roots", ["multiset"]], ["add", "theorem", "card_roots_le_map", ["polynomial"]], ["mod", "theorem", "count_map_roots", ["polynomial"]], ["add", "theorem", "count_map_roots_of_injective", ["polynomial"]], ["add", "theorem", "le_root_multiplicity_iff", ["polynomial"]], ["add", "theorem", "map_roots_le", ["polynomial"]], ["add", "theorem", "map_roots_le_of_injective", ["polynomial"]], ["add", "theorem", "pow_root_multiplicity_not_dvd", ["polynomial"]], ["add", "theorem", "root_multiplicity_le_iff", ["polynomial"]], ["del", "theorem", "root_multiplicity_of_dvd", ["polynomial"]], ["del", "theorem", "roots_map_of_injective_card_eq_total_degree", ["polynomial"]], ["add", "theorem", "roots_map_of_injective_of_card_eq_nat_degree", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}]}, {"timestamp": 1663826318, "sha": "ec5f9adc", "message": "feat(analysis/convolution): relax typeclasses and add lemma (#16587)\n* Relax type-class conditions on `measure_theory.integrable.integrable_convolution` and `convolution_flip`\n* Add `integral_convolution`", "changes": [{"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": [["add", "theorem", "integral_convolution", []]]}]}, {"timestamp": 1663793791, "sha": "88f41bb0", "message": "feat(data/complex/exponential): `positivity` extension for `real.exp` (#16492)\nAdd `positivity_exp`, a `positivity` extension to prove `0 < real.exp r` for all `r`.", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1663773988, "sha": "b1539919", "message": "doc(metric_space/basic): modify doc for metric spaces adding pseudo metric spaces (#16577)\nThe doc preceeding the `pseudo_metric_space` instance spoke only about `metric spaces`. I have added the `pseudo_metric` version.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1663763811, "sha": "84b27545", "message": "feat(algebra/field/opposite): Missing instances (#16564)\nA few missing field-like instances for `mul_opposite` and `add_opposite`.", "changes": [{"oldPath": "src/algebra/field/opposite.lean", "newPath": "src/algebra/field/opposite.lean", "changes": []}]}, {"timestamp": 1663755301, "sha": "aae2a82f", "message": "feat(algebra/order/hom/basic): `positivity` extension for nonnegative homs (#16228)\nAdd `positivity_map`, a `positivity` extension for expressions of the form `f x` where `f : F` where `nonneg_hom_class F α β`. Golf existing proofs using it.", "changes": [{"oldPath": "src/algebra/order/hom/basic.lean", "newPath": "src/algebra/order/hom/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1663748120, "sha": "d2057271", "message": "feat(topology/constructions): add/golf lemmas about `sigma` (#16571)\n* add some `iff` lemmas;\n* golf some proofs.", "changes": [{"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "comap_sigma_mk_nhds", []], ["add", "theorem", "sigma_map", ["continuous"]], ["mod", "theorem", "continuous_sigma", []], ["add", "theorem", "continuous_sigma_iff", []], ["mod", "theorem", "continuous_sigma_map", []], ["mod", "theorem", "embedding_sigma_map", []], ["add", "theorem", "inducing_sigma_map", []], ["add", "theorem", "is_closed_range_sigma_mk", []], ["del", "theorem", "is_closed_sigma_mk", []], ["mod", "theorem", "is_open_map_sigma", []], ["add", "theorem", "is_open_map_sigma_map", []], ["add", "theorem", "open_embedding_sigma_map", []], ["add", "theorem", "nhds_eq", ["sigma"]], ["add", "theorem", "nhds_mk", ["sigma"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}]}, {"timestamp": 1663748119, "sha": "a6d28ae9", "message": "feat(topology/algebra/mul_action): `add_torsor.connected_space` (#16471)\nAdd the lemma that an `add_torsor` for a connected space is itself a connected space, given `has_continuous_vadd`.", "changes": [{"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}]}, {"timestamp": 1663748118, "sha": "ae9b867e", "message": "feat(analysis/seminorm): continuity criterion for seminorms (#16402)", "changes": [{"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": [["add", "theorem", "abs_sub_map_le_div", []]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "continuous_at_zero", ["seminorm"]], ["add", "theorem", "continuous_of_le", ["seminorm"]], ["add", "theorem", "mem_ball_self", ["seminorm"]], ["add", "theorem", "norm_sub_map_le_sub", ["seminorm"]]]}]}, {"timestamp": 1663748116, "sha": "e2ce3fa0", "message": "feat(linear_algebra/affine_space/affine_subspace): `affine_subspace.subtype` (#16372)\nDefine `affine_subspace.subtype`, the embedding map from an affine\nsubspace to the ambient affine space as a bundled affine map,\nanalogous to `submodule.subtype`.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "coe_subtype", ["affine_subspace"]], ["add", "theorem", "injective_subtype", ["affine_subspace"]], ["add", "theorem", "subtype_apply", ["affine_subspace"]], ["add", "theorem", "subtype_linear", ["affine_subspace"]]]}]}, {"timestamp": 1663748115, "sha": "9936c3df", "message": "feat(ring_theory/graded_algebra/basic): lemmas about rings graded by canonically ordered monoids (#16083)\nWhen the `canonically_ordered_add_monoid` `has_ordered_sub` and is cancellative (equivalent to the `[contravariant_class ι ι (+) (≤)]` assumption):\n* `(decompose 𝒜 (a * b) n : A) = if i ≤ n then a * decompose 𝒜 b (n - i) else 0` for homogeneous `a` of degree `i`\n* `(decompose 𝒜 (a * b) n : A) = if i ≤ n then (decompose 𝒜 a (n - i)) * b else 0` for homogeneous `b` of degree `i`\nExamples of such monoids include ℕ and finitely supported functions to ℕ.", "changes": [{"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["mod", "theorem", "coe_mul_apply", ["direct_sum"]], ["add", "theorem", "coe_mul_apply_eq_dfinsupp_sum", ["direct_sum"]], ["add", "theorem", "coe_mul_of_apply", ["direct_sum"]], ["add", "theorem", "coe_mul_of_apply_add", ["direct_sum"]], ["add", "theorem", "coe_mul_of_apply_aux", ["direct_sum"]], ["add", "theorem", "coe_mul_of_apply_of_le", ["direct_sum"]], ["add", "theorem", "coe_mul_of_apply_of_not_le", ["direct_sum"]], ["add", "theorem", "coe_of_mul_apply", ["direct_sum"]], ["add", "theorem", "coe_of_mul_apply_add", ["direct_sum"]], ["add", "theorem", "coe_of_mul_apply_aux", ["direct_sum"]], ["add", "theorem", "coe_of_mul_apply_of_le", ["direct_sum"]], ["add", "theorem", "coe_of_mul_apply_of_not_le", ["direct_sum"]], ["mod", "def", "coe_ring_hom", ["direct_sum"]], ["mod", "theorem", "coe_ring_hom_of", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["add", "theorem", "mul_eq_dfinsupp_sum", ["direct_sum"]]]}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["mod", "theorem", "coe_decompose_mul_add_of_left_mem", ["direct_sum"]], ["mod", "theorem", "coe_decompose_mul_add_of_right_mem", ["direct_sum"]], ["add", "theorem", "coe_decompose_mul_of_left_mem", ["direct_sum"]], ["add", "theorem", "coe_decompose_mul_of_left_mem_of_le", ["direct_sum"]], ["add", "theorem", "coe_decompose_mul_of_left_mem_of_not_le", ["direct_sum"]], ["add", "theorem", "coe_decompose_mul_of_right_mem", ["direct_sum"]], ["add", "theorem", "coe_decompose_mul_of_right_mem_of_le", ["direct_sum"]], ["add", "theorem", "coe_decompose_mul_of_right_mem_of_not_le", ["direct_sum"]], ["mod", "theorem", "decompose_mul_add_left", ["direct_sum"]], ["mod", "theorem", "decompose_mul_add_right", ["direct_sum"]]]}]}, {"timestamp": 1663748114, "sha": "30553f13", "message": "feat(algebra/hom/centroid): Introduce the centroid of a (non-unital, non-associative) semiring (#12746)\nDefine the centroid of a (non-unital, non-associative) semiring and shows that it forms a semiring. The centroid of a (non-unital, non-associative) ring is a ring. \nWhen the ring is prime, the centroid is commutative.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebra/hom/centroid.lean", "changes": [["add", "theorem", "add_apply", ["centroid_hom"]], ["add", "theorem", "cancel_left", ["centroid_hom"]], ["add", "theorem", "cancel_right", ["centroid_hom"]], ["add", "theorem", "coe_add", ["centroid_hom"]], ["add", "theorem", "coe_comp", ["centroid_hom"]], ["add", "theorem", "coe_comp_add_monoid_hom", ["centroid_hom"]], ["add", "theorem", "coe_id", ["centroid_hom"]], ["add", "theorem", "coe_int_cast", ["centroid_hom"]], ["add", "theorem", "coe_mul", ["centroid_hom"]], ["add", "theorem", "coe_nat_cast", ["centroid_hom"]], ["add", "theorem", "coe_neg", ["centroid_hom"]], ["add", "theorem", "coe_nsmul", ["centroid_hom"]], ["add", "theorem", "coe_one", ["centroid_hom"]], ["add", "theorem", "coe_sub", ["centroid_hom"]], ["add", "theorem", "coe_to_add_monoid_hom", ["centroid_hom"]], ["add", "theorem", "coe_to_add_monoid_hom_id", ["centroid_hom"]], ["add", "theorem", "coe_to_add_monoid_hom_injective", ["centroid_hom"]], ["add", "theorem", "coe_zero", ["centroid_hom"]], ["add", "def", "comm_ring", ["centroid_hom"]], ["add", "def", "comp", ["centroid_hom"]], ["add", "theorem", "comp_apply", ["centroid_hom"]], ["add", "theorem", "comp_assoc", ["centroid_hom"]], ["add", "theorem", "comp_id", ["centroid_hom"]], ["add", "theorem", "comp_mul_comm", ["centroid_hom"]], ["add", "theorem", "ext", ["centroid_hom"]], ["add", "theorem", "id_apply", ["centroid_hom"]], ["add", "theorem", "id_comp", ["centroid_hom"]], ["add", "theorem", "int_cast_apply", ["centroid_hom"]], ["add", "theorem", "mul_apply", ["centroid_hom"]], ["add", "theorem", "nat_cast_apply", ["centroid_hom"]], ["add", "theorem", "neg_apply", ["centroid_hom"]], ["add", "theorem", "nsmul_apply", ["centroid_hom"]], ["add", "theorem", "one_apply", ["centroid_hom"]], ["add", "theorem", "sub_apply", ["centroid_hom"]], ["add", "def", "to_End", ["centroid_hom"]], ["add", "theorem", "to_End_add", ["centroid_hom"]], ["add", "theorem", "to_End_injective", ["centroid_hom"]], ["add", "theorem", "to_End_int_cast", ["centroid_hom"]], ["add", "theorem", "to_End_mul", ["centroid_hom"]], ["add", "theorem", "to_End_nat_cast", ["centroid_hom"]], ["add", "theorem", "to_End_neg", ["centroid_hom"]], ["add", "theorem", "to_End_nsmul", ["centroid_hom"]], ["add", "theorem", "to_End_one", ["centroid_hom"]], ["add", "theorem", "to_End_pow", ["centroid_hom"]], ["add", "theorem", "to_End_sub", ["centroid_hom"]], ["add", "theorem", "to_End_zero", ["centroid_hom"]], ["add", "theorem", "to_End_zsmul", ["centroid_hom"]], ["add", "theorem", "to_add_monoid_hom_eq_coe", ["centroid_hom"]], ["add", "theorem", "to_fun_eq_coe", ["centroid_hom"]], ["add", "theorem", "zero_apply", ["centroid_hom"]], ["add", "structure", "centroid_hom", []]]}]}, {"timestamp": 1663740986, "sha": "236a0af4", "message": "feat(topology/algebra/order): a linear order is T₅ (#16540)", "changes": [{"oldPath": null, "newPath": "src/data/set/intervals/ord_connected_component.lean", "changes": [["add", "theorem", "disjoint_left_ord_separating_set", ["set"]], ["add", "theorem", "disjoint_ord_t5_nhd", ["set"]], ["add", "theorem", "disjoint_right_ord_separating_set", ["set"]], ["add", "theorem", "dual_ord_connected_component", ["set"]], ["add", "theorem", "dual_ord_connected_section", ["set"]], ["add", "theorem", "dual_ord_separating_set", ["set"]], ["add", "theorem", "eq_of_mem_ord_connected_section_of_interval_subset", ["set"]], ["add", "theorem", "mem_ord_connected_component", ["set"]], ["add", "theorem", "mem_ord_connected_component_comm", ["set"]], ["add", "theorem", "mem_ord_connected_component_ord_connected_proj", ["set"]], ["add", "theorem", "mem_ord_connected_component_trans", ["set"]], ["add", "theorem", "nonempty_ord_connected_component", ["set"]], ["add", "def", "ord_connected_component", ["set"]], ["add", "theorem", "ord_connected_component_empty", ["set"]], ["add", "theorem", "ord_connected_component_eq", ["set"]], ["add", "theorem", "ord_connected_component_eq_empty", ["set"]], ["add", "theorem", "ord_connected_component_inter", ["set"]], ["add", "theorem", "ord_connected_component_ord_connected_proj", ["set"]], ["add", "theorem", "ord_connected_component_subset", ["set"]], ["add", "theorem", "ord_connected_component_univ", ["set"]], ["add", "theorem", "ord_connected_proj_eq", ["set"]], ["add", "theorem", "ord_connected_proj_mem_ord_connected_component", ["set"]], ["add", "def", "ord_connected_section", ["set"]], ["add", "theorem", "ord_connected_section_subset", ["set"]], ["add", "def", "ord_separating_set", ["set"]], ["add", "theorem", "ord_separating_set_comm", ["set"]], ["add", "def", "ord_t5_nhd", ["set"]], ["add", "theorem", "self_mem_ord_connected_component", ["set"]], ["add", "theorem", "subset_ord_connected_component", ["set"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/order/t5.lean", "changes": [["add", "theorem", "compl_section_ord_separating_set_mem_nhds", ["set"]], ["add", "theorem", "compl_section_ord_separating_set_mem_nhds_within_Ici", ["set"]], ["add", "theorem", "compl_section_ord_separating_set_mem_nhds_within_Iic", ["set"]], ["add", "theorem", "ord_connected_component_mem_nhds", ["set"]], ["add", "theorem", "ord_t5_nhd_mem_nhds_set", ["set"]]]}]}, {"timestamp": 1663703940, "sha": "a547b3b3", "message": "feat(order/bounded_order): distrib_lattice instances for with_top and with_bot (#16569)", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}]}, {"timestamp": 1663692207, "sha": "a5ed4088", "message": "feat(group_theory/coset): Construct the embedding `H ⧸ ⨅ i, f i → Π i, H ⧸ f i` (#16560)\nThis PR constructs the embedding `H ⧸ ⨅ i, f i → Π i, H ⧸ f i`, which is needed for #16393.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "def", "quotient_infi_embedding", ["subgroup"]], ["add", "theorem", "quotient_infi_embedding_apply_mk", ["subgroup"]], ["mod", "def", "quotient_subgroup_of_embedding_of_le", ["subgroup"]], ["add", "theorem", "quotient_subgroup_of_embedding_of_le_apply_mk", ["subgroup"]], ["add", "def", "quotient_subgroup_of_map_of_le", ["subgroup"]], ["add", "theorem", "quotient_subgroup_of_map_of_le_apply_mk", ["subgroup"]]]}]}, {"timestamp": 1663685999, "sha": "b7cc093e", "message": "chore(topology/constructions): use `variables` (#16562)\nAlso move `continuous_pi_iff` up and golf its proof.", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "update", ["continuous"]], ["mod", "theorem", "continuous_apply", []], ["mod", "theorem", "continuous_apply_apply", []], ["mod", "theorem", "update", ["continuous_at"]], ["mod", "theorem", "continuous_at_apply", []], ["mod", "theorem", "continuous_at_pi", []], ["mod", "theorem", "continuous_pi", []], ["mod", "theorem", "continuous_pi_iff", []], ["mod", "theorem", "continuous_update", []], ["mod", "theorem", "exists_finset_piecewise_mem_of_mem_nhds", []], ["mod", "theorem", "apply", ["filter", "tendsto"]], ["mod", "theorem", "update", ["filter", "tendsto"]], ["mod", "theorem", "inducing_infi_to_pi", []], ["mod", "theorem", "interior_pi_set", []], ["mod", "theorem", "is_closed_set_pi", []], ["mod", "theorem", "is_open_set_pi", []], ["mod", "theorem", "mem_nhds_of_pi_mem_nhds", []], ["mod", "theorem", "nhds_pi", []], ["mod", "theorem", "pi_eq_generate_from", []], ["mod", "theorem", "pi_generate_from_eq", []], ["mod", "theorem", "pi_generate_from_eq_finite", []], ["mod", "theorem", "set_pi_mem_nhds", []], ["mod", "theorem", "set_pi_mem_nhds_iff", []], ["mod", "theorem", "tendsto_pi_nhds", []]]}]}, {"timestamp": 1663672677, "sha": "4aab2abc", "message": "feat(combinatorics/additive/pluennecke_ruzsa): The Plünnecke-Ruzsa inequality (#15440)\nProve the Ruzsa triangle inequalities, the Plünnecke-Petridis lemma, and the Plünnecke-Ruzsa inequality.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/additive/pluennecke_ruzsa.lean", "changes": [["add", "theorem", "card_add_nsmul_le", ["finset"]], ["add", "theorem", "card_div_mul_le_card_div_mul_card_div", ["finset"]], ["add", "theorem", "card_div_mul_le_card_div_mul_card_mul", ["finset"]], ["add", "theorem", "card_div_mul_le_card_mul_mul_card_div", ["finset"]], ["add", "theorem", "card_div_mul_le_card_mul_mul_card_mul", ["finset"]], ["add", "theorem", "card_mul_mul_card_le_card_mul_mul_card_mul", ["finset"]], ["add", "theorem", "card_mul_mul_le_card_div_mul_card_div", ["finset"]], ["add", "theorem", "card_mul_mul_le_card_div_mul_card_mul", ["finset"]], ["add", "theorem", "card_mul_mul_le_card_mul_mul_card_div", ["finset"]], ["add", "theorem", "card_mul_pow_le", ["finset"]], ["add", "theorem", "card_pow_div_pow_le'", ["finset"]], ["add", "theorem", "card_pow_div_pow_le", ["finset"]], ["add", "theorem", "card_pow_le'", ["finset"]], ["add", "theorem", "card_pow_le", ["finset"]], ["add", "theorem", "mul_pluennecke_petridis", ["finset"]]]}]}, {"timestamp": 1663672676, "sha": "744170a9", "message": "feat(data/pfun): Product of partial functions (#15389)\nDefine `pfun.prod : (α →. γ) → (β →. δ) → α × β →. γ × δ`.", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "dom_prod_lift", ["pfun"]], ["add", "theorem", "dom_prod_map", ["pfun"]], ["add", "theorem", "get_prod_lift", ["pfun"]], ["add", "theorem", "get_prod_map", ["pfun"]], ["add", "theorem", "mem_prod_lift", ["pfun"]], ["add", "theorem", "mem_prod_map", ["pfun"]], ["add", "def", "prod_lift", ["pfun"]], ["add", "theorem", "prod_lift_apply", ["pfun"]], ["add", "theorem", "prod_lift_fst_comp_snd_comp", ["pfun"]], ["add", "def", "prod_map", ["pfun"]], ["add", "theorem", "prod_map_apply", ["pfun"]], ["add", "theorem", "prod_map_comp_comp", ["pfun"]], ["add", "theorem", "prod_map_id_id", ["pfun"]]]}]}, {"timestamp": 1663666503, "sha": "dc680a80", "message": "feat(topology/uniform_space): Every Cauchy sequence over ℕ is totally bounded (#16563)\nThis PR proves that the image of every Cauchy sequence `ℕ → α` is totally bounded.", "changes": [{"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "totally_bounded_range", ["cauchy_seq"]]]}]}, {"timestamp": 1663657775, "sha": "b76d2b40", "message": "feat(measure_theory/measurable_space): add `prod.measurable_singleton_class` (#16559)\n* golf `pi.measurable_singleton_class`, rename from `measurable_singleton_class.pi`;\n* add `prod.measurable_singleton_class`.", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}]}, {"timestamp": 1663657774, "sha": "95d67152", "message": "feat(model_theory/types): Complete types over a theory (#16548)\nDefines the space of complete types over a particular theory in a particular type of variables", "changes": [{"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "subset", ["first_order", "language", "Theory", "complete_theory"]]]}, {"oldPath": null, "newPath": "src/model_theory/types.lean", "changes": [["add", "theorem", "Inter_set_of_subset", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "compl_set_of_mem", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "is_maximal", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "mem_of_models", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "mem_or_not_mem", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "nonempty_iff", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "not_mem_iff", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "set_of_mem_eq_univ_iff", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "set_of_subset_eq_empty_iff", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "set_of_subset_eq_univ_iff", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "subset", ["first_order", "language", "Theory", "complete_type"]], ["add", "theorem", "to_list_foldr_inf_mem", ["first_order", "language", "Theory", "complete_type"]], ["add", "structure", "complete_type", ["first_order", "language", "Theory"]]]}]}, {"timestamp": 1663657773, "sha": "560891c4", "message": "refactor(data/real/basic): make `⊓` and `⊔` computable on reals (#16463)\nThis also makes `norm` and `dist` computable on `real`, `nnreal`, `rat`, and `int`.\nFrom a mathematical point of view that doesn't care about computability, this still contains the (mildly) interesting result that the maximum of two reals is equal to the real produced by taking the elementwise maximum of the two cauchy sequences.\nThis change causes some unpleasant elaboration pain in `modular.lean` for reasons presumably linked to unification of dependent typeclasses. It's not clear to me precisely what the cause if.", "changes": [{"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": [["add", "def", "to_sSet", ["Top"]]]}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ordered.lean", "newPath": "src/analysis/normed_space/ordered.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "mk_inf", ["real"]], ["add", "theorem", "mk_sup", ["real"]], ["add", "theorem", "of_cauchy_inf", ["real"]], ["add", "theorem", "of_cauchy_sup", ["real"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "def", "nnabs", ["real"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/topology/instances/rat.lean", "newPath": "src/topology/instances/rat.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}]}, {"timestamp": 1663651607, "sha": "0a67ddd4", "message": "feat(topology/separation): define `regular_space` (#16360)", "changes": [{"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": [["mod", "theorem", "nhds_basis_closed_balanced", []]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "disjoint_iff_left", ["filter", "has_basis"]], ["add", "theorem", "disjoint_iff_right", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "t3_space", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "prod_fiberwise", ["has_sum"]], ["mod", "theorem", "sigma", ["has_sum"]], ["mod", "theorem", "sigma'", ["summable"]], ["mod", "theorem", "sigma", ["summable"]], ["mod", "theorem", "tendsto_tsum_compl_at_top_zero", []], ["mod", "theorem", "tsum_comm'", []], ["mod", "theorem", "tsum_prod'", []], ["mod", "theorem", "tsum_sigma'", []]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/extend_from.lean", "newPath": "src/topology/algebra/order/extend_from.lean", "changes": []}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/extend_from.lean", "newPath": "src/topology/extend_from.lean", "changes": [["mod", "theorem", "continuous_extend_from", []], ["mod", "theorem", "continuous_on_extend_from", []]]}, {"oldPath": "src/topology/inseparable.lean", "newPath": "src/topology/inseparable.lean", "changes": [["add", "theorem", "specializes_iff", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "mono", ["is_closed"]], ["add", "theorem", "mono", ["is_open"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "closed_nhds_basis", []], ["add", "theorem", "disjoint_nhds_nhds_iff_not_specializes", []], ["add", "theorem", "disjoint_nhds_nhds_set", []], ["add", "theorem", "disjoint_nhds_set_nhds", []], ["add", "theorem", "exists_mem_nhds_is_closed_subset", []], ["add", "theorem", "nhds_closure", ["filter", "has_basis"]], ["add", "theorem", "has_basis_nhds_closure", []], ["add", "theorem", "has_basis_opens_closure", []], ["add", "theorem", "is_closed_set_of_inseparable", []], ["add", "theorem", "is_closed_set_of_specializes", []], ["add", "theorem", "is_open_set_of_disjoint_nhds_nhds", []], ["add", "theorem", "lift'_nhds_closure", []], ["del", "theorem", "nhds_is_closed", []], ["add", "theorem", "inf", ["regular_space"]], ["add", "theorem", "of_basis", ["regular_space"]], ["add", "theorem", "of_exists_mem_nhds_is_closed_subset", ["regular_space"]], ["add", "theorem", "of_lift'_closure", ["regular_space"]], ["add", "theorem", "regular_space_Inf", []], ["add", "theorem", "regular_space_induced", []], ["add", "theorem", "regular_space_infi", []], ["add", "theorem", "regular_space_tfae", []], ["add", "theorem", "specializes_comm", []], ["add", "theorem", "specializes_iff_inseparable", []], ["del", "theorem", "of_lift'_closure", ["t3_space"]], ["mod", "theorem", "exists_closure_subset", ["topological_space", "is_topological_basis"]], ["mod", "theorem", "nhds_basis_closure", ["topological_space", "is_topological_basis"]]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1663637353, "sha": "9019542b", "message": "feat(data/complex/module): get `smul_comm_class ℝ M E` from the one for `ℂ` (#16513)\nThis makes it so all the pieces are in places to realize a non-unital `ℂ`-algebra as a non-unital `ℝ`-algebra.", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}]}, {"timestamp": 1663631089, "sha": "ca827bae", "message": "feat(analysis/special_functions/compare_exp): new file (#16543)\nProve `(λ z, z ^ a * exp (b * z)) =o[l] λ z, z ^ a' * exp (b' * z)` for an appropriate filter `l`, any complex `a`, `a'`, and real `b < b'`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": [["mod", "theorem", "add_is_o", ["asymptotics", "is_equivalent"]], ["add", "theorem", "sub_is_o", ["asymptotics", "is_equivalent"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/compare_exp.lean", "changes": [["add", "theorem", "abs_im_pow_eventually_le_exp_re", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "eventually_ne", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_cpow_exp", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_cpow_mul_exp", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_exp_cpow", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_im_pow_exp_re", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_log_abs_re", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_log_re_re", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_pow_mul_exp", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "is_o_zpow_mul_exp", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "of_bounded_under_abs_im", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "of_bounded_under_im", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "of_is_O_im_re_pow", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "of_is_O_im_re_rpow", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "tendsto_abs", ["complex", "is_exp_cmp_filter"]], ["add", "theorem", "tendsto_abs_re", ["complex", "is_exp_cmp_filter"]], ["add", "structure", "is_exp_cmp_filter", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "abs_arg_le_pi", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "abs_cpow_of_imp", ["complex"]], ["add", "theorem", "is_O_cpow_rpow", ["complex"]], ["add", "theorem", "is_Theta_cpow_const_rpow", ["complex"]], ["add", "theorem", "is_Theta_cpow_rpow", ["complex"]], ["add", "theorem", "is_Theta_exp_arg_mul_im", ["complex"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_ne_at_top'", ["filter", "tendsto"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "is_bounded_under_const", ["filter"]]]}]}, {"timestamp": 1663619912, "sha": "b3951c65", "message": "feat(model_theory/*): Lemmas about satisfiability (#16546)\nProves that applying an injective language map to a theory does not change its satisfiability (`first_order.language.Theory.is_satisfiable_of_is_satisfiable_on_Theory`)\nProves that a union of theories is satisfiable iff any finite union of the theories is (`first_order.language.Theory.is_satisfiable_Union_iff_is_satisfiable_Union_finset`)\nProves a few other minor satisfiability and language map lemmas.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "trivial_structure", ["first_order", "language", "inhabited"]], ["del", "def", "trivial_unit_structure", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": []}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": [["add", "theorem", "is_expansion_on_default", ["first_order", "language", "Lhom", "injective"]], ["add", "theorem", "sum_inl_injective", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_inr_injective", ["first_order", "language", "Lhom"]], ["add", "theorem", "Lhom_with_constants_injective", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "theorem", "is_satisfiable_Union_iff_is_satisfiable_Union_finset", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable_empty", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable_of_is_satisfiable_on_Theory", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable_on_Theory_iff", ["first_order", "language", "Theory"]]]}]}, {"timestamp": 1663619911, "sha": "9824a558", "message": "feat(measure_theory/measurable_space): pi has measurable singletons (#16542)\nThis generalises a result used for the birthday problem.", "changes": [{"oldPath": "archive/100-theorems-list/93_birthday_problem.lean", "newPath": "archive/100-theorems-list/93_birthday_problem.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}]}, {"timestamp": 1663619909, "sha": "c41e1712", "message": "chore(probability/process): split `probability/stopping.lean` into three files, create `process` folder (#16521)\nSplit the content of stopping.lean into the following three files:\n* filtration.lean: definition and properties of filtrations\n* adapted.lean: adapted and progressively measurable processes (and soon predictable as well)\n* stopping.lean: stopping times, stopped values and stopped processes", "changes": [{"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": []}, {"oldPath": "src/probability/martingale/upcrossing.lean", "newPath": "src/probability/martingale/upcrossing.lean", "changes": []}, {"oldPath": null, "newPath": "src/probability/process/adapted.lean", "changes": [["add", "theorem", "div", ["measure_theory", "adapted"]], ["add", "theorem", "inv", ["measure_theory", "adapted"]], ["add", "theorem", "mul", ["measure_theory", "adapted"]], ["add", "theorem", "prog_measurable_of_continuous", ["measure_theory", "adapted"]], ["add", "theorem", "prog_measurable_of_nat", ["measure_theory", "adapted"]], ["add", "theorem", "smul", ["measure_theory", "adapted"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "adapted"]], ["add", "theorem", "strongly_measurable_le", ["measure_theory", "adapted"]], ["add", "def", "adapted", ["measure_theory"]], ["add", "theorem", "adapted_const", ["measure_theory"]], ["add", "theorem", "adapted_zero", ["measure_theory"]], ["add", "theorem", "adapted_natural", ["measure_theory", "filtration"]], ["add", "def", "prog_measurable", ["measure_theory"]], ["add", "theorem", "prog_measurable_const", ["measure_theory"]], ["add", "theorem", "prog_measurable_of_tendsto'", ["measure_theory"]], ["add", "theorem", "prog_measurable_of_tendsto", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/probability/process/filtration.lean", "changes": [["add", "theorem", "Inf_def", ["measure_theory", "filtration"]], ["add", "theorem", "Sup_def", ["measure_theory", "filtration"]], ["add", "theorem", "coe_fn_inf", ["measure_theory", "filtration"]], ["add", "theorem", "coe_fn_sup", ["measure_theory", "filtration"]], ["add", "def", "const", ["measure_theory", "filtration"]], ["add", "theorem", "const_apply", ["measure_theory", "filtration"]], ["add", "def", "limit_process", ["measure_theory", "filtration"]], ["add", "theorem", "mem_ℒp_limit_process_of_snorm_bdd", ["measure_theory", "filtration"]], ["add", "def", "natural", ["measure_theory", "filtration"]], ["add", "theorem", "strongly_measurable_limit_process'", ["measure_theory", "filtration"]], ["add", "theorem", "strongly_measurable_limit_process", ["measure_theory", "filtration"]], ["add", "structure", "filtration", ["measure_theory"]], ["add", "theorem", "uniform_integrable_condexp_filtration", ["measure_theory", "integrable"]], ["add", "theorem", "measurable_set_of_filtration", ["measure_theory"]]]}, {"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/process/hitting_time.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/process/stopping.lean", "changes": [["del", "theorem", "div", ["measure_theory", "adapted"]], ["del", "theorem", "inv", ["measure_theory", "adapted"]], ["del", "theorem", "mul", ["measure_theory", "adapted"]], ["del", "theorem", "prog_measurable_of_continuous", ["measure_theory", "adapted"]], ["del", "theorem", "prog_measurable_of_nat", ["measure_theory", "adapted"]], ["del", "theorem", "smul", ["measure_theory", "adapted"]], ["del", "theorem", "strongly_measurable", ["measure_theory", "adapted"]], ["del", "theorem", "strongly_measurable_le", ["measure_theory", "adapted"]], ["del", "def", "adapted", ["measure_theory"]], ["del", "theorem", "adapted_const", ["measure_theory"]], ["del", "theorem", "adapted_zero", ["measure_theory"]], ["del", "theorem", "Inf_def", ["measure_theory", "filtration"]], ["del", "theorem", "Sup_def", ["measure_theory", "filtration"]], ["del", "theorem", "adapted_natural", ["measure_theory", "filtration"]], ["del", "theorem", "coe_fn_inf", ["measure_theory", "filtration"]], ["del", "theorem", "coe_fn_sup", ["measure_theory", "filtration"]], ["del", "def", "const", ["measure_theory", "filtration"]], ["del", "theorem", "const_apply", ["measure_theory", "filtration"]], ["del", "def", "limit_process", ["measure_theory", "filtration"]], ["del", "theorem", "mem_ℒp_limit_process_of_snorm_bdd", ["measure_theory", "filtration"]], ["del", "def", "natural", ["measure_theory", "filtration"]], ["del", "theorem", "strongly_measurable_limit_process'", ["measure_theory", "filtration"]], ["del", "theorem", "strongly_measurable_limit_process", ["measure_theory", "filtration"]], ["del", "structure", "filtration", ["measure_theory"]], ["del", "theorem", "uniform_integrable_condexp_filtration", ["measure_theory", "integrable"]], ["del", "theorem", "measurable_set_of_filtration", ["measure_theory"]], ["del", "def", "prog_measurable", ["measure_theory"]], ["del", "theorem", "prog_measurable_const", ["measure_theory"]], ["del", "theorem", "prog_measurable_of_tendsto'", ["measure_theory"]], ["del", "theorem", "prog_measurable_of_tendsto", ["measure_theory"]]]}]}, {"timestamp": 1663613597, "sha": "eb7d2664", "message": "feat(data/real/cau_seq): more lemmas about sup and inf (#16553)\nThese will be needed to provide `distrib_lattice real` in terms of these operators later.", "changes": [{"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}]}, {"timestamp": 1663610564, "sha": "043a74e2", "message": "feat(model_theory/satisfiability): Maximally consistent theories (#16547)\nDefines `first_order.language.Theory.is_maximal` to denote maximally consistent theories\nShows that such theories are complete, and that the complete theory of a structure, as constructed, is maximal", "changes": [{"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": [["add", "def", "subtheory_Model", ["first_order", "language", "Theory", "Model"]]]}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "theorem", "is_complete", ["first_order", "language", "Theory", "is_maximal"]], ["add", "theorem", "mem_iff_models", ["first_order", "language", "Theory", "is_maximal"]], ["add", "theorem", "mem_of_models", ["first_order", "language", "Theory", "is_maximal"]], ["add", "theorem", "mem_or_not_mem", ["first_order", "language", "Theory", "is_maximal"]], ["add", "def", "is_maximal", ["first_order", "language", "Theory"]], ["add", "theorem", "models_iff_not_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "is_maximal", ["first_order", "language", "complete_theory"]]]}]}, {"timestamp": 1663616624, "sha": "5ea93be0", "message": "Revert \"first attempt (#16557)\"\nThis reverts commit 1ae5da9d90a97e93425baa5e18cec4128fd90797.", "changes": [{"oldPath": ".github/workflows/maintainer_merge.yml", "newPath": null, "changes": []}]}, {"timestamp": 1663616239, "sha": "1ae5da9d", "message": "first attempt (#16557)", "changes": [{"oldPath": null, "newPath": ".github/workflows/maintainer_merge.yml", "changes": []}]}, {"timestamp": 1663600745, "sha": "d7e97106", "message": "feat(ring_theory/polynomial/symmetric): restore `finset.powerset_len` version of `prod_X_sub_C_coeff` (#16424)\nIn #15008, [`prod_X_add_C_coeff`](https://github.com/leanprover-community/mathlib/pull/15008/files#diff-08ead07a5e3b20f4db52e932b309a2ff767e486e4a0bf7d90b5520d25d95dc57L79-L81) was changed to use `multiset.esymm` in its RHS, which is defined in terms of `multiset.powerset_len` and not defeq to the original version which involves `finset.powerset_len` instead. This PR restores the `finset` version by introducing `finset.esymm_map_val`, a generalized version of `mv_polynomial.esymm_eq_multiset_esymm` (this lemma is renamed from `mv_polynomial.esymm_eq_multiset.esymm` to better conform with mathlib convention).\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Help.20with.20mv_polynomial/near/297702031)", "changes": [{"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": [["add", "theorem", "esymm_map_val", ["finset"]], ["add", "theorem", "aeval_esymm_eq_multiset_esymm", ["mv_polynomial"]], ["del", "theorem", "esymm", ["mv_polynomial", "esymm_eq_multiset"]], ["add", "theorem", "esymm_eq_multiset_esymm", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": [["add", "theorem", "prod_X_add_C_coeff", ["finset"]], ["add", "theorem", "prod_X_add_C_coeff'", ["multiset"]]]}]}, {"timestamp": 1663594433, "sha": "d742555c", "message": "feat(topology/instances/ennreal): diameter of intervals (#16556)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "diam_Icc", ["real"]], ["add", "theorem", "diam_Ico", ["real"]], ["add", "theorem", "diam_Ioc", ["real"]], ["add", "theorem", "diam_Ioo", ["real"]]]}]}, {"timestamp": 1663588177, "sha": "3f498b03", "message": "chore(analysis,topology): replace `noncomputable theory` with `noncomputable` (#16552)\nThe purpose of this change is to make it easier to parse the diff of a future PR that makes a significant fraction of these definitions computable.", "changes": [{"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/rat.lean", "newPath": "src/topology/instances/rat.lean", "changes": []}]}, {"timestamp": 1663581473, "sha": "dcf3c6b6", "message": "feat(group_theory/commutator): Add `commutator_element_self` (#16437)\nThis PR adds `commutator_element_self`, similar to `commutator_element_one_left` and `commutator_element_one_right`.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_element_self", []]]}]}, {"timestamp": 1663571899, "sha": "499ab570", "message": "refactor(topology/constructions): golf, add `@[simp]`/`iff` variants (#16539)", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "sum_map", ["continuous"]], ["add", "theorem", "continuous_sum_elim", []], ["add", "theorem", "continuous_sum_map", []], ["mod", "theorem", "embedding_inl", []], ["mod", "theorem", "embedding_inr", []], ["add", "theorem", "sum_elim", ["is_open_map"]], ["add", "theorem", "is_open_map_inl", []], ["add", "theorem", "is_open_map_inr", []], ["mod", "theorem", "is_open_map_sum", []], ["add", "theorem", "is_open_map_sum_elim", []], ["mod", "theorem", "is_open_range_inl", []], ["mod", "theorem", "is_open_range_inr", []], ["add", "theorem", "nhds_inl", []], ["add", "theorem", "nhds_inr", []], ["mod", "theorem", "open_embedding_inl", []], ["mod", "theorem", "open_embedding_inr", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}]}, {"timestamp": 1663571897, "sha": "77fa4dcf", "message": "feat(data/set/intervals/ord_connected): lemmas about `order_dual` etc (#16534)\n* add `dual_interval`;\n* add `ord_connected_preimage` for an `order_hom_class`, use it to golf `ord_connected_image`;\n* add `dual_ord_connected_iff` and `dual_ord_connected`;\n* one implication from `ord_connected_iff_interval_subset_left` doesn't need `(hx : x ∈ s)`.", "changes": [{"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["add", "theorem", "dual_ord_connected", ["set"]], ["add", "theorem", "dual_ord_connected_iff", ["set"]], ["add", "theorem", "ord_connected_of_interval_subset_left", ["set"]], ["add", "theorem", "ord_connected_preimage", ["set"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "dual_interval", ["set"]]]}]}, {"timestamp": 1663571894, "sha": "7cfeb2fa", "message": "feat(data/real/cau_seq): define sup and inf (#16494)\nShowing that these coincide with the max and min (respectively) of `real` is left to a follow-up PR.\nNote that these do not form a `distrib_lattice` as `cau_seq` does not form a `partial_order`.", "changes": [{"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["add", "theorem", "coe_inf", ["cau_seq"]], ["add", "theorem", "coe_sup", ["cau_seq"]], ["add", "theorem", "inf_equiv_inf", ["cau_seq"]], ["add", "theorem", "inf_lim_zero", ["cau_seq"]], ["add", "theorem", "sup_equiv_sup", ["cau_seq"]], ["add", "theorem", "sup_lim_zero", ["cau_seq"]], ["add", "theorem", "rat_inf_continuous_lemma", []], ["add", "theorem", "rat_sup_continuous_lemma", []]]}]}, {"timestamp": 1663571893, "sha": "e3fac0b5", "message": "refactor(topology/uniform_space/separated): drop `is_separated` (#16458)\nThis predicate is no longer used outside of this file. If we'll need it in the future, then we can redefine it for any topological space in terms of `inseparable`.\nAlso rename `topology.uniform_space.compact_separated` to `topology.uniform_space.compact`.", "changes": [{"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["add", "theorem", "eq_of_cluster_pt_uniformity", []], ["del", "theorem", "eq_of_uniformity_inf_nhds", []], ["del", "theorem", "eq_of_uniformity_inf_nhds_of_is_separated", []], ["del", "theorem", "eq_of_uniform_continuous", ["is_separated"]], ["del", "theorem", "mono", ["is_separated"]], ["del", "theorem", "prod", ["is_separated"]], ["del", "def", "is_separated", []], ["del", "theorem", "is_separated_def'", []], ["del", "theorem", "is_separated_def", []], ["del", "theorem", "is_separated_iff_induced", []], ["del", "theorem", "is_separated_of_separated_space", []], ["del", "theorem", "univ_separated_iff", []]]}]}, {"timestamp": 1663571891, "sha": "85c08a60", "message": "feat(algebra/order/ring): `linear_ordered_comm_semiring` (#16456)\nAdd `linear_ordered_comm_semiring`, a typeclass that was missing from the algebraic order hierarchy for some reason and which acquired a few possible uses over time.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/field_defs.lean", "newPath": "src/algebra/order/field_defs.lean", "changes": []}, {"oldPath": "src/algebra/order/positive/ring.lean", "newPath": "src/algebra/order/positive/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "def", "linear_ordered_comm_semiring", ["function", "injective"]]]}, {"oldPath": "src/combinatorics/pigeonhole.lean", "newPath": "src/combinatorics/pigeonhole.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}]}, {"timestamp": 1663571890, "sha": "bb05277f", "message": "refactor(topology/algebra/with_zero_topology): review API, golf (#16359)\n* use `γ ≠ 0` instead of `units`;\n* deduplicate, golf", "changes": [{"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": [["add", "theorem", "Iio_mem_nhds", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "Iio_mem_nhds_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "directed_lt", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "has_basis_nhds_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "is_closed_iff", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "is_open_Iio", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "is_open_iff", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "nhds_coe_units", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "nhds_eq_update", ["linear_ordered_comm_group_with_zero"]], ["del", "def", "nhds_fun", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "nhds_fun_ok", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "nhds_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "nhds_zero_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "nhds_zero_of_units", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "pure_le_nhds_fun", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "singleton_mem_nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "singleton_mem_nhds_of_units", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "singleton_nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["del", "theorem", "singleton_nhds_of_units", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "tendsto_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "tendsto_units", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "tendsto_zero", ["linear_ordered_comm_group_with_zero"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "nhds_mk_of_nhds_single", ["topological_space"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "of_lift'_closure", ["t3_space"]]]}]}, {"timestamp": 1663571889, "sha": "d673bafe", "message": "feat(topology/algebra/ordered): add lemmas, golf (#16343)\n* add lemmas about `nhds_within_Ici`/`nhds_within_Iic`;\n* move `order_separated` and `order_topology.to_order_closed_topology` up;\n* use new lemmas to golf some proofs.", "changes": [{"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "exists_Icc_mem_subset_of_mem_nhds", []], ["add", "theorem", "exists_Icc_mem_subset_of_mem_nhds_within_Ici", []], ["add", "theorem", "exists_Icc_mem_subset_of_mem_nhds_within_Iic", []], ["add", "theorem", "nhds_within_Ici_basis'", []], ["add", "theorem", "nhds_within_Ici_basis", []], ["add", "theorem", "nhds_within_Ici_eq''", []], ["add", "theorem", "nhds_within_Ici_eq'", []], ["add", "theorem", "nhds_within_Iic_basis'", []], ["add", "theorem", "nhds_within_Iic_basis", []], ["add", "theorem", "nhds_within_Iic_eq''", []], ["add", "theorem", "nhds_within_Iic_eq'", []], ["del", "theorem", "t2_space", ["order_topology"]]]}]}, {"timestamp": 1663566498, "sha": "f59c26da", "message": "feat(analysis/complex/poincare_metric): new file (#14703)\nIntroduce a `metric_space` structure on the upper half plane.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": [["add", "theorem", "coe_pos_real_smul", ["upper_half_plane"]], ["add", "theorem", "coe_vadd", ["upper_half_plane"]], ["add", "theorem", "pos_real_im", ["upper_half_plane"]], ["add", "theorem", "pos_real_re", ["upper_half_plane"]], ["add", "theorem", "vadd_im", ["upper_half_plane"]], ["add", "theorem", "vadd_re", ["upper_half_plane"]]]}, {"oldPath": null, "newPath": "src/analysis/complex/upper_half_plane/metric.lean", "changes": [["add", "def", "center", ["upper_half_plane"]], ["add", "theorem", "center_im", ["upper_half_plane"]], ["add", "theorem", "center_re", ["upper_half_plane"]], ["add", "theorem", "center_zero", ["upper_half_plane"]], ["add", "theorem", "cmp_dist_eq_cmp_dist_coe_center", ["upper_half_plane"]], ["add", "theorem", "cosh_dist'", ["upper_half_plane"]], ["add", "theorem", "cosh_dist", ["upper_half_plane"]], ["add", "theorem", "cosh_half_dist", ["upper_half_plane"]], ["add", "theorem", "dist_center_dist", ["upper_half_plane"]], ["add", "theorem", "dist_coe_center", ["upper_half_plane"]], ["add", "theorem", "dist_coe_center_sq", ["upper_half_plane"]], ["add", "theorem", "dist_coe_le", ["upper_half_plane"]], ["add", "theorem", "dist_eq", ["upper_half_plane"]], ["add", "theorem", "dist_eq_iff_dist_coe_center_eq", ["upper_half_plane"]], ["add", "theorem", "dist_eq_iff_eq_sinh", ["upper_half_plane"]], ["add", "theorem", "dist_eq_iff_eq_sq_sinh", ["upper_half_plane"]], ["add", "theorem", "dist_le_dist_coe_div_sqrt", ["upper_half_plane"]], ["add", "theorem", "dist_le_iff_dist_coe_center_le", ["upper_half_plane"]], ["add", "theorem", "dist_le_iff_le_sinh", ["upper_half_plane"]], ["add", "theorem", "dist_log_im_le", ["upper_half_plane"]], ["add", "theorem", "dist_lt_iff_dist_coe_center_lt", ["upper_half_plane"]], ["add", "theorem", "dist_of_re_eq", ["upper_half_plane"]], ["add", "theorem", "dist_self_center", ["upper_half_plane"]], ["add", "theorem", "exp_half_dist", ["upper_half_plane"]], ["add", "theorem", "im_div_exp_dist_le", ["upper_half_plane"]], ["add", "theorem", "im_le_im_mul_exp_dist", ["upper_half_plane"]], ["add", "theorem", "im_pos_of_dist_center_le", ["upper_half_plane"]], ["add", "theorem", "image_coe_ball", ["upper_half_plane"]], ["add", "theorem", "image_coe_closed_ball", ["upper_half_plane"]], ["add", "theorem", "image_coe_sphere", ["upper_half_plane"]], ["add", "theorem", "isometry_pos_mul", ["upper_half_plane"]], ["add", "theorem", "isometry_real_vadd", ["upper_half_plane"]], ["add", "theorem", "isometry_vertical_line", ["upper_half_plane"]], ["add", "theorem", "le_dist_coe", ["upper_half_plane"]], ["add", "theorem", "le_dist_iff_le_dist_coe_center", ["upper_half_plane"]], ["add", "theorem", "lt_dist_iff_lt_dist_coe_center", ["upper_half_plane"]], ["add", "def", "metric_space_aux", ["upper_half_plane"]], ["add", "theorem", "sinh_half_dist", ["upper_half_plane"]], ["add", "theorem", "sinh_half_dist_add_dist", ["upper_half_plane"]], ["add", "theorem", "tanh_half_dist", ["upper_half_plane"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "continuous_iff_continuous_dist", []]]}]}, {"timestamp": 1663558431, "sha": "08899973", "message": "feat(group_theory/coset): Add `quotient_equiv_of_eq` (#16439)\nThis PR adds `quotient_equiv_of_eq` and renames `equiv_quotient_of_eq` to `quotient_mul_equiv_of_eq`.", "changes": [{"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "def", "quotient_equiv_of_eq", ["subgroup"]], ["add", "theorem", "quotient_equiv_of_eq_mk", ["subgroup"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["del", "def", "equiv_quotient_of_eq", ["quotient_group"]], ["del", "theorem", "equiv_quotient_of_eq_mk", ["quotient_group"]], ["add", "def", "quotient_mul_equiv_of_eq", ["quotient_group"]], ["add", "theorem", "quotient_mul_equiv_of_eq_mk", ["quotient_group"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": []}]}, {"timestamp": 1663554167, "sha": "7ec8f8a2", "message": "feat(analysis/inner_product_space/basic): `ext_inner_map` (#16388)\nEquality of operators by equality of inner products. An easy corollary of `inner_map_self_eq_zero`.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "ext_inner_map", []]]}]}, {"timestamp": 1663547946, "sha": "489bc58f", "message": "feat(topology/homeomorph): add `homeomorph.Pi_congr_right` (#16527)", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "Pi_congr_right", ["homeomorph"]], ["add", "theorem", "Pi_congr_right_symm", ["homeomorph"]]]}]}, {"timestamp": 1663539250, "sha": "b4502fd1", "message": "feat(topology): is_open and is_closed in term of ∀ᶠ and ∃ᶠ (#16545)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "is_closed_iff_frequently", []], ["add", "theorem", "is_open_iff_eventually", []]]}]}, {"timestamp": 1663508712, "sha": "8c9342fd", "message": "feat(probability/martingale/borel_cantelli): Lévy's generalized Borel-Cantelli (#16358)\nThis PR proves the one sided martingale bound and uses it to prove the Lévy's generalized Borel-Cantelli lemma. With the generalized Borel-Cantelli, the still missing second Borel-Cantelli lemma follows by choosing an appropriate filtration.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation/real.lean", "newPath": "src/measure_theory/function/conditional_expectation/real.lean", "changes": [["add", "theorem", "ae_bdd_condexp_of_ae_bdd", ["measure_theory"]], ["add", "theorem", "integral_abs_condexp_le", ["measure_theory"]], ["add", "theorem", "set_integral_abs_condexp_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "snorm_one_le_of_le'", ["measure_theory"]], ["add", "theorem", "snorm_one_le_of_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "set_integral_gt_gt", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": [["add", "theorem", "martingale_const_fun", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/probability/martingale/borel_cantelli.lean", "changes": [["add", "theorem", "is_stopping_time_least_ge", ["measure_theory", "adapted"]], ["add", "theorem", "ae_mem_limsup_at_top_iff", ["measure_theory"]], ["add", "theorem", "adapted_process", ["measure_theory", "borel_cantelli"]], ["add", "theorem", "integrable_process", ["measure_theory", "borel_cantelli"]], ["add", "theorem", "martingale_part_process_ae_eq", ["measure_theory", "borel_cantelli"]], ["add", "theorem", "predictable_part_process_ae_eq", ["measure_theory", "borel_cantelli"]], ["add", "def", "process", ["measure_theory", "borel_cantelli"]], ["add", "theorem", "process_difference_le", ["measure_theory", "borel_cantelli"]], ["add", "theorem", "process_zero", ["measure_theory", "borel_cantelli"]], ["add", "def", "least_ge", ["measure_theory"]], ["add", "theorem", "least_ge_eq_min", ["measure_theory"]], ["add", "theorem", "least_ge_le", ["measure_theory"]], ["add", "theorem", "least_ge_mono", ["measure_theory"]], ["add", "theorem", "ae_not_tendsto_at_top_at_bot", ["measure_theory", "martingale"]], ["add", "theorem", "ae_not_tendsto_at_top_at_top", ["measure_theory", "martingale"]], ["add", "theorem", "bdd_above_range_iff_bdd_below_range", ["measure_theory", "martingale"]], ["add", "theorem", "norm_stopped_value_least_ge_le", ["measure_theory"]], ["add", "theorem", "stopped_value_stopped_value_least_ge", ["measure_theory"]], ["add", "theorem", "bdd_above_iff_exists_tendsto", ["measure_theory", "submartingale"]], ["add", "theorem", "bdd_above_iff_exists_tendsto_aux", ["measure_theory", "submartingale"]], ["add", "theorem", "exists_tendsto_of_abs_bdd_above_aux", ["measure_theory", "submartingale"]], ["add", "theorem", "stopped_value_least_ge", ["measure_theory", "submartingale"]], ["add", "theorem", "stopped_value_least_ge_snorm_le'", ["measure_theory", "submartingale"]], ["add", "theorem", "stopped_value_least_ge_snorm_le", ["measure_theory", "submartingale"]], ["add", "theorem", "tendsto_sum_indicator_at_top_iff'", ["measure_theory"]], ["add", "theorem", "tendsto_sum_indicator_at_top_iff", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale/centering.lean", "newPath": "src/probability/martingale/centering.lean", "changes": [["mod", "theorem", "martingale_part_add_predictable_part", ["measure_theory"]], ["add", "theorem", "martingale_part_bdd_difference", ["measure_theory"]], ["add", "theorem", "predictable_part_bdd_difference", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/order/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": [["add", "theorem", "bdd_above_range_of_tendsto_at_top_at_bot", []], ["add", "theorem", "bdd_below_range_of_tendsto_at_top_at_top", []], ["add", "theorem", "is_bounded_under_ge_at_top", ["filter", "tendsto"]], ["add", "theorem", "is_bounded_under_le_at_bot", ["filter", "tendsto"]], ["add", "theorem", "is_bounded_ge_at_top", []], ["add", "theorem", "is_bounded_le_at_bot", []], ["add", "theorem", "limsup_eq_tendsto_sum_indicator_at_top", []], ["add", "theorem", "limsup_eq_tendsto_sum_indicator_nat_at_top", []]]}]}, {"timestamp": 1663500245, "sha": "827a83eb", "message": "feat(archive/birthday): improve birthday problem (#16528)\nThis adds a measure-theoretic interpretation of the birthday problem; not yet the one with independent uniform random variables, but some form of a step in that direction.\nIt also removes a misleading statement from the YAML to make it clearer that `card_embedding_eq` is not all the work done on the Birthday problem on mathlib. cc @digama0", "changes": [{"oldPath": "archive/100-theorems-list/93_birthday_problem.lean", "newPath": "archive/100-theorems-list/93_birthday_problem.lean", "changes": [["add", "theorem", "birthday_measure", []], ["add", "theorem", "measure_apply", ["fin_fin"]]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_univ_to_finset", ["set"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": [["add", "theorem", "cond_count_of_univ", ["probability_theory"]], ["mod", "theorem", "cond_count_univ", ["probability_theory"]]]}]}, {"timestamp": 1663496228, "sha": "7e74869c", "message": "doc(number_theory/legendre_symbol/jacobi_symbol): remove now spurious reference to 'subscript J' (#16541)\nThis PR just fixes the docstring for the notation. The reference to \"no subscript J in unicode\" doesn't make sense anymore after the notation was changed to `J(a | b)`.", "changes": [{"oldPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "newPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "changes": []}]}, {"timestamp": 1663487657, "sha": "1dc531a0", "message": "feat(measure_theory/integral): finiteness of lower Lebesgue integral (#16514)\nThis PR proves that if a function is integrable and non-negative, then it's lower Lebesgue integral is finite.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "lintegral_lt_top", ["measure_theory", "integrable"]], ["add", "theorem", "set_lintegral_lt_top", ["measure_theory", "integrable_on"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_nnnorm_eq_of_ae_nonneg", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_eq_of_nonneg", ["measure_theory"]], ["add", "theorem", "lintegral_to_real_le_lintegral_nnnorm", ["measure_theory"]]]}]}, {"timestamp": 1663457052, "sha": "ba584a4c", "message": "chore(topology/constructions): deduplicate (#16505)\n* rename `mem_closure_of_continuous` to `set.maps_to.closure_left`, move near `map_mem_closure`;\n* merge `map_mem_closure2` and `mem_closure_of_continuous2` into `map_mem_closure₂`;\n* fix&golf some proofs broken by these changes.", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_left", ["set", "maps_to"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["del", "theorem", "map_mem_closure2", []], ["add", "theorem", "map_mem_closure₂", []], ["del", "theorem", "mem_closure_of_continuous2", []], ["del", "theorem", "mem_closure_of_continuous", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1663438330, "sha": "f8dfe810", "message": "chore(algebra/order/nonneg): add a `distrib_lattice` instance (#16493)", "changes": [{"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": []}]}, {"timestamp": 1663438329, "sha": "57bbd9ec", "message": "chore(order/symm_diff): Generalize to co-Heyting algebras (#16282)\nGeneralize the `symm_diff` material from `(generalized_)boolean_algebra` to `(generalized_)coheyting_algebra`.", "changes": [{"oldPath": "src/data/dfinsupp/interval.lean", "newPath": "src/data/dfinsupp/interval.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "coe_symm_diff", ["finset"]], ["add", "theorem", "mem_symm_diff", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_symm_diff_distrib_left", ["set"]], ["add", "theorem", "inter_symm_diff_distrib_right", ["set"]], ["add", "theorem", "le_iff_subset", ["set"]], ["add", "theorem", "lt_iff_ssubset", ["set"]], ["add", "theorem", "mem_symm_diff", ["set"]], ["add", "theorem", "symm_diff_subset_union", ["set"]]]}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["mod", "theorem", "compl_symm_diff_self", []], ["add", "theorem", "hnot_symm_diff_self", []], ["add", "theorem", "inf_sup_symm_diff", []], ["mod", "theorem", "symm_diff_eq_top", ["is_compl"]], ["add", "theorem", "sdiff_symm_diff_eq_sup", []], ["mod", "def", "symm_diff", []], ["mod", "theorem", "symm_diff_compl_self", []], ["mod", "theorem", "symm_diff_def", []], ["mod", "theorem", "symm_diff_eq_iff_sdiff_eq", []], ["mod", "theorem", "symm_diff_eq_sup_sdiff_inf", []], ["add", "theorem", "symm_diff_hnot_self", []], ["add", "theorem", "symm_diff_le", []], ["add", "theorem", "symm_diff_le_iff", []], ["mod", "theorem", "symm_diff_le_sup", []], ["add", "theorem", "symm_diff_of_ge", []], ["add", "theorem", "symm_diff_of_le", []], ["mod", "theorem", "symm_diff_sdiff", []], ["add", "theorem", "symm_diff_sdiff_eq_sup", []], ["add", "theorem", "symm_diff_sdiff_inf", []], ["add", "theorem", "symm_diff_sup_inf", []], ["add", "theorem", "symm_diff_top'", []], ["mod", "theorem", "symm_diff_top", []], ["add", "theorem", "top_symm_diff'", []], ["mod", "theorem", "top_symm_diff", []]]}]}, {"timestamp": 1663432171, "sha": "f7e477fd", "message": "feat(topology/separation): define `T₅` spaces (#16533)\nI'm going to prove that any `order_topology` is a `t5_space` in a follow-up PR. This will imply that any set in an `order_topology` is a normal space.", "changes": [{"oldPath": "counterexamples/sorgenfrey_line.lean", "newPath": "counterexamples/sorgenfrey_line.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "nhds_set_eq_comap", ["inducing"]]]}, {"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": [["add", "theorem", "bUnion_mem_nhds_set", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "t5_space", ["embedding"]], ["add", "theorem", "separated_iff_disjoint", []]]}]}, {"timestamp": 1663426021, "sha": "0ff46b9c", "message": "doc(order/filter/basic): fix notations in doc of filter.comap (#16530)\nThe notations in the doc of ```filter.comap``` did not match the notations used in the lemma and thus were a bit confusing (at least for me).", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1663405218, "sha": "a4f6c41e", "message": "move(algebra/field_power): Put lemmas in the correct place (#16465)\n`algebra.field_power` is only made of lemmas that belong elsewhere. Move them and delete the file.\nGolf proofs while we're at it and make `min_le_of_zpow_le_max` an iff.", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["add", "theorem", "zpow_bit1_neg", []]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": null, "changes": [["del", "theorem", "div_pow_le", []], ["del", "theorem", "min_le_of_zpow_le_max", []], ["del", "theorem", "zpow_ne_zero_of_pos", ["nat"]], ["del", "theorem", "one_le_zpow_of_nonneg", []], ["del", "theorem", "one_lt_zpow", []], ["del", "theorem", "pos_div_pow_pos", []], ["del", "theorem", "pow_le_max_of_min_le", []], ["del", "theorem", "cast_zpow", ["rat"]], ["del", "theorem", "zpow_bit0_nonneg", []], ["del", "theorem", "zpow_bit0_pos", []], ["del", "theorem", "zpow_bit1_neg", []], ["del", "theorem", "zpow_bit1_neg_iff", []], ["del", "theorem", "zpow_bit1_nonneg_iff", []], ["del", "theorem", "zpow_bit1_nonpos_iff", []], ["del", "theorem", "zpow_bit1_pos_iff", []], ["del", "theorem", "zpow_inj", []], ["del", "theorem", "zpow_injective", []], ["del", "theorem", "zpow_le_iff_le", []], ["del", "theorem", "zpow_le_of_le", []], ["del", "theorem", "zpow_le_one_of_nonpos", []], ["del", "theorem", "zpow_lt_iff_lt", []], ["del", "theorem", "zpow_nonneg", []], ["del", "theorem", "zpow_pos_of_pos", []], ["del", "theorem", "zpow_strict_anti", []], ["del", "theorem", "zpow_strict_mono", []], ["del", "theorem", "zpow_two_nonneg", []], ["del", "theorem", "zpow_two_pos_of_ne_zero", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["mod", "theorem", "pow_lt_pow_of_lt_left", []], ["mod", "theorem", "strict_mono_on_pow", []]]}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "div_pow_le", []], ["add", "theorem", "zpow_ne_zero_of_pos", ["nat"]], ["add", "theorem", "one_le_zpow_of_nonneg", []], ["add", "theorem", "one_lt_zpow", []], ["add", "theorem", "zpow_bit0_nonneg", []], ["add", "theorem", "zpow_bit0_pos", []], ["add", "theorem", "zpow_bit1_neg_iff", []], ["add", "theorem", "zpow_bit1_nonneg_iff", []], ["add", "theorem", "zpow_bit1_nonpos_iff", []], ["add", "theorem", "zpow_bit1_pos_iff", []], ["add", "theorem", "zpow_inj", []], ["add", "theorem", "zpow_injective", []], ["add", "theorem", "zpow_le_iff_le", []], ["add", "theorem", "zpow_le_max_iff_min_le", []], ["add", "theorem", "zpow_le_max_of_min_le", []], ["add", "theorem", "zpow_le_of_le", []], ["add", "theorem", "zpow_le_one_of_nonpos", []], ["add", "theorem", "zpow_lt_iff_lt", []], ["add", "theorem", "zpow_nonneg", []], ["add", "theorem", "zpow_pos_of_pos", []], ["add", "theorem", "zpow_strict_anti", []], ["add", "theorem", "zpow_strict_mono", []], ["add", "theorem", "zpow_two_nonneg", []], ["add", "theorem", "zpow_two_pos_of_ne_zero", []]]}, {"oldPath": "src/algebra/order/positive/field.lean", "newPath": "src/algebra/order/positive/field.lean", "changes": []}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": [["add", "theorem", "pos_div_pow_pos", []]]}, {"oldPath": "src/data/int/log.lean", "newPath": "src/data/int/log.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "cast_zpow", ["rat"]]]}, {"oldPath": "src/number_theory/frobenius_number.lean", "newPath": "src/number_theory/frobenius_number.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_nat.lean", "newPath": "src/topology/metric_space/pi_nat.lean", "changes": []}]}, {"timestamp": 1663395192, "sha": "86a14674", "message": "docs(data/list/defs): fix `list.dedup` docstring (#16535)", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}]}, {"timestamp": 1663367366, "sha": "1e225257", "message": "feat(number_theory): Dedekind-Kummer theorem (#15000)\nIt's PR #15000! The Kummer-Dedekind theorem on the splitting of ideals in monogenic ring extensions.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2315000.3A.20the.20Kummer-Dedekind.20theorem)\nCo-Authored-By: Paul Lezeau ", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "attach_count_eq_count_coe", ["multiset"]], ["add", "theorem", "attach_map_coe", ["multiset"]]]}, {"oldPath": null, "newPath": "src/number_theory/kummer_dedekind.lean", "changes": [["add", "theorem", "irreducible_map_of_irreducible_minpoly", ["kummer_dedekind", "ideal"]], ["add", "theorem", "multiplicity_factors_map_eq_multiplicity", ["kummer_dedekind"]], ["add", "theorem", "normalized_factors_ideal_map_eq_normalized_factors_min_poly_mk_map", ["kummer_dedekind"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "map_eq_bot_iff_of_injective", ["ideal"]]]}]}, {"timestamp": 1663357442, "sha": "e763499b", "message": "chore(algebra/order/monoid_lemmas_zero_lt): remove redundant assumptions (#16524)\nThe third part of #16449", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["mod", "theorem", "mul_pos_mono_iff_mul_pos_reflect_lt", []], ["mod", "theorem", "to_mul_pos_mono", ["mul_pos_reflect_lt"]], ["mod", "theorem", "pos_mul_mono_iff_pos_mul_reflect_lt", []], ["mod", "theorem", "to_pos_mul_mono", ["pos_mul_reflect_lt"]]]}]}, {"timestamp": 1663342271, "sha": "7a9e6ca4", "message": "doc(category/abelian/ext): update module doc (#16512)\nUpdate future work described in module doc, to reflect previous contributions to mathlib.", "changes": [{"oldPath": "src/category_theory/abelian/ext.lean", "newPath": "src/category_theory/abelian/ext.lean", "changes": []}]}, {"timestamp": 1663338273, "sha": "8922aaa5", "message": "feat(number_theory/legendre_symbol/norm_num): add file with `norm_num` extension for the Jacobi symbol (#16519)\nThis PR adds the file `number_theory.legendre_symbol.norm_num`, which provides an extension to the `norm_num` tactic, so that it can compute the value of a Jacobi (or Legendre) symbol when the entries are concrete numbers.\nSee this [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Jacobi.20symbol/near/298768851) for discussion.", "changes": [{"oldPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "newPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "changes": []}, {"oldPath": null, "newPath": "src/number_theory/legendre_symbol/norm_num.lean", "changes": [["add", "theorem", "mod_left", ["norm_num", "jacobi_sym"]], ["add", "theorem", "double_even", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "even_even", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "even_odd₁", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "even_odd₃", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "even_odd₅", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "even_odd₇", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "mod_left", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "odd_even", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "one_left_even", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "one_left_odd", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "one_right", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "qr₁'", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "qr₁'_mod", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "qr₁", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "qr₁_mod", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "qr₃", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "qr₃_mod", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "zero_left_even", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "zero_left_odd", ["norm_num", "jacobi_sym_nat"]], ["add", "theorem", "zero_right", ["norm_num", "jacobi_sym_nat"]], ["add", "def", "jacobi_sym_nat", ["norm_num"]], ["add", "theorem", "to_jacobi_sym", ["norm_num", "legendre_sym"]]]}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1663333385, "sha": "894c8c22", "message": "refactor(number_theory/padics/padic_val): make prime implicit (#15221)\nMake the variable denoting the prime in theorems related to `padic_val_nat`, `padic_val_int`, `padic_val_rat`, and `padic_norm` implicit, since they seem to be redundant and inferable in all use cases, but the variable in their definitions remain explicit.", "changes": [{"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": [["mod", "theorem", "norm_int_le_pow_iff_dvd", ["padic_int"]], ["mod", "theorem", "norm_int_lt_one_iff_dvd", ["padic_int"]]]}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["mod", "theorem", "dvd_iff_norm_le", ["padic_norm"]], ["mod", "theorem", "of_nat", ["padic_norm"]], ["mod", "theorem", "padic_norm_of_prime_of_ne", ["padic_norm"]], ["mod", "theorem", "padic_norm_p", ["padic_norm"]], ["mod", "theorem", "padic_norm_p_lt_one", ["padic_norm"]], ["mod", "theorem", "padic_norm_p_lt_one_of_prime", ["padic_norm"]], ["mod", "theorem", "padic_norm_p_of_prime", ["padic_norm"]], ["mod", "theorem", "sum_le'", ["padic_norm"]], ["mod", "theorem", "sum_lt'", ["padic_norm"]]]}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": [["mod", "theorem", "norm_int_le_pow_iff_dvd", ["padic_norm_e"]]]}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": [["mod", "theorem", "dvd_of_one_le_padic_val_nat", []], ["mod", "theorem", "one_le_padic_val_nat_of_dvd", []], ["mod", "theorem", "mul", ["padic_val_int"]], ["mod", "theorem", "padic_val_int_dvd", []], ["mod", "theorem", "padic_val_int_dvd_iff", []], ["mod", "theorem", "padic_val_int_mul_eq_succ", []], ["mod", "theorem", "padic_val_int_self", []], ["mod", "theorem", "padic_val_nat_def'", []], ["mod", "theorem", "padic_val_nat_def", []], ["mod", "theorem", "padic_val_nat_dvd_iff", []], ["mod", "theorem", "padic_val_nat_primes", []], ["mod", "theorem", "padic_val_nat_self", []], ["mod", "theorem", "finite_int_prime_iff", ["padic_val_rat"]], ["mod", "theorem", "multiplicity_sub_multiplicity", ["padic_val_rat"]], ["mod", "theorem", "of_int", ["padic_val_rat"]], ["mod", "theorem", "of_int_multiplicity", ["padic_val_rat"]], ["mod", "theorem", "of_nat", ["padic_val_rat"]], ["mod", "theorem", "padic_val_rat_of_nat", []], ["mod", "theorem", "range_pow_padic_val_nat_subset_divisors'", []], ["mod", "theorem", "zero_le_padic_val_rat_of_nat", []]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}]}, {"timestamp": 1663330258, "sha": "d46774d4", "message": "feat(linear_algebra/clifford_algebra/basic): lemmas about triple products of repeated vectors (#16153)", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": [["add", "theorem", "inv_of_ι_mul_ι_mul_ι", ["clifford_algebra"]], ["add", "theorem", "ι_mul_comm", ["clifford_algebra"]], ["add", "theorem", "ι_mul_ι_mul_inv_of_ι", ["clifford_algebra"]], ["add", "theorem", "ι_mul_ι_mul_ι", ["clifford_algebra"]]]}]}, {"timestamp": 1663330257, "sha": "fc35e1e9", "message": "feat(archive/100-theorems-list): Stirling, part 2 (#14875)\nfeat(archive/100-theorems-list): Stirling\nPart 2\n- [x] depends on: #14874 [part 1]", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/analysis/special_functions/stirling.lean", "newPath": "src/analysis/special_functions/stirling.lean", "changes": [["del", "theorem", "log_stirling_seq'_antitone", []], ["del", "theorem", "log_stirling_seq_bounded_aux", []], ["del", "theorem", "log_stirling_seq_bounded_by_constant", []], ["del", "theorem", "log_stirling_seq_diff_has_sum", []], ["del", "theorem", "log_stirling_seq_diff_le_geo_sum", []], ["del", "theorem", "log_stirling_seq_formula", []], ["del", "theorem", "log_stirling_seq_sub_log_stirling_seq_succ", []], ["add", "theorem", "log_stirling_seq'_antitone", ["stirling"]], ["add", "theorem", "log_stirling_seq_bounded_aux", ["stirling"]], ["add", "theorem", "log_stirling_seq_bounded_by_constant", ["stirling"]], ["add", "theorem", "log_stirling_seq_diff_has_sum", ["stirling"]], ["add", "theorem", "log_stirling_seq_diff_le_geo_sum", ["stirling"]], ["add", "theorem", "log_stirling_seq_formula", ["stirling"]], ["add", "theorem", "log_stirling_seq_sub_log_stirling_seq_succ", ["stirling"]], ["add", "theorem", "second_wallis_limit", ["stirling"]], ["add", "theorem", "stirling_seq'_antitone", ["stirling"]], ["add", "theorem", "stirling_seq'_bounded_by_pos_constant", ["stirling"]], ["add", "theorem", "stirling_seq'_pos", ["stirling"]], ["add", "theorem", "stirling_seq_has_pos_limit_a", ["stirling"]], ["add", "theorem", "stirling_seq_one", ["stirling"]], ["add", "theorem", "stirling_seq_pow_four_div_stirling_seq_pow_two_eq", ["stirling"]], ["add", "theorem", "stirling_seq_zero", ["stirling"]], ["add", "theorem", "tendsto_self_div_two_mul_self_add_one", ["stirling"]], ["add", "theorem", "tendsto_stirling_seq_sqrt_pi", ["stirling"]], ["add", "theorem", "tendsto_w_at_top:", ["stirling"]], ["del", "theorem", "stirling_seq'_antitone", []], ["del", "theorem", "stirling_seq'_bounded_by_pos_constant", []], ["del", "theorem", "stirling_seq'_pos", []], ["del", "theorem", "stirling_seq_has_pos_limit_a", []], ["del", "theorem", "stirling_seq_one", []], ["del", "theorem", "stirling_seq_zero", []]]}]}, {"timestamp": 1663324049, "sha": "104f141e", "message": "feat(combinatorics/simple_graph/prod): add `locally_finite` instance for the box product of `locally_finite` graphs, plus two related lemmas (#16431)", "changes": [{"oldPath": "src/combinatorics/simple_graph/prod.lean", "newPath": "src/combinatorics/simple_graph/prod.lean", "changes": [["add", "theorem", "box_prod_degree", ["simple_graph"]], ["add", "theorem", "box_prod_neighbor_set", ["simple_graph"]]]}]}, {"timestamp": 1663324048, "sha": "a5b382d8", "message": "feat(linear_algebra/symplectic_group): add definition of symplectic group (#15513)\nThis PR defines the symplectic group over arbitrary ring (with characteristic not 2)\nIt also moves the definition of the `symplectic.J` into the new `linear_algebra/symplectic_group` file, and adds a lemma `from_blocks_neg` to `data/matrix/block`.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": [["del", "def", "J", ["lie_algebra", "symplectic"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "from_blocks_neg", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/symplectic_group.lean", "changes": [["add", "def", "J", ["matrix"]], ["add", "theorem", "J_det_mul_J_det", ["matrix"]], ["add", "theorem", "J_inv", ["matrix"]], ["add", "theorem", "J_squared", ["matrix"]], ["add", "theorem", "J_transpose", ["matrix"]], ["add", "theorem", "is_unit_det_J", ["matrix"]], ["add", "def", "symplectic_group", ["matrix"]], ["add", "theorem", "J_mem", ["symplectic_group"]], ["add", "theorem", "coe_J", ["symplectic_group"]], ["add", "theorem", "coe_inv'", ["symplectic_group"]], ["add", "theorem", "coe_inv", ["symplectic_group"]], ["add", "theorem", "inv_eq_symplectic_inv", ["symplectic_group"]], ["add", "theorem", "inv_left_mul_aux", ["symplectic_group"]], ["add", "theorem", "mem_iff'", ["symplectic_group"]], ["add", "theorem", "mem_iff", ["symplectic_group"]], ["add", "theorem", "neg_mem", ["symplectic_group"]], ["add", "def", "sym_J", ["symplectic_group"]], ["add", "theorem", "symplectic_det", ["symplectic_group"]], ["add", "theorem", "transpose_mem", ["symplectic_group"]], ["add", "theorem", "transpose_mem_iff", ["symplectic_group"]]]}]}, {"timestamp": 1663314586, "sha": "69be6fe3", "message": "fix(tactic/monotonicity/interactive): fix the order of calling `unify_with_instance` (#16480)\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F-tactics/topic/.60apply_instance.60.20fails.20to.20infer.20instance.3F)", "changes": [{"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1663306161, "sha": "f1397dc1", "message": "feat(analysis/normed_space/star/gelfand_duality): Show the Gelfand transform is a bijective isometry for C⋆-algebras over ℂ (#16488)\n- [x] depends on: #16451\n- [x] depends on: #16438\n- [x] depends on: #16368\n- [x] depends on: #16303\n- [x] depends on: #16446\n- [x] depends on: #16448", "changes": [{"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "def", "equiv_alg_hom", ["weak_dual", "character_space"]], ["add", "theorem", "equiv_alg_hom_coe", ["weak_dual", "character_space"]], ["add", "theorem", "equiv_alg_hom_symm_coe", ["weak_dual", "character_space"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/star/gelfand_duality.lean", "changes": [["add", "theorem", "gelfand_transform_bijective", []], ["add", "theorem", "gelfand_transform_isometry", []], ["add", "theorem", "to_character_space_apply_eq_zero_of_mem", ["ideal"]], ["add", "theorem", "gelfand_transform_eq", ["spectrum"]], ["add", "theorem", "exists_apply_eq_zero", ["weak_dual", "character_space"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "span_singleton_ne_top", ["ideal"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}]}, {"timestamp": 1663278874, "sha": "97befb83", "message": "feat(analysis/normed/ring/seminorm): add ring_seminorm, ring_norm (#14115)\nWe define structures `ring_seminorm` and `ring_norm`. These definitions are useful when one needs to consider multiple (semi)norms on a given ring.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "coe_norm_add_group_norm", []], ["add", "def", "norm_add_group_norm", []]]}, {"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": [["add", "theorem", "to_fun_eq_coe", ["group_norm"]], ["add", "theorem", "to_fun_eq_coe", ["group_seminorm"]]]}, {"oldPath": null, "newPath": "src/analysis/normed/ring/seminorm.lean", "changes": [["add", "def", "norm_ring_norm", []], ["add", "def", "norm_ring_seminorm", []], ["add", "theorem", "apply_one", ["ring_norm"]], ["add", "theorem", "ext", ["ring_norm"]], ["add", "theorem", "to_fun_eq_coe", ["ring_norm"]], ["add", "structure", "ring_norm", []], ["add", "theorem", "apply_one", ["ring_seminorm"]], ["add", "theorem", "eq_zero_iff", ["ring_seminorm"]], ["add", "theorem", "ext", ["ring_seminorm"]], ["add", "theorem", "ne_zero_iff", ["ring_seminorm"]], ["add", "theorem", "seminorm_one_eq_one_iff_ne_zero", ["ring_seminorm"]], ["add", "theorem", "to_fun_eq_coe", ["ring_seminorm"]], ["add", "def", "to_ring_norm", ["ring_seminorm"]], ["add", "structure", "ring_seminorm", []]]}]}, {"timestamp": 1663255032, "sha": "3077b72c", "message": "feat(analysis/normed/group/quotient): transfer norm structures on quotients of groups to quotients of modules by submodules and of rings by ideals (#16446)\nThis takes the existing norm structures on quotients of additive groups and transfers it along the definitional equality to quotients of modules by submodules and quotients of rings by ideals. In addition, this puts the extra norm structures on these objects where appropriate including `complete_space`, `normed_space`, `semi_normed_comm_ring`, `normed_comm_ring` and `normed_algebra`.\n- [x] depends on: #16368", "changes": [{"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": [["add", "theorem", "norm_mk_le", ["ideal", "quotient"]], ["add", "theorem", "norm_mk_lt", ["ideal", "quotient"]], ["add", "theorem", "norm_mk_le", ["submodule", "quotient"]], ["add", "theorem", "norm_mk_lt", ["submodule", "quotient"]]]}]}, {"timestamp": 1663243066, "sha": "54882236", "message": "feat(probabiliy/martingale): centering lemma (#16517)\nWe provide the decomposition of an adapted and integrable stochastic process into a predictable part and a martingale part.", "changes": [{"oldPath": null, "newPath": "src/probability/martingale/centering.lean", "changes": [["add", "theorem", "adapted_martingale_part", ["measure_theory"]], ["add", "theorem", "adapted_predictable_part'", ["measure_theory"]], ["add", "theorem", "adapted_predictable_part", ["measure_theory"]], ["add", "theorem", "integrable_martingale_part", ["measure_theory"]], ["add", "theorem", "martingale_martingale_part", ["measure_theory"]], ["add", "def", "martingale_part", ["measure_theory"]], ["add", "theorem", "martingale_part_add_predictable_part", ["measure_theory"]], ["add", "theorem", "martingale_part_eq_sum", ["measure_theory"]], ["add", "def", "predictable_part", ["measure_theory"]], ["add", "theorem", "predictable_part_zero", ["measure_theory"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "div", ["measure_theory", "adapted"]]]}]}, {"timestamp": 1663243064, "sha": "2178a7f7", "message": "feat(ring_theory/{ideal/basic, adjoin_root): some lemmas from #15000 (#16450)\nThis PR contains some lemmas that were originally in #15000.\nThe main result that is proven here is `quotient_equiv_quotient_minpoly_map`, which says that if `α` has minimal polynomial `f` over `R` and `I` is an ideal of `R`, then rings `R[α] / I[α]` and `(R/I)[X] / (f mod I)` are isomorphic as R-algebras.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "of_ring_equiv", ["alg_equiv"]], ["mod", "theorem", "refl_symm", ["alg_equiv"]], ["add", "theorem", "symm_to_ring_equiv", ["alg_equiv"]], ["add", "theorem", "to_ring_equiv_symm", ["alg_equiv"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "quot_equiv_quot_map_apply_mk", ["adjoin_root"]], ["add", "theorem", "quot_equiv_quot_map_symm_apply_mk", ["adjoin_root"]], ["add", "theorem", "quotient_equiv_quotient_minpoly_map_apply_mk", ["power_basis"]], ["add", "theorem", "quotient_equiv_quotient_minpoly_map_symm_apply_mk", ["power_basis"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "quot_quot_equiv_comm_algebra_map", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_mk_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_sup_quot_quot_algebra_map", ["double_quot"]]]}]}, {"timestamp": 1663234903, "sha": "0f287f82", "message": "chore(topology/separation): move/add `simp` lemmas (#16470)\n* add `inseparable_iff_eq` and `inseparable_eq_eq`;\n* add `specializes_eq_eq`, move `@[simp]` from `specializes_iff_eq`;\n* golf `pure_le_nhds_iff` and `nhds_le_nhds_iff`.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "inseparable_eq_eq", []], ["add", "theorem", "inseparable_iff_eq", []], ["add", "theorem", "specializes_eq_eq", []], ["mod", "theorem", "specializes_iff_eq", []]]}]}, {"timestamp": 1663234902, "sha": "400aa375", "message": "feat(data/polynomial/eval): add `map_{eq/ne}_zero_iff` (#16440)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}]}, {"timestamp": 1663234900, "sha": "7afe23e0", "message": "feat(linear_algebra/affine_space/affine_subspace): more `mem_map` lemmas (#16378)\nAdd two more lemmas about membership of an affine subspace given by\n`affine_subspace.map`.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "mem_map_iff_mem_of_injective", ["affine_subspace"]], ["add", "theorem", "mem_map_of_mem", ["affine_subspace"]]]}]}, {"timestamp": 1663224206, "sha": "a0ae2165", "message": "feat(field_theory/splitting_field): generalize `splits` for `comm_ring K` (#16405)\nThe definition of `splits` has been slightly changed for this change. Hence 2 lemmas `splits_iff` and `splits.def` are added for the `field K` case.\nI guess it may be helpful if we are able to talk about something like `splits i (p : ℤ[X])`?", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "degree_eq_card_roots'", ["polynomial"]], ["mod", "theorem", "degree_eq_one_of_irreducible_of_splits", ["polynomial"]], ["add", "theorem", "exists_root_of_splits'", ["polynomial"]], ["add", "theorem", "map_root_of_splits'", ["polynomial"]], ["add", "theorem", "nat_degree_eq_card_roots'", ["polynomial"]], ["add", "def", "root_of_splits'", ["polynomial"]], ["add", "theorem", "root_of_splits'_eq_root_of_splits", ["polynomial"]], ["add", "theorem", "roots_ne_zero_of_splits'", ["polynomial"]], ["add", "theorem", "def", ["polynomial", "splits"]], ["mod", "theorem", "splits_C", ["polynomial"]], ["add", "theorem", "splits_iff", ["polynomial"]], ["mod", "theorem", "splits_of_is_unit", ["polynomial"]], ["add", "theorem", "splits_of_map_degree_eq_one", ["polynomial"]], ["add", "theorem", "splits_of_map_eq_C", ["polynomial"]], ["mod", "theorem", "splits_of_splits_id", ["polynomial"]], ["add", "theorem", "splits_of_splits_mul'", ["polynomial"]], ["mod", "theorem", "splits_zero", ["polynomial"]]]}]}, {"timestamp": 1663215653, "sha": "53e5dd30", "message": "chore(category/limits/opposites): instances (#16511)\nUpgrade some lemmas to instances, per [zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/limits.20in.20opposite.20categories).", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/pullbacks.lean", "newPath": "src/algebraic_geometry/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/generator.lean", "newPath": "src/category_theory/abelian/generator.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/opposite.lean", "newPath": "src/category_theory/abelian/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["del", "theorem", "has_coequalizers_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_colimits_op_of_has_limits", ["category_theory", "limits"]], ["del", "theorem", "has_coproducts_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_equalizers_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_finite_colimits_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_finite_coproducts_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_finite_limits_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_finite_products_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_limits_op_of_has_colimits", ["category_theory", "limits"]], ["del", "theorem", "has_products_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_pullbacks_opposite", ["category_theory", "limits"]], ["del", "theorem", "has_pushouts_opposite", ["category_theory", "limits"]]]}]}, {"timestamp": 1663206136, "sha": "a4895002", "message": "feat(data/sym/basic): add `fill_mem`, `append_mem` and supporting lemmas (#16486)\nAdd lemmas for membership of fill and append, with supporting coercion and casting lemmas.", "changes": [{"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["mod", "def", "append", ["sym"]], ["mod", "theorem", "append_comm", ["sym"]], ["mod", "theorem", "append_inj_left", ["sym"]], ["mod", "theorem", "append_inj_right", ["sym"]], ["mod", "theorem", "cast_cast", ["sym"]], ["add", "theorem", "coe_append", ["sym"]], ["mod", "theorem", "coe_cast", ["sym"]], ["mod", "def", "filter_ne", ["sym"]], ["add", "theorem", "mem_append_iff", ["sym"]], ["add", "theorem", "mem_cast", ["sym"]], ["add", "theorem", "mem_coe", ["sym"]], ["mod", "theorem", "mem_cons", ["sym"]], ["mod", "theorem", "mem_cons_of_mem", ["sym"]], ["add", "theorem", "mem_fill_iff", ["sym"]]]}]}, {"timestamp": 1663200383, "sha": "fd2fb7b3", "message": "feat(topology/unit_interval): add lemma add_pos (#16507)\nAdd `lemma add_pos` stating that for every element of the unit interval and for every positive real number, their sum (as real number) is positive\nIt is needed for #16029 defining H-spaces", "changes": [{"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": [["add", "theorem", "add_pos", ["unit_interval"]]]}]}, {"timestamp": 1663190985, "sha": "e702f021", "message": "feat(topology/algebra/module/character_space, analysis/normed_space/star/spectrum): define the Gelfand transform as an `alg_hom` (#16451)\nThis defines the `gelfand_transform` as an algebra homomorphism from a `𝕜`-algebra `A` into the continuous functions from the `character_space 𝕜 A` into the base field `𝕜`, where the map is given by evaluation. For this definition it is only supposed that `𝕜` is a topological ring and `A` is a topological space.\nWhen the algebra `A` is a C⋆-algebra over `ℂ`, algebra homomorphisms of `A` into `ℂ` (hence also terms of `character_space ℂ A`) are automatically star-preserving. Therefore, in this setting the Gelfand transform may be upgraded to a `star_alg_hom`. However, we do not implement that here because, with more work, one may show that this is actually an equivalence.\n- [x] depends on: #16438", "changes": [{"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": [["add", "def", "gelfand_transform", ["weak_dual"]]]}]}, {"timestamp": 1663181495, "sha": "1afd6c75", "message": "docs(analysis/calculus/taylor): Latex fixes (#16508)\nFixes backslash error and corrects one docstring.", "changes": [{"oldPath": "src/analysis/calculus/taylor.lean", "newPath": "src/analysis/calculus/taylor.lean", "changes": []}]}, {"timestamp": 1663181494, "sha": "660bde43", "message": "refactor(algebra/order/monoid_lemma_zero_lt): Use `{x : α // 0 ≤ α}` (#16447)\n`pos_mul_mono`/`mul_pos_mono` and `pos_mul_reflect_lt`/`mul_pos_reflect_lt` were stated as covariance/contravariance of `{x : α // 0 < α}` over `α` even though the extension to `{x : α // 0 ≤ α}` also holds.\nThis meant that many lemmas were relying on antisymmetry only to treat the cases `a = 0` and `0 < a` separately, which made them need `partial_order` and depend on `classical.choice`. This prevented #16172 from actually removing the `decidable` lemma in `algebra.order.ring` after #16189 got merged.\nFurther, #16189 did not actually get rid of the temporary `zero_lt` namespace, so name conflicts that arise were not fixed.\nFinally, `le_mul_of_one_le_left` and its seven friends were reproved inline about five time each.\nHence in this PR we\n* restate `pos_mul_mono`, `mul_pos_mono`, `pos_mul_reflect_lt`, `mul_pos_reflect_lt` using `{x : α // 0 ≤ α}`\n* provide the (classical) equivalence with the previous definitions in a `partial_order`.\n* generalise lemmas from `partial_order` to `preorder`.\n* delete all lemmas in the `preorder` namespace as they are now fully generalized. This in essence reverts (parts of) #12961, #13296 and #13299.\n* replace most of the various `has_le`/`has_lt` assumptions by a blank `preorder` one, hence simplifying the file sectioning\n* remove the `zero_lt` namespace.\n* rename lemmas to fix name conflicts.\n* delete a few lemmas that were left in `algebra.order.ring`.\n* golf proofs involving `le_mul_of_one_le_left` and its seven friends. This is why the PR has a -450 lines diff.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "exists_square_le'", []], ["add", "theorem", "le_mul_iff_one_le_left", []], ["add", "theorem", "le_mul_iff_one_le_right", []], ["add", "theorem", "le_mul_of_le_mul_of_nonneg_left", []], ["add", "theorem", "le_mul_of_le_mul_of_nonneg_right", []], ["add", "theorem", "le_mul_of_le_of_one_le'", []], ["add", "theorem", "le_mul_of_le_of_one_le_of_nonneg", []], ["add", "theorem", "le_mul_of_one_le_left", []], ["add", "theorem", "le_mul_of_one_le_of_le_of_nonneg", []], ["add", "theorem", "le_mul_of_one_le_right", []], ["add", "theorem", "le_of_le_mul_of_le_one_of_nonneg_left", []], ["add", "theorem", "le_of_le_mul_of_le_one_of_nonneg_right", []], ["add", "theorem", "le_of_mul_le_mul_of_pos_left", []], ["add", "theorem", "le_of_mul_le_mul_of_pos_right", []], ["add", "theorem", "le_of_mul_le_of_one_le_nonneg_right", []], ["add", "theorem", "le_of_mul_le_of_one_le_of_nonneg_left", []], ["add", "theorem", "lt_mul_of_lt_of_one_le_of_nonneg", ["left"]], ["add", "theorem", "mul_le_one_of_le_of_le", ["left"]], ["add", "theorem", "mul_lt_of_le_of_lt_one_of_pos", ["left"]], ["add", "theorem", "mul_lt_of_lt_of_le_one_of_nonneg", ["left"]], ["add", "theorem", "mul_nonneg", ["left"]], ["add", "theorem", "mul_pos", ["left"]], ["add", "theorem", "neg_of_mul_neg_left", ["left"]], ["add", "theorem", "neg_of_mul_neg_right", ["left"]], ["add", "theorem", "one_le_mul_of_le_of_le", ["left"]], ["add", "theorem", "one_lt_mul_of_le_of_lt_of_pos", ["left"]], ["add", "theorem", "lt_mul_iff_one_lt_left", []], ["add", "theorem", "lt_mul_iff_one_lt_right", []], ["add", "theorem", "lt_mul_of_le_of_one_lt'", []], ["add", "theorem", "lt_mul_of_le_of_one_lt_of_pos", []], ["add", "theorem", "lt_mul_of_lt_mul_of_nonneg_left", []], ["add", "theorem", "lt_mul_of_lt_mul_of_nonneg_right", []], ["add", "theorem", "lt_mul_of_lt_of_one_le'", []], ["add", "theorem", "lt_mul_of_lt_of_one_le_of_nonneg", []], ["add", "theorem", "lt_mul_of_lt_of_one_lt_of_pos", []], ["add", "theorem", "lt_mul_of_one_le_of_lt_of_nonneg", []], ["add", "theorem", "lt_mul_of_one_lt_left", []], ["add", "theorem", "lt_mul_of_one_lt_of_le_of_pos", []], ["add", "theorem", "lt_mul_of_one_lt_of_lt_of_nonneg", []], ["add", "theorem", "lt_mul_of_one_lt_of_lt_of_pos", []], ["add", "theorem", "lt_mul_of_one_lt_right", []], ["add", "theorem", "lt_of_lt_mul_of_le_one_of_nonneg_left", []], ["add", "theorem", "lt_of_lt_mul_of_le_one_of_nonneg_right", []], ["add", "theorem", "lt_of_mul_lt_mul_left", []], ["add", "theorem", "lt_of_mul_lt_mul_right", []], ["add", "theorem", "lt_of_mul_lt_of_one_le_of_nonneg_left", []], ["add", "theorem", "mul_eq_mul_iff_eq_and_eq_of_pos'", []], ["add", "theorem", "mul_eq_mul_iff_eq_and_eq_of_pos", []], ["add", "theorem", "mul_le_iff_le_one_left", []], ["add", "theorem", "mul_le_iff_le_one_right", []], ["add", "theorem", "mul_le_mul", []], ["add", "theorem", "mul_le_mul_left", []], ["add", "theorem", "mul_le_mul_of_le_of_le", []], ["add", "theorem", "mul_le_mul_of_nonneg_left", []], ["add", "theorem", "mul_le_mul_of_nonneg_right", []], ["add", "theorem", "mul_le_mul_right", []], ["add", "theorem", "mul_le_of_le_of_le_one'", []], ["add", "theorem", "mul_le_of_le_of_le_one_of_nonneg", []], ["add", "theorem", "mul_le_of_le_one_left", []], ["add", "theorem", "mul_le_of_le_one_of_le'", []], ["add", "theorem", "mul_le_of_le_one_of_le_of_nonneg", []], ["add", "theorem", "mul_le_of_le_one_right", []], ["add", "theorem", "mul_le_of_mul_le_of_nonneg_left", []], ["add", "theorem", "mul_le_of_mul_le_of_nonneg_right", []], ["add", "theorem", "mul_left_cancel_iff_of_pos", []], ["add", "theorem", "mul_lt_iff_lt_one_left", []], ["add", "theorem", "mul_lt_iff_lt_one_right", []], ["add", "theorem", "mul_lt_mul_left", []], ["add", "theorem", "mul_lt_mul_of_le_of_le'", []], ["add", "theorem", "mul_lt_mul_of_le_of_lt'", []], ["add", "theorem", "mul_lt_mul_of_lt_of_lt'", []], ["add", "theorem", "mul_lt_mul_of_nonneg_of_pos", []], ["add", "theorem", "mul_lt_mul_of_pos_left", []], ["add", "theorem", "mul_lt_mul_of_pos_of_nonneg", []], ["add", "theorem", "mul_lt_mul_of_pos_of_pos", []], ["add", "theorem", "mul_lt_mul_of_pos_right", []], ["add", "theorem", "mul_lt_mul_right", []], ["add", "theorem", "mul_lt_of_le_of_lt_one'", []], ["add", "theorem", "mul_lt_of_le_of_lt_one_of_pos", []], ["add", "theorem", "mul_lt_of_le_one_of_lt'", []], ["add", "theorem", "mul_lt_of_le_one_of_lt_of_nonneg", []], ["add", "theorem", "mul_lt_of_lt_of_le_one'", []], ["add", "theorem", "mul_lt_of_lt_of_le_one_of_nonneg", []], ["add", "theorem", "mul_lt_of_lt_of_lt_one_of_pos", []], ["add", "theorem", "mul_lt_of_lt_one_left", []], ["add", "theorem", "mul_lt_of_lt_one_of_le'", []], ["add", "theorem", "mul_lt_of_lt_one_of_le_of_pos", []], ["add", "theorem", "mul_lt_of_lt_one_of_lt_of_pos", []], ["add", "theorem", "mul_lt_of_lt_one_right", []], ["add", "theorem", "mul_lt_of_mul_lt_of_nonneg_left", []], ["add", "theorem", "mul_lt_of_mul_lt_of_nonneg_right", []], ["add", "theorem", "mul_neg_of_neg_of_pos", []], ["add", "theorem", "mul_neg_of_pos_of_neg", []], ["add", "theorem", "mul_nonpos_of_nonneg_of_nonpos", []], ["add", "theorem", "mul_nonpos_of_nonpos_of_nonneg", []], ["add", "theorem", "to_mul_pos_reflect_lt", ["mul_pos_mono"]], ["add", "theorem", "to_mul_pos_strict_mono", ["mul_pos_mono"]], ["add", "def", "mul_pos_mono", []], ["add", "theorem", "mul_pos_mono_iff_covariant_pos", []], ["add", "theorem", "mul_pos_mono_iff_mul_pos_reflect_lt", []], ["add", "theorem", "mul_pos_mono_iff_mul_pos_strict_mono", []], ["add", "theorem", "to_mul_pos_strict_mono", ["mul_pos_mono_rev"]], ["add", "def", "mul_pos_mono_rev", []], ["add", "theorem", "mul_pos_mono_rev_iff_mul_pos_reflect_lt", []], ["add", "theorem", "to_mul_pos_mono", ["mul_pos_reflect_lt"]], ["add", "theorem", "to_mul_pos_mono_rev", ["mul_pos_reflect_lt"]], ["add", "def", "mul_pos_reflect_lt", []], ["add", "theorem", "mul_pos_reflect_lt_iff_contravariant_pos", []], ["add", "def", "mul_pos_strict_mono", []], ["add", "theorem", "mul_pos_strict_mono_iff_mul_pos_mono_rev", []], ["add", "theorem", "mul_right_cancel_iff_of_pos", []], ["add", "theorem", "neg_iff_neg_of_mul_pos", []], ["add", "theorem", "neg_of_mul_pos_left", []], ["add", "theorem", "neg_of_mul_pos_right", []], ["add", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", []], ["add", "theorem", "pos_iff_pos_of_mul_pos", []], ["add", "theorem", "to_pos_mul_reflect_lt", ["pos_mul_mono"]], ["add", "theorem", "to_pos_mul_strict_mono", ["pos_mul_mono"]], ["add", "def", "pos_mul_mono", []], ["add", "theorem", "pos_mul_mono_iff_covariant_pos", []], ["add", "theorem", "pos_mul_mono_iff_mul_pos_mono", []], ["add", "theorem", "pos_mul_mono_iff_pos_mul_reflect_lt", []], ["add", "theorem", "pos_mul_mono_iff_pos_mul_strict_mono", []], ["add", "theorem", "to_pos_mul_strict_mono", ["pos_mul_mono_rev"]], ["add", "def", "pos_mul_mono_rev", []], ["add", "theorem", "pos_mul_mono_rev_iff_mul_pos_mono_rev", []], ["add", "theorem", "pos_mul_mono_rev_iff_pos_mul_reflect_lt", []], ["add", "theorem", "to_pos_mul_mono", ["pos_mul_reflect_lt"]], ["add", "theorem", "to_pos_mul_mono_rev", ["pos_mul_reflect_lt"]], ["add", "def", "pos_mul_reflect_lt", []], ["add", "theorem", "pos_mul_reflect_lt_iff_contravariant_pos", []], ["add", "theorem", "pos_mul_reflect_lt_iff_mul_pos_reflect_lt", []], ["add", "def", "pos_mul_strict_mono", []], ["add", "theorem", "pos_mul_strict_mono_iff_mul_pos_strict_mono", []], ["add", "theorem", "pos_mul_strict_mono_iff_pos_mul_mono_rev", []], ["add", "theorem", "pos_of_mul_pos_left", []], ["add", "theorem", "pos_of_mul_pos_right", []], ["add", "theorem", "mul_le_one_of_le_of_le", ["right"]], ["add", "theorem", "mul_lt_one_of_le_of_lt_of_nonneg", ["right"]], ["add", "theorem", "mul_lt_one_of_lt_of_le_of_pos", ["right"]], ["add", "theorem", "mul_nonneg", ["right"]], ["add", "theorem", "mul_pos", ["right"]], ["add", "theorem", "neg_of_mul_neg_left", ["right"]], ["add", "theorem", "neg_of_mul_neg_right", ["right"]], ["add", "theorem", "one_le_mul_of_le_of_le", ["right"]], ["add", "theorem", "one_lt_mul_of_le_of_lt_of_nonneg", ["right"]], ["add", "theorem", "one_lt_mul_of_lt_of_le_of_pos", ["right"]], ["add", "theorem", "one_lt_mul_of_lt_of_lt", ["right"]], ["del", "theorem", "exists_square_le'", ["zero_lt"]], ["del", "theorem", "exists_square_le", ["zero_lt"]], ["del", "theorem", "le_mul_iff_one_le_left", ["zero_lt"]], ["del", "theorem", "le_mul_iff_one_le_right", ["zero_lt"]], ["del", "theorem", "le_mul_of_le_mul_left", ["zero_lt"]], ["del", "theorem", "le_mul_of_le_mul_right", ["zero_lt"]], ["del", "theorem", "le_mul_of_le_of_one_le'", ["zero_lt"]], ["del", "theorem", "le_mul_of_le_of_one_le", ["zero_lt"]], ["del", "theorem", "le_mul_of_one_le_left", ["zero_lt"]], ["del", "theorem", "le_mul_of_one_le_of_le'", ["zero_lt"]], ["del", "theorem", "le_mul_of_one_le_of_le", ["zero_lt"]], ["del", "theorem", "le_mul_of_one_le_right", ["zero_lt"]], ["del", "theorem", "le_of_le_mul_of_le_one_of_nonneg_left", ["zero_lt"]], ["del", "theorem", "le_of_le_mul_of_le_one_right", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_mul_left'", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_mul_right'", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_of_one_le_nonneg_right", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_of_one_le_of_nonneg_left", ["zero_lt"]], ["del", "theorem", "mul_le_one_of_le_of_le", ["zero_lt", "left"]], ["del", "theorem", "mul_lt_one_of_le_of_lt", ["zero_lt", "left"]], ["del", "theorem", "mul_lt_one_of_lt_of_le", ["zero_lt", "left"]], ["del", "theorem", "mul_lt_one_of_lt_of_lt", ["zero_lt", "left"]], ["del", "theorem", "mul_nonneg", ["zero_lt", "left"]], ["del", "theorem", "mul_pos", ["zero_lt", "left"]], ["del", "theorem", "neg_of_mul_neg_left", ["zero_lt", "left"]], ["del", "theorem", "neg_of_mul_neg_right", ["zero_lt", "left"]], ["del", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "left"]], ["del", "theorem", "one_lt_mul_of_le_of_lt", ["zero_lt", "left"]], ["del", "theorem", "one_lt_mul_of_lt_of_le", ["zero_lt", "left"]], ["del", "theorem", "one_lt_mul_of_lt_of_lt", ["zero_lt", "left"]], ["del", "theorem", "lt_mul_iff_one_lt_left", ["zero_lt"]], ["del", "theorem", "lt_mul_iff_one_lt_right", ["zero_lt"]], ["del", "theorem", "lt_mul_of_le_of_one_lt'", ["zero_lt"]], ["del", "theorem", "lt_mul_of_le_of_one_lt", ["zero_lt"]], ["del", "theorem", "lt_mul_of_lt_mul_left", ["zero_lt"]], ["del", "theorem", "lt_mul_of_lt_mul_right", ["zero_lt"]], ["del", "theorem", "lt_mul_of_lt_of_one_le'", ["zero_lt"]], ["del", "theorem", "lt_mul_of_lt_of_one_le", ["zero_lt"]], ["del", "theorem", "lt_mul_of_lt_of_one_lt'", ["zero_lt"]], ["del", "theorem", "lt_mul_of_lt_of_one_lt", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_le_of_lt'", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_le_of_lt", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_lt_left", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_lt_of_le'", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_lt_of_le", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_lt_of_lt'", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_lt_of_lt", ["zero_lt"]], ["del", "theorem", "lt_mul_of_one_lt_right", ["zero_lt"]], ["del", "theorem", "lt_of_lt_mul_of_le_one_left", ["zero_lt"]], ["del", "theorem", "lt_of_lt_mul_of_le_one_right", ["zero_lt"]], ["del", "theorem", "lt_of_mul_lt_mul_left'", ["zero_lt"]], ["del", "theorem", "lt_of_mul_lt_mul_left", ["zero_lt"]], ["del", "theorem", "lt_of_mul_lt_mul_right'", ["zero_lt"]], ["del", "theorem", "lt_of_mul_lt_mul_right", ["zero_lt"]], ["del", "theorem", "lt_of_mul_lt_of_one_le_left", ["zero_lt"]], ["del", "theorem", "lt_of_mul_lt_of_one_le_right", ["zero_lt"]], ["del", "theorem", "mul_eq_mul_iff_eq_and_eq'", ["zero_lt"]], ["del", "theorem", "mul_eq_mul_iff_eq_and_eq", ["zero_lt"]], ["del", "theorem", "mul_le_iff_le_one_left", ["zero_lt"]], ["del", "theorem", "mul_le_iff_le_one_right", ["zero_lt"]], ["del", "theorem", "mul_le_mul", ["zero_lt"]], ["del", "theorem", "mul_le_mul_left", ["zero_lt"]], ["del", "theorem", "mul_le_mul_left_of_le_of_pos", ["zero_lt"]], ["del", "theorem", "mul_le_mul_of_le_of_le", ["zero_lt"]], ["del", "theorem", "mul_le_mul_of_nonneg_left", ["zero_lt"]], ["del", "theorem", "mul_le_mul_of_nonneg_right", ["zero_lt"]], ["del", "theorem", "mul_le_mul_right", ["zero_lt"]], ["del", "theorem", "mul_le_mul_right_of_le_of_pos", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_of_le_one", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_one_left", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_one_of_le'", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_one_of_le", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_one_right", ["zero_lt"]], ["del", "theorem", "mul_le_of_mul_le_left", ["zero_lt"]], ["del", "theorem", "mul_le_of_mul_le_right", ["zero_lt"]], ["del", "theorem", "mul_left_cancel_iff_of_pos", ["zero_lt"]], ["del", "theorem", "mul_lt_iff_lt_one_left", ["zero_lt"]], ["del", "theorem", "mul_lt_iff_lt_one_right", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_left'", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_left", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_of_le_of_lt'", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_of_le_of_lt", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_of_lt_of_le'", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_of_lt_of_le", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_of_lt_of_lt'", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_of_lt_of_lt", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_right'", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_right", ["zero_lt"]], ["del", "theorem", "mul_lt_of_le_of_lt_one'", ["zero_lt"]], ["del", "theorem", "mul_lt_of_le_of_lt_one", ["zero_lt"]], ["del", "theorem", "mul_lt_of_le_one_of_lt'", ["zero_lt"]], ["del", "theorem", "mul_lt_of_le_one_of_lt", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_of_le_one'", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_of_le_one", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_of_lt_one'", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_of_lt_one", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_one_left", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_one_of_le'", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_one_of_le", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_one_of_lt'", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_one_of_lt", ["zero_lt"]], ["del", "theorem", "mul_lt_of_lt_one_right", ["zero_lt"]], ["del", "theorem", "mul_lt_of_mul_lt_left", ["zero_lt"]], ["del", "theorem", "mul_lt_of_mul_lt_right", ["zero_lt"]], ["del", "theorem", "mul_neg_of_neg_of_pos", ["zero_lt"]], ["del", "theorem", "mul_neg_of_pos_of_neg", ["zero_lt"]], ["del", "theorem", "mul_nonneg_le_one_le", ["zero_lt"]], ["del", "theorem", "mul_nonpos_of_nonneg_of_nonpos", ["zero_lt"]], ["del", "theorem", "mul_nonpos_of_nonpos_of_nonneg", ["zero_lt"]], ["del", "theorem", "to_mul_pos_reflect_lt", ["zero_lt", "mul_pos_mono"]], ["del", "theorem", "to_mul_pos_strict_mono", ["zero_lt", "mul_pos_mono"]], ["del", "def", "mul_pos_mono", ["zero_lt"]], ["del", "theorem", "mul_pos_mono_iff_mul_pos_reflect_lt", ["zero_lt"]], ["del", "theorem", "mul_pos_mono_iff_mul_pos_strict_mono", ["zero_lt"]], ["del", "theorem", "to_mul_pos_strict_mono", ["zero_lt", "mul_pos_mono_rev"]], ["del", "def", "mul_pos_mono_rev", ["zero_lt"]], ["del", "theorem", "mul_pos_mono_rev_iff_mul_pos_reflect_lt", ["zero_lt"]], ["del", "theorem", "to_mul_pos_mono", ["zero_lt", "mul_pos_reflect_lt"]], ["del", "theorem", "to_mul_pos_mono_rev", ["zero_lt", "mul_pos_reflect_lt"]], ["del", "def", "mul_pos_reflect_lt", ["zero_lt"]], ["del", "def", "mul_pos_strict_mono", ["zero_lt"]], ["del", "theorem", "mul_pos_strict_mono_iff_mul_pos_mono_rev", ["zero_lt"]], ["del", "theorem", "mul_right_cancel_iff_of_pos", ["zero_lt"]], ["del", "theorem", "neg_iff_neg_of_mul_pos", ["zero_lt"]], ["del", "theorem", "neg_of_mul_pos_left", ["zero_lt"]], ["del", "theorem", "neg_of_mul_pos_right", ["zero_lt"]], ["del", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", ["zero_lt"]], ["del", "theorem", "pos_iff_pos_of_mul_pos", ["zero_lt"]], ["del", "theorem", "to_pos_mul_reflect_lt", ["zero_lt", "pos_mul_mono"]], ["del", "theorem", "to_pos_mul_strict_mono", ["zero_lt", "pos_mul_mono"]], ["del", "def", "pos_mul_mono", ["zero_lt"]], ["del", "theorem", "pos_mul_mono_iff_mul_pos_mono", ["zero_lt"]], ["del", "theorem", "pos_mul_mono_iff_pos_mul_reflect_lt", ["zero_lt"]], ["del", "theorem", "pos_mul_mono_iff_pos_mul_strict_mono", ["zero_lt"]], ["del", "theorem", "to_pos_mul_strict_mono", ["zero_lt", "pos_mul_mono_rev"]], ["del", "def", "pos_mul_mono_rev", ["zero_lt"]], ["del", "theorem", "pos_mul_mono_rev_iff_mul_pos_mono_rev", ["zero_lt"]], ["del", "theorem", "pos_mul_mono_rev_iff_pos_mul_reflect_lt", ["zero_lt"]], ["del", "theorem", "to_pos_mul_mono", ["zero_lt", "pos_mul_reflect_lt"]], ["del", "theorem", "to_pos_mul_mono_rev", ["zero_lt", "pos_mul_reflect_lt"]], ["del", "def", "pos_mul_reflect_lt", ["zero_lt"]], ["del", "theorem", "pos_mul_reflect_lt_iff_mul_pos_reflect_lt", ["zero_lt"]], ["del", "def", "pos_mul_strict_mono", ["zero_lt"]], ["del", "theorem", "pos_mul_strict_mono_iff_mul_pos_strict_mono", ["zero_lt"]], ["del", "theorem", "pos_mul_strict_mono_iff_pos_mul_mono_rev", ["zero_lt"]], ["del", "theorem", "pos_of_mul_pos_left", ["zero_lt"]], ["del", "theorem", "pos_of_mul_pos_right", ["zero_lt"]], ["del", "theorem", "le_mul_of_le_mul_left", ["zero_lt", "preorder"]], ["del", "theorem", "le_mul_of_le_mul_right", ["zero_lt", "preorder"]], ["del", "theorem", "le_mul_of_le_of_one_le'", ["zero_lt", "preorder"]], ["del", "theorem", "le_mul_of_le_of_one_le", ["zero_lt", "preorder"]], ["del", "theorem", "le_mul_of_one_le_left", ["zero_lt", "preorder"]], ["del", "theorem", "le_mul_of_one_le_of_le'", ["zero_lt", "preorder"]], ["del", "theorem", "le_mul_of_one_le_of_le", ["zero_lt", "preorder"]], ["del", "theorem", "le_mul_of_one_le_right", ["zero_lt", "preorder"]], ["del", "theorem", "le_of_le_mul_of_le_one_left", ["zero_lt", "preorder"]], ["del", "theorem", "le_of_le_mul_of_le_one_right", ["zero_lt", "preorder"]], ["del", "theorem", "le_of_mul_le_of_one_le_left", ["zero_lt", "preorder"]], ["del", "theorem", "le_of_mul_le_of_one_le_right", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_one_of_le_of_le'", ["zero_lt", "preorder", "left"]], ["del", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "preorder", "left"]], ["del", "theorem", "lt_mul_of_le_of_one_lt'", ["zero_lt", "preorder"]], ["del", "theorem", "lt_mul_of_lt_of_one_le'", ["zero_lt", "preorder"]], ["del", "theorem", "lt_mul_of_one_le_of_lt'", ["zero_lt", "preorder"]], ["del", "theorem", "lt_mul_of_one_lt_of_le'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_mul_of_le_of_le'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_mul_of_le_of_le", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_le_of_le_one'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_le_of_le_one", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_le_one_left", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_le_one_of_le'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_le_one_of_le", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_le_one_right", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_mul_le_left", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_of_mul_le_right", ["zero_lt", "preorder"]], ["del", "theorem", "mul_lt_of_le_of_lt_one'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_lt_of_le_one_of_lt'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_lt_of_lt_of_le_one'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_lt_of_lt_one_of_le'", ["zero_lt", "preorder"]], ["del", "theorem", "mul_le_one_of_le_of_le", ["zero_lt", "preorder", "right"]], ["del", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "preorder", "right"]], ["del", "theorem", "mul_le_one_of_le_of_le", ["zero_lt", "right"]], ["del", "theorem", "mul_lt_one_of_le_of_lt", ["zero_lt", "right"]], ["del", "theorem", "mul_lt_one_of_lt_of_le", ["zero_lt", "right"]], ["del", "theorem", "mul_lt_one_of_lt_of_lt", ["zero_lt", "right"]], ["del", "theorem", "mul_nonneg", ["zero_lt", "right"]], ["del", "theorem", "mul_pos", ["zero_lt", "right"]], ["del", "theorem", "neg_of_mul_neg_left", ["zero_lt", "right"]], ["del", "theorem", "neg_of_mul_neg_right", ["zero_lt", "right"]], ["del", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "right"]], ["del", "theorem", "one_lt_mul_of_le_of_lt", ["zero_lt", "right"]], ["del", "theorem", "one_lt_mul_of_lt_of_le", ["zero_lt", "right"]], ["del", "theorem", "one_lt_mul_of_lt_of_lt", ["zero_lt", "right"]], ["del", "theorem", "zero_lt_mul_left", ["zero_lt"]], ["del", "theorem", "zero_lt_mul_right", ["zero_lt"]], ["add", "theorem", "zero_lt_mul_left", []], ["add", "theorem", "zero_lt_mul_right", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "le_of_mul_le_mul_left", []], ["del", "theorem", "le_of_mul_le_mul_right", []], ["del", "theorem", "mul_lt_mul_of_pos_left", []], ["del", "theorem", "mul_lt_mul_of_pos_right", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}]}, {"timestamp": 1663172276, "sha": "0602c598", "message": "refactor(model_theory/*): Use `countable` in model theory (#16496)\nUses `countable` instead of custom classes in the model theory library.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["del", "theorem", "card_functions_le_aleph_0", ["first_order", "language"]], ["del", "theorem", "card_le_aleph_0", ["first_order", "language"]], ["del", "theorem", "countable", ["first_order", "language", "encodable"]], ["del", "theorem", "countable_functions", ["first_order", "language", "encodable"]]]}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": [["del", "theorem", "card_le_aleph_0", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": [["mod", "theorem", "cg_iff_countable", ["first_order", "language", "Structure"]], ["mod", "theorem", "cg_iff_countable", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": [["mod", "theorem", "countable_quotient", ["first_order", "language", "age"]], ["mod", "theorem", "exists_countable_is_age_of_iff", ["first_order", "language"]], ["mod", "theorem", "is_fraisse", ["first_order", "language", "is_fraisse_limit"]], ["mod", "structure", "is_fraisse_limit", ["first_order", "language"]], ["mod", "theorem", "age_is_fraisse", ["first_order", "language", "is_ultrahomogeneous"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": [["mod", "theorem", "substructure_closure", ["set", "countable"]]]}]}, {"timestamp": 1663172274, "sha": "d8bc1823", "message": "chore(order/filter/basic): golf (#16472)\nReorder lemmas, golf", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1663172273, "sha": "5cbe3c4f", "message": "chore(data/finset/powerset): generalize powerset_len_nonempty (#16429)\n`powerset_len_nonempty` holds for `n ≤ s.card`.", "changes": [{"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["mod", "theorem", "powerset_len_nonempty", ["finset"]]]}]}, {"timestamp": 1663172272, "sha": "94b2c2cb", "message": "chore(category_theory/sites/limits): generalise universe level (#16408)", "changes": [{"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}]}, {"timestamp": 1663172271, "sha": "9532aeba", "message": "chore(data/mv_polynomial/{basic, monad}): move lemmas `aeval_X_left` and `aeval_X_left_apply` (#16391)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "aeval_X_left", ["mv_polynomial"]], ["add", "theorem", "aeval_X_left_apply", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": [["del", "theorem", "aeval_X_left", ["mv_polynomial"]], ["del", "theorem", "aeval_X_left_apply", ["mv_polynomial"]]]}]}, {"timestamp": 1663172269, "sha": "71b8c46a", "message": "feat(ring_theory/multiplicity): generalize `multiplicity` (#16330)\nDivisibility is defined for any `semigroup`, so I also reduce the assumption of `multiplicity` to any `monoid`. At least it can be used for the elements which commute with every element, such as `power_series.X`.\n- [x] depends on: #16328", "changes": [{"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_eq_multiplicity_iff", ["multiplicity"]], ["add", "theorem", "not_dvd_one_of_finite_one_right", ["multiplicity"]], ["mod", "def", "multiplicity", []]]}]}, {"timestamp": 1663162225, "sha": "db0c0a79", "message": "refactor (equiv.perm.basic): base of_subtype on extend_domain (#16484)\nThere were two distinct ways to extend a permutation from a subtype to the ambient type.\nAs suggested by Johann Commelin in \nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/permutations.20.3A.20of_subtype.20vs.20extend_domain/near/298180355\nthis PR unifies them by basing .of_subtype on the more general .extend_domain.\nSome proofs have been redone, some other simplified.\nFor symmetry, I also added cycle_type_of_subtype (it just calls cycle_type_extend_domain.", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/basic.lean", "newPath": "src/group_theory/perm/cycle/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": [["add", "theorem", "cycle_type_of_subtype", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": [["add", "theorem", "of_subtype_swap_eq", ["equiv", "perm"]]]}]}, {"timestamp": 1663159131, "sha": "11878a45", "message": "feat(topology/algebra/uniform_convergence): maps to a uniform group form a uniform group when equipped with the uniform structure of `𝔖`-convergence (#14693)", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/uniform_convergence.lean", "changes": [["add", "structure", "of", []]]}]}, {"timestamp": 1663153987, "sha": "e1452ef2", "message": "chore(number_theory/legendre_symbol/*): move zmod.{legendre|jacobi}_sym* to other namespaces (#16461)\nThis PR moves `legendre_sym` and `jacobi_sym` (and `qr_sign`) to the root namespace. It also moves definitions and lemmas named `legendre_sym_...` to the `legendre_sym` namespace and analogous for `jacobi_sym_...` and `qr_sign_...`. We change names like `jacobi_sym_two` to `jacobi_sym.at_two`.\nThis mostly affects the files `number_theory.legendre_symbol.quadratic_reciprocity` and `number_theory.legendre_symbol.jacobi_symbol`. Note that names like `exists_sq_eq_neg_one_iff` have been left in `zmod`. We prefix `quadratic_reciprocity*` by `legendre_sym` to disambiguate with the versions for the Jacobi symbol. (The links in `docs/100.yaml` and `docs/overview.yaml` are updated accordingly.)\nWe also move the results in `number_theory.legendre_symbol.gauss_eisenstein_lemmas` from the `legendre_symbol` namespace to the `zmod` namespace.\nSee this [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Jacobi.20symbol/near/297792676) and the comments at [#16395](https://github.com/leanprover-community/mathlib/pull/16395) for discussion.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": [["del", "theorem", "Ico_map_val_min_abs_nat_abs_eq_Ico_map_id", ["legendre_symbol"]], ["del", "theorem", "div_eq_filter_card", ["legendre_symbol"]], ["del", "theorem", "eisenstein_lemma", ["legendre_symbol"]], ["del", "theorem", "eisenstein_lemma_aux", ["legendre_symbol"]], ["del", "theorem", "gauss_lemma", ["legendre_symbol"]], ["del", "theorem", "gauss_lemma_aux", ["legendre_symbol"]], ["del", "theorem", "sum_mul_div_add_sum_mul_div_eq_mul", ["legendre_symbol"]], ["add", "theorem", "Ico_map_val_min_abs_nat_abs_eq_Ico_map_id", ["zmod"]], ["add", "theorem", "div_eq_filter_card", ["zmod"]], ["add", "theorem", "eisenstein_lemma", ["zmod"]], ["add", "theorem", "eisenstein_lemma_aux", ["zmod"]], ["add", "theorem", "gauss_lemma", ["zmod"]], ["add", "theorem", "gauss_lemma_aux", ["zmod"]], ["add", "theorem", "sum_mul_div_add_sum_mul_div_eq_mul", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "newPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "changes": [["add", "theorem", "at_neg_one", ["jacobi_sym"]], ["add", "theorem", "at_neg_two", ["jacobi_sym"]], ["add", "theorem", "at_two", ["jacobi_sym"]], ["add", "theorem", "eq_one_or_neg_one", ["jacobi_sym"]], ["add", "theorem", "eq_zero_iff", ["jacobi_sym"]], ["add", "theorem", "eq_zero_iff_not_coprime", ["jacobi_sym"]], ["add", "theorem", "mod_left'", ["jacobi_sym"]], ["add", "theorem", "mod_left", ["jacobi_sym"]], ["add", "theorem", "mod_right'", ["jacobi_sym"]], ["add", "theorem", "mod_right", ["jacobi_sym"]], ["add", "theorem", "mul_left", ["jacobi_sym"]], ["add", "theorem", "mul_right'", ["jacobi_sym"]], ["add", "theorem", "mul_right", ["jacobi_sym"]], ["add", "theorem", "ne_zero", ["jacobi_sym"]], ["add", "theorem", "neg", ["jacobi_sym"]], ["add", "theorem", "one_left", ["jacobi_sym"]], ["add", "theorem", "one_right", ["jacobi_sym"]], ["add", "theorem", "pow_left", ["jacobi_sym"]], ["add", "theorem", "pow_right", ["jacobi_sym"]], ["add", "theorem", "quadratic_reciprocity'", ["jacobi_sym"]], ["add", "theorem", "quadratic_reciprocity", ["jacobi_sym"]], ["add", "theorem", "quadratic_reciprocity_one_mod_four'", ["jacobi_sym"]], ["add", "theorem", "quadratic_reciprocity_one_mod_four", ["jacobi_sym"]], ["add", "theorem", "quadratic_reciprocity_three_mod_four", ["jacobi_sym"]], ["add", "theorem", "sq_one'", ["jacobi_sym"]], ["add", "theorem", "sq_one", ["jacobi_sym"]], ["add", "theorem", "trichotomy", ["jacobi_sym"]], ["add", "theorem", "value_at", ["jacobi_sym"]], ["add", "theorem", "zero_left", ["jacobi_sym"]], ["add", "theorem", "zero_right", ["jacobi_sym"]], ["add", "def", "jacobi_sym", []], ["add", "theorem", "to_jacobi_sym", ["legendre_sym"]], ["add", "theorem", "eq_iff_eq", ["qr_sign"]], ["add", "theorem", "mul_left", ["qr_sign"]], ["add", "theorem", "mul_right", ["qr_sign"]], ["add", "theorem", "neg_one_pow", ["qr_sign"]], ["add", "theorem", "sq_eq_one", ["qr_sign"]], ["add", "theorem", "symm", ["qr_sign"]], ["add", "def", "qr_sign", []], ["del", "def", "jacobi_sym", ["zmod"]], ["del", "theorem", "jacobi_sym_eq_one_or_neg_one", ["zmod"]], ["del", "theorem", "jacobi_sym_eq_zero_iff", ["zmod"]], ["del", "theorem", "jacobi_sym_eq_zero_iff_not_coprime", ["zmod"]], ["del", "theorem", "jacobi_sym_mod_left'", ["zmod"]], ["del", "theorem", "jacobi_sym_mod_left", ["zmod"]], ["del", "theorem", "jacobi_sym_mod_right'", ["zmod"]], ["del", "theorem", "jacobi_sym_mod_right", ["zmod"]], ["del", "theorem", "jacobi_sym_mul_left", ["zmod"]], ["del", "theorem", "jacobi_sym_mul_right'", ["zmod"]], ["del", "theorem", "jacobi_sym_mul_right", ["zmod"]], ["del", "theorem", "jacobi_sym_ne_zero", ["zmod"]], ["del", "theorem", "jacobi_sym_neg", ["zmod"]], ["del", "theorem", "jacobi_sym_neg_one", ["zmod"]], ["del", "theorem", "jacobi_sym_neg_two", ["zmod"]], ["del", "theorem", "jacobi_sym_one_left", ["zmod"]], ["del", "theorem", "jacobi_sym_one_right", ["zmod"]], ["del", "theorem", "jacobi_sym_pow_left", ["zmod"]], ["del", "theorem", "jacobi_sym_pow_right", ["zmod"]], ["del", "theorem", "jacobi_sym_quadratic_reciprocity'", ["zmod"]], ["del", "theorem", "jacobi_sym_quadratic_reciprocity", ["zmod"]], ["del", "theorem", "jacobi_sym_quadratic_reciprocity_one_mod_four'", ["zmod"]], ["del", "theorem", "jacobi_sym_quadratic_reciprocity_one_mod_four", ["zmod"]], ["del", "theorem", "jacobi_sym_quadratic_reciprocity_three_mod_four", ["zmod"]], ["del", "theorem", "jacobi_sym_sq_one'", ["zmod"]], ["del", "theorem", "jacobi_sym_sq_one", ["zmod"]], ["del", "theorem", "jacobi_sym_trichotomy", ["zmod"]], ["del", "theorem", "jacobi_sym_two", ["zmod"]], ["del", "theorem", "jacobi_sym_value", ["zmod"]], ["del", "theorem", "jacobi_sym_zero_left", ["zmod"]], ["del", "theorem", "jacobi_sym_zero_right", ["zmod"]], ["del", "theorem", "to_jacobi_sym", ["zmod", "legendre_sym"]], ["del", "def", "qr_sign", ["zmod"]], ["del", "theorem", "qr_sign_eq_iff_eq", ["zmod"]], ["del", "theorem", "qr_sign_mul_left", ["zmod"]], ["del", "theorem", "qr_sign_mul_right", ["zmod"]], ["del", "theorem", "qr_sign_neg_one_pow", ["zmod"]], ["del", "theorem", "qr_sign_sq_eq_one", ["zmod"]], ["del", "theorem", "qr_sign_symm", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["add", "theorem", "at_neg_one", ["legendre_sym"]], ["add", "theorem", "at_neg_two", ["legendre_sym"]], ["add", "theorem", "at_one", ["legendre_sym"]], ["add", "theorem", "at_two", ["legendre_sym"]], ["add", "theorem", "at_zero", ["legendre_sym"]], ["add", "theorem", "card_sqrts", ["legendre_sym"]], ["add", "theorem", "eq_neg_one_iff'", ["legendre_sym"]], ["add", "theorem", "eq_neg_one_iff", ["legendre_sym"]], ["add", "theorem", "eq_neg_one_iff_not_one", ["legendre_sym"]], ["add", "theorem", "eq_one_iff'", ["legendre_sym"]], ["add", "theorem", "eq_one_iff", ["legendre_sym"]], ["add", "theorem", "eq_one_or_neg_one", ["legendre_sym"]], ["add", "theorem", "eq_pow", ["legendre_sym"]], ["add", "theorem", "eq_zero_iff", ["legendre_sym"]], ["add", "def", "hom", ["legendre_sym"]], ["add", "theorem", "mod", ["legendre_sym"]], ["add", "theorem", "mul", ["legendre_sym"]], ["add", "theorem", "quadratic_reciprocity'", ["legendre_sym"]], ["add", "theorem", "quadratic_reciprocity", ["legendre_sym"]], ["add", "theorem", "quadratic_reciprocity_one_mod_four", ["legendre_sym"]], ["add", "theorem", "quadratic_reciprocity_three_mod_four", ["legendre_sym"]], ["add", "theorem", "sq_one'", ["legendre_sym"]], ["add", "theorem", "sq_one", ["legendre_sym"]], ["add", "def", "legendre_sym", []], ["del", "def", "legendre_sym", ["zmod"]], ["del", "theorem", "legendre_sym_card_sqrts", ["zmod"]], ["del", "theorem", "legendre_sym_eq_neg_one_iff'", ["zmod"]], ["del", "theorem", "legendre_sym_eq_neg_one_iff", ["zmod"]], ["del", "theorem", "legendre_sym_eq_neg_one_iff_not_one", ["zmod"]], ["del", "theorem", "legendre_sym_eq_one_iff'", ["zmod"]], ["del", "theorem", "legendre_sym_eq_one_iff", ["zmod"]], ["del", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmod"]], ["del", "theorem", "legendre_sym_eq_pow", ["zmod"]], ["del", "theorem", "legendre_sym_eq_zero_iff", ["zmod"]], ["del", "def", "legendre_sym_hom", ["zmod"]], ["del", "theorem", "legendre_sym_mod", ["zmod"]], ["del", "theorem", "legendre_sym_mul", ["zmod"]], ["del", "theorem", "legendre_sym_neg_one", ["zmod"]], ["del", "theorem", "legendre_sym_neg_two", ["zmod"]], ["del", "theorem", "legendre_sym_one", ["zmod"]], ["del", "theorem", "legendre_sym_sq_one'", ["zmod"]], ["del", "theorem", "legendre_sym_sq_one", ["zmod"]], ["del", "theorem", "legendre_sym_two", ["zmod"]], ["del", "theorem", "legendre_sym_zero", ["zmod"]], ["del", "theorem", "quadratic_reciprocity'", ["zmod"]], ["del", "theorem", "quadratic_reciprocity", ["zmod"]], ["del", "theorem", "quadratic_reciprocity_one_mod_four", ["zmod"]], ["del", "theorem", "quadratic_reciprocity_three_mod_four", ["zmod"]]]}]}, {"timestamp": 1663153982, "sha": "b118db5c", "message": "feat(ring_theory/roots_of_unity): add roots_of_unity.norm_one (#16426)\nThis is the proof that the norm of the image of a root of unity by a ring homomorphism is always equal to one.\nThis is the counterpart of the result proved in #15143 that an algebraic integer whose conjugates are all of absolute value one is a root of unity. \nFrom flt-regular", "changes": [{"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": [["add", "theorem", "norm_map_one_of_pow_eq_one", []], ["add", "theorem", "norm_one_of_pow_eq_one", []]]}]}, {"timestamp": 1663144090, "sha": "a3bb2050", "message": "feat(topology/separation): generalize&rename a lemma (#16503)\n* rename `tot_sep_of_zero_dim` to `totally_separated_space_of_t1_of_basis_clopen`;\n* generalize it from a `t2_space` to a `t1_space`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "subset", ["eq"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "tot_sep_of_zero_dim", []], ["add", "theorem", "totally_separated_space_of_t1_of_basis_clopen", []]]}]}, {"timestamp": 1663144088, "sha": "f9f5d51e", "message": "feat(algebra/order/group): some more lemmas about `min`, `max`, and `abs` (#16485)\nThese are trivially true, but require a bit of annoying casework, making them handy to package into lemmas.", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "theorem", "abs_le_max_abs_abs", []], ["add", "theorem", "abs_max_le_max_abs_abs", []], ["add", "theorem", "abs_min_le_max_abs_abs", []], ["add", "theorem", "min_abs_abs_le_abs_max", []], ["add", "theorem", "min_abs_abs_le_abs_min", []]]}]}, {"timestamp": 1663134484, "sha": "8b8cd99c", "message": "feat(analysis/calculus): Taylor's theorem (#15087)\nProves Taylor's theorem for the mean value form of the remainder. There are four different versions: the general case for real-valued functions, the Lagrange form, the Cauchy form, and a version for vector valued functions.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "div_mul_eq_mul_div₀", []]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "unique_diff_within_at_Ioo", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/taylor.lean", "changes": [["add", "theorem", "continuous_on_taylor_within_eval", []], ["add", "theorem", "exists_taylor_mean_remainder_bound", []], ["add", "theorem", "has_deriv_within_at_taylor_coeff_within", []], ["add", "theorem", "has_deriv_within_at_taylor_within_eval", []], ["add", "theorem", "has_deriv_within_taylor_within_eval_at_Icc", []], ["add", "theorem", "monomial_has_deriv_aux", []], ["add", "def", "taylor_coeff_within", []], ["add", "theorem", "taylor_mean_remainder", []], ["add", "theorem", "taylor_mean_remainder_bound", []], ["add", "theorem", "taylor_mean_remainder_cauchy", []], ["add", "theorem", "taylor_mean_remainder_lagrange", []], ["add", "def", "taylor_within", []], ["add", "theorem", "taylor_within_apply", []], ["add", "def", "taylor_within_eval", []], ["add", "theorem", "taylor_within_eval_has_deriv_at_Ioo", []], ["add", "theorem", "taylor_within_eval_self", []], ["add", "theorem", "taylor_within_eval_succ", []], ["add", "theorem", "taylor_within_succ", []], ["add", "theorem", "taylor_within_zero_eval", []]]}, {"oldPath": "src/data/polynomial/module.lean", "newPath": "src/data/polynomial/module.lean", "changes": [["add", "theorem", "eval_lsingle", ["polynomial_module"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "continuous_on_finset_prod", []], ["add", "theorem", "continuous_on_list_prod", []], ["add", "theorem", "continuous_on_multiset_prod", []]]}]}, {"timestamp": 1663115252, "sha": "2ff92045", "message": "feat(analysis/inner_product_space/projection): remove useless `complete_space E` assumption (#15682)\nThe current proof decomposes v as its projection on K and its projection on the orthogonal complement of K, thus requiring `E` to be complete. Instead, we decompose it as `v = p v + (v - p v)`, where `p` is the projection on K.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "inner_orthogonal_projection_eq_of_mem_left", []], ["add", "theorem", "inner_orthogonal_projection_eq_of_mem_right", []], ["mod", "theorem", "inner_orthogonal_projection_left_eq_right", []], ["mod", "theorem", "orthogonal_projection_is_symmetric", []]]}]}, {"timestamp": 1663104406, "sha": "3d369087", "message": "fix(order/bounded_order): remove classical axiom from Prop.distrib_lattice (#16497)\nUsed all three axioms before, now only `propext`.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}]}, {"timestamp": 1663096763, "sha": "ed9be880", "message": "docs(category_theory): mention notation for identity homs (#16410)", "changes": [{"oldPath": "src/category_theory/category/basic.lean", "newPath": "src/category_theory/category/basic.lean", "changes": []}]}, {"timestamp": 1663076255, "sha": "d268bb7a", "message": "feat(data/polynomial/eval): add polynomial.map_bit0/1 (#16481)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "map_smul", ["polynomial"]]]}]}, {"timestamp": 1663076254, "sha": "c0ad3bf9", "message": "feat(topology/algebra/uniform_group): the quotient of a first countable complete topological group by a normal subgroup is itself complete (#16368)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "nhds_eq", ["quotient_group"]], ["add", "theorem", "exists_antitone_basis_nhds_one", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1663076253, "sha": "01a8a9f8", "message": "feat(convex/specific_functions): specific case of Jensen's inequality for powers (#16186)\nProves a specific case of Jensen's inequality: a powers of a sum divided by the cardinality of the `finset` is less than or equal to the sum of the powers.", "changes": [{"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["add", "theorem", "pow_sum_div_card_le_sum_pow", ["nnreal"]], ["add", "theorem", "pow_sum_div_card_le_sum_pow", ["real"]]]}]}, {"timestamp": 1663076252, "sha": "3c93c656", "message": "feat(analysis/inner_product_space/l2_space): the family of subspaces spanned by finitely many elements of a Hilbert basis has dense supremum (#15821)", "changes": [{"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": [["add", "theorem", "finite_spans_dense", ["hilbert_basis"]]]}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "span_monotone", ["submodule"]]]}]}, {"timestamp": 1663066158, "sha": "a945b376", "message": "feat(data/sym/basic): add `fill` `filter_ne` and `sigma_ext` (#16316)\nAdd definitions and lemmas to support a proof for the multinomial theorem.", "changes": [{"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["add", "def", "append", ["sym"]], ["add", "theorem", "append_comm", ["sym"]], ["add", "theorem", "append_inj_left", ["sym"]], ["add", "theorem", "append_inj_right", ["sym"]], ["add", "theorem", "cast_cast", ["sym"]], ["add", "theorem", "cast_rfl", ["sym"]], ["add", "theorem", "coe_cast", ["sym"]], ["add", "def", "fill", ["sym"]], ["add", "def", "filter_ne", ["sym"]], ["add", "theorem", "sigma_sub_ext", ["sym"]]]}]}, {"timestamp": 1663059768, "sha": "c64fb26a", "message": "feat(topology/algebra/order/intermediate_value): intervals are connected (#16473)\n`topology.algebra.order.intermediate_value` has a series of lemmas that different kinds of intervals are preconnected. Add a corresponding series of lemmas that intervals are connected (with appropriate extra conditions on the order or the endpoints as needed).", "changes": [{"oldPath": "src/topology/algebra/order/intermediate_value.lean", "newPath": "src/topology/algebra/order/intermediate_value.lean", "changes": [["add", "theorem", "is_connected_Icc", []], ["add", "theorem", "is_connected_Ici", []], ["add", "theorem", "is_connected_Ico", []], ["add", "theorem", "is_connected_Iic", []], ["add", "theorem", "is_connected_Iio", []], ["add", "theorem", "is_connected_Ioc", []], ["add", "theorem", "is_connected_Ioi", []], ["add", "theorem", "is_connected_Ioo", []]]}]}, {"timestamp": 1663050569, "sha": "4ff10212", "message": "feat(analysis/normed_space/units): maximal ideals in complete normed rings are closed (#16303)", "changes": [{"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": [["add", "theorem", "closure_ne_top", ["ideal"]], ["add", "theorem", "eq_top_of_norm_lt_one", ["ideal"]], ["add", "theorem", "closure_eq", ["ideal", "is_maximal"]], ["add", "theorem", "subset_compl_ball", ["nonunits"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1663042974, "sha": "5bd4f627", "message": "chore(ring_theory/local_properties): remove coercions from `ring_hom` to `monoid_hom` (#16453)\nNow that `submonoid.map` takes `monoid_hom_class`, these aren't necessary. Also golfs a pair of proofs.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/inv_submonoid.lean", "newPath": "src/ring_theory/localization/inv_submonoid.lean", "changes": [["mod", "def", "equiv_inv_submonoid", ["is_localization"]], ["mod", "def", "inv_submonoid", ["is_localization"]], ["mod", "theorem", "submonoid_map_le_is_unit", ["is_localization"]]]}, {"oldPath": "src/ring_theory/localization/localization_localization.lean", "newPath": "src/ring_theory/localization/localization_localization.lean", "changes": []}]}, {"timestamp": 1663038268, "sha": "06ae0493", "message": "feat(data/complex/module): define `real_part` and `imaginary_part` (#16438)\nIn a generic `star_module` one always has a decomposition of any element into a `self_adjoint_part` and a `skew_self_adjoint` part, but in a star module over `ℂ` we can instead decompose any element into a `real_part` and an `imaginary_part`, both of which are self-adjoint. Here we define these as `ℝ`-linear maps from the star module into the type of its self-adjoint elements and describe the basic relationships between these maps. The decomposition into real and imaginary parts is often useful for reducing arguments about elements of a star module over `ℂ` to the case when the element is self-adjoint.", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "def", "imaginary_part", []], ["add", "theorem", "imaginary_part_I_smul", []], ["add", "theorem", "imaginary_part_apply_coe", []], ["add", "theorem", "imaginary_part_smul", []], ["add", "theorem", "real_part_I_smul", []], ["add", "theorem", "real_part_add_I_smul_imaginary_part", []], ["add", "theorem", "real_part_apply_coe", []], ["add", "theorem", "real_part_smul", []], ["add", "theorem", "I_smul_neg_I", ["skew_adjoint"]], ["add", "def", "neg_I_smul", ["skew_adjoint"]]]}]}, {"timestamp": 1663012427, "sha": "36e01301", "message": "feat(ring_theory/dedekind_domain/ideal): construct map between the sets of prime factors of ideal `I` and `J` induced by an isomorphism between `R/I` and `S/J` (#16455)\nThese lemmas generalize results that were originally in #15000.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["mod", "def", "ideal_factors_equiv_of_quot_equiv", []], ["add", "theorem", "ideal_factors_equiv_of_quot_equiv_is_dvd_iso", []], ["add", "theorem", "ideal_factors_equiv_of_quot_equiv_mem_normalized_factors_of_mem_normalized_factors", []], ["add", "theorem", "ideal_factors_equiv_of_quot_equiv_symm", []], ["add", "theorem", "multiplicity_normalized_factors_equiv_span_normalized_factors_eq_multiplicity", []], ["add", "theorem", "multiplicity_normalized_factors_equiv_span_normalized_factors_symm_eq_multiplicity", []], ["add", "def", "normalized_factors_equiv_of_quot_equiv", []], ["add", "theorem", "normalized_factors_equiv_of_quot_equiv_multiplicity_eq_multiplicity", []], ["add", "theorem", "normalized_factors_equiv_of_quot_equiv_symm", []]]}]}, {"timestamp": 1663012426, "sha": "a280c1e5", "message": "feat(data/nat/{choose/multinomial,factorial/big_operations}): add multinomial coefficient definition with basic lemma's (#16170)\nChose a definition based on finset and a function for multiplicity. This allows the definition to be used in various context, including in a multiset context, where multiset.count yields the function describing multiplicity. Supporting lemma's concerning factorials are introduced in a new file, since importing big_operators in the main factorial file yields a circular import.", "changes": [{"oldPath": null, "newPath": "src/data/nat/choose/multinomial.lean", "changes": [["add", "theorem", "binomial_eq", ["nat"]], ["add", "theorem", "binomial_eq_choose", ["nat"]], ["add", "theorem", "binomial_one", ["nat"]], ["add", "theorem", "binomial_spec", ["nat"]], ["add", "theorem", "binomial_succ_succ", ["nat"]], ["add", "def", "multinomial", ["nat"]], ["add", "theorem", "multinomial_insert", ["nat"]], ["add", "theorem", "multinomial_insert_one", ["nat"]], ["add", "theorem", "multinomial_nil", ["nat"]], ["add", "theorem", "multinomial_pos", ["nat"]], ["add", "theorem", "multinomial_singleton", ["nat"]], ["add", "theorem", "multinomial_spec", ["nat"]], ["add", "theorem", "multinomial_univ_three", ["nat"]], ["add", "theorem", "multinomial_univ_two", ["nat"]], ["add", "theorem", "succ_mul_binomial", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/factorial/big_operators.lean", "changes": [["add", "theorem", "prod_factorial_dvd_factorial_sum", ["nat"]], ["add", "theorem", "prod_factorial_pos", ["nat"]]]}]}, {"timestamp": 1663007225, "sha": "1b3556cc", "message": "chore(linear_algebra): rename dual_pair (#16482)\nThis only renames `dual_pair` to `module.dual_bases`, avoiding to put a very generic name into the root name space. This `dual_pair` was used only in the archive, I introduced it a very long time ago to streamline the proof of the sensitivity conjecture.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": [["add", "def", "dual_bases_e_ε", []], ["del", "def", "dual_pair_e_ε", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["del", "def", "basis", ["dual_pair"]], ["del", "theorem", "coe_basis", ["dual_pair"]], ["del", "theorem", "coe_dual_basis", ["dual_pair"]], ["del", "def", "coeffs", ["dual_pair"]], ["del", "theorem", "coeffs_apply", ["dual_pair"]], ["del", "theorem", "coeffs_lc", ["dual_pair"]], ["del", "theorem", "dual_lc", ["dual_pair"]], ["del", "def", "lc", ["dual_pair"]], ["del", "theorem", "lc_coeffs", ["dual_pair"]], ["del", "theorem", "lc_def", ["dual_pair"]], ["del", "theorem", "mem_of_mem_span", ["dual_pair"]], ["del", "structure", "dual_pair", []], ["add", "def", "basis", ["module", "dual_bases"]], ["add", "theorem", "coe_basis", ["module", "dual_bases"]], ["add", "theorem", "coe_dual_basis", ["module", "dual_bases"]], ["add", "def", "coeffs", ["module", "dual_bases"]], ["add", "theorem", "coeffs_apply", ["module", "dual_bases"]], ["add", "theorem", "coeffs_lc", ["module", "dual_bases"]], ["add", "theorem", "dual_lc", ["module", "dual_bases"]], ["add", "def", "lc", ["module", "dual_bases"]], ["add", "theorem", "lc_coeffs", ["module", "dual_bases"]], ["add", "theorem", "lc_def", ["module", "dual_bases"]], ["add", "theorem", "mem_of_mem_span", ["module", "dual_bases"]], ["add", "structure", "dual_bases", ["module"]]]}]}, {"timestamp": 1663007224, "sha": "f058af30", "message": "feat(analysis/inner_product_space/pi_L2): change of basis matrix between orthonormal bases is unitary (#16474)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "det_to_matrix_orthonormal_basis", ["orthonormal_basis"]], ["add", "theorem", "det_to_matrix_orthonormal_basis_real", ["orthonormal_basis"]], ["add", "theorem", "to_matrix_orthonormal_basis_mem_orthogonal", ["orthonormal_basis"]], ["add", "theorem", "to_matrix_orthonormal_basis_mem_unitary", ["orthonormal_basis"]]]}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": [["add", "theorem", "det_of_mem_unitary", ["matrix"]], ["add", "theorem", "mem_orthogonal_group_iff'", ["matrix"]], ["add", "theorem", "mem_unitary_group_iff'", ["matrix"]]]}]}, {"timestamp": 1662998532, "sha": "38963b53", "message": "feat(algebra/algebra/basic): add two simp lemmas (#16096)\nTwo simp lemmas that are useful for dealing with the group of automorphisms of an algebra.\nI also had to fix two proofs from `field_theory/krull_topology`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}]}, {"timestamp": 1662988344, "sha": "60f72157", "message": "chore(data/real/cau_seq_completion): golf using existing lemmas (#16469)\nThis extracts `cau_seq.mul_equiv_mul` and `cau_seq.sub_equiv_sub` into standalone lemmas, and uses the existing lemmas for `add` and `neg` rather than reproving the result from scratch.", "changes": [{"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["add", "theorem", "mul_equiv_mul", ["cau_seq"]], ["add", "theorem", "sub_equiv_sub", ["cau_seq"]]]}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}]}, {"timestamp": 1662988343, "sha": "86be023b", "message": "feat(data/polynomial/algebra_map): add `aeval_X_left_apply` (#16433)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_X_left_apply", ["polynomial"]]]}]}, {"timestamp": 1662988342, "sha": "28b23c94", "message": "feat(analysis/normed/group/seminorm): Group norms (#16237)\nDefine (additive) group norms, which are group seminorms `f` such that `f x = 0 → x = 0` (resp. `f x = 0 → x = 1`), along with their hom classes.", "changes": [{"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": [["add", "theorem", "apply_one", ["add_group_norm"]], ["add", "structure", "add_group_norm", []], ["add", "theorem", "apply_one", ["add_group_seminorm"]], ["add", "theorem", "add_apply", ["group_norm"]], ["add", "theorem", "apply_one", ["group_norm"]], ["add", "theorem", "coe_add", ["group_norm"]], ["add", "theorem", "coe_le_coe", ["group_norm"]], ["add", "theorem", "coe_lt_coe", ["group_norm"]], ["add", "theorem", "coe_sup", ["group_norm"]], ["add", "theorem", "ext", ["group_norm"]], ["add", "theorem", "le_def", ["group_norm"]], ["add", "theorem", "lt_def", ["group_norm"]], ["add", "theorem", "sup_apply", ["group_norm"]], ["add", "structure", "group_norm", []], ["add", "theorem", "apply_one", ["group_seminorm"]], ["add", "theorem", "mul_bdd_below_range_add", ["group_seminorm"]], ["add", "theorem", "map_eq_zero_iff_eq_one", []], ["add", "theorem", "map_ne_zero_iff_ne_one", []], ["add", "theorem", "map_pos_of_ne_one", []]]}]}, {"timestamp": 1662980692, "sha": "e1847377", "message": "feat(data/real/ennreal): Add `to_real_{min, sup, inf}` (#16233)\nThis adds `to_real_min` to match `to_real_max`, and adds `inf` and `sup` spellings of these lemmas.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_real_inf", ["ennreal"]], ["add", "theorem", "to_real_min", ["ennreal"]], ["add", "theorem", "to_real_sup", ["ennreal"]]]}]}, {"timestamp": 1662980691, "sha": "1c4e1843", "message": "refactor(set_theory/basic): match `x < ℵ₀` lemmas with `x ≤ ℵ₀` lemmas (#15662)\n* Mark `cardinal.lt_aleph_0_iff_set_finite` as `@[simp]` lemma.\n* Add `cardinal.lt_aleph_0_iff_subtype_finite` and `cardinal.mk_le_aleph_0_iff`; drop `cardinal.encodable_iff`.\n* Rename `cardinal.mk_set_le_aleph_0` to `cardinal.le_aleph_0_iff_set_countable`.\n* Rename `cardinal.mk_subtype_le_aleph_0` to `cardinal.le_aleph_0_iff_subtype_countable`.\n* Make `first_order.language.countable` protected.\n* Use `[countable _]` instead of `[encodable _]` or `[nonempty (encodable _)]` here and there.", "changes": [{"oldPath": "src/algebra/algebraic_card.lean", "newPath": "src/algebra/algebraic_card.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/data/complex/cardinality.lean", "newPath": "src/data/complex/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["mod", "theorem", "countable", ["first_order", "language", "encodable"]]]}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": [["mod", "theorem", "card_le_aleph_0", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": [["mod", "theorem", "cg_iff_countable", ["first_order", "language", "Structure"]]]}, {"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": []}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["del", "theorem", "encodable_iff", ["cardinal"]], ["add", "theorem", "le_aleph_0_iff_set_countable", ["cardinal"]], ["add", "theorem", "le_aleph_0_iff_subtype_countable", ["cardinal"]], ["mod", "theorem", "lt_aleph_0_iff_set_finite", ["cardinal"]], ["add", "theorem", "lt_aleph_0_iff_subtype_finite", ["cardinal"]], ["mod", "theorem", "mk_le_aleph_0", ["cardinal"]], ["add", "theorem", "mk_le_aleph_0_iff", ["cardinal"]], ["del", "theorem", "mk_set_le_aleph_0", ["cardinal"]], ["del", "theorem", "mk_subtype_le_aleph_0", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}]}, {"timestamp": 1662980690, "sha": "d5ef0684", "message": "feat(linear_algebra/finsupp): A variant of `finsupp.total` for `fintype`s. (#15462)", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "total_eq_fintype_total", ["finsupp"]], ["add", "theorem", "total_eq_fintype_total_apply", ["finsupp"]], ["add", "theorem", "range_total", ["fintype"]], ["add", "theorem", "total_apply", ["fintype"]], ["add", "theorem", "total_apply_single", ["fintype"]]]}]}, {"timestamp": 1662974402, "sha": "745e23d5", "message": "feat(measure_theory/function/conditional_expectation): conditional expectation with respect to the bot sigma algebra (#16342)\nProve that for a probability measure, `μ[f|⊥] = λ _, ∫ x, f x ∂μ`.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": [["add", "theorem", "condexp_bot'", ["measure_theory"]], ["add", "theorem", "condexp_bot", ["measure_theory"]], ["add", "theorem", "condexp_bot_ae_eq", ["measure_theory"]], ["mod", "theorem", "integral_condexp", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "strongly_measurable_bot_iff", []]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "simple_func_bot'", ["measure_theory", "simple_func"]], ["add", "theorem", "simple_func_bot", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "not_is_finite_measure_iff", ["measure_theory"]], ["add", "theorem", "sigma_finite_bot_iff", ["measure_theory"]], ["add", "theorem", "sigma_finite_trim_bot_iff", ["measure_theory"]]]}]}, {"timestamp": 1662946481, "sha": "3c006126", "message": "feat(data/{seq,stream}): cons_injective2 (#15832)\nAlso some simple API lemmas for `nth`\nI didn't change the style of the `stream/init` file.", "changes": [{"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["add", "theorem", "cons_injective2", ["seq"]], ["add", "theorem", "cons_left_injective", ["seq"]], ["add", "theorem", "cons_right_injective", ["seq"]]]}, {"oldPath": "src/data/stream/init.lean", "newPath": "src/data/stream/init.lean", "changes": [["add", "theorem", "cons_injective2", ["stream"]], ["add", "theorem", "cons_injective_left", ["stream"]], ["add", "theorem", "cons_injective_right", ["stream"]], ["add", "theorem", "nth_succ_cons", ["stream"]], ["mod", "theorem", "nth_zero_cons", ["stream"]]]}]}, {"timestamp": 1662930531, "sha": "87714908", "message": "chore(probability/martingale): move the optional stopping theorem to its own file (#16464)\nThe idea is to reserve martingale/basic.lean to really basic API about (sub/super)martingales.", "changes": [{"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": [["del", "theorem", "maximal_ineq", ["measure_theory"]], ["del", "theorem", "smul_le_stopped_value_hitting", ["measure_theory"]], ["del", "theorem", "expected_stopped_value_mono", ["measure_theory", "submartingale"]], ["del", "theorem", "stopped_process", ["measure_theory", "submartingale"]], ["del", "theorem", "submartingale_iff_expected_stopped_value_mono", ["measure_theory"]], ["del", "theorem", "submartingale_of_expected_stopped_value_mono", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/probability/martingale/optional_stopping.lean", "changes": [["add", "theorem", "maximal_ineq", ["measure_theory"]], ["add", "theorem", "smul_le_stopped_value_hitting", ["measure_theory"]], ["add", "theorem", "expected_stopped_value_mono", ["measure_theory", "submartingale"]], ["add", "theorem", "stopped_process", ["measure_theory", "submartingale"]], ["add", "theorem", "submartingale_iff_expected_stopped_value_mono", ["measure_theory"]], ["add", "theorem", "submartingale_of_expected_stopped_value_mono", ["measure_theory"]]]}]}, {"timestamp": 1662930530, "sha": "d04db585", "message": "refactor(algebra/order/monoid): Remove redundant field from `ordered_cancel_comm_monoid` (#16445)\n`mul_left_cancel : ∀ a b c, a + b = a + c → b = c` can be inferred from `le_of_mul_le_mul_left : ∀ a b c, a + b ≤ a + c → b ≤ c` and antisymmetry.", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/positive/ring.lean", "newPath": "src/algebra/order/positive/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/order.lean", "newPath": "src/data/dfinsupp/order.lean", "changes": []}, {"oldPath": "src/data/finsupp/order.lean", "newPath": "src/data/finsupp/order.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/number_theory/bertrand.lean", "newPath": "src/number_theory/bertrand.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": []}]}, {"timestamp": 1662924177, "sha": "27917391", "message": "feat(topology/uniform_space/compact_separated): drop unneeded assumptions (#16457)\nLemmas in this file don't need `[separated_space _]` / `is_separated _` assumption. Also add `nhds_set` versions of some lemmas.", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": [["add", "theorem", "nhds_set_diagonal", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_compact_diagonal", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "nhds_set_basis_uniformity", ["is_compact"]], ["del", "theorem", "mem_map_iff_exists_image'", []], ["mod", "theorem", "mem_uniformity_of_uniform_continuous_invariant", []], ["add", "theorem", "nhds_set_diagonal_le_uniformity", []], ["add", "theorem", "uniformity_prod_eq_comap_prod", []]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": [["mod", "theorem", "uniform_continuous_of_continuous", ["compact_space"]], ["mod", "theorem", "compact_space_uniformity", []], ["mod", "theorem", "tendsto_uniformly", ["continuous"]], ["del", "theorem", "uniform_continuous_on_of_continuous'", ["is_compact"]], ["mod", "theorem", "uniform_continuous_on_of_continuous", ["is_compact"]], ["add", "theorem", "nhds_set_diagonal_eq_uniformity", []], ["add", "theorem", "unique_uniformity_of_compact", []], ["del", "theorem", "unique_uniformity_of_compact_t2", []]]}]}, {"timestamp": 1662897908, "sha": "c8c740df", "message": "feat(data/fintype/basic): `fintype.to_finset_prod` (#16459)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "to_finset_prod", ["set"]]]}]}, {"timestamp": 1662836422, "sha": "5e78882f", "message": "feat(algebra/parity): Primes are not square (#16430)\nand a few other basic results about `is_square`.", "changes": [{"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["add", "theorem", "is_square_pow", ["even"]], ["add", "theorem", "is_square_zpow", ["even"]], ["add", "theorem", "not_square", ["irreducible"]], ["add", "theorem", "not_irreducible", ["is_square"]], ["add", "theorem", "not_prime", ["is_square"]], ["add", "theorem", "pow", ["is_square"]], ["add", "theorem", "zpow", ["is_square"]], ["mod", "theorem", "is_square_zero", []], ["add", "theorem", "not_square", ["prime"]]]}]}, {"timestamp": 1662833227, "sha": "ba6b1422", "message": "refactor(analysis/normed_space/spectrum): generalize Gelfand-Mazur away from `normed_division_ring` (#16448)\nThis generalizes the Gelfand-Mazur theorem so that it does not require the hypothesis that the algebra is a `normed_division_ring`, but instead is only a `normed_ring` in which the nonzero elements are precisely the units. This is important for applications of the Gelfand-Mazur theorem in which one may not be able to prove *a priori* that `∥a * b∥ = ∥a∥ * ∥b∥`, even though it may follow *a posteriori* from the Gelfand-Mazur isomorphism. An explicit example of this is the quotient of a complex Banach algebra by a maximal ideal, which is the use case that prompted this change.", "changes": [{"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}]}, {"timestamp": 1662804158, "sha": "7fd4a0bf", "message": "feat(probability/stopping): generalize `mem_ℒp_stopped_value` (#16369)\nAlso rename many lemmas which had names `*_of_encodable` but took `countable` arguments since a recent PR which replaced all `encodable` by `countable` but did not touch the names.", "changes": [{"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["mod", "theorem", "integrable_stopped_value", ["measure_theory"]], ["add", "theorem", "integrable_stopped_value_of_mem_finset", ["measure_theory"]], ["add", "theorem", "measurable_set_inter_le_const_iff", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_le_of_countable", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "measurable_space_le_of_encodable", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_le_of_le", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "mem_ℒp_stopped_value", ["measure_theory"]], ["add", "theorem", "mem_ℒp_stopped_value_of_mem_finset", ["measure_theory"]], ["add", "theorem", "stopped_value_eq'", ["measure_theory"]], ["add", "theorem", "stopped_value_eq_of_mem_finset", ["measure_theory"]]]}]}, {"timestamp": 1662774177, "sha": "f7d03fec", "message": "feat(counterexamples/sorgenfrey_line): new file (#14820)\nDefine the Sorgenfrey line and prove that it is a normal topological space but its product with itself is not a normal topological space.", "changes": [{"oldPath": null, "newPath": "counterexamples/sorgenfrey_line.lean", "changes": [["add", "theorem", "continuous_to_real", ["sorgenfrey_line"]], ["add", "theorem", "dense_range_coe_rat", ["sorgenfrey_line"]], ["add", "theorem", "exists_Ico_disjoint_closed", ["sorgenfrey_line"]], ["add", "theorem", "is_clopen_Ici", ["sorgenfrey_line"]], ["add", "theorem", "is_clopen_Ici_prod", ["sorgenfrey_line"]], ["add", "theorem", "is_clopen_Ico", ["sorgenfrey_line"]], ["add", "theorem", "is_clopen_Iio", ["sorgenfrey_line"]], ["add", "theorem", "is_closed_antidiagonal", ["sorgenfrey_line"]], ["add", "theorem", "is_closed_iff", ["sorgenfrey_line"]], ["add", "theorem", "is_closed_of_subset_antidiagonal", ["sorgenfrey_line"]], ["add", "theorem", "is_open_Ici", ["sorgenfrey_line"]], ["add", "theorem", "is_open_Ico", ["sorgenfrey_line"]], ["add", "theorem", "is_open_iff", ["sorgenfrey_line"]], ["add", "theorem", "map_to_real_nhds", ["sorgenfrey_line"]], ["add", "theorem", "nhds_antitone_basis_Ico_inv_pnat", ["sorgenfrey_line"]], ["add", "theorem", "nhds_basis_Ico", ["sorgenfrey_line"]], ["add", "theorem", "nhds_basis_Ico_inv_pnat", ["sorgenfrey_line"]], ["add", "theorem", "nhds_basis_Ico_rat", ["sorgenfrey_line"]], ["add", "theorem", "nhds_countable_basis_Ico_inv_pnat", ["sorgenfrey_line"]], ["add", "theorem", "nhds_eq_comap", ["sorgenfrey_line"]], ["add", "theorem", "nhds_eq_map", ["sorgenfrey_line"]], ["add", "theorem", "nhds_prod_antitone_basis_inv_pnat", ["sorgenfrey_line"]], ["add", "theorem", "not_metrizable_space", ["sorgenfrey_line"]], ["add", "theorem", "not_normal_space_prod", ["sorgenfrey_line"]], ["add", "theorem", "not_second_countable_topology", ["sorgenfrey_line"]], ["add", "def", "to_real", ["sorgenfrey_line"]], ["add", "def", "sorgenfrey_line", []]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "has_basis_ge", ["filter", "has_antitone_basis"]], ["add", "theorem", "principal_inf", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "nhds_within_Ici_basis_Ico", []]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}]}, {"timestamp": 1662766930, "sha": "48e3d6a4", "message": "feat(linear_algebra/linear_pmap): add_action and mul_action (#16068)\nThis PR defines the instances `has_vadd`, `add_action` and `mul_action` for `linear_pmap`.", "changes": [{"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "coe_vadd", ["linear_pmap"]], ["add", "theorem", "ext'", ["linear_pmap"]], ["add", "theorem", "smul_domain", ["linear_pmap"]], ["add", "theorem", "vadd_apply", ["linear_pmap"]], ["add", "theorem", "vadd_domain", ["linear_pmap"]]]}]}, {"timestamp": 1662739808, "sha": "22a9066d", "message": "feat(topology/algebra/module/weak_dual): `weak_space` is functorial (#16441)", "changes": [{"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": [["add", "theorem", "coe_map", ["weak_space"]], ["add", "def", "map", ["weak_space"]], ["add", "theorem", "map_apply", ["weak_space"]]]}]}, {"timestamp": 1662735627, "sha": "c3d2b3b8", "message": "feat(analysis/inner_product_space/basic): completion of an `inner_product_space` is an `inner_product_space` (#16407)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["add", "theorem", "dense_inducing_to_compl", ["uniform_space", "completion"]]]}]}, {"timestamp": 1662726515, "sha": "3a0b839b", "message": "feat(analysis/{normed/group}/seminorm): Hom classes for seminorms (#16227)\nIntroduce `add_group_seminorm_class`, `group_seminorm_class`, `seminorm_class`, the hom classes of `add_group_seminorm`, `group_seminorm`, `seminorm`.", "changes": [{"oldPath": "counterexamples/seminorm_lattice_not_distrib.lean", "newPath": "counterexamples/seminorm_lattice_not_distrib.lean", "changes": []}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/order/hom/basic.lean", "changes": [["add", "theorem", "le_map_add_map_div", []]]}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/seminorm.lean", "newPath": "src/analysis/normed/group/seminorm.lean", "changes": [["mod", "theorem", "comp_zero", ["group_seminorm"]], ["del", "theorem", "div_rev", ["group_seminorm"]], ["mod", "theorem", "ext", ["group_seminorm"]], ["del", "theorem", "le_insert'", ["group_seminorm"]], ["del", "theorem", "le_insert", ["group_seminorm"]], ["add", "theorem", "le_map_add_map_div'", []], ["add", "theorem", "map_div_le_add", []], ["add", "theorem", "map_div_rev", []]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "bdd_below_range_add", ["seminorm"]], ["del", "theorem", "le_insert'", ["seminorm"]], ["del", "theorem", "le_insert", ["seminorm"]], ["mod", "def", "pullback", ["seminorm"]], ["del", "theorem", "sub_rev", ["seminorm"]]]}]}, {"timestamp": 1662678382, "sha": "75cc1ae9", "message": "feat(analysis/normed/group/basic): add `norm_multiset_sum_le` (#16419)", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "nnnorm_multiset_sum_le", []], ["add", "theorem", "norm_multiset_sum_le", []]]}]}, {"timestamp": 1662669152, "sha": "ba346d8b", "message": "feat(order/upper_lower): `Iic` is not bounded below (#16425)\nNonempty lower sets are not bounded below in a `no_min_order`, and dual.", "changes": [{"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "not_bdd_below", ["is_lower_set"]], ["add", "theorem", "not_bdd_above", ["is_upper_set"]], ["add", "theorem", "not_bdd_above_Ici", []], ["add", "theorem", "not_bdd_above_Ioi", []], ["add", "theorem", "not_bdd_below_Iic", []], ["add", "theorem", "not_bdd_below_Iio", []]]}]}, {"timestamp": 1662669150, "sha": "d2d66526", "message": "feat(number_theory/legendre_symbol/jacobi_symbol): add new file with the definition and properties of the Jacobi symbol (#16395)\nThis PR consists of a new file, `number_theory.legendre_symbol.jacobi_symbol`, that contains a definition of the Jacobi symbol (and sets up notation `[a | b]ⱼ` for it) and then proves a number of results, e.g., multiplicativity in both arguments, expressions for the cases `a = -1`, `a = 2`, `a = -2`, and several versions of quadratic reciprocity. It also proves that the symbol depends on a only through its residue class `mod b` and that it depends on `b` only through its residue class `mod 4*a` (quadratic reciprocity is needed for the latter).\nThe code has already been quite thoroughly reviewed while it was part of #16290 (which then was reduced to the auxiliary results needed for the Jacobi symbol code).\nDiscussion on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Jacobi.20symbol/near/295816984)", "changes": [{"oldPath": null, "newPath": "src/number_theory/legendre_symbol/jacobi_symbol.lean", "changes": [["add", "theorem", "is_square_of_jacobi_sym_eq_one", ["zmod"]], ["add", "def", "jacobi_sym", ["zmod"]], ["add", "theorem", "jacobi_sym_eq_one_or_neg_one", ["zmod"]], ["add", "theorem", "jacobi_sym_eq_zero_iff", ["zmod"]], ["add", "theorem", "jacobi_sym_eq_zero_iff_not_coprime", ["zmod"]], ["add", "theorem", "jacobi_sym_mod_left'", ["zmod"]], ["add", "theorem", "jacobi_sym_mod_left", ["zmod"]], ["add", "theorem", "jacobi_sym_mod_right'", ["zmod"]], ["add", "theorem", "jacobi_sym_mod_right", ["zmod"]], ["add", "theorem", "jacobi_sym_mul_left", ["zmod"]], ["add", "theorem", "jacobi_sym_mul_right'", ["zmod"]], ["add", "theorem", "jacobi_sym_mul_right", ["zmod"]], ["add", "theorem", "jacobi_sym_ne_zero", ["zmod"]], ["add", "theorem", "jacobi_sym_neg", ["zmod"]], ["add", "theorem", "jacobi_sym_neg_one", ["zmod"]], ["add", "theorem", "jacobi_sym_neg_two", ["zmod"]], ["add", "theorem", "jacobi_sym_one_left", ["zmod"]], ["add", "theorem", "jacobi_sym_one_right", ["zmod"]], ["add", "theorem", "jacobi_sym_pow_left", ["zmod"]], ["add", "theorem", "jacobi_sym_pow_right", ["zmod"]], ["add", "theorem", "jacobi_sym_quadratic_reciprocity'", ["zmod"]], ["add", "theorem", "jacobi_sym_quadratic_reciprocity", ["zmod"]], ["add", "theorem", "jacobi_sym_quadratic_reciprocity_one_mod_four'", ["zmod"]], ["add", "theorem", "jacobi_sym_quadratic_reciprocity_one_mod_four", ["zmod"]], ["add", "theorem", "jacobi_sym_quadratic_reciprocity_three_mod_four", ["zmod"]], ["add", "theorem", "jacobi_sym_sq_one'", ["zmod"]], ["add", "theorem", "jacobi_sym_sq_one", ["zmod"]], ["add", "theorem", "jacobi_sym_trichotomy", ["zmod"]], ["add", "theorem", "jacobi_sym_two", ["zmod"]], ["add", "theorem", "jacobi_sym_value", ["zmod"]], ["add", "theorem", "jacobi_sym_zero_left", ["zmod"]], ["add", "theorem", "jacobi_sym_zero_right", ["zmod"]], ["add", "theorem", "to_jacobi_sym", ["zmod", "legendre_sym"]], ["add", "theorem", "nonsquare_iff_jacobi_sym_eq_neg_one", ["zmod"]], ["add", "theorem", "nonsquare_of_jacobi_sym_eq_neg_one", ["zmod"]], ["add", "def", "qr_sign", ["zmod"]], ["add", "theorem", "qr_sign_eq_iff_eq", ["zmod"]], ["add", "theorem", "qr_sign_mul_left", ["zmod"]], ["add", "theorem", "qr_sign_mul_right", ["zmod"]], ["add", "theorem", "qr_sign_neg_one_pow", ["zmod"]], ["add", "theorem", "qr_sign_sq_eq_one", ["zmod"]], ["add", "theorem", "qr_sign_symm", ["zmod"]]]}]}, {"timestamp": 1662669149, "sha": "662786a8", "message": "refactor(data/{finite,fintype}): redefine `infinite` in terms of `finite`, move to `data.finite.defs` (#16390)", "changes": [{"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["del", "theorem", "finite_or_infinite", []]]}, {"oldPath": "src/data/finite/defs.lean", "newPath": "src/data/finite/defs.lean", "changes": [["mod", "theorem", "of_bijective", ["finite"]], ["add", "theorem", "finite_or_infinite", []], ["add", "theorem", "not_finite", []], ["add", "theorem", "not_finite_iff_infinite", []], ["add", "theorem", "not_infinite_iff_finite", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "of_not_fintype", ["infinite"]], ["del", "theorem", "not_finite", []], ["del", "theorem", "not_finite_iff_infinite", []], ["del", "theorem", "not_infinite_iff_finite", []]]}, {"oldPath": "src/data/fintype/card_embedding.lean", "newPath": "src/data/fintype/card_embedding.lean", "changes": [["mod", "theorem", "card_embedding_eq_of_infinite", ["fintype"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "to_subtype", ["set", "infinite"]]]}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}]}, {"timestamp": 1662669148, "sha": "e0bdbbe1", "message": "feat(combinatorics/young_diagram): add transposes, rows and columns of Young diagrams (#16120)\nAdd transposes, rows (and row lengths), columns (and column lengths) of Young diagrams.", "changes": [{"oldPath": "src/combinatorics/young_diagram.lean", "newPath": "src/combinatorics/young_diagram.lean", "changes": [["add", "def", "col", ["young_diagram"]], ["add", "theorem", "col_eq_prod", ["young_diagram"]], ["add", "def", "col_len", ["young_diagram"]], ["add", "theorem", "col_len_anti", ["young_diagram"]], ["add", "theorem", "col_len_eq_card", ["young_diagram"]], ["add", "theorem", "col_len_transpose", ["young_diagram"]], ["add", "theorem", "mem_col_iff", ["young_diagram"]], ["add", "theorem", "mem_iff_lt_col_len", ["young_diagram"]], ["add", "theorem", "mem_iff_lt_row_len", ["young_diagram"]], ["add", "theorem", "mem_mk", ["young_diagram"]], ["add", "theorem", "mem_row_iff", ["young_diagram"]], ["add", "theorem", "mem_transpose", ["young_diagram"]], ["add", "theorem", "mk_mem_col_iff", ["young_diagram"]], ["add", "theorem", "mk_mem_row_iff", ["young_diagram"]], ["add", "def", "row", ["young_diagram"]], ["add", "theorem", "row_eq_prod", ["young_diagram"]], ["add", "def", "row_len", ["young_diagram"]], ["add", "theorem", "row_len_anti", ["young_diagram"]], ["add", "theorem", "row_len_eq_card", ["young_diagram"]], ["add", "theorem", "row_len_transpose", ["young_diagram"]], ["add", "def", "transpose", ["young_diagram"]], ["add", "theorem", "transpose_eq_iff", ["young_diagram"]], ["add", "theorem", "transpose_eq_iff_eq_transpose", ["young_diagram"]], ["add", "theorem", "transpose_le_iff", ["young_diagram"]], ["add", "def", "transpose_order_iso", ["young_diagram"]], ["add", "theorem", "transpose_transpose", ["young_diagram"]]]}]}, {"timestamp": 1662669146, "sha": "00ab7761", "message": "feat(ring_theory/dedekind_domain/integer_unit): define S-integers and S-units (#15646)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/dedekind_domain/S_integer.lean", "changes": [["add", "def", "integer", ["set"]], ["add", "theorem", "integer_eq", ["set"]], ["add", "theorem", "integer_valuation_le_one", ["set"]], ["add", "def", "unit", ["set"]], ["add", "theorem", "unit_eq", ["set"]], ["add", "def", "unit_equiv_units_integer", ["set"]], ["add", "theorem", "unit_valuation_eq_one", ["set"]]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["add", "theorem", "coe_infi", ["subring"]], ["add", "theorem", "mem_infi", ["subring"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "mem_unit_group_iff", ["valuation"]], ["mod", "theorem", "mem_unit_group_iff", ["valuation_subring"]]]}]}, {"timestamp": 1662658713, "sha": "cd7f0626", "message": "feat(combinatorics/simple_graph/triangle/basic): add ε-triangle-free far graph predicate (#12988)\nDefine the property of being triangle-free far. This comes up in the triangle counting and triangle removal lemmas.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "coe_edge_finset", ["simple_graph"]], ["add", "theorem", "delete_edges_sdiff_eq_of_le", ["simple_graph"]], ["add", "theorem", "mono", ["simple_graph", "delete_far"]], ["add", "def", "delete_far", ["simple_graph"]], ["add", "theorem", "delete_far_iff", ["simple_graph"]], ["add", "theorem", "edge_finset_delete_edges", ["simple_graph"]], ["add", "theorem", "edge_finset_mono", ["simple_graph"]], ["add", "theorem", "edge_set_delete_edges", ["simple_graph"]], ["add", "theorem", "edge_set_mono", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/clique.lean", "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": [["add", "theorem", "not_clique_free", ["simple_graph", "is_n_clique"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/triangle/basic.lean", "changes": [["add", "theorem", "not_far_from_triangle_free", ["simple_graph", "clique_free"]], ["add", "theorem", "clique_finset_nonempty'", ["simple_graph", "far_from_triangle_free"]], ["add", "theorem", "clique_finset_nonempty", ["simple_graph", "far_from_triangle_free"]], ["add", "theorem", "mono", ["simple_graph", "far_from_triangle_free"]], ["add", "theorem", "nonpos", ["simple_graph", "far_from_triangle_free"]], ["add", "theorem", "not_clique_free", ["simple_graph", "far_from_triangle_free"]], ["add", "def", "far_from_triangle_free", ["simple_graph"]], ["add", "theorem", "far_from_triangle_free_iff", ["simple_graph"]]]}]}, {"timestamp": 1662653158, "sha": "d645d0e8", "message": "feat(analysis/calculus/uniform_limits_deriv): Swap limits and derivatives (#14090)\nThis commit proves that the derivative of the pointwise limit of a series of functions is the limit of the derivatives when the derivatives converge uniformly in some closed ball.\nThis and #13500 are two fundamental theorems for bootstrapping the theory of Dirichlet series. This theory underlies my ongoing attempts to prove the density of squarefree integers.", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/uniform_limits_deriv.lean", "changes": [["add", "theorem", "difference_quotients_converge_uniformly", []], ["add", "theorem", "has_deriv_at_of_tendsto_uniformly", []], ["add", "theorem", "has_deriv_at_of_tendsto_uniformly_on", []], ["add", "theorem", "has_deriv_at_of_tendsto_uniformly_on_filter", []], ["add", "theorem", "has_fderiv_at_of_tendsto_uniformly", []], ["add", "theorem", "has_fderiv_at_of_tendsto_uniformly_on", []], ["add", "theorem", "has_fderiv_at_of_tendsto_uniformly_on_filter", []], ["add", "theorem", "uniform_cauchy_seq_on_ball_of_tendsto_uniformly_on_ball_deriv", []], ["add", "theorem", "uniform_cauchy_seq_on_ball_of_tendsto_uniformly_on_ball_fderiv", []], ["add", "theorem", "one_smul_right", ["uniform_cauchy_seq_on_filter"]], ["add", "theorem", "uniform_cauchy_seq_on_filter_of_tendsto_uniformly_on_filter_deriv", []], ["add", "theorem", "uniform_cauchy_seq_on_filter_of_tendsto_uniformly_on_filter_fderiv", []]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "tendsto_uniformly_on_zero", ["normed_add_comm_group"]], ["add", "theorem", "uniform_cauchy_seq_on_filter_iff_tendsto_uniformly_on_filter_zero", ["normed_add_comm_group"]], ["add", "theorem", "uniform_cauchy_seq_on_iff_tendsto_uniformly_on_zero", ["normed_add_comm_group"]]]}, {"oldPath": null, "newPath": "src/order/filter/curry.lean", "changes": [["add", "def", "curry", ["filter"]], ["add", "theorem", "curry_le_prod", ["filter"]], ["add", "theorem", "eventually_curry_iff", ["filter"]], ["add", "theorem", "curry", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "tendsto_uniformly_on_filter_iff", ["metric"]]]}]}, {"timestamp": 1662643033, "sha": "aff61c0f", "message": "chore(algebra/big_operators/basic): golf (#16427)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}]}, {"timestamp": 1662643032, "sha": "d75314b3", "message": "fix(data/nat/interval): do not dedup when implementing `finset.Icc` etc (#16423)\nThis means that `finset.Iic n` no longer has quadratic complexity.\n`#eval (finset.Iic 200000).card` is now almost instant rather than taking a very long time.", "changes": [{"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["mod", "theorem", "Icc_eq_range'", ["nat"]], ["mod", "theorem", "Ico_eq_range'", ["nat"]], ["mod", "theorem", "Ioc_eq_range'", ["nat"]], ["mod", "theorem", "Ioo_eq_range'", ["nat"]], ["mod", "theorem", "card_Icc", ["nat"]], ["mod", "theorem", "card_Ico", ["nat"]], ["mod", "theorem", "card_Ioc", ["nat"]], ["mod", "theorem", "card_Ioo", ["nat"]]]}]}, {"timestamp": 1662643029, "sha": "370dabe7", "message": "feat(algebra/big_operators/multiset): add `prod_map_le_prod_map` (#16418)", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "prod_map_le_prod_map", ["multiset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}]}, {"timestamp": 1662633134, "sha": "a0735864", "message": "fix(*): fix padding around notations (#16333)\nI noticed a bunch of issues around padding in mathport, so I went through and fixed all the padding issues I could find in mathlib.", "changes": [{"oldPath": "archive/examples/prop_encodable.lean", "newPath": "archive/examples/prop_encodable.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "newPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/data/bracket.lean", "newPath": "src/data/bracket.lean", "changes": []}, {"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": []}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": []}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}, {"oldPath": "src/data/rat/nnrat.lean", "newPath": "src/data/rat/nnrat.lean", "changes": []}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_power.lean", "newPath": "src/linear_algebra/tensor_power.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/torus_integral.lean", "newPath": "src/measure_theory/integral/torus_integral.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_ees.lean", "newPath": "src/tactic/omega/find_ees.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/reserved_notation.lean", "newPath": "src/tactic/reserved_notation.lean", "changes": []}, {"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "newPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "changes": []}, {"oldPath": "test/noncomm_ring.lean", "newPath": "test/noncomm_ring.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}]}, {"timestamp": 1662633133, "sha": "4c0aa6e7", "message": "feat(analysis/schwartz): Definition of the Schwartz space (#15850)\nThis PR adds the definition of the Schwartz space and by abstract results also of tempered distributions. We prove basic algebraic and topological properties of the Schwartz space.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/analysis/schwartz_space.lean", "changes": [["add", "theorem", "add_apply", ["schwartz_map"]], ["add", "theorem", "bounds_bdd_below", ["schwartz_map"]], ["add", "theorem", "bounds_nonempty", ["schwartz_map"]], ["add", "theorem", "coe_coe_hom", ["schwartz_map"]], ["add", "theorem", "coe_fn_zero", ["schwartz_map"]], ["add", "def", "coe_hom", ["schwartz_map"]], ["add", "theorem", "coe_hom_injective", ["schwartz_map"]], ["add", "theorem", "coe_zero", ["schwartz_map"]], ["add", "theorem", "decay", ["schwartz_map"]], ["add", "theorem", "decay_add_le_aux", ["schwartz_map"]], ["add", "theorem", "decay_neg_aux", ["schwartz_map"]], ["add", "theorem", "decay_smul_aux", ["schwartz_map"]], ["add", "theorem", "ext", ["schwartz_map"]], ["add", "theorem", "le_seminorm", ["schwartz_map"]], ["add", "theorem", "le_seminorm_aux", ["schwartz_map"]], ["add", "def", "seminorm", ["schwartz_map"]], ["add", "def", "seminorm_aux", ["schwartz_map"]], ["add", "theorem", "seminorm_aux_add_le", ["schwartz_map"]], ["add", "theorem", "seminorm_aux_le_bound", ["schwartz_map"]], ["add", "theorem", "seminorm_aux_nonneg", ["schwartz_map"]], ["add", "theorem", "seminorm_aux_smul_le", ["schwartz_map"]], ["add", "theorem", "seminorm_aux_zero", ["schwartz_map"]], ["add", "theorem", "seminorm_le_bound", ["schwartz_map"]], ["add", "theorem", "smooth", ["schwartz_map"]], ["add", "theorem", "smul_apply", ["schwartz_map"]], ["add", "theorem", "sub_apply", ["schwartz_map"]], ["add", "theorem", "zero_apply", ["schwartz_map"]], ["add", "structure", "schwartz_map", []], ["add", "def", "schwartz_seminorm_family", []], ["add", "theorem", "schwartz_with_seminorms", []]]}]}, {"timestamp": 1662633132, "sha": "9b6eef6e", "message": "feat(number_theory/modular_forms/congruence_subgroups): Add definition of congruence subgroups. (#15159)\nThis contains the definition of a congruence subgroup of `SL(2,Z)` and defines Gamma1, Gamma0 and full level subgroups. It also contains some basic results about them.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "two_mul_expl", ["matrix"]]]}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "theorem", "conj_act", ["subgroup", "normal"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["add", "theorem", "SL2_inv_expl", ["matrix", "special_linear_group"]], ["add", "theorem", "SL2_inv_expl_det", ["matrix", "special_linear_group"]]]}, {"oldPath": null, "newPath": "src/number_theory/modular_forms/congruence_subgroups.lean", "changes": [["add", "def", "Gamma0", []], ["add", "theorem", "Gamma0_det", []], ["add", "theorem", "Gamma0_is_congruence", []], ["add", "theorem", "Gamma0_mem", []], ["add", "def", "Gamma1'", []], ["add", "def", "Gamma1", []], ["add", "theorem", "Gamma1_in_Gamma0", []], ["add", "theorem", "Gamma1_is_congruence", []], ["add", "theorem", "Gamma1_mem'", []], ["add", "theorem", "Gamma1_mem", []], ["add", "theorem", "Gamma1_to_Gamma0_mem", []], ["add", "def", "Gamma", []], ["add", "def", "Gamma_0_map", []], ["add", "theorem", "Gamma_cong_eq_self", []], ["add", "theorem", "Gamma_is_cong_sub", []], ["add", "theorem", "Gamma_mem'", []], ["add", "theorem", "Gamma_mem", []], ["add", "theorem", "Gamma_normal", []], ["add", "theorem", "Gamma_one_top", []], ["add", "theorem", "Gamma_zero_bot", []], ["add", "theorem", "SL_reduction_mod_hom_val", []], ["add", "theorem", "conj_cong_is_cong", []], ["add", "def", "is_congruence_subgroup", []], ["add", "theorem", "is_congruence_subgroup_trans", []]]}]}, {"timestamp": 1662624009, "sha": "572e54ab", "message": "fix(algebra/big_operators/multiset): rename `prod_le_sum_prod` to `prod_le_prod_map` (#16420)", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "prod_le_prod_map", ["multiset"]], ["del", "theorem", "prod_le_sum_prod", ["multiset"]]]}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1662619507, "sha": "fd5d3068", "message": "chore(measure_theory/function/conditional_expectation): change the definition of `condexp` (#16325)\nChange the definition of `condexp` slightly to have `μ[f|m] = 0` when `f` is not integrable, instead of `μ[f|m] =ᵐ[μ] 0`.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": [["add", "theorem", "condexp_L1_measure_zero", ["measure_theory"]], ["mod", "theorem", "condexp_L1_zero", ["measure_theory"]], ["mod", "theorem", "condexp_undef", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation/indicator.lean", "newPath": "src/measure_theory/function/conditional_expectation/indicator.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/real.lean", "newPath": "src/measure_theory/function/conditional_expectation/real.lean", "changes": []}, {"oldPath": "src/probability/conditional_expectation.lean", "newPath": "src/probability/conditional_expectation.lean", "changes": []}]}, {"timestamp": 1662602720, "sha": "5ebb7d87", "message": "feat(analysis/convex/gauge): unit ball of the gauge seminorm (#16413)", "changes": [{"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": [["add", "theorem", "gauge_seminorm_ball_one", []]]}]}, {"timestamp": 1662593032, "sha": "ed4882b1", "message": "chore(data/finset/basic): generalize `finset.nonempty_mk_coe` to `nonempty_mk` (#16399)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "nonempty_mk", ["finset"]], ["del", "theorem", "nonempty_mk_coe", ["finset"]]]}]}, {"timestamp": 1662593031, "sha": "019df1c0", "message": "feat(order/max): equivalence of no_top_order and no_max_order for linear orders (#16341)", "changes": [{"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["add", "theorem", "to_no_min_order", ["no_bot_order"]], ["add", "theorem", "no_bot_order_iff_no_min_order", []], ["add", "theorem", "to_no_max_order", ["no_top_order"]], ["add", "theorem", "no_top_order_iff_no_max_order", []]]}]}, {"timestamp": 1662593030, "sha": "eae1ec81", "message": "feat(analysis/normed/group/add_torsor): `normed_add_torsor` instance for `affine_subspace` (#16339)\nAdd an instance that a nonempty affine subspace of a\n`normed_add_torsor` is itself a `normed_add_torsor` (building on the\nexisting instance that says such a subspace of an `add_torsor` is\nitself an `add_torsor`).\nNote that this instance uses `@[nolint fails_quickly]`, because of a\ntypeclass loop with the `add_torsor.nonempty` instance. I don't know\nthe right way to avoid that typeclass loop, but I don't think it's\nmeaningfully a new issue, since exactly the same nolint appears in\n`nolints.txt` for `affine_subspace.to_add_torsor`.", "changes": [{"oldPath": "src/analysis/normed/group/add_torsor.lean", "newPath": "src/analysis/normed/group/add_torsor.lean", "changes": []}]}, {"timestamp": 1662563440, "sha": "56e4f0d5", "message": "feat(analysis/seminorm): `restrict_scalars` for seminorms (#16401)", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "coe_restrict_scalars", ["seminorm"]], ["add", "theorem", "restrict_scalars_ball", ["seminorm"]]]}]}, {"timestamp": 1662563439, "sha": "13c6c437", "message": "feat(group_theory/subgroup/basic): Centralizer of closure is intersection of centralizers (#16394)\nThis PR adds some more API for `subgroup.centralizer` and proves that the centralizer of a closure is the intersection of the centralizers.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "centralizer_closure", ["subgroup"]], ["add", "theorem", "centralizer_le", ["subgroup"]], ["add", "theorem", "le_centralizer_iff", ["subgroup"]]]}]}, {"timestamp": 1662563437, "sha": "62119451", "message": "feat(analysis/complex/upper_half_plane): Functions bounded at infinity (#15009)\nThe defines the notion of functions on the upper half plane being bounded at infinity and zero at infinity. This is required for #13250.", "changes": [{"oldPath": null, "newPath": "src/analysis/complex/upper_half_plane/functions_bounded_at_infty.lean", "changes": [["add", "def", "at_im_infty", ["upper_half_plane"]], ["add", "theorem", "at_im_infty_basis", ["upper_half_plane"]], ["add", "theorem", "at_im_infty_mem", ["upper_half_plane"]], ["add", "def", "bounded_at_im_infty_subalgebra", ["upper_half_plane"]], ["add", "theorem", "bounded_mem", ["upper_half_plane"]], ["add", "def", "is_bounded_at_im_infty", ["upper_half_plane"]], ["add", "def", "is_zero_at_im_infty", ["upper_half_plane"]], ["add", "theorem", "prod_of_bounded_is_bounded", ["upper_half_plane"]], ["add", "theorem", "zero_at_im_infty", ["upper_half_plane"]], ["add", "def", "zero_at_im_infty_submodule", ["upper_half_plane"]], ["add", "theorem", "zero_form_is_bounded_at_im_infty", ["upper_half_plane"]]]}, {"oldPath": null, "newPath": "src/order/filter/zero_and_bounded_at_filter.lean", "changes": [["add", "def", "bounded_at_filter", ["filter"]], ["add", "def", "bounded_filter_subalgebra", ["filter"]], ["add", "def", "bounded_filter_submodule", ["filter"]], ["add", "def", "zero_at_filter", ["filter"]], ["add", "def", "zero_at_filter_add_submonoid", ["filter"]], ["add", "theorem", "zero_at_filter_is_bounded_at_filter", ["filter"]], ["add", "def", "zero_at_filter_submodule", ["filter"]], ["add", "theorem", "zero_is_bounded_at_filter", ["filter"]], ["add", "theorem", "zero_is_zero_at_filter", ["filter"]]]}]}, {"timestamp": 1662556989, "sha": "41626f7d", "message": "feat(data/polynomial/degree/definitions): add `degree_X_sub_C_le` (#16404)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_X_sub_C_le", ["polynomial"]], ["mod", "theorem", "nat_degree_X_sub_C_le", ["polynomial"]]]}]}, {"timestamp": 1662544477, "sha": "63014d26", "message": "feat(order/interval): Order intervals (#14807)\nDefine `nonempty_interval`, the type of nonempty intervals in an order, namely pairs where the second element is greater than the first, and `interval α` as `with_bot (nonempty_interval α)`.", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "map_comm", ["option"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter₂_subset_of_subset", ["set"]], ["add", "theorem", "subset_Union₂_of_subset", ["set"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "coe_inj", ["with_bot"]], ["add", "theorem", "coe_injective", ["with_bot"]], ["add", "theorem", "map_comm", ["with_bot"]], ["add", "theorem", "map_comm", ["with_top"]]]}, {"oldPath": null, "newPath": "src/order/interval.lean", "changes": [["add", "theorem", "coe_Inf", ["interval"]], ["add", "theorem", "coe_bot", ["interval"]], ["add", "theorem", "coe_coe", ["interval"]], ["add", "theorem", "coe_dual", ["interval"]], ["add", "def", "coe_hom", ["interval"]], ["add", "theorem", "coe_inf", ["interval"]], ["add", "theorem", "coe_infi", ["interval"]], ["add", "theorem", "coe_infi₂", ["interval"]], ["add", "theorem", "coe_inj", ["interval"]], ["add", "theorem", "coe_injective", ["interval"]], ["add", "theorem", "coe_pure", ["interval"]], ["add", "theorem", "coe_ssubset_coe", ["interval"]], ["add", "theorem", "coe_subset_coe", ["interval"]], ["add", "theorem", "coe_top", ["interval"]], ["add", "theorem", "disjoint_coe", ["interval"]], ["add", "def", "dual", ["interval"]], ["add", "theorem", "dual_bot", ["interval"]], ["add", "theorem", "dual_map", ["interval"]], ["add", "theorem", "dual_pure", ["interval"]], ["add", "theorem", "dual_top", ["interval"]], ["add", "def", "map", ["interval"]], ["add", "theorem", "map_map", ["interval"]], ["add", "theorem", "map_pure", ["interval"]], ["add", "def", "pure", ["interval"]], ["add", "theorem", "pure_injective", ["interval"]], ["add", "theorem", "«exists»", ["interval"]], ["add", "theorem", "«forall»", ["interval"]], ["add", "def", "interval", []], ["add", "theorem", "coe_coe_hom", ["nonempty_interval"]], ["add", "theorem", "coe_dual", ["nonempty_interval"]], ["add", "def", "coe_hom", ["nonempty_interval"]], ["add", "theorem", "coe_nonempty", ["nonempty_interval"]], ["add", "theorem", "coe_pure", ["nonempty_interval"]], ["add", "theorem", "coe_pure_interval", ["nonempty_interval"]], ["add", "theorem", "coe_ssubset_coe", ["nonempty_interval"]], ["add", "theorem", "coe_subset_coe", ["nonempty_interval"]], ["add", "theorem", "coe_sup_interval", ["nonempty_interval"]], ["add", "theorem", "coe_top", ["nonempty_interval"]], ["add", "theorem", "coe_top_interval", ["nonempty_interval"]], ["add", "def", "dual", ["nonempty_interval"]], ["add", "theorem", "dual_map", ["nonempty_interval"]], ["add", "theorem", "dual_pure", ["nonempty_interval"]], ["add", "theorem", "dual_top", ["nonempty_interval"]], ["add", "theorem", "fst_dual", ["nonempty_interval"]], ["add", "theorem", "fst_sup", ["nonempty_interval"]], ["add", "theorem", "le_def", ["nonempty_interval"]], ["add", "def", "map", ["nonempty_interval"]], ["add", "theorem", "map_map", ["nonempty_interval"]], ["add", "theorem", "map_pure", ["nonempty_interval"]], ["add", "theorem", "mem_coe_interval", ["nonempty_interval"]], ["add", "theorem", "mem_def", ["nonempty_interval"]], ["add", "theorem", "mem_mk", ["nonempty_interval"]], ["add", "def", "pure", ["nonempty_interval"]], ["add", "theorem", "pure_injective", ["nonempty_interval"]], ["add", "theorem", "snd_dual", ["nonempty_interval"]], ["add", "theorem", "snd_sup", ["nonempty_interval"]], ["add", "def", "to_dual_prod", ["nonempty_interval"]], ["add", "theorem", "to_dual_prod_apply", ["nonempty_interval"]], ["add", "def", "to_dual_prod_hom", ["nonempty_interval"]], ["add", "theorem", "to_dual_prod_injective", ["nonempty_interval"]], ["add", "structure", "nonempty_interval", []]]}]}, {"timestamp": 1662537976, "sha": "9362a5b5", "message": "docs(data/polynomial/ring_division, field_theory/splitting_field): update docs (#16406)", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}]}, {"timestamp": 1662532754, "sha": "914d4216", "message": "feat(linear_algebra/matrix): A positive definite matrix has a positive determinant (#16376)", "changes": [{"oldPath": "src/linear_algebra/matrix/pos_def.lean", "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": [["add", "theorem", "det_pos", ["matrix", "pos_def"]]]}, {"oldPath": "src/linear_algebra/matrix/spectrum.lean", "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": [["add", "theorem", "conj_transpose_eigenvector_matrix", ["matrix", "is_hermitian"]], ["add", "theorem", "conj_transpose_eigenvector_matrix_inv", ["matrix", "is_hermitian"]], ["add", "theorem", "eigenvalues_eq", ["matrix", "is_hermitian"]], ["add", "theorem", "eigenvector_matrix_apply", ["matrix", "is_hermitian"]], ["add", "theorem", "eigenvector_matrix_inv_apply", ["matrix", "is_hermitian"]]]}]}, {"timestamp": 1662522534, "sha": "18cf2ca3", "message": "chore(scripts): update nolints.txt (#16409)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1662495785, "sha": "a0d1a84d", "message": "feat(topology/sheaves/*): sheafification preserves zero morphisms (#16381)", "changes": [{"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": [["add", "theorem", "diagram_nat_trans_zero", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_map_zero", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": []}]}, {"timestamp": 1662485022, "sha": "b799b43d", "message": "feat(data/fin/basic): eq_succ_of_ne_zero, coe_cast_pred, succ_pred_above_succ (#16294)\nThis PR introduces three basic lemmas about `fin`.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "coe_cast_pred", ["fin"]], ["add", "theorem", "eq_succ_of_ne_zero", ["fin"]], ["add", "theorem", "succ_pred_above_succ", ["fin"]]]}]}, {"timestamp": 1662474810, "sha": "3c227fc0", "message": "feat(data/nat/parity): add lemmas nat.bit{0|1}_mod_bit0 (#16396)\nThis PR adds a pair of lemmas that complement [nat.bit0_div_bit0](https://leanprover-community.github.io/mathlib_docs/data/nat/parity.html#nat.bit0_div_bit0) and [nat.bit1_div_bit0](https://leanprover-community.github.io/mathlib_docs/data/nat/parity.html#nat.bit1_div_bit0), namely\n```lean\n@[simp] lemma bit0_mod_bit0 : bit0 n % bit0 m = bit0 (n % m) := ...\n@[simp] lemma bit1_mod_bit0 : bit1 n % bit0 m = bit1 (n % m) := ...\n```\nThey will be helpful in an upcoming PR that introduces a `norm_num` extension for computing Jacobi symbols.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/bit0.2Fbit1.20and.20mod/near/297228893)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "bit0_mod_two", ["nat"]], ["mod", "theorem", "bit1_mod_two", ["nat"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "bit0_mod_bit0", ["nat"]], ["add", "theorem", "bit1_mod_bit0", ["nat"]]]}]}, {"timestamp": 1662474809, "sha": "3f409bd9", "message": "chore(category_theory/*): Lint (#16366)\nSatisfy the `fintype_finite` linter.", "changes": [{"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "theorem", "of_has_coproduct", ["category_theory", "limits", "has_biproduct"]], ["mod", "theorem", "of_has_product", ["category_theory", "limits", "has_biproduct"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}]}, {"timestamp": 1662471805, "sha": "b3b5475d", "message": "feat(data/finsupp/ne_locus): add a not-member lemma (#16245)\nThis PR adds a convenience lemma characterizing non-membership in the `ne_locus`.\n`simp` proves this lemma, but given the position of the negations in `mem_ne_locus`, this form is also convenient.", "changes": [{"oldPath": "src/data/finsupp/ne_locus.lean", "newPath": "src/data/finsupp/ne_locus.lean", "changes": [["add", "theorem", "not_mem_ne_locus", ["finsupp"]]]}]}, {"timestamp": 1662459672, "sha": "a67ec23d", "message": "feat(category_theory/sites/sheaf): category of sheaf is preadditive when target is preadditive (#16324)\n`Sheaf J A` is preadditive when `A` is", "changes": [{"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "theorem", "add_app", ["category_theory", "Sheaf", "hom"]]]}]}, {"timestamp": 1662449009, "sha": "fbebf1a0", "message": "chore(algebra/order/ring): golf a few proofs (#16398)", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}]}, {"timestamp": 1662449008, "sha": "e11bafa5", "message": "feat(category_theory/limits/shapes/products): if each `f b ⟶ g b` is mono, then `∏ f ⟶ ∏ g` is mono (#16180)\nand its dual version: if each `f b ⟶ g b` is epi, then `∐ f ⟶ ∐ g` is epi", "changes": [{"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}]}, {"timestamp": 1662442884, "sha": "f0c55c2a", "message": "feat(measure_theory/measure/measure_space): add variants of `ae_restrict_Union_eq` (#16370)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_eq_restrict_Union_iff", ["measure_theory"]], ["add", "theorem", "ae_eq_restrict_bUnion_finset_iff", ["measure_theory"]], ["add", "theorem", "ae_eq_restrict_bUnion_iff", ["measure_theory"]], ["add", "theorem", "ae_restrict_bUnion_eq", ["measure_theory"]], ["add", "theorem", "ae_restrict_bUnion_finset_eq", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "eventually_supr", ["filter"]]]}]}, {"timestamp": 1662432791, "sha": "58903102", "message": "feat(src/data/*): lemmas about emptiness for finset/multiset/vector coercions (#16113)\nAdds basic lemmas about whether the result of `to_list` is empty for various data structures.", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "coe_to_list", ["finset"]], ["add", "theorem", "empty_to_list", ["finset"]], ["mod", "theorem", "mem_to_list", ["finset"]], ["add", "theorem", "not_empty_to_list", ["finset", "nonempty"]], ["add", "theorem", "to_list_ne_nil", ["finset", "nonempty"]], ["mod", "theorem", "to_list_empty", ["finset"]], ["add", "theorem", "to_list_eq_nil", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "coe_eq_zero_iff_empty", ["multiset"]], ["mod", "theorem", "coe_to_list", ["multiset"]], ["add", "theorem", "empty_to_list", ["multiset"]], ["mod", "theorem", "mem_to_list", ["multiset"]], ["add", "theorem", "to_list_eq_nil", ["multiset"]], ["mod", "theorem", "to_list_zero", ["multiset"]]]}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": [["add", "theorem", "empty_to_list_eq_ff", ["vector"]], ["add", "theorem", "not_empty_to_list", ["vector"]], ["add", "theorem", "to_list_empty", ["vector"]]]}, {"oldPath": "src/data/vector/mem.lean", "newPath": "src/data/vector/mem.lean", "changes": [["mod", "theorem", "not_mem_zero", ["vector"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_absolute_value.lean", "newPath": "src/number_theory/class_number/admissible_absolute_value.lean", "changes": []}]}, {"timestamp": 1662423104, "sha": "1ef34126", "message": "refactor(order/rel_classes): ditch `is_strict_total_order'` (#16069)\nSince Lean 3.46, `is_strict_total_order` and `is_strict_total_order'` are exactly the same typeclass. Hence, we remove the latter for the former.", "changes": [{"oldPath": "src/data/list/lex.lean", "newPath": "src/data/list/lex.lean", "changes": []}, {"oldPath": "src/data/pi/lex.lean", "newPath": "src/data/pi/lex.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["del", "theorem", "swap", ["is_strict_total_order'"]], ["add", "theorem", "swap", ["is_strict_total_order"]], ["del", "def", "linear_order_of_STO'", []], ["add", "def", "linear_order_of_STO", []]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_paracompact.lean", "newPath": "src/topology/metric_space/emetric_paracompact.lean", "changes": []}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}]}, {"timestamp": 1662417467, "sha": "3e067975", "message": "feat(algebra/monoid_algebra/no_zero_divisors): left/right order implies no zero divisors (#16299)\nThis PR is split off from #15983. It contains only the result about zero-divisors in the presence of a left/right-ordered appropriately cancellable semigroup.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2315983.20no-zero.20divisors.20and.20right.20orderability)", "changes": [{"oldPath": null, "newPath": "src/algebra/monoid_algebra/no_zero_divisors.lean", "changes": [["add", "theorem", "exists_add_of_mem_support_single_mul", ["add_monoid_algebra", "left"]], ["add", "theorem", "mul_apply_add_eq_mul_of_forall_ne", ["add_monoid_algebra"]], ["add", "theorem", "of_left_ordered", ["add_monoid_algebra", "no_zero_divisors"]], ["add", "theorem", "of_right_ordered", ["add_monoid_algebra", "no_zero_divisors"]], ["add", "theorem", "exists_add_of_mem_support_single_mul", ["add_monoid_algebra", "right"]]]}]}, {"timestamp": 1662406881, "sha": "c3762602", "message": "chore(analysis/analytic/isolated_zeros): tidy exists_has_sum_smul_of_apply_eq_zero (#16389)", "changes": [{"oldPath": "src/analysis/analytic/isolated_zeros.lean", "newPath": "src/analysis/analytic/isolated_zeros.lean", "changes": []}]}, {"timestamp": 1662406880, "sha": "03773179", "message": "feat(algebra/group_power/basic): add `pow_mul_pow_eq_one` (#16328)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_mul_pow_eq_one", []]]}]}, {"timestamp": 1662401063, "sha": "d25f4d64", "message": "feat(linear_algebra/affine_space/affine_subspace): `vadd_mem_iff_mem_of_mem_direction` (#16383)\nAdd a lemma similar to `vadd_mem_iff_mem_direction`, but where it's\ngiven that the vector is in `s.direction` and the `iff` is between the\ntwo points being in the subspace.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "vadd_mem_iff_mem_of_mem_direction", ["affine_subspace"]]]}]}, {"timestamp": 1662394852, "sha": "8ac7e3ba", "message": "feat(topology/instances/nnreal): add `nnreal.pow_order_iso` (#16344)\nAlso use it to redefine `nnreal.sqrt`.", "changes": [{"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["mod", "theorem", "le_sqrt_iff", ["nnreal"]], ["mod", "theorem", "mul_self_sqrt", ["nnreal"]], ["mod", "theorem", "sq_sqrt", ["nnreal"]], ["mod", "theorem", "sqrt_eq_iff_sq_eq", ["nnreal"]], ["mod", "theorem", "sqrt_le_iff", ["nnreal"]], ["mod", "theorem", "sqrt_mul_self", ["nnreal"]], ["mod", "theorem", "sqrt_one", ["nnreal"]], ["mod", "theorem", "sqrt_sq", ["nnreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "def", "pow_order_iso", ["nnreal"]]]}]}, {"timestamp": 1662391454, "sha": "3f772d42", "message": "chore(category_theory/sites/compatible_plus): speed up ι_plus_comp_iso_hom (#16379)\nThis failed when experimenting with `-T90000`; just squeezing the `simp`s seems to help a fair bit.", "changes": [{"oldPath": "src/category_theory/sites/compatible_plus.lean", "newPath": "src/category_theory/sites/compatible_plus.lean", "changes": []}]}, {"timestamp": 1662382104, "sha": "7df02f87", "message": "feat(measure_theory/integral/circle_integral_transform.lean): name ch… (#16387)\nChange file name from `circle_integral_transform` to `circle_transform` to match the definitions. This is in preparation for #15356", "changes": [{"oldPath": "src/measure_theory/integral/circle_integral_transform.lean", "newPath": "src/measure_theory/integral/circle_transform.lean", "changes": []}]}, {"timestamp": 1662382103, "sha": "06930844", "message": "refactor(linear_algebra/affine_space/finite_dimensional): change three lemmas to instances (#16331)\nI realised after the PR with these lemmas was approved that they are\nactually suitable to be instances (don't depend on any hypotheses that\ntypeclass inference can't deduce), and making them such sometimes\nallows removing explicit `haveI` uses because typeclass inference can\nthen find them automatically.", "changes": [{"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["del", "theorem", "finite_dimensional_direction_affine_span_insert", []], ["del", "theorem", "finite_dimensional_vector_span_insert", []], ["del", "theorem", "finite_dimensional_vector_span_insert_set", []]]}]}, {"timestamp": 1662382102, "sha": "4b4975cf", "message": "feat(): add a bunch of lemmas for use with Jacobi symbols (#16290)\nThis PR introduces a number of lemmas that will be needed for proving results about the Jacobi symbol (to be introduced in a follow-up PR). (Originally, the Jacobi symbol results were included here; see the discussion below.)\nDiscussion on [Zuilp](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Jacobi.20symbol/near/295816984).", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "pmap_append'", ["list"]], ["add", "theorem", "pmap_append", ["list"]]]}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "exists_eq_pow_mul_and_not_dvd", ["nat"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "mod_even", ["even"]], ["add", "theorem", "mod_even_iff", ["even"]], ["add", "theorem", "factors_ne_two", ["odd"]], ["add", "theorem", "mod_even", ["odd"]], ["add", "theorem", "mod_even_iff", ["odd"]]]}, {"oldPath": "src/data/sign.lean", "newPath": "src/data/sign.lean", "changes": [["add", "theorem", "range_eq", ["sign_type"]]]}, {"oldPath": null, "newPath": "src/data/zmod/coprime.lean", "changes": [["add", "theorem", "eq_zero_iff_gcd_ne_one", ["zmod"]], ["add", "theorem", "eq_zero_of_gcd_ne_one", ["zmod"]], ["add", "theorem", "ne_zero_of_gcd_eq_one", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/zmod_char.lean", "newPath": "src/number_theory/legendre_symbol/zmod_char.lean", "changes": [["add", "theorem", "χ₄_int_mod_four", ["zmod"]], ["add", "theorem", "χ₄_int_one_mod_four", ["zmod"]], ["add", "theorem", "χ₄_int_three_mod_four", ["zmod"]], ["add", "theorem", "χ₄_nat_mod_four", ["zmod"]], ["add", "theorem", "χ₄_nat_one_mod_four", ["zmod"]], ["add", "theorem", "χ₄_nat_three_mod_four", ["zmod"]], ["add", "theorem", "χ₈_int_mod_eight", ["zmod"]], ["add", "theorem", "χ₈_nat_mod_eight", ["zmod"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "gcd_eq_one_of_gcd_mul_right_eq_one_left", ["int"]], ["add", "theorem", "gcd_eq_one_of_gcd_mul_right_eq_one_right", ["int"]], ["add", "theorem", "gcd_ne_one_iff_gcd_mul_right_ne_one", ["int"]]]}]}, {"timestamp": 1662382101, "sha": "0ab31714", "message": "feat(order/heyting/boundary): Co-Heyting boundary (#16257)\nDefine the boundary of an element in a co-Heyting algebra. This generalizes the topological boundary as an operation on `closeds α`.", "changes": [{"oldPath": null, "newPath": "src/order/heyting/boundary.lean", "changes": [["add", "def", "boundary", ["coheyting"]], ["add", "theorem", "boundary_bot", ["coheyting"]], ["add", "theorem", "boundary_eq_bot", ["coheyting"]], ["add", "theorem", "boundary_hnot_hnot", ["coheyting"]], ["add", "theorem", "boundary_hnot_le", ["coheyting"]], ["add", "theorem", "boundary_idem", ["coheyting"]], ["add", "theorem", "boundary_inf", ["coheyting"]], ["add", "theorem", "boundary_inf_le", ["coheyting"]], ["add", "theorem", "boundary_le", ["coheyting"]], ["add", "theorem", "boundary_le_boundary_sup_sup_boundary_inf_left", ["coheyting"]], ["add", "theorem", "boundary_le_boundary_sup_sup_boundary_inf_right", ["coheyting"]], ["add", "theorem", "boundary_le_hnot", ["coheyting"]], ["add", "theorem", "boundary_sup_le", ["coheyting"]], ["add", "theorem", "boundary_sup_sup_boundary_inf", ["coheyting"]], ["add", "theorem", "boundary_top", ["coheyting"]], ["add", "theorem", "hnot_boundary", ["coheyting"]], ["add", "theorem", "hnot_eq_top_iff_exists_boundary", ["coheyting"]], ["add", "theorem", "hnot_hnot_sup_boundary", ["coheyting"]], ["add", "theorem", "inf_hnot_self", ["coheyting"]]]}]}, {"timestamp": 1662375945, "sha": "3a8665a8", "message": "feat(tactic/positivity): Handle division of integers (#16163)\nExtend `positivity_div` to handle division of integers.", "changes": [{"oldPath": "src/tactic/positivity.lean", "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1662367937, "sha": "44c90247", "message": "feat(probability/martingale/basic): the stopped process of a submartingale is a submartingale (#16375)", "changes": [{"oldPath": "src/probability/martingale/basic.lean", "newPath": "src/probability/martingale/basic.lean", "changes": [["add", "theorem", "stopped_process", ["measure_theory", "submartingale"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "stopped_process_eq_stopped_value", ["measure_theory"]], ["add", "theorem", "stopped_value_stopped_process", ["measure_theory"]]]}]}, {"timestamp": 1662358356, "sha": "dc8113b0", "message": "feat(linear_algebra/ray): `same_ray_map_iff` for injective linear maps (#16377)\nAdd a stronger version of `same_ray_map_iff`, for any injective linear\nmap rather than just a linear equivalence.", "changes": [{"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": [["add", "theorem", "same_ray_map_iff", ["function", "injective"]]]}]}, {"timestamp": 1662354993, "sha": "9b11656c", "message": "chore(scripts): update nolints.txt (#16384)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1662347941, "sha": "e1d2f5bd", "message": "feat(geometry/euclidean/basic): `affine_isometry.angle_map` (#16374)\nAdd the lemma that angles between three points are preserved by affine\nisometries, analogous to the one that already exists that angles\nbetween two vectors are preserved by linear isometries.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "angle_map", ["affine_isometry"]]]}]}, {"timestamp": 1662347940, "sha": "7fdc06de", "message": "chore(data/nat/part_enat): make `coe_inj` `@[norm_cast]` (#16334)", "changes": [{"oldPath": "src/data/nat/part_enat.lean", "newPath": "src/data/nat/part_enat.lean", "changes": [["mod", "theorem", "coe_inj", ["part_enat"]]]}]}, {"timestamp": 1662338580, "sha": "7ce2bb4a", "message": "feat(order/filter/at_top_bot): add lemmas about convergence of `λ x, r * f x` to `±∞` (#16355)\nOther API changes:\n* assume `m ≠ 0` instead of `1 ≤ m` in `le_self_pow`;\n* generalize `linear_ordered_semiring.to_no_max_order` to `ordered_semiring.to_no_max_order`.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["mod", "theorem", "le_self_pow", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "not_tendsto_pow_at_top_at_bot", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_bot_iff", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_bot_iff_neg", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_bot_iff_pos", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_bot_of_neg", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_bot_of_pos", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_top_iff", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_top_iff_neg", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_top_iff_pos", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_top_of_neg", ["filter"]], ["add", "theorem", "tendsto_const_mul_at_top_of_pos", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_bot_iff", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_bot_iff_neg", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_bot_iff_pos", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_bot_of_neg", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_bot_of_pos", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_top_iff", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_top_iff_neg", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_top_iff_pos", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_top_of_neg", ["filter"]], ["add", "theorem", "tendsto_mul_const_at_top_of_pos", ["filter"]], ["add", "theorem", "tendsto_pow_at_top_iff", ["filter"]]]}]}, {"timestamp": 1662330134, "sha": "86ee6689", "message": "fix(algebra/category/Module): speedup (#16371)\nThis change makes `map'` go from using 95,000+ heartbeats (that is, `lean --make -T95000` fails locally) to using less than 25,000. With `set_option pp.all true`, the output of `#print map'` is the same before and after this change, but note that this is a `def` so perhaps using the `apply` tactic is not appropriate.", "changes": [{"oldPath": "src/algebra/category/Module/change_of_rings.lean", "newPath": "src/algebra/category/Module/change_of_rings.lean", "changes": []}]}, {"timestamp": 1662318599, "sha": "075b0d23", "message": "doc(data/nat/{part_enat, lattice}): update doc string (#16345)", "changes": [{"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/part_enat.lean", "newPath": "src/data/nat/part_enat.lean", "changes": []}]}, {"timestamp": 1662314856, "sha": "a3e847c0", "message": "feat(analysis/special_functions/stirling): Stirling's formula, part I (#14874)\nPart 1\n- [x] depends on: #14881", "changes": [{"oldPath": null, "newPath": "src/analysis/special_functions/stirling.lean", "changes": [["add", "theorem", "log_stirling_seq'_antitone", []], ["add", "theorem", "log_stirling_seq_bounded_aux", []], ["add", "theorem", "log_stirling_seq_bounded_by_constant", []], ["add", "theorem", "log_stirling_seq_diff_has_sum", []], ["add", "theorem", "log_stirling_seq_diff_le_geo_sum", []], ["add", "theorem", "log_stirling_seq_formula", []], ["add", "theorem", "log_stirling_seq_sub_log_stirling_seq_succ", []], ["add", "theorem", "stirling_seq'_antitone", []], ["add", "theorem", "stirling_seq'_bounded_by_pos_constant", []], ["add", "theorem", "stirling_seq'_pos", []], ["add", "theorem", "stirling_seq_has_pos_limit_a", []], ["add", "theorem", "stirling_seq_one", []], ["add", "theorem", "stirling_seq_zero", []]]}]}, {"timestamp": 1662304951, "sha": "e4fb6414", "message": "feat(order/heyting/basic): Generalize boolean algebras lemmas (#16281)\nGeneralize lemmas from `(generalized_)boolean_algebra` to `(generalized_)coheyting_algebra`. Dualize (some of) them. Duplicate lemmas have been made aliases. Add supporting lemmas to golf the proofs.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "sdiff_union_self_eq_union", ["finset"]], ["mod", "theorem", "union_sdiff_self_eq_union", ["finset"]], ["mod", "theorem", "union_sdiff_symm", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "diff_union_self", ["set"]], ["mod", "theorem", "subset_compl_comm", ["set"]], ["mod", "theorem", "union_diff_self", ["set"]]]}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": [["mod", "theorem", "coe_bot", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_compl", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_inf", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_sdiff", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_sup", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_top", ["first_order", "language", "definable_set"]], ["mod", "theorem", "le_iff", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_compl", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_inf", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_sdiff", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_sup", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_top", ["first_order", "language", "definable_set"]], ["mod", "theorem", "not_mem_bot", ["first_order", "language", "definable_set"]], ["del", "theorem", "coe_cast_add_zero", ["set", "fin"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["mod", "theorem", "compl_compl", []], ["mod", "theorem", "compl_inf", []], ["del", "theorem", "compl_unique", []], ["del", "theorem", "sdiff_eq_left", ["disjoint"]], ["del", "theorem", "sdiff_eq_right", ["disjoint"]], ["del", "theorem", "sup_sdiff_cancel_left", ["disjoint"]], ["del", "theorem", "sup_sdiff_cancel_right", ["disjoint"]], ["del", "theorem", "inf_sdiff_left", []], ["del", "theorem", "inf_sdiff_right", []], ["del", "theorem", "inf_sdiff_sup_left", []], ["del", "theorem", "inf_sdiff_sup_right", []], ["del", "theorem", "compl_eq", ["is_compl"]], ["del", "theorem", "eq_compl", ["is_compl"]], ["del", "theorem", "le_compl_iff_le_compl", []], ["del", "theorem", "le_compl_of_le_compl", []], ["del", "theorem", "sdiff_idem", []], ["del", "theorem", "sdiff_le'", []], ["del", "theorem", "sdiff_le_sdiff_of_sup_le_sup_left", []], ["del", "theorem", "sdiff_le_sdiff_of_sup_le_sup_right", []], ["del", "theorem", "sdiff_sdiff_comm", []], ["del", "theorem", "sdiff_sdiff_le", []], ["del", "theorem", "sdiff_sdiff_left", []], ["del", "theorem", "sdiff_sdiff_self", []], ["del", "theorem", "sdiff_sup_cancel", []], ["del", "theorem", "sdiff_sup_sdiff_cancel", []], ["del", "theorem", "sdiff_triangle", []], ["del", "theorem", "sup_le_of_le_sdiff_left", []], ["del", "theorem", "sup_le_of_le_sdiff_right", []], ["del", "theorem", "sup_sdiff", []], ["del", "theorem", "sup_sdiff_cancel'", []], ["del", "theorem", "sup_sdiff_cancel_right", []], ["del", "theorem", "sup_sdiff_eq_sup", []], ["del", "theorem", "sup_sdiff_left", []], ["del", "theorem", "sup_sdiff_left_self", []], ["del", "theorem", "sup_sdiff_right", []], ["del", "theorem", "sup_sdiff_right_self", []], ["del", "theorem", "sup_sdiff_self_left", []], ["del", "theorem", "sup_sdiff_self_right", []], ["del", "theorem", "sup_sdiff_symm", []], ["mod", "theorem", "top_sdiff", []]]}, {"oldPath": "src/order/heyting/basic.lean", "newPath": "src/order/heyting/basic.lean", "changes": [["add", "theorem", "himp_eq_left", ["codisjoint"]], ["add", "theorem", "himp_eq_right", ["codisjoint"]], ["add", "theorem", "himp_inf_cancel_left", ["codisjoint"]], ["add", "theorem", "himp_inf_cancel_right", ["codisjoint"]], ["add", "theorem", "compl_unique", []], ["add", "theorem", "sdiff_eq_left", ["disjoint"]], ["add", "theorem", "sdiff_eq_right", ["disjoint"]], ["add", "theorem", "sup_sdiff_cancel_left", ["disjoint"]], ["add", "theorem", "sup_sdiff_cancel_right", ["disjoint"]], ["add", "theorem", "codisjoint_hnot_left", ["has_le", "le"]], ["add", "theorem", "codisjoint_hnot_right", ["has_le", "le"]], ["add", "theorem", "disjoint_compl_left", ["has_le", "le"]], ["add", "theorem", "disjoint_compl_right", ["has_le", "le"]], ["add", "theorem", "himp_inf_himp_cancel", []], ["del", "theorem", "himp_le_himp_himp", []], ["add", "theorem", "himp_le_himp_himp_himp", []], ["add", "theorem", "himp_triangle", []], ["add", "theorem", "inf_sdiff_left", []], ["add", "theorem", "inf_sdiff_right", []], ["add", "theorem", "inf_sdiff_sup_left", []], ["add", "theorem", "inf_sdiff_sup_right", []], ["add", "theorem", "compl_eq", ["is_compl"]], ["add", "theorem", "eq_compl", ["is_compl"]], ["add", "theorem", "eq_hnot", ["is_compl"]], ["add", "theorem", "hnot_eq", ["is_compl"]], ["mod", "theorem", "le_himp_comm", []], ["add", "theorem", "le_himp_himp", []], ["add", "theorem", "le_himp_iff'", []], ["add", "theorem", "sdiff_idem", []], ["mod", "theorem", "sdiff_le_comm", []], ["add", "theorem", "sdiff_le_iff'", []], ["add", "theorem", "sdiff_le_sdiff_of_sup_le_sup_left", []], ["add", "theorem", "sdiff_le_sdiff_of_sup_le_sup_right", []], ["add", "theorem", "sdiff_sdiff_comm", []], ["add", "theorem", "sdiff_sdiff_le", []], ["del", "theorem", "sdiff_sdiff_le_sdiff", []], ["add", "theorem", "sdiff_sdiff_left", []], ["add", "theorem", "sdiff_sdiff_sdiff_le_sdiff", []], ["add", "theorem", "sdiff_sdiff_self", []], ["add", "theorem", "sdiff_sup_cancel", []], ["add", "theorem", "sdiff_sup_sdiff_cancel", []], ["add", "theorem", "sdiff_triangle", []], ["add", "theorem", "sup_le_of_le_sdiff_left", []], ["add", "theorem", "sup_le_of_le_sdiff_right", []], ["add", "theorem", "sup_sdiff", []], ["add", "theorem", "sup_sdiff_cancel'", []], ["add", "theorem", "sup_sdiff_cancel_right", []], ["add", "theorem", "sup_sdiff_eq_sup", []], ["add", "theorem", "sup_sdiff_left", []], ["add", "theorem", "sup_sdiff_left_self", []], ["add", "theorem", "sup_sdiff_right", []], ["add", "theorem", "sup_sdiff_right_self", []]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["mod", "theorem", "inf_eq_left", []], ["mod", "theorem", "inf_eq_right", []], ["del", "theorem", "inf_of_le_left", []], ["del", "theorem", "inf_of_le_right", []], ["del", "theorem", "le_of_inf_eq", []], ["del", "theorem", "le_of_sup_eq", []], ["mod", "theorem", "left_eq_inf", []], ["mod", "theorem", "left_eq_sup", []], ["mod", "theorem", "right_eq_inf", []], ["mod", "theorem", "right_eq_sup", []], ["mod", "theorem", "sup_eq_left", []], ["mod", "theorem", "sup_eq_right", []], ["add", "theorem", "sup_le_inf", []], ["del", "theorem", "sup_of_le_left", []], ["del", "theorem", "sup_of_le_right", []]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1662272703, "sha": "bb0978c2", "message": "fix(analysis/inner_product_space,geometry/euclidean): two deterministic timeout fixes (#16365)\nCI seems to be having some issues after #16356, which I can't reproduce with `-T100000` locally but can with `-T90000`. This PR speeds up `analysis/inner_product_space/l2_space.lean:hilbert_basis.coe_mk` (which was already investigated before in #15271) and `geometry/euclidean/oriented_angle.lean:inner_eq_norm_mul_norm_mul_cos_oangle`.", "changes": [{"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": []}]}, {"timestamp": 1662266423, "sha": "1cfdf5f3", "message": "chore(linear_algebra/*): Lint (#16362)\nSatisfy the `fintype_finite` and `fails_quickly` linters.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "def", "to_add_torsor", ["affine_subspace"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "map_basis_eq_zero_iff", ["alternating_map"]], ["mod", "theorem", "map_basis_ne_zero_iff", ["alternating_map"]], ["mod", "theorem", "det_zero'", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_pi", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "theorem", "coe_dual_basis", ["basis"]], ["mod", "def", "dual_basis", ["basis"]], ["mod", "theorem", "dual_basis_apply", ["basis"]], ["mod", "theorem", "dual_basis_apply_self", ["basis"]], ["mod", "theorem", "dual_basis_repr", ["basis"]], ["mod", "theorem", "dual_dim_eq", ["basis"]], ["mod", "def", "eval_equiv", ["basis"]], ["mod", "theorem", "eval_equiv_to_linear_map", ["basis"]], ["mod", "theorem", "eval_range", ["basis"]], ["mod", "def", "to_dual_equiv", ["basis"]], ["mod", "theorem", "to_dual_range", ["basis"]], ["mod", "theorem", "to_dual_to_dual", ["basis"]], ["mod", "theorem", "total_coord", ["basis"]], ["mod", "theorem", "total_dual_basis", ["basis"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["mod", "theorem", "cardinal_lt_aleph_0_of_finite_dimensional", []]]}, {"oldPath": "src/linear_algebra/free_module/finite/basic.lean", "newPath": "src/linear_algebra/free_module/finite/basic.lean", "changes": [["mod", "theorem", "of_basis", ["module", "finite"]]]}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": [["mod", "theorem", "rank_matrix''", ["module", "free"]], ["mod", "theorem", "rank_matrix'", ["module", "free"]], ["mod", "theorem", "rank_matrix", ["module", "free"]], ["add", "theorem", "rank_pi_finite", ["module", "free"]], ["del", "theorem", "rank_pi_fintype", ["module", "free"]]]}, {"oldPath": "src/linear_algebra/matrix/finite_dimensional.lean", "newPath": "src/linear_algebra/matrix/finite_dimensional.lean", "changes": [["mod", "theorem", "finrank_matrix", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": [["mod", "theorem", "mul_reindex_linear_equiv_one", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": [["mod", "theorem", "update_row_eq_transvection", ["matrix"]]]}, {"oldPath": "src/linear_algebra/multilinear/basis.lean", "newPath": "src/linear_algebra/multilinear/basis.lean", "changes": [["mod", "theorem", "ext_multilinear", ["basis"]]]}, {"oldPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "newPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["mod", "theorem", "map_orientation_eq_det_inv_smul", ["basis"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["mod", "theorem", "supr_range_std_basis", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["mod", "theorem", "trace_eq_contract_of_basis'", ["linear_map"]], ["mod", "theorem", "trace_eq_contract_of_basis", ["linear_map"]]]}]}, {"timestamp": 1662259831, "sha": "443c02be", "message": "feat(group_theory/finiteness): Add `rank_le_of_surjective`, `rank_range_le`, and `rank_congr` (#16363)\nThis PR adds some more API lemmas for `group.rank`.", "changes": [{"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": [["add", "theorem", "rank_congr", ["group"]], ["add", "theorem", "rank_le_of_surjective", ["group"]], ["add", "theorem", "rank_range_le", ["group"]]]}]}, {"timestamp": 1662256886, "sha": "f46fcef9", "message": "feat(matrix/spectrum): The determinant of a hermitian matrix is the product of its eigenvalues. (#16293)", "changes": [{"oldPath": "src/linear_algebra/matrix/spectrum.lean", "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": [["add", "theorem", "det_eq_prod_eigenvalues", ["matrix", "is_hermitian"]]]}]}, {"timestamp": 1662242407, "sha": "a6ca2e8f", "message": "feat(analysis/analytic/isolated_zeros): Principle of isolated zeros (#15908)\nLocal version: an analytic function is either locally zero, or nonzero in a punctured neighborhood.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "congr", ["has_fpower_series_at"]], ["add", "theorem", "eq_formal_multilinear_series_of_eventually", ["has_fpower_series_at"]], ["add", "theorem", "eq_zero_of_eventually", ["has_fpower_series_at"]], ["add", "theorem", "eventually_eq_zero", ["has_fpower_series_at"]], ["add", "theorem", "eventually_has_sum", ["has_fpower_series_at"]], ["add", "theorem", "eventually_has_sum_sub", ["has_fpower_series_at"]], ["add", "theorem", "has_fpower_series_at_iff'", []], ["add", "theorem", "has_fpower_series_at_iff", []], ["add", "theorem", "eventually_eq_zero", ["has_fpower_series_on_ball"]], ["add", "theorem", "eventually_has_sum", ["has_fpower_series_on_ball"]], ["add", "theorem", "eventually_has_sum_sub", ["has_fpower_series_on_ball"]]]}, {"oldPath": null, "newPath": "src/analysis/analytic/isolated_zeros.lean", "changes": [["add", "theorem", "eventually_eq_zero_or_eventually_ne_zero", ["analytic_at"]], ["add", "theorem", "eq_pow_order_mul_iterate_dslope", ["has_fpower_series_at"]], ["add", "theorem", "has_fpower_series_dslope_fslope", ["has_fpower_series_at"]], ["add", "theorem", "has_fpower_series_iterate_dslope_fslope", ["has_fpower_series_at"]], ["add", "theorem", "iterate_dslope_fslope_ne_zero", ["has_fpower_series_at"]], ["add", "theorem", "locally_ne_zero", ["has_fpower_series_at"]], ["add", "theorem", "locally_zero_iff", ["has_fpower_series_at"]], ["add", "theorem", "exists_has_sum_smul_of_apply_eq_zero", ["has_sum"]], ["add", "theorem", "has_sum_at_zero", ["has_sum"]]]}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": [["add", "theorem", "apply_eq_pow_smul_coeff", ["formal_multilinear_series"]], ["add", "theorem", "apply_eq_prod_smul_coeff", ["formal_multilinear_series"]], ["add", "theorem", "apply_eq_zero_of_lt_order", ["formal_multilinear_series"]], ["add", "theorem", "apply_order_ne_zero'", ["formal_multilinear_series"]], ["add", "theorem", "apply_order_ne_zero", ["formal_multilinear_series"]], ["add", "def", "coeff", ["formal_multilinear_series"]], ["add", "theorem", "coeff_eq_zero", ["formal_multilinear_series"]], ["add", "theorem", "coeff_fslope", ["formal_multilinear_series"]], ["add", "theorem", "coeff_iterate_fslope", ["formal_multilinear_series"]], ["add", "theorem", "mk_pi_field_coeff_eq", ["formal_multilinear_series"]], ["add", "theorem", "ne_zero_of_order_ne_zero", ["formal_multilinear_series"]], ["add", "theorem", "norm_apply_eq_norm_coef", ["formal_multilinear_series"]], ["add", "theorem", "order_eq_find'", ["formal_multilinear_series"]], ["add", "theorem", "order_eq_find", ["formal_multilinear_series"]], ["add", "theorem", "order_eq_zero_iff'", ["formal_multilinear_series"]], ["add", "theorem", "order_eq_zero_iff", ["formal_multilinear_series"]], ["add", "theorem", "order_zero", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "mk_pi_field_eq_iff", ["continuous_multilinear_map"]], ["add", "theorem", "mk_pi_field_eq_zero_iff", ["continuous_multilinear_map"]], ["add", "theorem", "mk_pi_field_zero", ["continuous_multilinear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "theorem", "mk_pi_ring_eq_iff", ["multilinear_map"]], ["add", "theorem", "mk_pi_ring_eq_zero_iff", ["multilinear_map"]], ["add", "theorem", "mk_pi_ring_zero", ["multilinear_map"]]]}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["add", "theorem", "ext_iff", ["continuous_multilinear_map"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "eventually_ne", ["continuous_at"]], ["add", "theorem", "eventually_ne", ["filter", "tendsto"]]]}]}, {"timestamp": 1662210634, "sha": "1995c7bb", "message": "chore(.github/workflows): revert first-run timeout to -T100000 (#16356)\nThis reverts part of #15251, now that #15784 works around the olean issue.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/functor_n.lean", "newPath": "src/algebraic_topology/dold_kan/functor_n.lean", "changes": []}, {"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat/limit.lean", "newPath": "src/category_theory/category/Cat/limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "coe_aut_to_pow_apply", ["is_primitive_root"]]]}]}, {"timestamp": 1662201981, "sha": "882fc132", "message": "refactor(group_theory/finiteness): Make `group.rank` noncomputable (#16256)\nI've been working on some more API for `group.rank`, and the decidability hypothesis was making lemma statements really clunky. If you wanted to say `group.rank G ≤ group.rank G'`, then the decidability hypotheses would add two lines to the statement of the lemma.", "changes": [{"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": [["del", "def", "rank", ["group"]], ["mod", "theorem", "rank_le", ["group"]], ["mod", "theorem", "rank_spec", ["group"]]]}, {"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": [["mod", "theorem", "rank_le_index_mul_rank", ["subgroup"]]]}]}, {"timestamp": 1662201980, "sha": "51b175cf", "message": "feat(number_theory/padics/padic_norm): add int_eq_one_iff (#16074)\nAdd the proof that the p-adic norm of an integer is 1 iff the integer is not a multiple of p and related API for `padic_norm`.", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["add", "theorem", "int_eq_one_iff", ["padic_norm"]], ["add", "theorem", "int_lt_one_iff", ["padic_norm"]], ["add", "theorem", "nat_eq_one_iff", ["padic_norm"]], ["add", "theorem", "nat_lt_one_iff", ["padic_norm"]], ["add", "theorem", "of_nat", ["padic_norm"]], ["add", "theorem", "sum_le'", ["padic_norm"]], ["add", "theorem", "sum_le", ["padic_norm"]], ["add", "theorem", "sum_lt'", ["padic_norm"]], ["add", "theorem", "sum_lt", ["padic_norm"]]]}]}, {"timestamp": 1662191167, "sha": "08fd57f2", "message": "chore(topology/connected): speed up sum.is_connected_iff (#16353)", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}]}, {"timestamp": 1662179041, "sha": "ebced636", "message": "chore(scripts): update nolints.txt (#16361)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1662131725, "sha": "637412df", "message": "feat(analysis/complex/schwarz): equality case in Schwarz lemma (#15861)\nThis partially addresses one of the TODO items in `analysis/complex/schwarz` by showing the equality case in the main statement of the Schwarz lemma.", "changes": [{"oldPath": "src/analysis/complex/schwarz.lean", "newPath": "src/analysis/complex/schwarz.lean", "changes": [["add", "theorem", "affine_of_maps_to_ball_of_exists_norm_dslope_eq_div'", ["complex"]], ["add", "theorem", "affine_of_maps_to_ball_of_exists_norm_dslope_eq_div", ["complex"]]]}]}, {"timestamp": 1662131724, "sha": "9191c40c", "message": "feat(data/nat/factorization/basic): lemmas on divisibility of `ord_proj` and `ord_compl` (#15793)\nFor `a b : ℕ`, we have `a ∣ b` iff \n* `∀ p : ℕ, ord_proj[p] a ∣ ord_proj[p] b` (for `a`, `b` positive)\n* `∀ p : ℕ, ord_compl[p] a ∣ ord_compl[p] b`", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "ord_compl_dvd_ord_compl_iff_dvd", ["nat"]], ["add", "theorem", "ord_compl_dvd_ord_compl_of_dvd", ["nat"]], ["add", "theorem", "ord_proj_dvd_ord_proj_iff_dvd", ["nat"]], ["add", "theorem", "ord_proj_dvd_ord_proj_of_dvd", ["nat"]]]}]}, {"timestamp": 1662131723, "sha": "734c95f1", "message": "feat(combinatorics/simple_graph/connectivity): walk.copy function to relax dependent type issues (#15764)\nWalks in a graph present a special challenge since the endpoints of a walk appear as type indices, leading to a constant struggle with dependent types and strict definitional equality. This commit introduces a `walk.copy` function to be able to change the definitions of a walk's endpoints. There are also many simp lemmas to push the copy function out of most expressions.\nAn example of a lemma that `copy` lets us express:\n```lean\nlemma map_eq_of_eq {f : G →g G'} (f' : G →g G') (h : f = f') :\n p.map f = (p.map f').copy (by rw h) (by rw h)\n```\nThanks to @**Junyan Xu|224323** for the idea.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "append_copy_copy", ["simple_graph", "walk"]], ["add", "theorem", "bypass_copy", ["simple_graph", "walk"]], ["add", "theorem", "cons_copy", ["simple_graph", "walk"]], ["add", "theorem", "copy_cons", ["simple_graph", "walk"]], ["add", "theorem", "copy_copy", ["simple_graph", "walk"]], ["add", "theorem", "copy_nil", ["simple_graph", "walk"]], ["add", "theorem", "copy_rfl_rfl", ["simple_graph", "walk"]], ["add", "theorem", "darts_copy", ["simple_graph", "walk"]], ["add", "theorem", "drop_until_copy", ["simple_graph", "walk"]], ["add", "theorem", "edges_copy", ["simple_graph", "walk"]], ["add", "theorem", "is_circuit_copy", ["simple_graph", "walk"]], ["add", "theorem", "is_circuit_def", ["simple_graph", "walk"]], ["add", "theorem", "is_cycle_copy", ["simple_graph", "walk"]], ["add", "theorem", "is_path_copy", ["simple_graph", "walk"]], ["add", "theorem", "is_trail_copy", ["simple_graph", "walk"]], ["add", "theorem", "length_copy", ["simple_graph", "walk"]], ["add", "theorem", "map_copy", ["simple_graph", "walk"]], ["add", "theorem", "map_eq_of_eq", ["simple_graph", "walk"]], ["add", "theorem", "map_id", ["simple_graph", "walk"]], ["add", "theorem", "map_map", ["simple_graph", "walk"]], ["add", "theorem", "reverse_copy", ["simple_graph", "walk"]], ["add", "theorem", "support_copy", ["simple_graph", "walk"]], ["add", "theorem", "take_until_copy", ["simple_graph", "walk"]], ["add", "theorem", "to_delete_edges_copy", ["simple_graph", "walk"]]]}]}, {"timestamp": 1662131722, "sha": "678f62f0", "message": "feat(data/polynomial): some lemmas about (nat)degree of bit0/1 in char_zero (#15726)", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_bit0", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "degree_bit0_eq", ["polynomial"]], ["add", "theorem", "degree_bit1_eq", ["polynomial"]], ["add", "theorem", "nat_degree_bit0_eq", ["polynomial"]], ["add", "theorem", "nat_degree_bit1_eq", ["polynomial"]]]}]}, {"timestamp": 1662125284, "sha": "aab6d3c7", "message": "feat(data/nat/factorization/prime_pow): lemmas relating `is_prime_pow` and `ord_compl = 1` (#15692)\nAdds lemmas showing that `n` is a prime power iff `ord_compl[p] n = 1` (for some prime `p`).\n`exists_ord_compl_eq_one_of_is_prime_pow (h : is_prime_pow n) : (∃ p : ℕ, p.prime ∧ ord_compl[p] n = 1)`\n`is_prime_pow_of_ord_compl_eq_one (hn : n ≠ 1) (pp : p.prime) (h : ord_compl[p] n = 1) : is_prime_pow n`", "changes": [{"oldPath": "src/data/nat/factorization/prime_pow.lean", "newPath": "src/data/nat/factorization/prime_pow.lean", "changes": [["add", "theorem", "exists_ord_compl_eq_one_iff_is_prime_pow", []], ["add", "theorem", "exists_ord_compl_eq_one", ["is_prime_pow"]]]}]}, {"timestamp": 1662125282, "sha": "447cbe9c", "message": "refactor({data,linear_algebra}/matrix/block): Generalize block indexing (#14035)\nCurrently many definitions around block matrices are specialized to either `ℕ` or `fin n` as the indexing type. This means that some definitions are duplicated and proofs feel unnatural. This PR generalizes them to an arbitrary type (with an order) and subsequently golfs proofs.", "changes": [{"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["del", "def", "to_square_block'", ["matrix"]], ["mod", "def", "to_square_block", ["matrix"]], ["del", "theorem", "to_square_block_def'", ["matrix"]], ["mod", "theorem", "to_square_block_def", ["matrix"]], ["mod", "def", "to_square_block_prop", ["matrix"]], ["mod", "theorem", "to_square_block_prop_def", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": [["del", "def", "block_triangular'", ["matrix"]], ["add", "theorem", "det_fintype", ["matrix", "block_triangular"]], ["mod", "def", "block_triangular", ["matrix"]], ["add", "theorem", "block_triangular_reindex_iff", ["matrix"]], ["del", "theorem", "det_of_block_triangular''", ["matrix"]], ["del", "theorem", "det_of_block_triangular'", ["matrix"]], ["del", "theorem", "det_of_block_triangular", ["matrix"]], ["mod", "theorem", "det_of_lower_triangular", ["matrix"]], ["mod", "theorem", "det_of_upper_triangular", ["matrix"]], ["del", "theorem", "det_to_square_block'", ["matrix"]], ["del", "theorem", "det_to_square_block", ["matrix"]], ["add", "theorem", "det_to_square_block_id", ["matrix"]], ["del", "theorem", "to_square_block_det''", ["matrix"]], ["add", "theorem", "two_block_triangular_det'", ["matrix"]], ["del", "theorem", "upper_two_block_triangular'", ["matrix"]], ["mod", "theorem", "upper_two_block_triangular", ["matrix"]]]}]}, {"timestamp": 1662115789, "sha": "9556784a", "message": "chore(ring_theory/*): Fix lint (#16350)\nSatisfy the `fintype_finite` and `check_reducibility` linters.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": [["mod", "theorem", "exists_sub_mem", ["ideal"]], ["mod", "theorem", "map_pi", ["ideal"]], ["mod", "theorem", "quotient_inf_to_pi_quotient_bijective", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integer.lean", "newPath": "src/ring_theory/localization/integer.lean", "changes": [["add", "theorem", "exist_integer_multiples_of_finite", ["is_localization"]], ["del", "theorem", "exist_integer_multiples_of_fintype", ["is_localization"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["mod", "theorem", "norm_algebra_map_of_basis", ["algebra"]], ["mod", "theorem", "norm_eq_matrix_det", ["algebra"]]]}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "theorem", "map_mv_polynomial_eq_eval₂", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["mod", "theorem", "trace_comp_trace_of_basis", ["algebra"]], ["mod", "theorem", "trace_trace_of_basis", ["algebra"]]]}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": []}]}, {"timestamp": 1662115788, "sha": "8bedeafb", "message": "feat(data/nat/enat): derive typeclasses about well founded (#16346)", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}]}, {"timestamp": 1662115786, "sha": "62f14c33", "message": "feat(category_theory/limits/has_limits): `const` and `(co)lim` are adjoint (#16251)", "changes": [{"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["add", "def", "colim_const_adj", ["category_theory", "limits"]], ["add", "def", "const_lim_adj", ["category_theory", "limits"]]]}]}, {"timestamp": 1662115785, "sha": "1555e3de", "message": "feat(set_theory/cardinal/finite): `nat.card_pi` (#16143)\nThis PR adds `nat.card_pi`.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "prod_eq_of_fintype", ["cardinal"]], ["add", "theorem", "to_nat_finset_prod", ["cardinal"]], ["add", "def", "to_nat_hom", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/finite.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": [["add", "theorem", "card_pi", ["nat"]]]}]}, {"timestamp": 1662115784, "sha": "d6789b8b", "message": "refactor(data/list/forall2): consistent names of relations (#16098)", "changes": [{"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["mod", "theorem", "flip", ["list", "forall₂"]], ["mod", "theorem", "imp", ["list", "forall₂"]], ["mod", "theorem", "length_eq", ["list", "forall₂"]], ["mod", "theorem", "mp", ["list", "forall₂"]], ["mod", "theorem", "forall₂_and_left", ["list"]], ["mod", "theorem", "forall₂_cons", ["list"]], ["mod", "theorem", "forall₂_drop", ["list"]], ["mod", "theorem", "forall₂_drop_append", ["list"]], ["mod", "theorem", "forall₂_iff_zip", ["list"]], ["mod", "theorem", "forall₂_nil_left_iff", ["list"]], ["mod", "theorem", "forall₂_nil_right_iff", ["list"]], ["mod", "theorem", "forall₂_refl", ["list"]], ["mod", "theorem", "forall₂_reverse_iff", ["list"]], ["mod", "theorem", "forall₂_same", ["list"]], ["mod", "theorem", "forall₂_take", ["list"]], ["mod", "theorem", "forall₂_take_append", ["list"]], ["mod", "theorem", "forall₂_zip", ["list"]], ["mod", "theorem", "left_unique_forall₂'", ["list"]], ["mod", "theorem", "rel_append", ["list"]], ["mod", "theorem", "rel_bind", ["list"]], ["mod", "theorem", "rel_filter_map", ["list"]], ["mod", "theorem", "rel_foldl", ["list"]], ["mod", "theorem", "rel_foldr", ["list"]], ["mod", "theorem", "rel_join", ["list"]], ["mod", "theorem", "rel_map", ["list"]], ["mod", "theorem", "rel_mem", ["list"]], ["mod", "theorem", "rel_reverse", ["list"]], ["mod", "theorem", "right_unique_forall₂'", ["list"]], ["mod", "theorem", "sublist_forall₂", ["list", "sublist"]], ["mod", "inductive", "sublist_forall₂", ["list"]], ["mod", "theorem", "tail_sublist_forall₂_self", ["list"]], ["mod", "theorem", "forall₂", ["relator", "bi_unique"]], ["mod", "theorem", "forall₂", ["relator", "left_unique"]], ["mod", "theorem", "forall₂", ["relator", "right_unique"]]]}]}, {"timestamp": 1662115783, "sha": "3c927487", "message": "feat(topology/separation): `embedding.discrete_topology` (#16092)\nThis PR adds a short lemma `embedding.discrete_topology` and golfs the related lemma `discrete_topology_induced`.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "discrete_topology", ["embedding"]]]}]}, {"timestamp": 1662115781, "sha": "09fb38cc", "message": "chore(analysis/box_integral): use GP instead of bot (#15939)\nThis is how this integral is called in the original paper.", "changes": [{"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": [["add", "theorem", "has_integral_GP_divergence_of_forall_has_deriv_within_at", ["box_integral"]], ["add", "theorem", "has_integral_GP_pderiv", ["box_integral"]], ["del", "theorem", "has_integral_bot_divergence_of_forall_has_deriv_within_at", ["box_integral"]], ["del", "theorem", "has_integral_bot_pderiv", ["box_integral"]]]}, {"oldPath": "src/analysis/box_integral/partition/filter.lean", "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": [["add", "def", "GP", ["box_integral", "integration_params"]], ["add", "theorem", "GP_le", ["box_integral", "integration_params"]]]}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}]}, {"timestamp": 1662115780, "sha": "86152105", "message": "feat(data/rat/defs): inv_coe_{int,nat}_{num,denom} (#15863)\nRename existing lemmas to\n`inv_coe_{int,nat}_{num,denom}_of_pos`\nsince they took positivity assumptions\nAlso provide `rat.inv_neg`.", "changes": [{"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": [["mod", "theorem", "inv_coe_int_denom", ["rat"]], ["add", "theorem", "inv_coe_int_denom_of_pos", ["rat"]], ["mod", "theorem", "inv_coe_int_num", ["rat"]], ["add", "theorem", "inv_coe_int_num_of_pos", ["rat"]], ["mod", "theorem", "inv_coe_nat_denom", ["rat"]], ["add", "theorem", "inv_coe_nat_denom_of_pos", ["rat"]], ["mod", "theorem", "inv_coe_nat_num", ["rat"]], ["add", "theorem", "inv_coe_nat_num_of_pos", ["rat"]]]}]}, {"timestamp": 1662111273, "sha": "ddc74844", "message": "feat(geometry/euclidean/oriented_angle): signs of angles between linear combinations of vectors (#16243)\nAdd a series of lemmas giving the sign of the oriented angle between\ntwo linear combinations of two vectors in terms of the sign of the\nangle between the original two vectors and the coefficients in the\nlinear combination.", "changes": [{"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["add", "theorem", "oangle_sign_add_smul_left", ["orientation"]], ["add", "theorem", "oangle_sign_neg_left", ["orientation"]], ["add", "theorem", "oangle_sign_neg_right", ["orientation"]], ["add", "theorem", "oangle_sign_smul_add_right", ["orientation"]], ["add", "theorem", "oangle_sign_smul_add_smul_left", ["orientation"]], ["add", "theorem", "oangle_sign_smul_add_smul_right", ["orientation"]], ["add", "theorem", "oangle_sign_smul_add_smul_smul_add_smul", ["orientation"]], ["add", "theorem", "oangle_sign_smul_left", ["orientation"]], ["add", "theorem", "oangle_sign_smul_right", ["orientation"]], ["add", "theorem", "oangle_sign_sub_smul_left", ["orientation"]], ["add", "theorem", "oangle_sign_sub_smul_right", ["orientation"]], ["add", "theorem", "oangle_sign_add_smul_left", ["orthonormal"]], ["add", "theorem", "oangle_sign_neg_left", ["orthonormal"]], ["add", "theorem", "oangle_sign_neg_right", ["orthonormal"]], ["add", "theorem", "oangle_sign_smul_add_right", ["orthonormal"]], ["add", "theorem", "oangle_sign_smul_add_smul_left", ["orthonormal"]], ["add", "theorem", "oangle_sign_smul_add_smul_right", ["orthonormal"]], ["add", "theorem", "oangle_sign_smul_add_smul_smul_add_smul", ["orthonormal"]], ["add", "theorem", "oangle_sign_smul_left", ["orthonormal"]], ["add", "theorem", "oangle_sign_smul_right", ["orthonormal"]], ["add", "theorem", "oangle_sign_sub_smul_left", ["orthonormal"]], ["add", "theorem", "oangle_sign_sub_smul_right", ["orthonormal"]], ["add", "theorem", "oangle_smul_add_right_eq_zero_or_eq_pi_iff", ["orthonormal"]]]}]}, {"timestamp": 1662101011, "sha": "541b2880", "message": "chore(topology/order): open `function`, don't open `classical` (#16288)", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "set_of_is_open_injective", []]]}]}, {"timestamp": 1662091932, "sha": "525c5a81", "message": "feat(topology/fiber_bundle): Each fiber of a trivialization is homeomorphic to the specified fiber (#16079)\nThis PR adds `topological_fiber_bundle.trivialization.preimage_singleton_homeomorph`, which states that each fiber of a trivialization is homeomorphic to the specified fiber.", "changes": [{"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["add", "theorem", "image_preimage_eq_prod_univ", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "preimage_homeomorph", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "preimage_homeomorph_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "preimage_homeomorph_symm_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "preimage_singleton_homeomorph", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "preimage_singleton_homeomorph_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "preimage_singleton_homeomorph_symm_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "preimage_subset_source", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "source_homeomorph_base_set_prod", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "source_homeomorph_base_set_prod_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "source_homeomorph_base_set_prod_symm_apply", ["topological_fiber_bundle", "trivialization"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "homeomorph_of_unique", ["homeomorph"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "def", "homeomorph_of_image_subset_source", ["local_homeomorph"]]]}]}, {"timestamp": 1662032754, "sha": "394f6e63", "message": "feat(measure_theory/integral/bochner): Hölder's inequality for real nonnegative functions (#16291)\nWe already have several versions of Hölder's inequality for the Lebesgue integral and functions with values in nnreal or ennreal. This PR introduces two versions of this inequality for the Bochner integral, one of which applies to nonnegative real functions.", "changes": [{"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["add", "theorem", "ess_sup_mul_le", ["ennreal"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "smul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_smul_le_mul_snorm", ["measure_theory"]], ["add", "theorem", "snorm_smul_le_snorm_mul_snorm_top", ["measure_theory"]], ["add", "theorem", "snorm_smul_le_snorm_top_mul_snorm", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_mul_le_Lp_mul_Lq_of_nonneg", ["measure_theory"]], ["add", "theorem", "integral_mul_norm_le_Lp_mul_Lq", ["measure_theory"]]]}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": [["add", "theorem", "limsup_mul_le", ["ennreal"]]]}]}, {"timestamp": 1662032752, "sha": "44c94be8", "message": "feat(data/finsupp/lex): lexicographic orders on finsupps and covariant classes (#16127)\nThis PR constructs a linear order on `finsupp`s where both source and target are linearly ordered. This is useful for #15983, where these linear orders help prove that (some) `add_monoid_algebra`s have no non-trivial zero-divisors.\nThe PR also proves that the lexicographic linear order on finitely supported functions preserves a few covariant class assumptions.\nAs always, comments and suggestions are really really appreciated!\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/linear.20order.20on.20finsupps)\nThis PR supersedes #15984.", "changes": [{"oldPath": null, "newPath": "src/data/finsupp/lex.lean", "changes": [["add", "theorem", "le_of_forall_le", ["finsupp", "lex"]], ["add", "theorem", "le_of_of_lex_le", ["finsupp", "lex"]], ["add", "theorem", "lex_def", ["finsupp"]], ["add", "theorem", "lt_of_forall_lt_of_lt", ["finsupp"]], ["add", "theorem", "to_lex_monotone", ["finsupp"]], ["add", "theorem", "lex_eq_finsupp_lex", ["pi"]]]}]}, {"timestamp": 1662023638, "sha": "8d90fcdb", "message": "feat(data/finset/basic): Add `coe_pair` lemmas (#16235)\nAdds `coe_pair` lemmas to go with `coe_singleton` and `coe_eq_singleton` (and fixes a couple of style issues).", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "coe_eq_pair", ["finset"]], ["mod", "theorem", "coe_eq_singleton", ["finset"]], ["add", "theorem", "coe_pair", ["finset"]], ["mod", "theorem", "cons_eq_insert", ["finset"]], ["mod", "theorem", "pair_comm", ["finset"]]]}]}, {"timestamp": 1662009037, "sha": "370cc484", "message": "chore(data/real/nnreal): Golf (#16307)\nGeneralize various lemmas to `linear_ordered_semifield` or weaker so that they apply to `nnreal`. Golf the `nnreal` API using them.", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": [["mod", "theorem", "sum_div", ["finset"]]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "two_inv_lt_one", []]]}, {"oldPath": "src/algebra/order/field_defs.lean", "newPath": "src/algebra/order/field_defs.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["del", "theorem", "le_of_forall_one_lt_le_mul", []]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "le_iff_forall_one_lt_lt_mul'", []], ["add", "theorem", "le_of_forall_one_lt_le_mul", []], ["add", "theorem", "le_of_forall_one_lt_lt_mul'", []]]}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/data/nat/choose/bounds.lean", "newPath": "src/data/nat/choose/bounds.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "add_halves", ["nnreal"]], ["mod", "theorem", "div_add_div_same", ["nnreal"]], ["mod", "theorem", "div_le_iff", ["nnreal"]], ["mod", "theorem", "div_pos", ["nnreal"]], ["mod", "theorem", "div_self_le", ["nnreal"]], ["mod", "theorem", "half_le_self", ["nnreal"]], ["mod", "theorem", "half_lt_self", ["nnreal"]], ["mod", "theorem", "half_pos", ["nnreal"]], ["mod", "theorem", "inv_lt_inv_iff", ["nnreal"]], ["mod", "theorem", "inv_lt_one", ["nnreal"]], ["mod", "theorem", "inv_pos", ["nnreal"]], ["mod", "theorem", "le_div_iff_mul_le", ["nnreal"]], ["mod", "theorem", "sub_div", ["nnreal"]], ["mod", "theorem", "two_inv_lt_one", ["nnreal"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "tendsto_const_mul_pow_at_top", ["filter"]], ["mod", "theorem", "tendsto_const_mul_pow_at_top_iff", ["filter"]]]}]}, {"timestamp": 1661987123, "sha": "616e6ef3", "message": "feat(data/sign): Allocating signs (#14335)\nA sum of integers of absolute value less than `n` can be broken up as a sum of less than `n` signs.", "changes": [{"oldPath": "src/data/sign.lean", "newPath": "src/data/sign.lean", "changes": [["add", "theorem", "exists_signed_sum'", []], ["add", "theorem", "exists_signed_sum", []], ["add", "theorem", "sign_eq_sign", ["int"]]]}]}, {"timestamp": 1661976391, "sha": "9b68ed5e", "message": "refactor(topology/algebra/continuous_monoid_hom): Make variables consistent (#16304)\nThis PR cleans up some redundant variables in `continuous_monoid_hom`.", "changes": [{"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": [["mod", "def", "to_continuous_map", ["continuous_monoid_hom"]], ["mod", "theorem", "to_continuous_map_injective", ["continuous_monoid_hom"]], ["mod", "def", "pontryagin_dual", []]]}]}, {"timestamp": 1661976390, "sha": "acbe099c", "message": "feat(*): bump to lean 3.48.0 (#16292)\n`fin n` is a structure now.", "changes": [{"oldPath": "archive/imo/imo1987_q1.lean", "newPath": "archive/imo/imo1987_q1.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": []}, {"oldPath": "src/algebra/char_zero/quotient.lean", "newPath": "src/algebra/char_zero/quotient.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/algebraic_topology/split_simplicial_object.lean", "newPath": "src/algebraic_topology/split_simplicial_object.lean", "changes": []}, {"oldPath": "src/algebraic_topology/topological_simplex.lean", "newPath": "src/algebraic_topology/topological_simplex.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/stone_separation.lean", "newPath": "src/analysis/convex/stone_separation.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/coloring.lean", "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/data/countable/defs.lean", "newPath": "src/data/countable/defs.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["mod", "def", "coe_embedding", ["fin"]], ["add", "theorem", "coe_eq_coe", ["fin"]], ["mod", "theorem", "coe_injective", ["fin"]], ["add", "def", "coe_order_embedding", ["fin"]], ["add", "def", "equiv_subtype", ["fin"]], ["add", "theorem", "equiv_subtype_symm_trans_val_embedding", ["fin"]], ["mod", "theorem", "ext_iff", ["fin"]], ["add", "theorem", "is_le'", ["fin"]], ["mod", "theorem", "is_lt", ["fin"]], ["add", "theorem", "max_coe", ["fin"]], ["add", "theorem", "min_coe", ["fin"]], ["add", "theorem", "mk_eq_mk", ["fin"]], ["del", "theorem", "mk_eq_subtype_mk", ["fin"]], ["add", "theorem", "mk_le_mk", ["fin"]], ["add", "theorem", "mk_lt_mk", ["fin"]], ["add", "def", "order_iso_subtype", ["fin"]], ["add", "theorem", "val_injective", ["fin"]]]}, {"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["mod", "theorem", "Icc_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Ici_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Ico_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Iic_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Iio_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Ioc_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Ioi_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Ioo_eq_finset_subtype", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Icc", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ici", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ico", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Iic", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Iio", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ioc", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ioi", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ioo", ["fin"]]]}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "fin_map", ["finset"]], ["add", "theorem", "fin_mono", ["finset"]], ["add", "theorem", "mem_fin", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_comp'", ["equiv"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/logic/encodable/basic.lean", "newPath": "src/logic/encodable/basic.lean", "changes": []}, {"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_abs.lean", "newPath": "src/number_theory/class_number/admissible_abs.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1661976389, "sha": "87d8c4b3", "message": "doc(measure_theory/integral): integrability docstrings (#16269)\nThis PR adds a few docstrings to make the conditions and more readable.", "changes": [{"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}]}, {"timestamp": 1661965866, "sha": "371b4143", "message": "chore(algebra/divisibility): golf (#16327)", "changes": [{"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": []}]}, {"timestamp": 1661965865, "sha": "5b7bc676", "message": "refactor(group_theory/subgroup/basic): Make `subgroup.opposite` an `equiv` (#16271)\nThere is currently no way to turn a `subgroup Gᵐᵒᵖ` into a `subgroup G`, so this PR bundles `subgroup.opposite` as an `equiv` so that now we can use `subgroup.opposite.symm`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "def", "opposite", ["subgroup"]]]}]}, {"timestamp": 1661955541, "sha": "39014ec9", "message": "feat(probability/independence): add indep_bot_left and indep_bot_right (#16309)\nProve that for any `m`, `indep m ⊥ μ`, and prove the corresponding statement with bot on the left.\nAlso declare two types as variables on top of the file and remove them from many lemmas.", "changes": [{"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["mod", "theorem", "Indep_sets", ["probability_theory", "Indep"]], ["mod", "theorem", "indep", ["probability_theory", "Indep"]], ["mod", "def", "Indep", ["probability_theory"]], ["mod", "theorem", "indep_fun", ["probability_theory", "Indep_fun"]], ["mod", "def", "Indep_fun", ["probability_theory"]], ["mod", "def", "Indep_set", ["probability_theory"]], ["mod", "theorem", "indep_sets", ["probability_theory", "Indep_sets"]], ["mod", "def", "Indep_sets", ["probability_theory"]], ["mod", "theorem", "indep_sets", ["probability_theory", "indep"]], ["mod", "theorem", "symm", ["probability_theory", "indep"]], ["mod", "def", "indep", ["probability_theory"]], ["add", "theorem", "indep_bot_left", ["probability_theory"]], ["add", "theorem", "indep_bot_right", ["probability_theory"]], ["mod", "def", "indep_fun", ["probability_theory"]], ["mod", "theorem", "indep_of_indep_of_le_left", ["probability_theory"]], ["mod", "theorem", "indep_of_indep_of_le_right", ["probability_theory"]], ["mod", "def", "indep_set", ["probability_theory"]], ["mod", "theorem", "Inter", ["probability_theory", "indep_sets"]], ["mod", "theorem", "Union", ["probability_theory", "indep_sets"]], ["mod", "theorem", "indep", ["probability_theory", "indep_sets"]], ["mod", "theorem", "inter", ["probability_theory", "indep_sets"]], ["mod", "theorem", "symm", ["probability_theory", "indep_sets"]], ["mod", "theorem", "union", ["probability_theory", "indep_sets"]], ["mod", "theorem", "union_iff", ["probability_theory", "indep_sets"]], ["mod", "def", "indep_sets", ["probability_theory"]], ["mod", "theorem", "indep_sets_of_indep_sets_of_le_left", ["probability_theory"]], ["mod", "theorem", "indep_sets_of_indep_sets_of_le_right", ["probability_theory"]], ["mod", "theorem", "indep_sets_singleton_iff", ["probability_theory"]]]}]}, {"timestamp": 1661955540, "sha": "5a3cd16b", "message": "feat(order/filter/small_sets): yet another squeeze theorem (#16286)\n* Add a very general version of the squeeze theorem.\n* Use it to golf the proof of the usual squeeze theorem.\n* Add docstrings.", "changes": [{"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": [["add", "theorem", "of_small_sets", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}]}, {"timestamp": 1661955538, "sha": "5e194d48", "message": "feat(algebra/invertible): `map_inv_of` and some other basic results (#16202)\nThe titular lemma states that under suitable conditions, `f (⅟r) = ⅟(f r)`.\nThis also provides some lemmas about left inverses, which are motivated primarily by proving `is_unit (algebra_map R (exterior_algebra R M) r) ↔ is_unit r`.", "changes": [{"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": [["add", "theorem", "of_left_inverse", ["is_unit"]], ["add", "theorem", "is_unit_map_of_left_inverse", []]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "def", "copy", ["invertible"]], ["add", "def", "of_left_inverse", ["invertible"]], ["add", "def", "invertible_equiv_of_left_inverse", []], ["add", "theorem", "map_inv_of", []]]}, {"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": [["add", "def", "invertible_algebra_map_equiv", ["exterior_algebra"]], ["add", "theorem", "is_unit_algebra_map", ["exterior_algebra"]]]}]}, {"timestamp": 1661955537, "sha": "76be8c73", "message": "chore(algebra/order/absolute_value): superficial tidying (#16190)\nThis weakens the requirements of many lemmas in this file, preparing for further changes. `is_absolute_value` is unbundled, which is an approach that is currently not favoured in mathlib.", "changes": [{"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": [["add", "theorem", "map_one_of_is_regular", ["absolute_value"]], ["mod", "theorem", "abv_div", ["is_absolute_value"]], ["add", "def", "abv_hom'", ["is_absolute_value"]], ["mod", "def", "abv_hom", ["is_absolute_value"]], ["mod", "theorem", "abv_inv", ["is_absolute_value"]], ["add", "theorem", "abv_one'", ["is_absolute_value"]], ["mod", "theorem", "abv_one", ["is_absolute_value"]], ["mod", "theorem", "abv_pos", ["is_absolute_value"]], ["mod", "theorem", "abv_zero", ["is_absolute_value"]]]}]}, {"timestamp": 1661955536, "sha": "27d83241", "message": "feat(topology/sheaves/sheaf_condition): Description of sections on the union of two open sets. (#16093)", "changes": [{"oldPath": "src/algebra/category/Ring/constructions.lean", "newPath": "src/algebra/category/Ring/constructions.lean", "changes": [["add", "def", "pullback_cone", ["CommRing"]], ["add", "def", "pullback_cone_is_limit", ["CommRing"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": [["mod", "def", "inter_union_pullback_cone_lift", ["Top", "sheaf"]], ["mod", "def", "is_product_of_disjoint", ["Top", "sheaf"]], ["add", "def", "obj_sup_iso_prod_eq_locus", ["Top", "sheaf"]], ["add", "theorem", "obj_sup_iso_prod_eq_locus_hom_fst", ["Top", "sheaf"]], ["add", "theorem", "obj_sup_iso_prod_eq_locus_hom_snd", ["Top", "sheaf"]], ["add", "theorem", "obj_sup_iso_prod_eq_locus_inv_fst", ["Top", "sheaf"]], ["add", "theorem", "obj_sup_iso_prod_eq_locus_inv_snd", ["Top", "sheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": [["add", "theorem", "eq_of_locally_eq₂", ["Top", "sheaf"]]]}]}, {"timestamp": 1661955535, "sha": "361aa777", "message": "feat(category_theory/adjunction): complete well-powered category with a coseparating set is cocomplete (#15988)\nThis corollary of the special adjoint functor theorem immediately implies that Grothendieck categories are complete, which, according to the Wikipedia article on Grothendieck categories, is \"a rather deep result\".", "changes": [{"oldPath": "src/category_theory/adjunction/adjoint_functor_theorems.lean", "newPath": "src/category_theory/adjunction/adjoint_functor_theorems.lean", "changes": [["add", "theorem", "has_colimits_of_has_limits_of_is_coseparating", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_has_colimits_of_is_separating", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": []}]}, {"timestamp": 1661946165, "sha": "865184b4", "message": "feat(linear_algebra/affine_space/finite_dimensional): `insert` lemmas (#16308)\nAdd various lemmas about adding a point to a finite-dimensional affine\nsubspace and the dimension of the span of the result.", "changes": [{"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "finite_dimensional_direction_affine_span_insert", []], ["add", "theorem", "finite_dimensional_vector_span_insert", []], ["add", "theorem", "finite_dimensional_vector_span_insert_set", []], ["add", "theorem", "finrank_vector_span_insert_le", []], ["add", "theorem", "finrank_vector_span_insert_le_set", []]]}]}, {"timestamp": 1661946164, "sha": "07190764", "message": "chore(topology/instances/rat): add `namespace rat` (#16306)", "changes": [{"oldPath": "src/topology/instances/rat.lean", "newPath": "src/topology/instances/rat.lean", "changes": [["mod", "theorem", "continuous_mul", ["rat"]], ["mod", "theorem", "totally_bounded_Icc", ["rat"]], ["mod", "theorem", "uniform_continuous_abs", ["rat"]], ["mod", "theorem", "uniform_continuous_add", ["rat"]], ["mod", "theorem", "uniform_continuous_neg", ["rat"]]]}]}, {"timestamp": 1661946163, "sha": "1e91718f", "message": "feat(logic/equiv/option): equivalence with subtypes (#16302)\nAdd an equivalence between equivalences\n```lean\n/-- Equivalences between `option α` and `β` that send `none` to `x` are equivalent to\nequivalences between `α` and `{y : β // y ≠ x}`. -/\ndef option_subtype [decidable_eq β] (x : β) :\n {e : option α ≃ β // e none = x} ≃ (α ≃ {y : β // y ≠ x}) :=\n```\nwhich can be used to give a much simpler definition of an equivalence\nin #16278.", "changes": [{"oldPath": "src/logic/equiv/option.lean", "newPath": "src/logic/equiv/option.lean", "changes": [["add", "theorem", "coe_option_subtype_apply_apply", ["equiv"]], ["add", "def", "option_subtype", ["equiv"]], ["add", "theorem", "option_subtype_apply_apply", ["equiv"]], ["add", "theorem", "option_subtype_apply_symm_apply", ["equiv"]], ["add", "theorem", "option_subtype_symm_apply_apply_coe", ["equiv"]], ["add", "theorem", "option_subtype_symm_apply_apply_none", ["equiv"]], ["add", "theorem", "option_subtype_symm_apply_apply_some", ["equiv"]], ["add", "theorem", "option_subtype_symm_apply_symm_apply", ["equiv"]]]}]}, {"timestamp": 1661946162, "sha": "d44692a8", "message": "refactor(analysis/convex/cone): move cone.lean to cone/basic.lean (#16270)\nPart of #16266 \nI intend to create another file for `proper_cone`, which for cyclic import reasons cannot be included in cone.lean.\nSo I want to move cone.lean to cone/basic.lean and create cone/proper.lean in a separate PR.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach/extension.lean", "newPath": "src/analysis/normed_space/hahn_banach/extension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach/separation.lean", "newPath": "src/analysis/normed_space/hahn_banach/separation.lean", "changes": []}]}, {"timestamp": 1661946160, "sha": "2d30ffcf", "message": "feat(algebra/gcd_monoid): `simp` lemmas for `associated (normalize x) y` (#16249)\nThe lemmas in `gcd_monoid` package `associated_normalize` and `normalize_associated` into a form suitable for `simp`. Useful e.g. for working with `normalized_factors`. The lemmas in `associated` are the `simp`-normal forms of the `normalize` lemmas, since `normalize x` is not itself in `simp`-normal form.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "associated_is_unit_mul_left_iff", []], ["add", "theorem", "associated_is_unit_mul_right_iff", []], ["add", "theorem", "associated_mul_is_unit_left_iff", []], ["add", "theorem", "associated_mul_is_unit_right_iff", []], ["add", "theorem", "associated_mul_unit_left_iff", []], ["add", "theorem", "associated_mul_unit_right_iff", []], ["add", "theorem", "associated_unit_mul_left_iff", []], ["add", "theorem", "associated_unit_mul_right_iff", []]]}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["add", "theorem", "associated_normalize_iff", []], ["add", "theorem", "normalize_associated_iff", []]]}]}, {"timestamp": 1661946159, "sha": "eaa51e72", "message": "feat(algebra/order/smul): `ordered_smul` instances for `ℕ` and `ℤ` (#16247)\nA linear ordered monoid/group has ordered scalar multiplication by `ℕ`/`ℤ`.", "changes": [{"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["add", "theorem", "mk''", ["ordered_smul"]]]}, {"oldPath": "test/positivity.lean", "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1661946158, "sha": "f951e201", "message": "feat(algebraic_topology/dold_kan): the normalized Moore complex is homotopy equivalent to the alternating face map complex (#16246)\nIn this PR, when the category `A` is abelian, we obtain the homotopy equivalence `homotopy_equiv_normalized_Moore_complex_alternating_face_map_complex` between the normalized Moore complex and the alternating face map complex of a simplicial object in `A`.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/homotopy_equivalence.lean", "changes": [["add", "def", "homotopy_P_infty_to_id", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "homotopy_P_to_id_eventually_constant", ["algebraic_topology", "dold_kan"]], ["add", "def", "homotopy_Q_to_zero", ["algebraic_topology", "dold_kan"]], ["add", "def", "homotopy_equiv_normalized_Moore_complex_alternating_face_map_complex", ["algebraic_topology", "dold_kan"]]]}]}, {"timestamp": 1661946157, "sha": "9e274549", "message": "feat(algebra/category/Module/change_of_rings): extension of scalars (#15673)\nGiven a ring homomorphism $f : R \\to S$ between commutative rings, the extension of scalars functor from $R$-module to $S$-module. In #15564 it will proven that extension of scalars $\\dashv$ restriction of scalars", "changes": [{"oldPath": "src/algebra/category/Module/change_of_rings.lean", "newPath": "src/algebra/category/Module/change_of_rings.lean", "changes": [["add", "def", "map'", ["category_theory", "Module", "extend_scalars"]], ["add", "theorem", "map'_comp", ["category_theory", "Module", "extend_scalars"]], ["add", "theorem", "map'_id", ["category_theory", "Module", "extend_scalars"]], ["add", "theorem", "map_tmul", ["category_theory", "Module", "extend_scalars"]], ["add", "def", "obj'", ["category_theory", "Module", "extend_scalars"]], ["add", "def", "extend_scalars", ["category_theory", "Module"]]]}]}, {"timestamp": 1661935493, "sha": "f84386d7", "message": "chore(algebra/regular/basic): clean up variables and slight golf (#16321)\nRe-organize variables in the file, so that typeclass assumptions appear earlier.\nAlso, golf two proofs and remove two unneeded `@`.", "changes": [{"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": [["mod", "def", "is_left_regular", []], ["mod", "def", "is_right_regular", []]]}]}, {"timestamp": 1661935491, "sha": "17ff82d9", "message": "feat(topology/instances/ennreal): `ennreal.to_nnreal` applied to a `tsum` (#16320)\nIf a function is finite for all inputs, then `to_nnreal` applied to the sum is the sum of `to_nnreal` applied to the values.", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tsum_to_nnreal_eq", ["ennreal"]], ["mod", "theorem", "tsum_to_real_eq", ["ennreal"]]]}]}, {"timestamp": 1661935490, "sha": "b35461b8", "message": "feat(logic/basic): `function.mt` and `function.mtr` (#16315)\nAdd modus tollens and reversed modus tollens to the `function` namespace so that they are available for dot notation on implications.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1661935489, "sha": "6a68f86a", "message": "chore(topology/algebra/order/basic): deduplicate (#16287)\nPrimed and non-primed versions of 2 lemmas were almost defeq. Merge them.", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["del", "theorem", "mem_nhds_within_Ici_iff_exists_Icc_subset'", []], ["del", "theorem", "mem_nhds_within_Iic_iff_exists_Icc_subset'", []]]}]}, {"timestamp": 1661935488, "sha": "386acbac", "message": "feat(order/locally_finite): transfer locally_finite_order across order_iso (#16264)", "changes": [{"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "def", "locally_finite_order", ["order_iso"]], ["add", "def", "locally_finite_order_bot", ["order_iso"]], ["add", "def", "locally_finite_order_top", ["order_iso"]]]}]}, {"timestamp": 1661935486, "sha": "70c48638", "message": "feat(data/finset/locally_finite): more on `filter (< c)` (#16260)", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Icc_filter_lt_of_lt_right", ["finset"]], ["add", "theorem", "Iic_filter_lt_of_lt_right", ["finset"]], ["add", "theorem", "Iio_filter_lt", ["finset"]], ["add", "theorem", "Ioc_filter_lt_of_lt_right", ["finset"]], ["add", "theorem", "Ioo_filter_lt", ["finset"]]]}]}, {"timestamp": 1661928931, "sha": "20cfd341", "message": "refactor(algebra/monoid_algebra/{ basic + support } + import dust): move lemmas to a new \"support\" file (#16322)\nThis PR moves some lemmas from `algebra/monoid_algebra/basic` to the new file `algebra/monoid_algebra/support`.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/splitting.20support.20from.20algebra.2Fmonoid_algebra.2Fbasic)", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["del", "theorem", "mem_span_support'", ["add_monoid_algebra"]], ["del", "theorem", "mem_span_support", ["add_monoid_algebra"]], ["del", "theorem", "support_mul", ["add_monoid_algebra"]], ["del", "theorem", "support_mul_single", ["add_monoid_algebra"]], ["del", "theorem", "support_single_mul", ["add_monoid_algebra"]], ["del", "theorem", "mem_span_support", ["monoid_algebra"]], ["del", "theorem", "support_mul", ["monoid_algebra"]], ["del", "theorem", "support_mul_single", ["monoid_algebra"]], ["del", "theorem", "support_single_mul", ["monoid_algebra"]]]}, {"oldPath": "src/algebra/monoid_algebra/degree.lean", "newPath": "src/algebra/monoid_algebra/degree.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/monoid_algebra/support.lean", "changes": [["add", "theorem", "mem_span_support'", ["add_monoid_algebra"]], ["add", "theorem", "mem_span_support", ["add_monoid_algebra"]], ["add", "theorem", "support_mul", ["add_monoid_algebra"]], ["add", "theorem", "support_mul_single", ["add_monoid_algebra"]], ["add", "theorem", "support_single_mul", ["add_monoid_algebra"]], ["add", "theorem", "mem_span_support", ["monoid_algebra"]], ["add", "theorem", "support_mul", ["monoid_algebra"]], ["add", "theorem", "support_mul_single", ["monoid_algebra"]], ["add", "theorem", "support_single_mul", ["monoid_algebra"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1661928929, "sha": "489c1c57", "message": "feat(analysis/complex/basic): add `complex.ring_hom_eq_id_or_conj_of_continuous` (#16169)\nWe prove that the only continuous ring homorphism from $\\mathbb{C}$ to $\\mathbb{C}$ are the identity and the complex conjugation. \nWe deduce the result from a first lemma that gives the same conclusion for the $\\mathbb{R}$-algebra homomorphisms from $\\mathbb{C}$ to $\\mathbb{C}$.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "ring_hom_eq_id_or_conj_of_continuous", ["complex"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "theorem", "real_alg_hom_eq_id_or_conj", ["complex"]]]}]}, {"timestamp": 1661922856, "sha": "f5da0822", "message": "feat(order/filter/basic): add `eventually_le.add_le_add` (#16295)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "mul_le_mul'", ["filter", "eventually_le"]], ["mod", "theorem", "mul_le_mul", ["filter", "eventually_le"]]]}]}, {"timestamp": 1661918761, "sha": "5083718c", "message": "chore(scripts): update nolints.txt (#16323)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1661912086, "sha": "13618c1c", "message": "chore(.github/workflows): increase olean generation timeout (#15784)\nWe are currently experiencing timeouts when saving some oleans (leanprover-community/lean#749). Since Lean does not error out when deterministic timeouts happen during olean generation (leanprover-community/lean#750) and we already run Lean twice when compiling mathlib, Ben Toner suggested the following clever hack: Increase the timeout, but only on the second lean run. This effectively means anything that was reported as a timeout before is still reported as a timeout (by the first call), while olean generation gets more heartbeats.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1661908003, "sha": "fe5e4ce6", "message": "feat(category_theory/limits): (co)limits in full subcategories (#16188)", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "def", "creates_colimit_of_fully_faithful_of_iso'", ["category_theory"]], ["add", "def", "creates_colimit_of_fully_faithful_of_lift'", ["category_theory"]], ["add", "def", "creates_limit_of_fully_faithful_of_iso'", ["category_theory"]], ["add", "def", "creates_limit_of_fully_faithful_of_lift'", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/full_subcategory.lean", "changes": [["add", "theorem", "colimit", ["category_theory", "limits", "closed_under_colimits_of_shape"]], ["add", "def", "closed_under_colimits_of_shape", ["category_theory", "limits"]], ["add", "theorem", "limit", ["category_theory", "limits", "closed_under_limits_of_shape"]], ["add", "def", "closed_under_limits_of_shape", ["category_theory", "limits"]], ["add", "def", "creates_colimit_full_subcategory_inclusion'", ["category_theory", "limits"]], ["add", "def", "creates_colimit_full_subcategory_inclusion", ["category_theory", "limits"]], ["add", "def", "creates_colimit_full_subcategory_inclusion_of_closed", ["category_theory", "limits"]], ["add", "def", "creates_colimits_of_shape_full_subcategory_inclusion", ["category_theory", "limits"]], ["add", "def", "creates_limit_full_subcategory_inclusion'", ["category_theory", "limits"]], ["add", "def", "creates_limit_full_subcategory_inclusion", ["category_theory", "limits"]], ["add", "def", "creates_limit_full_subcategory_inclusion_of_closed", ["category_theory", "limits"]], ["add", "def", "creates_limits_of_shape_full_subcategory_inclusion", ["category_theory", "limits"]], ["add", "theorem", "has_colimit_of_closed_under_colimits", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_of_shape_of_closed_under_colimits", ["category_theory", "limits"]], ["add", "theorem", "has_limit_of_closed_under_limits", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_shape_of_closed_under_limits", ["category_theory", "limits"]]]}]}, {"timestamp": 1661877862, "sha": "002aa517", "message": "feat(probability/hitting_time): add some hitting time lemmas (#16296)", "changes": [{"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/hitting_time.lean", "changes": [["add", "theorem", "hitting_eq_end_iff", ["measure_theory"]], ["add", "theorem", "hitting_mem_set_of_hitting_lt", ["measure_theory"]], ["add", "theorem", "hitting_mono", ["measure_theory"]], ["add", "theorem", "hitting_of_le", ["measure_theory"]], ["add", "theorem", "not_mem_of_lt_hitting", ["measure_theory"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "stopped_process_eq'", ["measure_theory"]]]}]}, {"timestamp": 1661877861, "sha": "1da31fac", "message": "feat(data/polynomial/derivative): add more lemmas (#16139)", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "derivative_X_add_pow", ["polynomial"]], ["add", "theorem", "derivative_X_sub_pow", ["polynomial"]], ["add", "theorem", "derivative_int_cast", ["polynomial"]], ["add", "theorem", "derivative_int_cast_mul", ["polynomial"]], ["add", "theorem", "derivative_nat_cast_mul", ["polynomial"]], ["add", "theorem", "dvd_iterate_derivative_pow", ["polynomial"]], ["add", "theorem", "iterate_derivative_X_add_pow", ["polynomial"]], ["add", "theorem", "iterate_derivative_X_pow_eq_C_mul", ["polynomial"]], ["add", "theorem", "iterate_derivative_X_pow_eq_nat_cast_mul", ["polynomial"]], ["add", "theorem", "iterate_derivative_X_pow_eq_smul", ["polynomial"]], ["add", "theorem", "iterate_derivative_X_sub_pow", ["polynomial"]], ["add", "theorem", "iterate_derivative_int_cast_mul", ["polynomial"]]]}]}, {"timestamp": 1661867671, "sha": "d003c550", "message": "chore(analysis, measure_theory): Fix lint (#16216)\nSatisfy the `fintype_finite` and `to_additive_doc` linters. Further, perform the similar weakening from `encodable` to `countable`, even though that's not yet linted for. The advantage of this is that `finite α → countable α` in known to TC inference, while `fintype α → encodable α` is not (because it's noncanonical data).\nAs a result, some lemmas that were proved for both `fintype` and `encodable` are now deduplicated.", "changes": [{"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": [["mod", "theorem", "Union_Ioo_of_tendsto", ["box_integral", "box"]]]}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": [["mod", "theorem", "sum_boxes_congr", ["box_integral", "box_additive_map"]]]}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": [["mod", "theorem", "measurable_set_Ioo", ["box_integral", "box"]], ["mod", "theorem", "measure_Icc_lt_top", ["box_integral", "box"]], ["mod", "theorem", "measure_coe_lt_top", ["box_integral", "box"]], ["mod", "theorem", "measure_Union_to_real", ["box_integral", "prepartition"]]]}, {"oldPath": "src/analysis/box_integral/partition/split.lean", "newPath": "src/analysis/box_integral/partition/split.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": [["mod", "theorem", "linear_dependent_of_has_strict_fderiv_at", ["is_local_extr_on"]]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "pi", ["unique_diff_on"]], ["mod", "theorem", "univ_pi", ["unique_diff_on"]], ["mod", "theorem", "pi", ["unique_diff_within_at"]], ["mod", "theorem", "univ_pi", ["unique_diff_within_at"]]]}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["mod", "theorem", "interior_convex_hull_aff_basis", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["mod", "theorem", "exists_op_nnnorm_le", ["basis"]], ["mod", "theorem", "exists_op_norm_le", ["basis"]], ["mod", "theorem", "is_open_set_of_linear_independent", []]]}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": [["add", "theorem", "exists_pos_sum_of_countable'", ["ennreal"]], ["add", "theorem", "exists_pos_sum_of_countable", ["ennreal"]], ["del", "theorem", "exists_pos_sum_of_encodable'", ["ennreal"]], ["del", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["add", "theorem", "exists_pos_tsum_mul_lt_of_countable", ["ennreal"]], ["del", "theorem", "exists_pos_tsum_mul_lt_of_encodable", ["ennreal"]], ["add", "theorem", "exists_pos_sum_of_countable", ["nnreal"]], ["del", "theorem", "exists_pos_sum_of_encodable", ["nnreal"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "countable_coe_iff", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_plift_down", ["set"]], ["add", "theorem", "Inter_plift_up", ["set"]], ["add", "theorem", "Union_plift_down", ["set"]], ["add", "theorem", "Union_plift_up", ["set"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "of_finset_basis", ["finite_dimensional"]], ["mod", "theorem", "of_fintype_basis", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["mod", "theorem", "supr_map_single", ["submodule"]]]}, {"oldPath": "src/logic/encodable/basic.lean", "newPath": "src/logic/encodable/basic.lean", "changes": [["add", "theorem", "nonempty_encodable", []]]}, {"oldPath": "src/logic/encodable/lattice.lean", "newPath": "src/logic/encodable/lattice.lean", "changes": [["del", "theorem", "nonempty_encodable", ["finset"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "ennreal_tsum", ["ae_measurable"]], ["mod", "theorem", "is_glb", ["ae_measurable"]], ["mod", "theorem", "is_lub", ["ae_measurable"]], ["mod", "theorem", "ae_measurable_infi", []], ["mod", "theorem", "ae_measurable_of_tendsto_metrizable_ae", []], ["mod", "theorem", "ae_measurable_supr", []], ["add", "theorem", "borel_eq_top_of_countable", []], ["del", "theorem", "borel_eq_top_of_encodable", []], ["mod", "theorem", "ennreal_tsum'", ["measurable"]], ["mod", "theorem", "ennreal_tsum", ["measurable"]], ["mod", "theorem", "is_glb", ["measurable"]], ["mod", "theorem", "is_lub", ["measurable"]], ["mod", "theorem", "nnreal_tsum", ["measurable"]], ["mod", "theorem", "measurable_infi", []], ["mod", "theorem", "measurable_limit_of_tendsto_metrizable_ae", []], ["mod", "theorem", "measurable_supr", []]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": [["mod", "theorem", "Inter", ["measure_theory", "analytic_set"]], ["mod", "theorem", "Union", ["measure_theory", "analytic_set"]], ["mod", "theorem", "Union", ["measure_theory", "measurably_separable"]]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["mod", "theorem", "prod_sum", ["measure_theory", "measure"]], ["mod", "theorem", "sum_prod", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_order.lean", "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_sequence.lean", "newPath": "src/measure_theory/function/ae_measurable_sequence.lean", "changes": [["mod", "theorem", "ae_seq_eq_fun_ae", ["ae_seq"]], ["mod", "theorem", "ae_seq_eq_mk_ae", ["ae_seq"]], ["mod", "theorem", "ae_seq_n_eq_fun_n_ae", ["ae_seq"]], ["mod", "theorem", "measure_compl_ae_seq_set_eq_zero", ["ae_seq"]], ["mod", "theorem", "supr", ["ae_seq"]]]}, {"oldPath": "src/measure_theory/function/egorov.lean", "newPath": "src/measure_theory/function/egorov.lean", "changes": [["mod", "theorem", "measure_not_convergent_seq_tendsto_zero", ["measure_theory", "egorov"]], ["mod", "theorem", "not_convergent_seq_measurable_set", ["measure_theory", "egorov"]]]}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["mod", "theorem", "ess_sup_liminf_le", ["ennreal"]]]}, {"oldPath": "src/measure_theory/function/floor.lean", "newPath": "src/measure_theory/function/floor.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "snorm_exponent_top_lim_le_liminf_snorm_exponent_top", ["measure_theory", "Lp"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["add", "theorem", "measurable_set_eq_fun_of_countable", []], ["del", "theorem", "measurable_set_eq_fun_of_encodable", []]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "has_sum_integral_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["mod", "theorem", "integrable_on_finite_Union", ["measure_theory"]], ["add", "theorem", "integrable_on_finite_bUnion", ["measure_theory"]], ["del", "theorem", "integrable_on_fintype_Union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "has_sum_integral_of_dominated_convergence", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "lintegral_Union", ["measure_theory"]], ["mod", "theorem", "lintegral_Union_le", ["measure_theory"]], ["mod", "theorem", "lintegral_Union₀", ["measure_theory"]], ["add", "theorem", "lintegral_countable'", ["measure_theory"]], ["del", "theorem", "lintegral_encodable", ["measure_theory"]], ["mod", "theorem", "lintegral_supr_directed", ["measure_theory"]], ["mod", "theorem", "lintegral_tsum", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "has_sum_integral_Union", ["measure_theory"]], ["mod", "theorem", "has_sum_integral_Union_ae", ["measure_theory"]], ["mod", "theorem", "integral_Union", ["measure_theory"]], ["mod", "theorem", "integral_Union_ae", ["measure_theory"]], ["mod", "theorem", "tendsto_set_integral_of_monotone", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_from_prod_countable", []], ["del", "theorem", "measurable_from_prod_encodable", []], ["add", "theorem", "measurable_of_finite", []], ["del", "theorem", "measurable_of_fintype", []], ["del", "theorem", "pi_fintype", ["measurable_set"]], ["mod", "theorem", "univ_pi", ["measurable_set"]], ["del", "theorem", "univ_pi_fintype", ["measurable_set"]], ["add", "theorem", "measurable_to_countable", []], ["del", "theorem", "measurable_to_encodable", []]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["mod", "theorem", "Inter", ["measurable_set"]], ["del", "theorem", "Inter_Prop", ["measurable_set"]], ["del", "theorem", "Inter_fintype", ["measurable_set"]], ["mod", "theorem", "Union", ["measurable_set"]], ["del", "theorem", "Union_Prop", ["measurable_set"]], ["del", "theorem", "Union_fintype", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": [["mod", "theorem", "Union_left_iff", ["measure_theory", "ae_disjoint"]], ["mod", "theorem", "Union_right_iff", ["measure_theory", "ae_disjoint"]], ["mod", "theorem", "exists_null_pairwise_disjoint_diff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": [["mod", "theorem", "sum_measure", ["ae_measurable"]], ["mod", "theorem", "ae_measurable_Union_iff", []], ["mod", "theorem", "ae_measurable_sum_measure_iff", []]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_quotient.lean", "newPath": "src/measure_theory/measure/haar_quotient.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["mod", "theorem", "hausdorff_measure_le_liminf_tsum", ["measure_theory", "measure"]], ["mod", "theorem", "mk_metric_le_liminf_tsum", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_restrict_Union_eq", ["measure_theory"]], ["mod", "theorem", "exists_pos_measure_of_cover", ["measure_theory"]], ["mod", "theorem", "ae_sum_eq", ["measure_theory", "measure"]], ["mod", "theorem", "ae_sum_iff", ["measure_theory", "measure"]], ["mod", "theorem", "ext_iff_of_Union_eq_univ", ["measure_theory", "measure"]], ["mod", "theorem", "map_eq_sum", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_ae", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_apply_ae", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_apply_eq_supr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_le", ["measure_theory", "measure"]], ["mod", "theorem", "sum_apply_eq_zero", ["measure_theory", "measure"]], ["mod", "theorem", "sum_smul_dirac", ["measure_theory", "measure"]], ["mod", "theorem", "measure_Inter_eq_infi", ["measure_theory"]], ["mod", "theorem", "measure_Union_congr_of_subset", ["measure_theory"]], ["mod", "theorem", "measure_Union_eq_supr", ["measure_theory"]], ["mod", "theorem", "measure_Union_to_measurable", ["measure_theory"]], ["mod", "theorem", "tendsto_measure_Inter", ["measure_theory"]], ["mod", "theorem", "tendsto_measure_Union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["mod", "theorem", "ae_all_iff", ["measure_theory"]], ["del", "theorem", "ae_imp_iff", ["measure_theory"]], ["mod", "theorem", "exists_measurable_superset_forall_eq", ["measure_theory"]], ["mod", "theorem", "exists_measure_pos_of_not_measure_Union_null", ["measure_theory"]], ["mod", "theorem", "measure_Union_le", ["measure_theory"]], ["mod", "theorem", "measure_Union_null", ["measure_theory"]], ["mod", "theorem", "measure_Union_null_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/mutually_singular.lean", "newPath": "src/measure_theory/measure/mutually_singular.lean", "changes": [["mod", "theorem", "sum_left", ["measure_theory", "measure", "mutually_singular"]], ["mod", "theorem", "sum_right", ["measure_theory", "measure", "mutually_singular"]]]}, {"oldPath": "src/measure_theory/measure/null_measurable.lean", "newPath": "src/measure_theory/measure/null_measurable.lean", "changes": [["mod", "theorem", "exists_subordinate_pairwise_disjoint", ["measure_theory"]], ["mod", "theorem", "measure_Union", ["measure_theory"]], ["mod", "theorem", "measure_Union₀", ["measure_theory"]], ["del", "theorem", "Inter_Prop", ["measure_theory", "null_measurable_set"]], ["del", "theorem", "Inter_fintype", ["measure_theory", "null_measurable_set"]], ["del", "theorem", "Union_Prop", ["measure_theory", "null_measurable_set"]], ["del", "theorem", "Union_fintype", ["measure_theory", "null_measurable_set"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["mod", "theorem", "extend_Union", ["measure_theory"]], ["mod", "theorem", "Union_null", ["measure_theory", "outer_measure"]], ["mod", "theorem", "Union_null_iff", ["measure_theory", "outer_measure"]], ["mod", "theorem", "exists_measurable_superset_forall_eq_trim", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_supr", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["mod", "theorem", "has_sum_of_disjoint_Union", ["measure_theory", "vector_measure"]], ["mod", "theorem", "of_disjoint_Union", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_restrict_countable_Union", ["measure_theory", "vector_measure"]], ["del", "theorem", "restrict_le_restrict_encodable_Union", ["measure_theory", "vector_measure"]]]}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": [["mod", "theorem", "has_Union", ["measurable_space", "dynkin_system"]]]}, {"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_plift_down", []], ["add", "theorem", "infi_plift_up", []], ["add", "theorem", "supr_plift_down", []], ["add", "theorem", "supr_plift_up", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "at_bot_countable_basis", ["filter"]], ["mod", "theorem", "at_top_countable_basis", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "is_countably_generated_seq", ["filter"]]]}, {"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": [["mod", "theorem", "countable_Inter_mem", []], ["mod", "theorem", "countable_bInter_mem", []], ["mod", "theorem", "eventually_countable_ball", []], ["mod", "theorem", "eventually_countable_forall", []], ["mod", "theorem", "countable_Inter", ["eventually_eq"]], ["mod", "theorem", "countable_Union", ["eventually_eq"]], ["mod", "theorem", "countable_bInter", ["eventually_eq"]], ["mod", "theorem", "countable_bUnion", ["eventually_eq"]], ["mod", "theorem", "countable_Inter", ["eventually_le"]], ["mod", "theorem", "countable_Union", ["eventually_le"]], ["mod", "theorem", "countable_bInter", ["eventually_le"]], ["mod", "theorem", "countable_bUnion", ["eventually_le"]]]}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": [["mod", "theorem", "limsup_liminf_le_liminf_limsup", ["ennreal"]]]}, {"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/hitting_time.lean", "changes": []}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "measurable_set_eq_stopping_time_of_countable", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "measurable_set_eq_stopping_time_of_encodable", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_space_le_of_encodable", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "is_stopping_time_of_measurable_set_eq", ["measure_theory"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "fg_pi", ["submodule"]], ["mod", "theorem", "fg_supr", ["submodule"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["mod", "theorem", "is_separable_Union", ["topological_space"]], ["mod", "theorem", "separable_space_of_dense_range", ["topological_space"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/polish.lean", "newPath": "src/topology/metric_space/polish.lean", "changes": [["mod", "theorem", "exists_polish_space_forall_le", ["polish_space"]]]}]}, {"timestamp": 1661857683, "sha": "3d7987cd", "message": "chore(*): bump to lean 3.47.0 (#16252)\nA major change is that notations now require names when they are shadowing another identical notation, even if it is a local notation. Also, because localized notations can be imported in a variety of contexts, there are some new best practices for them:\n* localized notations should always have a `(name := ...)`. Notation names are unrelated to declaration names, but the declaration name is a reasonable base for the notation name.\n* localized notations should never use `_` in the notation, because this gets desugared to a unique metavariable index, meaning that the notation will not be recognized as a duplicate of itself if `open_locale` is used when the notation is already available. Instead, you should use the `hole!` notation, which unfolds to `_`.\nAnother major change is that projection notation (`x.foo`) now always instantiates implicit arguments with metavariables, which is consistent with Lean 4. To simulate the older behavior, one can use either strict implicit arguments for the structure field (e.g. `∀ {{n}}, p n` instead of `∀ {n}, p n`) or, depending on specifics, writing `λ _, x.foo` to ensure the implicit argument is preserved as an argument.", "changes": [{"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/dual_number.lean", "newPath": "src/algebra/dual_number.lean", "changes": []}, {"oldPath": "src/algebra/hom/freiman.lean", "newPath": "src/algebra/hom/freiman.lean", "changes": []}, {"oldPath": "src/algebra/hom/group_action.lean", "newPath": "src/algebra/hom/group_action.lean", "changes": []}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule/basic.lean", "newPath": "src/algebra/module/submodule/basic.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/hom/ring.lean", "newPath": "src/algebra/order/hom/ring.lean", "changes": [["mod", "def", "to_order_iso", ["order_ring_iso"]]]}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/notations.lean", "newPath": "src/algebraic_topology/dold_kan/notations.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/basic.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/basic.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": []}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/segment.lean", "newPath": "src/analysis/convex/segment.lean", "changes": []}, {"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/basic.lean", "newPath": "src/category_theory/bicategory/basic.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/coherence.lean", "newPath": "src/category_theory/bicategory/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/coherence_tactic.lean", "newPath": "src/category_theory/bicategory/coherence_tactic.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/free.lean", "newPath": "src/category_theory/bicategory/free.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/functor.lean", "newPath": "src/category_theory/bicategory/functor.lean", "changes": [["mod", "theorem", "to_prelax_functor_map", ["category_theory", "oplax_functor"]], ["mod", "theorem", "to_prelax_functor_map₂", ["category_theory", "oplax_functor"]], ["mod", "theorem", "to_prefunctor_map", ["category_theory", "prelax_functor"]], ["mod", "theorem", "to_oplax_map", ["category_theory", "pseudofunctor"]], ["mod", "theorem", "to_oplax_map₂", ["category_theory", "pseudofunctor"]], ["mod", "theorem", "to_prelax_functor_map", ["category_theory", "pseudofunctor"]], ["mod", "theorem", "to_prelax_functor_map₂", ["category_theory", "pseudofunctor"]]]}, {"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": []}, {"oldPath": "src/category_theory/enriched/basic.lean", "newPath": "src/category_theory/enriched/basic.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/rigid/basic.lean", "newPath": "src/category_theory/monoidal/rigid/basic.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}, {"oldPath": "src/combinatorics/set_family/compression/down.lean", "newPath": "src/combinatorics/set_family/compression/down.lean", "changes": []}, {"oldPath": "src/combinatorics/set_family/compression/uv.lean", "newPath": "src/combinatorics/set_family/compression/uv.lean", "changes": []}, {"oldPath": "src/combinatorics/set_family/shadow.lean", "newPath": "src/combinatorics/set_family/shadow.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/prod.lean", "newPath": "src/combinatorics/simple_graph/prod.lean", "changes": [["mod", "def", "of_box_prod_left", ["simple_graph", "walk"]], ["mod", "theorem", "of_box_prod_left_box_prod_left", ["simple_graph", "walk"]], ["mod", "theorem", "of_box_prod_left_box_prod_right", ["simple_graph", "walk"]], ["mod", "def", "of_box_prod_right", ["simple_graph", "walk"]]]}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": []}, {"oldPath": "src/control/functor/multivariate.lean", "newPath": "src/control/functor/multivariate.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": [["mod", "theorem", "preserves_pure", ["applicative_transformation"]], ["mod", "theorem", "preserves_seq", ["applicative_transformation"]]]}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": []}, {"oldPath": "src/data/finset/slice.lean", "newPath": "src/data/finset/slice.lean", "changes": []}, {"oldPath": "src/data/fintype/card_embedding.lean", "newPath": "src/data/fintype/card_embedding.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/dmatrix.lean", "newPath": "src/data/matrix/dmatrix.lean", "changes": []}, {"oldPath": "src/data/matrix/hadamard.lean", "newPath": "src/data/matrix/hadamard.lean", "changes": []}, {"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": []}, {"oldPath": "src/data/multiset/bind.lean", "newPath": "src/data/multiset/bind.lean", "changes": []}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": []}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": []}, {"oldPath": "src/data/stream/defs.lean", "newPath": "src/data/stream/defs.lean", "changes": []}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": []}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": []}, {"oldPath": "src/data/vector3.lean", "newPath": "src/data/vector3.lean", "changes": []}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": [["mod", "theorem", "to_is_add_group_hom", ["is_ring_hom"]]]}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": [["mod", "theorem", "is_submonoid", ["submonoid"]], ["mod", "def", "of", ["submonoid"]]]}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/group_theory/subsemigroup/basic.lean", "newPath": "src/group_theory/subsemigroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/subsemigroup/operations.lean", "newPath": "src/group_theory/subsemigroup/operations.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/cross_product.lean", "newPath": "src/linear_algebra/cross_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_power.lean", "newPath": "src/linear_algebra/tensor_power.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/mutually_singular.lean", "newPath": "src/measure_theory/measure/mutually_singular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": []}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": []}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": []}, {"oldPath": "src/model_theory/skolem.lean", "newPath": "src/model_theory/skolem.lean", "changes": []}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/number_theory/modular_forms/slash_actions.lean", "newPath": "src/number_theory/modular_forms/slash_actions.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/number_theory/prime_counting.lean", "newPath": "src/number_theory/prime_counting.lean", "changes": []}, {"oldPath": "src/number_theory/von_mangoldt.lean", "newPath": "src/number_theory/von_mangoldt.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/prod.lean", "newPath": "src/order/filter/prod.lean", "changes": []}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}, {"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "map_rel_iff", ["rel_embedding"]], ["mod", "theorem", "map_rel_iff", ["rel_iso"]]]}, {"oldPath": "src/probability/conditional_probability.lean", "newPath": "src/probability/conditional_probability.lean", "changes": []}, {"oldPath": "src/probability/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}, {"oldPath": "src/probability/variance.lean", "newPath": "src/probability/variance.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "mem_or_mem", ["ideal", "is_prime"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/num_denom.lean", "newPath": "src/ring_theory/localization/num_denom.lean", "changes": [["mod", "theorem", "num_denom_reduced", ["is_fraction_ring"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["mod", "theorem", "is_weakly_eisenstein_at", ["polynomial", "is_eisenstein_at"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/fixed_point.lean", "newPath": "src/set_theory/ordinal/fixed_point.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}, {"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": []}, {"oldPath": "src/tactic/converter/apply_congr.lean", "newPath": "src/tactic/converter/apply_congr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/generalize_proofs.lean", "newPath": "src/tactic/generalize_proofs.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}, {"oldPath": "src/topology/homotopy/equiv.lean", "newPath": "src/topology/homotopy/equiv.lean", "changes": []}, {"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": []}, {"oldPath": "test/induction.lean", "newPath": "test/induction.lean", "changes": []}, {"oldPath": "test/localized/localized.lean", "newPath": "test/localized/localized.lean", "changes": []}, {"oldPath": "test/noncomm_ring.lean", "newPath": "test/noncomm_ring.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}, {"oldPath": "test/to_additive.lean", "newPath": "test/to_additive.lean", "changes": []}]}, {"timestamp": 1661851581, "sha": "fbfe26dc", "message": "feat(linear_algebra/finite_dimensional): `dim_add_le_dim_add_dim` (#16301)\nAdd a `finrank` version of a lemma that already exists for\n`module.rank`. The proof is exactly the same as the proof of the\n`module.rank` version, and, as with the previous\n`dim_sup_add_dim_inf_eq` lemma that it uses, so is the name (but in\nthe `submodule` namespace in the case of the `finrank` versions).", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "dim_add_le_dim_add_dim", ["submodule"]]]}]}, {"timestamp": 1661851580, "sha": "86e93623", "message": "feat(algebraic_topology): the category simplicial_object.split (#16274)\nThis PR introduces the category of simplicial objects equipped with a splitting.", "changes": [{"oldPath": "src/algebraic_topology/split_simplicial_object.lean", "newPath": "src/algebraic_topology/split_simplicial_object.lean", "changes": [["add", "theorem", "comp_F", ["simplicial_object", "split"]], ["add", "theorem", "comp_f", ["simplicial_object", "split"]], ["add", "theorem", "congr_F", ["simplicial_object", "split"]], ["add", "theorem", "congr_f", ["simplicial_object", "split"]], ["add", "def", "eval_N", ["simplicial_object", "split"]], ["add", "def", "forget", ["simplicial_object", "split"]], ["add", "theorem", "ext", ["simplicial_object", "split", "hom"]], ["add", "structure", "hom", ["simplicial_object", "split"]], ["add", "theorem", "id_F", ["simplicial_object", "split"]], ["add", "theorem", "id_f", ["simplicial_object", "split"]], ["add", "def", "mk'", ["simplicial_object", "split"]], ["add", "def", "nat_trans_ι_summand", ["simplicial_object", "split"]], ["add", "theorem", "ι_summand_naturality_symm", ["simplicial_object", "split"]], ["add", "structure", "split", ["simplicial_object"]], ["add", "def", "of_iso", ["simplicial_object", "splitting"]]]}]}, {"timestamp": 1661848686, "sha": "c82fab81", "message": "feat(category_theory/adjunction): the Special Adjoint Functor Theorem (#15987)", "changes": [{"oldPath": "src/category_theory/adjunction/adjoint_functor_theorems.lean", "newPath": "src/category_theory/adjunction/adjoint_functor_theorems.lean", "changes": []}]}, {"timestamp": 1661842536, "sha": "ed231516", "message": "feat(data/list/rdrop): drop or take from the right (#15475)", "changes": [{"oldPath": null, "newPath": "src/data/list/rdrop.lean", "changes": [["add", "theorem", "drop_while_eq_self_iff", ["list"]], ["add", "theorem", "drop_while_idempotent", ["list"]], ["add", "theorem", "mem_rtake_while_imp", ["list"]], ["add", "def", "rdrop", ["list"]], ["add", "theorem", "rdrop_concat_succ", ["list"]], ["add", "theorem", "rdrop_eq_reverse_drop_reverse", ["list"]], ["add", "theorem", "rdrop_nil", ["list"]], ["add", "def", "rdrop_while", ["list"]], ["add", "theorem", "rdrop_while_concat", ["list"]], ["add", "theorem", "rdrop_while_concat_neg", ["list"]], ["add", "theorem", "rdrop_while_concat_pos", ["list"]], ["add", "theorem", "rdrop_while_eq_nil_iff", ["list"]], ["add", "theorem", "rdrop_while_eq_self_iff", ["list"]], ["add", "theorem", "rdrop_while_idempotent", ["list"]], ["add", "theorem", "rdrop_while_last_not", ["list"]], ["add", "theorem", "rdrop_while_nil", ["list"]], ["add", "theorem", "rdrop_while_prefix", ["list"]], ["add", "theorem", "rdrop_while_singleton", ["list"]], ["add", "theorem", "rdrop_zero", ["list"]], ["add", "def", "rtake", ["list"]], ["add", "theorem", "rtake_concat_succ", ["list"]], ["add", "theorem", "rtake_eq_reverse_take_reverse", ["list"]], ["add", "theorem", "rtake_nil", ["list"]], ["add", "def", "rtake_while", ["list"]], ["add", "theorem", "rtake_while_concat", ["list"]], ["add", "theorem", "rtake_while_concat_neg", ["list"]], ["add", "theorem", "rtake_while_concat_pos", ["list"]], ["add", "theorem", "rtake_while_eq_nil_iff", ["list"]], ["add", "theorem", "rtake_while_eq_self_iff", ["list"]], ["add", "theorem", "rtake_while_idempotent", ["list"]], ["add", "theorem", "rtake_while_nil", ["list"]], ["add", "theorem", "rtake_while_suffix", ["list"]], ["add", "theorem", "rtake_zero", ["list"]]]}]}, {"timestamp": 1661831219, "sha": "3683b34a", "message": "chore(scripts): update nolints.txt (#16305)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1661823745, "sha": "20f94541", "message": "feat(ring_theory/unique_factorization_domain): add `associated_iff_normalized_factors_eq_normalized_factors` (#16221)", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "associated_iff_normalized_factors_eq_normalized_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1661819923, "sha": "17ab30b2", "message": "feat(field_theory/normal): Define the normal closure (#16144)\nThis PR adds the definition of the normal closure, and proves that the normal closure is finite-dimensional and normal.", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "restrict_scalars_normal", ["intermediate_field"]], ["add", "theorem", "restrict_scalars_eq_supr_adjoin", ["normal_closure"]]]}]}, {"timestamp": 1661803260, "sha": "e6c6dfd5", "message": "chore(analysis/special_functions): correct typo (#16280)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "tendsto_log_mul_rpow_nhds_zero", []], ["del", "theorem", "tensdto_log_mul_rpow_nhds_zero", []]]}]}, {"timestamp": 1661803259, "sha": "879155bf", "message": "feat(*): replace fact(0 < t) with ne_zero (#16145)\nThis has almost fully made things easier, whilst also being easier on the typeclass system (`fact` can cause many slowdowns). It also allows us to make many things that were not instances before into instances.", "changes": [{"oldPath": "counterexamples/homogeneous_prime_not_prime.lean", "newPath": "counterexamples/homogeneous_prime_not_prime.lean", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "of_no_zero_smul_divisors", ["ne_zero"]]]}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "char_is_prime_of_pos", ["char_p"]], ["add", "theorem", "not_char_dvd", ["ne_zero"]], ["add", "theorem", "of_not_dvd", ["ne_zero"]]]}, {"oldPath": "src/algebra/char_p/invertible.lean", "newPath": "src/algebra/char_p/invertible.lean", "changes": []}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": []}, {"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["del", "theorem", "not_char_dvd", ["ne_zero"]], ["del", "theorem", "of_no_zero_smul_divisors", ["ne_zero"]], ["del", "theorem", "of_not_dvd", ["ne_zero"]]]}, {"oldPath": "src/control/random.lean", "newPath": "src/control/random.lean", "changes": []}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["del", "theorem", "pos", ["fact", "bit0"]], ["del", "theorem", "pos", ["fact", "bit1"]], ["del", "theorem", "pos", ["fact", "pow"]], ["del", "theorem", "pos", ["fact", "succ"]], ["mod", "theorem", "coe_of_nat_eq_mod'", ["fin"]], ["mod", "def", "of_nat'", ["fin"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["mod", "theorem", "card_units_eq_totient", ["zmod"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["del", "theorem", "fact_pos", ["pnat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_eq_val", ["zmod"]], ["mod", "theorem", "int_coe_zmod_eq_iff", ["zmod"]], ["mod", "theorem", "nat_abs_val_min_abs_le", ["zmod"]], ["mod", "theorem", "nat_cast_comp_val", ["zmod"]], ["mod", "theorem", "nat_cast_nat_abs_val_min_abs", ["zmod"]], ["mod", "theorem", "nat_cast_right_inverse", ["zmod"]], ["mod", "theorem", "nat_cast_val", ["zmod"]], ["mod", "theorem", "nat_cast_zmod_surjective", ["zmod"]], ["mod", "theorem", "nat_cast_zmod_val", ["zmod"]], ["mod", "theorem", "nat_coe_zmod_eq_iff", ["zmod"]], ["mod", "theorem", "neg_val'", ["zmod"]], ["mod", "theorem", "neg_val", ["zmod"]], ["mod", "def", "units_equiv_coprime", ["zmod"]], ["mod", "theorem", "val_add", ["zmod"]], ["mod", "theorem", "val_eq_ite_val_min_abs", ["zmod"]], ["mod", "theorem", "val_injective", ["zmod"]], ["mod", "theorem", "val_int_cast", ["zmod"]], ["mod", "theorem", "val_le", ["zmod"]], ["mod", "theorem", "val_lt", ["zmod"]], ["mod", "theorem", "val_min_abs_def_pos", ["zmod"]]]}, {"oldPath": "src/data/zmod/defs.lean", "newPath": "src/data/zmod/defs.lean", "changes": []}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/group_theory/finite_abelian.lean", "newPath": "src/group_theory/finite_abelian.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": [["mod", "theorem", "card", ["dihedral_group"]], ["mod", "theorem", "order_of_r", ["dihedral_group"]]]}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": [["mod", "theorem", "card", ["quaternion_group"]], ["mod", "theorem", "order_of_a", ["quaternion_group"]], ["mod", "theorem", "order_of_xa", ["quaternion_group"]]]}, {"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": [["del", "theorem", "fact_pnat_pos", ["lucas_lehmer"]]]}, {"oldPath": "src/number_theory/lucas_primality.lean", "newPath": "src/number_theory/lucas_primality.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/tactic/norm_fin.lean", "newPath": "src/tactic/norm_fin.lean", "changes": [["mod", "theorem", "normalize_fin_iff", ["tactic", "norm_fin"]]]}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}]}, {"timestamp": 1661797750, "sha": "b490ab4a", "message": "feat(analysis/normed_space/star/basic): add `cstar_ring` instances for `pi` and `prod` (#16254)", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}]}, {"timestamp": 1661789160, "sha": "d032ed1d", "message": "feat(analysis/seminorm): Add construction of seminorm over normed fields (#15893)\nAs for normed spaces the properties of seminorms over fields are strong enough so that it sufficies to assume that `∀ (r : 𝕜) x, f (r • x) ≤ ∥r∥ * f x`. This PR adds this construction.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["mod", "def", "of", ["seminorm"]], ["add", "def", "of_smul_le", ["seminorm"]]]}]}, {"timestamp": 1661789159, "sha": "7e20c8fc", "message": "feat(topology): composition of continuous functions is continuous w.r.t. the compact-open topologies (#15721)\n* Remove the `t2_space` assumption from `exists_compact_between` by generalizing the proof of `exists_compact_superset`, and move it from `topology/separation` to `topology/subset_properties`.\n* Use it to prove `continuous_map.continuous_prod` in `topology/continuous_map` stating that for topological spaces `X,Y,Z` with `Y` locally compact, the composition induces a continuous map from `C(X,Y) x C(Y,Z)` to `C(X,Z)` where all function spaces are endowed with the compact-open topology. The (statement and the) proof is taken from Prop. 9 of Chap. X, §3, №. 4 of Bourbaki's *Topologie Générale*.\n* Generalize `exists_open_between_and_is_compact_closure` from `t3_space` to `t2_space` using the generalized `exists_compact_between`.\nThis has been briefly discussed in [this Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/continuity.20of.20continuous.20composition)", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "comp'", ["continuous_map", "continuous"]], ["add", "theorem", "continuous_comp'", ["continuous_map"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "exists_compact_between", []], ["mod", "theorem", "exists_open_between_and_is_compact_closure", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "exists_compact_between", []]]}]}, {"timestamp": 1661778649, "sha": "1b8a0c29", "message": "chore(set_theory/cardinal/ordinal): follow your linter (#16265)\nEditing `set_theory.cardinal.ordinal`, I noticed that the linter was unhappy. So, I thought of pleasing it. I followed its instructions, but, admittedly, I do not know if this is a good change or not!\nI replaced some `fintype` assumptions by `finite` ones and changed one proof as a consequence.", "changes": [{"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["mod", "theorem", "extend_function_finite", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_finite", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_finite_lift", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_finite_same", ["cardinal"]]]}]}, {"timestamp": 1661778648, "sha": "daec7d61", "message": "chore(order/bounded_order): Rename `is_complemented` to `complemented_lattice` (#16263)\nThis is to make space for the predicate `is_complemented : α → Prop := ∃ b, is_compl a b`.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "is_atomic_of_is_coatomic_of_complemented_lattice_of_is_modular", []], ["del", "theorem", "is_atomic_of_is_coatomic_of_is_complemented_of_is_modular", []], ["add", "theorem", "is_coatomic_of_is_atomic_of_complemented_lattice_of_is_modular", []], ["del", "theorem", "is_coatomic_of_is_atomic_of_is_complemented_of_is_modular", []]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "complemented_lattice_iff_is_atomistic", []], ["add", "theorem", "complemented_lattice_of_Sup_atoms_eq_top", []], ["add", "theorem", "complemented_lattice_of_is_atomistic", []], ["del", "theorem", "is_complemented_iff_is_atomistic", []], ["del", "theorem", "is_complemented_of_Sup_atoms_eq_top", []], ["del", "theorem", "is_complemented_of_is_atomistic", []]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "complemented_lattice", ["order_iso"]], ["add", "theorem", "complemented_lattice_iff", ["order_iso"]], ["del", "theorem", "is_complemented", ["order_iso"]], ["del", "theorem", "is_complemented_iff", ["order_iso"]]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": [["mod", "def", "is_semisimple_module", []]]}]}, {"timestamp": 1661778647, "sha": "24b08ce6", "message": "feat(order/heyting/regular): Heyting-regular elements (#16033)\nDefine Heyting-regular elements of an Heyting lattice, namely those `a` such that `aᶜᶜ = a`, and prove that they form a boolean algebra.", "changes": [{"oldPath": null, "newPath": "src/order/heyting/regular.lean", "changes": [["add", "def", "of_regular", ["boolean_algebra"]], ["add", "theorem", "himp", ["heyting", "is_regular"]], ["add", "theorem", "inf", ["heyting", "is_regular"]], ["add", "def", "is_regular", ["heyting"]], ["add", "theorem", "is_regular_bot", ["heyting"]], ["add", "theorem", "is_regular_compl", ["heyting"]], ["add", "theorem", "is_regular_of_boolean", ["heyting"]], ["add", "theorem", "is_regular_of_decidable", ["heyting"]], ["add", "theorem", "is_regular_top", ["heyting"]], ["add", "theorem", "coe_bot", ["heyting", "regular"]], ["add", "theorem", "coe_compl", ["heyting", "regular"]], ["add", "theorem", "coe_himp", ["heyting", "regular"]], ["add", "theorem", "coe_inf", ["heyting", "regular"]], ["add", "theorem", "coe_inj", ["heyting", "regular"]], ["add", "theorem", "coe_injective", ["heyting", "regular"]], ["add", "theorem", "coe_le_coe", ["heyting", "regular"]], ["add", "theorem", "coe_lt_coe", ["heyting", "regular"]], ["add", "theorem", "coe_sdiff", ["heyting", "regular"]], ["add", "theorem", "coe_sup", ["heyting", "regular"]], ["add", "theorem", "coe_to_regular", ["heyting", "regular"]], ["add", "theorem", "coe_top", ["heyting", "regular"]], ["add", "def", "gi", ["heyting", "regular"]], ["add", "def", "to_regular", ["heyting", "regular"]], ["add", "theorem", "to_regular_coe", ["heyting", "regular"]], ["add", "def", "regular", ["heyting"]]]}]}, {"timestamp": 1661771581, "sha": "e4b9af26", "message": "feat(algebra/char_p/basic + data/zmod/basic): the characteristic is the order of one and zmod related lemmas (#16277)\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "add_order_of_one", ["char_p"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "add_order_of_coe'", ["zmod"]], ["add", "theorem", "add_order_of_coe", ["zmod"]], ["add", "theorem", "add_order_of_one", ["zmod"]]]}]}, {"timestamp": 1661771580, "sha": "8ad70779", "message": "feat(data/nat/factorization/basic): lemmas about `n.factorization p = 0` (#16185)\nAdds some lemmas characterising conditions when `n.factorization p = 0`.\nThis PR also rearranges the order of some lemmas to better group them together (and adds some section docstrings).\nAlso swaps the names `factorization_eq_zero_iff` and `factorization_eq_zero_iff'`.", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["mod", "theorem", "factorization_eq_zero_iff'", ["nat"]], ["mod", "theorem", "factorization_eq_zero_iff", ["nat"]], ["add", "theorem", "factorization_eq_zero_iff_remainder", ["nat"]], ["add", "theorem", "factorization_eq_zero_of_not_dvd", ["nat"]], ["add", "theorem", "factorization_eq_zero_of_remainder", ["nat"]], ["add", "theorem", "eq_of_factorization_pos", ["nat", "prime"]]]}]}, {"timestamp": 1661761108, "sha": "211bf1ab", "message": "feat(linear_algebra/affine_space/affine_subspace): `map_eq_bot_iff` (#16285)\nAdd the lemma that the image of an affine subspace under an affine map\nis `⊥` if and only if that subspace is `⊥`.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "map_eq_bot_iff", ["affine_subspace"]]]}]}, {"timestamp": 1661761107, "sha": "39d5a98c", "message": "feat(linear_algebra/affine_space/affine_equiv): lemmas about coercion to `affine_map` (#16284)\nAdd two more `rfl` (and `simp`) lemmas about the coercion from\n`affine_equiv` to `affine_map`. In both cases very similar lemmas are\nalready present (in one case a version using `to_affine_map`, in one\ncase a version for the coercion to a function), but apparently not\nthese particular ones.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "coe_linear", ["affine_equiv"]], ["add", "theorem", "coe_trans_to_affine_map", ["affine_equiv"]]]}]}, {"timestamp": 1661761106, "sha": "3e2fb4c7", "message": "feat(data/rat/cast): generalize `ext` lemmas (#16268)\n* generalize `monoid_with_zero_hom.ext_rat` to `monoid_with_zero`;\n* deduce `ext` lemma for `ring_hom`s from `monoid_with_zero_hom` version;\n* use hom classes.", "changes": [{"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "ext_rat'", ["monoid_with_zero_hom"]], ["mod", "theorem", "ext_rat", ["monoid_with_zero_hom"]], ["mod", "theorem", "ext_rat_on_pnat", ["monoid_with_zero_hom"]], ["mod", "theorem", "ext_rat", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1661761105, "sha": "31297bda", "message": "refactor(algebra/order/with_zero): Generalize lemmas (#16240)\nGeneralize the lemmas introduced in #15644 to monoids + covariant classes.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["add", "theorem", "eq_one_of_mul_le_one_left", []], ["add", "theorem", "eq_one_of_mul_le_one_right", []], ["add", "theorem", "eq_one_of_one_le_mul_left", []], ["add", "theorem", "eq_one_of_one_le_mul_right", []]]}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["del", "theorem", "eq_one_of_mul_eq_one_left'", []], ["del", "theorem", "eq_one_of_mul_eq_one_left", []], ["del", "theorem", "eq_one_of_mul_eq_one_right'", []], ["del", "theorem", "eq_one_of_mul_eq_one_right", []]]}]}, {"timestamp": 1661761104, "sha": "301a6253", "message": "feat(ring_theory/polynomial/basic): generalize `is_domain` to `no_zero_divisors` (#16226)\nThis generalization makes this work on `comm_semiring` instead of `comm_ring`.\nThis also removes a duplicate proof of nontriviality.\n`mv_polynomial.eq_zero_or_eq_zero_of_mul_eq_zero` has been removed in favor of this instance.", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["del", "theorem", "is_domain_fin", ["mv_polynomial"]], ["del", "theorem", "is_domain_fin_zero", ["mv_polynomial"]], ["del", "theorem", "is_domain_fintype", ["mv_polynomial"]], ["add", "theorem", "no_zero_divisors_fin", ["mv_polynomial"]], ["add", "theorem", "no_zero_divisors_of_finite", ["mv_polynomial"]]]}]}, {"timestamp": 1661761103, "sha": "9c0a5431", "message": "feat(counterexamples/map_floor): `floor`/`ceil` are not preserved under order ring homs (#16198)\n#16025 proves that `⌊f a⌋ = ⌊a⌋` and `⌈f a⌉ = ⌈a⌉` for a **strictly** monotone ring hom `f`. This counterexample shows that this can't be relaxed to `f` monotone.", "changes": [{"oldPath": null, "newPath": "counterexamples/map_floor.lean", "changes": [["add", "def", "forget_epsilons", ["int_with_epsilon"]], ["add", "theorem", "forget_epsilons_apply", ["int_with_epsilon"]], ["add", "theorem", "forget_epsilons_floor_lt", ["int_with_epsilon"]], ["add", "theorem", "lt_forget_epsilons_ceil", ["int_with_epsilon"]], ["add", "theorem", "pos_iff", ["int_with_epsilon"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "coeff_inj", ["polynomial"]], ["add", "theorem", "coeff_injective", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "le_nat_trailing_degree", ["polynomial"]]]}]}, {"timestamp": 1661761101, "sha": "ae93ce85", "message": "feat(topology/algebra/polynomial): add coeff_le_of_roots_le (#15275)\nThis is the proof that, if the roots of a polynomial are bounded, then its coefficients are bounded. More precisely, it is the following statement: \n```lean\nlemma coeff_le_of_roots_le [field F] [normed_field K] {p : F[X]} {f : F →+* K} {B : ℝ} (i : ℕ) \n(h1 : p.monic) (h2 : splits f p) (h3 : ∀ z ∈ (map f p).roots, ∥z∥ ≤ B) :\n ∥ (map f p).coeff i ∥ ≤ B^(p.nat_degree - i) * p.nat_degree.choose i \n```\nFrom flt-regular", "changes": [{"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": [["add", "theorem", "coeff_le_of_roots_le", ["polynomial"]]]}]}, {"timestamp": 1661761100, "sha": "f0514a8f", "message": "feat(category_theory/preadditive): projective iff variants of Yoneda preserve epimorphisms (#15123)", "changes": [{"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["add", "theorem", "injective_iff_preserves_epimorphisms_preadditive_yoneda_obj'", ["category_theory", "injective"]], ["add", "theorem", "injective_iff_preserves_epimorphisms_preadditive_yoneda_obj", ["category_theory", "injective"]]]}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": [["add", "theorem", "projective_iff_preserves_epimorphisms_preadditive_coyoneda_obj'", ["category_theory", "projective"]], ["add", "theorem", "projective_iff_preserves_epimorphisms_preadditive_coyoneda_obj", ["category_theory", "projective"]]]}]}, {"timestamp": 1661761099, "sha": "24a233d4", "message": "feat(algebra/order/positive): new file (#14833)\nDefine various algebraic structures on the set of positive numbers.\nI have two reasons to introduce these classes:\n- we can use `{x : ℝ // 0 < x}` in various filter bases; this may save us from explicit usage of `half_pos` or `div_pos` here or there;\n- I want to introduce a multiplicative action of `{x : ℝ // 0 < x}` on the upper half plane.", "changes": [{"oldPath": null, "newPath": "src/algebra/order/positive/field.lean", "changes": [["add", "theorem", "coe_inv", ["positive"]], ["add", "theorem", "coe_zpow", ["positive"]]]}, {"oldPath": null, "newPath": "src/algebra/order/positive/ring.lean", "changes": [["add", "theorem", "coe_add", ["positive"]], ["add", "theorem", "coe_mul", ["positive"]], ["add", "theorem", "coe_one", ["positive"]], ["add", "theorem", "coe_pow", ["positive"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["mod", "theorem", "coe_eq_one_iff", ["pnat"]]]}]}, {"timestamp": 1661754049, "sha": "7c4a46f3", "message": "feat(measure_theory/function/conditional_expectation/basic): add some condexp lemmas (#16273)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation/basic.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": [["add", "theorem", "condexp_finset_sum", ["measure_theory"]], ["add", "theorem", "condexp_nonneg", ["measure_theory"]], ["add", "theorem", "condexp_nonpos", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "eventually_eq_prod", []]]}]}, {"timestamp": 1661749003, "sha": "6de241f9", "message": "feat(data/rat/nnrat): Nonnegative rationals (#16283)\nDefine `nnrat`, the subtype of nonnegative rational numbers, and show it forms a `canonically_linear_ordered_semifield`.", "changes": [{"oldPath": null, "newPath": "src/data/rat/nnrat.lean", "changes": [["add", "theorem", "abs_coe", ["nnrat"]], ["add", "theorem", "bdd_above_coe", ["nnrat"]], ["add", "theorem", "bdd_below_coe", ["nnrat"]], ["add", "theorem", "coe_add", ["nnrat"]], ["add", "theorem", "coe_bit0", ["nnrat"]], ["add", "theorem", "coe_bit1", ["nnrat"]], ["add", "theorem", "coe_coe_hom", ["nnrat"]], ["add", "theorem", "coe_div", ["nnrat"]], ["add", "theorem", "coe_eq_zero", ["nnrat"]], ["add", "def", "coe_hom", ["nnrat"]], ["add", "theorem", "coe_indicator", ["nnrat"]], ["add", "theorem", "coe_inj", ["nnrat"]], ["add", "theorem", "coe_inv", ["nnrat"]], ["add", "theorem", "coe_le_coe", ["nnrat"]], ["add", "theorem", "coe_list_prod", ["nnrat"]], ["add", "theorem", "coe_list_sum", ["nnrat"]], ["add", "theorem", "coe_lt_coe", ["nnrat"]], ["add", "theorem", "coe_max", ["nnrat"]], ["add", "theorem", "coe_min", ["nnrat"]], ["add", "theorem", "coe_mk", ["nnrat"]], ["add", "theorem", "coe_mono", ["nnrat"]], ["add", "theorem", "coe_mul", ["nnrat"]], ["add", "theorem", "coe_multiset_prod", ["nnrat"]], ["add", "theorem", "coe_multiset_sum", ["nnrat"]], ["add", "theorem", "coe_nat_cast", ["nnrat"]], ["add", "theorem", "coe_ne_zero", ["nnrat"]], ["add", "theorem", "coe_nonneg", ["nnrat"]], ["add", "theorem", "coe_one", ["nnrat"]], ["add", "theorem", "coe_pos", ["nnrat"]], ["add", "theorem", "coe_pow", ["nnrat"]], ["add", "theorem", "coe_prod", ["nnrat"]], ["add", "theorem", "coe_sub", ["nnrat"]], ["add", "theorem", "coe_sum", ["nnrat"]], ["add", "theorem", "coe_zero", ["nnrat"]], ["add", "def", "denom", ["nnrat"]], ["add", "theorem", "denom_coe", ["nnrat"]], ["add", "theorem", "ext", ["nnrat"]], ["add", "theorem", "ext_iff", ["nnrat"]], ["add", "theorem", "ext_num_denom", ["nnrat"]], ["add", "theorem", "ext_num_denom_iff", ["nnrat"]], ["add", "theorem", "mk_coe_nat", ["nnrat"]], ["add", "theorem", "nat_abs_num_coe", ["nnrat"]], ["add", "theorem", "ne_iff", ["nnrat"]], ["add", "theorem", "nsmul_coe", ["nnrat"]], ["add", "def", "num", ["nnrat"]], ["add", "theorem", "num_div_denom", ["nnrat"]], ["add", "theorem", "sub_def", ["nnrat"]], ["add", "theorem", "to_nnrat_coe", ["nnrat"]], ["add", "theorem", "to_nnrat_coe_nat", ["nnrat"]], ["add", "theorem", "to_nnrat_mono", ["nnrat"]], ["add", "theorem", "to_nnrat_prod_of_nonneg", ["nnrat"]], ["add", "theorem", "to_nnrat_sum_of_nonneg", ["nnrat"]], ["add", "theorem", "val_eq_coe", ["nnrat"]], ["add", "def", "nnrat", []], ["add", "theorem", "coe_nnabs", ["rat"]], ["add", "theorem", "coe_to_nnrat", ["rat"]], ["add", "theorem", "le_coe_to_nnrat", ["rat"]], ["add", "theorem", "le_to_nnrat_iff_coe_le'", ["rat"]], ["add", "theorem", "le_to_nnrat_iff_coe_le", ["rat"]], ["add", "theorem", "lt_to_nnrat_iff_coe_lt", ["rat"]], ["add", "def", "nnabs", ["rat"]], ["add", "def", "to_nnrat", ["rat"]], ["add", "theorem", "to_nnrat_add", ["rat"]], ["add", "theorem", "to_nnrat_add_le", ["rat"]], ["add", "theorem", "to_nnrat_bit0", ["rat"]], ["add", "theorem", "to_nnrat_bit1", ["rat"]], ["add", "theorem", "to_nnrat_div'", ["rat"]], ["add", "theorem", "to_nnrat_div", ["rat"]], ["add", "theorem", "to_nnrat_eq_zero", ["rat"]], ["add", "theorem", "to_nnrat_inv", ["rat"]], ["add", "theorem", "to_nnrat_le_iff_le_coe", ["rat"]], ["add", "theorem", "to_nnrat_le_to_nnrat_iff", ["rat"]], ["add", "theorem", "to_nnrat_lt_iff_lt_coe", ["rat"]], ["add", "theorem", "to_nnrat_lt_to_nnrat_iff'", ["rat"]], ["add", "theorem", "to_nnrat_lt_to_nnrat_iff", ["rat"]], ["add", "theorem", "to_nnrat_lt_to_nnrat_iff_of_nonneg", ["rat"]], ["add", "theorem", "to_nnrat_mul", ["rat"]], ["add", "theorem", "to_nnrat_one", ["rat"]], ["add", "theorem", "to_nnrat_pos", ["rat"]], ["add", "theorem", "to_nnrat_zero", ["rat"]]]}]}, {"timestamp": 1661677029, "sha": "de62604b", "message": "feat(probability/integration): remove integrability assumption in indep_fun.integral_mul (#16167)\nThe integral of a product of independent random variables is the product of the integrals. This is already in mathlib when the random variables are integrable, but it also holds when they are not integrable (as both sides are then zero). In this PR, we remove the integrability assumption from this statement (and weaken accordingly further results that depended on this one).", "changes": [{"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["add", "theorem", "symm", ["probability_theory", "indep_fun"]]]}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": [["add", "theorem", "integrable_left_of_integrable_mul", ["probability_theory", "indep_fun"]], ["add", "theorem", "integrable_right_of_integrable_mul", ["probability_theory", "indep_fun"]], ["add", "theorem", "integral_mul'", ["probability_theory", "indep_fun"]], ["add", "theorem", "integral_mul", ["probability_theory", "indep_fun"]], ["del", "theorem", "integral_mul_of_integrable'", ["probability_theory", "indep_fun"]], ["add", "theorem", "lintegral_mul_eq_lintegral_mul_lintegral_of_indep_fun''", ["probability_theory"]]]}, {"oldPath": "src/probability/moments.lean", "newPath": "src/probability/moments.lean", "changes": [["add", "theorem", "ae_strongly_measurable_exp_mul_add", ["probability_theory"]], ["add", "theorem", "ae_strongly_measurable_exp_mul_sum", ["probability_theory"]], ["add", "theorem", "mgf_add'", ["probability_theory", "indep_fun"]]]}, {"oldPath": "src/probability/variance.lean", "newPath": "src/probability/variance.lean", "changes": []}]}, {"timestamp": 1661637236, "sha": "937c692d", "message": "chore(category_theory): fix name of mono_app_of_mono (#16275)\nThis PR fixes the names of a few lemmas like `mono_app_of_mono`.", "changes": [{"oldPath": "src/category_theory/adjunction/evaluation.lean", "newPath": "src/category_theory/adjunction/evaluation.lean", "changes": [["del", "theorem", "epi_iff_app_epi", ["category_theory", "nat_trans"]], ["add", "theorem", "epi_iff_epi_app", ["category_theory", "nat_trans"]], ["del", "theorem", "mono_iff_app_mono", ["category_theory", "nat_trans"]], ["add", "theorem", "mono_iff_mono_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/functor/category.lean", "newPath": "src/category_theory/functor/category.lean", "changes": [["del", "theorem", "epi_app_of_epi", ["category_theory", "nat_trans"]], ["add", "theorem", "epi_of_epi_app", ["category_theory", "nat_trans"]], ["del", "theorem", "mono_app_of_mono", ["category_theory", "nat_trans"]], ["add", "theorem", "mono_of_mono_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/sites/subsheaf.lean", "newPath": "src/category_theory/sites/subsheaf.lean", "changes": []}]}, {"timestamp": 1661637235, "sha": "8dd80093", "message": "fix(combinatorics/composition): remove non-terminal simp (#16259)", "changes": [{"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}]}, {"timestamp": 1661637233, "sha": "1c2d71f1", "message": "feat(algebra/order/field): Canonically linear ordered semifields (#15677)\nDefine `canonically_linear_ordered_semifield`. The target is `nnreal` and the future `nnrat`.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "tsub_div", []]]}, {"oldPath": "src/algebra/order/field_defs.lean", "newPath": "src/algebra/order/field_defs.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": [["mod", "theorem", "inv_mk", ["nonneg"]], ["mod", "theorem", "mk_div_mk", ["nonneg"]], ["add", "theorem", "mk_zpow", ["nonneg"]]]}]}, {"timestamp": 1661628960, "sha": "ebb53dc3", "message": "feat(data/rat/defs): add two lemmas for `pnat_denom` of 0 and 1 (#15864)", "changes": [{"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": [["add", "theorem", "pnat_denom_one", ["rat"]], ["add", "theorem", "pnat_denom_zero", ["rat"]]]}]}, {"timestamp": 1661623464, "sha": "6901db60", "message": "chore(category_theory/limits/shapes/finite_products): avoid tidy (#16261)", "changes": [{"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}]}, {"timestamp": 1661616088, "sha": "c241a033", "message": "docs(ring_theory/valuation/valuation_subring): clarify value group docstring (#16272)\nThe \"value group\" of a valuation is not a group! It's a group with zero. I've heard the phrase \"value group\" being used to describe the units of this group with zero before, so we should perhaps clarify in the docstring what we mean by this definition.", "changes": [{"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": []}]}, {"timestamp": 1661616087, "sha": "fef8efdf", "message": "feat(category_theory): coseparators in structured_arrow (#15981)\nHopefully the last preliminary PR for the Special Adjoint Functor Theorem.", "changes": [{"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": [["add", "theorem", "is_separating_proj_preimage", ["category_theory", "costructured_arrow"]], ["add", "theorem", "has_initial_of_is_coseparating", ["category_theory"]], ["del", "theorem", "has_initial_of_is_cosepatating", ["category_theory"]], ["mod", "theorem", "has_terminal_of_is_separating", ["category_theory"]], ["add", "theorem", "is_coseparating_proj_preimage", ["category_theory", "structured_arrow"]], ["mod", "theorem", "well_powered_of_is_detecting", ["category_theory"]]]}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": []}]}, {"timestamp": 1661606846, "sha": "c95908a6", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): Add portmanteau implications concerning open and closed sets. (#15321)\nAdd equivalence of a limsup condition for closed sets and a liminf condition for open sets, which will later both be shown to be characterizing conditions of weak convergence of probability measures.\nAlso add that either of these equivalent conditions implies that for any Borel set whose boundary carries zero probability in the candidate limit measure, we have that the measures of this set tend to its measure under the candidate limit measure.", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "antitone_const_tsub", []]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "le_measure_compl_liminf_of_limsup_measure_le", ["measure_theory"]], ["add", "theorem", "le_measure_liminf_of_limsup_measure_compl_le", ["measure_theory"]], ["add", "theorem", "limsup_measure_closed_le_iff_liminf_measure_open_ge", ["measure_theory"]], ["add", "theorem", "limsup_measure_compl_le_of_le_liminf_measure", ["measure_theory"]], ["add", "theorem", "limsup_measure_le_of_le_liminf_measure_compl", ["measure_theory"]], ["add", "theorem", "le_liminf_measure_open_of_tendsto", ["measure_theory", "probability_measure"]], ["add", "theorem", "limsup_measure_closed_le_of_tendsto", ["measure_theory", "probability_measure"]], ["add", "theorem", "tendsto_measure_of_null_frontier_of_tendsto'", ["measure_theory", "probability_measure"]], ["add", "theorem", "tendsto_measure_of_null_frontier_of_tendsto", ["measure_theory", "probability_measure"]], ["add", "theorem", "tendsto_measure_of_le_liminf_measure_of_limsup_measure_le", ["measure_theory"]], ["add", "theorem", "tendsto_measure_of_null_frontier", ["measure_theory"]]]}]}, {"timestamp": 1661561915, "sha": "18361694", "message": "feat(ring_theory/ideal): Two little `restrict_scalars` lemmas (#16248)\nI used these two lemmas in one of the definitions of the ideal norm.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "coe_restrict_scalars", ["ideal"]], ["add", "theorem", "restrict_scalars_mul", ["ideal"]]]}]}, {"timestamp": 1661545538, "sha": "5ef64261", "message": "feat(analysis/normed_space/star/spectrum): star algebra morphisms over ℂ are norm contractive (#16219)\n- [x] depends on: #16177\n- [x] depends on: #16212", "changes": [{"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["add", "theorem", "nnnorm_apply_le", ["star_alg_hom"]], ["add", "theorem", "norm_apply_le", ["star_alg_hom"]]]}]}, {"timestamp": 1661497248, "sha": "15c8fdda", "message": "feat(data/{list, multiset}/basic): generalize `pmap_congr` (#16220)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}]}, {"timestamp": 1661489205, "sha": "3b0a5074", "message": "chore(scripts): update nolints.txt (#16253)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1661450823, "sha": "b059a442", "message": "feat(algebra/order/floor): lemmas about `int.floor`, `int.ceil`, `int.fract`, `round` (#16158)", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "abs_sub_round_eq_min", []], ["add", "theorem", "abs_sub_round_le_abs_self", []], ["add", "theorem", "abs_fract", ["int"]], ["add", "theorem", "abs_one_sub_fract", ["int"]], ["add", "theorem", "add_one_le_ceil_iff", ["int"]], ["del", "theorem", "ceil_coe", ["int"]], ["add", "theorem", "ceil_eq_add_one_sub_fract", ["int"]], ["add", "theorem", "ceil_int_cast", ["int"]], ["add", "theorem", "ceil_nat_cast", ["int"]], ["mod", "theorem", "ceil_one", ["int"]], ["add", "theorem", "ceil_sub_self_eq", ["int"]], ["mod", "theorem", "ceil_zero", ["int"]], ["del", "theorem", "floor_coe", ["int"]], ["add", "theorem", "floor_int_cast", ["int"]], ["add", "theorem", "floor_le_neg_one_iff", ["int"]], ["add", "theorem", "floor_le_sub_one_iff", ["int"]], ["add", "theorem", "floor_nat_cast", ["int"]], ["mod", "theorem", "floor_one", ["int"]], ["mod", "theorem", "floor_zero", ["int"]], ["del", "theorem", "fract_coe", ["int"]], ["add", "theorem", "fract_eq_zero_or_add_one_sub_ceil", ["int"]], ["mod", "theorem", "fract_floor", ["int"]], ["add", "theorem", "fract_int_cast", ["int"]], ["add", "theorem", "fract_nat_cast", ["int"]], ["mod", "theorem", "fract_nonneg", ["int"]], ["mod", "theorem", "lt_floor_add_one", ["int"]], ["add", "theorem", "one_le_ceil_iff", ["int"]], ["mod", "theorem", "sub_one_lt_floor", ["int"]], ["mod", "def", "round", []], ["add", "theorem", "round_eq", []], ["add", "theorem", "round_int_cast", []], ["add", "theorem", "round_nat_cast", []], ["mod", "theorem", "round_one", []], ["mod", "theorem", "round_zero", []]]}, {"oldPath": "src/data/int/succ_pred.lean", "newPath": "src/data/int/succ_pred.lean", "changes": [["add", "theorem", "pos_iff_one_le", ["int"]]]}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "max_def'", []], ["add", "theorem", "min_def'", []]]}, {"oldPath": "src/topology/algebra/order/floor.lean", "newPath": "src/topology/algebra/order/floor.lean", "changes": []}]}, {"timestamp": 1661441853, "sha": "4ed5f0e1", "message": "feat(algebra/order/smul): `positivity` extension for `smul` (#16162)\nAdd `positivity_smul`, a `positivity` extension to deal with `•`.", "changes": [{"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}]}, {"timestamp": 1661433526, "sha": "3d0bb870", "message": "feat(data/zmod/quotient): Version of `order_eq_card_zpowers` in terms of `nat.card` without a `fintype`/`finite` assumption (#16175)\nThis PR adds a version of `order_eq_card_zpowers` in terms of `nat.card` without a `fintype`/`finite` assumption.", "changes": [{"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": [["add", "theorem", "order_eq_card_zpowers'", []]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1661425687, "sha": "b6258037", "message": "feat(topology/uniform_space/uniform_convergence): tendsto_uniformly_on_filter (#15871)\nCurrently, mathlib supports several notions of uniform convergence (e.g., tendsto_uniformly_on). These are \"global\" versions of a more local notion, which we call tendsto_uniformly_on_filter. Specifically, as revealed by tendsto_prod_top_iff is that uniform convergence means convergence on a product filter. So why can't you have a more general filter than a principal filter?\nThere's no reason you can't! Indeed, if you replace 𝓟 s with 𝓝 x you get a notion of \"local uniform convergence\" which is enough to prove, e.g., the derivative operator at a point commutes with the pointwise limit.", "changes": [{"oldPath": "src/order/filter/prod.lean", "newPath": "src/order/filter/prod.lean", "changes": [["add", "theorem", "diag_of_prod_left", ["filter", "eventually"]], ["add", "theorem", "diag_of_prod_right", ["filter", "eventually"]], ["add", "theorem", "eventually_prod_principal_iff", ["filter"]], ["add", "theorem", "eventually_swap_iff", ["filter"]], ["add", "theorem", "prod_mono_left", ["filter"]], ["add", "theorem", "prod_mono_right", ["filter"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "div", ["tendsto_uniformly"]], ["add", "theorem", "mul", ["tendsto_uniformly"]], ["add", "theorem", "div", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "mul", ["tendsto_uniformly_on_filter"]]]}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "tendsto_uniformly_on_filter_const", ["filter", "tendsto"]], ["add", "theorem", "tendsto_prod_filter_iff", []], ["add", "theorem", "tendsto_uniformly_on_filter", ["tendsto_uniformly"]], ["add", "theorem", "tendsto_uniformly_iff_tendsto_uniformly_on_filter", []], ["add", "theorem", "tendsto_at", ["tendsto_uniformly_on"]], ["add", "theorem", "comp", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "congr", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "mono_left", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "mono_right", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "prod", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "prod_map", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "tendsto_at", ["tendsto_uniformly_on_filter"]], ["add", "theorem", "uniform_cauchy_seq_on_filter", ["tendsto_uniformly_on_filter"]], ["add", "def", "tendsto_uniformly_on_filter", []], ["add", "theorem", "tendsto_uniformly_on_filter_iff_tendsto", []], ["add", "theorem", "tendsto_uniformly_on_iff_tendsto_uniformly_on_filter", []], ["add", "theorem", "uniform_cauchy_seq_on_filter", ["uniform_cauchy_seq_on"]], ["add", "theorem", "comp", ["uniform_cauchy_seq_on_filter"]], ["add", "theorem", "mono_left", ["uniform_cauchy_seq_on_filter"]], ["add", "theorem", "mono_right", ["uniform_cauchy_seq_on_filter"]], ["add", "theorem", "tendsto_uniformly_on_filter_of_tendsto", ["uniform_cauchy_seq_on_filter"]], ["add", "def", "uniform_cauchy_seq_on_filter", []], ["add", "theorem", "uniform_cauchy_seq_on_iff_uniform_cauchy_seq_on_filter", []], ["add", "theorem", "comp_tendsto_uniformly_on_filter", ["uniform_continuous"]]]}]}, {"timestamp": 1661415720, "sha": "36e16da1", "message": "docs(algebra/field/basic): fix typo (#16241)", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}]}, {"timestamp": 1661404078, "sha": "b6931e1c", "message": "chore(scripts): update nolints.txt (#16244)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1661404077, "sha": "c5be877a", "message": "feat(tactic/tauto): add support for `¬_ ≠ _` (#16232)\nThis is an attempt to fix [this issue](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/tauto!.20fails.20on.20ne).", "changes": [{"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "test/tauto.lean", "newPath": "test/tauto.lean", "changes": []}]}, {"timestamp": 1661396747, "sha": "fec8ffec", "message": "chore(analysis/normed_space/star/*): migrate use of `a ∈ self_adjoint A` to `is_self_adjoint a` (#16212)\nAfter #15326, this PR migrates existing uses of `a ∈ self_adjoint A` to `is_self_adjoint a` so as to standardize. We also move several results into the `is_self_adjoint` namespace in order to take advantage of dot notation.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["mod", "theorem", "rat_cast_mem", ["self_adjoint"]]]}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["add", "theorem", "nnnorm_pow_two_pow", ["is_self_adjoint"]], ["del", "theorem", "nnnorm_pow_two_pow_of_self_adjoint", []]]}, {"oldPath": "src/analysis/normed_space/star/exponential.lean", "newPath": "src/analysis/normed_space/star/exponential.lean", "changes": [["add", "theorem", "exp_i_smul_unitary", ["is_self_adjoint"]], ["del", "theorem", "exp_i_smul_unitary", ["self_adjoint"]]]}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["add", "theorem", "coe_re_map_spectrum", ["is_self_adjoint"]], ["add", "theorem", "mem_spectrum_eq_re", ["is_self_adjoint"]], ["add", "theorem", "spectral_radius_eq_nnnorm", ["is_self_adjoint"]], ["add", "theorem", "spectral_radius_eq_nnnorm", ["is_star_normal"]], ["del", "theorem", "coe_re_map_spectrum'", ["self_adjoint"]], ["mod", "theorem", "coe_re_map_spectrum", ["self_adjoint"]], ["del", "theorem", "mem_spectrum_eq_re'", ["self_adjoint"]], ["mod", "theorem", "mem_spectrum_eq_re", ["self_adjoint"]], ["del", "theorem", "spectral_radius_eq_nnnorm_of_self_adjoint", []], ["del", "theorem", "spectral_radius_eq_nnnorm_of_star_normal", []]]}]}, {"timestamp": 1661396746, "sha": "42d64072", "message": "feat(analysis/convex/cone): add `inner_dual_cone_of_inner_dual_cone_eq_self` for nonempty, closed, convex cones (#15637)\nWe add the following results about convex cones:\n- instance `has_zero`\n- `inner_dual_cone_zero`\n- `inner_dual_cone_univ`\n- `pointed_of_nonempty_of_is_closed`\n- `hyperplane_separation_of_nonempty_of_is_closed_of_nmem`\n- `inner_dual_cone_of_inner_dual_cone_eq_self`\nReferences: \n- https://ti.inf.ethz.ch/ew/lehre/ApproxSDP09/notes/conelp.pdf\n- Stephen P. Boyd and Lieven Vandenberghe. Convex Optimization. Cambridge University Press.\n ISBN 978-0-521-83378-3. available at https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "coe_zero", ["convex_cone"]], ["add", "theorem", "hyperplane_separation_of_nonempty_of_is_closed_of_nmem", ["convex_cone"]], ["add", "theorem", "inner_dual_cone_of_inner_dual_cone_eq_self", ["convex_cone"]], ["add", "theorem", "mem_zero", ["convex_cone"]], ["add", "theorem", "pointed_of_nonempty_of_is_closed", ["convex_cone"]], ["add", "theorem", "pointed_zero", ["convex_cone"]], ["add", "theorem", "inner_dual_cone_univ", []], ["add", "theorem", "inner_dual_cone_zero", []]]}]}, {"timestamp": 1661386574, "sha": "bd12701e", "message": "feat(algebra/group_with_zero): add `eq_on_inv₀` (#16222)\n* move some lemmas up in the import chain;\n* use `namespace is_unit`;\n* add `is_unit.eq_on_inv` and `eq_on_inv₀`;\n* rename `monoid_hom.eq_on_inv` to `eq_on_inv`, make `f` and `g` explicit.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "coe_inv_mul", ["is_unit"]], ["mod", "theorem", "mul_coe_inv", ["is_unit"]], ["mod", "theorem", "mul_iff", ["is_unit"]], ["mod", "theorem", "mul_left_inj", ["is_unit"]], ["mod", "theorem", "mul_right_inj", ["is_unit"]], ["mod", "theorem", "unit_of_coe_units", ["is_unit"]], ["mod", "theorem", "unit_spec", ["is_unit"]], ["add", "theorem", "coe_inv", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "eq_on_inv₀", []]]}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": []}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["add", "theorem", "eq_on_inv", []], ["add", "theorem", "is_unit", ["group"]], ["add", "theorem", "eq_on_inv", ["is_unit"]], ["del", "theorem", "eq_on_inv", ["monoid_hom"]]]}, {"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": [["del", "theorem", "coe_inv", ["units"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": []}]}, {"timestamp": 1661386572, "sha": "2ca1b571", "message": "chore(algebra/order/{module, smul}): Move to the correct spot (#16131)\nMake `algebra.order.module` do what it says on the tin. Namely, move everything that wasn't about `module` to `algebra.order.smul` and generalize accordingly.\nAs a bonus, add a shortcut instance for `ordered_smul 𝕜 (ι → 𝕜)` as this solves #16021.", "changes": [{"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": [["del", "theorem", "smul_of_nonneg", ["bdd_above"]], ["del", "theorem", "bdd_above_smul_iff_of_pos", []], ["del", "theorem", "smul_of_nonneg", ["bdd_below"]], ["del", "theorem", "bdd_below_smul_iff_of_pos", []], ["del", "theorem", "lower_bounds_smul_of_pos", []], ["del", "theorem", "smul_lower_bounds_subset_lower_bounds_smul", []], ["del", "theorem", "smul_upper_bounds_subset_upper_bounds_smul", []], ["del", "theorem", "upper_bounds_smul_of_pos", []]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["add", "theorem", "smul_of_nonneg", ["bdd_above"]], ["add", "theorem", "bdd_above_smul_iff_of_pos", []], ["add", "theorem", "smul_of_nonneg", ["bdd_below"]], ["add", "theorem", "bdd_below_smul_iff_of_pos", []], ["add", "theorem", "lower_bounds_smul_of_pos", []], ["mod", "def", "smul_left", ["order_iso"]], ["del", "theorem", "mk''", ["ordered_smul"]], ["mod", "theorem", "mk'", ["ordered_smul"]], ["add", "theorem", "smul_lower_bounds_subset_lower_bounds_smul", []], ["add", "theorem", "smul_upper_bounds_subset_upper_bounds_smul", []], ["add", "theorem", "upper_bounds_smul_of_pos", []]]}]}, {"timestamp": 1661386571, "sha": "4b440bb0", "message": "refactor(order/well_founded_set): golf, review API (#11303)\n## New lemmas\n### About `set.well_founded_on`\n- `set.well_founded_on.mono`, `set.well_founded_on.mono_set`;\n- `set.well_founded_on.union`, `set.well_founded_on_union`,\n `finset.well_founded_on`, `set.finite.well_founded_on`,\n `set.subsingleton.well_founded_on`, `set.well_founded_on_empty`,\n `set.well_founded_on_singleton`, `set.well_founded_on_insert`,\n `set.well_founded_on.insert`;\n### About `set.is_wf`\n- `set.is_wf_union`;\n- `set.finite.is_wf`, `finset.is_wf`, `set.is_wf_empty`,\n `set.is_wf_singleton`, `set.subsingleton.is_wf`, `set.is_wf_insert`,\n `set.is_wf.insert`;\n- `finset.is_wf_bUnion`\n### About `set.partially_well_ordered_on`\n- `set.partially_well_ordered_on.union`,\n `set.partially_well_ordered_on_union`;\n- `set.finite.partially_well_ordered_on`,\n `finset.partially_well_ordered_on`,\n `set.partially_well_ordered_on_empty`,\n `set.partially_well_ordered_on_singleton`,\n `set.partially_well_ordered_on_insert` (an `iff`),\n `set.partially_well_ordered_on.insert`,\n `set.subsingleton.partially_well_ordered_on`;\n### About `set.is_pwo`\n- `set.is_pwo.image_of_monotone_on`, `set.is_pwo_union`;\n- `finset.is_pwo`, `set.is_pwo_insert`;\n- `finset.is_pwo_bUnion`;\n## Other API changes\n- Definitions lemmas now use `∀ n, f n ∈ s` instead of `range f ⊆ s`.\n- Many lemmas now use weaker TC assumptions (e.g., `preorder` instead\n of `partial_order`).\n- `set.is_wf_iff_no_descending_seq` now uses\n `(f : ℕ → α) (hf : strict_anti f)` instead of\n `f : order_dual ℕ ↪o α`.\n- The order of binders in the `hf` argument of\n `set.partially_well_ordered_on.image_of_monotone_on` was changed to\n match `monotone_on`.\n- `set.is_pwo.prod` now allows sets from different types.\n- `finset.is_wf_sup` and `finset.is_pwo_sup` are now `iff`s", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "to_finset_mono", ["set"]], ["add", "theorem", "to_finset_ssubset", ["set"]], ["del", "theorem", "to_finset_strict_mono", ["set"]], ["add", "theorem", "to_finset_subset", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_lt_map_eq_of_forall_mem", ["set", "finite"]], ["del", "theorem", "exists_lt_map_eq_of_range_subset", ["set", "finite"]], ["del", "theorem", "to_finset_mono", ["set", "finite"]], ["add", "theorem", "to_finset_ssubset", ["set", "finite"]], ["del", "theorem", "to_finset_strict_mono", ["set", "finite"]], ["add", "theorem", "to_finset_subset", ["set", "finite"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "is_pwo_support_mul_antidiagonal", ["finset"]], ["add", "theorem", "mem_mul_antidiagonal", ["finset"]], ["add", "theorem", "mul_antidiagonal_min_mul_min", ["finset"]], ["add", "theorem", "mul_antidiagonal_mono_left", ["finset"]], ["add", "theorem", "mul_antidiagonal_mono_right", ["finset"]], ["add", "theorem", "support_mul_antidiagonal_subset_mul", ["finset"]], ["add", "theorem", "swap_mem_mul_antidiagonal", ["finset"]], ["add", "theorem", "mul", ["set", "is_pwo"]], ["add", "theorem", "min_mul", ["set", "is_wf"]], ["add", "theorem", "mul", ["set", "is_wf"]], ["add", "theorem", "mem_mul_antidiagonal", ["set"]], ["add", "theorem", "eq_of_fst_eq_fst", ["set", "mul_antidiagonal"]], ["add", "theorem", "eq_of_fst_le_fst_of_snd_le_snd", ["set", "mul_antidiagonal"]], ["add", "theorem", "eq_of_snd_eq_snd", ["set", "mul_antidiagonal"]], ["add", "theorem", "finite_of_is_pwo", ["set", "mul_antidiagonal"]], ["add", "theorem", "finite_of_is_wf", ["set", "mul_antidiagonal"]], ["add", "theorem", "fst_eq_fst_iff_snd_eq_snd", ["set", "mul_antidiagonal"]], ["add", "def", "mul_antidiagonal", ["set"]], ["add", "theorem", "mul_antidiagonal_mono_left", ["set"]], ["add", "theorem", "mul_antidiagonal_mono_right", ["set"]], ["add", "theorem", "swap_mem_mul_antidiagonal", ["set"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["add", "theorem", "submonoid_closure", ["set", "is_pwo"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["del", "theorem", "is_pwo", ["finset"]], ["add", "theorem", "is_pwo_bUnion", ["finset"]], ["mod", "theorem", "is_pwo_sup", ["finset"]], ["del", "theorem", "is_pwo_support_mul_antidiagonal", ["finset"]], ["del", "theorem", "is_wf", ["finset"]], ["add", "theorem", "is_wf_bUnion", ["finset"]], ["mod", "theorem", "is_wf_sup", ["finset"]], ["del", "theorem", "mem_mul_antidiagonal", ["finset"]], ["del", "theorem", "mul_antidiagonal_min_mul_min", ["finset"]], ["del", "theorem", "mul_antidiagonal_mono_left", ["finset"]], ["del", "theorem", "mul_antidiagonal_mono_right", ["finset"]], ["del", "theorem", "partially_well_ordered_on", ["finset"]], ["add", "theorem", "partially_well_ordered_on_bUnion", ["finset"]], ["add", "theorem", "partially_well_ordered_on_sup", ["finset"]], ["del", "theorem", "support_mul_antidiagonal_subset_mul", ["finset"]], ["del", "theorem", "well_founded_on", ["finset"]], ["add", "theorem", "well_founded_on_bUnion", ["finset"]], ["add", "theorem", "well_founded_on_sup", ["finset"]], ["mod", "theorem", "finite_of_partially_well_ordered_on", ["is_antichain"]], ["mod", "theorem", "partially_well_ordered_on_iff", ["is_antichain"]], ["mod", "theorem", "is_pwo", ["pi"]], ["del", "theorem", "is_pwo", ["set", "finite"]], ["del", "theorem", "partially_well_ordered_on", ["set", "finite"]], ["del", "theorem", "is_pwo", ["set", "fintype"]], ["mod", "theorem", "exists_monotone_subseq", ["set", "is_pwo"]], ["mod", "theorem", "image_of_monotone", ["set", "is_pwo"]], ["add", "theorem", "image_of_monotone_on", ["set", "is_pwo"]], ["del", "theorem", "insert", ["set", "is_pwo"]], ["del", "theorem", "is_wf", ["set", "is_pwo"]], ["mod", "theorem", "mono", ["set", "is_pwo"]], ["del", "theorem", "mul", ["set", "is_pwo"]], ["mod", "theorem", "prod", ["set", "is_pwo"]], ["del", "theorem", "submonoid_closure", ["set", "is_pwo"]], ["del", "theorem", "union", ["set", "is_pwo"]], ["mod", "def", "is_pwo", ["set"]], ["mod", "theorem", "is_pwo_empty", ["set"]], ["add", "theorem", "is_pwo_insert", ["set"]], ["add", "theorem", "is_pwo_of_finite", ["set"]], ["mod", "theorem", "is_pwo_singleton", ["set"]], ["add", "theorem", "is_pwo_union", ["set"]], ["add", "theorem", "insert", ["set", "is_wf"]], ["del", "theorem", "is_pwo", ["set", "is_wf"]], ["mod", "theorem", "le_min_iff", ["set", "is_wf"]], ["mod", "theorem", "min_le", ["set", "is_wf"]], ["del", "theorem", "min_mul", ["set", "is_wf"]], ["mod", "theorem", "mono", ["set", "is_wf"]], ["del", "theorem", "mul", ["set", "is_wf"]], ["del", "theorem", "union", ["set", "is_wf"]], ["mod", "theorem", "is_wf_iff_is_pwo", ["set"]], ["mod", "theorem", "is_wf_iff_no_descending_seq", ["set"]], ["add", "theorem", "is_wf_insert", ["set"]], ["add", "theorem", "is_wf_singleton", ["set"]], ["add", "theorem", "is_wf_union", ["set"]], ["del", "theorem", "eq_of_fst_eq_fst", ["set", "mul_antidiagonal"]], ["del", "theorem", "eq_of_fst_le_fst_of_snd_le_snd", ["set", "mul_antidiagonal"]], ["del", "theorem", "eq_of_snd_eq_snd", ["set", "mul_antidiagonal"]], ["del", "theorem", "finite_of_is_pwo", ["set", "mul_antidiagonal"]], ["del", "theorem", "finite_of_is_wf", ["set", "mul_antidiagonal"]], ["del", "theorem", "fst_eq_fst_iff_snd_eq_snd", ["set", "mul_antidiagonal"]], ["del", "theorem", "mem_mul_antidiagonal", ["set", "mul_antidiagonal"]], ["del", "def", "mul_antidiagonal", ["set"]], ["mod", "theorem", "exists_monotone_subseq", ["set", "partially_well_ordered_on"]], ["mod", "theorem", "iff_not_exists_is_min_bad_seq", ["set", "partially_well_ordered_on"]], ["mod", "theorem", "image_of_monotone_on", ["set", "partially_well_ordered_on"]], ["mod", "theorem", "mono", ["set", "partially_well_ordered_on"]], ["add", "theorem", "union", ["set", "partially_well_ordered_on"]], ["mod", "theorem", "well_founded_on", ["set", "partially_well_ordered_on"]], ["mod", "def", "partially_well_ordered_on", ["set"]], ["mod", "theorem", "partially_well_ordered_on_empty", ["set"]], ["mod", "theorem", "partially_well_ordered_on_iff_exists_monotone_subseq", ["set"]], ["mod", "theorem", "partially_well_ordered_on_iff_finite_antichains", ["set"]], ["add", "theorem", "partially_well_ordered_on_insert", ["set"]], ["add", "theorem", "partially_well_ordered_on_singleton", ["set"]], ["add", "theorem", "partially_well_ordered_on_union", ["set"]], ["del", "theorem", "induction", ["set", "well_founded_on"]], ["add", "theorem", "insert", ["set", "well_founded_on"]], ["add", "theorem", "subset", ["set", "well_founded_on"]], ["add", "theorem", "union", ["set", "well_founded_on"]], ["mod", "def", "well_founded_on", ["set"]], ["mod", "theorem", "well_founded_on_iff", ["set"]], ["mod", "theorem", "well_founded_on_iff_no_descending_seq", ["set"]], ["add", "theorem", "well_founded_on_insert", ["set"]], ["add", "theorem", "well_founded_on_singleton", ["set"]], ["add", "theorem", "well_founded_on_union", ["set"]], ["mod", "theorem", "is_wf", ["well_founded"]]]}, {"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["mod", "def", "to_power_series", ["hahn_series"]]]}]}, {"timestamp": 1661376450, "sha": "f1f166b2", "message": "feat(geometry/euclidean/oriented_angle): angles equal to 0 or π (#16229)\nAdd lemmas about various conditions for oriented angles between two\nvectors to equal 0 or π.", "changes": [{"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["add", "theorem", "oangle_eq_pi_iff_oangle_rev_eq_pi", ["orientation"]], ["add", "theorem", "oangle_eq_pi_iff_same_ray_neg", ["orientation"]], ["add", "theorem", "oangle_eq_zero_iff_oangle_rev_eq_zero", ["orientation"]], ["add", "theorem", "oangle_eq_zero_iff_same_ray", ["orientation"]], ["add", "theorem", "oangle_eq_zero_or_eq_pi_iff_not_linear_independent", ["orientation"]], ["add", "theorem", "oangle_eq_zero_or_eq_pi_iff_right_eq_smul", ["orientation"]], ["add", "theorem", "oangle_ne_zero_and_ne_pi_iff_linear_independent", ["orientation"]], ["add", "theorem", "oangle_eq_pi_iff_oangle_rev_eq_pi", ["orthonormal"]], ["add", "theorem", "oangle_eq_pi_iff_same_ray_neg", ["orthonormal"]], ["add", "theorem", "oangle_eq_zero_iff_oangle_rev_eq_zero", ["orthonormal"]], ["add", "theorem", "oangle_eq_zero_iff_same_ray", ["orthonormal"]], ["add", "theorem", "oangle_eq_zero_or_eq_pi_iff_not_linear_independent", ["orthonormal"]], ["add", "theorem", "oangle_eq_zero_or_eq_pi_iff_right_eq_smul", ["orthonormal"]], ["add", "theorem", "oangle_ne_zero_and_ne_pi_iff_linear_independent", ["orthonormal"]]]}]}, {"timestamp": 1661376449, "sha": "a51c2fd2", "message": "feat(topology/separation): add `eq_on_closure₂` (#16206)\nAlso use it to golf `submonoid.comm_monoid_topological_closure`.", "changes": [{"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "eq_on_closure₂'", []], ["add", "theorem", "eq_on_closure₂", []]]}]}, {"timestamp": 1661376448, "sha": "62740866", "message": "refactor(algebra/order/{monoid_lemmas_zero_lt + ring} + crumbs) remove duplicate lemmas (#16189)\nThis is one of the cleaning up stages of the `order` refactor. This PR removes some of the lemmas for ordered semirings that are now superfluous.\nTo keep things simple, the new lemmas are in the `zero_lt` namespace and we export this namespace. Probably, this will not stay this way once the tide of unsuccessful builds washes away.\nThe plan for this PR is to align names and order of explicit hypotheses in the `zero_lt` file with the lemmas in `ring`, in order to delete them. This will likely involve changing a few extra files, but I'm hoping to seriously contain the diff outside of these two files.\nI want to thank @negiizhao who has been a great help in taking over and pushing forward the refactor!", "changes": [{"oldPath": "archive/imo/imo1972_q5.lean", "newPath": "archive/imo/imo1972_q5.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["mod", "theorem", "le_mul_of_one_le_left", ["zero_lt"]], ["mod", "theorem", "le_mul_of_one_le_right", ["zero_lt"]], ["del", "theorem", "le_of_le_mul_of_le_one_left", ["zero_lt"]], ["add", "theorem", "le_of_le_mul_of_le_one_of_nonneg_left", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_of_one_le_left", ["zero_lt"]], ["add", "theorem", "le_of_mul_le_of_one_le_nonneg_right", ["zero_lt"]], ["add", "theorem", "le_of_mul_le_of_one_le_of_nonneg_left", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_of_one_le_right", ["zero_lt"]], ["mod", "theorem", "lt_mul_of_one_lt_left", ["zero_lt"]], ["mod", "theorem", "lt_mul_of_one_lt_right", ["zero_lt"]], ["add", "theorem", "mul_le_mul", ["zero_lt"]], ["del", "theorem", "mul_le_mul_iff_left", ["zero_lt"]], ["del", "theorem", "mul_le_mul_iff_right", ["zero_lt"]], ["del", "theorem", "mul_le_mul_left'", ["zero_lt"]], ["mod", "theorem", "mul_le_mul_left", ["zero_lt"]], ["add", "theorem", "mul_le_mul_left_of_le_of_pos", ["zero_lt"]], ["del", "theorem", "mul_le_mul_of_le_of_le'", ["zero_lt"]], ["add", "theorem", "mul_le_mul_of_nonneg_left", ["zero_lt"]], ["add", "theorem", "mul_le_mul_of_nonneg_right", ["zero_lt"]], ["del", "theorem", "mul_le_mul_right'", ["zero_lt"]], ["mod", "theorem", "mul_le_mul_right", ["zero_lt"]], ["add", "theorem", "mul_le_mul_right_of_le_of_pos", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_of_le_one'", ["zero_lt"]], ["mod", "theorem", "mul_le_of_le_one_left", ["zero_lt"]], ["mod", "theorem", "mul_le_of_le_one_right", ["zero_lt"]], ["del", "theorem", "mul_left_cancel_iff", ["zero_lt"]], ["add", "theorem", "mul_left_cancel_iff_of_pos", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_iff_left", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_iff_right", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_left'", ["zero_lt"]], ["mod", "theorem", "mul_lt_mul_left", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_right'", ["zero_lt"]], ["mod", "theorem", "mul_lt_mul_right", ["zero_lt"]], ["mod", "theorem", "mul_lt_of_lt_one_left", ["zero_lt"]], ["mod", "theorem", "mul_lt_of_lt_one_right", ["zero_lt"]], ["add", "theorem", "mul_nonneg_le_one_le", ["zero_lt"]], ["del", "theorem", "mul_right_cancel_iff", ["zero_lt"]], ["add", "theorem", "mul_right_cancel_iff_of_pos", ["zero_lt"]], ["add", "theorem", "zero_lt_mul_left", ["zero_lt"]], ["add", "theorem", "zero_lt_mul_right", ["zero_lt"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "le_mul_iff_one_le_left", []], ["del", "theorem", "le_mul_iff_one_le_right", []], ["del", "theorem", "le_mul_of_one_le_left", []], ["del", "theorem", "le_mul_of_one_le_right", []], ["del", "theorem", "lt_mul_iff_one_lt_left", []], ["del", "theorem", "lt_mul_iff_one_lt_right", []], ["del", "theorem", "lt_mul_left", []], ["del", "theorem", "lt_mul_of_one_lt_left", []], ["del", "theorem", "lt_mul_of_one_lt_right", []], ["del", "theorem", "lt_mul_right", []], ["del", "theorem", "lt_of_mul_lt_mul_left", []], ["del", "theorem", "lt_of_mul_lt_mul_right", []], ["mod", "theorem", "lt_two_mul_self", []], ["del", "theorem", "mul_le_iff_le_one_left", []], ["del", "theorem", "mul_le_iff_le_one_right", []], ["del", "theorem", "mul_le_mul", []], ["del", "theorem", "mul_le_mul_left", []], ["del", "theorem", "mul_le_mul_of_nonneg_left", []], ["del", "theorem", "mul_le_mul_of_nonneg_right", []], ["del", "theorem", "mul_le_mul_right", []], ["del", "theorem", "mul_le_of_le_one_left", []], ["del", "theorem", "mul_le_of_le_one_right", []], ["del", "theorem", "mul_lt_iff_lt_one_left", []], ["del", "theorem", "mul_lt_iff_lt_one_right", []], ["del", "theorem", "mul_lt_mul_left", []], ["del", "theorem", "mul_lt_mul_right", []], ["del", "theorem", "mul_lt_of_lt_one_left", []], ["del", "theorem", "mul_lt_of_lt_one_right", []], ["del", "theorem", "mul_neg_of_neg_of_pos", []], ["del", "theorem", "mul_neg_of_pos_of_neg", []], ["del", "theorem", "mul_nonneg", []], ["del", "theorem", "mul_nonneg_le_one_le", []], ["del", "theorem", "mul_nonpos_of_nonneg_of_nonpos", []], ["del", "theorem", "mul_nonpos_of_nonpos_of_nonneg", []], ["del", "theorem", "mul_pos", []], ["del", "theorem", "neg_iff_neg_of_mul_pos", []], ["del", "theorem", "neg_of_mul_pos_left", []], ["del", "theorem", "neg_of_mul_pos_right", []], ["del", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", []], ["del", "theorem", "pos_iff_pos_of_mul_pos", []], ["del", "theorem", "pos_of_mul_pos_left", []], ["del", "theorem", "pos_of_mul_pos_right", []], ["del", "theorem", "zero_lt_mul_left", []], ["del", "theorem", "zero_lt_mul_right", []]]}, {"oldPath": "src/analysis/specific_limits/floor_pow.lean", "newPath": "src/analysis/specific_limits/floor_pow.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}]}, {"timestamp": 1661376447, "sha": "093c5036", "message": "feat(category_theory/strong_epi): various results about strong_epi (#16182)\nIn order to prepare for the proof of the existence of strong epi mono factorisations in `simplex_category` (which shall be used for the Dold-Kan correspondence), various results are obtained, mostly about strong epimorphisms (and strong monomorphisms). If two arrows are isomorphic, then one is a strong epi iff the other is. An equivalence of categories preserves and reflects strong epimorphisms.", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "theorem", "congr_left", ["category_theory", "arrow", "hom"]], ["add", "theorem", "congr_right", ["category_theory", "arrow", "hom"]], ["add", "def", "iso_of_nat_iso", ["category_theory", "arrow"]], ["add", "theorem", "iso_w'", ["category_theory", "arrow"]], ["add", "theorem", "iso_w", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["add", "theorem", "bijective_of_is_iso", ["category_theory", "concrete_category"]]]}, {"oldPath": "src/category_theory/functor/epi_mono.lean", "newPath": "src/category_theory/functor/epi_mono.lean", "changes": [["add", "theorem", "strong_epi_map_of_strong_epi", ["category_theory", "adjunction"]], ["add", "theorem", "is_split_epi_iff", ["category_theory", "functor"]], ["add", "theorem", "is_split_mono_iff", ["category_theory", "functor"]], ["add", "theorem", "strong_epi_map_iff_strong_epi_of_is_equivalence", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/lifting_properties/basic.lean", "newPath": "src/category_theory/lifting_properties/basic.lean", "changes": [["add", "theorem", "iff_of_arrow_iso_left", ["category_theory", "has_lifting_property"]], ["add", "theorem", "iff_of_arrow_iso_right", ["category_theory", "has_lifting_property"]], ["add", "theorem", "of_arrow_iso_left", ["category_theory", "has_lifting_property"]], ["add", "theorem", "of_arrow_iso_right", ["category_theory", "has_lifting_property"]]]}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": [["add", "theorem", "iff_of_arrow_iso", ["category_theory", "strong_epi"]], ["add", "theorem", "of_arrow_iso", ["category_theory", "strong_epi"]], ["add", "theorem", "iff_of_arrow_iso", ["category_theory", "strong_mono"]], ["add", "theorem", "of_arrow_iso", ["category_theory", "strong_mono"]]]}]}, {"timestamp": 1661366056, "sha": "f5afe205", "message": "split(analysis/normed/group/seminorm): Split off `analysis.seminorm` (#16152)\nMove `group_seminorm` and `add_group_seminorm` to a new file `analysis.normed.group.seminorm`. Move `norm_add_group_seminorm` to `analysis.normed.group.basic`. Remove the `nonneg` field from `add_group_seminorm` and `group_seminorm` because it is redundant.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "coe_norm_add_group_seminorm", []], ["add", "def", "norm_add_group_seminorm", []]]}, {"oldPath": null, "newPath": "src/analysis/normed/group/seminorm.lean", "changes": [["add", "theorem", "coe_smul", ["add_group_seminorm"]], ["add", "theorem", "smul_apply", ["add_group_seminorm"]], ["add", "theorem", "smul_sup", ["add_group_seminorm"]], ["add", "structure", "add_group_seminorm", []], ["add", "theorem", "add_apply", ["group_seminorm"]], ["add", "theorem", "add_comp", ["group_seminorm"]], ["add", "theorem", "coe_add", ["group_seminorm"]], ["add", "theorem", "coe_comp", ["group_seminorm"]], ["add", "theorem", "coe_le_coe", ["group_seminorm"]], ["add", "theorem", "coe_lt_coe", ["group_seminorm"]], ["add", "theorem", "coe_smul", ["group_seminorm"]], ["add", "theorem", "coe_sup", ["group_seminorm"]], ["add", "theorem", "coe_zero", ["group_seminorm"]], ["add", "def", "comp", ["group_seminorm"]], ["add", "theorem", "comp_apply", ["group_seminorm"]], ["add", "theorem", "comp_assoc", ["group_seminorm"]], ["add", "theorem", "comp_id", ["group_seminorm"]], ["add", "theorem", "comp_mono", ["group_seminorm"]], ["add", "theorem", "comp_mul_le", ["group_seminorm"]], ["add", "theorem", "comp_zero", ["group_seminorm"]], ["add", "theorem", "div_rev", ["group_seminorm"]], ["add", "theorem", "ext", ["group_seminorm"]], ["add", "theorem", "inf_apply", ["group_seminorm"]], ["add", "theorem", "le_def", ["group_seminorm"]], ["add", "theorem", "le_insert'", ["group_seminorm"]], ["add", "theorem", "le_insert", ["group_seminorm"]], ["add", "theorem", "lt_def", ["group_seminorm"]], ["add", "theorem", "smul_apply", ["group_seminorm"]], ["add", "theorem", "smul_sup", ["group_seminorm"]], ["add", "theorem", "sup_apply", ["group_seminorm"]], ["add", "theorem", "zero_apply", ["group_seminorm"]], ["add", "theorem", "zero_comp", ["group_seminorm"]], ["add", "structure", "group_seminorm", []]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["del", "theorem", "coe_smul", ["add_group_seminorm"]], ["del", "theorem", "smul_apply", ["add_group_seminorm"]], ["del", "theorem", "smul_sup", ["add_group_seminorm"]], ["del", "structure", "add_group_seminorm", []], ["del", "theorem", "coe_norm_add_group_seminorm", []], ["del", "theorem", "add_apply", ["group_seminorm"]], ["del", "theorem", "add_comp", ["group_seminorm"]], ["del", "theorem", "coe_add", ["group_seminorm"]], ["del", "theorem", "coe_comp", ["group_seminorm"]], ["del", "theorem", "coe_le_coe", ["group_seminorm"]], ["del", "theorem", "coe_lt_coe", ["group_seminorm"]], ["del", "theorem", "coe_smul", ["group_seminorm"]], ["del", "theorem", "coe_sup", ["group_seminorm"]], ["del", "theorem", "coe_zero", ["group_seminorm"]], ["del", "def", "comp", ["group_seminorm"]], ["del", "theorem", "comp_apply", ["group_seminorm"]], ["del", "theorem", "comp_assoc", ["group_seminorm"]], ["del", "theorem", "comp_id", ["group_seminorm"]], ["del", "theorem", "comp_mono", ["group_seminorm"]], ["del", "theorem", "comp_mul_le", ["group_seminorm"]], ["del", "theorem", "comp_zero", ["group_seminorm"]], ["del", "theorem", "div_rev", ["group_seminorm"]], ["del", "theorem", "ext", ["group_seminorm"]], ["del", "theorem", "inf_apply", ["group_seminorm"]], ["del", "theorem", "le_def", ["group_seminorm"]], ["del", "theorem", "le_insert'", ["group_seminorm"]], ["del", "theorem", "le_insert", ["group_seminorm"]], ["del", "theorem", "lt_def", ["group_seminorm"]], ["del", "theorem", "smul_apply", ["group_seminorm"]], ["del", "theorem", "smul_sup", ["group_seminorm"]], ["del", "theorem", "sup_apply", ["group_seminorm"]], ["del", "theorem", "zero_apply", ["group_seminorm"]], ["del", "theorem", "zero_comp", ["group_seminorm"]], ["del", "structure", "group_seminorm", []], ["del", "def", "norm_add_group_seminorm", []]]}]}, {"timestamp": 1661366055, "sha": "81afa2cb", "message": "feat(data/polynomial/module): Some api for `polynomial_module`. (#16126)", "changes": [{"oldPath": "src/data/polynomial/module.lean", "newPath": "src/data/polynomial/module.lean", "changes": [["add", "def", "comp", ["polynomial_module"]], ["add", "theorem", "comp_eval", ["polynomial_module"]], ["add", "theorem", "comp_single", ["polynomial_module"]], ["add", "theorem", "comp_smul", ["polynomial_module"]], ["add", "def", "eval", ["polynomial_module"]], ["add", "theorem", "eval_map'", ["polynomial_module"]], ["add", "theorem", "eval_map", ["polynomial_module"]], ["add", "theorem", "eval_single", ["polynomial_module"]], ["add", "theorem", "eval_smul", ["polynomial_module"]], ["add", "def", "map", ["polynomial_module"]], ["add", "theorem", "map_single", ["polynomial_module"]], ["add", "theorem", "map_smul", ["polynomial_module"]]]}]}, {"timestamp": 1661366053, "sha": "fc5b2d2e", "message": "feat(algebraic_topology/dold_kan): the normalized Moore complex is a direct factor of the alternating face map complex (#16071)\nIn this PR, we show that when the category `A` is abelian, there is an isomorphism `N₁_iso_to_karoubi_normalized A` between\nthe functor `N₁ : simplicial_object A ⥤ karoubi (chain_complex A ℕ)` defined in `functor_n.lean` and the composition of `normalized_Moore_complex A` with the inclusion `chain_complex A ℕ ⥤ karoubi (chain_complex A ℕ)`.\n(In particular, the normalized Moore complex is a direct factor of the alternating face map complex.)", "changes": [{"oldPath": "src/algebraic_topology/Moore_complex.lean", "newPath": "src/algebraic_topology/Moore_complex.lean", "changes": [["add", "theorem", "normalized_Moore_complex_obj_d", ["algebraic_topology"]]]}, {"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/normalized.lean", "changes": [["add", "def", "N₁_iso_normalized_Moore_complex_comp_to_karoubi", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_infty_comp_P_infty_to_normalized_Moore_complex", ["algebraic_topology", "dold_kan"]], ["add", "def", "P_infty_to_normalized_Moore_complex", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_infty_to_normalized_Moore_complex_comp_inclusion_of_Moore_complex_map", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_infty_to_normalized_Moore_complex_naturality", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "factors_normalized_Moore_complex_P_infty", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "inclusion_of_Moore_complex_map", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "theorem", "inclusion_of_Moore_complex_map_comp_P_infty", ["algebraic_topology", "dold_kan"]], ["add", "def", "split_mono_inclusion_of_Moore_complex_map", ["algebraic_topology", "dold_kan"]]]}, {"oldPath": "src/algebraic_topology/dold_kan/p_infty.lean", "newPath": "src/algebraic_topology/dold_kan/p_infty.lean", "changes": [["add", "theorem", "P_infty_f_0", ["algebraic_topology", "dold_kan"]]]}]}, {"timestamp": 1661366052, "sha": "0be7214f", "message": "feat(category_theory/currying): bifunctor version of whiskering_right (#15504)\nThis cannot go in `category_theory/whiskering` because this file is imported indirectly by `category_theory/functor/currying`. Hopefully it is ok to put it in `category_theory/functor/currying`.\n- [x] depends on: #15445", "changes": [{"oldPath": "src/category_theory/functor/currying.lean", "newPath": "src/category_theory/functor/currying.lean", "changes": [["add", "def", "whiskering_right₂", ["category_theory"]]]}]}, {"timestamp": 1661366051, "sha": "96ed4226", "message": "feat(order/heyting_algebra): Heyting algebras (#15305)\nDefine (generalized) Heyting, co-Heyting and bi-Heyting algebras.\nNo lemma has been renamed, even though this might look like so from the diff.\n`himp` is now a field of `boolean_algebra`, with default value `λ x y, y ⊔ xᶜ`.\n## Duplicated lemmas\nThose lemmas have been duplicated because they are true for Heyting algebras but are also used to prove that Boolean algebras are Heyting algebras:\n* `sdiff_le'`\n* `inf_compl_eq_bot'`\n## Changes to argument implicitness\n* `sdiff_inf_self_left`\n* `sdiff_inf_self_right`", "changes": [{"oldPath": "src/analysis/box_integral/partition/filter.lean", "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": []}, {"oldPath": "src/combinatorics/set_family/kleitman.lean", "newPath": "src/combinatorics/set_family/kleitman.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "sdiff_inter_self_left", ["finset"]], ["mod", "theorem", "sdiff_inter_self_right", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "diff_self_inter", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": [["mod", "theorem", "ae_disjoint_compl_left", ["measure_theory"]], ["mod", "theorem", "ae_disjoint_compl_right", ["measure_theory"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["del", "theorem", "bot_sdiff", []], ["del", "theorem", "compl_bot", []], ["del", "theorem", "compl_inf_eq_bot", []], ["del", "theorem", "compl_le_compl", []], ["del", "theorem", "compl_sup", []], ["del", "theorem", "compl_top", []], ["del", "theorem", "disjoint_sdiff_left", ["disjoint"]], ["del", "theorem", "disjoint_sdiff_right", ["disjoint"]], ["del", "theorem", "disjoint_compl_left", []], ["del", "theorem", "disjoint_compl_right", []], ["add", "theorem", "himp_eq", []], ["add", "theorem", "hnot_eq_compl", []], ["add", "theorem", "inf_compl_eq_bot'", []], ["del", "theorem", "inf_compl_eq_bot", []], ["mod", "theorem", "inf_sdiff_right", []], ["mod", "theorem", "is_compl_compl", []], ["del", "theorem", "le_compl_iff_disjoint_left", []], ["del", "theorem", "le_compl_iff_disjoint_right", []], ["del", "theorem", "le_sdiff_sup", []], ["del", "theorem", "le_sup_sdiff", []], ["del", "theorem", "of_dual_compl", []], ["del", "theorem", "bot_eq", ["punit"]], ["del", "theorem", "compl_eq", ["punit"]], ["del", "theorem", "inf_eq", ["punit"]], ["del", "theorem", "sdiff_eq", ["punit"]], ["del", "theorem", "sup_eq", ["punit"]], ["del", "theorem", "top_eq", ["punit"]], ["del", "theorem", "sdiff_bot", []], ["mod", "theorem", "sdiff_compl", []], ["del", "theorem", "sdiff_eq_bot_iff", []], ["del", "theorem", "sdiff_inf", []], ["del", "theorem", "sdiff_inf_self_left", []], ["del", "theorem", "sdiff_inf_self_right", []], ["add", "theorem", "sdiff_le'", []], ["del", "theorem", "sdiff_le", []], ["del", "theorem", "sdiff_le_comm", []], ["del", "theorem", "sdiff_le_iff", []], ["del", "theorem", "sdiff_le_sdiff", []], ["del", "theorem", "sdiff_le_sdiff_left", []], ["del", "theorem", "sdiff_le_sdiff_right", []], ["del", "theorem", "sdiff_self", []], ["del", "theorem", "sdiff_top", []], ["mod", "theorem", "sup_sdiff_left", []], ["mod", "theorem", "sup_sdiff_right", []], ["del", "theorem", "to_dual_compl", []], ["mod", "theorem", "top_sdiff", []]]}, {"oldPath": null, "newPath": "src/order/heyting/basic.lean", "changes": [["add", "theorem", "bot_himp", []], ["add", "theorem", "bot_sdiff", []], ["add", "theorem", "codisjoint_hnot_hnot_left_iff", []], ["add", "theorem", "codisjoint_hnot_hnot_right_iff", []], ["add", "theorem", "codisjoint_hnot_left", []], ["add", "theorem", "codisjoint_hnot_right", []], ["add", "def", "of_hnot", ["coheyting_algebra"]], ["add", "def", "of_sdiff", ["coheyting_algebra"]], ["add", "theorem", "compl_anti", []], ["add", "theorem", "compl_bot", []], ["add", "theorem", "compl_compl_compl", []], ["add", "theorem", "compl_compl_himp_distrib", []], ["add", "theorem", "compl_compl_inf_distrib", []], ["add", "theorem", "compl_iff_not", []], ["add", "theorem", "compl_inf_eq_bot", []], ["add", "theorem", "compl_inf_self", []], ["add", "theorem", "compl_le_compl", []], ["add", "theorem", "compl_le_himp", []], ["add", "theorem", "compl_le_hnot", []], ["add", "theorem", "compl_sup", []], ["add", "theorem", "compl_sup_compl_le", []], ["add", "theorem", "compl_sup_distrib", []], ["add", "theorem", "compl_sup_le_himp", []], ["add", "theorem", "compl_top", []], ["add", "theorem", "disjoint_sdiff_left", ["disjoint"]], ["add", "theorem", "disjoint_sdiff_right", ["disjoint"]], ["add", "theorem", "disjoint_compl_compl_left_iff", []], ["add", "theorem", "disjoint_compl_compl_right_iff", []], ["add", "theorem", "disjoint_compl_left", []], ["add", "theorem", "disjoint_compl_right", []], ["add", "theorem", "fst_compl", []], ["add", "theorem", "fst_himp", []], ["add", "theorem", "fst_hnot", []], ["add", "theorem", "fst_sdiff", []], ["add", "def", "of_compl", ["heyting_algebra"]], ["add", "def", "of_himp", ["heyting_algebra"]], ["add", "theorem", "himp_bot", []], ["add", "theorem", "himp_compl", []], ["add", "theorem", "himp_compl_comm", []], ["add", "theorem", "himp_eq_top_iff", []], ["add", "theorem", "himp_himp", []], ["add", "theorem", "himp_iff_imp", []], ["add", "theorem", "himp_inf_distrib", []], ["add", "theorem", "himp_inf_le", []], ["add", "theorem", "himp_inf_self", []], ["add", "theorem", "himp_le_himp", []], ["add", "theorem", "himp_le_himp_himp", []], ["add", "theorem", "himp_le_himp_left", []], ["add", "theorem", "himp_le_himp_right", []], ["add", "theorem", "himp_left_comm", []], ["add", "theorem", "himp_self", []], ["add", "theorem", "himp_top", []], ["add", "theorem", "hnot_anti", []], ["add", "theorem", "hnot_bot", []], ["add", "theorem", "hnot_hnot_hnot", []], ["add", "theorem", "hnot_hnot_le", []], ["add", "theorem", "hnot_hnot_sdiff_distrib", []], ["add", "theorem", "hnot_hnot_sup_distrib", []], ["add", "theorem", "hnot_inf_distrib", []], ["add", "theorem", "hnot_le_comm", []], ["add", "theorem", "hnot_le_hnot", []], ["add", "theorem", "hnot_le_iff_codisjoint_left", []], ["add", "theorem", "hnot_le_iff_codisjoint_right", []], ["add", "theorem", "hnot_sdiff", []], ["add", "theorem", "hnot_sdiff_comm", []], ["add", "theorem", "hnot_sup_self", []], ["add", "theorem", "hnot_top", []], ["add", "theorem", "inf_compl_eq_bot", []], ["add", "theorem", "inf_compl_self", []], ["add", "theorem", "inf_himp", []], ["add", "theorem", "inf_himp_le", []], ["add", "theorem", "le_compl_comm", []], ["add", "theorem", "le_compl_compl", []], ["add", "theorem", "le_compl_iff_disjoint_left", []], ["add", "theorem", "le_compl_iff_disjoint_right", []], ["add", "theorem", "le_himp", []], ["add", "theorem", "le_himp_comm", []], ["add", "theorem", "le_himp_iff", []], ["add", "theorem", "le_himp_iff_left", []], ["add", "theorem", "le_hnot_inf_hnot", []], ["add", "theorem", "le_sdiff_sup", []], ["add", "theorem", "le_sup_sdiff", []], ["add", "def", "to_biheyting_algebra", ["linear_order"]], ["add", "theorem", "of_dual_compl", []], ["add", "theorem", "of_dual_himp", []], ["add", "theorem", "of_dual_hnot", []], ["add", "theorem", "himp_apply", ["pi"]], ["add", "theorem", "himp_def", ["pi"]], ["add", "theorem", "hnot_apply", ["pi"]], ["add", "theorem", "hnot_def", ["pi"]], ["add", "theorem", "bot_eq", ["punit"]], ["add", "theorem", "compl_eq", ["punit"]], ["add", "theorem", "himp_eq", ["punit"]], ["add", "theorem", "hnot_eq", ["punit"]], ["add", "theorem", "inf_eq", ["punit"]], ["add", "theorem", "sdiff_eq", ["punit"]], ["add", "theorem", "sup_eq", ["punit"]], ["add", "theorem", "top_eq", ["punit"]], ["add", "theorem", "sdiff_bot", []], ["add", "theorem", "sdiff_eq_bot_iff", []], ["add", "theorem", "sdiff_inf", []], ["add", "theorem", "sdiff_inf_distrib", []], ["add", "theorem", "sdiff_inf_self_left", []], ["add", "theorem", "sdiff_inf_self_right", []], ["add", "theorem", "sdiff_le", []], ["add", "theorem", "sdiff_le_comm", []], ["add", "theorem", "sdiff_le_hnot", []], ["add", "theorem", "sdiff_le_iff", []], ["add", "theorem", "sdiff_le_iff_left", []], ["add", "theorem", "sdiff_le_inf_hnot", []], ["add", "theorem", "sdiff_le_sdiff", []], ["add", "theorem", "sdiff_le_sdiff_left", []], ["add", "theorem", "sdiff_le_sdiff_right", []], ["add", "theorem", "sdiff_right_comm", []], ["add", "theorem", "sdiff_sdiff", []], ["add", "theorem", "sdiff_sdiff_le_sdiff", []], ["add", "theorem", "sdiff_self", []], ["add", "theorem", "sdiff_sup_self", []], ["add", "theorem", "sdiff_top", []], ["add", "theorem", "snd_compl", []], ["add", "theorem", "snd_himp", []], ["add", "theorem", "snd_hnot", []], ["add", "theorem", "snd_sdiff", []], ["add", "theorem", "sup_compl_le_himp", []], ["add", "theorem", "sup_himp_distrib", []], ["add", "theorem", "sup_himp_self_left", []], ["add", "theorem", "sup_himp_self_right", []], ["add", "theorem", "sup_hnot_self", []], ["add", "theorem", "sup_sdiff_distrib", []], ["add", "theorem", "sup_sdiff_self", []], ["add", "theorem", "to_dual_compl", []], ["add", "theorem", "to_dual_hnot", []], ["add", "theorem", "to_dual_sdiff", []], ["add", "theorem", "top_himp", []], ["add", "theorem", "top_sdiff'", []]]}]}, {"timestamp": 1661366050, "sha": "4e64a3fa", "message": "feat(algebra/category): forgetful functors from modules/abelian groups preserve epis/monos (#15108)\nThe corresponding `reflects` statements already follow from faithfulness.", "changes": [{"oldPath": "src/algebra/category/Group/epi_mono.lean", "newPath": "src/algebra/category/Group/epi_mono.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/epi_mono.lean", "newPath": "src/algebra/category/Module/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["add", "def", "has_forget_to_Type", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor/epi_mono.lean", "newPath": "src/category_theory/functor/epi_mono.lean", "changes": [["add", "theorem", "preserves_epimorphisms_of_preserves_of_reflects", ["category_theory", "functor"]], ["add", "theorem", "preserves_monomorphisms_of_preserves_of_reflects", ["category_theory", "functor"]], ["add", "theorem", "reflects_epimorphisms_of_preserves_of_reflects", ["category_theory", "functor"]], ["add", "theorem", "reflects_monomorphisms_of_preserves_of_reflects", ["category_theory", "functor"]]]}]}, {"timestamp": 1661355979, "sha": "40427f78", "message": "feat(analysis/special_functions/trigonometric/angle): continuity and signs (#16204)\nAdd the lemmas that `real.angle.sign` is continuous away from 0 and π,\nand thus that any function to angles that is continuous on a connected\nset and does not take the value 0 or π on that set produces angles\nwith constant sign on that set (this is a general principle for use in\nproving results about when two oriented angles in a geometrical\nconfiguration must have the same sign).", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "angle_sign_comp", ["continuous_on"]], ["add", "theorem", "continuous_at_sign", ["real", "angle"]], ["add", "theorem", "sign_eq_of_continuous_on", ["real", "angle"]]]}]}, {"timestamp": 1661355978, "sha": "730cde34", "message": "feat(algebra/order/monoid): a canonically ordered add monoid has `0 ≤ 1` (#16199)", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}]}, {"timestamp": 1661344574, "sha": "63f2525e", "message": "chore(data/finset/pi_induction): fix lint (#16224)", "changes": [{"oldPath": "src/data/finset/pi_induction.lean", "newPath": "src/data/finset/pi_induction.lean", "changes": []}]}, {"timestamp": 1661344572, "sha": "3339976e", "message": "refactor(topology/constructions): rename `continuous_subtype_mk` (#16223)\n* rename `continuous_subtype_mk` to `continuous.subtype_mk` to allow dot notation;\n* add `continuous.subtype_map`.", "changes": [{"oldPath": "src/algebraic_topology/topological_simplex.lean", "newPath": "src/algebraic_topology/topological_simplex.lean", "changes": []}, {"oldPath": "src/analysis/convex/contractible.lean", "newPath": "src/analysis/convex/contractible.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/unit_ball.lean", "newPath": "src/analysis/normed/field/unit_ball.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/ball_sphere.lean", "newPath": "src/analysis/normed/group/ball_sphere.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["mod", "theorem", "continuous_norm", []]]}, {"oldPath": "src/analysis/normed_space/ball_action.lean", "newPath": "src/analysis/normed_space/ball_action.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": []}, {"oldPath": "src/dynamics/flow.lean", "newPath": "src/dynamics/flow.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/proj_Icc.lean", "newPath": "src/topology/algebra/order/proj_Icc.lean", "changes": []}, {"oldPath": "src/topology/algebra/semigroup.lean", "newPath": "src/topology/algebra/semigroup.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/default.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "subtype_map", ["continuous"]], ["add", "theorem", "subtype_mk", ["continuous"]], ["del", "theorem", "continuous_subtype_mk", []]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_nat.lean", "newPath": "src/topology/metric_space/pi_nat.lean", "changes": []}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "subtype_mk", ["uniform_continuous"]], ["del", "theorem", "uniform_continuous_subtype_mk", []]]}, {"oldPath": "src/topology/uniform_space/equiv.lean", "newPath": "src/topology/uniform_space/equiv.lean", "changes": []}]}, {"timestamp": 1661344570, "sha": "839b92fe", "message": "feat(data/nat/enat): new file (#16217)\nDefine `enat := with_top nat`, use notation.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/analysis/calculus/affine_map.lean", "newPath": "src/analysis/calculus/affine_map.lean", "changes": [["mod", "theorem", "cont_diff", ["continuous_affine_map"]]]}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["mod", "theorem", "continuous_iterated_fderiv", ["cont_diff"]], ["mod", "theorem", "differentiable_iterated_fderiv", ["cont_diff"]], ["mod", "def", "cont_diff_at", []], ["mod", "theorem", "cont_diff_clm_apply", []], ["mod", "theorem", "cont_diff_on_clm_apply", []], ["mod", "def", "cont_diff_within_at", []], ["mod", "structure", "has_ftaylor_series_up_to", []], ["mod", "structure", "has_ftaylor_series_up_to_on", []]]}, {"oldPath": "src/analysis/calculus/fderiv_analytic.lean", "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": [["mod", "theorem", "cont_diff_on", ["analytic_on"]]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": [["mod", "theorem", "continuous_iterated_deriv", ["cont_diff"]], ["mod", "theorem", "differentiable_iterated_deriv", ["cont_diff"]], ["mod", "theorem", "cont_diff_iff_iterated_deriv", []], ["mod", "theorem", "cont_diff_of_differentiable_iterated_deriv", []], ["mod", "theorem", "continuous_on_iterated_deriv_within", ["cont_diff_on"]], ["mod", "theorem", "differentiable_on_iterated_deriv_within", ["cont_diff_on"]], ["mod", "theorem", "cont_diff_on_iff_continuous_on_differentiable_on_deriv", []], ["mod", "theorem", "cont_diff_on_of_continuous_on_differentiable_on_deriv", []], ["mod", "theorem", "cont_diff_on_of_differentiable_on_deriv", []]]}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["mod", "theorem", "cont_diff_normed", ["cont_diff_bump_of_inner"]]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": [["mod", "theorem", "real_of_complex", ["cont_diff"]], ["mod", "theorem", "real_of_complex", ["cont_diff_at"]]]}, {"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": [["mod", "theorem", "cont_diff_at_euclidean", []], ["mod", "theorem", "cont_diff_euclidean", []], ["mod", "theorem", "cont_diff_on_euclidean", []], ["mod", "theorem", "cont_diff_within_at_euclidean", []]]}, {"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": [["mod", "theorem", "cont_diff_arsinh", ["real"]]]}, {"oldPath": "src/analysis/special_functions/complex/log_deriv.lean", "newPath": "src/analysis/special_functions/complex/log_deriv.lean", "changes": [["mod", "theorem", "cont_diff_at_log", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": [["mod", "theorem", "cont_diff_at_log", ["real"]], ["mod", "theorem", "cont_diff_on_log", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow_deriv.lean", "newPath": "src/analysis/special_functions/pow_deriv.lean", "changes": [["mod", "theorem", "cont_diff_at_rpow_const_of_ne", ["real"]], ["mod", "theorem", "cont_diff_at_rpow_of_ne", ["real"]]]}, {"oldPath": "src/analysis/special_functions/sqrt.lean", "newPath": "src/analysis/special_functions/sqrt.lean", "changes": [["mod", "theorem", "cont_diff_at_sqrt", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "changes": [["mod", "theorem", "cont_diff_arctan", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": [["mod", "theorem", "cont_diff_at_tan", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "changes": [["mod", "theorem", "cont_diff_at_arccos", ["real"]], ["mod", "theorem", "cont_diff_at_arccos_iff", ["real"]], ["mod", "theorem", "cont_diff_at_arcsin", ["real"]], ["mod", "theorem", "cont_diff_at_arcsin_iff", ["real"]], ["mod", "theorem", "cont_diff_on_arccos", ["real"]], ["mod", "theorem", "cont_diff_on_arcsin", ["real"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["del", "theorem", "add_one_le_of_lt", ["with_top"]], ["del", "theorem", "nat_induction", ["with_top"]], ["del", "theorem", "one_le_iff_pos", ["with_top"]]]}, {"oldPath": null, "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "add_one_le_iff", ["enat"]], ["add", "theorem", "add_one_le_of_lt", ["enat"]], ["add", "theorem", "coe_add", ["enat"]], ["add", "theorem", "coe_mul", ["enat"]], ["add", "theorem", "coe_one", ["enat"]], ["add", "theorem", "coe_sub", ["enat"]], ["add", "theorem", "coe_zero", ["enat"]], ["add", "theorem", "le_of_lt_add_one", ["enat"]], ["add", "theorem", "nat_induction", ["enat"]], ["add", "theorem", "one_le_iff_ne_zero", ["enat"]], ["add", "theorem", "one_le_iff_pos", ["enat"]], ["add", "theorem", "succ_def", ["enat"]], ["add", "def", "to_nat", ["enat"]], ["add", "def", "enat", []]]}, {"oldPath": "src/data/nat/part_enat.lean", "newPath": "src/data/nat/part_enat.lean", "changes": [["mod", "def", "to_with_top", ["part_enat"]], ["mod", "theorem", "with_top_equiv_symm_le", ["part_enat"]], ["mod", "theorem", "with_top_equiv_symm_lt", ["part_enat"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["mod", "theorem", "coeff_eq_zero_of_trailing_degree_lt", ["polynomial"]], ["mod", "theorem", "le_trailing_degree_C", ["polynomial"]], ["mod", "theorem", "le_trailing_degree_X", ["polynomial"]], ["mod", "theorem", "ne_zero_of_trailing_degree_lt", ["polynomial"]], ["mod", "def", "trailing_degree", ["polynomial"]], ["mod", "theorem", "trailing_degree_C", ["polynomial"]], ["mod", "theorem", "trailing_degree_one", ["polynomial"]], ["mod", "theorem", "trailing_degree_one_le", ["polynomial"]]]}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["mod", "theorem", "cont_diff_within_at_local_invariant_prop", []], ["mod", "def", "cont_diff_within_at_prop", []], ["mod", "theorem", "cont_diff_within_at_prop_mono", []], ["mod", "def", "cont_mdiff", []], ["mod", "def", "cont_mdiff_at", []], ["mod", "theorem", "cont_mdiff_at_iff", []], ["mod", "def", "cont_mdiff_on", []], ["mod", "def", "cont_mdiff_within_at", []]]}, {"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/hitting_time.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1661344568, "sha": "474f96ac", "message": "feat(geometry/euclidean/oriented_angle): more on relation to unoriented angles (#16215)\nAdd more lemmas about the relation of oriented and unoriented angles;\nin particular, some involving `real.angle.to_real` and\n`real.angle.sign`.", "changes": [{"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["add", "theorem", "angle_eq_abs_oangle_to_real", ["orientation"]], ["add", "theorem", "eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero", ["orientation"]], ["add", "theorem", "oangle_eq_iff_angle_eq_of_sign_eq", ["orientation"]], ["add", "theorem", "oangle_eq_of_angle_eq_of_sign_eq", ["orientation"]], ["add", "theorem", "oangle_eq_pi_iff_angle_eq_pi", ["orientation"]], ["add", "theorem", "oangle_eq_zero_iff_angle_eq_zero", ["orientation"]], ["add", "theorem", "angle_eq_abs_oangle_to_real", ["orthonormal"]], ["add", "theorem", "eq_zero_or_angle_eq_zero_or_pi_of_sign_oangle_eq_zero", ["orthonormal"]], ["add", "theorem", "oangle_eq_iff_angle_eq_of_sign_eq", ["orthonormal"]], ["add", "theorem", "oangle_eq_of_angle_eq_of_sign_eq", ["orthonormal"]], ["add", "theorem", "oangle_eq_pi_iff_angle_eq_pi", ["orthonormal"]], ["add", "theorem", "oangle_eq_zero_iff_angle_eq_zero", ["orthonormal"]]]}]}, {"timestamp": 1661344567, "sha": "9b759111", "message": "feat(algebra/order): lemmas about `cmp` and arithmetic operations (#16207)", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "cmp_div_one'", []]]}, {"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["add", "theorem", "cmp_mul_left'", []], ["add", "theorem", "cmp_mul_right'", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "cmp_mul_neg_left", []], ["add", "theorem", "cmp_mul_neg_right", []], ["add", "theorem", "cmp_mul_pos_left", []], ["add", "theorem", "cmp_mul_pos_right", []]]}]}, {"timestamp": 1661333721, "sha": "7362d50a", "message": "feat(topology/sheaves/sheaf_condition/opens_le_cover): generalize universe (#16214)\n+ Generalize universe levels in the sheaf condition `opens_le_cover` on topological spaces and its equivalence with the sheaf condition on sites, allowing three different universe parameters as in `Top.{w}`, `C : Type u` and `category.{v} C`. To be used in #15934.\n+ Generalize universes for the sheaf condition `pairwise_intersection` on topological spaces. This sheaf condition also doesn't require any assumption on the category `C`, and its equivalence with `opens_le_cover` could also have universe levels at maximal generality; however, the proof `is_sheaf_opens_le_cover_iff_is_sheaf_pairwise_intersections` breaks due to the `small_category` restriction on [category_theory.functor.initial.is_limit_whisker_equiv](https://leanprover-community.github.io/mathlib_docs/category_theory/limits/final.html#category_theory.functor.initial.is_limit_whisker_equiv), which will take more work to fix, so we do not generalize the equivalence at this time.\n+ Generalize universes for `Top.presheaf.pushforward`; pullback is not generalized because it would need `has_colimits_of_size`. `Top.sheaf.pushforward` is not yet generalized.\n+ Fixate the universe level of [Top.presheaf](https://leanprover-community.github.io/mathlib_docs/topology/sheaves/presheaf.html#Top.presheaf) to be the same as [Top.sheaf](https://leanprover-community.github.io/mathlib_docs/topology/sheaves/sheaf.html#Top.sheaf).", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["mod", "theorem", "comp_val_c", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["mod", "theorem", "id_pushforward", ["Top", "presheaf"]], ["mod", "def", "pushforward", ["Top", "presheaf"]], ["mod", "theorem", "pushforward_map_app'", ["Top", "presheaf"]], ["mod", "def", "presheaf", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": [["mod", "theorem", "is_sheaf_opens_le_cover_iff_is_sheaf_pairwise_intersections", ["Top", "presheaf"]], ["mod", "def", "opens_le_cover", ["Top", "presheaf", "sheaf_condition"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1661333719, "sha": "912a310a", "message": "refactor(category_theory/morphism_property): stable_under_base_change (#16196)\nThis PR redefines `morphism_property.stable_under_base_change P`. This condition now states that for all pullback squares (`is_pullback`), the left map satisfies the property if the right map does. Then, it is automatic that the property `P` respects isos. A constructor is provided to take as an input the assumption that `P` respects isos and the previous condition that if a map `g` satisfies `P`, then `pullback.fst : pullback f g → _` satisfies it `P`.", "changes": [{"oldPath": "src/algebraic_geometry/morphisms/basic.lean", "newPath": "src/algebraic_geometry/morphisms/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": [["add", "theorem", "of_horiz_is_iso", ["category_theory", "is_pullback"]], ["add", "theorem", "of_vert_is_iso", ["category_theory", "is_pullback"]]]}, {"oldPath": "src/category_theory/morphism_property.lean", "newPath": "src/category_theory/morphism_property.lean", "changes": [["add", "theorem", "of_respects_arrow_iso", ["category_theory", "morphism_property", "respects_iso"]], ["mod", "theorem", "fst", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "mk", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "respects_iso", ["category_theory", "morphism_property", "stable_under_base_change"]], ["mod", "theorem", "snd", ["category_theory", "morphism_property", "stable_under_base_change"]], ["mod", "def", "stable_under_base_change", ["category_theory", "morphism_property"]]]}]}, {"timestamp": 1661333718, "sha": "53b79573", "message": "feat(analysis/normed_space/basic): if `E` is a `normed_space` over `ℚ` then `ℤ ∙ e` is discrete for any `e` in `E` (#16135)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_zsmul", []]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "zpowers_one_eq_bot", ["subgroup"]]]}]}, {"timestamp": 1661333716, "sha": "214f197b", "message": "refactor(field_theory/*): Move and golf `alg_hom.fintype` (#16114)\nThis PR moves `alg_hom.fintype` to `minpoly.lean` so that it can be used later (e.g., in `normal.lean`).", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["del", "theorem", "aux_inj_roots_of_min_poly", []]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "aux_inj_roots_of_min_poly", ["minpoly"]]]}]}, {"timestamp": 1661333715, "sha": "7f06271e", "message": "feat(algebraic_geometry/limits): Empty scheme is initial. (#16086)", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["del", "def", "empty", ["algebraic_geometry", "Scheme"]], ["add", "def", "{u}", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/limits.lean", "changes": [["add", "theorem", "empty_ext", ["algebraic_geometry", "Scheme"]], ["add", "def", "empty_to", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "eq_empty_to", ["algebraic_geometry", "Scheme"]], ["add", "def", "Spec_Z_is_terminal", ["algebraic_geometry"]], ["add", "def", "Spec_punit_is_initial", ["algebraic_geometry"]], ["add", "theorem", "bot_is_affine_open", ["algebraic_geometry"]], ["add", "def", "empty_is_initial", ["algebraic_geometry"]], ["add", "theorem", "empty_is_initial_to", ["algebraic_geometry"]], ["add", "def", "is_initial_of_is_empty", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "theorem", "is_iso_iff_is_open_immersion", ["algebraic_geometry"]], ["add", "theorem", "is_iso_iff_stalk_iso", ["algebraic_geometry"]], ["add", "theorem", "iff_stalk_iso", ["algebraic_geometry", "is_open_immersion"]], ["add", "theorem", "of_stalk_iso", ["algebraic_geometry", "is_open_immersion"]], ["add", "theorem", "to_iso", ["algebraic_geometry", "is_open_immersion"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "theorem", "is_sheaf_of_is_terminal", ["category_theory", "presheaf"]]]}]}, {"timestamp": 1661333714, "sha": "fa0bbc79", "message": "feat(algebra/order/floor): `floor`/`ceil` are preserved under order ring homs (#16025)\n`⌊f a⌋ = ⌊a⌋`, `⌈f a⌉ = ⌈a⌉` and similar for `f` a strictly monotone ring homomorphism.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "ceil_congr", ["int"]], ["add", "theorem", "floor_congr", ["int"]], ["add", "theorem", "map_ceil", ["int"]], ["add", "theorem", "map_floor", ["int"]], ["add", "theorem", "map_fract", ["int"]], ["add", "theorem", "map_round", ["int"]], ["add", "theorem", "ceil_congr", ["nat"]], ["add", "theorem", "floor_congr", ["nat"]], ["add", "theorem", "map_ceil", ["nat"]], ["add", "theorem", "map_floor", ["nat"]]]}, {"oldPath": "src/algebra/order/hom/monoid.lean", "newPath": "src/algebra/order/hom/monoid.lean", "changes": [["add", "theorem", "map_nonneg", []], ["add", "theorem", "map_nonpos", []]]}]}, {"timestamp": 1661333713, "sha": "a9402e0a", "message": "refactor(algebraic_geometry/*): Make `LocallyRingedSpace.hom` a custom structure. (#15973)\nWe also define `algebraic_geometry.Scheme.hom` as an type alias for morphisms between schemes to enable\ndot notation.", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "def", "hom", ["algebraic_geometry", "Scheme"]], ["del", "theorem", "id_coe_base", ["algebraic_geometry", "Scheme"]], ["mod", "theorem", "id_val_base", ["algebraic_geometry", "Scheme"]], ["del", "theorem", "preimage_basic_open'", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/gluing.lean", "newPath": "src/algebraic_geometry/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "structure", "hom", ["algebraic_geometry", "LocallyRingedSpace"]], ["del", "def", "hom", ["algebraic_geometry", "LocallyRingedSpace"]], ["del", "theorem", "hom_ext", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/basic.lean", "newPath": "src/algebraic_geometry/morphisms/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/morphisms/ring_hom_properties.lean", "newPath": "src/algebraic_geometry/morphisms/ring_hom_properties.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "opens_functor", ["algebraic_geometry", "Scheme", "hom"]], ["add", "def", "opens_range", ["algebraic_geometry", "Scheme", "hom"]], ["add", "theorem", "image_basic_open", ["algebraic_geometry", "Scheme"]], ["del", "theorem", "image_basic_open", ["algebraic_geometry", "is_open_immersion"]], ["del", "def", "opens_range", ["algebraic_geometry", "is_open_immersion"]]]}]}, {"timestamp": 1661333712, "sha": "94f13c65", "message": "feat(ring_theory/localization/away): finitely presented as R[X]/(rX-1) (#12455)\n+ Show `localization.away r` is isomorphic to `R[X]/(rX-1)` (implemented as `adjoin_root (C r * X - 1)`) as `R`-algebras: `localization.away_equiv_adjoin`. Lemmas introduced for this purpose are: `alg_hom_ext`, `root_is_inv` and `alg_hom_subsingleton` under namespace `adjoin_root`, `ideal.quotient.alg_hom_ext`, `is_localization.away.mul_inv_self`, and `is_localization.alg_hom_subsingleton` (which says any two R-alg_hom from from a localization of R to another R-algebra are equal).\n+ Deduce that the R-algebra S is finitely presented if S is a localization of R away from some `r : R`: `is_localization.away.finite_presentation`. Lemmas introduced for this purpose are `algebra.finite_presentation.polynomial` and `adjoin_root.finite_presentation`, and the `finite_type` versions are also added.\n+ Golf `algebra.finite_finite_type/presentation.mv_polynomial` and fix typo in `mem_adjoint_support`.", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "alg_hom_ext", ["adjoin_root"]], ["add", "theorem", "alg_hom_subsingleton", ["adjoin_root"]], ["add", "theorem", "finite_presentation", ["adjoin_root"]], ["add", "theorem", "finite_type", ["adjoin_root"]], ["add", "theorem", "root_is_inv", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "polynomial", ["algebra", "finite_presentation"]], ["add", "theorem", "mem_adjoin_support", ["monoid_algebra"]], ["del", "theorem", "mem_adjoint_support", ["monoid_algebra"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "alg_hom_ext", ["ideal", "quotient"]]]}, {"oldPath": "src/ring_theory/localization/away.lean", "newPath": "src/ring_theory/localization/away.lean", "changes": [["add", "theorem", "adjoin_inv", ["is_localization"]], ["add", "theorem", "finite_presentation", ["is_localization", "away"]], ["add", "theorem", "mul_inv_self", ["is_localization", "away"]]]}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "theorem", "alg_hom_subsingleton", ["is_localization"]]]}]}, {"timestamp": 1661324405, "sha": "44de64f1", "message": "chore(algebra/order/with_zero): Move unrelated lemmas (#15676)\nMove a bunch of lemmas that were not about `whatever_with_zero` from `algebra.order.with_zero` to `algebra.group_power.order`. Delete `nat.le_zero_iff` in favor of `le_zero_iff`.", "changes": [{"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "one_le_pow_of_le", ["left"]], ["add", "theorem", "pow_le_one_of_le", ["left"]], ["add", "theorem", "pow_lt_one_iff", ["left"]], ["add", "theorem", "pow_lt_one_of_lt", ["left"]], ["add", "theorem", "map_neg", ["monoid_hom"]], ["add", "theorem", "map_neg_one", ["monoid_hom"]], ["add", "theorem", "map_sub_swap", ["monoid_hom"]], ["mod", "theorem", "pow_le_pow_of_le_left'", []], ["add", "theorem", "pow_lt_pow_succ", []], ["add", "theorem", "pow_lt_pow₀", []], ["add", "theorem", "pow_pos_iff", []], ["add", "theorem", "one_le_pow_of_le", ["right"]], ["add", "theorem", "pow_le_one_of_le", ["right"]], ["add", "theorem", "pow_lt_one_iff", ["right"]], ["add", "theorem", "pow_lt_one_of_lt", ["right"]]]}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["del", "theorem", "one_le_pow_of_le", ["left"]], ["del", "theorem", "pow_lt_one_iff", ["left"]], ["del", "theorem", "pow_lt_one_of_lt", ["left"]], ["del", "theorem", "map_neg", ["monoid_hom"]], ["del", "theorem", "map_neg_one", ["monoid_hom"]], ["del", "theorem", "map_sub_swap", ["monoid_hom"]], ["del", "theorem", "pow_le_pow_of_le", []], ["del", "theorem", "pow_lt_pow_succ", []], ["del", "theorem", "pow_lt_pow₀", []], ["del", "theorem", "pow_pos_iff", []], ["del", "theorem", "one_le_pow_of_le", ["right"]], ["del", "theorem", "pow_le_one_of_le", ["right"]], ["del", "theorem", "pow_lt_one_iff", ["right"]], ["del", "theorem", "pow_lt_one_of_lt", ["right"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": []}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "le_zero_iff", ["nat"]]]}, {"oldPath": "src/data/nat/choose/factorization.lean", "newPath": "src/data/nat/choose/factorization.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/polynomial/unit_trinomial.lean", "newPath": "src/data/polynomial/unit_trinomial.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/information_theory/hamming.lean", "newPath": "src/information_theory/hamming.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1661318466, "sha": "6cc2de23", "message": "feat(analysis/complex/arg): `same_ray_iff_arg_div_eq_zero` (#16218)\nAdd the lemma that `same_ray ℝ x y ↔ arg (x / y) = 0`.", "changes": [{"oldPath": "src/analysis/complex/arg.lean", "newPath": "src/analysis/complex/arg.lean", "changes": [["add", "theorem", "same_ray_iff_arg_div_eq_zero", ["complex"]]]}]}, {"timestamp": 1661318464, "sha": "757e73c5", "message": "feat(data/seq/seq): prove `seq.ext` earlier (#15830)\nWe heavily golf `seq.ext` and move it to almost the beginning of the file. Doing this breaks the proof of `seq.of_list_cons`, which we also change and golf by adding a few trivial `simp` lemmas (not all of them are needed, but might as well add them).", "changes": [{"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["add", "theorem", "nth_cons_succ", ["seq"]], ["add", "theorem", "nth_cons_zero", ["seq"]], ["add", "theorem", "nth_mk", ["seq"]], ["add", "theorem", "nth_nil", ["seq"]], ["mod", "theorem", "nth_tail", ["seq"]], ["mod", "theorem", "of_list_cons", ["seq"]], ["add", "theorem", "of_list_nth", ["seq"]]]}]}, {"timestamp": 1661312454, "sha": "04763f32", "message": "feat(group_theory/index): `card_dvd_of_surjective` (#16133)\nMathlib already has `card_dvd_of_injective : fintype.card G ∣ fintype.card H`\nThis PR adds:\n`nat_card_dvd_of_injective : nat.card G ∣ nat.card H`\n`nat_card_dvd_of_surjective : nat.card H ∣ nat.card G`\n`card_dvd_of_surjective : fintype.card H ∣ fintype.card G`", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "card_dvd_of_surjective", ["subgroup"]], ["add", "theorem", "nat_card_dvd_of_injective", ["subgroup"]], ["add", "theorem", "nat_card_dvd_of_surjective", ["subgroup"]]]}]}, {"timestamp": 1661273913, "sha": "6f1ad825", "message": "chore(algebra/algebra/spectrum): generalize some spectrum results from `alg_hom` to `alg_hom_class` (#16177)\n- [x] depends on: #16178", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["mod", "theorem", "apply_mem_spectrum", ["alg_hom"]], ["mod", "theorem", "mem_resolvent_set_apply", ["alg_hom"]], ["mod", "theorem", "spectrum_apply_subset", ["alg_hom"]]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "coe_to_continuous_linear_map", ["alg_hom"]], ["del", "theorem", "continuous", ["alg_hom"]], ["mod", "def", "to_continuous_linear_map", ["alg_hom"]]]}, {"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": []}]}, {"timestamp": 1661273912, "sha": "cf9eb049", "message": "feat(topology/metric_space): Add first countability instances (#15942)\nThis PR proves the following two facts:\n- pseudo-metric/metrizable spaces are first countable\n- uniform groups that have a countably generated neighborhood at the origin have a countably generated uniformity\nThe instance for uniform groups allows for an easy way to prove that a topological group is metrizable, since the neighborhood filter is a more common object than the uniformity.\nIn total this PR gives the proof that a topological group is metrizable iff it the neighborhood filter at the origin is countably generated.", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "uniformity_countably_generated", ["uniform_group"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": []}]}, {"timestamp": 1661269852, "sha": "e919421b", "message": "feat(category_theory): functors preserving epis and kernels are exact (#16129)", "changes": [{"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "exact_iff_exact_coimage_π", ["category_theory", "abelian"]], ["add", "theorem", "exact_iff_exact_image_ι", ["category_theory", "abelian"]], ["mod", "def", "preserves_finite_colimits_of_map_exact", ["category_theory", "functor"]], ["add", "def", "preserves_finite_colimits_of_preserves_epis_and_kernels", ["category_theory", "functor"]], ["mod", "def", "preserves_finite_limits_of_map_exact", ["category_theory", "functor"]], ["add", "def", "preserves_finite_limits_of_preserves_monos_and_cokernels", ["category_theory", "functor"]]]}]}, {"timestamp": 1661266634, "sha": "02128fe4", "message": "feat(topology/algebra/module/character_space): add facts about `character_space.union_zero` (#16209)\nThis adds that the `character_space` along with the zero map is a closed subspace of the `weak_dual`. \nThe point of this is eventually to show that in the non-unital case, the `character_space` is a locally compact Hausdorff space, under appropriate assumptions.", "changes": [{"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": [["add", "theorem", "union_zero", ["weak_dual", "character_space"]], ["add", "theorem", "union_zero_is_closed", ["weak_dual", "character_space"]]]}]}, {"timestamp": 1661250760, "sha": "f089486a", "message": "feat(analysis/special_functions/trigonometric): add `real.abs_sinh` (#16211)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": [["add", "theorem", "abs_sinh", ["real"]]]}]}, {"timestamp": 1661250759, "sha": "f399d3a3", "message": "feat(analysis/special_functions/complex/arg): relation to `real.angle.to_real` (#16205)\nAdd two lemmas about the fact that `real.angle.to_real` is the inverse\nof coercing the result of `complex.arg` to `real.angle`. Thus, give\nthe existing lemma `arg_coe_angle_eq_iff` a much shorter proof.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_coe_angle_eq_iff_eq_to_real", ["complex"]], ["add", "theorem", "arg_coe_angle_to_real_eq_arg", ["complex"]]]}]}, {"timestamp": 1661250757, "sha": "0abbdc08", "message": "chore(algebra/algebra/basic): some helper lemmas for linear maps over algebras (#16200)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_algebra_map_mul", ["linear_map"]], ["add", "theorem", "map_mul_algebra_map", ["linear_map"]]]}]}, {"timestamp": 1661250756, "sha": "9bc7dfa6", "message": "chore(*): golfs with rsufficesI (#16197)", "changes": [{"oldPath": "src/algebra/algebraic_card.lean", "newPath": "src/algebra/algebraic_card.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/lifting.lean", "newPath": "src/category_theory/adjunction/lifting.lean", "changes": []}, {"oldPath": "src/category_theory/functor/flat.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": []}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1661250755, "sha": "aeb7facf", "message": "feat(data/rat/cast): add lemmas, golf (#16194)\n* add `rat.cast_strict_mono`, `rat.cast_strict_mono`, and `rat.cast_order_embedding`;\n* use these lemmas to prove `rat.cast_le` etc;\n* add `rat.preimage_cast_Ixx`.", "changes": [{"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_abs", ["rat"]], ["add", "theorem", "cast_eq_id", ["rat"]], ["mod", "theorem", "cast_hom_rat", ["rat"]], ["mod", "theorem", "cast_id", ["rat"]], ["mod", "theorem", "cast_le", ["rat"]], ["mod", "theorem", "cast_lt", ["rat"]], ["mod", "theorem", "cast_lt_zero", ["rat"]], ["mod", "theorem", "cast_max", ["rat"]], ["mod", "theorem", "cast_min", ["rat"]], ["add", "theorem", "cast_mono", ["rat"]], ["mod", "theorem", "cast_nonneg", ["rat"]], ["mod", "theorem", "cast_nonpos", ["rat"]], ["add", "def", "cast_order_embedding", ["rat"]], ["mod", "theorem", "cast_pos", ["rat"]], ["add", "theorem", "cast_pos_of_pos", ["rat"]], ["add", "theorem", "cast_strict_mono", ["rat"]], ["add", "theorem", "preimage_cast_Icc", ["rat"]], ["add", "theorem", "preimage_cast_Ici", ["rat"]], ["add", "theorem", "preimage_cast_Ico", ["rat"]], ["add", "theorem", "preimage_cast_Iic", ["rat"]], ["add", "theorem", "preimage_cast_Iio", ["rat"]], ["add", "theorem", "preimage_cast_Ioc", ["rat"]], ["add", "theorem", "preimage_cast_Ioi", ["rat"]], ["add", "theorem", "preimage_cast_Ioo", ["rat"]]]}]}, {"timestamp": 1661250754, "sha": "62ac221e", "message": "feat(group_theory/subgroup/basic): Add `map_is_commutative` and `comap_injective_is_commutative` (#16109)\nThis PR adds `map_is_commutative` and `comap_injective_is_commutative`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "comap_injective_is_commutative", ["subgroup"]]]}]}, {"timestamp": 1661250753, "sha": "fadfe79b", "message": "chore(set_theory/surreal/basic): remove unnecessary namespace prefixes (#14585)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["del", "def", "equiv", ["surreal"]]]}]}, {"timestamp": 1661242993, "sha": "c205fe15", "message": "chore(order/conditionally_complete_lattice): golf three proofs (#16064)", "changes": [{"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "cinfi_set", []], ["del", "theorem", "csupr_set", []]]}]}, {"timestamp": 1661232818, "sha": "0ac6ba04", "message": "feat(analysis/special_functions/trigonometric/angle): `pi_ne_zero` (#16203)\nAdd the lemma that `(π : angle) ≠ 0`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "pi_ne_zero", ["real", "angle"]]]}]}, {"timestamp": 1661232817, "sha": "40213d84", "message": "feat(data/finset/lattice): four lemmas about non-membership and max/min (#16192)\nThese four lemmas were proved and used by Eric in his decidable version of `finsupp.lex`, replacing my previous undecidable one.\nThey are extracted from #15984 (now closed) and used in #16127 (which replaces the closed PR).\nAuthored-by: Eric Wieser <[wieser.eric@gmail.com](mailto:wieser.eric@gmail.com)>\nSubmitted by me :smile:", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "not_mem_of_coe_lt_min", ["finset"]], ["add", "theorem", "not_mem_of_lt_min", ["finset"]], ["add", "theorem", "not_mem_of_max_lt", ["finset"]], ["add", "theorem", "not_mem_of_max_lt_coe", ["finset"]]]}]}, {"timestamp": 1661223454, "sha": "26d0a538", "message": "fix(topology/continuous_function/basic): use `old_structure_cmd` to define `continuous_map_class` (#16164)\nWe fix `continuous_map_class` to use `old_structure_cmd`, and also fix the documentation of `fun_like` and `equiv_like` to specify that this should be done systematically for new morphism type classes. Without this, we get a `to_fun_like` field in the newly created class which then creates diamonds.", "changes": [{"oldPath": "src/data/fun_like/basic.lean", "newPath": "src/data/fun_like/basic.lean", "changes": []}, {"oldPath": "src/data/fun_like/equiv.lean", "newPath": "src/data/fun_like/equiv.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": "src/topology/spectral/hom.lean", "newPath": "src/topology/spectral/hom.lean", "changes": []}]}, {"timestamp": 1661210947, "sha": "8f9efd68", "message": "feat(topology/algebra/module/character_space): provide instances of `continuous_linear_map_class`, `non_unital_alg_hom_class` and `alg_hom_class` (#16178)\nThis updates `character_space` to utilize the new hom classes `continuous_linear_map_class`, `non_unital_alg_hom_class` and `alg_hom_class`. Also performs some minor housekeeping related to `simp` lemmas.", "changes": [{"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": [["del", "theorem", "coe_apply", ["weak_dual", "character_space"]], ["add", "theorem", "coe_coe", ["weak_dual", "character_space"]], ["add", "theorem", "coe_to_clm", ["weak_dual", "character_space"]], ["add", "theorem", "coe_to_non_unital_alg_hom", ["weak_dual", "character_space"]], ["del", "theorem", "continuous", ["weak_dual", "character_space"]], ["del", "theorem", "map_add", ["weak_dual", "character_space"]], ["del", "theorem", "map_mul", ["weak_dual", "character_space"]], ["del", "theorem", "map_one", ["weak_dual", "character_space"]], ["del", "theorem", "map_smul", ["weak_dual", "character_space"]], ["del", "theorem", "map_zero", ["weak_dual", "character_space"]], ["del", "theorem", "to_clm_apply", ["weak_dual", "character_space"]], ["mod", "def", "to_non_unital_alg_hom", ["weak_dual", "character_space"]]]}]}, {"timestamp": 1661205207, "sha": "abb635ff", "message": "feat(number_theory/legendre_symbol/quadratic_reciprocity): switch to Gauss sum proof, clean-up (#16171)\nThis PR is (for now) the final step in the quest to change the proof of Quadratic Reciprocity from using the Gauss and Eisenstein lemmas to using the results for quadratic characters of general finite fields obtained from properties of the quadratic Gauss sum. In addition, there is some clean-up of the file and some further results (e.g., on the quadratic character of `-2` and some versions of the law of quadratic reciprocity that are probably easier to use), and the documentation has been extended.\nThe Gauss and Eisenstein lemmas have been moved to `number_theory/legendre_symbol/gauss_eisenstein_lemmas` (where the auxiliary results needed for them have already been residing).\nI have opened a [topic](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2316171.20renovate.20quadratic.20reciprocity/near/294460241) on this under \"PR reviews\".", "changes": [{"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": [["add", "theorem", "eisenstein_lemma", ["legendre_symbol"]], ["add", "theorem", "gauss_lemma", ["legendre_symbol"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["del", "theorem", "quadratic_char_eq_one_of_char_two'", []], ["del", "theorem", "quadratic_char_eq_pow_of_char_ne_two''", []], ["mod", "theorem", "quadratic_char_eq_pow_of_char_ne_two'", []], ["del", "theorem", "quadratic_char_eq_zero_iff'", []], ["add", "theorem", "quadratic_char_fun_eq_one_of_char_two", []], ["add", "theorem", "quadratic_char_fun_eq_pow_of_char_ne_two", []], ["add", "theorem", "quadratic_char_fun_eq_zero_iff", []], ["add", "theorem", "quadratic_char_fun_mul", []], ["add", "theorem", "quadratic_char_fun_one", []], ["add", "theorem", "quadratic_char_fun_zero", []], ["del", "theorem", "quadratic_char_mul", []], ["del", "theorem", "quadratic_char_one", []], ["mod", "theorem", "quadratic_char_zero", []]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["del", "theorem", "eisenstein_lemma", ["zmod"]], ["mod", "theorem", "euler_criterion", ["zmod"]], ["mod", "theorem", "euler_criterion_units", ["zmod"]], ["add", "theorem", "exists_sq_eq_neg_two_iff", ["zmod"]], ["mod", "theorem", "exists_sq_eq_prime_iff_of_mod_four_eq_three", ["zmod"]], ["mod", "theorem", "exists_sq_eq_two_iff", ["zmod"]], ["del", "theorem", "gauss_lemma", ["zmod"]], ["mod", "def", "legendre_sym", ["zmod"]], ["add", "theorem", "legendre_sym_eq_neg_one_iff'", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_neg_one_iff", ["zmod"]], ["add", "theorem", "legendre_sym_eq_one_iff'", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_pow", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_zero_iff", ["zmod"]], ["mod", "def", "legendre_sym_hom", ["zmod"]], ["mod", "theorem", "legendre_sym_mod", ["zmod"]], ["mod", "theorem", "legendre_sym_mul", ["zmod"]], ["add", "theorem", "legendre_sym_neg_two", ["zmod"]], ["mod", "theorem", "legendre_sym_one", ["zmod"]], ["mod", "theorem", "legendre_sym_sq_one'", ["zmod"]], ["mod", "theorem", "legendre_sym_sq_one", ["zmod"]], ["mod", "theorem", "legendre_sym_two", ["zmod"]], ["mod", "theorem", "legendre_sym_zero", ["zmod"]], ["add", "theorem", "quadratic_reciprocity'", ["zmod"]], ["mod", "theorem", "quadratic_reciprocity", ["zmod"]], ["add", "theorem", "quadratic_reciprocity_one_mod_four", ["zmod"]], ["add", "theorem", "quadratic_reciprocity_three_mod_four", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/zmod_char.lean", "newPath": "src/number_theory/legendre_symbol/zmod_char.lean", "changes": [["add", "theorem", "neg_one_pow_div_two_of_one_mod_four", []], ["add", "theorem", "neg_one_pow_div_two_of_three_mod_four", []]]}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1661200418, "sha": "fa6e0243", "message": "feat(analysis/special_functions/trigonometric/angle): `to_real` (#16007)\nDefine `real.angle.to_real`, converting a `real.angle` to a real in\nthe interval `Ioc (-π) π` (the same interval used by `complex.arg`),\nand prove some associated lemmas. This is the inverse operation to\ncoercing the result of `complex.arg` to `real.angle`, and is also\nuseful for converting between oriented and unoriented angles.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "abs_to_real_coe_eq_self_iff", ["real", "angle"]], ["add", "theorem", "abs_to_real_le_pi", ["real", "angle"]], ["add", "theorem", "abs_to_real_neg_coe_eq_self_iff", ["real", "angle"]], ["add", "theorem", "coe_abs_to_real_of_sign_nonneg", ["real", "angle"]], ["add", "theorem", "coe_to_Ico_mod", ["real", "angle"]], ["add", "theorem", "coe_to_Ioc_mod", ["real", "angle"]], ["add", "theorem", "coe_to_real", ["real", "angle"]], ["add", "theorem", "cos_to_real", ["real", "angle"]], ["add", "theorem", "eq_iff_abs_to_real_eq_of_sign_eq", ["real", "angle"]], ["add", "theorem", "eq_iff_sign_eq_and_abs_to_real_eq", ["real", "angle"]], ["add", "theorem", "neg_coe_abs_to_real_of_sign_nonpos", ["real", "angle"]], ["add", "theorem", "neg_pi_lt_to_real", ["real", "angle"]], ["add", "theorem", "sign_to_real", ["real", "angle"]], ["add", "theorem", "sin_to_real", ["real", "angle"]], ["add", "theorem", "to_Ioc_mod_to_real", ["real", "angle"]], ["add", "def", "to_real", ["real", "angle"]], ["add", "theorem", "to_real_coe", ["real", "angle"]], ["add", "theorem", "to_real_coe_eq_self_iff", ["real", "angle"]], ["add", "theorem", "to_real_coe_eq_self_iff_mem_Ioc", ["real", "angle"]], ["add", "theorem", "to_real_eq_pi_iff", ["real", "angle"]], ["add", "theorem", "to_real_eq_zero_iff", ["real", "angle"]], ["add", "theorem", "to_real_inj", ["real", "angle"]], ["add", "theorem", "to_real_injective", ["real", "angle"]], ["add", "theorem", "to_real_le_pi", ["real", "angle"]], ["add", "theorem", "to_real_mem_Ioc", ["real", "angle"]], ["add", "theorem", "to_real_neg_iff_sign_neg", ["real", "angle"]], ["add", "theorem", "to_real_nonneg_iff_sign_nonneg", ["real", "angle"]], ["add", "theorem", "to_real_pi", ["real", "angle"]], ["add", "theorem", "to_real_zero", ["real", "angle"]]]}]}, {"timestamp": 1661196505, "sha": "841ac1a3", "message": "refactor(algebra/lie): replace local instance with type synonym (#16154)\nA Lie ring can be viewed as a `non_unital_non_assoc_semiring` by using its bracket operator as the multiplication. Defining this as an instance causes diamonds because all rings are also Lie rings, so there are two incompatible multiplications on the same type.\nInstead of the previous approach, of making this a `def` and only locally enabling the instance being careful not to cause diamonds, we use a type synonym that is guaranteed to have only one multiplication operator.\nSomeone who knows more about Lie theory should definitely check that the changes make mathematical sense.\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/.60lie_ring.2Eto_non_unital_non_assoc_semiring.60", "changes": [{"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": [["mod", "def", "lift_aux", ["free_lie_algebra"]], ["mod", "def", "mk", ["free_lie_algebra"]]]}, {"oldPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "changes": [["add", "def", "commutator_ring", []], ["mod", "def", "to_non_unital_alg_hom", ["lie_hom"]], ["del", "def", "to_non_unital_non_assoc_semiring", ["lie_ring"]]]}]}, {"timestamp": 1661172822, "sha": "0a31295e", "message": "feat(algebra/star/self_adjoint): add `star_mul_self`, `mul_star_self` and `star_hom_apply` (#16193)\nadd some basic missing lemmas in the `is_self_adjoint` namespace: that `star x * x`, `x * (star x)` are selfadjoint, and members of a `star_hom_class` preserve self-adjoint elements.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "mul_star_self", ["is_self_adjoint"]], ["add", "theorem", "star_hom_apply", ["is_self_adjoint"]], ["add", "theorem", "star_mul_self", ["is_self_adjoint"]]]}]}, {"timestamp": 1661166685, "sha": "00eb6910", "message": "feat(group_theory/free_group): norm of elements (#15503)\nThis PR adds to a new `free_group.metric` namespace some useful lemmas related to the word metric on the free group. This will be useful for defining the word metric for an arbitrary (marked) group.", "changes": [{"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["mod", "theorem", "inv_mk", ["free_group"]], ["add", "def", "inv_rev", ["free_group"]], ["add", "theorem", "inv_rev_bijective", ["free_group"]], ["add", "theorem", "inv_rev_empty", ["free_group"]], ["add", "theorem", "inv_rev_injective", ["free_group"]], ["add", "theorem", "inv_rev_inv_rev", ["free_group"]], ["add", "theorem", "inv_rev_involutive", ["free_group"]], ["add", "theorem", "inv_rev_length", ["free_group"]], ["add", "theorem", "inv_rev_surjective", ["free_group"]], ["add", "theorem", "mk_to_word", ["free_group"]], ["add", "def", "norm", ["free_group"]], ["add", "theorem", "norm_eq_zero", ["free_group"]], ["add", "theorem", "norm_inv_eq", ["free_group"]], ["add", "theorem", "norm_mk_le", ["free_group"]], ["add", "theorem", "norm_mul_le", ["free_group"]], ["add", "theorem", "norm_one", ["free_group"]], ["mod", "theorem", "antisymm", ["free_group", "red"]], ["add", "theorem", "inv_rev", ["free_group", "red"]], ["add", "theorem", "length_le", ["free_group", "red"]], ["add", "theorem", "reduce_left", ["free_group", "red"]], ["add", "theorem", "reduce_right", ["free_group", "red"]], ["add", "theorem", "inv_rev", ["free_group", "red", "step"]], ["add", "theorem", "step_inv_rev_iff", ["free_group", "red"]], ["del", "theorem", "sublist", ["free_group", "red"]], ["add", "theorem", "red_inv_rev_iff", ["free_group"]], ["mod", "theorem", "idem", ["free_group", "reduce"]], ["add", "theorem", "reduce_inv_rev", ["free_group"]], ["add", "theorem", "reduce_to_word", ["free_group"]], ["del", "theorem", "inj", ["free_group", "to_word"]], ["del", "theorem", "mk", ["free_group", "to_word"]], ["add", "theorem", "to_word_eq_nil_iff", ["free_group"]], ["add", "theorem", "to_word_inj", ["free_group"]], ["add", "theorem", "to_word_injective", ["free_group"]], ["add", "theorem", "to_word_inv", ["free_group"]], ["add", "theorem", "to_word_mk", ["free_group"]], ["add", "theorem", "to_word_one", ["free_group"]]]}]}, {"timestamp": 1661157648, "sha": "4970a17c", "message": "feat(list/basic): list.subset_singleton_iff (#16183)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "subset_singleton_iff", ["list"]]]}]}, {"timestamp": 1661157647, "sha": "cf7b16a6", "message": "chore(algebra/order/monoid): move lemmas (#16176)\n* move `with_top.coe_nat` to `algebra.order.monoid`, prove by `rfl`;\n* move `with_top.nat_ne_top` and `with_top.top_ne_nat` to `algebra.order.monoid`;\n* add `with_bot` versions.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "bot_ne_nat", ["with_bot"]], ["add", "theorem", "coe_nat", ["with_bot"]], ["add", "theorem", "nat_ne_bot", ["with_bot"]], ["add", "theorem", "coe_nat", ["with_top"]], ["add", "theorem", "nat_ne_top", ["with_top"]], ["add", "theorem", "top_ne_nat", ["with_top"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["del", "theorem", "coe_nat", ["with_top"]], ["del", "theorem", "nat_ne_top", ["with_top"]], ["del", "theorem", "top_ne_nat", ["with_top"]]]}]}, {"timestamp": 1661157646, "sha": "6a5a2b13", "message": "feat(data/rat/cast): drop an unneeded typeclass assumption (#15972)\n* drop `[char_zero _]` assumption in `map_rat_cast`;\n* golf `ring_hom.eq_rat_cast`, generalize to `ring_hom_class`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["mod", "theorem", "star_rat_cast", []]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "eq_rat_cast", []], ["mod", "theorem", "map_rat_cast", []], ["del", "theorem", "eq_rat_cast", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["mod", "theorem", "is_algebraic_rat", []]]}]}, {"timestamp": 1661148584, "sha": "07052296", "message": "feat(data/sym/basic): add nil coe lemma (#16181)\nadd simple coe lemma for sym.nil", "changes": [{"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["add", "theorem", "coe_nil", ["sym"]]]}]}, {"timestamp": 1661148583, "sha": "bfd28571", "message": "feat(algebra/order/ring): generalize some `mono` lemmas, use them (#14691)\n* generalize lemmas like `monotone_mul_left_of_nonneg` to `ordered_semiring`s, add `decidable.*` versions as needed;\n* add some `antitone` lemmas;\n* use these lemmas to prove `le_of_mul_le_mul_left` etc;\n* use section-local attributes instead of `letI := @linear_order.decidable_le α _`.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "antitone_mul_left", []], ["add", "theorem", "antitone_mul_right", []], ["add", "theorem", "antitone_mul_left", ["decidable"]], ["add", "theorem", "antitone_mul_right", ["decidable"]], ["add", "theorem", "monotone_mul", ["decidable"]], ["add", "theorem", "monotone_mul_left_of_nonneg", ["decidable"]], ["add", "theorem", "monotone_mul_right_of_nonneg", ["decidable"]], ["add", "theorem", "monotone_mul_strict_mono", ["decidable"]], ["add", "theorem", "strict_mono_mul", ["decidable"]], ["add", "theorem", "strict_mono_mul_monotone", ["decidable"]], ["add", "theorem", "strict_anti_mul_left", []], ["add", "theorem", "strict_anti_mul_right", []]]}]}, {"timestamp": 1661139561, "sha": "6155d435", "message": "feat(*): rsuffices golfs (#16159)\nThis PR golfs many uses of `suffices` + `obtain`. There is further golfs possible, but I kept a specific type of golf to this PR. Most of these at least drop a line, if not two.", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo2021_q1.lean", "newPath": "archive/imo/imo2021_q1.lean", "changes": []}, {"oldPath": "archive/miu_language/decision_suf.lean", "newPath": "archive/miu_language/decision_suf.lean", "changes": []}, {"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": []}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/analysis/convex/jensen.lean", "newPath": "src/analysis/convex/jensen.lean", "changes": []}, {"oldPath": "src/analysis/convex/krein_milman.lean", "newPath": "src/analysis/convex/krein_milman.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/symmetric.lean", "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/homology.lean", "newPath": "src/category_theory/abelian/homology.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "newPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/topology/algebra/semigroup.lean", "newPath": "src/topology/algebra/semigroup.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable_uniformity.lean", "newPath": "src/topology/metric_space/metrizable_uniformity.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1661109419, "sha": "0da54467", "message": "refactor(analysis/convex/basic): Redefine convexity in terms of star-convexity (#16173)\nChange the definition from\n```lean\ndef convex : Prop :=\n∀ ⦃x y : E⦄, x ∈ s → y ∈ s → ∀ ⦃a b : 𝕜⦄, 0 ≤ a → 0 ≤ b → a + b = 1 →\n a • x + b • y ∈ s\n```\nto\n```lean\ndef convex : Prop := ∀ ⦃x : E⦄, x ∈ s → star_convex 𝕜 x s\n```\nwhich is defeq up to swapping the second and third foralls.\nThis allows golfing the `convex` API in terms of the `star_convex` one.\nAlso generalize `convex_pi` by limiting quantification to the set.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "combo_eq_smul_sub_add", ["convex"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "combo_affine_apply", ["convex"]], ["del", "theorem", "combo_eq_vadd", ["convex"]], ["mod", "theorem", "prod", ["convex"]], ["add", "theorem", "star_convex", ["convex"]], ["add", "theorem", "star_convex_iff", ["convex"]], ["mod", "def", "convex", []], ["mod", "theorem", "convex_empty", []], ["mod", "theorem", "convex_iff_segment_subset", []], ["mod", "theorem", "convex_univ", []], ["del", "theorem", "convex", ["submodule"]], ["del", "theorem", "convex", ["subspace"]]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/convex/join.lean", "newPath": "src/analysis/convex/join.lean", "changes": []}, {"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": []}, {"oldPath": "src/analysis/convex/slope.lean", "newPath": "src/analysis/convex/slope.lean", "changes": []}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": [["del", "theorem", "star_convex", ["convex"]], ["del", "theorem", "star_convex_iff", ["convex"]], ["del", "theorem", "convex_iff_forall_star_convex", []], ["del", "theorem", "star_convex", ["submodule"]], ["del", "theorem", "star_convex", ["subspace"]]]}, {"oldPath": "src/analysis/convex/stone_separation.lean", "newPath": "src/analysis/convex/stone_separation.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "combo_affine_apply", ["convex"]]]}]}, {"timestamp": 1661109417, "sha": "90bc9579", "message": "chore(analysis/inner_product_space): move `is_symmetric` to a new file lower in the import tree (#16106)", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["del", "theorem", "add", ["linear_map", "is_symmetric"]], ["del", "theorem", "apply_clm", ["linear_map", "is_symmetric"]], ["del", "theorem", "coe_re_apply_inner_self_apply", ["linear_map", "is_symmetric"]], ["del", "theorem", "conj_inner_sym", ["linear_map", "is_symmetric"]], ["del", "theorem", "continuous", ["linear_map", "is_symmetric"]], ["del", "theorem", "restrict_invariant", ["linear_map", "is_symmetric"]], ["del", "theorem", "restrict_scalars", ["linear_map", "is_symmetric"]], ["del", "def", "is_symmetric", ["linear_map"]], ["del", "theorem", "is_symmetric_id", ["linear_map"]], ["del", "theorem", "is_symmetric_iff_bilin_form", ["linear_map"]], ["del", "theorem", "is_symmetric_iff_inner_map_self_real", ["linear_map"]], ["del", "theorem", "is_symmetric_zero", ["linear_map"]], ["del", "theorem", "orthogonal_projection_is_symmetric", []]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "orthogonal_projection_is_symmetric", []]]}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/symmetric.lean", "changes": [["add", "theorem", "add", ["linear_map", "is_symmetric"]], ["add", "theorem", "apply_clm", ["linear_map", "is_symmetric"]], ["add", "theorem", "coe_re_apply_inner_self_apply", ["linear_map", "is_symmetric"]], ["add", "theorem", "conj_inner_sym", ["linear_map", "is_symmetric"]], ["add", "theorem", "continuous", ["linear_map", "is_symmetric"]], ["add", "theorem", "restrict_invariant", ["linear_map", "is_symmetric"]], ["add", "theorem", "restrict_scalars", ["linear_map", "is_symmetric"]], ["add", "def", "is_symmetric", ["linear_map"]], ["add", "theorem", "is_symmetric_id", ["linear_map"]], ["add", "theorem", "is_symmetric_iff_bilin_form", ["linear_map"]], ["add", "theorem", "is_symmetric_iff_inner_map_self_real", ["linear_map"]], ["add", "theorem", "is_symmetric_zero", ["linear_map"]]]}]}, {"timestamp": 1661099485, "sha": "175a0959", "message": "feat(data/set/prod): decidable mem instance on set prod (#16107)\nAdds a decidable mem instance for `s ×ˢ t` when both `s` and `t` are decidable", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": []}]}, {"timestamp": 1661075942, "sha": "e0b2fa6d", "message": "feat(algebra/*): Algebraic instances on `lex`/`order_dual` (#16122)\nCopy over algebraic instances for `lex` and `order_dual`.", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["add", "theorem", "of_dual_rat_cast", []], ["add", "theorem", "of_lex_rat_cast", []], ["add", "theorem", "to_dual_rat_cast", []], ["add", "theorem", "to_lex_rat_cast", []]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "of_dual_div", []], ["add", "theorem", "of_dual_inv", []], ["add", "theorem", "of_dual_mul", []], ["add", "theorem", "of_dual_one", []], ["add", "theorem", "of_dual_pow", []], ["add", "theorem", "of_dual_smul", []], ["add", "theorem", "of_dual_vadd", []], ["add", "theorem", "of_lex_div", []], ["add", "theorem", "of_lex_inv", []], ["add", "theorem", "of_lex_mul", []], ["add", "theorem", "of_lex_one", []], ["add", "theorem", "of_lex_pow", []], ["add", "theorem", "of_lex_smul", []], ["add", "theorem", "of_lex_vadd", []], ["add", "theorem", "to_dual_div", []], ["add", "theorem", "to_dual_inv", []], ["add", "theorem", "to_dual_mul", []], ["add", "theorem", "to_dual_one", []], ["add", "theorem", "to_dual_pow", []], ["add", "theorem", "to_dual_smul", []], ["add", "theorem", "to_dual_vadd", []], ["add", "theorem", "to_lex_div", []], ["add", "theorem", "to_lex_inv", []], ["add", "theorem", "to_lex_mul", []], ["add", "theorem", "to_lex_one", []], ["add", "theorem", "to_lex_pow", []], ["add", "theorem", "to_lex_smul", []], ["add", "theorem", "to_lex_vadd", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["del", "theorem", "of_dual_smul", ["order_dual"]], ["del", "theorem", "to_dual_smul", ["order_dual"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "of_dual_int_cast", []], ["add", "theorem", "of_lex_int_cast", []], ["add", "theorem", "to_dual_int_cast", []], ["add", "theorem", "to_lex_int_cast", []]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "of_dual_nat_cast", []], ["add", "theorem", "of_lex_nat_cast", []], ["mod", "theorem", "coe_nat", ["pi"]], ["mod", "theorem", "nat_apply", ["pi"]], ["add", "theorem", "to_dual_nat_cast", []], ["add", "theorem", "to_lex_nat_cast", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["mod", "structure", "decorated_equiv", []], ["add", "def", "trans", ["equiv'"]], ["add", "structure", "equiv'", []], ["del", "def", "trans", ["equiv"]], ["del", "structure", "equiv", []], ["mod", "def", "foo2", []], ["mod", "def", "my_equiv", []]]}]}, {"timestamp": 1661065070, "sha": "972aa423", "message": "refactor(data/int/cast): Use hom classes (#16024)\nRestate `map_eq_zero`, `map_ne_zero`, `map_int_cast`, `eq_int_cast'` using `monoid_with_zero_hom_class`/`ring_hom_class` instead of `monoid_with_zero_hom`/`ring_hom`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "map_int_cast", ["alg_hom"]]]}, {"oldPath": "src/algebra/cubic_discriminant.lean", "newPath": "src/algebra/cubic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["del", "theorem", "map_eq_zero", ["ring_hom"]], ["del", "theorem", "map_ne_zero", ["ring_hom"]]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "map_eq_zero", []], ["add", "theorem", "map_ne_zero", []], ["del", "theorem", "map_eq_zero", ["monoid_with_zero_hom"]], ["del", "theorem", "map_ne_zero", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": [["mod", "def", "to_monoid_hom", ["absolute_value"]], ["mod", "def", "to_monoid_with_zero_hom", ["absolute_value"]]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/compact_operator.lean", "newPath": "src/analysis/normed_space/compact_operator.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "of_real_int_cast", ["complex"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "theorem", "of_real_int_cast", ["is_R_or_C"]], ["add", "theorem", "of_real_ne_zero", ["is_R_or_C"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["del", "theorem", "eq_int_cast", ["add_monoid_hom"]], ["add", "theorem", "eq_int_cast'", []], ["add", "theorem", "eq_int_cast", []], ["add", "theorem", "ext_int'", []], ["mod", "theorem", "cast_id", ["int"]], ["add", "theorem", "map_int_cast", []], ["del", "theorem", "ext_int'", ["monoid_with_zero_hom"]], ["mod", "theorem", "coe_int", ["pi"]], ["mod", "theorem", "int_apply", ["pi"]], ["mod", "theorem", "eq_int_cast'", ["ring_hom"]], ["del", "theorem", "eq_int_cast", ["ring_hom"]], ["del", "theorem", "map_int_cast", ["ring_hom"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "theorem", "C_eq_int_cast", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "map_int_cast", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "map_eq_zero", ["polynomial"]]]}, {"oldPath": "src/data/zmod/algebra.lean", "newPath": "src/data/zmod/algebra.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["mod", "theorem", "cast_int_cast", ["zmod"]]]}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_abs.lean", "newPath": "src/number_theory/class_number/admissible_abs.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "newPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/fraction_ring.lean", "newPath": "src/ring_theory/localization/fraction_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["mod", "theorem", "coe_int_cast", ["subring"]], ["mod", "theorem", "coe_nat_cast", ["subring"]], ["mod", "theorem", "coe_int_cast", ["subring_class"]], ["mod", "theorem", "coe_nat_cast", ["subring_class"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["del", "theorem", "map_units_inv", ["add_valuation"]]]}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/mul_coeff.lean", "newPath": "src/ring_theory/witt_vector/mul_coeff.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1661056503, "sha": "b46c8953", "message": "chore(scripts): update nolints.txt (#16179)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1661037075, "sha": "ec73f6e3", "message": "chore(algebra/big_operators/pi): rename `w` to `H` in assumptions (#16166)", "changes": [{"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1661019039, "sha": "aac3141e", "message": "feat(group_theory/coset): Right cosets are orbits (#16119)\nThis PR adds a few lemma about the orbit of the action of a subgroup of a group on the group.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "orbit_subgroup_eq_right_coset", []], ["add", "theorem", "orbit_subgroup_eq_self_of_mem", []], ["add", "theorem", "orbit_subgroup_one_eq_self", []]]}]}, {"timestamp": 1661019038, "sha": "eaeb4583", "message": "feat(set_theory/cardinal/finite): `nat.card (zmod n) = n` (#16118)\nThis PR adds a short lemma `nat.card (zmod n) = n`.", "changes": [{"oldPath": "src/set_theory/cardinal/finite.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": [["add", "theorem", "card_zmod", ["nat"]]]}]}, {"timestamp": 1661014907, "sha": "df967907", "message": "feat(algebraic_topology): split simplicial objects (#16072)\nThis PR introduces the notion of split simplicial objects. Future PRs will show that simplicial sets are split (in a unique way). It will also be a consequence of the Dold-Kan correspondence that in (pseudo-)abelian categories, all simplicial objects have at least a splitting. Split simplicial objects will be used in the proof of the Dold-Kan correspondence.", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_topology/split_simplicial_object.lean", "changes": [["add", "def", "coprod", ["simplicial_object", "splitting"]], ["add", "def", "desc", ["simplicial_object", "splitting"]], ["add", "theorem", "hom_ext'", ["simplicial_object", "splitting"]], ["add", "theorem", "hom_ext", ["simplicial_object", "splitting"]], ["add", "def", "e", ["simplicial_object", "splitting", "index_set"]], ["add", "theorem", "ext'", ["simplicial_object", "splitting", "index_set"]], ["add", "theorem", "ext", ["simplicial_object", "splitting", "index_set"]], ["add", "def", "id", ["simplicial_object", "splitting", "index_set"]], ["add", "def", "mk", ["simplicial_object", "splitting", "index_set"]], ["add", "def", "index_set", ["simplicial_object", "splitting"]], ["add", "def", "iso", ["simplicial_object", "splitting"]], ["add", "def", "map", ["simplicial_object", "splitting"]], ["add", "def", "summand", ["simplicial_object", "splitting"]], ["add", "def", "ι_coprod", ["simplicial_object", "splitting"]], ["add", "theorem", "ι_desc", ["simplicial_object", "splitting"]], ["add", "def", "ι_summand", ["simplicial_object", "splitting"]], ["add", "theorem", "ι_summand_comp_app", ["simplicial_object", "splitting"]], ["add", "theorem", "ι_summand_eq", ["simplicial_object", "splitting"]], ["add", "theorem", "ι_summand_id", ["simplicial_object", "splitting"]], ["add", "def", "φ", ["simplicial_object", "splitting"]], ["add", "structure", "splitting", ["simplicial_object"]]]}]}, {"timestamp": 1661003921, "sha": "ee261437", "message": "feat(algebra/order/complete_field): generalize ring_hom_monotone (#16147)\n@alreadydone noticed that in the proof of ```ring_hom_monotone``` can be generalized to rings.", "changes": [{"oldPath": "src/algebra/order/complete_field.lean", "newPath": "src/algebra/order/complete_field.lean", "changes": []}]}, {"timestamp": 1661003920, "sha": "67488dff", "message": "refactor(order/minimals): Change definition to `a ≤ b → b ≤ a` (#16103)\nThis matches `is_min`/`is_max` and will allow to smoothly restate Zorn's lemma using those.", "changes": [{"oldPath": "src/order/minimal.lean", "newPath": "src/order/minimal.lean", "changes": [["add", "theorem", "eq_of_mem_maximals", []], ["add", "theorem", "eq_of_mem_minimals", []], ["mod", "theorem", "mem_maximals", ["is_greatest"]], ["mod", "theorem", "mem_minimals", ["is_least"]], ["mod", "def", "maximals", []], ["mod", "theorem", "maximals_antichain", []], ["mod", "theorem", "maximals_mono", []], ["mod", "def", "minimals", []], ["mod", "theorem", "minimals_antichain", []], ["mod", "theorem", "minimals_mono", []]]}]}, {"timestamp": 1660994915, "sha": "c2c31b52", "message": "chore(field_theory/*): Fix lint (#16149)\nSatisfy the `fintype_finite` linter.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": [["mod", "theorem", "eq_zero_of_eval_eq_zero", ["mv_polynomial"]], ["mod", "theorem", "ker_evalₗ", ["mv_polynomial"]], ["mod", "theorem", "range_evalᵢ", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/finite/trace.lean", "newPath": "src/field_theory/finite/trace.lean", "changes": [["mod", "theorem", "trace_to_zmod_nondegenerate", ["finite_field"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["mod", "theorem", "finrank_le_card", ["fixed_points"]], ["mod", "theorem", "is_integral", ["fixed_points"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["add", "theorem", "exists_primitive_element_of_finite_bot", ["field"]], ["add", "theorem", "exists_primitive_element_of_finite_top", ["field"]], ["del", "theorem", "exists_primitive_element_of_fintype_bot", ["field"]], ["del", "theorem", "exists_primitive_element_of_fintype_top", ["field"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finite_of_finite", ["finite_dimensional"]]]}]}, {"timestamp": 1660985904, "sha": "4a0f332e", "message": "feat(data/finset/pointwise): `-s • t = -(s • t)` (#16138)\nand copy over other pointwise `set` lemmas. Generalize the `set` lemmas. `set.smul_neg`, `set.neg_smul`, `set.smul_set_neg`, `set.neg_smul_set` now have explicit arguments.", "changes": [{"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": []}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "neg_smul_finset", ["finset"]], ["add", "theorem", "smul_zero", ["finset", "nonempty"]], ["add", "theorem", "zero_smul", ["finset", "nonempty"]], ["add", "theorem", "smul_finset_neg", ["finset"]], ["add", "theorem", "smul_zero_subset", ["finset"]], ["add", "theorem", "zero_mem_smul_finset", ["finset"]], ["add", "theorem", "zero_mem_smul_finset_iff", ["finset"]], ["add", "theorem", "zero_mem_smul_iff", ["finset"]], ["add", "theorem", "zero_smul_finset", ["finset"]], ["add", "theorem", "zero_smul_finset_subset", ["finset"]], ["add", "theorem", "zero_smul_subset", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}]}, {"timestamp": 1660985903, "sha": "4705dd0d", "message": "split(analysis/convex/segment): Split off `analysis/convex.basic` (#16112)\nMove `segment` and `open_segment` to a new file `analysis.convex.segment`.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "Icc_subset_segment", []], ["del", "theorem", "Ioo_subset_open_segment", []], ["del", "theorem", "combo_le_max", ["convex"]], ["del", "theorem", "mem_Icc", ["convex"]], ["del", "theorem", "mem_Ico", ["convex"]], ["del", "theorem", "mem_Ioc", ["convex"]], ["del", "theorem", "mem_Ioo", ["convex"]], ["del", "theorem", "min_le_combo", ["convex"]], ["del", "theorem", "insert_endpoints_open_segment", []], ["del", "theorem", "left_mem_open_segment_iff", []], ["del", "theorem", "left_mem_segment", []], ["del", "theorem", "mem_open_segment_iff_div", []], ["del", "theorem", "mem_open_segment_of_ne_left_right", []], ["del", "theorem", "mem_open_segment_translate", []], ["del", "theorem", "mem_segment_add_sub", []], ["del", "theorem", "mem_segment_iff_div", []], ["del", "theorem", "mem_segment_iff_same_ray", []], ["del", "theorem", "mem_segment_sub_add", []], ["del", "theorem", "mem_segment_translate", []], ["del", "theorem", "midpoint_mem_segment", []], ["del", "def", "open_segment", []], ["del", "theorem", "open_segment_eq_Ioo'", []], ["del", "theorem", "open_segment_eq_Ioo", []], ["del", "theorem", "open_segment_eq_image'", []], ["del", "theorem", "open_segment_eq_image", []], ["del", "theorem", "open_segment_eq_image_line_map", []], ["del", "theorem", "open_segment_eq_image₂", []], ["del", "theorem", "open_segment_image", []], ["del", "theorem", "open_segment_same", []], ["del", "theorem", "open_segment_subset_Ioo", []], ["del", "theorem", "open_segment_subset_iff", []], ["del", "theorem", "open_segment_subset_iff_segment_subset", []], ["del", "theorem", "open_segment_subset_segment", []], ["del", "theorem", "open_segment_symm", []], ["del", "theorem", "open_segment_translate_image", []], ["del", "theorem", "open_segment_translate_preimage", []], ["del", "theorem", "right_mem_open_segment_iff", []], ["del", "theorem", "right_mem_segment", []], ["del", "theorem", "same_ray_of_mem_segment", []], ["del", "def", "segment", []], ["del", "theorem", "segment_eq_Icc'", []], ["del", "theorem", "segment_eq_Icc", []], ["del", "theorem", "segment_eq_image'", []], ["del", "theorem", "segment_eq_image", []], ["del", "theorem", "segment_eq_image_line_map", []], ["del", "theorem", "segment_eq_image₂", []], ["del", "theorem", "segment_eq_interval", []], ["del", "theorem", "segment_image", []], ["del", "theorem", "segment_same", []], ["del", "theorem", "segment_subset_Icc", []], ["del", "theorem", "segment_subset_iff", []], ["del", "theorem", "segment_subset_interval", []], ["del", "theorem", "segment_symm", []], ["del", "theorem", "segment_translate_image", []], ["del", "theorem", "segment_translate_preimage", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/segment.lean", "changes": [["add", "theorem", "Icc_subset_segment", []], ["add", "theorem", "Ioo_subset_open_segment", []], ["add", "theorem", "combo_le_max", ["convex"]], ["add", "theorem", "mem_Icc", ["convex"]], ["add", "theorem", "mem_Ico", ["convex"]], ["add", "theorem", "mem_Ioc", ["convex"]], ["add", "theorem", "mem_Ioo", ["convex"]], ["add", "theorem", "min_le_combo", ["convex"]], ["add", "theorem", "insert_endpoints_open_segment", []], ["add", "theorem", "left_mem_open_segment_iff", []], ["add", "theorem", "left_mem_segment", []], ["add", "theorem", "mem_open_segment_iff_div", []], ["add", "theorem", "mem_open_segment_of_ne_left_right", []], ["add", "theorem", "mem_open_segment_translate", []], ["add", "theorem", "mem_segment_add_sub", []], ["add", "theorem", "mem_segment_iff_div", []], ["add", "theorem", "mem_segment_iff_same_ray", []], ["add", "theorem", "mem_segment_sub_add", []], ["add", "theorem", "mem_segment_translate", []], ["add", "theorem", "midpoint_mem_segment", []], ["add", "def", "open_segment", []], ["add", "theorem", "open_segment_eq_Ioo'", []], ["add", "theorem", "open_segment_eq_Ioo", []], ["add", "theorem", "open_segment_eq_image'", []], ["add", "theorem", "open_segment_eq_image", []], ["add", "theorem", "open_segment_eq_image_line_map", []], ["add", "theorem", "open_segment_eq_image₂", []], ["add", "theorem", "open_segment_image", []], ["add", "theorem", "open_segment_same", []], ["add", "theorem", "open_segment_subset_Ioo", []], ["add", "theorem", "open_segment_subset_iff", []], ["add", "theorem", "open_segment_subset_iff_segment_subset", []], ["add", "theorem", "open_segment_subset_segment", []], ["add", "theorem", "open_segment_symm", []], ["add", "theorem", "open_segment_translate_image", []], ["add", "theorem", "open_segment_translate_preimage", []], ["add", "theorem", "right_mem_open_segment_iff", []], ["add", "theorem", "right_mem_segment", []], ["add", "theorem", "same_ray_of_mem_segment", []], ["add", "def", "segment", []], ["add", "theorem", "segment_eq_Icc'", []], ["add", "theorem", "segment_eq_Icc", []], ["add", "theorem", "segment_eq_image'", []], ["add", "theorem", "segment_eq_image", []], ["add", "theorem", "segment_eq_image_line_map", []], ["add", "theorem", "segment_eq_image₂", []], ["add", "theorem", "segment_eq_interval", []], ["add", "theorem", "segment_image", []], ["add", "theorem", "segment_same", []], ["add", "theorem", "segment_subset_Icc", []], ["add", "theorem", "segment_subset_iff", []], ["add", "theorem", "segment_subset_interval", []], ["add", "theorem", "segment_symm", []], ["add", "theorem", "segment_translate_image", []], ["add", "theorem", "segment_translate_preimage", []]]}]}, {"timestamp": 1660985902, "sha": "8fdec909", "message": "feat(ring_theory/polynomial): Vieta's formula in terms of `polynomial.roots` (#14908)\nSpecialize `multiset.prod_X_sub_C_coeff` to the root multiset of a split polynomial over an integral domain to derive the familiar Vieta's formula; update *undergrad.yaml*.\nMake various stylistic improvements to *polynomial/vieta.lean*: most notably, `open polynomial` to be able to omit the prefix in `polynomial.X` and `polynomial.C`. Instead, write `mv_polynomial.X` with the prefix because it's less frequent.\nProve miscellaneous lemmas `list.prod_map_neg`, `multiset.prod_map_neg`, `list.map_nth_le` and `multiset.length_to_list`, which are remnants of a previous approach to prove `polynomial.vieta` superseded by #15008. See below/#14908 for the original motivation for introducing them.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "prod_map_neg", ["multiset"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "prod_map_neg", ["list"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "map_nth_le", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "length_to_list", ["multiset"]]]}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": [["mod", "theorem", "prod_X_add_C_coeff", ["multiset"]], ["mod", "theorem", "prod_X_sub_C_coeff", ["multiset"]], ["mod", "theorem", "prod_C_add_X_eq_sum_esymm", ["mv_polynomial"]], ["mod", "theorem", "prod_X_add_C_coeff", ["mv_polynomial"]], ["add", "theorem", "coeff_eq_esymm_roots_of_card", ["polynomial"]], ["add", "theorem", "coeff_eq_esymm_roots_of_splits", ["polynomial"]]]}]}, {"timestamp": 1660978540, "sha": "09d7fe37", "message": "feat(algebra/star/star_alg_hom): define unital and non-unital `star_alg_hom`s (#16089)\nThis defines three new hom classes `star_hom_class`, `star_alg_hom_class` and `non_unital_star_alg_hom_class`, and associated hom types for the latter two. `star_hom_class` is used essentially as a mixin.\nThe types `star_alg_hom` and `non_unital_star_alg_hom` constitute the morphisms in the categories of unital C⋆-algebras and C⋆-algebras, respectively.\nPer this [recent discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/has_coe_t.20for.20semilinear_map_class), there are no coercions implemented for these new morphisms aside from the usual `has_coe_to_fun` arising from the `fun_like` instance. In particular, there is no coercion from `star_alg_hom` to `alg_hom`, nor for the non-unital variants, but of course there is the \"manual coercion\" `star_alg_hom.to_alg_hom`. Likewise, there is no coercion from `F` to `star_alg_hom R A B` given an instance `star_alg_hom_class F R A B`. Such coercions as we deem useful and prudent can be added later.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": [["add", "theorem", "algebra_map_star_comm", []]]}, {"oldPath": null, "newPath": "src/algebra/star/star_alg_hom.lean", "changes": [["add", "theorem", "coe_comp", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_id", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_inl", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_inr", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_mk", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_one", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_prod", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_to_non_unital_alg_hom", ["non_unital_star_alg_hom"]], ["add", "theorem", "coe_zero", ["non_unital_star_alg_hom"]], ["add", "def", "comp", ["non_unital_star_alg_hom"]], ["add", "theorem", "comp_apply", ["non_unital_star_alg_hom"]], ["add", "theorem", "comp_assoc", ["non_unital_star_alg_hom"]], ["add", "theorem", "comp_id", ["non_unital_star_alg_hom"]], ["add", "theorem", "ext", ["non_unital_star_alg_hom"]], ["add", "def", "fst", ["non_unital_star_alg_hom"]], ["add", "theorem", "fst_prod", ["non_unital_star_alg_hom"]], ["add", "theorem", "id_comp", ["non_unital_star_alg_hom"]], ["add", "def", "inl", ["non_unital_star_alg_hom"]], ["add", "theorem", "inl_apply", ["non_unital_star_alg_hom"]], ["add", "def", "inr", ["non_unital_star_alg_hom"]], ["add", "theorem", "inr_apply", ["non_unital_star_alg_hom"]], ["add", "theorem", "mk_coe", ["non_unital_star_alg_hom"]], ["add", "theorem", "one_apply", ["non_unital_star_alg_hom"]], ["add", "def", "prod", ["non_unital_star_alg_hom"]], ["add", "def", "prod_equiv", ["non_unital_star_alg_hom"]], ["add", "theorem", "prod_fst_snd", ["non_unital_star_alg_hom"]], ["add", "def", "snd", ["non_unital_star_alg_hom"]], ["add", "theorem", "snd_prod", ["non_unital_star_alg_hom"]], ["add", "theorem", "zero_apply", ["non_unital_star_alg_hom"]], ["add", "structure", "non_unital_star_alg_hom", []], ["add", "theorem", "coe_comp", ["star_alg_hom"]], ["add", "theorem", "coe_id", ["star_alg_hom"]], ["add", "theorem", "coe_mk", ["star_alg_hom"]], ["add", "theorem", "coe_prod", ["star_alg_hom"]], ["add", "theorem", "coe_to_alg_hom", ["star_alg_hom"]], ["add", "theorem", "coe_to_non_unital_star_alg_hom", ["star_alg_hom"]], ["add", "def", "comp", ["star_alg_hom"]], ["add", "theorem", "comp_apply", ["star_alg_hom"]], ["add", "theorem", "comp_assoc", ["star_alg_hom"]], ["add", "theorem", "comp_id", ["star_alg_hom"]], ["add", "theorem", "ext", ["star_alg_hom"]], ["add", "def", "fst", ["star_alg_hom"]], ["add", "theorem", "fst_prod", ["star_alg_hom"]], ["add", "theorem", "id_comp", ["star_alg_hom"]], ["add", "theorem", "mk_coe", ["star_alg_hom"]], ["add", "def", "prod", ["star_alg_hom"]], ["add", "def", "prod_equiv", ["star_alg_hom"]], ["add", "theorem", "prod_fst_snd", ["star_alg_hom"]], ["add", "def", "snd", ["star_alg_hom"]], ["add", "theorem", "snd_prod", ["star_alg_hom"]], ["add", "def", "to_non_unital_star_alg_hom", ["star_alg_hom"]], ["add", "structure", "star_alg_hom", []]]}]}, {"timestamp": 1660967176, "sha": "2c6e5959", "message": "chore(data/finsupp/ne_locus): reduce import, after the finsupp.basic refactor (#16165)\nImporting `data.finsupp.defs` is enough.", "changes": [{"oldPath": "src/data/finsupp/ne_locus.lean", "newPath": "src/data/finsupp/ne_locus.lean", "changes": []}]}, {"timestamp": 1660955843, "sha": "21b64128", "message": "feat(order/complete_lattice): Duals of complete lattice operations (#16148)\nA few missing lemmas about `to_dual` and `of_dual`.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "of_dual_Inf", []], ["add", "theorem", "of_dual_Sup", []], ["add", "theorem", "of_dual_infi", []], ["add", "theorem", "of_dual_supr", []], ["add", "theorem", "to_dual_Inf", []], ["add", "theorem", "to_dual_Sup", []], ["add", "theorem", "to_dual_infi", []], ["add", "theorem", "to_dual_supr", []]]}]}, {"timestamp": 1660945898, "sha": "e1b7b7d5", "message": "fix(control/random): typo (#16156)\nFix a small typo in the `random.lean` doc comment of `mk_generator` definition.", "changes": [{"oldPath": "src/control/random.lean", "newPath": "src/control/random.lean", "changes": []}]}, {"timestamp": 1660945896, "sha": "e8ca35f1", "message": "chore(linear_algebra/matrix/block): remove the `_matrix` suffix from `matrix.block_triangular_matrix` (#16155)\nThe same is done for the primed version.\nThere's no need to have the word `matrix` in this definition twice.", "changes": [{"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": [["add", "def", "block_triangular'", ["matrix"]], ["add", "def", "block_triangular", ["matrix"]], ["del", "def", "block_triangular_matrix'", ["matrix"]], ["del", "def", "block_triangular_matrix", ["matrix"]], ["add", "theorem", "det_of_block_triangular''", ["matrix"]], ["add", "theorem", "det_of_block_triangular'", ["matrix"]], ["add", "theorem", "det_of_block_triangular", ["matrix"]], ["del", "theorem", "det_of_block_triangular_matrix''", ["matrix"]], ["del", "theorem", "det_of_block_triangular_matrix'", ["matrix"]], ["del", "theorem", "det_of_block_triangular_matrix", ["matrix"]]]}]}, {"timestamp": 1660945895, "sha": "faed3a7f", "message": "feat(algebra/group_with_zero): slightly generalise mul_ne_zero (#16137)\nAlso tidies a couple of adjacent declarations in the file.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["mod", "theorem", "mul_self_ne_zero", []], ["mod", "theorem", "zero_ne_mul_self", []]]}]}, {"timestamp": 1660945894, "sha": "e57e72fd", "message": "feat(ring_theory/valuation/valuation_subring): pointwise left actions via `map` (#16080)\nThis copies over the API from the pointwise actions on subrings, with the action on a valuation subring just acting on the underlying subring.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Working.20on.20Frobenius.20elements/near/293810759)", "changes": [{"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["valuation_subring"]], ["add", "theorem", "mem_inv_pointwise_smul_iff", ["valuation_subring"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem", ["valuation_subring"]], ["add", "theorem", "mem_smul_pointwise_iff_exists", ["valuation_subring"]], ["add", "def", "pointwise_has_smul", ["valuation_subring"]], ["add", "def", "pointwise_mul_action", ["valuation_subring"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff", ["valuation_subring"]], ["add", "theorem", "pointwise_smul_subset_iff", ["valuation_subring"]], ["add", "theorem", "pointwise_smul_to_subring", ["valuation_subring"]], ["add", "theorem", "smul_mem_pointwise_smul", ["valuation_subring"]], ["add", "theorem", "smul_mem_pointwise_smul_iff", ["valuation_subring"]], ["add", "theorem", "subset_pointwise_smul_iff", ["valuation_subring"]], ["add", "theorem", "to_subring_injective", ["valuation_subring"]]]}]}, {"timestamp": 1660937434, "sha": "5ad44a90", "message": "feat(data/finsupp/ne_locus): new file with finsupp.ne_locus (#16091)\n`finsupp.ne_locus` for finitely supported functions.\nLet `α N` be two Types, and assume that `N` has a `0` and let `f g : α →₀ N` be finitely supported\nfunctions.\nThis PR defines `finsupp.ne_locus f g : finset α`, the finite subset of `α` where `f` and `g` differ.\nIn the case in which `N` is an additive group, `finsupp.ne_locus f g` coincides with `finsupp.support (f - g)`.\nThis is the initial segment of #16026, that continues with the definition of witnesses.\n[Zulip discussion for the choice of name](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60diff.60.20vs.20.60ne_locus.60)\n[Zulip discussion for the actual PR](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2316091.20.60ne_locus.60)", "changes": [{"oldPath": null, "newPath": "src/data/finsupp/ne_locus.lean", "changes": [["add", "theorem", "add_ne_locus_add_eq_left", ["finsupp"]], ["add", "theorem", "add_ne_locus_add_eq_right", ["finsupp"]], ["add", "theorem", "coe_ne_locus", ["finsupp"]], ["add", "theorem", "map_range_ne_locus_eq", ["finsupp"]], ["add", "theorem", "mem_ne_locus", ["finsupp"]], ["add", "def", "ne_locus", ["finsupp"]], ["add", "theorem", "ne_locus_comm", ["finsupp"]], ["add", "theorem", "ne_locus_eq_empty", ["finsupp"]], ["add", "theorem", "ne_locus_eq_support_sub", ["finsupp"]], ["add", "theorem", "ne_locus_neg", ["finsupp"]], ["add", "theorem", "ne_locus_zero_left", ["finsupp"]], ["add", "theorem", "ne_locus_zero_right", ["finsupp"]], ["add", "theorem", "neg_ne_locus_neg", ["finsupp"]], ["add", "theorem", "nonempty_ne_locus_iff", ["finsupp"]], ["add", "theorem", "sub_ne_locus_sub_eq_left", ["finsupp"]], ["add", "theorem", "sub_ne_locus_sub_eq_right", ["finsupp"]], ["add", "theorem", "subset_map_range_ne_locus", ["finsupp"]], ["add", "theorem", "zip_with_ne_locus_eq_left", ["finsupp"]], ["add", "theorem", "zip_with_ne_locus_eq_right", ["finsupp"]]]}]}, {"timestamp": 1660937433, "sha": "f9c30004", "message": "refactor(data/finsupp/basic): split `data/finsupp/basic` into three parts (#15699)\nThis PR splits the ~2900 lines of `data/finsupp/basic` into more manageable parts:\n* the most basic material (~1000 lines) moves to `data/finsupp/defs`\n* lemmas about `finsupp.sum` and `finsupp.prod` move to `algebra/big_operators/finsupp`\n* the remaining less-used definitions and lemmas remain in `data/finsupp/basic` (~1600 lines)", "changes": [{"oldPath": "src/algebra/big_operators/associated.lean", "newPath": "src/algebra/big_operators/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": [["add", "theorem", "coe_finset_sum", ["finsupp"]], ["add", "theorem", "coe_sum", ["finsupp"]], ["add", "theorem", "comp_lift_add_hom", ["finsupp"]], ["add", "theorem", "finset_sum_apply", ["finsupp"]], ["add", "def", "lift_add_hom", ["finsupp"]], ["add", "theorem", "lift_add_hom_apply", ["finsupp"]], ["add", "theorem", "lift_add_hom_apply_single", ["finsupp"]], ["add", "theorem", "lift_add_hom_comp_single", ["finsupp"]], ["add", "theorem", "lift_add_hom_single_add_hom", ["finsupp"]], ["add", "theorem", "lift_add_hom_symm_apply", ["finsupp"]], ["add", "theorem", "lift_add_hom_symm_apply_apply", ["finsupp"]], ["add", "theorem", "mul_prod_erase'", ["finsupp"]], ["add", "theorem", "mul_prod_erase", ["finsupp"]], ["add", "theorem", "multiset_map_sum", ["finsupp"]], ["add", "theorem", "multiset_sum_sum", ["finsupp"]], ["add", "theorem", "multiset_sum_sum_index", ["finsupp"]], ["add", "theorem", "on_finset_prod", ["finsupp"]], ["add", "def", "prod", ["finsupp"]], ["add", "theorem", "prod_add_index'", ["finsupp"]], ["add", "theorem", "prod_add_index", ["finsupp"]], ["add", "theorem", "prod_add_index_of_disjoint", ["finsupp"]], ["add", "theorem", "prod_comm", ["finsupp"]], ["add", "theorem", "prod_congr", ["finsupp"]], ["add", "theorem", "prod_dvd_prod_of_subset_of_dvd", ["finsupp"]], ["add", "theorem", "prod_emb_domain", ["finsupp"]], ["add", "theorem", "prod_finset_sum_index", ["finsupp"]], ["add", "theorem", "prod_fintype", ["finsupp"]], ["add", "theorem", "prod_hom_add_index", ["finsupp"]], ["add", "theorem", "prod_inv", ["finsupp"]], ["add", "theorem", "prod_ite_eq'", ["finsupp"]], ["add", "theorem", "prod_ite_eq", ["finsupp"]], ["add", "theorem", "prod_map_range_index", ["finsupp"]], ["add", "theorem", "prod_mul", ["finsupp"]], ["add", "theorem", "prod_neg_index", ["finsupp"]], ["add", "theorem", "prod_of_support_subset", ["finsupp"]], ["add", "theorem", "prod_pow", ["finsupp"]], ["add", "theorem", "prod_single_index", ["finsupp"]], ["add", "theorem", "prod_sum_index", ["finsupp"]], ["add", "theorem", "prod_zero_index", ["finsupp"]], ["add", "theorem", "single_finset_sum", ["finsupp"]], ["add", "theorem", "single_multiset_sum", ["finsupp"]], ["add", "theorem", "single_sum", ["finsupp"]], ["add", "theorem", "sum_apply", ["finsupp"]], ["add", "theorem", "sum_hom_add_index", ["finsupp"]], ["add", "theorem", "sum_ite_self_eq'", ["finsupp"]], ["add", "theorem", "sum_ite_self_eq", ["finsupp"]], ["add", "theorem", "sum_single", ["finsupp"]], ["add", "theorem", "sum_sub", ["finsupp"]], ["add", "theorem", "sum_sub_index", ["finsupp"]], ["add", "theorem", "sum_univ_single'", ["finsupp"]], ["add", "theorem", "sum_univ_single", ["finsupp"]], ["add", "theorem", "sum_zero", ["finsupp"]], ["add", "theorem", "support_finset_sum", ["finsupp"]], ["add", "theorem", "support_sum", ["finsupp"]], ["add", "theorem", "support_sum_eq_bUnion", ["finsupp"]], ["add", "theorem", "map_finsupp_prod", []], ["add", "theorem", "coe_finsupp_prod", ["monoid_hom"]], ["add", "theorem", "finsupp_prod_apply", ["monoid_hom"]], ["add", "theorem", "finsupp_prod_mem", ["submonoid_class"]]]}, {"oldPath": "src/data/finset/finsupp.lean", "newPath": "src/data/finset/finsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "def", "finsupp_unique", ["equiv"]], ["del", "theorem", "add_apply", ["finsupp"]], ["del", "theorem", "add_closure_set_of_eq_single", ["finsupp"]], ["del", "theorem", "add_hom_ext'", ["finsupp"]], ["del", "theorem", "add_hom_ext", ["finsupp"]], ["del", "def", "apply_add_hom", ["finsupp"]], ["del", "theorem", "card_support_eq_one'", ["finsupp"]], ["del", "theorem", "card_support_eq_one", ["finsupp"]], ["del", "theorem", "card_support_eq_zero", ["finsupp"]], ["del", "theorem", "card_support_le_one'", ["finsupp"]], ["del", "theorem", "card_support_le_one", ["finsupp"]], ["del", "theorem", "coe_add", ["finsupp"]], ["del", "theorem", "coe_eq_zero", ["finsupp"]], ["del", "theorem", "coe_finset_sum", ["finsupp"]], ["del", "theorem", "coe_fn_inj", ["finsupp"]], ["del", "theorem", "coe_fn_injective", ["finsupp"]], ["del", "theorem", "coe_mk", ["finsupp"]], ["del", "theorem", "coe_neg", ["finsupp"]], ["del", "theorem", "coe_sub", ["finsupp"]], ["del", "theorem", "coe_sum", ["finsupp"]], ["del", "theorem", "coe_update", ["finsupp"]], ["del", "theorem", "coe_zero", ["finsupp"]], ["del", "theorem", "comp_lift_add_hom", ["finsupp"]], ["del", "theorem", "congr_fun", ["finsupp"]], ["del", "def", "add_monoid_hom", ["finsupp", "emb_domain"]], ["del", "def", "emb_domain", ["finsupp"]], ["del", "theorem", "emb_domain_add", ["finsupp"]], ["del", "theorem", "emb_domain_apply", ["finsupp"]], ["del", "theorem", "emb_domain_eq_zero", ["finsupp"]], ["del", "theorem", "emb_domain_inj", ["finsupp"]], ["del", "theorem", "emb_domain_injective", ["finsupp"]], ["del", "theorem", "emb_domain_map_range", ["finsupp"]], ["del", "theorem", "emb_domain_notin_range", ["finsupp"]], ["del", "theorem", "emb_domain_single", ["finsupp"]], ["del", "theorem", "emb_domain_zero", ["finsupp"]], ["del", "theorem", "eq_single_iff", ["finsupp"]], ["del", "def", "equiv_fun_on_fintype", ["finsupp"]], ["del", "theorem", "equiv_fun_on_fintype_single", ["finsupp"]], ["del", "theorem", "equiv_fun_on_fintype_symm_coe", ["finsupp"]], ["del", "theorem", "equiv_fun_on_fintype_symm_single", ["finsupp"]], ["del", "def", "erase", ["finsupp"]], ["del", "theorem", "erase_add", ["finsupp"]], ["del", "def", "erase_add_hom", ["finsupp"]], ["del", "theorem", "erase_add_single", ["finsupp"]], ["del", "theorem", "erase_eq_sub_single", ["finsupp"]], ["del", "theorem", "erase_ne", ["finsupp"]], ["del", "theorem", "erase_of_not_mem_support", ["finsupp"]], ["del", "theorem", "erase_same", ["finsupp"]], ["del", "theorem", "erase_single", ["finsupp"]], ["del", "theorem", "erase_single_ne", ["finsupp"]], ["del", "theorem", "erase_zero", ["finsupp"]], ["del", "theorem", "ext", ["finsupp"]], ["del", "theorem", "ext_iff'", ["finsupp"]], ["del", "theorem", "ext_iff", ["finsupp"]], ["del", "theorem", "finite_support", ["finsupp"]], ["del", "theorem", "finset_sum_apply", ["finsupp"]], ["del", "theorem", "fun_support_eq", ["finsupp"]], ["del", "theorem", "induction_linear", ["finsupp"]], ["del", "theorem", "induction₂", ["finsupp"]], ["del", "def", "lift_add_hom", ["finsupp"]], ["del", "theorem", "lift_add_hom_apply", ["finsupp"]], ["del", "theorem", "lift_add_hom_apply_single", ["finsupp"]], ["del", "theorem", "lift_add_hom_comp_single", ["finsupp"]], ["del", "theorem", "lift_add_hom_single_add_hom", ["finsupp"]], ["del", "theorem", "lift_add_hom_symm_apply", ["finsupp"]], ["del", "theorem", "lift_add_hom_symm_apply_apply", ["finsupp"]], ["del", "def", "map_range", ["finsupp"]], ["del", "theorem", "map_range_add", ["finsupp"]], ["del", "theorem", "map_range_apply", ["finsupp"]], ["del", "theorem", "map_range_comp", ["finsupp"]], ["del", "theorem", "map_range_id", ["finsupp"]], ["del", "theorem", "map_range_single", ["finsupp"]], ["del", "theorem", "map_range_zero", ["finsupp"]], ["del", "theorem", "mem_support_iff", ["finsupp"]], ["del", "theorem", "mem_support_on_finset", ["finsupp"]], ["del", "theorem", "mem_support_single", ["finsupp"]], ["del", "theorem", "mul_hom_ext'", ["finsupp"]], ["del", "theorem", "mul_hom_ext", ["finsupp"]], ["del", "theorem", "mul_prod_erase'", ["finsupp"]], ["del", "theorem", "mul_prod_erase", ["finsupp"]], ["del", "theorem", "multiset_map_sum", ["finsupp"]], ["del", "theorem", "multiset_sum_sum", ["finsupp"]], ["del", "theorem", "multiset_sum_sum_index", ["finsupp"]], ["del", "theorem", "neg_apply", ["finsupp"]], ["del", "theorem", "nonzero_iff_exists", ["finsupp"]], ["del", "theorem", "not_mem_support_iff", ["finsupp"]], ["del", "theorem", "of_support_finite_coe", ["finsupp"]], ["del", "def", "on_finset", ["finsupp"]], ["del", "theorem", "on_finset_apply", ["finsupp"]], ["del", "theorem", "on_finset_prod", ["finsupp"]], ["del", "def", "prod", ["finsupp"]], ["del", "theorem", "prod_add_index'", ["finsupp"]], ["del", "theorem", "prod_add_index", ["finsupp"]], ["del", "theorem", "prod_add_index_of_disjoint", ["finsupp"]], ["del", "theorem", "prod_comm", ["finsupp"]], ["del", "theorem", "prod_congr", ["finsupp"]], ["del", "theorem", "prod_dvd_prod_of_subset_of_dvd", ["finsupp"]], ["del", "theorem", "prod_emb_domain", ["finsupp"]], ["del", "theorem", "prod_finset_sum_index", ["finsupp"]], ["del", "theorem", "prod_fintype", ["finsupp"]], ["del", "theorem", "prod_hom_add_index", ["finsupp"]], ["del", "theorem", "prod_inv", ["finsupp"]], ["del", "theorem", "prod_ite_eq'", ["finsupp"]], ["del", "theorem", "prod_ite_eq", ["finsupp"]], ["del", "theorem", "prod_map_range_index", ["finsupp"]], ["del", "theorem", "prod_mul", ["finsupp"]], ["del", "theorem", "prod_neg_index", ["finsupp"]], ["del", "theorem", "prod_of_support_subset", ["finsupp"]], ["del", "theorem", "prod_pow", ["finsupp"]], ["del", "theorem", "prod_single_index", ["finsupp"]], ["del", "theorem", "prod_sum_index", ["finsupp"]], ["del", "theorem", "prod_zero_index", ["finsupp"]], ["del", "theorem", "range_single_subset", ["finsupp"]], ["del", "def", "single", ["finsupp"]], ["del", "theorem", "single_add", ["finsupp"]], ["del", "theorem", "single_add_erase", ["finsupp"]], ["del", "def", "single_add_hom", ["finsupp"]], ["del", "theorem", "single_add_single_eq_single_add_single", ["finsupp"]], ["del", "theorem", "single_apply", ["finsupp"]], ["del", "theorem", "single_apply_eq_zero", ["finsupp"]], ["del", "theorem", "single_apply_mem", ["finsupp"]], ["del", "theorem", "single_apply_ne_zero", ["finsupp"]], ["del", "theorem", "single_eq_indicator", ["finsupp"]], ["del", "theorem", "single_eq_of_ne", ["finsupp"]], ["del", "theorem", "single_eq_pi_single", ["finsupp"]], ["del", "theorem", "single_eq_same", ["finsupp"]], ["del", "theorem", "single_eq_single_iff", ["finsupp"]], ["del", "theorem", "single_eq_update", ["finsupp"]], ["del", "theorem", "single_eq_zero", ["finsupp"]], ["del", "theorem", "single_finset_sum", ["finsupp"]], ["del", "theorem", "single_injective", ["finsupp"]], ["del", "theorem", "single_left_inj", ["finsupp"]], ["del", "theorem", "single_left_injective", ["finsupp"]], ["del", "theorem", "single_multiset_sum", ["finsupp"]], ["del", "theorem", "single_of_emb_domain_single", ["finsupp"]], ["del", "theorem", "single_of_single_apply", ["finsupp"]], ["del", "theorem", "single_sum", ["finsupp"]], ["del", "theorem", "single_swap", ["finsupp"]], ["del", "theorem", "single_zero", ["finsupp"]], ["del", "theorem", "sub_apply", ["finsupp"]], ["del", "theorem", "sum_apply", ["finsupp"]], ["del", "theorem", "sum_hom_add_index", ["finsupp"]], ["del", "theorem", "sum_ite_self_eq'", ["finsupp"]], ["del", "theorem", "sum_ite_self_eq", ["finsupp"]], ["del", "theorem", "sum_single", ["finsupp"]], ["del", "theorem", "sum_sub", ["finsupp"]], ["del", "theorem", "sum_sub_index", ["finsupp"]], ["del", "theorem", "sum_univ_single'", ["finsupp"]], ["del", "theorem", "sum_univ_single", ["finsupp"]], ["del", "theorem", "sum_zero", ["finsupp"]], ["del", "theorem", "support_add", ["finsupp"]], ["del", "theorem", "support_add_eq", ["finsupp"]], ["del", "theorem", "support_emb_domain", ["finsupp"]], ["del", "theorem", "support_eq_empty", ["finsupp"]], ["del", "theorem", "support_eq_singleton'", ["finsupp"]], ["del", "theorem", "support_eq_singleton", ["finsupp"]], ["del", "theorem", "support_erase", ["finsupp"]], ["del", "theorem", "support_finset_sum", ["finsupp"]], ["del", "theorem", "support_map_range", ["finsupp"]], ["del", "theorem", "support_map_range_of_injective", ["finsupp"]], ["del", "theorem", "support_neg", ["finsupp"]], ["del", "theorem", "support_nonempty_iff", ["finsupp"]], ["del", "theorem", "support_on_finset", ["finsupp"]], ["del", "theorem", "support_on_finset_subset", ["finsupp"]], ["del", "theorem", "support_single_disjoint", ["finsupp"]], ["del", "theorem", "support_single_ne_bot", ["finsupp"]], ["del", "theorem", "support_single_ne_zero", ["finsupp"]], ["del", "theorem", "support_single_subset", ["finsupp"]], ["del", "theorem", "support_sub", ["finsupp"]], ["del", "theorem", "support_subset_iff", ["finsupp"]], ["del", "theorem", "support_subset_singleton'", ["finsupp"]], ["del", "theorem", "support_subset_singleton", ["finsupp"]], ["del", "theorem", "support_sum", ["finsupp"]], ["del", "theorem", "support_sum_eq_bUnion", ["finsupp"]], ["del", "theorem", "support_update", ["finsupp"]], ["del", "theorem", "support_update_ne_zero", ["finsupp"]], ["del", "theorem", "support_update_zero", ["finsupp"]], ["del", "theorem", "support_zero", ["finsupp"]], ["del", "theorem", "support_zip_with", ["finsupp"]], ["del", "theorem", "unique_ext", ["finsupp"]], ["del", "theorem", "unique_ext_iff", ["finsupp"]], ["del", "theorem", "unique_single", ["finsupp"]], ["del", "theorem", "unique_single_eq_iff", ["finsupp"]], ["del", "def", "update", ["finsupp"]], ["del", "theorem", "update_eq_erase_add_single", ["finsupp"]], ["del", "theorem", "update_eq_single_add_erase", ["finsupp"]], ["del", "theorem", "update_eq_sub_add_single", ["finsupp"]], ["del", "theorem", "update_self", ["finsupp"]], ["del", "theorem", "zero_apply", ["finsupp"]], ["del", "theorem", "zero_update", ["finsupp"]], ["del", "def", "zip_with", ["finsupp"]], ["del", "theorem", "zip_with_apply", ["finsupp"]], ["del", "structure", "finsupp", []], ["del", "theorem", "map_finsupp_prod", []], ["del", "theorem", "coe_finsupp_prod", ["monoid_hom"]], ["del", "theorem", "finsupp_prod_apply", ["monoid_hom"]], ["del", "theorem", "finsupp_prod_mem", ["submonoid_class"]]]}, {"oldPath": "src/data/finsupp/big_operators.lean", "newPath": "src/data/finsupp/big_operators.lean", "changes": []}, {"oldPath": "src/data/finsupp/default.lean", "newPath": "src/data/finsupp/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finsupp/defs.lean", "changes": [["add", "def", "finsupp_unique", ["equiv"]], ["add", "theorem", "add_apply", ["finsupp"]], ["add", "theorem", "add_closure_set_of_eq_single", ["finsupp"]], ["add", "theorem", "add_hom_ext'", ["finsupp"]], ["add", "theorem", "add_hom_ext", ["finsupp"]], ["add", "def", "apply_add_hom", ["finsupp"]], ["add", "theorem", "card_support_eq_one'", ["finsupp"]], ["add", "theorem", "card_support_eq_one", ["finsupp"]], ["add", "theorem", "card_support_eq_zero", ["finsupp"]], ["add", "theorem", "card_support_le_one'", ["finsupp"]], ["add", "theorem", "card_support_le_one", ["finsupp"]], ["add", "theorem", "coe_add", ["finsupp"]], ["add", "theorem", "coe_eq_zero", ["finsupp"]], ["add", "theorem", "coe_fn_inj", ["finsupp"]], ["add", "theorem", "coe_fn_injective", ["finsupp"]], ["add", "theorem", "coe_mk", ["finsupp"]], ["add", "theorem", "coe_neg", ["finsupp"]], ["add", "theorem", "coe_sub", ["finsupp"]], ["add", "theorem", "coe_update", ["finsupp"]], ["add", "theorem", "coe_zero", ["finsupp"]], ["add", "theorem", "congr_fun", ["finsupp"]], ["add", "def", "add_monoid_hom", ["finsupp", "emb_domain"]], ["add", "def", "emb_domain", ["finsupp"]], ["add", "theorem", "emb_domain_add", ["finsupp"]], ["add", "theorem", "emb_domain_apply", ["finsupp"]], ["add", "theorem", "emb_domain_eq_zero", ["finsupp"]], ["add", "theorem", "emb_domain_inj", ["finsupp"]], ["add", "theorem", "emb_domain_injective", ["finsupp"]], ["add", "theorem", "emb_domain_map_range", ["finsupp"]], ["add", "theorem", "emb_domain_notin_range", ["finsupp"]], ["add", "theorem", "emb_domain_single", ["finsupp"]], ["add", "theorem", "emb_domain_zero", ["finsupp"]], ["add", "theorem", "eq_single_iff", ["finsupp"]], ["add", "def", "equiv_fun_on_fintype", ["finsupp"]], ["add", "theorem", "equiv_fun_on_fintype_single", ["finsupp"]], ["add", "theorem", "equiv_fun_on_fintype_symm_coe", ["finsupp"]], ["add", "theorem", "equiv_fun_on_fintype_symm_single", ["finsupp"]], ["add", "def", "erase", ["finsupp"]], ["add", "theorem", "erase_add", ["finsupp"]], ["add", "def", "erase_add_hom", ["finsupp"]], ["add", "theorem", "erase_add_single", ["finsupp"]], ["add", "theorem", "erase_eq_sub_single", ["finsupp"]], ["add", "theorem", "erase_ne", ["finsupp"]], ["add", "theorem", "erase_of_not_mem_support", ["finsupp"]], ["add", "theorem", "erase_same", ["finsupp"]], ["add", "theorem", "erase_single", ["finsupp"]], ["add", "theorem", "erase_single_ne", ["finsupp"]], ["add", "theorem", "erase_zero", ["finsupp"]], ["add", "theorem", "ext", ["finsupp"]], ["add", "theorem", "ext_iff'", ["finsupp"]], ["add", "theorem", "ext_iff", ["finsupp"]], ["add", "theorem", "finite_support", ["finsupp"]], ["add", "theorem", "fun_support_eq", ["finsupp"]], ["add", "theorem", "induction_linear", ["finsupp"]], ["add", "theorem", "induction₂", ["finsupp"]], ["add", "def", "map_range", ["finsupp"]], ["add", "theorem", "map_range_add", ["finsupp"]], ["add", "theorem", "map_range_apply", ["finsupp"]], ["add", "theorem", "map_range_comp", ["finsupp"]], ["add", "theorem", "map_range_id", ["finsupp"]], ["add", "theorem", "map_range_single", ["finsupp"]], ["add", "theorem", "map_range_zero", ["finsupp"]], ["add", "theorem", "mem_support_iff", ["finsupp"]], ["add", "theorem", "mem_support_on_finset", ["finsupp"]], ["add", "theorem", "mem_support_single", ["finsupp"]], ["add", "theorem", "mul_hom_ext'", ["finsupp"]], ["add", "theorem", "mul_hom_ext", ["finsupp"]], ["add", "theorem", "neg_apply", ["finsupp"]], ["add", "theorem", "nonzero_iff_exists", ["finsupp"]], ["add", "theorem", "not_mem_support_iff", ["finsupp"]], ["add", "theorem", "of_support_finite_coe", ["finsupp"]], ["add", "def", "on_finset", ["finsupp"]], ["add", "theorem", "on_finset_apply", ["finsupp"]], ["add", "theorem", "range_single_subset", ["finsupp"]], ["add", "def", "single", ["finsupp"]], ["add", "theorem", "single_add", ["finsupp"]], ["add", "theorem", "single_add_erase", ["finsupp"]], ["add", "def", "single_add_hom", ["finsupp"]], ["add", "theorem", "single_add_single_eq_single_add_single", ["finsupp"]], ["add", "theorem", "single_apply", ["finsupp"]], ["add", "theorem", "single_apply_eq_zero", ["finsupp"]], ["add", "theorem", "single_apply_mem", ["finsupp"]], ["add", "theorem", "single_apply_ne_zero", ["finsupp"]], ["add", "theorem", "single_eq_indicator", ["finsupp"]], ["add", "theorem", "single_eq_of_ne", ["finsupp"]], ["add", "theorem", "single_eq_pi_single", ["finsupp"]], ["add", "theorem", "single_eq_same", ["finsupp"]], ["add", "theorem", "single_eq_single_iff", ["finsupp"]], ["add", "theorem", "single_eq_update", ["finsupp"]], ["add", "theorem", "single_eq_zero", ["finsupp"]], ["add", "theorem", "single_injective", ["finsupp"]], ["add", "theorem", "single_left_inj", ["finsupp"]], ["add", "theorem", "single_left_injective", ["finsupp"]], ["add", "theorem", "single_of_emb_domain_single", ["finsupp"]], ["add", "theorem", "single_of_single_apply", ["finsupp"]], ["add", "theorem", "single_swap", ["finsupp"]], ["add", "theorem", "single_zero", ["finsupp"]], ["add", "theorem", "sub_apply", ["finsupp"]], ["add", "theorem", "support_add", ["finsupp"]], ["add", "theorem", "support_add_eq", ["finsupp"]], ["add", "theorem", "support_emb_domain", ["finsupp"]], ["add", "theorem", "support_eq_empty", ["finsupp"]], ["add", "theorem", "support_eq_singleton'", ["finsupp"]], ["add", "theorem", "support_eq_singleton", ["finsupp"]], ["add", "theorem", "support_erase", ["finsupp"]], ["add", "theorem", "support_map_range", ["finsupp"]], ["add", "theorem", "support_map_range_of_injective", ["finsupp"]], ["add", "theorem", "support_neg", ["finsupp"]], ["add", "theorem", "support_nonempty_iff", ["finsupp"]], ["add", "theorem", "support_on_finset", ["finsupp"]], ["add", "theorem", "support_on_finset_subset", ["finsupp"]], ["add", "theorem", "support_single_disjoint", ["finsupp"]], ["add", "theorem", "support_single_ne_bot", ["finsupp"]], ["add", "theorem", "support_single_ne_zero", ["finsupp"]], ["add", "theorem", "support_single_subset", ["finsupp"]], ["add", "theorem", "support_sub", ["finsupp"]], ["add", "theorem", "support_subset_iff", ["finsupp"]], ["add", "theorem", "support_subset_singleton'", ["finsupp"]], ["add", "theorem", "support_subset_singleton", ["finsupp"]], ["add", "theorem", "support_update", ["finsupp"]], ["add", "theorem", "support_update_ne_zero", ["finsupp"]], ["add", "theorem", "support_update_zero", ["finsupp"]], ["add", "theorem", "support_zero", ["finsupp"]], ["add", "theorem", "support_zip_with", ["finsupp"]], ["add", "theorem", "unique_ext", ["finsupp"]], ["add", "theorem", "unique_ext_iff", ["finsupp"]], ["add", "theorem", "unique_single", ["finsupp"]], ["add", "theorem", "unique_single_eq_iff", ["finsupp"]], ["add", "def", "update", ["finsupp"]], ["add", "theorem", "update_eq_erase_add_single", ["finsupp"]], ["add", "theorem", "update_eq_single_add_erase", ["finsupp"]], ["add", "theorem", "update_eq_sub_add_single", ["finsupp"]], ["add", "theorem", "update_self", ["finsupp"]], ["add", "theorem", "zero_apply", ["finsupp"]], ["add", "theorem", "zero_update", ["finsupp"]], ["add", "def", "zip_with", ["finsupp"]], ["add", "theorem", "zip_with_apply", ["finsupp"]], ["add", "structure", "finsupp", []]]}, {"oldPath": "src/data/finsupp/fin.lean", "newPath": "src/data/finsupp/fin.lean", "changes": []}, {"oldPath": "src/data/finsupp/indicator.lean", "newPath": "src/data/finsupp/indicator.lean", "changes": []}, {"oldPath": "src/data/finsupp/multiset.lean", "newPath": "src/data/finsupp/multiset.lean", "changes": []}, {"oldPath": "src/data/finsupp/order.lean", "newPath": "src/data/finsupp/order.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}, {"oldPath": "test/conv/apply_congr.lean", "newPath": "test/conv/apply_congr.lean", "changes": []}]}, {"timestamp": 1660937431, "sha": "0fc54965", "message": "feat(linear_algebra/matrix): LDL Decomposition (#15220)\nAny positive definite matrix `S` can be decomposed as `S = LDLᴴ` where `L` is a lower-triangular matrix and `D` is a diagonal matrix.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "mul_mul_apply", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "def", "invertible_to_matrix", ["basis"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/ldl.lean", "changes": [["add", "theorem", "diag_eq_lower_inv_conj", ["LDL"]], ["add", "theorem", "lower_conj_diag", ["LDL"]], ["add", "theorem", "lower_inv_eq_gram_schmidt_basis", ["LDL"]], ["add", "theorem", "lower_inv_orthogonal", ["LDL"]], ["add", "theorem", "lower_inv_triangular", ["LDL"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "inv_mul_eq_iff_eq_mul_of_invertible", ["matrix"]], ["add", "def", "invertible__of_invertible_transpose", ["matrix"]], ["add", "def", "invertible_of_invertible_conj_transpose", ["matrix"]], ["add", "theorem", "is_unit_of_left_inverse", ["matrix"]], ["add", "theorem", "is_unit_of_right_inverse", ["matrix"]], ["add", "theorem", "mul_inv_eq_iff_eq_mul_of_invertible", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/pos_def.lean", "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": [["add", "theorem", "transpose", ["matrix", "pos_def"]]]}]}, {"timestamp": 1660927446, "sha": "aaf7dc2c", "message": "chore(data/multiset/basic): rename theorems, mark as `simp` (#15883)\nThis PR does the following:\n- rename `coe_nil_eq_zero` to `coe_nil`.\n- rename `singleton_eq_cons` to `cons_zero`, flip direction, mark `simp` (we prefer `{a}` over `a ::ₘ 0`).\n- add lemmas `coe_singleton` and `singleton_eq_cons_iff`.\n- ditch `singleton_coe` in favor of `cons_zero` and `coe_singleton`.\n- mark `singleton_add`, `singleton_inj`, `nodup_singleton` as `simp`.\n- unmark `count_singleton_self` as `simp`, since it can now be solved automatically via `count_eq_one_of_mem`.", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "coe_nil", ["multiset"]], ["del", "theorem", "coe_nil_eq_zero", ["multiset"]], ["add", "theorem", "coe_singleton", ["multiset"]], ["add", "theorem", "cons_zero", ["multiset"]], ["mod", "theorem", "count_singleton_self", ["multiset"]], ["mod", "theorem", "singleton_add", ["multiset"]], ["del", "theorem", "singleton_coe", ["multiset"]], ["del", "theorem", "singleton_eq_cons", ["multiset"]], ["add", "theorem", "singleton_eq_cons_iff", ["multiset"]], ["mod", "theorem", "singleton_inj", ["multiset"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["mod", "theorem", "nodup_singleton", ["multiset"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/concrete.lean", "newPath": "src/group_theory/perm/cycle/concrete.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1660917221, "sha": "efd9dd3c", "message": "feat(data/finsupp/basic): more lemmas on `alist.lookup_finsupp` (#15875)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "empty_lookup_finsupp", ["alist"]], ["add", "theorem", "insert_lookup_finsupp", ["alist"]], ["add", "theorem", "lookup_finsupp_eq_iff_of_ne_zero", ["alist"]], ["add", "theorem", "lookup_finsupp_eq_zero_iff", ["alist"]], ["add", "theorem", "singleton_lookup_finsupp", ["alist"]], ["del", "theorem", "to_alist_lookup_finsupp", ["alist"]], ["add", "theorem", "to_alist_lookup_finsupp", ["finsupp"]], ["add", "theorem", "zero_update", ["finsupp"]]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["add", "theorem", "insert_empty", ["alist"]], ["mod", "theorem", "not_mem_empty", ["alist"]]]}]}, {"timestamp": 1660917220, "sha": "34d6de4b", "message": "feat(src/tactic/rcases): rsuffices(I) = suffices + obtain (+ resetI) (#15735)", "changes": [{"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1660909683, "sha": "be87e250", "message": "feat(topology/algebra): subgroup.is_closed_of_discrete (#16130)", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1660909682, "sha": "6a966c80", "message": "chore(geometry/manifold/complex): extract some theory of locally constant functions (#16019)\nAfter #16015, I realised that we might as well deduce the rest of the lemmas in the file from the `is_locally_constant` lemma by appealing to general theory about locally constant functions. I have added three such lemmas to the general theory of locally constant functions:\n* `is_locally_constant.apply_eq_of_preconnected_space`\n* `is_locally_constant.eq_const`\n* `is_locally_constant.exists_eq_const`\nAll are direct copies of the lemmas for the bundled version (`locally_constant`). Then I reworked the holomorphic function theory to pass through these, which cuts a few lines from the file.", "changes": [{"oldPath": "src/geometry/manifold/complex.lean", "newPath": "src/geometry/manifold/complex.lean", "changes": [["mod", "theorem", "apply_eq_of_compact_space", ["mdifferentiable"]], ["del", "theorem", "apply_eq_of_is_compact", ["mdifferentiable"]], ["mod", "theorem", "exists_eq_const_of_compact_space", ["mdifferentiable"]]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "apply_eq_of_preconnected_space", ["is_locally_constant"]], ["add", "theorem", "eq_const", ["is_locally_constant"]], ["add", "theorem", "exists_eq_const", ["is_locally_constant"]]]}]}, {"timestamp": 1660909680, "sha": "4dd837dc", "message": "refactor(topology/sequences): redefine `is_seq_closed`, define Fréchet-Urysohn spaces (#15953)\n* redefine `is_seq_closed` as \"the set contains every limit of a sequence of points from this set\";\n* delete `is_seq_closed_of_def` and `is_seq_closed.mem_of_tendsto`, because now we use this property as the definition;\n* rename `sequential_space` to `frechet_urysohn_space`, add new `sequential_space`; this way our definitions agree with textbooks.", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["mod", "theorem", "continuous_iff_seq_continuous", []], ["add", "theorem", "of_seq_tendsto_imp_tendsto", ["frechet_urysohn_space"]], ["del", "theorem", "is_seq_closed", ["is_closed"]], ["del", "theorem", "mem_of_tendsto", ["is_seq_closed"]], ["add", "theorem", "preimage", ["is_seq_closed"]], ["add", "theorem", "seq_closure_eq", ["is_seq_closed"]], ["mod", "def", "is_seq_closed", []], ["add", "theorem", "is_seq_closed_iff", []], ["mod", "theorem", "is_seq_closed_iff_is_closed", []], ["del", "theorem", "is_seq_closed_of_def", []], ["add", "theorem", "is_seq_closed_of_seq_closure_eq", []], ["mod", "theorem", "mem_closure_iff_seq_limit", []], ["add", "theorem", "sequential_space", ["quotient_map"]], ["add", "theorem", "seq_closure_eq_closure", []], ["mod", "theorem", "seq_closure_subset_closure", []], ["mod", "theorem", "subset_seq_closure", []], ["add", "theorem", "tendsto_nhds_iff_seq_tendsto", []]]}]}, {"timestamp": 1660909679, "sha": "54b45730", "message": "feat(data/int/modeq): add modeq_iff_add_fac, modeq_add_fac_self (#15816)\nAdding some API for int.modeq", "changes": [{"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": [["add", "theorem", "modeq_add_fac_self", ["int"]], ["add", "theorem", "modeq_iff_add_fac", ["int"]]]}]}, {"timestamp": 1660901058, "sha": "a07d03ac", "message": "chore(analysis/calculus/cont_diff): Add two missing cont_diff_on lemmas (#16108)\nAdds two lemmas that are immediate consequences of `cont_diff_on.of_le`. Names and proofs are taken verbatim from the corresponding `cont_diff` lemmas.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "of_succ", ["cont_diff_on"]], ["add", "theorem", "one_of_succ", ["cont_diff_on"]]]}]}, {"timestamp": 1660901057, "sha": "4e861f25", "message": "feat(group_theory/submonoid/basic): weaken assumptions for `has_one` instance to `one_mem_class` for `set_like` subobjects (#16104)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/decomposition.lean", "newPath": "src/algebra/direct_sum/decomposition.lean", "changes": []}, {"oldPath": "src/algebra/module/injective.lean", "newPath": "src/algebra/module/injective.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "coe_eq_one", ["one_mem_class"]], ["add", "theorem", "coe_one", ["one_mem_class"]], ["add", "theorem", "one_def", ["one_mem_class"]], ["del", "theorem", "coe_eq_one", ["submonoid_class"]], ["del", "theorem", "coe_one", ["submonoid_class"]], ["del", "theorem", "one_def", ["submonoid_class"]]]}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1660893161, "sha": "b4a51d92", "message": "feat(topology/algebra/module): add basic definitions for `linear_pmap` in topological vector spaces (#15479)\nWe define closed, closable operators, the closure, and cores. All these definitions are valid on topological vector spaces.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "def", "dom_restrict", ["linear_pmap"]], ["add", "theorem", "dom_restrict_apply", ["linear_pmap"]], ["add", "theorem", "dom_restrict_domain", ["linear_pmap"]], ["add", "theorem", "dom_restrict_le", ["linear_pmap"]], ["add", "theorem", "le_graph_iff", ["linear_pmap"]], ["add", "theorem", "le_graph_of_le", ["linear_pmap"]], ["add", "theorem", "mem_domain_of_mem_graph", ["linear_pmap"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/module/linear_pmap.lean", "changes": [["add", "def", "closure", ["linear_pmap"]], ["add", "theorem", "closure_def'", ["linear_pmap"]], ["add", "theorem", "closure_def", ["linear_pmap"]], ["add", "theorem", "closure_has_core", ["linear_pmap"]], ["add", "structure", "has_core", ["linear_pmap"]], ["add", "theorem", "has_core_def", ["linear_pmap"]], ["add", "theorem", "closure_is_closable", ["linear_pmap", "is_closable"]], ["add", "theorem", "closure_is_closed", ["linear_pmap", "is_closable"]], ["add", "theorem", "closure_mono", ["linear_pmap", "is_closable"]], ["add", "theorem", "exists_unique", ["linear_pmap", "is_closable"]], ["add", "theorem", "graph_closure_eq_closure_graph", ["linear_pmap", "is_closable"]], ["add", "theorem", "le_is_closable", ["linear_pmap", "is_closable"]], ["add", "def", "is_closable", ["linear_pmap"]], ["add", "theorem", "is_closable_iff_exists_closed_extension", ["linear_pmap"]], ["add", "theorem", "is_closable", ["linear_pmap", "is_closed"]], ["add", "def", "is_closed", ["linear_pmap"]], ["add", "theorem", "le_closure", ["linear_pmap"]]]}]}, {"timestamp": 1660887398, "sha": "2faca70c", "message": "chore(scripts): update nolints.txt (#16146)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1660879144, "sha": "33f4d61e", "message": "feat(algebra/algebra/basic):add `alg_hom.prod` (#16116)\nThis adds `alg_hom.prod` to go with `alg_hom.fst` and `alg_hom.snd`. It was noticed to be missing during #16089.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_prod", ["alg_hom"]], ["add", "theorem", "fst_prod", ["alg_hom"]], ["add", "def", "prod", ["alg_hom"]], ["add", "def", "prod_equiv", ["alg_hom"]], ["add", "theorem", "prod_fst_snd", ["alg_hom"]], ["add", "theorem", "snd_prod", ["alg_hom"]]]}]}, {"timestamp": 1660857623, "sha": "34020e53", "message": "chore(linear_algebra/basic): generalize `submodule.map`, `comap`, etc to `semilinear_map_class` (#16105)\nThis PR generalizes `submodule.map`, `submodule.comap`, `linear_map.ker` and `linear_map.range` such that they are defined for any morphism class satisfying `semilinear_map_class` (they are currently hardcoded for `linear_map`s). The namespaces have been left as is.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/homology/Module.lean", "newPath": "src/algebra/homology/Module.lean", "changes": []}, {"oldPath": "src/algebra/module/injective.lean", "newPath": "src/algebra/module/injective.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule/pointwise.lean", "newPath": "src/algebra/module/submodule/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": [["mod", "def", "torsion_by", ["submodule"]]]}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": [["mod", "theorem", "grade_eq_lsingle_range", ["add_monoid_algebra"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "map_orthogonal_projection'", ["linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["mod", "theorem", "is_complete_image_iff", ["linear_isometry"]], ["add", "theorem", "is_complete_map_iff'", ["linear_isometry"]], ["mod", "theorem", "nnnorm_map", ["linear_isometry"]], ["mod", "theorem", "norm_map", ["linear_isometry"]], ["mod", "theorem", "nnnorm_map", ["linear_isometry_equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "comap_injective", ["linear_map"]], ["mod", "theorem", "comap_le_comap_iff", ["linear_map"]], ["mod", "theorem", "disjoint_ker", ["linear_map"]], ["mod", "def", "ker", ["linear_map"]], ["mod", "theorem", "ker_eq_bot'", ["linear_map"]], ["mod", "theorem", "ker_eq_bot_of_injective", ["linear_map"]], ["mod", "theorem", "le_ker_iff_map", ["linear_map"]], ["mod", "theorem", "map_coe_ker", ["linear_map"]], ["mod", "theorem", "map_le_range", ["linear_map"]], ["mod", "theorem", "mem_ker", ["linear_map"]], ["mod", "def", "range", ["linear_map"]], ["mod", "theorem", "range_coe", ["linear_map"]], ["mod", "theorem", "range_eq_top", ["linear_map"]], ["mod", "theorem", "range_le_iff_comap", ["linear_map"]], ["mod", "theorem", "apply_coe_mem_map", ["submodule"]], ["mod", "theorem", "coe_equiv_map_of_injective_apply", ["submodule"]], ["mod", "def", "comap", ["submodule"]], ["mod", "theorem", "comap_bot", ["submodule"]], ["mod", "theorem", "comap_coe", ["submodule"]], ["mod", "theorem", "comap_id", ["submodule"]], ["mod", "theorem", "comap_inf", ["submodule"]], ["mod", "theorem", "comap_infi", ["submodule"]], ["mod", "theorem", "comap_mono", ["submodule"]], ["mod", "theorem", "comap_top", ["submodule"]], ["mod", "theorem", "gc_map_comap", ["submodule"]], ["mod", "theorem", "le_comap_map", ["submodule"]], ["mod", "def", "map", ["submodule"]], ["mod", "theorem", "map_bot", ["submodule"]], ["mod", "theorem", "map_coe", ["submodule"]], ["mod", "theorem", "map_comap_le", ["submodule"]], ["mod", "theorem", "map_inf_eq_map_inf_comap", ["submodule"]], ["mod", "theorem", "map_le_iff_le_comap", ["submodule"]], ["mod", "theorem", "map_mono", ["submodule"]], ["mod", "theorem", "map_sup", ["submodule"]], ["mod", "theorem", "map_supr", ["submodule"]], ["mod", "theorem", "map_top", ["submodule"]], ["mod", "theorem", "mem_comap", ["submodule"]], ["mod", "theorem", "mem_map", ["submodule"]], ["mod", "theorem", "mem_map_of_mem", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": [["mod", "theorem", "even_odd_comap_reverse", ["clifford_algebra"]], ["mod", "theorem", "even_odd_map_reverse", ["clifford_algebra"]], ["mod", "theorem", "ι_range_comap_involute", ["clifford_algebra"]], ["mod", "theorem", "ι_range_comap_reverse", ["clifford_algebra"]], ["mod", "theorem", "ι_range_map_involute", ["clifford_algebra"]], ["mod", "theorem", "ι_range_map_reverse", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": [["mod", "theorem", "ι_range_disjoint_one", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/isomorphisms.lean", "newPath": "src/linear_algebra/isomorphisms.lean", "changes": [["mod", "def", "quotient_quotient_equiv_quotient_aux", ["submodule"]]]}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["mod", "theorem", "infi_ker_proj", ["linear_map"]], ["mod", "theorem", "binfi_comap_proj", ["submodule"]], ["mod", "theorem", "infi_comap_proj", ["submodule"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": [["mod", "theorem", "mapq_id", ["submodule"]]]}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["mod", "theorem", "map_eq_top_iff", ["linear_map"]], ["mod", "theorem", "map_injective", ["linear_map"]], ["mod", "theorem", "map_le_map_iff'", ["linear_map"]], ["mod", "theorem", "comap_map_eq", ["submodule"]], ["mod", "theorem", "comap_map_eq_self", ["submodule"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/basic.lean", "newPath": "src/linear_algebra/tensor_algebra/basic.lean", "changes": [["mod", "theorem", "ι_range_disjoint_one", ["tensor_algebra"]]]}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/cotangent.lean", "newPath": "src/ring_theory/ideal/cotangent.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "mem_annihilator'", ["submodule"]], ["mod", "theorem", "mem_colon'", ["submodule"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/rees_algebra.lean", "newPath": "src/ring_theory/rees_algebra.lean", "changes": []}]}, {"timestamp": 1660845492, "sha": "f651d75e", "message": "chore(data/polynomial/derivative): merge iterated_deriv.lean into derivative.lean (#16022)\niterated_deriv.lean was not used anywhere, and derivative.lean already had independent variants of several of the lemmas there, without the `iterated_deriv` indirecion. It seems better to consolidate these results.", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "coeff_iterate_derivative_as_prod_Ico", ["polynomial"]], ["add", "theorem", "coeff_iterate_derivative_as_prod_range", ["polynomial"]], ["add", "theorem", "iterate_derivative_C", ["polynomial"]], ["add", "theorem", "iterate_derivative_X", ["polynomial"]], ["add", "theorem", "iterate_derivative_mul", ["polynomial"]], ["add", "theorem", "iterate_derivative_one", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": null, "changes": [["del", "theorem", "coeff_iterated_deriv_as_prod_Ico", ["polynomial"]], ["del", "theorem", "coeff_iterated_deriv_as_prod_range", ["polynomial"]], ["del", "def", "iterated_deriv", ["polynomial"]], ["del", "theorem", "iterated_deriv_C", ["polynomial"]], ["del", "theorem", "iterated_deriv_C_zero", ["polynomial"]], ["del", "theorem", "iterated_deriv_X", ["polynomial"]], ["del", "theorem", "iterated_deriv_X_one", ["polynomial"]], ["del", "theorem", "iterated_deriv_X_zero", ["polynomial"]], ["del", "theorem", "iterated_deriv_add", ["polynomial"]], ["del", "theorem", "iterated_deriv_eq_zero_of_nat_degree_lt", ["polynomial"]], ["del", "theorem", "iterated_deriv_mul", ["polynomial"]], ["del", "theorem", "iterated_deriv_neg", ["polynomial"]], ["del", "theorem", "iterated_deriv_one", ["polynomial"]], ["del", "theorem", "iterated_deriv_one_zero", ["polynomial"]], ["del", "theorem", "iterated_deriv_smul", ["polynomial"]], ["del", "theorem", "iterated_deriv_sub", ["polynomial"]], ["del", "theorem", "iterated_deriv_succ", ["polynomial"]], ["del", "theorem", "iterated_deriv_zero_left", ["polynomial"]], ["del", "theorem", "iterated_deriv_zero_right", ["polynomial"]]]}]}, {"timestamp": 1660835557, "sha": "2cf5d19e", "message": "chore(algebra/*): Fix lint (#16128)\nSatisfy the `fintype_finite` and `to_additive_doc` linters.", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["mod", "theorem", "finprod_mem_Union", []]]}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["mod", "theorem", "functions_ext'", ["add_monoid_hom"]], ["mod", "theorem", "functions_ext", ["add_monoid_hom"]], ["mod", "theorem", "functions_ext", ["ring_hom"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "is_square_of_char_two'", []]]}, {"oldPath": "src/algebra/hom/freiman.lean", "newPath": "src/algebra/hom/freiman.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": []}]}, {"timestamp": 1660835555, "sha": "e53226cf", "message": "chore(probability/martingale/upcrossing): remove duplicate lemma (#16125)", "changes": [{"oldPath": "src/probability/martingale/upcrossing.lean", "newPath": "src/probability/martingale/upcrossing.lean", "changes": [["del", "theorem", "mul_integral_upcrossings_before_le_integral_pos_part_aux1", ["measure_theory"]], ["del", "theorem", "mul_integral_upcrossings_before_le_integral_pos_part_aux2", ["measure_theory"]], ["add", "theorem", "mul_integral_upcrossings_before_le_integral_pos_part_aux", ["measure_theory"]]]}]}, {"timestamp": 1660830384, "sha": "14c52e99", "message": "feat(data/set/intervals/instances): algebraic instances for unit intervals (#15712)\nProving `cancel_comm_monoid_with_zero (Icc 0 1)`, `comm_semigroup (Ico 0 1)`, `comm_monoid (Ioc 0 1)`, and `comm_semigroup (Ioo 0 1)` for suitably structured underlying type `α`.", "changes": [{"oldPath": null, "newPath": "src/data/set/intervals/instances.lean", "changes": [["add", "theorem", "coe_eq_one", ["set", "Icc"]], ["add", "theorem", "coe_eq_zero", ["set", "Icc"]], ["add", "theorem", "coe_le_one", ["set", "Icc"]], ["add", "theorem", "coe_mul", ["set", "Icc"]], ["add", "theorem", "coe_ne_one", ["set", "Icc"]], ["add", "theorem", "coe_ne_zero", ["set", "Icc"]], ["add", "theorem", "coe_nonneg", ["set", "Icc"]], ["add", "theorem", "coe_one", ["set", "Icc"]], ["add", "theorem", "coe_pow", ["set", "Icc"]], ["add", "theorem", "coe_zero", ["set", "Icc"]], ["add", "theorem", "le_one", ["set", "Icc"]], ["add", "theorem", "mem_iff_one_sub_mem", ["set", "Icc"]], ["add", "theorem", "mk_one", ["set", "Icc"]], ["add", "theorem", "mk_zero", ["set", "Icc"]], ["add", "theorem", "mul_le_left", ["set", "Icc"]], ["add", "theorem", "mul_le_right", ["set", "Icc"]], ["add", "theorem", "nonneg", ["set", "Icc"]], ["add", "theorem", "one_sub_le_one", ["set", "Icc"]], ["add", "theorem", "one_sub_mem", ["set", "Icc"]], ["add", "theorem", "one_sub_nonneg", ["set", "Icc"]], ["add", "theorem", "coe_eq_zero", ["set", "Ico"]], ["add", "theorem", "coe_lt_one", ["set", "Ico"]], ["add", "theorem", "coe_mul", ["set", "Ico"]], ["add", "theorem", "coe_ne_zero", ["set", "Ico"]], ["add", "theorem", "coe_nonneg", ["set", "Ico"]], ["add", "theorem", "coe_zero", ["set", "Ico"]], ["add", "theorem", "mk_zero", ["set", "Ico"]], ["add", "theorem", "nonneg", ["set", "Ico"]], ["add", "theorem", "coe_eq_one", ["set", "Ioc"]], ["add", "theorem", "coe_le_one", ["set", "Ioc"]], ["add", "theorem", "coe_mul", ["set", "Ioc"]], ["add", "theorem", "coe_ne_one", ["set", "Ioc"]], ["add", "theorem", "coe_one", ["set", "Ioc"]], ["add", "theorem", "coe_pos", ["set", "Ioc"]], ["add", "theorem", "coe_pow", ["set", "Ioc"]], ["add", "theorem", "le_one", ["set", "Ioc"]], ["add", "theorem", "mk_one", ["set", "Ioc"]], ["add", "theorem", "coe_mul", ["set", "Ioo"]], ["add", "theorem", "lt_one", ["set", "Ioo"]], ["add", "theorem", "mem_iff_one_sub_mem", ["set", "Ioo"]], ["add", "theorem", "one_minus_lt_one", ["set", "Ioo"]], ["add", "theorem", "one_minus_pos", ["set", "Ioo"]], ["add", "theorem", "one_sub_mem", ["set", "Ioo"]], ["add", "theorem", "pos", ["set", "Ioo"]]]}, {"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": [["del", "theorem", "coe_eq_one", ["unit_interval"]], ["del", "theorem", "coe_eq_zero", ["unit_interval"]], ["del", "theorem", "coe_mul", ["unit_interval"]], ["del", "theorem", "coe_one", ["unit_interval"]], ["del", "theorem", "coe_zero", ["unit_interval"]], ["del", "theorem", "mk_one", ["unit_interval"]], ["del", "theorem", "mk_zero", ["unit_interval"]]]}]}, {"timestamp": 1660822951, "sha": "55e2dfde", "message": "chore(data.matrix): rename `minor` to `submatrix` (#16101)\nAs discussed on Zulip: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/matrix.2Eminor.20wrong.20terminology.3F\nThis is an alternative to the previous plan to rename `minor` to `on` in #16063. \nMoreover, I have adapted some documentation in `src/linear_algebra/matrix/adjugate.lean` that also used the term \"minor\" in the wrong way.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "theorem", "conj_transpose_minor", ["matrix"]], ["add", "theorem", "conj_transpose_submatrix", ["matrix"]], ["del", "theorem", "diag_minor", ["matrix"]], ["add", "theorem", "diag_submatrix", ["matrix"]], ["del", "def", "minor", ["matrix"]], ["del", "theorem", "minor_add", ["matrix"]], ["del", "theorem", "minor_apply", ["matrix"]], ["del", "theorem", "minor_diagonal", ["matrix"]], ["del", "theorem", "minor_diagonal_embedding", ["matrix"]], ["del", "theorem", "minor_diagonal_equiv", ["matrix"]], ["del", "theorem", "minor_id_id", ["matrix"]], ["del", "theorem", "minor_map", ["matrix"]], ["del", "theorem", "minor_minor", ["matrix"]], ["del", "theorem", "minor_mul", ["matrix"]], ["del", "theorem", "minor_mul_equiv", ["matrix"]], ["del", "theorem", "minor_mul_transpose_minor", ["matrix"]], ["del", "theorem", "minor_neg", ["matrix"]], ["del", "theorem", "minor_one", ["matrix"]], ["del", "theorem", "minor_one_embedding", ["matrix"]], ["del", "theorem", "minor_one_equiv", ["matrix"]], ["del", "theorem", "minor_smul", ["matrix"]], ["del", "theorem", "minor_sub", ["matrix"]], ["del", "theorem", "minor_zero", ["matrix"]], ["del", "theorem", "mul_minor_one", ["matrix"]], ["add", "theorem", "mul_submatrix_one", ["matrix"]], ["del", "theorem", "one_minor_mul", ["matrix"]], ["add", "theorem", "one_submatrix_mul", ["matrix"]], ["add", "def", "submatrix", ["matrix"]], ["add", "theorem", "submatrix_add", ["matrix"]], ["add", "theorem", "submatrix_apply", ["matrix"]], ["add", "theorem", "submatrix_diagonal", ["matrix"]], ["add", "theorem", "submatrix_diagonal_embedding", ["matrix"]], ["add", "theorem", "submatrix_diagonal_equiv", ["matrix"]], ["add", "theorem", "submatrix_id_id", ["matrix"]], ["add", "theorem", "submatrix_map", ["matrix"]], ["add", "theorem", "submatrix_mul", ["matrix"]], ["add", "theorem", "submatrix_mul_equiv", ["matrix"]], ["add", "theorem", "submatrix_mul_transpose_submatrix", ["matrix"]], ["add", "theorem", "submatrix_neg", ["matrix"]], ["add", "theorem", "submatrix_one", ["matrix"]], ["add", "theorem", "submatrix_one_embedding", ["matrix"]], ["add", "theorem", "submatrix_one_equiv", ["matrix"]], ["add", "theorem", "submatrix_smul", ["matrix"]], ["add", "theorem", "submatrix_sub", ["matrix"]], ["add", "theorem", "submatrix_submatrix", ["matrix"]], ["add", "theorem", "submatrix_zero", ["matrix"]], ["del", "theorem", "transpose_minor", ["matrix"]], ["add", "theorem", "transpose_submatrix", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["del", "theorem", "block_diagonal'_minor_eq_block_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal'_submatrix_eq_block_diagonal", ["matrix"]], ["del", "theorem", "from_blocks_minor_sum_swap_left", ["matrix"]], ["del", "theorem", "from_blocks_minor_sum_swap_right", ["matrix"]], ["del", "theorem", "from_blocks_minor_sum_swap_sum_swap", ["matrix"]], ["add", "theorem", "from_blocks_submatrix_sum_swap_left", ["matrix"]], ["add", "theorem", "from_blocks_submatrix_sum_swap_right", ["matrix"]], ["add", "theorem", "from_blocks_submatrix_sum_swap_sum_swap", ["matrix"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["del", "theorem", "minor_cons_row", ["matrix"]], ["del", "theorem", "minor_empty", ["matrix"]], ["add", "theorem", "submatrix_cons_row", ["matrix"]], ["add", "theorem", "submatrix_empty", ["matrix"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["del", "theorem", "det_minor_equiv_self", ["matrix"]], ["add", "theorem", "det_submatrix_equiv_self", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": [["del", "theorem", "minor", ["matrix", "is_hermitian"]], ["add", "theorem", "submatrix", ["matrix", "is_hermitian"]]]}, {"oldPath": "src/linear_algebra/matrix/is_diag.lean", "newPath": "src/linear_algebra/matrix/is_diag.lean", "changes": [["del", "theorem", "minor", ["matrix", "is_diag"]], ["add", "theorem", "submatrix", ["matrix", "is_diag"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/symmetric.lean", "newPath": "src/linear_algebra/matrix/symmetric.lean", "changes": [["del", "theorem", "minor", ["matrix", "is_symm"]], ["add", "theorem", "submatrix", ["matrix", "is_symm"]]]}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": [["del", "theorem", "matrix_minor", ["continuous"]], ["add", "theorem", "matrix_submatrix", ["continuous"]]]}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1660815568, "sha": "eba35e3a", "message": "feat(ring_theory/etale): Condition for a quotient of a formally smooth algebra to be formally smooth. (#15842)", "changes": [{"oldPath": "src/ring_theory/etale.lean", "newPath": "src/ring_theory/etale.lean", "changes": [["add", "theorem", "comp_lift_of_surjective", ["algebra", "formally_smooth"]], ["add", "theorem", "iff_split_surjection", ["algebra", "formally_smooth"]], ["add", "def", "lift_of_surjective", ["algebra", "formally_smooth"]], ["add", "theorem", "lift_of_surjective_apply", ["algebra", "formally_smooth"]], ["add", "theorem", "of_split", ["algebra", "formally_smooth"]]]}, {"oldPath": "src/ring_theory/ideal/cotangent.lean", "newPath": "src/ring_theory/ideal/cotangent.lean", "changes": [["add", "theorem", "ker_ker_sqare_lift", ["alg_hom"]], ["add", "def", "ker_square_lift", ["alg_hom"]], ["add", "theorem", "cotangent_ideal_square", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "le_comap_pow", ["ideal"]], ["add", "theorem", "pow_mono", ["ideal"]], ["add", "def", "liftₐ", ["ideal", "quotient"]], ["add", "theorem", "liftₐ_apply", ["ideal", "quotient"]], ["add", "theorem", "liftₐ_comp", ["ideal", "quotient"]]]}]}, {"timestamp": 1660793713, "sha": "881d1ce9", "message": "chore(scripts): update nolints.txt (#16117)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1660785312, "sha": "32258e92", "message": "chore(number_theory/cyclotomic/primitive_roots): generalisation linter (#16013)", "changes": [{"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["mod", "theorem", "norm_eq_neg_one_pow", ["is_primitive_root"]], ["mod", "theorem", "norm_eq_one", ["is_primitive_root"]], ["mod", "theorem", "norm_of_cyclotomic_irreducible", ["is_primitive_root"]]]}]}, {"timestamp": 1660773832, "sha": "26c2c38d", "message": "feat(field_theory/intermediate_field): Add `alg_hom.field_range` (#16078)\nThis PR adds `alg_hom.field_range` (which produces an `intermediate_field` rather than a `subalgebra`) and copies over the API from `ring_hom.field_range` (which produces a `subfield` rather than a `subring`).", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "field_range_eq_map", ["alg_hom"]], ["add", "theorem", "map_field_range", ["alg_hom"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_field_range", ["alg_hom"]], ["add", "def", "field_range", ["alg_hom"]], ["add", "theorem", "field_range_to_subfield", ["alg_hom"]], ["add", "theorem", "mem_field_range", ["alg_hom"]]]}]}, {"timestamp": 1660769855, "sha": "551079b0", "message": "feat(field_theory/normal): A compositum of normal extensions is normal (#16076)\nThis PR proves that a compositum of normal extensions is normal.\nThe proof uses a technical lemma `exists_finset_of_mem_supr''` to reduce to the case of a finite compositum of finite normal extensions (i.e., a finite compositum of splitting fields), which is proved in `is_splitting_field_supr`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["mod", "theorem", "adjoin_root_set_is_splitting_field", ["intermediate_field"]], ["add", "theorem", "exists_finset_of_mem_supr''", ["intermediate_field"]], ["mod", "theorem", "is_splitting_field_iff", ["intermediate_field"]], ["add", "theorem", "is_splitting_field_supr", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}]}, {"timestamp": 1660764883, "sha": "35f49417", "message": "chore(ring_theory/graded_algebra/basic): golf `graded_ring.proj_zero_ring_hom` (#16081)\nuse `direct_sum.decomposition.induction_on` instead of manually writing out inductions", "changes": [{"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": []}]}, {"timestamp": 1660764882, "sha": "ce566b31", "message": "feat(algebraic_geometry/morphisms): Construct morphism properties from ring homomorphism properties (#16059)", "changes": [{"oldPath": "src/algebraic_geometry/morphisms/ring_hom_properties.lean", "newPath": "src/algebraic_geometry/morphisms/ring_hom_properties.lean", "changes": [["add", "theorem", "Scheme_restrict_basic_open_of_localization_preserves", ["algebraic_geometry"]], ["add", "def", "affine_locally", ["algebraic_geometry"]], ["add", "theorem", "affine_locally_iff_affine_opens_le", ["algebraic_geometry"]], ["add", "theorem", "affine_locally_respects_iso", ["algebraic_geometry"]], ["add", "theorem", "is_open_immersion_comp_of_source_affine_locally", ["algebraic_geometry"]], ["add", "def", "source_affine_locally", ["algebraic_geometry"]], ["add", "theorem", "source_affine_locally_is_local", ["algebraic_geometry"]], ["add", "theorem", "source_affine_locally_of_source_open_cover_aux", ["algebraic_geometry"]], ["add", "theorem", "source_affine_locally_respects_iso", ["algebraic_geometry"]], ["add", "theorem", "affine_locally_of_is_open_immersion", ["ring_hom", "property_is_local"]], ["add", "theorem", "affine_locally_stable_under_composition", ["ring_hom", "property_is_local"]], ["add", "theorem", "affine_open_cover_iff", ["ring_hom", "property_is_local"]], ["add", "theorem", "affine_open_cover_tfae", ["ring_hom", "property_is_local"]], ["add", "theorem", "is_local_affine_locally", ["ring_hom", "property_is_local"]], ["add", "theorem", "is_local_source_affine_locally", ["ring_hom", "property_is_local"]], ["add", "theorem", "open_cover_tfae", ["ring_hom", "property_is_local"]], ["add", "theorem", "source_affine_locally_comp_of_is_open_immersion", ["ring_hom", "property_is_local"]], ["add", "theorem", "source_affine_locally_of_source_open_cover", ["ring_hom", "property_is_local"]], ["add", "theorem", "source_affine_open_cover_iff", ["ring_hom", "property_is_local"]], ["add", "theorem", "source_open_cover_iff", ["ring_hom", "property_is_local"]]]}]}, {"timestamp": 1660764879, "sha": "61c8f89b", "message": "feat(algebra/order/complete.field): add real.ring_hom_eq_id (#16049)\nProves that there are no nontrivial ring homomorphism from ℝ to ℝ. \nThis is motivated by a remark of K. Buzzard (see https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Continuous.20complex.20ring.20hom/near/293264751). \nIt looks like it should be a direct consequence of the results of ```algebra/order/complete.field``` but I was not able to see how to do it more directly.", "changes": [{"oldPath": "src/algebra/order/complete_field.lean", "newPath": "src/algebra/order/complete_field.lean", "changes": [["add", "theorem", "ring_hom_monotone", []]]}]}, {"timestamp": 1660764877, "sha": "86db394f", "message": "feat(number_theory): fundamental identity of ramification index and inertia degree (#12287)\nThis PR proves the fundamental identity of ramification index and inertia degree:\nLet `p` be a prime in a Dedekind domain `R`, `S` the integral closure of `R` in some finite field extension `L` of `K = Frac(R)`, then for `P` ranging over the primes lying over `p`, `Σ P, e P * f P = [L : K]`.", "changes": [{"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": [["add", "theorem", "finrank_pow_ramification_idx", ["ideal", "factors"]], ["add", "theorem", "inertia_deg_ne_zero", ["ideal", "factors"]], ["add", "theorem", "ne_bot", ["ideal", "factors"]], ["add", "theorem", "pi_quotient_equiv_map", ["ideal", "factors"]], ["add", "theorem", "pi_quotient_equiv_mk", ["ideal", "factors"]], ["add", "theorem", "ramification_idx_ne_zero", ["ideal", "factors"]], ["add", "theorem", "le_comap_pow_ramification_idx", ["ideal"]], ["add", "theorem", "sum_ramification_inertia", ["ideal"]]]}]}, {"timestamp": 1660757966, "sha": "40ac1b25", "message": "feat(ring_theory/ring_hom/integral): Integral extensions are stable under base change. (#16094)\nredoes #15806", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "tmul", ["is_integral"]]]}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": [["add", "theorem", "map_scale_roots", ["polynomial"]], ["add", "theorem", "scale_roots_eval₂_mul", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ring_hom/integral.lean", "changes": [["add", "theorem", "is_integral_respects_iso", ["ring_hom"]], ["add", "theorem", "is_integral_stable_under_base_change", ["ring_hom"]], ["add", "theorem", "is_integral_stable_under_composition", ["ring_hom"]]]}]}, {"timestamp": 1660757964, "sha": "ffb51d35", "message": "feat(linear_algebra/clifford_algebra/basic): invertibility of vectors (#16077)\nI believe the reverse direction of `is_unit_ι_of_is_unit` is true, but it requires that `Q` is divisible by two and #11468.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": [["add", "theorem", "inv_of_ι", ["clifford_algebra"]], ["add", "def", "invertible_ι_of_invertible", ["clifford_algebra"]], ["add", "theorem", "is_unit_ι_of_is_unit", ["clifford_algebra"]]]}]}, {"timestamp": 1660757963, "sha": "ae132cd6", "message": "feat(topology/basic): intersection of a finset-indexed open sets is open (#16075)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "is_open_bInter_finset", []]]}]}, {"timestamp": 1660757962, "sha": "4a0c4973", "message": "feat(algebraic_geometry/morphisms): Condition for target affine locally to be stable under base change (#16061)", "changes": [{"oldPath": "src/algebraic_geometry/morphisms/basic.lean", "newPath": "src/algebraic_geometry/morphisms/basic.lean", "changes": [["add", "theorem", "stable_under_base_change", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "theorem", "target_affine_locally_pullback_fst_of_right_of_stable_under_base_change", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "def", "stable_under_base_change", ["algebraic_geometry", "affine_target_morphism_property"]]]}]}, {"timestamp": 1660748017, "sha": "b78cf506", "message": "chore(group_theory/*): Fix lint (#16095)\nFix the linting errors coming from `fintype_finite` and `to_additive_doc` in the `group_theory` folder (+ some in `data` and `combinatorics`). Remove the decidability assumptions to `decidable_powers`/`decidable_zpowers` because they are already noncomputable.\n## Lemma renames\n* `fintype` → `finite` in lemmas that used to assume `fintype` and now only assume `finite`\n* `fintype.induction_empty_option'` → `fintype.induction_empty_option`", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/hales_jewett.lean", "newPath": "src/combinatorics/hales_jewett.lean", "changes": [["mod", "theorem", "exists_mono_in_high_dimension", ["combinatorics", "line"]]]}, {"oldPath": "src/combinatorics/pigeonhole.lean", "newPath": "src/combinatorics/pigeonhole.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/coloring.lean", "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/W/basic.lean", "newPath": "src/data/W/basic.lean", "changes": []}, {"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["del", "theorem", "exists_max", ["finite"]], ["del", "theorem", "exists_min", ["finite"]], ["del", "theorem", "of_not_infinite", ["finite"]], ["del", "theorem", "of_not_finite", ["infinite"]], ["del", "theorem", "not_finite", []], ["del", "theorem", "not_finite_iff_infinite", []], ["del", "theorem", "not_infinite_iff_finite", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "exists_infinite_fiber", ["finite"]], ["add", "theorem", "exists_max", ["finite"]], ["add", "theorem", "exists_min", ["finite"]], ["add", "theorem", "exists_ne_map_eq_of_infinite", ["finite"]], ["add", "theorem", "exists_univ_list", ["finite"]], ["add", "theorem", "induction_empty_option", ["finite"]], ["add", "theorem", "injective_iff_bijective", ["finite"]], ["add", "theorem", "injective_iff_surjective", ["finite"]], ["add", "theorem", "injective_iff_surjective_of_equiv", ["finite"]], ["add", "theorem", "well_founded_gt", ["finite", "preorder"]], ["add", "theorem", "well_founded_lt", ["finite", "preorder"]], ["add", "theorem", "surjective_iff_bijective", ["finite"]], ["add", "theorem", "well_founded_of_trans_of_irrefl", ["finite"]], ["mod", "theorem", "card_compl_eq_card_compl", ["fintype"]], ["del", "theorem", "exists_infinite_fiber", ["fintype"]], ["del", "theorem", "exists_max", ["fintype"]], ["del", "theorem", "exists_min", ["fintype"]], ["del", "theorem", "exists_ne_map_eq_of_infinite", ["fintype"]], ["del", "theorem", "exists_univ_list", ["fintype"]], ["del", "theorem", "induction_empty_option'", ["fintype"]], ["mod", "theorem", "induction_empty_option", ["fintype"]], ["del", "theorem", "injective_iff_bijective", ["fintype"]], ["del", "theorem", "injective_iff_surjective", ["fintype"]], ["del", "theorem", "injective_iff_surjective_of_equiv", ["fintype"]], ["del", "theorem", "is_well_order_gt", ["fintype", "linear_order"]], ["del", "theorem", "is_well_order_lt", ["fintype", "linear_order"]], ["del", "theorem", "well_founded_gt", ["fintype", "preorder"]], ["del", "theorem", "well_founded_lt", ["fintype", "preorder"]], ["del", "theorem", "surjective_iff_bijective", ["fintype"]], ["del", "theorem", "well_founded_of_trans_of_irrefl", ["fintype"]], ["mod", "theorem", "equiv_of_fintype_self_embedding_to_embedding", ["function", "embedding"]], ["add", "theorem", "not_finite", []], ["add", "theorem", "not_finite_iff_infinite", []], ["del", "theorem", "not_fintype", []], ["add", "theorem", "not_infinite_iff_finite", []], ["add", "theorem", "not_injective_infinite_finite", []], ["del", "theorem", "not_injective_infinite_fintype", []], ["add", "theorem", "not_surjective_finite_infinite", []], ["del", "theorem", "not_surjective_fintype_infinite", []]]}, {"oldPath": "src/data/fintype/card_embedding.lean", "newPath": "src/data/fintype/card_embedding.lean", "changes": []}, {"oldPath": "src/data/set_like/fintype.lean", "newPath": "src/data/set_like/fintype.lean", "changes": []}, {"oldPath": "src/data/zmod/defs.lean", "newPath": "src/data/zmod/defs.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_pi_pi_of_finite", ["subgroup"]], ["del", "theorem", "commutator_pi_pi_of_fintype", ["subgroup"]]]}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": [["add", "theorem", "exponent_ne_zero_of_finite", ["monoid"]], ["del", "theorem", "exponent_ne_zero_of_fintype", ["monoid"]]]}, {"oldPath": "src/group_theory/finite_abelian.lean", "newPath": "src/group_theory/finite_abelian.lean", "changes": [["mod", "theorem", "equiv_direct_sum_zmod_of_fintype", ["add_comm_group"]]]}, {"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "theorem", "quotient_preimage_image_eq_union_mul", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["mod", "theorem", "to_perm_injective", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": []}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_ne_zero_of_finite", ["subgroup"]], ["del", "theorem", "index_ne_zero_of_fintype", ["subgroup"]], ["mod", "theorem", "one_lt_index_of_ne_top", ["subgroup"]]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["mod", "theorem", "is_nilpotent", ["is_p_group"]], ["add", "theorem", "lower_central_series_pi_of_finite", []], ["del", "theorem", "lower_central_series_pi_of_fintype", []], ["mod", "theorem", "nilpotency_class_pi", []]]}, {"oldPath": "src/group_theory/noncomm_pi_coprod.lean", "newPath": "src/group_theory/noncomm_pi_coprod.lean", "changes": [["mod", "theorem", "independent_range_of_coprime_order", ["monoid_hom"]], ["mod", "theorem", "independent_of_coprime_order", ["subgroup"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "exists_pow_eq_one", []], ["mod", "theorem", "exists_zpow_eq_one", []], ["mod", "theorem", "fin_equiv_powers_apply", []], ["mod", "theorem", "fin_equiv_powers_symm_apply", []], ["mod", "theorem", "fin_equiv_zpowers_apply", []], ["mod", "theorem", "fin_equiv_zpowers_symm_apply", []], ["mod", "theorem", "mem_powers_iff_mem_range_order_of", []], ["mod", "theorem", "mem_powers_iff_mem_zpowers", []], ["mod", "theorem", "mem_zpowers_iff_mem_range_order_of", []], ["mod", "theorem", "order_eq_card_powers", []], ["mod", "theorem", "order_eq_card_zpowers", []], ["mod", "theorem", "order_of_le_card_univ", []], ["mod", "theorem", "order_of_pos", []], ["mod", "theorem", "order_of_pow", []], ["mod", "theorem", "pow_card_eq_one", []], ["mod", "theorem", "powers_eq_zpowers", []], ["mod", "theorem", "powers_equiv_powers_apply", []], ["mod", "theorem", "sum_card_order_of_eq_card_pow_eq_one", []], ["mod", "theorem", "zpowers_equiv_zpowers_apply", []]]}, {"oldPath": "src/group_theory/perm/cycle/basic.lean", "newPath": "src/group_theory/perm/cycle/basic.lean", "changes": [["mod", "theorem", "cycle_induction_on", ["equiv", "perm"]], ["mod", "theorem", "is_conj_mul", ["equiv", "perm", "disjoint"]], ["mod", "theorem", "exists_pow_eq", ["equiv", "perm", "is_cycle"]], ["mod", "theorem", "exists_pow_eq_one", ["equiv", "perm", "is_cycle"]], ["mod", "theorem", "is_cycle_pow_pos_of_lt_prime_order", ["equiv", "perm", "is_cycle"]], ["mod", "theorem", "pow_eq_one_iff", ["equiv", "perm", "is_cycle"]], ["mod", "theorem", "pow_eq_pow_iff", ["equiv", "perm", "is_cycle"]], ["mod", "theorem", "pow_iff", ["equiv", "perm", "is_cycle"]], ["mod", "theorem", "list_cycles_perm_list_cycles", ["equiv", "perm"]], ["mod", "theorem", "mem_list_cycles_iff", ["equiv", "perm"]], ["mod", "theorem", "nat''", ["equiv", "perm", "same_cycle"]], ["mod", "theorem", "nat'", ["equiv", "perm", "same_cycle"]]]}, {"oldPath": "src/group_theory/perm/cycle/concrete.lean", "newPath": "src/group_theory/perm/cycle/concrete.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["mod", "theorem", "closure_is_swap", ["equiv", "perm"]], ["mod", "theorem", "mem_sum_congr_hom_range_of_perm_maps_to_inl", ["equiv", "perm"]], ["mod", "theorem", "perm_inv_maps_to_iff_maps_to", ["equiv", "perm"]], ["mod", "theorem", "perm_inv_maps_to_of_maps_to", ["equiv", "perm"]], ["add", "theorem", "perm_inv_on_of_perm_on_finite", ["equiv", "perm"]], ["del", "theorem", "perm_inv_on_of_perm_on_fintype", ["equiv", "perm"]], ["mod", "theorem", "perm_maps_to_inl_iff_maps_to_inr", ["equiv", "perm"]], ["mod", "theorem", "swap_induction_on'", ["equiv", "perm"]], ["mod", "theorem", "swap_induction_on", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": [["mod", "theorem", "exists_monoid_generator", ["is_cyclic"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "eq_on_closure", ["monoid_hom"]], ["mod", "theorem", "bot_or_exists_ne_one", ["subgroup"]], ["mod", "theorem", "bot_or_nontrivial", ["subgroup"]], ["mod", "theorem", "commute_of_normal_of_disjoint", ["subgroup"]], ["mod", "theorem", "map_injective_of_ker_le", ["subgroup"]], ["mod", "theorem", "mem_normalizer_fintype", ["subgroup"]], ["mod", "theorem", "pi_le_iff", ["subgroup"]], ["mod", "theorem", "pi_mem_of_mul_single_mem", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "not_dvd_index_sylow", []], ["mod", "theorem", "characteristic_of_normal", ["sylow"]], ["mod", "def", "fixed_points_mul_left_cosets_equiv_quotient", ["sylow"]], ["mod", "theorem", "mem_fixed_points_mul_left_cosets_iff_mem_normalizer", ["sylow"]], ["mod", "theorem", "normal_of_all_max_subgroups_normal", ["sylow"]], ["mod", "theorem", "normal_of_normalizer_normal", ["sylow"]], ["mod", "theorem", "normalizer_normalizer", ["sylow"]], ["mod", "theorem", "orbit_eq_top", ["sylow"]], ["mod", "theorem", "subsingleton_of_normal", ["sylow"]]]}, {"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": [["add", "theorem", "module_of_finite", ["add_monoid", "is_torsion"]], ["del", "theorem", "module_of_fintype", ["add_monoid", "is_torsion"]], ["add", "theorem", "is_torsion_of_finite", []], ["del", "theorem", "is_torsion_of_fintype", []]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["mod", "theorem", "card_nth_roots_subgroup_units", []], ["add", "theorem", "is_field_of_domain", ["finite"]], ["del", "theorem", "is_field_of_domain", ["fintype"]], ["mod", "theorem", "is_cyclic_of_subgroup_is_domain", []], ["add", "theorem", "mul_left_bijective_of_finite₀", []], ["del", "theorem", "mul_left_bijective_of_fintype₀", []], ["add", "theorem", "mul_right_bijective_of_finite₀", []], ["del", "theorem", "mul_right_bijective_of_fintype₀", []]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/topology/noetherian_space.lean", "newPath": "src/topology/noetherian_space.lean", "changes": []}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": []}]}, {"timestamp": 1660748016, "sha": "753ef903", "message": "feat(ring_theory/derivation): Construction of the module of Kähler differentials. (#16047)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "def", "lift_kaehler_differential", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_D", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_apply", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_comp", ["derivation"]], ["add", "theorem", "lift_kaehler_differential_unique", ["derivation"]], ["del", "def", "ideal", ["derivation_module"]], ["del", "theorem", "one_smul_sub_smul_one_mem_ideal", ["derivation_module"]], ["del", "theorem", "span_range_eq_ideal", ["derivation_module"]], ["del", "theorem", "submodule_span_range_eq_ideal", ["derivation_module"]], ["add", "def", "D", ["kaehler_differential"]], ["add", "theorem", "D_apply", ["kaehler_differential"]], ["add", "def", "D_linear_map", ["kaehler_differential"]], ["add", "theorem", "D_linear_map_apply", ["kaehler_differential"]], ["add", "theorem", "D_tensor_product_to", ["kaehler_differential"]], ["add", "def", "ideal", ["kaehler_differential"]], ["add", "def", "linear_map_equiv_derivation", ["kaehler_differential"]], ["add", "theorem", "one_smul_sub_smul_one_mem_ideal", ["kaehler_differential"]], ["add", "theorem", "span_range_derivation", ["kaehler_differential"]], ["add", "theorem", "span_range_eq_ideal", ["kaehler_differential"]], ["add", "theorem", "submodule_span_range_eq_ideal", ["kaehler_differential"]], ["add", "theorem", "tensor_product_to_surjective", ["kaehler_differential"]], ["add", "def", "kaehler_differential", []]]}]}, {"timestamp": 1660748015, "sha": "c30985dc", "message": "feat(group_theory/transfer): The transfer homomorphism `G →* center G` (#14520)\nThis PR constructs the transfer homomorphism `G →* center G`. The bulk of this PR is a messy computation giving a criterion (`transfer_eq_pow`) for when the transfer homomorphism is the power map. The same criterion can be used to prove Burnside's transfer theorem.", "changes": [{"oldPath": "src/group_theory/group_action/quotient.lean", "newPath": "src/group_theory/group_action/quotient.lean", "changes": [["add", "theorem", "out'_conj_pow_minimal_period_mem", ["quotient_group"]]]}, {"oldPath": "src/group_theory/transfer.lean", "newPath": "src/group_theory/transfer.lean", "changes": [["add", "theorem", "transfer_center_eq_pow", ["monoid_hom"]], ["add", "theorem", "transfer_center_pow'_apply", ["monoid_hom"]], ["add", "theorem", "transfer_center_pow_apply", ["monoid_hom"]], ["mod", "theorem", "transfer_def", ["monoid_hom"]], ["add", "theorem", "transfer_eq_pow", ["monoid_hom"]], ["add", "theorem", "transfer_eq_pow_aux", ["monoid_hom"]], ["add", "theorem", "transfer_eq_prod_quotient_orbit_rel_zpowers_quot", ["monoid_hom"]]]}]}, {"timestamp": 1660740377, "sha": "22dce611", "message": "feat(linear_algebra/linear_pmap): introduce notation (#15751)\nWe add the notation `E →ₗ.[R] F` for `linear_pmap R E F` inspired by the notation for `pfun` and `linear_map`.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["mod", "theorem", "exists_extension_of_le_sublinear", []], ["mod", "theorem", "exists_top", ["riesz_extension"]], ["mod", "theorem", "riesz_extension", []]]}, {"oldPath": "src/analysis/normed_space/hahn_banach/separation.lean", "newPath": "src/analysis/normed_space/hahn_banach/separation.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["mod", "def", "comp_pmap", ["linear_map"]], ["mod", "theorem", "comp_pmap_apply", ["linear_map"]], ["mod", "def", "to_pmap", ["linear_map"]], ["mod", "def", "cod_restrict", ["linear_pmap"]], ["mod", "theorem", "coe_smul", ["linear_pmap"]], ["mod", "def", "comp", ["linear_pmap"]], ["mod", "def", "coprod", ["linear_pmap"]], ["mod", "theorem", "coprod_apply", ["linear_pmap"]], ["mod", "theorem", "domain_sup", ["linear_pmap"]], ["mod", "theorem", "domain_sup_span_singleton", ["linear_pmap"]], ["mod", "def", "eq_locus", ["linear_pmap"]], ["mod", "theorem", "eq_of_eq_graph", ["linear_pmap"]], ["mod", "theorem", "eq_of_le_of_domain_eq", ["linear_pmap"]], ["mod", "theorem", "ext", ["linear_pmap"]], ["mod", "theorem", "ext_iff", ["linear_pmap"]], ["mod", "def", "graph", ["linear_pmap"]], ["mod", "theorem", "graph_fst_eq_zero_snd", ["linear_pmap"]], ["mod", "theorem", "image_iff", ["linear_pmap"]], ["mod", "theorem", "le_of_eq_locus_ge", ["linear_pmap"]], ["mod", "theorem", "le_of_le_graph", ["linear_pmap"]], ["mod", "theorem", "map_add", ["linear_pmap"]], ["mod", "theorem", "map_neg", ["linear_pmap"]], ["mod", "theorem", "map_smul", ["linear_pmap"]], ["mod", "theorem", "map_sub", ["linear_pmap"]], ["mod", "theorem", "map_zero", ["linear_pmap"]], ["mod", "theorem", "mem_domain_iff", ["linear_pmap"]], ["mod", "theorem", "mem_domain_iff_of_eq_graph", ["linear_pmap"]], ["mod", "theorem", "mem_graph", ["linear_pmap"]], ["mod", "theorem", "mem_graph_iff'", ["linear_pmap"]], ["mod", "theorem", "mem_graph_iff", ["linear_pmap"]], ["mod", "theorem", "mem_graph_snd_inj'", ["linear_pmap"]], ["mod", "theorem", "mem_graph_snd_inj", ["linear_pmap"]], ["mod", "theorem", "mem_range_iff", ["linear_pmap"]], ["mod", "theorem", "neg_apply", ["linear_pmap"]], ["mod", "theorem", "neg_graph", ["linear_pmap"]], ["mod", "theorem", "smul_apply", ["linear_pmap"]], ["mod", "theorem", "smul_graph", ["linear_pmap"]], ["mod", "theorem", "sup_apply", ["linear_pmap"]], ["mod", "theorem", "sup_h_of_disjoint", ["linear_pmap"]], ["mod", "theorem", "sup_span_singleton_apply_mk", ["linear_pmap"]], ["mod", "theorem", "to_fun_eq_coe", ["linear_pmap"]]]}]}, {"timestamp": 1660729192, "sha": "4e76ad05", "message": "feat(group_theory/group_action/defs): `additive`/`multiplicative` instances (#15719)\nMore action instances involving `additive` and `multiplicative`.", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["del", "theorem", "of_mul_vadd", ["additive"]], ["del", "theorem", "of_add_smul", ["multiplicative"]], ["add", "theorem", "of_add_smul", []], ["add", "theorem", "of_mul_vadd", []], ["add", "theorem", "to_add_vadd", []], ["add", "theorem", "to_mul_smul", []]]}]}, {"timestamp": 1660729191, "sha": "6c135283", "message": "feat(data/nat/factorization/basic): define `ord_proj[p]` and `ord_compl[p]`, prove basic lemmas (#15589)\n`ord_proj[p] n := p ^ (nat.factorization n p)` is the largest power of `p` that divides into `n`. For `p = 2` this is the even part of `n`.\n`ord_compl[p] n := n / ord_proj[p] n` is the largest divisor of `n` not divisible by `p`. For `p = 2` this is the odd part of `n`.\nNote that for consistency with the naming of other lemmas introduced in this PR, the following lemmas are renamed:\n* `pow_factorization_dvd` -> `ord_proj_dvd`\n* `pow_factorization_le` -> `ord_proj_le`\n* `not_dvd_div_pow_factorization` -> `not_dvd_ord_compl`\n* `coprime_of_div_pow_factorization` -> `coprime_ord_compl`\n* `div_pow_factorization_ne_zero` -> `ord_compl_pos`\n* `prime.pow_dvd_iff_dvd_pow_factorization` -> `prime.pow_dvd_iff_dvd_ord_proj`", "changes": [{"oldPath": "src/algebra/char_p/local_ring.lean", "newPath": "src/algebra/char_p/local_ring.lean", "changes": []}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["del", "theorem", "coprime_of_div_pow_factorization", ["nat"]], ["add", "theorem", "coprime_ord_compl", ["nat"]], ["del", "theorem", "div_pow_factorization_ne_zero", ["nat"]], ["add", "theorem", "dvd_ord_compl_of_dvd_not_dvd", ["nat"]], ["add", "theorem", "dvd_ord_proj_of_dvd", ["nat"]], ["add", "theorem", "factorization_ord_compl", ["nat"]], ["del", "theorem", "not_dvd_div_pow_factorization", ["nat"]], ["add", "theorem", "not_dvd_ord_compl", ["nat"]], ["add", "theorem", "ord_compl_dvd", ["nat"]], ["add", "theorem", "ord_compl_le", ["nat"]], ["add", "theorem", "ord_compl_mul", ["nat"]], ["add", "theorem", "ord_compl_of_not_prime", ["nat"]], ["add", "theorem", "ord_compl_pos", ["nat"]], ["add", "theorem", "ord_proj_dvd", ["nat"]], ["add", "theorem", "ord_proj_le", ["nat"]], ["add", "theorem", "ord_proj_mul", ["nat"]], ["add", "theorem", "ord_proj_mul_ord_compl_eq_self", ["nat"]], ["add", "theorem", "ord_proj_of_not_prime", ["nat"]], ["add", "theorem", "ord_proj_pos", ["nat"]], ["del", "theorem", "pow_factorization_dvd", ["nat"]], ["del", "theorem", "pow_factorization_le", ["nat"]], ["add", "theorem", "pow_dvd_iff_dvd_ord_proj", ["nat", "prime"]], ["del", "theorem", "pow_dvd_iff_dvd_pow_factorization", ["nat", "prime"]]]}, {"oldPath": "src/data/nat/factorization/prime_pow.lean", "newPath": "src/data/nat/factorization/prime_pow.lean", "changes": []}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1660720241, "sha": "bb289539", "message": "feat(data/list/forall2): add `list.forall₂_iff_nth_le` (#16073)\nCharacterization of `list.forall₂` with respect to `list.nth_le` on all positions.", "changes": [{"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["add", "theorem", "length_eq", ["list", "forall₂"]], ["add", "theorem", "nth_le", ["list", "forall₂"]], ["add", "theorem", "forall₂_iff_nth_le", ["list"]], ["del", "theorem", "forall₂_length_eq", ["list"]], ["add", "theorem", "forall₂_of_length_eq_of_nth_le", ["list"]]]}, {"oldPath": "src/data/list/sections.lean", "newPath": "src/data/list/sections.lean", "changes": []}]}, {"timestamp": 1660720239, "sha": "e83ba8f5", "message": "feat(category_theory/limits/shapes/diagonal): The diagonal object of a morphism. (#15711)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/diagonal.lean", "changes": [["add", "def", "diagonal_obj_pullback_fst_iso", ["category_theory", "limits"]], ["add", "theorem", "diagonal_obj_pullback_fst_iso_hom_fst_fst", ["category_theory", "limits"]], ["add", "theorem", "diagonal_obj_pullback_fst_iso_hom_fst_snd", ["category_theory", "limits"]], ["add", "theorem", "diagonal_obj_pullback_fst_iso_hom_snd", ["category_theory", "limits"]], ["add", "theorem", "diagonal_obj_pullback_fst_iso_inv_fst_fst", ["category_theory", "limits"]], ["add", "theorem", "diagonal_obj_pullback_fst_iso_inv_fst_snd", ["category_theory", "limits"]], ["add", "theorem", "diagonal_obj_pullback_fst_iso_inv_snd_fst", ["category_theory", "limits"]], ["add", "theorem", "diagonal_obj_pullback_fst_iso_inv_snd_snd", ["category_theory", "limits"]], ["add", "theorem", "diagonal_pullback_fst", ["category_theory", "limits"]], ["add", "def", "diagonal", ["category_theory", "limits", "pullback"]], ["add", "theorem", "diagonal_comp", ["category_theory", "limits", "pullback"]], ["add", "theorem", "diagonal_fst", ["category_theory", "limits", "pullback"]], ["add", "def", "diagonal_is_kernel_pair", ["category_theory", "limits", "pullback"]], ["add", "def", "diagonal_obj", ["category_theory", "limits", "pullback"]], ["add", "theorem", "diagonal_snd", ["category_theory", "limits", "pullback"]], ["add", "def", "pullback_diagonal_map_id_iso", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_id_iso_hom_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_id_iso_hom_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_id_iso_inv_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_id_iso_inv_snd_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_id_iso_inv_snd_snd", ["category_theory", "limits"]], ["add", "def", "pullback_diagonal_map_iso", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_iso_hom_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_iso_hom_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_iso_inv_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_iso_inv_snd_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_iso_inv_snd_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_snd_fst_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_diagonal_map_snd_snd_fst", ["category_theory", "limits"]], ["add", "def", "pullback_fst_fst_iso", ["category_theory", "limits"]], ["add", "theorem", "pullback_fst_map_snd_is_pullback", ["category_theory", "limits"]], ["add", "theorem", "pullback_lift_map_is_pullback", ["category_theory", "limits"]], ["add", "theorem", "pullback_map_diagonal_is_pullback", ["category_theory", "limits"]], ["add", "theorem", "pullback_map_eq_pullback_fst_fst_iso_inv", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernel_pair.lean", "newPath": "src/category_theory/limits/shapes/kernel_pair.lean", "changes": [["add", "def", "pullback", ["category_theory", "is_kernel_pair"]]]}]}, {"timestamp": 1660720238, "sha": "b6041198", "message": "feat(data/polynomial): Polynomial modules (#15065)", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/module.lean", "changes": [["add", "def", "equiv_polynomial", ["polynomial_module"]], ["add", "def", "equiv_polynomial_self", ["polynomial_module"]], ["add", "theorem", "induction_linear", ["polynomial_module"]], ["add", "def", "lsingle", ["polynomial_module"]], ["add", "theorem", "lsingle_apply", ["polynomial_module"]], ["add", "theorem", "monomial_smul_apply", ["polynomial_module"]], ["add", "theorem", "monomial_smul_single", ["polynomial_module"]], ["add", "def", "single", ["polynomial_module"]], ["add", "theorem", "single_apply", ["polynomial_module"]], ["add", "theorem", "single_smul", ["polynomial_module"]], ["add", "theorem", "smul_apply", ["polynomial_module"]], ["add", "theorem", "smul_single_apply", ["polynomial_module"]], ["add", "def", "polynomial_module", []]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "module_polynomial_of_endo_smul_def", []]]}]}, {"timestamp": 1660711206, "sha": "08931580", "message": "refactor(order/rel_classes): redefine `is_well_order` in terms of `is_well_founded` (#15729)\nWe redefine `is_well_order` in terms of `is_well_founded`, and remove the redundant `is_irrefl` assumption in the process.\nThis also replaces `is_well_order.wf` with `is_well_founded.wf`.", "changes": [{"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": []}, {"oldPath": "src/data/nat/part_enat.lean", "newPath": "src/data/nat/part_enat.lean", "changes": []}, {"oldPath": "src/data/pi/lex.lean", "newPath": "src/data/pi/lex.lean", "changes": []}, {"oldPath": "src/data/sum/order.lean", "newPath": "src/data/sum/order.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "Inf_eq_argmin_on", []]]}, {"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_paracompact.lean", "newPath": "src/topology/metric_space/emetric_paracompact.lean", "changes": []}]}, {"timestamp": 1660708499, "sha": "f5de6ed7", "message": "chore(scripts): update nolints.txt (#16090)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1660696313, "sha": "e14ff257", "message": "feat(set_theory/cardinal): cardinality of `multiset`, `polynomial` and `mv_polynomial` (#15889)\n+ Show `#(multiset α) = max (#α) ℵ₀` when `α` is nonempty. Show the same for `#(α →₀ ℕ)`, which is used in the mv_polynomial proof (see below).\n+ Prove that the inequality in `polynomial.cardinal_mk_le_max` is an equality when the semiring is nontrivial. The result is no longer derived from the corresponding result for mv_polynomial to allow general `semiring`, not just `comm_semiring`.\n+ Generalize `mv_polynomial.cardinal_mk_le_max` to two possibly different universes, and prove that the inequality is an equality when the type of variables is nonempty and the semiring is nontrivial. W_type is no longer used so that part is removed from the file.\n+ Change the [encodable] assumption in `mk_le_aleph_0` and `mk_list_eq_aleph_0` to the weaker typeclass [countable].\n- [x] depends on: #16046", "changes": [{"oldPath": "src/algebra/algebraic_card.lean", "newPath": "src/algebra/algebraic_card.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/cardinal.lean", "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": [["add", "theorem", "cardinal_lift_mk_le_max", ["mv_polynomial"]], ["add", "theorem", "cardinal_mk_eq_lift", ["mv_polynomial"]], ["add", "theorem", "cardinal_mk_eq_max", ["mv_polynomial"]], ["add", "theorem", "cardinal_mk_eq_max_lift", ["mv_polynomial"]], ["mod", "theorem", "cardinal_mk_le_max", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/cardinal.lean", "newPath": "src/data/polynomial/cardinal.lean", "changes": [["add", "theorem", "cardinal_mk_eq_max", ["polynomial"]], ["mod", "theorem", "cardinal_mk_le_max", ["polynomial"]]]}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "mk_le_aleph_0", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["add", "theorem", "mk_finsupp_lift_of_infinite'", ["cardinal"]], ["add", "theorem", "mk_finsupp_nat", ["cardinal"]], ["add", "theorem", "mk_finsupp_of_infinite'", ["cardinal"]], ["mod", "theorem", "mk_list_eq_aleph_0", ["cardinal"]], ["add", "theorem", "mk_multiset_of_countable", ["cardinal"]], ["add", "theorem", "mk_multiset_of_infinite", ["cardinal"]], ["add", "theorem", "mk_multiset_of_is_empty", ["cardinal"]], ["add", "theorem", "mk_multiset_of_nonempty", ["cardinal"]]]}]}, {"timestamp": 1660687017, "sha": "64e20fb0", "message": "feat(algebra/order/ring): add some instances about covariance (#14763)\nMost of the basic lemmas have been prepared. It is time to start trying to replace some of the lemmas in `algebra/order/ring`.\n- [x] depends on: #14761", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/behrend.lean", "newPath": "src/combinatorics/additive/behrend.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1660676151, "sha": "2303b3e2", "message": "chore(combinatorics/simple_graph): review inhabited instances (#15770)\nDelete artificial inhabited instance, normalize remaining and give them `@[simps]`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/partition.lean", "newPath": "src/combinatorics/simple_graph/partition.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": []}]}, {"timestamp": 1660676150, "sha": "ea1dd3d3", "message": "feat(algebra/module/localized_module): add characteristic predicate for `localized_module` (#15507)\nAdd characteristic predicate for localised module similar to ring localization and prove that the concrete construction satisfies the characteristic predicate.", "changes": [{"oldPath": "src/algebra/module/localized_module.lean", "newPath": "src/algebra/module/localized_module.lean", "changes": [["add", "def", "div_by", ["localized_module"]], ["add", "theorem", "div_by_mul_by", ["localized_module"]], ["add", "theorem", "mk_cancel", ["localized_module"]], ["add", "theorem", "mk_cancel_common_left", ["localized_module"]], ["add", "theorem", "mk_cancel_common_right", ["localized_module"]], ["add", "def", "mk_linear_map", ["localized_module"]], ["add", "theorem", "mul_by_div_by", ["localized_module"]], ["add", "theorem", "smul'_mk", ["localized_module"]], ["mod", "theorem", "zero_mk", ["localized_module"]]]}]}, {"timestamp": 1660666279, "sha": "d96e92d7", "message": "feat(probability/martingale/convergence): L¹ martingale convergence theorem and Lévy's upwards theorem (#16042)", "changes": [{"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "measurable_space_supr_eq", ["measurable_space"]]]}, {"oldPath": "src/probability/martingale/convergence.lean", "newPath": "src/probability/martingale/convergence.lean", "changes": [["add", "theorem", "tendsto_ae_condexp", ["measure_theory", "integrable"]], ["add", "theorem", "tendsto_snorm_condexp", ["measure_theory", "integrable"]], ["add", "theorem", "ae_eq_condexp_limit_process", ["measure_theory", "martingale"]], ["add", "theorem", "eq_condexp_of_tendsto_snorm", ["measure_theory", "martingale"]], ["add", "theorem", "ae_tendsto_limit_process_of_uniform_integrable", ["measure_theory", "submartingale"]], ["add", "theorem", "tendsto_snorm_one_limit_process", ["measure_theory", "submartingale"]], ["add", "theorem", "tendsto_ae_condexp", ["measure_theory"]], ["add", "theorem", "tendsto_snorm_condexp", ["measure_theory"]]]}]}, {"timestamp": 1660666277, "sha": "01f1f1bc", "message": "feat(number_theory/legendre_symbol/add_character): change `coe_to_fun` for `add_char` so it includes `of_add` (#16016)\nThe purpose of this PR is to carry out the solution mentioned [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/map.20from.20mult.20gp.20to.20add.20gp/near/292623869) to the unpleasantness that one has to explicitly invoke `of_add` and `to_add` when working with homomorphisms from additive to multiplicative monoids (in the form `multiplicative M → M'`). The idea is to implement the coercion to a function `M → M'` so that it inserts the `to_add` conversion automatically.\nThis is done here for additive characters (which also simplifies the treatment of Gauss sums in `number_theory/legendre_symbol/gauss_sum`).\nWe also change many `nat` arguments in `add_character.lean` to `pnat`, to help the with the refactor of cyclotomic fields. See the discussion [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60pnat.60.20vs.20.60.5Bfact.20.280.20.3C.20n.29.5D.60/near/293293368).", "changes": [{"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": [["add", "theorem", "coe_to_fun_apply", ["add_char"]], ["del", "theorem", "inv_apply'", ["add_char"]], ["mod", "theorem", "inv_apply", ["add_char"]], ["mod", "theorem", "is_primitive", ["add_char", "is_nontrivial"]], ["mod", "def", "is_nontrivial", ["add_char"]], ["mod", "theorem", "zmod_char_eq_one_iff", ["add_char", "is_primitive"]], ["add", "theorem", "map_add_mul", ["add_char"]], ["add", "theorem", "map_nsmul_pow", ["add_char"]], ["add", "theorem", "map_zero_one", ["add_char"]], ["add", "theorem", "map_zsmul_zpow", ["add_char"]], ["mod", "theorem", "mul_shift_apply", ["add_char"]], ["mod", "theorem", "mul_shift_spec'", ["add_char"]], ["mod", "def", "primitive_char_finite_field", ["add_char"]], ["mod", "def", "primitive_zmod_char", ["add_char"]], ["del", "theorem", "sum_eq_card_of_is_trivial'", ["add_char"]], ["del", "theorem", "sum_eq_zero_of_is_nontrivial'", ["add_char"]], ["mod", "theorem", "sum_mul_shift", ["add_char"]], ["add", "def", "to_monoid_hom", ["add_char"]], ["mod", "def", "zmod_char", ["add_char"]], ["add", "theorem", "zmod_char_apply'", ["add_char"]], ["add", "theorem", "zmod_char_apply", ["add_char"]], ["mod", "theorem", "zmod_char_is_nontrivial_iff", ["add_char"]], ["mod", "theorem", "zmod_char_primitive_of_eq_one_only_at_zero", ["add_char"]], ["mod", "theorem", "zmod_char_primitive_of_primitive_root", ["add_char"]]]}, {"oldPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "newPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "changes": [["mod", "def", "gauss_sum", []]]}]}, {"timestamp": 1660666276, "sha": "ce3997c6", "message": "feat(analysis/locally_convex): Add construction of continuous linear maps (#15922)\nThis is the first part of the theorem that for a pseudometrizable locally convex space boundedness implies continuity.", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "def", "clm_of_exists_bounded_image", ["linear_map"]], ["add", "theorem", "clm_of_exists_bounded_image_apply", ["linear_map"]], ["add", "theorem", "clm_of_exists_bounded_image_coe", ["linear_map"]]]}]}, {"timestamp": 1660666275, "sha": "c62c909c", "message": "feat(linear_algebra/projective_space/subspace): adds lemmas about the span operation and supremums of collections of subspaces (#15596)\nThis PR adds lemmas relating the span operation to the order relations between subsets and subspaces, and adds lemmas about computing the supremum of a collection of subspaces using the span operation.", "changes": [{"oldPath": "src/linear_algebra/projective_space/subspace.lean", "newPath": "src/linear_algebra/projective_space/subspace.lean", "changes": [["add", "theorem", "mem_span", ["projectivization", "subspace"]], ["add", "theorem", "monotone_span", ["projectivization", "subspace"]], ["add", "theorem", "span_Union", ["projectivization", "subspace"]], ["mod", "theorem", "span_coe", ["projectivization", "subspace"]], ["add", "theorem", "span_empty", ["projectivization", "subspace"]], ["add", "theorem", "span_eq_Inf", ["projectivization", "subspace"]], ["add", "theorem", "span_eq_of_le", ["projectivization", "subspace"]], ["add", "theorem", "span_eq_span_iff", ["projectivization", "subspace"]], ["add", "theorem", "span_le_subspace_iff", ["projectivization", "subspace"]], ["add", "theorem", "span_sup", ["projectivization", "subspace"]], ["add", "theorem", "span_union", ["projectivization", "subspace"]], ["add", "theorem", "span_univ", ["projectivization", "subspace"]], ["add", "theorem", "subset_span_trans", ["projectivization", "subspace"]], ["add", "theorem", "sup_span", ["projectivization", "subspace"]]]}]}, {"timestamp": 1660666274, "sha": "2ccfe543", "message": "refactor(data/finset/fin): Delete `finset.fin_range` (#15538)\n`finset.fin_range n` is just `finset.univ`, so we inline its definition in the `fintype (fin n)` instance to avoid people trying to use it.", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/norm_num.lean", "newPath": "src/algebra/big_operators/norm_num.lean", "changes": [["add", "theorem", "mk_congr", ["tactic", "norm_num", "finset"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/data/finset/fin.lean", "newPath": "src/data/finset/fin.lean", "changes": [["del", "theorem", "coe_fin_range", ["finset"]], ["del", "def", "fin_range", ["finset"]], ["del", "theorem", "fin_range_card", ["finset"]], ["del", "theorem", "mem_fin_range", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "univ_def", ["fin"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1660656288, "sha": "774c38f0", "message": "feat(ring_theory/algebraic): add transcendental.pow (#16057)", "changes": [{"oldPath": "src/data/polynomial/expand.lean", "newPath": "src/data/polynomial/expand.lean", "changes": [["add", "theorem", "expand_aeval", ["polynomial"]], ["add", "theorem", "expand_ne_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_of_pow", []], ["add", "theorem", "pow", ["transcendental"]]]}]}, {"timestamp": 1660656287, "sha": "98a9eb25", "message": "feat(analysis/special_functions/trigonometric/angle): more on angles equal or not equal to 0 or π (#16055)\nWe have various lemmas giving conditions for an angle to equal 0 or π.\nAdd some more such lemmas, plus negated versions of existing lemmas\ngiving conditions for angles not to equal 0 or π.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "eq_neg_self_iff", ["real", "angle"]], ["add", "theorem", "ne_neg_self_iff", ["real", "angle"]], ["add", "theorem", "neg_eq_self_iff", ["real", "angle"]], ["add", "theorem", "neg_ne_self_iff", ["real", "angle"]], ["add", "theorem", "sign_ne_zero_iff", ["real", "angle"]], ["add", "theorem", "sin_ne_zero_iff", ["real", "angle"]], ["add", "theorem", "two_nsmul_ne_zero_iff", ["real", "angle"]], ["add", "theorem", "two_zsmul_ne_zero_iff", ["real", "angle"]]]}]}, {"timestamp": 1660656286, "sha": "0173319e", "message": "feat(order/directed): a subset stable by supremum is `directed_on (≤)` (#16054)", "changes": [{"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "directed_on_of_inf_mem", []], ["add", "theorem", "directed_on_of_sup_mem", []]]}]}, {"timestamp": 1660656284, "sha": "d9992ade", "message": "feat(data/set/basic): Add natural missing lemmas to `set.subsingleton` and slightly refactor (#15886)\n- `subsingleton.image` is moved and documentation is added so that it is near related lemmas.\n- `subsingleton_of_preimage` is added to go with `subsingleton.preimage`, `subsingleton_of_image`., and `subsingleton.image`.\n- We add `subsingleton_anti` analogously to `nontrivial_mono`.\n- Some small style tweaks are made.\n- `subsingleton.mono` is renamed to `subsingleton.anti`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "anti", ["set", "subsingleton"]], ["mod", "theorem", "eq_singleton_of_mem", ["set", "subsingleton"]], ["del", "theorem", "mono", ["set", "subsingleton"]], ["add", "theorem", "subsingleton_of_preimage", ["set"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1660656283, "sha": "1d7f4798", "message": "feat(data/set/basic): Add `set.nontrivial` predicate and API (#15867)\nAnalogously to the existing `set.subsingleton`, we add `set.nontrivial` and the corresponding API.\nThis allows for dot notation to be used for `set.nontrivial` (which is equivalent to ¬ `set.subsingleton`).\nWe also make some small changes to `set.subsingleton`, mostly style tweaks, a rename, and a missing lemma.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "exists_lt", ["set", "nontrivial"]], ["add", "theorem", "exists_ne", ["set", "nontrivial"]], ["add", "theorem", "iff_exists_lt", ["set", "nontrivial"]], ["add", "theorem", "image", ["set", "nontrivial"]], ["add", "theorem", "mono", ["set", "nontrivial"]], ["add", "theorem", "ne_empty", ["set", "nontrivial"]], ["add", "theorem", "ne_singleton", ["set", "nontrivial"]], ["add", "theorem", "nonempty", ["set", "nontrivial"]], ["add", "theorem", "not_subset_empty", ["set", "nontrivial"]], ["add", "theorem", "not_subset_singleton", ["set", "nontrivial"]], ["add", "theorem", "pair_subset", ["set", "nontrivial"]], ["add", "theorem", "preimage", ["set", "nontrivial"]], ["add", "theorem", "nontrivial_coe", ["set"]], ["add", "theorem", "nontrivial_iff_exists_ne", ["set"]], ["add", "theorem", "nontrivial_iff_pair_subset", ["set"]], ["mod", "theorem", "nontrivial_mono", ["set"]], ["add", "theorem", "nontrivial_of_exists_lt", ["set"]], ["add", "theorem", "nontrivial_of_exists_ne", ["set"]], ["add", "theorem", "nontrivial_of_image", ["set"]], ["add", "theorem", "nontrivial_of_lt", ["set"]], ["add", "theorem", "nontrivial_of_mem_mem_ne", ["set"]], ["add", "theorem", "nontrivial_of_nontrivial", ["set"]], ["add", "theorem", "nontrivial_of_nontrivial_coe", ["set"]], ["add", "theorem", "nontrivial_of_pair_subset", ["set"]], ["add", "theorem", "nontrivial_of_preimage", ["set"]], ["add", "theorem", "nontrivial_of_univ_nontrivial", ["set"]], ["add", "theorem", "nontrivial_pair", ["set"]], ["add", "theorem", "nontrivial_univ", ["set"]], ["add", "theorem", "nontrivial_univ_iff", ["set"]], ["add", "theorem", "not_nontrivial_empty", ["set"]], ["add", "theorem", "not_nontrivial_iff", ["set"]], ["add", "theorem", "not_nontrivial_singleton", ["set"]], ["add", "theorem", "not_subsingleton_iff", ["set"]]]}]}, {"timestamp": 1660656282, "sha": "c239c99e", "message": "feat(algebra/order/monoid_lemmas_zero_lt): remove primes, add missing lemmas (#14774)\nThese lemmas are very similar to the existing ones, but with different assumptions.\nI intend to move the positivity assumption to the first place of assumptions in a future PR. So I just simply deleted some things in docstr.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "le_mul_of_le_of_one_le'", ["zero_lt"]], ["add", "theorem", "le_mul_of_one_le_of_le'", ["zero_lt"]], ["add", "theorem", "lt_mul_of_le_of_one_lt'", ["zero_lt"]], ["add", "theorem", "lt_mul_of_lt_of_one_le'", ["zero_lt"]], ["add", "theorem", "lt_mul_of_lt_of_one_lt'", ["zero_lt"]], ["add", "theorem", "lt_mul_of_one_le_of_lt'", ["zero_lt"]], ["add", "theorem", "lt_mul_of_one_lt_of_le'", ["zero_lt"]], ["add", "theorem", "lt_mul_of_one_lt_of_lt'", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_of_le_one'", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_one_of_le'", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_left'", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_left", ["zero_lt"]], ["del", "theorem", "mul_lt_mul_right'", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_right", ["zero_lt"]], ["add", "theorem", "mul_lt_of_le_of_lt_one'", ["zero_lt"]], ["add", "theorem", "mul_lt_of_le_one_of_lt'", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_of_le_one'", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_of_lt_one'", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_one_of_le'", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_one_of_lt'", ["zero_lt"]], ["add", "theorem", "le_mul_of_le_of_one_le'", ["zero_lt", "preorder"]], ["add", "theorem", "le_mul_of_one_le_of_le'", ["zero_lt", "preorder"]], ["add", "theorem", "lt_mul_of_le_of_one_lt'", ["zero_lt", "preorder"]], ["add", "theorem", "lt_mul_of_lt_of_one_le'", ["zero_lt", "preorder"]], ["add", "theorem", "lt_mul_of_one_le_of_lt'", ["zero_lt", "preorder"]], ["add", "theorem", "lt_mul_of_one_lt_of_le'", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_le_of_le_one'", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_le_one_of_le'", ["zero_lt", "preorder"]], ["add", "theorem", "mul_lt_of_le_of_lt_one'", ["zero_lt", "preorder"]], ["add", "theorem", "mul_lt_of_le_one_of_lt'", ["zero_lt", "preorder"]], ["add", "theorem", "mul_lt_of_lt_of_le_one'", ["zero_lt", "preorder"]], ["add", "theorem", "mul_lt_of_lt_one_of_le'", ["zero_lt", "preorder"]]]}]}, {"timestamp": 1660646223, "sha": "7b94ffe4", "message": "chore(scripts): update nolints.txt (#16070)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1660646221, "sha": "d928d9b4", "message": "fix(algebra/category/Group/equivalence_Group_AddGroup): fix typo (#16067)", "changes": [{"oldPath": "src/algebra/category/Group/equivalence_Group_AddGroup.lean", "newPath": "src/algebra/category/Group/equivalence_Group_AddGroup.lean", "changes": []}]}, {"timestamp": 1660646219, "sha": "c553a824", "message": "feat(analysis/normed/group/basic): construct a normed group from a seminormed group satisfying `∥x∥ = 0 → x = 0` (#16066)\nThis makes it more convenient to have a `normed_add_comm_group` instance as a special case of a general `seminormed_add_comm_group` without having to go back to the (pseudo) metric space level.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "def", "of_separation", ["normed_add_comm_group"]]]}]}, {"timestamp": 1660646218, "sha": "b95b8c7a", "message": "chore(*): restore `subsingleton` instances and remove hacks (#16046)\n#### Background\nThe `simp` tactic used to [look for subsingleton instances excessively](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.235672.20breaks.20timeout/near/223034551), so every subsingleton/unique instances added to mathlib could slow down `simp` performance; in fact, removing some subsingleton instances locally led to such speedup that three hacks #5779, #5878 and #6639 along this line have been merged into mathlib. Since the problem was discovered, new subsingleton instances were mostly turned into lemma/defs, with a reference to gh-6025 that @eric-wieser created to track them and a notice to restore them as instances once safe to do so.\nThis bad behavior of `simp` was finally fixed in [lean#665](https://github.com/leanprover-community/lean/pull/665) by @gebner in January 2022, so it is now safe to remove the hacks and restore the instances. In fact, the hack #5878 was already removed in [#13127](https://github.com/leanprover-community/mathlib/commit/c7626b7dfe2bf35b48cf43178a32d74f5dbf8b3f#diff-02976f8e19552b3c7ea070e30761e4e99f1333085cc5bb94fa170861c6ed27bcL497). I [measured the difference in performance](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.235672.20breaks.20timeout/near/293228091) from removing one of the remaining hacks and it was negligible.\nTherefore, in this PR, we:\n+ Remove both hacks remaining;\n+ Turn all would-be instances that mention gh-6025 into actual global instances;\n+ Golf proofs that explicitly invoked these instances previously;\n+ Remove `local attribute [instance]` lines that were added when these instances were needed.\nCloses #6025.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "algebra_rat_subsingleton", []]]}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["del", "theorem", "subsingleton_left", ["alg_equiv"]], ["del", "theorem", "subsingleton_right", ["alg_equiv"]], ["del", "theorem", "subsingleton", ["alg_hom"]], ["del", "theorem", "subsingleton_of_subsingleton", ["subalgebra"]]]}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["del", "theorem", "subsingleton_of_bot", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["del", "theorem", "subsingleton_of_bot", ["lie_ideal"]], ["del", "theorem", "subsingleton_of_bot", ["lie_submodule"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "subsingleton_rat_module", []]]}, {"oldPath": "src/algebra/order/complete_field.lean", "newPath": "src/algebra/order/complete_field.lean", "changes": []}, {"oldPath": "src/algebra/order/hom/ring.lean", "newPath": "src/algebra/order/hom/ring.lean", "changes": [["del", "theorem", "subsingleton", ["order_ring_hom"]], ["del", "theorem", "subsingleton_left", ["order_ring_iso"]], ["del", "theorem", "subsingleton_right", ["order_ring_iso"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "def", "unique_of_is_empty", ["list"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "theorem", "subsingleton_of_empty_left", ["matrix"]], ["del", "theorem", "subsingleton_of_empty_right", ["matrix"]]]}, {"oldPath": "src/data/matrix/dmatrix.lean", "newPath": "src/data/matrix/dmatrix.lean", "changes": [["del", "theorem", "subsingleton_of_empty_left", ["dmatrix"]], ["del", "theorem", "subsingleton_of_empty_right", ["dmatrix"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/finite_field.lean", "newPath": "src/linear_algebra/matrix/charpoly/finite_field.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["del", "theorem", "subsingleton", ["subtype"]]]}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/rat.lean", "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["del", "def", "unique", ["order_hom"]]]}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/fixed_point.lean", "newPath": "src/set_theory/ordinal/fixed_point.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["del", "theorem", "subsingleton_subalgebra", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/weierstrass.lean", "newPath": "src/topology/continuous_function/weierstrass.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1660646216, "sha": "791852eb", "message": "feat(polynomial/field_division): Add `root_set_prod` and clean up lemma statements (#16035)\nThis PR adds `root_set_prod` (based on `roots_prod`) and cleans up lemma statements (the file already has `{R S : Type*} [field R]`).", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "mem_root_set", ["polynomial"]], ["mod", "theorem", "mem_roots_map", ["polynomial"]], ["mod", "theorem", "root_set_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "root_set_X_pow", ["polynomial"]], ["mod", "theorem", "root_set_monomial", ["polynomial"]], ["add", "theorem", "root_set_prod", ["polynomial"]]]}]}, {"timestamp": 1660646214, "sha": "0398787b", "message": "feat(data/finset/lattice): 3*2 lemmas about max/min and max'/min' (#15978)\nThe six lemmas in this PR show that\n* `finset.max` and `finset.max'` coincide (when and how they can);\n* the `finset.max'` of `s.erase x` is not `x`;\n* the `finset.max` of `s.erase x` is not `x`;\nand their `@[to_dual]` analogues.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "coe_max'", ["finset"]], ["add", "theorem", "coe_min'", ["finset"]], ["add", "theorem", "max'_erase_ne_self", ["finset"]], ["add", "theorem", "max_erase_ne_self", ["finset"]], ["add", "theorem", "min'_erase_ne_self", ["finset"]], ["add", "theorem", "min_erase_ne_self", ["finset"]]]}]}, {"timestamp": 1660646203, "sha": "0a58aefa", "message": "lint(scripts/lint-style): style linter for _inst_ occurences (#15977)", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": "src/control/functor/multivariate.lean", "newPath": "src/control/functor/multivariate.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/sigma.lean", "newPath": "src/data/qpf/multivariate/constructions/sigma.lean", "changes": []}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/ring_theory/etale.lean", "newPath": "src/ring_theory/etale.lean", "changes": [["mod", "theorem", "exists_lift", ["algebra", "formally_smooth"]], ["mod", "theorem", "lift_unique", ["algebra", "formally_unramified"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1660646183, "sha": "b7f327b8", "message": "refactor(order/game_add): move `game_add` to its own file (#15885)\nWe move `game_add` from the `logic/hydra` file to a new `order/game_add` file, and move it in the `prod` namespace in preparation for a future PR that will add `sym2.game_add`.", "changes": [{"oldPath": "src/logic/hydra.lean", "newPath": "src/logic/hydra.lean", "changes": [["del", "theorem", "game_add", ["acc"]], ["del", "inductive", "game_add", ["relation"]], ["del", "theorem", "game_add_le_lex", ["relation"]], ["del", "theorem", "rprod_le_trans_gen_game_add", ["relation"]], ["del", "theorem", "game_add", ["well_founded"]]]}, {"oldPath": null, "newPath": "src/order/game_add.lean", "changes": [["add", "theorem", "prod_game_add", ["acc"]], ["add", "inductive", "game_add", ["prod"]], ["add", "theorem", "game_add_le_lex", ["prod"]], ["add", "theorem", "rprod_le_trans_gen_game_add", ["prod"]], ["add", "theorem", "prod_game_add", ["well_founded"]]]}]}, {"timestamp": 1660646182, "sha": "1b42ac37", "message": "refactor(information_theory/hamming): Separate Hamming norm and dist definitions. (#15820)\nIn practice, the current definition of the Hamming norm in terms of the dist leads to having to repeatedly invoke `pi.zero_apply`. This PR separates the two definitions and then proves their compatibility.\nWe also improve a few style aspects to proofs while here, and add some simp lemmas.", "changes": [{"oldPath": "src/information_theory/hamming.lean", "newPath": "src/information_theory/hamming.lean", "changes": [["mod", "theorem", "hamming_dist_pos", []], ["mod", "theorem", "hamming_dist_zero_left", []], ["mod", "theorem", "hamming_dist_zero_right", []], ["mod", "def", "hamming_norm", []], ["mod", "theorem", "hamming_norm_nonneg", []], ["mod", "theorem", "hamming_norm_pos_iff", []]]}]}, {"timestamp": 1660646180, "sha": "0d43cc6d", "message": "feat(algebra/order/with_zero): Add eq_one_of_mul_eq_one lemmas (#15644)", "changes": [{"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["mod", "theorem", "div_le_div_left₀", []], ["mod", "theorem", "div_le_div_right₀", []], ["mod", "theorem", "div_le_iff₀", []], ["add", "theorem", "eq_one_of_mul_eq_one_left'", []], ["add", "theorem", "eq_one_of_mul_eq_one_left", []], ["add", "theorem", "eq_one_of_mul_eq_one_right'", []], ["add", "theorem", "eq_one_of_mul_eq_one_right", []], ["add", "theorem", "inv_le_one₀", []], ["mod", "theorem", "le_div_iff₀", []], ["add", "theorem", "mul_le_one₀", []], ["add", "theorem", "one_le_inv₀", []], ["add", "theorem", "one_le_mul₀", []]]}]}, {"timestamp": 1660646179, "sha": "d13cc099", "message": "feat(data/list/basic): add `list.length_filter_le` and `list.length_filter_map_le` (#15369)\nA `list` can't get longer when applying `list.filter` or `list.filter_map`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "length_filter_le", ["list"]], ["add", "theorem", "length_filter_map_le", ["list"]], ["add", "theorem", "map_filter_map_some_eq_filter_map_is_some", ["list"]]]}]}, {"timestamp": 1660646177, "sha": "0f4d823c", "message": "feat(topology/algebra/uniform_ring): ring completions and algebra structures (#14841)\nIf `A` is an algebra over a commutative ring `R`, so is the `uniform_space.completion` of `A`.\nIf `A` is a normed algebra over a normed field `𝕜`, then so is `uniform_space.completion A`.", "changes": [{"oldPath": "src/analysis/normed_space/completion.lean", "newPath": "src/analysis/normed_space/completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_mul_action.lean", "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": [["add", "theorem", "smul_def", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["add", "theorem", "algebra_map_def", ["uniform_space", "completion"]], ["add", "theorem", "map_smul_eq_mul_coe", ["uniform_space", "completion"]]]}]}, {"timestamp": 1660639181, "sha": "90dc6175", "message": "feat(analysis/calculus/cont_diff): `iterated_fderiv[_within]` is linear in the function (#15902)\nThis PR adds lemmas for calculating the iterated Fréchet-derivative of addition, negation, and constant scalar multiplication.\nFor each operation, we provide two lemmas, one for `iterated_fderiv_within` and on for `iterated_fderiv`.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "iterated_fderiv_add_apply", []], ["add", "theorem", "iterated_fderiv_const_smul_apply", []], ["add", "theorem", "iterated_fderiv_neg_apply", []], ["add", "theorem", "iterated_fderiv_within_add_apply", []], ["add", "theorem", "iterated_fderiv_within_const_smul_apply", []], ["add", "theorem", "iterated_fderiv_within_neg_apply", []]]}]}, {"timestamp": 1660639179, "sha": "18302a46", "message": "feat(category_theory/limits): has_limits_of_shape J if and only if const J is a left adjoint (#15859)", "changes": [{"oldPath": "src/category_theory/adjunction/comma.lean", "newPath": "src/category_theory/adjunction/comma.lean", "changes": [["add", "theorem", "nonempty_is_left_adjoint_iff_has_terminal_costructured_arrow", ["category_theory"]], ["add", "theorem", "nonempty_is_right_adjoint_iff_has_initial_structured_arrow", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/cone_category.lean", "newPath": "src/category_theory/limits/cone_category.lean", "changes": [["add", "theorem", "has_colimits_of_shape_iff_is_right_adjoint_const", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_shape_iff_is_left_adjoint_const", ["category_theory", "limits"]]]}]}, {"timestamp": 1660639178, "sha": "ecb66ca5", "message": "chore(tactic/group): do not swallow errors from simp_core (#15835)\nThis probably doesn't make much difference, but it's better to silence only the error we expect (no progress being made), and not all errors that could ever possibly happen.", "changes": [{"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}]}, {"timestamp": 1660639177, "sha": "fae3ce12", "message": "feat(field_theory/splitting_field): Adjoining all of the roots of a polynomial gives a splitting field (#15795)\nThis PR proves that if `p` splits in a field extensions, then adjoining all of the roots of `p` gives a splitting field of `p`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_root_set_is_splitting_field", ["intermediate_field"]], ["add", "theorem", "is_splitting_field_iff", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}]}, {"timestamp": 1660639175, "sha": "adb6142d", "message": "refactor(topology/algebra/infinite_sum): generalize `tsum_zero` (#15786)\nThanks to @kbuzzard and @b-mehta, it holds whenever\n`is_closed {0}`. This is true not just as `t2_space` as before,\nbut in all `t1_space`.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_zero'", []], ["mod", "theorem", "tsum_zero", []]]}]}, {"timestamp": 1660632148, "sha": "0672fa47", "message": "feat(ring_theory/dedekind_domain/ideal): the prime factorizations of `r` and `span {r}` are essentially the same in a PID (#15758)\nA definition plus some extra lemmas about PIDs that will be used in #15000", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "multiplicity_eq_multiplicity_span", []], ["add", "theorem", "singleton_span_mem_normalized_factors_of_mem_normalized_factors", []], ["add", "theorem", "span_singleton_dvd_span_singleton_iff_dvd", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "mem_normalized_factors_eq_of_associated", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1660632147, "sha": "28959d93", "message": "feat(category_theory/closed/monoidal): transport monoidal_closed across a monoidal equivalence (#15530)", "changes": [{"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": [["add", "def", "of_equiv", ["category_theory", "monoidal_closed"]]]}, {"oldPath": null, "newPath": "src/category_theory/functor/inv_isos.lean", "changes": [["add", "def", "comp_inv_iso", ["category_theory"]], ["add", "def", "inv_comp_iso", ["category_theory"]], ["add", "def", "iso_comp_inv", ["category_theory"]], ["add", "def", "iso_inv_comp", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}]}, {"timestamp": 1660632146, "sha": "3db63953", "message": "feat(category_theory/products/basic): equivalence ((A ⥤ B) × (A ⥤ C)) ≌ (A ⥤ (B × C)) (#15445)", "changes": [{"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["add", "def", "prod'_comp_fst", ["category_theory", "functor"]], ["add", "def", "prod'_comp_snd", ["category_theory", "functor"]], ["add", "def", "functor_prod_functor_equiv", ["category_theory"]], ["add", "def", "functor_prod_functor_equiv_counit_iso", ["category_theory"]], ["add", "def", "functor_prod_functor_equiv_unit_iso", ["category_theory"]], ["add", "def", "functor_prod_to_prod_functor", ["category_theory"]], ["add", "def", "eta_iso", ["category_theory", "prod"]], ["add", "def", "prod_functor_to_functor_prod", ["category_theory"]]]}]}, {"timestamp": 1660632144, "sha": "6375f851", "message": "feat(measure_theory/probability_mass_function): Probability one iff support equals singleton (#15334)\n`a` has probability 1 under a `pmf` iff the support is the singleton `{a}`", "changes": [{"oldPath": "src/probability/probability_mass_function/basic.lean", "newPath": "src/probability/probability_mass_function/basic.lean", "changes": [["add", "theorem", "apply_eq_one_iff", ["pmf"]], ["add", "theorem", "to_measure_apply_eq_zero_iff", ["pmf"]], ["add", "theorem", "to_measure_apply_singleton", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_singleton", ["pmf"]]]}]}, {"timestamp": 1660623073, "sha": "89f46ddd", "message": "docs(group_theory/p_group): Swap mismatched docstrings (#16065)\nThis PR swaps two mismatched docstrings.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}]}, {"timestamp": 1660623072, "sha": "2230ae61", "message": "feat(data/sign): `sign_one`, `sign_mul`, `sign_pow` (#16058)\nAdd a lemma about the sign of the product of two numbers (in the\n`linear_ordered_ring` case, extracted from the existing `sign_hom` in\nthat case). Also add `sign_one` and `sign_pow`.", "changes": [{"oldPath": "src/data/sign.lean", "newPath": "src/data/sign.lean", "changes": [["add", "theorem", "sign_mul", []], ["add", "theorem", "sign_one", []], ["add", "theorem", "sign_pow", []]]}]}, {"timestamp": 1660623071, "sha": "9d24857b", "message": "feat(linear_algebra/ray): relation to linear independence (#16056)\nAdd lemmas that two vectors are linearly dependent if and only if\nthey are in the same ray or one is in the same ray as the negation of\nthe other (for a module over a `linear_ordered_comm_ring` with\n`no_zero_smul_divisors`).", "changes": [{"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": [["add", "theorem", "same_ray_or_ne_zero_and_same_ray_neg_iff_not_linear_independent", []], ["add", "theorem", "same_ray_or_same_ray_neg_iff_not_linear_independent", []]]}]}, {"timestamp": 1660623070, "sha": "24855f46", "message": "feat(category_theory/lifting_properties): adjunctions (#16038)\nIn this PR, we obtain the basic behaviour of lifting properties with respect to adjunctions.", "changes": [{"oldPath": null, "newPath": "src/category_theory/lifting_properties/adjunction.lean", "changes": [["add", "theorem", "has_lifting_property_iff", ["category_theory", "adjunction"]], ["add", "theorem", "left_adjoint", ["category_theory", "comm_sq"]], ["add", "theorem", "left_adjoint_has_lift_iff", ["category_theory", "comm_sq"]], ["add", "def", "left_adjoint_lift_struct_equiv", ["category_theory", "comm_sq"]], ["add", "theorem", "right_adjoint", ["category_theory", "comm_sq"]], ["add", "theorem", "right_adjoint_has_lift_iff", ["category_theory", "comm_sq"]], ["add", "def", "right_adjoint_lift_struct_equiv", ["category_theory", "comm_sq"]]]}]}, {"timestamp": 1660623069, "sha": "909cae04", "message": "feat(logic/basic): given two different elements, one of the two is different from a third (#16023)\nThis lemma is extracted from #15984, as suggested by the code-review.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ne_or_ne", ["ne"]]]}]}, {"timestamp": 1660623068, "sha": "33261fbe", "message": "feat(topology/quasi_separated): Define quasi-separated topological spaces. (#15999)", "changes": [{"oldPath": "src/topology/noetherian_space.lean", "newPath": "src/topology/noetherian_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/quasi_separated.lean", "changes": [["add", "theorem", "image_of_embedding", ["is_quasi_separated"]], ["add", "theorem", "of_quasi_separated_space", ["is_quasi_separated"]], ["add", "theorem", "of_subset", ["is_quasi_separated"]], ["add", "def", "is_quasi_separated", []], ["add", "theorem", "is_quasi_separated_iff_quasi_separated_space", []], ["add", "theorem", "is_quasi_separated_univ", []], ["add", "theorem", "is_quasi_separated_univ_iff", []], ["add", "theorem", "is_quasi_separated_iff", ["open_embedding"]], ["add", "theorem", "of_open_embedding", ["quasi_separated_space"]]]}, {"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": []}]}, {"timestamp": 1660623067, "sha": "3e0dd193", "message": "feat(category_theory): compute subobjects of structured arrows (#15912)\nOne step closer to the Special Adjoint Functor Theorem.", "changes": [{"oldPath": "src/category_theory/limits/comma.lean", "newPath": "src/category_theory/limits/comma.lean", "changes": [["add", "theorem", "epi_iff_epi_left", ["category_theory", "costructured_arrow"]], ["add", "theorem", "mono_iff_mono_right", ["category_theory", "structured_arrow"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["add", "theorem", "epi_iff_epi_left", ["category_theory", "over"]], ["add", "theorem", "epi_left_of_epi", ["category_theory", "over"]], ["add", "theorem", "mono_iff_mono_right", ["category_theory", "under"]], ["add", "theorem", "mono_right_of_mono", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["add", "theorem", "epi_of_epi_right", ["category_theory", "under"]], ["add", "theorem", "mono_of_mono_right", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": [["add", "theorem", "epi_of_epi_left", ["category_theory", "costructured_arrow"]], ["add", "theorem", "ext", ["category_theory", "costructured_arrow"]], ["add", "theorem", "ext_iff", ["category_theory", "costructured_arrow"]], ["add", "theorem", "mono_of_mono_left", ["category_theory", "costructured_arrow"]], ["add", "theorem", "epi_of_epi_right", ["category_theory", "structured_arrow"]], ["add", "theorem", "ext", ["category_theory", "structured_arrow"]], ["add", "theorem", "ext_iff", ["category_theory", "structured_arrow"]], ["add", "theorem", "mono_of_mono_right", ["category_theory", "structured_arrow"]]]}, {"oldPath": null, "newPath": "src/category_theory/subobject/comma.lean", "changes": [["add", "theorem", "lift_project_quotient", ["category_theory", "costructured_arrow"]], ["add", "def", "lift_quotient", ["category_theory", "costructured_arrow"]], ["add", "def", "project_quotient", ["category_theory", "costructured_arrow"]], ["add", "theorem", "project_quotient_factors", ["category_theory", "costructured_arrow"]], ["add", "theorem", "project_quotient_mk", ["category_theory", "costructured_arrow"]], ["add", "def", "quotient_equiv", ["category_theory", "costructured_arrow"]], ["add", "theorem", "unop_left_comp_of_mk_le_mk_unop", ["category_theory", "costructured_arrow"]], ["add", "theorem", "unop_left_comp_underlying_iso_hom_unop", ["category_theory", "costructured_arrow"]], ["add", "theorem", "lift_project_subobject", ["category_theory", "structured_arrow"]], ["add", "def", "lift_subobject", ["category_theory", "structured_arrow"]], ["add", "def", "project_subobject", ["category_theory", "structured_arrow"]], ["add", "theorem", "project_subobject_factors", ["category_theory", "structured_arrow"]], ["add", "theorem", "project_subobject_mk", ["category_theory", "structured_arrow"]], ["add", "def", "subobject_equiv", ["category_theory", "structured_arrow"]]]}]}, {"timestamp": 1660623066, "sha": "e6f3561b", "message": "refactor(analysis/normed_space/pi_Lp): make argument of pi_Lp a term of ℝ≥0∞ instead of ℝ (#15833)\nThis refactors `pi_Lp` so that the `p` argument has type ℝ≥0∞ instead of ℝ. There are several reasons for doing this:\n1. It matches the design of `lp`.\n2. We have `pi_Lp ∞ β`, so we can appropriately state various interpolation inequalities.\n3. It makes more sense semantically\n4. It should make the equivalence between `pi_Lp` and `lp` easier to implement\nThe new implementation of `pi_Lp` tries to retain as much as possible of the original implementation, while at the same time mimicking the implementation of `lp`. Many of the proofs are now significantly longer because of the required case splits.\n- [x] depends on: #15852", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["del", "theorem", "dist_eq", ["pi_Lp"]], ["add", "theorem", "dist_eq_card", ["pi_Lp"]], ["add", "theorem", "dist_eq_csupr", ["pi_Lp"]], ["add", "theorem", "dist_eq_sum", ["pi_Lp"]], ["del", "theorem", "edist_eq", ["pi_Lp"]], ["add", "theorem", "edist_eq_card", ["pi_Lp"]], ["add", "theorem", "edist_eq_sum", ["pi_Lp"]], ["add", "theorem", "edist_eq_supr", ["pi_Lp"]], ["add", "def", "equivₗᵢ", ["pi_Lp"]], ["add", "theorem", "infty_equiv_isometry", ["pi_Lp"]], ["del", "theorem", "nndist_eq", ["pi_Lp"]], ["add", "theorem", "nndist_eq_sum", ["pi_Lp"]], ["add", "theorem", "nndist_eq_supr", ["pi_Lp"]], ["del", "theorem", "nnnorm_eq", ["pi_Lp"]], ["add", "theorem", "nnnorm_eq_csupr", ["pi_Lp"]], ["add", "theorem", "nnnorm_eq_sum", ["pi_Lp"]], ["add", "theorem", "nnnorm_equiv_symm_const'", ["pi_Lp"]], ["mod", "theorem", "nnnorm_equiv_symm_const", ["pi_Lp"]], ["mod", "theorem", "nnnorm_equiv_symm_one", ["pi_Lp"]], ["del", "theorem", "norm_eq", ["pi_Lp"]], ["add", "theorem", "norm_eq_card", ["pi_Lp"]], ["add", "theorem", "norm_eq_csupr", ["pi_Lp"]], ["mod", "theorem", "norm_eq_of_nat", ["pi_Lp"]], ["add", "theorem", "norm_eq_sum", ["pi_Lp"]], ["add", "theorem", "norm_equiv_symm_const'", ["pi_Lp"]], ["mod", "theorem", "norm_equiv_symm_const", ["pi_Lp"]], ["mod", "theorem", "norm_equiv_symm_one", ["pi_Lp"]], ["add", "theorem", "norm_sq_eq_of_L2", ["pi_Lp"]], ["add", "theorem", "supr_edist_ne_top_aux", ["pi_Lp"]], ["mod", "def", "pi_Lp", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_real_pos_iff_ne_top", ["ennreal"]]]}]}, {"timestamp": 1660623064, "sha": "8a2d93a0", "message": "feat(ring_theory/etale): Localization and formally etale homomorphisms. (#15813)", "changes": [{"oldPath": "src/ring_theory/etale.lean", "newPath": "src/ring_theory/etale.lean", "changes": [["add", "theorem", "localization_base", ["algebra", "formally_etale"]], ["add", "theorem", "localization_map", ["algebra", "formally_etale"]], ["add", "theorem", "of_is_localization", ["algebra", "formally_etale"]], ["add", "theorem", "localization_base", ["algebra", "formally_smooth"]], ["add", "theorem", "localization_map", ["algebra", "formally_smooth"]], ["add", "theorem", "of_is_localization", ["algebra", "formally_smooth"]], ["add", "theorem", "localization_base", ["algebra", "formally_unramified"]], ["add", "theorem", "localization_map", ["algebra", "formally_unramified"]], ["add", "theorem", "of_comp", ["algebra", "formally_unramified"]], ["add", "theorem", "of_is_localization", ["algebra", "formally_unramified"]]]}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["mod", "theorem", "induction_on", ["ideal", "is_nilpotent"]], ["add", "theorem", "is_unit_quotient_mk_iff", ["is_nilpotent"]]]}]}, {"timestamp": 1660623063, "sha": "cdb7af2f", "message": "feat(combinatorics/simple_graph): add three useful lemmas relating walk.support and walk.append (#15687)", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "mem_support_iff_exists_append", ["simple_graph", "walk"]], ["add", "theorem", "subset_support_append_left", ["simple_graph", "walk"]], ["add", "theorem", "subset_support_append_right", ["simple_graph", "walk"]]]}]}, {"timestamp": 1660623062, "sha": "fb1787b1", "message": "feat(analysis/seminorm): Group seminorms (#15594)\nMultiplicativize the existing `add_group_seminorm` material.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["del", "theorem", "add_apply", ["add_group_seminorm"]], ["del", "theorem", "add_comp", ["add_group_seminorm"]], ["del", "theorem", "coe_add", ["add_group_seminorm"]], ["del", "theorem", "coe_comp", ["add_group_seminorm"]], ["del", "theorem", "coe_sup", ["add_group_seminorm"]], ["del", "theorem", "coe_zero", ["add_group_seminorm"]], ["del", "def", "comp", ["add_group_seminorm"]], ["del", "theorem", "comp_add_le", ["add_group_seminorm"]], ["del", "theorem", "comp_apply", ["add_group_seminorm"]], ["del", "theorem", "comp_comp", ["add_group_seminorm"]], ["del", "theorem", "comp_id", ["add_group_seminorm"]], ["del", "theorem", "comp_mono", ["add_group_seminorm"]], ["del", "theorem", "comp_zero", ["add_group_seminorm"]], ["del", "theorem", "ext", ["add_group_seminorm"]], ["del", "theorem", "inf_apply", ["add_group_seminorm"]], ["del", "theorem", "le_def", ["add_group_seminorm"]], ["del", "theorem", "le_insert'", ["add_group_seminorm"]], ["del", "theorem", "le_insert", ["add_group_seminorm"]], ["del", "theorem", "lt_def", ["add_group_seminorm"]], ["del", "theorem", "sub_rev", ["add_group_seminorm"]], ["del", "theorem", "sup_apply", ["add_group_seminorm"]], ["del", "theorem", "zero_apply", ["add_group_seminorm"]], ["del", "theorem", "zero_comp", ["add_group_seminorm"]], ["add", "theorem", "add_apply", ["group_seminorm"]], ["add", "theorem", "add_comp", ["group_seminorm"]], ["add", "theorem", "coe_add", ["group_seminorm"]], ["add", "theorem", "coe_comp", ["group_seminorm"]], ["add", "theorem", "coe_le_coe", ["group_seminorm"]], ["add", "theorem", "coe_lt_coe", ["group_seminorm"]], ["add", "theorem", "coe_smul", ["group_seminorm"]], ["add", "theorem", "coe_sup", ["group_seminorm"]], ["add", "theorem", "coe_zero", ["group_seminorm"]], ["add", "def", "comp", ["group_seminorm"]], ["add", "theorem", "comp_apply", ["group_seminorm"]], ["add", "theorem", "comp_assoc", ["group_seminorm"]], ["add", "theorem", "comp_id", ["group_seminorm"]], ["add", "theorem", "comp_mono", ["group_seminorm"]], ["add", "theorem", "comp_mul_le", ["group_seminorm"]], ["add", "theorem", "comp_zero", ["group_seminorm"]], ["add", "theorem", "div_rev", ["group_seminorm"]], ["add", "theorem", "ext", ["group_seminorm"]], ["add", "theorem", "inf_apply", ["group_seminorm"]], ["add", "theorem", "le_def", ["group_seminorm"]], ["add", "theorem", "le_insert'", ["group_seminorm"]], ["add", "theorem", "le_insert", ["group_seminorm"]], ["add", "theorem", "lt_def", ["group_seminorm"]], ["add", "theorem", "smul_apply", ["group_seminorm"]], ["add", "theorem", "smul_sup", ["group_seminorm"]], ["add", "theorem", "sup_apply", ["group_seminorm"]], ["add", "theorem", "zero_apply", ["group_seminorm"]], ["add", "theorem", "zero_comp", ["group_seminorm"]], ["add", "structure", "group_seminorm", []]]}]}, {"timestamp": 1660623061, "sha": "5c91a35b", "message": "refactor(analysis/inner_product_space): rename `is_self_adjoint` to `is_symmetric` and add `is_self_adjoint` (#15326)\nWe rename the current `inner_product_space.is_self_adjoint` to `linear_map.is_symmetric` (which states that `inner (A x) y = inner x (A y)` for all `x,y : E`) and add a new definition `is_self_adjoint` for `has_star R`. This definition is used to state theorems that were previously stated for `linear_map.is_symmetric`, but are actually about self-adjointness for `continuous_linear_map`. \nThe Hellinger-Toeplitz theorem then becomes the construction of a self-adjoint operator from a symmetric operator, which is consistent with the functional analysis literature.\nMoreover, since the definitions are now in the correct namespaces, we can use dot-notation. Consequently, most parts of `inner_product_space/rayleigh` and `inner_product_space/spectrum` now use `is_self_adjoint` and are also now in the `continuous_linear_map.is_self_adjoint` namespace. For the finite-dimensional case we use `is_symmetric`, since continuity is not used anywhere.\nFinally, there are some minor cleanups in the matrix diagonalization file.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "add", ["is_self_adjoint"]], ["add", "theorem", "bit0", ["is_self_adjoint"]], ["add", "theorem", "bit1", ["is_self_adjoint"]], ["add", "theorem", "conjugate'", ["is_self_adjoint"]], ["add", "theorem", "conjugate", ["is_self_adjoint"]], ["add", "theorem", "div", ["is_self_adjoint"]], ["add", "theorem", "inv", ["is_self_adjoint"]], ["add", "theorem", "is_star_normal", ["is_self_adjoint"]], ["add", "theorem", "mul", ["is_self_adjoint"]], ["add", "theorem", "neg", ["is_self_adjoint"]], ["add", "theorem", "pow", ["is_self_adjoint"]], ["add", "theorem", "smul", ["is_self_adjoint"]], ["add", "theorem", "star_eq", ["is_self_adjoint"]], ["add", "theorem", "sub", ["is_self_adjoint"]], ["add", "theorem", "zpow", ["is_self_adjoint"]], ["add", "def", "is_self_adjoint", []], ["add", "theorem", "is_self_adjoint_iff", []], ["add", "theorem", "is_self_adjoint_one", []], ["add", "theorem", "is_self_adjoint_zero", []], ["del", "theorem", "bit0_mem", ["self_adjoint"]], ["del", "theorem", "bit1_mem", ["self_adjoint"]], ["del", "theorem", "conjugate'", ["self_adjoint"]], ["del", "theorem", "conjugate", ["self_adjoint"]], ["del", "theorem", "is_star_normal_of_mem", ["self_adjoint"]], ["del", "theorem", "mul_mem", ["self_adjoint"]], ["del", "theorem", "one_mem", ["self_adjoint"]], ["del", "theorem", "smul_mem", ["self_adjoint"]]]}, {"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "adjoint_id", ["continuous_linear_map"]], ["add", "theorem", "is_self_adjoint_iff'", ["continuous_linear_map"]], ["del", "theorem", "is_self_adjoint_iff_adjoint_eq", ["continuous_linear_map"]], ["add", "theorem", "is_self_adjoint_iff_is_symmetric", ["continuous_linear_map"]], ["del", "theorem", "add", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "adjoint_conj", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "adjoint_eq", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "apply_clm", ["inner_product_space", "is_self_adjoint"]], ["del", "def", "clm", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "clm_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "coe_re_apply_inner_self_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "conj_adjoint", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "conj_inner_sym", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "conj_orthogonal_projection", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "continuous", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "restrict_invariant", ["inner_product_space", "is_self_adjoint"]], ["del", "def", "is_self_adjoint", ["inner_product_space"]], ["del", "theorem", "is_self_adjoint_id", ["inner_product_space"]], ["del", "theorem", "is_self_adjoint_iff_bilin_form", ["inner_product_space"]], ["del", "theorem", "is_self_adjoint_iff_inner_map_self_real", ["inner_product_space"]], ["del", "theorem", "is_self_adjoint_zero", ["inner_product_space"]], ["del", "theorem", "orthogonal_projection_is_self_adjoint", ["inner_product_space"]], ["add", "theorem", "adjoint_conj", ["is_self_adjoint"]], ["add", "theorem", "adjoint_eq", ["is_self_adjoint"]], ["add", "theorem", "conj_adjoint", ["is_self_adjoint"]], ["add", "theorem", "conj_orthogonal_projection", ["is_self_adjoint"]], ["add", "theorem", "is_symmetric", ["is_self_adjoint"]], ["del", "theorem", "is_self_adjoint_adjoint_mul_self", ["linear_map"]], ["add", "theorem", "is_self_adjoint_iff'", ["linear_map"]], ["del", "theorem", "is_self_adjoint_iff_eq_adjoint", ["linear_map"]], ["add", "theorem", "add", ["linear_map", "is_symmetric"]], ["add", "theorem", "apply_clm", ["linear_map", "is_symmetric"]], ["add", "theorem", "coe_re_apply_inner_self_apply", ["linear_map", "is_symmetric"]], ["add", "theorem", "coe_to_self_adjoint", ["linear_map", "is_symmetric"]], ["add", "theorem", "conj_inner_sym", ["linear_map", "is_symmetric"]], ["add", "theorem", "continuous", ["linear_map", "is_symmetric"]], ["add", "theorem", "is_self_adjoint", ["linear_map", "is_symmetric"]], ["add", "theorem", "restrict_invariant", ["linear_map", "is_symmetric"]], ["add", "theorem", "restrict_scalars", ["linear_map", "is_symmetric"]], ["add", "def", "to_self_adjoint", ["linear_map", "is_symmetric"]], ["add", "theorem", "to_self_adjoint_apply", ["linear_map", "is_symmetric"]], ["add", "def", "is_symmetric", ["linear_map"]], ["add", "theorem", "is_symmetric_adjoint_mul_self", ["linear_map"]], ["add", "theorem", "is_symmetric_id", ["linear_map"]], ["add", "theorem", "is_symmetric_iff_bilin_form", ["linear_map"]], ["add", "theorem", "is_symmetric_iff_inner_map_self_real", ["linear_map"]], ["add", "theorem", "is_symmetric_iff_is_self_adjoint", ["linear_map"]], ["add", "theorem", "is_symmetric_zero", ["linear_map"]], ["add", "theorem", "orthogonal_projection_is_self_adjoint", []], ["add", "theorem", "orthogonal_projection_is_symmetric", []]]}, {"oldPath": "src/analysis/inner_product_space/positive.lean", "newPath": "src/analysis/inner_product_space/positive.lean", "changes": [["mod", "theorem", "adjoint_conj", ["continuous_linear_map", "is_positive"]], ["mod", "theorem", "conj_adjoint", ["continuous_linear_map", "is_positive"]], ["mod", "theorem", "conj_orthogonal_projection", ["continuous_linear_map", "is_positive"]], ["mod", "theorem", "orthogonal_projection_comp", ["continuous_linear_map", "is_positive"]], ["del", "theorem", "is_positive_id", ["continuous_linear_map"]], ["add", "theorem", "is_positive_one", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": [["del", "theorem", "eq_smul_self_of_is_local_extr_on", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "eq_smul_self_of_is_local_extr_on_real", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_eigenvalue_infi_of_finite_dimensional", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_eigenvalue_supr_of_finite_dimensional", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_eigenvector_of_is_local_extr_on", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_eigenvector_of_is_max_on", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_eigenvector_of_is_min_on", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_strict_fderiv_at_re_apply_inner_self", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "linearly_dependent_of_is_local_extr_on", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "subsingleton_of_no_eigenvalue_finite_dimensional", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "eq_smul_self_of_is_local_extr_on", ["is_self_adjoint"]], ["add", "theorem", "eq_smul_self_of_is_local_extr_on_real", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_local_extr_on", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_max_on", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_min_on", ["is_self_adjoint"]], ["add", "theorem", "linearly_dependent_of_is_local_extr_on", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvalue_infi_of_finite_dimensional", ["linear_map", "is_symmetric"]], ["add", "theorem", "has_eigenvalue_supr_of_finite_dimensional", ["linear_map", "is_symmetric"]], ["add", "theorem", "has_strict_fderiv_at_re_apply_inner_self", ["linear_map", "is_symmetric"]], ["add", "theorem", "subsingleton_of_no_eigenvalue_finite_dimensional", ["linear_map", "is_symmetric"]]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["del", "theorem", "apply_eigenvector_basis", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "conj_eigenvalue_eq_self", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "diagonalization_apply_self_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "diagonalization_basis_apply_self_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "diagonalization_symm_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "direct_sum_is_internal", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_eigenvalue_eigenvalues", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "has_eigenvector_eigenvector_basis", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "invariant_orthogonal_eigenspace", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "orthogonal_family_eigenspaces'", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "orthogonal_family_eigenspaces", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces_eq_bot'", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces_eq_bot", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces_invariant", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "apply_eigenvector_basis", ["linear_map", "is_symmetric"]], ["add", "theorem", "conj_eigenvalue_eq_self", ["linear_map", "is_symmetric"]], ["add", "theorem", "diagonalization_apply_self_apply", ["linear_map", "is_symmetric"]], ["add", "theorem", "diagonalization_basis_apply_self_apply", ["linear_map", "is_symmetric"]], ["add", "theorem", "diagonalization_symm_apply", ["linear_map", "is_symmetric"]], ["add", "theorem", "direct_sum_is_internal", ["linear_map", "is_symmetric"]], ["add", "theorem", "has_eigenvalue_eigenvalues", ["linear_map", "is_symmetric"]], ["add", "theorem", "has_eigenvector_eigenvector_basis", ["linear_map", "is_symmetric"]], ["add", "theorem", "invariant_orthogonal_eigenspace", ["linear_map", "is_symmetric"]], ["add", "theorem", "orthogonal_family_eigenspaces'", ["linear_map", "is_symmetric"]], ["add", "theorem", "orthogonal_family_eigenspaces", ["linear_map", "is_symmetric"]], ["add", "theorem", "orthogonal_supr_eigenspaces", ["linear_map", "is_symmetric"]], ["add", "theorem", "orthogonal_supr_eigenspaces_eq_bot'", ["linear_map", "is_symmetric"]], ["add", "theorem", "orthogonal_supr_eigenspaces_eq_bot", ["linear_map", "is_symmetric"]], ["add", "theorem", "orthogonal_supr_eigenspaces_invariant", ["linear_map", "is_symmetric"]]]}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": [["del", "theorem", "is_hermitian_iff_is_self_adjoint", ["matrix"]], ["add", "theorem", "is_hermitian_iff_is_symmetric", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/spectrum.lean", "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": []}]}, {"timestamp": 1660623059, "sha": "05d8b4f3", "message": "feat(ring_theory/polynomial/vieta): add version of prod_X_add_C_eq_sum_esymm for multiset (#15008)\nThis is a proof of Vieta's formula for `multiset`: \n```lean\nlemma multiset.prod_X_add_C_eq_sum_esymm (s : multiset R) :\n (s.map (λ r, polynomial.X + polynomial.C r)).prod \n = ∑ j in finset.range (s.card + 1), (polynomial.C (s.esymm j) * polynomial.X ^ (s.card - j))\n```\nwhere\n```lean\ndef multiset.esymm (s : multiset R) (n : ℕ) : R := ((s.powerset_len n).map multiset.prod).sum\n```\nFrom this, we deduce the proof of the formula for `mv_polynomial`:\n```lean\nlemma prod_C_add_X_eq_sum_esymm :\n (∏ i : σ, (polynomial.X + polynomial.C (X i)) : polynomial (mv_polynomial σ R) )=\n ∑ j in range (card σ + 1), (polynomial.C (esymm σ R j) * polynomial.X ^ (card σ - j))\n```\nwith \n```lean\ndef mv_polynomial.esymm (n : ℕ) : mv_polynomial σ R := ∑ t in powerset_len n univ, ∏ i in t, X i\n```\nIt is better to go in this direction since there does not seem to be a natural way to prove the `multiset` version from the `mv_polynomial` version due to the difficulty to enumerate the elements of a `multiset` with a `fintype`, see this [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/.E2.9C.94.20fintype.20enumerating.20a.20multiset) and the discussion from https://github.com/leanprover-community/mathlib/pull/14908.\nWe prove, as suggested in [#14908](https://github.com/leanprover-community/mathlib/pull/14908#discussion_r905667015) , that `mv_polynomial.esymm` is obtained by specialising `multiset.esymm`. However, we do not refactor the results of `ring_theory/polynomial/symmetric` in terms of `multiset.esymm`.\nFrom flt-regular", "changes": [{"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": [["add", "def", "esymm", ["multiset"]], ["add", "theorem", "esymm", ["mv_polynomial", "esymm_eq_multiset"]]]}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": [["add", "theorem", "esymm_neg", ["multiset"]], ["add", "theorem", "prod_X_add_C_coeff", ["multiset"]], ["add", "theorem", "prod_X_add_C_eq_sum_esymm", ["multiset"]], ["add", "theorem", "prod_X_sub_C_coeff", ["multiset"]], ["add", "theorem", "prod_X_sub_C_eq_sum_esymm", ["multiset"]], ["del", "theorem", "esymm_to_sum", ["mv_polynomial"]], ["add", "theorem", "prod_C_add_X_eq_sum_esymm", ["mv_polynomial"]], ["mod", "theorem", "prod_X_add_C_coeff", ["mv_polynomial"]], ["del", "theorem", "prod_X_add_C_eq_sum_esymm", ["mv_polynomial"]], ["del", "theorem", "prod_X_add_C_eval", ["mv_polynomial"]]]}]}, {"timestamp": 1660623058, "sha": "f1e5c657", "message": "feat(topology/uniform_space/uniform_convergence_topology): continuity of [pre,post]composition, and other topological properties (#14534)\nWe refactor a bit the beginning of the file to define a lower adjoint to the operation sending a filter on `β × β` to the corresponding \"filter of uniform convergence\" on `(α → β) × (α → β)` (applied to the uniformity on `β`, this gives the uniformity of uniform convergence on `α → β`).\nUsing this lower adjoint and general facts about Galois connections, we prove (among other things) that, for the uniform structure of uniform convergence : \n- if `f : γ → β` is uniformly continuous, then `(f ∘ ⬝) : (α → γ) → (α → β)` is too\n- for any function `g : γ → α`, `(⬝ ∘ g) : (α → β) → (γ → β)` is uniformly continuous\n- \"swapping the arguments\" is an isomorphism of uniform spaces between `α → Π i, δ i` and `Π i, α → δ i`, where the `α → *` types are endowed with the uniform structure of uniform convergence and the `Π i, *` are endowed with the product uniform structure\nWe then generalize these results to uniform structures of uniform convergence on a set of subsets of `α`.", "changes": [{"oldPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "newPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "changes": [["mod", "theorem", "t2_space", ["uniform_convergence"]], ["mod", "theorem", "uniform_continuous_eval", ["uniform_convergence"]]]}]}, {"timestamp": 1660614128, "sha": "34b2a989", "message": "feat(algebraic_geometry/*): Preliminary lemmas for #16059 (#16060)", "changes": [{"oldPath": "src/algebra/category/Ring/basic.lean", "newPath": "src/algebra/category/Ring/basic.lean", "changes": [["add", "theorem", "comp_eq_ring_hom_comp", ["CommRing"]], ["add", "theorem", "ring_hom_comp_eq_comp", ["CommRing"]]]}, {"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["add", "def", "of", ["algebraic_geometry", "AffineScheme"]], ["add", "def", "of_hom", ["algebraic_geometry", "AffineScheme"]], ["add", "theorem", "map_restrict_basic_open", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "is_affine_open_iff_of_is_open_immersion", ["algebraic_geometry"]], ["add", "theorem", "is_localization_of_eq_basic_open", ["algebraic_geometry"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/morphisms/ring_hom_properties.lean", "changes": [["add", "theorem", "basic_open_iff", ["ring_hom", "respects_iso"]], ["add", "theorem", "basic_open_iff_localization", ["ring_hom", "respects_iso"]], ["add", "theorem", "of_restrict_morphism_restrict_iff", ["ring_hom", "respects_iso"]], ["add", "theorem", "Γ_pullback_fst", ["ring_hom", "stable_under_base_change"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "theorem", "functor_obj_map_obj", ["topological_space", "opens"]]]}]}, {"timestamp": 1660614127, "sha": "531db2ef", "message": "feat(topology/algebra/uniform_group): add instance `topological_group_is_uniform_of_compact_space` (#16027)\nAlso update doc string for `topological_group.to_uniform_space`.\ncc @ADedecker", "changes": [{"oldPath": "src/analysis/normed_space/compact_operator.lean", "newPath": "src/analysis/normed_space/compact_operator.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "newPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_filter_basis.lean", "newPath": "src/topology/algebra/uniform_filter_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "topological_comm_group_is_uniform", []], ["del", "theorem", "topological_group_is_uniform", []], ["add", "theorem", "topological_group_is_uniform_of_compact_space", []]]}, {"oldPath": "src/topology/algebra/valuation.lean", "newPath": "src/topology/algebra/valuation.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1660614126, "sha": "07d11baa", "message": "feat(algebraic/dold_kan): construction of the functors N₁ and N₂ (#16003)\nThis PR constructs two functors, including `N₂ : karoubi (simplicial_object C) ⥤ karoubi (chain_complex C ℕ)` which shall be an equivalence of categories for any preadditive category `C`.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/functor_n.lean", "changes": [["add", "def", "N₁", ["algebraic_topology", "dold_kan"]], ["add", "def", "N₂", ["algebraic_topology", "dold_kan"]]]}]}, {"timestamp": 1660614125, "sha": "9b298fea", "message": "feat(algebraic_geometry): Being quasi-compact is a local property. (#15995)", "changes": [{"oldPath": "src/algebraic_geometry/morphisms/basic.lean", "newPath": "src/algebraic_geometry/morphisms/basic.lean", "changes": [["del", "theorem", "open_cover_iff", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "theorem", "respects_iso_mk", ["algebraic_geometry", "affine_target_morphism_property"]], ["add", "theorem", "open_cover_iff", ["algebraic_geometry", "property_is_local_at_target"]]]}, {"oldPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "newPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "changes": [["add", "theorem", "is_compact_basic_open", ["algebraic_geometry"]], ["add", "theorem", "affine_open_cover_iff", ["algebraic_geometry", "quasi_compact"]], ["add", "theorem", "affine_open_cover_tfae", ["algebraic_geometry", "quasi_compact"]], ["add", "def", "affine_property", ["algebraic_geometry", "quasi_compact"]], ["add", "theorem", "affine_property_is_local", ["algebraic_geometry", "quasi_compact"]], ["add", "theorem", "affine_property_to_property", ["algebraic_geometry", "quasi_compact"]], ["add", "theorem", "open_cover_iff", ["algebraic_geometry", "quasi_compact"]], ["add", "theorem", "open_cover_tfae", ["algebraic_geometry", "quasi_compact"]], ["add", "theorem", "quasi_compact_eq_affine_property", ["algebraic_geometry"]], ["add", "theorem", "quasi_compact_iff_affine_property", ["algebraic_geometry"]], ["add", "theorem", "quasi_compact_over_affine_iff", ["algebraic_geometry"]], ["add", "theorem", "quasi_compact_respects_iso", ["algebraic_geometry"]], ["add", "theorem", "quasi_compact_stable_under_composition", ["algebraic_geometry"]]]}]}, {"timestamp": 1660614123, "sha": "13482743", "message": "chore(ring_theory/*): make ACC/DCC on rings be defeq to module versions (#15989)\nThis makes `is_noetherian_ring R` defeq to `is_noetherian R R`, and similar for `is_artinian_ring`. This was discussed on https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.40.5Breducible.5D.20defs.20of.20classes.20on.20the.20leadup.20to.20Lean4.2E.", "changes": [{"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": [["add", "def", "is_artinian_ring", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "def", "is_noetherian_ring", []]]}]}, {"timestamp": 1660614122, "sha": "9e25db49", "message": "feat(algebra/group_with_zero): generalize some lemmas (#15985)\n* replace `*_hom.map_inv` by a generic lemma `map_inv₀` assuming `[monoid_with_zero_hom_class]`;\n* replace `*_hom.map_div` by a generic lemma `map_div₀` assuming `[monoid_with_zero_hom_class]`;\n* replace `*_hom.map_zpow` by a generic lemma `map_zpow₀` assuming `[monoid_with_zero_hom_class]`;\n* replace `*_hom.map_units_inv` by a generic lemma `map_units_inv` assuming `[monoid_hom_class]`, `[monoid]`, and `[division_monoid]`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "map_div", ["alg_equiv"]], ["del", "theorem", "map_inv", ["alg_equiv"]], ["del", "theorem", "map_div", ["alg_hom"]], ["del", "theorem", "map_inv", ["alg_hom"]]]}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["del", "theorem", "map_div", ["ring_hom"]], ["mod", "theorem", "map_eq_zero", ["ring_hom"]], ["del", "theorem", "map_inv", ["ring_hom"]], ["mod", "theorem", "map_ne_zero", ["ring_hom"]], ["del", "theorem", "map_units_inv", ["ring_hom"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "map_zpow", ["ring_equiv"]], ["del", "theorem", "map_zpow", ["ring_hom"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "map_div₀", []], ["add", "theorem", "map_inv₀", []], ["del", "theorem", "map_units_inv", ["monoid_hom"]], ["del", "theorem", "map_div", ["monoid_with_zero_hom"]], ["mod", "theorem", "map_eq_zero", ["monoid_with_zero_hom"]], ["del", "theorem", "map_inv", ["monoid_with_zero_hom"]], ["del", "theorem", "map_units_inv", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["add", "theorem", "map_zpow₀", []], ["del", "theorem", "map_zpow", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": [["add", "theorem", "map_units_inv", []]]}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": [["mod", "theorem", "abv_div", ["is_absolute_value"]], ["mod", "theorem", "abv_inv", ["is_absolute_value"]]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["mod", "theorem", "abs_div", []], ["mod", "theorem", "abs_inv", []]]}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["mod", "theorem", "norm_sq_div", ["quaternion"]], ["mod", "theorem", "norm_sq_inv", ["quaternion"]]]}, {"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": [["del", "theorem", "map_div", ["ring_equiv"]], ["del", "theorem", "map_inv", ["ring_equiv"]]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": [["mod", "theorem", "nnnorm_div", []], ["mod", "theorem", "norm_div", []], ["mod", "theorem", "norm_inv", []], ["mod", "theorem", "norm_zpow", []]]}, {"oldPath": "src/analysis/normed_space/compact_operator.lean", "newPath": "src/analysis/normed_space/compact_operator.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_div", ["rat"]], ["mod", "theorem", "cast_inv", ["rat"]]]}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["mod", "theorem", "sqrt_div", ["nnreal"]], ["mod", "theorem", "sqrt_inv", ["nnreal"]]]}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/fraction_ring.lean", "newPath": "src/ring_theory/localization/fraction_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/num_denom.lean", "newPath": "src/ring_theory/localization/num_denom.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["del", "theorem", "map_inv", ["valuation"]], ["del", "theorem", "map_units_inv", ["valuation"]], ["del", "theorem", "map_zpow", ["valuation"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_ring.lean", "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}]}, {"timestamp": 1660605097, "sha": "1e6b748c", "message": "chore(combinatorics/*): Fix lint (#16031)\nFix the linting errors coming from `fintype_finite`, `to_additive_doc` and `doc_blame`. Pull out a `[projective_plane P L]` assumption to a `variables` declaration in `combinatorics.configuration`.", "changes": [{"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": []}, {"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["mod", "theorem", "card_lines", ["configuration", "projective_plane"]], ["mod", "theorem", "card_points", ["configuration", "projective_plane"]], ["mod", "theorem", "card_points_eq_card_lines", ["configuration", "projective_plane"]], ["mod", "theorem", "order", ["configuration", "projective_plane", "dual"]], ["mod", "theorem", "line_count_eq", ["configuration", "projective_plane"]], ["mod", "theorem", "line_count_eq_line_count", ["configuration", "projective_plane"]], ["mod", "theorem", "line_count_eq_point_count", ["configuration", "projective_plane"]], ["mod", "theorem", "one_lt_order", ["configuration", "projective_plane"]], ["mod", "theorem", "point_count_eq", ["configuration", "projective_plane"]], ["mod", "theorem", "point_count_eq_point_count", ["configuration", "projective_plane"]], ["mod", "theorem", "two_lt_line_count", ["configuration", "projective_plane"]], ["mod", "theorem", "two_lt_point_count", ["configuration", "projective_plane"]]]}, {"oldPath": "src/combinatorics/hales_jewett.lean", "newPath": "src/combinatorics/hales_jewett.lean", "changes": [["mod", "theorem", "exists_mono_homothetic_copy", ["combinatorics"]], ["mod", "theorem", "exists_mono_in_high_dimension", ["combinatorics", "line"]]]}, {"oldPath": "src/combinatorics/hall/finite.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": []}, {"oldPath": "src/combinatorics/hindman.lean", "newPath": "src/combinatorics/hindman.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/coloring.lean", "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": [["mod", "theorem", "clique_free_of_chromatic_number_lt", ["simple_graph"]], ["mod", "theorem", "colorable_chromatic_number_of_fintype", ["simple_graph"]], ["add", "theorem", "color_classes_finite", ["simple_graph", "coloring"]], ["del", "theorem", "color_classes_finite_of_fintype", ["simple_graph", "coloring"]], ["mod", "theorem", "card_le_chromatic_number", ["simple_graph", "is_clique"]], ["mod", "theorem", "is_empty_of_chromatic_number_eq_zero", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/partition.lean", "newPath": "src/combinatorics/simple_graph/partition.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["add", "theorem", "finite_classes_ker", ["setoid"]], ["del", "theorem", "nonempty_fintype_classes_ker", ["setoid"]]]}]}, {"timestamp": 1660605076, "sha": "1ec48762", "message": "chore(topology/*): Fix lint (#16030)\nFix the linting errors coming from `fintype_finite`, `to_additive_doc` and `doc_blame`.", "changes": [{"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "eq_pure_of_finite", ["ultrafilter"]], ["del", "theorem", "eq_pure_of_fintype", ["ultrafilter"]]]}, {"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/constructions.lean", "newPath": "src/topology/algebra/constructions.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": []}, {"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["mod", "theorem", "exists_forall_le_of_has_compact_mul_support", ["continuous"]]]}, {"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": [["add", "theorem", "exists_locally_constant_finite_aux", ["Profinite"]], ["add", "theorem", "exists_locally_constant_finite_nonempty", ["Profinite"]], ["del", "theorem", "exists_locally_constant_fintype_aux", ["Profinite"]], ["del", "theorem", "exists_locally_constant_fintype_nonempty", ["Profinite"]]]}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "pi_generate_from_eq_finite", []], ["del", "theorem", "pi_generate_from_eq_fintype", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "discrete_of_t1_of_finite", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "def", "extend", ["Cauchy"]]]}]}, {"timestamp": 1660605075, "sha": "8a9a16da", "message": "feat(combinatorics/young_diagram): add Young diagrams (#15822)\nAdd basic definition and initial API for Young diagrams.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/young_diagram.lean", "changes": [["add", "theorem", "cells_bot", ["young_diagram"]], ["add", "theorem", "cells_inf", ["young_diagram"]], ["add", "theorem", "cells_ssubset_iff", ["young_diagram"]], ["add", "theorem", "cells_subset_iff", ["young_diagram"]], ["add", "theorem", "cells_sup", ["young_diagram"]], ["add", "theorem", "coe_bot", ["young_diagram"]], ["add", "theorem", "coe_inf", ["young_diagram"]], ["add", "theorem", "coe_sup", ["young_diagram"]], ["add", "theorem", "mem_cells", ["young_diagram"]], ["add", "theorem", "mem_inf", ["young_diagram"]], ["add", "theorem", "mem_sup", ["young_diagram"]], ["add", "theorem", "not_mem_bot", ["young_diagram"]], ["add", "theorem", "up_left_mem", ["young_diagram"]], ["add", "structure", "young_diagram", []]]}]}, {"timestamp": 1660605074, "sha": "091ccfb2", "message": "feat(order/bounded_order): with_top.of_dual (#15727)\n`with_top.to_dual : with_top α ≃ with_bot αᵒᵈ`\nAlso define\n* `with_top.of_dual`\n* `with_bot.to_dual`\n* `with_bot.of_dual`\n \nAPI on the application of these added,\ntheir relation to `le` and `lt`,\nand how they interact with `with_{bot,top}.map`\n \nSome `with_top` proofs that broke through the `option` or `order_dual` API\nhave been rephrased to carry over the `with_bot` proofs across these functions.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "le_of_dual_iff", ["with_bot"]], ["add", "theorem", "le_to_dual_iff", ["with_bot"]], ["add", "theorem", "lt_of_dual_iff", ["with_bot"]], ["add", "theorem", "lt_to_dual_iff", ["with_bot"]], ["add", "theorem", "map_of_dual", ["with_bot"]], ["add", "theorem", "map_to_dual", ["with_bot"]], ["add", "theorem", "of_dual_apply_bot", ["with_bot"]], ["add", "theorem", "of_dual_apply_coe", ["with_bot"]], ["add", "theorem", "of_dual_le_iff", ["with_bot"]], ["add", "theorem", "of_dual_le_of_dual_iff", ["with_bot"]], ["add", "theorem", "of_dual_lt_iff", ["with_bot"]], ["add", "theorem", "of_dual_lt_of_dual_iff", ["with_bot"]], ["add", "theorem", "of_dual_map", ["with_bot"]], ["add", "theorem", "of_dual_symm_apply", ["with_bot"]], ["add", "theorem", "to_dual_apply_bot", ["with_bot"]], ["add", "theorem", "to_dual_apply_coe", ["with_bot"]], ["add", "theorem", "to_dual_le_iff", ["with_bot"]], ["add", "theorem", "to_dual_le_to_dual_iff", ["with_bot"]], ["add", "theorem", "to_dual_lt_iff", ["with_bot"]], ["add", "theorem", "to_dual_lt_to_dual_iff", ["with_bot"]], ["add", "theorem", "to_dual_map", ["with_bot"]], ["add", "theorem", "to_dual_symm_apply", ["with_bot"]], ["mod", "theorem", "coe_le_coe", ["with_top"]], ["mod", "theorem", "coe_le_iff", ["with_top"]], ["mod", "theorem", "coe_lt_coe", ["with_top"]], ["mod", "theorem", "coe_lt_iff", ["with_top"]], ["mod", "theorem", "coe_lt_top", ["with_top"]], ["mod", "theorem", "le_coe_iff", ["with_top"]], ["add", "theorem", "le_of_dual_iff", ["with_top"]], ["add", "theorem", "le_to_dual_iff", ["with_top"]], ["mod", "theorem", "lt_iff_exists_coe", ["with_top"]], ["add", "theorem", "lt_of_dual_iff", ["with_top"]], ["add", "theorem", "lt_to_dual_iff", ["with_top"]], ["add", "theorem", "map_of_dual", ["with_top"]], ["add", "theorem", "map_to_dual", ["with_top"]], ["add", "theorem", "of_dual_apply_coe", ["with_top"]], ["add", "theorem", "of_dual_apply_top", ["with_top"]], ["add", "theorem", "of_dual_le_iff", ["with_top"]], ["add", "theorem", "of_dual_le_of_dual_iff", ["with_top"]], ["add", "theorem", "of_dual_lt_iff", ["with_top"]], ["add", "theorem", "of_dual_lt_of_dual_iff", ["with_top"]], ["add", "theorem", "of_dual_map", ["with_top"]], ["add", "theorem", "of_dual_symm_apply", ["with_top"]], ["mod", "theorem", "some_le_some", ["with_top"]], ["mod", "theorem", "some_lt_none", ["with_top"]], ["mod", "theorem", "some_lt_some", ["with_top"]], ["add", "theorem", "to_dual_apply_coe", ["with_top"]], ["add", "theorem", "to_dual_apply_top", ["with_top"]], ["add", "theorem", "to_dual_le_iff", ["with_top"]], ["add", "theorem", "to_dual_le_to_dual_iff", ["with_top"]], ["add", "theorem", "to_dual_lt_iff", ["with_top"]], ["add", "theorem", "to_dual_lt_to_dual_iff", ["with_top"]], ["add", "theorem", "to_dual_map", ["with_top"]], ["add", "theorem", "to_dual_symm_apply", ["with_top"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "coe_to_dual_top_equiv_eq", ["with_bot"]], ["del", "theorem", "to_dual_top_coe", ["with_bot"]], ["add", "theorem", "to_dual_top_equiv_bot", ["with_bot"]], ["add", "theorem", "to_dual_top_equiv_coe", ["with_bot"]], ["add", "theorem", "to_dual_top_equiv_symm_bot", ["with_bot"]], ["add", "theorem", "to_dual_top_equiv_symm_coe", ["with_bot"]], ["del", "theorem", "to_dual_top_symm_coe", ["with_bot"]], ["add", "theorem", "coe_to_dual_bot_equiv_eq", ["with_top"]], ["del", "theorem", "to_dual_bot_coe", ["with_top"]], ["add", "theorem", "to_dual_bot_equiv_coe", ["with_top"]], ["add", "theorem", "to_dual_bot_equiv_symm_coe", ["with_top"]], ["add", "theorem", "to_dual_bot_equiv_symm_top", ["with_top"]], ["add", "theorem", "to_dual_bot_equiv_top", ["with_top"]], ["del", "theorem", "to_dual_bot_symm_coe", ["with_top"]]]}]}, {"timestamp": 1660605072, "sha": "75edc28a", "message": "feat(catgory_theory/sites): Image sheaf (#15282)", "changes": [{"oldPath": "src/category_theory/sites/subsheaf.lean", "newPath": "src/category_theory/sites/subsheaf.lean", "changes": [["add", "def", "image_factorization", ["category_theory", "grothendieck_topology"]], ["add", "def", "image_mono_factorization", ["category_theory", "grothendieck_topology"]], ["add", "def", "image_presheaf", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "image_presheaf_comp_le", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "image_presheaf_id", ["category_theory", "grothendieck_topology"]], ["add", "def", "image_sheaf", ["category_theory", "grothendieck_topology"]], ["add", "def", "image_sheaf_ι", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "hom_of_le_ι", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "lift", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "lift_ι", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "nat_trans_naturality", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "sheafify_le", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "to_sheafify_lift_unique", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "to_image_presheaf", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_image_presheaf_ι", ["category_theory", "grothendieck_topology"]], ["add", "def", "to_image_sheaf", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_image_sheaf_ι", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "top_subpresheaf_obj", ["category_theory", "grothendieck_topology"]]]}]}, {"timestamp": 1660605071, "sha": "445154a5", "message": "feat(group_theory/divisible): definition of divisible group (#15030)\nThis PR defines divisible group and proves that the set of rationals is divisible and product of divisible group is divisible. Future PR will be opened to prove that divisibility implies injectivity and hence category of abelian group has enough injective and an adjoint functor will transfer enough invectiveness in Ab to R-Mod.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/divisible.lean", "changes": [["add", "theorem", "smul_top_eq_top_of_divisible_by_int", ["add_comm_group"]], ["add", "def", "rootable_by_int_of_rootable_by_nat", ["group"]], ["add", "def", "rootable_by_nat_of_rootable_by_int", ["group"]], ["add", "theorem", "pow_left_surj_of_rootable_by", []]]}]}, {"timestamp": 1660605070, "sha": "8cd4f196", "message": "refactor(data/set/basic): Adds `inter_nonempty` to match `union_nonempty`. (#14854)\nAlso changes existing `inter_nonempty` lemmas to match.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_nonempty", ["set"]], ["add", "theorem", "inter_nonempty_iff_exists_left", ["set"]], ["add", "theorem", "inter_nonempty_iff_exists_right", ["set"]], ["del", "theorem", "nonempty_inter_iff_exists_left", ["set"]], ["del", "theorem", "nonempty_inter_iff_exists_right", ["set"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1660605069, "sha": "9f5d911e", "message": "feat(category_theory/preadditive): inclusion functor from left exact functors to additive functors (#12339)", "changes": [{"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["add", "def", "of_exact", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "of_exact_obj_fst", ["category_theory", "AdditiveFunctor"]], ["add", "def", "of_left_exact", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "of_left_exact_obj_fst", ["category_theory", "AdditiveFunctor"]], ["add", "def", "of_right_exact", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "of_right_exact_obj_fst", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "of_exact_map", ["category_theory", "Additive_Functor"]], ["add", "theorem", "of_left_exact_map", ["category_theory", "Additive_Functor"]], ["add", "theorem", "of_right_exact_map", ["category_theory", "Additive_Functor"]]]}]}, {"timestamp": 1660590089, "sha": "ed833060", "message": "feat(set/prod): decidable mem instance for diagonal (#15846)\nMembership in `diagonal A` is decidable if we have `decidable_eq A`", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": []}]}, {"timestamp": 1660567843, "sha": "3cf22a91", "message": "chore(probability/martingale/convergence): fix doc-string (#16062)", "changes": [{"oldPath": "src/probability/martingale/convergence.lean", "newPath": "src/probability/martingale/convergence.lean", "changes": []}]}, {"timestamp": 1660567841, "sha": "c85d2ff9", "message": "chore(category_theory/limits): generalize universes for limits in punit (#16050)", "changes": [{"oldPath": "src/category_theory/limits/unit.lean", "newPath": "src/category_theory/limits/unit.lean", "changes": []}]}, {"timestamp": 1660567840, "sha": "6b7e12a9", "message": "feat(category_theory): `discrete punit` is filtered and cofiltered (#16045)", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}]}, {"timestamp": 1660567839, "sha": "92b557b0", "message": "chore(data/polynomial/expand): update docstrings for move (#16044)\nRef: #13776.", "changes": [{"oldPath": "src/data/polynomial/expand.lean", "newPath": "src/data/polynomial/expand.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}]}, {"timestamp": 1660567838, "sha": "ecc542a5", "message": "chore(ring_theory/chain_of_divisors): make some variables that can be infered implicit (#16039)\nA few variables could be made implicit in some of the lemmas in `ring_theory/chain_of_divisors`. I also made a (very) minor stylistic change to a proof from one of my previous PRs in `ring_theory/adjoin_root`", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/chain_of_divisors.lean", "newPath": "src/ring_theory/chain_of_divisors.lean", "changes": [["del", "theorem", "multiplicity_eq_multiplicity_factor_dvd_iso_of_mem_normalized_factor", []], ["add", "theorem", "multiplicity_factor_dvd_iso_eq_multiplicity_of_mem_normalized_factor", []]]}]}, {"timestamp": 1660567837, "sha": "ff996689", "message": "feat(data/*): `unique` instances for `dfinsupp` and `direct_sum` (#16017)\n+ Add `unique` instances when the codomain types are subsingletons and rename the original `unique` instances (which apply when the domain is empty) to `unique_of_is_empty`. These are in analogy to [pi.unique](https://leanprover-community.github.io/mathlib_docs/logic/unique.html#pi.unique) and [pi.unique_of_is_empty](https://leanprover-community.github.io/mathlib_docs/logic/unique.html#pi.unique_of_is_empty).\n+ Golf the `unique` instances for (d)finsupp using `fun_like.coe_injective.unique`. The names `unique_of_left` and `unique_of_right` remain unchanged in the finsupp case, because finsupp is special in that it consists of non-dependent functions, unlike dfinsupp or direct_sum.\n(There was a concern that adding `unique` instances would slow down `simp` (see #6025), but it has been fixed in [lean#665](https://github.com/leanprover-community/lean/pull/665).)", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}]}, {"timestamp": 1660567836, "sha": "c1b5d219", "message": "feat(*): bump to lean 3.46.0 (#15994)\nThe only relevant change is that `is_strict_total_order` had a redundant assumption removed, and is now exactly the same as `is_strict_total_order'`. This old assumption is proved in `order/rel_classes.lean`, which has to be added as an import to a file, leading to two non-terminal `simp`s breaking.\nOf course, the idea is to remove `is_strict_total_order'` in a follow-up PR.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/data/rbmap/default.lean", "newPath": "src/data/rbmap/default.lean", "changes": []}, {"oldPath": "src/data/rbtree/main.lean", "newPath": "src/data/rbtree/main.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}]}, {"timestamp": 1660558940, "sha": "674ff195", "message": "feat(order/conditionally_complete_lattice): add `with_top.supr_coe_eq_top` and `with_top.supr_coe_lt_top` (#15979)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "supr_coe_eq_top", ["with_top"]], ["add", "theorem", "supr_coe_lt_top", ["with_top"]]]}]}, {"timestamp": 1660554273, "sha": "8df20db4", "message": "feat(analysis/convex/topology): minimize import (#16052)\nImporting `analysis/normed_space/finite_dimension` was problematic for defining the strong operator topology because this needs quite a few facts about convexity but it has to be defined before `continuous_linear_map.has_op_norm`.", "changes": [{"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}]}, {"timestamp": 1660554272, "sha": "4a379da7", "message": "feat(analysis/normed_space/basic): change `homeomorph_unit_ball` to make it obviously smooth (#15980)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": [["add", "theorem", "cont_diff_homeomorph_unit_ball", []], ["add", "theorem", "cont_diff_on_homeomorph_unit_ball_symm", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "coe_homeomorph_unit_ball_apply_zero", []], ["mod", "def", "homeomorph_unit_ball", []]]}]}, {"timestamp": 1660466051, "sha": "63138639", "message": "chore(algebra/algebra/unitization): update `comm_semiring` instance for `unitization` (#16048)\nThe `comm_monoid` and `comm_semiring` instances for `unitization` had type class restrictions that were too strong because `non_unital_comm_semiring` didn't exist at the time `unitization` was created. This drops those restrictions.", "changes": [{"oldPath": "src/algebra/algebra/unitization.lean", "newPath": "src/algebra/algebra/unitization.lean", "changes": []}]}, {"timestamp": 1660443485, "sha": "3baad3bf", "message": "feat(model_theory/syntax): Swapping between constants and variables (#14018)\n`term.constants_vars_equiv` and `bounded_formula.constants_vars_equiv` send terms/formulas with constants to terms/formulas with extra variables and back.", "changes": [{"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": [["add", "theorem", "fun_map_sum_inl", ["first_order", "language", "Lhom"]], ["add", "theorem", "fun_map_sum_inr", ["first_order", "language", "Lhom"]], ["add", "theorem", "map_on_function", ["first_order", "language", "Lhom"]], ["add", "theorem", "map_on_relation", ["first_order", "language", "Lhom"]], ["mod", "def", "with_constants", ["first_order", "language"]], ["add", "theorem", "with_constants_fun_map_sum_inl", ["first_order", "language"]], ["add", "theorem", "with_constants_fun_map_sum_inr", ["first_order", "language"]], ["add", "theorem", "with_constants_rel_map_sum_inl", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/order.lean", "newPath": "src/model_theory/order.lean", "changes": []}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "realize_constants_vars_equiv", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_constants_to_vars", ["first_order", "language", "term"]], ["add", "theorem", "realize_constants_vars_equiv_left", ["first_order", "language", "term"]], ["add", "theorem", "realize_vars_to_constants", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["add", "def", "constants_vars_equiv", ["first_order", "language", "bounded_formula"]], ["add", "def", "constants_to_vars", ["first_order", "language", "term"]], ["add", "def", "constants_vars_equiv", ["first_order", "language", "term"]], ["add", "def", "constants_vars_equiv_left", ["first_order", "language", "term"]], ["add", "theorem", "constants_vars_equiv_left_apply", ["first_order", "language", "term"]], ["add", "theorem", "constants_vars_equiv_left_symm_apply", ["first_order", "language", "term"]], ["add", "def", "relabel_equiv", ["first_order", "language", "term"]], ["add", "def", "vars_to_constants", ["first_order", "language", "term"]]]}]}, {"timestamp": 1660418479, "sha": "8a032292", "message": "feat(category_theory/limits): cone F ≌ costructured_arrow (const J) F (#15796)\nThis will be used to show that `C` has limits of shape `J` if and only if `const J` has a right adjoint.", "changes": [{"oldPath": "src/category_theory/limits/cone_category.lean", "newPath": "src/category_theory/limits/cone_category.lean", "changes": [["add", "def", "equiv_structured_arrow", ["category_theory", "limits", "cocone"]], ["add", "def", "from_structured_arrow", ["category_theory", "limits", "cocone"]], ["add", "def", "to_structured_arrow", ["category_theory", "limits", "cocone"]], ["add", "def", "equiv_costructured_arrow", ["category_theory", "limits", "cone"]], ["add", "def", "from_costructured_arrow", ["category_theory", "limits", "cone"]], ["add", "def", "to_costructured_arrow", ["category_theory", "limits", "cone"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "eta", ["category_theory", "limits", "cocones"]], ["add", "def", "eta", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": [["add", "def", "eta", ["category_theory", "costructured_arrow"]], ["add", "def", "eta", ["category_theory", "structured_arrow"]]]}]}, {"timestamp": 1660412586, "sha": "31800d81", "message": "refactor(topology/constructions): review `quotient` API (#15986)\n* rename `continuous_quotient_lift` to `continuous.quotient_lift`;\n* rename `continuous_quotient_lift_on'` to `continuous.quotient_lift_on'`;\n* add `continuous.quotient_map'` and use it to golf some proofs.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "quotient_lift", ["continuous"]], ["add", "theorem", "quotient_lift_on'", ["continuous"]], ["add", "theorem", "quotient_map'", ["continuous"]], ["del", "theorem", "continuous_quotient_lift", []], ["del", "theorem", "continuous_quotient_lift_on'", []]]}]}, {"timestamp": 1660375814, "sha": "239d882c", "message": "refactor(category_theory/epi_mono): is_split_epi and split_epi (#16036)\nThis PR makes a distinction between the class `is_split_epi f` which is a `Prop` and `split_epi f` which contains the datum of a section of `f`.", "changes": [{"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": [["add", "theorem", "mem_ess_image_of_unit_is_split_mono", ["category_theory"]], ["del", "theorem", "mem_ess_image_of_unit_split_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["add", "theorem", "of_epi_section'", ["category_theory", "is_iso"]], ["mod", "theorem", "of_epi_section", ["category_theory", "is_iso"]], ["add", "theorem", "of_mono_retraction'", ["category_theory", "is_iso"]], ["mod", "theorem", "of_mono_retraction", ["category_theory", "is_iso"]], ["add", "theorem", "is_iso_of_epi_of_is_split_mono", ["category_theory"]], ["del", "theorem", "is_iso_of_epi_of_split_mono", ["category_theory"]], ["add", "theorem", "is_iso_of_mono_of_is_split_epi", ["category_theory"]], ["del", "theorem", "is_iso_of_mono_of_split_epi", ["category_theory"]], ["add", "theorem", "id", ["category_theory", "is_split_epi"]], ["add", "theorem", "mk'", ["category_theory", "is_split_epi"]], ["add", "theorem", "is_split_epi_of_epi", ["category_theory"]], ["add", "theorem", "id", ["category_theory", "is_split_mono"]], ["add", "theorem", "mk'", ["category_theory", "is_split_mono"]], ["add", "theorem", "is_split_mono_of_mono", ["category_theory"]], ["del", "def", "retraction", ["category_theory"]], ["del", "def", "section_", ["category_theory"]], ["add", "theorem", "epi", ["category_theory", "split_epi"]], ["del", "theorem", "id", ["category_theory", "split_epi"]], ["add", "def", "map", ["category_theory", "split_epi"]], ["add", "def", "split_mono", ["category_theory", "split_epi"]], ["add", "structure", "split_epi", ["category_theory"]], ["del", "def", "split_epi_of_epi", ["category_theory"]], ["del", "theorem", "id", ["category_theory", "split_mono"]], ["add", "def", "map", ["category_theory", "split_mono"]], ["add", "theorem", "mono", ["category_theory", "split_mono"]], ["add", "def", "split_epi", ["category_theory", "split_mono"]], ["add", "structure", "split_mono", ["category_theory"]], ["del", "def", "split_mono_of_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor/epi_mono.lean", "newPath": "src/category_theory/functor/epi_mono.lean", "changes": [["del", "def", "map_split_epi", ["category_theory", "functor"]], ["del", "def", "map_split_mono", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/weakly_initial.lean", "newPath": "src/category_theory/limits/constructions/weakly_initial.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "newPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "changes": [["del", "theorem", "retraction_biprod_comparison'", ["category_theory", "functor"]], ["del", "theorem", "retraction_biproduct_comparison'", ["category_theory", "functor"]], ["del", "theorem", "section_biprod_comparison", ["category_theory", "functor"]], ["del", "theorem", "section_biproduct_comparison", ["category_theory", "functor"]], ["add", "def", "split_epi_biprod_comparison", ["category_theory", "functor"]], ["add", "def", "split_epi_biproduct_comparison", ["category_theory", "functor"]], ["add", "def", "split_mono_biprod_comparison'", ["category_theory", "functor"]], ["add", "def", "split_mono_biproduct_comparison'", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "binary_bicone_of_is_split_epi_of_kernel", ["category_theory", "limits"]], ["add", "def", "binary_bicone_of_is_split_mono_of_cokernel", ["category_theory", "limits"]], ["del", "def", "binary_bicone_of_split_epi_of_kernel", ["category_theory", "limits"]], ["del", "def", "binary_bicone_of_split_mono_of_cokernel", ["category_theory", "limits"]], ["add", "def", "is_bilimit_binary_bicone_of_is_split_epi_of_kernel", ["category_theory", "limits"]], ["add", "def", "is_bilimit_binary_bicone_of_is_split_mono_of_cokernel", ["category_theory", "limits"]], ["del", "def", "is_bilimit_binary_bicone_of_split_epi_of_kernel", ["category_theory", "limits"]], ["del", "def", "is_bilimit_binary_bicone_of_split_mono_of_cokernel", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "cocone_of_is_split_epi", ["category_theory", "limits"]], ["add", "theorem", "cocone_of_is_split_epi_π", ["category_theory", "limits"]], ["del", "def", "cocone_of_split_epi", ["category_theory", "limits"]], ["del", "theorem", "cocone_of_split_epi_π", ["category_theory", "limits"]], ["add", "def", "cone_of_is_split_mono", ["category_theory", "limits"]], ["add", "theorem", "cone_of_is_split_mono_ι", ["category_theory", "limits"]], ["del", "def", "cone_of_split_mono", ["category_theory", "limits"]], ["del", "theorem", "cone_of_split_mono_ι", ["category_theory", "limits"]], ["add", "def", "is_split_epi_coequalizes", ["category_theory", "limits"]], ["add", "def", "is_split_mono_equalizes", ["category_theory", "limits"]], ["del", "def", "split_epi_coequalizes", ["category_theory", "limits"]], ["del", "def", "split_mono_equalizes", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "theorem", "is_split_epi_to", ["category_theory", "limits", "is_initial"]], ["del", "def", "split_epi_to", ["category_theory", "limits", "is_initial"]], ["add", "theorem", "is_split_mono_from", ["category_theory", "limits", "is_terminal"]], ["del", "def", "split_mono_from", ["category_theory", "limits", "is_terminal"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": [["add", "theorem", "iff_is_split_epi_eq_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "iff_is_split_mono_eq_zero", ["category_theory", "limits", "is_zero"]], ["del", "theorem", "iff_split_epi_eq_zero", ["category_theory", "limits", "is_zero"]], ["del", "theorem", "iff_split_mono_eq_zero", ["category_theory", "limits", "is_zero"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "def", "galois_insertion_of_is_split_epi", ["category_theory", "sieve"]], ["del", "def", "galois_insertion_of_split_epi", ["category_theory", "sieve"]], ["add", "theorem", "generate_of_contains_is_split_epi", ["category_theory", "sieve"]], ["del", "theorem", "generate_of_contains_split_epi", ["category_theory", "sieve"]], ["add", "theorem", "generate_of_singleton_is_split_epi", ["category_theory", "sieve"]], ["del", "theorem", "generate_of_singleton_split_epi", ["category_theory", "sieve"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}]}, {"timestamp": 1660360584, "sha": "b5b30b03", "message": "chore(scripts): update nolints.txt (#16037)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1660338973, "sha": "43e859a0", "message": "feat(probability/martingale/convergence): a.e. martingale convergence theorem (#15904)\nThis PR proves the a.e. martingale convergence while a later PR will show the L¹ version.\nI've also added a new `martingale` folder in the `probability` folder as there are a few files regarding martingales now.", "changes": [{"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "ae_bdd_liminf_at_top_of_snorm_bdd", ["measure_theory"]], ["add", "theorem", "ae_bdd_liminf_at_top_rpow_of_snorm_bdd", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/probability/martingale/convergence.lean", "changes": [["add", "theorem", "not_frequently_of_upcrossings_lt_top", ["measure_theory"]], ["add", "theorem", "ae_tendsto_limit_process", ["measure_theory", "submartingale"]], ["add", "theorem", "exists_ae_tendsto_of_bdd", ["measure_theory", "submartingale"]], ["add", "theorem", "exists_ae_trim_tendsto_of_bdd", ["measure_theory", "submartingale"]], ["add", "theorem", "mem_ℒp_limit_process", ["measure_theory", "submartingale"]], ["add", "theorem", "upcrossings_ae_lt_top'", ["measure_theory", "submartingale"]], ["add", "theorem", "upcrossings_ae_lt_top", ["measure_theory", "submartingale"]], ["add", "theorem", "tendsto_of_uncrossing_lt_top", ["measure_theory"]], ["add", "theorem", "upcrossings_eq_top_of_frequently_lt", ["measure_theory"]]]}, {"oldPath": "src/probability/upcrossing.lean", "newPath": "src/probability/martingale/upcrossing.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "def", "limit_process", ["measure_theory", "filtration"]], ["add", "theorem", "mem_ℒp_limit_process_of_snorm_bdd", ["measure_theory", "filtration"]], ["add", "theorem", "strongly_measurable_limit_process'", ["measure_theory", "filtration"]], ["add", "theorem", "strongly_measurable_limit_process", ["measure_theory", "filtration"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "exists_frequently_lt_of_liminf_ne_top'", ["ennreal"]], ["add", "theorem", "exists_frequently_lt_of_liminf_ne_top", ["ennreal"]], ["add", "theorem", "exists_upcrossings_of_not_bounded_under", ["ennreal"]]]}]}, {"timestamp": 1660336249, "sha": "e1443c9c", "message": "doc(ring_theory/valuation/valuation_subring): fix docstring (#16034)", "changes": [{"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": []}]}, {"timestamp": 1660326788, "sha": "0b8f638b", "message": "feat(category_theory/preadditive/injective): Adjoint functors preserves injective objects (#15935)\nFor a pair of adjoint functors, if the left adjoint preserves monomorphism, then the right adjoint preserves injective object", "changes": [{"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["add", "theorem", "injective_of_adjoint", ["category_theory", "injective"]]]}]}, {"timestamp": 1660323538, "sha": "58cef51f", "message": "feat(algebra/module/bimodule): basic definitions for subbimodules (#14465)", "changes": [{"oldPath": null, "newPath": "src/algebra/module/bimodule.lean", "changes": [["add", "def", "base_change", ["subbimodule"]], ["add", "def", "mk", ["subbimodule"]], ["add", "theorem", "smul_mem'", ["subbimodule"]], ["add", "theorem", "smul_mem", ["subbimodule"]], ["add", "def", "to_subbimodule_int", ["subbimodule"]], ["add", "def", "to_subbimodule_nat", ["subbimodule"]], ["add", "def", "to_submodule'", ["subbimodule"]], ["add", "def", "to_submodule", ["subbimodule"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "def", "module_aux", ["tensor_product", "algebra"]], ["add", "theorem", "module_aux_apply", ["tensor_product", "algebra"]], ["add", "theorem", "smul_def", ["tensor_product", "algebra"]]]}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1660314525, "sha": "26e3eea8", "message": "feat(group_theory/group_action/defs): `vadd_assoc_class` (#15844)\nAdditivize `is_scalar_tower` into a new class `vadd_assoc_class`.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "theorem", "is_scalar_tower", ["has_smul", "comp"]], ["mod", "theorem", "smul_assoc", []], ["mod", "theorem", "smul_one_mul", []], ["mod", "theorem", "smul_one_smul", []]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}]}, {"timestamp": 1660298290, "sha": "f1944b30", "message": "refactor(*): Extend `×ˢ` notation (#15717)\nDelete `has_set_prod` in favor of a direct notation declaration. Overload that notation with the `list`, `finset`, `multiset` versions. Use the new notation and remove type ascriptions to the existing uses where possible (because Lean gets more information from the notation now).", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "newPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["mod", "theorem", "coe_prod", ["subalgebra"]]]}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/density.lean", "newPath": "src/combinatorics/simple_graph/density.lean", "changes": [["mod", "def", "interedges", ["rel"]]]}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finset/functor.lean", "newPath": "src/data/finset/functor.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": []}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["mod", "theorem", "div_def", ["finset"]], ["mod", "theorem", "image_div_prod", ["finset"]], ["mod", "theorem", "image_mul_product", ["finset"]], ["mod", "theorem", "image_smul_product", ["finset"]], ["mod", "theorem", "mul_def", ["finset"]], ["mod", "theorem", "smul_def", ["finset"]]]}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": [["mod", "theorem", "card_product", ["finset"]], ["mod", "def", "diag", ["finset"]], ["mod", "theorem", "diag_union_off_diag", ["finset"]], ["mod", "theorem", "empty_product", ["finset"]], ["mod", "theorem", "mem_product", ["finset"]], ["mod", "theorem", "mk_mem_product", ["finset"]], ["mod", "theorem", "fst", ["finset", "nonempty"]], ["mod", "theorem", "product", ["finset", "nonempty"]], ["mod", "theorem", "snd", ["finset", "nonempty"]], ["mod", "theorem", "nonempty_product", ["finset"]], ["mod", "def", "off_diag", ["finset"]], ["mod", "theorem", "product_empty", ["finset"]], ["mod", "theorem", "product_eq_empty", ["finset"]], ["mod", "theorem", "product_sdiff_diag", ["finset"]], ["mod", "theorem", "product_sdiff_off_diag", ["finset"]], ["mod", "theorem", "product_subset_product", ["finset"]], ["mod", "theorem", "product_subset_product_left", ["finset"]], ["mod", "theorem", "product_subset_product_right", ["finset"]], ["mod", "theorem", "product_val", ["finset"]]]}, {"oldPath": "src/data/finset/sym.lean", "newPath": "src/data/finset/sym.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/multiset/bind.lean", "newPath": "src/data/multiset/bind.lean", "changes": [["mod", "theorem", "add_product", ["multiset"]], ["mod", "theorem", "card_product", ["multiset"]], ["mod", "theorem", "cons_product", ["multiset"]], ["mod", "theorem", "product_add", ["multiset"]], ["mod", "theorem", "product_singleton", ["multiset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["mod", "theorem", "fst", ["set", "nonempty"]], ["mod", "theorem", "prod", ["set", "nonempty"]], ["mod", "theorem", "snd", ["set", "nonempty"]], ["add", "def", "prod", ["set"]], ["mod", "theorem", "prod_eq_prod_iff_of_nonempty", ["set"]], ["mod", "theorem", "prod_nonempty_iff", ["set"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": []}, {"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "coe_prod", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "coe_prod", ["submonoid"]]]}, {"oldPath": "src/group_theory/subsemigroup/operations.lean", "newPath": "src/group_theory/subsemigroup/operations.lean", "changes": [["mod", "theorem", "coe_prod", ["subsemigroup"]]]}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["mod", "theorem", "prod_coe", ["submodule"]]]}, {"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": []}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral_transform.lean", "newPath": "src/measure_theory/integral/circle_integral_transform.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "measurable_set_prod_of_nonempty", []]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["mod", "theorem", "region_between_subset", []]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": []}, {"oldPath": "src/order/filter/prod.lean", "newPath": "src/order/filter/prod.lean", "changes": []}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": []}, {"oldPath": "src/order/partition/finpartition.lean", "newPath": "src/order/partition/finpartition.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["mod", "theorem", "coe_prod", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["mod", "theorem", "coe_prod", ["subsemiring"]]]}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": [["mod", "theorem", "witt_add_vars", ["witt_vector"]], ["mod", "theorem", "witt_mul_vars", ["witt_vector"]], ["mod", "theorem", "witt_neg_vars", ["witt_vector"]], ["mod", "theorem", "witt_sub_vars", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/mul_coeff.lean", "newPath": "src/ring_theory/witt_vector/mul_coeff.lean", "changes": [["mod", "theorem", "poly_of_interest_vars", ["witt_vector"]], ["mod", "theorem", "remainder_vars", ["witt_vector"]], ["mod", "theorem", "witt_poly_prod_vars", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/floor.lean", "newPath": "src/topology/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": [["mod", "theorem", "coe_prod", ["topological_space", "compacts"]]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/prod.lean", "newPath": "src/topology/vector_bundle/prod.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/pullback.lean", "newPath": "src/topology/vector_bundle/pullback.lean", "changes": []}]}, {"timestamp": 1660291058, "sha": "24a55a05", "message": "feat(category_theory/abelian): injective coseparator from separator and enough injectives (#15495)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/abelian/generator.lean", "changes": [["add", "theorem", "has_injective_coseparator", ["category_theory", "abelian"]], ["add", "theorem", "has_projective_separator", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/subobject.lean", "newPath": "src/category_theory/abelian/subobject.lean", "changes": []}]}, {"timestamp": 1660278231, "sha": "fc739bf5", "message": "feat(category_theory/localization): extension of natural transformations (#15747)", "changes": [{"oldPath": "src/category_theory/localization/construction.lean", "newPath": "src/category_theory/localization/construction.lean", "changes": [["add", "def", "Winv", ["category_theory", "localization", "construction"]], ["add", "theorem", "morphism_property_is_top'", ["category_theory", "localization", "construction"]], ["add", "theorem", "morphism_property_is_top", ["category_theory", "localization", "construction"]], ["add", "def", "app", ["category_theory", "localization", "construction", "nat_trans_extension"]], ["add", "theorem", "app_eq", ["category_theory", "localization", "construction", "nat_trans_extension"]], ["add", "def", "nat_trans_extension", ["category_theory", "localization", "construction"]], ["add", "theorem", "nat_trans_extension_hcomp", ["category_theory", "localization", "construction"]], ["add", "def", "obj_equiv", ["category_theory", "localization", "construction"]]]}, {"oldPath": "src/category_theory/morphism_property.lean", "newPath": "src/category_theory/morphism_property.lean", "changes": [["add", "theorem", "is_stable_under_composition", ["category_theory", "morphism_property", "naturality_property"]], ["add", "theorem", "is_stable_under_inverse", ["category_theory", "morphism_property", "naturality_property"]], ["add", "def", "naturality_property", ["category_theory", "morphism_property"]], ["add", "def", "stable_under_inverse", ["category_theory", "morphism_property"]]]}]}, {"timestamp": 1660275589, "sha": "bd980416", "message": "chore(scripts): update nolints.txt (#16020)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1660259441, "sha": "58d97787", "message": "chore(set_theory/ordinal/arithmetic): clean up `is_normal.sup` and related (#15162)\nWe golf various theorems and tweak their arguments.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "is_limit", ["ordinal", "is_normal"]], ["mod", "theorem", "le_iff_eq", ["ordinal", "is_normal"]], ["mod", "theorem", "le_set'", ["ordinal", "is_normal"]], ["mod", "theorem", "le_set", ["ordinal", "is_normal"]], ["mod", "theorem", "refl", ["ordinal", "is_normal"]], ["mod", "theorem", "sup", ["ordinal", "is_normal"]], ["mod", "theorem", "trans", ["ordinal", "is_normal"]]]}, {"oldPath": "src/set_theory/ordinal/topology.lean", "newPath": "src/set_theory/ordinal/topology.lean", "changes": []}]}, {"timestamp": 1660255708, "sha": "8cfa8363", "message": "feat(analysis/inner_product_space/l2_space): if `K` is a complete submodule then `E` is the Hilbert sum of `K` and `Kᗮ` (#15792)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "orthogonal_family_self", ["submodule"]]]}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": [["add", "theorem", "is_hilbert_sum_orthogonal", ["submodule"]]]}]}, {"timestamp": 1660252505, "sha": "a9f99604", "message": "feat(geometry/manifold/complex): holomorphic functions are locally constant (#16015)\nProve that a holomorphic function on a compact complex manifold is locally constant. This is nearly a trivial consequence of \n#15667 and #15965; the only new input is that a charted space modelled on a locally connected space is locally connected.", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "theorem", "locally_connected_space", ["charted_space"]]]}, {"oldPath": "src/geometry/manifold/complex.lean", "newPath": "src/geometry/manifold/complex.lean", "changes": []}]}, {"timestamp": 1660252504, "sha": "de4a9ed1", "message": "feat(ring_theory/roots_of_unity): generalisation linter (#16014)\nThis was really a huge generalisation of many results, and in fact now no results in this file depend on things being fields (just char-zero integral domains, such as ℤ!)\nAlso a thanks to @YaelDillies for the division_monoid refactor, which united many similar-looking results here. This will be very helpful on `flt_regular`!", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["del", "theorem", "inv'", ["is_primitive_root"]], ["del", "theorem", "inv_iff'", ["is_primitive_root"]], ["mod", "theorem", "map_iff_of_injective", ["is_primitive_root"]], ["mod", "theorem", "map_of_injective", ["is_primitive_root"]], ["mod", "theorem", "of_map_of_injective", ["is_primitive_root"]], ["del", "theorem", "zpow_eq_one_iff_dvd₀", ["is_primitive_root"]], ["del", "theorem", "zpow_eq_one₀", ["is_primitive_root"]], ["del", "theorem", "zpow_of_gcd_eq_one₀", ["is_primitive_root"]]]}]}, {"timestamp": 1660243385, "sha": "76fd4b2d", "message": "feat(number_theory/cyclotomic/gal): generalise a little (#16012)\nFound using the generalisation linter.", "changes": [{"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}]}, {"timestamp": 1660243383, "sha": "c590a232", "message": "chore(number_theory/wilson): trivial strengthening (#16008)", "changes": [{"oldPath": "src/number_theory/wilson.lean", "newPath": "src/number_theory/wilson.lean", "changes": [["mod", "theorem", "prime_iff_fac_equiv_neg_one", ["nat"]]]}]}, {"timestamp": 1660243382, "sha": "acae0c33", "message": "chore(data/polynomial/derivative): use 'nat_cast' rather than 'cast_nat' for consistency (#16005)", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["del", "theorem", "derivative_cast_nat", ["polynomial"]], ["add", "theorem", "derivative_nat_cast", ["polynomial"]], ["del", "theorem", "iterate_derivative_cast_nat_mul", ["polynomial"]], ["add", "theorem", "iterate_derivative_nat_cast_mul", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}]}, {"timestamp": 1660243381, "sha": "fc32854b", "message": "feat(algebra/order/sub): add `canonically_ordered_add_monoid.to_add_cancel_comm_monoid` (#15955)\nWe don't have a typeclass for cancellative ordered additive monoids (such as `nat` or finsupps with nat as their codomain).\nThis definition is enough to create the instance mid-proof if needed, so is better than nothing.\nWe already have similar definitions such as `no_zero_divisors.to_cancel_comm_monoid` for rings.", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "def", "to_add_cancel_comm_monoid", ["canonically_ordered_add_monoid"]]]}]}, {"timestamp": 1660243380, "sha": "eb5be8a0", "message": "feat(data/fin/basic): coe_sub_iff_{le,lt} (#15930)\nAlso clean up the `order_dual` definition and proofs.\nAdd\n```\nnat.mod_eq_iff_lt\n@[simp] nat.mod_succ_eq_iff_lt\n```", "changes": [{"oldPath": "archive/miu_language/decision_nec.lean", "newPath": "archive/miu_language/decision_nec.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "coe_sub_iff_le", ["fin"]], ["add", "theorem", "coe_sub_iff_lt", ["fin"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "mod_eq_iff_lt", ["nat"]], ["add", "theorem", "mod_succ_eq_iff_lt", ["nat"]]]}]}, {"timestamp": 1660243378, "sha": "7dff8ed7", "message": "fix(algebra/order/field_defs): move definitions to a separate file (#15783)\nConsidering the \"saving olean\" bug, this will provide a stopgap to at least make compilation times be smaller.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/order/field_defs.lean", "changes": []}]}, {"timestamp": 1660243377, "sha": "802513cb", "message": "feat(ring_theory/adjoin_root): a bit of missing API for maps between certain quotients of `adjoin_root f` (#15757)\nA few lemmas needed for #15000.", "changes": [{"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": [["add", "theorem", "symm_trans_apply", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "quot_quot_equiv_comm_mk", ["adjoin_root", "polynomial"]], ["del", "theorem", "quot_quot_equiv_comm_mk_mk", ["adjoin_root", "polynomial"]], ["add", "theorem", "quot_quot_equiv_comm_symm_mk_mk", ["adjoin_root", "polynomial"]], ["add", "def", "quot_adjoin_root_equiv_quot_polynomial_quot", ["adjoin_root"]], ["add", "theorem", "quot_adjoin_root_equiv_quot_polynomial_quot_symm_mk_mk", ["adjoin_root"]], ["add", "theorem", "quot_map_C_map_span_mk_equiv_quot_map_C_quot_map_span_mk_symm_quot_quot_mk", ["adjoin_root"]], ["del", "def", "quot_map_of_equiv", ["adjoin_root"]], ["add", "theorem", "quot_map_of_equiv_quot_map_C_map_span_mk_symm_mk", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": [["add", "theorem", "quot_equiv_of_eq_symm", ["ideal"]]]}]}, {"timestamp": 1660243375, "sha": "811da369", "message": "feat(representation_theory/group_cohomology_resolution): show k[G^(n + 1)] is free over k[G] (#15501)\nDefines an isomorphism $k[G^{n + 1}] \\cong k[G] \\otimes_k k[G^n].$ Also shows that given a $k$-algebra $R$ and a $k$-basis for a module $M,$ we get an $R$-basis of $R \\otimes_k M.$ Then, using that, we show $k[G^{n + 1}]$ is free.", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "theorem", "partial_prod_left_inv", ["fin"]], ["add", "theorem", "partial_prod_right_inv", ["fin"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "finsupp_unique_apply", ["finsupp", "linear_equiv"]], ["add", "theorem", "finsupp_unique_symm_apply", ["finsupp", "linear_equiv"]]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "theorem", "coe_prod_unique", ["equiv"]], ["add", "theorem", "coe_unique_prod", ["equiv"]], ["add", "theorem", "prod_unique_apply", ["equiv"]], ["add", "theorem", "prod_unique_symm_apply", ["equiv"]], ["add", "theorem", "unique_prod_apply", ["equiv"]], ["add", "theorem", "unique_prod_symm_apply", ["equiv"]]]}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["add", "theorem", "of_mul_action_self_smul_eq_mul", ["representation"]], ["add", "theorem", "smul_one_tprod_as_module", ["representation"]], ["add", "theorem", "smul_tprod_one_as_module", ["representation"]]]}, {"oldPath": "src/representation_theory/group_cohomology_resolution.lean", "newPath": "src/representation_theory/group_cohomology_resolution.lean", "changes": [["add", "def", "equiv_tensor", ["group_cohomology", "resolution"]], ["add", "theorem", "equiv_tensor_def", ["group_cohomology", "resolution"]], ["add", "theorem", "equiv_tensor_inv_def", ["group_cohomology", "resolution"]], ["add", "def", "of_mul_action_basis", ["group_cohomology", "resolution"]], ["add", "def", "of_mul_action_basis_aux", ["group_cohomology", "resolution"]], ["add", "theorem", "of_mul_action_free", ["group_cohomology", "resolution"]], ["add", "theorem", "to_tensor_aux_left_inv", ["group_cohomology", "resolution"]], ["add", "theorem", "to_tensor_aux_right_inv", ["group_cohomology", "resolution"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "theorem", "basis_aux_map_smul", ["algebra", "tensor_product"]], ["add", "theorem", "basis_aux_tmul", ["algebra", "tensor_product"]], ["add", "theorem", "basis_repr_symm_apply", ["algebra", "tensor_product"]], ["add", "theorem", "basis_repr_tmul", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1660243374, "sha": "557f5e5d", "message": "feat(algebra/add_monoid_algebra/degree): new file with lemmas about support.sup/inf (#15413)\nThis PR contains the initial lemmas that prove basic properties about `finset.support.sup/inf`, with a view towards defining `degree`s for `add_monoid_algebra`s.\nIt is split off from #15296.", "changes": [{"oldPath": null, "newPath": "src/algebra/monoid_algebra/degree.lean", "changes": [["add", "theorem", "le_inf_support_add", ["add_monoid_algebra"]], ["add", "theorem", "le_inf_support_finset_prod", ["add_monoid_algebra"]], ["add", "theorem", "le_inf_support_list_prod", ["add_monoid_algebra"]], ["add", "theorem", "le_inf_support_mul", ["add_monoid_algebra"]], ["add", "theorem", "le_inf_support_multiset_prod", ["add_monoid_algebra"]], ["add", "theorem", "le_inf_support_pow", ["add_monoid_algebra"]], ["add", "theorem", "sup_support_add_le", ["add_monoid_algebra"]], ["add", "theorem", "sup_support_finset_prod_le", ["add_monoid_algebra"]], ["add", "theorem", "sup_support_list_prod_le", ["add_monoid_algebra"]], ["add", "theorem", "sup_support_mul_le", ["add_monoid_algebra"]], ["add", "theorem", "sup_support_multiset_prod_le", ["add_monoid_algebra"]], ["add", "theorem", "sup_support_pow_le", ["add_monoid_algebra"]]]}]}, {"timestamp": 1660234086, "sha": "e2ba6de0", "message": "feat(linear_algebra/span, matrix, finite_dimensional): new lemmas (#16006)\n+ Introduce `submodule.supr_span` and deduce `submodule.supr_eq_span` from it.\n+ Use supr_span to prove that the range of `matrix.to_lin' M` is spanned by column vectors of `M`.\n+ Show the rank of a finite set in a vector space is at most the cardinality of the indexing type (`finrank_range_le_card`), so in order to show the set is linearly independent, it suffices to prove the reverse inequality (`linear_independent_iff_card_le_finrank_span`).\nSpinoff of [Zulip question](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/more.20linear.20algebra/near/292630550)", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_range_le_card", []], ["add", "theorem", "linear_independent_iff_card_le_finrank_span", []]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "range_to_lin'", ["matrix"]]]}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["mod", "theorem", "supr_eq_span", ["submodule"]], ["add", "theorem", "supr_span", ["submodule"]]]}]}, {"timestamp": 1660234085, "sha": "66b8fa75", "message": "feat(topology/algebra/uniform_group): drop commutativity assumption in `topological_group.to_uniform_space` (#16004)", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1660234084, "sha": "2fae5fd7", "message": "feat(algebra/char_p): use `finite` instead of `fintype` (#16002)\n* rename `char_ne_zero_of_fintype` to `char_ne_zero_of_finite`, use `[finite _]`;\n* rename `ring_char_ne_zero_of_fintype` to `ring_char_ne_zero_of_finite`, use `[finite _]`;\n* split `is_unit_iff_not_dvd_char_of_ring_char_ne_zero` from the proof of `is_unit_iff_not_dvd_char`;\n* add aliases `is_coprime.nat_coprime` and `nat.coprime.is_coprime`.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "char_ne_zero_of_finite", ["char_p"]], ["del", "theorem", "char_ne_zero_of_fintype", ["char_p"]], ["add", "theorem", "ring_char_ne_zero_of_finite", ["char_p"]], ["del", "theorem", "ring_char_ne_zero_of_fintype", ["char_p"]]]}, {"oldPath": "src/algebra/char_p/char_and_card.lean", "newPath": "src/algebra/char_p/char_and_card.lean", "changes": [["mod", "theorem", "is_unit_iff_not_dvd_char", []], ["add", "theorem", "is_unit_iff_not_dvd_char_of_ring_char_ne_zero", []]]}, {"oldPath": "src/ring_theory/coprime/lemmas.lean", "newPath": "src/ring_theory/coprime/lemmas.lean", "changes": []}]}, {"timestamp": 1660234082, "sha": "32a432cc", "message": "feat(topology/separation): add `t0_space.of_cover` (#15982)\nAlso use it in `algebraic_geometry.properties`.", "changes": [{"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "of_cover", ["t0_space"]], ["add", "theorem", "of_open_cover", ["t0_space"]]]}]}, {"timestamp": 1660234081, "sha": "41cf8de0", "message": "feat(ring_theory/algebraic): `alg_hom` from an algebraic extension to itself is bijective (#15873)\n+ Generalizes `alg_hom.bijective` and [alg_equiv_equiv_alg_hom](https://leanprover-community.github.io/mathlib_docs/linear_algebra/finite_dimensional.html#alg_equiv_equiv_alg_hom) and move them so that they can be derived from the generalized versions. Upgrade `alg_equiv_equiv_alg_hom` to a `mul_equiv` by introducing the monoid instance `alg_hom.End` on self-alg_homs.\n+ Show that algebraicity of an algebra is preserved under alg_equiv (`alg_equiv.is_algebraic_iff`).\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/304774-FLT-regular/topic/Project.20status/near/292112817)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "mul_apply", ["alg_hom"]], ["add", "theorem", "one_apply", ["alg_hom"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "root_set_maps_to", ["polynomial"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "bijective", ["alg_hom"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic", ["alg_equiv"]], ["add", "theorem", "is_algebraic_iff", ["alg_equiv"]], ["add", "theorem", "bijective", ["alg_hom"]], ["add", "def", "alg_equiv_equiv_alg_hom", ["algebra", "is_algebraic"]], ["add", "theorem", "alg_hom_bijective", ["algebra", "is_algebraic"]], ["add", "theorem", "is_algebraic_alg_hom_of_is_algebraic", []]]}]}, {"timestamp": 1660234080, "sha": "d8531745", "message": "feat(ring_theory/derivation): The kernel of the map `S ⊗[R] S →ₐ[R] S`. (#15856)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "def", "llcomp", ["derivation"]], ["add", "def", "tensor_product_to", ["derivation"]], ["add", "theorem", "tensor_product_to_mul", ["derivation"]], ["add", "theorem", "tensor_product_to_tmul", ["derivation"]], ["add", "def", "ideal", ["derivation_module"]], ["add", "theorem", "one_smul_sub_smul_one_mem_ideal", ["derivation_module"]], ["add", "theorem", "span_range_eq_ideal", ["derivation_module"]], ["add", "theorem", "submodule_span_range_eq_ideal", ["derivation_module"]]]}]}, {"timestamp": 1660234079, "sha": "87e9e26a", "message": "feat (data/multiset/powerset): add bind_powerset_len (#15824)\nWe prove the following result\n```lean\nlemma multiset.bind_powerset_len {α : Type*} (S : multiset α) :\n bind (multiset.range (S.card + 1)) (λ k, S.powerset_len k) = S.powerset\n```\nFrom flt-regular", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "sup_powerset_len", ["multiset"]]]}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_eq_map_powerset", ["multiset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "cons_sub_of_le", ["multiset"]]]}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": [["add", "theorem", "bind_powerset_len", ["multiset"]], ["add", "theorem", "disjoint_powerset_len", ["multiset"]]]}]}, {"timestamp": 1660234077, "sha": "796f2675", "message": "refactor(category_theory/lifting_properties): refactor lifting properties using comm_sq (#15765)", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["del", "theorem", "mk", ["category_theory", "arrow", "has_lift"]], ["del", "theorem", "fac_left", ["category_theory", "arrow", "lift"]], ["del", "theorem", "fac_left_of_from_mk", ["category_theory", "arrow", "lift"]], ["del", "theorem", "fac_right", ["category_theory", "arrow", "lift"]], ["del", "theorem", "fac_right_of_to_mk", ["category_theory", "arrow", "lift"]], ["del", "theorem", "lift_mk'_left", ["category_theory", "arrow"]], ["del", "theorem", "lift_mk'_right", ["category_theory", "arrow"]], ["del", "structure", "lift_struct", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/comm_sq.lean", "newPath": "src/category_theory/comm_sq.lean", "changes": [["add", "theorem", "fac_left", ["category_theory", "comm_sq"]], ["add", "theorem", "fac_right", ["category_theory", "comm_sq"]], ["add", "theorem", "iff", ["category_theory", "comm_sq", "has_lift"]], ["add", "theorem", "iff_op", ["category_theory", "comm_sq", "has_lift"]], ["add", "theorem", "iff_unop", ["category_theory", "comm_sq", "has_lift"]], ["add", "theorem", "mk'", ["category_theory", "comm_sq", "has_lift"]], ["add", "def", "lift", ["category_theory", "comm_sq"]], ["add", "def", "op", ["category_theory", "comm_sq", "lift_struct"]], ["add", "def", "op_equiv", ["category_theory", "comm_sq", "lift_struct"]], ["add", "def", "unop", ["category_theory", "comm_sq", "lift_struct"]], ["add", "def", "unop_equiv", ["category_theory", "comm_sq", "lift_struct"]], ["add", "structure", "lift_struct", ["category_theory", "comm_sq"]]]}, {"oldPath": "src/category_theory/lifting_properties.lean", "newPath": null, "changes": [["del", "theorem", "has_right_lifting_property_comp'", ["category_theory"]], ["del", "theorem", "has_right_lifting_property_comp", ["category_theory"]], ["del", "theorem", "id_has_right_lifting_property'", ["category_theory"]], ["del", "theorem", "id_has_right_lifting_property", ["category_theory"]], ["del", "theorem", "iso_has_right_lifting_property", ["category_theory"]], ["del", "theorem", "right_lifting_property_initial_iff", ["category_theory"]], ["del", "def", "X", ["category_theory", "right_lifting_subcat"]], ["del", "def", "right_lifting_subcat", ["category_theory"]], ["del", "def", "right_lifting_subcategory", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/lifting_properties/basic.lean", "changes": [["add", "theorem", "iff_op", ["category_theory", "has_lifting_property"]], ["add", "theorem", "iff_unop", ["category_theory", "has_lifting_property"]], ["add", "theorem", "op", ["category_theory", "has_lifting_property"]], ["add", "theorem", "unop", ["category_theory", "has_lifting_property"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": [["add", "theorem", "mk'", ["category_theory", "strong_epi"]], ["add", "theorem", "mk'", ["category_theory", "strong_mono"]]]}]}, {"timestamp": 1660234076, "sha": "70d5733d", "message": "feat(combinatorics/set_family/compression/down): Down-compression (#15246)\nDefine the down-compression of set families. Down-compressing `𝒜 : finset (finset α)` along `a : α` means removing `a` for the elements of `𝒜` that contain it for the sets whose image is not yet there.\nMove `finset.member_subfamily`/`finset.non_member_subfamily` to that new file and rename them to `finset.member_section`/`finset.non_member_section` to match the literature.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/set_family/compression/down.lean", "changes": [["add", "theorem", "card_compression", ["down"]], ["add", "def", "compression", ["down"]], ["add", "theorem", "compression_idem", ["down"]], ["add", "theorem", "erase_mem_compression", ["down"]], ["add", "theorem", "erase_mem_compression_of_mem_compression", ["down"]], ["add", "theorem", "mem_compression", ["down"]], ["add", "theorem", "mem_compression_of_insert_mem_compression", ["down"]], ["add", "theorem", "card_member_subfamily_add_card_non_member_subfamily", ["finset"]], ["add", "theorem", "mem_member_subfamily", ["finset"]], ["add", "theorem", "mem_non_member_subfamily", ["finset"]], ["add", "def", "member_subfamily", ["finset"]], ["add", "theorem", "member_subfamily_inter", ["finset"]], ["add", "theorem", "member_subfamily_member_subfamily", ["finset"]], ["add", "theorem", "member_subfamily_non_member_subfamily", ["finset"]], ["add", "theorem", "member_subfamily_union", ["finset"]], ["add", "theorem", "member_subfamily_union_non_member_subfamily", ["finset"]], ["add", "def", "non_member_subfamily", ["finset"]], ["add", "theorem", "non_member_subfamily_inter", ["finset"]], ["add", "theorem", "non_member_subfamily_member_subfamily", ["finset"]], ["add", "theorem", "non_member_subfamily_non_member_subfamily", ["finset"]], ["add", "theorem", "non_member_subfamily_union", ["finset"]]]}, {"oldPath": "src/combinatorics/set_family/harris_kleitman.lean", "newPath": "src/combinatorics/set_family/harris_kleitman.lean", "changes": [["del", "theorem", "card_member_subfamily_add_card_non_member_subfamily", ["finset"]], ["del", "theorem", "mem_member_subfamily", ["finset"]], ["del", "theorem", "mem_non_member_subfamily", ["finset"]], ["del", "def", "member_subfamily", ["finset"]], ["del", "theorem", "member_subfamily_inter", ["finset"]], ["del", "def", "non_member_subfamily", ["finset"]], ["del", "theorem", "non_member_subfamily_inter", ["finset"]]]}]}, {"timestamp": 1660225873, "sha": "8086825f", "message": "chore(order/conditionally_complete_lattice): `with_top.coe_infi` and `with_top.coe_supr` (#15975)\nThis adds `infi` and `supr` versions of the existing `Inf` and `Sup` lemmas, and adds some more general primed lemmas that work when much weaker assumptions are available on `α`.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "coe_Inf'", ["with_bot"]], ["add", "theorem", "coe_Sup'", ["with_bot"]], ["add", "theorem", "coe_infi", ["with_bot"]], ["add", "theorem", "coe_supr", ["with_bot"]], ["add", "theorem", "csupr_empty", ["with_bot"]], ["add", "theorem", "cinfi_empty", ["with_top"]], ["add", "theorem", "coe_Inf'", ["with_top"]], ["mod", "theorem", "coe_Inf", ["with_top"]], ["add", "theorem", "coe_Sup'", ["with_top"]], ["mod", "theorem", "coe_Sup", ["with_top"]], ["add", "theorem", "coe_infi", ["with_top"]], ["add", "theorem", "coe_supr", ["with_top"]]]}]}, {"timestamp": 1660216898, "sha": "a21a8bc6", "message": "chore(data/mv_polynomial/basic): spacing (#16001)\nWe remove some unnecessary spaces in the module docs, and space out many tightly packed instances.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1660216892, "sha": "50f092eb", "message": "feat(analysis/special_functions/trigonometric/angle): signs of angles (#15967)\nAdd a definition of `real.angle.sign` and some associated basic\nlemmas. This is intended for use in relating oriented and unoriented\nangles in Euclidean geometry (if the signs of two oriented angles\nbetween nonzero vectors are equal, then those angles are equal if and\nonly if the corresponding unoriented angles are equal, and lots of\nlemmas can be stated of the form \"these two angles have the same sign\"\nor \"these two angles have opposite signs\").", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "def", "sign", ["real", "angle"]], ["add", "theorem", "sign_add_pi", ["real", "angle"]], ["add", "theorem", "sign_antiperiodic", ["real", "angle"]], ["add", "theorem", "sign_coe_pi", ["real", "angle"]], ["add", "theorem", "sign_eq_zero_iff", ["real", "angle"]], ["add", "theorem", "sign_neg", ["real", "angle"]], ["add", "theorem", "sign_pi_add", ["real", "angle"]], ["add", "theorem", "sign_pi_sub", ["real", "angle"]], ["add", "theorem", "sign_sub_pi", ["real", "angle"]], ["add", "theorem", "sign_zero", ["real", "angle"]]]}, {"oldPath": "src/linear_algebra/quadratic_form/real.lean", "newPath": "src/linear_algebra/quadratic_form/real.lean", "changes": []}]}, {"timestamp": 1660216889, "sha": "bc40b44c", "message": "doc(tactic/doc_commands): fix doc comment (#15947)\nAs noted at https://github.com/leanprover-community/mathlib/pull/15913#discussion_r940698781 .", "changes": [{"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}]}, {"timestamp": 1660216885, "sha": "af8760cc", "message": "feat(archive/100-theorems-list): Königsberg bridges problem (#15279)", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/54_konigsberg.lean", "changes": [["add", "def", "adj", ["konigsberg"]], ["add", "def", "degree", ["konigsberg"]], ["add", "theorem", "degree_eq_degree", ["konigsberg"]], ["add", "def", "edges", ["konigsberg"]], ["add", "def", "graph", ["konigsberg"]], ["add", "theorem", "not_is_eulerian", ["konigsberg"]], ["add", "inductive", "verts", ["konigsberg"]]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1660208665, "sha": "bae872c3", "message": "feat(algebra/group_with_zero/power): generalize `zpow_eq_zero_iff` (#15997)\nAlso golf two proofs.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["mod", "theorem", "zpow_eq_zero_iff", []]]}]}, {"timestamp": 1660197541, "sha": "60a1dcf7", "message": "refactor(set_theory/ordinal/cantor_normal_form): simplify `CNF` definition (#15449)\nWe simplify the definition of `CNF` by removing the casing on `b = 0`.\nNote that the new definition is not equivalent to the old one: we now have `CNF 0 o = [(0, o)]` instead of `CNF 0 o = []`. This is a good thing though, since it means that `CNF_foldr` (arguably the defining characteristic of the CNF) is now unconditionally true.\nWe generalize previously existing theorems according to this new definition. Note that none of the theorems have had their hypotheses strengthened, but a few have been weakened.", "changes": [{"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": [["mod", "theorem", "CNF_foldr", ["ordinal"]], ["mod", "theorem", "CNF_fst_le", ["ordinal"]], ["mod", "theorem", "CNF_fst_le_log", ["ordinal"]], ["mod", "theorem", "CNF_lt_snd", ["ordinal"]], ["mod", "theorem", "CNF_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_of_le_one", ["ordinal"]], ["add", "theorem", "CNF_of_lt", ["ordinal"]], ["del", "theorem", "CNF_pairwise", ["ordinal"]], ["del", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_rec_pos", ["ordinal"]], ["mod", "theorem", "CNF_rec_zero", ["ordinal"]], ["mod", "theorem", "CNF_snd_lt", ["ordinal"]], ["mod", "theorem", "CNF_zero", ["ordinal"]], ["mod", "theorem", "one_CNF", ["ordinal"]], ["mod", "theorem", "zero_CNF", ["ordinal"]]]}]}, {"timestamp": 1660192099, "sha": "7af08859", "message": "feat(category_theory/epi_mono): preserves/reflects properties for epi/split_epi (#15857)\nThis PR shows that split epi/mono are preserved by any functor, and reflected by fully faithful functors. Moreover, `iff` lemmas are obtained for functors which both preserve and reflect epimorphisms (resp. monomorphisms).", "changes": [{"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/functor/epi_mono.lean", "newPath": "src/category_theory/functor/epi_mono.lean", "changes": [["add", "theorem", "epi_map_iff_epi", ["category_theory", "functor"]], ["add", "def", "map_split_epi", ["category_theory", "functor"]], ["add", "def", "map_split_mono", ["category_theory", "functor"]], ["add", "theorem", "mono_map_iff_mono", ["category_theory", "functor"]], ["add", "def", "split_epi_equiv", ["category_theory", "functor"]], ["add", "def", "split_mono_equiv", ["category_theory", "functor"]]]}]}, {"timestamp": 1660189438, "sha": "dd6b84e2", "message": "chore(scripts): update nolints.txt (#15998)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1660162541, "sha": "67821d26", "message": "feat(analysis/special_functions/trigonometric/chebyshev): `T_real_cos` and `U_real_cos` (#15798)\nWe prove `T_real_cos` and `U_real_cos` matching `T_complex_cos` and `U_complex_cos`. We also remove two redundant theorems.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "newPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "changes": [["mod", "theorem", "T_complex_cos", ["polynomial", "chebyshev"]], ["add", "theorem", "T_real_cos", ["polynomial", "chebyshev"]], ["mod", "theorem", "U_complex_cos", ["polynomial", "chebyshev"]], ["add", "theorem", "U_real_cos", ["polynomial", "chebyshev"]], ["add", "theorem", "aeval_T", ["polynomial", "chebyshev"]], ["add", "theorem", "aeval_U", ["polynomial", "chebyshev"]], ["add", "theorem", "algebra_map_eval_T", ["polynomial", "chebyshev"]], ["add", "theorem", "algebra_map_eval_U", ["polynomial", "chebyshev"]], ["add", "theorem", "complex_of_real_eval_T", ["polynomial", "chebyshev"]], ["add", "theorem", "complex_of_real_eval_U", ["polynomial", "chebyshev"]], ["del", "theorem", "cos_nat_mul", ["polynomial", "chebyshev"]], ["del", "theorem", "sin_nat_succ_mul", ["polynomial", "chebyshev"]]]}]}, {"timestamp": 1660162540, "sha": "619eaf82", "message": "feat(ring_theory/ideal): The module `I ⧸ I ^ 2`. (#15638)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/ideal/cotangent.lean", "changes": [["add", "def", "cotangent", ["ideal"]], ["add", "def", "cotangent_equiv_ideal", ["ideal"]], ["add", "theorem", "cotangent_equiv_ideal_apply", ["ideal"]], ["add", "theorem", "cotangent_equiv_ideal_symm_apply", ["ideal"]], ["add", "def", "cotangent_ideal", ["ideal"]], ["add", "theorem", "cotangent_subsingleton_iff", ["ideal"]], ["add", "def", "cotangent_to_quotient_square", ["ideal"]], ["add", "theorem", "map_to_cotangent_ker", ["ideal"]], ["add", "theorem", "mem_to_cotangent_ker", ["ideal"]], ["add", "def", "to_cotangent", ["ideal"]], ["add", "theorem", "to_cotangent_eq", ["ideal"]], ["add", "theorem", "to_cotangent_eq_zero", ["ideal"]], ["add", "theorem", "to_cotangent_range", ["ideal"]], ["add", "theorem", "to_cotangent_surjective", ["ideal"]], ["add", "theorem", "to_cotangent_to_quotient_square", ["ideal"]], ["add", "theorem", "to_quotient_square_comp_to_cotangent", ["ideal"]], ["add", "theorem", "to_quotient_square_range", ["ideal"]], ["add", "def", "cotangent_space", ["local_ring"]]]}]}, {"timestamp": 1660153288, "sha": "299b6127", "message": "docs(topology/*/weak_dual): Add docstring (#15944)\nThe lemma `coe_fn_continuous` is hard to read with the lambda and without the domain and codomain.", "changes": [{"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}]}, {"timestamp": 1660153287, "sha": "3424a593", "message": "chore(category_theory/limits/*): Unify names for limit constructions. (#15810)\nList of renames:\n`limits_from_equalizers_and_products` -> `has_limits_of_has_equalizers_and_products`\n`colimits_from_coequalizers_and_coproducts` -> `has_colimits_of_has_coequalizers_and_coproducts`\n`finite_limits_from_equalizers_and_finite_products` -> `has_finite_limits_of_has_equalizers_and_finite_products`\n`finite_colimits_from_coequalizers_and_finite_coproducts` -> `has_finite_colimits_of_has_coequalizers_and_finite_coproducts`\n`has_binary_products_of_terminal_and_pullbacks` -> `has_binary_products_of_has_terminal_and_pullbacks`\n`has_binary_coproducts_of_initial_and_pushouts` -> `has_binary_coproducts_of_has_initial_and_pushouts`\n`has_equalizers_of_pullbacks_and_binary_products` -> `has_equalizers_of_has_pullbacks_and_binary_products`\n`has_coequalizers_of_pushouts_and_binary_coproducts` -> `has_coequalizers_of_has_pushouts_and_binary_coproducts`\n`preserves_equalizers_of_pullbacks_and_binary_products` -> `preserves_equalizers_of_preserves_pullbacks_and_binary_products`\n`preserves_coequalizers_of_pushouts_and_binary_coproducts` -> `preserves_coequalizers_of_preserves_pushouts_and_binary_coproducts`\n`has_finite_coproducts_of_has_binary_and_terminal` -> `has_finite_coproducts_of_has_binary_and_initial`", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/opposite.lean", "newPath": "src/category_theory/abelian/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": [["add", "theorem", "has_binary_coproducts_of_has_initial_and_pushouts", []], ["del", "theorem", "has_binary_coproducts_of_initial_and_pushouts", []], ["add", "theorem", "has_binary_products_of_has_terminal_and_pullbacks", []], ["del", "theorem", "has_binary_products_of_terminal_and_pullbacks", []]]}, {"oldPath": "src/category_theory/limits/constructions/equalizers.lean", "newPath": "src/category_theory/limits/constructions/equalizers.lean", "changes": [["add", "def", "coequalizer_cocone", ["category_theory", "limits", "has_coequalizers_of_has_pushouts_and_binary_coproducts"]], ["add", "def", "coequalizer_cocone_is_colimit", ["category_theory", "limits", "has_coequalizers_of_has_pushouts_and_binary_coproducts"]], ["add", "def", "construct_coequalizer", ["category_theory", "limits", "has_coequalizers_of_has_pushouts_and_binary_coproducts"]], ["add", "def", "pushout_inl", ["category_theory", "limits", "has_coequalizers_of_has_pushouts_and_binary_coproducts"]], ["add", "theorem", "pushout_inl_eq_pushout_inr", ["category_theory", "limits", "has_coequalizers_of_has_pushouts_and_binary_coproducts"]], ["add", "theorem", "has_coequalizers_of_has_pushouts_and_binary_coproducts", ["category_theory", "limits"]], ["del", "def", "coequalizer_cocone", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["del", "def", "coequalizer_cocone_is_colimit", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["del", "def", "construct_coequalizer", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["del", "def", "pushout_inl", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["del", "theorem", "pushout_inl_eq_pushout_inr", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["del", "theorem", "has_coequalizers_of_pushouts_and_binary_coproducts", ["category_theory", "limits"]], ["add", "def", "construct_equalizer", ["category_theory", "limits", "has_equalizers_of_has_pullbacks_and_binary_products"]], ["add", "def", "equalizer_cone", ["category_theory", "limits", "has_equalizers_of_has_pullbacks_and_binary_products"]], ["add", "def", "equalizer_cone_is_limit", ["category_theory", "limits", "has_equalizers_of_has_pullbacks_and_binary_products"]], ["add", "def", "pullback_fst", ["category_theory", "limits", "has_equalizers_of_has_pullbacks_and_binary_products"]], ["add", "theorem", "pullback_fst_eq_pullback_snd", ["category_theory", "limits", "has_equalizers_of_has_pullbacks_and_binary_products"]], ["add", "theorem", "has_equalizers_of_has_pullbacks_and_binary_products", ["category_theory", "limits"]], ["del", "def", "construct_equalizer", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["del", "def", "equalizer_cone", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["del", "def", "equalizer_cone_is_limit", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["del", "def", "pullback_fst", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["del", "theorem", "pullback_fst_eq_pullback_snd", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["del", "theorem", "has_equalizers_of_pullbacks_and_binary_products", ["category_theory", "limits"]], ["add", "def", "preserves_coequalizers_of_preserves_pushouts_and_binary_coproducts", ["category_theory", "limits"]], ["del", "def", "preserves_coequalizers_of_pushouts_and_binary_coproducts", ["category_theory", "limits"]], ["add", "def", "preserves_equalizers_of_preserves_pullbacks_and_binary_products", ["category_theory", "limits"]], ["del", "def", "preserves_equalizers_of_pullbacks_and_binary_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": [["add", "theorem", "has_finite_coproducts_of_has_binary_and_initial", ["category_theory"]], ["del", "theorem", "has_finite_coproducts_of_has_binary_and_terminal", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": [["del", "theorem", "colimits_from_coequalizers_and_coproducts", ["category_theory", "limits"]], ["del", "theorem", "finite_colimits_from_coequalizers_and_finite_coproducts", ["category_theory", "limits"]], ["del", "theorem", "finite_limits_from_equalizers_and_finite_products", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_of_has_coequalizers_and_coproducts", ["category_theory", "limits"]], ["add", "theorem", "has_finite_colimits_of_has_coequalizers_and_finite_coproducts", ["category_theory", "limits"]], ["add", "theorem", "has_finite_limits_of_has_equalizers_and_finite_products", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_has_equalizers_and_products", ["category_theory", "limits"]], ["del", "theorem", "limits_from_equalizers_and_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/constructions/over/default.lean", "newPath": "src/category_theory/limits/constructions/over/default.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1660153286, "sha": "43894fff", "message": "feat(data/fintype/basic): infinite.exists_superset_card_eq (#15787)\nA stronger variant of `infinite.exists_subset_card_eq`", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "exists_superset_card_eq", ["infinite"]]]}]}, {"timestamp": 1660153284, "sha": "03d906cb", "message": "feat(field_theory/finite/basic): zmod.pow_totient is true for zero (#15771)", "changes": [{"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "pow_totient", ["zmod"]]]}]}, {"timestamp": 1660153283, "sha": "286d6750", "message": "feat(algebra/category/Module/change_of_rings): restriction of scalars (#15672)\nGiven a ring homomorphism $f : R\\to S$, there is a functor from $S$-module to $R$-module.\nIn #15564, it will proven that extension of scalars $\\dashv$ restriction of scalars", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Module/change_of_rings.lean", "changes": [["add", "def", "map'", ["category_theory", "Module", "restrict_scalars"]], ["add", "theorem", "map_apply", ["category_theory", "Module", "restrict_scalars"]], ["add", "def", "obj'", ["category_theory", "Module", "restrict_scalars"]], ["add", "theorem", "smul_def'", ["category_theory", "Module", "restrict_scalars"]], ["add", "theorem", "smul_def", ["category_theory", "Module", "restrict_scalars"]], ["add", "def", "restrict_scalars", ["category_theory", "Module"]]]}]}, {"timestamp": 1660143629, "sha": "45ccb85d", "message": "chore(topology/basic): update module docstring (#15976)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1660143628, "sha": "ac0996dd", "message": "chore(topology/algebra/uniform_mul_action): the action of a ring on itself is uniformly continuous (#15974)\nThis proof can be used to golf the misnamed `real.uniform_continuous_mul_const` which is now called `real.uniform_continuous_const_mul`.", "changes": [{"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_mul_action.lean", "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": [["add", "theorem", "has_uniform_continuous_const_smul_of_continuous_const_smul", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "uniform_continuous_const_mul", ["real"]], ["del", "theorem", "uniform_continuous_mul_const", ["real"]]]}]}, {"timestamp": 1660143627, "sha": "ce9af07f", "message": "feat(algebra/order/to_interval_mod): reducing to an interval modulo its length (#15966)\nPreviously I had use for the operation of reducing a real number to an\ninterval modulo the length of that interval, in proving results about\n`complex.arg`, and as it was only being used in one place, inlined\nexpressions in terms of `int.fract` and associated proofs where\nneeded.\nNow I'd like to make further use of that operation, so define actual\nfunctions to reduce to an interval (`Ico` or `Ioc`, in an\n`archimedean` `linear_ordered_add_comm_group`) and set up associated\nAPI for those definitions. In the case of a `linear_ordered_field`\nthat is a `floor_ring`, these definitions are proved equal to explicit\nexpressions in terms of `fract` and `floor`. Previous uses for\n`complex.arg` are updated to illustrate the use of the new API.", "changes": [{"oldPath": null, "newPath": "src/algebra/order/to_interval_mod.lean", "changes": [["add", "theorem", "add_to_Ico_div_zsmul_mem_Ico", []], ["add", "theorem", "add_to_Ioc_div_zsmul_mem_Ioc", []], ["add", "theorem", "eq_to_Ico_div_of_add_zsmul_mem_Ico", []], ["add", "theorem", "eq_to_Ioc_div_of_add_zsmul_mem_Ioc", []], ["add", "theorem", "left_le_to_Ico_mod", []], ["add", "theorem", "left_lt_to_Ioc_mod", []], ["add", "theorem", "self_add_to_Ico_div_zsmul", []], ["add", "theorem", "self_add_to_Ioc_div_zsmul", []], ["add", "theorem", "self_sub_to_Ico_mod", []], ["add", "theorem", "self_sub_to_Ioc_mod", []], ["add", "def", "to_Ico_div", []], ["add", "theorem", "to_Ico_div_add_left", []], ["add", "theorem", "to_Ico_div_add_right", []], ["add", "theorem", "to_Ico_div_add_zsmul", []], ["add", "theorem", "to_Ico_div_apply_left", []], ["add", "theorem", "to_Ico_div_apply_right", []], ["add", "theorem", "to_Ico_div_eq_neg_floor", []], ["add", "theorem", "to_Ico_div_sub", []], ["add", "theorem", "to_Ico_div_sub_zsmul", []], ["add", "theorem", "to_Ico_div_zero_one", []], ["add", "theorem", "to_Ico_div_zsmul_add", []], ["add", "theorem", "to_Ico_div_zsmul_add_self", []], ["add", "theorem", "to_Ico_div_zsmul_sub_to_Ico_mod", []], ["add", "def", "to_Ico_mod", []], ["add", "theorem", "to_Ico_mod_add_left", []], ["add", "theorem", "to_Ico_mod_add_right", []], ["add", "theorem", "to_Ico_mod_add_zsmul", []], ["add", "theorem", "to_Ico_mod_apply_left", []], ["add", "theorem", "to_Ico_mod_apply_right", []], ["add", "theorem", "to_Ico_mod_eq_add_fract_mul", []], ["add", "theorem", "to_Ico_mod_eq_iff", []], ["add", "theorem", "to_Ico_mod_eq_self", []], ["add", "theorem", "to_Ico_mod_eq_to_Ico_mod", []], ["add", "theorem", "to_Ico_mod_lt_right", []], ["add", "theorem", "to_Ico_mod_mem_Ico", []], ["add", "theorem", "to_Ico_mod_periodic", []], ["add", "theorem", "to_Ico_mod_sub", []], ["add", "theorem", "to_Ico_mod_sub_self", []], ["add", "theorem", "to_Ico_mod_sub_to_Ico_div_zsmul", []], ["add", "theorem", "to_Ico_mod_sub_zsmul", []], ["add", "theorem", "to_Ico_mod_to_Ico_mod", []], ["add", "theorem", "to_Ico_mod_to_Ioc_mod", []], ["add", "theorem", "to_Ico_mod_zero_one", []], ["add", "theorem", "to_Ico_mod_zsmul_add", []], ["add", "def", "to_Ioc_div", []], ["add", "theorem", "to_Ioc_div_add_left", []], ["add", "theorem", "to_Ioc_div_add_right", []], ["add", "theorem", "to_Ioc_div_add_zsmul", []], ["add", "theorem", "to_Ioc_div_apply_left", []], ["add", "theorem", "to_Ioc_div_apply_right", []], ["add", "theorem", "to_Ioc_div_eq_floor", []], ["add", "theorem", "to_Ioc_div_sub", []], ["add", "theorem", "to_Ioc_div_sub_zsmul", []], ["add", "theorem", "to_Ioc_div_zsmul_add", []], ["add", "theorem", "to_Ioc_div_zsmul_add_self", []], ["add", "theorem", "to_Ioc_div_zsmul_sub_to_Ioc_mod", []], ["add", "def", "to_Ioc_mod", []], ["add", "theorem", "to_Ioc_mod_add_left", []], ["add", "theorem", "to_Ioc_mod_add_right", []], ["add", "theorem", "to_Ioc_mod_add_zsmul", []], ["add", "theorem", "to_Ioc_mod_apply_left", []], ["add", "theorem", "to_Ioc_mod_apply_right", []], ["add", "theorem", "to_Ioc_mod_eq_iff", []], ["add", "theorem", "to_Ioc_mod_eq_self", []], ["add", "theorem", "to_Ioc_mod_eq_sub_fract_mul", []], ["add", "theorem", "to_Ioc_mod_eq_to_Ioc_mod", []], ["add", "theorem", "to_Ioc_mod_le_right", []], ["add", "theorem", "to_Ioc_mod_mem_Ioc", []], ["add", "theorem", "to_Ioc_mod_periodic", []], ["add", "theorem", "to_Ioc_mod_sub", []], ["add", "theorem", "to_Ioc_mod_sub_self", []], ["add", "theorem", "to_Ioc_mod_sub_to_Ioc_div_zsmul", []], ["add", "theorem", "to_Ioc_mod_sub_zsmul", []], ["add", "theorem", "to_Ioc_mod_to_Ico_mod", []], ["add", "theorem", "to_Ioc_mod_to_Ioc_mod", []], ["add", "theorem", "to_Ioc_mod_zsmul_add", []]]}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["del", "theorem", "arg_cos_add_sin_mul_I_eq_mul_fract", ["complex"]], ["add", "theorem", "arg_cos_add_sin_mul_I_eq_to_Ioc_mod", ["complex"]], ["del", "theorem", "arg_mul_cos_add_sin_mul_I_eq_mul_fract", ["complex"]], ["add", "theorem", "arg_mul_cos_add_sin_mul_I_eq_to_Ioc_mod", ["complex"]]]}]}, {"timestamp": 1660143626, "sha": "452984bb", "message": "feat(field_theory/intermediate_field): `minpoly K x = minpoly K (x : L)` (#15946)\nThis PR adds a lemma stating that `minpoly K x = minpoly K (x : L)` for `x : S` and `S : intermediate_field K L`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["del", "theorem", "algebraic_iff", ["intermediate_field"]], ["add", "theorem", "is_algebraic_iff", ["intermediate_field"]], ["add", "theorem", "is_integral_iff", ["intermediate_field"]], ["add", "theorem", "minpoly_eq", ["intermediate_field"]]]}]}, {"timestamp": 1660143624, "sha": "1e097351", "message": "feat(category_theory/sites/subsheaf): Subpresheaves of types. (#15827)", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/subsheaf.lean", "changes": [["add", "theorem", "eq_sheafify", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "eq_sheafify_iff", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "family_of_elements_compatible", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "family_of_elements_of_section", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "hom_of_le", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "is_sheaf_iff", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "le_sheafify", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "sheafify", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "sheafify_is_sheaf", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "sheafify_lift", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "sheafify_sheafify", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "sieve_of_section", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "to_presheaf", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "theorem", "to_sheafify_lift", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "def", "ι", ["category_theory", "grothendieck_topology", "subpresheaf"]], ["add", "structure", "subpresheaf", ["category_theory", "grothendieck_topology"]]]}]}, {"timestamp": 1660143623, "sha": "473da0e0", "message": "feat(data/polynomial/{ basic + div + monic + degree/definitions }): lemmas about monic and forall_eq (#15817)\nThis PR reorganizes a couple of lemmas about monic. The main breaking change is the removal of `subsingleton_of_monic_zero'` in favour of `monic_zero_iff_subsingleton`.\nI left in `monic_zero_iff_subsingleton'` an iff version of `subsingleton_of_monic_zero'`, but I think that this can probably be removed, thanks to `monic_zero_iff_subsingleton` and `forall_eq_iff_forall_eq`.\nAlso, if anyone wants to rename some/all subsingletons to forall_eq, I am happy to do the change!", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "forall_eq_iff_forall_eq", ["polynomial"]], ["add", "theorem", "subsingleton_iff_subsingleton", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["del", "theorem", "subsingleton_of_monic_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "monic_zero_iff_subsingleton'", ["polynomial"]], ["add", "theorem", "monic_zero_iff_subsingleton", ["polynomial"]], ["add", "theorem", "not_monic_zero_iff", ["polynomial"]]]}]}, {"timestamp": 1660143621, "sha": "7e33e4f1", "message": "feat(measure_theory/measure/measure_space): add lemma `measure_theory.measure.exists_mem_of_measure_ne_zero_of_ae` (#15812)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "exists_mem_of_measure_ne_zero_of_ae", ["measure_theory", "measure"]]]}]}, {"timestamp": 1660143620, "sha": "3ed70184", "message": "feat(ring_theory/localization/integral): Integral element over localization. (#15809)", "changes": [{"oldPath": "src/algebra/hom/ring.lean", "newPath": "src/algebra/hom/ring.lean", "changes": [["add", "theorem", "codomain_trivial", ["ring_hom"]]]}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": [["add", "theorem", "lifts_and_nat_degree_eq_and_monic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["del", "theorem", "tmul", ["is_integral"]]]}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": [["add", "theorem", "exists_multiple_integral_of_is_localization", ["is_integral"]], ["add", "theorem", "scale_roots_common_denom_mem_lifts", ["is_localization"]]]}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": [["del", "theorem", "map_scale_roots", ["polynomial"]], ["del", "theorem", "scale_roots_eval₂_mul", ["polynomial"]]]}, {"oldPath": "src/ring_theory/ring_hom/integral.lean", "newPath": null, "changes": [["del", "theorem", "is_integral_respects_iso", ["ring_hom"]], ["del", "theorem", "is_integral_stable_under_base_change", ["ring_hom"]], ["del", "theorem", "is_integral_stable_under_composition", ["ring_hom"]]]}]}, {"timestamp": 1660143618, "sha": "7a7f5ec9", "message": "feat(ring_theory/ring_hom/integral): Integral extensions are stable under base change. (#15806)", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "tmul", ["is_integral"]]]}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": [["add", "theorem", "map_scale_roots", ["polynomial"]], ["add", "theorem", "scale_roots_eval₂_mul", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ring_hom/integral.lean", "changes": [["add", "theorem", "is_integral_respects_iso", ["ring_hom"]], ["add", "theorem", "is_integral_stable_under_base_change", ["ring_hom"]], ["add", "theorem", "is_integral_stable_under_composition", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "theorem", "include_left_comp_algebra_map", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1660143617, "sha": "e1820854", "message": "feat(ring_theory/is_tensor_product): Universal property of base change (#15800)", "changes": [{"oldPath": "src/ring_theory/is_tensor_product.lean", "newPath": "src/ring_theory/is_tensor_product.lean", "changes": [["add", "theorem", "alg_hom_ext'", ["is_base_change"]], ["add", "theorem", "alg_hom_ext", ["is_base_change"]], ["add", "theorem", "comm", ["is_base_change"]], ["add", "theorem", "comp", ["is_base_change"]], ["add", "theorem", "iff_lift_unique", ["is_base_change"]], ["add", "theorem", "induction_on", ["is_base_change"]], ["add", "theorem", "of_equiv", ["is_base_change"]], ["add", "theorem", "of_lift_unique", ["is_base_change"]], ["add", "theorem", "symm", ["is_base_change"]]]}]}, {"timestamp": 1660143615, "sha": "3b09a260", "message": "feat(ring_theory/artinian): localization maps of artinian rings are surjective (#15736)\nThe proof is by Junyan, I just tidied it up a little, and also the `ring_theory/artinian` file a little bit, in order to fit the results more smoothly.", "changes": [{"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": [["add", "theorem", "is_artinian_ring", ["function", "surjective"]], ["mod", "theorem", "bijective_of_injective_endomorphism", ["is_artinian"]], ["mod", "theorem", "disjoint_partial_infs_eventually_top", ["is_artinian"]], ["mod", "theorem", "exists_endomorphism_iterate_ker_sup_range_eq_top", ["is_artinian"]], ["add", "theorem", "exists_pow_succ_smul_dvd", ["is_artinian"]], ["mod", "theorem", "induction", ["is_artinian"]], ["mod", "theorem", "monotone_stabilizes", ["is_artinian"]], ["add", "theorem", "range_smul_pow_stabilizes", ["is_artinian"]], ["mod", "theorem", "surjective_of_injective_endomorphism", ["is_artinian"]], ["del", "theorem", "is_artinian_of_fintype", []], ["add", "theorem", "localization_artinian", ["is_artinian_ring"]], ["add", "theorem", "localization_surjective", ["is_artinian_ring"]], ["del", "theorem", "is_artinian_ring_of_ring_equiv", []], ["del", "theorem", "is_artinian_ring_of_surjective", []]]}, {"oldPath": "src/ring_theory/localization/cardinality.lean", "newPath": "src/ring_theory/localization/cardinality.lean", "changes": [["del", "theorem", "algebra_map_surjective_of_fintype", ["is_localization"]]]}]}, {"timestamp": 1660143614, "sha": "0026ed93", "message": "feat(category_theory/monoidal/subcategory): monoidal closed structure on full subcategories (#15703)\nI made `monoidal_closed_of_left_rigid_category` a `def` because having it an instance causes diamonds with `full_monoidal_closed_subcategory` or `category_theory.monoidal_closed.functor_category` from #15643. In practice, I think that we rarely want to deduce that a category is monoidal closed from the rigid structure.", "changes": [{"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": [["add", "theorem", "ihom_obj", ["FinVect"]]]}, {"oldPath": "src/category_theory/monoidal/rigid/basic.lean", "newPath": "src/category_theory/monoidal/rigid/basic.lean", "changes": [["add", "def", "closed_of_has_left_dual", ["category_theory"]], ["add", "def", "monoidal_closed_of_left_rigid_category", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/subcategory.lean", "newPath": "src/category_theory/monoidal/subcategory.lean", "changes": [["add", "theorem", "full_monoidal_closed_subcategory_ihom_map", ["category_theory", "monoidal_category"]], ["add", "theorem", "full_monoidal_closed_subcategory_ihom_obj", ["category_theory", "monoidal_category"]]]}]}, {"timestamp": 1660143611, "sha": "e63df397", "message": "feat(ring_theory/valuation/valuation_subring): define principal unit group of valuation subring and provide basic API (#14742)\nThis PR defines the principal unit group of a valuation subring as a subgroup of the units of the field. We show two valuation subrings are equal iff their principal unit groups are the same, and we show that the map on valuation subrings to their principal unit groups is an order embedding.", "changes": [{"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["add", "theorem", "is_local_ring_hom_residue", ["local_ring"]], ["add", "theorem", "surjective_units_map_of_local_ring_hom", ["local_ring"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "coe_mem_principal_unit_group_iff", ["valuation_subring"]], ["add", "theorem", "coe_unit_group_to_residue_field_units_apply", ["valuation_subring"]], ["add", "theorem", "eq_iff_principal_unit_group", ["valuation_subring"]], ["add", "theorem", "ker_unit_group_to_residue_field_units", ["valuation_subring"]], ["mod", "theorem", "mem_nonunits_iff", ["valuation_subring"]], ["add", "theorem", "mem_principal_unit_group_iff", ["valuation_subring"]], ["mod", "theorem", "mem_unit_group_iff", ["valuation_subring"]], ["add", "def", "principal_unit_group", ["valuation_subring"]], ["add", "def", "principal_unit_group_equiv", ["valuation_subring"]], ["add", "theorem", "principal_unit_group_equiv_apply", ["valuation_subring"]], ["add", "theorem", "principal_unit_group_injective", ["valuation_subring"]], ["add", "theorem", "principal_unit_group_le_principal_unit_group", ["valuation_subring"]], ["add", "def", "principal_unit_group_order_embedding", ["valuation_subring"]], ["add", "theorem", "principal_unit_group_symm_apply", ["valuation_subring"]], ["add", "theorem", "principal_units_le_units", ["valuation_subring"]], ["add", "theorem", "surjective_unit_group_to_residue_field_units", ["valuation_subring"]], ["add", "def", "unit_group_to_residue_field_units", ["valuation_subring"]], ["add", "def", "units_mod_principal_units_equiv_residue_field_units", ["valuation_subring"]], ["add", "theorem", "units_mod_principal_units_equiv_residue_field_units_comp_quotient_group_mk", ["valuation_subring"]], ["add", "theorem", "units_mod_principal_units_equiv_residue_field_units_comp_quotient_group_mk_apply", ["valuation_subring"]]]}]}, {"timestamp": 1660136809, "sha": "e1f01165", "message": "feat(topology/connected): definition and basic properties about locally connected spaces (#15965)\nThis was introduced in the [Sphere Eversion Project](https://github.com/leanprover-community/sphere-eversion/blob/333231d77aa028bb164abc695ac8a4abce4af0c2/src/to_mathlib/topology/misc.lean#L444); I added a clean API, proved the equivalence with \"weak local connectedness\" (where we don't require the bases to be made of open sets), generalized [local connectedness of normed spaces](https://github.com/leanprover-community/sphere-eversion/blob/333231d77aa028bb164abc695ac8a4abce4af0c2/src/to_mathlib/topology/misc.lean#L504) to local connectedness of locally convex spaces, and proved the lemmas @hrmacbeth asked for on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Missing.20facts.20about.20.60locally_constant.60/near/290704266).", "changes": [{"oldPath": "src/topology/algebra/module/locally_convex.lean", "newPath": "src/topology/algebra/module/locally_convex.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "connected_component_in_mem_nhds", []], ["add", "theorem", "is_clopen_connected_component", []], ["add", "theorem", "connected_component_in", ["is_open"]], ["add", "theorem", "is_open_connected_component", []], ["add", "theorem", "locally_connected_space_iff_connected_basis", []], ["add", "theorem", "locally_connected_space_iff_connected_component_in_open", []], ["add", "theorem", "locally_connected_space_iff_connected_subsets", []], ["add", "theorem", "locally_connected_space_iff_open_connected_basis", []], ["add", "theorem", "locally_connected_space_iff_open_connected_subsets", []], ["add", "theorem", "locally_connected_space_of_connected_bases", []]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "of_constant_on_connected_components", ["is_locally_constant"]], ["add", "theorem", "of_constant_on_preconnected_clopens", ["is_locally_constant"]]]}]}, {"timestamp": 1660136808, "sha": "9dd3807b", "message": "feat(category_theory/sites/{sheaf, sheafification}): monomorphisms of sheaves are precisely monomorphisms of presheaves (#15932)\n* monomorphisms of sheaves are precisely monomorphisms of underlying presheaves (when presheaves can be sheafified)\n* a morphism between sheaves is epic if the morphism between underlying presheaves is epic. (The converse is not always true)", "changes": [{"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "theorem", "mono_of_presheaf_mono", ["category_theory", "Sheaf", "hom"]]]}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": [["add", "theorem", "mono_iff_presheaf_mono", ["category_theory", "Sheaf", "hom"]]]}]}, {"timestamp": 1660136804, "sha": "17d8e679", "message": "feat(category_theory): every category is essentially small... (#15874)\n...if you look at it from far enough away.", "changes": [{"oldPath": "src/category_theory/essentially_small.lean", "newPath": "src/category_theory/essentially_small.lean", "changes": [["add", "theorem", "essentially_small_self", ["category_theory"]]]}]}, {"timestamp": 1660136801, "sha": "4d66277c", "message": "feat(linear_algebra/clifford_algebra/star): add a possibly-non-canonical star structure (#15866)\nSee the module docstring for a discussion of non-canonicity.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["del", "theorem", "to_quaternion_involute_reverse", ["clifford_algebra_quaternion"]], ["add", "theorem", "to_quaternion_star", ["clifford_algebra_quaternion"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/star.lean", "changes": [["add", "theorem", "star_algebra_map", ["clifford_algebra"]], ["add", "theorem", "star_def'", ["clifford_algebra"]], ["add", "theorem", "star_def", ["clifford_algebra"]], ["add", "theorem", "star_smul", ["clifford_algebra"]], ["add", "theorem", "star_ι", ["clifford_algebra"]]]}]}, {"timestamp": 1660136799, "sha": "0ddf919e", "message": "feat(ring_theory/ideal/operations): strengthen a lemma to iff and golf (#15777)\n+ Strengthen `exists_sum_of_mem_ideal_smul_span` to iff and rename it to `mem_ideal_smul_span_iff_exists_sum'`.\n+ Introduce a more general version `mem_ideal_smul_span_iff_exists_sum` (without the prime) that applies to any type, not just types coerced from a set; this version is stated using `set.range` instead of `set.image`.\n+ Use the general version to golf down `finsupp_total_apply_eq_of_fintype` in the same file (this comes from reviewing PR # 15460 after it's approved) and slightly golf `ideal.finrank_quotient_map.span_eq_top` in another file (the only place in mathlib this lemma is used previously).", "changes": [{"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "theorem", "exists_sum_of_mem_ideal_smul_span", ["submodule"]], ["add", "theorem", "mem_ideal_smul_span_iff_exists_sum'", ["submodule"]], ["add", "theorem", "mem_ideal_smul_span_iff_exists_sum", ["submodule"]]]}]}, {"timestamp": 1660136797, "sha": "fb16dbc0", "message": "feat(analysis/convex/cone): dual of a convex cone is closed (#15766)\nWe prove that the dual of a convex cone is always closed.\nPart of #15637", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "coe_comap", ["convex_cone"]], ["add", "theorem", "is_closed_inner_dual_cone", []], ["mod", "theorem", "mem_inner_dual_cone", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}]}, {"timestamp": 1660136796, "sha": "16cf14f1", "message": "feat(number_theory/cyclotomic/rat): add integral_power_basis (#15570)\nWe add `integral_power_basis` and some variants, defining integral power basis of `𝓞 K`.\nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/rat.lean", "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": [["add", "theorem", "integral_power_basis'_gen", ["is_primitive_root"]], ["add", "theorem", "integral_power_basis_dim", ["is_primitive_root"]], ["add", "theorem", "integral_power_basis_gen", ["is_primitive_root"]], ["add", "theorem", "power_basis_int'_dim", ["is_primitive_root"]], ["add", "theorem", "sub_one_integral_power_basis'_gen", ["is_primitive_root"]], ["add", "theorem", "sub_one_integral_power_basis_gen", ["is_primitive_root"]]]}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["add", "theorem", "is_integral_of_mem_ring_of_integers", ["number_field"]]]}]}, {"timestamp": 1660136795, "sha": "9fc53308", "message": "feat(category_theory/limits): bundled exact functors (#12336)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/exact_functor.lean", "changes": [["add", "def", "forget", ["category_theory", "ExactFunctor"]], ["add", "theorem", "forget_map", ["category_theory", "ExactFunctor"]], ["add", "theorem", "forget_obj", ["category_theory", "ExactFunctor"]], ["add", "theorem", "forget_obj_of", ["category_theory", "ExactFunctor"]], ["add", "def", "of", ["category_theory", "ExactFunctor"]], ["add", "theorem", "of_fst", ["category_theory", "ExactFunctor"]], ["add", "def", "ExactFunctor", ["category_theory"]], ["add", "def", "forget", ["category_theory", "LeftExactFunctor"]], ["add", "theorem", "forget_map", ["category_theory", "LeftExactFunctor"]], ["add", "theorem", "forget_obj", ["category_theory", "LeftExactFunctor"]], ["add", "theorem", "forget_obj_of", ["category_theory", "LeftExactFunctor"]], ["add", "def", "of", ["category_theory", "LeftExactFunctor"]], ["add", "def", "of_exact", ["category_theory", "LeftExactFunctor"]], ["add", "theorem", "of_exact_map", ["category_theory", "LeftExactFunctor"]], ["add", "theorem", "of_exact_obj", ["category_theory", "LeftExactFunctor"]], ["add", "theorem", "of_fst", ["category_theory", "LeftExactFunctor"]], ["add", "def", "LeftExactFunctor", ["category_theory"]], ["add", "def", "forget", ["category_theory", "RightExactFunctor"]], ["add", "theorem", "forget_map", ["category_theory", "RightExactFunctor"]], ["add", "theorem", "forget_obj", ["category_theory", "RightExactFunctor"]], ["add", "theorem", "forget_obj_of", ["category_theory", "RightExactFunctor"]], ["add", "def", "of", ["category_theory", "RightExactFunctor"]], ["add", "def", "of_exact", ["category_theory", "RightExactFunctor"]], ["add", "theorem", "of_exact_map", ["category_theory", "RightExactFunctor"]], ["add", "theorem", "of_exact_obj", ["category_theory", "RightExactFunctor"]], ["add", "theorem", "of_fst", ["category_theory", "RightExactFunctor"]], ["add", "def", "RightExactFunctor", ["category_theory"]]]}]}, {"timestamp": 1660127014, "sha": "3dbd6809", "message": "feat(algebraic_topology/dold_kan): construction of an idempotent endomorphism (#15950)\nIn this PR, we pass to the limit in order to obtain the endomorphism `P_infty : K[X] ⟶ K[X]` of the alternating face map complex. In the case of abelian categories, it shall be the projection on the normalized subcomplex, with kernel the degenerate subcomplex.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/p_infty.lean", "changes": [["add", "def", "P_infty", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_infty_f", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_infty_f_idem", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_infty_f_naturality", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_infty_idem", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_is_eventually_constant", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "Q_is_eventually_constant", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "karoubi_P_infty_f", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "map_P_infty_f", ["algebraic_topology", "dold_kan"]], ["add", "def", "nat_trans_P_infty", ["algebraic_topology", "dold_kan"]], ["add", "def", "nat_trans_P_infty_f", ["algebraic_topology", "dold_kan"]]]}]}, {"timestamp": 1660127013, "sha": "952e7ee9", "message": "feat(category_theory/generator): complete well-powered category with small coseparating set has an initial object (#15865)\nA step towards the Special Adjoint Functor Theorem.", "changes": [{"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": [["add", "theorem", "has_initial_of_is_cosepatating", ["category_theory"]], ["add", "theorem", "has_terminal_of_is_separating", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/essentially_small.lean", "newPath": "src/category_theory/limits/essentially_small.lean", "changes": [["mod", "theorem", "has_coproducts_of_shape_of_small", ["category_theory", "limits"]], ["mod", "theorem", "has_products_of_shape_of_small", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "theorem", "has_initial_of_has_terminal_op", ["category_theory", "limits"]], ["add", "theorem", "has_terminal_of_has_initial_op", ["category_theory", "limits"]]]}, {"oldPath": "src/data/set/opposite.lean", "newPath": "src/data/set/opposite.lean", "changes": [["add", "def", "op_equiv_self", ["set"]]]}]}, {"timestamp": 1660127012, "sha": "ea74dc9f", "message": "feat(category_theory/limits): transport has_initial across equivalences (#15858)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/equivalence.lean", "changes": [["add", "theorem", "has_initial_iff", ["category_theory", "equivalence"]], ["add", "theorem", "has_terminal_iff", ["category_theory", "equivalence"]], ["add", "theorem", "has_initial_of_equivalence", ["category_theory"]], ["add", "theorem", "has_terminal_of_equivalence", ["category_theory"]]]}]}, {"timestamp": 1660127011, "sha": "4ef4fefe", "message": "feat(geometry/manifold/cont_mdiff): more flexibility in changing charts (#15519)\n* Adds lemmas that allows one to change the chart one considers for only the source or target\n* Also adds a lemma that shows `cont_mdiff_on` if the source and target lie completely in one chart.\n* Also add various properties for `local_invariant_prop`\n* From the sphere eversion project", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "cont_mdiff_at_iff_target", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "cont_diff_within_at_prop_self", []], ["add", "theorem", "cont_diff_within_at_prop_self_source", []], ["add", "theorem", "cont_diff_within_at_prop_self_target", []], ["add", "theorem", "cont_mdiff_at_iff_source_of_mem_source", []], ["add", "theorem", "cont_mdiff_at_iff_target", []], ["add", "theorem", "cont_mdiff_at_iff_target_of_mem_source", []], ["add", "theorem", "cont_mdiff_on_iff_of_subset_source", []], ["add", "theorem", "cont_mdiff_within_at_iff_source_of_mem_source", []], ["add", "theorem", "cont_mdiff_within_at_iff_target_of_mem_source", []], ["add", "theorem", "ext_chart_at_symm_continuous_within_at_comp_right_iff", []], ["add", "theorem", "symm_continuous_within_at_comp_right_iff", ["model_with_corners"]], ["add", "theorem", "smooth_at_iff_target", []]]}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": [["add", "theorem", "lift_prop_within_at_self", ["structure_groupoid"]], ["add", "theorem", "lift_prop_within_at_self_source", ["structure_groupoid"]], ["add", "theorem", "lift_prop_within_at_self_target", ["structure_groupoid"]], ["add", "theorem", "lift_prop_within_at_indep_chart'", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_indep_chart_source", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_indep_chart_source_aux", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_indep_chart_target", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_indep_chart_target_aux2", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_indep_chart_target_aux", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "right_invariance", ["structure_groupoid", "local_invariant_prop"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "maps_to_ext_chart_at", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}]}, {"timestamp": 1660127009, "sha": "be63ea29", "message": "feat(category_theory/abelian): equivalence between subobjects and quotients (#15494)", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/subobject.lean", "changes": [["add", "def", "subobject_iso_subobject_op", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": [["add", "def", "cokernel_order_hom", ["category_theory", "limits"]], ["add", "def", "kernel_order_hom", ["category_theory", "limits"]]]}]}, {"timestamp": 1660127008, "sha": "d8510cac", "message": "feat(topology/local_at_target): Properties of continuous maps that are local at the target. (#15452)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_subtype_map", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "coe_restrict", ["set", "maps_to"]], ["add", "theorem", "range_restrict", ["set", "maps_to"]], ["add", "theorem", "range_restrict_preimage", ["set"]], ["add", "def", "restrict_preimage", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bijective_iff_bijective_of_Union_eq_univ", ["set"]], ["add", "theorem", "injective_iff_injective_of_Union_eq_univ", ["set"]], ["add", "theorem", "restrict_preimage_bijective", ["set"]], ["add", "theorem", "restrict_preimage_injective", ["set"]], ["add", "theorem", "restrict_preimage_surjective", ["set"]], ["add", "theorem", "surjective_iff_surjective_of_Union_eq_univ", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "restrict", ["continuous_at"]], ["add", "theorem", "restrict_preimage", ["continuous_at"]], ["add", "theorem", "continuous_at_cod_restrict_iff", []]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "def", "restrict_preimage", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/local_at_target.lean", "changes": [["add", "theorem", "closed_embedding_iff_closed_embedding_of_supr_eq_top", []], ["add", "theorem", "closed_iff_coe_preimage_of_supr_eq_top", []], ["add", "theorem", "embedding_iff_embedding_of_supr_eq_top", []], ["add", "theorem", "inducing_iff_inducing_of_supr_eq_top", []], ["add", "theorem", "open_embedding_iff_open_embedding_of_supr_eq_top", []], ["add", "theorem", "open_iff_coe_preimage_of_supr_eq_top", []], ["add", "theorem", "open_iff_inter_of_supr_eq_top", []], ["add", "theorem", "restrict_preimage_closed_embedding", ["set"]], ["add", "theorem", "restrict_preimage_embedding", ["set"]], ["add", "theorem", "restrict_preimage_inducing", ["set"]], ["add", "theorem", "restrict_preimage_open_embedding", ["set"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "is_closed_preimage", ["inducing"]]]}]}, {"timestamp": 1660118803, "sha": "a4ea8895", "message": "feat(topology/connected): make `connected_component_in` more usable, develop API (#15964)\nFrom the [Sphere Eversion Project](https://github.com/leanprover-community/sphere-eversion/blob/333231d77aa028bb164abc695ac8a4abce4af0c2/src/to_mathlib/topology/misc.lean#L516)", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["mod", "def", "connected_component_in", []], ["add", "theorem", "connected_component_in_eq", []], ["add", "theorem", "connected_component_in_eq_empty", []], ["add", "theorem", "connected_component_in_eq_image", []], ["add", "theorem", "connected_component_in_mono", []], ["add", "theorem", "connected_component_in_nonempty_iff", []], ["add", "theorem", "connected_component_in_subset", []], ["add", "theorem", "connected_component_in_univ", []], ["add", "theorem", "connected_component_nonempty", []], ["add", "theorem", "is_connected_connected_component_in_iff", []], ["add", "theorem", "connected_component_in", ["is_preconnected"]], ["add", "theorem", "subset_connected_component_in", ["is_preconnected"]], ["add", "theorem", "is_preconnected_connected_component_in", []], ["add", "theorem", "mem_connected_component_in", []]]}]}, {"timestamp": 1660118801, "sha": "d4805efb", "message": "feat(logic/equiv/list): add `countable` instances (#15960)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "val_inj", ["finset"]], ["add", "theorem", "val_injective", ["finset"]]]}, {"oldPath": "src/logic/equiv/list.lean", "newPath": "src/logic/equiv/list.lean", "changes": []}]}, {"timestamp": 1660118800, "sha": "30cf3db4", "message": "feat(analysis/calculus/cont_diff): Add `cont_diff` lemmas for constant scalar multiplication (#15895)\nAdd the smoothness lemmas for constant scalar multiplication. We imitate the lemmas for multiplication.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "const_smul", ["cont_diff"]], ["add", "theorem", "const_smul", ["cont_diff_at"]], ["add", "theorem", "cont_diff_const_smul", []], ["add", "theorem", "const_smul", ["cont_diff_on"]], ["add", "theorem", "const_smul", ["cont_diff_within_at"]]]}]}, {"timestamp": 1660118799, "sha": "0e0a8b42", "message": "feat(analysis/inner_product_space/l2_space): define `is_hilbert_sum` predicate (#15772)\nThis introduces a predicate on a space `E` and a family of linear isometries `V : Π i, G i →ₗᵢ[𝕜] E` expressing that the associated map `lp G 2 →ₗᵢ[𝕜] E` is surjective. As explained in the docstring, this is *somewhat* analogous to `direct_sum.is_internal`, but **not completely**, since it is a predicate on embeddings rather than subspaces (so in a sense it is more category-theoretic, even though we don't implement it as a universal property). \nI am aware that introducing this inconsistency is not ideal, but I believe this is the cleanest thing to do here, because it follows the design of `orthogonal_family`. \nI also have a more practical motivation : in a following PR, I will introduce a way to concatenate Hilbert bases from mutually orthogonal \"subspaces\" with dense span to form a Hilbert basis for the whole space. Without this, the natural way would be to state this with hypotheses `orthogonal_family 𝕜 V` and `⊤ ≤ (⨆ (i : ι), (V i).to_linear_map.range).topological_closure`. First, this is quite verbose for such a common set of hypotheses, but the real problem comes with the fact that for actual subspaces you want to replace this second hypothesis by `⊤ ≤ (⨆ (i : ι), F i).topological_closure`, so you essentially have to duplicate the API. With this constructions, these two variants just correspond to two different ways of proving `is_hilbert_sum`.\nI think we should consider doing a similar thing for direct sums, stating the fact that the map `direct_sum.to_module` is bijective, but it will be harder since linear maps are not injective in general like linear isometries are.", "changes": [{"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": [["add", "theorem", "mk", ["is_hilbert_sum"]], ["add", "theorem", "mk_internal", ["is_hilbert_sum"]], ["add", "structure", "is_hilbert_sum", []], ["add", "theorem", "is_hilbert_sum", ["orthonormal"]]]}]}, {"timestamp": 1660118798, "sha": "73421d52", "message": "feat(field_theory/adjoin): `intermediate_field.adjoin` equals `subalgebra.adjoin` for algebraic sets (#15762)\nThis PR proves `(intermediate_field.adjoin F S).to_subalgebra = algebra.adjoin F S` for algebraic sets `S`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_algebraic_to_subalgebra", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}]}, {"timestamp": 1660118797, "sha": "0fb4144a", "message": "feat(data/polynomial/ring_division,ring_theory/algebraic): Basic consequences of `x ∈ p.root_set` (#15745)\nThis PR adds two basic consequences of `x ∈ p.root_set`: `p ≠ 0` and `is_algebraic x`.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "aeval_eq_zero_of_mem_root_set", ["polynomial"]], ["add", "theorem", "is_root_of_mem_roots", ["polynomial"]], ["add", "theorem", "ne_zero_of_mem_root_set", ["polynomial"]], ["add", "theorem", "ne_zero_of_mem_roots", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_of_mem_root_set", []]]}]}, {"timestamp": 1660118795, "sha": "7c205ffb", "message": "feat(data/nat/totient): add lemma `totient_dvd_of_dvd` (#15642)\nAdds `totient_dvd_of_dvd (h : a ∣ b) : φ a ∣ φ b`. This is Theorem 2.5(d) in Apostol (1976) Introduction to Analytic Number Theory.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "prod_dvd_prod_of_subset_of_dvd", ["finsupp"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_dvd_of_dvd", ["nat"]]]}]}, {"timestamp": 1660110616, "sha": "b5eb0429", "message": "feat(ring_theory/integral_closure): finite = integral + finite_type (#15970)", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "of_finite", ["ring_hom", "finite_type"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "finite_iff_is_integral_and_finite_type", ["algebra"]], ["add", "theorem", "finite", ["algebra", "is_integral"]], ["add", "theorem", "of_finite", ["algebra", "is_integral"]], ["add", "theorem", "to_is_integral", ["ring_hom", "finite"]], ["add", "theorem", "finite_iff_is_integral_and_finite_type", ["ring_hom"]], ["add", "theorem", "to_finite", ["ring_hom", "is_integral"]]]}]}, {"timestamp": 1660110615, "sha": "f7534de0", "message": "feat(topology/nhds_set): add several lemmas (#15957)\nProve `𝓟 s ≤ 𝓝ˢ s` and `𝓝ˢ s = 𝓟 s ↔ is_open s`.", "changes": [{"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": [["mod", "theorem", "mem_nhds_set_empty", []], ["add", "theorem", "nhds_set_eq_principal_iff", []], ["add", "theorem", "nhds_set_interior", []], ["add", "theorem", "principal_le_nhds_set", []]]}]}, {"timestamp": 1660110614, "sha": "94a20a74", "message": "chore(data/polynomial/degree/definitions): make an argument explicit (#15951)\nThe argument `n : ℕ` cannot be deduced from the goal and it is useful to be able to provide it.\nThis argument changed from explicit to implicit when I prepared #15818.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "monic_of_degree_le_of_coeff_eq_one", ["polynomial"]], ["mod", "theorem", "monic_of_nat_degree_le_of_coeff_eq_one", ["polynomial"]]]}]}, {"timestamp": 1660110612, "sha": "36d300ce", "message": "refactor(data/fintype/basic): drop 2 noncomputable instances (#15943)\nDrop `fintype.of_subsingleton'` and `function.embedding.fintype'`. First, we should use `finite` instances instead of noncomputable `fintype` instances. Second, these instances created diamonds with non-primed versions.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_subsingleton", ["fintype"]]]}, {"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["del", "theorem", "of_subsingleton", []]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "nonempty_iff_eq_singleton_default", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/finite.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": []}]}, {"timestamp": 1660110611, "sha": "1cdd8266", "message": "feat(topology/instances/sign): topology of `sign_type` and `sign` (#15925)\nGive `sign_type` the discrete topology, and prove that `sign`, in\nan `order_topology`, is continuous at positive and negative\narguments (in a `partial_order`) or away from zero (in a\n`linear_order`).", "changes": [{"oldPath": null, "newPath": "src/topology/instances/sign.lean", "changes": [["add", "theorem", "continuous_at_sign_of_ne_zero", []], ["add", "theorem", "continuous_at_sign_of_neg", []], ["add", "theorem", "continuous_at_sign_of_pos", []]]}]}, {"timestamp": 1660110607, "sha": "d38aca11", "message": "chore(topology/*): Use `finite` in place of `fintype` where possible (#15891)\nSatisfy the `fintype_finite` linter.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "infi_supr_of_antitone", []], ["mod", "theorem", "infi_supr_of_monotone", []], ["mod", "theorem", "Inter_Union_of_antitone", ["set"]], ["mod", "theorem", "Inter_Union_of_monotone", ["set"]], ["mod", "theorem", "Union_Inter_of_antitone", ["set"]], ["mod", "theorem", "Union_Inter_of_monotone", ["set"]], ["mod", "theorem", "Union_univ_pi_of_monotone", ["set"]], ["mod", "theorem", "pi", ["set", "finite"]], ["mod", "theorem", "forall_finite_image_eval_iff", ["set"]], ["mod", "theorem", "supr_infi_of_antitone", []], ["mod", "theorem", "supr_infi_of_monotone", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "Inter_mem", ["filter"]], ["mod", "theorem", "eventually_all", ["filter"]], ["add", "theorem", "infi_principal", ["filter"]], ["del", "theorem", "infi_principal_fintype", ["filter"]], ["add", "theorem", "mem_infi_of_finite", ["filter"]], ["del", "theorem", "mem_infi_of_fintype", ["filter"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["mod", "theorem", "Coprod_cofinite", ["filter"]]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_Union", []], ["del", "theorem", "closure_Union_of_fintype", []], ["add", "theorem", "interior_Inter", []], ["del", "theorem", "interior_Inter_of_fintype", []], ["mod", "theorem", "is_closed_Union", []], ["mod", "theorem", "is_open_Inter", []]]}, {"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": [["mod", "theorem", "is_bounded_Union", ["bornology"]], ["mod", "theorem", "is_cobounded_Inter", ["bornology"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "nhds_within_pi_univ_eq", []]]}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "exists_open_singleton_of_fintype", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "compact_Union", []], ["add", "theorem", "finite_of_compact_of_discrete", []], ["del", "def", "fintype_of_compact_of_discrete", []], ["mod", "theorem", "is_clopen_Inter", []], ["mod", "theorem", "is_clopen_Union", []]]}]}, {"timestamp": 1660110606, "sha": "af80234d", "message": "feat(algebraic_geometry/morphisms/basic): Basic framework for local properties of morphisms. (#15709)", "changes": [{"oldPath": "src/algebraic_geometry/morphisms/basic.lean", "newPath": "src/algebraic_geometry/morphisms/basic.lean", "changes": [["add", "theorem", "affine_cancel_left_is_iso", ["algebraic_geometry"]], ["add", "theorem", "affine_cancel_right_is_iso", ["algebraic_geometry"]], ["add", "theorem", "affine_open_cover_iff", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "theorem", "affine_open_cover_tfae", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "theorem", "affine_target_iff", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "theorem", "open_cover_iff", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "theorem", "target_affine_locally_is_local", ["algebraic_geometry", "affine_target_morphism_property", "is_local"]], ["add", "structure", "is_local", ["algebraic_geometry", "affine_target_morphism_property"]], ["add", "theorem", "is_local_of_open_cover_imply", ["algebraic_geometry", "affine_target_morphism_property"]], ["add", "theorem", "map_is_iso", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "open_cover_tfae", ["algebraic_geometry", "property_is_local_at_target"]], ["add", "structure", "property_is_local_at_target", ["algebraic_geometry"]], ["add", "def", "target_affine_locally", ["algebraic_geometry"]], ["add", "theorem", "target_affine_locally_of_open_cover", ["algebraic_geometry"]], ["add", "theorem", "target_affine_locally_respects_iso", ["algebraic_geometry"]]]}]}, {"timestamp": 1660107892, "sha": "2792268f", "message": "chore(scripts): update nolints.txt (#15971)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1660101104, "sha": "146d3d1f", "message": "chore(*/..eq): add is_refl instances (#15963)\nThis allows the use of docs#of_eq, an extremely underused utility method. Also fixes `smodeq` to match the `rfl/refl` conventions.", "changes": [{"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/linear_algebra/smodeq.lean", "newPath": "src/linear_algebra/smodeq.lean", "changes": [["del", "theorem", "refl", ["smodeq"]]]}, {"oldPath": "src/ring_theory/henselian.lean", "newPath": "src/ring_theory/henselian.lean", "changes": []}]}, {"timestamp": 1660090978, "sha": "cad35c79", "message": "feat(analysis/convex/cone): add `convex_cone.strictly_positive` and monotonicity lemmas (#15837)\nThe monotonicity lemmas transfer `poined`, `blunt`, `salient`, and `flat` across inequalities of cones.\nThis also renames `convex_cone.positive_cone` to `convex_cone.positive` to reduce duplication.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "anti", ["convex_cone", "blunt"]], ["add", "theorem", "blunt_strictly_positive", ["convex_cone"]], ["add", "theorem", "coe_positive", ["convex_cone"]], ["add", "theorem", "coe_strictly_positive", ["convex_cone"]], ["add", "theorem", "mono", ["convex_cone", "flat"]], ["add", "theorem", "mem_positive", ["convex_cone"]], ["add", "theorem", "mem_strictly_positive", ["convex_cone"]], ["add", "theorem", "mono", ["convex_cone", "pointed"]], ["add", "theorem", "pointed_positive", ["convex_cone"]], ["del", "theorem", "pointed_positive_cone", ["convex_cone"]], ["add", "def", "positive", ["convex_cone"]], ["del", "def", "positive_cone", ["convex_cone"]], ["add", "theorem", "positive_le_strictly_positive", ["convex_cone"]], ["add", "theorem", "anti", ["convex_cone", "salient"]], ["add", "theorem", "salient_positive", ["convex_cone"]], ["del", "theorem", "salient_positive_cone", ["convex_cone"]], ["add", "theorem", "salient_strictly_positive", ["convex_cone"]], ["add", "def", "strictly_positive", ["convex_cone"]]]}]}, {"timestamp": 1660090977, "sha": "f838fe85", "message": "feat(order/initial_seg): `is_empty (r ≺i r)` (#15803)", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["mod", "theorem", "irrefl", ["principal_seg"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1660081993, "sha": "a913b9b4", "message": "chore(order/filter): move `filter.prod` and `filter.coprod` to a new file (#15937)\nThese lemmas and definitions are moved without changes.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "bot_coprod", ["filter"]], ["del", "theorem", "bot_coprod_bot", ["filter"]], ["del", "theorem", "bot_prod", ["filter"]], ["del", "theorem", "comap_prod", ["filter"]], ["del", "theorem", "compl_mem_coprod", ["filter"]], ["del", "theorem", "coprod_bot", ["filter"]], ["del", "theorem", "coprod_mono", ["filter"]], ["del", "theorem", "coprod_ne_bot_iff", ["filter"]], ["del", "theorem", "coprod_ne_bot_left", ["filter"]], ["del", "theorem", "coprod_ne_bot_right", ["filter"]], ["del", "theorem", "curry", ["filter", "eventually"]], ["del", "theorem", "diag_of_prod", ["filter", "eventually"]], ["del", "theorem", "prod_inl", ["filter", "eventually"]], ["del", "theorem", "prod_inr", ["filter", "eventually"]], ["del", "theorem", "prod_mk", ["filter", "eventually"]], ["del", "theorem", "prod_map", ["filter", "eventually_eq"]], ["del", "theorem", "prod_map", ["filter", "eventually_le"]], ["del", "theorem", "eventually_prod_iff", ["filter"]], ["del", "theorem", "le_prod_map_fst_snd", ["filter"]], ["del", "theorem", "map_const_principal_coprod_map_id_principal", ["filter"]], ["del", "theorem", "map_prod_map_const_id_principal_coprod_principal", ["filter"]], ["del", "theorem", "map_prod_map_coprod_le", ["filter"]], ["del", "theorem", "map_pure_prod", ["filter"]], ["del", "theorem", "map_swap4_prod", ["filter"]], ["del", "theorem", "mem_coprod_iff", ["filter"]], ["del", "theorem", "mem_prod_iff", ["filter"]], ["del", "theorem", "mem_prod_principal", ["filter"]], ["del", "theorem", "mem_prod_top", ["filter"]], ["del", "theorem", "prod", ["filter", "ne_bot"]], ["del", "theorem", "principal_coprod_principal", ["filter"]], ["del", "theorem", "prod_assoc", ["filter"]], ["del", "theorem", "prod_assoc_symm", ["filter"]], ["del", "theorem", "prod_bot", ["filter"]], ["del", "theorem", "prod_comap_comap_eq", ["filter"]], ["del", "theorem", "prod_comm'", ["filter"]], ["del", "theorem", "prod_comm", ["filter"]], ["del", "theorem", "prod_eq", ["filter"]], ["del", "theorem", "prod_eq_bot", ["filter"]], ["del", "theorem", "prod_inf_prod", ["filter"]], ["del", "theorem", "prod_infi_left", ["filter"]], ["del", "theorem", "prod_infi_right", ["filter"]], ["del", "theorem", "prod_map_map_eq'", ["filter"]], ["del", "theorem", "prod_map_map_eq", ["filter"]], ["del", "theorem", "prod_mem_prod", ["filter"]], ["del", "theorem", "prod_mem_prod_iff", ["filter"]], ["del", "theorem", "prod_mono", ["filter"]], ["del", "theorem", "prod_ne_bot", ["filter"]], ["del", "theorem", "prod_principal_principal", ["filter"]], ["del", "theorem", "prod_pure", ["filter"]], ["del", "theorem", "prod_pure_pure", ["filter"]], ["del", "theorem", "prod_sup", ["filter"]], ["del", "theorem", "prod_top", ["filter"]], ["del", "theorem", "pure_prod", ["filter"]], ["del", "theorem", "sup_prod", ["filter"]], ["del", "theorem", "prod_map", ["filter", "tendsto"]], ["del", "theorem", "prod_map_coprod", ["filter", "tendsto"]], ["del", "theorem", "prod_mk", ["filter", "tendsto"]], ["del", "theorem", "tendsto_diag", ["filter"]], ["del", "theorem", "tendsto_fst", ["filter"]], ["del", "theorem", "tendsto_prod_assoc", ["filter"]], ["del", "theorem", "tendsto_prod_assoc_symm", ["filter"]], ["del", "theorem", "tendsto_prod_iff'", ["filter"]], ["del", "theorem", "tendsto_prod_iff", ["filter"]], ["del", "theorem", "tendsto_prod_swap", ["filter"]], ["del", "theorem", "tendsto_snd", ["filter"]], ["del", "theorem", "tendsto_swap4_prod", ["filter"]]]}, {"oldPath": "src/order/filter/n_ary.lean", "newPath": "src/order/filter/n_ary.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/filter/prod.lean", "changes": [["add", "theorem", "bot_coprod", ["filter"]], ["add", "theorem", "bot_coprod_bot", ["filter"]], ["add", "theorem", "bot_prod", ["filter"]], ["add", "theorem", "comap_prod", ["filter"]], ["add", "theorem", "compl_mem_coprod", ["filter"]], ["add", "theorem", "coprod_bot", ["filter"]], ["add", "theorem", "coprod_mono", ["filter"]], ["add", "theorem", "coprod_ne_bot_iff", ["filter"]], ["add", "theorem", "coprod_ne_bot_left", ["filter"]], ["add", "theorem", "coprod_ne_bot_right", ["filter"]], ["add", "theorem", "curry", ["filter", "eventually"]], ["add", "theorem", "diag_of_prod", ["filter", "eventually"]], ["add", "theorem", "prod_inl", ["filter", "eventually"]], ["add", "theorem", "prod_inr", ["filter", "eventually"]], ["add", "theorem", "prod_mk", ["filter", "eventually"]], ["add", "theorem", "prod_map", ["filter", "eventually_eq"]], ["add", "theorem", "prod_map", ["filter", "eventually_le"]], ["add", "theorem", "eventually_prod_iff", ["filter"]], ["add", "theorem", "le_prod_map_fst_snd", ["filter"]], ["add", "theorem", "map_const_principal_coprod_map_id_principal", ["filter"]], ["add", "theorem", "map_prod_map_const_id_principal_coprod_principal", ["filter"]], ["add", "theorem", "map_pure_prod", ["filter"]], ["add", "theorem", "map_swap4_prod", ["filter"]], ["add", "theorem", "mem_coprod_iff", ["filter"]], ["add", "theorem", "mem_prod_iff", ["filter"]], ["add", "theorem", "mem_prod_principal", ["filter"]], ["add", "theorem", "mem_prod_top", ["filter"]], ["add", "theorem", "prod", ["filter", "ne_bot"]], ["add", "theorem", "principal_coprod_principal", ["filter"]], ["add", "theorem", "prod_assoc", ["filter"]], ["add", "theorem", "prod_assoc_symm", ["filter"]], ["add", "theorem", "prod_bot", ["filter"]], ["add", "theorem", "prod_comm'", ["filter"]], ["add", "theorem", "prod_comm", ["filter"]], ["add", "theorem", "prod_eq", ["filter"]], ["add", "theorem", "prod_eq_bot", ["filter"]], ["add", "theorem", "prod_inf_prod", ["filter"]], ["add", "theorem", "prod_infi_left", ["filter"]], ["add", "theorem", "prod_infi_right", ["filter"]], ["add", "theorem", "prod_map_map_eq'", ["filter"]], ["add", "theorem", "prod_mem_prod", ["filter"]], ["add", "theorem", "prod_mem_prod_iff", ["filter"]], ["add", "theorem", "prod_mono", ["filter"]], ["add", "theorem", "prod_ne_bot", ["filter"]], ["add", "theorem", "prod_principal_principal", ["filter"]], ["add", "theorem", "prod_pure", ["filter"]], ["add", "theorem", "prod_pure_pure", ["filter"]], ["add", "theorem", "prod_sup", ["filter"]], ["add", "theorem", "prod_top", ["filter"]], ["add", "theorem", "pure_prod", ["filter"]], ["add", "theorem", "sup_prod", ["filter"]], ["add", "theorem", "prod_map", ["filter", "tendsto"]], ["add", "theorem", "prod_map_coprod", ["filter", "tendsto"]], ["add", "theorem", "prod_mk", ["filter", "tendsto"]], ["add", "theorem", "tendsto_diag", ["filter"]], ["add", "theorem", "tendsto_fst", ["filter"]], ["add", "theorem", "tendsto_prod_assoc", ["filter"]], ["add", "theorem", "tendsto_prod_assoc_symm", ["filter"]], ["add", "theorem", "tendsto_prod_iff'", ["filter"]], ["add", "theorem", "tendsto_prod_iff", ["filter"]], ["add", "theorem", "tendsto_prod_swap", ["filter"]], ["add", "theorem", "tendsto_snd", ["filter"]], ["add", "theorem", "tendsto_swap4_prod", ["filter"]], ["add", "theorem", "{u", ["filter"]]]}]}, {"timestamp": 1660081992, "sha": "e71c115f", "message": "feat(order/max): no value is accessible in a `no_min_order` / `no_max_order` (#15931)", "changes": [{"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["add", "theorem", "not_acc", ["no_max_order"]], ["add", "theorem", "not_acc", ["no_min_order"]]]}]}, {"timestamp": 1660081991, "sha": "511caf6a", "message": "chore(analysis/calculus/cont_diff): rename and add @[simp] to `iterated_fderiv_within_zero_fun` (#15896)\nRename the lemma `iterated_fderiv_within_zero_fun` to `iterated_fderiv_zero_fun` because it is not stated with `iterated_fderiv_within` and add the `simp` attribute.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["del", "theorem", "iterated_fderiv_within_zero_fun", []], ["add", "theorem", "iterated_fderiv_zero_fun", []]]}]}, {"timestamp": 1660081990, "sha": "a5413b69", "message": "chore(analysis/calculus/cont_diff): Add two helper lemmas (#15894)\nThis PR adds the forward direction of `cont_diff_iff_continuous_differentiable` as separate lemmas, which enables using dot-notation for `cont_diff`.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "continuous_iterated_fderiv", ["cont_diff"]], ["add", "theorem", "differentiable_iterated_fderiv", ["cont_diff"]]]}]}, {"timestamp": 1660081989, "sha": "2f9a7218", "message": "feat(analysis/inner_product_space/projection): various facts about `orthogonal_projection` (#15807)", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "orthogonal_projection_minimal", []], ["add", "theorem", "orthogonal_projection_orthogonal_projection_of_le", []], ["add", "theorem", "orthogonal_projection_tendsto_closure_supr", []], ["add", "theorem", "orthogonal_projection_tendsto_self", []]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1660076036, "sha": "f37e88f3", "message": "chore(linear_algebra/free_module/basic): tidy up (#15956)\nThis generalizes a few free instances to not assume the same ring appears twice, notably `module.free R (ι →₀ R)` to `module.free R (ι →₀ M)` and `module.free R (matrix m n R)` to `module.free R (matrix m n M)`.\nThis renames `module.free.pi.free`, a special case of `module.free.pi`, to `module.free.function`.\nIt also renames `module.free.finsupp.free` to `module.free.finsupp`.\nIn order to make this change we relax the typeclasses in `finsupp.basis` from rings to semirings.\nWe make the same relaxation on `module.free.pi`, which results in us running into the same typeclass search bug that already occurs for `module.finite`.\nFinally, at the request of the new linter this changes `fintype` assumptions to `finite`.", "changes": [{"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "newPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "changes": []}]}, {"timestamp": 1660076035, "sha": "b6ab1f47", "message": "feat(analysis/normed/field/basic): define `densely_normed_field` give instances for ℚ, ℝ, ℂ and `is_R_or_C` (#15657)\nThis adds a new type class extending `normed_field` which is named `densely_normed_field` per this [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/hypotheses.20for.20a.20field.20property/near/290408091). The name comes from the fact that the (nn)norm has dense range in ℝ≥0. This type class is strictly stronger than `nontrivially_normed_field`, with `padic` being a field which is nontrivially normed but not densely normed. \nThe instances of `nontrivially_normed_field` for each of ℚ, ℝ, ℂ have all been migrated to `densely_normed_field` instead. Moreover, `is_R_or_C` now extends `densely_normed_field`; this is natural because even if it only extends `nontrivially_normed_field`, it would still be possible to prove that the norm has dense range in ℝ≥0.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": [["add", "theorem", "dense_range_nnnorm", ["normed_field"]], ["add", "theorem", "exists_lt_nnnorm_lt", ["normed_field"]], ["add", "theorem", "exists_lt_norm_lt", ["normed_field"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1660072336, "sha": "77d020f7", "message": "feat(number_theory/number_field.lean): generalise ```range_eq_roots``` to relative extensions (#15903)\nThe statement of ```range_eq_roots``` is generalised to relative extensions: Let `A` be an algebraically closed field and let `x ∈ K`, with `K` a number field. For `F`, subfield of `K`, the images of `x` by the `F`-algebra morphisms from `K` to `A` are exactly the roots in `A` of the minimal polynomial of `x` over `F`. \nThe original version over `ℚ` is a direct consequence. Still, I kept the statement since I think it is useful.", "changes": [{"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["del", "theorem", "eq_roots", ["number_field", "embeddings"]], ["add", "theorem", "range_eq_roots", ["number_field", "embeddings"]], ["add", "theorem", "rat_range_eq_roots", ["number_field", "embeddings"]]]}]}, {"timestamp": 1660072335, "sha": "4a1b5307", "message": "feat(number_theory/legendre_symbol/quadratic_char): add results on special values (#15888)\nThis uses the new results on Gauss sums to prove results on the values of quadratic characters at 2, -2 and odd primes.\nThe next step will be to use these to prove Quadratic Reciprocity and the Second Supplementary Law for Legendre symbols.\n[Here](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Gauss.20sums/near/292231902) is the Zulip discussion on Gauss sums.", "changes": [{"oldPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "newPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "changes": [["mod", "theorem", "two_pow_card", ["finite_field"]]]}, {"oldPath": "src/number_theory/legendre_symbol/mul_character.lean", "newPath": "src/number_theory/legendre_symbol/mul_character.lean", "changes": [["add", "theorem", "eq_of_eq_coe", ["mul_char", "is_quadratic"]], ["add", "theorem", "map_ring_char", ["mul_char"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["del", "theorem", "is_square_neg_one_iff", ["char"]], ["del", "def", "quadratic_char", ["char"]], ["del", "theorem", "quadratic_char_card_sqrts", ["char"]], ["del", "theorem", "quadratic_char_dichotomy", ["char"]], ["del", "theorem", "quadratic_char_eq_neg_one_iff_not_one", ["char"]], ["del", "theorem", "quadratic_char_eq_one_of_char_two'", ["char"]], ["del", "theorem", "quadratic_char_eq_one_of_char_two", ["char"]], ["del", "theorem", "quadratic_char_eq_pow_of_char_ne_two'", ["char"]], ["del", "theorem", "quadratic_char_eq_pow_of_char_ne_two", ["char"]], ["del", "theorem", "quadratic_char_eq_zero_iff'", ["char"]], ["del", "theorem", "quadratic_char_eq_zero_iff", ["char"]], ["del", "theorem", "quadratic_char_exists_neg_one", ["char"]], ["del", "def", "quadratic_char_fun", ["char"]], ["del", "theorem", "quadratic_char_is_nontrivial", ["char"]], ["del", "theorem", "quadratic_char_is_quadratic", ["char"]], ["del", "theorem", "quadratic_char_mul", ["char"]], ["del", "theorem", "quadratic_char_neg_one", ["char"]], ["del", "theorem", "quadratic_char_neg_one_iff_not_is_square", ["char"]], ["del", "theorem", "quadratic_char_one", ["char"]], ["del", "theorem", "quadratic_char_one_iff_is_square", ["char"]], ["del", "theorem", "quadratic_char_sq_one'", ["char"]], ["del", "theorem", "quadratic_char_sq_one", ["char"]], ["del", "theorem", "quadratic_char_sum_zero", ["char"]], ["del", "theorem", "quadratic_char_zero", ["char"]], ["add", "theorem", "is_square_neg_one_iff", ["finite_field"]], ["add", "theorem", "is_square_neg_two_iff", ["finite_field"]], ["add", "theorem", "is_square_odd_prime_iff", ["finite_field"]], ["add", "theorem", "is_square_two_iff", ["finite_field"]], ["add", "def", "quadratic_char", []], ["add", "theorem", "quadratic_char_card_card", []], ["add", "theorem", "quadratic_char_card_sqrts", []], ["add", "theorem", "quadratic_char_dichotomy", []], ["add", "theorem", "quadratic_char_eq_neg_one_iff_not_one", []], ["add", "theorem", "quadratic_char_eq_one_of_char_two'", []], ["add", "theorem", "quadratic_char_eq_one_of_char_two", []], ["add", "theorem", "quadratic_char_eq_pow_of_char_ne_two''", []], ["add", "theorem", "quadratic_char_eq_pow_of_char_ne_two'", []], ["add", "theorem", "quadratic_char_eq_pow_of_char_ne_two", []], ["add", "theorem", "quadratic_char_eq_zero_iff'", []], ["add", "theorem", "quadratic_char_eq_zero_iff", []], ["add", "theorem", "quadratic_char_exists_neg_one", []], ["add", "def", "quadratic_char_fun", []], ["add", "theorem", "quadratic_char_is_nontrivial", []], ["add", "theorem", "quadratic_char_is_quadratic", []], ["add", "theorem", "quadratic_char_mul", []], ["add", "theorem", "quadratic_char_neg_one", []], ["add", "theorem", "quadratic_char_neg_one_iff_not_is_square", []], ["add", "theorem", "quadratic_char_neg_two", []], ["add", "theorem", "quadratic_char_odd_prime", []], ["add", "theorem", "quadratic_char_one", []], ["add", "theorem", "quadratic_char_one_iff_is_square", []], ["add", "theorem", "quadratic_char_sq_one'", []], ["add", "theorem", "quadratic_char_sq_one", []], ["add", "theorem", "quadratic_char_sum_zero", []], ["add", "theorem", "quadratic_char_two", []], ["add", "theorem", "quadratic_char_zero", []]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/zmod_char.lean", "newPath": "src/number_theory/legendre_symbol/zmod_char.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1660064464, "sha": "59eef0a2", "message": "refactor(algebra/periodic): weaken another `antiperiodic` typeclass assumption (#15961)\nFollowup to #15941 and #15782, weakening the typeclass assumption on\nthe codomain of the antiperiodic function in `antiperiodic.const_sub`\n(added by #15782) in the same way as done for other lemmas in #15941.", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["mod", "theorem", "const_sub", ["function", "antiperiodic"]]]}]}, {"timestamp": 1660064461, "sha": "5e0a5bc6", "message": "fix(geometry/manifold/complex): remove nonempty assumption (#15948)", "changes": [{"oldPath": "src/geometry/manifold/complex.lean", "newPath": "src/geometry/manifold/complex.lean", "changes": [["mod", "theorem", "exists_eq_const_of_compact_space", ["mdifferentiable"]]]}]}, {"timestamp": 1660064458, "sha": "a150b69f", "message": "chore(probability/*): change to probability notation in the probability folder (#15933)\nThis PR makes two notational changes in the probability folder: `α` changed to `Ω` and `x` of type `α` to `ω`.", "changes": [{"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": [["mod", "def", "cond_count", ["probability_theory"]], ["mod", "theorem", "cond_count_add_compl_eq", ["probability_theory"]], ["mod", "theorem", "cond_count_compl", ["probability_theory"]], ["mod", "theorem", "cond_count_empty", ["probability_theory"]], ["mod", "theorem", "cond_count_empty_meas", ["probability_theory"]], ["mod", "theorem", "cond_count_is_probability_measure", ["probability_theory"]], ["mod", "theorem", "cond_count_singleton", ["probability_theory"]], ["mod", "theorem", "finite_of_cond_count_ne_zero", ["probability_theory"]]]}, {"oldPath": "src/probability/conditional_expectation.lean", "newPath": "src/probability/conditional_expectation.lean", "changes": []}, {"oldPath": "src/probability/conditional_probability.lean", "newPath": "src/probability/conditional_probability.lean", "changes": [["mod", "def", "cond", ["probability_theory"]], ["mod", "theorem", "cond_apply", ["probability_theory"]], ["mod", "theorem", "cond_inter_self", ["probability_theory"]]]}, {"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": [["mod", "theorem", "measurable", ["measure_theory", "has_pdf"]], ["mod", "theorem", "has_pdf_of_pdf_ne_zero", ["measure_theory"]], ["mod", "theorem", "map_eq_set_lintegral_pdf", ["measure_theory"]], ["mod", "theorem", "map_eq_with_density_pdf", ["measure_theory"]], ["mod", "theorem", "measurable_of_pdf_ne_zero", ["measure_theory"]], ["mod", "theorem", "measurable_pdf", ["measure_theory"]], ["mod", "theorem", "ae_lt_top", ["measure_theory", "pdf"]], ["mod", "theorem", "has_pdf_iff", ["measure_theory", "pdf"]], ["mod", "theorem", "has_pdf_iff_of_measurable", ["measure_theory", "pdf"]], ["mod", "theorem", "have_lebesgue_decomposition_of_has_pdf", ["measure_theory", "pdf"]], ["mod", "theorem", "integrable_iff_integrable_mul_pdf", ["measure_theory", "pdf"]], ["mod", "theorem", "has_pdf", ["measure_theory", "pdf", "is_uniform"]], ["mod", "theorem", "is_probability_measure", ["measure_theory", "pdf", "is_uniform"]], ["mod", "theorem", "measure_preimage", ["measure_theory", "pdf", "is_uniform"]], ["mod", "theorem", "pdf_to_real_ae_eq", ["measure_theory", "pdf", "is_uniform"]], ["mod", "def", "is_uniform", ["measure_theory", "pdf"]], ["mod", "theorem", "lintegral_eq_measure_univ", ["measure_theory", "pdf"]], ["mod", "theorem", "map_absolutely_continuous", ["measure_theory", "pdf"]], ["mod", "theorem", "of_real_to_real_ae_eq", ["measure_theory", "pdf"]], ["mod", "theorem", "quasi_measure_preserving_has_pdf", ["measure_theory", "pdf"]], ["mod", "theorem", "to_quasi_measure_preserving", ["measure_theory", "pdf"]], ["mod", "def", "pdf", ["measure_theory"]], ["mod", "theorem", "pdf_eq_zero_of_not_measurable", ["measure_theory"]], ["mod", "theorem", "pdf_undef", ["measure_theory"]]]}, {"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/hitting_time.lean", "changes": [["mod", "theorem", "hitting_bot_le_iff", ["measure_theory"]], ["mod", "theorem", "hitting_eq_Inf", ["measure_theory"]], ["mod", "theorem", "hitting_le", ["measure_theory"]], ["mod", "theorem", "hitting_le_of_mem", ["measure_theory"]], ["mod", "theorem", "hitting_mem_Icc", ["measure_theory"]], ["mod", "theorem", "hitting_mem_set", ["measure_theory"]], ["mod", "theorem", "hitting_of_lt", ["measure_theory"]], ["mod", "theorem", "le_hitting", ["measure_theory"]], ["mod", "theorem", "le_hitting_of_exists", ["measure_theory"]]]}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["mod", "theorem", "Indep_sets", ["probability_theory", "Indep"]], ["mod", "theorem", "indep", ["probability_theory", "Indep"]], ["mod", "def", "Indep", ["probability_theory"]], ["mod", "theorem", "indep_fun", ["probability_theory", "Indep_fun"]], ["mod", "def", "Indep_fun", ["probability_theory"]], ["mod", "def", "Indep_set", ["probability_theory"]], ["mod", "theorem", "Indep", ["probability_theory", "Indep_sets"]], ["mod", "theorem", "Indep_aux", ["probability_theory", "Indep_sets"]], ["mod", "theorem", "indep_sets", ["probability_theory", "Indep_sets"]], ["mod", "theorem", "pi_Union_Inter_singleton", ["probability_theory", "Indep_sets"]], ["mod", "def", "Indep_sets", ["probability_theory"]], ["mod", "theorem", "indep_sets", ["probability_theory", "indep"]], ["mod", "theorem", "symm", ["probability_theory", "indep"]], ["mod", "def", "indep", ["probability_theory"]], ["mod", "theorem", "ae_eq", ["probability_theory", "indep_fun"]], ["mod", "def", "indep_fun", ["probability_theory"]], ["mod", "theorem", "indep_of_indep_of_le_left", ["probability_theory"]], ["mod", "theorem", "indep_of_indep_of_le_right", ["probability_theory"]], ["mod", "def", "indep_set", ["probability_theory"]], ["mod", "theorem", "Inter", ["probability_theory", "indep_sets"]], ["mod", "theorem", "Union", ["probability_theory", "indep_sets"]], ["mod", "theorem", "indep", ["probability_theory", "indep_sets"]], ["mod", "theorem", "inter", ["probability_theory", "indep_sets"]], ["mod", "theorem", "symm", ["probability_theory", "indep_sets"]], ["mod", "theorem", "union", ["probability_theory", "indep_sets"]], ["mod", "theorem", "union_iff", ["probability_theory", "indep_sets"]], ["mod", "def", "indep_sets", ["probability_theory"]], ["mod", "theorem", "indep_sets_of_indep_sets_of_le_left", ["probability_theory"]], ["mod", "theorem", "indep_sets_of_indep_sets_of_le_right", ["probability_theory"]], ["mod", "theorem", "indep_sets_singleton_iff", ["probability_theory"]]]}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": [["mod", "theorem", "integrable_mul", ["probability_theory", "indep_fun"]], ["mod", "theorem", "lintegral_mul_indicator_eq_lintegral_mul_lintegral_indicator", ["probability_theory"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["mod", "def", "martingale", ["measure_theory"]], ["mod", "theorem", "martingale_condexp", ["measure_theory"]], ["mod", "theorem", "martingale_const", ["measure_theory"]], ["mod", "theorem", "martingale_zero", ["measure_theory"]], ["mod", "theorem", "integrable_stopped_value", ["measure_theory", "submartingale"]], ["mod", "theorem", "set_integral_le", ["measure_theory", "submartingale"]], ["mod", "theorem", "smul_nonneg", ["measure_theory", "submartingale"]], ["mod", "theorem", "smul_nonpos", ["measure_theory", "submartingale"]], ["mod", "theorem", "sum_mul_sub'", ["measure_theory", "submartingale"]], ["mod", "theorem", "sum_mul_sub", ["measure_theory", "submartingale"]], ["mod", "def", "submartingale", ["measure_theory"]], ["mod", "theorem", "submartingale_iff_condexp_sub_nonneg", ["measure_theory"]], ["mod", "theorem", "set_integral_le", ["measure_theory", "supermartingale"]], ["mod", "theorem", "smul_nonneg", ["measure_theory", "supermartingale"]], ["mod", "theorem", "smul_nonpos", ["measure_theory", "supermartingale"]], ["mod", "def", "supermartingale", ["measure_theory"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["mod", "def", "adapted", ["measure_theory"]], ["mod", "theorem", "adapted_zero", ["measure_theory"]], ["mod", "theorem", "adapted_natural", ["measure_theory", "filtration"]], ["mod", "def", "const", ["measure_theory", "filtration"]], ["mod", "theorem", "const_apply", ["measure_theory", "filtration"]], ["mod", "def", "natural", ["measure_theory", "filtration"]], ["mod", "structure", "filtration", ["measure_theory"]], ["mod", "theorem", "le_measurable_space_of_const_le", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_inter_eq_iff", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_min_const_iff", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_min_iff", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_space_le", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_space_le_of_le_const", ["measure_theory", "is_stopping_time"]], ["mod", "def", "is_stopping_time", ["measure_theory"]], ["mod", "theorem", "measurable_set_of_filtration", ["measure_theory"]], ["mod", "def", "prog_measurable", ["measure_theory"]], ["mod", "def", "stopped_process", ["measure_theory"]], ["mod", "theorem", "stopped_process_eq_of_ge", ["measure_theory"]], ["mod", "theorem", "stopped_process_eq_of_le", ["measure_theory"]], ["mod", "def", "stopped_value", ["measure_theory"]], ["mod", "theorem", "stopped_value_const", ["measure_theory"]], ["mod", "theorem", "stopped_value_eq", ["measure_theory"]], ["mod", "theorem", "stopped_value_piecewise_const'", ["measure_theory"]], ["mod", "theorem", "stopped_value_piecewise_const", ["measure_theory"]], ["mod", "theorem", "stopped_value_sub_eq_sum'", ["measure_theory"]]]}, {"oldPath": "src/probability/variance.lean", "newPath": "src/probability/variance.lean", "changes": []}]}, {"timestamp": 1660064457, "sha": "d4b56199", "message": "chore(data/polynomial/induction): cleanup (#15918)\nEven ignoring the confusion with `data/polynomial/inductions.lean` (out of scope for this PR), this file is a bit of a mess:\n* The coeff and summation lemmas are out of place\n* Some lemmas use a weird `inverse` naming to refer to `set.preimage`.\n* Some lemmas use `submodule.span` instead of `ideal.span`.\nThis PR moves, renames, and restates the lemmas above as necessary.\nSome proofs have been golfed to enable the shuffling, but all lemma statements are defeq to the originals.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "newPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "sum_C_mul_X_eq", ["polynomial"]], ["add", "theorem", "sum_monomial_eq", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_monomial_mul", ["polynomial"]], ["add", "theorem", "coeff_monomial_zero_mul", ["polynomial"]], ["add", "theorem", "coeff_mul_monomial", ["polynomial"]], ["add", "theorem", "coeff_mul_monomial_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/induction.lean", "newPath": "src/data/polynomial/induction.lean", "changes": [["del", "theorem", "coeff_monomial_mul", ["polynomial"]], ["del", "theorem", "coeff_monomial_zero_mul", ["polynomial"]], ["del", "theorem", "coeff_mul_monomial", ["polynomial"]], ["del", "theorem", "coeff_mul_monomial_zero", ["polynomial"]], ["add", "theorem", "exists_C_coeff_not_mem", ["polynomial"]], ["del", "theorem", "exists_coeff_not_mem_C_inverse", ["polynomial"]], ["mod", "theorem", "mem_span_C_coeff", ["polynomial"]], ["add", "theorem", "span_le_of_C_coeff_mem", ["polynomial"]], ["del", "theorem", "span_le_of_coeff_mem_C_inverse", ["polynomial"]], ["del", "theorem", "sum_C_mul_X_eq", ["polynomial"]], ["del", "theorem", "sum_monomial_eq", ["polynomial"]]]}]}, {"timestamp": 1660064456, "sha": "df1179db", "message": "feat(algebra/order/archimedean): `archimedean_iff_int_lt`, `archimedean_iff_int_le`, `floor_ring.archimedean` (#15909)\nAdd lemmas `archimedean_iff_int_lt` and `archimedean_iff_int_le`,\nanalogous to existing lemmas for `nat` and `rat`. Deduce that a\nlinear ordered field that is a floor ring is archimedean (it seems we\ncurrently only have the converse direction).", "changes": [{"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["add", "theorem", "archimedean_iff_int_le", []], ["add", "theorem", "archimedean_iff_int_lt", []], ["add", "theorem", "archimedean", ["floor_ring"]]]}]}, {"timestamp": 1660064454, "sha": "bc1341f6", "message": "feat(algebra/algebra/operations): pointwise mul_semiring_action on submodules (#15877)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "smul_algebra_map", []]]}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}]}, {"timestamp": 1660064453, "sha": "71320d9b", "message": "feat(group_theory/group_action/conj_act): smul_comm_class instances (#15876)\nNotably these instances give us access to conjugation as a linear map, enabling the pointwise scalar multiplication on submodules.\nI also moved the `forall` lemma to be next to the `rec` definition it is similar to.", "changes": [{"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": []}]}, {"timestamp": 1660064452, "sha": "878370b7", "message": "chore(measure_theory/function/condexp): split `conditional_expectation` into multiple files (#15714)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation/basic.lean", "changes": [["del", "theorem", "condexp_ae_eq_restrict_of_measurable_space_eq_on", ["measure_theory"]], ["del", "theorem", "condexp_ae_eq_restrict_zero", ["measure_theory"]], ["del", "theorem", "condexp_indicator", ["measure_theory"]], ["del", "theorem", "condexp_indicator_aux", ["measure_theory"]], ["del", "theorem", "condexp_restrict_ae_eq_restrict", ["measure_theory"]], ["del", "theorem", "condexp_strongly_measurable_mul", ["measure_theory"]], ["del", "theorem", "condexp_strongly_measurable_mul_of_bound", ["measure_theory"]], ["del", "theorem", "condexp_strongly_measurable_mul_of_bound₀", ["measure_theory"]], ["del", "theorem", "condexp_strongly_measurable_mul₀", ["measure_theory"]], ["del", "theorem", "condexp_strongly_measurable_simple_func_mul", ["measure_theory"]], ["del", "theorem", "uniform_integrable_condexp", ["measure_theory", "integrable"]], ["del", "theorem", "rn_deriv_ae_eq_condexp", ["measure_theory"]], ["del", "theorem", "snorm_one_condexp_le_snorm", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/conditional_expectation/indicator.lean", "changes": [["add", "theorem", "condexp_ae_eq_restrict_of_measurable_space_eq_on", ["measure_theory"]], ["add", "theorem", "condexp_ae_eq_restrict_zero", ["measure_theory"]], ["add", "theorem", "condexp_indicator", ["measure_theory"]], ["add", "theorem", "condexp_indicator_aux", ["measure_theory"]], ["add", "theorem", "condexp_restrict_ae_eq_restrict", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/conditional_expectation/real.lean", "changes": [["add", "theorem", "condexp_strongly_measurable_mul", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_mul_of_bound", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_mul_of_bound₀", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_mul₀", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_simple_func_mul", ["measure_theory"]], ["add", "theorem", "uniform_integrable_condexp", ["measure_theory", "integrable"]], ["add", "theorem", "rn_deriv_ae_eq_condexp", ["measure_theory"]], ["add", "theorem", "snorm_one_condexp_le_snorm", ["measure_theory"]]]}, {"oldPath": "src/probability/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}]}, {"timestamp": 1660064451, "sha": "b88fa08f", "message": "feat(set_theory/zfc): lemmas on `to_set` (#15265)\nWe also flip the direction of `Set.ext_iff` to match `set.ext_iff`.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["mod", "theorem", "ext", ["Set"]], ["mod", "theorem", "ext_iff", ["Set"]], ["add", "theorem", "mem_to_set", ["Set"]], ["add", "theorem", "mk_mem_iff", ["Set"]], ["add", "theorem", "to_set_empty", ["Set"]], ["add", "theorem", "to_set_image", ["Set"]], ["add", "theorem", "to_set_inj", ["Set"]], ["add", "theorem", "to_set_injective", ["Set"]], ["add", "theorem", "to_set_insert", ["Set"]], ["add", "theorem", "to_set_inter", ["Set"]], ["add", "theorem", "to_set_pair", ["Set"]], ["add", "theorem", "to_set_sUnion", ["Set"]], ["add", "theorem", "to_set_sdiff", ["Set"]], ["add", "theorem", "to_set_sep", ["Set"]], ["add", "theorem", "to_set_singleton", ["Set"]], ["add", "theorem", "to_set_subset_iff", ["Set"]], ["add", "theorem", "to_set_union", ["Set"]], ["add", "theorem", "mem_to_set", ["pSet"]], ["add", "theorem", "to_set_empty", ["pSet"]], ["add", "theorem", "to_set_sUnion", ["pSet"]]]}]}, {"timestamp": 1660054599, "sha": "eb55b1e9", "message": "chore(algebra/order/floor): generalize lemmas about adding nat from rings to semirings (#15952)\nThis generalizes this typeclass argument of the following lemmas:\n* `nat.floor_add_nat`\n* `nat.floor_add_one`\n* `nat.ceil_add_nat`\n* `nat.ceil_add_one`\n* `nat.floor_sub_nat`\nThese generalizations are useful for `nnreal` and a future `nnrat`.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["mod", "theorem", "floor_sub_nat", ["nat"]]]}]}, {"timestamp": 1660054598, "sha": "f028ff2b", "message": "feat(algebra/hom/group_instances): add missing `int_cast` and `nat_cast` lemmas to `add_monoid.End` and `module.End` (#15839)\nWe already had provided the `nat_cast` field for `add_monoid.End`, this just copies the same pattern to the three other fields, and adds the 8 missing `rfl` lemmas.", "changes": [{"oldPath": "src/algebra/hom/group_instances.lean", "newPath": "src/algebra/hom/group_instances.lean", "changes": [["add", "theorem", "int_cast_apply", ["add_monoid", "End"]], ["add", "theorem", "nat_cast_apply", ["add_monoid", "End"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "int_cast_def", ["add_monoid", "End"]], ["add", "theorem", "nat_cast_def", ["add_monoid", "End"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "int_cast_apply", ["module", "End"]], ["add", "theorem", "int_cast_def", ["module", "End"]], ["add", "theorem", "nat_cast_apply", ["module", "End"]], ["add", "theorem", "nat_cast_def", ["module", "End"]]]}]}, {"timestamp": 1660054596, "sha": "1a51c706", "message": "feat(analysis/convex/cone): lemmas about `inner_dual_cone` of unions (#15836)\nThis discards the proof in #15639 and replaces it with a more general strategy and some auxiliary lemmas.\nThis includes an `insert` lemma for consistency with `submodule.span_insert`, even though it follows trivially from the union lemma.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "inner_dual_cone_Union", []], ["add", "theorem", "inner_dual_cone_insert", []], ["add", "theorem", "inner_dual_cone_sUnion", []], ["add", "theorem", "inner_dual_cone_singleton", []], ["add", "theorem", "inner_dual_cone_union", []]]}]}, {"timestamp": 1660054595, "sha": "75f5289e", "message": "feat(data/list/perm): binding all the sublists of a given length gives all the sublists (#15834)\nThis is essentially the defining relation between `sublists'` and `sublists_len`.\nThis also adds a few other trivial lemmas about `sublists_len`.", "changes": [{"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "map_append_bind_perm", ["list"]], ["add", "theorem", "range_bind_sublists_len_perm", ["list"]]]}, {"oldPath": "src/data/list/sublists.lean", "newPath": "src/data/list/sublists.lean", "changes": [["add", "theorem", "sublists_len_length", ["list"]], ["add", "theorem", "sublists_len_of_length_lt", ["list"]]]}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}]}, {"timestamp": 1660054594, "sha": "545a5953", "message": "feat(measure_theory/measure/measure_space): add instance `compact_space.is_finite_measure` (#15693)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "is_finite_measure_iff_is_finite_measure_on_compacts_of_compact_space", []], ["add", "theorem", "is_finite_measure", ["measure_theory", "compact_space"]]]}]}, {"timestamp": 1660049593, "sha": "7adef571", "message": "feat(analysis/special_functions/trigonometric/angle): more `sin` and `cos` lemmas (#15945)\nAdd more lemmas about `real.angle.sin` and `real.angle.cos`, generally\ndeduced from corresponding lemmas for `real.sin` and `real.cos`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "cos_add_pi", ["real", "angle"]], ["add", "theorem", "cos_antiperiodic", ["real", "angle"]], ["add", "theorem", "cos_coe_pi", ["real", "angle"]], ["add", "theorem", "cos_neg", ["real", "angle"]], ["add", "theorem", "cos_sub_pi", ["real", "angle"]], ["add", "theorem", "cos_zero", ["real", "angle"]], ["add", "theorem", "sin_add_pi", ["real", "angle"]], ["add", "theorem", "sin_antiperiodic", ["real", "angle"]], ["add", "theorem", "sin_coe_pi", ["real", "angle"]], ["add", "theorem", "sin_eq_zero_iff", ["real", "angle"]], ["add", "theorem", "sin_neg", ["real", "angle"]], ["add", "theorem", "sin_sub_pi", ["real", "angle"]], ["add", "theorem", "sin_zero", ["real", "angle"]]]}]}, {"timestamp": 1660049591, "sha": "d812abd8", "message": "refactor(algebra/periodic): weaken `antiperiodic` typeclass assumptions (#15941)\nMany lemmas about `antiperiodic` have typeclass assumptions on the\ncodomain of the antiperiodic function that are stronger than\nnecessary, generally because the weaker typeclasses didn't exist when\nmost of the lemmas were added. Weaken those assumptions as follows:\n* `add_group` to `has_involutive_neg` (the most common change).\n* `add_group` to `has_neg` (in a few places).\n* `add_group` to `subtraction_monoid` (twice).\n* `ring` to `has_mul` with `has_distrib_neg` (once).\n* `division_ring` to `division_monoid` with `has_distrib_neg` (once).\nThere remain three cases where lemmas have typeclass assumptions\nrequiring addition and subtraction operations on the codomain, despite\nthose operations not otherwise being used in the lemma, because of the\nlack of more specific typeclasses appropriate to those lemmas. The\ntwo that I changed to use `subtraction_monoid` actually only need the\n`neg_zero` lemma (along with `has_involutive_neg` in one case), but we\ndon't have a typeclass for types that satisfy `neg_zero` (one example\nwithout addition and subtraction operations is `sign_type`). And\n`antiperiodic.smul` actually only needs a scalar action that satisfies\n`smul_neg`, without needing addition or subtraction operations on the\ntype on which the scalar action acts, but again we don't have such a\ntypeclass (and I don't know if we have any such scalar actions in\nmathlib for which such a typeclass would actually enable this lemma to\napply).", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["mod", "theorem", "add", ["function", "antiperiodic"]], ["mod", "theorem", "div", ["function", "antiperiodic"]], ["mod", "theorem", "funext'", ["function", "antiperiodic"]], ["mod", "theorem", "int_even_mul_periodic", ["function", "antiperiodic"]], ["mod", "theorem", "int_mul_eq_of_eq_zero", ["function", "antiperiodic"]], ["mod", "theorem", "int_odd_mul_antiperiodic", ["function", "antiperiodic"]], ["mod", "theorem", "mul", ["function", "antiperiodic"]], ["mod", "theorem", "nat_even_mul_periodic", ["function", "antiperiodic"]], ["mod", "theorem", "nat_mul_eq_of_eq_zero", ["function", "antiperiodic"]], ["mod", "theorem", "nat_odd_mul_antiperiodic", ["function", "antiperiodic"]], ["mod", "theorem", "neg", ["function", "antiperiodic"]], ["mod", "theorem", "neg_eq", ["function", "antiperiodic"]], ["mod", "theorem", "periodic", ["function", "antiperiodic"]], ["mod", "theorem", "sub", ["function", "antiperiodic"]], ["mod", "theorem", "sub_eq'", ["function", "antiperiodic"]], ["mod", "theorem", "sub_eq", ["function", "antiperiodic"]], ["mod", "theorem", "add_antiperiod", ["function", "periodic"]], ["mod", "theorem", "add_antiperiod_eq", ["function", "periodic"]], ["mod", "theorem", "sub_antiperiod", ["function", "periodic"]], ["mod", "theorem", "sub_antiperiod_eq", ["function", "periodic"]]]}]}, {"timestamp": 1660049590, "sha": "346cc93c", "message": "fix(number_theory/cyclotomic/primitive_roots): speedup (#15804)\nneeded for #15784's reverting of the timeout", "changes": [{"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["add", "theorem", "embeddings_equiv_primitive_roots_apply_coe", ["is_primitive_root"]]]}]}, {"timestamp": 1660049588, "sha": "954f3e16", "message": "feat(algebra/periodic): `const_add`, `add_const`, `const_sub`, `sub_const` (#15782)\nAdd lemmas that if `f` is periodic (or antiperiodic), so are functions\nsuch as `λ x, f (a + x)` and `λ x, f (x - a)` where a constant is\nadded or subtracted on either side of the argument, with the same\nperiod. As far as I can tell, while mathlib has such lemmas about the\neffect of multiplying or dividing the argument by a constant on the\nperiod, it doesn't have them for addition or subtraction.\nIt's possible some of these lemmas are true under weaker type class\nassumptions, though I think the type classes used are at least minimal\nfor the proofs I used.", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "add_const", ["function", "antiperiodic"]], ["add", "theorem", "const_add", ["function", "antiperiodic"]], ["add", "theorem", "const_sub", ["function", "antiperiodic"]], ["add", "theorem", "sub_const", ["function", "antiperiodic"]], ["add", "theorem", "add_const", ["function", "periodic"]], ["add", "theorem", "const_add", ["function", "periodic"]], ["add", "theorem", "const_sub", ["function", "periodic"]], ["add", "theorem", "sub_const", ["function", "periodic"]]]}]}, {"timestamp": 1660036099, "sha": "b74907b6", "message": "feat(algebra/category/Group/epi_mono): (mono)epimorphisms and (in)surjections are the same in `(Add)(Comm)Group` (#15496)", "changes": [{"oldPath": "src/algebra/category/Group/epi_mono.lean", "newPath": "src/algebra/category/Group/epi_mono.lean", "changes": [["add", "theorem", "epi_iff_range_eq_top", ["AddGroup"]], ["add", "theorem", "epi_iff_surjective", ["AddGroup"]], ["add", "theorem", "epi_iff_range_eq_top", ["CommGroup"]], ["add", "theorem", "epi_iff_surjective", ["CommGroup"]], ["add", "theorem", "ker_eq_bot_of_mono", ["CommGroup"]], ["add", "theorem", "mono_iff_injective", ["CommGroup"]], ["add", "theorem", "mono_iff_ker_eq_bot", ["CommGroup"]], ["add", "theorem", "range_eq_top_of_epi", ["CommGroup"]], ["add", "theorem", "range_eq_top_of_cancel", ["monoid_hom"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Group/equivalence_Group_AddGroup.lean", "changes": [["add", "def", "to_CommGroup", ["AddCommGroup"]], ["add", "def", "to_Group", ["AddGroup"]], ["add", "def", "to_AddCommGroup", ["CommGroup"]], ["add", "def", "CommGroup_AddCommGroup_equivalence", []], ["add", "def", "to_AddGroup", ["Group"]], ["add", "def", "Group_AddGroup_equivalence", []]]}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["add", "def", "additive_multiplicative", ["add_equiv"]], ["add", "def", "multiplicative_additive", ["mul_equiv"]]]}]}, {"timestamp": 1660036097, "sha": "a88bc4f7", "message": "feat(analysis/convex): the gauge as a seminorm over is_R_or_C (#14879)\nConstructs the gauge for a set on a vector spaces over `is_R_or_C` assuming that the set is convex, balanced and absorbing.\nThe main part of this PR is to show that if a set is balanced then the corresponding gauge has the correct scaling behavior.", "changes": [{"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": [["add", "theorem", "gauge_norm_smul", []], ["mod", "def", "gauge_seminorm", []], ["mod", "theorem", "gauge_smul", []]]}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["add", "theorem", "balanced_iff_neg_mem", []]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "real_smul_eq_coe_mul", ["is_R_or_C"]], ["add", "theorem", "real_smul_eq_coe_smul", ["is_R_or_C"]]]}]}, {"timestamp": 1660027219, "sha": "03f58c52", "message": "feat(category_theory/limits): the constant functor preserves (co)limits (#15938)", "changes": [{"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["add", "def", "preserves_colimits_of_evaluation", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_evaluation", ["category_theory", "limits"]], ["del", "def", "{w'", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["add", "def", "const_comp_evaluation_obj", ["category_theory", "functor"]]]}]}, {"timestamp": 1660027218, "sha": "26e8026f", "message": "feat(algebra/big_operators/basic): Sums and product in `additive`/`multiplicative` (#15898)\nand multiplicativizes `eq_sum_range_sub`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "eq_prod_range_div'", ["finset"]], ["add", "theorem", "eq_prod_range_div", ["finset"]], ["del", "theorem", "eq_sum_range_sub'", ["finset"]], ["del", "theorem", "eq_sum_range_sub", ["finset"]], ["add", "theorem", "of_add_list_prod", []], ["add", "theorem", "of_add_multiset_prod", []], ["add", "theorem", "of_add_sum", []], ["add", "theorem", "of_mul_list_prod", []], ["add", "theorem", "of_mul_multiset_prod", []], ["add", "theorem", "of_mul_prod", []], ["add", "theorem", "to_add_list_sum", []], ["add", "theorem", "to_add_multiset_sum", []], ["add", "theorem", "to_add_prod", []], ["add", "theorem", "to_mul_list_sum", []], ["add", "theorem", "to_mul_multiset_sum", []], ["add", "theorem", "to_mul_sum", []]]}]}, {"timestamp": 1660018342, "sha": "0bd4faee", "message": "feat(topology/algebra/group): add lemmas about `units` (#15921)\n* add `simps` attribute here and there;\n* add `continuous_prod_mk`, `units.continuous_iff`, `units.continuous_inv`, and `continuous.map_units`;\n* golf `homeomorph.prod_units`, add additive version;\n* drop unused section variables, golf `topological_group_Inf`.", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/topology/algebra/constructions.lean", "newPath": "src/topology/algebra/constructions.lean", "changes": [["add", "theorem", "continuous_coe_inv", ["units"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "def", "prod_units", ["units", "homeomorph"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "units_map", ["continuous"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_prod_mk", []]]}]}, {"timestamp": 1660003984, "sha": "ec818836", "message": "feat(geometry/manifold/complex): holomorphic function on compact connected manifold is constant (#15667)\nOur first fact about complex manifolds!\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Missing.20facts.20about.20.60locally_constant.60)", "changes": [{"oldPath": null, "newPath": "src/geometry/manifold/complex.lean", "changes": [["add", "theorem", "apply_eq_of_compact_space", ["mdifferentiable"]], ["add", "theorem", "apply_eq_of_is_compact", ["mdifferentiable"]], ["add", "theorem", "exists_eq_const_of_compact_space", ["mdifferentiable"]]]}]}, {"timestamp": 1659995077, "sha": "e0b90625", "message": "doc(algebra/homology/homological_complex): fix doc and names (#15940)\nSome trivial modifications following #15690.", "changes": [{"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "def", "X_next_iso_self", ["homological_complex"]], ["del", "def", "X_next_iso_zero", ["homological_complex"]], ["add", "def", "X_prev_iso_self", ["homological_complex"]], ["add", "theorem", "X_prev_iso_self_comp_d_to", ["homological_complex"]], ["del", "def", "X_prev_iso_zero", ["homological_complex"]], ["del", "theorem", "X_prev_iso_zero_comp_d_to", ["homological_complex"]], ["add", "theorem", "d_from_comp_X_next_iso_self", ["homological_complex"]], ["del", "theorem", "d_from_comp_X_next_iso_zero", ["homological_complex"]]]}]}, {"timestamp": 1659995075, "sha": "fb478f66", "message": "chore(data/sign): simplify definition of multiplication (#15920)\nRemoving cases from the match results in better definitional equalities, and is also shorter.\nThis also eliminates the separate `mul` definition for consistency with how the `has_neg` instance has the definition inlined.", "changes": [{"oldPath": "src/data/sign.lean", "newPath": "src/data/sign.lean", "changes": [["del", "def", "mul", ["sign_type"]]]}]}, {"timestamp": 1659995074, "sha": "6fcb704b", "message": "chore(field_theory/polynomial_galois_group): golf `gal_action_hom` (#15919)\nWe already have a more general version of this definition, we may as well implement the specialization in terms of it.", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}]}, {"timestamp": 1659995073, "sha": "5be8529e", "message": "chore(tactic/doc_commands): simpler tactic_doc / library_note encoding (#15913)\nThis does some encoding optimizations on the documentation commands:\n* Long strings inside `expr` is a source of stack overflows in lean external checkers because the translation uses a chain of `string.cons` applications, so we should avoid putting doc strings in exprs.\n* There is no need to hash names for either `library_note` or `tactic_doc`, because they already come with a unique name.\nConcretely:\n* Instead of encoding `/-- doc -/ library_note \"my note\"` as\n ```lean\n @[library_note] def library_note._1234 := (\"my note\", \"doc\")\n ```\n we encode it as\n ```lean\n /-- doc -/\n @[library_note] def library_note.«my note» := ()\n ```\n so we don't have to do any string -> expr encoding.\n* Similarly, the `description` field is removed from `tactic_doc_entry` and its data is moved to the doc string.", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}]}, {"timestamp": 1659995072, "sha": "b9762673", "message": "chore(data/real/ennreal): deduplicate `ennreal.nat_ne_top` (#15853)\nThe lemmas `ennreal.nat_ne_top` and `ennreal.coe_nat_ne_top` are near duplicates, with the former being a `simp` lemma taking an explicit argument, and the latter being a non-`simp` lemma taking an implicit argument. The former is used slightly more frequently (in explicit form) in mathlib. We remove `ennreal.coe_nat_ne_top` in favor of `ennreal.nat_ne_top`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "coe_nat_ne_top", ["ennreal"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}]}, {"timestamp": 1659995071, "sha": "b353d8e9", "message": "chore(data/polynomial/degree/lemmas): rename lemmas that should have been renamed in an earlier PR (#15819)\nIn #15694 I was asked to modify some of these lemmas, but forgot to update their names to their new statements. This PR corrects this oversight.", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "coeff_add_eq_right_of_lt", ["polynomial"]], ["del", "theorem", "coeff_add_succ_eq_right_of_le", ["polynomial"]], ["add", "theorem", "coeff_sub_eq_left_of_lt", ["polynomial"]], ["add", "theorem", "coeff_sub_eq_neg_right_of_lt", ["polynomial"]], ["del", "theorem", "coeff_sub_succ_eq_left_of_le", ["polynomial"]], ["del", "theorem", "coeff_sub_succ_eq_neg_right_of_le", ["polynomial"]]]}]}, {"timestamp": 1659995070, "sha": "c9dc8c1f", "message": "feat(src/data/polynomial/degree/definitions.lean): a lemma about monic polynomials (#15818)\nA polynomial is monic is its degree is at most `n` and its `n`-th coefficient equals `1`.\nThis is a lemma that `tactic.interactive.compute_degree` uses.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_eq_of_le_of_coeff_ne_zero", ["polynomial"]], ["add", "theorem", "monic_of_degree_le_of_coeff_eq_one", ["polynomial"]], ["add", "theorem", "monic_of_nat_degree_le_of_coeff_eq_one", ["polynomial"]], ["add", "theorem", "nat_degree_eq_of_le_of_coeff_ne_zero", ["polynomial"]]]}]}, {"timestamp": 1659995069, "sha": "e75326d4", "message": "feat(category/idempotents): extension of functors to the idempotent completion (#15746)\nThis PR show that functors `C ⥤ karoubi D` can be canonically extended to functors `karoubi C ⥤ karoubi D`.", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "congr_map", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/idempotents/functor_categories.lean", "newPath": "src/category_theory/idempotents/functor_categories.lean", "changes": [["add", "theorem", "app_comp_p", ["category_theory", "idempotents"]], ["add", "theorem", "app_idem", ["category_theory", "idempotents"]], ["add", "theorem", "app_p_comm", ["category_theory", "idempotents"]], ["add", "theorem", "app_p_comp", ["category_theory", "idempotents"]]]}, {"oldPath": null, "newPath": "src/category_theory/idempotents/functor_extension.lean", "changes": [["add", "def", "map", ["category_theory", "idempotents", "functor_extension₁"]], ["add", "def", "obj", ["category_theory", "idempotents", "functor_extension₁"]], ["add", "def", "functor_extension₁", ["category_theory", "idempotents"]], ["add", "theorem", "functor_extension₁_comp_whiskering_left_to_karoubi", ["category_theory", "idempotents"]], ["add", "theorem", "nat_trans_eq", ["category_theory", "idempotents"]]]}]}, {"timestamp": 1659995068, "sha": "0a34b827", "message": "feat(field_theory/splitting_field): Add `image_root_set` (#15743)\nThis PR adds a short lemma `image_root_set` and uses it to prove that `is_splitting_field` is preserved by algebra isomorphisms.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "adjoin_root_set_eq_range", ["polynomial"]], ["add", "theorem", "image_root_set", ["polynomial"]], ["add", "theorem", "of_alg_equiv", ["polynomial", "is_splitting_field"]]]}]}, {"timestamp": 1659995067, "sha": "4ece2ee4", "message": "feat(geometry/manifold/smooth_manifold_with_corners): properties to prove smoothness of mfderiv (#15523)\n* Define `achart`\n* Rename and reformulate `mem_maximal_atlas_of_mem_atlas -> subset_maximal_atlas`\n* Used to prove smoothness of `mfderiv` (that result still has to be generalized to `mfderiv_within`, so is not included yet)\n* From the sphere eversion project", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "def", "achart", []], ["add", "theorem", "achart_def", []], ["add", "theorem", "achart_val", []], ["add", "theorem", "coe_achart", []], ["del", "theorem", "mem_maximal_atlas_of_mem_atlas", ["structure_groupoid"]], ["add", "theorem", "subset_maximal_atlas", ["structure_groupoid"]]]}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "cont_mdiff_at_iff_cont_mdiff_at_nhds", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "cont_diff_on_ext_coord_change", []], ["add", "theorem", "cont_diff_within_at_ext_coord_change", []], ["add", "theorem", "ext_chart_at_target", []], ["add", "theorem", "ext_chart_model_space_apply", []], ["mod", "theorem", "ext_chart_model_space_eq_id", []], ["add", "theorem", "ext_chart_preimage_mem_nhds'", []], ["add", "theorem", "ext_chart_self_apply", []], ["add", "theorem", "ext_chart_self_eq", []], ["add", "theorem", "ext_coord_change_source", []], ["add", "theorem", "injective", ["model_with_corners"]], ["del", "theorem", "mem_maximal_atlas_of_mem_atlas", ["smooth_manifold_with_corners"]], ["add", "theorem", "subset_maximal_atlas", ["smooth_manifold_with_corners"]]]}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": []}]}, {"timestamp": 1659995065, "sha": "0271f812", "message": "feat(order/bounded_order): More `disjoint` lemmas (#15304)", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "codisjoint_left_comm", []], ["add", "theorem", "codisjoint_right_comm", []], ["add", "theorem", "le_of_codisjoint", ["disjoint"]], ["add", "theorem", "disjoint_left_comm", []], ["add", "theorem", "disjoint_right_comm", []]]}]}, {"timestamp": 1659995064, "sha": "77b8e3cc", "message": "feat(data/set/pointwise): add `mem_pow` and `mem_prod_list_of_fn` (#15049)\nThese are specifically motivated by non-commutative monoids, hence the use of `list.prod` instead of `finset.prod`.", "changes": [{"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "coe_list_prod", ["finset"]], ["add", "theorem", "mem_pow", ["finset"]], ["add", "theorem", "mem_prod_list_of_fn", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "mem_list_prod", ["set"]], ["add", "theorem", "mem_pow", ["set"]], ["add", "theorem", "mem_prod_list_of_fn", ["set"]]]}]}, {"timestamp": 1659985295, "sha": "c7963f40", "message": "chore(data/mv_polynomial/basic): generalize lemmas about evaluation at zero (#15929)\nThis adds unapplied versions of the simp lemmas so that they apply more generally, and adds missing versions for `mv_polynomial.eval` and `mv_polynomial.eval₂`.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "eval_zero'", ["mv_polynomial"]], ["add", "theorem", "eval_zero", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_zero'", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_zero'_apply", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_zero", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_zero_apply", ["mv_polynomial"]], ["add", "theorem", "eval₂_zero'_apply", ["mv_polynomial"]], ["add", "theorem", "eval₂_zero_apply", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1659985293, "sha": "1eb1aff5", "message": "feat(category_theory): functors preserving exactness are left and right exact (#15900)\nThis is the inverse statement to #14581.", "changes": [{"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "def", "preserves_cokernels_of_map_exact", ["category_theory", "functor"]], ["add", "theorem", "preserves_epimorphisms_of_map_exact", ["category_theory", "functor"]], ["add", "def", "preserves_finite_colimits_of_map_exact", ["category_theory", "functor"]], ["add", "def", "preserves_finite_limits_of_map_exact", ["category_theory", "functor"]], ["add", "def", "preserves_kernels_of_map_exact", ["category_theory", "functor"]], ["add", "theorem", "preserves_monomorphisms_of_map_exact", ["category_theory", "functor"]], ["add", "theorem", "preserves_zero_morphisms_of_map_exact", ["category_theory", "functor"]]]}]}, {"timestamp": 1659985292, "sha": "acf8294d", "message": "feat(order/rel_iso): `well_founded (quotient.lift₂ r H) ↔ well_founded r` (#15890)", "changes": [{"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "coe_quotient_out", ["function", "embedding"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "well_founded_lift₂_iff", []]]}]}, {"timestamp": 1659977504, "sha": "7edb6d5d", "message": "refactor(algebra/field/basic): generalize some lemmas to division monoids (#15845)\nGeneralize various lemmas about the relation of division and negation from `division_ring` to any `division_monoid` with `has_distrib_neg`. This permits these lemmas to apply to `units K` where `ring K`, and to `sign_type`.", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}]}, {"timestamp": 1659977503, "sha": "ab2c6a7b", "message": "feat(ring_theory/polynomial/chebyshev): general cleanup (#15799)\nWe move `map_T` to save on some `variables` blocks, and clean up some spacing.", "changes": [{"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": [["mod", "theorem", "T_add_two", ["polynomial", "chebyshev"]], ["mod", "theorem", "T_derivative_eq_U", ["polynomial", "chebyshev"]], ["mod", "theorem", "T_eq_U_sub_X_mul_U", ["polynomial", "chebyshev"]], ["mod", "theorem", "T_eq_X_mul_T_sub_pol_U", ["polynomial", "chebyshev"]], ["mod", "theorem", "T_mul", ["polynomial", "chebyshev"]], ["mod", "theorem", "T_of_two_le", ["polynomial", "chebyshev"]], ["mod", "theorem", "T_two", ["polynomial", "chebyshev"]], ["mod", "theorem", "U_add_two", ["polynomial", "chebyshev"]], ["mod", "theorem", "U_eq_X_mul_U_add_T", ["polynomial", "chebyshev"]], ["mod", "theorem", "U_of_two_le", ["polynomial", "chebyshev"]], ["mod", "theorem", "U_two", ["polynomial", "chebyshev"]], ["mod", "theorem", "map_T", ["polynomial", "chebyshev"]], ["mod", "theorem", "map_U", ["polynomial", "chebyshev"]], ["mod", "theorem", "mul_T", ["polynomial", "chebyshev"]]]}]}, {"timestamp": 1659977502, "sha": "56734db1", "message": "feat(ring_theory/adjoin_root): adjoin_root is noetherian (#15737)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1659970717, "sha": "49cc82c8", "message": "chore(data/mv_polynomial/basic): missing injectivity lemmas (#15928)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "X_inj", ["mv_polynomial"]], ["add", "theorem", "X_injective", ["mv_polynomial"]], ["add", "theorem", "monomial_left_inj", ["mv_polynomial"]], ["add", "theorem", "monomial_left_injective", ["mv_polynomial"]]]}]}, {"timestamp": 1659956657, "sha": "11bd2a08", "message": "feat(big_operators/basic): sum of count over finset.filter equals countp (#15393)\nThe sum of `l.count x` over `x` in `l.to_finset.filter p` is equal to `l.countp p`.\nAlso includes `prod_eq_one` instances for `list` and `multiset`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "sum_filter_count_eq_countp", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "prod_eq_one", ["multiset"]], ["add", "theorem", "prod_eq_pow_single", ["multiset"]], ["add", "theorem", "prod_map_eq_pow_single", ["multiset"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "prod_eq_one", ["list"]]]}, {"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "prod_eq_pow_single", ["list"]], ["add", "theorem", "prod_map_eq_pow_single", ["list"]]]}, {"oldPath": "src/data/list/dedup.lean", "newPath": "src/data/list/dedup.lean", "changes": [["add", "theorem", "count_dedup", ["list"]], ["add", "theorem", "sum_map_count_dedup_eq_length", ["list"]], ["add", "theorem", "sum_map_count_dedup_filter_eq_countp", ["list"]]]}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["add", "theorem", "count_eq_of_nodup", ["list"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["add", "theorem", "count_eq_of_nodup", ["multiset"]]]}]}, {"timestamp": 1659940525, "sha": "a81ef2fd", "message": "perf(number_theory/padics/hensel): squeeze simps (#15926)\nThis avoids a timeout in #15890.", "changes": [{"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}]}, {"timestamp": 1659931678, "sha": "7fbadc69", "message": "chore(order/basic): move `Prop.partial_order` to `order/basic` (#15884)\nThis ensures, among other things, that `r ≤ s` is almost always available as notation for subrelations.\nWe don't move `Prop.linear_order` since doing so means we need to manually prove `or = max_default` and `and = min_default`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "le_Prop_eq", []], ["add", "theorem", "subrelation_iff_le", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["del", "theorem", "le_Prop_eq", []], ["del", "theorem", "subrelation_iff_le", []]]}]}, {"timestamp": 1659922790, "sha": "dff563ec", "message": "doc(data/countable/small): fix module docs (#15924)", "changes": [{"oldPath": "src/data/countable/small.lean", "newPath": "src/data/countable/small.lean", "changes": []}]}, {"timestamp": 1659922789, "sha": "46ba96e7", "message": "feat(data/sign): more lemmas (#15917)\nAdd various lemmas for manipulation of `sign_type` and the `sign`\nfunction.", "changes": [{"oldPath": "src/data/sign.lean", "newPath": "src/data/sign.lean", "changes": [["add", "theorem", "sign_eq_neg_one_iff", []], ["add", "theorem", "sign_eq_one_iff", []], ["add", "theorem", "sign_nonneg_iff", []], ["add", "theorem", "sign_nonpos_iff", []], ["add", "theorem", "le_neg_one_iff", ["sign_type"]], ["add", "theorem", "le_one", ["sign_type"]], ["add", "theorem", "lt_one_iff", ["sign_type"]], ["add", "theorem", "neg_eq_self_iff", ["sign_type"]], ["add", "theorem", "neg_iff", ["sign_type"]], ["add", "theorem", "neg_one_le", ["sign_type"]], ["add", "theorem", "neg_one_lt_iff", ["sign_type"]], ["add", "theorem", "neg_one_lt_one", ["sign_type"]], ["add", "theorem", "nonneg_iff", ["sign_type"]], ["add", "theorem", "nonneg_iff_ne_neg_one", ["sign_type"]], ["add", "theorem", "nonpos_iff", ["sign_type"]], ["add", "theorem", "nonpos_iff_ne_one", ["sign_type"]], ["add", "theorem", "not_lt_neg_one", ["sign_type"]], ["add", "theorem", "not_one_lt", ["sign_type"]], ["add", "theorem", "one_le_iff", ["sign_type"]], ["add", "theorem", "pos_iff", ["sign_type"]], ["add", "theorem", "self_eq_neg_iff", ["sign_type"]]]}]}, {"timestamp": 1659922788, "sha": "a0c5aef8", "message": "feat(data/sym/sym2): `sym2.lift₂` (#15887)\nWe add `sym2.lift₂`, a two-argument version of `sym2.lift`. Its intended purpose is for defining the relation on unordered pairs relating pairs where exactly one entry decreases.\nWe also generalize the types for the existing `funext₂` and `funext₃`.", "changes": [{"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["add", "theorem", "coe_lift₂_symm_apply", ["sym2"]], ["add", "def", "lift₂", ["sym2"]], ["add", "theorem", "lift₂_mk", ["sym2"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "funext₂", []], ["mod", "theorem", "funext₃", []]]}]}, {"timestamp": 1659922787, "sha": "e992b757", "message": "feat(data/list/of_fn): last_of_fn (#15474)\nAlso `of_fn_eq_nil_iff`.", "changes": [{"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["add", "theorem", "last_of_fn", ["list"]], ["add", "theorem", "last_of_fn_succ", ["list"]], ["add", "theorem", "of_fn_eq_nil_iff", ["list"]]]}]}, {"timestamp": 1659914250, "sha": "9a4dde32", "message": "feat(field_theory/polynomial_galois_group): add `mul_semiring_action` instance for `polynomial.gal` (#15914)", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}]}, {"timestamp": 1659914248, "sha": "1e594c77", "message": "chore(data/multiset/basic): move theorems around (#15882)\nThis PR does the following:\n- move the `singleton` instance earlier (I want this defined before `to_list` for a subsequent PR)\n- move the `order_bot` instance earlier and minor golfs", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "le_zero", ["multiset"]]]}]}, {"timestamp": 1659914247, "sha": "0e9c7c16", "message": "feat(order/initial_seg): exchange `down` and `down'` (#15802)\nAs customary throughout mathlib, we prime the structure field, and unprime any theorem subsequently derived from it.", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["del", "theorem", "down'", ["principal_seg"]], ["add", "theorem", "down", ["principal_seg"]], ["mod", "theorem", "lt_top", ["principal_seg"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1659914246, "sha": "530b948f", "message": "chore(ring_theory/dedekind_domain): better, computable, defeq in `cancel_comm_monoid_with_zero` instance (#15752)\nThe `ideal.cancel_comm_monoid_with_zero` instance transports the cancellativity property across the injection from `ideal` into `fractional_ideal`. However, it also transported all the operations on ideals, making the instance `noncomputable`. We can just use the `ideal.semiring` instance for all these operations so the instance becomes computable again. In addition, this results in better defeq as we don't have to unfold through `fractional_ideal` to get to multiplication.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}]}, {"timestamp": 1659914245, "sha": "05307825", "message": "chore(order/well_founded): golf + rename variables (#15730)\nWe rename some variables and hypotheses with very odd names, and golf a proof.", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["mod", "theorem", "self_le_of_strict_mono", ["well_founded"]]]}]}, {"timestamp": 1659914244, "sha": "16478385", "message": "feat(set_theory/zfc/basic): `pSet` with empty type is equivalent to `Ø` (#15550)\nWe also add `Set.equiv_iff`, which unfolds the definition of `equiv` in terms of `Set.func` and `Set.type`.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "exists_left", ["pSet", "equiv"]], ["add", "theorem", "exists_right", ["pSet", "equiv"]], ["add", "theorem", "equiv_iff", ["pSet"]], ["del", "theorem", "exists_equiv_left", ["pSet"]], ["del", "theorem", "exists_equiv_right", ["pSet"]]]}]}, {"timestamp": 1659910262, "sha": "9e9c3ab5", "message": "chore(analysis/convex/cone): fix typeclass assumption and add a missing lemma (#15879)\nWe fix a typeclass assumption: `ordered_add_comm_group` to `add_comm_group`. The ordered structure is never used.\nAlso add a missing lemma: `mem_map`.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "mem_map", ["convex_cone"]]]}]}, {"timestamp": 1659889876, "sha": "a6b56ec2", "message": "refactor(analysis/normed_space/operator_norm): generalize `continuous_linear_map.lmul` to non-unital algebras (#15868)\nAfter the recent refactor in #15310 of `algebra.lmul` (resulting in `linear_map.mul` in particular) the type class restrictions on `continuous_linear_map.lmul` (and `continuous_linear_map.lmul_right` and `continuous_linear_map.lmul_right_left`) can be weakened to non-unital normed algebras, which we do here.\n`continuous_linear_map.lmulₗᵢ` and `continuous_linear_map.lmul_rightₗᵢ` have not had their type class requirements weakened because they require `norm_one_class`, and hence unital algebras. In many non-unital algebras (including all non-unital normed algebras with an approximate unit, and hence all C⋆-algebras), the maps `continuous_linear_map.lmul` (and `lmul_right`) are nevertheless isometric, but this requires other properties so they are not implemented here.", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "coe_lmul_rightₗᵢ", ["continuous_linear_map"]], ["mod", "theorem", "coe_lmulₗᵢ", ["continuous_linear_map"]], ["mod", "def", "lmul_rightₗᵢ", ["continuous_linear_map"]], ["mod", "def", "lmulₗᵢ", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_lmul_apply", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_lmul_right_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1659884241, "sha": "a97d85de", "message": "feat(measure_theory/function/ae_eq_of_integral): remove a finite_measure assumption (#15899)", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg", ["measure_theory"]], ["del", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_finite_measure", ["measure_theory"]], ["del", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_finite_measure_of_strongly_measurable", ["measure_theory"]], ["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "ae_nonneg_restrict_of_forall_set_integral_nonneg_inter", ["measure_theory"]], ["del", "theorem", "ae_nonneg_of_forall_set_integral_nonneg", ["measure_theory", "integrable"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["mod", "theorem", "condexp_sub_nonneg", ["measure_theory", "submartingale"]]]}]}, {"timestamp": 1659867412, "sha": "2be2f2cb", "message": "feat(analysis/normed_space/multilinear): constant scalar multiplication is continuous (#15897)\nThis PR adds an instance for continuous multilinear maps that gives continuous scalar multiplication.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}]}, {"timestamp": 1659864719, "sha": "9a5b9842", "message": "doc(linear_algebra/clifford_algebra/basic): docstring clarification (#15892)", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}]}, {"timestamp": 1659857385, "sha": "e2333f32", "message": "feat(probability/upcrossing): Doob's upcrossing estimate (#14933)\nThis PR proves Doob's upcrossing estimate which is central for the martingale convergence theorems.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": [["add", "theorem", "pos_eq_self_of_one_lt_pos", ["lattice_ordered_comm_group"]]]}, {"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/hitting_time.lean", "changes": [["add", "theorem", "hitting_eq_hitting_of_exists", ["measure_theory"]], ["add", "theorem", "is_stopping_time_hitting_is_stopping_time", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["add", "theorem", "martingale_const", ["measure_theory"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "adapted_const", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/probability/upcrossing.lean", "changes": [["add", "theorem", "integrable_upcrossings_before", ["measure_theory", "adapted"]], ["add", "theorem", "is_stopping_time_crossing", ["measure_theory", "adapted"]], ["add", "theorem", "is_stopping_time_lower_crossing_time", ["measure_theory", "adapted"]], ["add", "theorem", "is_stopping_time_upper_crossing_time", ["measure_theory", "adapted"]], ["add", "theorem", "measurable_upcrossings", ["measure_theory", "adapted"]], ["add", "theorem", "measurable_upcrossings_before", ["measure_theory", "adapted"]], ["add", "theorem", "upcrossing_strat_adapted", ["measure_theory", "adapted"]], ["add", "theorem", "crossing_eq_crossing_of_lower_crossing_time_lt", ["measure_theory"]], ["add", "theorem", "crossing_eq_crossing_of_upper_crossing_time_lt", ["measure_theory"]], ["add", "theorem", "crossing_pos_eq", ["measure_theory"]], ["add", "theorem", "exists_upper_crossing_time_eq", ["measure_theory"]], ["add", "theorem", "integral_mul_upcrossings_before_le_integral", ["measure_theory"]], ["add", "theorem", "le_sub_of_le_upcrossings_before", ["measure_theory"]], ["add", "def", "lower_crossing_time", ["measure_theory"]], ["add", "def", "lower_crossing_time_aux", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_le", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_le_upper_crossing_time_succ", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_lt_of_lt_upcrossings_before", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_lt_upper_crossing_time", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_mono", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_stabilize'", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_stabilize", ["measure_theory"]], ["add", "theorem", "lower_crossing_time_zero", ["measure_theory"]], ["add", "theorem", "mul_integral_upcrossings_before_le_integral_pos_part_aux1", ["measure_theory"]], ["add", "theorem", "mul_integral_upcrossings_before_le_integral_pos_part_aux2", ["measure_theory"]], ["add", "theorem", "mul_upcrossings_before_le", ["measure_theory"]], ["add", "theorem", "stopped_value_lower_crossing_time", ["measure_theory"]], ["add", "theorem", "stopped_value_upper_crossing_time", ["measure_theory"]], ["add", "theorem", "sub_eq_zero_of_upcrossings_before_lt", ["measure_theory"]], ["add", "theorem", "mul_integral_upcrossings_before_le_integral_pos_part", ["measure_theory", "submartingale"]], ["add", "theorem", "mul_lintegral_upcrossings_le_lintegral_pos_part", ["measure_theory", "submartingale"]], ["add", "theorem", "sum_mul_upcrossing_strat_le", ["measure_theory", "submartingale"]], ["add", "theorem", "sum_sub_upcrossing_strat_mul", ["measure_theory", "submartingale"]], ["add", "theorem", "sum_upcrossing_strat_mul", ["measure_theory", "submartingale"]], ["add", "def", "upcrossing_strat", ["measure_theory"]], ["add", "theorem", "upcrossing_strat_le_one", ["measure_theory"]], ["add", "theorem", "upcrossing_strat_nonneg", ["measure_theory"]], ["add", "def", "upcrossings_before", ["measure_theory"]], ["add", "theorem", "upcrossings_before_bot", ["measure_theory"]], ["add", "theorem", "upcrossings_before_eq_sum", ["measure_theory"]], ["add", "theorem", "upcrossings_before_le", ["measure_theory"]], ["add", "theorem", "upcrossings_before_lt_of_exists_upcrossing", ["measure_theory"]], ["add", "theorem", "upcrossings_before_mono", ["measure_theory"]], ["add", "theorem", "upcrossings_before_pos_eq", ["measure_theory"]], ["add", "theorem", "upcrossings_before_zero'", ["measure_theory"]], ["add", "theorem", "upcrossings_before_zero", ["measure_theory"]], ["add", "theorem", "upcrossings_lt_top_iff", ["measure_theory"]], ["add", "def", "upper_crossing_time", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_bound_eq", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_eq_of_bound_le", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_eq_of_upcrossings_before_lt", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_eq_upper_crossing_time_of_lt", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_le", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_le_lower_crossing_time", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_lt_bdd_above", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_lt_lower_crossing_time", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_lt_nonempty", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_lt_of_le_upcrossings_before", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_lt_succ", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_mono", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_stabilize'", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_stabilize", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_succ", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_succ_eq", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_zero'", ["measure_theory"]], ["add", "theorem", "upper_crossing_time_zero", ["measure_theory"]]]}]}, {"timestamp": 1659777444, "sha": "14d34b71", "message": "feat(topology/metric_space/*): `additive`/`multiplicative`/`order_dual` instances (#15704)\nTransfer topology, bornology, uniform space and metric space instances to `additive`, `multiplicative` and `order_dual`.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/bornology/constructions.lean", "newPath": "src/topology/bornology/constructions.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_of_add", []], ["add", "theorem", "continuous_of_dual", []], ["add", "theorem", "continuous_of_mul", []], ["add", "theorem", "continuous_to_add", []], ["add", "theorem", "continuous_to_dual", []], ["add", "theorem", "continuous_to_mul", []], ["add", "theorem", "is_closed_map_of_add", []], ["add", "theorem", "is_closed_map_of_dual", []], ["add", "theorem", "is_closed_map_of_mul", []], ["add", "theorem", "is_closed_map_to_add", []], ["add", "theorem", "is_closed_map_to_dual", []], ["add", "theorem", "is_closed_map_to_mul", []], ["add", "theorem", "is_open_map_of_add", []], ["add", "theorem", "is_open_map_of_dual", []], ["add", "theorem", "is_open_map_of_mul", []], ["add", "theorem", "is_open_map_to_add", []], ["add", "theorem", "is_open_map_to_dual", []], ["add", "theorem", "is_open_map_to_mul", []], ["add", "theorem", "nhds_of_add", []], ["add", "theorem", "nhds_of_dual", []], ["add", "theorem", "nhds_of_mul", []], ["add", "theorem", "nhds_to_add", []], ["add", "theorem", "nhds_to_dual", []], ["add", "theorem", "nhds_to_mul", []]]}, {"oldPath": "src/topology/metric_space/algebra.lean", "newPath": "src/topology/metric_space/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_of_add", []], ["add", "theorem", "dist_of_dual", []], ["add", "theorem", "dist_of_mul", []], ["add", "theorem", "dist_to_add", []], ["add", "theorem", "dist_to_dual", []], ["add", "theorem", "dist_to_mul", []], ["add", "theorem", "nndist_of_add", []], ["add", "theorem", "nndist_of_dual", []], ["add", "theorem", "nndist_of_mul", []], ["add", "theorem", "nndist_to_add", []], ["add", "theorem", "nndist_to_dual", []], ["add", "theorem", "nndist_to_mul", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_of_add", []], ["add", "theorem", "edist_of_dual", []], ["add", "theorem", "edist_of_mul", []], ["add", "theorem", "edist_to_add", []], ["add", "theorem", "edist_to_dual", []], ["add", "theorem", "edist_to_mul", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_of_add", []], ["add", "theorem", "uniform_continuous_of_mul", []], ["add", "theorem", "uniform_continuous_to_add", []], ["add", "theorem", "uniform_continuous_to_mul", []], ["add", "theorem", "uniformity_additive", []], ["add", "theorem", "uniformity_multiplicative", []]]}]}, {"timestamp": 1659763978, "sha": "e3d2f74c", "message": "feat(data/nat): Add new binary recursors; prove the relationship between `nat.bits` and other pieces of code (#14990)\nThis is in connection to https://github.com/leanprover-community/mathlib/pull/13208, because I was asked to write `to_bits` in terms of `nat.size` and `nat.bits`, but `nat.bits` was hard to use (there were no lemmas about it). This PR proves some statements about `nat.bits`, so that it can finally be used.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "inth_zero_eq_head", ["list"]]]}, {"oldPath": null, "newPath": "src/data/nat/bits.lean", "changes": [["add", "def", "binary_rec'", ["nat"]], ["add", "theorem", "binary_rec_eq'", ["nat"]], ["add", "def", "binary_rec_from_one", ["nat"]], ["add", "theorem", "bit0_bits", ["nat"]], ["add", "theorem", "bit1_bits", ["nat"]], ["add", "theorem", "bit_eq_zero_iff", ["nat"]], ["add", "theorem", "bits_append_bit", ["nat"]], ["add", "theorem", "bodd_eq_bits_head", ["nat"]], ["add", "theorem", "div2_bits_eq_tail", ["nat"]], ["add", "theorem", "one_bits", ["nat"]], ["add", "theorem", "size_eq_bits_len", ["nat"]], ["add", "theorem", "zero_bits", ["nat"]]]}, {"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": [["add", "theorem", "test_bit_eq_inth", ["nat"]]]}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "digits_two_eq_bits", ["nat"]]]}]}, {"timestamp": 1659747685, "sha": "dffc243a", "message": "feat(order/complete_lattice): add `equiv.supr_congr` and `equiv.supr_comp` lemmas (#15852)\nAdds these lemmas as easy consequences of the `function.surjective` versions in order to aid in discovery.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_comp", ["equiv"]], ["add", "theorem", "supr_comp", ["equiv"]], ["del", "theorem", "infi_congr", ["function", "surjective"]]]}]}, {"timestamp": 1659738849, "sha": "d5344df1", "message": "feat(algebra/order/ring): lt_mul_{left,right,self} (#15848)", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "lt_mul_left", []], ["add", "theorem", "lt_mul_right", []], ["add", "theorem", "lt_mul_self", []]]}]}, {"timestamp": 1659727338, "sha": "d1795d68", "message": "feat(topology/algebra/module/basic): continuous versions of `linear_map.comp_sub` and variants (#15870)", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "theorem", "comp_neg", ["continuous_linear_map"]], ["add", "theorem", "comp_sub", ["continuous_linear_map"]], ["add", "theorem", "neg_comp", ["continuous_linear_map"]], ["add", "theorem", "sub_comp", ["continuous_linear_map"]]]}]}, {"timestamp": 1659702942, "sha": "68cc6138", "message": "feat(algebraic_geometry/open_immersion): Restricting a morphism twice is isomorphic to one restriction. (#15710)", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["mod", "def", "affine_basic_open", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "image_is_open_immersion", ["algebraic_geometry", "is_affine_open"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "open_cover_of_supr_eq_top", ["algebraic_geometry", "Scheme"]], ["add", "def", "opens_range", ["algebraic_geometry", "is_open_immersion"]], ["add", "def", "morphism_restrict_eq", ["algebraic_geometry"]], ["add", "def", "morphism_restrict_opens_range", ["algebraic_geometry"]], ["add", "def", "morphism_restrict_restrict", ["algebraic_geometry"]], ["add", "def", "morphism_restrict_restrict_basic_open", ["algebraic_geometry"]]]}, {"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "def", "iso_mk'", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/morphism_property.lean", "newPath": "src/category_theory/morphism_property.lean", "changes": [["add", "theorem", "arrow_iso_iff", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "arrow_mk_iso_iff", ["category_theory", "morphism_property", "respects_iso"]]]}]}, {"timestamp": 1659694764, "sha": "2ddf74ab", "message": "feat(set_theory/game/nim): lemmas about `nim 1` (#14787)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "default_nim_one_left_moves_eq", ["pgame"]], ["add", "theorem", "default_nim_one_right_moves_eq", ["pgame"]], ["add", "theorem", "nim_one_move_left", ["pgame"]], ["add", "theorem", "nim_one_move_right", ["pgame"]], ["add", "theorem", "to_left_moves_nim_one_symm", ["pgame"]], ["add", "theorem", "to_right_moves_nim_one_symm", ["pgame"]]]}]}, {"timestamp": 1659692052, "sha": "666c6e00", "message": "feat(set_theory/game/nim): Grundy value in terms of right moves (#15410)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["del", "theorem", "grundy_value_def", ["pgame"]], ["add", "theorem", "grundy_value_eq_mex_left", ["pgame"]], ["add", "theorem", "grundy_value_eq_mex_right", ["pgame"]], ["add", "theorem", "grundy_value_neg", ["pgame"]]]}]}, {"timestamp": 1659688904, "sha": "162413fa", "message": "fix(probability/notation): add missing spaces around operators in notation (#15862)\nThis ensures these operators are pretty-printed with spaces", "changes": [{"oldPath": "src/probability/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}]}, {"timestamp": 1659641411, "sha": "6120aac4", "message": "chore(data/seq/*): trivial spacing fixes (#15847)\nWe do `λx` → `λ x` and a single instance of `{ x }` → `{x}`.", "changes": [{"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": [["mod", "def", "empty", ["computation"]], ["mod", "theorem", "refl", ["computation", "equiv"]], ["mod", "def", "return", ["computation"]]]}, {"oldPath": "src/data/seq/parallel.lean", "newPath": "src/data/seq/parallel.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}]}, {"timestamp": 1659636533, "sha": "11cace15", "message": "feat(data/real/ennreal): add instance linear_ordered_comm_monoid_with_zero ℝ≥0∞ (#15851)\nAdding this instance also yields an instance of `zero_le_one_class` via type class inference, which gives access to `one_le_two`, so we remove `ennreal.one_le_two` in favor of `one_le_two`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "one_le_two", ["ennreal"]]]}, {"oldPath": "src/probability/variance.lean", "newPath": "src/probability/variance.lean", "changes": []}]}, {"timestamp": 1659625401, "sha": "7eaf3412", "message": "chore(analysis/mean_inequalities_pow): weaken assumptions on rpow_add_le_rpow (#15823)", "changes": [{"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": [["mod", "theorem", "rpow_add_le_add_rpow", ["ennreal"]], ["mod", "theorem", "rpow_add_le_add_rpow", ["nnreal"]]]}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}]}, {"timestamp": 1659625399, "sha": "20f68fc8", "message": "feat(field_theory/splitting_field): If an intermediate field contains all of the roots, then the polynomial splits (#15658)\nThis lemma came up when proving that if `p` splits in `L/K`, then `p.is_splitting_field K (adjoin K (p.root_set L))`", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "splits_of_splits", ["intermediate_field"]]]}]}, {"timestamp": 1659622802, "sha": "4d59d4af", "message": "feat(number_theory): [S/P^e : R/p] = e * [S/P : R/p], where e is ramification index (#15316)\nLet `S` be a Dedekind domain extending the commutative ring `R`, `p` a maximal ideal of `R`, `P` a prime ideal of `S`, and `e` the (nonzero) ramification index of `P` over `p`. Because the ramification index is nonzero, we get an inclusion `R/p → S/P` and we can compute that the degree of the field extension `[S/(P^e) : R/p]` is exactly `e` times `[S/P : R/p]`.\nThis is the next step in showing the fundamental identity of inertia degree and ramification index (#12287).\nSetting up the ingredients for the proof is quite complicated because it involves taking `(P^(i+1) / P^e)` as a `R/p`-subspace of `P^i / P^e` and basically each part of this structure would produce free metavariables if we naïvely assigned it an instance. In the end, the important parts are an instance for `S/(P^e)` as `R/p`-algebra and replacing subspaces with the image of inclusion maps.", "changes": [{"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": [["add", "theorem", "dim_pow_quot", ["ideal"]], ["add", "theorem", "dim_pow_quot_aux", ["ideal"]], ["add", "theorem", "dim_prime_pow_ramification_idx", ["ideal"]], ["add", "theorem", "finrank_prime_pow_ramification_idx", ["ideal"]], ["add", "theorem", "le_comap_of_ramification_idx_ne_zero", ["ideal"]], ["add", "def", "pow_quot_succ_inclusion", ["ideal"]], ["add", "theorem", "pow_quot_succ_inclusion_injective", ["ideal"]], ["add", "theorem", "algebra_map_quotient_of_ramification_idx_ne_zero", ["ideal", "quotient"]], ["add", "theorem", "algebra_map_quotient_pow_ramification_idx", ["ideal", "quotient"]], ["add", "def", "algebra_quotient_of_ramification_idx_ne_zero", ["ideal", "quotient"]], ["add", "theorem", "quotient_to_quotient_range_pow_quot_succ_aux_mk", ["ideal"]], ["add", "theorem", "quotient_to_quotient_range_pow_quot_succ_injective", ["ideal"]], ["add", "theorem", "quotient_to_quotient_range_pow_quot_succ_mk", ["ideal"]], ["add", "theorem", "quotient_to_quotient_range_pow_quot_succ_surjective", ["ideal"]]]}]}, {"timestamp": 1659607537, "sha": "5424d3f4", "message": "feat(category_theory/limits): has_limit F ↔ has_terminal (cone F) (#15797)\nThis will be used to show that `C` has limits of shape `J` if and only if `const J` has a right adjoint.", "changes": [{"oldPath": "src/category_theory/limits/cone_category.lean", "newPath": "src/category_theory/limits/cone_category.lean", "changes": [["add", "theorem", "has_colimit_iff_has_initial_cocone", ["category_theory", "limits"]], ["add", "theorem", "has_limit_iff_has_terminal_cone", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "theorem", "has_initial", ["category_theory", "limits", "is_initial"]], ["add", "theorem", "has_terminal", ["category_theory", "limits", "is_terminal"]]]}]}, {"timestamp": 1659601679, "sha": "4f3245c3", "message": "feat(topology/continuous_function/basic): inverse equations for `homeomorph.to_continuous_map` (#15708)\nThis PR adds two lemmas stating the left and right inverse of an `homeomorph.to_continuous_map`:\n-`homeomorph.symm_comp_to_continuous_map`, and\n-`homeomorph.comp_symm_to_continuous_map`\nSuggested by: @alreadydone", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "coe_refl", ["homeomorph"]], ["add", "theorem", "coe_trans", ["homeomorph"]], ["add", "theorem", "symm_comp_to_continuous_map", ["homeomorph"]], ["mod", "def", "to_continuous_map", ["homeomorph"]], ["add", "theorem", "to_continuous_map_as_coe", ["homeomorph"]], ["add", "theorem", "to_continuous_map_comp_symm", ["homeomorph"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "self_trans_symm", ["homeomorph"]], ["add", "theorem", "symm_trans_self", ["homeomorph"]]]}]}, {"timestamp": 1659555867, "sha": "0ba3098a", "message": "chore(data/seq/seq): use `terminates` predicate in `to_list_or_stream` (#15826)\nWe already have a canonical way to spell out that a sequence terminates, so we don't need to spell it in full.", "changes": [{"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["add", "theorem", "not_terminates_iff", ["seq"]], ["mod", "def", "to_list", ["seq"]], ["mod", "def", "to_list_or_stream", ["seq"]], ["mod", "def", "to_stream", ["seq"]]]}]}, {"timestamp": 1659546913, "sha": "131c39a4", "message": "chore(algebra/big_operators): reorder the definitions in `norm_num` extension (#15840)\nThis prepares for PR #15538, where `eval_finset` calls `eval_multiset`, which calls `eval_list`.\nBy reordering in a separate PR, we get a cleaner diff.", "changes": [{"oldPath": "src/algebra/big_operators/norm_num.lean", "newPath": "src/algebra/big_operators/norm_num.lean", "changes": []}]}, {"timestamp": 1659546912, "sha": "24a09b31", "message": "feat(tactic/field_simp): extend `field_simp` to partial division and units (#14897)\nExtend the `field_simp` tactic to deal with inverses of units in a general monoid/ring.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/.E2.9C.94.20.60field_simp.60.20for.20units/near/286896891)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "coe_div_eq_divp", []], ["add", "theorem", "divp_assoc'", []], ["mod", "theorem", "divp_divp_eq_divp_mul", []], ["mod", "theorem", "divp_eq_divp_iff", []], ["mod", "theorem", "divp_eq_iff_mul_eq", []], ["mod", "theorem", "divp_mul_divp", []], ["add", "theorem", "divp_mul_eq_mul_divp", []], ["add", "theorem", "eq_divp_iff_mul_eq", []], ["add", "theorem", "inv_eq_one_divp'", []], ["add", "theorem", "inv_eq_one_divp", []]]}, {"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": [["mod", "theorem", "divp_eq_div", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "add_divp", ["units"]], ["add", "theorem", "divp_add", ["units"]], ["add", "theorem", "divp_add_divp", ["units"]], ["add", "theorem", "divp_add_divp_same", ["units"]], ["add", "theorem", "divp_sub", ["units"]], ["add", "theorem", "divp_sub_divp", ["units"]], ["add", "theorem", "divp_sub_divp_same", ["units"]], ["mod", "theorem", "inv_eq_self_iff", ["units"]], ["add", "theorem", "neg_divp", ["units"]], ["add", "theorem", "sub_divp", ["units"]]]}, {"oldPath": "src/tactic/field_simp.lean", "newPath": "src/tactic/field_simp.lean", "changes": []}, {"oldPath": null, "newPath": "test/field_simp.lean", "changes": []}]}, {"timestamp": 1659544058, "sha": "acc7dfa5", "message": "chore(set_theory/surreal/basic): golf an instance (#15838)\n`subtype.setoid` is defeq to this manually specified instance.", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["mod", "def", "surreal", []]]}]}, {"timestamp": 1659544057, "sha": "c5e83e00", "message": "chore(analysis/convex/cone): set_like instance (#15715)\nThis removes lots of lemmas that are already in the `set_like` namespace.\n`convex_cone.ext'` is now `set_like.coe_injective`.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["mod", "theorem", "comap_id", ["convex_cone"]], ["del", "theorem", "ext'", ["convex_cone"]], ["mod", "theorem", "ext", ["convex_cone"]], ["mod", "theorem", "map_id", ["convex_cone"]], ["del", "theorem", "mem_coe", ["convex_cone"]]]}]}, {"timestamp": 1659536001, "sha": "dd6f53d8", "message": "chore(data/seq/seq): clean up spacing (#15825)\nAnd other small acts of golfing.", "changes": [{"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["mod", "theorem", "le_stable", ["seq"]], ["mod", "def", "nil", ["seq"]], ["mod", "theorem", "terminated_stable", ["seq"]], ["mod", "def", "seq", []]]}]}, {"timestamp": 1659536000, "sha": "1563242e", "message": "feat(linear_algebra/lagrange): Refactor lagrange interpolation and add extended proofs. (#15036)\nThe current formulation of Lagrange interpolants phrases things in terms of a finset of nodes, and functions interpolated at those nodes. This changes things in order to allow for indexed nodes and weights. It also extends various functionalities of the lagrange interpolation.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "sdiff_insert", ["finset"]], ["add", "theorem", "sdiff_insert_insert_of_mem_of_not_mem", ["finset"]], ["add", "theorem", "sdiff_sdiff_left'", ["finset"]]]}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": [["add", "theorem", "X_sub_C_dvd_nodal", ["lagrange"]], ["del", "def", "basis", ["lagrange"]], ["add", "def", "basis_divisor", ["lagrange"]], ["add", "theorem", "basis_divisor_add_symm", ["lagrange"]], ["add", "theorem", "basis_divisor_eq_zero_iff", ["lagrange"]], ["add", "theorem", "basis_divisor_inj", ["lagrange"]], ["add", "theorem", "basis_divisor_ne_zero_iff", ["lagrange"]], ["add", "theorem", "basis_divisor_self", ["lagrange"]], ["mod", "theorem", "basis_empty", ["lagrange"]], ["add", "theorem", "basis_eq_prod_sub_inv_mul_nodal_div", ["lagrange"]], ["add", "theorem", "basis_ne_zero", ["lagrange"]], ["add", "theorem", "basis_pair_left", ["lagrange"]], ["add", "theorem", "basis_pair_right", ["lagrange"]], ["add", "theorem", "basis_singleton", ["lagrange"]], ["del", "theorem", "basis_singleton_self", ["lagrange"]], ["add", "theorem", "degree_basis", ["lagrange"]], ["add", "theorem", "degree_basis_divisor_of_ne", ["lagrange"]], ["add", "theorem", "degree_basis_divisor_self", ["lagrange"]], ["del", "theorem", "degree_interpolate_erase", ["lagrange"]], ["add", "theorem", "degree_interpolate_erase_lt", ["lagrange"]], ["add", "theorem", "degree_interpolate_le", ["lagrange"]], ["mod", "theorem", "degree_interpolate_lt", ["lagrange"]], ["add", "theorem", "degree_nodal", ["lagrange"]], ["add", "theorem", "derivative_nodal", ["lagrange"]], ["mod", "theorem", "eq_interpolate", ["lagrange"]], ["add", "theorem", "eq_interpolate_iff", ["lagrange"]], ["mod", "theorem", "eq_interpolate_of_eval_eq", ["lagrange"]], ["del", "theorem", "eq_of_eval_eq", ["lagrange"]], ["del", "theorem", "eq_zero_of_eval_eq_zero", ["lagrange"]], ["del", "theorem", "eval_basis", ["lagrange"]], ["add", "theorem", "eval_basis_divisor_left_of_ne", ["lagrange"]], ["add", "theorem", "eval_basis_divisor_right", ["lagrange"]], ["del", "theorem", "eval_basis_ne", ["lagrange"]], ["add", "theorem", "eval_basis_not_at_node", ["lagrange"]], ["add", "theorem", "eval_basis_of_ne", ["lagrange"]], ["mod", "theorem", "eval_basis_self", ["lagrange"]], ["del", "theorem", "eval_interpolate", ["lagrange"]], ["add", "theorem", "eval_interpolate_at_node", ["lagrange"]], ["add", "theorem", "eval_interpolate_not_at_node'", ["lagrange"]], ["add", "theorem", "eval_interpolate_not_at_node", ["lagrange"]], ["add", "theorem", "eval_nodal", ["lagrange"]], ["add", "theorem", "eval_nodal_at_node", ["lagrange"]], ["add", "theorem", "eval_nodal_derivative_eval_node_eq", ["lagrange"]], ["add", "theorem", "eval_nodal_not_at_node", ["lagrange"]], ["mod", "def", "fun_equiv_degree_lt", ["lagrange"]], ["mod", "def", "interpolate", ["lagrange"]], ["del", "theorem", "interpolate_add", ["lagrange"]], ["mod", "theorem", "interpolate_empty", ["lagrange"]], ["add", "theorem", "interpolate_eq_add_interpolate_erase", ["lagrange"]], ["add", "theorem", "interpolate_eq_iff_values_eq_on", ["lagrange"]], ["del", "theorem", "interpolate_eq_interpolate_erase_add", ["lagrange"]], ["add", "theorem", "interpolate_eq_nodal_weight_mul_nodal_div_X_sub_C", ["lagrange"]], ["del", "theorem", "interpolate_eq_of_eval_eq", ["lagrange"]], ["add", "theorem", "interpolate_eq_of_values_eq_on", ["lagrange"]], ["add", "theorem", "interpolate_eq_sum_interpolate_insert_sdiff", ["lagrange"]], ["del", "theorem", "interpolate_neg", ["lagrange"]], ["add", "theorem", "interpolate_one", ["lagrange"]], ["mod", "theorem", "interpolate_singleton", ["lagrange"]], ["del", "theorem", "interpolate_smul", ["lagrange"]], ["del", "theorem", "interpolate_sub", ["lagrange"]], ["del", "theorem", "interpolate_zero", ["lagrange"]], ["del", "def", "linterpolate", ["lagrange"]], ["mod", "theorem", "nat_degree_basis", ["lagrange"]], ["add", "theorem", "nat_degree_basis_divisor_of_ne", ["lagrange"]], ["add", "theorem", "nat_degree_basis_divisor_self", ["lagrange"]], ["add", "def", "nodal", ["lagrange"]], ["add", "theorem", "nodal_empty", ["lagrange"]], ["add", "theorem", "nodal_eq", ["lagrange"]], ["add", "theorem", "nodal_eq_mul_nodal_erase", ["lagrange"]], ["add", "theorem", "nodal_erase_eq_nodal_div", ["lagrange"]], ["add", "theorem", "nodal_insert_eq_nodal", ["lagrange"]], ["add", "def", "nodal_weight", ["lagrange"]], ["add", "theorem", "nodal_weight_eq_eval_nodal_derative", ["lagrange"]], ["add", "theorem", "nodal_weight_eq_eval_nodal_erase_inv", ["lagrange"]], ["add", "theorem", "nodal_weight_ne_zero", ["lagrange"]], ["add", "theorem", "sum_basis", ["lagrange"]], ["add", "theorem", "sum_nodal_weight_mul_inv_sub_ne_zero", ["lagrange"]], ["add", "theorem", "values_eq_on_of_interpolate_eq", ["lagrange"]], ["add", "theorem", "eq_of_degree_sub_lt_of_eval_finset_eq", ["polynomial"]], ["add", "theorem", "eq_of_degree_sub_lt_of_eval_index_eq", ["polynomial"]], ["add", "theorem", "eq_of_degrees_lt_of_eval_finset_eq", ["polynomial"]], ["add", "theorem", "eq_of_degrees_lt_of_eval_index_eq", ["polynomial"]], ["add", "theorem", "eq_zero_of_degree_lt_of_eval_finset_eq_zero", ["polynomial"]], ["add", "theorem", "eq_zero_of_degree_lt_of_eval_index_eq_zero", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": [["add", "theorem", "eq_zero_of_forall_index_sum_mul_pow_eq_zero", ["matrix"]], ["add", "theorem", "eq_zero_of_forall_index_sum_pow_mul_eq_zero", ["matrix"]], ["add", "theorem", "eq_zero_of_forall_pow_sum_mul_pow_eq_zero", ["matrix"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "degree_lt_equiv_eq_zero_iff_eq_zero", ["polynomial"]], ["add", "theorem", "eval_eq_sum_degree_lt_equiv", ["polynomial"]]]}]}, {"timestamp": 1659526719, "sha": "637b58e8", "message": "feat(data/finsupp/basic): `alist.lookup` as a finitely supported function (#15443)\nReworked from #15396. The planned use case for this new definition is to facilitate giving the [Cantor Normal Form](https://leanprover-community.github.io/mathlib_docs/set_theory/ordinal/cantor_normal_form.html#ordinal.CNF) of an ordinal as a finitely supported function. See https://github.com/leanprover-community/mathlib/pull/15396#discussion_r922723604 for further discussion of the motivation.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "lookup_finsupp", ["alist"]], ["add", "theorem", "lookup_finsupp_surjective", ["alist"]], ["add", "theorem", "to_alist_lookup_finsupp", ["alist"]], ["add", "theorem", "mem_to_alist", ["finsupp"]], ["add", "def", "to_alist", ["finsupp"]], ["add", "theorem", "to_alist_keys_to_finset", ["finsupp"]]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["add", "theorem", "mem_lookup_iff", ["alist"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "fst_comp_to_sigma", ["prod"]]]}]}, {"timestamp": 1659526717, "sha": "798b4ae1", "message": "refactor(linear_algebra): morphism refactor for `linear_equiv`, `continuous_linear_equiv`, `linear_isometry` and `linear_isometry_equiv` (#15078)\nThis PR brings the morphism refactor to `linear_equiv`, `continuous_linear_equiv`, `linear_isometry`, and `linear_isometry_equiv`.\nNote that I had to resort to an ugly hack to deal with deterministic timouts in two proofs: `vitali.exists_disjoint_covering_ae` and another one in the counterexamples folder. Both of these are very large proofs with no obvious sublemmas to extract or inefficiencies, so I just used `try_for 20000 {...}` to increase the timeout. It's not great, but I don't see a better alternative -- besides, I don't think it's unreasonable for long proofs like these to have a bigger timeout.", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/equiv.lean", "newPath": "src/algebra/module/equiv.lean", "changes": [["add", "def", "linear_equiv_class", []]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["del", "theorem", "map_add", ["linear_isometry"]], ["del", "theorem", "map_neg", ["linear_isometry"]], ["del", "theorem", "map_smul", ["linear_isometry"]], ["del", "theorem", "map_smulₛₗ", ["linear_isometry"]], ["del", "theorem", "map_sub", ["linear_isometry"]], ["del", "theorem", "map_zero", ["linear_isometry"]], ["add", "def", "linear_isometry_class", []], ["add", "def", "linear_isometry_equiv_class", []], ["add", "theorem", "diam_image", ["semilinear_isometry_class"]], ["add", "theorem", "diam_range", ["semilinear_isometry_class"]], ["add", "theorem", "ediam_image", ["semilinear_isometry_class"]], ["add", "theorem", "ediam_range", ["semilinear_isometry_class"]], ["add", "theorem", "nnnorm_map", ["semilinear_isometry_class"]]]}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "def", "continuous_linear_equiv_class", []]]}]}, {"timestamp": 1659514602, "sha": "078cd612", "message": "feat(data/seq/seq): improve `cons` and `tail` def-eqs (#15829)\nWe sidestep the equation compiler for better definitional equalities.", "changes": [{"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["mod", "def", "cons", ["seq"]], ["mod", "def", "tail", ["seq"]]]}]}, {"timestamp": 1659514600, "sha": "0e87ef97", "message": "feat(data/list/basic): `l.nth l.length = none` (#15828)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_length", ["list"]]]}]}, {"timestamp": 1659508736, "sha": "54c4c222", "message": "chore(data/stream/defs): remove match from `stream.cons` (#15789)\nWe can use equation compiler instead, which should give better eq lemmas.", "changes": [{"oldPath": "src/data/stream/defs.lean", "newPath": "src/data/stream/defs.lean", "changes": [["mod", "def", "cons", ["stream"]]]}]}, {"timestamp": 1659508735, "sha": "53ab3a54", "message": "feat(set_theory/ordinal/arithmetic): generalize `mod_opow_log_lt_self` (#15448)\nWe remove the assumption `b ≠ 0` from `ordinal.mod_opow_log_lt_self`, and from other theorems/definitions that depended on it.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "mod_opow_log_lt_self", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": [["mod", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["mod", "theorem", "CNF_rec_zero", ["ordinal"]]]}]}, {"timestamp": 1659508733, "sha": "997fa572", "message": "refactor(set_theory/game/nim): remove `nim` namespace (#15366)\nA lot of theorems that already had `nim` in the name were also in the `pgame.nim` namespace. We remove the `nim` namespace entirely, and rename the few theorems that didn't have `nim` in the name:\n- `non_zero_first_wins` → `nim_fuzzy_zero_of_ne_zero`\n- `add_equiv_zero_iff_eq` → `nim_add_equiv_zero_iff`\n- `add_fuzzy_zero_iff_ne` → `nim_add_fuzzy_zero_iff`\n- `equiv_iff_eq` → `nim_equiv_iff_eq`\n- `grundy_value` → `nim_grundy_value`\nFurther, we move `nim` itself into the `pgame` namespace.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "exists_move_left_eq", ["pgame"]], ["add", "theorem", "exists_ordinal_move_left_eq", ["pgame"]], ["add", "theorem", "left_moves_nim", ["pgame"]], ["add", "theorem", "move_left_nim'", ["pgame"]], ["add", "theorem", "move_left_nim", ["pgame"]], ["add", "theorem", "move_left_nim_heq", ["pgame"]], ["add", "theorem", "move_right_nim'", ["pgame"]], ["add", "theorem", "move_right_nim", ["pgame"]], ["add", "theorem", "move_right_nim_heq", ["pgame"]], ["add", "theorem", "neg_nim", ["pgame"]], ["del", "theorem", "add_equiv_zero_iff_eq", ["pgame", "nim"]], ["del", "theorem", "add_fuzzy_zero_iff_ne", ["pgame", "nim"]], ["del", "theorem", "equiv_iff_eq", ["pgame", "nim"]], ["del", "theorem", "exists_move_left_eq", ["pgame", "nim"]], ["del", "theorem", "exists_ordinal_move_left_eq", ["pgame", "nim"]], ["del", "theorem", "grundy_value", ["pgame", "nim"]], ["del", "theorem", "left_moves_nim", ["pgame", "nim"]], ["del", "theorem", "move_left_nim'", ["pgame", "nim"]], ["del", "theorem", "move_left_nim", ["pgame", "nim"]], ["del", "theorem", "move_left_nim_heq", ["pgame", "nim"]], ["del", "theorem", "move_right_nim'", ["pgame", "nim"]], ["del", "theorem", "move_right_nim", ["pgame", "nim"]], ["del", "theorem", "move_right_nim_heq", ["pgame", "nim"]], ["del", "theorem", "neg_nim", ["pgame", "nim"]], ["del", "theorem", "nim_birthday", ["pgame", "nim"]], ["del", "theorem", "nim_def", ["pgame", "nim"]], ["del", "theorem", "nim_one_equiv", ["pgame", "nim"]], ["del", "def", "nim_one_relabelling", ["pgame", "nim"]], ["del", "theorem", "nim_zero_equiv", ["pgame", "nim"]], ["del", "def", "nim_zero_relabelling", ["pgame", "nim"]], ["del", "theorem", "non_zero_first_wins", ["pgame", "nim"]], ["del", "theorem", "right_moves_nim", ["pgame", "nim"]], ["del", "theorem", "to_left_moves_nim_symm_lt", ["pgame", "nim"]], ["del", "theorem", "to_right_moves_nim_symm_lt", ["pgame", "nim"]], ["add", "theorem", "nim_add_equiv_zero_iff", ["pgame"]], ["add", "theorem", "nim_add_fuzzy_zero_iff", ["pgame"]], ["add", "theorem", "nim_birthday", ["pgame"]], ["add", "theorem", "nim_def", ["pgame"]], ["add", "theorem", "nim_equiv_iff_eq", ["pgame"]], ["add", "theorem", "nim_fuzzy_zero_of_ne_zero", ["pgame"]], ["add", "theorem", "nim_grundy_value", ["pgame"]], ["add", "theorem", "nim_one_equiv", ["pgame"]], ["add", "def", "nim_one_relabelling", ["pgame"]], ["add", "theorem", "nim_zero_equiv", ["pgame"]], ["add", "def", "nim_zero_relabelling", ["pgame"]], ["add", "theorem", "right_moves_nim", ["pgame"]], ["add", "theorem", "to_left_moves_nim_symm_lt", ["pgame"]], ["add", "theorem", "to_right_moves_nim_symm_lt", ["pgame"]]]}]}, {"timestamp": 1659502884, "sha": "adc4ebc7", "message": "doc(data/polynomial/basic): fix docstring (#15814)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1659471668, "sha": "777082da", "message": "chore(probability/martingale): add some parity lemmas for martingales and supermartingales (#15811)", "changes": [{"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["add", "theorem", "martingale_nat", ["measure_theory"]], ["add", "theorem", "martingale_of_condexp_sub_eq_zero_nat", ["measure_theory"]], ["add", "theorem", "martingale_of_set_integral_eq_succ", ["measure_theory"]], ["add", "theorem", "supermartingale_nat", ["measure_theory"]], ["add", "theorem", "supermartingale_of_condexp_sub_nonneg_nat", ["measure_theory"]], ["add", "theorem", "supermartingale_of_set_integral_succ_le", ["measure_theory"]]]}]}, {"timestamp": 1659463576, "sha": "bedd9506", "message": "feat(algebra/big_operators/multiset): add `prod_map_erase` for `list` and `multiset` (#15808)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "prod_map_erase", ["multiset"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "prod_map_erase", ["list"]]]}]}, {"timestamp": 1659459875, "sha": "58004685", "message": "feat(geometry/manifold/mfderiv): differentiability is a `local_invariant_prop`, and consequences (#15666)\nThe boilerplate to make differentiability into a `local_invariant_prop` was missing. I added this, stated the lemmas that the definition of differentiability on a manifold this gives is equivalent to the existing definition, and deduced as a consequence that differentiability is invariant under choice of chart.\nAlmost everything is copied nearly exactly, even up to docstrings, from the corresponding lemmas about `cont_(m)diff`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "mono_of_mem", ["differentiable_within_at"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "theorem", "differentiable_within_at_local_invariant_prop", []], ["add", "def", "differentiable_within_at_prop", []], ["add", "theorem", "mdifferentiable_at_iff_lift_prop_at", []], ["add", "theorem", "mdifferentiable_at_iff_of_mem_source", []], ["add", "theorem", "mdifferentiable_within_at_iff_lift_prop_within_at", []], ["add", "theorem", "mdifferentiable_within_at_iff_of_mem_source", []]]}]}, {"timestamp": 1659459873, "sha": "c06c6806", "message": "feat(algebraic_geometry/EllipticCurve): add 2-torsion polynomials and changes of variables (#15230)", "changes": [{"oldPath": "src/algebraic_geometry/EllipticCurve.lean", "newPath": "src/algebraic_geometry/EllipticCurve.lean", "changes": [["del", "def", "b2", ["EllipticCurve"]], ["del", "def", "b4", ["EllipticCurve"]], ["del", "def", "b6", ["EllipticCurve"]], ["del", "def", "b8", ["EllipticCurve"]], ["add", "theorem", "b_relation", ["EllipticCurve"]], ["add", "def", "b₂", ["EllipticCurve"]], ["add", "def", "b₄", ["EllipticCurve"]], ["add", "def", "b₆", ["EllipticCurve"]], ["add", "def", "b₈", ["EllipticCurve"]], ["del", "def", "c4", ["EllipticCurve"]], ["del", "theorem", "c4_def", ["EllipticCurve"]], ["add", "theorem", "c_relation", ["EllipticCurve"]], ["add", "theorem", "a₁_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "a₂_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "a₃_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "a₄_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "a₆_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "b₂_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "b₄_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "b₆_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "b₈_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "c₄_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "c₆_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "j_eq", ["EllipticCurve", "change_of_variable"]], ["add", "theorem", "Δ_eq", ["EllipticCurve", "change_of_variable"]], ["add", "def", "change_of_variable", ["EllipticCurve"]], ["add", "theorem", "coe_Δ", ["EllipticCurve"]], ["add", "def", "c₄", ["EllipticCurve"]], ["add", "def", "c₆", ["EllipticCurve"]], ["del", "def", "disc", ["EllipticCurve"]], ["del", "def", "disc_aux", ["EllipticCurve"]], ["del", "theorem", "disc_aux_def", ["EllipticCurve"]], ["del", "theorem", "disc_def", ["EllipticCurve"]], ["del", "theorem", "disc_is_unit", ["EllipticCurve"]], ["mod", "def", "j", ["EllipticCurve"]], ["add", "theorem", "disc_eq", ["EllipticCurve", "two_torsion_polynomial"]], ["add", "theorem", "disc_ne_zero", ["EllipticCurve", "two_torsion_polynomial"]], ["add", "def", "two_torsion_polynomial", ["EllipticCurve"]], ["add", "def", "Δ_aux", ["EllipticCurve"]], ["mod", "structure", "EllipticCurve", []]]}]}, {"timestamp": 1659453527, "sha": "2a2d33c8", "message": "feat(number_theory/legendre_symbol/gauss_sum): add file gauss_sum.lean (#15684)\nThis adds a file to the number_theory/legendre_symbol directory. It defines the Gauss sum of a multiplicative and an additive character on a finite commutative ring with values in another commutative ring and proves some statements about them. This will lead to a new proof of Quadratic Reciprocity (including the second supplementary law).\nFor comments/discussion, use this [Zulip topic](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Gauss.20sums/near/290844370).", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "theorem", "prod_univ_eight", ["fin"]], ["add", "theorem", "prod_univ_five", ["fin"]], ["add", "theorem", "prod_univ_four", ["fin"]], ["add", "theorem", "prod_univ_seven", ["fin"]], ["add", "theorem", "prod_univ_six", ["fin"]], ["add", "theorem", "prod_univ_three", ["fin"]]]}, {"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": [["add", "theorem", "ring_char_eq", ["algebra"]]]}, {"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": [["add", "theorem", "inv_apply'", ["add_char"]], ["add", "theorem", "inv_apply", ["add_char"]], ["add", "theorem", "inv_mul_shift", ["add_char"]], ["add", "theorem", "pow_mul_shift", ["add_char"]], ["add", "theorem", "sum_mul_shift", ["add_char"]], ["mod", "def", "add_char", []]]}, {"oldPath": null, "newPath": "src/number_theory/legendre_symbol/gauss_sum.lean", "changes": [["add", "theorem", "card_pow_card", ["char"]], ["add", "theorem", "card_pow_char_pow", ["char"]], ["add", "theorem", "two_pow_card", ["finite_field"]], ["add", "def", "gauss_sum", []], ["add", "theorem", "gauss_sum_frob", []], ["add", "theorem", "gauss_sum_mul_aux", []], ["add", "theorem", "gauss_sum_mul_gauss_sum_eq_card", []], ["add", "theorem", "gauss_sum_mul_shift", []], ["add", "theorem", "gauss_sum_sq", []], ["add", "theorem", "gauss_sum_frob", ["mul_char", "is_quadratic"]], ["add", "theorem", "gauss_sum_frob_iter", ["mul_char", "is_quadratic"]]]}]}, {"timestamp": 1659436438, "sha": "aafeb5f3", "message": "feat(ring_theory/dedekind_domain): promote fractional ideals to `semifield` (#15794)\nThis is the first nontrivial semifield instance in mathlib! We can just upgrade the existing `comm_group_with_zero` instance to `semifield`.\ncc @YaelDillies", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}]}, {"timestamp": 1659409817, "sha": "5bd49e4c", "message": "chore(*): golf using new `positivity` tactic (#15701)\nThe `positivity` tactic introduced in #15618 solves goals of the form `0 < x` and `0 ≤ x`, particularly motivated by streamlining bigger inequality calculations where these frequently show up as side goals. This PR gives a few example uses in this kind of bigger inequality calculation, golfing proofs in: \n- archive/imo/imo2005_q3\n- archive/imo/imo2013_q5\n- analysis/convex/basic\n- analysis/mean_inequalities_pow\n- topology/algebra/order/basic", "changes": [{"oldPath": "archive/imo/imo2005_q3.lean", "newPath": "archive/imo/imo2005_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}]}, {"timestamp": 1659399409, "sha": "9264b15e", "message": "feat(algebra/algebra/bilinear): make `algebra.lmul` to apply to non-unital (non-assoc) algebras (#15310)\nMultiplication in an algebra is a bilinear map. Previously, this was called `algebra.lmul` (\"l\" for \"linear\") and what was actually constructed was an algebra homomorphism `A →ₐ[R] (End R A)`, where `A` is an `R`-algebra. As a result, this object (and the derived linear maps `algebra.lmul_left` and `algebra.lmul_right`, and others) only exists when `A` is a unital `R`-algebra.\nOf course, when `A` is a non-unital (even non-associative) algebra, this bilinear map `A →ₗ[R] A →ₗ[R] A` still exists, but it can't be upgraded to an algebra homomorphism as above. When `A` is associative, it can be upgraded to non-unital algebra homomorphism.\nIn this PR, we define all three of these multiplication maps as `linear_map.mul`, `non_unital_alg_hom.lmul` and `algebra.lmul`, along with appropriate `simp` lemmas stating that the underlying functions coincide. All existing lemmas about the maps are preserved, but each in the correct generality. In so doing, we also move most the results and definitions in this file into the `linear_map` namespace (which is also why we call the simplest map `linear_map.mul` instead of `linear_map.lmul` as the `l` in the latter would be redundant).", "changes": [{"oldPath": "src/algebra/algebra/bilinear.lean", "newPath": "src/algebra/algebra/bilinear.lean", "changes": [["add", "theorem", "coe_lmul_eq_mul", ["algebra"]], ["del", "theorem", "commute_lmul_left_right", ["algebra"]], ["del", "def", "lmul'", ["algebra"]], ["del", "theorem", "lmul'_apply", ["algebra"]], ["mod", "def", "lmul", ["algebra"]], ["del", "theorem", "lmul_apply", ["algebra"]], ["del", "theorem", "lmul_injective", ["algebra"]], ["del", "def", "lmul_left", ["algebra"]], ["del", "theorem", "lmul_left_apply", ["algebra"]], ["del", "theorem", "lmul_left_eq_zero_iff", ["algebra"]], ["del", "theorem", "lmul_left_injective", ["algebra"]], ["del", "theorem", "lmul_left_mul", ["algebra"]], ["del", "theorem", "lmul_left_one", ["algebra"]], ["del", "def", "lmul_left_right", ["algebra"]], ["del", "theorem", "lmul_left_right_apply", ["algebra"]], ["del", "theorem", "lmul_left_to_add_monoid_hom", ["algebra"]], ["del", "theorem", "lmul_left_zero_eq_zero", ["algebra"]], ["del", "def", "lmul_right", ["algebra"]], ["del", "theorem", "lmul_right_apply", ["algebra"]], ["del", "theorem", "lmul_right_eq_zero_iff", ["algebra"]], ["del", "theorem", "lmul_right_injective", ["algebra"]], ["del", "theorem", "lmul_right_mul", ["algebra"]], ["del", "theorem", "lmul_right_one", ["algebra"]], ["del", "theorem", "lmul_right_to_add_monoid_hom", ["algebra"]], ["del", "theorem", "lmul_right_zero_eq_zero", ["algebra"]], ["del", "theorem", "pow_lmul_left", ["algebra"]], ["del", "theorem", "pow_lmul_right", ["algebra"]], ["add", "theorem", "commute_mul_left_right", ["linear_map"]], ["add", "def", "mul'", ["linear_map"]], ["add", "theorem", "mul'_apply", ["linear_map"]], ["add", "def", "mul", ["linear_map"]], ["add", "theorem", "mul_apply'", ["linear_map"]], ["add", "theorem", "mul_injective", ["linear_map"]], ["add", "def", "mul_left", ["linear_map"]], ["add", "theorem", "mul_left_apply", ["linear_map"]], ["add", "theorem", "mul_left_eq_zero_iff", ["linear_map"]], ["add", "theorem", "mul_left_injective", ["linear_map"]], ["add", "theorem", "mul_left_mul", ["linear_map"]], ["add", "theorem", "mul_left_one", ["linear_map"]], ["add", "def", "mul_left_right", ["linear_map"]], ["add", "theorem", "mul_left_right_apply", ["linear_map"]], ["add", "theorem", "mul_left_to_add_monoid_hom", ["linear_map"]], ["add", "theorem", "mul_left_zero_eq_zero", ["linear_map"]], ["add", "def", "mul_right", ["linear_map"]], ["add", "theorem", "mul_right_apply", ["linear_map"]], ["add", "theorem", "mul_right_eq_zero_iff", ["linear_map"]], ["add", "theorem", "mul_right_injective", ["linear_map"]], ["add", "theorem", "mul_right_mul", ["linear_map"]], ["add", "theorem", "mul_right_one", ["linear_map"]], ["add", "theorem", "mul_right_to_add_monoid_hom", ["linear_map"]], ["add", "theorem", "mul_right_zero_eq_zero", ["linear_map"]], ["add", "theorem", "pow_mul_left", ["linear_map"]], ["add", "theorem", "pow_mul_right", ["linear_map"]], ["add", "theorem", "coe_lmul_eq_mul", ["non_unital_alg_hom"]], ["add", "def", "lmul", ["non_unital_alg_hom"]]]}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/hom/group_instances.lean", "newPath": "src/algebra/hom/group_instances.lean", "changes": []}, {"oldPath": "src/algebra/lie/base_change.lean", "newPath": "src/algebra/lie/base_change.lean", "changes": []}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/even.lean", "newPath": "src/linear_algebra/clifford_algebra/even.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/even_equiv.lean", "newPath": "src/linear_algebra/clifford_algebra/even_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/of_alternating.lean", "newPath": "src/linear_algebra/exterior_algebra/of_alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["del", "theorem", "is_nilpotent_lmul_left_iff", ["algebra"]], ["del", "theorem", "is_nilpotent_lmul_right_iff", ["algebra"]], ["add", "theorem", "is_nilpotent_mul_left_iff", ["linear_map"]], ["add", "theorem", "is_nilpotent_mul_right_iff", ["linear_map"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["mod", "theorem", "lmul'_apply_tmul", ["algebra", "tensor_product"]], ["mod", "theorem", "lmul'_to_linear_map", ["algebra", "tensor_product"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1659384345, "sha": "10a5ded3", "message": "lemmas about coeff for `compute_degree` (#15694)\nThis PR proves 5 lemmas about `coeff`s of polynomials under products, multiplications, sums and differences.\nI also moved an already existing `ring` lemma to a previously non-existing section on `ring`.\nThese lemmas are useful for the `compute_degree` tactic of #15691.", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "coeff_add_eq_left_of_lt", ["polynomial"]], ["add", "theorem", "coeff_add_succ_eq_right_of_le", ["polynomial"]], ["add", "theorem", "coeff_mul_of_nat_degree_le", ["polynomial"]], ["add", "theorem", "coeff_pow_of_nat_degree_le", ["polynomial"]], ["add", "theorem", "coeff_sub_succ_eq_left_of_le", ["polynomial"]], ["add", "theorem", "coeff_sub_succ_eq_neg_right_of_le", ["polynomial"]], ["add", "theorem", "nat_degree_sub", ["polynomial"]], ["mod", "theorem", "nat_degree_sub_le_iff_left", ["polynomial"]], ["add", "theorem", "nat_degree_sub_le_iff_right", ["polynomial"]]]}, {"oldPath": "src/tactic/compute_degree.lean", "newPath": "src/tactic/compute_degree.lean", "changes": []}]}, {"timestamp": 1659367969, "sha": "59874523", "message": "fix(algebra/monoid_algebra/basic): add `int_cast` to `monoid_algebra` instances (#15779)\nNote that this reshuffles how some instances are created to ensure that they get the `int_cast` field.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "theorem", "int_cast_def", ["add_monoid_algebra"]], ["add", "theorem", "nat_cast_def", ["add_monoid_algebra"]], ["add", "theorem", "int_cast_def", ["monoid_algebra"]], ["add", "theorem", "nat_cast_def", ["monoid_algebra"]]]}, {"oldPath": "src/data/polynomial/expand.lean", "newPath": "src/data/polynomial/expand.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1659367968, "sha": "073a3e97", "message": "fix(tactic/rcases): support `rcases x with y` renames (#15773)\nfixes #15741", "changes": [{"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1659367967, "sha": "bb103f35", "message": "refactor(category_theory): custom structure for full_subcategory (#14767)\nFull subcategories are now a custom structure rather than the usual subtype. The advantage of this is that we don't have to fight the `simp`-normal form of subtypes, as the coercion does more harm than good for full subcategories.\nWe saw a similar refactor for discrete categories, and in both cases, erring on the side of explicitness seems to pay off.", "changes": [{"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": [["mod", "theorem", "FinVect_evaluation_apply", ["FinVect"]], ["mod", "def", "iso_to_linear_equiv", ["FinVect"]], ["mod", "def", "FinVect", []]]}, {"oldPath": "src/algebra/category/FinVect/limits.lean", "newPath": "src/algebra/category/FinVect/limits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["add", "def", "mk", ["algebraic_geometry", "AffineScheme"]], ["mod", "def", "AffineScheme", ["algebraic_geometry"]], ["del", "theorem", "mem_AffineScheme", ["algebraic_geometry"]], ["add", "theorem", "mem_Spec_ess_image", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["mod", "def", "truncated", ["simplex_category"]]]}, {"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": [["mod", "def", "equiv_ess_image_of_reflective", ["category_theory"]]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/connected_components.lean", "newPath": "src/category_theory/connected_components.lean", "changes": [["mod", "def", "component", ["category_theory"]]]}, {"oldPath": "src/category_theory/essential_image.lean", "newPath": "src/category_theory/essential_image.lean", "changes": [["mod", "def", "ess_image_inclusion", ["category_theory", "functor"]], ["add", "def", "ess_image_subcategory", ["category_theory", "functor"]], ["mod", "def", "to_ess_image", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": [["mod", "def", "lift", ["category_theory", "full_subcategory"]], ["mod", "def", "map", ["category_theory", "full_subcategory"]], ["add", "structure", "full_subcategory", ["category_theory"]], ["mod", "def", "full_subcategory_inclusion", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/subcategory.lean", "newPath": "src/category_theory/monoidal/subcategory.lean", "changes": [["mod", "def", "full_braided_subcategory_inclusion", ["category_theory", "monoidal_category"]], ["mod", "def", "full_monoidal_subcategory_inclusion", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["mod", "def", "diagram", ["category_theory", "presieve"]]]}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/mono_over.lean", "newPath": "src/category_theory/subobject/mono_over.lean", "changes": [["mod", "def", "hom_mk", ["category_theory", "mono_over"]], ["mod", "def", "iso_mk", ["category_theory", "mono_over"]], ["mod", "def", "mk'", ["category_theory", "mono_over"]], ["mod", "def", "mono_over", ["category_theory"]]]}, {"oldPath": "src/category_theory/subterminal.lean", "newPath": "src/category_theory/subterminal.lean", "changes": []}, {"oldPath": "src/representation_theory/fdRep.lean", "newPath": "src/representation_theory/fdRep.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": [["mod", "def", "open_nhds", ["topological_space"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": [["mod", "def", "hom_to_index", ["Top", "presheaf", "sheaf_condition", "opens_le_cover"]], ["mod", "def", "opens_le_cover", ["Top", "presheaf", "sheaf_condition"]]]}, {"oldPath": "src/topology/sheaves/sheafify.lean", "newPath": "src/topology/sheaves/sheafify.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1659359096, "sha": "7200c507", "message": "feat(order/rel_iso): relation embeddings for `sum.lex` and `prod.lex` (#15355)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "inj", ["rel_embedding"]], ["add", "def", "prod_lex_map", ["rel_embedding"]], ["add", "def", "prod_lex_mk_left", ["rel_embedding"]], ["add", "def", "prod_lex_mk_right", ["rel_embedding"]], ["add", "def", "sum_lex_inl", ["rel_embedding"]], ["add", "def", "sum_lex_inr", ["rel_embedding"]], ["add", "def", "sum_lex_map", ["rel_embedding"]], ["add", "def", "sum_lift_rel_inl", ["rel_embedding"]], ["add", "def", "sum_lift_rel_inr", ["rel_embedding"]], ["add", "def", "sum_lift_rel_map", ["rel_embedding"]]]}]}, {"timestamp": 1659356450, "sha": "674505ed", "message": "feat(geometry/euclidean/oriented_angle): relation to unoriented angles (#15722)\nAdd some versions of the result that an oriented angle is plus or\nminus the unoriented angle between the same two vectors.\nThere will be a lot more lemmas to add subsequently in this area\n(including, in particular, lemmas about when two angles have the same\nor different signs, that are needed to go from equality of unoriented\nangles to equality of oriented angles). This just provides the\nstarting point for adding such results.", "changes": [{"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["add", "theorem", "cos_oangle_eq_cos_angle", ["orientation"]], ["add", "theorem", "cos_oangle_eq_inner_div_norm_mul_norm", ["orientation"]], ["add", "theorem", "inner_eq_norm_mul_norm_mul_cos_oangle", ["orientation"]], ["add", "theorem", "oangle_eq_angle_or_eq_neg_angle", ["orientation"]], ["add", "theorem", "cos_oangle_eq_cos_angle", ["orthonormal"]], ["add", "theorem", "cos_oangle_eq_inner_div_norm_mul_norm", ["orthonormal"]], ["add", "theorem", "inner_eq_norm_mul_norm_mul_cos_oangle", ["orthonormal"]], ["add", "theorem", "oangle_eq_angle_or_eq_neg_angle", ["orthonormal"]]]}]}, {"timestamp": 1659350561, "sha": "7dcf5c3d", "message": "feat(algebra/order/floor): `fract_one` (#15785)\nThis seems to be an appropriate `simp` lemma, but is currently missing.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "fract_one", ["int"]]]}]}, {"timestamp": 1659350560, "sha": "2f1b3131", "message": "chore(data/zmod): make `zmod.int_cast_zmod_cast` `@[norm_cast]` (#15753)\nI was suprised that `norm_cast` couldn't do anything with an expression including `(((r : zmod 4) : ℤ) : zmod 4)`, turns out this lemma was missing a `norm_cast` attribute.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["mod", "theorem", "int_cast_zmod_cast", ["zmod"]]]}]}, {"timestamp": 1659350559, "sha": "1b09efe3", "message": "feat(topology/homeomorph): Product of sets is isomorphic to product of sets (#15664)\nThis PR adds `homeomorph.set.prod`, analogous to `homeomorph.set.univ`.", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "prod", ["homeomorph", "set"]]]}]}, {"timestamp": 1659343337, "sha": "7ad184e3", "message": "fix(data/polynomial/basic): remove `monomial_fun` to remove diamonds (#15778)\nThis was previously irreducible to prevent any `finsupp/add_monoid_algebra` leakage, but it causes a non-defeq diamond in instances.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["del", "def", "monomial_fun", ["polynomial"]], ["mod", "theorem", "of_finsupp_one", ["polynomial"]], ["mod", "theorem", "of_finsupp_zero", ["polynomial"]], ["mod", "theorem", "to_finsupp_one", ["polynomial"]]]}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1659298467, "sha": "9bb1256d", "message": "feat(order/succ_pred/basic): `a ≤ succ ⊥ ↔ a = ⊥ ∨ a = succ ⊥` and related (#15567)\nWe use these new results to golf down the ordinal API.", "changes": [{"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "le_succ_bot_iff", ["order"]], ["add", "theorem", "lt_succ_bot_iff", ["order"]], ["add", "theorem", "pred_top_le_iff", ["order"]], ["add", "theorem", "pred_top_lt_iff", ["order"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "lt_one_iff_zero", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1659280641, "sha": "b6fa37ed", "message": "chore(ring_theory/adjoin_root): remove duplicate namespace (#15775)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1659280640, "sha": "9c473c1d", "message": "feat(probability/density): probability of event in uniform distribution (#15678)", "changes": [{"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": [["mod", "theorem", "integral_eq", ["measure_theory", "pdf", "is_uniform"]], ["add", "theorem", "is_probability_measure", ["measure_theory", "pdf", "is_uniform"]], ["add", "theorem", "measure_preimage", ["measure_theory", "pdf", "is_uniform"]], ["mod", "theorem", "mul_pdf_integrable", ["measure_theory", "pdf", "is_uniform"]]]}]}, {"timestamp": 1659276844, "sha": "a2a02a30", "message": "feat(data/nat/factorization/basic): add lemma `prime.factorization_self` (#15767)\nAdds `lemma prime.factorization_self (hp : prime p) : p.factorization p = 1`.\nWe already have `prime.factorization (hp : prime p) : p.factorization = single p 1`, but this sometimes needs a little more help to simp down to `1`.", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "factorization_self", ["nat", "prime"]]]}]}, {"timestamp": 1659268394, "sha": "7b2ae37e", "message": "feat(number_theory): Bertrand's postulate, slightly different approach (#8002)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/nat/choose/central.lean", "newPath": "src/data/nat/choose/central.lean", "changes": []}, {"oldPath": "src/data/nat/choose/factorization.lean", "newPath": "src/data/nat/choose/factorization.lean", "changes": [["add", "theorem", "prod_pow_factorization_central_binom", ["nat"]], ["add", "theorem", "prod_pow_factorization_choose", ["nat"]]]}, {"oldPath": null, "newPath": "src/number_theory/bertrand.lean", "changes": [["add", "theorem", "real_main_inequality", ["bertrand"]], ["add", "theorem", "bertrand_main_inequality", []], ["add", "theorem", "central_binom_factorization_small", []], ["add", "theorem", "central_binom_le_of_no_bertrand_prime", []], ["add", "theorem", "exists_prime_lt_and_le_two_mul", ["nat"]], ["add", "theorem", "exists_prime_lt_and_le_two_mul_eventually", ["nat"]], ["add", "theorem", "exists_prime_lt_and_le_two_mul_succ", ["nat"]]]}]}, {"timestamp": 1659244570, "sha": "5e07117c", "message": "feat(ring_theory/ideal/operations): A variant of `finsupp.total` for ideals. (#15460)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "def", "finsupp_total", ["ideal"]], ["add", "theorem", "finsupp_total_apply", ["ideal"]], ["add", "theorem", "finsupp_total_apply_eq_of_fintype", ["ideal"]], ["add", "theorem", "range_finsupp_total", ["ideal"]]]}]}, {"timestamp": 1659239332, "sha": "bff2f20c", "message": "chore(scripts): update nolints.txt (#15776)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1659213981, "sha": "a574fbe6", "message": "chore(logic/function/basic): make `function.injective.decidable_eq` protected (#15759)", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["del", "def", "decidable_eq", ["function", "injective"]]]}]}, {"timestamp": 1659208091, "sha": "348a674b", "message": "feat(algebra/algebra/subalgebra/basic): Swap arguments of `map` and `comap` (#15744)\nAs suggested by @eric-wieser, I swapped the arguments of `subalgebra.map` and `subalgebra.comap`. I also updated `subalgebra.map_injective` to use `function.injective` and to have `f` implicit. This is done to make the `subalgebra` API match the `subgroup`, `submodule`, etc... API.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["mod", "theorem", "comap_top", ["algebra"]], ["mod", "theorem", "map_bot", ["algebra"]], ["mod", "theorem", "map_top", ["algebra"]], ["mod", "def", "comap", ["subalgebra"]], ["mod", "theorem", "gc_map_comap", ["subalgebra"]], ["mod", "def", "map", ["subalgebra"]], ["mod", "theorem", "map_injective", ["subalgebra"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["mod", "def", "map", ["intermediate_field"]]]}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1659162996, "sha": "14b69e9f", "message": "refactor(tactic/lint/type_classes): change inhabited linter to nonempty linter (#15542)\nThe `inhabited` typeclass is intended to be a default value (and computable, if one is writing programs) but many times it is filled in with a junk (and perhaps noncomputable) value to satisfy the `has_inhabited_instance` linter. This commit switches to a `has_nonempty_instance` linter to push contributors toward supplying a `nonempty` instance instead. The linter still accepts `inhabited` and `unique` instances, which should be preferred over `nonempty` when appropriate.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/epi_mono.lean", "newPath": "src/algebra/category/Group/epi_mono.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/hom/group_action.lean", "newPath": "src/algebra/hom/group_action.lean", "changes": []}, {"oldPath": "src/algebra/homology/complex_shape.lean", "newPath": "src/algebra/homology/complex_shape.lean", "changes": []}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": []}, {"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": []}, {"oldPath": "src/algebra/homology/short_exact/preadditive.lean", "newPath": "src/algebra/homology/short_exact/preadditive.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/equiv.lean", "newPath": "src/algebra/module/equiv.lean", "changes": []}, {"oldPath": "src/algebra/module/localized_module.lean", "newPath": "src/algebra/module/localized_module.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/quotient.lean", "newPath": "src/algebra/quotient.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/gluing.lean", "newPath": "src/algebraic_geometry/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}, {"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/von_neumann_algebra/basic.lean", "newPath": "src/analysis/von_neumann_algebra/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/free.lean", "newPath": "src/category_theory/bicategory/free.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/functor.lean", "newPath": "src/category_theory/bicategory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/category/PartialFun.lean", "newPath": "src/category_theory/category/PartialFun.lean", "changes": [["mod", "def", "of", ["PartialFun"]]]}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/enriched/basic.lean", "newPath": "src/category_theory/enriched/basic.lean", "changes": []}, {"oldPath": "src/category_theory/essentially_small.lean", "newPath": "src/category_theory/essentially_small.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/glue_data.lean", "newPath": "src/category_theory/glue_data.lean", "changes": []}, {"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/karoubi.lean", "newPath": "src/category_theory/idempotents/karoubi.lean", "changes": []}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/localization/construction.lean", "newPath": "src/category_theory/localization/construction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["mod", "structure", "hom", ["category_theory", "comonad", "coalgebra"]]]}, {"oldPath": "src/category_theory/monoidal/center.lean", "newPath": "src/category_theory/monoidal/center.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/basic.lean", "newPath": "src/category_theory/monoidal/free/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/coherence.lean", "newPath": "src/category_theory/monoidal/free/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/opposite.lean", "newPath": "src/category_theory/monoidal/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective_resolution.lean", "newPath": "src/category_theory/preadditive/injective_resolution.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective_resolution.lean", "newPath": "src/category_theory/preadditive/projective_resolution.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_lifting.lean", "newPath": "src/category_theory/sites/cover_lifting.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/category_theory/sites/dense_subsite.lean", "newPath": "src/category_theory/sites/dense_subsite.lean", "changes": []}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": []}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": []}, {"oldPath": "src/category_theory/with_terminal.lean", "newPath": "src/category_theory/with_terminal.lean", "changes": []}, {"oldPath": "src/combinatorics/quiver/basic.lean", "newPath": "src/combinatorics/quiver/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/quiver/connected_component.lean", "newPath": "src/combinatorics/quiver/connected_component.lean", "changes": []}, {"oldPath": "src/combinatorics/quiver/subquiver.lean", "newPath": "src/combinatorics/quiver/subquiver.lean", "changes": []}, {"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": [["mod", "def", "pullback", ["bundle"]]]}, {"oldPath": "src/data/multiset/fintype.lean", "newPath": "src/data/multiset/fintype.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/W.lean", "newPath": "src/data/pfunctor/multivariate/W.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/fix.lean", "newPath": "src/data/qpf/multivariate/constructions/fix.lean", "changes": []}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["mod", "structure", "localization_map", ["add_submonoid"]], ["mod", "structure", "localization_map", ["submonoid"]], ["mod", "structure", "localization_with_zero_map", ["submonoid"]]]}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": [["mod", "def", "choose_basis_index", ["module", "free"]]]}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/linear_algebra/projective_space/basic.lean", "newPath": "src/linear_algebra/projective_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/isometry.lean", "newPath": "src/linear_algebra/quadratic_form/isometry.lean", "changes": [["mod", "structure", "isometry", ["quadratic_form"]]]}, {"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali_family.lean", "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["mod", "def", "symbols", ["first_order", "language"]]]}, {"oldPath": "src/number_theory/legendre_symbol/add_character.lean", "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": []}, {"oldPath": "src/order/prime_ideal.lean", "newPath": "src/order/prime_ideal.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": [["mod", "def", "mod_p", []], ["mod", "structure", "perfection_map", []], ["mod", "def", "pre_tilt", []], ["mod", "def", "tilt", []]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}, {"oldPath": "src/tactic/derive_fintype.lean", "newPath": "src/tactic/derive_fintype.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/gluing.lean", "newPath": "src/topology/gluing.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/metric_space/polish.lean", "newPath": "src/topology/metric_space/polish.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/equiv.lean", "newPath": "src/topology/uniform_space/equiv.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}, {"oldPath": "test/has_scalar_comp_loop.lean", "newPath": "test/has_scalar_comp_loop.lean", "changes": []}]}, {"timestamp": 1659155326, "sha": "20f97964", "message": "feat(algebra/big_operators): add lemmas about sum of disjoint multiset (#15556)\nSome easy lemmas about sum of disjoint ```multiset``` are proved.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "add_eq_union_left_of_le", ["multiset"]], ["add", "theorem", "add_eq_union_right_of_le", ["multiset"]], ["add", "theorem", "disjoint_finset_sum_left", ["multiset"]], ["add", "theorem", "disjoint_finset_sum_right", ["multiset"]], ["add", "theorem", "disjoint_list_sum_left", ["multiset"]], ["add", "theorem", "disjoint_list_sum_right", ["multiset"]], ["add", "theorem", "disjoint_sum_left", ["multiset"]], ["add", "theorem", "disjoint_sum_right", ["multiset"]], ["add", "theorem", "finset_sum_eq_sup_iff_disjoint", ["multiset"]]]}]}, {"timestamp": 1659142423, "sha": "09afe572", "message": "feat(group_theory/p_group): Groups of order p^2 are commutative (#8632)", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["mod", "theorem", "bot_lt_center", ["is_p_group"]], ["add", "theorem", "card_center_eq_prime_pow", ["is_p_group"]], ["mod", "theorem", "card_modeq_card_fixed_points", ["is_p_group"]], ["mod", "theorem", "center_nontrivial", ["is_p_group"]], ["add", "def", "comm_group_of_card_eq_prime_sq", ["is_p_group"]], ["add", "theorem", "commutative_of_card_eq_prime_sq", ["is_p_group"]], ["add", "theorem", "cyclic_center_quotient_of_card_eq_prime_sq", ["is_p_group"]], ["mod", "theorem", "index", ["is_p_group"]], ["mod", "theorem", "nonempty_fixed_point_of_prime_not_dvd_card", ["is_p_group"]], ["add", "theorem", "nontrivial_iff_card", ["is_p_group"]]]}]}, {"timestamp": 1659119314, "sha": "13ff898b", "message": "refactor(algebra/homology): better defeqs, less case splitting (#15690)", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebra/homology/complex_shape.lean", "newPath": "src/algebra/homology/complex_shape.lean", "changes": [["mod", "def", "next", ["complex_shape"]], ["add", "theorem", "next_eq'", ["complex_shape"]], ["del", "theorem", "next_eq_some", ["complex_shape"]], ["mod", "def", "prev", ["complex_shape"]], ["add", "theorem", "prev_eq'", ["complex_shape"]], ["del", "theorem", "prev_eq_some", ["complex_shape"]]]}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["mod", "def", "X_next", ["homological_complex"]], ["mod", "def", "X_next_iso_zero", ["homological_complex"]], ["mod", "def", "X_prev", ["homological_complex"]], ["mod", "def", "X_prev_iso_zero", ["homological_complex"]], ["mod", "theorem", "X_prev_iso_zero_comp_d_to", ["homological_complex"]], ["mod", "def", "d_from", ["homological_complex"]], ["mod", "theorem", "d_from_comp_X_next_iso_zero", ["homological_complex"]], ["mod", "theorem", "d_from_eq_zero", ["homological_complex"]], ["mod", "def", "d_to", ["homological_complex"]], ["mod", "theorem", "d_to_eq_zero", ["homological_complex"]], ["mod", "def", "next", ["homological_complex", "hom"]], ["mod", "def", "prev", ["homological_complex", "hom"]], ["mod", "theorem", "sq_from_id", ["homological_complex", "hom"]]]}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["mod", "theorem", "boundaries_eq_bot", ["homological_complex"]], ["mod", "theorem", "cycles_eq_top", ["homological_complex"]]]}, {"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": [["mod", "theorem", "d_next_eq_d_from_from_next", []], ["mod", "def", "from_next", []], ["mod", "theorem", "mk_coinductive_aux₃", ["homotopy"]], ["mod", "theorem", "mk_inductive_aux₃", ["homotopy"]], ["mod", "theorem", "prev_d_eq_to_prev_d_to", []], ["mod", "def", "to_prev", []]]}, {"oldPath": "src/algebra/homology/homotopy_category.lean", "newPath": "src/algebra/homology/homotopy_category.lean", "changes": []}, {"oldPath": "src/category_theory/functor/left_derived.lean", "newPath": "src/category_theory/functor/left_derived.lean", "changes": []}]}, {"timestamp": 1659107952, "sha": "cb3c2b9e", "message": "fix(linear_algebra/prod): add missing `of_dual`s in lemma statements (#15750)\nWithout these the lemmas contain nonsense statements of the form `(x : α) ≤ (y : αᵒᵈ)`.", "changes": [{"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}]}, {"timestamp": 1659105087, "sha": "daac51e8", "message": "feat(field_theory/adjoin): A compositum of algebraic extensions is algebraic (#15724)\nThis PR proves that a compositum of algebraic extensions is algebraic.\nComing soon to a mathlib near you: A compositum of normal extensions is normal.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "exists_finset_of_mem_supr'", ["intermediate_field"]], ["add", "theorem", "is_algebraic_supr", ["intermediate_field"]]]}]}, {"timestamp": 1659105086, "sha": "7afd66ab", "message": "feat(field_theory/intermediate_field): Produce an intermediate field from a subalgebra satisfying `is_field`. (#15659)\nThis construction came up when proving that if `p` splits in `L/K`, then `p.is_splitting_field K (adjoin K (p.root_set L))`.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "def", "to_intermediate_field'", ["subalgebra"]], ["add", "theorem", "to_intermediate_field'_to_subalgebra", []], ["mod", "theorem", "to_intermediate_field_to_subalgebra", []], ["add", "theorem", "to_subalgebra_to_intermediate_field'", []]]}]}, {"timestamp": 1659105084, "sha": "725ad273", "message": "feat(algebra/direct_sum/decomposition): add an induction principle for `direct_sum.decomposition` class (#15654)\nIf `direct_sum.decomposition M` and `p : M → Prop`, then to prove `p m` for an arbitrary `m`, it suffices to prove `p 0` and `p x` for homogeneous x and `p` being preserved by add.", "changes": [{"oldPath": "src/algebra/direct_sum/decomposition.lean", "newPath": "src/algebra/direct_sum/decomposition.lean", "changes": []}]}, {"timestamp": 1659099009, "sha": "0fc357f5", "message": "feat(data/finset/pointwise): Singleton arithmetic (#15435)\nLemmas about pointwise operations with a singleton. Also make `s` explicit in `finset.card_inv`.", "changes": [{"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["add", "theorem", "card_image₂_singleton_left", ["finset"]], ["add", "theorem", "card_image₂_singleton_right", ["finset"]], ["add", "theorem", "card_le_card_image₂_left", ["finset"]], ["add", "theorem", "card_le_card_image₂_right", ["finset"]], ["add", "theorem", "image₂_inter_singleton", ["finset"]], ["add", "theorem", "image₂_singleton_inter", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "card_le_card_mul_left", ["finset"]], ["add", "theorem", "card_le_card_mul_right", ["finset"]], ["add", "theorem", "card_mul_singleton", ["finset"]], ["add", "theorem", "card_singleton_mul", ["finset"]], ["mod", "theorem", "coe_inv", ["finset"]], ["add", "theorem", "inter_mul_singleton", ["finset"]], ["mod", "theorem", "mul_singleton", ["finset"]], ["mod", "theorem", "pairwise_disjoint_smul_iff", ["finset"]], ["mod", "theorem", "singleton_mul", ["finset"]], ["add", "theorem", "singleton_mul_inter", ["finset"]], ["mod", "theorem", "singleton_smul", ["finset"]], ["mod", "theorem", "singleton_vsub", ["finset"]], ["mod", "theorem", "smul_singleton", ["finset"]]]}]}, {"timestamp": 1659092719, "sha": "87861dd7", "message": "feat(data/nat/factorization/basic): golf & move `card_multiples`, prove variant lemma `Ioc_filter_dvd_card_eq_div` (#15277)\nGolfs `card_multiples` (\"exactly `n / p` naturals in `[1, n]` are multiples of `p`\") and moves it from `data/nat/prime` to `data/nat/factorization/basic`. Also proves a slightly more convenient variant, `Ioc_filter_dvd_card_eq_div`.", "changes": [{"oldPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "newPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "changes": []}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "Ioc_filter_dvd_card_eq_div", ["nat"]], ["add", "theorem", "card_multiples", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "card_multiples", []]]}]}, {"timestamp": 1659084027, "sha": "df203bc8", "message": "docs(measure_theory/measure/haar): Mention uniqueness in module docstring (#15740)", "changes": [{"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}]}, {"timestamp": 1659084025, "sha": "b7bde9df", "message": "docs(topology/sets/compacts): fix typo (#15739)", "changes": [{"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": []}]}, {"timestamp": 1659084024, "sha": "1d0df917", "message": "feat(linear_algebra/matrix): inner prod of matrix (#14794)\nA positive definite matrix `M` induces an inner product `⟪x, y⟫ = xᴴMy`.", "changes": [{"oldPath": "src/linear_algebra/matrix/pos_def.lean", "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": [["add", "theorem", "is_hermitian", ["matrix", "pos_def"]], ["mod", "def", "pos_def", ["matrix"]]]}]}, {"timestamp": 1659074003, "sha": "56199b7b", "message": "feat(linear_algebra/clifford_algebra/even): Universal property and isomorphisms for the even subalgebra (#14790)\nThe main three results here are:\n* `even.lift : even_hom Q A ≃ (clifford_algebra.even Q →ₐ[R] A)`\n* `equiv_even : clifford_algebra Q ≃ₐ[R] clifford_algebra.even (Q' Q)`\n* `even_equiv_even_neg : clifford_algebra.even Q ≃ₐ[R] clifford_algebra.even (-Q)`", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/even.lean", "changes": [["add", "theorem", "alg_hom_ext", ["clifford_algebra", "even"]], ["add", "theorem", "aux_algebra_map", ["clifford_algebra", "even", "lift"]], ["add", "theorem", "aux_mul", ["clifford_algebra", "even", "lift"]], ["add", "theorem", "aux_one", ["clifford_algebra", "even", "lift"]], ["add", "theorem", "aux_ι", ["clifford_algebra", "even", "lift"]], ["add", "def", "lift", ["clifford_algebra", "even"]], ["add", "theorem", "lift_ι", ["clifford_algebra", "even"]], ["add", "def", "ι", ["clifford_algebra", "even"]], ["add", "def", "even", ["clifford_algebra"]], ["add", "def", "compr₂", ["clifford_algebra", "even_hom"]], ["add", "structure", "even_hom", ["clifford_algebra"]], ["add", "theorem", "even_to_submodule", ["clifford_algebra"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/even_equiv.lean", "changes": [["add", "theorem", "coe_to_even_reverse_involute", ["clifford_algebra"]], ["add", "def", "Q'", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "Q'_apply", ["clifford_algebra", "equiv_even"]], ["add", "def", "e0", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "e0_mul_e0", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "e0_mul_v_mul_e0", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "involute_e0", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "involute_v", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "neg_e0_mul_v", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "neg_v_mul_e0", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "reverse_e0", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "reverse_v", ["clifford_algebra", "equiv_even"]], ["add", "def", "v", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "v_sq_scalar", ["clifford_algebra", "equiv_even"]], ["add", "theorem", "ι_eq_v_add_smul_e0", ["clifford_algebra", "equiv_even"]], ["add", "def", "equiv_even", ["clifford_algebra"]], ["add", "def", "even_equiv_even_neg", ["clifford_algebra"]], ["add", "def", "even_to_neg", ["clifford_algebra"]], ["add", "theorem", "even_to_neg_comp_even_to_neg", ["clifford_algebra"]], ["add", "theorem", "even_to_neg_ι", ["clifford_algebra"]], ["add", "def", "of_even", ["clifford_algebra"]], ["add", "theorem", "of_even_comp_to_even", ["clifford_algebra"]], ["add", "theorem", "of_even_ι", ["clifford_algebra"]], ["add", "def", "to_even", ["clifford_algebra"]], ["add", "theorem", "to_even_comp_of_even", ["clifford_algebra"]], ["add", "theorem", "to_even_ι", ["clifford_algebra"]]]}]}, {"timestamp": 1659060420, "sha": "6b647c3b", "message": "refactor(linear_algebra, analysis/inner_product_space): use `⊤ ≤` instead of `= ⊤` in bases constructors (#15697)\nAll the existing proof just need a `.ge` to be fixed, and this allows to remove a lot of `rw [eq_top_iff]`, and it sticks with the convention of having weakest forms in assumptions and stronger forms in conclusion.\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60.E2.8A.A4.20.E2.89.A4.20span.60.20in.20basis.20constructors", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "coe_basis_of_span_eq_top_of_card_eq_finrank", []], ["add", "theorem", "coe_basis_of_top_le_span_of_card_eq_finrank", []], ["del", "theorem", "linear_independent_of_span_eq_top_of_card_eq_finrank", []], ["add", "theorem", "linear_independent_of_top_le_span_of_card_eq_finrank", []]]}, {"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/module.lean", "newPath": "src/ring_theory/localization/module.lean", "changes": []}]}, {"timestamp": 1659042591, "sha": "4ff8c3db", "message": "feat(analysis/normed_space/compact_operator): definition and basic facts about compact operators (#15467)", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/compact_operator.lean", "changes": [["add", "def", "compact_operator", []], ["add", "theorem", "compact_operator_topological_closure", []], ["add", "theorem", "coe_mk_of_is_compact_operator", ["continuous_linear_map"]], ["add", "def", "mk_of_is_compact_operator", ["continuous_linear_map"]], ["add", "theorem", "mk_of_is_compact_operator_mem_compact_operator", ["continuous_linear_map"]], ["add", "theorem", "mk_of_is_compact_operator_to_linear_map", ["continuous_linear_map"]], ["add", "theorem", "is_closed_set_of_is_compact_operator", []], ["add", "theorem", "add", ["is_compact_operator"]], ["add", "theorem", "clm_comp", ["is_compact_operator"]], ["add", "theorem", "cod_restrict", ["is_compact_operator"]], ["add", "theorem", "comp_clm", ["is_compact_operator"]], ["add", "theorem", "continuous", ["is_compact_operator"]], ["add", "theorem", "continuous_comp", ["is_compact_operator"]], ["add", "theorem", "image_ball_subset_compact", ["is_compact_operator"]], ["add", "theorem", "image_closed_ball_subset_compact", ["is_compact_operator"]], ["add", "theorem", "image_subset_compact_of_bounded", ["is_compact_operator"]], ["add", "theorem", "image_subset_compact_of_vonN_bounded", ["is_compact_operator"]], ["add", "theorem", "is_compact_closure_image_ball", ["is_compact_operator"]], ["add", "theorem", "is_compact_closure_image_closed_ball", ["is_compact_operator"]], ["add", "theorem", "is_compact_closure_image_of_bounded", ["is_compact_operator"]], ["add", "theorem", "is_compact_closure_image_of_vonN_bounded", ["is_compact_operator"]], ["add", "theorem", "neg", ["is_compact_operator"]], ["add", "theorem", "restrict'", ["is_compact_operator"]], ["add", "theorem", "restrict", ["is_compact_operator"]], ["add", "theorem", "smul", ["is_compact_operator"]], ["add", "theorem", "sub", ["is_compact_operator"]], ["add", "def", "is_compact_operator", []], ["add", "theorem", "is_compact_operator_iff_exists_mem_nhds_image_subset_compact", []], ["add", "theorem", "is_compact_operator_iff_exists_mem_nhds_is_compact_closure_image", []], ["add", "theorem", "is_compact_operator_iff_image_ball_subset_compact", []], ["add", "theorem", "is_compact_operator_iff_image_closed_ball_subset_compact", []], ["add", "theorem", "is_compact_operator_iff_is_compact_closure_image_ball", []], ["add", "theorem", "is_compact_operator_iff_is_compact_closure_image_closed_ball", []], ["add", "theorem", "is_compact_operator_of_tendsto", []], ["add", "theorem", "is_compact_operator_zero", []]]}]}, {"timestamp": 1659039319, "sha": "b33d6d6e", "message": "feat(probability/strong_law): Lp version of the strong law of large numbers (#15392)\nThis PR proves the Lp version of the strong law of large numbers which states that $\\frac{1}{n}\\sum_{i < n} X_i$ converges to $\\mathbb{E}[X_0]$ in the Lp-norm where $(X_n)$ is iid. and Lp.", "changes": [{"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["add", "theorem", "uniform_integrable_average", ["measure_theory"]]]}, {"oldPath": "src/probability/ident_distrib.lean", "newPath": "src/probability/ident_distrib.lean", "changes": [["add", "theorem", "uniform_integrable_of_ident_distrib", ["probability_theory", "mem_ℒp"]], ["add", "theorem", "uniform_integrable_of_ident_distrib_aux", ["probability_theory", "mem_ℒp"]]]}, {"oldPath": "src/probability/strong_law.lean", "newPath": "src/probability/strong_law.lean", "changes": [["add", "theorem", "strong_law_Lp", ["probability_theory"]]]}]}, {"timestamp": 1659039318, "sha": "5fc18b5e", "message": "fix(tactic/polyrith): remove unnecessary 1* from polyrith output (#15292)\nSome `polyrith` certificates were printing with a superfluous `1*` in front.", "changes": [{"oldPath": "scripts/polyrith_sage_helper.py", "newPath": "scripts/polyrith_sage_helper.py", "changes": []}, {"oldPath": "src/tactic/polyrith.lean", "newPath": "src/tactic/polyrith.lean", "changes": []}, {"oldPath": "test/polyrith.lean", "newPath": "test/polyrith.lean", "changes": []}]}, {"timestamp": 1659030440, "sha": "39046bda", "message": "feat(data/{pi, prod}): add missing `has_pow` instances for `pi` type (#15478)\nThis generalizes the existing powers by `nat` and `int` defined in later files to be defined for arbitrary powers.\nAs well as eliminating the need for separate lemmas for these different power operations, this also means that tuples of real numbers now inherit a power operation by the real numbers.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["del", "theorem", "pow_apply", ["pi"]]]}, {"oldPath": "src/data/pi/algebra.lean", "newPath": "src/data/pi/algebra.lean", "changes": [["add", "theorem", "const_pow", ["pi"]], ["add", "theorem", "pow_apply", ["pi"]], ["add", "theorem", "pow_comp", ["pi"]], ["add", "theorem", "pow_def", ["pi"]], ["add", "theorem", "smul_apply", ["pi"]], ["add", "theorem", "smul_comp", ["pi"]], ["add", "theorem", "smul_const", ["pi"]], ["add", "theorem", "smul_def", ["pi"]]]}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": [["del", "theorem", "smul_apply", ["pi"]], ["del", "theorem", "smul_def", ["pi"]]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": [["add", "theorem", "pow_def", ["prod"]], ["add", "theorem", "pow_fst", ["prod"]], ["add", "theorem", "pow_mk", ["prod"]], ["add", "theorem", "pow_snd", ["prod"]], ["add", "theorem", "pow_swap", ["prod"]]]}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}]}, {"timestamp": 1659020716, "sha": "8b87d337", "message": "feat(algebra/module): sub_mem_sup for modules over rings (#15733)", "changes": [{"oldPath": "src/algebra/module/submodule/lattice.lean", "newPath": "src/algebra/module/submodule/lattice.lean", "changes": [["add", "theorem", "sub_mem_sup", ["submodule"]]]}]}, {"timestamp": 1659020715, "sha": "1065169f", "message": "feat(data/pi/algebra): sum_elim lemmas (#15588)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "elim_int_cast_int_cast", ["sum"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "elim_nat_cast_nat_cast", ["sum"]]]}, {"oldPath": "src/data/pi/algebra.lean", "newPath": "src/data/pi/algebra.lean", "changes": [["add", "theorem", "elim_div_div", ["sum"]], ["add", "theorem", "elim_inv_inv", ["sum"]], ["add", "theorem", "elim_mul_mul", ["sum"]], ["add", "theorem", "elim_mul_single_one", ["sum"]], ["add", "theorem", "elim_one_mul_single", ["sum"]], ["add", "theorem", "elim_one_one", ["sum"]]]}, {"oldPath": "src/data/sum/basic.lean", "newPath": "src/data/sum/basic.lean", "changes": [["add", "theorem", "elim_const_const", ["sum"]], ["add", "theorem", "elim_lam_const_lam_const", ["sum"]], ["add", "theorem", "elim_update_left", ["sum"]], ["add", "theorem", "elim_update_right", ["sum"]]]}]}, {"timestamp": 1659016236, "sha": "94dcadd5", "message": "feat(test/polyrith): better formatting for generated tests (#15728)\nThe `polyrith` test suite is unusually structured to avoid making dozens of calls to Sage. A helper tactic calls `polyrith` and saves the output from Sage along with intermediate information, printing a full test as a \"Try this:\". This PR makes that helper tactic format its output better, spread over multiple lines as requested at https://github.com/leanprover-community/mathlib/pull/15292#discussion_r925838661 by @eric-wieser .", "changes": [{"oldPath": "test/polyrith.lean", "newPath": "test/polyrith.lean", "changes": []}]}, {"timestamp": 1658984069, "sha": "123f4542", "message": "chore(field_theory/splitting_field): remove unneeded parameter (#15716)\nThe definition of `splitting_field_aux` relied on a parameter `hfn : n = f.nat_degree` that was never actually used in the construction or its instances, only in the `splits` theorem. So we might as well delete it.\nThis PR prepares for a redefinition of all instances on `splitting_field_aux` to fix instance diamonds, see the `splitting_field-diamond` branch for progress.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "algebra_map_succ", ["polynomial", "splitting_field_aux"]], ["mod", "theorem", "succ", ["polynomial", "splitting_field_aux"]], ["mod", "def", "splitting_field_aux", ["polynomial"]]]}]}, {"timestamp": 1658984068, "sha": "adeda57b", "message": "feat(group_theory/finite_abelian): a finitely generated torsion abelian group is finite (#15402)", "changes": [{"oldPath": "src/group_theory/finite_abelian.lean", "newPath": "src/group_theory/finite_abelian.lean", "changes": [["mod", "theorem", "equiv_direct_sum_zmod_of_fintype", ["add_comm_group"]], ["mod", "theorem", "equiv_free_prod_direct_sum_zmod", ["add_comm_group"]], ["add", "theorem", "finite_of_fg_torsion", ["add_comm_group"]], ["add", "theorem", "finite_of_fg_torsion", ["comm_group"]], ["add", "theorem", "finite_of_fg_torsion", ["module"]]]}]}, {"timestamp": 1658984067, "sha": "71d01152", "message": "chore(measure_theory/tactic): remove the measurability attribute from two lemmas (#15295)\nThe measurability tactic applied `set.finite.measurable_set` to every set (when the space had measurable singletons) and got stuck.", "changes": [{"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "test/measurability.lean", "newPath": "test/measurability.lean", "changes": []}]}, {"timestamp": 1658984066, "sha": "af213089", "message": "feat(order/bounded_order): `is_well_order` instances for `with_top` and `with_bot` (#15278)", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}]}, {"timestamp": 1658981506, "sha": "d3b1dbee", "message": "chore(category_theory/adjunction): fix a typo (#15720)", "changes": [{"oldPath": "src/category_theory/adjunction/comma.lean", "newPath": "src/category_theory/adjunction/comma.lean", "changes": [["add", "def", "is_left_adjoint_of_costructured_arrow_terminals", ["category_theory"]], ["del", "def", "is_right_adjoint_of_costructured_arrow_terminals", ["category_theory"]]]}]}, {"timestamp": 1658975202, "sha": "cad19073", "message": "chore(topology/algebra/module, analysis/normed_space/linear_isometry): dedup `submodule.subtypeL` and `continuous_linear_map.subtype_val` (#15700)\nTo designate the continuous linear inclusion of a submodule into the ambient space, we currently have both `continuous_linear_map.subtype_val` (correct assumptions, name not consistent with `submodule.subtype`) and `submodule.subtypeL` (good name, but way too strong assumptions). This keeps the best of both worlds.", "changes": [{"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["del", "theorem", "coe_subtypeL'", ["submodule"]], ["del", "theorem", "coe_subtypeL", ["submodule"]], ["del", "theorem", "ker_subtypeL", ["submodule"]], ["del", "theorem", "range_subtypeL", ["submodule"]], ["del", "def", "subtypeL", ["submodule"]], ["add", "theorem", "subtypeₗᵢ_to_continuous_linear_map", ["submodule"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["del", "theorem", "coe_subtype_val", ["continuous_linear_map"]], ["del", "def", "subtype_val", ["continuous_linear_map"]], ["del", "theorem", "subtype_val_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_subtypeL'", ["submodule"]], ["add", "theorem", "coe_subtypeL", ["submodule"]], ["add", "theorem", "ker_subtypeL", ["submodule"]], ["add", "theorem", "range_subtypeL", ["submodule"]], ["add", "def", "subtypeL", ["submodule"]], ["add", "theorem", "subtypeL_apply", ["submodule"]]]}]}, {"timestamp": 1658970094, "sha": "350a3817", "message": "feat(category_theory): construction of the localized category (#14422)\nWhen `W : morphism_property C` is a class of morphisms in a category `C`, this PR constructs the localized category `localization W` obtained by adding formal inverses to the morphisms in `W`.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "theorem", "mk_eq", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/category/Quiv.lean", "newPath": "src/category_theory/category/Quiv.lean", "changes": [["mod", "def", "lift", ["category_theory", "Quiv"]]]}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "congr_inv_of_congr_hom", ["category_theory", "functor"]]]}, {"oldPath": null, "newPath": "src/category_theory/localization/construction.lean", "changes": [["add", "def", "Wiso", ["category_theory", "localization", "construction"]], ["add", "theorem", "fac", ["category_theory", "localization", "construction"]], ["add", "def", "lift", ["category_theory", "localization", "construction"]], ["add", "def", "lift_to_path_category", ["category_theory", "localization", "construction"]], ["add", "structure", "loc_quiver", ["category_theory", "localization", "construction"]], ["add", "inductive", "relations", ["category_theory", "localization", "construction"]], ["add", "theorem", "uniq", ["category_theory", "localization", "construction"]], ["add", "def", "ι_paths", ["category_theory", "localization", "construction"]], ["add", "def", "ψ₁", ["category_theory", "localization", "construction"]], ["add", "def", "ψ₂", ["category_theory", "localization", "construction"]], ["add", "def", "Q", ["category_theory", "morphism_property"]], ["add", "def", "localization", ["category_theory", "morphism_property"]]]}, {"oldPath": "src/category_theory/morphism_property.lean", "newPath": "src/category_theory/morphism_property.lean", "changes": [["add", "def", "is_inverted_by", ["category_theory", "morphism_property"]]]}, {"oldPath": "src/combinatorics/quiver/path.lean", "newPath": "src/combinatorics/quiver/path.lean", "changes": [["add", "theorem", "map_path_to_path", ["prefunctor"]]]}]}, {"timestamp": 1658967488, "sha": "00e7ca52", "message": "feat(category_theory/limits/shapes/comm_sq): opposites of is_pullback and is_pushout (#15269)\nThis PR shows that the dual of a pushout commutative square is a pullback square, and similar other results.\nThe most basic `comm_sq` API is also moved to a separate file with fewer dependencies so as to prepare for a refactor of lifting properties which shall be based on `comm_sq`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/comm_sq.lean", "changes": [["add", "theorem", "flip", ["category_theory", "comm_sq"]], ["add", "theorem", "of_arrow", ["category_theory", "comm_sq"]], ["add", "theorem", "op", ["category_theory", "comm_sq"]], ["add", "theorem", "unop", ["category_theory", "comm_sq"]], ["add", "structure", "comm_sq", ["category_theory"]], ["add", "theorem", "map_comm_sq", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": [["add", "def", "cocone_op", ["category_theory", "comm_sq"]], ["add", "def", "cocone_unop", ["category_theory", "comm_sq"]], ["add", "def", "cone_op", ["category_theory", "comm_sq"]], ["add", "def", "cone_unop", ["category_theory", "comm_sq"]], ["del", "theorem", "flip", ["category_theory", "comm_sq"]], ["del", "theorem", "of_arrow", ["category_theory", "comm_sq"]], ["del", "structure", "comm_sq", ["category_theory"]], ["del", "theorem", "map_comm_sq", ["category_theory", "functor"]], ["add", "theorem", "op", ["category_theory", "is_pullback"]], ["add", "theorem", "unop", ["category_theory", "is_pullback"]], ["add", "theorem", "op", ["category_theory", "is_pushout"]], ["add", "theorem", "unop", ["category_theory", "is_pushout"]]]}]}, {"timestamp": 1658961387, "sha": "cd7b23d1", "message": "feat(topology/subset_properties): `locally_compact_space` instance for `Π` types (#15707)\nThis PR adds \n- `locally_compact_space.pi` mirroring `locally_compact_space.prod` and\n- `locally_compact_space.pi_finite` for finite products\nProof by: @alreadydone", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1658951092, "sha": "805bb2d2", "message": "feat(algebraic_geometry/morphisms): Quasi-compact morphisms of schemes (#15436)", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_geometry/morphisms/quasi_compact.lean", "changes": [["add", "theorem", "compact_open_induction_on", ["algebraic_geometry"]], ["add", "theorem", "is_compact_open_iff_eq_basic_open_union", ["algebraic_geometry"]], ["add", "theorem", "is_compact_open_iff_eq_finset_affine_union", ["algebraic_geometry"]], ["add", "theorem", "quasi_compact_iff_forall_affine", ["algebraic_geometry"]], ["add", "theorem", "quasi_compact_iff_spectral", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "theorem", "Union_range", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "compact_space", ["algebraic_geometry", "Scheme", "open_cover"]]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": [["add", "theorem", "is_compact_open_iff_eq_finite_Union_of_is_basis", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_compact_open_iff_eq_finite_Union_of_is_topological_basis", []]]}]}, {"timestamp": 1658951091, "sha": "594e8848", "message": "feat(combinatorics/additive/behrend): Behrend's lower bound on Roth numbers (#15327)\nThis proves the explicit bound on Roth's numbers of the form `n / exp (O (sqrt (log n)))`.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["mod", "theorem", "ceil_pos", ["int"]], ["add", "theorem", "ceil_pos", ["nat"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "exp_one_rpow", ["real"]]]}, {"oldPath": "src/combinatorics/additive/behrend.lean", "newPath": "src/combinatorics/additive/behrend.lean", "changes": [["add", "theorem", "bound", ["behrend"]], ["add", "theorem", "bound_aux'", ["behrend"]], ["add", "theorem", "bound_aux", ["behrend"]], ["add", "theorem", "ceil_lt_mul", ["behrend"]], ["add", "theorem", "d_value_pos", ["behrend"]], ["add", "theorem", "div_lt_floor", ["behrend"]], ["add", "theorem", "exists_large_sphere", ["behrend"]], ["add", "theorem", "exists_large_sphere_aux", ["behrend"]], ["add", "theorem", "exp_four_lt", ["behrend"]], ["add", "theorem", "exp_neg_two_mul_le", ["behrend"]], ["add", "theorem", "four_zero_nine_six_lt_exp_sixteen", ["behrend"]], ["add", "theorem", "le_N", ["behrend"]], ["add", "theorem", "le_sqrt_log", ["behrend"]], ["add", "theorem", "log_two_mul_two_le_sqrt_log_eight", ["behrend"]], ["add", "theorem", "lower_bound_le_one'", ["behrend"]], ["add", "theorem", "lower_bound_le_one", ["behrend"]], ["add", "theorem", "n_value_pos", ["behrend"]], ["add", "theorem", "roth_lower_bound", ["behrend"]], ["add", "theorem", "roth_lower_bound_explicit", ["behrend"]], ["add", "theorem", "three_le_n_value", ["behrend"]], ["add", "theorem", "two_div_one_sub_two_div_e_le_eight", ["behrend"]], ["add", "theorem", "two_le_n_value", ["behrend"]]]}]}, {"timestamp": 1658951090, "sha": "732279dd", "message": "feat(analysis/special_functions/gaussian): formula for gaussian integrals (#15106)", "changes": [{"oldPath": null, "newPath": "src/analysis/special_functions/gaussian.lean", "changes": [["add", "theorem", "exp_neg_mul_sq_is_o_exp_neg", []], ["add", "theorem", "integrable_exp_neg_mul_sq", []], ["add", "theorem", "integrable_exp_neg_mul_sq_iff", []], ["add", "theorem", "integrable_mul_exp_neg_mul_sq", []], ["add", "theorem", "integrable_on_rpow_mul_exp_neg_mul_sq", []], ["add", "theorem", "integrable_rpow_mul_exp_neg_mul_sq", []], ["add", "theorem", "integral_gaussian", []], ["add", "theorem", "integral_mul_exp_neg_mul_sq", []], ["add", "theorem", "rpow_mul_exp_neg_mul_sq_is_o_exp_neg", []]]}]}, {"timestamp": 1658951089, "sha": "3086d342", "message": "feat(probability/martingale): the discrete stochastic integral of a submartingale is a submartingale (#14909)\nThis PR proves that the discrete stochastic integral of a predictable process with a submartingale is a submartingale.", "changes": [{"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["add", "theorem", "sum_mul_sub'", ["measure_theory", "submartingale"]], ["add", "theorem", "sum_mul_sub", ["measure_theory", "submartingale"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["del", "theorem", "add", ["measure_theory", "adapted"]], ["add", "theorem", "inv", ["measure_theory", "adapted"]], ["add", "theorem", "mul", ["measure_theory", "adapted"]], ["del", "theorem", "neg", ["measure_theory", "adapted"]], ["mod", "theorem", "smul", ["measure_theory", "adapted"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "adapted"]], ["add", "theorem", "strongly_measurable_le", ["measure_theory", "adapted"]]]}]}, {"timestamp": 1658951088, "sha": "583a7034", "message": "feat(category_theory): a characterization of separating objects (#14838)", "changes": [{"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": [["add", "theorem", "is_coseparating_iff_mono", ["category_theory"]], ["add", "theorem", "is_coseparator_iff_mono", ["category_theory"]], ["add", "theorem", "is_separating_iff_epi", ["category_theory"]], ["add", "theorem", "is_separator_iff_epi", ["category_theory"]]]}]}, {"timestamp": 1658951087, "sha": "08af4a31", "message": "chore(data/polynomial/cancel_leads): golf using `compute_degree_le` (#14776)\nThis PR is the companion to #14762. It serves to show how to use the tactic in a few cases in what is already in mathlib.\nI generalized lemma `nat_degree_cancel_leads_lt_of_nat_degree_le_nat_degree` to assume `ring` instead of `comm_ring + is_domain`. The lemma with the weaker assumptions is `nat_degree_cancel_leads_lt_of_nat_degree_le_nat_degree_of_comm`. I left the old lemma as well,with proof a simple application of the newer lemma.", "changes": [{"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": [["mod", "theorem", "nat_degree_cancel_leads_lt_of_nat_degree_le_nat_degree", ["polynomial"]], ["add", "theorem", "nat_degree_cancel_leads_lt_of_nat_degree_le_nat_degree_of_comm", ["polynomial"]]]}]}, {"timestamp": 1658941408, "sha": "c59720b4", "message": "chore(analysis/convex/cone): add trivial coercion lemmas (#15713)\nThis also changes `le` to unfold in terms of `coe` rather than `carrier`, since that's the form we have lemmas about.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "coe_Inf", ["convex_cone"]], ["add", "theorem", "coe_bot", ["convex_cone"]], ["mod", "theorem", "coe_inf", ["convex_cone"]], ["add", "theorem", "coe_infi", ["convex_cone"]], ["add", "theorem", "coe_mk", ["convex_cone"]], ["add", "theorem", "coe_top", ["convex_cone"]], ["add", "theorem", "mem_infi", ["convex_cone"]]]}]}, {"timestamp": 1658941407, "sha": "63eb48be", "message": "feat(analysis/special_functions/trigonometric/angle): equality of `cos` or `sin` (#15651)\n`analysis.special_functions.trigonometric.angle` has results relating\nequality of `real.cos` of two reals, or `real.sin` of two reals, to\nrelations between those reals converted to `angle`. Add variants of\nthose results where one or both of the arguments are passed as `angle`\ninstead of as reals, with `real.angle.cos` and `real.angle.sin` used\non those `angle` arguments.\nThe version for `cos` with one `angle` and one real argument, in\nparticular, is what I want for proving that the oriented angle between\ntwo nonzero vectors is plus or minus the unoriented angle.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "cos_eq_iff_coe_eq_or_eq_neg", ["real", "angle"]], ["mod", "theorem", "cos_eq_iff_eq_or_eq_neg", ["real", "angle"]], ["add", "theorem", "cos_eq_real_cos_iff_eq_or_eq_neg", ["real", "angle"]], ["add", "theorem", "sin_eq_iff_coe_eq_or_add_eq_pi", ["real", "angle"]], ["mod", "theorem", "sin_eq_iff_eq_or_add_eq_pi", ["real", "angle"]], ["add", "theorem", "sin_eq_real_sin_iff_eq_or_add_eq_pi", ["real", "angle"]]]}]}, {"timestamp": 1658941406, "sha": "45732987", "message": "doc(field_theory/splitting_field): update code example to reflect changes to diamond issues (#15620)\nWe now have infrastructure in place to avoid diamonds in nat/int/rat algebras, so we can't appeal to a lack of it when explaining diamond issues.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}]}, {"timestamp": 1658941405, "sha": "ac2addd1", "message": "feat(linear_algebra): lemmas on associatedness of determinants of linear maps (#15587)\n`det f` equals `det f'` up to units if `f'` is `f` composed with a linear equiv.\nFirst a homogeneous form where `f f' : M → M`, then a heterogeneous form where `f f' : M → N` and the equivs `e e' : N → M`.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "associated_det_comp_equiv", ["linear_map"]], ["add", "theorem", "associated_det_of_eq_comp", ["linear_map"]]]}]}, {"timestamp": 1658941404, "sha": "69654263", "message": "feat(computability/ackermann): the Ackermann function isn't primitive recursive (#15505)\nSee module docs for a thorough explanation of the proof.", "changes": [{"oldPath": null, "newPath": "src/computability/ackermann.lean", "changes": [["add", "def", "ack", []], ["add", "theorem", "ack_ack_lt_ack_max_add_two", []], ["add", "theorem", "ack_add_one_sq_lt_ack_add_four", []], ["add", "theorem", "ack_add_one_sq_lt_ack_add_three", []], ["add", "theorem", "ack_inj_left", []], ["add", "theorem", "ack_inj_right", []], ["add", "theorem", "ack_injective_left", []], ["add", "theorem", "ack_injective_right", []], ["add", "theorem", "ack_le_ack", []], ["add", "theorem", "ack_le_iff_left", []], ["add", "theorem", "ack_le_iff_right", []], ["add", "theorem", "ack_lt_iff_left", []], ["add", "theorem", "ack_lt_iff_right", []], ["add", "theorem", "ack_mkpair_lt", []], ["add", "theorem", "ack_mono_left", []], ["add", "theorem", "ack_mono_right", []], ["add", "theorem", "ack_one", []], ["add", "theorem", "ack_pos", []], ["add", "theorem", "ack_strict_mono_left", []], ["add", "theorem", "ack_strict_mono_right", []], ["add", "theorem", "ack_succ_right_le_ack_succ_left", []], ["add", "theorem", "ack_succ_succ", []], ["add", "theorem", "ack_succ_zero", []], ["add", "theorem", "ack_three", []], ["add", "theorem", "ack_two", []], ["add", "theorem", "ack_zero", []], ["add", "theorem", "add_add_one_le_ack", []], ["add", "theorem", "add_lt_ack", []], ["add", "theorem", "exists_lt_ack_of_nat_primrec", []], ["add", "theorem", "lt_ack_left", []], ["add", "theorem", "lt_ack_right", []], ["add", "theorem", "max_ack_left", []], ["add", "theorem", "max_ack_right", []], ["add", "theorem", "not_nat_primrec_ack_self", []], ["add", "theorem", "not_primrec_ack_self", []], ["add", "theorem", "not_primrec₂_ack", []], ["add", "theorem", "one_lt_ack_succ_left", []], ["add", "theorem", "one_lt_ack_succ_right", []]]}]}, {"timestamp": 1658941403, "sha": "b3efc733", "message": "feat(order/well_founded): typeclasses for well-founded `<` and `>` (#15399)\n# Well-founded typeclasses\nWe introduce a new unbundled typeclass `is_well_founded` for a general well-founded relation, and reducible defs `well_founded_lt` and `well_founded_gt` for well-founded `<` and `>` specifically, to be used as mixins. For now, all we do is specialize only the most basic API on well-founded relations to these new typeclasses. \nThis is just an initial development. If this is merged, a subsequent PR will redefine `is_well_order` in terms of `is_well_founded` (and remove the redundant `irrefl` field). Further PRs will focus on providing all the possible instances for this new typeclass, and actually using it throughout mathlib.\nMoved from #15023. \n## Why do we want this?\nHere's the part where I justify why this is a good thing we want in mathlib.\n### Well-ordered `<`\nThere is a need to talk about well-ordered `<` relations, as a quick search for `is_well_order α (<)` or `is_well_order ι (<)` reveals. The most obvious way to spell this condition out, namely `[has_lt α] [is_well_order α (<)]` is actually the most inconvenient, since none of the results for linear orders are available. You actually need to write `[linear_order α] [is_well_order α (<)]` instead.\nWith this new typeclass, the obvious spelling is now the good one: `[linear_order α] [well_founded_lt α]`\n### Redundant typeclasses\nWe actually already at least four typeclasses for the well-foundedness of a concrete relation: `category.noetherian_object`, `category.artinian_object`, `topological_space.noetherian_space`, and `wf_dvd_monoid`. One currently needs to specialize the characterizing properties of a well-founded relation to these separate typeclasses in order to use them. Redefining these typeclasses in terms of these new ones, and making them `reducible def`s, would alleviate this problem.\n### Typeclass inference\nWell-founded relations are actually a nice candidate for typeclass inference, since there's many common constructions that automatically preserve well-foundedness. These include taking inverse images (including `measure` and `order.preimage`), maps through relation embeddings (including subtypes), lexicographic sums or products, and adding a top or bottom element. Many of these are currently provided as instances, but only for well-orders.\n### Misleading theorem names \nPerhaps the most useful result on well-founded relations is that every nonempty set has a minimum - when you view the relation as `<`, that is. This leads to misleading theorem names when you're using them on a well-founded `>` relation. With this refactor, we could simply specialize `well_founded.min` into `well_founded_gt.max` and end up with clearer theorem statements.\nOn a related note, given a linear order and a well-founded `<` relation, we can rephrase `well_founded.not_lt_min` into the much more convenient `well_founded_lt.min_le`.", "changes": [{"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "apply", ["is_well_founded"]], ["add", "def", "fix", ["is_well_founded"]], ["add", "theorem", "fix_eq", ["is_well_founded"]], ["add", "theorem", "induction", ["is_well_founded"]], ["add", "def", "to_has_well_founded", ["is_well_founded"]], ["add", "theorem", "is_well_founded", ["subrelation"]], ["add", "theorem", "asymmetric", ["well_founded"]], ["add", "theorem", "apply", ["well_founded_gt"]], ["add", "def", "fix", ["well_founded_gt"]], ["add", "theorem", "fix_eq", ["well_founded_gt"]], ["add", "theorem", "induction", ["well_founded_gt"]], ["add", "def", "to_has_well_founded", ["well_founded_gt"]], ["add", "def", "well_founded_gt", []], ["add", "theorem", "well_founded_gt_dual_iff", []], ["add", "theorem", "apply", ["well_founded_lt"]], ["add", "def", "fix", ["well_founded_lt"]], ["add", "theorem", "fix_eq", ["well_founded_lt"]], ["add", "theorem", "induction", ["well_founded_lt"]], ["add", "def", "to_has_well_founded", ["well_founded_lt"]], ["add", "def", "well_founded_lt", []], ["add", "theorem", "well_founded_lt_dual_iff", []]]}, {"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["del", "theorem", "not_gt_of_lt", ["well_founded"]]]}]}, {"timestamp": 1658932518, "sha": "b9387a48", "message": "feat(data/nat/totient): lemmas `totient_mul_of_prime_of_{not_}dvd` (#15645)\nAdd `totient_mul_of_prime_of_not_dvd (hp : p.prime) (h : ¬ p ∣ n) : (p * n).totient = (p - 1) * n.totient` and golf `totient_mul_of_prime_of_dvd`.", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_mul_of_prime_of_not_dvd", ["nat"]]]}]}, {"timestamp": 1658932516, "sha": "23c39818", "message": "feat(analysis/convex/cone): add inner_dual_cone_eq_Inter_inner_dual_cone_singleton (#15639)\nProof that a dual cone equals the intersection of dual cones of singleton sets.\nPart of #15637", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "inner_dual_cone_eq_Inter_inner_dual_cone_singleton", []]]}]}, {"timestamp": 1658932514, "sha": "735943a2", "message": "feat(algebraic_topology/dold_kan): construction of idempotent endomorphisms (#15616)\nThis PR introduces a sequence of idempotent endomorphisms of the alternating face map complex of a simplicial object in a preadditive category. In a future PR, by taking the \"limit\" of this sequence, we shall get the projection on the normalized subcomplex, parallel to the degenerate sucomplex.", "changes": [{"oldPath": "src/algebraic_topology/dold_kan/faces.lean", "newPath": "src/algebraic_topology/dold_kan/faces.lean", "changes": [["mod", "theorem", "comp_Hσ_eq", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["mod", "theorem", "comp_Hσ_eq_zero", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]]]}, {"oldPath": "src/algebraic_topology/dold_kan/homotopies.lean", "newPath": "src/algebraic_topology/dold_kan/homotopies.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/projections.lean", "changes": [["add", "theorem", "P_add_Q", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_add_Q_f", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_f_0_eq", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_f_idem", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_f_naturality", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "P_idem", ["algebraic_topology", "dold_kan"]], ["add", "def", "Q", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "Q_eq", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "Q_eq_zero", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "Q_f_0_eq", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "comp_P_eq_self_iff", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "comp_P_eq_self", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "theorem", "of_P", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "theorem", "map_P", ["algebraic_topology", "dold_kan"]], ["add", "def", "nat_trans_P", ["algebraic_topology", "dold_kan"]]]}]}, {"timestamp": 1658932511, "sha": "017e1f13", "message": "feat(ring_theory/algebraic): `is_algebraic_algebra_map_iff` (#15586)\nThis PR adds `is_algebraic_algebra_map_iff`, which is the `is_algebraic` analog of `is_integral_algebra_map_iff`. I also added the special case of an `intermediate_field`, which has been useful.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "algebraic_iff", ["intermediate_field"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_algebra_map_iff", []]]}]}, {"timestamp": 1658932509, "sha": "e9d99674", "message": "feat(linear_algebra/finite_dimensional): One-dimensional iff principal (#15558)", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "rank_le_one_iff_top_is_principal", ["module"]], ["add", "theorem", "rank_le_one_iff_is_principal", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_le_one_iff_top_is_principal", ["module"]], ["add", "theorem", "finrank_le_one_iff_is_principal", ["submodule"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1658932507, "sha": "a6f325fe", "message": "feat(algebraic_geometry): comap of surjective homomorphism is closed embedding (#15291)\nThe comap of a surjective homomorphism is a closed embedding between the Zariski spectra.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "theorem", "closed_embedding_comap_of_surjective", ["prime_spectrum"]], ["add", "theorem", "comap_inducing_of_surjective", ["prime_spectrum"]], ["add", "theorem", "image_comap_zero_locus_eq_zero_locus_comap", ["prime_spectrum"]], ["add", "theorem", "is_closed_range_comap_of_surjective", ["prime_spectrum"]], ["add", "theorem", "range_comap_of_surjective", ["prime_spectrum"]]]}]}, {"timestamp": 1658932504, "sha": "b4f242f1", "message": "feat(ring_theory): Formally étale/smooth/unramified morphisms are stable under base change. (#15243)", "changes": [{"oldPath": "src/ring_theory/etale.lean", "newPath": "src/ring_theory/etale.lean", "changes": []}]}, {"timestamp": 1658932502, "sha": "03172b6b", "message": "chore(ring_theory/dedekind_domain/ideal): generalize a lemma (#15104)", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["del", "theorem", "normalized_factors_prod", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "normalized_factors_prod_of_prime", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1658932496, "sha": "f11e306a", "message": "feat(category_theory/limits/construction): Construct finite limits from terminal objects and pullbacks (#14948)\nAlso provides the dual version, and also in terms of `preserves_limit`.", "changes": [{"oldPath": "src/category_theory/limits/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": [["add", "def", "is_binary_coproduct_of_is_initial_is_pushout", []], ["add", "def", "is_binary_product_of_is_terminal_is_pullback", []], ["add", "def", "preserves_binary_coproducts_of_preserves_initial_and_pushouts", []], ["add", "def", "preserves_binary_products_of_preserves_terminal_and_pullbacks", []]]}, {"oldPath": "src/category_theory/limits/constructions/equalizers.lean", "newPath": "src/category_theory/limits/constructions/equalizers.lean", "changes": [["add", "def", "coequalizer_cocone", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["add", "def", "coequalizer_cocone_is_colimit", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["add", "def", "construct_coequalizer", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["add", "def", "pushout_inl", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["add", "theorem", "pushout_inl_eq_pushout_inr", ["category_theory", "limits", "has_coequalizers_of_pushouts_and_binary_coproducts"]], ["add", "theorem", "has_coequalizers_of_pushouts_and_binary_coproducts", ["category_theory", "limits"]], ["mod", "theorem", "has_equalizers_of_pullbacks_and_binary_products", ["category_theory", "limits"]], ["add", "def", "preserves_coequalizers_of_pushouts_and_binary_coproducts", ["category_theory", "limits"]], ["add", "def", "preserves_equalizers_of_pullbacks_and_binary_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": [["add", "theorem", "has_finite_colimits_of_has_initial_and_pushouts", ["category_theory", "limits"]], ["add", "theorem", "has_finite_limits_of_has_terminal_and_pullbacks", ["category_theory", "limits"]], ["add", "def", "preserves_finite_colimits_of_preserves_initial_and_pushouts", ["category_theory", "limits"]], ["add", "def", "preserves_finite_limits_of_preserves_terminal_and_pullbacks", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "changes": [["add", "theorem", "has_pullback_of_preserves_pullback", ["category_theory", "limits"]], ["add", "theorem", "has_pushout_of_preserves_pushout", ["category_theory", "limits"]]]}]}, {"timestamp": 1658932494, "sha": "42eb7f2d", "message": "feat(linear_algebra/basis): shows the lattice of submodules of a module over a division ring is atomistic (#14883)\nThis PR shows that the lattice of submodules of a module over a division ring is atomistic, and that the atoms of this lattice are the spans of nonzero elements.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "atom_iff_nonzero_span", []], ["add", "theorem", "nonzero_span_atom", []]]}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "submodule_eq_Sup_le_nonzero_spans", ["submodule"]]]}]}, {"timestamp": 1658932492, "sha": "061ea99a", "message": "feat(category_theory/preadditive): constructing a semiadditive structure from binary biproducts (#14445)", "changes": [{"oldPath": null, "newPath": "src/category_theory/preadditive/of_biproducts.lean", "changes": [["add", "def", "add_comm_monoid_hom_of_has_binary_biproducts", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "theorem", "add_comp", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "theorem", "add_eq_left_addition", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "theorem", "add_eq_right_addition", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "theorem", "comp_add", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "theorem", "distrib", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "theorem", "is_unital_left_add", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "theorem", "is_unital_right_add", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "def", "left_add", ["category_theory", "semiadditive_of_binary_biproducts"]], ["add", "def", "right_add", ["category_theory", "semiadditive_of_binary_biproducts"]]]}]}, {"timestamp": 1658932490, "sha": "8f26acee", "message": "feat(group_theory/complement): transversal for the transfer homomorphism (#14182)\nIn order to make use of the transfer homomorphism, there is a messy computation that must be done. This computation involves a specific choice of transversal, which is constructed in this PR.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "coe_transfer_function", ["subgroup"]], ["add", "theorem", "mem_transfer_set", ["subgroup"]], ["add", "theorem", "quotient_equiv_sigma_zmod_apply", ["subgroup"]], ["add", "theorem", "quotient_equiv_sigma_zmod_symm_apply", ["subgroup"]], ["add", "theorem", "transfer_function_apply", ["subgroup"]], ["add", "def", "transfer_set", ["subgroup"]], ["add", "def", "transfer_transversal", ["subgroup"]], ["add", "theorem", "transfer_transversal_apply''", ["subgroup"]], ["add", "theorem", "transfer_transversal_apply'", ["subgroup"]], ["add", "theorem", "transfer_transversal_apply", ["subgroup"]]]}]}, {"timestamp": 1658932489, "sha": "bb3f990f", "message": "feat(data/sym/card): Prove stars and bars (#11162)\nIn this file we prove (in `sym.card_sym_eq_multichoose`) that `multichoose (card α) k` counts the number of multisets of cardinality `k` over a finite alphabet `α`. \nIn conjunction with `nat.multichoose_eq`, which shows that `multichoose n k = choose (n + k - 1) k`, we immediately derive `card (sym α k) = (card α + k - 1).choose k`, which is the essence of the \"stars and bars\" technique in combinatorics.", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/sym/card.lean", "newPath": "src/data/sym/card.lean", "changes": [["add", "theorem", "card_sym_eq_choose", ["sym"]], ["add", "theorem", "card_sym_eq_multichoose", ["sym"]], ["add", "theorem", "card_sym_fin_eq_multichoose", ["sym"]]]}]}, {"timestamp": 1658926386, "sha": "ba9c8f35", "message": "feat(ring_theory/tensor_product): A predicate for being the tensor product. (#15512)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/is_tensor_product.lean", "changes": [["add", "def", "equiv", ["is_base_change"]], ["add", "theorem", "equiv_symm_apply", ["is_base_change"]], ["add", "theorem", "equiv_tmul", ["is_base_change"]], ["add", "def", "lift", ["is_base_change"]], ["add", "theorem", "lift_comp", ["is_base_change"]], ["add", "theorem", "lift_eq", ["is_base_change"]], ["add", "def", "is_base_change", []], ["add", "def", "equiv", ["is_tensor_product"]], ["add", "theorem", "equiv_symm_apply", ["is_tensor_product"]], ["add", "theorem", "equiv_to_linear_map", ["is_tensor_product"]], ["add", "theorem", "induction_on", ["is_tensor_product"]], ["add", "def", "lift", ["is_tensor_product"]], ["add", "theorem", "lift_eq", ["is_tensor_product"]], ["add", "def", "map", ["is_tensor_product"]], ["add", "theorem", "map_eq", ["is_tensor_product"]], ["add", "def", "is_tensor_product", []], ["add", "theorem", "is_base_change", ["tensor_product"]], ["add", "theorem", "is_tensor_product", ["tensor_product"]]]}]}, {"timestamp": 1658926384, "sha": "f746956a", "message": "feat(ring_theory/ring_hom/finite): Finite ring morphisms are stable under base change (#15427)", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/ring_hom/finite.lean", "changes": [["add", "theorem", "finite_respects_iso", ["ring_hom"]], ["add", "theorem", "finite_stable_under_base_change", ["ring_hom"]], ["add", "theorem", "finite_stable_under_composition", ["ring_hom"]]]}]}, {"timestamp": 1658920477, "sha": "b8fb47c4", "message": "refactor(topology/sheaves): Redefine sheaves in terms of Grothendieck topology. (#15384)\nWe change the \"official definition\" of sheaves over topological spaces from the equalizer diagram condition to the condition in terms of the Grothendieck topology on `Opens(X)`. The benefit is that \n1. The `X.Sheaf C` category is now defeq to `(opens.grothendieck_topology X).Sheaf C`, so that functors between categories of sheaves over sites could be specialized onto topological spaces without the abundant equivalences.\n2. It allows sheaves over spaces to value in arbitrary categories that doesn't have all products.\nThe original sheaf condition is now called `presheaf.is_sheaf_equalizer_products`, and `presheaf.is_sheaf_iff_is_sheaf_equalizer_products` (in `topology.sheaves.sheaf_condition.sites`) shows that the two are equivalent.", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "newPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["mod", "def", "to_stalk", ["algebraic_geometry", "structure_sheaf"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "theorem", "is_sheaf_of_iso_iff", ["category_theory", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/functors.lean", "newPath": "src/topology/sheaves/functors.lean", "changes": []}, {"oldPath": "src/topology/sheaves/limits.lean", "newPath": "src/topology/sheaves/limits.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["mod", "theorem", "comp_app", ["Top", "sheaf"]], ["mod", "theorem", "id_app", ["Top", "sheaf"]], ["add", "def", "presheaf", ["Top", "sheaf"]], ["mod", "def", "sheaf", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": [["add", "def", "is_sheaf_equalizer_products", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": [["mod", "theorem", "is_sheaf_iff_is_sheaf_opens_le_cover", ["Top", "presheaf"]], ["del", "theorem", "is_sheaf_sites_iff_is_sheaf_opens_le_cover", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": [["del", "def", "Sheaf_sites_to_sheaf_spaces", ["Top", "presheaf"]], ["del", "def", "Sheaf_spaces_equiv_sheaf_sites", ["Top", "presheaf"]], ["del", "def", "Sheaf_spaces_equiv_sheaf_sites_functor_forget", ["Top", "presheaf"]], ["del", "def", "Sheaf_spaces_equiv_sheaf_sites_inverse_forget", ["Top", "presheaf"]], ["del", "def", "Sheaf_spaces_to_sheaf_sites", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_equalizer_products_of_is_sheaf", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_sheaf_equalizer_products", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_of_is_sheaf_equalizer_products", ["Top", "presheaf"]], ["del", "theorem", "is_sheaf_sites_iff_is_sheaf_spaces", ["Top", "presheaf"]], ["del", "theorem", "is_sheaf_sites_of_is_sheaf_spaces", ["Top", "presheaf"]], ["del", "theorem", "is_sheaf_spaces_of_is_sheaf_sites", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheafify.lean", "newPath": "src/topology/sheaves/sheafify.lean", "changes": [["mod", "def", "sheafify_stalk_iso", ["Top", "presheaf"]], ["mod", "def", "stalk_to_fiber", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1658920476, "sha": "01c60b26", "message": "feat(ring_theory/ring_hom/finite): Finite type is a local property (#15379)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["add", "theorem", "mem_of_span_eq_top_of_smul_pow_mem", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "pow_smul_mem_of_smul_subset_of_mem_adjoin", ["algebra"]]]}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": [["add", "theorem", "exists_smul_mem_of_mem_adjoin", ["is_localization"]], ["add", "def", "of_localization_finite_span_target", ["ring_hom"]], ["add", "theorem", "of_localization_span_target_iff_finite", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ring_hom/finite_type.lean", "changes": [["add", "theorem", "finite_is_local", ["ring_hom"]], ["add", "theorem", "finite_type_holds_for_localization_away", ["ring_hom"]], ["add", "theorem", "finite_type_of_localization_span_target", ["ring_hom"]], ["add", "theorem", "finite_type_stable_under_composition", ["ring_hom"]]]}]}, {"timestamp": 1658907597, "sha": "cffa0311", "message": "feat(category_theory): full_of_surjective (#14974)", "changes": [{"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": [["mod", "theorem", "map_injective", ["category_theory", "functor"]], ["add", "theorem", "map_surjective", ["category_theory", "functor"]]]}]}, {"timestamp": 1658907595, "sha": "293da933", "message": "feat(ring_theory): the Ore localization of a ring (#14348)\nImplements the Ore localization of a potentially non-commutative ring and shows its universal property.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "coe_eq_of_eq_mk", ["subtype"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ore_localization/basic.lean", "changes": [["add", "theorem", "add_ore_div", ["ore_localization"]], ["add", "theorem", "div_one_mul", ["ore_localization"]], ["add", "def", "lift_expand", ["ore_localization"]], ["add", "theorem", "lift_expand_of", ["ore_localization"]], ["add", "def", "lift₂_expand", ["ore_localization"]], ["add", "theorem", "lift₂_expand_of", ["ore_localization"]], ["add", "theorem", "nontrivial_of_non_zero_divisors", ["ore_localization"]], ["add", "def", "numerator_hom", ["ore_localization"]], ["add", "theorem", "numerator_hom_apply", ["ore_localization"]], ["add", "theorem", "numerator_hom_inj", ["ore_localization"]], ["add", "theorem", "numerator_is_unit", ["ore_localization"]], ["add", "def", "numerator_unit", ["ore_localization"]], ["add", "def", "ore_div", ["ore_localization"]], ["add", "def", "ore_div_add_char'", ["ore_localization"]], ["add", "theorem", "ore_div_add_char", ["ore_localization"]], ["add", "theorem", "ore_div_add_ore_div", ["ore_localization"]], ["add", "theorem", "ore_div_eq_iff", ["ore_localization"]], ["add", "def", "ore_div_mul_char'", ["ore_localization"]], ["add", "theorem", "ore_div_mul_char", ["ore_localization"]], ["add", "theorem", "ore_div_mul_ore_div", ["ore_localization"]], ["add", "theorem", "ore_div_mul_ore_div_comm", ["ore_localization"]], ["add", "def", "ore_eqv", ["ore_localization"]], ["add", "theorem", "right_distrib", ["ore_localization"]], ["add", "def", "universal_hom", ["ore_localization"]], ["add", "theorem", "universal_hom_apply", ["ore_localization"]], ["add", "theorem", "universal_hom_commutes", ["ore_localization"]], ["add", "theorem", "universal_hom_unique", ["ore_localization"]], ["add", "def", "universal_mul_hom", ["ore_localization"]], ["add", "theorem", "universal_mul_hom_apply", ["ore_localization"]], ["add", "theorem", "universal_mul_hom_commutes", ["ore_localization"]], ["add", "theorem", "universal_mul_hom_unique", ["ore_localization"]], ["add", "theorem", "zero_div_eq_zero", ["ore_localization"]], ["add", "def", "ore_localization", []]]}, {"oldPath": null, "newPath": "src/ring_theory/ore_localization/ore_set.lean", "changes": [["add", "def", "ore_condition", ["ore_localization"]], ["add", "def", "ore_denom", ["ore_localization"]], ["add", "theorem", "ore_eq", ["ore_localization"]], ["add", "theorem", "ore_left_cancel", ["ore_localization"]], ["add", "def", "ore_num", ["ore_localization"]], ["add", "def", "ore_set_of_cancel_monoid_with_zero", ["ore_localization"]], ["add", "def", "ore_set_of_no_zero_divisors", ["ore_localization"]]]}]}, {"timestamp": 1658905061, "sha": "b583055c", "message": "feat(category_theory): a category with a small detecting set is well-powered (#15238)", "changes": [{"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": [["add", "theorem", "eq_of_is_detecting", ["category_theory", "subobject"]], ["add", "theorem", "eq_of_le_of_is_detecting", ["category_theory", "subobject"]], ["add", "theorem", "inf_eq_of_is_detecting", ["category_theory", "subobject"]], ["add", "theorem", "well_powered_of_is_detecting", ["category_theory"]], ["add", "theorem", "well_powered_of_is_detector", ["category_theory"]]]}]}, {"timestamp": 1658898593, "sha": "a0e2c623", "message": "refactor(topology/algebra/order/basic): Add antitone versions of sup and inf lemmas for continuous monotone functions and move them to monotone/antitone namespaces. (#15218)\nThis PR adds antitone versions of lemmas about supremum and infimum under monotone functions and moves those lemmas to monotone/antitone namespaces. Simultaneously, the type class assumption on the codomain is weakened from `order_topology` to `order_closed_topology`.\nMoreover, lemmas about limsup and liminf under monotone/antitone functions are added: `antitone.map_Limsup_of_continuous_at` etc.", "changes": [{"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "frequently_lt_of_Liminf_lt", ["filter"]], ["add", "theorem", "frequently_lt_of_lt_Limsup", ["filter"]], ["add", "theorem", "liminf_eq_Sup_Inf", ["filter"]], ["add", "theorem", "limsup_eq_Inf_Sup", ["filter"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "map_Inf_of_continuous_at'", ["antitone"]], ["add", "theorem", "map_Inf_of_continuous_at", ["antitone"]], ["add", "theorem", "map_Sup_of_continuous_at'", ["antitone"]], ["add", "theorem", "map_Sup_of_continuous_at", ["antitone"]], ["add", "theorem", "map_cInf_of_continuous_at", ["antitone"]], ["add", "theorem", "map_cSup_of_continuous_at", ["antitone"]], ["add", "theorem", "map_cinfi_of_continuous_at", ["antitone"]], ["add", "theorem", "map_csupr_of_continuous_at", ["antitone"]], ["add", "theorem", "map_infi_of_continuous_at'", ["antitone"]], ["add", "theorem", "map_infi_of_continuous_at", ["antitone"]], ["add", "theorem", "map_supr_of_continuous_at'", ["antitone"]], ["add", "theorem", "map_supr_of_continuous_at", ["antitone"]], ["del", "theorem", "map_Inf_of_continuous_at_of_monotone'", []], ["del", "theorem", "map_Inf_of_continuous_at_of_monotone", []], ["del", "theorem", "map_Sup_of_continuous_at_of_monotone'", []], ["del", "theorem", "map_Sup_of_continuous_at_of_monotone", []], ["del", "theorem", "map_cInf_of_continuous_at_of_monotone", []], ["del", "theorem", "map_cSup_of_continuous_at_of_monotone", []], ["del", "theorem", "map_cinfi_of_continuous_at_of_monotone", []], ["del", "theorem", "map_csupr_of_continuous_at_of_monotone", []], ["del", "theorem", "map_infi_of_continuous_at_of_monotone'", []], ["del", "theorem", "map_infi_of_continuous_at_of_monotone", []], ["del", "theorem", "map_supr_of_continuous_at_of_monotone'", []], ["del", "theorem", "map_supr_of_continuous_at_of_monotone", []], ["add", "theorem", "map_Inf_of_continuous_at'", ["monotone"]], ["add", "theorem", "map_Inf_of_continuous_at", ["monotone"]], ["add", "theorem", "map_Sup_of_continuous_at'", ["monotone"]], ["add", "theorem", "map_Sup_of_continuous_at", ["monotone"]], ["add", "theorem", "map_cInf_of_continuous_at", ["monotone"]], ["add", "theorem", "map_cSup_of_continuous_at", ["monotone"]], ["add", "theorem", "map_cinfi_of_continuous_at", ["monotone"]], ["add", "theorem", "map_csupr_of_continuous_at", ["monotone"]], ["add", "theorem", "map_infi_of_continuous_at'", ["monotone"]], ["add", "theorem", "map_infi_of_continuous_at", ["monotone"]], ["add", "theorem", "map_supr_of_continuous_at'", ["monotone"]], ["add", "theorem", "map_supr_of_continuous_at", ["monotone"]], ["mod", "theorem", "tendsto_nhds_within_Iio", ["monotone"]], ["mod", "theorem", "tendsto_nhds_within_Ioi", ["monotone"]]]}, {"oldPath": "src/topology/algebra/order/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": [["add", "theorem", "map_Liminf_of_continuous_at", ["antitone"]], ["add", "theorem", "map_Limsup_of_continuous_at", ["antitone"]], ["add", "theorem", "map_liminf_of_continuous_at", ["antitone"]], ["add", "theorem", "map_limsup_of_continuous_at", ["antitone"]], ["add", "theorem", "map_Liminf_of_continuous_at", ["monotone"]], ["add", "theorem", "map_Limsup_of_continuous_at", ["monotone"]], ["add", "theorem", "map_liminf_of_continuous_at", ["monotone"]], ["add", "theorem", "map_limsup_of_continuous_at", ["monotone"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1658896037, "sha": "a5f78c98", "message": "chore(scripts): update nolints.txt (#15706)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1658882548, "sha": "46b19752", "message": "refactor(algebra/big_operators/basic): Use `to_additive` (#15702)\nProve `sum_range_sub` and `sum_range_sub'` using `to_additive`. Change the statement of `prod_range_div` to use `f (i + 1) / f i` rather than `f (i + 1) * (f i)⁻¹`. Rename `sum_range_sub_of_monotone` to `sum_range_tsub`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_range_induction", ["finset"]], ["del", "theorem", "sum_range_induction", ["finset"]], ["del", "theorem", "sum_range_sub'", ["finset"]], ["del", "theorem", "sum_range_sub", ["finset"]], ["del", "theorem", "sum_range_sub_of_monotone", ["finset"]], ["add", "theorem", "sum_range_tsub", ["finset"]]]}]}, {"timestamp": 1658877962, "sha": "10aeb392", "message": "style(analysis/inner_product_space/l2_space): small style improvement (#15698)\nSpotted by @hrmacbeth", "changes": [{"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}]}, {"timestamp": 1658877961, "sha": "8050ac7c", "message": "feat(set_theory/zfc/basic): `inj` lemmas (#15545)\nWe rename two existing lemmas from `*_inj` to `*_injective` to match mathlib convention, and add the corresponding `inj` lemmas.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["mod", "theorem", "pair_inj", ["Set"]], ["add", "theorem", "pair_injective", ["Set"]], ["mod", "theorem", "singleton_inj", ["Set"]], ["add", "theorem", "singleton_injective", ["Set"]]]}]}, {"timestamp": 1658877960, "sha": "c6357eeb", "message": "feat(analysis/inner_product_space): in finite dimension, hilbert basis = orthonormal basis (#15540)\nThis allows transferring general facts about hilbert bases to orthonormal bases", "changes": [{"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": [["add", "theorem", "coe_to_orthonormal_basis", ["hilbert_basis"]], ["add", "theorem", "coe_to_hilbert_basis", ["orthonormal_basis"]]]}]}, {"timestamp": 1658867611, "sha": "f3e89fb4", "message": "chore(topology/sequences): drop local notation `x ⟶ a` (#15696)\nAs requested by @PatrickMassot some time ago.", "changes": [{"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1658867609, "sha": "4a6e8cff", "message": "chore(data/list/of_fn): injectivity (#15695)", "changes": [{"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "sigma_eq_iff_eq_comp_cast", ["fin"]]]}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["add", "theorem", "of_fn_inj'", ["list"]], ["add", "theorem", "of_fn_inj", ["list"]], ["add", "theorem", "of_fn_injective", ["list"]]]}]}, {"timestamp": 1658867607, "sha": "fc5a82e1", "message": "feat(analysis/inner_product/pi_L2): a finite orthonormal family is a basis of its span (#15481)\nWe actually prove this for finite sub-families of a generic orthonormal basis because this is easier to use in practice", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "orthonormal_comp_iff", ["linear_isometry"]], ["add", "theorem", "cod_restrict", ["orthonormal"]], ["add", "theorem", "orthonormal_span", []]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}]}, {"timestamp": 1658867605, "sha": "eea396ef", "message": "feat(set/intervals/monotone): add some monotonicity lemmas (#14896)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "antitone_on_singleton", ["set"]], ["add", "theorem", "monotone_on_singleton", ["set"]], ["add", "theorem", "strict_anti_on_singleton", ["set"]], ["add", "theorem", "strict_mono_on_singleton", ["set"]]]}, {"oldPath": "src/data/set/intervals/monotone.lean", "newPath": "src/data/set/intervals/monotone.lean", "changes": [["add", "theorem", "strict_anti_on_Iic_of_lt_pred", []], ["add", "theorem", "strict_anti_on_Iic_of_succ_lt", []], ["add", "theorem", "Iic_id_le", ["strict_mono_on"]], ["add", "theorem", "Iic_le_id", ["strict_mono_on"]], ["add", "theorem", "strict_mono_on_Iic_of_lt_succ", []], ["add", "theorem", "strict_mono_on_Iic_of_pred_lt", []]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "le_succ_iterate", ["order"]], ["add", "theorem", "pred_iterate_le", ["order"]]]}]}, {"timestamp": 1658858798, "sha": "fd77cbf2", "message": "chore(data/set/{function,countable}): extract a lemma from a proof (#15668)", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "exists_inj_on_iff_injective", ["set"]]]}]}, {"timestamp": 1658858797, "sha": "8bc2354c", "message": "feat(ring_theory/valuation/valuation_subring): define maximal ideal of valuation subring and provide basic API (#14656)\nThis PR defines the unique maximal ideal of a valuation subring as a subsemigroup of the field. We prove a few equivalent conditions for two valuations to be equivalent, and we use this to show two valuation subrings are equivalent iff they have the same maximal ideal.", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "map_inv", ["add_valuation"]], ["mod", "theorem", "ne_top_iff", ["add_valuation"]], ["mod", "theorem", "top_iff", ["add_valuation"]], ["add", "theorem", "is_equiv_iff_val_lt_one", ["valuation"]], ["add", "theorem", "is_equiv_iff_val_sub_one_lt_one", ["valuation"]], ["add", "theorem", "is_equiv_tfae", ["valuation"]], ["mod", "theorem", "map_inv", ["valuation"]], ["mod", "theorem", "map_zpow", ["valuation"]], ["mod", "theorem", "ne_zero_iff", ["valuation"]], ["add", "theorem", "one_lt_val_iff", ["valuation"]], ["mod", "theorem", "zero_iff", ["valuation"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "coe_mem_nonunits_iff", ["valuation_subring"]], ["add", "theorem", "image_maximal_ideal", ["valuation_subring"]], ["add", "theorem", "mem_nonunits_iff", ["valuation_subring"]], ["add", "theorem", "mem_nonunits_iff_exists_mem_maximal_ideal", ["valuation_subring"]], ["add", "def", "nonunits", ["valuation_subring"]], ["add", "theorem", "nonunits_inj", ["valuation_subring"]], ["add", "theorem", "nonunits_injective", ["valuation_subring"]], ["add", "theorem", "nonunits_le", ["valuation_subring"]], ["add", "theorem", "nonunits_le_nonunits", ["valuation_subring"]], ["add", "def", "nonunits_order_embedding", ["valuation_subring"]], ["add", "theorem", "nonunits_subset", ["valuation_subring"]]]}]}, {"timestamp": 1658853647, "sha": "70887f86", "message": "feat(measure_theory/constructions/borel_space): the set of points for which a measurable sequence of functions converges is measurable (#15307)", "changes": [{"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": [["add", "theorem", "measurable_set_exists_tendsto", ["measure_theory"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "map", ["filter", "has_antitone_basis"]]]}]}, {"timestamp": 1658853646, "sha": "86f80202", "message": "feat(measure_theory/function/conditional_expectation): pull-out property of the conditional expectation (#15274)\nWe prove this result:\n```lean\nlemma condexp_strongly_measurable_mul {f g : α → ℝ} (hf : strongly_measurable[m] f)\n (hfg : integrable (f * g) μ) (hg : integrable g μ) :\n μ[f * g | m] =ᵐ[μ] f * μ[g | m] :=\n```\nThis could be extended beyond multiplication, to any bounded bilinear map, but we leave this to a future PR. For now we only prove the real multiplication case, which is needed for #14909 and #14933.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "condexp_strongly_measurable_mul", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_mul_of_bound", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_mul_of_bound₀", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_mul₀", ["measure_theory"]], ["add", "theorem", "condexp_strongly_measurable_simple_func_mul", ["measure_theory"]], ["add", "theorem", "tendsto_condexp_L1_of_dominated_convergence", ["measure_theory"]], ["add", "theorem", "tendsto_condexp_unique", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "bdd_mul'", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "def", "approx_bounded", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "exists_spanning_measurable_set_norm_le", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "norm_approx_bounded_le", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "tendsto_approx_bounded_ae", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "tendsto_approx_bounded_of_norm_le", ["measure_theory", "strongly_measurable"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "simple_func_mul'", ["measure_theory", "integrable"]], ["add", "theorem", "simple_func_mul", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1658846109, "sha": "e517862a", "message": "feat(tactic/positivity): a tactic for proving positivity/nonnegativity (#15618)\nThis is a new tactic, `positivity`, which solves goals of the form `0 ≤ x` and `0 < x`. The tactic works\nrecursively according to the syntax of the expression `x`.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/positivity.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": null, "newPath": "test/positivity.lean", "changes": []}]}, {"timestamp": 1658840244, "sha": "8edffc25", "message": "feat(order/filter/bases): lemmas about bases of product filters (#15630)\n* Move `has_basis.prod_self` and `mem_prod_self_iff` down to golf the proof.\n* Rename `has_basis.prod''` to `has_basis.prod_pprod`.\n* Rename `has_basis.prod'` to `has_basis.prod_same_index`.\n* Add `has_basis.prod_same_index_mono ` and `has_basis.prod_same_index_anti`.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "prod", ["filter", "has_antitone_basis"]], ["del", "theorem", "prod''", ["filter", "has_basis"]], ["del", "theorem", "prod'", ["filter", "has_basis"]], ["add", "theorem", "prod_pprod", ["filter", "has_basis"]], ["add", "theorem", "prod_same_index", ["filter", "has_basis"]], ["add", "theorem", "prod_same_index_anti", ["filter", "has_basis"]], ["add", "theorem", "prod_same_index_mono", ["filter", "has_basis"]], ["mod", "theorem", "prod_self", ["filter", "has_basis"]], ["mod", "theorem", "mem_prod_self_iff", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1658840243, "sha": "671d57dc", "message": "chore(number_theory/padics/padic_integers): golf the comm_ring instance (#15590)\nThis results in nicer definitional equalities that don't involve the application of a recursor.\nThis also renames `padic_int.coe_coe` to `padic_int.coe_nat_cast` and `padic_int.coe_coe_int` to `padic_int.coe_int_cast` to match other similar lemmas in mathlib.\nFinally, this fixes the TODO comment\n```lean\n-- TODO: define nat_cast/int_cast so that coe_coe and coe_coe_int are rfl\n```", "changes": [{"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": [["mod", "def", "ring_hom", ["padic_int", "coe"]], ["mod", "theorem", "coe_add", ["padic_int"]], ["del", "theorem", "coe_coe", ["padic_int"]], ["del", "theorem", "coe_coe_int", ["padic_int"]], ["add", "theorem", "coe_int_cast", ["padic_int"]], ["mod", "theorem", "coe_mul", ["padic_int"]], ["add", "theorem", "coe_nat_cast", ["padic_int"]], ["mod", "theorem", "coe_neg", ["padic_int"]], ["mod", "theorem", "coe_pow", ["padic_int"]], ["mod", "theorem", "coe_sub", ["padic_int"]], ["mod", "theorem", "ext", ["padic_int"]], ["add", "theorem", "mem_subring_iff", ["padic_int"]], ["mod", "theorem", "mk_coe", ["padic_int"]], ["mod", "theorem", "nonarchimedean", ["padic_int"]], ["mod", "theorem", "norm_add_eq_max_of_ne", ["padic_int"]], ["mod", "theorem", "norm_le_one", ["padic_int"]], ["mod", "theorem", "norm_p", ["padic_int"]], ["mod", "theorem", "norm_p_pow", ["padic_int"]], ["add", "def", "subring", ["padic_int"]]]}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}]}, {"timestamp": 1658840242, "sha": "e35aa928", "message": "feat(probability/moments): mgf/cgf of a sum of independent random variables (#15140)", "changes": [{"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["add", "theorem", "indep_fun_finset_prod_of_not_mem", ["probability_theory", "Indep_fun"]], ["add", "theorem", "indep_fun_prod", ["probability_theory", "Indep_fun"]], ["add", "theorem", "indep_fun_prod_range_succ", ["probability_theory", "Indep_fun"]], ["add", "theorem", "mul", ["probability_theory", "Indep_fun"]]]}, {"oldPath": "src/probability/moments.lean", "newPath": "src/probability/moments.lean", "changes": [["add", "theorem", "cgf_sum", ["probability_theory", "Indep_fun"]], ["add", "theorem", "integrable_exp_mul_sum", ["probability_theory", "Indep_fun"]], ["add", "theorem", "mgf_sum", ["probability_theory", "Indep_fun"]], ["add", "theorem", "exp_mul", ["probability_theory", "indep_fun"]], ["add", "theorem", "integrable_exp_mul_add", ["probability_theory", "indep_fun"]]]}]}, {"timestamp": 1658840241, "sha": "c4d273c2", "message": "feat(category_theory/limits): preserves biproducts if comparison is iso (#14419)", "changes": [{"oldPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "newPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "changes": [["add", "def", "biprod_comparison'", ["category_theory", "functor"]], ["add", "theorem", "biprod_comparison'_comp_biprod_comparison", ["category_theory", "functor"]], ["add", "def", "biprod_comparison", ["category_theory", "functor"]], ["add", "theorem", "biprod_comparison_fst", ["category_theory", "functor"]], ["add", "theorem", "biprod_comparison_snd", ["category_theory", "functor"]], ["add", "def", "biproduct_comparison'", ["category_theory", "functor"]], ["add", "theorem", "biproduct_comparison'_comp_biproduct_comparison", ["category_theory", "functor"]], ["add", "def", "biproduct_comparison", ["category_theory", "functor"]], ["add", "theorem", "biproduct_comparison_π", ["category_theory", "functor"]], ["add", "theorem", "inl_biprod_comparison'", ["category_theory", "functor"]], ["add", "theorem", "inr_biprod_comparison'", ["category_theory", "functor"]], ["add", "theorem", "retraction_biprod_comparison'", ["category_theory", "functor"]], ["add", "theorem", "retraction_biproduct_comparison'", ["category_theory", "functor"]], ["add", "theorem", "section_biprod_comparison", ["category_theory", "functor"]], ["add", "theorem", "section_biproduct_comparison", ["category_theory", "functor"]], ["add", "theorem", "ι_biproduct_comparison'", ["category_theory", "functor"]], ["add", "def", "preserves_binary_biproduct_of_epi_biprod_comparison'", ["category_theory", "limits"]], ["add", "def", "preserves_binary_biproduct_of_mono_biprod_comparison", ["category_theory", "limits"]], ["add", "def", "preserves_biproduct_of_epi_biproduct_comparison'", ["category_theory", "limits"]], ["add", "def", "preserves_biproduct_of_mono_biproduct_comparison", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "theorem", "to_cocone_ι_app", ["category_theory", "limits", "bicone"]], ["add", "theorem", "to_cocone_ι_app_mk", ["category_theory", "limits", "bicone"]], ["mod", "theorem", "to_cone_π_app", ["category_theory", "limits", "bicone"]], ["add", "theorem", "to_cone_π_app_mk", ["category_theory", "limits", "bicone"]], ["add", "def", "iso_coprod", ["category_theory", "limits", "biprod"]], ["add", "theorem", "iso_coprod_inv", ["category_theory", "limits", "biprod"]], ["add", "def", "iso_prod", ["category_theory", "limits", "biprod"]], ["add", "theorem", "iso_prod_hom", ["category_theory", "limits", "biprod"]], ["add", "theorem", "iso_prod_inv", ["category_theory", "limits", "biprod"]], ["add", "theorem", "biprod_iso_coprod_hom", ["category_theory", "limits"]], ["add", "def", "iso_coproduct", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "iso_coproduct_hom", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "iso_coproduct_inv", ["category_theory", "limits", "biproduct"]], ["add", "def", "iso_product", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "iso_product_hom", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "iso_product_inv", ["category_theory", "limits", "biproduct"]]]}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}]}, {"timestamp": 1658840240, "sha": "38341f11", "message": "feat(algebraic_topology/fundamental_groupoid): Define simply connected spaces (#12788)\nProves contractible spaces are simply connected, and that simply connected spaces are characterized by the property that any two paths between the same endpoints are homotopic.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/fundamental_groupoid/simply_connected.lean", "changes": [["add", "theorem", "simply_connected_def", []], ["add", "theorem", "simply_connected_iff_paths_homotopic'", []], ["add", "theorem", "simply_connected_iff_paths_homotopic", []], ["add", "theorem", "simply_connected_iff_unique_homotopic", []], ["add", "theorem", "paths_homotopic", ["simply_connected_space"]]]}]}, {"timestamp": 1658835068, "sha": "b21c9aa1", "message": "chore(analysis/inner_product_space): golf two proofs (#15679)\nGolf two proofs and move the lemmas into `inner_product_space/basic` since they now only depend on elementary facts about inner product spaces.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "ext_inner_left", []], ["add", "theorem", "ext_inner_right", []]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["del", "theorem", "ext_inner_left", ["inner_product_space"]], ["del", "theorem", "ext_inner_right", ["inner_product_space"]]]}]}, {"timestamp": 1658835066, "sha": "8fcb820b", "message": "feat(order/filter/basic): add `filter.has_basis.bInter_mem` (#15661)\nUse it to golf a few proofs.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "sInter_sets", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1658835065, "sha": "379b72c4", "message": "feat(topology/basic): add lemmas about `filter.lift' _ closure` (#15653)\nUse these lemmas to golf some proofs about `uniformity`.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "lift'_closure", ["filter", "has_basis"]], ["add", "theorem", "lift'_closure_eq_self", ["filter", "has_basis"]], ["add", "theorem", "le_lift'_closure", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "uniformity_closure", ["filter", "has_basis"]]]}]}, {"timestamp": 1658835064, "sha": "65d8b84e", "message": "feat(tooplogy/metric_space/hausdorff_distance): add lemmas about `thickening` (#15641)\n* rename `emetric.exists_pos_forall_le_edist` ->\n `emetric.exists_pos_forall_lt_edist`;\n - don't assume that the compact set is nonempty;\n - provide an `nnreal` number instead of an `ennreal`;\n - claim strict inequality;\n* add `metric.thickening_mem_nhds_set` and\n `metric.cthickening_mem_nhds_set`;\n* move `is_compact.exists_thickening_subset_open` below the\n `cthickening` version, make it clear from the proof that the latter\n implies the former;\n* add `metric.has_basis_nhds_set_thickening` and\n `metric.has_basis_nhds_set_cthickening`;\n* add `continuous.tendsto_nhds_set`", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["del", "theorem", "exists_pos_forall_le_edist", ["emetric"]], ["add", "theorem", "exists_pos_forall_lt_edist", ["emetric"]], ["add", "theorem", "cthickening_mem_nhds_set", ["metric"]], ["add", "theorem", "has_basis_nhds_set_cthickening", ["metric"]], ["add", "theorem", "has_basis_nhds_set_thickening", ["metric"]], ["add", "theorem", "thickening_mem_nhds_set", ["metric"]]]}, {"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": [["add", "theorem", "tendsto_nhds_set", ["continuous"]]]}]}, {"timestamp": 1658835063, "sha": "b08c7ace", "message": "chore(topology/locally_finite): move from `topology.basic` (#15640)\nCreate a new file about `locally_finite`, move the definition and some lemmas from `topology.basic`.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "Inter_compl_mem_nhds", ["locally_finite"]], ["del", "theorem", "closure", ["locally_finite"]], ["del", "theorem", "closure_Union", ["locally_finite"]], ["del", "theorem", "comp_inj_on", ["locally_finite"]], ["del", "theorem", "comp_injective", ["locally_finite"]], ["del", "theorem", "eventually_finite", ["locally_finite"]], ["del", "theorem", "exists_forall_eventually_at_top_eventually_eq'", ["locally_finite"]], ["del", "theorem", "exists_forall_eventually_at_top_eventually_eq", ["locally_finite"]], ["del", "theorem", "exists_forall_eventually_eq_prod", ["locally_finite"]], ["del", "theorem", "exists_mem_basis", ["locally_finite"]], ["del", "theorem", "is_closed_Union", ["locally_finite"]], ["del", "theorem", "point_finite", ["locally_finite"]], ["del", "theorem", "preimage_continuous", ["locally_finite"]], ["del", "theorem", "subset", ["locally_finite"]], ["del", "theorem", "sum_elim", ["locally_finite"]], ["del", "def", "locally_finite", []], ["del", "theorem", "locally_finite_of_finite", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/locally_finite.lean", "changes": [["add", "theorem", "Inter_compl_mem_nhds", ["locally_finite"]], ["add", "theorem", "closure_Union", ["locally_finite"]], ["add", "theorem", "comp_inj_on", ["locally_finite"]], ["add", "theorem", "comp_injective", ["locally_finite"]], ["add", "theorem", "eventually_finite", ["locally_finite"]], ["add", "theorem", "exists_forall_eventually_at_top_eventually_eq'", ["locally_finite"]], ["add", "theorem", "exists_forall_eventually_at_top_eventually_eq", ["locally_finite"]], ["add", "theorem", "exists_forall_eventually_eq_prod", ["locally_finite"]], ["add", "theorem", "exists_mem_basis", ["locally_finite"]], ["add", "theorem", "is_closed_Union", ["locally_finite"]], ["add", "theorem", "point_finite", ["locally_finite"]], ["add", "theorem", "preimage_continuous", ["locally_finite"]], ["add", "theorem", "sum_elim", ["locally_finite"]], ["add", "def", "locally_finite", []], ["add", "theorem", "locally_finite_of_finite", []]]}]}, {"timestamp": 1658835062, "sha": "2a9d5695", "message": "feat(topology/separation): add `disjoint_nhds_nhds` (#15635)\nProve that a topological space is a Hausdorff space if and only iff the neighborhood filters of distinct points are disjoint. Use existing API about filters to golf some proofs.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["del", "theorem", "disjoint_basis_iff", ["filter", "has_basis"]], ["add", "theorem", "disjoint_iff", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "disjoint_nhds_nhds", []], ["mod", "theorem", "eq_of_nhds_ne_bot", []], ["add", "theorem", "t2_space_iff_disjoint_nhds", []]]}]}, {"timestamp": 1658835061, "sha": "d43aef06", "message": "feat(topology/metric_space/lipschitz): add several lemmas (#15634)\nSome of these lemmas come from the sphere eversion project, with\nslightly different names.", "changes": [{"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "lipschitz_on_with_iff_restrict", ["maps_to"]]]}]}, {"timestamp": 1658835060, "sha": "a095eaeb", "message": "feat(order/filter/*): `filter.pi` is countably generated (#15632)\n* rename `filter.has_basis_infi` to `filter.has_basis_infi'`, add new `filter.has_basis_infi`;\n* move `prod.is_countably_generated`, golf, add `coprod.is_countably_generated`;\n* `is_countably_generated_seq` is no longer an instance, `infi.is_countably_generated` is better;\n* add `infi.is_countably_generated` and `pi.is_countably_generated`;\n* prove `prod.fist_countable_topology` (from the sphere eversion project) and `pi.first_countable_topology`;\n* generalize `pi.second_countable_topology` from `encodable` to `countable` so that it automatically applies to finite types.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "has_basis_infi'", ["filter"]], ["mod", "theorem", "is_countably_generated_seq", ["filter"]]]}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/locally_convex.lean", "newPath": "src/topology/algebra/module/locally_convex.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}]}, {"timestamp": 1658832355, "sha": "4b76b9d6", "message": "chore(algebra/jordan/basic): remove unused imports (#15686)\nWe don't need any linear algebra or the real numbers here", "changes": [{"oldPath": "src/algebra/jordan/basic.lean", "newPath": "src/algebra/jordan/basic.lean", "changes": []}]}, {"timestamp": 1658822737, "sha": "59382264", "message": "refactor(category_theory/*): use simps in the old parts of the library (#14236)", "changes": [{"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": []}, {"oldPath": "src/category_theory/functor/basic.lean", "newPath": "src/category_theory/functor/basic.lean", "changes": [["mod", "def", "comp", ["category_theory", "functor"]], ["del", "theorem", "comp_obj", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/functor/category.lean", "newPath": "src/category_theory/functor/category.lean", "changes": [["del", "theorem", "flip_map_app", ["category_theory", "functor"]], ["del", "theorem", "flip_obj_map", ["category_theory", "functor"]], ["del", "theorem", "flip_obj_obj", ["category_theory", "functor"]], ["mod", "def", "hcomp", ["category_theory", "nat_trans"]], ["del", "theorem", "hcomp_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/functor/const.lean", "newPath": "src/category_theory/functor/const.lean", "changes": [["del", "theorem", "map_app", ["category_theory", "functor", "const"]], ["del", "theorem", "obj_map", ["category_theory", "functor", "const"]], ["del", "theorem", "obj_obj", ["category_theory", "functor", "const"]], ["mod", "def", "op_obj_op", ["category_theory", "functor", "const"]], ["del", "theorem", "op_obj_op_hom_app", ["category_theory", "functor", "const"]], ["del", "theorem", "op_obj_op_inv_app", ["category_theory", "functor", "const"]], ["mod", "def", "const", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/functor/currying.lean", "newPath": "src/category_theory/functor/currying.lean", "changes": [["del", "theorem", "map_app_app", ["category_theory", "curry"]], ["del", "theorem", "obj_map_app", ["category_theory", "curry"]], ["del", "theorem", "obj_obj_map", ["category_theory", "curry"]], ["del", "theorem", "obj_obj_obj", ["category_theory", "curry"]], ["del", "theorem", "map_app", ["category_theory", "uncurry"]], ["del", "theorem", "obj_map", ["category_theory", "uncurry"]], ["del", "theorem", "obj_obj", ["category_theory", "uncurry"]]]}, {"oldPath": "src/category_theory/functor/hom.lean", "newPath": "src/category_theory/functor/hom.lean", "changes": [["add", "def", "hom", ["category_theory", "functor"]], ["del", "theorem", "hom_obj", ["category_theory", "functor"]], ["del", "theorem", "hom_pairing_map", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/final.lean", "newPath": "src/category_theory/limits/final.lean", "changes": []}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["del", "theorem", "hom_app", ["category_theory", "nat_iso", "of_components"]], ["del", "theorem", "inv_app", ["category_theory", "nat_iso", "of_components"]], ["mod", "def", "of_components", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/sites/left_exact.lean", "newPath": "src/category_theory/sites/left_exact.lean", "changes": []}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": []}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/default.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}]}, {"timestamp": 1658813908, "sha": "edb7f923", "message": "feat(algebra/jordan): Introduce Jordan rings (#11073)\nIntroduces linear Jordan rings; linearises the Jordan axiom; shows that every associative ring has a symmertised product with respect to which it is a commutative Jordan ring.\nLinearising the Jordan axiom is an important step towards showing that (commutative) Jordan algebras are power associative.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebra/jordan/basic.lean", "changes": [["add", "theorem", "commute_lmul_lmul_sq", []], ["add", "theorem", "commute_lmul_rmul", []], ["add", "theorem", "commute_lmul_rmul_sq", []], ["add", "theorem", "commute_lmul_sq_rmul", []], ["add", "theorem", "commute_rmul_rmul_sq", []], ["add", "theorem", "two_nsmul_lie_lmul_lmul_add_add_eq_zero", []], ["add", "theorem", "two_nsmul_lie_lmul_lmul_add_eq_lie_lmul_lmul_add", []]]}]}, {"timestamp": 1658811382, "sha": "9d8c0f82", "message": "doc(tactic/compute_degree): fix tactic tags, add examples to docs (#15680)", "changes": [{"oldPath": "src/tactic/compute_degree.lean", "newPath": "src/tactic/compute_degree.lean", "changes": []}]}, {"timestamp": 1658808162, "sha": "df09f2a7", "message": "chore(scripts): update nolints.txt (#15685)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1658802075, "sha": "1142e0b7", "message": "feat(big_operators/fin): sum over elements of vector equal to `a` equals count `a` (#15360)\nThe sum over `i : fin n` of 1 for vector elements equal to some `a` is just count applied to `a`.", "changes": [{"oldPath": "src/data/fintype/fin.lean", "newPath": "src/data/fintype/fin.lean", "changes": [["mod", "theorem", "Ioi_succ", ["fin"]], ["mod", "theorem", "Ioi_zero_eq_map", ["fin"]], ["add", "theorem", "card_filter_univ_eq_vector_nth_eq_count", ["fin"]], ["add", "theorem", "card_filter_univ_succ'", ["fin"]], ["add", "theorem", "card_filter_univ_succ", ["fin"]]]}]}, {"timestamp": 1658785710, "sha": "d85af62f", "message": "chore(tactic/fix_reflect_string): delete file (#15537)\nThe file `tactic/fix_reflect_string` has a header from @gebner explaining that it was written as a workaround for the Lean issue [144](https://github.com/leanprover-community/lean/issues/144):\n```quote\nThe default `has_reflect string` instance in Lean only work for strings up to\nfew thousand characters. Anything larger than that will trigger a stack overflow because\nthe string is represented as a very deeply nested expression\n```\nThis issue was fixed in [185](https://github.com/leanprover-community/lean/pull/185) and at least one file which imports it, `tactic/doc_commands`, no longer uses its contents. Can we delete the file forever now? Or should we keep it because the workaround might be useful in the future?", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/fix_reflect_string.lean", "newPath": null, "changes": []}]}, {"timestamp": 1658777723, "sha": "8da80f4e", "message": "feat(data/set/countable): add `iff` versions of some lemmas (#15671)", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["del", "theorem", "bUnion", ["set", "countable"]], ["add", "theorem", "bUnion_iff", ["set", "countable"]], ["del", "theorem", "sUnion", ["set", "countable"]], ["add", "theorem", "sUnion_iff", ["set", "countable"]], ["mod", "theorem", "union", ["set", "countable"]], ["del", "theorem", "countable_Union_Prop", ["set"]], ["add", "theorem", "countable_Union_iff", ["set"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}]}, {"timestamp": 1658772890, "sha": "f22fe49a", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): Add normalization of finite measures to probability measures and characterize weak convergence in terms of it. (#15528)\nThis PR adds the definition and basic API about normalization of finite measures to probability measures (divide by the total mass, return junk when total mass vanishes). The weak convergence of finite measures is then characterized in terms of convergence of the total mass and the convergence of the probability normalized measures. This characterization allows to obtain results about the weak convergence of finite measures from the often more convenient considerations of weak convergence of probability measures (some implications of portmanteau theorem, in particular).", "changes": [{"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "mass", ["filter", "tendsto"]], ["add", "theorem", "average_eq_integral_normalize", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_normalize_eq_of_nonzero", ["measure_theory", "finite_measure"]], ["add", "theorem", "continuous_mass", ["measure_theory", "finite_measure"]], ["add", "theorem", "mass_nonzero_iff", ["measure_theory", "finite_measure"]], ["add", "def", "normalize", ["measure_theory", "finite_measure"]], ["add", "theorem", "normalize_eq_inv_mass_smul_of_nonzero", ["measure_theory", "finite_measure"]], ["add", "theorem", "normalize_eq_of_nonzero", ["measure_theory", "finite_measure"]], ["add", "theorem", "normalize_test_against_nn", ["measure_theory", "finite_measure"]], ["add", "theorem", "self_eq_mass_mul_normalize", ["measure_theory", "finite_measure"]], ["add", "theorem", "self_eq_mass_smul_normalize", ["measure_theory", "finite_measure"]], ["mod", "theorem", "tendsto_iff_forall_test_against_nn_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_iff_forall_to_weak_dual_bcnn_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_normalize_iff_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_normalize_of_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_normalize_test_against_nn_of_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_of_tendsto_normalize_test_against_nn_of_tendsto_mass", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_test_against_nn_of_tendsto_normalize_test_against_nn_of_tendsto_mass", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_zero_of_tendsto_zero_mass", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_zero_test_against_nn_of_tendsto_zero_mass", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_eq_mass_mul", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_one", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_zero", ["measure_theory", "finite_measure"]], ["add", "theorem", "to_finite_measure_nonzero", ["measure_theory", "probability_measure"]], ["add", "theorem", "to_finite_measure_normalize_eq_self", ["probability_measure"]]]}]}, {"timestamp": 1658759274, "sha": "fe45ef24", "message": "feat(algebra/lie/of_associative): add `commute.lie_eq` (#15675)", "changes": [{"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "theorem", "lie_eq", ["commute"]], ["add", "theorem", "commute_iff_lie_eq", []]]}]}, {"timestamp": 1658759272, "sha": "c7ae1acf", "message": "feat(data/sign): `left.sign_neg`, `right.sign_neg` (#15652)\nAdd lemmas that the sign of `-a` is the negation of the sign of `a`,\nfor two kinds of ordered additive groups (corresponding to the type\nclasses on the `left` and `right` variants of the `neg_pos_iff` and\n`neg_neg_iff` lemmas used).", "changes": [{"oldPath": "src/data/sign.lean", "newPath": "src/data/sign.lean", "changes": [["add", "theorem", "sign_neg", ["left"]], ["add", "theorem", "sign_neg", ["right"]]]}]}, {"timestamp": 1658759270, "sha": "287a69a0", "message": "refactor(measure_theory/function/uniform_integrable): change `uniform_integrable` to only require `ae_strongly_measurable` (#15623)\nThe L¹ version of the strong LLN does not require `strongly_measurable` but the assumption in `uniform_integrable` forces it to have this condition if not requiring an extra step to relax the condition (see #15392). This PR relaxes the definition of `uniform_integrable` so it only requires `ae_strongly_measurable`.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["add", "theorem", "unif_integrable_finite", ["measure_theory"]], ["del", "theorem", "unif_integrable_fintype", ["measure_theory"]], ["del", "theorem", "mem_ℒp", ["measure_theory", "uniform_integrable"]], ["add", "theorem", "spec'", ["measure_theory", "uniform_integrable"]], ["del", "theorem", "strongly_measurable", ["measure_theory", "uniform_integrable"]], ["del", "theorem", "unif_integrable", ["measure_theory", "uniform_integrable"]], ["add", "theorem", "uniform_integrable_finite", ["measure_theory"]], ["del", "theorem", "uniform_integrable_fintype", ["measure_theory"]], ["add", "theorem", "uniform_integrable_of'", ["measure_theory"]], ["mod", "theorem", "uniform_integrable_zero_meas", ["measure_theory"]]]}]}, {"timestamp": 1658759268, "sha": "a6269fe6", "message": "feat(combinatorics/set_family/kleitman): Kleitman's bound (#14543)\nThe union of `k` intersecting families over a type of cardinality `n` has size at most `2ⁿ - 2ⁿ⁻ᵏ`. This is the main result in [Families of Non-disjoint subsets](https://reader.elsevier.com/reader/sd/pii/S0021980066800121).", "changes": [{"oldPath": null, "newPath": "src/combinatorics/set_family/kleitman.lean", "changes": [["add", "theorem", "card_bUnion_le_of_intersecting", ["finset"]]]}]}, {"timestamp": 1658750489, "sha": "b877056e", "message": "feat(order/compare): general cleanup (#15665)\nWe add `swap_inj`, golf some lemmas, do some simple spacing tweaks.", "changes": [{"oldPath": "src/order/compare.lean", "newPath": "src/order/compare.lean", "changes": [["mod", "theorem", "cmp_swap", []], ["mod", "theorem", "eq_eq", ["ordering", "compares"]], ["mod", "theorem", "eq_lt", ["ordering", "compares"]], ["mod", "theorem", "inj", ["ordering", "compares"]], ["mod", "theorem", "le_antisymm", ["ordering", "compares"]], ["mod", "theorem", "le_total", ["ordering", "compares"]], ["mod", "theorem", "ne_lt", ["ordering", "compares"]], ["add", "theorem", "swap_inj", ["ordering"]]]}]}, {"timestamp": 1658750488, "sha": "98f0d695", "message": "feat(linear_algebra/annihilating_polynomial): add definition of annihilating ideal and show minpoly generates in field case (#12140)\nadding item from trivial undergrad subjects list", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "degree_le_of_dvd", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/annihilating_polynomial.lean", "changes": [["add", "theorem", "ann_ideal_generator_aeval_eq_zero", ["polynomial"]], ["add", "theorem", "ann_ideal_generator_eq_minpoly", ["polynomial"]], ["add", "theorem", "ann_ideal_generator_eq_zero_iff", ["polynomial"]], ["add", "theorem", "ann_ideal_generator_mem", ["polynomial"]], ["add", "theorem", "degree_ann_ideal_generator_le_of_mem", ["polynomial"]], ["add", "theorem", "mem_ann_ideal_iff_aeval_eq_zero", ["polynomial"]], ["add", "theorem", "mem_iff_ann_ideal_generator_dvd", ["polynomial"]], ["add", "theorem", "mem_iff_eq_smul_ann_ideal_generator", ["polynomial"]], ["add", "theorem", "monic_ann_ideal_generator", ["polynomial"]], ["add", "theorem", "monic_generator_eq_minpoly", ["polynomial"]], ["add", "theorem", "span_singleton_ann_ideal_generator", ["polynomial"]]]}]}, {"timestamp": 1658744667, "sha": "d244509f", "message": "feat(data/matrix/basic): Add `alg_equiv` and `linear_equiv` instances for transpose. (#15386)\n`transpose` has natural bundlings as an `alg_equiv` and a `linear_equiv` for which we already have the substantial lemmas.\nSimilarly, `conj_transpose` can be bundled as a `linear_equiv`.\nThis also alters the other bundled versions to take explicit variables as this saves the need for many type annotations, and makes the necessary edits to fix proofs.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "conj_transpose_linear_equiv", ["matrix"]], ["add", "theorem", "conj_transpose_linear_equiv_symm", ["matrix"]], ["add", "def", "transpose_alg_equiv", ["matrix"]], ["add", "def", "transpose_linear_equiv", ["matrix"]], ["add", "theorem", "transpose_linear_equiv_symm", ["matrix"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": []}]}, {"timestamp": 1658739927, "sha": "168d6ba8", "message": "feat(*/partition_of_unity): more lemmas based on the partition of unity (#15609)\nAdd `metric.exists_continuous_real_forall_closed_ball_subset` and `metric.exists_smooth_forall_closed_ball_subset`.\nFor the sphere eversion project, Lemma 3.6.", "changes": [{"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": [["add", "theorem", "exists_smooth_forall_closed_ball_subset", ["emetric"]], ["add", "theorem", "exists_smooth_forall_closed_ball_subset", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "ord_connected_set_of_ball_subset", ["emetric"]], ["add", "theorem", "ord_connected_set_of_closed_ball_subset", ["emetric"]], ["add", "theorem", "uniformity_basis_edist_nnreal_le", []]]}, {"oldPath": null, "newPath": "src/topology/metric_space/partition_of_unity.lean", "changes": [["add", "theorem", "eventually_nhds_zero_forall_closed_ball_subset", ["emetric"]], ["add", "theorem", "exists_continuous_ennreal_forall_closed_ball_subset", ["emetric"]], ["add", "theorem", "exists_continuous_nnreal_forall_closed_ball_subset", ["emetric"]], ["add", "theorem", "exists_continuous_real_forall_closed_ball_subset", ["emetric"]], ["add", "theorem", "exists_forall_closed_ball_subset_aux₁", ["emetric"]], ["add", "theorem", "exists_forall_closed_ball_subset_aux₂", ["emetric"]], ["add", "theorem", "exists_continuous_nnreal_forall_closed_ball_subset", ["metric"]], ["add", "theorem", "exists_continuous_real_forall_closed_ball_subset", ["metric"]]]}]}, {"timestamp": 1658730218, "sha": "f5138d15", "message": "feat(category_theory/preadditive/*): algebra over endofunctor preadditive and forget additive functor (#15100)\nThis PR shows that the category of algebras over an endofunctor is preadditive and that forgetful functors from algebras over endofunctors and (co)algebras over (co)monads are additive.", "changes": [{"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["add", "theorem", "map_nsmul", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/preadditive/eilenberg_moore.lean", "newPath": "src/category_theory/preadditive/eilenberg_moore.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/preadditive/endo_functor.lean", "changes": []}]}, {"timestamp": 1658725808, "sha": "62a1f82f", "message": "fix(algebraic_geometry/projective_spectrum/scheme) : fix module doc string (#15633)\nAfter renaming definitions/lemmas in the body of the `src/algebraic_geometry/projective_spectrum/scheme.lean`, the module doc string is left unchanged. This pr fix the doc string", "changes": [{"oldPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "newPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "changes": []}]}, {"timestamp": 1658725807, "sha": "b351ad53", "message": "feat(algebraic_geometry/morphisms): Basic framework for classes of morphisms between schemes (#14944)", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/morphisms/basic.lean", "changes": [["add", "def", "to_property", ["algebraic_geometry", "affine_target_morphism_property"]], ["add", "theorem", "to_property_apply", ["algebraic_geometry", "affine_target_morphism_property"]], ["add", "def", "affine_target_morphism_property", ["algebraic_geometry"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "base_change", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/morphism_property.lean", "changes": [["add", "theorem", "cancel_left_is_iso", ["category_theory", "morphism_property", "respects_iso"]], ["add", "theorem", "cancel_right_is_iso", ["category_theory", "morphism_property", "respects_iso"]], ["add", "def", "respects_iso", ["category_theory", "morphism_property"]], ["add", "theorem", "base_change_map", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "base_change_obj", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "fst", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "pullback_map", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "theorem", "snd", ["category_theory", "morphism_property", "stable_under_base_change"]], ["add", "def", "stable_under_base_change", ["category_theory", "morphism_property"]], ["add", "theorem", "respects_iso", ["category_theory", "morphism_property", "stable_under_composition"]], ["add", "def", "stable_under_composition", ["category_theory", "morphism_property"]], ["add", "def", "morphism_property", ["category_theory"]]]}]}, {"timestamp": 1658722898, "sha": "44c1fdca", "message": "chore(scripts): update nolints.txt (#15674)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1658712976, "sha": "48dec300", "message": "chore(algebra/module/basic): use `simp` instead of `norm_num` (#15670)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1658712975, "sha": "5f543bd9", "message": "chore(algebra/order/sub): Generalize lemmas (#15497)\nGeneralize many lemmas from `canonically_ordered_add_monoid` to `has_exists_add_of_le`, and a few other generalizations.\n### New lemmas\n* `mul_le_cancellable_one`/`add_le_cancellable_zero`\n* `tsub_add_le_right_comm`\n* `add_tsub_add_le_tsub_left`\n* `add_tsub_add_le_tsub_right`", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["add", "theorem", "mul_le_cancellable_one", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["mod", "theorem", "add_tsub_add_le_tsub_add_tsub", []], ["add", "theorem", "add_tsub_add_le_tsub_left", []], ["add", "theorem", "add_tsub_add_le_tsub_right", []], ["add", "theorem", "add_tsub_le_tsub_add", []], ["mod", "theorem", "lt_tsub_of_add_lt_left", []], ["mod", "theorem", "lt_tsub_of_add_lt_right", []], ["mod", "theorem", "tsub_add_eq_tsub_tsub", []], ["mod", "theorem", "tsub_add_tsub_cancel", []], ["del", "theorem", "tsub_eq_zero_of_le", []], ["mod", "theorem", "tsub_inj_left", []], ["mod", "theorem", "tsub_le_self", []], ["mod", "theorem", "tsub_lt_of_lt", []], ["mod", "theorem", "tsub_pos_of_lt", []], ["mod", "theorem", "tsub_self", []], ["mod", "theorem", "tsub_self_add", []], ["mod", "theorem", "zero_tsub", []]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}]}, {"timestamp": 1658712974, "sha": "3419dfc0", "message": "feat(analysis/normed_space/lp_space): construct star structures on lp spaces (#15317)\nOn general `lp` spaces we construct a star add monoid and star module structure, and in the case when `1 ≤ p` we also show it is a normed star group. In addition, for `p = ∞`, we provide a star ring structure and show that it is a C⋆-ring. This establishes that the (\\ell ^ \\infty) direct sum of C⋆-algebras is itself a C⋆-algebra with the supremum norm.", "changes": [{"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["add", "theorem", "coe_fn_star", ["lp"]], ["add", "theorem", "star_iff", ["mem_ℓp"]], ["add", "theorem", "star_mem", ["mem_ℓp"]]]}]}, {"timestamp": 1658712973, "sha": "a1ce53c0", "message": "refactor(set_theory/ordinal/basic): `ordinal.min` → `infi` (#14707)\nWe ditch `ordinal.min` (which is really just `infi`). Apart from this, we add some missing theorems on conditionally complete lattices with a bottom element.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cinfi_le'", []], ["add", "theorem", "infi_mem", []], ["add", "theorem", "le_cinfi_iff'", []]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "ord_eq", ["cardinal"]], ["add", "theorem", "ord_eq_Inf", ["cardinal"]], ["del", "theorem", "ord_eq_min", ["cardinal"]], ["mod", "theorem", "ord_le_type", ["cardinal"]], ["del", "theorem", "le_min", ["ordinal"]], ["del", "theorem", "lift_min", ["ordinal"]], ["del", "def", "min", ["ordinal"]], ["del", "theorem", "min_eq", ["ordinal"]], ["del", "theorem", "min_le", ["ordinal"]]]}]}, {"timestamp": 1658706249, "sha": "5ed2c728", "message": "feat(representation_theory/Rep): Rep k G ≌ Module (monoid_algebra k G) (#13713)", "changes": [{"oldPath": "src/algebra/algebra/restrict_scalars.lean", "newPath": "src/algebra/algebra/restrict_scalars.lean", "changes": [["mod", "def", "add_equiv", ["restrict_scalars"]], ["mod", "theorem", "add_equiv_map_smul", ["restrict_scalars"]], ["add", "theorem", "add_equiv_symm_map_algebra_map_smul", ["restrict_scalars"]], ["add", "theorem", "add_equiv_symm_map_smul_smul", ["restrict_scalars"]], ["add", "theorem", "lsmul_apply_apply", ["restrict_scalars"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": [["add", "theorem", "coe_of", ["Rep"]], ["add", "def", "counit_iso", ["Rep"]], ["add", "def", "counit_iso_add_equiv", ["Rep"]], ["add", "def", "equivalence_Module_monoid_algebra", ["Rep"]], ["add", "def", "of_Module_monoid_algebra", ["Rep"]], ["add", "theorem", "of_Module_monoid_algebra_obj_coe", ["Rep"]], ["add", "theorem", "of_Module_monoid_algebra_obj_ρ", ["Rep"]], ["add", "theorem", "of_ρ", ["Rep"]], ["add", "def", "to_Module_monoid_algebra", ["Rep"]], ["add", "def", "to_Module_monoid_algebra_map", ["Rep"]], ["add", "theorem", "to_Module_monoid_algebra_map_aux", ["Rep"]], ["add", "def", "unit_iso", ["Rep"]], ["add", "def", "unit_iso_add_equiv", ["Rep"]], ["add", "theorem", "unit_iso_comm", ["Rep"]], ["add", "def", "ρ", ["Rep"]]]}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["mod", "theorem", "as_algebra_hom_def", ["representation"]], ["mod", "theorem", "as_algebra_hom_of", ["representation"]], ["mod", "theorem", "as_algebra_hom_single", ["representation"]], ["add", "theorem", "as_algebra_hom_single_one", ["representation"]], ["add", "def", "as_module", ["representation"]], ["add", "def", "as_module_equiv", ["representation"]], ["add", "theorem", "as_module_equiv_map_smul", ["representation"]], ["add", "theorem", "as_module_equiv_symm_map_rho", ["representation"]], ["add", "theorem", "as_module_equiv_symm_map_smul", ["representation"]], ["add", "def", "of_module'", ["representation"]], ["add", "def", "of_module", ["representation"]], ["add", "theorem", "of_module_as_algebra_hom_apply_apply", ["representation"]], ["add", "theorem", "of_module_as_module_act", ["representation"]], ["add", "theorem", "smul_of_module_as_module", ["representation"]]]}, {"oldPath": "src/representation_theory/invariants.lean", "newPath": "src/representation_theory/invariants.lean", "changes": []}]}, {"timestamp": 1658680483, "sha": "86febe13", "message": "feat(algebra/periodic): `fract_periodic` (#15660)\nAdd the lemma that `int.fract` is periodic with period 1. Note that\nthis goes in `algebra.periodic` alongside the definition of\n`periodic`, rather than `algebra.order.floor` alongside the definition\nof `fract`, because of import ordering (`algebra.periodic` ends up\nimporting `algebra.order.floor`).", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "fract_periodic", ["int"]]]}]}, {"timestamp": 1658680482, "sha": "75f10446", "message": "feat(order/bounded_order): an order is either an `order_bot` or a `no_bot_order` (#15636)", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}]}, {"timestamp": 1658680481, "sha": "a1fdc999", "message": "feat(linear_algebra/tensor_product): add id_apply and comp_apply for ltensor and rtensor (#15628)", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "ltensor_comp_apply", ["linear_map"]], ["add", "theorem", "ltensor_id_apply", ["linear_map"]], ["add", "theorem", "rtensor_comp_apply", ["linear_map"]], ["add", "theorem", "rtensor_id_apply", ["linear_map"]]]}]}, {"timestamp": 1658680480, "sha": "aed4c494", "message": "refactor(data/{finite,fintype}): move some lemmas to `data.fintype.basic` (#15626)\nWe should have lemmas like `nonempty_fintype` in `fintype.basic` to replace `[fintype _]` by `[finite _]` in the assumptions. This PR doesn't fix any assumptions to keep it small.", "changes": [{"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["del", "theorem", "of_injective", ["finite"]], ["del", "theorem", "of_surjective", ["finite"]], ["del", "theorem", "finite_iff_nonempty_fintype", []], ["del", "def", "of_finite", ["fintype"]], ["del", "theorem", "nonempty_fintype", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "of_injective", ["finite"]], ["add", "theorem", "of_surjective", ["finite"]], ["add", "theorem", "finite_iff_nonempty_fintype", []], ["add", "theorem", "nonempty_fintype", []]]}]}, {"timestamp": 1658680479, "sha": "d1bd9c5d", "message": "chore(*): Rename `normed_group` to `normed_add_comm_group` (#15619)\n* `normed_group` → `normed_add_comm_group`\n* `semi_normed_group` → `seminormed_add_comm_group`. Elision of the underscore corresponds to `seminorm` (and to counterbalance the name being sensibly longer).\n* `normed_group_hom` → `normed_add_group_hom`", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": [["mod", "structure", "picard_lindelof", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/analytic/linear.lean", "newPath": "src/analysis/analytic/linear.lean", "changes": []}, {"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": [["mod", "theorem", "smul", ["asymptotics", "is_equivalent"]]]}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["mod", "theorem", "is_O_pi", ["asymptotics"]], ["mod", "theorem", "is_O_with_pi", ["asymptotics"]], ["mod", "theorem", "tendsto_zero_of_tendsto", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_pi", ["asymptotics"]], ["mod", "theorem", "summable_of_is_O", []], ["mod", "theorem", "summable_of_is_O_nat", []]]}, {"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": [["mod", "theorem", "sum_range", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_sum_range_of_tendsto_zero", ["asymptotics"]], ["mod", "theorem", "cesaro_smul", ["filter", "tendsto"]]]}, {"oldPath": "src/analysis/asymptotics/theta.lean", "newPath": "src/analysis/asymptotics/theta.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": [["mod", "theorem", "volume_apply", ["box_integral", "box_additive_map"]]]}, {"oldPath": "src/analysis/calculus/affine_map.lean", "newPath": "src/analysis/calculus/affine_map.lean", "changes": []}, {"oldPath": "src/analysis/calculus/conformal/normed_space.lean", "newPath": "src/analysis/calculus/conformal/normed_space.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["mod", "theorem", "prod_map", ["cont_diff_on"]], ["mod", "theorem", "exists_lipschitz_on_with", ["cont_diff_within_at"]], ["mod", "theorem", "exists_lipschitz_on_with", ["has_ftaylor_series_up_to_on"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_within_Ioi_eq_Ici", []]]}, {"oldPath": "src/analysis/calculus/diff_on_int_cont.lean", "newPath": "src/analysis/calculus/diff_on_int_cont.lean", "changes": []}, {"oldPath": "src/analysis/calculus/dslope.lean", "newPath": "src/analysis/calculus/dslope.lean", "changes": [["mod", "theorem", "dslope_comp", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_analytic.lean", "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["mod", "theorem", "exists_homeomorph_extension", ["approximates_linear_on"]]]}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["mod", "theorem", "image_norm_le_of_liminf_right_slope_norm_lt_deriv_boundary", []]]}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_interval_integral.lean", "newPath": "src/analysis/calculus/parametric_interval_integral.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["mod", "structure", "cont_diff_bump", []], ["mod", "theorem", "exists_cont_diff_bump_function_of_mem_nhds", []]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "theorem", "restrict_scalars_one_smul_right'", ["complex"]]]}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/conformal.lean", "newPath": "src/analysis/complex/conformal.lean", "changes": []}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": []}, {"oldPath": "src/analysis/complex/phragmen_lindelof.lean", "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/analysis/complex/removable_singularity.lean", "newPath": "src/analysis/complex/removable_singularity.lean", "changes": []}, {"oldPath": "src/analysis/complex/schwarz.lean", "newPath": "src/analysis/complex/schwarz.lean", "changes": []}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/krein_milman.lean", "newPath": "src/analysis/convex/krein_milman.lean", "changes": []}, {"oldPath": "src/analysis/convex/measure.lean", "newPath": "src/analysis/convex/measure.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/convex/uniform.lean", "newPath": "src/analysis/convex/uniform.lean", "changes": []}, {"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "def", "to_normed_add_comm_group", ["inner_product_space", "of_core"]], ["del", "def", "to_normed_group", ["inner_product_space", "of_core"]]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["mod", "theorem", "norm_with_seminorms", []], ["mod", "theorem", "cont_normed_space_to_with_seminorms", ["seminorm"]], ["mod", "theorem", "cont_with_seminorms_normed_space", ["seminorm"]]]}, {"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": [["mod", "theorem", "frobenius_nnnorm_one", ["matrix"]], ["add", "def", "frobenius_normed_add_comm_group", ["matrix"]], ["del", "def", "frobenius_normed_group", ["matrix"]], ["mod", "def", "frobenius_normed_space", ["matrix"]], ["del", "def", "frobenius_semi_normed_group", ["matrix"]], ["add", "def", "frobenius_seminormed_add_comm_group", ["matrix"]]]}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": [["mod", "theorem", "nnnorm_norm", []], ["mod", "theorem", "nnnorm_one", []], ["mod", "theorem", "norm_norm", []], ["mod", "theorem", "nontrivial", ["norm_one_class"]], ["add", "theorem", "tendsto_at_top'", ["normed_add_comm_group"]], ["add", "theorem", "tendsto_at_top", ["normed_add_comm_group"]], ["del", "theorem", "tendsto_at_top'", ["normed_group"]], ["del", "theorem", "tendsto_at_top", ["normed_group"]]]}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": [["mod", "theorem", "coe_of", ["SemiNormedGroup"]], ["mod", "def", "of", ["SemiNormedGroup"]], ["mod", "def", "SemiNormedGroup", []], ["mod", "theorem", "coe_of", ["SemiNormedGroup₁"]], ["mod", "def", "of", ["SemiNormedGroup₁"]], ["mod", "def", "SemiNormedGroup₁", []]]}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/add_torsor.lean", "newPath": "src/analysis/normed/group/add_torsor.lean", "changes": [["add", "def", "metric_space_of_normed_add_comm_group_of_add_torsor", []], ["del", "def", "metric_space_of_normed_group_of_add_torsor", []], ["add", "def", "pseudo_metric_space_of_normed_add_comm_group_of_add_torsor", []], ["del", "def", "pseudo_metric_space_of_normed_group_of_add_torsor", []]]}, {"oldPath": "src/analysis/normed/group/ball_sphere.lean", "newPath": "src/analysis/normed/group/ball_sphere.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["mod", "theorem", "coe_norm", ["add_subgroup"]], ["mod", "theorem", "norm_coe", ["add_subgroup"]], ["mod", "theorem", "nnnorm_le_pi_nnnorm", []], ["mod", "theorem", "norm_le_pi_norm", []], ["add", "theorem", "cauchy_seq_iff", ["normed_add_comm_group"]], ["add", "theorem", "core", ["normed_add_comm_group", "core", "to_seminormed_add_comm_group"]], ["add", "structure", "core", ["normed_add_comm_group"]], ["add", "def", "induced", ["normed_add_comm_group"]], ["add", "theorem", "nhds_basis_norm_lt", ["normed_add_comm_group"]], ["add", "theorem", "nhds_zero_basis_norm_lt", ["normed_add_comm_group"]], ["add", "def", "of_add_dist", ["normed_add_comm_group"]], ["add", "def", "of_core", ["normed_add_comm_group"]], ["add", "theorem", "tendsto_nhds_nhds", ["normed_add_comm_group"]], ["add", "theorem", "tendsto_nhds_zero", ["normed_add_comm_group"]], ["add", "theorem", "uniformity_basis_dist", ["normed_add_comm_group"]], ["del", "theorem", "cauchy_seq_iff", ["normed_group"]], ["del", "theorem", "core", ["normed_group", "core", "to_semi_normed_group"]], ["del", "structure", "core", ["normed_group"]], ["del", "def", "induced", ["normed_group"]], ["del", "theorem", "nhds_basis_norm_lt", ["normed_group"]], ["del", "theorem", "nhds_zero_basis_norm_lt", ["normed_group"]], ["del", "def", "of_add_dist", ["normed_group"]], ["del", "def", "of_core", ["normed_group"]], ["del", "theorem", "tendsto_nhds_nhds", ["normed_group"]], ["del", "theorem", "tendsto_nhds_zero", ["normed_group"]], ["del", "theorem", "uniformity_basis_dist", ["normed_group"]], ["mod", "theorem", "nnnorm_def", ["pi"]], ["mod", "theorem", "norm_def", ["pi"]], ["mod", "theorem", "sum_nnnorm_apply_le_nnnorm", ["pi"]], ["mod", "theorem", "sum_norm_apply_le_norm", ["pi"]], ["mod", "theorem", "pi_nnnorm_const", []], ["mod", "theorem", "pi_nnnorm_le_iff", []], ["mod", "theorem", "pi_nnnorm_lt_iff", []], ["mod", "theorem", "pi_norm_const", []], ["mod", "theorem", "pi_norm_le_iff", []], ["mod", "theorem", "pi_norm_lt_iff", []], ["del", "structure", "core", ["semi_normed_group"]], ["del", "def", "induced", ["semi_normed_group"]], ["del", "theorem", "mem_closure_iff", ["semi_normed_group"]], ["del", "def", "of_add_dist'", ["semi_normed_group"]], ["del", "def", "of_add_dist", ["semi_normed_group"]], ["del", "def", "of_core", ["semi_normed_group"]], ["add", "structure", "core", ["seminormed_add_comm_group"]], ["add", "def", "induced", ["seminormed_add_comm_group"]], ["add", "theorem", "mem_closure_iff", ["seminormed_add_comm_group"]], ["add", "def", "of_add_dist'", ["seminormed_add_comm_group"]], ["add", "def", "of_add_dist", ["seminormed_add_comm_group"]], ["add", "def", "of_core", ["seminormed_add_comm_group"]]]}, {"oldPath": "src/analysis/normed/group/completion.lean", "newPath": "src/analysis/normed/group/completion.lean", "changes": [["mod", "theorem", "norm_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": [["add", "def", "mk_normed_add_group_hom'", ["add_monoid_hom"]], ["add", "def", "mk_normed_add_group_hom", ["add_monoid_hom"]], ["del", "def", "mk_normed_group_hom'", ["add_monoid_hom"]], ["del", "def", "mk_normed_group_hom", ["add_monoid_hom"]], ["mod", "theorem", "controlled_closure_of_complete", []], ["mod", "theorem", "controlled_closure_range_of_complete", []], ["mod", "theorem", "exists_pos_bound_of_bound", []], ["add", "theorem", "add_apply", ["normed_add_group_hom"]], ["add", "theorem", "antilipschitz_of_norm_ge", ["normed_add_group_hom"]], ["add", "theorem", "bound", ["normed_add_group_hom"]], ["add", "theorem", "bounds_bdd_below", ["normed_add_group_hom"]], ["add", "theorem", "bounds_nonempty", ["normed_add_group_hom"]], ["add", "theorem", "coe_add", ["normed_add_group_hom"]], ["add", "theorem", "coe_comp", ["normed_add_group_hom"]], ["add", "def", "coe_fn_add_hom", ["normed_add_group_hom"]], ["add", "theorem", "coe_id", ["normed_add_group_hom"]], ["add", "theorem", "coe_inj", ["normed_add_group_hom"]], ["add", "theorem", "coe_inj_iff", ["normed_add_group_hom"]], ["add", "theorem", "coe_injective", ["normed_add_group_hom"]], ["add", "theorem", "coe_ker", ["normed_add_group_hom"]], ["add", "theorem", "coe_mk", ["normed_add_group_hom"]], ["add", "theorem", "coe_mk_normed_add_group_hom'", ["normed_add_group_hom"]], ["add", "theorem", "coe_mk_normed_add_group_hom", ["normed_add_group_hom"]], ["add", "theorem", "coe_neg", ["normed_add_group_hom"]], ["add", "theorem", "coe_nsmul", ["normed_add_group_hom"]], ["add", "theorem", "coe_smul", ["normed_add_group_hom"]], ["add", "theorem", "coe_sub", ["normed_add_group_hom"]], ["add", "theorem", "coe_sum", ["normed_add_group_hom"]], ["add", "theorem", "coe_to_add_monoid_hom", ["normed_add_group_hom"]], ["add", "theorem", "coe_zero", ["normed_add_group_hom"]], ["add", "theorem", "coe_zsmul", ["normed_add_group_hom"]], ["add", "theorem", "comp_assoc", ["normed_add_group_hom"]], ["add", "def", "comp_hom", ["normed_add_group_hom"]], ["add", "theorem", "comp_range", ["normed_add_group_hom"]], ["add", "theorem", "comp_zero", ["normed_add_group_hom"]], ["add", "theorem", "comm_sq₂", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "comp_ι_eq", ["normed_add_group_hom", "equalizer"]], ["add", "def", "lift", ["normed_add_group_hom", "equalizer"]], ["add", "def", "lift_equiv", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "lift_norm_noninc", ["normed_add_group_hom", "equalizer"]], ["add", "def", "map", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "map_comp_map", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "map_id", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "map_norm_noninc", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "norm_lift_le", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "norm_map_le", ["normed_add_group_hom", "equalizer"]], ["add", "def", "ι", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "ι_comp_lift", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "ι_comp_map", ["normed_add_group_hom", "equalizer"]], ["add", "theorem", "ι_norm_noninc", ["normed_add_group_hom", "equalizer"]], ["add", "def", "equalizer", ["normed_add_group_hom"]], ["add", "theorem", "ext", ["normed_add_group_hom"]], ["add", "theorem", "ext_iff", ["normed_add_group_hom"]], ["add", "def", "id", ["normed_add_group_hom"]], ["add", "def", "incl", ["normed_add_group_hom"]], ["add", "theorem", "incl_range", ["normed_add_group_hom"]], ["add", "theorem", "is_closed_ker", ["normed_add_group_hom"]], ["add", "theorem", "isometry_comp", ["normed_add_group_hom"]], ["add", "theorem", "isometry_id", ["normed_add_group_hom"]], ["add", "theorem", "incl_comp_lift", ["normed_add_group_hom", "ker"]], ["add", "def", "lift", ["normed_add_group_hom", "ker"]], ["add", "def", "ker", ["normed_add_group_hom"]], ["add", "theorem", "ker_zero", ["normed_add_group_hom"]], ["add", "theorem", "le_of_op_norm_le", ["normed_add_group_hom"]], ["add", "theorem", "le_op_norm", ["normed_add_group_hom"]], ["add", "theorem", "le_op_norm_of_le", ["normed_add_group_hom"]], ["add", "theorem", "lipschitz", ["normed_add_group_hom"]], ["add", "theorem", "mem_ker", ["normed_add_group_hom"]], ["add", "theorem", "mem_range", ["normed_add_group_hom"]], ["add", "theorem", "mem_range_self", ["normed_add_group_hom"]], ["add", "theorem", "mk_normed_add_group_hom_norm_le'", ["normed_add_group_hom"]], ["add", "theorem", "mk_normed_add_group_hom_norm_le", ["normed_add_group_hom"]], ["add", "theorem", "mk_to_add_monoid_hom", ["normed_add_group_hom"]], ["add", "theorem", "neg_apply", ["normed_add_group_hom"]], ["add", "theorem", "norm_comp_le", ["normed_add_group_hom"]], ["add", "theorem", "norm_comp_le_of_le'", ["normed_add_group_hom"]], ["add", "theorem", "norm_comp_le_of_le", ["normed_add_group_hom"]], ["add", "theorem", "norm_def", ["normed_add_group_hom"]], ["add", "theorem", "norm_eq_of_isometry", ["normed_add_group_hom"]], ["add", "theorem", "norm_id", ["normed_add_group_hom"]], ["add", "theorem", "norm_id_le", ["normed_add_group_hom"]], ["add", "theorem", "norm_id_of_nontrivial_seminorm", ["normed_add_group_hom"]], ["add", "theorem", "norm_incl", ["normed_add_group_hom"]], ["add", "theorem", "comp", ["normed_add_group_hom", "norm_noninc"]], ["add", "theorem", "id", ["normed_add_group_hom", "norm_noninc"]], ["add", "theorem", "neg_iff", ["normed_add_group_hom", "norm_noninc"]], ["add", "theorem", "norm_noninc_iff_norm_le_one", ["normed_add_group_hom", "norm_noninc"]], ["add", "theorem", "zero", ["normed_add_group_hom", "norm_noninc"]], ["add", "def", "norm_noninc", ["normed_add_group_hom"]], ["add", "theorem", "norm_noninc_of_isometry", ["normed_add_group_hom"]], ["add", "theorem", "nsmul_apply", ["normed_add_group_hom"]], ["add", "def", "op_norm", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_add_le", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_eq_of_bounds", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_le_bound", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_le_of_lipschitz", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_neg", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_nonneg", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_zero", ["normed_add_group_hom"]], ["add", "theorem", "op_norm_zero_iff", ["normed_add_group_hom"]], ["add", "def", "range", ["normed_add_group_hom"]], ["add", "theorem", "range_comp_incl_top", ["normed_add_group_hom"]], ["add", "theorem", "ratio_le_op_norm", ["normed_add_group_hom"]], ["add", "theorem", "smul_apply", ["normed_add_group_hom"]], ["add", "theorem", "sub_apply", ["normed_add_group_hom"]], ["add", "theorem", "sum_apply", ["normed_add_group_hom"]], ["add", "theorem", "exists_pos", ["normed_add_group_hom", "surjective_on_with"]], ["add", "theorem", "mono", ["normed_add_group_hom", "surjective_on_with"]], ["add", "theorem", "surj_on", ["normed_add_group_hom", "surjective_on_with"]], ["add", "def", "surjective_on_with", ["normed_add_group_hom"]], ["add", "def", "to_add_monoid_hom", ["normed_add_group_hom"]], ["add", "theorem", "to_add_monoid_hom_injective", ["normed_add_group_hom"]], ["add", "theorem", "to_fun_eq_coe", ["normed_add_group_hom"]], ["add", "theorem", "zero_apply", ["normed_add_group_hom"]], ["add", "theorem", "zero_comp", ["normed_add_group_hom"]], ["add", "theorem", "zsmul_apply", ["normed_add_group_hom"]], ["add", "structure", "normed_add_group_hom", []], ["del", "theorem", "add_apply", ["normed_group_hom"]], ["del", "theorem", "antilipschitz_of_norm_ge", ["normed_group_hom"]], ["del", "theorem", "bound", ["normed_group_hom"]], ["del", "theorem", "bounds_bdd_below", ["normed_group_hom"]], ["del", "theorem", "bounds_nonempty", ["normed_group_hom"]], ["del", "theorem", "coe_add", ["normed_group_hom"]], ["del", "theorem", "coe_comp", ["normed_group_hom"]], ["del", "def", "coe_fn_add_hom", ["normed_group_hom"]], ["del", "theorem", "coe_id", ["normed_group_hom"]], ["del", "theorem", "coe_inj", ["normed_group_hom"]], ["del", "theorem", "coe_inj_iff", ["normed_group_hom"]], ["del", "theorem", "coe_injective", ["normed_group_hom"]], ["del", "theorem", "coe_ker", ["normed_group_hom"]], ["del", "theorem", "coe_mk", ["normed_group_hom"]], ["del", "theorem", "coe_mk_normed_group_hom'", ["normed_group_hom"]], ["del", "theorem", "coe_mk_normed_group_hom", ["normed_group_hom"]], ["del", "theorem", "coe_neg", ["normed_group_hom"]], ["del", "theorem", "coe_nsmul", ["normed_group_hom"]], ["del", "theorem", "coe_smul", ["normed_group_hom"]], ["del", "theorem", "coe_sub", ["normed_group_hom"]], ["del", "theorem", "coe_sum", ["normed_group_hom"]], ["del", "theorem", "coe_to_add_monoid_hom", ["normed_group_hom"]], ["del", "theorem", "coe_zero", ["normed_group_hom"]], ["del", "theorem", "coe_zsmul", ["normed_group_hom"]], ["del", "theorem", "comp_assoc", ["normed_group_hom"]], ["del", "def", "comp_hom", ["normed_group_hom"]], ["del", "theorem", "comp_range", ["normed_group_hom"]], ["del", "theorem", "comp_zero", ["normed_group_hom"]], ["del", "theorem", "comm_sq₂", ["normed_group_hom", "equalizer"]], ["del", "theorem", "comp_ι_eq", ["normed_group_hom", "equalizer"]], ["del", "def", "lift", ["normed_group_hom", "equalizer"]], ["del", "def", "lift_equiv", ["normed_group_hom", "equalizer"]], ["del", "theorem", "lift_norm_noninc", ["normed_group_hom", "equalizer"]], ["del", "def", "map", ["normed_group_hom", "equalizer"]], ["del", "theorem", "map_comp_map", ["normed_group_hom", "equalizer"]], ["del", "theorem", "map_id", ["normed_group_hom", "equalizer"]], ["del", "theorem", "map_norm_noninc", ["normed_group_hom", "equalizer"]], ["del", "theorem", "norm_lift_le", ["normed_group_hom", "equalizer"]], ["del", "theorem", "norm_map_le", ["normed_group_hom", "equalizer"]], ["del", "def", "ι", ["normed_group_hom", "equalizer"]], ["del", "theorem", "ι_comp_lift", ["normed_group_hom", "equalizer"]], ["del", "theorem", "ι_comp_map", ["normed_group_hom", "equalizer"]], ["del", "theorem", "ι_norm_noninc", ["normed_group_hom", "equalizer"]], ["del", "def", "equalizer", ["normed_group_hom"]], ["del", "theorem", "ext", ["normed_group_hom"]], ["del", "theorem", "ext_iff", ["normed_group_hom"]], ["del", "def", "id", ["normed_group_hom"]], ["del", "def", "incl", ["normed_group_hom"]], ["del", "theorem", "incl_range", ["normed_group_hom"]], ["del", "theorem", "is_closed_ker", ["normed_group_hom"]], ["del", "theorem", "isometry_comp", ["normed_group_hom"]], ["del", "theorem", "isometry_id", ["normed_group_hom"]], ["del", "theorem", "incl_comp_lift", ["normed_group_hom", "ker"]], ["del", "def", "lift", ["normed_group_hom", "ker"]], ["del", "def", "ker", ["normed_group_hom"]], ["del", "theorem", "ker_zero", ["normed_group_hom"]], ["del", "theorem", "le_of_op_norm_le", ["normed_group_hom"]], ["del", "theorem", "le_op_norm", ["normed_group_hom"]], ["del", "theorem", "le_op_norm_of_le", ["normed_group_hom"]], ["del", "theorem", "lipschitz", ["normed_group_hom"]], ["del", "theorem", "mem_ker", ["normed_group_hom"]], ["del", "theorem", "mem_range", ["normed_group_hom"]], ["del", "theorem", "mem_range_self", ["normed_group_hom"]], ["del", "theorem", "mk_normed_group_hom_norm_le'", ["normed_group_hom"]], ["del", "theorem", "mk_normed_group_hom_norm_le", ["normed_group_hom"]], ["del", "theorem", "mk_to_add_monoid_hom", ["normed_group_hom"]], ["del", "theorem", "neg_apply", ["normed_group_hom"]], ["del", "theorem", "norm_comp_le", ["normed_group_hom"]], ["del", "theorem", "norm_comp_le_of_le'", ["normed_group_hom"]], ["del", "theorem", "norm_comp_le_of_le", ["normed_group_hom"]], ["del", "theorem", "norm_def", ["normed_group_hom"]], ["del", "theorem", "norm_eq_of_isometry", ["normed_group_hom"]], ["del", "theorem", "norm_id", ["normed_group_hom"]], ["del", "theorem", "norm_id_le", ["normed_group_hom"]], ["del", "theorem", "norm_id_of_nontrivial_seminorm", ["normed_group_hom"]], ["del", "theorem", "norm_incl", ["normed_group_hom"]], ["del", "theorem", "comp", ["normed_group_hom", "norm_noninc"]], ["del", "theorem", "id", ["normed_group_hom", "norm_noninc"]], ["del", "theorem", "neg_iff", ["normed_group_hom", "norm_noninc"]], ["del", "theorem", "norm_noninc_iff_norm_le_one", ["normed_group_hom", "norm_noninc"]], ["del", "theorem", "zero", ["normed_group_hom", "norm_noninc"]], ["del", "def", "norm_noninc", ["normed_group_hom"]], ["del", "theorem", "norm_noninc_of_isometry", ["normed_group_hom"]], ["del", "theorem", "nsmul_apply", ["normed_group_hom"]], ["del", "def", "op_norm", ["normed_group_hom"]], ["del", "theorem", "op_norm_add_le", ["normed_group_hom"]], ["del", "theorem", "op_norm_eq_of_bounds", ["normed_group_hom"]], ["del", "theorem", "op_norm_le_bound", ["normed_group_hom"]], ["del", "theorem", "op_norm_le_of_lipschitz", ["normed_group_hom"]], ["del", "theorem", "op_norm_neg", ["normed_group_hom"]], ["del", "theorem", "op_norm_nonneg", ["normed_group_hom"]], ["del", "theorem", "op_norm_zero", ["normed_group_hom"]], ["del", "theorem", "op_norm_zero_iff", ["normed_group_hom"]], ["del", "def", "range", ["normed_group_hom"]], ["del", "theorem", "range_comp_incl_top", ["normed_group_hom"]], ["del", "theorem", "ratio_le_op_norm", ["normed_group_hom"]], ["del", "theorem", "smul_apply", ["normed_group_hom"]], ["del", "theorem", "sub_apply", ["normed_group_hom"]], ["del", "theorem", "sum_apply", ["normed_group_hom"]], ["del", "theorem", "exists_pos", ["normed_group_hom", "surjective_on_with"]], ["del", "theorem", "mono", ["normed_group_hom", "surjective_on_with"]], ["del", "theorem", "surj_on", ["normed_group_hom", "surjective_on_with"]], ["del", "def", "surjective_on_with", ["normed_group_hom"]], ["del", "def", "to_add_monoid_hom", ["normed_group_hom"]], ["del", "theorem", "to_add_monoid_hom_injective", ["normed_group_hom"]], ["del", "theorem", "to_fun_eq_coe", ["normed_group_hom"]], ["del", "theorem", "zero_apply", ["normed_group_hom"]], ["del", "theorem", "zero_comp", ["normed_group_hom"]], ["del", "theorem", "zsmul_apply", ["normed_group_hom"]], ["del", "structure", "normed_group_hom", []]]}, {"oldPath": "src/analysis/normed/group/hom_completion.lean", "newPath": "src/analysis/normed/group/hom_completion.lean", "changes": [["add", "theorem", "dense_range_to_compl", ["normed_add_comm_group"]], ["add", "theorem", "norm_to_compl", ["normed_add_comm_group"]], ["add", "def", "to_compl", ["normed_add_comm_group"]], ["add", "def", "completion", ["normed_add_group_hom"]], ["add", "theorem", "completion_add", ["normed_add_group_hom"]], ["add", "theorem", "completion_coe", ["normed_add_group_hom"]], ["add", "theorem", "completion_coe_to_fun", ["normed_add_group_hom"]], ["add", "theorem", "completion_comp", ["normed_add_group_hom"]], ["add", "theorem", "completion_def", ["normed_add_group_hom"]], ["add", "theorem", "completion_id", ["normed_add_group_hom"]], ["add", "theorem", "completion_neg", ["normed_add_group_hom"]], ["add", "theorem", "completion_sub", ["normed_add_group_hom"]], ["add", "theorem", "completion_to_compl", ["normed_add_group_hom"]], ["add", "def", "extension", ["normed_add_group_hom"]], ["add", "theorem", "extension_coe", ["normed_add_group_hom"]], ["add", "theorem", "extension_coe_to_fun", ["normed_add_group_hom"]], ["add", "theorem", "extension_def", ["normed_add_group_hom"]], ["add", "theorem", "extension_unique", ["normed_add_group_hom"]], ["add", "theorem", "ker_completion", ["normed_add_group_hom"]], ["add", "theorem", "ker_le_ker_completion", ["normed_add_group_hom"]], ["add", "theorem", "norm_completion", ["normed_add_group_hom"]], ["add", "theorem", "zero_completion", ["normed_add_group_hom"]], ["add", "def", "normed_add_group_hom_completion_hom", []], ["del", "theorem", "dense_range_to_compl", ["normed_group"]], ["del", "theorem", "norm_to_compl", ["normed_group"]], ["del", "def", "to_compl", ["normed_group"]], ["del", "def", "completion", ["normed_group_hom"]], ["del", "theorem", "completion_add", ["normed_group_hom"]], ["del", "theorem", "completion_coe", ["normed_group_hom"]], ["del", "theorem", "completion_coe_to_fun", ["normed_group_hom"]], ["del", "theorem", "completion_comp", ["normed_group_hom"]], ["del", "theorem", "completion_def", ["normed_group_hom"]], ["del", "theorem", "completion_id", ["normed_group_hom"]], ["del", "theorem", "completion_neg", ["normed_group_hom"]], ["del", "theorem", "completion_sub", ["normed_group_hom"]], ["del", "theorem", "completion_to_compl", ["normed_group_hom"]], ["del", "def", "extension", ["normed_group_hom"]], ["del", "theorem", "extension_coe", ["normed_group_hom"]], ["del", "theorem", "extension_coe_to_fun", ["normed_group_hom"]], ["del", "theorem", "extension_def", ["normed_group_hom"]], ["del", "theorem", "extension_unique", ["normed_group_hom"]], ["del", "theorem", "ker_completion", ["normed_group_hom"]], ["del", "theorem", "ker_le_ker_completion", ["normed_group_hom"]], ["del", "theorem", "norm_completion", ["normed_group_hom"]], ["del", "theorem", "zero_completion", ["normed_group_hom"]], ["del", "def", "normed_group_hom_completion_hom", []]]}, {"oldPath": "src/analysis/normed/group/infinite_sum.lean", "newPath": "src/analysis/normed/group/infinite_sum.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/pointwise.lean", "newPath": "src/analysis/normed/group/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": [["mod", "def", "normed_mk", ["add_subgroup"]], ["add", "theorem", "norm_le", ["normed_add_group_hom", "is_quotient"]], ["add", "theorem", "norm_lift", ["normed_add_group_hom", "is_quotient"]], ["add", "structure", "is_quotient", ["normed_add_group_hom"]], ["add", "theorem", "is_quotient_quotient", ["normed_add_group_hom"]], ["add", "def", "lift", ["normed_add_group_hom"]], ["add", "theorem", "lift_mk", ["normed_add_group_hom"]], ["add", "theorem", "lift_norm_le", ["normed_add_group_hom"]], ["add", "theorem", "lift_norm_noninc", ["normed_add_group_hom"]], ["add", "theorem", "lift_unique", ["normed_add_group_hom"]], ["del", "theorem", "norm_le", ["normed_group_hom", "is_quotient"]], ["del", "theorem", "norm_lift", ["normed_group_hom", "is_quotient"]], ["del", "structure", "is_quotient", ["normed_group_hom"]], ["del", "theorem", "is_quotient_quotient", ["normed_group_hom"]], ["del", "def", "lift", ["normed_group_hom"]], ["del", "theorem", "lift_mk", ["normed_group_hom"]], ["del", "theorem", "lift_norm_le", ["normed_group_hom"]], ["del", "theorem", "lift_norm_noninc", ["normed_group_hom"]], ["del", "theorem", "lift_unique", ["normed_group_hom"]]]}, {"oldPath": "src/analysis/normed_space/M_structure.lean", "newPath": "src/analysis/normed_space/M_structure.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["mod", "theorem", "interior_convex_hull_aff_basis", []]]}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ball_action.lean", "newPath": "src/analysis/normed_space/ball_action.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach_steinhaus.lean", "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "def", "homeomorph_unit_ball", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/completion.lean", "newPath": "src/analysis/normed_space/completion.lean", "changes": [["mod", "theorem", "norm_to_complL", ["uniform_space", "completion"]]]}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/continuous_affine_map.lean", "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["mod", "theorem", "polar_closed_ball", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extr.lean", "newPath": "src/analysis/normed_space/extr.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["mod", "theorem", "exists_mem_frontier_inf_dist_compl_eq_dist", []], ["mod", "theorem", "exists_mem_frontier_inf_dist_compl_eq_dist", ["is_compact"]], ["mod", "theorem", "summable_iff", ["is_equivalent"]], ["mod", "theorem", "summable_iff_nat", ["is_equivalent"]], ["mod", "theorem", "summable_norm_iff", []], ["mod", "theorem", "summable_of_is_O'", []], ["mod", "theorem", "summable_of_is_O_nat'", []], ["mod", "theorem", "summable_of_is_equivalent", []], ["mod", "theorem", "summable_of_is_equivalent_nat", []]]}, {"oldPath": "src/analysis/normed_space/hahn_banach/extension.lean", "newPath": "src/analysis/normed_space/hahn_banach/extension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach/separation.lean", "newPath": "src/analysis/normed_space/hahn_banach/separation.lean", "changes": [["mod", "theorem", "separate_convex_open_set", []]]}, {"oldPath": "src/analysis/normed_space/indicator_function.lean", "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["mod", "def", "apply", ["linear_isometry", "simps"]], ["mod", "structure", "linear_isometry", []]]}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["mod", "def", "lp", []], ["mod", "def", "pre_lp", []]]}, {"oldPath": "src/analysis/normed_space/matrix_exponential.lean", "newPath": "src/analysis/normed_space/matrix_exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "theorem", "le_op_norm_mul_pow_of_le", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_pi", ["continuous_multilinear_map"]], ["mod", "def", "piₗᵢ", ["continuous_multilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "arrow_congr", ["continuous_linear_equiv"]]]}, {"oldPath": "src/analysis/normed_space/ordered.lean", "newPath": "src/analysis/normed_space/ordered.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["mod", "theorem", "dist_eq_of_L2", ["pi_Lp"]], ["mod", "theorem", "edist_eq_of_L2", ["pi_Lp"]], ["mod", "theorem", "nndist_eq_of_L2", ["pi_Lp"]], ["mod", "theorem", "nnnorm_eq_of_L2", ["pi_Lp"]], ["mod", "theorem", "nnnorm_equiv_symm_const", ["pi_Lp"]], ["mod", "theorem", "nnnorm_equiv_symm_one", ["pi_Lp"]], ["mod", "theorem", "norm_eq_of_L2", ["pi_Lp"]], ["mod", "theorem", "norm_equiv_symm_const", ["pi_Lp"]], ["mod", "theorem", "norm_equiv_symm_one", ["pi_Lp"]]]}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ray.lean", "newPath": "src/analysis/normed_space/ray.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["add", "def", "star_normed_add_group_hom", []], ["del", "def", "star_normed_group_hom", []]]}, {"oldPath": "src/analysis/normed_space/star/matrix.lean", "newPath": "src/analysis/normed_space/star/matrix.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log_deriv.lean", "newPath": "src/analysis/special_functions/complex/log_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polar_coord.lean", "newPath": "src/analysis/special_functions/polar_coord.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow_deriv.lean", "newPath": "src/analysis/special_functions/pow_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/sqrt.lean", "newPath": "src/analysis/special_functions/sqrt.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": [["add", "theorem", "cauchy_series_of_le_geometric''", ["normed_add_comm_group"]], ["add", "theorem", "cauchy_series_of_le_geometric'", ["normed_add_comm_group"]], ["del", "theorem", "cauchy_series_of_le_geometric''", ["normed_group"]], ["del", "theorem", "cauchy_series_of_le_geometric'", ["normed_group"]], ["mod", "theorem", "not_summable_of_ratio_norm_eventually_ge", []], ["mod", "theorem", "not_summable_of_ratio_test_tendsto_gt_one", []], ["del", "theorem", "cauchy_seq_of_le_geometric", ["semi_normed_group"]], ["add", "theorem", "cauchy_seq_of_le_geometric", ["seminormed_add_comm_group"]], ["mod", "theorem", "summable_of_ratio_norm_eventually_le", []], ["mod", "theorem", "summable_of_ratio_test_tendsto_lt_one", []], ["mod", "theorem", "tendsto_norm_zero'", []]]}, {"oldPath": "src/analysis/von_neumann_algebra/basic.lean", "newPath": "src/analysis/von_neumann_algebra/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": [["mod", "theorem", "add_salem_spencer_sphere", []]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": [["mod", "def", "coe_fn_linear_map", ["smooth_map"]], ["mod", "theorem", "coe_smul", ["smooth_map"]], ["mod", "theorem", "smul_comp'", ["smooth_map"]], ["mod", "theorem", "smul_comp", ["smooth_map"]]]}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": [["mod", "theorem", "smooth_smul", ["smooth_bump_function"]]]}, {"oldPath": "src/geometry/manifold/conformal_groupoid.lean", "newPath": "src/geometry/manifold/conformal_groupoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/geometry/manifold/metrizable.lean", "newPath": "src/geometry/manifold/metrizable.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": [["mod", "theorem", "smooth_to_partition_of_unity", ["bump_covering"]]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}, {"oldPath": "src/information_theory/hamming.lean", "newPath": "src/information_theory/hamming.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": [["mod", "def", "multiplicity", ["besicovitch"]]]}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["mod", "theorem", "ae_eq_zero_of_forall_dual", ["measure_theory"]], ["mod", "theorem", "ae_eq_zero_of_forall_dual_of_is_separable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": [["mod", "theorem", "tendsto_in_measure_iff_norm", ["measure_theory"]], ["mod", "theorem", "tendsto_in_measure_of_tendsto_snorm_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/locally_integrable.lean", "newPath": "src/measure_theory/function/locally_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_order.lean", "newPath": "src/measure_theory/function/lp_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "def", "to_Lp_hom", ["bounded_continuous_function"]], ["mod", "theorem", "snorm'_lim_le_liminf_snorm'", ["measure_theory", "Lp"]], ["mod", "theorem", "snorm_lim_le_liminf_snorm", ["measure_theory", "Lp"]], ["mod", "def", "Lp", ["measure_theory"]], ["mod", "theorem", "snorm_indicator_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["mod", "theorem", "ae_strongly_measurable_with_density_iff", []]]}, {"oldPath": "src/measure_theory/function/strongly_measurable_lp.lean", "newPath": "src/measure_theory/function/strongly_measurable_lp.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/measure_theory/group/integration.lean", "newPath": "src/measure_theory/group/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/average.lean", "newPath": "src/measure_theory/integral/average.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "integral_norm_eq_lintegral_nnnorm", ["measure_theory"]], ["mod", "theorem", "of_real_integral_norm_eq_lintegral_nnnorm", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral_transform.lean", "newPath": "src/measure_theory/integral/circle_integral_transform.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["mod", "theorem", "has_finite_integral_restrict_of_bounded", ["measure_theory"]], ["mod", "theorem", "integrable_indicator_const_Lp", ["measure_theory"]], ["mod", "theorem", "integrable_on_Lp_of_measure_ne_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_average.lean", "newPath": "src/measure_theory/integral/interval_average.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "mono_fun", ["interval_integrable"]], ["mod", "theorem", "interval_integrable_iff_integrable_Icc_of_le", []]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "ae_measurable_with_density_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "integral_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["mod", "theorem", "set_to_L1s_smul", ["measure_theory", "L1", "simple_func"]], ["mod", "theorem", "eq_zero", ["measure_theory", "dominated_fin_meas_additive"]], ["mod", "theorem", "eq_zero_of_measure_zero", ["measure_theory", "dominated_fin_meas_additive"]], ["mod", "def", "dominated_fin_meas_additive", ["measure_theory"]], ["mod", "theorem", "set_to_simple_func_smul", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/torus_integral.lean", "newPath": "src/measure_theory/integral/torus_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/probability/conditional_expectation.lean", "newPath": "src/probability/conditional_expectation.lean", "changes": []}, {"oldPath": "src/probability/ident_distrib.lean", "newPath": "src/probability/ident_distrib.lean", "changes": [["mod", "theorem", "integrable_iff", ["probability_theory", "ident_distrib"]], ["mod", "theorem", "integrable_snd", ["probability_theory", "ident_distrib"]], ["mod", "theorem", "integral_eq", ["probability_theory", "ident_distrib"]], ["mod", "theorem", "mem_ℒp_iff", ["probability_theory", "ident_distrib"]], ["mod", "theorem", "mem_ℒp_snd", ["probability_theory", "ident_distrib"]], ["mod", "theorem", "snorm_eq", ["probability_theory", "ident_distrib"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "coe_of_normed_add_comm_group", ["bounded_continuous_function"]], ["add", "theorem", "coe_of_normed_add_comm_group_discrete", ["bounded_continuous_function"]], ["del", "theorem", "coe_of_normed_group", ["bounded_continuous_function"]], ["del", "theorem", "coe_of_normed_group_discrete", ["bounded_continuous_function"]], ["add", "theorem", "norm_of_normed_add_comm_group_le", ["bounded_continuous_function"]], ["del", "theorem", "norm_of_normed_group_le", ["bounded_continuous_function"]], ["add", "def", "of_normed_add_comm_group", ["bounded_continuous_function"]], ["add", "def", "of_normed_add_comm_group_discrete", ["bounded_continuous_function"]], ["del", "def", "of_normed_group", ["bounded_continuous_function"]], ["del", "def", "of_normed_group_discrete", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["mod", "def", "comp_right_continuous_map", ["continuous_map"]], ["mod", "theorem", "comp_right_continuous_map_apply", ["continuous_map"]], ["mod", "def", "comp_right_homeomorph", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}, {"oldPath": "src/topology/metric_space/algebra.lean", "newPath": "src/topology/metric_space/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/prod.lean", "newPath": "src/topology/vector_bundle/prod.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/pullback.lean", "newPath": "src/topology/vector_bundle/pullback.lean", "changes": []}, {"oldPath": "test/calc.lean", "newPath": "test/calc.lean", "changes": []}, {"oldPath": "test/measurability.lean", "newPath": "test/measurability.lean", "changes": []}]}, {"timestamp": 1658680478, "sha": "989fe520", "message": "feat(set_theory/zfc/basic): `∈` is well-founded on classes (#15544)", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "mem_asymm", ["Class"]], ["add", "theorem", "mem_irrefl", ["Class"]], ["add", "theorem", "mem_wf", ["Class"]], ["add", "theorem", "univ_not_mem_univ", ["Class"]]]}]}, {"timestamp": 1658671675, "sha": "639fe5ab", "message": "feat(data/list/of_fn): lemmas to turn quantifiers over lists to quantifiers over tuples (#15433)\nIn order to prove a property of the recursor, this adds some helper lemmas to `function.left_inverse`", "changes": [{"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "sigma_eq_of_eq_comp_cast", ["fin"]]]}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["add", "def", "equiv_sigma_tuple", ["list"]], ["add", "theorem", "exists_iff_exists_tuple", ["list"]], ["add", "theorem", "forall_iff_forall_tuple", ["list"]], ["add", "def", "of_fn_rec", ["list"]], ["add", "theorem", "of_fn_rec_of_fn", ["list"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "cast_eq", ["function", "left_inverse"]], ["add", "theorem", "eq_rec_eq", ["function", "left_inverse"]], ["add", "theorem", "eq_rec_on_eq", ["function", "left_inverse"]]]}]}, {"timestamp": 1658635222, "sha": "b3bcb796", "message": "chore(scripts): update nolints.txt (#15656)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1658630922, "sha": "4a4c2753", "message": "feat(analysis/normed_space/linear_isometry): add defs and lemmas (#15650)\n* add `linear_isometry_equiv.of_top` and `linear_isometry.equiv_range`;\n* add lemmas about (pre)images of balls and spheres.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "preimage_ball", ["linear_isometry"]], ["add", "theorem", "preimage_closed_ball", ["linear_isometry"]], ["add", "theorem", "preimage_sphere", ["linear_isometry"]], ["add", "theorem", "image_ball", ["linear_isometry_equiv"]], ["add", "theorem", "image_closed_ball", ["linear_isometry_equiv"]], ["add", "theorem", "image_eq_preimage", ["linear_isometry_equiv"]], ["add", "theorem", "image_sphere", ["linear_isometry_equiv"]], ["add", "def", "of_top", ["linear_isometry_equiv"]], ["add", "theorem", "preimage_ball", ["linear_isometry_equiv"]], ["add", "theorem", "preimage_closed_ball", ["linear_isometry_equiv"]], ["add", "theorem", "preimage_sphere", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1658615578, "sha": "0179605f", "message": "feat(analysis/inner_product_space/positive): definition and basic facts about positive operators (#15470)", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "is_self_adjoint_iff_adjoint_eq", ["continuous_linear_map"]], ["add", "theorem", "add", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "adjoint_conj", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "adjoint_eq", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "conj_adjoint", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "conj_orthogonal_projection", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "is_self_adjoint_id", ["inner_product_space"]], ["add", "theorem", "is_self_adjoint_zero", ["inner_product_space"]], ["add", "theorem", "orthogonal_projection_is_self_adjoint", ["inner_product_space"]], ["add", "theorem", "adjoint_orthogonal_projection", ["submodule"]], ["add", "theorem", "adjoint_subtypeL", ["submodule"]]]}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/positive.lean", "changes": [["add", "theorem", "add", ["continuous_linear_map", "is_positive"]], ["add", "theorem", "adjoint_conj", ["continuous_linear_map", "is_positive"]], ["add", "theorem", "conj_adjoint", ["continuous_linear_map", "is_positive"]], ["add", "theorem", "conj_orthogonal_projection", ["continuous_linear_map", "is_positive"]], ["add", "theorem", "inner_nonneg_left", ["continuous_linear_map", "is_positive"]], ["add", "theorem", "inner_nonneg_right", ["continuous_linear_map", "is_positive"]], ["add", "theorem", "is_self_adjoint", ["continuous_linear_map", "is_positive"]], ["add", "theorem", "orthogonal_projection_comp", ["continuous_linear_map", "is_positive"]], ["add", "def", "is_positive", ["continuous_linear_map"]], ["add", "theorem", "is_positive_id", ["continuous_linear_map"]], ["add", "theorem", "is_positive_iff_complex", ["continuous_linear_map"]], ["add", "theorem", "is_positive_zero", ["continuous_linear_map"]]]}]}, {"timestamp": 1658611618, "sha": "983c737a", "message": "feat(number_theory/legendre_symbol/add_character): add file introducing additive characters (#15499)\nThis adds a file that defines additive characters on commutative rings and proves some relevant properties, e.g., that on finite fields and rings of type `zmod n`, there exists a *primitive* additive character, and that the sum of the character values vanishes when the character is nontrivial. This will be used in a later PR (together with multiplicative characters) to define Gauss sums and prove some resuits on them.\nThere is a [Zulip topic](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Additive.20characters/near/290005886) to discuss this.", "changes": [{"oldPath": null, "newPath": "src/number_theory/legendre_symbol/add_character.lean", "changes": [["add", "theorem", "is_primitive", ["add_char", "is_nontrivial"]], ["add", "def", "is_nontrivial", ["add_char"]], ["add", "theorem", "is_nontrivial_iff_ne_trivial", ["add_char"]], ["add", "theorem", "zmod_char_eq_one_iff", ["add_char", "is_primitive"]], ["add", "def", "is_primitive", ["add_char"]], ["add", "def", "mul_shift", ["add_char"]], ["add", "theorem", "mul_shift_apply", ["add_char"]], ["add", "theorem", "mul_shift_mul", ["add_char"]], ["add", "theorem", "mul_shift_spec'", ["add_char"]], ["add", "theorem", "mul_shift_zero", ["add_char"]], ["add", "structure", "primitive_add_char", ["add_char"]], ["add", "def", "primitive_char_finite_field", ["add_char"]], ["add", "def", "primitive_zmod_char", ["add_char"]], ["add", "theorem", "sum_eq_card_of_is_trivial'", ["add_char"]], ["add", "theorem", "sum_eq_card_of_is_trivial", ["add_char"]], ["add", "theorem", "sum_eq_zero_of_is_nontrivial'", ["add_char"]], ["add", "theorem", "sum_eq_zero_of_is_nontrivial", ["add_char"]], ["add", "theorem", "to_mul_shift_inj_of_is_primitive", ["add_char"]], ["add", "def", "zmod_char", ["add_char"]], ["add", "theorem", "zmod_char_is_nontrivial_iff", ["add_char"]], ["add", "theorem", "zmod_char_primitive_of_eq_one_only_at_zero", ["add_char"]], ["add", "theorem", "zmod_char_primitive_of_primitive_root", ["add_char"]], ["add", "def", "add_char", []]]}]}, {"timestamp": 1658602860, "sha": "c9ba943d", "message": "fix(*): fix typos I made yesterday (#15627)\nFix 4 typos I made yesterday.", "changes": [{"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["add", "theorem", "interval_oc_subset", ["set", "ord_connected"]], ["del", "theorem", "interval_oc_subset", ["set", "ord_interval"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "diag_preimage_prod_self", ["set"]], ["del", "theorem", "diag_preimage_prod_sellf", ["set"]]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": [["mod", "theorem", "ker_to_continuous_linear_map", ["linear_map"]], ["mod", "theorem", "range_to_continuous_linear_map", ["linear_map"]]]}]}, {"timestamp": 1658596073, "sha": "ef901ea6", "message": "refactor(*): rename `nondiscrete_normed_field` (#15625)\nThis renames `nondiscrete_normed_field` to `nontrivially_normed_field` in accordance with this [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/hypotheses.20for.20a.20field.20property/near/290408091)", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/analytic/linear.lean", "newPath": "src/analysis/analytic/linear.lean", "changes": []}, {"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": []}, {"oldPath": "src/analysis/calculus/affine_map.lean", "newPath": "src/analysis/calculus/affine_map.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/diff_on_int_cont.lean", "newPath": "src/analysis/calculus/diff_on_int_cont.lean", "changes": [["mod", "theorem", "smul", ["diff_cont_on_cl"]], ["mod", "theorem", "smul_const", ["diff_cont_on_cl"]]]}, {"oldPath": "src/analysis/calculus/dslope.lean", "newPath": "src/analysis/calculus/dslope.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_analytic.lean", "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": [["mod", "structure", "implicit_function_data", []]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/polar.lean", "newPath": "src/analysis/locally_convex/polar.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": [["mod", "theorem", "exists_one_lt_norm", ["normed_field"]]]}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/algebra.lean", "newPath": "src/analysis/normed_space/algebra.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach_steinhaus.lean", "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/completion.lean", "newPath": "src/analysis/normed_space/completion.lean", "changes": [["mod", "theorem", "norm_to_complL", ["uniform_space", "completion"]]]}, {"oldPath": "src/analysis/normed_space/continuous_affine_map.lean", "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["mod", "def", "polar", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": [["mod", "theorem", "continuous_at_inv", ["normed_field"]], ["mod", "theorem", "continuous_at_zpow", ["normed_field"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "newPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "theorem", "ext_chart_model_space_eq_id", []], ["mod", "def", "apply", ["model_with_corners", "simps"]], ["mod", "def", "symm_apply", ["model_with_corners", "simps"]], ["mod", "structure", "model_with_corners", []], ["mod", "def", "model_with_corners_self", []], ["mod", "theorem", "mk'", ["smooth_manifold_with_corners"]]]}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": [["mod", "structure", "basic_smooth_vector_bundle_core", []], ["mod", "def", "trivial_basic_smooth_vector_bundle_core", []]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "to_Lp_norm_le", ["bounded_continuous_function"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "integral_smul", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["mod", "theorem", "set_to_fun_smul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": [["mod", "theorem", "with_densityᵥ_smul'", ["measure_theory"]], ["mod", "theorem", "with_densityᵥ_smul", ["measure_theory"]]]}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/hom.lean", "newPath": "src/topology/vector_bundle/hom.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/prod.lean", "newPath": "src/topology/vector_bundle/prod.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/pullback.lean", "newPath": "src/topology/vector_bundle/pullback.lean", "changes": []}]}, {"timestamp": 1658596072, "sha": "4050b906", "message": "refactor(data/set/countable): golf using `_root_.countable`, review API (#15624)\n* add `set.countable_coe_iff`, `set.countable.to_subtype`, `set.to_countable`, `set.countable_univ`, `countable.to_set`, `set.countable.exists_surjective`;\n* generalize some lemmas from `[encodable]` to `[countable]`;\n* move `section enumerate` up to use it in `countable_iff_exists_subset_range`;\n* golf some proofs using facts about `_root_.countable`;\n* drop `countable_encodable` and `countable_encodable'`, use `set.to_countable` instead.", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "countable_Union", ["set"]], ["add", "theorem", "countable_coe_iff", ["set"]], ["mod", "theorem", "countable_empty", ["set"]], ["del", "theorem", "countable_encodable'", ["set"]], ["del", "theorem", "countable_encodable", ["set"]], ["mod", "theorem", "countable_iff_exists_subset_range", ["set"]], ["mod", "theorem", "countable_pi", ["set"]], ["mod", "theorem", "countable_range", ["set"]], ["add", "theorem", "countable_univ", ["set"]], ["add", "theorem", "countable_univ_pi", ["set"]], ["add", "theorem", "to_countable", ["set"]]]}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/measure.lean", "newPath": "src/number_theory/liouville/measure.lean", "changes": []}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}]}, {"timestamp": 1658586894, "sha": "c0cc689b", "message": "chore(algebra/lie/direct_sum): remove `direct_sum.lie_algebra_is_internal` (#15631)\nThis meant the same thing as the unprefixed version, and wasn't used anywhere:\n```lean\nexample [decidable_eq ι] : direct_sum.lie_algebra_is_internal I ↔ direct_sum.is_internal I := iff.rfl\n```\nI think it was added before `direct_sum.is_internal` generalized to arbitrary additive subobjects.", "changes": [{"oldPath": "src/algebra/lie/direct_sum.lean", "newPath": "src/algebra/lie/direct_sum.lean", "changes": [["del", "def", "lie_algebra_is_internal", ["direct_sum"]]]}]}, {"timestamp": 1658586893, "sha": "92e96605", "message": "feat(data/finset/basic): There is exactly one set in empty types (#15607)\nand transfer a few boolean algebra lemmas to `finset`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "union_sdiff_left", ["finset"]], ["add", "theorem", "union_sdiff_right", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "sdiff_eq_inter_compl", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}]}, {"timestamp": 1658586892, "sha": "6537ae9c", "message": "feat(order/partition/finpartition): Bound size of a bit of `finpartition.atomise` (#15350)\nAuxiliary lemmas for Szemerédi Regularity Lemma.", "changes": [{"oldPath": "src/order/partition/finpartition.lean", "newPath": "src/order/partition/finpartition.lean", "changes": [["mod", "theorem", "bUnion_filter_atomise", ["finpartition"]], ["add", "theorem", "card_filter_atomise_le_two_pow", ["finpartition"]], ["mod", "theorem", "mem_atomise", ["finpartition"]]]}]}, {"timestamp": 1658584303, "sha": "7c94fe71", "message": "feat(combinatorics/simple_graph/density): Bound on the difference between edge densities (#15353)\nAuxiliary lemma for Szemerédi Regularity Lemma.", "changes": [{"oldPath": "src/combinatorics/simple_graph/density.lean", "newPath": "src/combinatorics/simple_graph/density.lean", "changes": [["add", "theorem", "abs_edge_density_sub_edge_density_le_one_sub_mul", ["rel"]], ["add", "theorem", "abs_edge_density_sub_edge_density_le_two_mul", ["rel"]], ["add", "theorem", "abs_edge_density_sub_edge_density_le_two_mul_sub_sq", ["rel"]], ["add", "theorem", "card_interedges_finpartition", ["rel"]], ["add", "theorem", "card_interedges_finpartition_left", ["rel"]], ["add", "theorem", "card_interedges_finpartition_right", ["rel"]], ["add", "theorem", "edge_density_sub_edge_density_le_one_sub_mul", ["rel"]], ["add", "theorem", "mul_edge_density_le_edge_density", ["rel"]]]}]}, {"timestamp": 1658562712, "sha": "106f0ac9", "message": "feat(ring_theory/noetherian): Finitely generated idempotent ideal is principal. (#15561)", "changes": [{"oldPath": "src/algebra/ring/idempotents.lean", "newPath": "src/algebra/ring/idempotents.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "map", ["ideal", "fg"]], ["mod", "def", "fg", ["ideal"]], ["mod", "theorem", "fg_ker_comp", ["ideal"]], ["add", "theorem", "is_idempotent_elem_iff_eq_bot_or_top", ["ideal"]], ["add", "theorem", "is_idempotent_elem_iff_of_fg", ["ideal"]], ["add", "theorem", "exists_mem_and_smul_eq_self_of_fg_of_le_smul", ["submodule"]]]}]}, {"timestamp": 1658547352, "sha": "282da0c1", "message": "feat(set_theory/game/nim): make the file `noncomputable theory` (#15367)\nSince we're interfacing with ordinals and since `pgame` holds no data, we simplify `nim` and allow it to be noncomputable. We need to give `nim` the `noncomputable!` attribute to avoid a VM compilation bug.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["del", "def", "nim", []], ["del", "def", "out'", ["ordinal"]], ["add", "def", "nim_one_relabelling", ["pgame", "nim"]]]}]}, {"timestamp": 1658539867, "sha": "ab6bcd63", "message": "feat(order/upper_lower): Upper closure of a set (#15581)\nDefine the upper/lower set generated by a set.", "changes": [{"oldPath": "src/combinatorics/set_family/intersecting.lean", "newPath": "src/combinatorics/set_family/intersecting.lean", "changes": []}, {"oldPath": "src/order/minimal.lean", "newPath": "src/order/minimal.lean", "changes": [["del", "theorem", "max_lower_set_of", ["is_antichain"]], ["add", "theorem", "maximals_lower_closure", ["is_antichain"]], ["del", "theorem", "min_upper_set_of", ["is_antichain"]], ["add", "theorem", "minimals_upper_closure", ["is_antichain"]]]}, {"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "coe_lower_closure", []], ["add", "theorem", "coe_upper_closure", []], ["add", "theorem", "gc_lower_closure_coe", []], ["add", "theorem", "gc_upper_closure_coe", []], ["add", "def", "gi_lower_closure_coe", []], ["add", "def", "gi_upper_closure_coe", []], ["add", "theorem", "ord_connected", ["is_lower_set"]], ["add", "theorem", "is_lower_set_iff_Iic_subset", []], ["add", "theorem", "ord_connected", ["is_upper_set"]], ["add", "theorem", "is_upper_set_iff_Ici_subset", []], ["add", "def", "lower_closure", []], ["add", "theorem", "lower_closure_Union", []], ["add", "theorem", "lower_closure_empty", []], ["add", "theorem", "lower_closure_eq_bot_iff", []], ["add", "theorem", "lower_closure_min", []], ["add", "theorem", "lower_closure_mono", []], ["add", "theorem", "lower_closure_sUnion", []], ["add", "theorem", "lower_closure_union", []], ["add", "theorem", "lower_closure_univ", []], ["mod", "theorem", "coe_Inf", ["lower_set"]], ["mod", "theorem", "coe_Sup", ["lower_set"]], ["mod", "theorem", "coe_bot", ["lower_set"]], ["mod", "theorem", "coe_inf", ["lower_set"]], ["mod", "theorem", "coe_infi", ["lower_set"]], ["mod", "theorem", "coe_infi₂", ["lower_set"]], ["add", "theorem", "coe_subset_coe", ["lower_set"]], ["mod", "theorem", "coe_sup", ["lower_set"]], ["mod", "theorem", "coe_supr", ["lower_set"]], ["mod", "theorem", "coe_supr₂", ["lower_set"]], ["mod", "theorem", "coe_top", ["lower_set"]], ["add", "theorem", "supr_Iic", ["lower_set"]], ["add", "theorem", "mem_lower_closure", []], ["add", "theorem", "mem_upper_closure", []], ["add", "theorem", "ord_connected_iff_upper_closure_inter_lower_closure", []], ["add", "theorem", "upper_closure_inter_lower_closure", ["set", "ord_connected"]], ["add", "theorem", "subset_lower_closure", []], ["add", "theorem", "subset_upper_closure", []], ["add", "def", "upper_closure", []], ["add", "theorem", "upper_closure_Union", []], ["add", "theorem", "upper_closure_anti", []], ["add", "theorem", "upper_closure_empty", []], ["add", "theorem", "upper_closure_eq_top_iff", []], ["add", "theorem", "upper_closure_min", []], ["add", "theorem", "upper_closure_sUnion", []], ["add", "theorem", "upper_closure_union", []], ["add", "theorem", "upper_closure_univ", []], ["mod", "theorem", "coe_Inf", ["upper_set"]], ["mod", "theorem", "coe_Sup", ["upper_set"]], ["mod", "theorem", "coe_bot", ["upper_set"]], ["mod", "theorem", "coe_inf", ["upper_set"]], ["mod", "theorem", "coe_infi", ["upper_set"]], ["mod", "theorem", "coe_infi₂", ["upper_set"]], ["add", "theorem", "coe_subset_coe", ["upper_set"]], ["mod", "theorem", "coe_sup", ["upper_set"]], ["mod", "theorem", "coe_supr", ["upper_set"]], ["mod", "theorem", "coe_supr₂", ["upper_set"]], ["mod", "theorem", "coe_top", ["upper_set"]], ["add", "theorem", "infi_Ici", ["upper_set"]]]}]}, {"timestamp": 1658527868, "sha": "1e024cb6", "message": "feat(data/polynomial/degree/definitions): redefine `polynomial.degree` as `p.support.max` (#15199)\nThis PR redefines `polynomial.degree p`:\n* old: `p.support.sup coe`\n* new: `p.support.max`.\nThe two definitions are defeq and relatively few changes are required.\nWeirdness: `open finset` seems to no longer work consistently. This is the largest source of differences.\nIn particular, the file `ring_theory/polynomial/cyclotomic/basic` only changed because I added `finset.` in several places.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "max_eq_sup_coe", ["finset"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "def", "degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}]}, {"timestamp": 1658527866, "sha": "db22f697", "message": "feat(analysis/locally_convex/with_seminorms): in a normed space, von Neumann bounded = metric bounded (#15124)", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "theorem", "is_bounded_iff_subset_smul_ball", ["normed_space"]], ["add", "theorem", "is_bounded_iff_subset_smul_closed_ball", ["normed_space"]], ["add", "theorem", "is_vonN_bounded_ball", ["normed_space"]], ["add", "theorem", "is_vonN_bounded_closed_ball", ["normed_space"]], ["add", "theorem", "is_vonN_bounded_iff", ["normed_space"]], ["add", "theorem", "vonN_bornology_eq", ["normed_space"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "bounded_iff_is_bounded", ["metric"]]]}]}, {"timestamp": 1658514473, "sha": "b2ba27ce", "message": "move(order/{boolean_algebra → basic}): move `has_compl` and trivial instances (#15602)\nWe move the trivial `pi.has_sdiff`, `pi.has_compl`, and `Prop.has_compl` instances to `order/basic.lean`. The main effect of this is that `rᶜ` for the complement of a relation is now available basically anywhere.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "compl_apply", ["pi"]], ["add", "theorem", "compl_def", ["pi"]], ["add", "theorem", "sdiff_apply", ["pi"]], ["add", "theorem", "sdiff_def", ["pi"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["del", "theorem", "compl_apply", ["pi"]], ["del", "theorem", "compl_def", ["pi"]], ["del", "theorem", "sdiff_apply", ["pi"]], ["del", "theorem", "sdiff_def", ["pi"]]]}]}, {"timestamp": 1658514472, "sha": "0b1e039b", "message": "feat(topology/metric_space/isometry): use namespace, add lemmas (#15591)\n* Use `namespace isometry`.\n* Add lemmas like `isometry.preimage_ball`.", "changes": [{"oldPath": "src/analysis/normed/group/add_torsor.lean", "newPath": "src/analysis/normed/group/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["mod", "theorem", "antilipschitz", ["isometry"]], ["mod", "theorem", "closed_embedding", ["isometry"]], ["mod", "theorem", "comp", ["isometry"]], ["mod", "theorem", "comp_continuous_iff", ["isometry"]], ["mod", "theorem", "comp_continuous_on_iff", ["isometry"]], ["del", "theorem", "continuous", ["isometry"]], ["del", "theorem", "dist_eq", ["isometry"]], ["mod", "theorem", "ediam_image", ["isometry"]], ["mod", "theorem", "ediam_range", ["isometry"]], ["mod", "theorem", "edist_eq", ["isometry"]], ["del", "theorem", "embedding", ["isometry"]], ["del", "theorem", "injective", ["isometry"]], ["mod", "theorem", "lipschitz", ["isometry"]], ["mod", "theorem", "maps_to_emetric_ball", ["isometry"]], ["mod", "theorem", "maps_to_emetric_closed_ball", ["isometry"]], ["del", "theorem", "nndist_eq", ["isometry"]], ["add", "theorem", "preimage_ball", ["isometry"]], ["add", "theorem", "preimage_closed_ball", ["isometry"]], ["add", "theorem", "preimage_emetric_ball", ["isometry"]], ["add", "theorem", "preimage_emetric_closed_ball", ["isometry"]], ["add", "theorem", "preimage_set_of_dist", ["isometry"]], ["add", "theorem", "preimage_sphere", ["isometry"]], ["mod", "theorem", "right_inv", ["isometry"]], ["mod", "theorem", "tendsto_nhds_iff", ["isometry"]], ["del", "theorem", "uniform_embedding", ["isometry"]], ["del", "theorem", "uniform_inducing", ["isometry"]], ["del", "theorem", "isometry_emetric_iff_metric", []], ["mod", "theorem", "isometry_id", []], ["add", "theorem", "isometry_iff_dist_eq", []], ["add", "theorem", "isometry_iff_nndist_eq", []], ["mod", "theorem", "isometry_subsingleton", []], ["mod", "theorem", "isometry_subtype_coe", []]]}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}]}, {"timestamp": 1658505188, "sha": "b93a64da", "message": "fix(data/json): `rbmap string α` never serializes to `null` (#15622)\nThis change means that `option (rbmap string α)` can now serialize", "changes": [{"oldPath": "src/data/json.lean", "newPath": "src/data/json.lean", "changes": []}]}, {"timestamp": 1658505187, "sha": "81e26435", "message": "feat(order/boolean_algebra): A bounded generalized boolean algebra is a boolean algebra (#15606)\nAbstract the construction of `boolean_algebra (finset α)`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "def", "to_boolean_algebra", ["generalized_boolean_algebra"]]]}]}, {"timestamp": 1658495588, "sha": "6b93ea7e", "message": "feat(data/set/function): add lemmas about `set.restrict` (#15605)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "eq_restrict_iff", ["set"]], ["add", "theorem", "restrict_eq_iff", ["set"]], ["add", "theorem", "restrict_eq_restrict_iff", ["set"]]]}]}, {"timestamp": 1658488133, "sha": "8ad82e4b", "message": "feat(topology/order): upgrade some lemmas to `iff`s (#15617)\n* turn `continuous_induced_rng`, `continuous_coinduced_dom`, `continuous_sup_dom`, `continuous_Sup_dom`, `continuous_supr_dom`, `continuous_inf_rng`, `continuous_Inf_rng`, and `continuous_infi_rng` into `iff`s;\n* drop `continuous_induced_rng'`;\n* add `is_open_sup`.", "changes": [{"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/topology/algebra/constructions.lean", "newPath": "src/topology/algebra/constructions.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/star.lean", "newPath": "src/topology/algebra/star.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/units.lean", "newPath": "src/topology/continuous_function/units.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "continuous_Inf_rng", []], ["mod", "theorem", "continuous_Sup_dom", []], ["mod", "theorem", "continuous_coinduced_dom", []], ["del", "theorem", "continuous_induced_rng'", []], ["mod", "theorem", "continuous_induced_rng", []], ["mod", "theorem", "continuous_inf_rng", []], ["mod", "theorem", "continuous_infi_rng", []], ["mod", "theorem", "continuous_sup_dom", []], ["mod", "theorem", "continuous_supr_dom", []], ["add", "theorem", "is_open_sup", []]]}]}, {"timestamp": 1658488131, "sha": "db107767", "message": "chore(analysis/normed/field/unit_ball): cleanup instances (#15615)\nAdd `subsemigroup.has_continuous_mul` and use it. Also use missing\n`ancestor` attributes so that `to_additive` works with\n`submonoid.to_subsemigroup`.", "changes": [{"oldPath": "src/analysis/normed/field/unit_ball.lean", "newPath": "src/analysis/normed/field/unit_ball.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1658481109, "sha": "51891bef", "message": "feat(topology/maps): add 2 lemmas, `open function` (#15612)\n* Add `is_open_map.of_inverse` and `is_open_map.range_mem_nhds`.\n* Open namespace `function`, add `_root_` before `embedding` here and there.\nOne lemma comes from a recent presentation at Brown University, another one comes from the sphere eversion project.", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "structure", "closed_embedding", []], ["mod", "theorem", "mk'", ["embedding"]], ["add", "theorem", "range_mem_nhds", ["is_open_map"]], ["mod", "structure", "open_embedding", []], ["add", "theorem", "of_inverse", ["quotient_map"]]]}]}, {"timestamp": 1658481108, "sha": "1a73c7ee", "message": "feat(logic/equiv/local_equiv): add 2 lemmas (#15611)\nMotivated by a lemma in the sphere eversion project.", "changes": [{"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": [["add", "theorem", "image_symm_image_of_subset_target", ["local_equiv"]], ["add", "theorem", "symm_image_image_of_subset_source", ["local_equiv"]]]}]}, {"timestamp": 1658481107, "sha": "80d79069", "message": "feat(topology/algebra/module/finite_dimension): add 2 simp lemmas (#15610)\nFrom the sphere eversion project.\nCo-Authored-By: Patrick Massot ", "changes": [{"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": [["add", "theorem", "ker_to_continuous_linear_map", ["linear_map"]], ["add", "theorem", "range_to_continuous_linear_map", ["linear_map"]]]}]}, {"timestamp": 1658481106, "sha": "716616b3", "message": "chore(ring_theory/localization/basic): golf sec_snd_ne_zero (#15572)", "changes": [{"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}]}, {"timestamp": 1658481105, "sha": "4b82074e", "message": "chore(set_theory/ordinal/arithmetic): change `0 < x` assumptions to `x ≠ 0` (#15562)\nConverting from `h : 0 < x` to `h : x ≠ 0` is as easy as `h.ne'`, while the other way round requires `ordinal.pos_iff_ne_zero.2 h`. As such, we prefer the latter form throughout the ordinal logarithm API.\nWe also rename hypotheses like `b0` and `x0` to more standard names like `hb` and `hx`.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "add_log_le_log_mul", ["ordinal"]], ["mod", "theorem", "log_def", ["ordinal"]], ["mod", "theorem", "log_mod_opow_log_lt_log_self", ["ordinal"]], ["mod", "theorem", "log_of_left_le_one", ["ordinal"]], ["mod", "theorem", "log_of_not_one_lt_left", ["ordinal"]], ["mod", "theorem", "log_opow_mul_add", ["ordinal"]], ["mod", "theorem", "log_pos", ["ordinal"]], ["mod", "theorem", "lt_opow_iff_log_lt", ["ordinal"]], ["mod", "theorem", "lt_opow_succ_log_self", ["ordinal"]], ["mod", "theorem", "mod_opow_log_lt_self", ["ordinal"]], ["mod", "theorem", "opow_le_iff_le_log", ["ordinal"]], ["mod", "theorem", "opow_log_le_self", ["ordinal"]], ["mod", "theorem", "opow_mul_add_pos", ["ordinal"]], ["mod", "theorem", "succ_log_def", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": [["mod", "theorem", "mul_eq_opow_log_succ", ["ordinal"]]]}]}, {"timestamp": 1658481104, "sha": "ac9e3583", "message": "feat(algebraic_geometry/AffineScheme): Affine communication lemma (#15487)", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["add", "def", "affine_basic_open", ["algebraic_geometry", "Scheme"]], ["add", "def", "affine_opens", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_from_Spec_app", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "basic_open_union_eq_self_iff", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "from_Spec_map_basic_open", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "self_le_basic_open_union_iff", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "of_affine_open_cover", ["algebraic_geometry"]]]}]}, {"timestamp": 1658481103, "sha": "30edc932", "message": "chore(set_theory/game/nim): review `simp` lemmas (#15407)\nThis PR does the following:\n- Untag `grundy_value_eq_iff_equiv_nim`, `grundy_value_eq_iff_equiv`, and `grundy_value_iff_equiv_zero` as `simp`, since it's sometimes easier to directly prove the equality of Grundy values than it is the equivalence of games. \n- Untag `nim_zero_equiv` and `nim_one_equiv` as `simp` - since equivalences can't be used to rewrite, these are nearly useless as `simp` lemmas.\n- Tag `nim.grundy_value` and `grundy_value_star` as `simp`.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "grundy_value_eq_iff_equiv", ["pgame"]], ["mod", "theorem", "grundy_value_eq_iff_equiv_nim", ["pgame"]], ["mod", "theorem", "grundy_value_iff_equiv_zero", ["pgame"]], ["mod", "theorem", "grundy_value_star", ["pgame"]], ["mod", "theorem", "grundy_value_zero", ["pgame"]], ["mod", "theorem", "grundy_value", ["pgame", "nim"]], ["mod", "theorem", "nim_one_equiv", ["pgame", "nim"]], ["mod", "theorem", "nim_zero_equiv", ["pgame", "nim"]]]}]}, {"timestamp": 1658476261, "sha": "68451363", "message": "feat(topology/instances/ennreal): add `continuous(_on).ennreal_mul` (#15593)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "ennreal_mul", ["continuous"]], ["add", "theorem", "ennreal_mul", ["continuous_on"]]]}]}, {"timestamp": 1658464170, "sha": "4d5ac734", "message": "feat(data/set/intervals): add lemmas (#15608)\nFrom sphere eversion project", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Iic_union_Ici", ["set"]], ["add", "theorem", "Iic_union_Ici_of_le", ["set"]], ["mod", "theorem", "Iic_union_Ioi", ["set"]], ["add", "theorem", "Iic_union_Ioi_of_le", ["set"]], ["mod", "theorem", "Iio_union_Ici", ["set"]], ["add", "theorem", "Iio_union_Ici_of_le", ["set"]], ["add", "theorem", "Iio_union_Ioi", ["set"]], ["add", "theorem", "Iio_union_Ioi_of_lt", ["set"]]]}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["mod", "theorem", "ord_connected_interval", ["set"]], ["add", "theorem", "ord_connected_interval_oc", ["set"]], ["add", "theorem", "interval_oc_subset", ["set", "ord_interval"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "Ioc_subset_interval_oc'", ["set"]], ["add", "theorem", "Ioc_subset_interval_oc", ["set"]]]}]}, {"timestamp": 1658464170, "sha": "98c62bd0", "message": "feat(data/set/prod): add theorems about `λ x, (x, x)` (#15604)\nFrom the sphere eversion project. Also swap LHS with RHS in\n`set.diagonal_eq_range` and rename it to `set.range_diag`.", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "diag_preimage_prod", ["set"]], ["add", "theorem", "diag_preimage_prod_sellf", ["set"]], ["del", "theorem", "diagonal_eq_range", ["set"]], ["add", "theorem", "range_diag", ["set"]]]}]}, {"timestamp": 1658464169, "sha": "e52026f7", "message": "feat(integration): elementary version of FTC-1 (#15603)\nThe goal is to have a nice statement for the undergrad list and for Mathematics in Lean.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "deriv_integral", ["continuous"]], ["add", "theorem", "integral_has_strict_deriv_at", ["continuous"]]]}]}, {"timestamp": 1658464168, "sha": "bd4a574f", "message": "chore(ring_theory/polynomial/symmetric): golf (#15598)", "changes": [{"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1658456420, "sha": "e27e99b9", "message": "docs(undergrad): add pointwise convergence (#15601)\nWe could link to the definition of the product topology but I think it makes more sense to point out this theorem stating that convergence for the product topology is pointwise convergence.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1658456418, "sha": "2f99fd41", "message": "docs(undergrad): clean up distribution section (#15600)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1658456417, "sha": "d96fc102", "message": "docs(undergrad): add polar integration (#15597)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1658456416, "sha": "c97887bd", "message": "refactor(data/list/chain): `transitive` → `is_trans` on `chain.pairwise` (#15571)\nApart from being more widely used throughout `mathlib`, `is_trans` can be inferred when used with common relations such as `≤`, `<`, `∣`, and others.", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["mod", "theorem", "chain'_iff_pairwise", ["list"]], ["mod", "theorem", "chain_iff_pairwise", ["list"]]]}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["mod", "theorem", "chain_iff_pairwise", ["cycle"]], ["mod", "theorem", "forall_eq_of_chain", ["cycle"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/logic/equiv/list.lean", "newPath": "src/logic/equiv/list.lean", "changes": []}]}, {"timestamp": 1658452924, "sha": "d98479aa", "message": "feat(analysis/calculus/cont_diff): generalize `mul` lemmas to a normed algebra (#15595)\nAlso add lemmas about `finset.prod`.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["mod", "theorem", "div_const", ["cont_diff"]], ["mod", "theorem", "mul", ["cont_diff"]], ["mod", "theorem", "pow", ["cont_diff"]], ["mod", "theorem", "div_const", ["cont_diff_at"]], ["mod", "theorem", "mul", ["cont_diff_at"]], ["mod", "theorem", "pow", ["cont_diff_at"]], ["add", "theorem", "cont_diff_at_prod'", []], ["add", "theorem", "cont_diff_at_prod", []], ["mod", "theorem", "cont_diff_mul", []], ["mod", "theorem", "div_const", ["cont_diff_on"]], ["mod", "theorem", "mul", ["cont_diff_on"]], ["mod", "theorem", "pow", ["cont_diff_on"]], ["add", "theorem", "cont_diff_on_prod'", []], ["add", "theorem", "cont_diff_on_prod", []], ["add", "theorem", "cont_diff_prod'", []], ["add", "theorem", "cont_diff_prod", []], ["mod", "theorem", "div_const", ["cont_diff_within_at"]], ["mod", "theorem", "mul", ["cont_diff_within_at"]], ["mod", "theorem", "pow", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_within_at_prod'", []], ["add", "theorem", "cont_diff_within_at_prod", []]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1658445594, "sha": "91416440", "message": "doc(number_theory/bernoulli_polynomials): a few small improvements (#15599)\nTo make the page header look nicer.", "changes": [{"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}]}, {"timestamp": 1658442623, "sha": "767aeb39", "message": "feat(order/succ_pred/limit): Successor and predecessor limits (#15001)\nWe define a successor limit as a value that isn't a successor of anything but perhaps itself, and likewise for predecessors. The plan is to use this to redefine limit ordinals and limit cardinals.", "changes": [{"oldPath": null, "newPath": "src/order/succ_pred/limit.lean", "changes": [["add", "theorem", "lt_pred", ["order", "is_pred_limit"]], ["add", "theorem", "lt_pred_iff", ["order", "is_pred_limit"]], ["add", "theorem", "pred_ne", ["order", "is_pred_limit"]], ["add", "def", "is_pred_limit", ["order"]], ["add", "theorem", "is_pred_limit_iff", ["order"]], ["add", "theorem", "is_pred_limit_iff_lt_pred", ["order"]], ["add", "theorem", "is_pred_limit_iff_of_no_min", ["order"]], ["add", "theorem", "is_pred_limit_iff_pred_ne", ["order"]], ["add", "theorem", "is_pred_limit_of_lt_pred", ["order"]], ["add", "theorem", "is_pred_limit_of_pred_ne", ["order"]], ["add", "theorem", "is_pred_limit_rec_on_limit", ["order"]], ["add", "theorem", "is_pred_limit_rec_on_pred'", ["order"]], ["add", "theorem", "is_pred_limit_rec_on_pred", ["order"]], ["add", "theorem", "is_pred_limit_top", ["order"]], ["add", "theorem", "is_min_of_no_max", ["order", "is_succ_limit"]], ["add", "theorem", "succ_lt", ["order", "is_succ_limit"]], ["add", "theorem", "succ_lt_iff", ["order", "is_succ_limit"]], ["add", "theorem", "succ_ne", ["order", "is_succ_limit"]], ["add", "def", "is_succ_limit", ["order"]], ["add", "theorem", "is_succ_limit_bot", ["order"]], ["add", "theorem", "is_succ_limit_iff", ["order"]], ["add", "theorem", "is_succ_limit_iff_of_no_max", ["order"]], ["add", "theorem", "is_succ_limit_iff_succ_lt", ["order"]], ["add", "theorem", "is_succ_limit_iff_succ_ne", ["order"]], ["add", "theorem", "is_succ_limit_of_succ_lt", ["order"]], ["add", "theorem", "is_succ_limit_of_succ_ne", ["order"]], ["add", "theorem", "is_succ_limit_rec_on_limit", ["order"]], ["add", "theorem", "is_succ_limit_rec_on_succ'", ["order"]], ["add", "theorem", "is_succ_limit_rec_on_succ", ["order"]], ["add", "theorem", "mem_range_pred_of_not_is_pred_limit", ["order"]], ["add", "theorem", "mem_range_succ_of_not_is_succ_limit", ["order"]], ["add", "theorem", "not_is_pred_limit", ["order"]], ["add", "theorem", "not_is_pred_limit_iff'", ["order"]], ["add", "theorem", "not_is_pred_limit_iff", ["order"]], ["add", "theorem", "not_is_pred_limit_of_no_min", ["order"]], ["add", "theorem", "not_is_pred_limit_pred", ["order"]], ["add", "theorem", "not_is_pred_limit_pred_of_not_is_min", ["order"]], ["add", "theorem", "not_is_succ_limit", ["order"]], ["add", "theorem", "not_is_succ_limit_iff'", ["order"]], ["add", "theorem", "not_is_succ_limit_iff", ["order"]], ["add", "theorem", "not_is_succ_limit_of_no_max", ["order"]], ["add", "theorem", "not_is_succ_limit_succ", ["order"]], ["add", "theorem", "not_is_succ_limit_succ_of_not_is_max", ["order"]]]}]}, {"timestamp": 1658434751, "sha": "9bf23b0a", "message": "feat(order/initial_seg): Initial/principal segment from empty type (#15375)", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["add", "def", "of_is_empty", ["initial_seg"]], ["add", "def", "of_is_empty", ["principal_seg"]], ["add", "theorem", "of_is_empty_top", ["principal_seg"]], ["add", "def", "pempty_to_punit", ["principal_seg"]]]}]}, {"timestamp": 1658427624, "sha": "d749b205", "message": "feat(data/real/basic): add a repr showing an underlying cauchy sequence (#15575)\nThis isn't all that useful, but it gives a slightly nicer experience for users who are surprised when `#eval (2 + 3 : real)` emits a gigantic pile of garbage.", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": null, "newPath": "test/real.lean", "changes": []}]}, {"timestamp": 1658427623, "sha": "c0c910de", "message": "feat(linear_algebra/linear_pmap): more lemmas about the graph (#15531)\nThis PR adds more lemmas about the graph of a partially defined linear map, in particular about scalar multiplication and negation of `linear_pmap`s as well as relating inequalities and equalities between the graph and the `linear_pmap`.", "changes": [{"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "eq_of_eq_graph", ["linear_pmap"]], ["add", "theorem", "image_iff", ["linear_pmap"]], ["add", "theorem", "le_of_le_graph", ["linear_pmap"]], ["add", "theorem", "mem_domain_iff", ["linear_pmap"]], ["add", "theorem", "mem_domain_iff_of_eq_graph", ["linear_pmap"]], ["add", "theorem", "mem_range_iff", ["linear_pmap"]], ["add", "theorem", "neg_graph", ["linear_pmap"]], ["add", "theorem", "smul_graph", ["linear_pmap"]]]}]}, {"timestamp": 1658420385, "sha": "591992d7", "message": "chore(data/real/basic,number_theory/padics/padic_numbers): eliminate `real.of_rat` and `padic.of_rat` (#15569)\nThis removes `real.of_rat` and `padic.of_rat` in favor of using `rat.cast` directly now that the diamond is gone.\nThe cauchy version is still useful because it generalizes to fields other than the rationals.\nThis also cleans up the lemmas around these definitions.\nAs a bonus, this means the cast from rat to real is now computable, such that\n```lean\n#eval ((2.5 : ℚ) : ℝ).cauchy.unquot 0 -- 5/2\n```\ncan be used to extract an element of the cauchy series.\nIt's not clear to me why the `field Cauchy` was only a `def` and not an `instance`. On the assumption that if there were a good reason it would either be indicated in a comment or by a CI failure, I've changed it to be an instance.\nThis also makes some instances on `Cauchy` and `padic` computable, simply by not defining them in terms of forgetting division from the noncompuable field structure.", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "of_rat_rat", ["cau_seq", "completion"]], ["add", "theorem", "cauchy_int_cast", ["real"]], ["add", "theorem", "cauchy_nat_cast", ["real"]], ["add", "theorem", "cauchy_rat_cast", ["real"]], ["add", "theorem", "of_cauchy_int_cast", ["real"]], ["add", "theorem", "of_cauchy_nat_cast", ["real"]], ["add", "theorem", "of_cauchy_rat_cast", ["real"]], ["del", "def", "of_rat", ["real"]], ["del", "theorem", "of_rat_apply", ["real"]], ["del", "theorem", "of_rat_eq_cast", ["real"]], ["del", "theorem", "of_rat_lt", ["real"]], ["add", "theorem", "rat_cast_lt", ["real"]], ["add", "def", "ring_equiv_Cauchy", ["real"]]]}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": [["add", "theorem", "of_rat_int_cast", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_nat_cast", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_rat_cast", ["cau_seq", "completion"]], ["add", "def", "of_rat_ring_hom", ["cau_seq", "completion"]]]}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": [["del", "theorem", "cast_eq_of_rat", ["padic"]], ["del", "theorem", "cast_eq_of_rat_of_int", ["padic"]], ["del", "theorem", "cast_eq_of_rat_of_nat", ["padic"]], ["mod", "theorem", "coe_add", ["padic"]], ["mod", "theorem", "coe_div", ["padic"]], ["mod", "theorem", "coe_mul", ["padic"]], ["mod", "theorem", "coe_neg", ["padic"]], ["mod", "theorem", "coe_one", ["padic"]], ["mod", "theorem", "coe_sub", ["padic"]], ["del", "def", "of_rat", ["padic"]], ["del", "theorem", "of_rat_add", ["padic"]], ["del", "theorem", "of_rat_div", ["padic"]], ["del", "theorem", "of_rat_eq", ["padic"]], ["del", "theorem", "of_rat_mul", ["padic"]], ["del", "theorem", "of_rat_neg", ["padic"]], ["del", "theorem", "of_rat_one", ["padic"]], ["del", "theorem", "of_rat_sub", ["padic"]], ["del", "theorem", "of_rat_zero", ["padic"]], ["mod", "theorem", "eq_padic_norm'", ["padic_norm_e"]]]}]}, {"timestamp": 1658420384, "sha": "7f16dd20", "message": "feat(topology/partition_of_unity): local to global (#15490)\nUse partitions of unity to construct global maps.\nMotivated by discussions with @PatrickMassot . Useful for the sphere eversion project and probably duplicates some lemmas from that project.", "changes": [{"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["add", "theorem", "finsum_mem", ["convex"]]]}, {"oldPath": null, "newPath": "src/analysis/convex/partition_of_unity.lean", "changes": [["add", "theorem", "exists_continuous_forall_mem_convex_of_local", []], ["add", "theorem", "exists_continuous_forall_mem_convex_of_local_const", []], ["add", "theorem", "finsum_smul_mem_convex", ["partition_of_unity"]]]}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": [["add", "theorem", "exists_cont_mdiff_forall_mem_convex_of_local", []], ["add", "theorem", "exists_smooth_forall_mem_convex_of_local", []], ["add", "theorem", "exists_smooth_forall_mem_convex_of_local_const", []], ["add", "theorem", "cont_mdiff_finsum_smul", ["smooth_partition_of_unity"]], ["add", "theorem", "cont_mdiff_smul", ["smooth_partition_of_unity"]], ["add", "theorem", "finsum_smul_mem_convex", ["smooth_partition_of_unity"]], ["add", "theorem", "cont_mdiff_finsum_smul", ["smooth_partition_of_unity", "is_subordinate"]], ["add", "theorem", "smooth_finsum_smul", ["smooth_partition_of_unity", "is_subordinate"]], ["mod", "theorem", "is_subordinate_to_partition_of_unity", ["smooth_partition_of_unity"]], ["add", "theorem", "smooth_finsum_smul", ["smooth_partition_of_unity"]], ["add", "theorem", "smooth_smul", ["smooth_partition_of_unity"]]]}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": [["add", "theorem", "locally_finite_tsupport", ["bump_covering"]], ["add", "theorem", "continuous_finsum_smul", ["partition_of_unity"]], ["add", "theorem", "continuous_smul", ["partition_of_unity"]], ["add", "theorem", "exists_pos", ["partition_of_unity"]], ["add", "theorem", "continuous_finsum_smul", ["partition_of_unity", "is_subordinate"]], ["add", "theorem", "locally_finite_tsupport", ["partition_of_unity"]]]}]}, {"timestamp": 1658420383, "sha": "f05fdcac", "message": "refactor(set_theory/zfc): make `Class` morally `Set → Prop` (#15248)\nWe use `Class` in place of `Set → Prop` (within the `Class` API), and document this decision.\nNote that there's no longer much reason to have `Class.to_Set` separately from `Class.mem`. I will suggest inlining both into the `has_mem` instance in a followup PR.\nSee [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/ZFC.20definable.20class/near/289194801)).", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["mod", "def", "iota", ["Class"]], ["mod", "theorem", "iota_ex", ["Class"]], ["mod", "theorem", "iota_val", ["Class"]], ["mod", "theorem", "sep_hom", ["Class"]], ["mod", "def", "to_Set", ["Class"]], ["mod", "theorem", "to_Set_of_Set", ["Class"]]]}]}, {"timestamp": 1658420382, "sha": "99625b1b", "message": "feat(set_theory/cardinal/ordinal): basic properties on Beth numbers (#14989)\nWe define Beth cardinals and prove miscellaneous basic properties about them.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "bdd_above_of_small", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "is_strong_limit_beth", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": [["add", "theorem", "beth_one", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["add", "theorem", "aleph'_limit", ["cardinal"]], ["add", "theorem", "aleph_0_le_beth", ["cardinal"]], ["add", "theorem", "aleph_le_beth", ["cardinal"]], ["add", "theorem", "aleph_limit", ["cardinal"]], ["add", "def", "beth", ["cardinal"]], ["add", "theorem", "beth_le", ["cardinal"]], ["add", "theorem", "beth_limit", ["cardinal"]], ["add", "theorem", "beth_lt", ["cardinal"]], ["add", "theorem", "beth_ne_zero", ["cardinal"]], ["add", "theorem", "beth_pos", ["cardinal"]], ["add", "theorem", "beth_strict_mono", ["cardinal"]], ["add", "theorem", "beth_succ", ["cardinal"]], ["add", "theorem", "beth_zero", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "bdd_above_of_small", ["ordinal"]], ["add", "theorem", "succ_lt", ["ordinal", "is_limit"]], ["add", "theorem", "le_sub_of_le", ["ordinal"]], ["del", "theorem", "small_Iio", ["ordinal"]], ["add", "theorem", "sub_lt_of_le", ["ordinal"]]]}]}, {"timestamp": 1658420380, "sha": "d29aca84", "message": "feat(algebraic_topology/dold_kan): technical lemmas about face maps (#14044)\nThis PR introduces technical lemmas about face maps and the null homotopic maps Hσ that will be used in the proof of the Dold-Kan equivalence.", "changes": [{"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": [["add", "theorem", "map_f", ["algebraic_topology", "alternating_face_map_complex"]], ["add", "theorem", "obj_X", ["algebraic_topology", "alternating_face_map_complex"]], ["add", "theorem", "obj_d_eq", ["algebraic_topology", "alternating_face_map_complex"]], ["add", "theorem", "alternating_face_map_complex_map_f", ["algebraic_topology"]], ["add", "theorem", "alternating_face_map_complex_obj_X", ["algebraic_topology"]], ["add", "theorem", "alternating_face_map_complex_obj_d", ["algebraic_topology"]]]}, {"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/faces.lean", "changes": [["add", "theorem", "comp_Hσ_eq", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "theorem", "comp_Hσ_eq_zero", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "theorem", "induction", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "theorem", "of_comp", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "theorem", "of_succ", ["algebraic_topology", "dold_kan", "higher_faces_vanish"]], ["add", "def", "higher_faces_vanish", ["algebraic_topology", "dold_kan"]]]}, {"oldPath": "src/algebraic_topology/dold_kan/homotopies.lean", "newPath": "src/algebraic_topology/dold_kan/homotopies.lean", "changes": []}]}, {"timestamp": 1658411558, "sha": "72e0e9a5", "message": "doc(data/dfinsupp): improve the docstring for dfinsupp (#15554)\nThis adds a brief comment about notation, and an extended implementation note.", "changes": [{"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}]}, {"timestamp": 1658411557, "sha": "8672734e", "message": "feat(set_theory/zfc/ordinal): more lemmas on transitive sets (#15548)\nWe add `empty_is_transitive`, `is_transitive.inter`, and `is_transitive.sUnion'`. We also add a `variables` block.", "changes": [{"oldPath": "src/set_theory/zfc/ordinal.lean", "newPath": "src/set_theory/zfc/ordinal.lean", "changes": [["add", "theorem", "empty_is_transitive", ["Set"]], ["add", "theorem", "sUnion'", ["Set", "is_transitive"]], ["del", "theorem", "sUnion", ["Set", "is_transitive"]], ["mod", "theorem", "subset_of_mem", ["Set", "is_transitive"]], ["mod", "theorem", "is_transitive_iff_mem_trans", ["Set"]], ["mod", "theorem", "is_transitive_iff_sUnion_subset", ["Set"]], ["mod", "theorem", "is_transitive_iff_subset_powerset", ["Set"]]]}]}, {"timestamp": 1658411556, "sha": "8983bec7", "message": "fix(data/set_like): `coe_sort_trans` should have low priority (#15489)\nIn core Lean, `coe_sort_trans` is given default priority, meaning it takes precedence over `set_like.has_coe_to_sort`. As a consequence, sometimes a weird instance path was chosen, such as `submodule R M → Module R → Type*` rather than the direct path `submodule R M → Type*`, and I believe this can lead to diamonds (including weird universe levels), and in any case to weird defeq checks (which are made extra expensive by occurring in the type). In fact, there are quite a few `has_coe_to_sort` instances that would be useless since they are preceded by a `has_coe`, e.g. `lie_ideal`.\nLowering the priority of `coe_sort_trans` below that of `set_like.has_coe_to_sort` should ensure we use the preferred inheritance path. We did the same thing for `coe_fn_trans` in `fun_like/basic.lean`.\nThe consequence is that certain places that (ab)used the weird coercion paths will need to be slightly redefined to use the new path, basically inserting unification hints manually. Those paths were slightly fragile anyway so I don't think that's an important loss compared to the advantages of clarifying.", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": []}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "coe_bracket_of_module", ["lie_ideal"]], ["mod", "theorem", "subsingleton_of_bot", ["lie_ideal"]]]}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}]}, {"timestamp": 1658411555, "sha": "62b5bb74", "message": "refactor(field_theory/*): Refactor `normal` to use `is_algebraic` (#15421)\nThis PR refactors `normal` to use `is_algebraic` rather than `is_integral`, as suggested by a TODO comment.\nI think the motivation is that `is_algebraic` is the preferred language when discussing fields.", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["mod", "theorem", "integral", ["is_galois"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "is_algebraic", ["normal"]], ["mod", "theorem", "is_integral", ["normal"]]]}]}, {"timestamp": 1658411554, "sha": "90a44f6b", "message": "feat(linear_algebra/projective_space/subspace): defines subspaces of a projective space (#15391)\nThis PR defines subspaces of a projective space, and shows that they form a complete lattice under inclusion. In an upcoming PR we show that there is an order-preserving bijection between the lattice of a subspaces of a projective space and the lattice of submodules of the underlying vector space.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/projective_space/subspace.lean", "changes": [["add", "def", "gi", ["projectivization", "subspace"]], ["add", "theorem", "mem_add", ["projectivization", "subspace"]], ["add", "theorem", "mem_carrier_iff", ["projectivization", "subspace"]], ["add", "def", "span", ["projectivization", "subspace"]], ["add", "inductive", "span_carrier", ["projectivization", "subspace"]], ["add", "theorem", "span_coe", ["projectivization", "subspace"]], ["add", "theorem", "subset_span", ["projectivization", "subspace"]], ["add", "structure", "subspace", ["projectivization"]]]}]}, {"timestamp": 1658411552, "sha": "976f5106", "message": "feat(ring_theory/graded_algebra/basic): add lemma `proj_homogeneous_mul` (#15264)\nadded a lemma stating that $(ab)_{i+j}=ab_j$ for homogeneous $a$ with degree $I$", "changes": [{"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["add", "theorem", "coe_decompose_mul_add_of_left_mem", ["direct_sum"]], ["add", "theorem", "coe_decompose_mul_add_of_right_mem", ["direct_sum"]], ["add", "theorem", "decompose_mul_add_left", ["direct_sum"]], ["add", "theorem", "decompose_mul_add_right", ["direct_sum"]]]}]}, {"timestamp": 1658406417, "sha": "4a09c733", "message": "feat(topology/basic): a condition implying that a sequence of functions locally stabilizes (#15580)\nFor sphere-eversion-project.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "comp_inj_on", ["locally_finite"]], ["add", "theorem", "exists_forall_eventually_at_top_eventually_eq'", ["locally_finite"]], ["add", "theorem", "exists_forall_eventually_at_top_eventually_eq", ["locally_finite"]], ["add", "theorem", "exists_forall_eventually_eq_prod", ["locally_finite"]]]}]}, {"timestamp": 1658397658, "sha": "6b5a1730", "message": "feat(logic/nonempty): `pi.nonempty` instance (#15574)\nMoved from lean-liquid.", "changes": [{"oldPath": "src/logic/nonempty.lean", "newPath": "src/logic/nonempty.lean", "changes": [["mod", "theorem", "nonempty_pi", ["classical"]]]}]}, {"timestamp": 1658377988, "sha": "b5e9ffd2", "message": "chore(scripts): update nolints.txt (#15582)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1658377987, "sha": "6b34a400", "message": "feat(analysis/normed_space/operator_norm): variant of `continuous_linear_equiv.has_sum` (#15578)", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1658377986, "sha": "8ab47c53", "message": "feat(analysis/inner_product_space/basic): `orthonormal` version of `linear_independent.coe_range` (#15577)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "coe_range", ["orthonormal"]]]}]}, {"timestamp": 1658377985, "sha": "eece0d9b", "message": "feat(combinatorics/simple_graph/connectivity): operations and lemmas about path type (#15156)\nAdds more theory about the type of paths in a simple graph. From `walks_and_trees` branch.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "cons_is_cycle", ["simple_graph", "path"]], ["add", "theorem", "count_edges_eq_one", ["simple_graph", "path"]], ["add", "theorem", "count_support_eq_one", ["simple_graph", "path"]], ["add", "theorem", "loop_eq", ["simple_graph", "path"]], ["add", "theorem", "mk_mem_edges_singleton", ["simple_graph", "path"]], ["add", "theorem", "nodup_support", ["simple_graph", "path"]], ["add", "theorem", "not_mem_edges_of_loop", ["simple_graph", "path"]], ["add", "def", "reverse", ["simple_graph", "path"]], ["add", "def", "singleton", ["simple_graph", "path"]]]}]}, {"timestamp": 1658377984, "sha": "3ce710a7", "message": "feat(group_theory/subsemigroup/membership): add membership criteria for subsemigroups (#13945)\nThis mimics the membership file for submoniods. However, because we have no `free_semigroup`, many features are missing from the corresponding submonid file. In particular, we have no notion of `subsemigroup.closure`. The reason for adding this now is so that we can develop some of the corresponding API for non-unital subsemirings.\n- [x] depends on: #13627", "changes": [{"oldPath": null, "newPath": "src/group_theory/subsemigroup/membership.lean", "changes": [["add", "theorem", "coe_Sup_of_directed_on", ["subsemigroup"]], ["add", "theorem", "coe_supr_of_directed", ["subsemigroup"]], ["add", "theorem", "mem_Sup_of_directed_on", ["subsemigroup"]], ["add", "theorem", "mem_Sup_of_mem", ["subsemigroup"]], ["add", "theorem", "mem_sup_left", ["subsemigroup"]], ["add", "theorem", "mem_sup_right", ["subsemigroup"]], ["add", "theorem", "mem_supr_of_directed", ["subsemigroup"]], ["add", "theorem", "mem_supr_of_mem", ["subsemigroup"]], ["add", "theorem", "mul_mem_sup", ["subsemigroup"]], ["add", "theorem", "supr_induction'", ["subsemigroup"]], ["add", "theorem", "supr_induction", ["subsemigroup"]]]}]}, {"timestamp": 1658370367, "sha": "e1eba9fa", "message": "chore(tactic/*): clean up doc tags (#15563)", "changes": [{"oldPath": "src/tactic/polyrith.lean", "newPath": "src/tactic/polyrith.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_search/frontend.lean", "newPath": "src/tactic/rewrite_search/frontend.lean", "changes": []}]}, {"timestamp": 1658370366, "sha": "9696524a", "message": "chore(algebra/module/injective): golf some proofs (#15534)", "changes": [{"oldPath": "src/algebra/module/injective.lean", "newPath": "src/algebra/module/injective.lean", "changes": []}]}, {"timestamp": 1658370365, "sha": "34d4a9bf", "message": "feat(analysis/normed_space/linear_isometry): `linear_equiv.of_eq` as a `linear_isometry_equiv` (#15471)\nWe also setup `simps` on `linear_isometry` and `linear_isometry_equiv`.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "def", "apply", ["linear_isometry", "simps"]], ["add", "theorem", "coe_of_eq_apply", ["linear_isometry_equiv"]], ["add", "def", "of_eq", ["linear_isometry_equiv"]], ["add", "theorem", "of_eq_rfl", ["linear_isometry_equiv"]], ["add", "theorem", "of_eq_symm", ["linear_isometry_equiv"]], ["add", "def", "apply", ["linear_isometry_equiv", "simps"]], ["add", "def", "symm_apply", ["linear_isometry_equiv", "simps"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "of_eq_rfl", ["linear_equiv"]]]}]}, {"timestamp": 1658370364, "sha": "de04bafa", "message": "feat(data/sum/order): `with_bot α ≃o punit ⊕ₗ α` and `with_top α ≃o α ⊕ₗ punit` (#15370)", "changes": [{"oldPath": "src/data/sum/order.lean", "newPath": "src/data/sum/order.lean", "changes": [["add", "def", "order_iso_punit_sum_lex", ["with_bot"]], ["add", "theorem", "order_iso_punit_sum_lex_bot", ["with_bot"]], ["add", "theorem", "order_iso_punit_sum_lex_coe", ["with_bot"]], ["add", "theorem", "order_iso_punit_sum_lex_symm_inl", ["with_bot"]], ["add", "theorem", "order_iso_punit_sum_lex_symm_inr", ["with_bot"]], ["add", "def", "order_iso_sum_lex_punit", ["with_top"]], ["add", "theorem", "order_iso_sum_lex_punit_coe", ["with_top"]], ["add", "theorem", "order_iso_sum_lex_punit_symm_inl", ["with_top"]], ["add", "theorem", "order_iso_sum_lex_punit_symm_inr", ["with_top"]], ["add", "theorem", "order_iso_sum_lex_punit_top", ["with_top"]]]}]}, {"timestamp": 1658366925, "sha": "73cf56f1", "message": "feat(set_theory/zfc/basic): `Set.mem_insert → Set.mem_insert_iff`, add `Set.mem_insert` and `Set.mem_insert_of_mem` (#15573)\nThe name `Set.mem_insert_iff` matches `set.mem_insert_iff`.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["mod", "theorem", "mem_insert", ["Set"]], ["add", "theorem", "mem_insert_iff", ["Set"]], ["add", "theorem", "mem_insert_of_mem", ["Set"]]]}]}, {"timestamp": 1658363266, "sha": "bff41725", "message": "feat(field_theory/adjoin): The compositum of finitely many finite dimensional intermediate fields is finite dimensional, finset version (#15426)\nThis PR adds a finset version of `finite_dimensional_supr_of_finite`, since `⨆ i ∈ s` seems to be the best way to talk about finite compositums in practice.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}]}, {"timestamp": 1658363266, "sha": "9e4e72ae", "message": "feat(category_theory/preadditive): left exactness of certain hom functors (#15096)", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/category_theory/linear/yoneda.lean", "newPath": "src/category_theory/linear/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/yoneda.lean", "newPath": "src/category_theory/preadditive/yoneda.lean", "changes": []}]}, {"timestamp": 1658358103, "sha": "4eacd601", "message": "feat(analysis/asymptotics): add `is_o*.of_pow` (#15568)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "of_pow", ["asymptotics", "is_O"]], ["add", "theorem", "of_pow", ["asymptotics", "is_O_with"]], ["add", "theorem", "of_pow", ["asymptotics", "is_o"]]]}]}, {"timestamp": 1658353560, "sha": "08c1fbc7", "message": "chore(measure_theory/measure/finite_measure_weak_convergence): golf (#15576)", "changes": [{"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["mod", "theorem", "mass", ["measure_theory", "finite_measure", "zero"]]]}]}, {"timestamp": 1658353559, "sha": "c9f48402", "message": "refactor(analysis/special_functions/pow): assume `n ≠ 0` instead of `0 < n` (#15553)", "changes": [{"oldPath": "archive/imo/imo2001_q2.lean", "newPath": "archive/imo/imo2001_q2.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "cpow_nat_inv_pow", ["complex"]], ["mod", "theorem", "pow_nat_rpow_nat_inv", ["nnreal"]], ["mod", "theorem", "rpow_nat_inv_pow_nat", ["nnreal"]], ["mod", "theorem", "pow_nat_rpow_nat_inv", ["real"]], ["mod", "theorem", "rpow_nat_inv_pow_nat", ["real"]]]}]}, {"timestamp": 1658353557, "sha": "2f5afa10", "message": "feat(tactic/compute_degree + test/compute_degree): introduce a tactic for proving `f.(nat_)degree ≤ d` (#14762)\nThis PR is a prequel to #14040. It introduces a simpler step than the actual computation of the degree. This step is used by the \"main\" tactic `compute_degree` defined in #14040.\nTo help the reviewing process, I split this PR from the other one.\nFor a very small sample of some golfing that could be done with this tactic, see [this diff](https://github.com/leanprover-community/mathlib/compare/adomani_compute_degree_le..adomani_compute_degree_le_golf), from #14776.", "changes": [{"oldPath": null, "newPath": "src/tactic/compute_degree.lean", "changes": []}, {"oldPath": null, "newPath": "test/compute_degree.lean", "changes": []}]}, {"timestamp": 1658343813, "sha": "382acc15", "message": "feat(geometry/manifold): generalize some lemmas from `smooth` to `cont_mdiff` (#15560)\nAlso add `*_within_at`, `*_at`, and `*_on` versions.", "changes": [{"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": [["add", "theorem", "mul", ["cont_mdiff"]], ["add", "theorem", "mul", ["cont_mdiff_at"]], ["add", "theorem", "cont_mdiff_at_finset_prod'", []], ["add", "theorem", "cont_mdiff_at_finset_prod", []], ["add", "theorem", "cont_mdiff_finprod", []], ["add", "theorem", "cont_mdiff_finprod_cond", []], ["add", "theorem", "cont_mdiff_finset_prod'", []], ["add", "theorem", "cont_mdiff_finset_prod", []], ["add", "theorem", "mul", ["cont_mdiff_on"]], ["add", "theorem", "cont_mdiff_on_finset_prod'", []], ["add", "theorem", "cont_mdiff_on_finset_prod", []], ["add", "theorem", "mul", ["cont_mdiff_within_at"]], ["add", "theorem", "cont_mdiff_within_at_finset_prod'", []], ["add", "theorem", "cont_mdiff_within_at_finset_prod", []], ["mod", "theorem", "mul", ["smooth"]], ["add", "theorem", "mul", ["smooth_at"]], ["add", "theorem", "smooth_at_finset_prod'", []], ["add", "theorem", "smooth_at_finset_prod", []], ["mod", "theorem", "smooth_finprod", []], ["mod", "theorem", "smooth_finprod_cond", []], ["mod", "theorem", "smooth_finset_prod'", []], ["mod", "theorem", "smooth_finset_prod", []], ["mod", "theorem", "mul", ["smooth_on"]], ["add", "theorem", "smooth_on_finset_prod'", []], ["add", "theorem", "smooth_on_finset_prod", []], ["add", "theorem", "mul", ["smooth_within_at"]], ["add", "theorem", "smooth_within_at_finset_prod'", []], ["add", "theorem", "smooth_within_at_finset_prod", []]]}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "smul", ["cont_mdiff"]], ["add", "theorem", "smul", ["cont_mdiff_at"]], ["add", "theorem", "cont_mdiff_at", ["cont_mdiff_on"]], ["add", "theorem", "smul", ["cont_mdiff_on"]], ["add", "theorem", "smul", ["cont_mdiff_within_at"]], ["mod", "theorem", "smul", ["smooth"]], ["mod", "theorem", "smul", ["smooth_at"]], ["del", "theorem", "smooth_at_univ", []], ["add", "theorem", "smooth_at", ["smooth_on"]], ["mod", "theorem", "smul", ["smooth_on"]], ["mod", "theorem", "smooth_on_univ", []], ["add", "theorem", "smul", ["smooth_within_at"]], ["add", "theorem", "smooth_within_at_univ", []]]}]}, {"timestamp": 1658343812, "sha": "6fed0370", "message": "refactor(logic/encodable/small): migrate to `countable` (#15557)", "changes": [{"oldPath": "src/logic/encodable/small.lean", "newPath": "src/data/countable/small.lean", "changes": []}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}]}, {"timestamp": 1658343811, "sha": "0c79da05", "message": "feat(data/nat/pairing): basic bounds on `mkpair` (#15539)\nNeeded for #15505.", "changes": [{"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["add", "theorem", "add_le_mkpair", ["nat"]], ["add", "theorem", "max_sq_add_min_le_mkpair", ["nat"]], ["add", "theorem", "mkpair_lt_max_add_one_sq", ["nat"]], ["add", "theorem", "unpair_add_le", ["nat"]]]}]}, {"timestamp": 1658343810, "sha": "ebf73435", "message": "feat(analysis/normed*): add instances and lemmas (#15515)\n* Add some `coe_*` lemmas.\n* Add `is_scalar_tower` and `is_smul_class` instances.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "inv_unique", ["units"]]]}, {"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": [["add", "theorem", "coe_div", ["units"]]]}, {"oldPath": "src/analysis/normed/field/unit_ball.lean", "newPath": "src/analysis/normed/field/unit_ball.lean", "changes": [["add", "theorem", "coe_div_unit_sphere", []], ["add", "theorem", "coe_inv_unit_sphere", []], ["add", "theorem", "coe_mul_unit_ball", []], ["add", "theorem", "coe_mul_unit_closed_ball", []], ["add", "theorem", "coe_mul_unit_sphere", []], ["add", "theorem", "coe_one_unit_closed_ball", []], ["add", "theorem", "coe_one_unit_sphere", []], ["add", "theorem", "coe_pow_unit_closed_ball", []], ["add", "theorem", "coe_pow_unit_sphere", []], ["add", "theorem", "coe_zpow_unit_sphere", []], ["add", "theorem", "unit_sphere_to_units_apply_coe", []], ["add", "theorem", "unit_sphere_to_units_injective", []]]}, {"oldPath": "src/analysis/normed_space/ball_action.lean", "newPath": "src/analysis/normed_space/ball_action.lean", "changes": []}]}, {"timestamp": 1658343809, "sha": "3838b0e0", "message": "refactor(order/boolean_algebra): Get rid of `boolean_algebra.core` (#15302)\nThe current setup is problematic for two reasons:\n* `boolean_algebra.core` is part of the typeclass hierarchy even though it is mathematically the same as `boolean_algebra`.\n* `boolean_algebra` contains the redundant fields `sup_inf_sdiff` and `inf_inf_sdiff`.\nThe easiest fix is to respectively:\n* delete `boolean_algebra.core` and use default values in the `boolean_algebra` fields.\n* not make `boolean_algebra` extend `generalized_boolean_algebra` but instead manually provide the forgetful instance.", "changes": [{"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/M_structure.lean", "newPath": "src/analysis/normed_space/M_structure.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["del", "def", "sdiff", ["boolean_algebra", "core"]], ["del", "theorem", "sdiff_eq", ["boolean_algebra", "core"]], ["del", "def", "of_core", ["boolean_algebra"]], ["mod", "theorem", "compl_inf_eq_bot", []], ["mod", "theorem", "compl_sup_eq_top", []], ["mod", "theorem", "inf_compl_eq_bot", []], ["mod", "theorem", "sdiff_eq", []], ["mod", "theorem", "sup_compl_eq_top", []]]}]}, {"timestamp": 1658343808, "sha": "f01c132b", "message": "feat(data/sym/basic): combinatorial equivalence for `sym (option α) n.succ` (#15192)\nAdds `sym_option_succ_equiv`.", "changes": [{"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["add", "def", "decode", ["sym_option_succ_equiv"]], ["add", "theorem", "decode_encode", ["sym_option_succ_equiv"]], ["add", "def", "encode", ["sym_option_succ_equiv"]], ["add", "theorem", "encode_decode", ["sym_option_succ_equiv"]], ["add", "theorem", "encode_of_none_mem", ["sym_option_succ_equiv"]], ["add", "theorem", "encode_of_not_none_mem", ["sym_option_succ_equiv"]], ["add", "def", "sym_option_succ_equiv", []]]}]}, {"timestamp": 1658343807, "sha": "80ae52a9", "message": "refactor(data/nat/factorization): Change definition of `factorization` to be computable (#12301)\nThis PR changes the definition of `data.nat.factorization` to not depend on `multiset.to_finsupp` and instead to depend on `padic_val_nat`. This sidesteps the computability issues with finsupp discussed in [this thread](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/.60ite.60.20with.20multiple.20decidable.20instances/near/272409877).\nTo deal with the changed imports this PR also moves some material from `number_theory/padics/padic_val` and `ring_theory/multiplicity` into `data/nat/factorization/basic`.", "changes": [{"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose/factorization.lean", "newPath": "src/data/nat/choose/factorization.lean", "changes": []}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "eq_iff_prime_padic_val_nat_eq", ["nat"]], ["add", "def", "factorization", ["nat"]], ["add", "theorem", "factorization_def", ["nat"]], ["add", "theorem", "factorization_eq_factors_multiset", ["nat"]], ["add", "theorem", "multiplicity_eq_factorization", ["nat"]], ["add", "theorem", "prod_factors_gcd_mul_prod_factors_mul", ["nat"]], ["add", "theorem", "prod_pow_prime_padic_val_nat", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": [["add", "theorem", "dvd_iff_padic_val_nat_ne_zero", []], ["del", "theorem", "padic_val_nat_eq_factorization", []], ["del", "theorem", "prod_pow_prime_padic_val_nat", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["del", "theorem", "multiplicity_eq_factorization", []], ["del", "theorem", "prod_factors_gcd_mul_prod_factors_mul", []]]}]}, {"timestamp": 1658334177, "sha": "c26a844f", "message": "feat(order/succ_pred/basic): `succ_le_succ_iff`, etc. taking `¬ is_max` hypotheses (#15536)", "changes": [{"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "succ_eq_succ_iff_of_not_is_max", ["order"]], ["add", "theorem", "succ_le_succ_iff_of_not_is_max", ["order"]], ["add", "theorem", "succ_lt_succ_iff_of_not_is_max", ["order"]]]}]}, {"timestamp": 1658334176, "sha": "f9153b8a", "message": "feat(tactic/attribute): add `expand_exists` (#15498)\nAdds an attribute `expand_exists`, which takes a proof that something exists with some property, and outputs a value using `classical.some`, and a proof that it has that property using `classical.some_spec`.\nCloses #11682", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/expand_exists.lean", "changes": []}, {"oldPath": null, "newPath": "test/expand_exists.lean", "changes": [["add", "theorem", "dependent_type_exists", []], ["add", "def", "dependent_type_res", []], ["add", "theorem", "dependent_type_spec_res", []], ["add", "theorem", "nat_greater_exists", []], ["add", "theorem", "nat_greater_exists₂", []], ["add", "theorem", "nat_greater_nosplit_spec_res", []], ["add", "theorem", "nat_greater_spec_res", []], ["add", "theorem", "nat_greater_split_spec_lt_res", []], ["add", "theorem", "nat_greater_split_spec_neq_res", []]]}]}, {"timestamp": 1658334174, "sha": "1dd65b6a", "message": "refactor(order/rel_classes): ditch `is_extensional` (#15373)\nThis typeclass was barely used anyways, and the instances that existed for it had unnecessary assumptions. We replace it by the theorem `extensional_of_trichotomous_of_irrefl`.\nA relevant short discussion on this typeclass: [link](https://github.com/leanprover-community/mathlib/pull/15371#issuecomment-1185138800)", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": [["del", "theorem", "unique_of_extensional", ["initial_seg"]], ["add", "theorem", "unique_of_trichotomous_of_irrefl", ["initial_seg"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "extensional_of_trichotomous_of_irrefl", []]]}]}, {"timestamp": 1658334173, "sha": "309f7594", "message": "feat(set_theory/ordinal/basic): dot notation lemmas + golf (#15348)\nWe introduce dot notation lemmas for proving something of the form `type r < type s` or `type r ≤ type s` by providing a principal segment, an initial segment, or a relation embedding. We rename `type_le` and `type_le'` to `type_le_iff` and `type_le_iff'` for consistency with `type_lt_iff` (which can't be renamed to `type_lt`, as this is an existing theorem about `type (<)`).\nWe could introduce `lift` variants of these, but I'd rather wait until #15041 is merged, at which point I can do the analogous refactor on ordinals.", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "ordinal_type_le", ["initial_seg"]], ["del", "theorem", "type_le'", ["ordinal"]], ["del", "theorem", "type_le", ["ordinal"]], ["add", "theorem", "type_le_iff'", ["ordinal"]], ["add", "theorem", "type_le_iff", ["ordinal"]], ["add", "theorem", "ordinal_type_lt", ["principal_seg"]], ["add", "theorem", "ordinal_type_le", ["rel_embedding"]]]}]}, {"timestamp": 1658334172, "sha": "5c882744", "message": "feat(set_theory/zfc): ZFC sets are small types (#15320)", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "func_mem", ["pSet"]]]}]}, {"timestamp": 1658334171, "sha": "6102220d", "message": "style(set_theory/ordinal/cantor_normal_form): rename hypotheses (#15229)\nWe rename hypotheses with names like `o0`, `b0`, and `b1` to more standard `ho` and `hb`.", "changes": [{"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": [["mod", "theorem", "CNF_foldr", ["ordinal"]], ["mod", "theorem", "CNF_lt_snd", ["ordinal"]], ["mod", "theorem", "CNF_ne_zero", ["ordinal"]], ["mod", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["mod", "theorem", "CNF_rec_zero", ["ordinal"]], ["mod", "theorem", "CNF_snd_lt", ["ordinal"]], ["mod", "theorem", "one_CNF", ["ordinal"]]]}]}, {"timestamp": 1658327563, "sha": "4b1c83f1", "message": "feat(data/pfun): tooling to help reasoning about pfun domains (#15313)\nTooling to help reasoning about pfun domains. Helps solving problems such as:\n```lean\n-- Informal: Find the domain of the function $g(x) = \\sqrt{x-2}$. Express your answer using intervals notation.\nexample :\n (pfun.sqrt.comp $ pfun.lift (λ x : ℝ, x - 2)).dom = set.Ici 2 :=\nbegin\n have h₀ : (pfun.sqrt).dom = set.Ici 0, { refl },\n simp only [pfun.lift_eq_coe, pfun.dom_comp],\n rw [h₀, pfun.coe_preimage],\n ext,\n simp only [set.preimage_sub_const_Ici, zero_add],\nend\n```", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "coe_preimage", ["pfun"]], ["add", "theorem", "dom_mk", ["pfun"]]]}]}, {"timestamp": 1658324143, "sha": "a1a1fbd7", "message": "feat(set_theory/zfc/basic): `⊆` is reflexive, transitive, antisymmetric (#15551)\nThis gives us access to the `subset_refl`, `subset_trans`, `subset_antisymm` lemmas defined elsewhere.", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": []}]}, {"timestamp": 1658324142, "sha": "7ee53e0f", "message": "chore(probability_mass_function/uniform): Move some constructions to a new file (#15500)\nMove uniform `pmf` constructions to a seperate file.", "changes": [{"oldPath": "src/probability/probability_mass_function/constructions.lean", "newPath": "src/probability/probability_mass_function/constructions.lean", "changes": [["del", "theorem", "mem_support_of_multiset_iff", ["pmf"]], ["del", "theorem", "mem_support_uniform_of_finset_iff", ["pmf"]], ["del", "theorem", "mem_support_uniform_of_fintype", ["pmf"]], ["del", "def", "of_multiset", ["pmf"]], ["del", "theorem", "of_multiset_apply", ["pmf"]], ["del", "theorem", "of_multiset_apply_of_not_mem", ["pmf"]], ["del", "theorem", "support_of_multiset", ["pmf"]], ["del", "theorem", "support_uniform_of_finset", ["pmf"]], ["del", "theorem", "support_uniform_of_fintype", ["pmf"]], ["del", "theorem", "to_measure_of_multiset_apply", ["pmf"]], ["del", "theorem", "to_measure_uniform_of_finset_apply", ["pmf"]], ["del", "theorem", "to_measure_uniform_of_fintype_apply", ["pmf"]], ["del", "theorem", "to_outer_measure_of_multiset_apply", ["pmf"]], ["del", "theorem", "to_outer_measure_uniform_of_finset_apply", ["pmf"]], ["del", "theorem", "to_outer_measure_uniform_of_fintype_apply", ["pmf"]], ["del", "def", "uniform_of_finset", ["pmf"]], ["del", "theorem", "uniform_of_finset_apply", ["pmf"]], ["del", "theorem", "uniform_of_finset_apply_of_mem", ["pmf"]], ["del", "theorem", "uniform_of_finset_apply_of_not_mem", ["pmf"]], ["del", "def", "uniform_of_fintype", ["pmf"]], ["del", "theorem", "uniform_of_fintype_apply", ["pmf"]]]}, {"oldPath": null, "newPath": "src/probability/probability_mass_function/uniform.lean", "changes": [["add", "theorem", "mem_support_of_multiset_iff", ["pmf"]], ["add", "theorem", "mem_support_uniform_of_finset_iff", ["pmf"]], ["add", "theorem", "mem_support_uniform_of_fintype", ["pmf"]], ["add", "def", "of_multiset", ["pmf"]], ["add", "theorem", "of_multiset_apply", ["pmf"]], ["add", "theorem", "of_multiset_apply_of_not_mem", ["pmf"]], ["add", "theorem", "support_of_multiset", ["pmf"]], ["add", "theorem", "support_uniform_of_finset", ["pmf"]], ["add", "theorem", "support_uniform_of_fintype", ["pmf"]], ["add", "theorem", "to_measure_of_multiset_apply", ["pmf"]], ["add", "theorem", "to_measure_uniform_of_finset_apply", ["pmf"]], ["add", "theorem", "to_measure_uniform_of_fintype_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_of_multiset_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_uniform_of_finset_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_uniform_of_fintype_apply", ["pmf"]], ["add", "def", "uniform_of_finset", ["pmf"]], ["add", "theorem", "uniform_of_finset_apply", ["pmf"]], ["add", "theorem", "uniform_of_finset_apply_of_mem", ["pmf"]], ["add", "theorem", "uniform_of_finset_apply_of_not_mem", ["pmf"]], ["add", "def", "uniform_of_fintype", ["pmf"]], ["add", "theorem", "uniform_of_fintype_apply", ["pmf"]]]}]}, {"timestamp": 1658315098, "sha": "40e77914", "message": "feat(set_theory/zfc/basic): add `refl`, `symm`, `trans` attributes to `equiv` lemmas (#15549)", "changes": [{"oldPath": "src/set_theory/zfc/basic.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": []}]}, {"timestamp": 1658315097, "sha": "e2e097cc", "message": "refactor(data/nat/part_enat): move `complete_linear_order` instance (#15543)", "changes": [{"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/part_enat.lean", "newPath": "src/data/nat/part_enat.lean", "changes": []}]}, {"timestamp": 1658315095, "sha": "327259af", "message": "refactor(data/dfinsupp/basic): Improve definitional equalities of coercions (#15521)\nThis means that `dfinsupp.coe_add` etc are true by definition, rather than requiring the application of `quotient.induction` first.\nThe key change is that the underlying function is no longer \"hidden\" under the quotient, as it does not need to be.\nOne motivation for this is to make the API more similar to that of `finsupp`.\nThis change eliminates `dfinsupp.pre`, instead using `{s : multiset ι // ∀ i, i ∈ s ∨ to_fun i = 0}` directly.\nWe no longer even need to create a `setoid` instance, since we can just use `trunc`.\nWhile adjusting some proofs in `data/finsupp/interval` to use the new definition, this ended up eliminating some decidable arguments. I don't think that is a consequence of this redefinition, and is incidental cleanup that could have been performed separately.", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": [["mod", "theorem", "add_apply", ["direct_sum"]], ["mod", "theorem", "sub_apply", ["direct_sum"]]]}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["add", "theorem", "coe_mk'", ["dfinsupp"]], ["del", "theorem", "coe_pre_mk", ["dfinsupp"]], ["mod", "theorem", "coe_update", ["dfinsupp"]], ["add", "def", "comap_domain'", ["dfinsupp"]], ["del", "def", "comap_domain'[Π", ["dfinsupp"]], ["mod", "def", "erase", ["dfinsupp"]], ["mod", "def", "extend_with", ["dfinsupp"]], ["mod", "def", "filter", ["dfinsupp"]], ["mod", "def", "map_range", ["dfinsupp"]], ["del", "structure", "pre", ["dfinsupp"]], ["mod", "def", "subtype_domain", ["dfinsupp"]], ["add", "theorem", "support_mk'_subset", ["dfinsupp"]], ["mod", "theorem", "support_update_ne_zero", ["dfinsupp"]], ["add", "theorem", "to_fun_eq_coe", ["dfinsupp"]], ["mod", "theorem", "update_eq_erase", ["dfinsupp"]], ["mod", "theorem", "update_self", ["dfinsupp"]], ["mod", "def", "zip_with", ["dfinsupp"]], ["add", "structure", "dfinsupp", []], ["del", "def", "dfinsupp", []]]}, {"oldPath": "src/data/dfinsupp/interval.lean", "newPath": "src/data/dfinsupp/interval.lean", "changes": [["mod", "theorem", "support_range_Icc_subset", ["dfinsupp"]]]}, {"oldPath": "src/data/dfinsupp/order.lean", "newPath": "src/data/dfinsupp/order.lean", "changes": []}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": []}]}, {"timestamp": 1658315094, "sha": "dcb4b68a", "message": "feat(category_theory/shapes/pullbacks): Pullbacks isomorphic to the opposite of pushouts (#15455)", "changes": [{"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "def", "pullback_iso_unop_pushout", ["category_theory", "limits"]], ["add", "theorem", "pullback_iso_unop_pushout_hom_inl", ["category_theory", "limits"]], ["add", "theorem", "pullback_iso_unop_pushout_hom_inr", ["category_theory", "limits"]], ["add", "theorem", "pullback_iso_unop_pushout_inv_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_iso_unop_pushout_inv_snd", ["category_theory", "limits"]], ["add", "def", "pushout_iso_unop_pullback", ["category_theory", "limits"]], ["add", "theorem", "pushout_iso_unop_pullback_inl_hom", ["category_theory", "limits"]], ["add", "theorem", "pushout_iso_unop_pullback_inr_hom", ["category_theory", "limits"]], ["add", "theorem", "pushout_iso_unop_pullback_inv_fst", ["category_theory", "limits"]], ["add", "theorem", "pushout_iso_unop_pullback_inv_snd", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "fst_colimit_cocone", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "snd_colimit_cocone", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "π_app_left", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "π_app_right", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "inl_colimit_cocone", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "inr_colimit_cocone", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "ι_app_left", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "ι_app_right", ["category_theory", "limits", "pushout_cocone"]]]}]}, {"timestamp": 1658315093, "sha": "4359e481", "message": "feat(field_theory/intermediate_field): `dsimp` lemma (#15188)", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_map", ["intermediate_field"]]]}]}, {"timestamp": 1658315092, "sha": "edaaaa4a", "message": "feat(combinatorics/simple_graph/trails): Euler's condition for trails (#15158)\nAdds theory for trails and Eulerian trails and proves that Eulerian trails imply a condition on vertex degrees.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "incidence_finset_eq_filter", ["simple_graph"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/trails.lean", "changes": [["add", "theorem", "card_filter_odd_degree", ["simple_graph", "walk", "is_eulerian"]], ["add", "theorem", "card_odd_degree", ["simple_graph", "walk", "is_eulerian"]], ["add", "theorem", "edges_finset_eq", ["simple_graph", "walk", "is_eulerian"]], ["add", "theorem", "even_degree_iff", ["simple_graph", "walk", "is_eulerian"]], ["add", "def", "fintype_edge_set", ["simple_graph", "walk", "is_eulerian"]], ["add", "theorem", "is_trail", ["simple_graph", "walk", "is_eulerian"]], ["add", "theorem", "mem_edges_iff", ["simple_graph", "walk", "is_eulerian"]], ["add", "def", "is_eulerian", ["simple_graph", "walk"]], ["add", "theorem", "is_eulerian_iff", ["simple_graph", "walk"]], ["add", "def", "edges_finset", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "even_countp_edges_iff", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "is_eulerian_of_forall_mem", ["simple_graph", "walk", "is_trail"]]]}]}, {"timestamp": 1658306331, "sha": "261c24c6", "message": "feat(data/nat/factorization/basic): add lemma `factorization_eq_card_pow_dvd` (#15014)\nAdds lemma \n`factorization_eq_card_pow_dvd (pp : p.prime) : n.factorization p = ((Ico 1 n).filter (λ i, p ^ i ∣ n)).card`\nThis is a counterpart to `multiplicity_eq_card_pow_dvd` defined and proved in terms of `factorization`.\nAlso proves some upper bounds on `n.factorization p`:\n`factorization_lt (hn : n ≠ 0) : n.factorization p < n`\n`factorization_le_of_le_pow (hb : n ≤ p ^ b) : n.factorization p ≤ b`", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "Icc_factorization_eq_pow_dvd", ["nat"]], ["add", "theorem", "Ico_filter_pow_dvd_eq", ["nat"]], ["add", "theorem", "factorization_eq_card_pow_dvd", ["nat"]], ["add", "theorem", "factorization_le_of_le_pow", ["nat"]], ["add", "theorem", "factorization_lt", ["nat"]], ["add", "theorem", "set_of_pow_dvd_eq_Icc_factorization", ["nat"]]]}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": [["add", "theorem", "lt_of_pow_dvd_right", ["nat"]]]}]}, {"timestamp": 1658302874, "sha": "ffc640f4", "message": "feat(ring_theory/derivation): Derivations into square-zero ideals corresponds to liftings. (#15244)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "def", "derivation_to_square_zero_equiv_lift", []], ["add", "def", "derivation_to_square_zero_of_lift", []], ["add", "theorem", "derivation_to_square_zero_of_lift_apply", []], ["add", "def", "diff_to_ideal_of_quotient_comp_eq", []], ["add", "theorem", "diff_to_ideal_of_quotient_comp_eq_apply", []], ["add", "def", "lift_of_derivation_to_square_zero", []], ["add", "theorem", "lift_of_derivation_to_square_zero_apply", []], ["add", "theorem", "lift_of_derivation_to_square_zero_mk_apply", []]]}]}, {"timestamp": 1658297095, "sha": "73e41c24", "message": "feat(analysis/inner_product_space/[pi_L2, l2_space]): compute inner product in a given [orthonormal, hilbert] basis (#15514)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}]}, {"timestamp": 1658287453, "sha": "be93cace", "message": "feat(data/list): accessing list with fallback (#15138)\nReimplement `list.inth` in terms of the new `list.nthd`. Implementation wise, it is \"faster\" because it doesn't have to go through `option.iget` on the way anymore.\nOn the way to computable list-based polynomials", "changes": [{"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": [["add", "theorem", "list_nthd", ["primrec"]]]}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "def", "decidable_nthd_nil_ne", ["list"]], ["add", "theorem", "inth_append", ["list"]], ["add", "theorem", "inth_append_right", ["list"]], ["add", "theorem", "inth_cons_succ", ["list"]], ["add", "theorem", "inth_cons_zero", ["list"]], ["add", "theorem", "inth_eq_default", ["list"]], ["add", "theorem", "inth_eq_iget_nth", ["list"]], ["add", "theorem", "inth_eq_nth_le", ["list"]], ["add", "theorem", "inth_nil", ["list"]], ["add", "theorem", "nthd_append", ["list"]], ["add", "theorem", "nthd_append_right", ["list"]], ["add", "theorem", "nthd_cons_succ", ["list"]], ["add", "theorem", "nthd_cons_zero", ["list"]], ["add", "theorem", "nthd_default_eq_inth", ["list"]], ["add", "theorem", "nthd_eq_default", ["list"]], ["add", "theorem", "nthd_eq_get_or_else_nth", ["list"]], ["add", "theorem", "nthd_eq_nth_le", ["list"]], ["add", "theorem", "nthd_nil", ["list"]], ["add", "theorem", "nthd_repeat_default_eq", ["list"]], ["add", "theorem", "nthd_singleton_default_eq", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["mod", "def", "inth", ["list"]], ["add", "def", "nthd", ["list"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "get_or_else_default_eq_iget", ["option"]]]}]}, {"timestamp": 1658281637, "sha": "c31b1f3d", "message": "chore(topology/algebra): cleanup (#15301)\n* Drop instances about `sub*.topological_closure`. Normal `sub*` instances apply.\n* Add `units.inducing_embed_product` and `units.embedding_embed_product`.\n* Add `inducing.has_continuous_mul`, `inducing.has_continuous_inv`, and `inducing.topological_group`.\n* Use new lemmas to golf some instances.\n* Don't use `section .. variables` for assumptions that are used only once.\n* Reuse `topological_group_inf`, `topological_group_Inf` in `group_topology.has_inf`, `group_topology.has_Inf`.", "changes": [{"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": []}, {"oldPath": "src/topology/algebra/constructions.lean", "newPath": "src/topology/algebra/constructions.lean", "changes": [["add", "theorem", "embedding_embed_product", ["units"]], ["add", "theorem", "inducing_embed_product", ["units"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "has_continuous_inv_Inf", []], ["mod", "theorem", "has_continuous_inv_inf", []], ["mod", "theorem", "has_continuous_inv_infi", []], ["add", "theorem", "has_continuous_inv", ["inducing"]], ["mod", "theorem", "topological_group_Inf", []], ["del", "theorem", "topological_group_induced", []], ["mod", "theorem", "topological_group_inf", []], ["mod", "theorem", "topological_group_infi", []]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["mod", "theorem", "has_continuous_mul_Inf", []], ["mod", "theorem", "has_continuous_mul_induced", []], ["mod", "theorem", "has_continuous_mul_inf", []], ["mod", "theorem", "has_continuous_mul_infi", []], ["add", "theorem", "has_continuous_mul", ["inducing"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1658281636, "sha": "7059323d", "message": "feat(set_theory/zfc/ordinal): transitive sets (#15288)\nWe define transitive sets, as an initial development towards von Neumann ordinals.", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc/basic.lean", "changes": [["add", "theorem", "mem_sUnion_of_mem", ["Set"]]]}, {"oldPath": null, "newPath": "src/set_theory/zfc/ordinal.lean", "changes": [["add", "theorem", "sUnion", ["Set", "is_transitive"]], ["add", "theorem", "subset_of_mem", ["Set", "is_transitive"]], ["add", "def", "is_transitive", ["Set"]], ["add", "theorem", "is_transitive_iff_mem_trans", ["Set"]], ["add", "theorem", "is_transitive_iff_sUnion_subset", ["Set"]], ["add", "theorem", "is_transitive_iff_subset_powerset", ["Set"]]]}]}, {"timestamp": 1658273276, "sha": "54cb8484", "message": "refactor(data/set/countable): rename some lemmas (#15527)\n* `set.countable_iff_exists_surjective` -> `set.countable_iff_exists_subset_range`;\n* `set.countable_iff_exists_surjective_to_subtype` -> `set.countable_iff_exists_surjective`;\n* `set.countable.exists_surjective` -> `set.countable.exists_eq_range`.", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "exists_eq_range", ["set", "countable"]], ["del", "theorem", "exists_surjective", ["set", "countable"]], ["add", "theorem", "countable_iff_exists_subset_range", ["set"]], ["del", "theorem", "countable_iff_exists_surjective_to_subtype", ["set"]]]}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": []}, {"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}]}, {"timestamp": 1658273275, "sha": "df2ebcff", "message": "feat(logic/encodable/basic): an encodable type is countable (#15524)\nAlso simplify `nonempty (encodable X)` to `countable X`.", "changes": [{"oldPath": "src/logic/encodable/basic.lean", "newPath": "src/logic/encodable/basic.lean", "changes": [["add", "theorem", "nonempty_encodable", ["encodable"]]]}]}, {"timestamp": 1658273274, "sha": "cfc157d3", "message": "chore(analysis/locally_convex/with_seminorms): change `with_seminorms` to a structure (#15388)\nChange the class `with_seminorms` into a `structure`. The typeclass was useless in the first case since it can be only infered in trivial cases. Now it is somehow similar to how `has_basis` behaves.", "changes": [{"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": [["add", "theorem", "weak_bilin_with_seminorms", ["linear_map"]]]}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["del", "theorem", "is_vonN_bounded_iff_finset_seminorm_bounded", ["bornology"]], ["mod", "theorem", "is_vonN_bounded_iff_seminorm_bounded", ["bornology"]], ["add", "theorem", "norm_with_seminorms", []], ["mod", "theorem", "continuous_from_bounded", ["seminorm"]], ["del", "theorem", "has_basis", ["seminorm_family"]], ["mod", "theorem", "to_locally_convex_space", ["seminorm_family"]], ["mod", "theorem", "with_seminorms_eq", ["seminorm_family"]], ["add", "theorem", "has_basis", ["with_seminorms"]], ["add", "theorem", "is_vonN_bounded_iff_finset_seminorm_bounded", ["with_seminorms"]], ["add", "structure", "with_seminorms", []]]}]}, {"timestamp": 1658273273, "sha": "71786433", "message": "feat(tactic/linear_combination): allow linear_combination to leave goal open (#15319)\nPreviously, `linear_combination` was a finishing tactic: it would close the goal, or fail. \nThis PR changes it to be more of a simplification tactic. The semantics are \"subtract this linear combination from the goal and normalize.\" In the case where the linear combination *does* close the goal, this behavior is the same as before.\nThis is a very convenient way to see what's missing from your linear combination. I imagine that people will often look at the remaining expression and modify the combination until the goal is closed.\nBy request of @hrmacbeth the default normalizer is `ring SOP`.\ncc @digama0", "changes": [{"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": [["add", "theorem", "eq_zero_of_sub_eq_zero", ["linear_combo"]]]}, {"oldPath": "src/tactic/polyrith.lean", "newPath": "src/tactic/polyrith.lean", "changes": []}, {"oldPath": "test/linear_combination.lean", "newPath": "test/linear_combination.lean", "changes": []}]}, {"timestamp": 1658264950, "sha": "2220b0cb", "message": "chore(data/buffer/parser/numeral): new int and rat parsers don't need to be meta (#15535)", "changes": [{"oldPath": "src/data/buffer/parser/numeral.lean", "newPath": "src/data/buffer/parser/numeral.lean", "changes": [["add", "def", "int", ["parser"]], ["add", "def", "rat", ["parser"]]]}]}, {"timestamp": 1658264949, "sha": "3c33aba3", "message": "ci(.github/workflows/*): Make build step fail if lean returns nonzero value (#15520)\nCurrently, when building mathlib, if the second `lean --make src` returns a nonzero value, say due to an out-of-memory error, this value will be masked by the pipe, causing the build step to appear to succeed. The problem will then show up down the line, say in linting. This bit us in lean-liquid.\nThis change causes the build step to fail if the `lean --make` command fails.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1658264948, "sha": "3788b073", "message": "refactor(logic/equiv/nat): remove `equiv.nat_prod_nat_equiv_nat` (#15509)\nThis is a duplicate of `nat.mkpair_equiv`.", "changes": [{"oldPath": "src/data/countable/basic.lean", "newPath": "src/data/countable/basic.lean", "changes": []}, {"oldPath": "src/logic/equiv/nat.lean", "newPath": "src/logic/equiv/nat.lean", "changes": [["del", "def", "nat_prod_nat_equiv_nat", ["equiv"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}]}, {"timestamp": 1658264947, "sha": "4d352641", "message": "feat(ring_theory/valuation): Properties of valuation rings. (#15093)", "changes": [{"oldPath": "src/ring_theory/valuation/valuation_ring.lean", "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": [["add", "theorem", "valuation_ring", ["function", "surjective"]], ["add", "theorem", "dvd_total", ["valuation_ring"]], ["add", "theorem", "iff_dvd_total", ["valuation_ring"]], ["add", "theorem", "iff_ideal_total", ["valuation_ring"]], ["add", "theorem", "iff_is_integer_or_is_integer", ["valuation_ring"]], ["add", "theorem", "iff_local_bezout_domain", ["valuation_ring"]], ["add", "theorem", "is_integer_or_is_integer", ["valuation_ring"]], ["add", "theorem", "unique_irreducible", ["valuation_ring"]]]}]}, {"timestamp": 1658255296, "sha": "7c916a69", "message": "feat(set_theory/ordinal/arithmetic): `pred 0 = 0` (#15533)", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "pred_eq_iff_not_succ'", ["ordinal"]], ["add", "theorem", "pred_zero", ["ordinal"]]]}]}, {"timestamp": 1658255295, "sha": "be6a4082", "message": "chore(probability/probability_mass_function): move folder into probability (#15525)", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/probability/probability_mass_function/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/probability/probability_mass_function/constructions.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/monad.lean", "newPath": "src/probability/probability_mass_function/monad.lean", "changes": []}]}, {"timestamp": 1658255294, "sha": "df5297aa", "message": "feat(data/list/basic): when drop_while and take_while hold (#15472)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "drop_while_eq_nil_iff", ["list"]], ["add", "theorem", "drop_while_nth_le_zero_not", ["list"]], ["add", "theorem", "mem_take_while_imp", ["list"]], ["add", "theorem", "take_while_eq_nil_iff", ["list"]], ["add", "theorem", "take_while_eq_self_iff", ["list"]], ["add", "theorem", "take_while_idem", ["list"]], ["add", "theorem", "take_while_take_while", ["list"]]]}]}, {"timestamp": 1658255293, "sha": "5306f2df", "message": "refactor(algebra/punit_instances): Move order instances (#15465)\nThe location of those instances means that order files need to pull out a bunch of algebra to use the (trivial) order structures on `punit`. This moves the `complete_boolean_algebra` instance to `order.complete_boolean_algebra` and splits off the `boolean_algebra` and `linear_order` instances.", "changes": [{"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": [["del", "theorem", "Inf_eq", ["punit"]], ["del", "theorem", "Sup_eq", ["punit"]], ["del", "theorem", "bot_eq", ["punit"]], ["del", "theorem", "compl_eq", ["punit"]], ["del", "theorem", "inf_eq", ["punit"]], ["del", "theorem", "not_lt", ["punit"]], ["del", "theorem", "sdiff_eq", ["punit"]], ["del", "theorem", "sup_eq", ["punit"]], ["del", "theorem", "top_eq", ["punit"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "max_eq", ["punit"]], ["add", "theorem", "min_eq", ["punit"]], ["add", "theorem", "not_lt", ["punit"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "bot_eq", ["punit"]], ["add", "theorem", "compl_eq", ["punit"]], ["add", "theorem", "inf_eq", ["punit"]], ["add", "theorem", "sdiff_eq", ["punit"]], ["add", "theorem", "sup_eq", ["punit"]], ["add", "theorem", "top_eq", ["punit"]]]}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "Inf_eq", ["punit"]], ["add", "theorem", "Sup_eq", ["punit"]]]}]}, {"timestamp": 1658255292, "sha": "6e8c150a", "message": "feat(data/nat/basic): add recursion principle `even_odd_rec` as a wrapper around `binary_rec` (#15457)\nThis is just a wrapper around `nat.binary_rec`, so that the subsequent reasoning after invoking this recursion principle can remain in the familiar world of `ℕ` and avoids having to switch to dealing with `bit0` and `bit1`.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "even_odd_rec", ["nat"]], ["add", "theorem", "even_odd_rec_even", ["nat"]], ["add", "theorem", "even_odd_rec_odd", ["nat"]], ["add", "theorem", "even_odd_rec_zero", ["nat"]]]}]}, {"timestamp": 1658255291, "sha": "5e114a3e", "message": "feat(set_theory/ordinal/arithmetic): more log lemmas (#15447)\nWe prove a bunch of lemmas on the ordinal logarithm that are relevant for Cantor normal forms.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "div_opow_log_lt", ["ordinal"]], ["add", "theorem", "div_pos", ["ordinal"]], ["add", "theorem", "log_eq_zero", ["ordinal"]], ["add", "theorem", "log_mod_opow_log_lt_log_self", ["ordinal"]], ["mod", "theorem", "log_opow", ["ordinal"]], ["add", "theorem", "log_pos", ["ordinal"]], ["mod", "theorem", "lt_div", ["ordinal"]]]}]}, {"timestamp": 1658255290, "sha": "9137502f", "message": "chore(topology/uniform_space/basic): rename `symmetric_rel_inter` to `symmetric_rel.inter` (#15441)\nAlso add `symmetric_rel.eq`", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "eq", ["symmetric_rel"]], ["add", "theorem", "inter", ["symmetric_rel"]], ["del", "theorem", "symmetric_rel_inter", []]]}]}, {"timestamp": 1658255289, "sha": "65a44e6f", "message": "feat(analysis/normed_space/operator_norm): add 2 new versions of `op_norm_le_*` (#15417)\n* `continuous_linear_map.op_norm_le_bound'` requires an estimate on\n `∥f x∥` for any `x`, `∥x∥ ≠ 0`;\n* `continuous_linear_map.op_norm_le_of_unit_norm` works only for real\n linear map and requires that `∥f x∥ ≤ C` for all `x`, `∥x∥ = 1`.", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_nnnorm_le_bound'", ["continuous_linear_map"]], ["add", "theorem", "op_nnnorm_le_of_unit_nnnorm", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_bound'", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_of_unit_norm", ["continuous_linear_map"]]]}]}, {"timestamp": 1658255288, "sha": "86597b31", "message": "doc(set_theory/game/nim): update module docs (#15406)\nWe update the module docs to reflect that you should use `to_left_moves_nim` and `to_right_moves_nim` to interface with the nim API, instead of using the raw definition (which has the problems the old docs mentioned).", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}]}, {"timestamp": 1658255287, "sha": "d3051b17", "message": "feat(order/initial_seg): remove `nolint` from `initial_seg` (#15374)", "changes": [{"oldPath": "src/order/initial_seg.lean", "newPath": "src/order/initial_seg.lean", "changes": []}]}, {"timestamp": 1658255286, "sha": "f73befff", "message": "feat(algebra/order/monoid): add lemmas `map_add` for `with_bot/top` (#15300)\nThis PR shows that a map that preserves addition on a type with addition, also preserves addition on `with_bot/top`.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}]}, {"timestamp": 1658255285, "sha": "101555b1", "message": "refactor(data/real/ennreal): redefine `ennreal.to_nnreal` in terms of `with_top.untop'` (#15247)\n* redefine `ennreal.to_nnreal` as `with_top.untop' 0`;\n* use lambda function instead of `id` for identity coercions of `nat` and `int`;\n* move `with_top.add_monoid_with_one` and `with_bot.add_monoid_with_one` to `algebra.order.monoid`, add commutative version;\n* generalize `ennreal.to_nnreal_mul` to `with_top`.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "untop'_zero_mul", ["with_top"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "to_nnreal_mul_top", ["ennreal"]], ["mod", "theorem", "to_nnreal_top_mul", ["ennreal"]]]}]}, {"timestamp": 1658255284, "sha": "93fbab6d", "message": "feat(data/finsupp/big_operators): sum of finsupp and their support (#15155)\nWith some additional API for pairwise on multisets and coerced lists\nOn the way to computable list-based polynomials", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_val", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_finset_coe", ["list"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "foldr_inf_eq_inf_to_finset", ["list"]], ["add", "theorem", "foldr_sup_eq_sup_to_finset", ["list"]]]}, {"oldPath": "src/data/finset/pairwise.lean", "newPath": "src/data/finset/pairwise.lean", "changes": [["add", "theorem", "pairwise_disjoint_iff_coe_to_finset_pairwise_disjoint", ["list"]], ["add", "theorem", "pairwise_disjoint_of_coe_to_finset_pairwise_disjoint", ["list"]], ["add", "theorem", "pairwise_iff_coe_to_finset_pairwise", ["list"]], ["add", "theorem", "pairwise_of_coe_to_finset_pairwise", ["list"]]]}, {"oldPath": null, "newPath": "src/data/finsupp/big_operators.lean", "changes": [["add", "theorem", "mem_sup_support_iff", ["finset"]], ["add", "theorem", "support_sum_eq", ["finset"]], ["add", "theorem", "support_sum_subset", ["finset"]], ["add", "theorem", "mem_foldr_sup_support_iff", ["list"]], ["add", "theorem", "support_sum_eq", ["list"]], ["add", "theorem", "support_sum_subset", ["list"]], ["add", "theorem", "mem_sup_map_support_iff", ["multiset"]], ["add", "theorem", "support_sum_eq", ["multiset"]], ["add", "theorem", "support_sum_subset", ["multiset"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "perm", ["list", "pairwise"]], ["add", "theorem", "pairwise", ["list", "perm"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "pairwise_coe_iff", ["multiset"]], ["add", "theorem", "pairwise_nil", ["multiset"]]]}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": [["add", "theorem", "inf_coe", ["multiset"]], ["add", "theorem", "sup_coe", ["multiset"]]]}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}]}, {"timestamp": 1658255283, "sha": "2ee2bae0", "message": "chore({algebra,data/rat}): use forgetful inheritance for `algebra_rat` (#14894)\nThroughout mathlib we've been struggling with diamonds arising from the `algebra_rat [division_ring K] [char_zero K] : algebra ℚ K` instance: since this instance provided its own inclusion map `to_fun : ℚ → K` and scalar multiplication by rationals `smul : ℚ → K → K`, it would not be definitionally equal to other instances such as `algebra.id`, and we'd need tactics like `convert` to deal with this inequality.\nFollowing the previous `nsmul` and `zmul` refactors, this PR applies the forgetful inheritance pattern to the `algebra_rat` instance, allowing you to supply a definitionally convenient value for the conflicting `to_fun` and `smul` fields as the fields `of_rat` and `qsmul` in the `division_ring K` instance. `of_rat` is used to define the coercion `ℚ → K` (in the instance `rat.cast_coe`), whic is used to define the map `rat.cast_hom : ℚ →+* K`, which is used along with `qsmul` to define `algebra_rat`.\nA default value for `of_rat` and `qsmul` and coherence proofs are provided using the `opt_param`/`auto_param` mechanism, just like for `nsmul` and `zsmul`.\nI have included a test after the definition of `algebra_rat`, to ensure definitional equality with `algebra.id`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["add", "def", "qsmul_rec", []], ["add", "theorem", "cast_def", ["rat"]], ["add", "theorem", "cast_mk'", ["rat"]], ["add", "def", "cast_rec", ["rat"]], ["add", "theorem", "smul_def", ["rat"]]]}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": [["add", "theorem", "int_cast_down", ["ulift"]], ["add", "theorem", "nat_cast_down", ["ulift"]]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": [["add", "theorem", "rat_cast_down", ["ulift"]]]}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "coe_rat_cast", ["self_adjoint"]], ["add", "theorem", "coe_rat_smul", ["self_adjoint"]], ["add", "theorem", "mul_mem", ["self_adjoint"]], ["add", "theorem", "rat_cast_mem", ["self_adjoint"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["del", "theorem", "cast_def", ["rat"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "coe_rat_cast", ["subfield_class"]], ["add", "theorem", "coe_rat_mem", ["subfield_class"]], ["add", "theorem", "coe_rat_smul", ["subfield_class"]], ["add", "theorem", "rat_smul_mem", ["subfield_class"]]]}, {"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": []}, {"oldPath": "src/topology/instances/irrational.lean", "newPath": "src/topology/instances/irrational.lean", "changes": []}]}, {"timestamp": 1658255282, "sha": "5797ef5c", "message": "feat(algebraic_topology): alternating_coface_map_complex (#14588)\nThis PR constructs the alternating coface map complex of a cosimplicial object in an additive category. This construction is dual to the alternating face map complex.", "changes": [{"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": [["add", "theorem", "d_eq_unop_d", ["algebraic_topology", "alternating_coface_map_complex"]], ["add", "theorem", "d_squared", ["algebraic_topology", "alternating_coface_map_complex"]], ["add", "def", "map", ["algebraic_topology", "alternating_coface_map_complex"]], ["add", "def", "obj", ["algebraic_topology", "alternating_coface_map_complex"]], ["add", "def", "obj_d", ["algebraic_topology", "alternating_coface_map_complex"]], ["add", "def", "alternating_coface_map_complex", ["algebraic_topology"]]]}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "cosimplicial_simplicial_equiv", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive/opposite.lean", "newPath": "src/category_theory/preadditive/opposite.lean", "changes": [["add", "def", "op_hom", ["category_theory"]], ["add", "theorem", "op_neg", ["category_theory"]], ["add", "theorem", "op_sum", ["category_theory"]], ["add", "theorem", "op_zsmul", ["category_theory"]], ["add", "def", "unop_hom", ["category_theory"]], ["add", "theorem", "unop_neg", ["category_theory"]], ["add", "theorem", "unop_sum", ["category_theory"]], ["add", "theorem", "unop_zsmul", ["category_theory"]]]}]}, {"timestamp": 1658245639, "sha": "48c6cc31", "message": "feat(data/polynomial/degree/lemmas): three lemmas on nat_degrees, bits and neg (#15522)\nThese three lemmas are used in #14762, to help the tactic `compute_degree_le`.", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "nat_degree_bit0", ["polynomial"]], ["add", "theorem", "nat_degree_bit1", ["polynomial"]], ["add", "theorem", "nat_degree_sub_le_iff_left", ["polynomial"]]]}]}, {"timestamp": 1658245637, "sha": "35639363", "message": "feat(field_theory/adjoin): `intermediate_field.exists_finset_of_mem_supr` (#15518)\nThis PR adds a lemma stating that an element of a compositum of intermediate fields lies in a finite compositum.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "exists_finset_of_mem_supr", ["intermediate_field"]]]}]}, {"timestamp": 1658245636, "sha": "c55cadbc", "message": "chore(order/upper_lower): fix typo (#15517)", "changes": [{"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "Ici_le_Ioi", ["upper_set"]], ["del", "theorem", "Icoi_le_Ioi", ["upper_set"]]]}]}, {"timestamp": 1658245635, "sha": "d6655353", "message": "chore(set_theory/game/nim): reorder lemmas (#15516)\nWe move the most basic API for `nim` to the beginning of the file. This was causing trouble in another PR, where I wanted to prove basic properties of `nim 1` alongside those of `nim 0` but couldn't because of this missing API.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}]}, {"timestamp": 1658245632, "sha": "fd7796a1", "message": "chore(logic/equiv): improve defeq and/or simp lemmas about some equivs (#15511)", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["mod", "def", "bool_prod_equiv_sum", ["equiv"]]]}, {"oldPath": "src/logic/equiv/nat.lean", "newPath": "src/logic/equiv/nat.lean", "changes": [["mod", "def", "bool_prod_nat_equiv_nat", ["equiv"]], ["mod", "def", "nat_sum_nat_equiv_nat", ["equiv"]], ["add", "theorem", "nat_sum_nat_equiv_nat_apply", ["equiv"]]]}]}, {"timestamp": 1658245631, "sha": "72eaefff", "message": "feat(data/pnat/basic): add lemmas, move `equiv.pnat_equiv_nat` (#15508)\n* Add lemmas about `pnat.nat_pred` and `nat.succ_pnat`.\n* Use `derive` for `pnat.linear_order`.\n* Move `equiv.pnat_equiv_nat` to `data/pnat/basic`.\n* Use it in `order_iso.pnat_iso_nat` (renamed from `pnat.succ_order_iso`, swaped LHS with RHS).\n* Golf some proofs.", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "def", "pnat_equiv_nat", ["equiv"]], ["add", "theorem", "nat_pred_succ_pnat", ["nat"]], ["mod", "theorem", "succ_pnat_inj", ["nat"]], ["add", "theorem", "succ_pnat_injective", ["nat"]], ["add", "theorem", "succ_pnat_le_succ_pnat", ["nat"]], ["add", "theorem", "succ_pnat_lt_succ_pnat", ["nat"]], ["add", "theorem", "succ_pnat_mono", ["nat"]], ["add", "theorem", "succ_pnat_strict_mono", ["nat"]], ["add", "def", "pnat_iso_nat", ["order_iso"]], ["add", "theorem", "pnat_iso_nat_symm_apply", ["order_iso"]], ["mod", "theorem", "coe_eq_one_iff", ["pnat"]], ["mod", "theorem", "le_one_iff", ["pnat"]], ["mod", "theorem", "lt_add_left", ["pnat"]], ["mod", "theorem", "lt_add_right", ["pnat"]], ["mod", "def", "nat_pred", ["pnat"]], ["mod", "theorem", "nat_pred_add_one", ["pnat"]], ["mod", "theorem", "nat_pred_eq_pred", ["pnat"]], ["add", "theorem", "nat_pred_inj", ["pnat"]], ["add", "theorem", "nat_pred_injective", ["pnat"]], ["add", "theorem", "nat_pred_le_nat_pred", ["pnat"]], ["add", "theorem", "nat_pred_lt_nat_pred", ["pnat"]], ["add", "theorem", "nat_pred_monotone", ["pnat"]], ["add", "theorem", "nat_pred_strict_mono", ["pnat"]], ["mod", "theorem", "one_add_nat_pred", ["pnat"]], ["del", "def", "succ_order_iso", ["pnat"]], ["add", "theorem", "succ_pnat_nat_pred", ["pnat"]]]}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": [["mod", "theorem", "is_reduced_iff", ["pnat", "xgcd_type"]]]}, {"oldPath": "src/logic/equiv/nat.lean", "newPath": "src/logic/equiv/nat.lean", "changes": [["del", "def", "pnat_equiv_nat", ["equiv"]]]}]}, {"timestamp": 1658245629, "sha": "8f000ca2", "message": "feat(analysis/special_functions/exp): add lemmas about `is_o`/`is_O`/`is_Theta` (#15506)\nAdd lemmas about asymptotic comparison of `exp (f x)` and `exp (g x)`.", "changes": [{"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "is_O_exp_comp_exp_comp", ["real"]], ["add", "theorem", "is_O_exp_comp_one", ["real"]], ["mod", "theorem", "is_O_one_exp_comp", ["real"]], ["add", "theorem", "is_Theta_exp_comp_exp_comp", ["real"]], ["add", "theorem", "is_Theta_exp_comp_one", ["real"]], ["mod", "theorem", "is_bounded_under_ge_exp_comp", ["real"]], ["mod", "theorem", "is_bounded_under_le_exp_comp", ["real"]], ["add", "theorem", "is_o_exp_comp_exp_comp", ["real"]], ["add", "theorem", "is_o_one_exp_comp", ["real"]], ["mod", "theorem", "tendsto_comp_exp_at_bot", ["real"]], ["mod", "theorem", "tendsto_comp_exp_at_top", ["real"]], ["mod", "theorem", "tendsto_exp_comp_at_top", ["real"]], ["add", "theorem", "tendsto_exp_comp_nhds_zero", ["real"]]]}]}, {"timestamp": 1658235958, "sha": "b2af6ee9", "message": "feat(tactic/ext): don't remove attr (#15502)\nIn #8785 the ext attribute was changed to try to remove itself after it is applied, unfortunately this is not possible however.\nThe command `unset_attribute` is not persistent, as seen in https://github.com/leanprover-community/lean/blob/bf12a6c9b74846b532a248617eae692d2c13f18b/src/library/tactic/user_attribute.cpp#L365.\nThis means that even though it appears that a declaration doesn't have the `ext` attribute when `#print`ed immediately after, the attribute reappears after the namespace is closed\nThis leads to weird discrepancies like the following: \nhttps://leanprover-community.github.io/mathlib_docs/topology/algebra/open_subgroup.html#open_subgroup.ext\nwhere the `to_additive` version of the lemma doesn't have the `ext` attribute in doc-gen (as it is copied immediately, so before the end of the current scope), but the original does have the attribute, as it only temporarily didn't.\nTo resolve this we simply give up on removing the `ext` attribute.", "changes": [{"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}]}, {"timestamp": 1658229322, "sha": "461afdac", "message": "refactor(algebra/graded_monoid): provide better names for lemmas about internal graduations (#15488)\nThis provides `set_like.one_mem_graded` as the preferred spelling of the projection `set_like.has_graded_one.one_mem`.\nThis follows the usual pattern of not including the typeclass name in the lemma that it provides; we don't usually write `add_semigroup.add_assoc`. The new lemmas are now listed in the docstring as the preferred API for working with these typeclasses.", "changes": [{"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "theorem", "algebra_map_mem_graded", ["set_like"]], ["del", "theorem", "algebra_map_mem", ["set_like", "has_graded_one"]], ["del", "theorem", "int_cast_mem", ["set_like", "has_graded_one"]], ["del", "theorem", "nat_cast_mem", ["set_like", "has_graded_one"]], ["add", "theorem", "int_cast_mem_graded", ["set_like"]], ["add", "theorem", "nat_cast_mem_graded", ["set_like"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["del", "theorem", "list_prod_map_mem", ["set_like", "graded_monoid"]], ["del", "theorem", "list_prod_of_fn_mem", ["set_like", "graded_monoid"]], ["del", "theorem", "pow_mem", ["set_like", "graded_monoid"]], ["add", "theorem", "list_prod_map_mem_graded", ["set_like"]], ["add", "theorem", "list_prod_of_fn_mem_graded", ["set_like"]], ["add", "theorem", "mul_mem_graded", ["set_like"]], ["add", "theorem", "one_mem_graded", ["set_like"]], ["add", "theorem", "pow_mem_graded", ["set_like"]]]}, {"oldPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "newPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "newPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": []}]}, {"timestamp": 1658229321, "sha": "93219fb7", "message": "feat(number_theory): degree `[Frac(S):Frac(R)]` is degree `[S/pS:R/p]` (#15315)\n(for a Dedekind domain `R` and its integral closure `S` and maximal ideal `p`)\nThis is the first step in showing the fundamental identity of inertia degree and ramification index (#12287).\nThe next step is to factor `pS` into coprime factors `P` and use the Chinese remainder theorem.", "changes": [{"oldPath": "src/number_theory/ramification_inertia.lean", "newPath": "src/number_theory/ramification_inertia.lean", "changes": [["add", "theorem", "linear_independent_of_nontrivial", ["ideal", "finrank_quotient_map"]], ["add", "theorem", "span_eq_top", ["ideal", "finrank_quotient_map"]], ["add", "theorem", "finrank_quotient_map", ["ideal"]]]}]}, {"timestamp": 1658229320, "sha": "1b775c2c", "message": "feat(ring_theory/etale): Formally étale morphisms. (#15242)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/etale.lean", "changes": [["add", "theorem", "comp", ["algebra", "formally_etale"]], ["add", "theorem", "iff_unramified_and_smooth", ["algebra", "formally_etale"]], ["add", "theorem", "of_equiv", ["algebra", "formally_etale"]], ["add", "theorem", "of_unramified_and_smooth", ["algebra", "formally_etale"]], ["add", "theorem", "comp", ["algebra", "formally_smooth"]], ["add", "theorem", "comp_lift", ["algebra", "formally_smooth"]], ["add", "theorem", "exists_lift", ["algebra", "formally_smooth"]], ["add", "def", "lift", ["algebra", "formally_smooth"]], ["add", "theorem", "mk_lift", ["algebra", "formally_smooth"]], ["add", "theorem", "of_equiv", ["algebra", "formally_smooth"]], ["add", "theorem", "comp", ["algebra", "formally_unramified"]], ["add", "theorem", "ext", ["algebra", "formally_unramified"]], ["add", "theorem", "lift_unique", ["algebra", "formally_unramified"]], ["add", "theorem", "of_equiv", ["algebra", "formally_unramified"]]]}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["add", "theorem", "induction_on", ["ideal", "is_nilpotent"]]]}]}, {"timestamp": 1658221817, "sha": "3527e4ad", "message": "refactor(group_theory/group_action/basic): Make `mul_action.self_equiv_sigma_orbits` computable (#14591)\nThis introduces a new `mul_action.orbit_rel.quotient.orbit` definition to avoid the need for `.out`.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "mem_orbit", ["mul_action", "orbit_rel", "quotient"]], ["add", "def", "orbit", ["mul_action", "orbit_rel", "quotient"]], ["add", "theorem", "orbit_eq_orbit_out", ["mul_action", "orbit_rel", "quotient"]], ["add", "theorem", "orbit_mk", ["mul_action", "orbit_rel", "quotient"]], ["add", "def", "quotient", ["mul_action", "orbit_rel"]], ["mod", "def", "self_equiv_sigma_orbits'", ["mul_action"]], ["add", "def", "self_equiv_sigma_orbits", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/quotient.lean", "newPath": "src/group_theory/group_action/quotient.lean", "changes": []}]}, {"timestamp": 1658217552, "sha": "1e72fb3f", "message": "feat(representation_theory/Action): mapping by a monoidal functor (#14331)", "changes": [{"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "theorem", "tensor_unit_V", ["Action"]], ["add", "theorem", "tensor_unit_rho", ["Action"]], ["add", "def", "map_Action", ["category_theory", "monoidal_functor"]]]}]}, {"timestamp": 1658214191, "sha": "c70a787e", "message": "feat(set_theory/zfc): `Ø ⊆ x` (#15223)", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["add", "theorem", "empty_subset", ["Set"]], ["mod", "theorem", "subset_iff", ["Set"]], ["add", "theorem", "empty_subset", ["pSet"]]]}]}, {"timestamp": 1658201401, "sha": "e1c8bded", "message": "feat(topology/support): add lemmas, fix a name (#15484)\n* generalize `support_smul_subset_left` to `smul_with_zero`;\n* add `tsupport_smul_subset_left`;\n* rename `not_mem_closure_mul_support_iff_eventually_eq` to\n `not_mem_mul_tsupport_iff_eventually_eq`;\n* add `continuous_of_mul_tsupport`.", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["mod", "theorem", "support_smul_subset_left", ["function"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/topology/support.lean", "newPath": "src/topology/support.lean", "changes": [["add", "theorem", "continuous_of_mul_tsupport", []], ["del", "theorem", "not_mem_closure_mul_support_iff_eventually_eq", []], ["add", "theorem", "not_mem_mul_tsupport_iff_eventually_eq", []], ["add", "theorem", "tsupport_smul_subset_left", []]]}]}, {"timestamp": 1658201400, "sha": "ebe60290", "message": "feat(field_theory/adjoin): Compact elements of `intermediate_field` (#15438)\nThis PR proves some lemmas regarding compact elements of `intermediate_field`, essentially copying the analogous results for `submodule` from `linear_algebra/span.lean`. This PR combos with #15419.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_finite_is_compact_element", ["intermediate_field"]], ["add", "theorem", "adjoin_finset_is_compact_element", ["intermediate_field"]], ["add", "theorem", "adjoin_simple_is_compact_element", ["intermediate_field"]]]}]}, {"timestamp": 1658201399, "sha": "150b8e81", "message": "feat(analysis/calculus): generalize `differentiable*.pow`, add `differentiable*.zpow` (#15416)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["del", "theorem", "pow", ["differentiable"]], ["add", "theorem", "zpow", ["differentiable"]], ["del", "theorem", "pow", ["differentiable_at"]], ["add", "theorem", "zpow", ["differentiable_at"]], ["del", "theorem", "pow", ["differentiable_on"]], ["add", "theorem", "zpow", ["differentiable_on"]], ["del", "theorem", "pow", ["differentiable_within_at"]], ["add", "theorem", "zpow", ["differentiable_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "pow", ["differentiable"]], ["add", "theorem", "pow", ["differentiable_at"]], ["add", "theorem", "pow", ["differentiable_on"]], ["add", "theorem", "pow", ["differentiable_within_at"]]]}]}, {"timestamp": 1658201398, "sha": "632b4970", "message": "feat(analysis/inner_product/calculus): [higher] differentiability to/from `euclidean_space` (#15363)\nThis duplicates some of the calculus `pi` API to `euclidean_space`. Namely : \n- we duplicate all the variants of `differentiable_pi` to show that a function to a euclidean space is (higher) differentiable iff all of its components are\n- we introduce `euclidean_version.proj`, analogous to `continuous_linear_map.proj`. This allows us to avoid duplicating all the `differentiable_apply`-like lemmas, because one can just use the API for smoothness of continuous linear maps", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "comp_cont_diff_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_cont_diff_iff", ["continuous_linear_equiv"]], ["add", "theorem", "cont_diff_at_comp_iff", ["continuous_linear_equiv"]], ["add", "theorem", "cont_diff_comp_iff", ["continuous_linear_equiv"]]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": [["add", "theorem", "cont_diff_at_euclidean", []], ["add", "theorem", "cont_diff_euclidean", []], ["add", "theorem", "cont_diff_on_euclidean", []], ["add", "theorem", "cont_diff_within_at_euclidean", []], ["add", "theorem", "differentiable_at_euclidean", []], ["add", "theorem", "differentiable_euclidean", []], ["add", "theorem", "differentiable_on_euclidean", []], ["add", "theorem", "differentiable_within_at_euclidean", []], ["add", "theorem", "has_fderiv_within_at_euclidean", []], ["add", "theorem", "has_strict_fderiv_at_euclidean", []]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "def", "equiv", ["euclidean_space"]], ["add", "def", "proj", ["euclidean_space"]], ["add", "def", "projₗ", ["euclidean_space"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": []}]}, {"timestamp": 1658201397, "sha": "58d7431d", "message": "refactor(set_theory/zfc): `Union` → `sUnion` (#15352)\nThe current `Union` definitions more closely match `set.sUnion`. We also change the notation to match.\nSee [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/ZFC.20definable.20class/near/289406692).", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["del", "def", "Union", ["Class"]], ["del", "theorem", "Union_hom", ["Class"]], ["mod", "def", "iota", ["Class"]], ["add", "def", "sUnion", ["Class"]], ["add", "theorem", "sUnion_hom", ["Class"]], ["del", "def", "Union", ["Set"]], ["del", "theorem", "Union_lem", ["Set"]], ["del", "theorem", "Union_singleton", ["Set"]], ["mod", "theorem", "choice_is_func", ["Set"]], ["del", "theorem", "mem_Union", ["Set"]], ["add", "theorem", "mem_sUnion", ["Set"]], ["add", "def", "sUnion", ["Set"]], ["add", "theorem", "sUnion_lem", ["Set"]], ["add", "theorem", "sUnion_singleton", ["Set"]], ["del", "def", "Union", ["pSet"]], ["del", "theorem", "mem_Union", ["pSet"]], ["add", "theorem", "mem_sUnion", ["pSet"]], ["add", "def", "sUnion", ["pSet"]]]}]}, {"timestamp": 1658201396, "sha": "11576dbb", "message": "feat(set_theory/zfc): `∈` is well-founded (#15213)", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["add", "theorem", "mem_asymm", ["Set"]], ["add", "theorem", "mem_irrefl", ["Set"]], ["add", "theorem", "mem_wf", ["Set"]], ["add", "theorem", "mem_asymm", ["pSet"]], ["add", "theorem", "mem_irrefl", ["pSet"]], ["add", "theorem", "mem_wf", ["pSet"]]]}]}, {"timestamp": 1658201395, "sha": "d655f459", "message": "feat(topology/algebra/filter_basis): add a variant of `module_filter_basis.has_continuous_smul` when we already have a topological group (#14806)\nThis basically just factors the existing proof to get for free that it works not only for the topology generated by the basis (as an `add_group_filter_basis`) but for any topological add group topology with a suitable basis of neighborhoods of 0.\nThis adds nothing new mathematically because group topologies are characterized by their neighborhoods of 0, so one could obtain such a result by building a second topology from the filter basis and proving it is equal to the first one, but it turns out it's just easier to split the proof, so this is just a free quality-of-life improvement.", "changes": [{"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": [["add", "theorem", "of_basis_zero", ["has_continuous_smul"]]]}]}, {"timestamp": 1658201394, "sha": "45140211", "message": "feat(algebra/category_theory/Group/epi_mono): about monomorphism and epimorphism in category of group (#14720)\nThis pr proves that monomorphism and injective homomorphism are the same and epimorphism and surjective homomorphism are the same in `Group`.\nFor `CommGroup`, `AddGroup` and `AddCommGroup`, the same is proved in #15496", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Group/epi_mono.lean", "changes": [["add", "theorem", "epi_iff_range_eq_top", ["Group"]], ["add", "theorem", "epi_iff_surjective", ["Group"]], ["add", "theorem", "ker_eq_bot_of_mono", ["Group"]], ["add", "theorem", "mono_iff_injective", ["Group"]], ["add", "theorem", "mono_iff_ker_eq_bot", ["Group"]], ["add", "theorem", "surjective_of_epi", ["Group"]], ["add", "def", "G", ["Group", "surjective_of_epi_auxs"]], ["add", "def", "H", ["Group", "surjective_of_epi_auxs"]], ["add", "inductive", "X_with_infinity", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "agree", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "comp_eq", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "from_coset_eq_of_mem_range", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "from_coset_ne_of_nin_range", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "g_apply_from_coset", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "g_apply_infinity", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "g_ne_h", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "h_apply_from_coset'", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "h_apply_from_coset", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "h_apply_from_coset_nin_range", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "h_apply_infinity", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "mul_smul", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "one_smul", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "τ_apply_from_coset'", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "τ_apply_from_coset", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "τ_apply_infinity", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "τ_symm_apply_from_coset", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "τ_symm_apply_infinity", ["Group", "surjective_of_epi_auxs"]], ["add", "theorem", "ker_eq_bot_of_cancel", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "range_one", ["monoid_hom"]]]}]}, {"timestamp": 1658192540, "sha": "b36a458a", "message": "feat(set_theory/ordinal/basic): add `gc_ord_card` and `gci_ord_card` (#15152)\nDefine a Galois coinsertion between `cardinal.ord` and `ordinal.card`,\nthen use it to golf some proofs.", "changes": [{"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "gc_ord_card", ["cardinal"]], ["add", "def", "gci_ord_card", ["cardinal"]], ["mod", "theorem", "lt_ord", ["cardinal"]], ["mod", "theorem", "lt_ord_succ_card", ["cardinal"]], ["mod", "theorem", "ord_card_le", ["cardinal"]], ["mod", "theorem", "ord_le_ord", ["cardinal"]], ["mod", "theorem", "ord_lt_ord", ["cardinal"]], ["add", "theorem", "ord_mono", ["cardinal"]], ["add", "theorem", "ord_strict_mono", ["cardinal"]], ["mod", "theorem", "ord_zero", ["cardinal"]]]}]}, {"timestamp": 1658192539, "sha": "b9c17c14", "message": "feat(data/multiset/fintype): coercion from multiset to type (#15094)\nIntroduces a coercion from multisets to types and provides a `fintype` instance for it. Also gives some definitions and lemmas to help work with sums and products over multisets.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/multiset/fintype.lean", "changes": [["add", "theorem", "card_coe", ["multiset"]], ["add", "theorem", "card_to_enum_finset", ["multiset"]], ["add", "def", "coe_embedding", ["multiset"]], ["add", "theorem", "coe_eq", ["multiset"]], ["add", "def", "coe_equiv", ["multiset"]], ["add", "theorem", "coe_mem", ["multiset"]], ["add", "theorem", "coe_mk", ["multiset"]], ["add", "theorem", "coe_sort_eq", ["multiset"]], ["add", "theorem", "fst_coe_eq_coe", ["multiset"]], ["add", "theorem", "image_to_enum_finset_fst", ["multiset"]], ["add", "theorem", "map_to_enum_finset_fst", ["multiset"]], ["add", "theorem", "map_univ", ["multiset"]], ["add", "theorem", "map_univ_coe", ["multiset"]], ["add", "theorem", "map_univ_coe_embedding", ["multiset"]], ["add", "theorem", "mem_of_mem_to_enum_finset", ["multiset"]], ["add", "theorem", "mem_to_enum_finset", ["multiset"]], ["add", "def", "mk_to_type", ["multiset"]], ["add", "theorem", "prod_eq_prod_coe", ["multiset"]], ["add", "theorem", "prod_eq_prod_to_enum_finset", ["multiset"]], ["add", "theorem", "prod_to_enum_finset", ["multiset"]], ["add", "theorem", "to_embedding_coe_equiv_trans", ["multiset"]], ["add", "def", "to_enum_finset", ["multiset"]], ["add", "theorem", "to_enum_finset_filter_eq", ["multiset"]], ["add", "theorem", "to_enum_finset_mono", ["multiset"]], ["add", "theorem", "to_enum_finset_subset_iff", ["multiset"]], ["add", "def", "to_type", ["multiset"]]]}]}, {"timestamp": 1658192537, "sha": "00c39680", "message": "refactor(set_theory/game/pgame): tweak `relabelling` definition (#14941)\nWe simplify the definition for a `relabelling` by using `R` instead of `R.symm`. This overall leads to more symmetric proofs.\nWe also create a constructor with the equivalences swapped. This allows us to golf various theorems.\nFurther, we add basic API on destructuring relabellings, which makes it so that we don't have to case on them all the time.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "def", "relabel", ["pgame"]], ["mod", "def", "relabel_relabelling", ["pgame"]], ["add", "def", "left_moves_equiv", ["pgame", "relabelling"]], ["add", "def", "mk'", ["pgame", "relabelling"]], ["add", "theorem", "mk'_left_moves_equiv", ["pgame", "relabelling"]], ["add", "theorem", "mk'_right_moves_equiv", ["pgame", "relabelling"]], ["add", "theorem", "mk_left_moves_equiv", ["pgame", "relabelling"]], ["add", "theorem", "mk_right_moves_equiv", ["pgame", "relabelling"]], ["add", "def", "move_left", ["pgame", "relabelling"]], ["add", "def", "move_left_symm", ["pgame", "relabelling"]], ["add", "def", "move_right", ["pgame", "relabelling"]], ["add", "def", "move_right_symm", ["pgame", "relabelling"]], ["add", "def", "right_moves_equiv", ["pgame", "relabelling"]]]}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}]}, {"timestamp": 1658192536, "sha": "b90e72c7", "message": "feat(set_theory/game/ordinal): lemmas on `0.to_pgame` and `1.to_pgame` (#14780)", "changes": [{"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": [["add", "theorem", "one_to_pgame_left_moves_default_eq", ["ordinal"]], ["add", "theorem", "one_to_pgame_move_left", ["ordinal"]], ["add", "theorem", "to_left_moves_one_to_pgame_symm", ["ordinal"]], ["add", "theorem", "to_pgame_nonneg", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}]}, {"timestamp": 1658192535, "sha": "3600b621", "message": "feat(topology/homotopy): define nth homotopy group πₙ (without the group instance) (#14724)\nThis pull request adds:\n- definition of the nth homotopy group `π n x`\n- proof of `π 0 x ≃ zeroth_homotopy X` where `x:X`\n- proof of `π 1 x ≃ path.homotopic.quotient x x`", "changes": [{"oldPath": null, "newPath": "src/topology/homotopy/homotopy_group.lean", "changes": [["add", "def", "boundary", ["cube"]], ["add", "theorem", "continuous", ["cube", "head"]], ["add", "def", "head", ["cube"]], ["add", "theorem", "one_char", ["cube"]], ["add", "theorem", "proj_continuous", ["cube"]], ["add", "def", "tail", ["cube"]], ["add", "def", "cube", []], ["add", "def", "const", ["gen_loop"]], ["add", "theorem", "ext", ["gen_loop"]], ["add", "theorem", "equiv", ["gen_loop", "homotopic"]], ["add", "theorem", "refl", ["gen_loop", "homotopic"]], ["add", "theorem", "symm", ["gen_loop", "homotopic"]], ["add", "theorem", "trans", ["gen_loop", "homotopic"]], ["add", "def", "homotopic", ["gen_loop"]], ["add", "theorem", "mk_apply", ["gen_loop"]], ["add", "structure", "gen_loop", []], ["add", "def", "gen_loop_one_equiv_path_self", []], ["add", "def", "gen_loop_zero_equiv", []], ["add", "def", "homotopy_group", []], ["add", "def", "pi0_equiv_path_components", []], ["add", "def", "pi1_equiv_fundamental_group", []]]}]}, {"timestamp": 1658192534, "sha": "e960dc61", "message": "feat(combinatorics/simple_graph/subgraph): delete vertices in a subgraph (#14403)", "changes": [{"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "def", "delete_verts", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_anti", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_delete_verts", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_empty", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_inter_verts_left_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_inter_verts_set_right_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_le", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_mono", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_verts_verts", ["simple_graph", "subgraph"]], ["add", "theorem", "induce_self_verts", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1658192533, "sha": "fcaedc52", "message": "feat(algebra/module): add injective module and Baer's criterion (#12895)\nBaer's criterion for injective modules: if an $R$-module $M$ is such that every linear map from an ideal of $R$ to $M$ can be extended to $R\\to M$, then $M$ is injective.", "changes": [{"oldPath": null, "newPath": "src/algebra/module/injective.lean", "changes": [["add", "theorem", "chain_linear_pmap_of_chain_extension_of", ["module", "Baer"]], ["add", "theorem", "ext", ["module", "Baer", "extension_of"]], ["add", "theorem", "ext_iff", ["module", "Baer", "extension_of"]], ["add", "theorem", "le_max", ["module", "Baer", "extension_of"]], ["add", "def", "max", ["module", "Baer", "extension_of"]], ["add", "structure", "extension_of", ["module", "Baer"]], ["add", "def", "extension_of_max", ["module", "Baer"]], ["add", "theorem", "eqn", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "def", "extend_ideal_to", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "theorem", "extend_ideal_to_eq", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "theorem", "extend_ideal_to_is_extension", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "theorem", "extend_ideal_to_wd'", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "theorem", "extend_ideal_to_wd", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "def", "extension_to_fun", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "theorem", "extension_to_fun_wd", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "def", "fst", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "def", "ideal", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "def", "ideal_to", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "def", "snd", ["module", "Baer", "extension_of_max_adjoin"]], ["add", "def", "extension_of_max_adjoin", ["module", "Baer"]], ["add", "theorem", "extension_of_max_is_max", ["module", "Baer"]], ["add", "theorem", "extension_of_max_le", ["module", "Baer"]], ["add", "theorem", "extension_of_max_to_submodule_eq_top", ["module", "Baer"]], ["add", "def", "Baer", ["module"]], ["add", "theorem", "injective_iff_injective_object", ["module"]], ["add", "theorem", "injective_module_of_injective_object", ["module"]], ["add", "theorem", "injective_object_of_injective_module", ["module"]]]}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "ext_iff", ["linear_pmap"]]]}, {"oldPath": "src/order/chain.lean", "newPath": "src/order/chain.lean", "changes": [["add", "theorem", "exists3", ["is_chain"]]]}]}, {"timestamp": 1658182812, "sha": "5a017443", "message": "feat(data/{finset,set}/basic): `insert a s = s ↔ a ∈ s` (#15493)\nand `s.erase a = s ↔ a ∉ s`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "erase_eq_self", ["finset"]], ["add", "theorem", "erase_ne_self", ["finset"]], ["add", "theorem", "insert_eq_self", ["finset"]], ["add", "theorem", "insert_ne_self", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_eq_self", ["set"]], ["add", "theorem", "insert_ne_self", ["set"]]]}]}, {"timestamp": 1658182810, "sha": "9540a420", "message": "chore(data/json): add a missing subtype parser for nullable types (#15486)\nThis instance is needed by `of_json (option (subtype p)) j`.\nThere is now a test for this.", "changes": [{"oldPath": "src/data/json.lean", "newPath": "src/data/json.lean", "changes": []}, {"oldPath": "test/json.lean", "newPath": "test/json.lean", "changes": []}]}, {"timestamp": 1658182809, "sha": "3557e4dc", "message": "feat(topology/basic): add 2 lemmas about `locally_finite` families (#15485)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "Inter_compl_mem_nhds", ["locally_finite"]], ["add", "theorem", "exists_mem_basis", ["locally_finite"]]]}]}, {"timestamp": 1658182808, "sha": "a26b4ee8", "message": "feat(data/list/infix): drop_while and take_while suf/prefix (#15473)", "changes": [{"oldPath": "src/data/list/infix.lean", "newPath": "src/data/list/infix.lean", "changes": [["add", "theorem", "drop_while_suffix", ["list"]], ["add", "theorem", "take_while_prefix", ["list"]]]}]}, {"timestamp": 1658182807, "sha": "925d8909", "message": "chore(algebra/group/ulift): add missing lemmas about pow, additivize (#15469)\nThis renames `ulift.smul_down` to `ulift.smul_def` since there is no mention of `down` on the LHS, and then unprimes `ulift.smul_down'` now that the name is available.\nIt also additivizes the `mul_action` instances.", "changes": [{"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": [["add", "theorem", "pow_down", ["ulift"]], ["add", "theorem", "smul_down", ["ulift"]]]}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": [["add", "theorem", "smul_def", ["ulift"]], ["del", "theorem", "smul_down'", ["ulift"]], ["del", "theorem", "smul_down", ["ulift"]]]}]}, {"timestamp": 1658182806, "sha": "8d2ae95f", "message": "fix(analysis/locally_convex): weaken assumptions for `totally_bounded.is_vonN_bounded` (#15468)\nThe `t3_space` assumption was needed because of `nhds_basis_closed_balanced`, but closedness was never used, and removing the closedness condition allows us to drop the `t3_space` assumption", "changes": [{"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": [["add", "theorem", "nhds_basis_balanced", []]]}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}]}, {"timestamp": 1658182805, "sha": "2cdc7579", "message": "doc(set_theory/ordinal/cantor_normal_form): implementation notes (#15466)\nWe write a short paragraph on why `CNF` is implemented as a list of pairs.", "changes": [{"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": []}]}, {"timestamp": 1658182804, "sha": "92f31fbc", "message": "refactor(tactic/polyrith): use the autogenerated json parser (#15429)\nThis acts as a nice demonstration of how to use `@[derive non_null_json_serializable]`", "changes": [{"oldPath": "src/tactic/polyrith.lean", "newPath": "src/tactic/polyrith.lean", "changes": [["add", "structure", "sage_json_failure", ["polyrith"]], ["add", "structure", "sage_json_success", ["polyrith"]]]}]}, {"timestamp": 1658182803, "sha": "0b673ed4", "message": "feat(set_theory/cardinal/ordinal): cardinality of `α →₀ β` (#15198)\nAs requested by @YaelDillies.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "mk_finsupp_lift_of_fintype", ["cardinal"]], ["add", "theorem", "mk_finsupp_of_fintype", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["add", "theorem", "mk_finsupp_lift_of_infinite", ["cardinal"]], ["add", "theorem", "mk_finsupp_of_infinite", ["cardinal"]], ["mod", "theorem", "mk_list_eq_mk", ["cardinal"]]]}]}, {"timestamp": 1658182801, "sha": "f5d916a6", "message": "feat(data/vector/mem): Lemmas about membership in a vector (#15154)\nAdd a number of lemmas about membership in different `vector`s. Some just wrap the `list` versions but some of the `n+1` cases are more general.", "changes": [{"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": [["add", "theorem", "eq_cons_iff", ["vector"]], ["add", "theorem", "exists_eq_cons", ["vector"]], ["add", "theorem", "head_map", ["vector"]], ["del", "theorem", "mem_iff_nth", ["vector"]], ["add", "theorem", "ne_cons_iff", ["vector"]], ["del", "theorem", "nth_mem", ["vector"]], ["add", "theorem", "tail_map", ["vector"]]]}, {"oldPath": null, "newPath": "src/data/vector/mem.lean", "changes": [["add", "theorem", "head_mem", ["vector"]], ["add", "theorem", "mem_cons_iff", ["vector"]], ["add", "theorem", "mem_cons_of_mem", ["vector"]], ["add", "theorem", "mem_cons_self", ["vector"]], ["add", "theorem", "mem_iff_nth", ["vector"]], ["add", "theorem", "mem_map_iff", ["vector"]], ["add", "theorem", "mem_map_succ_iff", ["vector"]], ["add", "theorem", "mem_of_mem_tail", ["vector"]], ["add", "theorem", "mem_succ_iff", ["vector"]], ["add", "theorem", "not_mem_map_zero", ["vector"]], ["add", "theorem", "not_mem_nil", ["vector"]], ["add", "theorem", "not_mem_zero", ["vector"]], ["add", "theorem", "nth_mem", ["vector"]]]}]}, {"timestamp": 1658182800, "sha": "4af7cb21", "message": "feat(data/nat/choose/basic): Definition of `multichoose` and basic lemmas (#15072)\nDefining `multichoose` which (by contrast with `choose`) counts the number of _multisets_ of cardinality `k` from a type of cardinality `n`, or equivalently the number of ways to select `k` items (up to permutation) from `n` items _with_ replacement.\nFor eventual use in @huynhtrankhanh's #11162 (\"stars and bars\")", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "def", "multichoose", ["nat"]], ["add", "theorem", "multichoose_eq", ["nat"]], ["add", "theorem", "multichoose_one", ["nat"]], ["add", "theorem", "multichoose_one_right", ["nat"]], ["add", "theorem", "multichoose_succ_succ", ["nat"]], ["add", "theorem", "multichoose_two", ["nat"]], ["add", "theorem", "multichoose_zero_right", ["nat"]], ["add", "theorem", "multichoose_zero_succ", ["nat"]]]}]}, {"timestamp": 1658164941, "sha": "7b43177d", "message": "feat(ring_theory/bezout): Bezout domains are integrally closed (#15424)", "changes": [{"oldPath": "src/ring_theory/bezout.lean", "newPath": "src/ring_theory/bezout.lean", "changes": []}]}, {"timestamp": 1658164940, "sha": "ee72cf62", "message": "refactor(order/compactly_generated): Generalize `submodule.exists_finset_of_mem_supr` to compact elements of complete lattices (#15419)\nThe lemma `submodule.exists_finset_of_mem_supr` can be generalized to compact elements of complete lattices. This should make it easy to get analogous results for other algebraic structures.", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "exists_finset_of_le_supr", ["complete_lattice", "is_compact_element"]]]}]}, {"timestamp": 1658164939, "sha": "0e30f2da", "message": "feat(ring_theory/localization/basic): section of localisation of non-zero is non-zero (#15404)", "changes": [{"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "theorem", "sec_fst_ne_zero", ["is_localization"]], ["add", "theorem", "sec_snd_ne_zero", ["is_localization"]]]}]}, {"timestamp": 1658164938, "sha": "582e6672", "message": "feat(algebraic_geometry/EllipticCurve): simplify definition of discriminant (#15365)\nThis replaces the definition with a nested let definition more similar to the definition on [the LMFDB page on discriminants](https://www.lmfdb.org/knowledge/show/ec.discriminant), and proves the equivalence to the (slightly reformatted) explicit polynomial in terms of the $a_i$'s.", "changes": [{"oldPath": "src/algebraic_geometry/EllipticCurve.lean", "newPath": "src/algebraic_geometry/EllipticCurve.lean", "changes": [["add", "def", "b2", ["EllipticCurve"]], ["add", "def", "b4", ["EllipticCurve"]], ["add", "def", "b6", ["EllipticCurve"]], ["add", "def", "b8", ["EllipticCurve"]], ["add", "def", "c4", ["EllipticCurve"]], ["add", "theorem", "c4_def", ["EllipticCurve"]], ["add", "theorem", "disc_aux_def", ["EllipticCurve"]], ["add", "theorem", "disc_def", ["EllipticCurve"]], ["mod", "def", "j", ["EllipticCurve"]]]}]}, {"timestamp": 1658164937, "sha": "bcc2c4e4", "message": "refactor(data/finset/lattice): sup' and inf' without option (#15195)\nHide the option API further, by using `unbot` and `untop`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "inf'_const", ["finset"]], ["add", "theorem", "inf'_map", ["finset"]], ["mod", "theorem", "max'_mem", ["finset"]], ["mod", "theorem", "min'_mem", ["finset"]], ["add", "theorem", "sup'_map", ["finset"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1658164936, "sha": "9c7a7cca", "message": "feat(tactic/congrm): add \"function underscores\" to `congrm` (#14532)\nThis PR introduces further functionality to tactic `congrm`. It is now possible to use \"function underscores\": for instance,\n```\nexample {a b c d e f g h : ℕ} (ae : a = e) (bf : b = f) (cg : c = g) (dh : d = h) :\n (a + b) * (c - d.succ) = (e + f) * (g - h.succ) :=\nby congrm _₂ (_₂ _ _) (_₂ _ (_₁ _)); assumption\n```\nworks. Each `_₂` is interpreted as the correct operation, `*, +, -`. I implemented `_ᵢ` for `i ∈ {1,2,3,4}`. It is easy to extend it further, in case this is desired.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F-tactics/topic/variant.20syntax.20for.20.60congr'.60)", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "replace_if", ["list"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/congrm.lean", "newPath": "src/tactic/congrm.lean", "changes": [["add", "def", "congrm_fun_1", ["tactic"]], ["add", "def", "congrm_fun_2", ["tactic"]], ["add", "def", "congrm_fun_3", ["tactic"]], ["add", "def", "congrm_fun_4", ["tactic"]]]}, {"oldPath": "test/congrm.lean", "newPath": "test/congrm.lean", "changes": []}]}, {"timestamp": 1658164935, "sha": "fba86201", "message": "feat(algebra/module/localized_module): construction of module localisation (#14470)\nGive commutative ring $R$, multiplicative subset $S\\subseteq R$ and an $R$-module $M$. We can localise $M$ by $S$ to be\n$$\n\\frac ms = \\frac n t \\iff \\exists (u \\in S), u(sn - tm) = 0\n$$\nThis pr makes this construction and proves that the localised module is an $R_S$ module.\nThanks @Vierkantor for substantial golfing.", "changes": [{"oldPath": null, "newPath": "src/algebra/module/localized_module.lean", "changes": [["add", "theorem", "induction_on", ["localized_module"]], ["add", "theorem", "induction_on₂", ["localized_module"]], ["add", "def", "lift_on", ["localized_module"]], ["add", "theorem", "lift_on_mk", ["localized_module"]], ["add", "def", "lift_on₂", ["localized_module"]], ["add", "theorem", "lift_on₂_mk", ["localized_module"]], ["add", "def", "mk", ["localized_module"]], ["add", "theorem", "mk_add_mk", ["localized_module"]], ["add", "theorem", "mk_eq", ["localized_module"]], ["add", "theorem", "mk_smul_mk", ["localized_module"]], ["add", "theorem", "is_equiv", ["localized_module", "r"]], ["add", "def", "r", ["localized_module"]], ["add", "theorem", "zero_mk", ["localized_module"]], ["add", "def", "localized_module", []]]}]}, {"timestamp": 1658157985, "sha": "903e8941", "message": "feat(ring_theory/adjoin_root): add lemmas for GCD domains (#14981)\nWe add `algebra.adjoin.power_basis'` and `power_basis.of_gen_mem_adjoin'`, that generalize the umprimed versions to GCD domain.\nFrom flt-regular.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["add", "theorem", "range_top_iff_surjective", ["algebra"]]]}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "def", "equiv_adjoin", ["adjoin_root", "minpoly"]], ["add", "theorem", "apply_X", ["adjoin_root", "minpoly", "to_adjoin"]], ["add", "theorem", "injective", ["adjoin_root", "minpoly", "to_adjoin"]], ["add", "theorem", "surjective", ["adjoin_root", "minpoly", "to_adjoin"]], ["add", "def", "to_adjoin", ["adjoin_root", "minpoly"]], ["add", "theorem", "to_adjoin_apply'", ["adjoin_root", "minpoly"]], ["add", "def", "power_basis'", ["algebra", "adjoin"]]]}]}, {"timestamp": 1658146670, "sha": "b60a2703", "message": "feat(data/real/{e,}nnreal): images and preimages of `ord_connected` sets (#15483)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "image_coe_nnreal_ennreal", ["set", "ord_connected"]], ["add", "theorem", "image_ennreal_of_real", ["set", "ord_connected"]], ["add", "theorem", "preimage_coe_nnreal_ennreal", ["set", "ord_connected"]], ["add", "theorem", "preimage_ennreal_of_real", ["set", "ord_connected"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "image_coe_nnreal_real", ["set", "ord_connected"]], ["add", "theorem", "image_real_to_nnreal", ["set", "ord_connected"]], ["add", "theorem", "preimage_coe_nnreal_real", ["set", "ord_connected"]], ["add", "theorem", "preimage_real_to_nnreal", ["set", "ord_connected"]]]}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["add", "theorem", "preimage_anti", ["set", "ord_connected"]], ["add", "theorem", "preimage_mono", ["set", "ord_connected"]]]}]}, {"timestamp": 1658146669, "sha": "ed513f85", "message": "feat(data/list/basic): last_reverse (#15482)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "last_reverse", ["list"]]]}]}, {"timestamp": 1658146668, "sha": "a641e1b6", "message": "doc(set_theory/cardinal/basic): tweak documentation (#15480)\nThis PR does the following:\n- remove the mention of `cardinal.min`, as it was removed in #13410.\n- elaborate on `cardinal.sum`.\n- add mention of `cardinal.prod`.\n- separate the documentation of definitions with that of instances.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1658146666, "sha": "5c062ff9", "message": "feat(algebra/order/monoid): add `one_lt_mul_iff`/`add_pos_iff` (#15458)", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "one_lt_mul_iff", []]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}]}, {"timestamp": 1658146663, "sha": "fc2d456a", "message": "feat(topology/instances/nnreal): add `can_lift C(X, ℝ) C(X, ℝ≥0)` (#15446)", "changes": [{"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "def", "coe_nnreal_real", ["continuous_map"]]]}]}, {"timestamp": 1658146661, "sha": "1a30610a", "message": "chore(logic/equiv/fin): golf, avoid `norm_num` (#15442)", "changes": [{"oldPath": "archive/100-theorems-list/93_birthday_problem.lean", "newPath": "archive/100-theorems-list/93_birthday_problem.lean", "changes": []}, {"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}]}, {"timestamp": 1658146660, "sha": "3b19e7ee", "message": "feat(order/hom/basic): `order_iso` of `rel_iso (<) (<)` (#15432)\nWe introduce `of_rel_iso_lt` to build an order isomorphism from a relation isomorphism between `(<)` relations. We also add two basic lemmas on `to_rel_iso_lt`.", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "def", "of_rel_iso_lt", ["order_iso"]], ["add", "theorem", "of_rel_iso_lt_apply", ["order_iso"]], ["add", "theorem", "of_rel_iso_lt_symm", ["order_iso"]], ["add", "theorem", "of_rel_iso_lt_to_rel_iso_lt", ["order_iso"]], ["mod", "def", "to_rel_iso_lt", ["order_iso"]], ["add", "theorem", "to_rel_iso_lt_apply", ["order_iso"]], ["add", "theorem", "to_rel_iso_lt_of_rel_iso_lt", ["order_iso"]], ["add", "theorem", "to_rel_iso_lt_symm", ["order_iso"]]]}]}, {"timestamp": 1658146659, "sha": "1627d8d7", "message": "feat(number_theory/legendre_symbol/*): redefine quadratic characters as `mul_char`s (#15418)\nThis is a follow-up to #14768; it defines quadratic characters (and also the characters on `zmod 4` and `zmod 8`) to be of type `mul_char F int` (where `F` is a finite field).\nSome content of `number_theory/legendre_symbol/quadratic_char` is moved within the file; one proof is replaced by directly using the corresponding more general result.\nSee here on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Implementation.20of.20multiplicative.20characters/near/289635166).", "changes": [{"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["mod", "def", "quadratic_char", ["char"]], ["add", "theorem", "quadratic_char_eq_one_of_char_two'", ["char"]], ["add", "theorem", "quadratic_char_eq_pow_of_char_ne_two'", ["char"]], ["add", "theorem", "quadratic_char_eq_zero_iff'", ["char"]], ["mod", "theorem", "quadratic_char_eq_zero_iff", ["char"]], ["add", "def", "quadratic_char_fun", ["char"]], ["del", "def", "quadratic_char_hom", ["char"]], ["add", "theorem", "quadratic_char_is_nontrivial", ["char"]], ["add", "theorem", "quadratic_char_is_quadratic", ["char"]], ["mod", "theorem", "quadratic_char_one", ["char"]], ["mod", "theorem", "quadratic_char_zero", ["char"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/zmod_char.lean", "newPath": "src/number_theory/legendre_symbol/zmod_char.lean", "changes": [["add", "theorem", "is_quadratic_χ₄", ["zmod"]], ["add", "theorem", "is_quadratic_χ₈'", ["zmod"]], ["add", "theorem", "is_quadratic_χ₈", ["zmod"]], ["mod", "def", "χ₄", ["zmod"]], ["del", "theorem", "χ₄_trichotomy", ["zmod"]], ["mod", "def", "χ₈'", ["zmod"]], ["del", "theorem", "χ₈'_trichotomy", ["zmod"]], ["mod", "def", "χ₈", ["zmod"]], ["del", "theorem", "χ₈_trichotomy", ["zmod"]]]}]}, {"timestamp": 1658146658, "sha": "ea330542", "message": "feat(ring_theory/I_filtration): I-filtrations of modules. (#15333)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/filtration.lean", "changes": [["add", "theorem", "Inf_N", ["ideal", "filtration"]], ["add", "theorem", "Sup_N", ["ideal", "filtration"]], ["add", "theorem", "antitone", ["ideal", "filtration"]], ["add", "theorem", "bot_N", ["ideal", "filtration"]], ["add", "theorem", "inf_N", ["ideal", "filtration"]], ["add", "theorem", "infi_N", ["ideal", "filtration"]], ["add", "theorem", "pow_smul_le", ["ideal", "filtration"]], ["add", "theorem", "pow_smul_le_pow_smul", ["ideal", "filtration"]], ["add", "theorem", "bounded_difference", ["ideal", "filtration", "stable"]], ["add", "theorem", "exists_forall_le", ["ideal", "filtration", "stable"]], ["add", "theorem", "exists_pow_smul_eq", ["ideal", "filtration", "stable"]], ["add", "theorem", "exists_pow_smul_eq_of_ge", ["ideal", "filtration", "stable"]], ["add", "def", "stable", ["ideal", "filtration"]], ["add", "theorem", "stable_iff_exists_pow_smul_eq_of_ge", ["ideal", "filtration"]], ["add", "theorem", "sup_N", ["ideal", "filtration"]], ["add", "theorem", "supr_N", ["ideal", "filtration"]], ["add", "theorem", "top_N", ["ideal", "filtration"]], ["add", "structure", "filtration", ["ideal"]], ["add", "def", "stable_filtration", ["ideal"]], ["add", "theorem", "stable_filtration_stable", ["ideal"]], ["add", "def", "trivial_filtration", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "smul_infi_le", ["submodule"]], ["add", "theorem", "smul_supr", ["submodule"]]]}]}, {"timestamp": 1658146657, "sha": "1d937ddf", "message": "feat(topology): basic simplification lemmas for `continuous_map`s (#15102)\nThis PR adds the `@[simps]` attribute at two definitions\n- at [continuous_map.uncurry](https://leanprover-community.github.io/mathlib_docs/topology/compact_open.html#continuous_map.uncurry) and,\n- at [continuous.prod_map](https://leanprover-community.github.io/mathlib_docs/topology/constructions.html#continuous.prod_map)", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["mod", "def", "uncurry", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["mod", "def", "prod_map", ["continuous_map"]]]}]}, {"timestamp": 1658142521, "sha": "691c0035", "message": "feat(algebra/lie/cartan_subalgebra): characterise Cartan subalgebras as limiting values of upper central series (#14179)\nThe main result is `lie_subalgebra.is_cartan_subalgebra_iff_is_ucs_limit`.", "changes": [{"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": [["add", "theorem", "is_cartan_subalgebra_iff_is_ucs_limit", ["lie_subalgebra"]], ["add", "theorem", "ucs_eq_self_of_is_cartan_subalgebra", ["lie_subalgebra"]], ["add", "def", "is_ucs_limit", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_iff_exists_lcs_eq_bot", ["lie_submodule"]], ["add", "theorem", "ucs_add", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "comap_incl_eq_bot", ["lie_submodule"]]]}]}, {"timestamp": 1658134196, "sha": "e82fbd32", "message": "feat(topology/sets/closeds): The coframe of closed sets (#15338)\n`coframe (closeds α)`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter₂_union", ["set"]], ["add", "theorem", "union_Inter₂", ["set"]]]}, {"oldPath": "src/topology/sets/closeds.lean", "newPath": "src/topology/sets/closeds.lean", "changes": [["add", "theorem", "coe_Inf", ["topological_space", "closeds"]], ["add", "theorem", "coe_infi", ["topological_space", "closeds"]], ["add", "theorem", "gc", ["topological_space", "closeds"]], ["add", "def", "gi", ["topological_space", "closeds"]], ["add", "theorem", "infi_def", ["topological_space", "closeds"]], ["add", "theorem", "infi_mk", ["topological_space", "closeds"]], ["add", "theorem", "mem_Inf", ["topological_space", "closeds"]], ["add", "theorem", "mem_infi", ["topological_space", "closeds"]]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": [["mod", "theorem", "coe_Sup", ["topological_space", "opens"]], ["add", "theorem", "coe_supr", ["topological_space", "opens"]], ["del", "theorem", "supr_s", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1658131663, "sha": "e3f47f2b", "message": "feat(geometry/euclidean/oriented_angle): `continuous_at_oangle` (#15463)\nAdd lemmas that oriented angles are continuous, as a function of a\npair of vectors, except where one of the vectors is zero, analogous to\nthe lemmas previously added for unoriented angles.", "changes": [{"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["add", "theorem", "continuous_at_oangle", ["orientation"]], ["add", "theorem", "continuous_at_oangle", ["orthonormal"]]]}]}, {"timestamp": 1658125903, "sha": "09ff086c", "message": "chore(set_theory/ordinal/arithmetic): improve `enum_iso` def-eq (#15454)\nBy not casing on the argument of `to_fun`, we get much a much nicer `apply` projection.", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1658110896, "sha": "2067c013", "message": "feat(geometry/manifold/metrizable): metrizability of a manifold (#15437)", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/geometry/manifold/metrizable.lean", "changes": [["add", "theorem", "metrizable_space", ["manifold_with_corners"]]]}]}, {"timestamp": 1658101277, "sha": "5b4425ae", "message": "feat(order/lattice): Congruence lemmas for `⊔` and `⊓` (#15439)\n`a ⊔ b = a ⊔ c` if `b ≤ a ⊔ c` and `c ≤ a ⊔ b`, and similar.\n## Lemma renames\n* `sup_eq_sup_of_le_le` → `sup_congr_right`\n* `inf_eq_inf_of_le_le` → `inf_congr_right`\n* `set.union_eq_union_of_subset_of_subset` → `set.union_congr_right`\n* `set.inter_eq_inter_of_subset_of_subset` → `set.inter_congr_right`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "inter_congr_left", ["finset"]], ["add", "theorem", "inter_congr_right", ["finset"]], ["add", "theorem", "inter_eq_inter_iff_left", ["finset"]], ["add", "theorem", "inter_eq_inter_iff_right", ["finset"]], ["add", "theorem", "union_congr_left", ["finset"]], ["add", "theorem", "union_congr_right", ["finset"]], ["add", "theorem", "union_eq_union_iff_left", ["finset"]], ["add", "theorem", "union_eq_union_iff_right", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_congr_left", ["set"]], ["add", "theorem", "inter_congr_right", ["set"]], ["add", "theorem", "inter_eq_inter_iff_left", ["set"]], ["add", "theorem", "inter_eq_inter_iff_right", ["set"]], ["del", "theorem", "inter_eq_inter_iff_subset_subset", ["set"]], ["del", "theorem", "inter_eq_inter_of_subset_of_subset", ["set"]], ["add", "theorem", "union_congr_left", ["set"]], ["add", "theorem", "union_congr_right", ["set"]], ["add", "theorem", "union_eq_union_iff_left", ["set"]], ["add", "theorem", "union_eq_union_iff_right", ["set"]], ["del", "theorem", "union_eq_union_iff_subset_subset", ["set"]], ["del", "theorem", "union_eq_union_of_subset_of_subset", ["set"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "sup_sdiff_eq_sup", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_congr_left", []], ["add", "theorem", "inf_congr_right", []], ["del", "theorem", "inf_eq_inf_iff_le_le", []], ["add", "theorem", "inf_eq_inf_iff_left", []], ["add", "theorem", "inf_eq_inf_iff_right", []], ["del", "theorem", "inf_eq_inf_of_le_of_le", []], ["add", "theorem", "sup_congr_left", []], ["add", "theorem", "sup_congr_right", []], ["del", "theorem", "sup_eq_sup_iff_le_le", []], ["add", "theorem", "sup_eq_sup_iff_left", []], ["add", "theorem", "sup_eq_sup_iff_right", []], ["del", "theorem", "sup_eq_sup_of_le_of_le", []]]}]}, {"timestamp": 1658093196, "sha": "87fc6828", "message": "feat(data/set/finite): set.finite.induction_on' (#15444)\nThis is analogous to `finset.induction_on'`.\nDiscussion: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/induction.20on.20finite.20set", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "induction_on'", ["set", "finite"]]]}]}, {"timestamp": 1658093195, "sha": "65ec5990", "message": "chore(linear_algebra/matrix): Use the new matrix notation in most places (#15306)", "changes": [{"oldPath": "src/algebra/lie/cartan_matrix.lean", "newPath": "src/algebra/lie/cartan_matrix.lean", "changes": [["mod", "def", "E₆", ["cartan_matrix"]], ["mod", "def", "E₇", ["cartan_matrix"]], ["mod", "def", "E₈", ["cartan_matrix"]], ["mod", "def", "F₄", ["cartan_matrix"]], ["mod", "def", "G₂", ["cartan_matrix"]]]}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polar_coord.lean", "newPath": "src/analysis/special_functions/polar_coord.lean", "changes": []}, {"oldPath": "src/data/complex/determinant.lean", "newPath": "src/data/complex/determinant.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "cons_vec_mul_cons", ["matrix"]], ["add", "theorem", "eta_fin_three", ["matrix"]], ["add", "theorem", "eta_fin_two", ["matrix"]]]}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["del", "theorem", "adjugate_fin_two'", ["matrix"]], ["add", "theorem", "adjugate_fin_two_of", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["del", "theorem", "det_fin_one_mk", ["matrix"]], ["add", "theorem", "det_fin_one_of", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": [["mod", "def", "S", ["modular_group"]], ["mod", "def", "T", ["modular_group"]], ["mod", "theorem", "coe_S", ["modular_group"]], ["mod", "theorem", "coe_T", ["modular_group"]], ["mod", "theorem", "coe_T_inv", ["modular_group"]], ["mod", "theorem", "coe_T_zpow", ["modular_group"]]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}]}, {"timestamp": 1658085071, "sha": "9745b093", "message": "feat(linear_algebra/matrix/charpoly): Coefficients of the characteristic polynomial falls in the ideal power. (#15459)", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "add_tsub_add_le_tsub_add_tsub", []]]}, {"oldPath": "src/linear_algebra/matrix/charpoly/basic.lean", "newPath": "src/linear_algebra/matrix/charpoly/basic.lean", "changes": [["add", "theorem", "charmatrix_apply", []]]}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": [["add", "theorem", "coeff_charpoly_mem_ideal_pow", []]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "coeff_prod_mem_ideal_pow_tsub", ["polynomial"]]]}]}, {"timestamp": 1658085070, "sha": "f19c6153", "message": "feat(algebra/group/with_one): units of a group with zero is isomorphic to the group (#15403)", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "theorem", "coe_unone", ["with_one"]], ["add", "def", "unone", ["with_one"]], ["add", "theorem", "unone_coe", ["with_one"]], ["add", "def", "units_with_zero_equiv", ["with_zero"]]]}]}, {"timestamp": 1658085069, "sha": "98f747f8", "message": "chore(set_theory/zfc): better def-eqs (#15210)\nWe sidestep the equation compiler when not strictly needed, thus improving the definitional equalities on some basic definitions. This also allows us to inline many instances.", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["del", "def", "empty", ["Set"]], ["del", "def", "mem", ["Set"]], ["mod", "def", "Union", ["pSet"]], ["mod", "def", "image", ["pSet"]], ["del", "def", "mem", ["pSet"]], ["add", "theorem", "mk_func", ["pSet"]], ["add", "theorem", "mk_type", ["pSet"]], ["mod", "def", "powerset", ["pSet"]], ["mod", "def", "type", ["pSet"]]]}]}, {"timestamp": 1658085068, "sha": "d84d1af4", "message": "feat(category_theory/preadditive): projective iff coyoneda.obj preserves epimorphisms (#14832)", "changes": [{"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["add", "theorem", "injective_iff_preserves_epimorphisms_yoneda_obj", ["category_theory", "injective"]], ["add", "theorem", "injective_iff_projective_op", ["category_theory", "injective"]], ["add", "theorem", "projective_iff_injective_op", ["category_theory", "injective"]]]}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": [["add", "theorem", "projective_iff_preserves_epimorphisms_coyoneda_obj", ["category_theory", "projective"]]]}]}, {"timestamp": 1658085067, "sha": "5b774133", "message": "refactor(analysis/inner_product_space/pi_L2): change `std_orthonormal_basis` to type `orthonormal_basis` (#12253)", "changes": [{"oldPath": "src/analysis/inner_product_space/orientation.lean", "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "coe_std_orthonormal_basis", []], ["add", "theorem", "collected_orthonormal_basis_mem", ["direct_sum", "is_internal"]], ["add", "def", "sigma_orthonormal_basis_index_equiv", ["direct_sum", "is_internal"]], ["add", "def", "subordinate_orthonormal_basis", ["direct_sum", "is_internal"]], ["add", "def", "subordinate_orthonormal_basis_index", ["direct_sum", "is_internal"]], ["add", "theorem", "subordinate_orthonormal_basis_subordinate", ["direct_sum", "is_internal"]], ["add", "theorem", "pi_Lp_congr_left_single", ["euclidean_space"]], ["add", "theorem", "exists_orthonormal_basis", []], ["add", "def", "fin_std_orthonormal_basis", []], ["del", "def", "from_orthogonal_span_singleton", ["linear_isometry_equiv"]], ["del", "def", "of_inner_product_space", ["linear_isometry_equiv"]], ["add", "theorem", "exists_orthonormal_basis_extension", ["orthonormal"]], ["add", "theorem", "coe_of_repr", ["orthonormal_basis"]], ["add", "def", "from_orthogonal_span_singleton", ["orthonormal_basis"]], ["add", "def", "reindex", ["orthonormal_basis"]], ["add", "def", "orthonormal_basis_index", []], ["add", "def", "std_orthonormal_basis", []]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["del", "theorem", "coe_std_orthonormal_basis", []], ["del", "def", "sigma_orthonormal_basis_index_equiv", ["direct_sum", "is_internal"]], ["del", "def", "subordinate_orthonormal_basis", ["direct_sum", "is_internal"]], ["del", "def", "subordinate_orthonormal_basis_index", ["direct_sum", "is_internal"]], ["del", "theorem", "subordinate_orthonormal_basis_orthonormal", ["direct_sum", "is_internal"]], ["del", "theorem", "subordinate_orthonormal_basis_subordinate", ["direct_sum", "is_internal"]], ["del", "theorem", "exists_subset_is_orthonormal_basis", []], ["del", "def", "fin_std_orthonormal_basis", []], ["del", "theorem", "fin_std_orthonormal_basis_orthonormal", []], ["del", "def", "orthonormal_basis_index", []], ["del", "def", "std_orthonormal_basis", []], ["del", "theorem", "std_orthonormal_basis_orthonormal", []]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["del", "theorem", "diagonalization_basis_symm_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "eigenvector_basis_orthonormal", ["inner_product_space", "is_self_adjoint"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "def", "pi_Lp_congr_left", ["linear_isometry_equiv"]], ["add", "theorem", "pi_Lp_congr_left_apply", ["linear_isometry_equiv"]], ["add", "theorem", "pi_Lp_congr_left_single", ["linear_isometry_equiv"]], ["add", "theorem", "pi_Lp_congr_left_symm", ["linear_isometry_equiv"]]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finite", ["linear_independent"]]]}, {"oldPath": "src/linear_algebra/matrix/spectrum.lean", "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": []}]}, {"timestamp": 1658078703, "sha": "6379d39e", "message": "feat(data/set/countable): protect lemmas (#15415)\nWe protect `set.countable_iff_exists_injective`, `set.countable_iff_exists_surjective`, and `set.countable.to_encodable` in order to avoid clashes with the theorems on the new `countable` typeclass.", "changes": [{"oldPath": "src/data/countable/basic.lean", "newPath": "src/data/countable/basic.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["del", "def", "to_encodable", ["set", "countable"]], ["del", "theorem", "countable_iff_exists_injective", ["set"]], ["del", "theorem", "countable_iff_exists_surjective", ["set"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}]}, {"timestamp": 1658078702, "sha": "621cf7f2", "message": "feat(algebraic_geometry): Intersection of affine open can be covered by common basic opens (#11649)", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["add", "theorem", "basic_open_basic_open_is_basic_open", ["algebraic_geometry"]], ["add", "def", "basic_open_sections_to_affine", ["algebraic_geometry"]], ["add", "theorem", "exists_basic_open_subset_affine_inter", ["algebraic_geometry"]], ["add", "theorem", "exists_basic_open_subset", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "opens_map_from_Spec_basic_open", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "is_localization_basic_open", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["mod", "theorem", "inv_app_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "is_iso_of_subset", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "of_restrict_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "image_basic_open", ["algebraic_geometry", "is_open_immersion"]]]}]}, {"timestamp": 1658071551, "sha": "bb08977c", "message": "doc(undergrad): add unitary and orthogonal group (#15456)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1658071550, "sha": "fcceffa0", "message": "chore(order/initial_seg): move definitions of initial and principal segments (#15328)\nWe move the definitions of initial and principal segments from `set_theory/ordinal/basic.lean` to a new file `order/initial_seg.lean`. We minimally change this file, just doing the following:\n- add a copyright header\n- copy over existing documentation\n- add a few `noncomputable` attributes \n- localize the notation\n- use `by_cases` in `initial_seg.lt_or_eq` (needed as the `classical` locale is no longer open)", "changes": [{"oldPath": null, "newPath": "src/order/initial_seg.lean", "changes": [["add", "theorem", "aux", ["initial_seg", "antisymm"]], ["add", "def", "antisymm", ["initial_seg"]], ["add", "theorem", "antisymm_symm", ["initial_seg"]], ["add", "theorem", "antisymm_to_fun", ["initial_seg"]], ["add", "def", "cod_restrict", ["initial_seg"]], ["add", "theorem", "cod_restrict_apply", ["initial_seg"]], ["add", "theorem", "coe_coe_fn", ["initial_seg"]], ["add", "theorem", "coe_fn_mk", ["initial_seg"]], ["add", "theorem", "coe_fn_to_rel_embedding", ["initial_seg"]], ["add", "theorem", "eq_or_principal", ["initial_seg"]], ["add", "theorem", "init'", ["initial_seg"]], ["add", "theorem", "init_iff", ["initial_seg"]], ["add", "def", "le_add", ["initial_seg"]], ["add", "theorem", "le_add_apply", ["initial_seg"]], ["add", "theorem", "le_lt_apply", ["initial_seg"]], ["add", "theorem", "lt_or_eq_apply_left", ["initial_seg"]], ["add", "theorem", "lt_or_eq_apply_right", ["initial_seg"]], ["add", "def", "of_iso", ["initial_seg"]], ["add", "theorem", "refl_apply", ["initial_seg"]], ["add", "theorem", "trans_apply", ["initial_seg"]], ["add", "theorem", "unique_of_extensional", ["initial_seg"]], ["add", "structure", "initial_seg", []], ["add", "def", "cod_restrict", ["principal_seg"]], ["add", "theorem", "cod_restrict_apply", ["principal_seg"]], ["add", "theorem", "cod_restrict_top", ["principal_seg"]], ["add", "theorem", "coe_coe_fn'", ["principal_seg"]], ["add", "theorem", "coe_coe_fn", ["principal_seg"]], ["add", "theorem", "coe_fn_mk", ["principal_seg"]], ["add", "theorem", "coe_fn_to_rel_embedding", ["principal_seg"]], ["add", "theorem", "down'", ["principal_seg"]], ["add", "def", "equiv_lt", ["principal_seg"]], ["add", "theorem", "equiv_lt_apply", ["principal_seg"]], ["add", "theorem", "equiv_lt_top", ["principal_seg"]], ["add", "theorem", "init", ["principal_seg"]], ["add", "theorem", "init_iff", ["principal_seg"]], ["add", "theorem", "irrefl", ["principal_seg"]], ["add", "def", "lt_equiv", ["principal_seg"]], ["add", "def", "lt_le", ["principal_seg"]], ["add", "theorem", "lt_le_apply", ["principal_seg"]], ["add", "theorem", "lt_le_top", ["principal_seg"]], ["add", "theorem", "lt_top", ["principal_seg"]], ["add", "def", "of_element", ["principal_seg"]], ["add", "theorem", "of_element_apply", ["principal_seg"]], ["add", "theorem", "of_element_top", ["principal_seg"]], ["add", "theorem", "top_eq", ["principal_seg"]], ["add", "theorem", "top_lt_top", ["principal_seg"]], ["add", "theorem", "trans_apply", ["principal_seg"]], ["add", "theorem", "trans_top", ["principal_seg"]], ["add", "structure", "principal_seg", []], ["add", "theorem", "lt", ["rel_embedding", "collapse_F"]], ["add", "theorem", "not_lt", ["rel_embedding", "collapse_F"]], ["add", "theorem", "collapse_apply", ["rel_embedding"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["del", "theorem", "aux", ["initial_seg", "antisymm"]], ["del", "def", "antisymm", ["initial_seg"]], ["del", "theorem", "antisymm_symm", ["initial_seg"]], ["del", "theorem", "antisymm_to_fun", ["initial_seg"]], ["del", "def", "cod_restrict", ["initial_seg"]], ["del", "theorem", "cod_restrict_apply", ["initial_seg"]], ["del", "theorem", "coe_coe_fn", ["initial_seg"]], ["del", "theorem", "coe_fn_mk", ["initial_seg"]], ["del", "theorem", "coe_fn_to_rel_embedding", ["initial_seg"]], ["del", "theorem", "eq_or_principal", ["initial_seg"]], ["del", "theorem", "init'", ["initial_seg"]], ["del", "theorem", "init_iff", ["initial_seg"]], ["del", "def", "le_add", ["initial_seg"]], ["del", "theorem", "le_add_apply", ["initial_seg"]], ["del", "def", "le_lt", ["initial_seg"]], ["del", "theorem", "le_lt_apply", ["initial_seg"]], ["del", "def", "lt_or_eq", ["initial_seg"]], ["del", "theorem", "lt_or_eq_apply_left", ["initial_seg"]], ["del", "theorem", "lt_or_eq_apply_right", ["initial_seg"]], ["del", "def", "of_iso", ["initial_seg"]], ["del", "theorem", "refl_apply", ["initial_seg"]], ["del", "theorem", "trans_apply", ["initial_seg"]], ["del", "theorem", "unique_of_extensional", ["initial_seg"]], ["del", "structure", "initial_seg", []], ["del", "def", "cod_restrict", ["principal_seg"]], ["del", "theorem", "cod_restrict_apply", ["principal_seg"]], ["del", "theorem", "cod_restrict_top", ["principal_seg"]], ["del", "theorem", "coe_coe_fn'", ["principal_seg"]], ["del", "theorem", "coe_coe_fn", ["principal_seg"]], ["del", "theorem", "coe_fn_mk", ["principal_seg"]], ["del", "theorem", "coe_fn_to_rel_embedding", ["principal_seg"]], ["del", "theorem", "down'", ["principal_seg"]], ["del", "def", "equiv_lt", ["principal_seg"]], ["del", "theorem", "equiv_lt_apply", ["principal_seg"]], ["del", "theorem", "equiv_lt_top", ["principal_seg"]], ["del", "theorem", "init", ["principal_seg"]], ["del", "theorem", "init_iff", ["principal_seg"]], ["del", "theorem", "irrefl", ["principal_seg"]], ["del", "def", "lt_equiv", ["principal_seg"]], ["del", "def", "lt_le", ["principal_seg"]], ["del", "theorem", "lt_le_apply", ["principal_seg"]], ["del", "theorem", "lt_le_top", ["principal_seg"]], ["del", "theorem", "lt_top", ["principal_seg"]], ["del", "def", "of_element", ["principal_seg"]], ["del", "theorem", "of_element_apply", ["principal_seg"]], ["del", "theorem", "of_element_top", ["principal_seg"]], ["del", "theorem", "top_eq", ["principal_seg"]], ["del", "theorem", "top_lt_top", ["principal_seg"]], ["del", "theorem", "trans_apply", ["principal_seg"]], ["del", "theorem", "trans_top", ["principal_seg"]], ["del", "structure", "principal_seg", []], ["del", "def", "collapse", ["rel_embedding"]], ["del", "theorem", "lt", ["rel_embedding", "collapse_F"]], ["del", "theorem", "not_lt", ["rel_embedding", "collapse_F"]], ["del", "def", "collapse_F", ["rel_embedding"]], ["del", "theorem", "collapse_apply", ["rel_embedding"]]]}]}, {"timestamp": 1658071549, "sha": "3e63d162", "message": "feat(data/polynomial/unit_trinomial): Irreducibility of X^n-X-1 (#15318)\nThis PR adds a proves irreducibility of X^n-X-1, superseding #6421.", "changes": [{"oldPath": "src/data/polynomial/unit_trinomial.lean", "newPath": "src/data/polynomial/unit_trinomial.lean", "changes": [["add", "theorem", "irreducible_of_coprime'", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "trinomial_monic", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/selmer.lean", "changes": [["add", "theorem", "X_pow_sub_X_sub_one_irreducible", ["polynomial"]], ["add", "theorem", "X_pow_sub_X_sub_one_irreducible_aux", ["polynomial"]], ["add", "theorem", "X_pow_sub_X_sub_one_irreducible_rat", ["polynomial"]]]}]}, {"timestamp": 1658071548, "sha": "bada07ee", "message": "feat(algebra/category): forgetful functors from modules reflect limits (#15095)", "changes": [{"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/category_theory/functor/reflects_isomorphisms.lean", "newPath": "src/category_theory/functor/reflects_isomorphisms.lean", "changes": []}]}, {"timestamp": 1658071547, "sha": "9f453148", "message": "feat(algebra/homology): homotopy equivalences are quasi-isomorphisms (#14945)\nIn this PR, it is shown that homotopy equivalences of homological complexes are quasi-isomorphisms.", "changes": [{"oldPath": "src/algebra/homology/quasi_iso.lean", "newPath": "src/algebra/homology/quasi_iso.lean", "changes": [["add", "theorem", "to_quasi_iso", ["homotopy_equiv"]]]}]}, {"timestamp": 1658067981, "sha": "54594da2", "message": "fix(category_theory/abelian/transfer): fix a potential timeout (#15262)\nAt `src/category_theory/abelian/transfer.lean` line 149, `abelian_of_adjunction.coimage_iso_image_hom` is on edge of being timed out by any additional simp lemmas, see #15232. This pr squeezed the `simpa` statement.", "changes": [{"oldPath": "src/category_theory/abelian/transfer.lean", "newPath": "src/category_theory/abelian/transfer.lean", "changes": []}]}, {"timestamp": 1658056892, "sha": "4461149a", "message": "chore(algebra/geom_sum): golf a proof (#15450)", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}]}, {"timestamp": 1658043156, "sha": "683e1f66", "message": "feat(measure_theory/function/conditional_expecation): conditional expectation of a function to a independent sigma-algebra (#15422)\nThis PR shows that if $\\mathcal{G} \\perp \\mathcal{F}$ and $f$ is $\\mathcal{G}$-measurable, then $\\mathbb{E}[f \\mid \\mathcal{F}] = \\mathbb{E}[f]$ almost everywhere.", "changes": [{"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": []}, {"oldPath": null, "newPath": "src/probability/conditional_expectation.lean", "changes": [["add", "theorem", "condexp_indep_eq", ["measure_theory"]]]}, {"oldPath": "src/probability/conditional.lean", "newPath": "src/probability/conditional_probability.lean", "changes": []}]}, {"timestamp": 1658040033, "sha": "e42057fa", "message": "feat(data/nat/bitwise): tweak `lxor` lemmas (#15409)\nThis PR does the following:\n- add `lxor_cancel_right`, `lxor_cancel_left`, `lt_lxor_cases`.\n- make `lxor_right_inj` and `lxor_left_inj` into iffs as per convention, prove the corresponding `lxor_right_injective` and `lxor_left_injective` separately.\n- golf `lxor_eq_zero`, tag it as `simp`, add the corresponding `lxor_ne_zero` lemma.\n- simplify the hypothesis of `lxor_trichotomy`.", "changes": [{"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": [["add", "theorem", "lt_lxor_cases", ["nat"]], ["add", "theorem", "lxor_cancel_left", ["nat"]], ["add", "theorem", "lxor_cancel_right", ["nat"]], ["mod", "theorem", "lxor_eq_zero", ["nat"]], ["mod", "theorem", "lxor_left_inj", ["nat"]], ["add", "theorem", "lxor_left_injective", ["nat"]], ["add", "theorem", "lxor_ne_zero", ["nat"]], ["mod", "theorem", "lxor_right_inj", ["nat"]], ["add", "theorem", "lxor_right_injective", ["nat"]], ["mod", "theorem", "lxor_trichotomy", ["nat"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}]}, {"timestamp": 1658040032, "sha": "4dee658e", "message": "chore(set_theory/zfc): general cleanup (#15208)\nThis PR does the following:\n- Make `pSet.mk_type_func` into a `simp` lemma, rename to `pSet.eta`.\n- Give a simpler definition for `pSet.empty`.\n- Enable dot notation on `resp.equiv` and separate the `symm` and `trans` theorems from the `setoid` instance.\n- Protect lemmas to avoid trouble between the `equiv` and the `resp.equiv` lemmas.\n- Tweak some spacing.\n- Add many missing `simp` tags.", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["mod", "theorem", "mk_eq", ["Set"]], ["mod", "theorem", "subset_iff", ["Set"]], ["del", "theorem", "euc", ["pSet", "equiv"]], ["del", "theorem", "refl", ["pSet", "equiv"]], ["del", "theorem", "rfl", ["pSet", "equiv"]], ["del", "theorem", "symm", ["pSet", "equiv"]], ["del", "theorem", "trans", ["pSet", "equiv"]], ["add", "theorem", "eta", ["pSet"]], ["mod", "theorem", "mk", ["pSet", "mem"]], ["mod", "theorem", "mem_Union", ["pSet"]], ["mod", "theorem", "mem_empty", ["pSet"]], ["mod", "theorem", "mem_powerset", ["pSet"]], ["del", "theorem", "mk_type_func", ["pSet"]], ["del", "theorem", "euc", ["pSet", "resp"]], ["del", "theorem", "refl", ["pSet", "resp"]]]}]}, {"timestamp": 1658031277, "sha": "7351357b", "message": "chore(ring_theory/ideal/operations): golf a lemma (#15431)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1658031276, "sha": "88220853", "message": "feat(order/rel_iso): add lemmas on `rel_iso.cast` (#15430)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1658031273, "sha": "1b235421", "message": "feat(measure_theory/integral): generalize some integral properties to set_to_fun (#15423)\nNow those lemmas can be applied to the conditional expectation as well.", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["add", "theorem", "tendsto_set_to_fun_approx_on_of_measurable", ["measure_theory"]], ["add", "theorem", "tendsto_set_to_fun_approx_on_of_measurable_of_range_subset", ["measure_theory"]], ["add", "theorem", "tendsto_set_to_fun_of_L1", ["measure_theory"]]]}]}, {"timestamp": 1658031271, "sha": "5a6671a7", "message": "chore(order/basic): remove two lemmas breaking API boundaries (#15401)\n`order.dual_le` and `order.dual_lt` don't conform to API boundaries, as they abuse the def-eq between `αᵒᵈ` and `α` instead of using `to_dual` or `of_dual` to perform the cast. As such, we remove them.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "dual_le", ["order_dual"]], ["del", "theorem", "dual_lt", ["order_dual"]]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}]}, {"timestamp": 1658031270, "sha": "41e467ac", "message": "feat(analysis/complex/abs_max): add a version of the maximum modulus principle (#15364)\n* Add versions of the maximum modulus principle that assume strict\n convexity of the codomain and prove `f x = f y` instead of\n `∥f x∥ = ∥f y∥`\n \n* Add a version of the maximum modulus principle for arbitrary open\n connected sets.\n* Add supporting lemmas.\n - More lemmas about strictly convex spaces and norm\n (`eq_of_norm_eq_of_norm_add_eq`, `same_ray.eq_of_norm_eq`,\n `same_ray.norm_eq_iff`);\n\t\n - Lemmas about `is_max_*` and `λ x, ∥f x + y∥`.\n \n - Generalize `convex.is_preconnected` from `ℝ` to a real vector space.\n \n* Improve documentation.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": [["add", "theorem", "eq_of_is_max_on_of_ball_subset", ["complex"]], ["add", "theorem", "eq_on_closed_ball_of_is_max_on_norm", ["complex"]], ["mod", "theorem", "eq_on_closure_of_eq_on_frontier", ["complex"]], ["add", "theorem", "eq_on_closure_of_is_preconnected_of_is_max_on_norm", ["complex"]], ["mod", "theorem", "eq_on_of_eq_on_frontier", ["complex"]], ["add", "theorem", "eq_on_of_is_preconnected_of_is_max_on_norm", ["complex"]], ["add", "theorem", "eventually_eq_of_is_local_max_norm", ["complex"]], ["mod", "theorem", "exists_mem_frontier_is_max_on_norm", ["complex"]], ["add", "theorem", "norm_eq_on_closure_of_is_preconnected_of_is_max_on", ["complex"]], ["add", "theorem", "norm_eq_on_of_is_preconnected_of_is_max_on", ["complex"]], ["mod", "theorem", "norm_le_of_forall_mem_frontier_norm_le", ["complex"]]]}, {"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": [["add", "theorem", "eq_of_norm_eq_of_norm_add_eq", []]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/extr.lean", "changes": [["add", "theorem", "norm_add_same_ray", ["is_local_max"]], ["add", "theorem", "norm_add_self", ["is_local_max"]], ["add", "theorem", "norm_add_same_ray", ["is_local_max_on"]], ["add", "theorem", "norm_add_self", ["is_local_max_on"]], ["add", "theorem", "norm_add_same_ray", ["is_max_filter"]], ["add", "theorem", "norm_add_self", ["is_max_filter"]], ["add", "theorem", "norm_add_same_ray", ["is_max_on"]], ["add", "theorem", "norm_add_self", ["is_max_on"]]]}, {"oldPath": "src/analysis/normed_space/ray.lean", "newPath": "src/analysis/normed_space/ray.lean", "changes": [["add", "theorem", "eq_of_norm_eq", ["same_ray"]], ["add", "theorem", "norm_eq_iff", ["same_ray"]]]}]}, {"timestamp": 1658031268, "sha": "d857ca65", "message": "feat(analysis/calculus/mean_value): remove assumption in strict_mono_on.strict_convex_on_of_deriv (#15133)\nCurrently, the lemma `strict_mono_on.strict_convex_on_of_deriv` states that, if a real function `f` is continuous on a convex set `D`, differentiable on its interior, and `deriv f` is strictly monotone on its interior, then `f` is convex on `D`. We remove the differentiability assumption: since `deriv f` is strictly monotone, there is at most one point of nondifferentiability (as `deriv f x = 0` when `f` is not differentiable), and the result is still true (although the proof is a little bit more complicated) in this case.\nOf course, in essentially all applications the functions will be differentiable, but the lemma becomes easier to use as the user doesn't need to prove this differentiability.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "concave_on_of_deriv2_nonpos'", []], ["del", "theorem", "concave_on_open_of_deriv2_nonpos", []], ["add", "theorem", "convex_on_of_deriv2_nonneg'", []], ["del", "theorem", "convex_on_open_of_deriv2_nonneg", []], ["mod", "theorem", "strict_concave_on_univ_of_deriv", ["strict_anti"]], ["add", "theorem", "strict_concave_on_of_deriv2_neg'", []], ["del", "theorem", "strict_concave_on_open_of_deriv2_neg", []], ["mod", "theorem", "strict_concave_on_univ_of_deriv2_neg", []], ["add", "theorem", "strict_convex_on_of_deriv2_pos'", []], ["del", "theorem", "strict_convex_on_open_of_deriv2_pos", []], ["mod", "theorem", "strict_convex_on_univ_of_deriv2_pos", []], ["mod", "theorem", "strict_convex_on_univ_of_deriv", ["strict_mono"]], ["add", "theorem", "exists_deriv_lt_slope", ["strict_mono_on"]], ["add", "theorem", "exists_deriv_lt_slope_aux", ["strict_mono_on"]], ["add", "theorem", "exists_slope_lt_deriv", ["strict_mono_on"]], ["add", "theorem", "exists_slope_lt_deriv_aux", ["strict_mono_on"]]]}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}]}, {"timestamp": 1658023847, "sha": "a2c2bc99", "message": "feat(topology/noetherian_space): Noetherian spaces (#14965)", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "{u}", ["complete_lattice"]]]}, {"oldPath": null, "newPath": "src/topology/noetherian_space.lean", "changes": [["add", "theorem", "Union", ["topological_space", "noetherian_space"]], ["add", "theorem", "discrete", ["topological_space", "noetherian_space"]], ["add", "theorem", "exists_finset_irreducible", ["topological_space", "noetherian_space"]], ["add", "theorem", "finite", ["topological_space", "noetherian_space"]], ["add", "theorem", "finite_irreducible_components", ["topological_space", "noetherian_space"]], ["add", "theorem", "is_compact", ["topological_space", "noetherian_space"]], ["add", "theorem", "range", ["topological_space", "noetherian_space"]], ["add", "theorem", "noetherian_space_iff_of_homeomorph", ["topological_space"]], ["add", "theorem", "noetherian_space_iff_opens", ["topological_space"]], ["add", "theorem", "noetherian_space_of_surjective", ["topological_space"]], ["add", "theorem", "noetherian_space_set_iff", ["topological_space"]], ["add", "theorem", "noetherian_space_tfae", ["topological_space"]], ["add", "theorem", "noetherian_univ_iff", ["topological_space"]]]}, {"oldPath": "src/topology/sets/closeds.lean", "newPath": "src/topology/sets/closeds.lean", "changes": [["mod", "theorem", "coe_bot", ["topological_space", "closeds"]], ["add", "theorem", "coe_finset_inf", ["topological_space", "closeds"]], ["add", "theorem", "coe_finset_sup", ["topological_space", "closeds"]], ["mod", "theorem", "coe_inf", ["topological_space", "closeds"]], ["mod", "theorem", "coe_sup", ["topological_space", "closeds"]], ["mod", "theorem", "coe_top", ["topological_space", "closeds"]], ["add", "def", "compl", ["topological_space", "closeds"]], ["add", "theorem", "compl_bijective", ["topological_space", "closeds"]], ["add", "theorem", "compl_compl", ["topological_space", "closeds"]], ["add", "def", "compl", ["topological_space", "opens"]], ["add", "theorem", "compl_bijective", ["topological_space", "opens"]], ["add", "theorem", "compl_compl", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": [["mod", "theorem", "coe_Sup", ["topological_space", "opens"]], ["mod", "theorem", "coe_bot", ["topological_space", "opens"]], ["add", "theorem", "coe_finset_inf", ["topological_space", "opens"]], ["add", "theorem", "coe_finset_sup", ["topological_space", "opens"]], ["mod", "theorem", "coe_inf", ["topological_space", "opens"]], ["add", "theorem", "coe_sup", ["topological_space", "opens"]], ["mod", "theorem", "coe_top", ["topological_space", "opens"]], ["add", "theorem", "is_compact_element_iff", ["topological_space", "opens"]]]}]}, {"timestamp": 1658003776, "sha": "d69acdc9", "message": "feat(data/finset/powerset): More `powerset` lemmas (#15387)\n`finset.powerset` is injective, and others.", "changes": [{"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["add", "theorem", "coe_powerset", ["finset"]], ["mod", "theorem", "mem_powerset_self", ["finset"]], ["mod", "theorem", "powerset_empty", ["finset"]], ["add", "theorem", "powerset_eq_singleton_empty", ["finset"]], ["add", "theorem", "powerset_inj", ["finset"]], ["add", "theorem", "powerset_injective", ["finset"]], ["add", "theorem", "powerset_nonempty", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "powerset_eq_univ", ["finset"]], ["add", "theorem", "powerset_univ", ["finset"]]]}]}, {"timestamp": 1658003775, "sha": "72207732", "message": "feat(group_theory/group_action/option): Scalar action on an option (#15239)\n`has_scalar α β → has_scalar α (option β)` and similar.", "changes": [{"oldPath": null, "newPath": "src/group_theory/group_action/option.lean", "changes": [["add", "theorem", "smul_def", ["option"]], ["add", "theorem", "smul_none", ["option"]], ["add", "theorem", "smul_some", ["option"]]]}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/sum.lean", "newPath": "src/group_theory/group_action/sum.lean", "changes": []}, {"oldPath": "src/logic/function/conjugate.lean", "newPath": "src/logic/function/conjugate.lean", "changes": [["add", "theorem", "option_map", ["function", "commute"]], ["add", "theorem", "option_map", ["function", "semiconj"]]]}]}, {"timestamp": 1658000023, "sha": "af5c45db", "message": "feat(algebraic_geometry): Restriction of morphisms onto open sets of the target (#14972)", "changes": [{"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "add", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "inter", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "restrict_functor", ["algebraic_geometry", "Scheme"]], ["add", "def", "restrict_map_iso", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "image_morphism_restrict_preimage", ["algebraic_geometry"]], ["add", "theorem", "range_pullback_fst_of_right", ["algebraic_geometry", "is_open_immersion"]], ["add", "theorem", "range_pullback_snd_of_left", ["algebraic_geometry", "is_open_immersion"]], ["add", "theorem", "range_pullback_to_base_of_left", ["algebraic_geometry", "is_open_immersion"]], ["add", "theorem", "range_pullback_to_base_of_right", ["algebraic_geometry", "is_open_immersion"]], ["add", "def", "morphism_restrict", ["algebraic_geometry"]], ["add", "theorem", "morphism_restrict_base_coe", ["algebraic_geometry"]], ["add", "theorem", "morphism_restrict_c_app", ["algebraic_geometry"]], ["add", "theorem", "morphism_restrict_comp", ["algebraic_geometry"]], ["add", "theorem", "morphism_restrict_ι", ["algebraic_geometry"]], ["add", "def", "pullback_restrict_iso_restrict", ["algebraic_geometry"]], ["add", "theorem", "pullback_restrict_iso_restrict_hom_morphism_restrict", ["algebraic_geometry"]], ["add", "theorem", "pullback_restrict_iso_restrict_hom_restrict", ["algebraic_geometry"]], ["add", "theorem", "pullback_restrict_iso_restrict_inv_fst", ["algebraic_geometry"]], ["add", "theorem", "Γ_map_morphism_restrict", ["algebraic_geometry"]]]}]}, {"timestamp": 1657995915, "sha": "13e97da3", "message": "chore(measure_theory/tactic): fix a loop in the measurability tactic (#14813)", "changes": [{"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "test/measurability.lean", "newPath": "test/measurability.lean", "changes": []}]}, {"timestamp": 1657984152, "sha": "ff548cdd", "message": "feat(field_theory/adjoin): `F⟮α⟯ ≤ K ↔ α ∈ K` (#15420)\nI was surprised that we didn't have this lemma already.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_simple_le_iff", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}]}, {"timestamp": 1657984151, "sha": "9365548b", "message": "feat(group_theory/submonoid/pointwise): add the pointwise monoid structure on `add_submonoid` (#15052)\nThis also adds some missing lemmas about powers of submodules.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "le_one_to_add_submonoid", ["submodule"]], ["add", "theorem", "le_pow_to_add_submonoid", ["submodule"]], ["mod", "theorem", "mul_to_add_submonoid", ["submodule"]], ["add", "theorem", "one_eq_span_one_set", ["submodule"]], ["add", "theorem", "pow_eq_span_pow_set", ["submodule"]], ["add", "theorem", "pow_mem_pow", ["submodule"]], ["add", "theorem", "pow_to_add_submonoid", ["submodule"]], ["add", "theorem", "span_pow", ["submodule"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["add", "theorem", "closure_pow", ["add_submonoid"]], ["add", "theorem", "mem_one", ["add_submonoid"]], ["add", "theorem", "mul_eq_closure_mul_set", ["add_submonoid"]], ["add", "theorem", "nat_cast_mem_one", ["add_submonoid"]], ["add", "theorem", "one_eq_closure", ["add_submonoid"]], ["add", "theorem", "one_eq_closure_one_set", ["add_submonoid"]], ["add", "theorem", "one_eq_mrange", ["add_submonoid"]], ["add", "theorem", "pow_eq_closure_pow_set", ["add_submonoid"]], ["add", "theorem", "pow_subset_pow", ["add_submonoid"]]]}]}, {"timestamp": 1657970983, "sha": "3644fef6", "message": "chore(category_theory): enough_injectives is dual to enough_projectives (#15395)", "changes": [{"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["add", "theorem", "enough_injectives_of_enough_projectives_op", ["category_theory", "injective"]], ["add", "theorem", "enough_projectives_of_enough_injectives_op", ["category_theory", "injective"]]]}]}, {"timestamp": 1657970982, "sha": "6dd5e43c", "message": "feat(measure_theory/function/uniform_integrable): conditional expectations form a uniformly integrable class (#15378)\nUseful for the L1 martingale convergence theorem.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "uniform_integrable_condexp", ["measure_theory", "integrable"]], ["add", "theorem", "snorm_one_condexp_le_snorm", ["measure_theory"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "uniform_integrable_condexp_filtration", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1657970981, "sha": "b8aa28d3", "message": "feat(category_theory): limits of essentially small indexing categories (#15377)", "changes": [{"oldPath": "src/category_theory/essentially_small.lean", "newPath": "src/category_theory/essentially_small.lean", "changes": [["add", "theorem", "essentially_small_of_small", ["category_theory", "discrete"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/essentially_small.lean", "changes": [["add", "theorem", "has_colimits_of_shape_of_essentially_small", ["category_theory", "limits"]], ["add", "theorem", "has_coproducts_of_shape_of_small", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_shape_of_essentially_small", ["category_theory", "limits"]], ["add", "theorem", "has_products_of_shape_of_small", ["category_theory", "limits"]]]}]}, {"timestamp": 1657970980, "sha": "57c7d940", "message": "feat(field_theory/adjoin): The compositum of finitely many finite dimensional intermediate fields is finite dimensional (#15339)\nThis PR adds an instance stating that the compositum of finitely many finite dimensional intermediate fields is finite dimensional. The proof is a bit janky, unfortunately.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["del", "theorem", "finite_dimensional_sup", ["intermediate_field"]], ["mod", "theorem", "le_sup_to_subalgebra", ["intermediate_field"]], ["mod", "theorem", "sup_to_subalgebra", ["intermediate_field"]]]}]}, {"timestamp": 1657970979, "sha": "3d6c3b6d", "message": "feat(geometry/manifold|topology): add simps and ext attributes (#15314)\n* From the sphere eversion project", "changes": [{"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "def", "prod", ["model_with_corners"]], ["add", "def", "apply", ["model_with_corners", "simps"]], ["add", "def", "symm_apply", ["model_with_corners", "simps"]]]}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": [["mod", "def", "tangent_bundle_core", []]]}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["add", "theorem", "to_pretrivialization_injective", ["topological_fiber_bundle", "trivialization"]]]}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["add", "theorem", "to_pretrivialization_injective", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1657970978, "sha": "21a387fe", "message": "feat(algebra/order/monoid_lemmas): add `antitone`, `monotone_on`, and `antitone_on` lemmas (#15267)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["add", "theorem", "const_mul'", ["antitone"]], ["add", "theorem", "mul'", ["antitone"]], ["add", "theorem", "mul_const'", ["antitone"]], ["add", "theorem", "mul_strict_anti'", ["antitone"]], ["add", "theorem", "const_mul'", ["antitone_on"]], ["add", "theorem", "mul'", ["antitone_on"]], ["add", "theorem", "mul_const'", ["antitone_on"]], ["add", "theorem", "mul_strict_anti'", ["antitone_on"]], ["add", "theorem", "const_mul'", ["monotone_on"]], ["add", "theorem", "mul'", ["monotone_on"]], ["add", "theorem", "mul_const'", ["monotone_on"]], ["add", "theorem", "mul_strict_mono'", ["monotone_on"]], ["add", "theorem", "const_mul'", ["strict_anti"]], ["add", "theorem", "mul'", ["strict_anti"]], ["add", "theorem", "mul_antitone'", ["strict_anti"]], ["add", "theorem", "mul_const'", ["strict_anti"]], ["add", "theorem", "const_mul'", ["strict_anti_on"]], ["add", "theorem", "mul'", ["strict_anti_on"]], ["add", "theorem", "mul_antitone'", ["strict_anti_on"]], ["add", "theorem", "mul_const'", ["strict_anti_on"]], ["mod", "theorem", "const_mul'", ["strict_mono"]], ["mod", "theorem", "mul_const'", ["strict_mono"]], ["add", "theorem", "const_mul'", ["strict_mono_on"]], ["add", "theorem", "mul'", ["strict_mono_on"]], ["add", "theorem", "mul_const'", ["strict_mono_on"]], ["add", "theorem", "mul_monotone'", ["strict_mono_on"]]]}]}, {"timestamp": 1657970977, "sha": "4538aeb2", "message": "feat(data/finset/fold): add lemma `fold_max_add` (#15257)\nThe lemma shows that adding inside or outside a \"max-fold\" amounts to the same. It is the folded version of docs#max_add_add_right.", "changes": [{"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": [["add", "theorem", "fold_max_add", ["finset"]]]}]}, {"timestamp": 1657970976, "sha": "624716b7", "message": "feat(ring_theory/tensor_product): `A`-algebra structure on `A' ⊗[R] B`. (#15241)", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["mod", "theorem", "algebra_map_apply", ["algebra", "tensor_product"]], ["add", "def", "include_left_ring_hom", ["algebra", "tensor_product"]], ["add", "def", "product_left_alg_hom", ["algebra", "tensor_product"]], ["mod", "theorem", "product_map_left_apply", ["algebra", "tensor_product"]], ["del", "def", "tensor_algebra_map", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1657970975, "sha": "316d1886", "message": "feat(order/filter): add `map_neg_at_top`, change some assumptions (#15237)\n* add `map_neg_at_top`, `map_neg_at_bot`, `comap_neg_at_top`, and `comap_neg_at_bot`;\n* add `disjoint_pure_at_top`, `disjoint_pure_at_bot`, `not_tendsto_const_at_top`, `not_tendsto_const_at_bot`;\n* more lemmas about `order_iso` and `at_top`/`at_bot` up, no modifications to the code;\n* rename `tendsto_at_top_iff_tends_to_neg_at_bot` to `tendsto_neg_at_top_iff`, swap LHS and RHS, mark as `@[simp]`;\n* rename `tendsto_at_bot_iff_tends_to_neg_at_top` to `tendsto_neg_at_bot_iff`, swap LHS and RHS, mark as `@[simp]`;\n* use `n ≠ 0` instead of `1 ≤ n` in `tendsto_pow_at_top`, `tendsto_const_mul_pow_at_top`, `tendsto_const_mul_pow_at_top_iff`, `tendsto_neg_const_mul_pow_at_top`, `tendsto_neg_const_mul_pow_at_top_iff`.", "changes": [{"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": [["mod", "theorem", "abs_tendsto_at_top", ["polynomial"]], ["mod", "theorem", "tendsto_at_bot_of_leading_coeff_nonpos", ["polynomial"]], ["mod", "theorem", "tendsto_at_top_of_leading_coeff_nonneg", ["polynomial"]]]}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "leading_coeff_neg", ["polynomial"]]]}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "comap_neg_at_bot", ["filter"]], ["add", "theorem", "comap_neg_at_top", ["filter"]], ["add", "theorem", "disjoint_pure_at_bot", ["filter"]], ["add", "theorem", "disjoint_pure_at_top", ["filter"]], ["add", "theorem", "map_neg_at_bot", ["filter"]], ["add", "theorem", "map_neg_at_top", ["filter"]], ["add", "theorem", "not_tendsto_const_at_bot", ["filter"]], ["add", "theorem", "not_tendsto_const_at_top", ["filter"]], ["del", "theorem", "tendsto_at_bot_iff_tends_to_neg_at_top", ["filter"]], ["del", "theorem", "tendsto_at_top_iff_tends_to_neg_at_bot", ["filter"]], ["add", "theorem", "tendsto_const_mul_pow_at_bot_iff", ["filter"]], ["mod", "theorem", "tendsto_const_mul_pow_at_top_iff", ["filter"]], ["add", "theorem", "tendsto_neg_at_bot_iff", ["filter"]], ["add", "theorem", "tendsto_neg_at_top_iff", ["filter"]], ["del", "theorem", "tendsto_neg_const_mul_pow_at_top_iff", ["filter"]], ["mod", "theorem", "tendsto_pow_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "tendsto_const_mul_pow_nhds_iff'", []], ["add", "theorem", "tendsto_const_mul_zpow_at_top_nhds_iff", []], ["del", "theorem", "tendsto_const_mul_zpow_at_top_zero_iff", []], ["mod", "theorem", "tendsto_pow_neg_at_top", []]]}]}, {"timestamp": 1657970974, "sha": "511a9f79", "message": "feat(algebra/gcd_monoid): GCD domains are integrally closed. (#15109)", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["add", "theorem", "extract_gcd", []], ["add", "theorem", "is_unit_gcd_of_eq_mul_gcd", []]]}, {"oldPath": null, "newPath": "src/algebra/gcd_monoid/integrally_closed.lean", "changes": [["add", "theorem", "surj_of_gcd_domain", ["is_localization"]]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["add", "theorem", "dvd_pow_nat_degree_of_aeval_eq_zero", ["polynomial"]], ["add", "theorem", "dvd_pow_nat_degree_of_eval₂_eq_zero", ["polynomial"]], ["add", "theorem", "is_weakly_eisenstein_at", ["polynomial", "scale_roots"]]]}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": [["del", "theorem", "coeff_scale_roots", []], ["del", "theorem", "coeff_scale_roots_nat_degree", []], ["del", "theorem", "degree_scale_roots", []], ["del", "theorem", "monic_scale_roots_iff", []], ["del", "theorem", "nat_degree_scale_roots", []], ["add", "theorem", "coeff_scale_roots", ["polynomial"]], ["add", "theorem", "coeff_scale_roots_nat_degree", ["polynomial"]], ["add", "theorem", "degree_scale_roots", ["polynomial"]], ["add", "theorem", "monic_scale_roots_iff", ["polynomial"]], ["add", "theorem", "nat_degree_scale_roots", ["polynomial"]], ["add", "theorem", "scale_roots_aeval_eq_zero", ["polynomial"]], ["add", "theorem", "scale_roots_aeval_eq_zero_of_aeval_div_eq_zero", ["polynomial"]], ["add", "theorem", "scale_roots_eval₂_eq_zero", ["polynomial"]], ["add", "theorem", "scale_roots_eval₂_eq_zero_of_eval₂_div_eq_zero", ["polynomial"]], ["add", "theorem", "scale_roots_ne_zero", ["polynomial"]], ["add", "theorem", "support_scale_roots_eq", ["polynomial"]], ["add", "theorem", "support_scale_roots_le", ["polynomial"]], ["add", "theorem", "zero_scale_roots", ["polynomial"]], ["del", "theorem", "scale_roots_aeval_eq_zero", []], ["del", "theorem", "scale_roots_aeval_eq_zero_of_aeval_div_eq_zero", []], ["del", "theorem", "scale_roots_eval₂_eq_zero", []], ["del", "theorem", "scale_roots_eval₂_eq_zero_of_eval₂_div_eq_zero", []], ["del", "theorem", "scale_roots_ne_zero", []], ["del", "theorem", "support_scale_roots_eq", []], ["del", "theorem", "support_scale_roots_le", []], ["del", "theorem", "zero_scale_roots", []]]}]}, {"timestamp": 1657970973, "sha": "9becea2d", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add some lemmas about typeclasses (#14761)\n~~Rename some instances for consistency.~~\nSome git messages are from the previous PR. Maybe it's because I performed some improper operations. I didn't find out the way to remove them. Sorry for that.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["del", "theorem", "le_of_le_mul_of_le_one_right'", ["zero_lt"]], ["add", "theorem", "to_mul_pos_reflect_lt", ["zero_lt", "mul_pos_mono"]], ["add", "theorem", "to_mul_pos_strict_mono", ["zero_lt", "mul_pos_mono"]], ["add", "theorem", "mul_pos_mono_iff_mul_pos_reflect_lt", ["zero_lt"]], ["add", "theorem", "mul_pos_mono_iff_mul_pos_strict_mono", ["zero_lt"]], ["add", "theorem", "to_mul_pos_strict_mono", ["zero_lt", "mul_pos_mono_rev"]], ["add", "theorem", "mul_pos_mono_rev_iff_mul_pos_reflect_lt", ["zero_lt"]], ["add", "theorem", "to_mul_pos_mono", ["zero_lt", "mul_pos_reflect_lt"]], ["add", "theorem", "to_mul_pos_mono_rev", ["zero_lt", "mul_pos_reflect_lt"]], ["add", "theorem", "mul_pos_strict_mono_iff_mul_pos_mono_rev", ["zero_lt"]], ["add", "theorem", "to_pos_mul_reflect_lt", ["zero_lt", "pos_mul_mono"]], ["add", "theorem", "to_pos_mul_strict_mono", ["zero_lt", "pos_mul_mono"]], ["add", "theorem", "pos_mul_mono_iff_mul_pos_mono", ["zero_lt"]], ["add", "theorem", "pos_mul_mono_iff_pos_mul_reflect_lt", ["zero_lt"]], ["add", "theorem", "pos_mul_mono_iff_pos_mul_strict_mono", ["zero_lt"]], ["add", "theorem", "to_pos_mul_strict_mono", ["zero_lt", "pos_mul_mono_rev"]], ["add", "theorem", "pos_mul_mono_rev_iff_mul_pos_mono_rev", ["zero_lt"]], ["add", "theorem", "pos_mul_mono_rev_iff_pos_mul_reflect_lt", ["zero_lt"]], ["add", "theorem", "to_pos_mul_mono", ["zero_lt", "pos_mul_reflect_lt"]], ["add", "theorem", "to_pos_mul_mono_rev", ["zero_lt", "pos_mul_reflect_lt"]], ["add", "theorem", "pos_mul_reflect_lt_iff_mul_pos_reflect_lt", ["zero_lt"]], ["add", "theorem", "pos_mul_strict_mono_iff_mul_pos_strict_mono", ["zero_lt"]], ["add", "theorem", "pos_mul_strict_mono_iff_pos_mul_mono_rev", ["zero_lt"]], ["add", "theorem", "le_of_le_mul_of_le_one_right", ["zero_lt", "preorder"]]]}]}, {"timestamp": 1657961764, "sha": "367714d6", "message": "fix(tactic/solve_by_elim): apply_assumption argument parsing (#15394)\nThe optional list of expressions to `apply_assumption` should be parsed interactively. This fixes a bug where `none` would have to be provided before a config object.", "changes": [{"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1657961763, "sha": "8963fcfc", "message": "feat(data/json): helper functions for json serialization (#15207)\nThe key feature here is:\n```lean\n@[derive non_null_json_serializable]\nstructure my_type (yval : bool) :=\n(x : nat)\n(f : fin x)\n(y : bool := tt)\n(h : y = yval)\n```\nwhich generates the obvious serialization to json and deserialization from json of the above type.\nThis makes communicating with other external programs a lot easier, rather than having to manually write code to disassemble json into lean structures.", "changes": [{"oldPath": null, "newPath": "src/data/json.lean", "changes": []}, {"oldPath": null, "newPath": "test/json.lean", "changes": [["add", "structure", "has_default", []], ["add", "structure", "my_type", []], ["add", "structure", "no_fields", []]]}]}, {"timestamp": 1657959210, "sha": "45e412da", "message": "chore(number_theory/number_field): remove duplicate name (#15400)", "changes": [{"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}]}, {"timestamp": 1657946736, "sha": "ced11136", "message": "feat(order/bounded_order): two lemmas about the interaction between monotonicity and map with_bot/top (#15341)\nPulled out of #15294, that I ~plan to~ closed.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "map_le_iff", ["with_bot"]], ["add", "theorem", "map_le_iff", ["with_top"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}]}, {"timestamp": 1657938010, "sha": "68123285", "message": "feat(data/countable): add `countable` typeclass (#15280)\nAlso add a few new operations on `equiv`s.", "changes": [{"oldPath": null, "newPath": "src/data/countable/basic.lean", "changes": [["add", "theorem", "countable_iff_nonempty_embedding", []], ["add", "theorem", "nonempty_embedding_nat", []]]}, {"oldPath": null, "newPath": "src/data/countable/defs.lean", "changes": [["add", "theorem", "of_equiv", ["countable"]], ["add", "theorem", "countable_iff_exists_surjective", []], ["add", "theorem", "countable_iff", ["equiv"]], ["add", "theorem", "exists_surjective_nat", []]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "pprod_congr", ["equiv"]], ["add", "def", "pprod_prod", ["equiv"]], ["add", "def", "prod_pprod", ["equiv"]], ["add", "def", "psum_congr", ["equiv"]], ["add", "def", "psum_sum", ["equiv"]], ["add", "def", "sum_psum", ["equiv"]]]}]}, {"timestamp": 1657926860, "sha": "2dbbe579", "message": "feat(ring_theory/power_series/basic): Add `rescale_X` (#15397)", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "rescale_X", ["power_series"]], ["mod", "theorem", "rescale_neg_one_X", ["power_series"]]]}]}, {"timestamp": 1657926859, "sha": "dc7ab9e7", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): Add some missing API lemmas. (#15205)\nAdd API lemmas about extentionality of `finite_measure` and `probability_measure`, about `0 : finite_measure X`, and about scalar multiplication on `finite_measure`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "smul_to_nnreal", ["ennreal"]]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "coe_fn_smul_apply", ["measure_theory", "finite_measure"]], ["add", "theorem", "extensionality", ["measure_theory", "finite_measure"]], ["add", "theorem", "mass_zero_iff", ["measure_theory", "finite_measure"]], ["add", "theorem", "smul_test_against_nn_apply", ["measure_theory", "finite_measure"]], ["add", "theorem", "mass", ["measure_theory", "finite_measure", "zero"]], ["add", "theorem", "test_against_nn", ["measure_theory", "finite_measure", "zero"]], ["add", "theorem", "test_against_nn_apply", ["measure_theory", "finite_measure", "zero"]], ["add", "theorem", "extensionality", ["measure_theory", "probability_measure"]]]}]}, {"timestamp": 1657926858, "sha": "7c54be86", "message": "feat(group_theory/group_action/sub_mul_action): add the pointwise monoid structure (#15050)", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "algebra_map_mem", ["sub_mul_action"]], ["add", "theorem", "mem_one'", ["sub_mul_action"]], ["add", "theorem", "to_sub_mul_action_one", ["submodule"]]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/sub_mul_action/pointwise.lean", "changes": [["add", "theorem", "coe_mul", ["sub_mul_action"]], ["add", "theorem", "coe_one", ["sub_mul_action"]], ["add", "theorem", "coe_pow", ["sub_mul_action"]], ["add", "theorem", "mem_mul", ["sub_mul_action"]], ["add", "theorem", "mem_one", ["sub_mul_action"]], ["add", "theorem", "subset_coe_one", ["sub_mul_action"]], ["add", "theorem", "subset_coe_pow", ["sub_mul_action"]]]}]}, {"timestamp": 1657926857, "sha": "884dde3b", "message": "feat(category_theory): (co)products and (co)separators (#14880)", "changes": [{"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": [["add", "theorem", "is_coseparator_pi", ["category_theory"]], ["add", "theorem", "is_coseparator_pi_of_is_coseparator", ["category_theory"]], ["add", "theorem", "is_coseparator_prod", ["category_theory"]], ["add", "theorem", "is_coseparator_prod_of_is_coseparator_left", ["category_theory"]], ["add", "theorem", "is_coseparator_prod_of_is_coseparator_right", ["category_theory"]], ["add", "theorem", "is_separator_coprod", ["category_theory"]], ["add", "theorem", "is_separator_coprod_of_is_separator_left", ["category_theory"]], ["add", "theorem", "is_separator_coprod_of_is_separator_right", ["category_theory"]], ["add", "theorem", "is_separator_sigma", ["category_theory"]], ["add", "theorem", "is_separator_sigma_of_is_separator", ["category_theory"]]]}]}, {"timestamp": 1657918123, "sha": "f23205e9", "message": "feat(data/vector/basic): make the recursor work with `induction _ using` syntax (#15383)\nThe `induction` tactic is picky about the order of its arguments, especially when the motive is dependently-typed. Attempting to use `induction v using vector.induction_on` gives the error:\n> invalid user defined recursor, type of the major premise 'v' does not contain the recursor index 'C'\nwhich indicates that the argument order has confused Lean into thinking that the motive is an index.\nThe cause here was that the motive `C` was between the indices (`n`) and the major premise (`v`).", "changes": [{"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}]}, {"timestamp": 1657918122, "sha": "b560d401", "message": "feat(data/sum/basic): `sum.lift_rel` is a subrelation of `sum.lex` (#15358)\nAlso trivial spacing fix.", "changes": [{"oldPath": "src/data/sum/basic.lean", "newPath": "src/data/sum/basic.lean", "changes": [["mod", "theorem", "mono_right", ["sum", "lex"]], ["add", "theorem", "lift_rel_subrelation_lex", ["sum"]]]}]}, {"timestamp": 1657918120, "sha": "7929a63e", "message": "feat(set_theory/zfc): more `quotient` lemmas (#15324)\nIt seems like we decided to use a custom `mk` definition for `Set` instead of `quotient.mk`. As such, we transfer the basic results on quotients to `Set`, in order to aid rewriting.", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["add", "theorem", "eq", ["Set"]], ["add", "theorem", "exact", ["Set"]], ["mod", "theorem", "mk_eq", ["Set"]], ["add", "theorem", "mk_out", ["Set"]], ["add", "theorem", "sound", ["Set"]]]}]}, {"timestamp": 1657909863, "sha": "15da6257", "message": "chore(analysis/locally_convex): golf a proof (#15323)", "changes": [{"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": []}]}, {"timestamp": 1657909862, "sha": "959586cf", "message": "feat(analysis/special_functions/polar_coord): define polar coordinates, polar change of variable formula in integrals (#15258)", "changes": [{"oldPath": null, "newPath": "src/analysis/special_functions/polar_coord.lean", "changes": [["add", "theorem", "has_fderiv_at_polar_coord_symm", []], ["add", "theorem", "integral_comp_polar_coord_symm", []], ["add", "def", "polar_coord", []], ["add", "theorem", "polar_coord_source_ae_eq_univ", []]]}]}, {"timestamp": 1657909860, "sha": "f6e9ec38", "message": "chore(ring_theory/ideal/operations): generalise some typeclasses (#15200)\nUsing the generalisation linter mostly.\nSome more changes are possible surrounding map / comap, but they involve more restructuring, and I want to explore the right definitions of map and comap separately.\nAll changes here are of the form: dropping commutativity, changing domain to no_zero_divisors (i.e. not assuming nontriviality), or dropping subtraction (ring to semiring).", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "mk_ne_zero'", ["associates"]], ["mod", "theorem", "add_eq_sup", ["ideal"]], ["mod", "theorem", "mul_eq_bot", ["ideal"]], ["mod", "theorem", "radical_bot_of_is_domain", ["ideal"]], ["mod", "theorem", "subset_union", ["ideal"]]]}]}, {"timestamp": 1657909859, "sha": "9c8bc915", "message": "feat(linear_algebra/linear_pmap): construct a `linear_pmap` from its graph (#14922)\nDefine a partial linear map from its graph. This is a key step in constructing the closure of an linear operator.", "changes": [{"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "exists_unique_from_graph", ["submodule"]], ["add", "theorem", "mem_graph_to_linear_pmap", ["submodule"]], ["add", "def", "to_linear_pmap", ["submodule"]], ["add", "theorem", "to_linear_pmap_graph_eq", ["submodule"]], ["add", "def", "val_from_graph", ["submodule"]], ["add", "theorem", "val_from_graph_mem", ["submodule"]]]}]}, {"timestamp": 1657900187, "sha": "ecaa2891", "message": "feat(data/finset/basic): lemmas about `filter`, `cons`, and `disj_union` (#15385)\nThe lemma names and statements match the existing multiset versions.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "def", "disj_union", ["finset"]], ["add", "theorem", "disj_union_comm", ["finset"]], ["add", "theorem", "disj_union_empty", ["finset"]], ["add", "theorem", "disj_union_singleton", ["finset"]], ["add", "theorem", "empty_disj_union", ["finset"]], ["add", "theorem", "filter_cons", ["finset"]], ["add", "theorem", "filter_cons_of_neg", ["finset"]], ["add", "theorem", "filter_cons_of_pos", ["finset"]], ["add", "theorem", "filter_disj_union", ["finset"]], ["add", "theorem", "singleton_disj_union", ["finset"]]]}]}, {"timestamp": 1657900186, "sha": "6b2ebac6", "message": "chore(category_theory/limits): clean up splittings of (co)product morphisms (#15382)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": []}]}, {"timestamp": 1657900186, "sha": "c271266b", "message": "feat(ring_theory): the integral closure `C` of `A` is Noetherian over `A` (#15381)\nwhere `A` is an integrally closed Noetherian domain and `C` is the closure in a finite separable extension `L` of `Frac(A)`\nI was going to use this in https://github.com/leanprover-community/mathlib/pull/15315 but it turns out we don't assume separability there. Since it might still be useful elsewhere, I turned it into a new PR.\nThe proof was already in mathlib, as part of showing that the integral closure of a Dedekind domain is Noetherian, so I could just split off the part that dealt with Noetherianness.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "newPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "changes": [["add", "theorem", "is_noetherian", ["is_integral_closure"]]]}]}, {"timestamp": 1657900185, "sha": "30220ebe", "message": "feat(order/rel_iso): relation embedding from empty type (#15372)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "of_is_empty", ["rel_embedding"]]]}]}, {"timestamp": 1657900183, "sha": "d6b861b0", "message": "chore(algebra/order/archimedean): Move material to correct files (#15290)\nMove `round` and some `floor` lemmas to `algebra.order.floor`. Move the `rat.cast` lemmas about `floor` and `ceil` to `data.rat.floor`. Merge a few sections together now that unrelated lemmas are gone.", "changes": [{"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["del", "theorem", "abs_sub_round", []], ["mod", "theorem", "archimedean_iff_nat_le", []], ["mod", "theorem", "archimedean_iff_nat_lt", []], ["mod", "theorem", "archimedean_iff_rat_le", []], ["mod", "theorem", "archimedean_iff_rat_lt", []], ["mod", "theorem", "exists_mem_Ico_zpow", []], ["mod", "theorem", "exists_mem_Ioc_zpow", []], ["mod", "theorem", "exists_nat_pow_near_of_lt_one", []], ["mod", "theorem", "exists_pow_lt_of_lt_one", []], ["mod", "theorem", "exists_rat_gt", []], ["mod", "theorem", "exists_rat_near", []], ["del", "theorem", "cast_fract", ["rat"]], ["del", "theorem", "ceil_cast", ["rat"]], ["del", "theorem", "floor_cast", ["rat"]], ["del", "theorem", "round_cast", ["rat"]], ["del", "def", "round", []], ["del", "theorem", "round_one", []], ["del", "theorem", "round_zero", []], ["del", "theorem", "sub_floor_div_mul_lt", []], ["del", "theorem", "sub_floor_div_mul_nonneg", []]]}, {"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "abs_sub_round", []], ["add", "theorem", "sub_floor_div_mul_lt", ["int"]], ["add", "theorem", "sub_floor_div_mul_nonneg", ["int"]], ["add", "def", "round", []], ["add", "theorem", "round_one", []], ["add", "theorem", "round_zero", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": [["add", "theorem", "cast_fract", ["rat"]], ["add", "theorem", "ceil_cast", ["rat"]], ["add", "theorem", "floor_cast", ["rat"]], ["add", "theorem", "round_cast", ["rat"]]]}]}, {"timestamp": 1657900182, "sha": "8199f671", "message": "feat(ring_theory/power_series/well_known): Coefficients of sin and cos (#15287)\nThis PR adds lemmas for the coefficients of sin and cos.", "changes": [{"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["add", "theorem", "coeff_cos_bit0", ["power_series"]], ["add", "theorem", "coeff_cos_bit1", ["power_series"]], ["add", "theorem", "coeff_sin_bit0", ["power_series"]], ["add", "theorem", "coeff_sin_bit1", ["power_series"]]]}]}, {"timestamp": 1657900181, "sha": "85cd3e60", "message": "feat(category_theory/yoneda): coyoneda.obj_op_op (#14831)", "changes": [{"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["add", "def", "obj_op_op", ["category_theory", "coyoneda"]]]}]}, {"timestamp": 1657893525, "sha": "0807d669", "message": "chore(linear_algebra/alternating): add an is_central_scalar instance (#15359)", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}]}, {"timestamp": 1657893514, "sha": "fc63bdd3", "message": "chore(linear_algebra/matrix/hermitian): move `matrix.conj_transpose_map` to the same file as `matrix.transpose_map` (#15297)\nAlso restates the hypothesis using `function.semiconj` since that has more API and is definitionally easier to work with.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "conj_transpose_map", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": [["del", "theorem", "conj_transpose_map", ["matrix"]]]}]}, {"timestamp": 1657890186, "sha": "1a424e18", "message": "chore(number_theory/modular): add missing lemmas to squeeze simps (#15351)\nI was running into some timeouts in `exists_smul_mem_fd` when making some other changes; this extracts some `simp` calls to standalone lemmas. These lemmas don't have particularly fast proofs either, but the statements are much simpler so will be easier to speed up in future if we need to.\nSimp-normal form in this file seems to aggressively unfold to matrices, so we can't mark these new lemmas `simp`.\nAt some point the simp lemmas for modular forms might want to be revisited.", "changes": [{"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": [["add", "theorem", "T_inv_mul_apply_one", ["modular_group"]], ["add", "theorem", "T_mul_apply_one", ["modular_group"]], ["add", "theorem", "T_pow_mul_apply_one", ["modular_group"]], ["add", "theorem", "im_T_inv_smul", ["modular_group"]], ["add", "theorem", "im_T_smul", ["modular_group"]], ["add", "theorem", "im_T_zpow_smul", ["modular_group"]], ["add", "theorem", "re_T_inv_smul", ["modular_group"]], ["add", "theorem", "re_T_smul", ["modular_group"]], ["add", "theorem", "re_T_zpow_smul", ["modular_group"]]]}]}, {"timestamp": 1657886553, "sha": "ca872b62", "message": "style(set_theory/game/nim): `O` → `o` (#15361)\nThis is the only file that uses uppercase variable names for ordinals - we standardize it to match all the others.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "grundy_value_eq_iff_equiv_nim", ["pgame"]], ["mod", "theorem", "add_equiv_zero_iff_eq", ["pgame", "nim"]], ["mod", "theorem", "add_fuzzy_zero_iff_ne", ["pgame", "nim"]], ["mod", "theorem", "equiv_iff_eq", ["pgame", "nim"]], ["mod", "theorem", "exists_move_left_eq", ["pgame", "nim"]], ["mod", "theorem", "exists_ordinal_move_left_eq", ["pgame", "nim"]], ["mod", "theorem", "grundy_value", ["pgame", "nim"]], ["mod", "theorem", "left_moves_nim", ["pgame", "nim"]], ["mod", "theorem", "move_left_nim'", ["pgame", "nim"]], ["mod", "theorem", "move_left_nim", ["pgame", "nim"]], ["mod", "theorem", "move_left_nim_heq", ["pgame", "nim"]], ["mod", "theorem", "move_right_nim'", ["pgame", "nim"]], ["mod", "theorem", "move_right_nim", ["pgame", "nim"]], ["mod", "theorem", "move_right_nim_heq", ["pgame", "nim"]], ["mod", "theorem", "neg_nim", ["pgame", "nim"]], ["mod", "theorem", "nim_birthday", ["pgame", "nim"]], ["mod", "theorem", "nim_def", ["pgame", "nim"]], ["mod", "theorem", "non_zero_first_wins", ["pgame", "nim"]], ["mod", "theorem", "right_moves_nim", ["pgame", "nim"]], ["mod", "theorem", "to_left_moves_nim_symm_lt", ["pgame", "nim"]], ["mod", "theorem", "to_right_moves_nim_symm_lt", ["pgame", "nim"]]]}]}, {"timestamp": 1657886552, "sha": "ecef6862", "message": "feat(algebra/category/Group): The forgetful-units adjunction between `Group` and `Mon`. (#15330)", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": [["add", "def", "forget₂_CommMon_adj", ["CommGroup"]], ["add", "def", "units", ["CommMon"]], ["add", "def", "forget₂_Mon_adj", ["Group"]], ["add", "def", "units", ["Mon"]]]}]}, {"timestamp": 1657886551, "sha": "863a30af", "message": "feat(category_theory/*/algebra): epi_of_epi and mono_of_mono (#15121)\nThis PR proves that a morphism whose underlying carrier part is an epi/mono, is itself an epi/mono. Migrated and generalised from #LTE.", "changes": [{"oldPath": "src/category_theory/endofunctor/algebra.lean", "newPath": "src/category_theory/endofunctor/algebra.lean", "changes": [["add", "theorem", "epi_of_epi", ["category_theory", "endofunctor", "algebra"]], ["add", "theorem", "mono_of_mono", ["category_theory", "endofunctor", "algebra"]], ["add", "theorem", "epi_of_epi", ["category_theory", "endofunctor", "coalgebra"]], ["add", "theorem", "mono_of_mono", ["category_theory", "endofunctor", "coalgebra"]]]}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["add", "theorem", "algebra_epi_of_epi", ["category_theory", "comonad"]], ["add", "theorem", "algebra_mono_of_mono", ["category_theory", "comonad"]], ["add", "theorem", "algebra_epi_of_epi", ["category_theory", "monad"]], ["add", "theorem", "algebra_mono_of_mono", ["category_theory", "monad"]]]}]}, {"timestamp": 1657882176, "sha": "72d7b4eb", "message": "feat(measure_theory/measure/measure_space): generalize measure.comap (#15343)\nGeneralize comap to functions verifying `injective f ∧ ∀ s, measurable_set s → null_measurable_set (f '' s) μ`.", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "def", "comap", ["measure_theory", "measure"]], ["add", "theorem", "comap_apply₀", ["measure_theory", "measure"]], ["add", "def", "comapₗ", ["measure_theory", "measure"]], ["add", "theorem", "comapₗ_apply", ["measure_theory", "measure"]], ["add", "theorem", "comapₗ_eq_comap", ["measure_theory", "measure"]]]}]}, {"timestamp": 1657882175, "sha": "4f23c9b9", "message": "feat(number_theory/slash_actions): Slash actions class for modular forms (#15007)\nWe define a new class of slash actions which are to be used in the definition of modular forms (see #13250).", "changes": [{"oldPath": null, "newPath": "src/number_theory/modular_forms/slash_actions.lean", "changes": [["add", "def", "slash", ["modular_forms"]], ["add", "theorem", "slash_add", ["modular_forms"]], ["add", "theorem", "slash_mul_one", ["modular_forms"]], ["add", "theorem", "slash_right_action", ["modular_forms"]], ["add", "theorem", "smul_slash", ["modular_forms"]], ["add", "def", "monoid_hom_slash_action", []]]}]}, {"timestamp": 1657877751, "sha": "e166cce6", "message": "chore(analysis/inner_product_space): split slow proof (#15271)\nThis proof times out in the kernel at about 90 000 out of 100 000 heartbeats, and #14894 pushed it over the edge of timing out (except #15251 upped the timeout limits so everything sitll builds at the moment). I don't know enough about the kernel to debug why it doesn't like this proof, but splitting it into a `rw` part and a part that uses defeq seems to fix the timeout (moving it back down to about 60 000 out of 100 000 heartbeats).\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Timeout.20in.20the.20kernel/near/289294804", "changes": [{"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": [["add", "theorem", "linear_isometry_equiv_symm_apply_single_one", ["orthonormal"]]]}]}, {"timestamp": 1657877750, "sha": "fc78e3c1", "message": "feat(category_theory/abelian/*): functors that preserve finite limits and colimits preserve exactness (#14581)\nIf $F$ is a functor between two abelian categories which preserves limits and colimits, then it preserves exactness.", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "map_exact", ["category_theory", "functor"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/images.lean", "changes": [["add", "theorem", "factor_thru_image_comp_hom", ["category_theory", "preserves_image"]], ["add", "theorem", "hom_comp_map_image_ι", ["category_theory", "preserves_image"]], ["add", "theorem", "inv_comp_image_ι_map", ["category_theory", "preserves_image"]], ["add", "def", "iso", ["category_theory", "preserves_image"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "is_image_lift", ["category_theory", "limits", "image"]]]}]}, {"timestamp": 1657868567, "sha": "5e2e8048", "message": "feat(order/bounded_order): `subrelation r s ↔ r ≤ s` (#15357)\nWe have to place the lemma here, since comparing relations requires `has_le Prop`. I haven't made any judgement on whether either of them should be a simp-normal form.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "subrelation_iff_le", []]]}]}, {"timestamp": 1657868566, "sha": "2406dc51", "message": "feat(topology/support): tsupport of product is a subset of tsupport (#15346)", "changes": [{"oldPath": "src/topology/support.lean", "newPath": "src/topology/support.lean", "changes": [["add", "theorem", "tsupport_mul_subset_left", []], ["add", "theorem", "tsupport_mul_subset_right", []]]}]}, {"timestamp": 1657868564, "sha": "daf11179", "message": "feat(field_theory/tower): if `L / K / F` is finite, so is `K / F` (#15303)\nThis result came up in the discussion of #15191, where I couldn't find it. (In the end we didn't up needing it.) I saw we already had finiteness of `L / K` (in fact, for any vector space instead of the field `L`) as `finite_dimensional.right`, so I made the `left` version too.\nAlso use this to provide an instance where `K` is an intermediate field.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": [["add", "theorem", "left", ["finite_dimensional"]]]}]}, {"timestamp": 1657863731, "sha": "2123bc38", "message": "feat(measure_theory/measurable_space_def): add `generate_from_induction` (#15342)\nThis lemma does (almost?) the same thing as `induction (ht : measurable_set[generate_from C] t)`, but the hypotheses in the generated subgoals are much easier to read.", "changes": [{"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "generate_from_induction", ["measurable_space"]]]}]}, {"timestamp": 1657863730, "sha": "0e72a4ed", "message": "feat(data/polynomial/laurent): define `degree` and some API (#15225)\nThis PR introduces the `degree` for Laurent polynomials. It takes values in `with_bot ℤ`and is defined as `f.support.max`.\nIt may make sense to define a \"degree\" on any `add_monoid_algebra` whose value group is `linear_ordered`, but I am only defining `degree` for Laurent polynomials.\nThe PR also proves some API lemmas about support and relationship between the degree of a Laurent polynomial and the degree with polynomials, seen as Laurent polynomials.\nIn future PRs I intend to define also `int_degree`, analogous to `nat_degree` of polynomials.", "changes": [{"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": [["add", "def", "degree", ["laurent_polynomial"]], ["add", "theorem", "degree_C", ["laurent_polynomial"]], ["add", "theorem", "degree_C_ite", ["laurent_polynomial"]], ["add", "theorem", "degree_C_le", ["laurent_polynomial"]], ["add", "theorem", "degree_C_mul_T", ["laurent_polynomial"]], ["add", "theorem", "degree_C_mul_T_ite", ["laurent_polynomial"]], ["add", "theorem", "degree_C_mul_T_le", ["laurent_polynomial"]], ["add", "theorem", "degree_T", ["laurent_polynomial"]], ["add", "theorem", "degree_T_le", ["laurent_polynomial"]], ["add", "theorem", "degree_eq_bot_iff", ["laurent_polynomial"]], ["add", "theorem", "degree_zero", ["laurent_polynomial"]], ["add", "theorem", "support_C_mul_T", ["laurent_polynomial"]], ["add", "theorem", "support_C_mul_T_of_ne_zero", ["laurent_polynomial"]], ["add", "theorem", "to_laurent_support", ["laurent_polynomial"]], ["add", "theorem", "to_laurent_ne_zero", ["polynomial"]]]}]}, {"timestamp": 1657848338, "sha": "09a7f7a1", "message": "refactor(algebra/algebra/subalgebra/basic): Remove `'` from `subalgebra.comap'` (#15349)\nThis PR removes `'` from `subalgebra.comap'`.\n", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["mod", "theorem", "comap_top", ["algebra"]], ["del", "def", "comap'", ["subalgebra"]], ["add", "def", "comap", ["subalgebra"]], ["mod", "theorem", "gc_map_comap", ["subalgebra"]]]}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": [["del", "theorem", "topological_closure_comap'_homeomorph", ["subalgebra"]], ["add", "theorem", "topological_closure_comap_homeomorph", ["subalgebra"]]]}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": [["del", "theorem", "comap'_comp_right_alg_hom_Icc_homeo_I", ["polynomial_functions"]], ["add", "theorem", "comap_comp_right_alg_hom_Icc_homeo_I", ["polynomial_functions"]]]}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/weierstrass.lean", "newPath": "src/topology/continuous_function/weierstrass.lean", "changes": []}]}, {"timestamp": 1657848337, "sha": "8d749e60", "message": "refactor(field_theory/*): Replace weaker `alg_hom.fintype` with stronger `alg_hom.fintype` (#15345)\nMathlib has two instances of `alg_hom.fintype`. The version in `field_theory.fixed` is weaker (it assumes finite-dimensionality of the target). The version in `field_theory.primitive_element` is stronger (it does not assume finite-dimensionality of the target). So why not replace the weaker version by the stronger version?", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["add", "theorem", "aux_inj_roots_of_min_poly", []]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["del", "theorem", "aux_inj_roots_of_min_poly", ["field"]]]}]}, {"timestamp": 1657848336, "sha": "b8b18fa5", "message": "feat(order/complete_boolean_algebra): A frame is distributive (#15340)\n`frame α`/`coframe α` imply `distrib_lattice α`.", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "def", "of_inf_sup_le", ["distrib_lattice"]]]}]}, {"timestamp": 1657848335, "sha": "11bfd9c9", "message": "chore(logic/equiv/basic): remove `nolint` (#15329)", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}]}, {"timestamp": 1657848334, "sha": "6f48d95d", "message": "feat(ring_theory/localization/basic): add `mk_sum` (#15261)\nadd a missing lemma stating that $\\frac{\\sum_i, a\\_i}{b}=\\sum_i\\frac{a_i}b$", "changes": [{"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "def", "mk_add_monoid_hom", ["localization"]], ["add", "theorem", "mk_list_sum", ["localization"]], ["add", "theorem", "mk_multiset_sum", ["localization"]], ["add", "theorem", "mk_sum", ["localization"]]]}]}, {"timestamp": 1657836668, "sha": "635b8585", "message": "doc(logic/equiv/basic): explicitly state functions equivalences are based on (#15354)\nThis should make them more searchable. Also some trivial spacing fixes.", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}]}, {"timestamp": 1657836667, "sha": "466b8922", "message": "feat(analysis/asymptotics/asymptotics): generalize, golf (#15010)\n* add `is_o_iff_nat_mul_le`, `is_o_iff_nat_mul_le'`, `is_o_irrefl`, `is_O.not_is_o`, `is_o.not_is_O`;\n* generalize lemmas about `1 = o(f)`, `1 = O(f)`, `f = o(1)`, `f = O(1)` to `[has_one F] [norm_one_class F]`, add some `@[simp]` attrs;\n* rename `is_O_one_of_tendsto` to `filter.tendsto.is_O_one`;\n* golf some proofs", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "not_is_o", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_tendsto_nhds", ["asymptotics", "is_O"]], ["mod", "theorem", "is_O_const_one", ["asymptotics"]], ["add", "theorem", "is_O_iff_is_bounded_under_le_div", ["asymptotics"]], ["add", "theorem", "is_O_one_iff", ["asymptotics"]], ["del", "theorem", "is_O_one_of_tendsto", ["asymptotics"]], ["mod", "theorem", "is_O_with_const_one", ["asymptotics"]], ["add", "theorem", "is_O_with_inv", ["asymptotics"]], ["add", "theorem", "not_is_O", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_iff_nat_mul_le'", ["asymptotics"]], ["add", "theorem", "is_o_iff_nat_mul_le", ["asymptotics"]], ["add", "theorem", "is_o_iff_nat_mul_le_aux", ["asymptotics"]], ["add", "theorem", "is_o_irrefl'", ["asymptotics"]], ["add", "theorem", "is_o_irrefl", ["asymptotics"]], ["mod", "theorem", "is_o_one_iff", ["asymptotics"]], ["add", "theorem", "is_o_one_left_iff", ["asymptotics"]], ["add", "theorem", "is_O_one", ["filter", "tendsto"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/phragmen_lindelof.lean", "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": []}]}, {"timestamp": 1657821210, "sha": "356f889c", "message": "golf(data/polynomial/degree/definitions): golf three proofs (#15236)\nLemmas `degree_update_le`, `degree_nonneg_iff_ne_zero` and `degree_le_iff_coeff_zero` have shorter proofs.\nAll three lemmas use the same axioms as they did before: \n```lean\npropext\nquot.sound\nclassical.choice\n```\nThe golfing in `degree_le_iff_coeff_zero` is motivated by #15199, where the older version no longer compiles.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}]}, {"timestamp": 1657821209, "sha": "0bea64b5", "message": "feat(ring_theory/integrally_closed): if x is in Frac R such that x^n is in R then x is in R (#12812)", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "pow_iff", ["is_integral"]], ["add", "theorem", "is_integral_of_pow", []]]}, {"oldPath": "src/ring_theory/integrally_closed.lean", "newPath": "src/ring_theory/integrally_closed.lean", "changes": [["add", "theorem", "exists_algebra_map_eq_of_is_integral_pow", ["is_integrally_closed"]], ["add", "theorem", "exists_algebra_map_eq_of_pow_mem_subalgebra", ["is_integrally_closed"]], ["mod", "theorem", "is_integral_iff", ["is_integrally_closed"]]]}]}, {"timestamp": 1657806766, "sha": "f3fac409", "message": "feat(data/fin/basic): add a reflected instance (#15337)\nThis helps with writing tactics to expand fixed-size matrices into their components.\nThis instance is written using the same approach as the `int.has_reflect` instance.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}]}, {"timestamp": 1657806765, "sha": "48b7ad6f", "message": "chore(*): upgrade to lean 3.45.0c (#15325)\nThe `decidable_eq json` instance has moved to core, since it was needed for tests there too.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "test/polyrith.lean", "newPath": "test/polyrith.lean", "changes": []}]}, {"timestamp": 1657806764, "sha": "51f5e6cc", "message": "feat(algebra/module/linear_map): use morphisms class for lemmas about linear [pre]images of `c • S` (#15103)", "changes": [{"oldPath": "src/algebra/module/equiv.lean", "newPath": "src/algebra/module/equiv.lean", "changes": [["del", "theorem", "image_smul_set", ["linear_equiv"]], ["del", "theorem", "image_smul_setₛₗ", ["linear_equiv"]], ["del", "theorem", "preimage_smul_set", ["linear_equiv"]], ["del", "theorem", "preimage_smul_setₛₗ", ["linear_equiv"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "image_smul_set", []], ["add", "theorem", "image_smul_setₛₗ", []], ["del", "theorem", "image_smul_set", ["linear_map"]], ["del", "theorem", "image_smul_setₛₗ", ["linear_map"]], ["del", "theorem", "preimage_smul_set", ["linear_map"]], ["del", "theorem", "preimage_smul_setₛₗ", ["linear_map"]], ["add", "theorem", "preimage_smul_set", []], ["add", "theorem", "preimage_smul_setₛₗ", []]]}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["del", "theorem", "image_smul_set", ["continuous_linear_equiv"]], ["del", "theorem", "image_smul_setₛₗ", ["continuous_linear_equiv"]], ["del", "theorem", "preimage_smul_set", ["continuous_linear_equiv"]], ["del", "theorem", "preimage_smul_setₛₗ", ["continuous_linear_equiv"]], ["del", "theorem", "image_smul_set", ["continuous_linear_map"]], ["del", "theorem", "image_smul_setₛₗ", ["continuous_linear_map"]], ["del", "theorem", "preimage_smul_set", ["continuous_linear_map"]], ["del", "theorem", "preimage_smul_setₛₗ", ["continuous_linear_map"]]]}]}, {"timestamp": 1657802970, "sha": "25706131", "message": "feat(measure_theory/integral/set_integral): add `set_integral_indicator` (#15344)", "changes": [{"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "set_integral_indicator", ["measure_theory"]]]}]}, {"timestamp": 1657791431, "sha": "f3ae2d0d", "message": "feat(measure_theory/constructions/prod): The layercake integral. (#14424)\nProve the layercake formula, a.k.a. Cavalieri's principle, often used in measure theory and probability theory. It will in particular be a part of the proof of the portmanteau theorem.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["del", "theorem", "ae_measurable_zero_measure", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable_zero_measure", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/layercake.lean", "changes": [["add", "theorem", "lintegral_comp_eq_lintegral_meas_le_mul", ["measure_theory"]], ["add", "theorem", "lintegral_comp_eq_lintegral_meas_le_mul_of_measurable", ["measure_theory"]], ["add", "theorem", "lintegral_eq_lintegral_meas_le", ["measure_theory"]], ["add", "theorem", "lintegral_rpow_eq_lintegral_meas_le_mul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": [["add", "theorem", "exists_measurable_nonneg", ["ae_measurable"]], ["add", "theorem", "ae_measurable_Ioi_of_forall_Ioc", []]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["add", "theorem", "measurable_set_graph", []], ["add", "theorem", "measurable_set_region_between_cc", []], ["add", "theorem", "measurable_set_region_between_co", []], ["add", "theorem", "measurable_set_region_between_oc", []]]}]}, {"timestamp": 1657777426, "sha": "073c3ace", "message": "feat(ring_theory): Basic framework for classes of ring homomorphisms (#14966)", "changes": [{"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": [["add", "theorem", "localization_preserves_surjective", []], ["add", "def", "holds_for_localization_away", ["ring_hom"]], ["del", "theorem", "localization_away_of_localization_preserves", ["ring_hom"]], ["add", "theorem", "away", ["ring_hom", "localization_preserves"]], ["add", "def", "of_localization_prime", ["ring_hom"]], ["add", "def", "of_localization_span_target", ["ring_hom"]], ["add", "theorem", "of_localization_span", ["ring_hom", "property_is_local"]], ["add", "theorem", "respects_iso", ["ring_hom", "property_is_local"]], ["add", "structure", "property_is_local", ["ring_hom"]], ["add", "theorem", "surjective_of_localization_span", []]]}, {"oldPath": "src/ring_theory/localization/away.lean", "newPath": "src/ring_theory/localization/away.lean", "changes": [["add", "theorem", "away_of_is_unit_of_bijective", ["is_localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ring_hom_properties.lean", "changes": [["add", "theorem", "cancel_left_is_iso", ["ring_hom", "respects_iso"]], ["add", "theorem", "cancel_right_is_iso", ["ring_hom", "respects_iso"]], ["add", "theorem", "is_localization_away_iff", ["ring_hom", "respects_iso"]], ["add", "def", "respects_iso", ["ring_hom"]], ["add", "theorem", "pushout_inl", ["ring_hom", "stable_under_base_change"]], ["add", "def", "stable_under_base_change", ["ring_hom"]], ["add", "theorem", "respects_iso", ["ring_hom", "stable_under_composition"]], ["add", "def", "stable_under_composition", ["ring_hom"]]]}]}, {"timestamp": 1657770919, "sha": "e479bfbe", "message": "chore(scripts): update nolints.txt (#15332)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1657746691, "sha": "b89df0ab", "message": "chore(set_theory/pgame): remove redundant `dsimp` (#15312)\nThanks to #14660, we no longer need the `dsimp, simp` pattern to prove some results.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1657746689, "sha": "4302cb7e", "message": "chore(data/matrix/block): lemmas about swapping blocks of matrices (#15298)\nAlso makes `equiv.sum_comm` reduce to `equiv.sum_swap` slightly more agressively.", "changes": [{"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "from_blocks_minor_sum_swap_left", ["matrix"]], ["add", "theorem", "from_blocks_minor_sum_swap_right", ["matrix"]], ["add", "theorem", "from_blocks_minor_sum_swap_sum_swap", ["matrix"]]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}]}, {"timestamp": 1657746688, "sha": "5590b0a2", "message": "doc(set_theory/ordinal/cantor_normal_form): document most theorems (#15227)\nThe API around CNF is somewhat hard to wrap around, so we document many of the theorems.", "changes": [{"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": []}]}, {"timestamp": 1657746687, "sha": "5744b50d", "message": "chore(order/order_iso_nat): remove `decidable_pred` assumption from `subtype.order_iso_of_nat` (#15190)\nThis is a `noncomputable def` anyways, so the assumption wasn't really helping anyone.", "changes": [{"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": [["mod", "theorem", "nth_eq_order_iso_of_nat", ["nat"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": [["mod", "def", "order_embedding_of_set", ["nat"]]]}]}, {"timestamp": 1657746686, "sha": "08648056", "message": "feat(data/finset/basic): Add `decidable_nonempty` for finsets. (#15170)\nAlso remove some redundant decidable instances in multiset and list.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/data/bool/all_any.lean", "newPath": "src/data/bool/all_any.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "def", "decidable_exists_multiset", ["multiset"]]]}]}, {"timestamp": 1657746684, "sha": "1e82f5ec", "message": "feat(linear_algebra/projectivization/independence): defines (in)dependence of points in projective space (#14542)\nThis PR only provides definitions and basic lemmas. In an upcoming pull request we use this to prove the axioms for an abstract projective space.", "changes": [{"oldPath": "src/linear_algebra/projective_space/basic.lean", "newPath": "src/linear_algebra/projective_space/basic.lean", "changes": [["add", "theorem", "mk_eq_mk_iff'", ["projectivization"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/projective_space/independence.lean", "changes": [["add", "inductive", "dependent", ["projectivization"]], ["add", "theorem", "dependent_iff", ["projectivization"]], ["add", "theorem", "dependent_iff_not_independent", ["projectivization"]], ["add", "theorem", "dependent_pair_iff_eq", ["projectivization"]], ["add", "inductive", "independent", ["projectivization"]], ["add", "theorem", "independent_iff", ["projectivization"]], ["add", "theorem", "independent_iff_complete_lattice_independent", ["projectivization"]], ["add", "theorem", "independent_iff_not_dependent", ["projectivization"]], ["add", "theorem", "independent_pair_iff_neq", ["projectivization"]]]}]}, {"timestamp": 1657737028, "sha": "f7313156", "message": "feat(topology/local_homeomorph): \"injectivity\" local_homeomorph.prod (#15311)\n* Also some other lemmas about `local_equiv` and `local_homeomorph`\n* From the sphere eversion project", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "prod_eq_prod_iff", ["set"]], ["add", "theorem", "prod_eq_prod_iff_of_nonempty", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall_forall_const", []]]}, {"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": [["add", "theorem", "mem_symm_trans_source", ["local_equiv"]], ["add", "theorem", "trans_apply", ["local_equiv"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "image_source_eq_target", ["local_homeomorph"]], ["add", "theorem", "prod_eq_prod_of_nonempty'", ["local_homeomorph"]], ["add", "theorem", "prod_eq_prod_of_nonempty", ["local_homeomorph"]], ["add", "theorem", "symm_image_target_eq_source", ["local_homeomorph"]], ["add", "theorem", "trans_apply", ["local_homeomorph"]]]}]}, {"timestamp": 1657737027, "sha": "25f60b46", "message": "feat(analysis/calculus/cont_diff): extra lemmas about cont_diff_within_at (#15309)\n* Also some lemmas about `fderiv_within` and `nhds_within`.\n* From the sphere eversion project", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "congr_of_eventually_eq_insert", ["cont_diff_within_at"]], ["add", "theorem", "fderiv_within'", ["cont_diff_within_at"]], ["add", "theorem", "fderiv_within", ["cont_diff_within_at"]], ["add", "theorem", "has_fderiv_within_at_nhds", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_within_at_succ_iff_has_fderiv_within_at_of_mem", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "comp₃", ["fderiv_within"]], ["add", "theorem", "fderiv_within_eq_nhds", ["filter", "eventually_eq"]], ["add", "theorem", "mono_of_mem", ["has_fderiv_within_at"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "nhds_within_le_iff", []]]}]}, {"timestamp": 1657737026, "sha": "51f76d05", "message": "feat(tactic/linear_combination): add parser for `h / a` (#15284)\nAs reported during LFTCM 2022.", "changes": [{"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": []}, {"oldPath": "src/tactic/polyrith.lean", "newPath": "src/tactic/polyrith.lean", "changes": []}, {"oldPath": "test/linear_combination.lean", "newPath": "test/linear_combination.lean", "changes": []}, {"oldPath": "test/polyrith.lean", "newPath": "test/polyrith.lean", "changes": []}]}, {"timestamp": 1657737025, "sha": "be53c7cb", "message": "feat(topology/algebra/order): ⁻¹ continuous for linear ordered fields (#15022)\nCloses #12781.", "changes": [{"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}]}, {"timestamp": 1657737023, "sha": "44999a92", "message": "feat(combinatorics/additive/behrend): Behrend's construction (#14070)\nConstruct large Salem-Spencer sets in `ℕ` using Behrend's construction. The idea is to turn the Euclidean sphere into a discrete set of points in Euclidean space which we then squash onto `ℕ`.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "zero_pow_le_one", []]]}, {"oldPath": null, "newPath": "src/combinatorics/additive/behrend.lean", "changes": [["add", "theorem", "add_salem_spencer_image_sphere", ["behrend"]], ["add", "theorem", "add_salem_spencer_sphere", ["behrend"]], ["add", "def", "box", ["behrend"]], ["add", "theorem", "box_zero", ["behrend"]], ["add", "theorem", "card_box", ["behrend"]], ["add", "theorem", "card_sphere_le_roth_number_nat", ["behrend"]], ["add", "def", "map", ["behrend"]], ["add", "theorem", "map_eq_iff", ["behrend"]], ["add", "theorem", "map_inj_on", ["behrend"]], ["add", "theorem", "map_le_of_mem_box", ["behrend"]], ["add", "theorem", "map_mod", ["behrend"]], ["add", "theorem", "map_monotone", ["behrend"]], ["add", "theorem", "map_succ'", ["behrend"]], ["add", "theorem", "map_succ", ["behrend"]], ["add", "theorem", "map_zero", ["behrend"]], ["add", "theorem", "mem_box", ["behrend"]], ["add", "theorem", "norm_of_mem_sphere", ["behrend"]], ["add", "def", "sphere", ["behrend"]], ["add", "theorem", "sphere_subset_box", ["behrend"]], ["add", "theorem", "sphere_subset_preimage_metric_sphere", ["behrend"]], ["add", "theorem", "sphere_zero_right", ["behrend"]], ["add", "theorem", "sphere_zero_subset", ["behrend"]], ["add", "theorem", "sum_eq", ["behrend"]], ["add", "theorem", "sum_lt", ["behrend"]], ["add", "theorem", "sum_sq_le_of_mem_box", ["behrend"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "pi_finset_empty", ["fintype"]], ["add", "theorem", "pi_finset_singleton", ["fintype"]], ["add", "theorem", "pi_finset_subsingleton", ["fintype"]]]}]}, {"timestamp": 1657730398, "sha": "2084baf2", "message": "feat(set_theory/ordinal/basic): mark `type_fintype` as `simp` (#15194)\nThis PR does the following:\n- move `type_fintype` along with some other lemmas from `set_theory/ordinal/arithmetic.lean` to `set_theory/ordinal/basic.lean`.\n- tag `type_fintype` as `simp`.\n- untag various lemmas as `simp`, since they can now be proved by it.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "theorem", "card_eq_nat", ["ordinal"]], ["del", "theorem", "card_le_nat", ["ordinal"]], ["del", "theorem", "card_lt_nat", ["ordinal"]], ["del", "theorem", "nat_le_card", ["ordinal"]], ["del", "theorem", "nat_lt_card", ["ordinal"]], ["del", "theorem", "type_fin", ["ordinal"]], ["del", "theorem", "type_fintype", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "card_eq_nat", ["ordinal"]], ["add", "theorem", "card_le_nat", ["ordinal"]], ["add", "theorem", "card_lt_nat", ["ordinal"]], ["add", "theorem", "nat_le_card", ["ordinal"]], ["add", "theorem", "nat_lt_card", ["ordinal"]], ["mod", "theorem", "type_eq_one_of_unique", ["ordinal"]], ["mod", "theorem", "type_eq_zero_of_empty", ["ordinal"]], ["add", "theorem", "type_fin", ["ordinal"]], ["add", "theorem", "type_fintype", ["ordinal"]], ["mod", "theorem", "type_pempty", ["ordinal"]], ["mod", "theorem", "type_punit", ["ordinal"]], ["mod", "theorem", "type_unit", ["ordinal"]]]}]}, {"timestamp": 1657730397, "sha": "93e164e8", "message": "refactor(field_theory/intermediate_field): introduce `restrict_scalars` which replaces `lift2` (#15191)\nThis brings the API in line with `submodule` and `subalgebra` by removing `intermediate_field.lift2` and `intermediate_field.has_lift2`, and replacing them with `intermediate_field.restrict_scalars`. This definition is strictly more general than the previous `intermediate_field.lift2` definition was. A few downstream lemma statements have been generalized in the same way.\nThe handful of API lemmas for `restrict_scalars` that this adds were already missing for `lift2`.\n`intermediate_field.lift2_alg_equiv` has been removed since we didn't appear to have anything similar for `subalgebra` or `submodule`, but it's possible I missed it. At any rate, it's only needed in one proof, and we can just use `show` or `refl` instead.\nNote that `(↑x : intermediate_field F E)` is not actually a shorter spelling than `x.restrict_scalars F`, especially when `E` is more than a single character.\nFinally this renames `lift1` to `lift` now that no ambiguity remains.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["mod", "theorem", "adjoin_adjoin_left", ["intermediate_field"]], ["mod", "theorem", "adjoin_simple_adjoin_simple", ["intermediate_field"]], ["mod", "theorem", "adjoin_simple_comm", ["intermediate_field"]], ["del", "theorem", "coe_bot_eq_self", ["intermediate_field"]], ["del", "theorem", "coe_top_eq_top", ["intermediate_field"]], ["add", "theorem", "restrict_scalars_bot_eq_self", ["intermediate_field"]], ["add", "theorem", "restrict_scalars_top", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["mod", "theorem", "of_separable_splitting_field_aux", ["is_galois"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_restrict_scalars", ["intermediate_field"]], ["del", "def", "lift1", ["intermediate_field"]], ["del", "def", "lift2", ["intermediate_field"]], ["del", "def", "lift2_alg_equiv", ["intermediate_field"]], ["del", "theorem", "lift2_algebra_map", ["intermediate_field"]], ["add", "def", "lift", ["intermediate_field"]], ["del", "theorem", "mem_lift2", ["intermediate_field"]], ["add", "theorem", "mem_restrict_scalars", ["intermediate_field"]], ["add", "def", "restrict_scalars", ["intermediate_field"]], ["add", "theorem", "restrict_scalars_injective", ["intermediate_field"]], ["add", "theorem", "restrict_scalars_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "restrict_scalars_to_subfield", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}]}, {"timestamp": 1657720517, "sha": "ed5453cd", "message": "chore(*/enat): rename files (#15245)\nrename `**/enat.lean` to `**/part_enat.lean`.", "changes": [{"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/default.lean", "newPath": "src/algebra/big_operators/default.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/enat.lean", "newPath": "src/algebra/big_operators/part_enat.lean", "changes": []}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/part_enat.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1657720516, "sha": "f8488beb", "message": "fix(algebra/group/units): splitting out `mul_one_class` for group of units (#14923)\nWithout this proposed change, the following example gives a `(deterministic) timeout`:\n```lean\nimport algebra.ring.basic\nexample (R : Type*) [comm_ring R] (a b : Rˣ) : a * (b / a) = b :=\nbegin\n rw mul_div_cancel'_right,\n -- or: `simp`\nend\n```", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": null, "newPath": "test/units.lean", "changes": []}]}, {"timestamp": 1657720514, "sha": "632b0312", "message": "feat(algebra/order/complete_field): `conditionally_complete_linear_ordered_field`, aka the reals (#3292)\nIntroduce a class `conditionally_complete_linear_ordered_field`, which axiomatises the real numbers. Show that there exist a unique ordered ring isomorphism from any two such.\nAdditionally, show there is a unique order ring hom from any archimedean linear ordered field to such a field, giving that the ordered ring homomorphism from the rationals to the reals is unique for instance.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "lt_of_mul_self_lt_mul_self", []]]}, {"oldPath": null, "newPath": "src/algebra/order/complete_field.lean", "changes": [["add", "theorem", "coe_induced_order_ring_iso", ["linear_ordered_field"]], ["add", "theorem", "coe_lt_induced_map_iff", ["linear_ordered_field"]], ["add", "theorem", "coe_mem_cut_map_iff", ["linear_ordered_field"]], ["add", "def", "cut_map", ["linear_ordered_field"]], ["add", "theorem", "cut_map_add", ["linear_ordered_field"]], ["add", "theorem", "cut_map_bdd_above", ["linear_ordered_field"]], ["add", "theorem", "cut_map_coe", ["linear_ordered_field"]], ["add", "theorem", "cut_map_mono", ["linear_ordered_field"]], ["add", "theorem", "cut_map_nonempty", ["linear_ordered_field"]], ["add", "theorem", "cut_map_self", ["linear_ordered_field"]], ["add", "theorem", "exists_mem_cut_map_mul_self_of_lt_induced_map_mul_self", ["linear_ordered_field"]], ["add", "def", "induced_add_hom", ["linear_ordered_field"]], ["add", "def", "induced_map", ["linear_ordered_field"]], ["add", "theorem", "induced_map_add", ["linear_ordered_field"]], ["add", "theorem", "induced_map_induced_map", ["linear_ordered_field"]], ["add", "theorem", "induced_map_inv_self", ["linear_ordered_field"]], ["add", "theorem", "induced_map_mono", ["linear_ordered_field"]], ["add", "theorem", "induced_map_nonneg", ["linear_ordered_field"]], ["add", "theorem", "induced_map_one", ["linear_ordered_field"]], ["add", "theorem", "induced_map_rat", ["linear_ordered_field"]], ["add", "theorem", "induced_map_self", ["linear_ordered_field"]], ["add", "theorem", "induced_map_zero", ["linear_ordered_field"]], ["add", "def", "induced_order_ring_hom", ["linear_ordered_field"]], ["add", "def", "induced_order_ring_iso", ["linear_ordered_field"]], ["add", "theorem", "induced_order_ring_iso_self", ["linear_ordered_field"]], ["add", "theorem", "induced_order_ring_iso_symm", ["linear_ordered_field"]], ["add", "theorem", "le_induced_map_mul_self_of_mem_cut_map", ["linear_ordered_field"]], ["add", "theorem", "lt_induced_map_iff", ["linear_ordered_field"]], ["add", "theorem", "mem_cut_map_iff", ["linear_ordered_field"]]]}]}, {"timestamp": 1657716163, "sha": "1d048c57", "message": "chore(analysis/inner_product_space): move definition of self-adjointness (#15281)\nThe file `analysis/inner_product_space/basic` is way to large and since `is_self_adjoint` will be rephrased in terms of the adjoint, it should be in the `adjoint` file.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "apply_clm", ["inner_product_space", "is_self_adjoint"]], ["add", "def", "clm", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "clm_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "coe_re_apply_inner_self_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "conj_inner_sym", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "continuous", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "restrict_invariant", ["inner_product_space", "is_self_adjoint"]], ["add", "def", "is_self_adjoint", ["inner_product_space"]], ["add", "theorem", "is_self_adjoint_iff_bilin_form", ["inner_product_space"]], ["add", "theorem", "is_self_adjoint_iff_inner_map_self_real", ["inner_product_space"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["del", "theorem", "apply_clm", ["inner_product_space", "is_self_adjoint"]], ["del", "def", "clm", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "clm_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "coe_re_apply_inner_self_apply", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "conj_inner_sym", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "continuous", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "restrict_invariant", ["inner_product_space", "is_self_adjoint"]], ["del", "def", "is_self_adjoint", ["inner_product_space"]], ["del", "theorem", "is_self_adjoint_iff_bilin_form", ["inner_product_space"]], ["del", "theorem", "is_self_adjoint_iff_inner_map_self_real", ["inner_product_space"]]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}]}, {"timestamp": 1657716162, "sha": "2dfa69c1", "message": "feat(ring_theory/rees_algebra): Define the Rees algebra of an ideal. (#15089)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/rees_algebra.lean", "changes": [["add", "theorem", "adjoin_monomial_eq_rees_algebra", []], ["add", "theorem", "mem_rees_algebra_iff", []], ["add", "theorem", "mem_rees_algebra_iff_support", []], ["add", "theorem", "monomial_mem_adjoin_monomial", []], ["add", "theorem", "fg", ["rees_algebra"]], ["add", "theorem", "monomial_mem", ["rees_algebra"]], ["add", "def", "rees_algebra", []]]}]}, {"timestamp": 1657716161, "sha": "8d7f0012", "message": "feat(measure_theory/pmf): lawful monad instance for probability mass function monad (#15066)\nProvide `is_lawful_functor` and `is_lawful_monad` instances for `pmf`. Also switch the `seq` and `map` operations to the ones coming from the `monad` instance.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": [["add", "theorem", "monad_map_eq_map", ["pmf"]], ["add", "theorem", "monad_seq_eq_seq", ["pmf"]]]}, {"oldPath": "src/measure_theory/probability_mass_function/monad.lean", "newPath": "src/measure_theory/probability_mass_function/monad.lean", "changes": [["mod", "theorem", "pure_bind", ["pmf"]]]}]}, {"timestamp": 1657705847, "sha": "83092fb4", "message": "feat(data/matrix/notation): add `!![1, 2; 3, 4]` notation (#14991)\nThis adds `!![1, 2; 3, 4]` as a matlab-like shorthand for `matrix.of ![![1, 2], ![3, 4]]`. This has special support for empty arrays, where `!![,,,]` is a matrix with 0 rows and 3 columns, and `![;;;]` is a matrix with 3 rows and zero columns.", "changes": [{"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "one_fin_three", ["matrix"]], ["mod", "theorem", "one_fin_two", ["matrix"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/reserved_notation.lean", "newPath": "src/tactic/reserved_notation.lean", "changes": []}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1657705845, "sha": "01a18244", "message": "feat(data/polynomial/unit_trinomial): An irreducibility criterion for unit trinomials (#14914)\nThis PR adds an irreducibility criterion for unit trinomials. This is building up to irreducibility of $x^n-x-1$.", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/unit_trinomial.lean", "changes": [["add", "theorem", "card_support_eq_three", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "coeff_is_unit", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "irreducible_aux1", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "irreducible_aux2", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "irreducible_aux3", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "irreducible_of_coprime", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "irreducible_of_is_coprime", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "leading_coeff_is_unit", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "ne_zero", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "not_is_unit", ["polynomial", "is_unit_trinomial"]], ["add", "theorem", "trailing_coeff_is_unit", ["polynomial", "is_unit_trinomial"]], ["add", "def", "is_unit_trinomial", ["polynomial"]], ["add", "theorem", "is_unit_trinomial_iff''", ["polynomial"]], ["add", "theorem", "is_unit_trinomial_iff'", ["polynomial"]], ["add", "theorem", "is_unit_trinomial_iff", ["polynomial"]], ["add", "theorem", "trinomial_def", ["polynomial"]], ["add", "theorem", "trinomial_leading_coeff'", ["polynomial"]], ["add", "theorem", "trinomial_leading_coeff", ["polynomial"]], ["add", "theorem", "trinomial_middle_coeff", ["polynomial"]], ["add", "theorem", "trinomial_mirror", ["polynomial"]], ["add", "theorem", "trinomial_nat_degree", ["polynomial"]], ["add", "theorem", "trinomial_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "trinomial_support", ["polynomial"]], ["add", "theorem", "trinomial_trailing_coeff'", ["polynomial"]], ["add", "theorem", "trinomial_trailing_coeff", ["polynomial"]]]}]}, {"timestamp": 1657705844, "sha": "581b6940", "message": "feat(data/polynomial/erase_lead): Characterization of polynomials of fixed support (#14741)\nThis PR adds a lemma characterizing polynomials of fixed support.", "changes": [{"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "card_support_eq'", ["polynomial"]], ["add", "theorem", "card_support_eq", ["polynomial"]]]}]}, {"timestamp": 1657703369, "sha": "73402033", "message": "feat(information_theory/hamming): add Hamming distance and norm (#14739)\nAdd the Hamming distance, Hamming norm, and a `hamming` type synonym equipped with a normed group instance using the Hamming norm.", "changes": [{"oldPath": null, "newPath": "src/information_theory/hamming.lean", "changes": [["add", "theorem", "eq_of_hamming_dist_eq_zero", []], ["add", "theorem", "dist_eq_hamming_dist", ["hamming"]], ["add", "theorem", "nndist_eq_hamming_dist", ["hamming"]], ["add", "theorem", "nnnorm_eq_hamming_norm", ["hamming"]], ["add", "theorem", "norm_eq_hamming_norm", ["hamming"]], ["add", "def", "of_hamming", ["hamming"]], ["add", "theorem", "of_hamming_add", ["hamming"]], ["add", "theorem", "of_hamming_inj", ["hamming"]], ["add", "theorem", "of_hamming_neg", ["hamming"]], ["add", "theorem", "of_hamming_smul", ["hamming"]], ["add", "theorem", "of_hamming_sub", ["hamming"]], ["add", "theorem", "of_hamming_symm_eq", ["hamming"]], ["add", "theorem", "of_hamming_to_hamming", ["hamming"]], ["add", "theorem", "of_hamming_zero", ["hamming"]], ["add", "def", "to_hamming", ["hamming"]], ["add", "theorem", "to_hamming_add", ["hamming"]], ["add", "theorem", "to_hamming_inj", ["hamming"]], ["add", "theorem", "to_hamming_neg", ["hamming"]], ["add", "theorem", "to_hamming_of_hamming", ["hamming"]], ["add", "theorem", "to_hamming_smul", ["hamming"]], ["add", "theorem", "to_hamming_sub", ["hamming"]], ["add", "theorem", "to_hamming_symm_eq", ["hamming"]], ["add", "theorem", "to_hamming_zero", ["hamming"]], ["add", "def", "hamming", []], ["add", "def", "hamming_dist", []], ["add", "theorem", "hamming_dist_comm", []], ["add", "theorem", "hamming_dist_comp", []], ["add", "theorem", "hamming_dist_comp_le_hamming_dist", []], ["add", "theorem", "hamming_dist_eq_hamming_norm", []], ["add", "theorem", "hamming_dist_eq_zero", []], ["add", "theorem", "hamming_dist_le_card_fintype", []], ["add", "theorem", "hamming_dist_lt_one", []], ["add", "theorem", "hamming_dist_ne_zero", []], ["add", "theorem", "hamming_dist_nonneg", []], ["add", "theorem", "hamming_dist_pos", []], ["add", "theorem", "hamming_dist_self", []], ["add", "theorem", "hamming_dist_smul", []], ["add", "theorem", "hamming_dist_smul_le_hamming_dist", []], ["add", "theorem", "hamming_dist_triangle", []], ["add", "theorem", "hamming_dist_triangle_left", []], ["add", "theorem", "hamming_dist_triangle_right", []], ["add", "theorem", "hamming_dist_zero_left", []], ["add", "theorem", "hamming_dist_zero_right", []], ["add", "def", "hamming_norm", []], ["add", "theorem", "hamming_norm_comp", []], ["add", "theorem", "hamming_norm_comp_le_hamming_norm", []], ["add", "theorem", "hamming_norm_eq_zero", []], ["add", "theorem", "hamming_norm_le_card_fintype", []], ["add", "theorem", "hamming_norm_lt_one", []], ["add", "theorem", "hamming_norm_ne_zero_iff", []], ["add", "theorem", "hamming_norm_nonneg", []], ["add", "theorem", "hamming_norm_pos_iff", []], ["add", "theorem", "hamming_norm_smul", []], ["add", "theorem", "hamming_norm_smul_le_hamming_norm", []], ["add", "theorem", "hamming_norm_zero", []], ["add", "theorem", "hamming_zero_eq_dist", []], ["add", "theorem", "swap_hamming_dist", []]]}]}, {"timestamp": 1657692824, "sha": "b06e32c2", "message": "chore(scripts): update nolints.txt (#15293)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1657692823, "sha": "5cb17dd1", "message": "refactor(logic/is_empty): tag `is_empty.forall_iff` and `is_empty.exists_iff` as `simp` (#14660)\nWe tag the lemmas `forall_iff` and `exists_iff` on empty types as `simp`. We remove `forall_pempty`, `exists_pempty`, `forall_false_left`, and `exists_false_left` due to being redundant.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": []}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": []}, {"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": []}, {"oldPath": "src/data/rbtree/basic.lean", "newPath": "src/data/rbtree/basic.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "dite_eq_iff", []], ["mod", "theorem", "dite_eq_left_iff", []], ["mod", "theorem", "dite_eq_right_iff", []], ["del", "theorem", "exists_false_left", []], ["del", "theorem", "exists_pempty", []], ["del", "theorem", "forall_false_left", []], ["del", "theorem", "forall_pempty", []]]}, {"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": [["mod", "theorem", "exists_iff", ["is_empty"]], ["mod", "theorem", "forall_iff", ["is_empty"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/partition/finpartition.lean", "newPath": "src/order/partition/finpartition.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/hitting_time.lean", "changes": []}]}, {"timestamp": 1657680033, "sha": "ea13c1cf", "message": "refactor(topology/subset_properties): reformulate `is_clopen_b{Union,Inter}` in terms of `set.finite` (#15272)\nThis way it mirrors `is_open_bInter`/`is_closed_bUnion`. Also add `is_clopen.prod`.", "changes": [{"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "prod", ["is_clopen"]], ["mod", "theorem", "is_clopen_bInter", []], ["add", "theorem", "is_clopen_bInter_finset", []], ["mod", "theorem", "is_clopen_bUnion", []], ["add", "theorem", "is_clopen_bUnion_finset", []]]}]}, {"timestamp": 1657680032, "sha": "2a325960", "message": "feat(data/finsupp/basic): graph of a finitely supported function (#15197)\nWe define the graph of a finitely supported function, i.e. the finset of input/output pairs, and prove basic results.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "apply_eq_of_mem_graph", ["finsupp"]], ["add", "def", "graph", ["finsupp"]], ["add", "theorem", "graph_eq_empty", ["finsupp"]], ["add", "theorem", "graph_inj", ["finsupp"]], ["add", "theorem", "graph_injective", ["finsupp"]], ["add", "theorem", "graph_zero", ["finsupp"]], ["add", "theorem", "image_fst_graph", ["finsupp"]], ["add", "theorem", "mem_graph_iff", ["finsupp"]], ["add", "theorem", "mk_mem_graph", ["finsupp"]], ["add", "theorem", "mk_mem_graph_iff", ["finsupp"]], ["add", "theorem", "not_mem_graph_snd_zero", ["finsupp"]]]}]}, {"timestamp": 1657680031, "sha": "c6014bd2", "message": "feat(algebra/parity): more general odd.pos (#15186)\nThe old version of this lemma (added in #13040) was only for ℕ and didn't allow dot notation. We remove this and add a version for `canonically_ordered_comm_semiring`s, and if the definition of `odd` changes, this will also work for `canononically_ordered_add_monoid`s.", "changes": [{"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["add", "theorem", "pos", ["odd"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["del", "theorem", "pos_of_odd", ["nat"]]]}]}, {"timestamp": 1657670441, "sha": "ede73b25", "message": "refactor(topology/separation): rename `regular_space` to `t3_space` (#15169)\nI'm going to add a version of `regular_space` without `t0_space` and prove, e.g., that any uniform space is a regular space in this sense. To do this, I need to rename the existing `regular_space`.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane/topology.lean", "newPath": "src/analysis/complex/upper_half_plane/topology.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": [["mod", "theorem", "nhds_basis_closed_balanced", []]]}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["del", "theorem", "regular_space", ["topological_group"]], ["add", "theorem", "t3_space", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "prod_fiberwise", ["has_sum"]], ["mod", "theorem", "sigma", ["has_sum"]], ["mod", "theorem", "sigma_of_has_sum", ["has_sum"]], ["mod", "theorem", "sigma'", ["summable"]], ["mod", "theorem", "tsum_comm'", []], ["mod", "theorem", "tsum_prod'", []], ["mod", "theorem", "tsum_sigma'", []]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/extend_from.lean", "newPath": "src/topology/algebra/order/extend_from.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["mod", "theorem", "continuous_at_extend", ["dense_inducing"]], ["mod", "theorem", "continuous_extend", ["dense_inducing"]]]}, {"oldPath": "src/topology/extend_from.lean", "newPath": "src/topology/extend_from.lean", "changes": [["mod", "theorem", "continuous_extend_from", []], ["mod", "theorem", "continuous_on_extend_from", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": [["del", "theorem", "metrizable_space_of_regular_second_countable", ["topological_space"]], ["add", "theorem", "metrizable_space_of_t3_second_countable", ["topological_space"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "closed_nhds_basis", []], ["mod", "theorem", "disjoint_nested_nhds", []], ["mod", "theorem", "exists_compact_between", []], ["mod", "theorem", "exists_open_between_and_is_compact_closure", []], ["mod", "theorem", "nhds_is_closed", []], ["del", "theorem", "normal_space_of_regular_second_countable", []], ["add", "theorem", "normal_space_of_t3_second_countable", []], ["mod", "theorem", "exists_closure_subset", ["topological_space", "is_topological_basis"]], ["mod", "theorem", "nhds_basis_closure", ["topological_space", "is_topological_basis"]]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1657670440, "sha": "6c351a8f", "message": "refactor(data/matrix/basic): add matrix.of for type casting (#14992)\nWithout this, it is easier to get confused between matrix and pi types, which have different multiplication operators.\nWith this in place, we can have a special matrix notation that actually produces terms of type `matrix`.", "changes": [{"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "map", ["matrix"]], ["add", "theorem", "neg_of", ["matrix"]], ["add", "def", "of", ["matrix"]], ["add", "theorem", "of_add_of", ["matrix"]], ["add", "theorem", "of_apply", ["matrix"]], ["add", "theorem", "of_sub_of", ["matrix"]], ["add", "theorem", "of_symm_apply", ["matrix"]], ["add", "theorem", "of_zero", ["matrix"]], ["add", "theorem", "smul_of", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "cons_mul", ["matrix"]], ["mod", "theorem", "cons_val'", ["matrix"]], ["mod", "theorem", "cons_vec_mul", ["matrix"]], ["mod", "theorem", "head_transpose", ["matrix"]], ["mod", "theorem", "head_val'", ["matrix"]], ["mod", "theorem", "smul_mat_cons", ["matrix"]], ["mod", "theorem", "tail_transpose", ["matrix"]], ["mod", "theorem", "tail_val'", ["matrix"]], ["mod", "theorem", "transpose_empty_cols", ["matrix"]], ["mod", "theorem", "transpose_empty_rows", ["matrix"]], ["mod", "theorem", "vec_mul_cons", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/bilinear_form.lean", "newPath": "src/linear_algebra/matrix/bilinear_form.lean", "changes": [["add", "theorem", "to_matrix_aux_apply", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["del", "theorem", "det_fin_two_mk", ["matrix"]], ["add", "theorem", "det_fin_two_of", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["mod", "theorem", "coe_subsingleton", ["equiv", "perm"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["mod", "theorem", "trace_matrix_def", ["algebra"]]]}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1657662205, "sha": "834488ee", "message": "feat(topology/maps): more `iff` lemmas (#15165)\n* add `inducing_iff` and `inducing_iff_nhds`;\n* add `embedding_iff`;\n* add `open_embedding_iff_embedding_open` and `open_embedding_iff_continuous_injective_open`;\n* add `open_embedding.is_open_map_iff`;\n* reorder `open_embedding_iff_open_embedding_compose` and `open_embedding_of_open_embedding_compose`, golf.", "changes": [{"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "structure", "embedding", []], ["add", "theorem", "inducing_iff_nhds", []], ["add", "theorem", "is_open_map_iff", ["open_embedding"]], ["add", "theorem", "of_comp", ["open_embedding"]], ["add", "theorem", "of_comp_iff", ["open_embedding"]], ["add", "theorem", "open_embedding_iff_continuous_injective_open", []], ["add", "theorem", "open_embedding_iff_embedding_open", []], ["del", "theorem", "open_embedding_iff_open_embedding_compose", []], ["del", "theorem", "open_embedding_of_open_embedding_compose", []]]}]}, {"timestamp": 1657662204, "sha": "7bd47556", "message": "feat(analysis/special_functions/pow): drop an assumption in `is_o_log_rpow_rpow_at_top` (#15164)\nDrop an unneeded assumption in `is_o_log_rpow_rpow_at_top`, add a few variants.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "is_o_abs_log_rpow_rpow_nhds_zero", []], ["add", "theorem", "is_o_log_rpow_nhds_zero", []], ["mod", "theorem", "is_o_log_rpow_rpow_at_top", []], ["add", "theorem", "tendsto_log_div_rpow_nhds_zero", []], ["add", "theorem", "tensdto_log_mul_rpow_nhds_zero", []]]}]}, {"timestamp": 1657662203, "sha": "3543262a", "message": "feat(ring_theory/bezout): Define Bézout rings. (#15091)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/bezout.lean", "changes": [["add", "theorem", "is_bezout", ["function", "surjective"]], ["add", "theorem", "dvd_gcd", ["is_bezout"]], ["add", "def", "gcd", ["is_bezout"]], ["add", "theorem", "gcd_dvd_left", ["is_bezout"]], ["add", "theorem", "gcd_dvd_right", ["is_bezout"]], ["add", "theorem", "gcd_eq_sum", ["is_bezout"]], ["add", "theorem", "iff_span_pair_is_principal", ["is_bezout"]], ["add", "theorem", "span_gcd", ["is_bezout"]], ["add", "theorem", "tfae", ["is_bezout"]], ["add", "def", "to_gcd_domain", ["is_bezout"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_iff_fg_well_founded", []], ["add", "theorem", "fg_induction", ["submodule"]]]}]}, {"timestamp": 1657662202, "sha": "ece3044a", "message": "feat(algebra/ring/{pi, prod, opposite}): add basic defs for non_unital_ring_hom (#13958)\nThe defs added mimic the corresponding ones for `ring_hom`, wherever possible.\n- [x] depends on: #13956", "changes": [{"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": [["add", "def", "from_opposite", ["non_unital_ring_hom"]], ["add", "def", "op", ["non_unital_ring_hom"]], ["add", "def", "to_opposite", ["non_unital_ring_hom"]], ["add", "def", "unop", ["non_unital_ring_hom"]]]}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": [["add", "def", "const_non_unital_ring_hom", ["pi"]], ["add", "def", "eval_non_unital_ring_hom", ["pi"]], ["add", "theorem", "non_unital_ring_hom_injective", ["pi"]]]}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": [["add", "theorem", "coe_fst", ["non_unital_ring_hom"]], ["add", "theorem", "coe_prod_map", ["non_unital_ring_hom"]], ["add", "theorem", "coe_snd", ["non_unital_ring_hom"]], ["add", "def", "fst", ["non_unital_ring_hom"]], ["add", "theorem", "fst_comp_prod", ["non_unital_ring_hom"]], ["add", "theorem", "prod_apply", ["non_unital_ring_hom"]], ["add", "theorem", "prod_comp_prod_map", ["non_unital_ring_hom"]], ["add", "def", "prod_map", ["non_unital_ring_hom"]], ["add", "theorem", "prod_map_def", ["non_unital_ring_hom"]], ["add", "theorem", "prod_unique", ["non_unital_ring_hom"]], ["add", "def", "snd", ["non_unital_ring_hom"]], ["add", "theorem", "snd_comp_prod", ["non_unital_ring_hom"]]]}]}, {"timestamp": 1657653538, "sha": "55db0722", "message": "chore(data/set/finite): golf some proofs (#15273)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_eq_range_psigma", ["set"]]]}]}, {"timestamp": 1657653537, "sha": "7251bbf7", "message": "feat(analysis/special_functions/trigonometric/angle): equality of twice angles (#14988)\nAdd lemmas about equality of twice `real.angle` values (i.e. equality\nas angles modulo π).", "changes": [{"oldPath": null, "newPath": "src/algebra/char_zero/quotient.lean", "changes": [["add", "theorem", "nsmul_mem_zmultiples_iff_exists_sub_div", ["add_subgroup"]], ["add", "theorem", "zsmul_mem_zmultiples_iff_exists_sub_div", ["add_subgroup"]], ["add", "theorem", "zmultiples_nsmul_eq_nsmul_iff", ["quotient_add_group"]], ["add", "theorem", "zmultiples_zsmul_eq_zsmul_iff", ["quotient_add_group"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "nsmul_eq_iff", ["real", "angle"]], ["add", "theorem", "two_nsmul_eq_iff", ["real", "angle"]], ["add", "theorem", "two_nsmul_eq_zero_iff", ["real", "angle"]], ["add", "theorem", "two_zsmul_eq_iff", ["real", "angle"]], ["add", "theorem", "two_zsmul_eq_zero_iff", ["real", "angle"]], ["add", "theorem", "zsmul_eq_iff", ["real", "angle"]]]}]}, {"timestamp": 1657643950, "sha": "89a80e67", "message": "feat(data/nat/parity): `nat.bit1_div_bit0` (#15268)\nThis PR adds `nat.bit1_div_bit0` and related lemmas. This came up when working with the power series of sin.", "changes": [{"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "bit0_div_bit0", ["nat"]], ["add", "theorem", "bit0_div_two", ["nat"]], ["add", "theorem", "bit1_div_bit0", ["nat"]], ["add", "theorem", "bit1_div_two", ["nat"]]]}]}, {"timestamp": 1657643949, "sha": "9c400932", "message": "chore(*): improve some definitional equalities (#15083)\n* add `set.mem_diagonal_iff`, move `simp` from `set.mem_diagonal`;\n* add `@[simp]` to `set.prod_subset_compl_diagonal_iff_disjoint`;\n* redefine `sum.map` in terms of `sum.elim`, add `sum.map_inl` and `sum.map_inr`;\n* redefine `sum.swap` in terms of `sum.elim`, add `sum.swap_inl` and `sum.swap_inr`;\n* use `lift_rel_swap_iff` to prove `swap_le_swap` and `swap_lt_swap`;\n* redefine `equiv.sum_prod_distrib` and `equiv.sigma_sum_distrib` in terms of `sum.elim` and `sum.map`;\n* add `filter.compl_diagonal_mem_prod`;\n* rename `continuous_sum_rec` to `continuous.sum_elim`, use `sum.elim` in the statement;\n* add `continuous.sum_map`;\n* golf `homeomorph.sum_congr` and `homeomorph.sum_prod_distrib`.", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["mod", "theorem", "mem_diagonal", ["set"]], ["add", "theorem", "mem_diagonal_iff", ["set"]], ["mod", "theorem", "prod_subset_compl_diagonal_iff_disjoint", ["set"]]]}, {"oldPath": "src/data/sum/basic.lean", "newPath": "src/data/sum/basic.lean", "changes": [["mod", "def", "swap", ["sum"]], ["add", "theorem", "swap_inl", ["sum"]], ["add", "theorem", "swap_inr", ["sum"]]]}, {"oldPath": "src/data/sum/order.lean", "newPath": "src/data/sum/order.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "theorem", "prod_sum_distrib_symm_apply_left", ["equiv"]], ["add", "theorem", "prod_sum_distrib_symm_apply_right", ["equiv"]], ["add", "theorem", "sum_prod_distrib_symm_apply_left", ["equiv"]], ["add", "theorem", "sum_prod_distrib_symm_apply_right", ["equiv"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "compl_diagonal_mem_prod", ["filter"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "sum_elim", ["continuous"]], ["add", "theorem", "sum_map", ["continuous"]], ["del", "theorem", "continuous_sum_rec", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}]}, {"timestamp": 1657643948, "sha": "eb091f87", "message": "feat(data/nat/basic): add `strong_sub_recursion` and `pincer_recursion` (#15061)\nAdding two recursion principles for `P : ℕ → ℕ → Sort*`\n`strong_sub_recursion`: if for all `a b : ℕ` we can extend `P` from the rectangle strictly below `(a,b)` to `P a b`, then we have `P n m` for all `n m : ℕ`.\n`pincer_recursion`: if we have `P i 0` and `P 0 i` for all `i : ℕ`, and for any `x y : ℕ` we can extend `P` from `(x,y+1)` and `(x+1,y)` to `(x+1,y+1)` then we have `P n m` for all `n m : ℕ`.\n`strong_sub_recursion` is adapted by @vihdzp from @CBirkbeck 's #14828", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "pincer_recursion", ["nat"]], ["add", "def", "strong_sub_recursion", ["nat"]]]}]}, {"timestamp": 1657636635, "sha": "13f04ec6", "message": "feat(set_theory/game/pgame): strengthen `lf_or_equiv_of_le` to `lt_or_equiv_of_le` (#15255)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "theorem", "lf_or_equiv_of_le", ["pgame"]], ["add", "theorem", "lt_or_equiv_of_le", ["pgame"]]]}]}, {"timestamp": 1657636634, "sha": "0d659de3", "message": "feat(algebra/module/torsion): `R/I`-module structure on `M/IM`. (#15092)", "changes": [{"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": []}]}, {"timestamp": 1657636633, "sha": "fef5124e", "message": "feat(order/order_iso_nat): generalize `well_founded.monotone_chain_condition` to preorders (#15073)\nWe also clean up the spacing throughout the file.", "changes": [{"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": [["mod", "theorem", "exists_increasing_or_nonincreasing_subseq'", []], ["mod", "theorem", "exists_increasing_or_nonincreasing_subseq", []], ["mod", "theorem", "exists_subseq_of_forall_mem_union", ["nat"]], ["mod", "theorem", "order_iso_of_nat_apply", ["nat", "subtype"]], ["mod", "def", "nat_gt", ["rel_embedding"]], ["mod", "theorem", "nat_lt_apply", ["rel_embedding"]], ["add", "theorem", "monotone_chain_condition'", ["well_founded"]], ["mod", "theorem", "monotone_chain_condition", ["well_founded"]], ["mod", "theorem", "supr_eq_monotonic_sequence_limit", ["well_founded"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}]}, {"timestamp": 1657633552, "sha": "119e166b", "message": "feat(representation_theory/character): formula for the dimension of the invariants in terms of the character (#15084)", "changes": [{"oldPath": "src/representation_theory/character.lean", "newPath": "src/representation_theory/character.lean", "changes": [["add", "theorem", "average_char_eq_finrank_invariants", ["fdRep"]]]}, {"oldPath": "src/representation_theory/invariants.lean", "newPath": "src/representation_theory/invariants.lean", "changes": [["del", "theorem", "average_def", ["group_algebra"]]]}]}, {"timestamp": 1657629998, "sha": "aadba9b2", "message": "feat(order/well_founded_set): any relation is well-founded on `Ø` (#15266)", "changes": [{"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["mod", "theorem", "is_pwo_empty", ["set"]], ["add", "theorem", "is_wf_empty", ["set"]], ["add", "theorem", "partially_well_ordered_on_empty", ["set"]], ["add", "theorem", "well_founded_on_empty", ["set"]]]}]}, {"timestamp": 1657629997, "sha": "6c5e9fe2", "message": "feat(set_theory/game/pgame): `is_option (-x) (-y) ↔ is_option x y` (#15256)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "is_option_neg", ["pgame"]], ["add", "theorem", "is_option_neg_neg", ["pgame"]]]}]}, {"timestamp": 1657629996, "sha": "087bc1f9", "message": "feat(set_theory/game/pgame): add `equiv.comm` (#15254)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1657629995, "sha": "2bca4d61", "message": "chore(set_theory/ordinal/cantor_normal_form): mark `CNF` as `pp_nodot` (#15228)\n`b.CNF o` doesn't make much sense, since `b` is the base argument rather than the main argument.\nThe existing lemmas all use the `CNF b o` spelling anyway.", "changes": [{"oldPath": "src/set_theory/ordinal/cantor_normal_form.lean", "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": [["mod", "def", "CNF", ["ordinal"]]]}]}, {"timestamp": 1657627518, "sha": "8284c00e", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add missing lemmas (#14770)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "lt_mul_of_one_lt_left", ["zero_lt"]], ["add", "theorem", "lt_mul_of_one_lt_right", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_one_left", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_one_right", ["zero_lt"]]]}]}, {"timestamp": 1657618823, "sha": "30daa3c0", "message": "chore(logic/is_empty): add lemmas for subtype, sigma, and psigma (#15134)\nThis reorders the nonempty lemmas to put `sigma` next to `psigma`. The resulting `is_empty` and `nonempty` lemmas are now in the same order.", "changes": [{"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": [["add", "theorem", "is_empty_Prop", []], ["add", "theorem", "is_empty_plift", []], ["add", "theorem", "is_empty_psigma", []], ["add", "theorem", "is_empty_sigma", []], ["add", "theorem", "is_empty_subtype", []], ["add", "theorem", "is_empty_ulift", []]]}, {"oldPath": "src/logic/nonempty.lean", "newPath": "src/logic/nonempty.lean", "changes": []}]}, {"timestamp": 1657615491, "sha": "a8fdd990", "message": "feat(probability/moments): Chernoff bound on the upper/lower tail of a real random variable (#15129)\nFor `t` nonnegative such that the cgf exists, `ℙ(ε ≤ X) ≤ exp(-t*ε + cgf X ℙ t)`. We prove a similar result for the lower tail, as well as two corresponding versions using mgf instead of cgf.", "changes": [{"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "le_exp_log", ["real"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "mul_meas_ge_le_integral_of_nonneg", ["measure_theory"]]]}, {"oldPath": "src/probability/moments.lean", "newPath": "src/probability/moments.lean", "changes": [["mod", "def", "cgf", ["probability_theory"]], ["add", "theorem", "cgf_neg", ["probability_theory"]], ["mod", "theorem", "cgf_undef", ["probability_theory"]], ["mod", "theorem", "cgf_zero'", ["probability_theory"]], ["mod", "theorem", "cgf_zero_fun", ["probability_theory"]], ["add", "theorem", "measure_ge_le_exp_cgf", ["probability_theory"]], ["add", "theorem", "measure_ge_le_exp_mul_mgf", ["probability_theory"]], ["add", "theorem", "measure_le_le_exp_cgf", ["probability_theory"]], ["add", "theorem", "measure_le_le_exp_mul_mgf", ["probability_theory"]], ["mod", "def", "mgf", ["probability_theory"]], ["mod", "theorem", "mgf_const'", ["probability_theory"]], ["mod", "theorem", "mgf_const", ["probability_theory"]], ["add", "theorem", "mgf_neg", ["probability_theory"]], ["mod", "theorem", "mgf_pos'", ["probability_theory"]], ["mod", "theorem", "mgf_pos", ["probability_theory"]], ["mod", "theorem", "mgf_undef", ["probability_theory"]]]}]}, {"timestamp": 1657612238, "sha": "0039a198", "message": "feat(probability/independence): two tuples indexed by disjoint subsets of an independent family of r.v. are independent (#15131)\nIf `f` is a family of independent random variables and `S,T` are two disjoint finsets, then we have `indep_fun (λ a (i : S), f i a) (λ a (i : T), f i a) μ`.\nAlso golf `indep_fun_iff_measure_inter_preimage_eq_mul` and add its `Indep` version: `Indep_fun_iff_measure_inter_preimage_eq_mul`.", "changes": [{"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": [["add", "theorem", "comap", ["is_pi_system"]]]}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["add", "theorem", "indep_fun", ["probability_theory", "Indep_fun"]], ["add", "theorem", "indep_fun_finset", ["probability_theory", "Indep_fun"]], ["add", "theorem", "Indep_fun_iff_measure_inter_preimage_eq_mul", ["probability_theory"]]]}]}, {"timestamp": 1657598172, "sha": "d6d3d61e", "message": "feat(tactic/lint): add a linter for `[fintype _]` assumptions (#15202)\nAdopted from the `decidable` linter.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1657598171, "sha": "423a8b92", "message": "feat(tactic/polyrith): a tactic using Sage to solve polynomial equalities with hypotheses (#14878)\nCreated a new tactic called polyrith that solves polynomial equalities through polynomial arithmetic on the hypotheses/proof terms. Similar to how linarith solves linear equalities through linear arithmetic on the hypotheses/proof terms.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "scripts/polyrith_sage.py", "changes": []}, {"oldPath": null, "newPath": "scripts/polyrith_sage_helper.py", "changes": []}, {"oldPath": "src/data/buffer/parser/numeral.lean", "newPath": "src/data/buffer/parser/numeral.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/polyrith.lean", "changes": [["add", "inductive", "poly", ["polyrith"]]]}, {"oldPath": null, "newPath": "test/polyrith.lean", "changes": []}]}, {"timestamp": 1657595684, "sha": "1f3c2c09", "message": "chore(set_theory/game/ordinal): minor golf (#15253)", "changes": [{"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}]}, {"timestamp": 1657595683, "sha": "623a658f", "message": "doc(set_theory/game/pgame): divide file into sections (#15250)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1657578803, "sha": "52d4daef", "message": "feat(representation_theory/monoid_algebra_basis): add some API for `k[G^n]` (#14308)", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "def", "partial_prod", ["fin"]], ["add", "theorem", "partial_prod_succ'", ["fin"]], ["add", "theorem", "partial_prod_succ", ["fin"]], ["add", "theorem", "partial_prod_zero", ["fin"]], ["mod", "theorem", "prod_of_fn", ["list"]], ["mod", "theorem", "prod_take_of_fn", ["list"]]]}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["add", "theorem", "of_mul_action_apply", ["representation"]], ["add", "theorem", "of_mul_action_def", ["representation"]]]}, {"oldPath": null, "newPath": "src/representation_theory/group_cohomology_resolution.lean", "changes": [["add", "def", "of_mul_action", ["Rep"]], ["add", "def", "of_tensor", ["group_cohomology", "resolution"]], ["add", "def", "of_tensor_aux", ["group_cohomology", "resolution"]], ["add", "theorem", "of_tensor_aux_comm_of_mul_action", ["group_cohomology", "resolution"]], ["add", "theorem", "of_tensor_aux_single", ["group_cohomology", "resolution"]], ["add", "theorem", "of_tensor_single'", ["group_cohomology", "resolution"]], ["add", "theorem", "of_tensor_single", ["group_cohomology", "resolution"]], ["add", "def", "to_tensor", ["group_cohomology", "resolution"]], ["add", "def", "to_tensor_aux", ["group_cohomology", "resolution"]], ["add", "theorem", "to_tensor_aux_of_mul_action", ["group_cohomology", "resolution"]], ["add", "theorem", "to_tensor_aux_single", ["group_cohomology", "resolution"]], ["add", "theorem", "to_tensor_single", ["group_cohomology", "resolution"]]]}]}, {"timestamp": 1657558285, "sha": "00dbc7b2", "message": "fix(.github/workflows): temporarily increase timeout (#15251)\nQuick hack to fix our olean files after https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.22saving.20olean.22.3F.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1657558284, "sha": "201d2c61", "message": "refactor(data/nat/enat): rename `enat` to `part_enat` (#15235)\n* find+replace `enat` with `part_enat`;\n* reflow long lines\n* add a sentence to the module docstring of `data.nat.enat`.\nI'm going to define `enat := with_top nat` and use it as the default implementation of \"nat with top\".", "changes": [{"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/enat.lean", "newPath": "src/algebra/big_operators/enat.lean", "changes": []}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/data/nat/choose/factorization.lean", "newPath": "src/data/nat/choose/factorization.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["del", "theorem", "add_eq_top_iff", ["enat"]], ["del", "theorem", "add_one_le_iff_lt", ["enat"]], ["del", "theorem", "add_one_le_of_lt", ["enat"]], ["del", "theorem", "add_top", ["enat"]], ["del", "theorem", "coe_add_get", ["enat"]], ["del", "theorem", "coe_coe_hom", ["enat"]], ["del", "theorem", "coe_get", ["enat"]], ["del", "def", "coe_hom", ["enat"]], ["del", "theorem", "coe_inj", ["enat"]], ["del", "theorem", "coe_le_coe", ["enat"]], ["del", "theorem", "coe_le_iff", ["enat"]], ["del", "theorem", "coe_lt_coe", ["enat"]], ["del", "theorem", "coe_lt_iff", ["enat"]], ["del", "theorem", "coe_lt_top", ["enat"]], ["del", "theorem", "coe_ne_top", ["enat"]], ["del", "theorem", "dom_coe", ["enat"]], ["del", "theorem", "dom_of_le_coe", ["enat"]], ["del", "theorem", "dom_of_le_of_dom", ["enat"]], ["del", "theorem", "dom_of_le_some", ["enat"]], ["del", "theorem", "dom_of_lt", ["enat"]], ["del", "theorem", "dom_some", ["enat"]], ["del", "theorem", "eq_top_iff_forall_le", ["enat"]], ["del", "theorem", "eq_top_iff_forall_lt", ["enat"]], ["del", "theorem", "eq_zero_iff", ["enat"]], ["del", "def", "find", ["enat"]], ["del", "theorem", "find_dom", ["enat"]], ["del", "theorem", "find_eq_top_iff", ["enat"]], ["del", "theorem", "find_get", ["enat"]], ["del", "theorem", "find_le", ["enat"]], ["del", "theorem", "get_add", ["enat"]], ["del", "theorem", "get_coe'", ["enat"]], ["del", "theorem", "get_coe", ["enat"]], ["del", "theorem", "get_eq_iff_eq_coe", ["enat"]], ["del", "theorem", "get_eq_iff_eq_some", ["enat"]], ["del", "theorem", "get_le_get", ["enat"]], ["del", "theorem", "get_one", ["enat"]], ["del", "theorem", "get_zero", ["enat"]], ["del", "theorem", "le_coe_iff", ["enat"]], ["del", "theorem", "le_def", ["enat"]], ["del", "theorem", "le_of_lt_add_one", ["enat"]], ["del", "theorem", "lt_add_one", ["enat"]], ["del", "theorem", "lt_add_one_iff_lt", ["enat"]], ["del", "theorem", "lt_coe_iff", ["enat"]], ["del", "theorem", "lt_def", ["enat"]], ["del", "theorem", "lt_find", ["enat"]], ["del", "theorem", "lt_find_iff", ["enat"]], ["del", "theorem", "lt_wf", ["enat"]], ["del", "theorem", "ne_top_iff", ["enat"]], ["del", "theorem", "ne_top_iff_dom", ["enat"]], ["del", "theorem", "ne_top_of_lt", ["enat"]], ["del", "theorem", "ne_zero_iff", ["enat"]], ["del", "theorem", "not_dom_iff_eq_top", ["enat"]], ["del", "theorem", "not_is_max_coe", ["enat"]], ["del", "theorem", "pos_iff_one_le", ["enat"]], ["del", "def", "some", ["enat"]], ["del", "theorem", "some_eq_coe", ["enat"]], ["del", "def", "to_with_top", ["enat"]], ["del", "theorem", "to_with_top_add", ["enat"]], ["del", "theorem", "to_with_top_coe'", ["enat"]], ["del", "theorem", "to_with_top_coe", ["enat"]], ["del", "theorem", "to_with_top_le", ["enat"]], ["del", "theorem", "to_with_top_lt", ["enat"]], ["del", "theorem", "to_with_top_some", ["enat"]], ["del", "theorem", "to_with_top_top'", ["enat"]], ["del", "theorem", "to_with_top_top", ["enat"]], ["del", "theorem", "to_with_top_zero'", ["enat"]], ["del", "theorem", "to_with_top_zero", ["enat"]], ["del", "theorem", "top_add", ["enat"]], ["del", "theorem", "top_eq_none", ["enat"]], ["del", "theorem", "with_top_equiv_coe", ["enat"]], ["del", "theorem", "with_top_equiv_le", ["enat"]], ["del", "theorem", "with_top_equiv_lt", ["enat"]], ["del", "theorem", "with_top_equiv_symm_coe", ["enat"]], ["del", "theorem", "with_top_equiv_symm_le", ["enat"]], ["del", "theorem", "with_top_equiv_symm_lt", ["enat"]], ["del", "theorem", "with_top_equiv_symm_top", ["enat"]], ["del", "theorem", "with_top_equiv_symm_zero", ["enat"]], ["del", "theorem", "with_top_equiv_top", ["enat"]], ["del", "theorem", "with_top_equiv_zero", ["enat"]], ["del", "def", "enat", []], ["add", "theorem", "add_eq_top_iff", ["part_enat"]], ["add", "theorem", "add_one_le_iff_lt", ["part_enat"]], ["add", "theorem", "add_one_le_of_lt", ["part_enat"]], ["add", "theorem", "add_top", ["part_enat"]], ["add", "theorem", "coe_add_get", ["part_enat"]], ["add", "theorem", "coe_coe_hom", ["part_enat"]], ["add", "theorem", "coe_get", ["part_enat"]], ["add", "def", "coe_hom", ["part_enat"]], ["add", "theorem", "coe_inj", ["part_enat"]], ["add", "theorem", "coe_le_coe", ["part_enat"]], ["add", "theorem", "coe_le_iff", ["part_enat"]], ["add", "theorem", "coe_lt_coe", ["part_enat"]], ["add", "theorem", "coe_lt_iff", ["part_enat"]], ["add", "theorem", "coe_lt_top", ["part_enat"]], ["add", "theorem", "coe_ne_top", ["part_enat"]], ["add", "theorem", "dom_coe", ["part_enat"]], ["add", "theorem", "dom_of_le_coe", ["part_enat"]], ["add", "theorem", "dom_of_le_of_dom", ["part_enat"]], ["add", "theorem", "dom_of_le_some", ["part_enat"]], ["add", "theorem", "dom_of_lt", ["part_enat"]], ["add", "theorem", "dom_some", ["part_enat"]], ["add", "theorem", "eq_top_iff_forall_le", ["part_enat"]], ["add", "theorem", "eq_top_iff_forall_lt", ["part_enat"]], ["add", "theorem", "eq_zero_iff", ["part_enat"]], ["add", "def", "find", ["part_enat"]], ["add", "theorem", "find_dom", ["part_enat"]], ["add", "theorem", "find_eq_top_iff", ["part_enat"]], ["add", "theorem", "find_get", ["part_enat"]], ["add", "theorem", "find_le", ["part_enat"]], ["add", "theorem", "get_add", ["part_enat"]], ["add", "theorem", "get_coe'", ["part_enat"]], ["add", "theorem", "get_coe", ["part_enat"]], ["add", "theorem", "get_eq_iff_eq_coe", ["part_enat"]], ["add", "theorem", "get_eq_iff_eq_some", ["part_enat"]], ["add", "theorem", "get_le_get", ["part_enat"]], ["add", "theorem", "get_one", ["part_enat"]], ["add", "theorem", "get_zero", ["part_enat"]], ["add", "theorem", "le_coe_iff", ["part_enat"]], ["add", "theorem", "le_def", ["part_enat"]], ["add", "theorem", "le_of_lt_add_one", ["part_enat"]], ["add", "theorem", "lt_add_one", ["part_enat"]], ["add", "theorem", "lt_add_one_iff_lt", ["part_enat"]], ["add", "theorem", "lt_coe_iff", ["part_enat"]], ["add", "theorem", "lt_def", ["part_enat"]], ["add", "theorem", "lt_find", ["part_enat"]], ["add", "theorem", "lt_find_iff", ["part_enat"]], ["add", "theorem", "lt_wf", ["part_enat"]], ["add", "theorem", "ne_top_iff", ["part_enat"]], ["add", "theorem", "ne_top_iff_dom", ["part_enat"]], ["add", "theorem", "ne_top_of_lt", ["part_enat"]], ["add", "theorem", "ne_zero_iff", ["part_enat"]], ["add", "theorem", "not_dom_iff_eq_top", ["part_enat"]], ["add", "theorem", "not_is_max_coe", ["part_enat"]], ["add", "theorem", "pos_iff_one_le", ["part_enat"]], ["add", "def", "some", ["part_enat"]], ["add", "theorem", "some_eq_coe", ["part_enat"]], ["add", "def", "to_with_top", ["part_enat"]], ["add", "theorem", "to_with_top_add", ["part_enat"]], ["add", "theorem", "to_with_top_coe'", ["part_enat"]], ["add", "theorem", "to_with_top_coe", ["part_enat"]], ["add", "theorem", "to_with_top_le", ["part_enat"]], ["add", "theorem", "to_with_top_lt", ["part_enat"]], ["add", "theorem", "to_with_top_some", ["part_enat"]], ["add", "theorem", "to_with_top_top'", ["part_enat"]], ["add", "theorem", "to_with_top_top", ["part_enat"]], ["add", "theorem", "to_with_top_zero'", ["part_enat"]], ["add", "theorem", "to_with_top_zero", ["part_enat"]], ["add", "theorem", "top_add", ["part_enat"]], ["add", "theorem", "top_eq_none", ["part_enat"]], ["add", "theorem", "with_top_equiv_coe", ["part_enat"]], ["add", "theorem", "with_top_equiv_le", ["part_enat"]], ["add", "theorem", "with_top_equiv_lt", ["part_enat"]], ["add", "theorem", "with_top_equiv_symm_coe", ["part_enat"]], ["add", "theorem", "with_top_equiv_symm_le", ["part_enat"]], ["add", "theorem", "with_top_equiv_symm_lt", ["part_enat"]], ["add", "theorem", "with_top_equiv_symm_top", ["part_enat"]], ["add", "theorem", "with_top_equiv_symm_zero", ["part_enat"]], ["add", "theorem", "with_top_equiv_top", ["part_enat"]], ["add", "theorem", "with_top_equiv_zero", ["part_enat"]], ["add", "def", "part_enat", []]]}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": []}, {"oldPath": "src/ring_theory/chain_of_divisors.lean", "newPath": "src/ring_theory/chain_of_divisors.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["mod", "theorem", "dvd_iff_multiplicity_pos", ["multiplicity"]], ["mod", "theorem", "dvd_of_multiplicity_pos", ["multiplicity"]], ["mod", "theorem", "pow_dvd_of_le_multiplicity", ["multiplicity"]], ["mod", "def", "multiplicity", []]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["mod", "theorem", "le_order", ["power_series"]], ["mod", "def", "order", ["power_series"]], ["mod", "theorem", "order_eq", ["power_series"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["del", "theorem", "aleph_0_to_enat", ["cardinal"]], ["add", "theorem", "aleph_0_to_part_enat", ["cardinal"]], ["del", "theorem", "mk_to_enat_eq_coe_card", ["cardinal"]], ["del", "theorem", "mk_to_enat_of_infinite", ["cardinal"]], ["add", "theorem", "mk_to_part_enat_eq_coe_card", ["cardinal"]], ["add", "theorem", "mk_to_part_enat_of_infinite", ["cardinal"]], ["del", "def", "to_enat", ["cardinal"]], ["del", "theorem", "to_enat_apply_of_aleph_0_le", ["cardinal"]], ["del", "theorem", "to_enat_apply_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_enat_cast", ["cardinal"]], ["del", "theorem", "to_enat_surjective", ["cardinal"]], ["add", "def", "to_part_enat", ["cardinal"]], ["add", "theorem", "to_part_enat_apply_of_aleph_0_le", ["cardinal"]], ["add", "theorem", "to_part_enat_apply_of_lt_aleph_0", ["cardinal"]], ["add", "theorem", "to_part_enat_cast", ["cardinal"]], ["add", "theorem", "to_part_enat_surjective", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": [["del", "theorem", "continuum_to_enat", ["cardinal"]], ["add", "theorem", "continuum_to_part_enat", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/finite.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": [["del", "def", "card", ["enat"]], ["del", "theorem", "card_eq_coe_fintype_card", ["enat"]], ["del", "theorem", "card_eq_top_of_infinite", ["enat"]], ["add", "def", "card", ["part_enat"]], ["add", "theorem", "card_eq_coe_fintype_card", ["part_enat"]], ["add", "theorem", "card_eq_top_of_infinite", ["part_enat"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["del", "theorem", "aleph_to_enat", ["cardinal"]], ["add", "theorem", "aleph_to_part_enat", ["cardinal"]]]}]}, {"timestamp": 1657558283, "sha": "44905df5", "message": "feat(order/hom/basic): `order_iso` to `rel_iso (<) (<)` (#15182)\nCouldn't find this in the library. Asked on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/rel_iso.20.28.3C.29.20.28.3C.29.20from.20order_iso/near/288891638) in case anyone knew of this already.", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "def", "to_rel_iso_lt", ["order_iso"]]]}]}, {"timestamp": 1657558282, "sha": "0f56b2df", "message": "feat(combinatorics/simple_graph/connectivity): simp confluence (#15153)\nFrom branch `walks_and_trees`. Adds data/list/basic lemma to help simp prove `d ∈ p.reverse.darts ↔ d.symm ∈ p.darts`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["mod", "theorem", "dart_snd_mem_support_of_mem_darts", ["simple_graph", "walk"]], ["add", "theorem", "fst_mem_support_of_mem_edges", ["simple_graph", "walk"]], ["add", "theorem", "not_of_nil", ["simple_graph", "walk", "is_cycle"]], ["add", "theorem", "mem_darts_reverse", ["simple_graph", "walk"]], ["del", "theorem", "mem_support_of_mem_edges", ["simple_graph", "walk"]], ["add", "theorem", "snd_mem_support_of_mem_edges", ["simple_graph", "walk"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "exists_mem_and_apply_eq_iff", ["function", "involutive"]], ["add", "theorem", "mem_map_of_involutive", ["list"]]]}]}, {"timestamp": 1657558280, "sha": "9a2e5c8b", "message": "fix(order/basic): fix `subtype.linear_order` (#15056)\nThis makes `subtype.lattice` definitionally equal to `linear_order.to_lattice`, after unfolding some (which?) semireducible definitions.\n* Rewrite `linear_order.lift` to allow custom `max` and `min` fields. Move the old definition to `linear_order.lift'`.\n* Use the new `linear_order.lift` to fix a non-defeq diamond on `subtype _`.\n* Use the new `linear_order.lift` in various `function.injective.linear_*` definitions.", "changes": [{"oldPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "newPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule/basic.lean", "newPath": "src/algebra/module/submodule/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "def", "order_embedding_coe", ["units"]]]}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/ulift.lean", "newPath": "src/data/ulift.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "def", "lift'", ["linear_order"]], ["mod", "def", "lift", ["linear_order"]], ["add", "theorem", "max_rec'", []], ["add", "theorem", "max_rec", []], ["add", "theorem", "min_rec'", []], ["add", "theorem", "min_rec", []]]}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/min_max.lean", "newPath": "src/order/min_max.lean", "changes": [["del", "theorem", "max_rec'", []], ["del", "theorem", "max_rec", []], ["del", "theorem", "min_rec'", []], ["del", "theorem", "min_rec", []]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}]}, {"timestamp": 1657558279, "sha": "bbe25d4d", "message": "feat(category_theory): left-exact functors preserve finite limits (#14026)\nAlso adds the following:\n* Convenient constructors for `binary_fan` and adjustments to its simp NF\n* Generalize the (co)kernel constructions in inclusions and projections of binary biproducts\n* Fixes the name of `kernel_fork.is_limit.of_ι`\n* Derives `preserves_limits_of_shape (discrete pempty) G` from the preservation of just *the* terminal morphism\n* Preserving zero morphisms implies preserving terminal morphisms\n* Isomorphisms from any fork to an application of `fork.of_ι`", "changes": [{"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": [["add", "def", "preserves_colimits_of_shape_pempty_of_preserves_initial", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_pempty_of_preserves_terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/zero.lean", "newPath": "src/category_theory/limits/preserves/shapes/zero.lean", "changes": [["add", "def", "preserves_initial_object_of_preserves_zero_morphisms", ["category_theory", "functor"]], ["add", "def", "preserves_terminal_object_of_preserves_zero_morphisms", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "mk_inl", ["category_theory", "limits", "binary_cofan"]], ["add", "theorem", "mk_inr", ["category_theory", "limits", "binary_cofan"]], ["del", "theorem", "mk_ι_app_left", ["category_theory", "limits", "binary_cofan"]], ["del", "theorem", "mk_ι_app_right", ["category_theory", "limits", "binary_cofan"]], ["add", "theorem", "mk_fst", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "mk_snd", ["category_theory", "limits", "binary_fan"]], ["del", "theorem", "mk_π_app_left", ["category_theory", "limits", "binary_fan"]], ["del", "theorem", "mk_π_app_right", ["category_theory", "limits", "binary_fan"]], ["add", "def", "iso_binary_cofan_mk", ["category_theory", "limits"]], ["add", "def", "iso_binary_fan_mk", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "fst_kernel_fork", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "fst_kernel_fork_ι", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "inl_cokernel_cofork", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "inl_cokernel_cofork_π", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "inr_cokernel_cofork", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "inr_cokernel_cofork_π", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_colimit_inl_cokernel_cofork", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_colimit_inr_cokernel_cofork", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_limit_fst_kernel_fork", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_limit_snd_kernel_fork", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "snd_kernel_fork", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "snd_kernel_fork_ι", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "inl_cokernel_cofork", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inl_cokernel_cofork_π", ["category_theory", "limits", "biprod"]], ["del", "def", "inl_cokernel_fork", ["category_theory", "limits", "biprod"]], ["del", "theorem", "inl_cokernel_fork_π", ["category_theory", "limits", "biprod"]], ["add", "def", "inr_cokernel_cofork", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inr_cokernel_cofork_π", ["category_theory", "limits", "biprod"]], ["del", "def", "inr_cokernel_fork", ["category_theory", "limits", "biprod"]], ["del", "theorem", "inr_cokernel_fork_π", ["category_theory", "limits", "biprod"]], ["mod", "def", "is_cokernel_inl_cokernel_fork", ["category_theory", "limits", "biprod"]], ["mod", "def", "is_cokernel_inr_cokernel_fork", ["category_theory", "limits", "biprod"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "iso_cofork_of_π", ["category_theory", "limits", "cofork"]], ["add", "theorem", "π_precompose", ["category_theory", "limits", "cofork"]], ["add", "def", "iso_fork_of_ι", ["category_theory", "limits", "fork"]], ["add", "theorem", "ι_postcompose", ["category_theory", "limits", "fork"]], ["add", "def", "eq_of_hom_eq", ["category_theory", "limits", "parallel_pair"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "of_π", ["category_theory", "limits", "cokernel_cofork", "is_colimit"]], ["del", "def", "of_π", ["category_theory", "limits", "is_colimit"]], ["del", "def", "of_ι", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_ι", ["category_theory", "limits", "kernel_fork", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/normal_mono/basic.lean", "newPath": "src/category_theory/limits/shapes/normal_mono/basic.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "theorem", "cofork_of_cokernel_cofork_π", ["category_theory", "preadditive"]], ["add", "theorem", "fork_of_kernel_fork_ι", ["category_theory", "preadditive"]]]}, {"oldPath": null, "newPath": "src/category_theory/preadditive/left_exact.lean", "changes": [["add", "def", "is_colimit_map_cocone_binary_cofan_of_preserves_cokernels", ["category_theory", "functor"]], ["add", "def", "is_limit_map_cone_binary_fan_of_preserves_kernels", ["category_theory", "functor"]], ["add", "def", "preserves_binary_coproducts_of_preserves_cokernels", ["category_theory", "functor"]], ["add", "def", "preserves_binary_product_of_preserves_kernels", ["category_theory", "functor"]], ["add", "def", "preserves_binary_products_of_preserves_kernels", ["category_theory", "functor"]], ["add", "def", "preserves_coequalizer_of_preserves_cokernels", ["category_theory", "functor"]], ["add", "def", "preserves_coequalizers_of_preserves_cokernels", ["category_theory", "functor"]], ["add", "def", "preserves_coproduct_of_preserves_cokernels", ["category_theory", "functor"]], ["add", "def", "preserves_equalizer_of_preserves_kernels", ["category_theory", "functor"]], ["add", "def", "preserves_equalizers_of_preserves_kernels", ["category_theory", "functor"]], ["add", "def", "preserves_finite_colimits_of_preserves_cokernels", ["category_theory", "functor"]], ["add", "def", "preserves_finite_limits_of_preserves_kernels", ["category_theory", "functor"]]]}]}, {"timestamp": 1657558278, "sha": "d3f5adb0", "message": "feat(combinatorics/simple_graph/regularity/equitabilise): Equitabilising a partition (#13222)\nDefine the equitabilisation of a partition and a way to find an arbitrary equipartition of any size.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/regularity/equitabilise.lean", "changes": [["add", "theorem", "card_eq_of_mem_parts_equitabilise", ["finpartition"]], ["add", "theorem", "card_filter_equitabilise_big", ["finpartition"]], ["add", "theorem", "card_filter_equitabilise_small", ["finpartition"]], ["add", "theorem", "card_parts_equitabilise", ["finpartition"]], ["add", "theorem", "card_parts_equitabilise_subset_le", ["finpartition"]], ["add", "theorem", "equitabilise_aux", ["finpartition"]], ["add", "theorem", "equitabilise_is_equipartition", ["finpartition"]], ["add", "theorem", "exists_equipartition_card_eq", ["finpartition"]]]}, {"oldPath": "src/order/partition/finpartition.lean", "newPath": "src/order/partition/finpartition.lean", "changes": [["add", "theorem", "mem_avoid", ["finpartition"]]]}]}, {"timestamp": 1657558277, "sha": "888caf7d", "message": "feat(order/modular_lattice): Semimodular lattices (#11602)\nThis defines the four main kinds of semimodular lattices:\n* Weakly upper modular\n* Weakly lower modular\n* Upper modular\n* Lower modular", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": [["add", "theorem", "covby_sup_of_inf_covby_left", []], ["add", "theorem", "covby_sup_of_inf_covby_of_inf_covby_left", []], ["add", "theorem", "covby_sup_of_inf_covby_of_inf_covby_right", []], ["add", "theorem", "covby_sup_of_inf_covby_right", []], ["add", "theorem", "inf_covby_of_covby_sup_left", []], ["add", "theorem", "inf_covby_of_covby_sup_of_covby_sup_left", []], ["add", "theorem", "inf_covby_of_covby_sup_of_covby_sup_right", []], ["add", "theorem", "inf_covby_of_covby_sup_right", []]]}]}, {"timestamp": 1657549599, "sha": "dfcbe856", "message": "refactor(data/finite): move definition to a new file (#15204)\nThe new file imports nothing but `logic.equiv.basic`.", "changes": [{"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["del", "theorem", "finite_iff", ["equiv"]], ["del", "theorem", "exists_equiv_fin", ["finite"]], ["del", "theorem", "of_bijective", ["finite"]], ["del", "theorem", "of_equiv", ["finite"]], ["del", "theorem", "of_fintype", ["finite"]], ["del", "theorem", "finite_iff_exists_equiv_fin", []]]}, {"oldPath": null, "newPath": "src/data/finite/defs.lean", "changes": [["add", "theorem", "finite_iff", ["equiv"]], ["add", "theorem", "exists_equiv_fin", ["finite"]], ["add", "theorem", "of_bijective", ["finite"]], ["add", "theorem", "of_equiv", ["finite"]], ["add", "theorem", "finite_iff_exists_equiv_fin", []], ["add", "theorem", "finite_iff", ["function", "bijective"]]]}]}, {"timestamp": 1657549598, "sha": "aae01cd3", "message": "data/multiset/range): add multiset.coe_range (#15201)", "changes": [{"oldPath": "src/data/multiset/range.lean", "newPath": "src/data/multiset/range.lean", "changes": [["add", "theorem", "coe_range", ["multiset"]]]}]}, {"timestamp": 1657549597, "sha": "627bd0c2", "message": "chore(topology/basic): use `finite` in `locally_finite_of_finite` (#15181)\nRename `locally_finite_of_fintype` to `locally_finite_of_finite`, use `[finite]` instead of `[fintype]`.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "locally_finite_of_finite", []], ["del", "theorem", "locally_finite_of_fintype", []]]}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}]}, {"timestamp": 1657549596, "sha": "7f837db4", "message": "feat(data/set/finite): add `multiset.finite_to_set` (#15177)\n* move `finset.finite_to_set` up;\n* add `multiset.finite_to_set`, `multiset.finite_to_set_to_finset`, and `list.finite_to_set`;\n* use new lemmas here and there.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "finite_to_set", ["finset"]], ["mod", "theorem", "finite_to_set_to_finset", ["finset"]], ["add", "theorem", "finite_to_set", ["list"]], ["add", "theorem", "finite_to_set", ["multiset"]], ["add", "theorem", "finite_to_set_to_finset", ["multiset"]], ["del", "theorem", "range_find_greatest_subset", ["set"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/classification.lean", "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}]}, {"timestamp": 1657549594, "sha": "ecd5234f", "message": "feat(linear_algebra): basis on R × R, and relation between matrices and linear maps in this basis (#15119)", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["mod", "theorem", "prod_univ_two", ["fin"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "coe_fin_two_prod_repr", ["basis"]], ["add", "theorem", "fin_two_prod_one", ["basis"]], ["add", "theorem", "fin_two_prod_zero", ["basis"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_to_lin", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_fin_one_mk", ["matrix"]], ["add", "theorem", "det_fin_two_mk", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "to_lin_fin_two_prod", ["matrix"]], ["add", "theorem", "to_lin_fin_two_prod_apply", ["matrix"]]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": [["add", "theorem", "det_to_continuous_linear_map", ["linear_map"]], ["add", "theorem", "to_lin_fin_two_prod_to_continuous_linear_map", ["matrix"]]]}]}, {"timestamp": 1657549593, "sha": "611dccaf", "message": "feat(analysis/inner_product_space): the Hellinger-Toeplitz theorem (#15055)\nProve the Hellinger-Toeplitz theorem as a corollary of the closed graph theorem.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "def", "clm", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "clm_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "continuous", ["inner_product_space", "is_self_adjoint"]]]}]}, {"timestamp": 1657549592, "sha": "0980bacb", "message": "chore(topological_space/sober): use `namespace` and `variables`, golf (#15042)\n#### API\n* Add `is_generic_point_iff_specializes`, `is_generic_point.specializes_iff_mem`.\n* Make `is_generic_point.is_closed` etc `protected`.\n#### Style\n* Use `namespace is_generic_point`.\n* Move implicit arguments to `variables`.\n* Move explicit `(h : is_generic_point x S)` from `variables` to each lemma.\n* Golf some proofs.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": [["mod", "theorem", "disjoint_iff", ["is_generic_point"]], ["del", "theorem", "eq", ["is_generic_point"]], ["del", "theorem", "image", ["is_generic_point"]], ["del", "theorem", "is_closed", ["is_generic_point"]], ["del", "theorem", "is_irreducible", ["is_generic_point"]], ["mod", "theorem", "mem", ["is_generic_point"]], ["mod", "theorem", "mem_closed_set_iff", ["is_generic_point"]], ["mod", "theorem", "mem_open_set_iff", ["is_generic_point"]], ["mod", "theorem", "specializes", ["is_generic_point"]], ["add", "theorem", "specializes_iff_mem", ["is_generic_point"]], ["mod", "theorem", "is_generic_point_iff_forall_closed", []], ["add", "theorem", "is_generic_point_iff_specializes", []]]}]}, {"timestamp": 1657549590, "sha": "902e351c", "message": "feat(data/set/pointwise): `list` and `multiset` versions of n-ary lemmas (#14928)\nThese lemmas are generalizations of the existing lemmas about `finset.prod` and `finset.sum`, but for the `list` and `multiset` versions.\nThe finset ones can now be proved in terms of the multiset ones.", "changes": [{"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "list_prod_mem_list_prod", ["set"]], ["add", "theorem", "list_prod_singleton", ["set"]], ["add", "theorem", "list_prod_subset_list_prod", ["set"]], ["add", "theorem", "multiset_prod_mem_multiset_prod", ["set"]], ["add", "theorem", "multiset_prod_singleton", ["set"]], ["add", "theorem", "multiset_prod_subset_multiset_prod", ["set"]]]}]}, {"timestamp": 1657549589, "sha": "b7626956", "message": "feat(algebraic_geometry/projective_spectrum): forward direction of homeomorphism between top_space of Proj and top_space of Spec (#13397)\nThis pr is the start of showing that Proj is a scheme. In this pr, it will be shown that the locally on basic open set, there is a continuous function from the underlying topological space of Proj restricted to this open set to Spec of degree zero part of some localised ring. In the near future, it will be shown that this function is a homeomorphism.", "changes": [{"oldPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "newPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "changes": [["add", "def", "carrier", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "to_Spec"]], ["add", "theorem", "carrier_ne_top", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "to_Spec"]], ["add", "theorem", "disjoint", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "to_Spec"]], ["add", "theorem", "clear_denominator", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "to_Spec", "mem_carrier"]], ["add", "theorem", "mem_carrier_iff", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "to_Spec"]], ["add", "theorem", "preimage_eq", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "to_Spec"]], ["add", "def", "to_fun", ["algebraic_geometry", "Proj_iso_Spec_Top_component", "to_Spec"]], ["add", "def", "to_Spec", ["algebraic_geometry", "Proj_iso_Spec_Top_component"]], ["add", "theorem", "coe_mul", ["algebraic_geometry", "degree_zero_part"]], ["mod", "def", "deg", ["algebraic_geometry", "degree_zero_part"]], ["mod", "theorem", "eq", ["algebraic_geometry", "degree_zero_part"]], ["del", "theorem", "mul_val", ["algebraic_geometry", "degree_zero_part"]], ["mod", "def", "num", ["algebraic_geometry", "degree_zero_part"]], ["mod", "theorem", "num_mem", ["algebraic_geometry", "degree_zero_part"]]]}, {"oldPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "newPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "changes": []}]}, {"timestamp": 1657532038, "sha": "cea27692", "message": "chore(category_theory/adjunction/*): making arguments implicit in adjuction.comp and two small lemmas about mates (#15062)\nWorking on adjunctions between monads and comonads, I noticed that adjunction.comp was defined with having the functors of one of the adjunctions explicit as well as the adjunction. However in the library, only `adjunction.comp _ _` ever appears. Thus I found it natural to make these two arguments implicit, so that composition of adjunctions can now be written as `adj1.comp adj2` instead of `adj1.comp _ _ adj2`. \nFurthermore, I provide two lemmas about mates of natural transformations to and from the identity functor. The application I have in mind is to the unit/counit of a monad/comonad in case of an adjunction of monads and comonads, as studied already by Eilenberg and Moore.", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/mates.lean", "newPath": "src/category_theory/adjunction/mates.lean", "changes": [["add", "theorem", "transfer_nat_trans_self_adjunction_id", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_adjunction_id_symm", ["category_theory"]]]}, {"oldPath": "src/category_theory/adjunction/over.lean", "newPath": "src/category_theory/adjunction/over.lean", "changes": []}, {"oldPath": "src/category_theory/closed/functor.lean", "newPath": "src/category_theory/closed/functor.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/sites/adjunction.lean", "newPath": "src/category_theory/sites/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/mono_over.lean", "newPath": "src/category_theory/subobject/mono_over.lean", "changes": []}]}, {"timestamp": 1657532037, "sha": "4e19dab9", "message": "chore(algebra/order/ring): Normalize `_left`/`_right` (#14985)\nSwap the `left` and `right` variants of\n* `nonneg_of_mul_nonneg_`\n* `pos_of_mul_pos_`\n* `neg_of_mul_pos_`\n* `neg_of_mul_neg_`", "changes": [{"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/order/invertible.lean", "newPath": "src/algebra/order/invertible.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["mod", "theorem", "pos_of_mul_pos_left", ["zero_lt"]], ["mod", "theorem", "pos_of_mul_pos_right", ["zero_lt"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["mod", "theorem", "neg_of_mul_neg_left", []], ["mod", "theorem", "neg_of_mul_neg_right", []], ["mod", "theorem", "neg_of_mul_pos_left", []], ["mod", "theorem", "neg_of_mul_pos_right", []], ["mod", "theorem", "nonneg_of_mul_nonneg_left", []], ["mod", "theorem", "nonneg_of_mul_nonneg_right", []], ["mod", "theorem", "nonpos_of_mul_nonpos_left", []], ["mod", "theorem", "nonpos_of_mul_nonpos_right", []], ["mod", "theorem", "pos_of_mul_pos_left", []], ["mod", "theorem", "pos_of_mul_pos_right", []]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": []}]}, {"timestamp": 1657532036, "sha": "40fdf72d", "message": "feat(category_theory/endofunctor/algebra): Define coalgebras over an endofunctor and prove an equivalence (#14834)\nThis PR dualises the definition of an algebra over an endofunctor to that of a coalgebra over an endofunctor. Furthermore, it proves that if an endofunctor `F` is left adjoint to an endofunctor `G`, then the category of algebras over `F` is equivalent to the category of coalgebras over `G`.", "changes": [{"oldPath": "src/category_theory/endofunctor/algebra.lean", "newPath": "src/category_theory/endofunctor/algebra.lean", "changes": [["add", "def", "counit_iso", ["category_theory", "endofunctor", "adjunction", "alg_coalg_equiv"]], ["add", "def", "unit_iso", ["category_theory", "endofunctor", "adjunction", "alg_coalg_equiv"]], ["add", "theorem", "hom_equiv_naturality_str", ["category_theory", "endofunctor", "adjunction", "algebra"]], ["add", "def", "to_coalgebra_of", ["category_theory", "endofunctor", "adjunction", "algebra"]], ["add", "def", "algebra_coalgebra_equiv", ["category_theory", "endofunctor", "adjunction"]], ["add", "theorem", "hom_equiv_naturality_str_symm", ["category_theory", "endofunctor", "adjunction", "coalgebra"]], ["add", "def", "to_algebra_of", ["category_theory", "endofunctor", "adjunction", "coalgebra"]], ["add", "theorem", "comp_eq_comp", ["category_theory", "endofunctor", "coalgebra"]], ["add", "theorem", "comp_f", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "equiv_of_nat_iso", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "forget", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "functor_of_nat_trans", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "functor_of_nat_trans_comp", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "functor_of_nat_trans_eq", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "functor_of_nat_trans_id", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "comp", ["category_theory", "endofunctor", "coalgebra", "hom"]], ["add", "def", "id", ["category_theory", "endofunctor", "coalgebra", "hom"]], ["add", "structure", "hom", ["category_theory", "endofunctor", "coalgebra"]], ["add", "theorem", "id_eq_id", ["category_theory", "endofunctor", "coalgebra"]], ["add", "theorem", "id_f", ["category_theory", "endofunctor", "coalgebra"]], ["add", "def", "iso_mk", ["category_theory", "endofunctor", "coalgebra"]], ["add", "theorem", "iso_of_iso", ["category_theory", "endofunctor", "coalgebra"]], ["add", "structure", "coalgebra", ["category_theory", "endofunctor"]]]}]}, {"timestamp": 1657532035, "sha": "f7baecbb", "message": "feat(category_theory/functor): preserving/reflecting monos/epis (#14829)", "changes": [{"oldPath": "src/algebra/category/Group/abelian.lean", "newPath": "src/algebra/category/Group/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/evaluation.lean", "newPath": "src/category_theory/adjunction/evaluation.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["del", "theorem", "faithful_reflects_epi", ["category_theory"]], ["del", "theorem", "faithful_reflects_mono", ["category_theory"]], ["del", "theorem", "left_adjoint_preserves_epi", ["category_theory"]], ["del", "theorem", "right_adjoint_preserves_mono", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/functor/epi_mono.lean", "changes": [["add", "theorem", "epi_of_epi_map", ["category_theory", "functor"]], ["add", "theorem", "mono_of_mono_map", ["category_theory", "functor"]], ["add", "theorem", "iso_iff", ["category_theory", "functor", "preserves_epimorphisms"]], ["add", "theorem", "of_iso", ["category_theory", "functor", "preserves_epimorphisms"]], ["add", "theorem", "preserves_epimorphsisms_of_adjunction", ["category_theory", "functor"]], ["add", "theorem", "iso_iff", ["category_theory", "functor", "preserves_monomorphisms"]], ["add", "theorem", "of_iso", ["category_theory", "functor", "preserves_monomorphisms"]], ["add", "theorem", "preserves_monomorphisms_of_adjunction", ["category_theory", "functor"]], ["add", "theorem", "iso_iff", ["category_theory", "functor", "reflects_epimorphisms"]], ["add", "theorem", "of_iso", ["category_theory", "functor", "reflects_epimorphisms"]], ["add", "theorem", "iso_iff", ["category_theory", "functor", "reflects_monomorphisms"]], ["add", "theorem", "of_iso", ["category_theory", "functor", "reflects_monomorphisms"]]]}, {"oldPath": "src/category_theory/glue_data.lean", "newPath": "src/category_theory/glue_data.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/epi_mono.lean", "newPath": "src/category_theory/limits/constructions/epi_mono.lean", "changes": [["add", "theorem", "preserves_epi_of_preserves_colimit", ["category_theory"]], ["add", "theorem", "preserves_mono_of_preserves_limit", ["category_theory"]], ["del", "theorem", "reflects_epi", ["category_theory"]], ["add", "theorem", "reflects_epi_of_reflects_colimit", ["category_theory"]], ["del", "theorem", "reflects_mono", ["category_theory"]], ["add", "theorem", "reflects_mono_of_reflects_limit", ["category_theory"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/default.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": []}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/category/Top/epi_mono.lean", "newPath": "src/topology/category/Top/epi_mono.lean", "changes": []}]}, {"timestamp": 1657532034, "sha": "35363471", "message": "feat(combinatorics/set_family/harris_kleitman): The Harris-Kleitman inequality (#14497)\nLower/upper sets in `finset α` are (anti)correlated.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/set_family/harris_kleitman.lean", "changes": [["add", "theorem", "card_member_subfamily_add_card_non_member_subfamily", ["finset"]], ["add", "theorem", "mem_member_subfamily", ["finset"]], ["add", "theorem", "mem_non_member_subfamily", ["finset"]], ["add", "def", "member_subfamily", ["finset"]], ["add", "theorem", "member_subfamily_inter", ["finset"]], ["add", "def", "non_member_subfamily", ["finset"]], ["add", "theorem", "non_member_subfamily_inter", ["finset"]], ["add", "theorem", "card_inter_le_finset", ["is_lower_set"]], ["add", "theorem", "le_card_inter_finset'", ["is_lower_set"]], ["add", "theorem", "le_card_inter_finset", ["is_lower_set"]], ["add", "theorem", "member_subfamily", ["is_lower_set"]], ["add", "theorem", "member_subfamily_subset_non_member_subfamily", ["is_lower_set"]], ["add", "theorem", "non_member_subfamily", ["is_lower_set"]], ["add", "theorem", "card_inter_le_finset", ["is_upper_set"]], ["add", "theorem", "le_card_inter_finset", ["is_upper_set"]]]}, {"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "is_lower_set_compl", []], ["add", "theorem", "is_upper_set_compl", []]]}]}, {"timestamp": 1657532033, "sha": "f5170fc5", "message": "feat(order/bounded_order): Codisjointness (#14195)\nDefine `codisjoint`, the dual notion of `disjoint`. This is already used without a name in `is_compl`, and will soon be used for Heyting algebras.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "bot_codisjoint", []], ["add", "theorem", "comm", ["codisjoint"]], ["add", "theorem", "dual", ["codisjoint"]], ["add", "theorem", "eq_top", ["codisjoint"]], ["add", "theorem", "eq_top_of_ge", ["codisjoint"]], ["add", "theorem", "eq_top_of_le", ["codisjoint"]], ["add", "theorem", "inf_left", ["codisjoint"]], ["add", "theorem", "inf_right", ["codisjoint"]], ["add", "theorem", "left_le_of_le_inf_left", ["codisjoint"]], ["add", "theorem", "left_le_of_le_inf_right", ["codisjoint"]], ["add", "theorem", "mono", ["codisjoint"]], ["add", "theorem", "mono_left", ["codisjoint"]], ["add", "theorem", "mono_right", ["codisjoint"]], ["add", "theorem", "ne", ["codisjoint"]], ["add", "theorem", "of_codisjoint_sup_of_le'", ["codisjoint"]], ["add", "theorem", "of_codisjoint_sup_of_le", ["codisjoint"]], ["add", "theorem", "sup_left'", ["codisjoint"]], ["add", "theorem", "sup_left", ["codisjoint"]], ["add", "theorem", "sup_right'", ["codisjoint"]], ["add", "theorem", "sup_right", ["codisjoint"]], ["add", "theorem", "symm", ["codisjoint"]], ["add", "def", "codisjoint", []], ["add", "theorem", "codisjoint_assoc", []], ["add", "theorem", "codisjoint_bot", []], ["add", "theorem", "codisjoint_iff", []], ["add", "theorem", "codisjoint_inf_left", []], ["add", "theorem", "codisjoint_inf_right", []], ["add", "theorem", "codisjoint_of_dual_iff", []], ["add", "theorem", "codisjoint_self", []], ["add", "theorem", "codisjoint_to_dual_iff", []], ["add", "theorem", "codisjoint_top_left", []], ["add", "theorem", "codisjoint_top_right", []], ["add", "theorem", "dual", ["disjoint"]], ["add", "theorem", "disjoint_of_dual_iff", []], ["add", "theorem", "disjoint_to_dual_iff", []], ["mod", "theorem", "of_eq", ["is_compl"]], ["mod", "theorem", "sup_eq_top", ["is_compl"]], ["mod", "structure", "is_compl", []], ["add", "theorem", "symmetric_codisjoint", []]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "map_order_iso", ["codisjoint"]], ["add", "theorem", "codisjoint_map_order_iso_iff", []], ["mod", "theorem", "le_map_sup", ["order_embedding"]], ["mod", "theorem", "map_inf_le", ["order_embedding"]], ["mod", "theorem", "map_inf", ["order_iso"]], ["mod", "theorem", "map_sup", ["order_iso"]]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["add", "theorem", "map", ["codisjoint"]], ["mod", "theorem", "map", ["is_compl"]]]}]}, {"timestamp": 1657528004, "sha": "b7148c4e", "message": "feat(analysis/special_functions/pow): Rational powers are dense (#15002)\nThere is a rational square between any two positive elements of an archimedean ordered field.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "exists_rat_pow_btwn", ["real"]], ["add", "theorem", "exists_rat_pow_btwn_rat", ["real"]], ["add", "theorem", "exists_rat_pow_btwn_rat_aux", ["real"]]]}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["add", "theorem", "lt_sq_of_sqrt_lt", ["real"]]]}]}, {"timestamp": 1657507350, "sha": "e3e4cc66", "message": "feat(data/nat/basic): split `exists_lt_and_lt_iff_not_dvd` into `if` and `iff` lemmas (#15099)\nPull out from `exists_lt_and_lt_iff_not_dvd` (\"`n` is not divisible by `a` iff it is between `a * k` and `a * (k + 1)` for some `k`\") a separate lemma proving the forward direction (which doesn't need the `0 < a` assumption) and use this to golf the `iff` lemma.\nAlso renames the lemma to the more descriptive `not_dvd_{of,iff}_between_consec_multiples`.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "exists_lt_and_lt_iff_not_dvd", ["nat"]], ["add", "theorem", "not_dvd_iff_between_consec_multiples", ["nat"]], ["add", "theorem", "not_dvd_of_between_consec_multiples", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}]}, {"timestamp": 1657507349, "sha": "67779f73", "message": "feat(algebra/category/BoolRing): The equivalence between Boolean rings and Boolean algebras (#15019)\nas the categorical equivalence `BoolRing ≌ BoolAlg`.", "changes": [{"oldPath": "src/algebra/category/BoolRing.lean", "newPath": "src/algebra/category/BoolRing.lean", "changes": [["add", "def", "BoolRing_equiv_BoolAlg", []]]}]}, {"timestamp": 1657499770, "sha": "b18b71c4", "message": "refactor(data/finset/lattice): respell `finset.max/finset.min` using `sup/inf coe` (#15217)\nThis PR simply redefines\n* `finset.max s` with the defeq `finset.sup s coe`,\n* `finset.min s` with the defeq `finset.sup/inf s coe`.\nThis arose from PR #15212.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}]}, {"timestamp": 1657481369, "sha": "ad080011", "message": "feat(category_theory/limits): opposites of limit pullback cones (#14526)\nAmong other similar statements, this PR associates a `pullback_cone f g` to a `pushout_cocone f.op g.op`, and it is a limit pullback cone if the original cocone is a colimit cocone.", "changes": [{"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "def", "cospan_op", ["category_theory", "limits"]], ["add", "def", "op_cospan", ["category_theory", "limits"]], ["add", "def", "op_span", ["category_theory", "limits"]], ["add", "def", "is_limit_equiv_is_colimit_op", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "is_limit_equiv_is_colimit_unop", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "op", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "op_inl", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "op_inr", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "op_unop", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "unop", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "unop_inl", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "unop_inr", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "unop_op", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "is_colimit_equiv_is_limit_op", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "is_colimit_equiv_is_limit_unop", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "op", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "op_fst", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "op_snd", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "op_unop", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "unop", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "unop_fst", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "unop_op", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "unop_snd", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "span_op", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}]}, {"timestamp": 1657474984, "sha": "f4f0f67b", "message": "feat(set_theory/zfc): simp lemmas for `arity` and `const` (#15214)", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["add", "theorem", "const_succ", ["arity"]], ["add", "theorem", "const_succ_apply", ["arity"]], ["add", "theorem", "const_zero", ["arity"]], ["add", "theorem", "arity_succ", []], ["add", "theorem", "arity_zero", []]]}]}, {"timestamp": 1657474983, "sha": "cf4783fe", "message": "feat(set_theory/zfc): basic lemmas on `pSet.equiv` (#15211)\nWe unfold the complex definition into something easier to use.", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["add", "theorem", "exists_equiv_left", ["pSet"]], ["add", "theorem", "exists_equiv_right", ["pSet"]]]}]}, {"timestamp": 1657474981, "sha": "4b6ec60f", "message": "lint(topology/algebra/order/basic): use `finite` instead of `fintype` (#15203)", "changes": [{"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}]}, {"timestamp": 1657466916, "sha": "f51aaab3", "message": "feat(algebra/order/monoid) Add zero_le_three and zero_le_four (#15219)", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "zero_le_four", []], ["add", "theorem", "zero_le_three", []]]}]}, {"timestamp": 1657466915, "sha": "e5b8d09b", "message": "feat(data/finset/lattice): add three*2 lemmas about `finset.max/min` (#15212)\nThe three lemmas are\n* `mem_le_max: ↑a ≤ s.max`,\n* `max_mono : s.max ≤ t.max`,\n* `max_le : s.max ≤ M`,\nand\n* `min_le_coe_of_mem : s.min`,\n* `min_mono : t.min ≤ s.min`,\n* `le_min : m ≤ s.min`.\n~~I feel that I did not get the hang of `finset.max`: probably a lot of golfing is possible, at least for `max_mono`!~~\nLuckily, Eric looked at the PR and now the proofs have been shortened!\nI also golfed `le_max_of_mem` and `min_le_of_mem`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "coe_le_max_of_mem", ["finset"]], ["add", "theorem", "le_min", ["finset"]], ["add", "theorem", "max_le", ["finset"]], ["add", "theorem", "max_mono", ["finset"]], ["add", "theorem", "min_le_coe_of_mem", ["finset"]], ["add", "theorem", "min_mono", ["finset"]]]}]}, {"timestamp": 1657466914, "sha": "5305d39a", "message": "feat(data/pnat/basic): `succ` as an order isomorphism between `ℕ` and `ℕ+` (#15183)\nCouldn't find this in the library. Asked on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/order.20isomorphism.20between.20.E2.84.95.20and.20.E2.84.95.2B/near/288891689) in case anyone knew of this already.", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "def", "succ_order_iso", ["pnat"]]]}]}, {"timestamp": 1657461759, "sha": "37c27774", "message": "feat(order/filter/ultrafilter): `pure`, `map`, and `comap` lemmas (#15187)\nA handful of simple lemmas.", "changes": [{"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "coe_comap", ["ultrafilter"]], ["add", "theorem", "coe_pure", ["ultrafilter"]], ["add", "theorem", "comap_comap", ["ultrafilter"]], ["add", "theorem", "comap_id", ["ultrafilter"]], ["add", "theorem", "comap_pure", ["ultrafilter"]], ["del", "theorem", "eq_principal_of_finite_mem", ["ultrafilter"]], ["add", "theorem", "eq_pure_of_finite_mem", ["ultrafilter"]], ["add", "theorem", "eq_pure_of_fintype", ["ultrafilter"]], ["add", "theorem", "map_id'", ["ultrafilter"]], ["add", "theorem", "map_id", ["ultrafilter"]], ["add", "theorem", "map_map", ["ultrafilter"]], ["add", "theorem", "map_pure", ["ultrafilter"]], ["add", "theorem", "pure_injective", ["ultrafilter"]]]}]}, {"timestamp": 1657395843, "sha": "861589f2", "message": "feat(linear_algebra/unitary_group): better constructor (#15209)\n`A ∈ matrix.unitary_group n α` means by definition (for reasons of agreement with something more general) that `A * star A = 1` and `star A * A = 1`. But either condition implies the other, so we provide a lemma to reduce to the first.", "changes": [{"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": [["add", "theorem", "mem_orthogonal_group_iff", ["matrix"]], ["add", "theorem", "mem_unitary_group_iff", ["matrix"]]]}]}, {"timestamp": 1657382722, "sha": "983fdd6b", "message": "chore(set_theory/ordinal/arithmetic): review cast API (#14757)\nThis PR does the following:\n- swap the direction of `nat_cast_succ` to match `nat.cast_succ`.\n- make various arguments explicit.\n- remove `lift_type_fin`, as it's a trivial consequence of `type_fin` and `lift_nat_cast`.\n- tag various theorems as `norm_cast`.\n- golf or otherwise cleanup various proofs.", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "add_le_add_iff_right", ["ordinal"]], ["mod", "theorem", "lift_nat_cast", ["ordinal"]], ["del", "theorem", "lift_type_fin", ["ordinal"]], ["mod", "theorem", "nat_cast_div", ["ordinal"]], ["mod", "theorem", "nat_cast_eq_zero", ["ordinal"]], ["mod", "theorem", "nat_cast_inj", ["ordinal"]], ["mod", "theorem", "nat_cast_le", ["ordinal"]], ["mod", "theorem", "nat_cast_lt", ["ordinal"]], ["mod", "theorem", "nat_cast_mod", ["ordinal"]], ["mod", "theorem", "nat_cast_mul", ["ordinal"]], ["mod", "theorem", "nat_cast_opow", ["ordinal"]], ["mod", "theorem", "nat_cast_pos", ["ordinal"]], ["mod", "theorem", "nat_cast_sub", ["ordinal"]], ["mod", "theorem", "nat_cast_succ", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}]}, {"timestamp": 1657375798, "sha": "6d245b26", "message": "feat(set_theory/ordinal/basic): order type of naturals is `ω` (#15178)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "type_nat_lt", ["ordinal"]]]}]}, {"timestamp": 1657372669, "sha": "7cf0ae6a", "message": "feat(combinatorics/simple_graph/subgraph): add `subgraph.comap` and subgraph of subgraph coercion (#14877)", "changes": [{"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "coe_subgraph_injective", ["simple_graph", "subgraph"]], ["add", "theorem", "comap_monotone", ["simple_graph", "subgraph"]], ["add", "theorem", "map_le_iff_le_comap", ["simple_graph", "subgraph"]], ["add", "theorem", "restrict_coe_subgraph", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1657351583, "sha": "d3d35395", "message": "Removed unnecessary assumption in `map_injective_of_injective` (#15184)\nRemoved assumption in `map_injective_of_injective`", "changes": [{"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["mod", "theorem", "localization_algebra_injective", []]]}]}, {"timestamp": 1657339730, "sha": "f26a0a35", "message": "feat(logic/equiv/set): define `equiv.set.pi` (#15176)", "changes": [{"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": []}]}, {"timestamp": 1657329344, "sha": "c5b6fe54", "message": "feat(analysis/locally_convex/basic): a few lemmas about balanced sets (#14876)\nAdd new lemmas about unions and intersection and membership of balanced sets.", "changes": [{"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["mod", "theorem", "add", ["absorbs"]], ["add", "theorem", "neg", ["absorbs"]], ["add", "theorem", "sub", ["absorbs"]], ["mod", "theorem", "absorbs_Union_finset", []], ["mod", "theorem", "add", ["balanced"]], ["add", "theorem", "mem_smul_iff", ["balanced"]], ["add", "theorem", "neg", ["balanced"]], ["add", "theorem", "neg_mem_iff", ["balanced"]], ["mod", "theorem", "smul", ["balanced"]], ["add", "theorem", "sub", ["balanced"]], ["add", "theorem", "balanced_Inter", []], ["add", "theorem", "balanced_Inter₂", []], ["add", "theorem", "balanced_Union", []], ["add", "theorem", "balanced_Union₂", []], ["add", "theorem", "balanced_empty", []], ["mod", "theorem", "balanced_univ", []], ["mod", "theorem", "absorbs_Union", ["set", "finite"]]]}]}, {"timestamp": 1657320634, "sha": "fefd449d", "message": "feat(set_theory/ordinal/arithmetic): tweak `type_add` and `type_mul` (#15193)\nThis renames `type_mul` to the more accurate `type_prod_lex`, and renames `type_add` to `type_sum_lex` and reverses the order of the equality so that the two lemmas match.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "theorem", "type_mul", ["ordinal"]], ["add", "theorem", "type_prod_lex", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["del", "theorem", "type_add", ["ordinal"]], ["add", "theorem", "type_sum_lex", ["ordinal"]]]}]}, {"timestamp": 1657313665, "sha": "f39bd5f0", "message": "feat(analysis/normed_space/star/basic): make starₗᵢ apply to normed star groups (#15173)", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}]}, {"timestamp": 1657313665, "sha": "8a38a697", "message": "feat(combinatorics/simple_graph/hasse): The Hasse diagram of `α × β` (#14978)\n... is the box product of the Hasse diagrams of `α` and `β`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/hasse.lean", "newPath": "src/combinatorics/simple_graph/hasse.lean", "changes": [["add", "theorem", "hasse_prod", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/prod.lean", "newPath": "src/combinatorics/simple_graph/prod.lean", "changes": [["mod", "theorem", "box_prod_adj", ["simple_graph"]]]}]}, {"timestamp": 1657313664, "sha": "1a54e4da", "message": "feat(combinatorics/additive/ruzsa_covering): The Ruzsa covering lemma (#14697)\nProve the Ruzsa covering lemma, which says that a finset `s` can be covered using at most $\\frac{|s + t|}{|t|}$ copies of `t - t`.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/additive/ruzsa_covering.lean", "changes": [["add", "theorem", "exists_subset_mul_div", ["finset"]]]}]}, {"timestamp": 1657306217, "sha": "2d5b45c8", "message": "chore(data/zmod/defs): shuffle files around (#15142)\nThis is to prepare to fix `char_p` related diamonds. No new lemmas were added, stuff was just moved around.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["del", "theorem", "card", ["zmod"]], ["del", "def", "zmod", []]]}, {"oldPath": null, "newPath": "src/data/zmod/defs.lean", "changes": [["add", "theorem", "card", ["zmod"]], ["add", "def", "zmod", []]]}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1657306216, "sha": "11cdccb8", "message": "feat(data/rat/defs): add denominator as pnat (#15101)\nOption to bundle `x.denom` and `x.pos` into a pnat, which can be useful in defining functions using the denominator.", "changes": [{"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": [["add", "theorem", "coe_pnat_denom", ["rat"]], ["add", "theorem", "mk_pnat_pnat_denom_eq", ["rat"]], ["add", "def", "pnat_denom", ["rat"]], ["add", "theorem", "pnat_denom_eq_iff_denom_eq", ["rat"]]]}]}, {"timestamp": 1657302340, "sha": "feb34df6", "message": "chore(data/nat/squarefree): fix a tactic doc typo for norm num extension (#15189)", "changes": [{"oldPath": "src/data/nat/squarefree.lean", "newPath": "src/data/nat/squarefree.lean", "changes": []}]}, {"timestamp": 1657291764, "sha": "5a5d2909", "message": "fix(data/fintype/basic): move card_subtype_mono into the fintype namespace (#15185)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "card_subtype_mono", []], ["add", "theorem", "card_subtype_mono", ["fintype"]]]}]}, {"timestamp": 1657287379, "sha": "1937dff0", "message": "feat(analysis/normed_space/lp_space): normed_algebra structure (#15086)\nThis also golfs the `normed_ring` instance to go via `subring.to_ring`, as this saves us from having to build the power, nat_cast, and int_cast structures manually.\nWe also rename `lp.lp_submodule` to `lp_submodule` to avoid unhelpful repetition.", "changes": [{"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["add", "theorem", "algebra_map_mem_ℓp_infty", []], ["del", "def", "lp_submodule", ["lp"]], ["add", "def", "lp_infty_subalgebra", []], ["add", "def", "lp_infty_subring", []], ["add", "def", "lp_submodule", []], ["mod", "theorem", "nat_cast_mem_ℓp_infty", []]]}]}, {"timestamp": 1657279767, "sha": "e74e5349", "message": "doc(tactic/wlog): use markdown lists rather than indentation (#15113)\nThe indentation used in this docstring was lost in the web docs.", "changes": [{"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}]}, {"timestamp": 1657279766, "sha": "0bc51f02", "message": "feat(topology/metric_space/hausdorff_distance): Thickening a compact inside an open (#14926)\nIf a compact set is contained in an open set, then we can find a (closed) thickening of it still contained in the open.", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "exists_cthickening_subset_open", ["is_compact"]], ["add", "theorem", "exists_thickening_subset_open", ["is_compact"]]]}]}, {"timestamp": 1657279765, "sha": "93be74b1", "message": "feat(combinatorics/simple_graph/prod): Box product (#14867)\nDefine `simple_graph.box_prod`, the box product of simple graphs. Show that it's commutative and associative, and prove its connectivity properties.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/prod.lean", "changes": [["add", "def", "box_prod", ["simple_graph"]], ["add", "theorem", "box_prod_adj", ["simple_graph"]], ["add", "theorem", "box_prod_adj_left", ["simple_graph"]], ["add", "theorem", "box_prod_adj_right", ["simple_graph"]], ["add", "def", "box_prod_assoc", ["simple_graph"]], ["add", "def", "box_prod_comm", ["simple_graph"]], ["add", "theorem", "box_prod_connected", ["simple_graph"]], ["add", "def", "box_prod_left", ["simple_graph"]], ["add", "def", "box_prod_right", ["simple_graph"]], ["add", "def", "of_box_prod_left", ["simple_graph", "walk"]], ["add", "theorem", "of_box_prod_left_box_prod_left", ["simple_graph", "walk"]], ["add", "theorem", "of_box_prod_left_box_prod_right", ["simple_graph", "walk"]], ["add", "def", "of_box_prod_right", ["simple_graph", "walk"]]]}]}, {"timestamp": 1657274006, "sha": "7c070c4d", "message": "feat(data/finset/basic): Coercion of a product of finsets (#15011)\n`↑(∏ i in s, f i) : set α) = ∏ i in s, ↑(f i)` for `f : ι → finset α`.", "changes": [{"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "coe_coe_monoid_hom", ["finset"]], ["add", "def", "coe_monoid_hom", ["finset"]], ["add", "theorem", "coe_monoid_hom_apply", ["finset"]], ["mod", "theorem", "coe_pow", ["finset"]], ["add", "theorem", "coe_prod", ["finset"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}]}, {"timestamp": 1657257893, "sha": "d34b3306", "message": "feat(data/set/basic,order/filter/basic): add semiconj lemmas about images and maps (#14970)\nThis adds `function.commute` and `function.semiconj` lemmas, and replaces all the uses of `_comm` lemmas with the `semiconj` version as it turns out that only this generality is needed.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "finset_image", ["function", "commute"]], ["add", "theorem", "finset_map", ["function", "commute"]], ["add", "theorem", "finset_image", ["function", "semiconj"]], ["add", "theorem", "finset_map", ["function", "semiconj"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "set_image", ["function", "commute"]], ["add", "theorem", "set_image", ["function", "semiconj"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "image_op_inv", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "filter_comap", ["commute"]], ["add", "theorem", "filter_map", ["commute"]], ["add", "theorem", "filter_comap", ["function", "semiconj"]], ["add", "theorem", "filter_map", ["function", "semiconj"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["mod", "theorem", "map_inv'", ["filter"]]]}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": []}]}, {"timestamp": 1657257892, "sha": "563a51af", "message": "chore(topology/algebra/semigroup): golf file (#14957)", "changes": [{"oldPath": "src/topology/algebra/semigroup.lean", "newPath": "src/topology/algebra/semigroup.lean", "changes": []}]}, {"timestamp": 1657257892, "sha": "ba9f346a", "message": "feat(topology/algebra/uniform_group): `uniform_group` is preserved by Inf and comap (#14889)\nThis is the uniform version of #11720", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "uniform_group_Inf", []], ["add", "theorem", "uniform_group_comap", []], ["add", "theorem", "uniform_group_inf", []], ["add", "theorem", "uniform_group_infi", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "uniform_continuous_iff", []]]}]}, {"timestamp": 1657248933, "sha": "6eeb941c", "message": "refactor(set_theory/cardinal/basic): migrate from `fintype` to `finite` (#15175)\n* add `finite_iff_exists_equiv_fin`;\n* add `cardinal.mk_eq_nat_iff` and `cardinal.lt_aleph_0_iff_finite`;\n* rename the old `cardinal.lt_aleph_0_iff_finite` to `cardinal.lt_aleph_0_iff_finite_set`;\n* rename `cardinal.lt_aleph_0_of_fintype` to `cardinal.lt_aleph_0_of_finite`, assume `[finite]` instead of `[fintype]`;\n* add an alias `set.finite.lt_aleph_0`;\n* rename `W_type.cardinal_mk_le_max_aleph_0_of_fintype` to `W_type.cardinal_mk_le_max_aleph_0_of_finite`, fix assumption.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": [["add", "theorem", "cardinal_mk_le_max_aleph_0_of_finite", ["W_type"]], ["del", "theorem", "cardinal_mk_le_max_aleph_0_of_fintype", ["W_type"]]]}, {"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["add", "theorem", "finite_iff_exists_equiv_fin", []]]}, {"oldPath": "src/data/mv_polynomial/cardinal.lean", "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/data/polynomial/cardinal.lean", "newPath": "src/data/polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/classification.lean", "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "lt_aleph_0_iff_finite", ["cardinal"]], ["add", "theorem", "lt_aleph_0_iff_set_finite", ["cardinal"]], ["add", "theorem", "lt_aleph_0_of_finite", ["cardinal"]], ["del", "theorem", "lt_aleph_0_of_fintype", ["cardinal"]], ["add", "theorem", "mk_eq_nat_iff", ["cardinal"]]]}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}]}, {"timestamp": 1657248932, "sha": "a3c647bb", "message": "feat(set_theory/ordinal/arithmetic): tweak theorems about `0` and `1` (#15174)\nWe add a few basic theorems on the `0` and `1` ordinals. We rename `one_eq_type_unit` to `type_unit`, and remove `one_eq_lift_type_unit` by virtue of being a trivial consequence of `type_unit` and `lift_one`.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "lift_one", ["ordinal"]], ["mod", "theorem", "lift_zero", ["ordinal"]], ["del", "theorem", "one_eq_lift_type_unit", ["ordinal"]], ["del", "theorem", "one_eq_type_unit", ["ordinal"]], ["add", "theorem", "type_empty", ["ordinal"]], ["add", "theorem", "type_eq_one_iff_unique", ["ordinal"]], ["add", "theorem", "type_eq_one_of_unique", ["ordinal"]], ["add", "theorem", "type_pempty", ["ordinal"]], ["add", "theorem", "type_punit", ["ordinal"]], ["add", "theorem", "type_unit", ["ordinal"]]]}]}, {"timestamp": 1657248931, "sha": "f0f40704", "message": "feat(topology/algebra/infinite_sum): Double sum is equal to a single value (#15157)\nA generalized version of `tsum_eq_single` that works for a double indexed sum, when all but one summand is zero.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_tsum_eq_single", []]]}]}, {"timestamp": 1657248930, "sha": "8927a02c", "message": "chore(tactic/lift): move a proof to `subtype.exists_pi_extension` (#15098)\n* Move `_can_lift` attr to the bottom of the file, just before the\n rest of meta code.\n* Use `ι → Sort*` instead of `Π i : ι, Sort*`.\n* Move `pi_subtype.can_lift.prf` to a separate lemma.", "changes": [{"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": [["add", "theorem", "exists_pi_extension", ["subtype"]]]}]}, {"timestamp": 1657248929, "sha": "0e3184fc", "message": "feat(data/fin/tuple/basic): add lemmas for rewriting exists and forall over `n+1`-tuples (#15048)\nThe lemma names `fin.forall_fin_succ_pi` and `fin.exists_fin_succ_pi` mirror the existing `fin.forall_fin_succ` and `fin.exists_fin_succ`.", "changes": [{"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "exists_fin_succ_pi", ["fin"]], ["add", "theorem", "exists_fin_zero_pi", ["fin"]], ["add", "theorem", "forall_fin_succ_pi", ["fin"]], ["add", "theorem", "forall_fin_zero_pi", ["fin"]]]}]}, {"timestamp": 1657248928, "sha": "2a7ceb0e", "message": "perf(linear_algebra): speed up `graded_algebra` instances (#14967)\nReduce `elaboration of graded_algebra` in:\n+ `exterior_algebra.graded_algebra` from ~20s to 3s-\n+ `tensor_algebra.graded_algebra` from 7s+ to 2s-\n+ `clifford_algebra.graded_algebra` from 14s+ to 4s-\n(These numbers were before `lift_ι` and `lift_ι_eq` were extracted from `exterior_algebra.graded_algebra` and `lift_ι_eq` was extracted from `clifford_algebra.graded_algebra` in #12182.)\nFix [timeout reported on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/deterministic.20timeout/near/286996731)\nAlso shorten the statements of the first two without reducing clarity (I think).", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/grading.lean", "newPath": "src/linear_algebra/tensor_algebra/grading.lean", "changes": []}]}, {"timestamp": 1657248927, "sha": "a5a6865f", "message": "feat(combinatorics/set_family/intersecting): Intersecting families (#14475)\nDefine intersecting families, prove that intersecting families in `α` have size at most `card α / 2` and that all maximal intersecting families are this size.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/set_family/intersecting.lean", "changes": [["add", "theorem", "card_le", ["set", "intersecting"]], ["add", "theorem", "exists_card_eq", ["set", "intersecting"]], ["add", "theorem", "exists_mem_finset", ["set", "intersecting"]], ["add", "theorem", "exists_mem_set", ["set", "intersecting"]], ["add", "theorem", "insert", ["set", "intersecting"]], ["add", "theorem", "is_max_iff_card_eq", ["set", "intersecting"]], ["add", "theorem", "is_upper_set'", ["set", "intersecting"]], ["add", "theorem", "mono", ["set", "intersecting"]], ["add", "theorem", "ne_bot", ["set", "intersecting"]], ["add", "theorem", "not_bot_mem", ["set", "intersecting"]], ["add", "theorem", "not_compl_mem", ["set", "intersecting"]], ["add", "theorem", "not_mem", ["set", "intersecting"]], ["add", "def", "intersecting", ["set"]], ["add", "theorem", "intersecting_empty", ["set"]], ["add", "theorem", "intersecting_iff_eq_empty_of_subsingleton", ["set"]], ["add", "theorem", "intersecting_iff_pairwise_not_disjoint", ["set"]], ["add", "theorem", "intersecting_insert", ["set"]], ["add", "theorem", "intersecting_singleton", ["set"]]]}, {"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "bot_mem", ["is_lower_set"]], ["add", "theorem", "not_bot_mem", ["is_lower_set"]], ["add", "theorem", "top_mem", ["is_lower_set"]], ["add", "theorem", "bot_mem", ["is_upper_set"]], ["add", "theorem", "not_top_mem", ["is_upper_set"]], ["add", "theorem", "top_mem", ["is_upper_set"]]]}]}, {"timestamp": 1657248926, "sha": "70a27086", "message": "feat(topology/continuous_function): Any T0 space embeds in a product of copies of the Sierpinski space (#14036)\nAny T0 space embeds in a product of copies of the Sierpinski space", "changes": [{"oldPath": null, "newPath": "src/topology/continuous_function/t0_sierpinski.lean", "changes": [["add", "theorem", "eq_induced_by_maps_to_sierpinski", ["topological_space"]], ["add", "def", "product_of_mem_opens", ["topological_space"]], ["add", "theorem", "product_of_mem_opens_embedding", ["topological_space"]], ["add", "theorem", "product_of_mem_opens_inducing", ["topological_space"]], ["add", "theorem", "product_of_mem_opens_injective", ["topological_space"]]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": [["add", "theorem", "mem_mk", ["topological_space", "opens"]]]}]}, {"timestamp": 1657239679, "sha": "646028a0", "message": "refactor(data/finset/lattice): finset.{min,max} away from option (#15163)\nSwitch to a `with_top`/`with_bot` based API. This avoids exposing `option`\nas implementation detail.\nRedefines `polynomial.degree` to use `coe` instead of `some`", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "le_max'", ["finset"]], ["mod", "theorem", "le_max_of_mem", ["finset"]], ["mod", "theorem", "max_empty", ["finset"]], ["add", "theorem", "max_eq_bot", ["finset"]], ["del", "theorem", "max_eq_none", ["finset"]], ["mod", "theorem", "max_of_mem", ["finset"]], ["mod", "theorem", "max_of_nonempty", ["finset"]], ["mod", "theorem", "max_singleton", ["finset"]], ["mod", "theorem", "mem_of_max", ["finset"]], ["mod", "theorem", "mem_of_min", ["finset"]], ["mod", "theorem", "min'_le", ["finset"]], ["mod", "theorem", "min_empty", ["finset"]], ["del", "theorem", "min_eq_none", ["finset"]], ["add", "theorem", "min_eq_top", ["finset"]], ["mod", "theorem", "min_le_of_mem", ["finset"]], ["mod", "theorem", "min_of_mem", ["finset"]], ["mod", "theorem", "min_of_nonempty", ["finset"]], ["mod", "theorem", "min_singleton", ["finset"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "def", "degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "rec_bot_coe_bot", ["with_bot"]], ["add", "theorem", "rec_bot_coe_coe", ["with_bot"]], ["add", "def", "unbot'", ["with_bot"]], ["add", "theorem", "unbot'_bot", ["with_bot"]], ["add", "theorem", "unbot'_coe", ["with_bot"]], ["add", "theorem", "rec_top_coe_coe", ["with_top"]], ["add", "theorem", "rec_top_coe_top", ["with_top"]], ["add", "def", "untop'", ["with_top"]], ["add", "theorem", "untop'_coe", ["with_top"]], ["add", "theorem", "untop'_top", ["with_top"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1657234050, "sha": "8a80759b", "message": "feat(order/filter/basic): add `map_le_map` and `map_injective` (#15128)\n* Add `filter.map_le_map`, an `iff` version of `filter.map_mono`.\n* Add `filter.map_injective`, a `function.injective` version of `filter.map_inj`.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "eq_of_map_eq_map_inj'", ["filter"]], ["del", "theorem", "le_of_map_le_map_inj'", ["filter"]], ["del", "theorem", "le_of_map_le_map_inj_iff", ["filter"]], ["add", "theorem", "map_eq_map_iff_of_inj_on", ["filter"]], ["mod", "theorem", "map_inj", ["filter"]], ["add", "theorem", "map_injective", ["filter"]], ["add", "theorem", "map_le_map_iff", ["filter"]], ["add", "theorem", "map_le_map_iff_of_inj_on", ["filter"]]]}]}, {"timestamp": 1657221766, "sha": "b4979cbd", "message": "chore(data/rat): split `field ℚ` instance from definition of `ℚ` (#14893)\nI want to refer to the rational numbers in the definition of a field, meaning we can't define the field structure on `ℚ` in the same file as `ℚ` itself.\nThis PR moves everything in `data/rat/basic.lean` that does not depend on `algebra/field/basic.lean` into a new file `data/rat/defs.lean`: definition of the type `ℚ`, the operations giving its algebraic structure, and the coercions from integers and natural numbers. Basically, everything except the actual `field ℚ` instance.\nIt turns out our basic lemmas on rational numbers only require a `comm_ring`, `comm_group_with_zero` and `is_domain` instance, so I defined those instances in `defs.lean` could leave all lemmas intact.\nAs a consequence, the transitive imports provided by `data.rat.basic` are somewhat smaller: no `linear_ordered_field` is needed until `data.rat.order`. I see this as a bonus but can also re-import `algebra.order.field` in `data.rat.basic` if desired.", "changes": [{"oldPath": "counterexamples/pseudoelement.lean", "newPath": "counterexamples/pseudoelement.lean", "changes": []}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "test/rat.lean", "newPath": "test/rat.lean", "changes": []}]}, {"timestamp": 1657213036, "sha": "7428bd9b", "message": "refactor(data/finite/set,data/set/finite): move most contents of one file to another (#15166)\n* move most content of `data.finite.set` to `data.set.finite`;\n* use `casesI nonempty_fintype _` instead of `letI := fintype.of_finite`; sometimes it lets us avoid `classical.choice`;\n* merge `set.finite.of_fintype`, `set.finite_of_fintype`, and `set.finite_of_finite` into `set.to_finite`;\n* rewrite `set.finite_univ_iff` and `finite.of_finite_univ` in terms of `set.finite`;\n* replace some assumptions `[fintype (plift _)]` with `[finite _]`;\n* generalize `set.cod_restrict` and some lemmas to allow domain in `Sort*`, use it for `finite.of_injective_finite.range`.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": []}, {"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["mod", "def", "of_finite", ["fintype"]], ["add", "theorem", "nonempty_fintype", []]]}, {"oldPath": "src/data/finite/set.lean", "newPath": "src/data/finite/set.lean", "changes": [["del", "theorem", "of_finite_univ", ["finite"]], ["mod", "theorem", "of_injective_finite_range", ["finite"]], ["del", "theorem", "finite_bUnion", ["finite", "set"]], ["del", "theorem", "finite_iff_finite", ["set"]], ["del", "theorem", "finite_of_finite", ["set"]], ["del", "theorem", "finite_univ_iff", ["set"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_bUnion", ["finite", "set"]], ["mod", "theorem", "finite_to_set", ["finset"]], ["del", "theorem", "of_fintype", ["set", "finite"]], ["mod", "theorem", "of_subsingleton", ["set", "finite"]], ["mod", "theorem", "finite_Union", ["set"]], ["add", "theorem", "finite_coe_iff", ["set"]], ["mod", "theorem", "finite_empty", ["set"]], ["mod", "theorem", "finite_le_nat", ["set"]], ["mod", "theorem", "finite_lt_nat", ["set"]], ["mod", "theorem", "finite_mem_finset", ["set"]], ["del", "theorem", "finite_of_fintype", ["set"]], ["mod", "theorem", "finite_pure", ["set"]], ["mod", "theorem", "finite_range", ["set"]], ["mod", "theorem", "finite_singleton", ["set"]], ["mod", "theorem", "finite_univ", ["set"]], ["add", "theorem", "finite_univ_iff", ["set"]], ["add", "theorem", "to_finite", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "def", "cod_restrict", ["set"]], ["mod", "theorem", "coe_cod_restrict_apply", ["set"]], ["mod", "theorem", "injective_cod_restrict", ["set"]], ["mod", "theorem", "restrict_comp_cod_restrict", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["mod", "theorem", "finite_Icc", ["set"]], ["mod", "theorem", "finite_Ici", ["set"]], ["mod", "theorem", "finite_Ico", ["set"]], ["mod", "theorem", "finite_Iic", ["set"]], ["mod", "theorem", "finite_Iio", ["set"]], ["mod", "theorem", "finite_Ioc", ["set"]], ["mod", "theorem", "finite_Ioi", ["set"]], ["mod", "theorem", "finite_Ioo", ["set"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["mod", "theorem", "is_pwo", ["set", "fintype"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1657213035, "sha": "691f04fe", "message": "feat(order/rel_iso): two reflexive/irreflexive relations on a unique type are isomorphic (#14760)\nWe also rename `not_rel` to the more descriptive name `not_rel_of_subsingleton`.", "changes": [{"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["del", "theorem", "not_rel", []], ["add", "theorem", "not_rel_of_subsingleton", []], ["add", "theorem", "rel_of_subsingleton", []]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "rel_iso_of_unique_of_irrefl", ["rel_iso"]], ["add", "def", "rel_iso_of_unique_of_refl", ["rel_iso"]]]}]}, {"timestamp": 1657205351, "sha": "6df59d68", "message": "feat(data/list/basic): nth_le_enum (#15139)\nFill out some of the `enum` and `enum_from` API\nLink the two via `map_fst_add_enum_eq_enum_from`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "enum_append", ["list"]], ["add", "theorem", "enum_cons", ["list"]], ["add", "theorem", "enum_from_append", ["list"]], ["add", "theorem", "enum_from_cons", ["list"]], ["add", "theorem", "enum_from_nil", ["list"]], ["add", "theorem", "enum_from_singleton", ["list"]], ["add", "theorem", "enum_nil", ["list"]], ["add", "theorem", "enum_singleton", ["list"]], ["add", "theorem", "map_fst_add_enum_eq_enum_from", ["list"]], ["add", "theorem", "map_fst_add_enum_from_eq_enum_from", ["list"]], ["add", "theorem", "nth_le_enum", ["list"]], ["add", "theorem", "nth_le_enum_from", ["list"]]]}]}, {"timestamp": 1657201533, "sha": "58525685", "message": "feat(combinatorics/simple_graph/{basic,subgraph,clique,coloring}): add induced graphs, characterization of cliques, and bounds for colorings (#14034)\nThis adds `simple_graph.map`, `simple_graph.comap`, and induced graphs and subgraphs. There are renamings: `simple_graph.subgraph.map` to `simple_graph.subgraph.inclusion`, `simple_graph.subgraph.map_top` to `simple_graph.subgraph.hom`, and `simple_graph.subgraph.map_spanning_top` to `simple_graph.subgraph.spanning_hom`. These changes originated to be able to express that a clique is a set of vertices whose induced subgraph is complete, which gives some clique-based bounds for chromatic numbers.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "comap_map_eq", ["simple_graph"]], ["add", "theorem", "comap_monotone", ["simple_graph"]], ["add", "theorem", "comap_surjective", ["simple_graph"]], ["add", "theorem", "injective_of_top_hom", ["simple_graph", "hom"]], ["add", "def", "induce", ["simple_graph"]], ["add", "theorem", "induce_spanning_coe", ["simple_graph"]], ["add", "theorem", "to_embedding_complete_graph", ["simple_graph", "iso"]], ["add", "theorem", "left_inverse_comap_map", ["simple_graph"]], ["add", "theorem", "map_adj", ["simple_graph"]], ["add", "theorem", "map_comap_le", ["simple_graph"]], ["add", "theorem", "map_injective", ["simple_graph"]], ["add", "theorem", "map_le_iff_le_comap", ["simple_graph"]], ["add", "theorem", "map_monotone", ["simple_graph"]], ["add", "def", "spanning_coe", ["simple_graph"]], ["add", "theorem", "spanning_coe_induce_le", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/clique.lean", "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": [["add", "theorem", "clique_free_iff", ["simple_graph"]], ["add", "theorem", "clique_free_of_card_lt", ["simple_graph"]], ["add", "theorem", "is_clique_iff_induce_eq", ["simple_graph"]], ["add", "theorem", "not_clique_free_card_of_top_embedding", ["simple_graph"]], ["add", "theorem", "not_clique_free_iff", ["simple_graph"]], ["add", "theorem", "not_clique_free_of_top_embedding", ["simple_graph"]], ["add", "def", "top_embedding_of_not_clique_free", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/coloring.lean", "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": [["add", "theorem", "clique_free_of_chromatic_number_lt", ["simple_graph"]], ["add", "theorem", "clique_free", ["simple_graph", "colorable"]], ["add", "theorem", "card_le_chromatic_number", ["simple_graph", "is_clique"]], ["add", "theorem", "card_le_of_colorable", ["simple_graph", "is_clique"]], ["add", "theorem", "card_le_of_coloring", ["simple_graph", "is_clique"]]]}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "induce_eq_coe_induce_top", ["simple_graph"]], ["add", "theorem", "injective", ["simple_graph", "subgraph", "hom"]], ["add", "theorem", "injective", ["simple_graph", "subgraph", "inclusion"]], ["add", "def", "inclusion", ["simple_graph", "subgraph"]], ["add", "def", "induce", ["simple_graph", "subgraph"]], ["add", "theorem", "induce_empty", ["simple_graph", "subgraph"]], ["add", "theorem", "induce_mono", ["simple_graph", "subgraph"]], ["add", "theorem", "induce_mono_left", ["simple_graph", "subgraph"]], ["add", "theorem", "induce_mono_right", ["simple_graph", "subgraph"]], ["del", "theorem", "injective", ["simple_graph", "subgraph", "map"]], ["del", "def", "map", ["simple_graph", "subgraph"]], ["add", "theorem", "map_monotone", ["simple_graph", "subgraph"]], ["del", "theorem", "injective", ["simple_graph", "subgraph", "map_spanning_top"]], ["del", "def", "map_spanning_top", ["simple_graph", "subgraph"]], ["del", "theorem", "injective", ["simple_graph", "subgraph", "map_top"]], ["del", "def", "map_top", ["simple_graph", "subgraph"]], ["del", "theorem", "map_top_to_fun", ["simple_graph", "subgraph"]], ["add", "theorem", "injective", ["simple_graph", "subgraph", "spanning_hom"]], ["add", "def", "spanning_hom", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1657183200, "sha": "1422d387", "message": "feat(order/succ_pred): expand API on `with_bot` and `with_top` (#15016)\nWe add a bunch of `simp` lemmas for successor and predecessors on `with_bot` and `with_top`, and golf some proofs.", "changes": [{"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "pred_coe", ["with_bot"]], ["add", "theorem", "pred_coe_bot", ["with_bot"]], ["add", "theorem", "pred_coe_of_ne_bot", ["with_bot"]], ["add", "theorem", "succ_bot", ["with_bot"]], ["add", "theorem", "succ_coe", ["with_bot"]], ["add", "theorem", "pred_coe", ["with_top"]], ["add", "theorem", "pred_top", ["with_top"]], ["add", "theorem", "succ_coe", ["with_top"]], ["add", "theorem", "succ_coe_of_ne_top", ["with_top"]], ["add", "theorem", "succ_coe_top", ["with_top"]]]}]}, {"timestamp": 1657176303, "sha": "0d186304", "message": "chore(ring_theory/norm): generalise a couple of lemmas (#15160)\nUsing the generalisation linter", "changes": [{"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["mod", "theorem", "norm_eq_prod_embeddings_gen", ["algebra"]], ["mod", "theorem", "norm_eq_zero_iff'", ["algebra"]], ["mod", "theorem", "norm_eq_zero_iff", ["algebra"]], ["mod", "theorem", "prod_embeddings_eq_finrank_pow", ["algebra"]]]}]}, {"timestamp": 1657170273, "sha": "bf735cd1", "message": "chore(set_theory/ordinal/basic): remove `rel_iso_out` (#15145)\nThis is just a specific application of `rel_iso.cast`. Moreover, it's unused.", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["del", "def", "rel_iso_out", ["ordinal"]]]}]}, {"timestamp": 1657170272, "sha": "9b2755b9", "message": "chore(*): add missing `to_fun → apply` configurations for `simps` (#15112)\nThis improves the names of some generated lemmas for `continuous_map` and `quadratic_form`.", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/prod.lean", "newPath": "src/linear_algebra/quadratic_form/prod.lean", "changes": []}, {"oldPath": "src/order/hom/bounded.lean", "newPath": "src/order/hom/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/gluing.lean", "newPath": "src/topology/gluing.lean", "changes": []}]}, {"timestamp": 1657170271, "sha": "ab99fd1b", "message": "chore(data/nat): rename oddly named lemma odd_gt_zero (#13040)", "changes": [{"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["del", "theorem", "odd_gt_zero", ["nat"]], ["add", "theorem", "pos_of_odd", ["nat"]]]}]}, {"timestamp": 1657161491, "sha": "6d02dac3", "message": "feat(order/lattice, order/lattice_intervals): coe inf/sup lemmas (#15136)\nThis PR adds simp lemmas for coercions of inf/sup in order instances on intervals. We also change the order of some arguments in instances/lemmas, by removing `variables` commands, so that typeclass arguments precede others.", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "coe_inf", ["subtype"]], ["add", "theorem", "coe_sup", ["subtype"]], ["add", "theorem", "mk_inf_mk", ["subtype"]], ["add", "theorem", "mk_sup_mk", ["subtype"]]]}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": []}]}, {"timestamp": 1657152770, "sha": "418373e8", "message": "feat(combinatorics/simple_graph/basic): `dart.to_prod` is injective (#15150)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "to_prod_injective", ["simple_graph", "dart"]]]}]}, {"timestamp": 1657152769, "sha": "3e52000c", "message": "feat(data/quot): `is_equiv` instance for quotient equivalence (#15148)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}]}, {"timestamp": 1657152767, "sha": "e034eb09", "message": "feat(order/rel_iso): add `rel_iso.cast` (#15144)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1657152766, "sha": "e335a41f", "message": "refactor(group_theory/congruence): use `quotient.map` (#15130)\nAlso add explicit universe levels in `algebra.category.Module.monoidal`.", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["mod", "def", "associator", ["Module", "monoidal_category"]], ["mod", "theorem", "tensor_id", ["Module", "monoidal_category"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1657152765, "sha": "fdfc2229", "message": "feat(measure_theory/integral): Circle integral transform (#13885)\nSome basic definitions and results related to circle integrals of a function. These form part of #13500", "changes": [{"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": [["add", "theorem", "continuous_circle_map_inv", []]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/circle_integral_transform.lean", "changes": [["add", "theorem", "abs_circle_transform_bounding_function_le", ["complex"]], ["add", "def", "circle_transform", ["complex"]], ["add", "def", "circle_transform_bounding_function", ["complex"]], ["add", "def", "circle_transform_deriv", ["complex"]], ["add", "theorem", "circle_transform_deriv_bound", ["complex"]], ["add", "theorem", "circle_transform_deriv_eq", ["complex"]], ["add", "theorem", "circle_transform_deriv_periodic", ["complex"]], ["add", "theorem", "continuous_circle_transform", ["complex"]], ["add", "theorem", "continuous_circle_transform_deriv", ["complex"]], ["add", "theorem", "continuous_on_abs_circle_transform_bounding_function", ["complex"]], ["add", "theorem", "continuous_on_prod_circle_transform_function", ["complex"]], ["add", "theorem", "integral_circle_transform", ["complex"]]]}]}, {"timestamp": 1657144717, "sha": "0a89f18f", "message": "chore(set_theory/ordinal/basic): clean up `ordinal.card` API (#15147)\nWe tweak some spacing throughout this section of the file, and golf a few theorems/definitions.\nConflicts and is inspired by #15137.", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "def", "card", ["ordinal"]], ["mod", "theorem", "card_type", ["ordinal"]], ["add", "theorem", "ne_zero_of_out_nonempty", ["ordinal"]], ["mod", "theorem", "type_ne_zero_iff_nonempty", ["ordinal"]]]}]}, {"timestamp": 1657144716, "sha": "a54e63da", "message": "feat(set_theory/ordinal/basic): basic lemmas on `ordinal.lift` (#15146)\nWe add some missing instances for preimages, and missing theorems for `ordinal.lift`. We remove `ordinal.lift_type`, as it was just a worse way of stating `ordinal.type_ulift`.\nWe also tweak some spacing and golf a few theorems.\nThis conflicts with (and is inspired by) some of the changes of #15137.", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["del", "theorem", "lift_type", ["ordinal"]], ["mod", "theorem", "lift_zero", ["ordinal"]], ["add", "theorem", "type_lift_preimage", ["ordinal"]], ["add", "theorem", "type_preimage", ["ordinal"]], ["add", "theorem", "type_ulift", ["ordinal"]], ["add", "theorem", "ordinal_lift_type_eq", ["rel_iso"]]]}]}, {"timestamp": 1657135110, "sha": "b7581040", "message": "feat(order/basic): a symmetric relation implies equality when it implies less-equal (#15149)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "rel_imp_eq_of_rel_imp_le", []]]}]}, {"timestamp": 1657120112, "sha": "d45a8ace", "message": "refactor(topology/separation): redefine `t0_space` (#15046)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "def", "nhds_order_embedding", ["prime_spectrum"]]]}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": [["add", "theorem", "inseparable_coe", ["alexandroff"]], ["add", "theorem", "inseparable_iff", ["alexandroff"]], ["add", "theorem", "not_inseparable_coe_infty", ["alexandroff"]], ["add", "theorem", "not_inseparable_infty_coe", ["alexandroff"]], ["add", "theorem", "not_specializes_infty_coe", ["alexandroff"]], ["add", "theorem", "specializes_coe", ["alexandroff"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "t0_space_def", []], ["add", "theorem", "t0_space_iff_exists_is_open_xor_mem", []], ["add", "theorem", "t1_space_iff_specializes_imp_eq", []]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1657113174, "sha": "71b1be63", "message": "feat(analysis/inner_product_space): add simple lemmas for the orthogonal complement (#15020)\nWe show that the orthogonal complement of a dense subspace is trivial.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "topological_closure_eq_top_iff", ["submodule"]], ["add", "theorem", "triorthogonal_eq_orthogonal", ["submodule"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "theorem", "submodule_topological_closure_eq", ["is_closed"]], ["add", "theorem", "dense_iff_topological_closure_eq_top", ["submodule"]]]}]}, {"timestamp": 1657106219, "sha": "f09322bc", "message": "feat(geometry/manifold/local_invariant_properties): simplify definitions and proofs (#15116)\n* Simplify the sets in `local_invariant_prop` and `lift_prop_within_at`\n* Simplify many proofs in `local_invariant_properties.lean`\n* Reorder the intersection in `cont_diff_within_at_prop` to be more consistent with all lemmas in `smooth_manifold_with_corners.lean`\n* New lemmas, such as `cont_mdiff_within_at_iff_of_mem_source` and properties of `local_invariant_prop`\n* I expect that some lemmas in `cont_mdiff.lean` can be simplified using the new definitions, but I don't do that in this PR.\n* Lemma renamings:\n```\ncont_mdiff_within_at_iff -> cont_mdiff_within_at_iff'\ncont_mdiff_within_at_iff' -> cont_mdiff_within_at_iff_of_mem_source'\ncont_mdiff_within_at_iff'' -> cont_mdiff_within_at_iff [or iff.rfl]\n```", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "theorem", "chart_source_mem_nhds", []], ["add", "theorem", "chart_target_mem_nhds", []]]}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["del", "theorem", "cont_diff_within_at_local_invariant_prop_id", []], ["del", "theorem", "cont_diff_within_at_local_invariant_prop_mono", []], ["mod", "def", "cont_diff_within_at_prop", []], ["add", "theorem", "cont_diff_within_at_prop_id", []], ["add", "theorem", "cont_diff_within_at_prop_mono", []], ["mod", "theorem", "cont_mdiff_at_ext_chart_at", []], ["add", "theorem", "cont_mdiff_at_iff", []], ["add", "theorem", "cont_mdiff_at_iff_of_mem_source", []], ["del", "theorem", "cont_mdiff_within_at_iff''", []], ["mod", "theorem", "cont_mdiff_within_at_iff'", []], ["add", "theorem", "cont_mdiff_within_at_iff_of_mem_source'", []], ["add", "theorem", "cont_mdiff_within_at_iff_of_mem_source", []]]}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": [["mod", "def", "lift_prop", ["charted_space"]], ["mod", "def", "lift_prop_at", ["charted_space"]], ["add", "theorem", "lift_prop_at_iff", ["charted_space"]], ["add", "theorem", "lift_prop_iff", ["charted_space"]], ["mod", "def", "lift_prop_on", ["charted_space"]], ["mod", "def", "lift_prop_within_at", ["charted_space"]], ["mod", "theorem", "lift_prop_on_univ", ["structure_groupoid"]], ["mod", "theorem", "lift_prop_within_at_univ", ["structure_groupoid"]], ["add", "theorem", "congr'", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "congr", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "congr_iff", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "congr_iff_nhds_within", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "congr_nhds_within'", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "congr_nhds_within", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "congr_set", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "is_local_nhds", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "left_invariance", ["structure_groupoid", "local_invariant_prop"]], ["mod", "theorem", "lift_prop_of_locally_lift_prop_on", ["structure_groupoid", "local_invariant_prop"]], ["mod", "theorem", "lift_prop_within_at_congr_iff", ["structure_groupoid", "local_invariant_prop"]], ["mod", "theorem", "lift_prop_within_at_congr_iff_of_eventually_eq", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_iff", ["structure_groupoid", "local_invariant_prop"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "mem_nhds_within_iff_eventually", []], ["add", "theorem", "mem_nhds_within_iff_eventually_eq", []], ["add", "theorem", "nhds_within_eq_iff_eventually_eq", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "eventually_nhds'", ["local_homeomorph"]], ["add", "theorem", "eventually_nhds", ["local_homeomorph"]], ["add", "theorem", "eventually_nhds_within'", ["local_homeomorph"]], ["add", "theorem", "eventually_nhds_within", ["local_homeomorph"]], ["add", "theorem", "preimage_eventually_eq_target_inter_preimage_inter", ["local_homeomorph"]]]}]}, {"timestamp": 1657096901, "sha": "8ff5e113", "message": "feat(analysis/special_functions/complex/arg): add complex.abs_eq_one_iff (#15125)\nThis is a simpler formulation of `complex.range_exp_mul_I` below.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "abs_eq_one_iff", ["complex"]]]}]}, {"timestamp": 1657096900, "sha": "d908bc0b", "message": "chore(data/fintype): drop a `decidable_pred` assumption (#14971)\nOTOH, now the proof depends on `classical.choice`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "def", "fintype_of_fintype_ne", []]]}]}, {"timestamp": 1657093592, "sha": "a95b4427", "message": "feat(probability/martingale): Doob's maximal inequality (#14737)", "changes": [{"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "set_integral_ge_of_const_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lattice.lean", "newPath": "src/measure_theory/lattice.lean", "changes": [["add", "theorem", "measurable_range_sup''", ["finset"]], ["add", "theorem", "measurable_range_sup'", ["finset"]], ["add", "theorem", "measurable_sup'", ["finset"]]]}, {"oldPath": "src/probability/hitting_time.lean", "newPath": "src/probability/hitting_time.lean", "changes": [["add", "theorem", "stopped_value_hitting_mem", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["add", "theorem", "maximal_ineq", ["measure_theory"]], ["add", "theorem", "smul_le_stopped_value_hitting", ["measure_theory"]]]}]}, {"timestamp": 1657091048, "sha": "bd9c307d", "message": "doc(overview): add probability theory (#15114)\nAlso:\n* Add convolutions to overview and undergrad\n* Add some other probability notions to undergrad\n* Minor cleanup in probability module docs", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": []}, {"oldPath": "src/probability/moments.lean", "newPath": "src/probability/moments.lean", "changes": []}]}, {"timestamp": 1657074384, "sha": "93e97d1e", "message": "feat(analysis/convex/function): Variants of `convex_on.le_right_of_left_le` (#14821)\nThis PR adds four variants of `convex_on.le_right_of_left_le` that are useful when dealing with convex functions on the real numbers.", "changes": [{"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["del", "theorem", "le_right_of_left_le'", ["concave_on"]], ["del", "theorem", "le_right_of_left_le", ["concave_on"]], ["add", "theorem", "left_le_of_le_right''", ["concave_on"]], ["add", "theorem", "right_le_of_le_left''", ["concave_on"]], ["add", "theorem", "right_le_of_le_left'", ["concave_on"]], ["add", "theorem", "right_le_of_le_left", ["concave_on"]], ["add", "theorem", "le_left_of_right_le''", ["convex_on"]], ["add", "theorem", "le_right_of_left_le''", ["convex_on"]]]}]}, {"timestamp": 1657063122, "sha": "71e11de8", "message": "chore(analysis/normed/field/basic): add `@[simp]` to `real.norm_eq_abs (#15006)\n* mark `real.norm_eq_abs` and `abs_nonneg` as `simp` lemmas;\n* add `abs` versions of `is_o.norm_left` etc;\n* add `inner_product_geometry.angle_smul_smul` and `linear_isometry.angle_map`.", "changes": [{"oldPath": "archive/imo/imo1972_q5.lean", "newPath": "archive/imo/imo1972_q5.lean", "changes": []}, {"oldPath": "counterexamples/seminorm_lattice_not_distrib.lean", "newPath": "counterexamples/seminorm_lattice_not_distrib.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "theorem", "abs_nonneg", []]]}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_O_abs_abs", ["asymptotics"]], ["add", "theorem", "is_O_abs_left", ["asymptotics"]], ["add", "theorem", "is_O_abs_right", ["asymptotics"]], ["add", "theorem", "is_O_with_abs_abs", ["asymptotics"]], ["add", "theorem", "is_O_with_abs_left", ["asymptotics"]], ["add", "theorem", "is_O_with_abs_right", ["asymptotics"]], ["add", "theorem", "is_o_abs_abs", ["asymptotics"]], ["add", "theorem", "is_o_abs_left", ["asymptotics"]], ["add", "theorem", "is_o_abs_right", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "def", "im_clm", ["complex"]], ["mod", "def", "re_clm", ["complex"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["mod", "theorem", "norm_eq_abs", ["real"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "angle_smul_smul", ["inner_product_geometry"]], ["add", "theorem", "angle_map", ["linear_isometry"]]]}, {"oldPath": "src/geometry/euclidean/inversion.lean", "newPath": "src/geometry/euclidean/inversion.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}]}, {"timestamp": 1657063121, "sha": "071dc908", "message": "feat(probability/martingale): positive part of a submartingale is also a submartingale (#14932)", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["add", "theorem", "ae_le_of_forall_set_integral_le", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "le_sup_of_le_left", ["filter", "eventually_le"]], ["add", "theorem", "le_sup_of_le_right", ["filter", "eventually_le"]], ["add", "theorem", "sup", ["filter", "eventually_le"]], ["add", "theorem", "sup_le", ["filter", "eventually_le"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": []}]}, {"timestamp": 1657048495, "sha": "f10d0abc", "message": "feat(*): add lemmas about sigma types (#15085)\n* move `set.range_sigma_mk` to `data.set.sigma`;\n* add `set.preimage_image_sigma_mk_of_ne`, `set.image_sigma_mk_preimage_sigma_map_subset`, and `set.image_sigma_mk_preimage_sigma_map`;\n* add `function.injective.of_sigma_map` and `function.injective.sigma_map_iff`;\n* don't use pattern matching in the definition of `prod.to_sigma`;\n* add `filter.map_sigma_mk_comap`", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "range_sigma_mk", ["set"]]]}, {"oldPath": "src/data/set/sigma.lean", "newPath": "src/data/set/sigma.lean", "changes": [["add", "theorem", "image_sigma_mk_preimage_sigma_map", ["set"]], ["add", "theorem", "image_sigma_mk_preimage_sigma_map_subset", ["set"]], ["add", "theorem", "preimage_image_sigma_mk_of_ne", ["set"]], ["add", "theorem", "range_sigma_mk", ["set"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "of_sigma_map", ["function", "injective"]], ["add", "theorem", "sigma_map_iff", ["function", "injective"]], ["mod", "theorem", "fst_to_sigma", ["prod"]], ["mod", "theorem", "snd_to_sigma", ["prod"]], ["mod", "def", "to_sigma", ["prod"]], ["add", "theorem", "to_sigma_mk", ["prod"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "map_sigma_mk_comap", ["filter"]]]}]}, {"timestamp": 1657038409, "sha": "527afb3d", "message": "feat(topology/sets/compacts): prod constructions (#15118)", "changes": [{"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": [["add", "theorem", "coe_prod", ["topological_space", "compact_opens"]], ["add", "theorem", "carrier_eq_coe", ["topological_space", "compacts"]], ["add", "theorem", "coe_prod", ["topological_space", "compacts"]], ["add", "theorem", "carrier_eq_coe", ["topological_space", "nonempty_compacts"]], ["add", "theorem", "coe_prod", ["topological_space", "nonempty_compacts"]], ["add", "theorem", "carrier_eq_coe", ["topological_space", "positive_compacts"]], ["add", "theorem", "coe_prod", ["topological_space", "positive_compacts"]]]}]}, {"timestamp": 1657033498, "sha": "db9cb466", "message": "feat(analysis/complex): equiv_real_prod_symm_apply (#15122)\nPlus some minor lemmas for #15106.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_lt_pi_iff", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "continuous_at_rpow_const", ["real"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "def", "equiv_real_prod", ["complex"]], ["add", "theorem", "equiv_real_prod_symm_apply", ["complex"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_open_ne_fun", []]]}]}, {"timestamp": 1657033497, "sha": "68ae182e", "message": "feat(measure_theory/group/measure): a product of Haar measures is a Haar measure (#15120)", "changes": [{"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["add", "theorem", "integrable_prod_mul", ["measure_theory"]], ["add", "theorem", "integral_prod_mul", ["measure_theory"]], ["add", "theorem", "set_integral_prod_mul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": [["add", "theorem", "integral_target_eq_integral_abs_det_fderiv_smul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "integrable_on_Ici_iff_integrable_on_Ioi'", []], ["add", "theorem", "integrable_on_Ici_iff_integrable_on_Ioi", []]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": [["add", "theorem", "measure_preserving_inv", ["measure_theory", "measure"]]]}]}, {"timestamp": 1657024369, "sha": "365e30de", "message": "chore(data/set/*,order/*): add missing lemmas about `monotone_on` etc (#14943)\n* Add `monotone_on`/`antitone`/`antitone_on` versions of existing `monotone` lemmas for `id`/`const`, `inf`/`sup`/`min`/`max`, `inter`/`union`, and intervals.\n* Drop `set.monotone_prod`, leave `monotone.set_prod` only.\n* Golf some proofs that were broken by removal of `set.monotone_prod`.", "changes": [{"oldPath": "src/data/set/intervals/monotone.lean", "newPath": "src/data/set/intervals/monotone.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "inter", ["antitone_on"]], ["add", "theorem", "union", ["antitone_on"]], ["add", "theorem", "inter", ["monotone_on"]], ["add", "theorem", "union", ["monotone_on"]], ["del", "theorem", "monotone_prod", ["set"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "set_prod", ["antitone"]], ["add", "theorem", "set_prod", ["antitone_on"]], ["add", "theorem", "set_prod", ["monotone"]], ["add", "theorem", "set_prod", ["monotone_on"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "antitone_on_const", []], ["add", "theorem", "monotone_on_const", []], ["add", "theorem", "monotone_on_id", []], ["add", "theorem", "strict_anti_of_le_iff_le", []], ["add", "theorem", "strict_mono_on_id", []]]}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "nhds_eq_uniformity'", []]]}]}, {"timestamp": 1657015827, "sha": "dba3dcef", "message": "feat(measure_theory/function/conditional_expectation): monotonicity of the conditional expectation (#15024)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "condexp_L1_mono", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_nonneg", ["measure_theory"]], ["add", "theorem", "condexp_ind_nonneg", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_nonneg", ["measure_theory"]], ["add", "theorem", "condexp_mono", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L2_indicator", ["measure_theory"]]]}]}, {"timestamp": 1657015826, "sha": "676e7725", "message": "refactor(analysis/convex/specific_functions): Remove hypothesis from `deriv_sqrt_mul_log` (#15015)\nThis PR removes the `hx : 0 < x` hypothesis from `deriv_sqrt_mul_log`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "congr_of_mem", ["has_deriv_within_at"]], ["add", "theorem", "deriv_eq_zero", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["mod", "theorem", "deriv2_sqrt_mul_log", []], ["add", "theorem", "deriv_sqrt_mul_log'", []], ["mod", "theorem", "deriv_sqrt_mul_log", []], ["add", "theorem", "has_deriv_at_sqrt_mul_log", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "eventually_mem_nhds_within", []]]}]}, {"timestamp": 1657010899, "sha": "83eda07e", "message": "refactor(data/real/ennreal): golf, generalize (#14996)\n## Add new lemmas\n* `ennreal.bit0_strict_mono`, `ennreal.bit0_injective`, `ennreal.bit0_lt_bit0`, `ennreal.bit0_le_bit0`, `ennreal.bit0_top`;\n* `ennreal.bit1_strict_mono`, `ennreal.bit1_injective`, `ennreal.bit1_lt_bit1`, `ennreal.bit1_le_bit1`, `ennreal.bit1_top`;\n* `ennreal.div_eq_inv_mul`, `ennreal.of_real_mul'`;\n* `filter.eventually.prod_nhds`.\n## Generalize lemmas\n* Drop unneeded assumption in `real.to_nnreal_bit0` and `ennreal.of_real_bit0`.\n## Rename lemmas\n* `ennreal.mul_div_cancel` → `ennreal.div_mul_cancel`, fixing a TODO;\n* `prod_is_open.mem_nhds` → `prod_mem_nhds`: there are no open sets in the statement.\n## Other changes\n* Golf some proofs.\n* Avoid non-final `simp`s here and there.\n* Move `mul_inv_cancel` etc up to use them in other proofs.\n* Move some `to_nnreal` lemmas above `to_real` lemmas, use them in `to_real` lemmas.\n* Use `to_dual` in `order_iso.inv_ennreal`.", "changes": [{"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "bit0_eq_top_iff", ["ennreal"]], ["mod", "theorem", "bit0_eq_zero_iff", ["ennreal"]], ["mod", "theorem", "bit0_inj", ["ennreal"]], ["add", "theorem", "bit0_injective", ["ennreal"]], ["add", "theorem", "bit0_le_bit0", ["ennreal"]], ["add", "theorem", "bit0_lt_bit0", ["ennreal"]], ["add", "theorem", "bit0_strict_mono", ["ennreal"]], ["add", "theorem", "bit0_top", ["ennreal"]], ["mod", "theorem", "bit1_eq_one_iff", ["ennreal"]], ["mod", "theorem", "bit1_eq_top_iff", ["ennreal"]], ["mod", "theorem", "bit1_inj", ["ennreal"]], ["add", "theorem", "bit1_injective", ["ennreal"]], ["add", "theorem", "bit1_le_bit1", ["ennreal"]], ["add", "theorem", "bit1_lt_bit1", ["ennreal"]], ["mod", "theorem", "bit1_ne_zero", ["ennreal"]], ["add", "theorem", "bit1_strict_mono", ["ennreal"]], ["add", "theorem", "bit1_top", ["ennreal"]], ["add", "theorem", "div_eq_inv_mul", ["ennreal"]], ["add", "theorem", "div_mul_cancel", ["ennreal"]], ["mod", "theorem", "inv_le_iff_le_mul", ["ennreal"]], ["mod", "theorem", "inv_le_inv", ["ennreal"]], ["mod", "theorem", "inv_lt_inv", ["ennreal"]], ["add", "theorem", "inv_strict_anti", ["ennreal"]], ["del", "theorem", "mul_div_cancel", ["ennreal"]], ["mod", "theorem", "mul_div_le", ["ennreal"]], ["mod", "theorem", "of_real_bit0", ["ennreal"]], ["add", "theorem", "of_real_mul'", ["ennreal"]], ["mod", "theorem", "to_nnreal_mul", ["ennreal"]], ["mod", "theorem", "to_nnreal_mul_top", ["ennreal"]], ["mod", "theorem", "to_nnreal_pow", ["ennreal"]], ["mod", "theorem", "to_nnreal_prod", ["ennreal"]], ["mod", "theorem", "to_nnreal_top_mul", ["ennreal"]], ["mod", "theorem", "to_real_mul", ["ennreal"]], ["mod", "theorem", "to_real_mul_top", ["ennreal"]], ["mod", "theorem", "to_real_pow", ["ennreal"]], ["mod", "theorem", "to_real_prod", ["ennreal"]], ["mod", "theorem", "to_real_top_mul", ["ennreal"]], ["mod", "theorem", "inv_ennreal_symm_apply", ["order_iso"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "to_nnreal_bit0", ["real"]]]}, {"oldPath": "src/number_theory/liouville/measure.lean", "newPath": "src/number_theory/liouville/measure.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod_nhds", ["filter", "eventually"]], ["del", "theorem", "mem_nhds", ["prod_is_open"]], ["add", "theorem", "prod_mem_nhds", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1656976986, "sha": "18860933", "message": "chore(analysis/calculus/deriv): make the exponent explicit in pow lemmas (#15117)\nThis is useful to build derivatives for explicit functions using dot notation.", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_pow'", []], ["mod", "theorem", "deriv_pow", []]]}, {"oldPath": "src/analysis/complex/phragmen_lindelof.lean", "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}]}, {"timestamp": 1656970651, "sha": "73d15d77", "message": "feat(number_theory/wilson): add Wilson's Theorem (#14717)\nThe previous \"Wilson's lemma\" (zmod.wilsons_lemma) was a single direction of the iff for Wilson's Theorem. This finishes the proof by adding the (admittedly, much simpler) direction where, if the congruence is satisfied for `n`, then `n` is prime.", "changes": [{"oldPath": null, "newPath": "src/number_theory/wilson.lean", "changes": [["add", "theorem", "prime_iff_fac_equiv_neg_one", ["nat"]], ["add", "theorem", "prime_of_fac_equiv_neg_one", ["nat"]]]}]}, {"timestamp": 1656967233, "sha": "06ac34b8", "message": "feat(analysis/special_functions/complex/arg): `continuous_at_arg_coe_angle` (#14980)\nAdd the lemma that `complex.arg`, coerced to `real.angle`, is\ncontinuous except at 0.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "continuous_at_arg_coe_angle", ["complex"]]]}]}, {"timestamp": 1656964717, "sha": "8f391f56", "message": "feat(geometry/euclidean/basic): `continuous_at_angle` (#15021)\nAdd lemmas that (unoriented) angles are continuous, as a function of a\npair of vectors or a triple of points, except where one of the vectors\nis zero or one of the end points equals the middle point.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "continuous_at_angle", ["euclidean_geometry"]], ["add", "theorem", "continuous_at_angle", ["inner_product_geometry"]]]}]}, {"timestamp": 1656954748, "sha": "407f39b0", "message": "chore(ring_theory/matrix_algebra): golf using `matrix.map` (#15040)\nThis replaces terms of the form `λ i j, a * algebra_map R A (m i j)` with the defeq `a • m.map (algebra_map R A)`, as then we get access to the API about `map`.\nThis also leverages existing bundled maps to avoid reproving linearity in the auxiliary constructions, removing `to_fun` and `to_fun_right_linear` as we can construct `to_fun_bilinear` directly with ease.", "changes": [{"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": [["del", "def", "to_fun", ["matrix_equiv_tensor"]], ["add", "theorem", "to_fun_bilinear_apply", ["matrix_equiv_tensor"]], ["del", "def", "to_fun_right_linear", ["matrix_equiv_tensor"]]]}]}, {"timestamp": 1656898738, "sha": "051dffa5", "message": "refactor(data/nat/parity): `nat.even_succ` -> `nat.even_add_one` (#14917)\nChange `nat.even_succ` to be analogous to `int.even_add_one`.", "changes": [{"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "even_add_one", ["nat"]], ["del", "theorem", "even_succ", ["nat"]]]}]}, {"timestamp": 1656868279, "sha": "46344b4d", "message": "feat(category_theory/limits): bilimit from kernel (#14452)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "mk", ["category_theory", "limits", "binary_cofan", "is_colimit"]], ["add", "def", "mk", ["category_theory", "limits", "binary_fan", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "is_bilimit_of_cokernel_fst", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_bilimit_of_cokernel_snd", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_bilimit_of_kernel_inl", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_bilimit_of_kernel_inr", ["category_theory", "limits", "binary_bicone"]]]}]}, {"timestamp": 1656848851, "sha": "024a4231", "message": "refactor(category_theory): generalise universe levels in preservation statements (#15067)\nThis big refactoring of universe levels in the category theory library allows to express limit preservation statements like exactness of functors which are between categories that are not necessarily in the same universe level. For this change to make sense for fixed diagrams (like coequalizers or binary products), the corresponding index categories, the universe of which so far was pinned to the category they were used for, is now fixed to `Type`.", "changes": [{"oldPath": "src/algebra/category/FinVect/limits.lean", "newPath": "src/algebra/category/FinVect/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": [["mod", "def", "biproduct_iso_pi", ["AddCommGroup"]], ["mod", "theorem", "biproduct_iso_pi_inv_comp_π", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Module/biproducts.lean", "newPath": "src/algebra/category/Module/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/constructions.lean", "newPath": "src/algebra/category/Ring/constructions.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["mod", "def", "to_PresheafedSpace", ["algebraic_geometry", "Spec"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["mod", "theorem", "SheafedSpace_to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["mod", "theorem", "as_coe", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "coe_to_fun_eq", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "comp_base", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "comp_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "congr_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "forget", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "structure", "hom", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "id", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "id_base", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "id_c", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "id_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "of_restrict", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "restrict", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "Γ", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "Γ_map_op", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "map_presheaf", ["category_theory", "functor"]], ["mod", "theorem", "map_presheaf_map_c", ["category_theory", "functor"]], ["mod", "theorem", "map_presheaf_map_f", ["category_theory", "functor"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": [["mod", "structure", "glue_data", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "structure", "glue_data", ["algebraic_geometry", "SheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": [["mod", "def", "colimit", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "colimit_carrier", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "colimit_cocone", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "desc", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["mod", "def", "desc_c_app", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["mod", "theorem", "desc_c_naturality", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["mod", "theorem", "desc_fac", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["mod", "def", "colimit_cocone_is_colimit", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "colimit_presheaf", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "colimit_presheaf_obj_iso_componentwise_limit", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "colimit_presheaf_obj_iso_componentwise_limit_hom_π", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "colimit_presheaf_obj_iso_componentwise_limit_inv_ι_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "componentwise_diagram", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "map_comp_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "map_id_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "pushforward_diagram_to_colimit", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": [["mod", "theorem", "as_coe", ["algebraic_geometry", "SheafedSpace"]], ["mod", "def", "forget_to_PresheafedSpace", ["algebraic_geometry", "SheafedSpace"]], ["del", "def", "punit", ["algebraic_geometry", "SheafedSpace"]], ["add", "def", "unit", ["algebraic_geometry", "SheafedSpace"]], ["mod", "structure", "SheafedSpace", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["mod", "def", "restrict_stalk_iso", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "restrict_stalk_iso_hom_eq_germ", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "restrict_stalk_iso_inv_eq_germ", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "restrict_stalk_iso_inv_eq_of_restrict", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "comp", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "theorem", "congr", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "theorem", "congr_hom", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "theorem", "congr_point", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "theorem", "id", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "def", "stalk_iso", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "theorem", "stalk_specializes_stalk_map", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "def", "stalk_map", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "stalk_map_germ", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/right_derived.lean", "newPath": "src/category_theory/abelian/right_derived.lean", "changes": []}, {"oldPath": "src/category_theory/closed/functor.lean", "newPath": "src/category_theory/closed/functor.lean", "changes": []}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/closed/types.lean", "newPath": "src/category_theory/closed/types.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "def", "functor_comp", ["category_theory", "discrete"]]]}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": []}, {"oldPath": "src/category_theory/functor/flat.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": []}, {"oldPath": "src/category_theory/functor/left_derived.lean", "newPath": "src/category_theory/functor/left_derived.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/biproducts.lean", "newPath": "src/category_theory/idempotents/biproducts.lean", "changes": [["mod", "def", "bicone", ["category_theory", "idempotents", "karoubi", "biproducts"]]]}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/comma.lean", "newPath": "src/category_theory/limits/comma.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["mod", "def", "multiequalizer_equiv", ["category_theory", "limits", "concrete"]], ["mod", "theorem", "multiequalizer_equiv_apply", ["category_theory", "limits", "concrete"]], ["mod", "theorem", "multiequalizer_ext", ["category_theory", "limits", "concrete"]], ["mod", "theorem", "wide_pullback_ext'", ["category_theory", "limits", "concrete"]], ["mod", "theorem", "wide_pullback_ext", ["category_theory", "limits", "concrete"]]]}, {"oldPath": "src/category_theory/limits/cone_category.lean", "newPath": "src/category_theory/limits/cone_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": [["mod", "def", "extend_cofan", ["category_theory"]], ["mod", "def", "extend_cofan_is_colimit", ["category_theory"]], ["mod", "def", "extend_fan", ["category_theory"]], ["mod", "def", "extend_fan_is_limit", ["category_theory"]], ["add", "def", "preserves_shape_fin_of_preserves_binary_and_initial", ["category_theory"]], ["add", "def", "preserves_shape_fin_of_preserves_binary_and_terminal", ["category_theory"]], ["del", "def", "preserves_ulift_fin_of_preserves_binary_and_initial", ["category_theory"]], ["del", "def", "preserves_ulift_fin_of_preserves_binary_and_terminal", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": [["mod", "def", "colimit_quotient_coproduct", ["category_theory", "limits"]], ["mod", "def", "limit_subobject_product", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/constructions/over/default.lean", "newPath": "src/category_theory/limits/constructions/over/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/products.lean", "newPath": "src/category_theory/limits/constructions/over/products.lean", "changes": [["mod", "def", "cones_equiv_functor", ["category_theory", "over", "construct_products"]], ["mod", "def", "cones_equiv_inverse", ["category_theory", "over", "construct_products"]], ["mod", "def", "cones_equiv_inverse_obj", ["category_theory", "over", "construct_products"]], ["mod", "theorem", "over_products_of_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["mod", "def", "wide_pullback_diagram_of_diagram_over", ["category_theory", "over", "construct_products"]]]}, {"oldPath": "src/category_theory/limits/constructions/weakly_initial.lean", "newPath": "src/category_theory/limits/constructions/weakly_initial.lean", "changes": [["mod", "theorem", "has_initial_of_weakly_initial_and_has_wide_equalizers", ["category_theory"]], ["mod", "theorem", "has_weakly_initial_of_weakly_initial_set_and_has_products", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["del", "theorem", "has_smallest_colimits_of_has_colimits", ["category_theory", "limits"]], ["del", "theorem", "has_smallest_limits_of_has_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["mod", "theorem", "has_finite_coproducts_opposite", ["category_theory", "limits"]], ["mod", "theorem", "has_finite_products_opposite", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "preserves_colimits_of_size_shrink", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_size_shrink", ["category_theory", "limits"]], ["add", "def", "preserves_smallest_colimits_of_preserves_colimits", ["category_theory", "limits"]], ["add", "def", "preserves_smallest_limits_of_preserves_limits", ["category_theory", "limits"]], ["add", "def", "reflects_colimits_of_shape_of_equiv", ["category_theory", "limits"]], ["add", "def", "reflects_colimits_of_size_shrink", ["category_theory", "limits"]], ["add", "def", "reflects_limits_of_shape_of_equiv", ["category_theory", "limits"]], ["add", "def", "reflects_limits_of_size_shrink", ["category_theory", "limits"]], ["add", "def", "reflects_smallest_colimits_of_reflects_colimits", ["category_theory", "limits"]], ["add", "def", "reflects_smallest_limits_of_reflects_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/finite.lean", "newPath": "src/category_theory/limits/preserves/finite.lean", "changes": [["add", "def", "preserves_finite_colimits_of_preserves_finite_colimits_of_size", ["category_theory", "limits"]], ["add", "def", "preserves_finite_limits_of_preserves_finite_limits_of_size", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "newPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "newPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "changes": [["add", "theorem", "map_bicone_whisker", ["category_theory", "functor"]], ["add", "def", "preserves_biproducts_shrink", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "newPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/products.lean", "newPath": "src/category_theory/limits/preserves/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": [["mod", "theorem", "has_initial_of_has_initial_of_preserves_colimit", ["category_theory", "limits"]], ["mod", "theorem", "has_terminal_of_has_terminal_of_preserves_limit", ["category_theory", "limits"]], ["mod", "def", "is_colimit_of_has_initial_of_preserves_colimit", ["category_theory", "limits"]], ["mod", "def", "is_initial_obj", ["category_theory", "limits", "is_initial"]], ["mod", "def", "is_initial_of_obj", ["category_theory", "limits", "is_initial"]], ["mod", "def", "is_limit_of_has_terminal_of_preserves_limit", ["category_theory", "limits"]], ["mod", "def", "is_terminal_obj", ["category_theory", "limits", "is_terminal"]], ["mod", "def", "is_terminal_of_obj", ["category_theory", "limits", "is_terminal"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/zero.lean", "newPath": "src/category_theory/limits/preserves/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "theorem", "map_comp_inl_inr_codiag", ["category_theory", "limits", "coprod"]], ["mod", "def", "has_binary_coproducts", ["category_theory", "limits"]], ["mod", "def", "has_binary_products", ["category_theory", "limits"]], ["mod", "def", "pair", ["category_theory", "limits"]], ["mod", "theorem", "diag_map_fst_snd_comp", ["category_theory", "limits", "prod"]], ["mod", "inductive", "walking_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "whisker", ["category_theory", "limits", "bicone"]], ["add", "def", "whisker_is_bilimit_iff", ["category_theory", "limits", "bicone"]], ["add", "def", "whisker_to_cocone", ["category_theory", "limits", "bicone"]], ["add", "def", "whisker_to_cone", ["category_theory", "limits", "bicone"]], ["mod", "def", "reindex", ["category_theory", "limits", "biproduct"]]]}, {"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["mod", "def", "has_coequalizers", ["category_theory", "limits"]], ["mod", "def", "has_equalizers", ["category_theory", "limits"]], ["mod", "def", "ext", ["category_theory", "limits", "parallel_pair"]], ["mod", "def", "parallel_pair", ["category_theory", "limits"]], ["mod", "inductive", "walking_parallel_pair", ["category_theory", "limits"]], ["mod", "def", "walking_parallel_pair_op", ["category_theory", "limits"]], ["mod", "def", "walking_parallel_pair_op_equiv", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["add", "theorem", "has_finite_colimits_of_has_finite_colimits_of_size", ["category_theory", "limits"]], ["add", "theorem", "has_finite_limits_of_has_finite_limits_of_size", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": [["mod", "theorem", "has_finite_coproducts_of_has_coproducts", ["category_theory", "limits"]], ["mod", "theorem", "has_finite_products_of_has_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/functor_category.lean", "newPath": "src/category_theory/limits/shapes/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": [["mod", "inductive", "hom", ["category_theory", "limits", "walking_multicospan"]], ["mod", "inductive", "walking_multicospan", ["category_theory", "limits"]], ["mod", "inductive", "walking_multispan", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["mod", "def", "has_coproducts", ["category_theory", "limits"]], ["mod", "def", "has_products", ["category_theory", "limits"]], ["mod", "theorem", "has_products_of_limit_fans", ["category_theory", "limits"]], ["add", "theorem", "has_smallest_coproducts_of_has_coproducts", ["category_theory", "limits"]], ["add", "theorem", "has_smallest_products_of_has_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "def", "has_pullbacks", ["category_theory", "limits"]], ["mod", "def", "has_pushouts", ["category_theory", "limits"]], ["mod", "def", "hom", ["category_theory", "limits", "walking_cospan"]], ["mod", "def", "walking_cospan", ["category_theory", "limits"]], ["del", "def", "walking_cospan_equiv", ["category_theory", "limits"]], ["del", "def", "walking_cospan_functor", ["category_theory", "limits"]], ["del", "theorem", "walking_cospan_functor_id", ["category_theory", "limits"]], ["del", "theorem", "walking_cospan_functor_inl", ["category_theory", "limits"]], ["del", "theorem", "walking_cospan_functor_inr", ["category_theory", "limits"]], ["del", "theorem", "walking_cospan_functor_left", ["category_theory", "limits"]], ["del", "theorem", "walking_cospan_functor_one", ["category_theory", "limits"]], ["del", "theorem", "walking_cospan_functor_right", ["category_theory", "limits"]], ["mod", "def", "hom", ["category_theory", "limits", "walking_span"]], ["mod", "def", "walking_span", ["category_theory", "limits"]], ["del", "def", "walking_span_equiv", ["category_theory", "limits"]], ["del", "def", "walking_span_functor", ["category_theory", "limits"]], ["del", "theorem", "walking_span_functor_fst", ["category_theory", "limits"]], ["del", "theorem", "walking_span_functor_id", ["category_theory", "limits"]], ["del", "theorem", "walking_span_functor_left", ["category_theory", "limits"]], ["del", "theorem", "walking_span_functor_right", ["category_theory", "limits"]], ["del", "theorem", "walking_span_functor_snd", ["category_theory", "limits"]], ["del", "theorem", "walking_span_functor_zero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "newPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["mod", "def", "as_empty_cocone", ["category_theory", "limits"]], ["mod", "def", "as_empty_cone", ["category_theory", "limits"]], ["mod", "def", "has_initial", ["category_theory", "limits"]], ["mod", "def", "has_terminal", ["category_theory", "limits"]], ["mod", "def", "initial", ["category_theory", "limits"]], ["mod", "def", "is_initial", ["category_theory", "limits"]], ["mod", "def", "is_initial_equiv_unique", ["category_theory", "limits"]], ["mod", "def", "is_terminal", ["category_theory", "limits"]], ["mod", "def", "is_terminal_equiv_unique", ["category_theory", "limits"]], ["mod", "def", "terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_equalizers.lean", "newPath": "src/category_theory/limits/shapes/wide_equalizers.lean", "changes": [["mod", "def", "has_wide_coequalizers", ["category_theory", "limits"]], ["mod", "def", "has_wide_equalizers", ["category_theory", "limits"]], ["mod", "inductive", "hom", ["category_theory", "limits", "walking_parallel_family"]], ["mod", "inductive", "walking_parallel_family", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["add", "theorem", "has_wide_pullbacks_shrink", ["category_theory", "limits"]], ["add", "def", "equivalence_of_equiv", ["category_theory", "limits", "wide_pullback_shape"]], ["mod", "inductive", "hom", ["category_theory", "limits", "wide_pullback_shape"]], ["add", "def", "ulift_equivalence", ["category_theory", "limits", "wide_pullback_shape"]], ["mod", "inductive", "hom", ["category_theory", "limits", "wide_pushout_shape"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": []}, {"oldPath": "src/category_theory/limits/small_complete.lean", "newPath": "src/category_theory/limits/small_complete.lean", "changes": []}, {"oldPath": "src/category_theory/limits/punit.lean", "newPath": "src/category_theory/limits/unit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/yoneda.lean", "newPath": "src/category_theory/limits/yoneda.lean", "changes": [["mod", "def", "coyoneda_jointly_reflects_limits", ["category_theory"]], ["mod", "def", "yoneda_jointly_reflects_limits", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/preadditive.lean", "newPath": "src/category_theory/monoidal/preadditive.lean", "changes": [["mod", "def", "left_distributor", ["category_theory"]], ["mod", "theorem", "left_distributor_assoc", ["category_theory"]], ["mod", "theorem", "left_distributor_hom", ["category_theory"]], ["mod", "theorem", "left_distributor_inv", ["category_theory"]], ["mod", "def", "right_distributor", ["category_theory"]], ["mod", "theorem", "right_distributor_assoc", ["category_theory"]], ["mod", "theorem", "right_distributor_hom", ["category_theory"]], ["mod", "theorem", "right_distributor_inv", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": [["mod", "structure", "Mat_", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/hom_orthogonal.lean", "newPath": "src/category_theory/preadditive/hom_orthogonal.lean", "changes": []}, {"oldPath": "src/category_theory/sites/left_exact.lean", "newPath": "src/category_theory/sites/left_exact.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["mod", "theorem", "coequalizer_is_open_iff", ["Top"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/functors.lean", "newPath": "src/topology/sheaves/functors.lean", "changes": []}, {"oldPath": "src/topology/sheaves/limits.lean", "newPath": "src/topology/sheaves/limits.lean", "changes": [["mod", "theorem", "is_sheaf_of_is_limit", ["Top"]], ["mod", "theorem", "limit_is_sheaf", ["Top"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["mod", "theorem", "pullback_obj_eq_pullback_obj", ["Top", "presheaf"]], ["mod", "def", "comp", ["Top", "presheaf", "pushforward"]], ["mod", "theorem", "comp_eq", ["Top", "presheaf", "pushforward"]], ["mod", "theorem", "comp_hom_app", ["Top", "presheaf", "pushforward"]], ["mod", "theorem", "comp_inv_app", ["Top", "presheaf", "pushforward"]], ["mod", "theorem", "pushforward_eq'", ["Top", "presheaf"]], ["mod", "def", "pushforward_eq", ["Top", "presheaf"]], ["mod", "theorem", "pushforward_eq_eq", ["Top", "presheaf"]], ["mod", "theorem", "pushforward_eq_rfl", ["Top", "presheaf"]], ["mod", "def", "pushforward_map", ["Top", "presheaf"]], ["mod", "def", "pushforward_obj", ["Top", "presheaf"]], ["mod", "theorem", "pushforward_obj_map", ["Top", "presheaf"]], ["mod", "theorem", "pushforward_obj_obj", ["Top", "presheaf"]], ["mod", "def", "presheaf", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["mod", "def", "is_sheaf", ["Top", "presheaf"]], ["del", "theorem", "is_sheaf_punit", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_unit", ["Top", "presheaf"]], ["mod", "def", "sheaf", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": [["mod", "def", "diagram", ["Top", "presheaf", "sheaf_condition_equalizer_products"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1656839156, "sha": "6e8f25e1", "message": "chore(ring_theory/dedekind_domain/ideal): fix style of a lemma statement (#15097)", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["mod", "theorem", "ideal_factors_fun_of_quot_hom_comp", []]]}]}, {"timestamp": 1656771241, "sha": "9e701b98", "message": "feat(ring_theory/dedekind_domain): If `R/I` is isomorphic to `S/J` then the factorisations of `I` and `J` have the same shape (#11053)\nIn this PR, we show that given Dedekind domains `R` and `S` with ideals `I` and `J`respectively, if quotients `R/I` and `S/J` are isomorphic, then the prime factorizations of `I` and `J` have the same shape, i.e. they have the same number of prime factors and up to permutation these prime factors have the same multiplicities. We can then get [the Dedekind-Kummer theorem](https://kconrad.math.uconn.edu/blurbs/gradnumthy/dedekindf.pdf) as a corollary of this statement. \nFor previous discussion concerning the structure of this PR and the results it proves, see #9345", "changes": [{"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["add", "theorem", "of_bijective_apply_symm_apply", ["mul_equiv"]]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "not_dom_iff_eq_top", ["enat"]]]}, {"oldPath": "src/ring_theory/chain_of_divisors.lean", "newPath": "src/ring_theory/chain_of_divisors.lean", "changes": [["add", "theorem", "coe_factor_order_iso_map_eq_one_iff", []], ["add", "theorem", "factor_order_iso_map_one_eq_bot", []], ["add", "theorem", "map_prime_of_factor_order_iso", []], ["add", "theorem", "mem_normalized_factors_factor_dvd_iso_of_mem_normalized_factors", []], ["add", "theorem", "mem_normalized_factors_factor_order_iso_of_mem_normalized_factors", []], ["add", "def", "mk_factor_order_iso_of_factor_dvd_equiv", []], ["add", "theorem", "multiplicity_eq_multiplicity_factor_dvd_iso_of_mem_normalized_factor", []], ["add", "theorem", "multiplicity_prime_eq_multiplicity_image_by_factor_order_iso", []], ["mod", "theorem", "multiplicity_prime_le_multiplicity_image_by_factor_order_iso", []], ["mod", "theorem", "pow_image_of_prime_by_factor_order_iso_dvd", []]]}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "def", "ideal_factors_equiv_of_quot_equiv", []], ["add", "def", "ideal_factors_fun_of_quot_hom", []], ["add", "theorem", "ideal_factors_fun_of_quot_hom_comp", []], ["add", "theorem", "ideal_factors_fun_of_quot_hom_id", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_mk_eq_multiplicity", ["multiplicity"]]]}]}, {"timestamp": 1656763343, "sha": "4823da23", "message": "feat(data/nat/basic): add `mul_div_mul_comm_of_dvd_dvd` (#15031)\nAdd lemma `mul_div_mul_comm_of_dvd_dvd (hac : c ∣ a) (hbd : d ∣ b) : (a * b) / (c * d) = (a / c) * (b / d)`\n(Compare with `mul_div_mul_comm`, which holds for a `division_comm_monoid`)\nAlso adds the same lemma for a `euclidean_domain`.", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "mul_div_mul_comm_of_dvd_dvd", ["euclidean_domain"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "mul_div_mul_comm_of_dvd_dvd", ["nat"]]]}]}, {"timestamp": 1656756737, "sha": "2d76f563", "message": "chore(algebra/associated): make `irreducible` not a class (#14713)\nThis functionality was rarely used and doesn't align with how `irreducible` is used in practice.\nIn a future PR, we can remove some `unfreezingI`s caused by this.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "not_unit", ["irreducible"]], ["add", "structure", "irreducible", []]]}, {"oldPath": "src/algebra/module/pid.lean", "newPath": "src/algebra/module/pid.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/separable_degree.lean", "newPath": "src/field_theory/separable_degree.lean", "changes": [["add", "theorem", "has_separable_contraction", ["irreducible"]], ["del", "theorem", "irreducible_has_separable_contraction", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "fact_irreducible_factor", ["polynomial"]], ["add", "theorem", "irreducible_factor", ["polynomial"]]]}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "coe_injective'", ["adjoin_root"]], ["mod", "theorem", "coe_injective", ["adjoin_root"]], ["mod", "theorem", "mul_div_root_cancel", ["adjoin_root"]]]}]}, {"timestamp": 1656736160, "sha": "855ed5c1", "message": "chore(scripts): update nolints.txt (#15090)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1656709006, "sha": "56544106", "message": "chore(group_theory/group_action/opposite): add a missed smul/scalar rename (#15082)\n…ename", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": []}]}, {"timestamp": 1656709005, "sha": "774e6803", "message": "feat(data/fintype/basic): add noncomputable equivalences between finsets as fintypes and `fin s.card`, etc. (#15080)\nAs `s.card` is not defeq to `fintype.card s`, it is convenient to have these definitions in addition to `fintype.equiv_fin` and others (though we omit the computable ones).", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1656709004, "sha": "9fcf391e", "message": "chore(group_theory/group_action/basic): relax monoid to mul_one_class (#15051)", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "theorem", "smul_one_mul", []]]}]}, {"timestamp": 1656709003, "sha": "e94e5c08", "message": "feat(topology/uniform_space/basic): uniform continuity from/to an infimum of uniform spaces (#14892)\nThis adds uniform versions of various topological lemmas about continuity from/to infimas of topological spaces", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_Inf_dom", []], ["add", "theorem", "uniform_continuous_Inf_dom₂", []], ["add", "theorem", "uniform_continuous_Inf_rng", []], ["add", "theorem", "uniform_continuous_inf_dom_left", []], ["add", "theorem", "uniform_continuous_inf_dom_left₂", []], ["add", "theorem", "uniform_continuous_inf_dom_right", []], ["add", "theorem", "uniform_continuous_inf_dom_right₂", []], ["add", "theorem", "uniform_continuous_inf_rng", []], ["add", "theorem", "uniform_continuous_infi_dom", []], ["add", "theorem", "uniform_continuous_infi_rng", []]]}]}, {"timestamp": 1656700275, "sha": "ff5e97ad", "message": "feat(order/lattice, data/set): some helper lemmas (#14789)\nThis PR provides lemmas describing when `s ∪ a = t ∪ a`, in both necessary and iff forms, as well as intersection and lattice versions.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_eq_inter_iff_subset_subset", ["set"]], ["add", "theorem", "inter_eq_inter_of_subset_of_subset", ["set"]], ["add", "theorem", "union_eq_union_iff_subset_subset", ["set"]], ["add", "theorem", "union_eq_union_of_subset_of_subset", ["set"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_eq_inf_iff_le_le", []], ["add", "theorem", "inf_eq_inf_of_le_of_le", []], ["add", "theorem", "sup_eq_sup_iff_le_le", []], ["add", "theorem", "sup_eq_sup_of_le_of_le", []]]}]}, {"timestamp": 1656700274, "sha": "7f95e220", "message": "feat(linear_algebra/*): add lemma `linear_independent.finite_of_is_noetherian` (#14714)\nThis replaces `fintype_of_is_noetherian_linear_independent` which gave the same\nconclusion except demanded `strong_rank_condition R` instead of just `nontrivial R`.\nAlso some other minor gaps filled.", "changes": [{"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": [["add", "theorem", "linear_independent'", ["ideal", "complete_lattice", "independent"]], ["add", "theorem", "torsion_of_eq_bot_iff_of_no_zero_smul_divisors", ["ideal"]], ["add", "theorem", "torsion_of_eq_top_iff", ["ideal"]], ["add", "theorem", "torsion_of_zero", ["ideal"]]]}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": []}, {"oldPath": "src/data/finite/set.lean", "newPath": "src/data/finite/set.lean", "changes": [["add", "theorem", "of_injective_finite_range", ["finite"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "theorem", "independent_iff_linear_independent_of_ne_zero", ["complete_lattice"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "finite_of_is_noetherian_linear_independent", []], ["add", "theorem", "finite_of_is_noetherian", ["linear_independent"]], ["add", "theorem", "set_finite_of_is_noetherian", ["linear_independent"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "independent_span_singleton", ["linear_independent"]]]}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["mod", "theorem", "to_span_singleton_one", ["linear_map"]], ["add", "theorem", "to_span_singleton_zero", ["linear_map"]], ["mod", "theorem", "span_eq_supr_of_singleton_spans", ["submodule"]], ["add", "theorem", "span_range_eq_supr", ["submodule"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "finite_of_independent", ["complete_lattice", "well_founded"]]]}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": [["add", "theorem", "comp'", ["complete_lattice", "independent"]], ["mod", "theorem", "comp", ["complete_lattice", "independent"]], ["add", "theorem", "injective", ["complete_lattice", "independent"]], ["mod", "theorem", "mono", ["complete_lattice", "independent"]], ["add", "theorem", "set_independent_range", ["complete_lattice", "independent"]], ["mod", "theorem", "independent_def''", ["complete_lattice"]], ["mod", "theorem", "independent_def'", ["complete_lattice"]]]}]}, {"timestamp": 1656686365, "sha": "2ae20651", "message": "chore(data/set,topology): fix 2 lemma names (#15079)\n* rename `set.quot_mk_range_eq` to `set.range_quotient_mk`;\n* rename `is_closed_infi_iff` to `is_closed_supr_iff`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "quot_mk_range_eq", ["set"]], ["add", "theorem", "range_quotient_mk", ["set"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["del", "theorem", "is_closed_infi_iff", []], ["add", "theorem", "is_closed_supr_iff", []]]}]}, {"timestamp": 1656686364, "sha": "8b69a4b2", "message": "feat(ring_theory): Some missing lemmas (#15064)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "closure_le_to_add_submonoid_span", ["submodule"]], ["add", "theorem", "closure_subset_span", ["submodule"]], ["add", "theorem", "span_closure", ["submodule"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_span", ["algebra"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "is_noetherian_ring", ["algebra", "finite_type"]], ["add", "theorem", "fg_iff_finite_type", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "smul_inf_le", ["submodule"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_bsupr", ["submodule"]], ["add", "theorem", "fg_finset_sup", ["submodule"]], ["add", "theorem", "fg_supr", ["submodule"]]]}]}, {"timestamp": 1656686362, "sha": "36ee9aff", "message": "feat(topology/separation): `separation_quotient α` is a T₀ space (#15043)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1656686360, "sha": "0369f202", "message": "feat(order/locally_finite): make `fintype.to_locally_finite_order` computable (#14733)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "def", "to_locally_finite_order", ["fintype"]]]}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1656678395, "sha": "0522ee08", "message": "refactor(ring_theory/jacobson): remove unnecessary `fintype.trunc_equiv_fin` (#15077)", "changes": [{"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}]}, {"timestamp": 1656678394, "sha": "640955c6", "message": "refactor(ring_theory/finiteness): remove unnecessary `fintype.trunc_equiv_fin` (#15076)", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1656678393, "sha": "f9b939c3", "message": "feat(data/nat/enat): simple lemmas on `enat` (#15029)", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "eq_zero_iff", ["enat"]], ["add", "theorem", "ne_zero_iff", ["enat"]], ["add", "theorem", "not_is_max_coe", ["enat"]]]}]}, {"timestamp": 1656678392, "sha": "6e362f68", "message": "chore(algebra/order/monoid): golf proofs, fix docs (#14728)", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}]}, {"timestamp": 1656670804, "sha": "9e97baae", "message": "feat(data/list/basic): add filter_map_join (#14777)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_map_join", ["list"]]]}]}, {"timestamp": 1656670803, "sha": "e73ac940", "message": "feat (analysis/normed_space/lp_space):add l_infinity ring instances (#14104)\nWe define pointwise multiplication on `lp E ∞` and give it has_mul, non_unital_ring, non_unital_normed_ring, ring, normed_ring, comm_ring and normed_comm_ring instances under the appropriate assumptions.", "changes": [{"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["add", "theorem", "int_cast_mem_ℓp_infty", []], ["add", "theorem", "infty_coe_fn_int_cast", ["lp"]], ["add", "theorem", "infty_coe_fn_mul", ["lp"]], ["add", "theorem", "infty_coe_fn_nat_cast", ["lp"]], ["add", "theorem", "infty_coe_fn_one", ["lp"]], ["add", "theorem", "infty_coe_fn_pow", ["lp"]], ["add", "theorem", "infty_mul", ["mem_ℓp"]], ["add", "theorem", "infty_pow", ["mem_ℓp"]], ["add", "theorem", "nat_cast_mem_ℓp_infty", []], ["add", "theorem", "one_mem_ℓp_infty", []]]}]}, {"timestamp": 1656663082, "sha": "ce332c11", "message": "refactor(algebra/group_power): split ring lemmas into a separate file (#15032)\nThis doesn't actually stop `algebra.ring.basic` being imported into `group_power.basic` yet, but it makes it easier to make that change in future. Two ~300 line files are also slightly easier to manage than one ~600 line file, and ring/add_group feels like a natural place to draw the line\nAll lemmas have just been moved, and none have been renamed. Some lemmas have had their `R` variables renamed to `M` to better reflect that they apply to monoids with zero.\nBy grouping together the `monoid_with_zero` lemmas from separate files, it become apparent that there's some overlap.\nThis PR does not attempt to clean this up, in the interest of limiting the the scope of this change to just moves.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "add_sq'", []], ["del", "theorem", "add_sq", []], ["del", "theorem", "coe_pow_monoid_with_zero_hom", []], ["del", "theorem", "eq_or_eq_neg_of_sq_eq_sq", []], ["del", "theorem", "min_pow_dvd_add", []], ["del", "theorem", "mul_neg_one_pow_eq_zero_iff", []], ["del", "theorem", "neg_one_pow_eq_or", []], ["del", "theorem", "neg_one_pow_mul_eq_zero_iff", []], ["del", "theorem", "neg_one_sq", []], ["del", "theorem", "neg_pow", []], ["del", "theorem", "neg_pow_bit0", []], ["del", "theorem", "neg_pow_bit1", []], ["del", "theorem", "neg_sq", []], ["del", "theorem", "pow_dvd_pow_iff", []], ["del", "theorem", "pow_eq_zero", []], ["del", "theorem", "pow_eq_zero_iff'", []], ["del", "theorem", "pow_eq_zero_iff", []], ["del", "theorem", "pow_eq_zero_of_le", []], ["del", "def", "pow_monoid_with_zero_hom", []], ["del", "theorem", "pow_monoid_with_zero_hom_apply", []], ["del", "theorem", "pow_ne_zero", []], ["del", "theorem", "pow_ne_zero_iff", []], ["del", "theorem", "sq_eq_one_iff", []], ["del", "theorem", "sq_eq_sq_iff_eq_or_eq_neg", []], ["del", "theorem", "sq_eq_zero_iff", []], ["del", "theorem", "sq_ne_one_iff", []], ["del", "theorem", "sq_sub_sq", []], ["del", "theorem", "sub_sq'", []], ["del", "theorem", "sub_sq", []], ["del", "theorem", "zero_pow", []], ["del", "theorem", "zero_pow_eq", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group_power/ring.lean", "changes": [["add", "theorem", "add_sq'", []], ["add", "theorem", "add_sq", []], ["add", "theorem", "coe_pow_monoid_with_zero_hom", []], ["add", "theorem", "eq_or_eq_neg_of_sq_eq_sq", []], ["add", "theorem", "min_pow_dvd_add", []], ["add", "theorem", "mul_neg_one_pow_eq_zero_iff", []], ["add", "theorem", "ne_zero_pow", []], ["add", "theorem", "neg_one_pow_eq_or", []], ["add", "theorem", "neg_one_pow_mul_eq_zero_iff", []], ["add", "theorem", "neg_one_sq", []], ["add", "theorem", "neg_pow", []], ["add", "theorem", "neg_pow_bit0", []], ["add", "theorem", "neg_pow_bit1", []], ["add", "theorem", "neg_sq", []], ["add", "theorem", "pow_dvd_pow_iff", []], ["add", "theorem", "pow_eq_zero", []], ["add", "theorem", "pow_eq_zero_iff'", []], ["add", "theorem", "pow_eq_zero_iff", []], ["add", "theorem", "pow_eq_zero_of_le", []], ["add", "def", "pow_monoid_with_zero_hom", []], ["add", "theorem", "pow_monoid_with_zero_hom_apply", []], ["add", "theorem", "pow_ne_zero", []], ["add", "theorem", "pow_ne_zero_iff", []], ["add", "theorem", "inverse_pow", ["ring"]], ["add", "theorem", "sq_eq_one_iff", []], ["add", "theorem", "sq_eq_sq_iff_eq_or_eq_neg", []], ["add", "theorem", "sq_eq_zero_iff", []], ["add", "theorem", "sq_ne_one_iff", []], ["add", "theorem", "sq_sub_sq", []], ["add", "theorem", "sub_sq'", []], ["add", "theorem", "sub_sq", []], ["add", "theorem", "zero_pow'", []], ["add", "theorem", "zero_pow", []], ["add", "theorem", "zero_pow_eq", []], ["add", "theorem", "zero_pow_eq_zero", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "ne_zero_pow", []], ["del", "theorem", "inverse_pow", ["ring"]], ["del", "theorem", "zero_pow'", []], ["del", "theorem", "zero_pow_eq_zero", []]]}]}, {"timestamp": 1656649303, "sha": "7e244d8b", "message": "feat(algebra/category/Module): upgrade `free : Type ⥤ Module R` to a monoidal functor (#14328)", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": [["add", "theorem", "ε_apply", ["Module", "free"]], ["mod", "def", "μ", ["Module", "free"]], ["add", "def", "monoidal_free", ["Module"]]]}]}, {"timestamp": 1656626387, "sha": "9229b0e0", "message": "chore(data/nat/factorization/basic): delete `import tactic.linarith` (#15075)\nRemoves the import of `tactic.linarith` that's no longer needed.", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}]}, {"timestamp": 1656626386, "sha": "e7425e7b", "message": "feat(data/fin/basic): `induction_zero` and `induction_succ` lemmas (#15060)\nThis pull request introduces `fin.induction_zero` and `fin.induction_succ` simp lemmas for `fin.induction`, similar to `fin.cases_zero` and `fin.cases_succ` for `fin.cases`.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "induction_succ", ["fin"]], ["add", "theorem", "induction_zero", ["fin"]]]}]}, {"timestamp": 1656618349, "sha": "806bbb01", "message": "refactor(algebra/group/defs): rename has_scalar to has_smul (#14559)\nDiscussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/scalar.20smul.20naming.20discrepancy", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "map_smul_of_tower", ["alg_hom"]]]}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["mod", "theorem", "coe_algebra_map", ["subalgebra"]], ["mod", "theorem", "coe_smul", ["subalgebra"]], ["mod", "theorem", "smul_def", ["subalgebra"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/algebra/unitization.lean", "newPath": "src/algebra/algebra/unitization.lean", "changes": [["mod", "theorem", "coe_smul", ["unitization"]], ["mod", "theorem", "fst_mul", ["unitization"]], ["mod", "theorem", "fst_smul", ["unitization"]], ["mod", "theorem", "inl_smul", ["unitization"]], ["mod", "theorem", "snd_mul", ["unitization"]], ["mod", "theorem", "snd_smul", ["unitization"]]]}, {"oldPath": "src/algebra/category/Module/filtered_colimits.lean", "newPath": "src/algebra/category/Module/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["del", "def", "has_scalar", ["free_algebra", "pre"]], ["add", "def", "has_smul", ["free_algebra", "pre"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "smul_mk0", ["units"]]]}, {"oldPath": "src/algebra/hom/group_action.lean", "newPath": "src/algebra/hom/group_action.lean", "changes": []}, {"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": []}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "structure", "core", ["module"]]]}, {"oldPath": "src/algebra/module/hom.lean", "newPath": "src/algebra/module/hom.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "map_smul_of_tower", ["linear_map"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["mod", "theorem", "pi", ["is_smul_regular"]]]}, {"oldPath": "src/algebra/module/pointwise_pi.lean", "newPath": "src/algebra/module/pointwise_pi.lean", "changes": [["mod", "theorem", "smul_pi_subset", []], ["mod", "theorem", "smul_univ_pi", []]]}, {"oldPath": "src/algebra/module/prod.lean", "newPath": "src/algebra/module/prod.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule/basic.lean", "newPath": "src/algebra/module/submodule/basic.lean", "changes": [["mod", "theorem", "coe_smul_of_tower", ["submodule"]], ["mod", "theorem", "smul_mem_iff'", ["submodule"]], ["mod", "theorem", "smul_of_tower_mem", ["submodule"]]]}, {"oldPath": "src/algebra/module/submodule/lattice.lean", "newPath": "src/algebra/module/submodule/lattice.lean", "changes": []}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": [["mod", "def", "is_torsion'", ["module"]], ["del", "def", "has_scalar", ["module", "is_torsion_by_set"]], ["add", "def", "has_smul", ["module", "is_torsion_by_set"]]]}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": [["mod", "theorem", "smul_down'", ["ulift"]], ["mod", "theorem", "smul_down", ["ulift"]]]}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["mod", "theorem", "op_smul", ["mul_opposite"]], ["mod", "theorem", "unop_smul", ["mul_opposite"]]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": [["mod", "theorem", "antitone_smul_left", []], ["mod", "theorem", "strict_anti_smul_left", []]]}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["mod", "theorem", "monotone_smul_left", []], ["mod", "theorem", "of_dual_smul", ["order_dual"]], ["mod", "theorem", "to_dual_smul", ["order_dual"]], ["mod", "theorem", "strict_mono_smul_left", []]]}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["mod", "theorem", "smul", ["function", "periodic"]]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/regular/smul.lean", "newPath": "src/algebra/regular/smul.lean", "changes": [["mod", "def", "is_smul_regular", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/pi.lean", "newPath": "src/algebra/star/pi.lean", "changes": []}, {"oldPath": "src/algebra/star/prod.lean", "newPath": "src/algebra/star/prod.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["mod", "theorem", "coe_smul", ["self_adjoint"]], ["mod", "theorem", "smul_mem", ["self_adjoint"]]]}, {"oldPath": "src/algebra/symmetrized.lean", "newPath": "src/algebra/symmetrized.lean", "changes": [["mod", "theorem", "sym_smul", ["sym_alg"]], ["mod", "theorem", "unsym_smul", ["sym_alg"]]]}, {"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": [["mod", "theorem", "fst_mul", ["triv_sq_zero_ext"]], ["mod", "theorem", "fst_smul", ["triv_sq_zero_ext"]], ["mod", "theorem", "inl_smul", ["triv_sq_zero_ext"]], ["mod", "theorem", "inr_smul", ["triv_sq_zero_ext"]], ["mod", "theorem", "snd_mul", ["triv_sq_zero_ext"]], ["mod", "theorem", "snd_smul", ["triv_sq_zero_ext"]]]}, {"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": [["mod", "theorem", "trop_smul", ["tropical"]], ["mod", "theorem", "untrop_pow", ["tropical"]]]}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["mod", "structure", "convex_cone", []]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": []}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["mod", "theorem", "coe_smul", ["add_group_seminorm"]], ["mod", "theorem", "smul_apply", ["add_group_seminorm"]], ["mod", "theorem", "smul_sup", ["add_group_seminorm"]], ["mod", "theorem", "coe_smul", ["seminorm"]], ["mod", "theorem", "smul_apply", ["seminorm"]], ["mod", "theorem", "smul_inf", ["seminorm"]], ["mod", "theorem", "smul_sup", ["seminorm"]], ["mod", "structure", "seminorm", []]]}, {"oldPath": "src/data/bracket.lean", "newPath": "src/data/bracket.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "def", "comap_has_scalar", ["finsupp"]], ["add", "def", "comap_has_smul", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "matrix", ["is_smul_regular"]], ["mod", "theorem", "col_smul", ["matrix"]], ["mod", "theorem", "conj_transpose_smul", ["matrix"]], ["mod", "theorem", "diag_smul", ["matrix"]], ["mod", "theorem", "map_smul", ["matrix"]], ["mod", "theorem", "minor_smul", ["matrix"]], ["mod", "theorem", "row_smul", ["matrix"]], ["mod", "theorem", "transpose_smul", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["mod", "theorem", "from_blocks_smul", ["matrix"]]]}, {"oldPath": "src/data/matrix/hadamard.lean", "newPath": "src/data/matrix/hadamard.lean", "changes": [["mod", "theorem", "hadamard_smul", ["matrix"]], ["mod", "theorem", "smul_hadamard", ["matrix"]]]}, {"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": [["mod", "theorem", "kronecker_map_smul_left", ["matrix"]], ["mod", "theorem", "kronecker_map_smul_right", ["matrix"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "smul_vec2", ["matrix"]], ["mod", "theorem", "smul_vec3", ["matrix"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_smul", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "image2_smul", ["set"]], ["mod", "theorem", "range_smul_range", ["set"]], ["mod", "theorem", "smul_set_range", ["set"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["mod", "theorem", "coe_smul", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["mod", "theorem", "of_fraction_ring_smul", ["ratfunc"]], ["mod", "theorem", "to_fraction_ring_smul", ["ratfunc"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["del", "theorem", "is_scalar_tower", ["has_scalar", "comp"]], ["del", "def", "smul", ["has_scalar", "comp"]], ["del", "theorem", "smul_comm_class'", ["has_scalar", "comp"]], ["del", "theorem", "smul_comm_class", ["has_scalar", "comp"]], ["del", "def", "comp", ["has_scalar"]], ["add", "theorem", "is_scalar_tower", ["has_smul", "comp"]], ["add", "def", "smul", ["has_smul", "comp"]], ["add", "theorem", "smul_comm_class'", ["has_smul", "comp"]], ["add", "theorem", "smul_comm_class", ["has_smul", "comp"]], ["add", "def", "comp", ["has_smul"]], ["mod", "theorem", "unop_smul_eq_smul", ["is_central_scalar"]], ["mod", "theorem", "of_smul_one_mul", ["is_scalar_tower"]], ["mod", "theorem", "mul_smul_comm", []], ["mod", "theorem", "smul_assoc", []], ["mod", "theorem", "of_mul_smul_one", ["smul_comm_class"]], ["mod", "theorem", "symm", ["smul_comm_class"]], ["mod", "theorem", "smul_left_injective'", []], ["mod", "theorem", "smul_mul_assoc", []], ["mod", "theorem", "smul_one_mul", []], ["mod", "theorem", "smul_one_smul", []], ["mod", "theorem", "smul_smul_smul_comm", []]]}, {"oldPath": "src/group_theory/group_action/embedding.lean", "newPath": "src/group_theory/group_action/embedding.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": [["mod", "theorem", "op_smul_eq_op_smul_op", ["mul_opposite"]], ["mod", "theorem", "unop_smul_eq_unop_smul_unop", ["mul_opposite"]]]}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": [["mod", "theorem", "extend_smul", ["function"]], ["mod", "theorem", "update_smul", ["function"]], ["mod", "theorem", "smul_apply'", ["pi"]], ["mod", "theorem", "smul_apply", ["pi"]], ["mod", "theorem", "smul_def", ["pi"]], ["mod", "theorem", "piecewise_smul", ["set"]]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/sigma.lean", "newPath": "src/group_theory/group_action/sigma.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": [["mod", "theorem", "smul_mem_iff'", ["sub_mul_action"]], ["mod", "structure", "sub_mul_action", []]]}, {"oldPath": "src/group_theory/group_action/sum.lean", "newPath": "src/group_theory/group_action/sum.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": [["mod", "theorem", "smul_def", ["units"]], ["mod", "theorem", "smul_is_unit", ["units"]]]}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["mod", "theorem", "smul_mk", ["localization"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "smul_def", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/circulant.lean", "newPath": "src/linear_algebra/matrix/circulant.lean", "changes": [["mod", "theorem", "circulant_smul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/symmetric.lean", "newPath": "src/linear_algebra/matrix/symmetric.lean", "changes": [["mod", "theorem", "smul", ["matrix", "is_symm"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": [["mod", "def", "restrict_scalars_equiv", ["submodule", "quotient"]]]}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["mod", "theorem", "span_le_restrict_scalars", ["submodule"]], ["mod", "theorem", "span_singleton_group_smul_eq", ["submodule"]], ["mod", "theorem", "span_singleton_smul_le", ["submodule"]], ["mod", "theorem", "span_span_of_tower", ["submodule"]], ["mod", "theorem", "span_subset_span", ["submodule"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "def", "aux", ["tensor_product", "smul"]], ["mod", "theorem", "aux_of", ["tensor_product", "smul"]]]}, {"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": [["mod", "theorem", "smul_def", ["equiv"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "theorem", "const_smul", ["measure_theory", "ae_strongly_measurable'"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/group/action.lean", "newPath": "src/measure_theory/group/action.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["mod", "structure", "is_fundamental_domain", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "coe_smul", ["measure_theory", "simple_func"]], ["mod", "theorem", "smul_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "smul_eq_map", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["mod", "theorem", "smul_supr", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_smul", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "const_smul", ["filter", "eventually_eq"]], ["mod", "theorem", "smul", ["filter", "eventually_eq"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["mod", "theorem", "coe_smul'", ["filter", "germ"]], ["mod", "theorem", "coe_smul", ["filter", "germ"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["mod", "theorem", "smul", ["measure_theory", "adapted"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["del", "def", "has_scalar_pi", ["polynomial"]], ["add", "def", "has_smul_pi", ["polynomial"]], ["mod", "theorem", "polynomial_smul_apply", []]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["mod", "theorem", "map_smul_of_tower", ["derivation"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integer.lean", "newPath": "src/ring_theory/localization/integer.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/localization_localization.lean", "newPath": "src/ring_theory/localization/localization_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["mod", "theorem", "smul_def", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["mod", "theorem", "smul_def", ["subsemiring"]]]}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["mod", "theorem", "map_smul_of_tower", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_mul_action.lean", "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["mod", "theorem", "coe_smul", ["continuous_map"]], ["mod", "theorem", "smul_apply", ["continuous_map"]], ["mod", "theorem", "smul_comp", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": [["mod", "theorem", "coe_smul", ["locally_constant"]], ["mod", "theorem", "smul_apply", ["locally_constant"]]]}, {"oldPath": "src/topology/metric_space/algebra.lean", "newPath": "src/topology/metric_space/algebra.lean", "changes": []}, {"oldPath": "test/has_scalar_comp_loop.lean", "newPath": "test/has_scalar_comp_loop.lean", "changes": [["mod", "def", "foo", []]]}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}, {"oldPath": "test/to_additive.lean", "newPath": "test/to_additive.lean", "changes": []}]}, {"timestamp": 1656609502, "sha": "c10efa66", "message": "refactor(algebra/hom/group): generalize basic API of `monoid_hom` to `monoid_hom_class` (#14997)\nThis PR generalizes part of the basic API of monoid homs to monoid_hom_class. This notably includes things like monoid_hom.mker, submonoid.map and submonoid.comap. I left the namespaces unchanged, for example `monoid_hom.mker` remains the same even though it is now defined for any `monoid_hom_class` morphism; this way dot notation still (mostly) works for actual monoid homs.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["mod", "theorem", "map_powers", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "coe_mker", ["monoid_hom"]], ["mod", "theorem", "coe_mrange", ["monoid_hom"]], ["mod", "theorem", "comap_bot'", ["monoid_hom"]], ["mod", "theorem", "map_mclosure", ["monoid_hom"]], ["mod", "theorem", "mclosure_preimage_le", ["monoid_hom"]], ["mod", "theorem", "mem_mker", ["monoid_hom"]], ["mod", "theorem", "mem_mrange", ["monoid_hom"]], ["mod", "def", "mker", ["monoid_hom"]], ["mod", "def", "mrange", ["monoid_hom"]], ["mod", "theorem", "mrange_eq_map", ["monoid_hom"]], ["mod", "theorem", "mrange_top_iff_surjective", ["monoid_hom"]], ["mod", "theorem", "mrange_top_of_surjective", ["monoid_hom"]], ["mod", "theorem", "apply_coe_mem_map", ["submonoid"]], ["mod", "theorem", "coe_comap", ["submonoid"]], ["mod", "theorem", "coe_map", ["submonoid"]], ["mod", "def", "comap", ["submonoid"]], ["mod", "theorem", "comap_id", ["submonoid"]], ["mod", "theorem", "comap_inf", ["submonoid"]], ["mod", "theorem", "comap_infi", ["submonoid"]], ["mod", "theorem", "comap_map_comap", ["submonoid"]], ["mod", "theorem", "comap_top", ["submonoid"]], ["mod", "theorem", "gc_map_comap", ["submonoid"]], ["mod", "theorem", "le_comap_map", ["submonoid"]], ["mod", "theorem", "le_comap_of_map_le", ["submonoid"]], ["mod", "def", "map", ["submonoid"]], ["mod", "theorem", "map_bot", ["submonoid"]], ["mod", "theorem", "map_comap_le", ["submonoid"]], ["mod", "theorem", "map_comap_map", ["submonoid"]], ["mod", "theorem", "map_le_iff_le_comap", ["submonoid"]], ["mod", "theorem", "map_le_of_le_comap", ["submonoid"]], ["mod", "theorem", "map_sup", ["submonoid"]], ["mod", "theorem", "map_supr", ["submonoid"]], ["mod", "theorem", "mem_comap", ["submonoid"]], ["mod", "theorem", "mem_map", ["submonoid"]], ["mod", "theorem", "mem_map_iff_mem", ["submonoid"]], ["mod", "theorem", "mem_map_of_mem", ["submonoid"]], ["mod", "theorem", "monotone_comap", ["submonoid"]], ["mod", "theorem", "monotone_map", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "map_to_add_submonoid'", ["submodule"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/localization_localization.lean", "newPath": "src/ring_theory/localization/localization_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": []}]}, {"timestamp": 1656592815, "sha": "eb852609", "message": "feat(topology/compact_open): continuous_comp left functor C(-, γ) (#15068)", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "continuous_comp_left", ["continuous_map"]]]}]}, {"timestamp": 1656571983, "sha": "050f9e6d", "message": "feat(number_theory/legendre_symbol/mul_character): alternative implementation (#14768)\nThis is an alternative version of `number_theory/legendre_symbol/mul_character.lean`.\nIt defines `mul_character R R'` as a `monoid_hom` that sends non-units to zero.\nThis allows to define a `comm_group` structure on `mul_character R R'`.\nThere is an alternative implementation in #14716 ([side by side comparison](https://github.com/leanprover-community/mathlib/compare/legendre_symbol_mul_char...variant)).\nSee the [discussion on Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Implementation.20of.20multiplicative.20characters).", "changes": [{"oldPath": null, "newPath": "src/number_theory/legendre_symbol/mul_character.lean", "changes": [["add", "theorem", "coe_coe", ["mul_char"]], ["add", "theorem", "coe_equiv_to_unit_hom", ["mul_char"]], ["add", "theorem", "coe_mk", ["mul_char"]], ["add", "theorem", "coe_to_fun_mul", ["mul_char"]], ["add", "theorem", "coe_to_unit_hom", ["mul_char"]], ["add", "def", "equiv_to_unit_hom", ["mul_char"]], ["add", "theorem", "equiv_unit_hom_symm_coe", ["mul_char"]], ["add", "theorem", "ext'", ["mul_char"]], ["add", "theorem", "ext", ["mul_char"]], ["add", "theorem", "ext_iff", ["mul_char"]], ["add", "def", "inv", ["mul_char"]], ["add", "theorem", "inv_apply'", ["mul_char"]], ["add", "theorem", "inv_apply", ["mul_char"]], ["add", "theorem", "inv_apply_eq_inv'", ["mul_char"]], ["add", "theorem", "inv_apply_eq_inv", ["mul_char"]], ["add", "theorem", "inv_mul", ["mul_char"]], ["add", "theorem", "comp", ["mul_char", "is_nontrivial"]], ["add", "theorem", "sum_eq_zero", ["mul_char", "is_nontrivial"]], ["add", "def", "is_nontrivial", ["mul_char"]], ["add", "theorem", "is_nontrivial_iff", ["mul_char"]], ["add", "theorem", "comp", ["mul_char", "is_quadratic"]], ["add", "theorem", "inv", ["mul_char", "is_quadratic"]], ["add", "theorem", "pow_char", ["mul_char", "is_quadratic"]], ["add", "theorem", "pow_even", ["mul_char", "is_quadratic"]], ["add", "theorem", "pow_odd", ["mul_char", "is_quadratic"]], ["add", "theorem", "sq_eq_one", ["mul_char", "is_quadratic"]], ["add", "def", "is_quadratic", ["mul_char"]], ["add", "theorem", "map_nonunit", ["mul_char"]], ["add", "theorem", "map_one", ["mul_char"]], ["add", "theorem", "map_zero", ["mul_char"]], ["add", "def", "mul", ["mul_char"]], ["add", "theorem", "mul_apply", ["mul_char"]], ["add", "theorem", "mul_one", ["mul_char"]], ["add", "def", "of_unit_hom", ["mul_char"]], ["add", "theorem", "of_unit_hom_coe", ["mul_char"]], ["add", "theorem", "of_unit_hom_eq", ["mul_char"]], ["add", "theorem", "one_apply_coe", ["mul_char"]], ["add", "theorem", "one_mul", ["mul_char"]], ["add", "theorem", "pow_apply'", ["mul_char"]], ["add", "theorem", "pow_apply_coe", ["mul_char"]], ["add", "def", "ring_hom_comp", ["mul_char"]], ["add", "theorem", "sum_one_eq_card_units", ["mul_char"]], ["add", "theorem", "to_fun_eq_coe", ["mul_char"]], ["add", "def", "to_unit_hom", ["mul_char"]], ["add", "theorem", "to_unit_hom_eq", ["mul_char"]], ["add", "def", "trivial", ["mul_char"]], ["add", "structure", "mul_char", []]]}]}, {"timestamp": 1656562135, "sha": "ad154bd0", "message": "chore(scripts): update nolints.txt (#15063)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1656547129, "sha": "5d8810aa", "message": "feat(set_theory/cardinal/*): simp lemmas for `to_nat` and `to_enat` (#15059)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "aleph_0_to_enat", ["cardinal"]], ["add", "theorem", "aleph_0_to_nat", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": [["add", "theorem", "continuum_to_enat", ["cardinal"]], ["add", "theorem", "continuum_to_nat", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["add", "theorem", "aleph_to_enat", ["cardinal"]], ["add", "theorem", "aleph_to_nat", ["cardinal"]]]}]}, {"timestamp": 1656547128, "sha": "68452ec1", "message": "feat(set_theory/game/pgame): golf `le_trans` (#14956)\nThis also adds `has_le.le.move_left_lf` and `has_le.le.lf_move_right` to enable dot notation. Note that we already have other pgame lemmas in the `has_le.le` namespace like `has_le.le.not_gf`.\nTo make this dot notation work even when these lemmas are partially-applied, we swap the arguments of `move_left_lf_of_le` and `lf_move_right_of_le`.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "lf_move_right", ["pgame"]], ["mod", "theorem", "lf_move_right_of_le", ["pgame"]], ["mod", "theorem", "lf_of_le_mk", ["pgame"]], ["mod", "theorem", "lf_of_mk_le", ["pgame"]], ["mod", "theorem", "move_left_lf", ["pgame"]], ["mod", "theorem", "move_left_lf_of_le", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}]}, {"timestamp": 1656541326, "sha": "501c1d41", "message": "feat(linear_algebra/linear_pmap): add has_smul and ext (#14915)\nAdds the type-class `has_smul` for partially defined linear maps. We proof the ext lemma.", "changes": [{"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "coe_smul", ["linear_pmap"]], ["add", "theorem", "ext", ["linear_pmap"]], ["add", "theorem", "smul_apply", ["linear_pmap"]]]}]}, {"timestamp": 1656541325, "sha": "a2a8c9be", "message": "refactor(ring_theory/graded_algebra): use `add_submonoid_class` to generalize to graded rings (#14583)\nNow that we have `add_submonoid_class`, we don't need to consider only families of submodules.\nFor convenience, this keeps around `graded_algebra` as an alias for `graded_ring` over a family of submodules, as this can help with elaboration here and there.\nThis renames:\n* `graded_algebra` to `graded_ring`\n* `graded_algebra.proj_zero_ring_hom` to `graded_ring.proj_zero_ring_hom`\nadds:\n* `direct_sum.decompose_ring_equiv`\n* `graded_ring.proj`\n* `graded_algebra` (as an alias for a suitable `graded_ring`\nand removes:\n* `graded_algebra.is_internal`, which was just an alias anyway.", "changes": [{"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["mod", "theorem", "coe_ring_hom_of", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["mod", "theorem", "decompose_one", ["direct_sum"]], ["add", "def", "decompose_ring_equiv", ["direct_sum"]], ["del", "def", "proj_zero_ring_hom", ["graded_algebra"]], ["add", "def", "graded_algebra", []], ["add", "theorem", "mem_support_iff", ["graded_ring"]], ["add", "def", "proj", ["graded_ring"]], ["add", "theorem", "proj_apply", ["graded_ring"]], ["add", "theorem", "proj_recompose", ["graded_ring"]], ["add", "def", "proj_zero_ring_hom", ["graded_ring"]]]}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": [["mod", "def", "homogeneous_core'", ["ideal"]]]}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}]}, {"timestamp": 1656535140, "sha": "1116684d", "message": "chore(set_theory/game/pgame): golf various theorems about relabellings (#15054)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "equiv", ["pgame", "relabelling"]], ["mod", "theorem", "ge", ["pgame", "relabelling"]], ["mod", "def", "is_empty", ["pgame", "relabelling"]], ["mod", "theorem", "le", ["pgame", "relabelling"]], ["mod", "def", "refl", ["pgame", "relabelling"]], ["mod", "def", "restricted", ["pgame", "relabelling"]], ["mod", "def", "symm", ["pgame", "relabelling"]], ["mod", "def", "trans", ["pgame", "relabelling"]], ["mod", "def", "trans", ["pgame", "restricted"]]]}]}, {"timestamp": 1656535139, "sha": "108e3a07", "message": "refactor(group_theory/coset): redefine quotient group to be quotient by action of subgroup (#15045)\nGiven a group `α` and subgroup `s`, redefine the relation `left_rel` (\"being in the same left coset\") to\n```lean\ndef left_rel : setoid α := mul_action.orbit_rel s.opposite α\n```\nThis means that a quotient group is definitionally a quotient by a group action.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/two.20different.20quotients.20by.20subgroup)", "changes": [{"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "def", "left_rel", ["quotient_group"]], ["add", "theorem", "left_rel_apply", ["quotient_group"]], ["add", "theorem", "left_rel_eq", ["quotient_group"]], ["mod", "def", "right_rel", ["quotient_group"]], ["add", "theorem", "right_rel_apply", ["quotient_group"]], ["add", "theorem", "right_rel_eq", ["quotient_group"]]]}, {"oldPath": "src/group_theory/double_coset.lean", "newPath": "src/group_theory/double_coset.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/quotient.lean", "newPath": "src/group_theory/group_action/quotient.lean", "changes": []}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "mk'_eq_mk'", ["quotient_group"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/group_theory/transfer.lean", "newPath": "src/group_theory/transfer.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": [["del", "theorem", "mk'_eq_mk'", ["quotient_group"]]]}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1656535138, "sha": "71985dc5", "message": "feat(field_theory/minpoly): generalize statements about GCD domains (#14979)\nCurrently, the statements about the minimal polynomial over a GCD domain `R` require the element to be in a `K`-algebra, where `K` is the fraction field of `R`. We remove this assumption.\nFrom flt-regular.", "changes": [{"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "gcd_domain_degree_le_of_ne_zero", ["minpoly"]], ["mod", "theorem", "gcd_domain_dvd", ["minpoly"]], ["add", "theorem", "gcd_domain_eq_field_fractions'", ["minpoly"]], ["mod", "theorem", "gcd_domain_eq_field_fractions", ["minpoly"]], ["add", "theorem", "gcd_domain_unique", ["minpoly"]]]}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/rat.lean", "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": [["add", "theorem", "aeval_prim_part_eq_zero", ["polynomial"]], ["add", "theorem", "eval₂_prim_part_eq_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1656535137, "sha": "6879dd0c", "message": "feat(model_theory/satisfiability): The Łoś–Vaught Test (#14758)\nProvides more API for elementary equivalence\nShows that a `κ`-categorical theory with only infinite models is complete.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": [["add", "def", "bundled_induced", ["equiv"]], ["add", "def", "bundled_induced_equiv", ["equiv"]], ["add", "def", "to_Model", ["first_order", "language", "elementarily_equivalent"]]]}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "theorem", "is_complete", ["cardinal", "categorical"]], ["add", "theorem", "empty_infinite_Theory_is_complete", ["cardinal"]], ["del", "theorem", "exists_elementary_embedding_card_eq", ["first_order", "language", "Theory"]], ["add", "theorem", "exists_model_card_eq", ["first_order", "language", "Theory"]], ["add", "theorem", "exists_elementarily_equivalent_card_eq", ["first_order", "language"]], ["add", "theorem", "exists_elementary_embedding_card_eq", ["first_order", "language"]], ["add", "theorem", "exists_elementary_embedding_card_eq_of_ge", ["first_order", "language"]], ["add", "theorem", "exists_elementary_embedding_card_eq_of_le", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "Theory_model", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "Theory_model_iff", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "complete_theory_eq", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "infinite", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "infinite_iff", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "nonempty", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "nonempty_iff", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "realize_sentence", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "symm", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "trans", ["first_order", "language", "elementarily_equivalent"]], ["add", "theorem", "elementarily_equivalent", ["first_order", "language", "equiv"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "lift_mk_shrink''", ["cardinal"]], ["add", "theorem", "lift_mk_shrink'", ["cardinal"]], ["add", "theorem", "lift_mk_shrink", ["cardinal"]]]}]}, {"timestamp": 1656527242, "sha": "397d45f2", "message": "feat(algebra/order/monoid): `a + b ≤ c → a ≤ c` (#15033)\nGeneralize four lemmas that were left by previous PRs before `canonically_ordered_monoid` was a thing.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "le_of_mul_le_left", []], ["add", "theorem", "le_of_mul_le_right", []]]}, {"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "le_of_add_le_left", ["nat"]], ["del", "theorem", "le_of_add_le_right", ["nat"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "le_of_add_le_left", ["nnreal"]], ["del", "theorem", "le_of_add_le_right", ["nnreal"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1656527240, "sha": "07726e21", "message": "chore(analysis/locally_convex/balanced_core_hull): Golf (#14987)\nGolf and improve lemmas based on the naming convention:\n* `balanced_mem` → `balanced_iff_smul_mem`\n* `zero_singleton_balanced` → `balanced_zero`\n* `balanced_core_emptyset` → `balanced_core_empty`\n* `balanced_core_mem_iff` → `mem_balanced_core_iff`\n* `balanced_hull_mem_iff` → `mem_balanced_hull_iff`\n* `balanced_core_is_closed` → `is_closed.balanced_core`", "changes": [{"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": [["mod", "theorem", "hull_subset_of_subset", ["balanced"]], ["mod", "theorem", "subset_core_of_subset", ["balanced"]], ["mod", "theorem", "balanced_core_aux_balanced", []], ["mod", "theorem", "balanced_core_aux_maximal", []], ["del", "theorem", "balanced_core_aux_mem_iff", []], ["add", "theorem", "balanced_core_empty", []], ["del", "theorem", "balanced_core_emptyset", []], ["mod", "theorem", "balanced_core_eq_Inter", []], ["del", "theorem", "balanced_core_is_closed", []], ["del", "theorem", "balanced_core_mem_iff", []], ["mod", "theorem", "balanced_core_mem_nhds_zero", []], ["mod", "theorem", "balanced_core_nonempty_iff", []], ["mod", "theorem", "balanced_core_subset", []], ["mod", "theorem", "balanced_core_subset_balanced_core_aux", []], ["mod", "theorem", "balanced_core_zero_mem", []], ["del", "theorem", "balanced_hull_mem_iff", []], ["add", "theorem", "mem_balanced_core_aux_iff", []], ["add", "theorem", "mem_balanced_core_iff", []], ["add", "theorem", "mem_balanced_hull_iff", []], ["mod", "theorem", "subset_balanced_core", []]]}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["add", "theorem", "balanced_iff_smul_mem", []], ["del", "theorem", "balanced_mem", []], ["add", "theorem", "balanced_zero", []], ["del", "theorem", "zero_singleton_balanced", []]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}]}, {"timestamp": 1656527239, "sha": "478773b8", "message": "chore(data/nat/factorization/basic): golf rec_on_pos_prime_pos_coprime, remove import (#14935)\nGolf the proof of `rec_on_pos_prime_pos_coprime`, eliminating the need for `tactic.interval_cases`", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}]}, {"timestamp": 1656523914, "sha": "ee8d588d", "message": "refactor(logic/hydra): use `is_irrefl` (#15039)\n`is_irrefl` seems to be the more commonly used spelling", "changes": [{"oldPath": "src/logic/hydra.lean", "newPath": "src/logic/hydra.lean", "changes": [["mod", "theorem", "cut_expand", ["acc"]], ["mod", "theorem", "acc_of_singleton", ["relation"]], ["mod", "theorem", "cut_expand_iff", ["relation"]], ["mod", "theorem", "not_cut_expand_zero", ["relation"]]]}]}, {"timestamp": 1656512831, "sha": "c8ab806e", "message": "feat(tactic/alias.lean): use current namespace in alias (#14961)\nThis makes `alias foo <- bar` use the current namespace to resolve the new alias name `bar`, for consistency with `def bar := foo` and leanprover-community/mathlib4#293.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/theta.lean", "newPath": "src/analysis/asymptotics/theta.lean", "changes": []}, {"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": "src/category_theory/category/Bipointed.lean", "newPath": "src/category_theory/category/Bipointed.lean", "changes": []}, {"oldPath": "src/category_theory/category/Pointed.lean", "newPath": "src/category_theory/category/Pointed.lean", "changes": []}, {"oldPath": "src/category_theory/category/Twop.lean", "newPath": "src/category_theory/category/Twop.lean", "changes": []}, {"oldPath": "src/category_theory/category/preorder.lean", "newPath": "src/category_theory/category/preorder.lean", "changes": []}, {"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/clique.lean", "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": []}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/finset/slice.lean", "newPath": "src/data/finset/slice.lean", "changes": []}, {"oldPath": "src/data/finset/sym.lean", "newPath": "src/data/finset/sym.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/infix.lean", "newPath": "src/data/list/infix.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/dedup.lean", "newPath": "src/data/multiset/dedup.lean", "changes": []}, {"oldPath": "src/data/multiset/locally_finite.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/dynamics/flow.lean", "newPath": "src/dynamics/flow.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": []}, {"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/compare.lean", "newPath": "src/order/compare.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": []}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": []}, {"oldPath": "src/order/synonym.lean", "newPath": "src/order/synonym.lean", "changes": []}, {"oldPath": "src/probability/ident_distrib.lean", "newPath": "src/probability/ident_distrib.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metric_separated.lean", "newPath": "src/topology/metric_space/metric_separated.lean", "changes": []}]}, {"timestamp": 1656512830, "sha": "5de765c5", "message": "feat(linear_algebra/linear_pmap): definition of the graph (#14920)\nDefine the graph of a partial linear map as the pushforward of the graph of the underlying linear map\nand prove some elementary facts.", "changes": [{"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "def", "graph", ["linear_pmap"]], ["add", "theorem", "graph_fst_eq_zero_snd", ["linear_pmap"]], ["add", "theorem", "mem_graph", ["linear_pmap"]], ["add", "theorem", "mem_graph_iff'", ["linear_pmap"]], ["add", "theorem", "mem_graph_iff", ["linear_pmap"]], ["add", "theorem", "mem_graph_snd_inj'", ["linear_pmap"]], ["add", "theorem", "mem_graph_snd_inj", ["linear_pmap"]]]}]}, {"timestamp": 1656505679, "sha": "aa812bd1", "message": "chore(group_theory/group_action/basic): split file (#15044)\nSplit the file `group_theory/group_action/basic` to remove the dependency on `group_theory/quotient_group`, moving everything involving quotients to a new file `group_theory/group_action/quotient`.", "changes": [{"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/group_theory/commuting_probability.lean", "newPath": "src/group_theory/commuting_probability.lean", "changes": []}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "theorem", "card_eq_sum_card_group_div_card_stabilizer'", ["mul_action"]], ["del", "theorem", "card_eq_sum_card_group_div_card_stabilizer", ["mul_action"]], ["del", "theorem", "card_orbit_mul_card_stabilizer_eq_card_group", ["mul_action"]], ["del", "theorem", "injective_of_quotient_stabilizer", ["mul_action"]], ["del", "def", "of_quotient_stabilizer", ["mul_action"]], ["del", "theorem", "of_quotient_stabilizer_mem_orbit", ["mul_action"]], ["del", "theorem", "of_quotient_stabilizer_mk", ["mul_action"]], ["del", "theorem", "of_quotient_stabilizer_smul", ["mul_action"]], ["del", "theorem", "orbit_equiv_quotient_stabilizer_symm_apply", ["mul_action"]], ["del", "theorem", "coe_smul_out'", ["mul_action", "quotient"]], ["del", "theorem", "mk_smul_out'", ["mul_action", "quotient"]], ["del", "theorem", "smul_coe", ["mul_action", "quotient"]], ["del", "theorem", "smul_mk", ["mul_action", "quotient"]], ["del", "theorem", "stabilizer_quotient", ["mul_action"]], ["del", "theorem", "sum_card_fixed_by_eq_card_orbits_mul_card_group", ["mul_action"]], ["del", "def", "to_quotient", ["mul_action_hom"]], ["del", "theorem", "to_quotient_apply", ["mul_action_hom"]], ["del", "theorem", "normal_core_eq_ker", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/quotient.lean", "changes": [["add", "theorem", "card_eq_sum_card_group_div_card_stabilizer'", ["mul_action"]], ["add", "theorem", "card_eq_sum_card_group_div_card_stabilizer", ["mul_action"]], ["add", "theorem", "card_orbit_mul_card_stabilizer_eq_card_group", ["mul_action"]], ["add", "theorem", "injective_of_quotient_stabilizer", ["mul_action"]], ["add", "def", "of_quotient_stabilizer", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_mem_orbit", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_mk", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_smul", ["mul_action"]], ["add", "theorem", "orbit_equiv_quotient_stabilizer_symm_apply", ["mul_action"]], ["add", "theorem", "coe_smul_out'", ["mul_action", "quotient"]], ["add", "theorem", "mk_smul_out'", ["mul_action", "quotient"]], ["add", "theorem", "smul_coe", ["mul_action", "quotient"]], ["add", "theorem", "smul_mk", ["mul_action", "quotient"]], ["add", "theorem", "stabilizer_quotient", ["mul_action"]], ["add", "theorem", "sum_card_fixed_by_eq_card_orbits_mul_card_group", ["mul_action"]], ["add", "def", "to_quotient", ["mul_action_hom"]], ["add", "theorem", "to_quotient_apply", ["mul_action_hom"]], ["add", "theorem", "normal_core_eq_ker", ["subgroup"]]]}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1656497034, "sha": "ea9dae21", "message": "refactor(topology/*): Use `disjoint` (#14950)\nReplace uses of `s ∩ t = ∅` by `disjoint s t` in the topology library. This shortens proofs.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "subset_compl_iff_disjoint", ["set"]]]}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "disjoint_image_image_iff", ["mul_action"]]]}, {"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": []}, {"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "frontier_left", ["disjoint"]], ["add", "theorem", "frontier_right", ["disjoint"]], ["del", "theorem", "inter_frontier_eq_empty_of_disjoint", ["is_open"]], ["mod", "def", "is_open", []], ["mod", "theorem", "is_open_univ", []]]}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "gen_empty_right", ["continuous_map"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "ball_disjoint", ["emetric"]]]}, {"oldPath": "src/topology/order/priestley.lean", "newPath": "src/topology/order/priestley.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "t2_separation_compact_nhds", []], ["mod", "theorem", "t2_space_iff_nhds", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1656489758, "sha": "03374ee3", "message": "feat(algebra/order/field): Linearly ordered semifields (#15027)\nDefine `linear_ordered_semifield` and generalize lemmas within `algebra.order.field`.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["mod", "theorem", "div_pow_le", []], ["mod", "theorem", "min_le_of_zpow_le_max", []], ["mod", "theorem", "zpow_ne_zero_of_pos", ["nat"]], ["del", "theorem", "zpow_pos_of_pos", ["nat"]], ["mod", "theorem", "one_le_zpow_of_nonneg", []], ["mod", "theorem", "one_lt_zpow", []], ["mod", "theorem", "pos_div_pow_pos", []], ["mod", "theorem", "pow_le_max_of_min_le", []], ["mod", "theorem", "cast_zpow", ["rat"]], ["mod", "theorem", "map_zpow", ["ring_equiv"]], ["mod", "theorem", "map_zpow", ["ring_hom"]], ["mod", "theorem", "zpow_bit0_nonneg", []], ["mod", "theorem", "zpow_bit0_pos", []], ["mod", "theorem", "zpow_bit1_neg", []], ["mod", "theorem", "zpow_inj", []], ["mod", "theorem", "zpow_injective", []], ["mod", "theorem", "zpow_le_iff_le", []], ["mod", "theorem", "zpow_le_of_le", []], ["mod", "theorem", "zpow_le_one_of_nonpos", []], ["mod", "theorem", "zpow_lt_iff_lt", []], ["mod", "theorem", "zpow_nonneg", []], ["mod", "theorem", "zpow_pos_of_pos", []], ["mod", "theorem", "zpow_strict_anti", []], ["mod", "theorem", "zpow_strict_mono", []], ["mod", "theorem", "zpow_two_nonneg", []], ["mod", "theorem", "zpow_two_pos_of_ne_zero", []]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["mod", "theorem", "abs_one_div", []], ["mod", "theorem", "div_neg_iff", []], ["mod", "theorem", "div_pos_iff", []], ["mod", "theorem", "exists_add_lt_and_pos_of_lt", []], ["mod", "def", "linear_ordered_field", ["function", "injective"]], ["add", "def", "linear_ordered_semifield", ["function", "injective"]], ["mod", "theorem", "max_div_div_right_of_nonpos", []], ["mod", "theorem", "min_div_div_right_of_nonpos", []], ["mod", "theorem", "cast_le_pow_div_sub", ["nat"]], ["mod", "theorem", "cast_le_pow_sub_div_sub", ["nat"]], ["mod", "theorem", "sub_one_div_inv_le_two", []]]}, {"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/data/int/log.lean", "newPath": "src/data/int/log.lean", "changes": []}, {"oldPath": "src/data/nat/cast_field.lean", "newPath": "src/data/nat/cast_field.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1656468763, "sha": "55ec65a6", "message": "feat(topology/algebra/module/basic): define continuous_(semi)linear_map_class (#14674)\nThis PR brings the morphism refactor to continuous (semi)linear maps. We define `continuous_semilinear_map_class` and `continuous_linear_map_class` in a way that parallels the non-continuous versions, along with a few extras (i.e. `add_monoid_hom_class` instance for `normed_group_hom`).\nA few things I was not too sure about:\n- When generalizing lemmas to a morphism class rather than a particular type of morphism, I used `𝓕` as the type (instead of just `F` as is done for most `fun_like` types) to avoid clashing with our convention of using `E`, `F`, etc for e.g. vector spaces.\n- Namespacing: I placed lemmas like `isometry_of_norm`, `continuous_of_bound`, etc, under the `add_monoid_hom_class` namespace. Maybe the root namespace would make sense here.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["del", "theorem", "continuous_of_bound", ["add_monoid_hom"]], ["del", "theorem", "isometry_iff_norm", ["add_monoid_hom"]], ["del", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["del", "theorem", "lipschitz_of_bound", ["add_monoid_hom"]], ["del", "theorem", "lipschitz_of_bound_nnnorm", ["add_monoid_hom"]], ["add", "theorem", "antilipschitz_of_bound", ["add_monoid_hom_class"]], ["add", "theorem", "bound_of_antilipschitz", ["add_monoid_hom_class"]], ["add", "theorem", "continuous_of_bound", ["add_monoid_hom_class"]], ["add", "theorem", "isometry_iff_norm", ["add_monoid_hom_class"]], ["add", "theorem", "isometry_of_norm", ["add_monoid_hom_class"]], ["add", "theorem", "lipschitz_of_bound", ["add_monoid_hom_class"]], ["add", "theorem", "lipschitz_of_bound_nnnorm", ["add_monoid_hom_class"]], ["add", "theorem", "uniform_continuous_of_bound", ["add_monoid_hom_class"]]]}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": [["del", "theorem", "isometry_iff_norm", ["normed_group_hom"]], ["del", "theorem", "isometry_of_norm", ["normed_group_hom"]], ["del", "theorem", "map_add", ["normed_group_hom"]], ["del", "theorem", "map_neg", ["normed_group_hom"]], ["del", "theorem", "map_sub", ["normed_group_hom"]], ["del", "theorem", "map_sum", ["normed_group_hom"]], ["del", "theorem", "map_zero", ["normed_group_hom"]]]}, {"oldPath": "src/analysis/normed/group/hom_completion.lean", "newPath": "src/analysis/normed/group/hom_completion.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach_steinhaus.lean", "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "isometry_iff_norm", ["continuous_linear_map"]], ["del", "theorem", "antilipschitz_of_bound", ["linear_map"]], ["del", "theorem", "bound_of_antilipschitz", ["linear_map"]], ["del", "theorem", "bound_of_continuous", ["linear_map"]], ["del", "theorem", "bound_of_shell_semi_normed", ["linear_map"]], ["del", "theorem", "continuous_of_bound", ["linear_map"]], ["del", "theorem", "lipschitz_of_bound", ["linear_map"]], ["del", "theorem", "lipschitz_of_bound_nnnorm", ["linear_map"]], ["del", "theorem", "uniform_continuous_of_bound", ["linear_map"]], ["mod", "theorem", "norm_image_of_norm_zero", []], ["add", "theorem", "bound_of_continuous", ["semilinear_map_class"]], ["add", "theorem", "bound_of_shell_semi_normed", ["semilinear_map_class"]]]}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["del", "theorem", "map_smul", ["continuous_linear_map"]], ["del", "theorem", "map_smulₛₗ", ["continuous_linear_map"]], ["add", "def", "continuous_linear_map_class", []]]}, {"oldPath": "src/topology/algebra/module/finite_dimension.lean", "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}]}, {"timestamp": 1656443345, "sha": "08b07a64", "message": "feat(order/succ_pred/basic): tag more lemmas with simp (#14998)", "changes": [{"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["mod", "theorem", "Icc_pred_right", ["order"]], ["mod", "theorem", "Icc_succ_left", ["order"]], ["mod", "theorem", "Ico_succ_left", ["order"]], ["mod", "theorem", "Ico_succ_right", ["order"]], ["mod", "theorem", "Ioc_pred_left", ["order"]], ["mod", "theorem", "Ioc_pred_right", ["order"]], ["mod", "theorem", "Ioo_pred_left", ["order"]], ["mod", "theorem", "Ioo_succ_right", ["order"]], ["mod", "theorem", "le_pred_iff", ["order"]], ["mod", "theorem", "lt_succ_iff", ["order"]], ["mod", "theorem", "pred_le_pred_iff", ["order"]], ["mod", "theorem", "pred_lt_iff", ["order"]], ["mod", "theorem", "pred_lt_pred_iff", ["order"]], ["mod", "theorem", "succ_le_iff", ["order"]], ["mod", "theorem", "succ_le_succ_iff", ["order"]], ["mod", "theorem", "succ_lt_succ_iff", ["order"]]]}]}, {"timestamp": 1656443343, "sha": "7db76670", "message": "feat(order/boolean_algebra): Interaction of disjointness and complements (#14925)\nProve `disjoint x yᶜ ↔ x ≤ y` and similar, transfer those results to `set`.\nLemma renames\n* `subset_compl_iff_disjoint` → `subset_compl_iff_disjoint_right`\n* `set.subset_compl_iff_disjoint` → `set.subset_compl_iff_disjoint_right`\n* `disjoint_iff_le_compl_left` → `le_compl_iff_disjoint_left`\n* `disjoint_iff_le_compl_right` → `le_compl_iff_disjoint_right`", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": []}, {"oldPath": "src/analysis/convex/stone_separation.lean", "newPath": "src/analysis/convex/stone_separation.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "compl_subset_comm", ["set"]], ["mod", "theorem", "compl_subset_compl", ["set"]], ["add", "theorem", "disjoint_compl_left_iff_subset", ["set"]], ["add", "theorem", "disjoint_compl_right_iff_subset", ["set"]], ["mod", "theorem", "subset_compl_comm", ["set"]], ["add", "theorem", "subset_compl_iff_disjoint_left", ["set"]], ["add", "theorem", "subset_compl_iff_disjoint_right", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_Union₂_left", ["set"]], ["add", "theorem", "disjoint_Union₂_right", ["set"]], ["del", "theorem", "disjoint_iff_subset_compl_left", ["set"]], ["del", "theorem", "disjoint_iff_subset_compl_right", ["set"]], ["add", "theorem", "disjoint_sUnion_left", ["set"]], ["add", "theorem", "disjoint_sUnion_right", ["set"]]]}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/logic/equiv/embedding.lean", "newPath": "src/logic/equiv/embedding.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "disjoint_compl_left_iff", []], ["add", "theorem", "disjoint_compl_right_iff", []], ["del", "theorem", "disjoint_iff_le_compl_left", []], ["del", "theorem", "disjoint_iff_le_compl_right", []], ["add", "theorem", "le_compl_iff_disjoint_left", []], ["add", "theorem", "le_compl_iff_disjoint_right", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "disjoint_supr₂_iff", []], ["add", "theorem", "supr₂_disjoint_iff", []]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1656429662, "sha": "00c17d65", "message": "feat(algebra/ring/boolean_ring): `bool` is a Boolean ring (#15004)\nand a few `bool` lemmas.", "changes": [{"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": []}, {"oldPath": "src/data/bool/basic.lean", "newPath": "src/data/bool/basic.lean", "changes": [["add", "theorem", "band_bor_distrib_left", ["bool"]], ["add", "theorem", "band_bor_distrib_right", ["bool"]], ["add", "theorem", "band_bxor_distrib_left", ["bool"]], ["add", "theorem", "band_bxor_distrib_right", ["bool"]], ["add", "theorem", "bor_band_distrib_left", ["bool"]], ["add", "theorem", "bor_band_distrib_right", ["bool"]]]}]}, {"timestamp": 1656420685, "sha": "78bc3724", "message": "feat(data/{finset, set}/basic): tweak `nonempty_coe_sort` and `is_empty_coe_sort` (#14937)\nThis PR does the following:\n- add lemmas `set.is_empty_coe_sort` and `finset.is_empty_coe_sort`\n- made argument of both `nonempty_coe_sort` lemmas inferred\n- fix some spacing", "changes": [{"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "coe_nonempty", ["finset"]], ["add", "theorem", "is_empty_coe_sort", ["finset"]], ["mod", "theorem", "bex", ["finset", "nonempty"]], ["mod", "theorem", "nonempty_coe_sort", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "is_empty_coe_sort", ["set"]], ["mod", "theorem", "nonempty_coe_sort", ["set"]]]}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/topology/algebra/semigroup.lean", "newPath": "src/topology/algebra/semigroup.lean", "changes": []}]}, {"timestamp": 1656407005, "sha": "3594b635", "message": "feat(probability_theory/independence): if a family of pi-systems is independent, then so are the generated measurable spaces (#9387)\nThe main result in this PR is `Indep_sets.Indep`: if π-systems are independent as sets of sets, then the\nmeasurable space structures they generate are independent. We already had a version of this for two pi-systems instead of a family.\nIn order to prove this, and as preparation for a next PR about Kolmogorov's 0-1 law, a definition `pi_Union_Inter` is introduced to build a particular pi-system from a family of pi-systems.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "inter", ["sup_closed"]], ["add", "def", "sup_closed", []], ["add", "theorem", "sup_closed_of_linear_order", []], ["add", "theorem", "sup_closed_of_totally_ordered", []], ["add", "theorem", "sup_closed_singleton", []]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "generate_from_mono", ["measurable_space"]], ["del", "theorem", "generate_from_sup_generate_from", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "generate_from_insert_empty", ["measurable_space"]], ["add", "theorem", "generate_from_insert_univ", ["measurable_space"]], ["add", "theorem", "generate_from_mono", ["measurable_space"]], ["add", "theorem", "generate_from_sup_generate_from", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": [["add", "theorem", "generate_from_pi_Union_Inter_le", []], ["add", "theorem", "generate_from_pi_Union_Inter_measurable_space", []], ["add", "theorem", "insert_empty", ["is_pi_system"]], ["add", "theorem", "insert_univ", ["is_pi_system"]], ["add", "theorem", "is_pi_system_pi_Union_Inter", []], ["add", "theorem", "le_generate_from_pi_Union_Inter", []], ["add", "theorem", "measurable_set_supr_of_mem_pi_Union_Inter", []], ["mod", "theorem", "mem_generate_pi_system_Union_elim'", []], ["add", "theorem", "mem_pi_Union_Inter_of_measurable_set", []], ["add", "def", "pi_Union_Inter", []], ["add", "theorem", "pi_Union_Inter_mono_left", []], ["add", "theorem", "subset_pi_Union_Inter", []]]}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["add", "theorem", "Indep", ["probability_theory", "Indep_sets"]], ["add", "theorem", "Indep_aux", ["probability_theory", "Indep_sets"]], ["add", "theorem", "pi_Union_Inter_singleton", ["probability_theory", "Indep_sets"]]]}]}, {"timestamp": 1656404009, "sha": "728e074e", "message": "feat(measure_theory/function/lp_order): prove a `normed_lattice_add_comm_group` instance for Lp (#14999)", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": [["add", "theorem", "coe_fn_abs", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/function/lp_order.lean", "newPath": "src/measure_theory/function/lp_order.lean", "changes": [["add", "theorem", "coe_fn_abs", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_inf", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_sup", ["measure_theory", "Lp"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": []}]}, {"timestamp": 1656388741, "sha": "dcedc047", "message": "feat(order/symm_diff): Triangle inequality for the symmetric difference (#14847)\nProve that `a ∆ c ≤ a ∆ b ⊔ b ∆ c`.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "sdiff_triangle", []]]}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["add", "theorem", "le_symm_diff_iff_left", []], ["add", "theorem", "le_symm_diff_iff_right", []], ["add", "theorem", "symm_diff_triangle", []]]}]}, {"timestamp": 1656383401, "sha": "ae3d5722", "message": "chore(topology/uniform_space/basic): Make `to_topological_space_inf` and `inf_uniformity` true by definition (#14912)\nSince the lattice API lets us provide a definition for `inf`, we may as well provide a nice one such that the obvious properties are true by rfl.", "changes": [{"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "lift'_inf_le", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "ball_inter", []]]}]}, {"timestamp": 1656374704, "sha": "cf4d987d", "message": "chore(analysis/special_functions/trigonometric/angle): rfl lemmas for nat and int smul actions on angle (#15003)\nThese can't be simp, because the simp-normal form is multiplication.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "coe_nsmul", ["real", "angle"]], ["add", "theorem", "coe_zsmul", ["real", "angle"]]]}]}, {"timestamp": 1656374702, "sha": "37bf8a2e", "message": "chore(topology/separation): Extract `set` product lemma (#14958)\nMove `prod_subset_compl_diagonal_iff_disjoint` to `data.set.prod`, where it belongs. Delete `diagonal_eq_range_diagonal_map` because it duplicates `set.diagonal_eq_range`. Move `set.disjoint_left`/`set.disjoint_right` to `data.set.basic` to avoid an import cycle.\nMake variable semi-implicit in the RHS of `disjoint_left` and `disjoint_right`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_eq", ["disjoint"]], ["add", "theorem", "disjoint_left", ["set"]], ["add", "theorem", "disjoint_right", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "inter_eq", ["disjoint"]], ["del", "theorem", "disjoint_left", ["set"]], ["del", "theorem", "disjoint_right", ["set"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "prod_subset_compl_diagonal_iff_disjoint", ["set"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "diagonal_eq_range_diagonal_map", []], ["del", "theorem", "prod_subset_compl_diagonal_iff_disjoint", []]]}, {"oldPath": "src/topology/urysohns_lemma.lean", "newPath": "src/topology/urysohns_lemma.lean", "changes": []}]}, {"timestamp": 1656374701, "sha": "ee7f38c7", "message": "chore(data/set/basic): remove duplicate `nonempty_insert` in favor of `insert_nonempty` (#14884)\nThis name matches e.g. `univ_nonempty` and `singleton_nonempty`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "insert_nonempty", ["set"]], ["del", "theorem", "nonempty_insert", ["set"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": []}]}, {"timestamp": 1656374694, "sha": "365b2ee5", "message": "feat(data/bool): bnot_ne (#10562)", "changes": [{"oldPath": "src/data/bool/basic.lean", "newPath": "src/data/bool/basic.lean", "changes": [["add", "theorem", "bnot_ne", ["bool"]], ["add", "theorem", "bnot_not_eq", ["bool"]], ["add", "theorem", "ne_bnot", ["bool"]], ["add", "theorem", "not_eq_bnot", ["bool"]]]}]}, {"timestamp": 1656365529, "sha": "f6b728f4", "message": "feat(data/finset/pointwise): `•` and `⊆` (#14968)\nPort `set` lemmas to `finset`. Tag a few more lemmas with `norm_cast`. Add some missing `to_additive` attributes.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "image_subset_image_iff", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["mod", "theorem", "coe_one", ["finset"]], ["add", "theorem", "inv_smul_mem_iff", ["finset"]], ["add", "theorem", "inv_smul_mem_iff₀", ["finset"]], ["add", "theorem", "mem_inv_smul_finset_iff", ["finset"]], ["add", "theorem", "mem_inv_smul_finset_iff₀", ["finset"]], ["mod", "theorem", "pairwise_disjoint_smul_iff", ["finset"]], ["add", "theorem", "smul_finset_subset_iff", ["finset"]], ["add", "theorem", "smul_finset_subset_iff₀", ["finset"]], ["add", "theorem", "smul_finset_subset_smul_finset_iff", ["finset"]], ["add", "theorem", "smul_finset_subset_smul_finset_iff₀", ["finset"]], ["add", "theorem", "smul_finset_univ₀", ["finset"]], ["add", "theorem", "smul_mem_smul_finset_iff", ["finset"]], ["add", "theorem", "smul_mem_smul_finset_iff₀", ["finset"]], ["add", "theorem", "smul_univ₀", ["finset"]], ["add", "theorem", "subset_smul_finset_iff", ["finset"]], ["add", "theorem", "subset_smul_finset_iff₀", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "coe_univ", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "pairwise_disjoint_smul_iff", ["set"]]]}]}, {"timestamp": 1656365528, "sha": "7c6cd38b", "message": "chore(set_theory/game/pgame): remove weird `simp` lemma (#14954)\nI added this back before there was much API on casting natural numbers to pre-games, as a safeguard in case I used the wrong `1`. In retrospective this theorem was kind of dumb.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1656365527, "sha": "2cdded92", "message": "feat(data/multiset/basic): add multiset.filter_singleton (#14938)\nAdds a lemma, similar to `finset.filter_singleton`.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "filter_singleton", ["multiset"]]]}]}, {"timestamp": 1656365525, "sha": "927b4685", "message": "chore(data/nat/factorization/basic): golf pow_succ_factorization_not_dvd, remove import (#14936)\nMove `pow_succ_factorization_not_dvd` below `factorization_le_iff_dvd` and use this to golf it, eliminating the need for `tactic.linarith`", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}]}, {"timestamp": 1656365524, "sha": "f51286dd", "message": "feat(analysis/locally_convex/bounded): continuous linear image of bounded set is bounded (#14907)\nThis is needed to prove that the usual strong topology on continuous linear maps satisfies `has_continuous_smul`.", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "theorem", "image", ["bornology", "is_vonN_bounded"]]]}]}, {"timestamp": 1656365523, "sha": "cf50ac12", "message": "chore(algebra/group/units): mark some lemmas as simp (#14871)\nThese seem like fairly natural candidates for simp lemmas.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}]}, {"timestamp": 1656365522, "sha": "cad1a6c6", "message": "feat(set_theory/cardinal/basic): lemmas about `#(finset α)` (#14850)\nThis PR does the following:\n- prove `mk_finset_of_fintype : #(finset α) = 2 ^ℕ fintype.card α` for `fintype α`\n- rename `mk_finset_eq_mk` to `mk_finset_of_infinite` to match the former\n- rename `mk_finset` to `mk_coe_finset` to avoid confusion with these two lemmas", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "mk_coe_finset", ["cardinal"]], ["del", "theorem", "mk_finset", ["cardinal"]], ["add", "theorem", "mk_finset_of_fintype", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["del", "theorem", "mk_finset_eq_mk", ["cardinal"]], ["add", "theorem", "mk_finset_of_infinite", ["cardinal"]]]}]}, {"timestamp": 1656365520, "sha": "fef4fb83", "message": "refactor(topology/inseparable): redefine `specializes` and `inseparable` (#14647)\n* Redefine `specializes` and `inseparable` in terms of `nhds`.\n* Review API.\n* Define `inseparable_setoid` and `separation_quotient`.\n* Add `function.surjective.subsingleton`.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}, {"oldPath": "src/topology/inseparable.lean", "newPath": "src/topology/inseparable.lean", "changes": [["add", "theorem", "specialization_monotone", ["continuous"]], ["add", "theorem", "inseparable_iff", ["inducing"]], ["add", "theorem", "specializes_iff", ["inducing"]], ["mod", "theorem", "map", ["inseparable"]], ["add", "theorem", "map_of_continuous_at", ["inseparable"]], ["add", "theorem", "mem_closed_iff", ["inseparable"]], ["add", "theorem", "mem_open_iff", ["inseparable"]], ["add", "theorem", "nhds_eq", ["inseparable"]], ["add", "theorem", "refl", ["inseparable"]], ["add", "theorem", "rfl", ["inseparable"]], ["add", "theorem", "specializes'", ["inseparable"]], ["add", "theorem", "specializes", ["inseparable"]], ["add", "theorem", "symm", ["inseparable"]], ["add", "theorem", "trans", ["inseparable"]], ["mod", "def", "inseparable", []], ["add", "theorem", "inseparable_def", []], ["del", "theorem", "inseparable_iff_closed", []], ["del", "theorem", "inseparable_iff_closure", []], ["add", "theorem", "inseparable_iff_closure_eq", []], ["add", "theorem", "inseparable_iff_forall_closed", []], ["add", "theorem", "inseparable_iff_forall_open", []], ["add", "theorem", "inseparable_iff_mem_closure", []], ["del", "theorem", "inseparable_iff_nhds_eq", []], ["mod", "theorem", "inseparable_iff_specializes_and", []], ["add", "theorem", "inseparable_of_nhds_within_eq", []], ["add", "def", "inseparable_setoid", []], ["add", "theorem", "not_inseparable", ["is_closed"]], ["add", "theorem", "not_specializes", ["is_closed"]], ["add", "theorem", "not_inseparable", ["is_open"]], ["add", "theorem", "not_specializes", ["is_open"]], ["add", "theorem", "not_inseparable_iff_exists_open", []], ["add", "theorem", "continuous_mk", ["separation_quotient"]], ["add", "theorem", "inducing_mk", ["separation_quotient"]], ["add", "theorem", "is_closed_map_mk", ["separation_quotient"]], ["add", "theorem", "is_open_map_mk", ["separation_quotient"]], ["add", "theorem", "map_mk_nhds", ["separation_quotient"]], ["add", "def", "mk", ["separation_quotient"]], ["add", "theorem", "mk_eq_mk", ["separation_quotient"]], ["add", "theorem", "preimage_image_mk_closed", ["separation_quotient"]], ["add", "theorem", "preimage_image_mk_open", ["separation_quotient"]], ["add", "theorem", "quotient_map_mk", ["separation_quotient"]], ["add", "theorem", "range_mk", ["separation_quotient"]], ["add", "theorem", "surjective_mk", ["separation_quotient"]], ["add", "def", "separation_quotient", []], ["del", "theorem", "monotone_of_continuous", ["specialization_order"]], ["add", "theorem", "antisymm", ["specializes"]], ["mod", "theorem", "map", ["specializes"]], ["add", "theorem", "map_of_continuous_at", ["specializes"]], ["add", "theorem", "mem_closed", ["specializes"]], ["add", "theorem", "mem_open", ["specializes"]], ["mod", "theorem", "trans", ["specializes"]], ["mod", "def", "specializes", []], ["del", "theorem", "specializes_def", []], ["mod", "theorem", "specializes_iff_closure_subset", []], ["mod", "theorem", "specializes_iff_forall_closed", []], ["mod", "theorem", "specializes_iff_forall_open", []], ["add", "theorem", "specializes_iff_mem_closure", []], ["add", "theorem", "specializes_iff_nhds", []], ["add", "theorem", "specializes_iff_pure", []], ["add", "theorem", "specializes_of_nhds_within", []], ["mod", "theorem", "specializes_refl", []], ["mod", "theorem", "specializes_rfl", []], ["add", "theorem", "specializes_tfae", []], ["mod", "theorem", "subtype_inseparable_iff", []], ["add", "theorem", "subtype_specializes_iff", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "specializes_antisymm", []]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": []}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": []}]}, {"timestamp": 1656356639, "sha": "1cd2bf58", "message": "feat(analysis/special_functions/log/deriv): more power series for log (#14881)\nThis adds a power series expansion for `log ((a + 1) / a)`, and two lemmas that are needed for it. It's planned to be used in the proof of the Stirling formula.", "changes": [{"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": [["add", "theorem", "has_sum_log_one_add_inv", ["real"]], ["add", "theorem", "has_sum_log_sub_log_of_abs_lt_1", ["real"]]]}]}, {"timestamp": 1656347112, "sha": "68e01601", "message": "chore(data/int/cast): redo #14890, moving field-specific lemmas (#14995)\nIn #14894, I want to refer to the rational numbers in the definition of a field, meaning we can't have `algebra.field.basic` in the transitive imports of `data.rat.defs`.\nApparently this dependency was re-added, so I'm going to have to split it again...", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["del", "theorem", "cast_neg_nat_cast", ["int"]]]}, {"oldPath": "src/data/int/cast_field.lean", "newPath": "src/data/int/cast_field.lean", "changes": [["add", "theorem", "cast_neg_nat_cast", ["int"]]]}]}, {"timestamp": 1656347111, "sha": "2558b3b3", "message": "feat(*): Upgrade to lean 3.44.1c (#14984)\nThe changes are:\n* `reflected a` is now spelt `reflected _ a`, as the argument was made explicit to resolve type resolution issues. We need to add new instances for `with_top` and `with_bot` as these are no longer found via the `option` instance. These new instances are an improvement, as they can now use `bot` and `top` instead of `none`.\n* Some nat order lemmas in core have been renamed or had their argument explicitness adjusted.\n* `dsimp` now applies `iff` lemmas, which means it can end up making more progress than it used to. This appears to impact `split_ifs` too.\n* `opposite.op_inj_iff` shouldn't be proved until after `opposite` is irreducible (where `iff.rfl` no longer works as a proof), otherwise `dsimp` is tricked into unfolding the irreducibility which puts the goal state in a form where no further lemmas can apply.\nWe skip Lean 3.44.0c because the support in that version for `iff` lemmas in `dsimp` had some unintended consequences which required many undesirable changes.", "changes": [{"oldPath": "archive/100-theorems-list/45_partition.lean", "newPath": "archive/100-theorems-list/45_partition.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/gluing.lean", "newPath": "src/algebraic_geometry/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": []}, {"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["mod", "theorem", "op_inj_iff", ["opposite"]], ["mod", "theorem", "unop_inj_iff", ["opposite"]]]}, {"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": []}, {"oldPath": "src/linear_algebra/projective_space/basic.lean", "newPath": "src/linear_algebra/projective_space/basic.lean", "changes": []}, {"oldPath": "src/meta/univs.lean", "newPath": "src/meta/univs.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/fix_reflect_string.lean", "newPath": "src/tactic/fix_reflect_string.lean", "changes": []}, {"oldPath": "src/tactic/linarith/datatypes.lean", "newPath": "src/tactic/linarith/datatypes.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1656337822, "sha": "05565f4d", "message": "doc(analysis/convex/uniform_convex_space): End of sentence (#14986)\nI kept the suspense for a month.", "changes": [{"oldPath": "src/analysis/convex/uniform.lean", "newPath": "src/analysis/convex/uniform.lean", "changes": []}]}, {"timestamp": 1656337815, "sha": "5de7c346", "message": "feat(order/*): Miscellaneous results about the product order (#14977)\n`≤`, `<`, `⩿`, `⋖`, `is_bot`, `is_top`, `is_min`, `is_max` in `α × β`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "lt_iff", ["prod"]], ["add", "theorem", "mk_le_mk_iff_left", ["prod"]], ["add", "theorem", "mk_le_mk_iff_right", ["prod"]], ["mod", "theorem", "mk_lt_mk", ["prod"]], ["add", "theorem", "mk_lt_mk_iff_left", ["prod"]], ["add", "theorem", "mk_lt_mk_iff_right", ["prod"]], ["mod", "theorem", "swap_lt_swap", ["prod"]]]}, {"oldPath": "src/order/cover.lean", "newPath": "src/order/cover.lean", "changes": [["add", "theorem", "covby_iff", ["prod"]], ["add", "theorem", "fst_eq_or_snd_eq_of_wcovby", ["prod"]], ["add", "theorem", "mk_covby_mk_iff", ["prod"]], ["add", "theorem", "mk_covby_mk_iff_left", ["prod"]], ["add", "theorem", "mk_covby_mk_iff_right", ["prod"]], ["add", "theorem", "mk_wcovby_mk_iff", ["prod"]], ["add", "theorem", "mk_wcovby_mk_iff_left", ["prod"]], ["add", "theorem", "mk_wcovby_mk_iff_right", ["prod"]], ["add", "theorem", "swap_covby_swap", ["prod"]], ["add", "theorem", "swap_wcovby_swap", ["prod"]], ["add", "theorem", "wcovby_iff", ["prod"]], ["add", "theorem", "fst", ["wcovby"]], ["add", "theorem", "snd", ["wcovby"]]]}, {"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["add", "theorem", "fst", ["is_bot"]], ["add", "theorem", "prod_mk", ["is_bot"]], ["add", "theorem", "snd", ["is_bot"]], ["add", "theorem", "fst", ["is_max"]], ["add", "theorem", "prod_mk", ["is_max"]], ["add", "theorem", "snd", ["is_max"]], ["add", "theorem", "fst", ["is_min"]], ["add", "theorem", "prod_mk", ["is_min"]], ["add", "theorem", "snd", ["is_min"]], ["add", "theorem", "fst", ["is_top"]], ["add", "theorem", "prod_mk", ["is_top"]], ["add", "theorem", "snd", ["is_top"]], ["add", "theorem", "is_bot_iff", ["prod"]], ["add", "theorem", "is_max_iff", ["prod"]], ["add", "theorem", "is_min_iff", ["prod"]], ["add", "theorem", "is_top_iff", ["prod"]]]}]}, {"timestamp": 1656337814, "sha": "f5d2cc8f", "message": "feat(measure_theory/function/l1_space): add some integrability lemmas (#14931)", "changes": [{"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": [["add", "theorem", "norm_inf_le_add", []], ["add", "theorem", "norm_sup_le_add", []]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "abs", ["measure_theory", "integrable"]], ["add", "theorem", "bdd_mul", ["measure_theory", "integrable"]], ["add", "theorem", "inf", ["measure_theory", "integrable"]], ["add", "theorem", "sup", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/lp_order.lean", "newPath": "src/measure_theory/function/lp_order.lean", "changes": [["add", "theorem", "abs", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "inf", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "sup", ["measure_theory", "mem_ℒp"]]]}]}, {"timestamp": 1656337813, "sha": "cf8b46d7", "message": "feat(analysis/convex/special_functions): `sqrt * log` is strictly convex on x>1 (#14822)\nThis convexity result can be used to golf the proof of the main inequality in the proof of Bertrand's postulate (#8002).", "changes": [{"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["add", "theorem", "deriv2_sqrt_mul_log", []], ["add", "theorem", "deriv_sqrt_mul_log", []], ["add", "theorem", "strict_concave_on_sqrt_mul_log_Ioi", []]]}]}, {"timestamp": 1656337812, "sha": "68d29f52", "message": "feat(probability/stopping): measurability of sets related to stopping times, under countable/encodable assumptions (#14750)\nThe file already contains similar lemmas under assumptions on the topology of the index set. The new results use countability hypotheses instead.", "changes": [{"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}]}, {"timestamp": 1656329915, "sha": "331df5a2", "message": "feat(probability/moments): moments and moment generating function of a real random variable (#14755)\nThis PR defines moments, central moments, moment generating function and cumulant generating function.", "changes": [{"oldPath": null, "newPath": "src/probability/moments.lean", "changes": [["add", "def", "central_moment", ["probability_theory"]], ["add", "theorem", "central_moment_one'", ["probability_theory"]], ["add", "theorem", "central_moment_one", ["probability_theory"]], ["add", "theorem", "central_moment_two_eq_variance", ["probability_theory"]], ["add", "theorem", "central_moment_zero", ["probability_theory"]], ["add", "def", "cgf", ["probability_theory"]], ["add", "theorem", "cgf_const'", ["probability_theory"]], ["add", "theorem", "cgf_const", ["probability_theory"]], ["add", "theorem", "cgf_undef", ["probability_theory"]], ["add", "theorem", "cgf_zero'", ["probability_theory"]], ["add", "theorem", "cgf_zero", ["probability_theory"]], ["add", "theorem", "cgf_zero_fun", ["probability_theory"]], ["add", "theorem", "cgf_zero_measure", ["probability_theory"]], ["add", "theorem", "cgf_add", ["probability_theory", "indep_fun"]], ["add", "theorem", "mgf_add", ["probability_theory", "indep_fun"]], ["add", "def", "mgf", ["probability_theory"]], ["add", "theorem", "mgf_const'", ["probability_theory"]], ["add", "theorem", "mgf_const", ["probability_theory"]], ["add", "theorem", "mgf_nonneg", ["probability_theory"]], ["add", "theorem", "mgf_pos'", ["probability_theory"]], ["add", "theorem", "mgf_pos", ["probability_theory"]], ["add", "theorem", "mgf_undef", ["probability_theory"]], ["add", "theorem", "mgf_zero'", ["probability_theory"]], ["add", "theorem", "mgf_zero", ["probability_theory"]], ["add", "theorem", "mgf_zero_fun", ["probability_theory"]], ["add", "theorem", "mgf_zero_measure", ["probability_theory"]], ["add", "def", "moment", ["probability_theory"]], ["add", "theorem", "moment_zero", ["probability_theory"]]]}]}, {"timestamp": 1656329914, "sha": "3091b91e", "message": "feat(probability/stopping): if a filtration is sigma finite, then the measure restricted to the sigma algebra generated by a stopping time is sigma finite (#14752)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "sigma_finite_trim_mono", ["measure_theory"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}]}, {"timestamp": 1656329913, "sha": "72fbe5c3", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): Characterize weak convergence of finite measures in terms of integrals of bounded continuous real-valued functions. (#14578)\nWeak convergence of measures was defined in terms of integrals of bounded continuous nnreal-valued functions. This PR shows the equivalence to the textbook condition in terms of integrals of bounded continuous real-valued functions.\nAlso the file `measure_theory/measure/finite_measure_weak_convergence.lean` is divided to sections with dosctrings for clarity.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "max_zero_add_max_neg_zero_eq_abs_self", []]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "integral_eq_integral_nnreal_part_sub", ["bounded_continuous_function"]], ["add", "theorem", "to_real_lintegral_eq_integral", ["bounded_continuous_function", "nnreal"]], ["add", "theorem", "integrable_of_bounded_continuous_to_nnreal", ["measure_theory", "finite_measure"]], ["add", "theorem", "integrable_of_bounded_continuous_to_real", ["measure_theory", "finite_measure"]], ["del", "theorem", "lintegral_lt_top_of_bounded_continuous_to_nnreal", ["measure_theory", "finite_measure"]], ["add", "theorem", "lintegral_lt_top_of_bounded_continuous_to_real", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_iff_forall_integral_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_of_forall_integral_tendsto", ["measure_theory", "finite_measure"]], ["mod", "def", "finite_measure", ["measure_theory"]], ["add", "theorem", "lintegral_lt_top_of_bounded_continuous_to_nnreal", ["measure_theory"]], ["del", "theorem", "lintegral_lt_top_of_bounded_continuous_to_nnreal", ["measure_theory", "probability_measure"]], ["add", "theorem", "tendsto_iff_forall_integral_tendsto", ["measure_theory", "probability_measure"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "abs_self_eq_nnreal_part_add_nnreal_part_neg", ["bounded_continuous_function"]], ["add", "def", "nnnorm", ["bounded_continuous_function"]], ["add", "theorem", "nnnorm_coe_fun_eq", ["bounded_continuous_function"]], ["add", "def", "nnreal_part", ["bounded_continuous_function"]], ["add", "theorem", "nnreal_part_coe_fun_eq", ["bounded_continuous_function"]], ["add", "theorem", "self_eq_nnreal_part_sub_nnreal_part_neg", ["bounded_continuous_function"]]]}]}, {"timestamp": 1656321285, "sha": "cf0649c5", "message": "chore(data/sigma/basic): make `sigma.reflect` universe-polymorphic (#14934)", "changes": [{"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}]}, {"timestamp": 1656315597, "sha": "671c7c05", "message": "chore(algebra/direct_sum/ring): add new `int_cast` and `nat_cast` fields to match `ring` and `semiring` (#14976)\nThis was deliberately left to a follow up in #12182", "changes": [{"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "theorem", "int_cast_mem", ["set_like", "has_graded_one"]], ["add", "theorem", "nat_cast_mem", ["set_like", "has_graded_one"]]]}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}]}, {"timestamp": 1656315596, "sha": "af8ca85d", "message": "fix(linear_algebra/{exterior,clifford}_algebra/basic): add some missing namespaces (#14975)\nThese lemmas are about the auxiliary `{exterior,clifford}_algebra.graded_algebra.ι` not `{exterior,clifford}_algebra.ι`, so should have `graded_algebra` in their names.\nThis is a follow up to #12182", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": [["add", "theorem", "lift_ι_eq", ["clifford_algebra", "graded_algebra"]], ["del", "theorem", "lift_ι_eq", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": [["add", "def", "lift_ι", ["exterior_algebra", "graded_algebra"]], ["add", "theorem", "lift_ι_eq", ["exterior_algebra", "graded_algebra"]], ["del", "def", "lift_ι", ["exterior_algebra"]], ["del", "theorem", "lift_ι_eq", ["exterior_algebra"]]]}]}, {"timestamp": 1656302630, "sha": "d4f8a454", "message": "feat(algebra/group/units): add decidability instance for `is_unit` (#14873)\nThis adds a decidability instance for the `is_unit` predicate. See [here](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Decidability.20of.20.60is_unit.60.20on.20finite.20rings/near/286543269).", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}]}, {"timestamp": 1656299003, "sha": "0b18823c", "message": "feat(set_theory/game/pgame): make `lt_iff_le_and_lf` true by def-eq (#14983)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "lf_of_lt", ["pgame"]], ["mod", "theorem", "lt_iff_le_and_lf", ["pgame"]], ["mod", "theorem", "lt_of_le_of_lf", ["pgame"]]]}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}]}, {"timestamp": 1656288556, "sha": "894f92bc", "message": "refactor(order/upper_lower): Reverse the order on `upper_set` (#14982)\nHaving `upper_set` being ordered by reverse inclusion makes it order-isomorphic to `lower_set` (and antichains once we have them as a type) and it matches the order on `filter`.", "changes": [{"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "compl_le_compl", ["lower_set"]], ["mod", "theorem", "Ici_Sup", ["upper_set"]], ["mod", "def", "Ici_Sup_hom", ["upper_set"]], ["add", "theorem", "Ici_bot", ["upper_set"]], ["mod", "theorem", "Ici_sup", ["upper_set"]], ["mod", "def", "Ici_sup_hom", ["upper_set"]], ["mod", "theorem", "Ici_sup_hom_apply", ["upper_set"]], ["mod", "theorem", "Ici_supr", ["upper_set"]], ["mod", "theorem", "Ici_supr₂", ["upper_set"]], ["del", "theorem", "Ici_top", ["upper_set"]], ["add", "theorem", "Icoi_le_Ioi", ["upper_set"]], ["del", "theorem", "Ioi_bot", ["upper_set"]], ["del", "theorem", "Ioi_le_Ici", ["upper_set"]], ["add", "theorem", "Ioi_top", ["upper_set"]], ["mod", "theorem", "coe_Inf", ["upper_set"]], ["mod", "theorem", "coe_Sup", ["upper_set"]], ["mod", "theorem", "coe_bot", ["upper_set"]], ["mod", "theorem", "coe_inf", ["upper_set"]], ["mod", "theorem", "coe_infi", ["upper_set"]], ["mod", "theorem", "coe_infi₂", ["upper_set"]], ["mod", "theorem", "coe_sup", ["upper_set"]], ["mod", "theorem", "coe_supr", ["upper_set"]], ["mod", "theorem", "coe_supr₂", ["upper_set"]], ["mod", "theorem", "coe_top", ["upper_set"]], ["add", "theorem", "compl_le_compl", ["upper_set"]], ["mod", "theorem", "mem_Inf_iff", ["upper_set"]], ["mod", "theorem", "mem_Sup_iff", ["upper_set"]], ["add", "theorem", "mem_bot", ["upper_set"]], ["mod", "theorem", "mem_inf_iff", ["upper_set"]], ["mod", "theorem", "mem_infi_iff", ["upper_set"]], ["mod", "theorem", "mem_infi₂_iff", ["upper_set"]], ["mod", "theorem", "mem_sup_iff", ["upper_set"]], ["mod", "theorem", "mem_supr_iff", ["upper_set"]], ["mod", "theorem", "mem_supr₂_iff", ["upper_set"]], ["del", "theorem", "mem_top", ["upper_set"]], ["del", "theorem", "not_mem_bot", ["upper_set"]], ["add", "theorem", "not_mem_top", ["upper_set"]], ["add", "def", "upper_set_iso_lower_set", []]]}]}, {"timestamp": 1656286159, "sha": "f63d925e", "message": "feat(combinatorics/simple_graph/clique): The set of cliques (#14827)\nDefine `simple_graph.clique_set`, the `set` analogue to `simple_graph.clique_finset`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/clique.lean", "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": [["mod", "theorem", "clique_finset_mono", ["simple_graph"]], ["add", "def", "clique_set", ["simple_graph"]], ["add", "theorem", "clique_set_eq_empty_iff", ["simple_graph"]], ["add", "theorem", "clique_set_mono'", ["simple_graph"]], ["add", "theorem", "clique_set_mono", ["simple_graph"]], ["add", "theorem", "coe_clique_finset", ["simple_graph"]], ["mod", "theorem", "mem_clique_finset_iff", ["simple_graph"]], ["add", "theorem", "mem_clique_set_iff", ["simple_graph"]]]}]}, {"timestamp": 1656279404, "sha": "f2b108e8", "message": "refactor(set_theory/cardinal/*): `cardinal.sup` → `supr` (#14569)\nWe remove `cardinal.sup` in favor of `supr`. We tweak many other theorems relating to cardinal suprema in the process.\nA noteworthy consequence is that there's no longer universe constraints on the domain and codomain of the functions one takes the supremum of. When one does still have this constraint, one can use `bdd_above_range` to immediately prove their range is bounded above.\n\nThe result of this PR is the following replacements:\n* `cardinal.sup` → `supr`\n* `cardinal.le_sup` → `le_csupr`\n* `cardinal.sup_le` → `csupr_le'`\n* `cardinal.sup_le_sup` → `csupr_mono`\n* `cardinal.sup_le_sum` → `cardinal.supr_le_sum`\n* `cardinal.sum_le_sup` → `cardinal.sum_le_supr`\n* `cardinal.sum_le_sup_lift` → `cardinal.sum_le_supr_lift`\n* `cardinal.sup_eq_zero` → `cardinal.supr_of_empty`\n* `cardinal.le_sup_iff` → `le_csupr_iff'`\n* `cardinal.lift_sup` → `cardinal.lift_supr`\n* `cardinal.lift_sup_le` → `cardinal.lift_supr` + `csupr_le'`\n* `cardinal.lift_sup_le_iff` → `cardinal.lift_supr` + `csupr_le_iff`\n* `cardinal.lift_sup_le_lift_sup` → `cardinal.lift_supr` + `csupr_le_iff'`\n* `cardinal.lift_sup_le_lift_sup'` → `cardinal.lift_supr` + `csupr_mono'`\n* `cardinal.sup_lt_lift` → `cardinal.supr_lt_lift`\n* `cardinal.sup_lt` → `cardinal.supr_lt`", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "csupr_mono'", []], ["add", "theorem", "le_csupr_iff'", []]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "bdd_above_iff_small", ["cardinal"]], ["add", "theorem", "bdd_above_image", ["cardinal"]], ["add", "theorem", "bdd_above_range_comp", ["cardinal"]], ["mod", "theorem", "le_powerlt", ["cardinal"]], ["del", "theorem", "le_sup", ["cardinal"]], ["add", "theorem", "lift_Sup", ["cardinal"]], ["add", "theorem", "lift_infi", ["cardinal"]], ["del", "theorem", "lift_sup", ["cardinal"]], ["del", "theorem", "lift_sup_le", ["cardinal"]], ["del", "theorem", "lift_sup_le_iff", ["cardinal"]], ["del", "theorem", "lift_sup_le_lift_sup'", ["cardinal"]], ["del", "theorem", "lift_sup_le_lift_sup", ["cardinal"]], ["add", "theorem", "lift_supr", ["cardinal"]], ["add", "theorem", "lift_supr_le", ["cardinal"]], ["add", "theorem", "lift_supr_le_iff", ["cardinal"]], ["add", "theorem", "lift_supr_le_lift_supr'", ["cardinal"]], ["add", "theorem", "lift_supr_le_lift_supr", ["cardinal"]], ["mod", "theorem", "mk_Union_le", ["cardinal"]], ["mod", "theorem", "mk_sUnion_le", ["cardinal"]], ["mod", "def", "powerlt", ["cardinal"]], ["del", "theorem", "powerlt_aux", ["cardinal"]], ["mod", "theorem", "powerlt_le", ["cardinal"]], ["mod", "theorem", "powerlt_max", ["cardinal"]], ["add", "theorem", "powerlt_min", ["cardinal"]], ["add", "theorem", "powerlt_mono_left", ["cardinal"]], ["mod", "theorem", "powerlt_succ", ["cardinal"]], ["mod", "theorem", "powerlt_zero", ["cardinal"]], ["del", "theorem", "sum_le_sup", ["cardinal"]], ["del", "theorem", "sum_le_sup_lift", ["cardinal"]], ["add", "theorem", "sum_le_supr", ["cardinal"]], ["add", "theorem", "sum_le_supr_lift", ["cardinal"]], ["del", "def", "sup", ["cardinal"]], ["del", "theorem", "sup_eq_zero", ["cardinal"]], ["del", "theorem", "sup_le", ["cardinal"]], ["del", "theorem", "sup_le_iff", ["cardinal"]], ["del", "theorem", "sup_le_sum", ["cardinal"]], ["del", "theorem", "sup_le_sup", ["cardinal"]], ["add", "theorem", "supr_le_sum", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["del", "theorem", "sup_lt_lift_of_is_regular", ["cardinal"]], ["del", "theorem", "sup_lt_of_is_regular", ["cardinal"]], ["add", "theorem", "supr_lt_lift_of_is_regular", ["cardinal"]], ["add", "theorem", "supr_lt_of_is_regular", ["cardinal"]], ["del", "theorem", "sup_lt", ["ordinal"]], ["del", "theorem", "sup_lt_lift", ["ordinal"]], ["add", "theorem", "supr_lt", ["ordinal"]], ["add", "theorem", "supr_lt_lift", ["ordinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "Sup_ord", ["ordinal"]], ["del", "theorem", "sup_ord", ["ordinal"]], ["add", "theorem", "supr_ord", ["ordinal"]]]}]}, {"timestamp": 1656272924, "sha": "33112c45", "message": "feat(data/nat/totient): more general multiplicativity lemmas for totient (#14842)\nAdds lemmas: \n`totient_gcd_mul_totient_mul : φ (a.gcd b) * φ (a * b) = φ a * φ b * (a.gcd b)`\n`totient_super_multiplicative : φ a * φ b ≤ φ (a * b)`\n`totient_gcd_mul_totient_mul` is Theorem 2.5(b) in Apostol (1976) Introduction to Analytic Number Theory.\nDeveloped while reviewing @CBirkbeck 's #14828", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_gcd_mul_totient_mul", ["nat"]], ["add", "theorem", "totient_super_multiplicative", ["nat"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "prod_factors_gcd_mul_prod_factors_mul", []]]}]}, {"timestamp": 1656269448, "sha": "381733a5", "message": "feat(analysis/convex/stone_separation): Stone's separation theorem (#14677)\nDisjoint convexes can be separated by a convex whose complement is also convex.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/stone_separation.lean", "changes": [["add", "theorem", "exists_convex_convex_compl_subset", []], ["add", "theorem", "not_disjoint_segment_convex_hull_triple", []]]}]}, {"timestamp": 1656262868, "sha": "4111ed94", "message": "docs(linear_algebra/invariant_basis_number): Drop a TODO (#14973)\nThis TODO was fixed some time ago by @riccardobrasca, reference the relevant instance in the docstring.", "changes": [{"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}]}, {"timestamp": 1656262867, "sha": "ca070dd6", "message": "feat(analysis/special_functions/trigonometric/angle): topology (#14969)\nGive `real.angle` the structure of a `topological_add_group` (rather\nthan just an `add_comm_group`), so that it's possible to talk about\ncontinuity for functions involving this type, and add associated\ncontinuity lemmas for `coe : ℝ → angle`, `real.angle.sin` and\n`real.angle.cos`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "continuous_coe", ["real", "angle"]], ["add", "theorem", "continuous_cos", ["real", "angle"]], ["add", "theorem", "continuous_sin", ["real", "angle"]]]}]}, {"timestamp": 1656262866, "sha": "28a6f0ac", "message": "feat(set_theory/surreal/basic): add `numeric.mk` lemma, golf (#14962)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["mod", "theorem", "add", ["pgame", "numeric"]], ["mod", "theorem", "le_move_right", ["pgame", "numeric"]], ["mod", "theorem", "left_lt_right", ["pgame", "numeric"]], ["mod", "theorem", "lt_move_right", ["pgame", "numeric"]], ["add", "theorem", "mk", ["pgame", "numeric"]], ["mod", "theorem", "move_left", ["pgame", "numeric"]], ["mod", "theorem", "move_left_le", ["pgame", "numeric"]], ["mod", "theorem", "move_left_lt", ["pgame", "numeric"]], ["mod", "theorem", "move_right", ["pgame", "numeric"]], ["mod", "theorem", "sub", ["pgame", "numeric"]], ["mod", "theorem", "numeric_def", ["pgame"]], ["mod", "theorem", "numeric_of_is_empty_left_moves", ["pgame"]]]}]}, {"timestamp": 1656262865, "sha": "54352be4", "message": "feat(combinatorics/catalan): definition and equality of recursive and explicit definition (#14869)\nThis PR defines the Catalan numbers via the recursive definition $$C (n+1) = \\sum_{i=0}^n C (i) * C (n-i)$$. \nFurthermore, it shows that $$ n+1 | \\binom {2n}{n}$$ and that the alternative $$C(n)=\\frac{1}{n+1} \\binom{2n}{n}$$ holds. \nThe proof is based on the following stackexchange answer: https://math.stackexchange.com/questions/3304415/catalan-numbers-algebraic-proof-of-the-recurrence-relation which is quite elementary, so that the proof is relatively easy to formalise.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/catalan.lean", "changes": [["add", "def", "catalan", []], ["add", "theorem", "catalan_eq_central_binom_div", []], ["add", "theorem", "catalan_one", []], ["add", "theorem", "catalan_succ", []], ["add", "theorem", "catalan_three", []], ["add", "theorem", "catalan_two", []], ["add", "theorem", "catalan_zero", []], ["add", "theorem", "succ_mul_catalan_eq_central_binom", []]]}, {"oldPath": "src/data/nat/choose/central.lean", "newPath": "src/data/nat/choose/central.lean", "changes": [["add", "theorem", "succ_dvd_central_binom", ["nat"]], ["add", "theorem", "two_dvd_central_binom_of_one_le", ["nat"]], ["add", "theorem", "two_dvd_central_binom_succ", ["nat"]]]}]}, {"timestamp": 1656255375, "sha": "ee7a8863", "message": "feat({data/{finset,set},order/filter}/pointwise): Missing `smul_comm_class` instances (#14963)\nInstances of the form `smul_comm_class α β (something γ)`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "image_comm", ["finset"]], ["add", "theorem", "map_comm", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "smul_set_mono", ["set"]], ["add", "theorem", "smul_set_subset_iff", ["set"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}]}, {"timestamp": 1656244937, "sha": "32b08ef8", "message": "feat: `add_monoid_with_one`, `add_group_with_one` (#12182)\nAdds two type classes `add_monoid_with_one R` and `add_group_with_one R` with operations for `ℕ → R` and `ℤ → R`, resp. The type classes extend `add_monoid` and `add_group` because those seem to be the weakest type classes where such a `+₀₁`-homomorphism is guaranteed to exist. The `nat.cast` function as well as `coe : ℕ → R` are implemented in terms of `add_monoid_with_one R`, removing the infamous `nat.cast` diamond. Fixes #946.\nSome lemmas are less general now because the algebraic hierarchy is not fine-grained enough, or because the lawful coercion only exists for monoids and above. This generality was not used in mathlib as far as I could tell. For example:\n - `char_p.char_p_to_char_zero` now requires a group instead of a left-cancellative monoid, because we don't have the `add_left_cancel_monoid_with_one` class\n - `nat.norm_cast_le` now requires a seminormed ring instead of a seminormed group, because we don't have `semi_normed_group_with_one`", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/30_ballot_problem.lean", "newPath": "archive/100-theorems-list/30_ballot_problem.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": []}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "cast_list_sum", ["int"]], ["mod", "theorem", "cast_multiset_sum", ["int"]], ["mod", "theorem", "cast_sum", ["int"]], ["mod", "theorem", "cast_list_sum", ["nat"]], ["mod", "theorem", "cast_multiset_sum", ["nat"]], ["mod", "theorem", "cast_sum", ["nat"]]]}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/colimits.lean", "newPath": "src/algebra/category/Ring/colimits.lean", "changes": []}, {"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "cast_card_eq_zero", ["char_p"]], ["mod", "theorem", "cast_eq_zero", ["char_p"]], ["mod", "theorem", "char_p_to_char_zero", ["char_p"]], ["mod", "theorem", "congr", ["char_p"]], ["mod", "theorem", "eq", ["char_p"]], ["mod", "theorem", "int_cast_eq_zero_iff", ["char_p"]], ["mod", "theorem", "int_coe_eq_int_coe_iff", ["char_p"]]]}, {"oldPath": "src/algebra/char_p/char_and_card.lean", "newPath": "src/algebra/char_p/char_and_card.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["del", "theorem", "char_zero_of_inj_zero", []], ["del", "theorem", "cast_add_one_ne_zero", ["nat"]], ["del", "theorem", "cast_eq_one", ["nat"]], ["del", "theorem", "cast_eq_zero", ["nat"]], ["del", "theorem", "cast_inj", ["nat"]], ["del", "theorem", "cast_injective", ["nat"]], ["del", "theorem", "cast_ne_one", ["nat"]], ["del", "theorem", "cast_ne_zero", ["nat"]], ["del", "theorem", "to_char_zero", ["ordered_semiring"]]]}, {"oldPath": null, "newPath": "src/algebra/char_zero/defs.lean", "changes": [["add", "theorem", "char_zero_of_inj_zero", []], ["add", "theorem", "cast_add_one_ne_zero", ["nat"]], ["add", "theorem", "cast_eq_one", ["nat"]], ["add", "theorem", "cast_eq_zero", ["nat"]], ["add", "theorem", "cast_inj", ["nat"]], ["add", "theorem", "cast_injective", ["nat"]], ["add", "theorem", "cast_ne_one", ["nat"]], ["add", "theorem", "cast_ne_zero", ["nat"]]]}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["add", "theorem", "of_int_cast", ["direct_sum"]], ["add", "theorem", "of_nat_cast", ["direct_sum"]]]}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "nsmul_one", []], ["mod", "theorem", "zsmul_eq_mul", []], ["mod", "theorem", "zsmul_one", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/hom/group_instances.lean", "newPath": "src/algebra/hom/group_instances.lean", "changes": []}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "of_module", ["char_zero"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["mod", "theorem", "ne'", ["ne_zero"]], ["mod", "theorem", "not_char_dvd", ["ne_zero"]], ["mod", "theorem", "of_ne_zero_coe", ["ne_zero"]], ["mod", "theorem", "of_not_dvd", ["ne_zero"]], ["mod", "theorem", "pos_of_ne_zero_coe", ["ne_zero"]]]}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["mod", "theorem", "ceil_pos", ["int"]], ["mod", "theorem", "ceil_zero", ["int"]], ["mod", "theorem", "floor_add_nat", ["int"]], ["mod", "theorem", "floor_nat_add", ["int"]], ["mod", "theorem", "floor_nonneg", ["int"]], ["mod", "theorem", "floor_sub_nat", ["int"]], ["mod", "theorem", "floor_zero", ["int"]], ["mod", "theorem", "ceil_eq_zero", ["nat"]], ["mod", "theorem", "ceil_zero", ["nat"]], ["mod", "theorem", "floor_zero", ["nat"]], ["mod", "theorem", "lt_floor_add_one", ["nat"]]]}, {"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "strict_mono_cast", ["nat"]], ["add", "theorem", "to_char_zero", ["ordered_semiring"]]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": []}, {"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": [["add", "theorem", "fst_mk", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_mk", ["triv_sq_zero_ext"]]]}, {"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/normed/field/basic.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": [["add", "theorem", "norm_cast_le", ["nat"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["del", "theorem", "norm_cast_le", ["nat"]]]}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow_deriv.lean", "newPath": "src/analysis/special_functions/pow_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/analysis/subadditive.lean", "newPath": "src/analysis/subadditive.lean", "changes": []}, {"oldPath": "src/analysis/sum_integral_comparisons.lean", "newPath": "src/analysis/sum_integral_comparisons.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/bound.lean", "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "newPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "changes": []}, {"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": [["add", "theorem", "tr_nat_default", ["turing", "partrec_to_TM2"]], ["mod", "theorem", "tr_nat_zero", ["turing", "partrec_to_TM2"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "coe_nat_abs", ["int"]], ["mod", "theorem", "coe_nat_eq_zero", ["int"]], ["mod", "theorem", "coe_nat_ne_zero", ["int"]], ["mod", "theorem", "coe_nat_nonneg", ["int"]], ["mod", "theorem", "coe_nat_pos", ["int"]], ["add", "theorem", "neg_of_nat_ne_zero", ["int"]], ["add", "theorem", "zero_ne_neg_of_nat", ["int"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["del", "theorem", "cast_add", ["int"]], ["mod", "def", "cast_add_hom", ["int"]], ["del", "theorem", "cast_bit0", ["int"]], ["del", "theorem", "cast_bit1", ["int"]], ["del", "theorem", "cast_coe_nat'", ["int"]], ["del", "theorem", "cast_coe_nat", ["int"]], ["mod", "theorem", "cast_commute", ["int"]], ["del", "theorem", "cast_four", ["int"]], ["mod", "theorem", "cast_ite", ["int"]], ["mod", "theorem", "cast_mul", ["int"]], ["del", "theorem", "cast_neg", ["int"]], ["add", "theorem", "cast_neg_nat_cast", ["int"]], ["del", "theorem", "cast_neg_of_nat", ["int"]], ["del", "theorem", "cast_neg_succ_of_nat", ["int"]], ["del", "theorem", "cast_of_nat", ["int"]], ["del", "theorem", "cast_one", ["int"]], ["del", "theorem", "cast_sub", ["int"]], ["del", "theorem", "cast_sub_nat_nat", ["int"]], ["del", "theorem", "cast_three", ["int"]], ["del", "theorem", "cast_two", ["int"]], ["del", "theorem", "cast_zero", ["int"]], ["mod", "theorem", "coe_cast_add_hom", ["int"]], ["del", "theorem", "coe_nat_bit0", ["int"]], ["del", "theorem", "coe_nat_bit1", ["int"]], ["del", "theorem", "nat_cast_eq_coe_nat", ["int"]], ["mod", "theorem", "op_int_cast", ["mul_opposite"]], ["mod", "theorem", "unop_int_cast", ["mul_opposite"]], ["mod", "theorem", "coe_int", ["pi"]], ["mod", "theorem", "int_apply", ["pi"]], ["mod", "theorem", "fst_int_cast", ["prod"]], ["mod", "theorem", "snd_int_cast", ["prod"]]]}, {"oldPath": null, "newPath": "src/data/int/cast/defs.lean", "changes": [["add", "theorem", "cast_add", ["int"]], ["add", "theorem", "cast_bit0", ["int"]], ["add", "theorem", "cast_bit1", ["int"]], ["add", "theorem", "cast_coe_nat", ["int"]], ["add", "theorem", "cast_four", ["int"]], ["add", "theorem", "cast_neg", ["int"]], ["add", "theorem", "cast_neg_of_nat", ["int"]], ["add", "theorem", "cast_neg_succ_of_nat", ["int"]], ["add", "theorem", "cast_of_nat", ["int"]], ["add", "theorem", "cast_one", ["int"]], ["add", "theorem", "cast_sub", ["int"]], ["add", "theorem", "cast_sub_nat_nat", ["int"]], ["add", "theorem", "cast_three", ["int"]], ["add", "theorem", "cast_two", ["int"]], ["add", "theorem", "cast_zero", ["int"]], ["add", "theorem", "coe_nat_bit0", ["int"]], ["add", "theorem", "coe_nat_bit1", ["int"]], ["add", "theorem", "neg_of_nat_eq", ["int"]], ["add", "theorem", "cast_pred", ["nat"]], ["add", "theorem", "cast_sub", ["nat"]]]}, {"oldPath": "src/data/int/char_zero.lean", "newPath": "src/data/int/char_zero.lean", "changes": [["mod", "theorem", "cast_eq_zero", ["int"]], ["mod", "theorem", "cast_inj", ["int"]], ["mod", "theorem", "cast_injective", ["int"]], ["mod", "theorem", "cast_ne_zero", ["int"]]]}, {"oldPath": "src/data/int/interval.lean", "newPath": "src/data/int/interval.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "diagonal_eq_diagonal_iff", ["matrix"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "ext_nat", ["add_monoid_hom"]], ["mod", "theorem", "ext_nat'", []], ["mod", "theorem", "map_nat_cast'", []], ["mod", "theorem", "op_nat_cast", ["mul_opposite"]], ["mod", "theorem", "unop_nat_cast", ["mul_opposite"]], ["del", "theorem", "bin_cast_eq", ["nat"]], ["del", "theorem", "cast_add", ["nat"]], ["mod", "def", "cast_add_monoid_hom", ["nat"]], ["del", "theorem", "cast_add_one", ["nat"]], ["del", "theorem", "cast_bit0", ["nat"]], ["del", "theorem", "cast_bit1", ["nat"]], ["del", "theorem", "cast_ite", ["nat"]], ["mod", "theorem", "cast_mul", ["nat"]], ["mod", "theorem", "cast_nonneg", ["nat"]], ["del", "theorem", "cast_one", ["nat"]], ["del", "theorem", "cast_pred", ["nat"]], ["mod", "theorem", "cast_ring_hom_nat", ["nat"]], ["del", "theorem", "cast_sub", ["nat"]], ["del", "theorem", "cast_succ", ["nat"]], ["del", "theorem", "cast_two", ["nat"]], ["mod", "theorem", "cast_with_bot", ["nat"]], ["del", "theorem", "cast_zero", ["nat"]], ["mod", "theorem", "coe_cast_add_monoid_hom", ["nat"]], ["del", "theorem", "strict_mono_cast", ["nat"]], ["mod", "theorem", "coe_nat", ["pi"]], ["mod", "theorem", "nat_apply", ["pi"]]]}, {"oldPath": null, "newPath": "src/data/nat/cast/defs.lean", "changes": [["add", "theorem", "bin_cast_eq", ["nat"]], ["add", "theorem", "cast_add", ["nat"]], ["add", "theorem", "cast_add_one", ["nat"]], ["add", "theorem", "cast_bit0", ["nat"]], ["add", "theorem", "cast_bit1", ["nat"]], ["add", "theorem", "cast_ite", ["nat"]], ["add", "theorem", "cast_one", ["nat"]], ["add", "theorem", "cast_succ", ["nat"]], ["add", "theorem", "cast_two", ["nat"]], ["add", "theorem", "cast_zero", ["nat"]]]}, {"oldPath": "src/data/nat/choose/sum.lean", "newPath": "src/data/nat/choose/sum.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "coe_inj", ["enat"]], ["mod", "theorem", "dom_coe", ["enat"]], ["mod", "theorem", "some_eq_coe", ["enat"]]]}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["add", "theorem", "add_of_nat'", ["num"]], ["mod", "theorem", "add_of_nat", ["num"]], ["add", "theorem", "bit1_succ", ["num"]], ["mod", "theorem", "cast_of_znum", ["num"]], ["mod", "theorem", "cast_sub'", ["num"]], ["mod", "theorem", "cast_succ'", ["num"]], ["mod", "theorem", "cast_succ", ["num"]], ["mod", "theorem", "cast_to_int", ["num"]], ["mod", "theorem", "cast_to_nat", ["num"]], ["add", "theorem", "of_int'_to_znum", ["num"]], ["add", "theorem", "of_nat'_bit", ["num"]], ["add", "theorem", "of_nat'_one", ["num"]], ["add", "theorem", "of_nat'_succ", ["num"]], ["mod", "theorem", "of_nat'_zero", ["num"]], ["mod", "theorem", "of_nat_cast", ["num"]], ["mod", "theorem", "of_nat_inj", ["num"]], ["del", "theorem", "of_nat_to_znum", ["num"]], ["del", "theorem", "of_nat_to_znum_neg", ["num"]], ["add", "theorem", "of_to_nat'", ["num"]], ["mod", "theorem", "of_to_nat", ["num"]], ["add", "theorem", "pred_succ", ["num"]], ["add", "theorem", "succ_of_int'", ["num"]], ["add", "theorem", "to_znum_neg_succ", ["num"]], ["add", "theorem", "to_znum_succ", ["num"]], ["mod", "theorem", "cast_add", ["pos_num"]], ["mod", "theorem", "cast_inj", ["pos_num"]], ["mod", "theorem", "cast_sub'", ["pos_num"]], ["mod", "theorem", "cast_succ", ["pos_num"]], ["mod", "theorem", "cast_to_int", ["pos_num"]], ["mod", "theorem", "cast_to_nat", ["pos_num"]], ["add", "theorem", "of_to_nat'", ["pos_num"]], ["mod", "theorem", "of_to_nat", ["pos_num"]], ["mod", "theorem", "cast_add", ["znum"]], ["mod", "theorem", "cast_bit0", ["znum"]], ["mod", "theorem", "cast_bit1", ["znum"]], ["mod", "theorem", "cast_bitm1", ["znum"]], ["add", "theorem", "cast_sub", ["znum"]], ["mod", "theorem", "cast_succ", ["znum"]], ["mod", "theorem", "cast_to_int", ["znum"]], ["mod", "theorem", "of_int'_eq", ["znum"]], ["add", "theorem", "of_int'_neg", ["znum"]], ["mod", "theorem", "of_int_cast", ["znum"]], ["mod", "theorem", "of_nat_cast", ["znum"]], ["add", "theorem", "of_nat_to_znum", ["znum"]], ["add", "theorem", "of_nat_to_znum_neg", ["znum"]], ["add", "theorem", "of_to_int'", ["znum"]], ["mod", "theorem", "of_to_int", ["znum"]], ["mod", "theorem", "to_of_int", ["znum"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_coe_nat", ["rat"]]]}, {"oldPath": "src/data/rat/defs.lean", "newPath": "src/data/rat/defs.lean", "changes": [["mod", "theorem", "coe_int_eq_mk", ["rat"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["mod", "theorem", "ne_zero", ["irrational"]]]}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_nat_mem", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["add", "theorem", "mk_zero_zero", ["perfect_closure"]]]}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": [["add", "theorem", "sphere_ext_iff", []], ["add", "theorem", "stereographic'_symm_apply", []], ["add", "theorem", "stereographic_apply", []]]}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": [["add", "theorem", "lift_ι_eq", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": [["add", "def", "lift_ι", ["exterior_algebra"]], ["add", "theorem", "lift_ι_eq", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/complex.lean", "newPath": "src/linear_algebra/quadratic_form/complex.lean", "changes": []}, {"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["mod", "theorem", "coe_coe", ["nat", "arithmetic_function"]], ["mod", "theorem", "int_coe_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "int_coe_one", ["nat", "arithmetic_function"]], ["mod", "theorem", "nat_coe_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "nat_coe_one", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/measure.lean", "newPath": "src/number_theory/liouville/measure.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/residual.lean", "newPath": "src/number_theory/liouville/residual.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": [["mod", "theorem", "int_coe_fst", ["lucas_lehmer", "X"]], ["mod", "theorem", "int_coe_snd", ["lucas_lehmer", "X"]], ["mod", "theorem", "nat_coe_fst", ["lucas_lehmer", "X"]], ["mod", "theorem", "nat_coe_snd", ["lucas_lehmer", "X"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": [["mod", "theorem", "coe_nat_im", ["zsqrtd"]], ["mod", "theorem", "coe_nat_re", ["zsqrtd"]], ["mod", "theorem", "coe_nat_val", ["zsqrtd"]]]}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": [["mod", "theorem", "coe_nat_abs_norm", ["gaussian_int"]]]}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/probability/strong_law.lean", "newPath": "src/probability/strong_law.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_nat_cast", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["mod", "theorem", "mem_support_iff", ["graded_algebra"]]]}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": [["add", "theorem", "int_cast_val", ["homogeneous_localization"]], ["add", "theorem", "nat_cast_val", ["homogeneous_localization"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": []}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "theorem", "nat_cast_mem", []]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": [["del", "def", "constant_coeff", ["witt_vector"]], ["del", "def", "map", ["witt_vector"]], ["add", "theorem", "int_cast", ["witt_vector", "map_fun"]], ["add", "theorem", "nat_cast", ["witt_vector", "map_fun"]]]}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius_fraction_field.lean", "newPath": "src/ring_theory/witt_vector/frobenius_fraction_field.lean", "changes": [["add", "theorem", "exists_frobenius_solution_fraction_ring_aux", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/mul_coeff.lean", "newPath": "src/ring_theory/witt_vector/mul_coeff.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": [["del", "def", "truncate", ["witt_vector"]], ["add", "theorem", "truncate_fun_int_cast", ["witt_vector"]], ["add", "theorem", "truncate_fun_nat_cast", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/verschiebung.lean", "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "theorem", "nat_one", ["pgame"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/zify.lean", "newPath": "src/tactic/zify.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["add", "theorem", "coe_int_cast", ["continuous_map"]], ["add", "theorem", "coe_nat_cast", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "coe_int_cast", ["bounded_continuous_function"]], ["add", "theorem", "coe_nat_cast", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": []}, {"oldPath": "test/norm_cast_lemma_order.lean", "newPath": "test/norm_cast_lemma_order.lean", "changes": []}, {"oldPath": "test/norm_cast_sum_lambda.lean", "newPath": "test/norm_cast_sum_lambda.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/transport/basic.lean", "newPath": "test/transport/basic.lean", "changes": []}, {"oldPath": "test/zify.lean", "newPath": "test/zify.lean", "changes": []}]}, {"timestamp": 1656232934, "sha": "871fcd87", "message": "feat(data/zmod/algebra): add subsingleton instance for zmod-algebras (#14946)\nThis will be used to eliminate a diamond with `galois_field.algebra` in a followup PR.", "changes": [{"oldPath": "src/data/zmod/algebra.lean", "newPath": "src/data/zmod/algebra.lean", "changes": []}]}, {"timestamp": 1656230497, "sha": "e0ecaa9e", "message": "feat(set_theory/ordinal/notation): fast growing hierarchy (#14072)\nAdds a definition `onote.fast_growing` which yields elements of the [fast-growing hierarchy](https://en.wikipedia.org/wiki/Fast-growing_hierarchy) up to and including ε₀. Because it is built on `onote` instead of `ordinal`, the definition is fully computable, and you can work out some small elements. For example `fast_growing_ε₀ 2 = 2048` and `fast_growing_ε₀ 3` is... big.", "changes": [{"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": [["add", "def", "fast_growing", ["onote"]], ["add", "theorem", "fast_growing_def", ["onote"]], ["add", "theorem", "fast_growing_limit", ["onote"]], ["add", "theorem", "fast_growing_one", ["onote"]], ["add", "theorem", "fast_growing_succ", ["onote"]], ["add", "theorem", "fast_growing_two", ["onote"]], ["add", "theorem", "fast_growing_zero'", ["onote"]], ["add", "theorem", "fast_growing_zero", ["onote"]], ["add", "def", "fast_growing_ε₀", ["onote"]], ["add", "theorem", "fast_growing_ε₀_one", ["onote"]], ["add", "theorem", "fast_growing_ε₀_two", ["onote"]], ["add", "theorem", "fast_growing_ε₀_zero", ["onote"]], ["add", "def", "fundamental_sequence", ["onote"]], ["add", "theorem", "fundamental_sequence_has_prop", ["onote"]], ["add", "def", "fundamental_sequence_prop", ["onote"]]]}]}, {"timestamp": 1656218224, "sha": "cfbb97f7", "message": "feat(data/{finset,set}/basic): More `∪`/`∩` laws (#14952)\nSpecialise lattice lemmas to `set` and `finset`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "inter_inter_distrib_left", ["finset"]], ["add", "theorem", "inter_inter_distrib_right", ["finset"]], ["add", "theorem", "inter_inter_inter_comm", ["finset"]], ["add", "theorem", "union_union_distrib_left", ["finset"]], ["add", "theorem", "union_union_distrib_right", ["finset"]], ["add", "theorem", "union_union_union_comm", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_inter_distrib_left", ["set"]], ["add", "theorem", "inter_inter_distrib_right", ["set"]], ["add", "theorem", "inter_inter_inter_comm", ["set"]], ["add", "theorem", "union_union_distrib_left", ["set"]], ["add", "theorem", "union_union_distrib_right", ["set"]], ["add", "theorem", "union_union_union_comm", ["set"]]]}]}, {"timestamp": 1656218223, "sha": "ccb1cf38", "message": "feat(data/set/lattice): Preimages are disjoint iff the sets are disjoint (#14951)\nProve `disjoint (f ⁻¹' s) (f ⁻¹' t) ↔ disjoint s t` and `disjoint (f '' s) (f '' t) ↔ disjoint s t` when `f` is surjective/injective. Delete `set.disjoint_preimage` in favor of `disjoint.preimage`. Fix the statement of `set.preimage_eq_empty_iff` (the name referred to the RHS).", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "inter_eq", ["disjoint"]], ["add", "theorem", "of_image", ["disjoint"]], ["add", "theorem", "of_preimage", ["disjoint"]], ["add", "theorem", "disjoint_image_iff", ["set"]], ["del", "theorem", "disjoint_preimage", ["set"]], ["add", "theorem", "disjoint_preimage_iff", ["set"]], ["mod", "theorem", "preimage_eq_empty_iff", ["set"]]]}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}]}, {"timestamp": 1656212574, "sha": "72cff840", "message": "feat(order/symm_diff): The symmetric difference is involutive (#14959)\n`a ∆ (a ∆ b) = b` and `b ∆ a ∆ a = b`.", "changes": [{"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["mod", "theorem", "symm_diff_left_inj", []], ["add", "theorem", "symm_diff_left_injective", []], ["add", "theorem", "symm_diff_left_involutive", []], ["add", "theorem", "symm_diff_left_surjective", []], ["mod", "theorem", "symm_diff_right_inj", []], ["add", "theorem", "symm_diff_right_injective", []], ["add", "theorem", "symm_diff_right_involutive", []], ["add", "theorem", "symm_diff_right_surjective", []], ["add", "theorem", "symm_diff_symm_diff_cancel_left", []], ["add", "theorem", "symm_diff_symm_diff_cancel_right", []], ["del", "theorem", "symm_diff_symm_diff_self", []]]}]}, {"timestamp": 1656202343, "sha": "b8c3e61b", "message": "refactor(*): Use `finset.Iix`/`finset.Ixi` (#14448)\nNow that `finset.Iix`/`finset.Ixi` work for empty types, there is no need for `univ.filter (λ j, j < i)` and similar.", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "theorem", "prod_Ioi_succ", ["fin"]], ["add", "theorem", "prod_Ioi_zero", ["fin"]], ["del", "theorem", "prod_filter_succ_lt", ["fin"]], ["del", "theorem", "prod_filter_zero_lt", ["fin"]]]}, {"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["del", "theorem", "card_filter_ge", ["fin"]], ["del", "theorem", "card_filter_gt", ["fin"]], ["del", "theorem", "card_filter_le", ["fin"]], ["del", "theorem", "card_filter_le_le", ["fin"]], ["del", "theorem", "card_filter_le_lt", ["fin"]], ["del", "theorem", "card_filter_lt", ["fin"]], ["del", "theorem", "card_filter_lt_le", ["fin"]], ["del", "theorem", "card_filter_lt_lt", ["fin"]], ["del", "theorem", "prod_filter_lt_mul_neg_eq_prod_off_diag", ["fin"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "disjoint_left", ["finset"]], ["mod", "theorem", "disjoint_right", ["finset"]]]}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": []}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Ioi_disj_union_Iio", ["finset"]], ["add", "theorem", "disjoint_Ioi_Iio", ["finset"]], ["add", "theorem", "prod_prod_Ioi_mul_eq_prod_prod_off_diag", ["finset"]]]}, {"oldPath": "src/data/fintype/fin.lean", "newPath": "src/data/fintype/fin.lean", "changes": [["add", "theorem", "Ioi_succ", ["fin"]], ["add", "theorem", "Ioi_zero_eq_map", ["fin"]], ["del", "theorem", "univ_filter_succ_lt", ["fin"]], ["del", "theorem", "univ_filter_zero_lt", ["fin"]]]}, {"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1656191567, "sha": "7ee73e4a", "message": "feat(data/fintype/basic): Constructing an equivalence from a left inverse (#14816)\nWhen `f : α → β`, `g : β → α` are inverses one way and `card α ≤ card β`, then they form an equivalence.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "def", "of_left_inverse_of_card_le", ["equiv"]], ["add", "def", "of_right_inverse_of_card_le", ["equiv"]], ["del", "theorem", "left_inverse_of_right_inverse_of_card_le", ["fintype"]], ["del", "theorem", "right_inverse_of_left_inverse_of_card_le", ["fintype"]], ["add", "theorem", "right_inverse_of_card_le", ["function", "left_inverse"]], ["add", "theorem", "left_inverse_of_card_le", ["function", "right_inverse"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "left_inverse_of_injective", ["function", "right_inverse"]], ["add", "theorem", "left_inverse_of_surjective", ["function", "right_inverse"]]]}]}, {"timestamp": 1656191566, "sha": "88127521", "message": "feat(algebra/field/basic): Semifields (#14683)\nDefine division semirings and semifields.", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["mod", "theorem", "add_div'", []], ["mod", "theorem", "add_div", []], ["mod", "theorem", "add_div_eq_mul_add_div", []], ["mod", "theorem", "div_add'", []], ["mod", "theorem", "div_add_div", []], ["mod", "theorem", "div_add_div_same", []], ["mod", "theorem", "div_add_one", []], ["mod", "theorem", "div_add_same", []], ["mod", "theorem", "to_is_field", ["field"]], ["mod", "theorem", "inv_add_inv", []], ["mod", "theorem", "nontrivial", ["is_field"]], ["mod", "structure", "is_field", []], ["mod", "theorem", "not_is_field_of_subsingleton", []], ["mod", "theorem", "one_add_div", []], ["mod", "theorem", "one_div_add_one_div", []], ["mod", "theorem", "map_div", ["ring_hom"]], ["mod", "theorem", "map_eq_zero", ["ring_hom"]], ["mod", "theorem", "map_inv", ["ring_hom"]], ["mod", "theorem", "map_ne_zero", ["ring_hom"]], ["mod", "theorem", "map_units_inv", ["ring_hom"]], ["mod", "theorem", "same_add_div", []], ["add", "theorem", "to_is_field", ["semifield"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": [["mod", "theorem", "maximal_ideal_iff_is_field_quotient", ["ideal", "quotient"]]]}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": []}]}, {"timestamp": 1656187331, "sha": "f9571f0f", "message": "feat(analysis/normed*): add instances about balls and spheres (#14808)\nNon-bc change: `has_inv.inv` on the unit circle is now defined using `has_inv.inv` instead of complex conjugation.", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["add", "def", "of_conj_div_self", ["circle"]], ["mod", "def", "to_units", ["circle"]], ["mod", "def", "circle", []], ["mod", "theorem", "coe_inv_circle", []], ["mod", "theorem", "coe_inv_circle_eq_conj", []]]}, {"oldPath": null, "newPath": "src/analysis/normed/field/unit_ball.lean", "changes": [["add", "def", "unit_closed_ball", ["submonoid"]], ["add", "def", "unit_sphere", ["submonoid"]], ["add", "def", "unit_ball", ["subsemigroup"]], ["add", "def", "unit_closed_ball", ["subsemigroup"]], ["add", "def", "unit_sphere_to_units", []]]}, {"oldPath": null, "newPath": "src/analysis/normed/group/ball_sphere.lean", "changes": [["add", "theorem", "coe_neg_ball", []], ["add", "theorem", "coe_neg_closed_ball", []], ["add", "theorem", "coe_neg_sphere", []]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["del", "theorem", "coe_neg_sphere", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/ball_action.lean", "changes": [["add", "theorem", "ne_neg_of_mem_sphere", []], ["add", "theorem", "ne_neg_of_mem_unit_sphere", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "ne_neg_of_mem_sphere", []], ["del", "theorem", "ne_neg_of_mem_unit_sphere", []]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1656165430, "sha": "6f923bd9", "message": "chore(*): golf (#14939)\nSome golfs I made while working on a large refactor.", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1656143858, "sha": "07c83c81", "message": "feat(linear_algebra/clifford_algebra/of_alternating): extend alternating maps to the exterior algebra (#14803)", "changes": [{"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/exterior_algebra/of_alternating.lean", "changes": [["add", "theorem", "lhom_ext", ["exterior_algebra"]], ["add", "def", "lift_alternating", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_algebra_map", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_apply_ι_multi", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_comp", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_comp_ι_multi", ["exterior_algebra"]], ["add", "def", "lift_alternating_equiv", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_one", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_ι", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_ι_mul", ["exterior_algebra"]], ["add", "theorem", "lift_alternating_ι_multi", ["exterior_algebra"]]]}]}, {"timestamp": 1656107108, "sha": "4fd263ba", "message": "feat(representation_theory/character): characters of representations (#14453)", "changes": [{"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": [["add", "theorem", "conj_eq_conj", ["FinVect", "iso"]], ["add", "def", "iso_to_linear_equiv", ["FinVect"]], ["add", "def", "to_FinVect_iso", ["linear_equiv"]]]}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["del", "theorem", "char_conj", ["representation"]], ["del", "theorem", "char_mul_comm", ["representation"]], ["del", "theorem", "char_one", ["representation"]], ["mod", "theorem", "dual_apply", ["representation"]], ["add", "theorem", "dual_tensor_hom_comm", ["representation"]]]}, {"oldPath": null, "newPath": "src/representation_theory/character.lean", "changes": [["add", "theorem", "char_conj", ["fdRep"]], ["add", "theorem", "char_dual", ["fdRep"]], ["add", "theorem", "char_iso", ["fdRep"]], ["add", "theorem", "char_lin_hom", ["fdRep"]], ["add", "theorem", "char_mul_comm", ["fdRep"]], ["add", "theorem", "char_one", ["fdRep"]], ["add", "theorem", "char_tensor", ["fdRep"]], ["add", "def", "character", ["fdRep"]]]}, {"oldPath": "src/representation_theory/fdRep.lean", "newPath": "src/representation_theory/fdRep.lean", "changes": [["add", "theorem", "dual_tensor_iso_lin_hom_hom_hom", ["fdRep"]], ["add", "theorem", "conj_ρ", ["fdRep", "iso"]], ["add", "def", "iso_to_linear_equiv", ["fdRep"]], ["add", "def", "ρ", ["fdRep"]]]}]}, {"timestamp": 1656098650, "sha": "8bf85d74", "message": "feat(algebra/indicator_function): add an apply version of `mul_indicator_finset_bUnion` (#14919)", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "mul_indicator_finset_bUnion_apply", ["set"]]]}]}, {"timestamp": 1656098649, "sha": "f94a64f7", "message": "feat(probability/martingale): add some lemmas for submartingales (#14904)", "changes": [{"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["add", "theorem", "condexp_sub_nonneg", ["measure_theory", "submartingale"]], ["add", "theorem", "submartingale_iff_condexp_sub_nonneg", ["measure_theory"]], ["add", "theorem", "submartingale_nat", ["measure_theory"]], ["add", "theorem", "submartingale_of_condexp_sub_nonneg", ["measure_theory"]], ["add", "theorem", "submartingale_of_condexp_sub_nonneg_nat", ["measure_theory"]], ["add", "theorem", "submartingale_of_set_integral_le_succ", ["measure_theory"]]]}]}, {"timestamp": 1656098648, "sha": "40fa2d84", "message": "feat(topology/metric_space): a countably generated uniformity is metrizable (#14052)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_eq_zero_iff'", []]]}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": [["add", "theorem", "Sup_mem", ["nat"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/metrizable_uniformity.lean", "changes": [["add", "theorem", "dist_of_prenndist", ["pseudo_metric_space"]], ["add", "theorem", "dist_of_prenndist_le", ["pseudo_metric_space"]], ["add", "theorem", "le_two_mul_dist_of_prenndist", ["pseudo_metric_space"]], ["add", "theorem", "metrizable_space", ["uniform_space"]]]}]}, {"timestamp": 1656090945, "sha": "fe322e12", "message": "refactor(algebra/order/monoid): use typeclasses instead of lemmas (#14848)\nUse `covariant_class`/`contravariant_class` instead of type-specific `mul_le_mul_left` etc lemmas. Also, rewrite some proofs to use API about inequalities on `with_top`/`with_bot` instead of the exact form of the current definition.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "exists_one_lt_mul_of_lt", []], ["del", "theorem", "exists_pos_mul_of_lt", []], ["del", "theorem", "lt_of_mul_lt_mul_left", ["with_zero"]], ["del", "theorem", "mul_le_mul_left", ["with_zero"]], ["add", "theorem", "zero_eq_bot", ["with_zero"]], ["mod", "theorem", "zero_le", ["with_zero"]]]}]}, {"timestamp": 1656084380, "sha": "0e5f278d", "message": "feat(linear_algebra/{multilinear, alternating}): add `cod_restrict` and lemmas (#14927)", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "def", "cod_restrict", ["alternating_map"]], ["add", "theorem", "comp_alternating_map_cod_restrict", ["linear_map"]], ["add", "theorem", "subtype_comp_alternating_map_cod_restrict", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "theorem", "comp_multilinear_map_cod_restrict", ["linear_map"]], ["add", "theorem", "subtype_comp_multilinear_map_cod_restrict", ["linear_map"]], ["add", "def", "cod_restrict", ["multilinear_map"]]]}]}, {"timestamp": 1656084379, "sha": "3e326fcb", "message": "feat(data/finite/basic): add missing instances (#14913)\n* Add `finite` instances for `prod`, `pprod`, `sigma`, and `psigma`.\n* Don't depend on `classical.choice` in `finite_iff_nonempty_fintype`.\n* Move `not_finite_iff_infinite` up, use it to golf some proofs.", "changes": [{"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": []}]}, {"timestamp": 1656084377, "sha": "363bbd22", "message": "chore(topology/basic): golf a proof (#14911)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_closure_of_frequently_of_tendsto", []]]}]}, {"timestamp": 1656084376, "sha": "475cf379", "message": "refactor(data/polynomial): extract/add lemmas and golf (#14888)\n+ Extract lemmas `roots_multiset_prod_X_sub_C`, `nat_degree_multiset_prod_X_sub_C_eq_card`, `monic_prod_multiset_X_sub_C` from the proof of `C_leading_coeff_mul_prod_multiset_X_sub_C` in *ring_division.lean*.\n+ Add the lemma `exists_prod_multiset_X_sub_C_mul` in *ring_division.lean* and `roots_ne_zero_of_splits` in *splitting_field.lean* and use them to golf `nat_degree_eq_card_roots` The proof of the latter originally depends on `eq_prod_roots_of_splits`, but now the dependency reversed, with `nat_degree_eq_card_roots` now used to golf `eq_prod_roots_of_splits` (and `roots_map` as well).\n+ Move `prod_multiset_root_eq_finset_root` and `prod_multiset_X_sub_C_dvd` from *field_division.lean* to *ring_division.lean* and golf the proof of the latter, generalizing `field` to `is_domain`.\n+ Remove redundant imports and the lemma `exists_multiset_of_splits`, because it is just one direction of `splits_iff_exists_multiset`, and it follows trivially from `eq_prod_roots_of_splits`. It couldn't be removed before this PR because `roots_map` and `eq_prod_roots_of_splits` depended on it.\n+ Golf `splits_of_exists_multiset` (independent of other changes).", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["del", "theorem", "prod_multiset_X_sub_C_dvd", ["polynomial"]], ["del", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "count_map_roots", ["polynomial"]], ["add", "theorem", "exists_prod_multiset_X_sub_C_mul", ["polynomial"]], ["add", "theorem", "monic_prod_multiset_X_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_multiset_prod_X_sub_C_eq_card", ["polynomial"]], ["add", "theorem", "prod_multiset_X_sub_C_dvd", ["polynomial"]], ["add", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]], ["add", "theorem", "roots_multiset_prod_X_sub_C", ["polynomial"]]]}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "eq_prod_roots_of_splits", ["polynomial"]], ["del", "theorem", "exists_multiset_of_splits", ["polynomial"]], ["add", "theorem", "roots_ne_zero_of_splits", ["polynomial"]]]}]}, {"timestamp": 1656084375, "sha": "dabb0c61", "message": "feat(probability/independence): equivalent ways to check indep_fun (#14814)\nProve:\n- `indep_fun f g μ ↔ ∀ s t, measurable_set s → measurable_set t → μ (f ⁻¹' s ∩ g ⁻¹' t) = μ (f ⁻¹' s) * μ (g ⁻¹' t)`,\n- `indep_fun f g μ ↔ ∀ s t, measurable_set s → measurable_set t → indep_set (f ⁻¹' s) (g ⁻¹' t) μ`.", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "comap_eq_generate_from", ["measurable_space"]]]}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["add", "theorem", "indep_fun_iff_indep_set_preimage", ["probability_theory"]], ["add", "theorem", "indep_fun_iff_measure_inter_preimage_eq_mul", ["probability_theory"]]]}]}, {"timestamp": 1656084374, "sha": "7c2ad75e", "message": "feat(field_theory.intermediate_field): intermediate_field.inclusion (#12596)", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_inclusion", ["intermediate_field"]], ["add", "def", "inclusion", ["intermediate_field"]], ["add", "theorem", "inclusion_inclusion", ["intermediate_field"]], ["add", "theorem", "inclusion_injective", ["intermediate_field"]], ["add", "theorem", "inclusion_self", ["intermediate_field"]]]}]}, {"timestamp": 1656076996, "sha": "e420232b", "message": "feat(data/int/basic): add a better `has_reflect int` instance (#14906)\nThis closes a todo comment in `number_theory.lucas_lehmer`.\nThis also merges `rat.has_reflect` with `rat.reflect` to match `nat.reflect`.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "test/rat.lean", "newPath": "test/rat.lean", "changes": []}]}, {"timestamp": 1656076995, "sha": "f05c49f6", "message": "feat(meta/univs): Add a reflect_name tactic, make reflected instances universe polymorphic (#14766)\nThe existing `list.reflect` instance only works for `Type 0`, this version works for `Type u` providing `u` is known.", "changes": [{"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/meta/univs.lean", "changes": []}, {"oldPath": "test/vec_notation.lean", "newPath": "test/vec_notation.lean", "changes": []}]}, {"timestamp": 1656069340, "sha": "8187142b", "message": "feat(data/finset/pointwise): `s • t` is the union of the `a • t` (#14696)\nand a few other results leading to it. Also tag `set.coe_bUnion` with `norm_cast` and rename `finset.image_mul_prod`/`finset.add_image_prod` to `finset.image_mul_product`/`finset.image_add_product`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "coe_bUnion", ["finset"]]]}, {"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["add", "theorem", "bUnion_image_left", ["finset"]], ["add", "theorem", "bUnion_image_right", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "bUnion_smul_finset", ["finset"]], ["del", "theorem", "image_mul_prod", ["finset"]], ["add", "theorem", "image_mul_product", ["finset"]], ["add", "theorem", "pairwise_disjoint_smul_iff", ["finset"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "prod_eq_bUnion_left", ["set"]], ["add", "theorem", "prod_eq_bUnion_right", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "pairwise_disjoint_image_left_iff", ["set"]], ["add", "theorem", "pairwise_disjoint_image_right_iff", ["set"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "bUnion_smul_set", ["set"]], ["add", "theorem", "pairwise_disjoint_smul_iff", ["set"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "image2_mk_eq_prod", ["set"]]]}]}, {"timestamp": 1656069339, "sha": "6d00cc21", "message": "feat(ring_theory/trace): Add `trace_eq_sum_automorphisms`, `norm_eq_prod_automorphisms`, `normal.alg_hom_equiv_aut` (#14523)", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "def", "alg_hom_equiv_aut", ["normal"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["add", "theorem", "norm_eq_prod_automorphisms", ["algebra"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "trace_eq_sum_automorphisms", []]]}]}, {"timestamp": 1656064589, "sha": "efe794c3", "message": "chore(order/filter): turn `tendsto_id'` into an `iff` lemma (#14791)", "changes": [{"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "tendsto_id'", ["filter"]], ["mod", "theorem", "tendsto_id", ["filter"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "continuous_id_iff_le", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1656062169, "sha": "6cefaf4b", "message": "feat(measure_theory/function/conditional_expectation): conditional expectation w.r.t. the restriction of a measure to a set (#14751)\nWe prove `(μ.restrict s)[f | m] =ᵐ[μ.restrict s] μ[f | m]`.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "theorem", "condexp_indicator_aux", ["measure_theory"]], ["add", "theorem", "condexp_of_ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "condexp_restrict_ae_eq_restrict", ["measure_theory"]]]}]}, {"timestamp": 1656034151, "sha": "ac2e9dbf", "message": "feat(data/real/{e,}nnreal): add some order isomorphisms (#14900)\n* If `a` is a nonnegative real number, then\n - `set.Icc (0 : ℝ) (a : ℝ)` is order isomorphic to `set.Iic a`;\n - `set.Iic (a : ℝ≥0∞)` is order isomorphic to `set.Iic a`;\n* Also, `ℝ≥0∞` is order isomorphic both to `Iic (1 : ℝ≥0∞)` and to the unit interval in `ℝ`.\n* Use the latter fact to golf `ennreal.second_countable_topology`.\n* Golf `ennreal.has_continuous_inv` using `order_iso.continuous`.\n* Improve definitional equalities for `equiv.subtype_subtype_equiv_subtype_exists`, `equiv.subtype_subtype_equiv_subtype_inter`, `equiv.subtype_subtype_equiv_subtype`, `equiv.set.sep`, use `simps`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "inv_three_add_inv_three", ["ennreal"]], ["add", "def", "order_iso_Iic_coe", ["ennreal"]], ["add", "theorem", "order_iso_Iic_coe_symm_apply_coe", ["ennreal"]], ["add", "def", "order_iso_Iic_one_birational", ["ennreal"]], ["add", "theorem", "order_iso_Iic_one_birational_symm_apply", ["ennreal"]], ["add", "def", "order_iso_unit_interval_birational", ["ennreal"]], ["add", "theorem", "order_iso_unit_interval_birational_apply_coe", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "def", "order_iso_Icc_zero_coe", ["nnreal"]], ["add", "theorem", "order_iso_Icc_zero_coe_symm_apply_coe", ["nnreal"]]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["mod", "def", "subtype_subtype_equiv_subtype", ["equiv"]], ["del", "theorem", "subtype_subtype_equiv_subtype_apply", ["equiv"]], ["del", "theorem", "subtype_subtype_equiv_subtype_exists_apply", ["equiv"]], ["mod", "def", "subtype_subtype_equiv_subtype_inter", ["equiv"]], ["del", "theorem", "subtype_subtype_equiv_subtype_inter_apply", ["equiv"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1656034150, "sha": "cb948930", "message": "refactor(order/complete_lattice): `Sup` lemmas before `Inf` lemmas (#14868)\nThroughout the file, we make sure that `Sup` theorems always appear immediately before their `Inf` counterparts. This ensures consistency, and makes it much easier to golf theorems or detect missing API.\nWe choose to put `Sup` before `Inf` rather than the other way around, since this seems to minimize the amount of things that need to be moved around, and it matches the order that we define the two operations.\nWe also golf a few proofs throughout, and add some missing corresponding theorems, namely:\n- `infi_extend_top`\n- `infi_supr_ge_nat_add`\n- `unary_relation_Inf_iff`\n- `binary_relation_Inf_iff`", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["mod", "theorem", "Inf_eq_top", []], ["mod", "theorem", "Inf_image", []], ["mod", "theorem", "Sup_apply", []], ["mod", "theorem", "Sup_eq_bot", []], ["mod", "theorem", "Sup_eq_of_forall_le_of_forall_lt_exists_gt", []], ["mod", "theorem", "Sup_eq_top", []], ["mod", "theorem", "Sup_image", []], ["add", "theorem", "binary_relation_Inf_iff", []], ["mod", "theorem", "eq_singleton_top_of_Inf_eq_top_of_nonempty", []], ["mod", "theorem", "inf_infi", []], ["mod", "theorem", "infi_and", []], ["mod", "theorem", "infi_const", []], ["mod", "theorem", "infi_emptyset", []], ["mod", "theorem", "infi_eq_bot", []], ["mod", "theorem", "infi_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["mod", "theorem", "infi_exists", []], ["add", "theorem", "infi_extend_top", []], ["mod", "theorem", "infi_image", []], ["mod", "theorem", "infi_inf", []], ["mod", "theorem", "infi_inf_eq", []], ["mod", "theorem", "infi_le_infi_of_subset", []], ["mod", "theorem", "infi_option", []], ["mod", "theorem", "infi_prod", []], ["mod", "theorem", "infi_range", []], ["mod", "theorem", "infi_sigma", []], ["mod", "theorem", "infi_split", []], ["mod", "theorem", "infi_split_single", []], ["mod", "theorem", "infi_subtype''", []], ["mod", "theorem", "infi_subtype", []], ["mod", "theorem", "infi_sum", []], ["add", "theorem", "infi_supr_ge_nat_add", []], ["mod", "theorem", "infi_top", []], ["mod", "theorem", "infi_union", []], ["mod", "theorem", "infi_univ", []], ["mod", "theorem", "le_infi_const", []], ["mod", "theorem", "sup_supr", []], ["mod", "theorem", "supr_and", []], ["mod", "theorem", "supr_bot", []], ["mod", "theorem", "supr_const", []], ["mod", "theorem", "supr_const_le", []], ["mod", "theorem", "supr_emptyset", []], ["mod", "theorem", "supr_eq_top", []], ["mod", "theorem", "supr_exists", []], ["mod", "theorem", "supr_le_supr_of_subset", []], ["mod", "theorem", "supr_option", []], ["mod", "theorem", "supr_prod", []], ["mod", "theorem", "supr_sigma", []], ["mod", "theorem", "supr_split_single", []], ["mod", "theorem", "supr_subtype''", []], ["mod", "theorem", "supr_subtype'", []], ["mod", "theorem", "supr_subtype", []], ["mod", "theorem", "supr_sum", []], ["mod", "theorem", "supr_sup", []], ["mod", "theorem", "supr_sup_eq", []], ["mod", "theorem", "supr_univ", []], ["add", "theorem", "unary_relation_Inf_iff", []]]}]}, {"timestamp": 1656034149, "sha": "649ca66b", "message": "chore(*): Disparate generalizations to division monoids (#14686)\nThe leftover changes from the introduction of `division_monoid`.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": []}, {"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": [["mod", "theorem", "inv_inv", ["commute"]], ["mod", "theorem", "inv_inv_iff", ["commute"]]]}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "def", "div_monoid_hom", []]]}, {"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": [["mod", "theorem", "inv_inv_symm", ["semiconj_by"]], ["mod", "theorem", "inv_inv_symm_iff", ["semiconj_by"]]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "inv_inv₀", ["commute"]], ["del", "theorem", "coe_inv'", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "coe_zpow₀", ["units"]]]}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["mod", "def", "arrow_action", []]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/subsemigroup/center.lean", "newPath": "src/group_theory/subsemigroup/center.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "newPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/as_subring.lean", "newPath": "src/ring_theory/localization/as_subring.lean", "changes": []}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": []}]}, {"timestamp": 1656026862, "sha": "56185bdd", "message": "feat(data/finset): add some lemmas about `finset.disj_union` (#14910)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_disj_union", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "forall_mem_map", ["finset"]], ["add", "theorem", "map_disj_union'", ["finset"]], ["add", "theorem", "map_disj_union", ["finset"]], ["add", "theorem", "map_disj_union_aux", ["finset"]]]}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": [["add", "theorem", "fold_disj_union", ["finset"]]]}]}, {"timestamp": 1656015397, "sha": "198cb64d", "message": "refactor(ring_theory): generalize basic API of `ring_hom` to `ring_hom_class` (#14756)\nThis PR generalizes part of the basic API of ring homs to `ring_hom_class`. This notably includes things like `ring_hom.ker`, `ideal.map` and `ideal.comap`. I left the namespaces unchanged, for example `ring_hom.ker` remains the same even though it is now defined for any `ring_hom_class` morphism; this way dot notation still (mostly) works for actual ring homs.", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "apply_coe_mem_map", ["ideal"]], ["mod", "theorem", "comap_le_map_of_inv_on", ["ideal"]], ["mod", "theorem", "comap_le_map_of_inverse", ["ideal"]], ["mod", "theorem", "ker_le_comap", ["ideal"]], ["mod", "theorem", "map_Inf", ["ideal"]], ["mod", "theorem", "map_eq_bot_iff_le_ker", ["ideal"]], ["mod", "theorem", "map_is_prime_of_equiv", ["ideal"]], ["mod", "theorem", "map_is_prime_of_surjective", ["ideal"]], ["mod", "theorem", "map_le_comap_of_inv_on", ["ideal"]], ["mod", "theorem", "map_le_comap_of_inverse", ["ideal"]], ["mod", "theorem", "map_span", ["ideal"]], ["mod", "theorem", "mem_map_of_mem", ["ideal"]], ["mod", "theorem", "comap_ker", ["ring_hom"]], ["mod", "theorem", "ker_coe_equiv", ["ring_hom"]], ["mod", "theorem", "ker_eq_comap_bot", ["ring_hom"]], ["add", "theorem", "ker_equiv", ["ring_hom"]], ["mod", "theorem", "ker_is_maximal_of_surjective", ["ring_hom"]], ["mod", "theorem", "ker_is_prime", ["ring_hom"]], ["mod", "theorem", "ker_ne_top", ["ring_hom"]], ["mod", "theorem", "not_one_mem_ker", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/prod.lean", "newPath": "src/ring_theory/ideal/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/localization_localization.lean", "newPath": "src/ring_theory/localization/localization_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "theorem", "ker_map", ["mv_polynomial"]]]}]}, {"timestamp": 1656001390, "sha": "44d3fc00", "message": "chore(data/nat,int): move field-specific lemmas about cast (#14890)\nI want to refer to the rational numbers in the definition of a field, meaning we can't have `algebra.field.basic` in the transitive imports of `data.rat.basic`.\nThis is a step in rearranging those imports: remove the definition of a field from the dependencies of the casts `ℕ → α` and `ℤ → α`, where `α` is a (semi)ring.", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "cast_le_pow_div_sub", ["nat"]], ["add", "theorem", "cast_le_pow_sub_div_sub", ["nat"]], ["add", "theorem", "pow_minus_two_nonneg", []]]}, {"oldPath": "src/algebra/order/field_pow.lean", "newPath": null, "changes": [["del", "theorem", "cast_le_pow_div_sub", ["nat"]], ["del", "theorem", "cast_le_pow_sub_div_sub", ["nat"]], ["del", "theorem", "pow_minus_two_nonneg", []]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["del", "theorem", "cast_div", ["int"]]]}, {"oldPath": null, "newPath": "src/data/int/cast_field.lean", "changes": [["add", "theorem", "cast_div", ["int"]]]}, {"oldPath": "src/data/int/char_zero.lean", "newPath": "src/data/int/char_zero.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["del", "theorem", "cast_div", ["nat"]], ["del", "theorem", "cast_div_le", ["nat"]], ["del", "theorem", "inv_pos_of_nat", ["nat"]], ["del", "theorem", "one_div_le_one_div", ["nat"]], ["del", "theorem", "one_div_lt_one_div", ["nat"]], ["del", "theorem", "one_div_pos_of_nat", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/cast_field.lean", "changes": [["add", "theorem", "cast_div", ["nat"]], ["add", "theorem", "cast_div_le", ["nat"]], ["add", "theorem", "inv_pos_of_nat", ["nat"]], ["add", "theorem", "one_div_le_one_div", ["nat"]], ["add", "theorem", "one_div_lt_one_div", ["nat"]], ["add", "theorem", "one_div_pos_of_nat", ["nat"]]]}, {"oldPath": "src/data/nat/choose/bounds.lean", "newPath": "src/data/nat/choose/bounds.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}]}, {"timestamp": 1656001388, "sha": "c3e3d1aa", "message": "feat(data/set): replace `set_coe.can_lift` by `subtype.can_lift` (#14792)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}]}, {"timestamp": 1656001387, "sha": "4de20c56", "message": "feat(analysis/../log): log_nat_eq_sum_factorization (#14782)", "changes": [{"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "log_nat_eq_sum_factorization", ["real"]]]}]}, {"timestamp": 1656001386, "sha": "c2fcf9f1", "message": "feat(data/polynomial/erase_lead): Characterizations of polynomials of small support (#14500)\nThis PR adds iff-lemmas `card_support_eq_one`, `card_support_eq_two`, and `card_support_eq_three`. These will be useful for irreducibility of x^n-x-1.", "changes": [{"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "card_support_eq_one", ["polynomial"]], ["add", "theorem", "card_support_eq_three", ["polynomial"]], ["add", "theorem", "card_support_eq_two", ["polynomial"]]]}]}, {"timestamp": 1655993406, "sha": "ef24aced", "message": "feat(order/hom/basic): some lemmas about order homs and equivs (#14872)\nA few lemmas from #11053, which I have seperated from the original PR following @riccardobrasca's suggestion.", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "coe_eq", ["order_hom"]], ["add", "def", "of_hom_inv", ["order_iso"]]]}]}, {"timestamp": 1655993405, "sha": "dd2e7add", "message": "feat(analysis/convex/strict_convex_space): isometries of strictly convex spaces are affine (#14837)\nAdd the result that isometries of (affine spaces for) real normed\nspaces with strictly convex codomain are affine isometries. In\nparticular, this applies to isometries of Euclidean spaces (we already\nhave the instance that real inner product spaces are uniformly convex\nand thus strictly convex). Strict convexity means the surjectivity\nrequirement of Mazur-Ulam can be avoided.", "changes": [{"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": [["add", "theorem", "eq_line_map_of_dist_eq_mul_of_dist_eq_mul", []], ["add", "theorem", "eq_midpoint_of_dist_eq_half", []], ["add", "theorem", "affine_isometry_of_strict_convex_space_apply", ["isometry"]], ["add", "theorem", "coe_affine_isometry_of_strict_convex_space", ["isometry"]]]}, {"oldPath": "src/analysis/normed/group/add_torsor.lean", "newPath": "src/analysis/normed/group/add_torsor.lean", "changes": [["add", "theorem", "dist_eq_norm_vsub'", []]]}]}, {"timestamp": 1655993404, "sha": "966bb245", "message": "feat(group_theory/finite_abelian): Structure of finite abelian groups (#14736)\nAny finitely generated abelian group is the product of a power of `ℤ` and a direct sum of some `zmod (p i ^ e i)` for some prime powers `p i ^ e i`.\nAny finite abelian group is a direct sum of some `zmod (p i ^ e i)` for some prime powers `p i ^ e i`.\n(TODO : prove uniqueness of this decomposition)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "def", "prod_congr", ["mul_equiv"]], ["add", "def", "prod_unique", ["mul_equiv"]], ["add", "def", "unique_prod", ["mul_equiv"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "def", "ring_equiv_congr", ["zmod"]]]}, {"oldPath": null, "newPath": "src/group_theory/finite_abelian.lean", "changes": [["add", "theorem", "equiv_direct_sum_zmod_of_fintype", ["add_comm_group"]], ["add", "theorem", "equiv_free_prod_direct_sum_zmod", ["add_comm_group"]]]}, {"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "prod_unique", ["equiv"]], ["add", "def", "unique_prod", ["equiv"]]]}]}, {"timestamp": 1655993403, "sha": "cff439d8", "message": "feat(analysis/seminorm): add add_group_seminorm (#14336)\nWe introduce `add_group_seminorm` and refactor `seminorm` to extend this new definition. This new `add_group_seminorm` structure will also be used in #14115 to define `ring_seminorm`.", "changes": [{"oldPath": "counterexamples/seminorm_lattice_not_distrib.lean", "newPath": "counterexamples/seminorm_lattice_not_distrib.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "add_apply", ["add_group_seminorm"]], ["add", "theorem", "add_comp", ["add_group_seminorm"]], ["add", "theorem", "coe_add", ["add_group_seminorm"]], ["add", "theorem", "coe_comp", ["add_group_seminorm"]], ["add", "theorem", "coe_smul", ["add_group_seminorm"]], ["add", "theorem", "coe_sup", ["add_group_seminorm"]], ["add", "theorem", "coe_zero", ["add_group_seminorm"]], ["add", "def", "comp", ["add_group_seminorm"]], ["add", "theorem", "comp_add_le", ["add_group_seminorm"]], ["add", "theorem", "comp_apply", ["add_group_seminorm"]], ["add", "theorem", "comp_comp", ["add_group_seminorm"]], ["add", "theorem", "comp_id", ["add_group_seminorm"]], ["add", "theorem", "comp_mono", ["add_group_seminorm"]], ["add", "theorem", "comp_zero", ["add_group_seminorm"]], ["add", "theorem", "ext", ["add_group_seminorm"]], ["add", "theorem", "inf_apply", ["add_group_seminorm"]], ["add", "theorem", "le_def", ["add_group_seminorm"]], ["add", "theorem", "le_insert'", ["add_group_seminorm"]], ["add", "theorem", "le_insert", ["add_group_seminorm"]], ["add", "theorem", "lt_def", ["add_group_seminorm"]], ["add", "theorem", "smul_apply", ["add_group_seminorm"]], ["add", "theorem", "smul_sup", ["add_group_seminorm"]], ["add", "theorem", "sub_rev", ["add_group_seminorm"]], ["add", "theorem", "sup_apply", ["add_group_seminorm"]], ["add", "theorem", "zero_apply", ["add_group_seminorm"]], ["add", "theorem", "zero_comp", ["add_group_seminorm"]], ["add", "structure", "add_group_seminorm", []], ["add", "theorem", "coe_norm_add_group_seminorm", []], ["add", "def", "norm_add_group_seminorm", []], ["mod", "def", "norm_seminorm", []], ["mod", "theorem", "ball_bot", ["seminorm"]], ["mod", "theorem", "ball_finset_sup", ["seminorm"]], ["add", "theorem", "comp_add_le", ["seminorm"]], ["del", "theorem", "comp_triangle", ["seminorm"]], ["del", "theorem", "nonneg", ["seminorm"]], ["add", "def", "of", ["seminorm"]], ["mod", "structure", "seminorm", []]]}]}, {"timestamp": 1655993401, "sha": "585a1bf3", "message": "feat(number_theory): define ramification index and inertia degree (#14332)\nWe define ramification index `ramification_idx` and inertia degree `inertia_deg` for `P : ideal S` over `p : ideal R` given a ring extension `f : R →+* S`. The literature generally assumes `p` is included in `P`, both are maximal, `R` is the ring of integers of a number field `K` and `S` is the integral closure of `R` in `L`, a finite separable extension of `K`; we relax these assumptions as much as is practical.", "changes": [{"oldPath": null, "newPath": "src/number_theory/ramification_inertia.lean", "changes": [["add", "theorem", "inertia_deg_algebra_map", ["ideal"]], ["add", "theorem", "inertia_deg_of_subsingleton", ["ideal"]], ["add", "theorem", "ramification_idx_eq_factors_count", ["ideal", "is_dedekind_domain"]], ["add", "theorem", "ramification_idx_eq_normalized_factors_count", ["ideal", "is_dedekind_domain"]], ["add", "theorem", "ramification_idx_ne_zero", ["ideal", "is_dedekind_domain"]], ["add", "theorem", "le_pow_of_le_ramification_idx", ["ideal"]], ["add", "theorem", "le_pow_ramification_idx", ["ideal"]], ["add", "theorem", "ramification_idx_bot", ["ideal"]], ["add", "theorem", "ramification_idx_eq_find", ["ideal"]], ["add", "theorem", "ramification_idx_eq_zero", ["ideal"]], ["add", "theorem", "ramification_idx_lt", ["ideal"]], ["add", "theorem", "ramification_idx_ne_zero", ["ideal"]], ["add", "theorem", "ramification_idx_of_not_le", ["ideal"]], ["add", "theorem", "ramification_idx_spec", ["ideal"]]]}]}, {"timestamp": 1655985490, "sha": "cc4b8e55", "message": "feat(data/sigma,data/ulift,logic/equiv): add missing lemmas (#14903)\nAdd lemmas and `equiv`s about `plift`, `psigma`, and `pprod`.", "changes": [{"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "«exists»", ["psigma"]], ["add", "theorem", "«forall»", ["psigma"]]]}, {"oldPath": "src/data/ulift.lean", "newPath": "src/data/ulift.lean", "changes": [["add", "theorem", "down_bijective", ["plift"]], ["add", "theorem", "down_surjective", ["plift"]], ["add", "theorem", "up_bijective", ["plift"]], ["add", "theorem", "up_inj", ["plift"]], ["add", "theorem", "up_injective", ["plift"]], ["add", "theorem", "up_surjective", ["plift"]], ["add", "theorem", "down_bijective", ["ulift"]], ["add", "theorem", "down_surjective", ["ulift"]], ["add", "theorem", "up_bijective", ["ulift"]], ["add", "theorem", "up_inj", ["ulift"]], ["add", "theorem", "up_injective", ["ulift"]], ["add", "theorem", "up_surjective", ["ulift"]]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "pprod_equiv_prod_plift", ["equiv"]], ["add", "def", "psigma_equiv_sigma_plift", ["equiv"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}]}, {"timestamp": 1655979945, "sha": "cf231995", "message": "chore(number_theory/lucas_lehmer): remove `has_to_pexpr` instances (#14905)\nThese instances are sort of out-of-place, and aren't really needed anyway.\nWe already use the more verbose ``%%`(n)`` notation elsewhere in mathlib, which as an operation makes more conceptual sense.\nUntil #14901 these two instances were just special cases of `has_reflect.has_to_pexpr`. While unlike that instance these two instances are not diamond-forming, they're unecessary special cases that make antiquoting harder to understand.", "changes": [{"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}]}, {"timestamp": 1655942153, "sha": "416edbd3", "message": "chore(ring_theory/polynomial/symmetric): golf proofs (#14866)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "finset_congr_to_embedding", ["equiv"]]]}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["add", "theorem", "powerset_len_map", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "map_univ_equiv", ["finset"]], ["add", "theorem", "map_univ_of_surjective", ["finset"]]]}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1655934156, "sha": "c45e5d58", "message": "fix(meta/expr): remove `has_reflect.has_to_pexpr` (#14901)\nThis instance (introduced in #3477) forms a diamond with the builtin `pexpr.has_to_pexpr`:\n```lean\nimport meta.expr\n#eval show tactic unit, from do\n let i1 : has_to_pexpr pexpr := pexpr.has_to_pexpr,\n let i2 : has_to_pexpr pexpr := has_reflect.has_to_pexpr,\n let e := ``(1),\n let p1 := @to_pexpr _ i1 e,\n let p2 := @to_pexpr _ i2 e,\n guard (p1 = p2) -- fails\n```\nThe consequence is that in cases where `bar` is not a `pexpr` or `expr` but a value to be reflected, ``` ``(foo %%bar) ``` now has to be written ``` ``(foo %%`(bar)) ```; a spelling already used in various existing files.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F-tactics/topic/Instance.20diamonds.20in.20has_to_pexpr/near/287083928)", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "test/norm_swap.lean", "newPath": "test/norm_swap.lean", "changes": []}]}, {"timestamp": 1655922684, "sha": "2a732ed5", "message": "chore(analysis/special_functions/log/basic): golf a proof (#14898)", "changes": [{"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": []}]}, {"timestamp": 1655922683, "sha": "23918a54", "message": "feat(order/filter/basic): add some lemmas about `eventually_le` (#14891)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "mul_le_mul", ["filter", "eventually_le"]], ["add", "theorem", "mul_nonneg", ["filter", "eventually_le"]], ["add", "theorem", "eventually_sub_nonneg", ["filter"]]]}]}, {"timestamp": 1655922681, "sha": "12e5f2e0", "message": "refactor(data/set/countable): make `set.countable` protected (#14886)\nI'm going to add `_root_.countable` typeclass, a data-free version of `encodable`.", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": [["mod", "theorem", "apply_countable", ["phillips_1940", "bounded_additive_measure"]], ["mod", "theorem", "countable_compl_spf", ["phillips_1940"]], ["mod", "theorem", "countable_spf_mem", ["phillips_1940"]]]}, {"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["mod", "theorem", "countable_preimage_exp", ["complex"]]]}, {"oldPath": "src/data/complex/cardinality.lean", "newPath": "src/data/complex/cardinality.lean", "changes": [["mod", "theorem", "not_countable_complex", []]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": [["mod", "theorem", "not_countable_real", ["cardinal"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "exists_surjective", ["set", "countable"]], ["mod", "theorem", "image2", ["set", "countable"]], ["mod", "theorem", "image", ["set", "countable"]], ["mod", "theorem", "insert", ["set", "countable"]], ["mod", "theorem", "mono", ["set", "countable"]], ["mod", "theorem", "preimage_of_inj_on", ["set", "countable"]], ["mod", "theorem", "sUnion", ["set", "countable"]], ["mod", "def", "to_encodable", ["set", "countable"]], ["del", "def", "countable", ["set"]], ["mod", "theorem", "countable_Union", ["set"]], ["mod", "theorem", "countable_Union_Prop", ["set"]], ["mod", "theorem", "countable_empty", ["set"]], ["mod", "theorem", "countable_encodable'", ["set"]], ["mod", "theorem", "countable_encodable", ["set"]], ["mod", "theorem", "countable_insert", ["set"]], ["mod", "theorem", "countable_is_bot", ["set"]], ["mod", "theorem", "countable_is_top", ["set"]], ["mod", "theorem", "countable_pi", ["set"]], ["mod", "theorem", "countable_range", ["set"]], ["mod", "theorem", "countable_set_of_finite_subset", ["set"]], ["mod", "theorem", "countable_singleton", ["set"]], ["mod", "theorem", "countable_union", ["set"]], ["mod", "def", "enumerate_countable", ["set"]], ["mod", "theorem", "countable", ["set", "finite"]], ["mod", "theorem", "subset_range_enumerate", ["set"]], ["mod", "theorem", "countable", ["set", "subsingleton"]]]}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "ae_measurable_binfi", []], ["mod", "theorem", "ae_measurable_bsupr", []], ["mod", "theorem", "measurable_binfi", []], ["mod", "theorem", "measurable_bsupr", []]]}, {"oldPath": "src/measure_theory/constructions/polish.lean", "newPath": "src/measure_theory/constructions/polish.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali_family.lean", "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": [["mod", "theorem", "index_countable", ["vitali_family", "fine_subfamily_on"]]]}, {"oldPath": "src/measure_theory/function/ae_measurable_order.lean", "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "lintegral_bUnion", ["measure_theory"]], ["mod", "theorem", "lintegral_bUnion₀", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "pi", ["measurable_set"]], ["mod", "theorem", "measurable_set_pi", []]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["mod", "theorem", "bInter", ["measurable_set"]], ["mod", "theorem", "bUnion", ["measurable_set"]], ["mod", "theorem", "sInter", ["measurable_set"]], ["mod", "theorem", "sUnion", ["measurable_set"]], ["mod", "theorem", "measurable_set", ["set", "countable"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "bsupr_measure_Iic", ["measure_theory"]], ["mod", "theorem", "ext_iff_of_bUnion_eq_univ", ["measure_theory", "measure"]], ["mod", "theorem", "ext_iff_of_sUnion_eq_univ", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_bUnion_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_sUnion_congr", ["measure_theory", "measure"]], ["mod", "theorem", "sigma_finite_of_countable", ["measure_theory", "measure"]], ["mod", "theorem", "measure_bUnion", ["measure_theory"]], ["mod", "theorem", "measure_bUnion_eq_supr", ["measure_theory"]], ["mod", "theorem", "measure_bUnion_to_measurable", ["measure_theory"]], ["mod", "theorem", "measure_bUnion₀", ["measure_theory"]], ["mod", "theorem", "measure_sUnion", ["measure_theory"]], ["mod", "theorem", "measure_sUnion₀", ["measure_theory"]], ["mod", "theorem", "tsum_measure_preimage_singleton", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["mod", "theorem", "ae_ball_iff", ["measure_theory"]], ["mod", "theorem", "measure_bUnion_le", ["measure_theory"]], ["mod", "theorem", "measure_bUnion_null_iff", ["measure_theory"]], ["mod", "theorem", "measure_sUnion_null_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/null_measurable.lean", "newPath": "src/measure_theory/measure/null_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["mod", "theorem", "bUnion_null_iff", ["measure_theory", "outer_measure"]], ["mod", "theorem", "sUnion_null_iff", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "countable_binfi_eq_infi_seq'", ["filter"]], ["mod", "theorem", "countable_binfi_eq_infi_seq", ["filter"]], ["mod", "theorem", "countable_binfi_principal_eq_seq_infi", ["filter"]], ["mod", "theorem", "is_countably_generated_binfi_principal", ["filter"]]]}, {"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": [["mod", "theorem", "countable_bInter_mem", []], ["mod", "theorem", "countable_sInter_mem", []], ["mod", "theorem", "eventually_countable_ball", []], ["mod", "theorem", "countable_bInter", ["eventually_eq"]], ["mod", "theorem", "countable_bUnion", ["eventually_eq"]], ["mod", "theorem", "countable_bInter", ["eventually_le"]], ["mod", "theorem", "countable_bUnion", ["eventually_le"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "mk_set_le_aleph_0", ["cardinal"]], ["mod", "theorem", "mk_subtype_le_aleph_0", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["mod", "theorem", "countable_iff_lt_aleph_one", ["cardinal"]]]}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": [["mod", "theorem", "is_Gδ_bInter", []], ["mod", "theorem", "is_Gδ_bInter_of_open", []], ["mod", "theorem", "is_Gδ_sInter", []], ["mod", "theorem", "is_Gδ_compl", ["set", "countable"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["mod", "theorem", "is_separable", ["set", "countable"]], ["mod", "theorem", "countable_countable_basis", ["topological_space"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["mod", "theorem", "dense_sInter_of_Gδ", []], ["mod", "theorem", "dense_sInter_of_open", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": [["mod", "theorem", "dimH_bUnion", []], ["mod", "theorem", "dimH_countable", []], ["mod", "theorem", "dimH_sUnion", []]]}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "of_countable", ["sigma_compact_space"]]]}]}, {"timestamp": 1655922680, "sha": "d8fc588d", "message": "refactor(data/finite/card): split from `basic` (#14885)", "changes": [{"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": [["del", "theorem", "card_eq", ["finite"]], ["del", "theorem", "card_eq_zero_iff", ["finite"]], ["del", "theorem", "card_le_of_embedding", ["finite"]], ["del", "theorem", "card_le_of_injective", ["finite"]], ["del", "theorem", "card_le_of_surjective", ["finite"]], ["del", "theorem", "card_le_one_iff_subsingleton", ["finite"]], ["del", "theorem", "card_option", ["finite"]], ["del", "theorem", "card_pos_iff", ["finite"]], ["del", "theorem", "card_subtype_le", ["finite"]], ["del", "theorem", "card_subtype_lt", ["finite"]], ["del", "theorem", "card_sum", ["finite"]], ["del", "def", "equiv_fin", ["finite"]], ["del", "def", "equiv_fin_of_card_eq", ["finite"]], ["del", "theorem", "one_lt_card", ["finite"]], ["del", "theorem", "one_lt_card_iff_nontrivial", ["finite"]], ["del", "theorem", "card_eq", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/finite/card.lean", "changes": [["add", "theorem", "card_eq", ["finite"]], ["add", "theorem", "card_eq_zero_iff", ["finite"]], ["add", "theorem", "card_le_of_embedding", ["finite"]], ["add", "theorem", "card_le_of_injective", ["finite"]], ["add", "theorem", "card_le_of_surjective", ["finite"]], ["add", "theorem", "card_le_one_iff_subsingleton", ["finite"]], ["add", "theorem", "card_option", ["finite"]], ["add", "theorem", "card_pos_iff", ["finite"]], ["add", "theorem", "card_subtype_le", ["finite"]], ["add", "theorem", "card_subtype_lt", ["finite"]], ["add", "theorem", "card_sum", ["finite"]], ["add", "def", "equiv_fin", ["finite"]], ["add", "def", "equiv_fin_of_card_eq", ["finite"]], ["add", "theorem", "one_lt_card", ["finite"]], ["add", "theorem", "one_lt_card_iff_nontrivial", ["finite"]], ["add", "theorem", "card_eq", ["nat"]]]}]}, {"timestamp": 1655922678, "sha": "c2719adf", "message": "feat(topology/basic): `sum.elim` of locally finite set families is locally finite (#14826)", "changes": [{"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": [["add", "theorem", "frequently_small_sets", ["filter"]], ["add", "theorem", "frequently_small_sets_mem", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "eventually_finite", ["locally_finite"]], ["add", "theorem", "preimage_continuous", ["locally_finite"]], ["add", "theorem", "sum_elim", ["locally_finite"]]]}]}, {"timestamp": 1655922677, "sha": "44bb35e5", "message": "feat({algebra/big_operators/basic,data/rat/cast}): Missing cast lemmas (#14824)\n`rat.cast_sum`, `rat.cast_prod` and `nat`, `int` lemmas about `multiset` and `list` big operators.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "cast_list_prod", ["int"]], ["add", "theorem", "cast_list_sum", ["int"]], ["add", "theorem", "cast_multiset_prod", ["int"]], ["add", "theorem", "cast_multiset_sum", ["int"]], ["mod", "theorem", "cast_prod", ["int"]], ["mod", "theorem", "cast_sum", ["int"]], ["add", "theorem", "cast_list_prod", ["nat"]], ["add", "theorem", "cast_list_sum", ["nat"]], ["add", "theorem", "cast_multiset_prod", ["nat"]], ["add", "theorem", "cast_multiset_sum", ["nat"]], ["mod", "theorem", "cast_prod", ["nat"]], ["mod", "theorem", "cast_sum", ["nat"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "cast_finsupp_prod", ["rat"]], ["add", "theorem", "cast_finsupp_sum", ["rat"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_div", ["rat"]], ["mod", "def", "cast_hom", ["rat"]], ["mod", "theorem", "cast_inv", ["rat"]], ["add", "theorem", "cast_list_prod", ["rat"]], ["add", "theorem", "cast_list_sum", ["rat"]], ["mod", "theorem", "cast_mk", ["rat"]], ["add", "theorem", "cast_multiset_prod", ["rat"]], ["add", "theorem", "cast_multiset_sum", ["rat"]], ["mod", "theorem", "cast_pow", ["rat"]], ["add", "theorem", "cast_prod", ["rat"]], ["add", "theorem", "cast_sum", ["rat"]], ["mod", "theorem", "coe_cast_hom", ["rat"]]]}]}, {"timestamp": 1655915345, "sha": "38642efc", "message": "chore(data/rat): rename `data.rat.basic` to `data.rat.defs` (#14895)\nThis is a preparatory step for PR #14893 that moves only the `field ℚ` instance (and its small set of dependencies) back to `data.rat.basic`; doing this in two moves should produce a neater set of diffs.", "changes": [{"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/EllipticCurve.lean", "newPath": "src/algebraic_geometry/EllipticCurve.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/defs.lean", "changes": []}, {"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "test/rewrite_search/rewrite_search.lean", "newPath": "test/rewrite_search/rewrite_search.lean", "changes": []}]}, {"timestamp": 1655915344, "sha": "f57c0cdc", "message": "chore(algebra/{group_power,order}): split off field lemmas (#14849)\nI want to refer to the rational numbers in the definition of a field, meaning we can't have `algebra.field.basic` in the transitive imports of `data.rat.basic`.\nThis is half of rearranging those imports: remove the definition of a field from the dependencies of basic lemmas about `nsmul`, `npow`, `zsmul` and `zpow`.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "cast_le_pow_div_sub", ["nat"]], ["del", "theorem", "cast_le_pow_sub_div_sub", ["nat"]]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "pow_minus_two_nonneg", []]]}, {"oldPath": null, "newPath": "src/algebra/order/field_pow.lean", "changes": [["add", "theorem", "cast_le_pow_div_sub", ["nat"]], ["add", "theorem", "cast_le_pow_sub_div_sub", ["nat"]], ["add", "theorem", "pow_minus_two_nonneg", []]]}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}]}, {"timestamp": 1655905611, "sha": "d939b0e6", "message": "feat(topology/vector_bundle/hom): define the vector bundle of continuous linear maps (#14541)\n* The changes in `topology/fiber_bundle` are not necessary for this PR, but perhaps nice additions\n* Co-authored by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com>\n* Co-authored by: Patrick Massot ", "changes": [{"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["add", "theorem", "symm_apply_apply", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "target_inter_preimage_symm_source_eq", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "trans_source", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "continuous_at_of_comp_left", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "continuous_at_of_comp_right", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "continuous_on_of_comp_right", ["topological_fiber_prebundle"]]]}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/vector_bundle/hom.lean", "changes": [["add", "def", "topological_vector_prebundle", ["bundle", "continuous_linear_map"]], ["add", "def", "continuous_linear_map", ["bundle"]], ["add", "def", "continuous_linear_map", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "continuous_linear_map_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "def", "continuous_linear_map_coord_change", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "continuous_linear_map_coord_change_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "continuous_linear_map_symm_apply'", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "continuous_linear_map_symm_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "continuous_on_continuous_linear_map_coord_change", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "base_set_continuous_linear_map", ["topological_vector_bundle", "trivialization"]], ["add", "def", "continuous_linear_map", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "continuous_linear_map_apply", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1655888306, "sha": "ad497685", "message": "feat(set_theory/surreal/basic): define map `surreal →+o game` (#14783)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "nat_to_game", ["surreal"]], ["add", "theorem", "one_to_game", ["surreal"]], ["add", "def", "to_game", ["surreal"]], ["add", "theorem", "zero_to_game", ["surreal"]]]}]}, {"timestamp": 1655871066, "sha": "61b837fb", "message": "feat(combinatorics/simple_graph/connectivity): Connectivity is a graph property (#14865)\n`simple_graph.preconnected` and `simple_graph.connected` are preserved under graph isomorphisms.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "map", ["simple_graph", "connected"]], ["add", "theorem", "connected_iff", ["simple_graph", "iso"]], ["add", "theorem", "preconnected_iff", ["simple_graph", "iso"]], ["add", "theorem", "map", ["simple_graph", "preconnected"]]]}]}, {"timestamp": 1655863740, "sha": "f3cd150b", "message": "fix(tactic/apply_fun.lean): instantiate mvars in apply_fun (#14882)\nFixes leanprover-community/lean#733", "changes": [{"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "test/apply_fun.lean", "newPath": "test/apply_fun.lean", "changes": []}]}, {"timestamp": 1655829101, "sha": "3b6552e0", "message": "chore(linear_algebra/alternating): more lemmas about `curry_left` (#14844)\nThis follows on from #14802", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "curry_left_add", ["alternating_map"]], ["add", "theorem", "curry_left_comp_alternating_map", ["alternating_map"]], ["add", "theorem", "curry_left_comp_linear_map", ["alternating_map"]], ["add", "theorem", "curry_left_smul", ["alternating_map"]], ["add", "theorem", "curry_left_zero", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": [["add", "theorem", "ι_multi_succ_apply", ["exterior_algebra"]], ["add", "theorem", "ι_multi_succ_curry_left", ["exterior_algebra"]], ["add", "theorem", "ι_multi_zero_apply", ["exterior_algebra"]]]}]}, {"timestamp": 1655829100, "sha": "d9537732", "message": "feat(data/finsupp/basic): make `prod_add_index_of_disjoint` to_additive (#14786)\nAdds lemma `sum_add_index_of_disjoint (h : disjoint f1.support f2.support) (g : α → M → β) : (f1 + f2).sum g = f1.sum g + f2.sum g`", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}]}, {"timestamp": 1655829099, "sha": "3e66afe7", "message": "feat(data/sigma): add reflected instance (#14764)", "changes": [{"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}]}, {"timestamp": 1655829098, "sha": "b779513a", "message": "feat(order/conditionally_complete_lattice): add `cInf_le_cInf'` (#14719)\nA version of `cInf_le_cInf` for `conditionally_complete_linear_order_bot`", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_le_cInf'", []]]}]}, {"timestamp": 1655823461, "sha": "2d70b946", "message": "golf(data/polynomial): factorization into linear factors when #roots=degree (#14862)\n+ Golf the proofs of `prod_multiset_X_sub_C_of_monic_of_roots_card_eq` and `C_leading_coeff_mul_prod_multiset_X_sub_C` and move them from *splitting_field.lean* to *ring_division.lean*; instead of using the former to deduce the latter as is currently done in mathlib, we prove the latter first and deduce the former easily. Remove the less general auxiliary, `private` `_of_field` versions.\n+ Move `pairwise_coprime_X_sub` from *field_division.lean* to *ring_division.lean*. Rename it to `pairwise_coprime_X_sub_C` to conform with existing convention. Golf its proof using the more general new lemma `is_coprime_X_sub_C_of_is_unit_sub`.\n+ Golf `monic.irreducible_of_irreducible_map`, but it's essentially the same proof.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["del", "theorem", "pairwise_coprime_X_sub", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "C_leading_coeff_mul_prod_multiset_X_sub_C", ["polynomial"]], ["add", "theorem", "is_coprime_X_sub_C_of_is_unit_sub", ["polynomial"]], ["add", "theorem", "pairwise_coprime_X_sub_C", ["polynomial"]], ["add", "theorem", "prod_multiset_X_sub_C_of_monic_of_roots_card_eq", ["polynomial"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["del", "theorem", "C_leading_coeff_mul_prod_multiset_X_sub_C", ["polynomial"]], ["del", "theorem", "prod_multiset_X_sub_C_of_monic_of_roots_card_eq", ["polynomial"]]]}]}, {"timestamp": 1655823460, "sha": "ee123628", "message": "feat(topology/metric_space/basic): Add `ball_comm` lemmas (#14858)\nThis adds `closed_ball` and `sphere` comm lemmas to go with the existing `mem_ball_comm`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "mem_ball'", ["metric"]], ["mod", "theorem", "mem_closed_ball'", ["metric"]], ["add", "theorem", "mem_closed_ball_comm", ["metric"]], ["add", "theorem", "mem_sphere'", ["metric"]], ["add", "theorem", "mem_sphere_comm", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "mem_ball'", ["emetric"]], ["add", "theorem", "mem_closed_ball'", ["emetric"]], ["add", "theorem", "mem_closed_ball_comm", ["emetric"]]]}]}, {"timestamp": 1655817826, "sha": "2b5a5770", "message": "doc(data/polynomial/div): fix runaway code block (#14864)\nAlso use a fully-qualilfied name for linking", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}]}, {"timestamp": 1655817825, "sha": "65031caf", "message": "feat(ring_theory/dedekind_domain/ideal): drop an unneeded assumption (#14444)", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["mod", "theorem", "count_normalized_factors_eq", ["ideal"]], ["add", "theorem", "is_prime_iff_bot_or_prime", ["ideal"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "count_normalized_factors_eq'", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1655810799, "sha": "273986ad", "message": "fix(topology/algebra/group_completion): add lemmas about nsmul and zsmul and fix diamonds (#14846)\nThis prevents a diamond forming between `uniform_space.completion.has_scalar` and the default `add_monoid.nsmul` and `sub_neg_monoid.zsmul` fields; by manually defining the latter to match the former.\nTo do this, we add two new instances of `has_uniform_continuous_smul` for nat- and int- actions.\nTo use the existing scalar actions, we had to shuffle the imports around a bit.", "changes": [{"oldPath": "src/analysis/normed_space/completion.lean", "newPath": "src/analysis/normed_space/completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "pow_const", ["uniform_continuous"]], ["add", "theorem", "zpow_const", ["uniform_continuous"]], ["add", "theorem", "uniform_continuous_pow_const", []], ["add", "theorem", "uniform_continuous_zpow_const", []]]}, {"oldPath": "src/topology/algebra/uniform_mul_action.lean", "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": []}]}, {"timestamp": 1655810798, "sha": "2a7bde04", "message": "feat(data{finset,set}/pointwise): Pointwise monoids are domains (#14687)\n`no_zero_divisors`/`no_zero_smul_divisors` instances for `set` and `finset`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}]}, {"timestamp": 1655802845, "sha": "481f9910", "message": "refactor(algebra/{hom/equiv, ring/equiv}): rename `equiv_of_unique_of_unique` to `equiv_of_unique` (#14861)\nThis matches [`equiv.equiv_of_unique`](https://leanprover-community.github.io/mathlib_docs/logic/equiv/basic.html#equiv.equiv_of_unique).", "changes": [{"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["add", "def", "mul_equiv_of_unique", ["mul_equiv"]], ["del", "def", "mul_equiv_of_unique_of_unique", ["mul_equiv"]]]}, {"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": [["add", "def", "ring_equiv_of_unique", ["ring_equiv"]], ["del", "def", "ring_equiv_of_unique_of_unique", ["ring_equiv"]]]}]}, {"timestamp": 1655795939, "sha": "e1d7cc70", "message": "chore(set_theory/game/*): create `pgame` and `natural_ops` locales (#14856)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": []}]}, {"timestamp": 1655795937, "sha": "67e026c8", "message": "fix(tactic/norm_num): fix bad proof / bad test (#14852)\nThis is a bug in master but it was first noticed in #14683.", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1655791021, "sha": "8ac19d32", "message": "chore(data/finsupp/fin): fix spacing (#14860)", "changes": [{"oldPath": "src/data/finsupp/fin.lean", "newPath": "src/data/finsupp/fin.lean", "changes": []}]}, {"timestamp": 1655786337, "sha": "326465de", "message": "chore(set_theory/ordinal/natural_ops): use derive (#14859)", "changes": [{"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": []}]}, {"timestamp": 1655775463, "sha": "3b5441cb", "message": "feat(data/fintype/basic): equivalence between `finset α` and `set α` for `fintype α` (#14840)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "to_finset_coe", ["finset"]], ["add", "theorem", "finset_equiv_set_apply", ["fintype"]], ["add", "theorem", "finset_equiv_set_symm_apply", ["fintype"]]]}]}, {"timestamp": 1655769690, "sha": "87f47580", "message": "feat(polynomial/ring_division): strengthen/generalize various lemmas (#14839)\n+ Generalize the assumption `function.injective f` in `le_root_multiplicity_map` to `map f p ≠ 0`. Strictly speaking this is not a generalization because the trivial case `p = 0` is excluded. If one do want to apply the lemma without assuming `p ≠ 0`, they can use the newly introduced `eq_root_multiplicity_map`, which is a strengthening of the original lemma (with the same hypothesis `function.injective f`).\n+ Extract some common `variables` from four lemmas.\n+ Generalize `eq_of_monic_of_dvd_of_nat_degree_le` to `eq_leading_coeff_mul_of_monic_of_dvd_of_nat_degree_le`: if a polynomial `q` is divisible by a monic polynomial `p` and has degree no greater than `p`, then `q = p`. Also remove the `is_domain` hypothesis and golf the proof.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/multiplicity.20of.20root.20in.20extension.20field/near/286736361)", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "count_map_roots", ["polynomial"]], ["add", "theorem", "eq_leading_coeff_mul_of_monic_of_dvd_of_nat_degree_le", ["polynomial"]], ["mod", "theorem", "eq_of_monic_of_dvd_of_nat_degree_le", ["polynomial"]], ["add", "theorem", "eq_root_multiplicity_map", ["polynomial"]], ["mod", "theorem", "le_root_multiplicity_map", ["polynomial"]], ["mod", "theorem", "roots_map_of_injective_card_eq_total_degree", ["polynomial"]]]}]}, {"timestamp": 1655762543, "sha": "125055b0", "message": "refactor(data/sym/basic): change notation for sym.cons (#14853)\nSwitch from `::` to `::ₛ` for `sym.cons` so that it no longer conflicts with `list.cons`. This (finally) puts it in line with other notations, like `::ₘ` for `multiset.cons`.", "changes": [{"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["mod", "theorem", "coe_cons", ["sym"]], ["mod", "theorem", "cons_inj_left", ["sym"]], ["mod", "theorem", "cons_inj_right", ["sym"]], ["mod", "theorem", "cons_of_coe_eq", ["sym"]], ["mod", "theorem", "cons_swap", ["sym"]], ["mod", "theorem", "exists_eq_cons_of_succ", ["sym"]], ["mod", "theorem", "mem_cons", ["sym"]], ["mod", "theorem", "mem_cons_of_mem", ["sym"]], ["mod", "theorem", "mem_cons_self", ["sym"]], ["mod", "theorem", "repeat_succ", ["sym"]]]}]}, {"timestamp": 1655741609, "sha": "9df2762e", "message": "chore(data/nat/totient): golf a proof (#14851)", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["mod", "theorem", "card_units_eq_totient", ["zmod"]]]}]}, {"timestamp": 1655732996, "sha": "f855a4ba", "message": "feat(order/monotone): Monotonicity of `prod.map` (#14843)\nIf `f` and `g` are monotone/antitone, then `prod.map f g` is as well.", "changes": [{"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "imp", ["antitone"]], ["add", "theorem", "prod_map", ["antitone"]], ["add", "theorem", "imp", ["monotone"]], ["add", "theorem", "prod_map", ["monotone"]], ["mod", "theorem", "monotone_fst", []], ["mod", "theorem", "monotone_snd", []], ["add", "theorem", "imp", ["strict_anti"]], ["add", "theorem", "prod_map", ["strict_anti"]], ["add", "theorem", "imp", ["strict_mono"]], ["add", "theorem", "prod_map", ["strict_mono"]]]}]}, {"timestamp": 1655732995, "sha": "66d3f897", "message": "feat(logic/unique): functions from a `unique` type is `const` (#14823)\n+ A function `f` from a `unique` type is equal to the constant function with value `f default`, and the analogous heq version for dependent functions.\n+ Also changes `Π a : α, Sort v` in the file to `α → Sort v`.\nInspired by https://github.com/leanprover-community/mathlib/pull/14724#discussion_r900542203", "changes": [{"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "eq_const_of_unique", []], ["add", "theorem", "heq_const_of_unique", []], ["mod", "theorem", "default_apply", ["pi"]], ["mod", "theorem", "default_def", ["pi"]]]}]}, {"timestamp": 1655732994, "sha": "0b806ba6", "message": "docs(linear_algebra): refer to `pi.basis_fun` in `pi.basis` (#14505)\nThis is a common question so the more ways we can point to the standard basis, the better!\nSee also Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Standard.20basis", "changes": [{"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}]}, {"timestamp": 1655724339, "sha": "c781c0ea", "message": "feat(data/prod/basic): Involutivity of `prod.map` (#14845)\nIf `f` and `g` are involutive, then so is `prod.map f g`.", "changes": [{"oldPath": "src/data/prod/basic.lean", "newPath": "src/data/prod/basic.lean", "changes": [["add", "theorem", "prod_map", ["function", "bijective"]], ["mod", "theorem", "prod_map", ["function", "injective"]], ["add", "theorem", "prod_map", ["function", "involutive"]], ["add", "theorem", "prod_map", ["function", "left_inverse"]], ["add", "theorem", "prod_map", ["function", "right_inverse"]], ["mod", "theorem", "prod_map", ["function", "surjective"]]]}]}, {"timestamp": 1655724338, "sha": "c1abe061", "message": "refactor(linear_algebra/exterior_algebra): redefine `exterior_algebra` as `clifford_algebra 0` (#14819)\nThe motivation here is to avoid having to duplicate API between these two types, else we end up having to repeat every definition that works on `clifford_algebra Q` on `exterior_algebra` for the case when `Q = 0`. This also:\n* Removes `as_exterior : clifford_algebra (0 : quadratic_form R M) ≃ₐ[R] exterior_algebra R M` as the two types are reducibly defeq.\n* Removes support for working with exterior algebras over semirings; while it is entirely possible to generalize `clifford_algebra` to semirings to make this removal unnecessary, it creates difficulties with elaboration, and the support for semirings was without mathematical motivation in the first place. This is in line with a [vote on Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Exterior.20algebras.20over.20semiring/near/286660821).\nThe consequences are:\n* A bunch of redundant code can be removed\n* `x.reverse` and `x.involute` should now work on `x : exterior_algebra R M`.\n* Future API will extend effortlessly from one to the other", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": [["del", "def", "as_exterior", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": [["del", "inductive", "rel", ["exterior_algebra"]], ["mod", "def", "ι", ["exterior_algebra"]], ["mod", "def", "exterior_algebra", []]]}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": []}, {"oldPath": "test/free_algebra.lean", "newPath": "test/free_algebra.lean", "changes": []}]}, {"timestamp": 1655724337, "sha": "320ea398", "message": "feat(data/dfinsupp/basic): add missing lemmas about `single` (#14815)\nThese lemmas were missed in #13076:\n* `comap_domain_single`\n* `comap_domain'_single`\n* `sigma_curry_single`\n* `sigma_uncurry_single`\n* `extend_with_single_zero`\n* `extend_with_zero`\nThese are useful since many induction principles replace a generic `dfinsupp` with `dfinsupp.single`.", "changes": [{"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["add", "theorem", "comap_domain'_single", ["dfinsupp"]], ["add", "theorem", "comap_domain_single", ["dfinsupp"]], ["add", "theorem", "extend_with_single_zero", ["dfinsupp"]], ["add", "theorem", "extend_with_zero", ["dfinsupp"]], ["add", "theorem", "sigma_curry_single", ["dfinsupp"]], ["add", "theorem", "sigma_uncurry_single", ["dfinsupp"]]]}]}, {"timestamp": 1655724336, "sha": "c5e13baa", "message": "feat(algebra/order/pointwise): Supremum of pointwise operations (#13669)\nPointwise operations of sets distribute over the (conditional) supremum/infimum.", "changes": [{"oldPath": "src/algebra/order/pointwise.lean", "newPath": "src/algebra/order/pointwise.lean", "changes": [["add", "theorem", "Inf_div", []], ["add", "theorem", "Inf_inv", []], ["add", "theorem", "Inf_mul", []], ["add", "theorem", "Inf_one", []], ["add", "theorem", "Sup_div", []], ["add", "theorem", "Sup_inv", []], ["add", "theorem", "Sup_mul", []], ["add", "theorem", "Sup_one", []], ["add", "theorem", "cInf_div", []], ["add", "theorem", "cInf_inv", []], ["add", "theorem", "cInf_mul", []], ["add", "theorem", "cInf_one", []], ["add", "theorem", "cSup_div", []], ["add", "theorem", "cSup_inv", []], ["add", "theorem", "cSup_mul", []], ["add", "theorem", "cSup_one", []]]}]}, {"timestamp": 1655716557, "sha": "f9c339ec", "message": "feat(group_theory/group_action/sigma): Scalar action on a sigma type (#14825)\n`(Π i, has_scalar α (β i)) → has_scalar α (Σ i, β i)` and similar.", "changes": [{"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/group_action/sigma.lean", "changes": [["add", "theorem", "smul_def", ["sigma"]], ["add", "theorem", "smul_mk", ["sigma"]]]}, {"oldPath": "src/group_theory/group_action/sum.lean", "newPath": "src/group_theory/group_action/sum.lean", "changes": []}]}, {"timestamp": 1655716555, "sha": "ff40b2c1", "message": "chore(algebra/group/basic): lemmas about `bit0`, `bit1`, and addition (#14798)", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "bit0_add", []], ["add", "theorem", "bit0_sub", []], ["add", "theorem", "bit1_add'", []], ["add", "theorem", "bit1_add", []], ["add", "theorem", "bit1_sub", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "bit_add'", ["nat"]], ["add", "theorem", "bit_add", ["nat"]]]}]}, {"timestamp": 1655716553, "sha": "df50b88a", "message": "feat(order/filter/bases): basis for directed (b)infi of filters (#14775)", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "has_basis_binfi_of_directed'", ["filter"]], ["add", "theorem", "has_basis_binfi_of_directed", ["filter"]], ["add", "theorem", "has_basis_infi_of_directed'", ["filter"]], ["add", "theorem", "has_basis_infi_of_directed", ["filter"]]]}]}, {"timestamp": 1655716551, "sha": "2604c048", "message": "feat(number_theory/number_field): add definitions and results about embeddings (#14749)\nWe consider the embeddings of a number field into an algebraic closed field (of char. 0) and prove some results about those. \nWe also prove the ```number_field``` instance for ```adjoint_root``` of an irreducible polynomial of `ℚ[X]`. \nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["add", "theorem", "card", ["number_field", "embeddings"]], ["add", "theorem", "eq_roots", ["number_field", "embeddings"]]]}]}, {"timestamp": 1655716548, "sha": "8263a4bf", "message": "refactor(analysis/complex/upper_half_plane): move topology to a new file (#14748)\nAlso add some instances and lemmas about topology on the upper half plane.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/complex/upper_half_plane/topology.lean", "changes": [["add", "theorem", "continuous_coe", ["upper_half_plane"]], ["add", "theorem", "continuous_im", ["upper_half_plane"]], ["add", "theorem", "continuous_re", ["upper_half_plane"]], ["add", "theorem", "embedding_coe", ["upper_half_plane"]], ["add", "theorem", "open_embedding_coe", ["upper_half_plane"]]]}]}, {"timestamp": 1655716546, "sha": "804afcb0", "message": "feat(geometry/manifold/diffeomorph): some additions needed for smooth vector bundles (#14738)\n* Define `diffeomorph.prod_comm`, `diffeomorph.prod_congr`, `diffeomorph.prod_assoc`\n* Prove `cont_mdiff_on.comp_cont_mdiff`\n* In `fiber_bundle`, define some lemmas for `local_triv_at` that were already there for `local_triv`\n* Yes, this PR does a couple different things, but it is still very small\n* This is part of #14412", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "comp_cont_mdiff", ["cont_mdiff_on"]], ["add", "theorem", "comp_smooth", ["smooth_on"]]]}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": [["add", "theorem", "coe_prod_comm", ["diffeomorph"]], ["add", "theorem", "coe_prod_congr", ["diffeomorph"]], ["add", "def", "prod_assoc", ["diffeomorph"]], ["add", "def", "prod_comm", ["diffeomorph"]], ["add", "theorem", "prod_comm_symm", ["diffeomorph"]], ["add", "def", "prod_congr", ["diffeomorph"]], ["add", "theorem", "prod_congr_symm", ["diffeomorph"]]]}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["mod", "theorem", "local_triv_at_apply", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_at_apply_mk", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_symm_apply", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_symm_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_at_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_at_target", ["topological_fiber_bundle_core"]]]}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["mod", "theorem", "local_triv_at_apply", ["topological_vector_bundle_core"]], ["add", "theorem", "local_triv_at_apply_mk", ["topological_vector_bundle_core"]], ["add", "def", "to_topological_fiber_bundle_core", ["topological_vector_bundle_core"]], ["del", "def", "to_topological_vector_bundle_core", ["topological_vector_bundle_core"]]]}]}, {"timestamp": 1655716545, "sha": "04f45054", "message": "feat(analysis/convex/join): Join of sets (#14676)\nDefine the join of two sets as the union of all segments between them.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/hull.lean", "newPath": "src/analysis/convex/hull.lean", "changes": [["add", "theorem", "convex_hull_convex_hull_union_left", []], ["add", "theorem", "convex_hull_convex_hull_union_right", []], ["add", "theorem", "convex_hull_pair", []], ["mod", "theorem", "convex_hull_singleton", []], ["add", "theorem", "segment_subset_convex_hull", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/join.lean", "changes": [["add", "theorem", "convex_hull_insert", []], ["add", "theorem", "convex_hull_union", []], ["add", "def", "convex_join", []], ["add", "theorem", "convex_join_Union_left", []], ["add", "theorem", "convex_join_Union_right", []], ["add", "theorem", "convex_join_assoc", []], ["add", "theorem", "convex_join_assoc_aux", []], ["add", "theorem", "convex_join_comm", []], ["add", "theorem", "convex_join_convex_join_convex_join_comm", []], ["add", "theorem", "convex_join_empty_left", []], ["add", "theorem", "convex_join_empty_right", []], ["add", "theorem", "convex_join_left_comm", []], ["add", "theorem", "convex_join_mono", []], ["add", "theorem", "convex_join_mono_left", []], ["add", "theorem", "convex_join_mono_right", []], ["add", "theorem", "convex_join_right_comm", []], ["add", "theorem", "convex_join_segment_singleton", []], ["add", "theorem", "convex_join_segments", []], ["add", "theorem", "convex_join_singleton_left", []], ["add", "theorem", "convex_join_singleton_right", []], ["add", "theorem", "convex_join_singleton_segment", []], ["add", "theorem", "convex_join_singletons", []], ["add", "theorem", "convex_join_subset", []], ["add", "theorem", "convex_join_subset_convex_hull", []], ["add", "theorem", "convex_join_union_left", []], ["add", "theorem", "convex_join_union_right", []], ["add", "theorem", "mem_convex_join", []], ["add", "theorem", "segment_subset_convex_join", []], ["add", "theorem", "subset_convex_join_left", []], ["add", "theorem", "subset_convex_join_right", []]]}]}, {"timestamp": 1655709373, "sha": "29036740", "message": "refactor(order/conditionally_complete_lattice): tweak `well_founded.conditionally_complete_linear_order_with_bot` (#14706)\nWe change the `well_founded` assumption on `well_founded.conditionally_complete_linear_order_bot` to an equivalent but more convenient `is_well_order` typeclass assumption. As such, we place it in the `is_well_order` namespace.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1655698204, "sha": "ae5b6952", "message": "refactor(number_theory/cyclotomic/*): refactor the definition of is_cyclotomic_extension (#14463)\nWe modify the definition of `is_cyclotomic_extension`, requiring the existence of a primitive root of unity rather than a root of the cyclotomic polynomial. This removes almost all the `ne_zero` assumptions.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "pow_prime_pow_mul_eq_one_iff", ["char_p"]]]}, {"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["add", "theorem", "nat_of_ne_zero", ["ne_zero"]]]}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["mod", "theorem", "is_cyclotomic_extension", ["is_alg_closed"]], ["mod", "theorem", "adjoin_primitive_root_eq_top", ["is_cyclotomic_extension"]], ["mod", "theorem", "adjoin_roots_cyclotomic_eq_adjoin_root_cyclotomic", ["is_cyclotomic_extension"]], ["add", "theorem", "ne_zero'", ["is_cyclotomic_extension"]], ["add", "theorem", "ne_zero", ["is_cyclotomic_extension"]], ["add", "theorem", "subsingleton_iff", ["is_cyclotomic_extension"]], ["mod", "theorem", "trans", ["is_cyclotomic_extension"]], ["mod", "theorem", "adjoin_is_cyclotomic_extension", ["is_primitive_root"]]]}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": [["mod", "theorem", "from_zeta_aut_spec", ["is_cyclotomic_extension"]]]}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["add", "theorem", "aeval_zeta", ["is_cyclotomic_extension"]], ["mod", "theorem", "finrank", ["is_cyclotomic_extension"]], ["mod", "theorem", "prime_ne_two_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["mod", "theorem", "prime_ne_two_pow_norm_zeta_pow_sub_one", ["is_cyclotomic_extension"]], ["mod", "theorem", "prime_ne_two_pow_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["mod", "theorem", "two_pow_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_is_root", ["is_cyclotomic_extension"]], ["del", "theorem", "zeta_primitive_root", ["is_cyclotomic_extension"]], ["del", "theorem", "zeta_spec'", ["is_cyclotomic_extension"]], ["mod", "theorem", "zeta_spec", ["is_cyclotomic_extension"]], ["mod", "theorem", "minpoly_sub_one_eq_cyclotomic_comp", ["is_primitive_root"]], ["mod", "theorem", "pow_sub_one_norm_prime_ne_two", ["is_primitive_root"]], ["mod", "theorem", "pow_sub_one_norm_prime_pow_ne_two", ["is_primitive_root"]], ["mod", "theorem", "pow_sub_one_norm_prime_pow_of_one_le", ["is_primitive_root"]], ["mod", "theorem", "pow_sub_one_norm_two", ["is_primitive_root"]], ["mod", "theorem", "sub_one_norm_prime", ["is_primitive_root"]], ["mod", "theorem", "sub_one_norm_prime_ne_two", ["is_primitive_root"]], ["mod", "theorem", "sub_one_norm_two", ["is_primitive_root"]]]}, {"oldPath": "src/number_theory/cyclotomic/rat.lean", "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": [["mod", "theorem", "eval_one_cyclotomic_not_prime_pow", ["polynomial"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "ne_zero'", ["is_primitive_root"]], ["add", "theorem", "mem_roots_of_unity'", []], ["add", "theorem", "mem_roots_of_unity_prime_pow_mul_iff", []]]}]}, {"timestamp": 1655683435, "sha": "10a52752", "message": "feat(analysis/normed/group/basic): `isometry.norm_map_of_map_zero` (#14836)\nAdd the lemma that an isometry of `semi_normed_group`s that preserves\n0 preserves the norm.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "norm_map_of_map_zero", ["isometry"]]]}]}, {"timestamp": 1655681045, "sha": "cf118ee6", "message": "feat(analysis/complex/upper_half_plane): add `upper_half_plane.mk` (#14795)", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane/basic.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": [["add", "theorem", "coe_mk", ["upper_half_plane"]], ["add", "def", "mk", ["upper_half_plane"]], ["add", "theorem", "mk_coe", ["upper_half_plane"]], ["add", "theorem", "mk_im", ["upper_half_plane"]], ["add", "theorem", "mk_re", ["upper_half_plane"]], ["add", "theorem", "re_add_im", ["upper_half_plane"]]]}]}, {"timestamp": 1655659448, "sha": "26279c5f", "message": "chore(algebraic_geometry/function_field): fix timeout in `function_field.algebra` (#14830)\nReduces `elaboration of function_field.algebra` from ~29.3s to ~0.4s.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/deterministic.20timeout/near/286714162)", "changes": [{"oldPath": "src/algebraic_geometry/function_field.lean", "newPath": "src/algebraic_geometry/function_field.lean", "changes": []}]}, {"timestamp": 1655655192, "sha": "65c9ffb2", "message": "feat(topology/algebra/infinite_sum) Sums over Z vs sums over N (#14667)\nThis PR adds some functions for handling infinite sums indexed by the integers, relating them to sums over the naturals.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "int_rec", ["has_sum"]], ["add", "theorem", "nonneg_add_neg", ["has_sum"]], ["add", "theorem", "pos_add_zero_add_neg", ["has_sum"]], ["add", "theorem", "sum_nat_of_sum_int", ["has_sum"]]]}]}, {"timestamp": 1655642078, "sha": "f460576d", "message": "feat(group_theory/group_action/sum): Scalar action on a sum of types (#14818)\n`has_scalar α β → has_scalar α γ → has_scalar α (β ⊕ γ)` and similar.", "changes": [{"oldPath": null, "newPath": "src/group_theory/group_action/sum.lean", "changes": [["add", "theorem", "smul_def", ["sum"]], ["add", "theorem", "smul_inl", ["sum"]], ["add", "theorem", "smul_inr", ["sum"]], ["add", "theorem", "smul_swap", ["sum"]]]}]}, {"timestamp": 1655632531, "sha": "5dabef86", "message": "feat(set_theory/game/basic): Basic lemmas on `inv` (#13840)\nNote that we've redefined `inv` so that `inv x = 0` when `x ≈ 0`. This is because, in order to lift it to an operation on surreals, we need to prove that equivalent numeric games give equivalent numeric values, and this isn't the case otherwise.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["add", "def", "inv'_one", ["pgame"]], ["add", "theorem", "inv'_one_equiv", ["pgame"]], ["add", "def", "inv'_zero", ["pgame"]], ["add", "theorem", "inv'_zero_equiv", ["pgame"]], ["add", "theorem", "inv_eq_of_equiv_zero", ["pgame"]], ["add", "theorem", "inv_eq_of_lf_zero", ["pgame"]], ["add", "theorem", "inv_eq_of_pos", ["pgame"]], ["add", "def", "inv_one", ["pgame"]], ["add", "theorem", "inv_one_equiv", ["pgame"]], ["add", "theorem", "inv_val_is_empty", ["pgame"]], ["add", "theorem", "inv_zero", ["pgame"]], ["add", "theorem", "zero_lf_inv'", ["pgame"]]]}]}, {"timestamp": 1655629968, "sha": "69686e71", "message": "feat(algebra/category/Module): Tannaka duality for rings (#14352)\nObviously this is not the most interesting statement that one might label \"Tannaka duality\", but perhaps it can get the ball rolling. :-)", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/Module/tannaka.lean", "changes": [["add", "def", "ring_equiv_End_forget₂", []]]}]}, {"timestamp": 1655622109, "sha": "7f358d06", "message": "feat(category_theory/preadditive/eilenberg_moore): (Co)algebras over a (co)monad are preadditive (#14811)\nThe category of algebras over an additive monad on a preadditive category is preadditive (and the dual result).", "changes": [{"oldPath": null, "newPath": "src/category_theory/preadditive/eilenberg_moore.lean", "changes": []}]}, {"timestamp": 1655579448, "sha": "0a5b9eba", "message": "feat(set_theory/game/pgame): tweak lemmas (#14810)\nThis PR does the following:\n- uncurry `le_of_forall_lf` and `le_of_forall_lt`.\n- remove `lf_of_exists_le`, as it's made redundant by `lf_of_move_right_le` and `lf_of_le_move_left`.\n- golfing.", "changes": [{"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "le_of_forall_lf", ["pgame"]], ["mod", "theorem", "le_of_forall_lt", ["pgame"]], ["mod", "theorem", "lf_move_right_of_le", ["pgame"]], ["del", "theorem", "lf_of_exists_le", ["pgame"]], ["mod", "theorem", "lf_of_le_move_left", ["pgame"]], ["mod", "theorem", "lf_of_move_right_le", ["pgame"]], ["mod", "theorem", "move_left_lf_of_le", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1655571583, "sha": "4264220c", "message": "feat(analysis/asymptotics): add several lemmas (#14805)\nAlso make `𝕜` explicit in `asymptotics.is_O_with_const_one` and `asymptotics.is_O_const_one`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": [["add", "theorem", "add_is_equivalent", ["asymptotics", "is_o"]]]}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/theta.lean", "newPath": "src/analysis/asymptotics/theta.lean", "changes": [["add", "theorem", "div", ["asymptotics", "is_Theta"]], ["add", "theorem", "trans_eventually_eq", ["asymptotics", "is_Theta"]], ["add", "theorem", "is_Theta_norm_left", ["asymptotics"]], ["add", "theorem", "is_Theta_norm_right", ["asymptotics"]], ["add", "theorem", "is_Theta_of_norm_eventually_eq'", ["asymptotics"]], ["add", "theorem", "is_Theta_of_norm_eventually_eq", ["asymptotics"]], ["mod", "theorem", "is_Theta_refl", ["asymptotics"]], ["add", "theorem", "is_Theta_rfl", ["asymptotics"]], ["add", "theorem", "trans_is_Theta", ["filter", "eventually_eq"]]]}]}, {"timestamp": 1655571582, "sha": "100975e9", "message": "feat(geometry/euclidean/inversion) new file (#14692)\n* Define `euclidean_geometry.inversion`.\n* Prove Ptolemy's inequality.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "dist_div_norm_sq_smul", []]]}, {"oldPath": null, "newPath": "src/geometry/euclidean/inversion.lean", "changes": [["add", "theorem", "dist_center_inversion", ["euclidean_geometry"]], ["add", "theorem", "dist_inversion_center", ["euclidean_geometry"]], ["add", "theorem", "dist_inversion_inversion", ["euclidean_geometry"]], ["add", "def", "inversion", ["euclidean_geometry"]], ["add", "theorem", "inversion_bijective", ["euclidean_geometry"]], ["add", "theorem", "inversion_dist_center", ["euclidean_geometry"]], ["add", "theorem", "inversion_injective", ["euclidean_geometry"]], ["add", "theorem", "inversion_inversion", ["euclidean_geometry"]], ["add", "theorem", "inversion_involutive", ["euclidean_geometry"]], ["add", "theorem", "inversion_of_mem_sphere", ["euclidean_geometry"]], ["add", "theorem", "inversion_self", ["euclidean_geometry"]], ["add", "theorem", "inversion_surjective", ["euclidean_geometry"]], ["add", "theorem", "inversion_vsub_center", ["euclidean_geometry"]], ["add", "theorem", "mul_dist_le_mul_dist_add_mul_dist", ["euclidean_geometry"]]]}]}, {"timestamp": 1655571581, "sha": "92d5fdf8", "message": "feat(topology/metric_space/baire): generalize some lemmas (#14633)\nAdd `is_Gδ.dense_{s,b,}Union_interior_of_closed`.", "changes": [{"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["add", "theorem", "dense_Union_interior_of_closed", ["is_Gδ"]], ["add", "theorem", "dense_bUnion_interior_of_closed", ["is_Gδ"]], ["add", "theorem", "dense_sUnion_interior_of_closed", ["is_Gδ"]]]}]}, {"timestamp": 1655571580, "sha": "f1b0402a", "message": "feat(tactic/core + test/list_summands): a function extracting a list of summands from an expression (#14617)\nThis meta def is used in #13483, where `move_add` is defined.\nA big reason for splitting these 5 lines off the main PR is that they are not in a leaf of the import hierarchy: this hopefully saves lots of CI time, when doing trivial changes to the main PR.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "test/list_summands.lean", "changes": []}]}, {"timestamp": 1655565978, "sha": "3a8e0a11", "message": "feat(group_theory/torsion): define the p-primary component of a group (#14312)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "exists_order_of_eq_prime_pow_iff", []]]}, {"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": [["add", "theorem", "is_p_group", ["comm_group", "primary_component"]], ["add", "def", "primary_component", ["comm_group"]], ["add", "def", "torsion", ["comm_group"]], ["add", "theorem", "torsion_eq_torsion_submonoid", ["comm_group"]], ["add", "theorem", "disjoint", ["comm_monoid", "primary_component"]], ["add", "theorem", "exists_order_of_eq_prime_pow", ["comm_monoid", "primary_component"]], ["add", "def", "primary_component", ["comm_monoid"]], ["mod", "theorem", "quotient_torsion", ["is_torsion_free"]], ["del", "def", "torsion", []], ["del", "theorem", "torsion_eq_torsion_submonoid", []]]}]}, {"timestamp": 1655556623, "sha": "3abee054", "message": "chore(order/pfilter): more `principal` API (#14759)\n`principal` and `Inf` form a Galois coinsertion.", "changes": [{"oldPath": "src/order/pfilter.lean", "newPath": "src/order/pfilter.lean", "changes": [["add", "theorem", "Inf_gc", ["order", "pfilter"]], ["add", "def", "Inf_gi", ["order", "pfilter"]], ["add", "theorem", "antitone_principal", ["order", "pfilter"]], ["add", "theorem", "mem_def", ["order", "pfilter"]], ["add", "theorem", "mem_principal", ["order", "pfilter"]], ["add", "theorem", "principal_le_principal_iff", ["order", "pfilter"]]]}]}, {"timestamp": 1655544482, "sha": "39986ae2", "message": "chore(data/nat/lattice): add `nat.infi_of_empty` to match `_root_.infi_of_empty` (#14797)", "changes": [{"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": [["add", "theorem", "infi_of_empty", ["nat"]]]}]}, {"timestamp": 1655540896, "sha": "7fb5ed20", "message": "feat(data/complex/basic): add `complex.abs_le_sqrt_two_mul_max` (#14804)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "abs_le_sqrt_two_mul_max", ["complex"]]]}]}, {"timestamp": 1655509310, "sha": "bd6b98b2", "message": "feat(linear_algebra/alternating): add more compositional API (#14802)\nThese will be helpful in relating `alternating_map`s to the `exterior_algebra`.\nThis adds:\n* `alternating_map.curry_left`\n* `alternating_map.const_linear_equiv_of_is_empty`\n* `alternating_map.dom_dom_congr`", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["mod", "theorem", "coe_dom_dom_congr", ["alternating_map"]], ["add", "def", "const_linear_equiv_of_is_empty", ["alternating_map"]], ["add", "def", "const_of_is_empty", ["alternating_map"]], ["add", "def", "curry_left", ["alternating_map"]], ["add", "def", "curry_left_linear_map", ["alternating_map"]], ["add", "theorem", "curry_left_same", ["alternating_map"]], ["add", "def", "dom_dom_congr", ["alternating_map"]], ["add", "theorem", "dom_dom_congr_add", ["alternating_map"]], ["add", "theorem", "dom_dom_congr_eq_iff", ["alternating_map"]], ["add", "theorem", "dom_dom_congr_eq_zero_iff", ["alternating_map"]], ["add", "def", "dom_dom_congr_equiv", ["alternating_map"]], ["add", "theorem", "dom_dom_congr_perm", ["alternating_map"]], ["add", "theorem", "dom_dom_congr_refl", ["alternating_map"]], ["add", "theorem", "dom_dom_congr_trans", ["alternating_map"]], ["add", "theorem", "dom_dom_congr_zero", ["alternating_map"]], ["add", "theorem", "map_vec_cons_add", ["alternating_map"]], ["add", "theorem", "map_vec_cons_smul", ["alternating_map"]], ["mod", "def", "of_subsingleton", ["alternating_map"]]]}]}, {"timestamp": 1655509309, "sha": "0c476570", "message": "chore(order/symm_diff): add lemma about `bxor` (#14801)", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_eq_bnot", ["bool"]], ["add", "theorem", "inf_eq_band", ["bool"]], ["add", "theorem", "sup_eq_bor", ["bool"]]]}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["add", "theorem", "symm_diff_eq_bxor", ["bool"]]]}]}, {"timestamp": 1655505818, "sha": "4ff9e93e", "message": "feat(analysis/complex/basic): add a few lemmas about `dist` on `complex` (#14796)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "dist_eq_re_im", ["complex"]], ["add", "theorem", "dist_mk", ["complex"]], ["add", "theorem", "dist_of_im_eq", ["complex"]], ["add", "theorem", "dist_of_re_eq", ["complex"]], ["add", "theorem", "edist_of_im_eq", ["complex"]], ["add", "theorem", "edist_of_re_eq", ["complex"]], ["add", "theorem", "nndist_conj_self", ["complex"]], ["add", "theorem", "nndist_of_im_eq", ["complex"]], ["add", "theorem", "nndist_of_re_eq", ["complex"]], ["add", "theorem", "nndist_self_conj", ["complex"]]]}]}, {"timestamp": 1655498263, "sha": "d2369bcb", "message": "feat(data/set/intervals): add two `ssubset` lemmas (#14793)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Iio_ssubset_Iic_self", ["set"]], ["add", "theorem", "Ioi_ssubset_Ici_self", ["set"]]]}]}, {"timestamp": 1655492246, "sha": "e23de85c", "message": "feat(algebra/algebra/basic) : add ring_hom.equiv_rat_alg_hom (#14772)\nProves the equivalence between `ring_hom` and `rat_alg_hom`.\nFrom flt-regular", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "to_ring_hom_to_rat_alg_hom", ["alg_hom"]], ["add", "def", "equiv_rat_alg_hom", ["ring_hom"]], ["add", "theorem", "to_rat_alg_hom_to_ring_hom", ["ring_hom"]]]}]}, {"timestamp": 1655487547, "sha": "260d472e", "message": "feat(order/topology/**/uniform*): Lemmas about uniform convergence (#14587)\nTo prove facts about uniform convergence, it is often useful to manipulate the various functions without dealing with the ε's and δ's. To do so, you need auxiliary lemmas about adding/muliplying/etc Cauchy sequences.\nThis commit adds several such lemmas. It supports #14090, which we're slowly transforming to use these lemmas instead of doing direct ε/δ manipulation.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["del", "theorem", "prod_assoc", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "diag_of_prod", ["filter", "eventually"]], ["add", "theorem", "map_swap4_eq_comap", ["filter"]], ["add", "theorem", "map_swap4_prod", ["filter"]], ["add", "theorem", "prod_assoc", ["filter"]], ["add", "theorem", "prod_assoc_symm", ["filter"]], ["add", "theorem", "tendsto_diag", ["filter"]], ["add", "theorem", "tendsto_prod_assoc", ["filter"]], ["add", "theorem", "tendsto_prod_assoc_symm", ["filter"]], ["add", "theorem", "tendsto_prod_swap", ["filter"]], ["add", "theorem", "tendsto_swap4_prod", ["filter"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "div", ["tendsto_uniformly_on"]], ["add", "theorem", "mul", ["tendsto_uniformly_on"]], ["add", "theorem", "div", ["uniform_cauchy_seq_on"]], ["add", "theorem", "mul", ["uniform_cauchy_seq_on"]]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "tendsto_uniformly_on_const", ["filter", "tendsto"]], ["add", "theorem", "tendsto_prod_principal_iff", []], ["del", "theorem", "comp'", ["tendsto_uniformly"]], ["del", "theorem", "comp'", ["tendsto_uniformly_on"]], ["add", "theorem", "congr", ["tendsto_uniformly_on"]], ["add", "theorem", "tendsto_uniformly_on_empty", []], ["add", "theorem", "tendsto_uniformly_on_singleton_iff_tendsto", []], ["add", "theorem", "comp", ["uniform_cauchy_seq_on"]], ["add", "theorem", "mono", ["uniform_cauchy_seq_on"]], ["add", "theorem", "prod'", ["uniform_cauchy_seq_on"]], ["add", "theorem", "prod", ["uniform_cauchy_seq_on"]], ["add", "theorem", "prod_map", ["uniform_cauchy_seq_on"]], ["add", "theorem", "comp_tendsto_uniformly", ["uniform_continuous"]], ["add", "theorem", "comp_tendsto_uniformly_on", ["uniform_continuous"]], ["add", "theorem", "comp_uniform_cauchy_seq_on", ["uniform_continuous"]]]}]}, {"timestamp": 1655483249, "sha": "545f0fb9", "message": "feat(category_theory/monad/kleisli): dualise kleisli of monad to cokleisli of comonad (#14799)\nThis PR defines the (co)Kleisli category of a comonad, defines the corresponding adjunction, and proves that it gives rise to the original comonad.", "changes": [{"oldPath": "src/category_theory/monad/kleisli.lean", "newPath": "src/category_theory/monad/kleisli.lean", "changes": [["add", "def", "adj", ["category_theory", "cokleisli", "adjunction"]], ["add", "def", "from_cokleisli", ["category_theory", "cokleisli", "adjunction"]], ["add", "def", "to_cokleisli", ["category_theory", "cokleisli", "adjunction"]], ["add", "def", "to_cokleisli_comp_from_cokleisli_iso_self", ["category_theory", "cokleisli", "adjunction"]], ["add", "def", "cokleisli", ["category_theory"]]]}]}, {"timestamp": 1655478522, "sha": "ade72abc", "message": "refactor(linear_algebra/quadratic_form/basic): generalize to semiring (#14303)\nThis uses a slightly nicer strategy than the one suggested by @adamtopaz [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Exterior.20algebras.20over.20semiring/near/282808284).\nThe main motivation here is to be able to talk about `0 : quadratic_form R M` even when there is no negation available, as that will let us merge `clifford_algebra` (which currently requires negation) and `exterior_algebra` (which does not).\nIt's likely this generalization is broadly not very useful, so this adds a `quadratic_form.of_polar` constructor to preserve the old more convenient API.\nNote the `.bib` file changed slightly as I ran the autoformatting tool.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["mod", "theorem", "add_lin_mul_lin", ["quadratic_form"]], ["mod", "theorem", "basis_repr_eq_of_is_Ortho", ["quadratic_form"]], ["add", "theorem", "exists_companion", ["quadratic_form"]], ["mod", "def", "lin_mul_lin", ["quadratic_form"]], ["mod", "theorem", "lin_mul_lin_add", ["quadratic_form"]], ["mod", "theorem", "lin_mul_lin_apply", ["quadratic_form"]], ["mod", "theorem", "lin_mul_lin_comp", ["quadratic_form"]], ["add", "theorem", "map_add_add_add_map", ["quadratic_form"]], ["mod", "theorem", "map_smul_of_tower", ["quadratic_form"]], ["add", "def", "of_polar", ["quadratic_form"]], ["add", "theorem", "polar_add_left_iff", ["quadratic_form"]], ["add", "def", "polar_bilin", ["quadratic_form"]], ["mod", "def", "proj", ["quadratic_form"]], ["mod", "theorem", "proj_apply", ["quadratic_form"]], ["add", "theorem", "some_exists_companion", ["quadratic_form"]], ["mod", "def", "sq", ["quadratic_form"]], ["mod", "theorem", "to_fun_eq_coe", ["quadratic_form"]], ["mod", "def", "weighted_sum_squares", ["quadratic_form"]], ["mod", "structure", "quadratic_form", []]]}, {"oldPath": "src/linear_algebra/quadratic_form/isometry.lean", "newPath": "src/linear_algebra/quadratic_form/isometry.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/prod.lean", "newPath": "src/linear_algebra/quadratic_form/prod.lean", "changes": []}]}, {"timestamp": 1655472937, "sha": "9c2b8903", "message": "feat(group_theory/sylow): API lemmas for smul and subtype (#14521)\nThis PR adds some API lemmas for smul and subtype.", "changes": [{"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "theorem", "conj_smul_le_of_le", ["subgroup"]], ["add", "theorem", "conj_smul_subgroup_of", ["subgroup"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "smul_le", ["sylow"]], ["add", "theorem", "smul_subtype", ["sylow"]]]}]}, {"timestamp": 1655463800, "sha": "0be36f6f", "message": "feat(data/list/of_fn): Add `list.of_fn_add` and `list.of_fn_mul` (#14370)\nThis adds some lemmas to split up lists generated over `fin (n + m)` and `fin (n * m)` into their constituent parts.\nIt also adds a congr lemma to allow `list.of_fn (λ i : fin n, _)` to be rewritten into `list.of_fn (λ i : fin m, _)` by `simp` when `h : n = m` is available.\nI'll need these eventually to prove some things about products of tensor powers.", "changes": [{"oldPath": "src/data/list/join.lean", "newPath": "src/data/list/join.lean", "changes": [["add", "theorem", "join_concat", ["list"]]]}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["add", "theorem", "of_fn_add", ["list"]], ["add", "theorem", "of_fn_congr", ["list"]], ["add", "theorem", "of_fn_mul'", ["list"]], ["add", "theorem", "of_fn_mul", ["list"]], ["add", "theorem", "of_fn_succ'", ["list"]]]}]}, {"timestamp": 1655455130, "sha": "e427a0e5", "message": "feat(set/basic, order/boolean_algebra): generalized `compl_comp_compl` (#14784)\nThis PR generalizes `compl_comp_compl` to apply whenever there is a `boolean_algebra` instance. We also make the set parameter of `compl_compl_image` explicit.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "compl_comp_compl", ["set"]], ["mod", "theorem", "compl_compl_image", ["set"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_comp_compl", []]]}]}, {"timestamp": 1655428215, "sha": "d21469e4", "message": "feat(set_theory/ordinal/basic): improve docs on `lift`, add `simp` lemmas (#14599)\nThis is pretty much the same thing as #14596, just on `ordinal.lift` instead of `cardinal.lift`.", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "lift_id'", ["ordinal"]], ["mod", "theorem", "lift_lift", ["ordinal"]], ["add", "theorem", "lift_umax'", ["ordinal"]], ["mod", "theorem", "lift_umax", ["ordinal"]], ["add", "theorem", "lift_uzero", ["ordinal"]]]}]}, {"timestamp": 1655418856, "sha": "d0b93faf", "message": "feat(set_theory/{pgame, basic}): Notation for `relabelling`, golfing (#14155)\nWe introduce the notation `≡r` for relabellings between two pre-games. We also golf many theorems on relabellings.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["mod", "theorem", "mul_zero_equiv", ["pgame"]], ["mod", "def", "mul_zero_relabelling", ["pgame"]], ["mod", "theorem", "zero_mul_equiv", ["pgame"]], ["mod", "def", "zero_mul_relabelling", ["pgame"]]]}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": [["mod", "theorem", "birthday_congr", ["pgame", "relabelling"]]]}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": [["mod", "theorem", "impartial_congr", ["pgame", "impartial"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "def", "nim_zero_relabelling", ["pgame", "nim"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "def", "add_assoc_relabelling", ["pgame"]], ["mod", "def", "add_comm_relabelling", ["pgame"]], ["mod", "def", "add_zero_relabelling", ["pgame"]], ["mod", "theorem", "is_empty", ["pgame", "equiv"]], ["mod", "def", "neg_add_relabelling", ["pgame"]], ["mod", "def", "relabel", ["pgame"]], ["mod", "def", "add_congr", ["pgame", "relabelling"]], ["mod", "theorem", "equiv", ["pgame", "relabelling"]], ["add", "theorem", "ge", ["pgame", "relabelling"]], ["mod", "def", "is_empty", ["pgame", "relabelling"]], ["mod", "theorem", "le", ["pgame", "relabelling"]], ["mod", "def", "neg_congr", ["pgame", "relabelling"]], ["mod", "def", "refl", ["pgame", "relabelling"]], ["mod", "def", "restricted", ["pgame", "relabelling"]], ["mod", "def", "sub_congr", ["pgame", "relabelling"]], ["mod", "def", "symm", ["pgame", "relabelling"]], ["mod", "def", "trans", ["pgame", "relabelling"]], ["add", "def", "trans", ["pgame", "restricted"]], ["mod", "def", "zero_add_relabelling", ["pgame"]]]}]}, {"timestamp": 1655407225, "sha": "ae10dced", "message": "feat(algebra/direct_sum/decomposition): add decompositions into a direct sum (#14626)\nThis is a constructive version of `direct_sum.is_internal`, and generalizes the existing `graded_algebra`.\nThe main user-facing changes are:\n* `graded_algebra.decompose` is now spelt `direct_sum.decompose_alg_hom`\n* The simp normal form of decomposition is now `direct_sum.decompose`.\n* `graded_algebra.support 𝒜 x` is now spelt `(decompose 𝒜 x).support`\n* `left_inv` and `right_inv` has swapped, now with meaning \"the decomposition is the (left|right) inverse of the canonical map\" rather than the other way around\nTo keep this from growing even larger, I've left `graded_algebra.proj` alone for a future refactor.", "changes": [{"oldPath": "counterexamples/homogeneous_prime_not_prime.lean", "newPath": "counterexamples/homogeneous_prime_not_prime.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/direct_sum/decomposition.lean", "changes": [["add", "def", "decompose", ["direct_sum"]], ["add", "theorem", "decompose_add", ["direct_sum"]], ["add", "def", "decompose_add_equiv", ["direct_sum"]], ["add", "theorem", "decompose_coe", ["direct_sum"]], ["add", "def", "decompose_linear_equiv", ["direct_sum"]], ["add", "theorem", "decompose_neg", ["direct_sum"]], ["add", "theorem", "decompose_of_mem", ["direct_sum"]], ["add", "theorem", "decompose_of_mem_ne", ["direct_sum"]], ["add", "theorem", "decompose_of_mem_same", ["direct_sum"]], ["add", "theorem", "decompose_smul", ["direct_sum"]], ["add", "theorem", "decompose_sub", ["direct_sum"]], ["add", "theorem", "decompose_sum", ["direct_sum"]], ["add", "theorem", "decompose_symm_add", ["direct_sum"]], ["add", "theorem", "decompose_symm_neg", ["direct_sum"]], ["add", "theorem", "decompose_symm_of", ["direct_sum"]], ["add", "theorem", "decompose_symm_sub", ["direct_sum"]], ["add", "theorem", "decompose_symm_sum", ["direct_sum"]], ["add", "theorem", "decompose_symm_zero", ["direct_sum"]], ["add", "theorem", "decompose_zero", ["direct_sum"]], ["add", "theorem", "decompose'_eq", ["direct_sum", "decomposition"]], ["add", "theorem", "sum_support_decompose", ["direct_sum"]]]}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["add", "def", "decompose_alg_equiv", ["direct_sum"]], ["add", "theorem", "decompose_mul", ["direct_sum"]], ["add", "theorem", "decompose_one", ["direct_sum"]], ["add", "theorem", "decompose_symm_mul", ["direct_sum"]], ["add", "theorem", "decompose_symm_one", ["direct_sum"]], ["del", "theorem", "decompose'_def", ["graded_algebra"]], ["del", "def", "decompose", ["graded_algebra"]], ["del", "theorem", "decompose_coe", ["graded_algebra"]], ["del", "theorem", "decompose_of_mem", ["graded_algebra"]], ["del", "theorem", "decompose_of_mem_ne", ["graded_algebra"]], ["del", "theorem", "decompose_of_mem_same", ["graded_algebra"]], ["del", "theorem", "decompose_symm_of", ["graded_algebra"]], ["mod", "theorem", "mem_support_iff", ["graded_algebra"]], ["del", "theorem", "sum_support_decompose", ["graded_algebra"]], ["del", "def", "support", ["graded_algebra"]]]}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}]}, {"timestamp": 1655407224, "sha": "67da2721", "message": "feat(analysis/inner_product_space): Gram-Schmidt Basis (#14514)\nWhen the Gram-Schmidt procedure is given a basis, it produces a basis.\nThis pull request also refactors the lemma `gram_schmidt_span`. The new versions of the lemmas cover the span of `Iio`, the span of `Iic` and the span of the complete set of input vectors. I was also able to remove some type classes in the process.", "changes": [{"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": [["add", "theorem", "coe_gram_schmidt_basis", []], ["add", "theorem", "gram_schmidt_linear_independent", []], ["add", "theorem", "gram_schmidt_mem_span", []], ["mod", "theorem", "gram_schmidt_ne_zero", []], ["mod", "theorem", "gram_schmidt_ne_zero_coe", []], ["mod", "theorem", "gram_schmidt_normed_unit_length", []], ["mod", "theorem", "gram_schmidt_normed_unit_length_coe", []], ["mod", "theorem", "gram_schmidt_orthonormal", []], ["add", "theorem", "gram_schmidt_triangular", []], ["mod", "theorem", "gram_schmidt_zero", []], ["add", "theorem", "mem_span_gram_schmidt", []], ["mod", "theorem", "span_gram_schmidt", []], ["add", "theorem", "span_gram_schmidt_Iic", []], ["add", "theorem", "span_gram_schmidt_Iio", []], ["add", "theorem", "span_gram_schmidt_normed", []], ["add", "theorem", "span_gram_schmidt_normed_range", []]]}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "span_eq_span", ["submodule"]]]}]}, {"timestamp": 1655394382, "sha": "988f160d", "message": "fix(data/rat/basic): Remove incorrect simp attribute (#14765)\nRemove simp attribute that breaks `field_simp`.", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["mod", "theorem", "coe_int_div_eq_mk", ["rat"]]]}]}, {"timestamp": 1655394380, "sha": "6c46641d", "message": "feat(linear_algebra/clifford_algebra/fold): Add recursors for folding along generators (#14619)\nThis adds `clifford_algebra.fold{l,r}` and `clifford_algebra.{left,right}_induction`.\nThe former are analogous to `list.foldl` and `list.foldr`, while the latter are two stronger variants of `clifford_algebra.induction`.\nWe don't bother duplicating these for the `exterior_algebra`, as a future PR will make `exterior_algebra = clifford_algebra 0` true by `rfl`.\nThis construction can be used to show:\n* `clifford_algebra Q ≃ₗ[R] exterior_algebra R M` (when `invertible 2`)\n* `clifford_algebra Q ≃ₐ[R] clifford_algebra.even (Q' Q)` (where `Q' Q` is a quadratic form over an augmented `V`)\nThese will follow in future PRs.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/fold.lean", "changes": [["add", "def", "foldl", ["clifford_algebra"]], ["add", "theorem", "foldl_algebra_map", ["clifford_algebra"]], ["add", "theorem", "foldl_mul", ["clifford_algebra"]], ["add", "theorem", "foldl_one", ["clifford_algebra"]], ["add", "theorem", "foldl_prod_map_ι", ["clifford_algebra"]], ["add", "theorem", "foldl_reverse", ["clifford_algebra"]], ["add", "theorem", "foldl_ι", ["clifford_algebra"]], ["add", "def", "foldr", ["clifford_algebra"]], ["add", "theorem", "foldr_algebra_map", ["clifford_algebra"]], ["add", "theorem", "foldr_mul", ["clifford_algebra"]], ["add", "theorem", "foldr_one", ["clifford_algebra"]], ["add", "theorem", "foldr_prod_map_ι", ["clifford_algebra"]], ["add", "theorem", "foldr_reverse", ["clifford_algebra"]], ["add", "theorem", "foldr_ι", ["clifford_algebra"]], ["add", "theorem", "left_induction", ["clifford_algebra"]], ["add", "theorem", "right_induction", ["clifford_algebra"]]]}]}, {"timestamp": 1655394378, "sha": "7584a104", "message": "feat(set_theory/game/ordinal): addition of ordinals on games matches natural addition (#14298)", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": [["add", "theorem", "to_pgame_add", ["ordinal"]], ["add", "theorem", "to_pgame_add_mk", ["ordinal"]]]}]}, {"timestamp": 1655383926, "sha": "b05d8459", "message": "feat(data/nat/basic): add a few lemmas (#14718)\nAdd a few lemmas about sub and mod.", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "tsub_lt_of_lt", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "mul_add_mod", ["nat"]], ["add", "theorem", "mul_add_mod_of_lt", ["nat"]], ["add", "theorem", "pred_eq_self_iff", ["nat"]]]}]}, {"timestamp": 1655380348, "sha": "3feb151c", "message": "feat(algebra/homology,category_theory/abelian): exact_comp_mono_iff (#14410)\nFrom LTE.", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["add", "theorem", "exact_comp_mono_iff", ["category_theory"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "exact_epi_comp_iff", ["category_theory", "abelian"]]]}]}, {"timestamp": 1655348005, "sha": "6834a24e", "message": "feat(analysis/asymptotics): define `is_Theta` (#14567)\n* define `f =Θ[l] g` and prove basic properties;\n* add `is_O.const_smul_left`, `is_o.const_smul_left`;\n* rename `is_O_const_smul_left_iff` and `is_o_const_smul_left_iff` to\n `is_O_const_smul_left` and `is_o_const_smul_left`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "const_smul_left", ["asymptotics", "is_O"]], ["add", "theorem", "is_O_const_smul_left", ["asymptotics"]], ["del", "theorem", "is_O_const_smul_left_iff", ["asymptotics"]], ["add", "theorem", "const_smul_left", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_const_smul_left", ["asymptotics"]], ["del", "theorem", "is_o_const_smul_left_iff", ["asymptotics"]]]}, {"oldPath": null, "newPath": "src/analysis/asymptotics/theta.lean", "changes": [["add", "theorem", "antisymm", ["asymptotics", "is_O"]], ["add", "theorem", "trans_is_Theta", ["asymptotics", "is_O"]], ["add", "theorem", "eq_zero_iff", ["asymptotics", "is_Theta"]], ["add", "theorem", "inv", ["asymptotics", "is_Theta"]], ["add", "theorem", "is_O_congr_left", ["asymptotics", "is_Theta"]], ["add", "theorem", "is_O_congr_right", ["asymptotics", "is_Theta"]], ["add", "theorem", "is_bounded_under_le_iff", ["asymptotics", "is_Theta"]], ["add", "theorem", "is_o_congr_left", ["asymptotics", "is_Theta"]], ["add", "theorem", "is_o_congr_right", ["asymptotics", "is_Theta"]], ["add", "theorem", "mono", ["asymptotics", "is_Theta"]], ["add", "theorem", "mul", ["asymptotics", "is_Theta"]], ["add", "theorem", "pow", ["asymptotics", "is_Theta"]], ["add", "theorem", "smul", ["asymptotics", "is_Theta"]], ["add", "theorem", "sup", ["asymptotics", "is_Theta"]], ["add", "theorem", "symm", ["asymptotics", "is_Theta"]], ["add", "theorem", "tendsto_norm_at_top_iff", ["asymptotics", "is_Theta"]], ["add", "theorem", "tendsto_zero_iff", ["asymptotics", "is_Theta"]], ["add", "theorem", "trans", ["asymptotics", "is_Theta"]], ["add", "theorem", "trans_is_O", ["asymptotics", "is_Theta"]], ["add", "theorem", "trans_is_o", ["asymptotics", "is_Theta"]], ["add", "theorem", "zpow", ["asymptotics", "is_Theta"]], ["add", "def", "is_Theta", ["asymptotics"]], ["add", "theorem", "is_Theta_comm", ["asymptotics"]], ["add", "theorem", "is_Theta_const_const", ["asymptotics"]], ["add", "theorem", "is_Theta_const_const_iff", ["asymptotics"]], ["add", "theorem", "is_Theta_const_mul_left", ["asymptotics"]], ["add", "theorem", "is_Theta_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_Theta_const_smul_left", ["asymptotics"]], ["add", "theorem", "is_Theta_const_smul_right", ["asymptotics"]], ["add", "theorem", "is_Theta_inv", ["asymptotics"]], ["add", "theorem", "is_Theta_refl", ["asymptotics"]], ["add", "theorem", "is_Theta_sup", ["asymptotics"]], ["add", "theorem", "is_Theta_zero_left", ["asymptotics"]], ["add", "theorem", "is_Theta_zero_right", ["asymptotics"]], ["add", "theorem", "trans_is_Theta", ["asymptotics", "is_o"]]]}]}, {"timestamp": 1655344804, "sha": "0053e3c5", "message": "feat(analysis/special_functions/arsinh): add lemmas, review API (#14668)", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "cont_diff_symm", ["homeomorph"]], ["add", "theorem", "cont_diff_symm_deriv", ["homeomorph"]]]}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": [["add", "theorem", "arsinh", ["cont_diff"]], ["add", "theorem", "arsinh", ["cont_diff_at"]], ["add", "theorem", "arsinh", ["cont_diff_on"]], ["add", "theorem", "arsinh", ["cont_diff_within_at"]], ["add", "theorem", "arsinh", ["continuous"]], ["add", "theorem", "arsinh", ["continuous_at"]], ["add", "theorem", "arsinh", ["continuous_on"]], ["add", "theorem", "arsinh", ["continuous_within_at"]], ["add", "theorem", "arsinh", ["differentiable"]], ["add", "theorem", "arsinh", ["differentiable_at"]], ["add", "theorem", "arsinh", ["differentiable_on"]], ["add", "theorem", "arsinh", ["differentiable_within_at"]], ["add", "theorem", "arsinh", ["filter", "tendsto"]], ["add", "theorem", "arsinh", ["has_deriv_at"]], ["add", "theorem", "arsinh", ["has_deriv_within_at"]], ["add", "theorem", "arsinh", ["has_fderiv_at"]], ["add", "theorem", "arsinh", ["has_fderiv_within_at"]], ["add", "theorem", "arsinh", ["has_strict_deriv_at"]], ["add", "theorem", "arsinh", ["has_strict_fderiv_at"]], ["add", "theorem", "arsinh_bijective", ["real"]], ["add", "theorem", "arsinh_eq_zero_iff", ["real"]], ["add", "theorem", "arsinh_inj", ["real"]], ["add", "theorem", "arsinh_injective", ["real"]], ["add", "theorem", "arsinh_le_arsinh", ["real"]], ["add", "theorem", "arsinh_lt_arsinh", ["real"]], ["add", "theorem", "arsinh_neg", ["real"]], ["add", "theorem", "arsinh_neg_iff", ["real"]], ["add", "theorem", "arsinh_nonneg_iff", ["real"]], ["add", "theorem", "arsinh_nonpos_iff", ["real"]], ["add", "theorem", "arsinh_pos_iff", ["real"]], ["mod", "theorem", "arsinh_sinh", ["real"]], ["add", "theorem", "arsinh_strict_mono", ["real"]], ["add", "theorem", "arsinh_surjective", ["real"]], ["add", "theorem", "arsinh_zero", ["real"]], ["add", "theorem", "cont_diff_arsinh", ["real"]], ["add", "theorem", "continuous_arsinh", ["real"]], ["add", "theorem", "cosh_arsinh", ["real"]], ["add", "theorem", "differentiable_arsinh", ["real"]], ["add", "theorem", "exp_arsinh", ["real"]], ["add", "theorem", "has_deriv_at_arsinh", ["real"]], ["add", "theorem", "has_strict_deriv_at_arsinh", ["real"]], ["mod", "theorem", "sinh_arsinh", ["real"]], ["mod", "theorem", "sinh_bijective", ["real"]], ["add", "def", "sinh_equiv", ["real"]], ["add", "def", "sinh_homeomorph", ["real"]], ["add", "def", "sinh_order_iso", ["real"]], ["mod", "theorem", "sinh_surjective", ["real"]], ["del", "theorem", "sqrt_one_add_sinh_sq", ["real"]]]}]}, {"timestamp": 1655344803, "sha": "22f32559", "message": "refactor(set_theory/game/*): Delete `winner.lean` (#14271)\nThe file `winner.lean` currently consists of one-line definitions and theorems, including aliases for basic inequalities. This PR removes the file, inlines all previous definitions and theorems, and golfs various proofs in the process.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": [["mod", "theorem", "add_self", ["pgame", "impartial"]], ["add", "theorem", "equiv_iff_add_equiv_zero'", ["pgame", "impartial"]], ["add", "theorem", "equiv_iff_add_equiv_zero", ["pgame", "impartial"]], ["del", "theorem", "equiv_iff_sum_first_loses", ["pgame", "impartial"]], ["add", "theorem", "equiv_or_fuzzy_zero", ["pgame", "impartial"]], ["add", "theorem", "equiv_zero_iff_ge", ["pgame", "impartial"]], ["add", "theorem", "equiv_zero_iff_le:", ["pgame", "impartial"]], ["add", "theorem", "exists_left_move_equiv_iff_fuzzy_zero", ["pgame", "impartial"]], ["add", "theorem", "exists_right_move_equiv_iff_fuzzy_zero", ["pgame", "impartial"]], ["del", "theorem", "first_loses_symm'", ["pgame", "impartial"]], ["del", "theorem", "first_loses_symm", ["pgame", "impartial"]], ["del", "theorem", "first_wins_symm'", ["pgame", "impartial"]], ["del", "theorem", "first_wins_symm", ["pgame", "impartial"]], ["add", "theorem", "forall_left_moves_fuzzy_iff_equiv_zero", ["pgame", "impartial"]], ["add", "theorem", "forall_right_moves_fuzzy_iff_equiv_zero", ["pgame", "impartial"]], ["add", "theorem", "fuzzy_zero_iff_gf", ["pgame", "impartial"]], ["add", "theorem", "fuzzy_zero_iff_lf", ["pgame", "impartial"]], ["del", "theorem", "good_left_move_iff_first_wins", ["pgame", "impartial"]], ["del", "theorem", "good_right_move_iff_first_wins", ["pgame", "impartial"]], ["add", "theorem", "mk_add_self", ["pgame", "impartial"]], ["add", "theorem", "mk_neg_equiv_self", ["pgame", "impartial"]], ["del", "theorem", "no_good_left_moves_iff_first_loses", ["pgame", "impartial"]], ["del", "theorem", "no_good_right_moves_iff_first_loses", ["pgame", "impartial"]], ["mod", "theorem", "nonneg", ["pgame", "impartial"]], ["mod", "theorem", "nonpos", ["pgame", "impartial"]], ["add", "theorem", "not_equiv_zero_iff", ["pgame", "impartial"]], ["del", "theorem", "not_first_loses", ["pgame", "impartial"]], ["del", "theorem", "not_first_wins", ["pgame", "impartial"]], ["add", "theorem", "not_fuzzy_zero_iff", ["pgame", "impartial"]], ["del", "theorem", "winner_cases", ["pgame", "impartial"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "add_equiv_zero_iff_eq", ["pgame", "nim"]], ["add", "theorem", "add_fuzzy_zero_iff_ne", ["pgame", "nim"]], ["mod", "theorem", "non_zero_first_wins", ["pgame", "nim"]], ["del", "theorem", "sum_first_loses_iff_eq", ["pgame", "nim"]], ["del", "theorem", "sum_first_wins_iff_neq", ["pgame", "nim"]], ["del", "theorem", "zero_first_loses", ["pgame", "nim"]]]}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": null, "changes": [["del", "def", "first_loses", ["pgame"]], ["del", "theorem", "first_loses_is_zero", ["pgame"]], ["del", "theorem", "first_loses_of_equiv", ["pgame"]], ["del", "theorem", "first_loses_of_equiv_iff", ["pgame"]], ["del", "def", "first_wins", ["pgame"]], ["del", "theorem", "first_wins_of_equiv", ["pgame"]], ["del", "theorem", "first_wins_of_equiv_iff", ["pgame"]], ["del", "def", "left_wins", ["pgame"]], ["del", "theorem", "left_wins_of_equiv", ["pgame"]], ["del", "theorem", "left_wins_of_equiv_iff", ["pgame"]], ["del", "theorem", "not_first_loses_of_first_wins", ["pgame"]], ["del", "theorem", "not_first_wins_of_first_loses", ["pgame"]], ["del", "theorem", "one_left_wins", ["pgame"]], ["del", "def", "right_wins", ["pgame"]], ["del", "theorem", "right_wins_of_equiv", ["pgame"]], ["del", "theorem", "right_wins_of_equiv_iff", ["pgame"]], ["del", "theorem", "star_first_wins", ["pgame"]], ["del", "theorem", "winner_cases", ["pgame"]], ["del", "theorem", "zero_first_loses", ["pgame"]]]}]}, {"timestamp": 1655336165, "sha": "f991b4d4", "message": "chore(*): Bump to Lean 3.43.0 (#14684)\nMost of the changes in this upgrade are a consequence of https://github.com/leanprover-community/lean/pull/675, which removed almost all of `init/data/set.lean` from lean core so it could be migrated to mathlib. Other relevant core changes are https://github.com/leanprover-community/lean/pull/714, which removed a few order decidability instances, and https://github.com/leanprover-community/lean/pull/711, which caused a docstring to be rejected.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": []}, {"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/combinatorics/set_family/compression/uv.lean", "newPath": "src/combinatorics/set_family/compression/uv.lean", "changes": []}, {"oldPath": "src/data/bool/basic.lean", "newPath": "src/data/bool/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "compl_eq_compl", ["set"]], ["add", "def", "image", ["set"]], ["mod", "theorem", "mem_powerset", ["set"]], ["mod", "theorem", "mem_powerset_iff", ["set"]], ["del", "theorem", "mem_set_of_eq", ["set"]], ["add", "def", "powerset", ["set"]], ["mod", "theorem", "subset_of_mem_powerset", ["set"]]]}, {"oldPath": "src/data/set/functor.lean", "newPath": "src/data/set/functor.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "mem_sUnion", ["set"]], ["add", "def", "sUnion", ["set"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": [["mod", "def", "End_is_free", ["is_free_groupoid", "spanning_tree"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "def", "ereal_equiv_real", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": []}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "mem_complete_theory", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually_le", ["has_subset", "subset"]], ["del", "theorem", "eventually_le", ["set", "subset"]]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "is_open_univ", ["Scott"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_convergence.lean", "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": []}, {"oldPath": "test/back_chaining.lean", "newPath": "test/back_chaining.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1655328872, "sha": "c81c6c91", "message": "feat(data/polynomial/erase_lead): `lt_nat_degree_of_mem_erase_lead_support` (#14745)\nThis PR adds a lemma `lt_nat_degree_of_mem_erase_lead_support` and adds term-mode proofs of a couple related lemmas.", "changes": [{"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "lt_nat_degree_of_mem_erase_lead_support", ["polynomial"]], ["mod", "theorem", "nat_degree_not_mem_erase_lead_support", ["polynomial"]]]}]}, {"timestamp": 1655328871, "sha": "ea2dbcbb", "message": "feat(analysis/special_functions/integrals): Add integral_cpow (#14491)\nAlso adds various helper lemmas.\nThe purpose of this commit is to provide a computed integral for the `cpow` function. The proof is functionally identical to that of `integral_rpow`, but places a different set of constraints on the various parameters due to different continuity constraints of the cpow function.\nSome notes on future improvments:\n * The range of valid integration can be expanded using ae_covers a la #14147\n * We currently only contemplate a real argument. However, this should essentially work for any continuous path in the complex plane that avoids the negative real axis. That would require a lot more machinery, not currently in mathlib.\nDespite these restrictions, why is this important? This, Abel summation, #13500, and #14090 are the key ingredients to bootstrapping Dirichlet series.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "smul_const", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_cpow", []], ["add", "theorem", "interval_integrable_cpow", ["interval_integral"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "cpow_const", ["continuous_on"]]]}]}, {"timestamp": 1655328867, "sha": "71450437", "message": "feat(algebra/group/pi): Technical casework lemma for when two binomials are equal to each other (#14400)\nThis PR adds a technical casework lemma for when two binomials are equal to each other. It will be useful for irreducibility of x^n-x-1. If anyone can see how to golf the proof further, that would be appreciated!", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "mul_single_mul_mul_single_eq_mul_single_mul_mul_single", ["pi"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "single_add_single_eq_single_add_single", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "binomial_eq_binomial", ["polynomial"]], ["mod", "theorem", "monomial_left_inj", ["polynomial"]], ["mod", "theorem", "nat_cast_mul", ["polynomial"]]]}]}, {"timestamp": 1655319077, "sha": "665cec25", "message": "chore(data/nat/factorization/basic): delete two duplicate lemmas (#14754)\nDeleting two lemmas introduced in #14461 that are duplicates of lemmas already present, as follows:\n```\nlemma div_factorization_pos {q r : ℕ} (hr : nat.prime r) (hq : q ≠ 0) :\n q / (r ^ (q.factorization r)) ≠ 0 := div_pow_factorization_ne_zero r hq\n```\n```\nlemma ne_dvd_factorization_div {q r : ℕ} (hr : nat.prime r) (hq : q ≠ 0) :\n ¬(r ∣ (q / (r ^ (q.factorization r)))) := not_dvd_div_pow_factorization hr hq\n```", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["del", "theorem", "div_factorization_pos", ["nat"]], ["del", "theorem", "ne_dvd_factorization_div", ["nat"]]]}]}, {"timestamp": 1655319076, "sha": "a5832444", "message": "feat(representation_theory/Action): a few lemmas about the rigid structure of Action (#14620)", "changes": [{"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "theorem", "left_dual_V", ["Action"]], ["add", "theorem", "left_dual_ρ", ["Action"]], ["add", "theorem", "right_dual_V", ["Action"]], ["add", "theorem", "right_dual_ρ", ["Action"]]]}]}, {"timestamp": 1655319075, "sha": "c4ef20e9", "message": "feat(order/rel_classes): an irreflexive order on a subsingleton type is a well order (#14601)\nThis generalizes a previously existing lemma that the empty relation on a subsingleton type is a well order.", "changes": [{"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "empty_relation_apply", []], ["add", "theorem", "eq_empty_relation", []], ["add", "theorem", "not_rel", []], ["add", "theorem", "is_well_order", ["subsingleton"]]]}]}, {"timestamp": 1655313038, "sha": "94fa33b4", "message": "fix(tactic/congrm): support multiple binders (#14753)", "changes": [{"oldPath": "src/tactic/congrm.lean", "newPath": "src/tactic/congrm.lean", "changes": []}, {"oldPath": "test/congrm.lean", "newPath": "test/congrm.lean", "changes": []}]}, {"timestamp": 1655313037, "sha": "430da94f", "message": "chore(analysis/normed): move `normed.normed_field` to `normed.field.basic` (#14747)", "changes": [{"oldPath": "src/analysis/locally_convex/polar.lean", "newPath": "src/analysis/locally_convex/polar.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/field/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1655313036, "sha": "6a0f9674", "message": "feat(data/finite/set): `finite` instances for set constructions (#14673)", "changes": [{"oldPath": "src/data/finite/basic.lean", "newPath": "src/data/finite/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finite/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finite/set.lean", "changes": [["add", "theorem", "of_finite_univ", ["finite"]], ["add", "theorem", "finite_bUnion", ["finite", "set"]], ["add", "theorem", "finite_of_finite_image", ["finite", "set"]], ["add", "theorem", "finite_iff_finite", ["set"]], ["add", "theorem", "finite_of_finite", ["set"]], ["add", "theorem", "finite_univ_iff", ["set"]]]}]}, {"timestamp": 1655313035, "sha": "8eaeec26", "message": "chore(a few random files): golfing using the new tactic `congrm` (#14593)\nThis PR is simply intended to showcase some possible applications of the new tactic `congrm`, introduced in #14153.", "changes": [{"oldPath": "archive/100-theorems-list/45_partition.lean", "newPath": "archive/100-theorems-list/45_partition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}]}, {"timestamp": 1655304951, "sha": "34ce7847", "message": "refactor(algebra/group_with_zero/basic): Golf using division monoid lemmas (#14213)\nMake all eligible `group_with_zero` lemmas one-liners from `division_monoid` ones and group them within the file.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "div_div_cancel'", []], ["mod", "theorem", "div_eq_iff", []], ["mod", "theorem", "div_eq_iff_mul_eq", []], ["mod", "theorem", "div_eq_of_eq_mul", []], ["mod", "theorem", "div_eq_one_iff_eq", []], ["mod", "theorem", "div_helper", []], ["mod", "theorem", "div_left_inj'", []], ["mod", "theorem", "div_mul_cancel", []], ["mod", "theorem", "div_mul_left", []], ["mod", "theorem", "div_mul_right", []], ["mod", "theorem", "div_self", []], ["mod", "theorem", "eq_div_iff", []], ["mod", "theorem", "eq_div_iff_mul_eq", []], ["mod", "theorem", "eq_div_of_mul_eq", []], ["mod", "theorem", "inv_mul_eq_one₀", []], ["mod", "theorem", "is_unit_iff_ne_zero", []], ["mod", "theorem", "mul_div_cancel'", []], ["mod", "theorem", "mul_div_cancel", []], ["mod", "theorem", "mul_div_cancel_left", []], ["mod", "theorem", "mul_div_mul_left", []], ["mod", "theorem", "mul_div_mul_right", []], ["mod", "theorem", "mul_eq_one_iff_eq_inv₀", []], ["mod", "theorem", "mul_eq_one_iff_inv_eq₀", []], ["mod", "theorem", "mul_inv_eq_one₀", []], ["mod", "theorem", "mul_left_inj'", []], ["mod", "theorem", "mul_mul_div", []], ["mod", "theorem", "mul_one_div_cancel", []], ["mod", "theorem", "mul_right_inj'", []], ["mod", "theorem", "one_div_mul_cancel", []]]}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}]}, {"timestamp": 1655304950, "sha": "bbca2890", "message": "feat(dynamics/periodic_pts): `chain.pairwise` on orbit (#12991)\nWe prove that a relation holds pairwise on an orbit iff it does for `f^[n] x` and `f^[n+1] x` for any `n`.", "changes": [{"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "chain_range_succ", ["cycle"]]]}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "periodic_orbit_chain'", ["function"]], ["add", "theorem", "periodic_orbit_chain", ["function"]]]}]}, {"timestamp": 1655298792, "sha": "46614736", "message": "chore(analysis/normed/normed_field): golf 2 proofs (#14746)", "changes": [{"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": []}]}, {"timestamp": 1655298791, "sha": "dccdef6b", "message": "chore(set_theory/ordinal/basic): golf ordinal addition definition (#14744)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1655298790, "sha": "d2bfb32b", "message": "feat(analysis/normed_space): range of `norm` (#14740)\n* Add `exists_norm_eq`, `range_norm`, `range_nnnorm`, and `nnnorm_surjective`.\n* Open `set` namespace.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "exists_norm_eq", []], ["add", "theorem", "nnnorm_surjective", []], ["add", "theorem", "range_nnnorm", []], ["add", "theorem", "range_norm", []]]}]}, {"timestamp": 1655298789, "sha": "2aa3fd94", "message": "feat(analysis/convex): a convex set is contractible (#14732)", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/contractible.lean", "changes": []}]}, {"timestamp": 1655298788, "sha": "7430d2d4", "message": "feat(data/complex/exponential): more `simp` lemmas (#14731)\nAdd `simp` attrs and `simp` lemmas.", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "cosh_add_sinh", ["complex"]], ["mod", "theorem", "cosh_of_real_re", ["complex"]], ["mod", "theorem", "cosh_sq_sub_sinh_sq", ["complex"]], ["mod", "theorem", "cosh_sub_sinh", ["complex"]], ["add", "theorem", "exp_sub_cosh", ["complex"]], ["add", "theorem", "exp_sub_sinh", ["complex"]], ["mod", "theorem", "of_real_cosh_of_real_re", ["complex"]], ["mod", "theorem", "sinh_add_cosh", ["complex"]], ["add", "theorem", "sinh_sub_cosh", ["complex"]], ["mod", "theorem", "cosh_add_sinh", ["real"]], ["mod", "theorem", "cosh_neg", ["real"]], ["add", "theorem", "cosh_sq'", ["real"]], ["mod", "theorem", "cosh_sq_sub_sinh_sq", ["real"]], ["add", "theorem", "cosh_sub_sinh", ["real"]], ["add", "theorem", "exp_sub_cosh", ["real"]], ["add", "theorem", "exp_sub_sinh", ["real"]], ["mod", "theorem", "sinh_add_cosh", ["real"]], ["add", "theorem", "sinh_lt_cosh", ["real"]], ["add", "theorem", "sinh_sub_cosh", ["real"]]]}]}, {"timestamp": 1655298787, "sha": "fee91d74", "message": "feat(data/fin/vec_notation): add has_reflect instance and tests (#14670)", "changes": [{"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": null, "newPath": "test/vec_notation.lean", "changes": []}]}, {"timestamp": 1655298786, "sha": "764d7a90", "message": "feat(probability/stopping): first hitting time (#14630)\nThis PR adds the first hitting time (before some time) and proves that it is a stopping time in the discrete case.", "changes": [{"oldPath": null, "newPath": "src/probability/hitting_time.lean", "changes": [["add", "theorem", "hitting_bot_le_iff", ["measure_theory"]], ["add", "theorem", "hitting_eq_Inf", ["measure_theory"]], ["add", "theorem", "hitting_is_stopping_time", ["measure_theory"]], ["add", "theorem", "hitting_le", ["measure_theory"]], ["add", "theorem", "hitting_le_iff_of_exists", ["measure_theory"]], ["add", "theorem", "hitting_le_iff_of_lt", ["measure_theory"]], ["add", "theorem", "hitting_le_of_mem", ["measure_theory"]], ["add", "theorem", "hitting_lt_iff", ["measure_theory"]], ["add", "theorem", "hitting_mem_Icc", ["measure_theory"]], ["add", "theorem", "hitting_mem_set", ["measure_theory"]], ["add", "theorem", "hitting_of_lt", ["measure_theory"]], ["add", "theorem", "le_hitting", ["measure_theory"]], ["add", "theorem", "le_hitting_of_exists", ["measure_theory"]]]}]}, {"timestamp": 1655298784, "sha": "947c3c6d", "message": "refactor(order/locally_finite): Allow `finset.Iix`/`finset.Ixi` on empty types (#14430)\nDefine `locally_finite_order_top` and `locally_finite_order_bot` are redefine `Ici`, `Ioi`, `iic`, `Iio` using them. Those new typeclasses are the same as `locally_finite_order` + `order_top`/`order_bot`, except that they allow the empty type, which is a surprisingly useful feature.", "changes": [{"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": [["mod", "theorem", "gram_schmidt_zero", []]]}, {"oldPath": "src/combinatorics/set_family/lym.lean", "newPath": "src/combinatorics/set_family/lym.lean", "changes": []}, {"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["mod", "theorem", "Ici_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Iic_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Iio_eq_finset_subtype", ["fin"]], ["mod", "theorem", "Ioi_eq_finset_subtype", ["fin"]], ["mod", "theorem", "card_Ici", ["fin"]], ["mod", "theorem", "card_Ioi", ["fin"]], ["mod", "theorem", "card_filter_ge", ["fin"]], ["mod", "theorem", "card_filter_gt", ["fin"]], ["mod", "theorem", "card_filter_le", ["fin"]], ["mod", "theorem", "card_filter_lt_lt", ["fin"]], ["mod", "theorem", "card_fintype_Ici", ["fin"]], ["mod", "theorem", "card_fintype_Ioi", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Icc", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ici", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ico", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Iic", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Iio", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ioc", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ioi", ["fin"]], ["mod", "theorem", "map_subtype_embedding_Ioo", ["fin"]]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["mod", "theorem", "Icc_subset_Ici_self", ["finset"]], ["mod", "theorem", "Icc_subset_Iic_self", ["finset"]], ["mod", "theorem", "Ico_subset_Ici_self", ["finset"]], ["mod", "theorem", "Ico_subset_Iio_self", ["finset"]], ["mod", "theorem", "Iio_subset_Iic_self", ["finset"]], ["mod", "theorem", "Ioc_subset_Iic_self", ["finset"]], ["mod", "theorem", "Ioc_subset_Ioi_self", ["finset"]], ["mod", "theorem", "Ioi_subset_Ici_self", ["finset"]], ["mod", "theorem", "Ioo_subset_Ici_self", ["finset"]], ["mod", "theorem", "Ioo_subset_Iic_self", ["finset"]], ["mod", "theorem", "Ioo_subset_Iio_self", ["finset"]], ["mod", "theorem", "Ioo_subset_Ioi_self", ["finset"]], ["mod", "theorem", "filter_ge_eq_Iic", ["finset"]], ["mod", "theorem", "filter_gt_eq_Iio", ["finset"]], ["mod", "theorem", "filter_le_eq_Ici", ["finset"]], ["mod", "theorem", "filter_lt_eq_Ioi", ["finset"]]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["mod", "theorem", "card_Iic", ["nat"]], ["mod", "theorem", "card_Iio", ["nat"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "theorem", "Icc_of_dual", []], ["add", "theorem", "Ici_of_dual", []], ["add", "theorem", "Ici_to_dual", []], ["add", "theorem", "Ico_of_dual", []], ["add", "theorem", "Iic_of_dual", []], ["add", "theorem", "Iic_to_dual", []], ["add", "theorem", "Iio_of_dual", []], ["add", "theorem", "Iio_to_dual", []], ["add", "theorem", "Ioc_of_dual", []], ["add", "theorem", "Ioi_of_dual", []], ["add", "theorem", "Ioi_to_dual", []], ["add", "theorem", "Ioo_of_dual", []], ["mod", "def", "Ici", ["finset"]], ["mod", "def", "Iic", ["finset"]], ["mod", "def", "Iio", ["finset"]], ["mod", "def", "Ioi", ["finset"]], ["mod", "theorem", "coe_Ici", ["finset"]], ["mod", "theorem", "coe_Iic", ["finset"]], ["mod", "theorem", "coe_Iio", ["finset"]], ["mod", "theorem", "coe_Ioi", ["finset"]], ["mod", "theorem", "map_subtype_embedding_Icc", ["finset"]], ["add", "theorem", "map_subtype_embedding_Ici", ["finset"]], ["mod", "theorem", "map_subtype_embedding_Ico", ["finset"]], ["add", "theorem", "map_subtype_embedding_Iic", ["finset"]], ["add", "theorem", "map_subtype_embedding_Iio", ["finset"]], ["mod", "theorem", "map_subtype_embedding_Ioc", ["finset"]], ["add", "theorem", "map_subtype_embedding_Ioi", ["finset"]], ["mod", "theorem", "map_subtype_embedding_Ioo", ["finset"]], ["mod", "theorem", "mem_Ici", ["finset"]], ["mod", "theorem", "mem_Iic", ["finset"]], ["mod", "theorem", "mem_Iio", ["finset"]], ["mod", "theorem", "mem_Ioi", ["finset"]], ["add", "theorem", "subtype_Ici_eq", ["finset"]], ["add", "theorem", "subtype_Iic_eq", ["finset"]], ["add", "theorem", "subtype_Iio_eq", ["finset"]], ["add", "theorem", "subtype_Ioi_eq", ["finset"]], ["add", "def", "of_Iic'", ["locally_finite_order_bot"]], ["add", "def", "of_Ici'", ["locally_finite_order_top"]], ["add", "def", "of_Ici", ["locally_finite_order_top"]], ["add", "def", "of_Iic", ["locally_finite_order_top"]]]}]}, {"timestamp": 1655291617, "sha": "114f5436", "message": "feat(model_theory/semantics, elementary_maps): Defines elementary equivalence (#14723)\nDefines elementary equivalence of structures\nShows that the domain and codomain of an elementary map are elementarily equivalent.", "changes": [{"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["add", "theorem", "elementarily_equivalent", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "elementarily_equivalent", ["first_order", "language", "elementary_substructure"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "def", "elementarily_equivalent", ["first_order", "language"]], ["add", "theorem", "elementarily_equivalent_iff", ["first_order", "language"]]]}]}, {"timestamp": 1655291616, "sha": "9c40f30a", "message": "refactor(set_theory/game/*): fix theorem names (#14685)\nSome theorems about `exists` had `forall` in the name, other theorems about swapped `≤` or `⧏` used `le` and `lf` instead of `ge` and `gf`.\nWe also golf `le_of_forall_lt`.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "not_gf", ["has_le", "le"]], ["del", "theorem", "not_lf", ["has_le", "le"]], ["add", "theorem", "le_of_forall_lt", ["pgame"]], ["mod", "theorem", "not_equiv'", ["pgame", "lf"]], ["mod", "theorem", "not_equiv", ["pgame", "lf"]], ["add", "theorem", "not_ge", ["pgame", "lf"]], ["add", "theorem", "not_gt", ["pgame", "lf"]], ["del", "theorem", "not_le", ["pgame", "lf"]], ["del", "theorem", "not_lt", ["pgame", "lf"]], ["add", "theorem", "lf_iff_exists_le", ["pgame"]], ["del", "theorem", "lf_iff_forall_le", ["pgame"]], ["mod", "theorem", "lf_irrefl", ["pgame"]], ["add", "theorem", "lf_of_exists_le", ["pgame"]], ["del", "theorem", "lf_of_forall_le", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["del", "theorem", "le_of_forall_lt", ["pgame"]], ["add", "theorem", "lt_iff_exists_le", ["pgame"]], ["del", "theorem", "lt_iff_forall_le", ["pgame"]], ["add", "theorem", "lt_of_exists_le", ["pgame"]], ["del", "theorem", "lt_of_forall_le", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1655291615, "sha": "c6677234", "message": "feat(model_theory/syntax, semantics): Mapping formulas given maps on terms and relations (#14466)\nDefines `first_order.language.bounded_formula.map_term_rel`, which maps formulas given maps on terms and maps on relations.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "cast_le_cast_le", ["fin"]], ["add", "theorem", "cast_le_comp_cast_le", ["fin"]], ["add", "theorem", "nat_add_cast_succ", ["fin"]], ["add", "theorem", "nat_add_last", ["fin"]]]}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "snoc_cast_add", ["fin"]], ["add", "theorem", "snoc_comp_cast_add", ["fin"]], ["add", "theorem", "snoc_comp_nat_add", ["fin"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "realize_map_term_rel_add_cast_le", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_map_term_rel_id", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_subst_aux", ["first_order", "language", "bounded_formula"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["add", "theorem", "cast_le_cast_le", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "cast_le_comp_cast_le", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "cast_le_rfl", ["first_order", "language", "bounded_formula"]], ["mod", "def", "lift_at", ["first_order", "language", "bounded_formula"]], ["add", "def", "map_term_rel", ["first_order", "language", "bounded_formula"]], ["add", "def", "map_term_rel_equiv", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "map_term_rel_id_id_id", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "map_term_rel_map_term_rel", ["first_order", "language", "bounded_formula"]], ["mod", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_all", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_bot", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_ex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_falsum", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_not", ["first_order", "language", "bounded_formula"]], ["mod", "def", "subst", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_comp_relabel", ["first_order", "language", "term"]], ["mod", "theorem", "relabel_id", ["first_order", "language", "term"]], ["add", "theorem", "relabel_id_eq_id", ["first_order", "language", "term"]]]}]}, {"timestamp": 1655291613, "sha": "ea976068", "message": "feat(tactic/ring): recursive ring_nf (#14429)\nAs [reported on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60ring_nf.60.20not.20consistently.20normalizing.3F). This allows `ring_nf` to rewrite inside the atoms of a ring expression, meaning that things like `f (a + b) + c` can simplify in both `+` expressions.", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": [["add", "structure", "ring_nf_cfg", ["tactic", "ring"]]]}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1655289130, "sha": "6e0e270d", "message": "feat(linear_algebra/matrix): positive definite (#14531)\nDefine positive definite matrices and connect them to positive definiteness of quadratic forms.", "changes": [{"oldPath": "src/linear_algebra/matrix/hermitian.lean", "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/pos_def.lean", "changes": [["add", "def", "pos_def", ["matrix"]], ["add", "theorem", "pos_def_of_to_quadratic_form'", ["matrix"]], ["add", "theorem", "pos_def_to_quadratic_form'", ["matrix"]], ["add", "theorem", "pos_def_of_to_matrix'", ["quadratic_form"]], ["add", "theorem", "pos_def_to_matrix'", ["quadratic_form"]]]}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["add", "theorem", "is_symm_to_matrix'", ["quadratic_form"]]]}]}, {"timestamp": 1655284408, "sha": "784c7034", "message": "docs(topology/basic): Fix typo in library note (#14743)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1655281978, "sha": "1fbe1183", "message": "golf(set_theory/game/pgame): golf `neg_le_neg_iff` (#14726)\nAlso in this PR:\n+ slightly golf `subsequent.trans`\n+ replace `->` by `→`\n+ replace a nonterminal `simp` by `dsimp`", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "left_moves_add_cases", ["pgame"]], ["mod", "theorem", "neg_le_neg_iff", ["pgame"]], ["mod", "theorem", "neg_lf_neg_iff", ["pgame"]], ["mod", "theorem", "right_moves_add_cases", ["pgame"]], ["mod", "theorem", "trans", ["pgame", "subsequent"]]]}]}, {"timestamp": 1655281977, "sha": "7958e7da", "message": "chore(analysis/convex/extreme): Make arguments semi-implicit (#14698)\nChange the definition of `is_extreme` from\n```\nB ⊆ A ∧ ∀ x₁ x₂ ∈ A, ∀ x ∈ B, x ∈ open_segment 𝕜 x₁ x₂ → x₁ ∈ B ∧ x₂ ∈ B\n```\nto\n```\nB ⊆ A ∧ ∀ ⦃x₁⦄, x₁ ∈ A → ∀ ⦃x₂⦄, x₂ ∈ A → ∀ ⦃x⦄, x ∈ B → x ∈ open_segment 𝕜 x₁ x₂ → x₁ ∈ B ∧ x₂ ∈ B\n```\nand similar for `extreme_points`.", "changes": [{"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}]}, {"timestamp": 1655276425, "sha": "6b4f3f2b", "message": "feat(data/nat/prime): prime.even_iff (#14688)\nAdds a lemma saying that the only even prime is two.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "even_iff", ["nat", "prime"]]]}]}, {"timestamp": 1655268887, "sha": "e86ab0b0", "message": "refactor(src/algebra/order/monoid): make bot_eq_zero a simp lemma only when the order is linear (#14553)", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["del", "def", "canonically_ordered_add_monoid", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/module/submodule/pointwise.lean", "newPath": "src/algebra/module/submodule/pointwise.lean", "changes": [["del", "def", "canonically_ordered_add_monoid", ["submodule"]]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "bot_eq_one'", []], ["mod", "theorem", "bot_eq_one", []]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "bot_eq_zero", ["multiset"]]]}]}, {"timestamp": 1655268885, "sha": "b4b816c9", "message": "feat(number_theory/cyclotomic/primitive_roots): generalize finrank lemma (#14550)\nWe generalize certain results from fields to domains.", "changes": [{"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}]}, {"timestamp": 1655262798, "sha": "38ad656e", "message": "chore(field_theory/intermediate_field): fix timeout (#14725)\n+ Remove `@[simps]` from `intermediate_field_map` to reduce `decl post-processing of intermediate_field_map` from 18.3s to 46.4ms (on my machine).\n+ Manually provide the two `simp` lemmas previously auto-generated by `@[simps]`. Mathlib compiles even without the two simp lemmas (see commit 1f5a7f1), but I am inclined to keep them in case some other branches/projects are using them.\n[Zulip reports](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/deterministic.20timeout/near/285792556) about `intermediate_field_map` causing timeout in two separate branches", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["mod", "def", "intermediate_field_map", ["intermediate_field"]], ["add", "theorem", "intermediate_field_map_apply_coe", ["intermediate_field"]], ["add", "theorem", "intermediate_field_map_symm_apply_coe", ["intermediate_field"]]]}]}, {"timestamp": 1655262797, "sha": "dd4d8e6a", "message": "feat(logic/hydra): basic lemmas on `cut_expand` (#14408)", "changes": [{"oldPath": "src/logic/hydra.lean", "newPath": "src/logic/hydra.lean", "changes": [["mod", "def", "cut_expand", ["relation"]], ["add", "theorem", "cut_expand_add_left", ["relation"]], ["mod", "theorem", "cut_expand_fibration", ["relation"]], ["mod", "theorem", "cut_expand_iff", ["relation"]], ["add", "theorem", "cut_expand_singleton", ["relation"]], ["add", "theorem", "cut_expand_singleton_singleton", ["relation"]], ["add", "theorem", "not_cut_expand_zero", ["relation"]]]}]}, {"timestamp": 1655262796, "sha": "a16f1cfe", "message": "feat(set_theory/game/basic): cast inequalities on `pgame` to `game` (#14405)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["add", "theorem", "equiv_iff_game_eq", ["pgame"]], ["add", "theorem", "fuzzy_iff_game_fuzzy", ["pgame"]], ["add", "theorem", "le_iff_game_le", ["pgame"]], ["add", "theorem", "lf_iff_game_lf", ["pgame"]], ["add", "theorem", "lt_iff_game_lt", ["pgame"]]]}]}, {"timestamp": 1655251551, "sha": "bf2edb5d", "message": "feat(data/vector/basic): reflected instance for vectors (#14669)\nThis means that a `vector` from a tactic block can be used in an expression.", "changes": [{"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}]}, {"timestamp": 1655251550, "sha": "b134b2f5", "message": "refactor(set_theory/game/state): rename `pgame.of` to `pgame.of_state` (#14658)\nThis is so that we can redefine `pgame.of x y = {x | y}` in #14659. Further, this is just a much clearer name.", "changes": [{"oldPath": "src/set_theory/game/domineering.lean", "newPath": "src/set_theory/game/domineering.lean", "changes": [["mod", "def", "domineering", ["pgame"]]]}, {"oldPath": "src/set_theory/game/state.lean", "newPath": "src/set_theory/game/state.lean", "changes": [["del", "def", "of", ["game"]], ["add", "def", "of_state", ["game"]], ["del", "def", "left_moves_of", ["pgame"]], ["del", "def", "left_moves_of_aux", ["pgame"]], ["add", "def", "left_moves_of_state", ["pgame"]], ["add", "def", "left_moves_of_state_aux", ["pgame"]], ["del", "def", "of", ["pgame"]], ["del", "def", "of_aux", ["pgame"]], ["del", "def", "of_aux_relabelling", ["pgame"]], ["add", "def", "of_state", ["pgame"]], ["add", "def", "of_state_aux", ["pgame"]], ["add", "def", "of_state_aux_relabelling", ["pgame"]], ["mod", "def", "relabelling_move_left", ["pgame"]], ["mod", "def", "relabelling_move_right", ["pgame"]], ["del", "def", "right_moves_of", ["pgame"]], ["del", "def", "right_moves_of_aux", ["pgame"]], ["add", "def", "right_moves_of_state", ["pgame"]], ["add", "def", "right_moves_of_state_aux", ["pgame"]]]}]}, {"timestamp": 1655251549, "sha": "7b2970fa", "message": "feat(set_theory/cardinal/basic): improve docs on `lift`, add `simp` lemmas (#14596)\nWe add some much needed documentation to the `cardinal.lift` API. We also mark a few extra lemmas with `simp`.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "lift_id'", ["cardinal"]], ["mod", "theorem", "lift_umax'", ["cardinal"]], ["mod", "theorem", "lift_umax", ["cardinal"]]]}]}, {"timestamp": 1655251548, "sha": "2e2d5155", "message": "feat(data/nat/factorization): add lemma `coprime_of_div_pow_factorization` (#14576)\nAdd lemma `coprime_of_div_pow_factorization (hp : prime p) (hn : n ≠ 0) : coprime p (n / p ^ n.factorization p)`\nPrompted by [this Zulip question](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/div.20by.20p_adic_val_nat.20is.20coprime).", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "coprime_of_div_pow_factorization", ["nat"]]]}]}, {"timestamp": 1655231105, "sha": "16728b30", "message": "feat(topology/homotopy/contractible): a few convenience lemmas (#14710)\nIf `X` and `Y` are homotopy equivalent spaces, then one is\ncontractible if and only if the other one is contractible.", "changes": [{"oldPath": "src/topology/homotopy/contractible.lean", "newPath": "src/topology/homotopy/contractible.lean", "changes": [["mod", "theorem", "id_nullhomotopic", []]]}]}, {"timestamp": 1655231102, "sha": "05aa9607", "message": "feat(analysis/special_functions/trigonometric/deriv): compare `sinh x` with `x` (#14702)", "changes": [{"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": [["del", "theorem", "sinh_injective", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "cosh_log", ["real"]], ["add", "theorem", "sinh_log", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": [["add", "theorem", "cosh_le_cosh", ["real"]], ["add", "theorem", "cosh_lt_cosh", ["real"]], ["add", "theorem", "cosh_strict_mono_on", ["real"]], ["add", "theorem", "one_le_cosh", ["real"]], ["add", "theorem", "one_lt_cosh", ["real"]], ["add", "theorem", "self_le_sinh_iff", ["real"]], ["add", "theorem", "self_lt_sinh_iff", ["real"]], ["add", "theorem", "sinh_inj", ["real"]], ["add", "theorem", "sinh_injective", ["real"]], ["add", "theorem", "sinh_le_self_iff", ["real"]], ["add", "theorem", "sinh_le_sinh", ["real"]], ["add", "theorem", "sinh_lt_self_iff", ["real"]], ["add", "theorem", "sinh_lt_sinh", ["real"]], ["add", "theorem", "sinh_neg_iff", ["real"]], ["add", "theorem", "sinh_nonneg_iff", ["real"]], ["add", "theorem", "sinh_nonpos_iff", ["real"]], ["add", "theorem", "sinh_pos_iff", ["real"]], ["add", "theorem", "sinh_sub_id_strict_mono", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cosh_abs", ["real"]]]}]}, {"timestamp": 1655231099, "sha": "d5c72605", "message": "feat(order/monotone): add lemmas about `cmp` (#14689)\nAlso replace `order_dual.cmp_le_flip` with lemmas about `to_dual` and `of_dual`.", "changes": [{"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/order/compare.lean", "newPath": "src/order/compare.lean", "changes": [["add", "theorem", "cmp_le_of_dual", []], ["add", "theorem", "cmp_le_to_dual", []], ["add", "theorem", "cmp_of_dual", []], ["add", "theorem", "cmp_to_dual", []], ["add", "theorem", "eq_iff_eq_of_cmp_eq_cmp", []], ["del", "theorem", "cmp_le_flip", ["order_dual"]], ["add", "theorem", "cmp_eq", ["ordering", "compares"]]]}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "cmp_map_eq", ["strict_anti"]], ["add", "theorem", "cmp_map_eq", ["strict_anti_on"]], ["add", "theorem", "cmp_map_eq", ["strict_mono"]], ["add", "theorem", "cmp_map_eq", ["strict_mono_on"]]]}]}, {"timestamp": 1655226296, "sha": "6cdc30d7", "message": "golf(set_theory/ordinal/basic): golf theorems on `cardinal.ord` and `ordinal.card` (#14709)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "mk_ord_out", ["cardinal"]]]}]}, {"timestamp": 1655221337, "sha": "ed033f39", "message": "feat(linear_algebra/vandermonde): add lemmas about det equals zero (#14695)\nAdding two lemmas about when the determinant is zero.\nI shortened the first with the help of some code I found in `ring_theory/trace.lean`, lemma `det_trace_matrix_ne_zero'`.", "changes": [{"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": [["add", "theorem", "det_vandermonde_eq_zero_iff", ["matrix"]], ["add", "theorem", "det_vandermonde_ne_zero_iff", ["matrix"]]]}]}, {"timestamp": 1655221335, "sha": "41eb9587", "message": "feat({tactic + test}/congrm, logic/basic): `congrm = congr + pattern-match` (#14153)\nThis PR defines a tactic `congrm`. If the goal is an equality, where the sides are \"almost\" equal, then calling `congrm ` will produce goals for each place where the given expression has metavariables and will try to close the goal assuming all equalities have been proven.\nFor instance,\n```\nexample {a b : ℕ} (h : a = b) : (λ y : ℕ, ∀ z, a + a = z) = (λ x, ∀ z, b + a = z) :=\nbegin\n congrm λ x, ∀ w, _ + a = w,\n exact h,\nend\n```\nworks.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F-tactics/topic/variant.20syntax.20for.20.60congr'.60)", "changes": [{"oldPath": null, "newPath": "src/tactic/congrm.lean", "changes": []}, {"oldPath": null, "newPath": "test/congrm.lean", "changes": []}]}, {"timestamp": 1655213708, "sha": "32d8fc4e", "message": "feat(topology/homeomorph): add `homeomorph.set.univ` (#14730)", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["mod", "def", "image", ["homeomorph"]], ["add", "def", "univ", ["homeomorph", "set"]]]}]}, {"timestamp": 1655213707, "sha": "1c8f995c", "message": "feat(analysis/special_functions/exp): add `real.exp_half` (#14729)", "changes": [{"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "exp_half", ["real"]]]}]}, {"timestamp": 1655213706, "sha": "da5a737b", "message": "feat(data/complex/basic): ranges of `re`, `im`, `norm_sq`, and `abs` (#14727)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "im_surjective", ["complex"]], ["add", "theorem", "range_abs", ["complex"]], ["add", "theorem", "range_im", ["complex"]], ["add", "theorem", "range_norm_sq", ["complex"]], ["add", "theorem", "range_re", ["complex"]], ["add", "theorem", "re_surjective", ["complex"]]]}]}, {"timestamp": 1655213705, "sha": "b11f8e7f", "message": "refactor(algebra/order/group): unify instances (#14705)\nDrop `group.covariant_class_le.to_contravariant_class_le` etc in favor\nof `group.covconv` (now an instance) and a new similar instance\n`group.covconv_swap`.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": [["add", "theorem", "covariant_swap_iff_contravariant_swap", ["group"]], ["del", "theorem", "covconv", ["group"]]]}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}]}, {"timestamp": 1655213703, "sha": "2b469927", "message": "feat(algebra/algebra/basic): define `alg_hom_class` and `non_unital_alg_hom_class` (#14679)\nThis PR defines `alg_hom_class` and `non_unital_alg_hom_class` as part of the morphism refactor.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "map_add", ["alg_hom"]], ["del", "theorem", "map_bit0", ["alg_hom"]], ["del", "theorem", "map_bit1", ["alg_hom"]], ["del", "theorem", "map_finsupp_prod", ["alg_hom"]], ["del", "theorem", "map_finsupp_sum", ["alg_hom"]], ["del", "theorem", "map_mul", ["alg_hom"]], ["del", "theorem", "map_multiset_prod", ["alg_hom"]], ["del", "theorem", "map_neg", ["alg_hom"]], ["del", "theorem", "map_one", ["alg_hom"]], ["del", "theorem", "map_pow", ["alg_hom"]], ["del", "theorem", "map_prod", ["alg_hom"]], ["del", "theorem", "map_smul", ["alg_hom"]], ["del", "theorem", "map_sub", ["alg_hom"]], ["del", "theorem", "map_sum", ["alg_hom"]], ["del", "theorem", "map_zero", ["alg_hom"]]]}, {"oldPath": "src/algebra/hom/non_unital_alg.lean", "newPath": "src/algebra/hom/non_unital_alg.lean", "changes": [["del", "theorem", "map_add", ["non_unital_alg_hom"]], ["del", "theorem", "map_mul", ["non_unital_alg_hom"]], ["del", "theorem", "map_smul", ["non_unital_alg_hom"]], ["del", "theorem", "map_zero", ["non_unital_alg_hom"]]]}]}, {"timestamp": 1655213702, "sha": "5d18a722", "message": "feat(order/{conditionally_complete_lattice,galois_connection): Supremum of `set.image2` (#14307)\n`Sup` and `Inf` distribute over `set.image2` in the presence of appropriate Galois connections.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_image2", []], ["add", "theorem", "Sup_image2", []], ["add", "theorem", "binfi_prod", []], ["add", "theorem", "bsupr_prod", []], ["mod", "theorem", "infi_prod", []], ["mod", "theorem", "supr_prod", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_image2_eq_cInf_cInf", []], ["add", "theorem", "cInf_image2_eq_cInf_cSup", []], ["add", "theorem", "cInf_image2_eq_cSup_cInf", []], ["add", "theorem", "cInf_image2_eq_cSup_cSup", []], ["add", "theorem", "cSup_image2_eq_cInf_cInf", []], ["add", "theorem", "cSup_image2_eq_cInf_cSup", []], ["add", "theorem", "cSup_image2_eq_cSup_cInf", []], ["add", "theorem", "cSup_image2_eq_cSup_cSup", []], ["add", "theorem", "csupr_le_iff", []], ["add", "theorem", "csupr_set_le_iff", []], ["add", "theorem", "le_cinfi_iff", []], ["add", "theorem", "le_cinfi_set_iff", []]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "Inf_image2_eq_Inf_Inf", []], ["add", "theorem", "Inf_image2_eq_Inf_Sup", []], ["add", "theorem", "Inf_image2_eq_Sup_Inf", []], ["add", "theorem", "Inf_image2_eq_Sup_Sup", []], ["add", "theorem", "Sup_image2_eq_Inf_Inf", []], ["add", "theorem", "Sup_image2_eq_Inf_Sup", []], ["add", "theorem", "Sup_image2_eq_Sup_Inf", []], ["add", "theorem", "Sup_image2_eq_Sup_Sup", []]]}]}, {"timestamp": 1655213701, "sha": "300c4395", "message": "feat(algebra/lie/weights): the zero root space is the Cartan subalgebra for a Noetherian Lie algebra (#14174)", "changes": [{"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": [["add", "theorem", "centralizer_eq_self_of_is_cartan_subalgebra", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["mod", "theorem", "coe_map_to_endomorphism_le", ["lie_submodule"]], ["add", "theorem", "to_endomorphism_comp_subtype_mem", ["lie_submodule"]], ["add", "theorem", "to_endomorphism_restrict_eq_to_endomorphism", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": [["add", "theorem", "is_cartan_of_zero_root_subalgebra_eq", ["lie_algebra"]], ["add", "theorem", "zero_root_subalgebra_eq_iff_is_cartan", ["lie_algebra"]], ["add", "theorem", "zero_root_subalgebra_eq_of_is_cartan", ["lie_algebra"]], ["del", "theorem", "zero_root_subalgebra_is_cartan_of_eq", ["lie_algebra"]], ["add", "theorem", "exists_pre_weight_space_zero_le_ker_of_is_noetherian", ["lie_module"]], ["add", "theorem", "is_nilpotent_to_endomorphism_weight_space_zero", ["lie_module"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "pow_apply_mem_of_forall_mem", ["linear_map"]], ["add", "theorem", "pow_restrict", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "eigenspace_zero", ["module", "End"]], ["add", "theorem", "generalized_eigenspace_zero", ["module", "End"]]]}]}, {"timestamp": 1655205849, "sha": "67dfb57c", "message": "feat(set_theory/cardinal/cofinality): lemma on subsets of strong limit cardinal (#14442)", "changes": [{"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "unbounded_of_is_empty", ["set"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "mk_bounded_subset", ["cardinal"]], ["add", "theorem", "mk_subset_mk_lt_cof", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "bounded_singleton", ["ordinal"]]]}]}, {"timestamp": 1655170310, "sha": "7fee0f12", "message": "fix(data/list/nodup): change `Type` to `Type u` (#14721)\nChange `Type` to `Type u` in `nodup_iff_nth_ne_nth` and two other lemmas added in #14371.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "nth_le_eq_iff", ["list"]], ["mod", "theorem", "some_nth_le_eq", ["list"]]]}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["mod", "theorem", "nth_le_inj_iff", ["list", "nodup"]], ["mod", "theorem", "nodup_iff_nth_ne_nth", ["list"]]]}]}, {"timestamp": 1655170309, "sha": "659983c6", "message": "feat(logic/equiv/basic): add `Pi_comm` aka `function.swap` as an `equiv` (#14561)", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "Pi_comm", ["equiv"]], ["add", "theorem", "Pi_comm_symm", ["equiv"]]]}]}, {"timestamp": 1655170308, "sha": "18bf7af3", "message": "refactor(algebra/order/monoid): Split field of `canonically_ordered_...` (#14556)\nReplace\n```\n(le_iff_exists_add : ∀ a b : α, a ≤ b ↔ ∃ c, b = a + c)\n```\nby\n```\n(exists_add_of_le : ∀ {a b : α}, a ≤ b → ∃ c, b = a + c)\n(le_self_add : ∀ a b : α, a ≤ a + b)\n```\nThis makes our life easier because\n* We can use existing `has_exists_add_of_le` instances to complete the `exists_add_of_le` field, and detect the missing ones.\n* No need to substitute `b = a + c` every time.", "changes": [{"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": [["add", "theorem", "exists_add_of_le", ["ex_L"]], ["del", "theorem", "le_iff_exists_add", ["ex_L"]], ["add", "theorem", "le_self_add", ["ex_L"]]]}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule/pointwise.lean", "newPath": "src/algebra/module/submodule/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["mod", "theorem", "le_iff_exists_mul'", []], ["mod", "theorem", "le_iff_exists_mul", []], ["mod", "theorem", "le_mul_self", []], ["mod", "theorem", "le_self_mul", []], ["mod", "theorem", "self_le_mul_left", []], ["mod", "theorem", "self_le_mul_right", []]]}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebra/order/pi.lean", "newPath": "src/algebra/order/pi.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/order.lean", "newPath": "src/data/dfinsupp/order.lean", "changes": []}, {"oldPath": "src/data/finsupp/order.lean", "newPath": "src/data/finsupp/order.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/set/semiring.lean", "newPath": "src/data/set/semiring.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1655161716, "sha": "2967fae8", "message": "refactor(data/option/defs): Swap arguments to `option.elim` (#14681)\nMake `option.elim` a non-dependent version of `option.rec` rather than a non-dependent version of `option.rec_on`. Same for `option.melim`.\nThis replaces `option.cons`, and brings `option.elim` in line with `nat.elim`, `sum.elim`, and `iff.elim`.\nIt addresses the TODO comment added in 22c4291217925c6957c0f5a44551c9917b56c7cf.", "changes": [{"oldPath": "src/algebra/big_operators/option.lean", "newPath": "src/algebra/big_operators/option.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/category_theory/category/PartialFun.lean", "newPath": "src/category_theory/category/PartialFun.lean", "changes": [["mod", "def", "Pointed_to_PartialFun", []]]}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["del", "def", "cons", ["option"]], ["del", "theorem", "cons_none_some", ["option"]], ["add", "theorem", "elim_none_some", ["option"]]]}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": [["mod", "def", "melim", ["option"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}]}, {"timestamp": 1655156590, "sha": "425dfe76", "message": "feat(set_theory/game/ordinal): golf `to_pgame_birthday` (#14662)", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}]}, {"timestamp": 1655148073, "sha": "3afafe6b", "message": "doc(ring_theory/algebraic): clarify docstring (#14715)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1655148072, "sha": "b44e742e", "message": "feat(category_theory/limits): realise products as pullbacks (#14322)\nThis was mostly done in #10581, this just adds the isomorphisms between the objects produced by the `has_limit` API.", "changes": [{"oldPath": "src/category_theory/limits/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": [["add", "def", "coprod_iso_pushout", []], ["add", "def", "prod_iso_pullback", []]]}]}, {"timestamp": 1655148071, "sha": "a75460f3", "message": "feat(algebra/module/pid): Classification of finitely generated torsion modules over a PID (#13524)\nA finitely generated torsion module over a PID is isomorphic to a direct sum of some `R ⧸ R ∙ (p i ^ e i)` where the `p i ^ e i` are prime powers.\n(TODO : This part should be generalisable to a Dedekind domain, see https://en.wikipedia.org/wiki/Dedekind_domain#Finitely_generated_modules_over_a_Dedekind_domain . Part of the proof is already generalised).\nMore generally, a finitely generated module over a PID is isomorphic to the product of a free module and a direct sum of some\n`R ⧸ R ∙ (p i ^ e i)`.\n(TODO : prove this decomposition is unique.)\n(TODO : deduce the structure theorem for finite(ly generated) abelian groups).\n- [x] depends on: #13414\n- [x] depends on: #14376 \n- [x] depends on: #14573", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/algebra/big_operators/associated.lean", "newPath": "src/algebra/big_operators/associated.lean", "changes": [["add", "theorem", "finset_prod_mk", ["associates"]]]}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/module/dedekind_domain.lean", "changes": [["add", "theorem", "is_internal_prime_power_torsion", ["submodule"]], ["add", "theorem", "is_internal_prime_power_torsion_of_is_torsion_by_ideal", ["submodule"]]]}, {"oldPath": null, "newPath": "src/algebra/module/pid.lean", "changes": [["add", "theorem", "torsion_of_eq_span_pow_p_order", ["ideal"]], ["add", "theorem", "equiv_direct_sum_of_is_torsion", ["module"]], ["add", "theorem", "equiv_free_prod_direct_sum", ["module"]], ["add", "theorem", "exists_smul_eq_zero_and_mk_eq", ["module"]], ["add", "theorem", "p_pow_smul_lift", ["module"]], ["add", "theorem", "torsion_by_prime_power_decomposition", ["module"]], ["add", "theorem", "is_internal_prime_power_torsion_of_pid", ["submodule"]]]}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": [["del", "theorem", "sup_eq_top_iff_is_coprime", ["ideal"]]]}, {"oldPath": "src/data/multiset/bind.lean", "newPath": "src/data/multiset/bind.lean", "changes": [["add", "theorem", "le_bind", ["multiset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_image_compl_eq_range", ["set"]]]}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": [["add", "def", "liftq_span_singleton", ["submodule"]], ["add", "theorem", "liftq_span_singleton_apply", ["submodule"]], ["add", "theorem", "mkq_surjective", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "sup_eq_top_iff_is_coprime", ["ideal"]]]}]}, {"timestamp": 1655142136, "sha": "3225926b", "message": "feat(category_theory/monoidal): monoidal functors `Type ⥤ C` acting on powers (#14330)", "changes": [{"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": [["add", "def", "map_pi", ["category_theory", "monoidal_functor"]]]}, {"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": [["add", "def", "pi_fin_succ", ["equiv"]]]}]}, {"timestamp": 1655137341, "sha": "6ad27998", "message": "chore(analysis/locally_convex/weak_dual): golf using `seminorm.comp` (#14699)", "changes": [{"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": []}]}, {"timestamp": 1655134683, "sha": "aae786c2", "message": "feat(data/zmod/basic): fix a diamond in comm_ring and field (#14712)\nBefore this change the following diamond existed:\n```lean\nimport data.zmod.basic\nvariables {p : ℕ} [fact p.prime]\nexample :\n @euclidean_domain.to_comm_ring _ (@field.to_euclidean_domain _ (zmod.field p)) = zmod.comm_ring p :=\nrfl\n```\nas the eta-expanded `zmod.comm_ring` was not defeq to itself, as it is defined via cases.\nWe fix this by instead defining each field by cases, which looks worse but at least seems to resolve the issue.\nSee https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/zmod.20comm_ring.20field.20diamond/near/285847071 for discussion", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1655130256, "sha": "aed7f9af", "message": "feat(topology/uniform_space/basic): add three easy lemmas about `uniform_space.comap` (#14678)\nThese are uniform spaces versions of `filter.comap_inf`, `filter.comap_infi` and `filter.comap_mono`. I split them from #14534 which is already a quite big PR.", "changes": [{"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "comap_inf", ["uniform_space"]], ["add", "theorem", "comap_infi", ["uniform_space"]], ["add", "theorem", "comap_mono", ["uniform_space"]]]}]}, {"timestamp": 1655125311, "sha": "b7b371e1", "message": "doc(field_theory/finite/trace): fix module docstring (#14711)\nThis PR just fixes the docstring in `field_theory/finite/trace.lean`. It was still mentioning a definition that was removed.", "changes": [{"oldPath": "src/field_theory/finite/trace.lean", "newPath": "src/field_theory/finite/trace.lean", "changes": []}]}, {"timestamp": 1655125310, "sha": "46ac3cb3", "message": "chore(analysis/complex/upper_half_plane): move to a subdirectory (#14704)\nI'm going to add more files to `analysis/complex/upper_half_plane/` soon.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane.lean", "newPath": "src/analysis/complex/upper_half_plane/basic.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}]}, {"timestamp": 1655120353, "sha": "04019de3", "message": "chore(algebra/big_operators/associated,ring_theory/unique_factorization_domain): golf (#14671)", "changes": [{"oldPath": "src/algebra/big_operators/associated.lean", "newPath": "src/algebra/big_operators/associated.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "factors_unique", ["unique_factorization_monoid"]], ["mod", "theorem", "prime_of_factor", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1655113179, "sha": "b1000376", "message": "refactor(order/conditionally_complete_lattice): use `order_bot` (#14568)\nUse `order_bot` instead of an explicit `c = ⊥` argument in\n`well_founded.conditionally_complete_linear_order_with_bot`. Also\nreuse `linear_order.to_lattice` and add `well_founded.min_le`.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["add", "theorem", "min_le", ["well_founded"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1655113178, "sha": "4b676457", "message": "chore(algebra/ring_quot): provide an explicit npow field (#14349)\nWhile this probably shouldn't matter since `ring_quot` is irreducible, this matches what we do for `nsmul` and `zsmul`.", "changes": [{"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": [["add", "theorem", "pow_quot", ["ring_quot"]]]}]}, {"timestamp": 1655110702, "sha": "716824d3", "message": "feat(set_theory/surreal/dyadic): tweak API + golf (#14649)\nThis PR does the following changes:\n- Get rid of `pgame.half`, as it's def-eq to `pow_half 1`, which has strictly more API.\n- Fix the docstring on `pow_half`, which incorrectly stated `pow_half 0 = 0`.\n- Remove `simp` from some type equality lemmas.\n- Remove the redundant theorems `pow_half_move_left'` and `pow_half_move_right'`.\n- Add instances for left and right moves of `pow_half`. \n- Rename `zero_lt_pow_half` to `pow_half_pos`.\n- Prove `pow_half_le_one` and `pow_half_succ_lt_one`.\n- Make arguments explicit throughout.\n- Golf proofs throughout.", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": [["del", "theorem", "birthday_half", ["pgame"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "def", "half", ["pgame"]], ["del", "theorem", "half_add_half_equiv_one", ["pgame"]], ["del", "theorem", "half_left_moves", ["pgame"]], ["del", "theorem", "half_lt_one", ["pgame"]], ["del", "theorem", "half_move_left", ["pgame"]], ["del", "theorem", "half_move_right", ["pgame"]], ["del", "theorem", "half_right_moves", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["del", "theorem", "numeric_half", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": [["mod", "theorem", "add_pow_half_succ_self_eq_pow_half", ["pgame"]], ["add", "theorem", "birthday_half", ["pgame"]], ["add", "theorem", "half_add_half_equiv_one", ["pgame"]], ["mod", "theorem", "numeric_pow_half", ["pgame"]], ["add", "theorem", "pow_half_le_one", ["pgame"]], ["mod", "theorem", "pow_half_left_moves", ["pgame"]], ["del", "theorem", "pow_half_move_left'", ["pgame"]], ["mod", "theorem", "pow_half_move_left", ["pgame"]], ["del", "theorem", "pow_half_move_right'", ["pgame"]], ["del", "theorem", "pow_half_move_right", ["pgame"]], ["add", "theorem", "pow_half_pos", ["pgame"]], ["del", "theorem", "pow_half_right_moves", ["pgame"]], ["mod", "theorem", "pow_half_succ_le_pow_half", ["pgame"]], ["add", "theorem", "pow_half_succ_lt_one", ["pgame"]], ["mod", "theorem", "pow_half_succ_lt_pow_half", ["pgame"]], ["add", "theorem", "pow_half_succ_move_right", ["pgame"]], ["add", "theorem", "pow_half_succ_right_moves", ["pgame"]], ["add", "theorem", "pow_half_zero", ["pgame"]], ["add", "theorem", "pow_half_zero_right_moves", ["pgame"]], ["mod", "theorem", "zero_le_pow_half", ["pgame"]], ["del", "theorem", "zero_lt_pow_half", ["pgame"]], ["del", "theorem", "add_half_self_eq_one", ["surreal"]], ["mod", "theorem", "double_pow_half_succ_eq_pow_half", ["surreal"]], ["del", "def", "half", ["surreal"]], ["mod", "theorem", "nsmul_pow_two_pow_half'", ["surreal"]], ["mod", "theorem", "nsmul_pow_two_pow_half", ["surreal"]], ["mod", "def", "pow_half", ["surreal"]], ["del", "theorem", "pow_half_one", ["surreal"]]]}]}, {"timestamp": 1655091917, "sha": "dc9eab66", "message": "feat(tactic/lift): generalize pi.can_lift to Sort (#14700)", "changes": [{"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}]}, {"timestamp": 1655066054, "sha": "8fb92bf1", "message": "feat(measure_theory/integral/circle_integral): add lemma `circle_map_nmem_ball` (#14643)\nThe lemma `set.ne_of_mem_nmem` is unrelated except that both of these should be helpful for:\nhttps://github.com/leanprover-community/mathlib/pull/13885", "changes": [{"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": [["add", "theorem", "circle_map_ne_mem_ball", []], ["add", "theorem", "circle_map_not_mem_ball", []]]}]}, {"timestamp": 1655052837, "sha": "d6eb634b", "message": "feat(number_theory/legendre_symbol/auxiliary, *): add/move lemmas in/to various files, delete `auxiliary.lean` (#14572)\nThis is the first PR in a series that will culminate in providing the proof of Quadratic Reciprocity using Gauss sums.\nHere we just add some lemmas to the file `auxiliary.lean` that will be used in new code later.\nWe also generalize the lemmas `neg_one_ne_one_of_char_ne_two` and `neg_ne_self_of_char_ne_two` from finite fields to more general rings.\nSee [this Zulipt topic](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Quadratic.20Hilbert.20symbol.20over.20.E2.84.9A/near/285053214) for more information.\n**CHANGE OF PLAN:** Following the discussion on Zulip linked to above, the lemmas in `auxiliary.lean` are supposed to be moved to there proper places. I have added suggestions to each lemma or group of lemmas (or definitions) what the proper place could be (in some cases, there are alternatives). Please comment if you do not agree or to support one of the alternatives.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "cast_inj_on_of_ring_char_ne_two", ["int"]], ["add", "theorem", "is_square_of_char_two'", []], ["add", "theorem", "eq_self_iff_eq_zero_of_char_ne_two", ["ring"]], ["add", "theorem", "neg_one_ne_one_of_char_ne_two", ["ring"]], ["add", "theorem", "two_ne_zero", ["ring"]]]}, {"oldPath": null, "newPath": "src/algebra/char_p/char_and_card.lean", "changes": [["add", "theorem", "is_unit_iff_not_dvd_char", []], ["add", "theorem", "not_is_unit_prime_of_dvd_card", []], ["add", "theorem", "prime_dvd_char_iff_dvd_card", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "coe_pow_monoid_with_zero_hom", []], ["add", "theorem", "pow_eq_pow_mod", []], ["add", "def", "pow_monoid_with_zero_hom", []], ["add", "theorem", "pow_monoid_with_zero_hom_apply", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "coe_inverse", ["monoid_with_zero"]], ["add", "def", "inverse", ["monoid_with_zero"]], ["add", "theorem", "inverse_apply", ["monoid_with_zero"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "odd_mod_four_iff", ["nat"]]]}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["add", "theorem", "even_card_iff_char_two", ["finite_field"]], ["add", "theorem", "even_card_of_char_two", ["finite_field"]], ["add", "theorem", "exists_nonsquare", ["finite_field"]], ["add", "theorem", "is_square_iff", ["finite_field"]], ["add", "theorem", "is_square_of_char_two", ["finite_field"]], ["add", "theorem", "odd_card_of_char_ne_two", ["finite_field"]], ["add", "theorem", "pow_dichotomy", ["finite_field"]], ["add", "theorem", "unit_is_square_iff", ["finite_field"]]]}, {"oldPath": null, "newPath": "src/field_theory/finite/trace.lean", "changes": [["add", "theorem", "trace_to_zmod_nondegenerate", ["finite_field"]]]}, {"oldPath": "src/number_theory/legendre_symbol/auxiliary.lean", "newPath": null, "changes": [["del", "theorem", "even_card_iff_char_two", ["finite_field"]], ["del", "theorem", "even_card_of_char_two", ["finite_field"]], ["del", "theorem", "exists_nonsquare", ["finite_field"]], ["del", "theorem", "is_square_iff", ["finite_field"]], ["del", "theorem", "is_square_of_char_two", ["finite_field"]], ["del", "theorem", "neg_ne_self_of_char_ne_two", ["finite_field"]], ["del", "theorem", "neg_one_ne_one_of_char_ne_two", ["finite_field"]], ["del", "theorem", "odd_card_of_char_ne_two", ["finite_field"]], ["del", "theorem", "pow_dichotomy", ["finite_field"]], ["del", "theorem", "unit_is_square_iff", ["finite_field"]], ["del", "theorem", "is_square_of_char_two'", []], ["del", "theorem", "odd_mod_four_iff", ["nat"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/zmod_char.lean", "newPath": "src/number_theory/legendre_symbol/zmod_char.lean", "changes": []}]}, {"timestamp": 1655049791, "sha": "97c9ef8c", "message": "chore(measure_theory): use notation `measurable_set[m]` (#14690)", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": []}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": []}]}, {"timestamp": 1655034799, "sha": "8cad81ae", "message": "feat(data/{finset,set}/basic): More `insert` and `erase` lemmas (#14675)\nAlso turn `finset.disjoint_iff_disjoint_coe` around and change `set.finite.to_finset_insert` take `(insert a s).finite` instead of `s.finite`.", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "disjoint_coe", ["finset"]], ["del", "theorem", "disjoint_iff_disjoint_coe", ["finset"]], ["add", "theorem", "erase_cons", ["finset"]], ["add", "theorem", "erase_image_subset_image_erase", ["finset"]], ["add", "theorem", "erase_inj_on'", ["finset"]], ["add", "theorem", "erase_ssubset_insert", ["finset"]], ["add", "theorem", "erase_subset_iff_of_mem", ["finset"]], ["add", "theorem", "filter_inter_distrib", ["finset"]], ["mod", "theorem", "image_inter", ["finset"]], ["add", "theorem", "image_inter_of_inj_on", ["finset"]], ["add", "theorem", "pair_eq_singleton", ["finset"]], ["del", "theorem", "pair_self_eq", ["finset"]], ["add", "theorem", "pairwise_disjoint_coe", ["finset"]], ["add", "theorem", "subset_insert_iff_of_not_mem", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "coe_eq_univ", ["finset"]], ["mod", "theorem", "eq_univ_iff_forall", ["finset"]], ["add", "theorem", "eq_univ_of_forall", ["finset"]], ["add", "theorem", "image_univ_of_surjective", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_idem", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "to_finset_insert'", ["set", "finite"]], ["mod", "theorem", "to_finset_insert", ["set", "finite"]], ["add", "theorem", "to_finset_singleton", ["set", "finite"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_comm", ["set"]], ["add", "theorem", "Inter₂_comm", ["set"]], ["mod", "theorem", "Union_comm", ["set"]], ["add", "theorem", "Union₂_comm", ["set"]]]}, {"oldPath": "src/group_theory/perm/cycle/basic.lean", "newPath": "src/group_theory/perm/cycle/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists₂_comm", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi₂_comm", []], ["add", "theorem", "supr₂_comm", []]]}]}, {"timestamp": 1655032434, "sha": "579d6f9e", "message": "feat(data/polynomial/laurent): Laurent polynomials are a localization of polynomials (#14489)\nThis PR proves the lemma `is_localization (submonoid.closure ({X} : set R[X])) R[T;T⁻¹]`.", "changes": [{"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": [["add", "theorem", "algebra_map_X_pow", ["laurent_polynomial"]], ["add", "theorem", "algebra_map_eq_to_laurent", ["laurent_polynomial"]], ["add", "theorem", "is_localization", ["laurent_polynomial"]]]}]}, {"timestamp": 1655023417, "sha": "4a3b22e5", "message": "feat(number_theory/bernoulli_polynomials): Derivative of Bernoulli polynomial (#14625)\nAdd the statement that the derivative of `bernoulli k x` is `k * bernoulli (k-1) x`. This will be used in a subsequent PR to evaluate the even positive integer values of the Riemann zeta function.", "changes": [{"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": [["add", "theorem", "derivative_bernoulli", ["polynomial"]], ["add", "theorem", "derivative_bernoulli_add_one", ["polynomial"]]]}]}, {"timestamp": 1655012913, "sha": "0926f07a", "message": "feat(data/polynomial/eval): add some lemmas for `comp` (#14346)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "coe_comp_ring_hom", ["polynomial"]], ["add", "theorem", "coe_comp_ring_hom_apply", ["polynomial"]], ["add", "theorem", "list_prod_comp", ["polynomial"]], ["add", "theorem", "multiset_prod_comp", ["polynomial"]], ["mod", "theorem", "prod_comp", ["polynomial"]]]}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}]}, {"timestamp": 1655010583, "sha": "eb063e78", "message": "feat(category_theory/Fintype): equiv_equiv_iso (#13984)\nFrom LTE.", "changes": [{"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": [["add", "def", "equiv_equiv_iso", ["Fintype"]]]}]}, {"timestamp": 1654961423, "sha": "053a03d6", "message": "feat(algebra/char_p): `char_p` of a local ring is zero or prime power (#14461)\nFor a local commutative ring the characteristics is either zero or a prime power.", "changes": [{"oldPath": null, "newPath": "src/algebra/char_p/local_ring.lean", "changes": [["add", "theorem", "char_p_zero_or_prime_power", []]]}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "div_factorization_pos", ["nat"]], ["add", "theorem", "ne_dvd_factorization_div", ["nat"]]]}]}, {"timestamp": 1654957992, "sha": "2e3a0a6e", "message": "feat(analysis/special_functions/log): add `real.log_sqrt` (#14663)", "changes": [{"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "log_sqrt", ["real"]]]}]}, {"timestamp": 1654945590, "sha": "d1a6dd23", "message": "feat(topology/algebra/module/locally_convex): local convexity is preserved by `Inf` and `induced` (#12118)\nI also generalized slightly `locally_convex_space.of_bases` and changed a `Sort*` to `Type*` in `filter.has_basis_infi` to correctly reflect the universe constraints.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "has_basis_infi", ["filter"]]]}, {"oldPath": "src/topology/algebra/module/locally_convex.lean", "newPath": "src/topology/algebra/module/locally_convex.lean", "changes": [["mod", "theorem", "of_bases", ["locally_convex_space"]], ["add", "theorem", "locally_convex_space_Inf", []], ["add", "theorem", "locally_convex_space_induced", []], ["add", "theorem", "locally_convex_space_inf", []], ["add", "theorem", "locally_convex_space_infi", []]]}]}, {"timestamp": 1654937976, "sha": "13b999c4", "message": "feat(algebra/{group,hom}/units): Units in division monoids (#14212)\nCopy over `group_with_zero` lemmas to the more general setting of `division_monoid`.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "mul_left_inj", ["is_unit"]], ["mod", "theorem", "mul_right_inj", ["is_unit"]], ["del", "theorem", "eq_iff_inv_mul", ["units"]], ["del", "theorem", "inv_eq_of_mul_eq_one_right", ["units"]], ["add", "theorem", "inv_mul_eq_one", ["units"]], ["mod", "theorem", "inv_mul_of_eq", ["units"]], ["add", "theorem", "mul_eq_one_iff_eq_inv", ["units"]], ["add", "theorem", "mul_eq_one_iff_inv_eq", ["units"]], ["add", "theorem", "mul_inv_eq_one", ["units"]], ["mod", "theorem", "mul_inv_of_eq", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "divp_eq_div", []]]}, {"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": [["add", "theorem", "divp_eq_div", []], ["mod", "theorem", "coe_lift_right", ["is_unit"]], ["add", "theorem", "div", ["is_unit"]], ["add", "theorem", "inv", ["is_unit"]], ["mod", "theorem", "lift_right_inv_mul", ["is_unit"]], ["mod", "theorem", "map", ["is_unit"]], ["mod", "theorem", "mul_lift_right_inv", ["is_unit"]], ["add", "def", "unit'", ["is_unit"]]]}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}]}, {"timestamp": 1654913415, "sha": "050404af", "message": "feat(group_theory/sylow): Sylow subgroups are Hall subgroups (#14624)\nThis PR adds a lemma stating that Sylow subgroups are Hall subgroups (cardinality is coprime to index).", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "card_coprime_index", ["sylow"]]]}]}, {"timestamp": 1654872629, "sha": "18936e55", "message": "feat(topology/uniform_space/equiv): define uniform isomorphisms (#14537)\nThis adds a new file, mostly copy-pasted from `topology/homeomorph`, to analogously define uniform isomorphisms", "changes": [{"oldPath": "src/data/prod/basic.lean", "newPath": "src/data/prod/basic.lean", "changes": [["mod", "theorem", "id_prod", ["prod"]], ["add", "theorem", "map_id", ["prod"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_subtype_coe", []]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/equiv.lean", "changes": [["add", "def", "to_uniform_equiv_of_uniform_inducing", ["equiv"]], ["add", "theorem", "apply_symm_apply", ["uniform_equiv"]], ["add", "def", "change_inv", ["uniform_equiv"]], ["add", "theorem", "coe_prod_comm", ["uniform_equiv"]], ["add", "theorem", "coe_prod_congr", ["uniform_equiv"]], ["add", "theorem", "coe_punit_prod", ["uniform_equiv"]], ["add", "theorem", "coe_symm_to_equiv", ["uniform_equiv"]], ["add", "theorem", "coe_to_equiv", ["uniform_equiv"]], ["add", "theorem", "comap_eq", ["uniform_equiv"]], ["add", "theorem", "ext", ["uniform_equiv"]], ["add", "def", "fin_two_arrow", ["uniform_equiv"]], ["add", "def", "fun_unique", ["uniform_equiv"]], ["add", "def", "image", ["uniform_equiv"]], ["add", "theorem", "image_preimage", ["uniform_equiv"]], ["add", "theorem", "image_symm", ["uniform_equiv"]], ["add", "theorem", "preimage_image", ["uniform_equiv"]], ["add", "theorem", "preimage_symm", ["uniform_equiv"]], ["add", "def", "prod_assoc", ["uniform_equiv"]], ["add", "def", "prod_comm", ["uniform_equiv"]], ["add", "theorem", "prod_comm_symm", ["uniform_equiv"]], ["add", "def", "prod_congr", ["uniform_equiv"]], ["add", "theorem", "prod_congr_symm", ["uniform_equiv"]], ["add", "def", "prod_punit", ["uniform_equiv"]], ["add", "def", "punit_prod", ["uniform_equiv"]], ["add", "theorem", "range_coe", ["uniform_equiv"]], ["add", "theorem", "refl_symm", ["uniform_equiv"]], ["add", "theorem", "self_comp_symm", ["uniform_equiv"]], ["add", "def", "set_congr", ["uniform_equiv"]], ["add", "def", "apply", ["uniform_equiv", "simps"]], ["add", "def", "symm_apply", ["uniform_equiv", "simps"]], ["add", "theorem", "symm_apply_apply", ["uniform_equiv"]], ["add", "theorem", "symm_comp_self", ["uniform_equiv"]], ["add", "theorem", "to_equiv_injective", ["uniform_equiv"]], ["add", "theorem", "trans_apply", ["uniform_equiv"]], ["add", "theorem", "uniform_equiv_mk_coe", ["uniform_equiv"]], ["add", "theorem", "uniform_equiv_mk_coe_symm", ["uniform_equiv"]], ["add", "def", "{u}", ["uniform_equiv"]], ["add", "structure", "uniform_equiv", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "uniform_inducing_id", []], ["add", "theorem", "uniform_inducing_of_compose", []]]}]}, {"timestamp": 1654865731, "sha": "8c812fd4", "message": "feat(topology/algebra/order): `coe : ℚ → 𝕜` has dense range (#14635)\n* add `rat.dense_range_cast`, use it in `rat.dense_embedding_coe_real`;\n* rename `dense_iff_forall_lt_exists_mem` to `dense_iff_exists_between`;\n* add `dense_of_exists_between`, use it in `dense_iff_exists_between`.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/order/archimedean.lean", "changes": [["add", "theorem", "dense_range_cast", ["rat"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "dense_iff_exists_between", []], ["del", "theorem", "dense_iff_forall_lt_exists_mem", []], ["add", "theorem", "dense_of_exists_between", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/rat.lean", "newPath": "src/topology/instances/rat.lean", "changes": []}]}, {"timestamp": 1654865730, "sha": "0f5a1f22", "message": "feat(data/rat): Add some lemmas to work with num/denom (#14456)", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "add_num_denom'", ["rat"]], ["add", "theorem", "coe_int_div_eq_mk", ["rat"]], ["add", "theorem", "mk_div_mk_cancel_left", ["rat"]], ["add", "theorem", "mk_div_mk_cancel_right", ["rat"]], ["add", "theorem", "mk_mul_mk_cancel", ["rat"]], ["add", "theorem", "mul_num_denom'", ["rat"]], ["add", "theorem", "substr_num_denom'", ["rat"]]]}]}, {"timestamp": 1654857790, "sha": "95da6493", "message": "feat(analysis/inner_product_space): Generalize Gram-Schmidt (#14379)\nThe generalisation is to allow a family of vectors indexed by a general indexing set `ι` (carrying appropriate order typeclasses) rather than just `ℕ`.", "changes": [{"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/tagged.lean", "newPath": "src/analysis/box_integral/partition/tagged.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": [["mod", "theorem", "gram_schmidt_def'", []], ["mod", "theorem", "gram_schmidt_def", []], ["del", "theorem", "gram_schmidt_ne_zero'", []], ["mod", "theorem", "gram_schmidt_ne_zero", []], ["add", "theorem", "gram_schmidt_ne_zero_coe", []], ["del", "theorem", "gram_schmidt_normed_unit_length'", []], ["mod", "theorem", "gram_schmidt_normed_unit_length", []], ["add", "theorem", "gram_schmidt_normed_unit_length_coe", []], ["mod", "theorem", "gram_schmidt_orthogonal", []], ["mod", "theorem", "gram_schmidt_orthonormal", []], ["mod", "theorem", "gram_schmidt_pairwise_orthogonal", []], ["mod", "theorem", "gram_schmidt_zero", []], ["mod", "theorem", "span_gram_schmidt", []]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["del", "theorem", "sup_le_iff", ["finset"]]]}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "def", "to_has_well_founded", ["is_well_order"]]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "Ioi_pred_eq_insert_of_not_is_min", ["order"]]]}]}, {"timestamp": 1654855490, "sha": "391d1780", "message": "feat(set_theory/game/ordinal): golf `to_pgame_injective` (#14661)\nWe also add the `eq_iff` version and remove an outdated todo comment.", "changes": [{"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": [["add", "theorem", "to_pgame_eq_iff", ["ordinal"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "equiv_of_eq", ["pgame"]]]}]}, {"timestamp": 1654855489, "sha": "68dc07f6", "message": "refactor(set_theory/game/pgame): rename and add theorems like `-y ≤ -x ↔ x ≤ y` (#14653)\nFor `*` in `le`, `lf`, `lt`, we rename `neg_*_iff : -y * -x ↔ x * y` to `neg_*_neg_iff`, and add the theorems `neg_*_iff : -y * x ↔ x * -y`.\nWe further add many missing corresponding theorems for equivalence and fuzziness.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "le_neg_iff", ["pgame"]], ["add", "theorem", "lf_neg_iff", ["pgame"]], ["add", "theorem", "lt_neg_iff", ["pgame"]], ["del", "theorem", "neg_congr", ["pgame"]], ["add", "theorem", "neg_equiv_iff", ["pgame"]], ["add", "theorem", "neg_equiv_neg_iff", ["pgame"]], ["add", "theorem", "neg_equiv_zero_iff", ["pgame"]], ["add", "theorem", "neg_fuzzy_iff", ["pgame"]], ["add", "theorem", "neg_fuzzy_neg_iff", ["pgame"]], ["add", "theorem", "neg_fuzzy_zero_iff", ["pgame"]], ["mod", "theorem", "neg_le_iff", ["pgame"]], ["add", "theorem", "neg_le_neg_iff", ["pgame"]], ["mod", "theorem", "neg_lf_iff", ["pgame"]], ["add", "theorem", "neg_lf_neg_iff", ["pgame"]], ["mod", "theorem", "neg_lt_iff", ["pgame"]], ["add", "theorem", "neg_lt_neg_iff", ["pgame"]], ["add", "theorem", "zero_equiv_neg_iff", ["pgame"]], ["add", "theorem", "zero_fuzzy_neg_iff", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}]}, {"timestamp": 1654846617, "sha": "a9123922", "message": "feat(data/fintype/basic): add `card_subtype_mono` (#14645)\nThis lemma naturally forms a counterpart to existing lemmas.\nI've also renamed a lemma it uses that didn't seem to fit the existing naming pattern.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_subtype_mono", []]]}]}, {"timestamp": 1654846616, "sha": "771f2b7b", "message": "chore(topology/metric_space/basic): add `metric_space.replace_bornology` (#14638)\nWe have the `pseudo_metric_space` version from #13927, but not the `metric_space` version.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "def", "replace_bornology", ["metric_space"]], ["add", "theorem", "replace_bornology_eq", ["metric_space"]]]}]}, {"timestamp": 1654846615, "sha": "5bccb515", "message": "refactor(logic/equiv/basic): tweak lemmas on equivalences between `unique` types (#14605)\nThis PR does various simple and highly related things:\n- Rename `equiv_of_unique_of_unique` to `equiv_of_unique` and make its arguments explicit, in order to match the lemma `equiv_of_empty` added in #14604. \n- Rename `equiv_punit_of_unique` to `equiv_punit` and make its argument explicit to match `equiv_pempty`.\n- Fix their docstrings (which talked about a `subsingleton` type instead of a `unique` one).\n- Move them much earlier in the file, together with the lemmas on empty types.\n- Golf `prop_equiv_punit`.", "changes": [{"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "equiv_of_unique", ["equiv"]], ["add", "def", "equiv_punit", ["equiv"]], ["del", "def", "true_equiv_punit", ["equiv"]], ["del", "def", "equiv_of_unique_of_unique", []], ["del", "def", "equiv_punit_of_unique", []]]}, {"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}]}, {"timestamp": 1654846613, "sha": "76918216", "message": "feat(data/polynomial/derivative): reduce assumptions (#14338)\nThe only changes here are to relax typeclass assumptions.\nSpecifically these changes relax `comm_semiring` to `semiring` in:\n * polynomial.derivative_eval\n * polynomial.derivative_map\n * polynomial.iterate_derivative_map\n * polynomial.iterate_derivative_cast_nat_mul\nand relax `ring` to `semiring` as well as `char_zero` + `no_zero_divisors` to `no_zero_smul_divisors ℕ` in:\n * polynomial.mem_support_derivative\n * polynomial.degree_derivative_eq", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["mod", "theorem", "degree_derivative_eq", ["polynomial"]], ["mod", "theorem", "derivative_map", ["polynomial"]], ["mod", "theorem", "iterate_derivative_map", ["polynomial"]], ["mod", "theorem", "mem_support_derivative", ["polynomial"]]]}]}, {"timestamp": 1654846612, "sha": "39184f40", "message": "feat(dynamics/periodic_pts): Orbit under periodic function (#12976)", "changes": [{"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "eq_iff_lt_minimal_period_of_iterate_eq", ["function"]], ["add", "theorem", "eq_of_lt_minimal_period_of_iterate_eq", ["function"]], ["mod", "theorem", "minimal_period_dvd", ["function", "is_periodic_pt"]], ["mod", "theorem", "is_periodic_pt_iff_minimal_period_dvd", ["function"]], ["mod", "theorem", "is_periodic_pt_minimal_period", ["function"]], ["add", "theorem", "iterate_add_minimal_period_eq", ["function"]], ["del", "theorem", "iterate_eq_mod_minimal_period", ["function"]], ["del", "theorem", "iterate_injective_of_lt_minimal_period", ["function"]], ["add", "theorem", "iterate_mem_periodic_orbit", ["function"]], ["mod", "theorem", "iterate_minimal_period", ["function"]], ["add", "theorem", "iterate_mod_minimal_period_eq", ["function"]], ["add", "theorem", "le_of_lt_minimal_period_of_iterate_eq", ["function"]], ["add", "theorem", "mem_periodic_orbit_iff", ["function"]], ["add", "theorem", "minimal_period_apply", ["function"]], ["add", "theorem", "minimal_period_apply_iterate", ["function"]], ["add", "theorem", "minimal_period_eq_zero_iff_nmem_periodic_pts", ["function"]], ["add", "theorem", "minimal_period_eq_zero_of_nmem_periodic_pts", ["function"]], ["add", "theorem", "nodup_periodic_orbit", ["function"]], ["add", "def", "periodic_orbit", ["function"]], ["add", "theorem", "periodic_orbit_apply_eq", ["function"]], ["add", "theorem", "periodic_orbit_apply_iterate_eq", ["function"]], ["add", "theorem", "periodic_orbit_def", ["function"]], ["add", "theorem", "periodic_orbit_eq_cycle_map", ["function"]], ["add", "theorem", "periodic_orbit_eq_nil_iff_not_periodic_pt", ["function"]], ["add", "theorem", "periodic_orbit_eq_nil_of_not_periodic_pt", ["function"]], ["add", "theorem", "periodic_orbit_length", ["function"]], ["add", "theorem", "self_mem_periodic_orbit", ["function"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1654838780, "sha": "e3dade35", "message": "feat(data/finite/basic): `finite` predicate (#14373)\nIntroduces a `Prop`-valued finiteness predicate on types and adapts some subset of the `fintype` API to get started. Uses `nat.card` as the primary cardinality function.", "changes": [{"oldPath": null, "newPath": "src/data/finite/basic.lean", "changes": [["add", "theorem", "finite_iff", ["equiv"]], ["add", "theorem", "card_eq", ["finite"]], ["add", "theorem", "card_eq_zero_iff", ["finite"]], ["add", "theorem", "card_le_of_embedding", ["finite"]], ["add", "theorem", "card_le_of_injective", ["finite"]], ["add", "theorem", "card_le_of_surjective", ["finite"]], ["add", "theorem", "card_le_one_iff_subsingleton", ["finite"]], ["add", "theorem", "card_option", ["finite"]], ["add", "theorem", "card_pos_iff", ["finite"]], ["add", "theorem", "card_subtype_le", ["finite"]], ["add", "theorem", "card_subtype_lt", ["finite"]], ["add", "theorem", "card_sum", ["finite"]], ["add", "def", "equiv_fin", ["finite"]], ["add", "def", "equiv_fin_of_card_eq", ["finite"]], ["add", "theorem", "exists_equiv_fin", ["finite"]], ["add", "theorem", "exists_max", ["finite"]], ["add", "theorem", "exists_min", ["finite"]], ["add", "theorem", "of_bijective", ["finite"]], ["add", "theorem", "of_equiv", ["finite"]], ["add", "theorem", "of_fintype", ["finite"]], ["add", "theorem", "of_injective", ["finite"]], ["add", "theorem", "of_not_infinite", ["finite"]], ["add", "theorem", "of_surjective", ["finite"]], ["add", "theorem", "one_lt_card", ["finite"]], ["add", "theorem", "one_lt_card_iff_nontrivial", ["finite"]], ["add", "theorem", "prod_left", ["finite"]], ["add", "theorem", "prod_right", ["finite"]], ["add", "theorem", "sum_left", ["finite"]], ["add", "theorem", "sum_right", ["finite"]], ["add", "theorem", "finite_iff_nonempty_fintype", []], ["add", "theorem", "finite_or_infinite", []], ["add", "def", "of_finite", ["fintype"]], ["add", "theorem", "of_not_finite", ["infinite"]], ["add", "theorem", "card_eq", ["nat"]], ["add", "theorem", "not_finite", []], ["add", "theorem", "not_finite_iff_infinite", []], ["add", "theorem", "not_infinite_iff_finite", []], ["add", "theorem", "of_subsingleton", []]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "unique_iff_subsingleton_and_nonempty", []]]}, {"oldPath": "src/set_theory/cardinal/finite.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": [["add", "theorem", "card_congr", ["nat"]], ["add", "theorem", "card_eq_of_bijective", ["nat"]], ["add", "theorem", "card_eq_of_equiv_fin", ["nat"]], ["add", "theorem", "card_eq_one_iff_unique", ["nat"]], ["add", "theorem", "card_of_is_empty", ["nat"]], ["add", "theorem", "card_of_subsingleton", ["nat"]], ["add", "theorem", "card_plift", ["nat"]], ["add", "theorem", "card_prod", ["nat"]], ["add", "theorem", "card_ulift", ["nat"]], ["add", "theorem", "card_unique", ["nat"]], ["add", "def", "equiv_fin_of_card_pos", ["nat"]]]}]}, {"timestamp": 1654835563, "sha": "e9d25648", "message": "chore(measure_theory): golf (#14657)\nAlso use `@measurable_set α m s` instead of `m.measurable_set' s` in the definition of the partial order on `measurable_space`. This way we can use dot notation lemmas about measurable sets in a proof of `m₁ ≤ m₂`.", "changes": [{"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}]}, {"timestamp": 1654826647, "sha": "ed2cfce8", "message": "feat(set_theory/ordinal/basic): tweak theorems on order type of empty relation (#14650)\nWe move the theorems on the order type of an empty relation much earlier, and golf them. We also remove other redundant theorems.\n`zero_eq_type_empty` is made redundant by `type_eq_zero_of_empty`, while `zero_eq_lift_type_empty` is made redundant by the former lemma and `lift_zero`.", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "rel_iso_of_is_empty", ["rel_iso"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "theorem", "type_eq_zero_iff_is_empty", ["ordinal"]], ["del", "theorem", "type_eq_zero_of_empty", ["ordinal"]], ["del", "theorem", "type_ne_zero_iff_nonempty", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "type_eq_zero_iff_is_empty", ["ordinal"]], ["add", "theorem", "type_eq_zero_of_empty", ["ordinal"]], ["add", "theorem", "type_ne_zero_iff_nonempty", ["ordinal"]], ["add", "theorem", "type_ne_zero_of_nonempty", ["ordinal"]], ["del", "theorem", "zero_eq_lift_type_empty", ["ordinal"]], ["del", "theorem", "zero_eq_type_empty", ["ordinal"]]]}]}, {"timestamp": 1654819192, "sha": "2cf4746b", "message": "chore(analysis/special_functions/gamma): tidy some proofs (#14615)", "changes": [{"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": []}]}, {"timestamp": 1654819191, "sha": "3afb1fa1", "message": "feat(ci): Add support for \"notice\"-level messages (#14443)\nIt looks like support for this was added recently, it's now documented at the same link already in our source code.", "changes": [{"oldPath": "scripts/detect_errors.py", "newPath": "scripts/detect_errors.py", "changes": []}]}, {"timestamp": 1654813493, "sha": "6e136177", "message": "feat(set_theory/ordinal/basic): better definitions for `0` and `1` (#14651)\nWe define the `0` and `1` ordinals as the order types of the empty relation on `pempty` and `punit`, respectively. These definitions are definitionally equal to the previous ones, yet much clearer, for two reasons:\n- They don't make use of the auxiliary `Well_order` type. \n- Much of the basic API for these ordinals uses this def-eq anyways.", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1654813492, "sha": "c89d3194", "message": "feat(set_theory/cardinal): add `cardinal.aleph_0_le_mul_iff'` (#14648)\nThis version provides a more useful `iff.mpr`. Also review 2 proofs.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "aleph_0_le_mul_iff'", ["cardinal"]]]}]}, {"timestamp": 1654813491, "sha": "405be36f", "message": "feat(data/matrix): Lemmas about `vec_mul`, `mul_vec`, `dot_product`, `inv` (#14644)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "dot_product_assoc", ["matrix"]], ["add", "theorem", "mul_vec_vec_mul", ["matrix"]], ["add", "theorem", "sub_mul_vec", ["matrix"]], ["add", "theorem", "sum_elim_dot_product_sum_elim", ["matrix"]], ["add", "theorem", "vec_mul_mul_vec", ["matrix"]], ["add", "theorem", "vec_mul_sub", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "from_blocks_mul_vec", ["matrix"]], ["add", "theorem", "vec_mul_from_blocks", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "inv_mul_cancel_left_of_invertible", ["matrix"]], ["add", "theorem", "inv_mul_cancel_right_of_invertible", ["matrix"]], ["add", "theorem", "mul_inv_cancel_left_of_invertible", ["matrix"]], ["add", "theorem", "mul_inv_cancel_right_of_invertible", ["matrix"]], ["add", "theorem", "mul_nonsing_inv_cancel_left", ["matrix"]], ["add", "theorem", "mul_nonsing_inv_cancel_right", ["matrix"]], ["add", "theorem", "nonsing_inv_mul_cancel_left", ["matrix"]], ["add", "theorem", "nonsing_inv_mul_cancel_right", ["matrix"]]]}]}, {"timestamp": 1654813490, "sha": "3e458e23", "message": "chore(topology/sequences): rename variables (#14631)\n* types `X`, `Y`;\n* sequence `x : ℕ → X`;\n* a point `a : X`;\n* sets `s`, `t`.", "changes": [{"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["mod", "theorem", "tendsto_subseq", ["compact_space"]], ["mod", "theorem", "continuous_iff_seq_continuous", []], ["mod", "theorem", "is_seq_closed", ["is_closed"]], ["mod", "theorem", "is_seq_compact", ["is_compact"]], ["mod", "theorem", "tendsto_subseq'", ["is_compact"]], ["mod", "theorem", "tendsto_subseq", ["is_compact"]], ["mod", "theorem", "mem_of_tendsto", ["is_seq_closed"]], ["mod", "def", "is_seq_closed", []], ["mod", "theorem", "is_seq_closed_iff_is_closed", []], ["mod", "theorem", "is_seq_closed_of_def", []], ["mod", "theorem", "subseq_of_frequently_in", ["is_seq_compact"]], ["mod", "def", "is_seq_compact", []], ["mod", "theorem", "lebesgue_number_lemma_seq", []], ["mod", "theorem", "mem_closure_iff_seq_limit", []], ["mod", "def", "seq_closure", []], ["mod", "theorem", "seq_closure_subset_closure", []], ["mod", "theorem", "lebesgue_number_lemma_of_metric", ["seq_compact"]], ["mod", "theorem", "tendsto_subseq", ["seq_compact_space"]], ["mod", "def", "seq_continuous", []], ["mod", "theorem", "subset_seq_closure", []], ["mod", "theorem", "tendsto_subseq_of_bounded", []], ["mod", "theorem", "compact_space_iff_seq_compact_space", ["uniform_space"]]]}]}, {"timestamp": 1654803928, "sha": "81ab992e", "message": "chore(set_theory/cardinal/basic): tidy lt_wf proof (#14574)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1654803927, "sha": "34a9d0df", "message": "feat(algebra/order/ring): Binary rearrangement inequality (#14478)\nExtract the binary case of the rearrangement inequality (`a * d + b * c ≤ a * c + b * d` if `a ≤ b` and `c ≤ d`) from the general one.", "changes": [{"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": [["add", "theorem", "smul_add_smul_le_smul_add_smul'", []], ["add", "theorem", "smul_add_smul_le_smul_add_smul", []], ["add", "theorem", "smul_add_smul_lt_smul_add_smul'", []], ["add", "theorem", "smul_add_smul_lt_smul_add_smul", []]]}, {"oldPath": "src/algebra/order/rearrangement.lean", "newPath": "src/algebra/order/rearrangement.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "mul_add_mul_le_mul_add_mul'", []], ["add", "theorem", "mul_add_mul_le_mul_add_mul", []], ["add", "theorem", "mul_add_mul_lt_mul_add_mul'", []], ["add", "theorem", "mul_add_mul_lt_mul_add_mul", []]]}]}, {"timestamp": 1654803925, "sha": "7fbff0f7", "message": "feat(data/nat/choose/central): arity of primes in central binomial coefficients (#14017)\nSpun off of #8002. Lemmas about the arity of primes in central binomial coefficients.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/data/nat/choose/central.lean", "newPath": "src/data/nat/choose/central.lean", "changes": [["del", "theorem", "padic_val_nat_central_binom_le", ["nat"]], ["del", "theorem", "padic_val_nat_central_binom_of_large_eq_zero", ["nat"]], ["del", "theorem", "padic_val_nat_central_binom_of_large_le_one", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/choose/factorization.lean", "changes": [["add", "theorem", "factorization_central_binom_eq_zero_of_two_mul_lt", ["nat"]], ["add", "theorem", "factorization_central_binom_of_two_mul_self_lt_three_mul", ["nat"]], ["add", "theorem", "factorization_choose_eq_zero_of_lt", ["nat"]], ["add", "theorem", "factorization_choose_le_log", ["nat"]], ["add", "theorem", "factorization_choose_le_one", ["nat"]], ["add", "theorem", "factorization_choose_of_lt_three_mul", ["nat"]], ["add", "theorem", "factorization_factorial_eq_zero_of_lt", ["nat"]], ["add", "theorem", "le_two_mul_of_factorization_central_binom_pos", ["nat"]], ["add", "theorem", "pow_factorization_choose_le", ["nat"]]]}, {"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "factorization_eq_zero_of_lt", ["nat"]]]}]}, {"timestamp": 1654798367, "sha": "4d4de43e", "message": "chore(ring_theory/unique_factorization_domain): drop simp annotation for factors_pow (#14646)\nFollowup to https://github.com/leanprover-community/mathlib/pull/14555.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "factors_pow", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1654798366, "sha": "7b4680fe", "message": "feat(analysis/inner_product_space/pi_L2): Distance formula in the euclidean space (#14642)\nA few missing results about `pi_Lp 2` and `euclidean_space`.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "dist_eq", ["euclidean_space"]], ["add", "theorem", "edist_eq", ["euclidean_space"]], ["add", "theorem", "nndist_eq", ["euclidean_space"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "dist_eq_of_L2", ["pi_Lp"]], ["add", "theorem", "edist_eq_of_L2", ["pi_Lp"]], ["add", "theorem", "nndist_eq_of_L2", ["pi_Lp"]]]}]}, {"timestamp": 1654798365, "sha": "ac0ce64c", "message": "feat(special_functions/integrals): exponential of complex multiple of x (#14623)\nWe add an integral for `exp (c * x)` for `c` complex (so this cannot be reduced to integration of `exp x` on the real line). This is useful for Fourier series.", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_exp_mul_complex", []]]}]}, {"timestamp": 1654789107, "sha": "abee6498", "message": "feat(data/set/intervals): add lemmas about unions of intervals (#14636)", "changes": [{"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": [["add", "theorem", "Union_Icc_left", ["set"]], ["add", "theorem", "Union_Icc_right", ["set"]], ["add", "theorem", "Union_Ici", ["set"]], ["add", "theorem", "Union_Ico_left", ["set"]], ["add", "theorem", "Union_Ico_right", ["set"]], ["add", "theorem", "Union_Iic", ["set"]], ["add", "theorem", "Union_Iio", ["set"]], ["add", "theorem", "Union_Ioc_left", ["set"]], ["add", "theorem", "Union_Ioc_right", ["set"]], ["add", "theorem", "Union_Ioi", ["set"]], ["add", "theorem", "Union_Ioo_left", ["set"]], ["add", "theorem", "Union_Ioo_right", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_union", ["set"]]]}]}, {"timestamp": 1654789106, "sha": "e0f3ea31", "message": "feat(topology/constructions): add `subtype.dense_iff` (#14632)\nAlso add `inducing.dense_iff`.", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "dense_iff", ["subtype"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "dense_iff", ["inducing"]]]}]}, {"timestamp": 1654789105, "sha": "48f557d5", "message": "chore(analysis/convex/integral): use `variables` (#14592)\n* Move some implicit arguments to `variables`.\n* Move `ae_eq_const_or_exists_average_ne_compl` to the root namespace.\n* Add `ae_eq_const_or_norm_set_integral_lt_of_norm_le_const`.", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["add", "theorem", "ae_eq_const_or_exists_average_ne_compl", []], ["add", "theorem", "ae_eq_const_or_norm_set_integral_lt_of_norm_le_const", []], ["mod", "theorem", "average_mem_hypograph", ["concave_on"]], ["mod", "theorem", "le_map_average", ["concave_on"]], ["mod", "theorem", "le_map_integral", ["concave_on"]], ["mod", "theorem", "le_map_set_average", ["concave_on"]], ["mod", "theorem", "set_average_mem_hypograph", ["concave_on"]], ["mod", "theorem", "average_mem", ["convex"]], ["mod", "theorem", "average_mem_interior_of_set", ["convex"]], ["mod", "theorem", "integral_mem", ["convex"]], ["mod", "theorem", "set_average_mem", ["convex"]], ["mod", "theorem", "set_average_mem_closure", ["convex"]], ["mod", "theorem", "average_mem_epigraph", ["convex_on"]], ["mod", "theorem", "map_average_le", ["convex_on"]], ["mod", "theorem", "map_integral_le", ["convex_on"]], ["mod", "theorem", "map_set_average_le", ["convex_on"]], ["mod", "theorem", "set_average_mem_epigraph", ["convex_on"]], ["del", "theorem", "ae_eq_const_or_exists_average_ne_compl", ["measure_theory", "integrable"]], ["mod", "theorem", "ae_eq_const_or_lt_map_average", ["strict_concave_on"]], ["mod", "theorem", "ae_eq_const_or_average_mem_interior", ["strict_convex"]], ["mod", "theorem", "ae_eq_const_or_map_average_lt", ["strict_convex_on"]]]}]}, {"timestamp": 1654781245, "sha": "c0b3ed79", "message": "feat(number_theory/padics/padic_val): add `padic_val_nat_def'` and generalise `pow_padic_val_nat_dvd` (#14637)\nadd `padic_val_nat_def' (hn : 0 < n) (hp : p ≠ 1) : ↑(padic_val_nat p n) = multiplicity p n`\n`pow_padic_val_nat_dvd : p ^ (padic_val_nat p n) ∣ n` holds without the assumption that `p` is prime.", "changes": [{"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": [["add", "theorem", "padic_val_nat_def'", []], ["mod", "theorem", "pow_padic_val_nat_dvd", []], ["mod", "theorem", "range_pow_padic_val_nat_subset_divisors", []]]}]}, {"timestamp": 1654781243, "sha": "dc766dd4", "message": "refactor(group_theory/sylow): Golf proof of `pow_dvd_card_of_pow_dvd_card` (#14622)\nThis PR golfs the proof of `pow_dvd_card_of_pow_dvd_card`.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "pow_dvd_card_of_pow_dvd_card", ["sylow"]]]}]}, {"timestamp": 1654781242, "sha": "cde6e632", "message": "feat(analysis/seminorm): removed unnecessary `norm_one_class` arguments (#14614)", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["mod", "theorem", "balanced_ball_zero", []], ["mod", "theorem", "le_insert'", ["seminorm"]], ["mod", "theorem", "le_insert", ["seminorm"]], ["mod", "theorem", "nonneg", ["seminorm"]], ["mod", "theorem", "sub_rev", ["seminorm"]]]}]}, {"timestamp": 1654781241, "sha": "d997baa4", "message": "refactor(logic/equiv/basic): remove `fin_equiv_subtype` (#14603)\nThe types `fin n` and `{m // m < n}` are definitionally equal, so it doesn't make sense to have a dedicated equivalence between them (other than `equiv.refl`). We remove this equivalence and golf the places where it was used.", "changes": [{"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/logic/encodable/basic.lean", "newPath": "src/logic/encodable/basic.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["del", "def", "fin_equiv_subtype", ["equiv"]]]}]}, {"timestamp": 1654781240, "sha": "c2bb59e5", "message": "feat(algebra/module/torsion.lean): various lemmas about torsion modules (#14573)\nAn intermediate PR for various lemmas about torsion modules needed at #13524", "changes": [{"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": [["add", "theorem", "mem_torsion_of_iff", ["ideal"]], ["add", "theorem", "quot_torsion_of_equiv_span_singleton_apply_mk", ["ideal"]], ["add", "theorem", "sup_eq_top_iff_is_coprime", ["ideal"]], ["add", "def", "torsion_of", ["ideal"]], ["del", "theorem", "mem_torsion_of_iff", []], ["add", "theorem", "is_torsion_by_iff_torsion_by_eq_top", ["module"]], ["add", "theorem", "is_torsion_by_set_iff_is_torsion_by_span", ["module"]], ["add", "theorem", "is_torsion_by_set_iff_torsion_by_set_eq_top", ["module"]], ["add", "theorem", "is_torsion_by_singleton_iff", ["module"]], ["add", "theorem", "is_torsion_by_span_singleton_iff", ["module"]], ["del", "theorem", "quot_torsion_of_equiv_span_singleton_apply_mk", []], ["add", "theorem", "exists_is_torsion_by", ["submodule"]], ["add", "theorem", "is_torsion_by_ideal_of_finite_of_is_torsion", ["submodule"]], ["del", "theorem", "is_torsion_by_iff_torsion_by_eq_top", ["submodule"]], ["del", "theorem", "is_torsion_by_set_iff_is_torsion_by_span", ["submodule"]], ["del", "theorem", "is_torsion_by_set_iff_torsion_by_set_eq_top", ["submodule"]], ["del", "theorem", "is_torsion_by_singleton_iff", ["submodule"]], ["del", "theorem", "is_torsion_by_span_singleton_iff", ["submodule"]], ["add", "def", "p_order", ["submodule"]], ["add", "theorem", "pow_p_order_smul", ["submodule"]], ["add", "theorem", "sup_indep_torsion_by", ["submodule"]], ["add", "theorem", "sup_indep_torsion_by_ideal", ["submodule"]], ["add", "theorem", "supr_torsion_by_ideal_eq_torsion_by_infi", ["submodule"]], ["del", "theorem", "torsion_by_independent", ["submodule"]], ["add", "theorem", "torsion_by_is_internal", ["submodule"]], ["add", "theorem", "torsion_by_set_is_internal", ["submodule"]], ["add", "theorem", "torsion_gc", ["submodule"]], ["del", "theorem", "torsion_is_internal", ["submodule"]], ["del", "def", "torsion_of", []]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "prod_mem_prod", ["ideal"]]]}]}, {"timestamp": 1654781239, "sha": "dfc54a3a", "message": "feat(combinatorics/ballot): the Ballot problem (#13592)", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/30_ballot_problem.lean", "changes": [["add", "theorem", "ballot_edge", ["ballot"]], ["add", "theorem", "ballot_neg", ["ballot"]], ["add", "theorem", "ballot_pos", ["ballot"]], ["add", "theorem", "ballot_problem'", ["ballot"]], ["add", "theorem", "ballot_problem", ["ballot"]], ["add", "theorem", "ballot_same", ["ballot"]], ["add", "theorem", "count_counted_sequence", ["ballot"]], ["add", "theorem", "counted_left_zero", ["ballot"]], ["add", "theorem", "counted_ne_nil_left", ["ballot"]], ["add", "theorem", "counted_ne_nil_right", ["ballot"]], ["add", "theorem", "counted_right_zero", ["ballot"]], ["add", "def", "counted_sequence", ["ballot"]], ["add", "theorem", "counted_sequence_finite", ["ballot"]], ["add", "theorem", "counted_sequence_int_neg_counted_succ_succ", ["ballot"]], ["add", "theorem", "counted_sequence_int_pos_counted_succ_succ", ["ballot"]], ["add", "theorem", "counted_sequence_nonempty", ["ballot"]], ["add", "theorem", "counted_succ_succ", ["ballot"]], ["add", "theorem", "disjoint_bits", ["ballot"]], ["add", "theorem", "first_vote_neg", ["ballot"]], ["add", "theorem", "first_vote_pos", ["ballot"]], ["add", "theorem", "head_mem_of_nonempty", ["ballot"]], ["add", "theorem", "length_of_mem_counted_sequence", ["ballot"]], ["add", "theorem", "mem_of_mem_counted_sequence", ["ballot"]], ["add", "def", "stays_positive", ["ballot"]], ["add", "theorem", "stays_positive_cons_pos", ["ballot"]], ["add", "theorem", "stays_positive_nil", ["ballot"]], ["add", "theorem", "sum_of_mem_counted_sequence", ["ballot"]]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/list/infix.lean", "newPath": "src/data/list/infix.lean", "changes": [["add", "theorem", "mem_of_mem_suffix", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "diag_induction", ["nat"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "div_eq_div_iff", ["ennreal"]], ["add", "theorem", "eq_div_iff", ["ennreal"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "count_injective_image", ["measure_theory", "measure"]]]}, {"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": [["mod", "theorem", "cond_count_add_compl_eq", ["probability_theory"]], ["mod", "theorem", "cond_count_compl", ["probability_theory"]]]}]}, {"timestamp": 1654775076, "sha": "d51aacbd", "message": "feat(ring_theory/unique_factorization_domain): add some lemmas about … (#14555)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "factors_mul", ["unique_factorization_monoid"]], ["add", "theorem", "factors_one", ["unique_factorization_monoid"]], ["add", "theorem", "factors_pow", ["unique_factorization_monoid"]], ["add", "theorem", "factors_zero", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1654768711, "sha": "dc2f6bb9", "message": "chore(topology/metric_space): remove instances that duplicate lemmas (#14639)\nWe can use the structure projections directly as instances, rather than duplicating them with primed names. This removes;\n* `metric_space.to_uniform_space'` (was misnamed, now `pseudo_metric_space.to_uniform_space`)\n* `pseudo_metric_space.to_bornology'` (now `pseudo_metric_space.to_bornology`)\n* `pseudo_emetric_space.to_uniform_space'` (now `pseudo_metric_space.to_uniform_space`)\n* `emetric_space.to_uniform_space'` (redundant)\nFollows up from review comments in #13927", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}]}, {"timestamp": 1654768710, "sha": "bc7b3425", "message": "feat(topology/metric_space/basic): add lemma `exists_lt_mem_ball_of_mem_ball` (#14627)\nThis is apparently necessary in https://github.com/leanprover-community/mathlib/pull/13885", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "exists_lt_mem_ball_of_mem_ball", ["metric"]]]}]}, {"timestamp": 1654768709, "sha": "6a1ce4e8", "message": "feat(analysis/seminorm): add a `zero_hom_class` instance and remove `seminorm.zero` (#14613)", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}]}, {"timestamp": 1654768708, "sha": "6826bf00", "message": "doc(data/vector3): improve wording (#14610)", "changes": [{"oldPath": "src/data/vector3.lean", "newPath": "src/data/vector3.lean", "changes": []}]}, {"timestamp": 1654768707, "sha": "ab64f631", "message": "refactor(algebra/sub{monoid,group,ring,semiring,field}): merge together the `restrict` and `cod_restrict` helpers (#14548)\nThis uses the new subobject typeclasses to merge together:\n* `monoid_hom.mrestrict`, `monoid_hom.restrict`\n* `monoid_hom.cod_mrestrict`, `monoid_hom.cod_restrict`\n* `ring_hom.srestrict`, `ring_hom.restrict`, `ring_hom.restrict_field`\n* `ring_hom.cod_srestrict`, `ring_hom.cod_restrict`, `ring_hom.cod_restrict_field`\nFor consistency, this also removes the `m` prefix from `mul_hom.mrestrict`", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/constructions.lean", "newPath": "src/algebra/category/Ring/constructions.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["del", "def", "cod_restrict_field", ["ring_hom"]], ["del", "def", "restrict_field", ["ring_hom"]], ["del", "theorem", "restrict_field_apply", ["ring_hom"]]]}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "def", "cod_restrict", ["monoid_hom"]], ["del", "theorem", "cod_restrict_apply", ["monoid_hom"]], ["del", "def", "restrict", ["monoid_hom"]], ["del", "theorem", "restrict_apply", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["del", "def", "cod_mrestrict", ["monoid_hom"]], ["add", "def", "cod_restrict", ["monoid_hom"]], ["del", "def", "mrestrict", ["monoid_hom"]], ["del", "theorem", "mrestrict_apply", ["monoid_hom"]], ["add", "def", "restrict", ["monoid_hom"]], ["add", "theorem", "restrict_apply", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/subsemigroup/operations.lean", "newPath": "src/group_theory/subsemigroup/operations.lean", "changes": [["add", "def", "cod_restrict", ["mul_hom"]], ["del", "def", "cod_srestrict", ["mul_hom"]], ["add", "def", "restrict", ["mul_hom"]], ["add", "theorem", "restrict_apply", ["mul_hom"]], ["del", "def", "srestrict", ["mul_hom"]], ["del", "theorem", "srestrict_apply", ["mul_hom"]]]}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["del", "def", "cod_restrict'", ["ring_hom"]], ["del", "def", "restrict", ["ring_hom"]], ["del", "theorem", "restrict_apply", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "def", "cod_restrict", ["ring_hom"]], ["del", "def", "cod_srestrict", ["ring_hom"]], ["add", "def", "restrict", ["ring_hom"]], ["add", "theorem", "restrict_apply", ["ring_hom"]], ["del", "def", "srestrict", ["ring_hom"]], ["del", "theorem", "srestrict_apply", ["ring_hom"]]]}]}, {"timestamp": 1654768706, "sha": "732b79f8", "message": "feat(order/compactly_generated): an independent subset of a well-founded complete lattice is finite (#14215)", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "finite_of_set_independent", ["complete_lattice", "well_founded"]]]}]}, {"timestamp": 1654761138, "sha": "3a95d1d3", "message": "feat(algebra/order/monoid): `zero_le_one_class` instances for `with_top` and `with_bot` (#14640)", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}]}, {"timestamp": 1654753396, "sha": "971a9b00", "message": "feat(logic/equiv/basic): two empty types are equivalent; remove various redundant lemmas (#14604)\nWe prove `equiv_of_is_empty`, which states two empty types are equivalent. This allows us to remove various redundant lemmas.\nWe keep `empty_equiv_empty` and `empty_equiv_pempty` as these specific instantiations of that lemma are widely used.", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["del", "def", "empty_equiv_pempty", ["equiv"]], ["add", "def", "equiv_of_is_empty", ["equiv"]], ["add", "def", "equiv_pempty", ["equiv"]], ["del", "def", "false_equiv_empty", ["equiv"]], ["del", "def", "false_equiv_pempty", ["equiv"]], ["del", "def", "pempty_equiv_pempty", ["equiv"]], ["del", "def", "{u'", ["equiv"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1654747657, "sha": "9f19686c", "message": "feat(logic/small): generalize + golf (#14584)\nThis PR does the following:\n- add a lemma `small_lift`\n- generalize the lemma `small_ulift`\n- golf `small_self` and `small_max`", "changes": [{"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": [["add", "theorem", "small_lift", []]]}]}, {"timestamp": 1654739658, "sha": "b392bb2c", "message": "feat(data/nat/factorization/basic): two trivial simp lemmas about factorizations (#14634)\nFor any `n : ℕ`, `n.factorization 0 = 0` and `n.factorization 1 = 0`", "changes": [{"oldPath": "src/data/nat/factorization/basic.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": [["add", "theorem", "factorization_one_right", ["nat"]], ["add", "theorem", "factorization_zero_right", ["nat"]]]}]}, {"timestamp": 1654739656, "sha": "4fc35392", "message": "refactor(data/finset/nat_antidiagonal): state lemmas with cons instead of insert (#14533)\nThis puts less of a burden on the caller rewriting in the forward direction, as they don't have to prove obvious things about membership when evaluating sums.\nSince this adds the missing `finset.map_cons`, a number of uses of `multiset.map_cons` now need qualified names.", "changes": [{"oldPath": "src/algebra/big_operators/nat_antidiagonal.lean", "newPath": "src/algebra/big_operators/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "map_cons", ["finset"]]]}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}, {"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["mod", "theorem", "antidiagonal_succ'", ["finset", "nat"]], ["mod", "theorem", "antidiagonal_succ", ["finset", "nat"]]]}]}, {"timestamp": 1654731875, "sha": "0c08bd43", "message": "chore(data/set/basic): minor style fixes (#14628)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "set_of_app_iff", ["set"]], ["mod", "theorem", "set_coe_cast", []]]}]}, {"timestamp": 1654720603, "sha": "c1faa2ee", "message": "feat(linear_algebra/affine_space/affine_subspace/pointwise): Translations are an action on affine subspaces (#14230)", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "coe_refl_to_affine_map", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["mod", "theorem", "span_eq_top_iff", ["affine_equiv"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/pointwise.lean", "changes": [["add", "theorem", "coe_pointwise_vadd", ["affine_subspace"]], ["add", "theorem", "map_pointwise_vadd", ["affine_subspace"]], ["add", "theorem", "pointwise_vadd_bot", ["affine_subspace"]], ["add", "theorem", "pointwise_vadd_direction", ["affine_subspace"]], ["add", "theorem", "pointwise_vadd_span", ["affine_subspace"]], ["add", "theorem", "vadd_mem_pointwise_vadd_iff", ["affine_subspace"]]]}]}, {"timestamp": 1654720602, "sha": "84a1bd6a", "message": "refactor(topology/metric_space/basic): add `pseudo_metric_space.to_bornology'` (#13927)\n* add `pseudo_metric_space.to_bornology'` and `pseudo_metric_space.replace_bornology`;\n* add `metric.is_bounded_iff` and a few similar lemmas;\n* fix instances for `subtype`, `prod`, `pi`, and `pi_Lp` to use the correct bornology`;\n* add `lipschitz_with.to_locally_bounded_map` and `lipschitz_with.comap_cobounded_le`;\n* add `antilipschitz_with.tendsto_cobounded`.", "changes": [{"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": [["mod", "def", "emetric_space", ["enorm"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "aux_cobounded_eq", ["pi_Lp"]], ["add", "def", "pseudo_metric_aux", ["pi_Lp"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "tendsto_cobounded", ["antilipschitz_with"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "is_bounded_iff", ["metric"]], ["add", "theorem", "is_bounded_iff_eventually", ["metric"]], ["add", "theorem", "is_bounded_iff_exists_ge", ["metric"]], ["add", "theorem", "is_bounded_iff_nndist", ["metric"]], ["add", "def", "replace_bornology", ["pseudo_metric_space"]], ["add", "theorem", "replace_bornology_eq", ["pseudo_metric_space"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "coe_to_locally_bounded_map", ["lipschitz_with"]], ["add", "theorem", "comap_cobounded_le", ["lipschitz_with"]], ["add", "def", "to_locally_bounded_map", ["lipschitz_with"]]]}]}, {"timestamp": 1654714308, "sha": "61df9c66", "message": "feat(set_theory/ordinal/basic): tweak `type_def` + golf `type_lt` (#14611)\nWe replace the original, redundant `type_def'` with a new more general lemma. We keep `type_def` as it enables `dsimp`, unlike `type_def'`. We golf `type_lt` using this new lemma.", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "type_def'", ["ordinal"]], ["mod", "theorem", "type_def", ["ordinal"]]]}]}, {"timestamp": 1654714292, "sha": "9c4a3d1b", "message": "feat(ring_theory/valuation/valuation_subring): define unit group of valuation subring and provide basic API (#14540)\nThis PR defines the unit group of a valuation subring as a multiplicative subgroup of the units of the field. We show two valuation subrings are equivalent iff they have the same unit group. We show the map sending a valuation to its unit group is an order embedding.", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "theorem", "map_one_add_of_lt", ["valuation"]], ["add", "theorem", "map_one_sub_of_lt", ["valuation"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "coe_unit_group_mul_equiv_apply", ["valuation_subring"]], ["add", "theorem", "coe_unit_group_mul_equiv_symm_apply", ["valuation_subring"]], ["add", "theorem", "eq_iff_unit_group", ["valuation_subring"]], ["add", "theorem", "mem_unit_group_iff", ["valuation_subring"]], ["add", "def", "unit_group", ["valuation_subring"]], ["add", "theorem", "unit_group_injective", ["valuation_subring"]], ["add", "theorem", "unit_group_le_unit_group", ["valuation_subring"]], ["add", "def", "unit_group_mul_equiv", ["valuation_subring"]], ["add", "def", "unit_group_order_embedding", ["valuation_subring"]], ["add", "theorem", "unit_group_strict_mono", ["valuation_subring"]]]}]}, {"timestamp": 1654711802, "sha": "d3156667", "message": "feat(model_theory/substructures): tweak universes for `lift_card_closure_le` (#14597)\nSince `cardinal.lift.{(max u v) u} = cardinal.lift.{v u}`, the latter form should be preferred.", "changes": [{"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": [["mod", "theorem", "lift_card_closure_le", ["first_order", "language", "substructure"]]]}]}, {"timestamp": 1654703927, "sha": "89348848", "message": "feat(set_theory/ordinal/basic): `rel_iso.ordinal_type_eq` (#14602)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "ordinal_type_eq", ["rel_iso"]]]}]}, {"timestamp": 1654703926, "sha": "09df85f6", "message": "feat(order/rel_classes): any relation on an empty type is a well-order (#14600)", "changes": [{"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": [["add", "theorem", "well_founded_of_empty", []]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}]}, {"timestamp": 1654703925, "sha": "201a3f4a", "message": "chore(*): remove extra parentheses in universe annotations (#14595)\nWe change `f.{(max u v)}` to `f.{max u v}` throughout, and similarly for `imax`. This is for consistency with the rest of the code.\nNote that `max` and `imax` take an arbitrary number of parameters, so if anyone wants to add a second universe parameter, they'll have to add the parentheses again.", "changes": [{"oldPath": "src/algebra/category/Module/projective.lean", "newPath": "src/algebra/category/Module/projective.lean", "changes": []}, {"oldPath": "src/category_theory/category/ulift.lean", "newPath": "src/category_theory/category/ulift.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "lift_lift", ["ordinal"]]]}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}]}, {"timestamp": 1654703923, "sha": "3e4d6aa3", "message": "feat(algebra/algebra/basic): add instances `char_zero.no_zero_smul_divisors_int`, `char_zero.no_zero_smul_divisors_nat` (#14395)\nThe proofs are taken from #14338 where a specific need for these arose\nAside from the new instances, nothing else has changed; I moved the\n`no_zero_smul_divisors` section lower down in the file since the new\ninstances need the `algebra ℤ R` structure carried by a ring `R`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}]}, {"timestamp": 1654695761, "sha": "bfb8ec83", "message": "feat(logic/basic): add lemma `pi_congr` (#14616)\nThis lemma is used in #14153, where `congrm` is defined.\nA big reason for splitting these 3 lines off the main PR is that they are the only ones that are not in a leaf of the import hierarchy: this hopefully saves lots of CI time, when doing trivial changes to the main PR.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "pi_congr", []]]}]}, {"timestamp": 1654695758, "sha": "700181a3", "message": "refactor(algebra/is_prime_pow): move lemmas using `factorization` to new file (#14598)\nAs discussed in [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/squarefree.2C.20is_prime_pow.2C.20and.20factorization/near/285144241).", "changes": [{"oldPath": "src/algebra/is_prime_pow.lean", "newPath": "src/algebra/is_prime_pow.lean", "changes": [["del", "theorem", "min_fac_pow_factorization_eq", ["is_prime_pow"]], ["del", "theorem", "is_prime_pow_iff_card_support_factorization_eq_one", []], ["del", "theorem", "is_prime_pow_iff_factorization_eq_single", []], ["del", "theorem", "is_prime_pow_iff_min_fac_pow_factorization_eq", []], ["del", "theorem", "is_prime_pow_iff_unique_prime_dvd", []], ["del", "theorem", "is_prime_pow_of_min_fac_pow_factorization_eq", []], ["del", "theorem", "is_prime_pow_pow_iff", []], ["del", "theorem", "is_prime_pow_dvd_mul", ["nat", "coprime"]], ["del", "theorem", "mul_divisors_filter_prime_pow", ["nat"]]]}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/factorization/prime_pow.lean", "changes": [["add", "theorem", "min_fac_pow_factorization_eq", ["is_prime_pow"]], ["add", "theorem", "is_prime_pow_iff_card_support_factorization_eq_one", []], ["add", "theorem", "is_prime_pow_iff_factorization_eq_single", []], ["add", "theorem", "is_prime_pow_iff_min_fac_pow_factorization_eq", []], ["add", "theorem", "is_prime_pow_iff_unique_prime_dvd", []], ["add", "theorem", "is_prime_pow_of_min_fac_pow_factorization_eq", []], ["add", "theorem", "is_prime_pow_pow_iff", []], ["add", "theorem", "is_prime_pow_dvd_mul", ["nat", "coprime"]], ["add", "theorem", "mul_divisors_filter_prime_pow", ["nat"]]]}, {"oldPath": "src/data/nat/squarefree.lean", "newPath": "src/data/nat/squarefree.lean", "changes": []}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_val.lean", "newPath": "src/number_theory/padics/padic_val.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1654690216, "sha": "db4531fa", "message": "doc(data/qpf/multivariate/constructions/cofix): fix doc typos (#14609)", "changes": [{"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}]}, {"timestamp": 1654690215, "sha": "0add8768", "message": "chore(set_theory/cardinal/basic): remove unused universe + fix spacing (#14606)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "mk_subtype_mono", ["cardinal"]]]}]}, {"timestamp": 1654690214, "sha": "65fba4cb", "message": "feat(algebra/lie/centralizer): define the centralizer of a Lie submodule and the upper central series (#14173)", "changes": [{"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": [["del", "theorem", "exists_nested_lie_ideal_of_le_normalizer", ["lie_subalgebra"]], ["del", "theorem", "ideal_in_normalizer", ["lie_subalgebra"]], ["del", "theorem", "le_normalizer", ["lie_subalgebra"]], ["del", "theorem", "le_normalizer_of_ideal", ["lie_subalgebra"]], ["del", "theorem", "lie_mem_sup_of_mem_normalizer", ["lie_subalgebra"]], ["del", "theorem", "mem_normalizer_iff'", ["lie_subalgebra"]], ["del", "theorem", "mem_normalizer_iff", ["lie_subalgebra"]], ["del", "def", "normalizer", ["lie_subalgebra"]], ["del", "theorem", "normalizer_eq_self_iff", ["lie_subalgebra"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/centralizer.lean", "changes": [["add", "theorem", "coe_centralizer_eq_normalizer", ["lie_subalgebra"]], ["add", "theorem", "exists_nested_lie_ideal_of_le_normalizer", ["lie_subalgebra"]], ["add", "theorem", "ideal_in_normalizer", ["lie_subalgebra"]], ["add", "theorem", "le_normalizer", ["lie_subalgebra"]], ["add", "theorem", "lie_mem_sup_of_mem_normalizer", ["lie_subalgebra"]], ["add", "theorem", "mem_normalizer_iff'", ["lie_subalgebra"]], ["add", "theorem", "mem_normalizer_iff", ["lie_subalgebra"]], ["add", "def", "normalizer", ["lie_subalgebra"]], ["add", "theorem", "normalizer_eq_self_iff", ["lie_subalgebra"]], ["add", "def", "centralizer", ["lie_submodule"]], ["add", "theorem", "centralizer_bot_eq_max_triv_submodule", ["lie_submodule"]], ["add", "theorem", "centralizer_inf", ["lie_submodule"]], ["add", "theorem", "comap_centralizer", ["lie_submodule"]], ["add", "theorem", "gc_top_lie_centralizer", ["lie_submodule"]], ["add", "theorem", "le_centralizer", ["lie_submodule"]], ["add", "theorem", "mem_centralizer", ["lie_submodule"]], ["add", "theorem", "monotone_centalizer", ["lie_submodule"]], ["add", "theorem", "top_lie_le_iff_le_centralizer", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/engel.lean", "newPath": "src/algebra/lie/engel.lean", "changes": []}, {"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": [["add", "theorem", "lie_le_iff", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_iff", ["lie_module"]], ["add", "theorem", "is_nilpotent_iff_exists_ucs_eq_top", ["lie_module"]], ["add", "theorem", "gc_lcs_ucs", ["lie_submodule"]], ["add", "theorem", "is_nilpotent_iff_exists_self_le_ucs", ["lie_submodule"]], ["add", "theorem", "lcs_add_le_iff", ["lie_submodule"]], ["add", "theorem", "lcs_le_iff", ["lie_submodule"]], ["add", "def", "ucs", ["lie_submodule"]], ["add", "theorem", "ucs_comap_incl", ["lie_submodule"]], ["add", "theorem", "ucs_eq_self_of_centralizer_eq_self", ["lie_submodule"]], ["add", "theorem", "ucs_eq_top_iff", ["lie_submodule"]], ["add", "theorem", "ucs_le_of_centralizer_eq_self", ["lie_submodule"]], ["add", "theorem", "ucs_mono", ["lie_submodule"]], ["add", "theorem", "ucs_succ", ["lie_submodule"]], ["add", "theorem", "ucs_zero", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "comap_incl_eq_top", ["lie_submodule"]]]}]}, {"timestamp": 1654680694, "sha": "ffad43d2", "message": "golf(*): `λ _, default` → `default` (#14608)", "changes": [{"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": [["mod", "def", "holor", []], ["mod", "def", "holor_index", []]]}, {"oldPath": "src/data/pfunctor/multivariate/basic.lean", "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/prod/tprod.lean", "newPath": "src/data/prod/tprod.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/sigma.lean", "newPath": "src/data/qpf/multivariate/constructions/sigma.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle/basic.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": []}, {"oldPath": "test/lint_coe_t.lean", "newPath": "test/lint_coe_t.lean", "changes": [["mod", "def", "int_to_a", []]]}]}, {"timestamp": 1654680693, "sha": "60454dd3", "message": "feat(algebra/order/monoid): `zero_le_one'` lemma with explicit type argument (#14594)", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "zero_le_one'", []], ["mod", "theorem", "zero_le_one", []]]}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/floor.lean", "newPath": "src/topology/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1654680692, "sha": "f40cd3cf", "message": "feat(topology/algebra/order/basic): in a second-countable linear order, only countably many points are isolated to the right (#14564)\nThis makes it possible to remove a useless `densely_ordered` assumption in a lemma in `borel_space`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "def", "unique_empty", ["set"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "of_subsingleton", ["set", "countable"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "of_subsingleton", ["set", "finite"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "measurable_set_of_mem_nhds_within_Ioi", []], ["mod", "theorem", "measurable_set_of_mem_nhds_within_Ioi_aux", []]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "countable_of_isolated_left", []], ["add", "theorem", "countable_of_isolated_right", []], ["add", "theorem", "countable_of_Ioo", ["set", "pairwise_disjoint"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "exists_mem_of_ne", ["topological_space", "is_topological_basis"]]]}]}, {"timestamp": 1654680691, "sha": "a20032ac", "message": "feat(group_theory/sylow): The index of a sylow subgroup is indivisible by the prime (#14518)\nThis PR adds a lemma stating that the index of a sylow subgroup is indivisible by the prime.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "not_dvd_index_sylow'", []], ["add", "theorem", "not_dvd_index_sylow", []], ["mod", "def", "comap_of_injective", ["sylow"]], ["mod", "theorem", "stabilizer_eq_normalizer", ["sylow"]]]}]}, {"timestamp": 1654680690, "sha": "54236f5a", "message": "feat(topology/continuous_function/compact): `cstar_ring` instance on `C(α, β)` when `α` is compact (#14437)\nWe define the star operation on `C(α, β)` by applying `β`'s star operation pointwise. In the case when `α` is compact, then `C(α, β)` has a norm, and we show that it is a `cstar_ring`.", "changes": [{"oldPath": "src/topology/algebra/star.lean", "newPath": "src/topology/algebra/star.lean", "changes": [["add", "def", "star_continuous_map", []]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["add", "theorem", "coe_star", ["continuous_map"]], ["add", "theorem", "star_apply", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "mk_of_compact_star", ["bounded_continuous_function"]]]}]}, {"timestamp": 1654673607, "sha": "e39af181", "message": "chore(data/finset): remove duplicated lemma (#14607)\nThe lemma `ssubset_iff_exists_insert_subset` was added in #11248 but is just a duplicate of the `ssubset_iff` lemma a few lines earlier in the file. It's only used once.", "changes": [{"oldPath": "src/combinatorics/set_family/lym.lean", "newPath": "src/combinatorics/set_family/lym.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "theorem", "ssubset_iff_exists_insert_subset", ["finset"]]]}]}, {"timestamp": 1654647796, "sha": "9d048443", "message": "feat(data/int/basic): Sum of units casework lemma (#14557)\nThis PR adds a casework lemma for when the sum of two units equals the sum of two units. I needed this lemma for irreducibility of x^n-x-1.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "is_unit_add_is_unit_eq_is_unit_add_is_unit", ["int"]]]}]}, {"timestamp": 1654641105, "sha": "759516c7", "message": "chore(ring_theory/dedekind_domain/ideal): speed up a proof (#14590)\n... which causes recurring timeout at irrelevant places, see https://github.com/leanprover-community/mathlib/pull/14585#issuecomment-1148222373 and referenced Zulip discussion.\nFeel free to push golfs that remains fast (1-2s)!", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}]}, {"timestamp": 1654636141, "sha": "905374c4", "message": "feat(special_functions/gamma): better convergence bounds (#14496)\nUse the stronger form of FTC-2 added #14147 to strengthen some results about the gamma function.", "changes": [{"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": [["mod", "def", "Gamma", ["complex"]], ["mod", "theorem", "Gamma_aux_recurrence1", ["complex"]], ["mod", "theorem", "Gamma_aux_recurrence2", ["complex"]], ["mod", "theorem", "Gamma_eq_Gamma_aux", ["complex"]], ["mod", "theorem", "Gamma_eq_integral", ["complex"]], ["mod", "theorem", "Gamma_integral_add_one", ["complex"]], ["mod", "theorem", "Gamma_integral_convergent", ["complex"]], ["mod", "theorem", "partial_Gamma_add_one", ["complex"]], ["mod", "theorem", "tendsto_partial_Gamma", ["complex"]], ["mod", "theorem", "Gamma_integral_convergent", ["real"]]]}]}, {"timestamp": 1654623804, "sha": "cfa447ec", "message": "chore(logic/hydra): tweak docs + minor golf (#14579)", "changes": [{"oldPath": "src/logic/hydra.lean", "newPath": "src/logic/hydra.lean", "changes": []}]}, {"timestamp": 1654608740, "sha": "43f1af99", "message": "refactor(topology/continuous_function/basic): rename `map_specialization` (#14565)\nRename `continuous_map.map_specialization` to `continuous_map.map_specializes` to align with the name of the relation.", "changes": [{"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["del", "theorem", "map_specialization", ["continuous_map"]], ["add", "theorem", "map_specializes", ["continuous_map"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1654605441, "sha": "544fdc0d", "message": "chore(ring_theory/integral_closure): fix dot notation (#14589)", "changes": [{"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_field_iff_is_field", ["algebra", "is_integral"]], ["del", "theorem", "is_field_iff_is_field", ["is_integral"]]]}]}, {"timestamp": 1654602032, "sha": "69066273", "message": "refactor(algebra/squarefree): split out `nat` part to new file `data/nat/squarefree` (#14577)\nAs discussed in this Zulip [thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/squarefree.2C.20is_prime_pow.2C.20and.20factorization)", "changes": [{"oldPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "newPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["del", "theorem", "divisors_filter_squarefree", ["nat"]], ["del", "def", "min_sq_fac", ["nat"]], ["del", "def", "min_sq_fac_aux", ["nat"]], ["del", "theorem", "min_sq_fac_aux_has_prop", ["nat"]], ["del", "theorem", "min_sq_fac_dvd", ["nat"]], ["del", "theorem", "min_sq_fac_has_prop", ["nat"]], ["del", "theorem", "min_sq_fac_le_of_dvd", ["nat"]], ["del", "theorem", "min_sq_fac_prime", ["nat"]], ["del", "def", "min_sq_fac_prop", ["nat"]], ["del", "theorem", "min_sq_fac_prop_div", ["nat"]], ["del", "theorem", "sq_mul_squarefree", ["nat"]], ["del", "theorem", "sq_mul_squarefree_of_pos'", ["nat"]], ["del", "theorem", "sq_mul_squarefree_of_pos", ["nat"]], ["del", "theorem", "ext_iff", ["nat", "squarefree"]], ["del", "theorem", "factorization_le_one", ["nat", "squarefree"]], ["del", "theorem", "squarefree_and_prime_pow_iff_prime", ["nat"]], ["del", "theorem", "squarefree_iff_factorization_le_one", ["nat"]], ["del", "theorem", "squarefree_iff_min_sq_fac", ["nat"]], ["del", "theorem", "squarefree_iff_nodup_factors", ["nat"]], ["del", "theorem", "squarefree_iff_prime_squarefree", ["nat"]], ["del", "theorem", "squarefree_mul", ["nat"]], ["del", "theorem", "squarefree_of_factorization_le_one", ["nat"]], ["del", "theorem", "squarefree_pow_iff", ["nat"]], ["del", "theorem", "squarefree_two", ["nat"]], ["del", "theorem", "sum_divisors_filter_squarefree", ["nat"]], ["del", "theorem", "not_squarefree_mul", ["tactic", "norm_num"]], ["del", "theorem", "squarefree_bit10", ["tactic", "norm_num"]], ["del", "theorem", "squarefree_bit1", ["tactic", "norm_num"]], ["del", "def", "squarefree_helper", ["tactic", "norm_num"]], ["del", "theorem", "squarefree_helper_0", ["tactic", "norm_num"]], ["del", "theorem", "squarefree_helper_1", ["tactic", "norm_num"]], ["del", "theorem", "squarefree_helper_2", ["tactic", "norm_num"]], ["del", "theorem", "squarefree_helper_3", ["tactic", "norm_num"]], ["del", "theorem", "squarefree_helper_4", ["tactic", "norm_num"]]]}, {"oldPath": null, "newPath": "src/data/nat/squarefree.lean", "changes": [["add", "theorem", "divisors_filter_squarefree", ["nat"]], ["add", "def", "min_sq_fac", ["nat"]], ["add", "def", "min_sq_fac_aux", ["nat"]], ["add", "theorem", "min_sq_fac_aux_has_prop", ["nat"]], ["add", "theorem", "min_sq_fac_dvd", ["nat"]], ["add", "theorem", "min_sq_fac_has_prop", ["nat"]], ["add", "theorem", "min_sq_fac_le_of_dvd", ["nat"]], ["add", "theorem", "min_sq_fac_prime", ["nat"]], ["add", "def", "min_sq_fac_prop", ["nat"]], ["add", "theorem", "min_sq_fac_prop_div", ["nat"]], ["add", "theorem", "sq_mul_squarefree", ["nat"]], ["add", "theorem", "sq_mul_squarefree_of_pos'", ["nat"]], ["add", "theorem", "sq_mul_squarefree_of_pos", ["nat"]], ["add", "theorem", "ext_iff", ["nat", "squarefree"]], ["add", "theorem", "factorization_le_one", ["nat", "squarefree"]], ["add", "theorem", "squarefree_and_prime_pow_iff_prime", ["nat"]], ["add", "theorem", "squarefree_iff_factorization_le_one", ["nat"]], ["add", "theorem", "squarefree_iff_min_sq_fac", ["nat"]], ["add", "theorem", "squarefree_iff_nodup_factors", ["nat"]], ["add", "theorem", "squarefree_iff_prime_squarefree", ["nat"]], ["add", "theorem", "squarefree_mul", ["nat"]], ["add", "theorem", "squarefree_of_factorization_le_one", ["nat"]], ["add", "theorem", "squarefree_pow_iff", ["nat"]], ["add", "theorem", "squarefree_two", ["nat"]], ["add", "theorem", "sum_divisors_filter_squarefree", ["nat"]], ["add", "theorem", "not_squarefree_mul", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_bit10", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_bit1", ["tactic", "norm_num"]], ["add", "def", "squarefree_helper", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_0", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_1", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_2", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_3", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_4", ["tactic", "norm_num"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1654585574, "sha": "4a4cd6d6", "message": "feat(topology/metric_space/metrizable): assume `regular_space` (#14586)", "changes": [{"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": [["del", "theorem", "metrizable_space_of_normal_second_countable", ["topological_space"]], ["add", "theorem", "metrizable_space_of_regular_second_countable", ["topological_space"]]]}]}, {"timestamp": 1654565341, "sha": "de648fd5", "message": "chore(set_theory/game/basic): spacing tweaks + fix docstring typo (#14580)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["mod", "def", "to_left_moves_mul", ["pgame"]], ["mod", "def", "to_right_moves_mul", ["pgame"]]]}]}, {"timestamp": 1654555467, "sha": "6ad1a55f", "message": "feat(set_theory/game/pgame): induction on left/right moves of add/mul (#14345)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["mod", "theorem", "left_moves_mul_cases", ["pgame"]], ["mod", "theorem", "right_moves_mul_cases", ["pgame"]]]}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "left_moves_add_cases", ["pgame"]], ["mod", "theorem", "right_moves_add_cases", ["pgame"]]]}]}, {"timestamp": 1654548391, "sha": "c7a1319b", "message": "feat(measure_theory/measure/measure_space): add `interval_oc_ae_eq_interval` (#14566)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "interval_oc_ae_eq_interval", ["measure_theory"]]]}]}, {"timestamp": 1654548390, "sha": "2c893060", "message": "chore(geometry/manifold/charted_space): make `M` an explicit argument (#14562)", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}]}, {"timestamp": 1654548389, "sha": "d0b7ecc9", "message": "refactor(analysis/asymptotics): rename `is_O.join` to `is_O.sup` (#14558)\n* rename `is_*.join` to `is_*.sup`;\n* add `iff` versions.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["del", "theorem", "join", ["asymptotics", "is_O"]], ["add", "theorem", "sup", ["asymptotics", "is_O"]], ["add", "theorem", "is_O_sup", ["asymptotics"]], ["del", "theorem", "join'", ["asymptotics", "is_O_with"]], ["del", "theorem", "join", ["asymptotics", "is_O_with"]], ["add", "theorem", "sup'", ["asymptotics", "is_O_with"]], ["add", "theorem", "sup", ["asymptotics", "is_O_with"]], ["del", "theorem", "join", ["asymptotics", "is_o"]], ["add", "theorem", "sup", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_sup", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/phragmen_lindelof.lean", "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": []}]}, {"timestamp": 1654548388, "sha": "2b7e72b0", "message": "feat(order/liminf_limsup): add a few lemmas (#14554)\n* add `is_bounded_under.mono_le`, `is_bounded_under.mono_ge`;\n* add `order_iso.is_bounded_under_le_comp`, `order_iso.is_bounded_under_ge_comp`;\n* add `is_bounded_under_le_inv`, `is_bounded_under_le_inv`, and additive versions;\n* rename `is_bounded_under_sup` and `is_bounded_under_inf` to `is_bounded_under.sup` and `is_bounded_under.inf`;\n* add `iff` versions under names `is_bounded_under_le_sup` and `is_bounded_under_ge_inf`;\n* add `is_bounded_under_le_abs`.", "changes": [{"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "inf", ["filter", "is_bounded_under"]], ["add", "theorem", "mono_ge", ["filter", "is_bounded_under"]], ["add", "theorem", "mono_le", ["filter", "is_bounded_under"]], ["add", "theorem", "sup", ["filter", "is_bounded_under"]], ["add", "theorem", "is_bounded_under_ge_inf", ["filter"]], ["add", "theorem", "is_bounded_under_ge_inv", ["filter"]], ["del", "theorem", "is_bounded_under_inf", ["filter"]], ["add", "theorem", "is_bounded_under_le_abs", ["filter"]], ["add", "theorem", "is_bounded_under_le_inv", ["filter"]], ["add", "theorem", "is_bounded_under_le_sup", ["filter"]], ["del", "theorem", "is_bounded_under_sup", ["filter"]], ["add", "theorem", "is_bounded_under_ge_comp", ["order_iso"]], ["add", "theorem", "is_bounded_under_le_comp", ["order_iso"]]]}]}, {"timestamp": 1654548387, "sha": "029a9551", "message": "refactor(../metric_space/baire): add baire_space class and instances (#14547)\n* Add a `baire_space` class containing the Baire property (a countable intersection of open dense sets is dense).\n* The Baire category theorem for complete metric spaces becomes an instance of `baire_space`.\n* Previous consequences of the Baire property use `baire_space` as an hypothesis, instead of `pseudo_emetric_space` `complete_space`.\n* Add an instance of `baire_space` for locally compact t2 spaces, in effect extending all the consequences of the Baire property to locally compact spaces.", "changes": [{"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["mod", "theorem", "dense_Inter_of_open_nat", []], ["mod", "theorem", "dense_of_mem_residual", []], ["mod", "theorem", "mem_residual", []]]}, {"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": [["add", "theorem", "exists_positive_compacts_subset", []]]}]}, {"timestamp": 1654548386, "sha": "d28aa2c9", "message": "feat(analysis/normed_space/banach): closed graph theorem (#14265)", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "coe_fn_of_is_closed_graph", ["continuous_linear_map"]], ["add", "theorem", "coe_fn_of_seq_closed_graph", ["continuous_linear_map"]], ["add", "theorem", "coe_of_is_closed_graph", ["continuous_linear_map"]], ["add", "theorem", "coe_of_seq_closed_graph", ["continuous_linear_map"]], ["add", "def", "of_is_closed_graph", ["continuous_linear_map"]], ["add", "def", "of_seq_closed_graph", ["continuous_linear_map"]], ["add", "theorem", "continuous_of_is_closed_graph", ["linear_map"]], ["add", "theorem", "continuous_of_seq_closed_graph", ["linear_map"]]]}]}, {"timestamp": 1654540869, "sha": "7b7da893", "message": "feat(algebra/order/*): typeclass for `0 ≤ 1` (#14510)\nWith this new typeclass, lemmas such as `zero_le_two` and `one_le_two` can be generalized to require just a few typeclasses for notation, `zero_add_class`, and some `covariant` class.", "changes": [{"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": [["del", "theorem", "zero_le_one", ["Nxzmod_2"]]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "one_le_two'", []], ["add", "theorem", "one_le_two", []], ["add", "theorem", "zero_le_one", []], ["add", "theorem", "zero_le_two", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "one_le_two", []], ["del", "theorem", "zero_le_one", []], ["del", "theorem", "zero_le_two", []]]}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["del", "theorem", "zero_le_one'", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/probability/strong_law.lean", "newPath": "src/probability/strong_law.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integers.lean", "newPath": "src/ring_theory/valuation/integers.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "theorem", "zero_le_one", ["pgame"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "theorem", "zero_le_one", ["ordinal"]]]}, {"oldPath": "src/topology/algebra/order/floor.lean", "newPath": "src/topology/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1654525648, "sha": "abbc7f63", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): Prove one implication of portmanteau theorem, convergence implies a limsup condition for measures of closed sets. (#14116)\nThis PR contains the proof of one implication of portmanteau theorem characterizing weak convergence: it is shown that weak convergence implies that for any closed set the limsup of measures is at most the limit measure.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_const_lt_top", ["measure_theory"]], ["add", "theorem", "set_lintegral_const_lt_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "measure_le_lintegral_thickened_indicator", []], ["add", "theorem", "measure_le_lintegral_thickened_indicator_aux", []]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "limsup_measure_closed_le_of_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_lintegral_nn_filter_of_le_const", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_lintegral_nn_of_le_const", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_test_against_nn_filter_of_le_const", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_test_against_nn_of_le_const", ["measure_theory", "finite_measure"]], ["add", "theorem", "measure_of_cont_bdd_of_tendsto_filter_indicator", ["measure_theory"]], ["add", "theorem", "measure_of_cont_bdd_of_tendsto_indicator", ["measure_theory"]], ["add", "theorem", "tendsto_lintegral_thickened_indicator_of_is_closed", ["measure_theory"]]]}, {"oldPath": "src/topology/metric_space/thickened_indicator.lean", "newPath": "src/topology/metric_space/thickened_indicator.lean", "changes": [["add", "theorem", "indicator_le_thickened_indicator", []], ["add", "theorem", "indicator_le_thickened_indicator_aux", []]]}]}, {"timestamp": 1654523334, "sha": "d6477a89", "message": "feat(analysis/convex/krein_milman): The Krein-Milman theorem (#8112)\nThis PR proves the Krein-Milman lemma and the Krein-Milman theorem.", "changes": [{"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/convex/krein_milman.lean", "changes": [["add", "theorem", "closure_convex_hull_extreme_points", []], ["add", "theorem", "has_extreme_point", ["is_compact"]]]}]}, {"timestamp": 1654517961, "sha": "d490ad10", "message": "move(set_theory/ordinal/cantor_normal_form): move `CNF` to a new file (#14563)\nWe move the API for the Cantor Normal Form to a new file, in preparation for an API expansion.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "def", "CNF", ["ordinal"]], ["del", "theorem", "CNF_foldr", ["ordinal"]], ["del", "theorem", "CNF_fst_le", ["ordinal"]], ["del", "theorem", "CNF_fst_le_log", ["ordinal"]], ["del", "theorem", "CNF_lt_snd", ["ordinal"]], ["del", "theorem", "CNF_ne_zero", ["ordinal"]], ["del", "theorem", "CNF_pairwise", ["ordinal"]], ["del", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["del", "theorem", "CNF_rec_zero", ["ordinal"]], ["del", "theorem", "CNF_snd_lt", ["ordinal"]], ["del", "theorem", "CNF_sorted", ["ordinal"]], ["del", "theorem", "CNF_zero", ["ordinal"]], ["del", "theorem", "one_CNF", ["ordinal"]], ["del", "theorem", "zero_CNF", ["ordinal"]]]}, {"oldPath": null, "newPath": "src/set_theory/ordinal/cantor_normal_form.lean", "changes": [["add", "def", "CNF", ["ordinal"]], ["add", "theorem", "CNF_foldr", ["ordinal"]], ["add", "theorem", "CNF_fst_le", ["ordinal"]], ["add", "theorem", "CNF_fst_le_log", ["ordinal"]], ["add", "theorem", "CNF_lt_snd", ["ordinal"]], ["add", "theorem", "CNF_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_pairwise", ["ordinal"]], ["add", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_rec_zero", ["ordinal"]], ["add", "theorem", "CNF_snd_lt", ["ordinal"]], ["add", "theorem", "CNF_sorted", ["ordinal"]], ["add", "theorem", "CNF_zero", ["ordinal"]], ["add", "theorem", "one_CNF", ["ordinal"]], ["add", "theorem", "zero_CNF", ["ordinal"]]]}]}, {"timestamp": 1654511742, "sha": "0f5ea396", "message": "feat(order/antichain, order/minimal): some antichain lemmas (#14507)\nThis PR adds a few lemmas about antichains, including their images under complementation and order isomorphisms.", "changes": [{"oldPath": "src/order/antichain.lean", "newPath": "src/order/antichain.lean", "changes": [["add", "theorem", "image_compl", ["is_antichain"]], ["add", "theorem", "image_embedding", ["is_antichain"]], ["add", "theorem", "image_embedding_iff", ["is_antichain"]], ["add", "theorem", "image_iso", ["is_antichain"]], ["add", "theorem", "image_iso_iff", ["is_antichain"]], ["add", "theorem", "image_rel_embedding", ["is_antichain"]], ["add", "theorem", "image_rel_embedding_iff", ["is_antichain"]], ["add", "theorem", "image_rel_iso", ["is_antichain"]], ["add", "theorem", "image_rel_iso_iff", ["is_antichain"]], ["add", "theorem", "preimage_compl", ["is_antichain"]], ["add", "theorem", "preimage_embedding", ["is_antichain"]], ["add", "theorem", "preimage_iso", ["is_antichain"]], ["add", "theorem", "preimage_iso_iff", ["is_antichain"]], ["add", "theorem", "preimage_rel_embedding", ["is_antichain"]], ["add", "theorem", "preimage_rel_iso", ["is_antichain"]], ["add", "theorem", "to_dual", ["is_antichain"]], ["add", "theorem", "to_dual_iff", ["is_antichain"]]]}, {"oldPath": "src/order/minimal.lean", "newPath": "src/order/minimal.lean", "changes": [["add", "theorem", "max_lower_set_of", ["is_antichain"]], ["add", "theorem", "min_upper_set_of", ["is_antichain"]]]}]}, {"timestamp": 1654506992, "sha": "d88ecd5b", "message": "chore(linear_algebra/std_basis): minor golfs (#14552)", "changes": [{"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}]}, {"timestamp": 1654500393, "sha": "789af09c", "message": "feat(algebra/char_p): add two helper lemmas about the cast of the characteristics being zero (#14464)\n- `(ring_char R : R) = 0` and\n- If there exists a positive `n` lifting to zero, then the characteristics is positive.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "cast_ring_char", ["ring_char", "nat"]]]}]}, {"timestamp": 1654462227, "sha": "769a9349", "message": "feat(set_theory/*) `cardinal.min` → `Inf` (#13410)\nWe discard `cardinal.min` in favor of `Inf` (the original definition is really just `infi`). \nNote: `lift_min'` is renamed to `lift_min`, as the name clash no longer exists. For consistency, `lift_max'` is renamed to `lift_max` and `lift_max` is renamed to `lift_umax_eq`.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": []}, {"oldPath": "src/model_theory/skolem.lean", "newPath": "src/model_theory/skolem.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "Inf_empty", ["cardinal"]], ["del", "theorem", "le_min", ["cardinal"]], ["add", "theorem", "lift_Inf", ["cardinal"]], ["del", "theorem", "lift_max'", ["cardinal"]], ["mod", "theorem", "lift_max", ["cardinal"]], ["del", "theorem", "lift_min'", ["cardinal"]], ["mod", "theorem", "lift_min", ["cardinal"]], ["add", "theorem", "lift_monotone", ["cardinal"]], ["add", "theorem", "lift_strict_mono", ["cardinal"]], ["add", "theorem", "lift_umax_eq", ["cardinal"]], ["del", "theorem", "min_eq", ["cardinal"]], ["del", "theorem", "min_le", ["cardinal"]], ["mod", "theorem", "sup_eq_zero", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "def", "cof", ["order"]], ["mod", "theorem", "cof_le", ["order"]], ["add", "theorem", "cof_nonempty", ["order"]], ["mod", "theorem", "lift_cof", ["ordinal"]], ["del", "theorem", "aux", ["rel_iso", "cof"]], ["del", "theorem", "cof", ["rel_iso"]], ["add", "theorem", "cof_eq", ["rel_iso"]], ["add", "theorem", "cof_eq_lift", ["rel_iso"]], ["add", "theorem", "cof_le", ["rel_iso"]], ["add", "theorem", "cof_le_lift", ["rel_iso"]], ["mod", "def", "cof", ["strict_order"]], ["add", "theorem", "cof_nonempty", ["strict_order"]]]}, {"oldPath": "src/set_theory/cardinal/schroeder_bernstein.lean", "newPath": "src/set_theory/cardinal/schroeder_bernstein.lean", "changes": [["mod", "theorem", "min_injective", ["function", "embedding"]], ["mod", "theorem", "total", ["function", "embedding"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1654457326, "sha": "736b4e5c", "message": "feat(data/nat/factorization): Lemma on zero-ness of factorization (#14560)\nSad naming is sad.\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factorization_eq_zero_iff'", ["nat"]]]}]}, {"timestamp": 1654440740, "sha": "043fa29d", "message": "feat(src/analysis/normed_space): various improvements for continuous bilinear maps (#14539)\n* Add `simps` to `arrow_congrSL`\n* `continuous_linear_map.flip (compSL F E H σ₂₁ σ₁₄)` takes almost 5 seconds to elaborate, but when giving the argument `(F →SL[σ₂₄] H)` for `G` explicitly, this goes down to 1 second.\n* Reorder arguments of `is_bounded_bilinear_map_comp`\n* Use `continuous_linear_map` results to prove `is_bounded_bilinear_map` results.\n* Make arguments to `comp_continuous_multilinear_mapL` explicit\n* Add `continuous[_on].clm_comp`, `cont_diff[_on].clm_comp` and `cont_diff.comp_cont_diff_on(₂|₃)`", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "clm_comp", ["cont_diff"]], ["add", "theorem", "comp_cont_diff_on₂", ["cont_diff"]], ["add", "theorem", "comp_cont_diff_on₃", ["cont_diff"]], ["mod", "theorem", "continuous_linear_map_comp", ["cont_diff_at"]], ["add", "theorem", "clm_comp", ["cont_diff_on"]], ["mod", "theorem", "continuous_linear_map_comp", ["cont_diff_on"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "clm_comp", ["continuous"]], ["add", "theorem", "clm_comp", ["continuous_on"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "clm_comp_const", ["continuous"]], ["add", "theorem", "const_clm_comp", ["continuous"]]]}]}, {"timestamp": 1654430926, "sha": "d9e72ffb", "message": "feat(analysis/normed_space/hahn-banach/separation): Eidelheit's theorem (#14460)\nProve Eidelheit's theorem as a corollary to the geometric Hahn-Banach.", "changes": [{"oldPath": "src/analysis/normed_space/hahn_banach/separation.lean", "newPath": "src/analysis/normed_space/hahn_banach/separation.lean", "changes": [["add", "theorem", "Inter_halfspaces_eq", []]]}]}, {"timestamp": 1654414619, "sha": "b6395b3a", "message": "refactor(set_theory/*): change `omega` to `aleph_0` + golf (#14467)\nThis PR does two things:\n- we change `cardinal.omega` to `cardinal.aleph_0` and introduce the notation `ℵ₀`.\n- we golf many proofs throughout", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/algebra/algebraic_card.lean", "newPath": "src/algebra/algebraic_card.lean", "changes": [["add", "theorem", "aleph_0_le_cardinal_mk_of_char_zero", ["algebraic"]], ["mod", "theorem", "cardinal_mk_le_max", ["algebraic"]], ["mod", "theorem", "cardinal_mk_le_mul", ["algebraic"]], ["del", "theorem", "omega_le_cardinal_mk_of_char_zero", ["algebraic"]]]}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/computability/encoding.lean", "newPath": "src/computability/encoding.lean", "changes": [["add", "theorem", "card_le_aleph_0", ["computability", "encoding"]], ["del", "theorem", "card_le_omega", ["computability", "encoding"]], ["add", "theorem", "card_le_aleph_0", ["computability", "fin_encoding"]], ["del", "theorem", "card_le_omega", ["computability", "fin_encoding"]]]}, {"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": [["add", "theorem", "cardinal_mk_le_max_aleph_0_of_fintype", ["W_type"]], ["del", "theorem", "cardinal_mk_le_max_omega_of_fintype", ["W_type"]]]}, {"oldPath": "src/data/complex/cardinality.lean", "newPath": "src/data/complex/cardinality.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/cardinal.lean", "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/data/polynomial/cardinal.lean", "newPath": "src/data/polynomial/cardinal.lean", "changes": [["mod", "theorem", "cardinal_mk_le_max", ["polynomial"]]]}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": [["mod", "theorem", "mk_rat", ["cardinal"]]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": [["add", "theorem", "dim_lt_aleph_0", ["is_noetherian"]], ["del", "theorem", "dim_lt_omega", ["is_noetherian"]], ["add", "theorem", "iff_dim_lt_aleph_0", ["is_noetherian"]], ["del", "theorem", "iff_dim_lt_omega", ["is_noetherian"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/classification.lean", "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": [["mod", "theorem", "cardinal_mk_le_max", ["algebra", "is_algebraic"]], ["add", "theorem", "cardinal_eq_cardinal_transcendence_basis_of_aleph_0_lt", ["is_alg_closed"]], ["del", "theorem", "cardinal_eq_cardinal_transcendence_basis_of_omega_lt", ["is_alg_closed"]]]}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": []}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "finite_index_of_dim_lt_aleph_0", ["basis"]], ["del", "theorem", "finite_index_of_dim_lt_omega", ["basis"]], ["add", "theorem", "finite_of_vector_space_index_of_dim_lt_aleph_0", ["basis"]], ["del", "theorem", "finite_of_vector_space_index_of_dim_lt_omega", ["basis"]], ["add", "theorem", "nonempty_fintype_index_of_dim_lt_aleph_0", ["basis"]], ["del", "theorem", "nonempty_fintype_index_of_dim_lt_omega", ["basis"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "lt_aleph_0_of_linear_independent", ["finite_dimensional"]], ["del", "theorem", "lt_omega_of_linear_independent", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["add", "theorem", "cardinal_lt_aleph_0_of_finite_dimensional", []], ["del", "theorem", "cardinal_lt_omega_of_finite_dimensional", []]]}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["add", "theorem", "rank_lt_aleph_0", ["module", "free"]], ["del", "theorem", "rank_lt_omega", ["module", "free"]]]}, {"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "card_functions_le_aleph_0", ["first_order", "language"]], ["del", "theorem", "card_functions_le_omega", ["first_order", "language"]], ["add", "theorem", "card_le_aleph_0", ["first_order", "language"]], ["del", "theorem", "card_le_omega", ["first_order", "language"]], ["mod", "theorem", "countable", ["first_order", "language", "encodable"]], ["mod", "theorem", "countable_functions", ["first_order", "language", "encodable"]]]}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": [["mod", "theorem", "card_le", ["first_order", "language", "term"]], ["add", "theorem", "card_le_aleph_0", ["first_order", "language", "term"]], ["del", "theorem", "card_le_omega", ["first_order", "language", "term"]], ["mod", "theorem", "card_sigma", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": []}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": []}, {"oldPath": "src/model_theory/skolem.lean", "newPath": "src/model_theory/skolem.lean", "changes": []}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/cardinality.lean", "newPath": "src/ring_theory/localization/cardinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "add_le_aleph_0", ["cardinal"]], ["del", "theorem", "add_le_omega", ["cardinal"]], ["add", "theorem", "add_lt_aleph_0", ["cardinal"]], ["add", "theorem", "add_lt_aleph_0_iff", ["cardinal"]], ["del", "theorem", "add_lt_omega", ["cardinal"]], ["del", "theorem", "add_lt_omega_iff", ["cardinal"]], ["add", "def", "aleph_0", ["cardinal"]], ["add", "theorem", "aleph_0_add_aleph_0", ["cardinal"]], ["add", "theorem", "aleph_0_le", ["cardinal"]], ["add", "theorem", "aleph_0_le_add_iff", ["cardinal"]], ["add", "theorem", "aleph_0_le_lift", ["cardinal"]], ["add", "theorem", "aleph_0_le_mk", ["cardinal"]], ["add", "theorem", "aleph_0_le_mul_iff", ["cardinal"]], ["add", "theorem", "aleph_0_mul_aleph_0", ["cardinal"]], ["add", "theorem", "aleph_0_ne_zero", ["cardinal"]], ["add", "theorem", "aleph_0_pos", ["cardinal"]], ["mod", "theorem", "card_le_of", ["cardinal"]], ["mod", "theorem", "card_le_of_finset", ["cardinal"]], ["add", "theorem", "cast_to_nat_of_aleph_0_le", ["cardinal"]], ["add", "theorem", "cast_to_nat_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "cast_to_nat_of_lt_omega", ["cardinal"]], ["del", "theorem", "cast_to_nat_of_omega_le", ["cardinal"]], ["mod", "theorem", "denumerable_iff", ["cardinal"]], ["mod", "theorem", "encodable_iff", ["cardinal"]], ["add", "theorem", "finset_card_lt_aleph_0", ["cardinal"]], ["del", "theorem", "finset_card_lt_omega", ["cardinal"]], ["mod", "theorem", "infinite_iff", ["cardinal"]], ["add", "theorem", "lift_aleph_0", ["cardinal"]], ["add", "theorem", "lift_le_aleph_0", ["cardinal"]], ["del", "theorem", "lift_le_omega", ["cardinal"]], ["del", "theorem", "lift_omega", ["cardinal"]], ["add", "theorem", "lt_aleph_0", ["cardinal"]], ["add", "theorem", "lt_aleph_0_iff_finite", ["cardinal"]], ["add", "theorem", "lt_aleph_0_iff_fintype", ["cardinal"]], ["add", "theorem", "lt_aleph_0_of_fintype", ["cardinal"]], ["del", "theorem", "lt_omega", ["cardinal"]], ["del", "theorem", "lt_omega_iff_finite", ["cardinal"]], ["del", "theorem", "lt_omega_iff_fintype", ["cardinal"]], ["del", "theorem", "lt_omega_of_fintype", ["cardinal"]], ["mod", "theorem", "mk_denumerable", ["cardinal"]], ["mod", "theorem", "mk_int", ["cardinal"]], ["add", "theorem", "mk_le_aleph_0", ["cardinal"]], ["del", "theorem", "mk_le_omega", ["cardinal"]], ["mod", "theorem", "mk_nat", ["cardinal"]], ["mod", "theorem", "mk_pnat", ["cardinal"]], ["add", "theorem", "mk_set_le_aleph_0", ["cardinal"]], ["del", "theorem", "mk_set_le_omega", ["cardinal"]], ["add", "theorem", "mk_subtype_le_aleph_0", ["cardinal"]], ["del", "theorem", "mk_subtype_le_omega", ["cardinal"]], ["mod", "theorem", "mk_to_enat_of_infinite", ["cardinal"]], ["mod", "theorem", "mk_to_nat_of_infinite", ["cardinal"]], ["add", "theorem", "mk_union_le_aleph_0", ["cardinal"]], ["del", "theorem", "mk_union_le_omega", ["cardinal"]], ["add", "theorem", "mul_lt_aleph_0", ["cardinal"]], ["add", "theorem", "mul_lt_aleph_0_iff", ["cardinal"]], ["add", "theorem", "mul_lt_aleph_0_iff_of_ne_zero", ["cardinal"]], ["del", "theorem", "mul_lt_omega", ["cardinal"]], ["del", "theorem", "mul_lt_omega_iff", ["cardinal"]], ["del", "theorem", "mul_lt_omega_iff_of_ne_zero", ["cardinal"]], ["add", "theorem", "nat_lt_aleph_0", ["cardinal"]], ["del", "theorem", "nat_lt_omega", ["cardinal"]], ["add", "theorem", "nsmul_lt_aleph_0_iff", ["cardinal"]], ["add", "theorem", "nsmul_lt_aleph_0_iff_of_ne_zero", ["cardinal"]], ["del", "theorem", "nsmul_lt_omega_iff", ["cardinal"]], ["del", "theorem", "nsmul_lt_omega_iff_of_ne_zero", ["cardinal"]], ["del", "def", "omega", ["cardinal"]], ["del", "theorem", "omega_add_omega", ["cardinal"]], ["del", "theorem", "omega_le", ["cardinal"]], ["del", "theorem", "omega_le_add_iff", ["cardinal"]], ["del", "theorem", "omega_le_lift", ["cardinal"]], ["del", "theorem", "omega_le_mk", ["cardinal"]], ["del", "theorem", "omega_le_mul_iff", ["cardinal"]], ["del", "theorem", "omega_mul_omega", ["cardinal"]], ["del", "theorem", "omega_ne_zero", ["cardinal"]], ["del", "theorem", "omega_pos", ["cardinal"]], ["add", "theorem", "one_le_aleph_0", ["cardinal"]], ["add", "theorem", "one_lt_aleph_0", ["cardinal"]], ["del", "theorem", "one_lt_omega", ["cardinal"]], ["mod", "theorem", "one_to_nat", ["cardinal"]], ["add", "theorem", "power_lt_aleph_0", ["cardinal"]], ["del", "theorem", "power_lt_omega", ["cardinal"]], ["add", "theorem", "to_enat_apply_of_aleph_0_le", ["cardinal"]], ["add", "theorem", "to_enat_apply_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_enat_apply_of_lt_omega", ["cardinal"]], ["del", "theorem", "to_enat_apply_of_omega_le", ["cardinal"]], ["mod", "theorem", "to_enat_cast", ["cardinal"]], ["add", "theorem", "to_nat_add_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_nat_add_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_apply_of_aleph_0_le", ["cardinal"]], ["add", "theorem", "to_nat_apply_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_nat_apply_of_lt_omega", ["cardinal"]], ["del", "theorem", "to_nat_apply_of_omega_le", ["cardinal"]], ["mod", "theorem", "to_nat_cast", ["cardinal"]], ["add", "theorem", "to_nat_le_iff_le_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_nat_le_iff_le_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_le_of_le_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_nat_le_of_le_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_lt_iff_lt_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_nat_lt_iff_lt_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_lt_of_lt_of_lt_aleph_0", ["cardinal"]], ["del", "theorem", "to_nat_lt_of_lt_of_lt_omega", ["cardinal"]], ["mod", "theorem", "zero_to_nat", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "theorem", "deriv_lt_ord", ["cardinal"]], ["mod", "theorem", "mk", ["cardinal", "is_inaccessible"]], ["add", "theorem", "aleph_0_le", ["cardinal", "is_limit"]], ["del", "theorem", "omega_le", ["cardinal", "is_limit"]], ["add", "theorem", "is_limit_aleph_0", ["cardinal"]], ["del", "theorem", "is_limit_omega", ["cardinal"]], ["add", "theorem", "aleph_0_le", ["cardinal", "is_regular"]], ["del", "theorem", "omega_le", ["cardinal", "is_regular"]], ["mod", "theorem", "is_regular_aleph'_succ", ["cardinal"]], ["add", "theorem", "is_regular_aleph_0", ["cardinal"]], ["del", "theorem", "is_regular_omega", ["cardinal"]], ["mod", "theorem", "is_regular_succ", ["cardinal"]], ["add", "theorem", "is_strong_limit_aleph_0", ["cardinal"]], ["del", "theorem", "is_strong_limit_omega", ["cardinal"]], ["mod", "theorem", "lt_cof_power", ["cardinal"]], ["mod", "theorem", "lt_power_cof", ["cardinal"]], ["mod", "theorem", "nfp_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "aleph_0_le_cof", ["ordinal"]], ["mod", "theorem", "cof_omega", ["ordinal"]], ["mod", "theorem", "infinite_pigeonhole", ["ordinal"]], ["mod", "theorem", "nfp_bfamily_lt_ord", ["ordinal"]], ["mod", "theorem", "nfp_bfamily_lt_ord_lift", ["ordinal"]], ["mod", "theorem", "nfp_family_lt_ord", ["ordinal"]], ["mod", "theorem", "nfp_family_lt_ord_lift", ["ordinal"]], ["mod", "theorem", "nfp_lt_ord", ["ordinal"]], ["del", "theorem", "omega_le_cof", ["ordinal"]]]}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": [["add", "theorem", "aleph_0_add_continuum", ["cardinal"]], ["add", "theorem", "aleph_0_le_continuum", ["cardinal"]], ["add", "theorem", "aleph_0_lt_continuum", ["cardinal"]], ["add", "theorem", "aleph_0_mul_continuum", ["cardinal"]], ["add", "theorem", "aleph_0_power_aleph_0", ["cardinal"]], ["mod", "def", "continuum", ["cardinal"]], ["add", "theorem", "continuum_add_aleph_0", ["cardinal"]], ["del", "theorem", "continuum_add_omega", ["cardinal"]], ["add", "theorem", "continuum_mul_aleph_0", ["cardinal"]], ["mod", "theorem", "continuum_mul_nat", ["cardinal"]], ["del", "theorem", "continuum_mul_omega", ["cardinal"]], ["add", "theorem", "continuum_power_aleph_0", ["cardinal"]], ["del", "theorem", "continuum_power_omega", ["cardinal"]], ["mod", "theorem", "lift_continuum", ["cardinal"]], ["mod", "theorem", "nat_lt_continuum", ["cardinal"]], ["mod", "theorem", "nat_mul_continuum", ["cardinal"]], ["add", "theorem", "nat_power_aleph_0", ["cardinal"]], ["del", "theorem", "nat_power_omega", ["cardinal"]], ["del", "theorem", "omega_add_continuum", ["cardinal"]], ["del", "theorem", "omega_le_continuum", ["cardinal"]], ["del", "theorem", "omega_lt_continuum", ["cardinal"]], ["del", "theorem", "omega_mul_continuum", ["cardinal"]], ["del", "theorem", "omega_power_omega", ["cardinal"]], ["add", "theorem", "two_power_aleph_0", ["cardinal"]], ["del", "theorem", "two_power_omega", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/divisibility.lean", "newPath": "src/set_theory/cardinal/divisibility.lean", "changes": [["add", "theorem", "dvd_of_le_of_aleph_0_le", ["cardinal"]], ["del", "theorem", "dvd_of_le_of_omega_le", ["cardinal"]], ["mod", "theorem", "is_prime_iff", ["cardinal"]], ["mod", "theorem", "is_prime_pow_iff", ["cardinal"]], ["add", "theorem", "not_irreducible_of_aleph_0_le", ["cardinal"]], ["del", "theorem", "not_irreducible_of_omega_le", ["cardinal"]], ["add", "theorem", "prime_of_aleph_0_le", ["cardinal"]], ["del", "theorem", "prime_of_omega_le", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["mod", "theorem", "add_eq_left", ["cardinal"]], ["mod", "theorem", "add_eq_left_iff", ["cardinal"]], ["mod", "theorem", "add_eq_max'", ["cardinal"]], ["mod", "theorem", "add_eq_max", ["cardinal"]], ["mod", "theorem", "add_eq_right", ["cardinal"]], ["mod", "theorem", "add_eq_right_iff", ["cardinal"]], ["mod", "theorem", "add_eq_self", ["cardinal"]], ["mod", "theorem", "add_le_max", ["cardinal"]], ["mod", "theorem", "add_le_of_le", ["cardinal"]], ["mod", "theorem", "add_lt_of_lt", ["cardinal"]], ["mod", "theorem", "add_one_eq", ["cardinal"]], ["mod", "theorem", "aleph'_aleph_idx", ["cardinal"]], ["mod", "theorem", "aleph'_le", ["cardinal"]], ["mod", "theorem", "aleph'_le_of_limit", ["cardinal"]], ["mod", "theorem", "aleph'_lt", ["cardinal"]], ["mod", "theorem", "aleph'_omega", ["cardinal"]], ["mod", "theorem", "aleph'_succ", ["cardinal"]], ["mod", "def", "aleph", ["cardinal"]], ["add", "theorem", "aleph_0_le_aleph'", ["cardinal"]], ["add", "theorem", "aleph_0_le_aleph", ["cardinal"]], ["add", "theorem", "aleph_0_le_bit0", ["cardinal"]], ["add", "theorem", "aleph_0_le_bit1", ["cardinal"]], ["add", "theorem", "aleph_0_lt_aleph_one", ["cardinal"]], ["add", "theorem", "aleph_0_mul_aleph", ["cardinal"]], ["add", "theorem", "aleph_0_mul_eq", ["cardinal"]], ["add", "theorem", "aleph_0_mul_mk_eq", ["cardinal"]], ["mod", "theorem", "aleph_idx_aleph'", ["cardinal"]], ["mod", "theorem", "aleph_le", ["cardinal"]], ["mod", "theorem", "aleph_lt", ["cardinal"]], ["add", "theorem", "aleph_mul_aleph_0", ["cardinal"]], ["del", "theorem", "aleph_mul_omega", ["cardinal"]], ["mod", "theorem", "aleph_succ", ["cardinal"]], ["mod", "theorem", "aleph_zero", ["cardinal"]], ["mod", "theorem", "bit0_eq_self", ["cardinal"]], ["add", "theorem", "bit0_lt_aleph_0", ["cardinal"]], ["mod", "theorem", "bit0_lt_bit1", ["cardinal"]], ["del", "theorem", "bit0_lt_omega", ["cardinal"]], ["mod", "theorem", "bit1_eq_self_iff", ["cardinal"]], ["mod", "theorem", "bit1_le_bit0", ["cardinal"]], ["add", "theorem", "bit1_lt_aleph_0", ["cardinal"]], ["del", "theorem", "bit1_lt_omega", ["cardinal"]], ["mod", "theorem", "eq_aleph_of_eq_card_ord", ["cardinal"]], ["add", "theorem", "eq_of_add_eq_of_aleph_0_le", ["cardinal"]], ["del", "theorem", "eq_of_add_eq_of_omega_le", ["cardinal"]], ["mod", "theorem", "exists_aleph", ["cardinal"]], ["add", "theorem", "mk_list_eq_aleph_0", ["cardinal"]], ["add", "theorem", "mk_list_eq_max_mk_aleph_0", ["cardinal"]], ["del", "theorem", "mk_list_eq_max_mk_omega", ["cardinal"]], ["del", "theorem", "mk_list_eq_omega", ["cardinal"]], ["mod", "theorem", "mk_list_le_max", ["cardinal"]], ["add", "theorem", "mk_mul_aleph_0_eq", ["cardinal"]], ["del", "theorem", "mk_mul_omega_eq", ["cardinal"]], ["add", "theorem", "mul_aleph_0_eq", ["cardinal"]], ["mod", "theorem", "mul_eq_left", ["cardinal"]], ["mod", "theorem", "mul_eq_left_iff", ["cardinal"]], ["mod", "theorem", "mul_eq_max'", ["cardinal"]], ["mod", "theorem", "mul_eq_max", ["cardinal"]], ["add", "theorem", "mul_eq_max_of_aleph_0_le_left", ["cardinal"]], ["add", "theorem", "mul_eq_max_of_aleph_0_le_right", ["cardinal"]], ["del", "theorem", "mul_eq_max_of_omega_le_left", ["cardinal"]], ["del", "theorem", "mul_eq_max_of_omega_le_right", ["cardinal"]], ["mod", "theorem", "mul_eq_right", ["cardinal"]], ["mod", "theorem", "mul_eq_self", ["cardinal"]], ["mod", "theorem", "mul_le_max", ["cardinal"]], ["add", "theorem", "mul_le_max_of_aleph_0_le_left", ["cardinal"]], ["del", "theorem", "mul_le_max_of_omega_le_left", ["cardinal"]], ["mod", "theorem", "mul_lt_of_lt", ["cardinal"]], ["del", "theorem", "mul_omega_eq", ["cardinal"]], ["mod", "theorem", "nat_power_eq", ["cardinal"]], ["del", "theorem", "omega_le_aleph'", ["cardinal"]], ["del", "theorem", "omega_le_aleph", ["cardinal"]], ["del", "theorem", "omega_le_bit0", ["cardinal"]], ["del", "theorem", "omega_le_bit1", ["cardinal"]], ["del", "theorem", "omega_lt_aleph_one", ["cardinal"]], ["del", "theorem", "omega_mul_aleph", ["cardinal"]], ["del", "theorem", "omega_mul_eq", ["cardinal"]], ["del", "theorem", "omega_mul_mk_eq", ["cardinal"]], ["del", "theorem", "one_le_one", ["cardinal"]], ["mod", "theorem", "ord_card_unbounded'", ["cardinal"]], ["mod", "theorem", "ord_is_limit", ["cardinal"]], ["mod", "theorem", "pow_eq", ["cardinal"]], ["mod", "theorem", "pow_le", ["cardinal"]], ["mod", "theorem", "power_eq_two_power", ["cardinal"]], ["mod", "theorem", "power_nat_eq", ["cardinal"]], ["mod", "theorem", "power_nat_le", ["cardinal"]], ["mod", "theorem", "power_nat_le_max", ["cardinal"]], ["mod", "theorem", "power_self_eq", ["cardinal"]], ["add", "theorem", "powerlt_aleph_0", ["cardinal"]], ["add", "theorem", "powerlt_aleph_0_le", ["cardinal"]], ["del", "theorem", "powerlt_omega", ["cardinal"]], ["del", "theorem", "powerlt_omega_le", ["cardinal"]], ["mod", "theorem", "principal_add_ord", ["cardinal"]], ["add", "theorem", "succ_aleph_0", ["cardinal"]], ["del", "theorem", "succ_omega", ["cardinal"]], ["mod", "theorem", "type_cardinal", ["cardinal"]]]}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "add_one_of_aleph_0_le", ["cardinal"]], ["del", "theorem", "add_one_of_omega_le", ["cardinal"]], ["add", "theorem", "ord_aleph_0", ["cardinal"]], ["del", "theorem", "ord_omega", ["cardinal"]], ["mod", "theorem", "add_le_of_limit", ["ordinal"]], ["mod", "theorem", "div_nonempty", ["ordinal"]], ["mod", "theorem", "is_limit_iff_omega_dvd", ["ordinal"]], ["mod", "theorem", "lt_mul_of_limit", ["ordinal"]], ["mod", "theorem", "lt_omega", ["ordinal"]], ["mod", "theorem", "mul_le_of_limit", ["ordinal"]], ["mod", "theorem", "nat_lt_limit", ["ordinal"]], ["mod", "theorem", "nat_lt_omega", ["ordinal"]], ["mod", "theorem", "omega_is_limit", ["ordinal"]], ["mod", "theorem", "omega_le", ["ordinal"]], ["mod", "theorem", "omega_le_of_is_limit", ["ordinal"]], ["mod", "theorem", "omega_ne_zero", ["ordinal"]], ["mod", "theorem", "omega_pos", ["ordinal"]], ["mod", "theorem", "one_add_of_omega_le", ["ordinal"]], ["mod", "theorem", "one_add_omega", ["ordinal"]], ["mod", "theorem", "one_lt_omega", ["ordinal"]], ["mod", "def", "pred", ["ordinal"]], ["mod", "theorem", "sub_nonempty", ["ordinal"]], ["mod", "theorem", "sup_add_nat", ["ordinal"]], ["mod", "theorem", "sup_mul_nat", ["ordinal"]], ["mod", "theorem", "sup_nat_cast", ["ordinal"]], ["mod", "theorem", "sup_opow_nat", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "mk_ordinal_out", ["cardinal"]], ["mod", "theorem", "card_omega", ["ordinal"]], ["mod", "theorem", "lift_omega", ["ordinal"]], ["mod", "def", "univ", ["ordinal"]], ["mod", "theorem", "univ_id", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": [["mod", "theorem", "repr_opow_aux₁", ["onote"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1654405030, "sha": "8651b707", "message": "chore(set_theory/cardinal/cofinality): golf + fix spacing (#14509)", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}]}, {"timestamp": 1654397229, "sha": "10f45725", "message": "refactor(group_theory/group_action/defs): rename has_faithful_scalar (#14515)\nThis is the first scalar -> smul renaming transition.\nDiscussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/scalar.20smul.20naming.20discrepancy", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "to_alg_equiv_injective", ["mul_semiring_action"]], ["mod", "theorem", "to_alg_hom_injective", ["mul_semiring_action"]]]}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["mod", "theorem", "to_ring_hom_injective", []]]}, {"oldPath": "src/algebra/hom/aut.lean", "newPath": "src/algebra/hom/aut.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/equiv.lean", "newPath": "src/algebra/module/equiv.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/M_structure.lean", "newPath": "src/analysis/normed_space/M_structure.lean", "changes": [["mod", "theorem", "coe_bot", ["is_Lprojection"]], ["mod", "theorem", "coe_inf", ["is_Lprojection"]], ["mod", "theorem", "coe_sdiff", ["is_Lprojection"]], ["mod", "theorem", "coe_sup", ["is_Lprojection"]], ["mod", "theorem", "coe_top", ["is_Lprojection"]], ["mod", "theorem", "commute", ["is_Lprojection"]], ["mod", "theorem", "distrib_lattice_lemma", ["is_Lprojection"]], ["mod", "theorem", "join", ["is_Lprojection"]], ["mod", "theorem", "le_def", ["is_Lprojection"]], ["mod", "theorem", "mul", ["is_Lprojection"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "theorem", "smul_left_injective'", []]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["mod", "theorem", "to_perm_injective", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": [["del", "theorem", "has_faithful_scalar_at", ["pi"]], ["add", "theorem", "has_faithful_smul_at", ["pi"]]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": []}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1654392575, "sha": "157013da", "message": "feat(set_theory/cardinal/cofinality): weaker definition for regular cardinals (#14433)\nWe weaken `c.ord.cof = c` to `c ≤ c.ord.cof` in the definition of regular cardinals, in order to slightly simplify proofs. The lemma `is_regular.cof_eq` shows that this leads to an equivalent definition.", "changes": [{"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "theorem", "mk", ["cardinal", "is_inaccessible"]], ["mod", "theorem", "cof_ord_le", ["ordinal"]]]}]}, {"timestamp": 1654377699, "sha": "741f4deb", "message": "feat(data/fin/tuple/monotone): new file (#14483)", "changes": [{"oldPath": null, "newPath": "src/data/fin/tuple/monotone.lean", "changes": [["add", "theorem", "vec_cons", ["antitone"]], ["add", "theorem", "antitone_vec_cons", []], ["add", "theorem", "lift_fun_vec_cons", []], ["add", "theorem", "vec_cons", ["monotone"]], ["add", "theorem", "monotone_vec_cons", []], ["add", "theorem", "vec_cons", ["strict_anti"]], ["add", "theorem", "strict_anti_vec_cons", []], ["add", "theorem", "vec_cons", ["strict_mono"]], ["add", "theorem", "strict_mono_vec_cons", []]]}]}, {"timestamp": 1654377698, "sha": "f65b160d", "message": "feat(set_theory/cardinal/cofinality): basic lemmas on limit cardinals (#14439)", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "ne_zero", ["cardinal", "is_limit"]], ["add", "theorem", "succ_lt", ["cardinal", "is_limit"]], ["add", "theorem", "ne_zero", ["cardinal", "is_strong_limit"]], ["add", "theorem", "two_power_lt", ["cardinal", "is_strong_limit"]]]}]}, {"timestamp": 1654371848, "sha": "d136cd55", "message": "chore(data/pi/lex): turn `pi.lex.linear_order` into an instance (#14389)\n* Use `[is_well_order ι (<)]` instead of `(wf : well_founded ((<) : ι → ι → Prop))`. This way `pi.lex.linear_order` can be an instance.\n* Add `pi.lex.order_bot`/`pi.lex.order_top`/`pi.lex.bounded_order`.", "changes": [{"oldPath": "src/data/pi/lex.lean", "newPath": "src/data/pi/lex.lean", "changes": [["add", "theorem", "is_trichotomous_lex", ["pi"]], ["mod", "theorem", "le_of_forall_le", ["pi", "lex"]], ["add", "theorem", "le_of_of_lex_le", ["pi", "lex"]], ["add", "theorem", "to_lex_monotone", ["pi"]]]}]}, {"timestamp": 1654371847, "sha": "97492975", "message": "feat(measure_theory/integral/interval_integral): integrability of nonnegative derivatives on open intervals (#14147)\nShows that derivatives of continuous functions are integrable when nonnegative.", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["mod", "theorem", "integral_rpow", []], ["add", "theorem", "interval_integrable_rpow'", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["add", "theorem", "integrable_on_Ioc_of_interval_integral_norm_bounded", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioc_of_interval_integral_norm_bounded_left", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioc_of_interval_integral_norm_bounded_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc'", []], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc", []], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioo", []], ["add", "theorem", "integrable_on_Ioc_iff_integrable_on_Ioo'", []], ["add", "theorem", "integrable_on_Ioc_iff_integrable_on_Ioo", []], ["add", "theorem", "comp_mul_left", ["interval_integrable"]], ["add", "theorem", "iff_comp_neg", ["interval_integrable"]], ["add", "theorem", "interval_integrable_iff'", []], ["add", "theorem", "interval_integrable_iff_integrable_Icc_of_le", []], ["del", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc'", ["interval_integral"]], ["del", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc", ["interval_integral"]], ["add", "theorem", "integrable_on_deriv_of_nonneg", ["interval_integral"]], ["add", "theorem", "integrable_on_deriv_right_of_nonneg", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_right_of_le_real'", ["interval_integral"]], ["add", "theorem", "interval_integrable_deriv_of_nonneg", ["interval_integral"]], ["del", "theorem", "interval_integrable_iff_integrable_Icc_of_le", ["interval_integral"]], ["mod", "theorem", "sub_le_integral_of_has_deriv_right_of_le", ["interval_integral"]], ["add", "theorem", "sub_le_integral_of_has_deriv_right_of_le_Ico", ["interval_integral"]]]}]}, {"timestamp": 1654364063, "sha": "93fb5345", "message": "refactor(topology/vector_bundle): split file (#14535)\nAlso:\n* Rename `pullback` -> `topological_vector_bundle.pullback`\n* Use `delta_instance` instead of `local attribute [reducible]`\n* Change module doc\n* Remove transitive import", "changes": [{"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle/basic.lean", "changes": [["del", "theorem", "inducing_pullback_total_space_embedding", []], ["del", "theorem", "continuous_lift", ["pullback"]], ["del", "theorem", "continuous_proj", ["pullback"]], ["del", "theorem", "continuous_total_space_mk", ["pullback"]], ["del", "def", "pullback_topology", []], ["del", "theorem", "inducing_diag", ["topological_vector_bundle", "prod"]], ["del", "theorem", "base_set_prod", ["topological_vector_bundle", "trivialization"]], ["del", "theorem", "continuous_linear_equiv_at_prod", ["topological_vector_bundle", "trivialization"]], ["del", "theorem", "continuous_inv_fun", ["topological_vector_bundle", "trivialization", "prod"]], ["del", "theorem", "continuous_to_fun", ["topological_vector_bundle", "trivialization", "prod"]], ["del", "def", "inv_fun'", ["topological_vector_bundle", "trivialization", "prod"]], ["del", "theorem", "left_inv", ["topological_vector_bundle", "trivialization", "prod"]], ["del", "theorem", "right_inv", ["topological_vector_bundle", "trivialization", "prod"]], ["del", "def", "to_fun'", ["topological_vector_bundle", "trivialization", "prod"]], ["del", "def", "prod", ["topological_vector_bundle", "trivialization"]], ["del", "theorem", "prod_apply", ["topological_vector_bundle", "trivialization"]], ["del", "theorem", "prod_symm_apply", ["topological_vector_bundle", "trivialization"]], ["del", "def", "pullback", ["topological_vector_bundle", "trivialization"]]]}, {"oldPath": null, "newPath": "src/topology/vector_bundle/prod.lean", "changes": [["add", "theorem", "inducing_diag", ["topological_vector_bundle", "prod"]], ["add", "theorem", "base_set_prod", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "continuous_linear_equiv_at_prod", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "continuous_inv_fun", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "theorem", "continuous_to_fun", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "def", "inv_fun'", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "theorem", "left_inv", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "theorem", "right_inv", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "def", "to_fun'", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "def", "prod", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "prod_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "prod_symm_apply", ["topological_vector_bundle", "trivialization"]]]}, {"oldPath": null, "newPath": "src/topology/vector_bundle/pullback.lean", "changes": [["add", "theorem", "inducing_pullback_total_space_embedding", []], ["add", "theorem", "continuous_lift", ["pullback"]], ["add", "theorem", "continuous_proj", ["pullback"]], ["add", "theorem", "continuous_total_space_mk", ["pullback"]], ["add", "def", "pullback_topology", []], ["add", "def", "pullback", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1654364062, "sha": "3103a89b", "message": "feat(analysis/special_functions/exp): a lemma about `exp (f x) =O[l] const _ _` (#14524)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_O_const_left_iff_pos_le_norm", ["asymptotics"]]]}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "is_O_one_exp_comp", ["real"]]]}]}, {"timestamp": 1654364061, "sha": "19b57866", "message": "feat(tactic/set): fix a bug (#14488)\nWe make the behaviour of `tactic.interactive.set` closer to that of `tactic.interactive.let`, this should fix the following issue reported in https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/set.20bug.3F/near/284471523:\n```lean\nimport ring_theory.adjoin.basic\nexample {R S : Type*} [comm_ring R] [comm_ring S] [algebra R S] (x : S): false :=\nbegin\n let y : algebra.adjoin R ({x} : set S) := ⟨x, algebra.self_mem_adjoin_singleton R x⟩, -- works\n set y : algebra.adjoin R ({x} : set S) := ⟨x, algebra.self_mem_adjoin_singleton R x⟩, -- error\n sorry\nend\n```\nThis is related to [lean#555\n](https://github.com/leanprover-community/lean/pull/555)\nI also fix two completely unrelated docstrings (where the list syntax created two lists instead of one) as I wouldn't want to separately add them to CI...", "changes": [{"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/set.lean", "newPath": "test/set.lean", "changes": [["add", "inductive", "foo", []]]}]}, {"timestamp": 1654364060, "sha": "a869df9e", "message": "feat(analysis/asymptotics/asymptotics): generalize `is_*.inv_rev` (#14486)\nUse weaker assumption `∀ᶠ x in l, f x = 0 → g x = 0` instead of `∀ᶠ x in l, f x ≠ 0`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}]}, {"timestamp": 1654364059, "sha": "8a6a7933", "message": "refactor(data/fin/basic): reformulate `fin.strict_mono_iff_lt_succ` (#14482)\nUse `fin.succ_cast` and `fin.succ`. This way we lose the case `n = 0`\nbut the statement looks more natural in other cases. Also add versions\nfor `monotone`, `antitone`, and `strict_anti`.", "changes": [{"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "antitone_iff_succ_le", ["fin"]], ["add", "theorem", "lift_fun_iff_succ", ["fin"]], ["add", "theorem", "monotone_iff_le_succ", ["fin"]], ["add", "theorem", "strict_anti_iff_succ_lt", ["fin"]], ["mod", "theorem", "strict_mono_iff_lt_succ", ["fin"]]]}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}]}, {"timestamp": 1654364058, "sha": "cab5a456", "message": "refactor(order/directed): use `(≥)` instead of `swap (≤)` (#14474)", "changes": [{"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": [["mod", "theorem", "convex", ["quasiconcave_on"]]]}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["mod", "theorem", "exists_le_le", []], ["mod", "theorem", "exists_lt_of_directed_ge", []], ["mod", "theorem", "is_bot_iff_is_min", []], ["mod", "theorem", "is_bot_or_exists_lt", []]]}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["mod", "theorem", "inter_nonempty", ["order", "ideal"]]]}]}, {"timestamp": 1654364057, "sha": "b5973ba9", "message": "feat(measure_theory/measure/measure_space): there exists a ball of positive measure (#14449)\nMotivated by #12933", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "exists_pos_ball", ["measure_theory"]], ["add", "theorem", "exists_pos_measure_of_cover", ["measure_theory"]], ["add", "theorem", "exists_pos_preimage_ball", ["measure_theory"]]]}]}, {"timestamp": 1654356358, "sha": "cfcc3a1b", "message": "chore(data/finsupp/basic): make arguments explicit (#14551)\nThis follow the pattern that arguments to an `=` lemma should be explicit if they're not implied by other arguments.", "changes": [{"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "single_add", ["finsupp"]], ["mod", "theorem", "single_eq_pi_single", ["finsupp"]], ["mod", "theorem", "single_eq_update", ["finsupp"]], ["mod", "theorem", "single_neg", ["finsupp"]], ["mod", "theorem", "single_sub", ["finsupp"]], ["mod", "theorem", "single_zero", ["finsupp"]], ["mod", "theorem", "support_single_ne_zero", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/multiset.lean", "newPath": "src/data/finsupp/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "C_add", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1654356356, "sha": "b9492402", "message": "feat(algebra/{lie/subalgebra,module/submodule/pointwise}): submodules and lie subalgebras form canonically ordered additive monoids under addition (#14529)\nWe can't actually make these instances because they result in loops for `simp`.\nThe `le_iff_exists_sup` lemma is probably not very useful for much beyond these new instances, but it matches `le_iff_exists_add`.", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "def", "canonically_ordered_add_monoid", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/module/submodule/pointwise.lean", "newPath": "src/algebra/module/submodule/pointwise.lean", "changes": [["add", "def", "canonically_ordered_add_monoid", ["submodule"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "le_iff_exists_sup", []]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": []}]}, {"timestamp": 1654356356, "sha": "83c1cd8a", "message": "feat(set_theory/cardinal/cofinality): `ω` is a strong limit cardinal (#14436)", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "is_limit_omega", ["cardinal"]], ["add", "theorem", "is_strong_limit_omega", ["cardinal"]]]}]}, {"timestamp": 1654356355, "sha": "0746194f", "message": "feat(set_theory/cardinal/cofinality): limit cardinal is at least `ω` (#14432)", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "omega_le", ["cardinal", "is_limit"]]]}]}, {"timestamp": 1654356354, "sha": "15726ee0", "message": "move(set_theory/{schroeder_bernstein → cardinal/schroeder_bernstein}): move file (#14426)\nSchroeder-Bernstein is ultimately the statement that cardinals are a total order, so it should go in that folder.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/cardinal/schroeder_bernstein.lean", "changes": []}]}, {"timestamp": 1654356353, "sha": "1f196cb2", "message": "feat(data/list/nodup): Add `list.nodup_iff` (#14371)\nAdd `list.nodup_iff` and two helper lemmas `list.nth_le_eq_iff` and `list.some_nth_le_eq`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_le_eq_iff", ["list"]], ["add", "theorem", "some_nth_le_eq", ["list"]]]}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["add", "theorem", "nodup_iff_nth_ne_nth", ["list"]]]}]}, {"timestamp": 1654348626, "sha": "aa7d90bc", "message": "doc(set_theory/ordinal/natural_ops): mention alternate names (#14546)", "changes": [{"oldPath": "src/set_theory/ordinal/natural_ops.lean", "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": []}]}, {"timestamp": 1654348625, "sha": "8ef2c02c", "message": "chore(order/bounded_order): move `order_dual` instances up, use them to golf lemmas (#14544)\nI only golf lemmas and `Prop`-valued instances to be sure that I don't add `order_dual`s to the statements.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "not_is_max_bot", []], ["del", "theorem", "of_dual_bot", []], ["del", "theorem", "of_dual_top", []], ["add", "theorem", "of_dual_bot", ["order_dual"]], ["add", "theorem", "of_dual_top", ["order_dual"]], ["add", "theorem", "to_dual_bot", ["order_dual"]], ["add", "theorem", "to_dual_top", ["order_dual"]], ["del", "theorem", "to_dual_bot", []], ["del", "theorem", "to_dual_top", []], ["mod", "theorem", "not_top_le_coe", ["with_top"]]]}]}, {"timestamp": 1654348624, "sha": "50024528", "message": "refactor(topology): move code around (#14525)\nCreate a new file `topology/inseparable` and more the definitions of `specializes` and `inseparable` to this file. This is a preparation to a larger refactor of these definitions.", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "map_specialization", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/inseparable.lean", "changes": [["add", "theorem", "map", ["inseparable"]], ["add", "def", "inseparable", []], ["add", "theorem", "inseparable_iff_closed", []], ["add", "theorem", "inseparable_iff_closure", []], ["add", "theorem", "inseparable_iff_nhds_eq", []], ["add", "theorem", "inseparable_iff_specializes_and", []], ["add", "theorem", "monotone_of_continuous", ["specialization_order"]], ["add", "def", "specialization_preorder", []], ["add", "theorem", "map", ["specializes"]], ["add", "theorem", "trans", ["specializes"]], ["add", "def", "specializes", []], ["add", "theorem", "specializes_def", []], ["add", "theorem", "specializes_iff_closure_subset", []], ["add", "theorem", "specializes_iff_forall_closed", []], ["add", "theorem", "specializes_iff_forall_open", []], ["add", "theorem", "specializes_refl", []], ["add", "theorem", "specializes_rfl", []], ["add", "theorem", "subtype_inseparable_iff", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "map", ["inseparable"]], ["del", "def", "inseparable", []], ["del", "theorem", "inseparable_iff_closed", []], ["del", "theorem", "inseparable_iff_closure", []], ["del", "theorem", "inseparable_iff_nhds_eq", []], ["add", "def", "specialization_order", []], ["add", "theorem", "eq", ["specializes"]], ["add", "theorem", "specializes_antisymm", []], ["add", "theorem", "specializes_iff_eq", []], ["del", "theorem", "subtype_inseparable_iff", []]]}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": [["del", "theorem", "map_specialization", ["continuous_map"]], ["del", "theorem", "inseparable_iff_specializes_and", []], ["del", "theorem", "monotone_of_continuous", ["specialization_order"]], ["del", "def", "specialization_order", []], ["del", "def", "specialization_preorder", []], ["del", "theorem", "eq", ["specializes"]], ["del", "theorem", "map", ["specializes"]], ["del", "theorem", "trans", ["specializes"]], ["del", "def", "specializes", []], ["del", "theorem", "specializes_antisymm", []], ["del", "theorem", "specializes_def", []], ["del", "theorem", "specializes_iff_closure_subset", []], ["del", "theorem", "specializes_iff_eq", []], ["del", "theorem", "specializes_iff_forall_closed", []], ["del", "theorem", "specializes_iff_forall_open", []], ["del", "theorem", "specializes_refl", []], ["del", "theorem", "specializes_rfl", []]]}]}, {"timestamp": 1654348623, "sha": "66b618d2", "message": "perf(measure_theory/probability_mass_function/monad): speed up proof (#14519)\nThis causes a deterministic timeout in another PR.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/monad.lean", "newPath": "src/measure_theory/probability_mass_function/monad.lean", "changes": []}]}, {"timestamp": 1654348622, "sha": "3f26dfe2", "message": "feat(data/int/basic): Units are either equal or negatives of each other (#14517)\nThis PR adds a lemma stating that units in the integers are either equal or negatives of each other. I have found this lemma to be useful for casework.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "is_unit_eq_or_eq_neg", ["int"]]]}]}, {"timestamp": 1654348621, "sha": "b332507c", "message": "feat(data/int/basic): Forward direction of `is_unit_iff_nat_abs_eq` (#14516)\nThis PR adds the forward direction of `is_unit_iff_nat_abs_eq` as a separate lemma. This is useful since you often have `is_unit n` as a hypothesis, and `is_unit_iff_nat_abs_eq.mp hn` is a bit of a mouthful.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1654348620, "sha": "2a9be5b5", "message": "feat(analysis/special_functions): lemmas about filter `map`/`comap` (#14513)\n* add `comap_inf_principal_range` and `comap_nhds_within_range`;\n* add `@[simp]` to `real.comap_exp_nhds_within_Ioi_zero`;\n* add `real.comap_exp_nhds_zero`, `complex.comap_exp_comap_abs_at_top`, `complex.comap_exp_nhds_zero`, `complex.comap_exp_nhds_within_zero`, and `complex.tendsto_exp_nhds_zero_iff`;\n* add `complex.map_exp_comap_re_at_bot` and `complex.map_exp_comap_re_at_top`;\n* add `comap_norm_nhds_zero` and `complex.comap_abs_nhds_zero`.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "comap_abs_nhds_zero", ["complex"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "comap_norm_nhds_zero", []]]}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["add", "theorem", "map_exp_comap_re_at_bot", ["complex"]], ["add", "theorem", "map_exp_comap_re_at_top", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "comap_exp_comap_abs_at_top", ["complex"]], ["add", "theorem", "comap_exp_nhds_within_zero", ["complex"]], ["add", "theorem", "comap_exp_nhds_zero", ["complex"]], ["add", "theorem", "tendsto_exp_nhds_zero_iff", ["complex"]], ["mod", "theorem", "comap_exp_nhds_within_Ioi_zero", ["real"]], ["add", "theorem", "comap_exp_nhds_zero", ["real"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_inf_principal_range", ["filter"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "comap_nhds_within_range", []]]}]}, {"timestamp": 1654348619, "sha": "0e943b15", "message": "feat(order/boolean_algebra, set/basic): some compl lemmas (#14508)\nAdded a few lemmas about complementation, and rephrased `compl_compl` and `mem_compl_image` to apply in `boolean_algebra` rather than `set (set _ ))`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "compl_compl_image", ["set"]], ["mod", "theorem", "mem_compl_image", ["set"]], ["add", "theorem", "preimage_compl_eq_image_compl", ["set"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_eq_comm", []], ["add", "theorem", "disjoint_iff_le_compl_left", []], ["add", "theorem", "disjoint_iff_le_compl_right", []], ["add", "theorem", "eq_compl_comm", []]]}]}, {"timestamp": 1654348618, "sha": "27c4241b", "message": "feat(set_theory/ordinal/arithmetic): `has_exists_add_of_le` instance for `ordinal` (#14499)", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}]}, {"timestamp": 1654341173, "sha": "7c57af94", "message": "feat(order/bounds): Bounds on `set.image2` (#14306)\n`set.image2` analogues to the `set.image` lemmas.", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "bdd_above_image2_of_bdd_below", ["bdd_above"]], ["add", "theorem", "bdd_below_image2_of_bdd_above", ["bdd_above"]], ["add", "theorem", "image2", ["bdd_above"]], ["add", "theorem", "image2_bdd_below", ["bdd_above"]], ["add", "theorem", "bdd_above_image2_of_bdd_above", ["bdd_below"]], ["add", "theorem", "bdd_below_image2_of_bdd_above", ["bdd_below"]], ["add", "theorem", "image2", ["bdd_below"]], ["add", "theorem", "image2_bdd_above", ["bdd_below"]], ["add", "theorem", "image2_lower_bounds_lower_bounds_subset", []], ["add", "theorem", "image2_lower_bounds_lower_bounds_subset_lower_bounds_image2", []], ["add", "theorem", "image2_lower_bounds_upper_bounds_subset_lower_bounds_image2", []], ["add", "theorem", "image2_lower_bounds_upper_bounds_subset_upper_bounds_image2", []], ["add", "theorem", "image2_upper_bounds_lower_bounds_subset_lower_bounds_image2", []], ["add", "theorem", "image2_upper_bounds_lower_bounds_subset_upper_bounds_image2", []], ["add", "theorem", "image2_upper_bounds_upper_bounds_subset", []], ["add", "theorem", "image2_upper_bounds_upper_bounds_subset_upper_bounds_image2", []], ["add", "theorem", "image2", ["is_greatest"]], ["add", "theorem", "is_greatest_image2_of_is_least", ["is_greatest"]], ["add", "theorem", "is_least_image2", ["is_greatest"]], ["add", "theorem", "is_least_image2_of_is_least", ["is_greatest"]], ["add", "theorem", "image2", ["is_least"]], ["add", "theorem", "is_greatest_image2", ["is_least"]], ["add", "theorem", "is_greatest_image2_of_is_greatest", ["is_least"]], ["add", "theorem", "is_least_image2_of_is_greatest", ["is_least"]], ["add", "theorem", "mem_lower_bounds_image2", []], ["add", "theorem", "mem_lower_bounds_image2_of_mem_lower_bounds_of_mem_lower_bounds", []], ["add", "theorem", "mem_lower_bounds_image2_of_mem_lower_bounds_of_mem_upper_bounds", []], ["add", "theorem", "mem_lower_bounds_image2_of_mem_upper_bounds", []], ["add", "theorem", "mem_upper_bounds_image2", []], ["add", "theorem", "mem_upper_bounds_image2_of_mem_lower_bounds", []], ["add", "theorem", "mem_upper_bounds_image2_of_mem_upper_bounds_of_mem_lower_bounds", []], ["add", "theorem", "mem_upper_bounds_image2_of_mem_upper_bounds_of_mem_upper_bounds", []]]}]}, {"timestamp": 1654331421, "sha": "85fffda8", "message": "feat(order/conditionally_complete_lattice,data/real/nnreal): add 2 lemmas (#14545)\nAdd `cInf_univ` and `nnreal.Inf_empty`.", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "Inf_empty", ["nnreal"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_univ", []]]}]}, {"timestamp": 1654324376, "sha": "72ac40e9", "message": "feat(data/multiset/basic): add some lemmas (#14421)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "countp_nsmul", ["multiset"]], ["add", "theorem", "map_eq_cons", ["multiset"]], ["add", "theorem", "map_surjective_of_surjective", ["multiset"]], ["add", "theorem", "countp_eq", ["multiset", "rel"]], ["add", "theorem", "trans", ["multiset", "rel"]]]}]}, {"timestamp": 1654318508, "sha": "a418945a", "message": "chore(set_theory/surreal/basic): golf (#14168)\nWe also add some basic lemmas for simplifying the definition of `numeric` when either a game's left or right moves are empty.", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "numeric_of_is_empty", ["pgame"]], ["add", "theorem", "numeric_of_is_empty_left_moves", ["pgame"]], ["add", "theorem", "numeric_of_is_empty_right_moves", ["pgame"]], ["mod", "theorem", "numeric_one", ["pgame"]], ["mod", "theorem", "numeric_zero", ["pgame"]], ["mod", "def", "mk", ["surreal"]]]}]}, {"timestamp": 1654316205, "sha": "e1b3351d", "message": "feat(set_theory/game/pgame): Add dot notation on many lemmas (#14149)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "grundy_value_star", ["pgame"]], ["mod", "theorem", "grundy_value_zero", ["pgame"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "not_lf", ["has_le", "le"]], ["add", "theorem", "ge", ["pgame", "equiv"]], ["add", "theorem", "le", ["pgame", "equiv"]], ["mod", "theorem", "equiv_refl", ["pgame"]], ["mod", "theorem", "equiv_rfl", ["pgame"]], ["del", "theorem", "equiv_symm", ["pgame"]], ["del", "theorem", "equiv_trans", ["pgame"]], ["add", "theorem", "not_equiv'", ["pgame", "lf"]], ["add", "theorem", "not_equiv", ["pgame", "lf"]], ["add", "theorem", "not_le", ["pgame", "lf"]], ["add", "theorem", "not_lt", ["pgame", "lf"]], ["mod", "theorem", "lf_irrefl", ["pgame"]], ["mod", "theorem", "lf_of_fuzzy", ["pgame"]], ["mod", "theorem", "lf_of_lt", ["pgame"]]]}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["mod", "theorem", "le_of_lf", ["pgame"]], ["mod", "theorem", "lt_of_lf", ["pgame"]], ["add", "theorem", "lt_or_equiv_or_gt", ["pgame"]]]}]}, {"timestamp": 1654295596, "sha": "00982865", "message": "feat(set_theory/ordinal/natural_ops): define natural addition (#14291)\nWe define the natural addition operation on ordinals. We prove the basic properties, like commutativity, associativity, and cancellativity. We also provide the type synonym `nat_ordinal` for ordinals with natural operations, which allows us to take full advantage of this rich algebraic structure.", "changes": [{"oldPath": null, "newPath": "src/set_theory/ordinal/natural_ops.lean", "changes": [["add", "theorem", "add_one_eq_succ", ["nat_ordinal"]], ["add", "theorem", "induction", ["nat_ordinal"]], ["add", "theorem", "lt_wf", ["nat_ordinal"]], ["add", "theorem", "succ_def", ["nat_ordinal"]], ["add", "def", "to_ordinal", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_cast_nat", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_eq_one", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_eq_zero", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_max", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_min", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_one", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_symm_eq", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_to_nat_ordinal", ["nat_ordinal"]], ["add", "theorem", "to_ordinal_zero", ["nat_ordinal"]], ["add", "def", "nat_ordinal", []], ["add", "theorem", "add_le_nadd", ["ordinal"]], ["add", "theorem", "blsub_nadd_of_mono", ["ordinal"]], ["add", "theorem", "le_of_nadd_le_nadd_left", ["ordinal"]], ["add", "theorem", "le_of_nadd_le_nadd_right", ["ordinal"]], ["add", "theorem", "lt_nadd_iff", ["ordinal"]], ["add", "theorem", "lt_of_nadd_lt_nadd_left", ["ordinal"]], ["add", "theorem", "lt_of_nadd_lt_nadd_right", ["ordinal"]], ["add", "theorem", "nadd_assoc", ["ordinal"]], ["add", "theorem", "nadd_comm", ["ordinal"]], ["add", "theorem", "nadd_def", ["ordinal"]], ["add", "theorem", "nadd_le_iff", ["ordinal"]], ["add", "theorem", "nadd_le_nadd_iff_left", ["ordinal"]], ["add", "theorem", "nadd_le_nadd_iff_right", ["ordinal"]], ["add", "theorem", "nadd_le_nadd_left", ["ordinal"]], ["add", "theorem", "nadd_le_nadd_right", ["ordinal"]], ["add", "theorem", "nadd_left_cancel", ["ordinal"]], ["add", "theorem", "nadd_left_cancel_iff", ["ordinal"]], ["add", "theorem", "nadd_lt_nadd_iff_left", ["ordinal"]], ["add", "theorem", "nadd_lt_nadd_iff_right", ["ordinal"]], ["add", "theorem", "nadd_lt_nadd_left", ["ordinal"]], ["add", "theorem", "nadd_lt_nadd_right", ["ordinal"]], ["add", "theorem", "nadd_nat", ["ordinal"]], ["add", "theorem", "nadd_one", ["ordinal"]], ["add", "theorem", "nadd_right_cancel", ["ordinal"]], ["add", "theorem", "nadd_right_cancel_iff", ["ordinal"]], ["add", "theorem", "nadd_succ", ["ordinal"]], ["add", "theorem", "nadd_zero", ["ordinal"]], ["add", "theorem", "nat_nadd", ["ordinal"]], ["add", "theorem", "one_nadd", ["ordinal"]], ["add", "theorem", "succ_nadd", ["ordinal"]], ["add", "def", "to_nat_ordinal", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_cast_nat", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_eq_one", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_eq_zero", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_max", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_min", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_one", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_symm_eq", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_to_ordinal", ["ordinal"]], ["add", "theorem", "to_nat_ordinal_zero", ["ordinal"]], ["add", "theorem", "zero_nadd", ["ordinal"]]]}]}, {"timestamp": 1654272971, "sha": "d63246c0", "message": "feat(analysis/calculus/fderiv_measurable): the right derivative is measurable (#14527)\nWe already know that the full Fréchet derivative is measurable. In this PR, we follow the same proof to show that the right derivative of a function defined on the real line is also measurable (the target space may be any complete vector space).", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_mem_iff", []], ["add", "theorem", "deriv_within_Ioi_eq_Ici", []], ["add", "theorem", "deriv_within_mem_iff", []], ["add", "theorem", "differentiable_within_at_Ioi_iff_Ici", []], ["add", "theorem", "has_deriv_at_filter_iff_is_o", []], ["add", "theorem", "has_deriv_at_iff_is_o", []], ["add", "theorem", "has_deriv_within_at_iff_is_o", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_within_mem_iff", []]]}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": [["add", "theorem", "ae_measurable_deriv_within_Ici", []], ["add", "theorem", "ae_measurable_deriv_within_Ioi", []], ["add", "theorem", "ae_strongly_measurable_deriv_within_Ici", []], ["add", "theorem", "ae_strongly_measurable_deriv_within_Ioi", []], ["add", "theorem", "measurable_deriv_within_Ici", []], ["add", "theorem", "measurable_deriv_within_Ioi", []], ["add", "theorem", "measurable_set_of_differentiable_within_at_Ici", []], ["add", "theorem", "measurable_set_of_differentiable_within_at_Ici_of_is_complete", []], ["add", "theorem", "measurable_set_of_differentiable_within_at_Ioi", []], ["add", "def", "A", ["right_deriv_measurable_aux"]], ["add", "theorem", "A_mem_nhds_within_Ioi", ["right_deriv_measurable_aux"]], ["add", "theorem", "A_mono", ["right_deriv_measurable_aux"]], ["add", "def", "B", ["right_deriv_measurable_aux"]], ["add", "theorem", "B_mem_nhds_within_Ioi", ["right_deriv_measurable_aux"]], ["add", "def", "D", ["right_deriv_measurable_aux"]], ["add", "theorem", "D_subset_differentiable_set", ["right_deriv_measurable_aux"]], ["add", "theorem", "differentiable_set_eq_D", ["right_deriv_measurable_aux"]], ["add", "theorem", "differentiable_set_subset_D", ["right_deriv_measurable_aux"]], ["add", "theorem", "le_of_mem_A", ["right_deriv_measurable_aux"]], ["add", "theorem", "measurable_set_B", ["right_deriv_measurable_aux"]], ["add", "theorem", "mem_A_of_differentiable", ["right_deriv_measurable_aux"]], ["add", "theorem", "norm_sub_le_of_mem_A", ["right_deriv_measurable_aux"]], ["add", "theorem", "strongly_measurable_deriv_within_Ici", []], ["add", "theorem", "strongly_measurable_deriv_within_Ioi", []]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "measurable_set_of_mem_nhds_within_Ioi", []], ["add", "theorem", "measurable_set_of_mem_nhds_within_Ioi_aux", []]]}]}, {"timestamp": 1654272970, "sha": "2a21a861", "message": "refactor(algebra/order/ring): turn `sq_le_sq` into an `iff` (#14511)\n* `sq_le_sq` and `sq_lt_sq` are now `iff` lemmas;\n* drop `abs_le_abs_of_sq_le_sq` and `abs_lt_abs_of_sq_lt_sq`.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["del", "theorem", "abs_le_abs_of_sq_le_sq", []], ["del", "theorem", "abs_lt_abs_of_sq_lt_sq", []], ["mod", "theorem", "sq_le_sq", []], ["mod", "theorem", "sq_lt_sq", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": [["add", "theorem", "δ_pos", ["bernstein_approximation"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}]}, {"timestamp": 1654265317, "sha": "fa226034", "message": "docs(order/boolean_algebra): typo in generalized boolean algebra doc (#14536)", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}]}, {"timestamp": 1654259252, "sha": "6ca5910f", "message": "feat(measure_theory/integral/lebesgue): approximate a function by a finite integral function in a sigma-finite measure space. (#14528)\nIf `L < ∫⁻ x, f x ∂μ`, then there exists a measurable function `g ≤ f` (even a simple function) with finite integral and `L < ∫⁻ x, g x ∂μ`, if the measure is sigma-finite.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "exists_lt_lintegral_simple_func_of_lt_lintegral", ["measure_theory"]], ["add", "theorem", "exists_lt_lintegral_simple_func_of_lt_lintegral", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "exists_lt_add_of_lt_add", ["ennreal"]]]}]}, {"timestamp": 1654252277, "sha": "bec8b65e", "message": "feat(analysis/calculus/tangent_cone): unique differentiability of open interval at endpoint (#14530)\nWe show that, if a point belongs to the closure of a convex set with nonempty interior, then it is a point of unique differentiability. We apply this to the specific situation of `Ioi` and `Iio`.", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "mem_tangent_cone_of_open_segment_subset", []], ["add", "theorem", "unique_diff_within_at_Iio", []], ["add", "theorem", "unique_diff_within_at_Ioi", []], ["add", "theorem", "unique_diff_within_at_convex", []]]}]}, {"timestamp": 1654252276, "sha": "705160e9", "message": "feat(algebra/char_zero): add a lemma `ring_hom.injective_nat` (#14414)\nNote that there is a lemma `ring_hom.injective_int`.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "injective_nat", ["ring_hom"]]]}]}, {"timestamp": 1654252275, "sha": "d2dcb74a", "message": "feat(data/polynomial/eval): reduce assumptions, add a lemma (#14391)\nNote that there is a lemma `mv_polynomial.support_map_of_injective`.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "support_map_of_injective", ["polynomial"]], ["mod", "theorem", "support_map_subset", ["polynomial"]]]}]}, {"timestamp": 1654252274, "sha": "c9d69a46", "message": "feat(topology/algebra/module/finite_dimension): all linear maps from a finite dimensional T2 TVS are continuous (#13460)\nSummary of the changes :\n- generalize a bunch of results from `analysis/normed_space/finite_dimension` (main ones are : `continuous_equiv_fun_basis`, `linear_map.continuous_of_finite_dimensional`, and related constructions like `linear_map.to_continuous_linear_map`) to arbitrary TVSs, and move them to a new file `topology/algebra/module/finite_dimension`\n- generalize `linear_map.continuous_iff_is_closed_ker` to arbitrary TVSs, and move it from `analysis/normed_space/operator_norm` to the new file\n- as needed by the generalizations, add lemma `unique_topology_of_t2` : if `𝕜` is a nondiscrete normed field, any T2 topology on `𝕜` which makes it a topological vector space over itself (with the norm topology) is *equal* to the norm topology\n- finally, change `pi_eq_sum_univ` to take any `decidable_eq` instance (not just the classical ones), and fix later uses", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["del", "theorem", "continuous_equiv_fun_basis", []], ["del", "theorem", "coe_to_continuous_linear_equiv_of_det_ne_zero", ["continuous_linear_map"]], ["del", "def", "to_continuous_linear_equiv_of_det_ne_zero", ["continuous_linear_map"]], ["del", "theorem", "to_continuous_linear_equiv_of_det_ne_zero_apply", ["continuous_linear_map"]], ["del", "theorem", "coe_to_continuous_linear_equiv'", ["linear_equiv"]], ["del", "theorem", "coe_to_continuous_linear_equiv", ["linear_equiv"]], ["del", "theorem", "coe_to_continuous_linear_equiv_symm'", ["linear_equiv"]], ["del", "theorem", "coe_to_continuous_linear_equiv_symm", ["linear_equiv"]], ["del", "def", "to_continuous_linear_equiv", ["linear_equiv"]], ["del", "theorem", "to_linear_equiv_to_continuous_linear_equiv", ["linear_equiv"]], ["del", "theorem", "to_linear_equiv_to_continuous_linear_equiv_symm", ["linear_equiv"]], ["del", "theorem", "coe_to_continuous_linear_map'", ["linear_map"]], ["del", "theorem", "coe_to_continuous_linear_map", ["linear_map"]], ["del", "theorem", "coe_to_continuous_linear_map_symm", ["linear_map"]], ["del", "theorem", "continuous_of_finite_dimensional", ["linear_map"]], ["del", "theorem", "continuous_on_pi", ["linear_map"]], ["del", "def", "to_continuous_linear_map", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "continuous_iff_is_closed_ker", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "pi_apply_eq_sum_univ", ["linear_map"]], ["mod", "theorem", "pi_eq_sum_univ", []]]}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/module/finite_dimension.lean", "changes": [["add", "theorem", "continuous_equiv_fun_basis", []], ["add", "theorem", "coe_to_continuous_linear_equiv_of_det_ne_zero", ["continuous_linear_map"]], ["add", "def", "to_continuous_linear_equiv_of_det_ne_zero", ["continuous_linear_map"]], ["add", "theorem", "to_continuous_linear_equiv_of_det_ne_zero_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_to_continuous_linear_equiv'", ["linear_equiv"]], ["add", "theorem", "coe_to_continuous_linear_equiv", ["linear_equiv"]], ["add", "theorem", "coe_to_continuous_linear_equiv_symm'", ["linear_equiv"]], ["add", "theorem", "coe_to_continuous_linear_equiv_symm", ["linear_equiv"]], ["add", "def", "to_continuous_linear_equiv", ["linear_equiv"]], ["add", "theorem", "to_linear_equiv_to_continuous_linear_equiv", ["linear_equiv"]], ["add", "theorem", "to_linear_equiv_to_continuous_linear_equiv_symm", ["linear_equiv"]], ["add", "theorem", "coe_to_continuous_linear_map'", ["linear_map"]], ["add", "theorem", "coe_to_continuous_linear_map", ["linear_map"]], ["add", "theorem", "coe_to_continuous_linear_map_symm", ["linear_map"]], ["add", "theorem", "continuous_iff_is_closed_ker", ["linear_map"]], ["add", "theorem", "continuous_of_finite_dimensional", ["linear_map"]], ["add", "theorem", "continuous_of_is_closed_ker", ["linear_map"]], ["add", "theorem", "continuous_on_pi", ["linear_map"]], ["add", "def", "to_continuous_linear_map", ["linear_map"]], ["add", "theorem", "unique_topology_of_t2", []]]}]}, {"timestamp": 1654246639, "sha": "31cbfbb0", "message": "feat(linear_algebra/basis): repr_support_of_mem_span (#14504)\nThis lemma states that if a vector is in the span of a subset of the basis vectors, only this subset of basis vectors will be used in its `repr` representation.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "repr_support_subset_of_mem_span", ["basis"]]]}]}, {"timestamp": 1654243139, "sha": "2b69bb43", "message": "feat(analysis/complex/upper_half_plane): extend action on upper half plane to GL_pos (#12415)\nThis extends the action on the upper half plane from `SL_2` to `GL_pos`,", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane.lean", "newPath": "src/analysis/complex/upper_half_plane.lean", "changes": [["add", "theorem", "SL_neg_smul", ["upper_half_plane"]], ["add", "theorem", "SL_on_GL_pos_smul_apply", ["upper_half_plane"]], ["mod", "theorem", "coe_smul", ["upper_half_plane"]], ["mod", "def", "denom", ["upper_half_plane"]], ["add", "theorem", "denom_apply", ["upper_half_plane"]], ["mod", "theorem", "denom_cocycle", ["upper_half_plane"]], ["mod", "theorem", "denom_ne_zero", ["upper_half_plane"]], ["mod", "theorem", "im_smul", ["upper_half_plane"]], ["mod", "theorem", "im_smul_eq_div_norm_sq", ["upper_half_plane"]], ["mod", "theorem", "mul_smul'", ["upper_half_plane"]], ["mod", "theorem", "neg_smul", ["upper_half_plane"]], ["mod", "theorem", "norm_sq_denom_ne_zero", ["upper_half_plane"]], ["mod", "theorem", "norm_sq_denom_pos", ["upper_half_plane"]], ["mod", "def", "num", ["upper_half_plane"]], ["mod", "theorem", "re_smul", ["upper_half_plane"]], ["add", "theorem", "sl_moeb", ["upper_half_plane"]], ["mod", "def", "smul_aux'", ["upper_half_plane"]], ["mod", "theorem", "smul_aux'_im", ["upper_half_plane"]], ["mod", "def", "smul_aux", ["upper_half_plane"]], ["add", "theorem", "im_smul_eq_div_norm_sq", ["upper_half_plane", "special_linear_group"]], ["add", "theorem", "subgroup_moeb", ["upper_half_plane"]], ["add", "theorem", "subgroup_on_GL_pos_smul_apply", ["upper_half_plane"]], ["add", "theorem", "subgroup_on_SL_apply", ["upper_half_plane"]], ["add", "theorem", "subgroup_to_sl_moeb", ["upper_half_plane"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": [["mod", "theorem", "coe_T_zpow_smul_eq", ["modular_group"]], ["del", "theorem", "coe_smul", ["modular_group"]], ["del", "theorem", "denom_apply", ["modular_group"]], ["del", "theorem", "im_smul", ["modular_group"]], ["del", "theorem", "im_smul_eq_div_norm_sq", ["modular_group"]], ["del", "theorem", "neg_smul", ["modular_group"]], ["del", "theorem", "re_smul", ["modular_group"]], ["del", "theorem", "smul_coe", ["modular_group"]]]}]}, {"timestamp": 1654205904, "sha": "1a1895cd", "message": "feat(data/nat/basic): add lemmas about `nat.bit_cases_on` (#14481)\nAlso drop `nat.bit_cases` (was the same definition with a different\norder of arguments).", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "def", "bit_cases", ["nat"]], ["add", "theorem", "bit_cases_on_bit0", ["nat"]], ["add", "theorem", "bit_cases_on_bit1", ["nat"]], ["add", "theorem", "bit_cases_on_bit", ["nat"]], ["add", "theorem", "bit_cases_on_inj", ["nat"]], ["add", "theorem", "bit_cases_on_injective", ["nat"]]]}]}, {"timestamp": 1654198709, "sha": "ade30c34", "message": "feat(data/int/basic): Lemmas for when a square equals 1 (#14501)\nThis PR adds two lemmas for when a square equals one. The `lt` lemma will be useful for irreducibility of x^n-x-1.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "sq_eq_one_of_sq_le_three", ["int"]], ["add", "theorem", "sq_eq_one_of_sq_lt_four", ["int"]]]}]}, {"timestamp": 1654198708, "sha": "e4433311", "message": "refactor(field_theory/normal): generalize `lift_normal` and `restrict_normal` (#14450)\nThis generalization seems useful. The example I have in mind is restricting a map `ϕ : E →ₐ[F] (algebraic_closure E)` to a map `ϕ : E →ₐ[F] E` when E/F is normal.\nCoauthored by @mariainesdff", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["mod", "theorem", "lift_normal_commutes", ["alg_equiv"]], ["mod", "theorem", "restrict_lift_normal", ["alg_equiv"]], ["mod", "def", "restrict_normal_hom", ["alg_equiv"]], ["mod", "theorem", "restrict_normal_hom_surjective", ["alg_equiv"]], ["mod", "theorem", "lift_normal_commutes", ["alg_hom"]], ["mod", "theorem", "restrict_lift_normal", ["alg_hom"]], ["add", "def", "restrict_normal'", ["alg_hom"]], ["mod", "theorem", "is_solvable_of_is_scalar_tower", []]]}]}, {"timestamp": 1654191111, "sha": "ae025835", "message": "refactor(data/set/finite): protect `set.finite` (#14344)\nThis change will make it so that it does not conflict with a top-level `finite` that will be added to complement `infinite`.", "changes": [{"oldPath": "roadmap/topology/shrinking_lemma.lean", "newPath": "roadmap/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["mod", "theorem", "mul_finprod_cond_ne", []]]}, {"oldPath": "src/algebra/star/pointwise.lean", "newPath": "src/algebra/star/pointwise.lean", "changes": [["mod", "theorem", "star", ["set", "finite"]]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["mod", "theorem", "convex_hull_eq", ["set", "finite"]], ["mod", "theorem", "convex_hull_eq_image", ["set", "finite"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["mod", "theorem", "compact_convex_hull", ["set", "finite"]], ["mod", "theorem", "is_closed_convex_hull", ["set", "finite"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "countable", ["set", "finite"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "exists_max_image", ["set"]], ["mod", "theorem", "exists_min_image", ["set"]], ["mod", "theorem", "bdd_above_bUnion", ["set", "finite"]], ["mod", "theorem", "bdd_below_bUnion", ["set", "finite"]], ["mod", "theorem", "fin_embedding", ["set", "finite"]], ["mod", "theorem", "finite_subsets", ["set", "finite"]], ["mod", "theorem", "inf_of_left", ["set", "finite"]], ["mod", "theorem", "inf_of_right", ["set", "finite"]], ["mod", "theorem", "map", ["set", "finite"]], ["mod", "theorem", "of_diff", ["set", "finite"]], ["mod", "theorem", "sUnion", ["set", "finite"]], ["mod", "theorem", "sup", ["set", "finite"]], ["mod", "inductive", "finite", ["set"]], ["mod", "theorem", "finite_is_bot", ["set"]], ["mod", "theorem", "finite_is_top", ["set"]], ["mod", "theorem", "finite_le_nat", ["set"]], ["mod", "theorem", "finite_lt_nat", ["set"]], ["mod", "theorem", "finite_mem_finset", ["set"]], ["mod", "theorem", "finite_option", ["set"]], ["mod", "theorem", "finite_range_const", ["set"]], ["mod", "theorem", "finite_range_ite", ["set"]], ["mod", "theorem", "finite_subset_Union", ["set"]], ["mod", "theorem", "finite", ["set", "subsingleton"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "inv", ["set", "finite"]], ["mod", "theorem", "mul", ["set", "finite"]], ["mod", "theorem", "smul", ["set", "finite"]], ["mod", "theorem", "smul_set", ["set", "finite"]], ["mod", "theorem", "vsub", ["set", "finite"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "finrank_span_le_card", []], ["mod", "theorem", "finrank_span_set_eq_card", []]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["mod", "theorem", "integrable_on_finite_Union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["mod", "theorem", "measurable_set", ["set", "finite"]], ["mod", "theorem", "measurable_set_bInter", ["set", "finite"]], ["mod", "theorem", "measurable_set_bUnion", ["set", "finite"]], ["mod", "theorem", "measurable_set_sInter", ["set", "finite"]], ["mod", "theorem", "measurable_set_sUnion", ["set", "finite"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "count_apply_finite", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["mod", "theorem", "measure_bUnion_lt_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/null_measurable.lean", "newPath": "src/measure_theory/measure/null_measurable.lean", "changes": [["mod", "theorem", "null_measurable_set_bInter", ["set", "finite"]], ["mod", "theorem", "null_measurable_set_bUnion", ["set", "finite"]], ["mod", "theorem", "null_measurable_set_sInter", ["set", "finite"]], ["mod", "theorem", "null_measurable_set_sUnion", ["set", "finite"]]]}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": [["mod", "theorem", "fg_closure", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cSup_lt_iff", ["set", "finite"]], ["mod", "theorem", "lt_cInf_iff", ["set", "finite"]], ["mod", "theorem", "cInf_mem", ["set", "nonempty"]], ["mod", "theorem", "cSup_mem", ["set", "nonempty"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "bInter_mem", ["filter"]], ["mod", "theorem", "infi_principal_finite", ["filter"]], ["mod", "theorem", "mem_infi_of_Inter", ["filter"]], ["mod", "theorem", "sInter_mem", ["filter"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["mod", "theorem", "mem_cofinite", ["filter"]]]}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": [["mod", "theorem", "pi_mem_pi", ["filter"]], ["mod", "theorem", "pi_mem_pi_iff", ["filter"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "finite_bUnion_mem_iff", ["ultrafilter"]], ["mod", "theorem", "finite_sUnion_mem_iff", ["ultrafilter"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["mod", "theorem", "finite_Icc", ["set"]], ["mod", "theorem", "finite_Ici", ["set"]], ["mod", "theorem", "finite_Ico", ["set"]], ["mod", "theorem", "finite_Iic", ["set"]], ["mod", "theorem", "finite_Iio", ["set"]], ["mod", "theorem", "finite_Ioc", ["set"]], ["mod", "theorem", "finite_Ioi", ["set"]], ["mod", "theorem", "finite_Ioo", ["set"]]]}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "fg_span", ["submodule"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "lt_omega_iff_finite", ["cardinal"]]]}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": [["mod", "theorem", "is_Gδ", ["set", "finite"]], ["mod", "theorem", "is_Gδ_compl", ["set", "finite"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["mod", "theorem", "is_separable", ["set", "finite"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "is_closed_bUnion", []], ["mod", "theorem", "is_open_bInter", []], ["mod", "theorem", "is_open_sInter", []]]}, {"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": [["mod", "theorem", "is_bounded_bUnion", ["bornology"]], ["mod", "theorem", "is_bounded_sUnion", ["bornology"]], ["mod", "theorem", "is_cobounded_bInter", ["bornology"]], ["mod", "theorem", "is_cobounded_sInter", ["bornology"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "bounded_bUnion", ["metric"]], ["mod", "theorem", "bounded_of_finite", ["metric"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": [["mod", "theorem", "dimH_finite", []]]}, {"oldPath": "src/topology/metric_space/metric_separated.lean", "newPath": "src/topology/metric_space/metric_separated.lean", "changes": [["mod", "theorem", "finite_Union_left_iff", ["is_metric_separated"]], ["mod", "theorem", "finite_Union_right_iff", ["is_metric_separated"]]]}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": []}, {"oldPath": "src/topology/metric_space/shrinking_lemma.lean", "newPath": "src/topology/metric_space/shrinking_lemma.lean", "changes": [["mod", "theorem", "exists_Union_ball_eq_radius_lt", []]]}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": [["mod", "theorem", "exists_Union_eq_closed_subset", []], ["mod", "theorem", "exists_Union_eq_closure_subset", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "compact_bUnion", ["set", "finite"]], ["mod", "theorem", "is_compact", ["set", "finite"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1654191109, "sha": "28031a80", "message": "feat(number_theory/factorization): evaluating arithmetic functions at prime powers (#13817)", "changes": [{"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "cast_ite", ["int"]]]}, {"oldPath": "src/data/list/dedup.lean", "newPath": "src/data/list/dedup.lean", "changes": [["add", "theorem", "repeat_dedup", ["list"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "card_distinct_factors_apply_prime", ["nat", "arithmetic_function"]], ["add", "theorem", "card_distinct_factors_apply_prime_pow", ["nat", "arithmetic_function"]], ["add", "theorem", "card_distinct_factors_one", ["nat", "arithmetic_function"]], ["add", "theorem", "card_factors_apply_prime", ["nat", "arithmetic_function"]], ["add", "theorem", "card_factors_apply_prime_pow", ["nat", "arithmetic_function"]], ["mod", "theorem", "coe_zeta_mul_coe_moebius", ["nat", "arithmetic_function"]], ["add", "theorem", "int_coe_mul", ["nat", "arithmetic_function"]], ["add", "theorem", "int_coe_one", ["nat", "arithmetic_function"]], ["add", "theorem", "is_multiplicative_one", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_apply_is_prime_pow_not_prime", ["nat", "arithmetic_function"]], ["mod", "theorem", "moebius_apply_of_squarefree", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_apply_one", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_apply_prime", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_apply_prime_pow", ["nat", "arithmetic_function"]], ["mod", "theorem", "moebius_eq_zero_of_not_squarefree", ["nat", "arithmetic_function"]], ["add", "theorem", "mul_apply_one", ["nat", "arithmetic_function"]], ["add", "theorem", "nat_coe_mul", ["nat", "arithmetic_function"]], ["add", "theorem", "nat_coe_one", ["nat", "arithmetic_function"]], ["add", "theorem", "one_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "one_apply_ne", ["nat", "arithmetic_function"]], ["mod", "theorem", "one_one", ["nat", "arithmetic_function"]], ["add", "theorem", "pow_zero_eq_zeta", ["nat", "arithmetic_function"]], ["mod", "theorem", "sigma_one_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "sigma_zero_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "sigma_zero_apply_prime_pow", ["nat", "arithmetic_function"]]]}]}, {"timestamp": 1654185496, "sha": "0575db0c", "message": "feat(topology/vector_bundle): define some useful linear maps globally (#14484)\n* Define `pretrivialization.symmₗ`, `pretrivialization.linear_map_at`, `trivialization.symmL`, `trivialization.continuous_linear_map_at`\n* These are globally-defined (continuous) linear maps. They are linear equivalences on `e.base_set`, but it is useful to define these globally. They are defined as `0` outside `e.base_set`\n* These are convenient to define the vector bundle of continuous linear maps.", "changes": [{"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_if_const", []]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "theorem", "coe_linear_map_at", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_linear_map_at_of_mem", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_symm_of_not_mem", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "linear_map_at_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "linear_map_at_def_of_mem", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "linear_map_at_def_of_not_mem", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "linear_map_at_eq_zero", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "linear_map_at_symmₗ", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symmₗ_linear_map_at", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_continuous_linear_equiv_at_eq", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coe_linear_map_at", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coe_linear_map_at_of_mem", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coe_symmₗ", ["topological_vector_bundle", "trivialization"]], ["mod", "def", "continuous_linear_equiv_at", ["topological_vector_bundle", "trivialization"]], ["add", "def", "continuous_linear_map_at", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "continuous_linear_map_at_symmL", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "linear_equiv_at_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "linear_equiv_at_symm_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "linear_map_at_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "linear_map_at_def_of_mem", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "linear_map_at_def_of_not_mem", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "linear_map_at_symmₗ", ["topological_vector_bundle", "trivialization"]], ["add", "def", "symmL", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symmL_continuous_linear_map_at", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_continuous_linear_equiv_at_eq", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symmₗ_linear_map_at", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1654185495, "sha": "c5f8d786", "message": "doc(set_theory/cardinal/cofinality): add myself as author (#14469)", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}]}, {"timestamp": 1654185494, "sha": "4bd8c855", "message": "feat(category_theory/limits): is_kernel_of_comp (#14409)\nFrom LTE.\nAlso rename `lift_comp_ι` to `lift_ι` for consistency with the general `has_limit` versions.", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["del", "theorem", "π_comp_desc", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "theorem", "π_desc", ["category_theory", "limits", "cofork", "is_colimit"]], ["del", "theorem", "lift_comp_ι", ["category_theory", "limits", "fork", "is_limit"]], ["add", "theorem", "lift_ι", ["category_theory", "limits", "fork", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "is_cokernel_of_comp", ["category_theory", "limits"]], ["add", "def", "is_kernel_of_comp", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": []}]}, {"timestamp": 1654185493, "sha": "29415900", "message": "feat(linear_algebra/matrix): Spectral theorem for matrices (#14231)", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "inner_eq_star_dot_product", ["euclidean_space"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "equiv_apply'", ["pi_Lp"]], ["mod", "theorem", "equiv_apply", ["pi_Lp"]], ["add", "theorem", "equiv_symm_apply'", ["pi_Lp"]], ["mod", "theorem", "equiv_symm_apply", ["pi_Lp"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "basis_to_matrix_basis_fun_mul", []], ["add", "theorem", "basis_to_matrix_mul", []], ["add", "theorem", "mul_basis_to_matrix", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/hermitian.lean", "changes": [["add", "theorem", "conj_transpose_map", ["matrix"]], ["add", "theorem", "add", ["matrix", "is_hermitian"]], ["add", "theorem", "apply", ["matrix", "is_hermitian"]], ["add", "theorem", "conj_transpose", ["matrix", "is_hermitian"]], ["add", "theorem", "eq", ["matrix", "is_hermitian"]], ["add", "theorem", "ext", ["matrix", "is_hermitian"]], ["add", "theorem", "ext_iff", ["matrix", "is_hermitian"]], ["add", "theorem", "from_blocks", ["matrix", "is_hermitian"]], ["add", "theorem", "map", ["matrix", "is_hermitian"]], ["add", "theorem", "minor", ["matrix", "is_hermitian"]], ["add", "theorem", "neg", ["matrix", "is_hermitian"]], ["add", "theorem", "sub", ["matrix", "is_hermitian"]], ["add", "theorem", "transpose", ["matrix", "is_hermitian"]], ["add", "def", "is_hermitian", ["matrix"]], ["add", "theorem", "is_hermitian_add_transpose_self", ["matrix"]], ["add", "theorem", "is_hermitian_diagonal", ["matrix"]], ["add", "theorem", "is_hermitian_from_blocks_iff", ["matrix"]], ["add", "theorem", "is_hermitian_iff_is_self_adjoint", ["matrix"]], ["add", "theorem", "is_hermitian_mul_conj_transpose_self", ["matrix"]], ["add", "theorem", "is_hermitian_one", ["matrix"]], ["add", "theorem", "is_hermitian_transpose_add_self", ["matrix"]], ["add", "theorem", "is_hermitian_transpose_mul_self", ["matrix"]], ["add", "theorem", "is_hermitian_zero", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/spectrum.lean", "changes": [["add", "theorem", "eigenvector_matrix_mul_inv", ["matrix", "is_hermitian"]], ["add", "theorem", "spectral_theorem", ["matrix", "is_hermitian"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["mod", "theorem", "mul_vec_std_basis", ["matrix"]], ["add", "theorem", "mul_vec_std_basis_apply", ["matrix"]]]}]}, {"timestamp": 1654177691, "sha": "4e1eeebe", "message": "feat(tactic/linear_combination): allow combinations of arbitrary proofs (#14229)\nThis changes the syntax of `linear_combination` so that the combination is expressed using arithmetic operation. Credit to @digama0 for the parser. See [Zulip](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2313979.20arbitrary.20proof.20terms.20in.20.60linear_combination.60) for more details.", "changes": [{"oldPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "newPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "changes": []}, {"oldPath": "archive/imo/imo2001_q6.lean", "newPath": "archive/imo/imo2001_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "newPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}, {"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": []}, {"oldPath": "test/linear_combination.lean", "newPath": "test/linear_combination.lean", "changes": []}]}, {"timestamp": 1654160922, "sha": "57885b4e", "message": "feat(topological_space/vector_bundle): reformulate linearity condition (#14485)\n* Reformulate the linearity condition on (pre)trivializations of vector bundles using `total_space_mk`. Note: it is definitionally equal to the previous definition, but without using the coercion.\n* Make one argument of `e.linear` implicit\n* Simplify the proof of linearity of the product of vector bundles", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["del", "theorem", "linear", ["topological_vector_bundle", "pretrivialization"]]]}]}, {"timestamp": 1654127824, "sha": "c414df7d", "message": "feat(tactic/linear_combination): allow arbitrary proof terms (#13979)\nThis extends `linear_combination` to allow arbitrary proof terms of equalities instead of just local hypotheses. \n```lean\nconstants (qc : ℚ) (hqc : qc = 2*qc)\nexample (a b : ℚ) (h : ∀ p q : ℚ, p = q) : 3*a + qc = 3*b + 2*qc :=\nby linear_combination (h a b, 3) (hqc)\n```\nThis changes the syntax of `linear_combination` in the case where no coefficient is provided and it defaults to 1. A space-separated list of pexprs won't parse, since there's an ambiguity in `h1 h2` between an application or two arguments. So this case now requres parentheses around the argument:\n`linear_combination (h1, 3) (h2)`\nDoes anyone object to this syntax change?", "changes": [{"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": []}, {"oldPath": "test/linear_combination.lean", "newPath": "test/linear_combination.lean", "changes": []}]}, {"timestamp": 1654115576, "sha": "12ad63e6", "message": "feat(order/conditionally_complete_lattice): Map `Inf` by monotone function (#14118)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "map_Inf", ["monotone"]], ["add", "theorem", "map_Inf", ["monotone_on"]]]}]}, {"timestamp": 1654104422, "sha": "9600f4f6", "message": "feat(order/filter/bases): view a filter as a *bundled* filter basis (#14506)\nWe already have `filter.basis_sets` which says that the elements of a filter are a basis of itself (in the `has_basis` sense), but we don't have the fact that they form a filter basis (in the `filter_basis` sense), and `x ∈ f.basis_sets.is_basis.filter_basis` is not defeq to `x ∈ f`", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "def", "as_basis", ["filter"]], ["add", "theorem", "as_basis_filter", ["filter"]]]}]}, {"timestamp": 1654104421, "sha": "0950ba3d", "message": "refactor(topology/separation): rename `indistinguishable` to `inseparable` (#14401)\n* Replace `indistinguishable` by `inseparable` in the definition and lemma names. The word \"indistinguishable\" is too generic.\n* Rename `t0_space_iff_distinguishable` to `t0_space_iff_not_inseparable` because the name `t0_space_iff_separable` is misleading, slightly golf the proof.\n* Add `t0_space_iff_nhds_injective`, `nhds_injective`, reorder lemmas around these two.", "changes": [{"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "indistinguishable_iff", ["metric"]], ["add", "theorem", "inseparable_iff", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["del", "theorem", "indistinguishable_iff", ["emetric"]], ["add", "theorem", "inseparable_iff", ["emetric"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "eq", ["indistinguishable"]], ["del", "theorem", "map", ["indistinguishable"]], ["del", "def", "indistinguishable", []], ["del", "theorem", "indistinguishable_iff_closed", []], ["del", "theorem", "indistinguishable_iff_closure", []], ["del", "theorem", "indistinguishable_iff_nhds_eq", []], ["add", "theorem", "eq", ["inseparable"]], ["add", "theorem", "map", ["inseparable"]], ["add", "def", "inseparable", []], ["add", "theorem", "inseparable_iff_closed", []], ["add", "theorem", "inseparable_iff_closure", []], ["add", "theorem", "inseparable_iff_nhds_eq", []], ["add", "theorem", "nhds_injective", []], ["del", "theorem", "subtype_indistinguishable_iff", []], ["add", "theorem", "subtype_inseparable_iff", []], ["del", "theorem", "t0_space_iff_distinguishable", []], ["del", "theorem", "t0_space_iff_indistinguishable", []], ["add", "theorem", "t0_space_iff_inseparable", []], ["add", "theorem", "t0_space_iff_nhds_injective", []], ["add", "theorem", "t0_space_iff_not_inseparable", []]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": []}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": [["del", "theorem", "indistinguishable_iff_specializes_and", []], ["add", "theorem", "inseparable_iff_specializes_and", []]]}]}, {"timestamp": 1654104420, "sha": "9b3ea03d", "message": "feat(data/bundle): make arguments to proj and total_space_mk implicit (#14359)\nI will wait for a later PR to (maybe) fix the reducibility/simp of these declarations.", "changes": [{"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": [["del", "def", "proj", ["bundle"]], ["mod", "theorem", "sigma_mk_eq_total_space_mk", ["bundle"]], ["mod", "theorem", "to_total_space_coe", ["bundle"]], ["mod", "theorem", "eta", ["bundle", "total_space"]], ["add", "def", "proj", ["bundle", "total_space"]], ["mod", "theorem", "proj_mk", ["bundle", "total_space"]], ["mod", "def", "total_space_mk", ["bundle"]]]}, {"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["mod", "theorem", "continuous_total_space_mk", ["topological_fiber_bundle_core"]], ["mod", "def", "proj", ["topological_fiber_bundle_core"]]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["mod", "theorem", "continuous_proj", ["topological_vector_bundle"]], ["mod", "theorem", "continuous_total_space_mk", ["topological_vector_bundle"]], ["mod", "theorem", "coe_fst'", ["topological_vector_bundle", "pretrivialization"]], ["mod", "theorem", "coe_fst", ["topological_vector_bundle", "pretrivialization"]], ["mod", "theorem", "mem_source", ["topological_vector_bundle", "pretrivialization"]], ["mod", "theorem", "mk_proj_snd'", ["topological_vector_bundle", "pretrivialization"]], ["mod", "theorem", "mk_proj_snd", ["topological_vector_bundle", "pretrivialization"]], ["mod", "theorem", "proj_symm_apply", ["topological_vector_bundle", "pretrivialization"]], ["del", "theorem", "symm_coe_fst'", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_coe_proj", ["topological_vector_bundle", "pretrivialization"]], ["mod", "theorem", "apply_symm_apply'", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "coe_fst'", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "coe_fst", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "mem_source", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "mk_proj_snd'", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "mk_proj_snd", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "continuous_to_fun", ["topological_vector_bundle", "trivialization", "prod"]], ["mod", "theorem", "proj_symm_apply'", ["topological_vector_bundle", "trivialization"]], ["del", "theorem", "symm_coe_fst'", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_coe_proj", ["topological_vector_bundle", "trivialization"]], ["mod", "def", "proj", ["topological_vector_bundle_core"]]]}]}, {"timestamp": 1654096186, "sha": "dba797a4", "message": "feat(order/liminf_limsup): composition `g ∘ f` is bounded iff `f` is bounded (#14479)\n* If `g` is a monotone function that tends to infinity at infinity, then a filter is bounded from above under `g ∘ f` iff it is bounded under `f`, similarly for antitone functions and/or filter bounded from below.\n* A filter is bounded from above under `real.exp ∘ f` iff it is is bounded from above under `f`.\n* Use `monotone` in `real.exp_monotone`.\n* Add `@[mono]` to `real.exp_strict_mono`.", "changes": [{"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "is_bounded_under_ge_exp_comp", ["real"]], ["add", "theorem", "is_bounded_under_le_exp_comp", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "exp_eq_one_iff", ["real"]], ["mod", "theorem", "exp_monotone", ["real"]], ["mod", "theorem", "exp_strict_mono", ["real"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "is_bounded_under_ge_comp", ["antitone"]], ["add", "theorem", "is_bounded_under_le_comp", ["antitone"]], ["mod", "theorem", "l_limsup_le", ["galois_connection"]], ["add", "theorem", "is_bounded_under_ge_comp", ["monotone"]], ["add", "theorem", "is_bounded_under_le_comp", ["monotone"]]]}]}, {"timestamp": 1654096185, "sha": "047db399", "message": "feat(algebra/char_p/basic): add lemma `ring_char.char_ne_zero_of_finite` (#14454)\nThis adds the fact that a finite (not necessarily associative) ring cannot have characteristic zero.\nSee [this topic on Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Statements.20about.20finite.20rings).", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "ring_char_ne_zero_of_fintype", ["char_p"]], ["mod", "theorem", "char_p_of_prime_pow_injective", []]]}]}, {"timestamp": 1654096184, "sha": "df057e32", "message": "feat(measure_theory/integral/lebesgue): integral over finite and countable sets (#14447)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_countable", ["measure_theory"]], ["mod", "theorem", "lintegral_encodable", ["measure_theory"]], ["add", "theorem", "lintegral_finset", ["measure_theory"]], ["add", "theorem", "lintegral_fintype", ["measure_theory"]], ["add", "theorem", "lintegral_insert", ["measure_theory"]], ["add", "theorem", "lintegral_singleton'", ["measure_theory"]], ["add", "theorem", "lintegral_singleton", ["measure_theory"]], ["add", "theorem", "lintegral_unique", ["measure_theory"]]]}]}, {"timestamp": 1654096183, "sha": "f0216ff2", "message": "refactor(combinatorics/simple_graph/basic): rename induced embedding on complete graphs (#14404)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["del", "def", "of_embedding", ["simple_graph", "embedding", "complete_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/coloring.lean", "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": []}]}, {"timestamp": 1654096182, "sha": "0a0a60cc", "message": "feat(data/set/finite,order/*): generalize some lemmas from sets to (co)frames (#14394)\n* generalize `set.Union_inter_of_monotone` to an `order.frame`;\n* add dual versions, both for `(co)frame`s and sets;\n* same for `set.Union_Inter_of_monotone`.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "infi_supr_of_antitone", []], ["add", "theorem", "infi_supr_of_monotone", []], ["add", "theorem", "Inter_Union_of_antitone", ["set"]], ["add", "theorem", "Inter_Union_of_monotone", ["set"]], ["add", "theorem", "Union_Inter_of_antitone", ["set"]], ["mod", "theorem", "Union_Inter_of_monotone", ["set"]], ["add", "theorem", "infi_bsupr_of_antitone", ["set", "finite"]], ["add", "theorem", "infi_bsupr_of_monotone", ["set", "finite"]], ["add", "theorem", "supr_binfi_of_antitone", ["set", "finite"]], ["add", "theorem", "supr_binfi_of_monotone", ["set", "finite"]], ["add", "theorem", "supr_infi_of_antitone", []], ["add", "theorem", "supr_infi_of_monotone", []]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_union_of_antitone", ["set"]], ["add", "theorem", "Inter_union_of_monotone", ["set"]], ["add", "theorem", "Union_inter_of_antitone", ["set"]], ["mod", "theorem", "Union_inter_of_monotone", ["set"]]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "infi_sup_of_antitone", []], ["add", "theorem", "infi_sup_of_monotone", []], ["add", "theorem", "supr_inf_of_antitone", []], ["add", "theorem", "supr_inf_of_monotone", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_sup_infi_le", []], ["add", "theorem", "le_supr_inf_supr", []], ["add", "theorem", "supr_infi_le_infi_supr", []]]}]}, {"timestamp": 1654096181, "sha": "892f8899", "message": "feat(data/matrix/basic): lemmas about mul_vec and single (#13835)\nWe seem to be proving variants of the same statement over and over again; this introduces a new lemma that we can use to prove all these variants trivially in term mode. The new lemmas are:\n* `matrix.mul_vec_single`\n* `matrix.single_vec_mul`\n* `matrix.diagonal_mul_vec_single`\n* `matrix.single_vec_mul_diagonal`\nA lot of the proofs got shorter by avoiding `ext` which invokes a more powerful lemma than we actually need.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "diagonal_mul_vec_single", ["matrix"]], ["add", "theorem", "mul_vec_single", ["matrix"]], ["add", "theorem", "single_vec_mul", ["matrix"]], ["add", "theorem", "single_vec_mul_diagonal", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}]}, {"timestamp": 1654088447, "sha": "f359d55b", "message": "feat(analysis/asymptotics/asymptotics): generalize `is_O.smul` etc (#14487)\nAllow `(k₁ : α → 𝕜) (k₂ : α → 𝕜')` instead of `(k₁ k₂ : α → 𝕜)`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["mod", "theorem", "smul", ["asymptotics", "is_O"]], ["mod", "theorem", "smul_is_o", ["asymptotics", "is_O"]], ["mod", "theorem", "smul", ["asymptotics", "is_O_with"]], ["mod", "theorem", "smul", ["asymptotics", "is_o"]], ["mod", "theorem", "smul_is_O", ["asymptotics", "is_o"]]]}]}, {"timestamp": 1654088446, "sha": "4f1c8cf5", "message": "feat(algebra/order/group): helper lemma `0 ≤ a + |a|` (#14457)\nHelper lemma for integers and absolute values.", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "add_abs_nonneg", []]]}]}, {"timestamp": 1654085634, "sha": "f4fe7907", "message": "feat(topology/vector_bundle): redefine continuous coordinate change (#14462)\n* For any two trivializations, we define the coordinate change between the two trivializations: continous linear automorphism of `F`, defined by composing one trivialization with the inverse of the other. This is defined for any point in the intersection of their base sets, and we define it to be the identity function outside this set.\n* Redefine `topological_vector_bundle`: we now require that this coordinate change between any two trivializations is continuous on the intersection of their base sets.\n* Redefine `topological_vector_prebundle` with the existence of a continuous linear coordinate change function.\n* Simplify the proofs that the coordinate change function is continuous for constructions on vector bundles.", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["del", "theorem", "continuous_on_coord_change", ["topological_vector_bundle"]], ["del", "def", "coord_change", ["topological_vector_bundle"]], ["del", "theorem", "mem_source_trivialization_at", ["topological_vector_bundle"]], ["mod", "def", "linear_equiv_at", ["topological_vector_bundle", "pretrivialization"]], ["del", "theorem", "trans_eq_coord_change", ["topological_vector_bundle"]], ["add", "theorem", "coord_change", ["topological_vector_bundle", "trivial_topological_vector_bundle", "trivialization"]], ["mod", "def", "trivialization", ["topological_vector_bundle", "trivial_topological_vector_bundle"]], ["mod", "theorem", "trivialization_source", ["topological_vector_bundle", "trivial_topological_vector_bundle"]], ["mod", "theorem", "trivialization_target", ["topological_vector_bundle", "trivial_topological_vector_bundle"]], ["add", "theorem", "coe_coord_change", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "comp_continuous_linear_equiv_at_eq_coord_change", ["topological_vector_bundle", "trivialization"]], ["add", "def", "coord_change", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coord_change_apply'", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coord_change_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coord_change_symm_apply", ["topological_vector_bundle", "trivialization"]], ["add", "def", "linear_equiv_at", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "mk_coord_change", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "local_triv_coord_change_eq", ["topological_vector_bundle_core"]], ["add", "theorem", "local_triv_symm_apply", ["topological_vector_bundle_core"]], ["add", "theorem", "continuous_on_coord_change", ["topological_vector_prebundle"]], ["add", "def", "coord_change", ["topological_vector_prebundle"]], ["add", "theorem", "coord_change_apply", ["topological_vector_prebundle"]], ["add", "theorem", "mk_coord_change", ["topological_vector_prebundle"]]]}]}, {"timestamp": 1654077542, "sha": "60371b88", "message": "refactor(topology/metric_space/lipschitz): use `function.End` (#14502)\nThis way we avoid dependency on `category_theory`.", "changes": [{"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1654077541, "sha": "7d713439", "message": "chore(topology/algebra/uniform_field): Wrap in namespace (#14498)\nPut everything in `topology.algebra.uniform_field` in the `uniform_space.completion` namespace.", "changes": [{"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "newPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": [["del", "theorem", "coe_inv", []], ["del", "theorem", "continuous_hat_inv", []], ["del", "def", "hat_inv", []], ["del", "theorem", "hat_inv_extends", []], ["del", "theorem", "mul_hat_inv_cancel", []], ["add", "theorem", "coe_inv", ["uniform_space", "completion"]], ["add", "theorem", "continuous_hat_inv", ["uniform_space", "completion"]], ["add", "def", "hat_inv", ["uniform_space", "completion"]], ["add", "theorem", "hat_inv_extends", ["uniform_space", "completion"]], ["add", "theorem", "mul_hat_inv_cancel", ["uniform_space", "completion"]]]}]}, {"timestamp": 1654075123, "sha": "2a0f4743", "message": "feat(analysis/normed_space/star/character_space): compactness of the character space of a normed algebra (#14135)\nThis PR puts a `compact_space` instance on `character_space 𝕜 A` for a normed algebra `A` using the Banach-Alaoglu theorem. This is a key step in developing the continuous functional calculus.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/algebra.lean", "changes": [["add", "theorem", "norm_one", ["weak_dual", "character_space"]]]}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": [["add", "theorem", "to_normed_dual_apply", ["weak_dual"]]]}, {"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": [["add", "theorem", "eq_set_map_one_map_mul", ["weak_dual", "character_space"]], ["add", "theorem", "is_closed", ["weak_dual", "character_space"]]]}]}, {"timestamp": 1654048779, "sha": "6b183624", "message": "feat(data/zmod/quotient): More API for `orbit_zpowers_equiv` (#14181)\nThis PR adds another `symm_apply` API lemma for `orbit_zpowers_equiv`, taking `(k : ℤ)` rather than `(k : zmod (minimal_period ((•) a) b))`.", "changes": [{"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": [["add", "theorem", "orbit_zmultiples_equiv_symm_apply'", ["add_action"]], ["add", "theorem", "orbit_zpowers_equiv_symm_apply'", ["mul_action"]], ["mod", "theorem", "orbit_zpowers_equiv_symm_apply", ["mul_action"]]]}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "pow_smul_mod_minimal_period", ["mul_action"]], ["add", "theorem", "zpow_smul_mod_minimal_period", ["mul_action"]]]}]}, {"timestamp": 1654034851, "sha": "bdf3e970", "message": "chore(data/polynomial/laurent): remove unused case distinction (#14490)", "changes": [{"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": []}]}, {"timestamp": 1654027673, "sha": "26a62b0d", "message": "fix(topology/algebra/module/multilinear): initialize simps projections (#14495)\n* `continuous_multilinear_map.smul_right` has a `simps` attribute, causing the generation of the simps projections for `continuous_multilinear_map`, but without specific support for apply. We now initialize the simps projections correctly.\n* This fixes an error in the sphere eversion project", "changes": [{"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["add", "def", "apply", ["continuous_multilinear_map", "simps"]], ["mod", "def", "smul_right", ["continuous_multilinear_map"]], ["del", "theorem", "smul_right_apply", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1654027671, "sha": "9dc4b8ec", "message": "feat(algebra/group_power/basic): `a^2 = b^2 ↔ a = b ∨ a = -b` (#14431)\nGeneralize `a ^ 2 = 1 ↔ a = 1 ∨ a = -1` to `ring` + `no_zero_divisors` and prove `a ^ 2 = b ^ 2 ↔ a = b ∨ a = -b` under `comm_ring` + `no_zero_divisors`.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "eq_or_eq_neg_of_sq_eq_sq", []], ["add", "theorem", "sq_eq_one_iff", []], ["add", "theorem", "sq_eq_sq_iff_eq_or_eq_neg", []], ["add", "theorem", "sq_ne_one_iff", []], ["mod", "theorem", "sq_sub_sq", []], ["del", "theorem", "eq_or_eq_neg_of_sq_eq_sq", ["units"]]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["del", "theorem", "sq_eq_one_iff", []], ["del", "theorem", "sq_ne_one_iff", []]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": []}]}, {"timestamp": 1654020202, "sha": "8e522f85", "message": "feat(algebra/order/monoid): Missing `has_exists_mul_of_le` instances (#14476)\nAdd a few `has_exists_mul_of_le` instances, generalize `has_exists_mul_of_le` to `has_le` + `has_mul`.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/pi.lean", "newPath": "src/algebra/order/pi.lean", "changes": []}]}, {"timestamp": 1654004957, "sha": "e0b2ad8f", "message": "chore(algebra/lie/quotient): golf some instances (#14480)", "changes": [{"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": [["del", "def", "action_as_endo_map_bracket", ["lie_submodule", "quotient"]], ["mod", "theorem", "is_quotient_mk", ["lie_submodule", "quotient"]]]}]}, {"timestamp": 1654004956, "sha": "806f673f", "message": "feat(algebra/star): star_single, star_update (#14477)", "changes": [{"oldPath": "src/algebra/star/pi.lean", "newPath": "src/algebra/star/pi.lean", "changes": [["add", "theorem", "update_star", ["function"]], ["add", "theorem", "single_star", ["pi"]]]}]}, {"timestamp": 1653998277, "sha": "3e79ce40", "message": "chore(combinatorics/simple_graph/basic): remove unnecessary lemma (#14468)\nThis lemma was added in #11371 for the Lean version bump, since the more powerful congr lemmas revealed a bug in fintype instances that were finally corrected in #14136.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["del", "theorem", "mem_neighbor_set'", ["simple_graph"]]]}]}, {"timestamp": 1653998276, "sha": "1eb73395", "message": "feat(topology/algebra/group): add `continuous_of_continuous_at_one` (#14451)\nThis lemma is more general than\n`uniform_continuous_of_continuous_at_one` because it allows the\ncodomain to be a monoid.", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "continuous_of_continuous_at_one", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["mod", "theorem", "uniform_continuous_of_continuous_at_one", []]]}]}, {"timestamp": 1653998275, "sha": "0f3e083c", "message": "feat(algebra/algebra/basic): relax typeclass assumptions (#14415)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "algebra_map_injective", ["no_zero_smul_divisors"]], ["mod", "theorem", "iff_algebra_map_injective", ["no_zero_smul_divisors"]]]}]}, {"timestamp": 1653998274, "sha": "346174e9", "message": "feat(data/polynomial/laurent): a Laurent polynomial can be multiplied by a power of `X` to \"become\" a polynomial (#14106)\nThis PR proves two versions of the result mentioned in the title, one involving multiplying by a non-negative power of `T`, the other usable as an induction principle.", "changes": [{"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": [["add", "theorem", "T_sub", ["laurent_polynomial"]], ["add", "theorem", "exists_T_pow", ["laurent_polynomial"]], ["add", "theorem", "induction_on_mul_T", ["laurent_polynomial"]], ["add", "theorem", "reduce_to_polynomial_of_mul_T", ["laurent_polynomial"]]]}]}, {"timestamp": 1653990485, "sha": "87fbbd1f", "message": "chore(analysis/asymptotics): golf 2 proofs (#14473)\nDon't go back and forth between `∈ l` and `∀ᶠ l`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}]}, {"timestamp": 1653990484, "sha": "9e9cc57d", "message": "feat(analysis/asymptotics/asymptotics): add `is_O_const_iff` (#14472)\n* use `f =ᶠ[l] 0` instead of `∀ᶠ x in l, f x = 0` in\n `is_{O_with,O,o}_zero_right_iff`;\n* generalize these lemmas from `0` in a `normed_group` to `0` in a `semi_normed_group`;\n* add `is_O.is_bounded_under_le`, `is_O_const_of_ne`, and `is_O_const_iff`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_bounded_under_le", ["asymptotics", "is_O"]], ["add", "theorem", "is_O_const_iff", ["asymptotics"]], ["add", "theorem", "is_O_const_of_ne", ["asymptotics"]], ["mod", "theorem", "is_O_zero_right_iff", ["asymptotics"]]]}]}, {"timestamp": 1653990483, "sha": "615babaf", "message": "feat(order/monotone): prove `nat.exists_strict_mono` etc (#14435)\n* add `nat.exists_strict_mono`, `nat.exists_strict_anti`, `int.exists_strict_mono`, and `int.exists_strict_anti`;\n* move `set.Iic.no_min_order` and `set.Ici.no_max_order` to `data.set.intervals.basic`;\n* add `set.Iio.no_min_order` and `set.Ioi.no_max_order`;\n* add `no_max_order.infinite` and `no_min_order.infinite`, use them in the proofs;\n* rename `set.Ixx.infinite` to `set.Ixx_infinite`;\n* add `set.Ixx.infinite` - lemmas and instances about `infinite`, not `set.infinite`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/infinite.lean", "newPath": "src/data/set/intervals/infinite.lean", "changes": [["add", "theorem", "infinite", ["no_max_order"]], ["add", "theorem", "infinite", ["no_min_order"]], ["mod", "theorem", "infinite", ["set", "Icc"]], ["add", "theorem", "Icc_infinite", ["set"]], ["del", "theorem", "infinite", ["set", "Ici"]], ["add", "theorem", "Ici_infinite", ["set"]], ["mod", "theorem", "infinite", ["set", "Ico"]], ["add", "theorem", "Ico_infinite", ["set"]], ["del", "theorem", "infinite", ["set", "Iic"]], ["add", "theorem", "Iic_infinite", ["set"]], ["del", "theorem", "infinite", ["set", "Iio"]], ["add", "theorem", "Iio_infinite", ["set"]], ["mod", "theorem", "infinite", ["set", "Ioc"]], ["add", "theorem", "Ioc_infinite", ["set"]], ["del", "theorem", "infinite", ["set", "Ioi"]], ["add", "theorem", "Ioi_infinite", ["set"]], ["mod", "theorem", "infinite", ["set", "Ioo"]], ["add", "theorem", "Ioo_infinite", ["set"]]]}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": []}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "exists_strict_anti", ["int"]], ["add", "theorem", "exists_strict_mono", ["int"]], ["add", "theorem", "exists_strict_anti'", ["nat"]], ["add", "theorem", "exists_strict_anti", ["nat"]], ["add", "theorem", "exists_strict_mono'", ["nat"]], ["add", "theorem", "exists_strict_mono", ["nat"]]]}]}, {"timestamp": 1653990481, "sha": "cafeaa35", "message": "feat(data/set/lattice): add lemmas about unions over natural numbers (#14393)\n* Add `Union`/`Inter` versions of lemmas like `supr_ge_eq_supr_nat_add`.\n* Make some arguments explicit.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_nat_add", ["antitone"]], ["add", "theorem", "Union_nat_add", ["monotone"]], ["add", "theorem", "Inter_ge_eq_Inter_nat_add", ["set"]], ["add", "theorem", "Union_Inter_ge_nat_add", ["set"]], ["add", "theorem", "Union_ge_eq_Union_nat_add", ["set"]], ["add", "theorem", "inter_Inter_nat_succ", ["set"]], ["add", "theorem", "union_Union_nat_succ", ["set"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_nat_add", ["antitone"]], ["mod", "theorem", "infi_ge_eq_infi_nat_add", []], ["mod", "theorem", "supr_ge_eq_supr_nat_add", []]]}]}, {"timestamp": 1653990480, "sha": "71270485", "message": "feat(data/polynomial/*): `support_binomial` and `support_trinomial` lemmas (#14385)\nThis PR adds lemmas for the support of binomials and trinomials. The trinomial lemmas will be helpful for irreducibility of x^n-x-1.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "support_binomial'", ["polynomial"]], ["add", "theorem", "support_trinomial'", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "card_support_binomial", ["polynomial"]], ["add", "theorem", "card_support_trinomial", ["polynomial"]], ["add", "theorem", "support_binomial", ["polynomial"]], ["add", "theorem", "support_trinomial", ["polynomial"]]]}]}, {"timestamp": 1653990479, "sha": "8315ad02", "message": "refactor(group_theory/sylow): Move basic API earlier in the file (#14367)\nThis PR moves some basic sylow API to earlier in the file, so that it can be used earlier.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "coe_comap_of_injective", ["sylow"]], ["mod", "theorem", "coe_comap_of_ker_is_p_group", ["sylow"]], ["mod", "theorem", "coe_subtype", ["sylow"]], ["mod", "def", "comap_of_injective", ["sylow"]], ["mod", "def", "comap_of_ker_is_p_group", ["sylow"]], ["mod", "def", "subtype", ["sylow"]]]}]}, {"timestamp": 1653990478, "sha": "111ce5b8", "message": "feat(group_theory/subgroup/basic): `comap_le_comap` lemmas (#14365)\nThis PR adds some `comap_le_comap` lemmas.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "comap_le_comap_of_le_range", ["subgroup"]], ["add", "theorem", "comap_le_comap_of_surjective", ["subgroup"]], ["add", "theorem", "comap_lt_comap_of_surjective", ["subgroup"]]]}]}, {"timestamp": 1653990477, "sha": "1b49d480", "message": "refactor(group_theory/order_of_element): Remove coercion in `order_eq_card_zpowers` (#14364)\nThis PR removes a coercion in `order_eq_card_zpowers`.", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "order_eq_card_zpowers", []]]}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}]}, {"timestamp": 1653990476, "sha": "6531c720", "message": "chore(algebra/algebra/restrict_scalars): put a right action on restricted scalars (#13996)\nThis provides `module Rᵐᵒᵖ (restrict_scalars R S M)` in terms of a `module Sᵐᵒᵖ M` action, by sending `Rᵐᵒᵖ` to `Sᵐᵒᵖ` through `algebra_map R S`.\nThis means that `restrict_scalars R S M` now works for right-modules and bi-modules in addition to left-modules.\nThis will become important if we change `algebra R A` to require `A` to be an `R`-bimodule, as otherwise `restrict_scalars R S A` would no longer be an algebra.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2313996.20right.20actions.20on.20restrict_scalars/near/282045994)", "changes": [{"oldPath": "src/algebra/algebra/restrict_scalars.lean", "newPath": "src/algebra/algebra/restrict_scalars.lean", "changes": [["mod", "def", "lsmul", ["restrict_scalars"]]]}]}, {"timestamp": 1653984163, "sha": "876cb64e", "message": "feat({group,ring}_theory/sub{monoid,group,semiring,ring}): the action by the center is commutative (#14362)\nNone of these `smul_comm_class` instances carry data, so they cannot form diamonds.\nThis action is used to golf the proofs in `quadratic_form.associated`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}]}, {"timestamp": 1653954826, "sha": "6633283a", "message": "fix(tactic/norm_num): fix ge unfolding bug (#14425)\nAs reported on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/bug.20in.20norm_num.20handling.20of.20ge.3F).", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["add", "theorem", "ge_intro", ["norm_num"]], ["add", "theorem", "gt_intro", ["norm_num"]]]}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1653950250, "sha": "e7cc0eba", "message": "feat(group_theory/perm/cycle): improve doc and namespace for cauchy's theorem (#14471)\nFix a few things in the module docstring, remove namespace, add an additive version and add docstrings for Cauchy's theorem.\nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Existence.20of.20elements.20of.20order.20p.20in.20a.20group/near/284399583", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle/type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": [["del", "theorem", "exists_prime_order_of_dvd_card", ["equiv", "perm"]], ["add", "theorem", "exists_prime_add_order_of_dvd_card", []], ["add", "theorem", "exists_prime_order_of_dvd_card", []]]}]}, {"timestamp": 1653932895, "sha": "ba22440f", "message": "feat(set_theory/cardinal/cofinality): use `bounded` and `unbounded` (#14438)\nWe change `∀ a, ∃ b ∈ s, ¬ r b a` to its def-eq predicate `unbounded r s`, and similarly for `bounded r s`.", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "theorem", "cof_eq", ["ordinal"]], ["mod", "theorem", "cof_type_le", ["ordinal"]], ["mod", "theorem", "le_cof_type", ["ordinal"]], ["mod", "theorem", "lt_cof_type", ["ordinal"]]]}]}, {"timestamp": 1653932895, "sha": "1de757ef", "message": "feat(data/fin/basic): add `iff`lemmas about `nontrivial`/`subsingleton` (#14390)", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "nontrivial_iff_two_le", ["fin"]], ["add", "theorem", "subsingleton_iff_le_one", ["fin"]]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": [["add", "theorem", "not_nontrivial", []]]}]}, {"timestamp": 1653930632, "sha": "1791ed3c", "message": "chore(ring_theory/polynomial/vieta): generalize universe (#14411)", "changes": [{"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}]}, {"timestamp": 1653930631, "sha": "08c14123", "message": "feat(set_theory/game/pgame): `lt_or_equiv_or_gf` (#14407)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "lt_or_equiv_or_gf", ["pgame"]]]}]}, {"timestamp": 1653928246, "sha": "59a1a509", "message": "chore(analysis/normed_space/pi_Lp): add `pi_Lp.linear_equiv` (#14380)\nThis is just a more bundled version of the `pi_Lp.equiv` we already have.\nAlso adds two missing simp lemmas about `pi_Lp.equiv`.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "equiv_single", ["pi_Lp"]], ["add", "theorem", "equiv_symm_single", ["pi_Lp"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}]}, {"timestamp": 1653918478, "sha": "01af73ae", "message": "feat(alegbra/homology/short_exact/abelian.lean): Right split exact sequences + case of modules (#14376)\nA right split short exact sequence in an abelian category is split.\nAlso, in the case of the Module category, a version fully expressed in terms of modules and linear maps is provided.", "changes": [{"oldPath": "src/algebra/category/Module/biproducts.lean", "newPath": "src/algebra/category/Module/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/homology/short_exact/abelian.lean", "newPath": "src/algebra/homology/short_exact/abelian.lean", "changes": [["add", "def", "splitting", ["category_theory", "right_split"]], ["add", "def", "mk''", ["category_theory", "splitting"]]]}]}, {"timestamp": 1653915212, "sha": "3641bf9a", "message": "refactor(algebraic_topology/*): use rw instead of erw where possible (#14320)", "changes": [{"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": []}, {"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": []}, {"oldPath": "src/algebraic_topology/dold_kan/homotopies.lean", "newPath": "src/algebraic_topology/dold_kan/homotopies.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}]}, {"timestamp": 1653908507, "sha": "af70f8ef", "message": "feat(number_theory/bernoulli_polynomials): Added some lemmas (#14282)\nHave added some lemmas regarding rearrangements of sums and evaluations of Bernoulli polynomials.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_monomial_one_add_sub", ["polynomial"]]]}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": [["add", "theorem", "bernoulli_eq_sub_sum", ["polynomial"]], ["add", "theorem", "bernoulli_eval_one_add", ["polynomial"]], ["add", "theorem", "bernoulli_succ_eval", ["polynomial"]], ["add", "theorem", "sum_range_pow_eq_bernoulli_sub", ["polynomial"]]]}]}, {"timestamp": 1653883564, "sha": "475f18b6", "message": "refactor(analysis/asymptotics): make `is_o`/`is_O` work with `calc` (#14129)\nReorder arguments of `is_O_with`/`is_O`/`is_o` as well as `trans` lemmas so that they work with `calc`.\nAlso adds `f =O[l] g` notation.\nFixes #2273", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["mod", "theorem", "le_radius_of_is_O", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": [["mod", "theorem", "add_is_o", ["asymptotics", "is_equivalent"]], ["mod", "theorem", "is_O", ["asymptotics", "is_equivalent"]], ["mod", "theorem", "is_O_symm", ["asymptotics", "is_equivalent"]], ["mod", "theorem", "is_o", ["asymptotics", "is_equivalent"]], ["mod", "def", "is_equivalent", ["asymptotics"]], ["mod", "theorem", "is_equivalent_zero_iff_is_O_zero", ["asymptotics"]], ["mod", "theorem", "is_equivalent", ["asymptotics", "is_o"]]]}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["mod", "theorem", "bound_of_is_O_cofinite", ["asymptotics"]], ["mod", "theorem", "bound_of_is_O_nat_at_top", ["asymptotics"]], ["mod", "theorem", "add", ["asymptotics", "is_O"]], ["mod", "theorem", "add_is_o", ["asymptotics", "is_O"]], ["mod", "theorem", "bound", ["asymptotics", "is_O"]], ["mod", "theorem", "comp_tendsto", ["asymptotics", "is_O"]], ["mod", "theorem", "congr'", ["asymptotics", "is_O"]], ["mod", "theorem", "congr", ["asymptotics", "is_O"]], ["mod", "theorem", "congr_left", ["asymptotics", "is_O"]], ["mod", "theorem", "congr_of_sub", ["asymptotics", "is_O"]], ["mod", "theorem", "congr_right", ["asymptotics", "is_O"]], ["mod", "theorem", "const_mul_left", ["asymptotics", "is_O"]], ["mod", "theorem", "const_mul_right'", ["asymptotics", "is_O"]], ["mod", "theorem", "const_mul_right", ["asymptotics", "is_O"]], ["mod", "theorem", "eq_zero_imp", ["asymptotics", "is_O"]], ["mod", "theorem", "eventually_mul_div_cancel", ["asymptotics", "is_O"]], ["mod", "theorem", "exists_mem_basis", ["asymptotics", "is_O"]], ["mod", "theorem", "exists_nonneg", ["asymptotics", "is_O"]], ["mod", "theorem", "exists_pos", ["asymptotics", "is_O"]], ["mod", "theorem", "inv_rev", ["asymptotics", "is_O"]], ["mod", "theorem", "is_O_with", ["asymptotics", "is_O"]], ["mod", "theorem", "join", ["asymptotics", "is_O"]], ["mod", "theorem", "mono", ["asymptotics", "is_O"]], ["mod", "theorem", "mul", ["asymptotics", "is_O"]], ["mod", "theorem", "of_bound", ["asymptotics", "is_O"]], ["mod", "theorem", "of_const_mul_right", ["asymptotics", "is_O"]], ["mod", "theorem", "pow", ["asymptotics", "is_O"]], ["mod", "theorem", "prod_left", ["asymptotics", "is_O"]], ["mod", "theorem", "prod_left_fst", ["asymptotics", "is_O"]], ["mod", "theorem", "prod_left_snd", ["asymptotics", "is_O"]], ["mod", "theorem", "prod_rightl", ["asymptotics", "is_O"]], ["mod", "theorem", "prod_rightr", ["asymptotics", "is_O"]], ["mod", "theorem", "smul", ["asymptotics", "is_O"]], ["mod", "theorem", "smul_is_o", ["asymptotics", "is_O"]], ["mod", "theorem", "sub", ["asymptotics", "is_O"]], ["mod", "theorem", "sum", ["asymptotics", "is_O"]], ["mod", "theorem", "symm", ["asymptotics", "is_O"]], ["mod", "theorem", "trans", ["asymptotics", "is_O"]], ["add", "theorem", "trans_eventually_eq", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_is_o", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_le", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_tendsto", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_tendsto_nhds", ["asymptotics", "is_O"]], ["mod", "theorem", "triangle", ["asymptotics", "is_O"]], ["mod", "def", "is_O", ["asymptotics"]], ["mod", "theorem", "is_O_bot", ["asymptotics"]], ["mod", "theorem", "is_O_comm", ["asymptotics"]], ["mod", "theorem", "is_O_congr", ["asymptotics"]], ["mod", "theorem", "is_O_const_mul_self", ["asymptotics"]], ["mod", "theorem", "is_O_const_one", ["asymptotics"]], ["mod", "theorem", "is_O_fst_prod'", ["asymptotics"]], ["mod", "theorem", "is_O_fst_prod", ["asymptotics"]], ["mod", "theorem", "is_O_iff", ["asymptotics"]], ["mod", "theorem", "is_O_iff_eventually", ["asymptotics"]], ["mod", "theorem", "is_O_iff_eventually_is_O_with", ["asymptotics"]], ["mod", "theorem", "is_O_iff_is_O_with", ["asymptotics"]], ["mod", "theorem", "is_O_map", ["asymptotics"]], ["mod", "theorem", "is_O_neg_left", ["asymptotics"]], ["mod", "theorem", "is_O_neg_right", ["asymptotics"]], ["mod", "theorem", "is_O_norm_left", ["asymptotics"]], ["mod", "theorem", "is_O_norm_norm", ["asymptotics"]], ["mod", "theorem", "is_O_norm_right", ["asymptotics"]], ["mod", "theorem", "is_O_of_le'", ["asymptotics"]], ["mod", "theorem", "is_O_of_le", ["asymptotics"]], ["mod", "theorem", "is_O_of_subsingleton", ["asymptotics"]], ["mod", "theorem", "is_O_principal", ["asymptotics"]], ["mod", "theorem", "is_O_prod_left", ["asymptotics"]], ["mod", "theorem", "is_O_pure", ["asymptotics"]], ["mod", "theorem", "is_O_refl", ["asymptotics"]], ["mod", "theorem", "is_O_refl_left", ["asymptotics"]], ["mod", "theorem", "is_O_snd_prod'", ["asymptotics"]], ["mod", "theorem", "is_O_snd_prod", ["asymptotics"]], ["mod", "theorem", "is_O_top", ["asymptotics"]], ["mod", "theorem", "add", ["asymptotics", "is_O_with"]], ["mod", "theorem", "add_is_o", ["asymptotics", "is_O_with"]], ["mod", "theorem", "comp_tendsto", ["asymptotics", "is_O_with"]], ["mod", "theorem", "congr'", ["asymptotics", "is_O_with"]], ["mod", "theorem", "congr", ["asymptotics", "is_O_with"]], ["mod", "theorem", "congr_const", ["asymptotics", "is_O_with"]], ["mod", "theorem", "congr_left", ["asymptotics", "is_O_with"]], ["mod", "theorem", "congr_right", ["asymptotics", "is_O_with"]], ["mod", "theorem", "const_mul_left", ["asymptotics", "is_O_with"]], ["mod", "theorem", "const_smul_left", ["asymptotics", "is_O_with"]], ["mod", "theorem", "eq_zero_imp", ["asymptotics", "is_O_with"]], ["mod", "theorem", "eventually_mul_div_cancel", ["asymptotics", "is_O_with"]], ["mod", "theorem", "exists_eq_mul", ["asymptotics", "is_O_with"]], ["mod", "theorem", "exists_nonneg", ["asymptotics", "is_O_with"]], ["mod", "theorem", "exists_pos", ["asymptotics", "is_O_with"]], ["mod", "theorem", "inv_rev", ["asymptotics", "is_O_with"]], ["mod", "theorem", "is_O", ["asymptotics", "is_O_with"]], ["mod", "theorem", "join'", ["asymptotics", "is_O_with"]], ["mod", "theorem", "join", ["asymptotics", "is_O_with"]], ["mod", "theorem", "mono", ["asymptotics", "is_O_with"]], ["mod", "theorem", "pow'", ["asymptotics", "is_O_with"]], ["mod", "theorem", "pow", ["asymptotics", "is_O_with"]], ["mod", "theorem", "prod_left", ["asymptotics", "is_O_with"]], ["mod", "theorem", "prod_left_fst", ["asymptotics", "is_O_with"]], ["mod", "theorem", "prod_left_same", ["asymptotics", "is_O_with"]], ["mod", "theorem", "prod_left_snd", ["asymptotics", "is_O_with"]], ["mod", "theorem", "prod_rightl", ["asymptotics", "is_O_with"]], ["mod", "theorem", "prod_rightr", ["asymptotics", "is_O_with"]], ["mod", "theorem", "right_le_add_of_lt_1", ["asymptotics", "is_O_with"]], ["mod", "theorem", "right_le_sub_of_lt_1", ["asymptotics", "is_O_with"]], ["mod", "theorem", "smul", ["asymptotics", "is_O_with"]], ["mod", "theorem", "sub", ["asymptotics", "is_O_with"]], ["mod", "theorem", "sub_is_o", ["asymptotics", "is_O_with"]], ["mod", "theorem", "sum", ["asymptotics", "is_O_with"]], ["mod", "theorem", "symm", ["asymptotics", "is_O_with"]], ["mod", "theorem", "trans", ["asymptotics", "is_O_with"]], ["mod", "theorem", "trans_is_o", ["asymptotics", "is_O_with"]], ["mod", "theorem", "trans_le", ["asymptotics", "is_O_with"]], ["mod", "theorem", "triangle", ["asymptotics", "is_O_with"]], ["mod", "theorem", "weaken", ["asymptotics", "is_O_with"]], ["mod", "def", "is_O_with", ["asymptotics"]], ["mod", "theorem", "is_O_with_bot", ["asymptotics"]], ["mod", "theorem", "is_O_with_congr", ["asymptotics"]], ["mod", "theorem", "is_O_with_const_one", ["asymptotics"]], ["mod", "theorem", "is_O_with_fst_prod", ["asymptotics"]], ["mod", "theorem", "is_O_with_iff", ["asymptotics"]], ["mod", "theorem", "is_O_with_neg_left", ["asymptotics"]], ["mod", "theorem", "is_O_with_neg_right", ["asymptotics"]], ["mod", "theorem", "is_O_with_norm_left", ["asymptotics"]], ["mod", "theorem", "is_O_with_norm_norm", ["asymptotics"]], ["mod", "theorem", "is_O_with_norm_right", ["asymptotics"]], ["mod", "theorem", "is_O_with_of_le'", ["asymptotics"]], ["mod", "theorem", "is_O_with_of_le", ["asymptotics"]], ["mod", "theorem", "is_O_with_pure", ["asymptotics"]], ["mod", "theorem", "is_O_with_refl", ["asymptotics"]], ["mod", "theorem", "is_O_with_snd_prod", ["asymptotics"]], ["mod", "theorem", "is_O_with_top", ["asymptotics"]], ["mod", "theorem", "is_O_with_zero'", ["asymptotics"]], ["mod", "theorem", "is_O_with_zero", ["asymptotics"]], ["mod", "theorem", "is_O_zero", ["asymptotics"]], ["mod", "theorem", "is_O_zero_right_iff", ["asymptotics"]], ["mod", "theorem", "add", ["asymptotics", "is_o"]], ["mod", "theorem", "add_add", ["asymptotics", "is_o"]], ["mod", "theorem", "add_is_O", ["asymptotics", "is_o"]], ["mod", "theorem", "add_is_O_with", ["asymptotics", "is_o"]], ["mod", "theorem", "comp_tendsto", ["asymptotics", "is_o"]], ["mod", "theorem", "congr'", ["asymptotics", "is_o"]], ["mod", "theorem", "congr", ["asymptotics", "is_o"]], ["mod", "theorem", "congr_left", ["asymptotics", "is_o"]], ["mod", "theorem", "congr_of_sub", ["asymptotics", "is_o"]], ["mod", "theorem", "congr_right", ["asymptotics", "is_o"]], ["mod", "theorem", "const_mul_left", ["asymptotics", "is_o"]], ["mod", "theorem", "const_mul_right'", ["asymptotics", "is_o"]], ["mod", "theorem", "const_mul_right", ["asymptotics", "is_o"]], ["mod", "theorem", "def'", ["asymptotics", "is_o"]], ["mod", "theorem", "def", ["asymptotics", "is_o"]], ["mod", "theorem", "eventually_mul_div_cancel", ["asymptotics", "is_o"]], ["mod", "theorem", "inv_rev", ["asymptotics", "is_o"]], ["mod", "theorem", "is_O", ["asymptotics", "is_o"]], ["mod", "theorem", "is_O_with", ["asymptotics", "is_o"]], ["mod", "theorem", "join", ["asymptotics", "is_o"]], ["mod", "theorem", "mono", ["asymptotics", "is_o"]], ["mod", "theorem", "mul", ["asymptotics", "is_o"]], ["mod", "theorem", "mul_is_O", ["asymptotics", "is_o"]], ["mod", "theorem", "of_const_mul_right", ["asymptotics", "is_o"]], ["mod", "theorem", "pow", ["asymptotics", "is_o"]], ["mod", "theorem", "prod_left", ["asymptotics", "is_o"]], ["mod", "theorem", "prod_left_fst", ["asymptotics", "is_o"]], ["mod", "theorem", "prod_left_snd", ["asymptotics", "is_o"]], ["mod", "theorem", "prod_rightl", ["asymptotics", "is_o"]], ["mod", "theorem", "prod_rightr", ["asymptotics", "is_o"]], ["mod", "theorem", "right_is_O_add", ["asymptotics", "is_o"]], ["mod", "theorem", "right_is_O_sub", ["asymptotics", "is_o"]], ["mod", "theorem", "smul", ["asymptotics", "is_o"]], ["mod", "theorem", "smul_is_O", ["asymptotics", "is_o"]], ["mod", "theorem", "sub", ["asymptotics", "is_o"]], ["mod", "theorem", "sum", ["asymptotics", "is_o"]], ["mod", "theorem", "symm", ["asymptotics", "is_o"]], ["mod", "theorem", "tendsto_div_nhds_zero", ["asymptotics", "is_o"]], ["mod", "theorem", "trans", ["asymptotics", "is_o"]], ["add", "theorem", "trans_eventually_eq", ["asymptotics", "is_o"]], ["mod", "theorem", "trans_is_O", ["asymptotics", "is_o"]], ["mod", "theorem", "trans_is_O_with", ["asymptotics", "is_o"]], ["mod", "theorem", "trans_le", ["asymptotics", "is_o"]], ["mod", "theorem", "trans_tendsto", ["asymptotics", "is_o"]], ["mod", "theorem", "triangle", ["asymptotics", "is_o"]], ["mod", "def", "is_o", ["asymptotics"]], ["mod", "theorem", "is_o_bot", ["asymptotics"]], ["mod", "theorem", "is_o_comm", ["asymptotics"]], ["mod", "theorem", "is_o_congr", ["asymptotics"]], ["mod", "theorem", "is_o_const_id_at_bot", ["asymptotics"]], ["mod", "theorem", "is_o_const_id_at_top", ["asymptotics"]], ["mod", "theorem", "is_o_const_id_comap_norm_at_top", ["asymptotics"]], ["mod", "theorem", "is_o_const_smul_left", ["asymptotics"]], ["mod", "theorem", "is_o_iff", ["asymptotics"]], ["mod", "theorem", "is_o_iff_forall_is_O_with", ["asymptotics"]], ["mod", "theorem", "is_o_iff_tendsto'", ["asymptotics"]], ["mod", "theorem", "is_o_iff_tendsto", ["asymptotics"]], ["mod", "theorem", "is_o_map", ["asymptotics"]], ["mod", "theorem", "is_o_neg_left", ["asymptotics"]], ["mod", "theorem", "is_o_neg_right", ["asymptotics"]], ["mod", "theorem", "is_o_norm_left", ["asymptotics"]], ["mod", "theorem", "is_o_norm_norm", ["asymptotics"]], ["mod", "theorem", "is_o_norm_right", ["asymptotics"]], ["mod", "theorem", "is_o_of_subsingleton", ["asymptotics"]], ["mod", "theorem", "is_o_one_iff", ["asymptotics"]], ["mod", "theorem", "is_o_prod_left", ["asymptotics"]], ["mod", "theorem", "is_o_pure", ["asymptotics"]], ["mod", "theorem", "is_o_refl_left", ["asymptotics"]], ["mod", "theorem", "is_o_top", ["asymptotics"]], ["mod", "theorem", "is_o_zero", ["asymptotics"]], ["add", "theorem", "trans_is_O", ["filter", "eventually_eq"]], ["add", "theorem", "trans_is_o", ["filter", "eventually_eq"]]]}, {"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": [["mod", "theorem", "cesaro", ["filter", "tendsto"]]]}, {"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/complex/phragmen_lindelof.lean", "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/complex/removable_singularity.lean", "newPath": "src/analysis/complex/removable_singularity.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "is_O_comp", ["continuous_linear_equiv"]], ["mod", "theorem", "is_O_comp_rev", ["continuous_linear_equiv"]], ["mod", "theorem", "is_O_sub", ["continuous_linear_equiv"]], ["mod", "theorem", "is_O_sub_rev", ["continuous_linear_equiv"]], ["mod", "theorem", "is_O_id", ["continuous_linear_map"]], ["mod", "theorem", "is_O_with_id", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": [["mod", "theorem", "inverse_add_norm", ["normed_ring"]], ["mod", "theorem", "inverse_one_sub_norm", ["normed_ring"]]]}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["mod", "theorem", "is_o_pow_exp_at_top", ["real"]]]}, {"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": [["del", "theorem", "dGamma_integrand_is_O_at_top", []], ["add", "theorem", "dGamma_integrand_is_o_at_top", []], ["del", "theorem", "Gamma_integrand_is_O", ["real"]], ["add", "theorem", "Gamma_integrand_is_o", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["mod", "theorem", "is_o_log_id_at_top", ["real"]], ["mod", "theorem", "is_o_pow_log_id_at_top", ["real"]]]}, {"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "rpow", ["asymptotics", "is_O"]], ["mod", "theorem", "rpow", ["asymptotics", "is_O_with"]], ["mod", "theorem", "rpow", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_log_rpow_at_top", []], ["mod", "theorem", "is_o_rpow_exp_at_top", []]]}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": [["mod", "theorem", "roth_number_nat_is_O_id", []]]}, {"oldPath": "src/measure_theory/integral/exp_decay.lean", "newPath": "src/measure_theory/integral/exp_decay.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/probability/strong_law.lean", "newPath": "src/probability/strong_law.lean", "changes": []}]}, {"timestamp": 1653846603, "sha": "55f32dae", "message": "feat(topology/vector_bundle): the pullback of a vector bundle is a vector bundle (#8545)\nWe construct the pullback bundle of a vector bundle.\n* Co-authored by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com>\n* Co-authored by: Floris van Doorn \n* Co-authored by: Sebastien Gouezel ", "changes": [{"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": [["add", "def", "lift", ["bundle", "pullback"]], ["add", "theorem", "lift_mk", ["bundle", "pullback"]], ["add", "theorem", "proj_lift", ["bundle", "pullback"]], ["add", "def", "pullback", ["bundle"]], ["add", "def", "pullback_total_space_embedding", ["bundle"]], ["add", "theorem", "pullback_total_space_embedding_snd", ["bundle"]], ["mod", "def", "proj_snd", ["bundle", "trivial"]]]}, {"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": [["add", "theorem", "eq_symm_apply", ["local_equiv"]]]}, {"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "eq_symm_apply", ["local_homeomorph"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "continuous_empty_function", []]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "theorem", "inducing_pullback_total_space_embedding", []], ["add", "theorem", "continuous_lift", ["pullback"]], ["add", "theorem", "continuous_proj", ["pullback"]], ["add", "theorem", "continuous_total_space_mk", ["pullback"]], ["add", "def", "pullback_topology", []], ["add", "theorem", "open_target", ["topological_vector_bundle", "trivialization"]], ["add", "def", "pullback", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1653839211, "sha": "938eeeb4", "message": "feat(algebra/group/with_one): add a recursor and a `no_zero_divisors` instance (#14434)", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "def", "rec_one_coe", ["with_one"]]]}]}, {"timestamp": 1653831603, "sha": "b673ed8a", "message": "feat(analysis/normed_space): Geometric Hahn Banach theorems (#7288)\nThis proves a range of variants of the Hahn-Banach separation theorems.", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach/extension.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/hahn_banach/separation.lean", "changes": [["add", "theorem", "geometric_hahn_banach_closed_compact", []], ["add", "theorem", "geometric_hahn_banach_closed_point", []], ["add", "theorem", "geometric_hahn_banach_compact_closed", []], ["add", "theorem", "geometric_hahn_banach_open", []], ["add", "theorem", "geometric_hahn_banach_open_open", []], ["add", "theorem", "geometric_hahn_banach_open_point", []], ["add", "theorem", "geometric_hahn_banach_point_closed", []], ["add", "theorem", "geometric_hahn_banach_point_open", []], ["add", "theorem", "geometric_hahn_banach_point_point", []], ["add", "theorem", "separate_convex_open_set", []]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}]}, {"timestamp": 1653825046, "sha": "98b76372", "message": "feat(category_theory/limits): monos have images (#14186)\nTurning on an instance for `has_image` for any monomorphism.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["mod", "theorem", "ext", ["category_theory", "limits", "image"]]]}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": [["add", "theorem", "image_subobject_mono", ["category_theory", "limits"]]]}]}, {"timestamp": 1653822803, "sha": "8d13a2db", "message": "feat(algebra/order/rearrangement): Equality case of the Rearrangement Inequality (#13245)\nThis PR deduces the cases of equality and strict inequality of the Rearrangement Inequality as a corollary to the existing statement of the rearrangement inequality.", "changes": [{"oldPath": "src/algebra/order/rearrangement.lean", "newPath": "src/algebra/order/rearrangement.lean", "changes": [["add", "theorem", "sum_mul_eq_sum_comp_perm_mul_iff", ["antivary"]], ["add", "theorem", "sum_mul_eq_sum_mul_comp_perm_iff", ["antivary"]], ["add", "theorem", "sum_mul_lt_sum_comp_perm_mul_iff", ["antivary"]], ["add", "theorem", "sum_mul_lt_sum_mul_comp_perm_iff", ["antivary"]], ["add", "theorem", "sum_smul_eq_sum_comp_perm_smul_iff", ["antivary"]], ["add", "theorem", "sum_smul_eq_sum_smul_comp_perm_iff", ["antivary"]], ["add", "theorem", "sum_smul_lt_sum_comp_perm_smul_iff", ["antivary"]], ["add", "theorem", "sum_smul_lt_sum_smul_comp_perm_iff", ["antivary"]], ["add", "theorem", "sum_mul_eq_sum_comp_perm_mul_iff", ["antivary_on"]], ["add", "theorem", "sum_mul_eq_sum_mul_comp_perm_iff", ["antivary_on"]], ["add", "theorem", "sum_mul_lt_sum_comp_perm_mul_iff", ["antivary_on"]], ["add", "theorem", "sum_mul_lt_sum_mul_comp_perm_iff", ["antivary_on"]], ["add", "theorem", "sum_smul_eq_sum_comp_perm_smul_iff", ["antivary_on"]], ["add", "theorem", "sum_smul_eq_sum_smul_comp_perm_iff", ["antivary_on"]], ["add", "theorem", "sum_smul_lt_sum_comp_perm_smul_iff", ["antivary_on"]], ["add", "theorem", "sum_smul_lt_sum_smul_comp_perm_iff", ["antivary_on"]], ["add", "theorem", "sum_comp_perm_mul_eq_sum_mul_iff", ["monovary"]], ["add", "theorem", "sum_comp_perm_mul_lt_sum_mul_iff", ["monovary"]], ["add", "theorem", "sum_comp_perm_smul_eq_sum_smul_iff", ["monovary"]], ["add", "theorem", "sum_comp_perm_smul_lt_sum_smul_iff", ["monovary"]], ["add", "theorem", "sum_mul_comp_perm_eq_sum_mul_iff", ["monovary"]], ["add", "theorem", "sum_mul_comp_perm_lt_sum_mul_iff", ["monovary"]], ["add", "theorem", "sum_smul_comp_perm_eq_sum_smul_iff", ["monovary"]], ["add", "theorem", "sum_smul_comp_perm_lt_sum_smul_iff", ["monovary"]], ["add", "theorem", "sum_comp_perm_mul_eq_sum_mul_iff", ["monovary_on"]], ["add", "theorem", "sum_comp_perm_mul_lt_sum_mul_iff", ["monovary_on"]], ["add", "theorem", "sum_comp_perm_smul_eq_sum_smul_iff", ["monovary_on"]], ["add", "theorem", "sum_comp_perm_smul_lt_sum_smul_iff", ["monovary_on"]], ["add", "theorem", "sum_mul_comp_perm_eq_sum_mul_iff", ["monovary_on"]], ["add", "theorem", "sum_mul_comp_perm_lt_sum_mul_iff", ["monovary_on"]], ["add", "theorem", "sum_smul_comp_perm_eq_sum_smul_iff", ["monovary_on"]], ["add", "theorem", "sum_smul_comp_perm_lt_sum_smul_iff", ["monovary_on"]]]}, {"oldPath": "src/order/monovary.lean", "newPath": "src/order/monovary.lean", "changes": [["add", "theorem", "antivary_on_to_dual_left", []], ["add", "theorem", "antivary_on_to_dual_right", []], ["add", "theorem", "antivary_to_dual_left", []], ["add", "theorem", "antivary_to_dual_right", []], ["add", "theorem", "monovary_on_to_dual_left", []], ["add", "theorem", "monovary_on_to_dual_right", []], ["add", "theorem", "monovary_to_dual_left", []], ["add", "theorem", "monovary_to_dual_right", []]]}]}, {"timestamp": 1653815076, "sha": "6b936a9d", "message": "feat(data/set/basic): simp-normal form for `↥{x | p x}` (#14441)\nWe make `{x // p x}` the simp-normal form for `↥{x | p x}`. We also rewrite some lemmas to use the former instead of the latter.", "changes": [{"oldPath": "archive/imo/imo1987_q1.lean", "newPath": "archive/imo/imo1987_q1.lean", "changes": []}, {"oldPath": "src/algebra/algebraic_card.lean", "newPath": "src/algebra/algebraic_card.lean", "changes": [["mod", "theorem", "cardinal_mk_le_max", ["algebraic"]], ["mod", "theorem", "cardinal_mk_le_mul", ["algebraic"]], ["mod", "theorem", "cardinal_mk_le_of_infinite", ["algebraic"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "coe_eq_subtype", ["set"]], ["add", "theorem", "coe_set_of", ["set"]], ["del", "theorem", "set_coe_eq_subtype", ["set"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "mk_subtype_le_omega", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}]}, {"timestamp": 1653787889, "sha": "3e58d9c3", "message": "feat(data/nat/enat): `is_well_order` instance for `enat` (#14416)", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "lt_wf", ["enat"]]]}]}, {"timestamp": 1653768648, "sha": "ad2baee4", "message": "feat(topology/separation): `t0_space` and `t1_space` for `α × β` and `Π i, α i` (#14418)", "changes": [{"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "univ_pi_singleton", ["set"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "map", ["indistinguishable"]], ["add", "theorem", "t0_space_iff_indistinguishable", []]]}]}, {"timestamp": 1653760377, "sha": "f13e5dfd", "message": "refactor(set_theory/*) rename `wf` lemmas to `lt_wf` (#14417)\nThis is done for consistency with the rest of `mathlib` (`nat.lt_wf`, `enat.lt_wf`, `finset.lt_wf`, ...)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "lt_wf", ["ordinal"]], ["del", "theorem", "wf", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": [["add", "theorem", "lt_wf", ["nonote"]], ["del", "theorem", "wf", ["nonote"]]]}]}, {"timestamp": 1653760376, "sha": "762fc150", "message": "feat(set_theory/ordinal/arithmetic): Add missing instances for `ordinal` (#14128)\nWe add the following instances:\n- `monoid_with_zero ordinal`\n- `no_zero_divisors ordinal`\n- `is_left_distrib_class ordinal`\n- `contravariant_class ordinal ordinal (swap (+)) (<)`\n- `is_antisymm ordinal (∣)`", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "theorem", "dvd_add", ["ordinal"]], ["del", "theorem", "dvd_zero", ["ordinal"]], ["del", "theorem", "lt_of_add_lt_add_right", ["ordinal"]], ["del", "theorem", "mul_add", ["ordinal"]], ["del", "theorem", "mul_add_one", ["ordinal"]], ["del", "theorem", "mul_eq_zero_iff", ["ordinal"]], ["del", "theorem", "mul_one_add", ["ordinal"]], ["mod", "theorem", "mul_succ", ["ordinal"]], ["del", "theorem", "mul_two", ["ordinal"]], ["del", "theorem", "mul_zero", ["ordinal"]], ["del", "theorem", "one_dvd", ["ordinal"]], ["mod", "theorem", "succ_zero", ["ordinal"]], ["del", "theorem", "zero_dvd", ["ordinal"]], ["del", "theorem", "zero_mul", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/fixed_point.lean", "newPath": "src/set_theory/ordinal/fixed_point.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": [["del", "theorem", "mul_zero", ["onote"]], ["del", "theorem", "zero_mul", ["onote"]]]}]}, {"timestamp": 1653760375, "sha": "3280d006", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add some lemmas assuming `mul_zero_class` `partial_order`, remove primes (#14060)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["del", "theorem", "le_mul_of_le_of_one_le'", ["zero_lt"]], ["del", "theorem", "le_mul_of_one_le_left'", ["zero_lt"]], ["mod", "theorem", "le_mul_of_one_le_left", ["zero_lt"]], ["del", "theorem", "le_mul_of_one_le_of_le'", ["zero_lt"]], ["del", "theorem", "le_mul_of_one_le_right'", ["zero_lt"]], ["mod", "theorem", "le_mul_of_one_le_right", ["zero_lt"]], ["del", "theorem", "le_of_le_mul_of_le_one_left'", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_of_one_le_left'", ["zero_lt"]], ["del", "theorem", "le_of_mul_le_of_one_le_right'", ["zero_lt"]], ["del", "theorem", "mul_le_one_of_le_of_le'", ["zero_lt", "left"]], ["del", "theorem", "one_le_mul_of_le_of_le'", ["zero_lt", "left"]], ["del", "theorem", "lt_of_mul_lt_mul_left''", ["zero_lt"]], ["add", "theorem", "lt_of_mul_lt_mul_left", ["zero_lt"]], ["del", "theorem", "lt_of_mul_lt_mul_right''", ["zero_lt"]], ["add", "theorem", "lt_of_mul_lt_mul_right", ["zero_lt"]], ["add", "theorem", "mul_eq_mul_iff_eq_and_eq'", ["zero_lt"]], ["add", "theorem", "mul_eq_mul_iff_eq_and_eq", ["zero_lt"]], ["del", "theorem", "mul_le_mul_left''", ["zero_lt"]], ["add", "theorem", "mul_le_mul_left", ["zero_lt"]], ["del", "theorem", "mul_le_mul_right''", ["zero_lt"]], ["add", "theorem", "mul_le_mul_right", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_of_le_one'", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_one_left'", ["zero_lt"]], ["mod", "theorem", "mul_le_of_le_one_left", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_one_of_le'", ["zero_lt"]], ["del", "theorem", "mul_le_of_le_one_right'", ["zero_lt"]], ["mod", "theorem", "mul_le_of_le_one_right", ["zero_lt"]], ["add", "theorem", "mul_left_cancel_iff", ["zero_lt"]], ["add", "theorem", "mul_right_cancel_iff", ["zero_lt"]], ["add", "theorem", "le_mul_of_le_mul_left", ["zero_lt", "preorder"]], ["add", "theorem", "le_mul_of_le_mul_right", ["zero_lt", "preorder"]], ["add", "theorem", "le_mul_of_le_of_one_le", ["zero_lt", "preorder"]], ["add", "theorem", "le_mul_of_one_le_left", ["zero_lt", "preorder"]], ["add", "theorem", "le_mul_of_one_le_of_le", ["zero_lt", "preorder"]], ["add", "theorem", "le_mul_of_one_le_right", ["zero_lt", "preorder"]], ["add", "theorem", "le_of_le_mul_of_le_one_left", ["zero_lt", "preorder"]], ["add", "theorem", "le_of_mul_le_of_one_le_left", ["zero_lt", "preorder"]], ["add", "theorem", "le_of_mul_le_of_one_le_right", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_one_of_le_of_le'", ["zero_lt", "preorder", "left"]], ["add", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "preorder", "left"]], ["add", "theorem", "mul_le_mul_of_le_of_le'", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_mul_of_le_of_le", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_le_of_le_one", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_le_one_left", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_le_one_of_le", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_le_one_right", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_mul_le_left", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_of_mul_le_right", ["zero_lt", "preorder"]], ["add", "theorem", "mul_le_one_of_le_of_le", ["zero_lt", "preorder", "right"]], ["add", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "preorder", "right"]], ["del", "theorem", "mul_le_one_of_le_of_le'", ["zero_lt", "right"]], ["del", "theorem", "one_le_mul_of_le_of_le'", ["zero_lt", "right"]]]}]}, {"timestamp": 1653752961, "sha": "1e46532c", "message": "feat(measure_theory/integral/lebesgue): `lintegral_add` holds if 1 function is measurable (#14278)\n* for any function `f` there exists a measurable function `g ≤ f` with the same Lebesgue integral;\n* prove `∫⁻ a, f a + g a ∂μ = ∫⁻ a, f a ∂μ + ∫⁻ a, g a ∂μ` assuming **one** of the functions is (a.e.-)measurable; split `lintegral_add` into two lemmas `lintegral_add_(left|right)`;\n* prove `∫⁻ a, f a ∂μ + ∫⁻ a, g a ∂μ ≤ ∫⁻ a, f a + g a ∂μ` for any `f`, `g`;\n* prove a version of Markov's inequality for `μ {x | f x + ε ≤ g x}` with possibly non-measurable `f`;\n* prove `f ≤ᵐ[μ] g → ∫⁻ x, f x ∂μ ≠ ∞ → ∫⁻ x, g x ∂μ ≤ ∫⁻ x, f x ∂μ → f =ᵐ[μ] g` for an a.e.-measurable function `f`;\n* drop one measurability assumption in `lintegral_sub` and `lintegral_sub_le`;\n* add `lintegral_strict_mono_of_ae_le_of_frequently_ae_lt`, a version of `lintegral_strict_mono_of_ae_le_of_ae_lt_on`;\n* drop one measurability assumption in `lintegral_strict_mono_of_ae_le_of_ae_lt_on`, `lintegral_strict_mono`, and `set_lintegral_strict_mono`;\n* prove `with_density_add` assuming measurability of one of the functions; replace it with `with_density_add_(left|right)`;\n* drop measurability assumptions here and there in `mean_inequalities`.", "changes": [{"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "add'", ["measure_theory", "integrable"]], ["del", "theorem", "lintegral_nnnorm_add", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_add_left", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_add_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "ae_eq_of_ae_le_of_lintegral_le", ["measure_theory"]], ["add", "theorem", "exists_measurable_le_lintegral_eq", ["measure_theory"]], ["add", "theorem", "le_lintegral_add", ["measure_theory"]], ["del", "theorem", "lintegral_add'", ["measure_theory"]], ["del", "theorem", "lintegral_add", ["measure_theory"]], ["add", "theorem", "lintegral_add_aux", ["measure_theory"]], ["add", "theorem", "lintegral_add_left'", ["measure_theory"]], ["add", "theorem", "lintegral_add_left", ["measure_theory"]], ["add", "theorem", "lintegral_add_mul_meas_add_le_le_lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_add_right'", ["measure_theory"]], ["add", "theorem", "lintegral_add_right", ["measure_theory"]], ["add", "theorem", "lintegral_finset_sum'", ["measure_theory"]], ["add", "theorem", "lintegral_indicator₀", ["measure_theory"]], ["add", "theorem", "lintegral_strict_mono_of_ae_le_of_frequently_ae_lt", ["measure_theory"]], ["mod", "theorem", "lintegral_sub", ["measure_theory"]], ["mod", "theorem", "lintegral_sub_le", ["measure_theory"]], ["mod", "theorem", "lintegral_zero", ["measure_theory"]], ["mod", "theorem", "lintegral_zero_fun", ["measure_theory"]], ["del", "theorem", "with_density_add", ["measure_theory"]], ["add", "theorem", "with_density_add_left", ["measure_theory"]], ["add", "theorem", "with_density_add_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": [["mod", "theorem", "ae_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["mod", "theorem", "lintegral_mul_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": []}]}, {"timestamp": 1653752959, "sha": "249f1072", "message": "feat(algebra/order/monoid_lemmas): remove duplicates, add missing lemmas, fix inconsistencies (#13494)\nChanges in the order:\n`mul_lt_mul'''` has asymmetric typeclass assumptions. So I did the following 3 changes.\nRename `mul_lt_mul'''` to `left.mul_lt_mul`\nMake an alias `mul_lt_mul'''` of `mul_lt_mul_of_lt_of_lt`\nAdd `right.mul_lt_mul`\nMove `le_mul_of_one_le_left'` and `mul_le_of_le_one_left'` together with similar lemmas.\nMove `lt_mul_of_one_lt_left'` together with similar lemmas.\nAdd `mul_lt_of_lt_one_right'` and `mul_lt_of_lt_one_left'`. These are analogs of other lemmas.\nFollowing are changes of lemmas of the form `b ≤ c → a ≤ 1 → b * a ≤ c`, `b ≤ c → 1 ≤ a → b ≤ c * a`, `a ≤ 1 → b ≤ c → a * b ≤ c` and `1 ≤ a → b ≤ c → b ≤ a * c`. With the following changes, these 4 sections will be very similar.\nFor `b ≤ c → a ≤ 1 → b * a ≤ c`:\nRemove `alias mul_le_of_le_of_le_one ← mul_le_one'`. This naming is not consistent with `left.mul_lt_one`.\nAdd `mul_lt_of_lt_of_lt_one'`.\nAdd `left.mul_le_one`.\nAdd `left.mul_lt_one_of_le_of_lt`.\nAdd `left.mul_lt_one_of_lt_of_le`.\nAdd `left.mul_lt_one'`.\nFor `b ≤ c → 1 ≤ a → b ≤ c * a`:\nRename `le_mul_of_le_of_le_one` to `le_mul_of_le_of_one_le`.\nRemove `lt_mul_of_lt_of_one_le'`. It's exactly the same as `lt_mul_of_lt_of_one_le`.\nRename `one_le_mul_right` to `left.one_le_mul`.\nRename `one_le_mul` to `left.one_le_mul`.\nRename `one_lt_mul_of_lt_of_le'` to `left.one_lt_mul_of_lt_of_le'`.\nAdd `left.one_lt_mul`.\nRename `one_lt_mul'` to `left.one_lt_mul'`.\nFor `a ≤ 1 → b ≤ c → a * b ≤ c`:\nAdd `mul_lt_of_lt_one_of_lt'`.\nAdd `right.mul_le_one`.\nAdd `right.mul_lt_one_of_lt_of_le`.\nAdd `right.mul_lt_one'`.\nFor `1 ≤ a → b ≤ c → b ≤ a * c`:\nRename `lt_mul_of_one_lt_of_lt` to `lt_mul_of_one_lt_of_lt'`.\nAdd `lt_mul_of_one_lt_of_lt`.\nAdd `right.one_lt_mul_of_lt_of_le`.\nRename `one_lt_mul_of_le_of_lt'` to `right.one_lt_mul_of_le_of_lt`.\nAdd `right.one_lt_mul'`.\nThen create aliases for all `left` lemmas in these 4 sections.\nRename `mul_eq_mul_iff_eq_and_eq` to `left.mul_eq_mul_iff_eq_and_eq`.\nAdd `right.mul_eq_mul_iff_eq_and_eq`.\nMake an alias `mul_eq_mul_iff_eq_and_eq` of `left.mul_eq_mul_iff_eq_and_eq`.\nSame for additive version.\nHowever, the implicit parameter inconsistency has not been resolved. It affects too many files.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["del", "theorem", "le_mul_of_le_of_le_one", []], ["mod", "theorem", "le_mul_of_one_le_right'", []], ["add", "theorem", "mul_eq_mul_iff_eq_and_eq", ["left"]], ["add", "theorem", "mul_le_one", ["left"]], ["add", "theorem", "mul_lt_mul", ["left"]], ["add", "theorem", "mul_lt_one'", ["left"]], ["add", "theorem", "mul_lt_one_of_le_of_lt", ["left"]], ["add", "theorem", "mul_lt_one_of_lt_of_le", ["left"]], ["add", "theorem", "one_le_mul", ["left"]], ["add", "theorem", "one_lt_mul'", ["left"]], ["add", "theorem", "one_lt_mul", ["left"]], ["add", "theorem", "one_lt_mul_of_le_of_lt", ["left"]], ["add", "theorem", "one_lt_mul_of_lt_of_le", ["left"]], ["del", "theorem", "lt_mul_of_lt_of_one_le'", []], ["add", "theorem", "lt_mul_of_one_lt_of_lt'", []], ["mod", "theorem", "lt_mul_of_one_lt_of_lt", []], ["mod", "theorem", "lt_mul_of_one_lt_right'", []], ["del", "theorem", "mul_eq_mul_iff_eq_and_eq", []], ["mod", "theorem", "mul_le_of_le_one_right'", []], ["del", "theorem", "mul_lt_mul'''", []], ["add", "theorem", "mul_lt_of_lt_of_lt_one'", []], ["add", "theorem", "mul_lt_of_lt_one_left'", []], ["add", "theorem", "mul_lt_of_lt_one_of_lt'", []], ["add", "theorem", "mul_lt_of_lt_one_right'", []], ["del", "theorem", "one_le_mul", []], ["del", "theorem", "one_le_mul_right", []], ["del", "theorem", "one_lt_mul'", []], ["del", "theorem", "one_lt_mul_of_le_of_lt'", []], ["del", "theorem", "one_lt_mul_of_lt_of_le'", []], ["add", "theorem", "mul_eq_mul_iff_eq_and_eq", ["right"]], ["add", "theorem", "mul_le_one", ["right"]], ["add", "theorem", "mul_lt_mul", ["right"]], ["add", "theorem", "mul_lt_one'", ["right"]], ["add", "theorem", "mul_lt_one_of_le_of_lt", ["right"]], ["add", "theorem", "mul_lt_one_of_lt_of_le", ["right"]], ["add", "theorem", "one_lt_mul'", ["right"]], ["add", "theorem", "one_lt_mul_of_le_of_lt", ["right"]], ["add", "theorem", "one_lt_mul_of_lt_of_le", ["right"]]]}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": []}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": []}]}, {"timestamp": 1653745893, "sha": "2ce8482e", "message": "feat(computability/regular_expressions): add power operator (#14261)\nWe can't make `regular_expression` a monoid, but we can put a power operator on it that's compatible with the power operator on languages.", "changes": [{"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": [["add", "theorem", "matches_pow", ["regular_expression"]]]}]}, {"timestamp": 1653745892, "sha": "8a0e7128", "message": "feat(category_theory/monoidal/discrete): simps (#14259)\nThis is a minuscule change, but it appears to work both on `master` and in the [shift functor refactor](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/trouble.20in.20.60shift_functor.60.20land) I'm aspiring towards, so I'm shipping it off for CI.", "changes": [{"oldPath": "src/category_theory/monoidal/discrete.lean", "newPath": "src/category_theory/monoidal/discrete.lean", "changes": []}]}, {"timestamp": 1653745891, "sha": "dcd5ebd9", "message": "feat({data/{finset,set},order/filter}/pointwise): More lemmas (#14216)\nLemmas about `s ^ n`, `0 * s` and `1 ∈ s / t`.\nOther changes:\n* `finset.mul_card_le` → `finset.card_mul_le`\n* `finset.card_image_eq_iff_inj_on` → `finset.card_image_iff`.\n* `zero_smul_subset` → `zero_smul_set_subset`\n* Reorder lemmas slightly\n* Add an explicit argument to `finset.coe_smul_finset`\n* Remove an explicit argument to `set.empty`", "changes": [{"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["del", "theorem", "card_image_eq_iff_inj_on", ["finset"]], ["add", "theorem", "card_image_iff", ["finset"]]]}, {"oldPath": "src/data/finset/interval.lean", "newPath": "src/data/finset/interval.lean", "changes": []}, {"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["add", "theorem", "card_image₂_iff", ["finset"]], ["add", "theorem", "image₂_singleton_left'", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "card_mul_iff", ["finset"]], ["add", "theorem", "card_mul_le", ["finset"]], ["add", "theorem", "empty_pow", ["finset"]], ["add", "theorem", "image_div", ["finset"]], ["add", "theorem", "image_mul", ["finset"]], ["mod", "theorem", "image_one", ["finset"]], ["del", "theorem", "mul_card_le", ["finset"]], ["add", "theorem", "mul_univ_of_one_mem", ["finset"]], ["add", "theorem", "one_mem_div", ["finset", "nonempty"]], ["add", "theorem", "subset_one_iff", ["finset", "nonempty"]], ["add", "theorem", "not_one_mem_div_iff", ["finset"]], ["add", "theorem", "one_mem_div_iff", ["finset"]], ["add", "theorem", "pow_mem_pow", ["finset"]], ["add", "theorem", "pow_subset_pow", ["finset"]], ["add", "theorem", "pow_subset_pow_of_one_mem", ["finset"]], ["add", "theorem", "subset_mul_left", ["finset"]], ["add", "theorem", "subset_mul_right", ["finset"]], ["add", "theorem", "subset_one_iff_eq", ["finset"]], ["add", "theorem", "univ_mul_of_one_mem", ["finset"]], ["add", "theorem", "univ_mul_univ", ["finset"]], ["add", "theorem", "univ_pow", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "div_zero_subset", ["set"]], ["mod", "theorem", "empty_pow", ["set"]], ["add", "theorem", "image_div", ["set"]], ["mod", "theorem", "image_mul", ["set"]], ["add", "theorem", "mul_univ_of_one_mem", ["set"]], ["add", "theorem", "mul_zero_subset", ["set"]], ["add", "theorem", "div_zero", ["set", "nonempty"]], ["add", "theorem", "mul_zero", ["set", "nonempty"]], ["add", "theorem", "one_mem_div", ["set", "nonempty"]], ["add", "theorem", "smul_zero", ["set", "nonempty"]], ["add", "theorem", "zero_div", ["set", "nonempty"]], ["add", "theorem", "zero_mul", ["set", "nonempty"]], ["add", "theorem", "zero_smul", ["set", "nonempty"]], ["add", "theorem", "not_one_mem_div_iff", ["set"]], ["add", "theorem", "nsmul_univ", ["set"]], ["add", "theorem", "one_mem_div_iff", ["set"]], ["add", "theorem", "pow_subset_pow_of_one_mem", ["set"]], ["add", "theorem", "preimage_div_preimage_subset", ["set"]], ["mod", "theorem", "preimage_mul_preimage_subset", ["set"]], ["mod", "theorem", "smul_mem_smul_set_iff", ["set"]], ["add", "theorem", "smul_zero_subset", ["set"]], ["add", "theorem", "univ_mul_of_one_mem", ["set"]], ["add", "theorem", "univ_pow", ["set"]], ["add", "theorem", "zero_div_subset", ["set"]], ["add", "theorem", "zero_mul_subset", ["set"]], ["add", "theorem", "zero_smul_set_subset", ["set"]], ["mod", "theorem", "zero_smul_subset", ["set"]]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "le_def", ["filter"]], ["add", "theorem", "le_map_iff", ["filter"]], ["add", "theorem", "not_disjoint", ["filter", "ne_bot"]], ["add", "theorem", "of_map", ["filter", "ne_bot"]], ["add", "theorem", "not_disjoint_self_iff", ["filter"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "bot_pow", ["filter"]], ["add", "theorem", "mem_mul", ["filter"]], ["del", "theorem", "mem_mul_iff", ["filter"]], ["add", "theorem", "mul_top_of_one_le", ["filter"]], ["add", "theorem", "div_zero_nonneg", ["filter", "ne_bot"]], ["add", "theorem", "mul_zero_nonneg", ["filter", "ne_bot"]], ["add", "theorem", "of_smul_filter", ["filter", "ne_bot"]], ["add", "theorem", "one_le_div", ["filter", "ne_bot"]], ["add", "theorem", "smul_zero_nonneg", ["filter", "ne_bot"]], ["add", "theorem", "zero_div_nonneg", ["filter", "ne_bot"]], ["add", "theorem", "zero_mul_nonneg", ["filter", "ne_bot"]], ["add", "theorem", "zero_smul_nonneg", ["filter", "ne_bot"]], ["add", "theorem", "not_one_le_div_iff", ["filter"]], ["add", "theorem", "nsmul_top", ["filter"]], ["add", "theorem", "top_mul_of_one_le", ["filter"]], ["add", "theorem", "top_mul_top", ["filter"]], ["add", "theorem", "top_pow", ["filter"]], ["add", "theorem", "zero_smul_filter", ["filter"]], ["add", "theorem", "zero_smul_filter_nonpos", ["filter"]]]}, {"oldPath": "src/ring_theory/chain_of_divisors.lean", "newPath": "src/ring_theory/chain_of_divisors.lean", "changes": []}]}, {"timestamp": 1653738179, "sha": "15fe7824", "message": "doc(set_theory/lists): fix typo (#14427)", "changes": [{"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}]}, {"timestamp": 1653738178, "sha": "d0efbcb0", "message": "feat(model_theory/elementary_maps): Elementary maps respect all (bounded) formulas (#14252)\nGeneralizes `elementary_embedding.map_formula` to more classes of formula.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inclusion_eq_id", ["set"]]]}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["add", "theorem", "Theory_model_iff", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "map_bounded_formula", ["first_order", "language", "elementary_embedding"]], ["mod", "theorem", "map_formula", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "map_sentence", ["first_order", "language", "elementary_embedding"]]]}]}, {"timestamp": 1653738177, "sha": "599240fc", "message": "refactor(order/bounds): general cleanup (#14127)\nApart from golfing, this PR does the following:\nAdd the following theorems (which are immediate from the non-self counterparts):\n- `monotone_on.mem_upper_bounds_image_self`\n- `monotone_on.mem_lower_bounds_image_self`\n- `antitone_on.mem_upper_bounds_image_self`\n- `antitone_on.mem_lower_bounds_image_self`\nRemove the following theorems (as they're just `mem_X_bounds_image` under unnecessarily stronger assumptions):\n- `monotone_on.is_lub_image_le`\n- `monotone_on.le_is_glb_image`\n- `antitone_on.is_lub_image_le`\n- `antitone_on.le_is_glb_image`\n- `monotone.is_lub_image_le`\n- `monotone.le_is_glb_image`\n- `antitone.is_lub_image_le`\n- `antitone.le_is_glb_image`\nRemove a redundant argument `s ⊆ t` from the following (the old theorems follow immediately from the new ones and `monotone_on.mono`):\n- `monotone_on.map_is_greatest`\n- `monotone_on.map_is_least`\n- `antitone_on.map_is_greatest`\n- `antitone_on.map_is_least`", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "theorem", "image_lower_bounds_subset_upper_bounds_image", ["antitone"]], ["mod", "theorem", "image_upper_bounds_subset_lower_bounds_image", ["antitone"]], ["del", "theorem", "is_lub_image_le", ["antitone"]], ["del", "theorem", "le_is_glb_image", ["antitone"]], ["mod", "theorem", "map_bdd_above", ["antitone"]], ["mod", "theorem", "map_bdd_below", ["antitone"]], ["mod", "theorem", "map_is_greatest", ["antitone"]], ["mod", "theorem", "map_is_least", ["antitone"]], ["mod", "theorem", "mem_lower_bounds_image", ["antitone"]], ["mod", "theorem", "mem_upper_bounds_image", ["antitone"]], ["del", "theorem", "is_lub_image_le", ["antitone_on"]], ["del", "theorem", "le_is_glb_image", ["antitone_on"]], ["mod", "theorem", "map_is_greatest", ["antitone_on"]], ["mod", "theorem", "map_is_least", ["antitone_on"]], ["mod", "theorem", "mem_lower_bounds_image", ["antitone_on"]], ["add", "theorem", "mem_lower_bounds_image_self", ["antitone_on"]], ["mod", "theorem", "mem_upper_bounds_image", ["antitone_on"]], ["add", "theorem", "mem_upper_bounds_image_self", ["antitone_on"]], ["mod", "theorem", "image_lower_bounds_subset_lower_bounds_image", ["monotone"]], ["mod", "theorem", "image_upper_bounds_subset_upper_bounds_image", ["monotone"]], ["del", "theorem", "is_lub_image_le", ["monotone"]], ["del", "theorem", "le_is_glb_image", ["monotone"]], ["mod", "theorem", "map_bdd_above", ["monotone"]], ["mod", "theorem", "map_bdd_below", ["monotone"]], ["mod", "theorem", "mem_lower_bounds_image", ["monotone"]], ["mod", "theorem", "mem_upper_bounds_image", ["monotone"]], ["mod", "theorem", "image_upper_bounds_subset_upper_bounds_image", ["monotone_on"]], ["del", "theorem", "is_lub_image_le", ["monotone_on"]], ["del", "theorem", "le_is_glb_image", ["monotone_on"]], ["mod", "theorem", "map_is_greatest", ["monotone_on"]], ["mod", "theorem", "map_is_least", ["monotone_on"]], ["add", "theorem", "mem_lower_bounds_image_self", ["monotone_on"]], ["add", "theorem", "mem_upper_bounds_image_self", ["monotone_on"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}]}, {"timestamp": 1653733526, "sha": "bb90598b", "message": "feat(set_theory/ordinal/basic): Turn various lemmas into `simp` (#14075)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "card_typein", ["ordinal"]], ["mod", "theorem", "enum_inj", ["ordinal"]], ["mod", "theorem", "enum_le_enum'", ["ordinal"]], ["mod", "theorem", "enum_le_enum", ["ordinal"]], ["mod", "theorem", "typein_inj", ["ordinal"]]]}]}, {"timestamp": 1653716091, "sha": "dccab1c9", "message": "feat(algebra/ring/basic): Generalize theorems on distributivity (#14140)\nMany theorems assuming full distributivity only need left or right distributivity. We remedy this by making new `left_distrib_class` and `right_distrib_class` classes.\nThe main motivation here is to generalize various theorems on ordinals, like [ordinal.mul_add](https://leanprover-community.github.io/mathlib_docs/set_theory/ordinal/arithmetic.html#ordinal.mul_add).", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "add_one_mul", []], ["mod", "theorem", "bit0_eq_two_mul", []], ["mod", "theorem", "distrib_three_right", []], ["mod", "theorem", "dvd_add", []], ["mod", "theorem", "left_distrib", []], ["mod", "theorem", "mul_add_one", []], ["mod", "theorem", "mul_one_add", []], ["mod", "theorem", "mul_two", []], ["mod", "theorem", "one_add_mul", []], ["mod", "theorem", "one_add_one_eq_two", []], ["mod", "theorem", "right_distrib", []], ["mod", "theorem", "two_mul", []]]}, {"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime/lemmas.lean", "newPath": "src/ring_theory/coprime/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}]}, {"timestamp": 1653710603, "sha": "15b7e536", "message": "refactor(set_theory/cardinal/*): `cardinal.succ` → `order.succ` (#14273)", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["del", "theorem", "le_of_lt_succ", ["cardinal"]], ["del", "theorem", "le_succ", ["cardinal"]], ["del", "theorem", "lt_succ", ["cardinal"]], ["del", "theorem", "lt_succ_iff", ["cardinal"]], ["mod", "theorem", "powerlt_succ", ["cardinal"]], ["del", "def", "succ", ["cardinal"]], ["add", "theorem", "succ_def", ["cardinal"]], ["del", "theorem", "succ_le_iff", ["cardinal"]], ["del", "theorem", "succ_le_of_lt", ["cardinal"]], ["del", "theorem", "succ_nonempty", ["cardinal"]], ["mod", "theorem", "succ_pos", ["cardinal"]], ["mod", "theorem", "succ_zero", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "theorem", "is_regular_aleph_succ", ["cardinal"]], ["mod", "theorem", "cof_le", ["order"]]]}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["mod", "theorem", "aleph'_succ", ["cardinal"]], ["mod", "theorem", "aleph_succ", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "bmex_lt_ord_succ_card", ["ordinal"]], ["mod", "theorem", "mex_lt_ord_succ_mk", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "lt_ord_succ_card", ["cardinal"]]]}]}, {"timestamp": 1653698634, "sha": "5eb68b5c", "message": "feat(data/polynomial/mirror): `nat_degree` and `nat_trailing_degree` of `p * p.mirror` (#14397)\nThis PR adds lemmas for the `nat_degree` and `nat_trailing_degree` of `p * p.mirror`. These lemmas tell you that you can recover `p.nat_degree` and `p.nat_trailing_degree` from `p * p.mirror`, which will be useful for irreducibility of x^n-x-1.", "changes": [{"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["add", "theorem", "nat_degree_mul_mirror", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_mul_mirror", ["polynomial"]]]}]}, {"timestamp": 1653693969, "sha": "a08d1797", "message": "refactor(set_theory/ordinal/*): `ordinal.succ` → `order.succ` (#14243)\nWe inline the definition of `ordinal.succ` in the `succ_order` instance. This allows us to comfortably use all of the theorems about `order.succ` to our advantage.", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "theorem", "is_regular_aleph'_succ", ["cardinal"]], ["mod", "theorem", "is_regular_aleph_succ", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["mod", "theorem", "aleph'_succ", ["cardinal"]], ["mod", "theorem", "aleph_succ", ["cardinal"]]]}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "blsub_const", ["ordinal"]], ["mod", "theorem", "blsub_le_bsup_succ", ["ordinal"]], ["mod", "theorem", "blsub_one", ["ordinal"]], ["mod", "theorem", "bsup_id_limit", ["ordinal"]], ["mod", "theorem", "eq_iff_zero_and_succ", ["ordinal", "is_normal"]], ["mod", "def", "lsub", ["ordinal"]], ["mod", "theorem", "lsub_const", ["ordinal"]], ["mod", "theorem", "lsub_unique", ["ordinal"]], ["mod", "theorem", "mul_add_one", ["ordinal"]], ["mod", "theorem", "mul_one_add", ["ordinal"]], ["mod", "theorem", "mul_succ", ["ordinal"]], ["del", "theorem", "succ_inj", ["ordinal"]], ["del", "theorem", "succ_le_succ", ["ordinal"]], ["mod", "theorem", "succ_lt_of_is_limit", ["ordinal"]], ["mod", "theorem", "succ_lt_of_not_succ", ["ordinal"]], ["del", "theorem", "succ_lt_succ", ["ordinal"]], ["mod", "theorem", "succ_one", ["ordinal"]], ["mod", "theorem", "succ_zero", ["ordinal"]], ["mod", "theorem", "sup_eq_lsub", ["ordinal"]], ["mod", "theorem", "sup_succ_eq_lsub", ["ordinal"]], ["mod", "theorem", "sup_succ_le_lsub", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "add_one_eq_succ", ["ordinal"]], ["mod", "theorem", "le_enum_succ", ["ordinal"]], ["del", "theorem", "lt_succ", ["ordinal"]], ["del", "theorem", "lt_succ_self", ["ordinal"]], ["del", "def", "succ", ["ordinal"]], ["del", "theorem", "succ_eq_add_one", ["ordinal"]], ["del", "theorem", "succ_le", ["ordinal"]], ["del", "theorem", "succ_ne_self", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/fixed_point.lean", "newPath": "src/set_theory/ordinal/fixed_point.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/topology.lean", "newPath": "src/set_theory/ordinal/topology.lean", "changes": []}]}, {"timestamp": 1653686428, "sha": "99195395", "message": "feat(category_theory): more API for isomorphisms (#14420)", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "comp_inv_eq_id", ["category_theory"]], ["add", "theorem", "inv_comp_eq_id", ["category_theory"]], ["add", "theorem", "is_iso_of_comp_hom_eq_id", ["category_theory"]], ["add", "theorem", "is_iso_of_hom_comp_eq_id", ["category_theory"]], ["add", "theorem", "comp_inv_eq_id", ["category_theory", "iso"]], ["add", "theorem", "inv_comp_eq_id", ["category_theory", "iso"]]]}]}, {"timestamp": 1653686427, "sha": "533cbf45", "message": "feat(data/int/{cast, char_zero}): relax typeclass assumptions (#14413)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["mod", "theorem", "cast_bit0", ["int"]], ["mod", "theorem", "cast_bit1", ["int"]], ["mod", "theorem", "cast_comm", ["int"]], ["mod", "theorem", "cast_commute", ["int"]], ["mod", "theorem", "cast_four", ["int"]], ["mod", "theorem", "cast_mul", ["int"]], ["mod", "def", "cast_ring_hom", ["int"]], ["mod", "theorem", "cast_three", ["int"]], ["mod", "theorem", "cast_two", ["int"]], ["mod", "theorem", "coe_cast_ring_hom", ["int"]], ["mod", "theorem", "commute_cast", ["int"]], ["mod", "theorem", "ext_int", ["ring_hom"]]]}, {"oldPath": "src/data/int/char_zero.lean", "newPath": "src/data/int/char_zero.lean", "changes": [["mod", "theorem", "injective_int", ["ring_hom"]]]}]}, {"timestamp": 1653679234, "sha": "f598e581", "message": "feat(topology/vector_bundle): do not require topology on the fibers for topological_vector_prebundle (#14377)\n* Separated from branch `vb-hom`", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "def", "fiber_topology", ["topological_vector_prebundle"]], ["add", "theorem", "inducing_total_space_mk", ["topological_vector_prebundle"]], ["del", "theorem", "inducing_total_space_mk_of_inducing_comp", ["topological_vector_prebundle"]]]}]}, {"timestamp": 1653679233, "sha": "a94ae0ca", "message": "feat(data/list/min_max): add le_max_of_le, min_le_of_le (#14340)", "changes": [{"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": [["add", "theorem", "le_max_of_le", ["list"]], ["add", "theorem", "min_le_of_le", ["list"]]]}]}, {"timestamp": 1653679232, "sha": "41ca6015", "message": "feat(analysis/convolution): The convolution of two functions (#13540)\n* Define the convolution of two functions.\n* Prove that when one of the functions has compact support and is `C^n` and the other function is locally integrable, the convolution is `C^n`.\n* Compute the total derivative of the convolution (when one of the functions has compact support).\n* Prove that when taking the convolution with functions that \"tend to the Dirac delta function\", the convolution tends to the original function.\n* From the sphere eversion project.", "changes": [{"oldPath": "src/analysis/convolution.lean", "newPath": "src/analysis/convolution.lean", "changes": [["add", "theorem", "continuous_convolution_left_of_integrable", ["bdd_above"]], ["add", "theorem", "continuous_convolution_right_of_integrable", ["bdd_above"]], ["add", "theorem", "convolution_eq_right", ["cont_diff_bump_of_inner"]], ["add", "theorem", "convolution_tendsto_right'", ["cont_diff_bump_of_inner"]], ["add", "theorem", "convolution_tendsto_right", ["cont_diff_bump_of_inner"]], ["add", "theorem", "dist_normed_convolution_le", ["cont_diff_bump_of_inner"]], ["add", "theorem", "normed_convolution_eq_right", ["cont_diff_bump_of_inner"]], ["add", "theorem", "convolution_assoc", []], ["add", "theorem", "convolution_congr", []], ["add", "theorem", "convolution_def", []], ["add", "theorem", "convolution_eq_right'", []], ["add", "theorem", "convolution_eq_swap", []], ["add", "theorem", "add_distrib", ["convolution_exists"]], ["add", "theorem", "distrib_add", ["convolution_exists"]], ["add", "theorem", "add_distrib", ["convolution_exists_at"]], ["add", "theorem", "distrib_add", ["convolution_exists_at"]], ["add", "theorem", "convolution_flip", []], ["add", "theorem", "convolution_lmul", []], ["add", "theorem", "convolution_lmul_swap", []], ["add", "theorem", "convolution_lsmul", []], ["add", "theorem", "convolution_lsmul_swap", []], ["add", "theorem", "convolution_precompR_apply", []], ["add", "theorem", "convolution_smul", []], ["add", "theorem", "convolution_tendsto_right", []], ["add", "theorem", "convolution_zero", []], ["add", "theorem", "dist_convolution_le'", []], ["add", "theorem", "dist_convolution_le", []], ["add", "theorem", "cont_diff_convolution_left", ["has_compact_support"]], ["add", "theorem", "cont_diff_convolution_right", ["has_compact_support"]], ["add", "theorem", "continuous_convolution_left", ["has_compact_support"]], ["add", "theorem", "continuous_convolution_left_of_integrable", ["has_compact_support"]], ["add", "theorem", "continuous_convolution_right", ["has_compact_support"]], ["add", "theorem", "continuous_convolution_right_of_integrable", ["has_compact_support"]], ["add", "theorem", "convolution", ["has_compact_support"]], ["add", "theorem", "has_deriv_at_convolution_left", ["has_compact_support"]], ["add", "theorem", "has_deriv_at_convolution_right", ["has_compact_support"]], ["add", "theorem", "has_fderiv_at_convolution_left", ["has_compact_support"]], ["add", "theorem", "has_fderiv_at_convolution_right", ["has_compact_support"]], ["add", "theorem", "integrable_convolution", ["measure_theory", "integrable"]], ["add", "theorem", "smul_convolution", []], ["add", "theorem", "support_convolution_subset", []], ["add", "theorem", "support_convolution_subset_swap", []], ["add", "theorem", "zero_convolution", []]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}]}, {"timestamp": 1653679231, "sha": "baad0026", "message": "feat(analysis/complex/phragmen_lindelof): Phragmen-Lindelöf principle for some shapes (#13178)\nProve Phragmen-Lindelöf principle\n- in a horizontal strip;\n- in a vertical strip;\n- in a coordinate quadrant;\n- in the right half-plane (a few versions).", "changes": [{"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": [["add", "theorem", "norm_eq_norm_of_is_max_on_of_ball_subset", ["complex"]], ["del", "theorem", "norm_eq_norm_of_is_max_on_of_closed_ball_subset", ["complex"]]]}, {"oldPath": null, "newPath": "src/analysis/complex/phragmen_lindelof.lean", "changes": [["add", "theorem", "eq_on_horizontal_strip", ["phragmen_lindelof"]], ["add", "theorem", "eq_on_quadrant_I", ["phragmen_lindelof"]], ["add", "theorem", "eq_on_quadrant_II", ["phragmen_lindelof"]], ["add", "theorem", "eq_on_quadrant_III", ["phragmen_lindelof"]], ["add", "theorem", "eq_on_quadrant_IV", ["phragmen_lindelof"]], ["add", "theorem", "eq_on_right_half_plane_of_superexponential_decay", ["phragmen_lindelof"]], ["add", "theorem", "eq_on_vertical_strip", ["phragmen_lindelof"]], ["add", "theorem", "eq_zero_on_horizontal_strip", ["phragmen_lindelof"]], ["add", "theorem", "eq_zero_on_quadrant_I", ["phragmen_lindelof"]], ["add", "theorem", "eq_zero_on_quadrant_II", ["phragmen_lindelof"]], ["add", "theorem", "eq_zero_on_quadrant_III", ["phragmen_lindelof"]], ["add", "theorem", "eq_zero_on_quadrant_IV", ["phragmen_lindelof"]], ["add", "theorem", "eq_zero_on_right_half_plane_of_superexponential_decay", ["phragmen_lindelof"]], ["add", "theorem", "eq_zero_on_vertical_strip", ["phragmen_lindelof"]], ["add", "theorem", "horizontal_strip", ["phragmen_lindelof"]], ["add", "theorem", "is_O_sub_exp_exp", ["phragmen_lindelof"]], ["add", "theorem", "is_O_sub_exp_rpow", ["phragmen_lindelof"]], ["add", "theorem", "quadrant_I", ["phragmen_lindelof"]], ["add", "theorem", "quadrant_II", ["phragmen_lindelof"]], ["add", "theorem", "quadrant_III", ["phragmen_lindelof"]], ["add", "theorem", "quadrant_IV", ["phragmen_lindelof"]], ["add", "theorem", "right_half_plane_of_bounded_on_real", ["phragmen_lindelof"]], ["add", "theorem", "right_half_plane_of_tendsto_zero_on_real", ["phragmen_lindelof"]], ["add", "theorem", "vertical_strip", ["phragmen_lindelof"]]]}]}, {"timestamp": 1653673279, "sha": "1ccb7f04", "message": "feat(model_theory/syntax, semantics): Lemmas about relabeling variables (#14225)\nProves lemmas about relabeling variables in terms and formulas\nDefines `first_order.language.bounded_formula.to_formula`, which turns turns all of the extra variables of a `bounded_formula` into free variables.", "changes": [{"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": [["add", "theorem", "fin_sum_fin_equiv_symm_last", []]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "realize_to_formula", ["first_order", "language", "bounded_formula"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["mod", "def", "cast_le", ["first_order", "language", "bounded_formula"]], ["mod", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["mod", "def", "relabel_aux", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_aux_sum_inl", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_sum_inl", ["first_order", "language", "bounded_formula"]], ["add", "def", "to_formula", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "relabel_id", ["first_order", "language", "term"]], ["add", "theorem", "relabel_relabel", ["first_order", "language", "term"]]]}]}, {"timestamp": 1653670953, "sha": "4b9e57b1", "message": "feat(model_theory/satisfiability): Upward Löwenheim–Skolem (#13982)\n`first_order.language.Theory.exists_elementary_embedding_card_eq` proves the Upward Löwenheim–Skolem Theorem: every infinite `L`-structure `M` elementarily embeds into an `L`-structure of a given cardinality if that cardinality is larger than the cardinalities of `L` and `M`.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "theorem", "exists_elementary_embedding_card_eq", ["first_order", "language", "Theory"]]]}, {"oldPath": "src/model_theory/skolem.lean", "newPath": "src/model_theory/skolem.lean", "changes": [["mod", "theorem", "exists_elementary_substructure_card_eq", ["first_order", "language"]]]}]}, {"timestamp": 1653641596, "sha": "25f75c4e", "message": "chore(filter/pointwise): protect filter.has_involutive_inv (#14398)", "changes": [{"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["del", "def", "has_involutive_inv", ["filter"]]]}]}, {"timestamp": 1653638680, "sha": "2a9b0f85", "message": "chore(ring_theory/artinian): clarify left/right -ness in doc strings (#14396)", "changes": [{"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}]}, {"timestamp": 1653628349, "sha": "841aef25", "message": "feat(algebraic_topology): the nerve of a category (#14304)", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/nerve.lean", "changes": [["add", "def", "nerve", ["category_theory"]], ["add", "def", "nerve_functor", ["category_theory"]]]}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["add", "def", "to_Cat", ["simplex_category"]]]}]}, {"timestamp": 1653625555, "sha": "bae02292", "message": "feat(category_theory/monoidal/subcategory): full monoidal subcategories (#14311)\nWe use a type synonym for `{X : C // P X}` when `C` is a monoidal category and the property `P` is closed under the monoidal unit and tensor product so that `full_monoidal_subcategory` can be made an instance.", "changes": [{"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["del", "def", "full_monoidal_subcategory", ["category_theory", "monoidal_category"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/subcategory.lean", "changes": [["add", "def", "map", ["category_theory", "monoidal_category", "full_braided_subcategory"]], ["add", "def", "full_braided_subcategory_inclusion", ["category_theory", "monoidal_category"]], ["add", "def", "map", ["category_theory", "monoidal_category", "full_monoidal_subcategory"]], ["add", "def", "full_monoidal_subcategory_inclusion", ["category_theory", "monoidal_category"]]]}]}, {"timestamp": 1653616949, "sha": "48d831a4", "message": "feat(order/bounded_order): define `with_bot.map` and `with_top.map` (#14163)\nAlso define `monotone.with_bot` etc.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "option_map", ["function", "embedding"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "def", "map", ["with_bot"]], ["mod", "theorem", "map_bot", ["with_bot"]], ["mod", "theorem", "map_coe", ["with_bot"]], ["add", "def", "map", ["with_top"]], ["mod", "theorem", "map_coe", ["with_top"]], ["mod", "theorem", "map_top", ["with_top"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}]}, {"timestamp": 1653603191, "sha": "8dd4619b", "message": "feat(combinatorics/simple_graph/connectivity): deleting edges outside a walk (#14110)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "to_delete_edges", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "map_is_path_iff_of_injective", ["simple_graph", "walk"]], ["add", "theorem", "map_to_delete_edges_eq", ["simple_graph", "walk"]], ["add", "def", "to_delete_edge", ["simple_graph", "walk"]], ["add", "def", "to_delete_edges", ["simple_graph", "walk"]]]}]}, {"timestamp": 1653596747, "sha": "27791f97", "message": "feat(data/real/nnreal): add mul csupr/cinfi lemmas (#13936)", "changes": [{"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["add", "theorem", "div_le_div_left₀", []], ["add", "theorem", "mul_le_mul_left₀", []], ["add", "def", "mul_left₀'", ["order_iso"]], ["add", "theorem", "mul_left₀'_symm", ["order_iso"]], ["add", "def", "mul_right₀'", ["order_iso"]], ["add", "theorem", "mul_right₀'_symm", ["order_iso"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "infi_of_not_bdd_below", ["real"]], ["add", "theorem", "supr_of_not_bdd_above", ["real"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "Sup_of_not_bdd_above", ["nnreal"]], ["add", "theorem", "infi_const_zero", ["nnreal"]], ["add", "theorem", "infi_empty", ["nnreal"]], ["add", "theorem", "infi_mul", ["nnreal"]], ["add", "theorem", "le_infi_mul", ["nnreal"]], ["add", "theorem", "le_infi_mul_infi", ["nnreal"]], ["add", "theorem", "le_mul_infi", ["nnreal"]], ["add", "theorem", "le_to_nnreal_of_coe_le", ["nnreal"]], ["add", "theorem", "mul_infi", ["nnreal"]], ["add", "theorem", "mul_supr", ["nnreal"]], ["add", "theorem", "mul_supr_le", ["nnreal"]], ["add", "theorem", "supr_div", ["nnreal"]], ["add", "theorem", "supr_mul", ["nnreal"]], ["add", "theorem", "supr_mul_le", ["nnreal"]], ["add", "theorem", "supr_mul_supr_le", ["nnreal"]], ["add", "theorem", "supr_of_not_bdd_above", ["nnreal"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "inv_range", ["set"]], ["add", "theorem", "smul_set_range", ["set"]]]}]}, {"timestamp": 1653589025, "sha": "525cc652", "message": "feat(order/rel_classes): Reflexive relation from irreflexive and viceversa (#13411)", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}]}, {"timestamp": 1653578207, "sha": "b2973b12", "message": "feat(logic/function/basic): add `function.const_injective` (#14388)\nAdd `function.const_injective` and `function.const_inj`.", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "const_inj", ["function"]], ["add", "theorem", "const_injective", ["function"]]]}]}, {"timestamp": 1653578206, "sha": "d3b155bb", "message": "chore(data/stream/defs): add spaces around infix operators (#14386)", "changes": [{"oldPath": "src/data/stream/defs.lean", "newPath": "src/data/stream/defs.lean", "changes": []}]}, {"timestamp": 1653578204, "sha": "034cf668", "message": "chore(set_theory/ordinal/topology): add `variables` block (#14369)\nWe rename a bunch of variables, but don't fundamentally change any proof.", "changes": [{"oldPath": "src/set_theory/ordinal/topology.lean", "newPath": "src/set_theory/ordinal/topology.lean", "changes": [["mod", "theorem", "enum_ord_is_normal_iff_is_closed", ["ordinal"]], ["mod", "theorem", "is_closed_iff_bsup", ["ordinal"]], ["mod", "theorem", "is_closed_iff_sup", ["ordinal"]], ["mod", "theorem", "is_limit_of_mem_frontier", ["ordinal"]], ["mod", "theorem", "is_open_iff", ["ordinal"]], ["mod", "theorem", "is_open_singleton_iff", ["ordinal"]], ["mod", "theorem", "mem_closed_iff_bsup", ["ordinal"]], ["mod", "theorem", "mem_closed_iff_sup", ["ordinal"]], ["mod", "theorem", "mem_closure_iff_bsup", ["ordinal"]], ["mod", "theorem", "mem_closure_iff_sup", ["ordinal"]]]}]}, {"timestamp": 1653578199, "sha": "be34b950", "message": "feat(topology/separation): split some proofs (#14337)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "minimal_nonempty_closed_subsingleton", []], ["add", "theorem", "minimal_nonempty_open_subsingleton", []]]}]}, {"timestamp": 1653573396, "sha": "70e784d0", "message": "feat(data/polynomial/*): `(p * q).trailing_degree = p.trailing_degree + q.trailing_degree` (#14384)\nWe already had a `nat_trailing_degree_mul` lemma, but this PR does things properly, following the analogous results for `degree`. In particular, we now have some useful intermediate results that do not assume `no_zero_divisors`.", "changes": [{"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "coeff_mul_nat_trailing_degree_add_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_mul'", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_mul", ["polynomial"]], ["add", "theorem", "trailing_degree_mul'", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["del", "theorem", "nat_trailing_degree_mul", ["polynomial"]], ["add", "theorem", "trailing_degree_mul", ["polynomial"]]]}]}, {"timestamp": 1653563070, "sha": "5aeafaab", "message": "feat(algebra/order/monoid): add `le_iff_exists_mul'` (#14387)\nAdd a version of `le_iff_exists_mul'`/`le_iff_exists_add'`, versions of `le_iff_exists_mul`/`le_iff_exists_add` with multiplication on the other side.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "le_iff_exists_mul'", []]]}]}, {"timestamp": 1653557303, "sha": "acd05094", "message": "feat(order/succ_pred/interval_succ): new file (#14294)\nAdd 2 lemmas about `set.Ioc (f x) (f (order.succ x))`, where `f` is a\nmonotone function.", "changes": [{"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "Ico_succ_right_eq_insert_of_not_is_max", ["order"]], ["add", "theorem", "Iio_succ_eq_insert_of_not_is_max", ["order"]], ["add", "theorem", "Ioo_succ_right_eq_insert_of_not_is_max", ["order"]]]}, {"oldPath": null, "newPath": "src/order/succ_pred/interval_succ.lean", "changes": [["add", "theorem", "pairwise_disjoint_on_Ico_pred", ["antitone"]], ["add", "theorem", "pairwise_disjoint_on_Ico_succ", ["antitone"]], ["add", "theorem", "pairwise_disjoint_on_Ioc_pred", ["antitone"]], ["add", "theorem", "pairwise_disjoint_on_Ioc_succ", ["antitone"]], ["add", "theorem", "pairwise_disjoint_on_Ioo_pred", ["antitone"]], ["add", "theorem", "pairwise_disjoint_on_Ioo_succ", ["antitone"]], ["add", "theorem", "bUnion_Ico_Ioc_map_succ", ["monotone"]], ["add", "theorem", "pairwise_disjoint_on_Ico_pred", ["monotone"]], ["add", "theorem", "pairwise_disjoint_on_Ico_succ", ["monotone"]], ["add", "theorem", "pairwise_disjoint_on_Ioc_pred", ["monotone"]], ["add", "theorem", "pairwise_disjoint_on_Ioc_succ", ["monotone"]], ["add", "theorem", "pairwise_disjoint_on_Ioo_pred", ["monotone"]], ["add", "theorem", "pairwise_disjoint_on_Ioo_succ", ["monotone"]]]}]}, {"timestamp": 1653544589, "sha": "4bf1b02f", "message": "feat(category_theory/limits): products give pullback squares (#14327)\nFollow-up to #14220", "changes": [{"oldPath": "src/category_theory/limits/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": [["add", "theorem", "of_has_binary_product'", ["category_theory", "is_pullback"]], ["add", "theorem", "of_has_binary_product", ["category_theory", "is_pullback"]], ["add", "theorem", "of_is_product", ["category_theory", "is_pullback"]], ["add", "theorem", "of_has_binary_coproduct'", ["category_theory", "is_pushout"]], ["add", "theorem", "of_has_binary_coproduct", ["category_theory", "is_pushout"]], ["add", "theorem", "of_is_coproduct", ["category_theory", "is_pushout"]]]}]}, {"timestamp": 1653531640, "sha": "634bef9f", "message": "feat(topology/continuous_function/stone_weierstrass): generalize the complex Stone-Weierstrass theorem to is_R_or_C fields (#14374)\nThis PR generalizes the complex Stone-Weierstrass theorem to hold for an `is_R_or_C` field.", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "continuous_abs", ["is_R_or_C"]], ["add", "theorem", "continuous_norm_sq", ["is_R_or_C"]]]}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": [["mod", "def", "conj_invariant_subalgebra", ["continuous_map"]], ["mod", "theorem", "mem_conj_invariant_subalgebra", ["continuous_map"]], ["del", "theorem", "subalgebra_complex_topological_closure_eq_top_of_separates_points", ["continuous_map"]], ["add", "theorem", "subalgebra_is_R_or_C_topological_closure_eq_top_of_separates_points", ["continuous_map"]], ["del", "theorem", "complex_to_real", ["subalgebra", "separates_points"]], ["add", "theorem", "is_R_or_C_to_real", ["subalgebra", "separates_points"]]]}]}, {"timestamp": 1653511247, "sha": "c5b3de8d", "message": "refactor(data/polynomial/*): Make `support_C_mul_X_pow` match `support_monomial` (#14119)\nThis PR makes `support_C_mul_X_pow` match `support_monomial`.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "support_C_mul_X_pow'", ["polynomial"]], ["add", "theorem", "support_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "support_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["del", "theorem", "support_C_mul_X_pow'", ["polynomial"]], ["del", "theorem", "support_mul_X_pow", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["del", "theorem", "support_C_mul_X_pow", ["polynomial"]], ["del", "theorem", "support_C_mul_X_pow_nonzero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}]}, {"timestamp": 1653505730, "sha": "dc0fadda", "message": "feat(linear_algebra/prod): define the graph of a linear map (#14266)", "changes": [{"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "def", "graph", ["linear_map"]], ["add", "theorem", "graph_eq_ker_coprod", ["linear_map"]], ["add", "theorem", "graph_eq_range_prod", ["linear_map"]], ["add", "theorem", "mem_graph_iff", ["linear_map"]]]}]}, {"timestamp": 1653505729, "sha": "fae32b6e", "message": "refactor(analysis/normed_space/M_structure): generalize to arbitrary faithful actions (#14222)\nThis follows up from a comment in review of #12173\nThe motivation here is to allow `X →L[𝕜] X`, `X →+ X`, and other weaker or stronger endomorphisms to also be used\nThis also tides up a few proof names and some poorly-rendering LaTeX", "changes": [{"oldPath": "src/analysis/normed_space/M_structure.lean", "newPath": "src/analysis/normed_space/M_structure.lean", "changes": [["mod", "theorem", "Lcomplement", ["is_Lprojection"]], ["mod", "theorem", "Lcomplement_iff", ["is_Lprojection"]], ["mod", "theorem", "coe_bot", ["is_Lprojection"]], ["mod", "theorem", "coe_compl", ["is_Lprojection"]], ["mod", "theorem", "coe_inf", ["is_Lprojection"]], ["mod", "theorem", "coe_one", ["is_Lprojection"]], ["mod", "theorem", "coe_sdiff", ["is_Lprojection"]], ["mod", "theorem", "coe_sup", ["is_Lprojection"]], ["mod", "theorem", "coe_top", ["is_Lprojection"]], ["mod", "theorem", "coe_zero", ["is_Lprojection"]], ["mod", "theorem", "commute", ["is_Lprojection"]], ["add", "theorem", "compl_mul", ["is_Lprojection"]], ["del", "theorem", "compl_mul_left", ["is_Lprojection"]], ["del", "theorem", "compl_orthog", ["is_Lprojection"]], ["mod", "theorem", "distrib_lattice_lemma", ["is_Lprojection"]], ["mod", "theorem", "join", ["is_Lprojection"]], ["mod", "theorem", "le_def", ["is_Lprojection"]], ["mod", "theorem", "mul", ["is_Lprojection"]], ["add", "theorem", "mul_compl_self", ["is_Lprojection"]], ["mod", "structure", "is_Lprojection", []], ["mod", "structure", "is_Mprojection", []]]}]}, {"timestamp": 1653500024, "sha": "189e5d13", "message": "feat(data/polynomial/degree/trailing_degree): The trailing degree of a product is at least the sum of the trailing degrees (#14253)\nThis PR adds lemmas for `nat_trailing_degree` analogous to `degree_mul_le` and `nat_degree_mul_le`.", "changes": [{"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "le_nat_trailing_degree_mul", ["polynomial"]], ["add", "theorem", "le_trailing_degree_mul", ["polynomial"]]]}]}, {"timestamp": 1653488468, "sha": "7e1c1263", "message": "move(group_theory/perm/cycle/*): A cycle folder (#14285)\nMove:\n* `group_theory.perm.cycles` → `group_theory.perm.cycle.basic`\n* `group_theory.perm.cycle_type` → `group_theory.perm.cycle.type`\n* `group_theory.perm.concrete_cycle` → `group_theory.perm.cycle.concrete`", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycle/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/cycle/concrete.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle/type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}]}, {"timestamp": 1653474486, "sha": "ba1c3f36", "message": "feat(data/int/log): integer logarithms of linearly ordered fields (#13913)\nNotably, this provides a way to find the position of the most significant digit of a decimal expansion", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "ceil_one", ["int"]], ["add", "theorem", "ceil_one", ["nat"]], ["add", "theorem", "floor_le_one_of_le_one", ["nat"]], ["add", "theorem", "floor_lt_one", ["nat"]], ["add", "theorem", "lt_one_of_floor_lt_one", ["nat"]]]}, {"oldPath": "src/analysis/special_functions/log/base.lean", "newPath": "src/analysis/special_functions/log/base.lean", "changes": [["add", "theorem", "ceil_logb_nat_cast", ["real"]], ["add", "theorem", "floor_logb_nat_cast", ["real"]]]}, {"oldPath": null, "newPath": "src/data/int/log.lean", "changes": [["add", "def", "clog", ["int"]], ["add", "theorem", "clog_inv", ["int"]], ["add", "theorem", "clog_mono_right", ["int"]], ["add", "theorem", "clog_nat_cast", ["int"]], ["add", "theorem", "clog_of_left_le_one", ["int"]], ["add", "theorem", "clog_of_one_le_right", ["int"]], ["add", "theorem", "clog_of_right_le_one", ["int"]], ["add", "theorem", "clog_of_right_le_zero", ["int"]], ["add", "theorem", "clog_one_right", ["int"]], ["add", "theorem", "clog_zero_right", ["int"]], ["add", "theorem", "clog_zpow", ["int"]], ["add", "def", "clog_zpow_gi", ["int"]], ["add", "theorem", "le_zpow_iff_clog_le", ["int"]], ["add", "def", "log", ["int"]], ["add", "theorem", "log_inv", ["int"]], ["add", "theorem", "log_mono_right", ["int"]], ["add", "theorem", "log_nat_cast", ["int"]], ["add", "theorem", "log_of_left_le_one", ["int"]], ["add", "theorem", "log_of_one_le_right", ["int"]], ["add", "theorem", "log_of_right_le_one", ["int"]], ["add", "theorem", "log_of_right_le_zero", ["int"]], ["add", "theorem", "log_one_right", ["int"]], ["add", "theorem", "log_zero_right", ["int"]], ["add", "theorem", "log_zpow", ["int"]], ["add", "theorem", "lt_zpow_iff_log_lt", ["int"]], ["add", "theorem", "lt_zpow_succ_log_self", ["int"]], ["add", "theorem", "neg_clog_inv_eq_log", ["int"]], ["add", "theorem", "neg_log_inv_eq_clog", ["int"]], ["add", "theorem", "self_le_zpow_clog", ["int"]], ["add", "theorem", "zpow_le_iff_le_log", ["int"]], ["add", "def", "zpow_log_gi", ["int"]], ["add", "theorem", "zpow_log_le_self", ["int"]], ["add", "theorem", "zpow_lt_iff_lt_clog", ["int"]], ["add", "theorem", "zpow_pred_clog_lt_self", ["int"]]]}]}, {"timestamp": 1653472096, "sha": "f8d5c649", "message": "feat(topology/vector_bundle): use trivialization.symm to simplify the product of vector bundles (#14361)", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["mod", "def", "linear_equiv_at", ["topological_vector_bundle", "pretrivialization"]], ["mod", "def", "continuous_linear_equiv_at", ["topological_vector_bundle", "trivialization"]], ["del", "theorem", "continuous_linear_equiv_at_apply", ["topological_vector_bundle", "trivialization"]], ["del", "theorem", "inv_fun'_apply", ["topological_vector_bundle", "trivialization", "prod"]], ["mod", "theorem", "prod_symm_apply", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1653469161, "sha": "660918bb", "message": "feat(measure_theory/function/conditional_expectation): Conditional expectation of an indicator (#14058)\nThe main lemma is this:\n```lean\nlemma condexp_indicator (hf_int : integrable f μ) (hs : measurable_set[m] s) :\n μ[s.indicator f | m] =ᵐ[μ] s.indicator (μ[f | m])\n```\nWe also use it to prove that if two sigma algebras are \"equal under an event\", then the conditional expectations with respect to those two sigma algebras are equal under the same event.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "ae_strongly_measurable'_of_measurable_space_le_on", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "condexp_L1_congr_ae", ["measure_theory"]], ["add", "theorem", "condexp_ae_eq_restrict_of_measurable_space_eq_on", ["measure_theory"]], ["add", "theorem", "condexp_ae_eq_restrict_zero", ["measure_theory"]], ["add", "theorem", "condexp_congr_ae", ["measure_theory"]], ["add", "theorem", "condexp_indicator", ["measure_theory"]], ["add", "theorem", "condexp_indicator_aux", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "strongly_measurable_in_set", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "strongly_measurable_of_measurable_space_le_on", ["measure_theory", "strongly_measurable"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_eq_restrict_iff_indicator_ae_eq", []], ["add", "theorem", "indicator_ae_eq_of_restrict_compl_ae_eq_zero", []], ["add", "theorem", "indicator_ae_eq_zero_of_restrict_ae_eq_zero", []]]}]}, {"timestamp": 1653462103, "sha": "5da37314", "message": "feat(measure_theory/integral): add formulas for average over an interval (#14132)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/integral/interval_average.lean", "changes": [["add", "theorem", "interval_average_eq", []], ["add", "theorem", "interval_average_eq_div", []], ["add", "theorem", "interval_average_symm", []]]}]}, {"timestamp": 1653444278, "sha": "c1e21212", "message": "feat(data/set/finite): set priority for fintype_insert' and document (#14363)\nThis follows up with some review comments for #14136.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}]}, {"timestamp": 1653437921, "sha": "f5822984", "message": "feat(group_theory/subgroup/basic): `zpowers_eq_bot` (#14366)\nThis PR adds a lemma `zpowers_eq_bot`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "zpowers_eq_bot", ["subgroup"]]]}]}, {"timestamp": 1653422219, "sha": "ebb52066", "message": "chore(set_theory/surreal/basic): clarify some proofs (#14356)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}]}, {"timestamp": 1653422218, "sha": "cdaa6d2b", "message": "refactor(analysis/normed_space/pi_Lp): golf some instances (#14339)\n* drop `pi_Lp.emetric_aux`;\n* use `T₀` to get `(e)metric_space` from `pseudo_(e)metric_space`;\n* restate `pi_Lp.(anti)lipschitz_with_equiv` with correct `pseudo_emetric_space` instances; while they're defeq, it's better not to leak auxiliary instances unless necessary.", "changes": [{"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["mod", "theorem", "antilipschitz_with_equiv", ["pi_Lp"]], ["add", "theorem", "antilipschitz_with_equiv_aux", ["pi_Lp"]], ["mod", "theorem", "edist_eq", ["pi_Lp"]], ["del", "def", "emetric_aux", ["pi_Lp"]], ["mod", "theorem", "lipschitz_with_equiv", ["pi_Lp"]], ["add", "theorem", "lipschitz_with_equiv_aux", ["pi_Lp"]]]}]}, {"timestamp": 1653418922, "sha": "23f30a30", "message": "fix(topology/vector_bundle): squeeze simp, remove non-terminal simp (#14357)\nFor some reason I had to mention `trivialization.coe_coe` explicitly, even though it is in `mfld_simps` (maybe because another simp lemma would otherwise apply first?)", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}]}, {"timestamp": 1653410774, "sha": "88f8de36", "message": "feat(topology/local_homeomorph): define helper definition (#14360)\n* Define `homeomorph.trans_local_homeomorph` and `local_homeomorph.trans_homeomorph`. They are equal to `local_homeomorph.trans`, but with better definitional behavior for `source` and `target`.\n* Define similar operations for `local_equiv`.\n* Use this to improve the definitional behavior of [`topological_fiber_bundle.trivialization.trans_fiber_homeomorph`](https://leanprover-community.github.io/mathlib_docs/find/topological_fiber_bundle.trivialization.trans_fiber_homeomorph)\n* Also use `@[simps]` to generate a couple of extra simp-lemmas.", "changes": [{"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": [["mod", "def", "to_local_equiv", ["equiv"]], ["del", "theorem", "to_local_equiv_coe", ["equiv"]], ["del", "theorem", "to_local_equiv_source", ["equiv"]], ["del", "theorem", "to_local_equiv_symm_coe", ["equiv"]], ["del", "theorem", "to_local_equiv_target", ["equiv"]], ["add", "def", "trans_local_equiv", ["equiv"]], ["add", "theorem", "trans_local_equiv_eq_trans", ["equiv"]], ["mod", "def", "copy", ["local_equiv"]], ["mod", "def", "disjoint_union", ["local_equiv"]], ["mod", "def", "restr", ["local_equiv", "is_image"]], ["del", "theorem", "pi_coe", ["local_equiv"]], ["del", "theorem", "pi_symm", ["local_equiv"]], ["mod", "def", "piecewise", ["local_equiv"]], ["add", "def", "trans_equiv", ["local_equiv"]], ["add", "theorem", "trans_equiv_eq_trans", ["local_equiv"]]]}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "coe_symm_to_equiv", ["homeomorph"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["mod", "def", "to_local_homeomorph", ["homeomorph"]], ["del", "theorem", "to_local_homeomorph_coe_symm", ["homeomorph"]], ["add", "def", "trans_local_homeomorph", ["homeomorph"]], ["add", "theorem", "trans_local_homeomorph_eq_trans", ["homeomorph"]], ["add", "theorem", "to_local_equiv_injective", ["local_homeomorph"]], ["add", "theorem", "trans_equiv_eq_trans", ["local_homeomorph"]], ["add", "def", "trans_homeomorph", ["local_homeomorph"]]]}]}, {"timestamp": 1653410772, "sha": "483b54f1", "message": "refactor(logic/equiv/set): open set namespace (#14355)", "changes": [{"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": [["mod", "theorem", "apply_of_injective_symm", ["equiv"]], ["mod", "theorem", "range_eq_univ", ["equiv"]]]}]}, {"timestamp": 1653410771, "sha": "ec8587f4", "message": "chore(data/list/forall2): fix incorrect docstring (#14276)\nThe previous docstring was false, this corrects the definition.", "changes": [{"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}]}, {"timestamp": 1653407621, "sha": "73a61259", "message": "feat(linear_algebra/bilinear_form): generalize scalar instances, fix diamonds (#14358)\nThis fixes the zsmul and nsmul diamonds, makes sub definitionally better, and makes the scalar instance apply more generally.\nThis also adds `linear_map.comp_bilin_form`.\nThese changes bring the API more in line with `quadratic_form`.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "add_apply", ["bilin_form"]], ["add", "theorem", "coe_add", ["bilin_form"]], ["add", "def", "coe_fn_add_monoid_hom", ["bilin_form"]], ["add", "theorem", "coe_injective", ["bilin_form"]], ["add", "theorem", "coe_neg", ["bilin_form"]], ["add", "theorem", "coe_smul", ["bilin_form"]], ["add", "theorem", "coe_sub", ["bilin_form"]], ["add", "theorem", "coe_zero", ["bilin_form"]], ["mod", "theorem", "neg_apply", ["bilin_form"]], ["mod", "theorem", "smul_apply", ["bilin_form"]], ["add", "theorem", "sub_apply", ["bilin_form"]], ["mod", "theorem", "zero_apply", ["bilin_form"]], ["add", "def", "comp_bilin_form", ["linear_map"]]]}]}, {"timestamp": 1653404073, "sha": "28f7172e", "message": "refactor(algebra/direct_sum/basic): use the new polymorphic subobject API (#14341)\nThis doesn't let us deduplicate the lattice lemmas, but does eliminate the duplicate instances and definitions!\nThis merges:\n* `direct_sum.add_submonoid_is_internal`, `direct_sum.add_subgroup_is_internal`, `direct_sum.submodule_is_internal` into `direct_sum.is_internal`\n* `direct_sum.add_submonoid_coe`, `direct_sum.add_subgroup_coe` into `direct_sum.coe_add_monoid_hom`\n* `direct_sum.add_submonoid_coe_ring_hom`, `direct_sum.add_subgroup_coe_ring_hom` into `direct_sum.coe_ring_hom`\n* `add_submonoid.gsemiring`, `add_subgroup.gsemiring`, `submodule.gsemiring` into `set_like.gsemiring`\n* `add_submonoid.gcomm_semiring`, `add_subgroup.gcomm_semiring`, `submodule.gcomm_semiring` into `set_like.gcomm_semiring`\nRenames\n* `direct_sum.submodule_coe` into `direct_sum.coe_linear_map`\n* `direct_sum.submodule_coe_alg_hom` into `direct_sum.coe_alg_hom\nAnd adds:\n* `set_like.gnon_unital_non_assoc_semiring`, now that it doesn't need to be repeated three times!\nA large number of related lemmas are also renamed to match the new definition names.\nThis was what originally motivated the `set_like` typeclass; thanks to @Vierkantor for doing the subobject follow up I never got around to!", "changes": [{"oldPath": "counterexamples/direct_sum_is_internal.lean", "newPath": "counterexamples/direct_sum_is_internal.lean", "changes": [["mod", "theorem", "not_internal", ["with_sign"]]]}, {"oldPath": "counterexamples/homogeneous_prime_not_prime.lean", "newPath": "counterexamples/homogeneous_prime_not_prime.lean", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": [["del", "def", "add_subgroup_coe", ["direct_sum"]], ["del", "theorem", "add_subgroup_coe_of", ["direct_sum"]], ["del", "theorem", "to_add_submonoid", ["direct_sum", "add_subgroup_is_internal"]], ["del", "def", "add_subgroup_is_internal", ["direct_sum"]], ["del", "def", "add_submonoid_coe", ["direct_sum"]], ["del", "theorem", "add_submonoid_coe_of", ["direct_sum"]], ["del", "theorem", "supr_eq_top", ["direct_sum", "add_submonoid_is_internal"]], ["del", "def", "add_submonoid_is_internal", ["direct_sum"]], ["add", "theorem", "coe_add_monoid_hom_of", ["direct_sum"]], ["del", "theorem", "coe_of_add_subgroup_apply", ["direct_sum"]], ["del", "theorem", "coe_of_add_submonoid_apply", ["direct_sum"]], ["add", "theorem", "coe_of_apply", ["direct_sum"]], ["add", "theorem", "add_submonoid_supr_eq_top", ["direct_sum", "is_internal"]], ["add", "def", "is_internal", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "def", "coe_alg_hom", ["direct_sum"]], ["add", "theorem", "coe_alg_hom_of", ["direct_sum"]], ["add", "theorem", "coe_mul_apply", ["direct_sum"]], ["del", "theorem", "coe_mul_apply_add_subgroup", ["direct_sum"]], ["del", "theorem", "coe_mul_apply_add_submonoid", ["direct_sum"]], ["del", "theorem", "coe_mul_apply_submodule", ["direct_sum"]], ["add", "def", "coe_ring_hom", ["direct_sum"]], ["add", "theorem", "coe_ring_hom_of", ["direct_sum"]], ["del", "def", "subgroup_coe_ring_hom", ["direct_sum"]], ["del", "theorem", "subgroup_coe_ring_hom_of", ["direct_sum"]], ["del", "def", "submodule_coe_alg_hom", ["direct_sum"]], ["del", "theorem", "submodule_coe_alg_hom_of", ["direct_sum"]], ["del", "def", "submonoid_coe_ring_hom", ["direct_sum"]], ["del", "theorem", "submonoid_coe_ring_hom_of", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["del", "theorem", "independent", ["direct_sum", "add_subgroup_is_internal"]], ["del", "theorem", "independent", ["direct_sum", "add_submonoid_is_internal"]], ["add", "def", "coe_linear_map", ["direct_sum"]], ["add", "theorem", "coe_linear_map_of", ["direct_sum"]], ["del", "theorem", "coe_of_submodule_apply", ["direct_sum"]], ["add", "theorem", "add_subgroup_independent", ["direct_sum", "is_internal"]], ["add", "theorem", "add_submonoid_independent", ["direct_sum", "is_internal"]], ["add", "theorem", "collected_basis_coe", ["direct_sum", "is_internal"]], ["add", "theorem", "collected_basis_mem", ["direct_sum", "is_internal"]], ["add", "theorem", "is_compl", ["direct_sum", "is_internal"]], ["add", "theorem", "submodule_independent", ["direct_sum", "is_internal"]], ["add", "theorem", "submodule_supr_eq_top", ["direct_sum", "is_internal"]], ["add", "theorem", "is_internal_submodule_iff_independent_and_supr_eq_top", ["direct_sum"]], ["add", "theorem", "is_internal_submodule_iff_is_compl", ["direct_sum"]], ["add", "theorem", "is_internal_submodule_of_independent_of_supr_eq_top", ["direct_sum"]], ["del", "def", "submodule_coe", ["direct_sum"]], ["del", "theorem", "submodule_coe_of", ["direct_sum"]], ["del", "theorem", "collected_basis_coe", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "collected_basis_mem", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "independent", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "is_compl", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "supr_eq_top", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "to_add_subgroup", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "to_add_submonoid", ["direct_sum", "submodule_is_internal"]], ["del", "def", "submodule_is_internal", ["direct_sum"]], ["del", "theorem", "submodule_is_internal_iff_independent_and_supr_eq_top", ["direct_sum"]], ["del", "theorem", "submodule_is_internal_iff_is_compl", ["direct_sum"]], ["del", "theorem", "submodule_is_internal_of_independent_of_supr_eq_top", ["direct_sum"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": []}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": [["mod", "theorem", "is_internal", ["add_monoid_algebra", "grade"]], ["mod", "theorem", "is_internal", ["add_monoid_algebra", "grade_by"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "collected_basis_orthonormal", ["direct_sum", "is_internal"]], ["del", "theorem", "collected_basis_orthonormal", ["direct_sum", "submodule_is_internal"]]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "def", "isometry_L2_of_orthogonal_family", ["direct_sum", "is_internal"]], ["add", "theorem", "isometry_L2_of_orthogonal_family_symm_apply", ["direct_sum", "is_internal"]], ["del", "def", "isometry_L2_of_orthogonal_family", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "isometry_L2_of_orthogonal_family_symm_apply", ["direct_sum", "submodule_is_internal"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "def", "sigma_orthonormal_basis_index_equiv", ["direct_sum", "is_internal"]], ["add", "def", "subordinate_orthonormal_basis", ["direct_sum", "is_internal"]], ["add", "def", "subordinate_orthonormal_basis_index", ["direct_sum", "is_internal"]], ["add", "theorem", "subordinate_orthonormal_basis_orthonormal", ["direct_sum", "is_internal"]], ["add", "theorem", "subordinate_orthonormal_basis_subordinate", ["direct_sum", "is_internal"]], ["del", "def", "sigma_orthonormal_basis_index_equiv", ["direct_sum", "submodule_is_internal"]], ["del", "def", "subordinate_orthonormal_basis", ["direct_sum", "submodule_is_internal"]], ["del", "def", "subordinate_orthonormal_basis_index", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "subordinate_orthonormal_basis_orthonormal", ["direct_sum", "submodule_is_internal"]], ["del", "theorem", "subordinate_orthonormal_basis_subordinate", ["direct_sum", "submodule_is_internal"]], ["add", "theorem", "is_internal_iff", ["orthogonal_family"]], ["add", "theorem", "is_internal_iff_of_is_complete", ["orthogonal_family"]], ["del", "theorem", "submodule_is_internal_iff", ["orthogonal_family"]], ["del", "theorem", "submodule_is_internal_iff_of_is_complete", ["orthogonal_family"]]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["add", "theorem", "direct_sum_is_internal", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "direct_sum_submodule_is_internal", ["inner_product_space", "is_self_adjoint"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/grading.lean", "newPath": "src/linear_algebra/tensor_algebra/grading.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["del", "theorem", "is_internal", ["graded_algebra"]]]}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}]}, {"timestamp": 1653401857, "sha": "a07493af", "message": "feat(analysis/convolution): the predicate `convolution_exists` (#13541)\n* This PR defines the predicate that a convolution exists.\n* This is not that interesting by itself, but it is a preparation for #13540\n* I'm using the full module doc for the convolution file, even though not everything promised in the module doc is in this PR.\n* From the sphere eversion project", "changes": [{"oldPath": null, "newPath": "src/analysis/convolution.lean", "changes": [["add", "theorem", "convolution_exists_at'", ["bdd_above"]], ["add", "theorem", "convolution_exists_at", ["bdd_above"]], ["add", "theorem", "convolution_integrand_fst", ["continuous"]], ["add", "def", "convolution_exists", []], ["add", "theorem", "integrable", ["convolution_exists_at"]], ["add", "theorem", "integrable_swap", ["convolution_exists_at"]], ["add", "def", "convolution_exists_at", []], ["add", "theorem", "convolution_exists_at_flip", []], ["add", "theorem", "convolution_exists_at_iff_integrable_swap", []], ["add", "theorem", "convolution_exists_at", ["has_compact_support"]], ["add", "theorem", "convolution_exists_left", ["has_compact_support"]], ["add", "theorem", "convolution_exists_left_of_continuous_right", ["has_compact_support"]], ["add", "theorem", "convolution_exists_right", ["has_compact_support"]], ["add", "theorem", "convolution_exists_right_of_continuous_left", ["has_compact_support"]], ["add", "theorem", "convolution_integrand_bound_left", ["has_compact_support"]], ["add", "theorem", "convolution_integrand_bound_right", ["has_compact_support"]], ["add", "theorem", "convolution_integrand'", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "convolution_integrand", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "convolution_integrand_snd'", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "convolution_integrand_snd", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "convolution_integrand_swap_snd'", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "convolution_integrand_swap_snd", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "ae_convolution_exists", ["measure_theory", "integrable"]], ["add", "theorem", "convolution_integrand", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1653395588, "sha": "dc22d65a", "message": "doc(100.yaml): add Law of Large Numbers (#14353)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1653395587, "sha": "9d193c59", "message": "feat(category_theory/comm_sq): functors mapping pullback/pushout squares (#14351)\n```\nlemma map_is_pullback [preserves_limit (cospan h i) F] (s : is_pullback f g h i) :\n is_pullback (F.map f) (F.map g) (F.map h) (F.map i) := ...\n```", "changes": [{"oldPath": "src/category_theory/limits/shapes/comm_sq.lean", "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": [["add", "def", "cocone", ["category_theory", "comm_sq"]], ["add", "def", "cone", ["category_theory", "comm_sq"]], ["add", "theorem", "flip", ["category_theory", "comm_sq"]], ["add", "theorem", "of_arrow", ["category_theory", "comm_sq"]], ["add", "structure", "comm_sq", ["category_theory"]], ["add", "theorem", "map_comm_sq", ["category_theory", "functor"]], ["add", "theorem", "map_is_pullback", ["category_theory", "functor"]], ["add", "theorem", "map_is_pushout", ["category_theory", "functor"]], ["add", "def", "cone", ["category_theory", "is_pullback"]], ["add", "theorem", "flip", ["category_theory", "is_pullback"]], ["add", "def", "iso_pullback", ["category_theory", "is_pullback"]], ["add", "theorem", "iso_pullback_hom_fst", ["category_theory", "is_pullback"]], ["add", "theorem", "iso_pullback_hom_snd", ["category_theory", "is_pullback"]], ["add", "theorem", "iso_pullback_inv_fst", ["category_theory", "is_pullback"]], ["add", "theorem", "iso_pullback_inv_snd", ["category_theory", "is_pullback"]], ["add", "theorem", "of_bot", ["category_theory", "is_pullback"]], ["add", "theorem", "of_has_pullback", ["category_theory", "is_pullback"]], ["add", "theorem", "of_is_limit'", ["category_theory", "is_pullback"]], ["add", "theorem", "of_is_limit", ["category_theory", "is_pullback"]], ["add", "theorem", "of_iso_pullback", ["category_theory", "is_pullback"]], ["add", "theorem", "of_right", ["category_theory", "is_pullback"]], ["add", "theorem", "paste_horiz", ["category_theory", "is_pullback"]], ["add", "theorem", "paste_vert", ["category_theory", "is_pullback"]], ["add", "theorem", "zero_left", ["category_theory", "is_pullback"]], ["add", "theorem", "zero_top", ["category_theory", "is_pullback"]], ["add", "structure", "is_pullback", ["category_theory"]], ["add", "def", "cocone", ["category_theory", "is_pushout"]], ["add", "theorem", "flip", ["category_theory", "is_pushout"]], ["add", "theorem", "inl_iso_pushout_hom", ["category_theory", "is_pushout"]], ["add", "theorem", "inl_iso_pushout_inv", ["category_theory", "is_pushout"]], ["add", "theorem", "inr_iso_pushout_hom", ["category_theory", "is_pushout"]], ["add", "theorem", "inr_iso_pushout_inv", ["category_theory", "is_pushout"]], ["add", "def", "iso_pushout", ["category_theory", "is_pushout"]], ["add", "theorem", "of_bot", ["category_theory", "is_pushout"]], ["add", "theorem", "of_has_pushout", ["category_theory", "is_pushout"]], ["add", "theorem", "of_is_colimit'", ["category_theory", "is_pushout"]], ["add", "theorem", "of_is_colimit", ["category_theory", "is_pushout"]], ["add", "theorem", "of_iso_pushout", ["category_theory", "is_pushout"]], ["add", "theorem", "of_right", ["category_theory", "is_pushout"]], ["add", "theorem", "paste_horiz", ["category_theory", "is_pushout"]], ["add", "theorem", "paste_vert", ["category_theory", "is_pushout"]], ["add", "theorem", "zero_bot", ["category_theory", "is_pushout"]], ["add", "theorem", "zero_right", ["category_theory", "is_pushout"]], ["add", "structure", "is_pushout", ["category_theory"]], ["del", "theorem", "flip", ["category_theory", "limits", "comm_sq"]], ["del", "theorem", "of_arrow", ["category_theory", "limits", "comm_sq"]], ["del", "structure", "comm_sq", ["category_theory", "limits"]], ["del", "def", "cone", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "flip", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "of_bot", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "of_has_pullback", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "of_is_limit", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "of_right", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "paste_horiz", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "paste_vert", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "zero_left", ["category_theory", "limits", "is_pullback"]], ["del", "theorem", "zero_top", ["category_theory", "limits", "is_pullback"]], ["del", "structure", "is_pullback", ["category_theory", "limits"]], ["del", "def", "cocone", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "flip", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "of_bot", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "of_has_pushout", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "of_is_colimit", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "of_right", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "paste_horiz", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "paste_vert", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "zero_bot", ["category_theory", "limits", "is_pushout"]], ["del", "theorem", "zero_right", ["category_theory", "limits", "is_pushout"]], ["del", "structure", "is_pushout", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "ext", ["category_theory", "limits", "walking_cospan"]], ["add", "def", "ext", ["category_theory", "limits", "walking_span"]]]}]}, {"timestamp": 1653395586, "sha": "53a70a08", "message": "feat(linear_algebra/tensor_power): Add notation for tensor powers, and a definition of multiplication (#14196)\nThis file introduces the notation `⨂[R]^n M` for `tensor_power R n M`, which in turn is an\nabbreviation for `⨂[R] i : fin n, M`.\nThe proof that this multiplication forms a semiring will come in a later PR (#10255).", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/tensor_power.lean", "changes": [["add", "theorem", "ghas_mul_def", ["tensor_power"]], ["add", "theorem", "ghas_one_def", ["tensor_power"]], ["add", "def", "mul_equiv", ["tensor_power"]]]}]}, {"timestamp": 1653395585, "sha": "8e3deffc", "message": "feat(representation_theory/invariants): average_map is a projection onto the subspace of invariants (#14167)", "changes": [{"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["mod", "def", "cod_restrict", ["linear_map", "is_proj"]], ["mod", "theorem", "cod_restrict_apply", ["linear_map", "is_proj"]], ["mod", "theorem", "cod_restrict_apply_cod", ["linear_map", "is_proj"]], ["mod", "theorem", "cod_restrict_ker", ["linear_map", "is_proj"]], ["mod", "structure", "is_proj", ["linear_map"]], ["mod", "theorem", "is_proj_iff_idempotent", ["linear_map"]]]}, {"oldPath": "src/representation_theory/invariants.lean", "newPath": "src/representation_theory/invariants.lean", "changes": [["add", "theorem", "is_proj_average_map", ["representation"]]]}]}, {"timestamp": 1653387848, "sha": "893f4800", "message": "feat(group_theory/index): Lemmas for when `relindex` divides `index` (#14314)\nThis PR adds two lemmas for when `relindex` divides `index`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "relindex_dvd_index_of_le", ["subgroup"]], ["add", "theorem", "relindex_dvd_index_of_normal", ["subgroup"]]]}]}, {"timestamp": 1653387847, "sha": "65f1f8e2", "message": "feat(linear_algebra/quadratic_form/isometry): extract from `linear_algebra/quadratic_form/basic` (#14305)\n150 lines seems worthy of its own file, especially if this grows `fun_like` boilerplate in future.\nNo lemmas have been renamed or proofs changed.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["del", "theorem", "refl", ["quadratic_form", "equivalent"]], ["del", "theorem", "symm", ["quadratic_form", "equivalent"]], ["del", "theorem", "trans", ["quadratic_form", "equivalent"]], ["del", "def", "equivalent", ["quadratic_form"]], ["del", "theorem", "equivalent_weighted_sum_squares", ["quadratic_form"]], ["del", "theorem", "equivalent_weighted_sum_squares_units_of_nondegenerate'", ["quadratic_form"]], ["del", "theorem", "coe_to_linear_equiv", ["quadratic_form", "isometry"]], ["del", "theorem", "map_app", ["quadratic_form", "isometry"]], ["del", "def", "refl", ["quadratic_form", "isometry"]], ["del", "def", "symm", ["quadratic_form", "isometry"]], ["del", "theorem", "to_linear_equiv_eq_coe", ["quadratic_form", "isometry"]], ["del", "def", "trans", ["quadratic_form", "isometry"]], ["del", "structure", "isometry", ["quadratic_form"]], ["del", "def", "isometry_of_comp_linear_equiv", ["quadratic_form"]]]}, {"oldPath": "src/linear_algebra/quadratic_form/complex.lean", "newPath": "src/linear_algebra/quadratic_form/complex.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/quadratic_form/isometry.lean", "changes": [["add", "theorem", "refl", ["quadratic_form", "equivalent"]], ["add", "theorem", "symm", ["quadratic_form", "equivalent"]], ["add", "theorem", "trans", ["quadratic_form", "equivalent"]], ["add", "def", "equivalent", ["quadratic_form"]], ["add", "theorem", "equivalent_weighted_sum_squares", ["quadratic_form"]], ["add", "theorem", "equivalent_weighted_sum_squares_units_of_nondegenerate'", ["quadratic_form"]], ["add", "theorem", "coe_to_linear_equiv", ["quadratic_form", "isometry"]], ["add", "theorem", "map_app", ["quadratic_form", "isometry"]], ["add", "def", "refl", ["quadratic_form", "isometry"]], ["add", "def", "symm", ["quadratic_form", "isometry"]], ["add", "theorem", "to_linear_equiv_eq_coe", ["quadratic_form", "isometry"]], ["add", "def", "trans", ["quadratic_form", "isometry"]], ["add", "structure", "isometry", ["quadratic_form"]], ["add", "def", "isometry_of_comp_linear_equiv", ["quadratic_form"]]]}, {"oldPath": "src/linear_algebra/quadratic_form/prod.lean", "newPath": "src/linear_algebra/quadratic_form/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/real.lean", "newPath": "src/linear_algebra/quadratic_form/real.lean", "changes": []}]}, {"timestamp": 1653387846, "sha": "9870d138", "message": "chore(order/bounded_order): Golf `disjoint` API (#14194)\nReorder lemmas and golf.\nLemma additions:\n* `disjoint.eq_bot_of_ge`\n* `is_compl.of_dual`\n* `is_compl_to_dual_iff`\n* `is_compl_of_dual_iff`\nLemma deletions:\n* `eq_bot_of_disjoint_absorbs`: This is an unhelpful combination of `disjoint.eq_bot_of_ge` and `sup_eq_left`\n* `inf_eq_bot_iff_le_compl`: This is a worse version of `is_compl.disjoint_left_iff`\nLemma renames:\n* `is_compl.to_order_dual` → `is_compl.dual`", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "comm", ["disjoint"]], ["mod", "theorem", "eq_bot", ["disjoint"]], ["add", "theorem", "eq_bot_of_ge", ["disjoint"]], ["mod", "theorem", "eq_bot_of_le", ["disjoint"]], ["mod", "theorem", "inf_left'", ["disjoint"]], ["mod", "theorem", "inf_left", ["disjoint"]], ["mod", "theorem", "inf_right'", ["disjoint"]], ["mod", "theorem", "inf_right", ["disjoint"]], ["mod", "theorem", "left_le_of_le_sup_left", ["disjoint"]], ["mod", "theorem", "left_le_of_le_sup_right", ["disjoint"]], ["mod", "theorem", "mono", ["disjoint"]], ["mod", "theorem", "mono_left", ["disjoint"]], ["mod", "theorem", "mono_right", ["disjoint"]], ["mod", "theorem", "ne", ["disjoint"]], ["mod", "theorem", "of_disjoint_inf_of_le'", ["disjoint"]], ["mod", "theorem", "of_disjoint_inf_of_le", ["disjoint"]], ["mod", "theorem", "symm", ["disjoint"]], ["mod", "theorem", "disjoint_assoc", []], ["mod", "theorem", "disjoint_bot_left", []], ["mod", "theorem", "disjoint_bot_right", []], ["mod", "theorem", "disjoint_iff", []], ["mod", "theorem", "disjoint_self", []], ["del", "theorem", "eq_bot_of_disjoint_absorbs", []], ["mod", "theorem", "eq_bot_of_is_compl_top", []], ["mod", "theorem", "eq_bot_of_top_is_compl", []], ["mod", "theorem", "eq_top_of_bot_is_compl", []], ["mod", "theorem", "eq_top_of_is_compl_bot", []], ["del", "theorem", "inf_eq_bot_iff_le_compl", []], ["add", "theorem", "dual", ["is_compl"]], ["mod", "theorem", "left_le_iff", ["is_compl"]], ["add", "theorem", "of_dual", ["is_compl"]], ["mod", "theorem", "of_eq", ["is_compl"]], ["del", "theorem", "to_order_dual", ["is_compl"]], ["mod", "theorem", "is_compl_bot_top", []], ["add", "theorem", "is_compl_of_dual_iff", []], ["add", "theorem", "is_compl_to_dual_iff", []], ["mod", "theorem", "is_compl_top_bot", []], ["mod", "theorem", "max_bot_left", []], ["mod", "theorem", "max_bot_right", []], ["mod", "theorem", "max_top_left", []], ["mod", "theorem", "max_top_right", []], ["mod", "theorem", "min_bot_left", []], ["mod", "theorem", "min_bot_right", []], ["mod", "theorem", "min_top_left", []], ["mod", "theorem", "min_top_right", []]]}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1653380374, "sha": "533c67bc", "message": "feat(analysis/sum_integral_comparisons): Comparison lemmas between finite sums and integrals (#13179)\nIn this pull request we target the following lemmas:\n```lean\nlemma antitone_on.integral_le_sum {x₀ : ℝ} {a : ℕ} {f : ℝ → ℝ}\n (hf : antitone_on f (Icc x₀ (x₀ + a))) :\n ∫ x in x₀..(x₀ + a), f x ≤ ∑ i in finset.range a, f (x₀ + i)\nlemma antitone_on.sum_le_integral\n {x₀ : ℝ} {a : ℕ} {f : ℝ → ℝ}\n (hf : antitone_on f (Icc x₀ (x₀ + a))) :\n ∑ i in finset.range a, f (x₀ + i + 1) ≤ ∫ x in x₀..(x₀ + a), f x :=\n```\nas well as their `monotone_on` equivalents.\nThese lemmas are critical to many analytic facts, specifically because it so often is the way that error terms end up getting computed.", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "inv", ["antitone"]], ["add", "theorem", "inv", ["antitone_on"]], ["add", "theorem", "inv", ["monotone"]], ["add", "theorem", "inv", ["monotone_on"]], ["add", "theorem", "inv", ["strict_anti"]], ["add", "theorem", "inv", ["strict_anti_on"]], ["add", "theorem", "inv", ["strict_mono"]], ["add", "theorem", "inv", ["strict_mono_on"]]]}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_const_on_unit_interval", []]]}, {"oldPath": null, "newPath": "src/analysis/sum_integral_comparisons.lean", "changes": [["add", "theorem", "integral_le_sum", ["antitone_on"]], ["add", "theorem", "integral_le_sum_Ico", ["antitone_on"]], ["add", "theorem", "sum_le_integral", ["antitone_on"]], ["add", "theorem", "sum_le_integral_Ico", ["antitone_on"]], ["add", "theorem", "integral_le_sum", ["monotone_on"]], ["add", "theorem", "integral_le_sum_Ico", ["monotone_on"]], ["add", "theorem", "sum_le_integral", ["monotone_on"]], ["add", "theorem", "sum_le_integral_Ico", ["monotone_on"]]]}]}, {"timestamp": 1653376088, "sha": "93df724a", "message": "feat(measure_theory/integral/integral_eq_improper): Covering finite intervals by finite intervals (#13514)\nCurrently, the ability to prove facts about improper integrals only allows for at least one infinite endpoint. However, it is a common need to work with functions that blow up at an end point (e.g., x^r on [0, 1] for r in (-1, 0)). As a step toward allowing that, we introduce `ae_cover`s that allow exhausting finite intervals by finite intervals.\nPartially addresses: #12666", "changes": [{"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["add", "theorem", "ae_cover_Icc_of_Icc", ["measure_theory"]], ["add", "theorem", "ae_cover_Icc_of_Ico", ["measure_theory"]], ["add", "theorem", "ae_cover_Icc_of_Ioc", ["measure_theory"]], ["add", "theorem", "ae_cover_Icc_of_Ioo", ["measure_theory"]], ["add", "theorem", "ae_cover_Ico_of_Icc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ico_of_Ico", ["measure_theory"]], ["add", "theorem", "ae_cover_Ico_of_Ioc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ico_of_Ioo", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioc_of_Icc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioc_of_Ico", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioc_of_Ioc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioc_of_Ioo", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioo_of_Icc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioo_of_Ico", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioo_of_Ioc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioo_of_Ioo", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_restrict_congr_set", ["measure_theory"]], ["add", "theorem", "ae_restrict_of_ae_eq_of_ae_restrict", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "eventually_ge_nhds", []], ["add", "theorem", "eventually_gt_nhds", []], ["add", "theorem", "eventually_le_nhds", []], ["add", "theorem", "eventually_lt_nhds", []]]}]}, {"timestamp": 1653373713, "sha": "0973ad45", "message": "feat(probability/strong_law): the strong law of large numbers (#13690)\nWe prove the almost sure version of the strong law of large numbers: given an iid sequence of integrable random variables `X_i`, then `(\\sum_{i < n} X_i)/n` converges almost surely to `E(X)`. We follow Etemadi's proof, which only requires pairwise independence instead of full independence.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/probability/strong_law.lean", "changes": [["add", "theorem", "integrable_truncation", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "mem_ℒp_truncation", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "truncation", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "abs_truncation_le_abs_self", ["probability_theory"]], ["add", "theorem", "abs_truncation_le_bound", ["probability_theory"]], ["add", "theorem", "truncation", ["probability_theory", "ident_distrib"]], ["add", "theorem", "integral_truncation_eq_interval_integral", ["probability_theory"]], ["add", "theorem", "integral_truncation_eq_interval_integral_of_nonneg", ["probability_theory"]], ["add", "theorem", "integral_truncation_le_integral_of_nonneg", ["probability_theory"]], ["add", "theorem", "moment_truncation_eq_interval_integral", ["probability_theory"]], ["add", "theorem", "moment_truncation_eq_interval_integral_of_nonneg", ["probability_theory"]], ["add", "theorem", "strong_law_ae", ["probability_theory"]], ["add", "theorem", "strong_law_aux1", ["probability_theory"]], ["add", "theorem", "strong_law_aux2", ["probability_theory"]], ["add", "theorem", "strong_law_aux3", ["probability_theory"]], ["add", "theorem", "strong_law_aux4", ["probability_theory"]], ["add", "theorem", "strong_law_aux5", ["probability_theory"]], ["add", "theorem", "strong_law_aux6", ["probability_theory"]], ["add", "theorem", "strong_law_aux7", ["probability_theory"]], ["add", "theorem", "sum_prob_mem_Ioc_le", ["probability_theory"]], ["add", "theorem", "sum_variance_truncation_le", ["probability_theory"]], ["add", "theorem", "tendsto_integral_truncation", ["probability_theory"]], ["add", "def", "truncation", ["probability_theory"]], ["add", "theorem", "truncation_eq_of_nonneg", ["probability_theory"]], ["add", "theorem", "truncation_eq_self", ["probability_theory"]], ["add", "theorem", "truncation_nonneg", ["probability_theory"]], ["add", "theorem", "truncation_zero", ["probability_theory"]], ["add", "theorem", "tsum_prob_mem_Ioi_lt_top", ["probability_theory"]]]}]}, {"timestamp": 1653369550, "sha": "0d14ee8b", "message": "feat(field_theory/finite/galois_field): Finite fields are Galois (#14290)\nThis PR also generalizes a section of `field_theory/finite/basic` from `[char_p K p]` to `[algebra (zmod p) K]`. This is indeed a generalization, due to the presence of the instance `zmod.algebra`.", "changes": [{"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": [["add", "theorem", "char_p_of_injective_algebra_map'", []]]}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}]}, {"timestamp": 1653361572, "sha": "179ae9e8", "message": "feat(category_theory/preadditive): hom orthogonal families (#13871)\nA family of objects in a category with zero morphisms is \"hom orthogonal\" if the only\nmorphism between distinct objects is the zero morphism.\nWe show that in any category with zero morphisms and finite biproducts,\na morphism between biproducts drawn from a hom orthogonal family `s : ι → C`\ncan be decomposed into a block diagonal matrix with entries in the endomorphism rings of the `s i`.\nWhen the category is preadditive, this decomposition is an additive equivalence,\nand intertwines composition and matrix multiplication.\nWhen the category is `R`-linear, the decomposition is an `R`-linear equivalence.\nIf every object in the hom orthogonal family has an endomorphism ring with invariant basis number\n(e.g. if each object in the family is simple, so its endomorphism ring is a division ring,\nor otherwise if each endomorphism ring is commutative),\nthen decompositions of an object as a biproduct of the family have uniquely defined multiplicities.\nWe state this as:\n```\nlemma hom_orthogonal.equiv_of_iso (o : hom_orthogonal s) {f : α → ι} {g : β → ι}\n (i : ⨁ (λ a, s (f a)) ≅ ⨁ (λ b, s (g b))) : ∃ e : α ≃ β, ∀ a, g (e a) = f a\n```\nThis is preliminary to defining semisimple categories.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_congr_set", ["finset"]]]}, {"oldPath": "src/category_theory/linear/default.lean", "newPath": "src/category_theory/linear/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/preadditive/hom_orthogonal.lean", "changes": [["add", "theorem", "eq_zero", ["category_theory", "hom_orthogonal"]], ["add", "theorem", "equiv_of_iso", ["category_theory", "hom_orthogonal"]], ["add", "def", "matrix_decomposition", ["category_theory", "hom_orthogonal"]], ["add", "def", "matrix_decomposition_add_equiv", ["category_theory", "hom_orthogonal"]], ["add", "theorem", "matrix_decomposition_comp", ["category_theory", "hom_orthogonal"]], ["add", "theorem", "matrix_decomposition_id", ["category_theory", "hom_orthogonal"]], ["add", "def", "matrix_decomposition_linear_equiv", ["category_theory", "hom_orthogonal"]], ["add", "def", "hom_orthogonal", ["category_theory"]]]}]}, {"timestamp": 1653356931, "sha": "c340170b", "message": "chore(set_theory/ordinal/*): improve autogenerated instance names for `o.out.α` (#14342)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1653350548, "sha": "10f415ad", "message": "feat(set_theory/game/basic): mul_cases lemmas (#14343)\nThese are the multiplicative analogs for `{left/right}_moves_add_cases`.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["add", "theorem", "left_moves_mul_cases", ["pgame"]], ["add", "theorem", "right_moves_mul_cases", ["pgame"]]]}]}, {"timestamp": 1653348306, "sha": "dc363338", "message": "feat(set_theory/surreal/basic): ordinals are numeric (#14325)", "changes": [{"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "numeric_to_pgame", ["pgame"]]]}]}, {"timestamp": 1653343546, "sha": "59ef0700", "message": "feat(ring_theory/unique_factorization_domain): misc lemmas on factors (#14333)\nTwo little lemmas on the set of factors which I needed for #12287.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "dvd_of_mem_factors", ["unique_factorization_monoid"]], ["add", "theorem", "ne_zero_of_mem_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1653338067, "sha": "3f0a2bb4", "message": "feat(set_theory/cardinal/basic): Inline instances (#14130)\nWe inline some instances, thus avoiding redundant lemmas. We also clean up the code somewhat.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["mod", "theorem", "pow_cast_right", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": [["add", "theorem", "mul_eq_max_of_omega_le_right", ["cardinal"]]]}]}, {"timestamp": 1653328304, "sha": "b3ff79ae", "message": "feat(topology/uniform_space/uniform_convergence): Uniform Cauchy sequences (#14003)\nA sequence of functions `f_n` is pointwise Cauchy if `∀x ∀ε ∃N ∀(m, n) > N` we have `|f_m x - f_n x| < ε`. A sequence of functions is _uniformly_ Cauchy if `∀ε ∃N ∀(m, n) > N ∀x` we have `|f_m x - f_n x| < ε`.\nAs a sequence of functions is pointwise Cauchy if (and when the underlying space is complete, only if) the sequence converges, a sequence of functions is uniformly Cauchy if (and when the underlying space is complete, only if) the sequence uniformly converges. (Note that the parenthetical is not directly covered by this commit, but is an easy consequence of two of its lemmas.)\nThis notion is commonly used to bootstrap convergence into uniform convergence.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "uniform_cauchy_seq_on_iff", ["metric"]]]}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "uniform_cauchy_seq_on", ["tendsto_uniformly_on"]], ["add", "theorem", "tendsto_uniformly_on_of_tendsto", ["uniform_cauchy_seq_on"]], ["add", "def", "uniform_cauchy_seq_on", []]]}]}, {"timestamp": 1653322301, "sha": "dab06b6b", "message": "refactor(topology/sequences): rename some `sequential_` to `seq_` (#14318)\n## Rename\n* `sequential_closure` → `seq_closure`, similarly rename lemmas;\n* `sequentially_continuous` → `seq_continuous`, similarly rename lemmas;\n* `is_seq_closed_of_is_closed` → `is_closed.is_seq_closed`;\n* `mem_of_is_seq_closed` → `is_seq_closed.mem_of_tendsto`;\n* `continuous.to_sequentially_continuous` → `continuous.seq_continuous`;\n## Remove\n* `mem_of_is_closed_sequential`: was a weaker version of `is_closed.mem_of_tendsto`;\n## Add\n* `is_seq_closed.is_closed`;\n* `seq_continuous.continuous`;", "changes": [{"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["del", "theorem", "to_sequentially_continuous", ["continuous"]], ["add", "theorem", "continuous_iff_seq_continuous", []], ["del", "theorem", "continuous_iff_sequentially_continuous", []], ["add", "theorem", "is_seq_closed", ["is_closed"]], ["add", "theorem", "mem_of_tendsto", ["is_seq_closed"]], ["mod", "def", "is_seq_closed", []], ["del", "theorem", "is_seq_closed_of_is_closed", []], ["del", "theorem", "mem_of_is_closed_sequential", []], ["del", "theorem", "mem_of_is_seq_closed", []], ["add", "def", "seq_closure", []], ["add", "theorem", "seq_closure_subset_closure", []], ["add", "def", "seq_continuous", []], ["del", "def", "sequential_closure", []], ["del", "theorem", "sequential_closure_subset_closure", []], ["del", "def", "sequentially_continuous", []], ["add", "theorem", "subset_seq_closure", []], ["del", "theorem", "subset_sequential_closure", []]]}]}, {"timestamp": 1653322300, "sha": "bbf57768", "message": "feat(group_theory/sylow): The number of sylow subgroups is indivisible by p (#14313)\nA corollary of Sylow's third theorem is that the number of sylow subgroups is indivisible by p.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "not_dvd_card_sylow", []]]}]}, {"timestamp": 1653322299, "sha": "7a6d8505", "message": "feat(probability/stopping): measurability of comparisons of stopping times (#14061)\nAmong other related results, prove that `{x | τ x ≤ π x}` is measurable with respect to the sigma algebras generated by each of the two stopping times involved.", "changes": [{"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["add", "theorem", "measurable_set_eq_fun_of_encodable", []]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "measurable_set_eq_stopping_time", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_eq_stopping_time_of_encodable", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_inter_le_iff", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_le_stopping_time", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_min_const_iff", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_stopping_time_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_le'", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_space_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_le_of_encodable", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_min_const", ["measure_theory", "is_stopping_time"]]]}]}, {"timestamp": 1653314974, "sha": "8df8968c", "message": "feat(data/set/function): add `monotone_on.monotone` etc (#14301)", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}]}, {"timestamp": 1653314973, "sha": "33262e0c", "message": "feat(ring_theory/power_series): Added lemmas regarding rescale (#14283)\nAdded lemmas `rescale_mk`, `rescale_mul` and `rescale_rescale`.", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "rescale_mk", ["power_series"]], ["add", "theorem", "rescale_mul", ["power_series"]], ["add", "theorem", "rescale_rescale", ["power_series"]]]}]}, {"timestamp": 1653314972, "sha": "15e8bc48", "message": "feat(topology/vector_bundle): define pretrivialization.symm (#14192)\n* Also adds some other useful lemmas about (pre)trivializations\n* This splits out the part of #8545 that is unrelated to pullbacks\n- Co-authored by Nicolo Cavalleri ", "changes": [{"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": [["add", "theorem", "coe_snd", ["bundle"]], ["add", "theorem", "sigma_mk_eq_total_space_mk", ["bundle"]], ["mod", "theorem", "to_total_space_coe", ["bundle"]], ["add", "theorem", "eta", ["bundle", "total_space"]], ["add", "theorem", "mk_cast", ["bundle", "total_space"]], ["add", "theorem", "proj_mk", ["bundle", "total_space"]]]}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "theorem", "continuous_total_space_mk", ["topological_vector_bundle"]], ["add", "theorem", "apply_mk_symm", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "apply_symm_apply'", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "apply_symm_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_coe", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_coe_fst", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_fst'", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_fst", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "coe_mem_source", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "linear", ["topological_vector_bundle", "pretrivialization"]], ["add", "def", "linear_equiv_at", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "mem_source", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "mem_target", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "mk_mem_target", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "mk_proj_snd'", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "mk_proj_snd", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "mk_symm", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "preimage_symm_proj_base_set", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "proj_symm_apply'", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "proj_symm_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_apply_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_apply_apply_mk", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_apply_mk_proj", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_apply_of_not_mem", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_coe_fst'", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "symm_proj_apply", ["topological_vector_bundle", "pretrivialization"]], ["add", "theorem", "apply_mk_symm", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "apply_symm_apply'", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "apply_symm_apply", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "coe_coe", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coe_coe_fst", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coe_fst'", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "coe_fst", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coe_mem_source", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "continuous_on_symm", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "map_target", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "mem_source", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "mem_target", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "mk_mem_target", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "mk_proj_snd'", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "mk_proj_snd", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "mk_symm", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "proj_symm_apply'", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "proj_symm_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "source_inter_preimage_target_inter", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_apply_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_apply_apply_mk", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_apply_of_not_mem", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_coe_fst'", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_proj_apply", ["topological_vector_bundle", "trivialization"]], ["mod", "def", "to_pretrivialization", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1653307981, "sha": "2b35fc7b", "message": "refactor(data/set/finite): reorganize and put emphasis on fintype instances (#14136)\nI went through `data/set/finite` and reorganized it by rough topic (and moved some lemmas to their proper homes; closes #11177). Two important parts of this module are (1) `fintype` instances for various set constructions and (2) ways to create `set.finite` terms. This change puts the module closer to following a design where the `set.finite` terms are created in a formulaic way from the `fintype` instances. One tool for this is a `set.finite_of_fintype` constructor, which lets typeclass inference do most of the work.\nIncluded in this commit is changing `set.infinite` to be protected so that it does not conflict with `infinite`.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": []}, {"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/strongly_regular.lean", "newPath": "src/combinatorics/simple_graph/strongly_regular.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_compl_eq_card_compl", ["fintype"]], ["add", "theorem", "card_subtype_compl", ["fintype"]], ["add", "def", "decidable_mem_of_fintype", ["set"]], ["add", "theorem", "to_finset_diff", ["set"]], ["add", "theorem", "to_finset_insert", ["set"]], ["add", "theorem", "to_finset_inter", ["set"]], ["add", "theorem", "to_finset_ne_eq_erase", ["set"]], ["mod", "theorem", "to_finset_range", ["set"]], ["add", "theorem", "to_finset_singleton", ["set"]], ["add", "theorem", "to_finset_union", ["set"]], ["mod", "theorem", "to_finset_univ", ["set"]]]}, {"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "finite_to_set", ["finset"]], ["del", "theorem", "card_compl_eq_card_compl", ["fintype"]], ["del", "theorem", "card_subtype_compl", ["fintype"]], ["del", "theorem", "card_fintype_insert'", ["set"]], ["add", "theorem", "card_fintype_insert_of_not_mem", ["set"]], ["del", "def", "decidable_mem_of_fintype", ["set"]], ["mod", "theorem", "eq_finite_Union_of_finite_subset_Union", ["set"]], ["add", "theorem", "bUnion'", ["set", "finite"]], ["mod", "theorem", "bUnion", ["set", "finite"]], ["mod", "theorem", "bind", ["set", "finite"]], ["mod", "theorem", "coe_sort_to_finset", ["set", "finite"]], ["mod", "theorem", "coe_to_finset", ["set", "finite"]], ["mod", "theorem", "dependent_image", ["set", "finite"]], ["add", "theorem", "diff", ["set", "finite"]], ["mod", "theorem", "dinduction_on", ["set", "finite"]], ["mod", "theorem", "exists_finset", ["set", "finite"]], ["mod", "theorem", "exists_finset_coe", ["set", "finite"]], ["mod", "theorem", "exists_lt_map_eq_of_range_subset", ["set", "finite"]], ["mod", "theorem", "fin_param", ["set", "finite"]], ["mod", "theorem", "image2", ["set", "finite"]], ["mod", "theorem", "image", ["set", "finite"]], ["mod", "theorem", "induction_on", ["set", "finite"]], ["mod", "theorem", "infinite_compl", ["set", "finite"]], ["mod", "theorem", "insert", ["set", "finite"]], ["mod", "theorem", "inter_of_left", ["set", "finite"]], ["mod", "theorem", "inter_of_right", ["set", "finite"]], ["mod", "theorem", "map", ["set", "finite"]], ["mod", "theorem", "mem_to_finset", ["set", "finite"]], ["add", "theorem", "nonempty_to_finset", ["set", "finite"]], ["mod", "theorem", "of_diff", ["set", "finite"]], ["add", "theorem", "of_finite_image", ["set", "finite"]], ["mod", "theorem", "of_fintype", ["set", "finite"]], ["mod", "theorem", "of_preimage", ["set", "finite"]], ["mod", "theorem", "prod", ["set", "finite"]], ["mod", "theorem", "sInter", ["set", "finite"]], ["mod", "theorem", "sUnion", ["set", "finite"]], ["add", "theorem", "sep", ["set", "finite"]], ["mod", "theorem", "seq'", ["set", "finite"]], ["mod", "theorem", "seq", ["set", "finite"]], ["mod", "theorem", "subset", ["set", "finite"]], ["del", "theorem", "nonempty", ["set", "finite", "to_finset"]], ["mod", "theorem", "to_finset_inj", ["set", "finite"]], ["add", "theorem", "to_finset_insert", ["set", "finite"]], ["mod", "theorem", "to_finset_mono", ["set", "finite"]], ["mod", "theorem", "to_finset_strict_mono", ["set", "finite"]], ["mod", "theorem", "union", ["set", "finite"]], ["mod", "theorem", "finite_Union", ["set"]], ["mod", "theorem", "finite_def", ["set"]], ["mod", "theorem", "finite_empty", ["set"]], ["mod", "theorem", "finite_empty_to_finset", ["set"]], ["mod", "theorem", "finite_le_nat", ["set"]], ["mod", "theorem", "finite_lt_nat", ["set"]], ["mod", "theorem", "finite_mem_finset", ["set"]], ["del", "theorem", "finite_of_finite_image", ["set"]], ["add", "theorem", "finite_of_fintype", ["set"]], ["mod", "theorem", "finite_option", ["set"]], ["mod", "theorem", "finite_pure", ["set"]], ["mod", "theorem", "finite_range", ["set"]], ["mod", "theorem", "finite_singleton", ["set"]], ["mod", "theorem", "finite_to_finset_eq_empty_iff", ["set"]], ["mod", "theorem", "finite_union", ["set"]], ["mod", "theorem", "finite_univ", ["set"]], ["mod", "def", "fintype_bUnion", ["set"]], ["del", "def", "fintype_insert'", ["set"]], ["add", "def", "fintype_insert_of_mem", ["set"]], ["add", "def", "fintype_insert_of_not_mem", ["set"]], ["mod", "theorem", "diff", ["set", "infinite"]], ["mod", "theorem", "exists_nat_lt", ["set", "infinite"]], ["mod", "theorem", "exists_subset_card_eq", ["set", "infinite"]], ["mod", "theorem", "to_subtype", ["set", "infinite"]], ["del", "def", "infinite", ["set"]], ["mod", "theorem", "infinite_coe_iff", ["set"]], ["mod", "theorem", "infinite_of_finite_compl", ["set"]], ["mod", "theorem", "infinite_of_injective_forall_mem", ["set"]], ["mod", "theorem", "infinite_range_of_injective", ["set"]], ["mod", "theorem", "infinite_union", ["set"]], ["mod", "theorem", "infinite_univ", ["set"]], ["mod", "theorem", "infinite_univ_iff", ["set"]], ["del", "theorem", "insert_to_finset", ["set"]], ["add", "def", "fintype_Iio", ["set", "nat"]], ["mod", "theorem", "not_infinite", ["set"]], ["del", "theorem", "subset_iff_to_finset_subset", ["set"]], ["mod", "theorem", "subset_to_finset_iff", ["set"]], ["del", "theorem", "to_finset_insert", ["set"]], ["del", "theorem", "to_finset_inter", ["set"]], ["del", "theorem", "to_finset_ne_eq_erase", ["set"]], ["del", "theorem", "to_finset_sdiff", ["set"]], ["del", "theorem", "to_finset_singleton", ["set"]], ["del", "theorem", "to_finset_union", ["set"]]]}, {"oldPath": "src/data/set/intervals/infinite.lean", "newPath": "src/data/set/intervals/infinite.lean", "changes": [["mod", "theorem", "infinite", ["set", "Icc"]], ["mod", "theorem", "infinite", ["set", "Ici"]], ["mod", "theorem", "infinite", ["set", "Ico"]], ["mod", "theorem", "infinite", ["set", "Iic"]], ["mod", "theorem", "infinite", ["set", "Iio"]], ["mod", "theorem", "infinite", ["set", "Ioc"]], ["mod", "theorem", "infinite", ["set", "Ioi"]], ["mod", "theorem", "infinite", ["set", "Ioo"]]]}, {"oldPath": "src/logic/equiv/fintype.lean", "newPath": "src/logic/equiv/fintype.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_paracompact.lean", "newPath": "src/topology/metric_space/emetric_paracompact.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1653301239, "sha": "34e450b1", "message": "chore(linear_algebra/quadratic_form/basic): Reorder lemmas (#14326)\nThis moves the `fun_like` lemmas up to the top of the file next to the `coe_to_fun` instance, and condenses some sections containing only one lemma.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}]}, {"timestamp": 1653301238, "sha": "275dd0f3", "message": "feat(algebra/ne_zero): add helper methods (#14286)\nAlso golfs the inspiration for one of these, and cleans up some code around the area.", "changes": [{"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["add", "theorem", "eq_zero_or_ne_zero", []], ["mod", "theorem", "of_injective", ["ne_zero"]], ["add", "theorem", "pos", ["ne_zero"]], ["mod", "theorem", "trans", ["ne_zero"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1653301235, "sha": "15f49ae2", "message": "feat(linear_algebra/tensor_algebra/basic): add `tensor_algebra.tprod` (#14197)\nThis is related to `exterior_power.ι_multi`.\nNote the new import caused a proof to time out, so I squeezed the simps into term mode.", "changes": [{"oldPath": "src/linear_algebra/exterior_algebra/basic.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": [["mod", "def", "ι_multi", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra/basic.lean", "newPath": "src/linear_algebra/tensor_algebra/basic.lean", "changes": [["add", "def", "tprod", ["tensor_algebra"]], ["add", "theorem", "tprod_apply", ["tensor_algebra"]]]}]}, {"timestamp": 1653297576, "sha": "9288a2d9", "message": "feat(linear_algebra/affine_space/affine_equiv): extra lemmas and docstrings (#14319)\nI was struggling to find this definition, so added some more lemmas and a docstring.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "const_vadd_add", ["affine_equiv"]], ["add", "def", "const_vadd_hom", ["affine_equiv"]], ["add", "theorem", "const_vadd_nsmul", ["affine_equiv"]], ["add", "theorem", "const_vadd_symm", ["affine_equiv"]], ["add", "theorem", "const_vadd_zero", ["affine_equiv"]], ["add", "theorem", "const_vadd_zsmul", ["affine_equiv"]]]}]}, {"timestamp": 1653294652, "sha": "aa6dc575", "message": "chore(measure_theory/function/l1_space): drop `integrable.sub'` (#14309)\nIt used to have weaker TC assumptions than `integrable.sub` but now it's just a weaker version of it.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["del", "theorem", "sub'", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1653292219, "sha": "2962eabc", "message": "feat(linear_algebra/trace): trace of transpose map (#13897)", "changes": [{"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": [["add", "theorem", "transpose_dual_tensor_hom", []]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "theorem", "trace_transpose'", ["linear_map"]], ["add", "theorem", "trace_transpose", ["linear_map"]]]}]}, {"timestamp": 1653288829, "sha": "b5128b8a", "message": "feat(category_theory/limits): pullback squares (#14220)\nPer [zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/pushout.20of.20biprod.2Efst.20and.20biprod.2Esnd.20is.20zero).", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/comm_sq.lean", "changes": [["add", "theorem", "flip", ["category_theory", "limits", "comm_sq"]], ["add", "theorem", "of_arrow", ["category_theory", "limits", "comm_sq"]], ["add", "structure", "comm_sq", ["category_theory", "limits"]], ["add", "def", "cone", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "flip", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "of_bot", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "of_has_pullback", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "of_is_limit", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "of_right", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "paste_horiz", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "paste_vert", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "zero_left", ["category_theory", "limits", "is_pullback"]], ["add", "theorem", "zero_top", ["category_theory", "limits", "is_pullback"]], ["add", "structure", "is_pullback", ["category_theory", "limits"]], ["add", "def", "cocone", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "flip", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "of_bot", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "of_has_pushout", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "of_is_colimit", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "of_right", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "paste_horiz", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "paste_vert", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "zero_bot", ["category_theory", "limits", "is_pushout"]], ["add", "theorem", "zero_right", ["category_theory", "limits", "is_pushout"]], ["add", "structure", "is_pushout", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "condition_one", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "ext", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "condition_zero", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "ext", ["category_theory", "limits", "pushout_cocone"]]]}]}, {"timestamp": 1653278818, "sha": "94644b7d", "message": "chore(scripts): update nolints.txt (#14321)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1653270587, "sha": "542d06a6", "message": "feat(measure_theory): use `pseudo_metrizable_space` instead of `metrizable_space` (#14310)", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": [["mod", "theorem", "comp_measurable_to_germ", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["mod", "theorem", "ae_strongly_measurable", ["ae_measurable"]], ["mod", "theorem", "ae_strongly_measurable_Union_iff", []], ["mod", "theorem", "ae_strongly_measurable_add_measure_iff", []], ["mod", "theorem", "ae_strongly_measurable_id", []], ["mod", "theorem", "ae_strongly_measurable_iff_ae_measurable", []], ["mod", "theorem", "ae_strongly_measurable_union_iff", []], ["mod", "theorem", "exists_strongly_measurable_limit_of_tendsto_ae", []], ["mod", "theorem", "strongly_measurable", ["measurable"]], ["mod", "theorem", "add_measure", ["measure_theory", "ae_strongly_measurable"]], ["mod", "theorem", "measurable_mk", ["measure_theory", "ae_strongly_measurable"]], ["mod", "theorem", "sum_measure", ["measure_theory", "ae_strongly_measurable"]], ["mod", "theorem", "strongly_measurable_id", []]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["mod", "theorem", "ae_strongly_measurable", ["measure_theory", "ae_cover"]]]}]}, {"timestamp": 1653270586, "sha": "c100004c", "message": "refactor(category_theory/shift_functor): improve defeq of inverse (#14300)", "changes": [{"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": [["add", "theorem", "shift_functor_inv", ["category_theory"]]]}]}, {"timestamp": 1653270585, "sha": "56de25ef", "message": "chore(topology/separation): golf some proofs (#14279)\n* extract `minimal_nonempty_closed_eq_singleton` out of the proof of\n `is_closed.exists_closed_singleton`;\n* replace `exists_open_singleton_of_open_finset` with\n `exists_open_singleton_of_open_finite`, extract\n `minimal_nonempty_open_eq_singleton` out of its proof.\n* add `exists_is_open_xor_mem`, an alias for `t0_space.t0`.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "exists_is_open_xor_mem", []], ["mod", "theorem", "exists_open_singleton_of_fintype", []], ["add", "theorem", "exists_open_singleton_of_open_finite", []], ["del", "theorem", "exists_open_singleton_of_open_finset", []], ["add", "theorem", "minimal_nonempty_closed_eq_singleton", []], ["add", "theorem", "minimal_nonempty_open_eq_singleton", []]]}]}, {"timestamp": 1653270584, "sha": "01eda9ab", "message": "feat(topology/instances/ennreal): golf, add lemmas about `supr_add_supr` (#14274)\n* add `ennreal.bsupr_add'` etc that deal with\n `{ι : Sort*} {p : ι → Prop}` instead of `{ι : Type*} {s : set ι}`;\n* golf some proofs by reusing more powerful generic lemmas;\n* add `ennreal.supr_add_supr_le`, `ennreal.bsupr_add_bsupr_le`,\n and `ennreal.bsupr_add_bsupr_le'`.", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "add_bsupr'", ["ennreal"]], ["add", "theorem", "add_bsupr", ["ennreal"]], ["mod", "theorem", "add_supr", ["ennreal"]], ["add", "theorem", "bsupr_add'", ["ennreal"]], ["add", "theorem", "bsupr_add_bsupr_le'", ["ennreal"]], ["add", "theorem", "bsupr_add_bsupr_le", ["ennreal"]], ["add", "theorem", "supr_add_supr_le", ["ennreal"]]]}]}, {"timestamp": 1653270583, "sha": "9861db0d", "message": "feat(logic/hydra): termination of a hydra game (#14190)\n+ The added file logic/hydra.lean deals with the following version of the hydra game: each head of the hydra is labelled by an element in a type `α`, and when you cut off one head with label `a`, it grows back an arbitrary but finite number of heads, all labelled by elements smaller than `a` with respect to a well-founded relation `r` on `α`. We show that no matter how (in what order) you choose cut off the heads, the game always terminates, i.e. all heads will eventually be cut off. The proof follows https://mathoverflow.net/a/229084/3332, and the notion of `fibration` and the `game_add` relation on the product of two types arise in the proof.\n+ The results is used to show the well-foundedness of the intricate induction used to show that multiplication of games is well-defined on surreals, see [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Well-founded.20recursion.20for.20pgames/near/282379832).\n+ One lemma `add_singleton_eq_iff` is added to data/multiset/basic.\n+ `acc.trans_gen` is added, closing [a comment](https://github.com/leanprover-community/lean/pull/713/files#r867394835) at lean#713.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "add_singleton_eq_iff", ["multiset"]]]}, {"oldPath": null, "newPath": "src/logic/hydra.lean", "changes": [["add", "theorem", "cut_expand", ["acc"]], ["add", "theorem", "game_add", ["acc"]], ["add", "theorem", "of_downward_closed", ["acc"]], ["add", "theorem", "of_fibration", ["acc"]], ["add", "theorem", "acc_of_singleton", ["relation"]], ["add", "def", "cut_expand", ["relation"]], ["add", "theorem", "cut_expand_fibration", ["relation"]], ["add", "theorem", "cut_expand_iff", ["relation"]], ["add", "def", "fibration", ["relation"]], ["add", "inductive", "game_add", ["relation"]], ["add", "theorem", "game_add_le_lex", ["relation"]], ["add", "theorem", "rprod_le_trans_gen_game_add", ["relation"]], ["add", "theorem", "cut_expand", ["well_founded"]], ["add", "theorem", "game_add", ["well_founded"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "trans_gen", ["acc"]]]}]}, {"timestamp": 1653270582, "sha": "8304b951", "message": "refactor(algebra/big_operators/*): Generalize to division monoids (#14189)\nGeneralize big operators lemmas to `division_comm_monoid`. Rename `comm_group.inv_monoid_hom` to `inv_monoid_hom` because it is not about`comm_group` anymore and we do not use classes as namespaces.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_div_distrib", ["finset"]], ["mod", "theorem", "prod_erase_eq_div", ["finset"]], ["del", "theorem", "prod_inv_distrib'", ["finset"]], ["mod", "theorem", "prod_inv_distrib", ["finset"]], ["mod", "theorem", "prod_sdiff_div_prod_sdiff", ["finset"]], ["mod", "theorem", "prod_sdiff_eq_div", ["finset"]], ["mod", "theorem", "prod_zpow", ["finset"]], ["mod", "theorem", "sum_range_sub_of_monotone", ["finset"]], ["del", "theorem", "sum_sub_distrib", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["mod", "theorem", "finprod_div_distrib", []], ["del", "theorem", "finprod_div_distrib₀", []], ["mod", "theorem", "finprod_inv_distrib", []], ["del", "theorem", "finprod_inv_distrib₀", []], ["mod", "theorem", "finprod_mem_div_distrib", []], ["del", "theorem", "finprod_mem_div_distrib₀", []], ["mod", "theorem", "finprod_mem_inv_distrib", []], ["del", "theorem", "finprod_mem_inv_distrib₀", []]]}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["del", "theorem", "coe_inv_monoid_hom", ["multiset"]], ["del", "theorem", "prod_map_div₀", ["multiset"]], ["mod", "theorem", "prod_map_inv'", ["multiset"]], ["mod", "theorem", "prod_map_inv", ["multiset"]], ["del", "theorem", "prod_map_inv₀", ["multiset"]], ["del", "theorem", "prod_map_zpow₀", ["multiset"]]]}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["mod", "def", "inv", ["mul_equiv"]], ["add", "theorem", "inv_symm", ["mul_equiv"]], ["del", "def", "inv₀", ["mul_equiv"]], ["del", "theorem", "inv₀_symm", ["mul_equiv"]]]}, {"oldPath": "src/algebra/hom/freiman.lean", "newPath": "src/algebra/hom/freiman.lean", "changes": []}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["add", "theorem", "coe_inv_monoid_hom", []], ["del", "def", "inv_monoid_hom", ["comm_group"]], ["add", "def", "inv_monoid_hom", []], ["add", "theorem", "inv_monoid_hom_apply", []]]}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["mod", "theorem", "mul_support_div", ["function"]], ["del", "theorem", "mul_support_group_div", ["function"]], ["mod", "theorem", "mul_support_inv'", ["function"]], ["mod", "theorem", "mul_support_inv", ["function"]], ["del", "theorem", "mul_support_inv₀", ["function"]], ["mod", "theorem", "mul_support_mul_inv", ["function"]]]}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": []}]}, {"timestamp": 1653270581, "sha": "16a5286f", "message": "feat(order/atoms): add lemmas (#14162)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["del", "theorem", "eq_bot_or_eq_of_le_atom", []], ["del", "theorem", "eq_top_or_eq_of_coatom_le", []], ["add", "theorem", "Iic_eq", ["is_atom"]], ["add", "theorem", "le_iff", ["is_atom"]], ["add", "theorem", "lt_iff", ["is_atom"]], ["mod", "def", "is_atom", []], ["mod", "theorem", "is_atom_dual_iff_is_coatom", []], ["add", "theorem", "Ici_eq", ["is_coatom"]], ["add", "theorem", "le_iff", ["is_coatom"]], ["add", "theorem", "lt_iff", ["is_coatom"]], ["mod", "def", "is_coatom", []], ["mod", "theorem", "is_coatom_dual_iff_is_atom", []]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/partition/finpartition.lean", "newPath": "src/order/partition/finpartition.lean", "changes": []}]}, {"timestamp": 1653262898, "sha": "4cdde79f", "message": "chore(set_theory/game/ordinal): minor golfing (#14317)\nWe open the `pgame` namespace to save a few characters. We also very slightly golf the proof of `to_pgame_le`.", "changes": [{"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}]}, {"timestamp": 1653262897, "sha": "005df456", "message": "feat(topology/metric_space): use weaker TC assumptions (#14316)\nAssume `t0_space` instead of `separated_space` in `metric.of_t0_pseudo_metric_space` and `emetric.of_t0_pseudo_emetric_space` (both definition used to have `t2` in their names).", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["mod", "theorem", "norm_eq_zero_iff'", []], ["mod", "theorem", "norm_le_zero_iff'", []], ["mod", "theorem", "norm_pos_iff'", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "indistinguishable_iff", ["metric"]], ["add", "def", "of_t0_pseudo_metric_space", ["metric"]], ["del", "def", "of_t2_pseudo_metric_space", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "indistinguishable_iff", ["emetric"]], ["add", "def", "of_t0_pseudo_emetric_space", ["emetric"]], ["del", "def", "emetric_of_t2_pseudo_emetric_space", []]]}]}, {"timestamp": 1653262896, "sha": "9e9a2c9e", "message": "feat(algebra/ring/basic): add `no_zero_divisors.to_cancel_comm_monoid_with_zero` (#14302)\nThis already existed as `is_domain.to_cancel_comm_monoid_with_zero` with overly strong assumptions.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "def", "to_cancel_comm_monoid_with_zero", ["no_zero_divisors"]]]}]}, {"timestamp": 1653262895, "sha": "dcb3cb1c", "message": "chore(logic/equiv/set): golf definition (#14284)\nI've no idea which name is better; for now, let's at least not implement the same function twice.", "changes": [{"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": []}]}, {"timestamp": 1653262894, "sha": "60897e3b", "message": "refactor(set_theory/game/nim): `0 ≈ nim 0` → `nim 0 ≈ 0` (#14270)\nWe invert the directions of a few simple equivalences/relabellings to a more natural order (simpler on the RHS).", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "grundy_value_star", ["pgame"]], ["mod", "theorem", "grundy_value_zero", ["pgame"]], ["mod", "theorem", "nim_one_equiv", ["pgame", "nim"]], ["mod", "theorem", "nim_zero_equiv", ["pgame", "nim"]], ["mod", "def", "nim_zero_relabelling", ["pgame", "nim"]]]}]}, {"timestamp": 1653262893, "sha": "5a24374d", "message": "doc(set_theory/game/basic): improve docs (#14268)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}]}, {"timestamp": 1653262892, "sha": "cef5898c", "message": "chore(linear_algebra): generalize conversion between matrices and bilinear forms to semirings (#14263)\nOnly one lemma was moved (`dual_distrib_apply`), none were renamed, and no proofs were meaningfully changed.\nSection markers were shuffled around, and some variables exchanged for variables with weaker typeclass assumptions.\nA few other things have been generalized to semiring at the same time; `linear_map.trace` and `linear_map.smul_rightₗ`", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "ext_basis", ["bilin_form"]], ["mod", "theorem", "is_pair_self_adjoint_equiv", ["bilin_form"]], ["mod", "theorem", "sum_repr_mul_repr_mul", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "def", "dual_annihilator", ["submodule"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["mod", "theorem", "to_matrix_is_unit_smul", ["basis"]], ["mod", "theorem", "to_matrix_units_smul", ["basis"]]]}, {"oldPath": "src/linear_algebra/matrix/bilinear_form.lean", "newPath": "src/linear_algebra/matrix/bilinear_form.lean", "changes": [["mod", "theorem", "mul_to_matrix'", ["bilin_form"]], ["mod", "theorem", "mul_to_matrix'_mul", ["bilin_form"]], ["mod", "theorem", "mul_to_matrix", ["bilin_form"]], ["mod", "theorem", "mul_to_matrix_mul", ["bilin_form"]], ["mod", "def", "to_matrix'", ["bilin_form"]], ["mod", "theorem", "to_matrix'_apply", ["bilin_form"]], ["mod", "theorem", "to_matrix'_comp", ["bilin_form"]], ["mod", "theorem", "to_matrix'_comp_left", ["bilin_form"]], ["mod", "theorem", "to_matrix'_comp_right", ["bilin_form"]], ["mod", "theorem", "to_matrix'_mul", ["bilin_form"]], ["mod", "theorem", "to_matrix'_to_bilin'", ["bilin_form"]], ["mod", "theorem", "to_matrix_apply", ["bilin_form"]], ["mod", "theorem", "to_matrix_aux_std_basis", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp_left", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp_right", ["bilin_form"]], ["mod", "theorem", "to_matrix_mul", ["bilin_form"]], ["mod", "theorem", "to_matrix_mul_basis_to_matrix", ["bilin_form"]], ["mod", "theorem", "to_matrix_to_bilin", ["bilin_form"]], ["mod", "theorem", "to_matrix_aux_eq", ["bilinear_form"]], ["mod", "theorem", "nondegenerate_to_bilin'_iff_nondegenerate_to_bilin", ["matrix"]], ["mod", "def", "to_bilin'", ["matrix"]], ["mod", "theorem", "to_bilin'_apply'", ["matrix"]], ["mod", "theorem", "to_bilin'_apply", ["matrix"]], ["mod", "theorem", "to_bilin'_aux_eq", ["matrix"]], ["mod", "theorem", "to_bilin'_comp", ["matrix"]], ["mod", "theorem", "to_bilin'_std_basis", ["matrix"]], ["mod", "theorem", "to_bilin'_to_matrix'", ["matrix"]], ["mod", "theorem", "to_bilin_apply", ["matrix"]], ["mod", "theorem", "to_bilin_comp", ["matrix"]], ["mod", "theorem", "to_bilin_to_matrix", ["matrix"]], ["mod", "theorem", "to_bilin'_aux_to_matrix_aux", []]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1653262891, "sha": "e09e8770", "message": "refactor(set_theory/cardinal/cofinality): infer arguments (#14251)\nWe make one of the arguments in `cof_type_le` and `lt_cof_type` implicit.", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "theorem", "cof_type_le", ["ordinal"]], ["mod", "theorem", "lt_cof_type", ["ordinal"]]]}]}, {"timestamp": 1653262890, "sha": "d9465730", "message": "chore(data/matrix/basic): add `matrix.star_mul_vec` and `matrix.star_vec_mul` (#14248)\nThis also generalizes some nearby typeclasses.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "mul_vec_conj_transpose", ["matrix"]], ["mod", "theorem", "mul_vec_mul_vec", ["matrix"]], ["add", "theorem", "star_mul_vec", ["matrix"]], ["add", "theorem", "star_vec_mul", ["matrix"]], ["add", "theorem", "vec_mul_conj_transpose", ["matrix"]], ["mod", "theorem", "vec_mul_vec_mul", ["matrix"]]]}]}, {"timestamp": 1653262889, "sha": "684587b0", "message": "feat(set_theory/game/pgame): `add_lf_add_of_lf_of_le` (#14150)\nThis generalizes the previously existing `add_lf_add` on `numeric` games.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "add_lf_add_of_le_of_lf", ["pgame"]], ["add", "theorem", "add_lf_add_of_lf_of_le", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["del", "theorem", "add_lf_add", ["pgame"]]]}]}, {"timestamp": 1653260248, "sha": "b7952ee5", "message": "refactor(category_theory/shift): remove opaque_eq_to_iso (#14262)\nIt seems `opaque_eq_to_iso` was only needed because we had over-eager simp lemmas. After #14260, it is easy to remove.", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": [["del", "theorem", "map_opaque_eq_to_iso_comp_app", ["category_theory"]], ["del", "def", "opaque_eq_to_iso", ["category_theory"]], ["del", "theorem", "opaque_eq_to_iso_inv", ["category_theory"]], ["del", "theorem", "opaque_eq_to_iso_symm", ["category_theory"]]]}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": []}]}, {"timestamp": 1653253280, "sha": "178456ff", "message": "feat(set_theory/surreal/basic): definition of `≤` and `<` on numeric games (#14169)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "le_iff_forall_lt", ["pgame"]], ["add", "theorem", "le_of_forall_lt", ["pgame"]], ["add", "theorem", "lt_def", ["pgame"]], ["add", "theorem", "lt_iff_forall_le", ["pgame"]], ["add", "theorem", "lt_of_forall_le", ["pgame"]]]}]}, {"timestamp": 1653244399, "sha": "fe2b5ab0", "message": "feat(set_theory/game/pgame): instances for empty moves of addition (#14297)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1653238881, "sha": "1b7e918c", "message": "chore(algebra/geom_sum): rename to odd.geom_sum_pos (#14264)\nallowing dot notation :)", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["del", "theorem", "geom_sum_pos_of_odd", []], ["add", "theorem", "geom_sum_pos", ["odd"]]]}]}, {"timestamp": 1653236051, "sha": "eb8994b8", "message": "feat(measure_theory): use more `[(pseudo_)metrizable_space]` (#14232)\n* Use `[metrizable_space α]` or `[pseudo_metrizable_space α]` assumptions in some lemmas, replace `tendsto_metric` with `tendsto_metrizable` in the names of these lemmas.\n* Drop `measurable_of_tendsto_metric'` and `measurable_of_tendsto_metric` in favor of `measurable_of_tendsto_metrizable'` and `measurable_of_tendsto_metrizable`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "ae_measurable_of_tendsto_metric_ae'", []], ["del", "theorem", "ae_measurable_of_tendsto_metric_ae", []], ["add", "theorem", "ae_measurable_of_tendsto_metrizable_ae'", []], ["add", "theorem", "ae_measurable_of_tendsto_metrizable_ae", []], ["mod", "theorem", "ae_measurable_of_unif_approx", []], ["del", "theorem", "measurable_limit_of_tendsto_metric_ae", []], ["add", "theorem", "measurable_limit_of_tendsto_metrizable_ae", []], ["del", "theorem", "measurable_of_tendsto_metric'", []], ["del", "theorem", "measurable_of_tendsto_metric", []], ["del", "theorem", "measurable_of_tendsto_metric_ae", []], ["mod", "theorem", "measurable_of_tendsto_metrizable'", []], ["mod", "theorem", "measurable_of_tendsto_metrizable", []], ["add", "theorem", "measurable_of_tendsto_metrizable_ae", []], ["mod", "theorem", "tendsto_measure_cthickening_of_is_compact", []]]}, {"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}]}, {"timestamp": 1653230480, "sha": "eae05105", "message": "feat(category_theory/natural_isomorphism): a simp lemma cancelling inverses (#14299)\nI am not super happy to be adding lemmas like this, because it feels like better designed simp normal forms (or something else) could just avoid the need.\nHowever my efforts to think about this keep getting stuck on the shift functor hole we're in, and this lemma is useful in the meantime to dig my way out of it. :-)", "changes": [{"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "inv_map_inv_app", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1653230479, "sha": "e4a8db19", "message": "feat(data/real/ennreal): lemmas about unions and intersections (#14296)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "Inter_Ici_coe_nat", ["ennreal"]], ["add", "theorem", "Inter_Ioi_coe_nat", ["ennreal"]], ["add", "theorem", "Union_Icc_coe_nat", ["ennreal"]], ["add", "theorem", "Union_Ico_coe_nat", ["ennreal"]], ["add", "theorem", "Union_Iic_coe_nat", ["ennreal"]], ["add", "theorem", "Union_Iio_coe_nat", ["ennreal"]], ["add", "theorem", "Union_Ioc_coe_nat", ["ennreal"]], ["add", "theorem", "Union_Ioo_coe_nat", ["ennreal"]]]}]}, {"timestamp": 1653230477, "sha": "a836c6db", "message": "refactor(category_theory): remove some simp lemmas about eq_to_hom (#14260)\nThe simp lemma `eq_to_hom_map : F.map (eq_to_hom p) = eq_to_hom (congr_arg F.obj p)` is rather dangerous, but after it has fired it's much harder to see the functor `F` (e.g. to use naturality of a natural transformation).\nThis PR removes `@[simp]` from that lemma, at the expense of having a few `local attribute [simp]`s, and adding it explicitly to simp sets.\nOn the upside, we also get to *remove* some `simp [-eq_to_hom_map]`s. I'm hoping also to soon be able to remove `opaque_eq_to_hom`, as it was introduced to avoid the problem this simp lemma was causing.\nThe PR is part of an effort to solve some problems identified on [zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/trouble.20in.20.60shift_functor.60.20land).", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat/limit.lean", "newPath": "src/category_theory/category/Cat/limit.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["mod", "theorem", "eq_to_hom_map", ["category_theory"]], ["mod", "theorem", "eq_to_iso_map", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor/flat.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": []}, {"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/CommMon_.lean", "newPath": "src/category_theory/monoidal/CommMon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": []}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1653222193, "sha": "0386c3b3", "message": "refactor(order/filter/lift): reformulate `lift_infi` etc (#14138)\n* add `monotone.of_map_inf` and `monotone.of_map_sup`;\n* add `filter.lift_infi_le`: this inequality doesn't need any assumptions;\n* reformulate `filter.lift_infi` and `filter.lift'_infi` using `g (s ∩ t) = g s ⊓ g t` instead of `g s ⊓ g t = g (s ∩ t)`;\n* rename `filter.lift_infi'` to `filter.lift_infi_of_directed`, use `g (s ∩ t) = g s ⊓ g t`;\n* add `filter.lift_infi_of_map_univ` and `filter.lift'_infi_of_map_univ`.", "changes": [{"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "lift'_inf", ["filter"]], ["mod", "theorem", "lift'_infi", ["filter"]], ["add", "theorem", "lift'_infi_of_map_univ", ["filter"]], ["del", "theorem", "lift_infi'", ["filter"]], ["mod", "theorem", "lift_infi", ["filter"]], ["add", "theorem", "lift_infi_le", ["filter"]], ["add", "theorem", "lift_infi_of_directed", ["filter"]], ["add", "theorem", "lift_infi_of_map_univ", ["filter"]]]}, {"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "of_map_inf", ["monotone"]], ["add", "theorem", "of_map_sup", ["monotone"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1653217746, "sha": "d036d3cf", "message": "feat(probability/stopping): prove measurability of the stopped value (#14062)", "changes": [{"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "measurable_stopped_value", ["measure_theory"]], ["mod", "theorem", "adapted_stopped_process", ["measure_theory", "prog_measurable"]], ["mod", "theorem", "stopped_process", ["measure_theory", "prog_measurable"]], ["mod", "theorem", "strongly_measurable_stopped_process", ["measure_theory", "prog_measurable"]], ["mod", "theorem", "prog_measurable_min_stopping_time", ["measure_theory"]], ["add", "theorem", "strongly_measurable_stopped_value_of_le", ["measure_theory"]]]}]}, {"timestamp": 1653217745, "sha": "49b68e80", "message": "feat(analysis/convex/uniform): Uniformly convex spaces (#13480)\nDefine uniformly convex spaces and prove the implications `inner_product_space ℝ E → uniform_convex_space E` and `uniform_convex_space E → strict_convex_space ℝ E`.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/uniform.lean", "changes": [["add", "theorem", "exists_forall_closed_ball_dist_add_le_two_mul_sub", []], ["add", "theorem", "exists_forall_closed_ball_dist_add_le_two_sub", []], ["add", "theorem", "exists_forall_sphere_dist_add_le_two_sub", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "norm_add₃_le", []], ["add", "theorem", "norm_sub_pos_iff", []]]}]}, {"timestamp": 1653211677, "sha": "ac006036", "message": "feat(measure_theory/measure/measure_space): add some `null_measurable_set` lemmas (#14293)\nAdd `measure_bUnion₀`, `measure_sUnion₀`, and `measure_bUnion_finset₀`.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_Union₀", ["measure_theory"]], ["add", "theorem", "lintegral_bUnion", ["measure_theory"]], ["add", "theorem", "lintegral_bUnion_finset", ["measure_theory"]], ["add", "theorem", "lintegral_bUnion_finset₀", ["measure_theory"]], ["add", "theorem", "lintegral_bUnion₀", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": [["del", "theorem", "ae_disjoint", ["disjoint"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "measure_bUnion_finset", ["measure_theory"]], ["add", "theorem", "measure_bUnion_finset₀", ["measure_theory"]], ["add", "theorem", "measure_bUnion₀", ["measure_theory"]], ["add", "theorem", "measure_sUnion₀", ["measure_theory"]]]}]}, {"timestamp": 1653211676, "sha": "726b9ce7", "message": "feat(set_theory/ordinal/arithmetic): Lemmas about `bsup o.succ f` on a monotone function (#14289)", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "blsub_succ_of_mono", ["ordinal"]], ["add", "theorem", "bsup_succ_of_mono", ["ordinal"]]]}]}, {"timestamp": 1653211675, "sha": "e99ff889", "message": "feat(measure_theory): add `restrict_inter_add_diff` and `lintegral_inter_add_diff` (#14280)\n* add `measure_theory.measure.restrict_inter_add_diff` and `measure_theory.lintegral_inter_add_diff`;\n* drop one measurability assumption in `measure_theory.lintegral_union`;\n* add `measure_theory.lintegral_max` and `measure_theory.set_lintegral_max`;\n* drop `measure_theory.measure.lebesgue_decomposition.max_measurable_le`: use `set_lintegral_max` instead.", "changes": [{"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["del", "theorem", "max_measurable_le", ["measure_theory", "measure", "lebesgue_decomposition"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_inter_add_diff", ["measure_theory"]], ["add", "theorem", "lintegral_max", ["measure_theory"]], ["mod", "theorem", "lintegral_union", ["measure_theory"]], ["add", "theorem", "set_lintegral_max", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "restrict_inter_add_diff", ["measure_theory", "measure"]], ["add", "theorem", "restrict_inter_add_diff₀", ["measure_theory", "measure"]]]}]}, {"timestamp": 1653211673, "sha": "2d9f791d", "message": "feat(order/filter): add lemmas about filter.has_antitone_basis (#14131)\n* add `filter.has_antitone_basis.comp_mono` and\n `filter.has_antitone_basis.comp_strict_mono`;\n* add `filter.has_antitone_basis.subbasis_with_rel`;\n* generalize `filter.has_basis.exists_antitone_subbasis` to `ι : Sort*`.\n* add a missing docstring.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "comp_mono", ["filter", "has_antitone_basis"]], ["add", "theorem", "comp_strict_mono", ["filter", "has_antitone_basis"]], ["add", "theorem", "subbasis_with_rel", ["filter", "has_antitone_basis"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}]}, {"timestamp": 1653211673, "sha": "52df6ab6", "message": "refactor(category_theory): remove all decidability instances (#14046)\nMake the category theory library thoroughly classical: mostly this is ceasing carrying around decidability instances for the indexing types of biproducts, and for the object and morphism types in `fin_category`.\nIt appears there was no real payoff: the category theory library is already extremely non-constructive.\nAs I was running into occasional problems providing decidability instances (when writing construction involving reindexing biproducts), it seems easiest to just remove this vestigial constructiveness from the category theory library.", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": [["mod", "def", "biproduct_iso_pi", ["AddCommGroup"]], ["mod", "theorem", "biproduct_iso_pi_inv_comp_π", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/biproducts.lean", "newPath": "src/algebra/category/Module/biproducts.lean", "changes": [["mod", "def", "biproduct_iso_pi", ["Module"]], ["mod", "theorem", "biproduct_iso_pi_inv_comp_π", ["Module"]]]}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/biproducts.lean", "newPath": "src/category_theory/idempotents/biproducts.lean", "changes": [["mod", "def", "bicone", ["category_theory", "idempotents", "karoubi", "biproducts"]]]}, {"oldPath": "src/category_theory/limits/bicones.lean", "newPath": "src/category_theory/limits/bicones.lean", "changes": [["mod", "def", "bicone_mk", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/products.lean", "newPath": "src/category_theory/limits/constructions/over/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": [["mod", "theorem", "finite_coproduct_eq_finset_sup", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "finite_product_eq_finset_inf", ["category_theory", "limits", "complete_lattice"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "newPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "theorem", "from_subtype_π", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "ι_to_subtype", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "ι_π", ["category_theory", "limits", "biproduct"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/preadditive.lean", "newPath": "src/category_theory/monoidal/preadditive.lean", "changes": [["mod", "def", "left_distributor", ["category_theory"]], ["mod", "theorem", "left_distributor_assoc", ["category_theory"]], ["mod", "theorem", "left_distributor_hom", ["category_theory"]], ["mod", "theorem", "left_distributor_inv", ["category_theory"]], ["mod", "def", "right_distributor", ["category_theory"]], ["mod", "theorem", "right_distributor_assoc", ["category_theory"]], ["mod", "theorem", "right_distributor_hom", ["category_theory"]], ["mod", "theorem", "right_distributor_inv", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": []}]}, {"timestamp": 1653208844, "sha": "37647bf2", "message": "feat(measure_theory/constructions/borel_space): add `norm_cast` lemmas (#14295)", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "ae_measurable_coe_nnreal_ennreal_iff", []], ["add", "theorem", "ae_measurable_coe_nnreal_real_iff", []], ["mod", "theorem", "measurable_coe_nnreal_ennreal_iff", []], ["add", "theorem", "measurable_coe_nnreal_real_iff", []]]}]}, {"timestamp": 1653200982, "sha": "9b8588af", "message": "chore(algebra/order/ring): golf `mul_le_one` (#14245)\ngolf `mul_le_one`", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}]}, {"timestamp": 1653200981, "sha": "49ce9677", "message": "feat(ring_theory/valuation/basic): notation for `with_zero (multiplicative ℤ)` (#14064)\nAnd likewise for `with_zero (multiplicative ℕ)`", "changes": [{"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": [["mod", "def", "infty_valuation", ["function_field"]], ["mod", "def", "infty_valuation_def", ["function_field"]], ["mod", "def", "infty_valued_Fqt", ["function_field"]]]}, {"oldPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "newPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "changes": [["mod", "def", "adic_valued", ["is_dedekind_domain", "height_one_spectrum"]], ["mod", "def", "int_valuation", ["is_dedekind_domain", "height_one_spectrum"]], ["mod", "def", "int_valuation_def", ["is_dedekind_domain", "height_one_spectrum"]], ["mod", "def", "valuation", ["is_dedekind_domain", "height_one_spectrum"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1653193365, "sha": "a8a211f2", "message": "feat(order/lattice): add `left_lt_inf` etc (#14152)\n* add `left_lt_sup`, `right_lt_sup`, `left_or_right_lt_sup`, and their `inf` counterparts;\n* generalize `is_top_or_exists_gt` and `is_bot_or_exists_lt` to directed orders, replacing `forall_le_or_exists_lt_inf` and `forall_le_or_exists_lt_sup`;\n* generalize `exists_lt_of_sup` and `exists_lt_of_inf` to directed orders, rename them to `exists_lt_of_directed_le` and `exists_lt_of_directed_ge`.", "changes": [{"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "exists_lt_of_directed_ge", []], ["add", "theorem", "exists_lt_of_directed_le", []], ["add", "theorem", "is_bot_or_exists_lt", []], ["add", "theorem", "is_top_or_exists_gt", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["del", "theorem", "exists_lt_of_inf", []], ["del", "theorem", "exists_lt_of_sup", []], ["del", "theorem", "forall_le_or_exists_lt_inf", []], ["del", "theorem", "forall_le_or_exists_lt_sup", []], ["add", "theorem", "inf_lt_left", []], ["add", "theorem", "inf_lt_left_or_right", []], ["add", "theorem", "inf_lt_right", []], ["add", "theorem", "left_lt_sup", []], ["add", "theorem", "left_or_right_lt_sup", []], ["add", "theorem", "right_lt_sup", []]]}, {"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["del", "theorem", "is_bot_or_exists_lt", []], ["del", "theorem", "is_top_or_exists_gt", []]]}, {"oldPath": "src/topology/algebra/order/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": []}]}, {"timestamp": 1653183648, "sha": "d8b6f768", "message": "feat(set_theory/game/birthday): More basic birthdays (#14287)", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": [["add", "theorem", "birthday_half", ["pgame"]], ["add", "theorem", "birthday_star", ["pgame"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "succ_one", ["ordinal"]]]}]}, {"timestamp": 1653133134, "sha": "f04684f4", "message": "chore(data/set/pointwise): Move into the `set` namespace (#14281)\nA bunch of lemmas about scalar multiplications of sets were dumped in root namespace for some reason.\nThe lemmas moved to `set.*` are:\n* `zero_smul_set`\n* `zero_smul_subset`\n* `subsingleton_zero_smul_set`\n* `zero_mem_smul_set`\n* `zero_mem_smul_iff`\n* `zero_mem_smul_set_iff`\n* `smul_add_set`\n* `smul_mem_smul_set_iff`\n* `mem_smul_set_iff_inv_smul_mem`\n* `mem_inv_smul_set_iff`\n* `preimage_smul`\n* `preimage_smul_inv`\n* `set_smul_subset_set_smul_iff`\n* `set_smul_subset_iff`\n* `subset_set_smul_iff`\n* `smul_mem_smul_set_iff₀`\n* `mem_smul_set_iff_inv_smul_mem₀`\n* `mem_inv_smul_set_iff₀`\n* `preimage_smul₀`\n* `preimage_smul_inv₀`\n* `set_smul_subset_set_smul_iff₀`\n* `set_smul_subset_iff₀`\n* `subset_set_smul_iff₀`\n* `smul_univ₀`\n* `smul_set_univ₀`", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["del", "theorem", "mem_inv_smul_set_iff", []], ["del", "theorem", "mem_inv_smul_set_iff₀", []], ["del", "theorem", "mem_smul_set_iff_inv_smul_mem", []], ["del", "theorem", "mem_smul_set_iff_inv_smul_mem₀", []], ["del", "theorem", "preimage_smul", []], ["del", "theorem", "preimage_smul_inv", []], ["del", "theorem", "preimage_smul_inv₀", []], ["del", "theorem", "preimage_smul₀", []], ["add", "theorem", "mem_inv_smul_set_iff", ["set"]], ["add", "theorem", "mem_inv_smul_set_iff₀", ["set"]], ["add", "theorem", "mem_smul_set_iff_inv_smul_mem", ["set"]], ["add", "theorem", "mem_smul_set_iff_inv_smul_mem₀", ["set"]], ["add", "theorem", "preimage_smul", ["set"]], ["add", "theorem", "preimage_smul_inv", ["set"]], ["add", "theorem", "preimage_smul_inv₀", ["set"]], ["add", "theorem", "preimage_smul₀", ["set"]], ["add", "theorem", "set_smul_subset_iff", ["set"]], ["add", "theorem", "set_smul_subset_iff₀", ["set"]], ["add", "theorem", "set_smul_subset_set_smul_iff", ["set"]], ["add", "theorem", "set_smul_subset_set_smul_iff₀", ["set"]], ["add", "theorem", "smul_mem_smul_set_iff", ["set"]], ["add", "theorem", "smul_mem_smul_set_iff₀", ["set"]], ["add", "theorem", "smul_set_univ₀", ["set"]], ["add", "theorem", "smul_univ₀", ["set"]], ["add", "theorem", "subset_set_smul_iff", ["set"]], ["add", "theorem", "subset_set_smul_iff₀", ["set"]], ["add", "theorem", "subsingleton_zero_smul_set", ["set"]], ["add", "theorem", "zero_mem_smul_iff", ["set"]], ["add", "theorem", "zero_mem_smul_set", ["set"]], ["add", "theorem", "zero_mem_smul_set_iff", ["set"]], ["add", "theorem", "zero_smul_set", ["set"]], ["add", "theorem", "zero_smul_subset", ["set"]], ["del", "theorem", "set_smul_subset_iff", []], ["del", "theorem", "set_smul_subset_iff₀", []], ["del", "theorem", "set_smul_subset_set_smul_iff", []], ["del", "theorem", "set_smul_subset_set_smul_iff₀", []], ["del", "theorem", "smul_mem_smul_set_iff", []], ["del", "theorem", "smul_mem_smul_set_iff₀", []], ["del", "theorem", "smul_set_univ₀", []], ["del", "theorem", "smul_univ₀", []], ["del", "theorem", "subset_set_smul_iff", []], ["del", "theorem", "subset_set_smul_iff₀", []], ["del", "theorem", "subsingleton_zero_smul_set", []], ["del", "theorem", "zero_mem_smul_iff", []], ["del", "theorem", "zero_mem_smul_set", []], ["del", "theorem", "zero_mem_smul_set_iff", []], ["del", "theorem", "zero_smul_set", []], ["del", "theorem", "zero_smul_subset", []]]}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/pointwise.lean", "newPath": "src/ring_theory/subring/pointwise.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/pointwise.lean", "newPath": "src/ring_theory/subsemiring/pointwise.lean", "changes": []}]}, {"timestamp": 1653120844, "sha": "fc19a4e4", "message": "feat({data/finset,order/filter}/pointwise): Multiplicative action on pointwise monoids (#14214)\n`mul_action`, `distrib_mul_action`, `mul_distrib_mul_action` instances for `finset` and `filter`. Also delete `set.smul_add_set` because `smul_add` proves it.", "changes": [{"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["mod", "theorem", "image₂_singleton_left", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["mod", "theorem", "coe_smul_finset", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["del", "theorem", "smul_add_set", []]]}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}]}, {"timestamp": 1653114751, "sha": "eaa771fc", "message": "chore(tactic/cancel_denoms): remove an unused have (#14269)", "changes": [{"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}]}, {"timestamp": 1653103059, "sha": "d787d499", "message": "feat(algebra/big_operators): add `finset.prod_comm'` (#14257)\n* add a \"dependent\" version of `finset.prod_comm`;\n* use it to prove the original lemma;\n* slightly generalize `exists_eq_right_right` and `exists_eq_right_right'`;\n* add two `simps` attributes.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_comm'", ["finset"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "def", "sectl", ["function", "embedding"]], ["mod", "def", "sectr", ["function", "embedding"]]]}]}, {"timestamp": 1653094793, "sha": "3fc6fbb3", "message": "feat(algebra/divisibility): `is_refl` and `is_trans` instances for divisibility (#14240)", "changes": [{"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["mod", "theorem", "dvd_refl", []], ["mod", "theorem", "dvd_rfl", []], ["mod", "theorem", "one_dvd", []]]}]}, {"timestamp": 1653092543, "sha": "0e095f0e", "message": "feat(data/polynomial/mirror): `mirror` is injective (#14254)\nThis PR adds an `inj` lemma for `mirror`.", "changes": [{"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["add", "theorem", "mirror_inj", ["polynomial"]]]}]}, {"timestamp": 1653090275, "sha": "d217e1db", "message": "feat(set_theory/game/pgame): `sub_self_equiv` (#14272)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "sub_self_equiv", ["pgame"]]]}]}, {"timestamp": 1653071161, "sha": "a6b90beb", "message": "refactor(set_theory/cardinal/*): add `succ_order` instance, rename `succ` lemmas (#14244)\nWe rename the lemmas on `cardinal.succ` to better match those from `succ_order`.\n- `succ_le` → `succ_le_iff`\n- `lt_succ` → `lt_succ_iff`\n- `lt_succ_self` → `lt_succ`\nWe also add `succ_le_of_lt` and `le_of_lt_succ`.", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "le_of_lt_succ", ["cardinal"]], ["add", "theorem", "le_succ", ["cardinal"]], ["mod", "theorem", "lt_succ", ["cardinal"]], ["add", "theorem", "lt_succ_iff", ["cardinal"]], ["del", "theorem", "lt_succ_self", ["cardinal"]], ["del", "theorem", "succ_le", ["cardinal"]], ["add", "theorem", "succ_le_iff", ["cardinal"]], ["add", "theorem", "succ_le_of_lt", ["cardinal"]], ["mod", "theorem", "succ_nonempty", ["cardinal"]], ["mod", "theorem", "succ_pos", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1653068783, "sha": "113f7e42", "message": "feat(linear_algebra/trace): trace of projection maps (#14165)\nThis is proved under the `field` assumption instead of the finite free module assumptions generally used to talk about the trace because we need the submodules `p` and `f.ker` to also be free and finite.\n- [x] depends on: #13872", "changes": [{"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "theorem", "trace", ["linear_map", "is_proj"]], ["add", "theorem", "trace_id", ["linear_map"]]]}]}, {"timestamp": 1653064581, "sha": "1983e40a", "message": "feat(data/zmod/basic): If the orbit is finite, then the minimal period is positive (#14201)\nThis PR adds an instance stating that if the orbit is finite, then the minimal period is positive.\nThe instance is needed for an explicit computation that involves a product indexed by `zmod (minimal_period ((•) a) b)`.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}]}, {"timestamp": 1653060736, "sha": "846ed9f2", "message": "chore(measure_theory/integral/lebesgue): golf some proofs (#14256)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}]}, {"timestamp": 1653053654, "sha": "180d9751", "message": "feat(set_theory/game/pgame): Tweak `pgame.add` API (#13611)\nWe modify the API for `pgame.add` as follows: \n- `left_moves_add` and `right_moves_add` are turned from type equivalences into type equalities.\n- The former equivalences are prefixed with `to_` and inverted.\nWe also golf a few theorems and make some parameters explicit.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "def", "add", ["pgame"]], ["mod", "theorem", "add_move_left_inl", ["pgame"]], ["mod", "theorem", "add_move_left_inr", ["pgame"]], ["mod", "theorem", "add_move_right_inl", ["pgame"]], ["mod", "theorem", "add_move_right_inr", ["pgame"]], ["add", "theorem", "left_moves_add", ["pgame"]], ["del", "def", "left_moves_add", ["pgame"]], ["add", "theorem", "left_moves_add_cases", ["pgame"]], ["add", "theorem", "right_moves_add", ["pgame"]], ["del", "def", "right_moves_add", ["pgame"]], ["add", "theorem", "right_moves_add_cases", ["pgame"]], ["add", "def", "to_left_moves_add", ["pgame"]], ["add", "def", "to_right_moves_add", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}]}, {"timestamp": 1653045423, "sha": "1483eca1", "message": "feat(algebra/algebra/operations): add right induction principles for power membership (#14219)\nWe already had the left-induction principles.\nThere's probably some clever trick to get these via `mul_opposite`, but I'm not sure if it's worth the effort.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/grading.lean", "newPath": "src/linear_algebra/tensor_algebra/grading.lean", "changes": []}]}, {"timestamp": 1653027974, "sha": "1e011e3f", "message": "feat(linear_algebra/trace): trace of prod_map (#13872)\nIn this PR I prove that the trace is additive under `prod_map`, i.e. that `trace (prod_map f g) = trace f + trace g`.", "changes": [{"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": [["add", "theorem", "dual_tensor_hom_prod_map_zero", []], ["add", "theorem", "zero_prod_map_dual_tensor_hom", []]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "theorem", "trace_prod_map'", ["linear_map"]], ["add", "theorem", "trace_prod_map", ["linear_map"]]]}]}, {"timestamp": 1653019568, "sha": "735fbe05", "message": "chore(scripts): update nolints.txt (#14255)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1653011316, "sha": "a5878bbe", "message": "feat(data/polynomial/mirror): `mirror_eq_iff` (#14238)\nThis PR adds a lemma stating that `p.mirror = q ↔ p = q.mirror`.", "changes": [{"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["add", "theorem", "mirror_eq_iff", ["polynomial"]], ["mod", "theorem", "mirror_eq_zero", ["polynomial"]], ["add", "theorem", "mirror_involutive", ["polynomial"]], ["mod", "theorem", "mirror_leading_coeff", ["polynomial"]], ["mod", "theorem", "mirror_trailing_coeff", ["polynomial"]]]}]}, {"timestamp": 1653005764, "sha": "c9c9fa15", "message": "refactor(category_theory/discrete): make discrete irreducible (#13762)", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": [["add", "theorem", "biprod_iso_prod_inv_comp_fst", ["AddCommGroup"]], ["add", "theorem", "biprod_iso_prod_inv_comp_snd", ["AddCommGroup"]], ["mod", "def", "lift", ["AddCommGroup", "has_limit"]], ["del", "theorem", "lift_apply", ["AddCommGroup", "has_limit"]], ["mod", "def", "product_limit_cone", ["AddCommGroup", "has_limit"]]]}, {"oldPath": "src/algebra/category/Module/biproducts.lean", "newPath": "src/algebra/category/Module/biproducts.lean", "changes": [["mod", "def", "lift", ["Module", "has_limit"]], ["del", "theorem", "lift_apply", ["Module", "has_limit"]], ["mod", "def", "product_limit_cone", ["Module", "has_limit"]]]}, {"oldPath": "src/algebra/category/Module/products.lean", "newPath": "src/algebra/category/Module/products.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/constructions.lean", "newPath": "src/algebra/category/Ring/constructions.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["mod", "theorem", "image_preimage_is_empty", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/comma.lean", "newPath": "src/category_theory/adjunction/comma.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/evaluation.lean", "newPath": "src/category_theory/adjunction/evaluation.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/over.lean", "newPath": "src/category_theory/adjunction/over.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/coherence.lean", "newPath": "src/category_theory/bicategory/coherence.lean", "changes": [["add", "theorem", "preinclusion_map₂", ["category_theory", "free_bicategory"]]]}, {"oldPath": "src/category_theory/bicategory/locally_discrete.lean", "newPath": "src/category_theory/bicategory/locally_discrete.lean", "changes": [["add", "theorem", "eq_of_hom", ["category_theory", "locally_discrete"]], ["mod", "def", "locally_discrete", ["category_theory"]]]}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": [["del", "def", "pi_limit_cone", ["category_theory", "Groupoid"]], ["mod", "def", "pi_limit_fan", ["category_theory", "Groupoid"]], ["add", "def", "pi_limit_fan_is_limit", ["category_theory", "Groupoid"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["mod", "theorem", "eq_of_hom", ["category_theory", "discrete"]], ["add", "def", "eq_to_hom'", ["category_theory", "discrete"]], ["add", "def", "eq_to_hom", ["category_theory", "discrete"]], ["add", "def", "eq_to_iso'", ["category_theory", "discrete"]], ["add", "def", "eq_to_iso", ["category_theory", "discrete"]], ["mod", "theorem", "id_def", ["category_theory", "discrete"]], ["add", "theorem", "mk_as", ["category_theory", "discrete"]], ["mod", "def", "nat_iso_functor", ["category_theory", "discrete"]], ["del", "theorem", "nat_iso_hom_app", ["category_theory", "discrete"]], ["del", "theorem", "nat_iso_inv_app", ["category_theory", "discrete"]], ["del", "theorem", "nat_trans_app", ["category_theory", "discrete"]], ["add", "structure", "discrete", ["category_theory"]], ["del", "def", "discrete", ["category_theory"]], ["add", "def", "discrete_equiv", ["category_theory"]]]}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": []}, {"oldPath": "src/category_theory/functor/flat.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/products.lean", "newPath": "src/category_theory/limits/constructions/over/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/final.lean", "newPath": "src/category_theory/limits/final.lean", "changes": []}, {"oldPath": "src/category_theory/limits/kan_extension.lean", "newPath": "src/category_theory/limits/kan_extension.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "newPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/products.lean", "newPath": "src/category_theory/limits/preserves/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/punit.lean", "newPath": "src/category_theory/limits/punit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "def", "inl", ["category_theory", "limits", "binary_cofan"]], ["mod", "def", "inr", ["category_theory", "limits", "binary_cofan"]], ["mod", "def", "fst", ["category_theory", "limits", "binary_fan"]], ["mod", "def", "snd", ["category_theory", "limits", "binary_fan"]], ["mod", "def", "map_pair", ["category_theory", "limits"]], ["mod", "def", "map_pair_iso", ["category_theory", "limits"]], ["mod", "theorem", "map_pair_left", ["category_theory", "limits"]], ["mod", "theorem", "map_pair_right", ["category_theory", "limits"]], ["add", "def", "pair_function", ["category_theory", "limits"]], ["add", "theorem", "pair_function_left", ["category_theory", "limits"]], ["add", "theorem", "pair_function_right", ["category_theory", "limits"]], ["mod", "theorem", "pair_obj_left", ["category_theory", "limits"]], ["mod", "theorem", "pair_obj_right", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "def", "to_binary_bicone", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_bilimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_colimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_limit", ["category_theory", "limits", "bicone"]], ["add", "theorem", "to_cocone_X", ["category_theory", "limits", "bicone"]], ["add", "theorem", "to_cocone_ι_app", ["category_theory", "limits", "bicone"]], ["add", "theorem", "to_cone_X", ["category_theory", "limits", "bicone"]], ["add", "theorem", "to_cone_π_app", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_bicone", ["category_theory", "limits", "binary_bicone"]]]}, {"oldPath": "src/category_theory/limits/shapes/disjoint_coproduct.lean", "newPath": "src/category_theory/limits/shapes/disjoint_coproduct.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "proj", ["category_theory", "limits", "fan"]], ["add", "theorem", "fan_mk_proj", ["category_theory", "limits"]], ["add", "theorem", "has_products_of_limit_fans", ["category_theory", "limits"]], ["add", "def", "mk_fan_limit", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero_objects.lean", "newPath": "src/category_theory/limits/shapes/zero_objects.lean", "changes": []}, {"oldPath": "src/category_theory/limits/small_complete.lean", "newPath": "src/category_theory/limits/small_complete.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/CommMon_.lean", "newPath": "src/category_theory/monoidal/CommMon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/discrete.lean", "newPath": "src/category_theory/monoidal/discrete.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/coherence.lean", "newPath": "src/category_theory/monoidal/free/coherence.lean", "changes": [["add", "theorem", "discrete_functor_map_eq_id", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "discrete_functor_obj_eq_as", ["category_theory", "free_monoidal_category"]], ["mod", "def", "normalize_obj", ["category_theory", "free_monoidal_category"]], ["mod", "theorem", "normalize_obj_tensor", ["category_theory", "free_monoidal_category"]], ["mod", "theorem", "normalize_obj_unitor", ["category_theory", "free_monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "def", "iso_op_equiv", ["category_theory"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["mod", "theorem", "over_right", ["category_theory", "over"]], ["mod", "theorem", "under_left", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": [["mod", "theorem", "shift_obj_obj", ["category_theory", "has_shift"]], ["mod", "def", "opaque_eq_to_iso", ["category_theory"]], ["mod", "def", "shift_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": [["mod", "def", "mk", ["category_theory", "costructured_arrow"]], ["mod", "theorem", "mk_right", ["category_theory", "costructured_arrow"]], ["mod", "def", "mk", ["category_theory", "structured_arrow"]], ["mod", "theorem", "mk_left", ["category_theory", "structured_arrow"]]]}, {"oldPath": "src/category_theory/subterminal.lean", "newPath": "src/category_theory/subterminal.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/gluing.lean", "newPath": "src/topology/gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": [["mod", "theorem", "res_π", ["Top", "presheaf", "sheaf_condition_equalizer_products"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1652987776, "sha": "5cf7a1c5", "message": "feat (algebra/group/prod): Showing that embed_product is injective (#14247)\nProves that `embed_product` is injective.", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "embed_product_injective", ["units"]]]}]}, {"timestamp": 1652987775, "sha": "3c6f16c3", "message": "feat(algebra/group/conj): instances + misc (#13943)", "changes": [{"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["add", "theorem", "is_conj_comm", []]]}, {"oldPath": "src/group_theory/commuting_probability.lean", "newPath": "src/group_theory/commuting_probability.lean", "changes": [["mod", "theorem", "card_comm_eq_card_conj_classes_mul_card", []]]}]}, {"timestamp": 1652980319, "sha": "c8f2a1f4", "message": "chore(*) : `zero_dvd_iff.1` → `eq_zero_of_zero_dvd` (#14241)\nWe already had a name for this theorem, so we might as well use it.", "changes": [{"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}]}, {"timestamp": 1652980318, "sha": "ffe70020", "message": "feat(topology/locally_constant): Characteristic functions on clopen sets are locally constant (#11708)\nGives an API for characteristic functions on clopen sets, `char_fn`, which are locally constant functions.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "indicator_eq_one_iff_mem", ["set"]], ["add", "theorem", "indicator_eq_zero_iff_not_mem", ["set"]], ["add", "theorem", "indicator_one_inj", ["set"]]]}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": [["add", "theorem", "char_fn_eq_one", ["locally_constant"]], ["add", "theorem", "char_fn_eq_zero", ["locally_constant"]], ["add", "theorem", "char_fn_inj", ["locally_constant"]], ["add", "theorem", "coe_char_fn", ["locally_constant"]]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "mul_indicator_apply_eq_if", ["locally_constant"]], ["add", "theorem", "mul_indicator_of_mem", ["locally_constant"]], ["add", "theorem", "mul_indicator_of_not_mem", ["locally_constant"]]]}]}, {"timestamp": 1652977795, "sha": "d403cadd", "message": "chore(linear_algebra/quadratic_form/basic): remove redundant fields (#14246)\nThis renames `quadratic_form.mk_left` to `quadratic_form.mk` by removing the redundant fields in the structure, as the proof of `mk_left` didn't actually use the fact the ring was commutative as it claimed to in the docstring.\nThe only reason we could possibly want these is if addition were non-commutative, which seems extremely unlikely.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["del", "def", "mk_left", ["quadratic_form"]]]}]}, {"timestamp": 1652970087, "sha": "218d66a1", "message": "doc(tactic/lint/type_classes): Fix small typo (#14242)", "changes": [{"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1652963300, "sha": "e29d9110", "message": "feat(group_theory/quotient_group): properties of quotients of homomorphisms and equivalences (#13046)\nAdd `id`, `comp` for quotients of homomorphisms and `refl`, `symm`, `trans` for quotients of equivalences.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "def", "equiv_quotient_zpow_of_equiv", ["quotient_group"]], ["add", "theorem", "equiv_quotient_zpow_of_equiv_refl", ["quotient_group"]], ["add", "theorem", "equiv_quotient_zpow_of_equiv_symm", ["quotient_group"]], ["add", "theorem", "equiv_quotient_zpow_of_equiv_trans", ["quotient_group"]], ["mod", "def", "hom_quotient_zpow_of_hom", ["quotient_group"]], ["add", "theorem", "hom_quotient_zpow_of_hom_comp", ["quotient_group"]], ["add", "theorem", "hom_quotient_zpow_of_hom_comp_of_right_inverse", ["quotient_group"]], ["add", "theorem", "hom_quotient_zpow_of_hom_id", ["quotient_group"]], ["del", "theorem", "hom_quotient_zpow_of_hom_right_inverse", ["quotient_group"]]]}]}, {"timestamp": 1652955640, "sha": "18624efa", "message": "feat(order/complete_lattice): add `Sup_diff_singleton_bot` etc (#14205)\n* add `Sup_diff_singleton_bot` and `Inf_diff_singleton_top`;\n* add `set.sUnion_diff_singleton_empty` and `set.sInter_diff_singleton_univ`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "sInter_diff_singleton_univ", ["set"]], ["add", "theorem", "sUnion_diff_singleton_empty", ["set"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_diff_singleton_top", []], ["add", "theorem", "Sup_diff_singleton_bot", []]]}]}, {"timestamp": 1652953291, "sha": "6906b6f7", "message": "feat(analysis/normed_space/pi_Lp): add missing nnnorm lemmas (#14221)\nThis renames `pi_Lp.dist` to `pi_Lp.dist_eq` and `pi_Lp.edist` to `pi_Lp.edist_eq` to match `pi_Lp.norm_eq`.\nThe `nndist` version of these lemmas is new.\nThe `pi_Lp.norm_eq_of_L2` lemma was not stated at the correct generality, and has been moved to an earlier file where doing so is easier.\nThe `nnnorm` version of this lemma is new.\nAlso replaces some `∀` binders with `Π` to match the pretty-printer, and tidies some whitespace.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "nnnorm_eq", ["euclidean_space"]], ["del", "theorem", "norm_eq_of_L2", ["pi_Lp"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "dist_eq", ["pi_Lp"]], ["add", "theorem", "edist_eq", ["pi_Lp"]], ["add", "theorem", "nndist_eq", ["pi_Lp"]], ["add", "theorem", "nnnorm_eq_of_L2", ["pi_Lp"]], ["add", "theorem", "norm_eq_of_L2", ["pi_Lp"]]]}]}, {"timestamp": 1652937912, "sha": "ea3009f6", "message": "docs(category_theory/*): the last missing module docs (#14237)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}]}, {"timestamp": 1652932088, "sha": "923a14da", "message": "chore(scripts): update nolints.txt (#14239)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1652924506, "sha": "83285b24", "message": "refactor(set_theory/game/pgame): Rename `le_def_lf` → `le_iff_forall_lf` (#14206)\nOne-sided variants of these have also been introduced.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "theorem", "le_def_lf", ["pgame"]], ["add", "theorem", "le_iff_forall_lf", ["pgame"]], ["add", "theorem", "le_of_forall_lf", ["pgame"]], ["del", "theorem", "lf_def_le", ["pgame"]], ["add", "theorem", "lf_iff_forall_le", ["pgame"]], ["add", "theorem", "lf_of_forall_le", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1652920441, "sha": "cc74bcbd", "message": "feat(topology/algebra/module/basic): add `continuous_linear_map.apply_module` (#14223)\nThis matches `linear_map.apply_module`, but additionally provides `has_continuous_const_smul`.\nThis also adds the missing `continuous_linear_map.semiring` and `continuous_linear_map.monoid_with_zero` instances.", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "def", "to_linear_map_ring_hom", ["continuous_linear_map"]]]}]}, {"timestamp": 1652915825, "sha": "76f9f454", "message": "feat(category_theory/limits): (co/bi)products over types with a unique term (#14191)", "changes": [{"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "biproduct_unique_iso", ["category_theory", "limits"]], ["add", "def", "limit_bicone_of_unique", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "colimit_cocone_of_unique", ["category_theory", "limits"]], ["add", "def", "coproduct_unique_iso", ["category_theory", "limits"]], ["add", "def", "limit_cone_of_unique", ["category_theory", "limits"]], ["add", "def", "product_unique_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1652912344, "sha": "c42cff11", "message": "doc(deprecated/*): all deprecated files now lint (#14233)\nI am happy to remove some nolints for you.", "changes": [{"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}]}, {"timestamp": 1652912343, "sha": "a5f4cf53", "message": "fix(algebra/ring_quot): fix a diamond in the int-smul action (#14226)\nWe already handle the `nsmul` diamond correctly in the lines above", "changes": [{"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}]}, {"timestamp": 1652904519, "sha": "32700f50", "message": "refactor(*): `insert_singleton` → `pair` (#14210)\nWe rename various theorems with `insert_singleton` in the name to the more sensible and searchable `pair`. We also golf `finset.pair_comm`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "theorem", "insert_singleton_comm", ["finset"]], ["del", "theorem", "insert_singleton_self_eq", ["finset"]], ["add", "theorem", "pair_comm", ["finset"]], ["add", "theorem", "pair_self_eq", ["finset"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["del", "theorem", "cospherical_insert_singleton", ["euclidean_geometry"]], ["add", "theorem", "cospherical_pair", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["del", "theorem", "affine_span_insert_singleton_eq_altitude_iff", ["affine", "simplex"]], ["add", "theorem", "affine_span_pair_eq_altitude_iff", ["affine", "simplex"]]]}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["del", "theorem", "centroid_insert_singleton", ["finset"]], ["del", "theorem", "centroid_insert_singleton_fin", ["finset"]], ["add", "theorem", "centroid_pair", ["finset"]], ["add", "theorem", "centroid_pair_fin", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["del", "theorem", "collinear_insert_singleton", []], ["add", "theorem", "collinear_pair", []]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}]}, {"timestamp": 1652904518, "sha": "5fe43a91", "message": "feat(linear_algebra/trace): trace of tensor_products and hom_tensor_hom is an equivalence (#13728)", "changes": [{"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": [["add", "theorem", "dual_tensor_hom_equiv_of_basis_symm_cancel_left", []], ["add", "theorem", "dual_tensor_hom_equiv_of_basis_symm_cancel_right", []], ["add", "def", "hom_tensor_hom_equiv", []], ["add", "theorem", "hom_tensor_hom_equiv_apply", []], ["add", "theorem", "hom_tensor_hom_equiv_to_linear_map", []], ["add", "theorem", "ltensor_hom_equiv_hom_ltensor_apply", []], ["add", "theorem", "ltensor_hom_equiv_hom_ltensor_to_linear_map", []], ["add", "theorem", "map_dual_tensor_hom", []], ["add", "theorem", "rtensor_hom_equiv_hom_rtensor_apply", []], ["add", "theorem", "rtensor_hom_equiv_hom_rtensor_to_linear_map", []]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "def", "ltensor_hom_to_hom_ltensor", ["tensor_product"]], ["add", "theorem", "ltensor_hom_to_hom_ltensor_apply", ["tensor_product"]], ["add", "def", "rtensor_hom_to_hom_rtensor", ["tensor_product"]], ["add", "theorem", "rtensor_hom_to_hom_rtensor_apply", ["tensor_product"]]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "theorem", "trace_tensor_product'", ["linear_map"]], ["add", "theorem", "trace_tensor_product", ["linear_map"]]]}]}, {"timestamp": 1652896914, "sha": "259c951d", "message": "doc(src/deprecated/*): add module docstrings (#14224)\nAlthough we don't ever import them now, I add module docstrings for a couple of deprecated files to make the linter happier. I also attempt to unify the style in the docstrings of all the deprecated files.", "changes": [{"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": []}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": []}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}]}, {"timestamp": 1652896913, "sha": "4f31117e", "message": "feat(data/set/basic): add `set.subset_range_iff_exists_image_eq` and `set.range_image` (#14203)\n* add `set.subset_range_iff_exists_image_eq` and `set.range_image`;\n* use the former to golf `set.can_lift` (name fixed from `set.set.can_lift`);\n* golf `set.exists_eq_singleton_iff_nonempty_subsingleton`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_image", ["set"]], ["add", "theorem", "subset_range_iff_exists_image_eq", ["set"]]]}]}, {"timestamp": 1652889845, "sha": "470ddbdb", "message": "chore(analysis,topology): add missing ulift instances (#14217)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_eq", ["ulift"]], ["add", "theorem", "down_algebra_map", ["ulift"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "nnnorm_def", ["ulift"]], ["add", "theorem", "nnnorm_up", ["ulift"]], ["add", "theorem", "norm_def", ["ulift"]], ["add", "theorem", "norm_up", ["ulift"]]]}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_eq", ["ulift"]], ["add", "theorem", "dist_up_up", ["ulift"]], ["add", "theorem", "nndist_eq", ["ulift"]], ["add", "theorem", "nndist_up_up", ["ulift"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_eq", ["ulift"]], ["add", "theorem", "edist_up_up", ["ulift"]]]}]}, {"timestamp": 1652889844, "sha": "503970d2", "message": "chore(data/fintype/basic): Better `fin` lemmas (#14200)\nTurn `finset.image` into `finset.map` and `insert` into `finset.cons` in the three lemmas relating `univ : finset (fin (n + 1))` and `univ : finset (fin n)`. Golf proofs involving the related big operators lemmas.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_empty", ["finset"]], ["add", "theorem", "prod_of_empty", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "theorem", "prod_cons", ["fin"]], ["mod", "theorem", "prod_univ_succ_above", ["fin"]]]}, {"oldPath": "src/data/fin/tuple/nat_antidiagonal.lean", "newPath": "src/data/fin/tuple/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}]}, {"timestamp": 1652889843, "sha": "c38ab356", "message": "feat(analysis/convex/combination): The convex hull of `s + t` (#14160)\n`convex_hull` distributes over pointwise addition of sets and commutes with pointwise scalar multiplication. Also delete `linear_map.image_convex_hull` because it duplicates `linear_map.convex_hull_image`.", "changes": [{"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["add", "theorem", "convex_hull_add", []], ["mod", "theorem", "convex_hull_prod", []], ["add", "theorem", "convex_hull_sub", []], ["add", "theorem", "mk_mem_convex_hull_prod", []]]}, {"oldPath": "src/analysis/convex/hull.lean", "newPath": "src/analysis/convex/hull.lean", "changes": [["mod", "theorem", "convex_hull_eq", ["convex"]], ["add", "theorem", "convex_hull_subset_iff", ["convex"]], ["add", "theorem", "convex_hull_eq_Inter", []], ["add", "theorem", "convex_hull_neg", []], ["add", "theorem", "convex_hull_smul", []], ["del", "theorem", "image_convex_hull", ["is_linear_map"]], ["del", "theorem", "image_convex_hull", ["linear_map"]], ["add", "theorem", "mem_convex_hull_iff", []]]}]}, {"timestamp": 1652882932, "sha": "cfedf1d5", "message": "feat(ring_theory/ideal/operations.lean): lemmas about coprime ideals (#14176)\nGeneralises some lemmas from `ring_theory/coprime/lemmas.lean` to the case of non-principal ideals.", "changes": [{"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "theorem", "mem_supr_finset_iff_exists_sum", ["submodule"]]]}, {"oldPath": null, "newPath": "src/ring_theory/coprime/ideal.lean", "changes": [["add", "theorem", "supr_infi_eq_top_iff_pairwise", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "infi_sup_eq_top", ["ideal"]], ["add", "theorem", "mul_sup_eq_of_coprime_left", ["ideal"]], ["add", "theorem", "mul_sup_eq_of_coprime_right", ["ideal"]], ["add", "theorem", "pow_sup_eq_top", ["ideal"]], ["add", "theorem", "pow_sup_pow_eq_top", ["ideal"]], ["add", "theorem", "prod_sup_eq_top", ["ideal"]], ["add", "theorem", "sup_infi_eq_top", ["ideal"]], ["add", "theorem", "sup_mul_eq_of_coprime_left", ["ideal"]], ["add", "theorem", "sup_mul_eq_of_coprime_right", ["ideal"]], ["add", "theorem", "sup_pow_eq_top", ["ideal"]], ["add", "theorem", "sup_prod_eq_top", ["ideal"]]]}]}, {"timestamp": 1652882931, "sha": "2c2d515a", "message": "refactor(data/list/min_max): Generalise `list.argmin`/`list.argmax` to preorders (#13221)\nThis PR generalises the contents of the `data/list/min_max` file from a `linear_order` down to a `preorder` with decidable `<`. Note that for this to work out, I have had to change the structure of the auxiliary function `argmax₂` to now mean `option.cases_on a (some b) (λ c, if f c < f b then some b else some c)`. This is because in the case of a preorder, `argmax₂` would perform the swap in the absence of the `≤` relation, which would result in a semi-random shuffle that doesn't look very `maximal`.", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": [["add", "def", "arg_aux", ["list"]], ["add", "theorem", "arg_aux_self", ["list"]], ["mod", "def", "argmax", ["list"]], ["mod", "theorem", "argmax_eq_none", ["list"]], ["mod", "theorem", "argmax_eq_some_iff", ["list"]], ["mod", "theorem", "argmax_mem", ["list"]], ["mod", "theorem", "argmax_singleton", ["list"]], ["del", "theorem", "argmax_two_self", ["list"]], ["del", "def", "argmax₂", ["list"]], ["mod", "def", "argmin", ["list"]], ["mod", "theorem", "argmin_eq_none", ["list"]], ["mod", "theorem", "argmin_eq_some_iff", ["list"]], ["del", "theorem", "argmin_le_of_mem", ["list"]], ["mod", "theorem", "argmin_mem", ["list"]], ["add", "theorem", "foldl_arg_aux_eq_none", ["list"]], ["del", "theorem", "foldl_argmax₂_eq_none", ["list"]], ["add", "theorem", "foldr_max_of_ne_nil", ["list"]], ["add", "theorem", "foldr_min_of_ne_nil", ["list"]], ["mod", "theorem", "index_of_argmax", ["list"]], ["mod", "theorem", "index_of_argmin", ["list"]], ["del", "theorem", "le_argmax_of_mem", ["list"]], ["mod", "theorem", "le_maximum_of_mem'", ["list"]], ["mod", "theorem", "le_maximum_of_mem", ["list"]], ["add", "theorem", "le_min_of_forall_le", ["list"]], ["del", "theorem", "le_min_of_le_forall", ["list"]], ["mod", "theorem", "le_minimum_of_mem'", ["list"]], ["add", "theorem", "le_of_mem_argmax", ["list"]], ["add", "theorem", "le_of_mem_argmin", ["list"]], ["mod", "theorem", "max_le_of_forall_le", ["list"]], ["del", "theorem", "max_nat_le_of_forall_le", ["list"]], ["del", "theorem", "maximum_eq_coe_foldr_max_of_ne_nil", ["list"]], ["mod", "theorem", "maximum_eq_coe_iff", ["list"]], ["del", "theorem", "maximum_nat_eq_coe_foldr_max_of_ne_nil", ["list"]], ["mod", "theorem", "mem_argmax_iff", ["list"]], ["mod", "theorem", "mem_argmin_iff", ["list"]], ["del", "theorem", "minimum_eq_coe_foldr_min_of_ne_nil", ["list"]], ["mod", "theorem", "minimum_eq_coe_iff", ["list"]], ["mod", "theorem", "minimum_le_of_mem", ["list"]], ["add", "theorem", "minimum_not_lt_of_mem", ["list"]], ["add", "theorem", "not_lt_maximum_of_mem'", ["list"]], ["add", "theorem", "not_lt_maximum_of_mem", ["list"]], ["add", "theorem", "not_lt_minimum_of_mem'", ["list"]], ["add", "theorem", "not_lt_of_mem_argmax", ["list"]], ["add", "theorem", "not_lt_of_mem_argmin", ["list"]], ["add", "theorem", "not_of_mem_foldl_arg_aux", ["list"]]]}]}, {"timestamp": 1652879454, "sha": "54773fc0", "message": "feat(topology/algebra/module/multilinear): add `continuous_multilinear_map.smul_right` (#14218)\nSee https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Question.20about.20.60formal_multilinear_series.60 for one use case", "changes": [{"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["add", "def", "smul_right", ["continuous_multilinear_map"]], ["add", "theorem", "smul_right_apply", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1652875341, "sha": "9dc9c3ea", "message": "feat(logic/lemmas): Distributivity of `if then else` (#14146)\nDistributivity laws for `dite` and `ite`.", "changes": [{"oldPath": null, "newPath": "src/logic/lemmas.lean", "changes": [["add", "theorem", "dite_dite_distrib_left", []], ["add", "theorem", "dite_dite_distrib_right", []], ["add", "theorem", "dite_ite_distrib_left", []], ["add", "theorem", "dite_ite_distrib_right", []], ["add", "theorem", "ite_dite_distrib_left", []], ["add", "theorem", "ite_dite_distrib_right", []], ["add", "theorem", "ite_ite_distrib_left", []], ["add", "theorem", "ite_ite_distrib_right", []]]}]}, {"timestamp": 1652869867, "sha": "ae6a7c3f", "message": "feat(linear_algebra/multilinear/finite_dimensional): generalize to finite and free (#14199)\nThis also renames some `free` and `finite` instances which had garbage names.", "changes": [{"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/basic.lean", "newPath": "src/linear_algebra/free_module/finite/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "newPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["del", "theorem", "is_noetherian_of_zero_eq_one", ["ring"]]]}]}, {"timestamp": 1652860432, "sha": "59facea4", "message": "chore(data/multiset/basic): `∅` → `0` (#14211)\nIt's preferred to use `0` instead of `∅` throughout the multiset API.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "pair_comm", ["multiset"]]]}]}, {"timestamp": 1652849837, "sha": "d08f7340", "message": "chore(measure_theory/function/strongly_measurable): golf some proofs (#14209)", "changes": [{"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}]}, {"timestamp": 1652842275, "sha": "50696a85", "message": "chore(data/multiset/basic): Inline instances (#14208)\nWe inline various protected theorems into the `ordered_cancel_add_comm_monoid` instance. We also declare `covariant_class` and `contravariant_class` instances, which make further theorems redundant.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}]}, {"timestamp": 1652840012, "sha": "9f6f605b", "message": "feat(data/polynomial/mirror): Central coefficient of `p * p.mirror` (#14096)\nThis PR adds a lemma `(p * p.mirror).coeff (p.nat_degree + p.nat_trailing_degree) = p.sum (λ n, (^ 2))`.\nI also rearranged the file by assumptions on the ring `R`.", "changes": [{"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["add", "theorem", "coeff_mul_mirror", ["polynomial"]], ["mod", "theorem", "irreducible_of_mirror", ["polynomial"]], ["mod", "theorem", "mirror_mul_of_domain", ["polynomial"]], ["mod", "theorem", "mirror_neg", ["polynomial"]], ["mod", "theorem", "mirror_smul", ["polynomial"]]]}]}, {"timestamp": 1652836831, "sha": "f48cbb16", "message": "feat(category_theory/limits): reindexing (co/bi)products (#14193)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "reindex", ["category_theory", "limits", "biproduct"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "reindex", ["category_theory", "limits", "pi"]], ["add", "theorem", "reindex_hom_π", ["category_theory", "limits", "pi"]], ["add", "theorem", "reindex_inv_π", ["category_theory", "limits", "pi"]], ["add", "def", "reindex", ["category_theory", "limits", "sigma"]], ["add", "theorem", "ι_reindex_hom", ["category_theory", "limits", "sigma"]], ["add", "theorem", "ι_reindex_inv", ["category_theory", "limits", "sigma"]]]}]}, {"timestamp": 1652829778, "sha": "ca5930df", "message": "feat(data/multiset/basic): `pair_comm` (#14207)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "pair_comm", ["multiset"]]]}]}, {"timestamp": 1652829777, "sha": "6b291d7b", "message": "feat(analysis/special_functions/trigonometric/arctan): add `real.range_arctan` (#14204)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/arctan.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": [["add", "theorem", "range_arctan", ["real"]]]}]}, {"timestamp": 1652829776, "sha": "632fef37", "message": "feat(analysis/normed_space/M_structure): Define L-projections, show they form a Boolean algebra (#12173)\nA continuous projection P on a normed space X is said to be an L-projection if, for all `x` in `X`,\n```\n∥x∥ = ∥P x∥ + ∥(1-P) x∥.\n```\nThe range of an L-projection is said to be an L-summand of X.\nA continuous projection P on a normed space X is said to be an M-projection if, for all `x` in `X`,\n```\n∥x∥ = max(∥P x∥,∥(1-P) x∥).\n```\nThe range of an M-projection is said to be an M-summand of X.\nThe L-projections and M-projections form Boolean algebras. When X is a Banach space, the Boolean\nalgebra of L-projections is complete.\nLet `X` be a normed space with dual `X^*`. A closed subspace `M` of `X` is said to be an M-ideal if\nthe topological annihilator `M^∘` is an L-summand of `X^*`.\nM-ideal, M-summands and L-summands were introduced by Alfsen and Effros to\nstudy the structure of general Banach spaces. When `A` is a JB*-triple, the M-ideals of `A` are\nexactly the norm-closed ideals of `A`. When `A` is a JBW*-triple with predual `X`, the M-summands of\n`A` are exactly the weak*-closed ideals, and their pre-duals can be identified with the L-summands\nof `X`. In the special case when `A` is a C*-algebra, the M-ideals are exactly the norm-closed\ntwo-sided ideals of `A`, when `A` is also a W*-algebra the M-summands are exactly the weak*-closed\ntwo-sided ideals of `A`.\nThis initial PR limits itself to showing that the L-projections form a Boolean algebra. The approach followed is based on that used in `measure_theory.measurable_space`. The equivalent result for M-projections can be established by a similar argument or by a duality result (to be established). However, I thought it best to seek feedback before proceeding further.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/ring/idempotents.lean", "newPath": "src/algebra/ring/idempotents.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/M_structure.lean", "changes": [["add", "theorem", "Lcomplement", ["is_Lprojection"]], ["add", "theorem", "Lcomplement_iff", ["is_Lprojection"]], ["add", "theorem", "coe_bot", ["is_Lprojection"]], ["add", "theorem", "coe_compl", ["is_Lprojection"]], ["add", "theorem", "coe_inf", ["is_Lprojection"]], ["add", "theorem", "coe_one", ["is_Lprojection"]], ["add", "theorem", "coe_sdiff", ["is_Lprojection"]], ["add", "theorem", "coe_sup", ["is_Lprojection"]], ["add", "theorem", "coe_top", ["is_Lprojection"]], ["add", "theorem", "coe_zero", ["is_Lprojection"]], ["add", "theorem", "commute", ["is_Lprojection"]], ["add", "theorem", "compl_mul_left", ["is_Lprojection"]], ["add", "theorem", "compl_orthog", ["is_Lprojection"]], ["add", "theorem", "distrib_lattice_lemma", ["is_Lprojection"]], ["add", "theorem", "join", ["is_Lprojection"]], ["add", "theorem", "le_def", ["is_Lprojection"]], ["add", "theorem", "mul", ["is_Lprojection"]], ["add", "structure", "is_Lprojection", []], ["add", "structure", "is_Mprojection", []]]}]}, {"timestamp": 1652822257, "sha": "0afb90b4", "message": "refactor(algebra/parity): Generalize to division monoids (#14187)\nGeneralize lemmas about `is_square`, `even` and `odd`. Improve dot notation.", "changes": [{"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["mod", "def", "inv'", ["mul_equiv"]]]}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["mod", "theorem", "add_odd", ["even"]], ["mod", "theorem", "neg_one_zpow", ["even"]], ["mod", "theorem", "neg_zpow", ["even"]], ["add", "theorem", "tsub", ["even"]], ["del", "theorem", "tsub_even", ["even"]], ["mod", "theorem", "even_abs", []], ["add", "theorem", "div", ["is_square"]], ["del", "theorem", "div_is_square", ["is_square"]], ["add", "theorem", "mul", ["is_square"]], ["del", "theorem", "mul_is_square", ["is_square"]], ["mod", "def", "is_square", []], ["mod", "theorem", "is_square_iff_exists_sq", []], ["mod", "theorem", "is_square_inv", []], ["mod", "theorem", "is_square_mul_self", []], ["mod", "theorem", "is_square_op_iff", []], ["mod", "theorem", "add_odd", ["odd"]], ["add", "theorem", "map", ["odd"]], ["add", "theorem", "mul", ["odd"]], ["del", "theorem", "mul_odd", ["odd"]], ["mod", "theorem", "odd_abs", []], ["mod", "theorem", "odd_neg", []], ["del", "theorem", "odd", ["ring_hom"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}]}, {"timestamp": 1652817883, "sha": "21581937", "message": "feat(topology/instances/matrix): add topological/continuous instances (#14202)\nFor completeness, `has_continuous_add` and `topological_add_group`\ninstances are added to matrices, as pi types already have\nthese. Additionally, `has_continuous_const_smul` and\n`has_continuous_smul` matrix instances have been made more generic,\nallowing differing index types.", "changes": [{"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": []}]}, {"timestamp": 1652813365, "sha": "1f0f9813", "message": "chore(linear_algebra/multilinear/basic): move finite-dimensionality to a new file (#14198)\n`linear_algebra.matrix.to_lin` pulls in a lot of imports that appear to slow things down considerably in downstream files.\nThe proof is moved without modification.", "changes": [{"oldPath": "src/linear_algebra/matrix/charpoly/minpoly.lean", "newPath": "src/linear_algebra/matrix/charpoly/minpoly.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/multilinear/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1652807933, "sha": "ae6f59d7", "message": "feat(analysis/locally_convex/with_seminorms): pull back `with_seminorms` along a linear inducing (#13549)\nThis show that, if `f : E -> F` is linear and the topology on `F` is induced by a family of seminorms `p`, then the topology induced on `E` through `f` is induced by the seminorms `(p i) ∘ f`.\n- [x] depends on: #13547", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["add", "theorem", "with_seminorms", ["inducing"]], ["add", "theorem", "with_seminorms_induced", ["linear_map"]], ["add", "def", "comp", ["seminorm_family"]], ["add", "theorem", "comp_apply", ["seminorm_family"]], ["add", "theorem", "finset_sup_comp", ["seminorm_family"]]]}]}, {"timestamp": 1652807932, "sha": "ba38b47f", "message": "feat(group_theory/perm/list): Add missing `form_perm` lemmas (#13218)", "changes": [{"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": [["add", "theorem", "form_perm_mem_iff_mem", ["list"]], ["add", "theorem", "mem_of_form_perm_apply_mem", ["list"]], ["add", "theorem", "mem_of_form_perm_apply_ne", ["list"]]]}]}, {"timestamp": 1652801700, "sha": "da201ad4", "message": "chore(set_theory/ordinal/{basic, arithmetic}): Inline instances (#14076)\nWe inline various definition in the `ordinal` instances, thus avoiding protected (or unprotected!) definitions that are only used once.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "def", "opow", ["ordinal"]], ["add", "theorem", "opow_def", ["ordinal"]], ["del", "def", "sub", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["del", "theorem", "le_total", ["ordinal"]], ["del", "def", "lt", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": [["mod", "theorem", "repr_opow", ["nonote"]]]}]}, {"timestamp": 1652801699, "sha": "600d8eaa", "message": "feat(topology/metric_space): define a pseudo metrizable space (#14053)\n* define `topological_space.pseudo_metrizable_space`;\n* copy API from `topological_space.metrizable_space`;\n* add `pi` instances;\n* use `X`, `Y` instead of `α`, `β`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "def", "comap_pseudo_metric_space", ["inducing"]], ["add", "def", "replace_topology", ["pseudo_metric_space"]], ["add", "theorem", "replace_topology_eq", ["pseudo_metric_space"]]]}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": [["mod", "theorem", "metrizable_space", ["embedding"]], ["add", "theorem", "pseudo_metrizable_space", ["inducing"]]]}]}, {"timestamp": 1652801697, "sha": "e2eea550", "message": "feat(algebra/homology): short exact sequences (#14009)\nMigrating from LTE. (This is all Johan and Andrew's work, I think, I just tidied up some.)\nPlease feel free to push changes directly without consulting me. :-)", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/homology/short_exact/abelian.lean", "changes": [["add", "theorem", "is_iso_of_short_exact_of_is_iso_of_is_iso", ["category_theory"]], ["add", "def", "splitting", ["category_theory", "left_split"]], ["add", "def", "mk'", ["category_theory", "splitting"]]]}, {"oldPath": null, "newPath": "src/algebra/homology/short_exact/preadditive.lean", "changes": [["add", "theorem", "exact_inl_snd", ["category_theory"]], ["add", "theorem", "exact_inr_fst", ["category_theory"]], ["add", "theorem", "exact_of_split", ["category_theory"]], ["add", "theorem", "short_exact", ["category_theory", "left_split"]], ["add", "structure", "left_split", ["category_theory"]], ["add", "theorem", "short_exact", ["category_theory", "right_split"]], ["add", "structure", "right_split", ["category_theory"]], ["add", "structure", "short_exact", ["category_theory"]], ["add", "theorem", "exact", ["category_theory", "split"]], ["add", "theorem", "left_split", ["category_theory", "split"]], ["add", "theorem", "map", ["category_theory", "split"]], ["add", "theorem", "right_split", ["category_theory", "split"]], ["add", "theorem", "short_exact", ["category_theory", "split"]], ["add", "structure", "split", ["category_theory"]], ["add", "theorem", "comp_eq_zero", ["category_theory", "splitting"]], ["add", "theorem", "inl_comp_iso_eq", ["category_theory", "splitting"]], ["add", "theorem", "inr_iso_inv", ["category_theory", "splitting"]], ["add", "theorem", "iso_comp_eq_snd", ["category_theory", "splitting"]], ["add", "theorem", "iso_hom_fst", ["category_theory", "splitting"]], ["add", "def", "retraction", ["category_theory", "splitting"]], ["add", "theorem", "retraction_ι_eq_id_sub", ["category_theory", "splitting"]], ["add", "def", "section", ["category_theory", "splitting"]], ["add", "theorem", "section_retraction", ["category_theory", "splitting"]], ["add", "theorem", "section_π", ["category_theory", "splitting"]], ["add", "theorem", "short_exact", ["category_theory", "splitting"]], ["add", "theorem", "split", ["category_theory", "splitting"]], ["add", "theorem", "split_add", ["category_theory", "splitting"]], ["add", "def", "splitting_of_is_iso_zero", ["category_theory", "splitting"]], ["add", "theorem", "splittings_comm", ["category_theory", "splitting"]], ["add", "theorem", "ι_retraction", ["category_theory", "splitting"]], ["add", "theorem", "π_section_eq_id_sub", ["category_theory", "splitting"]], ["add", "structure", "splitting", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "iso_biprod_zero", ["category_theory", "limits"]], ["add", "def", "iso_zero_biprod", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero_objects.lean", "newPath": "src/category_theory/limits/shapes/zero_objects.lean", "changes": []}]}, {"timestamp": 1652792780, "sha": "3d279118", "message": "feat(data/zmod/quotient): The minimal period equals the cardinality of the orbit (#14183)\nThis PR adds a lemma stating that `minimal_period ((•) a) b = card (orbit (zpowers a) b)`.", "changes": [{"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": [["add", "theorem", "minimal_period_eq_card", ["mul_action"]], ["mod", "theorem", "orbit_zpowers_equiv_symm_apply", ["mul_action"]]]}]}, {"timestamp": 1652792779, "sha": "3c87882b", "message": "feat(number_theory/arithmetic_function): map a multiplicative function across a product (#14180)", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "symmetric", ["nat", "coprime"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "map_prod", ["nat", "arithmetic_function", "is_multiplicative"]]]}]}, {"timestamp": 1652792778, "sha": "beee9ecb", "message": "feat(data/complex): real part of sum (#14177)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "im_sum", ["complex"]], ["mod", "theorem", "of_real_prod", ["complex"]], ["mod", "theorem", "of_real_sum", ["complex"]], ["add", "theorem", "re_sum", ["complex"]]]}]}, {"timestamp": 1652792777, "sha": "d3e3eb84", "message": "chore(algebra/monoid_algebra): clean up some bad decidable arguments (#14175)\nSome of these statements contained classical decidable instances rather than generalized ones.\nBy removing `open_locale classical`, these become easy to find.", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["mod", "theorem", "mul_apply", ["add_monoid_algebra"]], ["mod", "theorem", "support_mul", ["add_monoid_algebra"]], ["mod", "theorem", "mul_apply", ["monoid_algebra"]], ["mod", "theorem", "support_mul", ["monoid_algebra"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1652792776, "sha": "7db6ca99", "message": "test({data/{finset,set},order/filter}/pointwise): Ensure priority of the `ℕ` and `ℤ` actions (#14166)\nEach of `set`, `finset`, `filter` creates (non propeq) diamonds with the fundamental `ℕ` and `ℤ` actions because of instances of the form `has_scalar α β → has_scalar α (set β)`. For example, `{2, 3}^2` could well be `{4, 9}` or `{4, 6, 9}`.\nThe instances involved are all too important to be discarded, so we decide to live with the diamonds but give priority to the `ℕ` and `ℤ` actions. The reasoning for the priority is that those can't easily be spelled out, while the derived actions can. For example, `s.image ((•) 2)` easily replaces `2 • s`. Incidentally, additive combinatorics uses extensively the `ℕ` action.\nThis PR adds both a library note and tests to ensure this stays the case. It also fixes the additive `set` and `filter` versions, which were not conforming to the test.", "changes": [{"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": null, "newPath": "test/pointwise_nsmul.lean", "changes": []}]}, {"timestamp": 1652792774, "sha": "f33b0847", "message": "feat(topology/separation): generalize a lemma (#14154)\n* generalize `nhds_eq_nhds_iff` from a `[t1_space α]` to a `[t0_space α]`;\n* relate `indistinguishable` to `nhds`.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "nhds_def'", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "eq", ["indistinguishable"]], ["mod", "theorem", "indistinguishable_iff_closed", []], ["mod", "theorem", "indistinguishable_iff_closure", []], ["add", "theorem", "indistinguishable_iff_nhds_eq", []], ["mod", "theorem", "nhds_eq_nhds_iff", []]]}]}, {"timestamp": 1652792773, "sha": "65bf1349", "message": "split(algebra/hom/ring): Split off `algebra.ring.basic` (#14144)\nMove `non_unital_ring_hom` and `ring_hom` to a new file `algebra.hom.ring`.\nCrediting\n* Amelia for #1305\n* Jireh for #13430", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/hom/ring.lean", "changes": [["add", "theorem", "coe_add_monoid_hom_mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["add", "theorem", "coe_fn_mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["add", "def", "mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["add", "theorem", "map_bit1", []], ["add", "theorem", "cancel_left", ["non_unital_ring_hom"]], ["add", "theorem", "cancel_right", ["non_unital_ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_id", ["non_unital_ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_injective", ["non_unital_ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_mk", ["non_unital_ring_hom"]], ["add", "theorem", "coe_coe", ["non_unital_ring_hom"]], ["add", "theorem", "coe_comp", ["non_unital_ring_hom"]], ["add", "theorem", "coe_comp_add_monoid_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_comp_mul_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mk", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul_hom_id", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul_hom_injective", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul_hom_mk", ["non_unital_ring_hom"]], ["add", "theorem", "coe_one", ["non_unital_ring_hom"]], ["add", "theorem", "coe_to_add_monoid_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_to_mul_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_zero", ["non_unital_ring_hom"]], ["add", "def", "comp", ["non_unital_ring_hom"]], ["add", "theorem", "comp_apply", ["non_unital_ring_hom"]], ["add", "theorem", "comp_assoc", ["non_unital_ring_hom"]], ["add", "theorem", "comp_id", ["non_unital_ring_hom"]], ["add", "theorem", "comp_zero", ["non_unital_ring_hom"]], ["add", "theorem", "ext", ["non_unital_ring_hom"]], ["add", "theorem", "ext_iff", ["non_unital_ring_hom"]], ["add", "theorem", "id_apply", ["non_unital_ring_hom"]], ["add", "theorem", "id_comp", ["non_unital_ring_hom"]], ["add", "theorem", "mk_coe", ["non_unital_ring_hom"]], ["add", "theorem", "mul_def", ["non_unital_ring_hom"]], ["add", "theorem", "one_def", ["non_unital_ring_hom"]], ["add", "theorem", "to_fun_eq_coe", ["non_unital_ring_hom"]], ["add", "theorem", "zero_apply", ["non_unital_ring_hom"]], ["add", "theorem", "zero_comp", ["non_unital_ring_hom"]], ["add", "structure", "non_unital_ring_hom", []], ["add", "theorem", "cancel_left", ["ring_hom"]], ["add", "theorem", "cancel_right", ["ring_hom"]], ["add", "theorem", "codomain_trivial_iff_map_one_eq_zero", ["ring_hom"]], ["add", "theorem", "codomain_trivial_iff_range_eq_singleton_zero", ["ring_hom"]], ["add", "theorem", "codomain_trivial_iff_range_trivial", ["ring_hom"]], ["add", "theorem", "coe_add_monoid_hom", ["ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_id", ["ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_injective", ["ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_mk", ["ring_hom"]], ["add", "theorem", "coe_coe", ["ring_hom"]], ["add", "theorem", "coe_comp", ["ring_hom"]], ["add", "theorem", "coe_inj", ["ring_hom"]], ["add", "theorem", "coe_mk", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom_id", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom_injective", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom_mk", ["ring_hom"]], ["add", "theorem", "coe_mul", ["ring_hom"]], ["add", "theorem", "coe_one", ["ring_hom"]], ["add", "def", "comp", ["ring_hom"]], ["add", "theorem", "comp_apply", ["ring_hom"]], ["add", "theorem", "comp_assoc", ["ring_hom"]], ["add", "theorem", "comp_id", ["ring_hom"]], ["add", "theorem", "congr_arg", ["ring_hom"]], ["add", "theorem", "congr_fun", ["ring_hom"]], ["add", "def", "copy", ["ring_hom"]], ["add", "theorem", "domain_nontrivial", ["ring_hom"]], ["add", "theorem", "ext", ["ring_hom"]], ["add", "theorem", "ext_iff", ["ring_hom"]], ["add", "def", "id", ["ring_hom"]], ["add", "theorem", "id_apply", ["ring_hom"]], ["add", "theorem", "id_comp", ["ring_hom"]], ["add", "theorem", "is_unit_map", ["ring_hom"]], ["add", "theorem", "map_one_ne_zero", ["ring_hom"]], ["add", "def", "mk'", ["ring_hom"]], ["add", "theorem", "mk_coe", ["ring_hom"]], ["add", "theorem", "mul_def", ["ring_hom"]], ["add", "theorem", "one_def", ["ring_hom"]], ["add", "theorem", "to_add_monoid_hom_eq_coe", ["ring_hom"]], ["add", "theorem", "to_fun_eq_coe", ["ring_hom"]], ["add", "theorem", "to_monoid_hom_eq_coe", ["ring_hom"]], ["add", "theorem", "to_monoid_with_zero_hom_eq_coe", ["ring_hom"]], ["add", "structure", "ring_hom", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "coe_add_monoid_hom_mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["del", "theorem", "coe_fn_mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["del", "def", "mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["del", "theorem", "map_bit1", []], ["del", "theorem", "cancel_left", ["non_unital_ring_hom"]], ["del", "theorem", "cancel_right", ["non_unital_ring_hom"]], ["del", "theorem", "coe_add_monoid_hom_id", ["non_unital_ring_hom"]], ["del", "theorem", "coe_add_monoid_hom_injective", ["non_unital_ring_hom"]], ["del", "theorem", "coe_add_monoid_hom_mk", ["non_unital_ring_hom"]], ["del", "theorem", "coe_coe", ["non_unital_ring_hom"]], ["del", "theorem", "coe_comp", ["non_unital_ring_hom"]], ["del", "theorem", "coe_comp_add_monoid_hom", ["non_unital_ring_hom"]], ["del", "theorem", "coe_comp_mul_hom", ["non_unital_ring_hom"]], ["del", "theorem", "coe_mk", ["non_unital_ring_hom"]], ["del", "theorem", "coe_mul", ["non_unital_ring_hom"]], ["del", "theorem", "coe_mul_hom_id", ["non_unital_ring_hom"]], ["del", "theorem", "coe_mul_hom_injective", ["non_unital_ring_hom"]], ["del", "theorem", "coe_mul_hom_mk", ["non_unital_ring_hom"]], ["del", "theorem", "coe_one", ["non_unital_ring_hom"]], ["del", "theorem", "coe_to_add_monoid_hom", ["non_unital_ring_hom"]], ["del", "theorem", "coe_to_mul_hom", ["non_unital_ring_hom"]], ["del", "theorem", "coe_zero", ["non_unital_ring_hom"]], ["del", "def", "comp", ["non_unital_ring_hom"]], ["del", "theorem", "comp_apply", ["non_unital_ring_hom"]], ["del", "theorem", "comp_assoc", ["non_unital_ring_hom"]], ["del", "theorem", "comp_id", ["non_unital_ring_hom"]], ["del", "theorem", "comp_zero", ["non_unital_ring_hom"]], ["del", "theorem", "ext", ["non_unital_ring_hom"]], ["del", "theorem", "ext_iff", ["non_unital_ring_hom"]], ["del", "theorem", "id_apply", ["non_unital_ring_hom"]], ["del", "theorem", "id_comp", ["non_unital_ring_hom"]], ["del", "theorem", "mk_coe", ["non_unital_ring_hom"]], ["del", "theorem", "mul_def", ["non_unital_ring_hom"]], ["del", "theorem", "one_def", ["non_unital_ring_hom"]], ["del", "theorem", "to_fun_eq_coe", ["non_unital_ring_hom"]], ["del", "theorem", "zero_apply", ["non_unital_ring_hom"]], ["del", "theorem", "zero_comp", ["non_unital_ring_hom"]], ["del", "structure", "non_unital_ring_hom", []], ["del", "theorem", "cancel_left", ["ring_hom"]], ["del", "theorem", "cancel_right", ["ring_hom"]], ["del", "theorem", "codomain_trivial_iff_map_one_eq_zero", ["ring_hom"]], ["del", "theorem", "codomain_trivial_iff_range_eq_singleton_zero", ["ring_hom"]], ["del", "theorem", "codomain_trivial_iff_range_trivial", ["ring_hom"]], ["del", "theorem", "coe_add_monoid_hom", ["ring_hom"]], ["del", "theorem", "coe_add_monoid_hom_id", ["ring_hom"]], ["del", "theorem", "coe_add_monoid_hom_injective", ["ring_hom"]], ["del", "theorem", "coe_add_monoid_hom_mk", ["ring_hom"]], ["del", "theorem", "coe_coe", ["ring_hom"]], ["del", "theorem", "coe_comp", ["ring_hom"]], ["del", "theorem", "coe_inj", ["ring_hom"]], ["del", "theorem", "coe_mk", ["ring_hom"]], ["del", "theorem", "coe_monoid_hom", ["ring_hom"]], ["del", "theorem", "coe_monoid_hom_id", ["ring_hom"]], ["del", "theorem", "coe_monoid_hom_injective", ["ring_hom"]], ["del", "theorem", "coe_monoid_hom_mk", ["ring_hom"]], ["del", "theorem", "coe_mul", ["ring_hom"]], ["del", "theorem", "coe_one", ["ring_hom"]], ["del", "def", "comp", ["ring_hom"]], ["del", "theorem", "comp_apply", ["ring_hom"]], ["del", "theorem", "comp_assoc", ["ring_hom"]], ["del", "theorem", "comp_id", ["ring_hom"]], ["del", "theorem", "congr_arg", ["ring_hom"]], ["del", "theorem", "congr_fun", ["ring_hom"]], ["del", "def", "copy", ["ring_hom"]], ["del", "theorem", "domain_nontrivial", ["ring_hom"]], ["del", "theorem", "ext", ["ring_hom"]], ["del", "theorem", "ext_iff", ["ring_hom"]], ["del", "def", "id", ["ring_hom"]], ["del", "theorem", "id_apply", ["ring_hom"]], ["del", "theorem", "id_comp", ["ring_hom"]], ["del", "theorem", "is_unit_map", ["ring_hom"]], ["del", "theorem", "map_dvd", ["ring_hom"]], ["del", "theorem", "map_one_ne_zero", ["ring_hom"]], ["del", "def", "mk'", ["ring_hom"]], ["del", "theorem", "mk_coe", ["ring_hom"]], ["del", "theorem", "mul_def", ["ring_hom"]], ["del", "theorem", "one_def", ["ring_hom"]], ["del", "theorem", "to_add_monoid_hom_eq_coe", ["ring_hom"]], ["del", "theorem", "to_fun_eq_coe", ["ring_hom"]], ["del", "theorem", "to_monoid_hom_eq_coe", ["ring_hom"]], ["del", "theorem", "to_monoid_with_zero_hom_eq_coe", ["ring_hom"]], ["del", "structure", "ring_hom", []], ["mod", "theorem", "two_dvd_bit0", []]]}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}]}, {"timestamp": 1652792772, "sha": "4ae5e7a0", "message": "feat(data/polynomial/laurent): laurent polynomials are a module over polynomials (#14121)\nThis PR only introduces the instance `module R[X] R[T;T⁻¹]`.\nI isolated it from the rest, since I want to give special attention to whether there might be any issues declaring it a global instance and whether it should be localized or even simply a def. Edit: Eric seems happy with this instance!", "changes": [{"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": []}]}, {"timestamp": 1652792771, "sha": "46c42cc9", "message": "refactor(algebra/geom_sum): remove definition (#14120)\nThere's no need to have a separate definition `geom_sum := ∑ i in range n, x ^ i`. Instead it's better to just write the lemmas about the sum itself: that way `simp` lemmas fire \"in the wild\", without needing to rewrite expression in terms of `geom_sum` manually.", "changes": [{"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["del", "def", "geom_sum", []], ["del", "theorem", "geom_sum_def", []], ["mod", "theorem", "geom_sum_one", []], ["mod", "theorem", "geom_sum_pos", []], ["mod", "theorem", "geom_sum_succ'", []], ["mod", "theorem", "geom_sum_succ", []], ["mod", "theorem", "geom_sum_two", []], ["mod", "theorem", "geom_sum_zero", []], ["del", "def", "geom_sum₂", []], ["del", "theorem", "geom_sum₂_def", []], ["del", "theorem", "geom_sum₂_one", []], ["mod", "theorem", "geom_sum₂_with_one", []], ["del", "theorem", "geom_sum₂_zero", []], ["mod", "theorem", "neg_one_geom_sum", []], ["mod", "theorem", "one_geom_sum", []], ["mod", "theorem", "zero_geom_sum", []]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log/deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "eval_geom_sum", ["polynomial"]]]}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}]}, {"timestamp": 1652785213, "sha": "2370d104", "message": "chore(algebra/order/monoid): golf an instance (#14184)\nMove two instances below to reuse a proof.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}]}, {"timestamp": 1652759326, "sha": "f1c08cde", "message": "chore(scripts): update nolints.txt (#14185)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1652745721, "sha": "737784ef", "message": "refactor(algebra/{group_power/{basic,lemmas},group_with_zero/power}): Generalize lemmas to division monoids (#14102)\nGeneralize `group` and `group_with_zero` lemmas about `zpow` to `division_monoid`. Lemmas are renamed because one of the `group` or `group_with_zero` name has to go. It's just a matter of removing the suffixed `₀`.\nLemma renames", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "zpow_bit0_neg", []]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "bit0_neg", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "mul_zpow", ["commute"]], ["add", "theorem", "div_pow", []], ["mod", "theorem", "div_zpow", []], ["mod", "theorem", "inv_pow", []], ["mod", "theorem", "inv_pow_sub", []], ["add", "theorem", "inv_zpow'", []], ["mod", "theorem", "inv_zpow", []], ["mod", "theorem", "mul_zpow", []], ["mod", "theorem", "mul_zpow_neg_one", []], ["add", "theorem", "one_div_pow", []], ["add", "theorem", "one_div_zpow", []], ["mod", "theorem", "one_zpow", []], ["mod", "theorem", "pow_inv_comm", []], ["mod", "theorem", "pow_sub", []], ["mod", "def", "zpow_group_hom", []], ["mod", "theorem", "zpow_neg", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "zpow_bit0'", []], ["mod", "theorem", "zpow_bit0", []], ["add", "theorem", "zpow_bit0_neg", []], ["mod", "theorem", "zpow_mul'", []], ["mod", "theorem", "zpow_mul", []], ["mod", "theorem", "zpow_mul_comm", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "mul_zpow₀", ["commute"]], ["del", "theorem", "div_pow", []], ["del", "theorem", "div_zpow₀", []], ["del", "theorem", "inv_pow₀", []], ["del", "theorem", "inv_zpow'", []], ["del", "theorem", "inv_zpow₀", []], ["del", "theorem", "mul_zpow_neg_one₀", []], ["del", "theorem", "mul_zpow₀", []], ["del", "theorem", "one_div_pow", []], ["del", "theorem", "one_div_zpow", []], ["del", "theorem", "one_zpow₀", []], ["del", "theorem", "zpow_bit0'", []], ["del", "theorem", "zpow_bit0₀", []], ["del", "def", "zpow_group_hom₀", []], ["del", "theorem", "zpow_mul₀'", []], ["del", "theorem", "zpow_mul₀", []], ["del", "theorem", "zpow_neg_one₀", []], ["del", "theorem", "zpow_neg₀", []]]}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["mod", "theorem", "neg_one_zpow", ["even"]], ["mod", "theorem", "neg_one_zpow", ["odd"]]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/floor_pow.lean", "newPath": "src/analysis/specific_limits/floor_pow.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/probability/variance.lean", "newPath": "src/probability/variance.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_nat.lean", "newPath": "src/topology/metric_space/pi_nat.lean", "changes": []}]}, {"timestamp": 1652719099, "sha": "89f2760f", "message": "feat(number_theory/legendre_symbol/*): move characters on `zmod n` to new file, add API, improve a proof (#14178)\nThis is another \"administrative\" PR with the goal to have a better file structure.\nIt moves the section `quad_char_mod_p` from `quadratic_char.lean` to a new file `zmod_char.lean`.\nIt also adds some API lemmas for `χ₈` and `χ₈'` (which will be useful when dealing with the value of quadratic characters at 2 and -2), and I have used the opportunity to shorten the proof of `χ₄_eq_neg_one_pow`.", "changes": [{"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["del", "def", "χ₄", ["zmod"]], ["del", "theorem", "χ₄_eq_neg_one_pow", ["zmod"]], ["del", "theorem", "χ₄_int_eq_if_mod_four", ["zmod"]], ["del", "theorem", "χ₄_nat_eq_if_mod_four", ["zmod"]], ["del", "def", "χ₈'", ["zmod"]], ["del", "def", "χ₈", ["zmod"]]]}, {"oldPath": null, "newPath": "src/number_theory/legendre_symbol/zmod_char.lean", "changes": [["add", "def", "χ₄", ["zmod"]], ["add", "theorem", "χ₄_eq_neg_one_pow", ["zmod"]], ["add", "theorem", "χ₄_int_eq_if_mod_four", ["zmod"]], ["add", "theorem", "χ₄_nat_eq_if_mod_four", ["zmod"]], ["add", "theorem", "χ₄_trichotomy", ["zmod"]], ["add", "def", "χ₈'", ["zmod"]], ["add", "theorem", "χ₈'_eq_χ₄_mul_χ₈", ["zmod"]], ["add", "theorem", "χ₈'_int_eq_if_mod_eight", ["zmod"]], ["add", "theorem", "χ₈'_int_eq_χ₄_mul_χ₈", ["zmod"]], ["add", "theorem", "χ₈'_nat_eq_if_mod_eight", ["zmod"]], ["add", "theorem", "χ₈'_trichotomy", ["zmod"]], ["add", "def", "χ₈", ["zmod"]], ["add", "theorem", "χ₈_int_eq_if_mod_eight", ["zmod"]], ["add", "theorem", "χ₈_nat_eq_if_mod_eight", ["zmod"]], ["add", "theorem", "χ₈_trichotomy", ["zmod"]]]}]}, {"timestamp": 1652716339, "sha": "93dca41a", "message": "chore(geometry/manifold/algebra/left_invariant_derivation): golf some proofs (#14172)\nThe `simp only` had a bunch of lemmas that weren't used.", "changes": [{"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}]}, {"timestamp": 1652708573, "sha": "4586a97a", "message": "refactor(data/pi/lex): Use `lex`, provide notation (#14164)\nDelete `pilex ι β` in favor of `lex (Π i, β i)` which we provide `Πₗ i, β i` notation for.", "changes": [{"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/data/list/lex.lean", "newPath": "src/data/list/lex.lean", "changes": []}, {"oldPath": "src/data/pi/lex.lean", "newPath": "src/data/pi/lex.lean", "changes": [["add", "theorem", "le_of_forall_le", ["pi", "lex"]], ["del", "def", "lex", ["pi"]], ["add", "theorem", "of_lex_apply", ["pi"]], ["add", "theorem", "to_lex_apply", ["pi"]], ["del", "theorem", "le_of_forall_le", ["pilex"]], ["del", "def", "pilex", []]]}, {"oldPath": "src/data/prod/lex.lean", "newPath": "src/data/prod/lex.lean", "changes": []}, {"oldPath": "src/data/psigma/order.lean", "newPath": "src/data/psigma/order.lean", "changes": []}, {"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": []}]}, {"timestamp": 1652708572, "sha": "009669cb", "message": "feat(data/bool/basic): Kaminski's equation (#14159)\n`bool.apply_apply_apply : ∀ (f : bool → bool) (x : bool), f (f (f x)) = f x`", "changes": [{"oldPath": "src/data/bool/basic.lean", "newPath": "src/data/bool/basic.lean", "changes": [["add", "theorem", "apply_apply_apply", ["bool"]]]}]}, {"timestamp": 1652708571, "sha": "909b6732", "message": "split(data/set/semiring): Split off `data.set.pointwise` (#14145)\nMove `set_semiring` to a new file `data.set.semiring`.\nCrediting Floris for #3240", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["del", "theorem", "down_ssubset_down", ["set"]], ["del", "theorem", "down_subset_down", ["set"]], ["del", "def", "image_hom", ["set"]], ["del", "theorem", "up_le_up", ["set"]], ["del", "theorem", "up_lt_up", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/semiring.lean", "changes": [["add", "theorem", "down_ssubset_down", ["set_semiring"]], ["add", "theorem", "down_subset_down", ["set_semiring"]], ["add", "def", "image_hom", ["set_semiring"]], ["add", "theorem", "up_le_up", ["set_semiring"]], ["add", "theorem", "up_lt_up", ["set_semiring"]]]}]}, {"timestamp": 1652708569, "sha": "a9e74ab7", "message": "feat(order/filter/at_top_bot): use weaker TC assumptions, add lemmas (#14105)\n* add `filter.eventually_gt_of_tendsto_at_top`,\n `filter.eventually_ne_at_bot`,\n `filter.eventually_lt_of_tendsto_at_bot`;\n* generalize `filter.eventually_ne_of_tendsto_at_top` and\n `filter.eventually_ne_of_tendsto_at_bot` from nontrivial ordered\n (semi)rings to preorders with no maximal/minimal elements.", "changes": [{"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_ne_at_bot", ["filter"]], ["del", "theorem", "eventually_ne_of_tendsto_at_bot", ["filter"]], ["del", "theorem", "eventually_ne_of_tendsto_at_top", ["filter"]], ["add", "theorem", "eventually_ge_at_top", ["filter", "tendsto"]], ["add", "theorem", "eventually_gt_at_top", ["filter", "tendsto"]], ["add", "theorem", "eventually_le_at_bot", ["filter", "tendsto"]], ["add", "theorem", "eventually_lt_at_bot", ["filter", "tendsto"]], ["add", "theorem", "eventually_ne_at_bot", ["filter", "tendsto"]], ["add", "theorem", "eventually_ne_at_top", ["filter", "tendsto"]]]}]}, {"timestamp": 1652700885, "sha": "844a4f7b", "message": "refactor(algebra/hom/group): Generalize `map_inv` to division monoids (#14134)\nA minor change with unexpected instance synthesis breakage. A good deal of dot notation on `monoid_hom.map_inv` breaks, along with a few uses of `map_inv`. Expliciting the type fixes them all, but this is still quite concerning.", "changes": [{"oldPath": "src/algebra/group/ext.lean", "newPath": "src/algebra/group/ext.lean", "changes": []}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["del", "theorem", "coe_inv", ["units"]]]}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["mod", "theorem", "map_div'", []], ["mod", "theorem", "map_div", []], ["mod", "theorem", "map_inv", []], ["mod", "theorem", "map_mul_inv", []], ["mod", "theorem", "map_zpow", []], ["mod", "theorem", "map_zsmul", []]]}, {"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": [["add", "theorem", "coe_inv", ["units"]], ["mod", "theorem", "coe_zpow", ["units"]]]}, {"oldPath": "src/analysis/normed/group/hom_completion.lean", "newPath": "src/analysis/normed/group/hom_completion.lean", "changes": []}, {"oldPath": "src/category_theory/linear/linear_functor.lean", "newPath": "src/category_theory/linear/linear_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/functor_category.lean", "newPath": "src/category_theory/preadditive/functor_category.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}]}, {"timestamp": 1652700884, "sha": "90659cbe", "message": "fix(tactic/core): Make the `classical` tactic behave like `open_locale classical` (#14122)\nThis renames the existing `classical` tactic to `classical!`, and adds a new `classical` tactic that is equivalent to `open_locale classical`.\nComparing the effects of these:\n```lean\nimport tactic.interactive\nimport tactic.localized\n-- this uses the noncomputable instance\nnoncomputable def foo : decidable_eq ℕ :=\nλ m n, begin classical!, apply_instance, end\ndef bar : decidable_eq ℕ :=\nλ m n, begin classical, apply_instance, end\nsection\nopen_locale classical\ndef baz : decidable_eq ℕ :=\nλ m n, by apply_instance\nend\nexample : baz = bar := rfl\n```\nIn a few places `classical` was actually just being used as a `resetI`. Only a very small number of uses of `classical` actually needed the more aggressive `classical!` (there are roughtly 500 uses in total); while a number of `congr`s can be eliminated with this change.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/category_theory/category/PartialFun.lean", "newPath": "src/category_theory/category/PartialFun.lean", "changes": []}, {"oldPath": "src/combinatorics/hall/basic.lean", "newPath": "src/combinatorics/hall/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/inc_matrix.lean", "newPath": "src/combinatorics/simple_graph/inc_matrix.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}]}, {"timestamp": 1652692746, "sha": "df64e5e5", "message": "chore(set_theory/game/pgame): minor golf (#14171)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1652692745, "sha": "f4c67ee5", "message": "chore(group_theory/specific_groups/cyclic): golf `card_order_of_eq_totient_aux₁` and `card_order_of_eq_totient_aux₂` (#14161)\nRe-writing the proofs of `card_order_of_eq_totient_aux₁` and `card_order_of_eq_totient_aux₂` to use the new `sum_totient` introduced in #14007, and golfing them.", "changes": [{"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}]}, {"timestamp": 1652692744, "sha": "a5975e73", "message": "feat(data/int/basic): add theorem `int.div_mod_unique` (#14158)\nadd the `int` version of `div_mod_unique`.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1652692743, "sha": "f7a7c272", "message": "chore(ring_theory/ideal/local_ring): golf some proofs, add missing lemma (#14157)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "eq_iff_inv_mul", ["units"]], ["mod", "theorem", "inv_eq_of_mul_eq_one_right", ["units"]]]}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}]}, {"timestamp": 1652692741, "sha": "55b31e05", "message": "feat(data/zmod/quotient): `orbit (zpowers a) b` is a cycle of order `minimal_period ((•) a) b` (#14124)\nThis PR applies the orbit-stabilizer theorem to the action of a cyclic subgroup.", "changes": [{"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": [["add", "theorem", "orbit_zpowers_equiv_symm_apply", ["mul_action"]]]}]}, {"timestamp": 1652692740, "sha": "bc7a201e", "message": "feat(*): Pointwise monoids have distributive negations (#14114)\nMore instances of `has_distrib_neg`:\n* `function.injective.has_distrib_neg`, `function.surjective.has_distrib_neg`\n* `add_opposite`, `mul_opposite`\n* `set`, `finset`, `filter`", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/unitary.lean", "newPath": "src/algebra/star/unitary.lean", "changes": []}, {"oldPath": "src/data/finset/n_ary.lean", "newPath": "src/data/finset/n_ary.lean", "changes": [["add", "theorem", "image₂_distrib_subset_left", ["finset"]], ["add", "theorem", "image₂_distrib_subset_right", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "add_mul_subset", ["finset"]], ["add", "theorem", "mul_add_subset", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image2_distrib_subset_left", ["set"]], ["add", "theorem", "image2_distrib_subset_right", ["set"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "add_mul_subset", ["set"]], ["add", "theorem", "mul_add_subset", ["set"]]]}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": [["mod", "theorem", "coe_neg", ["matrix", "GL_pos"]], ["add", "theorem", "coe_neg_GL", ["matrix", "GL_pos"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["mod", "theorem", "coe_int_neg", ["matrix", "special_linear_group"]], ["mod", "theorem", "coe_neg", ["matrix", "special_linear_group"]]]}, {"oldPath": "src/order/filter/n_ary.lean", "newPath": "src/order/filter/n_ary.lean", "changes": [["add", "theorem", "map₂_distrib_le_left", ["filter"]], ["add", "theorem", "map₂_distrib_le_right", ["filter"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "add_mul_subset", ["filter"]], ["add", "theorem", "mul_add_subset", ["filter"]]]}]}, {"timestamp": 1652692739, "sha": "f0db51d4", "message": "feat(algebra/module): morphism classes for (semi)linear maps (#13939)\nThis PR introduces morphism classes corresponding to `mul_action_hom`, `distrib_mul_action_hom`, `mul_semiring_action_hom` and `linear_map`.\nMost of the new generic results work smoothly, only `simp` seems to have trouble applying `map_smulₛₗ`. I expect this requires another fix in the elaborator along the lines of [lean#659](https://github.com/leanprover-community/lean/pull/659). For now we can just keep around the specialized `simp` lemmas `linear_map.map_smulₛₗ` and `linear_equiv.map_smulₛₗ`.\nThe other changes are either making `map_smul` protected where it conflicts, or helping the elaborator unfold some definitions that previously were helped by the specific `map_smul` lemma suggesting the type.\nThanks to @dupuisf for updating and making this branch compile!\nCo-Authored-By: Frédéric Dupuis ", "changes": [{"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/hom/group_action.lean", "newPath": "src/algebra/hom/group_action.lean", "changes": [["mod", "theorem", "ext", ["distrib_mul_action_hom"]], ["mod", "theorem", "ext_iff", ["distrib_mul_action_hom"]], ["del", "theorem", "map_add", ["distrib_mul_action_hom"]], ["del", "theorem", "map_neg", ["distrib_mul_action_hom"]], ["del", "theorem", "map_smul", ["distrib_mul_action_hom"]], ["del", "theorem", "map_sub", ["distrib_mul_action_hom"]], ["del", "theorem", "map_zero", ["distrib_mul_action_hom"]], ["mod", "theorem", "ext", ["mul_action_hom"]], ["mod", "theorem", "ext_iff", ["mul_action_hom"]], ["del", "theorem", "map_smul", ["mul_action_hom"]], ["mod", "theorem", "ext", ["mul_semiring_action_hom"]], ["mod", "theorem", "ext_iff", ["mul_semiring_action_hom"]], ["del", "theorem", "map_add", ["mul_semiring_action_hom"]], ["del", "theorem", "map_mul", ["mul_semiring_action_hom"]], ["del", "theorem", "map_neg", ["mul_semiring_action_hom"]], ["del", "theorem", "map_one", ["mul_semiring_action_hom"]], ["del", "theorem", "map_smul", ["mul_semiring_action_hom"]], ["del", "theorem", "map_sub", ["mul_semiring_action_hom"]], ["del", "theorem", "map_zero", ["mul_semiring_action_hom"]]]}, {"oldPath": "src/algebra/module/equiv.lean", "newPath": "src/algebra/module/equiv.lean", "changes": [["del", "theorem", "map_smulₛₗ", ["linear_equiv"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["del", "theorem", "map_smul", ["linear_map"]], ["del", "theorem", "map_smul_inv", ["linear_map"]], ["del", "theorem", "map_smulₛₗ", ["linear_map"]], ["add", "def", "linear_map_class", []], ["add", "theorem", "map_smul_inv", ["semilinear_map_class"]]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/lax_milgram.lean", "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["del", "theorem", "map_smul", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "map_smul", ["measure_theory", "measure"]]]}]}, {"timestamp": 1652690531, "sha": "0d762850", "message": "doc(set_theory/surreal/basic): update docs (#14170)\nWe remove an incorrect remark about the order relations on `pgame`, and reference the branch on which the proof of surreal multiplication is being worked on.", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}]}, {"timestamp": 1652641527, "sha": "4cf20164", "message": "feat(order/cover): Covering elements are unique (#14156)\nIn a linear order, there's at most one element covering `a` and at most one element being covered by `a`.", "changes": [{"oldPath": "src/order/cover.lean", "newPath": "src/order/cover.lean", "changes": [["add", "theorem", "ge_of_gt", ["covby"]], ["add", "theorem", "le_of_lt", ["covby"]], ["add", "theorem", "unique_left", ["covby"]], ["add", "theorem", "unique_right", ["covby"]], ["add", "theorem", "ge_of_gt", ["wcovby"]], ["add", "theorem", "le_of_lt", ["wcovby"]]]}]}, {"timestamp": 1652631170, "sha": "00e80a63", "message": "feat (group_theory/perm/cycles): Add missing `is_cycle` lemma (#13219)\nAdd `is_cycle.pow_eq_pow_iff`, which extends `is_cycle.pow_eq_one_iff`.", "changes": [{"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["mod", "theorem", "pow_eq_one_iff", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "pow_eq_pow_iff", ["equiv", "perm", "is_cycle"]]]}]}, {"timestamp": 1652623467, "sha": "c1091050", "message": "chore(logic/equiv): golf equiv.subtype_equiv (#14125)\nThe naming is a bit all over the place, but I will fix this in a later PR.", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}]}, {"timestamp": 1652623466, "sha": "843240b0", "message": "feat(linear_algebra/matrix): invariant basis number for matrices (#13845)\nThis PR shows that invertible matrices over a ring with invariant basis number are square.", "changes": [{"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/invariant_basis_number.lean", "changes": [["add", "theorem", "square_of_invertible", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}]}, {"timestamp": 1652623466, "sha": "f9f64f37", "message": "move(data/prod/*): A `prod` folder (#13771)\nCreate folder `data.prod.` to hold `prod` files and related types. Precisely:\n* `data.prod` → `data.prod.basic`\n* `data.pprod` → `data.prod.pprod`\n* `data.tprod` → `data.prod.tprod`\n* `order.lexicographic` → `data.prod.lex`", "changes": [{"oldPath": "src/algebra/order/rearrangement.lean", "newPath": "src/algebra/order/rearrangement.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/data/fin/tuple/sort.lean", "newPath": "src/data/fin/tuple/sort.lean", "changes": []}, {"oldPath": "src/data/list/lex.lean", "newPath": "src/data/list/lex.lean", "changes": []}, {"oldPath": "src/data/pi/algebra.lean", "newPath": "src/data/pi/algebra.lean", "changes": []}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod/basic.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/data/prod/lex.lean", "changes": []}, {"oldPath": "src/data/pprod.lean", "newPath": "src/data/prod/pprod.lean", "changes": []}, {"oldPath": "src/data/tprod.lean", "newPath": "src/data/prod/tprod.lean", "changes": []}, {"oldPath": "src/data/psigma/order.lean", "newPath": "src/data/psigma/order.lean", "changes": []}, {"oldPath": "src/data/sigma/lex.lean", "newPath": "src/data/sigma/lex.lean", "changes": []}, {"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}]}, {"timestamp": 1652615886, "sha": "a74298d8", "message": "chore(order/lattice): reflow, golf (#14151)", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["mod", "theorem", "inf_le_inf_left", []], ["mod", "theorem", "inf_le_inf_right", []], ["mod", "theorem", "inf_left_comm", []], ["mod", "theorem", "inf_left_idem", []], ["mod", "theorem", "inf_left_right_swap", []], ["mod", "theorem", "inf_right_comm", []], ["mod", "theorem", "inf_right_idem", []], ["mod", "theorem", "le_of_inf_eq", []]]}]}, {"timestamp": 1652603871, "sha": "5c954e12", "message": "chore(order/conditionally_complete_lattice): General cleanup (#13319)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cInf_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["mod", "theorem", "cInf_le_cInf", []], ["mod", "theorem", "cInf_le_of_le", []], ["mod", "theorem", "cInf_lt_of_lt", []], ["mod", "theorem", "cSup_eq_of_forall_le_of_forall_lt_exists_gt", []], ["mod", "theorem", "cSup_eq_of_is_forall_le_of_forall_le_imp_ge", []], ["mod", "theorem", "cSup_inter_le", []], ["mod", "theorem", "cSup_le", []], ["mod", "theorem", "cSup_le_cSup", []], ["mod", "theorem", "cSup_le_iff", []], ["mod", "theorem", "csupr_const", []], ["mod", "theorem", "csupr_le", []], ["mod", "theorem", "exists_lt_of_cInf_lt", []], ["mod", "theorem", "exists_lt_of_cinfi_lt", []], ["mod", "theorem", "exists_lt_of_lt_cSup", []], ["mod", "theorem", "exists_lt_of_lt_csupr", []], ["mod", "theorem", "le_cInf", []], ["mod", "theorem", "le_cInf_iff", []], ["mod", "theorem", "le_cInf_inter", []], ["mod", "theorem", "le_cSup_of_le", []], ["mod", "theorem", "le_cinfi", []], ["mod", "theorem", "lt_cSup_of_lt", []], ["mod", "theorem", "coe_Inf", ["with_top"]], ["mod", "theorem", "coe_Sup", ["with_top"]]]}]}, {"timestamp": 1652578274, "sha": "b8d8a5e4", "message": "refactor(set_theory/game/*): Fix bad notation `<` on (pre-)games (#13963)\nOur current definition for `<` on pre-games is, in the wider mathematical literature, referred to as `⧏` (less or fuzzy to). Conversely, what's usually referred to by `<` coincides with the relation we get from `preorder pgame` (which the current API avoids using at all).\nWe rename `<` to `⧏`, and add the basic API for both the new `<` and `⧏` relations. This allows us to define new instances on `pgame` and `game` that we couldn't before. We also take the opportunity to add some basic API on the fuzzy relation `∥`.\nSee the [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Surreal.20numbers/near/281094687).", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["add", "theorem", "add_lf_add_left", ["game"]], ["add", "theorem", "add_lf_add_right", ["game"]], ["add", "def", "fuzzy", ["game"]], ["del", "theorem", "le_antisymm", ["game"]], ["del", "theorem", "le_refl", ["game"]], ["del", "theorem", "le_rfl", ["game"]], ["del", "theorem", "le_trans", ["game"]], ["add", "def", "lf", ["game"]], ["del", "theorem", "lt_or_eq_of_le", ["game"]], ["mod", "theorem", "not_le", ["game"]], ["add", "theorem", "not_lf", ["game"]], ["del", "theorem", "not_lt", ["game"]], ["del", "def", "ordered_add_comm_group", ["game"]], ["del", "def", "partial_order", ["game"]]]}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": [["mod", "theorem", "first_wins_symm'", ["pgame", "impartial"]], ["mod", "theorem", "first_wins_symm", ["pgame", "impartial"]], ["add", "theorem", "lf_zero_iff", ["pgame", "impartial"]], ["del", "theorem", "lt_zero_iff", ["pgame", "impartial"]], ["add", "theorem", "nonneg", ["pgame", "impartial"]], ["add", "theorem", "nonpos", ["pgame", "impartial"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": [["add", "theorem", "to_pgame_lf", ["ordinal"]], ["add", "theorem", "to_pgame_lf_iff", ["ordinal"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "add_lf_add_left", ["pgame"]], ["add", "theorem", "add_lf_add_right", ["pgame"]], ["add", "theorem", "is_empty", ["pgame", "equiv"]], ["add", "theorem", "not_fuzzy'", ["pgame", "equiv"]], ["add", "theorem", "not_fuzzy", ["pgame", "equiv"]], ["mod", "theorem", "equiv_rfl", ["pgame"]], ["add", "theorem", "not_equiv'", ["pgame", "fuzzy"]], ["add", "theorem", "not_equiv", ["pgame", "fuzzy"]], ["add", "theorem", "swap", ["pgame", "fuzzy"]], ["add", "theorem", "swap_iff", ["pgame", "fuzzy"]], ["add", "def", "fuzzy", ["pgame"]], ["add", "theorem", "fuzzy_congr", ["pgame"]], ["add", "theorem", "fuzzy_congr_imp", ["pgame"]], ["add", "theorem", "fuzzy_congr_left", ["pgame"]], ["add", "theorem", "fuzzy_congr_right", ["pgame"]], ["add", "theorem", "fuzzy_irrefl", ["pgame"]], ["add", "theorem", "fuzzy_of_equiv_of_fuzzy", ["pgame"]], ["add", "theorem", "fuzzy_of_fuzzy_of_equiv", ["pgame"]], ["add", "theorem", "half_add_half_equiv_one", ["pgame"]], ["mod", "theorem", "le_congr", ["pgame"]], ["add", "theorem", "le_congr_imp", ["pgame"]], ["add", "theorem", "le_congr_left", ["pgame"]], ["add", "theorem", "le_congr_right", ["pgame"]], ["add", "theorem", "le_def_lf", ["pgame"]], ["del", "theorem", "le_def_lt", ["pgame"]], ["del", "theorem", "le_iff_neg_ge", ["pgame"]], ["add", "def", "le_lf", ["pgame"]], ["del", "def", "le_lt", ["pgame"]], ["mod", "theorem", "le_of_equiv_of_le", ["pgame"]], ["mod", "theorem", "le_of_le_of_equiv", ["pgame"]], ["add", "theorem", "le_or_gf", ["pgame"]], ["del", "theorem", "le_trans", ["pgame"]], ["del", "theorem", "le_trans_aux", ["pgame"]], ["mod", "theorem", "le_zero", ["pgame"]], ["del", "theorem", "le_zero_iff_zero_le_neg", ["pgame"]], ["add", "theorem", "le_zero_lf", ["pgame"]], ["add", "def", "lf", ["pgame"]], ["add", "theorem", "lf_congr", ["pgame"]], ["add", "theorem", "lf_congr_imp", ["pgame"]], ["add", "theorem", "lf_congr_left", ["pgame"]], ["add", "theorem", "lf_congr_right", ["pgame"]], ["add", "theorem", "lf_def", ["pgame"]], ["add", "theorem", "lf_def_le", ["pgame"]], ["add", "theorem", "lf_iff_lt_or_fuzzy", ["pgame"]], ["add", "theorem", "lf_iff_sub_zero_lf", ["pgame"]], ["add", "theorem", "lf_irrefl", ["pgame"]], ["add", "theorem", "lf_mk", ["pgame"]], ["add", "theorem", "lf_mk_of_le", ["pgame"]], ["add", "theorem", "lf_move_right", ["pgame"]], ["add", "theorem", "lf_move_right_of_le", ["pgame"]], ["add", "theorem", "lf_of_equiv_of_lf", ["pgame"]], ["add", "theorem", "lf_of_fuzzy", ["pgame"]], ["add", "theorem", "lf_of_le_mk", ["pgame"]], ["add", "theorem", "lf_of_le_move_left", ["pgame"]], ["add", "theorem", "lf_of_le_of_lf", ["pgame"]], ["add", "theorem", "lf_of_lf_of_equiv", ["pgame"]], ["add", "theorem", "lf_of_lf_of_le", ["pgame"]], ["add", "theorem", "lf_of_lf_of_lt", ["pgame"]], ["add", "theorem", "lf_of_lt", ["pgame"]], ["add", "theorem", "lf_of_lt_of_lf", ["pgame"]], ["add", "theorem", "lf_of_mk_le", ["pgame"]], ["add", "theorem", "lf_of_move_right_le", ["pgame"]], ["add", "theorem", "lf_or_equiv_of_le", ["pgame"]], ["add", "theorem", "lf_or_equiv_or_gf", ["pgame"]], ["add", "theorem", "lf_zero", ["pgame"]], ["add", "theorem", "lf_zero_le", ["pgame"]], ["add", "theorem", "lt_congr_imp", ["pgame"]], ["add", "theorem", "lt_congr_left", ["pgame"]], ["add", "theorem", "lt_congr_right", ["pgame"]], ["del", "theorem", "lt_def", ["pgame"]], ["del", "theorem", "lt_def_le", ["pgame"]], ["add", "theorem", "lt_iff_le_and_lf", ["pgame"]], ["del", "theorem", "lt_iff_neg_gt", ["pgame"]], ["del", "theorem", "lt_mk", ["pgame"]], ["del", "theorem", "lt_mk_of_le", ["pgame"]], ["del", "theorem", "lt_move_right", ["pgame"]], ["del", "theorem", "lt_move_right_of_le", ["pgame"]], ["mod", "theorem", "lt_of_equiv_of_lt", ["pgame"]], ["del", "theorem", "lt_of_le_mk", ["pgame"]], ["del", "theorem", "lt_of_le_move_left", ["pgame"]], ["add", "theorem", "lt_of_le_of_lf", ["pgame"]], ["del", "theorem", "lt_of_le_of_lt", ["pgame"]], ["mod", "theorem", "lt_of_lt_of_equiv", ["pgame"]], ["del", "theorem", "lt_of_lt_of_le", ["pgame"]], ["del", "theorem", "lt_of_mk_le", ["pgame"]], ["del", "theorem", "lt_of_move_right_le", ["pgame"]], ["del", "theorem", "lt_or_equiv_of_le", ["pgame"]], ["del", "theorem", "lt_or_equiv_or_gt", ["pgame"]], ["add", "theorem", "lt_or_equiv_or_gt_or_fuzzy", ["pgame"]], ["add", "theorem", "lt_or_fuzzy_of_lf", ["pgame"]], ["del", "theorem", "lt_zero", ["pgame"]], ["add", "theorem", "mk_lf", ["pgame"]], ["add", "theorem", "mk_lf_mk", ["pgame"]], ["add", "theorem", "mk_lf_of_le", ["pgame"]], ["del", "theorem", "mk_lt", ["pgame"]], ["del", "theorem", "mk_lt_mk", ["pgame"]], ["del", "theorem", "mk_lt_of_le", ["pgame"]], ["add", "theorem", "move_left_lf", ["pgame"]], ["add", "theorem", "move_left_lf_of_le", ["pgame"]], ["del", "theorem", "move_left_lt", ["pgame"]], ["del", "theorem", "move_left_lt_of_le", ["pgame"]], ["add", "theorem", "neg_le_iff", ["pgame"]], ["add", "theorem", "neg_le_zero_iff", ["pgame"]], ["add", "theorem", "neg_lf_iff", ["pgame"]], ["add", "theorem", "neg_lf_zero_iff", ["pgame"]], ["add", "theorem", "neg_lt_iff", ["pgame"]], ["add", "theorem", "neg_lt_zero_iff", ["pgame"]], ["add", "theorem", "not_fuzzy_of_ge", ["pgame"]], ["add", "theorem", "not_fuzzy_of_le", ["pgame"]], ["del", "theorem", "not_le", ["pgame"]], ["add", "theorem", "not_lf", ["pgame"]], ["del", "theorem", "not_lt", ["pgame"]], ["add", "theorem", "star_fuzzy_zero", ["pgame"]], ["del", "theorem", "star_lt_zero", ["pgame"]], ["mod", "theorem", "zero_le", ["pgame"]], ["del", "theorem", "zero_le_iff_neg_le_zero", ["pgame"]], ["add", "theorem", "zero_le_lf", ["pgame"]], ["add", "theorem", "zero_le_neg_iff", ["pgame"]], ["mod", "theorem", "zero_le_one", ["pgame"]], ["add", "theorem", "zero_lf", ["pgame"]], ["add", "theorem", "zero_lf_le", ["pgame"]], ["add", "theorem", "zero_lf_neg_iff", ["pgame"]], ["add", "theorem", "zero_lf_one", ["pgame"]], ["del", "theorem", "zero_lt", ["pgame"]], ["add", "theorem", "zero_lt_neg_iff", ["pgame"]], ["del", "theorem", "zero_lt_star", ["pgame"]]]}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": [["add", "def", "le_lf_decidable", ["pgame"]], ["del", "def", "le_lt_decidable", ["pgame"]]]}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": [["mod", "def", "first_loses", ["pgame"]], ["mod", "def", "first_wins", ["pgame"]], ["mod", "theorem", "first_wins_of_equiv_iff", ["pgame"]], ["mod", "def", "left_wins", ["pgame"]], ["mod", "theorem", "left_wins_of_equiv_iff", ["pgame"]], ["mod", "theorem", "one_left_wins", ["pgame"]], ["mod", "def", "right_wins", ["pgame"]], ["mod", "theorem", "right_wins_of_equiv_iff", ["pgame"]], ["mod", "theorem", "star_first_wins", ["pgame"]], ["mod", "theorem", "winner_cases", ["pgame"]], ["mod", "theorem", "zero_first_loses", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "add_lf_add", ["pgame"]], ["del", "theorem", "add_lt_add", ["pgame"]], ["del", "theorem", "half_add_half_equiv_one", ["pgame"]], ["add", "theorem", "le_of_lf", ["pgame"]], ["del", "theorem", "le_of_lt", ["pgame"]], ["add", "theorem", "lf_asymm", ["pgame"]], ["add", "theorem", "lf_iff_lt", ["pgame"]], ["del", "theorem", "lt_asymm", ["pgame"]], ["del", "theorem", "lt_iff_le_not_le", ["pgame"]], ["add", "theorem", "lt_of_lf", ["pgame"]], ["del", "theorem", "lt_trans'", ["pgame"]], ["del", "theorem", "lt_trans", ["pgame"]], ["add", "theorem", "not_fuzzy", ["pgame"]], ["mod", "theorem", "le_move_right", ["pgame", "numeric"]], ["add", "theorem", "lt_move_right", ["pgame", "numeric"]], ["mod", "theorem", "move_left_le", ["pgame", "numeric"]], ["add", "theorem", "move_left_lt", ["pgame", "numeric"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1652571875, "sha": "1f00800d", "message": "feat(linear_algebra/projection) : projections are conjugate to prod_map id 0 (#13802)", "changes": [{"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["add", "def", "cod_restrict", ["linear_map", "is_proj"]], ["add", "theorem", "cod_restrict_apply", ["linear_map", "is_proj"]], ["add", "theorem", "cod_restrict_apply_cod", ["linear_map", "is_proj"]], ["add", "theorem", "cod_restrict_ker", ["linear_map", "is_proj"]], ["add", "theorem", "eq_conj_prod_map'", ["linear_map", "is_proj"]], ["add", "theorem", "eq_conj_prod_map", ["linear_map", "is_proj"]], ["add", "theorem", "is_compl", ["linear_map", "is_proj"]], ["add", "structure", "is_proj", ["linear_map"]], ["add", "theorem", "is_proj_iff_idempotent", ["linear_map"]]]}]}, {"timestamp": 1652568402, "sha": "e7386121", "message": "feat(analysis/special_functions/exp_deriv): generalize some lemmas about `complex.exp`, remove `*.cexp_real` (#13579)\nNow we can use `*.cexp` instead of some previous `*.cexp_real` lemmas.\n- [x] depends on: #13575", "changes": [{"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": [["mod", "theorem", "cont_diff_exp", ["complex"]], ["mod", "theorem", "differentiable_at_exp", ["complex"]], ["mod", "theorem", "differentiable_exp", ["complex"]], ["mod", "theorem", "cexp", ["cont_diff"]], ["mod", "theorem", "cexp", ["cont_diff_at"]], ["mod", "theorem", "cexp", ["cont_diff_on"]], ["mod", "theorem", "cexp", ["cont_diff_within_at"]], ["mod", "theorem", "deriv_cexp", []], ["mod", "theorem", "deriv_within_cexp", []], ["mod", "theorem", "cexp", ["differentiable"]], ["mod", "theorem", "cexp", ["differentiable_at"]], ["mod", "theorem", "cexp", ["differentiable_on"]], ["mod", "theorem", "cexp", ["differentiable_within_at"]], ["del", "theorem", "cexp_real", ["has_deriv_at"]], ["del", "theorem", "cexp_real", ["has_deriv_within_at"]], ["del", "theorem", "cexp_real", ["has_strict_deriv_at"]]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}]}, {"timestamp": 1652548174, "sha": "570db888", "message": "feat(category_theory): missing comp_ite lemma (#14143)\nWe already have `comp_dite`.", "changes": [{"oldPath": "src/category_theory/category/basic.lean", "newPath": "src/category_theory/category/basic.lean", "changes": [["add", "theorem", "comp_ite", ["category_theory"]], ["add", "theorem", "ite_comp", ["category_theory"]]]}]}, {"timestamp": 1652548173, "sha": "ad5edeb5", "message": "feat(algebra/big_operators): prod_ite_irrel (#14142)\nA few missing lemams in `big_operators/basic.lean`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_dite_irrel", ["finset"]], ["add", "theorem", "prod_erase_eq_div", ["finset"]], ["add", "theorem", "prod_ite_irrel", ["finset"]], ["add", "theorem", "prod_sdiff_eq_div", ["finset"]]]}]}, {"timestamp": 1652548172, "sha": "05997bda", "message": "chore(set_theory/ordinal/{basic, arithmetic}): Remove redundant `function` namespace (#14133)", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["mod", "theorem", "not_injective_of_ordinal", []], ["mod", "theorem", "not_surjective_of_ordinal", []]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1652548171, "sha": "9d022d77", "message": "doc(data/real/sqrt): Fix typo in described theorem (#14126)\nThe previous statement was not true. e.g. sqrt 4 <= 3 does not imply 4 * 4 <= 3", "changes": [{"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}]}, {"timestamp": 1652548170, "sha": "4125b9ad", "message": "chore(category_theory/*): move some elementwise lemmas earlier (#13998)", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Ring/basic.lean", "newPath": "src/algebra/category/Ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["del", "theorem", "coe_hom_inv_id", ["category_theory"]], ["del", "theorem", "coe_inv_hom_id", ["category_theory"]]]}, {"oldPath": "src/category_theory/concrete_category/elementwise.lean", "newPath": "src/category_theory/concrete_category/elementwise.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/elementwise.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1652543440, "sha": "c992b04d", "message": "feat(set_theory/cardinal/cofinality): Cofinality of `nfp` and `deriv` (#12556)", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "deriv_bfamily_lt_ord", ["cardinal"]], ["add", "theorem", "deriv_bfamily_lt_ord_lift", ["cardinal"]], ["add", "theorem", "deriv_family_lt_ord", ["cardinal"]], ["add", "theorem", "deriv_family_lt_ord_lift", ["cardinal"]], ["add", "theorem", "deriv_lt_ord", ["cardinal"]], ["add", "theorem", "nfp_bfamily_lt_ord_lift_of_is_regular", ["cardinal"]], ["add", "theorem", "nfp_bfamily_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "nfp_family_lt_ord_lift_of_is_regular", ["cardinal"]], ["add", "theorem", "nfp_family_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "nfp_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "nfp_bfamily_lt_ord", ["ordinal"]], ["add", "theorem", "nfp_bfamily_lt_ord_lift", ["ordinal"]], ["add", "theorem", "nfp_family_lt_ord", ["ordinal"]], ["add", "theorem", "nfp_family_lt_ord_lift", ["ordinal"]], ["add", "theorem", "nfp_lt_ord", ["ordinal"]]]}]}, {"timestamp": 1652532536, "sha": "6d4c2027", "message": "feat(analysis/specific_limits/floor_pow): auxiliary results on series involving floors of powers (#13850)", "changes": [{"oldPath": null, "newPath": "src/analysis/specific_limits/floor_pow.lean", "changes": [["add", "theorem", "mul_pow_le_nat_floor_pow", []], ["add", "theorem", "sum_div_nat_floor_pow_sq_le_div_sq", []], ["add", "theorem", "sum_div_pow_sq_le_div_sq", []], ["add", "theorem", "tendsto_div_of_monotone_of_exists_subseq_tendsto_div", []], ["add", "theorem", "tendsto_div_of_monotone_of_tendsto_div_floor_pow", []]]}]}, {"timestamp": 1652525488, "sha": "ba9d551a", "message": "chore(algebra/invertible): minor golf (#14141)", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "theorem", "inv_of_inv_of", []], ["mod", "theorem", "inv_of_mul", []], ["mod", "theorem", "nonempty_invertible_iff_is_unit", []]]}]}, {"timestamp": 1652516178, "sha": "79bc06bf", "message": "feat(linear_algebra/matrix/to_lin): equivalence via right multiplication (#13870)\nA very partial generalization of `linear_algebra/matrix/to_lin` to non-commutative rings.\nThis is far from a complete refactor of the file; it just adds enough for what I need in representation theory immediately.\nI've left an extensive note explaining what should be done in a later refactor, but I don't want to have to do this all at once.\nSee discussion on [zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/matrices).", "changes": [{"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "def", "to_matrix_right'", ["linear_map"]], ["mod", "def", "mul_vec_lin", ["matrix"]], ["del", "theorem", "mul_vec_lin_apply", ["matrix"]], ["add", "def", "to_linear_equiv_right'_of_inv", ["matrix"]], ["add", "def", "to_linear_map_right'", ["matrix"]], ["add", "theorem", "to_linear_map_right'_apply", ["matrix"]], ["add", "theorem", "to_linear_map_right'_mul", ["matrix"]], ["add", "theorem", "to_linear_map_right'_mul_apply", ["matrix"]], ["add", "theorem", "to_linear_map_right'_one", ["matrix"]], ["add", "def", "vec_mul_linear", ["matrix"]], ["add", "theorem", "vec_mul_std_basis", ["matrix"]]]}]}, {"timestamp": 1652513324, "sha": "21a71de1", "message": "chore(*): use notation instead of `set.*` (#14139)", "changes": [{"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["mod", "def", "ne_top_bot_equiv_real", ["ereal"]]]}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": [["mod", "theorem", "continuous_on_to_real", ["ereal"]], ["mod", "def", "ne_bot_top_homeomorph_real", ["ereal"]]]}]}, {"timestamp": 1652506772, "sha": "38244939", "message": "refactor(group_theory/free_abelian_group): Make proofs more robust (#14089)\nReduce the API breakage by proving `distrib (free_abelian_group α)` and `has_distrib_neg (free_abelian_group α)` earlier. Protect lemmas to avoid shadowing the root ones.", "changes": [{"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "lift_neg'", ["free_abelian_group"]], ["del", "theorem", "map_add", ["free_abelian_group"]], ["del", "theorem", "map_neg", ["free_abelian_group"]], ["del", "theorem", "map_sub", ["free_abelian_group"]], ["del", "theorem", "map_zero", ["free_abelian_group"]], ["mod", "theorem", "mul_def", ["free_abelian_group"]], ["mod", "theorem", "of_mul_of", ["free_abelian_group"]]]}]}, {"timestamp": 1652504553, "sha": "9f5b3280", "message": "feat(.github/workflows): restore merge_conflicts action, running on cron (#14137)", "changes": [{"oldPath": null, "newPath": ".github/workflows/merge_conflicts.yml", "changes": []}]}, {"timestamp": 1652459743, "sha": "b7e20ca0", "message": "feat(data/polynomial/degree/definitions): two more `nat_degree_le` lemmas (#14098)\nThis PR is similar to #14095. It proves the `le` version of `nat_degree_X_pow` and `nat_degree_monomial`.\nThese lemmas are analogous to the existing `nat_degree_X_le` and `nat_degree_C_mul_X_pow_le`.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "nat_degree_X_pow_le", ["polynomial"]], ["mod", "theorem", "nat_degree_monomial", ["polynomial"]], ["add", "theorem", "nat_degree_monomial_le", ["polynomial"]]]}]}, {"timestamp": 1652456527, "sha": "6b7fa7ab", "message": "feat(data/nat/totient): add `totient_div_of_dvd` and golf `sum_totient` (#14007)\nAdd lemma `totient_div_of_dvd`: for `d ∣ n`, the totient of `n/d` equals the number of values `k < n` such that `gcd n k = d`.\nUse this to golf `sum_totient`, now stated in terms of `divisors`. This proof follows that of Theorem 2.2 in Apostol (1976) Introduction to Analytic Number Theory.\nAdapt the proof of `nth_roots_one_eq_bUnion_primitive_roots'` to use the new `sum_totient`.\nRe-prove the original statement of `sum_totient` for compatibility with uses in `group_theory/specific_groups/cyclic` — may delete this if those uses can be adapted to the new statement.", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "sum_totient'", ["nat"]], ["mod", "theorem", "sum_totient", ["nat"]], ["add", "theorem", "totient_div_of_dvd", ["nat"]]]}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1652448237, "sha": "55cd1047", "message": "feat(archive/imo/imo1975_q1): Add the formalization of IMO 1975 Q1 (#13047)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1975_q1.lean", "changes": [["add", "theorem", "IMO_1975_Q1", []]]}]}, {"timestamp": 1652435629, "sha": "caa1352a", "message": "feat(data/zmod/quotient): Multiplicative version of `zmultiples_quotient_stabilizer_equiv` (#13948)\nThis PR adds a multiplicative version of `zmultiples_quotient_stabilizer_equiv`.", "changes": [{"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": [["add", "theorem", "zpowers_quotient_stabilizer_equiv_symm_apply", ["mul_action"]]]}]}, {"timestamp": 1652435628, "sha": "03da6818", "message": "feat(representation_theory): fdRep k G, the category of finite dim representations of G (#13740)\nWe verify that this inherits the rigid monoidal structure from `FinVect G` when `G` is a group.", "changes": [{"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": []}, {"oldPath": null, "newPath": "src/representation_theory/fdRep.lean", "changes": [["add", "def", "of", ["fdRep"]], ["add", "def", "fdRep", []]]}]}, {"timestamp": 1652427502, "sha": "6a48b384", "message": "feat(topology/uniform_space): lemmas about `s ○ s ○ ... ○ s ⊆ t` (#14051)", "changes": [{"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": [["add", "theorem", "eventually_small_sets_subset", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "eventually_uniformity_comp_subset", []], ["add", "theorem", "eventually_uniformity_iterate_comp_subset", []], ["add", "theorem", "left_subset_comp_rel", []], ["add", "theorem", "right_subset_comp_rel", []], ["mod", "theorem", "subset_comp_self", []], ["add", "theorem", "subset_iterate_comp_rel", []], ["add", "theorem", "mk_mem_comm", ["symmetric_rel"]]]}]}, {"timestamp": 1652418829, "sha": "3185c251", "message": "feat(data/list/{count,perm},data/multiset/basic): countp and count lemmas (#14108)", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "count_eq_zero", ["list"]], ["add", "theorem", "countp_cons", ["list"]], ["add", "theorem", "countp_eq_zero", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "countp_eq_countp_filter_add", ["list"]], ["add", "theorem", "filter_append_perm", ["list"]], ["add", "theorem", "countp_congr", ["list", "perm"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "card_eq_countp_add_countp", ["multiset"]], ["add", "theorem", "count_eq_card", ["multiset"]], ["add", "theorem", "count_le_card", ["multiset"]], ["add", "theorem", "countp_congr", ["multiset"]], ["add", "theorem", "countp_eq_card", ["multiset"]], ["add", "theorem", "countp_eq_countp_filter_add", ["multiset"]], ["add", "theorem", "countp_eq_zero", ["multiset"]], ["add", "theorem", "countp_false", ["multiset"]], ["add", "theorem", "countp_le_card", ["multiset"]], ["add", "theorem", "countp_true", ["multiset"]]]}]}, {"timestamp": 1652418828, "sha": "23a22058", "message": "chore(data/real/ennreal): tidy some proofs (#14101)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}]}, {"timestamp": 1652418827, "sha": "7b7af48b", "message": "feat(set_theory/ordinal/basic): Order isomorphism between `o.out.α` and `set.Iio o` (#14074)\nThis strengthens the previously existing equivalence.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "def", "enum_iso", ["ordinal"]], ["del", "def", "typein_iso", ["ordinal"]]]}]}, {"timestamp": 1652418826, "sha": "26f41120", "message": "feat(topology/uniform_space/separation): add `filter.has_basis.mem_separation_rel` (#14050)\n* add `filter.has_basis.mem_separation_rel`;\n* add `filter.has_basis.forall_mem_mem`, use it in\n `filter.has_basis.sInter_sets`;\n* replace two remaining `lift' powerset` with `small_sets`.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "forall_mem_mem", ["filter", "has_basis"]]]}, {"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["add", "theorem", "mem_separation_rel", ["filter", "has_basis"]]]}]}, {"timestamp": 1652418825, "sha": "a2e671bb", "message": "feat(number_theory/von_mangoldt): simple bounds on von mangoldt function (#14033)\nFrom the unit fractions project.\nMore interesting bounds such as the chebyshev bounds coming soon, but for now here are some easy upper and lower bounds.", "changes": [{"oldPath": "src/number_theory/von_mangoldt.lean", "newPath": "src/number_theory/von_mangoldt.lean", "changes": [["add", "theorem", "von_mangoldt_eq_zero_iff", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_le_log", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_ne_zero_iff", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_pos_iff", ["nat", "arithmetic_function"]]]}]}, {"timestamp": 1652418824, "sha": "644cae5e", "message": "feat(set_theory/cardinal/cofinality): Move fundamental sequence results to namespace (#14020)\nWe put most results about fundamental sequences in the `is_fundamental_sequence` namespace. We also take the opportunity to add a simple missing theorem, `ord_cof`.", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["mod", "theorem", "blsub_eq", ["ordinal", "is_fundamental_sequence"]], ["del", "theorem", "cof_eq", ["ordinal", "is_fundamental_sequence"]], ["add", "theorem", "id_of_le_cof", ["ordinal", "is_fundamental_sequence"]], ["del", "theorem", "monotone", ["ordinal", "is_fundamental_sequence"]], ["add", "theorem", "ord_cof", ["ordinal", "is_fundamental_sequence"]], ["del", "theorem", "strict_mono", ["ordinal", "is_fundamental_sequence"]], ["mod", "theorem", "trans", ["ordinal", "is_fundamental_sequence"]], ["del", "theorem", "is_fundamental_sequence_id_of_le_cof", ["ordinal"]], ["del", "theorem", "is_fundamental_sequence_succ", ["ordinal"]], ["del", "theorem", "is_fundamental_sequence_zero", ["ordinal"]]]}]}, {"timestamp": 1652410431, "sha": "c53285a8", "message": "feat(order/filter/lift): drop an unneeded assumption (#14117)\nDrop `monotone _` assumptions in `filter.comap_lift_eq` and `filter.comap_lift'_eq`.", "changes": [{"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "comap_lift'_eq", ["filter"]], ["mod", "theorem", "comap_lift_eq", ["filter"]]]}, {"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1652410430, "sha": "85124aff", "message": "chore(algebra/order/field): fill in TODO for inv anti lemmas (#14112)", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "inv_pow_anti", []], ["add", "theorem", "inv_pow_le_inv_pow_of_le", []], ["add", "theorem", "inv_pow_lt_inv_pow_of_lt", []], ["add", "theorem", "inv_pow_strict_anti", []], ["add", "theorem", "inv_strict_anti_on", []]]}]}, {"timestamp": 1652410429, "sha": "462b9509", "message": "chore(algebra/order/field): fill in missing lemma (#14111)\nWe had `inv_le_inv` and its backward direction, this fills in the backward direction for `inv_lt_inv`.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "inv_lt_inv_of_lt", []]]}]}, {"timestamp": 1652410428, "sha": "f6178629", "message": "feat(data/polynomial/degree/lemmas): two lemmas about `nat_degree`s of sums (#14100)\nSuppose that `f, g` are polynomials. If both `nat_degree (f + g)` and `nat_degree` of one of them are bounded by `n`, then `nat_degree` of the other is also bounded by `n`.", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "nat_degree_add_le_iff_left", ["polynomial"]], ["add", "theorem", "nat_degree_add_le_iff_right", ["polynomial"]]]}]}, {"timestamp": 1652410427, "sha": "de418aad", "message": "feat(topology/basic): add lemmas like `closure s \\ interior s = frontier s` (#14086)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_diff_frontier", []], ["add", "theorem", "closure_diff_interior", []], ["add", "theorem", "self_diff_frontier", []]]}]}, {"timestamp": 1652410426, "sha": "15f6b527", "message": "feat(data/set/prod): add `prod_self_{s,}subset_prod_self` (#14084)", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "prod_self_ssubset_prod_self", ["set"]], ["add", "theorem", "prod_self_subset_prod_self", ["set"]]]}]}, {"timestamp": 1652410425, "sha": "14749964", "message": "feat(topology/basic): add `nhds_basis_closeds` (#14083)\n* add `nhds_basis_closeds`;\n* golf 2 proofs;\n* move `topological_space.seq_tendsto_iff` to `topology.basic`, rename\n it to `tendsto_at_top_nhds`.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "nhds_basis_closeds", []], ["mod", "theorem", "nhds_basis_opens", []], ["add", "theorem", "tendsto_at_top_nhds", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["del", "theorem", "seq_tendsto_iff", ["topological_space"]]]}]}, {"timestamp": 1652410424, "sha": "bb97a64b", "message": "feat(topology/order): add `nhds_true` and `nhds_false` (#14082)", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "nhds_false", []], ["add", "theorem", "nhds_true", []]]}]}, {"timestamp": 1652410423, "sha": "bd5914f6", "message": "perf(field_theory/primitive_element): declare auxiliary function `noncomputable!` (#14071)\nThe declaration `roots_of_min_poly_pi_type` is computable and gets compiled by Lean. Unfortunately, compilation takes about 2-3s on my machine and times out under #11759 (with timeouts disabled, it takes about 11s on that branch). Since the parameters are all elements of noncomputable types and its only use is a noncomputable `fintype` instance, nobody will care if we explicitly make it computable, and it saves a lot of compilation time.\nSee also this Zulip thread on `noncomputable!` fixing mysterious timeouts: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Timeout/near/278494746", "changes": [{"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["del", "def", "roots_of_min_poly_pi_type", ["field"]]]}]}, {"timestamp": 1652410422, "sha": "c4c279e6", "message": "feat(data/real/nnreal): add `nnreal.le_infi_add_infi` and other lemmas (#14048)\n* add `nnreal.coe_two`, `nnreal.le_infi_add_infi`, `nnreal.half_le_self`;\n* generalize `le_cinfi_mul_cinfi`, `csupr_mul_csupr_le`, and their\n additive versions to allow two different index types.", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "half_le_self", ["nnreal"]], ["add", "theorem", "le_infi_add_infi", ["nnreal"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1652404951, "sha": "a945b187", "message": "feat(linear_algebra/tensor_product): tensor_product.map is bilinear in its two arguments (#13608)", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "def", "dual_distrib", ["tensor_product"]], ["add", "theorem", "dual_distrib_apply", ["tensor_product"]], ["add", "def", "dual_distrib_equiv", ["tensor_product"]], ["add", "def", "dual_distrib_inv_of_basis", ["tensor_product"]], ["add", "theorem", "dual_distrib_inv_of_basis_apply", ["tensor_product"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "def", "hom_tensor_hom_map", ["tensor_product"]], ["add", "theorem", "hom_tensor_hom_map_apply", ["tensor_product"]], ["add", "theorem", "map_add_left", ["tensor_product"]], ["add", "theorem", "map_add_right", ["tensor_product"]], ["add", "def", "map_bilinear", ["tensor_product"]], ["add", "theorem", "map_bilinear_apply", ["tensor_product"]], ["add", "theorem", "map_smul_left", ["tensor_product"]], ["add", "theorem", "map_smul_right", ["tensor_product"]], ["add", "theorem", "smul_tmul_smul", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "def", "End_tensor_End_alg_hom", ["module"]], ["add", "theorem", "End_tensor_End_alg_hom_apply", ["module"]]]}]}, {"timestamp": 1652388864, "sha": "17102ae8", "message": "feat(algebra/big_operators/basic): add `sum_erase_lt_of_pos` (#14066)\n`sum_erase_lt_of_pos (hd : d ∈ s) (hdf : 0 < f d) : ∑ (m : ℕ) in s.erase d, f m < ∑ (m : ℕ) in s, f m`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "sum_erase_lt_of_pos", ["finset"]]]}]}, {"timestamp": 1652388863, "sha": "86d58ae7", "message": "feat(data/nat/factorization): three lemmas on the components of factorizations (#14031)\n`pow_factorization_le : p ^ (n.factorization) p ≤ n`\n`div_pow_factorization_ne_zero : n / p ^ (n.factorization) p ≠ 0`\n`not_dvd_div_pow_factorization : ¬p ∣ n / p ^ (n.factorization) p`\nPrompted by [this question](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/prime.20factorisation) in Zulip", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "div_pow_factorization_ne_zero", ["nat"]], ["add", "theorem", "not_dvd_div_pow_factorization", ["nat"]], ["add", "theorem", "pow_factorization_le", ["nat"]]]}]}, {"timestamp": 1652388862, "sha": "3c1ced3b", "message": "feat(data/nat/basic): four lemmas on nat and int division (#13991)\n`lt_div_iff_mul_lt (hnd : d ∣ n) : a < n / d ↔ d * a < n`\n`div_left_inj (hda : d ∣ a) (hdb : d ∣ b) : a / d = b / d ↔ a = b` (for `ℕ` and `ℤ`)\n`div_lt_div_of_lt_of_dvd (hdb : d ∣ b) (h : a < b) : a / d < b / d`", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_lt_div_of_lt_of_dvd", ["nat"]]]}]}, {"timestamp": 1652384066, "sha": "4b3988ad", "message": "feat(data/sym/sym2): simp lemma for quotient.eq (#14113)", "changes": [{"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["add", "theorem", "rel_iff", ["sym2"]]]}]}, {"timestamp": 1652384065, "sha": "3d030983", "message": "doc(data/matrix/basic): Clarify docstring (#14109)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1652380247, "sha": "27e7f7ac", "message": "feat(number_theory/divisors): add `filter_dvd_eq_proper_divisors` (#14049)\nAdds `filter_dvd_eq_proper_divisors` and golfs `filter_dvd_eq_divisors` and a few other lemmas", "changes": [{"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["mod", "theorem", "filter_dvd_eq_divisors", ["nat"]], ["add", "theorem", "filter_dvd_eq_proper_divisors", ["nat"]], ["mod", "theorem", "mem_divisors", ["nat"]]]}]}, {"timestamp": 1652378098, "sha": "3b185739", "message": "doc(tactic/rewrite_search/explain): Fix documentation-breaking docstring (#14107)\nThis currently renders as\n![image](https://user-images.githubusercontent.com/425260/168125021-06ef8851-55a6-4629-b437-7c38a1df7b05.png)", "changes": [{"oldPath": "src/tactic/rewrite_search/explain.lean", "newPath": "src/tactic/rewrite_search/explain.lean", "changes": []}]}, {"timestamp": 1652372619, "sha": "0e834dfe", "message": "chore(data/nat/multiplicity): simplify proof (#14103)", "changes": [{"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": [["mod", "theorem", "multiplicity_le_multiplicity_choose_add", ["nat", "prime"]]]}]}, {"timestamp": 1652372618, "sha": "0509c9c6", "message": "fix(analysis/special_functions/pow): fix norm_num extension (#14099)\nAs [reported on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/kernel.20slow.20to.20accept.20refl.20proof/near/282043840).", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "rpow_pos", ["norm_num"]]]}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1652372617, "sha": "c8edd608", "message": "chore(data/polynomial/ring_division): golf a few proofs (#14097)\n* add `polynomial.finite_set_of_is_root`;\n* use it to golf a few proofs.", "changes": [{"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": [["mod", "theorem", "eventually_no_roots", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "eq_of_infinite_eval_eq", ["polynomial"]], ["mod", "theorem", "eq_zero_of_infinite_is_root", ["polynomial"]], ["add", "theorem", "finite_set_of_is_root", ["polynomial"]]]}]}, {"timestamp": 1652372616, "sha": "6cf6e8cb", "message": "chore(order/filter/basic): golf a few proofs (#14078)\n* golf the proof of `mem_generate_iff` by using `sInter_mem`;\n* use `set.inj_on` in the statement of `filter.eq_of_map_eq_map_inj'`;\n* golf the proofs of `filter.map_inj` and `filter.comap_ne_bot_iff`.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1652365447, "sha": "9b41e4e0", "message": "feat(data/polynomial/laurent): add truncation from Laurent polynomials to polynomials (#14085)\nWe introduce the truncation of a Laurent polynomial `f`. It returns a polynomial whose support is exactly the non-negative support of `f`. We use it to prove injectivity of the inclusion of polynomials in Laurent polynomials.\nI also plan to use the results in this PR to prove that any Laurent polynomials is obtain from a polynomial by dividing by a power of the variable.", "changes": [{"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": [["add", "theorem", "left_inverse_trunc_to_laurent", ["laurent_polynomial"]], ["add", "def", "trunc", ["laurent_polynomial"]], ["add", "theorem", "trunc_C_mul_T", ["laurent_polynomial"]], ["add", "theorem", "to_laurent_inj", ["polynomial"]], ["add", "theorem", "to_laurent_injective", ["polynomial"]], ["add", "theorem", "trunc_to_laurent", ["polynomial"]]]}]}, {"timestamp": 1652365446, "sha": "fa4c0368", "message": "chore(order/complete_lattice,data/set/lattice): move `Sup_sUnion` (#14077)\n* move `Sup_sUnion` and `Inf_sUnion` to `data.set.lattice`;\n* golf a few proofs.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inf_sUnion", []], ["add", "theorem", "Sup_sUnion", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "theorem", "Inf_sUnion", []], ["del", "theorem", "Sup_sUnion", []]]}]}, {"timestamp": 1652357419, "sha": "bada932c", "message": "feat(data/multiset/basic): `erase_singleton` (#14094)\nAdd `multiset.erase_singleton` which is analogous to the existing [finset.erase_singleton](https://leanprover-community.github.io/mathlib_docs/data/finset/basic.html#finset.erase_singleton).", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "erase_singleton", ["multiset"]]]}]}, {"timestamp": 1652357418, "sha": "55671bee", "message": "chore(set_theory/zfc): use `derive` for some instances (#14079)\nAlso use `has_compl` instead of `has_neg`.", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}]}, {"timestamp": 1652357417, "sha": "d9e623c2", "message": "feat(algebra/*): Division monoid instances for `with_zero` and `mul_opposite` (#14073)\nA few missing instances of `division_monoid` and friends.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "inv_comp_inv", []]]}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "theorem", "coe_inv", ["with_zero"]], ["mod", "theorem", "inv_zero", ["with_zero"]]]}]}, {"timestamp": 1652357416, "sha": "c57cfc6d", "message": "feat({data/{finset,set},order/filter}/pointwise): Pointwise monoids are division monoids (#13900)\n`α` is a `division_monoid` implies that `set α`, `finset α`, `filter α` are too. The core result needed for this is that `s` is a unit in `set α`/`finset α`/`filter α` if and only if it is equal to `{u}`/`{u}`/`pure u` for some unit `u : α`.", "changes": [{"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "coe_singleton_monoid_hom", ["finset"]], ["add", "theorem", "coe_singleton_mul_hom", ["finset"]], ["add", "theorem", "coe_singleton_one_hom", ["finset"]], ["del", "theorem", "coe_zpow'", ["finset"]], ["mod", "theorem", "coe_zpow", ["finset"]], ["add", "theorem", "is_unit_coe", ["finset"]], ["add", "theorem", "is_unit_iff", ["finset"]], ["add", "theorem", "is_unit_iff_singleton", ["finset"]], ["add", "theorem", "is_unit_singleton", ["finset"]], ["add", "def", "singleton_monoid_hom", ["finset"]], ["add", "theorem", "singleton_monoid_hom_apply", ["finset"]], ["add", "def", "singleton_mul_hom", ["finset"]], ["add", "theorem", "singleton_mul_hom_apply", ["finset"]], ["add", "def", "singleton_one_hom", ["finset"]], ["add", "theorem", "singleton_one_hom_apply", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "coe_singleton_monoid_hom", ["set"]], ["add", "theorem", "coe_singleton_mul_hom", ["set"]], ["add", "theorem", "coe_singleton_one_hom", ["set"]], ["add", "theorem", "is_unit_iff", ["set"]], ["add", "theorem", "is_unit_iff_singleton", ["set"]], ["add", "theorem", "is_unit_singleton", ["set"]], ["add", "def", "singleton_monoid_hom", ["set"]], ["add", "theorem", "singleton_monoid_hom_apply", ["set"]], ["mod", "def", "singleton_mul_hom", ["set"]], ["add", "theorem", "singleton_mul_hom_apply", ["set"]], ["add", "def", "singleton_one_hom", ["set"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "coe_pure_monoid_hom", ["filter"]], ["add", "theorem", "coe_pure_mul_hom", ["filter"]], ["add", "theorem", "coe_pure_one_hom", ["filter"]], ["add", "theorem", "is_unit_iff", ["filter"]], ["add", "theorem", "is_unit_iff_singleton", ["filter"]], ["add", "theorem", "is_unit_pure", ["filter"]], ["add", "def", "pure_monoid_hom", ["filter"]], ["add", "theorem", "pure_monoid_hom_apply", ["filter"]], ["add", "def", "pure_mul_hom", ["filter"]], ["add", "theorem", "pure_mul_hom_apply", ["filter"]], ["add", "def", "pure_one_hom", ["filter"]], ["add", "theorem", "pure_one_hom_apply", ["filter"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "mem_iff_ultrafilter", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1652351223, "sha": "c2e87de5", "message": "feat(data/polynomial/degree/definitions): if `r ≠ 0`, then `(monomial i r).nat_degree = i` (#14095)\nAdd a lemma analogous to `nat_degree_C_mul_X_pow` and `nat_degree_C_mul_X`.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "nat_degree_monomial_eq", ["polynomial"]]]}]}, {"timestamp": 1652351222, "sha": "59273305", "message": "refactor(combinatorics/simple_graph/basic): relax `edge_finset` typeclasses (#14091)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["mod", "def", "edge_finset", ["simple_graph"]], ["add", "theorem", "edge_finset_card", ["simple_graph"]], ["mod", "theorem", "edge_set_univ_card", ["simple_graph"]], ["mod", "theorem", "mem_edge_finset", ["simple_graph"]]]}]}, {"timestamp": 1652351221, "sha": "41afd8c2", "message": "feat(analysis/special_functions/pow): asymptotics for real powers and log (#14088)\nFrom the unit fractions project.", "changes": [{"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "is_o_log_id_at_top", ["real"]], ["mod", "theorem", "is_o_pow_log_id_at_top", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "rpow", ["asymptotics", "is_O"]], ["add", "theorem", "rpow", ["asymptotics", "is_O_with"]], ["add", "theorem", "rpow", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_log_rpow_at_top", []], ["add", "theorem", "is_o_log_rpow_rpow_at_top", []]]}]}, {"timestamp": 1652345152, "sha": "1c8ce7e0", "message": "feat(data/complex): real exponential bounds (#14087)\nBounds on the real exponential function near 1, derived from the complex versions.", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "abs_exp", ["complex"]], ["add", "theorem", "abs_exp_sub_one_le", ["real"]], ["add", "theorem", "abs_exp_sub_one_sub_id_le", ["real"]]]}]}, {"timestamp": 1652345151, "sha": "b6d10283", "message": "chore(topology/sequences): golf a few proofs (#14081)", "changes": [{"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["mod", "theorem", "lebesgue_number_lemma_of_metric", ["seq_compact"]], ["mod", "theorem", "tendsto_subseq_of_bounded", []], ["mod", "theorem", "tendsto_subseq_of_frequently_bounded", []]]}]}, {"timestamp": 1652345150, "sha": "7c4c90f4", "message": "feat(category_theory/noetherian): nonzero artinian objects have simple subobjects (#13972)\n# Artinian and noetherian categories\nAn artinian category is a category in which objects do not\nhave infinite decreasing sequences of subobjects.\nA noetherian category is a category in which objects do not\nhave infinite increasing sequences of subobjects.\nWe show that any nonzero artinian object has a simple subobject.\n## Future work\nThe Jordan-Hölder theorem, following https://stacks.math.columbia.edu/tag/0FCK.", "changes": [{"oldPath": null, "newPath": "src/category_theory/noetherian.lean", "changes": [["add", "theorem", "exists_simple_subobject", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": [["add", "theorem", "subobject_simple_iff_is_atom", ["category_theory"]]]}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": [["add", "theorem", "nontrivial_of_not_is_zero", ["category_theory", "subobject"]], ["add", "def", "subobject_order_iso", ["category_theory", "subobject"]]]}]}, {"timestamp": 1652345149, "sha": "fd98cf15", "message": "chore(ring_theory/unique_factorization_domain): golf (#13820)\n+ Shorten the proof of `exists_irreducible_factor` using `well_founded.has_min` instead of `well_founded.fix`.\n+ Remove use of `simp` in `induction_on_irreducible`; now a pure term-mode proof except for the classical instance.\n+ Change the proof of `not_unit_iff_exists_factors_eq` (just added in [#13682](https://github.com/leanprover-community/mathlib/pull/13682)) to use induction. The new proof doesn't require the `multiset.prod_erase` introduced in [#13682](https://github.com/leanprover-community/mathlib/pull/13682), but is about as complex as the old one, so I might change it back if reviewers prefer.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1652345148, "sha": "0c26348e", "message": "feat(data/finsupp/basic): `finsupp.comap_domain` is an `add_monoid_hom` (#13783)\nThis is the version of `map_domain.add_monoid_hom` for `comap_domain`.\nI plan to use it for the inclusion of polynomials in Laurent polynomials (#13415).\nI also fixed a typo in a doc-string.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "add_monoid_hom", ["finsupp", "comap_domain"]], ["add", "theorem", "comap_domain_add", ["finsupp"]], ["add", "theorem", "comap_domain_add_of_injective", ["finsupp"]], ["add", "theorem", "comap_domain_single", ["finsupp"]], ["add", "theorem", "comap_domain_smul", ["finsupp"]], ["add", "theorem", "comap_domain_smul_of_injective", ["finsupp"]], ["add", "theorem", "comap_domain_zero", ["finsupp"]], ["mod", "theorem", "map_domain_comap_domain", ["finsupp"]]]}]}, {"timestamp": 1652341461, "sha": "a9665571", "message": "chore(analysis/special_functions/pow): golf a proof (#14093)\n* move `real.abs_rpow_of_nonneg` up;\n* use it to golf a line in `real.abs_rpow_le_abs_rpow`.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}]}, {"timestamp": 1652313958, "sha": "4977fd9d", "message": "feat(ring_theory/finiteness): tensor product of two finite modules is finite (#13733)\nRemoves [finite_dimensional_tensor_product](https://leanprover-community.github.io/mathlib_docs/linear_algebra/tensor_product_basis.html#finite_dimensional_tensor_product) since it's now proved by `infer_instance`.", "changes": [{"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "map₂_mk_top_top_eq_top", ["tensor_product"]]]}, {"oldPath": "src/linear_algebra/tensor_product_basis.lean", "newPath": "src/linear_algebra/tensor_product_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1652301718, "sha": "d4884c0d", "message": "feat(analysis/asymptotics): use weaker TC assumptions (#14080)\nMerge `is_o.trans` with `is_o.trans'`: both lemmas previously took one `semi_normed_group` argument on the primed type (corresponding to the primed function), but now only assume `has_norm` on all three types.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["del", "theorem", "trans'", ["asymptotics", "is_o"]], ["mod", "theorem", "trans", ["asymptotics", "is_o"]]]}]}, {"timestamp": 1652295211, "sha": "0302cfdd", "message": "chore(measure_theory/function/conditional_expectation): change the definition of condexp and its notation (#14010)\nBefore this PR, the conditional expectation `condexp` was defined using an argument `(hm : m ≤ m0)`.\nThis changes the definition to take only `m`, and assigns the default value 0 if we don't have `m ≤ m0`.\nThe notation for `condexp m μ f` is simplified to `μ[f|m]`.\nThe change makes the proofs of the condexp API longer, but no change is needed to lemmas outside of that file. See the file `martingale.lean`: the notation is now simpler, but otherwise little else changes besides removing the now unused argument `[sigma_finite_filtration μ ℱ]` from many lemmas.\nAlso add an instance `is_finite_measure.sigma_finite_filtration`: we had a lemma with both `is_finite_measure` and `sigma_finite_filtration` arguments, but the first one implies the other.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "def", "condexp", ["measure_theory"]], ["mod", "theorem", "condexp_ae_eq_condexp_L1", ["measure_theory"]], ["mod", "theorem", "condexp_ae_eq_condexp_L1_clm", ["measure_theory"]], ["mod", "theorem", "condexp_condexp_of_le", ["measure_theory"]], ["mod", "theorem", "condexp_const", ["measure_theory"]], ["mod", "theorem", "condexp_neg", ["measure_theory"]], ["add", "theorem", "condexp_of_not_le", ["measure_theory"]], ["add", "theorem", "condexp_of_not_sigma_finite", ["measure_theory"]], ["add", "theorem", "condexp_of_sigma_finite", ["measure_theory"]], ["mod", "theorem", "condexp_of_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "condexp_smul", ["measure_theory"]], ["mod", "theorem", "condexp_undef", ["measure_theory"]], ["mod", "theorem", "condexp_zero", ["measure_theory"]], ["mod", "theorem", "integrable_condexp", ["measure_theory"]], ["mod", "theorem", "integral_condexp", ["measure_theory"]], ["mod", "theorem", "rn_deriv_ae_eq_condexp", ["measure_theory"]], ["mod", "theorem", "set_integral_condexp", ["measure_theory"]], ["mod", "theorem", "strongly_measurable_condexp", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["mod", "theorem", "set_integral_eq", ["measure_theory", "martingale"]], ["mod", "def", "martingale", ["measure_theory"]], ["mod", "theorem", "martingale_zero", ["measure_theory"]], ["mod", "theorem", "expected_stopped_value_mono", ["measure_theory", "submartingale"]], ["mod", "theorem", "set_integral_le", ["measure_theory", "submartingale"]], ["mod", "def", "submartingale", ["measure_theory"]], ["mod", "theorem", "set_integral_le", ["measure_theory", "supermartingale"]], ["mod", "def", "supermartingale", ["measure_theory"]]]}, {"oldPath": "src/probability/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}]}, {"timestamp": 1652281320, "sha": "7a3ae977", "message": "feat(data/polynomial/laurent): add inductions for Laurent polynomials (#14005)\nThis PR introduces two induction principles for Laurent polynomials and uses them to show that `T` commutes with everything.", "changes": [{"oldPath": "src/data/polynomial/laurent.lean", "newPath": "src/data/polynomial/laurent.lean", "changes": [["add", "theorem", "T_mul", ["laurent_polynomial"]], ["add", "theorem", "commute_T", ["laurent_polynomial"]]]}]}, {"timestamp": 1652278997, "sha": "483affad", "message": "feat(measure_theory/integral/interval_integral): add lemma `interval_integrable.sum` (#14069)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "sum", ["interval_integrable"]]]}]}, {"timestamp": 1652256003, "sha": "83bc3b9c", "message": "chore(algebra/module/submodule*): replace underscores in file names with a folder (#14063)", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/module/default.lean", "newPath": "src/algebra/module/default.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_bilinear.lean", "newPath": "src/algebra/module/submodule/bilinear.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule/lattice.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_pointwise.lean", "newPath": "src/algebra/module/submodule/pointwise.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/bases.lean", "newPath": "src/topology/algebra/nonarchimedean/bases.lean", "changes": []}, {"oldPath": "test/import_order_timeout.lean", "newPath": "test/import_order_timeout.lean", "changes": []}]}, {"timestamp": 1652256002, "sha": "ba60237b", "message": "chore(field_theory/adjoin): clarify and speed up proof (#14041)\nThis PR turns a couple of refls into `simp` lemmas. Apart from being clearer now, this also speeds up the proof significantly in #11759 (where the elaborator chooses the wrong subexpression to unfold first).\nElaboration time changed stayed about the same at about 300-350ms on master, and went from timeout to about 300ms on #11759.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "bot_equiv_symm", ["intermediate_field"]], ["add", "theorem", "coe_algebra_map_over_bot", ["intermediate_field"]]]}]}, {"timestamp": 1652256001, "sha": "b75113ac", "message": "chore(set_theory/game/ordinal): Remove redundant namespaces (#14039)", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}]}, {"timestamp": 1652248889, "sha": "4231b681", "message": "feat(data/list): add a few lemmas (#14047)\n* add `list.reverse_surjective` and `list.reverse_bijective`;\n* add `list.chain_iff_forall₂`,\n `list.chain_append_singleton_iff_forall₂`, and `list.all₂_zip_with`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "reverse_bijective", ["list"]], ["mod", "theorem", "reverse_injective", ["list"]], ["mod", "theorem", "reverse_involutive", ["list"]], ["add", "theorem", "reverse_surjective", ["list"]]]}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "chain_append_singleton_iff_forall₂", ["list"]], ["add", "theorem", "chain_iff_forall₂", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "all₂_zip_with", ["list"]]]}]}, {"timestamp": 1652209478, "sha": "df9683ca", "message": "feat(topology/algebra/infinite_sum): lemmas about `mul_opposite` (#13674)", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "exp_op", []], ["add", "theorem", "exp_unop", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "op", ["has_sum"]], ["add", "theorem", "unop", ["has_sum"]], ["add", "theorem", "has_sum_op", []], ["add", "theorem", "has_sum_unop", []], ["add", "theorem", "op", ["summable"]], ["add", "theorem", "unop", ["summable"]], ["add", "theorem", "summable_op", []], ["add", "theorem", "summable_unop", []], ["add", "theorem", "tsum_op", []], ["add", "theorem", "tsum_unop", []]]}]}, {"timestamp": 1652202025, "sha": "3ea573ef", "message": "refactor(algebra/{group,group_with_zero/basic): Delete lemmas generalized to division monoids (#14042)\nDelete the `group` and `group_with_zero` lemmas which have been made one-liners in #14000.\nLemmas are renamed because\n* one of the `group` or `group_with_zero` name has to go\n* the new API should have a consistent naming convention\nLemma renames", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "archive/imo/imo2006_q3.lean", "newPath": "archive/imo/imo2006_q3.lean", "changes": []}, {"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "div_div", []], ["del", "theorem", "div_div_assoc_swap", []], ["mod", "theorem", "div_div_div_comm", []], ["add", "theorem", "div_div_div_eq", []], ["add", "theorem", "div_div_eq_mul_div", []], ["del", "theorem", "div_eq_inv_mul'", []], ["add", "theorem", "div_eq_inv_mul", []], ["mod", "theorem", "div_inv_eq_mul", []], ["mod", "theorem", "div_mul", []], ["add", "theorem", "div_mul_comm", []], ["mod", "theorem", "div_mul_div_comm", []], ["mod", "theorem", "div_mul_eq_div_div", []], ["mod", "theorem", "div_mul_eq_div_div_swap", []], ["add", "theorem", "div_mul_eq_div_mul_one_div", []], ["del", "theorem", "div_mul_eq_mul_div'", []], ["add", "theorem", "div_mul_eq_mul_div", []], ["mod", "theorem", "div_ne_one_of_ne", []], ["del", "theorem", "div_one'", []], ["add", "theorem", "div_one", []], ["del", "theorem", "div_right_comm'", []], ["add", "theorem", "div_right_comm", []], ["del", "theorem", "div_div", ["division_comm_monoid"]], ["del", "theorem", "div_div_div_comm", ["division_comm_monoid"]], ["del", "theorem", "div_div_div_eq", ["division_comm_monoid"]], ["del", "theorem", "div_eq_inv_mul", ["division_comm_monoid"]], ["del", "theorem", "div_mul", ["division_comm_monoid"]], ["del", "theorem", "div_mul_comm", ["division_comm_monoid"]], ["del", "theorem", "div_mul_div_comm", ["division_comm_monoid"]], ["del", "theorem", "div_mul_eq_div_div", ["division_comm_monoid"]], ["del", "theorem", "div_mul_eq_div_mul_one_div", ["division_comm_monoid"]], ["del", "theorem", "div_mul_eq_mul_div", ["division_comm_monoid"]], ["del", "theorem", "div_right_comm", ["division_comm_monoid"]], ["del", "theorem", "inv_div_inv", ["division_comm_monoid"]], ["del", "theorem", "inv_inv_div_inv", ["division_comm_monoid"]], ["del", "theorem", "inv_mul'", ["division_comm_monoid"]], ["del", "theorem", "inv_mul_eq_div", ["division_comm_monoid"]], ["del", "theorem", "mul_comm_div", ["division_comm_monoid"]], ["del", "theorem", "mul_div_left_comm", ["division_comm_monoid"]], ["del", "theorem", "mul_div_mul_comm", ["division_comm_monoid"]], ["del", "theorem", "mul_div_right_comm", ["division_comm_monoid"]], ["del", "theorem", "mul_inv", ["division_comm_monoid"]], ["del", "theorem", "one_div_mul_one_div", ["division_comm_monoid"]], ["del", "theorem", "div_div_eq_mul_div", ["division_monoid"]], ["del", "theorem", "div_inv_eq_mul", ["division_monoid"]], ["del", "theorem", "div_mul_eq_div_div_swap", ["division_monoid"]], ["del", "theorem", "div_ne_one_of_ne", ["division_monoid"]], ["del", "theorem", "div_one", ["division_monoid"]], ["del", "theorem", "eq_inv_of_mul_eq_one_left", ["division_monoid"]], ["del", "theorem", "eq_inv_of_mul_eq_one_right", ["division_monoid"]], ["del", "theorem", "eq_of_div_eq_one", ["division_monoid"]], ["del", "theorem", "eq_of_one_div_eq_one_div", ["division_monoid"]], ["del", "theorem", "eq_one_div_of_mul_eq_one_left", ["division_monoid"]], ["del", "theorem", "eq_one_div_of_mul_eq_one_right", ["division_monoid"]], ["del", "theorem", "inv_div", ["division_monoid"]], ["del", "theorem", "inv_div_left", ["division_monoid"]], ["del", "theorem", "inv_eq_of_mul_eq_one_left", ["division_monoid"]], ["del", "theorem", "inv_eq_one", ["division_monoid"]], ["del", "theorem", "inv_ne_one", ["division_monoid"]], ["del", "theorem", "inv_one", ["division_monoid"]], ["del", "theorem", "one_div_div", ["division_monoid"]], ["del", "theorem", "one_div_mul_one_div_rev", ["division_monoid"]], ["del", "theorem", "one_div_one", ["division_monoid"]], ["del", "theorem", "one_div_one_div", ["division_monoid"]], ["del", "theorem", "one_eq_inv", ["division_monoid"]], ["del", "theorem", "eq_inv_of_mul_eq_one", []], ["add", "theorem", "eq_inv_of_mul_eq_one_left", []], ["add", "theorem", "eq_inv_of_mul_eq_one_right", []], ["del", "theorem", "eq_of_div_eq_one'", []], ["add", "theorem", "eq_of_div_eq_one", []], ["add", "theorem", "eq_of_one_div_eq_one_div", []], ["add", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["add", "theorem", "eq_one_div_of_mul_eq_one_right", []], ["mod", "theorem", "inv_div'", []], ["add", "theorem", "inv_div", []], ["mod", "theorem", "inv_div_inv", []], ["add", "theorem", "inv_div_left", []], ["add", "theorem", "inv_eq_of_mul_eq_one_left", []], ["mod", "theorem", "inv_eq_one", []], ["mod", "theorem", "inv_inv_div_inv", []], ["mod", "theorem", "inv_mul'", []], ["mod", "theorem", "inv_mul_eq_div", []], ["mod", "theorem", "inv_ne_one", []], ["add", "theorem", "inv_one", []], ["add", "theorem", "mul_comm_div", []], ["mod", "theorem", "mul_div", []], ["mod", "theorem", "mul_div_cancel'''", []], ["del", "theorem", "mul_div_comm'", []], ["mod", "theorem", "mul_div_left_comm", []], ["add", "theorem", "mul_div_mul_comm", []], ["add", "theorem", "mul_div_right_comm", []], ["mod", "theorem", "mul_inv", []], ["add", "theorem", "one_div_div", []], ["add", "theorem", "one_div_mul_one_div", []], ["add", "theorem", "one_div_mul_one_div_rev", []], ["add", "theorem", "one_div_one", []], ["add", "theorem", "one_div_one_div", []], ["mod", "theorem", "one_eq_inv", []], ["del", "theorem", "one_inv", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["del", "theorem", "inv_eq_of_mul_eq_one", []]]}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["del", "theorem", "inv_eq_of_mul_eq_one", ["units"]], ["add", "theorem", "inv_eq_of_mul_eq_one_right", ["units"]]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "div_div_div_comm₀", []], ["del", "theorem", "div_div_div_div_eq", []], ["del", "theorem", "div_div_eq_div_mul", []], ["del", "theorem", "div_div_eq_mul_div", []], ["del", "theorem", "div_eq_inv_mul", []], ["del", "theorem", "div_mul_comm'", []], ["del", "theorem", "div_mul_div_comm₀", []], ["del", "theorem", "div_mul_eq_div_mul_one_div", []], ["del", "theorem", "div_mul_eq_mul_div", []], ["del", "theorem", "div_mul_eq_mul_div_comm", []], ["del", "theorem", "div_one", []], ["del", "theorem", "div_right_comm", []], ["del", "theorem", "eq_inv_of_mul_left_eq_one", []], ["del", "theorem", "eq_inv_of_mul_right_eq_one", []], ["del", "theorem", "eq_of_div_eq_one", []], ["del", "theorem", "eq_of_one_div_eq_one_div", []], ["del", "theorem", "eq_one_div_of_mul_eq_one", []], ["del", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["del", "theorem", "inv_div", []], ["del", "theorem", "inv_div_left", []], ["del", "theorem", "inv_eq_one₀", []], ["del", "theorem", "inv_one", []], ["del", "theorem", "mul_comm_div'", []], ["del", "theorem", "mul_div_comm", []], ["del", "theorem", "mul_div_right_comm", []], ["mod", "theorem", "mul_eq_mul_of_div_eq_div", []], ["del", "theorem", "mul_inv_rev₀", []], ["del", "theorem", "mul_inv₀", []], ["del", "theorem", "one_div_div", []], ["del", "theorem", "one_div_mul_one_div", []], ["del", "theorem", "one_div_mul_one_div_rev", []], ["del", "theorem", "one_div_one", []], ["del", "theorem", "one_div_one_div", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": []}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": [["mod", "theorem", "neg_one", ["lattice_ordered_comm_group"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": [["mod", "theorem", "sqrt_two_inv_mul_self", ["tsirelson_inequality"]]]}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/algebra/star/unitary.lean", "newPath": "src/algebra/star/unitary.lean", "changes": []}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/basic.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/basic.lean", "changes": []}, {"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/subbox_induction.lean", "newPath": "src/analysis/box_integral/box/subbox_induction.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/subbox_induction.lean", "newPath": "src/analysis/box_integral/partition/subbox_induction.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": []}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach_steinhaus.lean", "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow_deriv.lean", "newPath": "src/analysis/special_functions/pow_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "eq_inv_of_mul_eq_one", ["ennreal"]], ["add", "theorem", "eq_inv_of_mul_eq_one_left", ["ennreal"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/real/pi/bounds.lean", "newPath": "src/data/real/pi/bounds.lean", "changes": []}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": [["del", "theorem", "map_sub", ["is_add_group_hom"]], ["add", "theorem", "map_div", ["is_group_hom"]]]}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": []}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": []}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/inverses.lean", "newPath": "src/group_theory/submonoid/inverses.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/transfer.lean", "newPath": "src/group_theory/transfer.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/slope.lean", "newPath": "src/linear_algebra/affine_space/slope.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["mod", "theorem", "map_swap", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/real.lean", "newPath": "src/linear_algebra/quadratic_form/real.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_abs.lean", "newPath": "src/number_theory/class_number/admissible_abs.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_with.lean", "newPath": "src/number_theory/liouville/liouville_with.lean", "changes": []}, {"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/probability/cond_count.lean", "newPath": "src/probability/cond_count.lean", "changes": []}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "inv_one", ["fractional_ideal"]], ["del", "theorem", "one_inv", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["del", "theorem", "eq_one_div_of_mul_eq_one", ["fractional_ideal"]], ["add", "theorem", "eq_one_div_of_mul_eq_one_right", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "inv_one", ["mv_power_series"]], ["del", "theorem", "one_inv", ["mv_power_series"]], ["add", "theorem", "inv_one", ["power_series"]], ["del", "theorem", "one_inv", ["power_series"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_ring.lean", "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": [["mod", "theorem", "unfold_sub", ["tactic", "abel"]]]}, {"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "test/integration.lean", "newPath": "test/integration.lean", "changes": []}]}, {"timestamp": 1652180613, "sha": "e6896117", "message": "chore({data/{finset,set},order/filter}/pointwise): Reorganize files (#14021)\nOrder the three files more similarly. The idea is to order things as:\n* Arithmetic notation typeclasses, and lemmas that don't depend on algebraic structure for them:\n * `0` and `1`\n * `-` and `⁻¹`\n * `+` and `*`\n * `-` and `/`\n* monoid-like instances, interleaved with the corresponding lemmas (some of them are used for the instances themselves, and more will be in the future)\n* `•`\n* `-ᵥ`\n* scalar instances", "changes": [{"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["mod", "theorem", "coe_pow", ["finset"]], ["mod", "theorem", "image_mul_right'", ["finset"]], ["mod", "theorem", "image_mul_right", ["finset"]], ["mod", "theorem", "preimage_mul_left_one'", ["finset"]], ["mod", "theorem", "preimage_mul_left_one", ["finset"]], ["mod", "theorem", "preimage_mul_right_one'", ["finset"]], ["mod", "theorem", "preimage_mul_right_one", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "Inter_inv", ["set"]], ["mod", "theorem", "Union_inv", ["set"]], ["mod", "theorem", "compl_inv", ["set"]], ["mod", "theorem", "empty_pow", ["set"]], ["mod", "def", "fintype_mul", ["set"]], ["mod", "theorem", "image_mul_left'", ["set"]], ["mod", "theorem", "image_mul_left", ["set"]], ["mod", "theorem", "image_mul_right'", ["set"]], ["mod", "theorem", "image_mul_right", ["set"]], ["mod", "theorem", "inter_inv", ["set"]], ["mod", "theorem", "inv_preimage", ["set"]], ["mod", "theorem", "mem_inv", ["set"]], ["mod", "theorem", "mul_univ", ["set"]], ["mod", "theorem", "pow_mem_pow", ["set"]], ["mod", "theorem", "pow_subset_pow", ["set"]], ["mod", "theorem", "preimage_mul_left_one'", ["set"]], ["mod", "theorem", "preimage_mul_left_one", ["set"]], ["mod", "theorem", "preimage_mul_left_singleton", ["set"]], ["mod", "theorem", "preimage_mul_right_one'", ["set"]], ["mod", "theorem", "preimage_mul_right_one", ["set"]], ["mod", "theorem", "preimage_mul_right_singleton", ["set"]], ["del", "def", "singleton_hom", ["set"]], ["mod", "theorem", "subset_mul_left", ["set"]], ["mod", "theorem", "subset_mul_right", ["set"]], ["mod", "theorem", "union_inv", ["set"]], ["mod", "theorem", "univ_mul", ["set"]], ["mod", "theorem", "univ_mul_univ", ["set"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["mod", "theorem", "comap_mul_comap_le", ["filter"]], ["mod", "theorem", "map_inv'", ["filter"]], ["add", "theorem", "pow_mem_pow", ["filter"]], ["mod", "theorem", "div_div", ["filter", "tendsto"]], ["mod", "theorem", "inv_inv", ["filter", "tendsto"]]]}]}, {"timestamp": 1652180612, "sha": "45d2b523", "message": "chore(analysis/normed_space/basic): reorder the `restrict_scalars` definitions (#13995)\nThis also update the docstrings to make `normed_space.restrict_scalars` even scarier.\nThe instances here themselves haven't actually changed.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1652180611, "sha": "91489acb", "message": "feat(algebra/module/submodule_bilinear): add `submodule.map₂`, generalizing `submodule.has_mul` (#13709)\nThe motivation here is to be able to talk about combinations of submodules under other bilinear maps, such as the tensor product. This unifies the definitions of and lemmas about `submodule.has_mul` and `submodule.has_scalar'`.\nThe lemmas about `submodule.map₂` are copied verbatim from those for `mul`, and then adjusted slightly replacing `mul_zero` with `linear_map.map_zero` etc. I've then replaced the lemmas about `smul` with the `map₂` proofs where possible.\nThe lemmas about finiteness weren't possible to copy this way, as the proofs about `finset` multiplication are not generalized in a similar way. Someone else can copy these in a future PR.\nThis also adds `set.image2_eq_Union` to match `set.image_eq_Union`, and removes `submodule.union_eq_smul_set` which is neither about submodules nor about `union`, and instead is really just a copy of `set.image_eq_Union`", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["mod", "theorem", "bot_mul", ["submodule"]], ["mod", "theorem", "mul_bot", ["submodule"]], ["mod", "theorem", "mul_le", ["submodule"]], ["mod", "theorem", "mul_le_mul", ["submodule"]], ["mod", "theorem", "mul_le_mul_left", ["submodule"]], ["mod", "theorem", "mul_le_mul_right", ["submodule"]], ["mod", "theorem", "mul_mem_mul", ["submodule"]], ["mod", "theorem", "mul_sup", ["submodule"]], ["mod", "theorem", "span_mul_span", ["submodule"]], ["mod", "theorem", "sup_mul", ["submodule"]]]}, {"oldPath": null, "newPath": "src/algebra/module/submodule_bilinear.lean", "changes": [["add", "theorem", "apply_mem_map₂", ["submodule"]], ["add", "theorem", "image2_subset_map₂", ["submodule"]], ["add", "def", "map₂", ["submodule"]], ["add", "theorem", "map₂_bot_left", ["submodule"]], ["add", "theorem", "map₂_bot_right", ["submodule"]], ["add", "theorem", "map₂_eq_span_image2", ["submodule"]], ["add", "theorem", "map₂_le", ["submodule"]], ["add", "theorem", "map₂_le_map₂", ["submodule"]], ["add", "theorem", "map₂_le_map₂_left", ["submodule"]], ["add", "theorem", "map₂_le_map₂_right", ["submodule"]], ["add", "theorem", "map₂_span_span", ["submodule"]], ["add", "theorem", "map₂_sup_left", ["submodule"]], ["add", "theorem", "map₂_sup_right", ["submodule"]], ["add", "theorem", "map₂_supr_left", ["submodule"]], ["add", "theorem", "map₂_supr_right", ["submodule"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "image2_eq_Union", ["set"]]]}, {"oldPath": "src/ring_theory/henselian.lean", "newPath": "src/ring_theory/henselian.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "bot_smul", ["submodule"]], ["mod", "theorem", "smul_bot", ["submodule"]], ["mod", "theorem", "smul_le", ["submodule"]], ["mod", "theorem", "smul_mem_smul", ["submodule"]], ["mod", "theorem", "smul_mono", ["submodule"]], ["mod", "theorem", "smul_mono_left", ["submodule"]], ["mod", "theorem", "smul_mono_right", ["submodule"]], ["mod", "theorem", "smul_sup", ["submodule"]], ["mod", "theorem", "span_smul_eq", ["submodule"]], ["mod", "theorem", "sup_smul", ["submodule"]], ["del", "theorem", "union_eq_smul_set", ["submodule"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "map₂", ["submodule", "fg"]], ["mod", "theorem", "mul", ["submodule", "fg"]]]}]}, {"timestamp": 1652173003, "sha": "34f29db3", "message": "feat(topology/algebra/group): Division is an open map (#14028)\nA few missing lemmas about division in topological groups.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "inv_closure", []], ["mod", "theorem", "inv", ["is_closed"]], ["add", "theorem", "is_closed_map_div_left", []], ["add", "theorem", "is_closed_map_inv", []], ["mod", "theorem", "inv", ["is_compact"]], ["add", "theorem", "closure_div", ["is_open"]], ["mod", "theorem", "closure_mul", ["is_open"]], ["add", "theorem", "div_closure", ["is_open"]], ["add", "theorem", "div_left", ["is_open"]], ["add", "theorem", "div_right", ["is_open"]], ["mod", "theorem", "inv", ["is_open"]], ["mod", "theorem", "mul_closure", ["is_open"]], ["mod", "theorem", "mul_left", ["is_open"]], ["mod", "theorem", "mul_right", ["is_open"]], ["add", "theorem", "is_open_map_div_left", []], ["add", "theorem", "is_open_map_inv", []], ["mod", "theorem", "nhds_translation_div", []], ["add", "theorem", "subset_interior_div", []], ["add", "theorem", "subset_interior_div_left", []], ["add", "theorem", "subset_interior_div_right", []], ["mod", "theorem", "subset_interior_mul", []], ["mod", "theorem", "subset_interior_mul_left", []], ["mod", "theorem", "subset_interior_mul_right", []]]}]}, {"timestamp": 1652173002, "sha": "c8926223", "message": "move(order/synonym): Group `order_dual` and `lex` (#13769)\nMove `to_dual`, `of_dual`, `to_lex`, `of_lex` to a new file `order.synonym`. This does not change the import tree, because `order.lexicographic` had slightly higher imports than `order.order_dual`, but those weren't used for `lex` itself.", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/rearrangement.lean", "newPath": "src/algebra/order/rearrangement.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/psigma/order.lean", "newPath": "src/data/psigma/order.lean", "changes": []}, {"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": []}, {"oldPath": "src/data/sum/order.lean", "newPath": "src/data/sum/order.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/fixing_subgroup.lean", "newPath": "src/group_theory/group_action/fixing_subgroup.lean", "changes": []}, {"oldPath": "src/order/compare.lean", "newPath": "src/order/compare.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": [["del", "def", "lex", []], ["del", "def", "of_lex", []], ["del", "theorem", "of_lex_inj", []], ["del", "theorem", "of_lex_symm_eq", []], ["del", "theorem", "of_lex_to_lex", []], ["del", "def", "to_lex", []], ["del", "theorem", "to_lex_inj", []], ["del", "theorem", "to_lex_of_lex", []], ["del", "theorem", "to_lex_symm_eq", []]]}, {"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": []}, {"oldPath": "src/order/order_dual.lean", "newPath": null, "changes": [["del", "theorem", "le_to_dual", ["order_dual"]], ["del", "theorem", "lt_to_dual", ["order_dual"]], ["del", "def", "of_dual", ["order_dual"]], ["del", "theorem", "of_dual_inj", ["order_dual"]], ["del", "theorem", "of_dual_le_of_dual", ["order_dual"]], ["del", "theorem", "of_dual_lt_of_dual", ["order_dual"]], ["del", "theorem", "of_dual_symm_eq", ["order_dual"]], ["del", "theorem", "of_dual_to_dual", ["order_dual"]], ["del", "def", "to_dual", ["order_dual"]], ["del", "theorem", "to_dual_inj", ["order_dual"]], ["del", "theorem", "to_dual_le", ["order_dual"]], ["del", "theorem", "to_dual_le_to_dual", ["order_dual"]], ["del", "theorem", "to_dual_lt", ["order_dual"]], ["del", "theorem", "to_dual_lt_to_dual", ["order_dual"]], ["del", "theorem", "to_dual_of_dual", ["order_dual"]], ["del", "theorem", "to_dual_symm_eq", ["order_dual"]]]}, {"oldPath": null, "newPath": "src/order/synonym.lean", "changes": [["add", "def", "lex", []], ["add", "def", "of_lex", []], ["add", "theorem", "of_lex_inj", []], ["add", "theorem", "of_lex_symm_eq", []], ["add", "theorem", "of_lex_to_lex", []], ["add", "theorem", "le_to_dual", ["order_dual"]], ["add", "theorem", "lt_to_dual", ["order_dual"]], ["add", "def", "of_dual", ["order_dual"]], ["add", "theorem", "of_dual_inj", ["order_dual"]], ["add", "theorem", "of_dual_le_of_dual", ["order_dual"]], ["add", "theorem", "of_dual_lt_of_dual", ["order_dual"]], ["add", "theorem", "of_dual_symm_eq", ["order_dual"]], ["add", "theorem", "of_dual_to_dual", ["order_dual"]], ["add", "def", "to_dual", ["order_dual"]], ["add", "theorem", "to_dual_inj", ["order_dual"]], ["add", "theorem", "to_dual_le", ["order_dual"]], ["add", "theorem", "to_dual_le_to_dual", ["order_dual"]], ["add", "theorem", "to_dual_lt", ["order_dual"]], ["add", "theorem", "to_dual_lt_to_dual", ["order_dual"]], ["add", "theorem", "to_dual_of_dual", ["order_dual"]], ["add", "theorem", "to_dual_symm_eq", ["order_dual"]], ["add", "def", "to_lex", []], ["add", "theorem", "to_lex_inj", []], ["add", "theorem", "to_lex_of_lex", []], ["add", "theorem", "to_lex_symm_eq", []]]}]}, {"timestamp": 1652169729, "sha": "37c691f7", "message": "feat(analysis/convex/*): Convexity and subtraction (#14015)\nNow that we have a fair bit more pointwise operations on `set`, a few results can be (re)written using them. For example, existing lemmas about `add` and `neg` can be combined to give lemmas about `sub`.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "affine_image", ["convex"]], ["del", "theorem", "neg_preimage", ["convex"]], ["mod", "theorem", "sub", ["convex"]], ["mod", "theorem", "translate", ["convex"]], ["add", "theorem", "vadd", ["convex"]]]}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["add", "theorem", "add_strict_concave_on", ["concave_on"]], ["add", "theorem", "sub", ["concave_on"]], ["add", "theorem", "sub_strict_convex_on", ["concave_on"]], ["add", "theorem", "add_strict_convex_on", ["convex_on"]], ["add", "theorem", "sub", ["convex_on"]], ["add", "theorem", "sub_strict_concave_on", ["convex_on"]], ["add", "theorem", "add_concave_on", ["strict_concave_on"]], ["add", "theorem", "sub", ["strict_concave_on"]], ["add", "theorem", "sub_convex_on", ["strict_concave_on"]], ["add", "theorem", "add_convex_on", ["strict_convex_on"]], ["add", "theorem", "sub", ["strict_convex_on"]], ["add", "theorem", "sub_concave_on", ["strict_convex_on"]]]}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": [["mod", "theorem", "neg", ["star_convex"]], ["del", "theorem", "neg_preimage", ["star_convex"]], ["add", "theorem", "sub'", ["star_convex"]], ["mod", "theorem", "sub", ["star_convex"]]]}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": [["mod", "theorem", "neg", ["strict_convex"]], ["del", "theorem", "neg_preimage", ["strict_convex"]], ["add", "theorem", "sub", ["strict_convex"]]]}]}, {"timestamp": 1652160028, "sha": "56503664", "message": "chore(.github/workflows): disable merge conflicts bot for now (#14057)", "changes": [{"oldPath": ".github/workflows/merge_conflicts.yml", "newPath": null, "changes": []}]}, {"timestamp": 1652160027, "sha": "153b20f5", "message": "chore(scripts): update nolints.txt (#14056)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1652160026, "sha": "b17070db", "message": "fix(data/real/ennreal): style and golfing (#14055)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_inv_two", ["ennreal"]], ["mod", "theorem", "inv_one", ["ennreal"]], ["mod", "theorem", "mul_left_mono", ["ennreal"]], ["mod", "theorem", "mul_right_mono", ["ennreal"]]]}]}, {"timestamp": 1652160026, "sha": "87069e91", "message": "chore(ring_theory/hahn_series): golf a proof (#14054)", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}]}, {"timestamp": 1652153732, "sha": "c5e0299a", "message": "feat(group_theory/subsemigroup/{center, centralizer}): define center and centralizer as subsemigroups (#13627)\nThis defines the center and centralizers for semigroups. This is necessary so that we can do the same for non-unital semirings. \n- [x] depends on: #12112 \n- [x] depends on: #13903", "changes": [{"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": [["add", "theorem", "center_to_add_subsemigroup", ["add_submonoid"]], ["add", "theorem", "center_to_subsemigroup", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/centralizer.lean", "newPath": "src/group_theory/submonoid/centralizer.lean", "changes": [["add", "theorem", "centralizer_to_add_subsemigroup", ["add_submonoid"]], ["add", "theorem", "centralizer_to_subsemigroup", ["submonoid"]]]}, {"oldPath": "src/group_theory/subsemigroup/center.lean", "newPath": "src/group_theory/subsemigroup/center.lean", "changes": [["add", "def", "center", ["subsemigroup"]], ["add", "theorem", "center_eq_top", ["subsemigroup"]], ["add", "theorem", "coe_center", ["subsemigroup"]], ["add", "theorem", "mem_center_iff", ["subsemigroup"]]]}, {"oldPath": "src/group_theory/subsemigroup/centralizer.lean", "newPath": "src/group_theory/subsemigroup/centralizer.lean", "changes": [["add", "def", "centralizer", ["subsemigroup"]], ["add", "theorem", "centralizer_le", ["subsemigroup"]], ["add", "theorem", "centralizer_univ", ["subsemigroup"]], ["add", "theorem", "coe_centralizer", ["subsemigroup"]], ["add", "theorem", "mem_centralizer_iff", ["subsemigroup"]]]}]}, {"timestamp": 1652129185, "sha": "260d5ced", "message": "feat(model_theory/semantics): Realizing restricted terms and formulas (#14014)\nShows that realizing a restricted term or formula gives the same value as the unrestricted version.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inclusion_comp_inclusion", ["set"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "realize_restrict_free_var", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_restrict_var", ["first_order", "language", "term"]], ["add", "theorem", "realize_restrict_var_left", ["first_order", "language", "term"]]]}]}, {"timestamp": 1652115451, "sha": "98f2779c", "message": "refactor(number_theory/legendre_symbol/*): move section `general` from `quadratic_char.lean` into new file `auxiliary.lean` (#14027)\nThis is a purely administrative step (in preparation of adding more files that may need some of the auxiliary results).\nWe move the collection of auxiliary results that constitute `section general` of `quadratic_char.lean` to a new file `auxiliary.lean` (and change the `import`s of `quadratic_char.lean` accordingly).\nThis new file is meant as a temporary place for these auxiliary results; when the refactor of `quadratic_reciprocity` is finished, they will be moved to appropriate files in mathlib.", "changes": [{"oldPath": null, "newPath": "src/number_theory/legendre_symbol/auxiliary.lean", "changes": [["add", "theorem", "even_card_iff_char_two", ["finite_field"]], ["add", "theorem", "even_card_of_char_two", ["finite_field"]], ["add", "theorem", "exists_nonsquare", ["finite_field"]], ["add", "theorem", "is_square_iff", ["finite_field"]], ["add", "theorem", "is_square_of_char_two", ["finite_field"]], ["add", "theorem", "neg_ne_self_of_char_ne_two", ["finite_field"]], ["add", "theorem", "neg_one_ne_one_of_char_ne_two", ["finite_field"]], ["add", "theorem", "odd_card_of_char_ne_two", ["finite_field"]], ["add", "theorem", "pow_dichotomy", ["finite_field"]], ["add", "theorem", "unit_is_square_iff", ["finite_field"]], ["add", "theorem", "is_square_of_char_two'", []], ["add", "theorem", "odd_mod_four_iff", ["nat"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["del", "theorem", "even_card_iff_char_two", ["finite_field"]], ["del", "theorem", "even_card_of_char_two", ["finite_field"]], ["del", "theorem", "exists_nonsquare", ["finite_field"]], ["del", "theorem", "is_square_iff", ["finite_field"]], ["del", "theorem", "is_square_of_char_two", ["finite_field"]], ["del", "theorem", "neg_ne_self_of_char_ne_two", ["finite_field"]], ["del", "theorem", "neg_one_ne_one_of_char_ne_two", ["finite_field"]], ["del", "theorem", "odd_card_of_char_ne_two", ["finite_field"]], ["del", "theorem", "pow_dichotomy", ["finite_field"]], ["del", "theorem", "unit_is_square_iff", ["finite_field"]], ["del", "theorem", "is_square_of_char_two'", []], ["del", "theorem", "odd_mod_four_iff", ["nat"]]]}]}, {"timestamp": 1652107250, "sha": "31af0e88", "message": "feat(model_theory/satisfiability): Definition of categorical theories (#14038)\nDefines that a first-order theory is `κ`-categorical when all models of cardinality `κ` are isomorphic.\nShows that all theories in the empty language are `κ`-categorical for all cardinals `κ`.", "changes": [{"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "def", "categorical", ["cardinal"]], ["add", "theorem", "empty_Theory_categorical", ["cardinal"]]]}]}, {"timestamp": 1652107249, "sha": "5d8b4328", "message": "feat(model_theory/language_map): Cardinality of languages with constants (#13981)\n`first_order.language.card_with_constants` shows that the cardinality of `L[[A]]` is `L.card + # A`.", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "sigma_nat_succ", ["equiv"]]]}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "card_mk₂", ["first_order", "language"]], ["add", "theorem", "constants_mk₂", ["first_order", "language"]], ["add", "theorem", "lift_mk", ["first_order", "sequence₂"]], ["add", "theorem", "sum_card", ["first_order", "sequence₂"]], ["mod", "def", "sequence₂", ["first_order"]]]}, {"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": []}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": [["add", "theorem", "card_constants_on", ["first_order", "language"]], ["add", "theorem", "card_with_constants", ["first_order", "language"]], ["mod", "def", "constants_on", ["first_order", "language"]], ["mod", "theorem", "constants_on_constants", ["first_order", "language"]], ["del", "def", "constants_on_functions", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "sum_nat_eq_add_sum_succ", ["cardinal"]]]}]}, {"timestamp": 1652107247, "sha": "4eb76a7b", "message": "refactor(set_theory/ordinal/arithmetic): Rename theorems to match `nat.log` API (#12733)\nWe match the API for `ordinal.log` with that of `nat.log`.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "theorem", "le_log", ["ordinal"]], ["mod", "def", "log", ["ordinal"]], ["del", "theorem", "log_le_log", ["ordinal"]], ["del", "theorem", "log_lt", ["ordinal"]], ["add", "theorem", "log_mono_right", ["ordinal"]], ["del", "theorem", "log_not_one_lt", ["ordinal"]], ["add", "theorem", "log_of_left_le_one", ["ordinal"]], ["add", "theorem", "log_of_not_one_lt_left", ["ordinal"]], ["del", "theorem", "log_one", ["ordinal"]], ["add", "theorem", "log_one_left", ["ordinal"]], ["add", "theorem", "log_one_right", ["ordinal"]], ["del", "theorem", "log_zero", ["ordinal"]], ["add", "theorem", "log_zero_left", ["ordinal"]], ["add", "theorem", "log_zero_right", ["ordinal"]], ["add", "theorem", "lt_opow_iff_log_lt", ["ordinal"]], ["del", "theorem", "lt_opow_succ_log", ["ordinal"]], ["add", "theorem", "lt_opow_succ_log_self", ["ordinal"]], ["mod", "theorem", "mod_opow_log_lt_self", ["ordinal"]], ["add", "theorem", "opow_le_iff_le_log", ["ordinal"]], ["del", "theorem", "opow_log_le", ["ordinal"]], ["add", "theorem", "opow_log_le_self", ["ordinal"]], ["mod", "theorem", "opow_mul_add_pos", ["ordinal"]], ["add", "theorem", "zero_le_one", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": []}]}, {"timestamp": 1652101110, "sha": "00cec552", "message": "feat(linear_algebra/affine_space/independent): add characterisation of affine independence for modules (#14043)", "changes": [{"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "weighted_vsub_eq_linear_combination", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_independent_iff", []]]}]}, {"timestamp": 1652101109, "sha": "1fef5154", "message": "chore(analysis/normed_space/basic): add short-circuit instance to obtain module structure over reals (#14013)", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}]}, {"timestamp": 1652101108, "sha": "4da939bf", "message": "feat(probability_theory/cond_count): use the counting measure to describe probability in the elementary sense (#13484)", "changes": [{"oldPath": null, "newPath": "src/probability/cond_count.lean", "changes": [["add", "def", "cond_count", ["probability_theory"]], ["add", "theorem", "cond_count_add_compl_eq", ["probability_theory"]], ["add", "theorem", "cond_count_compl", ["probability_theory"]], ["add", "theorem", "cond_count_disjoint_union", ["probability_theory"]], ["add", "theorem", "cond_count_empty", ["probability_theory"]], ["add", "theorem", "cond_count_empty_meas", ["probability_theory"]], ["add", "theorem", "cond_count_eq_one_of", ["probability_theory"]], ["add", "theorem", "cond_count_eq_zero_iff", ["probability_theory"]], ["add", "theorem", "cond_count_inter'", ["probability_theory"]], ["add", "theorem", "cond_count_inter", ["probability_theory"]], ["add", "theorem", "cond_count_inter_self", ["probability_theory"]], ["add", "theorem", "cond_count_is_probability_measure", ["probability_theory"]], ["add", "theorem", "cond_count_self", ["probability_theory"]], ["add", "theorem", "cond_count_singleton", ["probability_theory"]], ["add", "theorem", "cond_count_union", ["probability_theory"]], ["add", "theorem", "cond_count_univ", ["probability_theory"]], ["add", "theorem", "finite_of_cond_count_ne_zero", ["probability_theory"]], ["add", "theorem", "pred_true_of_cond_count_eq_one", ["probability_theory"]]]}, {"oldPath": "src/probability/conditional.lean", "newPath": "src/probability/conditional.lean", "changes": [["add", "theorem", "cond_add_cond_compl_eq", ["probability_theory"]], ["mod", "theorem", "cond_apply", ["probability_theory"]], ["add", "theorem", "cond_cond_eq_cond_inter'", ["probability_theory"]], ["mod", "theorem", "cond_cond_eq_cond_inter", ["probability_theory"]], ["add", "theorem", "cond_empty", ["probability_theory"]], ["mod", "theorem", "cond_eq_inv_mul_cond_mul", ["probability_theory"]], ["add", "theorem", "cond_inter_self", ["probability_theory"]], ["add", "theorem", "cond_mul_eq_inter'", ["probability_theory"]], ["mod", "theorem", "cond_mul_eq_inter", ["probability_theory"]], ["mod", "theorem", "cond_pos_of_inter_ne_zero", ["probability_theory"]]]}]}, {"timestamp": 1652098733, "sha": "5397ac0e", "message": "chore(ring_theory/hahn_series): remove redundant instances (#14045)\nBoth of these instances can be proved `by apply_instance`", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}]}, {"timestamp": 1652095563, "sha": "c43486ec", "message": "feat(category_theory/limits): allow (co)limits over lower universes in algebraic categories (#13990)\nI'm concerned about the new universe annotations required in places. It was not so impossible to add them when proofs broke, but the proofs might have been hard to construct in the first place ....", "changes": [{"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": [["mod", "def", "limit_cone", ["Algebra", "has_limits"]], ["mod", "def", "limit_cone_is_limit", ["Algebra", "has_limits"]], ["mod", "def", "limit_π_alg_hom", ["Algebra"]], ["mod", "def", "sections_subalgebra", ["Algebra"]]]}, {"oldPath": "src/algebra/category/FinVect/limits.lean", "newPath": "src/algebra/category/FinVect/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/filtered_colimits.lean", "newPath": "src/algebra/category/Group/filtered_colimits.lean", "changes": [["mod", "def", "G", ["CommGroup", "filtered_colimits"]], ["mod", "def", "G", ["Group", "filtered_colimits"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": [["mod", "def", "kernel_iso_ker", ["AddCommGroup"]], ["mod", "def", "forget₂_CommMon_preserves_limits_aux", ["CommGroup"]], ["mod", "def", "limit_cone", ["CommGroup"]], ["mod", "def", "limit_cone_is_limit", ["CommGroup"]], ["mod", "def", "limit_cone", ["Group"]], ["mod", "def", "limit_cone_is_limit", ["Group"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["mod", "theorem", "coe_of", ["Module"]]]}, {"oldPath": "src/algebra/category/Module/filtered_colimits.lean", "newPath": "src/algebra/category/Module/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": [["mod", "def", "forget₂_AddCommGroup_preserves_limits_aux", ["Module"]], ["mod", "def", "limit_cone", ["Module", "has_limits"]], ["mod", "def", "limit_cone_is_limit", ["Module", "has_limits"]], ["mod", "def", "sections_submodule", ["Module"]]]}, {"oldPath": "src/algebra/category/Module/products.lean", "newPath": "src/algebra/category/Module/products.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/filtered_colimits.lean", "newPath": "src/algebra/category/Mon/filtered_colimits.lean", "changes": [["mod", "def", "M", ["CommMon", "filtered_colimits"]], ["mod", "def", "M", ["Mon", "filtered_colimits"]]]}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": [["mod", "def", "limit_cone", ["CommMon"]], ["mod", "def", "limit_cone_is_limit", ["CommMon"]], ["mod", "def", "limit_cone", ["Mon", "has_limits"]], ["mod", "def", "limit_cone_is_limit", ["Mon", "has_limits"]], ["mod", "def", "limit_π_monoid_hom", ["Mon"]], ["mod", "def", "sections_submonoid", ["Mon"]]]}, {"oldPath": "src/algebra/category/Ring/filtered_colimits.lean", "newPath": "src/algebra/category/Ring/filtered_colimits.lean", "changes": [["mod", "def", "R", ["SemiRing", "filtered_colimits"]]]}, {"oldPath": "src/algebra/category/Ring/limits.lean", "newPath": "src/algebra/category/Ring/limits.lean", "changes": [["mod", "def", "forget₂_CommSemiRing_preserves_limits_aux", ["CommRing"]], ["mod", "def", "limit_cone", ["CommRing"]], ["mod", "def", "limit_cone_is_limit", ["CommRing"]], ["mod", "def", "limit_cone", ["CommSemiRing"]], ["mod", "def", "limit_cone_is_limit", ["CommSemiRing"]], ["mod", "def", "forget₂_AddCommGroup_preserves_limits_aux", ["Ring"]], ["mod", "def", "limit_cone", ["Ring"]], ["mod", "def", "limit_cone_is_limit", ["Ring"]], ["mod", "def", "sections_subring", ["Ring"]], ["mod", "def", "forget₂_AddCommMon_preserves_limits_aux", ["SemiRing"]], ["mod", "def", "forget₂_Mon_preserves_limits_aux", ["SemiRing"]], ["mod", "def", "limit_cone", ["SemiRing", "has_limits"]], ["mod", "def", "limit_cone_is_limit", ["SemiRing", "has_limits"]], ["mod", "def", "limit_π_ring_hom", ["SemiRing"]], ["mod", "def", "sections_subsemiring", ["SemiRing"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat/limit.lean", "newPath": "src/category_theory/category/Cat/limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/final.lean", "newPath": "src/category_theory/limits/final.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/filtered.lean", "newPath": "src/category_theory/limits/preserves/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "w_apply'", ["category_theory", "limits", "types", "colimit"]], ["mod", "theorem", "w_apply", ["category_theory", "limits", "types", "colimit"]], ["add", "theorem", "ι_desc_apply'", ["category_theory", "limits", "types", "colimit"]], ["mod", "theorem", "ι_desc_apply", ["category_theory", "limits", "types", "colimit"]], ["add", "theorem", "ι_map_apply'", ["category_theory", "limits", "types", "colimit"]], ["mod", "theorem", "ι_map_apply", ["category_theory", "limits", "types", "colimit"]], ["mod", "def", "colimit_cocone", ["category_theory", "limits", "types"]], ["mod", "def", "colimit_cocone_is_colimit", ["category_theory", "limits", "types"]], ["mod", "theorem", "colimit_eq", ["category_theory", "limits", "types"]], ["mod", "def", "colimit_equiv_quot", ["category_theory", "limits", "types"]], ["mod", "theorem", "colimit_equiv_quot_apply", ["category_theory", "limits", "types"]], ["mod", "theorem", "colimit_equiv_quot_symm_apply", ["category_theory", "limits", "types"]], ["mod", "def", "is_limit_equiv_sections", ["category_theory", "limits", "types"]], ["mod", "theorem", "jointly_surjective'", ["category_theory", "limits", "types"]], ["mod", "theorem", "jointly_surjective", ["category_theory", "limits", "types"]], ["add", "theorem", "lift_π_apply'", ["category_theory", "limits", "types", "limit"]], ["mod", "theorem", "lift_π_apply", ["category_theory", "limits", "types", "limit"]], ["add", "theorem", "map_π_apply'", ["category_theory", "limits", "types", "limit"]], ["mod", "theorem", "map_π_apply", ["category_theory", "limits", "types", "limit"]], ["mod", "def", "mk", ["category_theory", "limits", "types", "limit"]], ["add", "theorem", "w_apply'", ["category_theory", "limits", "types", "limit"]], ["mod", "theorem", "w_apply", ["category_theory", "limits", "types", "limit"]], ["add", "theorem", "π_mk'", ["category_theory", "limits", "types", "limit"]], ["mod", "theorem", "π_mk", ["category_theory", "limits", "types", "limit"]], ["mod", "def", "limit_cone", ["category_theory", "limits", "types"]], ["mod", "def", "limit_cone_is_limit", ["category_theory", "limits", "types"]], ["mod", "def", "limit_equiv_sections", ["category_theory", "limits", "types"]], ["mod", "theorem", "limit_equiv_sections_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "limit_equiv_sections_symm_apply'", ["category_theory", "limits", "types"]], ["mod", "theorem", "limit_equiv_sections_symm_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "limit_ext'", ["category_theory", "limits", "types"]], ["mod", "theorem", "limit_ext", ["category_theory", "limits", "types"]], ["add", "theorem", "limit_ext_iff'", ["category_theory", "limits", "types"]], ["mod", "theorem", "limit_ext_iff", ["category_theory", "limits", "types"]], ["mod", "def", "rel", ["category_theory", "limits", "types", "quot"]], ["mod", "def", "quot", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/default.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": [["mod", "def", "limit_cone", ["CompHaus"]], ["mod", "def", "limit_cone_is_limit", ["CompHaus"]]]}, {"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["mod", "theorem", "coinduced_of_is_colimit", ["Top"]], ["mod", "def", "colimit_cocone", ["Top"]], ["mod", "def", "colimit_cocone_is_colimit", ["Top"]], ["mod", "theorem", "colimit_is_open_iff", ["Top"]], ["mod", "theorem", "colimit_topology", ["Top"]], ["mod", "theorem", "induced_of_is_limit", ["Top"]], ["mod", "def", "limit_cone", ["Top"]], ["mod", "def", "limit_cone_infi", ["Top"]], ["mod", "def", "limit_cone_infi_is_limit", ["Top"]], ["mod", "def", "limit_cone_is_limit", ["Top"]], ["mod", "theorem", "limit_topology", ["Top"]], ["mod", "def", "pi_fan", ["Top"]], ["mod", "def", "pi_fan_is_limit", ["Top"]], ["mod", "def", "pi_iso_pi", ["Top"]], ["mod", "theorem", "pi_iso_pi_hom_apply", ["Top"]], ["mod", "theorem", "pi_iso_pi_inv_π", ["Top"]], ["mod", "theorem", "pi_iso_pi_inv_π_apply", ["Top"]], ["mod", "def", "pi_π", ["Top"]], ["mod", "def", "sigma_cofan", ["Top"]], ["mod", "def", "sigma_cofan_is_colimit", ["Top"]], ["mod", "def", "sigma_iso_sigma", ["Top"]], ["mod", "theorem", "sigma_iso_sigma_hom_ι", ["Top"]], ["mod", "theorem", "sigma_iso_sigma_hom_ι_apply", ["Top"]], ["mod", "theorem", "sigma_iso_sigma_inv_apply", ["Top"]], ["mod", "def", "sigma_ι", ["Top"]]]}, {"oldPath": "src/topology/gluing.lean", "newPath": "src/topology/gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1652095559, "sha": "ad244dd7", "message": "feat(ring_theory/dedekind_domain/adic_valuation): extend valuation (#13462)\nWe extend the `v`-adic valuation on a Dedekind domain `R` to its field of fractions `K` and prove some basic properties. We define the completion of `K` with respect to this valuation, as well as its ring of integers, and provide some topological instances.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "newPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "changes": [["add", "def", "adic_completion", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "def", "adic_completion_integers", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "def", "adic_valued", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "adic_valued_apply", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "def", "valuation", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_def", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_exists_uniformizer", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_le_one", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_lt_one_iff_dvd", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_of_algebra_map", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_of_mk'", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valuation_uniformizer_ne_zero", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "valued_adic_completion_def", ["is_dedekind_domain", "height_one_spectrum"]]]}]}, {"timestamp": 1652088059, "sha": "fc640963", "message": "feat(topology/algebra/infinite_sum): summable on subtype iff (#14032)\nA summable version of the `has_sum` lemma previously (the `tsum` version is already present)", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "summable_subtype_iff_indicator", []]]}]}, {"timestamp": 1652088058, "sha": "d55a6545", "message": "feat(order/*): Order constructions under `to_dual`/`of_dual` (#13788)\nA few missing lemmas about `of_dual` and `to_dual`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "map_of_dual_max", ["finset"]], ["add", "theorem", "map_of_dual_min", ["finset"]], ["add", "theorem", "map_to_dual_max", ["finset"]], ["add", "theorem", "map_to_dual_min", ["finset"]], ["del", "theorem", "max'_eq_of_dual_min'", ["finset"]], ["del", "theorem", "min'_eq_of_dual_max'", ["finset"]], ["add", "theorem", "of_dual_inf'", ["finset"]], ["add", "theorem", "of_dual_inf", ["finset"]], ["add", "theorem", "of_dual_max'", ["finset"]], ["del", "theorem", "of_dual_max_eq_min_of_dual", ["finset"]], ["add", "theorem", "of_dual_min'", ["finset"]], ["del", "theorem", "of_dual_min_eq_max_of_dual", ["finset"]], ["add", "theorem", "of_dual_sup'", ["finset"]], ["add", "theorem", "of_dual_sup", ["finset"]], ["add", "theorem", "to_dual_inf'", ["finset"]], ["add", "theorem", "to_dual_inf", ["finset"]], ["add", "theorem", "to_dual_max'", ["finset"]], ["add", "theorem", "to_dual_min'", ["finset"]], ["add", "theorem", "to_dual_sup'", ["finset"]], ["add", "theorem", "to_dual_sup", ["finset"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "of_dual_compl", []], ["add", "theorem", "to_dual_compl", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "of_dual_bot", []], ["add", "theorem", "of_dual_top", []], ["add", "theorem", "to_dual_bot", []], ["add", "theorem", "to_dual_top", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "of_dual_inf", []], ["add", "theorem", "of_dual_max", []], ["add", "theorem", "of_dual_min", []], ["add", "theorem", "of_dual_sup", []], ["add", "theorem", "to_dual_inf", []], ["add", "theorem", "to_dual_max", []], ["add", "theorem", "to_dual_min", []], ["add", "theorem", "to_dual_sup", []]]}]}, {"timestamp": 1652088056, "sha": "1d9d5739", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add some lemmas assuming `has_mul` `has_zero` `preorder` (#13296)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "le_mul_of_le_mul_left", ["zero_lt"]], ["add", "theorem", "le_mul_of_le_mul_right", ["zero_lt"]], ["add", "theorem", "lt_mul_of_lt_mul_left", ["zero_lt"]], ["add", "theorem", "lt_mul_of_lt_mul_right", ["zero_lt"]], ["add", "theorem", "mul_le_mul_of_le_of_le'", ["zero_lt"]], ["add", "theorem", "mul_le_mul_of_le_of_le", ["zero_lt"]], ["add", "theorem", "mul_le_of_mul_le_left", ["zero_lt"]], ["add", "theorem", "mul_le_of_mul_le_right", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_of_le_of_lt'", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_of_le_of_lt", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_of_lt_of_le'", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_of_lt_of_le", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_of_lt_of_lt'", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_of_lt_of_lt", ["zero_lt"]], ["add", "theorem", "mul_lt_of_mul_lt_left", ["zero_lt"]], ["add", "theorem", "mul_lt_of_mul_lt_right", ["zero_lt"]]]}]}, {"timestamp": 1652085081, "sha": "b38aee47", "message": "feat(analysis/special_functions): differentiability of Gamma function (#13000)\nThird instalment of my Gamma-function project (following #12917 and #13156). This PR adds the proof that the Gamma function is complex-analytic, away from the poles at non-positive integers.", "changes": [{"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": [["add", "theorem", "differentiable_at_Gamma", ["complex"]], ["add", "theorem", "differentiable_at_Gamma_aux", ["complex"]], ["add", "theorem", "has_deriv_at_Gamma_integral", ["complex"]], ["add", "theorem", "dGamma_integral_abs_convergent", []], ["add", "def", "dGamma_integrand", []], ["add", "theorem", "dGamma_integrand_is_O_at_top", []], ["add", "def", "dGamma_integrand_real", []], ["add", "theorem", "loc_unif_bound_dGamma_integrand", []], ["mod", "theorem", "Gamma_integrand_is_O", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log/basic.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["add", "theorem", "abs_log_mul_self_lt", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "abs_log_mul_self_rpow_lt", ["real"]]]}]}, {"timestamp": 1652076203, "sha": "bf8db9b7", "message": "feat(analysis/normed_space/matrix_exponential): lemmas about the matrix exponential (#13520)\nThis checks off \"Matrix Exponential\" from the undergrad TODO list, by providing the majority of the \"obvious\" statements about matrices over a real normed algebra. Combining this PR with what is already in mathlib, we have:\n* `exp 0 = 1`\n* `exp (A + B) = exp A * exp B` when `A` and `B` commute\n* `exp (n • A) = exp A ^ n`\n* `exp (z • A) = exp A ^ z`\n* `exp (-A) = (exp A)⁻¹`\n* `exp (U * D * ↑(U⁻¹)) = U * exp D * ↑(U⁻¹)`\n* `exp Aᵀ = (exp A)ᵀ`\n* `exp Aᴴ = (exp A)ᴴ`\n* `A * exp B = exp B * A` if `A * B = B * A`\n* `exp (diagonal v) = diagonal (exp v)`\n* `exp (block_diagonal v) = block_diagonal (exp v)`\n* `exp (block_diagonal' v) = block_diagonal' (exp v)`\nStill missing are:\n* `det (exp A) = exp (trace A)`\n* `exp A` can be written a weighted sum of powers of `A : matrix n n R` less than `fintype.card n` (an extension of [`matrix.pow_eq_aeval_mod_charpoly`](https://leanprover-community.github.io/mathlib_docs/linear_algebra/matrix/charpoly/coeff.html#matrix.pow_eq_aeval_mod_charpoly))\nThe proofs in this PR may seem small, but they had a substantial dependency chain: https://github.com/leanprover-community/mathlib/projects/16.\nIt turns out that there's always more missing glue than you think there is.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/matrix_exponential.lean", "changes": [["add", "theorem", "exp_add_of_commute", ["matrix"]], ["add", "theorem", "exp_block_diagonal'", ["matrix"]], ["add", "theorem", "exp_block_diagonal", ["matrix"]], ["add", "theorem", "exp_conj'", ["matrix"]], ["add", "theorem", "exp_conj", ["matrix"]], ["add", "theorem", "exp_conj_transpose", ["matrix"]], ["add", "theorem", "exp_diagonal", ["matrix"]], ["add", "theorem", "exp_neg", ["matrix"]], ["add", "theorem", "exp_nsmul", ["matrix"]], ["add", "theorem", "exp_sum_of_commute", ["matrix"]], ["add", "theorem", "exp_transpose", ["matrix"]], ["add", "theorem", "exp_units_conj'", ["matrix"]], ["add", "theorem", "exp_units_conj", ["matrix"]], ["add", "theorem", "exp_zsmul", ["matrix"]], ["add", "theorem", "is_unit_exp", ["matrix"]]]}]}, {"timestamp": 1652063870, "sha": "77c86ba4", "message": "rename(imo/imo1972_b2 → imo/imo1972_q5): Fix file name (#14037)", "changes": [{"oldPath": "archive/imo/imo1972_b2.lean", "newPath": "archive/imo/imo1972_q5.lean", "changes": []}]}, {"timestamp": 1652063869, "sha": "8412f1fc", "message": "feat(representation_theory/invariants): invariants of `lin_hom` are representation morphisms (#14012)", "changes": [{"oldPath": "src/representation_theory/invariants.lean", "newPath": "src/representation_theory/invariants.lean", "changes": [["add", "def", "invariants_equiv_Rep_hom", ["representation", "lin_hom"]], ["add", "theorem", "mem_invariants_iff_comm", ["representation", "lin_hom"]]]}]}, {"timestamp": 1652063867, "sha": "594ceda9", "message": "feat(analysis/normed_space/exponential): Generalize `field` lemmas to `division_ring` (#13997)\nThis generalizes the lemmas about `exp 𝕂 𝕂` to lemmas about `exp 𝕂 𝔸` where `𝔸` is a `division_ring`.\nThis moves the lemmas down to the appropriate division_ring sections, and replaces the word `field` with `div` in their names, since `division_ring` is a mouthful, and really the name reflects the use of `/` in the definition.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["mod", "theorem", "exp_continuous", []], ["add", "theorem", "exp_eq_tsum_div", []], ["del", "theorem", "exp_eq_tsum_field", []], ["add", "theorem", "exp_series_apply_eq_div'", []], ["add", "theorem", "exp_series_apply_eq_div", []], ["del", "theorem", "exp_series_apply_eq_field'", []], ["del", "theorem", "exp_series_apply_eq_field", []], ["add", "theorem", "exp_series_div_has_sum_exp", []], ["add", "theorem", "exp_series_div_has_sum_exp_of_mem_ball", []], ["add", "theorem", "exp_series_div_summable", []], ["add", "theorem", "exp_series_div_summable_of_mem_ball", []], ["del", "theorem", "exp_series_field_has_sum_exp", []], ["del", "theorem", "exp_series_field_has_sum_exp_of_mem_ball", []], ["del", "theorem", "exp_series_field_summable", []], ["del", "theorem", "exp_series_field_summable_of_mem_ball", []], ["add", "theorem", "exp_series_sum_eq_div", []], ["del", "theorem", "exp_series_sum_eq_field", []], ["add", "theorem", "norm_exp_series_div_summable", []], ["add", "theorem", "norm_exp_series_div_summable_of_mem_ball", []], ["del", "theorem", "norm_exp_series_field_summable", []], ["del", "theorem", "norm_exp_series_field_summable_of_mem_ball", []]]}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/exponential.lean", "newPath": "src/combinatorics/derangements/exponential.lean", "changes": []}]}, {"timestamp": 1652063867, "sha": "afec1d73", "message": "fix(tactics/alias): Make docstring calculation available to to_additive (#13968)\nPR #13944 fixed the docstrings for iff-style aliases, but because of\ncode duplication I added in #13330 this did not apply to aliases\nintroduced by `to_additive`. This fixes that.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}]}, {"timestamp": 1652063865, "sha": "34b61e3d", "message": "chore(algebra/regular/*): generalisation linter (#13955)", "changes": [{"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": []}, {"oldPath": "src/algebra/regular/smul.lean", "newPath": "src/algebra/regular/smul.lean", "changes": [["mod", "theorem", "mul", ["is_smul_regular"]], ["mod", "theorem", "mul_and_mul_iff", ["is_smul_regular"]], ["mod", "theorem", "mul_iff_right", ["is_smul_regular"]], ["mod", "theorem", "of_mul", ["is_smul_regular"]]]}]}, {"timestamp": 1652063864, "sha": "52531532", "message": "feat(algebra/category/Module/basic): `iso.hom_congr`agrees with `linear_equiv.arrow_congr` (#13954)", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "theorem", "conj_eq_conj", ["Module", "iso"]], ["add", "theorem", "hom_congr_eq_arrow_congr", ["Module", "iso"]]]}]}, {"timestamp": 1652063863, "sha": "4f386e66", "message": "feat(set_theory/pgame/birthday): Birthdays of ordinals (#13714)", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": [["add", "theorem", "le_birthday", ["pgame"]], ["add", "theorem", "neg_birthday", ["pgame"]], ["add", "theorem", "neg_birthday_le", ["pgame"]], ["add", "theorem", "to_pgame_birthday", ["pgame"]]]}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}]}, {"timestamp": 1652063862, "sha": "1e8f3817", "message": "feat(algebraic_topology/dold_kan): defining some null homotopic maps (#13085)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/homology/complex_shape.lean", "newPath": "src/algebra/homology/complex_shape.lean", "changes": [["add", "theorem", "down'_mk", ["complex_shape"]], ["add", "theorem", "down_mk", ["complex_shape"]]]}, {"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/homotopies.lean", "changes": [["add", "def", "Hσ", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "Hσ_eq_zero", ["algebraic_topology", "dold_kan"]], ["add", "def", "c", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "c_mk", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "cs_down_0_not_rel_left", ["algebraic_topology", "dold_kan"]], ["add", "def", "homotopy_Hσ_to_zero", ["algebraic_topology", "dold_kan"]], ["add", "def", "hσ'", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "hσ'_eq", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "hσ'_eq_zero", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "hσ'_naturality", ["algebraic_topology", "dold_kan"]], ["add", "def", "hσ", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "map_Hσ", ["algebraic_topology", "dold_kan"]], ["add", "theorem", "map_hσ'", ["algebraic_topology", "dold_kan"]], ["add", "def", "nat_trans_Hσ", ["algebraic_topology", "dold_kan"]]]}, {"oldPath": null, "newPath": "src/algebraic_topology/dold_kan/notations.lean", "changes": []}]}, {"timestamp": 1652056480, "sha": "bf6e13bf", "message": "refactor(algebra/{group,group_with_zero/basic): Generalize lemmas to division monoids (#14000)\nGeneralize `group` and `group_with_zero` lemmas to `division_monoid`. We do not actually delete the original lemmas but make them one-liners from the new ones. The next PR will then delete the old lemmas and perform the renames in all files.\nLemmas are renamed because\n* one of the `group` or `group_with_zero` name has to go\n* the new API should have a consistent naming convention\nPre-emptive lemma renames", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "div_div", []], ["mod", "theorem", "div_div_assoc_swap", []], ["mod", "theorem", "div_div_div_comm", []], ["mod", "theorem", "div_eq_div_mul_div", []], ["mod", "theorem", "div_eq_inv_mul'", []], ["add", "theorem", "div_eq_mul_one_div", []], ["mod", "theorem", "div_inv_eq_mul", []], ["mod", "theorem", "div_mul", []], ["mod", "theorem", "div_ne_one_of_ne", []], ["mod", "theorem", "div_one'", []], ["add", "theorem", "div_div", ["division_comm_monoid"]], ["add", "theorem", "div_div_div_comm", ["division_comm_monoid"]], ["add", "theorem", "div_div_div_eq", ["division_comm_monoid"]], ["add", "theorem", "div_eq_inv_mul", ["division_comm_monoid"]], ["add", "theorem", "div_mul", ["division_comm_monoid"]], ["add", "theorem", "div_mul_comm", ["division_comm_monoid"]], ["add", "theorem", "div_mul_div_comm", ["division_comm_monoid"]], ["add", "theorem", "div_mul_eq_div_div", ["division_comm_monoid"]], ["add", "theorem", "div_mul_eq_div_mul_one_div", ["division_comm_monoid"]], ["add", "theorem", "div_mul_eq_mul_div", ["division_comm_monoid"]], ["add", "theorem", "div_right_comm", ["division_comm_monoid"]], ["add", "theorem", "inv_div_inv", ["division_comm_monoid"]], ["add", "theorem", "inv_inv_div_inv", ["division_comm_monoid"]], ["add", "theorem", "inv_mul'", ["division_comm_monoid"]], ["add", "theorem", "inv_mul_eq_div", ["division_comm_monoid"]], ["add", "theorem", "mul_comm_div", ["division_comm_monoid"]], ["add", "theorem", "mul_div_left_comm", ["division_comm_monoid"]], ["add", "theorem", "mul_div_mul_comm", ["division_comm_monoid"]], ["add", "theorem", "mul_div_right_comm", ["division_comm_monoid"]], ["add", "theorem", "mul_inv", ["division_comm_monoid"]], ["add", "theorem", "one_div_mul_one_div", ["division_comm_monoid"]], ["add", "theorem", "div_div_eq_mul_div", ["division_monoid"]], ["add", "theorem", "div_inv_eq_mul", ["division_monoid"]], ["add", "theorem", "div_mul_eq_div_div_swap", ["division_monoid"]], ["add", "theorem", "div_ne_one_of_ne", ["division_monoid"]], ["add", "theorem", "div_one", ["division_monoid"]], ["add", "theorem", "eq_inv_of_mul_eq_one_left", ["division_monoid"]], ["add", "theorem", "eq_inv_of_mul_eq_one_right", ["division_monoid"]], ["add", "theorem", "eq_of_div_eq_one", ["division_monoid"]], ["add", "theorem", "eq_of_one_div_eq_one_div", ["division_monoid"]], ["add", "theorem", "eq_one_div_of_mul_eq_one_left", ["division_monoid"]], ["add", "theorem", "eq_one_div_of_mul_eq_one_right", ["division_monoid"]], ["add", "theorem", "inv_div", ["division_monoid"]], ["add", "theorem", "inv_div_left", ["division_monoid"]], ["add", "theorem", "inv_eq_of_mul_eq_one_left", ["division_monoid"]], ["add", "theorem", "inv_eq_one", ["division_monoid"]], ["add", "theorem", "inv_ne_one", ["division_monoid"]], ["add", "theorem", "inv_one", ["division_monoid"]], ["add", "theorem", "one_div_div", ["division_monoid"]], ["add", "theorem", "one_div_mul_one_div_rev", ["division_monoid"]], ["add", "theorem", "one_div_one", ["division_monoid"]], ["add", "theorem", "one_div_one_div", ["division_monoid"]], ["add", "theorem", "one_eq_inv", ["division_monoid"]], ["mod", "theorem", "eq_inv_of_mul_eq_one", []], ["mod", "theorem", "eq_of_div_eq_one'", []], ["mod", "theorem", "inv_div'", []], ["mod", "theorem", "inv_div_inv", []], ["mod", "theorem", "inv_eq_one", []], ["mod", "theorem", "inv_inv_div_inv", []], ["mod", "theorem", "inv_mul'", []], ["mod", "theorem", "inv_mul_eq_div", []], ["mod", "theorem", "inv_ne_one", []], ["mod", "theorem", "left_inverse_inv", []], ["mod", "theorem", "mul_inv", []], ["mod", "theorem", "one_eq_inv", []], ["mod", "theorem", "one_inv", []], ["add", "theorem", "right_inverse_inv", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["add", "theorem", "inv_eq_of_mul_eq_one_right", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "div_eq_inv_mul", []], ["del", "theorem", "div_eq_mul_one_div", []], ["mod", "theorem", "div_one", []], ["mod", "theorem", "eq_inv_of_mul_left_eq_one", []], ["mod", "theorem", "eq_inv_of_mul_right_eq_one", []], ["mod", "theorem", "eq_of_div_eq_one", []], ["mod", "theorem", "eq_of_one_div_eq_one_div", []], ["mod", "theorem", "eq_one_div_of_mul_eq_one", []], ["mod", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["mod", "theorem", "inv_div", []], ["mod", "theorem", "inv_div_left", []], ["mod", "theorem", "inv_eq_one₀", []], ["mod", "theorem", "inv_one", []], ["mod", "theorem", "mul_comm_div'", []], ["mod", "theorem", "mul_inv_rev₀", []], ["mod", "theorem", "mul_inv₀", []], ["mod", "theorem", "one_div_div", []], ["mod", "theorem", "one_div_one", []], ["mod", "theorem", "one_div_one_div", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}]}, {"timestamp": 1652036813, "sha": "449ba97d", "message": "refactor(data/nat/log): Golf + improved theorem names (#14019)\nOther than golfing and moving a few things around, our main changes are:\n- rename `log_le_log_of_le` to `log_mono_right`, analogous renames elsewhere.\n- add `lt_pow_iff_log_lt` and a `clog` analog.", "changes": [{"oldPath": "src/data/nat/choose/central.lean", "newPath": "src/data/nat/choose/central.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": [["add", "theorem", "clog_anti_left", ["nat"]], ["del", "theorem", "clog_le_clog_of_le", ["nat"]], ["del", "theorem", "clog_le_clog_of_left_ge", ["nat"]], ["add", "theorem", "clog_mono_right", ["nat"]], ["mod", "theorem", "le_pow_iff_clog_le", ["nat"]], ["add", "theorem", "log_anti_left", ["nat"]], ["del", "theorem", "log_eq_zero", ["nat"]], ["del", "theorem", "log_le_log_of_le", ["nat"]], ["del", "theorem", "log_le_log_of_left_ge", ["nat"]], ["add", "theorem", "log_mono_right", ["nat"]], ["mod", "theorem", "log_monotone", ["nat"]], ["mod", "theorem", "log_of_left_le_one", ["nat"]], ["mod", "theorem", "log_of_lt", ["nat"]], ["mod", "theorem", "log_one_left", ["nat"]], ["mod", "theorem", "log_zero_left", ["nat"]], ["add", "theorem", "lt_pow_iff_log_lt", ["nat"]], ["mod", "theorem", "pow_le_iff_le_log", ["nat"]], ["add", "theorem", "pow_lt_iff_lt_clog", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}]}, {"timestamp": 1652032918, "sha": "163ef61e", "message": "feat(topology/algebra/infinite_sum): add `tsum_star` (#13999)\nThese lemmas names are copied from `tsum_neg` and friends.\nAs a result, `star_exp` can be golfed and generalized.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["mod", "theorem", "star_exp", []]]}, {"oldPath": "src/analysis/normed_space/star/exponential.lean", "newPath": "src/analysis/normed_space/star/exponential.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "star", ["has_sum"]], ["add", "theorem", "of_star", ["summable"]], ["add", "theorem", "star", ["summable"]], ["add", "theorem", "summable_star_iff'", []], ["add", "theorem", "summable_star_iff", []], ["add", "theorem", "tsum_star", []]]}]}, {"timestamp": 1652032918, "sha": "dd16a836", "message": "fix(topology/algebra/module/weak_dual): fix namespace issue, add a few extra lemmas (#13407)\nThis PR fixes a namespace issue in `weak_dual`, to ensure lemmas with names like `eval_continuous` are appropriately namespaced. Also, lemmas about continuity of the evaluation map have been copied from `weak_bilin` to `weak_dual`.", "changes": [{"oldPath": "src/analysis/locally_convex/polar.lean", "newPath": "src/analysis/locally_convex/polar.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": [["del", "theorem", "bilin_embedding", []], ["del", "theorem", "coe_fn_continuous", []], ["del", "theorem", "continuous_of_continuous_eval", []], ["del", "theorem", "eval_continuous", []], ["del", "theorem", "tendsto_iff_forall_eval_tendsto", []], ["add", "theorem", "coe_fn_continuous", ["weak_bilin"]], ["add", "theorem", "continuous_of_continuous_eval", ["weak_bilin"]], ["add", "theorem", "embedding", ["weak_bilin"]], ["add", "theorem", "eval_continuous", ["weak_bilin"]], ["add", "theorem", "tendsto_iff_forall_eval_tendsto", ["weak_bilin"]], ["add", "theorem", "coe_fn_continuous", ["weak_dual"]], ["add", "theorem", "continuous_of_continuous_eval", ["weak_dual"]], ["add", "theorem", "eval_continuous", ["weak_dual"]]]}]}, {"timestamp": 1652027489, "sha": "69c07a4b", "message": "feat(linear_algebra/linear_pmap): `mk_span_singleton` of the same point (#14029)\nOne more lemma about `mk_span_singleton'` and slightly better lemma names.", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "mk_span_singleton'_apply", ["linear_pmap"]], ["add", "theorem", "mk_span_singleton'_apply_self", ["linear_pmap"]], ["del", "theorem", "mk_span_singleton_apply'", ["linear_pmap"]], ["mod", "theorem", "mk_span_singleton_apply", ["linear_pmap"]]]}]}, {"timestamp": 1652027488, "sha": "6a5d17ee", "message": "feat(measure_theory/integral): a few more integral lemmas (#14025)", "changes": [{"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "trans_iterate_Ico", ["interval_integrable"]], ["add", "theorem", "sum_integral_adjacent_intervals_Ico", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "of_real_set_integral_one", ["measure_theory"]], ["add", "theorem", "of_real_set_integral_one_of_measure_ne_top", ["measure_theory"]]]}]}, {"timestamp": 1652025336, "sha": "e3306942", "message": "feat(analysis/p_series): explicit bounds on sums of the form 1/j^2 (#13851)", "changes": [{"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": [["add", "theorem", "sum_Ioc_inv_sq_le_sub", []], ["add", "theorem", "sum_Ioo_inv_sq_le", []]]}]}, {"timestamp": 1652018553, "sha": "79ffb556", "message": "chore(algebra/category/CommRing=>Ring): rename (#14022)\nThis folder was originally named `algebra/category/CommRing/` because it only handled the commutative case. That's largely no longer the case, so we should rename the folder.", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/BoolRing.lean", "newPath": "src/algebra/category/BoolRing.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/Ring/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/Ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/Ring/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/constructions.lean", "newPath": "src/algebra/category/Ring/constructions.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/Ring/default.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/filtered_colimits.lean", "newPath": "src/algebra/category/Ring/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/instances.lean", "newPath": "src/algebra/category/Ring/instances.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/Ring/limits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1652014528, "sha": "3478a2af", "message": "feat(probability/ident_distrib): identically distributed random variables (#14024)", "changes": [{"oldPath": null, "newPath": "src/probability/ident_distrib.lean", "changes": [["add", "theorem", "ae_mem_snd", ["probability_theory", "ident_distrib"]], ["add", "theorem", "ae_snd", ["probability_theory", "ident_distrib"]], ["add", "theorem", "ae_strongly_measurable_fst", ["probability_theory", "ident_distrib"]], ["add", "theorem", "ae_strongly_measurable_iff", ["probability_theory", "ident_distrib"]], ["add", "theorem", "ae_strongly_measurable_snd", ["probability_theory", "ident_distrib"]], ["add", "theorem", "const_div", ["probability_theory", "ident_distrib"]], ["add", "theorem", "const_mul", ["probability_theory", "ident_distrib"]], ["add", "theorem", "div_const", ["probability_theory", "ident_distrib"]], ["add", "theorem", "ess_sup_eq", ["probability_theory", "ident_distrib"]], ["add", "theorem", "integrable_iff", ["probability_theory", "ident_distrib"]], ["add", "theorem", "integrable_snd", ["probability_theory", "ident_distrib"]], ["add", "theorem", "integral_eq", ["probability_theory", "ident_distrib"]], ["add", "theorem", "lintegral_eq", ["probability_theory", "ident_distrib"]], ["add", "theorem", "measure_mem_eq", ["probability_theory", "ident_distrib"]], ["add", "theorem", "mem_ℒp_iff", ["probability_theory", "ident_distrib"]], ["add", "theorem", "mem_ℒp_snd", ["probability_theory", "ident_distrib"]], ["add", "theorem", "mul_const", ["probability_theory", "ident_distrib"]], ["add", "theorem", "snorm_eq", ["probability_theory", "ident_distrib"]], ["add", "theorem", "variance_eq", ["probability_theory", "ident_distrib"]], ["add", "structure", "ident_distrib", ["probability_theory"]]]}]}, {"timestamp": 1651991053, "sha": "0c64b3d3", "message": "feat(algebra/category/Module): biproducts (#13908)\nFollowing the same pattern for `AddCommGroup`, create the instance for biproducts in` Module R`, and check they are isomorphic to the usual construction.", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": [["add", "theorem", "binary_product_limit_cone_cone_π_app_left", ["AddCommGroup"]], ["add", "theorem", "binary_product_limit_cone_cone_π_app_right", ["AddCommGroup"]], ["mod", "def", "biproduct_iso_pi", ["AddCommGroup"]], ["add", "theorem", "biproduct_iso_pi_inv_comp_π", ["AddCommGroup"]], ["mod", "def", "product_limit_cone", ["AddCommGroup", "has_limit"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/biproducts.lean", "changes": [["add", "def", "binary_product_limit_cone", ["Module"]], ["add", "theorem", "binary_product_limit_cone_cone_π_app_left", ["Module"]], ["add", "theorem", "binary_product_limit_cone_cone_π_app_right", ["Module"]], ["add", "def", "biprod_iso_prod", ["Module"]], ["add", "theorem", "biprod_iso_prod_inv_comp_fst", ["Module"]], ["add", "theorem", "biprod_iso_prod_inv_comp_snd", ["Module"]], ["add", "def", "biproduct_iso_pi", ["Module"]], ["add", "theorem", "biproduct_iso_pi_inv_comp_π", ["Module"]], ["add", "def", "lift", ["Module", "has_limit"]], ["add", "theorem", "lift_apply", ["Module", "has_limit"]], ["add", "def", "product_limit_cone", ["Module", "has_limit"]]]}]}, {"timestamp": 1651985421, "sha": "ce0dc836", "message": "feat(set_theory/ordinal/basic): Supremum indexed over an empty / unique type (#13735)\nThis PR contains the following changes:\n- The lemmas `sup_unique`, `bsup_one`, `lsub_unique`, `blsub_one`.\n- `congr` lemmas for `bsup` and `blsub`\n- Arguments like `o = 0` are removed as the `congr` lemmas now handle this.\n- `a + 1` is changed to `a.succ` in some lemmas (for better rewriting).", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "blsub_congr", ["ordinal"]], ["mod", "theorem", "blsub_const", ["ordinal"]], ["add", "theorem", "blsub_one", ["ordinal"]], ["mod", "theorem", "blsub_zero", ["ordinal"]], ["add", "theorem", "bsup_congr", ["ordinal"]], ["add", "theorem", "bsup_one", ["ordinal"]], ["mod", "theorem", "bsup_zero", ["ordinal"]], ["mod", "theorem", "lsub_const", ["ordinal"]], ["mod", "theorem", "lsub_empty", ["ordinal"]], ["add", "theorem", "lsub_unique", ["ordinal"]], ["mod", "theorem", "sup_const", ["ordinal"]], ["mod", "theorem", "sup_empty", ["ordinal"]], ["add", "theorem", "sup_unique", ["ordinal"]]]}]}, {"timestamp": 1651962108, "sha": "3a0eb4b5", "message": "chore(logic/relation): Dot notation on `well_founded.trans_gen` (#14016)", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["del", "theorem", "trans_gen", ["relation", "well_founded"]], ["add", "theorem", "trans_gen", ["well_founded"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "wf_subsequent", ["pgame"]]]}]}, {"timestamp": 1651962107, "sha": "e1902256", "message": "feat(data/rat/meta_defs, meta/expr): rat.to_pexpr and int.to_pexpr (#14002)", "changes": [{"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1651954508, "sha": "e0dd3003", "message": "feat(algebra/{invertible + group_power/lemmas}): taking `inv_of` (⅟_) is injective (#14011)\nBesides the lemma stated in the description, I also made explicit an argument that was implicit in a different lemma and swapped the arguments of `invertible_unique` in order to get the typeclass assumptions before some non-typeclass assumptions.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/inv_of_inj)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "inv_of_inj", []], ["mod", "theorem", "inv_of_inv_of", []], ["mod", "theorem", "invertible_unique", []]]}]}, {"timestamp": 1651938610, "sha": "0e494afe", "message": "chore(order/*): Less `order_dual` abuse (#14008)\nSanitize uses of `order_dual` by inserting the required `of_dual` and `to_dual` instead of type-ascripting. Also remove some uses which were not necessary. Those dated from the time where we did not have antitone functions.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": [["mod", "def", "decreasing_sequence", []], ["add", "theorem", "strict_anti_sequence_of_cubes", []], ["del", "theorem", "strict_mono_sequence_of_cubes", []]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "one_div_pow_anti", []], ["del", "theorem", "one_div_pow_mono", []], ["add", "theorem", "one_div_pow_strict_anti", []], ["del", "theorem", "one_div_pow_strict_mono", []]]}, {"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": [["mod", "theorem", "dual", ["quasiconcave_on"]], ["mod", "theorem", "dual", ["quasiconvex_on"]], ["mod", "theorem", "dual", ["quasilinear_on"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "le_inf'_iff", ["finset"]]]}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}, {"oldPath": "src/order/compare.lean", "newPath": "src/order/compare.lean", "changes": [["add", "theorem", "of_dual_compares_of_dual", []], ["del", "theorem", "dual_compares", ["order_dual"]], ["add", "theorem", "to_dual_compares_to_dual", []]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["mod", "def", "dual", ["galois_coinsertion"]], ["mod", "def", "of_dual", ["galois_coinsertion"]], ["mod", "structure", "galois_coinsertion", []], ["mod", "def", "dual", ["galois_insertion"]], ["mod", "def", "of_dual", ["galois_insertion"]]]}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": []}, {"oldPath": "src/order/ord_continuous.lean", "newPath": "src/order/ord_continuous.lean", "changes": []}]}, {"timestamp": 1651938609, "sha": "51667657", "message": "chore(order/filter/pointwise): Better definitional unfolding (#13941)\nTweak pointwise operation definitions to make them easier to work with:\n* `1` is now `pure 1` instead of `principal 1`. This changes defeq.\n* Binary operations unfold to the set operation instead exposing a bare `set.image2` (`obtain ⟨t₁, t₂, h₁, h₂, h⟩ : s ∈ f * g` now gives `h : t₁ * t₂ ⊆ s` instead of `h : set.image2 (*) t₁ t₂ ⊆ s`. This does not change defeq.", "changes": [{"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["mod", "theorem", "eventually_one", ["filter"]], ["mod", "theorem", "le_one_iff", ["filter"]], ["mod", "theorem", "mem_one", ["filter"]], ["mod", "theorem", "one_mem_one", ["filter"]], ["add", "theorem", "one_ne_bot", ["filter"]], ["mod", "theorem", "principal_one", ["filter"]], ["mod", "theorem", "pure_one", ["filter"]]]}]}, {"timestamp": 1651924740, "sha": "cf65daf0", "message": "feat(probability/variance): define the variance of a random variable, prove its basic properties (#13912)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": [["mod", "theorem", "integrable_mul", ["probability_theory", "indep_fun"]], ["add", "theorem", "integral_mul_of_integrable'", ["probability_theory", "indep_fun"]]]}, {"oldPath": null, "newPath": "src/probability/variance.lean", "changes": [["add", "theorem", "variance_add", ["probability_theory", "indep_fun"]], ["add", "theorem", "variance_sum", ["probability_theory", "indep_fun"]], ["add", "theorem", "meas_ge_le_variance_div_sq", ["probability_theory"]], ["add", "def", "variance", ["probability_theory"]], ["add", "theorem", "variance_def'", ["probability_theory"]], ["add", "theorem", "variance_le_expectation_sq", ["probability_theory"]], ["add", "theorem", "variance_mul", ["probability_theory"]], ["add", "theorem", "variance_nonneg", ["probability_theory"]], ["add", "theorem", "variance_smul'", ["probability_theory"]], ["add", "theorem", "variance_smul", ["probability_theory"]], ["add", "theorem", "variance_zero", ["probability_theory"]]]}]}, {"timestamp": 1651917474, "sha": "c2476223", "message": "feat(group_theory/group_action/units): simp lemma for scalar action of `is_unit.unit h` (#14006)", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "smul_mk0", ["units"]]]}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": [["add", "theorem", "smul_is_unit", ["units"]]]}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}]}, {"timestamp": 1651917473, "sha": "9134a8e7", "message": "feat(combinatorics/simple_graph/hasse): Hasse diagram and path graph (#13959)\nDefine the Hasse diagram of an order and the path graph on `n` vertices as the Hasse diagram of `fin n`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["del", "theorem", "irrefl", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/hasse.lean", "changes": [["add", "def", "hasse", ["simple_graph"]], ["add", "theorem", "hasse_adj", ["simple_graph"]], ["add", "def", "hasse_dual_iso", ["simple_graph"]], ["add", "theorem", "hasse_dual_iso_apply", ["simple_graph"]], ["add", "theorem", "hasse_dual_iso_symm_apply", ["simple_graph"]], ["add", "theorem", "hasse_preconnected_of_pred", ["simple_graph"]], ["add", "theorem", "hasse_preconnected_of_succ", ["simple_graph"]], ["add", "def", "path_graph", ["simple_graph"]], ["add", "theorem", "path_graph_connected", ["simple_graph"]], ["add", "theorem", "path_graph_preconnected", ["simple_graph"]]]}]}, {"timestamp": 1651917471, "sha": "b2aa27e3", "message": "feat(analysis/calculus/deriv): generalize some lemmas (#13575)\nThe types of scalar and codomain can be different now.\nFor example, these lemmas can be used for `f : ℝ → ℂ` `f' : ℝ →L[ℝ] ℂ` now.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "comp_has_fderiv_at", ["has_deriv_at"]], ["mod", "theorem", "comp_has_fderiv_within_at", ["has_deriv_at"]], ["mod", "theorem", "comp_has_fderiv_at_filter", ["has_deriv_at_filter"]], ["mod", "theorem", "comp_has_fderiv_within_at", ["has_deriv_within_at"]], ["mod", "theorem", "comp_has_strict_fderiv_at", ["has_strict_deriv_at"]]]}]}, {"timestamp": 1651911610, "sha": "f8bc097d", "message": "feat(algebra/module/linear_map): `Rᵐᵒᵖ` is isomorphic to `module.End R R` (#13931)\nThis PR adds the canonical (semi)ring isomorphism from `Rᵐᵒᵖ` to\n`module.End R R` for a (semi)ring `R`, given by the right multiplication.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "ext_ring_op", ["linear_map"]], ["add", "def", "module_End_self", ["module"]], ["add", "def", "module_End_self_op", ["module"]]]}]}, {"timestamp": 1651907236, "sha": "559f58b1", "message": "feat(order/filter): add a few lemmas (#13985)\n* weaken assumptions of `filter.has_antitone_basis.tendsto` from `[semilattice_sup ι] [nonempty ι]` to `[preorder ι]`;\n* add `filter.has_antitone_basis.tendsto`, `filter.has_antitone_basis.mem`, `filter.has_antitone_basis.tendsto_small_sets`.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_subset", ["filter", "has_antitone_basis"]], ["del", "theorem", "tendsto", ["filter", "has_antitone_basis"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": [["add", "theorem", "tendsto_small_sets", ["filter", "has_antitone_basis"]]]}]}, {"timestamp": 1651898756, "sha": "ca1375a5", "message": "refactor(algebra/order/monoid_lemmas): reorder the file (#13492)\nJust like in `algebra/order/monoid_lemmas_zero_lt`, sort by algebraic assumptions and order assumptions first, then put similar lemmas together.\nIt would be simpler to find duplicates, missing lemmas, and inconsistencies. (There are so many!)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["mod", "def", "to_left_cancel_semigroup", ["contravariant"]], ["mod", "def", "to_right_cancel_semigroup", ["contravariant"]], ["mod", "theorem", "exists_square_le", []], ["mod", "theorem", "le_mul_of_le_mul_left", []], ["mod", "theorem", "le_mul_of_le_mul_right", []], ["mod", "theorem", "le_mul_of_le_of_one_le", []], ["mod", "theorem", "le_mul_of_one_le_left'", []], ["mod", "theorem", "le_mul_of_one_le_right'", []], ["mod", "theorem", "le_of_le_mul_of_le_one_left", []], ["mod", "theorem", "le_of_le_mul_of_le_one_right", []], ["mod", "theorem", "le_of_mul_le_of_one_le_left", []], ["mod", "theorem", "le_of_mul_le_of_one_le_right", []], ["mod", "theorem", "lt_mul_of_lt_mul_left", []], ["mod", "theorem", "lt_mul_of_lt_mul_right", []], ["mod", "theorem", "lt_mul_of_lt_of_one_le'", []], ["mod", "theorem", "lt_mul_of_lt_of_one_lt'", []], ["mod", "theorem", "lt_mul_of_one_le_of_lt", []], ["mod", "theorem", "lt_mul_of_one_lt_of_lt", []], ["mod", "theorem", "lt_of_lt_mul_of_le_one_left", []], ["mod", "theorem", "lt_of_lt_mul_of_le_one_right", []], ["mod", "theorem", "lt_of_mul_lt_of_one_le_left", []], ["mod", "theorem", "lt_of_mul_lt_of_one_le_right", []], ["mod", "theorem", "mul_eq_mul_iff_eq_and_eq", []], ["mod", "theorem", "mul_eq_one_iff'", []], ["mod", "theorem", "mul_le_mul'", []], ["mod", "theorem", "mul_le_mul_left'", []], ["mod", "theorem", "mul_le_mul_three", []], ["mod", "theorem", "mul_le_of_le_one_left'", []], ["mod", "theorem", "mul_le_of_le_one_right'", []], ["mod", "theorem", "mul_le_of_mul_le_left", []], ["mod", "theorem", "mul_le_of_mul_le_right", []], ["mod", "theorem", "mul_left_cancel''", []], ["mod", "theorem", "mul_lt_mul'''", []], ["mod", "theorem", "mul_lt_mul_left'", []], ["mod", "theorem", "mul_lt_mul_of_le_of_lt", []], ["mod", "theorem", "mul_lt_mul_of_lt_of_le", []], ["mod", "theorem", "mul_lt_mul_of_lt_of_lt", []], ["mod", "theorem", "mul_lt_of_le_of_lt_one", []], ["mod", "theorem", "mul_lt_of_mul_lt_left", []], ["mod", "theorem", "mul_lt_of_mul_lt_right", []], ["mod", "theorem", "mul_right_cancel''", []], ["mod", "theorem", "one_le_mul_right", []], ["mod", "theorem", "one_lt_mul'", []], ["mod", "theorem", "one_lt_mul_of_le_of_lt'", []], ["mod", "theorem", "one_lt_mul_of_lt_of_le'", []]]}]}, {"timestamp": 1651896625, "sha": "5789c637", "message": "chore(scripts): update nolints.txt (#14004)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1651884226, "sha": "275dabfc", "message": "feat(order/atoms): is_atomic_of_order_bot_lt_well_founded (#13967)", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "is_atomic_of_order_bot_well_founded_lt", []], ["add", "theorem", "is_coatomic_of_order_top_gt_well_founded", []]]}]}, {"timestamp": 1651869544, "sha": "dcd452de", "message": "feat(analysis/locally_convex/with_seminorms): characterization of the topology induced by seminorms in terms of `𝓝 0` (#13547)\nThis shows that a topology is induced by the family of seminorms `p` iff `𝓝 0 = ⨅ i, (𝓝 0).comap (p i)`, which allows to use the extensive filter and topology library (see e.g. #13549).", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["add", "theorem", "filter_eq_infi", ["seminorm_family"]], ["add", "theorem", "with_seminorms_iff_nhds_eq_infi", ["seminorm_family"]]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "ball_zero_eq_preimage_ball", ["seminorm"]]]}]}, {"timestamp": 1651865514, "sha": "10721bab", "message": "feat(topology/algebra/module/basic): basic topological properties of quotient modules (#13433)\nMore precisely, we prove that : \n* if `M` is a topological module and `S` is a submodule of `M`, then `M ⧸ S` is a topological module\n* furthermore, if `S` is closed, then `M ⧸ S` is regular (hence T2) \n- [x] depends on: #13278 \n- [x] depends on: #13401", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "theorem", "is_open_map_mkq", ["submodule"]]]}]}, {"timestamp": 1651862720, "sha": "8f116f43", "message": "feat(ring_theory/localization): generalize lemmas from `comm_ring` to `comm_semiring` (#13994)\nThis PR does not add new stuffs, but removes several subtractions from the proofs.", "changes": [{"oldPath": "src/ring_theory/localization/at_prime.lean", "newPath": "src/ring_theory/localization/at_prime.lean", "changes": [["add", "theorem", "nontrivial", ["is_localization", "at_prime"]], ["mod", "theorem", "local_ring_hom_comp", ["localization"]]]}, {"oldPath": "src/ring_theory/localization/away.lean", "newPath": "src/ring_theory/localization/away.lean", "changes": [["mod", "def", "away", ["is_localization"]]]}, {"oldPath": "src/ring_theory/localization/ideal.lean", "newPath": "src/ring_theory/localization/ideal.lean", "changes": []}]}, {"timestamp": 1651862719, "sha": "27e105d2", "message": "chore(analysis/normed_space/exponential): Make the `𝔸` argument implicit (#13986)\n`exp 𝕂 𝔸` is now just `exp 𝕂`.\nThis also renames two lemmas that refer to this argument in their name to no longer do so.\nIn a few places we have to add type annotations where they weren't needed before, but nowhere do we need to resort to `@`.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["mod", "theorem", "exp", ["commute"]], ["mod", "theorem", "exp_left", ["commute"]], ["mod", "theorem", "exp_right", ["commute"]], ["mod", "theorem", "exp_add", []], ["mod", "theorem", "exp_eq_exp", []], ["mod", "theorem", "exp_eq_tsum", []], ["mod", "theorem", "exp_neg", []], ["mod", "theorem", "exp_series_field_has_sum_exp", []], ["mod", "theorem", "exp_series_has_sum_exp'", []], ["mod", "theorem", "exp_series_has_sum_exp", []], ["mod", "theorem", "exp_zero", []], ["mod", "theorem", "exp_zsmul", []], ["mod", "theorem", "exp_ℝ_ℂ_eq_exp_ℂ_ℂ", []], ["mod", "theorem", "inv_of_exp", []], ["mod", "theorem", "is_unit_exp", []], ["mod", "theorem", "map_exp", []], ["mod", "theorem", "fst_exp", ["prod"]], ["mod", "theorem", "snd_exp", ["prod"]], ["mod", "theorem", "inverse_exp", ["ring"]]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/exponential.lean", "newPath": "src/analysis/normed_space/star/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": [["add", "theorem", "exp_eq_exp_ℂ", ["complex"]], ["del", "theorem", "exp_eq_exp_ℂ_ℂ", ["complex"]], ["mod", "theorem", "has_deriv_at_exp", []], ["mod", "theorem", "has_strict_deriv_at_exp", []], ["mod", "theorem", "has_strict_deriv_at_exp_zero", []], ["add", "theorem", "exp_eq_exp_ℝ", ["real"]], ["del", "theorem", "exp_eq_exp_ℝ_ℝ", ["real"]]]}, {"oldPath": "src/combinatorics/derangements/exponential.lean", "newPath": "src/combinatorics/derangements/exponential.lean", "changes": []}]}, {"timestamp": 1651862718, "sha": "eea16dc8", "message": "feat(number_theory/legendre_symbol/*): add results on value at -1 (#13978)\nThis PR adds code expressing the value of the quadratic character at -1 of a finite field of odd characteristic as χ₄ applied to the cardinality of the field. This is then also done for the Legendre symbol.\nAdditional changes:\n* two helper lemmas `odd_mod_four` and `finite_field.even_card_of_char_two` that are needed\n* some API lemmas for χ₄\n* write `euler_criterion` and `exists_sq_eq_neg_one_iff` in terms of `is_square`; simplify the proof of the latter using the general result for quadratic characters", "changes": [{"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["add", "theorem", "is_square_neg_one_iff", ["char"]], ["add", "theorem", "quadratic_char_neg_one", ["char"]], ["add", "theorem", "even_card_iff_char_two", ["finite_field"]], ["add", "theorem", "even_card_of_char_two", ["finite_field"]], ["add", "theorem", "odd_mod_four_iff", ["nat"]], ["add", "theorem", "χ₄_eq_neg_one_pow", ["zmod"]], ["add", "theorem", "χ₄_int_eq_if_mod_four", ["zmod"]], ["add", "theorem", "χ₄_nat_eq_if_mod_four", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["mod", "theorem", "exists_sq_eq_neg_one_iff", ["zmod"]], ["add", "theorem", "legendre_sym_neg_one", ["zmod"]]]}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1651862717, "sha": "dfe1897f", "message": "feat(data/polynomial/laurent): laurent polynomials -- defs and some API (#13784)\nI broke off the initial part of #13415 into this initial segment, leaving the rest of the PR as depending on this one.", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/laurent.lean", "changes": [["add", "def", "C", ["laurent_polynomial"]], ["add", "theorem", "C_eq_algebra_map", ["laurent_polynomial"]], ["add", "def", "T", ["laurent_polynomial"]], ["add", "theorem", "T_add", ["laurent_polynomial"]], ["add", "theorem", "T_pow", ["laurent_polynomial"]], ["add", "theorem", "T_zero", ["laurent_polynomial"]], ["add", "theorem", "algebra_map_apply", ["laurent_polynomial"]], ["add", "theorem", "inv_of_T", ["laurent_polynomial"]], ["add", "theorem", "is_unit_T", ["laurent_polynomial"]], ["add", "theorem", "mul_T_assoc", ["laurent_polynomial"]], ["add", "theorem", "single_eq_C", ["laurent_polynomial"]], ["add", "theorem", "single_eq_C_mul_T", ["laurent_polynomial"]], ["add", "theorem", "single_zero_one_eq_one", ["laurent_polynomial"]], ["add", "def", "laurent_polynomial", []], ["add", "def", "to_laurent", ["polynomial"]], ["add", "theorem", "to_laurent_C", ["polynomial"]], ["add", "theorem", "to_laurent_C_mul_T", ["polynomial"]], ["add", "theorem", "to_laurent_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "to_laurent_C_mul_eq", ["polynomial"]], ["add", "theorem", "to_laurent_X", ["polynomial"]], ["add", "theorem", "to_laurent_X_pow", ["polynomial"]], ["add", "def", "to_laurent_alg", ["polynomial"]], ["add", "theorem", "to_laurent_alg_apply", ["polynomial"]], ["add", "theorem", "to_laurent_apply", ["polynomial"]], ["add", "theorem", "to_laurent_one", ["polynomial"]]]}]}, {"timestamp": 1651855180, "sha": "58d83ed5", "message": "feat(tactic/lint/misc): adding a linter that flags iffs with explicit variables on both sides (#11606)", "changes": [{"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1651851763, "sha": "863a1676", "message": "docs(ring_theory/localization/ideal): fix an unused name (#13992)", "changes": [{"oldPath": "src/ring_theory/localization/ideal.lean", "newPath": "src/ring_theory/localization/ideal.lean", "changes": []}]}, {"timestamp": 1651851762, "sha": "db5c2a6d", "message": "chore(data/zmod/basic.lean): change order of arguments of `zmod.nat_cast_mod` for consistency (#13988)\nAs discussed [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60zmod.2Enat_cast_mod.60.20vs.20.60zmod.2Eint_cast_mod.60), this changes the order of arguments in `zmod.nat_cast_mod` to be compatible with `zmod.int_cast_mod`.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["mod", "theorem", "nat_cast_mod", ["zmod"]]]}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1651851760, "sha": "40bedd62", "message": "refactor(set_theory/game/pgame): Remove `pgame.omega` (#13960)\nThis barely had any API to begin with. Thanks to `ordinal.to_pgame`, it is now entirely redundant.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "def", "omega", ["pgame"]]]}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": [["del", "theorem", "omega_left_wins", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["del", "theorem", "numeric_omega", ["pgame"]]]}]}, {"timestamp": 1651851759, "sha": "c9f5cee2", "message": "feat(set_theory/game/pgame): Add remark on relabelings (#13732)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1651849138, "sha": "ba627bc7", "message": "feat(measure_theory/function/conditional_expectation): induction over Lp functions which are strongly measurable wrt a sub-sigma-algebra (#13129)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "induction_strongly_measurable", ["measure_theory", "Lp"]], ["add", "theorem", "induction_strongly_measurable_aux", ["measure_theory", "Lp"]], ["mod", "theorem", "Lp_meas_to_Lp_trim_lie_symm_indicator", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_lie_symm_to_Lp", ["measure_theory"]], ["add", "theorem", "induction_strongly_measurable", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "to_Lp_congr", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/order/filter/indicator_function.lean", "newPath": "src/order/filter/indicator_function.lean", "changes": [["add", "theorem", "support", ["filter", "eventually_eq"]]]}]}, {"timestamp": 1651841464, "sha": "fe0c4cd9", "message": "docs(data/polynomial/algebra_map): fix a typo in a doc-string (#13989)\nThe doc-string talks about `comm_ring`, while the lemma uses `comm_semiring`. I aligned the two to the weaker one!", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}]}, {"timestamp": 1651841463, "sha": "f6c030fe", "message": "feat(linear_algebra/matrix/nonsingular_inverse): inverse of a diagonal matrix is diagonal (#13827)\nThe main results are `is_unit (diagonal v) ↔ is_unit v` and `(diagonal v)⁻¹ = diagonal (ring.inverse v)`.\nThis also generalizes `invertible.map` to `monoid_hom_class`.", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "def", "map", ["invertible"]]]}, {"oldPath": "src/data/mv_polynomial/invertible.lean", "newPath": "src/data/mv_polynomial/invertible.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "def", "diagonal_invertible", ["matrix"]], ["add", "def", "diagonal_invertible_equiv_invertible", ["matrix"]], ["add", "theorem", "inv_diagonal", ["matrix"]], ["add", "theorem", "inv_of_diagonal_eq", ["matrix"]], ["add", "def", "invertible_of_diagonal_invertible", ["matrix"]], ["add", "theorem", "is_unit_diagonal", ["matrix"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1651838580, "sha": "e4d3d339", "message": "feat(probability/stopping): add properties of the measurable space generated by a stopping time (#13909)\n- add lemmas stating that various sets are measurable with respect to that space\n- describe the sigma algebra generated by the minimum of two stopping times\n- use the results to generalize `is_stopping_time.measurable_set_eq_const` from nat to first countable linear orders and rename it to `is_stopping_time.measurable_space_eq'` to have a name similar to `is_stopping_time.measurable_set_eq`.", "changes": [{"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["del", "theorem", "measurable_stopped_process_of_nat", ["measure_theory", "adapted"]], ["add", "theorem", "strongly_measurable_stopped_process_of_nat", ["measure_theory", "adapted"]], ["add", "theorem", "le_measurable_space_of_const_le", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "measurable", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "measurable_set", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "measurable_set_eq_const", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_inter_eq_iff", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_inter_le", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "measurable_set_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_min_iff", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_const", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_space_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_le_of_le_const", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_min", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "is_stopping_time_const", ["measure_theory"]], ["del", "theorem", "measurable_stopped_process", ["measure_theory", "prog_measurable"]], ["add", "theorem", "strongly_measurable_stopped_process", ["measure_theory", "prog_measurable"]]]}]}, {"timestamp": 1651833774, "sha": "f0339374", "message": "feat(topology/algebra/monoid): add missing `has_continuous_const_smul` instances (#13987)\nThis makes an argument to `exp` redundant.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/locally_constant.lean", "newPath": "src/topology/continuous_function/locally_constant.lean", "changes": []}]}, {"timestamp": 1651833773, "sha": "97c4d4ed", "message": "feat(analysis/asymptotics/asymptotics): add `is_O.exists_mem_basis` (#13973)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "exists_mem_basis", ["asymptotics", "is_O"]]]}]}, {"timestamp": 1651831639, "sha": "d9893051", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add some lemmas assuming `mul_zero_class` `partial_order` / `linear_order` (#13377)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "mul_nonneg", ["zero_lt", "left"]], ["add", "theorem", "neg_of_mul_neg_left", ["zero_lt", "left"]], ["add", "theorem", "neg_of_mul_neg_right", ["zero_lt", "left"]], ["add", "theorem", "mul_le_mul_left''", ["zero_lt"]], ["add", "theorem", "mul_le_mul_right''", ["zero_lt"]], ["add", "theorem", "mul_nonpos_of_nonneg_of_nonpos", ["zero_lt"]], ["add", "theorem", "mul_nonpos_of_nonpos_of_nonneg", ["zero_lt"]], ["add", "theorem", "neg_iff_neg_of_mul_pos", ["zero_lt"]], ["add", "theorem", "neg_of_mul_pos_left", ["zero_lt"]], ["add", "theorem", "neg_of_mul_pos_right", ["zero_lt"]], ["add", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", ["zero_lt"]], ["add", "theorem", "pos_iff_pos_of_mul_pos", ["zero_lt"]], ["add", "theorem", "pos_of_mul_pos_left", ["zero_lt"]], ["add", "theorem", "pos_of_mul_pos_right", ["zero_lt"]], ["add", "theorem", "mul_nonneg", ["zero_lt", "right"]], ["add", "theorem", "neg_of_mul_neg_left", ["zero_lt", "right"]], ["add", "theorem", "neg_of_mul_neg_right", ["zero_lt", "right"]]]}]}, {"timestamp": 1651831638, "sha": "1675b78d", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add some lemmas assuming `mul_zero_one_class` `partial_order` (#13375)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "le_of_le_mul_of_le_one_left'", ["zero_lt"]], ["add", "theorem", "le_of_le_mul_of_le_one_right'", ["zero_lt"]], ["add", "theorem", "le_of_mul_le_of_one_le_left'", ["zero_lt"]], ["add", "theorem", "le_of_mul_le_of_one_le_right'", ["zero_lt"]]]}]}, {"timestamp": 1651828539, "sha": "95413e23", "message": "feat(measure_theory/group/*): various lemmas about invariant measures (#13539)\n* Make the `measurable_equiv` argument to `measure_preserving.symm` explicit. This argument is cannot always be deduced from the other explicit arguments (which can be seen form the changes in `src/measure_theory/constructions/pi.lean`).\n* From the sphere eversion project\n* Required for convolutions", "changes": [{"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": [["mod", "theorem", "symm", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["add", "theorem", "fst", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "snd", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "prod_of_left", ["measure_theory", "quasi_measure_preserving"]], ["add", "theorem", "prod_of_right", ["measure_theory", "quasi_measure_preserving"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "ae_strongly_measurable_comp₂", ["continuous_linear_map"]], ["del", "theorem", "ae_strongly_measurable_comp₂", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "comp_measurable'", ["measure_theory", "ae_strongly_measurable"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["add", "theorem", "measurable_div_const'", []]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/measure_theory/group/integration.lean", "newPath": "src/measure_theory/group/integration.lean", "changes": [["add", "theorem", "integrable_comp_div_left", ["measure_theory"]], ["add", "theorem", "integral_div_right_eq_self", ["measure_theory"]], ["add", "theorem", "integral_smul_eq_self", ["measure_theory"]], ["add", "theorem", "lintegral_div_right_eq_self", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/measurable_equiv.lean", "newPath": "src/measure_theory/group/measurable_equiv.lean", "changes": [["add", "def", "div_left", ["measurable_equiv"]], ["add", "def", "div_right", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": [["mod", "theorem", "forall_measure_preimage_mul_iff", ["measure_theory"]], ["mod", "theorem", "forall_measure_preimage_mul_right_iff", ["measure_theory"]], ["add", "theorem", "map_div_right_ae", ["measure_theory"]], ["add", "theorem", "map_mul_left_ae", ["measure_theory"]], ["add", "theorem", "map_mul_right_ae", ["measure_theory"]], ["add", "theorem", "map_div_left_ae", ["measure_theory", "measure"]], ["add", "theorem", "measure_preserving_mul_left", ["measure_theory"]], ["add", "theorem", "measure_preserving_mul_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": [["add", "theorem", "absolutely_continuous_map_div_left", ["measure_theory"]], ["add", "theorem", "absolutely_continuous_map_inv", ["measure_theory"]], ["add", "theorem", "absolutely_continuous_map_mul_right", ["measure_theory"]], ["mod", "theorem", "absolutely_continuous_of_is_mul_left_invariant", ["measure_theory"]], ["mod", "theorem", "ae_measure_preimage_mul_right_lt_top", ["measure_theory"]], ["mod", "theorem", "ae_measure_preimage_mul_right_lt_top_of_ne_zero", ["measure_theory"]], ["mod", "theorem", "lintegral_lintegral_mul_inv", ["measure_theory"]], ["add", "theorem", "map_div_left_absolutely_continuous", ["measure_theory"]], ["add", "theorem", "map_inv_absolutely_continuous", ["measure_theory"]], ["add", "theorem", "map_mul_right_absolutely_continuous", ["measure_theory"]], ["mod", "theorem", "map_prod_inv_mul_eq_swap", ["measure_theory"]], ["mod", "theorem", "map_prod_mul_inv_eq", ["measure_theory"]], ["mod", "theorem", "measurable_measure_mul_right", ["measure_theory"]], ["mod", "theorem", "measure_eq_div_smul", ["measure_theory"]], ["mod", "theorem", "measure_inv_null", ["measure_theory"]], ["mod", "theorem", "measure_lintegral_div_measure", ["measure_theory"]], ["mod", "theorem", "measure_mul_lintegral_eq", ["measure_theory"]], ["mod", "theorem", "measure_mul_measure_eq", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_ne_zero", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_null", ["measure_theory"]], ["add", "theorem", "quasi_measure_preserving_div", ["measure_theory"]], ["add", "theorem", "quasi_measure_preserving_div_left", ["measure_theory"]], ["mod", "theorem", "quasi_measure_preserving_inv", ["measure_theory"]], ["add", "theorem", "quasi_measure_preserving_mul_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/torus_integral.lean", "newPath": "src/measure_theory/integral/torus_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/complex_lebesgue.lean", "newPath": "src/measure_theory/measure/complex_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "map_ae", ["measurable_equiv"]]]}]}, {"timestamp": 1651819197, "sha": "ebac9f03", "message": "feat(analysis/special_functions/trigonometric): add a lemma (#13975)\nAdd a lemma needed for #13178", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "apply_abs_le_mul_of_one_le'", []], ["add", "theorem", "apply_abs_le_mul_of_one_le", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["add", "theorem", "abs_exp_mul_exp_add_exp_neg_le_of_abs_im_le", ["complex"]]]}]}, {"timestamp": 1651816997, "sha": "faf16900", "message": "feat(model_theory/*): Any theory with infinite models has arbitrarily large models (#13980)\nDefines the theory `distinct_constants_theory`, indicating that a set of constants are distinct.\nUses that theory to show that any theory with an infinite model has models of arbitrarily large cardinality.", "changes": [{"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": [["add", "theorem", "carrier_eq_coe", ["first_order", "language", "Theory", "Model"]], ["mod", "def", "reduct", ["first_order", "language", "Theory", "Model"]]]}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": []}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "theorem", "exists_large_model_of_infinite_model", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable_union_distinct_constants_theory_of_card_le", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable_union_distinct_constants_theory_of_infinite", ["first_order", "language", "Theory"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["mod", "theorem", "mono", ["first_order", "language", "Theory", "model"]], ["add", "theorem", "union", ["first_order", "language", "Theory", "model"]], ["mod", "theorem", "model_iff_subset_complete_theory", ["first_order", "language", "Theory"]], ["mod", "theorem", "model_singleton_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "model_union_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "card_le_of_model_distinct_constants_theory", ["first_order", "language"]], ["add", "theorem", "model_distinct_constants_theory", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["add", "theorem", "directed_distinct_constants_theory", ["first_order", "language"]], ["add", "def", "distinct_constants_theory", ["first_order", "language"]], ["add", "theorem", "distinct_constants_theory_eq_Union", ["first_order", "language"]], ["add", "theorem", "monotone_distinct_constants_theory", ["first_order", "language"]]]}]}, {"timestamp": 1651802377, "sha": "f0eded9a", "message": "chore(algebra/ring/idempotents): golf iff_eq_zero_or_one (#13977)", "changes": [{"oldPath": "src/algebra/ring/idempotents.lean", "newPath": "src/algebra/ring/idempotents.lean", "changes": []}]}, {"timestamp": 1651794714, "sha": "151933d1", "message": "feat(algebra/group/defs): Division monoids (#13860)\nIntroduce what I call division monoids. Those are monoids `α` with a pseudo-inverse `⁻¹ : α → α ` and a pseudo-division `/ : α → α → α` respecting:\n* `a / b = a * b⁻¹`\n* `a⁻¹⁻¹ = a`\n* `(a * b)⁻¹ = b⁻¹ * a⁻¹`\n* `a * b = 1 → a⁻¹ = b`\nThis made-up algebraic structure has two uses:\n* Deduplicate lemmas between `group` and `group_with_zero`. Almost all lemmas which are literally duplicated (same conclusion, same assumptions except for `group` vs `group_with_zero`) generalize to division monoids.\n* Give access to lemmas for pointwise operations: `set α`, `finset α`, `filter α`, `submonoid α`, `subgroup α`, etc... all are division monoids when `α` is. In some sense, they are very close to being groups, the only obstruction being that `s / s ≠ 1` in general. Hence any identity which is true in a group/group with zero is also true in those pointwise monoids, if no cancellation is involved.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "inv_mul_cancel_right", []], ["del", "theorem", "mul_inv_cancel_left", []], ["del", "theorem", "mul_inv_rev", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["mod", "theorem", "div_eq_mul_inv", []], ["mod", "theorem", "inv_eq_of_mul_eq_one", []], ["mod", "theorem", "inv_inv", []], ["mod", "theorem", "inv_mul_cancel_left", []], ["add", "theorem", "inv_mul_cancel_right", []], ["add", "theorem", "mul_inv_cancel_left", []], ["mod", "theorem", "mul_inv_cancel_right", []], ["add", "theorem", "mul_inv_rev", []]]}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}]}, {"timestamp": 1651789770, "sha": "c62dfe61", "message": "feat(model_theory/skolem): Downward Löwenheim–Skolem (#13723)\nProves the Downward Löwenheim–Skolem theorem: If `s` is a set in an `L`-structure `M` and `κ` an infinite cardinal such that `max (# s, L.card) ≤ κ` and `κ ≤ # M`, then `M` has an elementary substructure containing `s` of cardinality `κ`.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "card_functions_sum", ["first_order", "language"]], ["add", "theorem", "card_relations_sum", ["first_order", "language"]], ["add", "theorem", "card_sum", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/skolem.lean", "newPath": "src/model_theory/skolem.lean", "changes": [["add", "theorem", "card_functions_sum_skolem₁", ["first_order", "language"]], ["add", "theorem", "card_functions_sum_skolem₁_le", ["first_order", "language"]], ["add", "theorem", "exists_elementary_substructure_card_eq", ["first_order", "language"]], ["mod", "def", "skolem₁", ["first_order", "language"]], ["mod", "theorem", "coe_sort_elementary_skolem₁_reduct", ["first_order", "language", "substructure"]], ["mod", "theorem", "skolem₁_reduct_is_elementary", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}]}, {"timestamp": 1651784000, "sha": "91cc3f06", "message": "feat(linear_algebra/basic): ker of a linear map equals ker of the corresponding group hom (#13858)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ker_to_add_subgroup", ["linear_map"]], ["add", "theorem", "ker_to_add_submonoid", ["linear_map"]], ["add", "theorem", "range_to_add_subgroup", ["linear_map"]], ["add", "theorem", "range_to_add_submonoid", ["linear_map"]]]}]}, {"timestamp": 1651779715, "sha": "c12536a7", "message": "fix(gitpod): correct command name (#13976)\n`leanpkg config` doesn't exist, it's `leanpkg configure`.\n@b-mehta tricked me in https://github.com/leanprover-community/mathlib/pull/13949#issuecomment-1117589670", "changes": [{"oldPath": ".gitpod.yml", "newPath": ".gitpod.yml", "changes": []}]}, {"timestamp": 1651771845, "sha": "73e5dadd", "message": "feat(analysis/special_functions/exp): add limits of `exp z` as `re z → ±∞` (#13974)", "changes": [{"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "tendsto_exp_comap_re_at_bot", ["complex"]], ["add", "theorem", "tendsto_exp_comap_re_at_bot_nhds_within", ["complex"]], ["add", "theorem", "tendsto_exp_comap_re_at_top", ["complex"]]]}]}, {"timestamp": 1651767552, "sha": "54af9e9b", "message": "fix(topology/algebra/infinite_sum): `tsum_neg` doesn't need `summable` (#13950)\nBoth sides are 0 in the not-summable case.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "tsum_neg", []]]}]}, {"timestamp": 1651762541, "sha": "ec44f459", "message": "feat(data/matrix/basic): even more lemmas about `conj_transpose` and `smul` (#13970)\nIt turns out none of the lemmas in the previous #13938 were the ones I needed.", "changes": [{"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": [["add", "theorem", "star_int_cast_smul", []], ["add", "theorem", "star_inv_int_cast_smul", []], ["add", "theorem", "star_inv_nat_cast_smul", []], ["add", "theorem", "star_nat_cast_smul", []], ["add", "theorem", "star_rat_cast_smul", []]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "conj_transpose_int_cast_smul", ["matrix"]], ["add", "theorem", "conj_transpose_inv_int_cast_smul", ["matrix"]], ["add", "theorem", "conj_transpose_inv_nat_cast_smul", ["matrix"]], ["add", "theorem", "conj_transpose_nat_cast_smul", ["matrix"]], ["add", "theorem", "conj_transpose_rat_cast_smul", ["matrix"]]]}]}, {"timestamp": 1651756261, "sha": "420fabf7", "message": "chore(analysis/normed_space/exponential): replace `1/x` with `x⁻¹` (#13971)\nNote that `one_div` makes `⁻¹` the simp-normal form.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["mod", "theorem", "exp_eq_tsum", []], ["mod", "theorem", "exp_series_apply_eq", []], ["mod", "theorem", "exp_series_has_sum_exp'", []], ["mod", "theorem", "exp_series_sum_eq", []], ["mod", "theorem", "exp_series_summable'", []], ["mod", "theorem", "norm_exp_series_summable'", []]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": []}]}, {"timestamp": 1651756260, "sha": "03f5ac93", "message": "feat(category_theory/simple): simple_iff_subobject_is_simple_order (#13969)", "changes": [{"oldPath": "src/algebra/category/Module/simple.lean", "newPath": "src/algebra/category/Module/simple.lean", "changes": [["add", "theorem", "simple_iff_is_simple_module", []]]}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": [["add", "def", "iso_zero_of_epi_eq_zero", ["category_theory", "limits"]], ["add", "def", "iso_zero_of_mono_eq_zero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": [["add", "theorem", "simple_iff_subobject_is_simple_order", ["category_theory"]], ["add", "theorem", "simple_of_is_simple_order_subobject", ["category_theory"]]]}, {"oldPath": "src/category_theory/subobject/factor_thru.lean", "newPath": "src/category_theory/subobject/factor_thru.lean", "changes": [["add", "theorem", "factor_thru_mk_self", ["category_theory", "subobject"]], ["add", "theorem", "mk_factors_self", ["category_theory", "subobject"]]]}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": [["add", "theorem", "mk_eq_bot_iff_zero", ["category_theory", "subobject"]]]}]}, {"timestamp": 1651756259, "sha": "929c9018", "message": "refactor(ring_theory/*): Remove unnecessary commutativity assumptions (#13966)\nThis replaces `[comm_ring R]` or `[comm_semiring R]` with `[ring R]` or `[semiring R]`, without changing any proofs.", "changes": [{"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": [["mod", "theorem", "is_artinian_ring_of_ring_equiv", []], ["mod", "theorem", "is_artinian_ring_of_surjective", []]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "maximal_of_no_maximal", ["ideal"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "is_noetherian_ring_iff_ideal_fg", []], ["mod", "theorem", "is_noetherian_ring_of_ring_equiv", []], ["mod", "theorem", "is_noetherian_ring_of_surjective", []], ["mod", "theorem", "fg_restrict_scalars", ["submodule"]]]}]}, {"timestamp": 1651756258, "sha": "8e0ab168", "message": "feat(polynomial/cyclotomic/basic): ɸ_pⁱ irreducible → ɸ_pʲ irreducible for j ≤ i (#13952)", "changes": [{"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["mod", "theorem", "cyclotomic_irreducible_of_irreducible_pow", ["polynomial"]], ["add", "theorem", "cyclotomic_irreducible_pow_of_irreducible_pow", ["polynomial"]]]}]}, {"timestamp": 1651751759, "sha": "057e0283", "message": "feat(linear_algebra/finite_dimensional): surjective_of_nonzero_of_finrank_eq_one (#13961)", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "surjective_of_nonzero_of_finrank_eq_one", []]]}]}, {"timestamp": 1651751758, "sha": "da06587c", "message": "feat(linear_algebra): A-linear maps between finite dimensional vector spaces over k are finite dimensional (#13934)", "changes": [{"oldPath": null, "newPath": "src/algebra/module/algebra.lean", "changes": [["add", "def", "restrict_scalars_linear_map", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}]}, {"timestamp": 1651744348, "sha": "4dfbcac3", "message": "feat({data/{finset,set},order/filter}/pointwise): More basic API (#13899)\nMore basic lemmas about pointwise operations on `set`/`finset`/`filter`. Also make the three APIs more consistent with each other.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "image_inter_subset", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "div_eq_empty", ["finset"]], ["add", "theorem", "div_inter_subset", ["finset"]], ["add", "theorem", "div_nonempty", ["finset"]], ["del", "theorem", "div_nonempty_iff", ["finset"]], ["add", "theorem", "div_subset_div_left", ["finset"]], ["add", "theorem", "div_subset_div_right", ["finset"]], ["add", "theorem", "div_subset_iff", ["finset"]], ["add", "theorem", "div_union", ["finset"]], ["add", "theorem", "inter_div_subset", ["finset"]], ["add", "theorem", "inter_mul_subset", ["finset"]], ["add", "theorem", "inter_smul_subset", ["finset"]], ["add", "theorem", "inter_vsub_subset", ["finset"]], ["add", "theorem", "mul_eq_empty", ["finset"]], ["add", "theorem", "mul_inter_subset", ["finset"]], ["add", "theorem", "mul_nonempty", ["finset"]], ["del", "theorem", "mul_nonempty_iff", ["finset"]], ["add", "theorem", "mul_subset_iff", ["finset"]], ["add", "theorem", "mul_subset_mul_left", ["finset"]], ["add", "theorem", "mul_subset_mul_right", ["finset"]], ["add", "theorem", "mul_union", ["finset"]], ["add", "theorem", "of_div_left", ["finset", "nonempty"]], ["add", "theorem", "of_div_right", ["finset", "nonempty"]], ["add", "theorem", "of_mul_left", ["finset", "nonempty"]], ["add", "theorem", "of_mul_right", ["finset", "nonempty"]], ["add", "theorem", "of_smul_left", ["finset", "nonempty"]], ["add", "theorem", "of_smul_right", ["finset", "nonempty"]], ["add", "theorem", "of_vsub_left", ["finset", "nonempty"]], ["add", "theorem", "of_vsub_right", ["finset", "nonempty"]], ["mod", "theorem", "singleton_div_singleton", ["finset"]], ["mod", "theorem", "singleton_mul_singleton", ["finset"]], ["mod", "theorem", "singleton_smul", ["finset"]], ["mod", "theorem", "singleton_smul_singleton", ["finset"]], ["mod", "theorem", "singleton_vsub_singleton", ["finset"]], ["add", "theorem", "smul_eq_empty", ["finset"]], ["add", "theorem", "smul_finset_eq_empty", ["finset"]], ["add", "theorem", "smul_finset_inter_subset", ["finset"]], ["add", "theorem", "smul_finset_nonempty", ["finset"]], ["del", "theorem", "smul_finset_nonempty_iff", ["finset"]], ["add", "theorem", "smul_finset_union", ["finset"]], ["add", "theorem", "smul_inter_subset", ["finset"]], ["mod", "theorem", "smul_nonempty_iff", ["finset"]], ["mod", "theorem", "smul_singleton", ["finset"]], ["add", "theorem", "smul_subset_iff", ["finset"]], ["add", "theorem", "smul_subset_smul_left", ["finset"]], ["add", "theorem", "smul_subset_smul_right", ["finset"]], ["add", "theorem", "smul_union", ["finset"]], ["mod", "theorem", "subset_vsub", ["finset"]], ["add", "theorem", "union_div", ["finset"]], ["add", "theorem", "union_mul", ["finset"]], ["add", "theorem", "union_smul", ["finset"]], ["add", "theorem", "union_vsub", ["finset"]], ["add", "theorem", "vsub_eq_empty", ["finset"]], ["add", "theorem", "vsub_inter_subset", ["finset"]], ["add", "theorem", "vsub_nonempty", ["finset"]], ["del", "theorem", "vsub_nonempty_iff", ["finset"]], ["add", "theorem", "vsub_subset_iff", ["finset"]], ["add", "theorem", "vsub_subset_vsub_left", ["finset"]], ["add", "theorem", "vsub_subset_vsub_right", ["finset"]], ["add", "theorem", "vsub_union", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "of_image2_left", ["set", "nonempty"]], ["add", "theorem", "of_image2_right", ["set", "nonempty"]], ["add", "theorem", "subset_singleton_iff", ["set", "nonempty"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "Union_div", ["set"]], ["mod", "theorem", "Union_div_left_image", ["set"]], ["mod", "theorem", "Union_div_right_image", ["set"]], ["mod", "theorem", "Union_mul", ["set"]], ["mod", "theorem", "Union_mul_left_image", ["set"]], ["mod", "theorem", "Union_mul_right_image", ["set"]], ["mod", "theorem", "Union_smul", ["set"]], ["mod", "theorem", "Union_smul_left_image", ["set"]], ["mod", "theorem", "Union_smul_right_image", ["set"]], ["mod", "theorem", "div_Union", ["set"]], ["add", "theorem", "div_eq_empty", ["set"]], ["mod", "theorem", "div_inter_subset", ["set"]], ["mod", "theorem", "div_mem_div", ["set"]], ["add", "theorem", "div_nonempty", ["set"]], ["mod", "theorem", "div_subset_div", ["set"]], ["mod", "theorem", "div_subset_div_left", ["set"]], ["mod", "theorem", "div_subset_div_right", ["set"]], ["add", "theorem", "div_subset_iff", ["set"]], ["mod", "theorem", "image_one", ["set"]], ["mod", "theorem", "inter_div_subset", ["set"]], ["mod", "theorem", "inter_mul_subset", ["set"]], ["mod", "theorem", "inter_smul_subset", ["set"]], ["mod", "theorem", "mem_one", ["set"]], ["del", "theorem", "mem_smul_of_mem", ["set"]], ["mod", "theorem", "mul_Union", ["set"]], ["add", "theorem", "mul_eq_empty", ["set"]], ["mod", "theorem", "mul_inter_subset", ["set"]], ["mod", "theorem", "mul_mem_mul", ["set"]], ["add", "theorem", "mul_nonempty", ["set"]], ["add", "theorem", "mul_subset_iff", ["set"]], ["mod", "theorem", "mul_subset_mul", ["set"]], ["mod", "theorem", "mul_subset_mul_left", ["set"]], ["mod", "theorem", "mul_subset_mul_right", ["set"]], ["add", "theorem", "div", ["set", "nonempty"]], ["add", "theorem", "of_div_left", ["set", "nonempty"]], ["add", "theorem", "of_div_right", ["set", "nonempty"]], ["add", "theorem", "of_mul_left", ["set", "nonempty"]], ["add", "theorem", "of_mul_right", ["set", "nonempty"]], ["add", "theorem", "of_smul_left", ["set", "nonempty"]], ["add", "theorem", "of_smul_right", ["set", "nonempty"]], ["add", "theorem", "of_vsub_left", ["set", "nonempty"]], ["add", "theorem", "of_vsub_right", ["set", "nonempty"]], ["add", "theorem", "subset_one_iff", ["set", "nonempty"]], ["mod", "theorem", "one_mem_one", ["set"]], ["mod", "theorem", "one_nonempty", ["set"]], ["mod", "theorem", "one_subset", ["set"]], ["mod", "theorem", "singleton_div_singleton", ["set"]], ["mod", "theorem", "singleton_mul_singleton", ["set"]], ["mod", "theorem", "singleton_one", ["set"]], ["mod", "theorem", "singleton_smul_singleton", ["set"]], ["mod", "theorem", "smul_Union", ["set"]], ["add", "theorem", "smul_eq_empty", ["set"]], ["mod", "theorem", "smul_inter_subset", ["set"]], ["mod", "theorem", "smul_mem_smul", ["set"]], ["mod", "theorem", "smul_mem_smul_set", ["set"]], ["add", "theorem", "smul_nonempty", ["set"]], ["add", "theorem", "smul_set_eq_empty", ["set"]], ["add", "theorem", "smul_set_nonempty", ["set"]], ["mod", "theorem", "smul_subset_smul", ["set"]], ["mod", "theorem", "smul_subset_smul_left", ["set"]], ["mod", "theorem", "smul_subset_smul_right", ["set"]], ["add", "theorem", "subset_one_iff_eq", ["set"]], ["add", "theorem", "vsub_eq_empty", ["set"]], ["add", "theorem", "vsub_nonempty", ["set"]], ["mod", "theorem", "vsub_subset_iff", ["set"]], ["mod", "theorem", "vsub_subset_vsub", ["set"]], ["mod", "theorem", "vsub_subset_vsub_left", ["set"]], ["mod", "theorem", "vsub_subset_vsub_right", ["set"]]]}, {"oldPath": "src/order/filter/n_ary.lean", "newPath": "src/order/filter/n_ary.lean", "changes": [["add", "theorem", "of_map₂_left", ["filter", "ne_bot"]], ["add", "theorem", "of_map₂_right", ["filter", "ne_bot"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "div_pure", ["filter"]], ["add", "theorem", "inv_eq_bot_iff", ["filter"]], ["add", "theorem", "inv_pure", ["filter"]], ["add", "theorem", "mul_pure", ["filter"]], ["add", "theorem", "of_div_left", ["filter", "ne_bot"]], ["add", "theorem", "of_div_right", ["filter", "ne_bot"]], ["add", "theorem", "of_mul_left", ["filter", "ne_bot"]], ["add", "theorem", "of_mul_right", ["filter", "ne_bot"]], ["add", "theorem", "of_smul_left", ["filter", "ne_bot"]], ["add", "theorem", "of_smul_right", ["filter", "ne_bot"]], ["add", "theorem", "of_vsub_left", ["filter", "ne_bot"]], ["add", "theorem", "of_vsub_right", ["filter", "ne_bot"]], ["add", "theorem", "pure_div", ["filter"]], ["add", "theorem", "pure_div_pure", ["filter"]], ["add", "theorem", "pure_mul", ["filter"]], ["add", "theorem", "pure_mul_pure", ["filter"]], ["add", "theorem", "pure_smul", ["filter"]], ["add", "theorem", "pure_smul_pure", ["filter"]], ["add", "theorem", "pure_vsub", ["filter"]], ["add", "theorem", "pure_vsub_pure", ["filter"]], ["add", "theorem", "smul_pure", ["filter"]], ["add", "theorem", "vsub_pure", ["filter"]]]}, {"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": []}]}, {"timestamp": 1651736498, "sha": "f8206717", "message": "ci(gitpod): do not rerun get-cache if a workspace is reloaded (#13949)\nInstead, only run it at workspace start. This prevents it clobbering local builds created with `lean --make src` or similar.\nI have no idea why the `. /home/gitpod/.profile` line is there, so I've left it to run in the same phase as before.", "changes": [{"oldPath": ".gitpod.yml", "newPath": ".gitpod.yml", "changes": []}]}, {"timestamp": 1651736497, "sha": "69701295", "message": "chore(algebra/group/units): add a lemma about is_unit on a coerced unit (#13947)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "unit_of_coe_units", ["is_unit"]]]}]}, {"timestamp": 1651736496, "sha": "bd944fe1", "message": "chore(linear_algebra/free_module): fix name in doc (#13942)", "changes": [{"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": []}]}, {"timestamp": 1651736495, "sha": "4f7603c7", "message": "chore(data/matrix/basic): add more lemmas about `conj_transpose` and `smul` (#13938)\nUnfortunately the `star_module` typeclass is of no help here; see [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Is.20star_module.20sensible.20for.20non-commutative.20rings.3F/near/257272767) for some discussion.\nIn the meantime, this adds the lemmas for the most frequent special cases.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["mod", "theorem", "star_nsmul", []], ["mod", "theorem", "star_zsmul", []]]}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": [["add", "theorem", "star_rat_smul", []]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "conj_transpose_nsmul", ["matrix"]], ["add", "theorem", "conj_transpose_rat_smul", ["matrix"]], ["mod", "theorem", "conj_transpose_smul", ["matrix"]], ["add", "theorem", "conj_transpose_smul_non_comm", ["matrix"]], ["add", "theorem", "conj_transpose_smul_self", ["matrix"]], ["add", "theorem", "conj_transpose_zsmul", ["matrix"]]]}]}, {"timestamp": 1651736493, "sha": "7eacca31", "message": "feat(analysis/normed/normed_field): limit of `∥a * x∥` as `∥x∥ → ∞` (#13819)\nThese lemmas should use `bornology.cobounded` but we don't have an instance `pseudo_metric_space α -> bornology α` yet.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "tendsto_neg_cobounded", ["filter"]]]}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": [["add", "theorem", "tendsto_mul_left_cobounded", ["filter"]], ["add", "theorem", "tendsto_mul_right_cobounded", ["filter"]]]}]}, {"timestamp": 1651728983, "sha": "03fbe7de", "message": "Update CODE_OF_CONDUCT.md (#13965)\ndeleted one character (duplicate space)", "changes": [{"oldPath": "CODE_OF_CONDUCT.md", "newPath": "CODE_OF_CONDUCT.md", "changes": []}]}, {"timestamp": 1651728982, "sha": "63875eae", "message": "chore(scripts): update nolints.txt (#13964)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1651728981, "sha": "116435d6", "message": "feat(tactic/alias): fix alias docstrings for implications from iffs (#13944)\nNow they say for instance:\n```lean\nle_inv_mul_of_mul_le : ∀ {α : Type u} [_inst_1 : group α] [_inst_2 : has_le α] [_inst_3 : covariant_class α α has_mul.mul has_le.le] {a b c : α}, a * b ≤ c → b ≤ a⁻¹ * c\n**Alias** of the reverse direction of `le_inv_mul_iff_mul_le`.\n```\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60alias.60.20issue.20in.20algebra.2Eorder.2Egroup/near/281158569", "changes": [{"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}]}, {"timestamp": 1651728980, "sha": "524793de", "message": "feat(representation_theory): Action V G is rigid whenever V is (#13738)", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "def", "functor_category_monoidal_equivalence", ["Action"]]]}]}, {"timestamp": 1651728979, "sha": "b1da074a", "message": "feat(data/sum/basic): Shortcuts for the ternary sum of types (#13678)\nDefine `sum3.in₀`, `sum3.in₁`, `sum3.in₂`, shortcut patterns for pattern-matching on a ternary sum of types.", "changes": [{"oldPath": "src/data/sum/basic.lean", "newPath": "src/data/sum/basic.lean", "changes": [["add", "def", "in₀", ["sum3"]], ["add", "def", "in₁", ["sum3"]], ["add", "def", "in₂", ["sum3"]]]}]}, {"timestamp": 1651721787, "sha": "0c9b7263", "message": "feat(algebra/group/{pi, opposite}): add missing pi and opposite defs for `mul_hom` (#13956)\nThe declaration names and the contents of these definitions are all copied from the corresponding ones for `monoid_hom`.", "changes": [{"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["add", "def", "mul_op", ["add_hom"]], ["add", "def", "mul_unop", ["add_hom"]], ["add", "def", "from_opposite", ["mul_hom"]], ["add", "def", "op", ["mul_hom"]], ["add", "def", "to_opposite", ["mul_hom"]], ["add", "def", "unop", ["mul_hom"]]]}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "def", "coe_fn", ["mul_hom"]], ["add", "def", "const_mul_hom", ["pi"]], ["add", "def", "eval_mul_hom", ["pi"]]]}]}, {"timestamp": 1651717318, "sha": "50781196", "message": "feat(data/matrix/block): add `matrix.block_diag` and `matrix.block_diag'` (#13918)\n`matrix.block_diag` is to `matrix.block_diagonal` as `matrix.diag` is to `matrix.diagonal`.\nAs well as the basic arithmetic lemmas and bundling, this also adds continuity lemmas.\nThese definitions are primarily an auxiliary construction to prove `matrix.tsum_block_diagonal`, and `matrix.tsum_block_diagonal'`, which are really the main goal of this PR.", "changes": [{"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "def", "block_diag'", ["matrix"]], ["add", "theorem", "block_diag'_add", ["matrix"]], ["add", "def", "block_diag'_add_monoid_hom", ["matrix"]], ["add", "theorem", "block_diag'_block_diagonal'", ["matrix"]], ["add", "theorem", "block_diag'_conj_transpose", ["matrix"]], ["add", "theorem", "block_diag'_diagonal", ["matrix"]], ["add", "theorem", "block_diag'_map", ["matrix"]], ["add", "theorem", "block_diag'_neg", ["matrix"]], ["add", "theorem", "block_diag'_one", ["matrix"]], ["add", "theorem", "block_diag'_smul", ["matrix"]], ["add", "theorem", "block_diag'_sub", ["matrix"]], ["add", "theorem", "block_diag'_transpose", ["matrix"]], ["add", "theorem", "block_diag'_zero", ["matrix"]], ["add", "def", "block_diag", ["matrix"]], ["add", "theorem", "block_diag_add", ["matrix"]], ["add", "def", "block_diag_add_monoid_hom", ["matrix"]], ["add", "theorem", "block_diag_block_diagonal", ["matrix"]], ["add", "theorem", "block_diag_conj_transpose", ["matrix"]], ["add", "theorem", "block_diag_diagonal", ["matrix"]], ["add", "theorem", "block_diag_map", ["matrix"]], ["add", "theorem", "block_diag_neg", ["matrix"]], ["add", "theorem", "block_diag_one", ["matrix"]], ["add", "theorem", "block_diag_smul", ["matrix"]], ["add", "theorem", "block_diag_sub", ["matrix"]], ["add", "theorem", "block_diag_transpose", ["matrix"]], ["add", "theorem", "block_diag_zero", ["matrix"]]]}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": [["add", "theorem", "matrix_block_diag'", ["continuous"]], ["add", "theorem", "matrix_block_diag", ["continuous"]], ["add", "theorem", "matrix_block_diag'", ["has_sum"]], ["add", "theorem", "matrix_block_diag", ["has_sum"]], ["add", "theorem", "block_diagonal'_tsum", ["matrix"]], ["add", "theorem", "block_diagonal_tsum", ["matrix"]], ["add", "theorem", "matrix_block_diag'", ["summable"]], ["add", "theorem", "matrix_block_diag", ["summable"]], ["mod", "theorem", "matrix_block_diagonal'", ["summable"]], ["add", "theorem", "summable_matrix_block_diagonal'", []], ["add", "theorem", "summable_matrix_block_diagonal", []]]}]}, {"timestamp": 1651717318, "sha": "50fd3d6a", "message": "feat(analysis/special_functions/log/monotone): add lemmas (#13848)\nAdds a few lemmas regarding tonality of `log x / x ^ a`, and puts them in a new file, along with previous results.", "changes": [{"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/logb.lean", "newPath": "src/analysis/special_functions/log/base.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log/basic.lean", "changes": [["del", "theorem", "log_div_self_antitone_on", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log_deriv.lean", "newPath": "src/analysis/special_functions/log/deriv.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/special_functions/log/monotone.lean", "changes": [["add", "theorem", "log_div_self_antitone_on", ["real"]], ["add", "theorem", "log_div_self_rpow_antitone_on", ["real"]], ["add", "theorem", "log_div_sqrt_antitone_on", ["real"]], ["add", "theorem", "log_mul_self_monotone_on", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow_deriv.lean", "newPath": "src/analysis/special_functions/pow_deriv.lean", "changes": []}, {"oldPath": "src/data/complex/exponential_bounds.lean", "newPath": "src/data/complex/exponential_bounds.lean", "changes": []}, {"oldPath": "src/number_theory/von_mangoldt.lean", "newPath": "src/number_theory/von_mangoldt.lean", "changes": []}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}]}, {"timestamp": 1651710332, "sha": "1e189356", "message": "docs(algebra/ring/opposite): fix docstring for `ring_hom.from_opposite` (#13957)", "changes": [{"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}]}, {"timestamp": 1651710331, "sha": "36509369", "message": "feat(representation_theory/Action): lemma about isomorphisms in `Action G V` (#13951)", "changes": [{"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "theorem", "conj_ρ", ["Action", "iso"]]]}]}, {"timestamp": 1651710330, "sha": "9b245e23", "message": "feat(analysis/convex/integral): drop an assumption, add a version (#13920)\n* add `convex.set_average_mem_closure`;\n* drop `is_closed s` assumption in `convex.average_mem_interior_of_set`;\n* add `ae_eq_const_or_norm_average_lt_of_norm_le_const`, a version of `ae_eq_const_or_norm_integral_lt_of_norm_le_const` for average.", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["add", "theorem", "ae_eq_const_or_norm_average_lt_of_norm_le_const", []], ["add", "theorem", "set_average_mem_closure", ["convex"]]]}]}, {"timestamp": 1651702779, "sha": "f8c303ea", "message": "refactor(order/filter/pointwise): Localize instances (#13898)\nLocalize pointwise `filter` instances into the `pointwise` locale, as is done for `set` and `finset`.", "changes": [{"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "def", "has_involutive_inv", ["filter"]]]}]}, {"timestamp": 1651702778, "sha": "627f81b4", "message": "feat(group_theory/order_of_element): The index-th power lands in the subgroup (#13890)\nThe PR adds a lemma stating `g ^ index H ∈ H`. I had to restate `G` to avoid the fintype assumption on `G`.", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "pow_index_mem", ["subgroup"]]]}]}, {"timestamp": 1651702777, "sha": "5696275a", "message": "feat(data/list/big_operators): add `list.sublist.prod_le_prod'` etc (#13879)\n* add `list.forall₂.prod_le_prod'`, `list.sublist.prod_le_prod'`, and `list.sublist_forall₂.prod_le_prod'`;\n* add their additive versions;\n* upgrade `list.forall₂_same` to an `iff`.", "changes": [{"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "prod_le_prod'", ["list", "forall₂"]], ["add", "theorem", "prod_le_prod'", ["list", "sublist"]], ["add", "theorem", "prod_le_prod'", ["list", "sublist_forall₂"]]]}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["mod", "theorem", "forall₂_eq_eq_eq", ["list"]], ["mod", "theorem", "forall₂_same", ["list"]]]}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}]}, {"timestamp": 1651694662, "sha": "9503f733", "message": "feat(linear_algebra/dual): dual of a finite free module is finite free (#13896)", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}]}, {"timestamp": 1651694661, "sha": "eb1a566f", "message": "refactor(set_theory/game/ordinal): Improve API (#13878)\nWe change our former equivalence `o.out.α ≃ o.to_pgame.left_moves` to an equivalence `{o' // o' < o} ≃ o.to_pgame.left_moves`. This makes two proofs much simpler. \nWe also add a simple missing lemma, `to_pgame_equiv_iff`.", "changes": [{"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": [["del", "def", "to_left_moves_to_pgame", ["ordinal"]], ["add", "theorem", "to_left_moves_to_pgame_symm_lt", ["ordinal"]], ["add", "theorem", "to_pgame_equiv_iff", ["ordinal"]], ["add", "theorem", "to_pgame_move_left'", ["ordinal"]], ["mod", "theorem", "to_pgame_move_left", ["ordinal"]]]}]}, {"timestamp": 1651694660, "sha": "28568bdb", "message": "feat(set_theory/game/nim): Add basic API (#13857)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "exists_move_left_eq", ["pgame", "nim"]], ["mod", "theorem", "exists_ordinal_move_left_eq", ["pgame", "nim"]], ["add", "theorem", "left_moves_nim", ["pgame", "nim"]], ["add", "theorem", "move_left_nim'", ["pgame", "nim"]], ["add", "theorem", "move_left_nim", ["pgame", "nim"]], ["add", "theorem", "move_left_nim_heq", ["pgame", "nim"]], ["add", "theorem", "move_right_nim'", ["pgame", "nim"]], ["add", "theorem", "move_right_nim", ["pgame", "nim"]], ["add", "theorem", "move_right_nim_heq", ["pgame", "nim"]], ["add", "theorem", "neg_nim", ["pgame", "nim"]], ["add", "theorem", "right_moves_nim", ["pgame", "nim"]], ["add", "theorem", "to_left_moves_nim_symm_lt", ["pgame", "nim"]], ["add", "theorem", "to_right_moves_nim_symm_lt", ["pgame", "nim"]]]}]}, {"timestamp": 1651694659, "sha": "a80e5683", "message": "feat(logic/equiv/set): equivalences between all preimages gives an equivalence of domains (#13853)", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "of_fiber_equiv", ["equiv"]], ["add", "theorem", "of_fiber_equiv_map", ["equiv"]], ["add", "def", "sigma_fiber_equiv", ["equiv"]], ["del", "def", "sigma_preimage_equiv", ["equiv"]], ["add", "def", "sigma_subtype_fiber_equiv", ["equiv"]], ["add", "def", "sigma_subtype_fiber_equiv_subtype", ["equiv"]], ["del", "def", "sigma_subtype_preimage_equiv", ["equiv"]], ["del", "def", "sigma_subtype_preimage_equiv_subtype", ["equiv"]]]}, {"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": [["add", "def", "of_preimage_equiv", ["equiv"]], ["add", "theorem", "of_preimage_equiv_map", ["equiv"]], ["add", "def", "sigma_preimage_equiv", ["equiv"]]]}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1651694658, "sha": "edf6cefa", "message": "feat(set_theory/game/nim): `nim 0` is a relabelling of `0` and `nim 1` is a relabelling of `star` (#13846)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "grundy_value_star", ["pgame"]], ["mod", "theorem", "grundy_value_zero", ["pgame"]], ["add", "theorem", "nim_one_equiv", ["pgame", "nim"]], ["add", "theorem", "nim_zero_equiv", ["pgame", "nim"]], ["add", "def", "nim_zero_relabelling", ["pgame", "nim"]]]}, {"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["add", "theorem", "one_out_eq", ["ordinal"]], ["add", "theorem", "typein_one_out", ["ordinal"]], ["mod", "theorem", "zero_lt_one", ["ordinal"]]]}]}, {"timestamp": 1651694657, "sha": "fd8474f5", "message": "feat(algebra/ring/idempotents): Introduce idempotents (#13830)", "changes": [{"oldPath": null, "newPath": "src/algebra/ring/idempotents.lean", "changes": [["add", "theorem", "coe_compl", ["is_idempotent_elem"]], ["add", "theorem", "coe_one", ["is_idempotent_elem"]], ["add", "theorem", "coe_zero", ["is_idempotent_elem"]], ["add", "theorem", "compl_compl", ["is_idempotent_elem"]], ["add", "theorem", "eq", ["is_idempotent_elem"]], ["add", "theorem", "iff_eq_one", ["is_idempotent_elem"]], ["add", "theorem", "iff_eq_zero_or_one", ["is_idempotent_elem"]], ["add", "theorem", "mul_of_commute", ["is_idempotent_elem"]], ["add", "theorem", "of_is_idempotent", ["is_idempotent_elem"]], ["add", "theorem", "one", ["is_idempotent_elem"]], ["add", "theorem", "one_compl", ["is_idempotent_elem"]], ["add", "theorem", "one_sub", ["is_idempotent_elem"]], ["add", "theorem", "one_sub_iff", ["is_idempotent_elem"]], ["add", "theorem", "pow", ["is_idempotent_elem"]], ["add", "theorem", "pow_succ_eq", ["is_idempotent_elem"]], ["add", "theorem", "zero", ["is_idempotent_elem"]], ["add", "theorem", "zero_compl", ["is_idempotent_elem"]], ["add", "def", "is_idempotent_elem", []]]}]}, {"timestamp": 1651694655, "sha": "91c0ef86", "message": "feat(analysis/normed_space/weak_dual): add the rest of Banach-Alaoglu theorem (#9862)\nThe second of two parts to add the Banach-Alaoglu theorem about the compactness of the closed unit ball (and more generally polar sets of neighborhoods of the origin) of the dual of a normed space in the weak-star topology.\nThis second half is about the embedding of the weak dual of a normed space into a (big) product of the ground fields, and the required compactness statements from Tychonoff's theorem. In particular it contains the actual Banach-Alaoglu theorem.\nCo-Authored-By: Yury Kudryashov ", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "is_closed_image_coe_closed_ball", ["continuous_linear_map"]], ["add", "theorem", "is_closed_image_coe_of_bounded_of_weak_closed", ["continuous_linear_map"]], ["add", "theorem", "is_compact_closure_image_coe_of_bounded", ["continuous_linear_map"]], ["add", "theorem", "is_compact_image_coe_closed_ball", ["continuous_linear_map"]], ["add", "theorem", "is_compact_image_coe_of_bounded_of_closed_image", ["continuous_linear_map"]], ["add", "theorem", "is_compact_image_coe_of_bounded_of_weak_closed", ["continuous_linear_map"]], ["add", "theorem", "is_weak_closed_closed_ball", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": [["add", "theorem", "coe_to_weak_dual", ["normed_space", "dual"]], ["add", "theorem", "is_closed_image_polar_of_mem_nhds", ["normed_space", "dual"]], ["mod", "def", "to_weak_dual", ["normed_space", "dual"]], ["mod", "theorem", "to_weak_dual_continuous", ["normed_space", "dual"]], ["del", "theorem", "coe_to_fun_eq_normed_coe_to_fun", ["weak_dual"]], ["add", "theorem", "coe_to_normed_dual", ["weak_dual"]], ["add", "theorem", "is_closed_closed_ball", ["weak_dual"]], ["add", "theorem", "is_closed_image_coe_of_bounded_of_closed", ["weak_dual"]], ["add", "theorem", "is_closed_image_polar_of_mem_nhds", ["weak_dual"]], ["add", "theorem", "is_closed_polar", ["weak_dual"]], ["add", "theorem", "is_compact_closed_ball", ["weak_dual"]], ["add", "theorem", "is_compact_of_bounded_of_closed", ["weak_dual"]], ["add", "theorem", "is_compact_polar", ["weak_dual"]], ["add", "def", "polar", ["weak_dual"]], ["add", "theorem", "polar_def", ["weak_dual"]], ["del", "theorem", "preimage_closed_unit_ball", ["weak_dual", "to_normed_dual"]], ["mod", "def", "to_normed_dual", ["weak_dual"]], ["mod", "theorem", "to_normed_dual_eq_iff", ["weak_dual"]]]}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "is_closed_iff'", ["inducing"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "is_closed_induced_iff'", []]]}]}, {"timestamp": 1651687112, "sha": "90d6f271", "message": "ci(workflows/dependent-issues): run once every 15 mins, instead of on every merged PR (#13940)", "changes": [{"oldPath": ".github/workflows/dependent-issues.yml", "newPath": ".github/workflows/dependent-issues.yml", "changes": []}]}, {"timestamp": 1651687110, "sha": "aabcd895", "message": "chore(analysis/analytic_composition): weaken some typeclass arguments (#13924)\nThere's no need to do a long computation to show the multilinear_map is bounded, when continuity follows directly from the definition.\nThis deletes `comp_along_composition_aux`, and moves the lemmas about the norm of `comp_along_composition` further down the file so as to get the lemmas with weaker typeclass requirements out of the way first.\nThe norm proofs are essentially unchanged.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": [["del", "def", "comp_along_composition_aux", ["continuous_multilinear_map"]], ["del", "theorem", "comp_along_composition_aux_bound", ["continuous_multilinear_map"]], ["add", "theorem", "comp_along_composition_bound", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/normed_space/indicator_function.lean", "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": []}]}, {"timestamp": 1651687109, "sha": "209bb5d4", "message": "feat(set_theory/game/{pgame, basic}): Add more order lemmas (#13807)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["add", "theorem", "lt_or_eq_of_le", ["game"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "lt_or_equiv_of_le", ["pgame"]], ["add", "theorem", "lt_or_equiv_or_gt", ["pgame"]]]}]}, {"timestamp": 1651687108, "sha": "31529827", "message": "feat(representation/Rep): linear structures (#13782)\nMake `Rep k G` a `k`-linear (and `k`-linear monoidal) category.", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": []}, {"oldPath": "src/category_theory/linear/default.lean", "newPath": "src/category_theory/linear/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/linear/functor_category.lean", "changes": [["add", "def", "app_linear_map", ["category_theory", "nat_trans"]], ["add", "theorem", "app_smul", ["category_theory", "nat_trans"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/linear.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/transport.lean", "newPath": "src/category_theory/monoidal/transport.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/functor_category.lean", "newPath": "src/category_theory/preadditive/functor_category.lean", "changes": []}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "theorem", "add_hom", ["Action"]], ["add", "theorem", "associator_hom_hom", ["Action"]], ["add", "theorem", "associator_inv_hom", ["Action"]], ["mod", "def", "forget_braided", ["Action"]], ["add", "theorem", "left_unitor_hom_hom", ["Action"]], ["add", "theorem", "left_unitor_inv_hom", ["Action"]], ["add", "theorem", "neg_hom", ["Action"]], ["add", "theorem", "right_unitor_hom_hom", ["Action"]], ["add", "theorem", "right_unitor_inv_hom", ["Action"]], ["add", "theorem", "smul_hom", ["Action"]], ["add", "theorem", "tensor_V", ["Action"]], ["add", "theorem", "tensor_hom", ["Action"]], ["add", "theorem", "tensor_rho", ["Action"]], ["add", "theorem", "zero_hom", ["Action"]]]}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": []}]}, {"timestamp": 1651687107, "sha": "0009ffba", "message": "refactor(linear_algebra/charpoly): split file to reduce imports (#13778)\nWhile working on representation theory I was annoyed to find that essentially all of field theory was being transitively imported (causing lots of unnecessary recompilation). This improves the situation slightly.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": [["del", "theorem", "charpoly_left_mul_matrix", []], ["del", "theorem", "charpoly_pow_card", ["finite_field", "matrix"]], ["del", "theorem", "trace_pow_card", ["finite_field"]], ["del", "theorem", "is_integral", ["matrix"]], ["del", "theorem", "minpoly_dvd_charpoly", ["matrix"]], ["del", "theorem", "charpoly_pow_card", ["zmod"]], ["del", "theorem", "trace_pow_card", ["zmod"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/charpoly/finite_field.lean", "changes": [["add", "theorem", "charpoly_pow_card", ["finite_field", "matrix"]], ["add", "theorem", "trace_pow_card", ["finite_field"]], ["add", "theorem", "charpoly_pow_card", ["zmod"]], ["add", "theorem", "trace_pow_card", ["zmod"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/charpoly/minpoly.lean", "changes": [["add", "theorem", "charpoly_left_mul_matrix", []], ["add", "theorem", "is_integral", ["matrix"]], ["add", "theorem", "minpoly_dvd_charpoly", ["matrix"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1651687106, "sha": "dd4590af", "message": "refactor(algebra/restrict_scalars): remove global instance on module_orig (#13759)\nThe global instance was conceptually wrong, unnecessary (after avoiding a hack in algebra/lie/base_change.lean), and wreaking havoc in #13713.", "changes": [{"oldPath": "src/algebra/algebra/restrict_scalars.lean", "newPath": "src/algebra/algebra/restrict_scalars.lean", "changes": [["add", "def", "add_equiv", ["restrict_scalars"]], ["add", "theorem", "add_equiv_map_smul", ["restrict_scalars"]], ["del", "def", "alg_equiv", ["restrict_scalars"]], ["del", "def", "linear_equiv", ["restrict_scalars"]], ["del", "theorem", "linear_equiv_map_smul", ["restrict_scalars"]], ["add", "def", "lsmul", ["restrict_scalars"]], ["add", "def", "module_orig", ["restrict_scalars"]], ["add", "def", "ring_equiv", ["restrict_scalars"]], ["add", "theorem", "ring_equiv_algebra_map", ["restrict_scalars"]], ["add", "theorem", "ring_equiv_map_smul", ["restrict_scalars"]]]}, {"oldPath": "src/algebra/lie/base_change.lean", "newPath": "src/algebra/lie/base_change.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "def", "normed_space_orig", ["module", "restrict_scalars"]]]}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "theorem", "adjoin_algebra_map'", ["algebra"]]]}]}, {"timestamp": 1651687104, "sha": "abcd601c", "message": "fix(src/tactic/alias): Teach `get_alias_target` about `alias f ↔ a b` (#13742)\nthe `get_alias_target` function in `alias.lean` is used by the\n`to_additive` command to add the “Alias of …” docstring when creating an\nadditive version of an existing alias (this was #13330).\nBut `get_alias_target` did not work for `alias f ↔ a b`. This fixes it\nby extending the `alias_attr` map to not just store whether a defintion\nis an alias, but also what it is an alias of. Much more principled than\ntrying to reconstruct the alias target from the RHS of the alias\ndefinition.\nNote that `alias` currently says “Alias of `foo_iff`” even though it’s\nreally an alias of `foo_iff.mp`. This is an existing bug, not fixed in\nthis PR – the effect is just that this “bug” will uniformly apply to\nadditive lemmas as well.\nHopefully will get rid of plenty of nolint.txt entries, and create\nbetter docs.\nAlso improve the test file for the linter significantly.", "changes": [{"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "test/lint_to_additive_doc.lean", "newPath": "test/lint_to_additive_doc.lean", "changes": [["add", "def", "a_one_iff_b_one", []], ["del", "def", "no_to_additive", []], ["add", "def", "without_to_additive", []]]}]}, {"timestamp": 1651679611, "sha": "0038a043", "message": "feat(data/int/cast): int cast division lemmas (#13929)\nAdds lemmas for passing int cast through division, and renames the nat versions from `nat.cast_dvd` to `nat.cast_div`. \nAlso some golf.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "cast_div_char_zero", ["nat"]], ["del", "theorem", "cast_dvd_char_zero", ["nat"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "cast_div", ["int"]]]}, {"oldPath": "src/data/int/char_zero.lean", "newPath": "src/data/int/char_zero.lean", "changes": [["add", "theorem", "cast_div_char_zero", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_div", ["nat"]], ["del", "theorem", "cast_dvd", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/von_mangoldt.lean", "newPath": "src/number_theory/von_mangoldt.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": []}]}, {"timestamp": 1651679610, "sha": "46023701", "message": "feat(set_theory/game/birthday): More basic lemmas on birthdays (#13729)", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": [["add", "theorem", "birthday_add_zero", ["pgame"]], ["add", "theorem", "birthday_one", ["pgame"]], ["add", "theorem", "birthday_zero_add", ["pgame"]]]}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "nat_one", ["pgame"]]]}]}, {"timestamp": 1651679609, "sha": "60ad8448", "message": "feat(group_theory/complement): API lemmas relating `range_mem_transversals` and `to_equiv` (#13694)\nThis PR adds an API lemma relating `range_mem_left_transversals` (the main way of constructing left transversals) and `mem_left_transversals.to_equiv` (one of the main constructions from left transversals), and a similar lemma relating the right versions.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "to_equiv_apply", ["subgroup", "mem_left_transversals"]], ["add", "theorem", "to_equiv_apply", ["subgroup", "mem_right_transversals"]]]}]}, {"timestamp": 1651679608, "sha": "923ae0bc", "message": "feat(group_theory/free_group): is_free_group via `free_group X ≃* G` (#13633)\nThe previous definition of the `is_free_group` class was defined via the universal\nproperty of free groups, which is intellectually pleasing, but\ntechnically annoying, due to the universe problems of quantifying over\n“all other groups” in the definition. To work around them, many\ndefinitions had to be duplicated.\nThis changes the definition of `is_free_group` to contain an isomorphism\nbetween the `free_group` over the generator and `G`. It also moves this\nclass into `free_group.lean`, so that it can be found more easily.\nRelevant Zulip thread:\n\nA previous attempt at reforming `is_free_group` to unbundle the set\nof generators (`is_freely_generated_by G X`) is on branch\n`joachim/is_freely_generated_by`, but it wasn't very elegant to use in some places.", "changes": [{"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/is_free_group.lean", "newPath": "src/group_theory/is_free_group.lean", "changes": [["del", "theorem", "ext_hom'", ["is_free_group"]], ["mod", "theorem", "ext_hom", ["is_free_group"]], ["del", "def", "lift'", ["is_free_group"]], ["del", "theorem", "lift'_of", ["is_free_group"]], ["mod", "def", "lift", ["is_free_group"]], ["del", "theorem", "lift_eq_free_group_lift", ["is_free_group"]], ["mod", "theorem", "lift_of", ["is_free_group"]], ["add", "theorem", "lift_symm_apply", ["is_free_group"]], ["add", "def", "of", ["is_free_group"]], ["mod", "theorem", "of_eq_free_group_of", ["is_free_group"]], ["add", "def", "of_lift", ["is_free_group"]], ["mod", "def", "of_mul_equiv", ["is_free_group"]], ["add", "def", "of_unique_lift", ["is_free_group"]], ["mod", "def", "to_free_group", ["is_free_group"]], ["mod", "theorem", "unique_lift", ["is_free_group"]]]}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": [["mod", "def", "End_is_free", ["is_free_groupoid", "spanning_tree"]]]}]}, {"timestamp": 1651679607, "sha": "552a4709", "message": "feat(number_theory/cyclotomic/rat): the ring of integers of cyclotomic fields. (#13585)\nWe compute the ring of integers of a `p ^ n`-th cyclotomic extension of `ℚ`.\nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["add", "theorem", "singleton_one", ["is_cyclotomic_extension"]]]}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": [["add", "theorem", "discr_prime_pow", ["is_cyclotomic_extension"]], ["add", "theorem", "discr_prime_pow_eq_unit_mul_pow", ["is_cyclotomic_extension"]], ["add", "theorem", "discr_prime_pow_ne_two'", ["is_cyclotomic_extension"]]]}, {"oldPath": null, "newPath": "src/number_theory/cyclotomic/rat.lean", "changes": [["add", "theorem", "cyclotomic_ring_is_integral_closure_of_prime", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "cyclotomic_ring_is_integral_closure_of_prime_pow", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "discr_odd_prime'", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "discr_prime_pow'", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "discr_prime_pow_eq_unit_mul_pow'", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "discr_prime_pow_ne_two'", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "is_integral_closure_adjoing_singleton_of_prime", ["is_cyclotomic_extension", "rat"]], ["add", "theorem", "is_integral_closure_adjoing_singleton_of_prime_pow", ["is_cyclotomic_extension", "rat"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "cyclotomic_irreducible_of_irreducible_pow", ["polynomial"]]]}]}, {"timestamp": 1651679606, "sha": "e7161393", "message": "feat(algebra/homology/Module): API for complexes of modules (#12622)\nAPI for homological complexes in `Module R`.", "changes": [{"oldPath": "src/algebra/category/Module/kernels.lean", "newPath": "src/algebra/category/Module/kernels.lean", "changes": [["add", "theorem", "cokernel_π_ext", ["Module"]]]}, {"oldPath": "src/algebra/category/Module/subobject.lean", "newPath": "src/algebra/category/Module/subobject.lean", "changes": [["add", "theorem", "cokernel_π_image_subobject_ext", ["Module"]], ["add", "theorem", "to_kernel_subobject_arrow", ["Module"]]]}, {"oldPath": null, "newPath": "src/algebra/homology/Module.lean", "changes": [["add", "theorem", "cycles_ext", ["Module"]], ["add", "theorem", "cycles_map_to_cycles", ["Module"]], ["add", "theorem", "homology_ext'", ["Module"]], ["add", "theorem", "homology_ext", ["Module"]], ["add", "def", "to_cycles", ["Module"]], ["add", "def", "to_homology", ["Module"]]]}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["mod", "theorem", "cycles_map_arrow", []], ["del", "theorem", "boundaries_to_cycles_arrow", ["homological_complex"]], ["mod", "def", "cycles", ["homological_complex"]], ["del", "theorem", "cycles_arrow_d_from", ["homological_complex"]]]}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["add", "theorem", "cokernel_funext", ["category_theory", "limits"]]]}]}, {"timestamp": 1651679604, "sha": "a7c50973", "message": "feat(set_theory/cardinal/cofinality): Cofinality of normal functions (#12384)\nIf `f` is normal and `a` is limit, then `cof (f a) = cof a`. We use this to golf `cof_add` from 24 lines down to 6.", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "aleph'_cof", ["ordinal"]], ["add", "theorem", "aleph_cof", ["ordinal"]], ["add", "theorem", "cof_ne_zero", ["ordinal"]], ["add", "theorem", "cof_eq", ["ordinal", "is_normal"]], ["add", "theorem", "cof_le", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1651679603, "sha": "d565adb7", "message": "feat(analysis/convex/topology): Separating by convex sets (#11458)\nWhen `s` is compact, `t` is closed and both are convex, we can find disjoint open convex sets containing `s` and `t`.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "neg", ["convex"]], ["mod", "theorem", "convex_Inter", []], ["add", "theorem", "convex_Inter₂", []]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "cthickening", ["convex"]], ["add", "theorem", "thickening", ["convex"]], ["mod", "theorem", "convex_on_dist", []], ["mod", "theorem", "convex_on_norm", []], ["add", "theorem", "exists_open_convexes", ["disjoint"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "exists_cthickenings", ["disjoint"]], ["add", "theorem", "exists_thickenings", ["disjoint"]], ["add", "theorem", "exists_pos_forall_le_edist", ["emetric"]]]}]}, {"timestamp": 1651676256, "sha": "32320a10", "message": "feat(measure_theory/integral/lebesgue): speed up a proof (#13946)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}]}, {"timestamp": 1651662647, "sha": "ceca8d74", "message": "fix(ring_theory/polynomial/basic): fix unexpected change of an implicit parameter (#13935)\nFix unexpected change of an implicit parameter in the previous PR(#13800).\nFix docstring.", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "def", "degree_lt_equiv", ["polynomial"]]]}]}, {"timestamp": 1651662646, "sha": "53c79d56", "message": "feat(linear_algebra/span): add `finite_span_is_compact_element` (#13901)\nThis PR adds `finite_span_is_compact_element`, which extends `singleton_span_is_compact_element` to the spans of finite subsets.\nThis will be useful e.g. when proving the existence of a maximal submodule of a finitely generated module.", "changes": [{"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "finite_span_is_compact_element", ["submodule"]], ["add", "theorem", "finset_span_is_compact_element", ["submodule"]]]}]}, {"timestamp": 1651662645, "sha": "a057441e", "message": "feat(order/basic): Notation for `order_dual` (#13798)\nDefine `αᵒᵈ` as notation for `order_dual α` and replace current uses.\n[Zulip poll](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Notation.20for.20order_dual/near/280629129)", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/algebra/bounds.lean", "newPath": "src/algebra/bounds.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["mod", "theorem", "pow_le_one'", []], ["mod", "theorem", "pow_lt_one'", []]]}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "def", "inv", ["order_iso"]]]}, {"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": [["mod", "def", "smul_left_dual", ["order_iso"]]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["mod", "theorem", "of_dual_smul", ["order_dual"]]]}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["mod", "theorem", "gc", ["prime_spectrum"]], ["mod", "theorem", "gc_set", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/filter.lean", "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": [["mod", "def", "equiv_prod", ["box_integral", "integration_params"]], ["mod", "def", "iso_prod", ["box_integral", "integration_params"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "convex_Ici", []], ["mod", "theorem", "convex_Ioi", []]]}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/convex/jensen.lean", "newPath": "src/analysis/convex/jensen.lean", "changes": []}, {"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": [["mod", "theorem", "strict_convex_Ici", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/combinatorics/pigeonhole.lean", "newPath": "src/combinatorics/pigeonhole.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["mod", "def", "fin_equiv", ["order_iso"]]]}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "inf'_const", ["finset"]], ["mod", "theorem", "inf'_le", ["finset"]], ["mod", "theorem", "inf'_le_iff", ["finset"]], ["mod", "theorem", "inf'_lt_iff", ["finset"]], ["mod", "theorem", "inf_eq_infi", ["finset"]], ["mod", "theorem", "inf_id_eq_Inf", ["finset"]], ["mod", "theorem", "inf_top", ["finset"]], ["mod", "theorem", "infi_option_to_finset", ["finset"]], ["mod", "theorem", "le_inf'", ["finset"]], ["mod", "theorem", "lt_inf'_iff", ["finset"]], ["mod", "theorem", "lt_min'_iff", ["finset"]], ["mod", "theorem", "mem_of_min", ["finset"]], ["mod", "theorem", "min'_eq_inf'", ["finset"]], ["mod", "theorem", "infi_eq_infi_finset", []]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/finset/pi_induction.lean", "newPath": "src/data/finset/pi_induction.lean", "changes": []}, {"oldPath": "src/data/finset/sigma.lean", "newPath": "src/data/finset/sigma.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "card_order_dual", ["fintype"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": [["mod", "def", "argmin", ["list"]], ["mod", "theorem", "le_min_of_le_forall", ["list"]], ["mod", "theorem", "minimum_eq_coe_foldr_min_of_ne_nil", ["list"]]]}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": [["mod", "theorem", "dual_iff", ["ordnode", "bounded"]], ["mod", "theorem", "dual", ["ordnode", "valid'"]], ["mod", "theorem", "dual_iff", ["ordnode", "valid'"]], ["mod", "theorem", "dual", ["ordnode", "valid"]], ["mod", "theorem", "dual_iff", ["ordnode", "valid"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "def", "inv_ennreal", ["order_iso"]]]}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["mod", "def", "neg_order_iso", ["ereal"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Iic_subset_Iic", ["set"]]]}, {"oldPath": "src/data/set/intervals/infinite.lean", "newPath": "src/data/set/intervals/infinite.lean", "changes": [["mod", "theorem", "infinite", ["set", "Ioi"]]]}, {"oldPath": "src/data/set/intervals/pi.lean", "newPath": "src/data/set/intervals/pi.lean", "changes": []}, {"oldPath": "src/data/set/intervals/with_bot_top.lean", "newPath": "src/data/set/intervals/with_bot_top.lean", "changes": [["mod", "theorem", "range_coe", ["with_bot"]]]}, {"oldPath": "src/data/sum/order.lean", "newPath": "src/data/sum/order.lean", "changes": [["mod", "def", "sum_dual_distrib", ["order_iso"]], ["mod", "def", "sum_lex_dual_antidistrib", ["order_iso"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "iterate_range", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["mod", "def", "tunnel", ["linear_map"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": []}, {"oldPath": "src/measure_theory/function/locally_integrable.lean", "newPath": "src/measure_theory/function/locally_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/lattice.lean", "newPath": "src/measure_theory/lattice.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "Ioi_ae_eq_Ici'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/order/antisymmetrization.lean", "newPath": "src/order/antisymmetrization.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["mod", "theorem", "is_atomic_dual_iff_is_coatomic", []], ["mod", "theorem", "is_atomistic_dual_iff_is_coatomistic", []], ["mod", "theorem", "is_coatomic_dual_iff_is_atomic", []], ["mod", "theorem", "is_coatomistic_dual_iff_is_atomistic", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded.lean", "newPath": "src/order/bounded.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "theorem", "exists_glb_Ioi", []], ["mod", "theorem", "is_glb_Ioi", []], ["mod", "theorem", "is_least_singleton", []], ["mod", "theorem", "is_lub_empty", []], ["mod", "theorem", "le_glb_Ioi", []], ["mod", "theorem", "lower_bounds_empty", []], ["mod", "theorem", "not_bdd_below_iff'", []], ["mod", "theorem", "lower_bounds_image", ["order_iso"]]]}, {"oldPath": "src/order/category/BoolAlg.lean", "newPath": "src/order/category/BoolAlg.lean", "changes": []}, {"oldPath": "src/order/category/BoundedDistribLattice.lean", "newPath": "src/order/category/BoundedDistribLattice.lean", "changes": []}, {"oldPath": "src/order/category/BoundedLattice.lean", "newPath": "src/order/category/BoundedLattice.lean", "changes": []}, {"oldPath": "src/order/category/BoundedOrder.lean", "newPath": "src/order/category/BoundedOrder.lean", "changes": []}, {"oldPath": "src/order/category/CompleteLattice.lean", "newPath": "src/order/category/CompleteLattice.lean", "changes": []}, {"oldPath": "src/order/category/DistribLattice.lean", "newPath": "src/order/category/DistribLattice.lean", "changes": []}, {"oldPath": "src/order/category/FinBoolAlg.lean", "newPath": "src/order/category/FinBoolAlg.lean", "changes": []}, {"oldPath": "src/order/category/FinPartialOrder.lean", "newPath": "src/order/category/FinPartialOrder.lean", "changes": []}, {"oldPath": "src/order/category/Lattice.lean", "newPath": "src/order/category/Lattice.lean", "changes": [["mod", "def", "dual", ["Lattice"]]]}, {"oldPath": "src/order/category/LinearOrder.lean", "newPath": "src/order/category/LinearOrder.lean", "changes": []}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/category/PartialOrder.lean", "newPath": "src/order/category/PartialOrder.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": []}, {"oldPath": "src/order/category/Semilattice.lean", "newPath": "src/order/category/Semilattice.lean", "changes": []}, {"oldPath": "src/order/circular.lean", "newPath": "src/order/circular.lean", "changes": []}, {"oldPath": "src/order/compare.lean", "newPath": "src/order/compare.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["mod", "theorem", "Inf_sup_eq", []], ["mod", "theorem", "infi_sup_eq", []], ["mod", "theorem", "sup_Inf_eq", []], ["mod", "theorem", "sup_infi_eq", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_eq_bot", []], ["mod", "theorem", "Inf_eq_infi'", []], ["mod", "theorem", "Inf_eq_infi", []], ["mod", "theorem", "Inf_image'", []], ["mod", "theorem", "Inf_sUnion", []], ["mod", "theorem", "Sup_eq_bot", []], ["mod", "theorem", "Sup_image", []], ["mod", "theorem", "inf_eq_infi", []], ["mod", "theorem", "infi_bool_eq", []], ["mod", "theorem", "infi_comm", []], ["mod", "theorem", "infi_of_empty", []], ["mod", "theorem", "infi_top", []], ["mod", "theorem", "le_Inf_inter", []], ["mod", "theorem", "supr_and", []], ["mod", "theorem", "supr_bot", []], ["mod", "theorem", "supr_const", []]]}, {"oldPath": "src/order/concept.lean", "newPath": "src/order/concept.lean", "changes": [["mod", "def", "swap_equiv", ["concept"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cinfi_const", []], ["mod", "theorem", "cinfi_set", []]]}, {"oldPath": "src/order/cover.lean", "newPath": "src/order/cover.lean", "changes": [["mod", "theorem", "of_dual_covby_of_dual_iff", []], ["mod", "theorem", "of_dual_wcovby_of_dual_iff", []]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "at_bot_Iio_eq", ["filter"]], ["mod", "theorem", "at_bot_basis'", ["filter"]], ["mod", "theorem", "at_bot_basis", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["mod", "theorem", "infi_eq", ["is_min_on"]]]}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": [["mod", "theorem", "gfp_gfp", ["order_hom"]]]}, {"oldPath": "src/order/grade.lean", "newPath": "src/order/grade.lean", "changes": [["mod", "theorem", "grade_of_dual", []]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["mod", "def", "dual_iso", ["order_hom"]], ["mod", "theorem", "symm_dual_comp", ["order_hom"]], ["mod", "def", "compl", ["order_iso"]], ["mod", "def", "dual_dual", ["order_iso"]], ["mod", "theorem", "dual_dual_symm_apply", ["order_iso"]]]}, {"oldPath": "src/order/hom/bounded.lean", "newPath": "src/order/hom/bounded.lean", "changes": [["mod", "theorem", "symm_dual_comp", ["bot_hom"]], ["mod", "theorem", "symm_dual_comp", ["bounded_order_hom"]], ["mod", "theorem", "symm_dual_comp", ["top_hom"]]]}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": [["mod", "theorem", "symm_dual_comp", ["Inf_hom"]], ["mod", "theorem", "symm_dual_comp", ["Sup_hom"]], ["mod", "theorem", "symm_dual_comp", ["complete_lattice_hom"]]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["mod", "theorem", "symm_dual_comp", ["bounded_lattice_hom"]], ["mod", "theorem", "symm_dual_comp", ["inf_hom"]], ["mod", "theorem", "symm_dual_comp", ["inf_top_hom"]], ["mod", "theorem", "symm_dual_comp", ["lattice_hom"]], ["mod", "def", "dual", ["sup_bot_hom"]], ["mod", "theorem", "symm_dual_comp", ["sup_bot_hom"]], ["mod", "theorem", "symm_dual_comp", ["sup_hom"]]]}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["mod", "theorem", "inf_assoc", []], ["mod", "theorem", "inf_comm", []], ["mod", "theorem", "inf_idem", []], ["mod", "theorem", "inf_ind", []], ["mod", "theorem", "inf_le_iff", []], ["mod", "theorem", "inf_lt_iff", []], ["mod", "theorem", "le_inf_iff", []], ["mod", "theorem", "lt_inf_iff", []]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": []}, {"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["mod", "theorem", "is_bot_of_dual_iff", []], ["mod", "theorem", "is_bot_or_exists_lt", []], ["mod", "theorem", "is_max_of_dual_iff", []], ["mod", "theorem", "is_min_of_dual_iff", []], ["mod", "theorem", "is_top_of_dual_iff", []]]}, {"oldPath": "src/order/min_max.lean", "newPath": "src/order/min_max.lean", "changes": [["mod", "theorem", "max_cases", []], ["mod", "theorem", "max_eq_iff", []], ["mod", "theorem", "max_lt_max_left_iff", []], ["mod", "theorem", "max_lt_max_right_iff", []], ["mod", "theorem", "min_lt_min", []]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["mod", "theorem", "antitone_nat_of_succ_le", []], ["mod", "theorem", "strict_anti_nat_of_succ_lt", []], ["mod", "theorem", "strict_mono_nat_of_lt_succ", []]]}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": [["mod", "theorem", "le_to_dual", ["order_dual"]], ["mod", "theorem", "lt_to_dual", ["order_dual"]], ["mod", "def", "of_dual", ["order_dual"]], ["mod", "theorem", "of_dual_inj", ["order_dual"]], ["mod", "theorem", "of_dual_le_of_dual", ["order_dual"]], ["mod", "theorem", "of_dual_lt_of_dual", ["order_dual"]], ["mod", "def", "to_dual", ["order_dual"]], ["mod", "theorem", "to_dual_inj", ["order_dual"]], ["mod", "theorem", "to_dual_le", ["order_dual"]], ["mod", "theorem", "to_dual_le_to_dual", ["order_dual"]], ["mod", "theorem", "to_dual_lt", ["order_dual"]], ["mod", "theorem", "to_dual_lt_to_dual", ["order_dual"]], ["mod", "theorem", "to_dual_of_dual", ["order_dual"]]]}, {"oldPath": "src/order/pfilter.lean", "newPath": "src/order/pfilter.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["mod", "theorem", "le_pred_iff_eq_bot", ["order"]], ["mod", "theorem", "pred_lt_iff_ne_bot", ["order"]]]}, {"oldPath": "src/order/succ_pred/relation.lean", "newPath": "src/order/succ_pred/relation.lean", "changes": []}, {"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["mod", "theorem", "is_lower_set_preimage_to_dual_iff", []], ["mod", "theorem", "is_upper_set_preimage_to_dual_iff", []], ["mod", "def", "Ici_Sup_hom", ["upper_set"]], ["mod", "def", "Ici_sup_hom", ["upper_set"]]]}, {"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["mod", "theorem", "is_wf_iff_no_descending_seq", ["set"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": [["mod", "theorem", "monotone_stabilizes", ["is_artinian"]]]}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "def", "valuation", ["add_valuation"]], ["mod", "def", "add_valuation", []]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["mod", "def", "prime_spectrum_order_equiv", ["valuation_subring"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["mod", "theorem", "closure_Iio'", []], ["mod", "theorem", "disjoint_nhds_at_bot", []], ["mod", "theorem", "frontier_Ici_subset", []], ["mod", "theorem", "inf_nhds_at_bot", []]]}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["mod", "theorem", "Sup_mem", ["is_compact"]]]}, {"oldPath": "src/topology/algebra/order/extend_from.lean", "newPath": "src/topology/algebra/order/extend_from.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/intermediate_value.lean", "newPath": "src/topology/algebra/order/intermediate_value.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/left_right.lean", "newPath": "src/topology/algebra/order/left_right.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": [["mod", "theorem", "Liminf_nhds", []], ["mod", "theorem", "is_bounded_ge_nhds", []]]}, {"oldPath": "src/topology/algebra/order/monotone_continuity.lean", "newPath": "src/topology/algebra/order/monotone_continuity.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/monotone_convergence.lean", "newPath": "src/topology/algebra/order/monotone_convergence.lean", "changes": [["mod", "theorem", "tendsto_at_bot_csupr", []], ["mod", "theorem", "tendsto_at_bot_is_lub", []], ["mod", "theorem", "tendsto_at_top_cinfi", []], ["mod", "theorem", "tendsto_at_top_is_glb", []]]}, {"oldPath": "src/topology/continuous_function/ordered.lean", "newPath": "src/topology/continuous_function/ordered.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/order/lattice.lean", "newPath": "src/topology/order/lattice.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}]}, {"timestamp": 1651662644, "sha": "402e5647", "message": "feat(linear_algebra/prod): linear version of prod_map (#13751)", "changes": [{"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "prod_map_add", ["linear_map"]], ["add", "def", "prod_map_alg_hom", ["linear_map"]], ["add", "def", "prod_map_linear", ["linear_map"]], ["del", "def", "prod_map_monoid_hom", ["linear_map"]], ["add", "def", "prod_map_ring_hom", ["linear_map"]], ["add", "theorem", "prod_map_smul", ["linear_map"]], ["add", "theorem", "prod_map_zero", ["linear_map"]]]}]}, {"timestamp": 1651662643, "sha": "e1f00bc7", "message": "feat(order/well_founded): Well founded relations are asymmetric and irreflexive (#13692)", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["add", "theorem", "not_gt_of_lt", ["well_founded"]]]}]}, {"timestamp": 1651662642, "sha": "6c7b880e", "message": "feat(algebra/module/torsion): torsion ideal, decomposition lemma (#13414)\nDefines the torsion ideal of an element in a module, and also shows a decomposition lemma for torsion modules.", "changes": [{"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": [["add", "theorem", "torsion_by_eq_span_singleton", ["ideal", "quotient"]], ["add", "theorem", "mem_torsion_of_iff", []], ["add", "def", "has_scalar", ["module", "is_torsion_by_set"]], ["add", "theorem", "mk_smul", ["module", "is_torsion_by_set"]], ["add", "def", "module", ["module", "is_torsion_by_set"]], ["add", "def", "is_torsion_by_set", ["module"]], ["add", "theorem", "quot_torsion_of_equiv_span_singleton_apply_mk", []], ["add", "theorem", "is_torsion'_powers_iff", ["submodule"]], ["add", "theorem", "is_torsion_by_set_iff_is_torsion_by_span", ["submodule"]], ["add", "theorem", "is_torsion_by_set_iff_torsion_by_set_eq_top", ["submodule"]], ["add", "theorem", "is_torsion_by_singleton_iff", ["submodule"]], ["add", "theorem", "is_torsion_by_span_singleton_iff", ["submodule"]], ["add", "theorem", "mem_torsion_by_set_iff", ["submodule"]], ["add", "theorem", "supr_torsion_by_eq_torsion_by_prod", ["submodule"]], ["mod", "theorem", "mk_smul", ["submodule", "torsion_by"]], ["add", "theorem", "torsion_by_independent", ["submodule"]], ["add", "theorem", "torsion_by_le_torsion_by_of_dvd", ["submodule"]], ["add", "theorem", "torsion_by_one", ["submodule"]], ["add", "theorem", "mk_smul", ["submodule", "torsion_by_set"]], ["add", "def", "torsion_by_set", ["submodule"]], ["add", "theorem", "torsion_by_set_eq_torsion_by_span", ["submodule"]], ["add", "theorem", "torsion_by_set_is_torsion_by_set", ["submodule"]], ["add", "theorem", "torsion_by_set_le_torsion_by_set_of_subset", ["submodule"]], ["add", "theorem", "torsion_by_set_torsion_by_set_eq_top", ["submodule"]], ["add", "theorem", "torsion_by_singleton_eq", ["submodule"]], ["add", "theorem", "torsion_by_span_singleton_eq", ["submodule"]], ["add", "theorem", "torsion_by_univ", ["submodule"]], ["add", "theorem", "torsion_is_internal", ["submodule"]], ["add", "def", "torsion_of", []]]}, {"oldPath": "src/ring_theory/coprime/lemmas.lean", "newPath": "src/ring_theory/coprime/lemmas.lean", "changes": [["mod", "theorem", "exists_sum_eq_one_iff_pairwise_coprime'", []], ["mod", "theorem", "exists_sum_eq_one_iff_pairwise_coprime", []], ["mod", "theorem", "pairwise_coprime_iff_coprime_prod", []]]}]}, {"timestamp": 1651662640, "sha": "e24f7f7a", "message": "move(set_theory/ordinal/{arithmetic → fixed_points}): Move `nfp` (#13315)\nThat way, it belong with the other functions about fixed points.", "changes": [{"oldPath": "src/set_theory/ordinal/arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": [["del", "theorem", "add_eq_right_iff_mul_omega_le", ["ordinal"]], ["del", "theorem", "add_le_right_iff_mul_omega_le", ["ordinal"]], ["del", "def", "deriv", ["ordinal"]], ["del", "theorem", "deriv_add_eq_mul_omega_add", ["ordinal"]], ["del", "theorem", "deriv_eq_enum_fp", ["ordinal"]], ["del", "theorem", "deriv_eq_id_of_nfp_eq_id", ["ordinal"]], ["del", "theorem", "deriv_is_normal", ["ordinal"]], ["del", "theorem", "deriv_limit", ["ordinal"]], ["del", "theorem", "deriv_mul_eq_opow_omega_mul", ["ordinal"]], ["del", "theorem", "deriv_mul_zero", ["ordinal"]], ["del", "theorem", "deriv_succ", ["ordinal"]], ["del", "theorem", "deriv_zero", ["ordinal"]], ["del", "theorem", "eq_zero_or_opow_omega_le_of_mul_eq_right", ["ordinal"]], ["del", "theorem", "apply_eq_self_iff_deriv", ["ordinal", "is_normal"]], ["del", "theorem", "deriv_fp", ["ordinal", "is_normal"]], ["del", "theorem", "le_iff_deriv", ["ordinal", "is_normal"]], ["del", "theorem", "le_nfp", ["ordinal", "is_normal"]], ["del", "theorem", "nfp_fp", ["ordinal", "is_normal"]], ["del", "theorem", "nfp_le_fp", ["ordinal", "is_normal"]], ["del", "theorem", "nfp_unbounded", ["ordinal", "is_normal"]], ["del", "theorem", "iterate_le_nfp", ["ordinal"]], ["del", "theorem", "le_nfp_self", ["ordinal"]], ["del", "theorem", "lt_nfp", ["ordinal"]], ["del", "theorem", "mul_eq_right_iff_opow_omega_dvd", ["ordinal"]], ["del", "theorem", "mul_le_right_iff_opow_omega_dvd", ["ordinal"]], ["del", "def", "nfp", ["ordinal"]], ["del", "theorem", "nfp_add_eq_mul_omega", ["ordinal"]], ["del", "theorem", "nfp_add_zero", ["ordinal"]], ["del", "theorem", "nfp_eq_self", ["ordinal"]], ["del", "theorem", "nfp_le", ["ordinal"]], ["del", "theorem", "nfp_le_iff", ["ordinal"]], ["del", "theorem", "nfp_mul_eq_opow_omega", ["ordinal"]], ["del", "theorem", "nfp_mul_one", ["ordinal"]], ["del", "theorem", "nfp_mul_opow_omega_add", ["ordinal"]], ["del", "theorem", "nfp_mul_zero", ["ordinal"]], ["del", "theorem", "nfp_zero_mul", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/fixed_point.lean", "newPath": "src/set_theory/ordinal/fixed_point.lean", "changes": [["add", "theorem", "add_eq_right_iff_mul_omega_le", ["ordinal"]], ["add", "theorem", "add_le_right_iff_mul_omega_le", ["ordinal"]], ["add", "theorem", "apply_le_nfp_bfamily", ["ordinal"]], ["add", "def", "deriv", ["ordinal"]], ["add", "theorem", "deriv_add_eq_mul_omega_add", ["ordinal"]], ["add", "theorem", "deriv_eq_deriv_family", ["ordinal"]], ["add", "theorem", "deriv_eq_enum_ord", ["ordinal"]], ["add", "theorem", "deriv_eq_id_of_nfp_eq_id", ["ordinal"]], ["add", "theorem", "deriv_id_of_nfp_id", ["ordinal"]], ["add", "theorem", "deriv_is_normal", ["ordinal"]], ["add", "theorem", "deriv_limit", ["ordinal"]], ["add", "theorem", "deriv_mul_eq_opow_omega_mul", ["ordinal"]], ["add", "theorem", "deriv_mul_zero", ["ordinal"]], ["add", "theorem", "deriv_succ", ["ordinal"]], ["add", "theorem", "deriv_zero", ["ordinal"]], ["add", "theorem", "eq_zero_or_opow_omega_le_of_mul_eq_right", ["ordinal"]], ["add", "theorem", "fp_unbounded", ["ordinal"]], ["add", "theorem", "apply_le_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "apply_lt_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "deriv_fp", ["ordinal", "is_normal"]], ["add", "theorem", "fp_iff_deriv", ["ordinal", "is_normal"]], ["add", "theorem", "le_iff_deriv", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_fp", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_le_apply", ["ordinal", "is_normal"]], ["add", "theorem", "iterate_le_nfp", ["ordinal"]], ["add", "theorem", "le_nfp", ["ordinal"]], ["mod", "theorem", "le_nfp_bfamily", ["ordinal"]], ["add", "theorem", "le_nfp_family", ["ordinal"]], ["add", "theorem", "lt_nfp", ["ordinal"]], ["add", "theorem", "mul_eq_right_iff_opow_omega_dvd", ["ordinal"]], ["add", "theorem", "mul_le_right_iff_opow_omega_dvd", ["ordinal"]], ["add", "def", "nfp", ["ordinal"]], ["add", "theorem", "nfp_add_eq_mul_omega", ["ordinal"]], ["add", "theorem", "nfp_add_zero", ["ordinal"]], ["add", "theorem", "nfp_eq_nfp_family", ["ordinal"]], ["add", "theorem", "nfp_eq_self", ["ordinal"]], ["add", "theorem", "nfp_id", ["ordinal"]], ["add", "theorem", "nfp_le", ["ordinal"]], ["add", "theorem", "nfp_le_fp", ["ordinal"]], ["add", "theorem", "nfp_le_iff", ["ordinal"]], ["add", "theorem", "nfp_monotone", ["ordinal"]], ["add", "theorem", "nfp_mul_eq_opow_omega", ["ordinal"]], ["add", "theorem", "nfp_mul_one", ["ordinal"]], ["add", "theorem", "nfp_mul_opow_omega_add", ["ordinal"]], ["add", "theorem", "nfp_mul_zero", ["ordinal"]], ["add", "theorem", "nfp_zero_mul", ["ordinal"]], ["del", "theorem", "self_le_nfp_bfamily", ["ordinal"]], ["del", "theorem", "self_le_nfp_family", ["ordinal"]], ["add", "theorem", "sup_iterate_eq_nfp", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": []}]}, {"timestamp": 1651650661, "sha": "1a862493", "message": "feat(measure_theory/function/l1_space): add `integrable_smul_measure` (#13922)\n* add `integrable_smul_measure`, an `iff` version of\n `integrable.smul_measure`;\n* add `integrable_average`, an `iff` version of `integrable.to_average`.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "integrable_average", ["measure_theory"]], ["add", "theorem", "integrable_smul_measure", ["measure_theory"]]]}]}, {"timestamp": 1651650660, "sha": "af4c6c8a", "message": "chore(ring_theory/polynomial/basic): golf polynomial_not_is_field (#13919)", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1651650659, "sha": "d0efe252", "message": "feat(data/finset/prod): diag of union (#13916)\nLemmas about diag and off diag in relation to simple finset constructions.", "changes": [{"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": [["add", "theorem", "diag_insert", ["finset"]], ["add", "theorem", "diag_singleton", ["finset"]], ["add", "theorem", "diag_union", ["finset"]], ["add", "theorem", "off_diag_insert", ["finset"]], ["add", "theorem", "off_diag_singleton", ["finset"]], ["add", "theorem", "off_diag_union", ["finset"]], ["add", "theorem", "product_sdiff_diag", ["finset"]], ["add", "theorem", "product_sdiff_off_diag", ["finset"]]]}]}, {"timestamp": 1651650658, "sha": "098ab17f", "message": "feat(category_theory/simple): nonzero morphisms to/from a simple are epi/mono (#13905)", "changes": [{"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": [["add", "theorem", "mono_of_nonzero_from_simple", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": [["add", "theorem", "epi_of_nonzero_to_simple", ["category_theory"]]]}]}, {"timestamp": 1651650657, "sha": "455393d3", "message": "refactor(group_theory/{submonoid, subsemigroup}/{center, centralizer}): move set.center and set.centralizer into subsemigroup (#13903)\nThis moves `set.center` and `set.centralizer` (the center and centralizers for a magma) into `group_theory/subsemigroup/{center, centralizer}` so that we can define the center and centralizers for semigroups in #13627.", "changes": [{"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": [["del", "theorem", "add_mem_center", ["set"]], ["del", "def", "center", ["set"]], ["del", "theorem", "center_eq_univ", ["set"]], ["del", "theorem", "center_units_eq", ["set"]], ["del", "theorem", "center_units_subset", ["set"]], ["del", "theorem", "div_mem_center", ["set"]], ["del", "theorem", "div_mem_center₀", ["set"]], ["del", "theorem", "inv_mem_center", ["set"]], ["del", "theorem", "inv_mem_center₀", ["set"]], ["del", "theorem", "mem_center_iff", ["set"]], ["del", "theorem", "mul_mem_center", ["set"]], ["del", "theorem", "neg_mem_center", ["set"]], ["del", "theorem", "one_mem_center", ["set"]], ["del", "theorem", "subset_center_units", ["set"]], ["del", "theorem", "zero_mem_center", ["set"]]]}, {"oldPath": "src/group_theory/submonoid/centralizer.lean", "newPath": "src/group_theory/submonoid/centralizer.lean", "changes": [["del", "theorem", "add_mem_centralizer", ["set"]], ["del", "def", "centralizer", ["set"]], ["del", "theorem", "centralizer_eq_univ", ["set"]], ["del", "theorem", "centralizer_subset", ["set"]], ["del", "theorem", "centralizer_univ", ["set"]], ["del", "theorem", "div_mem_centralizer", ["set"]], ["del", "theorem", "div_mem_centralizer₀", ["set"]], ["del", "theorem", "inv_mem_centralizer", ["set"]], ["del", "theorem", "inv_mem_centralizer₀", ["set"]], ["del", "theorem", "mem_centralizer_iff", ["set"]], ["del", "theorem", "mul_mem_centralizer", ["set"]], ["del", "theorem", "neg_mem_centralizer", ["set"]], ["del", "theorem", "one_mem_centralizer", ["set"]], ["del", "theorem", "zero_mem_centralizer", ["set"]]]}, {"oldPath": null, "newPath": "src/group_theory/subsemigroup/center.lean", "changes": [["add", "theorem", "add_mem_center", ["set"]], ["add", "def", "center", ["set"]], ["add", "theorem", "center_eq_univ", ["set"]], ["add", "theorem", "center_units_eq", ["set"]], ["add", "theorem", "center_units_subset", ["set"]], ["add", "theorem", "div_mem_center", ["set"]], ["add", "theorem", "div_mem_center₀", ["set"]], ["add", "theorem", "inv_mem_center", ["set"]], ["add", "theorem", "inv_mem_center₀", ["set"]], ["add", "theorem", "mem_center_iff", ["set"]], ["add", "theorem", "mul_mem_center", ["set"]], ["add", "theorem", "neg_mem_center", ["set"]], ["add", "theorem", "one_mem_center", ["set"]], ["add", "theorem", "subset_center_units", ["set"]], ["add", "theorem", "zero_mem_center", ["set"]]]}, {"oldPath": null, "newPath": "src/group_theory/subsemigroup/centralizer.lean", "changes": [["add", "theorem", "add_mem_centralizer", ["set"]], ["add", "def", "centralizer", ["set"]], ["add", "theorem", "centralizer_eq_univ", ["set"]], ["add", "theorem", "centralizer_subset", ["set"]], ["add", "theorem", "centralizer_univ", ["set"]], ["add", "theorem", "div_mem_centralizer", ["set"]], ["add", "theorem", "div_mem_centralizer₀", ["set"]], ["add", "theorem", "inv_mem_centralizer", ["set"]], ["add", "theorem", "inv_mem_centralizer₀", ["set"]], ["add", "theorem", "mem_centralizer_iff", ["set"]], ["add", "theorem", "mul_mem_centralizer", ["set"]], ["add", "theorem", "neg_mem_centralizer", ["set"]], ["add", "theorem", "one_mem_centralizer", ["set"]], ["add", "theorem", "zero_mem_centralizer", ["set"]]]}]}, {"timestamp": 1651650655, "sha": "e6b84992", "message": "feat(ring_theory/valuation/valuation_subring): Adds some equivalent conditions for equivalence of valuations (#13895)", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "theorem", "is_equiv_iff_val_eq_one", ["valuation"]], ["add", "theorem", "is_equiv_iff_val_le_one", ["valuation"]], ["add", "theorem", "map_add_eq_of_lt_left", ["valuation"]], ["add", "theorem", "map_add_eq_of_lt_right", ["valuation"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "is_equiv_iff_valuation_subring", ["valuation"]], ["add", "theorem", "is_equiv_valuation_valuation_subring", ["valuation"]], ["add", "theorem", "mem_valuation_subring_iff", ["valuation"]], ["add", "def", "valuation_subring", ["valuation"]], ["add", "theorem", "valuation_subring_valuation", ["valuation_subring"]]]}]}, {"timestamp": 1651650654, "sha": "6d370064", "message": "feat(data/list/basic): add `list.cons_diff` (#13892)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "cons_diff", ["list"]], ["add", "theorem", "cons_diff_of_mem", ["list"]], ["add", "theorem", "cons_diff_of_not_mem", ["list"]]]}]}, {"timestamp": 1651650653, "sha": "269bc85d", "message": "feat(analysis/matrix): add `frobenius_norm_conj_transpose` (#13883)\nThis also moves the existing lemmas about the elementwise norm to the same file.", "changes": [{"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": [["add", "theorem", "frobenius_nnnorm_conj_transpose", ["matrix"]], ["add", "theorem", "frobenius_norm_conj_transpose", ["matrix"]], ["add", "theorem", "nnnorm_conj_transpose", ["matrix"]], ["add", "theorem", "norm_conj_transpose", ["matrix"]]]}, {"oldPath": "src/analysis/normed_space/star/matrix.lean", "newPath": "src/analysis/normed_space/star/matrix.lean", "changes": [["del", "theorem", "nnnorm_conj_transpose", ["matrix"]], ["del", "theorem", "norm_conj_transpose", ["matrix"]]]}]}, {"timestamp": 1651650652, "sha": "d537897a", "message": "feat(category_theory/simple): simple objects are indecomposable (#13882)\nRemarkably tedious.", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "indecomposable", ["category_theory"]], ["add", "theorem", "is_iso_inl_iff_id_eq_fst_comp_inl", ["category_theory", "limits", "biprod"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": [["add", "theorem", "eq_zero_of_src", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "eq_zero_of_tgt", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "iff_id_eq_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "iff_split_epi_eq_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "iff_split_mono_eq_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "of_epi", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "of_epi_eq_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "of_epi_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "of_mono", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "of_mono_eq_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "of_mono_zero", ["category_theory", "limits", "is_zero"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": [["add", "theorem", "is_iso_inl_iff_is_zero", ["category_theory", "biprod"]], ["add", "theorem", "indecomposable_of_simple", ["category_theory"]], ["add", "theorem", "not_is_zero", ["category_theory", "simple"]], ["add", "theorem", "of_iso", ["category_theory", "simple"]]]}]}, {"timestamp": 1651650651, "sha": "1afdaf96", "message": "feat(linear_algebra/trace): more general versions of `trace_mul_comm` and `trace_conj` (#13874)", "changes": [{"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": [["add", "theorem", "lcomp_apply'", ["linear_map"]], ["add", "theorem", "llcomp_apply'", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": [["add", "theorem", "comp_dual_tensor_hom", []]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "theorem", "trace_comp_comm'", ["linear_map"]], ["add", "theorem", "trace_comp_comm", ["linear_map"]], ["mod", "theorem", "trace_conj'", ["linear_map"]], ["add", "theorem", "trace_eq_contract_apply", ["linear_map"]]]}]}, {"timestamp": 1651650650, "sha": "517aa8b6", "message": "feat(topology/algebra/star): continuity of `star` (#13855)\nThis adds the obvious instances for `pi`, `prod`, `units`, `mul_opposite`, `real`, `complex`, `is_R_or_C`, and `matrix`.\nWe already had a `continuous_star` lemma, but it had stronger typeclass assumptions.\nThis resolves multiple TODO comments.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "theorem", "continuous_conj", ["complex"]]]}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["del", "theorem", "star", ["continuous"]], ["del", "theorem", "star", ["continuous_at"]], ["del", "theorem", "continuous_at_star", []], ["del", "theorem", "star", ["continuous_on"]], ["del", "theorem", "continuous_on_star", []], ["del", "theorem", "continuous_star", []], ["del", "theorem", "star", ["continuous_within_at"]], ["del", "theorem", "continuous_within_at_star", []], ["del", "theorem", "star", ["filter", "tendsto"]], ["del", "theorem", "tendsto_star", []]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "theorem", "continuous_conj", ["is_R_or_C"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/star.lean", "changes": [["add", "theorem", "star", ["continuous"]], ["add", "theorem", "star", ["continuous_at"]], ["add", "theorem", "continuous_at_star", []], ["add", "theorem", "star", ["continuous_on"]], ["add", "theorem", "continuous_on_star", []], ["add", "theorem", "star", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_star", []], ["add", "theorem", "star", ["filter", "tendsto"]], ["add", "theorem", "tendsto_star", []]]}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": [["add", "theorem", "matrix_conj_transpose", ["continuous"]], ["add", "theorem", "matrix_conj_transpose", ["has_sum"]], ["add", "theorem", "conj_transpose_tsum", ["matrix"]], ["add", "theorem", "matrix_conj_transpose", ["summable"]], ["add", "theorem", "summable_matrix_conj_transpose", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1651650649, "sha": "35c8980d", "message": "feat(analysis/asymptotics/specific_asymptotics): Cesaro averaging preserves convergence (#13825)", "changes": [{"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": [["add", "theorem", "sum_range", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_sum_range_of_tendsto_zero", ["asymptotics"]], ["add", "theorem", "cesaro", ["filter", "tendsto"]], ["add", "theorem", "cesaro_smul", ["filter", "tendsto"]]]}]}, {"timestamp": 1651650648, "sha": "6e003306", "message": "feat(algebra/squarefree): relate squarefree on naturals to factorization (#13816)\nAlso moves `nat.two_le_iff` higher up the hierarchy since it's an elementary lemma and give it a more appropriate type.\nThe lemma `squarefree_iff_prime_sq_not_dvd` has been deleted because it's a duplicate of a lemma which is already earlier in the same file.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "ext_iff", ["nat", "squarefree"]], ["add", "theorem", "factorization_le_one", ["nat", "squarefree"]], ["add", "theorem", "squarefree_and_prime_pow_iff_prime", ["nat"]], ["add", "theorem", "squarefree_iff_factorization_le_one", ["nat"]], ["del", "theorem", "squarefree_iff_prime_sq_not_dvd", ["nat"]], ["add", "theorem", "squarefree_of_factorization_le_one", ["nat"]], ["add", "theorem", "squarefree_pow_iff", ["nat"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "two_le_iff", ["nat"]]]}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "dvd_of_factorization_pos", ["nat"]], ["add", "theorem", "dvd_iff_one_le_factorization", ["nat", "prime"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "two_le_iff", ["nat"]]]}]}, {"timestamp": 1651650647, "sha": "ba4bf545", "message": "feat(set_theory/game/pgame): Add more congr lemmas (#13808)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "add_congr_left", ["pgame"]], ["add", "theorem", "add_congr_right", ["pgame"]], ["mod", "theorem", "equiv_refl", ["pgame"]], ["add", "theorem", "equiv_rfl", ["pgame"]], ["add", "theorem", "sub_congr_left", ["pgame"]], ["add", "theorem", "sub_congr_right", ["pgame"]]]}]}, {"timestamp": 1651650646, "sha": "85657f1b", "message": "feat(algebra/category/FinVect): has finite limits (#13793)", "changes": [{"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": [["add", "def", "of", ["FinVect"]]]}, {"oldPath": null, "newPath": "src/algebra/category/FinVect/limits.lean", "changes": [["add", "def", "forget₂_creates_limit", ["FinVect"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/products.lean", "changes": [["add", "theorem", "pi_iso_pi_hom_ker_subtype", ["Module"]], ["add", "theorem", "pi_iso_pi_inv_kernel_ι", ["Module"]], ["add", "def", "product_cone", ["Module"]], ["add", "def", "product_cone_is_limit", ["Module"]]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": [["add", "def", "colimit_cocone_of_coequalizer_and_coproduct", ["category_theory", "limits"]], ["add", "def", "colimit_quotient_coproduct", ["category_theory", "limits"]], ["add", "def", "limit_cone_of_equalizer_and_product", ["category_theory", "limits"]], ["add", "def", "limit_subobject_product", ["category_theory", "limits"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1651650645, "sha": "e3d38edb", "message": "feat(algebra/hom/non_unital_alg): some constructions for `prod` (#13785)", "changes": [{"oldPath": "src/algebra/hom/non_unital_alg.lean", "newPath": "src/algebra/hom/non_unital_alg.lean", "changes": [["add", "theorem", "coe_inl", ["non_unital_alg_hom"]], ["add", "theorem", "coe_inr", ["non_unital_alg_hom"]], ["add", "theorem", "coe_prod", ["non_unital_alg_hom"]], ["add", "def", "fst", ["non_unital_alg_hom"]], ["add", "theorem", "fst_prod", ["non_unital_alg_hom"]], ["add", "def", "inl", ["non_unital_alg_hom"]], ["add", "theorem", "inl_apply", ["non_unital_alg_hom"]], ["add", "def", "inr", ["non_unital_alg_hom"]], ["add", "theorem", "inr_apply", ["non_unital_alg_hom"]], ["add", "def", "prod", ["non_unital_alg_hom"]], ["add", "def", "prod_equiv", ["non_unital_alg_hom"]], ["add", "theorem", "prod_fst_snd", ["non_unital_alg_hom"]], ["add", "def", "snd", ["non_unital_alg_hom"]], ["add", "theorem", "snd_prod", ["non_unital_alg_hom"]]]}]}, {"timestamp": 1651650644, "sha": "9015d2ad", "message": "refactor(set_theory/game/pgame): Redefine `subsequent` (#13752)\nWe redefine `subsequent` as `trans_gen is_option`. This gives a much nicer induction principle than the previous one, and allows us to immediately prove well-foundedness.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "theorem", "left_move", ["pgame", "subsequent"]], ["add", "theorem", "mk_left", ["pgame", "subsequent"]], ["add", "theorem", "mk_right", ["pgame", "subsequent"]], ["add", "theorem", "move_left", ["pgame", "subsequent"]], ["add", "theorem", "move_right", ["pgame", "subsequent"]], ["del", "theorem", "right_move", ["pgame", "subsequent"]], ["add", "theorem", "trans", ["pgame", "subsequent"]], ["add", "def", "subsequent", ["pgame"]], ["del", "inductive", "subsequent", ["pgame"]], ["mod", "theorem", "wf_subsequent", ["pgame"]]]}]}, {"timestamp": 1651650643, "sha": "b337b921", "message": "feat(model_theory/satisfiability): A union of a directed family of satisfiable theories is satisfiable (#13750)\nProves `first_order.language.Theory.is_satisfiable_directed_union_iff` - the union of a directed family of theories is satisfiable if and only if all of the theories in the family are satisfiable.", "changes": [{"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "theorem", "is_satisfiable_directed_union_iff", ["first_order", "language", "Theory"]]]}]}, {"timestamp": 1651650640, "sha": "51d81675", "message": "feat(model_theory/elementary_maps): The elementary diagram of a structure (#13724)\nDefines the elementary diagram of a structure - the theory consisting of all sentences with parameters it satisfies.\nDefines the canonical elementary embedding of a structure into any model of its elementary diagram.", "changes": [{"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["add", "def", "elementary_diagram", ["first_order", "language"]], ["add", "def", "of_models_elementary_diagram", ["first_order", "language", "elementary_embedding"]]]}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": []}]}, {"timestamp": 1651650639, "sha": "319d5028", "message": "refactor(linear_algebra/*): more generalisations (#13668)\nMany further generalisations from `field` to `division_ring` in the linear algebra library.\nThis PR changes some proofs; it's not just relaxing hypotheses.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "finsupp_unique", ["equiv"]], ["mod", "theorem", "unique_ext_iff", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "finrank_map_subtype_eq", ["finite_dimensional"]]]}]}, {"timestamp": 1651650638, "sha": "36c5faac", "message": "feat(set_theory/game/pgame): Tweak `pgame.mul` API (#13651)\nWe modify the API for `pgame.mul` in two ways:\n- `left_moves_mul` and `right_moves_mul` are turned from type equivalences into type equalities.\n- The former equivalences are prefixed with `to_` and inverted.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["add", "theorem", "left_moves_mul", ["pgame"]], ["del", "def", "left_moves_mul", ["pgame"]], ["add", "theorem", "right_moves_mul", ["pgame"]], ["del", "def", "right_moves_mul", ["pgame"]], ["add", "def", "to_left_moves_mul", ["pgame"]], ["add", "def", "to_right_moves_mul", ["pgame"]]]}]}, {"timestamp": 1651650637, "sha": "bd23639b", "message": "feat(topology/bornology): add more instances (#13621)", "changes": [{"oldPath": null, "newPath": "src/topology/bornology/constructions.lean", "changes": [["add", "theorem", "cobounded_pi", ["bornology"]], ["add", "theorem", "cobounded_prod", ["bornology"]], ["add", "theorem", "forall_is_bounded_image_eval_iff", ["bornology"]], ["add", "def", "induced", ["bornology"]], ["add", "theorem", "fst_of_prod", ["bornology", "is_bounded"]], ["add", "theorem", "pi", ["bornology", "is_bounded"]], ["add", "theorem", "prod", ["bornology", "is_bounded"]], ["add", "theorem", "snd_of_prod", ["bornology", "is_bounded"]], ["add", "theorem", "is_bounded_image_fst_and_snd", ["bornology"]], ["add", "theorem", "is_bounded_image_subtype_coe", ["bornology"]], ["add", "theorem", "is_bounded_induced", ["bornology"]], ["add", "theorem", "is_bounded_pi", ["bornology"]], ["add", "theorem", "is_bounded_pi_of_nonempty", ["bornology"]], ["add", "theorem", "is_bounded_prod", ["bornology"]], ["add", "theorem", "is_bounded_prod_of_nonempty", ["bornology"]], ["add", "theorem", "is_bounded_prod_self", ["bornology"]], ["add", "theorem", "bounded_space_coe_set_iff", []], ["add", "theorem", "bounded_space_induced_iff", []], ["add", "theorem", "bounded_space_subtype_iff", []]]}]}, {"timestamp": 1651650635, "sha": "2402b4d8", "message": "feat(set_theory/game/pgame): Tweak `pgame.neg` API (#13617)\nWe modify the API for `pgame.neg` in various ways: \n- `left_moves_neg` and `right_moves_neg` are turned from type equivalences into type equalities.\n- The former equivalences are prefixed with `to_` and inverted.\nWe also golf a few theorems.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "left_moves_neg", ["pgame"]], ["del", "def", "left_moves_neg", ["pgame"]], ["del", "theorem", "move_left_left_moves_neg_symm", ["pgame"]], ["add", "theorem", "move_left_neg'", ["pgame"]], ["add", "theorem", "move_left_neg", ["pgame"]], ["add", "theorem", "move_left_neg_symm'", ["pgame"]], ["add", "theorem", "move_left_neg_symm", ["pgame"]], ["del", "theorem", "move_left_right_moves_neg", ["pgame"]], ["del", "theorem", "move_right_left_moves_neg", ["pgame"]], ["add", "theorem", "move_right_neg'", ["pgame"]], ["add", "theorem", "move_right_neg", ["pgame"]], ["add", "theorem", "move_right_neg_symm'", ["pgame"]], ["add", "theorem", "move_right_neg_symm", ["pgame"]], ["del", "theorem", "move_right_right_moves_neg_symm", ["pgame"]], ["add", "theorem", "right_moves_neg", ["pgame"]], ["del", "def", "right_moves_neg", ["pgame"]], ["add", "def", "to_left_moves_neg", ["pgame"]], ["add", "def", "to_right_moves_neg", ["pgame"]]]}]}, {"timestamp": 1651646558, "sha": "58de2a0a", "message": "chore(analysis): use nnnorm notation everywhere (#13930)\nThis was done with a series of ad-hoc regular expressions, then cleaned up by hand.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": [["mod", "theorem", "radius_eq_liminf", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": [["mod", "def", "mk_normed_group_hom'", ["add_monoid_hom"]]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": [["mod", "theorem", "map_smul", ["enorm"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/indicator_function.lean", "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["mod", "theorem", "nnnorm_map", ["linear_isometry"]], ["mod", "theorem", "nnnorm_map", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "theorem", "le_of_op_nnnorm_le", ["continuous_multilinear_map"]], ["mod", "theorem", "le_op_nnnorm", ["continuous_multilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "nnnorm", ["measurable"]], ["mod", "theorem", "measurable_ennnorm", []]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "lintegral_nnnorm_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}]}, {"timestamp": 1651646556, "sha": "6f3426cf", "message": "chore(number_theory/legendre_symbol/quadratic_char): golf some proofs (#13926)", "changes": [{"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": []}]}, {"timestamp": 1651646555, "sha": "171825a9", "message": "chore(algebra/order/floor): missing simp lemmas on floor of nat and int (#13904)", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "ceil_int", ["int"]], ["add", "theorem", "floor_int", ["int"]], ["add", "theorem", "fract_int", ["int"]], ["add", "theorem", "ceil_int", ["nat"]], ["add", "theorem", "ceil_nat", ["nat"]], ["add", "theorem", "floor_int", ["nat"]], ["add", "theorem", "floor_nat", ["nat"]]]}]}, {"timestamp": 1651643493, "sha": "4d0b6301", "message": "feat(category_theory/bicategory/coherence_tactic): coherence tactic for bicategories (#13417)\nThis PR extends the coherence tactic for monoidal categories #13125 to bicategories. The setup is the same as for monoidal case except for the following : we normalize 2-morphisms before running the coherence tactic. This normalization is achieved by the set of simp lemmas in `whisker_simps` defined in `coherence_tactic.lean`.\nAs a test of the tactic in the real world, I have proved several properties of adjunction in bicategories in #13418. Unfortunately some proofs cause timeout, so it seems that we need to speed up the coherence tactic in the future.", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/coherence_tactic.lean", "changes": [["add", "def", "bicategorical_comp", ["category_theory", "bicategory"]], ["add", "theorem", "bicategorical_comp_refl", ["category_theory", "bicategory"]], ["add", "def", "bicategorical_iso", ["category_theory", "bicategory"]], ["add", "def", "bicategorical_iso_comp", ["category_theory", "bicategory"]], ["add", "theorem", "assoc_lift_hom₂", ["tactic", "bicategory", "coherence"]]]}, {"oldPath": "src/category_theory/monoidal/coherence.lean", "newPath": "src/category_theory/monoidal/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/types.lean", "newPath": "src/category_theory/monoidal/internal/types.lean", "changes": []}, {"oldPath": "test/coherence.lean", "newPath": "test/coherence.lean", "changes": []}]}, {"timestamp": 1651641396, "sha": "c1f329df", "message": "feat(data/zmod/quotient): The quotient `/stab(b)` is cyclic of order `minimal_period ((+ᵥ) a) b` (#13722)\nThis PR adds an isomorphism stating that the quotient `/stab(b)` is cyclic of order `minimal_period ((+ᵥ) a) b`.\nThere is also a multiplicative version, but it is easily proved from the additive version, so I'll PR the multiplicative version afterwards.", "changes": [{"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": [["add", "theorem", "zmultiples_quotient_stabilizer_equiv_symm_apply", ["add_action"]]]}]}, {"timestamp": 1651638031, "sha": "a2a873fc", "message": "chore(scripts): update nolints.txt (#13932)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1651626480, "sha": "dd584384", "message": "feat(set_theory/game/short): Birthday of short games (#13875)\nWe prove that a short game has a finite birthday. We also clean up the file somewhat.", "changes": [{"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": [["add", "def", "of_is_empty", ["pgame", "short"]], ["add", "theorem", "short_birthday", ["pgame"]], ["del", "def", "short_of_equiv_empty", ["pgame"]]]}]}, {"timestamp": 1651623207, "sha": "fc3de197", "message": "feat(ring_theory/ideal/local_ring): generalize lemmas to semirings (#13471)\nWhat is essentially new is the proof of `local_ring.of_surjective` and `local_ring.is_unit_or_is_unit_of_is_unit_add`.\n- I changed the definition of local ring to `local_ring.of_is_unit_or_is_unit_of_add_one`, which is reminiscent of the definition before the recent change in #13341. The equivalence of the previous definition is essentially given by `local_ring.is_unit_or_is_unit_of_is_unit_add`. The choice of the definition is insignificant here because they are all equivalent, but I think the choice here is better for the default constructor because this condition is \"weaker\" than e.g. `local_ring.of_non_units_add` in some sense.\n- The proof of `local_ring.of_surjective` needs `[is_local_ring_hom f]`, which was not necessary for commutative rings in the previous proof. So the new version here is not a genuine generalization of the previous version. The previous version was renamed to `local_ring.of_surjective'`.", "changes": [{"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["add", "theorem", "is_unit_or_is_unit_of_is_unit_add", ["local_ring"]], ["add", "theorem", "nonunits_add", ["local_ring"]], ["add", "theorem", "of_is_unit_or_is_unit_of_is_unit_add", ["local_ring"]], ["add", "theorem", "of_nonunits_add", ["local_ring"]], ["add", "theorem", "of_surjective'", ["local_ring"]], ["mod", "theorem", "of_surjective", ["local_ring"]]]}, {"oldPath": "src/ring_theory/localization/at_prime.lean", "newPath": "src/ring_theory/localization/at_prime.lean", "changes": []}]}, {"timestamp": 1651621058, "sha": "6c0580a2", "message": "fix(.docker/*): update elan URL (#13928)\nThese are hopefully the last occurrences of the URL that was breaking things earlier today. cf. #13906", "changes": [{"oldPath": ".docker/debian/lean/Dockerfile", "newPath": ".docker/debian/lean/Dockerfile", "changes": []}, {"oldPath": ".docker/gitpod/mathlib/Dockerfile", "newPath": ".docker/gitpod/mathlib/Dockerfile", "changes": []}]}, {"timestamp": 1651617245, "sha": "fd651597", "message": "feat(topology/metric_space/basic): golf, avoid unfold (#13923)\n* Don't use `unfold` in `nnreal.pseudo_metric_space`.\n* Golf some proofs.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1651615047, "sha": "de07131e", "message": "feat(measure_theory/integral/torus_integral): torus integral and its properties (#12892)\nDefine a generalized torus map and prove some basic properties.\nDefine the torus integral and the integrability of functions on a generalized torus, and prove lemmas about them.", "changes": [{"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": [["add", "theorem", "circle_integral_def_Icc", []], ["add", "theorem", "circle_map_zero", []]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/torus_integral.lean", "changes": [["add", "theorem", "norm_torus_integral_le_of_norm_le_const", []], ["add", "theorem", "function_integrable", ["torus_integrable"]], ["add", "theorem", "torus_integrable_const", ["torus_integrable"]], ["add", "theorem", "torus_integrable_zero_radius", ["torus_integrable"]], ["add", "def", "torus_integrable", []], ["add", "def", "torus_integral", []], ["add", "theorem", "torus_integral_add", []], ["add", "theorem", "torus_integral_const_mul", []], ["add", "theorem", "torus_integral_dim0", []], ["add", "theorem", "torus_integral_dim1", []], ["add", "theorem", "torus_integral_neg", []], ["add", "theorem", "torus_integral_radius_zero", []], ["add", "theorem", "torus_integral_smul", []], ["add", "theorem", "torus_integral_sub", []], ["add", "theorem", "torus_integral_succ", []], ["add", "theorem", "torus_integral_succ_above", []], ["add", "def", "torus_map", []], ["add", "theorem", "torus_map_eq_center_iff", []], ["add", "theorem", "torus_map_sub_center", []], ["add", "theorem", "torus_map_zero_radius", []]]}]}, {"timestamp": 1651609998, "sha": "9c0dfcd8", "message": "doc(order/countable_dense_linear_order): Fix minor mistake (#13921)\nI wrongfully removed some instances of the word \"linear\" in #12928. This is in fact used as a hypothesis.", "changes": [{"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": []}]}, {"timestamp": 1651605531, "sha": "5cfb8dbc", "message": "refactor(ring_theory/jacobson_ideal): generalize lemmas to non-commutative rings (#13865)\nThe main change here is that the order of multiplication has been adjusted slightly in `mem_jacobson_iff`and `exists_mul_sub_mem_of_sub_one_mem_jacobson`. In the commutative case this doesn't matter anyway.\nAll the other changes are just moving lemmas between sections, the statements of no lemmas other than those two have been changed. No lemmas have been added or removed.\nThe lemmas about `is_unit` and quotients don't generalize as easily, so I've not attempted to touch those; that would require some mathematical insight, which is out of scope for this PR!", "changes": [{"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["mod", "theorem", "is_primary_of_is_maximal_radical", ["ideal"]], ["mod", "theorem", "mem_jacobson_iff", ["ideal"]]]}, {"oldPath": "src/ring_theory/nakayama.lean", "newPath": "src/ring_theory/nakayama.lean", "changes": []}]}, {"timestamp": 1651601994, "sha": "16157f26", "message": "chore(topology/continuous_function/bounded): generalize from `normed_*` to `semi_normed_*` (#13915)\nEvery single lemma in this file generalized, apart from the ones that transferred a `normed_*` instance which obviously need the stronger assumption.\n`dist_zero_of_empty` was the only lemma that actually needed reproving from scratch, all the other affected proofs are just split between two instances.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["mod", "theorem", "arzela_ascoli", ["bounded_continuous_function"]], ["mod", "theorem", "equicontinuous_of_continuity_modulus", ["bounded_continuous_function"]], ["mod", "def", "of_normed_group", ["bounded_continuous_function"]], ["mod", "structure", "bounded_continuous_function", []]]}]}, {"timestamp": 1651601993, "sha": "bd1d9359", "message": "feat(number_theory/legendre_symbol/): add some lemmas (#13831)\nThis adds essentially two lemmas on quadratic characters:\n* `quadratic_char_neg_one_iff_not_is_square`, which says that the quadratic character takes the value `-1` exactly on non-squares, and\n* `quadratic_char_number_of_sqrts`. which says that the number of square roots of `a : F` is `quadratic_char F a + 1`.\nIt also adds the corresponding statements, `legendre_sym_eq_neg_one_iff` and `legendre_sym_number_of_sqrts`, for the Legendre symbol.", "changes": [{"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["add", "theorem", "quadratic_char_card_sqrts", ["char"]], ["add", "theorem", "quadratic_char_eq_neg_one_iff_not_one", ["char"]], ["add", "theorem", "quadratic_char_neg_one_iff_not_is_square", ["char"]], ["add", "theorem", "neg_ne_self_of_char_ne_two", ["finite_field"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["add", "theorem", "legendre_sym_card_sqrts", ["zmod"]], ["add", "theorem", "legendre_sym_eq_neg_one_iff", ["zmod"]], ["add", "theorem", "legendre_sym_eq_neg_one_iff_not_one", ["zmod"]]]}]}, {"timestamp": 1651595341, "sha": "7d287537", "message": "chore(normed_space/weak_dual): generalize `normed_group` to `semi_normed_group` (#13914)\nThis almost halves the time this file takes to build, and is more general too.", "changes": [{"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}]}, {"timestamp": 1651595340, "sha": "86887539", "message": "feat(set_theory/game/basic): Inline instances (#13813)\nWe also add a few missing instances.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["del", "def", "add", ["game"]], ["del", "theorem", "add_assoc", ["game"]], ["del", "theorem", "add_comm", ["game"]], ["del", "theorem", "add_left_neg", ["game"]], ["del", "theorem", "add_zero", ["game"]], ["del", "def", "game_partial_order", ["game"]], ["del", "def", "le", ["game"]], ["del", "def", "lt", ["game"]], ["del", "def", "neg", ["game"]], ["mod", "theorem", "not_le", ["game"]], ["add", "theorem", "not_lt", ["game"]], ["add", "def", "ordered_add_comm_group", ["game"]], ["del", "def", "ordered_add_comm_group_game", ["game"]], ["add", "def", "partial_order", ["game"]], ["del", "theorem", "zero_add", ["game"]], ["del", "def", "mul", ["pgame"]]]}]}, {"timestamp": 1651595339, "sha": "5c433d03", "message": "feat(algebra/big_operators/basic): `prod_list_count` and `prod_list_count_of_subset` (#13370)\nAdd \n`prod_list_count (l : list α) : l.prod = ∏ x in l.to_finset, (x ^ (l.count x))`\nand\n`prod_list_count_of_subset (l : list α) (s : finset α) (hs : l.to_finset ⊆ s) : l.prod = ∏ x in s, x ^ (l.count x)`\nas counterparts of `prod_multiset_count` and `prod_multiset_count_of_subset` (whose proofs are then golfed using the new lemmas).", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_list_count", ["finset"]], ["add", "theorem", "prod_list_count_of_subset", ["finset"]], ["add", "theorem", "prod_list_map_count", ["finset"]]]}]}, {"timestamp": 1651588171, "sha": "40b59523", "message": "doc(analysis/matrix): fix broken LaTeX (#13910)", "changes": [{"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": []}]}, {"timestamp": 1651588170, "sha": "1c4d2b7c", "message": "feat(linear_algebra/matrix/trace): add `trace_conj_transpose` (#13888)", "changes": [{"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": [["add", "theorem", "trace_conj_transpose", ["matrix"]]]}]}, {"timestamp": 1651588169, "sha": "0f8d7a99", "message": "feat(order/omega_complete_partial_order): make `continuous_hom.prod.apply` continuous (#13833)\nPrevious it was defined as `apply : (α →𝒄 β) × α →o β` and the comment\nsaid that it would make sense to define it as a continuous function, but\nwe need an instance for `α →𝒄 β` first. But then let’s just define that\ninstance first, and then define `apply : (α →𝒄 β) × α →𝒄 β` as you would\nexpect.\nAlso rephrases `lemma ωSup_ωSup` differently now that `apply` is\ncontinuous.", "changes": [{"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "def", "apply", ["omega_complete_partial_order", "continuous_hom", "prod"]], ["add", "theorem", "ωSup_apply_ωSup", ["omega_complete_partial_order", "continuous_hom"]], ["del", "theorem", "ωSup_ωSup", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "ωSup_zip", ["prod"]]]}]}, {"timestamp": 1651588168, "sha": "475a5334", "message": "feat(topology/algebra/module/basic): A continuous linear functional is open (#13829)", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "theorem", "exists_ne_zero", ["continuous_linear_map"]]]}]}, {"timestamp": 1651588167, "sha": "4cea0a8f", "message": "move(data/pi/*): Group `pi` files (#13826)\nMove `data.pi` to `data.pi.algebra` and `order.pilex` to `data.pi.lex`.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": []}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi/algebra.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/data/pi/lex.lean", "changes": []}]}, {"timestamp": 1651588165, "sha": "8a5b4a7c", "message": "feat(analysis/special_functions/complex/arg): lemmas about `arg z` and `±(π / 2)` (#13821)", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "abs_arg_le_pi_div_two_iff", ["complex"]], ["add", "theorem", "arg_le_pi_div_two_iff", ["complex"]], ["add", "theorem", "neg_pi_div_two_le_arg_iff", ["complex"]]]}]}, {"timestamp": 1651588164, "sha": "2f38ccb4", "message": "chore(data/matrix/basic): add lemmas about powers of matrices (#13815)\nShows that:\n* natural powers commute with `transpose`, `conj_transpose`, `diagonal`, `block_diagonal`, and `block_diagonal'`.\n* integer powers commute with `transpose`, and `conj_transpose`.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "conj_transpose_list_prod", ["matrix"]], ["add", "theorem", "conj_transpose_pow", ["matrix"]], ["mod", "def", "conj_transpose_ring_equiv", ["matrix"]], ["add", "theorem", "diagonal_pow", ["matrix"]], ["add", "theorem", "map_injective", ["matrix"]], ["add", "theorem", "transpose_pow", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "block_diagonal'_pow", ["matrix"]], ["add", "theorem", "block_diagonal_pow", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": [["add", "theorem", "conj_transpose_zpow", ["matrix"]], ["add", "theorem", "transpose_zpow", ["matrix"]]]}]}, {"timestamp": 1651588164, "sha": "36b5341d", "message": "feat(ring_theory/polynomial/basic): reduce assumptions, golf (#13800)\nThere is some reorder, so the diff is a bit large. Sorry for that.", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "theorem", "is_fg_degree_le", ["ideal"]], ["mod", "def", "degree_lt_equiv", ["polynomial"]], ["mod", "theorem", "map_restriction", ["polynomial"]], ["mod", "theorem", "geom_sum'", ["polynomial", "monic"]], ["mod", "theorem", "geom_sum", ["polynomial", "monic"]], ["mod", "theorem", "monic_geom_sum_X", ["polynomial"]]]}]}, {"timestamp": 1651588162, "sha": "6d2788c2", "message": "feat(analysis/calculus/cont_diff): cont_diff_succ_iff_fderiv_apply (#13797)\n* Prove that a map is `C^(n+1)` iff it is differentiable and all its directional derivatives in all points are `C^n`. \n* Also some supporting lemmas about `continuous_linear_equiv`.\n* We only manage to prove this when the domain is finite dimensional.\n* Prove one direction of `cont_diff_on_succ_iff_fderiv_within` with fewer assumptions\n* From the sphere eversion project\nCo-authored by: Patrick Massot [patrick.massot@u-psud.fr](mailto:patrick.massot@u-psud.fr)\nCo-authored by: Oliver Nash [github@olivernash.org](mailto:github@olivernash.org)", "changes": [{"oldPath": "src/algebra/module/equiv.lean", "newPath": "src/algebra/module/equiv.lean", "changes": [["mod", "theorem", "symm_trans_apply", ["linear_equiv"]], ["add", "theorem", "trans_symm", ["linear_equiv"]]]}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "cont_diff_clm_apply", []], ["add", "theorem", "cont_diff_on_clm_apply", []], ["add", "theorem", "cont_diff_on_succ_iff_fderiv_apply", []], ["add", "theorem", "cont_diff_on_succ_of_fderiv_apply", []], ["add", "theorem", "cont_diff_on_succ_of_fderiv_within", []], ["add", "theorem", "cont_diff_succ_iff_fderiv_apply", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "continuous_clm_apply", []], ["add", "def", "pi_ring", ["continuous_linear_equiv"]], ["add", "theorem", "continuous_on_clm_apply", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "arrow_congr", ["continuous_linear_equiv"]], ["add", "def", "arrow_congrSL", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1651588161, "sha": "234b3df2", "message": "feat(analysis/normed_space): lemmas about continuous bilinear maps (#13522)\n* Define `continuous_linear_map.map_sub₂` and friends, similar to the lemmas for `linear_map`. \n* Rename `continuous_linear_map.map_add₂` to `continuous_linear_map.map_add_add`\n* Two comments refer to `continuous.comp₂`, which will be added in #13423 (but there is otherwise no dependency on this PR).\n* Define `precompR` and `precompL`, which will be used to compute the derivative of a convolution.\n* From the sphere eversion project\n* Required for convolutions", "changes": [{"oldPath": "src/analysis/analytic/linear.lean", "newPath": "src/analysis/analytic/linear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "continuous₂", ["continuous_linear_map"]], ["add", "theorem", "map_add₂", ["continuous_linear_map"]], ["add", "theorem", "map_neg₂", ["continuous_linear_map"]], ["add", "theorem", "map_smul₂", ["continuous_linear_map"]], ["add", "theorem", "map_smulₛₗ₂", ["continuous_linear_map"]], ["add", "theorem", "map_sub₂", ["continuous_linear_map"]], ["add", "theorem", "map_zero₂", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "dist_le_op_norm", ["continuous_linear_map"]], ["add", "theorem", "map_add_add", ["continuous_linear_map"]], ["del", "theorem", "map_add₂", ["continuous_linear_map"]], ["add", "theorem", "nndist_le_op_nnnorm", ["continuous_linear_map"]], ["add", "def", "precompL", ["continuous_linear_map"]], ["add", "def", "precompR", ["continuous_linear_map"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "ae_strongly_measurable_comp₂", ["measure_theory", "ae_strongly_measurable"]]]}]}, {"timestamp": 1651580337, "sha": "3b971a7b", "message": "feat(data/zmod/basic): Add `zmod.cast_sub_one` (#13889)\nThis PR adds `zmod.cast_sub_one`, an analog of `fin.coe_sub_one`. Unfortunately, the proof is a bit long. But maybe it can be golfed?", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_sub_one", ["zmod"]]]}]}, {"timestamp": 1651580336, "sha": "78c86e1d", "message": "chore(data/nat/totient): golf three lemmas (#13886)\nGolf the proofs of `totient_le`, `totient_lt`, and `totient_pos`", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}]}, {"timestamp": 1651580335, "sha": "9f818ce0", "message": "feat(set_theory/ordinal_basic): `o.out.α` is equivalent to the ordinals below `o` (#13876)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1651580334, "sha": "82b9c42f", "message": "feat(set_theory/game/nim): Mark many lemmas as `simp` (#13844)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["del", "theorem", "equiv_iff_grundy_value_eq", ["pgame"]], ["mod", "theorem", "equiv_nim_grundy_value", ["pgame"]], ["del", "theorem", "equiv_nim_iff_grundy_value_eq", ["pgame"]], ["del", "theorem", "equiv_zero_iff_grundy_value", ["pgame"]], ["mod", "theorem", "grundy_value_def", ["pgame"]], ["add", "theorem", "grundy_value_eq_iff_equiv", ["pgame"]], ["add", "theorem", "grundy_value_eq_iff_equiv_nim", ["pgame"]], ["add", "theorem", "grundy_value_iff_equiv_zero", ["pgame"]], ["mod", "theorem", "grundy_value_nim_add_nim", ["pgame"]], ["mod", "theorem", "grundy_value_zero", ["pgame"]], ["mod", "theorem", "equiv_iff_eq", ["pgame", "nim"]], ["mod", "theorem", "sum_first_loses_iff_eq", ["pgame", "nim"]], ["mod", "theorem", "sum_first_wins_iff_neq", ["pgame", "nim"]], ["mod", "theorem", "zero_first_loses", ["pgame", "nim"]]]}]}, {"timestamp": 1651580333, "sha": "e104992d", "message": "chore(order/*): Replace total partial orders by linear orders (#13839)\n`partial_order α` + `is_total α (≤)` has no more theorems than `linear_order α` but is nonetheless used in some places. This replaces those uses by `linear_order α` or `complete_linear_order α`. Also make implicit one argument of `finset.lt_inf'_iff` and friends.", "changes": [{"oldPath": "src/analysis/locally_convex/weak_dual.lean", "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "comp_inf_eq_inf_comp_of_is_total", ["finset"]], ["mod", "theorem", "comp_sup_eq_sup_comp_of_is_total", ["finset"]], ["mod", "theorem", "exists_mem_eq_inf'", ["finset"]], ["mod", "theorem", "exists_mem_eq_inf", ["finset"]], ["mod", "theorem", "exists_mem_eq_sup'", ["finset"]], ["mod", "theorem", "exists_mem_eq_sup", ["finset"]], ["mod", "theorem", "inf'_le_iff", ["finset"]], ["mod", "theorem", "inf'_lt_iff", ["finset"]], ["del", "theorem", "inf_le_iff", ["finset"]], ["del", "theorem", "inf_lt_iff", ["finset"]], ["del", "theorem", "le_inf'_iff", ["finset"]], ["mod", "theorem", "le_sup'_iff", ["finset"]], ["del", "theorem", "le_sup_iff", ["finset"]], ["mod", "theorem", "lt_inf'_iff", ["finset"]], ["del", "theorem", "lt_inf_iff", ["finset"]], ["mod", "theorem", "lt_sup'_iff", ["finset"]], ["del", "theorem", "lt_sup_iff", ["finset"]], ["mod", "theorem", "sup'_lt_iff", ["finset"]], ["del", "theorem", "sup_lt_iff", ["finset"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Icc_bot_top", ["set"]], ["mod", "theorem", "Ici_top", ["set"]], ["mod", "theorem", "Iic_bot", ["set"]], ["mod", "theorem", "Iio_inter_Iio", ["set"]], ["mod", "theorem", "Ioc_inter_Ioi", ["set"]], ["mod", "theorem", "Ioi_inter_Ioi", ["set"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["mod", "theorem", "map_inf", ["antitone"]], ["mod", "theorem", "map_sup", ["antitone"]], ["mod", "theorem", "inf_eq_min", []], ["mod", "theorem", "inf_ind", []], ["mod", "theorem", "inf_le_iff", []], ["add", "theorem", "inf_lt_iff", []], ["mod", "theorem", "le_sup_iff", []], ["mod", "theorem", "lt_inf_iff", []], ["mod", "theorem", "lt_sup_iff", []], ["mod", "theorem", "map_inf", ["monotone"]], ["mod", "theorem", "map_sup", ["monotone"]], ["mod", "theorem", "sup_eq_max", []], ["mod", "theorem", "sup_ind", []], ["mod", "theorem", "sup_lt_iff", []]]}, {"oldPath": "src/order/min_max.lean", "newPath": "src/order/min_max.lean", "changes": [["mod", "theorem", "le_max_iff", []], ["mod", "theorem", "lt_max_iff", []], ["mod", "theorem", "lt_min_iff", []], ["mod", "theorem", "max_lt_iff", []], ["add", "theorem", "max_lt_max_left_iff", []], ["add", "theorem", "max_lt_max_right_iff", []], ["mod", "theorem", "min_le_iff", []], ["mod", "theorem", "min_lt_iff", []], ["add", "theorem", "min_lt_min_left_iff", []], ["add", "theorem", "min_lt_min_right_iff", []]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "inf_continuous'", ["complete_lattice"]], ["mod", "theorem", "inf_continuous", ["complete_lattice"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["mod", "theorem", "nhds_bot_basis", []], ["mod", "theorem", "nhds_bot_basis_Iic", []], ["mod", "theorem", "nhds_top_basis", []], ["mod", "theorem", "nhds_top_basis_Ici", []]]}]}, {"timestamp": 1651580332, "sha": "f6cb9be2", "message": "fix(data/complex/basic): make complex addition computable again (#13837)\nThis was fixed once before in #8166 (5f2358c43b769b334f3986a96565e606fe5bccec), but a new noncomputable shortcut appears if your file has more imports.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}]}, {"timestamp": 1651580331, "sha": "b07c0f70", "message": "feat(set_theory/game/basic): Add `le_rfl` on games (#13814)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["mod", "theorem", "le_refl", ["game"]], ["add", "theorem", "le_rfl", ["game"]]]}]}, {"timestamp": 1651580330, "sha": "72816f95", "message": "feat(data/real/nnreal): add `nnreal.forall` and `nnreal.exists` (#13774)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1651580329, "sha": "7931ba44", "message": "feat(order/conditionally_complete_lattice): Simp theorems (#13756)\nWe remove `supr_unit` and `infi_unit` since, thanks to #13741, they can be proven by `simp`.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "infi_unique", []], ["del", "theorem", "infi_unit", []], ["mod", "theorem", "supr_unique", []], ["del", "theorem", "supr_unit", []]]}]}, {"timestamp": 1651578208, "sha": "65cad418", "message": "chore(.github/workflows): use separate secret token for dependent issues (#13902)", "changes": [{"oldPath": ".github/workflows/dependent-issues.yml", "newPath": ".github/workflows/dependent-issues.yml", "changes": []}]}, {"timestamp": 1651575804, "sha": "1c392671", "message": "ci(elan): update dead repository URLs (#13906)\n`Kha/elan` is redirected by github to `leanprover/elan`, but seemingly with a cache that is delayed.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/install.20elan.20fails.20in.20CI/near/280981154)", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1651527421, "sha": "ca1551c2", "message": "feat(data/finset/n_ary): Binary image of finsets (#13718)\nDefine `finset.image₂`, the binary map of finsets. Golf `data.finset.pointwise` using it.", "changes": [{"oldPath": null, "newPath": "src/data/finset/n_ary.lean", "changes": [["add", "theorem", "card_image₂", ["finset"]], ["add", "theorem", "card_image₂_le", ["finset"]], ["add", "theorem", "coe_image₂", ["finset"]], ["add", "theorem", "forall_image₂_iff", ["finset"]], ["add", "theorem", "image_image₂", ["finset"]], ["add", "theorem", "image_image₂_antidistrib", ["finset"]], ["add", "theorem", "image_image₂_antidistrib_left", ["finset"]], ["add", "theorem", "image_image₂_antidistrib_right", ["finset"]], ["add", "theorem", "image_image₂_distrib", ["finset"]], ["add", "theorem", "image_image₂_distrib_left", ["finset"]], ["add", "theorem", "image_image₂_distrib_right", ["finset"]], ["add", "theorem", "image_image₂_right_anticomm", ["finset"]], ["add", "theorem", "image_image₂_right_comm", ["finset"]], ["add", "theorem", "image_subset_image₂_left", ["finset"]], ["add", "theorem", "image_subset_image₂_right", ["finset"]], ["add", "def", "image₂", ["finset"]], ["add", "theorem", "image₂_assoc", ["finset"]], ["add", "theorem", "image₂_comm", ["finset"]], ["add", "theorem", "image₂_congr'", ["finset"]], ["add", "theorem", "image₂_congr", ["finset"]], ["add", "theorem", "image₂_empty_left", ["finset"]], ["add", "theorem", "image₂_empty_right", ["finset"]], ["add", "theorem", "image₂_eq_empty_iff", ["finset"]], ["add", "theorem", "image₂_image_left", ["finset"]], ["add", "theorem", "image₂_image_left_anticomm", ["finset"]], ["add", "theorem", "image₂_image_left_comm", ["finset"]], ["add", "theorem", "image₂_image_right", ["finset"]], ["add", "theorem", "image₂_inter_subset_left", ["finset"]], ["add", "theorem", "image₂_inter_subset_right", ["finset"]], ["add", "theorem", "image₂_left", ["finset"]], ["add", "theorem", "image₂_left_comm", ["finset"]], ["add", "theorem", "image₂_nonempty_iff", ["finset"]], ["add", "theorem", "image₂_right", ["finset"]], ["add", "theorem", "image₂_right_comm", ["finset"]], ["add", "theorem", "image₂_singleton", ["finset"]], ["add", "theorem", "image₂_singleton_left", ["finset"]], ["add", "theorem", "image₂_singleton_right", ["finset"]], ["add", "theorem", "image₂_subset", ["finset"]], ["add", "theorem", "image₂_subset_iff", ["finset"]], ["add", "theorem", "image₂_subset_left", ["finset"]], ["add", "theorem", "image₂_subset_right", ["finset"]], ["add", "theorem", "image₂_swap", ["finset"]], ["add", "theorem", "image₂_union_left", ["finset"]], ["add", "theorem", "image₂_union_right", ["finset"]], ["add", "theorem", "mem_image₂", ["finset"]], ["add", "theorem", "mem_image₂_iff", ["finset"]], ["add", "theorem", "mem_image₂_of_mem", ["finset"]], ["add", "theorem", "image₂", ["finset", "nonempty"]], ["add", "theorem", "of_image₂_left", ["finset", "nonempty"]], ["add", "theorem", "of_image₂_right", ["finset", "nonempty"]], ["add", "theorem", "subset_image₂", ["finset"]]]}, {"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["mod", "theorem", "coe_div", ["finset"]], ["mod", "theorem", "coe_mul", ["finset"]], ["mod", "theorem", "coe_vsub", ["finset"]], ["mod", "theorem", "div_card_le", ["finset"]], ["mod", "theorem", "div_empty", ["finset"]], ["mod", "theorem", "div_mem_div", ["finset"]], ["mod", "theorem", "div_singleton", ["finset"]], ["mod", "theorem", "div_subset_div", ["finset"]], ["mod", "theorem", "empty_div", ["finset"]], ["mod", "theorem", "empty_mul", ["finset"]], ["mod", "theorem", "empty_smul", ["finset"]], ["mod", "theorem", "empty_vsub", ["finset"]], ["mod", "theorem", "image_vsub_product", ["finset"]], ["mod", "theorem", "mem_div", ["finset"]], ["mod", "theorem", "mem_mul", ["finset"]], ["mod", "theorem", "mem_smul", ["finset"]], ["mod", "theorem", "mem_vsub", ["finset"]], ["mod", "theorem", "mul_card_le", ["finset"]], ["mod", "theorem", "mul_empty", ["finset"]], ["mod", "theorem", "mul_mem_mul", ["finset"]], ["mod", "theorem", "mul_singleton", ["finset"]], ["mod", "theorem", "mul_subset_mul", ["finset"]], ["add", "theorem", "div", ["finset", "nonempty"]], ["add", "theorem", "mul", ["finset", "nonempty"]], ["mod", "theorem", "smul", ["finset", "nonempty"]], ["mod", "theorem", "vsub", ["finset", "nonempty"]], ["mod", "theorem", "singleton_div", ["finset"]], ["mod", "theorem", "singleton_div_singleton", ["finset"]], ["mod", "theorem", "singleton_mul", ["finset"]], ["mod", "theorem", "singleton_mul_singleton", ["finset"]], ["mod", "theorem", "singleton_smul", ["finset"]], ["mod", "theorem", "singleton_vsub_singleton", ["finset"]], ["mod", "theorem", "smul_card_le", ["finset"]], ["mod", "theorem", "smul_empty", ["finset"]], ["mod", "theorem", "smul_finset_mem_smul_finset", ["finset"]], ["mod", "theorem", "smul_mem_smul", ["finset"]], ["mod", "theorem", "smul_nonempty_iff", ["finset"]], ["mod", "theorem", "smul_singleton", ["finset"]], ["mod", "theorem", "smul_subset_smul", ["finset"]], ["mod", "theorem", "subset_div", ["finset"]], ["mod", "theorem", "subset_mul", ["finset"]], ["mod", "theorem", "subset_smul", ["finset"]], ["mod", "theorem", "subset_vsub", ["finset"]], ["mod", "theorem", "vsub_card_le", ["finset"]], ["mod", "theorem", "vsub_def", ["finset"]], ["mod", "theorem", "vsub_empty", ["finset"]], ["mod", "theorem", "vsub_mem_vsub", ["finset"]], ["mod", "theorem", "vsub_nonempty_iff", ["finset"]], ["mod", "theorem", "vsub_subset_vsub", ["finset"]]]}, {"oldPath": "src/order/filter/n_ary.lean", "newPath": "src/order/filter/n_ary.lean", "changes": []}]}, {"timestamp": 1651522934, "sha": "17412076", "message": "feat(analysis/normed_space/exponential): `Aeᴮ = eᴮA` if `AB = BA` (#13881)\nThis commit shows that the exponenential commutes if the exponent does.\nThis generalizes a previous weaker result.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["mod", "theorem", "exp", ["commute"]], ["add", "theorem", "exp_left", ["commute"]], ["add", "theorem", "exp_right", ["commute"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_left", ["commute"]], ["add", "theorem", "tsum_right", ["commute"]]]}]}, {"timestamp": 1651519926, "sha": "c44091fc", "message": "feat(data/zmod/basic): Generalize `zmod.card` (#13887)\nThis PR generalizes `zmod.card` from assuming `[fact (0 < n)]` to assuming `[fintype (zmod n)]`.\nNote that the latter was already part of the statement, but was previously deduced from the instance `instance fintype : Π (n : ℕ) [fact (0 < n)], fintype (zmod n)` on line 80.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["mod", "theorem", "card", ["zmod"]]]}]}, {"timestamp": 1651519924, "sha": "2b0aeda1", "message": "feat(measure/function/l*_space): a sample of useful lemmas on L^p spaces (#13823)\nUsed in #13690", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "abs", ["measure_theory", "integrable"]], ["add", "theorem", "const_mul'", ["measure_theory", "integrable"]], ["del", "theorem", "max_zero", ["measure_theory", "integrable"]], ["del", "theorem", "min_zero", ["measure_theory", "integrable"]], ["add", "theorem", "mul_const'", ["measure_theory", "integrable"]], ["add", "theorem", "neg_part", ["measure_theory", "integrable"]], ["add", "theorem", "pos_part", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_finset_sum'", ["measure_theory"]], ["add", "theorem", "integrable_norm_rpow'", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "integrable_norm_rpow", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": [["add", "theorem", "integrable_sq", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_two_iff_integrable_sq", ["measure_theory"]], ["add", "theorem", "mem_ℒp_two_iff_integrable_sq_norm", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "neg_part", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "norm_rpow_div", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "pos_part", ["measure_theory", "mem_ℒp"]], ["mod", "def", "mem_ℒp", ["measure_theory"]], ["add", "theorem", "mem_ℒp_finset_sum'", ["measure_theory"]], ["add", "theorem", "mem_ℒp_norm_rpow_iff", ["measure_theory"]], ["add", "theorem", "mem_ℒp_top_const", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "snorm_eq_integral_rpow_norm", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": [["add", "theorem", "map_map_of_ae_measurable", ["ae_measurable"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "is_probability_measure_map", ["measure_theory"]]]}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": []}]}, {"timestamp": 1651512530, "sha": "aa921ef3", "message": "docs(set_theory/game/pgame): Fix note on `pgame` (#13880)\nWe never actually quotient by extensionality. What we quotient by is game equivalence.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1651512529, "sha": "0606d7ca", "message": "feat(set_theory/game/pgame): Negative of `of_lists` (#13868)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "neg_of_lists", ["pgame"]]]}]}, {"timestamp": 1651512528, "sha": "3e2f2145", "message": "feat(logic/basic): Generalize `congr_fun_heq` (#13867)\nThe lemma holds for arbitrary heterogeneous equalities, not only that given by casts.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["del", "theorem", "congr_fun_heq", []], ["add", "theorem", "congr_heq", []]]}, {"oldPath": "src/set_theory/game/ordinal.lean", "newPath": "src/set_theory/game/ordinal.lean", "changes": []}]}, {"timestamp": 1651512527, "sha": "785f62c6", "message": "feat(algebra/star/prod): elementwise `star` operator (#13856)\nThe lemmas and instances this provides are inspired by `algebra/star/pi`, and appear in the same order.\nWe should have these instances anyway for completness, but the motivation is to make it easy to talk about the continuity of `star` on `units R` via the `units.embed_product_star` lemma.", "changes": [{"oldPath": null, "newPath": "src/algebra/star/prod.lean", "changes": [["add", "theorem", "fst_star", ["prod"]], ["add", "theorem", "snd_star", ["prod"]], ["add", "theorem", "star_def", ["prod"]], ["add", "theorem", "embed_product_star", ["units"]]]}]}, {"timestamp": 1651512526, "sha": "206a5f77", "message": "feat(measure_theory/integral/bochner): Add a rewrite lemma saying the ennreal coercion of an integral of a nonnegative function equals the lintegral of the ennreal coercion of the function. (#13701)\nThis PR adds a rewrite lemma `of_real_integral_eq_lintegral_of_real` that is very similar to `lintegral_coe_eq_integral`, but for nonnegative real-valued functions instead of nnreal-valued functions.", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "of_real_integral_eq_lintegral_of_real", ["measure_theory"]]]}]}, {"timestamp": 1651512525, "sha": "917b5275", "message": "feat(topology/metric_space/thickened_indicator): Add definition and lemmas about thickened indicators. (#13481)\nAdd thickened indicators, to be used for the proof of the portmanteau theorem.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "div_le_div", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/metric_space/thickened_indicator.lean", "changes": [["add", "theorem", "continuous_thickened_indicator_aux", []], ["add", "theorem", "coe_fn_eq_comp", ["thickened_indicator"]], ["add", "def", "thickened_indicator", []], ["add", "def", "thickened_indicator_aux", []], ["add", "theorem", "thickened_indicator_aux_closure_eq", []], ["add", "theorem", "thickened_indicator_aux_le_one", []], ["add", "theorem", "thickened_indicator_aux_lt_top", []], ["add", "theorem", "thickened_indicator_aux_mono", []], ["add", "theorem", "thickened_indicator_aux_one", []], ["add", "theorem", "thickened_indicator_aux_one_of_mem_closure", []], ["add", "theorem", "thickened_indicator_aux_subset", []], ["add", "theorem", "thickened_indicator_aux_tendsto_indicator_closure", []], ["add", "theorem", "thickened_indicator_aux_zero", []], ["add", "theorem", "thickened_indicator_le_one", []], ["add", "theorem", "thickened_indicator_mono", []], ["add", "theorem", "thickened_indicator_one", []], ["add", "theorem", "thickened_indicator_one_of_mem_closure", []], ["add", "theorem", "thickened_indicator_subset", []], ["add", "theorem", "thickened_indicator_tendsto_indicator_closure", []], ["add", "theorem", "thickened_indicator_zero", []]]}]}, {"timestamp": 1651507097, "sha": "af11e154", "message": "feat(algebra/big_operators/finprod): add lemma `finprod_eq_prod_of_mul_support_to_finset_subset'` (#13801)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_eq_finset_prod_of_mul_support_subset", []]]}]}, {"timestamp": 1651507096, "sha": "65843cdc", "message": "feat(analysis/matrix): provide a normed_algebra structure on matrices (#13518)\nThis is one of the final pieces needed to defining the matrix exponential.\nIt would be nice to show:\n```lean\nlemma l1_linf_norm_to_matrix [nondiscrete_normed_field R] [decidable_eq n]\n (f : (n → R) →L[R] (m → R)) :\n ∥linear_map.to_matrix' (↑f : (n → R) →ₗ[R] (m → R))∥ = ∥f∥ :=\n```\nbut its not clear to me under what generality it holds.", "changes": [{"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": [["add", "theorem", "linfty_op_nnnorm_col", ["matrix"]], ["add", "theorem", "linfty_op_nnnorm_def", ["matrix"]], ["add", "theorem", "linfty_op_nnnorm_diagonal", ["matrix"]], ["add", "theorem", "linfty_op_nnnorm_mul", ["matrix"]], ["add", "theorem", "linfty_op_nnnorm_mul_vec", ["matrix"]], ["add", "theorem", "linfty_op_nnnorm_row", ["matrix"]], ["add", "theorem", "linfty_op_norm_col", ["matrix"]], ["add", "theorem", "linfty_op_norm_def", ["matrix"]], ["add", "theorem", "linfty_op_norm_diagonal", ["matrix"]], ["add", "theorem", "linfty_op_norm_mul", ["matrix"]], ["add", "theorem", "linfty_op_norm_mul_vec", ["matrix"]], ["add", "theorem", "linfty_op_norm_row", ["matrix"]]]}]}, {"timestamp": 1651507094, "sha": "90418df5", "message": "feat(linear_algebra/finite_dimensional): `finite_dimensional_iff_of_rank_eq_nsmul` (#13357)\nIf `V` has a dimension that is a scalar multiple of the dimension of `W`, then `V` is finite dimensional iff `W` is.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finite_dimensional_iff_of_rank_eq_nsmul", ["finite_dimensional"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "nsmul_lt_omega_iff", ["cardinal"]], ["add", "theorem", "nsmul_lt_omega_iff_of_ne_zero", ["cardinal"]]]}]}, {"timestamp": 1651507094, "sha": "64bc02c5", "message": "feat(ring_theory/dedekind_domain): Chinese remainder theorem for Dedekind domains (#13067)\nThe general Chinese remainder theorem states `R / I` is isomorphic to a product of `R / (P i ^ e i)`, where `P i` are comaximal, i.e. `P i + P j = 1` for `i ≠ j`, and the infimum of all `P i` is `I`.\nIn a Dedekind domain the theorem can be stated in a more friendly way, namely that the `P i` are the factors (in the sense of a unique factorization domain) of `I`. This PR provides two ways of doing so, and includes some more lemmas on the ideals in a Dedekind domain.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "coprime_of_no_prime_ge", ["ideal"]], ["add", "theorem", "count_normalized_factors_eq", ["ideal"]], ["add", "theorem", "mul_mem_pow", ["ideal", "is_prime"]], ["add", "theorem", "le_mul_of_no_prime_factors", ["ideal"]], ["add", "theorem", "le_of_pow_le_prime", ["ideal"]], ["add", "theorem", "pow_le_prime_iff", ["ideal"]], ["add", "theorem", "prod_le_prime", ["ideal"]], ["add", "theorem", "inf_prime_pow_eq_prod", ["is_dedekind_domain"]], ["add", "theorem", "quotient_equiv_pi_factors_mk", ["is_dedekind_domain"]], ["add", "theorem", "prime_le_prime_iff_eq", ["ring", "dimension_le_one"]]]}]}, {"timestamp": 1651499111, "sha": "384a7a39", "message": "chore(.github/workflows/merge_conflicts.yaml): use separate token (#13884)", "changes": [{"oldPath": ".github/workflows/merge_conflicts.yml", "newPath": ".github/workflows/merge_conflicts.yml", "changes": []}]}, {"timestamp": 1651499110, "sha": "ad2e9365", "message": "feat(topology/homeomorph): add `(co)map_cocompact` (#13861)\nAlso rename `filter.comap_cocompact` to `filter.comap_cocompact_le`.", "changes": [{"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "comap_cocompact", ["homeomorph"]], ["add", "theorem", "map_cocompact", ["homeomorph"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "theorem", "comap_cocompact", ["filter"]], ["add", "theorem", "comap_cocompact_le", ["filter"]]]}]}, {"timestamp": 1651499109, "sha": "dbc03394", "message": "feat(category_theory/limits/shapes/types): explicit isos (#13854)\nRequested on Zulip. https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Relating.20the.20categorical.20product.20and.20the.20normal.20product", "changes": [{"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "binary_coproduct_iso_inl_comp_hom", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_coproduct_iso_inl_comp_inv", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_coproduct_iso_inr_comp_hom", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_coproduct_iso_inr_comp_inv", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_product_iso_hom_comp_fst", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_product_iso_hom_comp_snd", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_product_iso_inv_comp_fst", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_product_iso_inv_comp_snd", ["category_theory", "limits", "types"]], ["add", "theorem", "coequalizer_iso_quot_comp_inv", ["category_theory", "limits", "types"]], ["add", "theorem", "coequalizer_iso_π_comp_hom", ["category_theory", "limits", "types"]], ["add", "theorem", "coproduct_iso_mk_comp_inv", ["category_theory", "limits", "types"]], ["add", "theorem", "coproduct_iso_ι_comp_hom", ["category_theory", "limits", "types"]], ["add", "theorem", "equalizer_iso_hom_comp_subtype", ["category_theory", "limits", "types"]], ["add", "theorem", "equalizer_iso_inv_comp_ι", ["category_theory", "limits", "types"]], ["add", "def", "initial_colimit_cocone", ["category_theory", "limits", "types"]], ["del", "def", "initial_limit_cone", ["category_theory", "limits", "types"]], ["add", "theorem", "product_iso_hom_comp_eval", ["category_theory", "limits", "types"]], ["add", "theorem", "product_iso_inv_comp_π", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1651499108, "sha": "9d3db534", "message": "feat(category_theory/preadditive): End X is a division_ring or field when X is simple (#13849)\nConsequences of Schur's lemma", "changes": [{"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": [["add", "def", "field_End_of_finite_dimensional", ["category_theory"]], ["mod", "theorem", "is_iso_iff_nonzero", ["category_theory"]]]}]}, {"timestamp": 1651499107, "sha": "e5b48f9b", "message": "chore(model_theory/basic): golf `countable_empty` (#13836)", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "empty_card", ["first_order", "language"]]]}]}, {"timestamp": 1651499106, "sha": "4fe734da", "message": "fix(algebra/indicator_function): add missing decidable instances to lemma statements (#13834)\nThis keeps the definition of `set.indicator` as non-computable, but ensures that when lemmas are applied they generalize to any decidable instances.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["mod", "theorem", "comp_mul_indicator", ["set"]], ["del", "def", "indicator", ["set"]], ["del", "def", "mul_indicator", ["set"]], ["mod", "theorem", "mul_indicator_apply", ["set"]], ["del", "def", "mul_indicator_hom", ["set"]], ["mod", "theorem", "piecewise_eq_mul_indicator", ["set"]]]}, {"oldPath": "src/combinatorics/simple_graph/inc_matrix.lean", "newPath": "src/combinatorics/simple_graph/inc_matrix.lean", "changes": [["del", "def", "inc_matrix", ["simple_graph"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "integral_eq_sum_filter", ["measure_theory", "simple_func"]], ["mod", "theorem", "integral_eq_sum_of_subset", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/probability_mass_function/monad.lean", "newPath": "src/measure_theory/probability_mass_function/monad.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1651499104, "sha": "cf5fa84c", "message": "feat(analysis/normed_space/add_torsor_bases): add lemma `smooth_barycentric_coord` (#13764)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["add", "theorem", "smooth_barycentric_coord", []]]}]}, {"timestamp": 1651499103, "sha": "4113e00a", "message": "feat(linear_algebra/affine_space/basis): add lemma `affine_basis.linear_combination_coord_eq_self` (#13763)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": [["add", "theorem", "linear_combination_coord_eq_self", ["affine_basis"]]]}]}, {"timestamp": 1651499102, "sha": "b063c286", "message": "fix(src/tactic/alias): Support `alias foo ↔ ..` as documented (#13743)\nthe current code and the single(!) use of this feature work only if\nyou write `alias foo ↔ . .` which is very odd.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}]}, {"timestamp": 1651499101, "sha": "3fde0827", "message": "refactor(topology/algebra/order): reorganize, simplify proofs (#13716)\n* Prove `has_compact_mul_support.is_compact_range`\n* Simplify the proof of `continuous.exists_forall_le_of_has_compact_mul_support` and `continuous.bdd_below_range_of_has_compact_mul_support` using `has_compact_mul_support.is_compact_range`.\n* Reorder `topology.algebra.order.basic` so that `is_compact.bdd_below` and friends are together with all results about `order_closed_topology`.\n* Move `continuous.bdd_below_range_of_has_compact_mul_support` (and dual) to `topology.algebra.order.basic`", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "range_subset_insert_image_mul_support", ["function"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "bdd_above_range_of_has_compact_mul_support", ["continuous"]], ["add", "theorem", "bdd_below_range_of_has_compact_mul_support", ["continuous"]], ["mod", "theorem", "bdd_above", ["is_compact"]], ["mod", "theorem", "bdd_above_image", ["is_compact"]], ["mod", "theorem", "bdd_below", ["is_compact"]], ["mod", "theorem", "bdd_below_image", ["is_compact"]]]}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["del", "theorem", "bdd_above_range_of_has_compact_mul_support", ["continuous"]], ["del", "theorem", "bdd_below_range_of_has_compact_mul_support", ["continuous"]]]}, {"oldPath": "src/topology/support.lean", "newPath": "src/topology/support.lean", "changes": [["add", "theorem", "is_compact_range", ["has_compact_mul_support"]], ["add", "theorem", "range_eq_image_mul_tsupport_or", []], ["add", "theorem", "range_subset_insert_image_mul_tsupport", []]]}]}, {"timestamp": 1651499100, "sha": "52a454af", "message": "feat(category_theory/limits): pushouts and pullbacks in the opposite category (#13495)\nThis PR adds duality isomorphisms for the categories `wide_pushout_shape`, `wide_pullback_shape`, `walking_span`, `walking_cospan` and produce pullbacks/pushouts in the opposite category when pushouts/pullbacks exist.", "changes": [{"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "theorem", "has_pullbacks_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_pushouts_opposite", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "walking_cospan_op_equiv", ["category_theory", "limits"]], ["add", "def", "walking_span_op_equiv", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["add", "def", "wide_pullback_shape_op", ["category_theory", "limits"]], ["add", "def", "wide_pullback_shape_op_equiv", ["category_theory", "limits"]], ["add", "def", "wide_pullback_shape_op_map", ["category_theory", "limits"]], ["add", "def", "wide_pullback_shape_op_unop", ["category_theory", "limits"]], ["add", "def", "wide_pullback_shape_unop", ["category_theory", "limits"]], ["add", "def", "wide_pullback_shape_unop_op", ["category_theory", "limits"]], ["add", "def", "wide_pushout_shape_op", ["category_theory", "limits"]], ["add", "def", "wide_pushout_shape_op_equiv", ["category_theory", "limits"]], ["add", "def", "wide_pushout_shape_op_map", ["category_theory", "limits"]], ["add", "def", "wide_pushout_shape_op_unop", ["category_theory", "limits"]], ["add", "def", "wide_pushout_shape_unop", ["category_theory", "limits"]], ["add", "def", "wide_pushout_shape_unop_op", ["category_theory", "limits"]]]}]}, {"timestamp": 1651491897, "sha": "61d5d308", "message": "feat(group_theory/group_action/basic): A multiplicative action induces an additive action of the additive group (#13780)\n`mul_action M α` induces `add_action (additive M) α`.", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "of_mul_vadd", ["additive"]], ["add", "theorem", "of_add_smul", ["multiplicative"]]]}]}, {"timestamp": 1651491896, "sha": "320df450", "message": "refactor(linear_algebra/trace): unbundle `matrix.trace` (#13712)\nThese extra type arguments are annoying to work with in many cases, especially when Lean doesn't have any information to infer the mostly-irrelevant `R` argument from. This came up while trying to work with `continuous.matrix_trace`, which is annoying to use for that reason.\nThe old bundled version is still available as `matrix.trace_linear_map`.\nThe cost of this change is that we have to copy across the usual set of obvious lemmas about additive maps; but we already do this for `diagonal`, `transpose` etc anyway.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": [["mod", "theorem", "trace_adj_matrix", ["simple_graph"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "diag_list_sum", ["matrix"]], ["add", "theorem", "diag_multiset_sum", ["matrix"]], ["add", "theorem", "diag_sum", ["matrix"]]]}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": [["add", "theorem", "trace_eq", ["matrix", "std_basis_matrix"]], ["mod", "theorem", "trace_zero", ["matrix", "std_basis_matrix"]]]}, {"oldPath": "src/data/matrix/hadamard.lean", "newPath": "src/data/matrix/hadamard.lean", "changes": [["mod", "theorem", "sum_hadamard_eq", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": [["mod", "theorem", "trace_pow_card", ["zmod"]]]}, {"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": [["mod", "def", "trace", ["matrix"]], ["add", "theorem", "trace_add", ["matrix"]], ["add", "def", "trace_add_monoid_hom", ["matrix"]], ["del", "theorem", "trace_apply", ["matrix"]], ["mod", "theorem", "trace_col_mul_row", ["matrix"]], ["del", "theorem", "trace_diag", ["matrix"]], ["mod", "theorem", "trace_fin_one", ["matrix"]], ["mod", "theorem", "trace_fin_three", ["matrix"]], ["mod", "theorem", "trace_fin_two", ["matrix"]], ["mod", "theorem", "trace_fin_zero", ["matrix"]], ["add", "def", "trace_linear_map", ["matrix"]], ["add", "theorem", "trace_list_sum", ["matrix"]], ["mod", "theorem", "trace_mul_comm", ["matrix"]], ["mod", "theorem", "trace_mul_cycle'", ["matrix"]], ["mod", "theorem", "trace_mul_cycle", ["matrix"]], ["add", "theorem", "trace_multiset_sum", ["matrix"]], ["add", "theorem", "trace_neg", ["matrix"]], ["mod", "theorem", "trace_one", ["matrix"]], ["add", "theorem", "trace_smul", ["matrix"]], ["add", "theorem", "trace_sub", ["matrix"]], ["add", "theorem", "trace_sum", ["matrix"]], ["mod", "theorem", "trace_transpose", ["matrix"]], ["mod", "theorem", "trace_transpose_mul", ["matrix"]], ["add", "theorem", "trace_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "src/topology/instances/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": [["mod", "theorem", "matrix_trace", ["continuous"]]]}]}, {"timestamp": 1651491895, "sha": "a6275694", "message": "feat(category_theory/monoidal): adjunctions in rigid categories (#13707)\nWe construct the bijection on hom-sets `(Yᘁ ⊗ X ⟶ Z) ≃ (X ⟶ Y ⊗ Z)`\ngiven by \"pulling the string on the left\" down or up, using right duals in a right rigid category.\nAs consequences, we show that a left rigid category is monoidal closed (it seems our lefts and rights have got mixed up!!), and that functors from a groupoid to a rigid category is again a rigid category.", "changes": [{"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/coherence.lean", "newPath": "src/category_theory/monoidal/coherence.lean", "changes": [["add", "theorem", "insert_id_lhs", ["tactic", "coherence"]], ["add", "theorem", "insert_id_rhs", ["tactic", "coherence"]]]}, {"oldPath": "src/category_theory/monoidal/rigid.lean", "newPath": "src/category_theory/monoidal/rigid/basic.lean", "changes": [["add", "theorem", "coevaluation_comp_left_adjoint_mate", ["category_theory"]], ["add", "theorem", "coevaluation_comp_right_adjoint_mate", ["category_theory"]], ["add", "theorem", "left_adjoint_mate_comp_evaluation", ["category_theory"]], ["add", "theorem", "right_adjoint_mate_comp_evaluation", ["category_theory"]], ["add", "def", "tensor_left_adjunction", ["category_theory"]], ["add", "def", "tensor_left_hom_equiv", ["category_theory"]], ["add", "theorem", "tensor_left_hom_equiv_id_tensor_comp_evaluation", ["category_theory"]], ["add", "theorem", "tensor_left_hom_equiv_naturality", ["category_theory"]], ["add", "theorem", "tensor_left_hom_equiv_symm_coevaluation_comp_id_tensor", ["category_theory"]], ["add", "theorem", "tensor_left_hom_equiv_symm_coevaluation_comp_tensor_id", ["category_theory"]], ["add", "theorem", "tensor_left_hom_equiv_symm_naturality", ["category_theory"]], ["add", "theorem", "tensor_left_hom_equiv_tensor", ["category_theory"]], ["add", "theorem", "tensor_left_hom_equiv_tensor_id_comp_evaluation", ["category_theory"]], ["add", "def", "tensor_right_adjunction", ["category_theory"]], ["add", "def", "tensor_right_hom_equiv", ["category_theory"]], ["add", "theorem", "tensor_right_hom_equiv_id_tensor_comp_evaluation", ["category_theory"]], ["add", "theorem", "tensor_right_hom_equiv_naturality", ["category_theory"]], ["add", "theorem", "tensor_right_hom_equiv_symm_coevaluation_comp_id_tensor", ["category_theory"]], ["add", "theorem", "tensor_right_hom_equiv_symm_coevaluation_comp_tensor_id", ["category_theory"]], ["add", "theorem", "tensor_right_hom_equiv_symm_naturality", ["category_theory"]], ["add", "theorem", "tensor_right_hom_equiv_tensor", ["category_theory"]], ["add", "theorem", "tensor_right_hom_equiv_tensor_id_comp_evaluation", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/rigid/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/rigid/of_equivalence.lean", "newPath": "src/category_theory/monoidal/rigid/of_equivalence.lean", "changes": []}]}, {"timestamp": 1651485244, "sha": "fe445767", "message": "feat(probability/martingale): the optional stopping theorem (#13630)\nWe prove the optional stopping theorem (also known as the fair game theorem). This is number 62 on Freek 100 theorems.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "mul_indicator_mul_compl_eq_piecewise", ["set"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "ae_le_trim_iff", ["measure_theory"]], ["add", "theorem", "ae_le_trim_of_strongly_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_piecewise", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_le_of_ae_le_trim", ["measure_theory"]], ["add", "theorem", "ae_of_ae_trim", ["measure_theory"]]]}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["add", "theorem", "submartingale_iff_expected_stopped_value_mono", ["measure_theory"]], ["add", "theorem", "submartingale_of_expected_stopped_value_mono", ["measure_theory"]], ["add", "theorem", "submartingale_of_set_integral_le", ["measure_theory"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "add", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "add_const_nat", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "piecewise_of_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "is_stopping_time_piecewise_const", ["measure_theory"]], ["add", "theorem", "stopped_value_const", ["measure_theory"]], ["add", "theorem", "stopped_value_piecewise_const'", ["measure_theory"]], ["add", "theorem", "stopped_value_piecewise_const", ["measure_theory"]]]}]}, {"timestamp": 1651471457, "sha": "db0b495b", "message": "chore(category_theory/limits/cones): avoid a timeout from @[simps] (#13877)\nThis was causing a timeout on another branch.", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}]}, {"timestamp": 1651471456, "sha": "67c0e137", "message": "doc(data/polynomial/basic): Remove references to `polynomial.norm2` (#13847)\n`polynomial.norm2` was never added to mathlib.", "changes": [{"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}]}, {"timestamp": 1651471455, "sha": "03ed4c78", "message": "move(topology/algebra/floor_ring → order/floor): Move topological properties of `⌊x⌋` and `⌈x⌉` (#13824)\nThose belong in an order folder.", "changes": [{"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/order/floor.lean", "changes": []}]}, {"timestamp": 1651471454, "sha": "aaa167cd", "message": "feat(linear_algebra/matrix/adjugate): `adjugate` of a diagonal matrix is diagonal (#13818)\nThis proof is a bit ugly...", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "diagonal_update_column_single", ["matrix"]], ["add", "theorem", "diagonal_update_row_single", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["add", "theorem", "adjugate_diagonal", ["matrix"]]]}]}, {"timestamp": 1651471453, "sha": "34bbec61", "message": "feat(logic/equiv/local_equiv): add `forall_mem_target`/`exists_mem_target` (#13805)", "changes": [{"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": [["add", "theorem", "exists_mem_target", ["local_equiv"]], ["add", "theorem", "forall_mem_target", ["local_equiv"]]]}]}, {"timestamp": 1651471452, "sha": "179b6c02", "message": "feat(logic/equiv/local_equiv): add inhabited instances (#13804)", "changes": [{"oldPath": "src/logic/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": []}]}, {"timestamp": 1651471451, "sha": "c1f8ac50", "message": "feat(order/zorn): add Zorn lemma on a preorder (#13803)", "changes": [{"oldPath": "src/order/chain.lean", "newPath": "src/order/chain.lean", "changes": [["add", "theorem", "mono_rel", ["is_chain"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["mod", "theorem", "zorn_nonempty_partial_order", []], ["add", "theorem", "zorn_nonempty_preorder", []], ["add", "theorem", "zorn_nonempty_preorder₀", []], ["mod", "theorem", "zorn_partial_order", []], ["mod", "theorem", "zorn_partial_order₀", []], ["add", "theorem", "zorn_preorder", []], ["add", "theorem", "zorn_preorder₀", []]]}]}, {"timestamp": 1651471450, "sha": "925c4738", "message": "chore(analysis/normed_space/add_torsor): make coefficients explicit in lemmas about eventual dilations (#13796)\nFor an example of why we should do this, see: https://github.com/leanprover-community/sphere-eversion/blob/19c461c9fba484090ff0af6f0c0204c623f63713/src/loops/surrounding.lean#L176", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}]}, {"timestamp": 1651471449, "sha": "90b1ddba", "message": "feat(linear_algebra/finite_dimensional): of_injective (#13792)", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "of_injective", ["finite_dimensional"]], ["add", "theorem", "of_surjective", ["finite_dimensional"]]]}]}, {"timestamp": 1651471448, "sha": "0587eb18", "message": "feat(data/zmod/basic): Variant of `zmod.val_int_cast` (#13781)\nThis PR adds a variant of `zmod.val_int_cast` avoiding the characteristic assumption.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "coe_int_cast", ["zmod"]]]}]}, {"timestamp": 1651471447, "sha": "fd4188d7", "message": "feat(data/zmod/basic): `zmod 0` is infinite (#13779)\nThis PR adds an instance stating that `zmod 0` is infinite.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1651471446, "sha": "5c914907", "message": "refactor(field_theory/separable): move content about polynomial.expand earlier (#13776)\nThere were some definitions about polynomial.expand buried in the middle of `field_theory.separable` for no good reason. No changes to content, just moves stuff to an earlier file.", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/expand.lean", "changes": [["add", "theorem", "coe_expand", ["polynomial"]], ["add", "theorem", "coeff_contract", ["polynomial"]], ["add", "theorem", "coeff_expand", ["polynomial"]], ["add", "theorem", "coeff_expand_mul'", ["polynomial"]], ["add", "theorem", "coeff_expand_mul", ["polynomial"]], ["add", "theorem", "contract_expand", ["polynomial"]], ["add", "theorem", "derivative_expand", ["polynomial"]], ["add", "theorem", "expand_C", ["polynomial"]], ["add", "theorem", "expand_X", ["polynomial"]], ["add", "theorem", "expand_char", ["polynomial"]], ["add", "theorem", "expand_contract", ["polynomial"]], ["add", "theorem", "expand_eq_C", ["polynomial"]], ["add", "theorem", "expand_eq_sum", ["polynomial"]], ["add", "theorem", "expand_eq_zero", ["polynomial"]], ["add", "theorem", "expand_eval", ["polynomial"]], ["add", "theorem", "expand_expand", ["polynomial"]], ["add", "theorem", "expand_inj", ["polynomial"]], ["add", "theorem", "expand_injective", ["polynomial"]], ["add", "theorem", "expand_monomial", ["polynomial"]], ["add", "theorem", "expand_mul", ["polynomial"]], ["add", "theorem", "expand_one", ["polynomial"]], ["add", "theorem", "expand_pow", ["polynomial"]], ["add", "theorem", "expand_zero", ["polynomial"]], ["add", "theorem", "is_local_ring_hom_expand", ["polynomial"]], ["add", "theorem", "map_expand", ["polynomial"]], ["add", "theorem", "map_expand_pow_char", ["polynomial"]], ["add", "theorem", "expand", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_expand", ["polynomial"]], ["add", "theorem", "of_irreducible_expand", ["polynomial"]], ["add", "theorem", "of_irreducible_expand_pow", ["polynomial"]]]}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["del", "theorem", "coe_expand", ["polynomial"]], ["del", "theorem", "coeff_contract", ["polynomial"]], ["del", "theorem", "coeff_expand", ["polynomial"]], ["del", "theorem", "coeff_expand_mul'", ["polynomial"]], ["del", "theorem", "coeff_expand_mul", ["polynomial"]], ["del", "theorem", "contract_expand", ["polynomial"]], ["del", "theorem", "derivative_expand", ["polynomial"]], ["del", "theorem", "expand_C", ["polynomial"]], ["del", "theorem", "expand_X", ["polynomial"]], ["del", "theorem", "expand_char", ["polynomial"]], ["del", "theorem", "expand_contract", ["polynomial"]], ["del", "theorem", "expand_eq_C", ["polynomial"]], ["del", "theorem", "expand_eq_sum", ["polynomial"]], ["del", "theorem", "expand_eq_zero", ["polynomial"]], ["del", "theorem", "expand_eval", ["polynomial"]], ["del", "theorem", "expand_expand", ["polynomial"]], ["del", "theorem", "expand_inj", ["polynomial"]], ["del", "theorem", "expand_injective", ["polynomial"]], ["del", "theorem", "expand_monomial", ["polynomial"]], ["del", "theorem", "expand_mul", ["polynomial"]], ["del", "theorem", "expand_one", ["polynomial"]], ["del", "theorem", "expand_pow", ["polynomial"]], ["del", "theorem", "expand_zero", ["polynomial"]], ["del", "theorem", "is_local_ring_hom_expand", ["polynomial"]], ["del", "theorem", "map_expand", ["polynomial"]], ["del", "theorem", "map_expand_pow_char", ["polynomial"]], ["del", "theorem", "expand", ["polynomial", "monic"]], ["del", "theorem", "nat_degree_expand", ["polynomial"]], ["del", "theorem", "of_irreducible_expand", ["polynomial"]], ["del", "theorem", "of_irreducible_expand_pow", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1651471445, "sha": "000cae16", "message": "feat(representation_theory): Rep k G is symmetric monoidal (#13685)", "changes": [{"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "def", "forget_braided", ["Action"]], ["mod", "def", "forget_monoidal", ["Action"]]]}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": []}]}, {"timestamp": 1651471444, "sha": "1e385494", "message": "feat(analysis/matrix): define the frobenius norm on matrices (#13497)", "changes": [{"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": [["add", "theorem", "frobenius_nnnorm_col", ["matrix"]], ["add", "theorem", "frobenius_nnnorm_def", ["matrix"]], ["add", "theorem", "frobenius_nnnorm_diagonal", ["matrix"]], ["add", "theorem", "frobenius_nnnorm_map_eq", ["matrix"]], ["add", "theorem", "frobenius_nnnorm_mul", ["matrix"]], ["add", "theorem", "frobenius_nnnorm_one", ["matrix"]], ["add", "theorem", "frobenius_nnnorm_row", ["matrix"]], ["add", "theorem", "frobenius_nnnorm_transpose", ["matrix"]], ["add", "theorem", "frobenius_norm_col", ["matrix"]], ["add", "theorem", "frobenius_norm_def", ["matrix"]], ["add", "theorem", "frobenius_norm_diagonal", ["matrix"]], ["add", "theorem", "frobenius_norm_map_eq", ["matrix"]], ["add", "theorem", "frobenius_norm_mul", ["matrix"]], ["add", "theorem", "frobenius_norm_row", ["matrix"]], ["add", "theorem", "frobenius_norm_transpose", ["matrix"]], ["add", "def", "frobenius_normed_algebra", ["matrix"]], ["add", "def", "frobenius_normed_group", ["matrix"]], ["add", "def", "frobenius_normed_ring", ["matrix"]], ["add", "def", "frobenius_normed_space", ["matrix"]], ["add", "def", "frobenius_semi_normed_group", ["matrix"]], ["add", "theorem", "nnnorm_entry_le_entrywise_sup_nnnorm", ["matrix"]], ["del", "theorem", "nnnorm_entry_le_entrywise_sup_nnorm", ["matrix"]]]}]}, {"timestamp": 1651469234, "sha": "3d946a3d", "message": "chore(algebraic_geometry/AffineScheme): Speed up `Spec` (#13866)\n`simps` take 38s in local and does not seem to generate any useful lemma.", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}]}, {"timestamp": 1651466398, "sha": "523adb38", "message": "feat(set_theory/game/nim): Birthday of `nim` (#13873)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "nim_birthday", ["pgame", "nim"]]]}]}, {"timestamp": 1651466397, "sha": "039543c2", "message": "refactor(set_theory/game/pgame): Simpler definition for `star` (#13869)\nThis new definition gives marginally easier proofs for the basic lemmas, and avoids use of the quite incomplete `of_lists` API.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "def", "star", ["pgame"]], ["mod", "theorem", "star_left_moves", ["pgame"]], ["mod", "theorem", "star_move_left", ["pgame"]], ["mod", "theorem", "star_move_right", ["pgame"]], ["mod", "theorem", "star_right_moves", ["pgame"]]]}]}, {"timestamp": 1651466396, "sha": "26e24c75", "message": "feat(set_theory/surreal/basic): `<` is transitive on numeric games (#13812)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "lt_trans'", ["pgame"]], ["add", "theorem", "lt_trans", ["pgame"]]]}]}, {"timestamp": 1651459074, "sha": "922717e8", "message": "chore(logic/function/basic): don't unfold set in cantor (#13822)\nThis uses `set_of` and `mem` consistently instead of using application everywhere, since `f` has type `A -> set A` instead of `A -> A -> Prop`. (Arguably, it could just be stated for `A -> A -> Prop` instead though.)", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "cantor_injective", ["function"]]]}]}, {"timestamp": 1651453654, "sha": "afc0700e", "message": "feat(linear_algebra/tensor_product): define tensor_tensor_tensor_assoc (#13864)", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "def", "tensor_tensor_tensor_assoc", ["tensor_product"]], ["add", "theorem", "tensor_tensor_tensor_assoc_symm_tmul", ["tensor_product"]], ["add", "theorem", "tensor_tensor_tensor_assoc_tmul", ["tensor_product"]]]}]}, {"timestamp": 1651441862, "sha": "b236cb20", "message": "chore(set_theory/surreal/basic): Inline instances (#13811)\nWe inline various definitions used only for instances. We also remove the redundant lemma `not_le` (which is more generally true on preorders).", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["del", "def", "add", ["surreal"]], ["del", "def", "le", ["surreal"]], ["del", "def", "lt", ["surreal"]], ["del", "def", "neg", ["surreal"]], ["del", "theorem", "not_le", ["surreal"]]]}]}, {"timestamp": 1651439790, "sha": "f0930c82", "message": "feat(set_theory/pgame/impartial): `star` is impartial (#13842)", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "neg_star", ["pgame"]]]}]}, {"timestamp": 1651431218, "sha": "071cb550", "message": "feat(data/set/function): missing mono lemmas (#13863)", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "mono", ["antitone_on"]], ["add", "theorem", "mono", ["monotone_on"]], ["add", "theorem", "mono", ["strict_anti_on"]], ["add", "theorem", "mono", ["strict_mono_on"]]]}]}, {"timestamp": 1651408586, "sha": "9e7c80f6", "message": "docs(*): Wrap some links in < … > (#13852)\nI noticed that many docs say\n See https://stacks.math.columbia.edu/tag/001T.\nand the our documentation will include the final `.` in the URL, causing\nthe URL to not work.\nThis tries to fix some of these instances. I intentionally applied this\nto some URLs ending with a space, because it does not hurt to be\nexplicit, and the next contributor cargo-culting the URL is more likely\nto get this right.\nObligatory xkcd reference: https://xkcd.com/208/", "changes": [{"oldPath": "CODE_OF_CONDUCT.md", "newPath": "CODE_OF_CONDUCT.md", "changes": []}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/images.lean", "newPath": "src/category_theory/abelian/images.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/transfer.lean", "newPath": "src/category_theory/abelian/transfer.lean", "changes": []}, {"oldPath": "src/category_theory/additive/basic.lean", "newPath": "src/category_theory/additive/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/basic.lean", "newPath": "src/category_theory/category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/category/preorder.lean", "newPath": "src/category_theory/category/preorder.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/essential_image.lean", "newPath": "src/category_theory/essential_image.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/functor/basic.lean", "newPath": "src/category_theory/functor/basic.lean", "changes": []}, {"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/final.lean", "newPath": "src/category_theory/limits/final.lean", "changes": []}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/sites/canonical.lean", "newPath": "src/category_theory/sites/canonical.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_lifting.lean", "newPath": "src/category_theory/sites/cover_lifting.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheafify.lean", "newPath": "src/topology/sheaves/sheafify.lean", "changes": []}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}]}, {"timestamp": 1651384777, "sha": "232c15e5", "message": "feat(set_theory/game/pgame): Add missing basic API (#13744)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "half_left_moves", ["pgame"]], ["mod", "theorem", "half_move_left", ["pgame"]], ["mod", "theorem", "half_move_right", ["pgame"]], ["add", "theorem", "half_right_moves", ["pgame"]], ["add", "theorem", "le_zero_of_is_empty_left_moves", ["pgame"]], ["add", "theorem", "left_moves_of_lists", ["pgame"]], ["mod", "def", "of_lists", ["pgame"]], ["add", "theorem", "of_lists_move_left'", ["pgame"]], ["add", "theorem", "of_lists_move_left", ["pgame"]], ["add", "theorem", "of_lists_move_right'", ["pgame"]], ["add", "theorem", "of_lists_move_right", ["pgame"]], ["mod", "theorem", "one_left_moves", ["pgame"]], ["mod", "theorem", "one_move_left", ["pgame"]], ["mod", "theorem", "one_right_moves", ["pgame"]], ["add", "theorem", "right_moves_of_lists", ["pgame"]], ["mod", "def", "star", ["pgame"]], ["add", "theorem", "star_left_moves", ["pgame"]], ["add", "theorem", "star_move_left", ["pgame"]], ["add", "theorem", "star_move_right", ["pgame"]], ["add", "theorem", "star_right_moves", ["pgame"]], ["add", "def", "to_of_lists_left_moves", ["pgame"]], ["add", "def", "to_of_lists_right_moves", ["pgame"]], ["add", "theorem", "zero_le_of_is_empty_right_moves", ["pgame"]], ["add", "theorem", "zero_le_one", ["pgame"]], ["mod", "theorem", "zero_left_moves", ["pgame"]], ["mod", "theorem", "zero_lt_one", ["pgame"]], ["mod", "theorem", "zero_right_moves", ["pgame"]]]}]}, {"timestamp": 1651376134, "sha": "51b1e118", "message": "feat(set_theory/game/impartial): Relabelling of impartial game is impartial (#13843)", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": [["add", "theorem", "impartial_congr", ["pgame", "impartial"]]]}]}, {"timestamp": 1651374028, "sha": "4b92515b", "message": "chore(set_theory/game/impartial): golf (#13841)", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}]}, {"timestamp": 1651351846, "sha": "49342e3d", "message": "feat(set_theory/cardinal/basic): Add `simp` lemmas on `cardinal.sum` (#13838)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "lift_sum", ["cardinal"]], ["add", "theorem", "sum_add_distrib'", ["cardinal"]]]}]}, {"timestamp": 1651337357, "sha": "0420dd88", "message": "chore(measure_theory/measurable_space_def): make measurable_space arguments implicit (#13832)", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "measurable_fst", []], ["mod", "theorem", "measurable_snd", []]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["mod", "theorem", "comp", ["measurable"]], ["mod", "theorem", "le", ["measurable"]], ["mod", "theorem", "measurable_const", []], ["mod", "theorem", "measurable_id'", []], ["mod", "theorem", "measurable_id", []]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}]}, {"timestamp": 1651317975, "sha": "26310e71", "message": "feat(algebra/*): a sample of easy useful lemmas (#13696)\nLemmas needed for #13690", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["add", "theorem", "prod_Ioc_consecutive", ["finset"]], ["add", "theorem", "prod_Ioc_succ_top", ["finset"]]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "geom_sum_Ico_le_of_lt_one", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "add_sq'", []], ["add", "theorem", "sub_sq'", []]]}, {"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "one_le_floor_iff", ["nat"]]]}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "neg_abs_le_neg", []]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Ioc_union_Ioc_eq_Ioc", ["finset"]]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "Ioc_succ_singleton", ["nat"]]]}]}, {"timestamp": 1651315890, "sha": "1c3ab8cd", "message": "feat(probability/notations): fix some notations, add a new one (#13828)", "changes": [{"oldPath": "src/probability/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}]}, {"timestamp": 1651296294, "sha": "91419608", "message": "feat(model_theory/syntax): Free variables (#13529)\nDefines `term.var_finset` and `bounded_formula.free_var_finset` to consist of all (free) variables used in a term or formula.\nDefines `term.restrict_var` and `bounded_formula.restrict_free_var` to restrict formulas to sets of their variables.", "changes": [{"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["add", "def", "free_var_finset", ["first_order", "language", "bounded_formula"]], ["add", "def", "restrict_free_var", ["first_order", "language", "bounded_formula"]], ["add", "def", "restrict_var", ["first_order", "language", "term"]], ["add", "def", "restrict_var_left", ["first_order", "language", "term"]], ["add", "def", "var_finset", ["first_order", "language", "term"]], ["add", "def", "var_finset_left", ["first_order", "language", "term"]]]}]}, {"timestamp": 1651285608, "sha": "bb45687b", "message": "feat(model_theory/syntax, semantics): Substitution of variables in terms and formulas (#13632)\nDefines `first_order.language.term.subst` and `first_order.language.bounded_formula.subst`, which substitute free variables in terms and formulas with terms.", "changes": [{"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["mod", "theorem", "realize_all_lift_at_one_self", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_subst", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_subst_aux", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_subst", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["add", "def", "subst", ["first_order", "language", "bounded_formula"]], ["add", "def", "subst", ["first_order", "language", "term"]]]}]}, {"timestamp": 1651270968, "sha": "a34ee7b7", "message": "chore(set_theory/game/basic): golf proof (#13810)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}]}, {"timestamp": 1651270968, "sha": "24bc2e1c", "message": "feat(set_theory/surreal/basic): add `pgame.numeric.left_lt_right` (#13809)\nAlso compress some trivial proofs into a single line", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "left_lt_right", ["pgame", "numeric"]]]}]}, {"timestamp": 1651270967, "sha": "a70166a3", "message": "feat(ring_theory): factorize a non-unit into irreducible factors without multiplying a unit (#13682)\nUsed in https://proofassistants.stackexchange.com/a/1312/93. Also adds simp lemma `multiset.prod_erase` used in the main proof and the auto-generated additive version, which is immediately analogous to [list.prod_erase](https://leanprover-community.github.io/mathlib_docs/data/list/big_operators.html#list.prod_erase). Also removes some extraneous namespace prefix.", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["mod", "theorem", "prod_eq_foldr", ["multiset"]], ["add", "theorem", "prod_erase", ["multiset"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "not_unit_iff_exists_factors_eq", ["wf_dvd_monoid"]]]}]}, {"timestamp": 1651264287, "sha": "059c8eb7", "message": "chore(set_theory/game/basic): fix a single space (#13806)", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}]}, {"timestamp": 1651264286, "sha": "89102286", "message": "chore(data/polynomial): use dot notation for sub lemmas (#13799)\nTo match the additive versions", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "sub_of_left", ["polynomial", "monic"]], ["add", "theorem", "sub_of_right", ["polynomial", "monic"]], ["del", "theorem", "monic_sub_of_left", ["polynomial"]], ["del", "theorem", "monic_sub_of_right", ["polynomial"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1651264285, "sha": "e56b8fea", "message": "feat(model_theory/graph): First-order language and theory of graphs (#13720)\nDefines `first_order.language.graph`, the language of graphs\nDefines `first_order.Theory.simple_graph`, the theory of simple graphs\nProduces models of the theory of simple graphs from simple graphs and vice versa.", "changes": [{"oldPath": null, "newPath": "src/model_theory/graph.lean", "changes": [["add", "theorem", "Structure_simple_graph_of_structure", ["first_order", "language"]], ["add", "theorem", "simple_graph_is_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "simple_graph_model_iff", ["first_order", "language", "Theory"]], ["add", "def", "adj", ["first_order", "language"]], ["add", "def", "simple_graph_of_structure", ["first_order", "language"]], ["add", "def", "Structure", ["simple_graph"]], ["add", "theorem", "simple_graph_of_structure", ["simple_graph"]]]}, {"oldPath": "src/model_theory/order.lean", "newPath": "src/model_theory/order.lean", "changes": []}]}, {"timestamp": 1651264283, "sha": "1d4ed4a5", "message": "chore(topology/algebra/valuation): use forgetful inheritance pattern for valued fields (#13691)\nThis allows us to solve a `uniform_space` diamond problem that arises when extending valuations to the completion of a valued field.\nMore precisely, the main goal of this PR is to make the following work:\n```lean\nimport topology.algebra.valued_field\nexample {K Γ₀ : Type*} [field K] [linear_ordered_comm_group_with_zero Γ₀] [valued K Γ₀] :\n uniform_space.completion.uniform_space K = valued.to_uniform_space :=\nrfl\n```", "changes": [{"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": [["mod", "def", "Fqt_infty", ["function_field"]], ["del", "theorem", "completable_top_field", ["function_field", "infty_valued_Fqt"]], ["del", "theorem", "separated_space", ["function_field", "infty_valued_Fqt"]], ["del", "theorem", "topological_division_ring", ["function_field", "infty_valued_Fqt"]], ["del", "def", "topological_space", ["function_field", "infty_valued_Fqt"]], ["del", "theorem", "uniform_add_group", ["function_field", "infty_valued_Fqt"]], ["del", "def", "uniform_space", ["function_field", "infty_valued_Fqt"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["del", "theorem", "separated_iff_one_closed", ["topological_group"]], ["del", "theorem", "separated_of_one_sep", ["topological_group"]], ["add", "theorem", "t2_space_iff_one_closed", ["topological_group"]], ["add", "theorem", "t2_space_of_one_sep", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/valuation.lean", "newPath": "src/topology/algebra/valuation.lean", "changes": [["add", "theorem", "subgroups_basis", ["valuation"]], ["add", "theorem", "has_basis_nhds_zero", ["valued"]], ["add", "theorem", "has_basis_uniformity", ["valued"]], ["add", "def", "mk'", ["valued"]], ["del", "theorem", "subgroups_basis", ["valued"]], ["add", "theorem", "to_uniform_space_eq", ["valued"]]]}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": [["add", "theorem", "closure_coe_completion_v_lt", ["valued"]], ["mod", "theorem", "continuous_extension", ["valued"]], ["mod", "theorem", "extension_extends", ["valued"]]]}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": [["add", "theorem", "singleton_mem_nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "has_basis_of_dense_inducing", ["filter", "has_basis"]]]}]}, {"timestamp": 1651264282, "sha": "90bd6f54", "message": "feat(model_theory/encoding): A bound on the number of bounded formulas (#13616)\nGives an encoding `first_order.language.bounded_formula.encoding` of bounded formulas as lists.\nUses the encoding to bound the number of bounded formulas with `first_order.language.bounded_formula.card_le`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "drop_sizeof_le", ["list"]]]}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": [["add", "theorem", "card_le", ["first_order", "language", "bounded_formula"]], ["add", "def", "list_decode", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "list_decode_encode_list", ["first_order", "language", "bounded_formula"]], ["add", "def", "list_encode", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "list_encode_sigma_injective", ["first_order", "language", "bounded_formula"]], ["add", "def", "sigma_all", ["first_order", "language", "bounded_formula"]], ["add", "def", "sigma_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "card_sigma", ["first_order", "language", "term"]]]}]}, {"timestamp": 1651264281, "sha": "9ce5e95a", "message": "feat(model_theory/syntax, semantics): A theory of infinite structures (#13580)\nDefines `first_order.language.infinite_theory`, a theory of infinite structures\nAdjusts the API of the theory of nonempty structures to match", "changes": [{"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["del", "theorem", "model_nonempty_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "realize_foldr_inf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_foldr_sup", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "model_infinite_theory_iff", ["first_order", "language"]], ["add", "theorem", "model_nonempty_theory_iff", ["first_order", "language"]], ["add", "theorem", "realize_card_ge", ["first_order", "language", "sentence"]], ["del", "theorem", "realize_nonempty", ["first_order", "language", "sentence"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["add", "def", "infinite_theory", ["first_order", "language"]], ["add", "def", "nonempty_theory", ["first_order", "language"]]]}]}, {"timestamp": 1651264280, "sha": "812518d9", "message": "feat(model_theory/semantics, satisfiability): Complete Theories (#13558)\nDefines `first_order.language.Theory.is_complete`, indicating that a theory is complete.\nDefines `first_order.language.complete_theory`, the complete theory of a structure.\nShows that the complete theory of a structure is complete.", "changes": [{"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "def", "is_complete", ["first_order", "language", "Theory"]], ["add", "theorem", "models_sentence_of_mem", ["first_order", "language", "Theory"]], ["add", "theorem", "is_complete", ["first_order", "language", "complete_theory"]], ["add", "theorem", "is_satisfiable", ["first_order", "language", "complete_theory"]], ["add", "theorem", "mem_or_not_mem", ["first_order", "language", "complete_theory"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "model_iff_subset_complete_theory", ["first_order", "language", "Theory"]], ["add", "def", "complete_theory", ["first_order", "language"]], ["add", "theorem", "realize_iff_of_model_complete_theory", ["first_order", "language"]], ["add", "theorem", "realize_not", ["first_order", "language", "sentence"]]]}]}, {"timestamp": 1651264279, "sha": "812e17f8", "message": "feat(analysis/normed_space/pointwise): Addition of balls (#13381)\nAdding two balls yields another ball.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "dist_neg", []], ["mod", "theorem", "dist_neg_neg", []], ["add", "theorem", "edist_neg", []], ["mod", "theorem", "edist_neg_neg", []]]}, {"oldPath": "src/analysis/normed/group/pointwise.lean", "newPath": "src/analysis/normed/group/pointwise.lean", "changes": [["add", "theorem", "add_ball", []], ["add", "theorem", "add_ball_zero", []], ["add", "theorem", "ball_add", []], ["mod", "theorem", "ball_add_singleton", []], ["add", "theorem", "ball_add_zero", []], ["add", "theorem", "ball_sub", []], ["add", "theorem", "ball_sub_singleton", []], ["add", "theorem", "ball_sub_zero", []], ["mod", "theorem", "ball_zero_add_singleton", []], ["add", "theorem", "ball_zero_sub_singleton", []], ["mod", "theorem", "bounded_iff_exists_norm_le", []], ["mod", "theorem", "closed_ball_add_singleton", []], ["add", "theorem", "closed_ball_sub_singleton", []], ["mod", "theorem", "closed_ball_zero_add_singleton", []], ["add", "theorem", "closed_ball_zero_sub_singleton", []], ["add", "theorem", "inf_edist_neg", []], ["add", "theorem", "inf_edist_neg_neg", []], ["add", "theorem", "add_closed_ball", ["is_compact"]], ["add", "theorem", "add_closed_ball_zero", ["is_compact"]], ["add", "theorem", "closed_ball_add", ["is_compact"]], ["add", "theorem", "closed_ball_sub", ["is_compact"]], ["add", "theorem", "closed_ball_zero_add", ["is_compact"]], ["add", "theorem", "closed_ball_zero_sub", ["is_compact"]], ["del", "theorem", "cthickening_eq_add_closed_ball", ["is_compact"]], ["add", "theorem", "sub_closed_ball", ["is_compact"]], ["add", "theorem", "sub_closed_ball_zero", ["is_compact"]], ["mod", "theorem", "add", ["metric", "bounded"]], ["mod", "theorem", "exists_pos_norm_le", ["metric", "bounded"]], ["add", "theorem", "neg", ["metric", "bounded"]], ["add", "theorem", "sub", ["metric", "bounded"]], ["add", "theorem", "neg_ball", []], ["add", "theorem", "neg_closed_ball", []], ["add", "theorem", "neg_cthickening", []], ["add", "theorem", "neg_thickening", []], ["mod", "theorem", "singleton_add_ball", []], ["mod", "theorem", "singleton_add_ball_zero", []], ["mod", "theorem", "singleton_add_closed_ball", []], ["mod", "theorem", "singleton_add_closed_ball_zero", []], ["add", "theorem", "singleton_sub_ball", []], ["add", "theorem", "singleton_sub_ball_zero", []], ["add", "theorem", "singleton_sub_closed_ball", []], ["add", "theorem", "singleton_sub_closed_ball_zero", []], ["add", "theorem", "sub_ball", []], ["add", "theorem", "sub_ball_zero", []], ["add", "theorem", "vadd_ball_zero", []], ["add", "theorem", "vadd_closed_ball_zero", []]]}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["add", "theorem", "ball_add_ball", []], ["add", "theorem", "ball_add_closed_ball", []], ["add", "theorem", "ball_sub_ball", []], ["add", "theorem", "ball_sub_closed_ball", []], ["add", "theorem", "closed_ball_add_ball", []], ["add", "theorem", "closed_ball_add_closed_ball", []], ["add", "theorem", "closed_ball_sub_ball", []], ["add", "theorem", "closed_ball_sub_closed_ball", []], ["add", "theorem", "cthickening_ball", []], ["add", "theorem", "cthickening_closed_ball", []], ["add", "theorem", "thickening_ball", []], ["add", "theorem", "thickening_closed_ball", []], ["del", "theorem", "vadd_ball_zero", []], ["del", "theorem", "vadd_closed_ball_zero", []]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "inv_singleton", ["set"]]]}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}]}, {"timestamp": 1651257528, "sha": "a54db9a4", "message": "feat(data/finset/basic): A finset that's a subset of a `directed` union is contained in one element (#13727)\nProves `directed.exists_mem_subset_of_finset_subset_bUnion`\nRenames `finset.exists_mem_subset_of_subset_bUnion_of_directed_on` to `directed_on.exists_mem_subset_of_finset_subset_bUnion`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "exists_mem_subset_of_finset_subset_bUnion", ["directed"]], ["add", "theorem", "exists_mem_subset_of_finset_subset_bUnion", ["directed_on"]], ["del", "theorem", "exists_mem_subset_of_subset_bUnion_of_directed_on", ["finset"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}]}, {"timestamp": 1651253285, "sha": "8624f6db", "message": "chore(analysis/normed/group/basic): add `nnnorm_sum_le_of_le` (#13795)\nThis is to match `norm_sum_le_of_le`.\nAlso tidies up the coercion syntax a little in `pi.semi_normed_group`.\nThe definition is syntactically identical, just with fewer unecessary type annotations.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "nnnorm_sum_le_of_le", []]]}]}, {"timestamp": 1651253283, "sha": "8360f2c8", "message": "feat(model_theory/language_map, bundled): Reducts of structures (#13745)\nDefines `first_order.language.Lhom.reduct` which pulls a structure back along a language map.\nDefines `first_order.language.Theory.Model.reduct` which sends a model of `(φ.on_Theory T)` to its reduct as a model of `T`.", "changes": [{"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": [["add", "def", "reduct", ["first_order", "language", "Theory", "Model"]]]}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": [["add", "def", "reduct", ["first_order", "language", "Lhom"]]]}]}, {"timestamp": 1651247940, "sha": "50c30283", "message": "chore(analysis/normed_space/operator_norm): move `continuous_linear_map.op_norm_lsmul` into the correct section (#13790)\nThis was in the \"seminorm\" section but was about regular norms.\nAlso relaxes some other typeclasses in the file. This file is still a mess with regards to assuming `nondiscrete_normed_field` when `normed_field` is enough, but that would require substantially more movement within the file.\nThis cleans up after #13165 and #13538", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "op_norm_lsmul", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lsmul_apply_le", ["continuous_linear_map"]], ["mod", "theorem", "to_span_singleton_smul'", ["continuous_linear_map"]]]}]}, {"timestamp": 1651247939, "sha": "64b3576f", "message": "feat(ring_theory/valuation/extend_to_localization): Extending valuations to localizations. (#13610)", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "theorem", "comap_apply", ["valuation"]]]}, {"oldPath": null, "newPath": "src/ring_theory/valuation/extend_to_localization.lean", "changes": [["add", "def", "extend_to_localization", ["valuation"]], ["add", "theorem", "extend_to_localization_apply_map_apply", ["valuation"]]]}]}, {"timestamp": 1651243160, "sha": "fe2917a4", "message": "feat(number_theory/primes_congruent_one): attempt to golf (#13787)\nAs suggested in the reviews of #12595 we try to golf the proof using the bound proved there.\nThis doesn't end up being as much of a golf as hoped due to annoying edge cases, but seems conceptually simpler.", "changes": [{"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": [["mod", "theorem", "exists_prime_ge_modeq_one", ["nat"]], ["mod", "theorem", "frequently_at_top_modeq_one", ["nat"]], ["mod", "theorem", "infinite_set_of_prime_modeq_one", ["nat"]]]}]}, {"timestamp": 1651243158, "sha": "a3beb628", "message": "feat(analysis/*): a sample of easy useful lemmas (#13697)\nLemmas needed for #13690", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "cpow_int_cast", ["complex"]], ["mod", "theorem", "cpow_nat_cast", ["complex"]], ["add", "theorem", "cpow_two", ["complex"]], ["add", "theorem", "rpow_two", ["ennreal"]], ["add", "theorem", "rpow_two", ["nnreal"]], ["add", "theorem", "rpow_two", ["real"]]]}, {"oldPath": "src/analysis/specific_limits/basic.lean", "newPath": "src/analysis/specific_limits/basic.lean", "changes": [["add", "theorem", "tendsto_nat_ceil_div_at_top", []], ["add", "theorem", "tendsto_nat_floor_at_top", []], ["add", "theorem", "tendsto_nat_floor_div_at_top", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "one_le_two", ["ennreal"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "tendsto_div_nhds_one_iff", []]]}]}, {"timestamp": 1651243157, "sha": "7373832e", "message": "chore(analysis/convex): move `convex_on_norm`, change API (#13631)\n* Move `convex_on_norm` from `specific_functions` to `topology`, use it to golf the proof of `convex_on_dist`.\n* The old `convex_on_norm` is now called `convex_on_univ_norm`. The new `convex_on_norm` is about convexity on any convex set.\n* Add `convex_on_univ_dist` and make `s : set E` an implicit argument in `convex_on_dist`.\nThis way APIs about convexity of norm and distance agree.", "changes": [{"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["del", "theorem", "convex_on_norm", []]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["mod", "theorem", "convex_on_dist", []], ["add", "theorem", "convex_on_norm", []], ["add", "theorem", "convex_on_univ_dist", []], ["add", "theorem", "convex_on_univ_norm", []]]}]}, {"timestamp": 1651243155, "sha": "ce79a27b", "message": "feat(analysis/normed_space/pi_Lp): add lemmas about `pi_Lp.equiv` (#13569)\nMost of these are trivial `dsimp` lemmas, but they also let us talk about the norm of constant vectors.", "changes": [{"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "equiv_add", ["pi_Lp"]], ["add", "theorem", "equiv_apply", ["pi_Lp"]], ["add", "theorem", "equiv_neg", ["pi_Lp"]], ["add", "theorem", "equiv_smul", ["pi_Lp"]], ["add", "theorem", "equiv_sub", ["pi_Lp"]], ["add", "theorem", "equiv_symm_add", ["pi_Lp"]], ["add", "theorem", "equiv_symm_apply", ["pi_Lp"]], ["add", "theorem", "equiv_symm_neg", ["pi_Lp"]], ["add", "theorem", "equiv_symm_smul", ["pi_Lp"]], ["add", "theorem", "equiv_symm_sub", ["pi_Lp"]], ["add", "theorem", "equiv_symm_zero", ["pi_Lp"]], ["add", "theorem", "equiv_zero", ["pi_Lp"]], ["add", "theorem", "nnnorm_equiv_symm_const", ["pi_Lp"]], ["add", "theorem", "nnnorm_equiv_symm_one", ["pi_Lp"]], ["add", "theorem", "norm_equiv_symm_const", ["pi_Lp"]], ["add", "theorem", "norm_equiv_symm_one", ["pi_Lp"]], ["add", "theorem", "zero_apply", ["pi_Lp"]]]}]}, {"timestamp": 1651243154, "sha": "e5612640", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add instances (#13376)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": []}]}, {"timestamp": 1651235132, "sha": "58552fe0", "message": "feat(set_theory/cardinal/basic): cardinality of a powerset (#13786)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "mk_powerset", ["cardinal"]]]}]}, {"timestamp": 1651235131, "sha": "b2e0a2d0", "message": "feat(group_theory/subgroup/basic): `inclusion` lemmas (#13754)\nA few lemmas for `set.inclusion`, `subgroup.inclusion`, `subalgebra.inclusion`.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["add", "theorem", "inclusion_mk", ["subalgebra"]], ["mod", "theorem", "inclusion_right", ["subalgebra"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "coe_inclusion", ["set"]], ["mod", "def", "inclusion", ["set"]], ["mod", "theorem", "inclusion_inclusion", ["set"]], ["mod", "theorem", "inclusion_injective", ["set"]], ["add", "theorem", "inclusion_mk", ["set"]], ["mod", "theorem", "inclusion_right", ["set"]], ["mod", "theorem", "inclusion_self", ["set"]], ["mod", "theorem", "range_inclusion", ["set"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "inclusion_inclusion", ["subgroup_class"]], ["add", "theorem", "inclusion_mk", ["subgroup_class"]], ["add", "theorem", "inclusion_right", ["subgroup_class"]], ["add", "theorem", "inclusion_self", ["subgroup_class"]]]}]}, {"timestamp": 1651235130, "sha": "8eb25641", "message": "feat(topology/instances/matrix): add `matrix` lemmas about `tsum` (#13677)\nThis adds lemmas about how `tsum` interacts with `diagonal` and `transpose`, along with the helper `summable` and `has_sum` lemmas.\nThis also moves `topology/algebra/matrix` to `topology/instances/matrix`, since that seems to align better with how other types are handled.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/matrix.lean", "newPath": "src/topology/instances/matrix.lean", "changes": [["add", "theorem", "continuous_matrix_diag", []], ["add", "theorem", "matrix_block_diagonal'", ["has_sum"]], ["add", "theorem", "matrix_block_diagonal", ["has_sum"]], ["add", "theorem", "matrix_diag", ["has_sum"]], ["add", "theorem", "matrix_diagonal", ["has_sum"]], ["add", "theorem", "matrix_transpose", ["has_sum"]], ["add", "theorem", "diagonal_tsum", ["matrix"]], ["add", "theorem", "transpose_tsum", ["matrix"]], ["add", "theorem", "matrix_block_diagonal'", ["summable"]], ["add", "theorem", "matrix_block_diagonal", ["summable"]], ["add", "theorem", "matrix_diag", ["summable"]], ["add", "theorem", "matrix_diagonal", ["summable"]], ["add", "theorem", "matrix_transpose", ["summable"]], ["add", "theorem", "summable_matrix_diagonal", []], ["add", "theorem", "summable_matrix_transpose", []]]}]}, {"timestamp": 1651230850, "sha": "889e9564", "message": "chore(analysis/asymptotics/asymptotics): relax `normed_group` to `semi_normed_group` in lemmas (#13642)\nThis file already uses `E` vs `E'` for `has_norm` vs `normed_group`. This adds an `E''` to this naming scheme for `normed_group`, and repurposes `E'` to `semi_normed_group`. The majority of the lemmas in this file generalize without any additional work.\nI've not attempted to relax the assumptions on lemmas where any proofs would have to change. Most of them would need their assumptions changing from `c ≠ 0` to `∥c∥ ≠ 0`, which is likely to be annoying.\nIn one place this results in dot notation breaking as the typeclass can no longer be found by unification.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["mod", "theorem", "bound_of_is_O_cofinite", ["asymptotics"]], ["mod", "theorem", "bound_of_is_O_nat_at_top", ["asymptotics"]], ["mod", "theorem", "eq_zero_imp", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_tendsto", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_tendsto_nhds", ["asymptotics", "is_O"]], ["mod", "theorem", "is_O_cofinite_iff", ["asymptotics"]], ["mod", "theorem", "is_O_const_const", ["asymptotics"]], ["mod", "theorem", "is_O_const_const_iff", ["asymptotics"]], ["mod", "theorem", "is_O_const_of_tendsto", ["asymptotics"]], ["mod", "theorem", "is_O_nat_at_top_iff", ["asymptotics"]], ["mod", "theorem", "is_O_one_nat_at_top_iff", ["asymptotics"]], ["mod", "theorem", "is_O_one_of_tendsto", ["asymptotics"]], ["mod", "theorem", "is_O_pure", ["asymptotics"]], ["mod", "theorem", "eq_zero_imp", ["asymptotics", "is_O_with"]], ["mod", "theorem", "is_O_with_const_const", ["asymptotics"]], ["mod", "theorem", "is_O_zero_right_iff", ["asymptotics"]], ["mod", "theorem", "trans_tendsto", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_const_const_iff", ["asymptotics"]], ["mod", "theorem", "is_o_const_id_at_bot", ["asymptotics"]], ["mod", "theorem", "is_o_const_id_at_top", ["asymptotics"]], ["mod", "theorem", "is_o_const_id_comap_norm_at_top", ["asymptotics"]], ["mod", "theorem", "is_o_const_iff", ["asymptotics"]], ["mod", "theorem", "is_o_const_iff_is_o_one", ["asymptotics"]], ["mod", "theorem", "is_o_const_left", ["asymptotics"]], ["mod", "theorem", "is_o_const_left_of_ne", ["asymptotics"]], ["mod", "theorem", "is_o_id_const", ["asymptotics"]], ["mod", "theorem", "is_o_one_iff", ["asymptotics"]], ["mod", "theorem", "is_o_pure", ["asymptotics"]], ["mod", "theorem", "is_o_top", ["asymptotics"]]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}]}, {"timestamp": 1651224717, "sha": "aab0b2df", "message": "feat(algebra/algebra/basic): add some lemmas about `subsemiring` and `algebra_map` (#13767)\nThese are analogs of `algebra_map_of_subring`, `coe_algebra_map_of_subring` and `algebra_map_of_subring_apply`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_of_subsemiring", ["algebra"]], ["add", "theorem", "algebra_map_of_subsemiring_apply", ["algebra"]], ["add", "theorem", "coe_algebra_map_of_subsemiring", ["algebra"]]]}]}, {"timestamp": 1651220775, "sha": "8abfb3ba", "message": "feat(representation_theory/Rep): Rep k G is abelian (#13689)", "changes": [{"oldPath": "src/category_theory/abelian/functor_category.lean", "newPath": "src/category_theory/abelian/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/transfer.lean", "newPath": "src/category_theory/abelian/transfer.lean", "changes": [["add", "def", "abelian_of_equivalence", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/functor_category.lean", "newPath": "src/category_theory/limits/shapes/functor_category.lean", "changes": []}, {"oldPath": "src/representation_theory/Action.lean", "newPath": "src/representation_theory/Action.lean", "changes": [["add", "def", "abelian_aux", ["Action"]]]}, {"oldPath": "src/representation_theory/Rep.lean", "newPath": "src/representation_theory/Rep.lean", "changes": []}]}, {"timestamp": 1651214127, "sha": "bc65b7cd", "message": "feat(data/list/basic): add `list.range_map` (#13777)\n* add `list.range_map` and `list.range_map_coe`;\n* add `submonoid.closure_eq_image_prod` and `add_submonoid.closure_eq_image_prod`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "range_map", ["list"]], ["add", "theorem", "range_map_coe", ["list"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "closure_eq_image_prod", ["submonoid"]]]}]}, {"timestamp": 1651214126, "sha": "992e26fa", "message": "feat(topology/algebra/affine): a sufficiently small dilation of a point in the interior of a set lands in the interior (#13766)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_vsub_eq_sub_vsub", []], ["add", "theorem", "vsub_ne_zero", []]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "ball_eq", []], ["add", "theorem", "nhds_basis_norm_lt", ["normed_group"]], ["add", "theorem", "nhds_zero_basis_norm_lt", ["normed_group"]]]}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["mod", "theorem", "is_closed_direction_iff", ["affine_subspace"]], ["mod", "theorem", "antilipschitz_with_line_map", []], ["add", "theorem", "eventually_homothety_image_subset_of_finite_subset_interior", []], ["add", "theorem", "eventually_homothety_mem_of_mem_interior", []]]}]}, {"timestamp": 1651214125, "sha": "b4cad379", "message": "chore(ring_theory/mv_polynomial/basic): golf (#13765)", "changes": [{"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1651214124, "sha": "5c1ee352", "message": "feat(set_theory/game/pgame): `x - 0 = x + 0` (#13731)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "sub_zero", ["pgame"]]]}]}, {"timestamp": 1651206266, "sha": "7170b66c", "message": "chore(scripts): update nolints.txt (#13775)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1651206265, "sha": "ead85e61", "message": "chore(*/equiv): add simp to refl_apply and trans_apply where missing (#13760)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "trans_apply", ["alg_equiv"]]]}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["mod", "theorem", "refl_apply", ["affine_equiv"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["mod", "theorem", "refl_apply", ["order_iso"]], ["mod", "theorem", "trans_apply", ["order_iso"]]]}]}, {"timestamp": 1651206264, "sha": "e294500e", "message": "feat(category_theory/monoidal): transport rigid structure over an equivalence (#13736)", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "hom_inv_id_tensor'", ["category_theory", "monoidal_category"]], ["add", "theorem", "inv_hom_id_tensor'", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_hom_inv_id'", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_inv_hom_id'", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/rigid.lean", "newPath": "src/category_theory/monoidal/rigid.lean", "changes": [["add", "def", "exact_pairing_congr", ["category_theory"]], ["add", "def", "exact_pairing_congr_left", ["category_theory"]], ["add", "def", "exact_pairing_congr_right", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/rigid/of_equivalence.lean", "changes": [["add", "def", "exact_pairing_of_faithful", ["category_theory"]], ["add", "def", "exact_pairing_of_fully_faithful", ["category_theory"]], ["add", "def", "has_left_dual_of_equivalence", ["category_theory"]], ["add", "def", "has_right_dual_of_equivalence", ["category_theory"]], ["add", "def", "left_rigid_category_of_equivalence", ["category_theory"]], ["add", "def", "right_rigid_category_of_equivalence", ["category_theory"]], ["add", "def", "rigid_category_of_equivalence", ["category_theory"]]]}]}, {"timestamp": 1651206263, "sha": "ccb9d64b", "message": "feat(category_theory/braiding): pull back a braiding along a faithful functor (#13684)\nI intend to use this to define the braiding/symmetry on `Rep k G` using the existing braiding/symmetry on `Module k`.", "changes": [{"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": [["mod", "theorem", "map_injective", ["category_theory", "functor"]], ["mod", "theorem", "map_iso_injective", ["category_theory", "functor"]], ["mod", "def", "preimage", ["category_theory", "functor"]], ["add", "def", "preimage_iso", ["category_theory", "functor"]], ["add", "theorem", "preimage_iso_map_iso", ["category_theory", "functor"]], ["del", "def", "preimage_iso", ["category_theory"]], ["del", "theorem", "preimage_iso_hom", ["category_theory"]], ["del", "theorem", "preimage_iso_inv", ["category_theory"]], ["del", "theorem", "preimage_iso_map_iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": [["add", "def", "braided_category_of_faithful", ["category_theory"]], ["add", "def", "braided_category_of_fully_faithful", ["category_theory"]], ["add", "def", "symmetric_category_of_faithful", ["category_theory"]]]}, {"oldPath": "src/category_theory/subobject/mono_over.lean", "newPath": "src/category_theory/subobject/mono_over.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1651204090, "sha": "8edb3d16", "message": "feat(representation_theory/Rep): the category of representations (#13683)\nWe define `Rep k G`, the category of `k`-linear representations of a monoid `G`.\nHappily, by abstract nonsense we get that this has (co)limits and a monoidal structure for free.\nThis should play well with the new design for representations in #13573.", "changes": [{"oldPath": null, "newPath": "src/representation_theory/Action.lean", "changes": [["add", "def", "Action_punit_equivalence", ["Action"]], ["add", "theorem", "comp_hom", ["Action"]], ["add", "def", "forget", ["Action"]], ["add", "def", "forget_monoidal", ["Action"]], ["add", "def", "counit_iso", ["Action", "functor_category_equivalence"]], ["add", "def", "functor", ["Action", "functor_category_equivalence"]], ["add", "def", "inverse", ["Action", "functor_category_equivalence"]], ["add", "def", "unit_iso", ["Action", "functor_category_equivalence"]], ["add", "def", "functor_category_equivalence", ["Action"]], ["add", "def", "functor_category_equivalence_comp_evaluation", ["Action"]], ["add", "def", "comp", ["Action", "hom"]], ["add", "def", "id", ["Action", "hom"]], ["add", "structure", "hom", ["Action"]], ["add", "theorem", "id_hom", ["Action"]], ["add", "def", "mk_iso", ["Action"]], ["add", "def", "res", ["Action"]], ["add", "def", "res_comp", ["Action"]], ["add", "def", "res_id", ["Action"]], ["add", "def", "trivial", ["Action"]], ["add", "def", "ρ_Aut", ["Action"]], ["add", "theorem", "ρ_one", ["Action"]], ["add", "structure", "Action", []], ["add", "def", "map_Action", ["category_theory", "functor"]]]}, {"oldPath": null, "newPath": "src/representation_theory/Rep.lean", "changes": [["add", "def", "of", ["Rep"]], ["add", "def", "Rep", []]]}]}, {"timestamp": 1651192196, "sha": "11a4a745", "message": "feat(ring_theory/localization/basic): generalize to semiring (#13459)\nThe main ingredient of this PR is the definition of `is_localization.lift` that works for semirings. The previous definition uses `ring_hom.mk'` that essentially states that `f 0 = 0` follows from other conditions. This does not holds for semirings. Instead, this PR defines the localization of monoid with zero, and uses this to define `is_localization.lift`.\n- I think definitions around `localization_with_zero_map` might be ad hoc, and any suggestions for improvement are welcome!\n- I plan to further generalize the localization API for semirings. This needs generalization of other ring theory stuff such as `local_ring` and `is_domain` (generalizing `local_ring` is partially done in #13341).", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "lift_on_zero", ["localization"]], ["add", "theorem", "mk_zero", ["localization"]], ["mod", "theorem", "lift_left_inverse", ["submonoid", "localization_map"]], ["add", "theorem", "sec_zero_fst", ["submonoid", "localization_map"]], ["add", "def", "to_monoid_with_zero_hom", ["submonoid", "localization_with_zero_map"]], ["add", "structure", "localization_with_zero_map", ["submonoid"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "theorem", "lift_spec_mul_add", ["is_localization"]], ["mod", "theorem", "map_comp_map", ["is_localization"]], ["mod", "theorem", "map_map", ["is_localization"]], ["add", "theorem", "mk'_add_eq_iff_add_mul_eq_mul", ["is_localization"]], ["add", "theorem", "mul_add_inv_left", ["is_localization"]], ["mod", "def", "to_localization_map", ["is_localization"]], ["add", "def", "to_localization_with_zero_map", ["is_localization"]], ["del", "theorem", "lift_on_zero", ["localization"]], ["mod", "theorem", "mk_nat_cast", ["localization"]], ["del", "theorem", "mk_zero", ["localization"]]]}]}, {"timestamp": 1651185775, "sha": "214e2f1c", "message": "chore(set_theory/surreal/basic): Allow dot notation on `pgame.numeric` (#13768)\nRename `numeric_neg`/`numeric_add` to `numeric.add`/`numeric.neg`. Prove `numeric.sub` in passing.", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "add", ["pgame", "numeric"]], ["add", "theorem", "neg", ["pgame", "numeric"]], ["add", "theorem", "sub", ["pgame", "numeric"]], ["del", "theorem", "numeric_add", ["pgame"]], ["del", "theorem", "numeric_neg", ["pgame"]]]}]}, {"timestamp": 1651181013, "sha": "ccd37746", "message": "chore(ring_theory/*): dot notation for `submodule.fg` and `subalgebra.fg` (#13737)", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": [["add", "theorem", "map", ["subalgebra", "fg"]], ["add", "theorem", "prod", ["subalgebra", "fg"]], ["del", "theorem", "fg_map", ["subalgebra"]], ["del", "theorem", "fg_prod", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "mul", ["submodule", "fg"]], ["add", "theorem", "pow", ["submodule", "fg"]], ["add", "theorem", "prod", ["submodule", "fg"]], ["add", "theorem", "sup", ["submodule", "fg"]], ["del", "theorem", "fg_mul", ["submodule"]], ["del", "theorem", "fg_pow", ["submodule"]], ["del", "theorem", "fg_prod", ["submodule"]], ["del", "theorem", "fg_sup", ["submodule"]]]}]}, {"timestamp": 1651181012, "sha": "220d4b89", "message": "doc(order/filter/small_sets): fix in doc (#13648)", "changes": [{"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": []}]}, {"timestamp": 1651178941, "sha": "c096a33a", "message": "feat(set_theory/game/birthday): Game birthday is zero iff empty (#13715)", "changes": [{"oldPath": "src/set_theory/game/birthday.lean", "newPath": "src/set_theory/game/birthday.lean", "changes": [["add", "theorem", "birthday_eq_zero", ["pgame"]]]}]}, {"timestamp": 1651175232, "sha": "8a32fdfd", "message": "feat(cyclotomic/eval): (q - 1) ^ totient n < |ϕₙ(q)| (#12595)\nOriginally from the Wedderburn PR, but generalized to include an exponent.", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": [["add", "theorem", "cyclotomic_eval_lt_sub_one_pow_totient", ["polynomial"]], ["add", "theorem", "cyclotomic_nonneg", ["polynomial"]], ["add", "theorem", "cyclotomic_pos'", ["polynomial"]], ["add", "theorem", "cyclotomic_pos_and_nonneg", ["polynomial"]], ["add", "theorem", "sub_one_lt_nat_abs_cyclotomic_eval", ["polynomial"]], ["add", "theorem", "sub_one_pow_totient_lt_cyclotomic_eval", ["polynomial"]]]}]}, {"timestamp": 1651167320, "sha": "0d3f8a71", "message": "feat(ring_theory/submonoid/membership): generalize a few lemmas to `mul_mem_class` (#13748)\nThis generalizes lemmas relating to the additive closure of a multiplicative monoid so that they also apply to multiplicative semigroups using `mul_mem_class`", "changes": [{"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mul_left_mem_add_closure", ["mul_mem_class"]], ["add", "theorem", "mul_mem_add_closure", ["mul_mem_class"]], ["add", "theorem", "mul_right_mem_add_closure", ["mul_mem_class"]], ["del", "theorem", "mul_left_mem_add_closure", ["submonoid"]], ["del", "theorem", "mul_mem_add_closure", ["submonoid"]], ["del", "theorem", "mul_right_mem_add_closure", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}]}, {"timestamp": 1651160871, "sha": "c5bf4808", "message": "fix(group_theory/subsemigroup/basic): change `mul_one_class` to `has_mul` (#13747)", "changes": [{"oldPath": "src/group_theory/subsemigroup/basic.lean", "newPath": "src/group_theory/subsemigroup/basic.lean", "changes": []}]}, {"timestamp": 1651153950, "sha": "1c92dfdf", "message": "chore(*/equiv): missing refl_symm lemmas (#13761)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "refl_symm", ["alg_equiv"]]]}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["add", "theorem", "refl_symm", ["mul_equiv"]]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "refl_symm", ["lie_equiv"]]]}]}, {"timestamp": 1651133278, "sha": "0cb20fca", "message": "feat(set_theory/ordinal/basic): `max a 0 = a` (#13734)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["add", "theorem", "max_eq_zero", ["ordinal"]], ["add", "theorem", "max_zero_left", ["ordinal"]], ["add", "theorem", "max_zero_right", ["ordinal"]]]}]}, {"timestamp": 1651133277, "sha": "98e78488", "message": "feat(set_theory/game/pgame): Right moves of nat game are empty (#13730)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1651130899, "sha": "a0af1474", "message": "feat(set_theory/game/pgame): An empty game is a relabelling of `0` (#13753)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "def", "is_empty", ["pgame", "relabelling"]]]}]}, {"timestamp": 1651103546, "sha": "e89510c2", "message": "fix(ring_theory/subsemiring/basic): make `inclusion` a `ring_hom`, not a `monoid_hom` (#13746)", "changes": [{"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["mod", "def", "inclusion", ["subsemiring"]]]}]}, {"timestamp": 1651091535, "sha": "60bb0711", "message": "feat(logic/unit): Make `punit.star` simp normal form of `default : punit` (#13741)", "changes": [{"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "default_eq_star", ["punit"]]]}]}, {"timestamp": 1651073699, "sha": "dc589c89", "message": "fix(topology/bornology): turn `bounded_space` into a `mixin` (#13615)\nOtherwise, we would need `bounded_pseudo_metric_space`,\n`bounded_metric_space` etc.\nAlso add `set.finite.is_bounded`, `bornology.is_bounded.all`, and\n`bornology.is_bounded_univ`.", "changes": [{"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": [["add", "theorem", "cobounded_eq_bot", ["bornology"]], ["add", "theorem", "cobounded_eq_bot_iff", ["bornology"]], ["add", "theorem", "all", ["bornology", "is_bounded"]], ["mod", "theorem", "is_bounded_compl_iff", ["bornology"]], ["add", "theorem", "is_bounded_univ", ["bornology"]], ["add", "theorem", "all", ["bornology", "is_cobounded"]], ["mod", "theorem", "is_cobounded_compl_iff", ["bornology"]], ["add", "theorem", "is_bounded", ["set", "finite"]]]}]}, {"timestamp": 1651071456, "sha": "d3997443", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): define the topology of weak convergence of measures and prove some lemmas about it. (#9943)\nThis PR has the definition of the topology of weak convergence (\"convergence in law\" / \"convergence in distribution\") on `finite_measure _` and on `probability_measure _`.", "changes": [{"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "coe_to_weak_dual_bcnn", ["measure_theory", "finite_measure"]], ["add", "theorem", "continuous_test_against_nn_eval", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_iff_forall_lintegral_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_iff_forall_test_against_nn_tendsto", ["measure_theory", "finite_measure"]], ["add", "theorem", "tendsto_iff_weak_star_tendsto", ["measure_theory", "finite_measure"]], ["add", "def", "to_weak_dual_bcnn", ["measure_theory", "finite_measure"]], ["add", "theorem", "to_weak_dual_bcnn_apply", ["measure_theory", "finite_measure"]], ["add", "theorem", "to_weak_dual_bcnn_continuous", ["measure_theory", "finite_measure"]], ["del", "def", "to_weak_dual_bounded_continuous_nnreal", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_to_weak_dual_bcnn", ["measure_theory", "probability_measure"]], ["add", "theorem", "continuous_test_against_nn_eval", ["measure_theory", "probability_measure"]], ["add", "theorem", "tendsto_iff_forall_lintegral_tendsto", ["measure_theory", "probability_measure"]], ["add", "theorem", "tendsto_nhds_iff_to_finite_measures_tendsto_nhds", ["measure_theory", "probability_measure"]], ["del", "def", "test_against_nn", ["measure_theory", "probability_measure"]], ["del", "theorem", "test_against_nn_coe_eq", ["measure_theory", "probability_measure"]], ["del", "theorem", "test_against_nn_const", ["measure_theory", "probability_measure"]], ["del", "theorem", "test_against_nn_mono", ["measure_theory", "probability_measure"]], ["add", "theorem", "to_finite_measure_continuous", ["measure_theory", "probability_measure"]], ["add", "theorem", "to_finite_measure_embedding", ["measure_theory", "probability_measure"]], ["del", "theorem", "to_finite_measure_test_against_nn_eq_test_against_nn", ["measure_theory", "probability_measure"]], ["add", "def", "to_weak_dual_bcnn", ["measure_theory", "probability_measure"]], ["add", "theorem", "to_weak_dual_bcnn_apply", ["measure_theory", "probability_measure"]], ["add", "theorem", "to_weak_dual_bcnn_continuous", ["measure_theory", "probability_measure"]], ["del", "def", "to_weak_dual_bounded_continuous_nnreal", ["measure_theory", "probability_measure"]]]}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": [["add", "theorem", "tendsto_iff_forall_eval_tendsto_top_dual_pairing", []]]}]}, {"timestamp": 1651056881, "sha": "ccefda07", "message": "perf(representation_theory/basic): speed up `representation.lin_hom` by a factor of 20 (#13739)\n`ext` was over-expanding, and the `simp`s were not all squeezed.\nThis is causing timeouts in other PRs.", "changes": [{"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": []}]}, {"timestamp": 1651042905, "sha": "5ac5c922", "message": "feat(combinatorics/simple_graph/regularity/uniform): Witnesses of non-uniformity (#13155)\nProvide ways to pick witnesses of non-uniformity.", "changes": [{"oldPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "newPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "changes": [["mod", "theorem", "bot_is_uniform", ["finpartition"]], ["add", "theorem", "mono", ["finpartition", "is_uniform"]], ["mod", "theorem", "non_uniforms_bot", ["finpartition"]], ["add", "theorem", "non_uniforms_mono", ["finpartition"]], ["add", "theorem", "nonuniform_witness_mem_nonuniform_witnesses", ["finpartition"]], ["add", "theorem", "left_nonuniform_witnesses_card", ["simple_graph"]], ["add", "theorem", "left_nonuniform_witnesses_subset", ["simple_graph"]], ["add", "theorem", "nonuniform_witness_card_le", ["simple_graph"]], ["add", "theorem", "nonuniform_witness_spec", ["simple_graph"]], ["add", "theorem", "nonuniform_witness_subset", ["simple_graph"]], ["add", "theorem", "nonuniform_witnesses_spec", ["simple_graph"]], ["add", "theorem", "not_is_uniform_iff", ["simple_graph"]], ["add", "theorem", "right_nonuniform_witnesses_card", ["simple_graph"]], ["add", "theorem", "right_nonuniform_witnesses_subset", ["simple_graph"]]]}]}, {"timestamp": 1651024876, "sha": "cb2b02ff", "message": "feat(representation_theory/basic): representation theory without scalar actions (#13573)\nThis PR rewrites the files `representation_theory/basic` and `representation_theory/invariants` so that they avoid making use of scalar actions. It also includes the new definitions and lemmas of PR #13502 written with this new approach.", "changes": [{"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["add", "theorem", "as_algebra_hom_of", ["representation"]], ["add", "theorem", "as_group_hom_apply", ["representation"]], ["del", "theorem", "as_module_apply", ["representation"]], ["mod", "theorem", "char_conj", ["representation"]], ["add", "theorem", "char_mul_comm", ["representation"]], ["mod", "theorem", "char_one", ["representation"]], ["add", "def", "dual", ["representation"]], ["add", "theorem", "dual_apply", ["representation"]], ["add", "def", "lin_hom", ["representation"]], ["add", "theorem", "lin_hom_apply", ["representation"]], ["del", "theorem", "of_smul", ["representation"]], ["add", "def", "tprod", ["representation"]], ["add", "theorem", "tprod_apply", ["representation"]], ["add", "def", "trivial", ["representation"]], ["add", "theorem", "trivial_def", ["representation"]], ["add", "def", "representation", []]]}, {"oldPath": "src/representation_theory/invariants.lean", "newPath": "src/representation_theory/invariants.lean", "changes": [["add", "theorem", "average_def", ["group_algebra"]], ["add", "theorem", "mul_average_left", ["group_algebra"]], ["add", "theorem", "mul_average_right", ["group_algebra"]], ["del", "theorem", "average_def", ["representation"]], ["add", "theorem", "average_map_id", ["representation"]], ["add", "theorem", "average_map_invariant", ["representation"]], ["del", "theorem", "invariants'_carrier", ["representation"]], ["mod", "theorem", "mem_invariants", ["representation"]], ["del", "theorem", "mul_average_left", ["representation"]], ["del", "theorem", "mul_average_right", ["representation"]], ["del", "theorem", "smul_average_id", ["representation"]], ["del", "theorem", "smul_average_invariant", ["representation"]]]}]}, {"timestamp": 1651017888, "sha": "79e309b7", "message": "feat(set_theory/game/pgame): Define `is_option` relation (#13700)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "mk_left", ["pgame", "is_option"]], ["add", "theorem", "mk_right", ["pgame", "is_option"]], ["add", "inductive", "is_option", ["pgame"]], ["add", "theorem", "wf_is_option", ["pgame"]]]}]}, {"timestamp": 1651010734, "sha": "48997d7b", "message": "fix(data/set/basic): fix name of `has_mem.mem.out` (#13721)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "out", ["has_mem", "mem"]], ["del", "theorem", "out", ["set", "has_mem", "mem"]]]}]}, {"timestamp": 1651004340, "sha": "b00a7f8a", "message": "refactor(number_theory/padics/padic_norm): split file (#13576)\nThis PR splits the initial part of the `padic_norm.lean` file that defines p-adic valuations into a new file called `padic_val.lean`. This split makes sense to me since it seems most files importing this don't actually use the norm, so those files can build more in parallel. It also seems like a good organizational change: This way people can look at the files in this directory and see immediately where the valuation is defined, and people looking for the definition of `padic_norm` in `padic_norm.lean` don't have to scroll.", "changes": [{"oldPath": "src/algebra/gcd_monoid/nat.lean", "newPath": "src/algebra/gcd_monoid/nat.lean", "changes": []}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["del", "theorem", "dvd_of_one_le_padic_val_nat", []], ["del", "theorem", "one_le_padic_val_nat_of_dvd", []], ["del", "theorem", "eq_zero_of_not_dvd", ["padic_val_int"]], ["del", "theorem", "mul", ["padic_val_int"]], ["del", "theorem", "of_nat", ["padic_val_int"]], ["del", "theorem", "of_ne_one_ne_zero", ["padic_val_int"]], ["del", "theorem", "self", ["padic_val_int"]], ["del", "def", "padic_val_int", []], ["del", "theorem", "padic_val_int_dvd", []], ["del", "theorem", "padic_val_int_dvd_iff", []], ["del", "theorem", "padic_val_int_mul_eq_succ", []], ["del", "theorem", "padic_val_int_self", []], ["del", "theorem", "eq_zero_of_not_dvd", ["padic_val_nat"]], ["del", "theorem", "self", ["padic_val_nat"]], ["del", "def", "padic_val_nat", []], ["del", "theorem", "padic_val_nat_def", []], ["del", "theorem", "padic_val_nat_dvd_iff", []], ["del", "theorem", "padic_val_nat_eq_factorization", []], ["del", "theorem", "padic_val_nat_primes", []], ["del", "theorem", "padic_val_nat_self", []], ["del", "theorem", "finite_int_prime_iff", ["padic_val_rat"]], ["del", "theorem", "le_padic_val_rat_add_of_le", ["padic_val_rat"]], ["del", "theorem", "min_le_padic_val_rat_add", ["padic_val_rat"]], ["del", "theorem", "multiplicity_sub_multiplicity", ["padic_val_rat"]], ["del", "theorem", "of_int", ["padic_val_rat"]], ["del", "theorem", "of_int_multiplicity", ["padic_val_rat"]], ["del", "theorem", "of_nat", ["padic_val_rat"]], ["del", "theorem", "padic_val_rat_le_padic_val_rat_iff", ["padic_val_rat"]], ["del", "theorem", "self", ["padic_val_rat"]], ["del", "theorem", "sum_pos_of_pos", ["padic_val_rat"]], ["del", "def", "padic_val_rat", []], ["del", "theorem", "padic_val_rat_of_nat", []], ["del", "theorem", "pow_padic_val_nat_dvd", []], ["del", "theorem", "pow_succ_padic_val_nat_not_dvd", []], ["del", "theorem", "prod_pow_prime_padic_val_nat", []], ["del", "theorem", "range_pow_padic_val_nat_subset_divisors'", []], ["del", "theorem", "range_pow_padic_val_nat_subset_divisors", []], ["del", "theorem", "zero_le_padic_val_rat_of_nat", []]]}, {"oldPath": null, "newPath": "src/number_theory/padics/padic_val.lean", "changes": [["add", "theorem", "dvd_of_one_le_padic_val_nat", []], ["add", "theorem", "one_le_padic_val_nat_of_dvd", []], ["add", "theorem", "eq_zero_of_not_dvd", ["padic_val_int"]], ["add", "theorem", "mul", ["padic_val_int"]], ["add", "theorem", "of_nat", ["padic_val_int"]], ["add", "theorem", "of_ne_one_ne_zero", ["padic_val_int"]], ["add", "theorem", "self", ["padic_val_int"]], ["add", "def", "padic_val_int", []], ["add", "theorem", "padic_val_int_dvd", []], ["add", "theorem", "padic_val_int_dvd_iff", []], ["add", "theorem", "padic_val_int_mul_eq_succ", []], ["add", "theorem", "padic_val_int_self", []], ["add", "theorem", "eq_zero_of_not_dvd", ["padic_val_nat"]], ["add", "theorem", "self", ["padic_val_nat"]], ["add", "def", "padic_val_nat", []], ["add", "theorem", "padic_val_nat_def", []], ["add", "theorem", "padic_val_nat_dvd_iff", []], ["add", "theorem", "padic_val_nat_eq_factorization", []], ["add", "theorem", "padic_val_nat_primes", []], ["add", "theorem", "padic_val_nat_self", []], ["add", "theorem", "finite_int_prime_iff", ["padic_val_rat"]], ["add", "theorem", "le_padic_val_rat_add_of_le", ["padic_val_rat"]], ["add", "theorem", "min_le_padic_val_rat_add", ["padic_val_rat"]], ["add", "theorem", "multiplicity_sub_multiplicity", ["padic_val_rat"]], ["add", "theorem", "of_int", ["padic_val_rat"]], ["add", "theorem", "of_int_multiplicity", ["padic_val_rat"]], ["add", "theorem", "of_nat", ["padic_val_rat"]], ["add", "theorem", "padic_val_rat_le_padic_val_rat_iff", ["padic_val_rat"]], ["add", "theorem", "self", ["padic_val_rat"]], ["add", "theorem", "sum_pos_of_pos", ["padic_val_rat"]], ["add", "def", "padic_val_rat", []], ["add", "theorem", "padic_val_rat_of_nat", []], ["add", "theorem", "pow_padic_val_nat_dvd", []], ["add", "theorem", "pow_succ_padic_val_nat_not_dvd", []], ["add", "theorem", "prod_pow_prime_padic_val_nat", []], ["add", "theorem", "range_pow_padic_val_nat_subset_divisors'", []], ["add", "theorem", "range_pow_padic_val_nat_subset_divisors", []], ["add", "theorem", "zero_le_padic_val_rat_of_nat", []]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}]}, {"timestamp": 1650998504, "sha": "de79a763", "message": "chore(topology/continuous_function/zero_at_infty): add `is_central_scalar` instance (#13710)", "changes": [{"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}]}, {"timestamp": 1650998503, "sha": "76de6f75", "message": "feat(group_theory/subsemigroup/operations): port from submonoid (#12112)\nTaken from `group_theory.submonoid.operations`, trying to keep as much API as possible", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["del", "theorem", "coe_mul", ["submonoid_class"]], ["del", "theorem", "mk_mul_mk", ["submonoid_class"]], ["del", "theorem", "mul_def", ["submonoid_class"]]]}, {"oldPath": null, "newPath": "src/group_theory/subsemigroup/operations.lean", "changes": [["add", "def", "to_subsemigroup'", ["add_subsemigroup"]], ["add", "theorem", "to_subsemigroup'_closure", ["add_subsemigroup"]], ["add", "def", "to_subsemigroup", ["add_subsemigroup"]], ["add", "theorem", "to_subsemigroup_closure", ["add_subsemigroup"]], ["add", "def", "of_left_inverse", ["mul_equiv"]], ["add", "def", "subsemigroup_congr", ["mul_equiv"]], ["add", "def", "subsemigroup_map", ["mul_equiv"]], ["add", "def", "cod_srestrict", ["mul_hom"]], ["add", "theorem", "coe_srange", ["mul_hom"]], ["add", "theorem", "coe_srange_restrict", ["mul_hom"]], ["add", "theorem", "map_mclosure", ["mul_hom"]], ["add", "theorem", "map_srange", ["mul_hom"]], ["add", "theorem", "mclosure_preimage_le", ["mul_hom"]], ["add", "theorem", "mem_srange", ["mul_hom"]], ["add", "theorem", "prod_map_comap_prod'", ["mul_hom"]], ["add", "def", "srange", ["mul_hom"]], ["add", "theorem", "srange_eq_map", ["mul_hom"]], ["add", "def", "srange_restrict", ["mul_hom"]], ["add", "theorem", "srange_restrict_surjective", ["mul_hom"]], ["add", "theorem", "srange_top_iff_surjective", ["mul_hom"]], ["add", "theorem", "srange_top_of_surjective", ["mul_hom"]], ["add", "def", "srestrict", ["mul_hom"]], ["add", "theorem", "srestrict_apply", ["mul_hom"]], ["add", "def", "subsemigroup_comap", ["mul_hom"]], ["add", "def", "subsemigroup_map", ["mul_hom"]], ["add", "theorem", "subsemigroup_map_surjective", ["mul_hom"]], ["add", "theorem", "coe_mul", ["mul_mem_class"]], ["add", "theorem", "coe_subtype", ["mul_mem_class"]], ["add", "theorem", "mk_mul_mk", ["mul_mem_class"]], ["add", "theorem", "mul_def", ["mul_mem_class"]], ["add", "def", "subtype", ["mul_mem_class"]], ["add", "theorem", "apply_coe_mem_map", ["subsemigroup"]], ["add", "theorem", "bot_prod_bot", ["subsemigroup"]], ["add", "theorem", "closure_closure_coe_preimage", ["subsemigroup"]], ["add", "theorem", "coe_comap", ["subsemigroup"]], ["add", "theorem", "coe_equiv_map_of_injective_apply", ["subsemigroup"]], ["add", "theorem", "coe_map", ["subsemigroup"]], ["add", "theorem", "coe_prod", ["subsemigroup"]], ["add", "def", "comap", ["subsemigroup"]], ["add", "theorem", "comap_comap", ["subsemigroup"]], ["add", "theorem", "comap_equiv_eq_map_symm", ["subsemigroup"]], ["add", "theorem", "comap_id", ["subsemigroup"]], ["add", "theorem", "comap_inf", ["subsemigroup"]], ["add", "theorem", "comap_inf_map_of_injective", ["subsemigroup"]], ["add", "theorem", "comap_infi", ["subsemigroup"]], ["add", "theorem", "comap_infi_map_of_injective", ["subsemigroup"]], ["add", "theorem", "comap_injective_of_surjective", ["subsemigroup"]], ["add", "theorem", "comap_le_comap_iff_of_surjective", ["subsemigroup"]], ["add", "theorem", "comap_map_comap", ["subsemigroup"]], ["add", "theorem", "comap_map_eq_of_injective", ["subsemigroup"]], ["add", "theorem", "comap_strict_mono_of_surjective", ["subsemigroup"]], ["add", "theorem", "comap_sup_map_of_injective", ["subsemigroup"]], ["add", "theorem", "comap_supr_map_of_injective", ["subsemigroup"]], ["add", "theorem", "comap_surjective_of_injective", ["subsemigroup"]], ["add", "theorem", "comap_top", ["subsemigroup"]], ["add", "theorem", "eq_top_iff'", ["subsemigroup"]], ["add", "theorem", "gc_map_comap", ["subsemigroup"]], ["add", "def", "gci_map_comap", ["subsemigroup"]], ["add", "def", "gi_map_comap", ["subsemigroup"]], ["add", "def", "inclusion", ["subsemigroup"]], ["add", "theorem", "le_comap_map", ["subsemigroup"]], ["add", "theorem", "le_comap_of_map_le", ["subsemigroup"]], ["add", "theorem", "le_prod_iff", ["subsemigroup"]], ["add", "def", "map", ["subsemigroup"]], ["add", "theorem", "map_bot", ["subsemigroup"]], ["add", "theorem", "map_comap_eq_of_surjective", ["subsemigroup"]], ["add", "theorem", "map_comap_le", ["subsemigroup"]], ["add", "theorem", "map_comap_map", ["subsemigroup"]], ["add", "theorem", "map_equiv_eq_comap_symm", ["subsemigroup"]], ["add", "theorem", "map_equiv_top", ["subsemigroup"]], ["add", "theorem", "map_id", ["subsemigroup"]], ["add", "theorem", "map_inf_comap_of_surjective", ["subsemigroup"]], ["add", "theorem", "map_infi_comap_of_surjective", ["subsemigroup"]], ["add", "theorem", "map_injective_of_injective", ["subsemigroup"]], ["add", "theorem", "map_le_iff_le_comap", ["subsemigroup"]], ["add", "theorem", "map_le_map_iff_of_injective", ["subsemigroup"]], ["add", "theorem", "map_le_of_le_comap", ["subsemigroup"]], ["add", "theorem", "map_map", ["subsemigroup"]], ["add", "theorem", "map_strict_mono_of_injective", ["subsemigroup"]], ["add", "theorem", "map_sup", ["subsemigroup"]], ["add", "theorem", "map_sup_comap_of_surjective", ["subsemigroup"]], ["add", "theorem", "map_supr", ["subsemigroup"]], ["add", "theorem", "map_supr_comap_of_surjective", ["subsemigroup"]], ["add", "theorem", "map_surjective_of_surjective", ["subsemigroup"]], ["add", "theorem", "mem_comap", ["subsemigroup"]], ["add", "theorem", "mem_map", ["subsemigroup"]], ["add", "theorem", "mem_map_equiv", ["subsemigroup"]], ["add", "theorem", "mem_map_iff_mem", ["subsemigroup"]], ["add", "theorem", "mem_map_of_mem", ["subsemigroup"]], ["add", "theorem", "mem_prod", ["subsemigroup"]], ["add", "theorem", "monotone_comap", ["subsemigroup"]], ["add", "theorem", "monotone_map", ["subsemigroup"]], ["add", "def", "prod", ["subsemigroup"]], ["add", "theorem", "prod_eq_top_iff", ["subsemigroup"]], ["add", "def", "prod_equiv", ["subsemigroup"]], ["add", "theorem", "prod_mono", ["subsemigroup"]], ["add", "theorem", "prod_top", ["subsemigroup"]], ["add", "theorem", "range_subtype", ["subsemigroup"]], ["add", "theorem", "srange_fst", ["subsemigroup"]], ["add", "theorem", "srange_snd", ["subsemigroup"]], ["add", "def", "to_add_subsemigroup'", ["subsemigroup"]], ["add", "theorem", "to_add_subsemigroup'_closure", ["subsemigroup"]], ["add", "def", "to_add_subsemigroup", ["subsemigroup"]], ["add", "theorem", "to_add_subsemigroup_closure", ["subsemigroup"]], ["add", "def", "top_equiv", ["subsemigroup"]], ["add", "theorem", "top_equiv_to_mul_hom", ["subsemigroup"]], ["add", "theorem", "top_prod", ["subsemigroup"]], ["add", "theorem", "top_prod_top", ["subsemigroup"]]]}]}, {"timestamp": 1650995415, "sha": "560d1a71", "message": "chore(topology/continuous_function/continuous_map): add missing instances for `continuous_map` (#13717)\nThis adds instances related to the ring variants, i.e., non-unital, non-associative (semi)rings.\nTo avoid introducing accidental diamonds, this also changes how the existing instances are constructed, such that they now go through the `function.injective.*` definitions.", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1650995414, "sha": "325dbc88", "message": "refactor(number_theory/legendre_symbol/quadratic_reciprocity.lean): change definition of legendre_sym, simplify proofs, add lemmas (#13667)\nThis changes the definition of `legendre_sym` to use `quadratic_char`.\nThe proof of some of the statements can then be simplified by using the corresponding statements for quadratic characters.\nSome new API lemmas are added, including the fact that the Legendre symbol is multiplicative,\nAlso, a few `simps` are squeezed in `.../quadratic_char.lean`.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "ring_char_zmod_n", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["mod", "theorem", "quadratic_char_sq_one", ["char"]], ["del", "theorem", "unit_is_sqare_iff", ["finite_field"]], ["add", "theorem", "unit_is_square_iff", ["finite_field"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["mod", "def", "legendre_sym", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_zero_iff", ["zmod"]], ["add", "def", "legendre_sym_hom", ["zmod"]], ["add", "theorem", "legendre_sym_mod", ["zmod"]], ["add", "theorem", "legendre_sym_mul", ["zmod"]], ["add", "theorem", "legendre_sym_one", ["zmod"]], ["add", "theorem", "legendre_sym_sq_one'", ["zmod"]], ["add", "theorem", "legendre_sym_sq_one", ["zmod"]], ["add", "theorem", "legendre_sym_zero", ["zmod"]]]}]}, {"timestamp": 1650988300, "sha": "8b14d48f", "message": "feat(logic/relation): Transitive closure of well-founded relation is well-founded (#13698)", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "trans_gen", ["relation", "well_founded"]]]}]}, {"timestamp": 1650980215, "sha": "e77dbe0c", "message": "doc(data/list/*): Fix file links (#13711)\nThey were linking to `data.list.data.list.defs`.", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": []}, {"oldPath": "src/data/list/join.lean", "newPath": "src/data/list/join.lean", "changes": []}, {"oldPath": "src/data/list/prod_sigma.lean", "newPath": "src/data/list/prod_sigma.lean", "changes": []}, {"oldPath": "src/order/category/BoundedDistribLattice.lean", "newPath": "src/order/category/BoundedDistribLattice.lean", "changes": []}]}, {"timestamp": 1650980213, "sha": "bfa0ba5b", "message": "feat(analysis/normed_space/pointwise): The closure of a thickening (#13708)\nProve `closure (thickening δ s) = cthickening δ s` and golf \"thickening a thickening\" lemmas.", "changes": [{"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["add", "theorem", "closure_thickening", []]]}]}, {"timestamp": 1650980212, "sha": "e6c6764d", "message": "feat(logic/relation): Add missing instances (#13704)", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}]}, {"timestamp": 1650980211, "sha": "3d5e5ee1", "message": "feat(data/list/*): Miscellaneous lemmas (#13577)\nA few lemmas about `list.chain`, `list.pairwise`. Also rename `list.chain_of_pairwise` to `list.pairwise.chain` for dot notation.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "set_of_mem_cons", ["list"]]]}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["del", "theorem", "chain_of_pairwise", ["list"]]]}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "forall_of_forall_of_flip", ["list", "pairwise"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "congr_fun₂", []], ["add", "theorem", "congr_fun₃", []], ["add", "theorem", "funext₂", []], ["add", "theorem", "funext₃", []]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "flip_eq_iff", []], ["add", "theorem", "swap_eq_iff", []], ["add", "theorem", "flip_eq", ["symmetric"]], ["add", "theorem", "swap_eq", ["symmetric"]]]}]}, {"timestamp": 1650972578, "sha": "c83488b9", "message": "feat(topology/order/priestley): Priestley spaces (#12044)\nDefine `priestley_space`, a Prop-valued mixin for an ordered topological space to respect Priestley's separation axiom.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "not_le_or_not_le", ["ne"]]]}, {"oldPath": null, "newPath": "src/topology/order/priestley.lean", "changes": [["add", "theorem", "exists_clopen_lower_of_not_le", []], ["add", "theorem", "exists_clopen_upper_of_not_le", []], ["add", "theorem", "exists_clopen_upper_or_lower_of_ne", []]]}]}, {"timestamp": 1650966702, "sha": "b0efdbbd", "message": "feat(algebra/module/linear_map) : cancel_right and cancel_left for linear_maps (#13703)", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "cancel_left", ["linear_map"]], ["add", "theorem", "cancel_right", ["linear_map"]]]}]}, {"timestamp": 1650966701, "sha": "5172448c", "message": "feat(set_theory/game/pgame): Conway induction on games (#13699)\nThis is a more convenient restatement of the induction principle of the type.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "def", "move_rec_on", ["pgame"]]]}]}, {"timestamp": 1650966700, "sha": "4c6b3737", "message": "feat(group_theory/subgroup/basic): `zpowers_le` (#13693)\nThis PR adds a lemma `zpowers_le : zpowers g ≤ H ↔ g ∈ H`. I also fixed the `to_additive` name of a lemma from a previous PR.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "zpowers_le", ["subgroup"]]]}]}, {"timestamp": 1650966699, "sha": "b94ea159", "message": "refactor(linear_algebra/matrix/trace): unbundle `matrix.diag` (#13687)\nThe bundling makes it awkward to work with, as the base ring has to be specified even though it doesn't affect the computation.\nThis brings it in line with `matrix.diagonal`.\nThe bundled version is now available as `matrix.diag_linear_map`.\nThis adds a handful of missing lemmas about `diag` inspired by those about `diagonal`; almost all of which are just `rfl`.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "diag", ["matrix"]], ["add", "theorem", "diag_add", ["matrix"]], ["add", "def", "diag_add_monoid_hom", ["matrix"]], ["add", "theorem", "diag_col_mul_row", ["matrix"]], ["add", "theorem", "diag_conj_transpose", ["matrix"]], ["add", "theorem", "diag_diagonal", ["matrix"]], ["add", "def", "diag_linear_map", ["matrix"]], ["add", "theorem", "diag_map", ["matrix"]], ["add", "theorem", "diag_minor", ["matrix"]], ["add", "theorem", "diag_neg", ["matrix"]], ["add", "theorem", "diag_one", ["matrix"]], ["add", "theorem", "diag_smul", ["matrix"]], ["add", "theorem", "diag_sub", ["matrix"]], ["add", "theorem", "diag_transpose", ["matrix"]], ["add", "theorem", "diag_zero", ["matrix"]], ["mod", "theorem", "diagonal_apply_eq", ["matrix"]], ["mod", "theorem", "diagonal_apply_ne'", ["matrix"]], ["mod", "theorem", "diagonal_apply_ne", ["matrix"]], ["mod", "theorem", "one_apply_eq", ["matrix"]]]}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": [["mod", "theorem", "diag_same", ["matrix", "std_basis_matrix"]], ["mod", "theorem", "diag_zero", ["matrix", "std_basis_matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/is_diag.lean", "newPath": "src/linear_algebra/matrix/is_diag.lean", "changes": [["add", "theorem", "diagonal_diag", ["matrix", "is_diag"]], ["del", "theorem", "exists_diagonal", ["matrix", "is_diag"]], ["add", "theorem", "is_diag_iff_diagonal_diag", ["matrix"]], ["del", "theorem", "is_diag_iff_exists_diagonal", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": [["del", "def", "diag", ["matrix"]], ["del", "theorem", "diag_apply", ["matrix"]], ["del", "theorem", "diag_col_mul_row", ["matrix"]], ["del", "theorem", "diag_one", ["matrix"]], ["del", "theorem", "diag_transpose", ["matrix"]], ["mod", "theorem", "trace_diag", ["matrix"]]]}, {"oldPath": "src/topology/algebra/matrix.lean", "newPath": "src/topology/algebra/matrix.lean", "changes": [["mod", "theorem", "matrix_diag", ["continuous"]]]}]}, {"timestamp": 1650959734, "sha": "6ae00ad3", "message": "chore(tactic/field_simp): fix docstring (#13695)", "changes": [{"oldPath": "src/tactic/field_simp.lean", "newPath": "src/tactic/field_simp.lean", "changes": []}]}, {"timestamp": 1650959733, "sha": "a02f11fa", "message": "feat(algebra/ring/equiv): generalize `ring_equiv` material to allow for non-unital rings (#13626)", "changes": [{"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["mod", "theorem", "Pi_congr_right_refl", ["mul_equiv"]], ["mod", "def", "arrow_congr", ["mul_equiv"]]]}, {"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": [["add", "def", "to_ring_equiv", ["add_equiv"]], ["mod", "def", "to_ring_equiv", ["mul_equiv"]], ["mod", "theorem", "Pi_congr_right_refl", ["ring_equiv"]], ["add", "theorem", "coe_non_unital_ring_hom_inj_iff", ["ring_equiv"]], ["mod", "theorem", "coe_of_bijective", ["ring_equiv"]], ["add", "theorem", "coe_to_non_unital_ring_hom", ["ring_equiv"]], ["mod", "theorem", "of_bijective_apply", ["ring_equiv"]], ["add", "def", "of_hom_inv'", ["ring_equiv"]], ["mod", "def", "of_hom_inv", ["ring_equiv"]], ["del", "theorem", "of_hom_inv_apply", ["ring_equiv"]], ["del", "theorem", "of_hom_inv_symm_apply", ["ring_equiv"]], ["add", "theorem", "symm_to_non_unital_ring_hom_apply_to_non_unital_ring_hom_apply", ["ring_equiv"]], ["add", "theorem", "symm_to_non_unital_ring_hom_comp_to_non_unital_ring_hom", ["ring_equiv"]], ["add", "def", "to_non_unital_ring_hom", ["ring_equiv"]], ["add", "theorem", "to_non_unital_ring_hom_apply_symm_to_non_unital_ring_hom_apply", ["ring_equiv"]], ["add", "theorem", "to_non_unital_ring_hom_commutes", ["ring_equiv"]], ["add", "theorem", "to_non_unital_ring_hom_comp_symm_to_non_unital_ring_hom", ["ring_equiv"]], ["add", "theorem", "to_non_unital_ring_hom_eq_coe", ["ring_equiv"]], ["add", "theorem", "to_non_unital_ring_hom_injective", ["ring_equiv"]], ["add", "theorem", "to_non_unital_ring_hom_refl", ["ring_equiv"]], ["add", "theorem", "to_non_unital_ring_hom_trans", ["ring_equiv"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_ring.lean", "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": []}]}, {"timestamp": 1650959732, "sha": "1b1ae61f", "message": "feat(analysis/normed_space/pointwise): Thickening a thickening (#13380)\nIn a real normed space, thickening twice is the same as thickening once.", "changes": [{"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["add", "theorem", "cthickening_cthickening", []], ["add", "theorem", "cthickening_thickening", []], ["add", "theorem", "inf_edist_cthickening", []], ["add", "theorem", "inf_edist_thickening", []], ["add", "theorem", "thickening_cthickening", []], ["add", "theorem", "thickening_thickening", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "le_sub_of_add_le_left", ["ennreal"]], ["add", "theorem", "le_sub_of_add_le_right", ["ennreal"]], ["add", "theorem", "of_real_sub", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "edist_le_of_real", []], ["add", "theorem", "edist_lt_of_real", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "cthickening_cthickening_subset", ["metric"]], ["add", "theorem", "cthickening_thickening_subset", ["metric"]], ["add", "theorem", "thickening_cthickening_subset", ["metric"]], ["add", "theorem", "thickening_thickening_subset", ["metric"]]]}]}, {"timestamp": 1650957688, "sha": "093b583b", "message": "feat(set_theory/game/pgame): `ordinal.to_pgame` (#13628)\nWe define the canonical map from ordinals to pre-games and prove it's an order embedding.", "changes": [{"oldPath": null, "newPath": "src/set_theory/game/ordinal.lean", "changes": [["add", "def", "to_left_moves_to_pgame", ["ordinal"]], ["add", "theorem", "to_pgame_def", ["ordinal"]], ["add", "theorem", "to_pgame_injective", ["ordinal"]], ["add", "theorem", "to_pgame_le", ["ordinal"]], ["add", "theorem", "to_pgame_le_iff", ["ordinal"]], ["add", "theorem", "to_pgame_left_moves", ["ordinal"]], ["add", "theorem", "to_pgame_lt", ["ordinal"]], ["add", "theorem", "to_pgame_lt_iff", ["ordinal"]], ["add", "theorem", "to_pgame_move_left", ["ordinal"]], ["add", "theorem", "to_pgame_move_left_heq", ["ordinal"]], ["add", "theorem", "to_pgame_right_moves", ["ordinal"]]]}]}, {"timestamp": 1650948878, "sha": "bf67d473", "message": "chore(scripts): update nolints.txt (#13706)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1650948877, "sha": "748ea79b", "message": "feat(order/filter/basic): more lemmas about `filter.comap` (#13619)\n* add `set.compl_def`, `set.finite_image_fst_and_snd_iff`, and `set.forall_finite_image_eval_iff`;\n* add `filter.coext`, an extensionality lemma that is more useful for \"cofilters\";\n* rename `filter.eventually_comap'` to `filter.eventually.comap`;\n* add `filter.mem_comap'`, `filter.mem_comap_iff_compl`, and `filter.compl_mem_comap`;\n* add `filter.compl_mem_coprod`, replace `filter.compl_mem_Coprod_iff` with a simpler `filter.compl_mem_Coprod`;\n* add `filter.map_top`;\n* use new lemmas to golf some proofs.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_def", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_image_fst_and_snd_iff", ["set"]], ["add", "theorem", "forall_finite_image_eval_iff", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "compl_mem_comap", ["filter"]], ["add", "theorem", "compl_mem_coprod", ["filter"]], ["add", "theorem", "comap", ["filter", "eventually"]], ["del", "theorem", "eventually_comap'", ["filter"]], ["mod", "theorem", "eventually_comap", ["filter"]], ["mod", "theorem", "frequently_comap", ["filter"]], ["add", "theorem", "map_top", ["filter"]], ["add", "theorem", "mem_comap'", ["filter"]], ["add", "theorem", "mem_comap_iff_compl", ["filter"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": [["add", "theorem", "compl_mem_Coprod", ["filter"]], ["del", "theorem", "compl_mem_Coprod_iff", ["filter"]]]}, {"oldPath": "src/topology/algebra/order/intermediate_value.lean", "newPath": "src/topology/algebra/order/intermediate_value.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1650941852, "sha": "4de65278", "message": "feat(algebra/ring/basic): define non-unital commutative (semi)rings (#13476)\nThis adds the classes of non-unital commutative (semi)rings. These are necessary to talk about, for example, non-unital commutative C∗-algebras such as `C₀(X, ℂ)` which are vital for the continuous functional calculus.\nIn addition, we weaken many type class assumptions in `algebra/ring/basic` to `non_unital_non_assoc_ring`.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "is_regular_iff_ne_zero'", []]]}, {"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": [["add", "def", "to_non_unital_comm_ring", ["generalized_boolean_algebra"]], ["del", "def", "to_non_unital_ring", ["generalized_boolean_algebra"]]]}, {"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": []}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": []}]}, {"timestamp": 1650935390, "sha": "24a8bb93", "message": "feat(order/well-founded): Remove redundant arguments (#13702)\nAll of these are inferred as `{α : Type*}` (as opposed to `{α : Sort*}`), and there is already a `variables {α : Type*}` at the top of the file.", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["mod", "theorem", "min_mem", ["well_founded"]], ["mod", "theorem", "not_lt_min", ["well_founded"]], ["mod", "theorem", "well_founded_iff_has_min", ["well_founded"]]]}]}, {"timestamp": 1650928270, "sha": "438b39a7", "message": "feat(set_theory/cardinal/basic): Distributivity of `cardinal.sum` and + (#13643)\n`cardinal.sum_add_distrib` shows that `cardinal.sum` distributes over +.", "changes": [{"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": [["add", "def", "sigma_sum_distrib", ["equiv"]]]}, {"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "sum_add_distrib", ["cardinal"]]]}]}, {"timestamp": 1650914737, "sha": "8f604aa3", "message": "feat(data/nat/totient): totient equals one iff (#13688)", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_eq_one_iff", ["nat"]]]}]}, {"timestamp": 1650907365, "sha": "4e50b688", "message": "feat(category_theory/abelian): if D is abelian so is C ⥤ D (#13686)\nNeeded for LTE, and also useful to show `Rep k G` is abelian.", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/functor_category.lean", "changes": [["add", "theorem", "coimage_image_comparison_app'", ["category_theory", "abelian", "functor_category"]], ["add", "theorem", "coimage_image_comparison_app", ["category_theory", "abelian", "functor_category"]], ["add", "def", "coimage_obj_iso", ["category_theory", "abelian", "functor_category"]], ["add", "def", "image_obj_iso", ["category_theory", "abelian", "functor_category"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "newPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "changes": [["del", "theorem", "iso_hom", ["category_theory", "limits", "preserves_cokernel"]], ["add", "theorem", "iso_inv", ["category_theory", "limits", "preserves_cokernel"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "map_iso", ["category_theory", "limits", "cokernel"]], ["add", "def", "map_iso", ["category_theory", "limits", "kernel"]]]}]}, {"timestamp": 1650907364, "sha": "43e84cdd", "message": "feat(data/fin/succ_pred): `fin` is an archimedean succ/pred order (#12792)", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "coe_fin_one", ["fin"]], ["add", "theorem", "coe_neg_one", ["fin"]], ["add", "theorem", "coe_sub_one", ["fin"]], ["add", "def", "fin_equiv", ["order_iso"]], ["add", "theorem", "fin_equiv_apply", ["order_iso"]], ["add", "theorem", "fin_equiv_symm_apply", ["order_iso"]]]}, {"oldPath": null, "newPath": "src/data/fin/succ_pred.lean", "changes": [["add", "theorem", "pred_apply", ["fin"]], ["add", "theorem", "pred_eq", ["fin"]], ["add", "theorem", "succ_apply", ["fin"]], ["add", "theorem", "succ_eq", ["fin"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "is_well_order", ["fintype", "linear_order"]], ["add", "theorem", "is_well_order_gt", ["fintype", "linear_order"]], ["add", "theorem", "is_well_order_lt", ["fintype", "linear_order"]], ["del", "theorem", "well_founded", ["fintype", "preorder"]], ["add", "theorem", "well_founded_gt", ["fintype", "preorder"]], ["add", "theorem", "well_founded_lt", ["fintype", "preorder"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "def", "of_core", ["pred_order"]], ["add", "def", "of_core", ["succ_order"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1650900211, "sha": "4481a561", "message": "feat(algebra/group_power/order): Add sq_zero_iff (#13670)\nTiny lemma that seems to be missing.\nShould this be a simp lemma?", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "sq_eq_zero_iff", []]]}]}, {"timestamp": 1650900210, "sha": "e2f56961", "message": "feat(analysis/normed_space/exponential): add `pi.exp_apply` (#13488)\nThe statement is a bit weird, but this structure is useful because it allows us to push `exp` through `matrix.diagonal` and into its elements.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "update_exp", ["function"]], ["add", "theorem", "exp_apply", ["pi"]], ["add", "theorem", "exp_def", ["pi"]]]}]}, {"timestamp": 1650900209, "sha": "85075bcc", "message": "refactor(category_theory/monoidal): rearrange simp lemmas to work better with coherence (#13409)\nChange the direction of some simp lemma for monoidal categories, and remove some unused lemmas.\nThis PR is effectively a \"no-op\": no substantial changes to proofs. However, it should enable making `coherence` more powerful soon (following suggestions of @yuma-mizuno)!", "changes": [{"oldPath": "src/category_theory/monoidal/End.lean", "newPath": "src/category_theory/monoidal/End.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["del", "theorem", "left_unitor_inv_comp_tensor", ["category_theory", "monoidal_category"]], ["del", "theorem", "right_unitor_inv_comp_tensor", ["category_theory", "monoidal_category"]], ["mod", "theorem", "tensor_left_iff", ["category_theory", "monoidal_category"]], ["mod", "theorem", "tensor_right_iff", ["category_theory", "monoidal_category"]], ["del", "theorem", "triangle_assoc_comp_left", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/center.lean", "newPath": "src/category_theory/monoidal/center.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/coherence.lean", "newPath": "src/category_theory/monoidal/free/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/opposite.lean", "newPath": "src/category_theory/monoidal/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/transport.lean", "newPath": "src/category_theory/monoidal/transport.lean", "changes": []}]}, {"timestamp": 1650900208, "sha": "9f75d75a", "message": "feat(analysis/convex/measure): a convex set is null-measurable (#13138)", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/measure.lean", "changes": [["add", "theorem", "add_haar_frontier", ["convex"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "closure_subset_image_homothety_interior_of_one_lt", ["convex"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_coe_inter_self", ["subtype"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "frontier_inter_open_inter", []]]}]}, {"timestamp": 1650900207, "sha": "2c15ce14", "message": "feat(data/nat/choose): add facts about the multiplicity of primes in the factorisation of central binomial coefficients (#9925)\nA number of bounds on the multiplicity of primes in the factorisation of central binomial coefficients. These are of interest because they form part of the proof of Bertrand's postulate.", "changes": [{"oldPath": "src/data/nat/choose/central.lean", "newPath": "src/data/nat/choose/central.lean", "changes": [["add", "theorem", "padic_val_nat_central_binom_le", ["nat"]], ["add", "theorem", "padic_val_nat_central_binom_of_large_eq_zero", ["nat"]], ["add", "theorem", "padic_val_nat_central_binom_of_large_le_one", ["nat"]]]}]}, {"timestamp": 1650892894, "sha": "2825f353", "message": "feat(data/set/prod): add `set.eval_image_pi_subset` (#13613)\nAlso reorder lemmas like `fst_image_prod_subset` so that simpler\nlemmas go first.", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "eval_image_pi_subset", ["set"]], ["add", "theorem", "eval_image_univ_pi_subset", ["set"]]]}]}, {"timestamp": 1650892892, "sha": "14b0e32b", "message": "chore(data/finsupp/fin): golf some proofs (#13607)", "changes": [{"oldPath": "src/data/finsupp/fin.lean", "newPath": "src/data/finsupp/fin.lean", "changes": []}]}, {"timestamp": 1650892891, "sha": "b7538a30", "message": "feat(algebra/periodic): add lemmas `periodic.prod`, `periodic.smul`, `antiperiodic.smul` (#13496)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "periodic_prod", ["finset"]], ["add", "theorem", "smul", ["function", "antiperiodic"]], ["add", "theorem", "smul", ["function", "periodic"]], ["add", "theorem", "periodic_prod", ["list"]], ["add", "theorem", "periodic_prod", ["multiset"]]]}]}, {"timestamp": 1650885565, "sha": "4bfae3d8", "message": "feat(set_theory/game/pgame): remove nolint (#13680)\nWe remove `@[nolint has_inhabited_instance]` from `left_moves` and `right_moves` by providing the appropriate instances for `star`.", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "def", "left_moves", ["pgame"]], ["mod", "def", "right_moves", ["pgame"]]]}]}, {"timestamp": 1650885564, "sha": "9e8d1075", "message": "feat(dynamics/periodic_pts): `pow_smul_eq_iff_minimal_period_dvd` (#13676)\nThis PR adds a lemma `pow_smul_eq_iff_minimal_period_dvd`, along with additive and integer versions.", "changes": [{"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "pow_smul_eq_iff_minimal_period_dvd", ["mul_action"]], ["add", "theorem", "zpow_smul_eq_iff_minimal_period_dvd", ["mul_action"]]]}]}, {"timestamp": 1650885562, "sha": "7231172e", "message": "feat(topology/algebra): actions on the opposite type are continuous (#13671)\nThis also adds the missing `t2_space` instance.", "changes": [{"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/constructions.lean", "newPath": "src/topology/algebra/constructions.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_mul_action.lean", "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": [["mod", "theorem", "const_smul", ["uniform_continuous"]]]}]}, {"timestamp": 1650885561, "sha": "ed10ba23", "message": "feat(ring_theory/witt_vector/frobenius): add `witt_vector.frobenius_equiv` (#13666)\nThis promotes the bijection to an equivalence with an explicit inverse", "changes": [{"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": [["add", "def", "frobenius_equiv", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/frobenius_fraction_field.lean", "newPath": "src/ring_theory/witt_vector/frobenius_fraction_field.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": [["mod", "def", "frobenius", ["witt_vector", "fraction_ring"]]]}]}, {"timestamp": 1650885560, "sha": "6d3ca07a", "message": "feat(data/zmod/basic): `-1 : zmod n` lifts to `n - 1` (#13665)\nThis PR adds a lemma stating that `-1 : zmod n` lifts to `n - 1 : R` for any ring `R`. The proof is surprisingly painful, but maybe someone can find a nicer way?", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_neg_one", ["zmod"]], ["add", "theorem", "val_neg_one", ["zmod"]]]}]}, {"timestamp": 1650885559, "sha": "ad0a3e66", "message": "feat(dynamics/periodic_pts): Iteration is injective below the period (#13660)\nThis PR adds `iterate_injective_of_lt_minimal_period`, generalizing `pow_injective_of_lt_order_of`.", "changes": [{"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "iterate_injective_of_lt_minimal_period", ["function"]], ["add", "theorem", "iterate_minimal_period", ["function"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "pow_injective_aux", []]]}]}, {"timestamp": 1650883424, "sha": "6710d655", "message": "feat(analysis/complex/roots_of_unity): arg of a primitive root (#13583)", "changes": [{"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": [["add", "theorem", "arg", ["is_primitive_root"]]]}]}, {"timestamp": 1650873899, "sha": "b35ed400", "message": "feat(algebra/order/hom/ring): There's at most one hom between linear ordered fields (#13601)\nThere is at most one ring homomorphism from a linear ordered field to an archimedean linear ordered field. Also generalize `map_rat_cast` to take in `ring_hom_class`.", "changes": [{"oldPath": "src/algebra/order/hom/ring.lean", "newPath": "src/algebra/order/hom/ring.lean", "changes": [["add", "theorem", "subsingleton", ["order_ring_hom"]], ["add", "theorem", "subsingleton_left", ["order_ring_iso"]], ["add", "theorem", "subsingleton_right", ["order_ring_iso"]], ["add", "theorem", "symm_bijective", ["order_ring_iso"]], ["add", "theorem", "to_order_ring_hom_injective", ["order_ring_iso"]]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "of_real_rat_cast", ["complex"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "map_rat_cast", []], ["del", "theorem", "map_rat_cast", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1650873897, "sha": "d795ea4b", "message": "feat(number_theory/legendre_symbol/quadratic_reciprocity): Alternate forms of `exists_sq_eq_neg_one` (#13594)\nAlso, renamed `exists_sq_eq_neg_one_iff_mod_four_ne_three` to `exists_sq_eq_neg_one` for consistency with `exists_sq_eq_two` and for convenience.", "changes": [{"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["add", "theorem", "exists_sq_eq_neg_one_iff", ["zmod"]], ["del", "theorem", "exists_sq_eq_neg_one_iff_mod_four_ne_three", ["zmod"]], ["add", "theorem", "mod_four_ne_three_of_sq_eq_neg_one", ["zmod"]], ["add", "theorem", "mod_four_ne_three_of_sq_eq_neg_sq'", ["zmod"]], ["add", "theorem", "mod_four_ne_three_of_sq_eq_neg_sq", ["zmod"]]]}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1650873896, "sha": "e251ef77", "message": "feat(logic/basic): `congr_fun` for heterogeneous equality (#13591)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "congr_fun_heq", []]]}]}, {"timestamp": 1650873895, "sha": "e059fdf9", "message": "feat(algebra/big_operators/basic): mk0_prod (#13582)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "mk0_prod", ["units"]]]}]}, {"timestamp": 1650873894, "sha": "f02c7844", "message": "feat(special_functions/gamma): recurrence relation for Gamma function (#13156)", "changes": [{"oldPath": "src/analysis/special_functions/gamma.lean", "newPath": "src/analysis/special_functions/gamma.lean", "changes": [["add", "def", "Gamma", ["complex"]], ["add", "theorem", "Gamma_add_one", ["complex"]], ["add", "theorem", "Gamma_aux_recurrence1", ["complex"]], ["add", "theorem", "Gamma_aux_recurrence2", ["complex"]], ["add", "theorem", "Gamma_eq_Gamma_aux", ["complex"]], ["add", "theorem", "Gamma_eq_integral", ["complex"]], ["mod", "def", "Gamma_integral", ["complex"]], ["add", "theorem", "Gamma_integral_add_one", ["complex"]], ["add", "theorem", "Gamma_nat_eq_factorial", ["complex"]], ["add", "def", "partial_Gamma", ["complex"]], ["add", "theorem", "partial_Gamma_add_one", ["complex"]], ["add", "theorem", "tendsto_partial_Gamma", ["complex"]]]}]}, {"timestamp": 1650867852, "sha": "ef3769db", "message": "feat(group_theory/subgroup/basic): Cyclic subgroups are commutative (#13663)\nThis PR adds an instance stating that the cyclic subgroups `zpowers g` are commutative.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}]}, {"timestamp": 1650867851, "sha": "b0fe3cd2", "message": "feat(order/filter): add `filter.coprod_bot` etc (#13662)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "bot_coprod", ["filter"]], ["add", "theorem", "bot_coprod_bot", ["filter"]], ["add", "theorem", "coprod_bot", ["filter"]]]}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": [["add", "theorem", "Coprod_bot'", ["filter"]], ["add", "theorem", "Coprod_bot", ["filter"]], ["add", "theorem", "Coprod_eq_bot_iff'", ["filter"]], ["add", "theorem", "Coprod_eq_bot_iff", ["filter"]]]}]}, {"timestamp": 1650867850, "sha": "feb9aed4", "message": "feat(group_theory/group_action/basic): More API for `quotient_action` (#13661)\nThis PR adds a couple more API lemmas for `quotient_action`.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "coe_smul_out'", ["mul_action", "quotient"]], ["add", "theorem", "mk_smul_out'", ["mul_action", "quotient"]], ["mod", "theorem", "smul_coe", ["mul_action", "quotient"]], ["mod", "theorem", "smul_mk", ["mul_action", "quotient"]]]}]}, {"timestamp": 1650867849, "sha": "46563c5c", "message": "refactor(analysis/convex/basic): rewrite a few proofs (#13658)\n* prove that a closed segment is the union of the corresponding open segment and the endpoints;\n* use this lemma to golf some proofs;\n* make the \"field\" argument of `mem_open_segment_of_ne_left_right` implicit.\n* use section variables.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "insert_endpoints_open_segment", []], ["mod", "theorem", "mem_open_segment_iff_div", []], ["mod", "theorem", "mem_open_segment_of_ne_left_right", []], ["mod", "theorem", "mem_segment_iff_div", []], ["mod", "theorem", "mem_segment_iff_same_ray", []], ["mod", "theorem", "open_segment_subset_iff_segment_subset", []]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}]}, {"timestamp": 1650867847, "sha": "7d64215f", "message": "chore(analysis/convex/topology): generalize a few lemmas (#13656)\nThis way they work for `𝕜 = ℚ` too.", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["mod", "theorem", "add_smul_mem_interior'", ["convex"]], ["mod", "theorem", "add_smul_mem_interior", ["convex"]], ["mod", "theorem", "add_smul_sub_mem_interior'", ["convex"]], ["mod", "theorem", "add_smul_sub_mem_interior", ["convex"]], ["mod", "theorem", "combo_closure_interior_mem_interior", ["convex"]], ["mod", "theorem", "combo_closure_interior_subset_interior", ["convex"]], ["mod", "theorem", "combo_interior_closure_mem_interior", ["convex"]], ["mod", "theorem", "combo_interior_closure_subset_interior", ["convex"]], ["mod", "theorem", "combo_interior_self_mem_interior", ["convex"]], ["mod", "theorem", "combo_interior_self_subset_interior", ["convex"]], ["mod", "theorem", "combo_self_interior_mem_interior", ["convex"]], ["mod", "theorem", "combo_self_interior_subset_interior", ["convex"]], ["mod", "theorem", "open_segment_closure_interior_subset_interior", ["convex"]], ["mod", "theorem", "open_segment_interior_closure_subset_interior", ["convex"]], ["mod", "theorem", "open_segment_interior_self_subset_interior", ["convex"]], ["mod", "theorem", "open_segment_self_interior_subset_interior", ["convex"]]]}]}, {"timestamp": 1650867844, "sha": "c24f1f2b", "message": "chore(number_theory/padics/*): tidy some proofs (#13652)", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1650867840, "sha": "962bfcdb", "message": "chore(field_theory/finite/polynomial): tidy + remove nolints (#13645)\nSome of these definitions only make full sense over a field (for example the indicator function can be nonsensical in non-field rings) but there's also no reason not to define them more generally. This removes all `nolint`s related to this file, and all of the generalisation linter suggestions too.", "changes": [{"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": [["mod", "def", "R", ["mv_polynomial"]], ["mod", "theorem", "dim_R", ["mv_polynomial"]], ["mod", "theorem", "eq_zero_of_eval_eq_zero", ["mv_polynomial"]], ["mod", "def", "evalᵢ", ["mv_polynomial"]], ["mod", "def", "evalₗ", ["mv_polynomial"]], ["del", "theorem", "evalₗ_apply", ["mv_polynomial"]], ["mod", "theorem", "expand_zmod", ["mv_polynomial"]], ["mod", "theorem", "finrank_R", ["mv_polynomial"]], ["mod", "theorem", "frobenius_zmod", ["mv_polynomial"]], ["mod", "def", "indicator", ["mv_polynomial"]], ["mod", "theorem", "ker_evalₗ", ["mv_polynomial"]], ["mod", "theorem", "range_evalᵢ", ["mv_polynomial"]]]}]}, {"timestamp": 1650867840, "sha": "b6a4be44", "message": "chore(ring_theory/witt_vector/isocrystal): speed up the proof (#13644)\nto remove a timeout in #13459", "changes": [{"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}]}, {"timestamp": 1650867839, "sha": "9c861e32", "message": "feat(topology/algebra/matrix): `matrix.block_diagonal` is continuous (#13641)\n`continuous.if_const` isn't suitable for the primed `matrix.block_diagonal'` case, as the `if` is dependent.", "changes": [{"oldPath": "src/topology/algebra/matrix.lean", "newPath": "src/topology/algebra/matrix.lean", "changes": [["add", "theorem", "matrix_block_diagonal'", ["continuous"]], ["add", "theorem", "matrix_block_diagonal", ["continuous"]], ["add", "theorem", "matrix_from_blocks", ["continuous"]]]}]}, {"timestamp": 1650867838, "sha": "b1b2cab4", "message": "feat(group_theory/complement): The range of a section `G ⧸ H → G` is a transversal (#13623)\nThis PR adds left and right versions of the statement that the range of a section `G ⧸ H → G` is a transversal.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "range_mem_left_transversals", ["subgroup"]], ["add", "theorem", "range_mem_right_transversals", ["subgroup"]]]}]}, {"timestamp": 1650867837, "sha": "6cbf986a", "message": "refactor(group_theory/schur_zassenhaus): Golf proof of abelian case (#13622)\nThis PR golfs the proof of the abelian case of Schur-Zassenhaus by switching from a nonstandard definition of the difference of two left transversals to the definition used in `transfer.lean`.", "changes": [{"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": [["del", "theorem", "diff_inv", ["subgroup"]], ["del", "theorem", "diff_mul_diff", ["subgroup"]], ["del", "theorem", "diff_self", ["subgroup"]], ["add", "theorem", "eq_one_of_smul_eq_one", ["subgroup"]], ["mod", "theorem", "exists_smul_eq", ["subgroup"]], ["mod", "theorem", "is_complement'_stabilizer_of_coprime", ["subgroup"]], ["mod", "def", "quotient_diff", ["subgroup"]], ["add", "theorem", "smul_diff'", ["subgroup"]], ["del", "theorem", "smul_diff", ["subgroup"]], ["add", "theorem", "smul_diff_smul'", ["subgroup"]], ["del", "theorem", "smul_diff_smul", ["subgroup"]], ["del", "theorem", "smul_left_injective", ["subgroup"]]]}]}, {"timestamp": 1650867836, "sha": "b6c8c0d4", "message": "refactor(linear_algebra/quotient): Use the same quotient relation as add_subgroup (#13620)\nThis means that the quotient by `p` and `p.to_add_subgroup` are defeq as types, and the instances defined on them are defeq too.\nThis removes a TODO comment by Mario; I can only assume it resolves it in the right direction", "changes": [{"oldPath": "src/algebra/char_p/quotient.lean", "newPath": "src/algebra/char_p/quotient.lean", "changes": []}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}, {"oldPath": "src/algebra/module/torsion.lean", "newPath": "src/algebra/module/torsion.lean", "changes": []}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": [["add", "theorem", "quotient_rel_r_def", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1650867835, "sha": "91b80842", "message": "chore(analysis/normed_space/finite_dimension): extract some lemmas from existentials (#13600)\nA few proofs in this file prove an existential where a stronger statement in terms of the witness exists.\nThis:\n* Removes `basis.sup_norm_le_norm` and replaces it with the more general statement `pi.sum_norm_apply_le_norm`\n* Renames `basis.op_norm_le` to `basis.exists_op_norm_le`\n* Creates a new `basis.op_norm_le` stated without the existential\n* Adds the `nnnorm` version of some `norm` lemmas. In some cases it's easier to prove these first, and derive the `norm` versions from them.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "sum_nnnorm_apply_le_nnnorm", ["pi"]], ["add", "theorem", "sum_norm_apply_le_norm", ["pi"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "exists_op_nnnorm_le", ["basis"]], ["add", "theorem", "exists_op_norm_le", ["basis"]], ["add", "theorem", "op_nnnorm_le", ["basis"]], ["mod", "theorem", "op_norm_le", ["basis"]], ["del", "theorem", "sup_norm_le_norm", ["basis"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_nnnorm_eq_of_bounds", ["continuous_linear_map"]], ["add", "theorem", "op_nnnorm_le_bound", ["continuous_linear_map"]], ["add", "theorem", "op_nnnorm_le_of_lipschitz", ["continuous_linear_map"]], ["add", "theorem", "op_nnnorm_prod", ["continuous_linear_map"]]]}]}, {"timestamp": 1650863433, "sha": "070c21b6", "message": "chore(data/matrix): generalisation linter (#13655)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "col_mul_vec", ["matrix"]], ["mod", "theorem", "col_vec_mul", ["matrix"]], ["mod", "theorem", "conj_transpose_mul", ["matrix"]], ["mod", "theorem", "conj_transpose_neg", ["matrix"]], ["mod", "theorem", "conj_transpose_smul", ["matrix"]], ["mod", "theorem", "conj_transpose_zero", ["matrix"]], ["mod", "theorem", "diagonal_conj_transpose", ["matrix"]], ["mod", "theorem", "dot_product_comm", ["matrix"]], ["mod", "theorem", "minor_mul", ["matrix"]], ["mod", "theorem", "minor_mul_equiv", ["matrix"]], ["mod", "theorem", "minor_mul_transpose_minor", ["matrix"]], ["mod", "theorem", "minor_smul", ["matrix"]], ["mod", "theorem", "minor_zero", ["matrix"]], ["mod", "theorem", "mul_minor_one", ["matrix"]], ["mod", "theorem", "mul_vec_smul", ["matrix"]], ["mod", "theorem", "one_minor_mul", ["matrix"]], ["mod", "theorem", "row_mul_vec", ["matrix"]], ["mod", "theorem", "row_vec_mul", ["matrix"]], ["mod", "theorem", "star_mul", ["matrix"]], ["mod", "theorem", "transpose_mul", ["matrix"]], ["mod", "def", "transpose_ring_equiv", ["matrix"]], ["mod", "theorem", "vec_mul_smul", ["matrix"]], ["mod", "theorem", "vec_mul_vec_eq", ["matrix"]], ["mod", "theorem", "map_dot_product", ["ring_hom"]], ["mod", "theorem", "map_mul_vec", ["ring_hom"]], ["mod", "theorem", "map_vec_mul", ["ring_hom"]]]}]}, {"timestamp": 1650860945, "sha": "df4066cf", "message": "refactor(order/ideal): Make `order.ideal` extend `lower_set` (#13070)\n* Redefine `order.ideal` to extend `lower_set`.\n* `set_like` instance\n* Get rid of `order.ideal.ideal_Inter_nonempty` in favor of `order_bot`\n* Make arguments to `order.ideal.sup_mem` semi-implicit\n* Reorder sections according to typeclass assumptions (some were outdated since Yakov's `order_bot`/`order_top` refactor)", "changes": [{"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["del", "theorem", "Inf_le", ["order", "ideal"]], ["del", "theorem", "Inter_nonempty", ["order", "ideal"]], ["mod", "theorem", "bot_mem", ["order", "ideal"]], ["add", "theorem", "carrier_eq_coe", ["order", "ideal"]], ["mod", "theorem", "coe_Inf", ["order", "ideal"]], ["add", "theorem", "coe_inf", ["order", "ideal"]], ["del", "theorem", "coe_inj", ["order", "ideal"]], ["del", "theorem", "coe_injective", ["order", "ideal"]], ["add", "theorem", "coe_ssubset_coe", ["order", "ideal"]], ["add", "theorem", "coe_subset_coe", ["order", "ideal"]], ["add", "theorem", "coe_sup", ["order", "ideal"]], ["add", "theorem", "coe_to_lower_set", ["order", "ideal"]], ["mod", "theorem", "coe_top", ["order", "ideal"]], ["mod", "theorem", "ext", ["order", "ideal"]], ["del", "theorem", "ext_iff", ["order", "ideal"]], ["del", "theorem", "all_Inter_nonempty", ["order", "ideal", "ideal_Inter_nonempty"]], ["del", "theorem", "all_bInter_nonempty", ["order", "ideal", "ideal_Inter_nonempty"]], ["del", "theorem", "exists_all_mem", ["order", "ideal", "ideal_Inter_nonempty"]], ["del", "theorem", "ideal_Inter_nonempty_iff", ["order", "ideal"]], ["del", "theorem", "ideal_Inter_nonempty_of_exists_all_mem", ["order", "ideal"]], ["del", "theorem", "is_glb_Inf", ["order", "ideal"]], ["mod", "theorem", "ne_top", ["order", "ideal", "is_proper"]], ["del", "theorem", "le_Inf", ["order", "ideal"]], ["mod", "theorem", "mem_Inf", ["order", "ideal"]], ["del", "theorem", "mem_coe", ["order", "ideal"]], ["mod", "theorem", "mem_compl_of_ge", ["order", "ideal"]], ["mod", "def", "principal", ["order", "ideal"]], ["add", "theorem", "principal_bot", ["order", "ideal"]], ["add", "theorem", "principal_top", ["order", "ideal"]], ["mod", "theorem", "sup_mem", ["order", "ideal"]], ["add", "theorem", "to_lower_set_injective", ["order", "ideal"]], ["mod", "theorem", "top_of_top_mem", ["order", "ideal"]], ["add", "theorem", "top_to_lower_set", ["order", "ideal"]], ["mod", "structure", "ideal", ["order"]]]}, {"oldPath": "src/order/pfilter.lean", "newPath": "src/order/pfilter.lean", "changes": [["mod", "theorem", "ext", ["order", "pfilter"]], ["mod", "theorem", "inf_mem", ["order", "pfilter"]], ["mod", "theorem", "mem_of_le", ["order", "pfilter"]], ["mod", "theorem", "top_mem", ["order", "pfilter"]]]}, {"oldPath": "src/order/prime_ideal.lean", "newPath": "src/order/prime_ideal.lean", "changes": []}]}, {"timestamp": 1650858860, "sha": "d4d5b6d2", "message": "chore(scripts): update nolints.txt (#13679)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1650858858, "sha": "65edf255", "message": "feat(set_theory/game/pgame): `x.move_left i < x` and variants (#13654)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "lt_mk", ["pgame"]], ["add", "theorem", "lt_move_right", ["pgame"]], ["add", "theorem", "mk_lt", ["pgame"]], ["add", "theorem", "move_left_lt", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["del", "theorem", "lt_move_right", ["pgame", "numeric"]], ["del", "theorem", "move_left_lt", ["pgame", "numeric"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1650851683, "sha": "454b8848", "message": "chore(topology/metric_space/basic): golf an instance (#13664)\nGolf the proof of `prod.pseudo_metric_space_max` using\n`pseudo_emetric_space.to_pseudo_metric_space_of_dist`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1650851682, "sha": "9101c48b", "message": "docs(number_theory/sum_two_squares): Update docs (#13593)\nWe add a remark for an alternate name for the theorem, and a todo note for a generalization of it.", "changes": [{"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": [["mod", "theorem", "sq_add_sq", ["nat", "prime"]]]}]}, {"timestamp": 1650851681, "sha": "045fc443", "message": "docs(tactic/algebra): Module docstring (#13571)\nWrite the module docstring.", "changes": [{"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}]}, {"timestamp": 1650847160, "sha": "54d1ddd2", "message": "feat(algebra/polynomial/big_operators): add a lemma, reduce assumptions, golf (#13264)", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["add", "theorem", "degree_list_prod", ["polynomial"]], ["mod", "theorem", "nat_degree_multiset_prod", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}]}, {"timestamp": 1650832646, "sha": "0d16bb4d", "message": "refactor(*): migrate from `filter.lift' _ powerset` to `filter.small_sets` (#13673)", "changes": [{"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "exists_measurable_mem_of_lift'", ["filter", "eventually"]], ["add", "theorem", "exists_measurable_mem_of_small_sets", ["filter", "eventually"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/order/filter/interval.lean", "newPath": "src/order/filter/interval.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["del", "theorem", "eventually_lift'_powerset'", ["filter"]], ["del", "theorem", "eventually_lift'_powerset", ["filter"]], ["del", "theorem", "eventually_lift'_powerset_eventually", ["filter"]], ["del", "theorem", "eventually_lift'_powerset_forall", ["filter"]], ["del", "theorem", "lift'_inf_powerset", ["filter"]], ["del", "theorem", "lift'_infi_powerset", ["filter"]], ["del", "theorem", "tendsto_lift'_powerset_mono", ["filter"]]]}, {"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": [["add", "theorem", "comap_small_sets", ["filter"]], ["add", "theorem", "eventually_small_sets'", ["filter"]], ["add", "theorem", "eventually_small_sets", ["filter"]], ["add", "theorem", "eventually_small_sets_eventually", ["filter"]], ["add", "theorem", "eventually_small_sets_forall", ["filter"]], ["mod", "theorem", "small_sets", ["filter", "has_basis"]], ["mod", "theorem", "has_basis_small_sets", ["filter"]], ["add", "theorem", "monotone_small_sets", ["filter"]], ["mod", "def", "small_sets", ["filter"]], ["add", "theorem", "small_sets_bot", ["filter"]], ["add", "theorem", "small_sets_comap", ["filter"]], ["add", "theorem", "small_sets_inf", ["filter"]], ["add", "theorem", "small_sets_infi", ["filter"]], ["add", "theorem", "small_sets_principal", ["filter"]], ["add", "theorem", "small_sets_top", ["filter"]], ["add", "theorem", "small_sets_mono", ["filter", "tendsto"]], ["mod", "theorem", "tendsto_small_sets_iff", ["filter"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": [["mod", "theorem", "bsupr_limsup_dimH", []], ["mod", "theorem", "supr_limsup_dimH", []]]}]}, {"timestamp": 1650821032, "sha": "53a484e6", "message": "chore(order/filter/small_sets): redefine, golf (#13672)\nThe new definition is defeq to the old one.", "changes": [{"oldPath": "src/order/filter/small_sets.lean", "newPath": "src/order/filter/small_sets.lean", "changes": [["mod", "def", "small_sets", ["filter"]]]}]}, {"timestamp": 1650805530, "sha": "42b9cdf8", "message": "feat(data/quot): Decidability of `quotient.lift` and friends (#13589)\nand make `antisymmetrization.linear_order` computable.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/order/antisymmetrization.lean", "newPath": "src/order/antisymmetrization.lean", "changes": []}]}, {"timestamp": 1650798375, "sha": "63da426d", "message": "refactor(linear_algebra/dimension): further generalisations to division_ring (#13657)", "changes": [{"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "rank_zero", []]]}]}, {"timestamp": 1650788500, "sha": "81262559", "message": "feat(set_theory/surreal/basic): Definitional characterization of `numeric` (#13653)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "numeric_def", ["pgame"]]]}]}, {"timestamp": 1650783175, "sha": "e006f38c", "message": "feat(algebra/hom/iterate): Iterating an action (#13659)\nThis PR adds `smul_iterate`, generalizing `mul_left_iterate` and `mul_right_iterate`.", "changes": [{"oldPath": "src/algebra/hom/iterate.lean", "newPath": "src/algebra/hom/iterate.lean", "changes": [["add", "theorem", "smul_iterate", []]]}]}, {"timestamp": 1650774058, "sha": "b8b8bf3e", "message": "refactor(category_theory/monoidal): prove coherence lemmas by coherence (#13406)\nNow that we have a basic monoidal coherence tactic, we can replace some boring proofs of particular coherence lemmas with `by coherence`.\nI've also simply deleted a few lemmas which are not actually used elsewhere in mathlib, and can be proved `by coherence`.", "changes": [{"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["del", "theorem", "id_tensor_right_unitor_inv", ["category_theory", "monoidal_category"]], ["del", "theorem", "left_unitor_inv_tensor_id", ["category_theory", "monoidal_category"]], ["del", "theorem", "left_unitor_tensor'", ["category_theory", "monoidal_category"]], ["del", "theorem", "left_unitor_tensor", ["category_theory", "monoidal_category"]], ["del", "theorem", "left_unitor_tensor_inv'", ["category_theory", "monoidal_category"]], ["del", "theorem", "left_unitor_tensor_inv", ["category_theory", "monoidal_category"]], ["del", "theorem", "pentagon_comp_id_tensor", ["category_theory", "monoidal_category"]], ["del", "theorem", "pentagon_hom_inv", ["category_theory", "monoidal_category"]], ["del", "theorem", "pentagon_inv_hom", ["category_theory", "monoidal_category"]], ["del", "theorem", "pentagon_inv_inv_hom", ["category_theory", "monoidal_category"]], ["del", "theorem", "triangle_assoc_comp_right_inv", ["category_theory", "monoidal_category"]], ["del", "theorem", "unitors_equal", ["category_theory", "monoidal_category"]], ["del", "theorem", "unitors_inv_equal", ["category_theory", "monoidal_category"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/coherence_lemmas.lean", "changes": [["add", "theorem", "id_tensor_right_unitor_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_inv_tensor_id", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_tensor'", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_tensor_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_hom_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_inv_hom", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_inv_inv_hom", ["category_theory", "monoidal_category"]], ["add", "theorem", "triangle_assoc_comp_right_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "unitors_equal", ["category_theory", "monoidal_category"]], ["add", "theorem", "unitors_inv_equal", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/rigid.lean", "newPath": "src/category_theory/monoidal/rigid.lean", "changes": []}]}, {"timestamp": 1650766951, "sha": "92ca1369", "message": "feat(set_theory/game/pgame): Birthdays of pre-games (#13636)", "changes": [{"oldPath": null, "newPath": "src/set_theory/game/birthday.lean", "changes": [["add", "theorem", "birthday_def", ["pgame"]], ["add", "theorem", "birthday_move_left_lt", ["pgame"]], ["add", "theorem", "birthday_move_right_lt", ["pgame"]], ["add", "theorem", "birthday_zero", ["pgame"]], ["add", "theorem", "lt_birthday_iff", ["pgame"]], ["add", "theorem", "birthday_congr", ["pgame", "relabelling"]]]}]}, {"timestamp": 1650766950, "sha": "5998b497", "message": "chore(order/filter/basic): golf 2 proofs (#13614)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1650766948, "sha": "946f253c", "message": "chore(set_theory/game/pgame): Cleanup (#13612)\nWe remove redundant parentheses, and make arguments explicit when they can't be inferred.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "add_left_neg_equiv", ["pgame"]], ["mod", "theorem", "add_left_neg_le_zero", ["pgame"]], ["mod", "theorem", "add_right_neg_equiv", ["pgame"]], ["mod", "theorem", "add_right_neg_le_zero", ["pgame"]], ["mod", "theorem", "zero_le_add_left_neg", ["pgame"]], ["mod", "theorem", "zero_le_add_right_neg", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}]}, {"timestamp": 1650766947, "sha": "b0552c15", "message": "docs(tactic/lint/default): Module docstring (#13570)\nWrite the module docstring.", "changes": [{"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}]}, {"timestamp": 1650760610, "sha": "2d0ff329", "message": "chore(algebra/*): move function instances (#13650)\nThese should have been much earlier, but I put them in their current places to avoid large build times in what was an already large refactor.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}]}, {"timestamp": 1650753807, "sha": "cc406db0", "message": "feat(algebra/ring/basic): generalisation linter suggestions (#13649)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "is_regular_of_ne_zero'", []], ["mod", "theorem", "pred_ne_self", []], ["mod", "theorem", "succ_ne_self", []]]}]}, {"timestamp": 1650753806, "sha": "1abfde6c", "message": "chore(group_theory/exponent): generalise (#13647)\nGeneralises a few lemmas to not require cancellativity.", "changes": [{"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": []}]}, {"timestamp": 1650753805, "sha": "34b1cfd8", "message": "feat(set_theory/game/pgame): Strengthen `move_{left/right}_mk` (#13646)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "move_left_mk", ["pgame"]], ["mod", "theorem", "move_right_mk", ["pgame"]]]}]}, {"timestamp": 1650753804, "sha": "44a05db5", "message": "fix(topology/algebra/matrix): correct a lemma name (#13640)", "changes": [{"oldPath": "src/topology/algebra/matrix.lean", "newPath": "src/topology/algebra/matrix.lean", "changes": [["add", "theorem", "matrix_diagonal", ["continuous"]], ["del", "theorem", "diagonal", ["continuous_matrix"]]]}]}, {"timestamp": 1650748227, "sha": "09eb35fd", "message": "feat(data/part): add get_or_else_of_dom (#13588)\nAdds a lemma", "changes": [{"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": [["add", "theorem", "get_or_else_of_dom", ["part"]], ["add", "theorem", "get_or_else_of_not_dom", ["part"]], ["add", "theorem", "not_none_dom", ["part"]], ["add", "theorem", "some_dom", ["part"]]]}]}, {"timestamp": 1650707422, "sha": "afd8a525", "message": "feat(order/hom/basic): add simp lemmas for `strict_mono.order_iso` and friends (#13606)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "coe_order_iso_of_surjective", ["strict_mono"]], ["mod", "def", "order_iso_of_right_inverse", ["strict_mono"]], ["add", "theorem", "order_iso_of_surjective_self_symm_apply", ["strict_mono"]], ["add", "theorem", "order_iso_of_surjective_symm_apply_self", ["strict_mono"]]]}]}, {"timestamp": 1650692389, "sha": "8c262dae", "message": "chore(analysis/normed_space/ray): golf (#13629)\nGolf 2 proofs", "changes": [{"oldPath": "src/analysis/normed_space/ray.lean", "newPath": "src/analysis/normed_space/ray.lean", "changes": []}]}, {"timestamp": 1650692388, "sha": "4ad7dc9d", "message": "chore(algebra/ring/equiv): protect ring equiv lemmas for big operators (#13624)", "changes": [{"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": [["del", "theorem", "map_list_prod", ["ring_equiv"]], ["del", "theorem", "map_list_sum", ["ring_equiv"]], ["del", "theorem", "map_multiset_prod", ["ring_equiv"]], ["del", "theorem", "map_multiset_sum", ["ring_equiv"]], ["del", "theorem", "map_prod", ["ring_equiv"]], ["del", "theorem", "map_sum", ["ring_equiv"]], ["del", "theorem", "unop_map_list_prod", ["ring_equiv"]]]}]}, {"timestamp": 1650692387, "sha": "fe435de8", "message": "feat(algebra/algebra/basic,analysis/normed_space/basic): The zero ring is a (normed) algebra (#13618)\nThis instance probably isn't very useful, but it's nice to have in the docs as an example of what `normed_algebra` permits.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_punit", ["algebra"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1650692385, "sha": "0bea7a08", "message": "feat(set_theory/pgame): Lemmas about order and left/right moves (#13590)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["add", "theorem", "lt_move_right_of_le", ["pgame"]], ["add", "theorem", "lt_of_le_move_left", ["pgame"]], ["add", "theorem", "lt_of_move_right_le", ["pgame"]], ["add", "theorem", "move_left_lt_of_le", ["pgame"]]]}]}, {"timestamp": 1650686908, "sha": "26b2d727", "message": "feat(set_theory/game/pgame): Empty instances (#13635)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}]}, {"timestamp": 1650686907, "sha": "94f970a6", "message": "feat(linear_algebra/basic): add a simp lemma for comp_right (#13625)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comp_right_apply", ["linear_map"]]]}]}, {"timestamp": 1650686906, "sha": "b62b5314", "message": "doc(analysis/normed_space/basic): Explain how to use non-unital normed algebras (#13605)\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/.E2.9C.94.20Is.20the.20zero.20algebra.20normed.3F/near/279555566)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1650684396, "sha": "79ea30ce", "message": "chore(scripts): update nolints.txt (#13637)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1650670676, "sha": "9923362c", "message": "doc(measure_theory): add some missing `to_additive` docstrings (#13456)", "changes": [{"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/group/integration.lean", "newPath": "src/measure_theory/group/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}]}, {"timestamp": 1650666719, "sha": "976c544c", "message": "feat(algebra/order/archimedean): Comparing with rationals determines the order (#13602)\nIn a linear ordered field, if `q < x → q ≤ y` for all `q : ℚ`, then `x ≤ y`, and similar results.", "changes": [{"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["add", "theorem", "eq_of_forall_lt_rat_iff_lt", []], ["add", "theorem", "eq_of_forall_rat_lt_iff_lt", []], ["add", "theorem", "le_of_forall_lt_rat_imp_le", []], ["add", "theorem", "le_of_forall_rat_lt_imp_le", []]]}]}, {"timestamp": 1650666718, "sha": "b98bd418", "message": "feat(topology/uniform_space/matrix): Add the uniform_space structure on matrices (#13534)", "changes": [{"oldPath": null, "newPath": "src/topology/uniform_space/matrix.lean", "changes": [["add", "theorem", "uniform_continuous", ["matrix"]], ["add", "theorem", "uniformity", ["matrix"]]]}]}, {"timestamp": 1650657980, "sha": "45470769", "message": "chore(*): use zero_lt_two/two_ne_zero lemmas more (#13609)", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "mul_self_ne_zero", []], ["add", "theorem", "zero_ne_mul_self", []]]}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}]}, {"timestamp": 1650657979, "sha": "9eb3858a", "message": "feat(combinatorics/pigeonhole): Pigeons in linear commutative rings (#13308)\nDuplicate almost all the pigeonhole principle API to work in `linear_ordered_comm_ring`s.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "cast_card", ["finset"]]]}, {"oldPath": "src/combinatorics/pigeonhole.lean", "newPath": "src/combinatorics/pigeonhole.lean", "changes": [["add", "theorem", "exists_card_fiber_le_of_card_le_nsmul", ["finset"]], ["add", "theorem", "exists_card_fiber_lt_of_card_lt_nsmul", ["finset"]], ["add", "theorem", "exists_le_card_fiber_of_nsmul_le_card_of_maps_to", ["finset"]], ["add", "theorem", "exists_lt_card_fiber_of_nsmul_lt_card_of_maps_to", ["finset"]], ["add", "theorem", "exists_card_fiber_le_of_card_le_nsmul", ["fintype"]], ["add", "theorem", "exists_card_fiber_lt_of_card_lt_nsmul", ["fintype"]], ["add", "theorem", "exists_le_card_fiber_of_nsmul_le_card", ["fintype"]], ["add", "theorem", "exists_lt_card_fiber_of_nsmul_lt_card", ["fintype"]]]}]}, {"timestamp": 1650657978, "sha": "7be21e09", "message": "feat(topology/algebra/group): quotient by a closed subgroup is regular (#13278)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "t2_space", ["topological_group"]]]}]}, {"timestamp": 1650657976, "sha": "ad3e6672", "message": "feat(order/chain): Flags (#13089)\nDefine the type of maximal chains, aka flags, of an order.", "changes": [{"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "set_pairwise_iff", ["reflexive"]], ["add", "theorem", "pairwise_iff_of_refl", ["set"]]]}, {"oldPath": "src/order/chain.lean", "newPath": "src/order/chain.lean", "changes": [["add", "theorem", "bot_mem", ["flag"]], ["add", "theorem", "chain_le", ["flag"]], ["add", "theorem", "chain_lt", ["flag"]], ["add", "theorem", "coe_mk", ["flag"]], ["add", "theorem", "ext", ["flag"]], ["add", "theorem", "mem_coe_iff", ["flag"]], ["add", "theorem", "mk_coe", ["flag"]], ["add", "theorem", "top_mem", ["flag"]], ["add", "structure", "flag", []], ["add", "theorem", "bot_mem", ["is_max_chain"]], ["add", "theorem", "top_mem", ["is_max_chain"]]]}]}, {"timestamp": 1650651350, "sha": "9c3cb72c", "message": "feat(data/int/basic): Add unit lemmas (#13565)\nThis PR adds a few more unit lemmas, and cleans up some of the proofs.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "units_sq", ["int"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "is_unit_mul_self", ["int"]], ["add", "theorem", "is_unit_sq", ["int"]], ["mod", "theorem", "units_inv_eq_self", ["int"]], ["add", "theorem", "units_sq", ["int"]]]}]}, {"timestamp": 1650651349, "sha": "695e0b70", "message": "feat(analysis/convex/strict_convex_space): Verify strict convexity from fixed scalars (#13548)\nProve that `∀ x y : E, ∥x∥ ≤ 1 → ∥y∥ ≤ 1 → x ≠ y → ∥a • x + b • y∥ < 1` for **fixed** `a` and `b` is enough for `E` to be a strictly convex space.", "changes": [{"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": [["add", "theorem", "of_norm_add_lt", ["strict_convex_space"]], ["add", "theorem", "of_norm_add_lt_aux", ["strict_convex_space"]]]}]}, {"timestamp": 1650651348, "sha": "2e83d617", "message": "feat(topology/metric_space/hausdorff_distance): Thickening the closure (#13515)\n`thickening δ (closure s) = thickening δ s` and other simple lemmas. Also rename `inf_edist_le_inf_edist_of_subset` to `inf_edist_anti` and make arguments to `mem_thickening_iff` implicit.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "infi_Union", []], ["add", "theorem", "supr_Union", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "inf_edist_Union", ["emetric"]], ["add", "theorem", "inf_edist_anti", ["emetric"]], ["add", "theorem", "inf_edist_le_edist_add_inf_edist", ["emetric"]], ["del", "theorem", "inf_edist_le_inf_edist_of_subset", ["emetric"]], ["add", "theorem", "cthickening_closure", ["metric"]], ["add", "theorem", "cthickening_union", ["metric"]], ["add", "theorem", "inf_edist_le_inf_edist_cthickening_add", ["metric"]], ["add", "theorem", "inf_edist_le_inf_edist_thickening_add", ["metric"]], ["add", "theorem", "mem_cthickening_iff", ["metric"]], ["mod", "theorem", "mem_thickening_iff", ["metric"]], ["add", "theorem", "mem_thickening_iff_inf_edist_lt", ["metric"]], ["add", "theorem", "thickening_Union", ["metric"]], ["add", "theorem", "thickening_closure", ["metric"]], ["add", "theorem", "thickening_of_nonpos", ["metric"]], ["add", "theorem", "thickening_union", ["metric"]]]}]}, {"timestamp": 1650640605, "sha": "355d68ab", "message": "chore(ring_theory/roots_of_unity): primitive roots are not zero (#13587)", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1650640604, "sha": "79ac4c81", "message": "chore(data/polynomial/degree/definitions): simplify sum_fin, degree_C_le (#13564)", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "nat_degree_lt_iff_degree_lt", ["polynomial"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "get_or_else_bot_lt_iff", ["with_bot"]]]}]}, {"timestamp": 1650640602, "sha": "a74df9b5", "message": "feat(number_theory/legendre_symbol): add file quadratic_char.lean (#13503)\nThis adds the file `quadratic_char.lean` in `number_theory/legendre_symbol/`.\nThis file contains (apart from some more general stuff on finite fields that is useful for what is done in the file) the definition of the quadratic character on a finite field `F` (with values in the integers) and a number of statements of properties.\nIt also defines quadratic characters on `zmod 4` and `zmod 8` that will be useful for the supplements to the law of quadratic reciprocity.", "changes": [{"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["add", "theorem", "is_square_zero", []]]}, {"oldPath": null, "newPath": "src/number_theory/legendre_symbol/quadratic_char.lean", "changes": [["add", "def", "quadratic_char", ["char"]], ["add", "theorem", "quadratic_char_dichotomy", ["char"]], ["add", "theorem", "quadratic_char_eq_one_of_char_two", ["char"]], ["add", "theorem", "quadratic_char_eq_pow_of_char_ne_two", ["char"]], ["add", "theorem", "quadratic_char_eq_zero_iff", ["char"]], ["add", "theorem", "quadratic_char_exists_neg_one", ["char"]], ["add", "def", "quadratic_char_hom", ["char"]], ["add", "theorem", "quadratic_char_mul", ["char"]], ["add", "theorem", "quadratic_char_one", ["char"]], ["add", "theorem", "quadratic_char_one_iff_is_square", ["char"]], ["add", "theorem", "quadratic_char_sq_one'", ["char"]], ["add", "theorem", "quadratic_char_sq_one", ["char"]], ["add", "theorem", "quadratic_char_sum_zero", ["char"]], ["add", "theorem", "quadratic_char_zero", ["char"]], ["add", "theorem", "exists_nonsquare", ["finite_field"]], ["add", "theorem", "is_square_iff", ["finite_field"]], ["add", "theorem", "is_square_of_char_two", ["finite_field"]], ["add", "theorem", "neg_one_ne_one_of_char_ne_two", ["finite_field"]], ["add", "theorem", "odd_card_of_char_ne_two", ["finite_field"]], ["add", "theorem", "pow_dichotomy", ["finite_field"]], ["add", "theorem", "unit_is_sqare_iff", ["finite_field"]], ["add", "theorem", "is_square_of_char_two'", []], ["add", "def", "χ₄", ["zmod"]], ["add", "def", "χ₈'", ["zmod"]], ["add", "def", "χ₈", ["zmod"]]]}]}, {"timestamp": 1650629736, "sha": "631890bf", "message": "chore(data/rat/basic): tidy some proofs (#13603)", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "mk_ne_zero", ["rat"]]]}]}, {"timestamp": 1650629735, "sha": "f7dac5ea", "message": "feat(logic/basic): add `auto_param.out` and `opt_param.out` (#13599)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "def", "out", ["auto_param"]], ["add", "def", "out", ["opt_param"]]]}]}, {"timestamp": 1650629734, "sha": "6729cca2", "message": "feat(set_theory/game/pgame): simp + private (#13596)", "changes": [{"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["mod", "theorem", "not_le", ["pgame"]], ["del", "theorem", "not_le_lt", ["pgame"]], ["mod", "theorem", "not_lt", ["pgame"]]]}]}, {"timestamp": 1650629732, "sha": "62205c27", "message": "refactor(data/nat/factorization): Infer arguments (#13595)", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["mod", "theorem", "dvd_iff_div_factorization_eq_tsub", ["nat"]], ["mod", "theorem", "factorization_eq_zero_of_non_prime", ["nat"]]]}]}, {"timestamp": 1650627675, "sha": "9abfff39", "message": "chore(analysis/inner_product_space/lax_milgram): tidy some proofs (#13604)", "changes": [{"oldPath": "src/analysis/inner_product_space/lax_milgram.lean", "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": []}]}, {"timestamp": 1650616476, "sha": "3d24b093", "message": "feat(algebra/ring/basic): define non-unital ring homs (#13430)\nThis defines a new bundled hom type and associated class for non-unital (even non-associative) (semi)rings. The associated notation introduced for these homs is `α →ₙ+* β` to parallel the `ring_hom` notation `α →+* β`, where `ₙ` stands for \"non-unital\".", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "cancel_left", ["non_unital_ring_hom"]], ["add", "theorem", "cancel_right", ["non_unital_ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_id", ["non_unital_ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_injective", ["non_unital_ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_mk", ["non_unital_ring_hom"]], ["add", "theorem", "coe_coe", ["non_unital_ring_hom"]], ["add", "theorem", "coe_comp", ["non_unital_ring_hom"]], ["add", "theorem", "coe_comp_add_monoid_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_comp_mul_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mk", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul_hom_id", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul_hom_injective", ["non_unital_ring_hom"]], ["add", "theorem", "coe_mul_hom_mk", ["non_unital_ring_hom"]], ["add", "theorem", "coe_one", ["non_unital_ring_hom"]], ["add", "theorem", "coe_to_add_monoid_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_to_mul_hom", ["non_unital_ring_hom"]], ["add", "theorem", "coe_zero", ["non_unital_ring_hom"]], ["add", "def", "comp", ["non_unital_ring_hom"]], ["add", "theorem", "comp_apply", ["non_unital_ring_hom"]], ["add", "theorem", "comp_assoc", ["non_unital_ring_hom"]], ["add", "theorem", "comp_id", ["non_unital_ring_hom"]], ["add", "theorem", "comp_zero", ["non_unital_ring_hom"]], ["add", "theorem", "ext", ["non_unital_ring_hom"]], ["add", "theorem", "ext_iff", ["non_unital_ring_hom"]], ["add", "theorem", "id_apply", ["non_unital_ring_hom"]], ["add", "theorem", "id_comp", ["non_unital_ring_hom"]], ["add", "theorem", "mk_coe", ["non_unital_ring_hom"]], ["add", "theorem", "mul_def", ["non_unital_ring_hom"]], ["add", "theorem", "one_def", ["non_unital_ring_hom"]], ["add", "theorem", "to_fun_eq_coe", ["non_unital_ring_hom"]], ["add", "theorem", "zero_apply", ["non_unital_ring_hom"]], ["add", "theorem", "zero_comp", ["non_unital_ring_hom"]], ["add", "structure", "non_unital_ring_hom", []]]}]}, {"timestamp": 1650610062, "sha": "394dec32", "message": "feat(order/filter/small_sets): define the filter of small sets (#13467)\n* Main author is @PatrickMassot \n* From the sphere eversion project\n* Required for convolutions\nCo-authored by: Patrick Massot ", "changes": [{"oldPath": null, "newPath": "src/order/filter/small_sets.lean", "changes": [["add", "theorem", "small_sets", ["filter", "has_basis"]], ["add", "theorem", "has_basis_small_sets", ["filter"]], ["add", "def", "small_sets", ["filter"]], ["add", "theorem", "small_sets_eq_generate", ["filter"]], ["add", "theorem", "tendsto_small_sets_iff", ["filter"]]]}]}, {"timestamp": 1650610061, "sha": "9db59165", "message": "fix(data/fintype/basic): fix `fintype_of_option_equiv` (#13466)\nA type is a `fintype` if its successor (using `option`) is a `fintype`\nThis fixes an error introduced in #13086.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "def", "fintype_of_option_equiv", []]]}]}, {"timestamp": 1650610060, "sha": "0d77f29f", "message": "feat(analysis/calculus/specific_functions): define normed bump functions (#13463)\n* Normed bump functions have integral 1 w.r.t. the specified measure.\n* Also add a few more properties of bump functions, including its smoothness in all arguments (including midpoint and the two radii).\n* From the sphere eversion project\n* Required for convolutions", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["add", "theorem", "cont_diff_bump", ["cont_diff"]], ["add", "theorem", "cont_diff_normed", ["cont_diff_bump_of_inner"]], ["add", "theorem", "continuous_normed", ["cont_diff_bump_of_inner"]], ["add", "theorem", "has_compact_support_normed", ["cont_diff_bump_of_inner"]], ["add", "theorem", "integral_normed", ["cont_diff_bump_of_inner"]], ["add", "theorem", "integral_normed_smul", ["cont_diff_bump_of_inner"]], ["add", "theorem", "integral_pos", ["cont_diff_bump_of_inner"]], ["add", "theorem", "nonneg'", ["cont_diff_bump_of_inner"]], ["add", "theorem", "nonneg_normed", ["cont_diff_bump_of_inner"]], ["add", "theorem", "normed_def", ["cont_diff_bump_of_inner"]], ["add", "theorem", "normed_neg", ["cont_diff_bump_of_inner"]], ["add", "theorem", "normed_sub", ["cont_diff_bump_of_inner"]], ["add", "theorem", "support_normed_eq", ["cont_diff_bump_of_inner"]], ["add", "theorem", "tsupport_eq", ["cont_diff_bump_of_inner"]], ["add", "theorem", "tsupport_normed_eq", ["cont_diff_bump_of_inner"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "dist_self_sub_left", []], ["add", "theorem", "dist_self_sub_right", []]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "div_const", ["measure_theory", "integrable"]]]}, {"oldPath": "src/order/cover.lean", "newPath": "src/order/cover.lean", "changes": [["add", "theorem", "Iio_eq", ["covby"]], ["add", "theorem", "Ioi_eq", ["covby"]]]}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "eventually_lt", ["continuous_at"]], ["add", "theorem", "eventually_lt", ["tendsto"]]]}]}, {"timestamp": 1650610059, "sha": "06a6044f", "message": "feat(analysis/normed_space/exponential): Weaken typeclass requirements (#13444)\nThis allows the exponential to be defined independently of a choice of norm.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": [["mod", "theorem", "remove_zero_coeff_succ", ["formal_multilinear_series"]], ["mod", "theorem", "remove_zero_coeff_zero", ["formal_multilinear_series"]], ["mod", "theorem", "remove_zero_of_pos", ["formal_multilinear_series"]], ["mod", "def", "formal_multilinear_series", []]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["mod", "theorem", "exp_eq_tsum_field", []], ["mod", "theorem", "exp_series_apply_eq_field'", []], ["mod", "theorem", "exp_series_apply_eq_field", []], ["mod", "theorem", "exp_series_sum_eq_field", []], ["mod", "theorem", "exp_zero", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}]}, {"timestamp": 1650602048, "sha": "2b902eb3", "message": "chore(scripts): update nolints.txt (#13597)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1650602047, "sha": "79bc6ad4", "message": "feat(data/mv_polynomial/equiv): API for `mv_polynomial.fin_succ_equiv` (#10812)\nThis PR provides API for `mv_polynomial.fin_succ_equiv`: coefficients, degree, coefficientes of coefficients, degree_of of coefficients, etc.\nTo state and prove these lemmas I had to define `cons` and `tail` for maps `fin (n+1) →₀ M` and prove the usual properties for these. I'm not sure if this is necessary or the correct approach to do this.", "changes": [{"oldPath": null, "newPath": "src/data/finsupp/fin.lean", "changes": [["add", "def", "cons", ["finsupp"]], ["add", "theorem", "cons_ne_zero_iff", ["finsupp"]], ["add", "theorem", "cons_ne_zero_of_left", ["finsupp"]], ["add", "theorem", "cons_ne_zero_of_right", ["finsupp"]], ["add", "theorem", "cons_succ", ["finsupp"]], ["add", "theorem", "cons_tail", ["finsupp"]], ["add", "theorem", "cons_zero", ["finsupp"]], ["add", "theorem", "cons_zero_zero", ["finsupp"]], ["add", "def", "tail", ["finsupp"]], ["add", "theorem", "tail_apply", ["finsupp"]], ["add", "theorem", "tail_cons", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "theorem", "coeff_eval_eq_eval_coeff", ["mv_polynomial"]], ["add", "theorem", "degree_fin_succ_equiv", ["mv_polynomial"]], ["add", "theorem", "degree_of_coeff_fin_succ_equiv", ["mv_polynomial"]], ["add", "theorem", "eval_eq_eval_mv_eval'", ["mv_polynomial"]], ["mod", "def", "fin_succ_equiv", ["mv_polynomial"]], ["add", "theorem", "fin_succ_equiv_X_succ", ["mv_polynomial"]], ["add", "theorem", "fin_succ_equiv_X_zero", ["mv_polynomial"]], ["mod", "theorem", "fin_succ_equiv_apply", ["mv_polynomial"]], ["add", "theorem", "fin_succ_equiv_coeff_coeff", ["mv_polynomial"]], ["mod", "theorem", "fin_succ_equiv_eq", ["mv_polynomial"]], ["add", "theorem", "fin_succ_equiv_support'", ["mv_polynomial"]], ["add", "theorem", "fin_succ_equiv_support", ["mv_polynomial"]], ["add", "theorem", "nat_degree_fin_succ_equiv", ["mv_polynomial"]], ["add", "theorem", "support_coeff_fin_succ_equiv", ["mv_polynomial"]], ["add", "theorem", "support_fin_succ_equiv_nonempty", ["mv_polynomial"]]]}]}, {"timestamp": 1650591262, "sha": "17d24243", "message": "feat(polynomial/cyclotomic): `eval_apply` (#13586)", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "eval_apply", ["polynomial", "cyclotomic"]]]}]}, {"timestamp": 1650591261, "sha": "40fc58cb", "message": "feat(data/quot): `quotient.out` is injective (#13584)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "out_injective", ["quotient"]]]}]}, {"timestamp": 1650591260, "sha": "821e7c89", "message": "doc(category_theory/limits/has_limits): fix two docstrings (#13581)", "changes": [{"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": []}]}, {"timestamp": 1650591259, "sha": "7b92db75", "message": "chore(set_theory/cardinal/basic): Fix spacing (#13562)", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}]}, {"timestamp": 1650591257, "sha": "1da12b57", "message": "fix(analysis/normed_space/basic): allow the zero ring to be a normed algebra (#13544)\nThis replaces `norm_algebra_map_eq : ∀ x : 𝕜, ∥algebra_map 𝕜 𝕜' x∥ = ∥x∥` with `norm_smul_le : ∀ (r : 𝕜) (x : 𝕜'), ∥r • x∥ ≤ ∥r∥ * ∥x∥` in `normed_algebra`. With this change, `normed_algebra` means nothing more than \"a normed module that is also an algebra\", which seems to be the only notion actually used in mathlib anyway. In practice, this change really just removes any constraints on `∥1∥`.\nThe old meaning of `[normed_algebra R A]` is now achieved with `[normed_algebra R A] [norm_one_class A]`.\nAs a result, lemmas like `normed_algebra.norm_one_class` and `normed_algebra.nontrivial` have been removed, as they no longer make sense now that the two typeclasses are entirely orthogonal.\nNotably this means that the following `normed_algebra` instances hold more generally than before:\n* `continuous_linear_map.to_normed_algebra`\n* `pi.normed_algebra`\n* `bounded_continuous_function.normed_algebra`\n* `continuous_map.normed_algebra`\n* Instances not yet in mathlib:\n * Matrices under the `L1-L_inf` norm are a normed algebra even if the matrix is empty\n * Matrices under the frobenius norm are a normed algebra (note `∥(1 : matrix n n 𝕜')∥ = \\sqrt (fintype.card n)` with that norm)\nThis last one is the original motivation for this PR; otherwise every lemma about a matrix exponential has to case on whether the matrices are empty.\nIt is possible that some of the `[norm_one_class A]`s added in `spectrum.lean` are unnecessary; however, the assumptions are no stronger than they were before, and I'm not interested in trying to generalize them as part of this PR.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Is.20the.20zero.20algebra.20normed.3F/near/279515954)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": [["add", "theorem", "nontrivial", ["norm_one_class"]], ["add", "theorem", "nnnorm_pos", ["units"]], ["del", "theorem", "nnorm_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "def", "algebra_map_clm", []], ["mod", "theorem", "algebra_map_clm_coe", []], ["mod", "theorem", "algebra_map_clm_to_linear_map", []], ["mod", "theorem", "algebra_map_isometry", []], ["add", "theorem", "nnnorm_algebra_map'", []], ["add", "theorem", "nnnorm_algebra_map", []], ["del", "theorem", "nnorm_algebra_map_eq", []], ["add", "theorem", "norm_algebra_map'", []], ["add", "theorem", "norm_algebra_map", []], ["del", "theorem", "norm_algebra_map_eq", []], ["del", "theorem", "nontrivial", ["normed_algebra"]], ["del", "theorem", "norm_one", ["normed_algebra"]], ["del", "theorem", "norm_one_class", ["normed_algebra"]], ["del", "theorem", "zero_ne_one", ["normed_algebra"]]]}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "coe_lmul_rightₗᵢ", ["continuous_linear_map"]], ["mod", "theorem", "coe_lmulₗᵢ", ["continuous_linear_map"]], ["mod", "def", "lmul_rightₗᵢ", ["continuous_linear_map"]], ["mod", "def", "lmulₗᵢ", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_lmul", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_lmul_apply", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_apply_le", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_lmul_right", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_lmul_right_apply", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_right_apply_le", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["mod", "theorem", "continuous", ["alg_hom"]], ["mod", "def", "to_continuous_linear_map", ["alg_hom"]], ["mod", "theorem", "is_bounded", ["spectrum"]], ["mod", "theorem", "is_compact", ["spectrum"]], ["mod", "theorem", "mem_resolvent_of_norm_lt", ["spectrum"]], ["mod", "theorem", "norm_le_norm_of_mem", ["spectrum"]], ["mod", "theorem", "pow_nnnorm_pow_one_div_tendsto_nhds_spectral_radius", ["spectrum"]], ["mod", "theorem", "pow_norm_pow_one_div_tendsto_nhds_spectral_radius", ["spectrum"]], ["mod", "theorem", "spectral_radius_le_nnnorm", ["spectrum"]], ["mod", "theorem", "spectral_radius_le_pow_nnnorm_pow_one_div", ["spectrum"]], ["mod", "theorem", "subset_closed_ball_norm", ["spectrum"]]]}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["mod", "theorem", "spectral_radius_eq_nnnorm_of_self_adjoint", []], ["mod", "theorem", "spectral_radius_eq_nnnorm_of_star_normal", []]]}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": [["add", "theorem", "nnnorm_coe", ["quaternion"]], ["del", "theorem", "nnorm_coe", ["quaternion"]]]}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["del", "theorem", "norm_algebra_map", ["algebra"]]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}]}, {"timestamp": 1650591256, "sha": "77236cd2", "message": "refactor(category_theory): make has_zero_object a Prop (#13517)", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": [["add", "theorem", "is_zero_of_subsingleton", ["CommGroup"]], ["add", "theorem", "is_zero_of_subsingleton", ["Group"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "theorem", "is_zero_of_subsingleton", ["Module"]]]}, {"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": []}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "theorem", "is_zero_zero", ["homological_complex"]]]}, {"oldPath": "src/algebra/homology/single.lean", "newPath": "src/algebra/homology/single.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": [["add", "theorem", "is_zero_of_subsingleton", ["SemiNormedGroup"]], ["add", "theorem", "is_zero_of_subsingleton", ["SemiNormedGroup₁"]]]}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/right_derived.lean", "newPath": "src/category_theory/abelian/right_derived.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/functor/left_derived.lean", "newPath": "src/category_theory/functor/left_derived.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["del", "def", "has_zero_object_of_has_finite_biproducts", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": [["add", "theorem", "zero_obj", ["category_theory", "functor"]], ["del", "theorem", "zero_map", ["category_theory", "limits", "has_zero_object", "functor"]], ["del", "theorem", "zero_obj", ["category_theory", "limits", "has_zero_object", "functor"]], ["add", "theorem", "has_zero_object_of_has_initial_object", ["category_theory", "limits"]], ["del", "def", "has_zero_object_of_has_initial_object", ["category_theory", "limits"]], ["add", "theorem", "has_zero_object_of_has_terminal_object", ["category_theory", "limits"]], ["del", "def", "has_zero_object_of_has_terminal_object", ["category_theory", "limits"]], ["add", "theorem", "map", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "zero_map", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero_objects.lean", "newPath": "src/category_theory/limits/shapes/zero_objects.lean", "changes": [["add", "theorem", "is_zero", ["category_theory", "functor"]], ["add", "theorem", "is_zero_iff", ["category_theory", "functor"]], ["add", "theorem", "is_zero_iff", ["category_theory", "iso"]], ["del", "def", "iso_zero", ["category_theory", "limits", "has_zero_object", "is_zero"]], ["del", "theorem", "is_zero_zero", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "has_zero_object", ["category_theory", "limits", "is_zero"]], ["add", "def", "iso_zero", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "obj", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "is_zero_zero", ["category_theory", "limits"]], ["del", "theorem", "is_zero_iff", ["category_theory", "limits", "iso"]]]}]}, {"timestamp": 1650591255, "sha": "dced1336", "message": "feat(group_theory/group_action/basic): Right multiplication satisfies the `quotient_action` axiom (#13475)\nThis PR adds a `quotient_action` instance for right multiplication.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}]}, {"timestamp": 1650591254, "sha": "bb9d1c50", "message": "chore(*): remove `subst` when not necessary (#13453)\nWhere possible, this replaces `subst` with `obtain rfl` (which is equivalent to `have` and then `subst`, golfing a line).\nThis also tidies some non-terminal `simp`s.", "changes": [{"oldPath": "archive/imo/imo1960_q1.lean", "newPath": "archive/imo/imo1960_q1.lean", "changes": []}, {"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/category_theory/category/basic.lean", "newPath": "src/category_theory/category/basic.lean", "changes": [["mod", "theorem", "cancel_epi", ["category_theory"]]]}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/strict_initial.lean", "newPath": "src/category_theory/limits/shapes/strict_initial.lean", "changes": []}, {"oldPath": "src/control/applicative.lean", "newPath": "src/control/applicative.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": [["mod", "theorem", "le_f_of_mem_approx", ["part", "fix"]]]}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/permutation.lean", "newPath": "src/data/list/permutation.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": [["mod", "theorem", "is_path_cons'", ["pfunctor", "M"]], ["mod", "theorem", "is_path_cons", ["pfunctor", "M"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal/notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["mod", "theorem", "pair_inj", ["Set"]]]}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": []}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1650584215, "sha": "afb43923", "message": "feat(linear_algebra/prod): two lemmas about prod_map (#13572)", "changes": [{"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "prod_map_comp", ["linear_map"]], ["add", "theorem", "prod_map_id", ["linear_map"]], ["add", "def", "prod_map_monoid_hom", ["linear_map"]], ["add", "theorem", "prod_map_mul", ["linear_map"]], ["add", "theorem", "prod_map_one", ["linear_map"]]]}]}, {"timestamp": 1650584214, "sha": "d444a279", "message": "feat(group_theory/transfer): Define the transfer homomorphism (#13446)\nThis PR adds a definition of the transfer homomorphism.", "changes": [{"oldPath": null, "newPath": "src/group_theory/transfer.lean", "changes": [["add", "theorem", "transfer_def", ["monoid_hom"]], ["add", "theorem", "diff_inv", ["subgroup", "left_transversals"]], ["add", "theorem", "diff_mul_diff", ["subgroup", "left_transversals"]], ["add", "theorem", "diff_self", ["subgroup", "left_transversals"]], ["add", "theorem", "smul_diff_smul", ["subgroup", "left_transversals"]]]}]}, {"timestamp": 1650584213, "sha": "b1a1ece3", "message": "feat(ring_theory/valuation/valuation_subring): The order structure on valuation subrings of a field (#13429)\nThis PR shows that for a valuation subring `R` of a field `K`, the coarsenings of `R` are in (anti)ordered bijections with the prime ideals of `R`. As a corollary, the collection of such coarsenings is totally ordered.", "changes": [{"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/localization/as_subring.lean", "changes": [["add", "theorem", "map_is_unit_of_le", ["localization"]], ["add", "def", "map_to_fraction_ring", ["localization"]], ["add", "theorem", "map_to_fraction_ring_apply", ["localization"]], ["add", "theorem", "mem_range_map_to_fraction_ring_iff", ["localization"]], ["add", "theorem", "mem_range_map_to_fraction_ring_iff_of_field", ["localization", "subalgebra"]], ["add", "def", "of_field", ["localization", "subalgebra"]], ["add", "def", "subalgebra", ["localization"]]]}, {"oldPath": "src/ring_theory/valuation/valuation_subring.lean", "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "add_mem", ["valuation_subring"]], ["add", "def", "ideal_of_le", ["valuation_subring"]], ["add", "theorem", "ideal_of_le_le_of_le", ["valuation_subring"]], ["add", "theorem", "ideal_of_le_of_prime", ["valuation_subring"]], ["add", "def", "inclusion", ["valuation_subring"]], ["add", "theorem", "le_of_prime", ["valuation_subring"]], ["add", "def", "map_of_le", ["valuation_subring"]], ["add", "theorem", "map_of_le_comp_valuation", ["valuation_subring"]], ["add", "theorem", "map_of_le_valuation_apply", ["valuation_subring"]], ["add", "theorem", "mem_of_subring", ["valuation_subring"]], ["mod", "theorem", "mem_of_valuation_le_one", ["valuation_subring"]], ["add", "theorem", "monotone_map_of_le", ["valuation_subring"]], ["add", "theorem", "mul_mem", ["valuation_subring"]], ["add", "theorem", "neg_mem", ["valuation_subring"]], ["add", "def", "of_le", ["valuation_subring"]], ["add", "def", "of_prime", ["valuation_subring"]], ["add", "theorem", "of_prime_ideal_of_le", ["valuation_subring"]], ["add", "theorem", "of_prime_le_of_le", ["valuation_subring"]], ["add", "theorem", "of_prime_valuation_eq_one_iff_mem_prime_compl", ["valuation_subring"]], ["add", "def", "of_subring", ["valuation_subring"]], ["add", "theorem", "one_mem", ["valuation_subring"]], ["add", "def", "prime_spectrum_equiv", ["valuation_subring"]], ["add", "def", "prime_spectrum_order_equiv", ["valuation_subring"]], ["add", "def", "subtype", ["valuation_subring"]], ["mod", "def", "valuation", ["valuation_subring"]], ["add", "theorem", "valuation_eq_one_iff", ["valuation_subring"]], ["add", "theorem", "valuation_lt_one_iff", ["valuation_subring"]], ["add", "theorem", "valuation_lt_one_or_eq_one", ["valuation_subring"]], ["add", "theorem", "valuation_unit", ["valuation_subring"]], ["add", "def", "value_group", ["valuation_subring"]], ["add", "theorem", "zero_mem", ["valuation_subring"]]]}]}, {"timestamp": 1650584211, "sha": "1e76b9eb", "message": "feat(topology/constructions): more convenient lemmas (#13423)\n* Define `continuous.fst'` and friends and `continuous.comp₂` and friends for convenience (and to help with elaborator issues)\n* Cleanup in `topology/constructions`\n* Define `set.preimage_inl_image_inr` and `set.preimage_inr_image_inl` and prove the `range` versions in terms of these. This required reordering some lemmas (moving general lemmas about `range` above the lemmas of interactions with `range` and specific functions).\n* From the sphere eversion project", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_inl_image_inr", ["set"]], ["add", "theorem", "preimage_inr_image_inl", ["set"]], ["mod", "theorem", "range_const_subset", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "comp₂", ["continuous"]], ["add", "theorem", "comp₃", ["continuous"]], ["add", "theorem", "comp₄", ["continuous"]], ["add", "theorem", "fst'", ["continuous"]], ["mod", "theorem", "mk", ["continuous", "prod"]], ["add", "theorem", "mk_left", ["continuous", "prod"]], ["add", "theorem", "snd'", ["continuous"]], ["add", "theorem", "fst''", ["continuous_at"]], ["add", "theorem", "fst'", ["continuous_at"]], ["add", "theorem", "snd''", ["continuous_at"]], ["add", "theorem", "snd'", ["continuous_at"]], ["mod", "theorem", "embedding_graph", []]]}]}, {"timestamp": 1650584210, "sha": "63ee5582", "message": "feat(algebra/big_operators): split products and sums over fin (a+b) (#13291)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_on_sum", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "theorem", "prod_congr'", ["fin"]], ["add", "theorem", "prod_trunc", ["fin"]], ["add", "theorem", "prod_univ_add", ["fin"]]]}]}, {"timestamp": 1650584209, "sha": "4d7683b2", "message": "feat(group_theory/torsion): torsion-free groups and quotients by torsion subgroups (#13173)", "changes": [{"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": [["add", "theorem", "not_torsion_free", ["is_torsion"]], ["add", "theorem", "not_torsion", ["is_torsion_free"]], ["add", "theorem", "prod", ["is_torsion_free"]], ["add", "theorem", "quotient_torsion", ["is_torsion_free"]], ["add", "theorem", "subgroup", ["is_torsion_free"]], ["add", "def", "is_torsion_free", ["monoid"]], ["add", "theorem", "not_is_torsion_free_iff", ["monoid"]], ["add", "theorem", "not_is_torsion_iff", ["monoid"]]]}]}, {"timestamp": 1650584208, "sha": "e728cfd4", "message": "feat(order/grade): Graded orders (#11308)\nDefine graded orders. To be the most general, we use `is_min`/`is_max` rather than `order_bot`/`order_top`. A grade is a function that respects the covering relation and eventually minimality/maximality.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "coe_strict_mono", ["fin"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_strict_mono", ["int"]]]}, {"oldPath": "src/data/int/succ_pred.lean", "newPath": "src/data/int/succ_pred.lean", "changes": [["add", "theorem", "cast_int_covby_iff", ["nat"]]]}, {"oldPath": "src/data/nat/succ_pred.lean", "newPath": "src/data/nat/succ_pred.lean", "changes": [["add", "theorem", "coe_covby_iff", ["fin"]]]}, {"oldPath": null, "newPath": "src/order/grade.lean", "changes": [["add", "theorem", "covby_iff_lt_covby_grade", []], ["add", "def", "grade", []], ["add", "theorem", "grade_bot", []], ["add", "def", "lift_left", ["grade_bounded_order"]], ["add", "def", "lift_right", ["grade_bounded_order"]], ["add", "theorem", "grade_covby_grade_iff", []], ["add", "theorem", "grade_eq_grade_iff", []], ["add", "theorem", "grade_injective", []], ["add", "theorem", "grade_le_grade_iff", []], ["add", "theorem", "grade_lt_grade_iff", []], ["add", "def", "lift_left", ["grade_max_order"]], ["add", "def", "lift_right", ["grade_max_order"]], ["add", "def", "fin_to_nat", ["grade_min_order"]], ["add", "def", "lift_left", ["grade_min_order"]], ["add", "def", "lift_right", ["grade_min_order"]], ["add", "theorem", "grade_mono", []], ["add", "theorem", "grade_ne_grade_iff", []], ["add", "theorem", "grade_of_dual", []], ["add", "def", "fin_to_nat", ["grade_order"]], ["add", "def", "lift_left", ["grade_order"]], ["add", "def", "lift_right", ["grade_order"]], ["add", "theorem", "grade_self", []], ["add", "theorem", "grade_strict_mono", []], ["add", "theorem", "grade_to_dual", []], ["add", "theorem", "grade_top", []], ["add", "theorem", "is_max_grade_iff", []], ["add", "theorem", "is_min_grade_iff", []]]}]}, {"timestamp": 1650584206, "sha": "8110ab9d", "message": "feat(number_theory/modular): fundamental domain part 2 (#8985)\nThis completes the argument that the standard open domain `{z : |z|>1, |\\Re(z)|<1/2}` is a fundamental domain for the action of `SL(2,\\Z)` on `\\H`. The first PR (#8611) showed that every point in the upper half plane has a representative inside its closure, and here we show that representatives in the open domain are unique.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "pow_four_le_pow_two_of_pow_two_le", []]]}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "abs_add'", []]]}, {"oldPath": "src/analysis/complex/upper_half_plane.lean", "newPath": "src/analysis/complex/upper_half_plane.lean", "changes": [["add", "theorem", "c_mul_im_sq_le_norm_sq_denom", ["upper_half_plane"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "eq_one_or_neg_one_of_mul_eq_one'", ["int"]], ["add", "theorem", "eq_one_or_neg_one_of_mul_eq_one", ["int"]], ["add", "theorem", "one_le_abs", ["int"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["mod", "theorem", "cast_abs", ["int"]], ["add", "theorem", "cast_four", ["int"]], ["add", "theorem", "cast_le_neg_one_of_neg", ["int"]], ["mod", "theorem", "cast_max", ["int"]], ["mod", "theorem", "cast_min", ["int"]], ["mod", "theorem", "cast_nat_abs", ["int"]], ["add", "theorem", "cast_one_le_of_pos", ["int"]], ["add", "theorem", "cast_three", ["int"]], ["add", "theorem", "nneg_mul_add_sq_of_abs_le_one", ["int"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": [["del", "def", "T'", ["modular_group"]], ["add", "theorem", "abs_c_le_one", ["modular_group"]], ["add", "theorem", "abs_two_mul_re_lt_one_of_mem_fdo", ["modular_group"]], ["add", "theorem", "c_eq_zero", ["modular_group"]], ["add", "theorem", "coe_S", ["modular_group"]], ["add", "theorem", "coe_T", ["modular_group"]], ["add", "theorem", "coe_T_inv", ["modular_group"]], ["add", "theorem", "coe_T_zpow", ["modular_group"]], ["add", "theorem", "coe_T_zpow_smul_eq", ["modular_group"]], ["mod", "theorem", "coe_smul", ["modular_group"]], ["mod", "theorem", "denom_apply", ["modular_group"]], ["add", "theorem", "eq_smul_self_of_mem_fdo_mem_fdo", ["modular_group"]], ["add", "theorem", "eq_zero_of_mem_fdo_of_T_zpow_mem_fdo", ["modular_group"]], ["add", "theorem", "exists_eq_T_zpow_of_c_eq_zero", ["modular_group"]], ["mod", "theorem", "exists_max_im", ["modular_group"]], ["mod", "theorem", "exists_row_one_eq_and_min_re", ["modular_group"]], ["add", "theorem", "exists_smul_mem_fd", ["modular_group"]], ["del", "theorem", "exists_smul_mem_fundamental_domain", ["modular_group"]], ["add", "def", "fd", ["modular_group"]], ["add", "def", "fdo", ["modular_group"]], ["del", "def", "fundamental_domain", ["modular_group"]], ["add", "theorem", "g_eq_of_c_eq_one", ["modular_group"]], ["mod", "theorem", "im_lt_im_S_smul", ["modular_group"]], ["mod", "theorem", "im_smul", ["modular_group"]], ["mod", "theorem", "im_smul_eq_div_norm_sq", ["modular_group"]], ["del", "theorem", "lc_row0_apply'", ["modular_group"]], ["mod", "theorem", "neg_smul", ["modular_group"]], ["add", "theorem", "norm_sq_S_smul_lt_one", ["modular_group"]], ["add", "theorem", "one_lt_norm_sq_T_zpow_smul", ["modular_group"]], ["mod", "theorem", "re_smul", ["modular_group"]], ["mod", "theorem", "smul_coe", ["modular_group"]], ["mod", "theorem", "smul_eq_lc_row0_add", ["modular_group"]], ["mod", "theorem", "tendsto_abs_re_smul", ["modular_group"]], ["mod", "theorem", "tendsto_norm_sq_coprime_pair", ["modular_group"]], ["add", "theorem", "three_lt_four_mul_im_sq_of_mem_fdo", ["modular_group"]]]}]}, {"timestamp": 1650573058, "sha": "ba556a70", "message": "chore(algebra/algebra/spectrum): lemmas about the zero ring (#13568)", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "of_subsingleton", ["spectrum"]], ["add", "theorem", "resolvent_set_of_subsingleton", ["spectrum"]]]}]}, {"timestamp": 1650573057, "sha": "81453334", "message": "ci(gitpod): update leanproject version (#13567)", "changes": [{"oldPath": ".docker/gitpod/mathlib/Dockerfile", "newPath": ".docker/gitpod/mathlib/Dockerfile", "changes": []}]}, {"timestamp": 1650573056, "sha": "aeef727f", "message": "chore(set_theory/ordinal/basic): Small style tweaks (#13561)", "changes": [{"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": [["mod", "theorem", "type_lt", ["ordinal"]]]}]}, {"timestamp": 1650573055, "sha": "efab188a", "message": "refactor(group_theory/{submonoid, subsemigroup}/basic): move `mul_mem_class` (#13559)\nThis moves `mul_mem_class` (and `add_mem_class`) from `group_theory/submonoid/basic` to `group_theory/subsemigroup/basic` so that `subsemigroup` can be an instance. We then protect `subsemigroup.mul_mem`. In addition, we add an induction principle for binary predicates to better parallel `group_theory/submonoid/basic`.", "changes": [{"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/subsemigroup/basic.lean", "newPath": "src/group_theory/subsemigroup/basic.lean", "changes": [["add", "theorem", "closure_induction₂", ["subsemigroup"]], ["del", "theorem", "mul_mem", ["subsemigroup"]]]}]}, {"timestamp": 1650573054, "sha": "afe14217", "message": "feat(data/nat/pow): add theorem `nat.pow_mod` (#13551)\nAdd theorem that states `∀ (a b n : ℕ) : a ^ b % n = (a % n) ^ b % n`.", "changes": [{"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": [["add", "theorem", "pow_mod", ["nat"]]]}]}, {"timestamp": 1650573053, "sha": "090e59d0", "message": "feat(analysis/normed_space/operator_norm): norm of `lsmul` (#13538)\n* From the sphere eversion project\n* Required for convolutions", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_lsmul", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lsmul_le", ["continuous_linear_map"]]]}]}, {"timestamp": 1650573051, "sha": "8430aae3", "message": "feat(algebra/group_power/lemmas): More lemmas through `to_additive` (#13537)\nUse `to_additive` to generate a bunch of old `nsmul`/`zsmul` lemmas from new `pow`/`zpow` ones. Also protect `nat.nsmul_eq_mul` as it should have been.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "self_zpow", ["commute"]], ["mod", "theorem", "zpow_left", ["commute"]], ["mod", "theorem", "zpow_right", ["commute"]], ["mod", "theorem", "zpow_self", ["commute"]], ["mod", "theorem", "zpow_zpow_self", ["commute"]], ["mod", "theorem", "zpow_right", ["semiconj_by"]]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "abs_add_eq_add_abs_iff", []], ["mod", "theorem", "abs_add_eq_add_abs_le", []], ["mod", "theorem", "abs_nsmul", []], ["mod", "theorem", "abs_zsmul", []], ["mod", "theorem", "cast_int_mul_cast_int_mul", ["commute"]], ["mod", "theorem", "cast_int_mul_right", ["commute"]], ["mod", "theorem", "self_cast_int_mul", ["commute"]], ["mod", "theorem", "self_cast_int_mul_cast_int_mul", ["commute"]], ["mod", "theorem", "self_cast_nat_mul", ["commute"]], ["mod", "theorem", "self_cast_nat_mul_cast_nat_mul", ["commute"]], ["del", "theorem", "nsmul_le_nsmul_iff", []], ["del", "theorem", "nsmul_lt_nsmul_iff", []], ["add", "theorem", "one_lt_zpow'", []], ["add", "theorem", "zpow_eq_zpow_iff'", []], ["add", "theorem", "zpow_le_zpow'", []], ["add", "theorem", "zpow_le_zpow", []], ["add", "theorem", "zpow_le_zpow_iff'", []], ["add", "theorem", "zpow_le_zpow_iff", []], ["add", "theorem", "zpow_left_inj", []], ["add", "theorem", "zpow_left_injective", []], ["add", "theorem", "zpow_lt_zpow'", []], ["add", "theorem", "zpow_lt_zpow", []], ["add", "theorem", "zpow_lt_zpow_iff'", []], ["add", "theorem", "zpow_lt_zpow_iff", []], ["add", "theorem", "zpow_mono_left", []], ["add", "theorem", "zpow_mono_right", []], ["add", "theorem", "zpow_strict_mono_left", []], ["add", "theorem", "zpow_strict_mono_right", []], ["del", "theorem", "zsmul_eq_zsmul_iff'", []], ["del", "theorem", "zsmul_le_zsmul'", []], ["del", "theorem", "zsmul_le_zsmul", []], ["del", "theorem", "zsmul_le_zsmul_iff'", []], ["del", "theorem", "zsmul_le_zsmul_iff", []], ["del", "theorem", "zsmul_lt_zsmul'", []], ["del", "theorem", "zsmul_lt_zsmul", []], ["del", "theorem", "zsmul_lt_zsmul_iff'", []], ["del", "theorem", "zsmul_lt_zsmul_iff", []], ["del", "theorem", "zsmul_mono_left", []], ["del", "theorem", "zsmul_mono_right", []], ["mod", "theorem", "zsmul_one", []], ["del", "theorem", "zsmul_pos", []], ["del", "theorem", "zsmul_right_inj", []], ["del", "theorem", "zsmul_right_injective", []], ["del", "theorem", "zsmul_strict_mono_left", []], ["del", "theorem", "zsmul_strict_mono_right", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "pow_le_pow_iff'", []], ["add", "theorem", "pow_lt_pow_iff'", []], ["add", "theorem", "pow_strict_mono_left", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "nsmul_eq_mul", ["nat"]]]}, {"oldPath": "src/data/nat/periodic.lean", "newPath": "src/data/nat/periodic.lean", "changes": []}]}, {"timestamp": 1650573050, "sha": "08323cda", "message": "feat(data/real/ennreal): `tsub` lemmas (#13525)\nInherit lemmas about subtraction on `ℝ≥0∞` from `algebra.order.sub`. Generalize `add_le_cancellable.tsub_lt_self` in passing.\nNew `ennreal` lemmas", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["mod", "theorem", "tsub_lt_self", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "add_div", ["ennreal"]], ["del", "theorem", "add_sub_self'", ["ennreal"]], ["del", "theorem", "add_sub_self", ["ennreal"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1650573049, "sha": "3a061790", "message": "refactor(category_theory): reverse simp lemmas about (co)forks (#13519)\nMakes `fork.ι` instead of `t.π.app zero` so that we avoid any unnecessary references to `walking_parallel_pair` in (co)fork homs. This induces quite a lot of changes in other files, but I think it's worth the pain. The PR also changes `fork.is_limit.mk` to avoid stating redundant morphisms.", "changes": [{"oldPath": "src/algebra/category/Module/kernels.lean", "newPath": "src/algebra/category/Module/kernels.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": [["add", "def", "fork", ["SemiNormedGroup"]], ["del", "def", "parallel_pair_cone", ["SemiNormedGroup"]]]}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/basic.lean", "newPath": "src/category_theory/idempotents/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "newPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["mod", "def", "cocone_of_split_epi", ["category_theory", "limits"]], ["add", "theorem", "cocone_of_split_epi_π", ["category_theory", "limits"]], ["mod", "theorem", "π_of_eq", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "app_one_eq_π", ["category_theory", "limits", "cofork"]], ["add", "theorem", "app_zero_eq_comp_π_left", ["category_theory", "limits", "cofork"]], ["add", "theorem", "app_zero_eq_comp_π_right", ["category_theory", "limits", "cofork"]], ["add", "theorem", "π_comp_desc", ["category_theory", "limits", "cofork", "is_colimit"]], ["del", "theorem", "π_desc_of_π", ["category_theory", "limits", "cofork", "is_colimit"]], ["del", "theorem", "left_app_one", ["category_theory", "limits", "cofork"]], ["del", "theorem", "right_app_one", ["category_theory", "limits", "cofork"]], ["mod", "def", "π", ["category_theory", "limits", "cofork"]], ["del", "theorem", "π_eq_app_one", ["category_theory", "limits", "cofork"]], ["mod", "theorem", "π_of_π", ["category_theory", "limits", "cofork"]], ["mod", "def", "cone_of_split_mono", ["category_theory", "limits"]], ["add", "theorem", "cone_of_split_mono_ι", ["category_theory", "limits"]], ["add", "theorem", "epi_of_is_colimit_cofork", ["category_theory", "limits"]], ["del", "theorem", "epi_of_is_colimit_parallel_pair", ["category_theory", "limits"]], ["add", "theorem", "app_one_eq_ι_comp_left", ["category_theory", "limits", "fork"]], ["add", "theorem", "app_one_eq_ι_comp_right", ["category_theory", "limits", "fork"]], ["add", "theorem", "app_zero_eq_ι", ["category_theory", "limits", "fork"]], ["del", "theorem", "app_zero_left", ["category_theory", "limits", "fork"]], ["del", "theorem", "app_zero_right", ["category_theory", "limits", "fork"]], ["mod", "theorem", "equalizer_ext", ["category_theory", "limits", "fork"]], ["add", "theorem", "hom_comp_ι", ["category_theory", "limits", "fork"]], ["add", "theorem", "lift_comp_ι", ["category_theory", "limits", "fork", "is_limit"]], ["del", "theorem", "lift_of_ι_ι", ["category_theory", "limits", "fork", "is_limit"]], ["mod", "def", "ι", ["category_theory", "limits", "fork"]], ["del", "theorem", "ι_eq_app_zero", ["category_theory", "limits", "fork"]], ["mod", "theorem", "ι_of_ι", ["category_theory", "limits", "fork"]], ["add", "theorem", "π_comp_hom", ["category_theory", "limits", "fork"]], ["mod", "theorem", "is_iso_colimit_cocone_parallel_pair_of_eq", ["category_theory", "limits"]], ["mod", "theorem", "is_iso_colimit_cocone_parallel_pair_of_self", ["category_theory", "limits"]], ["mod", "theorem", "is_iso_limit_cocone_parallel_pair_of_epi", ["category_theory", "limits"]], ["mod", "theorem", "is_iso_limit_cone_parallel_pair_of_epi", ["category_theory", "limits"]], ["mod", "theorem", "is_iso_limit_cone_parallel_pair_of_eq", ["category_theory", "limits"]], ["mod", "theorem", "is_iso_limit_cone_parallel_pair_of_self", ["category_theory", "limits"]], ["add", "theorem", "mono_of_is_limit_fork", ["category_theory", "limits"]], ["del", "theorem", "mono_of_is_limit_parallel_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernel_pair.lean", "newPath": "src/category_theory/limits/shapes/kernel_pair.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["mod", "def", "is_colimit_cocone_zero_cocone", ["category_theory", "limits", "cokernel"]], ["del", "def", "zero_cocone", ["category_theory", "limits", "cokernel"]], ["add", "def", "zero_cokernel_cofork", ["category_theory", "limits", "cokernel"]], ["del", "theorem", "app_zero", ["category_theory", "limits", "cokernel_cofork"]], ["mod", "theorem", "condition", ["category_theory", "limits", "cokernel_cofork"]], ["add", "theorem", "π_eq_zero", ["category_theory", "limits", "cokernel_cofork"]], ["mod", "def", "is_limit_cone_zero_cone", ["category_theory", "limits", "kernel"]], ["del", "def", "zero_cone", ["category_theory", "limits", "kernel"]], ["add", "def", "zero_kernel_fork", ["category_theory", "limits", "kernel"]]]}, {"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": [["mod", "theorem", "condition", ["category_theory", "limits", "multicofork"]], ["mod", "theorem", "snd_app_right", ["category_theory", "limits", "multicofork"]], ["del", "theorem", "to_sigma_cofork_ι_app_one", ["category_theory", "limits", "multicofork"]], ["del", "theorem", "to_sigma_cofork_ι_app_zero", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "to_sigma_cofork_π", ["category_theory", "limits", "multicofork"]], ["mod", "theorem", "π_eq_app_right", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "app_left_eq_ι", ["category_theory", "limits", "multifork"]], ["del", "theorem", "app_left_fst", ["category_theory", "limits", "multifork"]], ["del", "theorem", "app_left_snd", ["category_theory", "limits", "multifork"]], ["add", "theorem", "app_right_eq_ι_comp_fst", ["category_theory", "limits", "multifork"]], ["add", "theorem", "app_right_eq_ι_comp_snd", ["category_theory", "limits", "multifork"]], ["add", "theorem", "hom_comp_ι", ["category_theory", "limits", "multifork"]], ["mod", "theorem", "pi_condition", ["category_theory", "limits", "multifork"]], ["mod", "theorem", "to_pi_fork_π_app_zero", ["category_theory", "limits", "multifork"]], ["mod", "def", "ι", ["category_theory", "limits", "multifork"]], ["del", "theorem", "ι_eq_app_left", ["category_theory", "limits", "multifork"]]]}, {"oldPath": "src/category_theory/limits/shapes/normal_mono/equalizers.lean", "newPath": "src/category_theory/limits/shapes/normal_mono/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "newPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "changes": [["add", "theorem", "as_cofork_π", ["category_theory", "is_split_coequalizer"]]]}, {"oldPath": "src/category_theory/monad/coequalizer.lean", "newPath": "src/category_theory/monad/coequalizer.lean", "changes": [["add", "theorem", "beck_coequalizer_desc", ["category_theory", "monad"]], ["add", "theorem", "beck_cofork_π", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": [["add", "theorem", "unit_cofork_π", ["category_theory", "monad", "monadicity_internal"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1650562156, "sha": "b7cba576", "message": "chore(set_theory/game/*): Protect ambiguous lemmas (#13557)\nProtect `pgame.neg_zero` and inline `pgame.add_le_add_left` and friends into `covariant_class` instances.", "changes": [{"oldPath": "src/set_theory/game/basic.lean", "newPath": "src/set_theory/game/basic.lean", "changes": [["del", "theorem", "add_le_add_left", ["game"]]]}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": [["del", "theorem", "add_le_add_left", ["pgame"]], ["del", "theorem", "add_le_add_right", ["pgame"]], ["del", "theorem", "add_lt_add_left", ["pgame"]], ["del", "theorem", "add_lt_add_right", ["pgame"]], ["del", "theorem", "neg_neg", ["pgame"]], ["del", "theorem", "neg_zero", ["pgame"]], ["del", "def", "restricted:", ["pgame", "relabelling"]], ["add", "def", "restricted", ["pgame", "relabelling"]], ["del", "theorem", "zero_lt_half", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1650562154, "sha": "b6c96ef7", "message": "feat(combinatorics/simple_graph/clique): Clique-free graphs (#13552)\n... and the finset of cliques of a finite graph.", "changes": [{"oldPath": "src/combinatorics/simple_graph/clique.lean", "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": [["add", "def", "clique_finset", ["simple_graph"]], ["add", "theorem", "clique_finset_eq_empty_iff", ["simple_graph"]], ["add", "theorem", "clique_finset_mono", ["simple_graph"]], ["add", "theorem", "anti", ["simple_graph", "clique_free"]], ["add", "theorem", "mono", ["simple_graph", "clique_free"]], ["add", "def", "clique_free", ["simple_graph"]], ["add", "theorem", "clique_free_bot", ["simple_graph"]], ["add", "theorem", "is_3_clique_iff", ["simple_graph"]], ["add", "theorem", "is_3_clique_triple_iff", ["simple_graph"]], ["add", "def", "is_clique", ["simple_graph"]], ["del", "structure", "is_clique", ["simple_graph"]], ["add", "theorem", "is_clique_bot_iff", ["simple_graph"]], ["mod", "theorem", "is_clique_iff", ["simple_graph"]], ["mod", "structure", "is_n_clique", ["simple_graph"]], ["add", "theorem", "is_n_clique_bot_iff", ["simple_graph"]], ["add", "theorem", "mem_clique_finset_iff", ["simple_graph"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "pairwise_bot_iff", ["set"]]]}]}, {"timestamp": 1650562153, "sha": "e49ac91b", "message": "feat(analysis/calculus/cont_diff): add more prod lemmas (#13521)\n* Add `cont_diff.fst`, `cont_diff.comp₂`, `cont_diff_prod_mk_left` and many variants.\n* From the sphere eversion project\n* Required for convolutions\n* PR #13423 is similar for continuity", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["mod", "theorem", "comp_cont_diff_at", ["cont_diff"]], ["add", "theorem", "comp₂", ["cont_diff"]], ["add", "theorem", "comp₃", ["cont_diff"]], ["mod", "theorem", "cont_diff_at", ["cont_diff"]], ["mod", "theorem", "cont_diff_on", ["cont_diff"]], ["mod", "theorem", "cont_diff_within_at", ["cont_diff"]], ["mod", "theorem", "continuous", ["cont_diff"]], ["mod", "theorem", "differentiable", ["cont_diff"]], ["add", "theorem", "fst'", ["cont_diff"]], ["add", "theorem", "fst", ["cont_diff"]], ["mod", "theorem", "of_le", ["cont_diff"]], ["add", "theorem", "of_succ", ["cont_diff"]], ["add", "theorem", "one_of_succ", ["cont_diff"]], ["add", "theorem", "snd'", ["cont_diff"]], ["add", "theorem", "snd", ["cont_diff"]], ["mod", "theorem", "cont_diff_all_iff_nat", []], ["add", "theorem", "cont_diff_apply", []], ["add", "theorem", "cont_diff_apply_apply", []], ["add", "theorem", "fst''", ["cont_diff_at"]], ["add", "theorem", "fst'", ["cont_diff_at"]], ["add", "theorem", "fst", ["cont_diff_at"]], ["add", "theorem", "snd''", ["cont_diff_at"]], ["add", "theorem", "snd'", ["cont_diff_at"]], ["add", "theorem", "snd", ["cont_diff_at"]], ["mod", "theorem", "cont_diff_at_fst", []], ["mod", "theorem", "cont_diff_at_snd", []], ["mod", "theorem", "cont_diff_at_zero", []], ["mod", "theorem", "cont_diff_iff_cont_diff_at", []], ["add", "theorem", "fst", ["cont_diff_on"]], ["add", "theorem", "snd", ["cont_diff_on"]], ["mod", "theorem", "cont_diff_on_fst", []], ["mod", "theorem", "cont_diff_on_snd", []], ["mod", "theorem", "cont_diff_on_univ", []], ["add", "theorem", "cont_diff_prod_mk_left", []], ["add", "theorem", "cont_diff_prod_mk_right", []], ["mod", "theorem", "cont_diff_top", []], ["mod", "theorem", "cont_diff_zero", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "has_fderiv_at_prod_mk_left", []], ["add", "theorem", "has_fderiv_at_prod_mk_right", []]]}]}, {"timestamp": 1650562152, "sha": "62b33339", "message": "chore(algebra/star/chsh): `repeat`ed golf (#13499)\nInstead of having a real Gröbner tactic, we can leverage a loop of `ring, simp` to reach a goal.", "changes": [{"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": [["add", "theorem", "CHSH_id", []]]}]}, {"timestamp": 1650562151, "sha": "777d1ec1", "message": "feat(measure_theory/measure/measure_space): add some lemmas for the counting measure (#13485)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "count_apply_eq_top", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "count_empty", ["measure_theory", "measure"]], ["add", "theorem", "count_eq_zero_iff", ["measure_theory", "measure"]], ["add", "theorem", "count_ne_zero", ["measure_theory", "measure"]], ["add", "theorem", "count_singleton", ["measure_theory", "measure"]], ["add", "theorem", "empty_of_count_eq_zero", ["measure_theory", "measure"]]]}]}, {"timestamp": 1650562150, "sha": "6490ee3a", "message": "feat(topology/instances/ennreal): Add lemmas about continuity of ennreal subtraction. (#13448)\n`ennreal` does not have continuous `sub`. This PR adds `ennreal.continuous_on_sub` and related lemmas, which give the continuity of the subtraction in more restricted/specialized setups.", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "continuous_nnreal_sub", ["ennreal"]], ["add", "theorem", "continuous_on_sub", ["ennreal"]], ["add", "theorem", "continuous_on_sub_left", ["ennreal"]], ["add", "theorem", "continuous_sub_left", ["ennreal"]], ["add", "theorem", "continuous_sub_right", ["ennreal"]]]}]}, {"timestamp": 1650554401, "sha": "91cbe460", "message": "feat(algebra/monoid_algebra/basic): lifts of (add_)monoid_algebras (#13382)\nWe show that homomorphisms of the grading (add) monoids of (add) monoid algebras lift to ring/algebra homs of the algebras themselves.\nThis PR is preparation for introducing Laurent polynomials (see [adomani_laurent_polynomials](https://github.com/leanprover-community/mathlib/tree/adomani_laurent_polynomials), file `data/polynomial/laurent` for a preliminary version).\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Laurent.20polynomials)", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "def", "map_domain_alg_hom", ["add_monoid_algebra"]], ["add", "theorem", "map_domain_algebra_map", ["add_monoid_algebra"]], ["add", "def", "map_domain_non_unital_alg_hom", ["add_monoid_algebra"]], ["add", "def", "map_domain_ring_hom", ["add_monoid_algebra"]], ["add", "def", "map_domain_alg_hom", ["monoid_algebra"]], ["add", "theorem", "map_domain_algebra_map", ["monoid_algebra"]], ["add", "def", "map_domain_non_unital_alg_hom", ["monoid_algebra"]], ["add", "def", "map_domain_ring_hom", ["monoid_algebra"]], ["mod", "theorem", "ring_hom_ext'", ["monoid_algebra"]], ["mod", "theorem", "ring_hom_ext", ["monoid_algebra"]], ["mod", "def", "single_one_ring_hom", ["monoid_algebra"]]]}]}, {"timestamp": 1650554399, "sha": "8044794f", "message": "feat(topology/algebra/module/basic): continuous linear maps are automatically uniformly continuous (#13276)\nGeneralize `continuous_linear_map.uniform_continuous`, `continuous_linear_equiv.uniform_embedding` and `linear_equiv.uniform_embedding` form `normed_space`s to `uniform_add_group`s and move them to `topology/algebra/module/basic`.", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "uniform_embedding", ["continuous_linear_equiv"]], ["mod", "theorem", "homothety_norm", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_zero_iff", ["continuous_linear_map"]], ["del", "theorem", "uniform_embedding", ["linear_equiv"]], ["mod", "theorem", "norm_to_continuous_linear_map", ["linear_isometry"]], ["mod", "theorem", "norm_to_continuous_linear_map_comp", ["linear_isometry"]], ["mod", "theorem", "bound_of_shell", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "uniform_embedding", ["equiv"]]]}]}, {"timestamp": 1650554398, "sha": "79abf670", "message": "fix(tactic/apply_rules): separate single rules and attribute names in syntax (#13227)\n@hrmacbeth reported an issue with `apply_rules` [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/monotonicity.2Eattr.20with.20apply_rules). It boiled down to `apply_rules` not properly distinguishing between attribute names, the names of `user_attribute` declarations, and the names of normal declarations. There's an example of using `apply_rules` with attributes in the docs:\n```lean\n@[user_attribute]\nmeta def mono_rules : user_attribute :=\n{ name := `mono_rules,\n descr := \"lemmas usable to prove monotonicity\" }\nlocal attribute [mono_rules] add_le_add\nexample (a b c d : α) : a + b ≤ c + d :=\nbegin\n apply_rules mono_rules, -- takes action\nend\n```\nbut this only worked by coincidence because the attribute name and the name of the `user_attribute` declaration were the same.\nWith this change, expressions and names of attributes are now separated: the latter are specified after `with`. The call above becomes `apply_rules with mono_rules`. This mirrors the syntax of `simp`. Note that this feature was only used in meta code in mathlib.\nThe example from Zulip (modified for proper syntax) still doesn't work with my change:\n```lean\nimport tactic.monotonicity\nvariables {α : Type*} [linear_ordered_add_comm_group α]\nexample (a b c d : α) : a + b ≤ c + d :=\nbegin\n apply_rules with mono,\nend\n```\nbut it seems to fail because the `mono` rules cause `apply_rules` to loop -- that is, the rule set is getting applied correctly.", "changes": [{"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/topology/tactic.lean", "newPath": "src/topology/tactic.lean", "changes": []}, {"oldPath": "test/apply_rules.lean", "newPath": "test/apply_rules.lean", "changes": []}]}, {"timestamp": 1650554396, "sha": "e8b581a7", "message": "feat(order/countable_dense_linear_order): Relax conditions of `embedding_from_countable_to_dense` (#12928)\nWe prove that any countable order embeds in any nontrivial dense order. We also slightly golf the rest of the file.", "changes": [{"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": [["add", "theorem", "embedding_from_countable_to_dense", ["order"]], ["del", "def", "embedding_from_countable_to_dense", ["order"]], ["add", "theorem", "iso_of_countable_dense", ["order"]], ["del", "def", "iso_of_countable_dense", ["order"]]]}]}, {"timestamp": 1650543004, "sha": "0f9edf98", "message": "feat(data/set/[basic|prod]): make `×ˢ` bind more strongly, and define `mem.out` (#13422)\n* This means that `×ˢ` does not behave the same as `∪` or `∩` around `⁻¹'` or `''`, but I think that is fine.\n* From the sphere eversion project", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "out", ["set", "has_mem", "mem"]], ["add", "theorem", "mem_set_of", ["set"]], ["mod", "theorem", "mem_set_of_eq", ["set"]], ["mod", "theorem", "nmem_set_of_eq", ["set"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "image_div_prod", ["set"]], ["mod", "theorem", "image_mul_prod", ["set"]], ["mod", "theorem", "image_smul_prod", ["set"]], ["mod", "theorem", "image_vsub_prod", ["set"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["mod", "theorem", "fst_image_prod", ["set"]], ["mod", "theorem", "fst_image_prod_subset", ["set"]], ["mod", "theorem", "image_prod", ["set"]], ["mod", "theorem", "image_swap_prod", ["set"]], ["mod", "theorem", "mk_preimage_prod_left", ["set"]], ["mod", "theorem", "mk_preimage_prod_left_eq_empty", ["set"]], ["mod", "theorem", "mk_preimage_prod_right", ["set"]], ["mod", "theorem", "mk_preimage_prod_right_eq_empty", ["set"]], ["mod", "theorem", "preimage_swap_prod", ["set"]], ["mod", "theorem", "prod_eq_empty_iff", ["set"]], ["mod", "theorem", "prod_subset_iff", ["set"]], ["mod", "theorem", "snd_image_prod", ["set"]], ["mod", "theorem", "snd_image_prod_subset", ["set"]]]}, {"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": []}, {"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": [["mod", "theorem", "prod_comm_image", ["equiv"]]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1650543002, "sha": "c956647c", "message": "feat(order/basic): Simple shortcut lemmas (#13421)\nAdd convenience lemmas to make the API a bit more symmetric and easier to translate between `transitive` and `is_trans`. Also rename `_ge'` to `_le` in lemmas and fix the `is_max_` aliases.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["mod", "theorem", "lt_of_floor_lt", ["nat"]]]}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "not_gt", ["eq"]], ["mod", "theorem", "not_lt", ["eq"]], ["del", "theorem", "trans_le", ["eq"]], ["mod", "theorem", "ge_antisymm", []], ["mod", "theorem", "ge_iff_le", []], ["mod", "theorem", "gt_iff_lt", []], ["del", "theorem", "trans_eq", ["has_le", "le"]], ["add", "theorem", "le_of_eq_of_le'", []], ["add", "theorem", "le_of_eq_of_le", []], ["add", "theorem", "le_of_le_of_eq'", []], ["add", "theorem", "le_of_le_of_eq", []], ["mod", "theorem", "le_rfl", []], ["add", "theorem", "le_trans'", []], ["del", "theorem", "lt_iff_not_ge'", []], ["add", "theorem", "lt_iff_not_le", []], ["add", "theorem", "lt_of_eq_of_lt'", []], ["add", "theorem", "lt_of_eq_of_lt", []], ["add", "theorem", "lt_of_le_of_lt'", []], ["add", "theorem", "lt_of_le_of_ne'", []], ["add", "theorem", "lt_of_lt_of_eq'", []], ["add", "theorem", "lt_of_lt_of_eq", []], ["add", "theorem", "lt_of_lt_of_le'", []], ["del", "theorem", "lt_of_not_ge'", []], ["add", "theorem", "lt_of_not_le", []], ["mod", "theorem", "lt_self_iff_false", []], ["add", "theorem", "lt_trans'", []], ["add", "theorem", "lt_of_le'", ["ne"]], ["add", "theorem", "lt_of_le", ["ne"]]]}, {"oldPath": "src/order/bounded.lean", "newPath": "src/order/bounded.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "of_eq", []], ["add", "theorem", "transitive_ge", []], ["add", "theorem", "transitive_gt", []], ["add", "theorem", "transitive_le", []], ["add", "theorem", "transitive_lt", []], ["add", "theorem", "transitive_of_trans", []]]}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "test/finish4.lean", "newPath": "test/finish4.lean", "changes": []}]}, {"timestamp": 1650543000, "sha": "22c42912", "message": "chore(number_theory/dioph): Cleanup (#13403)\nClean up, including:\n* Move prerequisites to the correct files\n* Make equalities in `poly` operations defeq\n* Remove defeq abuse around `set`\n* Slightly golf proofs by tweaking explicitness of lemma arguments\nRenames", "changes": [{"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "eq_nat_abs_iff_mul_eq_zero", ["int"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "imp", ["list", "all₂"]], ["add", "theorem", "all₂_cons", ["list"]], ["add", "theorem", "all₂_iff_forall", ["list"]], ["add", "theorem", "all₂_map_iff", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "all₂", ["list"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "def", "cons", ["option"]], ["add", "theorem", "cons_none_some", ["option"]]]}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": [["mod", "theorem", "abs_poly_dioph", ["dioph"]], ["mod", "theorem", "add_dioph", ["dioph"]], ["del", "theorem", "and_dioph", ["dioph"]], ["mod", "theorem", "dioph_comp2", ["dioph"]], ["mod", "theorem", "dioph_comp", ["dioph"]], ["mod", "def", "dioph_fn", ["dioph"]], ["mod", "theorem", "dioph_fn_comp2", ["dioph"]], ["mod", "theorem", "dioph_fn_comp", ["dioph"]], ["mod", "theorem", "dioph_fn_compn", ["dioph"]], ["mod", "theorem", "dioph_fn_vec", ["dioph"]], ["mod", "theorem", "dioph_fn_vec_comp1", ["dioph"]], ["add", "theorem", "all₂", ["dioph", "dioph_list"]], ["del", "theorem", "dioph_list_all", ["dioph"]], ["mod", "def", "dioph_pfun", ["dioph"]], ["mod", "theorem", "dioph_pfun_vec", ["dioph"]], ["mod", "theorem", "div_dioph", ["dioph"]], ["mod", "theorem", "dvd_dioph", ["dioph"]], ["mod", "theorem", "eq_dioph", ["dioph"]], ["mod", "theorem", "ex1_dioph", ["dioph"]], ["mod", "theorem", "ex_dioph", ["dioph"]], ["mod", "theorem", "ext", ["dioph"]], ["mod", "theorem", "inject_dummies", ["dioph"]], ["add", "theorem", "inter", ["dioph"]], ["mod", "theorem", "le_dioph", ["dioph"]], ["mod", "theorem", "lt_dioph", ["dioph"]], ["mod", "theorem", "mod_dioph", ["dioph"]], ["mod", "theorem", "modeq_dioph", ["dioph"]], ["mod", "theorem", "mul_dioph", ["dioph"]], ["mod", "theorem", "ne_dioph", ["dioph"]], ["mod", "theorem", "of_no_dummies", ["dioph"]], ["del", "theorem", "or_dioph", ["dioph"]], ["mod", "theorem", "pell_dioph", ["dioph"]], ["mod", "theorem", "pow_dioph", ["dioph"]], ["mod", "theorem", "proj_dioph", ["dioph"]], ["mod", "theorem", "proj_dioph_of_nat", ["dioph"]], ["mod", "theorem", "reindex_dioph", ["dioph"]], ["mod", "theorem", "reindex_dioph_fn", ["dioph"]], ["mod", "theorem", "sub_dioph", ["dioph"]], ["add", "theorem", "union", ["dioph"]], ["mod", "theorem", "xn_dioph", ["dioph"]], ["del", "theorem", "eq_nat_abs_iff_mul", ["int"]], ["add", "theorem", "add", ["is_poly"]], ["add", "theorem", "neg", ["is_poly"]], ["mod", "inductive", "is_poly", []], ["del", "theorem", "imp", ["list_all"]], ["del", "def", "list_all", []], ["del", "theorem", "list_all_congr", []], ["del", "theorem", "list_all_cons", []], ["del", "theorem", "list_all_iff_forall", []], ["del", "theorem", "list_all_map", []], ["del", "def", "cons", ["option"]], ["del", "theorem", "cons_head_tail", ["option"]], ["del", "def", "add", ["poly"]], ["add", "theorem", "add_apply", ["poly"]], ["del", "theorem", "add_eval", ["poly"]], ["add", "theorem", "coe_add", ["poly"]], ["add", "theorem", "coe_mul", ["poly"]], ["add", "theorem", "coe_neg", ["poly"]], ["add", "theorem", "coe_one", ["poly"]], ["add", "theorem", "coe_sub", ["poly"]], ["add", "theorem", "coe_zero", ["poly"]], ["add", "theorem", "const_apply", ["poly"]], ["del", "theorem", "const_eval", ["poly"]], ["mod", "theorem", "ext", ["poly"]], ["del", "theorem", "isp", ["poly"]], ["add", "def", "map", ["poly"]], ["add", "theorem", "map_apply", ["poly"]], ["del", "def", "mul", ["poly"]], ["add", "theorem", "mul_apply", ["poly"]], ["del", "theorem", "mul_eval", ["poly"]], ["del", "def", "neg", ["poly"]], ["add", "theorem", "neg_apply", ["poly"]], ["del", "theorem", "neg_eval", ["poly"]], ["del", "def", "one", ["poly"]], ["add", "theorem", "one_apply", ["poly"]], ["del", "theorem", "one_eval", ["poly"]], ["add", "theorem", "proj_apply", ["poly"]], ["del", "theorem", "proj_eval", ["poly"]], ["del", "def", "remap", ["poly"]], ["del", "theorem", "remap_eval", ["poly"]], ["del", "def", "sub", ["poly"]], ["add", "theorem", "sub_apply", ["poly"]], ["del", "theorem", "sub_eval", ["poly"]], ["del", "def", "subst", ["poly"]], ["del", "theorem", "subst_eval", ["poly"]], ["mod", "theorem", "sumsq_eq_zero", ["poly"]], ["mod", "theorem", "sumsq_nonneg", ["poly"]], ["del", "def", "zero", ["poly"]], ["add", "theorem", "zero_apply", ["poly"]], ["del", "theorem", "zero_eval", ["poly"]], ["del", "def", "join", ["sum"]]]}]}, {"timestamp": 1650542999, "sha": "e5f82363", "message": "feat(analysis/normed_space/exponential): ring homomorphisms are preserved by the exponential (#13402)\nThe new results here are:\n* `prod.fst_exp`\n* `prod.snd_exp`\n* `exp_units_conj`\n* `exp_conj`\n* `map_exp`\n* `map_exp_of_mem_ball`\nThis last lemma does all the heavy lifting, and also lets us golf `algebra_map_exp_comm`.\nThis doesn't bother to duplicate the rest of these lemmas for the `*_of_mem_ball` version, since the proofs are trivial and those lemmas probably wouldn't be used.\nThis also generalizes some of the lemmas about infinite sums to work with `add_monoid_hom_class`.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "exp_conj'", []], ["add", "theorem", "exp_conj", []], ["add", "theorem", "exp_smul", []], ["add", "theorem", "exp_units_conj'", []], ["add", "theorem", "exp_units_conj", []], ["add", "theorem", "map_exp", []], ["add", "theorem", "map_exp_of_mem_ball", []], ["add", "theorem", "fst_exp", ["prod"]], ["add", "theorem", "snd_exp", ["prod"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1650542998, "sha": "0821eef1", "message": "feat(algebraic_geometry/projective_spectrum): degree zero part of a localized ring (#13398)\nIf we have a graded ring A and some element f of A, the the localised ring A away from f has a degree zero part. This construction is useful because proj locally is spec of degree zero part of some localised ring.\nPerhaps this ring belongs to some other file or different name, suggestions are very welcome", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/projective_spectrum/scheme.lean", "changes": [["add", "def", "deg", ["algebraic_geometry", "degree_zero_part"]], ["add", "theorem", "eq", ["algebraic_geometry", "degree_zero_part"]], ["add", "theorem", "mul_val", ["algebraic_geometry", "degree_zero_part"]], ["add", "def", "num", ["algebraic_geometry", "degree_zero_part"]], ["add", "theorem", "num_mem", ["algebraic_geometry", "degree_zero_part"]], ["add", "def", "degree_zero_part", ["algebraic_geometry"]]]}]}, {"timestamp": 1650542997, "sha": "f1091b38", "message": "feat(set_theory/cardinal): A set of cardinals is small iff it's bounded (#13373)\nWe move `mk_subtype_le` and `mk_set_le` earlier within the file in order to better accomodate for the new result, `bdd_above_iff_small`. We need this result right above the `Sup` stuff, as we'll make heavy use of it in a following refactor for `cardinal.sup`.", "changes": [{"oldPath": "src/set_theory/cardinal/basic.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": [["add", "theorem", "bdd_above_iff_small", ["cardinal"]], ["mod", "theorem", "mk_set_le", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal/basic.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}]}, {"timestamp": 1650542996, "sha": "c30131fb", "message": "feat(data/polynomial/{derivative, iterated_deriv}): reduce assumptions (#13368)", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["del", "theorem", "derivative_C_mul", ["polynomial"]], ["mod", "theorem", "derivative_smul", ["polynomial"]], ["mod", "theorem", "iterate_derivative_smul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": [["mod", "theorem", "iterated_deriv_smul", ["polynomial"]]]}]}, {"timestamp": 1650542995, "sha": "761801fd", "message": "feat(algebra/monoid_algebra/grading): Use the new graded_algebra API (#13360)\nThis removes `to_grades_by` and `of_grades_by`, and prefers `graded_algebra.decompose` as the canonical spelling.\nThis might undo some of the performance improvements in #13169, but it's not clear where to apply the analogous changes here, or whether they're really needed any more anyway,", "changes": [{"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": [["add", "def", "decompose_aux", ["add_monoid_algebra"]], ["add", "theorem", "decompose_aux_coe", ["add_monoid_algebra"]], ["add", "theorem", "decompose_aux_eq_decompose", ["add_monoid_algebra"]], ["add", "theorem", "decompose_aux_single", ["add_monoid_algebra"]], ["del", "def", "equiv_grades", ["add_monoid_algebra"]], ["del", "def", "equiv_grades_by", ["add_monoid_algebra"]], ["add", "theorem", "decompose_single", ["add_monoid_algebra", "grade"]], ["add", "theorem", "decompose_single", ["add_monoid_algebra", "grades_by"]], ["del", "def", "of_grades", ["add_monoid_algebra"]], ["del", "def", "of_grades_by", ["add_monoid_algebra"]], ["del", "theorem", "of_grades_by_comp_to_grades_by", ["add_monoid_algebra"]], ["del", "theorem", "of_grades_by_of", ["add_monoid_algebra"]], ["del", "theorem", "of_grades_by_to_grades_by", ["add_monoid_algebra"]], ["del", "theorem", "of_grades_comp_to_grades", ["add_monoid_algebra"]], ["del", "theorem", "of_grades_of", ["add_monoid_algebra"]], ["del", "theorem", "of_grades_to_grades", ["add_monoid_algebra"]], ["mod", "theorem", "single_mem_grade_by", ["add_monoid_algebra"]], ["del", "def", "to_grades", ["add_monoid_algebra"]], ["del", "def", "to_grades_by", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_by_coe", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_by_comp_of_grades_by", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_by_of_grades_by", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_by_single'", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_by_single", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_coe", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_comp_of_grades", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_of_grades", ["add_monoid_algebra"]], ["del", "theorem", "to_grades_single", ["add_monoid_algebra"]]]}]}, {"timestamp": 1650542994, "sha": "5c2088ed", "message": "feat(algebra/group/to_additive): let @[to_additive] mimic alias’s docstrings (#13330)\nmany of our `nolint.txt` entires are due to code of this shape:\n @[to_additive add_foo]\n lemma foo := .. /- no docstring -/\n alias foo <- bar\n attribute [to_additive add_bar] bar\nwhere now `bar` has a docstring (from `alias`), but `bar_add` does not.\nThis PR makes `to_additive` detect that `bar` is an alias, and unless an \nexplicit docstring is passed to `to_additive`, creates an “alias of add_foo”\ndocstring.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "test/lint_to_additive_doc.lean", "newPath": "test/lint_to_additive_doc.lean", "changes": []}]}, {"timestamp": 1650542993, "sha": "7d61199a", "message": "feat(set_theory/cofinality): Basic fundamental sequences (#13326)", "changes": [{"oldPath": "src/set_theory/cardinal/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": [["add", "theorem", "is_fundamental_sequence_id_of_le_cof", ["ordinal"]], ["add", "theorem", "is_fundamental_sequence_succ", ["ordinal"]], ["add", "theorem", "is_fundamental_sequence_zero", ["ordinal"]]]}]}, {"timestamp": 1650542991, "sha": "ba455ea6", "message": "feat(special_functions/pow): continuity of real to complex power (#13244)\nSome lemmas excised from my Gamma-function project. The main result is that for a complex `s` with `re s > 0`, the function `(λ x, x ^ s : ℝ → ℂ)` is continuous on all of `ℝ`.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "continuous_at_cpow_const_of_re_pos", ["complex"]], ["add", "theorem", "continuous_at_cpow_of_re_pos", ["complex"]], ["add", "theorem", "continuous_of_real_cpow_const", ["complex"]], ["add", "theorem", "of_real_cpow_of_nonpos", ["complex"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "not_lt_iff", ["complex"]], ["add", "theorem", "not_lt_zero_iff", ["complex"]]]}]}, {"timestamp": 1650542990, "sha": "cf3b996e", "message": "feat(group_theory/torsion): extension closedness, and torsion scalars in modules (#13172)\nCo-authored by: Alex J. Best ", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "apply", ["is_of_fin_order"]], ["del", "theorem", "quotient", ["is_of_fin_order"]], ["mod", "theorem", "is_of_fin_order_iff_coe", []], ["add", "theorem", "is_of_fin_order", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": [["add", "theorem", "module_of_fintype", ["add_monoid", "is_torsion"]], ["add", "theorem", "module_of_torsion", ["add_monoid", "is_torsion"]], ["mod", "theorem", "is_torsion", ["exponent_exists"]], ["add", "theorem", "extension_closed", ["is_torsion"]], ["add", "theorem", "of_surjective", ["is_torsion"]], ["del", "theorem", "quotient_group", ["is_torsion"]], ["add", "theorem", "quotient_iff", ["is_torsion"]]]}]}, {"timestamp": 1650542989, "sha": "82ef19af", "message": "feat(category_theory/path_category): canonical quotient of a path category (#13159)", "changes": [{"oldPath": "src/category_theory/path_category.lean", "newPath": "src/category_theory/path_category.lean", "changes": [["add", "theorem", "compose_path_comp'", ["category_theory"]], ["add", "theorem", "compose_path_id", ["category_theory"]], ["add", "theorem", "compose_path_to_path", ["category_theory"]], ["add", "def", "path_composition", ["category_theory"]], ["add", "def", "paths_hom_rel", ["category_theory"]], ["add", "def", "quotient_paths_equiv", ["category_theory"]], ["add", "def", "quotient_paths_to", ["category_theory"]], ["add", "def", "to_quotient_paths", ["category_theory"]]]}, {"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": [["add", "theorem", "of", ["category_theory", "quotient", "comp_closure"]]]}]}, {"timestamp": 1650542988, "sha": "82615017", "message": "refactor(number_theory/padics/padic_norm): Switch nat and rat definitions (#12454)\nSwitches the order in which `padic_val_nat` and `padic_val_rat` are defined.\nThis PR has also expanded to add `padic_val_int` and some API lemmas for that.", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["mod", "theorem", "dvd_of_one_le_padic_val_nat", []], ["add", "theorem", "eq_zero_of_not_dvd", ["padic_val_int"]], ["add", "theorem", "mul", ["padic_val_int"]], ["add", "theorem", "of_nat", ["padic_val_int"]], ["add", "theorem", "of_ne_one_ne_zero", ["padic_val_int"]], ["add", "theorem", "self", ["padic_val_int"]], ["add", "def", "padic_val_int", []], ["add", "theorem", "padic_val_int_dvd", []], ["add", "theorem", "padic_val_int_dvd_iff", []], ["add", "theorem", "padic_val_int_mul_eq_succ", []], ["add", "theorem", "padic_val_int_self", []], ["add", "theorem", "eq_zero_of_not_dvd", ["padic_val_nat"]], ["add", "theorem", "self", ["padic_val_nat"]], ["mod", "theorem", "padic_val_nat_def", []], ["add", "theorem", "padic_val_nat_dvd_iff", []], ["del", "theorem", "padic_val_nat_of_not_dvd", []], ["del", "theorem", "padic_val_nat_one", []], ["del", "theorem", "padic_val_nat_zero", []], ["add", "theorem", "multiplicity_sub_multiplicity", ["padic_val_rat"]], ["add", "theorem", "of_int", ["padic_val_rat"]], ["add", "theorem", "of_int_multiplicity", ["padic_val_rat"]], ["add", "theorem", "of_nat", ["padic_val_rat"]], ["del", "theorem", "padic_val_rat_of_int", ["padic_val_rat"]], ["del", "theorem", "padic_val_rat_self", ["padic_val_rat"]], ["add", "theorem", "self", ["padic_val_rat"]], ["del", "theorem", "padic_val_rat_def", []], ["mod", "theorem", "padic_val_rat_of_nat", []], ["mod", "theorem", "zero_le_padic_val_rat_of_nat", []]]}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1650538978, "sha": "21bbe900", "message": "feat(analysis/normed): more lemmas about the sup norm on pi types and matrices (#13536)\nFor now we name the matrix lemmas as `matrix.norm_*` and `matrix.nnnorm_*` to match `matrix.norm_le_iff` and `matrix.nnnorm_le_iff`.\nWe should consider renaming these in future to indicate which norm they refer to, but should probably deal with agreeing on a name in a separate PR.", "changes": [{"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": [["add", "theorem", "nnnorm_col", ["matrix"]], ["add", "theorem", "nnnorm_diagonal", ["matrix"]], ["add", "theorem", "nnnorm_map_eq", ["matrix"]], ["add", "theorem", "nnnorm_row", ["matrix"]], ["add", "theorem", "nnnorm_transpose", ["matrix"]], ["add", "theorem", "norm_col", ["matrix"]], ["add", "theorem", "norm_diagonal", ["matrix"]], ["add", "theorem", "norm_map_eq", ["matrix"]], ["add", "theorem", "norm_row", ["matrix"]], ["add", "theorem", "norm_transpose", ["matrix"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "nnnorm_def", ["pi"]], ["add", "theorem", "norm_def", ["pi"]]]}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/matrix.lean", "newPath": "src/analysis/normed_space/star/matrix.lean", "changes": [["del", "theorem", "entrywise_sup_norm_star_eq_norm", ["matrix"]], ["add", "theorem", "nnnorm_conj_transpose", ["matrix"]], ["add", "theorem", "norm_conj_transpose", ["matrix"]]]}]}, {"timestamp": 1650538977, "sha": "b87e193d", "message": "fix(category_theory/monoidal): improve hygiene in coherence tactic (#13507)", "changes": [{"oldPath": "src/category_theory/monoidal/coherence.lean", "newPath": "src/category_theory/monoidal/coherence.lean", "changes": []}]}, {"timestamp": 1650538976, "sha": "9f22a367", "message": "feat(src/number_theory/cyclotomic/discriminant): add discr_prime_pow_ne_two (#13465)\nWe add `discr_prime_pow_ne_two`, the discriminant of the `p^n`-th cyclotomic field.\nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": [["add", "theorem", "discr_prime_pow_ne_two", ["is_cyclotomic_extension"]]]}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["add", "theorem", "pow_sub_one_norm_prime_pow_of_one_le", ["is_primitive_root"]]]}]}, {"timestamp": 1650530903, "sha": "16ecb3d1", "message": "chore(algebra/group/type_tags): missing simp lemmas (#13553)\nTo have `simps` generate these in an appropriate form, this inserts explicits coercions between the type synonyms.", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["mod", "def", "to_multiplicative''", ["add_monoid_hom"]], ["mod", "def", "to_multiplicative'", ["add_monoid_hom"]], ["mod", "def", "to_multiplicative", ["add_monoid_hom"]], ["mod", "def", "to_additive''", ["monoid_hom"]], ["mod", "def", "to_additive'", ["monoid_hom"]], ["mod", "def", "to_additive", ["monoid_hom"]]]}]}, {"timestamp": 1650530902, "sha": "839f5086", "message": "feat(measure_theory): allow measurability to prove ae_strongly_measurable (#13427)\nAdds `measurable.ae_strongly_measurable` to the `measurability` list", "changes": [{"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}]}, {"timestamp": 1650524101, "sha": "6012c219", "message": "refactor(algebra/hom/group): generalize a few lemmas to `monoid_hom_class` (#13447)\nThis generalizes a few lemmas to `monoid_hom_class` from `monoid_hom`. In particular, `monoid_hom.injective_iff` has been generalized and renamed to `injective_iff_map_eq_one`.\nThis also deletes `add_monoid_hom.injective_iff`, `ring_hom.injective_iff` and `alg_hom.injective_iff`. All of these are superseded by the generically applicable `injective_iff_map_eq_zero`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "injective_iff", ["alg_hom"]]]}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/ext.lean", "newPath": "src/algebra/group/ext.lean", "changes": []}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["add", "theorem", "injective_iff_map_eq_one'", []], ["add", "theorem", "injective_iff_map_eq_one", []], ["add", "theorem", "map_div'", []], ["mod", "theorem", "eq_on_inv", ["monoid_hom"]], ["del", "theorem", "injective_iff'", ["monoid_hom"]], ["del", "theorem", "injective_iff", ["monoid_hom"]], ["del", "theorem", "map_div'", ["monoid_hom"]], ["mod", "theorem", "map_exists_left_inv", ["monoid_hom"]], ["mod", "theorem", "map_exists_right_inv", ["monoid_hom"]], ["del", "theorem", "map_mul_eq_one", ["monoid_hom"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "injective_iff'", ["ring_hom"]], ["del", "theorem", "injective_iff", ["ring_hom"]]]}, {"oldPath": "src/algebraic_geometry/function_field.lean", "newPath": "src/algebraic_geometry/function_field.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "newPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "test/import_order_timeout.lean", "newPath": "test/import_order_timeout.lean", "changes": []}]}, {"timestamp": 1650512198, "sha": "e0f78ab3", "message": "chore(data/list/cycle): Add basic `simp` lemmas + minor golfing (#13533)", "changes": [{"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "card_to_multiset", ["cycle"]], ["mod", "def", "nil", ["cycle"]], ["mod", "theorem", "nil_to_multiset", ["cycle"]], ["add", "theorem", "to_finset_eq_nil", ["cycle"]], ["add", "theorem", "to_finset_to_multiset", ["cycle"]], ["add", "theorem", "to_multiset_eq_nil", ["cycle"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "coe_eq_zero", ["multiset"]]]}]}, {"timestamp": 1650512196, "sha": "2f1a4aff", "message": "feat(algebra/hom/non_unital_alg): introduce notation for non-unital algebra homomorphisms (#13470)\nThis introduces the notation `A →ₙₐ[R] B` for `non_unital_alg_hom R A B` to mirror that of `non_unital_ring_hom R S` as `R →ₙ+* S` from #13430. Here, the `ₙ` stands for \"non-unital\".", "changes": [{"oldPath": "src/algebra/algebra/unitization.lean", "newPath": "src/algebra/algebra/unitization.lean", "changes": [["mod", "def", "lift", ["unitization"]]]}, {"oldPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "changes": [["mod", "theorem", "hom_ext", ["free_non_unital_non_assoc_algebra"]], ["mod", "def", "lift", ["free_non_unital_non_assoc_algebra"]], ["mod", "theorem", "lift_comp_of", ["free_non_unital_non_assoc_algebra"]], ["mod", "theorem", "lift_symm_apply", ["free_non_unital_non_assoc_algebra"]]]}, {"oldPath": "src/algebra/hom/non_unital_alg.lean", "newPath": "src/algebra/hom/non_unital_alg.lean", "changes": [["mod", "def", "to_non_unital_alg_hom", ["alg_hom"]], ["mod", "theorem", "coe_comp", ["non_unital_alg_hom"]], ["mod", "theorem", "coe_distrib_mul_action_hom_mk", ["non_unital_alg_hom"]], ["mod", "theorem", "coe_inverse", ["non_unital_alg_hom"]], ["mod", "theorem", "coe_mul_hom_mk", ["non_unital_alg_hom"]], ["mod", "theorem", "coe_one", ["non_unital_alg_hom"]], ["mod", "theorem", "coe_to_distrib_mul_action_hom", ["non_unital_alg_hom"]], ["mod", "theorem", "coe_to_mul_hom", ["non_unital_alg_hom"]], ["mod", "theorem", "coe_zero", ["non_unital_alg_hom"]], ["mod", "def", "comp", ["non_unital_alg_hom"]], ["mod", "theorem", "comp_apply", ["non_unital_alg_hom"]], ["mod", "theorem", "congr_fun", ["non_unital_alg_hom"]], ["mod", "theorem", "ext", ["non_unital_alg_hom"]], ["mod", "theorem", "ext_iff", ["non_unital_alg_hom"]], ["mod", "def", "inverse", ["non_unital_alg_hom"]], ["mod", "theorem", "map_add", ["non_unital_alg_hom"]], ["mod", "theorem", "map_mul", ["non_unital_alg_hom"]], ["mod", "theorem", "map_smul", ["non_unital_alg_hom"]], ["mod", "theorem", "map_zero", ["non_unital_alg_hom"]], ["mod", "theorem", "mk_coe", ["non_unital_alg_hom"]], ["mod", "theorem", "one_apply", ["non_unital_alg_hom"]], ["mod", "theorem", "to_distrib_mul_action_hom_eq_coe", ["non_unital_alg_hom"]], ["mod", "theorem", "to_distrib_mul_action_hom_injective", ["non_unital_alg_hom"]], ["mod", "theorem", "to_fun_eq_coe", ["non_unital_alg_hom"]], ["mod", "theorem", "to_mul_hom_eq_coe", ["non_unital_alg_hom"]], ["mod", "theorem", "to_mul_hom_injective", ["non_unital_alg_hom"]], ["mod", "theorem", "zero_apply", ["non_unital_alg_hom"]]]}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": [["mod", "def", "mk", ["free_lie_algebra"]]]}, {"oldPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "changes": [["mod", "def", "to_non_unital_alg_hom", ["lie_hom"]]]}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/character_space.lean", "newPath": "src/topology/algebra/module/character_space.lean", "changes": [["mod", "def", "to_non_unital_alg_hom", ["weak_dual", "character_space"]]]}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}]}, {"timestamp": 1650505301, "sha": "c93b99fa", "message": "chore(algebra/group/defs): Declare `field_simps` attribute earlier (#13543)\nDeclaring `field_simps` earlier make the relevant lemmas taggable as they are declared.", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}]}, {"timestamp": 1650494661, "sha": "b2518bee", "message": "feat(analysis/normed/normed_field): add `one_le_(nn)norm_one` for nontrivial normed rings (#13556)", "changes": [{"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": [["add", "theorem", "one_le_nnnorm_one", []], ["add", "theorem", "one_le_norm_one", []]]}]}, {"timestamp": 1650494660, "sha": "81c8f310", "message": "refactor(analysis/calculus/cont_diff): reorder the file (#13468)\n* There are no functional changes in this PR (except the order of implicit arguments in some lemmas)\n* This PR tries to move `cont_diff.comp` above some other lemmas. In a follow-up PR I will use this to add lemmas like `cont_diff.fst` which requires `cont_diff.comp`, but after this PR we can add it near `cont_diff_fst`.\n* We also add `{m n : with_top ℕ}` as variables, so that we don't have to repeat this in every lemma", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["mod", "theorem", "add", ["cont_diff"]], ["mod", "theorem", "comp", ["cont_diff"]], ["mod", "theorem", "comp_cont_diff_on", ["cont_diff"]], ["mod", "theorem", "comp_continuous_linear_map", ["cont_diff"]], ["mod", "theorem", "cont_diff_at", ["cont_diff"]], ["mod", "theorem", "cont_diff_fderiv_apply", ["cont_diff"]], ["mod", "theorem", "cont_diff_on", ["cont_diff"]], ["mod", "theorem", "cont_diff_within_at", ["cont_diff"]], ["mod", "theorem", "continuous", ["cont_diff"]], ["mod", "theorem", "continuous_deriv", ["cont_diff"]], ["mod", "theorem", "continuous_fderiv", ["cont_diff"]], ["mod", "theorem", "continuous_fderiv_apply", ["cont_diff"]], ["mod", "theorem", "continuous_linear_map_comp", ["cont_diff"]], ["mod", "theorem", "differentiable", ["cont_diff"]], ["mod", "theorem", "mul", ["cont_diff"]], ["mod", "theorem", "neg", ["cont_diff"]], ["mod", "theorem", "of_le", ["cont_diff"]], ["mod", "theorem", "pow", ["cont_diff"]], ["mod", "theorem", "prod", ["cont_diff"]], ["mod", "theorem", "prod_map", ["cont_diff"]], ["mod", "theorem", "smul", ["cont_diff"]], ["mod", "theorem", "sub", ["cont_diff"]], ["mod", "theorem", "cont_diff_add", []], ["mod", "theorem", "add", ["cont_diff_at"]], ["mod", "theorem", "comp", ["cont_diff_at"]], ["mod", "theorem", "congr_of_eventually_eq", ["cont_diff_at"]], ["mod", "theorem", "cont_diff_within_at", ["cont_diff_at"]], ["mod", "theorem", "continuous_at", ["cont_diff_at"]], ["mod", "theorem", "continuous_linear_map_comp", ["cont_diff_at"]], ["mod", "theorem", "differentiable_at", ["cont_diff_at"]], ["mod", "theorem", "has_strict_deriv_at", ["cont_diff_at"]], ["mod", "theorem", "has_strict_fderiv_at", ["cont_diff_at"]], ["mod", "theorem", "mul", ["cont_diff_at"]], ["mod", "theorem", "neg", ["cont_diff_at"]], ["mod", "theorem", "of_le", ["cont_diff_at"]], ["mod", "theorem", "pow", ["cont_diff_at"]], ["mod", "theorem", "prod", ["cont_diff_at"]], ["mod", "theorem", "smul", ["cont_diff_at"]], ["mod", "theorem", "sub", ["cont_diff_at"]], ["mod", "theorem", "cont_diff_at_const", []], ["mod", "theorem", "cont_diff_at_fst", []], ["mod", "theorem", "cont_diff_at_id", []], ["mod", "theorem", "cont_diff_at_map_inverse", []], ["mod", "theorem", "cont_diff_at_of_subsingleton", []], ["mod", "theorem", "cont_diff_at_ring_inverse", []], ["mod", "theorem", "cont_diff_at_snd", []], ["mod", "theorem", "cont_diff_const", []], ["mod", "theorem", "cont_diff_fst", []], ["mod", "theorem", "cont_diff_id", []], ["mod", "theorem", "cont_diff_iff_cont_diff_at", []], ["mod", "theorem", "cont_diff_iff_continuous_differentiable", []], ["mod", "theorem", "cont_diff_mul", []], ["mod", "theorem", "cont_diff_neg", []], ["mod", "theorem", "cont_diff_of_differentiable_iterated_fderiv", []], ["mod", "theorem", "cont_diff_of_subsingleton", []], ["mod", "theorem", "add", ["cont_diff_on"]], ["mod", "theorem", "comp_continuous_linear_map", ["cont_diff_on"]], ["mod", "theorem", "congr", ["cont_diff_on"]], ["mod", "theorem", "congr_mono", ["cont_diff_on"]], ["mod", "theorem", "cont_diff_within_at", ["cont_diff_on"]], ["mod", "theorem", "continuous_linear_map_comp", ["cont_diff_on"]], ["mod", "theorem", "continuous_on", ["cont_diff_on"]], ["mod", "theorem", "continuous_on_deriv_of_open", ["cont_diff_on"]], ["mod", "theorem", "continuous_on_deriv_within", ["cont_diff_on"]], ["mod", "theorem", "continuous_on_fderiv_of_open", ["cont_diff_on"]], ["mod", "theorem", "continuous_on_fderiv_within", ["cont_diff_on"]], ["mod", "theorem", "continuous_on_iterated_fderiv_within", ["cont_diff_on"]], ["mod", "theorem", "deriv_of_open", ["cont_diff_on"]], ["mod", "theorem", "deriv_within", ["cont_diff_on"]], ["mod", "theorem", "differentiable_on", ["cont_diff_on"]], ["mod", "theorem", "differentiable_on_iterated_fderiv_within", ["cont_diff_on"]], ["mod", "theorem", "fderiv_of_open", ["cont_diff_on"]], ["mod", "theorem", "fderiv_within", ["cont_diff_on"]], ["mod", "theorem", "ftaylor_series_within", ["cont_diff_on"]], ["mod", "theorem", "mono", ["cont_diff_on"]], ["mod", "theorem", "mul", ["cont_diff_on"]], ["mod", "theorem", "neg", ["cont_diff_on"]], ["mod", "theorem", "of_le", ["cont_diff_on"]], ["mod", "theorem", "pow", ["cont_diff_on"]], ["mod", "theorem", "prod", ["cont_diff_on"]], ["mod", "theorem", "smul", ["cont_diff_on"]], ["mod", "theorem", "sub", ["cont_diff_on"]], ["mod", "theorem", "cont_diff_on_congr", []], ["mod", "theorem", "cont_diff_on_const", []], ["mod", "theorem", "cont_diff_on_fst", []], ["mod", "theorem", "cont_diff_on_id", []], ["mod", "theorem", "cont_diff_on_iff_continuous_on_differentiable_on", []], ["mod", "theorem", "cont_diff_on_iff_forall_nat_le", []], ["mod", "theorem", "cont_diff_on_iff_ftaylor_series", []], ["mod", "theorem", "cont_diff_on_of_continuous_on_differentiable_on", []], ["mod", "theorem", "cont_diff_on_of_differentiable_on", []], ["mod", "theorem", "cont_diff_on_of_locally_cont_diff_on", []], ["mod", "theorem", "cont_diff_on_of_subsingleton", []], ["mod", "theorem", "cont_diff_on_snd", []], ["mod", "theorem", "cont_diff_on_univ", []], ["mod", "theorem", "cont_diff_smul", []], ["mod", "theorem", "cont_diff_snd", []], ["mod", "theorem", "add", ["cont_diff_within_at"]], ["mod", "theorem", "comp'", ["cont_diff_within_at"]], ["mod", "theorem", "comp_continuous_linear_map", ["cont_diff_within_at"]], ["mod", "theorem", "congr'", ["cont_diff_within_at"]], ["mod", "theorem", "congr", ["cont_diff_within_at"]], ["mod", "theorem", "congr_nhds", ["cont_diff_within_at"]], ["mod", "theorem", "congr_of_eventually_eq'", ["cont_diff_within_at"]], ["mod", "theorem", "congr_of_eventually_eq", ["cont_diff_within_at"]], ["mod", "theorem", "cont_diff_at", ["cont_diff_within_at"]], ["mod", "theorem", "cont_diff_on", ["cont_diff_within_at"]], ["mod", "theorem", "continuous_linear_map_comp", ["cont_diff_within_at"]], ["mod", "theorem", "continuous_within_at", ["cont_diff_within_at"]], ["mod", "theorem", "differentiable_within_at'", ["cont_diff_within_at"]], ["mod", "theorem", "differentiable_within_at", ["cont_diff_within_at"]], ["mod", "theorem", "mono", ["cont_diff_within_at"]], ["mod", "theorem", "mono_of_mem", ["cont_diff_within_at"]], ["mod", "theorem", "mul", ["cont_diff_within_at"]], ["mod", "theorem", "neg", ["cont_diff_within_at"]], ["mod", "theorem", "of_le", ["cont_diff_within_at"]], ["mod", "theorem", "pow", ["cont_diff_within_at"]], ["mod", "theorem", "prod", ["cont_diff_within_at"]], ["mod", "theorem", "smul", ["cont_diff_within_at"]], ["mod", "theorem", "sub", ["cont_diff_within_at"]], ["mod", "theorem", "cont_diff_within_at_congr_nhds", []], ["mod", "theorem", "cont_diff_within_at_const", []], ["mod", "theorem", "cont_diff_within_at_fst", []], ["mod", "theorem", "cont_diff_within_at_id", []], ["mod", "theorem", "cont_diff_within_at_iff_forall_nat_le", []], ["mod", "theorem", "cont_diff_within_at_inter'", []], ["mod", "theorem", "cont_diff_within_at_inter", []], ["mod", "theorem", "cont_diff_within_at_of_subsingleton", []], ["mod", "theorem", "cont_diff_within_at_snd", []], ["mod", "theorem", "cont_diff_within_at_univ", []], ["mod", "theorem", "cont_diff_zero_fun", []], ["mod", "theorem", "cont_diff", ["continuous_linear_equiv"]], ["mod", "theorem", "cont_diff_on_comp_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "cont_diff_within_at_comp_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "cont_diff", ["continuous_linear_map"]], ["mod", "theorem", "cont_diff_within_at_iff", ["filter", "eventually_eq"]], ["mod", "theorem", "continuous", ["has_ftaylor_series_up_to"]], ["mod", "theorem", "differentiable", ["has_ftaylor_series_up_to"]], ["mod", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to"]], ["mod", "theorem", "has_ftaylor_series_up_to_on", ["has_ftaylor_series_up_to"]], ["mod", "theorem", "of_le", ["has_ftaylor_series_up_to"]], ["mod", "theorem", "zero_eq'", ["has_ftaylor_series_up_to"]], ["mod", "theorem", "comp_continuous_linear_map", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "congr", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "continuous_linear_map_comp", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "continuous_on", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "differentiable_at", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "differentiable_on", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "eq_ftaylor_series_of_unique_diff_on", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "eventually_has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "has_fderiv_within_at", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "mono", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "of_le", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "prod", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "zero_eq'", ["has_ftaylor_series_up_to_on"]], ["mod", "theorem", "has_ftaylor_series_up_to_on_univ_iff", []], ["mod", "theorem", "cont_diff", ["is_bounded_bilinear_map"]], ["mod", "theorem", "cont_diff", ["is_bounded_linear_map"]], ["mod", "theorem", "cont_diff", ["linear_isometry"]], ["mod", "theorem", "cont_diff", ["linear_isometry_equiv"]], ["mod", "theorem", "cont_diff_at_symm", ["local_homeomorph"]], ["mod", "theorem", "cont_diff_at_symm_deriv", ["local_homeomorph"]]]}]}, {"timestamp": 1650489306, "sha": "b86b9272", "message": "move(set_theory/*): Organize in folders (#13530)\nCreate folders `cardinal`, `ordinal` and `game`. Most files under `set_theory` belong to a least one of them.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/category_theory/limits/small_complete.lean", "newPath": "src/category_theory/limits/small_complete.lean", "changes": []}, {"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}, {"oldPath": "src/computability/encoding.lean", "newPath": "src/computability/encoding.lean", "changes": []}, {"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/data/nat/count.lean", "newPath": "src/data/nat/count.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/cardinality.lean", "newPath": "src/ring_theory/localization/cardinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cardinal/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/continuum.lean", "newPath": "src/set_theory/cardinal/continuum.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_divisibility.lean", "newPath": "src/set_theory/cardinal/divisibility.lean", "changes": []}, {"oldPath": "src/set_theory/fincard.lean", "newPath": "src/set_theory/cardinal/finite.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game/basic.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/game/pgame.lean", "changes": []}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal/arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/fixed_points.lean", "newPath": "src/set_theory/ordinal/fixed_point.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal/notation.lean", "changes": []}, {"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/ordinal/principal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_topology.lean", "newPath": "src/set_theory/ordinal/topology.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_paracompact.lean", "newPath": "src/topology/metric_space/emetric_paracompact.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}]}, {"timestamp": 1650487218, "sha": "741d2851", "message": "chore(number_theory/zsqrtd/basic): simplify le_total proof (#13555)", "changes": [{"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}]}, {"timestamp": 1650480131, "sha": "9d6d8c26", "message": "feat(group_theory/perm/basic): Iterating a permutation is the same as taking a power (#13554)", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "iterate_eq_pow", ["equiv", "perm"]], ["mod", "theorem", "zpow_apply_comm", ["equiv", "perm"]]]}]}, {"timestamp": 1650480130, "sha": "27a8328b", "message": "feat(data/real/sqrt): `sqrt x < y ↔ x < y^2` (#13546)\nProve `real.sqrt_lt_iff` and generalize `real.lt_sqrt`.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["mod", "theorem", "le_sqrt'", ["real"]], ["mod", "theorem", "lt_sqrt", ["real"]], ["mod", "theorem", "sq_lt", ["real"]], ["add", "theorem", "sqrt_lt'", ["real"]], ["add", "theorem", "sqrt_lt", ["real"]]]}]}, {"timestamp": 1650480129, "sha": "242d6875", "message": "feat(algebra/hom/group and *): introduce `mul_hom M N` notation `M →ₙ* N` (#13526)\nThe discussion and poll related to this new notation can be found in this [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/ring_hom.20notation.20and.20friends/near/279313301)", "changes": [{"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": [["mod", "def", "of_hom", ["Magma"]], ["mod", "theorem", "of_hom_apply", ["Magma"]], ["mod", "def", "of_hom", ["Semigroup"]], ["mod", "theorem", "of_hom_apply", ["Semigroup"]]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["mod", "theorem", "map_dvd", ["mul_hom"]]]}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": [["mod", "def", "lift", ["free_magma"]], ["mod", "theorem", "lift_aux_unique", ["free_magma"]]]}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["mod", "def", "single", ["mul_hom"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "theorem", "coe_prod", ["mul_hom"]], ["mod", "def", "coprod", ["mul_hom"]], ["mod", "def", "fst", ["mul_hom"]], ["mod", "theorem", "fst_comp_prod", ["mul_hom"]], ["mod", "theorem", "prod_apply", ["mul_hom"]], ["mod", "theorem", "prod_comp_prod_map", ["mul_hom"]], ["mod", "def", "prod_map", ["mul_hom"]], ["mod", "theorem", "prod_unique", ["mul_hom"]], ["mod", "def", "snd", ["mul_hom"]], ["mod", "theorem", "snd_comp_prod", ["mul_hom"]], ["mod", "def", "mul_mul_hom", []]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "def", "coe_mul_hom", ["with_one"]], ["mod", "def", "lift", ["with_one"]], ["mod", "def", "map", ["with_one"]], ["mod", "theorem", "map_coe", ["with_one"]], ["mod", "theorem", "map_comp", ["with_one"]], ["mod", "theorem", "map_map", ["with_one"]]]}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["mod", "structure", "mul_equiv", []], ["mod", "def", "inverse", ["mul_hom"]]]}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["mod", "theorem", "coe_inj", ["mul_hom"]], ["mod", "theorem", "ext", ["mul_hom"]], ["mod", "theorem", "ext_iff", ["mul_hom"]], ["mod", "def", "id", ["mul_hom"]], ["mod", "theorem", "to_fun_eq_coe", ["mul_hom"]]]}, {"oldPath": "src/algebra/hom/non_unital_alg.lean", "newPath": "src/algebra/hom/non_unital_alg.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["mod", "def", "of_magma", ["add_monoid_algebra"]], ["mod", "def", "of_magma", ["monoid_algebra"]]]}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "def", "singleton_mul_hom", ["set"]]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/subsemigroup/basic.lean", "newPath": "src/group_theory/subsemigroup/basic.lean", "changes": [["mod", "def", "eq_mlocus", ["mul_hom"]], ["mod", "theorem", "eq_of_eq_on_mdense", ["mul_hom"]], ["mod", "theorem", "eq_of_eq_on_mtop", ["mul_hom"]], ["mod", "theorem", "eq_on_mclosure", ["mul_hom"]]]}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "def", "nhds_mul_hom", []]]}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}]}, {"timestamp": 1650474597, "sha": "7bfaa5c8", "message": "feat(group_theory/schreier): Schreier's lemma in terms of `group.fg` and `group.rank` (#13361)\nThis PR adds statements of Schreier's lemma in terms of `group.fg` and `group.rank`.", "changes": [{"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": [["add", "theorem", "exists_finset_card_le_mul", ["subgroup"]], ["add", "theorem", "fg_of_index_ne_zero", ["subgroup"]], ["add", "theorem", "rank_le_index_mul_rank", ["subgroup"]]]}]}, {"timestamp": 1650474596, "sha": "b0805a5e", "message": "feat(linear_algebra/trace): dual_tensor_hom is an equivalence + basis-free characterization of the trace (#10372)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "single_smul", ["finsupp"]], ["add", "theorem", "sum_univ_single'", ["finsupp"]], ["add", "theorem", "sum_univ_single", ["finsupp"]]]}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": [["add", "theorem", "diag_same", ["matrix", "std_basis_matrix"]]]}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": [["add", "theorem", "dual_tensor_hom_equiv_of_basis_to_linear_map", []], ["add", "theorem", "to_matrix_dual_tensor_hom", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "theorem", "sum_dual_apply_smul_coord", ["basis"]]]}, {"oldPath": "src/linear_algebra/tensor_product_basis.lean", "newPath": "src/linear_algebra/tensor_product_basis.lean", "changes": [["add", "theorem", "tensor_product_apply'", ["basis"]], ["add", "theorem", "tensor_product_apply", ["basis"]]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "theorem", "trace_eq_contract'", ["linear_map"]], ["add", "theorem", "trace_eq_contract", ["linear_map"]], ["add", "theorem", "trace_eq_contract_of_basis'", ["linear_map"]], ["add", "theorem", "trace_eq_contract_of_basis", ["linear_map"]]]}, {"oldPath": "src/representation_theory/basic.lean", "newPath": "src/representation_theory/basic.lean", "changes": [["mod", "theorem", "char_one", ["representation"]]]}]}, {"timestamp": 1650470473, "sha": "311ca722", "message": "feat(order/filter/basic): allow functions between different types in lemmas about [co]map by a constant function (#13542)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_const_of_mem", ["filter"]], ["mod", "theorem", "comap_const_of_not_mem", ["filter"]], ["mod", "theorem", "map_const", ["filter"]]]}]}, {"timestamp": 1650463505, "sha": "d79f6f3c", "message": "feat(data/finset/basic): simp `to_finset_eq_empty` (#13531)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "to_finset_eq_empty", ["multiset"]]]}]}, {"timestamp": 1650459375, "sha": "8ba7df83", "message": "feat(topology/algebra/algebra): ℚ-scalar multiplication is continuous (#13458)", "changes": [{"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": []}]}, {"timestamp": 1650451106, "sha": "a3a166bc", "message": "chore(model_theory/encoding): Improve the encoding of terms (#13532)\nMakes it so that the encoding of terms no longer requires the assumption `inhabited (L.term A)`.\nAdjusts following lemmas to use the `encoding` API more directly.", "changes": [{"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": [["mod", "theorem", "card_le", ["first_order", "language", "term"]], ["mod", "def", "list_decode", ["first_order", "language", "term"]], ["mod", "theorem", "list_decode_encode_list", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}]}, {"timestamp": 1650451105, "sha": "d9a8d6e5", "message": "feat(topology/separation): Finite sets in T2 spaces (#12845)\nWe prove the following theorem: given a finite set in a T2 space, one can choose an open set around each point so that these are pairwise disjoint.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "t2_separation_finset", []]]}]}, {"timestamp": 1650449060, "sha": "8d351dc3", "message": "feat(analysis/inner_product_space/gram_schmidt_ortho): Gram-Schmidt Orthogonalization and Orthonormalization (#12857)\nFormalize Gram-Schmidt Orthogonalization and Orthonormalization", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/gram_schmidt_ortho.lean", "changes": [["add", "theorem", "gram_schmidt_def'", []], ["add", "theorem", "gram_schmidt_def", []], ["add", "theorem", "gram_schmidt_ne_zero'", []], ["add", "theorem", "gram_schmidt_ne_zero", []], ["add", "theorem", "gram_schmidt_normed_unit_length'", []], ["add", "theorem", "gram_schmidt_normed_unit_length", []], ["add", "theorem", "gram_schmidt_orthogonal", []], ["add", "theorem", "gram_schmidt_orthonormal", []], ["add", "theorem", "gram_schmidt_pairwise_orthogonal", []], ["add", "theorem", "gram_schmidt_zero", []], ["add", "theorem", "span_gram_schmidt", []]]}]}, {"timestamp": 1650445007, "sha": "92f6eb6b", "message": "chore(algebra/big_operators/fin): golf finset.prod_range (#13535)", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": []}]}, {"timestamp": 1650410794, "sha": "71b470f9", "message": "chore(analysis/normed_space/star): make an argument explicit (#13523)", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["mod", "theorem", "nnnorm_star", []]]}, {"oldPath": "src/analysis/normed_space/star/matrix.lean", "newPath": "src/analysis/normed_space/star/matrix.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": []}]}, {"timestamp": 1650400009, "sha": "5038a4a9", "message": "feat(*): `op_op_op_comm` lemmas (#13528)\nA handful of lemmas of the form `op (op a b) (op c d) = op (op a c) (op b d)`.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_div_div_comm", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "div_div_div_comm₀", []]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "smul_smul_smul_comm", []]]}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["add", "theorem", "symm_diff_left_comm", []], ["add", "theorem", "symm_diff_right_comm", []], ["add", "theorem", "symm_diff_symm_diff_symm_diff_comm", []]]}]}, {"timestamp": 1650400008, "sha": "cf5aea0a", "message": "chore(data/real/nnreal): add commuted version of `nnreal.mul_finset_sup` (#13512)\nAlso make the argument explicit", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "finset_sup_mul", ["nnreal"]], ["mod", "theorem", "mul_finset_sup", ["nnreal"]], ["add", "theorem", "sup_mul", ["nnreal"]]]}]}, {"timestamp": 1650400007, "sha": "094b1f51", "message": "chore(*/matrix): order `m` and `n` alphabetically (#13510)\nIn a few places this also reorders `(n) [fintype n] (m) [fintype m]` to `(m n) [fintype m] [fintype n]` which seems to be where we prefer to put typeclasses.", "changes": [{"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": [["mod", "theorem", "nnnorm_entry_le_entrywise_sup_nnorm", ["matrix"]], ["mod", "theorem", "nnnorm_le_iff", ["matrix"]], ["mod", "theorem", "nnnorm_lt_iff", ["matrix"]], ["mod", "theorem", "norm_entry_le_entrywise_sup_norm", ["matrix"]], ["mod", "theorem", "norm_le_iff", ["matrix"]], ["mod", "theorem", "norm_lt_iff", ["matrix"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "map_update_column", ["matrix"]], ["mod", "theorem", "map_update_row", ["matrix"]], ["mod", "theorem", "minor_mul_transpose_minor", ["matrix"]], ["mod", "def", "update_column", ["matrix"]], ["mod", "theorem", "update_column_apply", ["matrix"]], ["mod", "theorem", "update_column_conj_transpose", ["matrix"]], ["mod", "theorem", "update_column_ne", ["matrix"]], ["mod", "theorem", "update_column_self", ["matrix"]], ["mod", "theorem", "update_column_subsingleton", ["matrix"]], ["mod", "theorem", "update_column_transpose", ["matrix"]], ["mod", "def", "update_row", ["matrix"]], ["mod", "theorem", "update_row_apply", ["matrix"]], ["mod", "theorem", "update_row_conj_transpose", ["matrix"]], ["mod", "theorem", "update_row_ne", ["matrix"]], ["mod", "theorem", "update_row_self", ["matrix"]], ["mod", "theorem", "update_row_subsingleton", ["matrix"]], ["mod", "theorem", "update_row_transpose", ["matrix"]], ["mod", "theorem", "vec_mul_smul", ["matrix"]]]}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": [["mod", "theorem", "matrix_eq_sum_std_basis", ["matrix"]]]}, {"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["mod", "theorem", "finrank_matrix", ["module", "free"]]]}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": [["mod", "theorem", "rank_matrix''", ["module", "free"]], ["mod", "theorem", "rank_matrix'", ["module", "free"]], ["mod", "theorem", "rank_matrix", ["module", "free"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/matrix.lean", "newPath": "src/topology/algebra/matrix.lean", "changes": [["mod", "theorem", "matrix_map", ["continuous"]], ["mod", "theorem", "matrix_transpose", ["continuous"]]]}]}, {"timestamp": 1650397281, "sha": "3ac979a2", "message": "feat(analysis/calculus/specific_functions): trivial extra lemmas (#13516)", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}]}, {"timestamp": 1650390067, "sha": "70759ef9", "message": "feat(analysis): lemmas about nnnorm and nndist (#13498)\nMost of these lemmas follow trivially from the `norm` versions. This is far from exhaustive.\nAdditionally:\n* `nnreal.coe_supr` and `nnreal.coe_infi` are added\n* The old `is_primitive_root.nnnorm_eq_one` is renamed to `is_primitive_root.norm'_eq_one` as it was not about `nnnorm` at all. The unprimed name is already taken in reference to `algebra.norm`.\n* `parallelogram_law_with_norm_real` is removed since it's syntactically identical to `parallelogram_law_with_norm ℝ` and also not used anywhere.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "conj_cle_nnorm", ["complex"]], ["add", "theorem", "im_clm_nnnorm", ["complex"]], ["add", "theorem", "nndist_conj_comm", ["complex"]], ["add", "theorem", "nndist_conj_conj", ["complex"]], ["add", "theorem", "of_real_clm_nnnorm", ["complex"]], ["add", "theorem", "re_clm_nnnorm", ["complex"]]]}, {"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": [["add", "theorem", "norm'_eq_one", ["is_primitive_root"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "nnnorm_inner_le_nnnorm", []], ["add", "theorem", "parallelogram_law_with_nnnorm", []], ["mod", "theorem", "parallelogram_law_with_norm", []], ["del", "theorem", "parallelogram_law_with_norm_real", []]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/matrix.lean", "newPath": "src/analysis/matrix.lean", "changes": [["add", "theorem", "nnnorm_entry_le_entrywise_sup_nnorm", ["matrix"]], ["add", "theorem", "nnnorm_le_iff", ["matrix"]], ["add", "theorem", "nnnorm_lt_iff", ["matrix"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "coe_comp_nnnorm", []], ["add", "theorem", "lipschitz_with_one_nnnorm", []], ["add", "theorem", "nnnorm_le_add_nnnorm_add", []], ["add", "theorem", "nnnorm_le_insert'", []], ["add", "theorem", "nnnorm_le_insert", []], ["add", "theorem", "nnnorm_le_pi_nnnorm", []], ["add", "theorem", "pi_nnnorm_le_iff", []], ["add", "theorem", "pi_nnnorm_lt_iff", []]]}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": [["add", "theorem", "nnnorm_prod_le'", ["finset"]], ["add", "theorem", "nnnorm_prod_le", ["finset"]], ["add", "theorem", "nnnorm_prod_le'", ["list"]], ["add", "theorem", "nnnorm_prod_le", ["list"]], ["add", "theorem", "nnorm_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "nnnorm_def", ["continuous_linear_map"]], ["add", "theorem", "op_nnnorm_comp_le", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "nnnorm_eq", ["pi_Lp"]]]}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["add", "theorem", "nnnorm_star", []]]}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": [["add", "theorem", "nnorm_coe", ["quaternion"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "coe_Inf", ["nnreal"]], ["mod", "theorem", "coe_Sup", ["nnreal"]], ["add", "theorem", "coe_image", ["nnreal"]], ["add", "theorem", "coe_infi", ["nnreal"]], ["add", "theorem", "coe_supr", ["nnreal"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "nndist_coe_le_nndist", ["bounded_continuous_function"]], ["add", "theorem", "nndist_eq", ["bounded_continuous_function"]], ["add", "theorem", "nndist_eq_supr", ["bounded_continuous_function"]], ["add", "theorem", "nndist_le_two_nnnorm", ["bounded_continuous_function"]], ["add", "theorem", "nndist_set_exists", ["bounded_continuous_function"]], ["add", "theorem", "nnnorm_coe_le_nnnorm", ["bounded_continuous_function"]], ["add", "theorem", "nnnorm_const_eq", ["bounded_continuous_function"]], ["add", "theorem", "nnnorm_const_le", ["bounded_continuous_function"]], ["add", "theorem", "nnnorm_def", ["bounded_continuous_function"]], ["add", "theorem", "nnnorm_eq_supr_nnnorm", ["bounded_continuous_function"]], ["add", "theorem", "nnnorm_le", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "nndist_eq", ["isometry"]]]}]}, {"timestamp": 1650383552, "sha": "f06dca76", "message": "feat(data/int/basic): add lemma `int.abs_le_one_iff` (#13513)\nAlso renaming `int.eq_zero_iff_abs_lt_one`.\nThe proof is due to @Ruben-VandeVelde \nDiscussed on Zulip [here](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Integers.20of.20norm.20at.20most.20one)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "abs_le_one_iff", ["int"]], ["add", "theorem", "abs_lt_one_iff", ["int"]], ["del", "theorem", "eq_zero_iff_abs_lt_one", ["int"]]]}]}, {"timestamp": 1650383551, "sha": "634eab10", "message": "feat(category_theory/limits): add characteristic predicate for zero objects (#13511)", "changes": [{"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/category_theory/closed/zero.lean", "newPath": "src/category_theory/closed/zero.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/zero.lean", "newPath": "src/category_theory/limits/preserves/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/default.lean", "newPath": "src/category_theory/limits/shapes/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero_morphisms.lean", "changes": [["del", "theorem", "from_zero_ext", ["category_theory", "limits", "has_zero_object"]], ["del", "theorem", "to_zero_ext", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "zero_is_initial", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "zero_is_terminal", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "zero_iso_initial", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "zero_iso_is_initial", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "zero_iso_is_terminal", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "zero_iso_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "has_zero_morphisms", ["category_theory", "limits", "is_zero"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/zero_objects.lean", "changes": [["add", "theorem", "from_zero_ext", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "iso_zero", ["category_theory", "limits", "has_zero_object", "is_zero"]], ["add", "theorem", "is_zero_zero", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "to_zero_ext", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_is_initial", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_is_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_iso_initial", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_iso_is_initial", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_iso_is_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_iso_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "eq_from", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "eq_of_src", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "eq_of_tgt", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "eq_to", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "from_eq", ["category_theory", "limits", "is_zero"]], ["add", "def", "iso", ["category_theory", "limits", "is_zero"]], ["add", "def", "iso_is_initial", ["category_theory", "limits", "is_zero"]], ["add", "def", "iso_is_terminal", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "of_iso", ["category_theory", "limits", "is_zero"]], ["add", "theorem", "to_eq", ["category_theory", "limits", "is_zero"]], ["add", "structure", "is_zero", ["category_theory", "limits"]], ["add", "theorem", "is_zero_iff", ["category_theory", "limits", "iso"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}]}, {"timestamp": 1650377087, "sha": "5dc8c1cf", "message": "feat(order/filter/n_ary): Add lemma equating map₂ to map on the product (#13490)\nProof that map₂ is the image of the corresponding function `α × β → γ`.\nDiscussion: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/filter.20map.E2.82.82.20as.20map", "changes": [{"oldPath": "src/order/filter/n_ary.lean", "newPath": "src/order/filter/n_ary.lean", "changes": [["add", "theorem", "map_prod_eq_map₂'", ["filter"]], ["add", "theorem", "map_prod_eq_map₂", ["filter"]]]}]}, {"timestamp": 1650377086, "sha": "8fa3263c", "message": "fix(analysis/locally_convex/balanced_hull_core): minimize import (#13450)\nI'm doing this because I need to have `balanced_hull_core` before `normed_space.finite_dimensional` and this little change seems to be enough for that, but I think at some point we'll need to move lemmas so that normed_spaces come as late as possible", "changes": [{"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": []}]}, {"timestamp": 1650377085, "sha": "ba6a9858", "message": "feat(order/cover): define `wcovby` (#13424)\n* This defines the reflexive closure of `covby`, which I call `wcovby` (\"weakly covered by\")\n* This is useful, since some results about `covby` still hold for `wcovby`. \n* Use `wcovby` in the proofs of the properties for `covby`.\n* Also define `wcovby_insert` (the motivating example, since I really want `(wcovby_insert _ _).eq_or_eq`)", "changes": [{"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["add", "theorem", "ord_connected_image", ["set"]], ["add", "theorem", "ord_connected_range", ["set"]]]}, {"oldPath": "src/order/cover.lean", "newPath": "src/order/cover.lean", "changes": [["mod", "theorem", "apply_covby_apply_iff", []], ["add", "theorem", "apply_wcovby_apply_iff", []], ["mod", "theorem", "image", ["covby"]], ["mod", "theorem", "of_image", ["covby"]], ["add", "theorem", "covby_iff_wcovby_and_lt", []], ["add", "theorem", "covby_iff_wcovby_and_ne", []], ["add", "theorem", "covby_iff_wcovby_and_not_le", []], ["add", "theorem", "not_wcovby_iff", []], ["add", "theorem", "of_dual_wcovby_of_dual_iff", []], ["add", "theorem", "covby_insert", ["set"]], ["add", "theorem", "apply_covby_apply_iff", ["set", "ord_connected"]], ["add", "theorem", "apply_wcovby_apply_iff", ["set", "ord_connected"]], ["add", "theorem", "wcovby_insert", ["set"]], ["add", "theorem", "to_dual_wcovby_to_dual_iff", []], ["add", "theorem", "Icc_eq", ["wcovby"]], ["add", "theorem", "Ico_subset", ["wcovby"]], ["add", "theorem", "Ioc_subset", ["wcovby"]], ["add", "theorem", "Ioo_eq", ["wcovby"]], ["add", "theorem", "covby_of_lt", ["wcovby"]], ["add", "theorem", "covby_of_ne", ["wcovby"]], ["add", "theorem", "covby_of_not_le", ["wcovby"]], ["add", "theorem", "eq_or_eq", ["wcovby"]], ["add", "theorem", "image", ["wcovby"]], ["add", "theorem", "le", ["wcovby"]], ["add", "theorem", "le_and_le_iff", ["wcovby"]], ["add", "theorem", "of_image", ["wcovby"]], ["add", "theorem", "refl", ["wcovby"]], ["add", "theorem", "rfl", ["wcovby"]], ["add", "theorem", "wcovby_iff_le", ["wcovby"]], ["add", "def", "wcovby", []], ["add", "theorem", "wcovby_iff_covby_or_eq", []], ["add", "theorem", "wcovby_iff_covby_or_le_and_le", []], ["add", "theorem", "wcovby_of_eq_or_eq", []], ["add", "theorem", "wcovby_of_le_of_le", []]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "pred_wcovby", ["order"]], ["add", "theorem", "wcovby_succ", ["order"]]]}]}, {"timestamp": 1650377084, "sha": "8f7e10b8", "message": "refactor(group_theory/group_action/big_operators): extract to a new file (#13340)\n`basic` is a misleading name, as `group_action.basic` imports a lot of things.\nFor now I'm not renaming it, but I've adding a skeletal docstring.\nSplitting out the big operator lemmas allows access to big operators before modules and quotients.\nThis also performs a drive-by generalization of the typeclasses on `smul_cancel_of_non_zero_divisor`.\nAuthorship is from #1910", "changes": [{"oldPath": "src/algebra/hom/group_action.lean", "newPath": "src/algebra/hom/group_action.lean", "changes": [["del", "def", "to_quotient", ["mul_action_hom"]], ["del", "theorem", "to_quotient_apply", ["mul_action_hom"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/interval.lean", "newPath": "src/data/dfinsupp/interval.lean", "changes": []}, {"oldPath": "src/data/finset/finsupp.lean", "newPath": "src/data/finset/finsupp.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "theorem", "smul_prod", ["finset"]], ["del", "theorem", "smul_sum", ["finset"]], ["del", "theorem", "smul_prod", ["list"]], ["del", "theorem", "smul_sum", ["list"]], ["add", "def", "to_quotient", ["mul_action_hom"]], ["add", "theorem", "to_quotient_apply", ["mul_action_hom"]], ["del", "theorem", "smul_prod", ["multiset"]], ["del", "theorem", "smul_sum", ["multiset"]], ["mod", "theorem", "smul_cancel_of_non_zero_divisor", []]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/big_operators.lean", "changes": [["add", "theorem", "smul_prod", ["finset"]], ["add", "theorem", "smul_sum", ["finset"]], ["add", "theorem", "smul_prod", ["list"]], ["add", "theorem", "smul_sum", ["list"]], ["add", "theorem", "smul_prod", ["multiset"]], ["add", "theorem", "smul_sum", ["multiset"]]]}]}, {"timestamp": 1650370260, "sha": "3e78c237", "message": "fix(algebra/hom/units): better defeq in `is_unit.lift_right` (#13508)\n… and fix a timeout introduced by this change and remove some extraneous parentheses there.", "changes": [{"oldPath": "src/algebra/hom/units.lean", "newPath": "src/algebra/hom/units.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}]}, {"timestamp": 1650362703, "sha": "5a4bae11", "message": "feat(algebra/*/basic): add trivial lemmas (#13416)\nThese save you from having to fiddle with `mul_one` when you want to rewrite them the other way, or allow easier commutativity rewrites.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "mul_rotate'", []], ["add", "theorem", "mul_rotate", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "add_one_mul", []], ["add", "theorem", "mul_add_one", []], ["add", "theorem", "mul_one_add", []], ["add", "theorem", "mul_one_sub", []], ["add", "theorem", "mul_sub_one", []], ["add", "theorem", "one_add_mul", []], ["add", "theorem", "one_sub_mul", []], ["add", "theorem", "sub_one_mul", []]]}]}, {"timestamp": 1650355669, "sha": "9202b6d1", "message": "feat(order/succ_pred/basic): Intervals and `succ`/`pred` (#13486)\nRelate `order.succ`, `order.pred` and `set.Ixx`.", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "insert_inter", ["set"]], ["add", "theorem", "insert_inter_distrib", ["set"]], ["mod", "theorem", "insert_inter_of_mem", ["set"]], ["mod", "theorem", "insert_inter_of_not_mem", ["set"]], ["add", "theorem", "insert_union_distrib", ["set"]], ["add", "theorem", "inter_insert_of_mem", ["set"]], ["add", "theorem", "inter_insert_of_not_mem", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ico_insert_right", ["set"]], ["add", "theorem", "Iic_inter_Ici", ["set"]], ["add", "theorem", "Iic_inter_Ioi", ["set"]], ["add", "theorem", "Iio_insert", ["set"]], ["add", "theorem", "Iio_inter_Ici", ["set"]], ["add", "theorem", "Iio_inter_Ioi", ["set"]], ["add", "theorem", "Ioc_insert_left", ["set"]], ["add", "theorem", "Ioi_insert", ["set"]], ["add", "theorem", "Ioo_insert_left", ["set"]], ["add", "theorem", "Ioo_insert_right", ["set"]]]}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "and_and_distrib_left", []], ["add", "theorem", "and_and_distrib_right", []], ["add", "theorem", "or_or_distrib_left", []], ["add", "theorem", "or_or_distrib_right", []]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "Icc_pred_left", ["order"]], ["add", "theorem", "Icc_pred_right", ["order"]], ["add", "theorem", "Icc_pred_right_of_not_is_min", ["order"]], ["add", "theorem", "Icc_succ_left", ["order"]], ["add", "theorem", "Icc_succ_left_of_not_is_max", ["order"]], ["add", "theorem", "Icc_succ_right", ["order"]], ["add", "theorem", "Ici_pred", ["order"]], ["mod", "theorem", "Ici_succ", ["order"]], ["add", "theorem", "Ico_pred_left", ["order"]], ["add", "theorem", "Ico_pred_right_eq_insert", ["order"]], ["add", "theorem", "Ico_succ_left", ["order"]], ["add", "theorem", "Ico_succ_left_of_not_is_max", ["order"]], ["add", "theorem", "Ico_succ_right", ["order"]], ["add", "theorem", "Ico_succ_right_eq_insert", ["order"]], ["add", "theorem", "Ico_succ_right_of_not_is_max", ["order"]], ["mod", "theorem", "Iic_pred", ["order"]], ["add", "theorem", "Iic_succ", ["order"]], ["mod", "theorem", "Iio_succ", ["order"]], ["add", "theorem", "Iio_succ_eq_insert", ["order"]], ["add", "theorem", "Ioc_pred_left", ["order"]], ["add", "theorem", "Ioc_pred_left_of_not_is_min", ["order"]], ["add", "theorem", "Ioc_pred_right", ["order"]], ["add", "theorem", "Ioc_pred_right_of_not_is_min", ["order"]], ["add", "theorem", "Ioc_succ_right", ["order"]], ["mod", "theorem", "Ioi_pred", ["order"]], ["add", "theorem", "Ioi_pred_eq_insert", ["order"]], ["add", "theorem", "Ioo_pred_left", ["order"]], ["add", "theorem", "Ioo_pred_left_of_not_is_min", ["order"]], ["add", "theorem", "Ioo_pred_right_eq_insert", ["order"]], ["add", "theorem", "Ioo_succ_right", ["order"]], ["add", "theorem", "Ioo_succ_right_eq_insert", ["order"]], ["add", "theorem", "Ioo_succ_right_of_not_is_max", ["order"]], ["del", "theorem", "le_pred_iff_lt_or_eq", ["order"]], ["add", "theorem", "le_succ_iff_eq_or_le", ["order"]], ["del", "theorem", "le_succ_iff_lt_or_eq", ["order"]], ["add", "theorem", "lt_succ_iff_eq_or_lt", ["order"]], ["add", "theorem", "lt_succ_iff_eq_or_lt_of_not_is_max", ["order"]], ["del", "theorem", "lt_succ_iff_lt_or_eq", ["order"]], ["add", "theorem", "pred_le_iff_eq_or_le", ["order"]], ["add", "theorem", "pred_lt_iff_eq_or_lt", ["order"]], ["add", "theorem", "pred_lt_iff_eq_or_lt_of_not_is_min", ["order"]], ["del", "theorem", "pred_lt_iff_lt_or_eq", ["order"]]]}]}, {"timestamp": 1650351055, "sha": "d19e8cb7", "message": "chore(docs): don't use deprecated is_subring (#13505)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1650344697, "sha": "828ef48c", "message": "fix(category_theory/monoidal): increase class search depth in coherence tactic (#13413)\nThere were two places, not just one, where the class search depth needs to be increased.", "changes": [{"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/coherence.lean", "newPath": "src/category_theory/monoidal/coherence.lean", "changes": []}]}, {"timestamp": 1650339587, "sha": "fb44330e", "message": "feat(data/matrix/block): `matrix.block_diagonal` is a ring homomorphism (#13489)\nThis is one of the steps on the path to showing that the matrix exponential of a block diagonal matrix is a block diagonal matrix of the exponents of the blocks.\nAs well as adding the new bundled homomorphisms, this generalizes the typeclasses in this file and tidies up the order of arguments.\nFinally, this protects some `map_*` lemmas to prevent clashes with the global lemmas of the same name.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "theorem", "map_add", ["matrix"]], ["del", "theorem", "map_sub", ["matrix"]], ["del", "theorem", "map_zero", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["mod", "def", "block_diagonal'", ["matrix"]], ["mod", "theorem", "block_diagonal'_add", ["matrix"]], ["add", "def", "block_diagonal'_add_monoid_hom", ["matrix"]], ["mod", "theorem", "block_diagonal'_apply", ["matrix"]], ["mod", "theorem", "block_diagonal'_apply_eq", ["matrix"]], ["mod", "theorem", "block_diagonal'_apply_ne", ["matrix"]], ["mod", "theorem", "block_diagonal'_conj_transpose", ["matrix"]], ["mod", "theorem", "block_diagonal'_diagonal", ["matrix"]], ["mod", "theorem", "block_diagonal'_map", ["matrix"]], ["mod", "theorem", "block_diagonal'_mul", ["matrix"]], ["mod", "theorem", "block_diagonal'_neg", ["matrix"]], ["add", "def", "block_diagonal'_ring_hom", ["matrix"]], ["mod", "theorem", "block_diagonal'_sub", ["matrix"]], ["mod", "theorem", "block_diagonal'_transpose", ["matrix"]], ["mod", "def", "block_diagonal", ["matrix"]], ["mod", "theorem", "block_diagonal_add", ["matrix"]], ["add", "def", "block_diagonal_add_monoid_hom", ["matrix"]], ["mod", "theorem", "block_diagonal_apply", ["matrix"]], ["mod", "theorem", "block_diagonal_apply_eq", ["matrix"]], ["mod", "theorem", "block_diagonal_apply_ne", ["matrix"]], ["mod", "theorem", "block_diagonal_map", ["matrix"]], ["mod", "theorem", "block_diagonal_mul", ["matrix"]], ["mod", "theorem", "block_diagonal_neg", ["matrix"]], ["add", "def", "block_diagonal_ring_hom", ["matrix"]], ["mod", "theorem", "block_diagonal_smul", ["matrix"]], ["mod", "theorem", "block_diagonal_sub", ["matrix"]], ["mod", "theorem", "block_diagonal_transpose", ["matrix"]], ["mod", "theorem", "from_blocks_add", ["matrix"]], ["mod", "theorem", "from_blocks_diagonal", ["matrix"]], ["mod", "theorem", "from_blocks_multiply", ["matrix"]], ["mod", "theorem", "from_blocks_one", ["matrix"]], ["mod", "theorem", "from_blocks_smul", ["matrix"]]]}]}, {"timestamp": 1650330237, "sha": "eb22ba4f", "message": "chore(algebra/monoid_algebra/basic): use the homomorphism typeclasses (#13389)\nThis replaces `mul_hom` with `mul_hom_class` and `add_hom` with `add_hom_class`.\nAlso adds two trivial lemmas, `monoid_algebra.map_domain_one` and `add_monoid_algebra.map_domain_one`.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["mod", "theorem", "map_domain_mul", ["add_monoid_algebra"]], ["add", "theorem", "map_domain_one", ["add_monoid_algebra"]], ["add", "theorem", "map_domain_one", ["monoid_algebra"]]]}]}, {"timestamp": 1650314824, "sha": "37d02d3d", "message": "chore(ring_theory/hahn_series, topology/locally_constant/algebra): add missing `non_unital_non_assoc_ring` instances (#13504)", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": []}]}, {"timestamp": 1650309099, "sha": "3c20253b", "message": "chore(algebra/ring/{pi, prod}): fix errors in `ring_hom` for `pi` and `prod`. (#13501)\nLooks like some things were incorrectly changed when copied from the corresponding `monoid_hom` files.", "changes": [{"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": [["mod", "theorem", "prod_comp_prod_map", ["ring_hom"]], ["mod", "def", "prod_map", ["ring_hom"]]]}]}, {"timestamp": 1650309098, "sha": "b54591f7", "message": "chore(analysis/normed_space/finite_dimension): golf a proof (#13491)\nThese `letI`s just made this proof convoluted, the instances were not needed.\nWithout them, we don't even need the import.\nSimilarly, the `classical` was the cause of the need for the `congr`.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}]}, {"timestamp": 1650309097, "sha": "fd08afe3", "message": "chore(data/nat/factorization): golf `dvd_iff_prime_pow_dvd_dvd` (#13473)\nGolfing the edge-case proof added in https://github.com/leanprover-community/mathlib/pull/13316", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": []}]}, {"timestamp": 1650302047, "sha": "d89160b5", "message": "feat(order/bounded_order): Strictly monotone functions preserve maximality (#13434)\nProve `f a = f ⊤ ↔ a = ⊤` and `f a = f ⊥ ↔ a = ⊥` for strictly monotone/antitone functions. Also fix `is_max.eq_top` and friends and delete `eq_top_of_maximal` (which accidentally survived the last refactor).", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "not_left", ["iff"]], ["add", "theorem", "not_right", ["iff"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["del", "theorem", "eq_top_of_maximal", []], ["add", "theorem", "not_bot_lt_iff", []], ["add", "theorem", "not_lt_top_iff", []], ["add", "theorem", "apply_eq_bot_iff", ["strict_anti"]], ["add", "theorem", "apply_eq_top_iff", ["strict_anti"]], ["add", "theorem", "apply_eq_bot_iff", ["strict_mono"]], ["add", "theorem", "apply_eq_top_iff", ["strict_mono"]]]}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "is_max_of_apply", ["strict_anti"]], ["add", "theorem", "is_min_of_apply", ["strict_anti"]], ["add", "theorem", "is_max_of_apply", ["strict_mono"]], ["add", "theorem", "is_min_of_apply", ["strict_mono"]]]}]}, {"timestamp": 1650302046, "sha": "5c75390e", "message": "feat(data/real/ennreal): Order properties of addition (#13371)\nInherit algebraic order lemmas from `with_top`. Also protect `ennreal.add_lt_add_iff_left` and `ennreal.add_lt_add_iff_right`, as they should have been.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "add_lt_add_iff_left", ["ennreal"]], ["del", "theorem", "add_lt_add_iff_right", ["ennreal"]], ["del", "theorem", "add_lt_add_left", ["ennreal"]], ["del", "theorem", "add_lt_add_right", ["ennreal"]], ["del", "theorem", "le_of_add_le_add_left", ["ennreal"]], ["del", "theorem", "le_of_add_le_add_right", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": []}]}, {"timestamp": 1650302045, "sha": "546618eb", "message": "feat(order/upper_lower): Principal upper/lower sets (#13069)\nDefine `upper_set.Ici` and `lower_set.Iic`. Also add membership lemmas for the lattice operations.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Ici_Sup", ["set"]], ["add", "theorem", "Ici_supr", ["set"]], ["add", "theorem", "Ici_supr₂", ["set"]], ["add", "theorem", "Iic_Inf", ["set"]], ["add", "theorem", "Iic_infi", ["set"]], ["add", "theorem", "Iic_infi₂", ["set"]]]}, {"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "is_lower_set_Iic", []], ["add", "theorem", "is_lower_set_Iio", []], ["add", "theorem", "is_upper_set_Ici", []], ["add", "theorem", "is_upper_set_Ioi", []], ["add", "def", "Iic", ["lower_set"]], ["add", "theorem", "Iic_Inf", ["lower_set"]], ["add", "def", "Iic_Inf_hom", ["lower_set"]], ["add", "theorem", "Iic_Inf_hom_apply", ["lower_set"]], ["add", "theorem", "Iic_inf", ["lower_set"]], ["add", "def", "Iic_inf_hom", ["lower_set"]], ["add", "theorem", "Iic_inf_hom_apply", ["lower_set"]], ["add", "theorem", "Iic_infi", ["lower_set"]], ["add", "theorem", "Iic_infi₂", ["lower_set"]], ["add", "theorem", "Iic_top", ["lower_set"]], ["add", "def", "Iio", ["lower_set"]], ["add", "theorem", "Iio_bot", ["lower_set"]], ["add", "theorem", "Ioi_le_Ici", ["lower_set"]], ["add", "theorem", "coe_Iic", ["lower_set"]], ["add", "theorem", "coe_Iic_Inf_hom", ["lower_set"]], ["add", "theorem", "coe_Iic_inf_hom", ["lower_set"]], ["add", "theorem", "coe_Iio", ["lower_set"]], ["add", "theorem", "mem_Iic_iff", ["lower_set"]], ["add", "theorem", "mem_Iio_iff", ["lower_set"]], ["add", "theorem", "mem_Inf_iff", ["lower_set"]], ["add", "theorem", "mem_Sup_iff", ["lower_set"]], ["add", "theorem", "mem_inf_iff", ["lower_set"]], ["add", "theorem", "mem_infi_iff", ["lower_set"]], ["add", "theorem", "mem_infi₂_iff", ["lower_set"]], ["add", "theorem", "mem_sup_iff", ["lower_set"]], ["add", "theorem", "mem_supr_iff", ["lower_set"]], ["add", "theorem", "mem_supr₂_iff", ["lower_set"]], ["add", "theorem", "mem_top", ["lower_set"]], ["add", "theorem", "not_mem_bot", ["lower_set"]], ["add", "def", "Ici", ["upper_set"]], ["add", "theorem", "Ici_Sup", ["upper_set"]], ["add", "def", "Ici_Sup_hom", ["upper_set"]], ["add", "theorem", "Ici_Sup_hom_apply", ["upper_set"]], ["add", "theorem", "Ici_sup", ["upper_set"]], ["add", "def", "Ici_sup_hom", ["upper_set"]], ["add", "theorem", "Ici_sup_hom_apply", ["upper_set"]], ["add", "theorem", "Ici_supr", ["upper_set"]], ["add", "theorem", "Ici_supr₂", ["upper_set"]], ["add", "theorem", "Ici_top", ["upper_set"]], ["add", "def", "Ioi", ["upper_set"]], ["add", "theorem", "Ioi_bot", ["upper_set"]], ["add", "theorem", "Ioi_le_Ici", ["upper_set"]], ["add", "theorem", "coe_Ici", ["upper_set"]], ["add", "theorem", "coe_Ioi", ["upper_set"]], ["add", "theorem", "mem_Ici_iff", ["upper_set"]], ["add", "theorem", "mem_Inf_iff", ["upper_set"]], ["add", "theorem", "mem_Ioi_iff", ["upper_set"]], ["add", "theorem", "mem_Sup_iff", ["upper_set"]], ["add", "theorem", "mem_inf_iff", ["upper_set"]], ["add", "theorem", "mem_infi_iff", ["upper_set"]], ["add", "theorem", "mem_infi₂_iff", ["upper_set"]], ["add", "theorem", "mem_sup_iff", ["upper_set"]], ["add", "theorem", "mem_supr_iff", ["upper_set"]], ["add", "theorem", "mem_supr₂_iff", ["upper_set"]], ["add", "theorem", "mem_top", ["upper_set"]], ["add", "theorem", "not_mem_bot", ["upper_set"]]]}]}, {"timestamp": 1650296735, "sha": "d790b4b8", "message": "feat(set_theory/cardinal): `lt_omega_of_fintype` (#13365)", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/cardinal.lean", "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/data/polynomial/cardinal.lean", "newPath": "src/data/polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/classification.lean", "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "lt_omega_of_fintype", ["cardinal"]]]}]}, {"timestamp": 1650277865, "sha": "e18ea79e", "message": "feat(number_theory/legendre_symbol/quadratic_reciprocity): replace `[fact (p % 2 = 1)]` arguments by `(p ≠ 2)` (#13474)\nThis removes implicit arguments of the form `[fact (p % 2 = 1)]` and replaces them by explicit arguments `(hp : p ≠ 2)`.\n(See the short discussion on April 9 in [this topic](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Quadratic.20Hilbert.20symbol.20over.20.E2.84.9A).)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "mod_two_eq_one_iff_ne_two", ["nat", "prime"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["mod", "theorem", "eisenstein_lemma", ["zmod"]], ["mod", "theorem", "exists_sq_eq_prime_iff_of_mod_four_eq_one", ["zmod"]], ["mod", "theorem", "exists_sq_eq_two_iff", ["zmod"]], ["mod", "theorem", "gauss_lemma", ["zmod"]], ["mod", "theorem", "legendre_sym_two", ["zmod"]], ["mod", "theorem", "quadratic_reciprocity", ["zmod"]]]}]}, {"timestamp": 1650260235, "sha": "82348a60", "message": "feat(computability/partrec_code): add eval prec helpers (#11945)\nA few helpers to clarify the definition of `eval`.", "changes": [{"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": [["add", "theorem", "eval_prec_succ", ["nat", "partrec", "code"]], ["add", "theorem", "eval_prec_zero", ["nat", "partrec", "code"]]]}]}, {"timestamp": 1650253296, "sha": "279b7f34", "message": "chore(scripts): update nolints.txt (#13493)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1650208725, "sha": "e6322c6a", "message": "feat(analysis/convex): golf some proofs (#13451)", "changes": [{"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": [["del", "theorem", "image_inv_Ioo_0_left", ["set"]], ["add", "theorem", "inv_Ioi", ["set"]], ["add", "theorem", "inv_Ioo_0_left", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "homothety_mul_apply", ["affine_map"]]]}]}, {"timestamp": 1650208724, "sha": "b90e770f", "message": "feat(data/fin/tuple/nat_antidiagonal): add `list.nat.antidiagonal_tuple_pairwise_pi_lex` (#13339)\nThis proof feels a little clumsy, but maybe that's unavoidable.", "changes": [{"oldPath": "src/data/fin/tuple/nat_antidiagonal.lean", "newPath": "src/data/fin/tuple/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_tuple_zero_right", ["finset", "nat"]], ["add", "theorem", "antidiagonal_tuple_pairwise_pi_lex", ["list", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_right", ["list", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_right", ["multiset", "nat"]]]}]}, {"timestamp": 1650203226, "sha": "9380977b", "message": "chore(algebra/big_operators/fin): moving lemmas (#13331)\nThis PR moves lemmas about products and sums over `fin n` from `data/fintype/card.lean` to `algebra/big_operators/fin.lean`.", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["add", "theorem", "prod_const", ["fin"]], ["add", "theorem", "prod_of_fn", ["fin"]], ["add", "theorem", "prod_univ_cast_succ", ["fin"]], ["add", "theorem", "prod_univ_def", ["fin"]], ["add", "theorem", "prod_univ_one", ["fin"]], ["add", "theorem", "prod_univ_succ", ["fin"]], ["add", "theorem", "prod_univ_succ_above", ["fin"]], ["add", "theorem", "prod_univ_two", ["fin"]], ["add", "theorem", "prod_univ_zero", ["fin"]], ["add", "theorem", "sum_const", ["fin"]], ["add", "theorem", "sum_pow_mul_eq_add_pow", ["fin"]], ["add", "theorem", "prod_range", ["finset"]], ["add", "theorem", "alternating_prod_eq_finset_prod", ["list"]], ["add", "theorem", "alternating_sum_eq_finset_sum", ["list"]], ["add", "theorem", "prod_of_fn", ["list"]], ["add", "theorem", "prod_take_of_fn", ["list"]]]}, {"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["del", "theorem", "prod_const", ["fin"]], ["del", "theorem", "prod_of_fn", ["fin"]], ["del", "theorem", "prod_univ_cast_succ", ["fin"]], ["del", "theorem", "prod_univ_def", ["fin"]], ["del", "theorem", "prod_univ_one", ["fin"]], ["del", "theorem", "prod_univ_succ", ["fin"]], ["del", "theorem", "prod_univ_succ_above", ["fin"]], ["del", "theorem", "prod_univ_two", ["fin"]], ["del", "theorem", "prod_univ_zero", ["fin"]], ["del", "theorem", "sum_const", ["fin"]], ["del", "theorem", "sum_pow_mul_eq_add_pow", ["fin"]], ["del", "theorem", "prod_range", ["finset"]], ["del", "theorem", "alternating_prod_eq_finset_prod", ["list"]], ["del", "theorem", "alternating_sum_eq_finset_sum", ["list"]], ["del", "theorem", "prod_of_fn", ["list"]], ["del", "theorem", "prod_take_of_fn", ["list"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}]}, {"timestamp": 1650199282, "sha": "7c7f3514", "message": "feat(topology/[separation, homeomorph]): separation properties are topological invariants (#13401)", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "t1_space_of_injective_of_continuous", []]]}]}, {"timestamp": 1650191267, "sha": "49e41eb5", "message": "feat(topology/algebra/order): extreme value thm for a function continuous on a closed set (#13348)", "changes": [{"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["add", "theorem", "exists_forall_ge'", ["continuous_on"]], ["add", "theorem", "exists_forall_le'", ["continuous_on"]]]}]}, {"timestamp": 1650167865, "sha": "f4f46cd5", "message": "chore(scripts): update nolints.txt (#13482)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1650137322, "sha": "d4fda045", "message": "feat(data/finsupp/basic): add a few lemmas, mostly about `finsupp.filter` (#13457)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "filter_eq_self_iff", ["finsupp"]], ["add", "theorem", "filter_eq_zero_iff", ["finsupp"]], ["mod", "theorem", "filter_single_of_neg", ["finsupp"]], ["mod", "theorem", "filter_single_of_pos", ["finsupp"]], ["add", "theorem", "prod_div_prod_filter", ["finsupp"]], ["add", "theorem", "prod_filter_index", ["finsupp"]], ["add", "theorem", "prod_filter_mul_prod_filter_not", ["finsupp"]], ["add", "theorem", "single_apply_ne_zero", ["finsupp"]]]}]}, {"timestamp": 1650130394, "sha": "96667b51", "message": "chore(number_theory/*): Weaken assumptions (#13443)\nFollow @alexjbest's generalization linter to weaken typeclass assumptions in number theory.", "changes": [{"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["mod", "theorem", "coe_moebius_mul_coe_zeta", ["nat", "arithmetic_function"]], ["mod", "theorem", "sum_eq_iff_sum_mul_moebius_eq", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": [["mod", "theorem", "exists_approx_polynomial_aux", ["polynomial"]], ["mod", "theorem", "exists_eq_polynomial", ["polynomial"]]]}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": [["mod", "theorem", "norm_lt", ["class_group"]]]}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": [["mod", "theorem", "exists_one_le_pow_mul_dist", ["liouville"]]]}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": [["mod", "theorem", "to_zmod_pow_eq_iff_ext", ["padic_int"]]]}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": [["mod", "theorem", "hom_ext", ["zsqrtd"]]]}]}, {"timestamp": 1650130393, "sha": "018e9b57", "message": "chore(order/bounded_order): Match the `with_bot` and `with_top` API (#13419)\nThe API for `with_top` and the API for `with_bot` somehow evolved independently from each other, which created frustating disparity in lemmas and argument implicitness. This synchronizes everything (including the layout), generalize a few lemmas from `preorder`/`partial_order` to `has_le`/`has_lt`, and removes the duplicated `is_total (with_bot α) (≤)`/`is_total (with_top α) (≤)` instances.", "changes": [{"oldPath": "src/algebra/cubic_discriminant.lean", "newPath": "src/algebra/cubic_discriminant.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/split.lean", "newPath": "src/analysis/box_integral/partition/split.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "bot_lt_coe", ["with_bot"]], ["mod", "theorem", "bot_ne_coe", ["with_bot"]], ["mod", "theorem", "coe_eq_coe", ["with_bot"]], ["mod", "theorem", "coe_le", ["with_bot"]], ["mod", "theorem", "coe_le_coe", ["with_bot"]], ["add", "theorem", "coe_le_iff", ["with_bot"]], ["mod", "theorem", "coe_lt_coe", ["with_bot"]], ["mod", "theorem", "coe_ne_bot", ["with_bot"]], ["mod", "theorem", "coe_unbot", ["with_bot"]], ["add", "theorem", "le_coe_iff", ["with_bot"]], ["add", "theorem", "lt_coe_iff", ["with_bot"]], ["add", "theorem", "lt_iff_exists_coe", ["with_bot"]], ["add", "theorem", "lt_iff_exists_coe_btwn", ["with_bot"]], ["mod", "theorem", "ne_bot_iff_exists", ["with_bot"]], ["add", "theorem", "none_le", ["with_bot"]], ["mod", "theorem", "none_lt_some", ["with_bot"]], ["mod", "theorem", "not_coe_le_bot", ["with_bot"]], ["mod", "theorem", "not_lt_none", ["with_bot"]], ["mod", "theorem", "some_le_some", ["with_bot"]], ["mod", "theorem", "some_lt_some", ["with_bot"]], ["mod", "theorem", "unbot_coe", ["with_bot"]], ["add", "theorem", "well_founded_gt", ["with_bot"]], ["mod", "theorem", "well_founded_lt", ["with_bot"]], ["mod", "theorem", "coe_eq_coe", ["with_top"]], ["mod", "theorem", "coe_le_coe", ["with_top"]], ["mod", "theorem", "coe_le_iff", ["with_top"]], ["mod", "theorem", "coe_lt_coe", ["with_top"]], ["mod", "theorem", "coe_lt_iff", ["with_top"]], ["mod", "theorem", "coe_lt_top", ["with_top"]], ["mod", "theorem", "coe_max", ["with_top"]], ["mod", "theorem", "coe_min", ["with_top"]], ["mod", "theorem", "coe_ne_top", ["with_top"]], ["mod", "theorem", "coe_untop", ["with_top"]], ["mod", "theorem", "le_coe", ["with_top"]], ["mod", "theorem", "le_coe_iff", ["with_top"]], ["mod", "theorem", "le_none", ["with_top"]], ["mod", "theorem", "lt_iff_exists_coe", ["with_top"]], ["mod", "theorem", "lt_iff_exists_coe_btwn", ["with_top"]], ["mod", "theorem", "ne_top_iff_exists", ["with_top"]], ["mod", "theorem", "not_none_lt", ["with_top"]], ["mod", "theorem", "not_top_le_coe", ["with_top"]], ["mod", "theorem", "some_le_some", ["with_top"]], ["mod", "theorem", "some_lt_none", ["with_top"]], ["mod", "theorem", "some_lt_some", ["with_top"]], ["mod", "theorem", "top_ne_coe", ["with_top"]], ["add", "theorem", "well_founded_gt", ["with_top"]], ["mod", "theorem", "well_founded_lt", ["with_top"]]]}]}, {"timestamp": 1650130392, "sha": "8decd4b1", "message": "chore(logic/encodable/basic): Rename `encodable` instances (#13396)\nThe instances were called `encodable.foo` instead of `foo.encodable` as the naming convention preconizes.", "changes": [{"oldPath": "src/algebra/algebraic_card.lean", "newPath": "src/algebra/algebraic_card.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": []}, {"oldPath": "src/computability/encoding.lean", "newPath": "src/computability/encoding.lean", "changes": []}, {"oldPath": "src/data/W/basic.lean", "newPath": "src/data/W/basic.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/tprod.lean", "newPath": "src/data/tprod.lean", "changes": []}, {"oldPath": "src/logic/encodable/basic.lean", "newPath": "src/logic/encodable/basic.lean", "changes": []}, {"oldPath": "src/logic/equiv/list.lean", "newPath": "src/logic/equiv/list.lean", "changes": [["del", "def", "trunc_encodable_of_fintype", ["encodable"]], ["add", "def", "trunc_encodable", ["fintype"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1650130391, "sha": "91a43e71", "message": "feat(algebra/order/monoid): Co/contravariant classes for `with_bot`/`with_top` (#13369)\nAdd the `covariant_class (with_bot α) (with_bot α) (+) (≤)` and `contravariant_class (with_bot α) (with_bot α) (+) (<)` instances, as well as the lemmas that `covariant_class (with_bot α) (with_bot α) (+) (<)` and `contravariant_class (with_bot α) (with_bot α) (+) (≤)` almost hold.\nOn the way, match the APIs for `with_bot`/`with_top` by adding missing lemmas.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["mod", "theorem", "add_bot", ["with_bot"]], ["add", "theorem", "add_coe_eq_bot_iff", ["with_bot"]], ["mod", "theorem", "add_eq_bot", ["with_bot"]], ["add", "theorem", "add_eq_coe", ["with_bot"]], ["del", "theorem", "add_lt_add_iff_left", ["with_bot"]], ["del", "theorem", "add_lt_add_iff_right", ["with_bot"]], ["add", "theorem", "add_ne_bot", ["with_bot"]], ["mod", "theorem", "bot_add", ["with_bot"]], ["add", "theorem", "bot_lt_add", ["with_bot"]], ["mod", "theorem", "coe_add", ["with_bot"]], ["add", "theorem", "coe_add_eq_bot_iff", ["with_bot"]], ["mod", "theorem", "coe_bit0", ["with_bot"]], ["mod", "theorem", "coe_bit1", ["with_bot"]], ["mod", "theorem", "add_coe_eq_top_iff", ["with_top"]], ["mod", "theorem", "add_eq_coe", ["with_top"]], ["mod", "theorem", "add_eq_top", ["with_top"]], ["del", "theorem", "add_lt_add_iff_left", ["with_top"]], ["del", "theorem", "add_lt_add_iff_right", ["with_top"]], ["mod", "theorem", "add_lt_top", ["with_top"]], ["add", "theorem", "add_ne_top", ["with_top"]], ["mod", "theorem", "add_top", ["with_top"]], ["mod", "theorem", "coe_add", ["with_top"]], ["mod", "theorem", "coe_add_eq_top_iff", ["with_top"]], ["mod", "theorem", "coe_bit0", ["with_top"]], ["mod", "theorem", "coe_bit1", ["with_top"]], ["mod", "theorem", "top_add", ["with_top"]], ["mod", "theorem", "to_mul_bot_le", ["with_zero"]], ["mod", "theorem", "to_mul_bot_lt", ["with_zero"]], ["mod", "theorem", "to_mul_bot_strict_mono", ["with_zero"]]]}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}]}, {"timestamp": 1650125939, "sha": "874dde52", "message": "feat(data/polynomial/eval): generalize smul lemmas (#13479)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "eval_smul", ["polynomial"]], ["add", "theorem", "smul_comp", ["polynomial"]]]}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}]}, {"timestamp": 1650119262, "sha": "010f09e7", "message": "feat(data/polynomial/taylor): add `taylor_alg_hom` (#13477)", "changes": [{"oldPath": "src/data/polynomial/taylor.lean", "newPath": "src/data/polynomial/taylor.lean", "changes": [["add", "def", "taylor_alg_hom", ["polynomial"]]]}]}, {"timestamp": 1650112725, "sha": "f7430cd7", "message": "feat(data/polynomial/eval): add `protected` on some lemmas about `polynomial.map` (#13478)\nThese clash with global lemmas.", "changes": [{"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "map_add", ["polynomial"]], ["del", "theorem", "map_mul", ["polynomial"]], ["del", "theorem", "map_neg", ["polynomial"]], ["del", "theorem", "map_one", ["polynomial"]], ["del", "theorem", "map_sub", ["polynomial"]], ["del", "theorem", "map_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}]}, {"timestamp": 1650087576, "sha": "862a5854", "message": "feat(topology/stone_cech): add stone_cech_hom_ext (#13472)\nThe universal property that characterises the Stone–Čech compactification of a topological space X is that any function from X to a compact Hausdorff space extends uniquely to a continuous function on βX. Existence is already provided by `unique_stone_cech_extend`, but it seems that the uniqueness lemma was intentionally omitted previously. Easy, but probably worth being explicit about.", "changes": [{"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": [["add", "theorem", "stone_cech_hom_ext", []]]}]}, {"timestamp": 1650054588, "sha": "449e06a9", "message": "feat(algebraic_topology/fundamental_groupoid/fundamental_group): add type checker helpers for convertings paths to/from elements of fundamental group (#13182)\nThis pr adds the following helper functions for converting paths to and from elements of the fundamental group:\n- `to_arrow`: converts element of the fundamental group to an arrow in the fundamental groupoid\n- `to_path`: converts element of the fundamental group to a (quotient of homotopic) path in the space\n- `from_arrow`: constructs an element of the fundamental group from a self-arrow in the fundamental groupoid\n- `from_path`: constructs an element of the fundamental group from a (quotient of homotopic) path in the space\nThese parallel the similarly named functions for the fundamental group [here](https://github.com/leanprover-community/mathlib/blob/743ed5d1dd54fffd65e3a7f3522e4a4e85472964/src/algebraic_topology/fundamental_groupoid/basic.lean#L339-L355). They will prove helpful in doing computations with the fundamental group later e.g. for the disk, circle, etc.", "changes": [{"oldPath": "src/algebraic_topology/fundamental_groupoid/fundamental_group.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/fundamental_group.lean", "changes": [["add", "def", "from_arrow", ["fundamental_group"]], ["add", "def", "from_path", ["fundamental_group"]], ["add", "def", "to_arrow", ["fundamental_group"]], ["add", "def", "to_path", ["fundamental_group"]]]}]}, {"timestamp": 1650045017, "sha": "c988c622", "message": "chore(number_theory/function_field): fix typo (#13464)", "changes": [{"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}]}, {"timestamp": 1650045016, "sha": "fbff76b5", "message": "refactor(number_theory/legendre_symbol/): move Gauss/Eisenstein lemma code to separate file (#13449)\nIn preparation of further changes to number_theory/legendre_symbol/quadratic_reciprocity, this takes most of the code dealing with the lemmas of Gauss and Eisenstein out of quadratic_reciprocity.lean into a new file gauss_eisenstein_lemmas.lean.\nSince I am not planning to do much (if anything) to this part of the code and it is rather involved and slows down Lean when I'm editing quadratic_reciprocity.lean, it makes sense to separate this code from the remainder of the file.", "changes": [{"oldPath": null, "newPath": "src/number_theory/legendre_symbol/gauss_eisenstein_lemmas.lean", "changes": [["add", "theorem", "Ico_map_val_min_abs_nat_abs_eq_Ico_map_id", ["legendre_symbol"]], ["add", "theorem", "div_eq_filter_card", ["legendre_symbol"]], ["add", "theorem", "eisenstein_lemma_aux", ["legendre_symbol"]], ["add", "theorem", "gauss_lemma_aux", ["legendre_symbol"]], ["add", "theorem", "sum_mul_div_add_sum_mul_div_eq_mul", ["legendre_symbol"]], ["add", "theorem", "prod_Ico_one_prime", ["zmod"]], ["add", "theorem", "wilsons_lemma", ["zmod"]]]}, {"oldPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": [["del", "theorem", "Ico_map_val_min_abs_nat_abs_eq_Ico_map_id", []], ["del", "theorem", "div_eq_filter_card", []], ["del", "theorem", "prod_Ico_one_prime", ["zmod"]], ["del", "theorem", "wilsons_lemma", ["zmod"]]]}]}, {"timestamp": 1650042541, "sha": "0c2d68a0", "message": "feat(data/sym/sym2): mem_map/mem_congr/map_id' (#13437)\nAdditional simplification lemmas, one to address non-simp-normal-form. (Also did a few proof simplifications.)", "changes": [{"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["mod", "theorem", "map_comp", ["sym2"]], ["add", "theorem", "map_congr", ["sym2"]], ["add", "theorem", "map_id'", ["sym2"]], ["mod", "theorem", "map_id", ["sym2"]], ["add", "theorem", "mem_map", ["sym2"]]]}]}, {"timestamp": 1650034987, "sha": "d6c1cf16", "message": "feat(analysis/normed_space/pointwise): Balls disjointness (#13379)\nTwo balls in a real normed space are disjoint iff the sum of their radii is less than the distance between their centers.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "combo_self", ["convex"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "mul_lt_of_lt_one_left", []], ["add", "theorem", "mul_lt_of_lt_one_right", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "combo_self", ["convex"]]]}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["add", "theorem", "disjoint_ball_ball_iff", []], ["add", "theorem", "disjoint_ball_closed_ball_iff", []], ["add", "theorem", "disjoint_closed_ball_ball_iff", []], ["add", "theorem", "disjoint_closed_ball_closed_ball_iff", []], ["add", "theorem", "exists_dist_eq", []], ["add", "theorem", "exists_dist_le_le", []], ["add", "theorem", "exists_dist_le_lt", []], ["add", "theorem", "exists_dist_lt_le", []], ["add", "theorem", "exists_dist_lt_lt", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "ball_disjoint_ball", ["metric"]], ["add", "theorem", "ball_disjoint_closed_ball", ["metric"]], ["mod", "theorem", "closed_ball_disjoint_ball", ["metric"]], ["mod", "theorem", "closed_ball_disjoint_closed_ball", ["metric"]]]}]}, {"timestamp": 1650034986, "sha": "2194eef2", "message": "chore(ring_theory/ideal/local_ring): generalize to semirings (#13341)", "changes": [{"oldPath": "src/logic/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["mod", "theorem", "is_local_ring_hom_of_comp", []], ["mod", "theorem", "is_unit_map_iff", []], ["mod", "theorem", "is_unit_of_map_unit", []], ["del", "theorem", "local_of_nonunits_ideal", []], ["del", "theorem", "local_of_surjective", []], ["del", "theorem", "local_of_unique_max_ideal", []], ["del", "theorem", "local_of_unique_nonzero_prime", []], ["mod", "theorem", "is_unit_of_mem_nonunits_one_sub_self", ["local_ring"]], ["mod", "theorem", "is_unit_or_is_unit_one_sub_self", ["local_ring"]], ["mod", "theorem", "ker_eq_maximal_ideal", ["local_ring"]], ["mod", "theorem", "maximal_ideal_unique", ["local_ring"]], ["mod", "theorem", "mem_maximal_ideal", ["local_ring"]], ["del", "theorem", "nonunits_add", ["local_ring"]], ["add", "theorem", "of_is_unit_or_is_unit_one_sub_self", ["local_ring"]], ["add", "theorem", "of_surjective", ["local_ring"]], ["add", "theorem", "of_unique_max_ideal", ["local_ring"]], ["add", "theorem", "of_unique_nonzero_prime", ["local_ring"]], ["add", "theorem", "map_mem_nonunits_iff", []], ["mod", "theorem", "map_nonunit", []], ["mod", "theorem", "of_irreducible_map", []], ["mod", "theorem", "domain_local_ring", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/localization/at_prime.lean", "newPath": "src/ring_theory/localization/at_prime.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/valuation_ring.lean", "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": []}]}, {"timestamp": 1650034985, "sha": "c65bebb5", "message": "feat(number_theory/padics/padic_numbers): add padic.add_valuation (#12939)\nWe define the p-adic additive valuation on `Q_[p]`, as an `add_valuation` with values in `with_top Z`.", "changes": [{"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": [["add", "theorem", "apply", ["padic", "add_valuation"]], ["add", "theorem", "map_add", ["padic", "add_valuation"]], ["add", "theorem", "map_mul", ["padic", "add_valuation"]], ["add", "theorem", "map_one", ["padic", "add_valuation"]], ["add", "theorem", "map_zero", ["padic", "add_valuation"]], ["add", "def", "add_valuation", ["padic"]], ["add", "def", "add_valuation_def", ["padic"]], ["add", "theorem", "valuation_map_add", ["padic"]], ["add", "theorem", "valuation_map_mul", ["padic"]]]}]}, {"timestamp": 1650028257, "sha": "bbbea1c1", "message": "chore(*): clean up unnecessary uses of nat.cases_on (#13454)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["mod", "theorem", "rotate_nil", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": []}, {"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1650021158, "sha": "ebc8b441", "message": "feat(analysis/normed_space/basic): `pi` and `prod` are `normed_algebra`s (#13442)\nNote that over an empty index type, `pi` is not a normed_algebra since it is trivial as a ring.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnorm_algebra_map_eq", []]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}]}, {"timestamp": 1650019149, "sha": "d13f291b", "message": "feat(group_theory/group_action/conj_act): conjugation by the units of a monoid (#13439)\nI suspect we can make this even more general in future by introducing a compatibility typeclass, but this is good enough for me for now.\nThis also adds a stronger typeclass for the existing action of `conj_act K` where `K` is a `division_ring`.", "changes": [{"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": [["mod", "theorem", "of_conj_act_zero", ["conj_act"]], ["mod", "theorem", "to_conj_act_zero", ["conj_act"]], ["add", "theorem", "units_smul_def", ["conj_act"]]]}]}, {"timestamp": 1650013366, "sha": "dd51529f", "message": "feat(combinatorics/simple_graph/subgraph): delete_edges (#13306)\nConstruct a subgraph from another by deleting edges.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["del", "def", "coe", ["simple_graph", "subgraph"]], ["add", "theorem", "coe_delete_edges_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "coe_delete_edges_le", ["simple_graph", "subgraph"]], ["add", "def", "delete_edges", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_coe_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_delete_edges", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_empty_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_inter_edge_set_left_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_inter_edge_set_right_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_le", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_le_of_le", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_spanning_coe_eq", ["simple_graph", "subgraph"]], ["add", "theorem", "delete_edges_verts", ["simple_graph", "subgraph"]], ["del", "def", "spanning_coe", ["simple_graph", "subgraph"]], ["add", "theorem", "spanning_coe_delete_edges_le", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1649997128, "sha": "d6a46b79", "message": "chore(scripts): update nolints.txt (#13455)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1649994089, "sha": "6a5764b3", "message": "chore(analysis/normed_space/multilinear): use notation (#13452)\n* use notation `A [×n]→L[𝕜] B`;\n* use `A → B` instead of `Π x : A, B`.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "def", "restr", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1649990833, "sha": "d81cedb1", "message": "feat(topology/algebra/module/multilinear): relax requirements for `continuous_multilinear_map.mk_pi_algebra` (#13426)\n`continuous_multilinear_map.mk_pi_algebra` and `continuous_multilinear_map.mk_pi_algebra_fin` do not need a norm on either the algebra or base ring; all they need is a topology on the algebra compatible with multiplication.\nThe much weaker typeclasses cause some elaboration issues in a few places, as the normed space can no longer be found by unification. Adding a non-dependent version of `continuous_multilinear_map.has_op_norm` largely resolves this, although a few API proofs about `mk_pi_algebra` and `mk_pi_algebra_fin` end up quite underscore heavy.\nThis is the first step in being able to define `exp` without first choosing a `norm`.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["del", "theorem", "mk_pi_algebra_apply", ["continuous_multilinear_map"]], ["del", "theorem", "mk_pi_algebra_fin_apply", ["continuous_multilinear_map"]]]}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["add", "theorem", "mk_pi_algebra_apply", ["continuous_multilinear_map"]], ["add", "theorem", "mk_pi_algebra_fin_apply", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1649968271, "sha": "1506335d", "message": "chore(number_theory/zsqrtd/*): Missing docstrings and cleanups (#13445)\nAdd docstrings to `gaussian_int` and `zsqrtd.norm` and inline definitions which did not have a docstring nor deserved one.", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": [["del", "def", "add", ["zsqrtd"]], ["mod", "theorem", "add_def", ["zsqrtd"]], ["mod", "theorem", "add_im", ["zsqrtd"]], ["mod", "theorem", "add_re", ["zsqrtd"]], ["mod", "theorem", "bit0_im", ["zsqrtd"]], ["mod", "theorem", "bit0_re", ["zsqrtd"]], ["mod", "theorem", "bit1_re", ["zsqrtd"]], ["mod", "def", "conj", ["zsqrtd"]], ["mod", "theorem", "conj_im", ["zsqrtd"]], ["mod", "theorem", "conj_neg", ["zsqrtd"]], ["mod", "theorem", "conj_re", ["zsqrtd"]], ["del", "theorem", "le_refl", ["zsqrtd"]], ["del", "def", "mul", ["zsqrtd"]], ["mod", "theorem", "mul_im", ["zsqrtd"]], ["mod", "theorem", "mul_re", ["zsqrtd"]], ["del", "def", "neg", ["zsqrtd"]], ["mod", "theorem", "neg_im", ["zsqrtd"]], ["mod", "theorem", "neg_re", ["zsqrtd"]], ["add", "theorem", "add", ["zsqrtd", "nonneg"]], ["del", "theorem", "nonneg_add", ["zsqrtd"]], ["del", "def", "one", ["zsqrtd"]], ["del", "def", "zero", ["zsqrtd"]]]}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1649957569, "sha": "cbf3062b", "message": "feat(combinatorics/simple_graph/connectivity): define connected components (#12766)", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "def", "connected_component", ["simple_graph"]], ["add", "def", "connected_component_mk", ["simple_graph"]], ["add", "theorem", "subsingleton_connected_component", ["simple_graph", "preconnected"]], ["mod", "def", "connected", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1649950301, "sha": "251bd842", "message": "feat(group_theory/subgroup/basic): One more `mem_normalizer_iff` lemma (#13395)\nThis PR golfs `mem_normalizer_iff'` and adds `mem_normalizer_iff''`. There are not so easy to deduce from each other, so it's nice to have these variations available.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "mem_normalizer_iff''", ["subgroup"]], ["mod", "theorem", "mem_normalizer_iff'", ["subgroup"]]]}]}, {"timestamp": 1649950300, "sha": "8bbc5ac4", "message": "feat(combinatorics/additive/salem_spencer): Salem-Spencer sets under images (#13279)\nA set `s` is Salem-Spencer iff its image under an injective Freiman hom is.", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "prod_pair", ["multiset"]]]}, {"oldPath": "src/algebra/hom/freiman.lean", "newPath": "src/algebra/hom/freiman.lean", "changes": [["add", "theorem", "map_mul_map_eq_map_mul_map", []]]}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": [["add", "theorem", "image", ["mul_salem_spencer"]], ["add", "theorem", "of_image", ["mul_salem_spencer"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "card_pair", ["multiset"]]]}]}, {"timestamp": 1649945345, "sha": "fecdd4b2", "message": "feat(measure_theory/card_measurable_space): `generate_measurable_rec s` gives precisely the generated sigma-algebra (#12462)", "changes": [{"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": [["add", "theorem", "Union_mem_generate_measurable_rec", ["measurable_space"]], ["del", "theorem", "cardinal_Union_generate_measurable_rec_le", ["measurable_space"]], ["mod", "theorem", "cardinal_measurable_set_le_continuum", ["measurable_space"]], ["add", "theorem", "compl_mem_generate_measurable_rec", ["measurable_space"]], ["add", "theorem", "empty_mem_generate_measurable_rec", ["measurable_space"]], ["add", "theorem", "generate_measurable_eq_rec", ["measurable_space"]], ["add", "theorem", "generate_measurable_rec_subset", ["measurable_space"]], ["del", "theorem", "generate_measurable_subset_rec", ["measurable_space"]], ["add", "theorem", "self_subset_generate_measurable_rec", ["measurable_space"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}]}, {"timestamp": 1649941498, "sha": "adfe9c7f", "message": "feat(topology/algebra/order/compact): Sup is continuous (#13347)\n* Prove that the `Sup` of a binary function over a compact set is continuous in the second variable\n* Some other lemmas about `Sup`\n* Move and generalize `is_compact.bdd_[above|below]_image`\n* from the sphere eversion project", "changes": [{"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "bdd_above_image", ["is_compact"]], ["add", "theorem", "bdd_below_image", ["is_compact"]]]}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["add", "theorem", "Sup_lt_iff_of_continuous", ["is_compact"]], ["del", "theorem", "bdd_above_image", ["is_compact"]], ["del", "theorem", "bdd_below_image", ["is_compact"]], ["add", "theorem", "continuous_Inf", ["is_compact"]], ["add", "theorem", "continuous_Sup", ["is_compact"]], ["add", "theorem", "exists_Inf_image_eq_and_le", ["is_compact"]], ["add", "theorem", "exists_Sup_image_eq_and_ge", ["is_compact"]], ["add", "theorem", "lt_Inf_iff_of_continuous", ["is_compact"]]]}]}, {"timestamp": 1649934759, "sha": "936eb7ee", "message": "feat(analysis/normed_space/finite_dimension): a finite dimensional affine subspace is closed (#13440)", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "is_closed_direction_iff", ["affine_subspace"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "coe_to_homeomorph_of_finite_dimensional", ["affine_equiv"]], ["add", "theorem", "coe_to_homeomorph_of_finite_dimensional_symm", ["affine_equiv"]], ["add", "theorem", "continuous_of_finite_dimensional", ["affine_equiv"]], ["add", "def", "to_homeomorph_of_finite_dimensional", ["affine_equiv"]], ["mod", "theorem", "continuous_of_finite_dimensional", ["affine_map"]], ["add", "theorem", "closed_of_finite_dimensional", ["affine_subspace"]]]}]}, {"timestamp": 1649934758, "sha": "9631a913", "message": "feat(ring_theory/multiplicity): int.nat_abs (#13420)\nSpinning off of #12454", "changes": [{"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "nat_abs", ["multiplicity", "int"]]]}]}, {"timestamp": 1649934757, "sha": "88ba31c9", "message": "feat(measure_theory/constructions/pi): more `measure_preserving` lemmas (#13404)\n* Reformulate `map_pi_equiv_pi_subtype_prod` in terms of\n `measure_preserving`.\n* Add more equivalences (bare equivalences, order isomorphisms, and\n measurable equivalences) on pi types.", "changes": [{"oldPath": "src/logic/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": [["add", "def", "pi_fin_succ_above_equiv", ["equiv"]], ["add", "def", "pi_fin_succ_above_iso", ["order_iso"]]]}, {"oldPath": "src/logic/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": [["add", "theorem", "preimage_pi_equiv_pi_subtype_prod_symm_pi", ["equiv"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["del", "theorem", "map_pi_equiv_pi_subtype_prod", ["measure_theory", "measure"]], ["del", "theorem", "map_pi_equiv_pi_subtype_prod_symm", ["measure_theory", "measure"]], ["add", "theorem", "measure_preserving_pi_equiv_pi_subtype_prod", ["measure_theory"]], ["add", "theorem", "measure_preserving_pi_fin_succ_above_equiv", ["measure_theory"]], ["add", "theorem", "volume_preserving_pi_equiv_pi_subtype_prod", ["measure_theory"]], ["add", "theorem", "volume_preserving_pi_fin_succ_above_equiv", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "def", "pi_equiv_pi_subtype_prod", ["measurable_equiv"]], ["add", "def", "pi_fin_succ_above_equiv", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["del", "theorem", "map_transvection_volume_pi", ["real"]], ["add", "theorem", "volume_preserving_transvection_struct", ["real"]]]}]}, {"timestamp": 1649934756, "sha": "dd34ffaf", "message": "refactor(group_theory/schur_zassenhaus): Golf using `is_complement'_stabilizer` (#13392)\nThis PR golfs the proof of the abelian case of Schur-Zassenhaus using the new lemma `is_complement'_stabilizer`.", "changes": [{"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": [["mod", "theorem", "is_complement'_stabilizer_of_coprime", ["subgroup"]]]}]}, {"timestamp": 1649934755, "sha": "15b764d8", "message": "feat(group_theory/complement): Add more API for the action on left transversals (#13363)\nThis PR adds more API for the action on left transversals.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "smul_apply_eq_smul_apply_inv_smul", ["subgroup"]], ["add", "theorem", "smul_to_equiv", ["subgroup"]]]}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": [["del", "theorem", "smul_symm_apply_eq_mul_symm_apply_inv_smul", ["subgroup"]]]}]}, {"timestamp": 1649934754, "sha": "769ec8c8", "message": "feat(group_theory/group_action/basic): Right multiplication satisfies the `quotient_action` axiom (#13362)\nThis PR adds an instance stating that the right multiplication action of `H.normalizer.opposite` on `G` satisfies the `quotient_action` axiom. In particular, we automatically get the induced action of `H.normalizer.opposite` on `G ⧸ H`, so we can delete the existing instance. (Technically, the existing instance was stated in terms of `H.normalizerᵐᵒᵖ`, but I think `H.normalizer.opposite` is a more natural way to write it).", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "theorem", "smul_coe", ["mul_action", "quotient'"]], ["del", "theorem", "smul_mk", ["mul_action", "quotient'"]]]}]}, {"timestamp": 1649934753, "sha": "3676f11d", "message": "chore(order/complete_lattice): General cleanup (#13323)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_eq_bot", []], ["mod", "theorem", "Inf_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["mod", "theorem", "Inf_eq_top", []], ["mod", "theorem", "Inf_le_iff", []], ["mod", "theorem", "Sup_eq_bot", []], ["mod", "theorem", "Sup_eq_top", []], ["mod", "theorem", "Sup_le", []], ["mod", "theorem", "Sup_le_iff", []], ["mod", "theorem", "inf_infi", []], ["mod", "theorem", "infi_const", []], ["mod", "theorem", "infi_eq_bot", []], ["mod", "theorem", "infi_inf", []], ["mod", "theorem", "infi_infi_eq_left", []], ["mod", "theorem", "infi_infi_eq_right", []], ["mod", "theorem", "infi_le_iff", []], ["mod", "theorem", "infi_sigma", []], ["mod", "theorem", "infi_subtype", []], ["mod", "theorem", "le_Inf", []], ["mod", "theorem", "le_Inf_iff", []], ["mod", "theorem", "le_infi_comp", []], ["mod", "theorem", "monotone_Inf_of_monotone", []], ["mod", "theorem", "monotone_Sup_of_monotone", []], ["mod", "theorem", "supr_comp_le", []], ["mod", "theorem", "supr_const", []], ["mod", "theorem", "supr_eq_top", []], ["mod", "theorem", "supr_sigma", []], ["mod", "theorem", "supr_supr_eq_left", []], ["mod", "theorem", "supr_supr_eq_right", []], ["mod", "theorem", "supr_union", []]]}]}, {"timestamp": 1649934752, "sha": "7bb10813", "message": "feat(category_theory): turn a split mono with cokernel into a biproduct (#13184)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "binary_bicone_of_split_epi_of_kernel", ["category_theory", "limits"]], ["add", "def", "binary_bicone_of_split_mono_of_cokernel", ["category_theory", "limits"]], ["add", "def", "is_bilimit_binary_bicone_of_split_epi_of_kernel", ["category_theory", "limits"]], ["add", "def", "is_bilimit_binary_bicone_of_split_mono_of_cokernel", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["mod", "def", "cokernel_epi_comp", ["category_theory", "limits"]], ["mod", "def", "is_cokernel_epi_comp", ["category_theory", "limits"]], ["add", "theorem", "is_cokernel_epi_comp_desc", ["category_theory", "limits"]], ["mod", "def", "is_kernel_comp_mono", ["category_theory", "limits"]], ["add", "theorem", "is_kernel_comp_mono_lift", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "theorem", "cokernel_cofork_of_cofork_of_π", ["category_theory", "preadditive"]], ["add", "theorem", "cokernel_cofork_of_cofork_π", ["category_theory", "preadditive"]], ["add", "theorem", "is_colimit_cofork_of_cokernel_cofork_desc", ["category_theory", "preadditive"]], ["add", "theorem", "is_limit_fork_of_kernel_fork_lift", ["category_theory", "preadditive"]], ["add", "theorem", "kernel_fork_of_fork_of_ι", ["category_theory", "preadditive"]], ["add", "theorem", "kernel_fork_of_fork_ι", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1649931399, "sha": "2693ab58", "message": "feat(number_theory/legendre_symbol): add directory legendre_symbol and move quadratic_reciprocity.lean into it (#13441)\nIn preparation of adding more code in a structured way, this sets up a new directory `legendre_symbol` below `number_theory` and moves the file `quadratic_reciprocity.lean` there.\nThe imports in `src/number_theory/zsqrtd/gaussian_int.lean` and `archive/imo/imp2008_q3.lean` are changed accordingly.", "changes": [{"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/legendre_symbol/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1649931398, "sha": "eb2780b6", "message": "feat(topology/unit_interval): add lemmas (#13344)\n* also change the statement of `unit_interval.mul_mem`\n* from the sphere eversion project", "changes": [{"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": [["add", "theorem", "div_mem", ["unit_interval"]], ["add", "theorem", "fract_mem", ["unit_interval"]], ["mod", "theorem", "mul_mem", ["unit_interval"]], ["add", "theorem", "one_mem", ["unit_interval"]], ["mod", "def", "symm", ["unit_interval"]], ["add", "theorem", "zero_mem", ["unit_interval"]]]}]}, {"timestamp": 1649924942, "sha": "87f8076f", "message": "chore(data/nat/factorial): tidy (#13436)\nI noticed this file had non-terminal simps, so I tidied it a little whilst removing them.", "changes": [{"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}]}, {"timestamp": 1649924940, "sha": "dac4f18f", "message": "feat(data/mv_polynomial): add support_X_pow (#13435)\nA simple lemma to match the `polynomial` API\nfrom flt-regular", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "support_X_pow", ["mv_polynomial"]]]}]}, {"timestamp": 1649924938, "sha": "1378eabf", "message": "feat(complex/roots_of_unity): extensionality (#13431)\nPrimitive roots are equal iff their arguments are equal. Adds some useful specialisations, too.", "changes": [{"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": [["add", "theorem", "arg_eq_pi_iff", ["is_primitive_root"]], ["add", "theorem", "arg_eq_zero_iff", ["is_primitive_root"]], ["add", "theorem", "arg_ext", ["is_primitive_root"]]]}]}, {"timestamp": 1649917811, "sha": "2249a240", "message": "chore(*): suggestions from the generalisation linter (#13092)\nPrompted by zulip discussion at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/An.20example.20of.20why.20formalization.20is.20useful\nThese are the \"reasonable\" suggestions from @alexjbest's generalisation linter up to `algebra.group.basic`.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "left_inverse_inv", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "not_gt", ["eq"]], ["mod", "theorem", "not_lt", ["eq"]]]}]}, {"timestamp": 1649907809, "sha": "a5654710", "message": "chore(scripts): update nolints.txt (#13438)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1649902027, "sha": "b62626e5", "message": "feat(complex/arg): arg_eq_zero_iff (#13432)", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_eq_zero_iff", ["complex"]]]}]}, {"timestamp": 1649892598, "sha": "0765994d", "message": "chore(order/category/Preorder): reduce imports (#13301)\nBecause `punit_instances` comes at the very end of the algebraic import hierarchy, we were requiring the entire algebraic hierarchy before we could begin compiling the theory of categorical limits.\nThis tweak substantially reduces the import dependencies.", "changes": [{"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/category/preorder.lean", "newPath": "src/category_theory/category/preorder.lean", "changes": [["del", "def", "Preorder_to_Cat", ["category_theory"]]]}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": [["add", "def", "Preorder_to_Cat", []]]}]}, {"timestamp": 1649888136, "sha": "6f401acf", "message": "feat(data/polynomial/*): suggestions from the generalization linter (#13342)", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "is_cau_geo_series", []]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["mod", "theorem", "eval₂_algebra_map_X", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "sum_fin", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["del", "theorem", "sum_fin", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "support_map_subset", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "degree_map", ["polynomial"]], ["mod", "theorem", "leading_coeff_map", ["polynomial"]], ["mod", "theorem", "monic_map_iff", ["polynomial"]], ["mod", "theorem", "nat_degree_map", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["mod", "theorem", "reverse_mul_of_domain", ["polynomial"]], ["mod", "theorem", "trailing_coeff_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}]}, {"timestamp": 1649875395, "sha": "76c969b7", "message": "chore(algebra/polynomial/big_operators): drop some nontrivial assumptions (#13428)", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["mod", "theorem", "nat_degree_multiset_prod", ["polynomial"]], ["mod", "theorem", "nat_degree_multiset_prod_of_monic", ["polynomial"]], ["mod", "theorem", "nat_degree_prod", ["polynomial"]], ["mod", "theorem", "nat_degree_prod_of_monic", ["polynomial"]]]}]}, {"timestamp": 1649871106, "sha": "da13598d", "message": "feat(model_theory/encoding): Bundled encoding of terms (#13226)\nBundles `term.list_encode` and `term.list_decode` into a `computability.encoding`", "changes": [{"oldPath": "src/model_theory/encoding.lean", "newPath": "src/model_theory/encoding.lean", "changes": [["mod", "theorem", "card_le", ["first_order", "language", "term"]], ["mod", "def", "list_encode", ["first_order", "language", "term"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "mk_list_eq_max_mk_omega", ["cardinal"]]]}]}, {"timestamp": 1649867263, "sha": "99138604", "message": "feat(ring_theory/tensor_product): add assoc for tensor product as an algebra homomorphism (#13309)\nBy speeding up a commented out def, this goes from from ~100s to ~7s on my machine .", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "theorem", "assoc_tmul", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1649847402, "sha": "0c3f75bb", "message": "feat(analysis/normed_space/basic): normed division algebras over ℝ are also normed algebras over ℚ (#13384)\nThis results shows that `algebra_rat` respects the norm in ` ℝ`-algebras that respect the norm.\nThe new instance carries no new data, as the norm and algebra structure are already defined elsewhere.\nProbably there is a weaker requirement for compatibility, but I have no idea what it is, and the weakening can come later.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1649847401, "sha": "50ff59ad", "message": "feat(model_theory/skolem, satisfiability): A weak Downward Loewenheim Skolem (#13141)\nDefines a language and structure with built-in Skolem functions for a particular language\nProves a weak form of Downward Loewenheim Skolem: every structure has a small (in the universe sense) elementary substructure\nShows that `T` having a model in any universe implies `T.is_satisfiable`.", "changes": [{"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": []}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": []}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["mod", "theorem", "is_satisfiable", ["first_order", "language", "Theory", "model"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": []}, {"oldPath": null, "newPath": "src/model_theory/skolem.lean", "changes": [["add", "theorem", "exists_small_elementary_substructure", ["first_order", "language"]], ["add", "def", "skolem₁", ["first_order", "language"]], ["add", "theorem", "coe_sort_elementary_skolem₁_reduct", ["first_order", "language", "substructure"]], ["add", "theorem", "skolem₁_reduct_is_elementary", ["first_order", "language", "substructure"]]]}]}, {"timestamp": 1649847400, "sha": "647aa5be", "message": "feat(model_theory/fraisse): Defines ultrahomogeneous structures, fixes Fraïssé limit definition (#12994)\nDefines ultrahomogeneous structures\nFixes the definition of a Fraïssé limit to require ultrahomogeneity\nCompletes the characterization of when a class is the age of a countable structure.", "changes": [{"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": [["add", "theorem", "nonempty", ["first_order", "language", "age"]], ["del", "theorem", "age_fraisse_limit", ["first_order", "language"]], ["add", "theorem", "exists_countable_is_age_of_iff", ["first_order", "language"]], ["add", "theorem", "is_fraisse", ["first_order", "language", "is_fraisse_limit"]], ["add", "structure", "is_fraisse_limit", ["first_order", "language"]], ["add", "theorem", "age_is_fraisse", ["first_order", "language", "is_ultrahomogeneous"]], ["add", "theorem", "amalgamation_age", ["first_order", "language", "is_ultrahomogeneous"]], ["add", "def", "is_ultrahomogeneous", ["first_order", "language"]]]}]}, {"timestamp": 1649840392, "sha": "6f59d777", "message": "feat(order/bounded_order): Basic API for `subtype.order_bot` and `subtype.order_top` (#12904)\nA few `simp` lemmas that were needed for `subtype.order_bot` and `subtype.order_top`.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "coe_eq_bot_iff", ["subtype"]], ["add", "theorem", "coe_eq_top_iff", ["subtype"]], ["add", "theorem", "mk_eq_bot_iff", ["subtype"]], ["add", "theorem", "mk_eq_top_iff", ["subtype"]]]}]}, {"timestamp": 1649835042, "sha": "5b8bb9b4", "message": "feat(category_theory/monoidal): define monoidal structure on the category of monoids in a braided monoidal category (#13122)\nBuilding on the preliminary work from the previous PRs, we finally show that monoids in a braided monoidal category form a monoidal category.", "changes": [{"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": [["add", "theorem", "Mon_tensor_mul_assoc", ["Mon_"]], ["add", "theorem", "Mon_tensor_mul_one", ["Mon_"]], ["add", "theorem", "Mon_tensor_one_mul", ["Mon_"]], ["add", "def", "iso_of_iso", ["Mon_"]], ["add", "theorem", "mul_associator", ["Mon_"]], ["add", "theorem", "mul_left_unitor", ["Mon_"]], ["add", "theorem", "mul_right_unitor", ["Mon_"]], ["add", "theorem", "one_associator", ["Mon_"]], ["add", "theorem", "one_left_unitor", ["Mon_"]], ["add", "theorem", "one_right_unitor", ["Mon_"]]]}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}]}, {"timestamp": 1649823244, "sha": "1de6ce93", "message": "chore(scripts): update nolints.txt (#13408)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1649823243, "sha": "b0bd7716", "message": "fix(combinatorics/simple_graph/connectivity): correctly generalized variables (#13405)", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": []}]}, {"timestamp": 1649823242, "sha": "917fc964", "message": "refactor(set_theory/cofinality): Normalize names (#13400)\nWe rename lemmas of the form `is_regular (foo x)` to `is_regular_foo` instead of `foo_is_regular`.", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["del", "theorem", "aleph'_succ_is_regular", ["cardinal"]], ["del", "theorem", "aleph_succ_is_regular", ["cardinal"]], ["del", "theorem", "cof_is_regular", ["cardinal"]], ["add", "theorem", "is_regular_aleph'_succ", ["cardinal"]], ["add", "theorem", "is_regular_aleph_succ", ["cardinal"]], ["add", "theorem", "is_regular_cof", ["cardinal"]], ["add", "theorem", "is_regular_omega", ["cardinal"]], ["add", "theorem", "is_regular_succ", ["cardinal"]], ["del", "theorem", "omega_is_regular", ["cardinal"]], ["del", "theorem", "succ_is_regular", ["cardinal"]]]}]}, {"timestamp": 1649817494, "sha": "ac7a356a", "message": "chore(set_theory/*): Fix lint (#13399)\nAdd missing docstrings and `inhabited` instances or a `nolint` when an `inhabited` instance isn't reasonable.", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["mod", "def", "left_moves", ["pgame"]], ["mod", "def", "right_moves", ["pgame"]]]}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["mod", "def", "type", ["pSet"]]]}]}, {"timestamp": 1649817493, "sha": "8c9ee310", "message": "feat(order/conditionally_complete_lattice): Add `le_cSup_iff` (#13321)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_le_iff", []], ["add", "theorem", "le_cSup_iff'", []], ["add", "theorem", "le_cSup_iff", []]]}]}, {"timestamp": 1649810251, "sha": "fb948808", "message": "refactor(category_theory/shift): tighten scope of local attribute [reducible] (#13335)\nIn all the files dealing with shifts on categories, we have a sprinkling of `local attribute [reducible]`, without which we get somewhat mysterious errors.\nHowever with them, we produce some very fragile proof states (recently I was upset to see that shifting by `(0 : A)` and shifting by the tensor unit in `discrete A` were not definitionally commuting...).\nI've been attempting to refactor this part of the library so we just never need to use `local attribute [reducible]`, in the hope of making these problems go away.\nHaving failed so far, this PR simply tightens the scopes of these local attributes as narrowly as possible (or in cases removes them entirely), so it is clearer exactly what is relying on them to work.", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": []}]}, {"timestamp": 1649807540, "sha": "f496ef4c", "message": "feat(computability/{language/regular_expressions): Map along a function (#13197)\nDefine `language.map` and `regular_expression.map`.", "changes": [{"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": [["add", "def", "map", ["language"]], ["add", "theorem", "map_id", ["language"]], ["add", "theorem", "map_map", ["language"]], ["add", "theorem", "map_star", ["language"]]]}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": [["add", "def", "map", ["regular_expression"]], ["add", "theorem", "map_id", ["regular_expression"]], ["add", "theorem", "map_map", ["regular_expression"]], ["mod", "def", "matches", ["regular_expression"]], ["add", "theorem", "matches_map", ["regular_expression"]]]}]}, {"timestamp": 1649804449, "sha": "7ece83ed", "message": "feat(topology/homotopy): Add definition of contractible spaces (#12731)", "changes": [{"oldPath": null, "newPath": "src/topology/homotopy/contractible.lean", "changes": [["add", "theorem", "comp_left", ["continuous_map", "nullhomotopic"]], ["add", "theorem", "comp_right", ["continuous_map", "nullhomotopic"]], ["add", "def", "nullhomotopic", ["continuous_map"]], ["add", "theorem", "nullhomotopic_of_constant", ["continuous_map"]], ["add", "theorem", "contractible_iff_id_nullhomotopic", []], ["add", "theorem", "id_nullhomotopic", []]]}]}, {"timestamp": 1649801557, "sha": "94a52c43", "message": "feat(category_theory/monoidal): prove that in a braided monoidal category unitors and associators are monoidal natural transformations (#13121)\nThis PR contains proofs of lemmas that are used in the stacked PR to define a monoidal structure on the category of monoids in a braided monoidal category. The lemmas can be summarised by saying that in a braided monoidal category unitors and associators are monoidal natural transformations.\nNote that for these statements to make sense we would need to define monoidal functors that are sources and targets of these monoidal natural transformations. For example, the morphisms `(α_ X Y Z).hom` are the components of a monoidal natural transformation\n```\n(tensor.prod (𝟭 C)) ⊗⋙ tensor ⟶ Α_ ⊗⋙ ((𝟭 C).prod tensor) ⊗⋙ tensor\n```\nwhere `Α_ : monoidal_functor ((C × C) × C) (C × (C × C))` is the associator functor given by `λ X, (X.1.1, (X.1.2, X.2))` on objects. I didn't define the functor `Α_`. (The easiest way would be to build it up using `prod'` we have already defined from `fst` and `snd`, which we would need to define as monoidal functors.) Instead, I stated and proved the commutative diagram that expresses the monoidality of the above transformation. Ditto for unitors. Please let me know if you'd like me to define all the required functors and monoidal natural transformations. The monoidal natural transformations themselves are not used in the proof that the category of monoids in a braided monoidal category is monoidal and only provide meaningful names to the lemmas that are used in the proof.", "changes": [{"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": [["add", "theorem", "associator_monoidal", ["category_theory"]], ["add", "theorem", "associator_monoidal_aux", ["category_theory"]], ["add", "theorem", "left_unitor_monoidal", ["category_theory"]], ["add", "theorem", "right_unitor_monoidal", ["category_theory"]]]}]}, {"timestamp": 1649796825, "sha": "78ea75a0", "message": "feat(order/filter/cofinite): add lemmas, golf (#13394)\n* add `filter.comap_le_cofinite`,\n `function.injective.comap_cofinite_eq`, and\n `filter.has_basis.coprod`;\n* rename `at_top_le_cofinite` to `filter.at_top_le_cofinite`;\n* golf `filter.coprod_cofinite` and `filter.Coprod_cofinite`, move\n them below `filter.comap_cofinite_le`;", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "coprod", ["filter", "has_basis"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["del", "theorem", "at_top_le_cofinite", []], ["mod", "theorem", "Coprod_cofinite", ["filter"]], ["add", "theorem", "at_top_le_cofinite", ["filter"]], ["add", "theorem", "comap_cofinite_le", ["filter"]], ["mod", "theorem", "coprod_cofinite", ["filter"]], ["mod", "theorem", "eventually_cofinite_ne", ["filter"]], ["mod", "theorem", "le_cofinite_iff_compl_singleton_mem", ["filter"]], ["add", "theorem", "le_cofinite_iff_eventually_ne", ["filter"]], ["mod", "theorem", "exists_forall_ge", ["filter", "tendsto"]], ["mod", "theorem", "exists_forall_le", ["filter", "tendsto"]], ["mod", "theorem", "exists_within_forall_ge", ["filter", "tendsto"]], ["mod", "theorem", "eventually_cofinite_nmem", ["finset"]], ["add", "theorem", "comap_cofinite_eq", ["function", "injective"]], ["mod", "theorem", "tendsto_cofinite", ["function", "injective"]], ["mod", "theorem", "compl_mem_cofinite", ["set", "finite"]], ["mod", "theorem", "eventually_cofinite_nmem", ["set", "finite"]], ["mod", "theorem", "infinite_iff_frequently_cofinite", ["set"]]]}]}, {"timestamp": 1649794134, "sha": "da4ec7e1", "message": "feat(ring_theory/valuation/valuation_subring): Valuation subrings of a field (#12741)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/valuation/valuation_subring.lean", "changes": [["add", "theorem", "algebra_map_apply", ["valuation_subring"]], ["add", "theorem", "ext", ["valuation_subring"]], ["add", "theorem", "le_top", ["valuation_subring"]], ["add", "theorem", "mem_carrier", ["valuation_subring"]], ["add", "theorem", "mem_of_valuation_le_one", ["valuation_subring"]], ["add", "theorem", "mem_or_inv_mem", ["valuation_subring"]], ["add", "theorem", "mem_to_subring", ["valuation_subring"]], ["add", "theorem", "mem_top", ["valuation_subring"]], ["add", "def", "valuation", ["valuation_subring"]], ["add", "theorem", "valuation_eq_iff", ["valuation_subring"]], ["add", "theorem", "valuation_le_iff", ["valuation_subring"]], ["add", "theorem", "valuation_le_one", ["valuation_subring"]], ["add", "theorem", "valuation_le_one_iff", ["valuation_subring"]], ["add", "theorem", "valuation_surjective", ["valuation_subring"]], ["add", "structure", "valuation_subring", []]]}]}, {"timestamp": 1649788113, "sha": "e72f275d", "message": "feat(number_theory/qudratic_reciprocity): change type of `a` in API lemmas to `int` (#13393)\nThis is step 2 in the overhaul of number_theory/qudratic_reciprocity.\nThe only changes are that the argument `a` is now of type `int` rather than `nat` in a bunch of statements.\nThis is more natural, since the corresponding (now second) argument of `legendre_symnbol` is of type `int`; it therefore makes the API lemmas more easily useable.", "changes": [{"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["mod", "theorem", "gauss_lemma", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_one_iff", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_pow", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_zero_iff", ["zmod"]]]}]}, {"timestamp": 1649788112, "sha": "3bbb847e", "message": "chore(*): remove instance arguments that are inferrable from earlier (#13386)\nSome lemmas have typeclass arguments that are in fact inferrable from the earlier ones, at least when everything is Prop valued this is unecessary so we clean up a few cases as they likely stem from typos or library changes. \n- `src/field_theory/finiteness.lean` it wasn't known at the time (#7644) that a division ring was noetherian, but now it is (#7661)\n- `src/category_theory/simple.lean` any abelian category has all cokernels so no need to assume it seperately\n- `src/analysis/convex/extreme.lean` assumed `linear_ordered_field` and `no_smul_zero_divisors` which is unnecessary, we take this as a sign that this and a couple of other convexity results should be generalized to densely ordered linear ordered rings (of which there are examples that are not fields) cc @YaelDillies", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "left_mem_open_segment_iff", []], ["mod", "theorem", "right_mem_open_segment_iff", []]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": [["mod", "theorem", "mem_extreme_points_iff_forall_segment", []]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1649788110, "sha": "116ac710", "message": "feat(analysis/normed_space/exponential): exponentials of negations, scalar actions, and sums (#13036)\nThe new lemmas are:\n* `exp_invertible_of_mem_ball`\n* `exp_invertible`\n* `is_unit_exp_of_mem_ball`\n* `is_unit_exp`\n* `ring.inverse_exp`\n* `exp_neg_of_mem_ball`\n* `exp_neg`\n* `exp_sum_of_commute`\n* `exp_sum`\n* `exp_nsmul`\n* `exp_zsmul`\nI don't know enough about the radius of convergence of `exp` to know if `exp_nsmul` holds more generally under extra conditions.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "edist_add_left", []], ["add", "theorem", "edist_add_right", []], ["add", "theorem", "edist_neg_neg", []], ["add", "theorem", "edist_sub_left", []], ["add", "theorem", "edist_sub_right", []]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "exp", ["commute"]], ["mod", "theorem", "exp_add_of_commute", []], ["add", "theorem", "exp_neg", []], ["add", "theorem", "exp_neg_of_mem_ball", []], ["add", "theorem", "exp_nsmul", []], ["add", "theorem", "exp_sum", []], ["add", "theorem", "exp_sum_of_commute", []], ["mod", "theorem", "exp_zero", []], ["add", "theorem", "exp_zsmul", []], ["add", "theorem", "inv_of_exp", []], ["add", "theorem", "inv_of_exp_of_mem_ball", []], ["add", "theorem", "is_unit_exp", []], ["add", "theorem", "is_unit_exp_of_mem_ball", []], ["add", "theorem", "inverse_exp", ["ring"]]]}]}, {"timestamp": 1649784091, "sha": "949021d6", "message": "feat(ring_theory/algebraic): Rational numbers are algebraic (#13367)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_int", []], ["add", "theorem", "is_algebraic_rat", []]]}]}, {"timestamp": 1649784070, "sha": "c994ab3f", "message": "feat(category_theory/monoidal): define a monoidal structure on the tensor product functor of a braided monoidal category (#13150)\nGiven a braided monoidal category `C`, equip its tensor product functor, viewed as a functor from `C × C` to `C` with a strength that turns it into a monoidal functor.\nSee #13033 for a discussion of the motivation of this definition.\n(This PR replaces #13034 which was accidentally closed.)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": [["add", "theorem", "left_unitor_inv_braiding", ["category_theory"]], ["add", "theorem", "right_unitor_inv_braiding", ["category_theory"]], ["add", "theorem", "tensor_associativity", ["category_theory"]], ["add", "theorem", "tensor_associativity_aux", ["category_theory"]], ["add", "theorem", "tensor_left_unitality", ["category_theory"]], ["add", "def", "tensor_monoidal", ["category_theory"]], ["add", "theorem", "tensor_right_unitality", ["category_theory"]], ["add", "def", "tensor_μ", ["category_theory"]], ["add", "theorem", "tensor_μ_def₁", ["category_theory"]], ["add", "theorem", "tensor_μ_def₂", ["category_theory"]], ["add", "theorem", "tensor_μ_natural", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["mod", "def", "tensor", ["category_theory", "monoidal_category"]]]}]}, {"timestamp": 1649777598, "sha": "4c0a2744", "message": "doc(model_theory/order): typo in docstrings (#13390)", "changes": [{"oldPath": "src/model_theory/order.lean", "newPath": "src/model_theory/order.lean", "changes": []}]}, {"timestamp": 1649777596, "sha": "0c8b8084", "message": "fix(measure_theory/function/lp_space): fix an instance diamond in `measure_theory.Lp.has_edist` (#13388)\nThis also changes the definition of `edist` to something definitionally nicer", "changes": [{"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}]}, {"timestamp": 1649777595, "sha": "c21561a0", "message": "feat(algebra/direct_sum): Reindexing direct sums (#13076)\nLemmas to reindex direct sums, as well as to rewrite direct sums over an option or sigma type.", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": [["add", "def", "equiv_congr_left", ["direct_sum"]], ["add", "theorem", "equiv_congr_left_apply", ["direct_sum"]], ["add", "theorem", "sigma_curry_apply", ["direct_sum"]], ["add", "theorem", "sigma_uncurry_apply", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "def", "lequiv_congr_left", ["direct_sum"]], ["add", "theorem", "lequiv_congr_left_apply", ["direct_sum"]], ["add", "theorem", "sigma_lcurry_apply", ["direct_sum"]], ["add", "theorem", "sigma_luncurry_apply", ["direct_sum"]]]}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["add", "def", "comap_domain'[Π", ["dfinsupp"]], ["add", "theorem", "comap_domain'_add", ["dfinsupp"]], ["add", "theorem", "comap_domain'_apply", ["dfinsupp"]], ["add", "theorem", "comap_domain'_smul", ["dfinsupp"]], ["add", "theorem", "comap_domain'_zero", ["dfinsupp"]], ["add", "theorem", "comap_domain_add", ["dfinsupp"]], ["add", "theorem", "comap_domain_apply", ["dfinsupp"]], ["add", "theorem", "comap_domain_smul", ["dfinsupp"]], ["add", "theorem", "comap_domain_zero", ["dfinsupp"]], ["add", "def", "equiv_congr_left", ["dfinsupp"]], ["add", "theorem", "equiv_prod_dfinsupp_add", ["dfinsupp"]], ["add", "theorem", "equiv_prod_dfinsupp_smul", ["dfinsupp"]], ["add", "def", "extend_with", ["dfinsupp"]], ["add", "theorem", "extend_with_none", ["dfinsupp"]], ["add", "theorem", "extend_with_some", ["dfinsupp"]], ["add", "theorem", "sigma_curry_add", ["dfinsupp"]], ["add", "theorem", "sigma_curry_apply", ["dfinsupp"]], ["add", "theorem", "sigma_curry_smul", ["dfinsupp"]], ["add", "theorem", "sigma_curry_zero", ["dfinsupp"]], ["add", "theorem", "sigma_uncurry_add", ["dfinsupp"]], ["add", "theorem", "sigma_uncurry_apply", ["dfinsupp"]], ["add", "theorem", "sigma_uncurry_smul", ["dfinsupp"]], ["add", "theorem", "sigma_uncurry_zero", ["dfinsupp"]]]}]}, {"timestamp": 1649770092, "sha": "745099b8", "message": "chore(*/parity): Generalize lemmas and clarify names (#13268)\nGeneralizations", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "neg_one_sq", []], ["mod", "theorem", "neg_sq", []]]}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "tsub_add_tsub_comm", []]]}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["add", "theorem", "neg_one_pow", ["even"]], ["add", "theorem", "neg_one_zpow", ["even"]], ["add", "theorem", "neg_pow", ["even"]], ["add", "theorem", "neg_zpow", ["even"]], ["mod", "theorem", "sub_odd", ["even"]], ["add", "theorem", "tsub_even", ["even"]], ["del", "theorem", "zpow_neg", ["even"]], ["del", "theorem", "zpow_nonneg", ["even"]], ["add", "theorem", "even_iff_exists_bit0", []], ["mod", "theorem", "map", ["is_square"]], ["mod", "theorem", "is_square_sq", []], ["mod", "theorem", "neg", ["odd"]], ["add", "theorem", "neg_one_pow", ["odd"]], ["add", "theorem", "neg_one_zpow", ["odd"]], ["add", "theorem", "neg_pow", ["odd"]], ["add", "theorem", "neg_zpow", ["odd"]], ["mod", "theorem", "sub_even", ["odd"]], ["mod", "theorem", "sub_odd", ["odd"]], ["del", "theorem", "zpow_nonneg", ["odd"]], ["mod", "theorem", "odd_bit1", []], ["add", "theorem", "odd_iff_exists_bit1", []]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["del", "theorem", "sub_even", ["nat", "even"]], ["del", "theorem", "neg_one_pow_eq_one_iff_even", ["nat"]], ["del", "theorem", "neg_one_pow_of_even", ["nat"]], ["del", "theorem", "neg_one_pow_of_odd", ["nat"]], ["del", "theorem", "neg_one_sq", ["nat"]], ["add", "theorem", "neg_one_pow_eq_one_iff_even", []]]}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}]}, {"timestamp": 1649767008, "sha": "4b45a714", "message": "feat(counterexamples/pseudoelement): add counterexample to uniqueness in category_theory.abelian.pseudoelement.pseudo_pullback (#13387)\nBorceux claims that the pseudoelement constructed in `category_theory.abelian.pseudoelement.pseudo_pullback` is unique. We show here that this claim is false.", "changes": [{"oldPath": null, "newPath": "counterexamples/pseudoelement.lean", "changes": [["add", "theorem", "exist_ne_and_fst_eq_fst_and_snd_eq_snd", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "fst_mk_x_eq_fst_mk_y", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "fst_x_pseudo_eq_fst_y", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "mk_x_ne_mk_y", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "snd_mk_x_eq_snd_mk_y", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "snd_x_pseudo_eq_snd_y", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "x", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "x_not_pseudo_eq", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "y", ["category_theory", "abelian", "pseudoelement"]]]}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": [["add", "theorem", "eq_range_of_pseudoequal", ["category_theory", "abelian", "pseudoelement", "Module"]]]}]}, {"timestamp": 1649767007, "sha": "73ec5b27", "message": "chore(category_theory/closed/monoidal): correct error in doc string (#13385)\nSorry, should have done this immediately when @b-mehta pointed out my mistake.", "changes": [{"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": []}]}, {"timestamp": 1649767006, "sha": "ef8e256d", "message": "feat(number_theory/cyclotomic): alg-closed fields are cyclotomic extensions over themselves (#13366)", "changes": [{"oldPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "newPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["add", "theorem", "is_cyclotomic_extension", ["is_alg_closed"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "is_root_cyclotomic", ["is_primitive_root"]], ["del", "theorem", "is_root_cyclotomic", ["polynomial"]]]}]}, {"timestamp": 1649764585, "sha": "5534e246", "message": "chore(category_theory/preadditive/biproducts): Speed up `biprod.column_nonzero_of_iso` (#13383)\nFrom 76s down to 2s. The decidability synthesis in `by_contradiction` is stupidly expensive.", "changes": [{"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}]}, {"timestamp": 1649764584, "sha": "4bcc5325", "message": "refactor(control/fold): don't use is_monoid_hom (#13350)", "changes": [{"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": [["mod", "def", "of_free_monoid", ["monoid", "foldl"]], ["mod", "def", "of_free_monoid", ["monoid", "foldr"]], ["mod", "def", "of_free_monoid", ["monoid", "mfoldl"]], ["mod", "def", "of_free_monoid", ["monoid", "mfoldr"]], ["del", "theorem", "fold_foldl", ["traversable"]], ["del", "theorem", "fold_foldr", ["traversable"]], ["del", "theorem", "fold_mfoldl", ["traversable"]], ["del", "theorem", "fold_mfoldr", ["traversable"]], ["del", "theorem", "is_monoid_hom", ["traversable", "free", "map"]], ["mod", "def", "map", ["traversable", "free"]], ["mod", "def", "map_fold", ["traversable"]], ["del", "theorem", "unop_of_free_monoid", ["traversable", "mfoldl"]]]}]}, {"timestamp": 1649760032, "sha": "8b27c457", "message": "feat(order/filter/pointwise): Missing pointwise operations (#13170)\nDefine inversion/negation, division/subtraction, scalar multiplication/addition, scaling/translation, scalar subtraction of filters using the new `filter.map₂`. Golf the existing API.", "changes": [{"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "bot_div", ["filter"]], ["add", "theorem", "bot_mul", ["filter"]], ["add", "theorem", "bot_smul", ["filter"]], ["add", "theorem", "bot_vsub", ["filter"]], ["add", "theorem", "div_bot", ["filter"]], ["add", "theorem", "div_eq_bot_iff", ["filter"]], ["add", "theorem", "div_mem_div", ["filter"]], ["add", "theorem", "div_ne_bot_iff", ["filter"]], ["add", "theorem", "eventually_one", ["filter"]], ["add", "theorem", "inv_mem_inv", ["filter"]], ["add", "theorem", "le_mul_iff", ["filter"]], ["add", "theorem", "le_one_iff", ["filter"]], ["add", "theorem", "le_smul_iff", ["filter"]], ["add", "theorem", "le_vsub_iff", ["filter"]], ["add", "theorem", "map_inv'", ["filter"]], ["add", "theorem", "map_smul", ["filter"]], ["add", "theorem", "map₂_div", ["filter"]], ["add", "theorem", "map₂_mul", ["filter"]], ["add", "theorem", "map₂_smul", ["filter"]], ["add", "theorem", "map₂_vsub", ["filter"]], ["add", "theorem", "mem_div", ["filter"]], ["add", "theorem", "mem_inv", ["filter"]], ["del", "theorem", "mem_mul", ["filter"]], ["add", "theorem", "mem_mul_iff", ["filter"]], ["mod", "theorem", "mem_one", ["filter"]], ["add", "theorem", "mem_smul", ["filter"]], ["add", "theorem", "mem_smul_filter", ["filter"]], ["add", "theorem", "mem_vsub", ["filter"]], ["add", "theorem", "mul_bot", ["filter"]], ["add", "theorem", "mul_eq_bot_iff", ["filter"]], ["mod", "theorem", "mul_mem_mul", ["filter"]], ["add", "theorem", "mul_ne_bot_iff", ["filter"]], ["add", "theorem", "div", ["filter", "ne_bot"]], ["add", "theorem", "inv", ["filter", "ne_bot"]], ["mod", "theorem", "mul", ["filter", "ne_bot"]], ["add", "theorem", "smul", ["filter", "ne_bot"]], ["add", "theorem", "smul_filter", ["filter", "ne_bot"]], ["add", "theorem", "vsub", ["filter", "ne_bot"]], ["add", "theorem", "ne_bot_inv_iff", ["filter"]], ["mod", "theorem", "one_mem_one", ["filter"]], ["add", "theorem", "principal_one", ["filter"]], ["add", "theorem", "pure_one", ["filter"]], ["add", "theorem", "smul_bot", ["filter"]], ["add", "theorem", "smul_eq_bot_iff", ["filter"]], ["add", "theorem", "smul_filter_bot", ["filter"]], ["add", "theorem", "smul_filter_eq_bot_iff", ["filter"]], ["add", "theorem", "smul_filter_le_smul_filter", ["filter"]], ["add", "theorem", "smul_filter_ne_bot_iff", ["filter"]], ["add", "theorem", "smul_le_smul", ["filter"]], ["add", "theorem", "smul_le_smul_left", ["filter"]], ["add", "theorem", "smul_le_smul_right", ["filter"]], ["add", "theorem", "smul_mem_smul", ["filter"]], ["add", "theorem", "smul_ne_bot_iff", ["filter"]], ["add", "theorem", "smul_set_mem_smul_filter", ["filter"]], ["add", "theorem", "div_div", ["filter", "tendsto"]], ["add", "theorem", "inv_inv", ["filter", "tendsto"]], ["add", "theorem", "tendsto_one", ["filter"]], ["add", "theorem", "vsub_bot", ["filter"]], ["add", "theorem", "vsub_eq_bot_iff", ["filter"]], ["add", "theorem", "vsub_le_vsub", ["filter"]], ["add", "theorem", "vsub_le_vsub_left", ["filter"]], ["add", "theorem", "vsub_le_vsub_right", ["filter"]], ["add", "theorem", "vsub_mem_vsub", ["filter"]], ["add", "theorem", "vsub_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["del", "theorem", "map_neg", ["filter"]], ["add", "theorem", "map_neg_eq_comap_neg", ["filter"]]]}]}, {"timestamp": 1649753184, "sha": "99849606", "message": "fix(counterexamples): typo in module docstring (#13378)", "changes": [{"oldPath": "counterexamples/homogeneous_prime_not_prime.lean", "newPath": "counterexamples/homogeneous_prime_not_prime.lean", "changes": []}]}, {"timestamp": 1649753183, "sha": "36bafae8", "message": "feat(topology/bornology/basic): review (#13374)\n* add lemmas;\n* upgrade some implications to `iff`s.", "changes": [{"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": [["mod", "theorem", "subset", ["bornology", "is_bounded"]], ["mod", "theorem", "union", ["bornology", "is_bounded"]], ["mod", "def", "is_bounded", ["bornology"]], ["mod", "theorem", "is_bounded_Union", ["bornology"]], ["mod", "theorem", "is_bounded_bUnion", ["bornology"]], ["add", "theorem", "is_bounded_bUnion_finset", ["bornology"]], ["mod", "theorem", "is_bounded_sUnion", ["bornology"]], ["mod", "theorem", "is_bounded_singleton", ["bornology"]], ["add", "theorem", "is_bounded_union", ["bornology"]], ["add", "theorem", "inter", ["bornology", "is_cobounded"]], ["add", "theorem", "superset", ["bornology", "is_cobounded"]], ["add", "theorem", "is_cobounded_Inter", ["bornology"]], ["add", "theorem", "is_cobounded_bInter", ["bornology"]], ["add", "theorem", "is_cobounded_bInter_finset", ["bornology"]], ["add", "theorem", "is_cobounded_inter", ["bornology"]], ["add", "theorem", "is_cobounded_sInter", ["bornology"]], ["add", "theorem", "is_cobounded_univ", ["bornology"]], ["mod", "theorem", "sUnion_bounded_univ", ["bornology"]]]}]}, {"timestamp": 1649753183, "sha": "d065fd4a", "message": "feat(ring_theory/ideal): generalize `x mod I ∈ J mod I ↔ x ∈ J` (#13358)\nWe already had a lemma like this assuming `I ≤ J`, and we can drop the assumption if we instead change the RHS to `x ∈ J \\sup I`.\nThis also golfs the proof of the original `mem_quotient_iff_mem`.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "mem_quotient_iff_mem", ["ideal"]], ["add", "theorem", "mem_quotient_iff_mem_sup", ["ideal"]]]}]}, {"timestamp": 1649753182, "sha": "c8835190", "message": "feat(ring_theory/unique_factorization_domain): `factors x = normalized_factors x` (#13356)\nIf the group of units is trivial, an arbitrary choice of factors is exactly the unique set of normalized factors.\nI made this a `simp` lemma in this direction because `normalized_factors` has a stronger specification than `factors`. I believe currently we actually know less about `normalized_factors` than `factors`, so if it proves too inconvenient I can also remove the `@[simp]`.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "factors_eq_normalized_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1649753180, "sha": "85588f87", "message": "feat(data/multiset): lemmas on intersecting a multiset with `repeat x n` (#13355)\nIntersecting a multiset `s` with `repeat x n` gives `repeat x (min n (s.count x))`.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "inter_repeat", ["multiset"]], ["add", "theorem", "repeat_inter", ["multiset"]]]}]}, {"timestamp": 1649753179, "sha": "f7fe7dd0", "message": "refactor(ring_theory/free_comm_ring): don't use is_ring_hom (#13352)", "changes": [{"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["del", "def", "of'", ["free_ring"]]]}]}, {"timestamp": 1649753179, "sha": "fd53ce0f", "message": "feat(order/filter/at_top_bot): add more `disjoint` lemmas (#13351)", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "Iic_mem_at_bot", ["filter"]], ["add", "theorem", "disjoint_at_bot_at_top", ["filter"]], ["add", "theorem", "disjoint_at_bot_principal_Ici", ["filter"]], ["add", "theorem", "disjoint_at_bot_principal_Ioi", ["filter"]], ["add", "theorem", "disjoint_at_top_at_bot", ["filter"]], ["add", "theorem", "disjoint_at_top_principal_Iic", ["filter"]], ["add", "theorem", "disjoint_at_top_principal_Iio", ["filter"]]]}]}, {"timestamp": 1649753178, "sha": "708e2dee", "message": "chore(group_theory/free_abelian_group): remove is_add_monoid_hom (#13349)", "changes": [{"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["del", "theorem", "is_add_group_hom_lift'", ["free_abelian_group"]], ["del", "theorem", "is_add_group_hom_seq", ["free_abelian_group"]], ["add", "def", "seq_add_group_hom", ["free_abelian_group"]]]}]}, {"timestamp": 1649753177, "sha": "333e4be6", "message": "feat(algebra/group/basic|topology/connected): add two lemmas (#13345)\n* from the sphere eversion project", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "mul_div_left_comm", []]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "is_connected_univ", []]]}]}, {"timestamp": 1649753176, "sha": "56d63993", "message": "chore(set_theory/cardinal): Golf `mk_le_mk_mul_of_mk_preimage_le` (#13329)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1649753175, "sha": "670735fc", "message": "feat(model_theory/order): The theory of dense linear orders without endpoints (#13253)\nDefines the theory of dense linear orders without endpoints", "changes": [{"oldPath": "src/model_theory/order.lean", "newPath": "src/model_theory/order.lean", "changes": [["mod", "def", "is_ordered_structure", ["first_order", "language"]], ["add", "theorem", "is_ordered_structure_iff", ["first_order", "language"]], ["add", "theorem", "order_Lhom_le_symb", ["first_order", "language"]], ["add", "theorem", "realize_densely_ordered", ["first_order", "language"]], ["add", "theorem", "realize_densely_ordered_iff", ["first_order", "language"]], ["add", "theorem", "realize_no_bot_order", ["first_order", "language"]], ["add", "theorem", "realize_no_bot_order_iff", ["first_order", "language"]], ["add", "theorem", "realize_no_top_order", ["first_order", "language"]], ["add", "theorem", "realize_no_top_order_iff", ["first_order", "language"]], ["add", "theorem", "rel_map_le_symb", ["first_order", "language"]], ["add", "def", "lt", ["first_order", "language", "term"]], ["add", "theorem", "realize_le", ["first_order", "language", "term"]], ["add", "theorem", "realize_lt", ["first_order", "language", "term"]]]}]}, {"timestamp": 1649753174, "sha": "34853a95", "message": "feat(topology/algebra/algebra): define the topological subalgebra generated by an element (#13093)\nThis defines the topological subalgebra generated by a single element `x : A` of an algebra `A` as the topological closure of `algebra.adjoin R {x}`, and show it is commutative.\nI called it `algebra.elemental_algebra`; if someone knows if this actually has a name in the literature, or just has a better idea for the name, let me know!", "changes": [{"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "self_mem_adjoin_singleton", ["algebra"]]]}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": [["add", "def", "elemental_algebra", ["algebra"]], ["add", "theorem", "self_mem_elemental_algebra", ["algebra"]], ["mod", "def", "comm_ring_topological_closure", ["subalgebra"]]]}]}, {"timestamp": 1649753172, "sha": "ed919b61", "message": "feat(algebra/algebraic_card): Cardinality of algebraic numbers (#12869)\nWe prove the following result: the cardinality of algebraic numbers under an R-algebra is at most `# polynomial R * ω`.", "changes": [{"oldPath": null, "newPath": "src/algebra/algebraic_card.lean", "changes": [["add", "theorem", "cardinal_mk_le_max", ["algebraic"]], ["add", "theorem", "cardinal_mk_le_mul", ["algebraic"]], ["add", "theorem", "cardinal_mk_le_of_infinite", ["algebraic"]], ["add", "theorem", "cardinal_mk_lift_le_max", ["algebraic"]], ["add", "theorem", "cardinal_mk_lift_le_mul", ["algebraic"]], ["add", "theorem", "cardinal_mk_lift_le_of_infinite", ["algebraic"]], ["add", "theorem", "cardinal_mk_of_encodable_of_char_zero", ["algebraic"]], ["add", "theorem", "countable_of_encodable", ["algebraic"]], ["add", "theorem", "omega_le_cardinal_mk_of_char_zero", ["algebraic"]]]}]}, {"timestamp": 1649753171, "sha": "6bc2bd6e", "message": "feat(algebraic_geometry/projective_spectrum): Proj as a locally ringed space (#12773)\nThis pr is about proving that Proj with its structure sheaf is a locally ringed space", "changes": [{"oldPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "newPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "changes": [["add", "def", "stalk_iso'", ["algebraic_geometry", "Proj"]], ["add", "def", "to_LocallyRingedSpace", ["algebraic_geometry", "Proj"]], ["add", "def", "to_SheafedSpace", ["algebraic_geometry", "Proj"]], ["add", "theorem", "germ_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["add", "theorem", "mem_basic_open", ["algebraic_geometry", "homogeneous_localization"]], ["add", "def", "homogeneous_localization_to_stalk", ["algebraic_geometry"]], ["add", "def", "open_to_localization", ["algebraic_geometry"]], ["add", "theorem", "res_apply", ["algebraic_geometry"]], ["add", "def", "section_in_basic_open", ["algebraic_geometry"]], ["add", "def", "stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["add", "theorem", "stalk_to_fiber_ring_hom_germ'", ["algebraic_geometry"]], ["add", "theorem", "stalk_to_fiber_ring_hom_germ", ["algebraic_geometry"]]]}]}, {"timestamp": 1649753170, "sha": "72e1a9ee", "message": "feat(ring_theory/valuation/valuation_ring): Valuation rings and their associated valuation. (#12719)\nThis PR defines a class `valuation_ring`, stating that an integral domain is a valuation ring.\nWe also show that valuation rings induce valuations on their fraction fields, that valuation rings are local, and that their lattice of ideals is totally ordered.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/valuation/valuation_ring.lean", "changes": [["add", "theorem", "coe_equiv_integer_apply", ["valuation_ring"]], ["add", "theorem", "mem_integer_iff", ["valuation_ring"]], ["add", "theorem", "of_integers", ["valuation_ring"]], ["add", "theorem", "range_algebra_map_eq", ["valuation_ring"]], ["add", "def", "valuation", ["valuation_ring"]], ["add", "def", "value_group", ["valuation_ring"]]]}, {"oldPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "newPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "changes": [["add", "theorem", "discrete_valuation_ring", ["witt_vector"]]]}]}, {"timestamp": 1649750103, "sha": "b889567e", "message": "feat(data/complex/basic): add a few lemmas (#13354)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "I_mul_im", ["complex"]], ["add", "theorem", "I_mul_re", ["complex"]], ["add", "theorem", "abs_im_lt_abs", ["complex"]], ["add", "theorem", "abs_re_lt_abs", ["complex"]], ["add", "theorem", "mul_I_im", ["complex"]], ["add", "theorem", "mul_I_re", ["complex"]]]}]}, {"timestamp": 1649743070, "sha": "0783742a", "message": "chore(*): more assumptions to lemmas that are removable (#13364)\nThis time I look at assumptions that are actually provable by simp from the earlier assumptions (fortunately there are only a couple of these), and one more from the review of #13316 that was slightly too nontrivial to be found automatically.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "rpow_lt_one", ["nnreal"]]]}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": [["mod", "theorem", "lt_pow_succ_log_self", ["nat"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}]}, {"timestamp": 1649743069, "sha": "56f6c8e8", "message": "chore(algebra/big_operators/intervals): Move and golf sum_range_sub_sum_range (#13359)\nMove sum_range_sub_sum_range to a better file. Also implemented the golf demonstrated in this paper https://arxiv.org/pdf/2202.01344.pdf from @spolu.", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["add", "theorem", "prod_Ico_eq_div", ["finset"]], ["add", "theorem", "prod_range_sub_prod_range", ["finset"]], ["del", "theorem", "sum_Ico_eq_sub", ["finset"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["del", "theorem", "sum_range_sub_sum_range", []]]}]}, {"timestamp": 1649743068, "sha": "603db27a", "message": "feat(topology/metric_space/basic): some lemmas about dist (#13343)\nfrom the sphere eversion project", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "dist_self_add_left", []], ["add", "theorem", "dist_self_add_right", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "ball_prod_same", []], ["mod", "theorem", "closed_ball_prod_same", []], ["add", "theorem", "dist_prod_same_left", []], ["add", "theorem", "dist_prod_same_right", []], ["mod", "theorem", "dist_eq", ["prod"]]]}]}, {"timestamp": 1649741079, "sha": "cbea7e1f", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add some lemmas assuming `mul_one_class` `preorder` (#13299)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "le_of_le_mul_of_le_one_left", ["zero_lt"]], ["add", "theorem", "le_of_le_mul_of_le_one_right", ["zero_lt"]], ["add", "theorem", "le_of_mul_le_of_one_le_left", ["zero_lt"]], ["add", "theorem", "le_of_mul_le_of_one_le_right", ["zero_lt"]], ["add", "theorem", "lt_of_lt_mul_of_le_one_left", ["zero_lt"]], ["add", "theorem", "lt_of_lt_mul_of_le_one_right", ["zero_lt"]], ["add", "theorem", "lt_of_mul_lt_of_one_le_left", ["zero_lt"]], ["add", "theorem", "lt_of_mul_lt_of_one_le_right", ["zero_lt"]]]}]}, {"timestamp": 1649741078, "sha": "e3db2e78", "message": "feat(group_theory/complement): Criterion for complementary subgroups (#13292)\nThis lemma gives a criterion for a stabilizer subgroup to be a complementary subgroup.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "is_complement'_stabilizer", ["subgroup"]]]}]}, {"timestamp": 1649733678, "sha": "fdd68d9b", "message": "fix(category_theory/elements): speed up `groupoid_of_elements` (#13372)\nfrom 14.5s to 6s\nIt's [reported](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Quadratic.20Hilbert.20symbol.20over.20.E2.84.9A/near/278592167) that this is causing timeouts in recent bors batches.", "changes": [{"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}]}, {"timestamp": 1649733677, "sha": "bf1b813e", "message": "chore(algebra/module/basic): generalize to add_monoid_hom_class (#13346)\nI need some of these lemmas for `ring_hom`.\nAdditionally, this:\n* removes `map_nat_module_smul` (duplicate of `map_nsmul`) and `map_int_module_smul` (duplicate of `map_zsmul`)\n* renames `map_rat_module_smul` to `map_rat_smul` for brevity.\n* adds the lemmas `inv_nat_cast_smul_comm` and `inv_int_cast_smul_comm`.\n* Swaps the order of the arguments to `map_zsmul` and `map_nsmul` to align with the usual rules (`to_additive` emitted them in the wrong order)", "changes": [{"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["add", "theorem", "map_nsmul", []], ["mod", "theorem", "map_pow", []], ["add", "theorem", "map_zsmul", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "map_int_cast_smul", ["add_monoid_hom"]], ["del", "theorem", "map_int_module_smul", ["add_monoid_hom"]], ["del", "theorem", "map_inv_int_cast_smul", ["add_monoid_hom"]], ["del", "theorem", "map_inv_nat_cast_smul", ["add_monoid_hom"]], ["del", "theorem", "map_nat_cast_smul", ["add_monoid_hom"]], ["del", "theorem", "map_nat_module_smul", ["add_monoid_hom"]], ["del", "theorem", "map_rat_cast_smul", ["add_monoid_hom"]], ["del", "theorem", "map_rat_module_smul", ["add_monoid_hom"]], ["add", "theorem", "inv_int_cast_smul_comm", []], ["add", "theorem", "inv_nat_cast_smul_comm", []], ["add", "theorem", "map_int_cast_smul", []], ["add", "theorem", "map_inv_int_cast_smul", []], ["add", "theorem", "map_inv_nat_cast_smul", []], ["add", "theorem", "map_nat_cast_smul", []], ["add", "theorem", "map_rat_cast_smul", []], ["add", "theorem", "map_rat_smul", []]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}]}, {"timestamp": 1649733676, "sha": "955cb8e6", "message": "feat(data/list/basic): add a theorem about last and append (#13336)\nWhen `ys` is not empty, we can conclude that `last (xs ++ ys)` is `last ys`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "last_append", ["list"]], ["add", "theorem", "last_append_singleton", ["list"]]]}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}]}, {"timestamp": 1649733675, "sha": "10a3faa4", "message": "feat(algebra/order/monoid_lemmas_zero_lt): add lemmas assuming `mul_zero_class` `preorder` (#13297)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "mul_pos", ["zero_lt", "left"]], ["add", "theorem", "mul_neg_of_neg_of_pos", ["zero_lt"]], ["add", "theorem", "mul_neg_of_pos_of_neg", ["zero_lt"]], ["add", "theorem", "mul_pos", ["zero_lt", "right"]]]}]}, {"timestamp": 1649733674, "sha": "fe1c78af", "message": "feat(data/polynomial/algebra_map): remove some lemmas about `aeval`, add `protected` on `polynomial.map_list_prod` (#13294)\nRemove `aeval_sum` which is a duplicate of `map_sum`.\nRemove `aeval_prod` which is a duplicate of `map_prod`.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["del", "theorem", "aeval_prod", ["polynomial"]], ["del", "theorem", "aeval_sum", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "map_list_prod", ["polynomial"]]]}]}, {"timestamp": 1649733673, "sha": "483b7df9", "message": "feat(analysis/convex/strict_convex_space): Ray characterization of `∥x - y∥` (#13293)\n`∥x - y∥ = |∥x∥ - ∥y∥|` if and only if `x` and `y` are on the same ray.", "changes": [{"oldPath": "src/analysis/complex/arg.lean", "newPath": "src/analysis/complex/arg.lean", "changes": [["mod", "theorem", "abs_add_eq", ["complex"]], ["mod", "theorem", "abs_add_eq_iff", ["complex"]], ["mod", "theorem", "abs_sub_eq", ["complex"]], ["add", "theorem", "abs_sub_eq_iff", ["complex"]], ["mod", "theorem", "same_ray_iff", ["complex"]], ["mod", "theorem", "same_ray_of_arg_eq", ["complex"]]]}, {"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": [["add", "theorem", "abs_lt_norm_sub_of_not_same_ray", []], ["add", "theorem", "lt_norm_sub_of_not_same_ray", []], ["add", "theorem", "not_same_ray_iff_abs_lt_norm_sub", []], ["add", "theorem", "same_ray_iff_norm_sub", []]]}]}, {"timestamp": 1649733672, "sha": "f1c98ba8", "message": "feat(topology/uniform_space/uniform_convergence_topology): define the uniform structure of uniform convergence (#13073)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "inf_uniformity'", []], ["add", "theorem", "infi_uniformity'", []], ["add", "theorem", "le_iff_uniform_continuous_id", []]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/uniform_convergence_topology.lean", "changes": [["add", "theorem", "t2_space", ["uniform_convergence"]], ["add", "theorem", "uniform_continuous_eval", ["uniform_convergence"]], ["add", "theorem", "t2_space_of_covering", ["uniform_convergence_on"]], ["add", "theorem", "uniform_continuous_eval_of_mem", ["uniform_convergence_on"]]]}]}, {"timestamp": 1649725995, "sha": "7ba9c3fe", "message": "feat(order/basic): More order instances for `subtype` (#13134)\nAdd the `has_le`, `has_lt`, `decidable_le`, `decidable_lt`, `bounded_order` instances.\nIncorporating the `decidable_le` and `decidable_lt` instances into the `linear_order` one breaks some defeqs with `ite`/`dite`.", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "coe_le_coe", ["subtype"]], ["mod", "theorem", "coe_lt_coe", ["subtype"]], ["mod", "theorem", "mk_le_mk", ["subtype"]], ["mod", "theorem", "mk_lt_mk", ["subtype"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "coe_bot", ["subtype"]], ["add", "theorem", "coe_top", ["subtype"]], ["add", "theorem", "mk_bot", ["subtype"]], ["add", "theorem", "mk_top", ["subtype"]]]}]}, {"timestamp": 1649718564, "sha": "0453d606", "message": "feat(algebraic_geometry/projective_spectrum): structure sheaf of Proj of graded ring (#13072)\nConstruct the structure sheaf of Proj of a graded algebra.", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/projective_spectrum/structure_sheaf.lean", "changes": [["add", "def", "structure_sheaf", ["algebraic_geometry", "projective_spectrum", "Proj"]], ["add", "def", "is_fraction", ["algebraic_geometry", "projective_spectrum", "structure_sheaf"]], ["add", "def", "is_fraction_prelocal", ["algebraic_geometry", "projective_spectrum", "structure_sheaf"]], ["add", "def", "is_locally_fraction", ["algebraic_geometry", "projective_spectrum", "structure_sheaf"]], ["add", "theorem", "add_mem'", ["algebraic_geometry", "projective_spectrum", "structure_sheaf", "section_subring"]], ["add", "theorem", "mul_mem'", ["algebraic_geometry", "projective_spectrum", "structure_sheaf", "section_subring"]], ["add", "theorem", "neg_mem'", ["algebraic_geometry", "projective_spectrum", "structure_sheaf", "section_subring"]], ["add", "theorem", "one_mem'", ["algebraic_geometry", "projective_spectrum", "structure_sheaf", "section_subring"]], ["add", "theorem", "zero_mem'", ["algebraic_geometry", "projective_spectrum", "structure_sheaf", "section_subring"]], ["add", "def", "sections_subring", ["algebraic_geometry", "projective_spectrum", "structure_sheaf"]], ["add", "def", "structure_presheaf_comp_forget", ["algebraic_geometry", "projective_spectrum", "structure_sheaf"]], ["add", "def", "structure_presheaf_in_CommRing", ["algebraic_geometry", "projective_spectrum", "structure_sheaf"]], ["add", "def", "structure_sheaf_in_Type", ["algebraic_geometry", "projective_spectrum", "structure_sheaf"]]]}, {"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": [["add", "def", "Top", ["projective_spectrum"]]]}]}, {"timestamp": 1649718563, "sha": "f94cd0f1", "message": "feat(analysis/normed/normed_field): Pi types form a normed ring (#12912)", "changes": [{"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf'_mul_le_mul_inf'_of_nonneg", ["finset"]], ["add", "theorem", "mul_inf_le_inf_mul_of_nonneg", ["finset"]], ["add", "theorem", "sup'_mul_le_mul_sup'_of_nonneg", ["finset"]], ["add", "theorem", "sup_mul_le_mul_sup_of_nonneg", ["finset"]]]}]}, {"timestamp": 1649710707, "sha": "887f9338", "message": "feat(data/fin/tuple/nat_antidiagonal): add an equiv and some TODO comments. (#13338)\nThis follows on from #13031, and:\n* Adds the tuple version of an antidiagonal equiv\n* Makes some arguments implicit\n* Adds some comments to tie together `finset.nat.antidiagonal_tuple` with the `cut` definition used in one of the 100 Freek problems.", "changes": [{"oldPath": "archive/100-theorems-list/45_partition.lean", "newPath": "archive/100-theorems-list/45_partition.lean", "changes": [["add", "theorem", "cut_univ_fin_eq_antidiagonal_tuple", []]]}, {"oldPath": "src/data/fin/tuple/nat_antidiagonal.lean", "newPath": "src/data/fin/tuple/nat_antidiagonal.lean", "changes": [["mod", "theorem", "mem_antidiagonal_tuple", ["finset", "nat"]], ["add", "def", "sigma_antidiagonal_tuple_equiv_tuple", ["finset", "nat"]], ["mod", "theorem", "mem_antidiagonal_tuple", ["list", "nat"]], ["mod", "theorem", "mem_antidiagonal_tuple", ["multiset", "nat"]]]}]}, {"timestamp": 1649710706, "sha": "455bc657", "message": "chore(representation_theory/invariants): clean up some simps (#13337)", "changes": [{"oldPath": "src/representation_theory/invariants.lean", "newPath": "src/representation_theory/invariants.lean", "changes": [["mod", "theorem", "smul_average_id", ["representation"]]]}]}, {"timestamp": 1649710705, "sha": "e8339bd6", "message": "feat(category_theory/fully_faithful): nat_trans_of_comp_fully_faithful (#13327)\nI added `nat_iso_of_comp_fully_faithful` in an earlier PR, but left out the more basic construction.", "changes": [{"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": [["mod", "def", "nat_iso_of_comp_fully_faithful", ["category_theory"]], ["add", "theorem", "nat_iso_of_comp_fully_faithful_hom", ["category_theory"]], ["add", "theorem", "nat_iso_of_comp_fully_faithful_inv", ["category_theory"]], ["add", "def", "nat_trans_of_comp_fully_faithful", ["category_theory"]]]}]}, {"timestamp": 1649710704, "sha": "4a070542", "message": "chore(*): remove numerous edge cases from lemmas (#13316)\nThis PR uses the same methodology as #10774 to use a linter to remove edge case assumptions from lemmas when the result is easy to prove without the assumption.\nThese are assumptions things like: n \\ne 0, 0 < n, p \\ne \\top, nontrivial R, nonempty R.\nRemoving these unneeded assumptions makes such lemmas easier to apply, and lets us golf a few other proofs along the way.\nThe file with the most changes is `src/ring_theory/unique_factorization_domain.lean` where the linter inspired me to allow trivial monoids in many places.\nThe code I used to find these is in the branch [https://github.com/leanprover-community/mathlib/tree/alexjbest/simple_edge_cases_linter](https://github.com/leanprover-community/mathlib/tree/alexjbest/simple_edge_cases_linter?rgh-link-date=2021-12-13T23%3A53%3A31Z)", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["mod", "theorem", "sum_range_by_parts", ["finset"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["mod", "theorem", "mul_inv_le_of_le_mul", []]]}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["mod", "theorem", "multiset_prod_X_sub_C_coeff_card_pred", ["polynomial"]], ["mod", "theorem", "prod_X_sub_C_coeff_card_pred", ["polynomial"]]]}, {"oldPath": "src/analysis/specific_limits/normed.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": []}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["mod", "theorem", "dvd_iff_prime_pow_dvd_dvd", ["nat"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["mod", "theorem", "exists_eq_mul_div_num_and_eq_mul_div_denom", ["rat"]], ["mod", "theorem", "num_denom_mk", ["rat"]]]}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["mod", "theorem", "neg_eq_self_mod_two", ["zmod"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "eq_X_sub_C_of_algebra_map_inj", ["minpoly"]]]}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["mod", "theorem", "int_degree_add_le", ["ratfunc"]], ["mod", "theorem", "num_div", ["ratfunc"]], ["add", "theorem", "num_div_dvd'", ["ratfunc"]], ["mod", "theorem", "num_div_dvd", ["ratfunc"]]]}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": [["mod", "theorem", "trace_pow_card", ["finite_field"]], ["mod", "theorem", "trace_pow_card", ["zmod"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["mod", "theorem", "pi_premeasure_pi'", ["measure_theory"]], ["mod", "theorem", "pi_premeasure_pi_eval", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/ring_theory/chain_of_divisors.lean", "newPath": "src/ring_theory/chain_of_divisors.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["mod", "theorem", "irreducible_pow_sup_of_le", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "coprime_iff_inf_one", ["associates"]], ["mod", "theorem", "count_le_count_of_factors_le", ["associates"]], ["mod", "theorem", "count_le_count_of_le", ["associates"]], ["mod", "theorem", "count_mul", ["associates"]], ["mod", "theorem", "count_mul_of_coprime'", ["associates"]], ["mod", "theorem", "count_mul_of_coprime", ["associates"]], ["mod", "theorem", "count_of_coprime", ["associates"]], ["mod", "theorem", "dvd_count_of_dvd_count_mul", ["associates"]], ["mod", "theorem", "factors_le", ["associates"]], ["mod", "theorem", "factors_mono", ["associates"]], ["mod", "theorem", "factors_mul", ["associates"]], ["mod", "theorem", "le_of_count_ne_zero", ["associates"]], ["mod", "theorem", "sup_mul_inf", ["associates"]]]}]}, {"timestamp": 1649710703, "sha": "a839f4dc", "message": "feat(number_theory/quadratic_reciprocity): change order of arguments … (#13311)\n…in legendre_sym\nThis is the first step in a major overhaul of the contents of number_theory/quadratic_reciprocity.\nAs a first step, the order of the arguments `a` and `p` to `legendre_sym` is swapped, based on a [poll](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Quadratic.20Hilbert.20symbol.20over.20.E2.84.9A) on Zulip.", "changes": [{"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["mod", "def", "legendre_sym", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_pow", ["zmod"]], ["mod", "theorem", "legendre_sym_eq_zero_iff", ["zmod"]], ["mod", "theorem", "legendre_sym_two", ["zmod"]]]}]}, {"timestamp": 1649710702, "sha": "4e1102a0", "message": "feat(probability/integration): characterize indep_fun by expected product of comp (#13270)\nThis is the third PR into probability/integration, to characterize independence by the expected product of compositions.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "inter_indicator_one", ["set"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_indicator_one", ["measure_theory"]]]}, {"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": [["add", "theorem", "indep_fun_iff_integral_comp_mul", ["probability_theory"]]]}]}, {"timestamp": 1649702981, "sha": "a521a32e", "message": "feat(data/set/basic): Missing `set.image_perm` (#13242)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_perm", ["set"]]]}]}, {"timestamp": 1649702979, "sha": "dee49588", "message": "feat(computability/*): Automata lemmas (#13194)\nA bunch of missing API for `language`, `regular_expression`, `DFA`, `NFA`, `ε_NFA`.", "changes": [{"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": [["mod", "def", "eval", ["DFA"]], ["add", "theorem", "eval_append_singleton", ["DFA"]], ["add", "theorem", "eval_from_append_singleton", ["DFA"]], ["add", "theorem", "eval_from_nil", ["DFA"]], ["add", "theorem", "eval_from_singleton", ["DFA"]], ["add", "theorem", "eval_nil", ["DFA"]], ["add", "theorem", "eval_singleton", ["DFA"]]]}, {"oldPath": "src/computability/NFA.lean", "newPath": "src/computability/NFA.lean", "changes": [["mod", "def", "eval", ["NFA"]], ["add", "theorem", "eval_append_singleton", ["NFA"]], ["add", "theorem", "eval_from_append_singleton", ["NFA"]], ["add", "theorem", "eval_from_nil", ["NFA"]], ["add", "theorem", "eval_from_singleton", ["NFA"]], ["add", "theorem", "eval_nil", ["NFA"]], ["add", "theorem", "eval_singleton", ["NFA"]], ["mod", "theorem", "mem_step_set", ["NFA"]], ["mod", "def", "step_set", ["NFA"]], ["add", "theorem", "step_set_empty", ["NFA"]]]}, {"oldPath": "src/computability/epsilon_NFA.lean", "newPath": "src/computability/epsilon_NFA.lean", "changes": [["add", "theorem", "accept_one", ["ε_NFA"]], ["add", "theorem", "accept_zero", ["ε_NFA"]], ["mod", "def", "accepts", ["ε_NFA"]], ["add", "theorem", "eval_append_singleton", ["ε_NFA"]], ["add", "theorem", "eval_from_append_singleton", ["ε_NFA"]], ["add", "theorem", "eval_from_empty", ["ε_NFA"]], ["add", "theorem", "eval_from_nil", ["ε_NFA"]], ["add", "theorem", "eval_from_singleton", ["ε_NFA"]], ["add", "theorem", "eval_nil", ["ε_NFA"]], ["add", "theorem", "eval_singleton", ["ε_NFA"]], ["add", "theorem", "mem_step_set_iff", ["ε_NFA"]], ["add", "theorem", "start_one", ["ε_NFA"]], ["add", "theorem", "start_zero", ["ε_NFA"]], ["add", "theorem", "step_one", ["ε_NFA"]], ["mod", "def", "step_set", ["ε_NFA"]], ["add", "theorem", "step_set_empty", ["ε_NFA"]], ["add", "theorem", "step_zero", ["ε_NFA"]], ["add", "theorem", "subset_ε_closure", ["ε_NFA"]], ["mod", "inductive", "ε_closure", ["ε_NFA"]], ["add", "theorem", "ε_closure_empty", ["ε_NFA"]], ["add", "theorem", "ε_closure_univ", ["ε_NFA"]]]}, {"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": [["add", "theorem", "append_mem_mul", ["language"]], ["add", "theorem", "join_mem_star", ["language"]], ["mod", "theorem", "mem_add", ["language"]], ["mod", "theorem", "mem_mul", ["language"]], ["mod", "theorem", "mem_one", ["language"]], ["mod", "theorem", "mem_star", ["language"]], ["mod", "theorem", "nil_mem_one", ["language"]], ["add", "theorem", "nil_mem_star", ["language"]]]}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": [["add", "theorem", "deriv_add", ["regular_expression"]], ["add", "theorem", "deriv_char_of_ne", ["regular_expression"]], ["add", "theorem", "deriv_char_self", ["regular_expression"]], ["add", "theorem", "deriv_one", ["regular_expression"]], ["add", "theorem", "deriv_star", ["regular_expression"]], ["add", "theorem", "deriv_zero", ["regular_expression"]], ["add", "theorem", "matches_add", ["regular_expression"]], ["del", "theorem", "matches_add_def", ["regular_expression"]], ["add", "theorem", "matches_char", ["regular_expression"]], ["add", "theorem", "matches_epsilon", ["regular_expression"]], ["del", "theorem", "matches_epsilon_def", ["regular_expression"]], ["add", "theorem", "matches_mul", ["regular_expression"]], ["del", "theorem", "matches_mul_def", ["regular_expression"]], ["add", "theorem", "matches_star", ["regular_expression"]], ["del", "theorem", "matches_star_def", ["regular_expression"]], ["add", "theorem", "matches_zero", ["regular_expression"]], ["del", "theorem", "matches_zero_def", ["regular_expression"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_empty_of_forall_not_mem", ["set"]]]}]}, {"timestamp": 1649702978, "sha": "77ae0912", "message": "feat(number_theory/cyclotomic/primitive_roots): add `pow_sub_one_norm_prime_pow_ne_two` (#13152)\nWe add `pow_sub_one_norm_prime_pow_ne_two`, that computes the norm of `ζ ^ (p ^ s) - 1`, where `ζ` is a primitive `p ^ (k + 1)`-th root of unity. This will be used to compute the discriminant of the `p ^ n`-th cyclotomic field.\nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["mod", "theorem", "prime_ne_two_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["add", "theorem", "prime_ne_two_pow_norm_zeta_pow_sub_one", ["is_cyclotomic_extension"]], ["mod", "theorem", "prime_ne_two_pow_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["add", "theorem", "pow_sub_one_norm_prime_ne_two", ["is_primitive_root"]], ["add", "theorem", "pow_sub_one_norm_prime_pow_ne_two", ["is_primitive_root"]], ["add", "theorem", "pow_sub_one_norm_two", ["is_primitive_root"]], ["del", "theorem", "sub_one_norm_pow_two", ["is_primitive_root"]], ["mod", "theorem", "sub_one_norm_prime", ["is_primitive_root"]], ["mod", "theorem", "sub_one_norm_prime_ne_two", ["is_primitive_root"]], ["add", "theorem", "sub_one_norm_two", ["is_primitive_root"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["del", "theorem", "coe_subgroup_iff", ["is_primitive_root"]], ["add", "theorem", "coe_submonoid_class_iff", ["is_primitive_root"]]]}]}, {"timestamp": 1649702977, "sha": "04250c8d", "message": "feat(measure_theory/measure/haar): Add the Steinhaus Theorem (#12932)\nThis PR proves the [Steinhaus Theorem](https://en.wikipedia.org/wiki/Steinhaus_theorem) in any locally compact group with a Haar measure.", "changes": [{"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": [["add", "theorem", "div_mem_nhds_one_of_haar_pos", ["measure_theory", "measure"]]]}]}, {"timestamp": 1649702975, "sha": "cea5e4bb", "message": "feat(data/sign): the sign function (#12835)", "changes": [{"oldPath": null, "newPath": "src/data/sign.lean", "changes": [["add", "def", "sign", []], ["add", "theorem", "sign_apply", []], ["add", "theorem", "sign_eq_zero_iff", []], ["add", "def", "sign_hom", []], ["add", "theorem", "sign_ne_zero", []], ["add", "theorem", "sign_neg", []], ["add", "theorem", "sign_pos", []], ["add", "def", "cast", ["sign_type"]], ["add", "theorem", "cast_eq_coe", ["sign_type"]], ["add", "def", "cast_hom", ["sign_type"]], ["add", "theorem", "coe_neg_one", ["sign_type"]], ["add", "theorem", "coe_one", ["sign_type"]], ["add", "theorem", "coe_zero", ["sign_type"]], ["add", "def", "fin3_equiv", ["sign_type"]], ["add", "inductive", "le", ["sign_type"]], ["add", "def", "mul", ["sign_type"]], ["add", "theorem", "neg_eq_neg_one", ["sign_type"]], ["add", "theorem", "pos_eq_one", ["sign_type"]], ["add", "theorem", "zero_eq_zero", ["sign_type"]], ["add", "inductive", "sign_type", []], ["add", "theorem", "sign_zero", []]]}]}, {"timestamp": 1649695139, "sha": "695a2b69", "message": "feat(combinatorics/simple_graph/connectivity): induced maps on walks and paths (#13310)\nEvery graph homomorphism gives an induced map on walks.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "def", "map_dart", ["simple_graph", "hom"]], ["add", "theorem", "map_dart_apply", ["simple_graph", "hom"]]]}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "map_embedding_injective", ["simple_graph", "path"]], ["add", "theorem", "map_injective", ["simple_graph", "path"]], ["add", "theorem", "darts_map", ["simple_graph", "walk"]], ["add", "theorem", "edges_map", ["simple_graph", "walk"]], ["add", "theorem", "length_map", ["simple_graph", "walk"]], ["add", "theorem", "map_append", ["simple_graph", "walk"]], ["add", "theorem", "map_cons", ["simple_graph", "walk"]], ["add", "theorem", "map_injective_of_injective", ["simple_graph", "walk"]], ["add", "theorem", "map_is_path_of_injective", ["simple_graph", "walk"]], ["add", "theorem", "map_nil", ["simple_graph", "walk"]], ["add", "theorem", "reverse_map", ["simple_graph", "walk"]], ["add", "theorem", "support_map", ["simple_graph", "walk"]]]}]}, {"timestamp": 1649695138, "sha": "a447dae9", "message": "chore(category_theory/*): reduce imports (#13305)\nAn unnecessary import of `tactic.monotonicity` earlier in the hierarchy was pulling in quite a lot. A few compensatory imports are needed later.", "changes": [{"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/category_theory/essential_image.lean", "newPath": "src/category_theory/essential_image.lean", "changes": []}, {"oldPath": "src/category_theory/functor/basic.lean", "newPath": "src/category_theory/functor/basic.lean", "changes": []}]}, {"timestamp": 1649695137, "sha": "5e8d6bb3", "message": "feat(combinatorics/simple_graph/{connectivity,adj_matrix}): powers of adjacency matrix (#13304)\nThe number of walks of length-n between two vertices is given by the corresponding entry of the n-th power of the adjacency matrix.", "changes": [{"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": [["add", "theorem", "adj_matrix_pow_apply_eq_card_walk", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "card_set_walk_length_eq", ["simple_graph"]], ["add", "theorem", "coe_finset_walk_length_eq", ["simple_graph"]], ["add", "def", "finset_walk_length", ["simple_graph"]], ["add", "theorem", "set_walk_length_succ_eq", ["simple_graph"]], ["add", "theorem", "set_walk_length_to_finset_eq", ["simple_graph"]], ["add", "theorem", "set_walk_length_zero_eq_of_ne", ["simple_graph"]], ["add", "theorem", "set_walk_self_length_zero_eq", ["simple_graph"]], ["add", "theorem", "length_eq_of_mem_finset_walk_length", ["simple_graph", "walk"]], ["add", "theorem", "length_eq_zero_iff", ["simple_graph", "walk"]]]}]}, {"timestamp": 1649695136, "sha": "bfd53845", "message": "chore(category_theory): switch ulift and filtered in import hierarchy (#13302)\nMany files require `ulift` but not `filtered`, so `ulift` should be lower in the import hierarchy. This avoids needing all of `data/` up to `data/fintype/basic` before we can start defining categorical limits.", "changes": [{"oldPath": "src/category_theory/category/ulift.lean", "newPath": "src/category_theory/category/ulift.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}]}, {"timestamp": 1649695135, "sha": "dcb6c865", "message": "feat(measure_theory/function/uniform_integrable): Equivalent condition for uniformly integrable in the probability sense (#12955)\nA sequence of functions is uniformly integrable in the probability sense if and only if `∀ ε : ℝ, 0 < ε → ∃ C : ℝ≥0, ∀ i, snorm ({x | C ≤ ∥f i x∥₊}.indicator (f i)) p μ ≤ ennreal.of_real ε`.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "lt_two_mul_self", []]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "snorm_indicator_ge_of_bdd_below", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["add", "theorem", "spec", ["measure_theory", "uniform_integrable"]], ["add", "theorem", "uniform_integrable_iff", ["measure_theory"]]]}, {"oldPath": "src/order/filter/indicator_function.lean", "newPath": "src/order/filter/indicator_function.lean", "changes": [["add", "theorem", "indicator", ["filter", "eventually_eq"]], ["add", "theorem", "indicator_zero", ["filter", "eventually_eq"]]]}]}, {"timestamp": 1649695134, "sha": "797c7133", "message": "feat(ring_theory/coprime/lemmas): alternative characterisations of pairwise coprimeness (#12911)\nThis provides two condtions equivalent to pairwise coprimeness : \n* each term is coprime to the product of all others\n* 1 can be obtained as a linear combination of all products with one term missing.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "pairwise_cons'", ["finset"]], ["add", "theorem", "pairwise_cons", ["finset"]], ["add", "theorem", "pairwise_subtype_iff_pairwise_finset'", ["finset"]], ["add", "theorem", "pairwise_subtype_iff_pairwise_finset", ["finset"]]]}, {"oldPath": "src/ring_theory/coprime/lemmas.lean", "newPath": "src/ring_theory/coprime/lemmas.lean", "changes": [["add", "theorem", "exists_sum_eq_one_iff_pairwise_coprime'", []], ["add", "theorem", "exists_sum_eq_one_iff_pairwise_coprime", []], ["add", "theorem", "pairwise_coprime_iff_coprime_prod", []]]}]}, {"timestamp": 1649686135, "sha": "67d60972", "message": "feat(data/option/basic): add `option.coe_get` (#13081)\nAdds lemma `coe_get {o : option α} (h : o.is_some) : ((option.get h : α) : option α) = o`\nExtracted from @huynhtrankhanh's https://github.com/leanprover-community/mathlib/pull/11162, moved here to a separate PR", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "coe_get", ["option"]]]}]}, {"timestamp": 1649677958, "sha": "41398242", "message": "refactor(category_theory/differential_object): simp only -> simp_rw (#13333)\nThis is extremely minor; I replace a `simp only` with a `simp_rw`.\nThis proof is apparently rather fragile with respect to some other changes I'm trying to make, and I worked out the correct `simp_rw` sequence while debugging. May as well preserve it for posterity, or at least until next time I make it break.", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}]}, {"timestamp": 1649677957, "sha": "c7e76bc8", "message": "chore(category_theory/monoidal/discrete): typo in to_additive name (#13332)", "changes": [{"oldPath": "src/category_theory/monoidal/discrete.lean", "newPath": "src/category_theory/monoidal/discrete.lean", "changes": []}]}, {"timestamp": 1649677956, "sha": "d4059557", "message": "feat(analysis/complex/re_im_topology): add `metric.bounded.re_prod_im` (#13324)\nAlso add `complex.mem_re_prod_im`.", "changes": [{"oldPath": "src/analysis/complex/re_im_topology.lean", "newPath": "src/analysis/complex/re_im_topology.lean", "changes": [["mod", "theorem", "re_prod_im", ["is_closed"]], ["mod", "theorem", "re_prod_im", ["is_open"]], ["add", "theorem", "re_prod_im", ["metric", "bounded"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "mem_re_prod_im", ["complex"]]]}]}, {"timestamp": 1649677954, "sha": "ebbe763f", "message": "feat(measure_theory/constructions/borel_space): a set with `μ (∂ s) = 0` is null measurable (#13322)", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "closure_ae_eq_of_null_frontier", []], ["add", "theorem", "interior_ae_eq_of_null_frontier", []], ["del", "theorem", "measure_closure_of_null_bdry", []], ["add", "theorem", "measure_closure_of_null_frontier", []], ["del", "theorem", "measure_interior_of_null_bdry", []], ["add", "theorem", "measure_interior_of_null_frontier", []], ["add", "theorem", "null_measurable_set_of_null_frontier", []]]}]}, {"timestamp": 1649677953, "sha": "7e69148c", "message": "feat(order/conditionally_complete_lattice): Make `cSup_empty` a `simp` lemma (#13318)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cSup_empty", []], ["mod", "theorem", "csupr_of_empty", []]]}]}, {"timestamp": 1649677952, "sha": "159855d1", "message": "feat(set_theory/ordinal_arithmetic): `is_normal.monotone` (#13314)\nWe introduce a convenient abbreviation for `is_normal.strict_mono.monotone`.", "changes": [{"oldPath": "src/set_theory/fixed_points.lean", "newPath": "src/set_theory/fixed_points.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "monotone", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1649677951, "sha": "c5b83f0a", "message": "doc(combinatorics/simple_graph/basic): mention half-edge synonym for darts (#13312)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1649677950, "sha": "722c0dfa", "message": "feat(category_theory/nat_iso): add simp lemmas (#13303)", "changes": [{"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "naturality_1'", ["category_theory", "nat_iso"]], ["add", "theorem", "naturality_2'", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1649677949, "sha": "f7e862f6", "message": "feat(analysis/special_functions/pow): `z ^ w` is continuous in `(z, w)` at `(0, w)` if `0 < re w` (#13288)\nAlso add a few supporting lemmas.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "abs_cpow_le", ["complex"]], ["add", "theorem", "abs_cpow_of_ne_zero", ["complex"]], ["add", "theorem", "continuous_at_cpow_zero_of_re_pos", ["complex"]]]}]}, {"timestamp": 1649677948, "sha": "57682ffa", "message": "feat(data/complex/is_R_or_C): add `polynomial.of_real_eval` (#13287)", "changes": [{"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "of_real_eval", ["polynomial"]]]}]}, {"timestamp": 1649677947, "sha": "577df07c", "message": "feat(analysis/asymptotics): add a few versions of `c=o(x)` as `x→∞` (#13286)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_o_const_id_at_bot", ["asymptotics"]], ["add", "theorem", "is_o_const_id_at_top", ["asymptotics"]], ["add", "theorem", "is_o_const_id_comap_norm_at_top", ["asymptotics"]]]}]}, {"timestamp": 1649677946, "sha": "171e2aa2", "message": "feat(group_theory/group_action/basic): A `quotient_action` induces an action on left cosets (#13283)\nA `quotient_action` induces an action on left cosets.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["mod", "theorem", "smul_coe", ["mul_action", "quotient"]], ["mod", "theorem", "smul_mk", ["mul_action", "quotient"]]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}]}, {"timestamp": 1649677945, "sha": "65b5dd8b", "message": "feat(group_theory/transversal): A `quotient_action` induces an action on left transversals (#13282)\nA `quotient_action` induces an action on left transversals.\nOnce #13283 is merged, I'll PR some more API generalizing the existing lemma `smul_symm_apply_eq_mul_symm_apply_inv_smul`.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "smul_to_fun", ["subgroup"]]]}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}]}, {"timestamp": 1649677944, "sha": "2eba5241", "message": "chore(topology/algebra/uniform_group): use morphism classes (#13273)", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["mod", "theorem", "uniform_continuous_monoid_hom_of_continuous", []], ["add", "theorem", "uniform_continuous_of_continuous_at_one", []], ["mod", "theorem", "uniform_continuous_of_tendsto_one", []], ["mod", "theorem", "uniform_continuous_iff_open_ker", ["uniform_group"]]]}]}, {"timestamp": 1649677943, "sha": "2b80d4a0", "message": "feat(topology/order): if `e` is an equiv, `induced e.symm = coinduced e` (#13272)", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "coinduced_symm", ["equiv"]], ["add", "theorem", "induced_symm", ["equiv"]]]}]}, {"timestamp": 1649677941, "sha": "c1600832", "message": "feat(algebra/big_operators): `norm_num` plugin for list/multiset/finset prod/sum (#13005)\nThis PR provides a plugin for the `norm_num` tactic that can evaluate finite sums and products, over lists, multisets and finsets.\n`simp` could already handle some of these operations, but `norm_num` is overall much more suited to dealing with larger numerical operations such as arising from large sums.\nI implemented the tactic as a `norm_num` plugin since it's intended to deal with numbers. I'm happy to make it its own tactic (`norm_bigop`?) if you feel this is outside of the `norm_num` scope. Similarly, I could also make a separate tactic for the parts that rewrite a list/multiset/finset into a sequence of `list.cons`es.", "changes": [{"oldPath": null, "newPath": "src/algebra/big_operators/norm_num.lean", "changes": [["add", "theorem", "eval_prod_of_list", ["tactic", "norm_num", "finset"]], ["add", "theorem", "insert_eq_coe_list_cons", ["tactic", "norm_num", "finset"]], ["add", "theorem", "insert_eq_coe_list_of_mem", ["tactic", "norm_num", "finset"]], ["add", "theorem", "cons_congr", ["tactic", "norm_num", "list"]], ["add", "theorem", "map_congr", ["tactic", "norm_num", "list"]], ["add", "theorem", "map_cons_congr", ["tactic", "norm_num", "list"]], ["add", "theorem", "not_mem_cons", ["tactic", "norm_num", "list"]], ["add", "theorem", "prod_congr", ["tactic", "norm_num", "list"]], ["add", "theorem", "prod_cons_congr", ["tactic", "norm_num", "list"]], ["add", "theorem", "cons_congr", ["tactic", "norm_num", "multiset"]], ["add", "theorem", "map_congr", ["tactic", "norm_num", "multiset"]], ["add", "theorem", "prod_congr", ["tactic", "norm_num", "multiset"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1649669277, "sha": "e5bd9413", "message": "feat(scripts): make style lint script more robust to lines starting with spaces (#13317)\nCurrently some banned commands aren't caught if the line is indented.\nBecause of this I previously snuck in a `set_option pp.all true` by accident", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1649669276, "sha": "cd616e0d", "message": "feat(analysis/special_functions/pow): more versions of `x ^ k = o(exp(b * x))` (#13285)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "is_o_pow_exp_pos_mul_at_top", []], ["add", "theorem", "is_o_rpow_exp_at_top", []], ["add", "theorem", "is_o_rpow_exp_pos_mul_at_top", []], ["add", "theorem", "is_o_zpow_exp_pos_mul_at_top", []]]}]}, {"timestamp": 1649669274, "sha": "706905c5", "message": "fix(algebra/indicator_function): fix name of `mul_indicator_eq_one_iff` (#13284)\nIt is about `≠`, so call it `mul_indicator_ne_one_iff`/`indicator_ne_zero_iff`.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "mul_indicator_apply_ne_one", ["set"]], ["del", "theorem", "mul_indicator_eq_one_iff", ["set"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": [["mod", "theorem", "mem_support_filter_iff", ["pmf"]]]}]}, {"timestamp": 1649669273, "sha": "ff507a35", "message": "feat(model_theory/basic): Structures over the empty language (#13281)\nAny type is a first-order structure over the empty language.\nAny function, embedding, or equiv is a first-order hom, embedding or equiv over the empty language.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "empty", ["embedding"]], ["add", "def", "empty", ["equiv"]], ["mod", "def", "to_hom", ["first_order", "language", "embedding"]], ["add", "theorem", "nonempty_embedding_iff", ["first_order", "language", "empty"]], ["add", "theorem", "nonempty_equiv_iff", ["first_order", "language", "empty"]], ["mod", "def", "to_embedding", ["first_order", "language", "equiv"]], ["mod", "def", "to_hom", ["first_order", "language", "equiv"]], ["add", "def", "to_hom", ["first_order", "language", "hom_class"]], ["add", "def", "to_embedding", ["first_order", "language", "strong_hom_class"]], ["add", "def", "to_equiv", ["first_order", "language", "strong_hom_class"]], ["add", "def", "empty_hom", ["function"]]]}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": [["mod", "def", "constants_on", ["first_order", "language"]]]}]}, {"timestamp": 1649669272, "sha": "fe17fee1", "message": "feat(topology/algebra/uniform_group): a subgroup of a uniform group is a uniform group (#13277)", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1649669270, "sha": "6f428ed4", "message": "feat(group_theory/schreier): Finset version of Schreier's lemma (#13274)\nThis PR adds a finset version of Schreier's lemma, getting closer to a statement in terms of `group.fg` and `group.rank`.", "changes": [{"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": [["add", "theorem", "closure_mul_image_eq_top'", ["subgroup"]]]}]}, {"timestamp": 1649669268, "sha": "102311e6", "message": "fix(algebra/module/basic,group_theory/group_action/defs): generalize nat and int smul_comm_class instances (#13174)\nThe `add_group.int_smul_with_zero` instance appears to be new, everything else is moved and has `[semiring R] [add_comm_monoid M] [module R M]` relaxed to `[monoid R] [add_monoid M] [distrib_mul_action R M]`, with the variables renamed to match the destination file.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}]}, {"timestamp": 1649651527, "sha": "4d27ecf7", "message": "refactor(order/conditionally_complete_lattice): `csupr_le_csupr` → `csupr_mono` (#13320)\nFor consistency with `supr_mono` and `infi_mono`", "changes": [{"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "cinfi_le_cinfi", []], ["add", "theorem", "cinfi_mono", []], ["del", "theorem", "csupr_le_csupr", []], ["add", "theorem", "csupr_mono", []]]}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1649642583, "sha": "6f9cb03e", "message": "chore(*): make more transitive relations available to calc (#12860)\nFixed as many possible declarations to have the correct argument order, as per [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/calc.20with.20.60.E2.89.83*.60). Golfed some random ones while I was at it.", "changes": [{"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["mod", "theorem", "dvd_trans", []]]}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": [["mod", "theorem", "trans", ["asymptotics", "is_equivalent"]], ["mod", "def", "is_equivalent", ["asymptotics"]]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": [["mod", "theorem", "le_trans", ["colex"]], ["mod", "theorem", "lt_trans", ["colex"]]]}, {"oldPath": "src/computability/tm_computable.lean", "newPath": "src/computability/tm_computable.lean", "changes": [["mod", "def", "trans", ["turing", "evals_to_in_time"]]]}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["mod", "theorem", "trans", ["list", "is_rotated"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "mem_of_mem_of_subset", ["set"]], ["mod", "theorem", "trans", ["set", "subset"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["mod", "theorem", "trans", ["sym2", "rel"]]]}, {"oldPath": "src/logic/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "trans", ["interval_integrable"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["mod", "theorem", "trans", ["measure_theory", "vector_measure", "absolutely_continuous"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "trans", ["filter", "eventually_eq"]]]}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["mod", "theorem", "mem_of_mem_of_le", ["order", "ideal"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["mod", "theorem", "ssubset_trans", []], ["mod", "theorem", "subset_trans", []]]}, {"oldPath": null, "newPath": "test/calc.lean", "changes": []}]}, {"timestamp": 1649638509, "sha": "a85958cf", "message": "chore(measure_theory/mconstructions/prod): Speed up `finite_spanning_sets_in.prod` (#13325)\nDisable the computability check on `measure_theory.measure.finite_spanning_sets_in.prod` because it was taking 20s of compilation.", "changes": [{"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["del", "def", "prod", ["measure_theory", "measure", "finite_spanning_sets_in"]]]}]}, {"timestamp": 1649638508, "sha": "a2d09b24", "message": "feat(topology/algebra/order): add `le_on_closure` (#13290)", "changes": [{"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": [["add", "theorem", "le_on_closure", []]]}]}, {"timestamp": 1649631894, "sha": "e5ae0991", "message": "chore(topology/uniform_space/basic): golf a proof (#13289)\nRewrite a proof using tactic mode and golf it.", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1649631893, "sha": "84910217", "message": "chore(algebra/invertible): generalise typeclasses (#13275)", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "theorem", "inv_of_neg", []], ["mod", "theorem", "inv_of_two_add_inv_of_two", []], ["mod", "def", "invertible_neg", []]]}, {"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": []}]}, {"timestamp": 1649631892, "sha": "4ded5ca3", "message": "fix(field_theory/galois): update docstring (#13188)", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}]}, {"timestamp": 1649631891, "sha": "be22d07e", "message": "feat(data/sym/basic): some basic lemmas in preparation for stars and bars (#12479)\nSome lemmas extracted from @huynhtrankhanh's #11162, moved here to a separate PR", "changes": [{"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["add", "def", "attach", ["sym"]], ["add", "theorem", "attach_cons", ["sym"]], ["add", "theorem", "attach_map_coe", ["sym"]], ["add", "theorem", "attach_mk", ["sym"]], ["add", "theorem", "attach_nil", ["sym"]], ["add", "theorem", "coe_attach", ["sym"]], ["add", "theorem", "coe_cons", ["sym"]], ["add", "theorem", "coe_erase", ["sym"]], ["add", "theorem", "coe_inj", ["sym"]], ["add", "theorem", "coe_injective", ["sym"]], ["add", "theorem", "coe_map", ["sym"]], ["mod", "def", "cons'", ["sym"]], ["mod", "def", "cons", ["sym"]], ["mod", "theorem", "cons_equiv_eq_equiv_cons", ["sym"]], ["mod", "theorem", "cons_erase", ["sym"]], ["mod", "def", "equiv_congr", ["sym"]], ["add", "theorem", "erase_cons_head", ["sym"]], ["add", "theorem", "erase_mk", ["sym"]], ["mod", "def", "map", ["sym"]], ["add", "theorem", "map_congr", ["sym"]], ["mod", "theorem", "map_cons", ["sym"]], ["add", "theorem", "map_id'", ["sym"]], ["mod", "theorem", "map_id", ["sym"]], ["add", "theorem", "map_injective", ["sym"]], ["add", "theorem", "map_mk", ["sym"]], ["mod", "theorem", "map_zero", ["sym"]], ["add", "theorem", "mem_attach", ["sym"]], ["mod", "theorem", "mem_map", ["sym"]], ["add", "theorem", "mem_mk", ["sym"]], ["add", "def", "mk", ["sym"]], ["mod", "def", "sym'", ["sym"]], ["mod", "def", "sym_equiv_sym'", ["sym"]], ["mod", "def", "sym", []], ["mod", "def", "is_setoid", ["vector", "perm"]]]}]}, {"timestamp": 1649631890, "sha": "609eb59e", "message": "feat(set_theory/cofinality): Every ordinal has a fundamental sequence (#12317)", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["mod", "theorem", "cof_cof", ["ordinal"]], ["add", "theorem", "exists_fundamental_sequence", ["ordinal"]], ["add", "theorem", "blsub_eq", ["ordinal", "is_fundamental_sequence"]], ["add", "theorem", "cof_eq", ["ordinal", "is_fundamental_sequence"]], ["add", "theorem", "monotone", ["ordinal", "is_fundamental_sequence"]], ["add", "theorem", "strict_mono", ["ordinal", "is_fundamental_sequence"]], ["add", "theorem", "trans", ["ordinal", "is_fundamental_sequence"]], ["add", "def", "is_fundamental_sequence", ["ordinal"]]]}]}, {"timestamp": 1649627831, "sha": "5bf57407", "message": "chore(category_theory/fin_category): Speed up `as_type_equiv_obj_as_type` (#13298)\nRename `obj_as_type_equiv_as_type` to `as_type_equiv_obj_as_type` (likely a typo). Use `equivalence.mk` instead of `equivalence.mk'` to build it and split the functors to separate definitions to tag them with `@[simps]` and make `dsimp` go further.\nOn my machine, this cuts down the compile time from 41s to 3s.", "changes": [{"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": [["del", "def", "obj_as_type_equiv_as_type", ["category_theory", "fin_category"]]]}]}, {"timestamp": 1649622526, "sha": "60ccf8f7", "message": "feat(linear_algebra): add `adjoint_pair` from `bilinear_form` (#13203)\nCopying the definition and theorem about adjoint pairs from `bilinear_form` to `sesquilinear_form`.\nDefines the composition of two linear maps with a bilinear map to form a new bilinear map, which was missing from the `bilinear_map` API.\nWe also use the new definition of adjoint pairs in `analysis/inner_product_space/adjoint`.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["del", "theorem", "is_adjoint_pair", ["continuous_linear_map"]], ["add", "theorem", "is_adjoint_pair_inner", ["continuous_linear_map"]], ["del", "theorem", "is_adjoint_pair", ["linear_map"]], ["add", "theorem", "is_adjoint_pair_inner", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "comp_inj", ["bilin_form"]], ["del", "theorem", "comp_injective", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": [["add", "def", "compl₁₂", ["linear_map"]], ["add", "theorem", "compl₁₂_apply", ["linear_map"]], ["add", "theorem", "compl₁₂_inj", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "theorem", "add", ["linear_map", "is_adjoint_pair"]], ["add", "theorem", "comp", ["linear_map", "is_adjoint_pair"]], ["add", "theorem", "mul", ["linear_map", "is_adjoint_pair"]], ["add", "theorem", "smul", ["linear_map", "is_adjoint_pair"]], ["add", "theorem", "sub", ["linear_map", "is_adjoint_pair"]], ["add", "def", "is_adjoint_pair", ["linear_map"]], ["add", "theorem", "is_adjoint_pair_id", ["linear_map"]], ["add", "theorem", "is_adjoint_pair_iff_comp_eq_compl₂", ["linear_map"]], ["add", "theorem", "is_adjoint_pair_zero", ["linear_map"]], ["add", "def", "is_pair_self_adjoint", ["linear_map"]], ["add", "theorem", "is_pair_self_adjoint_equiv", ["linear_map"]], ["add", "def", "is_pair_self_adjoint_submodule", ["linear_map"]], ["add", "def", "is_skew_adjoint", ["linear_map"]], ["add", "theorem", "is_skew_adjoint_iff_neg_self_adjoint", ["linear_map"]], ["add", "theorem", "mem_is_pair_self_adjoint_submodule", ["linear_map"]], ["add", "theorem", "mem_self_adjoint_submodule", ["linear_map"]], ["add", "theorem", "mem_skew_adjoint_submodule", ["linear_map"]], ["add", "def", "self_adjoint_submodule", ["linear_map"]], ["add", "def", "skew_adjoint_submodule", ["linear_map"]]]}]}, {"timestamp": 1649622525, "sha": "a30cba49", "message": "feat(set_theory/cardinal_ordinal): Simp lemmas for `mk` (#13119)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "add_eq_max'", ["cardinal"]], ["add", "theorem", "add_mk_eq_max'", ["cardinal"]], ["add", "theorem", "add_mk_eq_max", ["cardinal"]], ["add", "theorem", "mk_add_one_eq", ["cardinal"]], ["add", "theorem", "mk_mul_omega_eq", ["cardinal"]], ["add", "theorem", "mul_mk_eq_max", ["cardinal"]], ["add", "theorem", "omega_mul_mk_eq", ["cardinal"]]]}]}, {"timestamp": 1649619263, "sha": "965f46d4", "message": "feat(category_theory/monoidal): coherence tactic (#13125)\nThis is an alternative to #12697 (although this one does not handle bicategories!)\nFrom the docstring:\n```\nUse the coherence theorem for monoidal categories to solve equations in a monoidal equation,\nwhere the two sides only differ by replacing strings of \"structural\" morphisms with\ndifferent strings with the same source and target.\nThat is, `coherence` can handle goals of the form\n`a ≫ f ≫ b ≫ g ≫ c = a' ≫ f ≫ b' ≫ g ≫ c'`\nwhere `a = a'`, `b = b'`, and `c = c'` can be proved using `coherence1`.\n```\nThis PR additionally provides a \"composition up to unitors+associators\" operation, so you can write\n```\nexample {U V W X Y : C} (f : U ⟶ V ⊗ (W ⊗ X)) (g : (V ⊗ W) ⊗ X ⟶ Y) : U ⟶ Y := f ⊗≫ g\n```", "changes": [{"oldPath": "src/category_theory/monoidal/center.lean", "newPath": "src/category_theory/monoidal/center.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monoidal/coherence.lean", "changes": [["add", "def", "monoidal_comp", ["category_theory", "monoidal_category"]], ["add", "theorem", "monoidal_comp_refl", ["category_theory", "monoidal_category"]], ["add", "def", "monoidal_iso", ["category_theory", "monoidal_category"]], ["add", "def", "monoidal_iso_comp", ["category_theory", "monoidal_category"]], ["add", "theorem", "assoc_lift_hom", ["tactic", "coherence"]]]}, {"oldPath": "src/category_theory/monoidal/rigid.lean", "newPath": "src/category_theory/monoidal/rigid.lean", "changes": []}, {"oldPath": null, "newPath": "test/coherence.lean", "changes": []}]}, {"timestamp": 1649619262, "sha": "0bc2aa91", "message": "feat(data/fin/tuple/nat_antidiagonal): add `antidiagonal_tuple` (#13031)", "changes": [{"oldPath": null, "newPath": "src/data/fin/tuple/nat_antidiagonal.lean", "changes": [["add", "def", "antidiagonal_tuple", ["finset", "nat"]], ["add", "theorem", "antidiagonal_tuple_one", ["finset", "nat"]], ["add", "theorem", "antidiagonal_tuple_two", ["finset", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_succ", ["finset", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_zero", ["finset", "nat"]], ["add", "theorem", "mem_antidiagonal_tuple", ["finset", "nat"]], ["add", "def", "antidiagonal_tuple", ["list", "nat"]], ["add", "theorem", "antidiagonal_tuple_one", ["list", "nat"]], ["add", "theorem", "antidiagonal_tuple_two", ["list", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_succ", ["list", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_zero", ["list", "nat"]], ["add", "theorem", "mem_antidiagonal_tuple", ["list", "nat"]], ["add", "theorem", "nodup_antidiagonal_tuple", ["list", "nat"]], ["add", "def", "antidiagonal_tuple", ["multiset", "nat"]], ["add", "theorem", "antidiagonal_tuple_one", ["multiset", "nat"]], ["add", "theorem", "antidiagonal_tuple_two", ["multiset", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_succ", ["multiset", "nat"]], ["add", "theorem", "antidiagonal_tuple_zero_zero", ["multiset", "nat"]], ["add", "theorem", "mem_antidiagonal_tuple", ["multiset", "nat"]], ["add", "theorem", "nodup_antidiagonal_tuple", ["multiset", "nat"]]]}]}, {"timestamp": 1649606269, "sha": "6d0984db", "message": "doc(README): improve documentation on how to contribute (#13116)\nCreate a new contributing section which highlights the basic steps on how to start contributing to mathlib", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1649598582, "sha": "6368956a", "message": "counterexample(counterexamples/char_p_zero_ne_char_zero.lean): `char_p R 0` and `char_zero R` need not coincide (#13080)\nFollowing the [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F), this counterexample formalizes a `semiring R` for which `char_p R 0` holds, but `char_zero R` does not.\nSee #13075 for the PR that lead to this example.", "changes": [{"oldPath": null, "newPath": "counterexamples/char_p_zero_ne_char_zero.lean", "changes": [["add", "theorem", "add_one_eq_one", []], ["add", "theorem", "with_zero_unit_char_p_zero", []], ["add", "theorem", "with_zero_unit_not_char_zero", []]]}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}]}, {"timestamp": 1649594218, "sha": "83225b3d", "message": "feat(order/monovary): Add missing `monovary` lemmas (#13243)\nAdd lemmas for postcomposing monovarying functions with monotone/antitone functions. Protect lemmas that needed it. Fix typos.", "changes": [{"oldPath": "src/order/monovary.lean", "newPath": "src/order/monovary.lean", "changes": [["add", "theorem", "comp_antitone_left", ["antivary"]], ["add", "theorem", "comp_monotone_left", ["antivary"]], ["mod", "theorem", "dual", ["antivary"]], ["mod", "theorem", "dual_left", ["antivary"]], ["mod", "theorem", "dual_right", ["antivary"]], ["add", "theorem", "comp_antitone_on_left", ["antivary_on"]], ["add", "theorem", "comp_antitone_on_right", ["antivary_on"]], ["add", "theorem", "comp_monotone_on_left", ["antivary_on"]], ["add", "theorem", "comp_monotone_on_right", ["antivary_on"]], ["add", "theorem", "comp_right", ["antivary_on"]], ["mod", "theorem", "dual", ["antivary_on"]], ["mod", "theorem", "dual_left", ["antivary_on"]], ["mod", "theorem", "dual_right", ["antivary_on"]], ["add", "theorem", "empty", ["antivary_on"]], ["add", "theorem", "comp_antitone_left", ["monovary"]], ["add", "theorem", "comp_monotone_left", ["monovary"]], ["mod", "theorem", "dual", ["monovary"]], ["mod", "theorem", "dual_left", ["monovary"]], ["mod", "theorem", "dual_right", ["monovary"]], ["add", "theorem", "comp_antitone_on_left", ["monovary_on"]], ["add", "theorem", "comp_antitone_on_right", ["monovary_on"]], ["add", "theorem", "comp_monotone_on_left", ["monovary_on"]], ["add", "theorem", "comp_monotone_on_right", ["monovary_on"]], ["add", "theorem", "comp_right", ["monovary_on"]], ["mod", "theorem", "dual", ["monovary_on"]], ["mod", "theorem", "dual_left", ["monovary_on"]], ["mod", "theorem", "dual_right", ["monovary_on"]], ["add", "theorem", "empty", ["monovary_on"]], ["mod", "theorem", "monovary_on_self", []], ["del", "theorem", "antivary", ["subsingleton"]], ["del", "theorem", "antivary_on", ["subsingleton"]], ["del", "theorem", "monovary", ["subsingleton"]], ["del", "theorem", "monovary_on", ["subsingleton"]]]}]}, {"timestamp": 1649594217, "sha": "32cc8689", "message": "feat(measure_theory/measure/measure_space): let measure.map work with ae_measurable functions (#13241)\nCurrently, `measure.map f μ` is zero if `f` is not measurable. This means that one can not say that two integrable random variables `X` and `Y` have the same distribution by requiring `measure.map X μ = measure.map Y μ`, as `X` or `Y` might not be measurable. We adjust the definition of `measure.map` to also work with almost everywhere measurable functions. This means that many results in the library that were only true for measurable functions become true for ae measurable functions. We generalize some of the existing code to this more general setting.", "changes": [{"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "ae_measurable", ["continuous"]]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["mod", "theorem", "ess_sup_comp_le_ess_sup_map_measure", []], ["mod", "theorem", "ess_sup_map_measure", []], ["mod", "theorem", "ess_sup_map_measure_of_measurable", []]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "comp_ae_measurable", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "mem_ℒp_map_measure_iff", ["measure_theory"]], ["mod", "theorem", "snorm_map_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "comp_ae_measurable", ["measure_theory", "ae_strongly_measurable"]]]}, {"oldPath": "src/measure_theory/group/integration.lean", "newPath": "src/measure_theory/group/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "integral_map", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/ae_measurable.lean", "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": [["add", "theorem", "comp_ae_measurable", ["ae_measurable"]], ["mod", "theorem", "comp_measurable", ["ae_measurable"]], ["add", "theorem", "map_mono_of_ae_measurable", ["measure_theory", "measure"]], ["add", "theorem", "restrict_map_of_ae_measurable", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_eq_comp'", ["measure_theory"]], ["mod", "theorem", "ae_eq_comp", ["measure_theory"]], ["mod", "theorem", "ae_map_iff", ["measure_theory"]], ["mod", "theorem", "ae_of_ae_map", ["measure_theory"]], ["del", "theorem", "ae_smul_measure_iff", ["measure_theory"]], ["add", "theorem", "ae_smul_measure_iff", ["measure_theory", "measure"]], ["mod", "theorem", "le_map_apply", ["measure_theory", "measure"]], ["mod", "def", "map", ["measure_theory", "measure"]], ["mod", "theorem", "map_add", ["measure_theory", "measure"]], ["mod", "theorem", "map_apply", ["measure_theory", "measure"]], ["add", "theorem", "map_apply_of_ae_measurable", ["measure_theory", "measure"]], ["add", "theorem", "map_congr", ["measure_theory", "measure"]], ["mod", "theorem", "map_mono", ["measure_theory", "measure"]], ["add", "theorem", "map_of_not_ae_measurable", ["measure_theory", "measure"]], ["del", "theorem", "map_of_not_measurable", ["measure_theory", "measure"]], ["mod", "theorem", "map_smul", ["measure_theory", "measure"]], ["mod", "theorem", "map_to_outer_measure", ["measure_theory", "measure"]], ["mod", "theorem", "map_zero", ["measure_theory", "measure"]], ["del", "theorem", "mapₗ_apply", ["measure_theory", "measure"]], ["add", "theorem", "mapₗ_apply_of_measurable", ["measure_theory", "measure"]], ["add", "theorem", "mapₗ_congr", ["measure_theory", "measure"]], ["add", "theorem", "mapₗ_mk_apply_of_ae_measurable", ["measure_theory", "measure"]], ["mod", "theorem", "preimage_null_of_map_null", ["measure_theory", "measure"]], ["mod", "theorem", "tendsto_ae_map", ["measure_theory", "measure"]], ["mod", "theorem", "mem_ae_map_iff", ["measure_theory"]], ["mod", "theorem", "mem_ae_of_mem_ae_map", ["measure_theory"]], ["mod", "theorem", "of_map", ["measure_theory", "sigma_finite"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "preimage", ["filter", "eventually_eq"]]]}, {"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": []}]}, {"timestamp": 1649581510, "sha": "ef51d232", "message": "feat(category_theory/shift): restricting shift functors to a subcategory (#13265)\nGiven a family of endomorphisms of `C` which are interwined by a fully faithful `F : C ⥤ D`\nwith shift functors on `D`, we can promote that family to shift functors on `C`.\nFor LTE.", "changes": [{"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": [["add", "def", "nat_iso_of_comp_fully_faithful", ["category_theory"]]]}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": [["add", "def", "has_shift_of_fully_faithful", ["category_theory"]], ["add", "def", "has_shift_of_fully_faithful_comm", ["category_theory"]]]}]}, {"timestamp": 1649581509, "sha": "c916b64d", "message": "feat(ring_theory/polynomial/opposites + data/{polynomial/basic + finsupp/basic}): move `op_ring_equiv` to a new file + lemmas (#13162)\nThis PR moves the isomorphism `R[X]ᵐᵒᵖ ≃+* Rᵐᵒᵖ[X]` to a new file `ring_theory.polynomial.opposites`.\nI also proved some basic lemmas about the equivalence.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "support_map_range_of_injective", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["del", "def", "op_ring_equiv", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/opposites.lean", "changes": [["add", "theorem", "coeff_op_ring_equiv", ["polynomial"]], ["add", "theorem", "leading_coeff_op_ring_equiv", ["polynomial"]], ["add", "theorem", "nat_degree_op_ring_equiv", ["polynomial"]], ["add", "def", "op_ring_equiv", ["polynomial"]], ["add", "theorem", "op_ring_equiv_op_C", ["polynomial"]], ["add", "theorem", "op_ring_equiv_op_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "op_ring_equiv_op_X", ["polynomial"]], ["add", "theorem", "op_ring_equiv_op_monomial", ["polynomial"]], ["add", "theorem", "op_ring_equiv_symm_C", ["polynomial"]], ["add", "theorem", "op_ring_equiv_symm_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "op_ring_equiv_symm_X", ["polynomial"]], ["add", "theorem", "op_ring_equiv_symm_monomial", ["polynomial"]], ["add", "theorem", "support_op_ring_equiv", ["polynomial"]]]}]}, {"timestamp": 1649581508, "sha": "d70e26bf", "message": "feat(analysis/convex/topology): improve some lemmas (#13136)\nReplace some `s` with `closure s` in the LHS of `⊆` in some lemmas.", "changes": [{"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "add_smul_mem_interior'", ["convex"]], ["add", "theorem", "add_smul_sub_mem_interior'", ["convex"]], ["del", "theorem", "closure", ["convex"]], ["add", "theorem", "closure_subset_interior_image_homothety_of_one_lt", ["convex"]], ["add", "theorem", "combo_closure_interior_mem_interior", ["convex"]], ["add", "theorem", "combo_closure_interior_subset_interior", ["convex"]], ["add", "theorem", "combo_interior_closure_mem_interior", ["convex"]], ["add", "theorem", "combo_interior_closure_subset_interior", ["convex"]], ["add", "theorem", "combo_interior_self_mem_interior", ["convex"]], ["del", "theorem", "combo_mem_interior_left", ["convex"]], ["del", "theorem", "combo_mem_interior_right", ["convex"]], ["add", "theorem", "combo_self_interior_mem_interior", ["convex"]], ["del", "theorem", "interior", ["convex"]], ["del", "theorem", "is_path_connected", ["convex"]], ["add", "theorem", "open_segment_closure_interior_subset_interior", ["convex"]], ["add", "theorem", "open_segment_interior_closure_subset_interior", ["convex"]], ["add", "theorem", "open_segment_interior_self_subset_interior", ["convex"]], ["add", "theorem", "open_segment_self_interior_subset_interior", ["convex"]], ["del", "theorem", "open_segment_subset_interior_left", ["convex"]], ["del", "theorem", "open_segment_subset_interior_right", ["convex"]], ["mod", "theorem", "subset_interior_image_homothety_of_one_lt", ["convex"]], ["del", "theorem", "path_connected", ["topological_add_group"]]]}]}, {"timestamp": 1649573000, "sha": "208ebd4e", "message": "feat(algebra/order/monoid_lemmas_zero_lt): port some lemmas from `algebra.order.monoid_lemmas` (#12961)\nAlthough the names of these lemmas are from `algebra.order.monoid_lemmas`, many of the lemmas in `algebra.order.monoid_lemmas` have incorrect names, and some others may not be appropriate. Also, many lemmas are missing in `algebra.order.monoid_lemmas`. It may be necessary to make some renames and additions.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "exists_square_le'", ["zero_lt"]], ["add", "theorem", "exists_square_le", ["zero_lt"]], ["add", "theorem", "le_mul_iff_one_le_left", ["zero_lt"]], ["add", "theorem", "le_mul_iff_one_le_right", ["zero_lt"]], ["add", "theorem", "le_mul_of_le_of_one_le'", ["zero_lt"]], ["add", "theorem", "le_mul_of_le_of_one_le", ["zero_lt"]], ["add", "theorem", "le_mul_of_one_le_left'", ["zero_lt"]], ["add", "theorem", "le_mul_of_one_le_left", ["zero_lt"]], ["add", "theorem", "le_mul_of_one_le_of_le'", ["zero_lt"]], ["add", "theorem", "le_mul_of_one_le_of_le", ["zero_lt"]], ["add", "theorem", "le_mul_of_one_le_right'", ["zero_lt"]], ["add", "theorem", "le_mul_of_one_le_right", ["zero_lt"]], ["add", "theorem", "mul_le_one_of_le_of_le'", ["zero_lt", "left"]], ["add", "theorem", "mul_le_one_of_le_of_le", ["zero_lt", "left"]], ["add", "theorem", "mul_lt_one_of_le_of_lt", ["zero_lt", "left"]], ["add", "theorem", "mul_lt_one_of_lt_of_le", ["zero_lt", "left"]], ["add", "theorem", "mul_lt_one_of_lt_of_lt", ["zero_lt", "left"]], ["add", "theorem", "one_le_mul_of_le_of_le'", ["zero_lt", "left"]], ["add", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "left"]], ["add", "theorem", "one_lt_mul_of_le_of_lt", ["zero_lt", "left"]], ["add", "theorem", "one_lt_mul_of_lt_of_le", ["zero_lt", "left"]], ["add", "theorem", "one_lt_mul_of_lt_of_lt", ["zero_lt", "left"]], ["add", "theorem", "lt_mul_iff_one_lt_left", ["zero_lt"]], ["add", "theorem", "lt_mul_iff_one_lt_right", ["zero_lt"]], ["add", "theorem", "lt_mul_of_le_of_one_lt", ["zero_lt"]], ["add", "theorem", "lt_mul_of_lt_of_one_le", ["zero_lt"]], ["add", "theorem", "lt_mul_of_lt_of_one_lt", ["zero_lt"]], ["add", "theorem", "lt_mul_of_one_le_of_lt", ["zero_lt"]], ["add", "theorem", "lt_mul_of_one_lt_of_le", ["zero_lt"]], ["add", "theorem", "lt_mul_of_one_lt_of_lt", ["zero_lt"]], ["add", "theorem", "mul_le_iff_le_one_left", ["zero_lt"]], ["add", "theorem", "mul_le_iff_le_one_right", ["zero_lt"]], ["mod", "theorem", "mul_le_mul_left'", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_of_le_one'", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_of_le_one", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_one_left'", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_one_left", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_one_of_le'", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_one_of_le", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_one_right'", ["zero_lt"]], ["add", "theorem", "mul_le_of_le_one_right", ["zero_lt"]], ["add", "theorem", "mul_lt_iff_lt_one_left", ["zero_lt"]], ["add", "theorem", "mul_lt_iff_lt_one_right", ["zero_lt"]], ["mod", "theorem", "mul_lt_mul_left'", ["zero_lt"]], ["add", "theorem", "mul_lt_of_le_of_lt_one", ["zero_lt"]], ["add", "theorem", "mul_lt_of_le_one_of_lt", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_of_le_one", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_of_lt_one", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_one_of_le", ["zero_lt"]], ["add", "theorem", "mul_lt_of_lt_one_of_lt", ["zero_lt"]], ["add", "theorem", "mul_le_one_of_le_of_le'", ["zero_lt", "right"]], ["add", "theorem", "mul_le_one_of_le_of_le", ["zero_lt", "right"]], ["add", "theorem", "mul_lt_one_of_le_of_lt", ["zero_lt", "right"]], ["add", "theorem", "mul_lt_one_of_lt_of_le", ["zero_lt", "right"]], ["add", "theorem", "mul_lt_one_of_lt_of_lt", ["zero_lt", "right"]], ["add", "theorem", "one_le_mul_of_le_of_le'", ["zero_lt", "right"]], ["add", "theorem", "one_le_mul_of_le_of_le", ["zero_lt", "right"]], ["add", "theorem", "one_lt_mul_of_le_of_lt", ["zero_lt", "right"]], ["add", "theorem", "one_lt_mul_of_lt_of_le", ["zero_lt", "right"]], ["add", "theorem", "one_lt_mul_of_lt_of_lt", ["zero_lt", "right"]]]}]}, {"timestamp": 1649572999, "sha": "00980d9d", "message": "feat(group_theory/free_product): The ping pong lemma for free groups (#12916)\nWe already have the ping-pong-lemma for free products; phrasing it for free groups is\na (potentially) useful corollary, and brings us on-par with the Wikipedia page.\nAgain, we state it as a lemma that gives a criteria for when `lift` is injective.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": [["add", "theorem", "injective_lift_of_ping_pong", ["free_group"]], ["add", "def", "free_group_equiv_free_product", []]]}]}, {"timestamp": 1649572998, "sha": "dfc1b4cc", "message": "feat(topology/algebra/module/character_space): Introduce the character space of an algebra (#12838)\nThe character space of a topological algebra is the subset of elements of the weak dual that are also algebra homomorphisms. This space is used in the Gelfand transform, which gives an isomorphism between a commutative C⋆-algebra and continuous functions on the character space of the algebra. This, in turn, is used to construct the continuous functional calculus on C⋆-algebras.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/module/character_space.lean", "changes": [["add", "theorem", "apply_mem_spectrum", ["weak_dual", "character_space"]], ["add", "theorem", "coe_apply", ["weak_dual", "character_space"]], ["add", "theorem", "continuous", ["weak_dual", "character_space"]], ["add", "theorem", "map_add", ["weak_dual", "character_space"]], ["add", "theorem", "map_mul", ["weak_dual", "character_space"]], ["add", "theorem", "map_one", ["weak_dual", "character_space"]], ["add", "theorem", "map_smul", ["weak_dual", "character_space"]], ["add", "theorem", "map_zero", ["weak_dual", "character_space"]], ["add", "def", "to_alg_hom", ["weak_dual", "character_space"]], ["add", "def", "to_clm", ["weak_dual", "character_space"]], ["add", "theorem", "to_clm_apply", ["weak_dual", "character_space"]], ["add", "def", "to_non_unital_alg_hom", ["weak_dual", "character_space"]], ["add", "def", "character_space", ["weak_dual"]]]}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}]}, {"timestamp": 1649572997, "sha": "55baab3e", "message": "feat(field_theory/krull_topology): added fintype_alg_hom (#12777)", "changes": [{"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "ne_zero_of_finite_field_extension", ["minpoly"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["add", "theorem", "aux_inj_roots_of_min_poly", ["field"]], ["add", "def", "roots_of_min_poly_pi_type", ["field"]]]}]}, {"timestamp": 1649571008, "sha": "36fceb91", "message": "feat(data/list/cycle): Define `cycle.chain` analog to `list.chain` (#12970)\nWe define `cycle.chain`, which means that a relation holds in all adjacent elements in a cyclic list. We then show that for `r` a transitive relation, `cycle.chain r l` is equivalent to `r` holding for all pairs of elements in `l`.", "changes": [{"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "nil", ["cycle", "chain"]], ["add", "def", "chain", ["cycle"]], ["add", "theorem", "chain_coe_cons", ["cycle"]], ["add", "theorem", "chain_iff_pairwise", ["cycle"]], ["add", "theorem", "chain_map", ["cycle"]], ["add", "theorem", "chain_ne_nil", ["cycle"]], ["add", "theorem", "chain_of_pairwise", ["cycle"]], ["add", "theorem", "chain_singleton", ["cycle"]], ["add", "theorem", "coe_cons_eq_coe_append", ["cycle"]], ["add", "theorem", "coe_to_finset", ["cycle"]], ["add", "theorem", "forall_eq_of_chain", ["cycle"]]]}]}, {"timestamp": 1649563520, "sha": "de0aea46", "message": "feat(topology/uniform_space/uniform_convergence): add lemma `tendsto_locally_uniformly_iff_forall_tendsto` (#13201)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "forall_in_swap", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "forall_in_swap", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "tendsto_locally_uniformly_iff_forall_tendsto", []], ["add", "theorem", "tendsto_at", ["tendsto_uniformly"]]]}]}, {"timestamp": 1649563519, "sha": "26729d6d", "message": "chore(ring_theory/polynomial/basic): Generalize `polynomial.degree_lt_equiv` to commutative rings (#13190)\nThis is a minor PR to generalise degree_lt_equiv to comm_ring.\nIts restriction to field appears to be an oversight.", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "def", "degree_lt_equiv", ["polynomial"]]]}]}, {"timestamp": 1649563518, "sha": "2ff12ea3", "message": "feat(linear_algebra/bilinear_form): generalize from is_symm to is_refl (#13181)\nGeneralize some lemmas that assumed symmetric bilinear forms to reflexive bilinear forms (which is more general) and update docstring (before the condition 'symmetric' was not mentioned)", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "theorem", "dom_restrict_refl", ["linear_map", "is_refl"]], ["add", "theorem", "flip_is_refl_iff", ["linear_map", "is_refl"]], ["add", "theorem", "ker_eq_bot_iff_ker_flip_eq_bot", ["linear_map", "is_refl"]], ["add", "theorem", "ker_flip_eq_bot", ["linear_map", "is_refl"]], ["add", "theorem", "nondegenerate_of_separating_left", ["linear_map", "is_refl"]], ["add", "theorem", "nondegenerate_of_separating_right", ["linear_map", "is_refl"]], ["del", "theorem", "nondegenerate_of_separating_left", ["linear_map", "is_symm"]], ["del", "theorem", "nondegenerate_of_separating_right", ["linear_map", "is_symm"]]]}]}, {"timestamp": 1649555300, "sha": "8b8f46e4", "message": "feat(analysis/complex/arg): link same_ray and complex.arg (#12764)", "changes": [{"oldPath": null, "newPath": "src/analysis/complex/arg.lean", "changes": [["add", "theorem", "abs_add_eq", ["complex"]], ["add", "theorem", "abs_add_eq_iff", ["complex"]], ["add", "theorem", "abs_sub_eq", ["complex"]], ["add", "theorem", "same_ray_iff", ["complex"]], ["add", "theorem", "same_ray_of_arg_eq", ["complex"]]]}, {"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": [["mod", "theorem", "zero_left", ["same_ray"]], ["mod", "theorem", "zero_right", ["same_ray"]]]}]}, {"timestamp": 1649555299, "sha": "7eff2330", "message": "feat(set_theory/cofinality): Golf and extend existing results relating `cof` to `sup` and `bsup` (#12321)", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "blsub_lt_ord_lift_of_is_regular", ["cardinal"]], ["add", "theorem", "blsub_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "bsup_lt_ord_lift_of_is_regular", ["cardinal"]], ["add", "theorem", "bsup_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "lsub_lt_ord_lift_of_is_regular", ["cardinal"]], ["add", "theorem", "lsub_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "sum_lt_lift_of_is_regular", ["cardinal"]], ["mod", "theorem", "sum_lt_of_is_regular", ["cardinal"]], ["add", "theorem", "sup_lt_lift_of_is_regular", ["cardinal"]], ["mod", "theorem", "sup_lt_of_is_regular", ["cardinal"]], ["add", "theorem", "sup_lt_ord_lift_of_is_regular", ["cardinal"]], ["mod", "theorem", "sup_lt_ord_of_is_regular", ["cardinal"]], ["add", "theorem", "blsub_lt_ord", ["ordinal"]], ["add", "theorem", "blsub_lt_ord_lift", ["ordinal"]], ["add", "theorem", "bsup_lt_ord", ["ordinal"]], ["add", "theorem", "bsup_lt_ord_lift", ["ordinal"]], ["add", "theorem", "cof_blsub_le_lift", ["ordinal"]], ["mod", "theorem", "cof_bsup_le", ["ordinal"]], ["mod", "theorem", "cof_bsup_le_lift", ["ordinal"]], ["add", "theorem", "cof_lsub_le_lift", ["ordinal"]], ["mod", "theorem", "cof_sup_le", ["ordinal"]], ["mod", "theorem", "cof_sup_le_lift", ["ordinal"]], ["add", "theorem", "lsub_lt_ord", ["ordinal"]], ["add", "theorem", "lsub_lt_ord_lift", ["ordinal"]], ["mod", "theorem", "sup_lt", ["ordinal"]], ["add", "theorem", "sup_lt_lift", ["ordinal"]], ["mod", "theorem", "sup_lt_ord", ["ordinal"]], ["add", "theorem", "sup_lt_ord_lift", ["ordinal"]]]}]}, {"timestamp": 1649555297, "sha": "c2d870e2", "message": "feat(set_theory/{ordinal_arithmetic, fixed_points}): Next fixed point of families (#12200)\nWe define the next common fixed point of a family of normal ordinal functions. We prove these fixed points to be unbounded, and that their enumerator functions are normal.", "changes": [{"oldPath": null, "newPath": "src/set_theory/fixed_points.lean", "changes": [["add", "theorem", "apply_le_nfp_family", ["ordinal"]], ["add", "theorem", "apply_lt_nfp_bfamily", ["ordinal"]], ["add", "theorem", "apply_lt_nfp_family", ["ordinal"]], ["add", "theorem", "apply_lt_nfp_family_iff", ["ordinal"]], ["add", "def", "deriv_bfamily", ["ordinal"]], ["add", "theorem", "deriv_bfamily_eq_deriv_family", ["ordinal"]], ["add", "theorem", "deriv_bfamily_eq_enum_ord", ["ordinal"]], ["add", "theorem", "deriv_bfamily_fp", ["ordinal"]], ["add", "theorem", "deriv_bfamily_is_normal", ["ordinal"]], ["add", "def", "deriv_family", ["ordinal"]], ["add", "theorem", "deriv_family_eq_enum_ord", ["ordinal"]], ["add", "theorem", "deriv_family_fp", ["ordinal"]], ["add", "theorem", "deriv_family_is_normal", ["ordinal"]], ["add", "theorem", "deriv_family_limit", ["ordinal"]], ["add", "theorem", "deriv_family_succ", ["ordinal"]], ["add", "theorem", "deriv_family_zero", ["ordinal"]], ["add", "theorem", "foldr_le_nfp_bfamily", ["ordinal"]], ["add", "theorem", "foldr_le_nfp_family", ["ordinal"]], ["add", "theorem", "fp_bfamily_unbounded", ["ordinal"]], ["add", "theorem", "fp_family_unbounded", ["ordinal"]], ["add", "theorem", "fp_iff_deriv_bfamily", ["ordinal"]], ["add", "theorem", "fp_iff_deriv_family", ["ordinal"]], ["add", "theorem", "le_iff_deriv_bfamily", ["ordinal"]], ["add", "theorem", "le_iff_deriv_family", ["ordinal"]], ["add", "theorem", "le_nfp_bfamily", ["ordinal"]], ["add", "theorem", "lt_nfp_bfamily", ["ordinal"]], ["add", "theorem", "lt_nfp_family", ["ordinal"]], ["add", "def", "nfp_bfamily", ["ordinal"]], ["add", "theorem", "nfp_bfamily_eq_nfp_family", ["ordinal"]], ["add", "theorem", "nfp_bfamily_eq_self", ["ordinal"]], ["add", "theorem", "nfp_bfamily_fp", ["ordinal"]], ["add", "theorem", "nfp_bfamily_le", ["ordinal"]], ["add", "theorem", "nfp_bfamily_le_apply", ["ordinal"]], ["add", "theorem", "nfp_bfamily_le_fp", ["ordinal"]], ["add", "theorem", "nfp_bfamily_le_iff", ["ordinal"]], ["add", "theorem", "nfp_bfamily_monotone", ["ordinal"]], ["add", "def", "nfp_family", ["ordinal"]], ["add", "theorem", "nfp_family_eq_self", ["ordinal"]], ["add", "theorem", "nfp_family_eq_sup", ["ordinal"]], ["add", "theorem", "nfp_family_fp", ["ordinal"]], ["add", "theorem", "nfp_family_le", ["ordinal"]], ["add", "theorem", "nfp_family_le_apply", ["ordinal"]], ["add", "theorem", "nfp_family_le_fp", ["ordinal"]], ["add", "theorem", "nfp_family_le_iff", ["ordinal"]], ["add", "theorem", "nfp_family_monotone", ["ordinal"]], ["add", "theorem", "self_le_nfp_bfamily", ["ordinal"]], ["add", "theorem", "self_le_nfp_family", ["ordinal"]]]}]}, {"timestamp": 1649555296, "sha": "b2c707cd", "message": "feat(group_theory): use generic `subobject_class` lemmas (#11758)\nThis subobject class refactor PR follows up from #11750 by moving the `{zero,one,add,mul,...}_mem_class` lemmas to the root namespace and marking the previous `sub{monoid,group,module,algebra,...}.{zero,one,add,mul,...}_mem` lemmas as `protected`. This is the second part of #11545 to be split off.\nI made the subobject parameter to the `_mem` lemmas implicit if it appears in the hypotheses, e.g.\n```lean\nlemma mul_mem {S M : Type*} [monoid M] [set_like S M] [submonoid_class S M]\n {s : S} {x y : M} (hx : x ∈ s) (hy : y ∈ s) : x * y ∈ s\n```\ninstead of having `(s : S)` explicit. The generic `_mem` lemmas are not namespaced, so there is no dot notation that requires `s` to be explicit. Also there were already a couple of instances for the same operator where `s` was implicit and others where `s` was explicit, so some change was needed.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["del", "theorem", "add_mem", ["subalgebra"]], ["del", "theorem", "coe_add", ["subalgebra"]], ["del", "theorem", "coe_eq_one", ["subalgebra"]], ["del", "theorem", "coe_eq_zero", ["subalgebra"]], ["del", "theorem", "coe_int_mem", ["subalgebra"]], ["del", "theorem", "coe_mul", ["subalgebra"]], ["del", "theorem", "coe_nat_mem", ["subalgebra"]], ["del", "theorem", "coe_neg", ["subalgebra"]], ["del", "theorem", "coe_one", ["subalgebra"]], ["del", "theorem", "coe_pow", ["subalgebra"]], ["del", "theorem", "coe_sub", ["subalgebra"]], ["del", "theorem", "coe_zero", ["subalgebra"]], ["del", "theorem", "list_prod_mem", ["subalgebra"]], ["del", "theorem", "list_sum_mem", ["subalgebra"]], ["del", "theorem", "mul_mem", ["subalgebra"]], ["del", "theorem", "multiset_prod_mem", ["subalgebra"]], ["del", "theorem", "multiset_sum_mem", ["subalgebra"]], ["del", "theorem", "neg_mem", ["subalgebra"]], ["del", "theorem", "nsmul_mem", ["subalgebra"]], ["del", "theorem", "one_mem", ["subalgebra"]], ["del", "theorem", "pow_mem", ["subalgebra"]], ["del", "theorem", "prod_mem", ["subalgebra"]], ["del", "theorem", "sub_mem", ["subalgebra"]], ["del", "theorem", "sum_mem", ["subalgebra"]], ["del", "theorem", "zero_mem", ["subalgebra"]], ["del", "theorem", "zsmul_mem", ["subalgebra"]]]}, {"oldPath": "src/algebra/algebra/subalgebra/pointwise.lean", "newPath": "src/algebra/algebra/subalgebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": []}, {"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["del", "theorem", "add_mem", ["lie_subalgebra"]], ["del", "theorem", "neg_mem_iff", ["lie_subalgebra"]], ["del", "theorem", "sub_mem", ["lie_subalgebra"]], ["del", "theorem", "zero_mem", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["del", "theorem", "zero_mem", ["lie_submodule"]]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["del", "theorem", "add_mem", ["submodule"]], ["del", "theorem", "add_mem_iff_left", ["submodule"]], ["del", "theorem", "add_mem_iff_right", ["submodule"]], ["del", "theorem", "coe_neg", ["submodule"]], ["del", "theorem", "coe_sub", ["submodule"]], ["del", "theorem", "neg_mem", ["submodule"]], ["del", "theorem", "neg_mem_iff", ["submodule"]], ["del", "theorem", "sub_mem", ["submodule"]], ["del", "theorem", "sum_mem", ["submodule"]], ["del", "theorem", "zero_mem", ["submodule"]]]}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": []}, {"oldPath": "src/algebra/star/unitary.lean", "newPath": "src/algebra/star/unitary.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["del", "theorem", "dfinsupp_sum_add_hom_mem", ["add_submonoid"]], ["add", "theorem", "dfinsupp_prod_mem", []], ["add", "theorem", "dfinsupp_sum_add_hom_mem", []], ["del", "theorem", "dfinsupp_prod_mem", ["submonoid"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "theorem", "finsupp_prod_mem", ["submonoid"]], ["add", "theorem", "finsupp_prod_mem", ["submonoid_class"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["del", "theorem", "add_mem", ["intermediate_field"]], ["del", "theorem", "coe_add", ["intermediate_field"]], ["del", "theorem", "coe_int_mem", ["intermediate_field"]], ["del", "theorem", "coe_inv", ["intermediate_field"]], ["del", "theorem", "coe_mul", ["intermediate_field"]], ["del", "theorem", "coe_neg", ["intermediate_field"]], ["del", "theorem", "coe_one", ["intermediate_field"]], ["del", "theorem", "coe_pow", ["intermediate_field"]], ["del", "theorem", "coe_zero", ["intermediate_field"]], ["del", "theorem", "div_mem", ["intermediate_field"]], ["del", "theorem", "inv_mem", ["intermediate_field"]], ["del", "theorem", "list_prod_mem", ["intermediate_field"]], ["del", "theorem", "list_sum_mem", ["intermediate_field"]], ["del", "theorem", "mul_mem", ["intermediate_field"]], ["del", "theorem", "multiset_prod_mem", ["intermediate_field"]], ["del", "theorem", "multiset_sum_mem", ["intermediate_field"]], ["del", "theorem", "neg_mem", ["intermediate_field"]], ["del", "theorem", "one_mem", ["intermediate_field"]], ["del", "theorem", "pow_mem", ["intermediate_field"]], ["del", "theorem", "prod_mem", ["intermediate_field"]], ["del", "theorem", "sub_mem", ["intermediate_field"]], ["del", "theorem", "sum_mem", ["intermediate_field"]], ["del", "theorem", "zero_mem", ["intermediate_field"]], ["del", "theorem", "zsmul_mem", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["del", "theorem", "add_mem", ["subfield"]], ["del", "theorem", "coe_int_mem", ["subfield"]], ["del", "theorem", "div_mem", ["subfield"]], ["del", "theorem", "inv_mem", ["subfield"]], ["del", "theorem", "list_prod_mem", ["subfield"]], ["del", "theorem", "list_sum_mem", ["subfield"]], ["del", "theorem", "mul_mem", ["subfield"]], ["del", "theorem", "multiset_prod_mem", ["subfield"]], ["del", "theorem", "multiset_sum_mem", ["subfield"]], ["del", "theorem", "neg_mem", ["subfield"]], ["del", "theorem", "one_mem", ["subfield"]], ["del", "theorem", "pow_mem", ["subfield"]], ["del", "theorem", "prod_mem", ["subfield"]], ["del", "theorem", "sub_mem", ["subfield"]], ["del", "theorem", "sum_mem", ["subfield"]], ["del", "theorem", "zero_mem", ["subfield"]], ["del", "theorem", "zsmul_mem", ["subfield"]]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "div_mem", []], ["add", "theorem", "div_mem_comm_iff", []], ["add", "theorem", "exists_inv_mem_iff_exists_mem", []], ["add", "theorem", "inv_coe_set", []], ["add", "theorem", "inv_mem_iff", []], ["add", "theorem", "mul_mem_cancel_left", []], ["add", "theorem", "mul_mem_cancel_right", []], ["del", "theorem", "div_mem", ["subgroup"]], ["del", "theorem", "div_mem_comm_iff", ["subgroup"]], ["del", "theorem", "exists_inv_mem_iff_exists_mem", ["subgroup"]], ["del", "theorem", "inv_coe_set", ["subgroup"]], ["del", "theorem", "inv_mem", ["subgroup"]], ["del", "theorem", "inv_mem_iff", ["subgroup"]], ["del", "theorem", "list_prod_mem", ["subgroup"]], ["del", "theorem", "mul_mem", ["subgroup"]], ["del", "theorem", "mul_mem_cancel_left", ["subgroup"]], ["del", "theorem", "mul_mem_cancel_right", ["subgroup"]], ["del", "theorem", "multiset_prod_mem", ["subgroup"]], ["del", "theorem", "one_mem", ["subgroup"]], ["del", "theorem", "pow_mem", ["subgroup"]], ["del", "theorem", "prod_mem", ["subgroup"]], ["del", "theorem", "zpow_mem", ["subgroup"]], ["del", "theorem", "div_mem", ["subgroup_class"]], ["del", "theorem", "div_mem_comm_iff", ["subgroup_class"]], ["del", "theorem", "exists_inv_mem_iff_exists_mem", ["subgroup_class"]], ["del", "theorem", "inv_coe_set", ["subgroup_class"]], ["del", "theorem", "inv_mem_iff", ["subgroup_class"]], ["del", "theorem", "mul_mem_cancel_left", ["subgroup_class"]], ["del", "theorem", "mul_mem_cancel_right", ["subgroup_class"]], ["del", "theorem", "zpow_mem", ["subgroup_class"]], ["add", "theorem", "zpow_mem", []]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["del", "theorem", "mul_mem", ["submonoid"]], ["del", "theorem", "one_mem", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "list_prod_mem", []], ["add", "theorem", "multiset_prod_mem", []], ["add", "theorem", "prod_mem", []], ["del", "theorem", "list_prod_mem", ["submonoid_class"]], ["del", "theorem", "multiset_prod_mem", ["submonoid_class"]], ["del", "theorem", "prod_mem", ["submonoid_class"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["del", "theorem", "pow_mem", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["del", "theorem", "finsupp_sum_mem", ["submodule"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["mod", "def", "total_equiv", ["linear_independent"]]]}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["del", "theorem", "add_mem_iff_left", ["ideal"]], ["del", "theorem", "add_mem_iff_right", ["ideal"]], ["del", "theorem", "neg_mem_iff", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["add", "theorem", "coe_int_mem", []], ["del", "theorem", "add_mem", ["subring"]], ["del", "theorem", "coe_int_mem", ["subring"]], ["mod", "theorem", "coe_pow", ["subring"]], ["del", "theorem", "list_prod_mem", ["subring"]], ["del", "theorem", "list_sum_mem", ["subring"]], ["del", "theorem", "mul_mem", ["subring"]], ["del", "theorem", "multiset_prod_mem", ["subring"]], ["del", "theorem", "multiset_sum_mem", ["subring"]], ["del", "theorem", "neg_mem", ["subring"]], ["del", "theorem", "one_mem", ["subring"]], ["del", "theorem", "pow_mem", ["subring"]], ["del", "theorem", "prod_mem", ["subring"]], ["del", "theorem", "sub_mem", ["subring"]], ["del", "theorem", "sum_mem", ["subring"]], ["del", "theorem", "zero_mem", ["subring"]], ["del", "theorem", "zsmul_mem", ["subring"]], ["del", "theorem", "coe_int_mem", ["subring_class"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "theorem", "coe_nat_mem", []], ["del", "theorem", "add_mem", ["subsemiring"]], ["del", "theorem", "coe_nat_mem", ["subsemiring"]], ["del", "theorem", "list_sum_mem", ["subsemiring"]], ["del", "theorem", "mul_mem", ["subsemiring"]], ["del", "theorem", "multiset_prod_mem", ["subsemiring"]], ["del", "theorem", "multiset_sum_mem", ["subsemiring"]], ["del", "theorem", "nsmul_mem", ["subsemiring"]], ["del", "theorem", "one_mem", ["subsemiring"]], ["del", "theorem", "pow_mem", ["subsemiring"]], ["del", "theorem", "prod_mem", ["subsemiring"]], ["del", "theorem", "sum_mem", ["subsemiring"]], ["del", "theorem", "zero_mem", ["subsemiring"]], ["del", "theorem", "coe_nat_mem", ["subsemiring_class"]]]}]}, {"timestamp": 1649555295, "sha": "d1338749", "message": "feat(representation_theory/basic): basics of group representation theory (#11207)\nSome basic lemmas about group representations and some theory regarding the subspace of fixed points of a representation.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "theorem", "smul_of", ["monoid_algebra"]], ["add", "def", "submodule_of_smul_mem", ["monoid_algebra"]]]}, {"oldPath": null, "newPath": "src/representation_theory/basic.lean", "changes": [["add", "theorem", "as_algebra_hom_def", ["representation"]], ["add", "theorem", "as_algebra_hom_single", ["representation"]], ["add", "def", "as_group_hom", ["representation"]], ["add", "theorem", "as_module_apply", ["representation"]], ["add", "theorem", "char_conj", ["representation"]], ["add", "theorem", "char_one", ["representation"]], ["add", "theorem", "of_smul", ["representation"]]]}, {"oldPath": null, "newPath": "src/representation_theory/invariants.lean", "changes": [["add", "theorem", "average_def", ["representation"]], ["add", "theorem", "invariants'_carrier", ["representation"]], ["add", "def", "invariants", ["representation"]], ["add", "theorem", "invariants_eq_inter", ["representation"]], ["add", "theorem", "mem_invariants", ["representation"]], ["add", "theorem", "mul_average_left", ["representation"]], ["add", "theorem", "mul_average_right", ["representation"]], ["add", "theorem", "smul_average_id", ["representation"]], ["add", "theorem", "smul_average_invariant", ["representation"]]]}]}, {"timestamp": 1649555294, "sha": "3fe5c932", "message": "feat(algebra/ring/boolean_ring): Turning a Boolean algebra into a Boolean ring (#6476)\nDefine `as_boolring`, a type synonym to turn a Boolean algebra into a Boolean ring and show that `as_boolring` and `as_boolalg` are \"inverse\" to each other.", "changes": [{"oldPath": "src/algebra/category/BoolRing.lean", "newPath": "src/algebra/category/BoolRing.lean", "changes": []}, {"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": [["add", "def", "as_boolring", []], ["add", "def", "to_boolean_ring", ["boolean_algebra"]], ["add", "theorem", "as_boolring_comp", ["bounded_lattice_hom"]], ["add", "theorem", "as_boolring_id", ["bounded_lattice_hom"]], ["add", "def", "to_non_unital_ring", ["generalized_boolean_algebra"]], ["add", "theorem", "of_boolalg_compl", []], ["add", "theorem", "of_boolalg_mul_of_boolalg_eq_left_iff", []], ["add", "theorem", "of_boolalg_sdiff", []], ["add", "theorem", "of_boolalg_symm_diff", []], ["add", "def", "of_boolring", []], ["add", "theorem", "of_boolring_add", []], ["add", "theorem", "of_boolring_inj", []], ["add", "theorem", "of_boolring_le_of_boolring_iff", []], ["add", "theorem", "of_boolring_mul", []], ["add", "theorem", "of_boolring_neg", []], ["add", "theorem", "of_boolring_one", []], ["add", "theorem", "of_boolring_sub", []], ["add", "theorem", "of_boolring_symm_eq", []], ["add", "theorem", "of_boolring_to_boolring", []], ["add", "theorem", "of_boolring_zero", []], ["add", "def", "as_boolalg_as_boolring", ["order_iso"]], ["add", "def", "as_boolring_as_boolalg", ["ring_equiv"]], ["add", "theorem", "to_boolalg_add", []], ["mod", "theorem", "to_boolalg_add_add_mul", []], ["add", "def", "to_boolring", []], ["add", "theorem", "to_boolring_bot", []], ["add", "theorem", "to_boolring_inf", []], ["add", "theorem", "to_boolring_inj", []], ["add", "theorem", "to_boolring_of_boolring", []], ["add", "theorem", "to_boolring_symm_diff", []], ["add", "theorem", "to_boolring_symm_eq", []], ["add", "theorem", "to_boolring_top", []]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["add", "theorem", "map", ["disjoint"]], ["add", "theorem", "map", ["is_compl"]], ["add", "theorem", "map_compl", []], ["add", "theorem", "map_sdiff", []], ["add", "theorem", "map_symm_diff", []]]}]}, {"timestamp": 1649555293, "sha": "9495b8cb", "message": "feat(data/set/intervals/with_bot_top): lemmas about `I??` and `with_top/bot` (#4273)\nProve theorems about (pre)images of intervals under `coe : α → with_top α` and `coe : α → with_bot α`.", "changes": [{"oldPath": null, "newPath": "src/data/set/intervals/with_bot_top.lean", "changes": [["add", "theorem", "image_coe_Icc", ["with_bot"]], ["add", "theorem", "image_coe_Ici", ["with_bot"]], ["add", "theorem", "image_coe_Ico", ["with_bot"]], ["add", "theorem", "image_coe_Iic", ["with_bot"]], ["add", "theorem", "image_coe_Iio", ["with_bot"]], ["add", "theorem", "image_coe_Ioc", ["with_bot"]], ["add", "theorem", "image_coe_Ioi", ["with_bot"]], ["add", "theorem", "image_coe_Ioo", ["with_bot"]], ["add", "theorem", "preimage_coe_Icc", ["with_bot"]], ["add", "theorem", "preimage_coe_Ici", ["with_bot"]], ["add", "theorem", "preimage_coe_Ico", ["with_bot"]], ["add", "theorem", "preimage_coe_Iic", ["with_bot"]], ["add", "theorem", "preimage_coe_Iio", ["with_bot"]], ["add", "theorem", "preimage_coe_Ioc", ["with_bot"]], ["add", "theorem", "preimage_coe_Ioc_bot", ["with_bot"]], ["add", "theorem", "preimage_coe_Ioi", ["with_bot"]], ["add", "theorem", "preimage_coe_Ioi_bot", ["with_bot"]], ["add", "theorem", "preimage_coe_Ioo", ["with_bot"]], ["add", "theorem", "preimage_coe_Ioo_bot", ["with_bot"]], ["add", "theorem", "preimage_coe_bot", ["with_bot"]], ["add", "theorem", "range_coe", ["with_bot"]], ["add", "theorem", "image_coe_Icc", ["with_top"]], ["add", "theorem", "image_coe_Ici", ["with_top"]], ["add", "theorem", "image_coe_Ico", ["with_top"]], ["add", "theorem", "image_coe_Iic", ["with_top"]], ["add", "theorem", "image_coe_Iio", ["with_top"]], ["add", "theorem", "image_coe_Ioc", ["with_top"]], ["add", "theorem", "image_coe_Ioi", ["with_top"]], ["add", "theorem", "image_coe_Ioo", ["with_top"]], ["add", "theorem", "preimage_coe_Icc", ["with_top"]], ["add", "theorem", "preimage_coe_Ici", ["with_top"]], ["add", "theorem", "preimage_coe_Ico", ["with_top"]], ["add", "theorem", "preimage_coe_Ico_top", ["with_top"]], ["add", "theorem", "preimage_coe_Iic", ["with_top"]], ["add", "theorem", "preimage_coe_Iio", ["with_top"]], ["add", "theorem", "preimage_coe_Iio_top", ["with_top"]], ["add", "theorem", "preimage_coe_Ioc", ["with_top"]], ["add", "theorem", "preimage_coe_Ioi", ["with_top"]], ["add", "theorem", "preimage_coe_Ioo", ["with_top"]], ["add", "theorem", "preimage_coe_Ioo_top", ["with_top"]], ["add", "theorem", "preimage_coe_top", ["with_top"]], ["add", "theorem", "range_coe", ["with_top"]]]}]}, {"timestamp": 1649548442, "sha": "e4f93e6f", "message": "feat(group_theory/solvable): Golf some proofs (#13271)\nThis PR uses `solvable_of_ker_le_range` to golf some proofs.", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1649548441, "sha": "b7f7c4aa", "message": "feat(combinatorics/simple_graph/clique): Cliques (#12982)\nDefine cliques.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/clique.lean", "changes": [["add", "theorem", "mono", ["simple_graph", "is_clique"]], ["add", "theorem", "subset", ["simple_graph", "is_clique"]], ["add", "structure", "is_clique", ["simple_graph"]], ["add", "theorem", "is_clique_iff", ["simple_graph"]], ["add", "theorem", "mono", ["simple_graph", "is_n_clique"]], ["add", "structure", "is_n_clique", ["simple_graph"]], ["add", "theorem", "is_n_clique_iff", ["simple_graph"]]]}, {"oldPath": "src/data/finset/pairwise.lean", "newPath": "src/data/finset/pairwise.lean", "changes": []}]}, {"timestamp": 1649542061, "sha": "e690875d", "message": "chore(ring_theory/roots_of_unity): generalise (#13261)", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "eq_neg_one_of_two_right", ["is_primitive_root"]], ["mod", "theorem", "mem_roots_of_unity", ["is_primitive_root"]], ["mod", "theorem", "pow", ["is_primitive_root"]], ["mod", "theorem", "coe_pow", ["roots_of_unity"]]]}]}, {"timestamp": 1649542060, "sha": "38796213", "message": "feat(combinatorics/additive/salem_spencer): The sphere does not contain arithmetic progressions (#13259)\nProve that the frontier of a strictly convex closed set is Salem-Spencer. For this we need\n* simple lemmas about `same_ray`. This involves renaming `same_ray.exists_right_eq_smul`/`same_ray.exists_left_eq_smul` to `same_ray.exists_nonneg_left`/`same_ray.exists_nonneg_right`.\n* that the norm in a real normed space is injective on rays.\n* that the midpoint of two points of equal norm has smaller norm, in a strictly convex space", "changes": [{"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict_convex_space.lean", "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": [["add", "theorem", "norm_midpoint_lt_iff", []], ["add", "theorem", "not_same_ray_iff_norm_add_lt", []]]}, {"oldPath": "src/analysis/normed_space/ray.lean", "newPath": "src/analysis/normed_space/ray.lean", "changes": [["add", "theorem", "norm_inj_on_ray_left", []], ["add", "theorem", "norm_inj_on_ray_right", []], ["add", "theorem", "not_same_ray_iff_of_norm_eq", []], ["mod", "theorem", "same_ray_iff_inv_norm_smul_eq", []], ["mod", "theorem", "same_ray_iff_inv_norm_smul_eq_of_ne", []], ["mod", "theorem", "same_ray_iff_norm_smul_eq", []], ["add", "theorem", "same_ray_iff_of_norm_eq", []]]}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": [["add", "theorem", "add_salem_spencer_frontier", []], ["add", "theorem", "add_salem_spencer_sphere", []]]}, {"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": [["del", "theorem", "exists_left_eq_smul", ["same_ray"]], ["add", "theorem", "exists_nonneg_left", ["same_ray"]], ["add", "theorem", "exists_nonneg_right", ["same_ray"]], ["add", "theorem", "exists_pos_left", ["same_ray"]], ["add", "theorem", "exists_pos_right", ["same_ray"]], ["del", "theorem", "exists_right_eq_smul", ["same_ray"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "frontier_subset", ["is_closed"]]]}]}, {"timestamp": 1649542059, "sha": "b3a0f850", "message": "feat(group_theory/coset): Fintype instance for quotient by the right relation (#13257)\nThis PR adds a fintype instance for the quotient by the right relation.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "card_quotient_right_rel", ["quotient_group"]]]}]}, {"timestamp": 1649542058, "sha": "e3a8ef1c", "message": "feat(algebra/algebra/*): generalise (#13252)\nSome generalisations straight from Alex's generalisation linter, with some care about how to place them. Some `algebra` lemmas are weakened to semirings, allowing us to talk about ℕ-algebras much more easily.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "mem_algebra_map_submonoid_of_mem", ["algebra"]], ["mod", "theorem", "map_rat_algebra_map", ["ring_hom"]]]}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["mod", "theorem", "mem_span_mul_finite_of_mem_span_mul", ["submodule"]]]}, {"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["del", "theorem", "smul_sub_iff_sub_inv_smul", ["is_unit"]], ["mod", "theorem", "exists_mem_of_not_is_unit_aeval_prod", ["spectrum"]]]}, {"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/algebra/unitization.lean", "newPath": "src/algebra/algebra/unitization.lean", "changes": [["mod", "theorem", "coe_add", ["unitization"]], ["mod", "theorem", "coe_mul", ["unitization"]], ["mod", "theorem", "coe_mul_inl", ["unitization"]], ["mod", "theorem", "inl_mul_coe", ["unitization"]]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "theorem", "smul_sub_iff_sub_inv_smul", ["is_unit"]], ["mod", "theorem", "is_unit_smul_iff", []]]}]}, {"timestamp": 1649542057, "sha": "14801617", "message": "feat(group_theory/group_action/basic): Left multiplication satisfies the `quotient_action` axiom (#13249)\nThis PR adds an instance `quotient_action α H`, meaning that left multiplication satisfies the `quotient_action` axiom.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}]}, {"timestamp": 1649542056, "sha": "22b7d21f", "message": "feat(analysis/normed*): if `f → 0` and `g` is bounded, then `f * g → 0` (#13248)\nAlso drop `is_bounded_under_of_tendsto`: it's just `h.norm.is_bounded_under_le`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "op_zero_is_bounded_under_le'", ["filter", "tendsto"]], ["add", "theorem", "op_zero_is_bounded_under_le", ["filter", "tendsto"]], ["del", "theorem", "is_bounded_under_of_tendsto", []]]}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": [["add", "theorem", "mul_tendsto_zero", ["filter", "is_bounded_under_le"]], ["add", "theorem", "zero_mul_is_bounded_under_le", ["filter", "tendsto"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "smul_tendsto_zero", ["filter", "is_bounded_under"]], ["add", "theorem", "zero_smul_is_bounded_under_le", ["filter", "tendsto"]]]}]}, {"timestamp": 1649542055, "sha": "4c4e5e83", "message": "feat(analysis/locally_convex): every totally bounded set is von Neumann bounded (#13204)\nAdd one lemma and some cleanups of previous PR.", "changes": [{"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": []}, {"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["mod", "theorem", "add", ["absorbs"]], ["mod", "theorem", "absorbs_empty", []]]}, {"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "theorem", "is_vonN_bounded", ["totally_bounded"]]]}]}, {"timestamp": 1649533494, "sha": "cc65716e", "message": "refactor(analysis/complex): replace `diff_on_int_cont` with `diff_cont_on_cl` (#13148)\nUse \"differentiable on a set and continuous on its closure\" instead of \"continuous on a set and differentiable on its interior\".\nThere are a few reasons to prefer the latter:\n* it has better \"composition\" lemma;\n* it allows us to talk about functions that are, e.g., differentiable on `{z : ℂ | abs z < 1 ∧ (re z < 0 ∨ im z ≠ 0)}` and continuous on the closed unit disk.\nAlso generalize `eq_on_of_eq_on_frontier` from a compact set to a bounded set (so that it works, e.g., for the unit ball in a Banach space).\nThis PR does not move the file `diff_on_int_cont` to make the diff more readable; the file will be moved in another PR.", "changes": [{"oldPath": "src/analysis/calculus/diff_on_int_cont.lean", "newPath": "src/analysis/calculus/diff_on_int_cont.lean", "changes": [["add", "theorem", "add", ["diff_cont_on_cl"]], ["add", "theorem", "add_const", ["diff_cont_on_cl"]], ["add", "theorem", "comp", ["diff_cont_on_cl"]], ["add", "theorem", "const_add", ["diff_cont_on_cl"]], ["add", "theorem", "const_smul", ["diff_cont_on_cl"]], ["add", "theorem", "const_sub", ["diff_cont_on_cl"]], ["add", "theorem", "continuous_on_ball", ["diff_cont_on_cl"]], ["add", "theorem", "differentiable_at'", ["diff_cont_on_cl"]], ["add", "theorem", "inv", ["diff_cont_on_cl"]], ["add", "theorem", "mk_ball", ["diff_cont_on_cl"]], ["add", "theorem", "neg", ["diff_cont_on_cl"]], ["add", "theorem", "smul", ["diff_cont_on_cl"]], ["add", "theorem", "smul_const", ["diff_cont_on_cl"]], ["add", "theorem", "sub", ["diff_cont_on_cl"]], ["add", "theorem", "sub_const", ["diff_cont_on_cl"]], ["add", "structure", "diff_cont_on_cl", []], ["add", "theorem", "diff_cont_on_cl_const", []], ["add", "theorem", "diff_cont_on_cl_univ", []], ["del", "theorem", "add", ["diff_on_int_cont"]], ["del", "theorem", "add_const", ["diff_on_int_cont"]], ["del", "theorem", "comp", ["diff_on_int_cont"]], ["del", "theorem", "const_add", ["diff_on_int_cont"]], ["del", "theorem", "const_smul", ["diff_on_int_cont"]], ["del", "theorem", "const_sub", ["diff_on_int_cont"]], ["del", "theorem", "differentiable_at'", ["diff_on_int_cont"]], ["del", "theorem", "differentiable_on_ball", ["diff_on_int_cont"]], ["del", "theorem", "inv", ["diff_on_int_cont"]], ["del", "theorem", "mk_ball", ["diff_on_int_cont"]], ["del", "theorem", "neg", ["diff_on_int_cont"]], ["del", "theorem", "smul", ["diff_on_int_cont"]], ["del", "theorem", "smul_const", ["diff_on_int_cont"]], ["del", "theorem", "sub", ["diff_on_int_cont"]], ["del", "theorem", "sub_const", ["diff_on_int_cont"]], ["del", "structure", "diff_on_int_cont", []], ["del", "theorem", "diff_on_int_cont_const", []], ["del", "theorem", "diff_on_int_cont_open", []], ["del", "theorem", "diff_on_int_cont_univ", []], ["add", "theorem", "comp_diff_cont_on_cl", ["differentiable"]], ["del", "theorem", "comp_diff_on_int_cont", ["differentiable"]], ["add", "theorem", "diff_cont_on_cl", ["differentiable"]], ["del", "theorem", "diff_on_int_cont", ["differentiable"]], ["del", "theorem", "comp_diff_on_int_cont", ["differentiable_on"]], ["add", "theorem", "diff_cont_on_cl", ["differentiable_on"]], ["del", "theorem", "diff_on_int_cont", ["differentiable_on"]], ["add", "theorem", "diff_cont_on_cl_iff", ["is_closed"]]]}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": [["add", "theorem", "eq_on_closure_of_eq_on_frontier", ["complex"]], ["mod", "theorem", "eq_on_of_eq_on_frontier", ["complex"]], ["mod", "theorem", "exists_mem_frontier_is_max_on_norm", ["complex"]], ["mod", "theorem", "norm_le_of_forall_mem_frontier_norm_le", ["complex"]], ["mod", "theorem", "norm_max_aux₂", ["complex"]]]}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": [["add", "theorem", "circle_integral_sub_inv_smul", ["diff_cont_on_cl"]], ["add", "theorem", "has_fpower_series_on_ball", ["diff_cont_on_cl"]], ["del", "theorem", "circle_integral_sub_inv_smul", ["diff_on_int_cont"]], ["del", "theorem", "has_fpower_series_on_ball", ["diff_on_int_cont"]]]}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": [["mod", "theorem", "deriv_eq_smul_circle_integral", ["complex"]]]}, {"oldPath": "src/analysis/complex/schwarz.lean", "newPath": "src/analysis/complex/schwarz.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "antilipschitz_with_line_map", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "ball_inf_dist_compl_subset", ["metric"]], ["add", "theorem", "ball_inf_dist_subset_compl", ["metric"]]]}]}, {"timestamp": 1649533492, "sha": "57f382a0", "message": "feat(order/bounds): Boundedness of monotone/antitone functions (#13079)", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "image_lower_bounds_subset_upper_bounds_image", ["antitone_on"]], ["add", "theorem", "image_upper_bounds_subset_lower_bounds_image", ["antitone_on"]], ["add", "theorem", "is_lub_image_le", ["antitone_on"]], ["add", "theorem", "le_is_glb_image", ["antitone_on"]], ["add", "theorem", "map_bdd_above", ["antitone_on"]], ["add", "theorem", "map_bdd_below", ["antitone_on"]], ["add", "theorem", "map_is_greatest", ["antitone_on"]], ["add", "theorem", "map_is_least", ["antitone_on"]], ["add", "theorem", "mem_lower_bounds_image", ["antitone_on"]], ["add", "theorem", "mem_upper_bounds_image", ["antitone_on"]], ["add", "theorem", "image_lower_bounds_subset_lower_bounds_image", ["monotone_on"]], ["add", "theorem", "image_upper_bounds_subset_upper_bounds_image", ["monotone_on"]], ["add", "theorem", "is_lub_image_le", ["monotone_on"]], ["add", "theorem", "le_is_glb_image", ["monotone_on"]], ["add", "theorem", "map_bdd_above", ["monotone_on"]], ["add", "theorem", "map_bdd_below", ["monotone_on"]], ["add", "theorem", "map_is_greatest", ["monotone_on"]], ["add", "theorem", "map_is_least", ["monotone_on"]], ["add", "theorem", "mem_lower_bounds_image", ["monotone_on"]], ["add", "theorem", "mem_upper_bounds_image", ["monotone_on"]]]}]}, {"timestamp": 1649533490, "sha": "0dde2cb8", "message": "feat(data/list/chain): Lemma for `chain r a (list.range n.succ)` (#12990)", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "chain'_append_cons_cons", ["list"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "chain'_range_succ", ["list"]], ["add", "theorem", "chain_range_succ", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "exists_lt_succ", ["nat"]], ["add", "theorem", "forall_lt_succ", ["nat"]]]}]}, {"timestamp": 1649525290, "sha": "bc140d29", "message": "feat(data/polynomial/degree/lemmas): add some lemmas and rename some lemmas (#13235)\nrename `nat_degree_mul_C_eq_of_no_zero_divisors` to `nat_degree_mul_C`\nrename `nat_degree_C_mul_eq_of_no_zero_divisors` to `nat_degree_C_mul`", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "degree_C_mul", ["polynomial"]], ["add", "theorem", "degree_mul_C", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul", ["polynomial"]], ["del", "theorem", "nat_degree_C_mul_eq_of_no_zero_divisors", ["polynomial"]], ["add", "theorem", "nat_degree_mul_C", ["polynomial"]], ["del", "theorem", "nat_degree_mul_C_eq_of_no_zero_divisors", ["polynomial"]]]}]}, {"timestamp": 1649525289, "sha": "f8467aaf", "message": "feat(data/polynomial/eval): add some lemmas for `eval₂` (#13234)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "eval₂_comp", ["polynomial"]], ["add", "theorem", "eval₂_finset_prod", ["polynomial"]], ["mod", "theorem", "eval₂_hom", ["polynomial"]], ["add", "theorem", "eval₂_list_prod", ["polynomial"]], ["add", "theorem", "eval₂_list_sum", ["polynomial"]], ["add", "theorem", "eval₂_multiset_prod", ["polynomial"]], ["add", "theorem", "eval₂_multiset_sum", ["polynomial"]]]}]}, {"timestamp": 1649525288, "sha": "25d28c83", "message": "feat(group_theory/schreier): Add version of Schreier's lemma (#13231)\nThis PR adds a version of Schreier's lemma of the form `closure (_ : set H) = ⊤`, as opposed to `closure (_ : set G) = H`. This is closer to saying that `H` is finitely generated.\nI also fiddled with the names a bit.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/group_theory/schreier.lean", "newPath": "src/group_theory/schreier.lean", "changes": [["del", "theorem", "closure_mul_eq", ["subgroup"]], ["del", "theorem", "closure_mul_eq_top", ["subgroup"]], ["add", "theorem", "closure_mul_image_eq", ["subgroup"]], ["add", "theorem", "closure_mul_image_eq_top", ["subgroup"]], ["add", "theorem", "closure_mul_image_mul_eq_top", ["subgroup"]]]}]}, {"timestamp": 1649525286, "sha": "d831478d", "message": "feat(computability/encoding): Bounds on cardinality from an encoding (#13224)\nGeneralizes universe variables for `computability.encoding`\nUses a `computability.encoding` to bound the cardinality of a type", "changes": [{"oldPath": "src/computability/encoding.lean", "newPath": "src/computability/encoding.lean", "changes": [["add", "theorem", "card_le_card_list", ["computability", "encoding"]], ["add", "theorem", "card_le_omega", ["computability", "encoding"]], ["add", "theorem", "encode_injective", ["computability", "encoding"]], ["mod", "structure", "encoding", ["computability"]], ["add", "theorem", "card_le_omega", ["computability", "fin_encoding"]], ["mod", "structure", "fin_encoding", ["computability"]]]}]}, {"timestamp": 1649525285, "sha": "6abb6de9", "message": "feat(category_theory/bicategory): monoidal categories are single object bicategories (#13157)", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/End.lean", "changes": [["add", "def", "End_monoidal", ["category_theory"]]]}, {"oldPath": "src/category_theory/bicategory/basic.lean", "newPath": "src/category_theory/bicategory/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/bicategory/single_obj.lean", "changes": [["add", "def", "End_monoidal_star_functor", ["category_theory", "monoidal_single_obj"]], ["add", "def", "End_monoidal_star_functor_is_equivalence", ["category_theory", "monoidal_single_obj"]], ["add", "def", "monoidal_single_obj", ["category_theory"]]]}]}, {"timestamp": 1649525284, "sha": "823699fb", "message": "feat(linear_algebra/general_linear_group): Add some lemmas about SL to GL_pos coercions. (#12393)", "changes": [{"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": [["add", "theorem", "coe_GL_pos_coe_GL_coe_matrix", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_GL_pos_neg", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_to_GL_det", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_to_GL_pos_to_GL_det", ["matrix", "special_linear_group"]]]}]}, {"timestamp": 1649518624, "sha": "d42f6a82", "message": "chore(algebra/associated): golf irreducible_iff_prime_iff (#13267)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}]}, {"timestamp": 1649518623, "sha": "348b41d4", "message": "chore(archive/imo/imo1994_q1): tidy a bit (#13266)", "changes": [{"oldPath": "archive/imo/imo1994_q1.lean", "newPath": "archive/imo/imo1994_q1.lean", "changes": []}]}, {"timestamp": 1649518622, "sha": "1d9d1530", "message": "chore(algebraic_geometry/pullbacks): replaced some simps by simp onlys (#13258)\nThis PR optimizes the file `algebraic_geometry/pullbacks` by replacing some calls to `simp` by `simp only [⋯]`.\nThis file has a high [`sec/LOC` ratio](https://mathlib-bench.limperg.de/commit/5e98dc1cc915d3226ea293c118d2ff657b48b0dc) and is not very short, which makes it a good candidate for such optimizations attempts.\nOn my machine, these changes reduced the compile time from 2m30s to 1m20s.", "changes": [{"oldPath": "src/algebraic_geometry/pullbacks.lean", "newPath": "src/algebraic_geometry/pullbacks.lean", "changes": []}]}, {"timestamp": 1649518621, "sha": "8c7e8a4d", "message": "feat(group_theory/commutator): The commutator subgroup is characteristic (#13255)\nThis PR adds instances stating that the commutator subgroup is characteristic.", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": []}]}, {"timestamp": 1649518620, "sha": "d23fd6f7", "message": "refactor(group_theory/solvable): Golf and move `solvable_of_ker_le_range` (#13254)\nThis PR moves `solvable_of_ker_le_range` to earlier in the file so that it can be used to golf the proofs of `solvable_of_solvable_injective` and `solvable_of_surjective`.", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1649516576, "sha": "f24918e0", "message": "refactor(group_theory/solvable): Golf some proofs (#13256)\nThis PR golfs some proofs in `group_theory/solvable.lean`.", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1649507460, "sha": "d6ff44ec", "message": "feat(category_theory/faithful): map_iso_injective (#13263)", "changes": [{"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": [["del", "theorem", "equiv_of_fully_faithful_apply", ["category_theory"]], ["del", "theorem", "equiv_of_fully_faithful_symm_apply", ["category_theory"]], ["add", "theorem", "map_iso_injective", ["category_theory", "functor"]], ["add", "def", "iso_equiv_of_fully_faithful", ["category_theory"]]]}]}, {"timestamp": 1649500797, "sha": "7a0513db", "message": "feat(data/nat/*): generalize typeclass assumptions (#13260)", "changes": [{"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "map_nat_cast'", []]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}]}, {"timestamp": 1649488798, "sha": "f5ee47b6", "message": "feat(category_theory/triangulated): upgrade map_triangle to a functor (#13262)\nUseful for LTE.", "changes": [{"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": [["mod", "def", "map_triangle", ["category_theory", "triangulated", "pretriangulated", "triangulated_functor"]], ["add", "def", "id", ["category_theory", "triangulated", "pretriangulated", "triangulated_functor_struct"]], ["mod", "def", "map_triangle", ["category_theory", "triangulated", "pretriangulated", "triangulated_functor_struct"]]]}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": [["mod", "def", "from_inv_rotate_rotate", ["category_theory", "triangulated"]], ["mod", "def", "from_rotate_inv_rotate", ["category_theory", "triangulated"]], ["mod", "def", "inv_rot_comp_rot", ["category_theory", "triangulated"]], ["mod", "def", "inv_rot_comp_rot_hom", ["category_theory", "triangulated"]], ["mod", "def", "inv_rot_comp_rot_inv", ["category_theory", "triangulated"]], ["mod", "def", "inv_rotate", ["category_theory", "triangulated"]], ["mod", "def", "rot_comp_inv_rot", ["category_theory", "triangulated"]], ["mod", "def", "rot_comp_inv_rot_hom", ["category_theory", "triangulated"]], ["mod", "def", "rot_comp_inv_rot_inv", ["category_theory", "triangulated"]], ["mod", "def", "rotate", ["category_theory", "triangulated"]], ["mod", "def", "to_inv_rotate_rotate", ["category_theory", "triangulated"]], ["mod", "def", "to_rotate_inv_rotate", ["category_theory", "triangulated"]]]}]}, {"timestamp": 1649486235, "sha": "a98a26b2", "message": "chore(measure_theory): move lemmas about `ae_measurable` to a new file (#13246)", "changes": [{"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/lattice.lean", "newPath": "src/measure_theory/lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/measure/ae_measurable.lean", "changes": [["add", "theorem", "add_measure", ["ae_measurable"]], ["add", "theorem", "ae_inf_principal_eq_mk", ["ae_measurable"]], ["add", "theorem", "ae_mem_imp_eq_mk", ["ae_measurable"]], ["add", "theorem", "comp_measurable'", ["ae_measurable"]], ["add", "theorem", "comp_measurable", ["ae_measurable"]], ["add", "theorem", "exists_ae_eq_range_subset", ["ae_measurable"]], ["add", "theorem", "indicator", ["ae_measurable"]], ["add", "theorem", "mono_measure", ["ae_measurable"]], ["add", "theorem", "mono_set", ["ae_measurable"]], ["add", "theorem", "prod_mk", ["ae_measurable"]], ["add", "theorem", "restrict", ["ae_measurable"]], ["add", "theorem", "smul_measure", ["ae_measurable"]], ["add", "theorem", "subtype_mk", ["ae_measurable"]], ["add", "theorem", "sum_measure", ["ae_measurable"]], ["add", "theorem", "ae_measurable_Union_iff", []], ["add", "theorem", "ae_measurable_add_measure_iff", []], ["add", "theorem", "ae_measurable_iff_measurable", []], ["add", "theorem", "ae_measurable_indicator_iff", []], ["add", "theorem", "ae_measurable_interval_oc_iff", []], ["add", "theorem", "ae_measurable_map_equiv_iff", []], ["add", "theorem", "ae_measurable_of_ae_measurable_trim", []], ["add", "theorem", "ae_measurable_of_subsingleton_codomain", []], ["add", "theorem", "ae_measurable_one", []], ["add", "theorem", "ae_measurable_restrict_iff_comap_subtype", []], ["add", "theorem", "ae_measurable_restrict_of_measurable_subtype", []], ["add", "theorem", "ae_measurable_smul_measure_iff", []], ["add", "theorem", "ae_measurable_sum_measure_iff", []], ["add", "theorem", "ae_measurable_union_iff", []], ["add", "theorem", "ae_measurable_zero_measure", []], ["add", "theorem", "ae_measurable_comp_iff", ["measurable_embedding"]], ["add", "theorem", "ae_measurable_map_iff", ["measurable_embedding"]], ["add", "theorem", "ae_measurable", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "add_measure", ["ae_measurable"]], ["del", "theorem", "ae_inf_principal_eq_mk", ["ae_measurable"]], ["del", "theorem", "ae_mem_imp_eq_mk", ["ae_measurable"]], ["del", "theorem", "comp_measurable'", ["ae_measurable"]], ["del", "theorem", "comp_measurable", ["ae_measurable"]], ["del", "theorem", "exists_ae_eq_range_subset", ["ae_measurable"]], ["del", "theorem", "indicator", ["ae_measurable"]], ["del", "theorem", "mono_measure", ["ae_measurable"]], ["del", "theorem", "mono_set", ["ae_measurable"]], ["del", "theorem", "prod_mk", ["ae_measurable"]], ["del", "theorem", "restrict", ["ae_measurable"]], ["del", "theorem", "smul_measure", ["ae_measurable"]], ["del", "theorem", "subtype_mk", ["ae_measurable"]], ["del", "theorem", "sum_measure", ["ae_measurable"]], ["del", "theorem", "ae_measurable_Union_iff", []], ["del", "theorem", "ae_measurable_add_measure_iff", []], ["del", "theorem", "ae_measurable_iff_measurable", []], ["del", "theorem", "ae_measurable_indicator_iff", []], ["del", "theorem", "ae_measurable_interval_oc_iff", []], ["del", "theorem", "ae_measurable_map_equiv_iff", []], ["del", "theorem", "ae_measurable_of_ae_measurable_trim", []], ["del", "theorem", "ae_measurable_of_subsingleton_codomain", []], ["del", "theorem", "ae_measurable_one", []], ["del", "theorem", "ae_measurable_restrict_iff_comap_subtype", []], ["del", "theorem", "ae_measurable_restrict_of_measurable_subtype", []], ["del", "theorem", "ae_measurable_smul_measure_iff", []], ["del", "theorem", "ae_measurable_sum_measure_iff", []], ["del", "theorem", "ae_measurable_union_iff", []], ["del", "theorem", "ae_measurable_zero_measure", []], ["del", "theorem", "ae_measurable_comp_iff", ["measurable_embedding"]], ["del", "theorem", "ae_measurable_map_iff", ["measurable_embedding"]], ["del", "theorem", "ae_measurable", ["subsingleton"]]]}]}, {"timestamp": 1649483204, "sha": "59cf3675", "message": "chore(analysis/special_functions/pow): golf a proof (#13247)\n`complex.continuous_at_cpow_const` follows from `complex.continuous_at_cpow`.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}]}, {"timestamp": 1649462525, "sha": "2a04ec03", "message": "feat(data/list/big_operators): More lemmas about alternating product (#13195)\nA few more lemmas about `list.alternating_prod` and `list.alternating_sum` and a proof that 11 divides even length base 10 palindromes.\nAlso rename `palindrome` to `list.palindrome` (as it should have been).", "changes": [{"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "alternating_prod_append", ["list"]], ["add", "theorem", "alternating_prod_cons'", ["list"]], ["add", "theorem", "alternating_prod_cons", ["list"]], ["add", "theorem", "alternating_prod_cons_cons'", ["list"]], ["mod", "theorem", "alternating_prod_cons_cons", ["list"]], ["mod", "theorem", "alternating_prod_nil", ["list"]], ["add", "theorem", "alternating_prod_reverse", ["list"]], ["mod", "theorem", "alternating_prod_singleton", ["list"]], ["del", "theorem", "alternating_sum_cons_cons", ["list"]]]}, {"oldPath": "src/data/list/palindrome.lean", "newPath": "src/data/list/palindrome.lean", "changes": [["add", "theorem", "append_reverse", ["list", "palindrome"]], ["add", "theorem", "iff_reverse_eq", ["list", "palindrome"]], ["add", "theorem", "of_reverse_eq", ["list", "palindrome"]], ["add", "theorem", "reverse_eq", ["list", "palindrome"]], ["add", "inductive", "palindrome", ["list"]], ["del", "theorem", "append_reverse", ["palindrome"]], ["del", "theorem", "iff_reverse_eq", ["palindrome"]], ["del", "theorem", "of_reverse_eq", ["palindrome"]], ["del", "theorem", "reverse_eq", ["palindrome"]], ["del", "inductive", "palindrome", []]]}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["mod", "theorem", "eleven_dvd_iff", ["nat"]], ["add", "theorem", "eleven_dvd_of_palindrome", ["nat"]]]}]}, {"timestamp": 1649454699, "sha": "485d6484", "message": "feat(algebra/big_operators): some big operator lemmas (#13066)\nNote that `prod_coe_sort` is essentially `prod_finset_coe` restated with the relatively new `finset.has_coe_to_sort`. I can also place `prod_finset_coe` with `prod_coe_sort` if we prefer.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_coe_sort", ["finset"]], ["add", "theorem", "prod_coe_sort_eq_attach", ["finset"]], ["del", "theorem", "prod_finset_coe", ["fintype"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "erase_insert_eq_erase", ["finset"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}]}, {"timestamp": 1649438439, "sha": "9498beac", "message": "feat(group_theory/group_action/fixing_subgroup): add lemmas about fixing_subgroup (#13202)\n- pull back here the definition of fixing_subgroup and fixing_submonoid from field_theory.galois\n- add lemmas about fixing_subgroup or fixing_submonoid in the context of mul_action\n- add Galois connection relating it with fixed_points.", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["del", "def", "fixing_subgroup", []], ["del", "def", "fixing_submonoid", []]]}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": [["add", "theorem", "mem_fixing_subgroup_iff", ["intermediate_field"]], ["del", "theorem", "mem_fixing_subgroup_iff", []]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/fixing_subgroup.lean", "changes": [["add", "theorem", "fixed_points_antitone", []], ["add", "theorem", "fixed_points_subgroup_antitone", []], ["add", "theorem", "fixed_points_subgroup_sup", []], ["add", "theorem", "fixed_points_subgroup_supr", []], ["add", "theorem", "fixed_points_submonoid_sup", []], ["add", "theorem", "fixed_points_submonoid_supr", []], ["add", "def", "fixing_subgroup", []], ["add", "theorem", "fixing_subgroup_Union", []], ["add", "theorem", "fixing_subgroup_antitone", []], ["add", "theorem", "fixing_subgroup_fixed_points_gc", []], ["add", "theorem", "fixing_subgroup_union", []], ["add", "def", "fixing_submonoid", []], ["add", "theorem", "fixing_submonoid_Union", []], ["add", "theorem", "fixing_submonoid_antitone", []], ["add", "theorem", "fixing_submonoid_fixed_points_gc", []], ["add", "theorem", "fixing_submonoid_union", []], ["add", "theorem", "mem_fixing_subgroup_iff", []], ["add", "theorem", "mem_fixing_submonoid_iff", []]]}]}, {"timestamp": 1649432462, "sha": "ed266e51", "message": "feat(category_theory/limits/terminal): limit of the constant terminal functor (#13238)\nNeeded in LTE.", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "colimit_const_initial", ["category_theory", "limits"]], ["add", "def", "limit_const_terminal", ["category_theory", "limits"]], ["add", "theorem", "limit_const_terminal_inv_π", ["category_theory", "limits"]], ["add", "theorem", "ι_colimit_const_initial_hom", ["category_theory", "limits"]]]}]}, {"timestamp": 1649432461, "sha": "afa9be28", "message": "feat(category_theory/limits/pullbacks): missing simp lemmas (#13237)\nAbsence noted in LTE.", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "theorem", "cospan_comp_iso_app_left", ["category_theory", "limits"]], ["mod", "theorem", "cospan_comp_iso_app_one", ["category_theory", "limits"]], ["mod", "theorem", "cospan_comp_iso_app_right", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_hom_app_left", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_hom_app_one", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_hom_app_right", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_inv_app_left", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_inv_app_one", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_inv_app_right", ["category_theory", "limits"]], ["mod", "theorem", "cospan_ext_app_left", ["category_theory", "limits"]], ["mod", "theorem", "cospan_ext_app_one", ["category_theory", "limits"]], ["mod", "theorem", "cospan_ext_app_right", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_hom_app_left", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_hom_app_one", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_hom_app_right", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_inv_app_left", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_inv_app_one", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_inv_app_right", ["category_theory", "limits"]], ["mod", "theorem", "span_comp_iso_app_left", ["category_theory", "limits"]], ["mod", "theorem", "span_comp_iso_app_right", ["category_theory", "limits"]], ["mod", "theorem", "span_comp_iso_app_zero", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_hom_app_left", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_hom_app_right", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_hom_app_zero", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_inv_app_left", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_inv_app_right", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_inv_app_zero", ["category_theory", "limits"]], ["mod", "theorem", "span_ext_app_left", ["category_theory", "limits"]], ["mod", "theorem", "span_ext_app_one", ["category_theory", "limits"]], ["mod", "theorem", "span_ext_app_right", ["category_theory", "limits"]], ["add", "theorem", "span_ext_hom_app_left", ["category_theory", "limits"]], ["add", "theorem", "span_ext_hom_app_right", ["category_theory", "limits"]], ["add", "theorem", "span_ext_hom_app_zero", ["category_theory", "limits"]], ["add", "theorem", "span_ext_inv_app_left", ["category_theory", "limits"]], ["add", "theorem", "span_ext_inv_app_right", ["category_theory", "limits"]], ["add", "theorem", "span_ext_inv_app_zero", ["category_theory", "limits"]]]}]}, {"timestamp": 1649432459, "sha": "05213440", "message": "feat(analysis/locally_convex/basic): add lemmas about finite unions for absorbs (#13236)\n- Lemma for absorbing sets and addition\n- Two Lemmas for absorbing sets as finite unions (set.finite and finset variant)\n- Lemma for absorbent sets absorb finite sets.", "changes": [{"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["add", "theorem", "absorbs_finite", ["absorbent"]], ["add", "theorem", "add", ["absorbs"]], ["add", "theorem", "absorbs_Union_finset", []], ["add", "theorem", "absorbs_Union", ["set", "finite"]]]}]}, {"timestamp": 1649432458, "sha": "0831e4f1", "message": "feat(data/polynomial/degree/definitions): add `degree_monoid_hom` (#13233)\nIt will be used to simplify the proof of some lemmas.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "def", "degree_monoid_hom", ["polynomial"]]]}]}, {"timestamp": 1649425544, "sha": "f5d4fa19", "message": "feat(data/fintype/basic): add `fintype_of_{equiv,option}` (#13086)\n`fintype_of_option_equiv` was extracted from @huynhtrankhanh's https://github.com/leanprover-community/mathlib/pull/11162, moved here to a separate PR. The split into `fintype_of_option` and `fintype_of_equiv` is based on a comment on that PR by @jcommelin.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "def", "fintype_of_option", []], ["add", "def", "fintype_of_option_equiv", []]]}]}, {"timestamp": 1649425543, "sha": "d96e17df", "message": "feat(data/multiset/basic): add `map_le_map_iff` and `map_embedding` (#13082)\nAdds lemmas `map_le_map_iff : s.map f ≤ t.map f ↔ s ≤ t` and `map_embedding : multiset α ↪o multiset β` for embedding `f`.\nExtracted from @huynhtrankhanh's #11162, moved here to a separate PR", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "def", "map_embedding", ["multiset"]], ["add", "theorem", "map_le_map_iff", ["multiset"]]]}]}, {"timestamp": 1649425541, "sha": "5acaeaf4", "message": "chore(computability/language): Golf (#13039)\nGolf the `semiring` instance using the `set.image2` API, add half missing docstring.", "changes": [{"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": [["mod", "theorem", "mem_one", ["language"]], ["mod", "theorem", "mul_def", ["language"]], ["add", "theorem", "nil_mem_one", ["language"]], ["add", "theorem", "not_mem_zero", ["language"]]]}]}, {"timestamp": 1649425540, "sha": "2569ad52", "message": "feat(data/set/intervals/basic): An open interval of a dense order has no maximum/minimum (#12924)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}]}, {"timestamp": 1649419967, "sha": "91ce04d4", "message": "chore(model_theory/encoding): Move the encoding for terms to its own file (#13223)\nMoves the declarations about encodings and cardinality of terms to their own file, `model_theory/encoding`", "changes": [{"oldPath": null, "newPath": "src/model_theory/encoding.lean", "changes": [["add", "theorem", "card_le", ["first_order", "language", "term"]], ["add", "theorem", "card_le_omega", ["first_order", "language", "term"]], ["add", "def", "list_decode", ["first_order", "language", "term"]], ["add", "theorem", "list_decode_encode_list", ["first_order", "language", "term"]], ["add", "def", "list_encode", ["first_order", "language", "term"]], ["add", "theorem", "list_encode_injective", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["del", "theorem", "card_le", ["first_order", "language", "term"]], ["del", "theorem", "card_le_omega", ["first_order", "language", "term"]], ["del", "def", "list_decode", ["first_order", "language", "term"]], ["del", "theorem", "list_decode_encode_list", ["first_order", "language", "term"]], ["del", "def", "list_encode", ["first_order", "language", "term"]], ["del", "theorem", "list_encode_injective", ["first_order", "language", "term"]]]}]}, {"timestamp": 1649419966, "sha": "ed688546", "message": "feat(model_theory/*): Theory of nonempty structures and bundling elementary substructures (#13118)\nDefines a sentence and theory to indicate a structure is nonempty\nDefines a map to turn elementary substructures of a bundled model into bundled models", "changes": [{"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": [["add", "def", "to_Model", ["first_order", "language", "elementary_substructure"]]]}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["add", "theorem", "Theory_model_iff", ["first_order", "language", "elementary_substructure"]], ["add", "theorem", "realize_sentence", ["first_order", "language", "elementary_substructure"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "model_nonempty_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "realize_nonempty", ["first_order", "language", "sentence"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}]}, {"timestamp": 1649419965, "sha": "710fe040", "message": "feat(model_theory/order): Defines ordered languages and structures (#13088)\nDefines ordered languages and ordered structures\nDefines the theories of pre-, partial, and linear orders, shows they are modeled by the respective structures.", "changes": [{"oldPath": null, "newPath": "src/model_theory/order.lean", "changes": [["add", "def", "is_ordered_structure", ["first_order", "language"]], ["add", "def", "order_Lhom", ["first_order", "language"]], ["add", "theorem", "order_Lhom_order", ["first_order", "language"]], ["add", "def", "le", ["first_order", "language", "term"]]]}]}, {"timestamp": 1649419964, "sha": "7340720c", "message": "feat(group_theory/group_action/basic): Add typeclass for actions that descend to the quotient (#12999)\nPart of #12848.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}]}, {"timestamp": 1649418003, "sha": "851b3200", "message": "feat(ring_theory/localization): b is linear independent over R iff l.i. over `Frac(R)` (#13041)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/localization/module.lean", "changes": [["add", "theorem", "iff_fraction_ring", ["linear_independent"]], ["add", "theorem", "localization", ["linear_independent"]]]}]}, {"timestamp": 1649403733, "sha": "7d417154", "message": "feat(archive/imo/imo2008_q3): golf (#13232)", "changes": [{"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}]}, {"timestamp": 1649403732, "sha": "e85dc17a", "message": "feat(group_theory/subgroup/basic): The centralizer of a characteristic subgroup is characteristic (#13230)\nThis PR proves that the centralizer of a characteristic subgroup is characteristic.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}]}, {"timestamp": 1649403730, "sha": "95ebbadb", "message": "refactor(group_theory/commutator): Move `commutator_le_map_commutator` (#13229)\n`commutator_le_map_commutator` is a general lemma about commutators, so it should be moved from `solvable.lean` to `commutator.lean`.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_le_map_commutator", ["subgroup"]]]}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["del", "theorem", "commutator_le_map_commutator", []]]}]}, {"timestamp": 1649403729, "sha": "1a4203a9", "message": "feat(group_theory/coset): Right cosets are in bijection with left cosets (#13228)\nRight cosets are in bijection with left cosets. This came up in some work involving right transversals.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "def", "quotient_right_rel_equiv_quotient_left_rel", ["quotient_group"]]]}]}, {"timestamp": 1649403728, "sha": "499a4a89", "message": "feat(group_theory/index): `fintype_of_index_ne_zero` (#13225)\nThis PR adds `fintype_of_index_ne_zero`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": []}]}, {"timestamp": 1649398458, "sha": "ccf3e37f", "message": "feat(ring_theory/unique_factorization_domain): alternative specification for `count (normalized_factors x)` (#13161)\n`count_normalized_factors_eq` specifies the number of times an irreducible factor `p` appears in `normalized_factors x`, namely the number of times it divides `x`. This is often easier to work with than going through `multiplicity` since this way we avoid coercing to `enat`.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "count_normalized_factors_eq", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1649398457, "sha": "0c424e95", "message": "refactor(analysis/normed_space/conformal_linear_map): redefine (#13143)\nUse equality of bundled maps instead of coercions to functions in the definition of `is_conformal_map`. Also golf some proofs.", "changes": [{"oldPath": "src/analysis/calculus/conformal/normed_space.lean", "newPath": "src/analysis/calculus/conformal/normed_space.lean", "changes": [["add", "theorem", "conformal_at", ["subsingleton"]]]}, {"oldPath": "src/analysis/complex/conformal.lean", "newPath": "src/analysis/complex/conformal.lean", "changes": [["mod", "theorem", "is_conformal_map_complex_linear", []]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": [["mod", "theorem", "conformal_at", ["differentiable_at"]]]}, {"oldPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "newPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "changes": [["mod", "theorem", "is_conformal_map_iff", []]]}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": [["mod", "theorem", "comp", ["is_conformal_map"]], ["del", "theorem", "injective", ["is_conformal_map"]], ["add", "theorem", "smul", ["is_conformal_map"]], ["mod", "theorem", "is_conformal_map_const_smul", []], ["mod", "theorem", "is_conformal_map_of_subsingleton", []], ["del", "theorem", "is_conformal_map", ["linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_mk", ["linear_isometry"]], ["add", "theorem", "id_to_continuous_linear_map", ["linear_isometry"]]]}]}, {"timestamp": 1649398456, "sha": "036fc996", "message": "feat(topology/uniform_space/uniform_convergence): add `tendsto_uniformly_iff_seq_tendsto_uniformly` (#13128)\nFor countably generated filters, uniform convergence is equivalent to uniform convergence of sub-sequences.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_iff_seq_eventually", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "prod", ["filter", "has_antitone_basis"]]]}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "tendsto_uniformly_iff_seq_tendsto_uniformly", []], ["add", "theorem", "seq_tendsto_uniformly_on", ["tendsto_uniformly_on"]], ["add", "theorem", "tendsto_uniformly_on_iff_seq_tendsto_uniformly_on", []], ["add", "theorem", "tendsto_uniformly_on_of_seq_tendsto_uniformly_on", []]]}]}, {"timestamp": 1649398455, "sha": "ab60244a", "message": "feat(model_theory/basic,bundled): Structures induced by equivalences (#13124)\nDefines `equiv.induced_Structure`, a structure on the codomain of a bijection that makes the bijection an isomorphism.\nDefines maps on bundled models to shift them along bijections and up and down universes.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "induced_Structure", ["equiv"]], ["add", "def", "induced_Structure_equiv", ["equiv"]]]}, {"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": [["add", "def", "equiv_induced", ["first_order", "language", "Theory", "Model"]], ["add", "def", "ulift", ["first_order", "language", "Theory", "Model"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "Theory_model", ["first_order", "language", "equiv"]], ["mod", "theorem", "realize_bounded_formula", ["first_order", "language", "equiv"]], ["mod", "theorem", "realize_formula", ["first_order", "language", "equiv"]], ["add", "theorem", "realize_sentence", ["first_order", "language", "equiv"]]]}]}, {"timestamp": 1649394825, "sha": "9f3e7fba", "message": "feat(category_theory/limits): further API for commuting limits (#13215)\nNeeded for LTE.", "changes": [{"oldPath": "src/category_theory/functor/currying.lean", "newPath": "src/category_theory/functor/currying.lean", "changes": [["add", "def", "uncurry_obj_flip", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": [["add", "def", "limit_flip_comp_lim_iso_limit_comp_lim", ["category_theory", "limits"]], ["add", "theorem", "limit_flip_comp_lim_iso_limit_comp_lim_hom_π_π", ["category_theory", "limits"]], ["add", "theorem", "limit_flip_comp_lim_iso_limit_comp_lim_inv_π_π", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["add", "theorem", "iso_of_nat_iso_inv_desc", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "iso_of_nat_iso_ι_inv", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "iso_of_nat_iso_inv_π", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "lift_iso_of_nat_iso_inv", ["category_theory", "limits", "has_limit"]]]}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": [["add", "theorem", "cocone_points_iso_of_nat_iso_inv_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "lift_comp_cone_points_iso_of_nat_iso_inv", ["category_theory", "limits", "is_limit"]]]}]}, {"timestamp": 1649383593, "sha": "5e98dc1c", "message": "feat(topology/continuous_function/zero_at_infty): add more instances for zero_at_infty_continuous_map and establish C₀ functorial properties (#13196)\nThis adds more instances for the type `C₀(α, β)` of continuous functions vanishing at infinity. Notably, these new instances include its non-unital ring, normed space and star structures, culminating with `cstar_ring` when `β` is a `cstar_ring` which is also a `topological_ring`.\nIn addition, this establishes functorial properties of `C₀(-, β)` for various choices of algebraic categories involving `β`. The domain of these (contravariant) functors is the category of topological spaces with cocompact continuous maps, and the functor applied to a cocompact map is given by pre-composition.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/cocompact_map.lean", "newPath": "src/topology/continuous_function/cocompact_map.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/zero_at_infty.lean", "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": [["add", "theorem", "coe_comp_to_continuous_fun", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_star", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_to_bcf_add_monoid_hom", ["zero_at_infty_continuous_map"]], ["add", "def", "comp", ["zero_at_infty_continuous_map"]], ["add", "def", "comp_add_monoid_hom", ["zero_at_infty_continuous_map"]], ["add", "theorem", "comp_assoc", ["zero_at_infty_continuous_map"]], ["add", "theorem", "comp_id", ["zero_at_infty_continuous_map"]], ["add", "def", "comp_linear_map", ["zero_at_infty_continuous_map"]], ["add", "def", "comp_mul_hom", ["zero_at_infty_continuous_map"]], ["add", "def", "comp_non_unital_alg_hom", ["zero_at_infty_continuous_map"]], ["add", "theorem", "norm_to_bcf_eq_norm", ["zero_at_infty_continuous_map"]], ["add", "theorem", "star_apply", ["zero_at_infty_continuous_map"]], ["add", "def", "to_bcf_add_monoid_hom", ["zero_at_infty_continuous_map"]], ["add", "theorem", "to_bcf_injective", ["zero_at_infty_continuous_map"]], ["del", "theorem", "to_bounded_continuous_function_injective", ["zero_at_infty_continuous_map"]], ["add", "theorem", "zero_comp", ["zero_at_infty_continuous_map"]]]}]}, {"timestamp": 1649377617, "sha": "0719b36a", "message": "feat(category_theory/limits/shapes): isomorphisms of (co)spans (#13216)", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "cospan_comp_iso", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_app_left", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_app_one", ["category_theory", "limits"]], ["add", "theorem", "cospan_comp_iso_app_right", ["category_theory", "limits"]], ["add", "def", "cospan_ext", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_app_left", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_app_one", ["category_theory", "limits"]], ["add", "theorem", "cospan_ext_app_right", ["category_theory", "limits"]], ["add", "def", "span_comp_iso", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_app_left", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_app_right", ["category_theory", "limits"]], ["add", "theorem", "span_comp_iso_app_zero", ["category_theory", "limits"]], ["add", "def", "span_ext", ["category_theory", "limits"]], ["add", "theorem", "span_ext_app_left", ["category_theory", "limits"]], ["add", "theorem", "span_ext_app_one", ["category_theory", "limits"]], ["add", "theorem", "span_ext_app_right", ["category_theory", "limits"]]]}]}, {"timestamp": 1649377616, "sha": "b8971152", "message": "chore(algebra/associated): generalisation linter (#13108)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "bot_eq_one", ["associates"]], ["mod", "theorem", "mk_injective", ["associates"]], ["mod", "theorem", "mk_one", ["associates"]], ["mod", "theorem", "is_unit_of_irreducible_right", ["dvd_not_unit"]], ["mod", "theorem", "not_unit", ["dvd_not_unit"]], ["mod", "theorem", "dvd_not_unit_of_dvd_not_unit_associated", []], ["mod", "theorem", "not_irreducible_of_not_unit_dvd_not_unit", []]]}]}, {"timestamp": 1649370706, "sha": "cae51646", "message": "chore(algebra/order/{monoid,ring}): missing typeclasses about `*` and `+` on `order_dual` (#13004)", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}]}, {"timestamp": 1649363573, "sha": "02a25602", "message": "feat(analysis/normed_space/add_torsor_bases): add `convex.interior_nonempty_iff_affine_span_eq_top` (#13220)\nGeneralize `interior_convex_hull_nonempty_iff_aff_span_eq_top` to any\nconvex set, not necessarily written as the convex hull of a set.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["add", "theorem", "interior_nonempty_iff_affine_span_eq_top", ["convex"]]]}]}, {"timestamp": 1649363572, "sha": "0f4d0ae4", "message": "feat(data/polynomial/identities): golf using `linear_combination` (#13212)", "changes": [{"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}]}, {"timestamp": 1649363571, "sha": "3b04f48c", "message": "feat(number_theory/fermat4): golf using `linear_combination` (#13211)", "changes": [{"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}]}, {"timestamp": 1649363570, "sha": "82d1e9f8", "message": "feat(algebra/quadratic_discriminant): golf using `linear_combination` (#13210)", "changes": [{"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}]}, {"timestamp": 1649356907, "sha": "4ff75f5b", "message": "refactor(category_theory/bicategory): set simp-normal form for 2-morphisms (#13185)\n## Problem\nThe definition of bicategories contains the following axioms:\n```lean\nassociator_naturality_left : ∀ {f f' : a ⟶ b} (η : f ⟶ f') (g : b ⟶ c) (h : c ⟶ d),\n (η ▷ g) ▷ h ≫ (α_ f' g h).hom = (α_ f g h).hom ≫ η ▷ (g ≫ h)\nassociator_naturality_middle : ∀ (f : a ⟶ b) {g g' : b ⟶ c} (η : g ⟶ g') (h : c ⟶ d),\n (f ◁ η) ▷ h ≫ (α_ f g' h).hom = (α_ f g h).hom ≫ f ◁ (η ▷ h)\nassociator_naturality_right : ∀ (f : a ⟶ b) (g : b ⟶ c) {h h' : c ⟶ d} (η : h ⟶ h'),\n (f ≫ g) ◁ η ≫ (α_ f g h').hom = (α_ f g h).hom ≫ f ◁ (g ◁ η) \nleft_unitor_naturality : ∀ {f g : a ⟶ b} (η : f ⟶ g),\n 𝟙 a ◁ η ≫ (λ_ g).hom = (λ_ f).hom ≫ η\nright_unitor_naturality : ∀ {f g : a ⟶ b} (η : f ⟶ g) :\n η ▷ 𝟙 b ≫ (ρ_ g).hom = (ρ_ f).hom ≫ η\n```\nBy using these axioms, we can see that, for example, 2-morphisms `(f₁ ≫ f₂) ◁ (f₃ ◁ (η ▷ (f₄ ≫ f₅)))` and `f₁ ◁ ((𝟙_ ≫ f₂ ≫ f₃) ◁ ((η ▷ f₄) ▷ f₅))` are equal up to some associators and unitors. The problem is that the proof of this fact requires tedious rewriting. We should insert appropriate associators and unitors, and then rewrite using the above axioms manually.\nThis tedious rewriting is also a problem when we use the (forthcoming) `coherence` tactic (bicategorical version of #13125), which only works if the non-structural 2-morphisms in the LHS and the RHS are the same.\n## Main change\nThe main proposal of this PR is to introduce a normal form of such 2-morphisms, and put simp attributes to suitable lemmas in order to rewrite any 2-morphism into the normal form. For example, the normal form of the previouse example is `f₁ ◁ (f₂ ◁ (f₃ ◁ ((η ▷ f₄) ▷ f₅)))`. The precise definition of the normal form can be found in the docs in `basic.lean` file. The new simp lemmas introduced in this PR are the following:\n```lean\nwhisker_right_comp : ∀ {f f' : a ⟶ b} (η : f ⟶ f') (g : b ⟶ c) (h : c ⟶ d),\n η ▷ (g ≫ h) = (α_ f g h).inv ≫ η ▷ g ▷ h ≫ (α_ f' g h).hom \nwhisker_assoc : ∀ (f : a ⟶ b) {g g' : b ⟶ c} (η : g ⟶ g') (h : c ⟶ d),\n (f ◁ η) ▷ h = (α_ f g h).hom ≫ f ◁ (η ▷ h) ≫ (α_ f g' h).inv\ncomp_whisker_left : ∀ (f : a ⟶ b) (g : b ⟶ c) {h h' : c ⟶ d} (η : h ⟶ h'),\n (f ≫ g) ◁ η = (α_ f g h).hom ≫ f ◁ g ◁ η ≫ (α_ f g h').inv\nid_whisker_left : ∀ {f g : a ⟶ b} (η : f ⟶ g),\n 𝟙 a ◁ η = (λ_ f).hom ≫ η ≫ (λ_ g).inv\nwhisker_right_id : ∀ {f g : a ⟶ b} (η : f ⟶ g),\n η ▷ 𝟙 b = (ρ_ f).hom ≫ η ≫ (ρ_ g).inv\n```\nLogically, these are equivalent to the five axioms presented above. The point is that these equalities have the definite simplification direction.\n## Improvement \nSome proofs that had been based on tedious rewriting are now automated. For example, the conditions in `oplax_nat_trans.id`, `oplax_nat_trans.comp`, and several functions in `functor_bicategory.lean` are now proved by `tidy`.\n## Specific changes\n- The new simp lemmas `whisker_right_comp` etc. actually have been included in the definition of bicategories instead of `associate_naturality_left` etc. so that the latter lemmas are proved in later of the file just by `simp`.\n- The precedence of the whiskering notations \"infixr ` ◁ `:70\" and \"infixr ` ◁ `:70\" have been changed into \"infixr ` ◁ `:81\" and \"infixr ` ◁ `:81\", which is now higher than that of the composition `≫`. This setting is consistent with the normal form introduced in this PR in the sence that an expression is in normal form only if it has the minimal number of parentheses in this setting. For example, the normal form `f₁ ◁ (f₂ ◁ (f₃ ◁ ((η ▷ f₄) ▷ f₅)))` can be written as `f₁ ◁ f₂ ◁ f₃ ◁ η ▷ f₄ ▷ f₅`.\n- The unneeded parentheses caused by the precedence change have been removed.\n- The lemmas `whisker_right_id` and `whisker_right_comp` have been renamed to `id_whisker_right` and `comp_whisker_right` since these are more consistent with the notation. Note that the name `whisker_right_id` and `whisker_right_comp` are now used for the two of the five simp lemmas presented above.\n- The lemmas in `basic.lean` have been rearranged to be more logically consistent.\n## Future work\nI would like to apply a similar strategy for monoidal categories.", "changes": [{"oldPath": "src/category_theory/bicategory/basic.lean", "newPath": "src/category_theory/bicategory/basic.lean", "changes": [["del", "theorem", "associator_conjugation_left", ["category_theory", "bicategory"]], ["del", "theorem", "associator_conjugation_middle", ["category_theory", "bicategory"]], ["del", "theorem", "associator_conjugation_right", ["category_theory", "bicategory"]], ["del", "theorem", "associator_inv_conjugation_left", ["category_theory", "bicategory"]], ["del", "theorem", "associator_inv_conjugation_middle", ["category_theory", "bicategory"]], ["del", "theorem", "associator_inv_conjugation_right", ["category_theory", "bicategory"]], ["add", "theorem", "associator_naturality_left", ["category_theory", "bicategory"]], ["add", "theorem", "associator_naturality_middle", ["category_theory", "bicategory"]], ["add", "theorem", "associator_naturality_right", ["category_theory", "bicategory"]], ["add", "theorem", "comp_whisker_left_symm", ["category_theory", "bicategory"]], ["add", "theorem", "id_whisker_left_symm", ["category_theory", "bicategory"]], ["del", "theorem", "left_unitor_comp'", ["category_theory", "bicategory"]], ["del", "theorem", "left_unitor_comp_inv'", ["category_theory", "bicategory"]], ["del", "theorem", "left_unitor_conjugation", ["category_theory", "bicategory"]], ["mod", "theorem", "left_unitor_inv_naturality", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_naturality", ["category_theory", "bicategory"]], ["del", "theorem", "right_unitor_conjugation", ["category_theory", "bicategory"]], ["mod", "theorem", "right_unitor_inv_naturality", ["category_theory", "bicategory"]], ["add", "theorem", "right_unitor_naturality", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_assoc_symm", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_right_comp_symm", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_right_id_symm", ["category_theory", "bicategory"]]]}, {"oldPath": "src/category_theory/bicategory/coherence.lean", "newPath": "src/category_theory/bicategory/coherence.lean", "changes": [["add", "theorem", "preinclusion_obj", ["category_theory", "free_bicategory"]]]}, {"oldPath": "src/category_theory/bicategory/free.lean", "newPath": "src/category_theory/bicategory/free.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/functor.lean", "newPath": "src/category_theory/bicategory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/functor_bicategory.lean", "newPath": "src/category_theory/bicategory/functor_bicategory.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/natural_transformation.lean", "newPath": "src/category_theory/bicategory/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/bicategory/strict.lean", "newPath": "src/category_theory/bicategory/strict.lean", "changes": []}]}, {"timestamp": 1649356906, "sha": "44c31d8f", "message": "feat(data/finset/basic): add `map_injective` and `sigma_equiv_option_of_inhabited` (#13083)\nAdds `map_injective (f : α ↪ β) : injective (map f) := (map_embedding f).injective` and `sigma_equiv_option_of_inhabited [inhabited α] : Σ (β : Type u), α ≃ option β`.\nExtracted from @huynhtrankhanh's https://github.com/leanprover-community/mathlib/pull/11162, moved here to a separate PR", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "def", "sigma_equiv_option_of_inhabited", ["equiv"]], ["add", "theorem", "map_injective", ["finset"]]]}]}, {"timestamp": 1649356905, "sha": "9d786ce7", "message": "feat(topology/metric/basic): construct a bornology from metric axioms and add it to the pseudo metric structure (#12078)\nEvery metric structure naturally gives rise to a bornology where the bounded sets are precisely the metric bounded sets. The eventual goal will be to replace the existing `metric.bounded` with one defined in terms of the bornology, so we need to construct the bornology first, as we do here.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "def", "of_dist", ["bornology"]]]}]}, {"timestamp": 1649350409, "sha": "2d2d09cb", "message": "feat(data/nat/gcd): added gcd_mul_of_dvd_coprime (#12989)\nAdded gcd_mul_of_dvd_coprime lemma to gcd.lean.", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "gcd_mul_of_coprime_of_dvd", ["nat"]]]}]}, {"timestamp": 1649348447, "sha": "733aed57", "message": "chore(group_theory/index): Add `to_additive` (#13191)\nThis PR adds `to_additive` to the rest of `group_theory/index.lean`.", "changes": []}, {"timestamp": 1649348446, "sha": "c522e3b5", "message": "feat(data/polynomial/basic): add simp lemmas X_mul_C and X_pow_mul_C (#13163)\nThese lemmas are direct applications of `X_mul` and `X_pow_mul`. However, their more general version cannot be `simp` lemmas since they form loops. These versions do not, since they involve an explicit `C`.\nI golfed slightly a proof in `linear_algebra.eigenspace` since it was timing out.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/polynomial.20op_C/near/277703846)", "changes": []}, {"timestamp": 1649348444, "sha": "6a0524fd", "message": "feat(category_theory/monoidal): upgrades for monoidal equivalences (#13158)\n(Recall that a \"monoidal equivalence\" is a functor which is separately monoidal, and an equivalence.\nThis PR completes the work required to see this is the same as having a monoidal inverse, up to monoidal units and counits.)\n* Shows that the unit and counit of a monoidal equivalence have a natural monoidal structure. \n* Previously, when transporting a monoidal structure across a (non-monoidal) equivalence,\nwe constructed directly the monoidal strength on the inverse functor. In the meantime, @b-mehta has provided a general construction for the monoidal strength on the inverse of any monoidal equivalence, so now we use that.\nThe proofs of `monoidal_unit` and `monoidal_counit` in `category_theory/monoidal/natural_transformation.lean` are quite ugly. If anyone would like to golf these that would be lovely! :-)", "changes": []}, {"timestamp": 1649348443, "sha": "d7ad7d37", "message": "feat(set_theory/cardinal): Upper bound on domain from upper bound on fibers (#13147)\nA uniform upper bound on fibers gives an upper bound on the domain.", "changes": []}, {"timestamp": 1649348441, "sha": "47a3cd26", "message": "feat(probability/integration): Bochner integral of the product of independent functions (#13140)\nThis is limited to real-valued functions, which is not very satisfactory but it is not clear (to me) what the most general version of each of those lemmas would be.", "changes": []}, {"timestamp": 1649348440, "sha": "ab1bf0fb", "message": "feat(algebra/order/monoid): add eq_one_or_one_lt (#13131)\nNeeded in LTE.", "changes": []}, {"timestamp": 1649348439, "sha": "7c04f361", "message": "feat(group_theory/schreier): prove Schreier's lemma (#13019)\nThis PR adds a proof of Schreier's lemma.", "changes": []}, {"timestamp": 1649348437, "sha": "315bff39", "message": "feat(archive/100-theorems-list/37_solution_of_cubic): golf (#13012)\nExpress one of the lemmas for the solution of the cubic as a giant `linear_combination` calculation.", "changes": []}, {"timestamp": 1649341529, "sha": "c4f3869b", "message": "chore(order/symm_diff): Change the symmetric difference notation (#13217)\nThe notation for `symm_diff` was `Δ` (`\\D`, `\\GD`, `\\Delta`). It now is `∆` (`\\increment`).", "changes": [{"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/order/imp.lean", "newPath": "src/order/imp.lean", "changes": [["mod", "theorem", "compl_biimp", ["lattice"]], ["mod", "theorem", "compl_symm_diff", ["lattice"]]]}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["mod", "theorem", "bot_symm_diff", []], ["mod", "theorem", "compl_symm_diff", []], ["mod", "theorem", "compl_symm_diff_self", []], ["mod", "theorem", "symm_diff_eq_sup", ["disjoint"]], ["mod", "theorem", "disjoint_symm_diff_inf", []], ["mod", "theorem", "inf_symm_diff_distrib_left", []], ["mod", "theorem", "inf_symm_diff_distrib_right", []], ["mod", "theorem", "inf_symm_diff_symm_diff", []], ["mod", "theorem", "symm_diff_eq_top", ["is_compl"]], ["mod", "theorem", "sdiff_symm_diff'", []], ["mod", "theorem", "sdiff_symm_diff", []], ["mod", "theorem", "sdiff_symm_diff_self", []], ["mod", "theorem", "sup_sdiff_symm_diff", []], ["mod", "theorem", "symm_diff_assoc", []], ["mod", "theorem", "symm_diff_bot", []], ["mod", "theorem", "symm_diff_comm", []], ["mod", "theorem", "symm_diff_compl_self", []], ["mod", "theorem", "symm_diff_eq", []], ["mod", "theorem", "symm_diff_eq_bot", []], ["mod", "theorem", "symm_diff_eq_left", []], ["mod", "theorem", "symm_diff_eq_right", []], ["mod", "theorem", "symm_diff_eq_sup", []], ["mod", "theorem", "symm_diff_eq_sup_sdiff_inf", []], ["mod", "theorem", "symm_diff_eq_top_iff", []], ["mod", "theorem", "symm_diff_eq_xor", []], ["mod", "theorem", "symm_diff_le_sup", []], ["mod", "theorem", "symm_diff_left_inj", []], ["mod", "theorem", "symm_diff_right_inj", []], ["mod", "theorem", "symm_diff_sdiff", []], ["mod", "theorem", "symm_diff_sdiff_left", []], ["mod", "theorem", "symm_diff_sdiff_right", []], ["mod", "theorem", "symm_diff_self", []], ["mod", "theorem", "symm_diff_symm_diff_inf", []], ["mod", "theorem", "symm_diff_symm_diff_self'", []], ["mod", "theorem", "symm_diff_symm_diff_self", []], ["mod", "theorem", "symm_diff_top", []], ["mod", "theorem", "top_symm_diff", []]]}]}, {"timestamp": 1649341516, "sha": "ac5188dd", "message": "chore(algebra/char_p/{basic + algebra}): weaken assumptions for char_p_to_char_zero (#13214)\nThe assumptions for lemma `char_p_to_char_zero` can be weakened, without changing the proof.\nSince the weakening breaks up one typeclass assumption into two, when the lemma was applied with `@`, I inserted an extra `_`. This happens twice: once in the file where the lemma is, and once in a separate file.", "changes": [{"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "char_p_to_char_zero", ["char_p"]]]}]}, {"timestamp": 1649341513, "sha": "321d159d", "message": "feat(algebra/order/monoid): generalize, convert to `to_additive` and iff of `lt_or_lt_of_mul_lt_mul` (#13192)\nI converted a lemma showing\n`m + n < a + b → m < a ∨ n < b`\nto the `to_additive` version of a lemma showing\n`m * n < a * b → m < a ∨ n < b`.\nI also added a lemma showing `m * n < a * b ↔ m < a ∨ n < b` and its `to_additive` version.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["del", "theorem", "lt_or_lt_of_add_lt_add", []], ["add", "theorem", "lt_or_lt_of_mul_lt_mul", []], ["add", "theorem", "mul_lt_mul_iff_of_le_of_le", []]]}]}, {"timestamp": 1649334412, "sha": "506ad313", "message": "feat(order/monotone): simp lemmas for monotonicity in dual orders (#13207)\nAdd 4 lemmas of the kind `antitone_to_dual_comp_iff`\nAdd their variants for `antitone_on`\nAdd their strict variants", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall₂_swap", []], ["add", "def", "swap₂", ["function"]]]}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "antitone_comp_of_dual_iff", []], ["add", "theorem", "antitone_on_comp_of_dual_iff", []], ["add", "theorem", "antitone_on_to_dual_comp_iff", []], ["add", "theorem", "antitone_to_dual_comp_iff", []], ["add", "theorem", "monotone_comp_of_dual_iff", []], ["add", "theorem", "monotone_on_comp_of_dual_iff", []], ["add", "theorem", "monotone_on_to_dual_comp_iff", []], ["add", "theorem", "monotone_to_dual_comp_iff", []], ["add", "theorem", "strict_anti_comp_of_dual_iff", []], ["add", "theorem", "strict_anti_on_comp_of_dual_iff", []], ["add", "theorem", "strict_anti_on_to_dual_comp_iff", []], ["add", "theorem", "strict_anti_to_dual_comp_iff", []], ["add", "theorem", "strict_mono_comp_of_dual_iff", []], ["add", "theorem", "strict_mono_on_comp_of_dual_iff", []], ["add", "theorem", "strict_mono_on_to_dual_comp_iff", []], ["add", "theorem", "strict_mono_to_dual_comp_iff", []]]}]}, {"timestamp": 1649331877, "sha": "be147af1", "message": "feat(ring_theory/graded_algebra/homogeneous_localization): homogeneous localization ring is local (#13071)\nshowed that `local_ring (homogeneous_localization 𝒜 x)` from prime ideal `x`", "changes": [{"oldPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": [["add", "theorem", "is_unit_iff_is_unit_val", ["homogeneous_localization"]], ["add", "theorem", "val_mk'", ["homogeneous_localization"]]]}]}, {"timestamp": 1649327960, "sha": "3e4bf5de", "message": "feat(order/symm_diff): More symmetric difference lemmas (#13133)\nA few more `symm_diff` lemmas.", "changes": []}, {"timestamp": 1649315152, "sha": "faa7e52f", "message": "chore(group_theory/index): Add `to_additive` (#13191)\nThis PR adds `to_additive` to the rest of `group_theory/index.lean`.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["mod", "theorem", "index_eq_one", ["subgroup"]], ["mod", "theorem", "index_inf_le", ["subgroup"]], ["mod", "theorem", "index_inf_ne_zero", ["subgroup"]], ["mod", "theorem", "index_ne_zero_of_fintype", ["subgroup"]], ["mod", "theorem", "inf_relindex_left", ["subgroup"]], ["mod", "theorem", "inf_relindex_right", ["subgroup"]], ["mod", "theorem", "relindex_dvd_of_le_left", ["subgroup"]], ["mod", "theorem", "relindex_eq_relindex_sup", ["subgroup"]], ["mod", "theorem", "relindex_inf_le", ["subgroup"]], ["mod", "theorem", "relindex_inf_ne_zero", ["subgroup"]], ["mod", "theorem", "relindex_le_of_le_left", ["subgroup"]], ["mod", "theorem", "relindex_le_of_le_right", ["subgroup"]], ["mod", "theorem", "relindex_mul_index", ["subgroup"]], ["mod", "theorem", "relindex_mul_relindex", ["subgroup"]], ["mod", "theorem", "relindex_ne_zero_trans", ["subgroup"]]]}]}, {"timestamp": 1649315150, "sha": "45a8f6cd", "message": "feat(data/polynomial/basic): add simp lemmas X_mul_C and X_pow_mul_C (#13163)\nThese lemmas are direct applications of `X_mul` and `X_pow_mul`. However, their more general version cannot be `simp` lemmas since they form loops. These versions do not, since they involve an explicit `C`.\nI golfed slightly a proof in `linear_algebra.eigenspace` since it was timing out.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/polynomial.20op_C/near/277703846)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "X_mul_C", ["polynomial"]], ["add", "theorem", "X_pow_mul_C", ["polynomial"]], ["add", "theorem", "X_pow_mul_assoc_C", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/polynomial.lean", "newPath": "src/linear_algebra/matrix/polynomial.lean", "changes": []}]}, {"timestamp": 1649315149, "sha": "d047eb46", "message": "feat(category_theory/monoidal): upgrades for monoidal equivalences (#13158)\n(Recall that a \"monoidal equivalence\" is a functor which is separately monoidal, and an equivalence.\nThis PR completes the work required to see this is the same as having a monoidal inverse, up to monoidal units and counits.)\n* Shows that the unit and counit of a monoidal equivalence have a natural monoidal structure. \n* Previously, when transporting a monoidal structure across a (non-monoidal) equivalence,\nwe constructed directly the monoidal strength on the inverse functor. In the meantime, @b-mehta has provided a general construction for the monoidal strength on the inverse of any monoidal equivalence, so now we use that.\nThe proofs of `monoidal_unit` and `monoidal_counit` in `category_theory/monoidal/natural_transformation.lean` are quite ugly. If anyone would like to golf these that would be lovely! :-)", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "theorem", "as_equivalence_to_adjunction_counit", ["category_theory", "equivalence"]], ["add", "theorem", "as_equivalence_to_adjunction_unit", ["category_theory", "equivalence"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["del", "theorem", "monoidal_inverse_to_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/natural_transformation.lean", "newPath": "src/category_theory/monoidal/natural_transformation.lean", "changes": [["add", "def", "monoidal_counit", ["category_theory"]], ["add", "def", "monoidal_unit", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/transport.lean", "newPath": "src/category_theory/monoidal/transport.lean", "changes": [["del", "def", "lax_from_transported", ["category_theory", "monoidal"]]]}]}, {"timestamp": 1649315148, "sha": "91db821c", "message": "feat(set_theory/cardinal): Upper bound on domain from upper bound on fibers (#13147)\nA uniform upper bound on fibers gives an upper bound on the domain.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_le_mk_mul_of_mk_preimage_le", ["cardinal"]]]}]}, {"timestamp": 1649315146, "sha": "409f5f28", "message": "feat(probability/integration): Bochner integral of the product of independent functions (#13140)\nThis is limited to real-valued functions, which is not very satisfactory but it is not clear (to me) what the most general version of each of those lemmas would be.", "changes": [{"oldPath": "src/probability/integration.lean", "newPath": "src/probability/integration.lean", "changes": [["add", "theorem", "integrable_mul", ["probability_theory", "indep_fun"]], ["add", "theorem", "integral_mul_of_integrable", ["probability_theory", "indep_fun"]], ["add", "theorem", "integral_mul_of_nonneg", ["probability_theory", "indep_fun"]], ["add", "theorem", "lintegral_mul_eq_lintegral_mul_lintegral_of_indep_fun'", ["probability_theory"]], ["mod", "theorem", "lintegral_mul_eq_lintegral_mul_lintegral_of_indep_fun", ["probability_theory"]], ["mod", "theorem", "lintegral_mul_indicator_eq_lintegral_mul_lintegral_indicator", ["probability_theory"]]]}]}, {"timestamp": 1649315145, "sha": "fabad7ec", "message": "feat(order/symm_diff): More symmetric difference lemmas (#13133)\nA few more `symm_diff` lemmas.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "eq_of_sdiff_eq_sdiff", []], ["add", "theorem", "inf_sdiff_distrib_left", []], ["add", "theorem", "inf_sdiff_distrib_right", []], ["add", "theorem", "inf_sdiff_right_comm", []], ["add", "theorem", "sdiff_eq_comm", []], ["add", "theorem", "sdiff_eq_symm", []], ["add", "theorem", "sdiff_sdiff_eq_sdiff_sup", []], ["add", "theorem", "sdiff_sdiff_le", []], ["add", "theorem", "sdiff_sup_sdiff_cancel", []], ["del", "theorem", "sdiff_symm", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_inf_distrib_left", []], ["add", "theorem", "inf_inf_distrib_right", []], ["add", "theorem", "sup_sup_distrib_left", []], ["add", "theorem", "sup_sup_distrib_right", []]]}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["del", "theorem", "disjoint_symm_diff_of_disjoint", ["disjoint"]], ["add", "theorem", "inf_symm_diff_distrib_left", []], ["add", "theorem", "inf_symm_diff_distrib_right", []], ["add", "theorem", "inf_symm_diff_symm_diff", []], ["add", "theorem", "sup_sdiff_symm_diff", []], ["add", "theorem", "symm_diff_symm_diff_inf", []]]}]}, {"timestamp": 1649315144, "sha": "2a74d4e9", "message": "feat(algebra/order/monoid): add eq_one_or_one_lt (#13131)\nNeeded in LTE.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "eq_one_or_one_lt", []]]}]}, {"timestamp": 1649315140, "sha": "9eff8cb0", "message": "feat(group_theory/schreier): prove Schreier's lemma (#13019)\nThis PR adds a proof of Schreier's lemma.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/schreier.lean", "changes": [["add", "theorem", "closure_mul_eq", ["subgroup"]], ["add", "theorem", "closure_mul_eq_top", ["subgroup"]]]}]}, {"timestamp": 1649315137, "sha": "45e4e626", "message": "feat(archive/100-theorems-list/37_solution_of_cubic): golf (#13012)\nExpress one of the lemmas for the solution of the cubic as a giant `linear_combination` calculation.", "changes": [{"oldPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "newPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "changes": []}]}, {"timestamp": 1649311546, "sha": "f0ee4c81", "message": "feat(topology/metric_space): the product of bounded sets is bounded (#13176)\nAlso add an `iff` version.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "left_of_prod", ["metric", "bounded"]], ["add", "theorem", "right_of_prod", ["metric", "bounded"]], ["add", "theorem", "bounded_prod", ["metric"]], ["add", "theorem", "bounded_prod_of_nonempty", ["metric"]]]}]}, {"timestamp": 1649293042, "sha": "05820c53", "message": "feat(archive/imo/imo2008_q4): golf using `linear_combination` (#13209)", "changes": [{"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}]}, {"timestamp": 1649291089, "sha": "c4ced3a1", "message": "feat(archive/imo/imo2005_q6): golf using `field_simp` (#13206)", "changes": [{"oldPath": "archive/imo/imo2005_q3.lean", "newPath": "archive/imo/imo2005_q3.lean", "changes": []}]}, {"timestamp": 1649288715, "sha": "cc280547", "message": "feat(archive/imo/imo2001_q6): golf using `linear_combination` (#13205)", "changes": [{"oldPath": "archive/imo/imo2001_q6.lean", "newPath": "archive/imo/imo2001_q6.lean", "changes": []}]}, {"timestamp": 1649258774, "sha": "06bdd8bc", "message": "feat(geometry/manifold/tangent_bundle): adapt the definition to the new vector bundle definition (#13199)\nAlso a few tweaks to simplify the defeq behavior of tangent spaces.", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "def", "zero_section", ["tangent_bundle"]]]}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": [["add", "theorem", "coord_change_continuous", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "coord_change_smooth", ["basic_smooth_vector_bundle_core"]], ["mod", "def", "proj", ["tangent_bundle"]], ["mod", "def", "tangent_bundle", []], ["mod", "def", "tangent_space", []]]}]}, {"timestamp": 1649249946, "sha": "138448ae", "message": "feat(algebra/parity): introduce `is_square` and, via `to_additive`, also `even` (#13037)\nThis PR continues the refactor began in #12882. Now that most of the the even/odd lemmas are in the same file, I changed the definition of `even` to become the `to_additive` version of `is_square`.\nThe reason for the large number of files touched is that the definition of `even` actually changed, from being of the form `2 * n` to being of the form `n + n`. Thus, I inserted appropriate `two_mul`s and `even_iff_two_dvd`s in a few places where the defeq to the divisibility by 2 was exploited.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/even.2Fodd)", "changes": [{"oldPath": "archive/100-theorems-list/45_partition.lean", "newPath": "archive/100-theorems-list/45_partition.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q1.lean", "newPath": "archive/imo/imo2013_q1.lean", "changes": []}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["del", "theorem", "even", ["add_monoid_hom"]], ["del", "theorem", "add_even", ["even"]], ["del", "theorem", "sub_even", ["even"]], ["del", "def", "even", []], ["mod", "theorem", "even_abs", []], ["add", "theorem", "even_iff_exists_two_mul", []], ["mod", "theorem", "even_iff_two_dvd", []], ["del", "theorem", "even_neg", []], ["mod", "theorem", "even_neg_two", []], ["mod", "theorem", "even_two", []], ["mod", "theorem", "even_two_mul", []], ["del", "theorem", "even_zero", []], ["add", "theorem", "div_is_square", ["is_square"]], ["add", "theorem", "map", ["is_square"]], ["add", "theorem", "mul_is_square", ["is_square"]], ["add", "def", "is_square", []], ["add", "theorem", "is_square_iff_exists_sq", []], ["add", "theorem", "is_square_inv", []], ["add", "theorem", "is_square_mul_self", []], ["add", "theorem", "is_square_one", []], ["add", "theorem", "is_square_op_iff", []], ["add", "theorem", "is_square_sq", []], ["mod", "theorem", "odd_abs", []]]}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["mod", "theorem", "div_two_mul_two_of_even", ["int"]], ["mod", "theorem", "two_mul_div_two_of_even", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["mod", "theorem", "div_two_mul_two_of_even", ["nat"]], ["mod", "theorem", "two_mul_div_two_of_even", ["nat"]]]}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["mod", "theorem", "not_is_field", ["int"]]]}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}]}, {"timestamp": 1649227688, "sha": "6930ad5d", "message": "feat(topology/continuous_function/zero_at_infty): add the type of continuous functions vanishing at infinity (#12907)\nThis adds the type of of continuous functions vanishing at infinity (`zero_at_infty`) with the localized notation `C₀(α, β)` (we also allow `α →C₀ β` but the former has higher priority). This type is defined when `α` and `β` are topological spaces and `β` has a zero element. Elements of this type are continuous functions `f` with the additional property that `tendsto f (cocompact α) (𝓝 0)`. Here we attempt to follow closely the recent hom refactor and so we also create the type class `zero_at_infty_continuous_map_class`.\nVarious algebraic structures are instantiated on `C₀(α, β)` when corresponding structures exist on `β`. When `β` is a metric space, there is a natural inclusion `zero_at_infty_continuous_map.to_bcf : C₀(α, β) → α →ᵇ β`, which induces a metric space structure on `C₀(α, β)`, and the range of this map is closed. Therefore, when `β` is complete, `α →ᵇ β` is complete, and hence so is `C₀(α, β)`.\n- [x] depends on: #12894", "changes": [{"oldPath": null, "newPath": "src/topology/continuous_function/zero_at_infty.lean", "changes": [["add", "theorem", "add_apply", ["zero_at_infty_continuous_map"]], ["add", "theorem", "bounded_image", ["zero_at_infty_continuous_map"]], ["add", "theorem", "bounded_range", ["zero_at_infty_continuous_map"]], ["add", "theorem", "closed_range_to_bcf", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_add", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_mul", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_neg", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_nsmul_rec", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_smul", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_sub", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_to_continuous_fun", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_zero", ["zero_at_infty_continuous_map"]], ["add", "theorem", "coe_zsmul_rec", ["zero_at_infty_continuous_map"]], ["add", "def", "lift_zero_at_infty", ["zero_at_infty_continuous_map", "continuous_map"]], ["add", "theorem", "dist_to_bcf_eq_dist", ["zero_at_infty_continuous_map"]], ["add", "theorem", "eq_of_empty", ["zero_at_infty_continuous_map"]], ["add", "theorem", "ext", ["zero_at_infty_continuous_map"]], ["add", "theorem", "isometry_to_bcf", ["zero_at_infty_continuous_map"]], ["add", "theorem", "mul_apply", ["zero_at_infty_continuous_map"]], ["add", "theorem", "neg_apply", ["zero_at_infty_continuous_map"]], ["add", "theorem", "smul_apply", ["zero_at_infty_continuous_map"]], ["add", "theorem", "sub_apply", ["zero_at_infty_continuous_map"]], ["add", "theorem", "tendsto_iff_tendsto_uniformly", ["zero_at_infty_continuous_map"]], ["add", "def", "to_bcf", ["zero_at_infty_continuous_map"]], ["add", "theorem", "to_bounded_continuous_function_injective", ["zero_at_infty_continuous_map"]], ["add", "theorem", "zero_apply", ["zero_at_infty_continuous_map"]], ["add", "def", "of_compact", ["zero_at_infty_continuous_map", "zero_at_infty_continuous_map_class"]], ["add", "structure", "zero_at_infty_continuous_map", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "cocompact_eq_bot", ["filter"]]]}]}, {"timestamp": 1649216561, "sha": "2841aadc", "message": "chore(scripts): update nolints.txt (#13193)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1649209701, "sha": "2e8d269f", "message": "feat(data/nat/factorization): Generalize natural factorization recursors. (#12973)\nSwitches `rec_on_prime_pow` precondition to allow use of `0 < n`, and strengthens correspondingly `rec_on_pos_prime_pos_coprime` and `rec_on_prime_coprime`.", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["mod", "theorem", "coprime_pow_left_iff", ["nat"]], ["mod", "theorem", "coprime_pow_right_iff", ["nat"]]]}, {"oldPath": "src/number_theory/von_mangoldt.lean", "newPath": "src/number_theory/von_mangoldt.lean", "changes": []}]}, {"timestamp": 1649202368, "sha": "2504a2b4", "message": "chore(data/list/basic): remove axiom of choice assumption in some lemmas (#13189)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}]}, {"timestamp": 1649193976, "sha": "a8413617", "message": "refactor(topology/vector_bundle): redefine (#13175)\nThe definition of topological vector bundle in #4658 was (inadvertently) a nonstandard definition, which agreed in finite dimension with the usual definition but not in infinite dimension.\nSpecifically, it omitted the compatibility condition that for a vector bundle over `B` with model fibre `F`, the transition function `B → F ≃L[R] F` associated to any pair of trivializations be continuous, with respect to to the norm topology on `F →L[R] F`. (The transition function is automatically continuous with respect to the topology of pointwise convergence, which is why this works in finite dimension. The discrepancy between these conditions in infinite dimension turns out to be a [classic](https://mathoverflow.net/questions/4943/vector-bundle-with-non-smoothly-varying-transition-functions/4997#4997)\n[gotcha](https://mathoverflow.net/questions/54550/the-third-axiom-in-the-definition-of-infinite-dimensional-vector-bundles-why/54706#54706).)\nWe refactor to add this compatibility condition to the definition of topological vector bundle, and to verify this condition in the existing examples of topological vector bundles (construction via a cocycle, direct sum of vector bundles, tangent bundle).", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "antimono", ["differentiable_within_at"]], ["add", "theorem", "fderiv_within_subset'", []], ["add", "theorem", "antimono", ["has_fderiv_within_at"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "prod_eq_iff_eq", ["set"]]]}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "def", "continuous_transitions", []], ["add", "theorem", "continuous_on_coord_change", ["topological_vector_bundle"]], ["add", "def", "coord_change", ["topological_vector_bundle"]], ["add", "theorem", "trans_eq_coord_change", ["topological_vector_bundle"]], ["add", "theorem", "trivialization_source", ["topological_vector_bundle", "trivial_topological_vector_bundle"]], ["add", "theorem", "trivialization_target", ["topological_vector_bundle", "trivial_topological_vector_bundle"]], ["add", "theorem", "comp_continuous_linear_equiv_at_eq_coord_change", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "prod_apply", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1649187381, "sha": "7ec52a1c", "message": "chore(algebraic_topology/simplex_category): removed ulift (#13183)", "changes": [{"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": [["mod", "theorem", "map_alternating_face_map_complex", ["algebraic_topology"]]]}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["mod", "def", "const", ["simplex_category"]], ["mod", "theorem", "const_comp", ["simplex_category"]], ["mod", "theorem", "epi_iff_surjective", ["simplex_category"]], ["mod", "theorem", "eq_id_of_epi", ["simplex_category"]], ["mod", "theorem", "eq_id_of_is_iso", ["simplex_category"]], ["mod", "theorem", "eq_id_of_mono", ["simplex_category"]], ["mod", "theorem", "ext", ["simplex_category"]], ["mod", "def", "comp", ["simplex_category", "hom"]], ["mod", "theorem", "ext", ["simplex_category", "hom"]], ["mod", "def", "id", ["simplex_category", "hom"]], ["mod", "def", "mk", ["simplex_category", "hom"]], ["mod", "theorem", "mk_to_order_hom", ["simplex_category", "hom"]], ["mod", "theorem", "mk_to_order_hom_apply", ["simplex_category", "hom"]], ["mod", "def", "to_order_hom", ["simplex_category", "hom"]], ["mod", "theorem", "to_order_hom_mk", ["simplex_category", "hom"]], ["mod", "theorem", "is_iso_of_bijective", ["simplex_category"]], ["mod", "def", "is_skeleton_of", ["simplex_category"]], ["mod", "theorem", "iso_eq_iso_refl", ["simplex_category"]], ["mod", "def", "len", ["simplex_category"]], ["mod", "theorem", "len_le_of_epi", ["simplex_category"]], ["mod", "theorem", "len_le_of_mono", ["simplex_category"]], ["mod", "def", "mk", ["simplex_category"]], ["mod", "theorem", "mk_len", ["simplex_category"]], ["mod", "theorem", "mono_iff_injective", ["simplex_category"]], ["mod", "def", "order_iso_of_iso", ["simplex_category"]], ["mod", "theorem", "skeletal", ["simplex_category"]], ["mod", "def", "skeletal_functor", ["simplex_category"]], ["mod", "def", "inclusion", ["simplex_category", "truncated"]], ["mod", "def", "truncated", ["simplex_category"]], ["mod", "def", "simplex_category", []]]}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["mod", "def", "whiskering", ["category_theory", "cosimplicial_object", "augmented"]], ["mod", "def", "whiskering_obj", ["category_theory", "cosimplicial_object", "augmented"]], ["mod", "def", "whiskering", ["category_theory", "cosimplicial_object", "truncated"]], ["mod", "def", "truncated", ["category_theory", "cosimplicial_object"]], ["mod", "def", "whiskering", ["category_theory", "cosimplicial_object"]], ["mod", "def", "cosimplicial_object", ["category_theory"]], ["mod", "def", "whiskering", ["category_theory", "simplicial_object", "augmented"]], ["mod", "def", "whiskering_obj", ["category_theory", "simplicial_object", "augmented"]], ["mod", "def", "whiskering", ["category_theory", "simplicial_object", "truncated"]], ["mod", "def", "truncated", ["category_theory", "simplicial_object"]], ["mod", "def", "whiskering", ["category_theory", "simplicial_object"]], ["mod", "def", "simplicial_object", ["category_theory"]]]}]}, {"timestamp": 1649187380, "sha": "960abb54", "message": "chore(algebra/monoid_algebra/grading): fix slow elaboration (#13169)\nThere were a couple of lemmas in this file taking multiple seconds to elaborate. Apart from `squeeze_dsimps`, the main change in this PR is to help the elaborator unfold certain definitions (that it originally did unfold, but only after multiple seconds of trying to unfold other things), by replacing proofs with `by simpa only [some_unfolding_lemma] using the_original_proof`.\nThe main alternative I discovered for the `simpa` changes was to strategically mark certain definitions irreducible. Those definitions needed to be unfolded in other places in this file, and it's less obviously connected to the source of the slowness: we might keep around the `local attribute [irreducible]` lines even if it's not needed after a refactor.\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Slow.20defeqs.20in.20.60algebra.2Fmonoid_algebra.2Fgrading.2Elean.60", "changes": [{"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}]}, {"timestamp": 1649187379, "sha": "d34cbcf6", "message": "refactor(algebra/homology, category_theory/*): declassify exactness (#13153)\nHaving `exact` be a class was very often somewhat inconvenient, so many lemmas took it as a normal argument while many others had it as a typeclass argument. This PR removes this inconsistency by downgrading `exact` to a structure. We lose very little by doing this, and using typeclass inference as a Prolog-like \"automatic theorem prover\" is rarely a good idea anyway.", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["mod", "theorem", "comp_eq_zero_of_exact", ["category_theory"]], ["add", "structure", "exact", ["category_theory"]], ["add", "theorem", "exact_comp_hom_inv_comp", ["category_theory"]], ["add", "theorem", "exact_comp_inv_hom_comp", ["category_theory"]], ["mod", "theorem", "exact_comp_mono", ["category_theory"]], ["mod", "theorem", "exact_epi_comp", ["category_theory"]], ["add", "theorem", "exact_epi_zero", ["category_theory"]], ["add", "theorem", "exact_of_zero", ["category_theory"]], ["add", "theorem", "exact_zero_mono", ["category_theory"]], ["mod", "theorem", "fork_ι_comp_cofork_π", ["category_theory"]], ["del", "theorem", "exact_of_exact_map'", ["category_theory", "functor"]], ["mod", "theorem", "kernel_comp_cokernel", ["category_theory"]], ["mod", "theorem", "kernel_subobject_arrow_eq_zero_of_exact_zero_left", ["category_theory"]], ["mod", "theorem", "kernel_ι_eq_zero_of_exact_zero_left", ["category_theory"]]]}, {"oldPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "op", ["category_theory", "abelian", "exact"]], ["add", "theorem", "unop", ["category_theory", "abelian", "exact"]], ["mod", "def", "is_colimit_coimage", ["category_theory", "abelian"]], ["mod", "def", "is_colimit_image", ["category_theory", "abelian"]], ["mod", "def", "is_limit_image'", ["category_theory", "abelian"]], ["mod", "def", "is_limit_image", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/homology.lean", "newPath": "src/category_theory/abelian/homology.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/injective_resolution.lean", "newPath": "src/category_theory/abelian/injective_resolution.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": [["mod", "theorem", "pseudo_exact_of_exact", ["category_theory", "abelian", "pseudoelement"]]]}, {"oldPath": "src/category_theory/abelian/right_derived.lean", "newPath": "src/category_theory/abelian/right_derived.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["mod", "def", "desc", ["category_theory", "injective", "exact"]]]}, {"oldPath": "src/category_theory/preadditive/injective_resolution.lean", "newPath": "src/category_theory/preadditive/injective_resolution.lean", "changes": [["add", "theorem", "complex_d_comp", ["category_theory", "InjectiveResolution"]], ["add", "theorem", "ι_f_zero_comp_complex_d", ["category_theory", "InjectiveResolution"]]]}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective_resolution.lean", "newPath": "src/category_theory/preadditive/projective_resolution.lean", "changes": [["add", "theorem", "complex_d_comp_π_f_zero", ["category_theory", "ProjectiveResolution"]], ["add", "theorem", "complex_d_succ_comp", ["category_theory", "ProjectiveResolution"]]]}]}, {"timestamp": 1649187378, "sha": "427aae3a", "message": "chore(algebra/*): generalisation linter (replacing ring with non_assoc_ring) (#13106)", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["mod", "theorem", "functions_ext", ["ring_hom"]]]}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "bit0_mul", []], ["mod", "theorem", "bit1_mul", []], ["mod", "theorem", "mul_bit0", []], ["mod", "theorem", "mul_bit1", []], ["mod", "theorem", "nsmul_eq_mul'", []], ["mod", "theorem", "nsmul_eq_mul", []], ["mod", "theorem", "zsmul_eq_mul", []]]}, {"oldPath": "src/algebra/ring/equiv.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}]}, {"timestamp": 1649185250, "sha": "e510b204", "message": "feat(group_theory/index): Index of intersection (#13186)\nThis PR adds `relindex_inf_le` and `index_inf_le`, which are companion lemmas to `relindex_inf_ne_zero` and `index_inf_ne_zero`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_inf_le", ["subgroup"]], ["add", "theorem", "relindex_inf_le", ["subgroup"]]]}]}, {"timestamp": 1649175739, "sha": "cf131e1e", "message": "feat(data/complex/exponential): add `real.cos_abs` (#13177)", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_abs", ["real"]]]}]}, {"timestamp": 1649175738, "sha": "b011b0e8", "message": "feat(ring_theory/unique_factorization_domain): The only divisors of prime powers are prime powers. (#12799)\nThe only divisors of prime powers are prime powers in the associates monoid of an UFD.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "count_eq_zero_of_ne", ["associates"]], ["add", "theorem", "count_factors_eq_find_of_dvd_pow", ["associates"]], ["add", "theorem", "count_le_count_of_factors_le", ["associates"]], ["add", "theorem", "count_le_count_of_le", ["associates"]], ["add", "theorem", "eq_pow_count_factors_of_dvd_pow", ["associates"]], ["add", "theorem", "eq_pow_find_of_dvd_irreducible_pow", ["associates"]]]}]}, {"timestamp": 1649170270, "sha": "fd1861cf", "message": "fix(tactic/ring): `ring_nf` should descend into subexpressions (#12430)\nSince the lambda passed to `ext_simp_core` was returning `ff`, this means the simplifier didn't descend into subexpressions, so `ring_nf` only tried to use the Horner normal form if the head symbol of the goal/hypothesis was `+`, `*`, `-` or `^`. In particular, since there are no such operations on `Sort`, `ring_nf` was exactly equivalent to `simp only [horner.equations._eqn_1, add_zero, one_mul, pow_one, neg_mul, add_neg_eq_sub]`. Toggling the return value means `ring_nf` will try to simplify all subexpressions, including the left hand side and right hand side of an equality.\n@alexjbest discovered the MWE included in `test/ring.lean` while trying to use `ring_nf` to simplify a complicated expression.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1649163242, "sha": "91dd3b19", "message": "chore(ring_theory/integral_domain): dedup, tidy (#13180)", "changes": [{"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["del", "def", "field_of_is_domain", []]]}]}, {"timestamp": 1649163240, "sha": "da132ecf", "message": "feat(*): define subobject classes from submonoid up to subfield (#11750)\nThe next part of my big refactoring plans: subobject classes in the same style as morphism classes.\nThis PR introduces the following subclasses of `set_like`:\n * `one_mem_class`, `zero_mem_class`, `mul_mem_class`, `add_mem_class`, `inv_mem_class`, `neg_mem_class`\n * `submonoid_class`, `add_submonoid_class`\n * `subgroup_class`, `add_subgroup_class`\n * `subsemiring_class`, `subring_class`, `subfield_class`\nThe main purpose of this refactor is that we can replace the wide variety of lemmas like `{add_submonoid,add_subgroup,subring,subfield,submodule,subwhatever}.{prod,sum}_mem` with a single `prod_mem` lemma that is generic over all types `B` that extend `submonoid`:\n```lean\n@[to_additive]\nlemma prod_mem {M : Type*} [comm_monoid M] [set_like B M] [submonoid_class B M]\n {ι : Type*} {t : finset ι} {f : ι → M} (h : ∀c ∈ t, f c ∈ S) : ∏ c in t, f c ∈ S\n```\n## API changes\n * When you extend a `struct subobject`, make sure to create a corresponding `subobject_class` instance.\n## Upcoming PRs\nThis PR splits out the first part of #11545, namely defining the subobject classes. I am planning these follow-up PRs for further parts of #11545:\n - [ ] make the subobject consistently implicit in `{add,mul}_mem` #11758\n - [ ] remove duplicate instances like `subgroup.to_group` (replaced by the `subgroup_class.to_subgroup` instances that are added by this PR) #11759\n - [ ] further deduplication such as `finsupp_sum_mem`\n## Subclassing `set_like`\nContrary to mathlib's typical subclass pattern, we don't extend `set_like`, but take a `set_like` instance parameter:\n```lean\nclass one_mem_class (S : Type*) (M : out_param $ Type*) [has_one M] [set_like S M] :=\n(one_mem : ∀ (s : S), (1 : M) ∈ s)\n```\ninstead of:\n```lean\nclass one_mem_class (S : Type*) (M : out_param $ Type*) [has_one M]\n extends set_like S M :=\n(one_mem : ∀ (s : S), (1 : M) ∈ s)\n```\nThe main reason is that this avoids some big defeq checks when typechecking e.g. `x * y : s`, where `s : S` and `[comm_group G] [subgroup_class S G]`. Namely, the type `coe_sort s` could be given by `subgroup_class → @@submonoid_class _ _ (comm_group.to_group.to_monoid) → set_like → has_coe_to_sort` or by `subgroup_class → @@submonoid_class _ _ (comm_group.to_comm_monoid.to_monoid) → set_like → has_coe_to_sort`. When checking that `has_mul` on the first type is the same as `has_mul` on the second type, those two inheritance paths are unified many times over ([sometimes exponentially many](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Why.20is.20.60int.2Ecast_abs.60.20so.20slow.3F/near/266945077)). So it's important to keep the size of types small, and therefore we avoid `extends`-based inheritance.\n## Defeq fixes\nAdding instances like `subgroup_class.to_group` means that there are now two (defeq) group instances for `subgroup`. This makes some code more fragile, until we can replace `subgroup.to_group` with its more generic form in a follow-up PR. Especially when taking subgroups of subgroups I needed to help the elaborator in a few places. These should be minimally invasive for other uses of the code.\n## Timeout fixes\nSome of the leaf files started timing out, so I made a couple of fixes. Generally these can be classed as:\n * `squeeze_simps`\n * Give inheritance `subX_class S M` → `X s` (where `s : S`) a lower prority than `Y s` → `X s` so that `subY_class S M` → `Y s` → `X s` is preferred over `subY_class S M` → `subX_class S M` → `X s`. This addresses slow unifications when `x : s`, `s` is a submonoid of `t`, which is itself a subgroup of `G`: existing code expects to go `subgroup → group → monoid`, which got changed to `subgroup_class → submonoid_class → monoid`; when this kind of unification issue appears in your type this results in slow unification. By tweaking the priorities, we help the elaborator find our preferred instance, avoiding the big defeq checks. (The real fix should of course be to fix the unifier so it doesn't become exponential in these kinds of cases.)\n * Split a long proof with duplication into smaller parts. This was basically my last resort.\nI decided to bump the limit for the `fails_quickly` linter for `measure_theory.Lp_meas.complete_space`, which apparently just barely goes over this limit now. The time difference was about 10%-20% for that specific instance.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["mod", "theorem", "neg_mem", ["submodule"]]]}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "coe_div", ["subgroup_class"]], ["add", "theorem", "coe_inclusion", ["subgroup_class"]], ["add", "theorem", "coe_inv", ["subgroup_class"]], ["add", "theorem", "coe_pow", ["subgroup_class"]], ["add", "theorem", "coe_subtype", ["subgroup_class"]], ["add", "theorem", "coe_zpow", ["subgroup_class"]], ["add", "theorem", "div_mem", ["subgroup_class"]], ["add", "theorem", "div_mem_comm_iff", ["subgroup_class"]], ["add", "theorem", "exists_inv_mem_iff_exists_mem", ["subgroup_class"]], ["add", "def", "inclusion", ["subgroup_class"]], ["add", "theorem", "inv_coe_set", ["subgroup_class"]], ["add", "theorem", "inv_mem_iff", ["subgroup_class"]], ["add", "theorem", "mul_mem_cancel_left", ["subgroup_class"]], ["add", "theorem", "mul_mem_cancel_right", ["subgroup_class"]], ["add", "def", "subtype", ["subgroup_class"]], ["add", "theorem", "subtype_comp_inclusion", ["subgroup_class"]], ["add", "theorem", "zpow_mem", ["subgroup_class"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "pow_mem", []]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["mod", "theorem", "coe_list_prod", ["submonoid"]], ["mod", "theorem", "list_prod_mem", ["submonoid"]], ["add", "theorem", "coe_finset_prod", ["submonoid_class"]], ["add", "theorem", "coe_list_prod", ["submonoid_class"]], ["add", "theorem", "coe_multiset_prod", ["submonoid_class"]], ["add", "theorem", "list_prod_mem", ["submonoid_class"]], ["add", "theorem", "multiset_prod_mem", ["submonoid_class"]], ["add", "theorem", "prod_mem", ["submonoid_class"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "coe_eq_one", ["submonoid_class"]], ["add", "theorem", "coe_mul", ["submonoid_class"]], ["add", "theorem", "coe_one", ["submonoid_class"]], ["add", "theorem", "coe_pow", ["submonoid_class"]], ["add", "theorem", "coe_subtype", ["submonoid_class"]], ["add", "theorem", "mk_mul_mk", ["submonoid_class"]], ["add", "theorem", "mk_pow", ["submonoid_class"]], ["add", "theorem", "mul_def", ["submonoid_class"]], ["add", "theorem", "one_def", ["submonoid_class"]], ["add", "def", "subtype", ["submonoid_class"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["add", "theorem", "coe_int_cast", ["subring_class"]], ["add", "theorem", "coe_int_mem", ["subring_class"]], ["add", "theorem", "coe_nat_cast", ["subring_class"]], ["add", "theorem", "coe_subtype", ["subring_class"]], ["add", "def", "subtype", ["subring_class"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "theorem", "coe_nat_mem", ["subsemiring_class"]], ["add", "theorem", "coe_pow", ["subsemiring_class"]], ["add", "theorem", "coe_subtype", ["subsemiring_class"]], ["add", "def", "subtype", ["subsemiring_class"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1649156761, "sha": "220f71ba", "message": "refactor(data/polynomial/basic): overhaul all the misnamed `to_finsupp` lemmas (#13139)\n`zero_to_finsupp` was the statement `of_finsupp 0 = 0`, which doesn't match the name at all.\nThis change:\n* Renames all those lemmas to `of_finsupp_`\n* Changes the direction of `add_to_finsupp` to be `of_finsupp_add`, so the statement is now `of_finsupp (a + b) = _`\n* Adds the missing `to_finsupp_` lemmas\n* Uses the new lemmas to golf the semiring and ring instances\nThe renames include:\n* `zero_to_finsupp` → `of_finsupp_zero`\n* `one_to_finsupp` → `of_finsupp_one`\n* `add_to_finsupp` → `of_finsupp_add` (direction reversed)\n* `neg_to_finsupp` → `of_finsupp_neg` (direction reversed)\n* `mul_to_finsupp` → `of_finsupp_mul` (direction reversed)\n* `smul_to_finsupp` → `of_finsupp_smul` (direction reversed)\n* `sum_to_finsupp` → `of_finsupp_sum` (direction reversed)\n* `to_finsupp_iso_monomial` → `to_finsupp_monomial`\n* `to_finsupp_iso_symm_single` → `of_finsupp_single`\n* `eval₂_to_finsupp_eq_lift_nc` → `eval₂_of_finsupp`\nThe new lemmas include:\n* `of_finsupp_sub`\n* `of_finsupp_pow`\n* `of_finsupp_erase`\n* `of_finsupp_algebra_map`\n* `of_finsupp_eq_zero`\n* `of_finsupp_eq_one`\n* `to_finsupp_zero`\n* `to_finsupp_one`\n* `to_finsupp_add`\n* `to_finsupp_neg`\n* `to_finsupp_sub`\n* `to_finsupp_mul`\n* `to_finsupp_pow`\n* `to_finsupp_erase`\n* `to_finsupp_algebra_map`\n* `to_finsupp_eq_zero`\n* `to_finsupp_eq_one`\n* `to_finsupp_C`\nNote that by marking things like `support` and `coeff` as `@[simp]`, they behave as if they were `support_of_finsupp` or `coeff_of_finsupp` lemma. By making `coeff` pattern match fewer arguments, we encourage it to apply more keenly.\nNeither lemma will fire unless our expression contains `polynomial.of_finsupp`.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "of_finsupp_algebra_map", ["polynomial"]], ["add", "theorem", "to_finsupp_algebra_map", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["del", "theorem", "add_to_finsupp", ["polynomial"]], ["mod", "def", "coeff", ["polynomial"]], ["del", "theorem", "mul_to_finsupp", ["polynomial"]], ["del", "theorem", "neg_to_finsupp", ["polynomial"]], ["add", "theorem", "of_finsupp_add", ["polynomial"]], ["add", "theorem", "of_finsupp_eq_one", ["polynomial"]], ["add", "theorem", "of_finsupp_eq_zero", ["polynomial"]], ["add", "theorem", "of_finsupp_erase", ["polynomial"]], ["add", "theorem", "of_finsupp_inj", ["polynomial"]], ["add", "theorem", "of_finsupp_mul", ["polynomial"]], ["add", "theorem", "of_finsupp_neg", ["polynomial"]], ["add", "theorem", "of_finsupp_one", ["polynomial"]], ["add", "theorem", "of_finsupp_pow", ["polynomial"]], ["add", "theorem", "of_finsupp_single", ["polynomial"]], ["add", "theorem", "of_finsupp_smul", ["polynomial"]], ["add", "theorem", "of_finsupp_sub", ["polynomial"]], ["add", "theorem", "of_finsupp_sum", ["polynomial"]], ["add", "theorem", "of_finsupp_zero", ["polynomial"]], ["del", "theorem", "one_to_finsupp", ["polynomial"]], ["del", "theorem", "smul_to_finsupp", ["polynomial"]], ["del", "theorem", "sum_to_finsupp", ["polynomial"]], ["add", "theorem", "support_of_finsupp", ["polynomial"]], ["add", "theorem", "to_finsupp_C", ["polynomial"]], ["add", "theorem", "to_finsupp_add", ["polynomial"]], ["add", "theorem", "to_finsupp_eq_one", ["polynomial"]], ["add", "theorem", "to_finsupp_eq_zero", ["polynomial"]], ["add", "theorem", "to_finsupp_erase", ["polynomial"]], ["add", "theorem", "to_finsupp_inj", ["polynomial"]], ["add", "theorem", "to_finsupp_injective", ["polynomial"]], ["del", "theorem", "to_finsupp_iso_monomial", ["polynomial"]], ["del", "theorem", "to_finsupp_iso_symm_single", ["polynomial"]], ["add", "theorem", "to_finsupp_monomial", ["polynomial"]], ["add", "theorem", "to_finsupp_mul", ["polynomial"]], ["add", "theorem", "to_finsupp_neg", ["polynomial"]], ["add", "theorem", "to_finsupp_one", ["polynomial"]], ["add", "theorem", "to_finsupp_pow", ["polynomial"]], ["add", "theorem", "to_finsupp_smul", ["polynomial"]], ["add", "theorem", "to_finsupp_sub", ["polynomial"]], ["add", "theorem", "to_finsupp_sum", ["polynomial"]], ["add", "theorem", "to_finsupp_zero", ["polynomial"]], ["del", "theorem", "zero_to_finsupp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval₂_of_finsupp", ["polynomial"]], ["del", "theorem", "eval₂_to_finsupp_eq_lift_nc", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1649156760, "sha": "c108ed47", "message": "feat(topology/algebra): add several lemmas (#13135)\n* add `closure_smul`, `interior_smul`, and `closure_smul₀`;\n* add `is_open.mul_closure` and `is_open.closure_mul`.", "changes": [{"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": [["add", "theorem", "closure_smul", []], ["add", "theorem", "closure_smul₀", []], ["mod", "def", "smul", ["homeomorph"]], ["add", "theorem", "interior_smul", []]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "closure_mul", ["is_open"]], ["add", "theorem", "mul_closure", ["is_open"]]]}]}, {"timestamp": 1649156759, "sha": "bb4099b4", "message": "feat(analysis/normed/normed_field): add abs_le_floor_nnreal_iff (#13130)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": [["add", "theorem", "abs_le_floor_nnreal_iff", ["int"]]]}]}, {"timestamp": 1649156757, "sha": "c7626b7d", "message": "feat(analysis/calculus/fderiv_analytic): an analytic function is smooth (#13127)\nThis basic fact was missing from the library, but all the nontrivial maths were already there, we are just adding the necessary glue.\nAlso, replace `ac_refl` by `ring` in several proofs (to go down from 30s to 4s in one proof, for instance). I wonder if we should ban `ac_refl` from mathlib currently.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "def", "analytic_on", []], ["add", "theorem", "comp_analytic_on", ["continuous_linear_map"]], ["add", "theorem", "comp_has_fpower_series_on_ball", ["continuous_linear_map"]], ["add", "theorem", "radius_le_radius_continuous_linear_map_comp", ["formal_multilinear_series"]], ["add", "theorem", "analytic_on", ["has_fpower_series_on_ball"]], ["add", "theorem", "comp_sub", ["has_fpower_series_on_ball"]], ["add", "theorem", "congr", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "iterated_fderiv_within_of_is_open", []]]}, {"oldPath": "src/analysis/calculus/fderiv_analytic.lean", "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": [["add", "theorem", "cont_diff_on", ["analytic_on"]], ["add", "theorem", "deriv", ["analytic_on"]], ["add", "theorem", "differentiable_on", ["analytic_on"]], ["add", "theorem", "fderiv", ["analytic_on"]], ["add", "theorem", "iterated_deriv", ["analytic_on"]], ["add", "theorem", "iterated_fderiv", ["analytic_on"]], ["del", "theorem", "fderiv", ["has_fpower_series_at"]], ["add", "theorem", "fderiv_eq", ["has_fpower_series_at"]], ["add", "theorem", "fderiv", ["has_fpower_series_on_ball"]], ["add", "theorem", "fderiv_eq", ["has_fpower_series_on_ball"]], ["add", "theorem", "has_fderiv_at", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": [["add", "def", "comp_formal_multilinear_series", ["continuous_linear_map"]], ["add", "theorem", "comp_formal_multilinear_series_apply'", ["continuous_linear_map"]], ["add", "theorem", "comp_formal_multilinear_series_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1649156756, "sha": "cbbaef5a", "message": "chore(algebra/field_power): generalisation linter (#13107)\n@alexjbest, this one is slightly more interesting, as the generalisation linter detected that two lemmas were stated incorrectly!", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "zpow_eq_zero_iff", []], ["mod", "theorem", "zpow_two_nonneg", []], ["mod", "theorem", "zpow_two_pos_of_ne_zero", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["add", "theorem", "zpow_eq_zero_iff", []]]}]}, {"timestamp": 1649156755, "sha": "225d1ce3", "message": "refactor(combinatorics/hall/finite): small simplifications and readability improvements (#13091)", "changes": [{"oldPath": "src/combinatorics/hall/finite.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": [["mod", "theorem", "hall_hard_inductive", ["hall_marriage_theorem"]], ["del", "theorem", "hall_hard_inductive_step", ["hall_marriage_theorem"]], ["del", "theorem", "hall_hard_inductive_zero", ["hall_marriage_theorem"]]]}]}, {"timestamp": 1649149911, "sha": "9ff42fdd", "message": "feat(topology/fiber_bundle): lemmas about `e.symm.trans e'` (#13168)", "changes": [{"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["add", "theorem", "symm_trans_source_eq", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "symm_trans_symm", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "symm_trans_target_eq", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "symm_trans_source_eq", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "symm_trans_target_eq", ["topological_fiber_bundle", "trivialization"]]]}]}, {"timestamp": 1649149910, "sha": "01a424ba", "message": "feat(analysis): continuous_linear_map.prod_mapL (#13165)\nFrom the sphere eversion project,\nCo-authored by Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com>", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "prod_mapL", ["continuous"]], ["add", "theorem", "prod_map_equivL", ["continuous"]], ["add", "def", "prod_mapL", ["continuous_linear_map"]], ["add", "theorem", "prod_mapL_apply", ["continuous_linear_map"]], ["add", "theorem", "prod_mapL", ["continuous_on"]], ["add", "theorem", "prod_map_equivL", ["continuous_on"]]]}]}, {"timestamp": 1649149909, "sha": "0e26022f", "message": "feat(group_theory/complement): Existence of transversals (#13016)\nThis PR constructs transversals containing a specified element. This will be useful for Schreier's lemma (which requires a transversal containing the identity element).", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "exists_left_transversal", ["subgroup"]], ["add", "theorem", "exists_right_transversal", ["subgroup"]]]}]}, {"timestamp": 1649149908, "sha": "63feb1b6", "message": "feat(group_theory/index): Add `relindex_le_of_le_left` and `relindex_le_of_le_right` (#13015)\nThis PR adds `relindex_le_of_le_left` and `relindex_le_of_le_right`, which are companion lemmas to `relindex_eq_zero_of_le_left` and `relindex_eq_zero_of_le_right`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "relindex_le_of_le_left", ["subgroup"]], ["add", "theorem", "relindex_le_of_le_right", ["subgroup"]]]}]}, {"timestamp": 1649149907, "sha": "ea1917b6", "message": "feat(algebra/group/to_additive + algebra/regular/basic): add to_additive for `is_regular` (#12930)\nThis PR add the `to_additive` attribute to most lemmas in the file `algebra.regular.basic`.\nI also added `to_additive` support for this: `to_additive` converts\n* `is_regular` to `is_add_regular`;\n* `is_left_regular` to `is_add_left_regular`;\n* `is_right_regular` to `is_add_right_regular`.\n~~Currently, `to_additive` converts `regular` to `add_regular`. This means that, for instance, `is_left_regular` becomes `is_left_add_regular`.~~\n~~I have a slight preference for `is_add_left_regular/is_add_right_regular`, but I am not able to achieve this automatically.~~\n~~EDIT: actually, the command~~\n```\ngit ls-files | xargs grep -A1 \"to\\_additive\" | grep -B1 regular\n```\n~~reveals more name changed by `to_additive` that require more thought.~~", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": [["add", "structure", "is_add_regular", []], ["mod", "theorem", "mul_is_left_regular_iff", []], ["mod", "theorem", "mul_is_right_regular_iff", []]]}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": []}]}, {"timestamp": 1649146137, "sha": "21c48e1f", "message": "doc(topology/algebra/*): explanation of relation between `uniform_group` and `topological_group` (#13151)\nAdding some comments on how to use `uniform_group` and `topological_group`.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1649136037, "sha": "429c6e35", "message": "chore(topology/algebra/infinite_sum): weaken from equiv to surjective (#13164)", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["del", "theorem", "summable_iff_of_has_sum_iff", ["equiv"]], ["del", "theorem", "tsum_eq_tsum_of_has_sum_iff_has_sum", ["equiv"]], ["add", "theorem", "summable_iff_of_has_sum_iff", ["function", "surjective"]], ["add", "theorem", "tsum_eq_tsum_of_has_sum_iff_has_sum", ["function", "surjective"]]]}]}, {"timestamp": 1649136036, "sha": "4c83474d", "message": "chore(model_theory/basic): Fix namespace on notation for first-order maps (#13145)\nRemoves projection notation from the definition of notation for first-order maps", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}]}, {"timestamp": 1649130798, "sha": "41cd2f82", "message": "chore(data/fin/tuple/basic): lemmas about `cons` (#13027)", "changes": [{"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "cons_eq_cons", ["fin"]], ["add", "def", "cons_induction", ["fin"]], ["add", "theorem", "cons_induction_cons", ["fin"]], ["add", "theorem", "cons_injective2", ["fin"]], ["add", "theorem", "cons_left_injective", ["fin"]], ["add", "theorem", "cons_right_injective", ["fin"]]]}]}, {"timestamp": 1649115367, "sha": "4eee8bc3", "message": "chore(order/complete_lattice): Generalize `⨆`/`⨅` lemmas to dependent families (#13154)\nThe \"bounded supremum\" and \"bounded infimum\" are both instances of nested `⨆`/`⨅`. But they only apply when the inner one runs over a predicate `p : ι → Prop`, and the function couldn't depend on `p`. This generalizes to `κ : ι → Sort*` and allows dependence on `κ i`.\nThe lemmas are renamed from `bsupr`/`binfi` to `supr₂`/`infi₂` to show that they are more general.\nSome lemmas were missing between `⨆` and `⨅` or between `⨆`/`⨅` and nested `⨆`/`⨅`, so I'm adding them as well.\nRenames", "changes": [{"oldPath": "src/analysis/box_integral/partition/filter.lean", "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_congr", ["set"]], ["mod", "theorem", "Inter_subset", ["set"]], ["mod", "theorem", "Union_congr", ["set"]], ["mod", "theorem", "subset_Union", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "span_Union₂", ["submodule"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["del", "theorem", "le_infi2_lintegral", ["measure_theory"]], ["add", "theorem", "le_infi₂_lintegral", ["measure_theory"]], ["del", "theorem", "supr2_lintegral_le", ["measure_theory"]], ["add", "theorem", "supr₂_lintegral_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": [["mod", "theorem", "inner_content_mono'", ["measure_theory", "content"]]]}, {"oldPath": "src/measure_theory/measure/giry_monad.lean", "newPath": "src/measure_theory/measure/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/null_measurable.lean", "newPath": "src/measure_theory/measure/null_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": [["mod", "theorem", "length_mono", ["stieltjes_function"]]]}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": [["del", "theorem", "closure_bsupr_closure", ["closure_operator"]], ["mod", "theorem", "closure_supr_closure", ["closure_operator"]], ["add", "theorem", "closure_supr₂_closure", ["closure_operator"]], ["mod", "theorem", "closure_Union_closure", ["lower_adjoint"]], ["add", "theorem", "closure_Union₂_closure", ["lower_adjoint"]], ["del", "theorem", "closure_bUnion_closure", ["lower_adjoint"]], ["del", "theorem", "closure_bsupr_closure", ["lower_adjoint"]], ["mod", "theorem", "closure_supr_closure", ["lower_adjoint"]], ["add", "theorem", "closure_supr₂_closure", ["lower_adjoint"]]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_Prop_eq", []], ["mod", "theorem", "Inf_eq_infi'", []], ["mod", "theorem", "Inf_eq_infi", []], ["mod", "theorem", "Inf_image'", []], ["mod", "theorem", "Inf_image", []], ["mod", "theorem", "Inf_lt_iff", []], ["mod", "theorem", "Inf_range", []], ["add", "theorem", "Inf_sUnion", []], ["mod", "theorem", "Inf_sup_le_infi_sup", []], ["mod", "theorem", "Sup_Prop_eq", []], ["mod", "theorem", "Sup_eq_supr'", []], ["mod", "theorem", "Sup_eq_supr", []], ["mod", "theorem", "Sup_image'", []], ["mod", "theorem", "Sup_image", []], ["mod", "theorem", "Sup_range", []], ["mod", "theorem", "Sup_sUnion", []], ["add", "theorem", "le_map_Inf", ["antitone"]], ["add", "theorem", "le_map_infi", ["antitone"]], ["add", "theorem", "le_map_infi₂", ["antitone"]], ["add", "theorem", "map_Sup_le", ["antitone"]], ["add", "theorem", "map_supr_le", ["antitone"]], ["add", "theorem", "map_supr₂_le", ["antitone"]], ["del", "theorem", "binfi_le", []], ["del", "theorem", "binfi_le_binfi", []], ["del", "theorem", "binfi_le_of_le", []], ["add", "theorem", "binfi_mono", []], ["del", "theorem", "bsupr_le", []], ["del", "theorem", "bsupr_le_bsupr'", []], ["del", "theorem", "bsupr_le_bsupr", []], ["del", "theorem", "bsupr_le_supr", []], ["add", "theorem", "bsupr_mono", []], ["mod", "theorem", "infi_comp", ["function", "surjective"]], ["add", "theorem", "infi_congr", ["function", "surjective"]], ["mod", "theorem", "supr_comp", ["function", "surjective"]], ["mod", "theorem", "infi_Prop_eq", []], ["mod", "theorem", "infi_and", []], ["mod", "theorem", "infi_comm", []], ["mod", "theorem", "infi_congr", []], ["mod", "theorem", "infi_congr_Prop", []], ["add", "theorem", "infi_const_mono", []], ["mod", "theorem", "infi_eq_top", []], ["mod", "theorem", "infi_exists", []], ["mod", "theorem", "infi_le'", []], ["mod", "theorem", "infi_le", []], ["del", "theorem", "infi_le_binfi", []], ["del", "theorem", "infi_le_infi2", []], ["del", "theorem", "infi_le_infi", []], ["del", "theorem", "infi_le_infi_const", []], ["add", "theorem", "infi_le_infi₂", []], ["mod", "theorem", "infi_le_of_le", []], ["mod", "theorem", "infi_lt_iff", []], ["add", "theorem", "infi_mono'", []], ["add", "theorem", "infi_mono", []], ["mod", "theorem", "infi_range'", []], ["mod", "theorem", "infi_range", []], ["mod", "theorem", "infi_top", []], ["mod", "theorem", "infi_true", []], ["add", "theorem", "infi₂_eq_top", []], ["add", "theorem", "infi₂_le", []], ["add", "theorem", "infi₂_le_of_le", []], ["add", "theorem", "infi₂_mono'", []], ["add", "theorem", "infi₂_mono", []], ["mod", "theorem", "infi_eq", ["is_glb"]], ["mod", "theorem", "is_glb_Inf", []], ["mod", "theorem", "is_glb_infi", []], ["mod", "theorem", "supr_eq", ["is_lub"]], ["mod", "theorem", "is_lub_Sup", []], ["mod", "theorem", "is_lub_supr", []], ["del", "theorem", "le_binfi", []], ["del", "theorem", "le_bsupr", []], ["del", "theorem", "le_bsupr_of_le", []], ["mod", "theorem", "le_infi", []], ["mod", "theorem", "le_infi_iff", []], ["add", "theorem", "le_infi₂", []], ["add", "theorem", "le_infi₂_iff", []], ["mod", "theorem", "le_supr'", []], ["mod", "theorem", "le_supr", []], ["mod", "theorem", "le_supr_of_le", []], ["add", "theorem", "le_supr₂", []], ["add", "theorem", "le_supr₂_of_le", []], ["mod", "theorem", "lt_Sup_iff", []], ["add", "theorem", "lt_infi_iff", []], ["mod", "theorem", "lt_supr_iff", []], ["del", "theorem", "le_map_supr2", ["monotone"]], ["add", "theorem", "le_map_supr₂", ["monotone"]], ["del", "theorem", "map_infi2_le", ["monotone"]], ["add", "theorem", "map_infi₂_le", ["monotone"]], ["mod", "theorem", "sup_Inf_le_infi_sup", []], ["mod", "theorem", "supr_Prop_eq", []], ["mod", "theorem", "supr_and", []], ["mod", "theorem", "supr_bot", []], ["mod", "theorem", "supr_comm", []], ["mod", "theorem", "supr_congr", []], ["mod", "theorem", "supr_congr_Prop", []], ["add", "theorem", "supr_const_mono", []], ["mod", "theorem", "supr_eq_bot", []], ["mod", "theorem", "supr_exists", []], ["mod", "theorem", "supr_inf_le_Sup_inf", []], ["mod", "theorem", "supr_inf_le_inf_Sup", []], ["mod", "theorem", "supr_le", []], ["mod", "theorem", "supr_le_iff", []], ["del", "theorem", "supr_le_supr2", []], ["del", "theorem", "supr_le_supr", []], ["del", "theorem", "supr_le_supr_const", []], ["mod", "theorem", "supr_lt_iff", []], ["add", "theorem", "supr_mono'", []], ["add", "theorem", "supr_mono", []], ["mod", "theorem", "supr_range'", []], ["mod", "theorem", "supr_range", []], ["mod", "theorem", "supr_true", []], ["add", "theorem", "supr₂_eq_bot", []], ["add", "theorem", "supr₂_le", []], ["add", "theorem", "supr₂_le_iff", []], ["add", "theorem", "supr₂_le_supr", []], ["add", "theorem", "supr₂_mono'", []], ["add", "theorem", "supr₂_mono", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "lift_mono'", ["filter"]]]}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": [["mod", "theorem", "pi_mono", ["filter"]]]}, {"oldPath": "src/order/hom/order.lean", "newPath": "src/order/hom/order.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": []}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": []}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/monotone_convergence.lean", "newPath": "src/topology/algebra/order/monotone_convergence.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "theorem", "inf_edist_le_edist_of_mem", ["emetric"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1649102810, "sha": "bae79d04", "message": "chore(number_theory/cyclotomic/discriminant): golf `repr_pow_is_integral` a little (#13167)\nUsing nice mathlib tactics instead of doing boilerplate tasks by hand to reduce the verbosity.", "changes": [{"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}]}, {"timestamp": 1649102808, "sha": "a925d1dd", "message": "chore(topology/algebra/module/basic): add continuous_linear_map.copy (#13166)\nAs suggested by the fun_like docs", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1649096601, "sha": "05e2fc02", "message": "chore(order/*): generalisation linter (#13105)", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["mod", "theorem", "is_simple_order_Ici_iff_is_coatom", ["set"]], ["mod", "theorem", "is_simple_order_Iic_iff_is_atom", ["set"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": [["mod", "theorem", "coe_bot", ["set", "Ici"]], ["mod", "theorem", "coe_top", ["set", "Iic"]]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}]}, {"timestamp": 1649089267, "sha": "fe21f5de", "message": "feat(group_theory/torsion): define torsion subgroups and show they're torsion (#12769)\nAlso tidy up some linter errors and docstring for the module.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": [["add", "theorem", "is_torsion", ["comm_monoid", "torsion"]], ["add", "def", "torsion", ["comm_monoid"]], ["add", "theorem", "torsion_eq_top", ["monoid", "is_torsion"]], ["add", "def", "torsion_mul_equiv", ["monoid", "is_torsion"]], ["add", "def", "of_torsion", ["torsion"]], ["add", "def", "torsion", []], ["add", "theorem", "torsion_eq_torsion_submonoid", []]]}]}, {"timestamp": 1649089266, "sha": "21082848", "message": "refactor(order/succ_order/basic): Use `is_min`/`is_max` (#12597)\nReformulate the `succ a ≤ a` and `a ≤ pred a` conditions to use `is_max` and `is_min`. This simplifies the proofs.\nChange namespaces from `succ_order` and `pred_order` to `order`.\nLemma renames", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/data/int/succ_pred.lean", "newPath": "src/data/int/succ_pred.lean", "changes": [["add", "theorem", "pred_eq_pred", ["int"]], ["mod", "theorem", "pred_iterate", ["int"]], ["add", "theorem", "succ_eq_succ", ["int"]], ["mod", "theorem", "succ_iterate", ["int"]]]}, {"oldPath": "src/data/nat/succ_pred.lean", "newPath": "src/data/nat/succ_pred.lean", "changes": [["add", "theorem", "pred_eq_pred", ["nat"]], ["mod", "theorem", "pred_iterate", ["nat"]], ["add", "theorem", "succ_eq_succ", ["nat"]], ["mod", "theorem", "succ_iterate", ["nat"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "not_is_bot_iff_ne_bot", []], ["add", "theorem", "not_is_max_bot", []], ["add", "theorem", "not_is_max_iff_ne_top", []], ["add", "theorem", "not_is_min_iff_ne_bot", []], ["add", "theorem", "not_is_min_top", []], ["add", "theorem", "not_is_top_iff_ne_top", []], ["add", "theorem", "not_coe_le_bot", ["with_bot"]], ["mod", "theorem", "not_top_le_coe", ["with_top"]]]}, {"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["add", "theorem", "not_is_max_of_lt", []], ["add", "theorem", "not_is_min_of_lt", []]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["mod", "theorem", "succ_eq", ["covby"]], ["del", "theorem", "covby_iff_pred_eq", []], ["del", "theorem", "covby_iff_succ_eq", []], ["add", "theorem", "Ici_succ", ["order"]], ["add", "theorem", "Ici_succ_of_not_is_max", ["order"]], ["add", "theorem", "Iic_pred", ["order"]], ["add", "theorem", "Iic_pred_of_not_is_min", ["order"]], ["add", "theorem", "Iio_succ", ["order"]], ["add", "theorem", "Iio_succ_of_not_is_max", ["order"]], ["add", "theorem", "Ioi_pred", ["order"]], ["add", "theorem", "Ioi_pred_of_not_is_min", ["order"]], ["add", "theorem", "bot_lt_succ", ["order"]], ["add", "theorem", "covby_succ", ["order"]], ["add", "theorem", "covby_succ_of_not_is_max", ["order"]], ["add", "theorem", "le_le_succ_iff", ["order"]], ["add", "theorem", "le_of_lt_succ", ["order"]], ["add", "theorem", "le_of_pred_lt", ["order"]], ["add", "theorem", "le_pred_iff", ["order"]], ["add", "theorem", "le_pred_iff_eq_bot", ["order"]], ["add", "theorem", "le_pred_iff_is_min", ["order"]], ["add", "theorem", "le_pred_iff_lt_or_eq", ["order"]], ["add", "theorem", "le_pred_iff_of_not_is_min", ["order"]], ["add", "theorem", "le_pred_of_lt", ["order"]], ["add", "theorem", "le_succ", ["order"]], ["add", "theorem", "le_succ_iff_lt_or_eq", ["order"]], ["add", "theorem", "lt_succ", ["order"]], ["add", "theorem", "lt_succ_iff", ["order"]], ["add", "theorem", "lt_succ_iff_lt_or_eq", ["order"]], ["add", "theorem", "lt_succ_iff_ne_top", ["order"]], ["add", "theorem", "lt_succ_iff_not_is_max", ["order"]], ["add", "theorem", "lt_succ_iff_of_not_is_max", ["order"]], ["add", "theorem", "max_of_succ_le", ["order"]], ["add", "theorem", "min_of_le_pred", ["order"]], ["add", "def", "pred", ["order"]], ["add", "theorem", "pred_bot", ["order"]], ["add", "theorem", "pred_covby", ["order"]], ["add", "theorem", "pred_covby_of_not_is_min", ["order"]], ["add", "theorem", "pred_eq_iff_covby", ["order"]], ["add", "theorem", "pred_eq_iff_is_min", ["order"]], ["add", "theorem", "pred_eq_pred_iff", ["order"]], ["add", "theorem", "pred_eq_supr", ["order"]], ["add", "theorem", "pred_injective", ["order"]], ["add", "theorem", "pred_le", ["order"]], ["add", "theorem", "pred_le_le_iff", ["order"]], ["add", "theorem", "pred_le_pred", ["order"]], ["add", "theorem", "pred_le_pred_iff", ["order"]], ["add", "theorem", "pred_lt", ["order"]], ["add", "theorem", "pred_lt_iff", ["order"]], ["add", "theorem", "pred_lt_iff_lt_or_eq", ["order"]], ["add", "theorem", "pred_lt_iff_ne_bot", ["order"]], ["add", "theorem", "pred_lt_iff_not_is_min", ["order"]], ["add", "theorem", "pred_lt_iff_of_not_is_min", ["order"]], ["add", "theorem", "pred_lt_pred_iff", ["order"]], ["add", "theorem", "pred_lt_top", ["order"]], ["add", "theorem", "pred_mono", ["order"]], ["add", "theorem", "pred_ne_pred_iff", ["order"]], ["add", "theorem", "pred_ne_top", ["order"]], ["add", "theorem", "pred_strict_mono", ["order"]], ["add", "theorem", "pred_succ", ["order"]], ["add", "theorem", "pred_succ_of_not_is_max", ["order"]], ["add", "def", "succ", ["order"]], ["add", "theorem", "succ_eq_iff_covby", ["order"]], ["add", "theorem", "succ_eq_iff_is_max", ["order"]], ["add", "theorem", "succ_eq_infi", ["order"]], ["add", "theorem", "succ_eq_succ_iff", ["order"]], ["add", "theorem", "succ_injective", ["order"]], ["add", "theorem", "succ_le_iff", ["order"]], ["add", "theorem", "succ_le_iff_eq_top", ["order"]], ["add", "theorem", "succ_le_iff_is_max", ["order"]], ["add", "theorem", "succ_le_iff_of_not_is_max", ["order"]], ["add", "theorem", "succ_le_of_lt", ["order"]], ["add", "theorem", "succ_le_succ", ["order"]], ["add", "theorem", "succ_le_succ_iff", ["order"]], ["add", "theorem", "succ_lt_succ_iff", ["order"]], ["add", "theorem", "succ_mono", ["order"]], ["add", "theorem", "succ_ne_bot", ["order"]], ["add", "theorem", "succ_ne_succ_iff", ["order"]], ["add", "theorem", "succ_pred", ["order"]], ["add", "theorem", "succ_pred_of_not_is_min", ["order"]], ["add", "theorem", "succ_strict_mono", ["order"]], ["add", "theorem", "succ_top", ["order"]], ["del", "theorem", "Ici_eq_Ioi_pred'", ["pred_order"]], ["del", "theorem", "Ici_eq_Ioi_pred", ["pred_order"]], ["del", "theorem", "Iio_eq_Iic_pred'", ["pred_order"]], ["del", "theorem", "Iio_eq_Iic_pred", ["pred_order"]], ["del", "theorem", "le_pred_iff", ["pred_order"]], ["del", "theorem", "le_pred_iff_eq_bot", ["pred_order"]], ["del", "theorem", "le_pred_iff_lt_or_eq", ["pred_order"]], ["del", "theorem", "le_pred_iff_of_not_is_min", ["pred_order"]], ["mod", "def", "of_le_pred_iff", ["pred_order"]], ["mod", "def", "of_le_pred_iff_of_pred_le_pred", ["pred_order"]], ["del", "theorem", "pred_bot", ["pred_order"]], ["del", "theorem", "pred_covby", ["pred_order"]], ["del", "theorem", "pred_covby_of_nonempty_Iio", ["pred_order"]], ["del", "theorem", "pred_eq_pred_iff", ["pred_order"]], ["del", "theorem", "pred_eq_supr", ["pred_order"]], ["del", "theorem", "pred_injective", ["pred_order"]], ["del", "theorem", "pred_le_le_iff", ["pred_order"]], ["del", "theorem", "pred_le_pred", ["pred_order"]], ["del", "theorem", "pred_le_pred_iff", ["pred_order"]], ["del", "theorem", "pred_lt", ["pred_order"]], ["del", "theorem", "pred_lt_iff", ["pred_order"]], ["del", "theorem", "pred_lt_iff_lt_or_eq", ["pred_order"]], ["del", "theorem", "pred_lt_iff_ne_bot", ["pred_order"]], ["del", "theorem", "pred_lt_iff_of_not_is_min", ["pred_order"]], ["del", "theorem", "pred_lt_of_not_is_min", ["pred_order"]], ["del", "theorem", "pred_lt_of_not_minimal", ["pred_order"]], ["del", "theorem", "pred_lt_pred_iff", ["pred_order"]], ["del", "theorem", "pred_lt_top", ["pred_order"]], ["del", "theorem", "pred_mono", ["pred_order"]], ["del", "theorem", "pred_ne_pred_iff", ["pred_order"]], ["del", "theorem", "pred_ne_top", ["pred_order"]], ["del", "theorem", "pred_strict_mono", ["pred_order"]], ["del", "theorem", "pred_succ", []], ["del", "theorem", "pred_succ_of_nonempty_Ioi", []], ["del", "theorem", "Iic_eq_Iio_succ'", ["succ_order"]], ["del", "theorem", "Iic_eq_Iio_succ", ["succ_order"]], ["del", "theorem", "Ioi_eq_Ici_succ'", ["succ_order"]], ["del", "theorem", "Ioi_eq_Ici_succ", ["succ_order"]], ["del", "theorem", "bot_lt_succ", ["succ_order"]], ["del", "theorem", "covby_succ", ["succ_order"]], ["del", "theorem", "covby_succ_of_nonempty_Ioi", ["succ_order"]], ["del", "theorem", "le_le_succ_iff", ["succ_order"]], ["del", "theorem", "le_succ_iff_lt_or_eq", ["succ_order"]], ["del", "theorem", "lt_succ", ["succ_order"]], ["del", "theorem", "lt_succ_iff", ["succ_order"]], ["del", "theorem", "lt_succ_iff_lt_or_eq", ["succ_order"]], ["del", "theorem", "lt_succ_iff_ne_top", ["succ_order"]], ["del", "theorem", "lt_succ_iff_of_not_is_max", ["succ_order"]], ["del", "theorem", "lt_succ_of_not_is_max", ["succ_order"]], ["del", "theorem", "lt_succ_of_not_maximal", ["succ_order"]], ["mod", "def", "of_succ_le_iff", ["succ_order"]], ["mod", "def", "of_succ_le_iff_of_le_lt_succ", ["succ_order"]], ["del", "theorem", "succ_eq_infi", ["succ_order"]], ["del", "theorem", "succ_eq_succ_iff", ["succ_order"]], ["del", "theorem", "succ_injective", ["succ_order"]], ["del", "theorem", "succ_le_iff", ["succ_order"]], ["del", "theorem", "succ_le_iff_eq_top", ["succ_order"]], ["del", "theorem", "succ_le_iff_of_not_is_max", ["succ_order"]], ["del", "theorem", "succ_le_succ", ["succ_order"]], ["del", "theorem", "succ_le_succ_iff", ["succ_order"]], ["del", "theorem", "succ_lt_succ_iff", ["succ_order"]], ["del", "theorem", "succ_mono", ["succ_order"]], ["del", "theorem", "succ_ne_bot", ["succ_order"]], ["del", "theorem", "succ_ne_succ_iff", ["succ_order"]], ["del", "theorem", "succ_strict_mono", ["succ_order"]], ["del", "theorem", "succ_top", ["succ_order"]], ["del", "theorem", "succ_pred", []], ["del", "theorem", "succ_pred_of_nonempty_Iio", []]]}, {"oldPath": "src/order/succ_pred/relation.lean", "newPath": "src/order/succ_pred/relation.lean", "changes": []}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/instances/discrete.lean", "newPath": "src/topology/instances/discrete.lean", "changes": []}]}, {"timestamp": 1649082498, "sha": "f55d3524", "message": "feat(order/filter/n_ary): Binary and ternary maps of filters (#13062)\nDefine `filter.map₂` and `filter.map₃`, the binary and ternary maps of filters.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_subset_image2_left", ["set"]], ["add", "theorem", "image_subset_image2_right", ["set"]]]}, {"oldPath": null, "newPath": "src/order/filter/n_ary.lean", "changes": [["add", "theorem", "image2_mem_map₂", ["filter"]], ["add", "theorem", "le_map₂_iff", ["filter"]], ["add", "theorem", "map_map₂", ["filter"]], ["add", "theorem", "map_map₂_antidistrib", ["filter"]], ["add", "theorem", "map_map₂_antidistrib_left", ["filter"]], ["add", "theorem", "map_map₂_antidistrib_right", ["filter"]], ["add", "theorem", "map_map₂_distrib", ["filter"]], ["add", "theorem", "map_map₂_distrib_left", ["filter"]], ["add", "theorem", "map_map₂_distrib_right", ["filter"]], ["add", "theorem", "map_map₂_right_anticomm", ["filter"]], ["add", "theorem", "map_map₂_right_comm", ["filter"]], ["add", "def", "map₂", ["filter"]], ["add", "theorem", "map₂_assoc", ["filter"]], ["add", "theorem", "map₂_bot_left", ["filter"]], ["add", "theorem", "map₂_bot_right", ["filter"]], ["add", "theorem", "map₂_comm", ["filter"]], ["add", "theorem", "map₂_eq_bot_iff", ["filter"]], ["add", "theorem", "map₂_inf_subset_left", ["filter"]], ["add", "theorem", "map₂_inf_subset_right", ["filter"]], ["add", "theorem", "map₂_left", ["filter"]], ["add", "theorem", "map₂_left_comm", ["filter"]], ["add", "theorem", "map₂_map_left", ["filter"]], ["add", "theorem", "map₂_map_left_anticomm", ["filter"]], ["add", "theorem", "map₂_map_left_comm", ["filter"]], ["add", "theorem", "map₂_map_right", ["filter"]], ["add", "theorem", "map₂_map₂_left", ["filter"]], ["add", "theorem", "map₂_map₂_right", ["filter"]], ["add", "theorem", "map₂_mono", ["filter"]], ["add", "theorem", "map₂_mono_left", ["filter"]], ["add", "theorem", "map₂_mono_right", ["filter"]], ["add", "theorem", "map₂_ne_bot_iff", ["filter"]], ["add", "theorem", "map₂_pure", ["filter"]], ["add", "theorem", "map₂_pure_left", ["filter"]], ["add", "theorem", "map₂_pure_right", ["filter"]], ["add", "theorem", "map₂_right", ["filter"]], ["add", "theorem", "map₂_right_comm", ["filter"]], ["add", "theorem", "map₂_sup_left", ["filter"]], ["add", "theorem", "map₂_sup_right", ["filter"]], ["add", "theorem", "map₂_swap", ["filter"]], ["add", "def", "map₃", ["filter"]], ["add", "theorem", "mem_map₂_iff", ["filter"]], ["add", "theorem", "map₂", ["filter", "ne_bot"]]]}]}, {"timestamp": 1649064759, "sha": "b189be76", "message": "feat(algebra/big_operators): add `commute.*_sum_{left,right}` lemmas (#13035)\nThis moves the existing `prod_commute` lemmas into the `commute` namespace for discoverabiliy, and adds the swapped variants.\nThis also fixes an issue where lemmas about `add_commute` were misnamed using `commute`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "sum_left", ["commute"]], ["add", "theorem", "sum_right", ["commute"]]]}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "multiset_sum_left", ["commute"]], ["add", "theorem", "multiset_sum_right", ["commute"]]]}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": []}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "list_prod_left", ["commute"]], ["add", "theorem", "list_prod_right", ["commute"]], ["add", "theorem", "list_sum_left", ["commute"]], ["add", "theorem", "list_sum_right", ["commute"]], ["del", "theorem", "prod_commute", ["list"]]]}]}, {"timestamp": 1649062584, "sha": "19448a93", "message": "refactor(group_theory/schur_zassenhaus): Some golfing (#13017)\nThis PR uses `mem_left_transversals.to_equiv` to golf the start of `schur_zassenhaus.lean`.", "changes": [{"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}]}, {"timestamp": 1649060602, "sha": "0cb9407a", "message": "chore(measure_theory/function/locally_integrable): fix typo (#13160)", "changes": [{"oldPath": "src/measure_theory/function/locally_integrable.lean", "newPath": "src/measure_theory/function/locally_integrable.lean", "changes": [["del", "theorem", "ae_measurable", ["measure_theory", "locally_integrable"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "locally_integrable"]]]}]}, {"timestamp": 1649054894, "sha": "6dde651a", "message": "feat(algebra/quaternion): Cardinality of quaternion algebras (#12891)", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["add", "theorem", "mk_quaternion", ["cardinal"]], ["add", "theorem", "mk_quaternion_algebra", ["cardinal"]], ["add", "theorem", "mk_quaternion_algebra_of_infinite", ["cardinal"]], ["add", "theorem", "mk_quaternion_of_infinite", ["cardinal"]], ["add", "theorem", "mk_univ_quaternion", ["cardinal"]], ["add", "theorem", "mk_univ_quaternion_algebra", ["cardinal"]], ["add", "theorem", "mk_univ_quaternion_algebra_of_infinite", ["cardinal"]], ["add", "theorem", "mk_univ_quaternion_of_infinite", ["cardinal"]], ["add", "def", "equiv_prod", ["quaternion"]], ["add", "def", "equiv_prod", ["quaternion_algebra"]]]}]}, {"timestamp": 1649052927, "sha": "8cb151f7", "message": "feat(number_theory/cyclotomic/discriminant): add discr_zeta_eq_discr_zeta_sub_one (#12710)\nWe add `discr_zeta_eq_discr_zeta_sub_one`: the discriminant of the power basis given by a primitive root of unity `ζ` is the same as the\ndiscriminant of the power basis given by `ζ - 1`.\nfrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": [["add", "theorem", "discr_zeta_eq_discr_zeta_sub_one", ["is_primitive_root"]]]}, {"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": [["add", "theorem", "repr_gen_pow_is_integral", ["power_basis"]], ["add", "theorem", "repr_mul_is_integral", ["power_basis"]], ["add", "theorem", "repr_pow_is_integral", ["power_basis"]], ["add", "theorem", "to_matrix_is_integral", ["power_basis"]]]}]}, {"timestamp": 1649008323, "sha": "61e18ae1", "message": "fix(data/polynomial/basic): op_ring_equiv docstring (#13132)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1649004131, "sha": "36e1cdf8", "message": "feat(topology/uniform_space/basic): constructing a `uniform_space.core` from a filter basis for the uniformity (#13065)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "def", "mk_of_basis", ["uniform_space", "core"]]]}]}, {"timestamp": 1648985545, "sha": "12128187", "message": "feat(category_theory/abelian): transferring \"abelian-ness\" across a functor (#13059)\nIf `C` is an additive category, `D` is an abelian category,\nwe have `F : C ⥤ D` `G : D ⥤ C` (both preserving zero morphisms),\n`G` is left exact (that is, preserves finite limits),\nand further we have `adj : G ⊣ F` and `i : F ⋙ G ≅ 𝟭 C`,\nthen `C` is also abelian.\nSee https://stacks.math.columbia.edu/tag/03A3", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/transfer.lean", "changes": [["add", "def", "coimage_iso_image", ["category_theory", "abelian_of_adjunction"]], ["add", "def", "coimage_iso_image_aux", ["category_theory", "abelian_of_adjunction"]], ["add", "theorem", "coimage_iso_image_hom", ["category_theory", "abelian_of_adjunction"]], ["add", "def", "cokernel_iso", ["category_theory", "abelian_of_adjunction"]], ["add", "theorem", "has_cokernels", ["category_theory", "abelian_of_adjunction"]], ["add", "theorem", "has_kernels", ["category_theory", "abelian_of_adjunction"]], ["add", "def", "abelian_of_adjunction", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "newPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "changes": []}]}, {"timestamp": 1648979337, "sha": "6e26cff9", "message": "feat(analysis/special_functions): add the Gamma function (#12917)", "changes": [{"oldPath": null, "newPath": "src/analysis/special_functions/gamma.lean", "changes": [["add", "def", "Gamma_integral", ["complex"]], ["add", "theorem", "Gamma_integral_convergent", ["complex"]], ["add", "theorem", "Gamma_integral_of_real", ["complex"]], ["add", "theorem", "Gamma_integral_one", ["complex"]], ["add", "theorem", "integral_exp_neg_Ioi", []], ["add", "def", "Gamma_integral", ["real"]], ["add", "theorem", "Gamma_integral_convergent", ["real"]], ["add", "theorem", "Gamma_integral_one", ["real"]], ["add", "theorem", "Gamma_integrand_is_O", ["real"]]]}]}, {"timestamp": 1648968242, "sha": "6e5ca7d0", "message": "chore(*): Bump to Lean 3.42.1 (#13146)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1648968241, "sha": "d6731a48", "message": "docs(data/polynomial/basic): Remove commutative from doc-module (#13144)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1648961450, "sha": "4f14d4d4", "message": "chore(topology/vector_bundle): split long proof (#13142)\nThe construction of the direct sum of two vector bundles is on the verge of timing out, and an upcoming refactor will push it over the edge. Split it pre-emptively.", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "theorem", "continuous_inv_fun", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "theorem", "continuous_to_fun", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "theorem", "left_inv", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "theorem", "right_inv", ["topological_vector_bundle", "trivialization", "prod"]]]}]}, {"timestamp": 1648961449, "sha": "410e3d0e", "message": "feat(logic/small, model_theory/*): Smallness of vectors, lists, terms, and substructures (#13123)\nProvides instances of `small` on vectors, lists, terms, and `substructure.closure`.", "changes": [{"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}]}, {"timestamp": 1648961448, "sha": "2d22b5d3", "message": "chore(algebra/*): generalisation linter (#13109)", "changes": [{"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["mod", "theorem", "map_mul_indicator", ["monoid_hom"]]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "theorem", "nonzero_of_invertible", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "map_int_module_smul", ["add_monoid_hom"]], ["mod", "theorem", "map_nat_module_smul", ["add_monoid_hom"]]]}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["mod", "theorem", "mul_support_mul", ["function"]]]}]}, {"timestamp": 1648961447, "sha": "d33ea7b2", "message": "chore(ring_theory/polynomial/pochhammer): make semiring implicit in a lemma that I just moved (#13077)\nMoving lemma `pochhammer_succ_eval` to reduce typeclass assumptions (#13024), the `semiring` became accidentally explicit. Since one of the explicit arguments of the lemma is a term in the semiring, I changed the `semiring` to being implicit.\nThe neighbouring lemmas do not involve terms in their respective semiring, which is why the semiring is explicit throughout the section.", "changes": [{"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": [["mod", "theorem", "pochhammer_succ_eval", []]]}]}, {"timestamp": 1648961446, "sha": "955e95ad", "message": "feat(logic/function/basic): add some more API for `injective2` (#13074)\nNote that the new `.left` and `.right` lemmas are weaker than the original ones, but the original lemmas were pretty much useless anyway, as `hf.left h` was the same as `(hf h).left`.", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "eq_iff", ["function", "injective2"]], ["add", "theorem", "left'", ["function", "injective2"]], ["add", "theorem", "right'", ["function", "injective2"]]]}]}, {"timestamp": 1648955244, "sha": "ef7298d4", "message": "chore(data/nat/gcd): move nat.coprime.mul_add_mul_ne_mul (#13022)\nI'm not sure if it will be useful elsewhere, but this seems like a better place for it anyway.", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "mul_add_mul_ne_mul", ["nat", "coprime"]]]}, {"oldPath": "src/number_theory/frobenius_number.lean", "newPath": "src/number_theory/frobenius_number.lean", "changes": [["del", "theorem", "mul_add_mul_ne_mul", ["nat", "coprime"]]]}]}, {"timestamp": 1648951440, "sha": "e1eb0bd9", "message": "feat(algebra/algebra/unitization): add star structure for the unitization of a non-unital algebra (#13120)\nThe unitization of an algebra has a natural star structure when the underlying scalar ring and non-unital algebra have suitably interacting star structures.", "changes": [{"oldPath": "src/algebra/algebra/unitization.lean", "newPath": "src/algebra/algebra/unitization.lean", "changes": [["add", "theorem", "coe_star", ["unitization"]], ["add", "theorem", "fst_star", ["unitization"]], ["add", "theorem", "inl_star", ["unitization"]], ["add", "theorem", "snd_star", ["unitization"]]]}]}, {"timestamp": 1648946207, "sha": "e41208d8", "message": "feat(category_theory/monoidal): define monoidal structures on cartesian products of monoidal categories, (lax) monoidal functors and monoidal natural transformations (#13033)\nThis PR contains (fairly straightforward) definitions / proofs of the following facts:\n- Cartesian product of monoidal categories is a monoidal category.\n- Cartesian product of (lax) monoidal functors is a (lax) monoidal functor.\n- Cartesian product of monoidal natural transformations is a monoidal natural transformation.\nThese are prerequisites to defining a monoidal category structure on the category of monoids in a braided monoidal category (with the approach that I've chosen). In particular, the first bullet point above is a prerequisite to endowing the tensor product functor, viewed as a functor from `C × C` to `C`, where `C` is a braided monoidal category, with a strength that turns it into a monoidal functor (stacked PR).\nThis fits as follows into the general strategy for defining a monoidal category structure on the category of monoids in a braided monoidal category `C`, at least conceptually:\nfirst, define a monoidal category structure on the category of lax monoidal functors into `C`, and then transport this structure to the category `Mon_ C` of monoids along the equivalence between `Mon_ C` and the category `lax_monoid_functor (discrete punit) C`. All, not necessarily lax monoidal functors into `C` form a monoidal category with \"pointwise\" tensor product. The tensor product of two lax monoidal functors equals the composition of their cartesian product, which is lax monoidal, with the tensor product on`C`, which is monoidal if `C` is braided. This gives a way to define a tensor product of two lax monoidal functors. The details still need to be fleshed out.", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "prod_monoidal_left_unitor_hom_fst", ["category_theory", "monoidal_category"]], ["add", "theorem", "prod_monoidal_left_unitor_hom_snd", ["category_theory", "monoidal_category"]], ["add", "theorem", "prod_monoidal_left_unitor_inv_fst", ["category_theory", "monoidal_category"]], ["add", "theorem", "prod_monoidal_left_unitor_inv_snd", ["category_theory", "monoidal_category"]], ["add", "theorem", "prod_monoidal_right_unitor_hom_fst", ["category_theory", "monoidal_category"]], ["add", "theorem", "prod_monoidal_right_unitor_hom_snd", ["category_theory", "monoidal_category"]], ["add", "theorem", "prod_monoidal_right_unitor_inv_fst", ["category_theory", "monoidal_category"]], ["add", "theorem", "prod_monoidal_right_unitor_inv_snd", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["add", "def", "prod'", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "prod'_to_functor", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "prod'_ε", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "prod'_μ", ["category_theory", "lax_monoidal_functor"]], ["add", "def", "prod", ["category_theory", "lax_monoidal_functor"]], ["add", "def", "diag", ["category_theory", "monoidal_functor"]], ["add", "def", "prod'", ["category_theory", "monoidal_functor"]], ["add", "theorem", "prod'_to_lax_monoidal_functor", ["category_theory", "monoidal_functor"]], ["add", "def", "prod", ["category_theory", "monoidal_functor"]]]}, {"oldPath": "src/category_theory/monoidal/natural_transformation.lean", "newPath": "src/category_theory/monoidal/natural_transformation.lean", "changes": [["add", "def", "prod", ["category_theory", "monoidal_nat_trans"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["add", "def", "diag", ["category_theory", "functor"]], ["add", "theorem", "diag_map", ["category_theory", "functor"]], ["add", "theorem", "diag_obj", ["category_theory", "functor"]], ["add", "theorem", "is_iso_prod_iff", ["category_theory"]], ["add", "def", "prod", ["category_theory", "iso"]]]}]}, {"timestamp": 1648942148, "sha": "bb5e5986", "message": "feat(set_theory/cardinal_ordinal): Add `simp` lemmas for `aleph` (#13056)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "aleph_add_aleph", ["cardinal"]], ["add", "theorem", "aleph_mul_aleph", ["cardinal"]], ["add", "theorem", "aleph_mul_omega", ["cardinal"]], ["add", "theorem", "max_aleph_eq", ["cardinal"]], ["add", "theorem", "omega_mul_aleph", ["cardinal"]]]}]}, {"timestamp": 1648938210, "sha": "d4b40c35", "message": "feat(measure_theory/measure/haar_lebesgue): measure of an affine subspace is zero (#13137)\n* Additive Haar measure of an affine subspace of a finite dimensional\nreal vector space is zero.\n* Additive Haar measure of the image of a set `s` under `homothety x r` is\n equal to `|r ^ d| * μ s`.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "coe_eq_bot_iff", ["affine_subspace"]], ["add", "theorem", "coe_eq_univ_iff", ["affine_subspace"]], ["add", "theorem", "eq_bot_or_nonempty", ["affine_subspace"]], ["add", "theorem", "nonempty_iff_ne_bot", ["affine_subspace"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "theorem", "add_haar_affine_subspace", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_image_homothety", ["measure_theory", "measure"]]]}]}, {"timestamp": 1648938209, "sha": "7617942c", "message": "feat(order/filter/basic): add `filter.eventually_{eq,le}.prod_map` (#13103)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "prod_map", ["filter", "eventually_eq"]], ["add", "theorem", "prod_map", ["filter", "eventually_le"]]]}]}, {"timestamp": 1648928609, "sha": "a29bd58d", "message": "feat(algebra/regular/basic): add lemma commute.is_regular_iff (#13104)\nThis lemma shows that an element that commutes with every element is regular if and only if it is left regular.", "changes": [{"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": [["add", "theorem", "is_regular_iff", ["commute"]], ["add", "theorem", "right_of_commute", ["is_left_regular"]]]}]}, {"timestamp": 1648916973, "sha": "8e476fa4", "message": "chore(topology/vector_bundle): use continuous-linear rather than linear in core construction (#13053)\nThe `vector_bundle_core` construction builds a vector bundle from a cocycle, the data of which are an open cover and a choice of transition function between any two elements of the cover. Currently, for base `B` and model fibre `F`, the transition function has type `ι → ι → B → (F →ₗ[R] F)`.\nThis PR changes it to type `ι → ι → B → (F →L[R] F)`. This is no loss of generality since there already were other conditions which forced the transition function to be continuous-linear on each fibre. Of course, it is a potential loss of convenience since the proof obligation for continuity now occurs upfront.\nThe change is needed because in the vector bundle refactor to come, the further condition will be imposed that each transition function `B → (F →L[R] F)` is continuous; stating this requires a topology on `F →L[R] F`.", "changes": [{"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/tangent_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}]}, {"timestamp": 1648914920, "sha": "cf6f27ee", "message": "refactor(topology/{fiber_bundle, vector_bundle}): make trivializations data rather than an existential (#13052)\nPreviously, the construction `topological_vector_bundle` was a mixin requiring the _existence_ of a suitable trivialization at each point.\nChange this to a class with data: a choice of trivialization at each point. This has no effect on the mathematics, but it is necessary for the forthcoming refactor in which a further condition is imposed on the mutual compatibility of the trivializations.\nFurthermore, attach to `topological_vector_bundle` and to two other constructions `topological_fiber_prebundle`, `topological_vector_prebundle` a further piece of data: an atlas of \"good\" trivializations. This is not really mathematically necessary, since you could always take the atlas of \"good\" trivializations to be simply the set of canonical trivializations at each point in the manifold. But sometimes one naturally has this larger \"good\" class and it's convenient to be able to access it. The `charted_space` definition in the manifolds library does something similar.", "changes": [{"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["add", "theorem", "continuous_symm_of_mem_pretrivialization_atlas", ["topological_fiber_prebundle"]], ["del", "theorem", "continuous_symm_pretrivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "is_open_source", ["topological_fiber_prebundle"]], ["del", "theorem", "is_open_source_pretrivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "is_open_target_of_mem_pretrivialization_atlas_inter", ["topological_fiber_prebundle"]], ["del", "theorem", "is_open_target_pretrivialization_at_inter", ["topological_fiber_prebundle"]], ["del", "def", "trivialization_at", ["topological_fiber_prebundle"]], ["add", "def", "trivialization_of_mem_pretrivialization_atlas", ["topological_fiber_prebundle"]]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["del", "theorem", "mem_base_set_trivialization_at", ["topological_vector_bundle"]], ["del", "def", "trivialization_at", ["topological_vector_bundle"]], ["add", "theorem", "coe_coord_change", ["topological_vector_bundle_core"]], ["del", "theorem", "coe_cord_change", ["topological_vector_bundle_core"]], ["add", "def", "to_topological_vector_bundle", ["topological_vector_prebundle"]], ["del", "theorem", "to_topological_vector_bundle", ["topological_vector_prebundle"]], ["del", "def", "trivialization_at", ["topological_vector_prebundle"]], ["add", "def", "trivialization_of_mem_pretrivialization_atlas", ["topological_vector_prebundle"]]]}]}, {"timestamp": 1648907248, "sha": "3164b1ad", "message": "feat(probability/independence): two lemmas on indep_fun (#13126)\nThese two lemmas show that `indep_fun` is preserved under composition by measurable maps and under a.e. equality.", "changes": [{"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": [["add", "theorem", "ae_eq", ["probability_theory", "indep_fun"]], ["add", "theorem", "comp", ["probability_theory", "indep_fun"]]]}]}, {"timestamp": 1648907246, "sha": "1d5b99b2", "message": "feat(group_theory/free_product): add (m)range_eq_supr (#12956)\nand lemmas leading to it as inspired by the corresponding lemmas from\n`free_groups.lean`.\nAs suggested by @ocfnash, polish the free group lemmas a bit as well.", "changes": [{"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["del", "theorem", "closure_subset", ["free_group"]], ["add", "theorem", "range_le", ["free_group", "lift"]], ["del", "theorem", "range_subset", ["free_group", "lift"]]]}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": [["add", "theorem", "lift_mrange_le", ["free_product"]], ["add", "theorem", "lift_range_le", ["free_product"]], ["add", "theorem", "mrange_eq_supr", ["free_product"]], ["add", "theorem", "range_eq_supr", ["free_product"]]]}]}, {"timestamp": 1648900582, "sha": "7df59077", "message": "chore(algebra/order/ring): generalisation linter (#13096)", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["mod", "theorem", "add_one_le_two_mul", []], ["mod", "theorem", "bot_lt_mul", ["with_bot"]], ["mod", "theorem", "mul_lt_top", ["with_top"]]]}]}, {"timestamp": 1648864746, "sha": "607f4f8a", "message": "feat(model_theory/semantics): A simp lemma for `Theory.model` (#13117)\nDefines `Theory.model_iff` to make it easier to show when a structure models a theory.", "changes": [{"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "model_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "model_singleton_iff", ["first_order", "language", "Theory"]]]}]}, {"timestamp": 1648851638, "sha": "6dad5f8c", "message": "feat(topology/bornology/basic): alternate way of defining a bornology by its bounded set (#13064)\nMore precisely, this defines an alternative to https://leanprover-community.github.io/mathlib_docs/topology/bornology/basic.html#bornology.of_bounded (which is renamed `bornology.of_bounded'`) which expresses the covering condition as containing the singletons, and factors the old version trough it to have a simpler proof.\nNote : I chose to add a prime to the old constructor because it's now defined in terms of the new one, so defeq works better this way (i.e lemma about the new constructor can be used whenever the old one is used).", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": []}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "le_cofinite_iff_compl_singleton_mem", ["filter"]]]}, {"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": [["add", "theorem", "is_bounded_singleton", ["bornology"]], ["add", "def", "of_bounded'", ["bornology"]]]}]}, {"timestamp": 1648851636, "sha": "6cf5dc53", "message": "feat(topology/support): add lemma `locally_finite.exists_finset_nhd_mul_support_subset` (#13006)\nWhen using a partition of unity to glue together a family of functions, this lemma allows\nus to pass to a finite family in the neighbourhood of any point.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "subset_coe_filter_of_subset_forall", ["finset"]]]}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": [["add", "theorem", "exists_finset_nhd_support_subset", ["partition_of_unity"]], ["mod", "def", "is_subordinate", ["partition_of_unity"]]]}, {"oldPath": "src/topology/support.lean", "newPath": "src/topology/support.lean", "changes": [["add", "theorem", "exists_finset_nhd_mul_support_subset", ["locally_finite"]]]}]}, {"timestamp": 1648845306, "sha": "912f195f", "message": "feat(dynamics/periodic_pts): Lemma about periodic point from periodic point of iterate (#12940)", "changes": [{"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "is_periodic_pt_of_mem_periodic_pts_of_is_periodic_pt_iterate", ["function"]]]}]}, {"timestamp": 1648840913, "sha": "196a48c8", "message": "feat(set_theory/ordinal_arithmetic): Coefficients of Cantor Normal Form (#12681)\nWe prove all coefficients of the base-b expansion of an ordinal are less than `b`. We also tweak the parameters of various other theorems.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "def", "CNF", ["ordinal"]], ["mod", "theorem", "CNF_fst_le", ["ordinal"]], ["mod", "theorem", "CNF_fst_le_log", ["ordinal"]], ["add", "theorem", "CNF_lt_snd", ["ordinal"]], ["mod", "theorem", "CNF_pairwise", ["ordinal"]], ["mod", "theorem", "CNF_snd_lt", ["ordinal"]], ["mod", "theorem", "CNF_sorted", ["ordinal"]], ["mod", "theorem", "one_CNF", ["ordinal"]]]}]}, {"timestamp": 1648832557, "sha": "a3c753c4", "message": "feat(topology/[subset_properties, separation]): bornologies for filter.co[closed_]compact (#12927)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_bounded_iff", ["bornology", "relatively_compact"]], ["add", "def", "relatively_compact", ["bornology"]], ["add", "theorem", "relatively_compact_eq_in_compact", ["bornology"]], ["add", "theorem", "coclosed_compact_le_cofinite", ["filter"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_bounded_iff", ["bornology", "in_compact"]], ["add", "def", "in_compact", ["bornology"]], ["add", "theorem", "compl_mem_coclosed_compact_of_is_closed", ["is_compact"]]]}]}, {"timestamp": 1648830659, "sha": "e8ef7449", "message": "docs(probability/martingale): missing word (#13113)", "changes": [{"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": []}]}, {"timestamp": 1648830658, "sha": "b3653717", "message": "feat(model_theory/syntax,semantics): Sentences for binary relation properties (#13087)\nDefines sentences for basic properties of binary relations\nProves that realizing these sentences is equivalent to properties in the binary relation library", "changes": [{"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "realize_antisymmetric", ["first_order", "language", "relations"]], ["add", "theorem", "realize_irreflexive", ["first_order", "language", "relations"]], ["add", "theorem", "realize_reflexive", ["first_order", "language", "relations"]], ["add", "theorem", "realize_symmetric", ["first_order", "language", "relations"]], ["add", "theorem", "realize_total", ["first_order", "language", "relations"]], ["add", "theorem", "realize_transitive", ["first_order", "language", "relations"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": []}]}, {"timestamp": 1648816778, "sha": "342a4b0a", "message": "feat(data/polynomial/coeff): add `char_zero` instance on polynomials (#13075)\nBesides adding the instance, I also added a warning on the difference between `char_zero R` and `char_p R 0` for general semirings.\nAn example showing the difference is in #13080.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}]}, {"timestamp": 1648816777, "sha": "89275df0", "message": "feat(topology/algebra/uniform_group): add characterization of total boundedness (#12808)\nThe main result is `totally_bounded_iff_subset_finite_Union_nhds_one`.\nWe prove it for noncommutative groups, which involves taking opposites.\nAdd `uniform_group` instance for the opposite group.\nAdds several helper lemmas for\n* (co-)map of opposites applied to neighborhood filter\n* filter basis of uniformity in a uniform group in terms of neighborhood basis at identity\nSimplified proofs for `totally_bounded_of_forall_symm` and `totally_bounded.closure`.", "changes": [{"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["add", "theorem", "op_div", ["mul_opposite"]], ["add", "theorem", "unop_div", ["mul_opposite"]]]}, {"oldPath": "src/topology/algebra/constructions.lean", "newPath": "src/topology/algebra/constructions.lean", "changes": [["add", "theorem", "comap_op_nhds", ["mul_opposite"]], ["add", "theorem", "comap_unop_nhds", ["mul_opposite"]], ["add", "theorem", "map_op_nhds", ["mul_opposite"]], ["add", "theorem", "map_unop_nhds", ["mul_opposite"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "uniformity_of_nhds_one", ["filter", "has_basis"]], ["add", "theorem", "uniformity_of_nhds_one_inv_mul", ["filter", "has_basis"]], ["add", "theorem", "uniformity_of_nhds_one_inv_mul_swapped", ["filter", "has_basis"]], ["add", "theorem", "uniformity_of_nhds_one_swapped", ["filter", "has_basis"]], ["add", "theorem", "totally_bounded_iff_subset_finite_Union_nhds_one", []], ["add", "theorem", "uniformity_eq_comap_inv_mul_nhds_one", []], ["add", "theorem", "uniformity_eq_comap_inv_mul_nhds_one_swapped", []], ["add", "theorem", "uniformity_eq_comap_nhds_one_swapped", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "comap_swap_uniformity", []], ["add", "theorem", "comap_uniformity_mul_opposite", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "totally_bounded_iff", ["filter", "has_basis"]], ["del", "theorem", "totally_bounded", ["is_compact"]], ["add", "theorem", "exists_subset", ["totally_bounded"]]]}]}, {"timestamp": 1648810011, "sha": "c61f7e88", "message": "chore(model_theory/elementary_maps): Fix Tarski-Vaught Test (#13102)\nFixes the assumption of the Tarski-Vaught test.", "changes": [{"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}]}, {"timestamp": 1648810010, "sha": "e6a0a266", "message": "chore(algebra/order/*): generalisation linter (#13098)", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["mod", "theorem", "add_bot", ["with_bot"]], ["mod", "theorem", "add_eq_bot", ["with_bot"]], ["mod", "theorem", "bot_add", ["with_bot"]], ["mod", "theorem", "coe_add", ["with_bot"]], ["mod", "theorem", "coe_bit0", ["with_bot"]], ["mod", "theorem", "coe_bit1", ["with_bot"]], ["mod", "theorem", "coe_le_coe", ["with_zero"]], ["mod", "theorem", "coe_lt_coe", ["with_zero"]]]}, {"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["mod", "theorem", "mul_left_cancel''", []], ["mod", "theorem", "mul_right_cancel''", []]]}]}, {"timestamp": 1648810008, "sha": "8a51798c", "message": "chore(order/*): generalisation linter (#13097)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "coe_le_iff", ["with_top"]], ["mod", "theorem", "lt_iff_exists_coe", ["with_top"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["mod", "theorem", "strict_mono_l", ["galois_coinsertion"]]]}]}, {"timestamp": 1648810007, "sha": "0e95cadc", "message": "chore(algebra/group_power/basic): generalisation linter (#13095)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "eq_or_eq_neg_of_sq_eq_sq", []], ["mod", "theorem", "of_add_zsmul", []], ["mod", "theorem", "of_mul_zpow", []], ["mod", "theorem", "eq_or_eq_neg_of_sq_eq_sq", ["units"]]]}]}, {"timestamp": 1648810006, "sha": "6652766b", "message": "chore(algebra/ring/basic): generalisation linter (#13094)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "boole_mul", []], ["mod", "theorem", "bit1_left", ["commute"]], ["mod", "theorem", "bit1_right", ["commute"]], ["mod", "theorem", "distrib_three_right", []], ["mod", "theorem", "is_left_regular_of_non_zero_divisor", []], ["mod", "theorem", "is_right_regular_of_non_zero_divisor", []], ["mod", "theorem", "mul_boole", []]]}]}, {"timestamp": 1648810005, "sha": "e326fe60", "message": "feat(model_theory/basic,language_map): More about `language.mk₂` (#13090)\nProvides instances on `language.mk₂`\nDefines `first_order.language.Lhom.mk₂`, a constructor for maps from languages built with `language.mk₂`.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/language_map.lean", "newPath": "src/model_theory/language_map.lean", "changes": [["add", "theorem", "mk₂_funext", ["first_order", "language", "Lhom"]]]}]}, {"timestamp": 1648803487, "sha": "873f2685", "message": "chore(group_theory/group_action/*): generalisation linter (#13100)", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "theorem", "mul_smul_one", []]]}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": []}]}, {"timestamp": 1648796771, "sha": "3a0c0345", "message": "chore(algebra/*): generalisation linter (#13099)", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "theorem", "fst_div", ["prod"]], ["mod", "theorem", "mk_div_mk", ["prod"]], ["mod", "theorem", "snd_div", ["prod"]], ["mod", "theorem", "swap_div", ["prod"]]]}, {"oldPath": "src/algebra/hom/group.lean", "newPath": "src/algebra/hom/group.lean", "changes": [["mod", "theorem", "mul_comp", ["monoid_hom"]], ["mod", "theorem", "to_monoid_hom_injective", ["monoid_with_zero_hom"]], ["mod", "theorem", "to_zero_hom_injective", ["monoid_with_zero_hom"]], ["mod", "theorem", "mul_comp", ["mul_hom"]]]}, {"oldPath": "src/algebra/hom/group_instances.lean", "newPath": "src/algebra/hom/group_instances.lean", "changes": [["mod", "def", "compl₂", ["monoid_hom"]], ["mod", "theorem", "compl₂_apply", ["monoid_hom"]]]}]}, {"timestamp": 1648784344, "sha": "9728396e", "message": "chore(scripts): update nolints.txt (#13101)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1648770986, "sha": "2b92d080", "message": "feat(model_theory/elementary_maps): The Tarski-Vaught test (#12919)\nProves the Tarski-Vaught test for elementary embeddings and substructures.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "cast_add_zero", ["fin"]]]}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["add", "theorem", "is_elementary_of_exists", ["first_order", "language", "embedding"]], ["add", "def", "to_elementary_embedding", ["first_order", "language", "embedding"]], ["add", "theorem", "is_elementary_of_exists", ["first_order", "language", "substructure"]], ["add", "def", "to_elementary_substructure", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "realize_relabel_sum_inr", ["first_order", "language", "formula"]]]}]}, {"timestamp": 1648747308, "sha": "de503895", "message": "split(order/chain): Split off `order.zorn` (#13060)\nSplit `order.zorn` into two files, one about chains, the other one about Zorn's lemma.", "changes": [{"oldPath": null, "newPath": "src/order/chain.lean", "changes": [["add", "theorem", "is_chain", ["chain_closure"]], ["add", "theorem", "succ_fixpoint", ["chain_closure"]], ["add", "theorem", "succ_fixpoint_iff", ["chain_closure"]], ["add", "theorem", "total", ["chain_closure"]], ["add", "inductive", "chain_closure", []], ["add", "theorem", "chain_closure_empty", []], ["add", "theorem", "chain_closure_max_chain", []], ["add", "theorem", "directed_on", ["is_chain"]], ["add", "theorem", "image", ["is_chain"]], ["add", "theorem", "insert", ["is_chain"]], ["add", "theorem", "mono", ["is_chain"]], ["add", "theorem", "succ", ["is_chain"]], ["add", "theorem", "super_chain_succ_chain", ["is_chain"]], ["add", "theorem", "symm", ["is_chain"]], ["add", "theorem", "total", ["is_chain"]], ["add", "def", "is_chain", []], ["add", "theorem", "is_chain_empty", []], ["add", "theorem", "is_chain_of_trichotomous", []], ["add", "theorem", "is_chain_univ_iff", []], ["add", "theorem", "is_chain", ["is_max_chain"]], ["add", "theorem", "not_super_chain", ["is_max_chain"]], ["add", "def", "is_max_chain", []], ["add", "def", "max_chain", []], ["add", "theorem", "max_chain_spec", []], ["add", "theorem", "is_chain", ["set", "subsingleton"]], ["add", "theorem", "subset_succ_chain", []], ["add", "def", "succ_chain", []], ["add", "theorem", "succ_chain_spec", []], ["add", "def", "super_chain", []]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["del", "theorem", "is_chain", ["chain_closure"]], ["del", "theorem", "succ_fixpoint", ["chain_closure"]], ["del", "theorem", "succ_fixpoint_iff", ["chain_closure"]], ["del", "inductive", "chain_closure", []], ["del", "theorem", "chain_closure_empty", []], ["del", "theorem", "chain_closure_max_chain", []], ["del", "theorem", "chain_closure_total", []], ["del", "theorem", "directed", ["is_chain"]], ["del", "theorem", "directed_on", ["is_chain"]], ["del", "theorem", "image", ["is_chain"]], ["del", "theorem", "insert", ["is_chain"]], ["del", "theorem", "mono", ["is_chain"]], ["del", "theorem", "succ", ["is_chain"]], ["del", "theorem", "super_chain_succ_chain", ["is_chain"]], ["del", "theorem", "symm", ["is_chain"]], ["del", "theorem", "total", ["is_chain"]], ["del", "def", "is_chain", []], ["del", "theorem", "is_chain_empty", []], ["del", "theorem", "is_chain_of_trichotomous", []], ["del", "theorem", "is_chain_univ_iff", []], ["del", "theorem", "is_chain", ["is_max_chain"]], ["del", "theorem", "not_super_chain", ["is_max_chain"]], ["del", "def", "is_max_chain", []], ["del", "def", "max_chain", []], ["del", "theorem", "max_chain_spec", []], ["del", "theorem", "is_chain", ["set", "subsingleton"]], ["del", "def", "succ_chain", []], ["del", "theorem", "succ_increasing", []], ["del", "theorem", "succ_spec", []], ["del", "def", "super_chain", []]]}]}, {"timestamp": 1648742964, "sha": "13e08bf3", "message": "feat(model_theory/*): Constructors for low-arity languages and structures (#12960)\nDefines `first_order.language.mk₂` to make it easier to define a language with at-most-binary symbols.\nDefines `first_order.language.Structure.mk₂` to make it easier to define a structure in a language defined with `first_order.language₂`.\nDefines `first_order.language.functions.apply₁` and `first_order.language.functions.apply₂` to make it easier to construct terms using low-arity function symbols.\nDefines `first_order.language.relations.formula₁` and `first_order.language.relations.formula₂` to make it easier to construct formulas using low-arity relation symbols.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "fun_map_apply₀", ["first_order", "language", "Structure"]], ["add", "theorem", "fun_map_apply₁", ["first_order", "language", "Structure"]], ["add", "theorem", "fun_map_apply₂", ["first_order", "language", "Structure"]], ["add", "theorem", "rel_map_apply₁", ["first_order", "language", "Structure"]], ["add", "theorem", "rel_map_apply₂", ["first_order", "language", "Structure"]], ["add", "def", "fun_map₂", ["first_order", "language"]], ["add", "def", "rel_map₂", ["first_order", "language"]], ["add", "def", "sequence₂", ["first_order"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "realize_rel₁", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_rel₂", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_rel₁", ["first_order", "language", "formula"]], ["add", "theorem", "realize_rel₂", ["first_order", "language", "formula"]], ["add", "theorem", "realize_functions_apply₁", ["first_order", "language", "term"]], ["add", "theorem", "realize_functions_apply₂", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/syntax.lean", "newPath": "src/model_theory/syntax.lean", "changes": [["add", "def", "apply₁", ["first_order", "language", "functions"]], ["add", "def", "apply₂", ["first_order", "language", "functions"]], ["add", "def", "bounded_formula₁", ["first_order", "language", "relations"]], ["add", "def", "bounded_formula₂", ["first_order", "language", "relations"]], ["add", "def", "formula₁", ["first_order", "language", "relations"]], ["add", "def", "formula₂", ["first_order", "language", "relations"]]]}]}, {"timestamp": 1648742963, "sha": "f1ae6206", "message": "feat(model_theory/bundled, satisfiability): Bundled models (#12945)\nDefines `Theory.Model`, a type of nonempty bundled models of a particular theory.\nRefactors satisfiability in terms of bundled models.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "trivial_unit_structure", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/bundled.lean", "newPath": "src/model_theory/bundled.lean", "changes": [["add", "theorem", "coe_of", ["first_order", "language", "Theory", "Model"]], ["add", "def", "of", ["first_order", "language", "Theory", "Model"]], ["add", "structure", "Model", ["first_order", "language", "Theory"]], ["add", "theorem", "coe_of", ["first_order", "language", "Theory"]], ["add", "def", "bundled", ["first_order", "language", "Theory", "model"]]]}, {"oldPath": "src/model_theory/satisfiability.lean", "newPath": "src/model_theory/satisfiability.lean", "changes": [["del", "def", "some_model", ["first_order", "language", "Theory", "is_satisfiable"]], ["mod", "def", "is_satisfiable", ["first_order", "language", "Theory"]], ["del", "theorem", "some_model_realize_bd_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "some_model_realize_iff", ["first_order", "language", "Theory", "semantically_equivalent"]]]}, {"oldPath": "src/model_theory/semantics.lean", "newPath": "src/model_theory/semantics.lean", "changes": []}, {"oldPath": "src/model_theory/ultraproducts.lean", "newPath": "src/model_theory/ultraproducts.lean", "changes": []}]}, {"timestamp": 1648740394, "sha": "2861d4eb", "message": "feat(combinatorics/simple_graph/connectivity): walk constructor patterns with explicit vertices (#13078)\nThis saves a couple underscores, letting you write `walk.cons' _ v _ h p` instead of `@walk.cons _ _ _ v _ h p` when you want that middle vertex in a pattern.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "def", "cons'", ["simple_graph", "walk"]], ["add", "def", "nil'", ["simple_graph", "walk"]]]}]}, {"timestamp": 1648736157, "sha": "25ef4f0f", "message": "feat(topology/algebra/matrix): more continuity lemmas for matrices (#13009)\nThis should cover all the definitions in `data/matrix/basic`, and also picks out a few notable definitions (`det`, `trace`, `adjugate`, `cramer`, `inv`) from other files.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/algebra/matrix.lean", "newPath": "src/topology/algebra/matrix.lean", "changes": [["add", "theorem", "matrix_adjugate", ["continuous"]], ["add", "theorem", "matrix_col", ["continuous"]], ["add", "theorem", "matrix_cramer", ["continuous"]], ["add", "theorem", "matrix_det", ["continuous"]], ["add", "theorem", "matrix_diag", ["continuous"]], ["add", "theorem", "matrix_dot_product", ["continuous"]], ["add", "theorem", "matrix_elem", ["continuous"]], ["add", "theorem", "matrix_map", ["continuous"]], ["add", "theorem", "matrix_minor", ["continuous"]], ["add", "theorem", "matrix_mul", ["continuous"]], ["add", "theorem", "matrix_mul_vec", ["continuous"]], ["add", "theorem", "matrix_reindex", ["continuous"]], ["add", "theorem", "matrix_row", ["continuous"]], ["add", "theorem", "matrix_trace", ["continuous"]], ["add", "theorem", "matrix_transpose", ["continuous"]], ["add", "theorem", "matrix_update_column", ["continuous"]], ["add", "theorem", "matrix_update_row", ["continuous"]], ["add", "theorem", "matrix_vec_mul", ["continuous"]], ["add", "theorem", "matrix_vec_mul_vec", ["continuous"]], ["add", "theorem", "continuous_at_matrix_inv", []], ["del", "theorem", "continuous_det", []], ["add", "theorem", "diagonal", ["continuous_matrix"]], ["add", "theorem", "continuous_matrix", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "if_const", ["continuous"]]]}]}, {"timestamp": 1648734129, "sha": "0f6eec63", "message": "feat(ring_theory/polynomial/pochhammer): generalize a proof from `comm_semiring` to `semiring` (#13024)\nThis PR is similar to #13018. Lemma `pochhammer_succ_eval` was already proven with a commutativity assumption. I generalized the proof to `semiring` by introducing a helper lemma.\nI still feel that this is harder than I would like it to be: `pochhammer` \"is\" a polynomial in `ℕ[X]` and all these commutativity assumptions are satisfied, since `ℕ[X]` is commutative.", "changes": [{"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}]}, {"timestamp": 1648731633, "sha": "1b42223a", "message": "feat(analysis/locally_convex): the topology of weak duals is locally convex (#12623)", "changes": [{"oldPath": null, "newPath": "src/analysis/locally_convex/weak_dual.lean", "changes": [["add", "theorem", "coe_to_seminorm", ["linear_map"]], ["add", "theorem", "has_basis_weak_bilin", ["linear_map"]], ["add", "def", "to_seminorm", ["linear_map"]], ["add", "theorem", "to_seminorm_apply", ["linear_map"]], ["add", "theorem", "to_seminorm_ball_zero", ["linear_map"]], ["add", "theorem", "to_seminorm_comp", ["linear_map"]], ["add", "def", "to_seminorm_family", ["linear_map"]], ["add", "theorem", "to_seminorm_family_apply", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}]}, {"timestamp": 1648729689, "sha": "6405a6ad", "message": "feat(analysis/locally_convex): closed balanced sets are a basis of the topology (#12786)\nWe prove some topological properties of the balanced core.", "changes": [{"oldPath": "src/analysis/locally_convex/balanced_core_hull.lean", "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": [["add", "theorem", "balanced_core_emptyset", []], ["add", "theorem", "balanced_core_is_closed", []], ["add", "theorem", "balanced_core_mem_nhds_zero", []], ["add", "theorem", "nhds_basis_closed_balanced", []], ["add", "theorem", "subset_balanced_core", []]]}]}, {"timestamp": 1648722937, "sha": "7833dbe4", "message": "lint(algebra/*): fix some lint errors (#13058)\n* add some docstrings to additive versions;\n* make `with_zero.ordered_add_comm_monoid` reducible.", "changes": [{"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": []}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["mod", "theorem", "apply_symm_apply", ["mul_equiv"]], ["mod", "theorem", "symm_apply_apply", ["mul_equiv"]]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1648716236, "sha": "ba9ead03", "message": "feat(order/sup_indep): lemmas about `pairwise` and `set.pairwise` (#12590)\nThe `disjoint` lemmas can now be stated in terms of these two `pairwise` definitions.\nThis wasn't previously possible as these definitions were not yet imported.\nThis also adds the `iff` versions of these lemmas, and a docstring tying them all together.", "changes": [{"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "Sup_disjoint_iff", []], ["add", "theorem", "disjoint_Sup_iff", []]]}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": [["del", "theorem", "disjoint", ["complete_lattice", "independent"]], ["add", "theorem", "pairwise_disjoint", ["complete_lattice", "independent"]], ["add", "theorem", "independent_iff_pairwise_disjoint", ["complete_lattice"]], ["del", "theorem", "disjoint", ["complete_lattice", "set_independent"]], ["add", "theorem", "pairwise_disjoint", ["complete_lattice", "set_independent"]], ["add", "theorem", "set_independent_iff_pairwise_disjoint", ["complete_lattice"]]]}]}, {"timestamp": 1648709480, "sha": "81c5d17e", "message": "chore(algebra/order/monoid_lemmas): remove exactly same lemmas (#13068)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["del", "theorem", "mul_lt_one_of_lt_of_lt_one", ["left"]], ["mod", "theorem", "mul_lt_of_lt_of_lt_one", []], ["mod", "theorem", "mul_lt_of_lt_one_of_lt", []], ["del", "theorem", "mul_lt_one_of_lt_of_lt_one", ["right"]]]}]}, {"timestamp": 1648709479, "sha": "7a37490c", "message": "feat(ring_theory/polynomial/pochhammer): add a binomial like recursion for pochhammer (#13018)\nThis PR proves the identity\n`pochhammer R n + n * (pochhammer R (n - 1)).comp (X + 1) = (pochhammer R n).comp (X + 1)`\nanalogous to the additive recursion for binomial coefficients.\nFor the proof, first we prove the result for a `comm_semiring` as `pochhammer_add_pochhammer_aux`. Next, we apply this identity in the general case.\nIf someone has any idea of how to make the maths statement: it suffices to show this identity for pochhammer symbols in the commutative case, I would be *very* happy to know!", "changes": [{"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": [["add", "theorem", "pochhammer_succ_comp_X_add_one", []]]}]}, {"timestamp": 1648709478, "sha": "290f440a", "message": "feat(order/category/Semilattice): The categories of semilattices (#12890)\nDefine `SemilatticeSup` and `SemilatticeInf`, the categories of finitary supremum lattices and finitary infimum lattices.", "changes": [{"oldPath": "src/order/category/BoundedLattice.lean", "newPath": "src/order/category/BoundedLattice.lean", "changes": [["add", "theorem", "coe_forget_to_BoundedOrder", ["BoundedLattice"]], ["add", "theorem", "coe_forget_to_Lattice", ["BoundedLattice"]], ["add", "theorem", "coe_forget_to_SemilatticeInf", ["BoundedLattice"]], ["add", "theorem", "coe_forget_to_SemilatticeSup", ["BoundedLattice"]], ["add", "theorem", "forget_SemilatticeInf_PartialOrder_eq_forget_BoundedOrder_PartialOrder", ["BoundedLattice"]], ["add", "theorem", "forget_SemilatticeSup_PartialOrder_eq_forget_BoundedOrder_PartialOrder", ["BoundedLattice"]], ["add", "theorem", "BoundedLattice_dual_comp_forget_to_SemilatticeInf", []], ["add", "theorem", "BoundedLattice_dual_comp_forget_to_SemilatticeSup", []]]}, {"oldPath": null, "newPath": "src/order/category/Semilattice.lean", "changes": [["add", "theorem", "coe_forget_to_PartialOrder", ["SemilatticeInf"]], ["add", "theorem", "coe_of", ["SemilatticeInf"]], ["add", "def", "dual", ["SemilatticeInf"]], ["add", "def", "mk", ["SemilatticeInf", "iso"]], ["add", "def", "of", ["SemilatticeInf"]], ["add", "structure", "SemilatticeInf", []], ["add", "theorem", "SemilatticeInf_dual_comp_forget_to_PartialOrder", []], ["add", "theorem", "coe_forget_to_PartialOrder", ["SemilatticeSup"]], ["add", "theorem", "coe_of", ["SemilatticeSup"]], ["add", "def", "dual", ["SemilatticeSup"]], ["add", "def", "mk", ["SemilatticeSup", "iso"]], ["add", "def", "of", ["SemilatticeSup"]], ["add", "structure", "SemilatticeSup", []], ["add", "theorem", "SemilatticeSup_dual_comp_forget_to_PartialOrder", []], ["add", "def", "SemilatticeSup_equiv_SemilatticeInf", []]]}]}, {"timestamp": 1648709477, "sha": "760f1b2b", "message": "refactor(*): rename `topological_ring` to `topological_semiring` and introduce a new `topological_ring` extending `has_continuous_neg` (#12864)\nFollowing the discussion in this [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/continuous.20maps.20vanishing.20at.20infinity/near/275553306), this renames `topological_ring` to `topological_semiring` throughout the library and weakens the typeclass assumptions from `semiring` to `non_unital_non_assoc_semiring`. Moreover, it introduces a new `topological_ring` class which takes a type class parameter of `non_unital_non_assoc_ring` and extends `topological_semiring` and `has_continuous_neg`.\nIn the case of *unital* (semi)rings (even non-associative), the type class `topological_semiring` is sufficient to capture the notion of `topological_ring` because negation is just multiplication by `-1`. Therefore, those working with unital (semi)rings can proceed with the small change of using `topological_semiring` instead of `topological_ring`.\nThe primary reason for the distinction is to weaken the type class assumptions to allow for non-unital rings, in which case `has_continuous_neg` must be explicitly assumed.\n- [x] depends on: #12748", "changes": [{"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": [["del", "theorem", "topological_ring_of_smooth", []], ["add", "theorem", "topological_semiring_of_smooth", []]]}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": [["mod", "theorem", "continuous_algebra_map", []], ["mod", "theorem", "continuous_algebra_map_iff_smul", []], ["mod", "theorem", "has_continuous_smul_of_algebra_map", []]]}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "theorem", "has_continuous_neg_of_mul", ["topological_semiring"]], ["add", "theorem", "to_topological_ring", ["topological_semiring"]]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/locally_constant.lean", "newPath": "src/topology/continuous_function/locally_constant.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1648707573, "sha": "c2339caa", "message": "feat(algebraic_topology): map_alternating_face_map_complex (#13028)\nIn this PR, we obtain a compatibility `map_alternating_face_map_complex` of the construction of the alternating face map complex functor with respect to additive functors between preadditive categories.", "changes": [{"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": [["add", "theorem", "map_alternating_face_map_complex", ["algebraic_topology"]]]}]}, {"timestamp": 1648694513, "sha": "8a213165", "message": "feat(combinatorics/simple_graph/regularity/bound): Numerical bounds for Szemerédi's regularity lemma (#12962)\nDefine the constants appearing in Szemerédi's regularity lemma and prove a bunch of numerical facts about them.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "le_div_self", []]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/regularity/bound.lean", "changes": [["add", "theorem", "a_add_one_le_four_pow_parts_card", ["szemeredi_regularity"]], ["add", "theorem", "bound_pos", ["szemeredi_regularity"]], ["add", "theorem", "card_aux₁", ["szemeredi_regularity"]], ["add", "theorem", "card_aux₂", ["szemeredi_regularity"]], ["add", "theorem", "coe_m_add_one_pos", ["szemeredi_regularity"]], ["add", "theorem", "eps_pos", ["szemeredi_regularity"]], ["add", "theorem", "eps_pow_five_pos", ["szemeredi_regularity"]], ["add", "theorem", "four_pow_pos", ["szemeredi_regularity"]], ["add", "theorem", "hundred_div_ε_pow_five_le_m", ["szemeredi_regularity"]], ["add", "theorem", "hundred_le_m", ["szemeredi_regularity"]], ["add", "theorem", "hundred_lt_pow_initial_bound_mul", ["szemeredi_regularity"]], ["add", "theorem", "initial_bound_le_bound", ["szemeredi_regularity"]], ["add", "theorem", "initial_bound_pos", ["szemeredi_regularity"]], ["add", "theorem", "le_bound", ["szemeredi_regularity"]], ["add", "theorem", "le_initial_bound", ["szemeredi_regularity"]], ["add", "theorem", "le_step_bound", ["szemeredi_regularity"]], ["add", "theorem", "m_coe_pos", ["szemeredi_regularity"]], ["add", "theorem", "m_pos", ["szemeredi_regularity"]], ["add", "theorem", "one_le_m_coe", ["szemeredi_regularity"]], ["add", "theorem", "pow_mul_m_le_card_part", ["szemeredi_regularity"]], ["add", "theorem", "seven_le_initial_bound", ["szemeredi_regularity"]], ["add", "def", "step_bound", ["szemeredi_regularity"]], ["add", "theorem", "step_bound_mono", ["szemeredi_regularity"]], ["add", "theorem", "step_bound_pos_iff", ["szemeredi_regularity"]]]}, {"oldPath": "src/order/partition/equipartition.lean", "newPath": "src/order/partition/equipartition.lean", "changes": [["add", "theorem", "card_parts_eq_average", ["finpartition", "is_equipartition"]]]}]}, {"timestamp": 1648692617, "sha": "299984b4", "message": "feat(combinatorics/simple_graph/uniform): Graph uniformity and uniform partitions (#12957)\nDefine uniformity of a pair of vertices in a graph and uniformity of a partition of vertices of a graph.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/regularity/uniform.lean", "changes": [["add", "theorem", "bot_is_uniform", ["finpartition"]], ["add", "def", "is_uniform", ["finpartition"]], ["add", "theorem", "is_uniform_of_empty", ["finpartition"]], ["add", "theorem", "is_uniform_one", ["finpartition"]], ["add", "theorem", "mk_mem_non_uniforms_iff", ["finpartition"]], ["add", "theorem", "non_uniforms_bot", ["finpartition"]], ["add", "theorem", "nonempty_of_not_uniform", ["finpartition"]], ["add", "theorem", "mono", ["simple_graph", "is_uniform"]], ["add", "theorem", "symm", ["simple_graph", "is_uniform"]], ["add", "def", "is_uniform", ["simple_graph"]], ["add", "theorem", "is_uniform_comm", ["simple_graph"]], ["add", "theorem", "is_uniform_one", ["simple_graph"]], ["add", "theorem", "is_uniform_singleton", ["simple_graph"]], ["add", "theorem", "not_is_uniform_zero", ["simple_graph"]]]}]}, {"timestamp": 1648685571, "sha": "47b1d786", "message": "feat(linear_algebra/matrix): any matrix power can be expressed as sums of powers `0 ≤ k < fintype.card n` (#12983)\nI'm not familiar enough with the polynomial API to know if we can neatly state a similar result for negative powers.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": [["add", "theorem", "aeval_eq_aeval_mod_charpoly", ["linear_map"]], ["add", "theorem", "pow_eq_aeval_mod_charpoly", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/matrix/charpoly/basic.lean", "newPath": "src/linear_algebra/matrix/charpoly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": [["add", "theorem", "aeval_eq_aeval_mod_charpoly", ["matrix"]], ["add", "theorem", "pow_eq_aeval_mod_charpoly", ["matrix"]]]}]}, {"timestamp": 1648661425, "sha": "fc35cb32", "message": "chore(data/finset/card): add `card_disj_union` (#13061)", "changes": [{"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "card_disj_union", ["finset"]]]}]}, {"timestamp": 1648656351, "sha": "7f450cb8", "message": "feat(topology/sets/order): Clopen upper sets (#12670)\nDefine `clopen_upper_set`, the type of clopen upper sets of an ordered topological space.", "changes": [{"oldPath": null, "newPath": "src/topology/sets/order.lean", "changes": [["add", "theorem", "clopen", ["clopen_upper_set"]], ["add", "theorem", "coe_bot", ["clopen_upper_set"]], ["add", "theorem", "coe_inf", ["clopen_upper_set"]], ["add", "theorem", "coe_mk", ["clopen_upper_set"]], ["add", "theorem", "coe_sup", ["clopen_upper_set"]], ["add", "theorem", "coe_top", ["clopen_upper_set"]], ["add", "def", "to_upper_set", ["clopen_upper_set"]], ["add", "theorem", "upper", ["clopen_upper_set"]], ["add", "structure", "clopen_upper_set", []]]}]}, {"timestamp": 1648648361, "sha": "518e81a8", "message": "feat(topology): add lemmas about `frontier` (#13054)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "frontier_closure_subset", []], ["add", "theorem", "frontier_interior_subset", []]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "frontier_eq_empty_iff", []], ["add", "theorem", "nonempty_frontier_iff", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_clopen_iff_frontier_eq_empty", []]]}]}, {"timestamp": 1648648359, "sha": "de62b061", "message": "chore(data/set/pointwise): Golf using `set.image2` API (#13051)\nAdd some more `set.image2` API and demonstrate use by golfing all relevant `data.set.pointwise` declarations.\nOther additions", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "image2_assoc", ["set"]], ["add", "theorem", "image2_image_left_anticomm", ["set"]], ["add", "theorem", "image2_image_left_comm", ["set"]], ["mod", "theorem", "image2_left_comm", ["set"]], ["mod", "theorem", "image2_right_comm", ["set"]], ["add", "theorem", "image_comm", ["set"]], ["add", "theorem", "image_image2_antidistrib", ["set"]], ["add", "theorem", "image_image2_antidistrib_left", ["set"]], ["add", "theorem", "image_image2_antidistrib_right", ["set"]], ["mod", "theorem", "image_image2_distrib", ["set"]], ["mod", "theorem", "image_image2_distrib_left", ["set"]], ["mod", "theorem", "image_image2_distrib_right", ["set"]], ["add", "theorem", "image_image2_right_anticomm", ["set"]], ["add", "theorem", "image_image2_right_comm", ["set"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["mod", "theorem", "Inter_inv", ["set"]], ["mod", "theorem", "Union_inv", ["set"]], ["mod", "theorem", "compl_inv", ["set"]], ["mod", "theorem", "inv", ["set", "finite"]], ["mod", "theorem", "mul", ["set", "finite"]], ["add", "theorem", "smul", ["set", "finite"]], ["mod", "theorem", "smul_set", ["set", "finite"]], ["mod", "theorem", "image_inv", ["set"]], ["mod", "theorem", "image_mul", ["set"]], ["add", "theorem", "image_op_inv", ["set"]], ["mod", "theorem", "image_op_mul", ["set"]], ["mod", "theorem", "inter_inv", ["set"]], ["mod", "theorem", "inv_empty", ["set"]], ["mod", "theorem", "inv_mem_inv", ["set"]], ["mod", "theorem", "inv_preimage", ["set"]], ["mod", "theorem", "inv_singleton", ["set"]], ["mod", "theorem", "inv_subset", ["set"]], ["mod", "theorem", "inv_subset_inv", ["set"]], ["mod", "theorem", "inv_univ", ["set"]], ["mod", "theorem", "mem_inv", ["set"]], ["mod", "theorem", "inv", ["set", "nonempty"]], ["mod", "theorem", "mul", ["set", "nonempty"]], ["add", "theorem", "smul", ["set", "nonempty"]], ["add", "theorem", "smul_set", ["set", "nonempty"]], ["add", "theorem", "vsub", ["set", "nonempty"]], ["mod", "theorem", "nonempty_inv", ["set"]], ["mod", "theorem", "union_inv", ["set"]]]}]}, {"timestamp": 1648648358, "sha": "25e8730e", "message": "feat(analysis/special_functions/pow): abs value of real to complex power (#13048)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "abs_cpow_eq_rpow_re_of_nonneg", ["complex"]], ["add", "theorem", "abs_cpow_eq_rpow_re_of_pos", ["complex"]]]}]}, {"timestamp": 1648648357, "sha": "33a323cd", "message": "feat(data/fin): lemmas about ordering and cons (#13044)\nThis marks a few extra facts `simp`, since the analogous facts are `simp` for `nat`.", "changes": [{"oldPath": "archive/imo/imo1994_q1.lean", "newPath": "archive/imo/imo1994_q1.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "not_lt_zero", ["fin"]], ["mod", "theorem", "zero_le", ["fin"]]]}, {"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "cons_le_cons", ["fin"]], ["add", "theorem", "pi_lex_lt_cons_cons", ["fin"]]]}]}, {"timestamp": 1648648353, "sha": "644a848d", "message": "fix(tactic/generalize_proofs): instantiate mvars (#13025)\nReported on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/generalize_proofs.20failed/near/276965359).", "changes": [{"oldPath": "src/tactic/generalize_proofs.lean", "newPath": "src/tactic/generalize_proofs.lean", "changes": []}, {"oldPath": "test/generalize_proofs.lean", "newPath": "test/generalize_proofs.lean", "changes": []}]}, {"timestamp": 1648648352, "sha": "af3911c1", "message": "feat(data/polynomial/erase_lead): add two erase_lead lemmas (#12910)\nThe two lemmas show that removing the leading term from the sum of two polynomials of unequal `nat_degree` is the same as removing the leading term of the one of larger `nat_degree` and adding.\nThe second lemma could be proved with `by rw [add_comm, erase_lead_add_of_nat_degree_lt_left pq, add_comm]`, but I preferred copying the same strategy as the previous one, to avoid interdependencies.", "changes": [{"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "erase_lead_add_of_nat_degree_lt_left", ["polynomial"]], ["add", "theorem", "erase_lead_add_of_nat_degree_lt_right", ["polynomial"]]]}]}, {"timestamp": 1648648350, "sha": "e31f0319", "message": "feat(analysis/locally_convex): polar sets for dualities (#12849)\nDefine the absolute polar for a duality and prove easy properties such as\n* `linear_map.polar_eq_Inter`: The polar as an intersection.\n* `linear_map.subset_bipolar`: The polar is a subset of the bipolar.\n* `linear_map.polar_weak_closed`: The polar is closed in the weak topology induced by `B.flip`.\nMoreover, the corresponding lemmas are removed in the normed space setting as they all follow directly from the general case.", "changes": [{"oldPath": null, "newPath": "src/analysis/locally_convex/polar.lean", "changes": [["add", "def", "polar", ["linear_map"]], ["add", "theorem", "polar_Union", ["linear_map"]], ["add", "theorem", "polar_antitone", ["linear_map"]], ["add", "theorem", "polar_empty", ["linear_map"]], ["add", "theorem", "polar_eq_Inter", ["linear_map"]], ["add", "theorem", "polar_gc", ["linear_map"]], ["add", "theorem", "polar_mem", ["linear_map"]], ["add", "theorem", "polar_mem_iff", ["linear_map"]], ["add", "theorem", "polar_union", ["linear_map"]], ["add", "theorem", "polar_univ", ["linear_map"]], ["add", "theorem", "polar_weak_closed", ["linear_map"]], ["add", "theorem", "polar_zero", ["linear_map"]], ["add", "theorem", "subset_bipolar", ["linear_map"]], ["add", "theorem", "tripolar_eq_polar", ["linear_map"]], ["add", "theorem", "zero_mem_polar", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["del", "theorem", "bounded_polar_of_mem_nhds_zero", []], ["del", "theorem", "closed_ball_inv_subset_polar_closed_ball", []], ["del", "theorem", "is_closed_polar", []], ["add", "theorem", "bounded_polar_of_mem_nhds_zero", ["normed_space"]], ["add", "theorem", "closed_ball_inv_subset_polar_closed_ball", ["normed_space"]], ["add", "def", "dual_pairing", ["normed_space"]], ["add", "theorem", "dual_pairing_apply", ["normed_space"]], ["add", "theorem", "dual_pairing_separating_left", ["normed_space"]], ["add", "theorem", "is_closed_polar", ["normed_space"]], ["add", "theorem", "mem_polar_iff", ["normed_space"]], ["add", "def", "polar", ["normed_space"]], ["add", "theorem", "polar_ball_subset_closed_ball_div", ["normed_space"]], ["add", "theorem", "polar_closed_ball", ["normed_space"]], ["add", "theorem", "polar_closure", ["normed_space"]], ["add", "theorem", "polar_univ", ["normed_space"]], ["add", "theorem", "smul_mem_polar", ["normed_space"]], ["del", "def", "polar", []], ["del", "theorem", "polar_Union", []], ["del", "theorem", "polar_antitone", []], ["del", "theorem", "polar_ball_subset_closed_ball_div", []], ["del", "theorem", "polar_closed_ball", []], ["del", "theorem", "polar_closure", []], ["del", "theorem", "polar_empty", []], ["del", "theorem", "polar_eq_Inter", []], ["del", "theorem", "polar_gc", []], ["del", "theorem", "polar_union", []], ["del", "theorem", "polar_univ", []], ["del", "theorem", "polar_zero", []], ["del", "theorem", "smul_mem_polar", []], ["del", "theorem", "zero_mem_polar", []]]}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": [["del", "theorem", "is_closed_polar", ["weak_dual"]], ["del", "def", "polar", ["weak_dual"]]]}]}, {"timestamp": 1648640865, "sha": "f13ee544", "message": "chore(*): sort out some to_additive and simp orderings (#13038)\n- To additive should always come after simp, unless the linter complains.\n- Also make to_additive transfer the `protected` attribute for consistency.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": []}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}]}, {"timestamp": 1648640864, "sha": "37a8a0b2", "message": "feat(ring_theory/graded_algebra): define homogeneous localisation (#12784)\nThis pr defines `homogeneous_localization`. For `x` in projective spectrum of `A`, homogeneous localisation at `x` is the subring of $$A_x$$ containing `a/b` where `a` and `b` have the same degree. This construction is mainly used in constructing structure sheaf of Proj of a graded ring", "changes": [{"oldPath": null, "newPath": "src/ring_theory/graded_algebra/homogeneous_localization.lean", "changes": [["add", "theorem", "add_val", ["homogeneous_localization"]], ["add", "def", "deg", ["homogeneous_localization"]], ["add", "def", "denom", ["homogeneous_localization"]], ["add", "theorem", "denom_mem", ["homogeneous_localization"]], ["add", "theorem", "denom_not_mem", ["homogeneous_localization"]], ["add", "theorem", "eq_num_div_denom", ["homogeneous_localization"]], ["add", "theorem", "ext_iff_val", ["homogeneous_localization"]], ["add", "theorem", "mul_val", ["homogeneous_localization"]], ["add", "theorem", "neg_val", ["homogeneous_localization"]], ["add", "def", "num", ["homogeneous_localization"]], ["add", "theorem", "deg_add", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "deg_mul", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "deg_neg", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "deg_one", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "deg_pow", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "deg_smul", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "deg_zero", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "denom_add", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "denom_mul", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "denom_neg", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "denom_one", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "denom_pow", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "denom_smul", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "denom_zero", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "def", "embedding", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "ext", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "num_add", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "num_mul", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "num_neg", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "num_one", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "num_pow", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "num_smul", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "theorem", "num_zero", ["homogeneous_localization", "num_denom_same_deg"]], ["add", "structure", "num_denom_same_deg", ["homogeneous_localization"]], ["add", "theorem", "num_mem", ["homogeneous_localization"]], ["add", "theorem", "one_eq", ["homogeneous_localization"]], ["add", "theorem", "one_val", ["homogeneous_localization"]], ["add", "theorem", "pow_val", ["homogeneous_localization"]], ["add", "theorem", "smul_val", ["homogeneous_localization"]], ["add", "theorem", "sub_val", ["homogeneous_localization"]], ["add", "def", "val", ["homogeneous_localization"]], ["add", "theorem", "val_injective", ["homogeneous_localization"]], ["add", "theorem", "zero_eq", ["homogeneous_localization"]], ["add", "theorem", "zero_val", ["homogeneous_localization"]], ["add", "def", "homogeneous_localization", []]]}]}, {"timestamp": 1648633685, "sha": "cdd1703c", "message": "feat(algebra/associates): add two instances and a lemma about the order on the monoid of associates of a monoid (#12863)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "is_unit_iff_eq_bot", ["associates"]]]}]}, {"timestamp": 1648612276, "sha": "cd51f0de", "message": "fix(data/fintype/basic): generalize fintype instance for fintype.card_coe (#13055)", "changes": [{"oldPath": "src/combinatorics/hall/finite.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "card_coe", ["fintype"]]]}]}, {"timestamp": 1648612274, "sha": "f2fd6db6", "message": "chore(*): removing some `by { dunfold .., apply_instance }` proofs (#13050)\nReplaces the proofs `by { dunfold .., apply_instance }` by the exact term that is outputted by `show_term`.", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/topology/sheaves/limits.lean", "newPath": "src/topology/sheaves/limits.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1648610382, "sha": "ca3bb9ef", "message": "chore(scripts): update nolints.txt (#13057)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1648606822, "sha": "fc758559", "message": "feat(measure_theory/*): refactor integral to allow non second-countable target space (#12942)\nCurrently, the Bochner integral in mathlib only allows second-countable target spaces. This is an issue, since many constructions in spectral theory require integrals, and spaces of operators are typically not second-countable. The most general definition of the Bochner integral requires functions that may take values in non second-countable spaces, but which are still pointwise limits of a sequence of simple functions (so-called strongly measurable functions) -- equivalently, they are measurable and with second-countable range.\nThis PR refactors the Bochner integral, working with strongly measurable functions (or rather, almost everywhere strongly measurable functions, i.e., functions which coincide almost everywhere with a strongly measurable function). There are some prerequisistes (topological facts, and a good enough theory of almost everywhere strongly measurable functions) that have been PRed separately, but the remaining part of the change has to be done in one PR, as once one changes the basic definition of the integral one has to change all the files that depend on it.\nOnce the change is done, in many files the fix is just to remove `[measurable_space E] [borel_space E] [second_countable_topology E]` to make the linter happy, and see that everything still compiles. (Well, sometimes it is also much more painful, of course :-). For end users using `integrable`, nothing has to be changed, but if you need to prove integrability by hand, instead of checking `ae_measurable` you need to check `ae_strongly_measurable`. In second-countable spaces, the two of them are equivalent (and you can use `ae_strongly_measurable.ae_measurable` and `ae_measurable.ae_strongly_measurable` to go between the two of them).\nThe main changes are the following:\n* change `ae_eq_fun` to base it on equivalence classes of ae strongly measurable functions\n* fix everything that depends on this definition, including lp_space, set_to_L1, the Bochner integral and conditional expectation\n* fix everything that depends on these, notably complex analysis (removing second-countability and measurability assumptions all over the place)\n* A notion that involves a measurable function taking values in a normed space should probably better be rephrased in terms of strongly_measurable or ae_strongly_measurable. So, change a few definitions like `measurable_at_filter` (to `strongly_measurable_at_filter`) or `martingale`.", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": [["mod", "theorem", "has_box_integral", ["measure_theory", "integrable_on"]]]}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": [["add", "theorem", "ae_strongly_measurable_deriv", []], ["add", "theorem", "strongly_measurable_deriv", []]]}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_interval_integral.lean", "newPath": "src/analysis/calculus/parametric_interval_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": [["mod", "theorem", "deriv_eq_smul_circle_integral", ["complex"]]]}, {"oldPath": "src/analysis/complex/removable_singularity.lean", "newPath": "src/analysis/complex/removable_singularity.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["mod", "theorem", "spectral_radius_eq_nnnorm_of_self_adjoint", []], ["mod", "theorem", "spectral_radius_eq_nnnorm_of_star_normal", []]]}, {"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["del", "theorem", "integral_prod_right'", ["ae_measurable"]], ["del", "theorem", "prod_mk_left", ["ae_measurable"]], ["del", "theorem", "integral_prod_left'", ["measurable"]], ["del", "theorem", "integral_prod_left", ["measurable"]], ["del", "theorem", "integral_prod_right'", ["measurable"]], ["del", "theorem", "integral_prod_right", ["measurable"]], ["mod", "theorem", "measurable_set_integrable", []], ["add", "theorem", "integral_prod_right'", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "prod_mk_left", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "prod_swap", ["measure_theory", "ae_strongly_measurable"]], ["mod", "theorem", "has_finite_integral_prod_iff'", ["measure_theory"]], ["mod", "theorem", "has_finite_integral_prod_iff", ["measure_theory"]], ["mod", "theorem", "integrable_prod_iff'", ["measure_theory"]], ["mod", "theorem", "integrable_prod_iff", ["measure_theory"]], ["add", "theorem", "integral_prod_left'", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_prod_left", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_prod_right'", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "integral_prod_right", ["measure_theory", "strongly_measurable"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": [["mod", "theorem", "coe_fn_comp", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_comp_measurable", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "coe_fn_comp₂", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_comp₂_measurable", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "coe_fn_inf", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "coe_fn_sup", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "comp", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "def", "comp_measurable", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_measurable_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_measurable_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_measurable_to_germ", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp_to_germ", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "comp₂", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp₂_eq_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp₂_eq_pair", ["measure_theory", "ae_eq_fun"]], ["add", "def", "comp₂_measurable", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_measurable_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_measurable_eq_pair", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_measurable_mk_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_measurable_to_germ", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp₂_mk_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp₂_to_germ", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "const", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "induction_on₂", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "induction_on₃", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "mk_coe_fn", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "mk_div", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "mk_mul_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "smul_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "ae_eq_setoid", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["mod", "theorem", "ae_eq_zero_of_forall_dual", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_of_forall_dual_of_is_separable", ["measure_theory"]], ["del", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_finite_measure_of_measurable", ["measure_theory"]], ["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_finite_measure_of_strongly_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["del", "theorem", "ae_measurable'", ["measure_theory", "Lp_meas"]], ["add", "theorem", "ae_strongly_measurable'", ["measure_theory", "Lp_meas"]], ["mod", "def", "Lp_meas", ["measure_theory"]], ["del", "theorem", "ae_eq_trim_iff_of_ae_measurable'", ["measure_theory"]], ["add", "theorem", "ae_eq_trim_iff_of_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "add", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "ae_eq_mk", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "congr", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "const_inner", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "const_smul", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "measurable_comp", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "measurable_mk", ["measure_theory", "ae_measurable'"]], ["del", "def", "mk", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "neg", ["measure_theory", "ae_measurable'"]], ["del", "theorem", "sub", ["measure_theory", "ae_measurable'"]], ["del", "def", "ae_measurable'", ["measure_theory"]], ["del", "theorem", "ae_measurable'_condexp_L1", ["measure_theory"]], ["del", "theorem", "ae_measurable'_condexp_L1_clm", ["measure_theory"]], ["del", "theorem", "ae_measurable'_condexp_L2", ["measure_theory"]], ["del", "theorem", "ae_measurable'_condexp_ind", ["measure_theory"]], ["del", "theorem", "ae_measurable'_condexp_ind_smul", ["measure_theory"]], ["del", "theorem", "ae_measurable'_of_ae_measurable'_trim", ["measure_theory"]], ["add", "theorem", "add", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "ae_eq_mk", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "congr", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "const_inner", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "const_smul", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "continuous_comp", ["measure_theory", "ae_strongly_measurable'"]], ["add", "def", "mk", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "neg", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "strongly_measurable_mk", ["measure_theory", "ae_strongly_measurable'"]], ["add", "theorem", "sub", ["measure_theory", "ae_strongly_measurable'"]], ["add", "def", "ae_strongly_measurable'", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_L1", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_L1_clm", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_L2", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_ind", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'_of_ae_strongly_measurable'_trim", ["measure_theory"]], ["del", "theorem", "condexp_L1_clm_of_ae_measurable'", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_of_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "condexp_L1_of_ae_measurable'", ["measure_theory"]], ["add", "theorem", "condexp_L1_of_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "condexp_of_measurable", ["measure_theory"]], ["add", "theorem", "condexp_of_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "inner_condexp_L2_eq_inner_fun", ["measure_theory"]], ["del", "theorem", "is_closed_ae_measurable'", ["measure_theory"]], ["add", "theorem", "is_closed_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "is_complete_ae_measurable'", ["measure_theory"]], ["add", "theorem", "is_complete_ae_strongly_measurable'", ["measure_theory"]], ["del", "theorem", "ae_measurable'", ["measure_theory", "measurable"]], ["del", "theorem", "measurable_condexp", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_iff_ae_measurable'", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_iff_ae_strongly_measurable'", ["measure_theory"]], ["mod", "theorem", "mem_Lp_meas_self", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_subgroup_iff_ae_measurable'", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_subgroup_iff_ae_strongly_measurable'", ["measure_theory"]], ["mod", "theorem", "norm_condexp_L2_le_one", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "strongly_measurable_condexp", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": [["mod", "theorem", "tendsto_in_measure_of_tendsto_Lp", ["measure_theory"]], ["mod", "theorem", "tendsto_in_measure_of_tendsto_ae", ["measure_theory"]], ["del", "theorem", "tendsto_in_measure_of_tendsto_ae_of_measurable", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_ae_of_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "tendsto_in_measure_of_tendsto_snorm", ["measure_theory"]], ["del", "theorem", "tendsto_in_measure_of_tendsto_snorm_of_measurable", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_snorm_of_strongly_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/egorov.lean", "newPath": "src/measure_theory/function/egorov.lean", "changes": []}, {"oldPath": "src/measure_theory/function/jacobian.lean", "newPath": "src/measure_theory/function/jacobian.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "integrable_map_iff", ["measurable_embedding"]], ["mod", "theorem", "ae_measurable_coe_fn", ["measure_theory", "L1"]], ["add", "theorem", "ae_strongly_measurable_coe_fn", ["measure_theory", "L1"]], ["mod", "theorem", "measurable_coe_fn", ["measure_theory", "L1"]], ["add", "theorem", "strongly_measurable_coe_fn", ["measure_theory", "L1"]], ["mod", "theorem", "integrable_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "add'", ["measure_theory", "integrable"]], ["mod", "theorem", "add", ["measure_theory", "integrable"]], ["mod", "theorem", "ae_measurable", ["measure_theory", "integrable"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "integrable"]], ["mod", "theorem", "comp_measurable", ["measure_theory", "integrable"]], ["mod", "theorem", "congr'", ["measure_theory", "integrable"]], ["mod", "theorem", "max_zero", ["measure_theory", "integrable"]], ["mod", "theorem", "min_zero", ["measure_theory", "integrable"]], ["mod", "theorem", "mono'", ["measure_theory", "integrable"]], ["mod", "theorem", "mono", ["measure_theory", "integrable"]], ["mod", "theorem", "neg", ["measure_theory", "integrable"]], ["mod", "theorem", "norm", ["measure_theory", "integrable"]], ["mod", "theorem", "prod_mk", ["measure_theory", "integrable"]], ["mod", "theorem", "smul", ["measure_theory", "integrable"]], ["mod", "theorem", "sub'", ["measure_theory", "integrable"]], ["mod", "theorem", "sub", ["measure_theory", "integrable"]], ["mod", "theorem", "trim", ["measure_theory", "integrable"]], ["mod", "theorem", "integrable_congr'", ["measure_theory"]], ["mod", "theorem", "integrable_finset_sum", ["measure_theory"]], ["mod", "theorem", "integrable_map_measure", ["measure_theory"]], ["mod", "theorem", "integrable_neg_iff", ["measure_theory"]], ["mod", "theorem", "integrable_norm_iff", ["measure_theory"]], ["mod", "theorem", "integrable_of_forall_fin_meas_le'", ["measure_theory"]], ["mod", "theorem", "integrable_of_norm_sub_le", ["measure_theory"]], ["mod", "theorem", "integrable_smul_iff", ["measure_theory"]], ["mod", "theorem", "lintegral_edist_lt_top", ["measure_theory"]], ["mod", "theorem", "lintegral_edist_triangle", ["measure_theory"]], ["mod", "theorem", "lintegral_nnnorm_add", ["measure_theory"]], ["mod", "theorem", "integrable_comp_iff_of_antilipschitz", ["measure_theory", "lipschitz_with"]], ["mod", "theorem", "integrable_comp", ["measure_theory", "measure_preserving"]], ["mod", "theorem", "integrable", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "tendsto_lintegral_norm_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/locally_integrable.lean", "newPath": "src/measure_theory/function/locally_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_order.lean", "newPath": "src/measure_theory/function/lp_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "coe_fn_to_Lp", ["bounded_continuous_function"]], ["mod", "theorem", "range_to_Lp", ["bounded_continuous_function"]], ["mod", "def", "to_Lp", ["bounded_continuous_function"]], ["mod", "theorem", "to_Lp_norm_le", ["bounded_continuous_function"]], ["mod", "theorem", "smul_comp_Lp", ["continuous_linear_map"]], ["mod", "theorem", "smul_comp_LpL_apply", ["continuous_linear_map"]], ["mod", "theorem", "coe_fn_to_Lp", ["continuous_map"]], ["mod", "theorem", "coe_to_Lp", ["continuous_map"]], ["mod", "theorem", "range_to_Lp", ["continuous_map"]], ["mod", "def", "to_Lp", ["continuous_map"]], ["mod", "theorem", "to_Lp_comp_to_continuous_map", ["continuous_map"]], ["mod", "theorem", "to_Lp_def", ["continuous_map"]], ["mod", "theorem", "mem_ℒp_map_measure_iff", ["measurable_embedding"]], ["mod", "theorem", "mem_ℒp_map_measure_iff", ["measurable_equiv"]], ["mod", "theorem", "cauchy_tendsto_of_tendsto", ["measure_theory", "Lp"]], ["mod", "theorem", "mem_Lp_of_ae_le", ["measure_theory", "Lp"]], ["mod", "theorem", "mem_Lp_of_ae_le_mul", ["measure_theory", "Lp"]], ["mod", "theorem", "norm_le_mul_norm_of_ae_le_mul", ["measure_theory", "Lp"]], ["mod", "theorem", "norm_le_norm_of_ae_le", ["measure_theory", "Lp"]], ["mod", "theorem", "snorm'_lim_le_liminf_snorm'", ["measure_theory", "Lp"]], ["mod", "theorem", "snorm_lim_le_liminf_snorm", ["measure_theory", "Lp"]], ["mod", "def", "Lp", ["measure_theory"]], ["mod", "theorem", "ae_eq_zero_of_snorm'_eq_zero", ["measure_theory"]], ["mod", "theorem", "ess_sup_trim", ["measure_theory"]], ["mod", "theorem", "limsup_trim", ["measure_theory"]], ["mod", "theorem", "meas_ge_le_mul_pow_snorm", ["measure_theory"]], ["del", "theorem", "ae_measurable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "congr_norm", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "const_mul", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "const_smul", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "norm_rpow", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "of_bound", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "of_le", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "of_le_mul", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "mem_ℒp_congr_norm", ["measure_theory"]], ["mod", "theorem", "mem_ℒp_map_measure_iff", ["measure_theory"]], ["mod", "theorem", "mem_ℒp_norm_iff", ["measure_theory"]], ["mod", "theorem", "mem_ℒp_top_of_bound", ["measure_theory"]], ["del", "theorem", "mem_ℒp_zero_iff_ae_measurable", ["measure_theory"]], ["add", "theorem", "mem_ℒp_zero_iff_ae_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "snorm'_add_le", ["measure_theory"]], ["mod", "theorem", "snorm'_add_lt_top_of_le_one", ["measure_theory"]], ["mod", "theorem", "snorm'_eq_zero_iff", ["measure_theory"]], ["mod", "theorem", "snorm'_smul_le_mul_snorm'", ["measure_theory"]], ["mod", "theorem", "snorm'_trim", ["measure_theory"]], ["mod", "theorem", "snorm_add_le", ["measure_theory"]], ["mod", "theorem", "snorm_eq_zero_iff", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_map_measure", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_trim", ["measure_theory"]], ["mod", "theorem", "snorm_map_measure", ["measure_theory"]], ["mod", "theorem", "snorm_sub_le", ["measure_theory"]], ["mod", "theorem", "snorm_trim", ["measure_theory"]], ["mod", "theorem", "snorm_trim_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense_lp.lean", "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": [["add", "theorem", "integrable_approx_on_range", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_approx_on_univ", ["measure_theory", "simple_func"]], ["mod", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_approx_on_range", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_approx_on_univ", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_range_L1_nnnorm", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_range_Lp", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_range_Lp_snorm", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_L1_nnnorm", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_Lp", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_Lp_snorm", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable_lp.lean", "newPath": "src/measure_theory/function/strongly_measurable_lp.lean", "changes": [["del", "theorem", "fin_strongly_measurable_of_measurable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "fin_strongly_measurable_of_strongly_measurable", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["mod", "theorem", "tendsto_Lp_of_tendsto_ae", ["measure_theory"]], ["mod", "theorem", "tendsto_Lp_of_tendsto_ae_of_meas", ["measure_theory"]], ["mod", "theorem", "tendsto_Lp_of_tendsto_in_measure", ["measure_theory"]], ["mod", "theorem", "tendsto_in_measure_iff_tendsto_Lp", ["measure_theory"]], ["mod", "theorem", "unif_integrable_of'", ["measure_theory"]], ["mod", "theorem", "unif_integrable_of", ["measure_theory"]], ["mod", "theorem", "unif_integrable_of_tendsto_Lp", ["measure_theory"]], ["del", "theorem", "measurable", ["measure_theory", "uniform_integrable"]], ["mod", "theorem", "mem_ℒp", ["measure_theory", "uniform_integrable"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "uniform_integrable"]], ["mod", "theorem", "unif_integrable", ["measure_theory", "uniform_integrable"]], ["mod", "def", "uniform_integrable", ["measure_theory"]], ["mod", "theorem", "uniform_integrable_zero_meas", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/measure_theory/group/integration.lean", "newPath": "src/measure_theory/group/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/average.lean", "newPath": "src/measure_theory/integral/average.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "integral_smul", ["measure_theory", "L1", "simple_func"]], ["mod", "theorem", "ae_eq_trim_iff", ["measure_theory"]], ["del", "theorem", "ae_eq_trim_of_measurable", ["measure_theory"]], ["add", "theorem", "ae_eq_trim_of_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "integral_dirac'", ["measure_theory"]], ["mod", "theorem", "integral_eq_lintegral_of_nonneg_ae", ["measure_theory"]], ["del", "theorem", "integral_map_of_measurable", ["measure_theory"]], ["add", "theorem", "integral_map_of_strongly_measurable", ["measure_theory"]], ["del", "theorem", "integral_non_ae_measurable", ["measure_theory"]], ["add", "theorem", "integral_non_ae_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "integral_norm_eq_lintegral_nnnorm", ["measure_theory"]], ["mod", "theorem", "integral_smul", ["measure_theory"]], ["mod", "theorem", "integral_trim", ["measure_theory"]], ["mod", "theorem", "integral_trim_ae", ["measure_theory"]], ["mod", "theorem", "of_real_integral_norm_eq_lintegral_nnnorm", ["measure_theory"]], ["mod", "theorem", "tendsto_integral_approx_on_of_measurable", ["measure_theory"]], ["add", "theorem", "tendsto_integral_approx_on_of_measurable_of_range_subset", ["measure_theory"]], ["del", "theorem", "tendsto_integral_approx_on_univ_of_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": [["mod", "theorem", "add", ["circle_integrable"]], ["mod", "theorem", "neg", ["circle_integrable"]], ["mod", "theorem", "out", ["circle_integrable"]], ["mod", "theorem", "circle_integrable_iff", []], ["mod", "theorem", "circle_integrable'", ["continuous_on"]], ["mod", "theorem", "circle_integrable", ["continuous_on"]]]}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/exp_decay.lean", "newPath": "src/measure_theory/integral/exp_decay.lean", "changes": [["mod", "theorem", "exp_neg_integrable_on_Ioi", []]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["del", "theorem", "measurable_at_filter_of_mem", ["ae_measurable"]], ["add", "theorem", "strongly_measurable_at_filter_of_mem", ["ae_strongly_measurable"]], ["add", "theorem", "strongly_measurable_at_filter", ["continuous"]], ["add", "theorem", "strongly_measurable_at_filter", ["continuous_at"]], ["add", "theorem", "ae_strongly_measurable", ["continuous_on"]], ["add", "theorem", "ae_strongly_measurable_of_is_separable", ["continuous_on"]], ["add", "theorem", "integrable_at_nhds_within_of_is_separable", ["continuous_on"]], ["add", "theorem", "strongly_measurable_at_filter", ["continuous_on"]], ["add", "theorem", "strongly_measurable_at_filter_nhds_within", ["continuous_on"]], ["del", "theorem", "measurable_at_bot", []], ["del", "def", "measurable_at_filter", []], ["mod", "theorem", "integrable_indicator_const_Lp", ["measure_theory"]], ["mod", "theorem", "integrable_on_Lp_of_measure_ne_top", ["measure_theory"]], ["mod", "theorem", "integrable_on_singleton_iff", ["measure_theory"]], ["add", "theorem", "strongly_measurable_at_bot", []], ["add", "def", "strongly_measurable_at_filter", []]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["add", "theorem", "ae_strongly_measurable", ["measure_theory", "ae_cover"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "interval_integrable", ["continuous"]], ["mod", "theorem", "interval_integrable", ["continuous_on"]], ["mod", "theorem", "interval_integrable_of_Icc", ["continuous_on"]], ["mod", "theorem", "add", ["interval_integrable"]], ["mod", "theorem", "mono_fun", ["interval_integrable"]], ["mod", "theorem", "neg", ["interval_integrable"]], ["mod", "theorem", "norm", ["interval_integrable"]], ["mod", "theorem", "smul", ["interval_integrable"]], ["mod", "theorem", "sub", ["interval_integrable"]], ["del", "theorem", "integral_non_ae_measurable", ["interval_integral"]], ["del", "theorem", "integral_non_ae_measurable_of_le", ["interval_integral"]], ["add", "theorem", "integral_non_ae_strongly_measurable", ["interval_integral"]], ["add", "theorem", "integral_non_ae_strongly_measurable_of_le", ["interval_integral"]], ["mod", "theorem", "interval_integrable_iff_integrable_Icc_of_le", ["interval_integral"]], ["mod", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["del", "theorem", "measurable_at_filter", ["continuous"]], ["del", "theorem", "measurable_at_filter", ["continuous_at"]], ["del", "theorem", "measurable_at_filter", ["continuous_on"]], ["del", "theorem", "measurable_at_filter_nhds_within", ["continuous_on"]], ["mod", "theorem", "integral_norm_eq_pos_sub_neg", ["measure_theory"]], ["mod", "theorem", "set_integral_eq_zero_of_forall_eq_zero", ["measure_theory"]], ["mod", "theorem", "set_integral_le_nonneg", ["measure_theory"]], ["mod", "theorem", "set_integral_nonpos_le", ["measure_theory"]], ["mod", "theorem", "set_integral_union_eq_left", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["mod", "theorem", "norm_eq_sum_mul", ["measure_theory", "L1", "simple_func"]], ["mod", "theorem", "set_to_L1s_smul", ["measure_theory", "L1", "simple_func"]], ["mod", "theorem", "continuous_L1_to_L1", ["measure_theory"]], ["del", "theorem", "set_to_fun_non_ae_measurable", ["measure_theory"]], ["add", "theorem", "set_to_fun_non_ae_strongly_measurable", ["measure_theory"]], ["mod", "theorem", "set_to_fun_smul", ["measure_theory"]], ["mod", "theorem", "set_to_simple_func_mono", ["measure_theory", "simple_func"]], ["mod", "theorem", "set_to_simple_func_nonneg'", ["measure_theory", "simple_func"]], ["mod", "theorem", "set_to_simple_func_smul", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": []}, {"oldPath": "src/probability/density.lean", "newPath": "src/probability/density.lean", "changes": []}, {"oldPath": "src/probability/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": [["del", "theorem", "measurable", ["measure_theory", "martingale"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "martingale"]], ["del", "theorem", "measurable", ["measure_theory", "submartingale"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "submartingale"]], ["del", "theorem", "measurable", ["measure_theory", "supermartingale"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "supermartingale"]]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["mod", "theorem", "add", ["measure_theory", "adapted"]], ["mod", "theorem", "measurable_stopped_process_of_nat", ["measure_theory", "adapted"]], ["mod", "theorem", "neg", ["measure_theory", "adapted"]], ["mod", "theorem", "prog_measurable_of_continuous", ["measure_theory", "adapted"]], ["mod", "theorem", "prog_measurable_of_nat", ["measure_theory", "adapted"]], ["mod", "theorem", "smul", ["measure_theory", "adapted"]], ["mod", "theorem", "stopped_process_of_nat", ["measure_theory", "adapted"]], ["mod", "theorem", "adapted_natural", ["measure_theory", "filtration"]], ["mod", "def", "natural", ["measure_theory", "filtration"]], ["mod", "theorem", "prog_measurable_of_tendsto'", ["measure_theory"]], ["mod", "theorem", "prog_measurable_of_tendsto", ["measure_theory"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1648606821, "sha": "d28a163e", "message": "feat(linear_algebra/dual): define the algebraic dual pairing (#12827)\nWe define the pairing of algebraic dual and show that it is nondegenerate.", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "theorem", "dual_pairing_nondegenerate", ["linear_map"]], ["add", "def", "dual_pairing", ["module"]], ["add", "theorem", "dual_pairing_apply", ["module"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}]}, {"timestamp": 1648600168, "sha": "c594e2b9", "message": "feat(algebra/ring/basic): neg_zero for distrib_neg (#13049)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "neg_zero'", []]]}]}, {"timestamp": 1648600167, "sha": "b446c498", "message": "feat(set_theory/cardinal): bit lemmas for exponentiation (#13010)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "power_bit0", ["cardinal"]], ["add", "theorem", "power_bit1", ["cardinal"]]]}]}, {"timestamp": 1648600166, "sha": "92b29c77", "message": "fix(tactic/norm_num): make norm_num user command match norm_num better (#12667)\nCorrects some issues with the `#norm_num` user command that prevented it from fully normalizing expressions. Also, adds `expr.norm_num`.", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1648598244, "sha": "523d1779", "message": "feat(combinatorics/simple_graph/regularity/energy): Energy of a partition (#12958)\nDefine the energy of a partition.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/regularity/energy.lean", "changes": [["add", "def", "energy", ["finpartition"]], ["add", "theorem", "energy_le_one", ["finpartition"]], ["add", "theorem", "energy_nonneg", ["finpartition"]]]}]}, {"timestamp": 1648596295, "sha": "50903f0d", "message": "feat(algebra/algebra/unitization): define unitization of a non-unital algebra (#12601)\nGiven a non-unital `R`-algebra `A` (given via the type classes `[non_unital_ring A] [module R A] [smul_comm_class R A A] [is_scalar_tower R A A]`) we construct the minimal unital `R`-algebra containing `A` as an ideal. This object `unitization R A` is a type synonym for `R × A` on which we place a different multiplicative structure, namely, `(r₁, a₁) * (r₂, a₂) = (r₁ * r₂, r₁ • a₂ + r₂ • a₁ + a₁ * a₂)` where the multiplicative identity is `(1, 0)`.", "changes": [{"oldPath": null, "newPath": "src/algebra/algebra/unitization.lean", "changes": [["add", "theorem", "alg_hom_ext'", ["unitization"]], ["add", "theorem", "alg_hom_ext", ["unitization"]], ["add", "theorem", "algebra_map_eq_inl", ["unitization"]], ["add", "theorem", "algebra_map_eq_inl_comp", ["unitization"]], ["add", "theorem", "algebra_map_eq_inl_hom", ["unitization"]], ["add", "theorem", "algebra_map_eq_inl_ring_hom_comp", ["unitization"]], ["add", "theorem", "coe_add", ["unitization"]], ["add", "def", "coe_hom", ["unitization"]], ["add", "theorem", "coe_injective", ["unitization"]], ["add", "theorem", "coe_mul", ["unitization"]], ["add", "theorem", "coe_mul_inl", ["unitization"]], ["add", "theorem", "coe_neg", ["unitization"]], ["add", "def", "coe_non_unital_alg_hom", ["unitization"]], ["add", "theorem", "coe_smul", ["unitization"]], ["add", "theorem", "coe_zero", ["unitization"]], ["add", "theorem", "ext", ["unitization"]], ["add", "def", "fst", ["unitization"]], ["add", "theorem", "fst_add", ["unitization"]], ["add", "theorem", "fst_coe", ["unitization"]], ["add", "def", "fst_hom", ["unitization"]], ["add", "theorem", "fst_inl", ["unitization"]], ["add", "theorem", "fst_mul", ["unitization"]], ["add", "theorem", "fst_neg", ["unitization"]], ["add", "theorem", "fst_one", ["unitization"]], ["add", "theorem", "fst_smul", ["unitization"]], ["add", "theorem", "fst_zero", ["unitization"]], ["add", "theorem", "ind", ["unitization"]], ["add", "def", "inl", ["unitization"]], ["add", "theorem", "inl_add", ["unitization"]], ["add", "theorem", "inl_fst_add_coe_snd_eq", ["unitization"]], ["add", "theorem", "inl_injective", ["unitization"]], ["add", "theorem", "inl_mul", ["unitization"]], ["add", "theorem", "inl_mul_coe", ["unitization"]], ["add", "theorem", "inl_mul_inl", ["unitization"]], ["add", "theorem", "inl_neg", ["unitization"]], ["add", "theorem", "inl_one", ["unitization"]], ["add", "def", "inl_ring_hom", ["unitization"]], ["add", "theorem", "inl_smul", ["unitization"]], ["add", "theorem", "inl_zero", ["unitization"]], ["add", "def", "lift", ["unitization"]], ["add", "theorem", "lift_symm_apply", ["unitization"]], ["add", "theorem", "linear_map_ext", ["unitization"]], ["add", "def", "snd", ["unitization"]], ["add", "theorem", "snd_add", ["unitization"]], ["add", "theorem", "snd_coe", ["unitization"]], ["add", "def", "snd_hom", ["unitization"]], ["add", "theorem", "snd_inl", ["unitization"]], ["add", "theorem", "snd_mul", ["unitization"]], ["add", "theorem", "snd_neg", ["unitization"]], ["add", "theorem", "snd_one", ["unitization"]], ["add", "theorem", "snd_smul", ["unitization"]], ["add", "theorem", "snd_zero", ["unitization"]], ["add", "def", "unitization", []]]}]}, {"timestamp": 1648586264, "sha": "119eb05e", "message": "chore(ring_theory/valuation/basic): fix valuation_apply (#13045)\nFollow-up to #12914.", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "valuation_apply", ["add_valuation"]]]}]}, {"timestamp": 1648586263, "sha": "e4c64493", "message": "feat(algebra/module): `sub_mem_iff_left` and `sub_mem_iff_right` (#13043)\nSince it's a bit of a hassle to rewrite `add_mem_iff_left` and `add_mem_iff_right` to subtraction, I made a new pair of lemmas.", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "sub_mem_iff_left", ["submodule"]], ["add", "theorem", "sub_mem_iff_right", ["submodule"]]]}]}, {"timestamp": 1648586262, "sha": "9aec6df4", "message": "feat(algebra/algebra/tower): `span A s = span R s` if `R → A` is surjective (#13042)", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "coe_span_eq_span_of_surjective", ["algebra"]], ["add", "theorem", "span_restrict_scalars_eq_span_of_surjective", ["algebra"]]]}]}, {"timestamp": 1648578724, "sha": "d3684bc3", "message": "feat(category_theory/abelian): constructor in terms of coimage-image comparison (#12972)\nThe \"stacks constructor\" for an abelian category, following https://stacks.math.columbia.edu/tag/0109.\nI also factored out the canonical morphism from the abelian coimage to the abelian image (which exists whether or not the category is abelian), and reformulated `abelian.coimage_iso_image` in terms of an `is_iso` instance for this morphism.", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["del", "theorem", "full_image_factorisation", ["category_theory", "abelian"]], ["add", "theorem", "has_images", ["category_theory", "abelian", "of_coimage_image_comparison_is_iso"]], ["add", "def", "image_factorisation", ["category_theory", "abelian", "of_coimage_image_comparison_is_iso"]], ["add", "def", "image_mono_factorisation", ["category_theory", "abelian", "of_coimage_image_comparison_is_iso"]], ["add", "theorem", "image_mono_factorisation_e'", ["category_theory", "abelian", "of_coimage_image_comparison_is_iso"]], ["add", "def", "normal_epi_category", ["category_theory", "abelian", "of_coimage_image_comparison_is_iso"]], ["add", "def", "normal_mono_category", ["category_theory", "abelian", "of_coimage_image_comparison_is_iso"]], ["add", "def", "of_coimage_image_comparison_is_iso", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/images.lean", "newPath": "src/category_theory/abelian/images.lean", "changes": [["add", "def", "coimage_image_comparison'", ["category_theory", "abelian"]], ["add", "def", "coimage_image_comparison", ["category_theory", "abelian"]], ["add", "theorem", "coimage_image_comparison_eq_coimage_image_comparison'", ["category_theory", "abelian"]], ["add", "theorem", "coimage_image_factorisation", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "has_zero_object_of_has_finite_biproducts", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "kernel_ι_comp", ["category_theory", "limits", "mono_factorisation"]]]}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "def", "elim0'", ["fin"]]]}]}, {"timestamp": 1648575897, "sha": "e92ecffc", "message": "feat(algebra/direct_sum/module): link `direct_sum.submodule_is_internal` to `is_compl` (#12671)\nThis is then used to show the even and odd components of a clifford algebra are complementary.", "changes": [{"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "theorem", "is_compl", ["direct_sum", "submodule_is_internal"]], ["add", "theorem", "submodule_is_internal_iff_is_compl", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": [["add", "theorem", "even_odd_is_compl", ["clifford_algebra"]]]}]}, {"timestamp": 1648573881, "sha": "90f0bee6", "message": "chore(analysis/normed_space/exponential): fix lemma names in docstrings (#13032)", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}]}, {"timestamp": 1648564680, "sha": "993d5764", "message": "chore(data/list/pairwise): add `pairwise_bind` (#13030)", "changes": [{"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "pairwise_bind", ["list"]]]}]}, {"timestamp": 1648564679, "sha": "89998136", "message": "chore(data/list): two lemmas about bind (#13029)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "bind_congr", ["list"]]]}, {"oldPath": "src/data/list/join.lean", "newPath": "src/data/list/join.lean", "changes": [["add", "theorem", "bind_eq_nil", ["list"]]]}]}, {"timestamp": 1648564678, "sha": "cedf0220", "message": "feat(ring_theory/valuation/basic): add add_valuation.valuation (#12914)", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "def", "valuation", ["add_valuation"]], ["add", "theorem", "valuation_apply", ["add_valuation"]]]}]}, {"timestamp": 1648559446, "sha": "84b8b0d8", "message": "chore(topology/vector_bundle): fix timeout by optimizing proof (#13026)\nThis PR speeds up a big and slow definition using `simp only` and `convert` → `refine`. This declaration seems to be on the edge of timing out and some other changes like #11750 tripped it up.\nTime saved if I run it with timeouts disabled:\n * master 14.8s → 6.3s\n * #11750 14.2s → 6.12s", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}]}, {"timestamp": 1648559445, "sha": "d5fee327", "message": "chore(algebra/field_power): slightly simplify proof of min_le_of_zpow_le_max (#13023)", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}]}, {"timestamp": 1648559444, "sha": "541c80d6", "message": "feat(group_theory/index): Golf proof of `relindex_eq_zero_of_le_left` (#13014)\nThis PR uses `relindex_dvd_of_le_left` to golf the proof of `relindex_eq_zero_of_le_left`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": []}]}, {"timestamp": 1648559443, "sha": "e109c8f6", "message": "feat(topology): basis for `𝓤 C(α, β)` and convergence of a series of `f : C(α, β)` (#11229)\n* add `filter.has_basis.compact_convergence_uniformity`;\n* add a few facts about `compacts X`;\n* add `summable_of_locally_summable_norm`.", "changes": [{"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "summable_of_locally_summable_norm", ["continuous_map"]]]}, {"oldPath": "src/topology/sets/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_convergence.lean", "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": [["add", "theorem", "has_basis_compact_convergence_uniformity_aux", ["continuous_map"]], ["add", "theorem", "compact_convergence_uniformity", ["filter", "has_basis"]]]}]}, {"timestamp": 1648553183, "sha": "66509e13", "message": "feat(data/polynomial/div): `a - b ∣ p.eval a - p.eval b` (#13021)", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "sub_dvd_eval_sub", ["polynomial"]]]}]}, {"timestamp": 1648553182, "sha": "111d3a4a", "message": "chore(data/polynomial/eval): golf two proofs involving evals (#13020)\nI shortened two proofs involving `eval/eval₂/comp`.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}]}, {"timestamp": 1648553181, "sha": "b87c2677", "message": "feat(topology/algebra/group): add small topology lemma (#12931)\nAdds a small topology lemma by splitting `compact_open_separated_mul` into `compact_open_separated_mul_left/right`, which was useful in my proof of `Steinhaus theorem` (see #12932), as in a non-abelian group, the current version was not sufficient.", "changes": [{"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["add", "theorem", "image_op_mul", ["set"]]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["del", "theorem", "compact_open_separated_mul", []], ["add", "theorem", "compact_open_separated_mul_left", []], ["add", "theorem", "compact_open_separated_mul_right", []]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1648546572, "sha": "89c8112f", "message": "feat(topology/algebra/monoid): `finprod` is eventually equal to `finset.prod` (#13013)\nMotivated by https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Using.20partitions.20of.20unity", "changes": [{"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "finprod_eventually_eq_prod", []], ["add", "theorem", "exists_finset_mul_support", ["locally_finite"]]]}]}, {"timestamp": 1648546571, "sha": "545c2655", "message": "feat(data/polynomial/derivative): if `p` is a polynomial, then `p.derivative.nat_degree ≤ p.nat_degree - 1` (#12948)\nI also golfed the proof that `p.derivative.nat_degree ≤ p.nat_degree`.", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["mod", "theorem", "nat_degree_derivative_le", ["polynomial"]]]}]}, {"timestamp": 1648546570, "sha": "4bf4d9df", "message": "feat(ring_theory/dedekind_domain/adic_valuation): add adic valuation on a Dedekind domain (#12712)\nGiven a Dedekind domain R of Krull dimension 1 and a maximal ideal v of R, we define the\nv-adic valuation on R and prove some of its properties, including the existence of uniformizers.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "le_max_iff", ["with_zero"]], ["add", "theorem", "min_le_iff", ["with_zero"]]]}, {"oldPath": null, "newPath": "src/ring_theory/dedekind_domain/adic_valuation.lean", "changes": [["add", "theorem", "le_max_iff_min_le", ["is_dedekind_domain", "height_one_spectrum", "int_valuation"]], ["add", "theorem", "map_add_le_max'", ["is_dedekind_domain", "height_one_spectrum", "int_valuation"]], ["add", "theorem", "map_mul'", ["is_dedekind_domain", "height_one_spectrum", "int_valuation"]], ["add", "theorem", "map_one'", ["is_dedekind_domain", "height_one_spectrum", "int_valuation"]], ["add", "theorem", "map_zero'", ["is_dedekind_domain", "height_one_spectrum", "int_valuation"]], ["add", "def", "int_valuation", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "def", "int_valuation_def", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_def_if_neg", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_def_if_pos", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_exists_uniformizer", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_le_one", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_le_pow_iff_dvd", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_lt_one_iff_dvd", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_ne_zero'", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_ne_zero", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "int_valuation_zero_le", ["is_dedekind_domain", "height_one_spectrum"]]]}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "le_singleton_iff", ["associates"]], ["del", "theorem", "irreducible", ["is_dedekind_domain", "height_one_spectrum", "associates"]], ["add", "theorem", "associates_irreducible", ["is_dedekind_domain", "height_one_spectrum"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "mk_ne_zero'", ["associates"]]]}]}, {"timestamp": 1648546568, "sha": "1ffd04c0", "message": "feat(analysis/locally_convex): add balanced hull and core (#12537)", "changes": [{"oldPath": null, "newPath": "src/analysis/locally_convex/balanced_core_hull.lean", "changes": [["add", "theorem", "hull_subset_of_subset", ["balanced"]], ["add", "theorem", "subset_core_of_subset", ["balanced"]], ["add", "def", "balanced_core", []], ["add", "def", "balanced_core_aux", []], ["add", "theorem", "balanced_core_aux_balanced", []], ["add", "theorem", "balanced_core_aux_empty", []], ["add", "theorem", "balanced_core_aux_maximal", []], ["add", "theorem", "balanced_core_aux_mem_iff", []], ["add", "theorem", "balanced_core_aux_subset", []], ["add", "theorem", "balanced_core_balanced", []], ["add", "theorem", "balanced_core_eq_Inter", []], ["add", "theorem", "balanced_core_mem_iff", []], ["add", "theorem", "balanced_core_nonempty_iff", []], ["add", "theorem", "balanced_core_subset", []], ["add", "theorem", "balanced_core_subset_balanced_core_aux", []], ["add", "theorem", "balanced_core_zero_mem", []], ["add", "theorem", "balanced", ["balanced_hull"]], ["add", "def", "balanced_hull", []], ["add", "theorem", "balanced_hull_mem_iff", []], ["add", "theorem", "smul_balanced_core_subset", []], ["add", "theorem", "subset_balanced_hull", []]]}]}, {"timestamp": 1648539313, "sha": "0f92307e", "message": "feat(data/list/chain): Simp lemma for `chain r a (l ++ b :: c :: m)` (#12969)", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "chain_append_cons_cons", ["list"]]]}]}, {"timestamp": 1648539312, "sha": "1cdbc356", "message": "feat(order/hom/bounded): an order_iso maps top to top and bot to bot (#12862)", "changes": [{"oldPath": "src/order/hom/bounded.lean", "newPath": "src/order/hom/bounded.lean", "changes": [["add", "theorem", "map_eq_bot_iff", []], ["add", "theorem", "map_eq_top_iff", []]]}]}, {"timestamp": 1648539311, "sha": "b535c2d5", "message": "feat(algebra/homology): three lemmas on homological complexes (#12742)", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": [["add", "theorem", "map_chain_complex_of", ["chain_complex"]]]}, {"oldPath": "src/algebra/homology/differential_object.lean", "newPath": "src/algebra/homology/differential_object.lean", "changes": [["add", "theorem", "eq_to_hom_f'", ["homological_complex"]], ["del", "theorem", "eq_to_hom_f", ["homological_complex"]]]}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "theorem", "eq_to_hom_f", ["homological_complex"]], ["add", "theorem", "ext", ["homological_complex"]]]}]}, {"timestamp": 1648539309, "sha": "1084cee9", "message": "feat(category_theory/bicategory/coherence): prove the coherence theorem for bicategories (#12155)", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/coherence.lean", "changes": [["add", "def", "inclusion", ["category_theory", "free_bicategory"]], ["add", "def", "inclusion_map_comp_aux", ["category_theory", "free_bicategory"]], ["add", "def", "inclusion_path", ["category_theory", "free_bicategory"]], ["add", "def", "inclusion_path_aux", ["category_theory", "free_bicategory"]], ["add", "def", "normalize", ["category_theory", "free_bicategory"]], ["add", "def", "normalize_aux", ["category_theory", "free_bicategory"]], ["add", "theorem", "normalize_aux_congr", ["category_theory", "free_bicategory"]], ["add", "theorem", "normalize_aux_nil_comp", ["category_theory", "free_bicategory"]], ["add", "def", "normalize_equiv", ["category_theory", "free_bicategory"]], ["add", "def", "normalize_iso", ["category_theory", "free_bicategory"]], ["add", "theorem", "normalize_naturality", ["category_theory", "free_bicategory"]], ["add", "def", "normalize_unit_iso", ["category_theory", "free_bicategory"]], ["add", "def", "preinclusion", ["category_theory", "free_bicategory"]]]}, {"oldPath": "src/category_theory/bicategory/free.lean", "newPath": "src/category_theory/bicategory/free.lean", "changes": [["mod", "theorem", "comp_def", ["category_theory", "free_bicategory"]], ["mod", "theorem", "id_def", ["category_theory", "free_bicategory"]]]}, {"oldPath": "src/category_theory/bicategory/locally_discrete.lean", "newPath": "src/category_theory/bicategory/locally_discrete.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "dcongr_arg", ["category_theory"]]]}]}, {"timestamp": 1648539308, "sha": "7b8b8f13", "message": "feat(set_theory/ordinal_arithmetic): Characterize principal multiplicative ordinals (#11701)\nTwo lemmas were renamed in the process:\n- `mul_lt_omega` → `principal_mul_omega`\n- `opow_omega` → `principal_opow_omega`\nVarious others were moved to `principal.lean`.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "mul_lt_omega", ["ordinal"]], ["del", "theorem", "mul_lt_omega_opow", ["ordinal"]], ["del", "theorem", "mul_omega", ["ordinal"]], ["del", "theorem", "mul_omega_dvd", ["ordinal"]], ["add", "theorem", "mul_two", ["ordinal"]], ["del", "theorem", "opow_lt_omega", ["ordinal"]], ["del", "theorem", "opow_omega", ["ordinal"]], ["mod", "theorem", "sup_opow_nat", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/principal.lean", "changes": [["add", "theorem", "mul_eq_opow_log_succ", ["ordinal"]], ["add", "theorem", "mul_lt_omega_opow", ["ordinal"]], ["add", "theorem", "mul_omega", ["ordinal"]], ["add", "theorem", "mul_omega_dvd", ["ordinal"]], ["add", "theorem", "mul_omega_opow_opow", ["ordinal"]], ["add", "theorem", "opow_omega", ["ordinal"]], ["del", "theorem", "opow_principal_add_is_principal_add", ["ordinal"]], ["add", "theorem", "opow_principal_add_of_principal_add", ["ordinal"]], ["add", "theorem", "principal_add_iff_zero_or_omega_opow", ["ordinal"]], ["del", "theorem", "principal_add_iff_zero_or_omega_power", ["ordinal"]], ["add", "theorem", "principal_add_of_principal_mul", ["ordinal"]], ["add", "theorem", "principal_add_of_principal_mul_opow", ["ordinal"]], ["add", "theorem", "principal_mul_iff_le_two_or_omega_opow_opow", ["ordinal"]], ["add", "theorem", "principal_mul_iff_mul_left_eq", ["ordinal"]], ["add", "theorem", "principal_mul_is_limit", ["ordinal"]], ["add", "theorem", "principal_mul_of_le_two", ["ordinal"]], ["add", "theorem", "principal_mul_omega", ["ordinal"]], ["add", "theorem", "principal_mul_omega_opow_opow", ["ordinal"]], ["add", "theorem", "principal_mul_one", ["ordinal"]], ["add", "theorem", "principal_mul_two", ["ordinal"]], ["add", "theorem", "principal_opow_omega", ["ordinal"]]]}]}, {"timestamp": 1648533462, "sha": "ce3cecef", "message": "feat(measure_theory/constructions/borel_space): add `borelize` tactic (#12844)", "changes": [{"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": []}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": []}, {"oldPath": "src/analysis/complex/removable_singularity.lean", "newPath": "src/analysis/complex/removable_singularity.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}]}, {"timestamp": 1648533461, "sha": "5fb7b7b6", "message": "feat(set_theory/{ordinal_arithmetic, game/nim}): Minimum excluded ordinal (#12659)\nWe define `mex` and `bmex`, and use the former to golf the proof of Sprague-Grundy.", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["del", "theorem", "mk_ordinal_out", ["cardinal"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "grundy_value_nim_add_nim", ["pgame"]], ["del", "def", "nonmoves", ["pgame"]], ["del", "theorem", "nonmoves_nonempty", ["pgame"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "mk_ordinal_out", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "def", "bmex", ["ordinal"]], ["add", "theorem", "bmex_le_blsub", ["ordinal"]], ["add", "theorem", "bmex_le_of_ne", ["ordinal"]], ["add", "theorem", "bmex_lt_ord_succ_card", ["ordinal"]], ["add", "theorem", "bmex_monotone", ["ordinal"]], ["add", "theorem", "bmex_not_mem_brange", ["ordinal"]], ["add", "theorem", "exists_of_lt_bmex", ["ordinal"]], ["add", "theorem", "exists_of_lt_mex", ["ordinal"]], ["del", "theorem", "lsub_nmem_range", ["ordinal"]], ["add", "theorem", "lsub_not_mem_range", ["ordinal"]], ["add", "def", "mex", ["ordinal"]], ["add", "theorem", "mex_le_lsub", ["ordinal"]], ["add", "theorem", "mex_le_of_ne", ["ordinal"]], ["add", "theorem", "mex_lt_ord_succ_mk", ["ordinal"]], ["add", "theorem", "mex_monotone", ["ordinal"]], ["add", "theorem", "mex_not_mem_range", ["ordinal"]], ["add", "theorem", "ne_bmex", ["ordinal"]], ["add", "theorem", "ne_mex", ["ordinal"]], ["add", "theorem", "nonempty_compl_range", ["ordinal"]]]}]}, {"timestamp": 1648527558, "sha": "5fcad214", "message": "feat(number_theory/frobenius_number): Frobenius numbers (#9729)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "mem_closure_pair", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mem_closure_pair", ["submonoid"]]]}, {"oldPath": null, "newPath": "src/number_theory/frobenius_number.lean", "changes": [["add", "def", "is_frobenius_number", []], ["add", "theorem", "is_frobenius_number_pair", []], ["add", "theorem", "mul_add_mul_ne_mul", ["nat", "coprime"]]]}]}, {"timestamp": 1648511649, "sha": "7fea719c", "message": "feat(data/set/basic): Laws for n-ary image (#13011)\nProve left/right commutativity, distributivity of `set.image2` in the style of `set.image2_assoc`. Also add `forall₃_imp` and `Exists₃.imp`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image2_comm", ["set"]], ["add", "theorem", "image2_eq_empty_iff", ["set"]], ["add", "theorem", "image2_left_comm", ["set"]], ["add", "theorem", "image2_nonempty_iff", ["set"]], ["add", "theorem", "image2_right_comm", ["set"]], ["add", "theorem", "image3_mono", ["set"]], ["add", "theorem", "image_image2_distrib", ["set"]], ["add", "theorem", "image_image2_distrib_left", ["set"]], ["add", "theorem", "image_image2_distrib_right", ["set"]], ["mod", "theorem", "image2", ["set", "nonempty"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "imp", ["Exists"]], ["mod", "theorem", "imp", ["Exists₂"]], ["add", "theorem", "imp", ["Exists₃"]], ["mod", "theorem", "exists₂_congr", []], ["mod", "theorem", "forall_imp", []], ["mod", "theorem", "forall₂_imp", []], ["add", "theorem", "forall₃_imp", []]]}]}, {"timestamp": 1648511648, "sha": "94800295", "message": "chore(data/{nat,int,rat}/cast): add bundled version of `cast_id` lemmas (#13001)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "cast_add_hom_int", ["int"]], ["add", "theorem", "cast_ring_hom_int", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_ring_hom_nat", ["nat"]], ["add", "theorem", "eq_nat_cast'", ["ring_hom"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "cast_hom_rat", ["rat"]]]}]}, {"timestamp": 1648511647, "sha": "8c9dee1c", "message": "feat(algebra/field_power): add min_le_of_zpow_le_max (#12915)", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "min_le_of_zpow_le_max", []]]}]}, {"timestamp": 1648506378, "sha": "223d9a19", "message": "feat(group_theory/quotient_group): maps of quotients by powers of integers induced by group homomorphisms (#12811)", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "def", "equiv_quotient_zpow_of_equiv", ["quotient_group"]], ["add", "def", "hom_quotient_zpow_of_hom", ["quotient_group"]], ["add", "theorem", "hom_quotient_zpow_of_hom_right_inverse", ["quotient_group"]]]}]}, {"timestamp": 1648506376, "sha": "1a2182cd", "message": "feat(group_theory/complement): Transversals as functions (#12732)\nThis PR adds interpretations of transversals as functions mapping elements of `G` to the chosen coset representative.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "inv_mul_to_fun_mem", ["subgroup", "mem_left_transversals"]], ["add", "theorem", "inv_to_fun_mul_mem", ["subgroup", "mem_left_transversals"]], ["add", "theorem", "mk'_to_equiv", ["subgroup", "mem_left_transversals"]], ["add", "theorem", "mk'_to_equiv", ["subgroup", "mem_right_transversals"]], ["add", "theorem", "mul_inv_to_fun_mem", ["subgroup", "mem_right_transversals"]], ["add", "theorem", "to_fun_mul_inv_mem", ["subgroup", "mem_right_transversals"]]]}]}, {"timestamp": 1648499907, "sha": "40b142e0", "message": "chore(analysis/*): move matrix definitions into their own file and generalize (#13007)\nThis makes it much easier to relax the typeclasses as needed.\n`norm_matrix_le_iff` has been renamed to `matrix.norm_le_iff`, the rest of the lemmas have just had their typeclass arguments weakened. No proofs have changed.\nThe `matrix.normed_space` instance is now of the form `normed_space R (matrix n m α)` instead of `normed_space α (matrix n m α)`.", "changes": [{"oldPath": null, "newPath": "src/analysis/matrix.lean", "changes": [["add", "theorem", "norm_entry_le_entrywise_sup_norm", ["matrix"]], ["add", "theorem", "norm_le_iff", ["matrix"]], ["add", "theorem", "norm_lt_iff", ["matrix"]]]}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": [["del", "def", "normed_group", ["matrix"]], ["del", "def", "semi_normed_group", ["matrix"]], ["del", "theorem", "norm_matrix_le_iff", []], ["del", "theorem", "norm_matrix_lt_iff", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "norm_entry_le_entrywise_sup_norm", ["matrix"]], ["del", "def", "normed_space", ["matrix"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["del", "theorem", "entrywise_sup_norm_star_eq_norm", ["matrix"]]]}, {"oldPath": "src/analysis/normed_space/star/matrix.lean", "newPath": "src/analysis/normed_space/star/matrix.lean", "changes": [["add", "theorem", "entrywise_sup_norm_star_eq_norm", ["matrix"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}]}, {"timestamp": 1648499906, "sha": "ea97ca6b", "message": "feat(group_theory/group_action): add `commute.smul_{left,right}[_iff]` lemmas (#13003)\n`(r • a) * b = b * (r • a)` follows trivially from `smul_mul_assoc` and `mul_smul_comm`", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "smul_left", ["commute"]], ["add", "theorem", "smul_right", ["commute"]]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "theorem", "smul_left_iff", ["commute"]], ["add", "theorem", "smul_left_iff₀", ["commute"]], ["add", "theorem", "smul_right_iff", ["commute"]], ["add", "theorem", "smul_right_iff₀", ["commute"]]]}]}, {"timestamp": 1648499905, "sha": "261a1953", "message": "feat(group_theory/group_action/opposite): Add `smul_eq_mul_unop` (#12995)\nThis PR adds a simp-lemma `smul_eq_mul_unop`, similar to `op_smul_eq_mul` and `smul_eq_mul`.", "changes": [{"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": [["add", "theorem", "smul_eq_mul_unop", ["mul_opposite"]], ["mod", "theorem", "op_smul_eq_mul", []]]}]}, {"timestamp": 1648486163, "sha": "6fe0c3b1", "message": "refactor(algebra/group/to_additive + files containing even/odd): move many lemmas involving even/odd to the same file (#12882)\nThis is the first step in refactoring the definition of `even` to be the `to_additive` of `square`.\nThis PR simply gathers together many (though not all) lemmas that involve `even` or `odd` in their assumptions. The choice of which lemmas to migrate to the file `algebra.parity` was dictated mostly by whether importing `algebra.parity` in the current home would create a cyclic import.\nThe only change that is not a simple shift from a file to another one is the addition in `to_additive` for support to change `square` in a multiplicative name to `even` in an additive name.\nThe change to the test file `test.ring` is due to the fact that the definition of `odd` was no longer imported by the file.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "abs_zpow_bit0", []], ["del", "theorem", "abs_zpow", ["even"]], ["del", "theorem", "zpow_abs", ["even"]], ["del", "theorem", "zpow_neg", ["even"]], ["del", "theorem", "zpow_nonneg", ["even"]], ["del", "theorem", "zpow_pos", ["even"]], ["del", "theorem", "zpow_neg", ["odd"]], ["del", "theorem", "zpow_nonneg", ["odd"]], ["del", "theorem", "zpow_nonpos", ["odd"]], ["del", "theorem", "zpow_pos", ["odd"]], ["del", "theorem", "zpow_bit0_abs", []]]}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "pow_abs", ["even"]], ["del", "theorem", "pow_nonneg", ["even"]], ["del", "theorem", "pow_pos", ["even"]], ["del", "theorem", "pow_pos_iff", ["even"]], ["del", "theorem", "pow_neg", ["odd"]], ["del", "theorem", "pow_neg_iff", ["odd"]], ["del", "theorem", "pow_nonneg_iff", ["odd"]], ["del", "theorem", "pow_nonpos", ["odd"]], ["del", "theorem", "pow_nonpos_iff", ["odd"]], ["del", "theorem", "pow_pos_iff", ["odd"]], ["del", "theorem", "strict_mono_pow", ["odd"]], ["del", "theorem", "pow_bit0_abs", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "even_abs", []], ["del", "theorem", "odd_abs", []]]}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["add", "theorem", "abs_zpow_bit0", []], ["add", "theorem", "abs_zpow", ["even"]], ["add", "theorem", "pow_abs", ["even"]], ["add", "theorem", "pow_nonneg", ["even"]], ["add", "theorem", "pow_pos", ["even"]], ["add", "theorem", "pow_pos_iff", ["even"]], ["add", "theorem", "zpow_abs", ["even"]], ["add", "theorem", "zpow_neg", ["even"]], ["add", "theorem", "zpow_nonneg", ["even"]], ["add", "theorem", "zpow_pos", ["even"]], ["add", "def", "even", []], ["add", "theorem", "even_abs", []], ["add", "theorem", "even_bit0", []], ["add", "theorem", "even_iff_two_dvd", []], ["add", "theorem", "even_neg", []], ["add", "theorem", "card_fin_even", ["fintype"]], ["add", "theorem", "neg", ["odd"]], ["add", "theorem", "pow_neg", ["odd"]], ["add", "theorem", "pow_neg_iff", ["odd"]], ["add", "theorem", "pow_nonneg_iff", ["odd"]], ["add", "theorem", "pow_nonpos", ["odd"]], ["add", "theorem", "pow_nonpos_iff", ["odd"]], ["add", "theorem", "pow_pos_iff", ["odd"]], ["add", "theorem", "strict_mono_pow", ["odd"]], ["add", "theorem", "zpow_neg", ["odd"]], ["add", "theorem", "zpow_nonneg", ["odd"]], ["add", "theorem", "zpow_nonpos", ["odd"]], ["add", "theorem", "zpow_pos", ["odd"]], ["add", "def", "odd", []], ["add", "theorem", "odd_abs", []], ["add", "theorem", "odd_bit1", []], ["add", "theorem", "odd_neg", []], ["add", "theorem", "pow_bit0_abs", []], ["add", "theorem", "range_two_mul", []], ["add", "theorem", "range_two_mul_add_one", []], ["add", "theorem", "zpow_bit0_abs", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "def", "even", []], ["del", "theorem", "even_bit0", []], ["del", "theorem", "even_iff_two_dvd", []], ["del", "theorem", "even_neg", []], ["del", "theorem", "neg", ["odd"]], ["del", "def", "odd", []], ["del", "theorem", "odd_bit1", []], ["del", "theorem", "odd_neg", []], ["del", "theorem", "range_two_mul", []], ["del", "theorem", "range_two_mul_add_one", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "card_fin_even", ["fintype"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1648486162, "sha": "958f6b02", "message": "refactor(measure_theory/group/fundamental_domain): allow `null_measurable_set`s (#12005)", "changes": [{"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "image_of_equiv", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "lintegral_eq_tsum", ["measure_theory", "is_fundamental_domain"]], ["del", "theorem", "measurable_set_smul", ["measure_theory", "is_fundamental_domain"]], ["mod", "theorem", "mk'", ["measure_theory", "is_fundamental_domain"]], ["mod", "theorem", "null_measurable_set_smul", ["measure_theory", "is_fundamental_domain"]], ["mod", "theorem", "pairwise_ae_disjoint_of_ac", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "preimage_of_equiv", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "restrict_restrict", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "smul", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "smul_of_comm", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "sum_restrict", ["measure_theory", "is_fundamental_domain"]]]}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_quotient.lean", "newPath": "src/measure_theory/measure/haar_quotient.lean", "changes": [["del", "theorem", "smul", ["measure_theory", "is_fundamental_domain"]]]}]}, {"timestamp": 1648479796, "sha": "abaabc8c", "message": "chore(algebra/group_power/lemmas): turn `[zn]smul` lemmas into instances (#13002)\nThis adds new instances such that:\n* `mul_[zn]smul_assoc` is `←smul_mul_assoc`\n* `mul_[zn]smul_left` is `←mul_smul_comm`\nThis also makes `noncomm_ring` slightly smarter, and able to handle scalar actions by `nat`.\nThanks to Christopher, this generalizes these instances to non-associative and non-unital rings.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "mul_nsmul_assoc", []], ["del", "theorem", "mul_nsmul_left", []], ["del", "theorem", "mul_zsmul_assoc", []], ["del", "theorem", "mul_zsmul_left", []]]}, {"oldPath": "src/tactic/noncomm_ring.lean", "newPath": "src/tactic/noncomm_ring.lean", "changes": []}, {"oldPath": "test/noncomm_ring.lean", "newPath": "test/noncomm_ring.lean", "changes": []}]}, {"timestamp": 1648479794, "sha": "0e1387bb", "message": "feat(category_theory): the category of small categories has all small limits (#12979)", "changes": [{"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": [["add", "theorem", "comp_map", ["category_theory", "Cat"]], ["add", "theorem", "comp_obj", ["category_theory", "Cat"]], ["add", "theorem", "id_map", ["category_theory", "Cat"]]]}, {"oldPath": null, "newPath": "src/category_theory/category/Cat/limit.lean", "changes": [["add", "def", "hom_diagram", ["category_theory", "Cat", "has_limits"]], ["add", "def", "limit_cone", ["category_theory", "Cat", "has_limits"]], ["add", "def", "limit_cone_X", ["category_theory", "Cat", "has_limits"]], ["add", "def", "limit_cone_is_limit", ["category_theory", "Cat", "has_limits"]], ["add", "def", "limit_cone_lift", ["category_theory", "Cat", "has_limits"]], ["add", "theorem", "limit_π_hom_diagram_eq_to_hom", ["category_theory", "Cat", "has_limits"]]]}, {"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": []}]}, {"timestamp": 1648479793, "sha": "31e5ae22", "message": "feat(data/list/cycle): Define the empty cycle (#12967)\nAlso clean the file up somewhat, and add various `simp` lemmas.", "changes": [{"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "coe_eq_nil", ["cycle"]], ["add", "theorem", "coe_nil", ["cycle"]], ["add", "theorem", "coe_to_multiset", ["cycle"]], ["add", "theorem", "empty_eq", ["cycle"]], ["add", "theorem", "induction_on", ["cycle"]], ["mod", "theorem", "length_coe", ["cycle"]], ["add", "theorem", "length_nil", ["cycle"]], ["mod", "theorem", "length_nontrivial", ["cycle"]], ["mod", "theorem", "length_reverse", ["cycle"]], ["mod", "theorem", "length_subsingleton_iff", ["cycle"]], ["add", "theorem", "lists_coe", ["cycle"]], ["add", "theorem", "lists_nil", ["cycle"]], ["add", "theorem", "map_coe", ["cycle"]], ["add", "theorem", "map_eq_nil", ["cycle"]], ["add", "theorem", "map_nil", ["cycle"]], ["mod", "theorem", "mem_coe_iff", ["cycle"]], ["mod", "theorem", "mem_lists_iff_coe_eq", ["cycle"]], ["mod", "theorem", "mem_reverse_iff", ["cycle"]], ["mod", "theorem", "mk'_eq_coe", ["cycle"]], ["mod", "theorem", "mk_eq_coe", ["cycle"]], ["mod", "theorem", "next_mem", ["cycle"]], ["add", "def", "nil", ["cycle"]], ["add", "theorem", "nil_to_finset", ["cycle"]], ["add", "theorem", "nil_to_multiset", ["cycle"]], ["mod", "theorem", "nontrivial_iff", ["cycle", "nodup"]], ["mod", "theorem", "nodup_coe_iff", ["cycle"]], ["add", "theorem", "nodup_nil", ["cycle"]], ["mod", "theorem", "nodup_reverse_iff", ["cycle"]], ["mod", "theorem", "nontrivial_reverse_iff", ["cycle"]], ["add", "theorem", "not_mem_nil", ["cycle"]], ["mod", "theorem", "prev_mem", ["cycle"]], ["mod", "theorem", "reverse_coe", ["cycle"]], ["add", "theorem", "reverse_nil", ["cycle"]], ["mod", "theorem", "reverse_reverse", ["cycle"]], ["mod", "theorem", "nodup", ["cycle", "subsingleton"]], ["add", "theorem", "subsingleton_nil", ["cycle"]], ["mod", "theorem", "subsingleton_reverse_iff", ["cycle"]]]}]}, {"timestamp": 1648477841, "sha": "0c6f0c2a", "message": "feat(ring_theory/dedekind_domain/ideal): add lemmas about sup of ideal with irreducible (#12859)\nThese results were originally in #9345.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "irreducible_pow_sup", []], ["add", "theorem", "irreducible_pow_sup_of_ge", []], ["add", "theorem", "irreducible_pow_sup_of_le", []], ["mod", "theorem", "prod_normalized_factors_eq_self", []]]}]}, {"timestamp": 1648467540, "sha": "4ee988db", "message": "chore(algebra/homology/homotopy): cleanup (#12998)\nCorrecting a name and some whitespace.", "changes": [{"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": [["mod", "def", "add", ["homotopy"]], ["add", "theorem", "prev_d_comp_right", []], ["del", "theorem", "to_prev'_comp_right", []]]}]}, {"timestamp": 1648467539, "sha": "eba31b58", "message": "feat(algebra/homology): some elementwise lemmas (#12997)", "changes": [{"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": []}, {"oldPath": "src/algebra/homology/image_to_kernel.lean", "newPath": "src/algebra/homology/image_to_kernel.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/elementwise.lean", "newPath": "src/category_theory/concrete_category/elementwise.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": []}]}, {"timestamp": 1648467538, "sha": "dacf0490", "message": "feat(algebra/*): coe_to_equiv_symm simp lemmas (#12996)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "to_equiv_eq_coe", ["alg_equiv"]]]}, {"oldPath": "src/algebra/hom/equiv.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": [["mod", "theorem", "coe_to_equiv", ["mul_equiv"]], ["add", "theorem", "to_equiv_eq_coe", ["mul_equiv"]]]}, {"oldPath": "src/algebra/module/equiv.lean", "newPath": "src/algebra/module/equiv.lean", "changes": [["add", "theorem", "coe_to_equiv_symm", ["linear_equiv"]]]}, {"oldPath": "src/group_theory/commensurable.lean", "newPath": "src/group_theory/commensurable.lean", "changes": []}]}, {"timestamp": 1648467537, "sha": "f0c15be6", "message": "feat(measure_theory/functions/strongly_measurable): almost everywhere strongly measurable functions (#12985)\nA function is almost everywhere strongly measurable if it is almost everywhere the pointwise limit of a sequence of simple functions. These are the functions that can be integrated in the most general version of the Bochner integral. As a prerequisite for the refactor of the Bochner integral, we define almost strongly measurable functions and build a comprehensive API for them, gathering in the file `strongly_measurable.lean` all facts that will be needed for the refactor. The API does not claim to be complete, but it is already pretty big.", "changes": [{"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "ae_strongly_measurable", ["ae_measurable"]], ["add", "theorem", "ae_strongly_measurable_Union_iff", []], ["add", "theorem", "ae_strongly_measurable_add_measure_iff", []], ["add", "theorem", "ae_strongly_measurable_congr", []], ["add", "theorem", "ae_strongly_measurable_const_smul_iff", []], ["add", "theorem", "ae_strongly_measurable_const_smul_iff₀", []], ["add", "theorem", "ae_strongly_measurable_id", []], ["add", "theorem", "ae_strongly_measurable_iff_ae_measurable", []], ["add", "theorem", "ae_strongly_measurable_iff_ae_measurable_separable", []], ["add", "theorem", "ae_strongly_measurable_indicator_iff", []], ["add", "theorem", "ae_strongly_measurable_of_ae_strongly_measurable_trim", []], ["add", "theorem", "ae_strongly_measurable_of_tendsto_ae", []], ["add", "theorem", "ae_strongly_measurable_smul_const_iff", []], ["add", "theorem", "ae_strongly_measurable_sum_measure_iff", []], ["add", "theorem", "ae_strongly_measurable_union_iff", []], ["add", "theorem", "ae_strongly_measurable_with_density_iff", []], ["add", "theorem", "ae_strongly_measurable", ["continuous"]], ["add", "theorem", "comp_ae_strongly_measurable", ["continuous"]], ["add", "theorem", "comp_strongly_measurable", ["continuous"]], ["add", "theorem", "strongly_measurable", ["continuous"]], ["add", "theorem", "ae_strongly_measurable_comp_iff", ["embedding"]], ["add", "theorem", "comp_strongly_measurable_iff", ["embedding"]], ["add", "theorem", "exists_strongly_measurable_limit_of_tendsto_ae", []], ["add", "theorem", "ae_strongly_measurable_prod'", ["finset"]], ["add", "theorem", "ae_strongly_measurable_prod", ["finset"]], ["add", "theorem", "strongly_measurable_prod'", ["finset"]], ["add", "theorem", "strongly_measurable_prod", ["finset"]], ["add", "theorem", "ae_strongly_measurable_prod'", ["list"]], ["add", "theorem", "ae_strongly_measurable_prod", ["list"]], ["add", "theorem", "strongly_measurable_prod'", ["list"]], ["add", "theorem", "strongly_measurable_prod", ["list"]], ["add", "theorem", "ae_strongly_measurable", ["measurable"]], ["mod", "theorem", "strongly_measurable", ["measurable"]], ["add", "theorem", "ae_strongly_measurable_map_iff", ["measurable_embedding"]], ["add", "theorem", "exists_strongly_measurable_extend", ["measurable_embedding"]], ["add", "theorem", "strongly_measurable_extend", ["measurable_embedding"]], ["add", "theorem", "ae_measurable_zero_measure", ["measure_theory"]], ["add", "theorem", "add_measure", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "ae_eq_mk", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "ae_mem_imp_eq_mk", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "apply_continuous_linear_map", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "comp_measurable", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "congr", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "is_separable_ae_range", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "measurable_mk", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "mono_measure", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "mono_set", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "smul_measure", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "strongly_measurable_mk", ["measure_theory", "ae_strongly_measurable"]], ["add", "theorem", "sum_measure", ["measure_theory", "ae_strongly_measurable"]], ["add", "def", "ae_strongly_measurable", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable_const", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable_one", ["measure_theory"]], ["mod", "theorem", "measurable_uncurry_of_continuous_of_measurable", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable_comp_iff", ["measure_theory", "measure_preserving"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "simple_func"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "comp_measurable", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "const_mul", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "is_separable_range", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "measurable_set_eq_fun", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "measurable_set_le", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "measurable_set_lt", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "measurable_set_mul_support", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "mul_const", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "of_uncurry_left", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "of_uncurry_right", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "separable_space_range_union_singleton", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "strongly_measurable_const'", ["measure_theory"]], ["del", "theorem", "strongly_measurable_id", ["measure_theory"]], ["del", "theorem", "strongly_measurable_iff_measurable", ["measure_theory"]], ["add", "theorem", "strongly_measurable_of_is_empty", ["measure_theory"]], ["add", "theorem", "strongly_measurable_one", ["measure_theory"]], ["add", "theorem", "strongly_measurable_uncurry_of_continuous_of_strongly_measurable", ["measure_theory"]], ["add", "theorem", "ae_strongly_measurable'", ["measure_theory", "subsingleton"]], ["add", "theorem", "ae_strongly_measurable", ["measure_theory", "subsingleton"]], ["add", "theorem", "strongly_measurable'", ["measure_theory", "subsingleton"]], ["mod", "theorem", "strongly_measurable", ["measure_theory", "subsingleton"]], ["add", "theorem", "ae_strongly_measurable_prod'", ["multiset"]], ["add", "theorem", "ae_strongly_measurable_prod", ["multiset"]], ["add", "theorem", "strongly_measurable_prod'", ["multiset"]], ["add", "theorem", "strongly_measurable_prod", ["multiset"]], ["add", "theorem", "apply_continuous_linear_map", ["strongly_measurable"]], ["add", "theorem", "strongly_measurable_const_smul_iff", []], ["add", "theorem", "strongly_measurable_const_smul_iff₀", []], ["add", "theorem", "strongly_measurable_id", []], ["add", "theorem", "strongly_measurable_iff_measurable", []], ["add", "theorem", "strongly_measurable_iff_measurable_separable", []], ["add", "theorem", "strongly_measurable_of_restrict_of_restrict_compl", []], ["add", "theorem", "strongly_measurable_of_strongly_measurable_union_cover", []], ["add", "theorem", "strongly_measurable_of_tendsto", []]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["mod", "theorem", "prog_measurable_of_continuous", ["measure_theory", "adapted"]]]}]}, {"timestamp": 1648467536, "sha": "fd2c6c47", "message": "chore(data/polynomial/ring_division): remove nontrivial assumptions (#12984)\nAdditionally, this removes:\n* some `polynomial.monic` assumptions that can be handled by casing instead\n* the explicit `R` argument from `is_field.to_field R hR`", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["add", "theorem", "nontrivial", ["is_field"]], ["add", "theorem", "not_is_field_of_subsingleton", []]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "nontrivial_iff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["mod", "theorem", "not_is_field", ["polynomial"]], ["mod", "theorem", "sum_mod_by_monic_coeff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "add_mod_by_monic", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_of_dvd_sub", ["polynomial"]], ["mod", "def", "mod_by_monic_hom", ["polynomial"]], ["mod", "theorem", "smul_mod_by_monic", ["polynomial"]]]}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "theorem", "mk_left_inverse", ["adjoin_root"]], ["mod", "theorem", "mk_surjective", ["adjoin_root"]], ["mod", "def", "mod_by_monic_hom", ["adjoin_root"]], ["mod", "theorem", "mod_by_monic_hom_mk", ["adjoin_root"]], ["mod", "def", "power_basis'", ["adjoin_root"]], ["mod", "def", "power_basis_aux'", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "theorem", "ker_mod_by_monic_hom", ["polynomial"]], ["mod", "theorem", "mem_ker_mod_by_monic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1648467535, "sha": "c0421e76", "message": "feat({ring_theory,group_theory}/localization): add some small lemmas for localisation API (#12861)\nAdd the following:\n* `sub_mk`: a/b - c/d = (ad - bc)/(bd)\n* `mk_pow`: (a/b)^n = a^n/b^n\n* `mk_int_cast`, `mk_nat_cast`: m = m/1 for integer/natural number m.", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "mk_pow", ["localization"]]]}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "theorem", "mk_algebra_map", ["localization"]], ["add", "theorem", "mk_int_cast", ["localization"]], ["add", "theorem", "mk_nat_cast", ["localization"]], ["add", "theorem", "sub_mk", ["localization"]]]}]}, {"timestamp": 1648467534, "sha": "1ebb2060", "message": "feat(ring_theory/localization): lemmas about `Frac(R)`-spans (#12425)\nA couple of lemmas relating spans in the localization of `R` to spans in `R` itself.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "map_mem_span_algebra_map_image", ["submodule"]], ["add", "theorem", "span_algebra_map_image", ["submodule"]], ["add", "theorem", "span_algebra_map_image_of_tower", ["submodule"]]]}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": [["add", "theorem", "ideal_span_singleton_map_subset", ["is_fraction_ring"]]]}, {"oldPath": "src/ring_theory/localization/submodule.lean", "newPath": "src/ring_theory/localization/submodule.lean", "changes": [["add", "theorem", "mem_span_iff", ["is_localization"]], ["add", "theorem", "mem_span_map", ["is_localization"]]]}]}, {"timestamp": 1648461217, "sha": "e48f2e82", "message": "doc(data/polynomial/field_division): fix broken docstring links (#12981)", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}]}, {"timestamp": 1648461216, "sha": "d31410ab", "message": "doc({linear_algebra,matrix}/charpoly): add crosslinks (#12980)\nThis way someone coming from `undergrad.yaml` has an easy way to jump between the two statements.", "changes": [{"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/basic.lean", "newPath": "src/linear_algebra/matrix/charpoly/basic.lean", "changes": []}]}, {"timestamp": 1648461215, "sha": "597cbf10", "message": "feat(topology/continuous_on): add `set.maps_to.closure_of_continuous_on` (#12975)", "changes": [{"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "closure_of_continuous_on", ["set", "maps_to"]], ["add", "theorem", "closure_of_continuous_within_at", ["set", "maps_to"]]]}]}, {"timestamp": 1648461214, "sha": "ff72aa22", "message": "feat(data/list/big_operators): add multiplicative versions (#12966)\n* add `list.length_pos_of_one_lt_prod`, generate\n `list.length_pos_of_sum_pos` using `to_additive`;\n* add `list.length_pos_of_prod_lt_one` and its additive version.", "changes": [{"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "length_pos_of_one_lt_prod", ["list"]], ["add", "theorem", "length_pos_of_prod_lt_one", ["list"]], ["del", "theorem", "length_pos_of_sum_pos", ["list"]]]}]}, {"timestamp": 1648461213, "sha": "443c239d", "message": "feat(data/polynomial/ring_division): `mem_root_set_iff` (#12963)", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "mem_root_set_iff'", ["polynomial"]], ["add", "theorem", "mem_root_set_iff", ["polynomial"]]]}]}, {"timestamp": 1648461211, "sha": "162d83fc", "message": "chore(data/matrix/basic): square matrices over a non-unital ring form a non-unital ring (#12913)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "conj_transpose_neg", ["matrix"]]]}]}, {"timestamp": 1648461210, "sha": "c030dd2a", "message": "feat(set_theory/cardinal): `cardinal.to_nat` is order-preserving on finite cardinals (#12763)\nThis PR proves that `cardinal.to_nat` is order-preserving on finite cardinals.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "to_nat_le_iff_le_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_le_of_le_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_lt_iff_lt_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_lt_of_lt_of_lt_omega", ["cardinal"]]]}]}, {"timestamp": 1648461209, "sha": "2873b7ac", "message": "feat(set_theory/cofinality): Lemmas relating `cof` to `lsub` and `blsub` (#12316)", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "cof_blsub_le", ["ordinal"]], ["add", "theorem", "cof_lsub_le", ["ordinal"]], ["add", "theorem", "exists_blsub_cof", ["ordinal"]], ["add", "theorem", "exists_lsub_cof", ["ordinal"]], ["add", "theorem", "le_cof_iff_blsub", ["ordinal"]], ["add", "theorem", "le_cof_iff_lsub", ["ordinal"]], ["add", "theorem", "ord_cof_le", ["ordinal"]]]}]}, {"timestamp": 1648461208, "sha": "b7d6b3aa", "message": "feat(topology/continuous/algebra) : giving `C(α, M)` a `has_continuous_mul` and a `has_continuous_smul` structure (#11261)\nHere, `α` is a locally compact space.", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1648454599, "sha": "77110125", "message": "feat(order/hom/*): equivalences mapping morphisms to their dual (#12888)\nAdd missing `whatever_hom.dual` equivalences.", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "dual_comp", ["order_hom"]], ["add", "theorem", "dual_id", ["order_hom"]], ["add", "theorem", "symm_dual_comp", ["order_hom"]], ["add", "theorem", "symm_dual_id", ["order_hom"]]]}, {"oldPath": "src/order/hom/bounded.lean", "newPath": "src/order/hom/bounded.lean", "changes": [["add", "theorem", "dual_comp", ["bot_hom"]], ["add", "theorem", "dual_id", ["bot_hom"]], ["add", "theorem", "symm_dual_comp", ["bot_hom"]], ["add", "theorem", "symm_dual_id", ["bot_hom"]], ["add", "theorem", "dual_comp", ["bounded_order_hom"]], ["add", "theorem", "dual_id", ["bounded_order_hom"]], ["add", "theorem", "symm_dual_comp", ["bounded_order_hom"]], ["add", "theorem", "symm_dual_id", ["bounded_order_hom"]], ["add", "theorem", "dual_comp", ["top_hom"]], ["add", "theorem", "dual_id", ["top_hom"]], ["add", "theorem", "symm_dual_comp", ["top_hom"]], ["add", "theorem", "symm_dual_id", ["top_hom"]]]}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": [["add", "theorem", "dual_comp", ["Inf_hom"]], ["add", "theorem", "dual_id", ["Inf_hom"]], ["add", "theorem", "symm_dual_comp", ["Inf_hom"]], ["add", "theorem", "symm_dual_id", ["Inf_hom"]], ["add", "theorem", "dual_comp", ["Sup_hom"]], ["add", "theorem", "dual_id", ["Sup_hom"]], ["add", "theorem", "symm_dual_comp", ["Sup_hom"]], ["add", "theorem", "symm_dual_id", ["Sup_hom"]], ["add", "theorem", "dual_comp", ["complete_lattice_hom"]], ["add", "theorem", "dual_id", ["complete_lattice_hom"]], ["add", "theorem", "symm_dual_comp", ["complete_lattice_hom"]], ["add", "theorem", "symm_dual_id", ["complete_lattice_hom"]]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["add", "theorem", "dual_comp", ["bounded_lattice_hom"]], ["add", "theorem", "dual_id", ["bounded_lattice_hom"]], ["add", "theorem", "symm_dual_comp", ["bounded_lattice_hom"]], ["add", "theorem", "symm_dual_id", ["bounded_lattice_hom"]], ["add", "theorem", "dual_comp", ["inf_hom"]], ["add", "theorem", "dual_id", ["inf_hom"]], ["add", "theorem", "symm_dual_comp", ["inf_hom"]], ["add", "theorem", "symm_dual_id", ["inf_hom"]], ["add", "theorem", "dual_comp", ["inf_top_hom"]], ["add", "theorem", "dual_id", ["inf_top_hom"]], ["add", "theorem", "symm_dual_comp", ["inf_top_hom"]], ["add", "theorem", "symm_dual_id", ["inf_top_hom"]], ["add", "theorem", "dual_comp", ["lattice_hom"]], ["add", "theorem", "dual_id", ["lattice_hom"]], ["add", "theorem", "symm_dual_comp", ["lattice_hom"]], ["add", "theorem", "symm_dual_id", ["lattice_hom"]], ["add", "def", "dual", ["sup_bot_hom"]], ["add", "theorem", "dual_comp", ["sup_bot_hom"]], ["add", "theorem", "dual_id", ["sup_bot_hom"]], ["add", "theorem", "symm_dual_comp", ["sup_bot_hom"]], ["add", "theorem", "symm_dual_id", ["sup_bot_hom"]], ["add", "theorem", "dual_comp", ["sup_hom"]], ["add", "theorem", "dual_id", ["sup_hom"]], ["add", "theorem", "symm_dual_comp", ["sup_hom"]], ["add", "theorem", "symm_dual_id", ["sup_hom"]]]}]}, {"timestamp": 1648447999, "sha": "587af996", "message": "chore(test/matrix): clean up an unused argument (#12986)\nthese aren't caught by linters as examples don't generate declarations", "changes": [{"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1648447997, "sha": "562bbf52", "message": "feat(measure_theory/measure): add some simp lemmas, golf (#12974)\n* add `top_add`, `add_top`, `sub_top`, `zero_sub`, `sub_self`;\n* golf the proof of `restrict_sub_eq_restrict_sub_restrict`.", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "add_top", ["measure_theory", "measure"]], ["add", "theorem", "top_add", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/sub.lean", "newPath": "src/measure_theory/measure/sub.lean", "changes": [["add", "theorem", "sub_le_of_le_add", ["measure_theory", "measure"]], ["add", "theorem", "sub_self", ["measure_theory", "measure"]], ["add", "theorem", "sub_top", ["measure_theory", "measure"]], ["add", "theorem", "zero_sub", ["measure_theory", "measure"]]]}]}, {"timestamp": 1648447996, "sha": "4b05a42d", "message": "feat(data/list/pairwise): `pairwise_of_forall_mem_list` (#12968)\nA relation holds pairwise on a list when it does on any two of its elements.", "changes": [{"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "pairwise_of_forall_mem_list", ["list"]]]}]}, {"timestamp": 1648447995, "sha": "73a9c27f", "message": "chore(analysis/analytic/basic): golf (#12965)\nGolf a 1-line proof, drop an unneeded assumption.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["mod", "theorem", "sum", ["has_fpower_series_on_ball"]]]}]}, {"timestamp": 1648447994, "sha": "33afea82", "message": "feat(analysis/normed_space): generalize some lemmas (#12959)\n* add `metric.closed_ball_zero'`, a version of `metric.closed_ball_zero` for a pseudo metric space;\n* merge `metric.closed_ball_inf_dist_compl_subset_closure'` with `metric.closed_ball_inf_dist_compl_subset_closure`, drop an unneeded assumption `s ≠ univ`;\n* assume `r ≠ 0` instead of `0 < r` in `closure_ball`, `frontier_ball`, and `euclidean.closure_ball`.", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": [["mod", "theorem", "closure_ball", ["euclidean"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "closure_ball", []], ["mod", "theorem", "frontier_ball", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": [["del", "theorem", "closed_ball_inf_dist_compl_subset_closure'", ["metric"]], ["mod", "theorem", "closed_ball_inf_dist_compl_subset_closure", ["metric"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "closed_ball_zero'", ["metric"]], ["mod", "theorem", "mem_of_closed'", ["metric"]]]}]}, {"timestamp": 1648447992, "sha": "c65d8079", "message": "feat(data/polynomial/erase_lead + data/polynomial/reverse): rename an old lemma, add a stronger one (#12909)\nTaking advantage of nat-subtraction in edge cases, a lemma that previously proved `x ≤ y` actually holds with `x ≤ y - 1`.\nThus, I renamed the old lemma to `original_name_aux` and `original_name` is now the name of the new lemma. Since this lemma was used in a different file, I used the `_aux` name in the other file.\nNote that the `_aux` lemma is currently an ingredient in the proof of the stronger lemma. It may be possible to have a simple direct proof of the stronger one that avoids using the `_aux` lemma, but I have not given this any thought.", "changes": [{"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["mod", "theorem", "erase_lead_nat_degree_le", ["polynomial"]], ["add", "theorem", "erase_lead_nat_degree_le_aux", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}]}, {"timestamp": 1648447991, "sha": "7a1e0f20", "message": "feat(analysis/inner_product_space): an inner product space is strictly convex (#12790)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}]}, {"timestamp": 1648443876, "sha": "1e72d86f", "message": "chore(data/polynomial/degree/lemmas + data/polynomial/ring_division): move lemmas, reduce assumptions, golf (#12858)\nThis PR takes advantage of the reduced assumptions that are a consequence of #12854. Again, I moved two lemmas from their current location to a different file, where the typeclass assumptions make more sense,", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "leading_coeff_comp", ["polynomial"]], ["add", "theorem", "nat_degree_comp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["del", "theorem", "leading_coeff_comp", ["polynomial"]], ["del", "theorem", "nat_degree_comp", ["polynomial"]]]}]}, {"timestamp": 1648410985, "sha": "e5cd2ea1", "message": "feat(analysis/von_neumann): concrete and abstract definitions of a von Neumann algebra (#12329)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["add", "theorem", "algebra_map_mem_centralizer", ["set"]], ["add", "def", "centralizer", ["subalgebra"]], ["add", "theorem", "centralizer_le", ["subalgebra"]], ["add", "theorem", "centralizer_univ", ["subalgebra"]], ["add", "theorem", "coe_centralizer", ["subalgebra"]], ["add", "theorem", "mem_centralizer_iff", ["subalgebra"]]]}, {"oldPath": null, "newPath": "src/algebra/star/subalgebra.lean", "changes": [["add", "def", "centralizer", ["star_subalgebra"]], ["add", "theorem", "centralizer_le", ["star_subalgebra"]], ["add", "theorem", "coe_centralizer", ["star_subalgebra"]], ["add", "theorem", "mem_centralizer_iff", ["star_subalgebra"]], ["add", "structure", "star_subalgebra", []]]}, {"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/von_neumann_algebra/basic.lean", "changes": [["add", "structure", "von_neumann_algebra", []]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/centralizer.lean", "newPath": "src/group_theory/submonoid/centralizer.lean", "changes": [["add", "theorem", "centralizer_le", ["submonoid"]], ["del", "theorem", "centralizer_subset", ["submonoid"]], ["mod", "theorem", "coe_centralizer", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "def", "centralizer", ["subsemiring"]], ["add", "theorem", "centralizer_le", ["subsemiring"]], ["add", "theorem", "centralizer_to_submonoid", ["subsemiring"]], ["add", "theorem", "centralizer_univ", ["subsemiring"]], ["add", "theorem", "coe_centralizer", ["subsemiring"]], ["add", "theorem", "mem_centralizer_iff", ["subsemiring"]]]}]}, {"timestamp": 1648396335, "sha": "1494a9b2", "message": "feat(data/zmod/basic): add `int_coe_eq_int_coe_iff_dvd_sub` (#12944)\nThis adds the following API lemma.\n```\nlemma int_coe_eq_int_coe_iff_dvd_sub (a b : ℤ) (c : ℕ) : (a : zmod c) = ↑b ↔ ↑c ∣ b-a\n```\nextending the already present version with b = 0. [(Zulip discussion)](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Missing.20zmod.20lemma.3F)", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "int_coe_eq_int_coe_iff_dvd_sub", ["zmod"]]]}]}, {"timestamp": 1648375555, "sha": "d620ad3c", "message": "feat(measure_theory/measure/measure_space): remove measurable_set assumption in ae_measurable.subtype_mk (#12978)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "exists_ae_eq_range_subset", ["ae_measurable"]], ["mod", "theorem", "subtype_mk", ["ae_measurable"]]]}]}, {"timestamp": 1648354163, "sha": "2c6df07f", "message": "chore(model_theory/*): Split up big model theory files (#12918)\nSplits up `model_theory/basic` into `model_theory/basic`, `model_theory/language_maps`, and `model_theory/bundled`.\nSplits up `model_theory/terms_and_formulas` into `model_theory/syntax`, `model_theory/semantics`, and `model_theory/satisfiability`.\nAdds to the module docs of these files.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["del", "def", "add_empty_constants", ["first_order", "language", "Lequiv"]], ["del", "structure", "Lequiv", ["first_order", "language"]], ["del", "def", "add_constants", ["first_order", "language", "Lhom"]], ["del", "def", "comp", ["first_order", "language", "Lhom"]], ["del", "theorem", "comp_assoc", ["first_order", "language", "Lhom"]], ["del", "theorem", "comp_id", ["first_order", "language", "Lhom"]], ["del", "theorem", "comp_sum_elim", ["first_order", "language", "Lhom"]], ["del", "def", "constants_on_map", ["first_order", "language", "Lhom"]], ["del", "theorem", "id_comp", ["first_order", "language", "Lhom"]], ["del", "theorem", "map_constants_comp_sum_inl", ["first_order", "language", "Lhom"]], ["del", "theorem", "sum_elim_comp_inl", ["first_order", "language", "Lhom"]], ["del", "theorem", "sum_elim_comp_inr", ["first_order", "language", "Lhom"]], ["del", "theorem", "sum_elim_inl_inr", ["first_order", "language", "Lhom"]], ["del", "def", "sum_map", ["first_order", "language", "Lhom"]], ["del", "theorem", "sum_map_comp_inl", ["first_order", "language", "Lhom"]], ["del", "theorem", "sum_map_comp_inr", ["first_order", "language", "Lhom"]], ["del", "structure", "Lhom", ["first_order", "language"]], ["del", "def", "Lhom_with_constants", ["first_order", "language"]], ["del", "def", "Lhom_with_constants_map", ["first_order", "language"]], ["del", "theorem", "coe_con", ["first_order", "language"]], ["del", "def", "Structure", ["first_order", "language", "constants_on"]], ["del", "def", "constants_on", ["first_order", "language"]], ["del", "theorem", "constants_on_constants", ["first_order", "language"]], ["del", "def", "constants_on_functions", ["first_order", "language"]], ["del", "theorem", "constants_on_map_is_expansion_on", ["first_order", "language"]], ["del", "def", "with_constants", ["first_order", "language"]]]}, {"oldPath": null, "newPath": "src/model_theory/bundled.lean", "changes": []}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}, {"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": []}, {"oldPath": null, "newPath": "src/model_theory/language_map.lean", "changes": [["add", "def", "add_empty_constants", ["first_order", "language", "Lequiv"]], ["add", "structure", "Lequiv", ["first_order", "language"]], ["add", "def", "add_constants", ["first_order", "language", "Lhom"]], ["add", "def", "comp", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_assoc", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_id", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_sum_elim", ["first_order", "language", "Lhom"]], ["add", "def", "constants_on_map", ["first_order", "language", "Lhom"]], ["add", "theorem", "id_comp", ["first_order", "language", "Lhom"]], ["add", "theorem", "map_constants_comp_sum_inl", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_elim_comp_inl", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_elim_comp_inr", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_elim_inl_inr", ["first_order", "language", "Lhom"]], ["add", "def", "sum_map", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_map_comp_inl", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_map_comp_inr", ["first_order", "language", "Lhom"]], ["add", "structure", "Lhom", ["first_order", "language"]], ["add", "def", "Lhom_with_constants", ["first_order", "language"]], ["add", "def", "Lhom_with_constants_map", ["first_order", "language"]], ["add", "theorem", "coe_con", ["first_order", "language"]], ["add", "def", "Structure", ["first_order", "language", "constants_on"]], ["add", "def", "constants_on", ["first_order", "language"]], ["add", "theorem", "constants_on_constants", ["first_order", "language"]], ["add", "def", "constants_on_functions", ["first_order", "language"]], ["add", "theorem", "constants_on_map_is_expansion_on", ["first_order", "language"]], ["add", "def", "with_constants", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/quotients.lean", "newPath": "src/model_theory/quotients.lean", "changes": []}, {"oldPath": null, "newPath": "src/model_theory/satisfiability.lean", "changes": [["add", "def", "is_finitely_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "is_finitely_satisfiable", ["first_order", "language", "Theory", "is_satisfiable"]], ["add", "theorem", "mono", ["first_order", "language", "Theory", "is_satisfiable"]], ["add", "def", "some_model", ["first_order", "language", "Theory", "is_satisfiable"]], ["add", "def", "is_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable_iff_is_finitely_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable", ["first_order", "language", "Theory", "model"]], ["add", "def", "models_bounded_formula", ["first_order", "language", "Theory"]], ["add", "theorem", "models_formula_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "models_sentence_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "realize_bd_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "realize_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "refl", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "some_model_realize_bd_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "some_model_realize_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "symm", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "trans", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "def", "semantically_equivalent", ["first_order", "language", "Theory"]], ["add", "def", "semantically_equivalent_setoid", ["first_order", "language", "Theory"]], ["add", "theorem", "all_semantically_equivalent_not_ex_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "ex_semantically_equivalent_not_all_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "induction_on_all_ex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "induction_on_exists_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "induction_on_inf_not", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "induction_on_sup_not", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "semantically_equivalent_all_lift_at", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "semantically_equivalent_to_prenex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "formula"]], ["add", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "formula"]], ["add", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "formula"]], ["add", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "formula"]]]}, {"oldPath": null, "newPath": "src/model_theory/semantics.lean", "changes": [["add", "theorem", "on_Theory_model", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_sentence", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_term", ["first_order", "language", "Lhom"]], ["add", "theorem", "set_of_realize_on_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "mono", ["first_order", "language", "Theory", "model"]], ["add", "theorem", "realize_sentence_of_mem", ["first_order", "language", "Theory"]], ["add", "def", "realize", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_all", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_all_lift_at_one_self", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_alls", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_bd_equal", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_bot", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_cast_le_of_eq", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_ex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_exs", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_iff", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_inf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_lift_at", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_lift_at_one", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_lift_at_one_self", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_rel", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_relabel", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_sup", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_to_prenex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_top", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_term", ["first_order", "language", "embedding"]], ["add", "theorem", "realize_bounded_formula", ["first_order", "language", "equiv"]], ["add", "theorem", "realize_formula", ["first_order", "language", "equiv"]], ["add", "theorem", "realize_term", ["first_order", "language", "equiv"]], ["add", "def", "realize", ["first_order", "language", "formula"]], ["add", "theorem", "realize_bot", ["first_order", "language", "formula"]], ["add", "theorem", "realize_equal", ["first_order", "language", "formula"]], ["add", "theorem", "realize_graph", ["first_order", "language", "formula"]], ["add", "theorem", "realize_iff", ["first_order", "language", "formula"]], ["add", "theorem", "realize_imp", ["first_order", "language", "formula"]], ["add", "theorem", "realize_inf", ["first_order", "language", "formula"]], ["add", "theorem", "realize_not", ["first_order", "language", "formula"]], ["add", "theorem", "realize_rel", ["first_order", "language", "formula"]], ["add", "theorem", "realize_relabel", ["first_order", "language", "formula"]], ["add", "theorem", "realize_sup", ["first_order", "language", "formula"]], ["add", "theorem", "realize_top", ["first_order", "language", "formula"]], ["add", "theorem", "realize_term", ["first_order", "language", "hom"]], ["add", "def", "realize", ["first_order", "language", "sentence"]], ["add", "def", "realize", ["first_order", "language", "term"]], ["add", "theorem", "realize_con", ["first_order", "language", "term"]], ["add", "theorem", "realize_constants", ["first_order", "language", "term"]], ["add", "theorem", "realize_lift_at", ["first_order", "language", "term"]], ["add", "theorem", "realize_relabel", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": []}, {"oldPath": null, "newPath": "src/model_theory/syntax.lean", "changes": [["add", "def", "on_bounded_formula", ["first_order", "language", "Lequiv"]], ["add", "theorem", "on_bounded_formula_symm", ["first_order", "language", "Lequiv"]], ["add", "def", "on_formula", ["first_order", "language", "Lequiv"]], ["add", "theorem", "on_formula_apply", ["first_order", "language", "Lequiv"]], ["add", "theorem", "on_formula_symm", ["first_order", "language", "Lequiv"]], ["add", "def", "on_sentence", ["first_order", "language", "Lequiv"]], ["add", "def", "on_term", ["first_order", "language", "Lequiv"]], ["add", "theorem", "comp_on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_on_term", ["first_order", "language", "Lhom"]], ["add", "theorem", "id_on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "id_on_term", ["first_order", "language", "Lhom"]], ["add", "theorem", "mem_on_Theory", ["first_order", "language", "Lhom"]], ["add", "def", "on_Theory", ["first_order", "language", "Lhom"]], ["add", "def", "on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "def", "on_formula", ["first_order", "language", "Lhom"]], ["add", "def", "on_sentence", ["first_order", "language", "Lhom"]], ["add", "def", "on_term", ["first_order", "language", "Lhom"]], ["add", "def", "Theory", ["first_order", "language"]], ["add", "def", "alls", ["first_order", "language", "bounded_formula"]], ["add", "def", "cast_le", ["first_order", "language", "bounded_formula"]], ["add", "def", "exs", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "is_prenex", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "is_qf", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "inductive", "is_atomic", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "theorem", "induction_on_all_not", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "inductive", "is_prenex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "is_prenex_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "is_prenex_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "is_prenex", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "not", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "to_prenex_imp", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "to_prenex_imp_right", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "inductive", "is_qf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "is_qf_bot", ["first_order", "language", "bounded_formula"]], ["add", "def", "lift_at", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "not_all_is_atomic", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "not_all_is_qf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "not_ex_is_atomic", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "not_ex_is_qf", ["first_order", "language", "bounded_formula"]], ["add", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["add", "def", "relabel_aux", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "sum_elim_comp_relabel_aux", ["first_order", "language", "bounded_formula"]], ["add", "def", "to_prenex", ["first_order", "language", "bounded_formula"]], ["add", "def", "to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["add", "def", "to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "to_prenex_is_prenex", ["first_order", "language", "bounded_formula"]], ["add", "inductive", "bounded_formula", ["first_order", "language"]], ["add", "def", "term", ["first_order", "language", "constants"]], ["add", "def", "graph", ["first_order", "language", "formula"]], ["add", "theorem", "is_atomic_graph", ["first_order", "language", "formula"]], ["add", "def", "relabel", ["first_order", "language", "formula"]], ["add", "def", "formula", ["first_order", "language"]], ["add", "def", "bounded_formula", ["first_order", "language", "relations"]], ["add", "def", "formula", ["first_order", "language", "relations"]], ["add", "def", "sentence", ["first_order", "language"]], ["add", "def", "bd_equal", ["first_order", "language", "term"]], ["add", "theorem", "card_le", ["first_order", "language", "term"]], ["add", "theorem", "card_le_omega", ["first_order", "language", "term"]], ["add", "def", "equal", ["first_order", "language", "term"]], ["add", "def", "lift_at", ["first_order", "language", "term"]], ["add", "def", "list_decode", ["first_order", "language", "term"]], ["add", "theorem", "list_decode_encode_list", ["first_order", "language", "term"]], ["add", "def", "list_encode", ["first_order", "language", "term"]], ["add", "theorem", "list_encode_injective", ["first_order", "language", "term"]], ["add", "def", "relabel", ["first_order", "language", "term"]], ["add", "inductive", "term", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": null, "changes": [["del", "def", "on_bounded_formula", ["first_order", "language", "Lequiv"]], ["del", "theorem", "on_bounded_formula_symm", ["first_order", "language", "Lequiv"]], ["del", "def", "on_formula", ["first_order", "language", "Lequiv"]], ["del", "theorem", "on_formula_apply", ["first_order", "language", "Lequiv"]], ["del", "theorem", "on_formula_symm", ["first_order", "language", "Lequiv"]], ["del", "def", "on_sentence", ["first_order", "language", "Lequiv"]], ["del", "def", "on_term", ["first_order", "language", "Lequiv"]], ["del", "theorem", "comp_on_bounded_formula", ["first_order", "language", "Lhom"]], ["del", "theorem", "comp_on_term", ["first_order", "language", "Lhom"]], ["del", "theorem", "id_on_bounded_formula", ["first_order", "language", "Lhom"]], ["del", "theorem", "id_on_term", ["first_order", "language", "Lhom"]], ["del", "theorem", "mem_on_Theory", ["first_order", "language", "Lhom"]], ["del", "def", "on_Theory", ["first_order", "language", "Lhom"]], ["del", "theorem", "on_Theory_model", ["first_order", "language", "Lhom"]], ["del", "def", "on_bounded_formula", ["first_order", "language", "Lhom"]], ["del", "def", "on_formula", ["first_order", "language", "Lhom"]], ["del", "def", "on_sentence", ["first_order", "language", "Lhom"]], ["del", "def", "on_term", ["first_order", "language", "Lhom"]], ["del", "theorem", "realize_on_bounded_formula", ["first_order", "language", "Lhom"]], ["del", "theorem", "realize_on_formula", ["first_order", "language", "Lhom"]], ["del", "theorem", "realize_on_sentence", ["first_order", "language", "Lhom"]], ["del", "theorem", "realize_on_term", ["first_order", "language", "Lhom"]], ["del", "theorem", "set_of_realize_on_formula", ["first_order", "language", "Lhom"]], ["del", "def", "is_finitely_satisfiable", ["first_order", "language", "Theory"]], ["del", "theorem", "is_finitely_satisfiable", ["first_order", "language", "Theory", "is_satisfiable"]], ["del", "theorem", "mono", ["first_order", "language", "Theory", "is_satisfiable"]], ["del", "def", "some_model", ["first_order", "language", "Theory", "is_satisfiable"]], ["del", "def", "is_satisfiable", ["first_order", "language", "Theory"]], ["del", "theorem", "is_satisfiable", ["first_order", "language", "Theory", "model"]], ["del", "theorem", "mono", ["first_order", "language", "Theory", "model"]], ["del", "def", "models_bounded_formula", ["first_order", "language", "Theory"]], ["del", "theorem", "models_formula_iff", ["first_order", "language", "Theory"]], ["del", "theorem", "models_sentence_iff", ["first_order", "language", "Theory"]], ["del", "theorem", "realize_sentence_of_mem", ["first_order", "language", "Theory"]], ["del", "theorem", "realize_bd_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "realize_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "refl", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "some_model_realize_bd_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "some_model_realize_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "symm", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "trans", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "def", "semantically_equivalent", ["first_order", "language", "Theory"]], ["del", "def", "semantically_equivalent_setoid", ["first_order", "language", "Theory"]], ["del", "def", "Theory", ["first_order", "language"]], ["del", "theorem", "all_semantically_equivalent_not_ex_not", ["first_order", "language", "bounded_formula"]], ["del", "def", "alls", ["first_order", "language", "bounded_formula"]], ["del", "def", "cast_le", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "ex_semantically_equivalent_not_all_not", ["first_order", "language", "bounded_formula"]], ["del", "def", "exs", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "induction_on_all_ex", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "induction_on_exists_not", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_atomic"]], ["del", "theorem", "is_prenex", ["first_order", "language", "bounded_formula", "is_atomic"]], ["del", "theorem", "is_qf", ["first_order", "language", "bounded_formula", "is_atomic"]], ["del", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_atomic"]], ["del", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_atomic"]], ["del", "inductive", "is_atomic", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_prenex"]], ["del", "theorem", "induction_on_all_not", ["first_order", "language", "bounded_formula", "is_prenex"]], ["del", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_prenex"]], ["del", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_prenex"]], ["del", "inductive", "is_prenex", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "is_prenex_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "is_prenex_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "induction_on_inf_not", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "induction_on_sup_not", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "is_prenex", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "not", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "to_prenex_imp", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "theorem", "to_prenex_imp_right", ["first_order", "language", "bounded_formula", "is_qf"]], ["del", "inductive", "is_qf", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "is_qf_bot", ["first_order", "language", "bounded_formula"]], ["del", "def", "lift_at", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "not_all_is_atomic", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "not_all_is_qf", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "not_ex_is_atomic", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "not_ex_is_qf", ["first_order", "language", "bounded_formula"]], ["del", "def", "realize", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_all", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_all_lift_at_one_self", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_alls", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_bd_equal", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_bot", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_cast_le_of_eq", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_ex", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_exs", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_iff", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_imp", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_inf", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_lift_at", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_lift_at_one", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_lift_at_one_self", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_not", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_rel", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_relabel", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_sup", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_to_prenex", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "realize_top", ["first_order", "language", "bounded_formula"]], ["del", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["del", "def", "relabel_aux", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "semantically_equivalent_all_lift_at", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "semantically_equivalent_to_prenex", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "sum_elim_comp_relabel_aux", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "bounded_formula"]], ["del", "def", "to_prenex", ["first_order", "language", "bounded_formula"]], ["del", "def", "to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["del", "def", "to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "to_prenex_is_prenex", ["first_order", "language", "bounded_formula"]], ["del", "inductive", "bounded_formula", ["first_order", "language"]], ["del", "def", "term", ["first_order", "language", "constants"]], ["del", "theorem", "realize_term", ["first_order", "language", "embedding"]], ["del", "theorem", "realize_bounded_formula", ["first_order", "language", "equiv"]], ["del", "theorem", "realize_formula", ["first_order", "language", "equiv"]], ["del", "theorem", "realize_term", ["first_order", "language", "equiv"]], ["del", "def", "graph", ["first_order", "language", "formula"]], ["del", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "formula"]], ["del", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "formula"]], ["del", "theorem", "is_atomic_graph", ["first_order", "language", "formula"]], ["del", "def", "realize", ["first_order", "language", "formula"]], ["del", "theorem", "realize_bot", ["first_order", "language", "formula"]], ["del", "theorem", "realize_equal", ["first_order", "language", "formula"]], ["del", "theorem", "realize_graph", ["first_order", "language", "formula"]], ["del", "theorem", "realize_iff", ["first_order", "language", "formula"]], ["del", "theorem", "realize_imp", ["first_order", "language", "formula"]], ["del", "theorem", "realize_inf", ["first_order", "language", "formula"]], ["del", "theorem", "realize_not", ["first_order", "language", "formula"]], ["del", "theorem", "realize_rel", ["first_order", "language", "formula"]], ["del", "theorem", "realize_relabel", ["first_order", "language", "formula"]], ["del", "theorem", "realize_sup", ["first_order", "language", "formula"]], ["del", "theorem", "realize_top", ["first_order", "language", "formula"]], ["del", "def", "relabel", ["first_order", "language", "formula"]], ["del", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "formula"]], ["del", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "formula"]], ["del", "def", "formula", ["first_order", "language"]], ["del", "theorem", "realize_term", ["first_order", "language", "hom"]], ["del", "def", "bounded_formula", ["first_order", "language", "relations"]], ["del", "def", "formula", ["first_order", "language", "relations"]], ["del", "def", "realize", ["first_order", "language", "sentence"]], ["del", "def", "sentence", ["first_order", "language"]], ["del", "def", "bd_equal", ["first_order", "language", "term"]], ["del", "theorem", "card_le", ["first_order", "language", "term"]], ["del", "theorem", "card_le_omega", ["first_order", "language", "term"]], ["del", "def", "equal", ["first_order", "language", "term"]], ["del", "def", "lift_at", ["first_order", "language", "term"]], ["del", "def", "list_decode", ["first_order", "language", "term"]], ["del", "theorem", "list_decode_encode_list", ["first_order", "language", "term"]], ["del", "def", "list_encode", ["first_order", "language", "term"]], ["del", "theorem", "list_encode_injective", ["first_order", "language", "term"]], ["del", "def", "realize", ["first_order", "language", "term"]], ["del", "theorem", "realize_con", ["first_order", "language", "term"]], ["del", "theorem", "realize_constants", ["first_order", "language", "term"]], ["del", "theorem", "realize_lift_at", ["first_order", "language", "term"]], ["del", "theorem", "realize_relabel", ["first_order", "language", "term"]], ["del", "def", "relabel", ["first_order", "language", "term"]], ["del", "inductive", "term", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/ultraproducts.lean", "newPath": "src/model_theory/ultraproducts.lean", "changes": [["del", "theorem", "is_satisfiable_iff_is_finitely_satisfiable", ["first_order", "language", "Theory"]]]}]}, {"timestamp": 1648352043, "sha": "57a5fd72", "message": "chore(scripts): update nolints.txt (#12971)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1648340854, "sha": "664247fc", "message": "chore(data/set/intervals/ord_connected): Golf proof (#12923)", "changes": [{"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}]}, {"timestamp": 1648340853, "sha": "05ef6940", "message": "refactor(topology/instances/ennreal): make `ennreal` an instance of `has_continuous_inv` (#12806)\nPrior to the type class `has_continuous_inv`, `ennreal` had to have it's own hand-rolled `ennreal.continuous_inv` statement. This replaces it with a `has_continuous_inv` instance.\n- [x] depends on: #12748", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1648338852, "sha": "caf6f192", "message": "refactor(category_theory/abelian): deduplicate definitions of (co)image (#12902)\nPreviously we made two separate definitions of the abelian (co)image, as `kernel (cokernel.π f)` / `cokernel (kernel.ι f)`,\nonce for `non_preadditive_abelian C` and once for `abelian C`.\nThis duplication wasn't really necessary, and this PR unifies them.", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["mod", "def", "coimage_iso_image'", ["category_theory", "abelian"]], ["mod", "def", "coimage_iso_image", ["category_theory", "abelian"]], ["add", "def", "coimage_strong_epi_mono_factorisation", ["category_theory", "abelian"]], ["del", "def", "coimage_strong_epi_mono_factorisation", ["category_theory", "abelian", "coimages"]], ["del", "theorem", "comp_coimage_π_eq_zero", ["category_theory", "abelian", "coimages"]], ["add", "theorem", "comp_coimage_π_eq_zero", ["category_theory", "abelian"]], ["mod", "theorem", "full_image_factorisation", ["category_theory", "abelian"]], ["mod", "def", "image_iso_image", ["category_theory", "abelian"]], ["add", "def", "image_strong_epi_mono_factorisation", ["category_theory", "abelian"]], ["add", "theorem", "image_ι_comp_eq_zero", ["category_theory", "abelian"]], ["del", "def", "image_strong_epi_mono_factorisation", ["category_theory", "abelian", "images"]], ["del", "theorem", "image_ι_comp_eq_zero", ["category_theory", "abelian", "images"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["mod", "def", "is_colimit_coimage", ["category_theory", "abelian"]], ["mod", "def", "is_colimit_image", ["category_theory", "abelian"]]]}, {"oldPath": null, "newPath": "src/category_theory/abelian/images.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}]}, {"timestamp": 1648336666, "sha": "f5a9d0a3", "message": "feat(ring_theory/polynomial/eisenstein): add cyclotomic_prime_pow_comp_X_add_one_is_eisenstein_at (#12707)\nWe add `cyclotomic_prime_pow_comp_X_add_one_is_eisenstein_at`.\nFrom flt-regular", "changes": [{"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["add", "theorem", "cyclotomic_prime_pow_comp_X_add_one_is_eisenstein_at", []], ["add", "theorem", "is_eisenstein_at_of_mem_of_not_mem", ["polynomial", "monic"]], ["add", "theorem", "leading_coeff_not_mem", ["polynomial", "monic"]]]}]}, {"timestamp": 1648329368, "sha": "7b938899", "message": "refactor(data/list/basic): Remove many redundant hypotheses (#12950)\nMany theorems about `last` required arguments proving that certain things were not equal to `nil`, when in fact this was always the case. These hypotheses have been removed and replaced with the corresponding proofs.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "last_append", ["list"]], ["mod", "theorem", "last_concat", ["list"]], ["mod", "theorem", "last_cons_cons", ["list"]], ["mod", "theorem", "last_singleton", ["list"]]]}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}]}, {"timestamp": 1648329367, "sha": "e63e3322", "message": "feat(algebra/ring/basic): all non-zero elements in a non-trivial ring with no non-zero zero divisors are regular (#12947)\nBesides what the PR description says, I also golfed two earlier proofs.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "is_regular_iff_ne_zero'", []]]}]}, {"timestamp": 1648329366, "sha": "b30f25ce", "message": "fix(data/set/prod): fix the way `×ˢ` associates (#12943)\nPreviously `s ×ˢ t ×ˢ u` was an element of `set ((α × β) × γ)` instead of `set (α × β × γ) = set (α × (β × γ))`.", "changes": [{"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": []}]}, {"timestamp": 1648329365, "sha": "cc8c90d4", "message": "chore(data/equiv): split and move to `logic/equiv` (#12929)\nZulip discussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Rearranging.20files.20in.20.60data.2F.60\nThis PR rearranges files in `data/equiv/` by 1) moving bundled isomorphisms to a relevant subfolder of `algebra/`; 2) moving `denumerable` and `encodable` to `logic/`; 3) moving the remainder of `data/equiv/` to `logic/equiv/`. The commits of this PR correspond to those steps.\nIn particular, the following files were moved:\n * `data/equiv/module.lean` → `algebra/module/equiv.lean`\n * `data/equiv/mul_add.lean` → `algebra/hom/equiv.lean`\n * `data/equiv/mul_add_aut.lean` → `algebra/hom/aut.lean`\n * `data/equiv/ring.lean` → `algebra/ring/equiv.lean`\n * `data/equiv/ring_aut.lean` → `algebra/ring/aut.lean`\n * `data/equiv/denumerable.lean` → `logic/denumerable.lean`\n * `data/equiv/encodable/*.lean` → `logic/encodable/basic.lean logic/encodable/lattice.lean logic/encodable/small.lean`\n * `data/equiv/*.lean` to: `logic/equiv/basic.lean logic/equiv/fin.lean logic/equiv/functor.lean logic/equiv/local_equiv.lean logic/equiv/option.lean logic/equiv/transfer_instance.lean logic/equiv/embedding.lean logic/equiv/fintype.lean logic/equiv/list.lean logic/equiv/nat.lean logic/equiv/set.lean`", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/algebra/hom/aut.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/algebra/hom/equiv.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/algebra/module/equiv.lean", "changes": []}, {"oldPath": "src/algebra/module/opposites.lean", "newPath": "src/algebra/module/opposites.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/order/hom/ring.lean", "newPath": "src/algebra/order/hom/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/data/equiv/ring_aut.lean", "newPath": "src/algebra/ring/aut.lean", "changes": []}, {"oldPath": "src/algebra/ring/comp_typeclasses.lean", "newPath": "src/algebra/ring/comp_typeclasses.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/algebra/ring/equiv.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/opposite.lean", "newPath": "src/category_theory/preadditive/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/basic.lean", "newPath": "src/combinatorics/derangements/basic.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/control/equiv_functor.lean", "newPath": "src/control/equiv_functor.lean", "changes": []}, {"oldPath": "src/control/monad/basic.lean", "newPath": "src/control/monad/basic.lean", "changes": []}, {"oldPath": "src/control/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": []}, {"oldPath": "src/control/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}, {"oldPath": "src/control/uliftable.lean", "newPath": "src/control/uliftable.lean", "changes": []}, {"oldPath": "src/data/W/basic.lean", "newPath": "src/data/W/basic.lean", "changes": []}, {"oldPath": "src/data/erased.lean", "newPath": "src/data/erased.lean", "changes": []}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/card_embedding.lean", "newPath": "src/data/fintype/card_embedding.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/ulift.lean", "newPath": "src/data/ulift.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}, {"oldPath": "src/group_theory/perm/option.lean", "newPath": "src/group_theory/perm/option.lean", "changes": []}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/logic/denumerable.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/logic/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/lattice.lean", "newPath": "src/logic/encodable/lattice.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/small.lean", "newPath": "src/logic/encodable/small.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/logic/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/embedding.lean", "newPath": "src/logic/equiv/embedding.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/logic/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/equiv/fintype.lean", "newPath": "src/logic/equiv/fintype.lean", "changes": []}, {"oldPath": "src/data/equiv/functor.lean", "newPath": "src/logic/equiv/functor.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/logic/equiv/list.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/logic/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/logic/equiv/nat.lean", "changes": []}, {"oldPath": "src/data/equiv/option.lean", "newPath": "src/logic/equiv/option.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/logic/equiv/set.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/logic/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": []}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/order/semiconj_Sup.lean", "newPath": "src/order/semiconj_Sup.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/integral.lean", "newPath": "src/ring_theory/localization/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_invo.lean", "newPath": "src/ring_theory/ring_invo.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/norm_swap.lean", "newPath": "src/tactic/norm_swap.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "test/norm_swap.lean", "newPath": "test/norm_swap.lean", "changes": []}, {"oldPath": "test/semilinear.lean", "newPath": "test/semilinear.lean", "changes": []}, {"oldPath": "test/simp_result.lean", "newPath": "test/simp_result.lean", "changes": []}]}, {"timestamp": 1648326171, "sha": "434a938b", "message": "feat(analysis/convex/strict_convex_space): Strictly convex spaces (#11794)\nDefine `strictly_convex_space`, a `Prop`-valued mixin to state that a normed space is strictly convex.", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["add", "theorem", "ae_eq_const_or_norm_integral_lt_of_norm_le_const", []], ["del", "theorem", "ae_eq_const_or_norm_integral_lt_of_norm_le_const", ["strict_convex"]]]}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/convex/strict_convex_space.lean", "changes": [["add", "theorem", "combo_mem_ball_of_ne", []], ["add", "theorem", "dist_add_dist_eq_iff", []], ["add", "theorem", "norm_add_lt_of_not_same_ray", []], ["add", "theorem", "norm_combo_lt_of_ne", []], ["add", "theorem", "open_segment_subset_ball_of_ne", []], ["add", "theorem", "same_ray_iff_norm_add", []], ["add", "theorem", "strict_convex_closed_ball", []], ["add", "theorem", "of_norm_add", ["strict_convex_space"]], ["add", "theorem", "of_strict_convex_closed_unit_ball", ["strict_convex_space"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "dist_add_dist_of_mem_segment", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "inv_norm_smul_mem_closed_unit_ball", []]]}]}, {"timestamp": 1648322393, "sha": "1f11f3f3", "message": "chore(order/filter/basic): rename using the zero subscript convention for groups with zero (#12952)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "div'", ["filter", "eventually_eq"]], ["mod", "theorem", "div", ["filter", "eventually_eq"]], ["del", "theorem", "sub", ["filter", "eventually_eq"]]]}]}, {"timestamp": 1648319075, "sha": "a491055c", "message": "chore(measure_theory/integral/lebesgue): extend to ae_measurable (#12953)", "changes": [{"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "lintegral_eq_top_of_measure_eq_top_pos", ["measure_theory"]], ["mod", "theorem", "lintegral_trim", ["measure_theory"]], ["mod", "theorem", "meas_ge_le_lintegral_div", ["measure_theory"]], ["add", "theorem", "mul_meas_ge_le_lintegral₀", ["measure_theory"]], ["add", "theorem", "apply_mk", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_apply'", ["measure_theory", "simple_func"]], ["add", "def", "of_is_empty", ["measure_theory", "simple_func"]], ["mod", "theorem", "univ_le_of_forall_fin_meas_le", ["measure_theory"]]]}]}, {"timestamp": 1648304119, "sha": "cb2797ee", "message": "feat(measure_theory/constructions/borel_space): drop a countability assumption (#12954)", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "ae_measurable_of_tendsto_metric_ae", []], ["add", "theorem", "measurable_of_tendsto_metrizable'", []], ["add", "theorem", "measurable_of_tendsto_metrizable", []]]}]}, {"timestamp": 1648297215, "sha": "b7d9166a", "message": "chore(measure_theory/measure/lebesgue): delete leftovers (#12951)", "changes": [{"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}]}, {"timestamp": 1648297214, "sha": "11114823", "message": "feat(topology/bases): separable subsets of topological spaces (#12936)", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "is_separable", ["set", "countable"]], ["add", "theorem", "is_separable", ["set", "finite"]], ["add", "theorem", "closure", ["topological_space", "is_separable"]], ["add", "theorem", "image", ["topological_space", "is_separable"]], ["add", "theorem", "mono", ["topological_space", "is_separable"]], ["add", "theorem", "union", ["topological_space", "is_separable"]], ["add", "def", "is_separable", ["topological_space"]], ["add", "theorem", "is_separable_Union", ["topological_space"]], ["add", "theorem", "is_separable_of_separable_space", ["topological_space"]], ["add", "theorem", "is_separable_of_separable_space_subtype", ["topological_space"]], ["add", "theorem", "is_separable_univ_iff", ["topological_space"]], ["add", "theorem", "separable_space_of_dense_range", ["topological_space"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "cod_restrict", ["embedding"]], ["add", "theorem", "cod_restrict", ["inducing"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "is_separable_image", ["continuous_on"]], ["add", "theorem", "is_separable", ["is_compact"]], ["add", "theorem", "dense_iff", ["metric"]], ["add", "theorem", "dense_range_iff", ["metric"]], ["mod", "theorem", "mem_closure_iff", ["metric"]], ["mod", "theorem", "mem_closure_range_iff", ["metric"]], ["mod", "theorem", "mem_closure_range_iff_nat", ["metric"]], ["mod", "theorem", "mem_of_closed'", ["metric"]], ["add", "theorem", "separable_space", ["topological_space", "is_separable"]]]}]}, {"timestamp": 1648297213, "sha": "f68536e0", "message": "feat(topology/constructions): continuity of uncurried functions when the first factor is discrete (#12935)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "map_pure_prod", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_uncurry_of_discrete_topology", []]]}]}, {"timestamp": 1648297212, "sha": "5e449c20", "message": "feat(algebra/is_prime_pow): add `is_prime_pow_iff_factorization_single` (#12167)\nAdds lemma `is_prime_pow_iff_factorization_single : is_prime_pow n ↔ ∃ p k : ℕ, 0 < k ∧ n.factorization = finsupp.single p k`\nAlso adds `pow_of_factorization_single` to `data/nat/factorization`", "changes": [{"oldPath": "src/algebra/is_prime_pow.lean", "newPath": "src/algebra/is_prime_pow.lean", "changes": [["add", "theorem", "is_prime_pow_iff_card_support_factorization_eq_one", []], ["add", "theorem", "is_prime_pow_iff_factorization_eq_single", []]]}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "eq_pow_of_factorization_eq_single", ["nat"]]]}]}, {"timestamp": 1648290631, "sha": "023a7838", "message": "feat(logic/nontrivial): `exists_pair_lt` (#12925)", "changes": [{"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": [["add", "theorem", "exists_pair_lt", []], ["add", "theorem", "nontrivial_iff_lt", []]]}]}, {"timestamp": 1648290630, "sha": "c51f4f10", "message": "feat(set_theory/cardinal_ordinal): `κ ^ n = κ` for infinite cardinals (#12922)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "pow_eq", ["cardinal"]], ["add", "theorem", "power_nat_eq", ["cardinal"]], ["mod", "theorem", "power_nat_le", ["cardinal"]]]}]}, {"timestamp": 1648287333, "sha": "9d26041f", "message": "feat(topology/instances/ennreal): add `ennreal.has_sum_to_real` (#12926)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "has_sum_to_real", ["ennreal"]]]}]}, {"timestamp": 1648265318, "sha": "b83bd25d", "message": "feat(linear_algebra/sesquilinear_form): add nondegenerate (#12683)\nDefines nondegenerate sesquilinear forms as left and right separating sesquilinear forms.", "changes": [{"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "theorem", "flip_nondegenerate", ["linear_map"]], ["add", "theorem", "flip_separating_left", ["linear_map"]], ["add", "theorem", "flip_separating_right", ["linear_map"]], ["add", "theorem", "nondegenerate_of_not_is_ortho_basis_self", ["linear_map", "is_Ortho"]], ["add", "theorem", "not_is_ortho_basis_self_of_separating_left", ["linear_map", "is_Ortho"]], ["add", "theorem", "not_is_ortho_basis_self_of_separating_right", ["linear_map", "is_Ortho"]], ["add", "theorem", "separating_left_of_not_is_ortho_basis_self", ["linear_map", "is_Ortho"]], ["add", "theorem", "separating_right_iff_not_is_ortho_basis_self", ["linear_map", "is_Ortho"]], ["add", "theorem", "nondegenerate_of_separating_left", ["linear_map", "is_symm"]], ["add", "theorem", "nondegenerate_of_separating_right", ["linear_map", "is_symm"]], ["add", "def", "nondegenerate", ["linear_map"]], ["add", "theorem", "nondegenerate_restrict_of_disjoint_orthogonal", ["linear_map"]], ["add", "def", "separating_left", ["linear_map"]], ["add", "theorem", "separating_left_iff_ker_eq_bot", ["linear_map"]], ["add", "theorem", "separating_left_iff_linear_nontrivial", ["linear_map"]], ["add", "def", "separating_right", ["linear_map"]], ["add", "theorem", "separating_right_iff_flip_ker_eq_bot", ["linear_map"]], ["add", "theorem", "separating_right_iff_linear_flip_nontrivial", ["linear_map"]]]}]}, {"timestamp": 1648263495, "sha": "17b621c0", "message": "chore(scripts): update nolints.txt (#12946)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1648237405, "sha": "b6d246a6", "message": "feat(topology/continuous_function/cocompact_maps): add the type of cocompact continuous maps (#12938)\nThis adds the type of cocompact continuous maps, which are those functions `f : α → β` for which `tendsto f (cocompact α) (cocompact β)`. These maps are of interest primarily because of their connection with continuous functions vanishing at infinity (#12907). In particular, if `f : α → β` is a cocompact continuous map and `g : β →C₀ γ` is a continuous function which vanishes at infinity, then `g ∘ f : α →C₀ γ`.\nThese are also related to quasi-compact maps (continuous maps for which preimages of compact sets are compact) and proper maps (continuous maps which are universally closed), neither of which are currently defined in mathlib. In particular, quasi-compact maps are cocompact continuous maps, and when the codomain is Hausdorff the converse holds also. Under some additional assumptions, both of these are also equivalent to being a proper map.", "changes": [{"oldPath": null, "newPath": "src/topology/continuous_function/cocompact_map.lean", "changes": [["add", "theorem", "coe_comp", ["cocompact_map"]], ["add", "theorem", "coe_id", ["cocompact_map"]], ["add", "theorem", "coe_mk", ["cocompact_map"]], ["add", "theorem", "coe_to_continuous_fun", ["cocompact_map"]], ["add", "def", "comp", ["cocompact_map"]], ["add", "theorem", "comp_apply", ["cocompact_map"]], ["add", "theorem", "comp_assoc", ["cocompact_map"]], ["add", "theorem", "comp_id", ["cocompact_map"]], ["add", "theorem", "compact_preimage", ["cocompact_map"]], ["add", "theorem", "ext", ["cocompact_map"]], ["add", "theorem", "id_comp", ["cocompact_map"]], ["add", "theorem", "tendsto_of_forall_preimage", ["cocompact_map"]], ["add", "structure", "cocompact_map", []]]}]}, {"timestamp": 1648234129, "sha": "221796ab", "message": "feat(topology/metric_space/metrizable): define and use a metrizable typeclass (#12934)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": [["add", "theorem", "metrizable_space", ["embedding"]], ["add", "theorem", "metrizable_space_of_normal_second_countable", ["topological_space"]]]}]}, {"timestamp": 1648230823, "sha": "5925650f", "message": "chore(nnreal): rename lemmas based on real.to_nnreal when they mention of_real (#12937)\nMany lemma using `real.to_nnreal` mention `of_real` in their names. This PR tries to make things more coherent.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "continuous_real_to_nnreal", []], ["del", "theorem", "continuous_of_real", ["nnreal"]], ["del", "theorem", "has_sum_of_real_of_nonneg", ["nnreal"]], ["add", "theorem", "has_sum_real_to_nnreal_of_nonneg", ["nnreal"]], ["del", "theorem", "tendsto_of_real", ["nnreal"]], ["add", "theorem", "tendsto_real_to_nnreal", ["nnreal"]]]}]}, {"timestamp": 1648208362, "sha": "21435715", "message": "feat(topology/category/Born): The category of bornologies (#12045)\nDefine `Born`, the category of bornological spaces with bounded maps.", "changes": [{"oldPath": null, "newPath": "src/topology/category/Born.lean", "changes": [["add", "def", "of", ["Born"]], ["add", "def", "Born", []]]}]}, {"timestamp": 1648200830, "sha": "172f3179", "message": "move(algebra/hom/*): Move group hom files together (#12647)\nMove\n* `algebra.group.freiman` to `algebra.hom.freiman`\n* `algebra.group.hom` to `algebra.hom.basic`\n* `algebra.group.hom_instances` to `algebra.hom.instances`\n* `algebra.group.units_hom` to `algebra.hom.units`\n* `algebra.group_action_hom` to `algebra.hom.group_action`\n* `algebra.iterate_hom` to `algebra.hom.iterate`\n* `algebra.non_unital_alg_hom` to `algebra.hom.non_unital_alg`", "changes": [{"oldPath": "src/algebra/algebra/bilinear.lean", "newPath": "src/algebra/algebra/bilinear.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": "src/algebra/group/ext.lean", "newPath": "src/algebra/group/ext.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/freiman.lean", "newPath": "src/algebra/hom/freiman.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/hom/group.lean", "changes": []}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/hom/group_action.lean", "changes": []}, {"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/hom/group_instances.lean", "changes": []}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/hom/iterate.lean", "changes": []}, {"oldPath": "src/algebra/non_unital_alg_hom.lean", "newPath": "src/algebra/hom/non_unital_alg.lean", "changes": []}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/hom/units.lean", "changes": []}, {"oldPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/hom/monoid.lean", "newPath": "src/algebra/order/hom/monoid.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/regular/pow.lean", "newPath": "src/algebra/regular/pow.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/discrete.lean", "newPath": "src/category_theory/monoidal/discrete.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}]}, {"timestamp": 1648198986, "sha": "351c32ff", "message": "docs(docs/undergrad): Update TODO list (#12752)\nUpdate `undergrad` with the latest additions to mathlib.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1648176964, "sha": "9ee02c6c", "message": "feat(data/pfun): Remove unneeded assumption from pfun.fix_induction (#12920)\nRemoved a hypothesis from `pfun.fix_induction`. Note that it was two \"layers\" deep, so this is actually a strengthening. The original can be recovered by\n```lean\n/-- A recursion principle for `pfun.fix`. -/\n@[elab_as_eliminator] def fix_induction_original\n {f : α →. β ⊕ α} {b : β} {C : α → Sort*} {a : α} (h : b ∈ f.fix a)\n (H : ∀ a', b ∈ f.fix a' →\n (∀ a'', /- this hypothesis was removed -/ b ∈ f.fix a'' → sum.inr a'' ∈ f a' → C a'') → C a') : C a :=\nby { apply fix_induction h, intros, apply H; tauto, }\n```\nNote that `eval_induction` copies this syntax, so the same argument was removed there as well.\nThis allows for some simplifications of other parts of the code. Unfortunately, it was hard to figure out what was going on in the very dense parts of `tm_to_partrec.lean` and `partrec.lean`. I mostly just mechanically removed the hypotheses that were unnecessarily being supplied, and then checked if that caused some variable to be unused and removed that etc. But I cannot tell if this allows for greater simplifications.\nI also extracted two lemmas `fix_fwd` and `fix_stop` that I thought would be useful on their own.", "changes": [{"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "fix_fwd", ["pfun"]], ["add", "theorem", "fix_stop", ["pfun"]]]}]}, {"timestamp": 1648168641, "sha": "3dd8e4d5", "message": "feat(order/category/FinBoolAlg): The category of finite Boolean algebras (#12906)\nDefine `FinBoolAlg`, the category of finite Boolean algebras.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "preimage_sInter", ["set"]]]}, {"oldPath": "src/order/category/BoolAlg.lean", "newPath": "src/order/category/BoolAlg.lean", "changes": [["add", "theorem", "coe_to_BoundedDistribLattice", ["BoolAlg"]]]}, {"oldPath": null, "newPath": "src/order/category/FinBoolAlg.lean", "changes": [["add", "theorem", "coe_of", ["FinBoolAlg"]], ["add", "theorem", "coe_to_BoolAlg", ["FinBoolAlg"]], ["add", "def", "dual", ["FinBoolAlg"]], ["add", "def", "dual_equiv", ["FinBoolAlg"]], ["add", "def", "mk", ["FinBoolAlg", "iso"]], ["add", "def", "of", ["FinBoolAlg"]], ["add", "structure", "FinBoolAlg", []], ["add", "def", "Fintype_to_FinBoolAlg_op", []]]}, {"oldPath": "src/order/category/FinPartialOrder.lean", "newPath": "src/order/category/FinPartialOrder.lean", "changes": [["add", "theorem", "coe_to_PartialOrder", ["FinPartialOrder"]]]}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": [["add", "theorem", "coe_set_preimage", ["complete_lattice_hom"]], ["add", "def", "set_preimage", ["complete_lattice_hom"]], ["add", "theorem", "set_preimage_apply", ["complete_lattice_hom"]], ["add", "theorem", "set_preimage_comp", ["complete_lattice_hom"]], ["add", "theorem", "set_preimage_id", ["complete_lattice_hom"]]]}]}, {"timestamp": 1648166769, "sha": "7ec1a31e", "message": "fix(combinatorics/simple_graph/density): correct name in docstring (#12921)", "changes": [{"oldPath": "src/combinatorics/simple_graph/density.lean", "newPath": "src/combinatorics/simple_graph/density.lean", "changes": []}]}, {"timestamp": 1648162384, "sha": "352ecfe1", "message": "feat(combinatorics/simple_graph/{connectivity,metric}): `connected` and `dist` (#12574)", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "set_univ_walk_nonempty", ["simple_graph", "connected"]], ["add", "structure", "connected", ["simple_graph"]], ["add", "theorem", "set_univ_walk_nonempty", ["simple_graph", "preconnected"]], ["add", "def", "preconnected", ["simple_graph"]], ["add", "def", "reachable", ["simple_graph"]], ["add", "theorem", "reachable_iff_nonempty_univ", ["simple_graph"]], ["add", "theorem", "reachable_iff_refl_trans_gen", ["simple_graph"]], ["add", "theorem", "reachable_is_equivalence", ["simple_graph"]], ["add", "def", "reachable_setoid", ["simple_graph"]], ["add", "def", "connected", ["simple_graph", "subgraph"]], ["add", "theorem", "eq_of_length_eq_zero", ["simple_graph", "walk"]], ["add", "theorem", "exists_length_eq_zero_iff", ["simple_graph", "walk"]], ["mod", "structure", "is_cycle", ["simple_graph", "walk"]], ["mod", "theorem", "is_cycle_def", ["simple_graph", "walk"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/metric.lean", "changes": [["add", "theorem", "dist_eq_zero_iff", ["simple_graph", "connected"]], ["add", "theorem", "dist_triangle", ["simple_graph", "connected"]], ["add", "theorem", "exists_walk_of_dist", ["simple_graph", "connected"]], ["add", "theorem", "pos_dist_of_ne", ["simple_graph", "connected"]], ["add", "def", "dist", ["simple_graph"]], ["add", "theorem", "dist_comm", ["simple_graph"]], ["add", "theorem", "dist_comm_aux", ["simple_graph"]], ["add", "theorem", "dist_eq_zero_iff_eq_or_not_reachable", ["simple_graph"]], ["add", "theorem", "dist_eq_zero_of_not_reachable", ["simple_graph"]], ["add", "theorem", "dist_le", ["simple_graph"]], ["add", "theorem", "dist_self", ["simple_graph"]], ["add", "theorem", "nonempty_of_pos_dist", ["simple_graph"]], ["add", "theorem", "dist_eq_zero_iff", ["simple_graph", "reachable"]], ["add", "theorem", "exists_walk_of_dist", ["simple_graph", "reachable"]], ["add", "theorem", "pos_dist_of_ne", ["simple_graph", "reachable"]]]}]}, {"timestamp": 1648143047, "sha": "2891e1be", "message": "feat(algebra/category/BoolRing): The category of Boolean rings (#12905)\nDefine `BoolRing`, the category of Boolean rings.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/BoolRing.lean", "changes": [["add", "theorem", "coe_of", ["BoolRing"]], ["add", "def", "mk", ["BoolRing", "iso"]], ["add", "def", "of", ["BoolRing"]], ["add", "def", "BoolRing", []]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": [["mod", "theorem", "div_eq", ["punit"]], ["mod", "theorem", "inv_eq", ["punit"]]]}, {"oldPath": "src/algebra/ring/boolean_ring.lean", "newPath": "src/algebra/ring/boolean_ring.lean", "changes": [["add", "def", "as_boolalg", []], ["del", "def", "has_bot", ["boolean_ring"]], ["del", "def", "has_sdiff", ["boolean_ring"]], ["mod", "def", "has_sup", ["boolean_ring"]], ["del", "theorem", "inf_inf_sdiff", ["boolean_ring"]], ["del", "theorem", "sup_inf_sdiff", ["boolean_ring"]], ["add", "def", "of_boolalg", []], ["add", "theorem", "of_boolalg_bot", []], ["add", "theorem", "of_boolalg_inf", []], ["add", "theorem", "of_boolalg_inj", []], ["add", "theorem", "of_boolalg_sup", []], ["add", "theorem", "of_boolalg_symm_eq", []], ["add", "theorem", "of_boolalg_to_boolalg", []], ["add", "theorem", "of_boolalg_top", []], ["add", "theorem", "as_boolalg_comp", ["ring_hom"]], ["add", "theorem", "as_boolalg_id", ["ring_hom"]], ["add", "def", "to_boolalg", []], ["add", "theorem", "to_boolalg_add_add_mul", []], ["add", "theorem", "to_boolalg_inj", []], ["add", "theorem", "to_boolalg_mul", []], ["add", "theorem", "to_boolalg_of_boolalg", []], ["add", "theorem", "to_boolalg_one", []], ["add", "theorem", "to_boolalg_symm_eq", []], ["add", "theorem", "to_boolalg_zero", []]]}]}, {"timestamp": 1648143046, "sha": "f53b2399", "message": "feat(model_theory/fraisse): Construct Fraïssé limits (#12138)\nConstructs Fraïssé limits (nonuniquely)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/model_theory/direct_limit.lean", "newPath": "src/model_theory/direct_limit.lean", "changes": [["add", "theorem", "cg", ["first_order", "language", "direct_limit"]], ["add", "theorem", "coe_nat_le_rec", ["first_order", "language", "directed_system"]], ["add", "def", "nat_le_rec", ["first_order", "language", "directed_system"]]]}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": []}, {"oldPath": "src/model_theory/fraisse.lean", "newPath": "src/model_theory/fraisse.lean", "changes": [["add", "theorem", "mem_age_of_equiv", ["first_order", "language", "Structure", "fg"]], ["add", "theorem", "age_direct_limit", ["first_order", "language"]], ["add", "theorem", "age_fraisse_limit", ["first_order", "language"]], ["add", "theorem", "age_subset_age", ["first_order", "language", "embedding"]], ["add", "theorem", "age_eq_age", ["first_order", "language", "equiv"]], ["add", "theorem", "exists_cg_is_age_of", ["first_order", "language"]], ["add", "theorem", "is_equiv_invariant_of_fg", ["first_order", "language", "hereditary"]]]}]}, {"timestamp": 1648139974, "sha": "6ac7c18d", "message": "feat(combinatorics/simple_graph/density): Edge density (#12431)\nDefine the number and density of edges of a relation and of a simple graph between two finsets.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/density.lean", "changes": [["add", "theorem", "card_interedges_add_card_interedges_compl", ["rel"]], ["add", "theorem", "card_interedges_comm", ["rel"]], ["add", "theorem", "card_interedges_le_mul", ["rel"]], ["add", "def", "edge_density", ["rel"]], ["add", "theorem", "edge_density_add_edge_density_compl", ["rel"]], ["add", "theorem", "edge_density_comm", ["rel"]], ["add", "theorem", "edge_density_empty_left", ["rel"]], ["add", "theorem", "edge_density_empty_right", ["rel"]], ["add", "theorem", "edge_density_le_one", ["rel"]], ["add", "theorem", "edge_density_nonneg", ["rel"]], ["add", "def", "interedges", ["rel"]], ["add", "theorem", "interedges_bUnion", ["rel"]], ["add", "theorem", "interedges_bUnion_left", ["rel"]], ["add", "theorem", "interedges_bUnion_right", ["rel"]], ["add", "theorem", "interedges_disjoint_left", ["rel"]], ["add", "theorem", "interedges_disjoint_right", ["rel"]], ["add", "theorem", "interedges_empty_left", ["rel"]], ["add", "theorem", "interedges_mono", ["rel"]], ["add", "theorem", "mem_interedges_iff", ["rel"]], ["add", "theorem", "mk_mem_interedges_comm", ["rel"]], ["add", "theorem", "mk_mem_interedges_iff", ["rel"]], ["add", "theorem", "swap_mem_interedges_iff", ["rel"]], ["add", "theorem", "card_interedges_add_card_interedges_compl", ["simple_graph"]], ["add", "theorem", "card_interedges_div_card", ["simple_graph"]], ["add", "theorem", "card_interedges_le_mul", ["simple_graph"]], ["add", "def", "edge_density", ["simple_graph"]], ["add", "theorem", "edge_density_add_edge_density_compl", ["simple_graph"]], ["add", "theorem", "edge_density_comm", ["simple_graph"]], ["add", "theorem", "edge_density_def", ["simple_graph"]], ["add", "theorem", "edge_density_empty_left", ["simple_graph"]], ["add", "theorem", "edge_density_empty_right", ["simple_graph"]], ["add", "theorem", "edge_density_le_one", ["simple_graph"]], ["add", "theorem", "edge_density_nonneg", ["simple_graph"]], ["add", "def", "interedges", ["simple_graph"]], ["add", "theorem", "interedges_bUnion", ["simple_graph"]], ["add", "theorem", "interedges_bUnion_left", ["simple_graph"]], ["add", "theorem", "interedges_bUnion_right", ["simple_graph"]], ["add", "theorem", "interedges_def", ["simple_graph"]], ["add", "theorem", "interedges_disjoint_left", ["simple_graph"]], ["add", "theorem", "interedges_disjoint_right", ["simple_graph"]], ["add", "theorem", "interedges_empty_left", ["simple_graph"]], ["add", "theorem", "interedges_mono", ["simple_graph"]], ["add", "theorem", "mem_interedges_iff", ["simple_graph"]], ["add", "theorem", "mk_mem_interedges_comm", ["simple_graph"]], ["add", "theorem", "mk_mem_interedges_iff", ["simple_graph"]], ["add", "theorem", "swap_mem_interedges_iff", ["simple_graph"]]]}]}, {"timestamp": 1648133361, "sha": "7302e116", "message": "feat(algebra/module/torsion): define torsion submodules (#12027)\nThis file defines the a-torsion and torsion submodules for a R-module M and gives some basic properties. (The ultimate goal I'm working on is to classify the finitely-generated modules over a PID).", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "exists_npow_eq_one_of_zpow_eq_one", []]]}, {"oldPath": null, "newPath": "src/algebra/module/torsion.lean", "changes": [["add", "theorem", "is_torsion_iff_is_torsion_int", ["add_monoid"]], ["add", "theorem", "is_torsion_iff_is_torsion_nat", ["add_monoid"]], ["add", "def", "is_torsion'", ["module"]], ["add", "def", "is_torsion", ["module"]], ["add", "def", "is_torsion_by", ["module"]], ["add", "theorem", "coe_torsion_eq_annihilator_ne_bot", ["submodule"]], ["add", "theorem", "is_torsion'_iff_torsion'_eq_top", ["submodule"]], ["add", "theorem", "is_torsion_by_iff_torsion_by_eq_top", ["submodule"]], ["add", "theorem", "mem_torsion'_iff", ["submodule"]], ["add", "theorem", "mem_torsion_by_iff", ["submodule"]], ["add", "theorem", "mem_torsion_iff", ["submodule"]], ["add", "theorem", "no_zero_smul_divisors_iff_torsion_eq_bot", ["submodule"]], ["add", "theorem", "torsion_eq_bot", ["submodule", "quotient_torsion"]], ["add", "theorem", "smul_coe_torsion_by", ["submodule"]], ["add", "theorem", "smul_torsion_by", ["submodule"]], ["add", "def", "torsion'", ["submodule"]], ["add", "theorem", "torsion'_is_torsion'", ["submodule"]], ["add", "theorem", "torsion'_torsion'_eq_top", ["submodule"]], ["add", "def", "torsion", ["submodule"]], ["add", "theorem", "mk_smul", ["submodule", "torsion_by"]], ["add", "def", "torsion_by", ["submodule"]], ["add", "theorem", "torsion_by_is_torsion_by", ["submodule"]], ["add", "theorem", "torsion_by_torsion_by_eq_top", ["submodule"]], ["add", "theorem", "torsion_is_torsion", ["submodule"]], ["add", "theorem", "torsion_torsion_eq_top", ["submodule"]]]}]}, {"timestamp": 1648126914, "sha": "c7745b3b", "message": "chore(order/zorn): Review (#12175)\nLemma renames", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "insert", ["set", "pairwise"]], ["add", "theorem", "insert_of_symmetric", ["set", "pairwise"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["mod", "theorem", "exists_max_three", ["intermediate_field", "lifts"]], ["mod", "theorem", "exists_max_two", ["intermediate_field", "lifts"]], ["mod", "theorem", "exists_upper_bound", ["intermediate_field", "lifts"]], ["mod", "def", "upper_bound_intermediate_field", ["intermediate_field", "lifts"]]]}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/extension.lean", "newPath": "src/order/extension.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["add", "theorem", "is_chain", ["chain_closure"]], ["add", "theorem", "succ_fixpoint", ["chain_closure"]], ["add", "theorem", "succ_fixpoint_iff", ["chain_closure"]], ["add", "inductive", "chain_closure", []], ["add", "theorem", "chain_closure_empty", []], ["add", "theorem", "chain_closure_max_chain", []], ["add", "theorem", "chain_closure_total", []], ["del", "theorem", "directed_of_chain", []], ["add", "theorem", "exists_maximal_of_chains_bounded", []], ["add", "theorem", "exists_maximal_of_nonempty_chains_bounded", []], ["add", "theorem", "directed", ["is_chain"]], ["add", "theorem", "directed_on", ["is_chain"]], ["add", "theorem", "exists_max_chain", ["is_chain"]], ["add", "theorem", "image", ["is_chain"]], ["add", "theorem", "insert", ["is_chain"]], ["add", "theorem", "mono", ["is_chain"]], ["add", "theorem", "succ", ["is_chain"]], ["add", "theorem", "super_chain_succ_chain", ["is_chain"]], ["add", "theorem", "symm", ["is_chain"]], ["add", "theorem", "total", ["is_chain"]], ["add", "def", "is_chain", []], ["add", "theorem", "is_chain_empty", []], ["add", "theorem", "is_chain_of_trichotomous", []], ["add", "theorem", "is_chain_univ_iff", []], ["add", "theorem", "is_chain", ["is_max_chain"]], ["add", "theorem", "not_super_chain", ["is_max_chain"]], ["add", "def", "is_max_chain", []], ["add", "def", "max_chain", []], ["add", "theorem", "max_chain_spec", []], ["del", "theorem", "chain", ["set", "subsingleton"]], ["add", "theorem", "is_chain", ["set", "subsingleton"]], ["add", "def", "succ_chain", []], ["add", "theorem", "succ_increasing", []], ["add", "theorem", "succ_spec", []], ["add", "def", "super_chain", []], ["del", "theorem", "directed_on", ["zorn", "chain"]], ["del", "theorem", "image", ["zorn", "chain"]], ["del", "theorem", "max_chain_of_chain", ["zorn", "chain"]], ["del", "theorem", "mono", ["zorn", "chain"]], ["del", "theorem", "symm", ["zorn", "chain"]], ["del", "theorem", "total", ["zorn", "chain"]], ["del", "theorem", "total_of_refl", ["zorn", "chain"]], ["del", "def", "chain", ["zorn"]], ["del", "theorem", "chain_chain_closure", ["zorn"]], ["del", "inductive", "chain_closure", ["zorn"]], ["del", "theorem", "chain_closure_closure", ["zorn"]], ["del", "theorem", "chain_closure_empty", ["zorn"]], ["del", "theorem", "chain_closure_succ_fixpoint", ["zorn"]], ["del", "theorem", "chain_closure_succ_fixpoint_iff", ["zorn"]], ["del", "theorem", "chain_closure_total", ["zorn"]], ["del", "theorem", "chain_empty", ["zorn"]], ["del", "theorem", "chain_insert", ["zorn"]], ["del", "theorem", "chain_of_trichotomous", ["zorn"]], ["del", "theorem", "chain_succ", ["zorn"]], ["del", "theorem", "chain_univ_iff", ["zorn"]], ["del", "theorem", "exists_maximal_of_chains_bounded", ["zorn"]], ["del", "theorem", "exists_maximal_of_nonempty_chains_bounded", ["zorn"]], ["del", "def", "is_max_chain", ["zorn"]], ["del", "def", "max_chain", ["zorn"]], ["del", "theorem", "max_chain_spec", ["zorn"]], ["del", "def", "succ_chain", ["zorn"]], ["del", "theorem", "succ_increasing", ["zorn"]], ["del", "theorem", "succ_spec", ["zorn"]], ["del", "def", "super_chain", ["zorn"]], ["del", "theorem", "super_of_not_max", ["zorn"]], ["del", "theorem", "zorn_nonempty_partial_order", ["zorn"]], ["del", "theorem", "zorn_nonempty_partial_order₀", ["zorn"]], ["del", "theorem", "zorn_partial_order", ["zorn"]], ["del", "theorem", "zorn_partial_order₀", ["zorn"]], ["del", "theorem", "zorn_subset", ["zorn"]], ["del", "theorem", "zorn_subset_nonempty", ["zorn"]], ["del", "theorem", "zorn_superset", ["zorn"]], ["del", "theorem", "zorn_superset_nonempty", ["zorn"]], ["add", "theorem", "zorn_nonempty_partial_order", []], ["add", "theorem", "zorn_nonempty_partial_order₀", []], ["add", "theorem", "zorn_partial_order", []], ["add", "theorem", "zorn_partial_order₀", []], ["add", "theorem", "zorn_subset", []], ["add", "theorem", "zorn_subset_nonempty", []], ["add", "theorem", "zorn_superset", []], ["add", "theorem", "zorn_superset_nonempty", []]]}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/topology/algebra/semigroup.lean", "newPath": "src/topology/algebra/semigroup.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": [["mod", "theorem", "apply_eq_of_chain", ["shrinking_lemma", "partial_refinement"]], ["mod", "def", "chain_Sup", ["shrinking_lemma", "partial_refinement"]], ["mod", "theorem", "find_apply_of_mem", ["shrinking_lemma", "partial_refinement"]], ["mod", "theorem", "le_chain_Sup", ["shrinking_lemma", "partial_refinement"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1648123295, "sha": "7c48d65c", "message": "feat(topology/algebra/group): define `has_continuous_inv` and `has_continuous_neg` type classes (#12748)\nThis creates the `has_continuous_inv` and `has_continuous_neg` type classes. The `has_continuous_neg` class will be helpful for generalizing `topological_ring` to the setting of `non_unital_non_assoc_semiring`s (see [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/continuous.20maps.20vanishing.20at.20infinity)). In addition, `ennreal` can have a `has_continuous_inv` instance.", "changes": [{"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "has_continuous_inv_Inf", []], ["add", "theorem", "has_continuous_inv_inf", []], ["add", "theorem", "has_continuous_inv_infi", []], ["add", "theorem", "is_closed_set_of_map_inv", []], ["mod", "theorem", "inv", ["is_compact"]], ["add", "theorem", "continuous_conj'", ["topological_group"]], ["add", "theorem", "continuous_conj_prod", ["topological_group"]]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1648116759, "sha": "eabc6192", "message": "feat(ring_theory/polynomial): mv_polynomial over UFD is UFD (#12866)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "comap_prime", []], ["add", "theorem", "prime_iff", ["mul_equiv"]]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "map_dvd", []], ["mod", "theorem", "map_dvd", ["monoid_hom"]], ["mod", "theorem", "map_dvd", ["mul_hom"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "map_dvd", ["ring_hom"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["add", "theorem", "exists_finset_rename₂", ["mv_polynomial"]], ["add", "def", "kill_compl", ["mv_polynomial"]], ["add", "theorem", "kill_compl_comp_rename", ["mv_polynomial"]], ["add", "theorem", "kill_compl_rename_app", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "prime_C_iff", ["mv_polynomial"]], ["add", "theorem", "prime_rename_iff", ["mv_polynomial"]], ["add", "theorem", "prime_C_iff", ["polynomial"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "unique_factorization_monoid", ["mul_equiv"]], ["add", "theorem", "unique_factorization_monoid_iff", ["mul_equiv"]]]}]}, {"timestamp": 1648116758, "sha": "db760640", "message": "feat(*): facts about degrees/multiplicites of derivatives (#12856)\nFor `t` an `n`th repeated root of `p`, we prove that it is an `n-1`th repeated root of `p'` (and tidy the section around this). We also sharpen the theorem stating that `deg p' < deg p`.", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "derivative_of_nat_degree_zero", ["polynomial"]], ["mod", "theorem", "nat_degree_derivative_lt", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "derivative_root_multiplicity_of_root", ["polynomial"]], ["add", "theorem", "root_multiplicity_sub_one_le_derivative_root_multiplicity", ["polynomial"]], ["mod", "theorem", "roots_normalize", ["polynomial"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}]}, {"timestamp": 1648116757, "sha": "355645e3", "message": "chore(data/polynomial/*): delete, rename and move lemmas (#12852)\n- Replace `eval_eq_finset_sum` and `eval_eq_finset_sum'` with `eval_eq_sum_range` and `eval_eq_sum_range'` which are consistent with `eval₂_eq_sum_range`, `eval₂_eq_sum_range'` `eval_eq_finset_sum`, `eval_eq_finset_sum'`. Notice that the type of `eval_eq_sum_range'` is different, but this lemma has not been used anywhere in mathlib.\n- Move the lemma `C_eq_int_cast` from `data/polynomial/degree/definitions.lean` to `data/polynomial/basic.lean`. `C_eq_nat_cast` was already here.", "changes": [{"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "C_eq_int_cast", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["del", "theorem", "C_eq_int_cast", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "eval_eq_finset_sum'", ["polynomial"]], ["del", "theorem", "eval_eq_finset_sum", ["polynomial"]], ["add", "theorem", "eval_eq_sum_range'", ["polynomial"]], ["add", "theorem", "eval_eq_sum_range", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}]}, {"timestamp": 1648116756, "sha": "c1fb0ed9", "message": "feat(algebra/associated): generalize nat.prime_mul_iff (#12850)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "irreducible_is_unit_mul", []], ["add", "theorem", "irreducible_mul_iff", []], ["add", "theorem", "irreducible_mul_is_unit", []], ["add", "theorem", "irreducible_mul_units", []], ["add", "theorem", "irreducible_units_mul", []]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1648116755, "sha": "a5a0d233", "message": "feat(data/list/basic): nth_le+filter lemmas (#12836)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_singleton", ["list"]], ["add", "theorem", "nth_le_cons", ["list"]], ["add", "theorem", "nth_le_cons_aux", ["list"]]]}]}, {"timestamp": 1648116754, "sha": "892e6113", "message": "feat(model_theory/*): Facts about countability of first-order structures (#12819)\nShows that in a countable language, a structure is countably generated if and only if it is countable.", "changes": [{"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "card", ["first_order", "language"]], ["add", "theorem", "card_eq_card_functions_add_card_relations", ["first_order", "language"]], ["add", "theorem", "card_functions_le_omega", ["first_order", "language"]], ["add", "theorem", "card_le_omega", ["first_order", "language"]], ["add", "theorem", "countable", ["first_order", "language", "encodable"]], ["add", "theorem", "countable_functions", ["first_order", "language", "encodable"]]]}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": [["add", "theorem", "cg_iff_countable", ["first_order", "language", "Structure"]], ["mod", "theorem", "cg_closure", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_iff_countable", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": [["add", "theorem", "substructure_closure", ["set", "countable"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "theorem", "card_le_omega", ["first_order", "language", "term"]]]}]}, {"timestamp": 1648116752, "sha": "e6c6f006", "message": "feat(number_theory/arithmetic_function): The moebius function is multiplicative (#12796)\nA fundamental property of the moebius function is that it is\nmultiplicative, which allows many facts about Euler products to be\nexpressed", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "squarefree_mul", ["nat"]], ["add", "theorem", "ne_zero", ["squarefree"]], ["add", "theorem", "of_mul_left", ["squarefree"]], ["add", "theorem", "of_mul_right", ["squarefree"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "iff_ne_zero", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "theorem", "is_multiplicative_moebius", ["nat", "arithmetic_function"]]]}]}, {"timestamp": 1648116751, "sha": "0faebd2a", "message": "chore(fintype/card_embedding): generalize instances (#12775)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_compl_set", ["fintype"]], ["add", "theorem", "card_range", ["fintype"]], ["add", "theorem", "to_finset_compl", ["set"]]]}, {"oldPath": "src/data/fintype/card_embedding.lean", "newPath": "src/data/fintype/card_embedding.lean", "changes": [["mod", "theorem", "card_embedding_eq", ["fintype"]], ["mod", "theorem", "card_embedding_eq_of_infinite", ["fintype"]], ["mod", "theorem", "card_embedding_eq_of_unique", ["fintype"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "to_finset_compl", ["set"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "option_embedding_equiv", ["function", "embedding"]]]}]}, {"timestamp": 1648116750, "sha": "04274301", "message": "feat(number_theory/function_field): add completion with respect to place at infinity (#12715)", "changes": [{"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": [["add", "def", "Fqt_infty", ["function_field"]], ["add", "theorem", "completable_top_field", ["function_field", "infty_valued_Fqt"]], ["add", "theorem", "def", ["function_field", "infty_valued_Fqt"]], ["add", "theorem", "separated_space", ["function_field", "infty_valued_Fqt"]], ["add", "theorem", "topological_division_ring", ["function_field", "infty_valued_Fqt"]], ["add", "def", "topological_space", ["function_field", "infty_valued_Fqt"]], ["add", "theorem", "uniform_add_group", ["function_field", "infty_valued_Fqt"]], ["add", "def", "uniform_space", ["function_field", "infty_valued_Fqt"]], ["add", "def", "infty_valued_Fqt", ["function_field"]], ["add", "theorem", "def", ["function_field", "valued_Fqt_infty"]]]}]}, {"timestamp": 1648112990, "sha": "ca93096b", "message": "feat(topology/nhds_set): add `has_basis_nhds_set` (#12908)\nAlso add `nhds_set_union`.", "changes": [{"oldPath": "src/topology/nhds_set.lean", "newPath": "src/topology/nhds_set.lean", "changes": [["add", "theorem", "has_basis_nhds_set", []], ["add", "theorem", "nhds_set_union", []]]}]}, {"timestamp": 1648105775, "sha": "399ce38e", "message": "feat(measure_theory/integral): continuous functions with exponential decay are integrable (#12539)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/integral/exp_decay.lean", "changes": [["add", "theorem", "exp_neg_integrable_on_Ioi", []], ["add", "theorem", "integrable_of_is_O_exp_neg", []], ["add", "theorem", "integral_exp_neg_le", []]]}]}, {"timestamp": 1648099119, "sha": "df348164", "message": "feat(ring_theory/principal_ideal_domain): add some irreducible lemmas (#12903)", "changes": [{"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "coprime_or_dvd", ["irreducible"]], ["add", "theorem", "coprime_pow_of_not_dvd", ["irreducible"]], ["add", "theorem", "dvd_iff_not_coprime", ["irreducible"]]]}]}, {"timestamp": 1648099118, "sha": "a9781152", "message": "refactor(category_theory/abelian): trivial generalisations (#12897)\nTrivial generalisations of some facts in `category_theory/abelian/non_preadditive.lean`.\nThey are true more generally, and this refactor will make it easier to do some other clean-up I'd like to perform on abelian categories.", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["del", "theorem", "epi_of_zero_cokernel", ["category_theory", "abelian"]], ["del", "theorem", "mono_of_zero_kernel", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": [["del", "theorem", "epi_of_zero_cancel", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "epi_of_zero_cokernel", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "has_colimit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "has_limit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "mono_of_cancel_zero", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "mono_of_zero_kernel", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "pullback_of_mono", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "pushout_of_epi", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "zero_cokernel_of_zero_cancel", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "zero_kernel_of_cancel_zero", ["category_theory", "non_preadditive_abelian"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "zero_cokernel_of_zero_cancel", ["category_theory", "limits"]], ["add", "def", "zero_kernel_of_cancel_zero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/normal_mono.lean", "newPath": "src/category_theory/limits/shapes/normal_mono/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/normal_mono/equalizers.lean", "changes": [["add", "theorem", "has_colimit_parallel_pair", ["category_theory", "normal_epi_category"]], ["add", "theorem", "mono_of_cancel_zero", ["category_theory", "normal_epi_category"]], ["add", "theorem", "mono_of_zero_kernel", ["category_theory", "normal_epi_category"]], ["add", "theorem", "pushout_of_epi", ["category_theory", "normal_epi_category"]], ["add", "theorem", "epi_of_zero_cancel", ["category_theory", "normal_mono_category"]], ["add", "theorem", "epi_of_zero_cokernel", ["category_theory", "normal_mono_category"]], ["add", "theorem", "has_limit_parallel_pair", ["category_theory", "normal_mono_category"]], ["add", "theorem", "pullback_of_mono", ["category_theory", "normal_mono_category"]]]}]}, {"timestamp": 1648099117, "sha": "d4e27d0b", "message": "chore(topology/separation): move a lemma, golf (#12896)\n* move `t0_space_of_injective_of_continuous` up;\n* add `embedding.t0_space`, use it for `subtype.t0_space`.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "t0_space_of_injective_of_continuous", []]]}]}, {"timestamp": 1648099115, "sha": "e968b6d1", "message": "feat(topology/continuous_function/bounded): add `bounded_continuous_function.tendsto_iff_tendsto_uniformly` (#12894)\nThis establishes that convergence in the metric on bounded continuous functions is equivalent to uniform convergence of the respective functions.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "tendsto_iff_tendsto_uniformly", ["bounded_continuous_function"]]]}]}, {"timestamp": 1648099114, "sha": "a370cf05", "message": "chore(data/set/intervals): golf, rename (#12893)\n* rename `set.mem_Ioo_or_eq_endpoints_of_mem_Icc` →\n `set.eq_endpoints_or_mem_Ioo_of_mem_Icc`;\n* rename `set.mem_Ioo_or_eq_left_of_mem_Ico` →\n `set.eq_left_or_mem_Ioo_of_mem_Ico`;\n* rename `set.mem_Ioo_or_eq_right_of_mem_Ioc` →\n `set.eq_right_or_mem_Ioo_of_mem_Ioc`;\n* golf the proofs of these lemmas.\nThe new names better reflect the order of terms in `or`.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "eq_endpoints_or_mem_Ioo_of_mem_Icc", ["set"]], ["add", "theorem", "eq_left_or_mem_Ioo_of_mem_Ico", ["set"]], ["add", "theorem", "eq_right_or_mem_Ioo_of_mem_Ioc", ["set"]], ["del", "theorem", "mem_Ioo_or_eq_endpoints_of_mem_Icc", ["set"]], ["del", "theorem", "mem_Ioo_or_eq_left_of_mem_Ico", ["set"]], ["del", "theorem", "mem_Ioo_or_eq_right_of_mem_Ioc", ["set"]]]}, {"oldPath": "src/data/set/intervals/surj_on.lean", "newPath": "src/data/set/intervals/surj_on.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/extend_from.lean", "newPath": "src/topology/algebra/order/extend_from.lean", "changes": []}]}, {"timestamp": 1648099113, "sha": "5ef365a3", "message": "feat(topology/separation): generalize tendsto_const_nhds_iff to t1_space (#12883)\nI noticed this when working on the sphere eversion project", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "map_const", ["filter"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "pure_le_nhds_iff", []], ["mod", "theorem", "tendsto_const_nhds_iff", []]]}]}, {"timestamp": 1648099112, "sha": "6696bdd9", "message": "docs(data/set/pairwise): Explain preference for `s.pairwise_disjoint id` (#12878)\n... over `s.pairwise disjoint`.", "changes": [{"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}]}, {"timestamp": 1648099111, "sha": "30449be1", "message": "feat(data/complex/is_R_or_C): generalize `is_R_or_C.proper_space_span_singleton` to all finite dimensional submodules (#12877)\nAlso goes on to show that finite supremums of finite_dimensional submodules are finite-dimensional.", "changes": [{"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1648099110, "sha": "debdd909", "message": "feat(tactic/ext): support rintro patterns in `ext` (#12875)\nThe change is actually quite simple, since `rintro_pat*` has approximately the same type as `rcases_pat*`.", "changes": [{"oldPath": "src/tactic/congr.lean", "newPath": "src/tactic/congr.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": []}]}, {"timestamp": 1648099109, "sha": "8e50164d", "message": "chore(data/int/basic): remove some `eq.mpr`s from `int.induction_on'` (#12873)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1648099107, "sha": "ae695782", "message": "fix(ring_theory/algebraic): Make `is_transcendental_of_subsingleton` fully general (#12870)\nI mistyped a single letter.", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["mod", "theorem", "is_transcendental_of_subsingleton", []]]}]}, {"timestamp": 1648099106, "sha": "706a824c", "message": "feat(data/{nat, real}/sqrt): Some simple facts about square roots (#12851)\nProve that sqrt 1 = 1 in the natural numbers and an order relationship between real and natural square roots.", "changes": [{"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": [["add", "theorem", "sqrt_one", ["nat"]]]}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["add", "theorem", "nat_sqrt_le_real_sqrt", ["real"]], ["add", "theorem", "real_sqrt_le_nat_sqrt_succ", ["real"]]]}]}, {"timestamp": 1648099105, "sha": "ec434b75", "message": "feat(group_theory/order_of_element): finite orderness is closed under mul (#12750)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "is_of_fin_order_mul", ["commute"]], ["add", "theorem", "inv", ["is_of_fin_order"]], ["add", "theorem", "mul", ["is_of_fin_order"]], ["del", "theorem", "is_of_fin_order_inv", []], ["add", "theorem", "order_of_pos_iff", []]]}]}, {"timestamp": 1648099104, "sha": "c705d414", "message": "feat(analysis/locally_convex): characterize the natural bornology in terms of seminorms (#12721)\nAdd four lemmas:\n* `is_vonN_bounded_basis_iff`: it suffices to check boundedness for a basis\n* `seminorm_family.has_basis`: the basis sets form a basis of the topology\n* `is_bounded_iff_finset_seminorm_bounded`: a set is von Neumann bounded iff it is bounded for all finite suprema of seminorms\n* `is_bounded_iff_seminorm_bounded`: a set is von Neumann bounded iff it is bounded for each seminorm\nAlso make the set argument in `seminorm_family.basis_sets_iff` implicit.", "changes": [{"oldPath": "src/analysis/locally_convex/bounded.lean", "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "theorem", "is_vonN_bounded_basis_iff", ["filter", "has_basis"]]]}, {"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["add", "theorem", "is_vonN_bounded_iff_finset_seminorm_bounded", ["bornology"]], ["add", "theorem", "is_vonN_bounded_iff_seminorm_bounded", ["bornology"]], ["mod", "theorem", "basis_sets_iff", ["seminorm_family"]], ["add", "theorem", "has_basis", ["seminorm_family"]]]}]}, {"timestamp": 1648099103, "sha": "cbd1e98c", "message": "chore(algebra/category/*): simp lemmas for of_hom (#12638)", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["add", "theorem", "of_hom_apply", ["Algebra"]]]}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["add", "theorem", "of_hom_apply", ["CommRing"]], ["add", "theorem", "of_hom_apply", ["CommSemiRing"]], ["add", "theorem", "of_hom_apply", ["Ring"]], ["add", "theorem", "of_hom_apply", ["SemiRing"]]]}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["add", "theorem", "of_hom_apply", ["CommGroup"]], ["add", "theorem", "of_hom_apply", ["Group"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "theorem", "of_hom_apply", ["Module"]]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["add", "theorem", "of_hom_apply", ["Mon"]]]}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": [["add", "theorem", "of_hom_apply", ["Magma"]], ["add", "theorem", "of_hom_apply", ["Semigroup"]]]}]}, {"timestamp": 1648097191, "sha": "7967128a", "message": "feat(data/complex/basic): `#ℂ = 𝔠` (#12871)", "changes": [{"oldPath": null, "newPath": "src/data/complex/cardinality.lean", "changes": [["add", "theorem", "mk_complex", []], ["add", "theorem", "mk_univ_complex", []], ["add", "theorem", "not_countable_complex", []]]}]}, {"timestamp": 1648076528, "sha": "584ae9db", "message": "chore(data/{lists,multiset}/*): More dot notation (#12876)\nRename many `list` and `multiset` lemmas to make them eligible to dot notation. Also add a few aliases to `↔` lemmas for even more dot notation.\nRenames", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "def", "erase", ["finset"]], ["mod", "def", "filter", ["finset"]], ["mod", "theorem", "image_val_of_inj_on", ["finset"]], ["mod", "theorem", "insert_def", ["finset"]], ["mod", "def", "map", ["finset"]], ["mod", "theorem", "not_mem_erase", ["finset"]]]}, {"oldPath": "src/data/finset/fin.lean", "newPath": "src/data/finset/fin.lean", "changes": []}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": []}, {"oldPath": "src/data/finset/option.lean", "newPath": "src/data/finset/option.lean", "changes": []}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": []}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": []}, {"oldPath": "src/data/finset/sigma.lean", "newPath": "src/data/finset/sigma.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["mod", "def", "erase", ["alist"]], ["mod", "theorem", "keys_erase", ["alist"]]]}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/list/nat_antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["del", "theorem", "diff_eq_filter_of_nodup", ["list"]], ["del", "theorem", "mem_diff_iff_of_nodup", ["list"]], ["del", "theorem", "mem_erase_iff_of_nodup", ["list"]], ["del", "theorem", "mem_erase_of_nodup", ["list"]], ["add", "theorem", "append", ["list", "nodup"]], ["add", "theorem", "diff", ["list", "nodup"]], ["add", "theorem", "diff_eq_filter", ["list", "nodup"]], ["add", "theorem", "erase", ["list", "nodup"]], ["add", "theorem", "erase_eq_filter", ["list", "nodup"]], ["add", "theorem", "filter", ["list", "nodup"]], ["add", "theorem", "insert", ["list", "nodup"]], ["add", "theorem", "inter", ["list", "nodup"]], ["add", "theorem", "map_on", ["list", "nodup"]], ["add", "theorem", "mem_diff_iff", ["list", "nodup"]], ["add", "theorem", "mem_erase_iff", ["list", "nodup"]], ["add", "theorem", "not_mem", ["list", "nodup"]], ["add", "theorem", "not_mem_erase", ["list", "nodup"]], ["add", "theorem", "of_append_left", ["list", "nodup"]], ["add", "theorem", "of_append_right", ["list", "nodup"]], ["add", "theorem", "of_cons", ["list", "nodup"]], ["add", "theorem", "of_map", ["list", "nodup"]], ["add", "theorem", "pmap", ["list", "nodup"]], ["add", "theorem", "sigma", ["list", "nodup"]], ["add", "theorem", "union", ["list", "nodup"]], ["del", "theorem", "nodup_append_of_nodup", ["list"]], ["del", "theorem", "nodup_concat", ["list"]], ["del", "theorem", "nodup_cons_of_nodup", ["list"]], ["del", "theorem", "nodup_diff", ["list"]], ["del", "theorem", "nodup_erase_eq_filter", ["list"]], ["del", "theorem", "nodup_erase_of_nodup", ["list"]], ["del", "theorem", "nodup_filter", ["list"]], ["del", "theorem", "nodup_filter_map", ["list"]], ["del", "theorem", "nodup_insert", ["list"]], ["del", "theorem", "nodup_inter_of_nodup", ["list"]], ["del", "theorem", "nodup_map", ["list"]], ["del", "theorem", "nodup_map_on", ["list"]], ["del", "theorem", "nodup_of_nodup_append_left", ["list"]], ["del", "theorem", "nodup_of_nodup_append_right", ["list"]], ["del", "theorem", "nodup_of_nodup_cons", ["list"]], ["del", "theorem", "nodup_of_nodup_map", ["list"]], ["del", "theorem", "nodup_of_sublist", ["list"]], ["del", "theorem", "nodup_pmap", ["list"]], ["del", "theorem", "nodup_product", ["list"]], ["del", "theorem", "nodup_sigma", ["list"]], ["mod", "theorem", "nodup_singleton", ["list"]], ["mod", "theorem", "nodup_sublists_len", ["list"]], ["del", "theorem", "nodup_union", ["list"]], ["del", "theorem", "nodup_update_nth", ["list"]], ["del", "theorem", "not_mem_of_nodup_cons", ["list"]], ["mod", "theorem", "not_nodup_cons_of_mem", ["list"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["del", "theorem", "forall_of_forall_of_pairwise", ["list"]], ["del", "theorem", "forall_of_pairwise", ["list"]], ["mod", "theorem", "and", ["list", "pairwise"]], ["add", "theorem", "filter", ["list", "pairwise"]], ["add", "theorem", "filter_map", ["list", "pairwise"]], ["add", "theorem", "forall", ["list", "pairwise"]], ["add", "theorem", "forall_of_forall", ["list", "pairwise"]], ["mod", "theorem", "imp", ["list", "pairwise"]], ["mod", "theorem", "imp₂", ["list", "pairwise"]], ["add", "theorem", "map", ["list", "pairwise"]], ["add", "theorem", "of_cons", ["list", "pairwise"]], ["add", "theorem", "of_map", ["list", "pairwise"]], ["mod", "theorem", "set_pairwise", ["list", "pairwise"]], ["add", "theorem", "sublists'", ["list", "pairwise"]], ["add", "theorem", "pairwise_and_iff", ["list"]], ["del", "theorem", "pairwise_filter_map_of_pairwise", ["list"]], ["del", "theorem", "pairwise_filter_of_pairwise", ["list"]], ["del", "theorem", "pairwise_map_of_pairwise", ["list"]], ["del", "theorem", "pairwise_of_pairwise_cons", ["list"]], ["del", "theorem", "pairwise_of_pairwise_map", ["list"]], ["del", "theorem", "pairwise_of_sublist", ["list"]], ["del", "theorem", "pairwise_sublists'", ["list"]], ["mod", "theorem", "pw_filter_idempotent", ["list"]], ["mod", "theorem", "rel_of_pairwise_cons", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["del", "theorem", "subperm_of_subset_nodup", ["list"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["del", "theorem", "kerase_nodupkeys", ["list"]], ["del", "theorem", "kunion_nodupkeys", ["list"]], ["del", "theorem", "nodup_of_nodupkeys", ["list"]], ["add", "theorem", "kerase", ["list", "nodupkeys"]], ["add", "theorem", "kunion", ["list", "nodupkeys"]], ["add", "theorem", "sublist", ["list", "nodupkeys"]], ["del", "theorem", "nodupkeys_of_sublist", ["list"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["add", "theorem", "of_cons", ["list", "sorted"]], ["del", "theorem", "sorted_of_sorted_cons", ["list"]]]}, {"oldPath": "src/data/multiset/dedup.lean", "newPath": "src/data/multiset/dedup.lean", "changes": []}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": [["add", "theorem", "ndinsert", ["multiset", "nodup"]], ["add", "theorem", "ndinter", ["multiset", "nodup"]], ["add", "theorem", "ndunion", ["multiset", "nodup"]], ["del", "theorem", "nodup_ndinsert", ["multiset"]], ["del", "theorem", "nodup_ndinter", ["multiset"]], ["del", "theorem", "nodup_ndunion", ["multiset"]]]}, {"oldPath": "src/data/multiset/locally_finite.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["del", "theorem", "forall_of_pairwise", ["multiset"]], ["del", "theorem", "mem_erase_iff_of_nodup", ["multiset"]], ["del", "theorem", "mem_erase_of_nodup", ["multiset"]], ["add", "theorem", "add_iff", ["multiset", "nodup"]], ["add", "theorem", "cons", ["multiset", "nodup"]], ["add", "theorem", "erase", ["multiset", "nodup"]], ["add", "theorem", "erase_eq_filter", ["multiset", "nodup"]], ["add", "theorem", "ext", ["multiset", "nodup"]], ["add", "theorem", "filter", ["multiset", "nodup"]], ["add", "theorem", "inter_left", ["multiset", "nodup"]], ["add", "theorem", "inter_right", ["multiset", "nodup"]], ["add", "theorem", "map", ["multiset", "nodup"]], ["add", "theorem", "map_on", ["multiset", "nodup"]], ["add", "theorem", "mem_erase_iff", ["multiset", "nodup"]], ["add", "theorem", "not_mem", ["multiset", "nodup"]], ["add", "theorem", "not_mem_erase", ["multiset", "nodup"]], ["add", "theorem", "of_cons", ["multiset", "nodup"]], ["add", "theorem", "of_map", ["multiset", "nodup"]], ["add", "theorem", "pmap", ["multiset", "nodup"]], ["del", "theorem", "nodup_add_of_nodup", ["multiset"]], ["del", "theorem", "nodup_cons_of_nodup", ["multiset"]], ["del", "theorem", "nodup_erase_eq_filter", ["multiset"]], ["del", "theorem", "nodup_erase_of_nodup", ["multiset"]], ["del", "theorem", "nodup_ext", ["multiset"]], ["del", "theorem", "nodup_filter", ["multiset"]], ["del", "theorem", "nodup_filter_map", ["multiset"]], ["del", "theorem", "nodup_inter_left", ["multiset"]], ["del", "theorem", "nodup_inter_right", ["multiset"]], ["del", "theorem", "nodup_map", ["multiset"]], ["del", "theorem", "nodup_map_on", ["multiset"]], ["del", "theorem", "nodup_of_nodup_cons", ["multiset"]], ["del", "theorem", "nodup_of_nodup_map", ["multiset"]], ["del", "theorem", "nodup_pmap", ["multiset"]], ["del", "theorem", "nodup_powerset_len", ["multiset"]], ["del", "theorem", "nodup_product", ["multiset"]], ["del", "theorem", "nodup_sigma", ["multiset"]], ["del", "theorem", "not_mem_of_nodup_cons", ["multiset"]], ["add", "theorem", "forall", ["multiset", "pairwise"]], ["del", "theorem", "pairwise_of_nodup", ["multiset"]]]}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": [["del", "theorem", "nodup_pi", ["multiset"]]]}, {"oldPath": "src/data/multiset/sum.lean", "newPath": "src/data/multiset/sum.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/tprod.lean", "newPath": "src/data/tprod.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": []}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}]}, {"timestamp": 1648069999, "sha": "e6205190", "message": "feat(order/hom/*): more superclass instances for `order_iso_class` (#12889)\n * Weaken hypotheses on `order_hom_class` and some subclasses\n * Add more instances deriving specific order hom classes from `order_iso_class`", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["mod", "def", "order_hom_class", []]]}, {"oldPath": "src/order/hom/bounded.lean", "newPath": "src/order/hom/bounded.lean", "changes": []}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": []}]}, {"timestamp": 1648069998, "sha": "3b8d217c", "message": "refactor(order/upper_lower): Use `⨆` rather than `Sup` (#12644)\nTurn `Sup (coe '' S)` into `⋃ s ∈ S, ↑s` and other similar changes. This greatly simplifies the proofs.", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/upper_lower.lean", "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "carrier_eq_coe", ["lower_set"]], ["mod", "theorem", "coe_Inf", ["lower_set"]], ["mod", "theorem", "coe_Sup", ["lower_set"]], ["mod", "theorem", "coe_infi", ["lower_set"]], ["mod", "theorem", "coe_infi₂", ["lower_set"]], ["mod", "theorem", "coe_supr", ["lower_set"]], ["mod", "theorem", "coe_supr₂", ["lower_set"]], ["add", "theorem", "mem_compl_iff", ["lower_set"]], ["add", "theorem", "carrier_eq_coe", ["upper_set"]], ["mod", "theorem", "coe_Inf", ["upper_set"]], ["mod", "theorem", "coe_Sup", ["upper_set"]], ["mod", "theorem", "coe_infi", ["upper_set"]], ["mod", "theorem", "coe_infi₂", ["upper_set"]], ["mod", "theorem", "coe_supr", ["upper_set"]], ["mod", "theorem", "coe_supr₂", ["upper_set"]], ["add", "theorem", "mem_compl_iff", ["upper_set"]]]}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": [["add", "theorem", "coe_bot", ["homogeneous_ideal"]], ["add", "theorem", "coe_inf", ["homogeneous_ideal"]], ["add", "theorem", "coe_sup", ["homogeneous_ideal"]], ["del", "theorem", "coe_supr", ["homogeneous_ideal"]], ["add", "theorem", "coe_top", ["homogeneous_ideal"]], ["mod", "theorem", "to_ideal_infi", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_infi₂", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_supr", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_supr₂", ["homogeneous_ideal"]], ["mod", "theorem", "Sup", ["ideal", "is_homogeneous"]], ["add", "theorem", "infi₂", ["ideal", "is_homogeneous"]], ["add", "theorem", "supr₂", ["ideal", "is_homogeneous"]]]}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}]}, {"timestamp": 1648067811, "sha": "cd942870", "message": "feat(category_theory/abelian): right derived functor in abelian category with enough injectives (#12810)\nThis pr shows that in an abelian category with enough injectives, if a functor preserves finite limits, then the zeroth right derived functor is naturally isomorphic to itself. Dual to #12403 ↔️", "changes": [{"oldPath": "src/category_theory/abelian/right_derived.lean", "newPath": "src/category_theory/abelian/right_derived.lean", "changes": [["add", "theorem", "exact_of_map_injective_resolution", ["category_theory", "abelian", "functor"]], ["add", "theorem", "preserves_exact_of_preserves_finite_limits_of_mono", ["category_theory", "abelian", "functor"]], ["add", "def", "right_derived_zero_iso_self", ["category_theory", "abelian", "functor"]], ["add", "def", "right_derived_zero_to_self_app", ["category_theory", "abelian", "functor"]], ["add", "theorem", "right_derived_zero_to_self_app_comp_inv", ["category_theory", "abelian", "functor"]], ["add", "def", "right_derived_zero_to_self_app_inv", ["category_theory", "abelian", "functor"]], ["add", "theorem", "right_derived_zero_to_self_app_inv_comp", ["category_theory", "abelian", "functor"]], ["add", "def", "right_derived_zero_to_self_app_iso", ["category_theory", "abelian", "functor"]], ["add", "theorem", "right_derived_zero_to_self_natural", ["category_theory", "abelian", "functor"]]]}]}, {"timestamp": 1648067809, "sha": "84a438e2", "message": "refactor(algebraic_geometry/*): rename structure sheaf to `Spec.structure_sheaf` (#12785)\nFollowing [this Zulip message](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Rename.20.60structure_sheaf.60.20to.20.60Spec.2Estructure_sheaf.60/near/275649595), this pr renames `structure_sheaf` to `Spec.structure_sheaf`", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "def", "structure_sheaf", ["algebraic_geometry", "Spec"]], ["del", "def", "structure_sheaf", ["algebraic_geometry"]]]}]}, {"timestamp": 1648038946, "sha": "16fb8e26", "message": "chore(model_theory/terms_and_formulas): `realize_to_prenex` (#12884)\nProves that `phi.to_prenex` has the same realization in a nonempty structure as the original formula `phi` directly, rather than using `semantically_equivalent`.", "changes": [{"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["del", "theorem", "imp_semantically_equivalent_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["del", "theorem", "imp_semantically_equivalent_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_to_prenex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]]]}]}, {"timestamp": 1648038945, "sha": "64472d74", "message": "feat(ring_theory/polynomial/basic): the isomorphism between `R[a]/I[a]` and `(R/I[X])/(f mod I)` for `a` a root of polynomial `f` and `I` and ideal of `R` (#12646)\nThis PR defines the isomorphism between the ring `R[a]/I[a]` and the ring `(R/I[X])/(f mod I)` for `a` a root of the polynomial `f` with coefficients in `R` and `I` an ideal of `R`. This is useful for proving the Dedekind-Kummer Theorem.", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "def", "quot_quot_equiv_comm", ["adjoin_root", "polynomial"]], ["add", "theorem", "quot_quot_equiv_comm_mk_mk", ["adjoin_root", "polynomial"]], ["add", "theorem", "quot_adjoin_root_equiv_quot_polynomial_quot_mk_of", ["adjoin_root"]], ["add", "def", "quot_map_C_map_span_mk_equiv_quot_map_C_quot_map_span_mk", ["adjoin_root"]], ["add", "theorem", "quot_map_C_map_span_mk_equiv_quot_map_C_quot_map_span_mk_mk", ["adjoin_root"]], ["add", "def", "quot_map_of_equiv", ["adjoin_root"]], ["add", "def", "quot_map_of_equiv_quot_map_C_map_span_mk", ["adjoin_root"]], ["add", "theorem", "quot_map_of_equiv_quot_map_C_map_span_mk_mk", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "quotient_equiv_mk", ["ideal"]], ["add", "theorem", "quotient_equiv_symm_mk", ["ideal"]]]}]}, {"timestamp": 1648032064, "sha": "91263102", "message": "chore(docs/references): Remove duplicate key (#12901)\nand clean up the rest while I'm at it.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1648032062, "sha": "2308b53c", "message": "feat(model_theory/terms_and_formulas): Make `Theory.model` a class (#12867)\nMakes `Theory.model` a class", "changes": [{"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": []}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["del", "theorem", "some_model_models", ["first_order", "language", "Theory", "is_satisfiable"]], ["mod", "theorem", "mono", ["first_order", "language", "Theory", "model"]], ["del", "def", "model", ["first_order", "language", "Theory"]], ["mod", "def", "models_bounded_formula", ["first_order", "language", "Theory"]], ["mod", "theorem", "models_formula_iff", ["first_order", "language", "Theory"]], ["mod", "theorem", "models_sentence_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "realize_sentence_of_mem", ["first_order", "language", "Theory"]], ["mod", "theorem", "refl", ["first_order", "language", "Theory", "semantically_equivalent"]], ["mod", "theorem", "symm", ["first_order", "language", "Theory", "semantically_equivalent"]], ["mod", "theorem", "trans", ["first_order", "language", "Theory", "semantically_equivalent"]]]}, {"oldPath": "src/model_theory/ultraproducts.lean", "newPath": "src/model_theory/ultraproducts.lean", "changes": []}]}, {"timestamp": 1648030090, "sha": "92f26698", "message": "feat(algebra/homology/quasi_iso): 2-out-of-3 property (#12898)", "changes": [{"oldPath": "src/algebra/homology/quasi_iso.lean", "newPath": "src/algebra/homology/quasi_iso.lean", "changes": [["add", "theorem", "quasi_iso_of_comp_left", []], ["add", "theorem", "quasi_iso_of_comp_right", []]]}]}, {"timestamp": 1648024930, "sha": "11a365de", "message": "feat(linear_algebra/matrix): add variants of the existing `det_units_conj` lemmas (#12881)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["del", "theorem", "det_conj", ["matrix"]], ["add", "theorem", "det_conj_of_mul_eq_one", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "coe_units_inv", ["matrix"]], ["add", "theorem", "det_conj'", ["matrix"]], ["add", "theorem", "det_conj", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": [["add", "theorem", "coe_units_zpow", ["matrix"]], ["del", "theorem", "coe_inv''", ["matrix", "units"]], ["del", "theorem", "coe_zpow", ["matrix", "units"]]]}]}, {"timestamp": 1647995833, "sha": "c60bfca9", "message": "chore(data/nat/prime): golf nat.dvd_prime_pow (#12886)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1647987237, "sha": "d711d2a2", "message": "feat(set_theory/ordinal): Small iff cardinality less than `cardinal.univ` (#12887)\nCharacterizes when a type is small in terms of its cardinality", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "small_iff_lift_mk_lt_univ", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1647980530, "sha": "3838b852", "message": "feat(model_theory/*): Language equivalences (#12837)\nDefines equivalences between first-order languages", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "add_empty_constants", ["first_order", "language", "Lequiv"]], ["add", "structure", "Lequiv", ["first_order", "language"]], ["mod", "def", "comp", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_assoc", ["first_order", "language", "Lhom"]], ["mod", "theorem", "comp_id", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_sum_elim", ["first_order", "language", "Lhom"]], ["mod", "theorem", "id_comp", ["first_order", "language", "Lhom"]], ["add", "theorem", "map_constants_comp_sum_inl", ["first_order", "language", "Lhom"]], ["del", "theorem", "map_constants_comp_with_constants", ["first_order", "language", "Lhom"]], ["del", "def", "sum_elim", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_elim_comp_inl", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_elim_comp_inr", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_elim_inl_inr", ["first_order", "language", "Lhom"]], ["mod", "def", "sum_map", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_map_comp_inl", ["first_order", "language", "Lhom"]], ["add", "theorem", "sum_map_comp_inr", ["first_order", "language", "Lhom"]], ["del", "def", "Lhom_trim_empty_constants", ["first_order", "language"]], ["mod", "def", "Lhom_with_constants", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "def", "on_bounded_formula", ["first_order", "language", "Lequiv"]], ["add", "theorem", "on_bounded_formula_symm", ["first_order", "language", "Lequiv"]], ["add", "def", "on_formula", ["first_order", "language", "Lequiv"]], ["add", "theorem", "on_formula_apply", ["first_order", "language", "Lequiv"]], ["add", "theorem", "on_formula_symm", ["first_order", "language", "Lequiv"]], ["add", "def", "on_sentence", ["first_order", "language", "Lequiv"]], ["add", "def", "on_term", ["first_order", "language", "Lequiv"]], ["add", "theorem", "comp_on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_on_term", ["first_order", "language", "Lhom"]], ["add", "theorem", "id_on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "id_on_term", ["first_order", "language", "Lhom"]], ["mod", "def", "on_bounded_formula", ["first_order", "language", "Lhom"]], ["mod", "def", "on_formula", ["first_order", "language", "Lhom"]], ["mod", "def", "on_term", ["first_order", "language", "Lhom"]], ["mod", "theorem", "realize_on_term", ["first_order", "language", "Lhom"]], ["add", "theorem", "set_of_realize_on_formula", ["first_order", "language", "Lhom"]]]}]}, {"timestamp": 1647980529, "sha": "f7905f0c", "message": "feat(order/concept): Concept lattices (#12286)\nDefine `concept`, the type of concepts of a relation, and prove it forms a complete lattice.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/order/concept.lean", "changes": [["add", "theorem", "Inf_fst", ["concept"]], ["add", "theorem", "Inf_snd", ["concept"]], ["add", "theorem", "Sup_fst", ["concept"]], ["add", "theorem", "Sup_snd", ["concept"]], ["add", "theorem", "bot_fst", ["concept"]], ["add", "theorem", "bot_snd", ["concept"]], ["add", "theorem", "ext'", ["concept"]], ["add", "theorem", "ext", ["concept"]], ["add", "theorem", "fst_injective", ["concept"]], ["add", "theorem", "fst_ssubset_fst_iff", ["concept"]], ["add", "theorem", "fst_subset_fst_iff", ["concept"]], ["add", "theorem", "inf_fst", ["concept"]], ["add", "theorem", "inf_snd", ["concept"]], ["add", "theorem", "snd_injective", ["concept"]], ["add", "theorem", "snd_ssubset_snd_iff", ["concept"]], ["add", "theorem", "snd_subset_snd_iff", ["concept"]], ["add", "theorem", "strict_anti_snd", ["concept"]], ["add", "theorem", "strict_mono_fst", ["concept"]], ["add", "theorem", "sup_fst", ["concept"]], ["add", "theorem", "sup_snd", ["concept"]], ["add", "def", "swap", ["concept"]], ["add", "def", "swap_equiv", ["concept"]], ["add", "theorem", "swap_le_swap_iff", ["concept"]], ["add", "theorem", "swap_lt_swap_iff", ["concept"]], ["add", "theorem", "swap_swap", ["concept"]], ["add", "theorem", "top_fst", ["concept"]], ["add", "theorem", "top_snd", ["concept"]], ["add", "structure", "concept", []], ["add", "def", "extent_closure", []], ["add", "theorem", "extent_closure_Union", []], ["add", "theorem", "extent_closure_Union₂", []], ["add", "theorem", "extent_closure_anti", []], ["add", "theorem", "extent_closure_empty", []], ["add", "theorem", "extent_closure_intent_closure_extent_closure", []], ["add", "theorem", "extent_closure_swap", []], ["add", "theorem", "extent_closure_union", []], ["add", "theorem", "gc_intent_closure_extent_closure", []], ["add", "def", "intent_closure", []], ["add", "theorem", "intent_closure_Union", []], ["add", "theorem", "intent_closure_Union₂", []], ["add", "theorem", "intent_closure_anti", []], ["add", "theorem", "intent_closure_empty", []], ["add", "theorem", "intent_closure_extent_closure_intent_closure", []], ["add", "theorem", "intent_closure_swap", []], ["add", "theorem", "intent_closure_union", []], ["add", "theorem", "subset_extent_closure_intent_closure", []], ["add", "theorem", "subset_intent_closure_extent_closure", []], ["add", "theorem", "subset_intent_closure_iff_subset_extent_closure", []]]}]}, {"timestamp": 1647980528, "sha": "b226b4b6", "message": "feat(*): `has_repr` instances for `option`-like types (#11282)\nThis provides the `has_repr` instance for `with_bot α`, `with_top α`, `with_zero α`, `with_one α`, `alexandroff α`.", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": []}]}, {"timestamp": 1647978636, "sha": "980185a1", "message": "feat(algebra/{group,module}/ulift): Missing `ulift` instances (#12879)\nAdd a few missing algebraic instances for `ulift` and golf a few existing ones.", "changes": [{"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}]}, {"timestamp": 1647959091, "sha": "6a55ba89", "message": "feat(algebra/subalgebra/basic): Missing scalar instances (#12874)\nAdd missing scalar instances for `submonoid`, `subsemiring`, `subring`, `subalgebra`.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["mod", "theorem", "smul_def", ["subalgebra"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "smul_def", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["mod", "theorem", "smul_def", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["mod", "theorem", "smul_def", ["subsemiring"]]]}]}, {"timestamp": 1647959089, "sha": "52159408", "message": "feat(order/filter/basic): `filter` is a `coframe` (#12872)\nProvide the `coframe (filter α)` instance and remove now duplicated lemmas.", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "binfi_sup_left", ["filter"]], ["del", "theorem", "binfi_sup_right", ["filter"]], ["del", "theorem", "infi_sup_left", ["filter"]], ["del", "theorem", "infi_sup_right", ["filter"]]]}]}, {"timestamp": 1647959088, "sha": "1f470163", "message": "refactor(order/hom/complete_lattice): Fix the definition of `frame_hom` (#12855)\nI misread \"preserves finite meet\" as \"preserves binary meet\", meaning that currently a `frame_hom` does not have to preserve `⊤` (subtly, preserving arbitrary join does not imply that either). This fixes my mistake.", "changes": [{"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": [["del", "def", "to_Inf_hom", ["complete_lattice_hom"]], ["add", "def", "to_Sup_hom", ["complete_lattice_hom"]], ["del", "theorem", "bot_apply", ["frame_hom"]], ["del", "theorem", "coe_bot", ["frame_hom"]], ["mod", "def", "to_lattice_hom", ["frame_hom"]], ["mod", "structure", "frame_hom", []]]}, {"oldPath": "src/topology/sets/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": []}]}, {"timestamp": 1647952531, "sha": "d5861954", "message": "feat(data/finset/pointwise): Missing operations (#12865)\nDefine `-s`, `s⁻¹`, `s - t`, `s / t`, `s +ᵥ t`, `s • t`, `s -ᵥ t`, `a • s`, `a +ᵥ s` for `s`, `t` finsets, `a` scalar. Provide a bare API following what is already there for `s + t`, `s * t`.", "changes": [{"oldPath": "src/data/finset/pointwise.lean", "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "card_inv", ["finset"]], ["add", "theorem", "card_inv_le", ["finset"]], ["add", "theorem", "coe_div", ["finset"]], ["add", "theorem", "coe_inv", ["finset"]], ["mod", "theorem", "coe_pow", ["finset"]], ["add", "theorem", "coe_smul", ["finset"]], ["add", "theorem", "coe_smul_finset", ["finset"]], ["add", "theorem", "coe_vsub", ["finset"]], ["add", "theorem", "coe_zpow'", ["finset"]], ["add", "theorem", "coe_zpow", ["finset"]], ["add", "theorem", "div_card_le", ["finset"]], ["add", "theorem", "div_def", ["finset"]], ["add", "theorem", "div_empty", ["finset"]], ["add", "theorem", "div_mem_div", ["finset"]], ["add", "theorem", "div_nonempty_iff", ["finset"]], ["add", "theorem", "div_singleton", ["finset"]], ["add", "theorem", "div_subset_div", ["finset"]], ["add", "theorem", "div_zero_subset", ["finset"]], ["add", "theorem", "empty_div", ["finset"]], ["add", "theorem", "empty_smul", ["finset"]], ["add", "theorem", "empty_vsub", ["finset"]], ["add", "theorem", "image_div_prod", ["finset"]], ["add", "theorem", "image_inv", ["finset"]], ["add", "theorem", "image_smul", ["finset"]], ["add", "theorem", "image_smul_product", ["finset"]], ["add", "theorem", "image_vsub_product", ["finset"]], ["add", "theorem", "inv_def", ["finset"]], ["add", "theorem", "inv_empty", ["finset"]], ["add", "theorem", "inv_mem_inv", ["finset"]], ["add", "theorem", "inv_nonempty_iff", ["finset"]], ["add", "theorem", "inv_singleton", ["finset"]], ["add", "theorem", "inv_subset_inv", ["finset"]], ["add", "theorem", "mem_div", ["finset"]], ["add", "theorem", "mem_inv", ["finset"]], ["add", "theorem", "mem_smul", ["finset"]], ["add", "theorem", "mem_smul_finset", ["finset"]], ["add", "theorem", "mem_vsub", ["finset"]], ["mod", "theorem", "mul_card_le", ["finset"]], ["add", "theorem", "div_zero", ["finset", "nonempty"]], ["add", "theorem", "smul", ["finset", "nonempty"]], ["add", "theorem", "smul_finset", ["finset", "nonempty"]], ["add", "theorem", "vsub", ["finset", "nonempty"]], ["add", "theorem", "zero_div", ["finset", "nonempty"]], ["add", "theorem", "preimage_inv", ["finset"]], ["add", "theorem", "singleton_div", ["finset"]], ["add", "theorem", "singleton_div_singleton", ["finset"]], ["add", "theorem", "singleton_smul", ["finset"]], ["add", "theorem", "singleton_smul_singleton", ["finset"]], ["add", "theorem", "singleton_vsub", ["finset"]], ["add", "theorem", "singleton_vsub_singleton", ["finset"]], ["add", "theorem", "smul_card_le", ["finset"]], ["add", "theorem", "smul_def", ["finset"]], ["add", "theorem", "smul_empty", ["finset"]], ["add", "theorem", "smul_finset_card_le", ["finset"]], ["add", "theorem", "smul_finset_def", ["finset"]], ["add", "theorem", "smul_finset_empty", ["finset"]], ["add", "theorem", "smul_finset_mem_smul_finset", ["finset"]], ["add", "theorem", "smul_finset_nonempty_iff", ["finset"]], ["add", "theorem", "smul_finset_singleton", ["finset"]], ["add", "theorem", "smul_finset_subset_smul_finset", ["finset"]], ["add", "theorem", "smul_mem_smul", ["finset"]], ["add", "theorem", "smul_nonempty_iff", ["finset"]], ["add", "theorem", "smul_singleton", ["finset"]], ["add", "theorem", "smul_subset_smul", ["finset"]], ["add", "theorem", "subset_div", ["finset"]], ["add", "theorem", "subset_smul", ["finset"]], ["add", "theorem", "subset_vsub", ["finset"]], ["add", "theorem", "vsub_card_le", ["finset"]], ["add", "theorem", "vsub_def", ["finset"]], ["add", "theorem", "vsub_empty", ["finset"]], ["add", "theorem", "vsub_mem_vsub", ["finset"]], ["add", "theorem", "vsub_nonempty_iff", ["finset"]], ["add", "theorem", "vsub_singleton", ["finset"]], ["add", "theorem", "vsub_subset_vsub", ["finset"]], ["add", "theorem", "zero_div_subset", ["finset"]]]}, {"oldPath": "src/data/set/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}]}, {"timestamp": 1647942178, "sha": "28eb06f9", "message": "feat(analysis/calculus): define `diff_on_int_cont` (#12688)", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/diff_on_int_cont.lean", "changes": [["add", "theorem", "add", ["diff_on_int_cont"]], ["add", "theorem", "add_const", ["diff_on_int_cont"]], ["add", "theorem", "comp", ["diff_on_int_cont"]], ["add", "theorem", "const_add", ["diff_on_int_cont"]], ["add", "theorem", "const_smul", ["diff_on_int_cont"]], ["add", "theorem", "const_sub", ["diff_on_int_cont"]], ["add", "theorem", "differentiable_at'", ["diff_on_int_cont"]], ["add", "theorem", "differentiable_on_ball", ["diff_on_int_cont"]], ["add", "theorem", "inv", ["diff_on_int_cont"]], ["add", "theorem", "mk_ball", ["diff_on_int_cont"]], ["add", "theorem", "neg", ["diff_on_int_cont"]], ["add", "theorem", "smul", ["diff_on_int_cont"]], ["add", "theorem", "smul_const", ["diff_on_int_cont"]], ["add", "theorem", "sub", ["diff_on_int_cont"]], ["add", "theorem", "sub_const", ["diff_on_int_cont"]], ["add", "structure", "diff_on_int_cont", []], ["add", "theorem", "diff_on_int_cont_const", []], ["add", "theorem", "diff_on_int_cont_open", []], ["add", "theorem", "diff_on_int_cont_univ", []], ["add", "theorem", "comp_diff_on_int_cont", ["differentiable"]], ["add", "theorem", "diff_on_int_cont", ["differentiable"]], ["add", "theorem", "comp_diff_on_int_cont", ["differentiable_on"]], ["add", "theorem", "diff_on_int_cont", ["differentiable_on"]]]}, {"oldPath": "src/analysis/complex/abs_max.lean", "newPath": "src/analysis/complex/abs_max.lean", "changes": [["mod", "theorem", "norm_max_aux₂", ["complex"]]]}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": [["del", "theorem", "circle_integral_sub_inv_smul_of_continuous_on_of_differentiable_on", ["complex"]], ["del", "theorem", "circle_integral_sub_inv_smul_of_differentiable_on", ["complex"]], ["del", "theorem", "has_fpower_series_on_ball_of_continuous_on_of_differentiable_on", ["complex"]], ["add", "theorem", "circle_integral_sub_inv_smul", ["diff_on_int_cont"]], ["add", "theorem", "has_fpower_series_on_ball", ["diff_on_int_cont"]], ["add", "theorem", "circle_integral_sub_inv_smul", ["differentiable_on"]]]}, {"oldPath": "src/analysis/complex/liouville.lean", "newPath": "src/analysis/complex/liouville.lean", "changes": []}, {"oldPath": "src/analysis/complex/schwarz.lean", "newPath": "src/analysis/complex/schwarz.lean", "changes": []}]}, {"timestamp": 1647942177, "sha": "5826b2fb", "message": "feat(topology/order/hom/esakia): Esakia morphisms (#12241)\nDefine pseudo-epimorphisms and Esakia morphisms following the hom refactor.", "changes": [{"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/order/hom/esakia.lean", "changes": [["add", "theorem", "cancel_left", ["esakia_hom"]], ["add", "theorem", "cancel_right", ["esakia_hom"]], ["add", "theorem", "coe_comp", ["esakia_hom"]], ["add", "theorem", "coe_comp_continuous_order_hom", ["esakia_hom"]], ["add", "theorem", "coe_comp_pseudo_epimorphism", ["esakia_hom"]], ["add", "theorem", "coe_id", ["esakia_hom"]], ["add", "theorem", "coe_id_continuous_order_hom", ["esakia_hom"]], ["add", "theorem", "coe_id_pseudo_epimorphism", ["esakia_hom"]], ["add", "def", "comp", ["esakia_hom"]], ["add", "theorem", "comp_apply", ["esakia_hom"]], ["add", "theorem", "comp_assoc", ["esakia_hom"]], ["add", "theorem", "comp_id", ["esakia_hom"]], ["add", "theorem", "ext", ["esakia_hom"]], ["add", "theorem", "id_apply", ["esakia_hom"]], ["add", "theorem", "id_comp", ["esakia_hom"]], ["add", "theorem", "to_fun_eq_coe", ["esakia_hom"]], ["add", "def", "to_pseudo_epimorphism", ["esakia_hom"]], ["add", "structure", "esakia_hom", []], ["add", "theorem", "cancel_left", ["pseudo_epimorphism"]], ["add", "theorem", "cancel_right", ["pseudo_epimorphism"]], ["add", "theorem", "coe_comp", ["pseudo_epimorphism"]], ["add", "theorem", "coe_comp_order_hom", ["pseudo_epimorphism"]], ["add", "theorem", "coe_id", ["pseudo_epimorphism"]], ["add", "theorem", "coe_id_order_hom", ["pseudo_epimorphism"]], ["add", "def", "comp", ["pseudo_epimorphism"]], ["add", "theorem", "comp_apply", ["pseudo_epimorphism"]], ["add", "theorem", "comp_assoc", ["pseudo_epimorphism"]], ["add", "theorem", "comp_id", ["pseudo_epimorphism"]], ["add", "theorem", "ext", ["pseudo_epimorphism"]], ["add", "theorem", "id_apply", ["pseudo_epimorphism"]], ["add", "theorem", "id_comp", ["pseudo_epimorphism"]], ["add", "theorem", "to_fun_eq_coe", ["pseudo_epimorphism"]], ["add", "structure", "pseudo_epimorphism", []]]}]}, {"timestamp": 1647938126, "sha": "41d291c7", "message": "feat(algebra/big_operators/associated): generalize prod_primes_dvd (#12740)", "changes": [{"oldPath": "src/algebra/big_operators/associated.lean", "newPath": "src/algebra/big_operators/associated.lean", "changes": [["add", "theorem", "prod_primes_dvd", ["finset"]], ["add", "theorem", "prod_primes_dvd", ["multiset"]]]}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": [["del", "theorem", "prod_primes_dvd", []]]}]}, {"timestamp": 1647936235, "sha": "3ce4161c", "message": "refactor(measure_theory/integral): restrict interval integrals to real intervals (#12754)\nThis way `∫ x in 0 .. 1, (1 : real)` means what it should, not `∫ x : nat in 0 .. 1, (1 : real)`.", "changes": [{"oldPath": "src/analysis/calculus/parametric_interval_integral.lean", "newPath": "src/analysis/calculus/parametric_interval_integral.lean", "changes": [["mod", "theorem", "has_deriv_at_integral_of_dominated_loc_of_deriv_le", ["interval_integral"]], ["mod", "theorem", "has_deriv_at_integral_of_dominated_loc_of_lip", ["interval_integral"]], ["mod", "theorem", "has_fderiv_at_integral_of_dominated_loc_of_lip", ["interval_integral"]], ["mod", "theorem", "has_fderiv_at_integral_of_dominated_of_fderiv_le", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["mod", "theorem", "integrable_of_interval_integral_norm_bounded", ["measure_theory"]], ["mod", "theorem", "integrable_of_interval_integral_norm_tendsto", ["measure_theory"]], ["mod", "theorem", "integrable_on_Iic_of_interval_integral_norm_bounded", ["measure_theory"]], ["mod", "theorem", "integrable_on_Iic_of_interval_integral_norm_tendsto", ["measure_theory"]], ["mod", "theorem", "integrable_on_Ioi_of_interval_integral_norm_bounded", ["measure_theory"]], ["mod", "theorem", "integrable_on_Ioi_of_interval_integral_norm_tendsto", ["measure_theory"]], ["mod", "theorem", "interval_integral_tendsto_integral", ["measure_theory"]], ["mod", "theorem", "interval_integral_tendsto_integral_Iic", ["measure_theory"]], ["mod", "theorem", "interval_integral_tendsto_integral_Ioi", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "interval_integrable", ["antitone"]], ["mod", "theorem", "interval_integrable", ["antitone_on"]], ["mod", "theorem", "eventually_interval_integrable", ["filter", "tendsto"]], ["mod", "theorem", "eventually_interval_integrable_ae", ["filter", "tendsto"]], ["mod", "theorem", "abs", ["interval_integrable"]], ["mod", "theorem", "continuous_on_mul", ["interval_integrable"]], ["mod", "theorem", "def", ["interval_integrable"]], ["mod", "theorem", "mono", ["interval_integrable"]], ["mod", "theorem", "mono_fun'", ["interval_integrable"]], ["mod", "theorem", "mono_fun", ["interval_integrable"]], ["mod", "theorem", "mono_measure", ["interval_integrable"]], ["mod", "theorem", "mono_set", ["interval_integrable"]], ["mod", "theorem", "mono_set_ae", ["interval_integrable"]], ["mod", "theorem", "mul_continuous_on", ["interval_integrable"]], ["mod", "theorem", "trans_iterate", ["interval_integrable"]], ["mod", "def", "interval_integrable", []], ["mod", "theorem", "interval_integrable_const", []], ["mod", "theorem", "interval_integrable_const_iff", []], ["mod", "theorem", "interval_integrable_iff", []], ["mod", "theorem", "interval_integrable_iff_integrable_Ioc_of_le", []], ["mod", "theorem", "finite_at_inner", ["interval_integral", "FTC_filter"]], ["mod", "theorem", "abs_integral_eq_abs_integral_interval_oc", ["interval_integral"]], ["mod", "theorem", "continuous_of_dominated_interval", ["interval_integral"]], ["mod", "theorem", "continuous_on_primitive", ["interval_integral"]], ["mod", "theorem", "continuous_on_primitive_Icc", ["interval_integral"]], ["mod", "theorem", "continuous_on_primitive_interval'", ["interval_integral"]], ["mod", "theorem", "continuous_on_primitive_interval", ["interval_integral"]], ["mod", "theorem", "continuous_on_primitive_interval_left", ["interval_integral"]], ["mod", "theorem", "continuous_primitive", ["interval_integral"]], ["mod", "theorem", "continuous_within_at_primitive", ["interval_integral"]], ["mod", "theorem", "integral_cases", ["interval_integral"]], ["mod", "theorem", "integral_congr", ["interval_integral"]], ["mod", "theorem", "integral_congr_ae'", ["interval_integral"]], ["mod", "theorem", "integral_congr_ae", ["interval_integral"]], ["mod", "theorem", "integral_const", ["interval_integral"]], ["mod", "theorem", "integral_const_mul", ["interval_integral"]], ["mod", "theorem", "integral_div", ["interval_integral"]], ["mod", "theorem", "integral_eq_integral_of_support_subset", ["interval_integral"]], ["mod", "theorem", "integral_finset_sum", ["interval_integral"]], ["mod", "theorem", "integral_indicator", ["interval_integral"]], ["mod", "theorem", "integral_mono_on", ["interval_integral"]], ["mod", "theorem", "integral_mul_const", ["interval_integral"]], ["mod", "theorem", "integral_nonneg", ["interval_integral"]], ["mod", "theorem", "integral_smul_const", ["interval_integral"]], ["mod", "theorem", "integral_zero_ae", ["interval_integral"]], ["mod", "theorem", "interval_integral_eq_integral_interval_oc", ["interval_integral"]], ["mod", "theorem", "norm_integral_eq_norm_integral_Ioc", ["interval_integral"]], ["mod", "theorem", "norm_integral_min_max", ["interval_integral"]], ["mod", "theorem", "sub_le_integral_of_has_deriv_right_of_le", ["interval_integral"]], ["mod", "theorem", "sum_integral_adjacent_intervals", ["interval_integral"]], ["mod", "def", "interval_integral", []], ["mod", "theorem", "continuous_primitive", ["measure_theory", "integrable"]], ["mod", "theorem", "interval_integrable", ["measure_theory", "integrable"]], ["mod", "theorem", "interval_integrable", ["measure_theory", "integrable_on"]], ["mod", "theorem", "interval_integrable", ["monotone"]], ["mod", "theorem", "interval_integrable", ["monotone_on"]]]}]}, {"timestamp": 1647929755, "sha": "b0f585c5", "message": "feat(combinatorics/simple_graph/inc_matrix): Incidence matrix (#10867)\nDefine the incidence matrix of a simple graph and prove the basics, including some stuff about matrix multiplication.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "ite_and_mul_zero", []]]}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "card_incidence_finset_eq_degree", ["simple_graph"]], ["del", "theorem", "incidence_set_inter_incidence_set", ["simple_graph"]], ["add", "theorem", "incidence_set_inter_incidence_set_of_adj", ["simple_graph"]], ["add", "theorem", "incidence_set_inter_incidence_set_of_not_adj", ["simple_graph"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/inc_matrix.lean", "changes": [["add", "def", "inc_matrix", ["simple_graph"]], ["add", "theorem", "inc_matrix_apply'", ["simple_graph"]], ["add", "theorem", "inc_matrix_apply", ["simple_graph"]], ["add", "theorem", "inc_matrix_apply_eq_one_iff", ["simple_graph"]], ["add", "theorem", "inc_matrix_apply_eq_zero_iff", ["simple_graph"]], ["add", "theorem", "inc_matrix_apply_mul_inc_matrix_apply", ["simple_graph"]], ["add", "theorem", "inc_matrix_apply_mul_inc_matrix_apply_of_not_adj", ["simple_graph"]], ["add", "theorem", "inc_matrix_mul_transpose", ["simple_graph"]], ["add", "theorem", "inc_matrix_mul_transpose_apply_of_adj", ["simple_graph"]], ["add", "theorem", "inc_matrix_mul_transpose_diag", ["simple_graph"]], ["add", "theorem", "inc_matrix_of_mem_incidence_set", ["simple_graph"]], ["add", "theorem", "inc_matrix_of_not_mem_incidence_set", ["simple_graph"]], ["add", "theorem", "inc_matrix_transpose_mul_diag", ["simple_graph"]], ["add", "theorem", "sum_inc_matrix_apply", ["simple_graph"]], ["add", "theorem", "sum_inc_matrix_apply_of_mem_edge_set", ["simple_graph"]], ["add", "theorem", "sum_inc_matrix_apply_of_not_mem_edge_set", ["simple_graph"]]]}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "card_doubleton", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "coe_filter_univ", ["finset"]], ["add", "theorem", "filter_mem_univ_eq_to_finset", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}]}, {"timestamp": 1647919577, "sha": "01eb653d", "message": "chore(scripts): update nolints.txt (#12868)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1647912987, "sha": "e51377fe", "message": "feat(logic/basic): `ulift.down` is injective (#12824)\nWe also make the arguments to `plift.down_inj` inferred.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "down_inj", ["plift"]], ["add", "theorem", "down_injective", ["plift"]], ["add", "theorem", "down_inj", ["ulift"]], ["add", "theorem", "down_injective", ["ulift"]]]}]}, {"timestamp": 1647909445, "sha": "d71e06cc", "message": "feat(topology/algebra/monoid): construct a unit from limits of units and their inverses (#12760)", "changes": [{"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "def", "units", ["filter", "tendsto"]]]}]}, {"timestamp": 1647893283, "sha": "f9dc84ed", "message": "feat(topology/continuous_function/units): basic results about units in `C(α, β)` (#12687)\nThis establishes a few facts about units in `C(α, β)` including the equivalence `C(α, βˣ) ≃ C(α, β)ˣ`. Moreover, when `β` is a complete normed field, we show that the spectrum of `f : C(α, β)` is precisely `set.range f`.", "changes": [{"oldPath": null, "newPath": "src/topology/continuous_function/units.lean", "changes": [["add", "theorem", "is_unit_iff_forall_is_unit", ["continuous_map"]], ["add", "theorem", "is_unit_iff_forall_ne_zero", ["continuous_map"]], ["add", "theorem", "spectrum_eq_range", ["continuous_map"]], ["add", "def", "units_lift", ["continuous_map"]], ["add", "theorem", "is_unit_unit_continuous", ["normed_ring"]]]}]}, {"timestamp": 1647890750, "sha": "8001ea54", "message": "feat(category_theory/abelian): right derived functor (#12841)\nThis pr dualises derived.lean. Right derived functor and natural transformation between right derived functors and related lemmas are formalised. \nThe docs string currently contains more than what is in this file, but everything else will come shortly after.", "changes": [{"oldPath": "src/category_theory/abelian/ext.lean", "newPath": "src/category_theory/abelian/ext.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/derived.lean", "newPath": "src/category_theory/abelian/left_derived.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/abelian/right_derived.lean", "changes": [["add", "def", "right_derived", ["category_theory", "functor"]], ["add", "theorem", "right_derived_map_eq", ["category_theory", "functor"]], ["add", "def", "right_derived_obj_injective_succ", ["category_theory", "functor"]], ["add", "def", "right_derived_obj_injective_zero", ["category_theory", "functor"]], ["add", "def", "right_derived_obj_iso", ["category_theory", "functor"]], ["add", "def", "right_derived", ["category_theory", "nat_trans"]], ["add", "theorem", "right_derived_comp", ["category_theory", "nat_trans"]], ["add", "theorem", "right_derived_eq", ["category_theory", "nat_trans"]], ["add", "theorem", "right_derived_id", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/functor/derived.lean", "newPath": "src/category_theory/functor/left_derived.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/tor.lean", "newPath": "src/category_theory/monoidal/tor.lean", "changes": []}]}, {"timestamp": 1647885919, "sha": "25ec622f", "message": "feat(data/polynomial/eval + data/polynomial/ring_division): move a lemma and remove assumptions (#12854)\nA lemma about composition of polynomials assumed `comm_ring` and `is_domain`. The new version assumes `semiring`.\nI golfed slightly the original proof: it may very well be that a shorter proof is available!\nI also moved the lemma, since it seems better for this lemma to appear in the file where the definition of `comp` appears.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "coeff_comp_degree_mul_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["del", "theorem", "coeff_comp_degree_mul_degree", ["polynomial"]]]}]}, {"timestamp": 1647885918, "sha": "fd4a034d", "message": "refactor(analysis/locally_convex/with_seminorms): use abbreviations to allow for dot notation (#12846)", "changes": [{"oldPath": "src/analysis/locally_convex/with_seminorms.lean", "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["mod", "theorem", "continuous_from_bounded", ["seminorm"]], ["del", "def", "seminorm_add_group_filter_basis", []], ["del", "def", "seminorm_basis_zero", []], ["del", "theorem", "seminorm_basis_zero_add", []], ["del", "theorem", "seminorm_basis_zero_iff", []], ["del", "theorem", "seminorm_basis_zero_intersect", []], ["del", "theorem", "seminorm_basis_zero_mem", []], ["del", "theorem", "seminorm_basis_zero_neg", []], ["del", "theorem", "seminorm_basis_zero_nonempty", []], ["del", "theorem", "seminorm_basis_zero_singleton_mem", []], ["del", "theorem", "seminorm_basis_zero_smul", []], ["del", "theorem", "seminorm_basis_zero_smul_left", []], ["del", "theorem", "seminorm_basis_zero_smul_right", []], ["del", "theorem", "seminorm_basis_zero_zero", []], ["add", "def", "basis_sets", ["seminorm_family"]], ["add", "theorem", "basis_sets_add", ["seminorm_family"]], ["add", "theorem", "basis_sets_iff", ["seminorm_family"]], ["add", "theorem", "basis_sets_intersect", ["seminorm_family"]], ["add", "theorem", "basis_sets_mem", ["seminorm_family"]], ["add", "theorem", "basis_sets_neg", ["seminorm_family"]], ["add", "theorem", "basis_sets_nonempty", ["seminorm_family"]], ["add", "theorem", "basis_sets_singleton_mem", ["seminorm_family"]], ["add", "theorem", "basis_sets_smul", ["seminorm_family"]], ["add", "theorem", "basis_sets_smul_left", ["seminorm_family"]], ["add", "theorem", "basis_sets_smul_right", ["seminorm_family"]], ["add", "theorem", "basis_sets_zero", ["seminorm_family"]], ["add", "theorem", "to_locally_convex_space", ["seminorm_family"]], ["add", "theorem", "with_seminorms_eq", ["seminorm_family"]], ["add", "theorem", "with_seminorms_of_has_basis", ["seminorm_family"]], ["add", "theorem", "with_seminorms_of_nhds", ["seminorm_family"]], ["add", "def", "seminorm_family", []], ["del", "def", "seminorm_module_filter_basis", []], ["del", "theorem", "to_locally_convex_space", ["with_seminorms"]], ["del", "theorem", "with_seminorms_eq", []], ["del", "theorem", "with_seminorms_of_has_basis", []], ["del", "theorem", "with_seminorms_of_nhds", []]]}]}, {"timestamp": 1647880537, "sha": "a2e48025", "message": "feat(model_theory/fraisse): Defines Fraïssé classes (#12817)\nDefines the age of a structure\n(Mostly) characterizes the ages of countable structures\nDefines Fraïssé classes", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/finitely_generated.lean", "newPath": "src/model_theory/finitely_generated.lean", "changes": [["add", "theorem", "cg", ["first_order", "language", "Structure", "fg"]], ["add", "theorem", "sup", ["first_order", "language", "substructure", "cg"]], ["del", "theorem", "cg_sup", ["first_order", "language", "substructure"]], ["add", "theorem", "sup", ["first_order", "language", "substructure", "fg"]], ["del", "theorem", "fg_sup", ["first_order", "language", "substructure"]]]}, {"oldPath": null, "newPath": "src/model_theory/fraisse.lean", "changes": [["add", "theorem", "countable_quotient", ["first_order", "language", "age"]], ["add", "theorem", "hereditary", ["first_order", "language", "age"]], ["add", "theorem", "is_equiv_invariant", ["first_order", "language", "age"]], ["add", "theorem", "joint_embedding", ["first_order", "language", "age"]], ["add", "def", "age", ["first_order", "language"]], ["add", "def", "amalgamation", ["first_order", "language"]], ["add", "def", "hereditary", ["first_order", "language"]], ["add", "def", "joint_embedding", ["first_order", "language"]]]}]}, {"timestamp": 1647880535, "sha": "1b787d6b", "message": "feat(linear_algebra/span): generalize span_singleton_smul_eq (#12736)", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/projective_space/basic.lean", "newPath": "src/linear_algebra/projective_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "span_singleton_group_smul_eq", ["submodule"]], ["mod", "theorem", "span_singleton_smul_eq", ["submodule"]], ["mod", "theorem", "span_singleton_smul_le", ["submodule"]]]}]}, {"timestamp": 1647880534, "sha": "df299a19", "message": "docs(order/filter/basic): fix docstring of generate (#12734)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1647880533, "sha": "09750eb8", "message": "feat(measure_theory/function/uniform_integrable): add API for uniform integrability in the probability sense (#12678)\nUniform integrability in probability theory is commonly defined as the uniform existence of a number for which the expectation of the random variables restricted on the set for which they are greater than said number is arbitrarily small. We have defined it \nin mathlib, on the other hand, as uniform integrability in the measure theory sense + existence of a uniform bound of the Lp norms. \nThis PR proves the first definition implies the second while a later PR will deal with the reverse direction.", "changes": [{"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["mod", "theorem", "tendsto_Lp_of_tendsto_in_measure", ["measure_theory"]], ["mod", "theorem", "tendsto_in_measure_iff_tendsto_Lp", ["measure_theory"]], ["mod", "theorem", "unif_integrable_congr_ae", ["measure_theory"]], ["add", "theorem", "unif_integrable_of'", ["measure_theory"]], ["add", "theorem", "unif_integrable_of", ["measure_theory"]], ["mod", "theorem", "unif_integrable_of_tendsto_Lp", ["measure_theory"]], ["add", "theorem", "unif_integrable_zero_meas", ["measure_theory"]], ["add", "theorem", "ae_eq", ["measure_theory", "uniform_integrable"]], ["add", "theorem", "uniform_integrable_congr_ae", ["measure_theory"]], ["add", "theorem", "uniform_integrable_const", ["measure_theory"]], ["add", "theorem", "uniform_integrable_fintype", ["measure_theory"]], ["add", "theorem", "uniform_integrable_of", ["measure_theory"]], ["add", "theorem", "uniform_integrable_subsingleton", ["measure_theory"]], ["add", "theorem", "uniform_integrable_zero_meas", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "indicator_meas_zero", []]]}]}, {"timestamp": 1647880532, "sha": "715f984a", "message": "feat(model_theory/terms_and_formulas): Prenex Normal Form (#12558)\nDefines `first_order.language.bounded_formula.to_prenex`, a function which takes a formula and outputs an equivalent formula in prenex normal form.\nProves inductive principles based on the fact that every formula is equivalent to one in prenex normal form.", "changes": [{"oldPath": "src/data/fin/tuple/basic.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": [["add", "theorem", "snoc_comp_cast_succ", ["fin"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "theorem", "refl", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "symm", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "trans", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "all_semantically_equivalent_not_ex_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "ex_semantically_equivalent_not_all_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "imp_semantically_equivalent_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "imp_semantically_equivalent_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "induction_on_all_ex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "induction_on_exists_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "theorem", "is_prenex_to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "is_prenex_to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "cast_le", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "lift_at", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "to_prenex_imp", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "to_prenex_imp_right", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "not_all_is_atomic", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "not_all_is_qf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "not_ex_is_atomic", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "not_ex_is_qf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "semantically_equivalent_to_prenex", ["first_order", "language", "bounded_formula"]], ["add", "def", "to_prenex", ["first_order", "language", "bounded_formula"]], ["add", "def", "to_prenex_imp", ["first_order", "language", "bounded_formula"]], ["add", "def", "to_prenex_imp_right", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "to_prenex_is_prenex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "is_atomic_graph", ["first_order", "language", "formula"]]]}]}, {"timestamp": 1647873775, "sha": "091f27e8", "message": "chore(order/{complete_lattice,sup_indep}): move `complete_lattice.independent` (#12588)\nPutting this here means that in future we can talk about `pairwise_disjoint` at the same time, which was previously defined downstream of `complete_lattice.independent`.\nThis commit only moves existing declarations and adjusts module docstrings.\nThe new authorship comes from #5971 and #7199, which predate this file.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "theorem", "comp", ["complete_lattice", "independent"]], ["del", "theorem", "disjoint", ["complete_lattice", "independent"]], ["del", "theorem", "disjoint_bsupr", ["complete_lattice", "independent"]], ["del", "theorem", "map_order_iso", ["complete_lattice", "independent"]], ["del", "theorem", "mono", ["complete_lattice", "independent"]], ["del", "def", "independent", ["complete_lattice"]], ["del", "theorem", "independent_def''", ["complete_lattice"]], ["del", "theorem", "independent_def'", ["complete_lattice"]], ["del", "theorem", "independent_def", ["complete_lattice"]], ["del", "theorem", "independent_empty", ["complete_lattice"]], ["del", "theorem", "independent_map_order_iso_iff", ["complete_lattice"]], ["del", "theorem", "independent_pair", ["complete_lattice"]], ["del", "theorem", "independent_pempty", ["complete_lattice"]], ["del", "theorem", "disjoint", ["complete_lattice", "set_independent"]], ["del", "theorem", "disjoint_Sup", ["complete_lattice", "set_independent"]], ["del", "theorem", "mono", ["complete_lattice", "set_independent"]], ["del", "def", "set_independent", ["complete_lattice"]], ["del", "theorem", "set_independent_empty", ["complete_lattice"]], ["del", "theorem", "set_independent_iff", ["complete_lattice"]], ["del", "theorem", "set_independent_pair", ["complete_lattice"]]]}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": [["add", "theorem", "comp", ["complete_lattice", "independent"]], ["add", "theorem", "disjoint", ["complete_lattice", "independent"]], ["add", "theorem", "disjoint_bsupr", ["complete_lattice", "independent"]], ["add", "theorem", "map_order_iso", ["complete_lattice", "independent"]], ["add", "theorem", "mono", ["complete_lattice", "independent"]], ["add", "def", "independent", ["complete_lattice"]], ["add", "theorem", "independent_def''", ["complete_lattice"]], ["add", "theorem", "independent_def'", ["complete_lattice"]], ["add", "theorem", "independent_def", ["complete_lattice"]], ["add", "theorem", "independent_empty", ["complete_lattice"]], ["add", "theorem", "independent_map_order_iso_iff", ["complete_lattice"]], ["add", "theorem", "independent_pair", ["complete_lattice"]], ["add", "theorem", "independent_pempty", ["complete_lattice"]], ["add", "theorem", "disjoint", ["complete_lattice", "set_independent"]], ["add", "theorem", "disjoint_Sup", ["complete_lattice", "set_independent"]], ["add", "theorem", "mono", ["complete_lattice", "set_independent"]], ["add", "def", "set_independent", ["complete_lattice"]], ["add", "theorem", "set_independent_empty", ["complete_lattice"]], ["add", "theorem", "set_independent_iff", ["complete_lattice"]], ["add", "theorem", "set_independent_pair", ["complete_lattice"]]]}]}, {"timestamp": 1647866806, "sha": "135c5742", "message": "feat(model_theory/definability): Definability lemmas (#12262)\nProves several lemmas to work with definability over different parameter sets.\nShows that definability is closed under projection.", "changes": [{"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": [["add", "theorem", "image_comp", ["set", "definable"]], ["add", "theorem", "image_comp_embedding", ["set", "definable"]], ["add", "theorem", "image_comp_sum_inl_fin", ["set", "definable"]], ["add", "theorem", "map_expansion", ["set", "definable"]], ["add", "theorem", "mono", ["set", "definable"]], ["add", "theorem", "definable_iff_empty_definable_with_params", ["set"]], ["add", "theorem", "empty_definable_iff", ["set"]], ["add", "theorem", "coe_cast_add_zero", ["set", "fin"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["mod", "def", "on_bounded_formula", ["first_order", "language", "Lhom"]], ["mod", "def", "on_formula", ["first_order", "language", "Lhom"]], ["mod", "def", "on_term", ["first_order", "language", "Lhom"]]]}]}, {"timestamp": 1647860922, "sha": "86055c5d", "message": "split(data/{finset,set}/pointwise): Split off `algebra.pointwise` (#12831)\nSplit `algebra.pointwise` into\n* `data.set.pointwise`: Pointwise operations on `set`\n* `data.finset.pointwise`: Pointwise operations on `finset`\nI'm crediting\n* The same people for `data.set.pointwise`\n* Floris for #3541", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/bounds.lean", "newPath": "src/algebra/bounds.lean", "changes": []}, {"oldPath": "src/algebra/module/pointwise_pi.lean", "newPath": "src/algebra/module/pointwise_pi.lean", "changes": []}, {"oldPath": "src/algebra/order/module.lean", "newPath": "src/algebra/order/module.lean", "changes": []}, {"oldPath": "src/algebra/star/pointwise.lean", "newPath": "src/algebra/star/pointwise.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/interval.lean", "newPath": "src/data/dfinsupp/interval.lean", "changes": []}, {"oldPath": "src/data/finset/finsupp.lean", "newPath": "src/data/finset/finsupp.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finset/pointwise.lean", "changes": [["add", "theorem", "coe_mul", ["finset"]], ["add", "theorem", "coe_one", ["finset"]], ["add", "theorem", "coe_pow", ["finset"]], ["add", "theorem", "empty_mul", ["finset"]], ["add", "theorem", "image_mul_left'", ["finset"]], ["add", "theorem", "image_mul_left", ["finset"]], ["add", "theorem", "image_mul_prod", ["finset"]], ["add", "theorem", "image_mul_right'", ["finset"]], ["add", "theorem", "image_mul_right", ["finset"]], ["add", "theorem", "image_one", ["finset"]], ["add", "theorem", "mem_mul", ["finset"]], ["add", "theorem", "mem_one", ["finset"]], ["add", "theorem", "mul_card_le", ["finset"]], ["add", "theorem", "mul_def", ["finset"]], ["add", "theorem", "mul_empty", ["finset"]], ["add", "theorem", "mul_mem_mul", ["finset"]], ["add", "theorem", "mul_nonempty_iff", ["finset"]], ["add", "theorem", "mul_singleton", ["finset"]], ["add", "theorem", "mul_subset_mul", ["finset"]], ["add", "theorem", "mul_zero_subset", ["finset"]], ["add", "theorem", "mul_zero", ["finset", "nonempty"]], ["add", "theorem", "zero_mul", ["finset", "nonempty"]], ["add", "theorem", "one_mem_one", ["finset"]], ["add", "theorem", "one_nonempty", ["finset"]], ["add", "theorem", "one_subset", ["finset"]], ["add", "theorem", "preimage_mul_left_one'", ["finset"]], ["add", "theorem", "preimage_mul_left_one", ["finset"]], ["add", "theorem", "preimage_mul_left_singleton", ["finset"]], ["add", "theorem", "preimage_mul_right_one'", ["finset"]], ["add", "theorem", "preimage_mul_right_one", ["finset"]], ["add", "theorem", "preimage_mul_right_singleton", ["finset"]], ["add", "theorem", "singleton_mul", ["finset"]], ["add", "theorem", "singleton_mul_singleton", ["finset"]], ["add", "theorem", "singleton_one", ["finset"]], ["add", "theorem", "subset_mul", ["finset"]], ["add", "theorem", "zero_mul_subset", ["finset"]]]}, {"oldPath": "src/data/real/pointwise.lean", "newPath": "src/data/real/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/data/set/pointwise.lean", "changes": [["del", "theorem", "coe_mul", ["finset"]], ["del", "theorem", "coe_one", ["finset"]], ["del", "theorem", "coe_pow", ["finset"]], ["del", "theorem", "empty_mul", ["finset"]], ["del", "theorem", "image_mul_left'", ["finset"]], ["del", "theorem", "image_mul_left", ["finset"]], ["del", "theorem", "image_mul_prod", ["finset"]], ["del", "theorem", "image_mul_right'", ["finset"]], ["del", "theorem", "image_mul_right", ["finset"]], ["del", "theorem", "image_one", ["finset"]], ["del", "theorem", "mem_mul", ["finset"]], ["del", "theorem", "mem_one", ["finset"]], ["del", "theorem", "mul_card_le", ["finset"]], ["del", "theorem", "mul_def", ["finset"]], ["del", "theorem", "mul_empty", ["finset"]], ["del", "theorem", "mul_mem_mul", ["finset"]], ["del", "theorem", "mul_nonempty_iff", ["finset"]], ["del", "theorem", "mul_singleton", ["finset"]], ["del", "theorem", "mul_subset_mul", ["finset"]], ["del", "theorem", "mul_zero_subset", ["finset"]], ["del", "theorem", "mul_zero", ["finset", "nonempty"]], ["del", "theorem", "zero_mul", ["finset", "nonempty"]], ["del", "theorem", "one_mem_one", ["finset"]], ["del", "theorem", "one_nonempty", ["finset"]], ["del", "theorem", "one_subset", ["finset"]], ["del", "theorem", "preimage_mul_left_one'", ["finset"]], ["del", "theorem", "preimage_mul_left_one", ["finset"]], ["del", "theorem", "preimage_mul_left_singleton", ["finset"]], ["del", "theorem", "preimage_mul_right_one'", ["finset"]], ["del", "theorem", "preimage_mul_right_one", ["finset"]], ["del", "theorem", "preimage_mul_right_singleton", ["finset"]], ["del", "theorem", "singleton_mul", ["finset"]], ["del", "theorem", "singleton_mul_singleton", ["finset"]], ["del", "theorem", "singleton_one", ["finset"]], ["del", "theorem", "singleton_zero_mul", ["finset"]], ["del", "theorem", "subset_mul", ["finset"]], ["del", "theorem", "zero_mul_subset", ["finset"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/pointwise.lean", "newPath": "src/ring_theory/subsemiring/pointwise.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1647854003, "sha": "8161ba28", "message": "feat(model_theory/ultraproducts): Ultraproducts and the Compactness Theorem (#12531)\nDefines `filter.product`, a dependent version of `filter.germ`.\nDefines a structure on an ultraproduct (a `filter.product` with respect to an ultrafilter).\nProves Łoś's Theorem, characterizing when an ultraproduct realizes a formula.\nProves the Compactness theorem with ultraproducts.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/model_theory/quotients.lean", "newPath": "src/model_theory/quotients.lean", "changes": []}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["del", "def", "realize_sentence", ["first_order", "language"]], ["add", "def", "realize", ["first_order", "language", "sentence"]]]}, {"oldPath": null, "newPath": "src/model_theory/ultraproducts.lean", "changes": [["add", "theorem", "is_satisfiable_iff_is_finitely_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "bounded_formula_realize_cast", ["first_order", "language", "ultraproduct"]], ["add", "theorem", "fun_map_cast", ["first_order", "language", "ultraproduct"]], ["add", "theorem", "realize_formula_cast", ["first_order", "language", "ultraproduct"]], ["add", "theorem", "sentence_realize", ["first_order", "language", "ultraproduct"]], ["add", "theorem", "term_realize_cast", ["first_order", "language", "ultraproduct"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["add", "def", "product", ["filter"]], ["add", "def", "product_setoid", ["filter"]]]}]}, {"timestamp": 1647848425, "sha": "8e9abe3c", "message": "feat(measure_theory/constructions/borel_space): generalize a lemma (#12843)\nGeneralize `measurable_limit_of_tendsto_metric_ae` from\n`at_top : filter ℕ` to any countably generated filter on a nonempty type.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "measurable_limit_of_tendsto_metric_ae", []]]}]}, {"timestamp": 1647841915, "sha": "d902c222", "message": "chore(category/abelian/derived): shorten proof (#12847)", "changes": [{"oldPath": "src/category_theory/abelian/derived.lean", "newPath": "src/category_theory/abelian/derived.lean", "changes": []}]}, {"timestamp": 1647841914, "sha": "395019ee", "message": "feat(algebra/homology/additive): dualise statement of chain complex to cochain complex (#12840)", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": [["add", "def", "single₀_map_homological_complex", ["cochain_complex"]], ["add", "theorem", "single₀_map_homological_complex_hom_app_succ", ["cochain_complex"]], ["add", "theorem", "single₀_map_homological_complex_hom_app_zero", ["cochain_complex"]], ["add", "theorem", "single₀_map_homological_complex_inv_app_succ", ["cochain_complex"]], ["add", "theorem", "single₀_map_homological_complex_inv_app_zero", ["cochain_complex"]]]}]}, {"timestamp": 1647841913, "sha": "69d3d16b", "message": "feat(polynomial/derivative): tidy+new theorems (#12833)\nAdds `iterate_derivative_eq_zero` and strengthens other results.\nNew theorems: `iterate_derivative_eq_zero`, `nat_degree_derivative_le`\nDeleted: `derivative_lhom` - it is one already.\nMisc: Turn a docstring into a comment\nEverything else only got moved around + golfed, in order to weaken assumptions.", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["del", "def", "derivative_lhom", ["polynomial"]], ["del", "theorem", "derivative_lhom_coe", ["polynomial"]], ["mod", "theorem", "derivative_neg", ["polynomial"]], ["mod", "theorem", "derivative_sub", ["polynomial"]], ["add", "theorem", "iterate_derivative_eq_zero", ["polynomial"]], ["mod", "theorem", "iterate_derivative_neg", ["polynomial"]], ["mod", "theorem", "iterate_derivative_sub", ["polynomial"]], ["add", "theorem", "nat_degree_derivative_le", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_zero_of_derivative_eq_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}]}, {"timestamp": 1647841912, "sha": "06017e07", "message": "feat(order/compare): add 4 dot notation lemmas (#12832)", "changes": [{"oldPath": "src/order/compare.lean", "newPath": "src/order/compare.lean", "changes": [["add", "theorem", "cmp_eq_eq'", ["eq"]], ["add", "theorem", "cmp_eq_eq", ["eq"]], ["add", "theorem", "cmp_eq_gt", ["has_lt", "lt"]], ["add", "theorem", "cmp_eq_lt", ["has_lt", "lt"]]]}]}, {"timestamp": 1647841911, "sha": "f5987b2a", "message": "chore(data/real/basic): tweak lemmas about `of_cauchy` (#12829)\nThese lemmas are about `real.of_cauchy` not `real.cauchy`, as their name suggests.\nThis also flips the direction of some of the lemmas to be consistent with the zero and one lemmas.\nFinally, this adds the lemmas about `real.cauchy` that are missing.", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["del", "theorem", "add_cauchy", ["real"]], ["add", "theorem", "cauchy_add", ["real"]], ["add", "theorem", "cauchy_inv", ["real"]], ["add", "theorem", "cauchy_mul", ["real"]], ["add", "theorem", "cauchy_neg", ["real"]], ["add", "theorem", "cauchy_one", ["real"]], ["add", "theorem", "cauchy_zero", ["real"]], ["del", "theorem", "inv_cauchy", ["real"]], ["mod", "theorem", "mk_add", ["real"]], ["mod", "theorem", "mk_mul", ["real"]], ["mod", "theorem", "mk_neg", ["real"]], ["mod", "theorem", "mk_one", ["real"]], ["mod", "theorem", "mk_zero", ["real"]], ["del", "theorem", "mul_cauchy", ["real"]], ["del", "theorem", "neg_cauchy", ["real"]], ["add", "theorem", "of_cauchy_add", ["real"]], ["add", "theorem", "of_cauchy_inv", ["real"]], ["add", "theorem", "of_cauchy_mul", ["real"]], ["add", "theorem", "of_cauchy_neg", ["real"]], ["add", "theorem", "of_cauchy_one", ["real"]], ["add", "theorem", "of_cauchy_zero", ["real"]], ["del", "theorem", "one_cauchy", ["real"]], ["del", "theorem", "zero_cauchy", ["real"]]]}]}, {"timestamp": 1647841910, "sha": "772c7766", "message": "feat(ring_theory/algebraic): Added basic lemmas + golf (#12820)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["mod", "theorem", "is_algebraic_algebra_map", []], ["mod", "theorem", "is_algebraic_algebra_map_of_is_algebraic", []], ["add", "theorem", "is_algebraic_nat", []], ["add", "theorem", "is_algebraic_one", []], ["add", "theorem", "is_algebraic_zero", []], ["mod", "theorem", "is_algebraic", ["is_integral"]], ["add", "theorem", "is_transcendental_of_subsingleton", []]]}]}, {"timestamp": 1647840044, "sha": "60af3bda", "message": "feat(data/rat/denumerable): Make `mk_rat` into a simp lemma (#12821)", "changes": [{"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": [["mod", "theorem", "mk_rat", ["cardinal"]]]}]}, {"timestamp": 1647807283, "sha": "656f7494", "message": "feat(analysis/locally_convex): define von Neumann boundedness (#12449)\nDefine the von Neumann boundedness and show elementary properties, including that it defines a bornology.", "changes": [{"oldPath": null, "newPath": "src/analysis/locally_convex/bounded.lean", "changes": [["add", "theorem", "is_bounded_iff_is_vonN_bounded", ["bornology"]], ["add", "theorem", "of_topological_space_le", ["bornology", "is_vonN_bounded"]], ["add", "theorem", "subset", ["bornology", "is_vonN_bounded"]], ["add", "theorem", "union", ["bornology", "is_vonN_bounded"]], ["add", "def", "is_vonN_bounded", ["bornology"]], ["add", "theorem", "is_vonN_bounded_covers", ["bornology"]], ["add", "theorem", "is_vonN_bounded_empty", ["bornology"]], ["add", "theorem", "is_vonN_bounded_iff", ["bornology"]], ["add", "theorem", "is_vonN_bounded_singleton", ["bornology"]], ["add", "def", "vonN_bornology", ["bornology"]]]}, {"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": [["add", "theorem", "is_bounded_of_bounded_iff", ["bornology"]], ["add", "theorem", "is_cobounded_of_bounded_iff", ["bornology"]]]}]}, {"timestamp": 1647789950, "sha": "9502db1f", "message": "refactor(group_theory/group_action/basic): Golf definition of action on cosets (#12823)\nThis PR golfs the definition of the left-multiplication action on left cosets.\nI deleted `mul_left_cosets` since it's the same as `•` and has no API.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "def", "mul_left_cosets", ["mul_action"]]]}]}, {"timestamp": 1647779199, "sha": "f2fa1cf9", "message": "feat(category_theory/abelian/*): add some missing lemmas (#12839)", "changes": [{"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "inv", ["category_theory", "abelian", "kernel", "lift"]]]}, {"oldPath": "src/category_theory/abelian/homology.lean", "newPath": "src/category_theory/abelian/homology.lean", "changes": [["add", "theorem", "map_ι", ["homology"]]]}]}, {"timestamp": 1647736793, "sha": "cdd05728", "message": "chore(ring_theory/algebraic): fix typo + golf (#12834)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1647732959, "sha": "6abfb1d7", "message": "feat(analysis/normed_space/spectrum): Prove the Gelfand-Mazur theorem (#12787)\n**Gelfand-Mazur theorem** For a complex Banach division algebra, the natural `algebra_map ℂ A` is an algebra isomorphism whose inverse is given by selecting the (unique) element of `spectrum ℂ a`.\n- [x] depends on: #12132", "changes": [{"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "algebra_map_eq_of_mem", ["spectrum"]]]}]}, {"timestamp": 1647723844, "sha": "cd012fbe", "message": "chore(ring_theory/ideal): use `ideal.mul_mem_left` instead of `submodule.smul_mem` (#12830)\nIn one place this saves one rewrite.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1647718381, "sha": "f1200764", "message": "feat(category_theory): (co)equalizers and (co)kernels when composing with monos/epis (#12828)", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "has_coequalizer_epi_comp", ["category_theory", "limits"]], ["add", "theorem", "has_equalizer_comp_mono", ["category_theory", "limits"]], ["add", "def", "is_coequalizer_epi_comp", ["category_theory", "limits"]], ["add", "def", "is_equalizer_comp_mono", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "is_cokernel_epi_comp", ["category_theory", "limits"]], ["add", "def", "is_kernel_comp_mono", ["category_theory", "limits"]]]}]}, {"timestamp": 1647718380, "sha": "49cd1cc6", "message": "refactor(analysis/seminorm): move topology induced by seminorms to its own file (#12826)\nBesides the copy and paste I removed the namespace `seminorm` from most parts (it is still there for the boundedness definitions and statements) and updated the module docstrings. No real code has changed.", "changes": [{"oldPath": null, "newPath": "src/analysis/locally_convex/with_seminorms.lean", "changes": [["add", "theorem", "to_locally_convex_space'", ["normed_space"]], ["add", "theorem", "const_is_bounded", ["seminorm"]], ["add", "theorem", "cont_normed_space_to_with_seminorms", ["seminorm"]], ["add", "theorem", "cont_with_seminorms_normed_space", ["seminorm"]], ["add", "theorem", "continuous_from_bounded", ["seminorm"]], ["add", "def", "is_bounded", ["seminorm"]], ["add", "theorem", "is_bounded_const", ["seminorm"]], ["add", "theorem", "is_bounded_sup", ["seminorm"]], ["add", "def", "seminorm_add_group_filter_basis", []], ["add", "def", "seminorm_basis_zero", []], ["add", "theorem", "seminorm_basis_zero_add", []], ["add", "theorem", "seminorm_basis_zero_iff", []], ["add", "theorem", "seminorm_basis_zero_intersect", []], ["add", "theorem", "seminorm_basis_zero_mem", []], ["add", "theorem", "seminorm_basis_zero_neg", []], ["add", "theorem", "seminorm_basis_zero_nonempty", []], ["add", "theorem", "seminorm_basis_zero_singleton_mem", []], ["add", "theorem", "seminorm_basis_zero_smul", []], ["add", "theorem", "seminorm_basis_zero_smul_left", []], ["add", "theorem", "seminorm_basis_zero_smul_right", []], ["add", "theorem", "seminorm_basis_zero_zero", []], ["add", "def", "seminorm_module_filter_basis", []], ["add", "theorem", "to_locally_convex_space", ["with_seminorms"]], ["add", "theorem", "with_seminorms_eq", []], ["add", "theorem", "with_seminorms_of_has_basis", []], ["add", "theorem", "with_seminorms_of_nhds", []]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["del", "theorem", "to_locally_convex_space'", ["normed_space"]], ["del", "theorem", "const_is_bounded", ["seminorm"]], ["del", "theorem", "cont_normed_space_to_with_seminorms", ["seminorm"]], ["del", "theorem", "cont_with_seminorms_normed_space", ["seminorm"]], ["del", "theorem", "continuous_from_bounded", ["seminorm"]], ["del", "def", "is_bounded", ["seminorm"]], ["del", "theorem", "is_bounded_const", ["seminorm"]], ["del", "theorem", "is_bounded_sup", ["seminorm"]], ["del", "def", "seminorm_add_group_filter_basis", ["seminorm"]], ["del", "def", "seminorm_basis_zero", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_add", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_iff", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_intersect", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_mem", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_neg", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_nonempty", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_singleton_mem", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_smul", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_smul_left", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_smul_right", ["seminorm"]], ["del", "theorem", "seminorm_basis_zero_zero", ["seminorm"]], ["del", "def", "seminorm_module_filter_basis", ["seminorm"]], ["del", "theorem", "to_locally_convex_space", ["seminorm", "with_seminorms"]], ["del", "theorem", "with_seminorms_eq", ["seminorm"]], ["del", "theorem", "with_seminorms_of_has_basis", ["seminorm"]], ["del", "theorem", "with_seminorms_of_nhds", ["seminorm"]]]}]}, {"timestamp": 1647718379, "sha": "2660d16d", "message": "feat(group_theory/group_action/basic): Right action of normalizer on left cosets (#12822)\nThis PR adds the right action of the normalizer on left cosets.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "smul_coe", ["mul_action", "quotient'"]], ["add", "theorem", "smul_mk", ["mul_action", "quotient'"]]]}]}, {"timestamp": 1647711803, "sha": "48eacc63", "message": "chore(*): update to lean 3.42.0c (#12818)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/induction.lean", "newPath": "test/induction.lean", "changes": [["add", "def", "lt_lte", ["less_than"]], ["del", "theorem", "lt_lte", ["less_than"]]]}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": [["del", "theorem", "foo3", []]]}, {"oldPath": "test/lint_to_additive_doc.lean", "newPath": "test/lint_to_additive_doc.lean", "changes": [["add", "def", "bar", []], ["del", "theorem", "bar", []], ["add", "def", "baz", []], ["del", "theorem", "baz", []], ["add", "def", "foo", []], ["del", "theorem", "foo", []], ["add", "def", "no_to_additive", []], ["del", "theorem", "no_to_additive", []], ["add", "def", "quux", []], ["del", "theorem", "quux", []]]}, {"oldPath": "test/local_cache.lean", "newPath": "test/local_cache.lean", "changes": []}]}, {"timestamp": 1647701369, "sha": "42dcf354", "message": "chore(algebra/char_p/exp_char): golf char_eq_exp_char_iff (#12825)", "changes": [{"oldPath": "src/algebra/char_p/exp_char.lean", "newPath": "src/algebra/char_p/exp_char.lean", "changes": []}]}, {"timestamp": 1647689615, "sha": "3ba1c023", "message": "feat(group_theory/subgroup/basic): Alternate version of `mem_normalizer_iff` (#12814)\nThis PR adds an alternate version of `mem_normalizer_iff`, in terms of commuting rather than conjugation.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "mem_normalizer_iff'", ["subgroup"]]]}]}, {"timestamp": 1647689614, "sha": "52b9b36b", "message": "feat(ring_theory/fractional_ideal): fractional ideal is one if and only if ideal is one (#12813)", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_ideal_eq_one_iff", ["fractional_ideal"]], ["mod", "theorem", "coe_ideal_eq_zero_iff", ["fractional_ideal"]], ["mod", "theorem", "coe_ideal_injective", ["fractional_ideal"]], ["mod", "theorem", "coe_ideal_ne_zero", ["fractional_ideal"]], ["mod", "theorem", "coe_ideal_ne_zero_iff", ["fractional_ideal"]]]}]}, {"timestamp": 1647689613, "sha": "245b614e", "message": "chore(measure_theory/measure): move subtraction to a new file (#12809)", "changes": [{"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "restrict_sub_eq_restrict_sub_restrict", ["measure_theory", "measure"]], ["del", "theorem", "sub_add_cancel_of_le", ["measure_theory", "measure"]], ["del", "theorem", "sub_apply", ["measure_theory", "measure"]], ["del", "theorem", "sub_apply_eq_zero_of_restrict_le_restrict", ["measure_theory", "measure"]], ["del", "theorem", "sub_def", ["measure_theory", "measure"]], ["del", "theorem", "sub_eq_zero_of_le", ["measure_theory", "measure"]], ["del", "theorem", "sub_le", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/sub.lean", "changes": [["add", "theorem", "restrict_sub_eq_restrict_sub_restrict", ["measure_theory", "measure"]], ["add", "theorem", "sub_add_cancel_of_le", ["measure_theory", "measure"]], ["add", "theorem", "sub_apply", ["measure_theory", "measure"]], ["add", "theorem", "sub_apply_eq_zero_of_restrict_le_restrict", ["measure_theory", "measure"]], ["add", "theorem", "sub_def", ["measure_theory", "measure"]], ["add", "theorem", "sub_eq_zero_of_le", ["measure_theory", "measure"]], ["add", "theorem", "sub_le", ["measure_theory", "measure"]]]}]}, {"timestamp": 1647689612, "sha": "dae6155d", "message": "chore(number_theory/primorial): golf a proof (#12807)\nUse a new lemma to golf a proof.", "changes": [{"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}]}, {"timestamp": 1647689611, "sha": "1d183094", "message": "feat(linear_algebra/determinant): no need for `is_domain` (#12805)\nNontriviality is all that was actually used, and in some cases the statement is already vacuous in the trivial case.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "def", "equiv_of_pi_lequiv_pi", []], ["mod", "theorem", "det_mul_det_symm", ["linear_equiv"]], ["mod", "theorem", "det_symm_mul_det", ["linear_equiv"]], ["mod", "theorem", "is_unit_det'", ["linear_equiv"]], ["mod", "theorem", "is_unit_det", ["linear_map"]], ["mod", "theorem", "det_comm'", ["matrix"]], ["mod", "theorem", "det_conj", ["matrix"]], ["mod", "def", "index_equiv_of_inv", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["mod", "theorem", "map_orientation_eq_det_inv_smul", ["basis"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["mod", "theorem", "norm_eq_zero_iff_of_basis", ["algebra"]], ["mod", "theorem", "norm_ne_zero_iff_of_basis", ["algebra"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1647689610, "sha": "ef69547c", "message": "feat(group_theory/finiteness): Define the minimum number of generators (#12765)\nThe PR adds a definition of the minimum number of generators, which will be needed for a statement of Schreier's lemma.", "changes": [{"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": [["add", "theorem", "fg_iff'", ["group"]], ["add", "def", "rank", ["group"]], ["add", "theorem", "rank_le", ["group"]], ["add", "theorem", "rank_spec", ["group"]]]}]}, {"timestamp": 1647683780, "sha": "ee4472b6", "message": "feat(group_theory/group_action/embedding): group actions apply on the codomain of embeddings (#12798)", "changes": [{"oldPath": null, "newPath": "src/group_theory/group_action/embedding.lean", "changes": [["add", "theorem", "coe_smul", ["function", "embedding"]], ["add", "theorem", "smul_apply", ["function", "embedding"]], ["add", "theorem", "smul_def", ["function", "embedding"]]]}]}, {"timestamp": 1647683779, "sha": "c9fc9bf7", "message": "refactor(order/filter/pointwise): Cleanup (#12789)\n* Reduce typeclass assumptions from `monoid` to `has_mul`\n* Turn lemmas into instances\n* Use hom classes rather than concrete hom types\n* Golf", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "image_mul", ["set"]], ["mod", "theorem", "preimage_mul_preimage_subset", ["set"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["mod", "theorem", "comap_mul_comap_le", ["filter"]], ["mod", "def", "map_monoid_hom", ["filter"]], ["mod", "theorem", "mem_mul", ["filter"]], ["mod", "theorem", "mem_one", ["filter"]], ["mod", "theorem", "mul_mem_mul", ["filter"]], ["mod", "theorem", "mul", ["filter", "ne_bot"]], ["add", "theorem", "one_mem_one", ["filter"]], ["mod", "theorem", "mul_mul", ["filter", "tendsto"]]]}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": []}]}, {"timestamp": 1647683778, "sha": "2b6b9ffc", "message": "feat(category_theory/abelian/derived): add left_derived_zero_iso_self (#12403)\nWe add `left_derived_zero_iso_self`: the natural isomorphism `(F.left_derived 0) ≅ F` if `preserves_finite_colimits F`.\nFrom lean-liquid", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["add", "theorem", "exact_of_iso_of_exact'", ["category_theory", "preadditive"]]]}, {"oldPath": null, "newPath": "src/category_theory/abelian/derived.lean", "changes": [["add", "theorem", "exact_of_map_projective_resolution", ["category_theory", "abelian", "functor"]], ["add", "def", "left_derived_zero_iso_self", ["category_theory", "abelian", "functor"]], ["add", "def", "left_derived_zero_to_self_app", ["category_theory", "abelian", "functor"]], ["add", "theorem", "left_derived_zero_to_self_app_comp_inv", ["category_theory", "abelian", "functor"]], ["add", "def", "left_derived_zero_to_self_app_inv", ["category_theory", "abelian", "functor"]], ["add", "theorem", "left_derived_zero_to_self_app_inv_comp", ["category_theory", "abelian", "functor"]], ["add", "def", "left_derived_zero_to_self_app_iso", ["category_theory", "abelian", "functor"]], ["add", "theorem", "left_derived_zero_to_self_natural", ["category_theory", "abelian", "functor"]], ["add", "theorem", "preserves_exact_of_preserves_finite_colimits_of_epi", ["category_theory", "abelian", "functor"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "inv", ["category_theory", "abelian", "cokernel", "desc"]]]}]}, {"timestamp": 1647678138, "sha": "4c60258c", "message": "chore(ring_theory/dedekind_domain/ideal): golf (#12737)", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_to_equiv", ["ring_equiv"]], ["add", "theorem", "to_equiv_eq_coe", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}]}, {"timestamp": 1647659071, "sha": "128c0965", "message": "chore(scripts): update nolints.txt (#12816)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1647652970, "sha": "7764c604", "message": "feat(*/sort): sorting empty sets/singletons (#12801)", "changes": [{"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "sort_empty", ["finset"]], ["add", "theorem", "sort_singleton", ["finset"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["add", "theorem", "merge_sort_nil", ["list"]], ["add", "theorem", "merge_sort_singleton", ["list"]]]}, {"oldPath": "src/data/multiset/sort.lean", "newPath": "src/data/multiset/sort.lean", "changes": [["add", "theorem", "sort_singleton", ["multiset"]], ["add", "theorem", "sort_zero", ["multiset"]]]}]}, {"timestamp": 1647640491, "sha": "d04fff95", "message": "feat(topology/{order,separation}): several lemmas from an old branch (#12794)\n* add `mem_nhds_discrete`;\n* replace the proof of `is_open_implies_is_open_iff` by `iff.rfl`;\n* add lemmas about `separated`.", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "mem_nhds_discrete", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "disjoint_closure_left", ["separated"]], ["add", "theorem", "disjoint_closure_right", ["separated"]], ["add", "theorem", "mono", ["separated"]], ["add", "theorem", "preimage", ["separated"]]]}]}, {"timestamp": 1647634902, "sha": "7f1ba1a3", "message": "feat(algebra/char_p/two): add `simp` attribute to some lemmas involving characteristic two identities (#12800)\nI hope that these `simp` attributes will make working with `char_p R 2` smooth!\nI felt clumsy with this section, so hopefully this is an improvement.", "changes": [{"oldPath": "src/algebra/char_p/two.lean", "newPath": "src/algebra/char_p/two.lean", "changes": [["mod", "theorem", "add_self_eq_zero", ["char_two"]], ["add", "theorem", "bit0_apply_eq_zero", ["char_two"]], ["mod", "theorem", "bit0_eq_zero", ["char_two"]], ["add", "theorem", "bit1_apply_eq_one", ["char_two"]], ["mod", "theorem", "bit1_eq_one", ["char_two"]], ["mod", "theorem", "neg_eq", ["char_two"]], ["mod", "theorem", "sub_eq_add", ["char_two"]]]}]}, {"timestamp": 1647634901, "sha": "e282089f", "message": "feat(linear_algebra/sesquilinear_form): preliminary results for nondegeneracy (#12269)\nSeveral lemmas needed to define nondegenerate bilinear forms and show that the canonical pairing of the algebraic dual is nondegenerate.\nAdd domain restriction of bilinear maps in the second component and in both compenents.\nSome type-class generalizations for symmetric, alternating, and reflexive sesquilinear forms.", "changes": [{"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": [["add", "theorem", "congr_fun₂", ["linear_map"]], ["add", "def", "dom_restrict₁₂", ["linear_map"]], ["add", "theorem", "dom_restrict₁₂_apply", ["linear_map"]], ["add", "def", "dom_restrict₂", ["linear_map"]], ["add", "theorem", "dom_restrict₂_apply", ["linear_map"]], ["add", "theorem", "ext_basis", ["linear_map"]], ["add", "theorem", "flip_flip", ["linear_map"]], ["add", "theorem", "sum_repr_mul_repr_mul", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "mk_span_singleton_apply'", ["linear_pmap"]]]}, {"oldPath": "src/linear_algebra/matrix/bilinear_form.lean", "newPath": "src/linear_algebra/matrix/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["mod", "def", "is_Ortho", ["linear_map"]], ["mod", "theorem", "is_Ortho_def", ["linear_map"]], ["add", "theorem", "is_Ortho_flip", ["linear_map"]], ["add", "theorem", "is_alt_iff_eq_neg_flip", ["linear_map"]], ["mod", "theorem", "is_ortho_def", ["linear_map"]], ["add", "theorem", "is_ortho_flip", ["linear_map"]], ["add", "theorem", "dom_restrict_symm", ["linear_map", "is_symm"]], ["mod", "theorem", "is_refl", ["linear_map", "is_symm"]], ["mod", "theorem", "ortho_comm", ["linear_map", "is_symm"]], ["mod", "def", "is_symm", ["linear_map"]], ["add", "theorem", "is_symm_iff_eq_flip", ["linear_map"]]]}]}, {"timestamp": 1647634900, "sha": "076490ae", "message": "feat(group_theory/nilpotent): the is_nilpotent_of_finite_tfae theorem (#11835)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_of_finite_tfae", []]]}]}, {"timestamp": 1647634898, "sha": "8c89ae6f", "message": "feat(ring_theory/unique_factorization_domain): some lemmas relating shapes of factorisations (#9345)\nGiven elements `a`, `b` in a `unique_factorization_monoid`, if there is an order-preserving bijection between the sets of factors of `associates.mk a` and `associates.mk b` then the prime factorisations of `a` and `b` have the same shape.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "is_atom_iff", ["associates"]], ["add", "theorem", "dvd_prime_pow", []]]}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "finite_prime_left", ["multiplicity"]]]}, {"oldPath": null, "newPath": "src/ring_theory/chain_of_divisors.lean", "changes": [["add", "theorem", "card_subset_divisors_le_length_of_chain", ["divisor_chain"]], ["add", "theorem", "element_of_chain_eq_pow_second_of_chain", ["divisor_chain"]], ["add", "theorem", "element_of_chain_not_is_unit_of_index_ne_zero", ["divisor_chain"]], ["add", "theorem", "eq_pow_second_of_chain_of_has_chain", ["divisor_chain"]], ["add", "theorem", "eq_second_of_chain_of_prime_dvd", ["divisor_chain"]], ["add", "theorem", "exists_chain_of_prime_pow", ["divisor_chain"]], ["add", "theorem", "first_of_chain_is_unit", ["divisor_chain"]], ["add", "theorem", "is_prime_pow_of_has_chain", ["divisor_chain"]], ["add", "theorem", "second_of_chain_is_irreducible", ["divisor_chain"]], ["add", "theorem", "multiplicity_prime_le_multiplicity_image_by_factor_order_iso", []], ["add", "theorem", "pow_image_of_prime_by_factor_order_iso_dvd", []]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "comap_le_comap_iff_of_surjective", ["ideal"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "exists_associated_prime_pow_of_unique_normalized_factor", ["unique_factorization_monoid"]], ["add", "theorem", "normalized_factors_of_irreducible_pow", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1647628352, "sha": "0c52d3b4", "message": "doc(src/tactic/doc_commands): typo “between” → “better” (#12804)", "changes": [{"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}]}, {"timestamp": 1647628351, "sha": "d3703fe9", "message": "doc(archive/100-theorems-list/9_area_of_a_circle): fix `×` (#12803)\nthis file used to have the category theory `\\cross` as opposed to `\\x`", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}]}, {"timestamp": 1647628350, "sha": "f4e7f82a", "message": "chore(model_theory/definability): Change variable order in definability (#12802)\nChanges `first_order.language.definable` and `first_order.language.definable_set` to `set.definable` and `set.definable_set`.\nMakes `set.definable` a `def` rather than a `structure`.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": [["del", "theorem", "compl", ["first_order", "language", "definable"]], ["del", "theorem", "image_comp_equiv", ["first_order", "language", "definable"]], ["del", "theorem", "inter", ["first_order", "language", "definable"]], ["del", "theorem", "preimage_comp", ["first_order", "language", "definable"]], ["del", "theorem", "sdiff", ["first_order", "language", "definable"]], ["del", "theorem", "union", ["first_order", "language", "definable"]], ["del", "structure", "definable", ["first_order", "language"]], ["del", "theorem", "definable_empty", ["first_order", "language"]], ["del", "theorem", "definable_finset_bInter", ["first_order", "language"]], ["del", "theorem", "definable_finset_bUnion", ["first_order", "language"]], ["del", "theorem", "definable_finset_inf", ["first_order", "language"]], ["del", "theorem", "definable_finset_sup", ["first_order", "language"]], ["mod", "def", "definable_set", ["first_order", "language"]], ["del", "theorem", "definable_univ", ["first_order", "language"]], ["del", "def", "definable₁", ["first_order", "language"]], ["del", "def", "definable₂", ["first_order", "language"]], ["add", "theorem", "compl", ["set", "definable"]], ["add", "theorem", "image_comp_equiv", ["set", "definable"]], ["add", "theorem", "inter", ["set", "definable"]], ["add", "theorem", "preimage_comp", ["set", "definable"]], ["add", "theorem", "sdiff", ["set", "definable"]], ["add", "theorem", "union", ["set", "definable"]], ["add", "def", "definable", ["set"]], ["add", "theorem", "definable_empty", ["set"]], ["add", "theorem", "definable_finset_bInter", ["set"]], ["add", "theorem", "definable_finset_bUnion", ["set"]], ["add", "theorem", "definable_finset_inf", ["set"]], ["add", "theorem", "definable_finset_sup", ["set"]], ["add", "theorem", "definable_univ", ["set"]], ["add", "def", "definable₁", ["set"]], ["add", "def", "definable₂", ["set"]]]}]}, {"timestamp": 1647628349, "sha": "f6e85fc4", "message": "feat(order/rel_iso): Add `subrel` instances (#12758)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1647628348, "sha": "fdd7e98c", "message": "feat(set_theory/*): Redefine `sup f` as `supr f` (#12657)", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "bdd_above_range", ["cardinal"]], ["del", "theorem", "nonempty_sup", ["cardinal"]], ["mod", "theorem", "sup_le", ["cardinal"]], ["add", "theorem", "sup_le_iff", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "Sup_eq_bsup", ["ordinal"]], ["add", "theorem", "Sup_eq_sup", ["ordinal"]], ["add", "theorem", "bdd_above_range", ["ordinal"]], ["mod", "theorem", "blsub_le", ["ordinal"]], ["add", "theorem", "blsub_le_iff", ["ordinal"]], ["mod", "theorem", "bsup_le", ["ordinal"]], ["add", "theorem", "bsup_le_iff", ["ordinal"]], ["mod", "theorem", "lsub_le", ["ordinal"]], ["add", "theorem", "lsub_le_iff", ["ordinal"]], ["del", "theorem", "lt_sup_of_ne_sup", ["ordinal"]], ["add", "theorem", "ne_sup_iff_lt_sup", ["ordinal"]], ["mod", "theorem", "nfp_le", ["ordinal"]], ["add", "theorem", "nfp_le_iff", ["ordinal"]], ["mod", "theorem", "sup_le", ["ordinal"]], ["add", "theorem", "sup_le_iff", ["ordinal"]], ["del", "theorem", "sup_nonempty", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_topology.lean", "newPath": "src/set_theory/ordinal_topology.lean", "changes": []}, {"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/principal.lean", "changes": []}]}, {"timestamp": 1647628347, "sha": "290ad757", "message": "feat(model_theory/terms_and_formulas): Atomic, Quantifier-Free, and Prenex Formulas (#12557)\nProvides a few induction principles for formulas\nDefines atomic formulas with `first_order.language.bounded_formula.is_atomic`\nDefines quantifier-free formulas with `first_order.language.bounded_formula.is_qf`\nDefines `first_order.language.bounded_formula.is_prenex` indicating that a formula is in prenex normal form.", "changes": [{"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "theorem", "is_prenex", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "is_qf", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_atomic"]], ["add", "inductive", "is_atomic", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "induction_on_all_not", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_prenex"]], ["add", "inductive", "is_prenex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "induction_on_inf_not", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "induction_on_sup_not", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "is_prenex", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "not", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "theorem", "relabel", ["first_order", "language", "bounded_formula", "is_qf"]], ["add", "inductive", "is_qf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "is_qf_bot", ["first_order", "language", "bounded_formula"]]]}]}, {"timestamp": 1647628345, "sha": "d17ecf9e", "message": "feat(category_theory/abelian) : injective resolutions of an object in a category with enough injectives (#12545)\nThis pr dualises `src/category_theory/preadditive/projective_resolution.lean`. But since half of the file requires `abelian` assumption, I moved it to `src/category_theory/abelian/*`. The reason it needs `abelian` assumption is because I want class inference to deduce `exact f g` from `exact g.op f.op`.", "changes": [{"oldPath": "src/category_theory/abelian/injective_resolution.lean", "newPath": "src/category_theory/abelian/injective_resolution.lean", "changes": [["add", "def", "of", ["category_theory", "InjectiveResolution"]], ["add", "def", "of_cocomplex", ["category_theory", "InjectiveResolution"]], ["add", "theorem", "exact_f_d", ["category_theory"]], ["add", "def", "desc", ["category_theory", "injective_resolution"]], ["add", "def", "ι", ["category_theory", "injective_resolution"]], ["add", "def", "injective_resolution", ["category_theory"]], ["add", "def", "injective_resolutions", ["category_theory"]]]}]}, {"timestamp": 1647622265, "sha": "80b8d191", "message": "feat(model_theory/terms_and_formulas): Language maps act on terms, formulas, sentences, and theories (#12609)\nDefines the action of language maps on terms, formulas, sentences, and theories\nShows that said action commutes with realization", "changes": [{"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "theorem", "mem_on_Theory", ["first_order", "language", "Lhom"]], ["add", "def", "on_Theory", ["first_order", "language", "Lhom"]], ["add", "theorem", "on_Theory_model", ["first_order", "language", "Lhom"]], ["add", "def", "on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "def", "on_formula", ["first_order", "language", "Lhom"]], ["add", "def", "on_sentence", ["first_order", "language", "Lhom"]], ["add", "def", "on_term", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_bounded_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_formula", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_sentence", ["first_order", "language", "Lhom"]], ["add", "theorem", "realize_on_term", ["first_order", "language", "Lhom"]]]}]}, {"timestamp": 1647622264, "sha": "bf690dd3", "message": "feat(archive/100-theorems-list): add proof of thm 81 (#7274)", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/81_sum_of_prime_reciprocals_diverges.lean", "changes": [["add", "theorem", "card_le_mul_sum", []], ["add", "theorem", "card_le_two_pow", []], ["add", "theorem", "card_le_two_pow_mul_sqrt", []], ["add", "theorem", "range_sdiff_eq_bUnion", []], ["add", "theorem", "tendsto_sum_one_div_prime_at_top", ["real"]], ["add", "theorem", "sum_lt_half_of_not_tendsto", []]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "card_sdiff_add_card_eq_card", ["finset"]]]}]}, {"timestamp": 1647617155, "sha": "b49bc778", "message": "feat(data/nat/prime): add two lemmas with nat.primes, mul and dvd (#12780)\nThese lemmas are close to available lemmas, but I could not actually find them.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "dvd_iff_eq", ["nat", "prime"]], ["add", "theorem", "prime_mul_iff", ["nat"]]]}]}, {"timestamp": 1647615146, "sha": "5a547aa9", "message": "fix(ring_theory/power_series/basic): remove duplicate instance (#12744)", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1647615145, "sha": "14ee5e03", "message": "feat(number_theory/arithmetic_function): add eq of multiplicative functions (#12689)\nTo show that two multiplicative functions are equal, it suffices to show\nthat they are equal on prime powers. This is a commonly used strategy\nwhen two functions are known to be multiplicative (e.g., they're both\nDirichlet convolutions of simpler multiplicative functions).\nThis will be used in several ongoing commits to prove asymptotics for\nsquarefree numbers.", "changes": [{"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "eq_iff_eq_on_prime_powers", ["nat", "arithmetic_function", "is_multiplicative"]]]}]}, {"timestamp": 1647609058, "sha": "ee8db20e", "message": "feat(measure_theory/group/action): add `null_measurable_set.smul` (#12793)\nAlso add `null_measurable_set.preimage` and `ae_disjoint.preimage`.", "changes": [{"oldPath": "src/measure_theory/group/action.lean", "newPath": "src/measure_theory/group/action.lean", "changes": [["add", "theorem", "smul", ["measure_theory", "null_measurable_set"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "preimage", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "preimage", ["measure_theory", "null_measurable_set"]]]}]}, {"timestamp": 1647609057, "sha": "2541387e", "message": "refactor(data/list/big_operators): review API (#12782)\n* merge `prod_monoid` into `big_operators`;\n* review typeclass assumptions in some lemmas;\n* use `to_additive` in more lemmas.", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": []}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "eq_of_prod_take_eq", ["list"]], ["del", "theorem", "eq_of_sum_take_eq", ["list"]], ["add", "theorem", "exists_le_of_prod_le'", ["list"]], ["del", "theorem", "exists_le_of_sum_le", ["list"]], ["add", "theorem", "exists_lt_of_prod_lt'", ["list"]], ["del", "theorem", "exists_lt_of_sum_lt", ["list"]], ["add", "theorem", "monotone_prod_take", ["list"]], ["del", "theorem", "monotone_sum_take", ["list"]], ["mod", "theorem", "one_le_prod_of_one_le", ["list"]], ["add", "theorem", "pow_card_le_prod", ["list"]], ["add", "theorem", "prod_commute", ["list"]], ["mod", "theorem", "prod_eq_one_iff", ["list"]], ["add", "theorem", "prod_eq_pow_card", ["list"]], ["add", "theorem", "prod_le_pow_card", ["list"]], ["add", "theorem", "prod_le_prod'", ["list"]], ["add", "theorem", "prod_lt_prod'", ["list"]], ["add", "theorem", "prod_lt_prod_of_ne_nil", ["list"]], ["add", "theorem", "prod_repeat", ["list"]], ["mod", "theorem", "sum_map_mul_left", ["list"]], ["mod", "theorem", "sum_map_mul_right", ["list"]]]}, {"oldPath": "src/data/list/prod_monoid.lean", "newPath": null, "changes": [["del", "theorem", "prod_commute", ["list"]], ["del", "theorem", "prod_eq_pow_card", ["list"]], ["del", "theorem", "prod_le_pow_card", ["list"]], ["del", "theorem", "prod_repeat", ["list"]]]}]}, {"timestamp": 1647609056, "sha": "241d63d8", "message": "chore(algebraic_geometry/prime_spectrum/basic): remove TODO (#12768)\nSober topological spaces has been defined and it has been proven (in this file) that prime spectrum is sober", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}]}, {"timestamp": 1647606996, "sha": "cfa7f6af", "message": "feat(group_theory/index): Intersection of finite index subgroups (#12776)\nThis PR proves that if `H` and `K` are of finite index in `L`, then so is `H ⊓ K`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_inf_ne_zero", ["subgroup"]], ["add", "theorem", "relindex_inf_ne_zero", ["subgroup"]]]}]}, {"timestamp": 1647598288, "sha": "5ecd27ad", "message": "refactor(topology/algebra/field): make `topological_division_ring` extend `has_continuous_inv₀` (#12778)\nTopological division ring had been rolling its own `continuous_inv` field which was almost identical to the `continuous_at_inv₀` field of `has_continuous_inv₀`. Here we refactor so that `topological_division_ring` extends `has_continuous_inv₀` instead.\n- [x] depends on: #12770", "changes": [{"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}]}, {"timestamp": 1647567237, "sha": "a7cad675", "message": "doc(overview): some additions to the Analysis section (#12791)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1647563308, "sha": "a32d58ba", "message": "feat(analysis/*): generalize `set_smul_mem_nhds_zero` to topological vector spaces (#12779)\nThe lemma holds for arbitrary topological vector spaces and has nothing to do with normed spaces.", "changes": [{"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["del", "theorem", "set_smul_mem_nhds_zero", []], ["del", "theorem", "set_smul_mem_nhds_zero_iff", []]]}, {"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": [["add", "theorem", "set_smul_mem_nhds_smul", []], ["add", "theorem", "set_smul_mem_nhds_smul_iff", []], ["add", "theorem", "set_smul_mem_nhds_zero_iff", []]]}]}, {"timestamp": 1647563307, "sha": "adcfc58d", "message": "chore(data/matrix/block): Do not print `matrix.from_blocks` with dot notation (#12774)\n`A.from_blocks B C D` is weird and asymmetric compared to `from_blocks A B C D`. In future we might want to introduce notation.", "changes": [{"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": []}]}, {"timestamp": 1647556849, "sha": "cf8c5ff1", "message": "feat(algebra/pointwise): Subtraction/division of sets (#12694)\nDefine pointwise subtraction/division on `set`.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "Inter_div_subset", ["set"]], ["add", "theorem", "Inter₂_div_subset", ["set"]], ["add", "theorem", "Union_div", ["set"]], ["add", "theorem", "Union_div_left_image", ["set"]], ["add", "theorem", "Union_div_right_image", ["set"]], ["add", "theorem", "Union₂_div", ["set"]], ["add", "theorem", "div_Inter_subset", ["set"]], ["add", "theorem", "div_Inter₂_subset", ["set"]], ["add", "theorem", "div_Union", ["set"]], ["add", "theorem", "div_Union₂", ["set"]], ["add", "theorem", "div_empty", ["set"]], ["add", "theorem", "div_inter_subset", ["set"]], ["add", "theorem", "div_mem_div", ["set"]], ["add", "theorem", "div_singleton", ["set"]], ["add", "theorem", "div_subset_div", ["set"]], ["add", "theorem", "div_subset_div_left", ["set"]], ["add", "theorem", "div_subset_div_right", ["set"]], ["add", "theorem", "div_union", ["set"]], ["add", "theorem", "empty_div", ["set"]], ["add", "theorem", "image2_div", ["set"]], ["add", "theorem", "image_div_prod", ["set"]], ["add", "theorem", "inter_div_subset", ["set"]], ["add", "theorem", "mem_div", ["set"]], ["add", "theorem", "singleton_div", ["set"]], ["add", "theorem", "singleton_div_singleton", ["set"]], ["add", "theorem", "union_div", ["set"]]]}]}, {"timestamp": 1647556848, "sha": "32e5b6b9", "message": "feat(model_theory/terms_and_formulas): Casting and lifting terms and formulas (#12467)\nDefines `bounded_formula.cast_le`, which maps the `fin`-indexed variables with `fin.cast_le`\nDefines `term.lift_at` and `bounded_formula.lift_at`, which raise `fin`-indexed variables above a certain threshold", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "add_nat_one", ["fin"]], ["add", "theorem", "cast_cast_succ", ["fin"]], ["add", "theorem", "cast_last", ["fin"]], ["add", "theorem", "cast_le_of_eq", ["fin"]], ["add", "theorem", "cast_zero", ["fin"]]]}, {"oldPath": "src/data/sum/basic.lean", "newPath": "src/data/sum/basic.lean", "changes": [["add", "theorem", "elim_comp_map", ["sum"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "def", "cast_le", ["first_order", "language", "bounded_formula"]], ["add", "def", "lift_at", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_all_lift_at_one_self", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_cast_le_of_eq", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_lift_at", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_lift_at_one", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_lift_at_one_self", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "semantically_equivalent_all_lift_at", ["first_order", "language", "bounded_formula"]], ["add", "def", "lift_at", ["first_order", "language", "term"]], ["add", "theorem", "realize_lift_at", ["first_order", "language", "term"]]]}]}, {"timestamp": 1647556847, "sha": "a26dfc4c", "message": "feat(analysis/normed_space/basic): add `normed_division_ring` (#12132)\nThis defines normed division rings and generalizes some of the lemmas that applied to normed fields instead to normed division rings.\nThis breaks one `ac_refl`; although this could be resolved by using `simp only {canonize_instances := tt}` first, it's easier to just tweak the proof.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": [["del", "theorem", "norm_mul", ["quaternion"]]]}]}, {"timestamp": 1647541889, "sha": "2cb5edb5", "message": "chore(topology/algebra/group_with_zero): mark `has_continuous_inv₀` as a `Prop` (#12770)\nSince the type was not explicitly given, Lean marked this as a `Type`.", "changes": [{"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": []}]}, {"timestamp": 1647541888, "sha": "3e6e34e4", "message": "feat(linear_algebra/matrix): The Weinstein–Aronszajn identity (#12767)\nNotably this includes the proof of the determinant of a block matrix, which we didn't seem to have in the general case.\nThis also renames some of the lemmas about determinants of block matrices, and adds some missing API for `inv_of` on matrices.\nThere's some discussion at https://math.stackexchange.com/q/4105846/1896 about whether this name is appropriate, and whether it should be called \"Sylvester's determinant theorem\" instead.", "changes": [{"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_from_blocks_zero₁₂", ["matrix"]], ["add", "theorem", "det_from_blocks_zero₂₁", ["matrix"]], ["del", "theorem", "det_one_add_col_mul_row", ["matrix"]], ["del", "theorem", "lower_two_block_triangular_det", ["matrix"]], ["del", "theorem", "upper_two_block_triangular_det", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "det_from_blocks_one₁₁", ["matrix"]], ["add", "theorem", "det_from_blocks_one₂₂", ["matrix"]], ["add", "theorem", "det_from_blocks₁₁", ["matrix"]], ["add", "theorem", "det_from_blocks₂₂", ["matrix"]], ["add", "theorem", "det_mul_add_one_comm", ["matrix"]], ["add", "theorem", "det_one_add_col_mul_row", ["matrix"]], ["add", "theorem", "det_one_add_mul_comm", ["matrix"]], ["add", "theorem", "det_one_sub_mul_comm", ["matrix"]]]}]}, {"timestamp": 1647541887, "sha": "6bfbb49e", "message": "docs(algebra/order/floor): Update floor_semiring docs to reflect it's just an ordered_semiring (#12756)\nThe docs say that `floor_semiring` is a linear ordered semiring, but it is only an `ordered_semiring` in the code. Change the docs to reflect this fact.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": []}]}, {"timestamp": 1647541886, "sha": "ca80c8b0", "message": "feat(data/nat/sqrt_norm_num): norm_num extension for sqrt (#12735)\nInspired by https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/2.20is.20not.20a.20square . The norm_num extension has to go in a separate file from `data.nat.sqrt` because `data.nat.sqrt` is a dependency of `norm_num`.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/sqrt_norm_num.lean", "changes": [["add", "theorem", "is_sqrt", ["norm_num"]]]}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1647541885, "sha": "e944a998", "message": "feat(algebraic_geometry/projective_spectrum) : lemmas about `vanishing_ideal` and `zero_locus` (#12730)\nThis pr mimics the corresponding construction in `Spec`; other than `projective_spectrum.basic_open_eq_union_of_projection` everything else is a direct copy.", "changes": [{"oldPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": [["add", "theorem", "as_ideal_le_as_ideal", ["projective_spectrum"]], ["add", "theorem", "as_ideal_lt_as_ideal", ["projective_spectrum"]], ["add", "def", "basic_open", ["projective_spectrum"]], ["add", "theorem", "basic_open_eq_union_of_projection", ["projective_spectrum"]], ["add", "theorem", "basic_open_eq_zero_locus_compl", ["projective_spectrum"]], ["add", "theorem", "basic_open_mul", ["projective_spectrum"]], ["add", "theorem", "basic_open_mul_le_left", ["projective_spectrum"]], ["add", "theorem", "basic_open_mul_le_right", ["projective_spectrum"]], ["add", "theorem", "basic_open_one", ["projective_spectrum"]], ["add", "theorem", "basic_open_pow", ["projective_spectrum"]], ["add", "theorem", "basic_open_zero", ["projective_spectrum"]], ["add", "theorem", "gc_homogeneous_ideal", ["projective_spectrum"]], ["add", "theorem", "gc_ideal", ["projective_spectrum"]], ["add", "theorem", "gc_set", ["projective_spectrum"]], ["add", "theorem", "homogeneous_ideal_le_vanishing_ideal_zero_locus", ["projective_spectrum"]], ["add", "theorem", "ideal_le_vanishing_ideal_zero_locus", ["projective_spectrum"]], ["add", "theorem", "is_closed_iff_zero_locus", ["projective_spectrum"]], ["add", "theorem", "is_closed_zero_locus", ["projective_spectrum"]], ["add", "theorem", "is_open_basic_open", ["projective_spectrum"]], ["add", "theorem", "is_open_iff", ["projective_spectrum"]], ["add", "theorem", "is_topological_basis_basic_opens", ["projective_spectrum"]], ["add", "theorem", "le_iff_mem_closure", ["projective_spectrum"]], ["add", "theorem", "mem_basic_open", ["projective_spectrum"]], ["add", "theorem", "mem_coe_basic_open", ["projective_spectrum"]], ["add", "theorem", "mem_compl_zero_locus_iff_not_mem", ["projective_spectrum"]], ["add", "theorem", "subset_vanishing_ideal_zero_locus", ["projective_spectrum"]], ["add", "theorem", "subset_zero_locus_iff_subset_vanishing_ideal", ["projective_spectrum"]], ["add", "theorem", "subset_zero_locus_vanishing_ideal", ["projective_spectrum"]], ["add", "theorem", "sup_vanishing_ideal_le", ["projective_spectrum"]], ["add", "theorem", "union_zero_locus", ["projective_spectrum"]], ["add", "theorem", "vanishing_ideal_Union", ["projective_spectrum"]], ["add", "theorem", "vanishing_ideal_anti_mono", ["projective_spectrum"]], ["add", "theorem", "vanishing_ideal_closure", ["projective_spectrum"]], ["add", "theorem", "vanishing_ideal_union", ["projective_spectrum"]], ["add", "theorem", "vanishing_ideal_univ", ["projective_spectrum"]], ["add", "theorem", "zero_locus_Union", ["projective_spectrum"]], ["add", "theorem", "zero_locus_anti_mono", ["projective_spectrum"]], ["add", "theorem", "zero_locus_anti_mono_homogeneous_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_anti_mono_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_bUnion", ["projective_spectrum"]], ["add", "theorem", "zero_locus_bot", ["projective_spectrum"]], ["add", "theorem", "zero_locus_empty", ["projective_spectrum"]], ["add", "theorem", "zero_locus_empty_of_one_mem", ["projective_spectrum"]], ["add", "theorem", "zero_locus_inf", ["projective_spectrum"]], ["add", "theorem", "zero_locus_mul_homogeneous_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_mul_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_singleton_mul", ["projective_spectrum"]], ["add", "theorem", "zero_locus_singleton_one", ["projective_spectrum"]], ["add", "theorem", "zero_locus_singleton_pow", ["projective_spectrum"]], ["add", "theorem", "zero_locus_singleton_zero", ["projective_spectrum"]], ["add", "theorem", "zero_locus_sup_homogeneous_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_sup_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_supr_homogeneous_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_supr_ideal", ["projective_spectrum"]], ["add", "theorem", "zero_locus_union", ["projective_spectrum"]], ["add", "theorem", "zero_locus_univ", ["projective_spectrum"]], ["add", "theorem", "zero_locus_vanishing_ideal_eq_closure", ["projective_spectrum"]]]}]}, {"timestamp": 1647538204, "sha": "a1bdaddf", "message": "chore(topology/metric_space/hausdorff_distance): move two lemmas (#12771)\nRemove the dependence of `topology/metric_space/hausdorff_distance` on `analysis.normed_space.basic`, by moving out two lemmas.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": [["add", "theorem", "closed_ball_inf_dist_compl_subset_closure'", ["metric"]], ["add", "theorem", "closed_ball_inf_dist_compl_subset_closure", ["metric"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["del", "theorem", "closed_ball_inf_dist_compl_subset_closure'", ["metric"]], ["del", "theorem", "closed_ball_inf_dist_compl_subset_closure", ["metric"]]]}, {"oldPath": "src/topology/metric_space/pi_nat.lean", "newPath": "src/topology/metric_space/pi_nat.lean", "changes": []}, {"oldPath": "src/topology/metric_space/polish.lean", "newPath": "src/topology/metric_space/polish.lean", "changes": []}]}, {"timestamp": 1647515191, "sha": "11b2f36b", "message": "feat(algebraic_topology/fundamental_groupoid): Fundamental groupoid of punit (#12757)\nProves the equivalence of the fundamental groupoid of punit and punit", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/fundamental_groupoid/punit.lean", "changes": [["add", "def", "punit_equiv_discrete_punit", ["fundamental_groupoid"]]]}]}, {"timestamp": 1647515190, "sha": "cd196a8a", "message": "feat(group_theory/order_of_element): 1 is finite order, as is g⁻¹ (#12749)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "is_of_fin_order_inv", []], ["add", "theorem", "is_of_fin_order_inv_iff", []], ["add", "theorem", "is_of_fin_order_one", []]]}]}, {"timestamp": 1647515189, "sha": "c9c4f40b", "message": "chore(topology/compact_open): remove `continuous_map.ev`, and rename related lemmas to `eval'` (#12738)\nThis:\n* Eliminates `continuous_map.ev α β` in favor of `(λ p : C(α, β) × α, p.1 p.2)`, as this unifies better and does not require lean to unfold `ev` at the right time.\n* Renames `continuous_map.continuous_evalx` to `continuous_map.continuous_eval_const` to match the `smul_const`-style names.\n* Renames `continuous_map.continuous_ev` to `continuous_map.continuous_eval'` to match `continuous_map.continuous_eval`.\n* Renames `continuous_map.continuous_ev₁` to `continuous_map.continuous_eval_const'`.\n* Adds `continuous_map.continuous_coe'` to match `continuous_map.continuous_coe`.\n* Golfs some nearby lemmas.\nThe unprimed lemma names have the same statement but different typeclasses, so the `ev` lemmas have taken the primed name. See [this zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Evaluation.20of.20continuous.20functions.20is.20continuous/near/275502201) for discussion about whether one set of lemmas can be removed.", "changes": [{"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["mod", "def", "coev", ["continuous_map"]], ["add", "theorem", "continuous_coe'", ["continuous_map"]], ["del", "theorem", "continuous_ev", ["continuous_map"]], ["add", "theorem", "continuous_eval'", ["continuous_map"]], ["add", "theorem", "continuous_eval_const'", ["continuous_map"]], ["del", "theorem", "continuous_ev₁", ["continuous_map"]], ["del", "def", "ev", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "continuous_eval_const", ["bounded_continuous_function"]], ["del", "theorem", "continuous_evalx", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "continuous_eval_const", ["continuous_map"]], ["del", "theorem", "continuous_evalx", ["continuous_map"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1647515188, "sha": "a6158f19", "message": "feat(group_theory/subgroup/basic): One-sided closure induction lemmas (#12725)\nThis PR adds one-sided closure induction lemmas, which I will need for Schreier's lemma.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "closure_induction_left", ["subgroup"]], ["add", "theorem", "closure_induction_right", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "closure_induction_left", ["submonoid"]], ["add", "theorem", "closure_induction_right", ["submonoid"]]]}]}, {"timestamp": 1647515187, "sha": "b1bf390d", "message": "feat(number_theory/function_field): the ring of integers of a function field is not a field (#12705)", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "not_is_field", ["polynomial"]]]}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": [["add", "theorem", "algebra_map_injective", []], ["add", "theorem", "algebra_map_injective", ["function_field", "ring_of_integers"]], ["add", "theorem", "not_is_field", ["function_field", "ring_of_integers"]]]}]}, {"timestamp": 1647513337, "sha": "c3ecf005", "message": "feat(group_theory/sylow): direct product of sylow groups if all normal (#11778)", "changes": [{"oldPath": "src/group_theory/noncomm_pi_coprod.lean", "newPath": "src/group_theory/noncomm_pi_coprod.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "def", "direct_product_of_normal", ["sylow"]]]}]}, {"timestamp": 1647510983, "sha": "31391dc2", "message": "feat(model_theory/basic, elementary_maps): Uses `fun_like` approach for first-order maps (#12755)\nIntroduces classes `hom_class`, `strong_hom_class` to describe classes of first-order maps.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["mod", "structure", "embedding", ["first_order", "language"]], ["add", "theorem", "bijective", ["first_order", "language", "equiv"]], ["mod", "theorem", "coe_injective", ["first_order", "language", "equiv"]], ["mod", "theorem", "injective", ["first_order", "language", "equiv"]], ["add", "theorem", "surjective", ["first_order", "language", "equiv"]], ["del", "theorem", "coe_injective", ["first_order", "language", "hom"]], ["add", "theorem", "map_constants", ["first_order", "language", "hom_class"]], ["add", "def", "strong_hom_class_of_is_algebraic", ["first_order", "language", "hom_class"]]]}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["mod", "theorem", "coe_injective", ["first_order", "language", "elementary_embedding"]]]}]}, {"timestamp": 1647505112, "sha": "9d7a6645", "message": "feat(algebra/parity + *): generalize lemmas about parity (#12761)\nI moved more even/odd lemmas from nat/int to general semirings/rings.\nSome files that explicitly used the nat/int namespace were changed along the way.", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/parity.lean", "newPath": "src/algebra/parity.lean", "changes": [["add", "theorem", "even", ["add_monoid_hom"]], ["mod", "theorem", "add_even", ["even"]], ["mod", "theorem", "add_odd", ["even"]], ["add", "theorem", "mul_left", ["even"]], ["add", "theorem", "mul_right", ["even"]], ["add", "theorem", "pow_of_ne_zero", ["even"]], ["add", "theorem", "sub_even", ["even"]], ["add", "theorem", "sub_odd", ["even"]], ["add", "theorem", "even_neg_two", []], ["add", "theorem", "even_two", []], ["add", "theorem", "even_two_mul", []], ["add", "theorem", "even_zero", []], ["mod", "theorem", "add_even", ["odd"]], ["mod", "theorem", "add_odd", ["odd"]], ["add", "theorem", "mul_odd", ["odd"]], ["add", "theorem", "pow", ["odd"]], ["add", "theorem", "sub_even", ["odd"]], ["add", "theorem", "sub_odd", ["odd"]], ["add", "theorem", "odd_neg_one", []], ["add", "theorem", "odd_one", []], ["add", "theorem", "odd_two_mul_add_one", []], ["add", "theorem", "odd", ["ring_hom"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["del", "theorem", "mul_left", ["int", "even"]], ["del", "theorem", "mul_right", ["int", "even"]], ["del", "theorem", "sub_even", ["int", "even"]], ["del", "theorem", "sub_odd", ["int", "even"]], ["del", "theorem", "even_bit0", ["int"]], ["del", "theorem", "even_zero", ["int"]], ["del", "theorem", "mul", ["int", "odd"]], ["del", "theorem", "sub_even", ["int", "odd"]], ["del", "theorem", "sub_odd", ["int", "odd"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["del", "theorem", "mul_left", ["nat", "even"]], ["del", "theorem", "mul_right", ["nat", "even"]], ["del", "theorem", "even_bit0", ["nat"]], ["del", "theorem", "even_zero", ["nat"]], ["del", "theorem", "mul", ["nat", "odd"]]]}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}]}, {"timestamp": 1647501468, "sha": "3ba25ea6", "message": "feat(topology/algebra/const_mul_action): add is_closed smul lemmas (#12747)", "changes": [{"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": [["add", "theorem", "smul_of_ne_zero", ["is_closed"]], ["add", "theorem", "smul₀", ["is_closed"]]]}]}, {"timestamp": 1647501466, "sha": "87ab09ca", "message": "feat(category_theory/abelian/injective_resolution): homotopy between descents of morphism and two injective resolutions (#12743)\nThis pr contains the following\n* `category_theory.InjectiveResolution.desc_homotopy`: Any two descents of the same morphism are homotopic.\n* `category_theory.InjectiveResolution.homotopy_equiv`: Any two injective resolutions of the same\n object are homotopically equivalent.", "changes": [{"oldPath": "src/category_theory/abelian/injective_resolution.lean", "newPath": "src/category_theory/abelian/injective_resolution.lean", "changes": [["add", "def", "desc_comp_homotopy", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_homotopy", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_homotopy_zero", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_homotopy_zero_one", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_homotopy_zero_succ", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_homotopy_zero_zero", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_id_homotopy", ["category_theory", "InjectiveResolution"]], ["add", "def", "homotopy_equiv", ["category_theory", "InjectiveResolution"]], ["add", "theorem", "homotopy_equiv_hom_ι", ["category_theory", "InjectiveResolution"]], ["add", "theorem", "homotopy_equiv_inv_ι", ["category_theory", "InjectiveResolution"]]]}]}, {"timestamp": 1647498146, "sha": "7000efb8", "message": "refactor(analysis/specific_limits): split into two files (#12759)\nSplit the 1200-line file `analysis.specific_limits` into two:\n- `analysis.specific_limits.normed` imports `normed_space` and covers limits in normed rings/fields\n- `analysis.specific_limits.basic` imports only topology, and is still a bit of a grab-bag, covering limits in metric spaces, ordered rings, `ennreal`, etc.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/subbox_induction.lean", "newPath": "src/analysis/box_integral/box/subbox_induction.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/specific_limits/basic.lean", "changes": [["add", "theorem", "aux_has_sum_of_le_geometric", []], ["add", "theorem", "cauchy_seq_of_edist_le_geometric", []], ["add", "theorem", "cauchy_seq_of_edist_le_geometric_two", []], ["add", "theorem", "cauchy_seq_of_le_geometric", []], ["add", "theorem", "cauchy_seq_of_le_geometric_two", []], ["add", "theorem", "dist_le_of_le_geometric_of_tendsto", []], ["add", "theorem", "dist_le_of_le_geometric_of_tendsto₀", []], ["add", "theorem", "dist_le_of_le_geometric_two_of_tendsto", []], ["add", "theorem", "dist_le_of_le_geometric_two_of_tendsto₀", []], ["add", "theorem", "edist_le_of_edist_le_geometric_of_tendsto", []], ["add", "theorem", "edist_le_of_edist_le_geometric_of_tendsto₀", []], ["add", "theorem", "edist_le_of_edist_le_geometric_two_of_tendsto", []], ["add", "theorem", "edist_le_of_edist_le_geometric_two_of_tendsto₀:", []], ["add", "theorem", "exists_pos_sum_of_encodable'", ["ennreal"]], ["add", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["add", "theorem", "exists_pos_tsum_mul_lt_of_encodable", ["ennreal"]], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["ennreal"]], ["add", "theorem", "tsum_geometric", ["ennreal"]], ["add", "theorem", "factorial_tendsto_at_top", []], ["add", "theorem", "geom_le", []], ["add", "theorem", "geom_lt", []], ["add", "theorem", "has_sum_geometric_of_lt_1", []], ["add", "theorem", "has_sum_geometric_two'", []], ["add", "theorem", "has_sum_geometric_two", []], ["add", "theorem", "le_geom", []], ["add", "theorem", "lt_geom", []], ["add", "theorem", "tendsto_pow_at_top_at_top_of_one_lt", ["nat"]], ["add", "theorem", "exists_pos_sum_of_encodable", ["nnreal"]], ["add", "theorem", "has_sum_geometric", ["nnreal"]], ["add", "theorem", "summable_geometric", ["nnreal"]], ["add", "theorem", "tendsto_const_div_at_top_nhds_0_nat", ["nnreal"]], ["add", "theorem", "tendsto_inverse_at_top_nhds_0_nat", ["nnreal"]], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["nnreal"]], ["add", "def", "pos_sum_of_encodable", []], ["add", "theorem", "exists_pos_forall_sum_le", ["set", "countable"]], ["add", "theorem", "exists_pos_has_sum_le", ["set", "countable"]], ["add", "theorem", "sum_geometric_two_le", []], ["add", "theorem", "summable_geometric_of_lt_1", []], ["add", "theorem", "summable_geometric_two'", []], ["add", "theorem", "summable_geometric_two", []], ["add", "theorem", "summable_geometric_two_encode", []], ["add", "theorem", "summable_one_div_pow_of_le", []], ["add", "theorem", "tendsto_add_one_pow_at_top_at_top_of_pos", []], ["add", "theorem", "tendsto_at_top_of_geom_le", []], ["add", "theorem", "tendsto_const_div_at_top_nhds_0_nat", []], ["add", "theorem", "tendsto_factorial_div_pow_self_at_top", []], ["add", "theorem", "tendsto_inverse_at_top_nhds_0_nat", []], ["add", "theorem", "tendsto_nat_ceil_mul_div_at_top", []], ["add", "theorem", "tendsto_nat_floor_mul_div_at_top", []], ["add", "theorem", "tendsto_one_div_add_at_top_nhds_0_nat", []], ["add", "theorem", "tendsto_pow_at_top_at_top_of_one_lt", []], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", []], ["add", "theorem", "tendsto_pow_at_top_nhds_within_0_of_lt_1", []], ["add", "theorem", "tsum_geometric_inv_two", []], ["add", "theorem", "tsum_geometric_inv_two_ge", []], ["add", "theorem", "tsum_geometric_nnreal", []], ["add", "theorem", "tsum_geometric_of_lt_1", []], ["add", "theorem", "tsum_geometric_two'", []], ["add", "theorem", "tsum_geometric_two", []], ["add", "theorem", "uniformity_basis_dist_pow_of_lt_1", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits/normed.lean", "changes": [["del", "theorem", "aux_has_sum_of_le_geometric", []], ["del", "theorem", "cauchy_seq_of_edist_le_geometric", []], ["del", "theorem", "cauchy_seq_of_edist_le_geometric_two", []], ["del", "theorem", "cauchy_seq_of_le_geometric", []], ["del", "theorem", "cauchy_seq_of_le_geometric_two", []], ["del", "theorem", "dist_le_of_le_geometric_of_tendsto", []], ["del", "theorem", "dist_le_of_le_geometric_of_tendsto₀", []], ["del", "theorem", "dist_le_of_le_geometric_two_of_tendsto", []], ["del", "theorem", "dist_le_of_le_geometric_two_of_tendsto₀", []], ["del", "theorem", "edist_le_of_edist_le_geometric_of_tendsto", []], ["del", "theorem", "edist_le_of_edist_le_geometric_of_tendsto₀", []], ["del", "theorem", "edist_le_of_edist_le_geometric_two_of_tendsto", []], ["del", "theorem", "edist_le_of_edist_le_geometric_two_of_tendsto₀:", []], ["del", "theorem", "exists_pos_sum_of_encodable'", ["ennreal"]], ["del", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["del", "theorem", "exists_pos_tsum_mul_lt_of_encodable", ["ennreal"]], ["del", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["ennreal"]], ["del", "theorem", "tsum_geometric", ["ennreal"]], ["del", "theorem", "factorial_tendsto_at_top", []], ["del", "theorem", "geom_le", []], ["del", "theorem", "geom_lt", []], ["del", "theorem", "has_sum_geometric_of_lt_1", []], ["del", "theorem", "has_sum_geometric_two'", []], ["del", "theorem", "has_sum_geometric_two", []], ["del", "theorem", "le_geom", []], ["del", "theorem", "lt_geom", []], ["del", "theorem", "tendsto_pow_at_top_at_top_of_one_lt", ["nat"]], ["del", "theorem", "exists_pos_sum_of_encodable", ["nnreal"]], ["del", "theorem", "has_sum_geometric", ["nnreal"]], ["del", "theorem", "summable_geometric", ["nnreal"]], ["del", "theorem", "tendsto_const_div_at_top_nhds_0_nat", ["nnreal"]], ["del", "theorem", "tendsto_inverse_at_top_nhds_0_nat", ["nnreal"]], ["del", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["nnreal"]], ["del", "def", "pos_sum_of_encodable", []], ["del", "theorem", "exists_pos_forall_sum_le", ["set", "countable"]], ["del", "theorem", "exists_pos_has_sum_le", ["set", "countable"]], ["del", "theorem", "sum_geometric_two_le", []], ["del", "theorem", "summable_geometric_of_lt_1", []], ["del", "theorem", "summable_geometric_two'", []], ["del", "theorem", "summable_geometric_two", []], ["del", "theorem", "summable_geometric_two_encode", []], ["del", "theorem", "summable_one_div_pow_of_le", []], ["del", "theorem", "tendsto_add_one_pow_at_top_at_top_of_pos", []], ["del", "theorem", "tendsto_at_top_of_geom_le", []], ["del", "theorem", "tendsto_const_div_at_top_nhds_0_nat", []], ["del", "theorem", "tendsto_factorial_div_pow_self_at_top", []], ["del", "theorem", "tendsto_inverse_at_top_nhds_0_nat", []], ["del", "theorem", "tendsto_nat_ceil_mul_div_at_top", []], ["del", "theorem", "tendsto_nat_floor_mul_div_at_top", []], ["del", "theorem", "tendsto_one_div_add_at_top_nhds_0_nat", []], ["del", "theorem", "tendsto_pow_at_top_at_top_of_one_lt", []], ["del", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", []], ["del", "theorem", "tendsto_pow_at_top_nhds_within_0_of_lt_1", []], ["del", "theorem", "tsum_geometric_inv_two", []], ["del", "theorem", "tsum_geometric_inv_two_ge", []], ["del", "theorem", "tsum_geometric_nnreal", []], ["del", "theorem", "tsum_geometric_of_lt_1", []], ["del", "theorem", "tsum_geometric_two'", []], ["del", "theorem", "tsum_geometric_two", []], ["del", "theorem", "uniformity_basis_dist_pow_of_lt_1", []]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/topology/instances/rat_lemmas.lean", "newPath": "src/topology/instances/rat_lemmas.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1647494333, "sha": "877f2e7a", "message": "refactor(linear_algebra/ray): redefine `same_ray` to allow zero vectors (#12618)\nIn a strictly convex space, the new definition is equivalent to the fact that the triangle inequality becomes an equality. The old definition was only used for nonzero vectors in `mathlib`. Also make the definition of `ray_vector` semireducible so that `ray_vector.setoid` can be an instance.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "mem_segment_iff_same_ray", []], ["add", "theorem", "same_ray_of_mem_segment", []], ["mod", "theorem", "segment_same", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/ray.lean", "changes": [["add", "theorem", "norm_add", ["same_ray"]], ["add", "theorem", "norm_smul_eq", ["same_ray"]], ["add", "theorem", "norm_sub", ["same_ray"]], ["add", "theorem", "same_ray_iff_inv_norm_smul_eq", []], ["add", "theorem", "same_ray_iff_inv_norm_smul_eq_of_ne", []], ["add", "theorem", "same_ray_iff_norm_smul_eq", []]]}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["mod", "theorem", "map_orientation_eq_det_inv_smul", ["basis"]], ["mod", "def", "map", ["orientation"]], ["mod", "theorem", "map_apply", ["orientation"]], ["mod", "theorem", "map_refl", ["orientation"]], ["mod", "theorem", "map_symm", ["orientation"]], ["mod", "def", "orientation", []]]}, {"oldPath": "src/linear_algebra/ray.lean", "newPath": "src/linear_algebra/ray.lean", "changes": [["add", "theorem", "eq_zero_of_same_ray_neg_smul_right", []], ["mod", "theorem", "eq_zero_of_same_ray_self_neg", []], ["mod", "theorem", "equiv_iff_same_ray", []], ["del", "theorem", "equivalence_same_ray", []], ["mod", "theorem", "ind", ["module", "ray"]], ["mod", "def", "map", ["module", "ray"]], ["mod", "theorem", "map_apply", ["module", "ray"]], ["mod", "theorem", "map_refl", ["module", "ray"]], ["mod", "theorem", "map_symm", ["module", "ray"]], ["mod", "theorem", "ne_neg_self", ["module", "ray"]], ["add", "theorem", "neg_units_smul", ["module", "ray"]], ["mod", "def", "some_ray_vector", ["module", "ray"]], ["mod", "theorem", "some_ray_vector_ray", ["module", "ray"]], ["mod", "def", "some_vector", ["module", "ray"]], ["mod", "theorem", "some_vector_ne_zero", ["module", "ray"]], ["mod", "theorem", "some_vector_ray", ["module", "ray"]], ["mod", "theorem", "units_smul_of_neg", ["module", "ray"]], ["mod", "theorem", "units_smul_of_pos", ["module", "ray"]], ["mod", "def", "ray", ["module"]], ["add", "theorem", "neg_ray_of_ne_zero", []], ["mod", "theorem", "ray_eq_iff", []], ["del", "theorem", "ray_neg", []], ["mod", "theorem", "ray_pos_smul", []], ["mod", "theorem", "coe_neg", ["ray_vector"]], ["mod", "theorem", "equiv_neg_iff", ["ray_vector"]], ["mod", "def", "map_linear_equiv", ["ray_vector"]], ["del", "def", "same_ray_setoid", ["ray_vector"]], ["mod", "def", "ray_vector", []], ["add", "theorem", "add_left", ["same_ray"]], ["add", "theorem", "add_right", ["same_ray"]], ["add", "theorem", "exists_eq_smul", ["same_ray"]], ["add", "theorem", "exists_eq_smul_add", ["same_ray"]], ["add", "theorem", "exists_left_eq_smul", ["same_ray"]], ["add", "theorem", "exists_pos", ["same_ray"]], ["add", "theorem", "exists_right_eq_smul", ["same_ray"]], ["mod", "theorem", "map", ["same_ray"]], ["del", "theorem", "neg", ["same_ray"]], ["add", "theorem", "nonneg_smul_left", ["same_ray"]], ["add", "theorem", "nonneg_smul_right", ["same_ray"]], ["add", "theorem", "of_subsingleton'", ["same_ray"]], ["add", "theorem", "of_subsingleton", ["same_ray"]], ["mod", "theorem", "pos_smul_left", ["same_ray"]], ["mod", "theorem", "pos_smul_right", ["same_ray"]], ["mod", "theorem", "refl", ["same_ray"]], ["mod", "theorem", "smul", ["same_ray"]], ["mod", "theorem", "symm", ["same_ray"]], ["mod", "theorem", "trans", ["same_ray"]], ["add", "theorem", "zero_left", ["same_ray"]], ["add", "theorem", "zero_right", ["same_ray"]], ["mod", "theorem", "same_ray_comm", []], ["del", "theorem", "same_ray_iff_mem_orbit", []], ["mod", "theorem", "same_ray_map_iff", []], ["mod", "theorem", "same_ray_neg_iff", []], ["mod", "theorem", "same_ray_neg_smul_left_iff", []], ["add", "theorem", "same_ray_neg_smul_left_iff_of_ne", []], ["mod", "theorem", "same_ray_neg_smul_right_iff", []], ["add", "theorem", "same_ray_neg_smul_right_iff_of_ne", []], ["mod", "theorem", "same_ray_neg_swap", []], ["add", "theorem", "same_ray_nonneg_smul_left", []], ["add", "theorem", "same_ray_nonneg_smul_right", []], ["mod", "theorem", "same_ray_pos_smul_left", []], ["mod", "theorem", "same_ray_pos_smul_right", []], ["del", "def", "same_ray_setoid", []], ["del", "theorem", "same_ray_setoid_eq_orbit_rel", []], ["mod", "theorem", "same_ray_smul_left_iff", []], ["add", "theorem", "same_ray_smul_left_iff_of_ne", []], ["mod", "theorem", "same_ray_smul_right_iff", []], ["add", "theorem", "same_ray_smul_right_iff_of_ne", []]]}]}, {"timestamp": 1647490816, "sha": "e5470580", "message": "docs(algebraic_topology/fundamental_groupoid/induced_maps): fix diagram rendering (#12745)", "changes": [{"oldPath": "src/algebraic_topology/fundamental_groupoid/induced_maps.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/induced_maps.lean", "changes": []}]}, {"timestamp": 1647486236, "sha": "d1e13043", "message": "feat(combinatorics/simple_graph/connectivity): API for get_vert (#12604)\nFrom my Formalising Mathematics 2022 course.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "adj_get_vert_succ", ["simple_graph", "walk"]], ["add", "theorem", "get_vert_length", ["simple_graph", "walk"]], ["add", "theorem", "get_vert_of_length_le", ["simple_graph", "walk"]], ["add", "theorem", "get_vert_zero", ["simple_graph", "walk"]]]}]}, {"timestamp": 1647481095, "sha": "192819b4", "message": "feat(category_theory/punit): A groupoid is equivalent to punit iff it has a unique arrow between any two objects (#12726)\nIn terms of topology, when this is used with the fundamental groupoid, it means that a space is simply connected (we still need to define this) if and only if any two paths between the same points are homotopic, and contractible spaces are simply connected.", "changes": [{"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["add", "def", "of_hom_unique", ["category_theory", "groupoid"]]]}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": [["add", "theorem", "equiv_punit_iff_unique", ["category_theory"]]]}]}, {"timestamp": 1647481095, "sha": "3a0532a8", "message": "feat(topology/homotopy/fundamental_group): prove fundamental group is independent of basepoint in path-connected spaces (#12234)\nAdds definition of fundamental group and proves fundamental group independent of basepoint choice in path-connected spaces.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/fundamental_groupoid/fundamental_group.lean", "changes": [["add", "def", "fundamental_group_mul_equiv_of_path", ["fundamental_group"]], ["add", "def", "fundamental_group_mul_equiv_of_path_connected", ["fundamental_group"]], ["add", "def", "fundamental_group", []]]}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["add", "theorem", "Aut_mul_def", ["category_theory", "Aut"]], ["add", "def", "Aut_mul_equiv_of_iso", ["category_theory", "Aut"]]]}]}, {"timestamp": 1647474703, "sha": "4d350b97", "message": "chore(*): move code, golf (#12753)\n* move `pow_pos` and `pow_nonneg` to `algebra.order.ring`;\n* use the former to golf `has_pos pnat nat`;\n* fix formatting.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["del", "theorem", "pow_nonneg", []], ["del", "theorem", "pow_pos", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "pow_nonneg", []], ["add", "theorem", "pow_pos", []]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}]}, {"timestamp": 1647465450, "sha": "b3abae50", "message": "chore(category_theory/preadditive/projective_resolution): some minor golf (#12739)", "changes": [{"oldPath": "src/category_theory/preadditive/projective_resolution.lean", "newPath": "src/category_theory/preadditive/projective_resolution.lean", "changes": []}]}, {"timestamp": 1647465449, "sha": "b24372f6", "message": "feat(model_theory/basic, terms_and_formulas): Helper functions for constant symbols (#12722)\nDefines a function `language.con` from `A` to constants of the language `L[[A]]`.\nChanges the coercion of a constant to a term to a function `language.constants.term`.\nProves `simp` lemmas for interpretation of constant symbols and realization of constant terms.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "coe_con", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "def", "term", ["first_order", "language", "constants"]], ["add", "theorem", "realize_con", ["first_order", "language", "term"]], ["add", "theorem", "realize_constants", ["first_order", "language", "term"]]]}]}, {"timestamp": 1647465446, "sha": "3b91c324", "message": "feat(group_theory/subgroup/basic): `map_le_map_iff_of_injective` for `subtype` (#12713)\nThis PR adds the special case of `map_le_map_iff_of_injective` when the group homomorphism is `subtype`. This is useful when working with nested subgroups.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "map_subtype_le_map_subtype", ["subgroup"]]]}]}, {"timestamp": 1647459636, "sha": "c459d2b5", "message": "feat(algebra/algebra/basic,data/matrix/basic): resolve a TODO about `alg_hom.map_smul_of_tower` (#12684)\nIt turns out that this lemma doesn't actually help in the place I claimed it would, so I added the lemma that does help too.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_smul_of_tower", ["alg_hom"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "map_op_smul'", ["matrix"]], ["add", "theorem", "map_smul'", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}]}, {"timestamp": 1647459635, "sha": "6a71007a", "message": "feat(group_theory/quotient_group) finiteness of groups for sequences of homomorphisms (#12660)", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "inclusion_injective", ["subgroup"]]]}]}, {"timestamp": 1647455692, "sha": "2e9985e9", "message": "feat(topology/algebra/order/basic): f ≤ᶠ[l] g implies limit of f ≤ limit of g (#12727)\nThere are several implications of the form `eventually_*_of_tendsto_*`,\nwhich involve the order relationships between the limit of a function\nand other constants. What appears to be missing are reverse\nimplications: If two functions are eventually ordered, then their limits\nrespect the order.\nThis is lemma will be used in further work on the asymptotics of\nsquarefree numbers", "changes": [{"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}]}, {"timestamp": 1647445169, "sha": "693a3ac9", "message": "feat(number_theory/cyclotomic/basic): add is_primitive_root.adjoin (#12716)\nWe add `is_cyclotomic_extension.is_primitive_root.adjoin`.\nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["add", "theorem", "adjoin_is_cyclotomic_extension", ["is_primitive_root"]]]}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}]}, {"timestamp": 1647438039, "sha": "b8faf130", "message": "feat(data/finset/basic): add finset.filter_eq_self (#12717)\nand an epsilon of cleanup\nfrom flt-regular", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "filter_eq_empty_iff", ["finset"]], ["add", "theorem", "filter_eq_self", ["finset"]], ["mod", "theorem", "monotone_filter_left", ["finset"]]]}]}, {"timestamp": 1647438038, "sha": "d495afdd", "message": "feat(category_theory/abelian/injective_resolution): descents of a morphism (#12703)\nThis pr dualise `src/category_theory/preadditive/projective_resolution.lean`. The reason that it is moved to `abelian` folder is because we want `exact f g` from `exact g.op f.op` instance.\nThis pr is splitted from #12545. This pr contains the following:\nGiven `I : InjectiveResolution X` and `J : InjectiveResolution Y`, any morphism `X ⟶ Y` admits a descent to a chain map `J.cocomplex ⟶ I.cocomplex`. It is a descent in the sense that `I.ι` intertwine the descent and the original morphism, see `category_theory.InjectiveResolution.desc_commutes`.\n(Docstring contains more than what is currently in the file, but everything else will come soon)", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/injective_resolution.lean", "changes": [["add", "def", "desc", ["category_theory", "InjectiveResolution"]], ["add", "theorem", "desc_commutes", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_f_one", ["category_theory", "InjectiveResolution"]], ["add", "theorem", "desc_f_one_zero_comm", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_f_succ", ["category_theory", "InjectiveResolution"]], ["add", "def", "desc_f_zero", ["category_theory", "InjectiveResolution"]]]}]}, {"timestamp": 1647438036, "sha": "f21a7605", "message": "feat(measure_theory/function/jacobian): change of variable formula in integrals in higher dimension (#12492)\nLet `μ` be a Lebesgue measure on a finite-dimensional real vector space, `s` a measurable set, and `f` a function which is differentiable and injective on `s`. Then `∫ x in f '' s, g x ∂μ = ∫ x in s, |(f' x).det| • g (f x) ∂μ`. (There is also a version for the Lebesgue integral, i.e., for `ennreal`-valued functions).", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "coe_to_continuous_linear_equiv_of_det_ne_zero", ["continuous_linear_map"]], ["add", "def", "to_continuous_linear_equiv_of_det_ne_zero", ["continuous_linear_map"]], ["add", "theorem", "to_continuous_linear_equiv_of_det_ne_zero_apply", ["continuous_linear_map"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/jacobian.lean", "changes": [["add", "theorem", "norm_fderiv_sub_le", ["approximates_linear_on"]], ["add", "theorem", "exists_closed_cover_approximates_linear_on_of_has_fderiv_within_at", []], ["add", "theorem", "exists_partition_approximates_linear_on_of_has_fderiv_within_at", []], ["add", "theorem", "add_haar_image_eq_zero_of_det_fderiv_within_eq_zero", ["measure_theory"]], ["add", "theorem", "add_haar_image_eq_zero_of_det_fderiv_within_eq_zero_aux", ["measure_theory"]], ["add", "theorem", "add_haar_image_eq_zero_of_differentiable_on_of_add_haar_eq_zero", ["measure_theory"]], ["add", "theorem", "add_haar_image_le_lintegral_abs_det_fderiv", ["measure_theory"]], ["add", "theorem", "add_haar_image_le_lintegral_abs_det_fderiv_aux1", ["measure_theory"]], ["add", "theorem", "add_haar_image_le_lintegral_abs_det_fderiv_aux2", ["measure_theory"]], ["add", "theorem", "add_haar_image_le_mul_of_det_lt", ["measure_theory"]], ["add", "theorem", "ae_measurable_fderiv_within", ["measure_theory"]], ["add", "theorem", "ae_measurable_of_real_abs_det_fderiv_within", ["measure_theory"]], ["add", "theorem", "ae_measurable_to_nnreal_abs_det_fderiv_within", ["measure_theory"]], ["add", "theorem", "integrable_on_image_iff_integrable_on_abs_det_fderiv_smul", ["measure_theory"]], ["add", "theorem", "integral_image_eq_integral_abs_det_fderiv_smul", ["measure_theory"]], ["add", "theorem", "lintegral_abs_det_fderiv_eq_add_haar_image", ["measure_theory"]], ["add", "theorem", "lintegral_abs_det_fderiv_le_add_haar_image", ["measure_theory"]], ["add", "theorem", "lintegral_abs_det_fderiv_le_add_haar_image_aux1", ["measure_theory"]], ["add", "theorem", "lintegral_abs_det_fderiv_le_add_haar_image_aux2", ["measure_theory"]], ["add", "theorem", "lintegral_image_eq_lintegral_abs_det_fderiv_mul", ["measure_theory"]], ["add", "theorem", "map_with_density_abs_det_fderiv_eq_add_haar", ["measure_theory"]], ["add", "theorem", "measurable_embedding_of_fderiv_within", ["measure_theory"]], ["add", "theorem", "measurable_image_of_fderiv_within", ["measure_theory"]], ["add", "theorem", "mul_le_add_haar_image_of_lt_det", ["measure_theory"]], ["add", "theorem", "restrict_map_with_density_abs_det_fderiv_eq_add_haar", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "theorem", "det_coe_symm", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1647431616, "sha": "0964573a", "message": "feat(set_theory/cardinal): Lift `min` and `max` (#12518)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "lift_max'", ["cardinal"]], ["add", "theorem", "lift_min'", ["cardinal"]]]}]}, {"timestamp": 1647431615, "sha": "717b11ec", "message": "feat(group_theory/noncomm_pi_coprod): homomorphism from pi monoids or groups (#11744)", "changes": [{"oldPath": null, "newPath": "src/group_theory/noncomm_pi_coprod.lean", "changes": [["add", "theorem", "independent_range_of_coprime_order", ["monoid_hom"]], ["add", "theorem", "injective_noncomm_pi_coprod_of_independent", ["monoid_hom"]], ["add", "def", "noncomm_pi_coprod", ["monoid_hom"]], ["add", "def", "noncomm_pi_coprod_equiv", ["monoid_hom"]], ["add", "theorem", "noncomm_pi_coprod_mrange", ["monoid_hom"]], ["add", "theorem", "noncomm_pi_coprod_mul_single", ["monoid_hom"]], ["add", "theorem", "noncomm_pi_coprod_range", ["monoid_hom"]], ["add", "theorem", "commute_subtype_of_commute", ["subgroup"]], ["add", "theorem", "independent_of_coprime_order", ["subgroup"]], ["add", "theorem", "injective_noncomm_pi_coprod_of_independent", ["subgroup"]], ["add", "def", "noncomm_pi_coprod", ["subgroup"]], ["add", "theorem", "noncomm_pi_coprod_mul_single", ["subgroup"]], ["add", "theorem", "noncomm_pi_coprod_range", ["subgroup"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_inv", []], ["add", "theorem", "order_of_map_dvd", []]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "eq_one_of_noncomm_prod_eq_one_of_independent", ["subgroup"]]]}]}, {"timestamp": 1647425127, "sha": "a50de33f", "message": "docs(algebra/group/hom): fix typo (#12723)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}]}, {"timestamp": 1647425126, "sha": "35bb571b", "message": "chore(number_theory/primorial): speed up some proofs (#12714)", "changes": [{"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}]}, {"timestamp": 1647425125, "sha": "a8bfcfed", "message": "feat(algebraic_geometry/projective_spectrum): basic definitions of projective spectrum (#12635)\nThis pr contains the basic definitions of projective spectrum of a graded ring:\n- projective spectrum\n- zero locus\n- vanishing ideal", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/projective_spectrum/topology.lean", "changes": [["add", "def", "as_homogeneous_ideal", ["projective_spectrum"]], ["add", "theorem", "as_homogeneous_ideal_def", ["projective_spectrum"]], ["add", "theorem", "coe_vanishing_ideal", ["projective_spectrum"]], ["add", "theorem", "ext", ["projective_spectrum"]], ["add", "theorem", "mem_vanishing_ideal", ["projective_spectrum"]], ["add", "theorem", "mem_zero_locus", ["projective_spectrum"]], ["add", "theorem", "subset_zero_locus_iff_le_vanishing_ideal", ["projective_spectrum"]], ["add", "def", "vanishing_ideal", ["projective_spectrum"]], ["add", "theorem", "vanishing_ideal_singleton", ["projective_spectrum"]], ["add", "def", "zero_locus", ["projective_spectrum"]], ["add", "theorem", "zero_locus_span", ["projective_spectrum"]], ["add", "def", "projective_spectrum", []]]}]}, {"timestamp": 1647425124, "sha": "a7a2f9d4", "message": "feat(data/nat/fib): norm_num plugin for fib (#12463)", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["add", "def", "is_fib_aux", ["norm_num"]], ["add", "theorem", "is_fib_aux_bit0", ["norm_num"]], ["add", "theorem", "is_fib_aux_bit0_done", ["norm_num"]], ["add", "theorem", "is_fib_aux_bit1", ["norm_num"]], ["add", "theorem", "is_fib_aux_bit1_done", ["norm_num"]], ["add", "theorem", "is_fib_aux_one", ["norm_num"]]]}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1647425123, "sha": "500a1d32", "message": "feat(data/pnat/find): port over `nat.find` API (#12413)\nDidn't port `pnat.find_add` because I got lost in the proof.", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "le_one_iff", ["pnat"]], ["add", "theorem", "lt_add_left", ["pnat"]], ["add", "theorem", "lt_add_right", ["pnat"]], ["add", "theorem", "not_lt_one", ["pnat"]]]}, {"oldPath": null, "newPath": "src/data/pnat/find.lean", "changes": [["add", "theorem", "find_comp_succ", ["pnat"]], ["add", "theorem", "find_eq_iff", ["pnat"]], ["add", "theorem", "find_eq_one", ["pnat"]], ["add", "theorem", "find_le", ["pnat"]], ["add", "theorem", "find_le_iff", ["pnat"]], ["add", "theorem", "find_lt_iff", ["pnat"]], ["add", "theorem", "find_mono", ["pnat"]], ["add", "theorem", "le_find_iff", ["pnat"]], ["add", "theorem", "lt_find_iff", ["pnat"]], ["add", "theorem", "one_le_find", ["pnat"]]]}]}, {"timestamp": 1647425122, "sha": "bbc66b5e", "message": "feat(group_theory/subsemigroup/basic): subsemigroups (#12111)\nPort over submonoid implementation to a generalization: subsemigroups.\nImplement submonoids via extends using old_structure_cmd, since that is\nwhat subsemirings do.\nCopy over the attribution from submonoids because the content is almost\nunchanged.\nThe submonoid file hasn't been changed, so no proofs rely on the\nsubsemigroups proofs.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": [["mod", "theorem", "is_submonoid", ["submonoid"]], ["mod", "def", "of", ["submonoid"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["mod", "structure", "add_submonoid", []], ["mod", "structure", "submonoid", []]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/subsemigroup/basic.lean", "changes": [["add", "structure", "add_subsemigroup", []], ["add", "theorem", "coe_of_mdense", ["mul_hom"]], ["add", "def", "eq_mlocus", ["mul_hom"]], ["add", "theorem", "eq_of_eq_on_mdense", ["mul_hom"]], ["add", "theorem", "eq_of_eq_on_mtop", ["mul_hom"]], ["add", "theorem", "eq_on_mclosure", ["mul_hom"]], ["add", "def", "of_mdense", ["mul_hom"]], ["add", "def", "closure", ["subsemigroup"]], ["add", "theorem", "closure_Union", ["subsemigroup"]], ["add", "theorem", "closure_empty", ["subsemigroup"]], ["add", "theorem", "closure_eq", ["subsemigroup"]], ["add", "theorem", "closure_eq_of_le", ["subsemigroup"]], ["add", "theorem", "closure_induction'", ["subsemigroup"]], ["add", "theorem", "closure_induction", ["subsemigroup"]], ["add", "theorem", "closure_le", ["subsemigroup"]], ["add", "theorem", "closure_mono", ["subsemigroup"]], ["add", "theorem", "closure_singleton_le_iff_mem", ["subsemigroup"]], ["add", "theorem", "closure_union", ["subsemigroup"]], ["add", "theorem", "closure_univ", ["subsemigroup"]], ["add", "theorem", "coe_Inf", ["subsemigroup"]], ["add", "theorem", "coe_bot", ["subsemigroup"]], ["add", "theorem", "coe_copy", ["subsemigroup"]], ["add", "theorem", "coe_inf", ["subsemigroup"]], ["add", "theorem", "coe_infi", ["subsemigroup"]], ["add", "theorem", "coe_set_mk", ["subsemigroup"]], ["add", "theorem", "coe_top", ["subsemigroup"]], ["add", "theorem", "copy_eq", ["subsemigroup"]], ["add", "theorem", "dense_induction", ["subsemigroup"]], ["add", "theorem", "ext", ["subsemigroup"]], ["add", "theorem", "mem_Inf", ["subsemigroup"]], ["add", "theorem", "mem_carrier", ["subsemigroup"]], ["add", "theorem", "mem_closure", ["subsemigroup"]], ["add", "theorem", "mem_inf", ["subsemigroup"]], ["add", "theorem", "mem_infi", ["subsemigroup"]], ["add", "theorem", "mem_mk", ["subsemigroup"]], ["add", "theorem", "mem_supr", ["subsemigroup"]], ["add", "theorem", "mem_top", ["subsemigroup"]], ["add", "theorem", "mk_le_mk", ["subsemigroup"]], ["add", "theorem", "mul_mem", ["subsemigroup"]], ["add", "theorem", "not_mem_bot", ["subsemigroup"]], ["add", "theorem", "not_mem_of_not_mem_closure", ["subsemigroup"]], ["add", "def", "coe", ["subsemigroup", "simps"]], ["add", "theorem", "subset_closure", ["subsemigroup"]], ["add", "theorem", "subsingleton_of_subsingleton", ["subsemigroup"]], ["add", "theorem", "supr_eq_closure", ["subsemigroup"]], ["add", "structure", "subsemigroup", []]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": []}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}]}, {"timestamp": 1647418915, "sha": "50691e59", "message": "chore(measure_theory/function): split files strongly_measurable and simple_func_dense (#12711)\nThe files `strongly_measurable` and `simple_func_dense` contain general results, and results pertaining to the `L^p` space. We move the results regarding `L^p` to new files, to make sure that the main parts of the files can be imported earlier in the hierarchy. This is needed for a forthcoming integral refactor.", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": [["del", "theorem", "to_Lp_one_eq_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "induction", ["measure_theory", "Lp"]], ["del", "theorem", "add_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "coe_coe", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "coe_fn_le", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "coe_fn_nonneg", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "coe_fn_zero", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "coe_indicator_const", ["measure_theory", "Lp", "simple_func"]], ["del", "def", "coe_simple_func_nonneg_to_Lp_nonneg", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "coe_smul", ["measure_theory", "Lp", "simple_func"]], ["del", "def", "coe_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "dense_range_coe_simple_func_nonneg_to_Lp_nonneg", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "exists_simple_func_nonneg_ae_eq", ["measure_theory", "Lp", "simple_func"]], ["del", "def", "indicator_const", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "neg_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "norm_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "norm_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "smul_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "sub_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "def", "to_Lp", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_add", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_eq_mk", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_eq_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_neg", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_smul", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_sub", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_Lp_zero", ["measure_theory", "Lp", "simple_func"]], ["del", "def", "to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_simple_func_indicator_const", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "to_simple_func_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["del", "theorem", "zero_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["del", "def", "simple_func", ["measure_theory", "Lp"]], ["del", "theorem", "induction", ["measure_theory", "integrable"]], ["del", "theorem", "induction", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "exists_forall_norm_le", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "integrable_approx_on", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_approx_on_univ", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_of_is_finite_measure", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_lt_top_of_mem_ℒp_indicator", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_preimage_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_preimage_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_support_lt_top", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_support_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_support_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_approx_on", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_approx_on_univ", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_iff_integrable", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_of_finite_measure_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_of_is_finite_measure", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_top", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_zero", ["measure_theory", "simple_func"]], ["del", "theorem", "nnnorm_approx_on_le", ["measure_theory", "simple_func"]], ["del", "theorem", "norm_approx_on_y₀_le", ["measure_theory", "simple_func"]], ["del", "theorem", "norm_approx_on_zero_le", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_L1_nnnorm", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_Lp_snorm", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_L1_nnnorm", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_Lp", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_Lp_snorm", ["measure_theory", "simple_func"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/simple_func_dense_lp.lean", "changes": [["add", "theorem", "to_Lp_one_eq_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "induction", ["measure_theory", "Lp"]], ["add", "theorem", "add_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_coe", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_fn_le", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_fn_nonneg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_fn_zero", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_indicator_const", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "coe_simple_func_nonneg_to_Lp_nonneg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_smul", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "coe_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "dense_range_coe_simple_func_nonneg_to_Lp_nonneg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "exists_simple_func_nonneg_ae_eq", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "indicator_const", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "neg_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "norm_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "norm_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "smul_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "sub_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_add", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_eq_mk", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_eq_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_neg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_smul", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_sub", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_zero", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_simple_func_indicator_const", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_simple_func_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "zero_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "simple_func", ["measure_theory", "Lp"]], ["add", "theorem", "induction", ["measure_theory", "integrable"]], ["add", "theorem", "induction", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "exists_forall_norm_le", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "integrable_approx_on", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_approx_on_univ", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_of_is_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_lt_top_of_mem_ℒp_indicator", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_preimage_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_preimage_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_support_lt_top", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_support_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_support_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_approx_on", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_approx_on_univ", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_of_finite_measure_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_of_is_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_top", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "nnnorm_approx_on_le", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_approx_on_y₀_le", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_approx_on_zero_le", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_L1_nnnorm", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_Lp_snorm", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_L1_nnnorm", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_Lp", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_Lp_snorm", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["del", "theorem", "fin_strongly_measurable", ["measure_theory", "Lp"]], ["del", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "integrable"]], ["del", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "fin_strongly_measurable_of_measurable", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/strongly_measurable_lp.lean", "changes": [["add", "theorem", "fin_strongly_measurable", ["measure_theory", "Lp"]], ["add", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "integrable"]], ["add", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "fin_strongly_measurable_of_measurable", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}]}, {"timestamp": 1647418914, "sha": "ba6c84dd", "message": "feat(ring_theory/fractional_ideal): two span_singleton lemmas (#12656)", "changes": [{"oldPath": "src/linear_algebra/span.lean", "newPath": "src/linear_algebra/span.lean", "changes": [["add", "theorem", "span_singleton_eq_span_singleton", ["submodule"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "span_singleton_eq_span_singleton", ["fractional_ideal"]], ["add", "theorem", "span_singleton_pow", ["fractional_ideal"]]]}]}, {"timestamp": 1647418913, "sha": "17c74f19", "message": "feat(algebra/group_power/order): add le_pow (#12436)\nAdded a new theorem so that library search will find it.", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "le_self_pow", []]]}]}, {"timestamp": 1647418912, "sha": "91f98e82", "message": "feat(topology/bornology/hom): Locally bounded maps (#12046)\nDefine `locally_bounded_map`, the type of locally bounded maps between two bornologies.", "changes": [{"oldPath": "src/topology/bornology/basic.lean", "newPath": "src/topology/bornology/basic.lean", "changes": [["add", "theorem", "comap_cobounded_le_iff", ["bornology"]], ["mod", "theorem", "is_bounded_compl_iff", ["bornology"]], ["mod", "theorem", "is_bounded_empty", ["bornology"]], ["add", "theorem", "is_cobounded_compl_iff", ["bornology"]]]}, {"oldPath": null, "newPath": "src/topology/bornology/hom.lean", "changes": [["add", "theorem", "image", ["is_bounded"]], ["add", "theorem", "cancel_left", ["locally_bounded_map"]], ["add", "theorem", "cancel_right", ["locally_bounded_map"]], ["add", "theorem", "coe_comp", ["locally_bounded_map"]], ["add", "theorem", "coe_id", ["locally_bounded_map"]], ["add", "theorem", "coe_of_map_bounded", ["locally_bounded_map"]], ["add", "def", "comp", ["locally_bounded_map"]], ["add", "theorem", "comp_apply", ["locally_bounded_map"]], ["add", "theorem", "comp_assoc", ["locally_bounded_map"]], ["add", "theorem", "comp_id", ["locally_bounded_map"]], ["add", "theorem", "ext", ["locally_bounded_map"]], ["add", "theorem", "id_apply", ["locally_bounded_map"]], ["add", "theorem", "id_comp", ["locally_bounded_map"]], ["add", "def", "of_map_bounded", ["locally_bounded_map"]], ["add", "theorem", "of_map_bounded_apply", ["locally_bounded_map"]], ["add", "theorem", "to_fun_eq_coe", ["locally_bounded_map"]], ["add", "structure", "locally_bounded_map", []]]}]}, {"timestamp": 1647418911, "sha": "68033a22", "message": "feat(set_theory/ordinal_arithmetic): A set of ordinals is bounded above iff it's small (#11870)", "changes": [{"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": [["add", "theorem", "small_subset", []]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "bdd_above_iff_small", ["ordinal"]], ["add", "theorem", "le_sup_shrink_equiv", ["ordinal"]], ["add", "theorem", "small_Iio", ["ordinal"]], ["add", "theorem", "sup_eq_Sup", ["ordinal"]]]}]}, {"timestamp": 1647417084, "sha": "a452bfa1", "message": "feat(analysis/seminorm): three simple lemmas about balls (#12720)\nThe lemmas are in preparation to characterize the natural bornology in terms of seminorms in LCTVSs.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "ball_eq_emptyset", ["seminorm"]], ["add", "theorem", "ball_zero_absorbs_ball_zero", ["seminorm"]], ["add", "theorem", "smul_ball_zero", ["seminorm"]]]}]}, {"timestamp": 1647408298, "sha": "1f1289fc", "message": "feat(algebra/parity + data/{int, nat}/parity): parity lemmas for general semirings (#12718)\nThis PR proves some general facts about adding even/odd elements in a semiring, thus removing the need to proving the same results for `nat` and `int`.", "changes": [{"oldPath": null, "newPath": "src/algebra/parity.lean", "changes": [["add", "theorem", "add_even", ["even"]], ["add", "theorem", "add_odd", ["even"]], ["add", "theorem", "add_even", ["odd"]], ["add", "theorem", "add_odd", ["odd"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["del", "theorem", "add_even", ["int", "even"]], ["del", "theorem", "add_odd", ["int", "even"]], ["del", "theorem", "add_even", ["int", "odd"]], ["del", "theorem", "add_odd", ["int", "odd"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["del", "theorem", "add_even", ["nat", "even"]], ["del", "theorem", "add_odd", ["nat", "even"]], ["del", "theorem", "add_even", ["nat", "odd"]], ["del", "theorem", "add_odd", ["nat", "odd"]]]}]}, {"timestamp": 1647400414, "sha": "cbd61731", "message": "chore(scripts): update nolints.txt (#12728)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1647390753, "sha": "45061f36", "message": "chore(data/equiv/basic): use `option.elim` and `sum.elim` (#12724)\nWe have these functions, why not use them?", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}]}, {"timestamp": 1647369486, "sha": "b622d4df", "message": "chore(algebra/associated): move prime_dvd_prime_iff_eq (#12706)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "prime_dvd_prime_iff_eq", []]]}, {"oldPath": "src/data/list/prime.lean", "newPath": "src/data/list/prime.lean", "changes": [["del", "theorem", "prime_dvd_prime_iff_eq", []]]}]}, {"timestamp": 1647362311, "sha": "7ed4f2ce", "message": "feat(group_theory/submonoid/operations): monoids are isomorphic to themselves as submonoids (#12658)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/basic.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["del", "def", "top_equiv", ["algebra"]], ["add", "def", "top_equiv", ["subalgebra"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": []}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "def", "top_equiv", ["lie_ideal"]], ["add", "theorem", "top_equiv_apply", ["lie_ideal"]], ["del", "def", "top_equiv_self", ["lie_ideal"]], ["del", "theorem", "top_equiv_self_apply", ["lie_ideal"]], ["add", "def", "top_equiv", ["lie_subalgebra"]], ["add", "theorem", "top_equiv_apply", ["lie_subalgebra"]], ["del", "def", "top_equiv_self", ["lie_subalgebra"]], ["del", "theorem", "top_equiv_self_apply", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "def", "top_equiv", ["submodule"]], ["del", "def", "top_equiv_self", ["submodule"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "def", "top_equiv", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "def", "top_equiv", ["submonoid"]], ["add", "theorem", "top_equiv_to_monoid_hom", ["submonoid"]]]}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}]}, {"timestamp": 1647357621, "sha": "375419f9", "message": "feat(algebra/algebra/subalgebra/pointwise): lemmas about `*` and `to_submodule` (#12695)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra/pointwise.lean", "newPath": "src/algebra/algebra/subalgebra/pointwise.lean", "changes": [["mod", "theorem", "mul_self", ["subalgebra"]], ["add", "theorem", "mul_to_submodule", ["subalgebra"]], ["add", "theorem", "mul_to_submodule_le", ["subalgebra"]]]}]}, {"timestamp": 1647353430, "sha": "7582e149", "message": "feat(linear_algebra/matrix/determinant): special case of the matrix determinant lemma (#12682)", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_one_add_col_mul_row", ["matrix"]], ["add", "theorem", "lower_two_block_triangular_det", ["matrix"]], ["mod", "theorem", "upper_two_block_triangular_det", ["matrix"]]]}]}, {"timestamp": 1647353428, "sha": "9c09965e", "message": "feat(algebra/big_operators/finprod): finite product of power is power of finite product (#12655)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_pow", []]]}]}, {"timestamp": 1647351585, "sha": "88a59785", "message": "doc(algebra/hierarchy_design): fix my name (#12674)", "changes": [{"oldPath": "src/algebra/hierarchy_design.lean", "newPath": "src/algebra/hierarchy_design.lean", "changes": []}]}, {"timestamp": 1647345107, "sha": "530f0088", "message": "feat(linear_algebra/matrix/nonsingular_inverse): Add `matrix.list_prod_inv_reverse` (#12691)", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "list_prod_inv_reverse", ["matrix"]]]}]}, {"timestamp": 1647345106, "sha": "7a02c9e6", "message": "fix(set_theory/ordinal_arithmetic): remove redundant hypothesis from `CNF_rec` (#12680)\nThe hypothesis in question was a theorem that could be deduced.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "CNF_aux", ["ordinal"]], ["mod", "theorem", "CNF_fst_le_log", ["ordinal"]], ["mod", "theorem", "CNF_pairwise", ["ordinal"]], ["mod", "theorem", "CNF_snd_lt", ["ordinal"]], ["mod", "theorem", "CNF_sorted", ["ordinal"]], ["add", "theorem", "mod_opow_log_lt_self", ["ordinal"]], ["mod", "theorem", "one_CNF", ["ordinal"]]]}]}, {"timestamp": 1647345105, "sha": "a3b39c6e", "message": "feat(linear_algebra/clifford_algebra/conjugation): add lemmas showing interaction between `involute` and `even_odd` (#12672)\nOften the even and odd submodules are defined in terms of involution, but this strategy doesn't actually work in characteristic two.", "changes": [{"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "theorem", "algebra_map_mem", ["set_like", "has_graded_one"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": [["add", "theorem", "involute_eq_of_mem_even", ["clifford_algebra"]], ["add", "theorem", "involute_eq_of_mem_odd", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": [["add", "theorem", "even_induction", ["clifford_algebra"]], ["add", "theorem", "even_odd_induction", ["clifford_algebra"]], ["add", "theorem", "odd_induction", ["clifford_algebra"]], ["add", "theorem", "ι_mul_ι_mem_even_odd_zero", ["clifford_algebra"]]]}]}, {"timestamp": 1647345104, "sha": "48ffeb79", "message": "feat(group_theory/finiteness): quotient of fg is fg (#12652)", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "mk_surjective", ["quotient_group"]]]}, {"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": [["add", "theorem", "fg_of_surjective", ["group"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "mk'_surjective", ["quotient_group"]], ["del", "theorem", "subgroup_eq_top_of_subsingleton", ["quotient_group"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "mrange_restrict_surjective", ["monoid_hom"]], ["mod", "theorem", "bot_or_exists_ne_one", ["submonoid"]], ["mod", "theorem", "bot_or_nontrivial", ["submonoid"]]]}]}, {"timestamp": 1647342628, "sha": "a98202b2", "message": "chore(category_theory/preadditive/projective_resolution): typo (#12702)", "changes": [{"oldPath": "src/category_theory/preadditive/projective_resolution.lean", "newPath": "src/category_theory/preadditive/projective_resolution.lean", "changes": []}]}, {"timestamp": 1647342627, "sha": "eefa4257", "message": "perf(analysis/convec/topology): remove topological_add_group.path_connected instance (#12675)\nThe linter was right in #10011 and `topological_add_group.path_connected` should not be an instance, because it creates enormous TC subproblems (turn on `pp.all` to get an idea of what's going on).\nApparently the instance isn't even used in mathlib.", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "path_connected", ["topological_add_group"]]]}]}, {"timestamp": 1647342626, "sha": "5b90340b", "message": "feat(model_theory/terms_and_formulas): Notation for terms and formulas from Flypitch (#12630)\nIntroduces some notation, localized to `first_order`, to make typing explicit terms and formulas easier.", "changes": [{"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": []}]}, {"timestamp": 1647340363, "sha": "d199eb99", "message": "feat(ring_theory/graded_algebra/homogeneous_ideal): refactor `homogeneous_ideal` as a structure extending ideals (#12673)\nWe refactored `homogeneous_ideal` as a structure extending ideals so that we can define a `set_like (homogeneous_ideal \\McA) A` instance.", "changes": [{"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": [["del", "theorem", "coe_Inf", ["homogeneous_ideal"]], ["del", "theorem", "coe_Sup", ["homogeneous_ideal"]], ["del", "theorem", "coe_add", ["homogeneous_ideal"]], ["del", "theorem", "coe_bot", ["homogeneous_ideal"]], ["del", "theorem", "coe_inf", ["homogeneous_ideal"]], ["del", "theorem", "coe_infi", ["homogeneous_ideal"]], ["del", "theorem", "coe_irrelevant", ["homogeneous_ideal"]], ["del", "theorem", "coe_mul", ["homogeneous_ideal"]], ["del", "theorem", "coe_sup", ["homogeneous_ideal"]], ["del", "theorem", "coe_top", ["homogeneous_ideal"]], ["mod", "theorem", "eq_bot_iff", ["homogeneous_ideal"]], ["mod", "theorem", "eq_top_iff", ["homogeneous_ideal"]], ["add", "theorem", "ext", ["homogeneous_ideal"]], ["del", "theorem", "homogeneous_core_coe_eq_self", ["homogeneous_ideal"]], ["del", "theorem", "homogeneous_hull_coe_eq_self", ["homogeneous_ideal"]], ["add", "theorem", "homogeneous_hull_to_ideal_eq_self", ["homogeneous_ideal"]], ["add", "theorem", "is_homogeneous", ["homogeneous_ideal"]], ["add", "theorem", "mem_iff", ["homogeneous_ideal"]], ["add", "def", "to_ideal", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_Inf", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_Sup", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_add", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_bot", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_homogeneous_core_eq_self", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_inf", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_infi", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_injective", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_irrelevant", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_mul", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_sup", ["homogeneous_ideal"]], ["add", "theorem", "to_ideal_top", ["homogeneous_ideal"]], ["add", "structure", "homogeneous_ideal", []], ["del", "def", "homogeneous_ideal", []], ["del", "theorem", "coe_homogeneous_core_le", ["ideal"]], ["del", "theorem", "coe_homogeneous_hull_eq_supr", ["ideal"]], ["mod", "theorem", "gc", ["ideal", "homogeneous_core"]], ["mod", "def", "gi", ["ideal", "homogeneous_core"]], ["mod", "theorem", "gc", ["ideal", "homogeneous_hull"]], ["mod", "def", "gi", ["ideal", "homogeneous_hull"]], ["del", "theorem", "coe_homogeneous_core_eq_self", ["ideal", "is_homogeneous"]], ["del", "theorem", "homogeneous_hull_eq_self", ["ideal", "is_homogeneous"]], ["mod", "theorem", "iff_eq", ["ideal", "is_homogeneous"]], ["add", "theorem", "to_ideal_homogeneous_core_eq_self", ["ideal", "is_homogeneous"]], ["add", "theorem", "to_ideal_homogeneous_hull_eq_self", ["ideal", "is_homogeneous"]], ["del", "theorem", "le_coe_homogeneous_hull", ["ideal"]], ["add", "theorem", "le_to_ideal_homogeneous_hull", ["ideal"]], ["add", "theorem", "to_ideal_homogeneous_core_le", ["ideal"]], ["add", "theorem", "to_ideal_homogeneous_hull_eq_supr", ["ideal"]]]}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}]}, {"timestamp": 1647340361, "sha": "061d04b9", "message": "feat(category_theory/monoidal): distribute tensor over direct sum (#12626)\nThis is preliminary to the monoidal structure on chain complexes.", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "theorem", "binary_total", ["category_theory", "limits", "is_bilimit"]], ["add", "theorem", "total", ["category_theory", "limits", "is_bilimit"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "dite_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_dite", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/preadditive.lean", "newPath": "src/category_theory/monoidal/preadditive.lean", "changes": [["add", "def", "left_distributor", ["category_theory"]], ["add", "theorem", "left_distributor_assoc", ["category_theory"]], ["add", "theorem", "left_distributor_hom", ["category_theory"]], ["add", "theorem", "left_distributor_inv", ["category_theory"]], ["add", "theorem", "left_distributor_right_distributor_assoc", ["category_theory"]], ["add", "def", "right_distributor", ["category_theory"]], ["add", "theorem", "right_distributor_assoc", ["category_theory"]], ["add", "theorem", "right_distributor_hom", ["category_theory"]], ["add", "theorem", "right_distributor_inv", ["category_theory"]], ["add", "theorem", "sum_tensor", ["category_theory"]], ["add", "theorem", "tensor_sum", ["category_theory"]]]}]}, {"timestamp": 1647338546, "sha": "078b213e", "message": "chore(category_theory/abelian/projective): fix typo (#12701)", "changes": [{"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": []}]}, {"timestamp": 1647331914, "sha": "92e67597", "message": "fix(category_theory/bicategory): remove spaces before closing parentheses (#12700)", "changes": [{"oldPath": "src/category_theory/bicategory/basic.lean", "newPath": "src/category_theory/bicategory/basic.lean", "changes": []}]}, {"timestamp": 1647331913, "sha": "0bd6dc2a", "message": "chore(measure_theory): move and rename some lemmas (#12699)\n* move `ae_interval_oc_iff`, `ae_measurable_interval_oc_iff`, and `ae_interval_oc_iff'` to `measure_theory.measure.measure_space`, rename `ae_interval_oc_iff'` to `ae_restrict_interval_oc_iff`;\n* add lemmas about `ae` and union of sets.", "changes": [{"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "interval_oc_eq_union", ["set"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["del", "theorem", "ae_interval_oc_iff'", []], ["del", "theorem", "ae_interval_oc_iff", []], ["del", "theorem", "ae_measurable_interval_oc_iff", []]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_measurable_interval_oc_iff", []], ["add", "theorem", "ae_measurable_union_iff", []], ["add", "theorem", "ae_interval_oc_iff", ["measure_theory"]], ["add", "theorem", "ae_restrict_Union_eq", ["measure_theory"]], ["add", "theorem", "ae_restrict_interval_oc_eq", ["measure_theory"]], ["add", "theorem", "ae_restrict_interval_oc_iff", ["measure_theory"]], ["add", "theorem", "ae_restrict_union_eq", ["measure_theory"]]]}]}, {"timestamp": 1647331912, "sha": "4b562f82", "message": "doc(data/equiv/encodable): +2 docstrings (#12698)", "changes": [{"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}]}, {"timestamp": 1647331911, "sha": "a3e0c85d", "message": "chore(cyclotomic/gal): update todo (#12693)\nthis mentioned a non-existing old solution which got superseded by `is_primitive_root.power_basis`, but is still not the right solution in the long term", "changes": [{"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}]}, {"timestamp": 1647331910, "sha": "77395f1e", "message": "chore(algebra/module/basic): Move the scalar action earlier (#12690)\nThis is prep work for golfing some of the instances.\nThis also adjust the variables slightly to be in a more sensible order.", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["mod", "theorem", "coe_smul'", ["continuous_linear_map"]], ["mod", "theorem", "coe_smul", ["continuous_linear_map"]], ["mod", "theorem", "smul_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1647331909, "sha": "025fe7cb", "message": "feat(group_theory/abelianization): An application of the three subgroups lemma (#12677)\nThis PR uses the three subgroups lemma to prove that `⁅(commutator G).centralizer, (commutator G).centralizer⁆ ≤ subgroup.center G`.", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["add", "theorem", "commutator_centralizer_commutator_le_center", []]]}]}, {"timestamp": 1647331908, "sha": "b7978f39", "message": "chore(analysis/seminorm): Weaken typeclasses on `convex` and `locally_convex` lemmas (#12645)\nGeneralize type-classes `normed_linearly_ordered_field` to `normed_field` (otherwise it would not work over complex numbers).", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}]}, {"timestamp": 1647331907, "sha": "53f6d687", "message": "feat(category_theory/preadditive) : definition of injective resolution (#12641)\nThis pr is splitted from #12545. This pr contains the definition of:\n- `InjectiveResolution`;\n- `has_injective_resolution` and `has_injective_resolutions`;\n- injective object has injective resolution.", "changes": [{"oldPath": null, "newPath": "src/category_theory/preadditive/injective_resolution.lean", "changes": [["add", "def", "self", ["category_theory", "InjectiveResolution"]], ["add", "theorem", "ι_f_succ", ["category_theory", "InjectiveResolution"]], ["add", "structure", "InjectiveResolution", ["category_theory"]]]}]}, {"timestamp": 1647331906, "sha": "585d6419", "message": "refactor(linear_algebra/basic): split file (#12637)\n`linear_algebra.basic` has become a 2800 line monster, with lots of imports.\nThis is some further work on splitting it into smaller pieces, by extracting everything about (or needing) `span` to `linear_algebra.span`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_pointwise.lean", "newPath": "src/algebra/module/submodule_pointwise.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "coord", ["linear_equiv"]], ["del", "theorem", "coord_self", ["linear_equiv"]], ["del", "theorem", "ker_to_span_singleton", ["linear_equiv"]], ["del", "def", "to_span_nonzero_singleton", ["linear_equiv"]], ["del", "theorem", "to_span_nonzero_singleton_one", ["linear_equiv"]], ["del", "theorem", "eq_on_span'", ["linear_map"]], ["del", "theorem", "eq_on_span", ["linear_map"]], ["del", "theorem", "ext_on", ["linear_map"]], ["del", "theorem", "ext_on_range", ["linear_map"]], ["del", "theorem", "map_eq_top_iff", ["linear_map"]], ["del", "theorem", "map_injective", ["linear_map"]], ["del", "theorem", "map_le_map_iff'", ["linear_map"]], ["del", "theorem", "span_singleton_eq_range", ["linear_map"]], ["del", "theorem", "span_singleton_sup_ker_eq_top", ["linear_map"]], ["del", "def", "to_span_singleton", ["linear_map"]], ["del", "theorem", "to_span_singleton_one", ["linear_map"]], ["del", "theorem", "apply_mem_span_image_of_mem_span", ["submodule"]], ["del", "theorem", "coe_scott_continuous", ["submodule"]], ["del", "theorem", "coe_sup", ["submodule"]], ["del", "theorem", "coe_supr_of_chain", ["submodule"]], ["del", "theorem", "coe_supr_of_directed", ["submodule"]], ["del", "theorem", "comap_map_eq", ["submodule"]], ["del", "theorem", "comap_map_eq_self", ["submodule"]], ["del", "theorem", "disjoint_span_singleton'", ["submodule"]], ["del", "theorem", "disjoint_span_singleton", ["submodule"]], ["del", "theorem", "le_span_singleton_iff", ["submodule"]], ["del", "theorem", "lt_sup_iff_not_mem", ["submodule"]], ["del", "theorem", "map_span", ["submodule"]], ["del", "theorem", "map_span_le", ["submodule"]], ["del", "theorem", "map_subtype_span_singleton", ["submodule"]], ["del", "theorem", "mem_Sup_of_directed", ["submodule"]], ["del", "theorem", "mem_prod", ["submodule"]], ["del", "theorem", "mem_span", ["submodule"]], ["del", "theorem", "mem_span_finite_of_mem_span", ["submodule"]], ["del", "theorem", "mem_span_insert'", ["submodule"]], ["del", "theorem", "mem_span_insert", ["submodule"]], ["del", "theorem", "mem_span_singleton", ["submodule"]], ["del", "theorem", "mem_span_singleton_self", ["submodule"]], ["del", "theorem", "mem_span_singleton_trans", ["submodule"]], ["del", "theorem", "mem_sup'", ["submodule"]], ["del", "theorem", "mem_sup", ["submodule"]], ["del", "theorem", "mem_supr", ["submodule"]], ["del", "theorem", "mem_supr_of_chain", ["submodule"]], ["del", "theorem", "mem_supr_of_directed", ["submodule"]], ["del", "theorem", "nontrivial_span_singleton", ["submodule"]], ["del", "theorem", "not_mem_span_of_apply_not_mem_span_image", ["submodule"]], ["del", "def", "prod", ["submodule"]], ["del", "theorem", "prod_bot", ["submodule"]], ["del", "theorem", "prod_coe", ["submodule"]], ["del", "theorem", "prod_inf_prod", ["submodule"]], ["del", "theorem", "prod_mono", ["submodule"]], ["del", "theorem", "prod_sup_prod", ["submodule"]], ["del", "theorem", "prod_top", ["submodule"]], ["del", "theorem", "singleton_span_is_compact_element", ["submodule"]], ["del", "def", "span", ["submodule"]], ["del", "theorem", "span_Union", ["submodule"]], ["del", "theorem", "span_attach_bUnion", ["submodule"]], ["del", "theorem", "span_coe_eq_restrict_scalars", ["submodule"]], ["del", "theorem", "span_empty", ["submodule"]], ["del", "theorem", "span_eq", ["submodule"]], ["del", "theorem", "span_eq_bot", ["submodule"]], ["del", "theorem", "span_eq_of_le", ["submodule"]], ["del", "theorem", "span_eq_supr_of_singleton_spans", ["submodule"]], ["del", "theorem", "span_image", ["submodule"]], ["del", "theorem", "span_induction'", ["submodule"]], ["del", "theorem", "span_induction", ["submodule"]], ["del", "theorem", "span_insert", ["submodule"]], ["del", "theorem", "span_insert_eq_span", ["submodule"]], ["del", "theorem", "span_insert_zero", ["submodule"]], ["del", "theorem", "span_int_eq", ["submodule"]], ["del", "theorem", "span_int_eq_add_subgroup_closure", ["submodule"]], ["del", "theorem", "span_le", ["submodule"]], ["del", "theorem", "span_le_restrict_scalars", ["submodule"]], ["del", "theorem", "span_mono", ["submodule"]], ["del", "theorem", "span_nat_eq", ["submodule"]], ["del", "theorem", "span_nat_eq_add_submonoid_closure", ["submodule"]], ["del", "theorem", "span_neg", ["submodule"]], ["del", "theorem", "span_preimage_le", ["submodule"]], ["del", "theorem", "span_prod_le", ["submodule"]], ["del", "theorem", "span_singleton_eq_bot", ["submodule"]], ["del", "theorem", "span_singleton_eq_range", ["submodule"]], ["del", "theorem", "span_singleton_eq_top_iff", ["submodule"]], ["del", "theorem", "span_singleton_le_iff_mem", ["submodule"]], ["del", "theorem", "span_singleton_smul_eq", ["submodule"]], ["del", "theorem", "span_singleton_smul_le", ["submodule"]], ["del", "theorem", "span_smul_eq_of_is_unit", ["submodule"]], ["del", "theorem", "span_smul_le", ["submodule"]], ["del", "theorem", "span_span", ["submodule"]], ["del", "theorem", "span_span_coe_preimage", ["submodule"]], ["del", "theorem", "span_span_of_tower", ["submodule"]], ["del", "theorem", "span_subset_span", ["submodule"]], ["del", "theorem", "span_sup", ["submodule"]], ["del", "theorem", "span_union", ["submodule"]], ["del", "theorem", "span_univ", ["submodule"]], ["del", "theorem", "span_zero", ["submodule"]], ["del", "theorem", "span_zero_singleton", ["submodule"]], ["del", "theorem", "subset_span", ["submodule"]], ["del", "theorem", "subset_span_trans", ["submodule"]], ["del", "theorem", "sup_span", ["submodule"]], ["del", "theorem", "sup_to_add_subgroup", ["submodule"]], ["del", "theorem", "sup_to_add_submonoid", ["submodule"]], ["del", "theorem", "supr_eq_span", ["submodule"]], ["del", "theorem", "supr_induction'", ["submodule"]], ["del", "theorem", "supr_induction", ["submodule"]], ["del", "theorem", "supr_to_add_submonoid", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/span.lean", "changes": [["add", "def", "coord", ["linear_equiv"]], ["add", "theorem", "coord_self", ["linear_equiv"]], ["add", "def", "to_span_nonzero_singleton", ["linear_equiv"]], ["add", "theorem", "to_span_nonzero_singleton_one", ["linear_equiv"]], ["add", "theorem", "eq_on_span'", ["linear_map"]], ["add", "theorem", "eq_on_span", ["linear_map"]], ["add", "theorem", "ext_on", ["linear_map"]], ["add", "theorem", "ext_on_range", ["linear_map"]], ["add", "theorem", "ker_to_span_singleton", ["linear_map"]], ["add", "theorem", "map_eq_top_iff", ["linear_map"]], ["add", "theorem", "map_injective", ["linear_map"]], ["add", "theorem", "map_le_map_iff'", ["linear_map"]], ["add", "theorem", "span_singleton_eq_range", ["linear_map"]], ["add", "theorem", "span_singleton_sup_ker_eq_top", ["linear_map"]], ["add", "def", "to_span_singleton", ["linear_map"]], ["add", "theorem", "to_span_singleton_one", ["linear_map"]], ["add", "theorem", "apply_mem_span_image_of_mem_span", ["submodule"]], ["add", "theorem", "coe_scott_continuous", ["submodule"]], ["add", "theorem", "coe_sup", ["submodule"]], ["add", "theorem", "coe_supr_of_chain", ["submodule"]], ["add", "theorem", "coe_supr_of_directed", ["submodule"]], ["add", "theorem", "comap_map_eq", ["submodule"]], ["add", "theorem", "comap_map_eq_self", ["submodule"]], ["add", "theorem", "disjoint_span_singleton'", ["submodule"]], ["add", "theorem", "disjoint_span_singleton", ["submodule"]], ["add", "theorem", "le_span_singleton_iff", ["submodule"]], ["add", "theorem", "lt_sup_iff_not_mem", ["submodule"]], ["add", "theorem", "map_span", ["submodule"]], ["add", "theorem", "map_span_le", ["submodule"]], ["add", "theorem", "map_subtype_span_singleton", ["submodule"]], ["add", "theorem", "mem_Sup_of_directed", ["submodule"]], ["add", "theorem", "mem_prod", ["submodule"]], ["add", "theorem", "mem_span", ["submodule"]], ["add", "theorem", "mem_span_finite_of_mem_span", ["submodule"]], ["add", "theorem", "mem_span_insert'", ["submodule"]], ["add", "theorem", "mem_span_insert", ["submodule"]], ["add", "theorem", "mem_span_singleton", ["submodule"]], ["add", "theorem", "mem_span_singleton_self", ["submodule"]], ["add", "theorem", "mem_span_singleton_trans", ["submodule"]], ["add", "theorem", "mem_sup'", ["submodule"]], ["add", "theorem", "mem_sup", ["submodule"]], ["add", "theorem", "mem_supr", ["submodule"]], ["add", "theorem", "mem_supr_of_chain", ["submodule"]], ["add", "theorem", "mem_supr_of_directed", ["submodule"]], ["add", "theorem", "nontrivial_span_singleton", ["submodule"]], ["add", "theorem", "not_mem_span_of_apply_not_mem_span_image", ["submodule"]], ["add", "def", "prod", ["submodule"]], ["add", "theorem", "prod_bot", ["submodule"]], ["add", "theorem", "prod_coe", ["submodule"]], ["add", "theorem", "prod_inf_prod", ["submodule"]], ["add", "theorem", "prod_mono", ["submodule"]], ["add", "theorem", "prod_sup_prod", ["submodule"]], ["add", "theorem", "prod_top", ["submodule"]], ["add", "theorem", "singleton_span_is_compact_element", ["submodule"]], ["add", "def", "span", ["submodule"]], ["add", "theorem", "span_Union", ["submodule"]], ["add", "theorem", "span_attach_bUnion", ["submodule"]], ["add", "theorem", "span_coe_eq_restrict_scalars", ["submodule"]], ["add", "theorem", "span_empty", ["submodule"]], ["add", "theorem", "span_eq", ["submodule"]], ["add", "theorem", "span_eq_bot", ["submodule"]], ["add", "theorem", "span_eq_of_le", ["submodule"]], ["add", "theorem", "span_eq_supr_of_singleton_spans", ["submodule"]], ["add", "theorem", "span_image", ["submodule"]], ["add", "theorem", "span_induction'", ["submodule"]], ["add", "theorem", "span_induction", ["submodule"]], ["add", "theorem", "span_insert", ["submodule"]], ["add", "theorem", "span_insert_eq_span", ["submodule"]], ["add", "theorem", "span_insert_zero", ["submodule"]], ["add", "theorem", "span_int_eq", ["submodule"]], ["add", "theorem", "span_int_eq_add_subgroup_closure", ["submodule"]], ["add", "theorem", "span_le", ["submodule"]], ["add", "theorem", "span_le_restrict_scalars", ["submodule"]], ["add", "theorem", "span_mono", ["submodule"]], ["add", "theorem", "span_nat_eq", ["submodule"]], ["add", "theorem", "span_nat_eq_add_submonoid_closure", ["submodule"]], ["add", "theorem", "span_neg", ["submodule"]], ["add", "theorem", "span_preimage_le", ["submodule"]], ["add", "theorem", "span_prod_le", ["submodule"]], ["add", "theorem", "span_singleton_eq_bot", ["submodule"]], ["add", "theorem", "span_singleton_eq_range", ["submodule"]], ["add", "theorem", "span_singleton_eq_top_iff", ["submodule"]], ["add", "theorem", "span_singleton_le_iff_mem", ["submodule"]], ["add", "theorem", "span_singleton_smul_eq", ["submodule"]], ["add", "theorem", "span_singleton_smul_le", ["submodule"]], ["add", "theorem", "span_smul_eq_of_is_unit", ["submodule"]], ["add", "theorem", "span_smul_le", ["submodule"]], ["add", "theorem", "span_span", ["submodule"]], ["add", "theorem", "span_span_coe_preimage", ["submodule"]], ["add", "theorem", "span_span_of_tower", ["submodule"]], ["add", "theorem", "span_subset_span", ["submodule"]], ["add", "theorem", "span_sup", ["submodule"]], ["add", "theorem", "span_union", ["submodule"]], ["add", "theorem", "span_univ", ["submodule"]], ["add", "theorem", "span_zero", ["submodule"]], ["add", "theorem", "span_zero_singleton", ["submodule"]], ["add", "theorem", "subset_span", ["submodule"]], ["add", "theorem", "subset_span_trans", ["submodule"]], ["add", "theorem", "sup_span", ["submodule"]], ["add", "theorem", "sup_to_add_subgroup", ["submodule"]], ["add", "theorem", "sup_to_add_submonoid", ["submodule"]], ["add", "theorem", "supr_eq_span", ["submodule"]], ["add", "theorem", "supr_induction'", ["submodule"]], ["add", "theorem", "supr_induction", ["submodule"]], ["add", "theorem", "supr_to_add_submonoid", ["submodule"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/isocrystal.lean", "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": []}]}, {"timestamp": 1647326299, "sha": "2ad9b39a", "message": "feat(algebra/associated): add irreducible.not_dvd_one (#12686)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "not_dvd_one", ["irreducible"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "not_dvd_one", ["nat", "prime"]]]}]}, {"timestamp": 1647315654, "sha": "6d63c9be", "message": "chore(scripts): update nolints.txt (#12696)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1647315653, "sha": "0fd9e309", "message": "feat(set_theory/ordinal_arithmetic): `smul` coincides with `mul` (#12692)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "smul_eq_mul", ["ordinal"]]]}]}, {"timestamp": 1647313543, "sha": "f3378562", "message": "feat(algebra/category): show categorical image in Module agrees with range (#12605)\nThis just follows the existing code for the same fact in `AddCommGroup`.\nThis PR is preparing for a better API for homological calculations in `Module R`.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Module/images.lean", "changes": [["add", "def", "factor_thru_image", ["Module"]], ["add", "theorem", "fac", ["Module", "image"]], ["add", "theorem", "lift_fac", ["Module", "image"]], ["add", "def", "ι", ["Module", "image"]], ["add", "def", "image", ["Module"]], ["add", "theorem", "image_iso_range_hom_subtype", ["Module"]], ["add", "theorem", "image_iso_range_inv_image_ι", ["Module"]], ["add", "def", "mono_factorisation", ["Module"]]]}]}, {"timestamp": 1647305484, "sha": "11487179", "message": "chore(set_theory/ordinal_arithmetic): `well_founded` → `wf` (#12615)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1647290331, "sha": "8d2e8871", "message": "feat(number_theory/function_field): add place at infinity (#12245)", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "nat_degree_sub_eq_of_prod_eq", ["polynomial"]]]}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "theorem", "X_ne_zero", ["ratfunc"]], ["add", "def", "int_degree", ["ratfunc"]], ["add", "theorem", "int_degree_C", ["ratfunc"]], ["add", "theorem", "int_degree_X", ["ratfunc"]], ["add", "theorem", "int_degree_add", ["ratfunc"]], ["add", "theorem", "int_degree_add_le", ["ratfunc"]], ["add", "theorem", "int_degree_mul", ["ratfunc"]], ["add", "theorem", "int_degree_neg", ["ratfunc"]], ["add", "theorem", "int_degree_one", ["ratfunc"]], ["add", "theorem", "int_degree_polynomial", ["ratfunc"]], ["add", "theorem", "int_degree_zero", ["ratfunc"]], ["add", "theorem", "nat_degree_num_mul_right_sub_nat_degree_denom_mul_left_eq_int_degree", ["ratfunc"]], ["add", "theorem", "num_denom_neg", ["ratfunc"]], ["add", "theorem", "num_mul_denom_add_denom_mul_num_ne_zero", ["ratfunc"]]]}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": [["add", "theorem", "C", ["function_field", "infty_valuation"]], ["add", "theorem", "X", ["function_field", "infty_valuation"]], ["add", "theorem", "map_add_le_max'", ["function_field", "infty_valuation"]], ["add", "theorem", "map_mul'", ["function_field", "infty_valuation"]], ["add", "theorem", "map_one'", ["function_field", "infty_valuation"]], ["add", "theorem", "map_zero'", ["function_field", "infty_valuation"]], ["add", "theorem", "polynomial", ["function_field", "infty_valuation"]], ["add", "def", "infty_valuation", ["function_field"]], ["add", "theorem", "infty_valuation_apply", ["function_field"]], ["add", "def", "infty_valuation_def", ["function_field"]], ["add", "theorem", "infty_valuation_of_nonzero", ["function_field"]]]}]}, {"timestamp": 1647284313, "sha": "c1c61d44", "message": "feat(data/W/constructions): add constructions of W types (#12292)\nHere I write the naturals and lists as W-types and show that the definitions are equivalent. Any other interesting examples I should add?", "changes": [{"oldPath": "src/data/W/basic.lean", "newPath": "src/data/W/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/W/constructions.lean", "changes": [["add", "def", "equiv_list", ["W_type"]], ["add", "def", "equiv_nat", ["W_type"]], ["add", "theorem", "left_inv_list", ["W_type"]], ["add", "theorem", "left_inv_nat", ["W_type"]], ["add", "inductive", "list_α", ["W_type"]], ["add", "def", "list_α_equiv_punit_sum", ["W_type"]], ["add", "def", "list_β", ["W_type"]], ["add", "inductive", "nat_α", ["W_type"]], ["add", "def", "nat_α_equiv_punit_sum_punit", ["W_type"]], ["add", "def", "nat_β", ["W_type"]], ["add", "def", "of_list", ["W_type"]], ["add", "def", "of_nat", ["W_type"]], ["add", "theorem", "right_inv_list", ["W_type"]], ["add", "theorem", "right_inv_nat", ["W_type"]], ["add", "def", "to_list", ["W_type"]], ["add", "def", "to_nat", ["W_type"]]]}]}, {"timestamp": 1647279398, "sha": "2e562102", "message": "chore(analysis/complex/upper_half_plane): don't use `abbreviation` (#12679)\nSome day we should add Poincaré metric as a `metric_space` instance on `upper_half_plane`.\nIn the meantime, make sure that Lean doesn't use `subtype` instances for `uniform_space` and/or `metric_space`.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane.lean", "newPath": "src/analysis/complex/upper_half_plane.lean", "changes": [["mod", "def", "upper_half_plane", []]]}]}, {"timestamp": 1647272883, "sha": "28775ced", "message": "feat(tactic/interactive): guard_{hyp,target}_mod_implicit (#12668)\nThis adds two new tactics `guard_hyp_mod_implicit` and `guard_target_mod_implicit`, with the same syntax as `guard_hyp` and `guard_target`. While the `guard_*` tactics check for syntax equality, the `guard_*_mod_implicit` tactics check for definitional equality with the `none` transparency", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "test/mod_implicit.lean", "changes": []}]}, {"timestamp": 1647266387, "sha": "d8ef1de0", "message": "feat(topology/separation): add t2_space_iff (#12628)\nFrom my formalising mathematics 22 course", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1647266386, "sha": "5242a7fb", "message": "feat(data/list/infix): add lemmas and instances (#12511)", "changes": [{"oldPath": "src/data/list/infix.lean", "newPath": "src/data/list/infix.lean", "changes": [["del", "theorem", "length_le", ["list", "infix"]], ["add", "theorem", "infix_cons_iff", ["list"]], ["add", "theorem", "length_le", ["list", "is_infix"]], ["add", "theorem", "length_le", ["list", "is_prefix"]], ["add", "theorem", "length_le", ["list", "is_suffix"]], ["add", "theorem", "reverse_infix", ["list"]]]}]}, {"timestamp": 1647266385, "sha": "df3792f8", "message": "refactor(data/set): generalize `set.restrict` and take set argument first in both `set.restrict` and `subtype.restrict` (#12510)\nGeneralizes `set.restrict` to Pi types and makes both this function and `subtype.restrict` take the restricting index set before the Pi type to restrict, which makes taking the image/preimage of a set of Pi types easier (`s.restrict '' pis` is shorter than `(λ p, set.restrict p s) '' pis` -- I'd argue that this is the more common case than taking the image of a set of restricting sets on a single Pi type). Changed uses of `set.restrict` to use dot notation where possible.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "def", "from_subtype", ["category_theory", "limits", "biproduct"]], ["mod", "def", "to_subtype", ["category_theory", "limits", "biproduct"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "inj_on_iff_injective", ["set"]], ["mod", "theorem", "range_restrict", ["set"]], ["mod", "def", "restrict", ["set"]], ["mod", "theorem", "restrict_apply", ["set"]], ["mod", "theorem", "surj_on_iff_surjective", ["set"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "def", "restrict", ["subtype"]], ["mod", "theorem", "restrict_def", ["subtype"]]]}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["mod", "def", "set_symm", ["topological_fiber_bundle", "pretrivialization"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}]}, {"timestamp": 1647266383, "sha": "c1edbec8", "message": "feat(set_theory/ordinal_topology): Basic results on the order topology of ordinals (#11861)\nWe link together various notions about ordinals to their topological counterparts.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "sup", ["ordinal", "is_normal"]]]}, {"oldPath": null, "newPath": "src/set_theory/ordinal_topology.lean", "changes": [["add", "theorem", "enum_ord_is_normal_iff_is_closed", ["ordinal"]], ["add", "theorem", "is_closed_iff_bsup", ["ordinal"]], ["add", "theorem", "is_closed_iff_sup", ["ordinal"]], ["add", "theorem", "is_limit_of_mem_frontier", ["ordinal"]], ["add", "theorem", "is_normal_iff_strict_mono_and_continuous", ["ordinal"]], ["add", "theorem", "is_open_iff", ["ordinal"]], ["add", "theorem", "is_open_singleton_iff", ["ordinal"]], ["add", "theorem", "mem_closed_iff_bsup", ["ordinal"]], ["add", "theorem", "mem_closed_iff_sup", ["ordinal"]], ["add", "theorem", "mem_closure_iff_bsup", ["ordinal"]], ["add", "theorem", "mem_closure_iff_sup", ["ordinal"]]]}]}, {"timestamp": 1647260361, "sha": "09ea7fb0", "message": "feat(data/finset/noncomm_prod): finite pi lemmas (#12291)\nincluding a few helpers", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "mul_single_apply_commute", ["pi"]], ["add", "theorem", "mul_single_commute", ["pi"]]]}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": [["add", "theorem", "noncomm_prod_eq_pow_card", ["finset"]], ["add", "theorem", "noncomm_prod_map", ["finset"]], ["add", "theorem", "noncomm_prod_mul_single", ["finset"]], ["add", "theorem", "pi_ext", ["monoid_hom"]], ["add", "theorem", "nocomm_prod_map_aux", ["multiset"]], ["add", "theorem", "noncomm_prod_eq_pow_card", ["multiset"]], ["add", "theorem", "noncomm_prod_map", ["multiset"]]]}]}, {"timestamp": 1647256341, "sha": "fc882ff8", "message": "chore(ci): update trepplein to version 1.1 (#12669)\nNew upstream release, fixing some performance issues.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1647256340, "sha": "abb8e5da", "message": "feat(set_theory/principal): If `a` isn't additive principal, it's the sum of two smaller ordinals (#12664)", "changes": [{"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/principal.lean", "changes": [["add", "theorem", "exists_lt_add_of_not_principal_add", ["ordinal"]], ["add", "theorem", "principal_add_iff_add_lt_ne_self", ["ordinal"]]]}]}, {"timestamp": 1647256339, "sha": "cc6e2eb1", "message": "feat(group_theory/commutator): The three subgroups lemma (#12634)\nThis PR proves the three subgroups lemma: If `⁅⁅H₂, H₃⁆, H₁⁆ = ⊥` and `⁅⁅H₃, H₁⁆, H₂⁆ = ⊥`, then `⁅⁅H₁, H₂⁆, H₃⁆ = ⊥`.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_commutator_eq_bot_of_rotate", ["subgroup"]]]}]}, {"timestamp": 1647256338, "sha": "6a51706d", "message": "chore(topology/homotopy): Move more algebraic-flavored content about fundamental groupoid to algebraic_topology folder (#12631)\nMoved:\n - `topology/homotopy/fundamental_groupoid.lean` to `algebraic_topology/fundamental_groupoid/basic.lean`\n - the second half of `topology/homotopy/product.lean`, dealing with `fundamental_groupoid_functor` preserving products, to `algebraic_topology/fundamental_groupoid/product.lean`\n - `topology/homotopy/induced_maps.lean` to `algebraic_topology/fundamental_groupoid/induced_maps.lean`", "changes": [{"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/basic.lean", "changes": []}, {"oldPath": "src/topology/homotopy/induced_maps.lean", "newPath": "src/algebraic_topology/fundamental_groupoid/induced_maps.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_topology/fundamental_groupoid/product.lean", "changes": [["add", "def", "cone_discrete_comp", ["fundamental_groupoid_functor"]], ["add", "theorem", "cone_discrete_comp_obj_map_cone", ["fundamental_groupoid_functor"]], ["add", "def", "pi_Top_to_pi_cone", ["fundamental_groupoid_functor"]], ["add", "def", "pi_iso", ["fundamental_groupoid_functor"]], ["add", "def", "pi_to_pi_Top", ["fundamental_groupoid_functor"]], ["add", "def", "preserves_product", ["fundamental_groupoid_functor"]], ["add", "def", "prod_iso", ["fundamental_groupoid_functor"]], ["add", "def", "prod_to_prod_Top", ["fundamental_groupoid_functor"]], ["add", "theorem", "prod_to_prod_Top_map", ["fundamental_groupoid_functor"]], ["add", "def", "proj", ["fundamental_groupoid_functor"]], ["add", "def", "proj_left", ["fundamental_groupoid_functor"]], ["add", "theorem", "proj_left_map", ["fundamental_groupoid_functor"]], ["add", "theorem", "proj_map", ["fundamental_groupoid_functor"]], ["add", "def", "proj_right", ["fundamental_groupoid_functor"]], ["add", "theorem", "proj_right_map", ["fundamental_groupoid_functor"]]]}, {"oldPath": "src/topology/homotopy/product.lean", "newPath": "src/topology/homotopy/product.lean", "changes": [["del", "def", "cone_discrete_comp", ["fundamental_groupoid_functor"]], ["del", "theorem", "cone_discrete_comp_obj_map_cone", ["fundamental_groupoid_functor"]], ["del", "def", "pi_Top_to_pi_cone", ["fundamental_groupoid_functor"]], ["del", "def", "pi_iso", ["fundamental_groupoid_functor"]], ["del", "def", "pi_to_pi_Top", ["fundamental_groupoid_functor"]], ["del", "def", "preserves_product", ["fundamental_groupoid_functor"]], ["del", "def", "prod_iso", ["fundamental_groupoid_functor"]], ["del", "def", "prod_to_prod_Top", ["fundamental_groupoid_functor"]], ["del", "theorem", "prod_to_prod_Top_map", ["fundamental_groupoid_functor"]], ["del", "def", "proj", ["fundamental_groupoid_functor"]], ["del", "def", "proj_left", ["fundamental_groupoid_functor"]], ["del", "theorem", "proj_left_map", ["fundamental_groupoid_functor"]], ["del", "theorem", "proj_map", ["fundamental_groupoid_functor"]], ["del", "def", "proj_right", ["fundamental_groupoid_functor"]], ["del", "theorem", "proj_right_map", ["fundamental_groupoid_functor"]]]}]}, {"timestamp": 1647250171, "sha": "a2544deb", "message": "chore(algebra/category/Module): simp lemmas for monoidal closed (#12608)\nI'm worried by the fact that I can't express the coercions here without using `@`. They do turn up in the wild, however!", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["add", "theorem", "monoidal_closed_curry", ["Module"]], ["add", "theorem", "monoidal_closed_uncurry", ["Module"]]]}]}, {"timestamp": 1647250169, "sha": "31e60c87", "message": "feat(set_theory/{ordinal, ordinal_arithmetic}): Add various instances for `o.out.α` (#12508)", "changes": [{"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "enum_le_enum'", ["ordinal"]], ["add", "theorem", "enum_zero_eq_bot", ["ordinal"]], ["add", "theorem", "enum_zero_le'", ["ordinal"]], ["add", "theorem", "enum_zero_le", ["ordinal"]], ["add", "theorem", "le_enum_succ", ["ordinal"]], ["add", "theorem", "lt_succ", ["ordinal"]], ["add", "def", "out_order_bot_of_pos", ["ordinal"]], ["add", "theorem", "typein_le_typein'", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "enum_succ_eq_top", ["ordinal"]], ["del", "theorem", "has_succ_of_is_limit", ["ordinal"]], ["add", "theorem", "has_succ_of_type_succ_lt", ["ordinal"]], ["del", "theorem", "lt_succ", ["ordinal"]], ["add", "theorem", "out_no_max_of_succ_lt", ["ordinal"]]]}]}, {"timestamp": 1647250167, "sha": "1f428f3e", "message": "feat(data/list/basic): Split and intercalate are inverses (#12466)\nShow that split and intercalate are inverses of each other (under suitable conditions)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "intercalate_split_on", ["list"]], ["add", "theorem", "modify_head_modify_head", ["list"]], ["add", "theorem", "split_on_intercalate", ["list"]], ["mod", "theorem", "split_on_p_aux_eq", ["list"]], ["add", "theorem", "split_on_p_aux_ne_nil", ["list"]], ["mod", "theorem", "split_on_p_aux_nil", ["list"]], ["add", "theorem", "split_on_p_aux_spec", ["list"]], ["add", "theorem", "split_on_p_cons", ["list"]], ["add", "theorem", "split_on_p_eq_single", ["list"]], ["add", "theorem", "split_on_p_first", ["list"]], ["add", "theorem", "split_on_p_ne_nil", ["list"]], ["add", "theorem", "split_on_p_nil", ["list"]], ["mod", "theorem", "split_on_p_spec", ["list"]]]}]}, {"timestamp": 1647250166, "sha": "cd001b2d", "message": "feat(category_theory/bicategory/free): define free bicategories (#11998)", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/free.lean", "changes": [["add", "theorem", "comp_def", ["category_theory", "free_bicategory"]], ["add", "inductive", "hom", ["category_theory", "free_bicategory"]], ["add", "inductive", "hom₂", ["category_theory", "free_bicategory"]], ["add", "theorem", "id_def", ["category_theory", "free_bicategory"]], ["add", "def", "lift", ["category_theory", "free_bicategory"]], ["add", "def", "lift_hom", ["category_theory", "free_bicategory"]], ["add", "theorem", "lift_hom_comp", ["category_theory", "free_bicategory"]], ["add", "theorem", "lift_hom_id", ["category_theory", "free_bicategory"]], ["add", "def", "lift_hom₂", ["category_theory", "free_bicategory"]], ["add", "theorem", "lift_hom₂_congr", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_associator_hom", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_associator_inv", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_id", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_left_unitor_hom", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_left_unitor_inv", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_right_unitor_hom", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_right_unitor_inv", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_vcomp", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_whisker_left", ["category_theory", "free_bicategory"]], ["add", "theorem", "mk_whisker_right", ["category_theory", "free_bicategory"]], ["add", "def", "of", ["category_theory", "free_bicategory"]], ["add", "inductive", "rel", ["category_theory", "free_bicategory"]], ["add", "def", "free_bicategory", ["category_theory"]]]}]}, {"timestamp": 1647246704, "sha": "520f2046", "message": "feat(analysis/seminorm): add lemmas for inequalities and `finset.sup` (#12650)\nThese lemmas are not lean-trivial since seminorms map to the `real` and not to `nnreal`.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "finset_sup_apply_le", ["seminorm"]], ["add", "theorem", "finset_sup_apply_lt", ["seminorm"]]]}]}, {"timestamp": 1647246703, "sha": "0f3bfda7", "message": "feat(analysis/complex/schwarz): some versions of the Schwarz lemma (#12633)", "changes": [{"oldPath": "src/analysis/calculus/dslope.lean", "newPath": "src/analysis/calculus/dslope.lean", "changes": [["add", "theorem", "dslope_comp", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/complex/removable_singularity.lean", "newPath": "src/analysis/complex/removable_singularity.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/complex/schwarz.lean", "changes": [["add", "theorem", "abs_deriv_le_div_of_maps_to_ball", ["complex"]], ["add", "theorem", "abs_deriv_le_one_of_maps_to_ball", ["complex"]], ["add", "theorem", "abs_le_abs_of_maps_to_ball_self", ["complex"]], ["add", "theorem", "dist_le_dist_of_maps_to_ball_self", ["complex"]], ["add", "theorem", "dist_le_div_mul_dist_of_maps_to_ball", ["complex"]], ["add", "theorem", "norm_deriv_le_div_of_maps_to_ball", ["complex"]], ["add", "theorem", "norm_dslope_le_div_of_maps_to_ball", ["complex"]], ["add", "theorem", "schwarz_aux", ["complex"]]]}, {"oldPath": "src/linear_algebra/affine_space/slope.lean", "newPath": "src/linear_algebra/affine_space/slope.lean", "changes": [["add", "theorem", "slope_comp", ["affine_map"]], ["add", "theorem", "slope_comp", ["linear_map"]]]}]}, {"timestamp": 1647246702, "sha": "c2368be5", "message": "feat(topology/hom/open): Continuous open maps (#12406)\nDefine `continuous_open_map`, the type of continuous opens maps between two topological spaces, and `continuous_open_map_class`, its companion hom class.", "changes": [{"oldPath": null, "newPath": "src/topology/hom/open.lean", "changes": [["add", "theorem", "cancel_left", ["continuous_open_map"]], ["add", "theorem", "cancel_right", ["continuous_open_map"]], ["add", "theorem", "coe_comp", ["continuous_open_map"]], ["add", "theorem", "coe_id", ["continuous_open_map"]], ["add", "def", "comp", ["continuous_open_map"]], ["add", "theorem", "comp_apply", ["continuous_open_map"]], ["add", "theorem", "comp_assoc", ["continuous_open_map"]], ["add", "theorem", "comp_id", ["continuous_open_map"]], ["add", "theorem", "ext", ["continuous_open_map"]], ["add", "theorem", "id_apply", ["continuous_open_map"]], ["add", "theorem", "id_comp", ["continuous_open_map"]], ["add", "theorem", "to_fun_eq_coe", ["continuous_open_map"]], ["add", "structure", "continuous_open_map", []]]}]}, {"timestamp": 1647241557, "sha": "7b7fea55", "message": "refactor(set_theory/cardinal_ordinal): `aleph_is_principal_aleph` → `principal_add_aleph` (#12663)\nThis matches the naming scheme used throughout `set_theory/principal.lean`.", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["del", "theorem", "aleph_is_principal_add", ["cardinal"]], ["del", "theorem", "ord_is_principal_add", ["cardinal"]], ["add", "theorem", "principal_add_aleph", ["cardinal"]], ["add", "theorem", "principal_add_ord", ["cardinal"]]]}]}, {"timestamp": 1647241556, "sha": "6ebb3786", "message": "feat(set_theory/ordinal): `ord 1 = 1` (#12662)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "ord_one", ["cardinal"]]]}]}, {"timestamp": 1647241555, "sha": "18ba3950", "message": "feat(algebra/support) support of power is subset of support (#12654)", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "mul_support_pow", ["function"]]]}]}, {"timestamp": 1647241554, "sha": "6b3b567f", "message": "chore(topology/algebra/group_with_zero): fix docstring for has_continuous_inv0 (#12653)", "changes": [{"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1647241553, "sha": "1f5950a7", "message": "feat(analysis/seminorm): add lemmas for `with_seminorms` (#12649)\nTwo helper lemmas that make it easier to generate an instance for `with_seminorms`.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "with_seminorms_of_has_basis", ["seminorm"]], ["add", "theorem", "with_seminorms_of_nhds", ["seminorm"]]]}]}, {"timestamp": 1647241551, "sha": "b6fa3beb", "message": "move(topology/sets/*): Move topological types of sets together (#12648)\nMove\n* `topology.opens` to `topology.sets.opens`\n* `topology.compacts` to `topology.sets.closeds` and `topology.sets.compacts`\n`closeds` and `clopens` go into `topology.sets.closeds` and `compacts`, `nonempty_compacts`, `positive_compacts` and `compact_opens` go into `topology.sets.compacts`.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/category_theory/sites/spaces.lean", "newPath": "src/category_theory/sites/spaces.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/order/category/Frame.lean", "newPath": "src/order/category/Frame.lean", "changes": []}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/sets/closeds.lean", "changes": [["add", "theorem", "clopen", ["topological_space", "clopens"]], ["add", "theorem", "coe_bot", ["topological_space", "clopens"]], ["add", "theorem", "coe_compl", ["topological_space", "clopens"]], ["add", "theorem", "coe_inf", ["topological_space", "clopens"]], ["add", "theorem", "coe_mk", ["topological_space", "clopens"]], ["add", "theorem", "coe_sdiff", ["topological_space", "clopens"]], ["add", "theorem", "coe_sup", ["topological_space", "clopens"]], ["add", "theorem", "coe_top", ["topological_space", "clopens"]], ["add", "def", "to_opens", ["topological_space", "clopens"]], ["add", "structure", "clopens", ["topological_space"]], ["add", "theorem", "closed", ["topological_space", "closeds"]], ["add", "theorem", "coe_bot", ["topological_space", "closeds"]], ["add", "theorem", "coe_inf", ["topological_space", "closeds"]], ["add", "theorem", "coe_mk", ["topological_space", "closeds"]], ["add", "theorem", "coe_sup", ["topological_space", "closeds"]], ["add", "theorem", "coe_top", ["topological_space", "closeds"]], ["add", "structure", "closeds", ["topological_space"]]]}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/sets/compacts.lean", "changes": [["del", "theorem", "clopen", ["topological_space", "clopens"]], ["del", "theorem", "coe_bot", ["topological_space", "clopens"]], ["del", "theorem", "coe_compl", ["topological_space", "clopens"]], ["del", "theorem", "coe_inf", ["topological_space", "clopens"]], ["del", "theorem", "coe_mk", ["topological_space", "clopens"]], ["del", "theorem", "coe_sdiff", ["topological_space", "clopens"]], ["del", "theorem", "coe_sup", ["topological_space", "clopens"]], ["del", "theorem", "coe_top", ["topological_space", "clopens"]], ["del", "def", "to_opens", ["topological_space", "clopens"]], ["del", "structure", "clopens", ["topological_space"]], ["del", "theorem", "closed", ["topological_space", "closeds"]], ["del", "theorem", "coe_bot", ["topological_space", "closeds"]], ["del", "theorem", "coe_inf", ["topological_space", "closeds"]], ["del", "theorem", "coe_mk", ["topological_space", "closeds"]], ["del", "theorem", "coe_sup", ["topological_space", "closeds"]], ["del", "theorem", "coe_top", ["topological_space", "closeds"]], ["del", "structure", "closeds", ["topological_space"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/sets/opens.lean", "changes": []}]}, {"timestamp": 1647241550, "sha": "778dfd50", "message": "chore(analysis/locally_convex/basic): generalize lemmas and add simple lemmas (#12643)\nGerenalize all 'simple' lemmas for `absorb` and `absorbent` to the type-class `[semi_normed_ring 𝕜] [has_scalar 𝕜 E]`.\nAdditionally, add the lemmas `absorbs_empty`, `balanced_mem` and `zero_singleton_balanced`.", "changes": [{"oldPath": "src/analysis/locally_convex/basic.lean", "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["add", "theorem", "absorbs_empty", []], ["add", "theorem", "balanced_mem", []], ["add", "theorem", "zero_singleton_balanced", []]]}]}, {"timestamp": 1647241549, "sha": "f8d947c7", "message": "add endofunctor.algebra (#12642)\nThis is the second attempt at the following outdated pull request: https://github.com/leanprover-community/mathlib/pull/12295\nThe original post:\nIn this PR I define algebras of endofunctors, make the forgetful functor to the ambient category, and show that initial algebras have isomorphisms as their structure maps. This is mostly taken from `monad.algebra`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/endofunctor/algebra.lean", "changes": [["add", "theorem", "comp_eq_comp", ["category_theory", "endofunctor", "algebra"]], ["add", "theorem", "comp_f", ["category_theory", "endofunctor", "algebra"]], ["add", "def", "equiv_of_nat_iso", ["category_theory", "endofunctor", "algebra"]], ["add", "def", "forget", ["category_theory", "endofunctor", "algebra"]], ["add", "def", "functor_of_nat_trans", ["category_theory", "endofunctor", "algebra"]], ["add", "def", "functor_of_nat_trans_comp", ["category_theory", "endofunctor", "algebra"]], ["add", "def", "functor_of_nat_trans_eq", ["category_theory", "endofunctor", "algebra"]], ["add", "def", "functor_of_nat_trans_id", ["category_theory", "endofunctor", "algebra"]], ["add", "def", "comp", ["category_theory", "endofunctor", "algebra", "hom"]], ["add", "def", "id", ["category_theory", "endofunctor", "algebra", "hom"]], ["add", "structure", "hom", ["category_theory", "endofunctor", "algebra"]], ["add", "theorem", "id_eq_id", ["category_theory", "endofunctor", "algebra"]], ["add", "theorem", "id_f", ["category_theory", "endofunctor", "algebra"]], ["add", "theorem", "left_inv'", ["category_theory", "endofunctor", "algebra", "initial"]], ["add", "theorem", "left_inv", ["category_theory", "endofunctor", "algebra", "initial"]], ["add", "theorem", "right_inv", ["category_theory", "endofunctor", "algebra", "initial"]], ["add", "def", "str_inv", ["category_theory", "endofunctor", "algebra", "initial"]], ["add", "theorem", "str_is_iso", ["category_theory", "endofunctor", "algebra", "initial"]], ["add", "def", "iso_mk", ["category_theory", "endofunctor", "algebra"]], ["add", "theorem", "iso_of_iso", ["category_theory", "endofunctor", "algebra"]], ["add", "structure", "algebra", ["category_theory", "endofunctor"]]]}]}, {"timestamp": 1647235190, "sha": "174f1da1", "message": "refactor(set_theory/ordinal_arithmetic): Turn various results into simp lemmas (#12661)\nIn order to do this, we had to change the direction of various equalities.", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "blsub_eq_lsub'", ["ordinal"]], ["mod", "theorem", "blsub_eq_lsub", ["ordinal"]], ["add", "theorem", "bsup_eq_blsub", ["ordinal"]], ["mod", "theorem", "bsup_eq_sup'", ["ordinal"]], ["mod", "theorem", "bsup_eq_sup", ["ordinal"]], ["mod", "theorem", "lsub_eq_blsub'", ["ordinal"]], ["mod", "theorem", "lsub_eq_blsub", ["ordinal"]], ["mod", "theorem", "sup_eq_bsup'", ["ordinal"]], ["mod", "theorem", "sup_eq_bsup", ["ordinal"]], ["add", "theorem", "sup_eq_lsub", ["ordinal"]]]}]}, {"timestamp": 1647235189, "sha": "ad0988b3", "message": "docs(algebra/*): Add docstrings to additive lemmas (#12578)\nMany additive lemmas had no docstrings while their multiplicative counterparts had. This adds them in all files under `algebra`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_ite_eq'", ["finset"]], ["del", "theorem", "sum_comp", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["mod", "theorem", "exists_ne_one_of_finprod_mem_ne_one", []], ["mod", "theorem", "finprod_comp", []], ["mod", "theorem", "finprod_div_distrib", []], ["mod", "theorem", "finprod_emb_domain'", []], ["mod", "theorem", "finprod_eq_of_bijective", []], ["mod", "theorem", "finprod_induction", []], ["mod", "theorem", "finprod_mem_Union", []], ["mod", "theorem", "finprod_mem_bUnion", []], ["mod", "theorem", "finprod_mem_comm", []], ["mod", "theorem", "finprod_mem_div_distrib", []], ["mod", "theorem", "finprod_mem_dvd", []], ["mod", "theorem", "finprod_mem_empty", []], ["mod", "theorem", "finprod_mem_eq_of_bij_on", []], ["mod", "theorem", "finprod_mem_finset_product'", []], ["mod", "theorem", "finprod_mem_finset_product", []], ["mod", "theorem", "finprod_mem_image'", []], ["mod", "theorem", "finprod_mem_image", []], ["del", "theorem", "finprod_mem_induction", []], ["mod", "theorem", "finprod_mem_insert'", []], ["mod", "theorem", "finprod_mem_insert", []], ["mod", "theorem", "finprod_mem_insert_of_eq_one_if_not_mem", []], ["mod", "theorem", "finprod_mem_insert_one", []], ["mod", "theorem", "finprod_mem_mul_diff'", []], ["mod", "theorem", "finprod_mem_mul_diff", []], ["mod", "theorem", "finprod_mem_mul_distrib'", []], ["mod", "theorem", "finprod_mem_mul_distrib", []], ["mod", "theorem", "finprod_mem_of_eq_on_one", []], ["mod", "theorem", "finprod_mem_one", []], ["mod", "theorem", "finprod_mem_pair", []], ["mod", "theorem", "finprod_mem_range'", []], ["mod", "theorem", "finprod_mem_range", []], ["mod", "theorem", "finprod_mem_sUnion", []], ["mod", "theorem", "finprod_mem_singleton", []], ["mod", "theorem", "finprod_mem_union''", []], ["mod", "theorem", "finprod_mem_union'", []], ["mod", "theorem", "finprod_mem_union", []], ["del", "theorem", "finprod_mem_union_inter'", []], ["mod", "theorem", "finprod_mem_union_inter", []], ["mod", "theorem", "finprod_mul_distrib", []], ["mod", "theorem", "finsum_mul", []], ["mod", "theorem", "finsum_smul", []], ["mod", "theorem", "map_finprod_mem'", ["monoid_hom"]], ["mod", "theorem", "map_finprod_mem", ["monoid_hom"]], ["mod", "theorem", "mul_finsum", []], ["mod", "theorem", "nonempty_of_finprod_mem_ne_one", []]]}, {"oldPath": "src/algebra/big_operators/nat_antidiagonal.lean", "newPath": "src/algebra/big_operators/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": []}, {"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": [["mod", "theorem", "mul_left", ["commute"]], ["mod", "theorem", "mul_right", ["commute"]]]}, {"oldPath": "src/algebra/group/freiman.lean", "newPath": "src/algebra/group/freiman.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "map_div", []]]}, {"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": [["mod", "theorem", "conj_mk", ["semiconj_by"]], ["mod", "theorem", "mul_left", ["semiconj_by"]], ["mod", "theorem", "mul_right", ["semiconj_by"]], ["mod", "theorem", "units_inv_right", ["semiconj_by"]], ["mod", "theorem", "units_inv_symm_left", ["semiconj_by"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["mod", "theorem", "mem_of_mul_indicator_ne_one", ["set"]], ["mod", "theorem", "prod_mul_indicator_subset", ["set"]]]}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "theorem", "abs_eq_sup_inv", []]]}, {"oldPath": "src/algebra/order/hom/monoid.lean", "newPath": "src/algebra/order/hom/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": [["del", "theorem", "m_abs_abs", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_mabs", ["lattice_ordered_comm_group"]]]}, {"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}]}, {"timestamp": 1647233338, "sha": "580e1d95", "message": "feat(analysis/inner_product_space/pi_L2): `linear_isometry.extend` (#12192)\nLet `S` be a subspace of a finite-dimensional inner product\nspace `V`. A linear isometry mapping `S` into `V` can be extended to a\nfull isometry of `V`. Note that this is false if we remove the\nfinite-dimensional hypothesis; consider the shift operator\n(0, x_2, x_3, ...) to (x_2, x_3, x_4, ...).\nI hope that the naming choice is consistent. Combining the two\n`simp only` blocks in `linear_isometry.extend_apply` results in a\ntimeout, but they seem to work okay split up.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "extend_apply", ["linear_isometry"]]]}]}, {"timestamp": 1647225600, "sha": "3751ec63", "message": "feat(measure_theory/group/fundamental_domain): ess_sup_measure_restrict (#12603)\nIf `f` is invariant under the action of a countable group `G`, and `μ` is a `G`-invariant measure with a fundamental domain `s`, then the `ess_sup` of `f` restricted to `s` is the same as that of `f` on all of its domain.", "changes": [{"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["add", "theorem", "ess_sup_eq_Inf", []], ["add", "theorem", "ess_sup_mono_measure'", []]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "ess_sup_measure_restrict", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "measure_zero_of_invariant", ["measure_theory", "is_fundamental_domain"]]]}]}, {"timestamp": 1647183124, "sha": "223e7428", "message": "feat(analysis/*/{exponential, spectrum}): spectrum of a selfadjoint element is real (#12417)\nThis provides several properties of the exponential function and uses it to prove that for `𝕜 = ℝ` or `𝕜 = ℂ`, `exp 𝕜 𝕜` maps the spectrum of `a : A` (where `A` is a `𝕜`-algebra) into the spectrum of `exp 𝕜 A a`. In addition, `exp ℂ A (I • a)` is unitary when `a` is selfadjoint. Consequently, the spectrum of a selfadjoint element is real.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "def", "algebra_map_clm", []], ["add", "theorem", "algebra_map_clm_coe", []], ["add", "theorem", "algebra_map_clm_to_linear_map", []]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "algebra_map_exp_comm", []], ["add", "theorem", "algebra_map_exp_comm_of_mem_ball", []], ["add", "theorem", "star_exp", []]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "exp_mem_exp", ["spectrum"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/star/exponential.lean", "changes": [["add", "theorem", "exp_unitary", ["commute"]], ["add", "theorem", "exp_unitary_add", ["commute"]], ["add", "theorem", "exp_i_smul_unitary", ["self_adjoint"]]]}, {"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["add", "theorem", "coe_re_map_spectrum'", ["self_adjoint"]], ["add", "theorem", "coe_re_map_spectrum", ["self_adjoint"]], ["add", "theorem", "mem_spectrum_eq_re'", ["self_adjoint"]], ["add", "theorem", "mem_spectrum_eq_re", ["self_adjoint"]], ["mod", "theorem", "spectral_radius_eq_nnnorm_of_self_adjoint", []], ["mod", "theorem", "spectral_radius_eq_nnnorm_of_star_normal", []]]}]}, {"timestamp": 1647178334, "sha": "7d34f786", "message": "chore(algebra/algebra/subalgebra): reduce imports (#12636)\nSplitting a file, and reducing imports. No change in contents.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra/basic.lean", "changes": [["del", "theorem", "coe_pointwise_smul", ["subalgebra"]], ["del", "theorem", "mul_self", ["subalgebra"]], ["del", "theorem", "pointwise_smul_to_submodule", ["subalgebra"]], ["del", "theorem", "pointwise_smul_to_subring", ["subalgebra"]], ["del", "theorem", "pointwise_smul_to_subsemiring", ["subalgebra"]], ["del", "theorem", "smul_mem_pointwise_smul", ["subalgebra"]]]}, {"oldPath": null, "newPath": "src/algebra/algebra/subalgebra/pointwise.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["subalgebra"]], ["add", "theorem", "mul_self", ["subalgebra"]], ["add", "theorem", "pointwise_smul_to_submodule", ["subalgebra"]], ["add", "theorem", "pointwise_smul_to_subring", ["subalgebra"]], ["add", "theorem", "pointwise_smul_to_subsemiring", ["subalgebra"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subalgebra"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/basic.lean", "newPath": "src/linear_algebra/tensor_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1647158384, "sha": "daa257ff", "message": "feat(analysis/normed_space/star/basic): `matrix.entrywise_sup_norm_star_eq_norm` (#12201)\nThis is precisely the statement needed for a `normed_star_monoid`\ninstance on matrices using the entrywise sup norm.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_entry_le_entrywise_sup_norm", ["matrix"]]]}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["add", "theorem", "entrywise_sup_norm_star_eq_norm", ["matrix"]]]}]}, {"timestamp": 1647144857, "sha": "73530b52", "message": "feat(algebra/algebra/spectrum): prove spectral inclusion for algebra homomorphisms (#12573)\nIf `φ : A →ₐ[R] B` is an `R`-algebra homomorphism, then for any `a : A`, `spectrum R (φ a) ⊆ spectrum R a`.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "mem_resolvent_set_apply", ["alg_hom"]], ["add", "theorem", "spectrum_apply_subset", ["alg_hom"]]]}]}, {"timestamp": 1647129864, "sha": "9f1f8c13", "message": "feat(ring_theory/graded_algebra/homogeneous_ideal): definition of irrelevant ideal of a graded algebra (#12548)\nFor an `ℕ`-graded ring `⨁ᵢ 𝒜ᵢ`, the irrelevant ideal refers to `⨁_{i>0} 𝒜ᵢ`.\nThis construction is used in the Proj construction in algebraic geometry.", "changes": [{"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["add", "def", "proj_zero_ring_hom", ["graded_algebra"]]]}, {"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": [["add", "theorem", "coe_irrelevant", ["homogeneous_ideal"]], ["add", "def", "irrelevant", ["homogeneous_ideal"]], ["add", "theorem", "mem_irrelevant_iff", ["homogeneous_ideal"]]]}]}, {"timestamp": 1647119336, "sha": "5b369417", "message": "feat(data/list/basic): Stronger form of `fold_fixed` (#12613)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "foldl_fixed'", ["list"]], ["mod", "theorem", "foldl_fixed", ["list"]], ["add", "theorem", "foldr_fixed'", ["list"]], ["mod", "theorem", "foldr_fixed", ["list"]]]}]}, {"timestamp": 1647114496, "sha": "3da03b97", "message": "refactor(group_theory/commutator): Use variables and rearrange lemmas (#12629)\nThis PR adds variables, and rearranges some of the lemmas (moving the lemmas about normal subgroups to a separate section).", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["mod", "theorem", "commutator_bot_left", ["subgroup"]], ["mod", "theorem", "commutator_bot_right", ["subgroup"]], ["mod", "theorem", "commutator_comm", ["subgroup"]], ["mod", "theorem", "commutator_comm_le", ["subgroup"]], ["mod", "theorem", "commutator_def'", ["subgroup"]], ["mod", "theorem", "commutator_eq_bot_iff_le_centralizer", ["subgroup"]], ["mod", "theorem", "commutator_le", ["subgroup"]], ["mod", "theorem", "commutator_le_inf", ["subgroup"]], ["mod", "theorem", "commutator_le_left", ["subgroup"]], ["mod", "theorem", "commutator_le_right", ["subgroup"]], ["mod", "theorem", "commutator_mem_commutator", ["subgroup"]], ["mod", "theorem", "commutator_mono", ["subgroup"]], ["mod", "theorem", "commutator_prod_prod", ["subgroup"]], ["mod", "theorem", "map_commutator", ["subgroup"]]]}]}, {"timestamp": 1647108082, "sha": "23269bf0", "message": "feat(category_theory/preadditive/Mat): ring version (#12617)", "changes": [{"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": [["add", "theorem", "comp_apply", ["category_theory", "Mat"]], ["add", "theorem", "comp_def", ["category_theory", "Mat"]], ["add", "def", "equivalence_single_obj", ["category_theory", "Mat"]], ["add", "def", "equivalence_single_obj_inverse", ["category_theory", "Mat"]], ["add", "theorem", "id_apply", ["category_theory", "Mat"]], ["add", "theorem", "id_apply_of_ne", ["category_theory", "Mat"]], ["add", "theorem", "id_apply_self", ["category_theory", "Mat"]], ["add", "theorem", "id_def", ["category_theory", "Mat"]], ["add", "def", "Mat", ["category_theory"]]]}]}, {"timestamp": 1647108081, "sha": "707df2cd", "message": "feat(model_theory/definability): Definability with parameters (#12611)\nExtends the definition of definable sets to include a parameter set.\nDefines shorthands is_definable₁ and is_definable₂ for 1- and 2-dimensional definable sets.", "changes": [{"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": [["add", "theorem", "compl", ["first_order", "language", "definable"]], ["add", "theorem", "image_comp_equiv", ["first_order", "language", "definable"]], ["add", "theorem", "inter", ["first_order", "language", "definable"]], ["add", "theorem", "preimage_comp", ["first_order", "language", "definable"]], ["add", "theorem", "sdiff", ["first_order", "language", "definable"]], ["add", "theorem", "union", ["first_order", "language", "definable"]], ["add", "structure", "definable", ["first_order", "language"]], ["add", "theorem", "definable_empty", ["first_order", "language"]], ["add", "theorem", "definable_finset_bInter", ["first_order", "language"]], ["add", "theorem", "definable_finset_bUnion", ["first_order", "language"]], ["add", "theorem", "definable_finset_inf", ["first_order", "language"]], ["add", "theorem", "definable_finset_sup", ["first_order", "language"]], ["mod", "theorem", "coe_bot", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_compl", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_inf", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_sup", ["first_order", "language", "definable_set"]], ["mod", "theorem", "coe_top", ["first_order", "language", "definable_set"]], ["mod", "theorem", "le_iff", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_compl", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_inf", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_sup", ["first_order", "language", "definable_set"]], ["mod", "theorem", "mem_top", ["first_order", "language", "definable_set"]], ["mod", "theorem", "not_mem_bot", ["first_order", "language", "definable_set"]], ["mod", "def", "definable_set", ["first_order", "language"]], ["add", "theorem", "definable_univ", ["first_order", "language"]], ["add", "def", "definable₁", ["first_order", "language"]], ["add", "def", "definable₂", ["first_order", "language"]], ["del", "theorem", "compl", ["first_order", "language", "is_definable"]], ["del", "theorem", "inter", ["first_order", "language", "is_definable"]], ["del", "theorem", "sdiff", ["first_order", "language", "is_definable"]], ["del", "theorem", "union", ["first_order", "language", "is_definable"]], ["del", "structure", "is_definable", ["first_order", "language"]], ["del", "theorem", "is_definable_empty", ["first_order", "language"]], ["del", "theorem", "is_definable_univ", ["first_order", "language"]]]}]}, {"timestamp": 1647108080, "sha": "9293174a", "message": "feat(algebra/category/Module): monoidal_preadditive (#12607)", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/preadditive.lean", "newPath": "src/category_theory/monoidal/preadditive.lean", "changes": []}]}, {"timestamp": 1647108079, "sha": "e4ea2bca", "message": "feat(topology/algebra/continuous_monoid_hom): Define the Pontryagin dual (#12602)\nThis PR adds the definition of the Pontryagin dual.\nWe're still missing the locally compact instance. I thought I could get it from `closed_embedding (to_continuous_map : continuous_monoid_hom A B → C(A, B))`, but actually `C(A, B)` is almost never locally compact.", "changes": [{"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": [["add", "def", "pontryagin_dual", []]]}]}, {"timestamp": 1647108078, "sha": "5a9fb92b", "message": "feat(topology/category/Locale): The category of locales (#12580)\nDefine `Locale`, the category of locales, as the opposite of `Frame`.", "changes": [{"oldPath": "src/order/category/Frame.lean", "newPath": "src/order/category/Frame.lean", "changes": [["add", "def", "Top_op_to_Frame", []]]}, {"oldPath": null, "newPath": "src/topology/category/Locale.lean", "changes": [["add", "theorem", "coe_of", ["Locale"]], ["add", "def", "of", ["Locale"]], ["add", "def", "Locale", []], ["add", "def", "Top_to_Locale", []]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "theorem", "comap_injective", ["topological_space", "opens"]]]}]}, {"timestamp": 1647108077, "sha": "96bae07c", "message": "feat(order/complete_lattice): add `complete_lattice.independent_pair` (#12565)\nThis makes `complete_lattice.independent` easier to work with in the degenerate case.", "changes": [{"oldPath": "counterexamples/direct_sum_is_internal.lean", "newPath": "counterexamples/direct_sum_is_internal.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_diff_eq_singleton", ["set"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "independent_pair", ["complete_lattice"]], ["add", "theorem", "set_independent_pair", ["complete_lattice"]]]}]}, {"timestamp": 1647101862, "sha": "7e5ac6ad", "message": "chore(analysis/convex/strict): Reduce typeclass assumptions, golf (#12627)\nMove lemmas around so they are stated with the correct generality. Restate theorems using pointwise operations. Golf proofs. Fix typos in docstrings.", "changes": [{"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": [["mod", "theorem", "add", ["strict_convex"]], ["mod", "theorem", "add_left", ["strict_convex"]], ["mod", "theorem", "add_right", ["strict_convex"]], ["mod", "theorem", "affinity", ["strict_convex"]], ["mod", "theorem", "linear_image", ["strict_convex"]], ["mod", "theorem", "smul", ["strict_convex"]], ["add", "theorem", "vadd", ["strict_convex"]]]}]}, {"timestamp": 1647101861, "sha": "22bdc8ec", "message": "feat(order/upper_lower): Upper/lower sets (#12189)\nDefine upper and lower sets both as unbundled predicates and as bundled types.", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "compl_Inf'", []], ["mod", "theorem", "compl_Inf", []], ["add", "theorem", "compl_Sup'", []], ["mod", "theorem", "compl_Sup", []]]}, {"oldPath": null, "newPath": "src/order/upper_lower.lean", "changes": [["add", "theorem", "compl", ["is_lower_set"]], ["add", "theorem", "inter", ["is_lower_set"]], ["add", "theorem", "union", ["is_lower_set"]], ["add", "def", "is_lower_set", []], ["add", "theorem", "is_lower_set_Inter", []], ["add", "theorem", "is_lower_set_Inter₂", []], ["add", "theorem", "is_lower_set_Union", []], ["add", "theorem", "is_lower_set_Union₂", []], ["add", "theorem", "is_lower_set_empty", []], ["add", "theorem", "is_lower_set_preimage_of_dual_iff", []], ["add", "theorem", "is_lower_set_preimage_to_dual_iff", []], ["add", "theorem", "is_lower_set_sInter", []], ["add", "theorem", "is_lower_set_sUnion", []], ["add", "theorem", "is_lower_set_univ", []], ["add", "theorem", "compl", ["is_upper_set"]], ["add", "theorem", "inter", ["is_upper_set"]], ["add", "theorem", "union", ["is_upper_set"]], ["add", "def", "is_upper_set", []], ["add", "theorem", "is_upper_set_Inter", []], ["add", "theorem", "is_upper_set_Inter₂", []], ["add", "theorem", "is_upper_set_Union", []], ["add", "theorem", "is_upper_set_Union₂", []], ["add", "theorem", "is_upper_set_empty", []], ["add", "theorem", "is_upper_set_preimage_of_dual_iff", []], ["add", "theorem", "is_upper_set_preimage_to_dual_iff", []], ["add", "theorem", "is_upper_set_sInter", []], ["add", "theorem", "is_upper_set_sUnion", []], ["add", "theorem", "is_upper_set_univ", []], ["add", "theorem", "coe_Inf", ["lower_set"]], ["add", "theorem", "coe_Sup", ["lower_set"]], ["add", "theorem", "coe_bot", ["lower_set"]], ["add", "theorem", "coe_compl", ["lower_set"]], ["add", "theorem", "coe_inf", ["lower_set"]], ["add", "theorem", "coe_infi", ["lower_set"]], ["add", "theorem", "coe_infi₂", ["lower_set"]], ["add", "theorem", "coe_sup", ["lower_set"]], ["add", "theorem", "coe_supr", ["lower_set"]], ["add", "theorem", "coe_supr₂", ["lower_set"]], ["add", "theorem", "coe_top", ["lower_set"]], ["add", "def", "compl", ["lower_set"]], ["add", "theorem", "compl_compl", ["lower_set"]], ["add", "theorem", "compl_infi₂", ["lower_set"]], ["add", "theorem", "compl_supr₂", ["lower_set"]], ["add", "theorem", "ext", ["lower_set"]], ["add", "structure", "lower_set", []], ["add", "theorem", "coe_Inf", ["upper_set"]], ["add", "theorem", "coe_Sup", ["upper_set"]], ["add", "theorem", "coe_bot", ["upper_set"]], ["add", "theorem", "coe_compl", ["upper_set"]], ["add", "theorem", "coe_inf", ["upper_set"]], ["add", "theorem", "coe_infi", ["upper_set"]], ["add", "theorem", "coe_infi₂", ["upper_set"]], ["add", "theorem", "coe_sup", ["upper_set"]], ["add", "theorem", "coe_supr", ["upper_set"]], ["add", "theorem", "coe_supr₂", ["upper_set"]], ["add", "theorem", "coe_top", ["upper_set"]], ["add", "def", "compl", ["upper_set"]], ["add", "theorem", "compl_compl", ["upper_set"]], ["add", "theorem", "compl_infi₂", ["upper_set"]], ["add", "theorem", "compl_supr₂", ["upper_set"]], ["add", "theorem", "ext", ["upper_set"]], ["add", "structure", "upper_set", []]]}]}, {"timestamp": 1647099821, "sha": "dc4e5cb4", "message": "chore(analysis): move lemmas around (#12621)\n* move `smul_unit_ball` to `analysis.normed_space.pointwise`, rename it to `smul_unit_ball_of_pos`;\n* reorder lemmas in `analysis.normed_space.pointwise`;\n* add `vadd_ball_zero`, `vadd_closed_ball_zero`, `smul_unit`, `affinity_unit_ball`, `affinity_unit_closed_ball`.", "changes": [{"oldPath": "src/analysis/convex/gauge.lean", "newPath": "src/analysis/convex/gauge.lean", "changes": [["del", "theorem", "smul_unit_ball", []]]}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["add", "theorem", "affinity_unit_ball", []], ["add", "theorem", "affinity_unit_closed_ball", []], ["mod", "theorem", "sphere_nonempty", ["normed_space"]], ["add", "theorem", "smul_closed_unit_ball", []], ["add", "theorem", "smul_closed_unit_ball_of_nonneg", []], ["mod", "theorem", "smul_sphere", []], ["add", "theorem", "smul_unit_ball", []], ["add", "theorem", "smul_unit_ball_of_pos", []], ["add", "theorem", "vadd_ball_zero", []], ["add", "theorem", "vadd_closed_ball_zero", []]]}]}, {"timestamp": 1647094093, "sha": "7257ee71", "message": "chore(data/nat/prime): restate card_multiples without finset.sep (#12625)\nAs suggested by Eric Wieser in #12592.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "card_multiples", []]]}]}, {"timestamp": 1647094092, "sha": "a63b99c3", "message": "chore(category_theory/closed/monoidal): fix notation (#12612)\nPreviously the `C` in the internal hom arrow ` ⟶[C] ` was hardcoded, which wasn't very useful!\nI've also reduced the precedence slightly, so we now require more parentheses, but I think these are less confusing rather than more so it is a good side effect?", "changes": [{"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": [["mod", "def", "curry", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "curry_eq_iff", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "curry_injective", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "curry_uncurry", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "eq_curry_iff", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "hom_equiv_symm_apply_eq", ["category_theory", "monoidal_closed"]], ["mod", "def", "uncurry", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "uncurry_eq", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "uncurry_injective", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "uncurry_natural_left", ["category_theory", "monoidal_closed"]], ["mod", "theorem", "uncurry_natural_right", ["category_theory", "monoidal_closed"]]]}]}, {"timestamp": 1647094091, "sha": "956f3dbc", "message": "chore(category_theory/limits): correct lemma names (#12606)", "changes": [{"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "kernel_comparison_comp_ι", ["category_theory", "limits"]], ["del", "theorem", "kernel_comparison_comp_π", ["category_theory", "limits"]], ["del", "theorem", "ι_comp_cokernel_comparison", ["category_theory", "limits"]], ["add", "theorem", "π_comp_cokernel_comparison", ["category_theory", "limits"]]]}]}, {"timestamp": 1647094090, "sha": "9456a744", "message": "feat(group_theory/commutator): Prove `commutator_eq_bot_iff_le_centralizer` (#12598)\nThis lemma is needed for the three subgroups lemma.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_eq_bot_iff_le_centralizer", ["subgroup"]]]}]}, {"timestamp": 1647094089, "sha": "b9ab27bd", "message": "feat(group_theory/subgroup/basic): add eq_one_of_noncomm_prod_eq_one_of_independent (#12525)\n`finset.noncomm_prod` is “injective” in `f` if `f` maps into independent subgroups. It\ngeneralizes (one direction of) `subgroup.disjoint_iff_mul_eq_one`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "eq_one_of_noncomm_prod_eq_one_of_independent", ["subgroup"]]]}]}, {"timestamp": 1647092145, "sha": "b21c1c9b", "message": "split(analysis/locally_convex/basic): Split off `analysis.seminorm` (#12624)\nMove `balanced`, `absorbs`, `absorbent` to a new file.\nFor `analysis.seminorm`, I'm crediting\n* Jean for #4827\n* myself for\n * #9097\n * #11487\n* Moritz for\n * #11329\n * #11414\n * #11477\nFor `analysis.locally_convex.basic`, I'm crediting\n* Jean for #4827\n* Bhavik for\n * #7358\n * #9097\n* myself for\n * #9097\n * #10999\n * #11487", "changes": [{"oldPath": null, "newPath": "src/analysis/locally_convex/basic.lean", "changes": [["add", "theorem", "absorbs", ["absorbent"]], ["add", "theorem", "subset", ["absorbent"]], ["add", "theorem", "zero_mem", ["absorbent"]], ["add", "def", "absorbent", []], ["add", "theorem", "absorbent_iff_forall_absorbs_singleton", []], ["add", "theorem", "absorbent_iff_nonneg_lt", []], ["add", "theorem", "absorbent_nhds_zero", []], ["add", "theorem", "absorbent_univ", []], ["add", "theorem", "inter", ["absorbs"]], ["add", "theorem", "mono", ["absorbs"]], ["add", "theorem", "mono_left", ["absorbs"]], ["add", "theorem", "mono_right", ["absorbs"]], ["add", "theorem", "union", ["absorbs"]], ["add", "def", "absorbs", []], ["add", "theorem", "absorbs_inter", []], ["add", "theorem", "absorbs_union", []], ["add", "theorem", "absorbs_zero_iff", []], ["add", "theorem", "absorbs_self", ["balanced"]], ["add", "theorem", "add", ["balanced"]], ["add", "theorem", "closure", ["balanced"]], ["add", "theorem", "inter", ["balanced"]], ["add", "theorem", "interior", ["balanced"]], ["add", "theorem", "smul", ["balanced"]], ["add", "theorem", "smul_eq", ["balanced"]], ["add", "theorem", "smul_mono", ["balanced"]], ["add", "theorem", "subset_smul", ["balanced"]], ["add", "theorem", "union", ["balanced"]], ["add", "def", "balanced", []], ["add", "theorem", "balanced_univ", []], ["add", "theorem", "balanced_zero_union_interior", []]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["del", "theorem", "absorbs", ["absorbent"]], ["del", "theorem", "subset", ["absorbent"]], ["del", "theorem", "zero_mem", ["absorbent"]], ["del", "def", "absorbent", []], ["del", "theorem", "absorbent_iff_forall_absorbs_singleton", []], ["del", "theorem", "absorbent_iff_nonneg_lt", []], ["del", "theorem", "absorbent_nhds_zero", []], ["del", "theorem", "absorbent_univ", []], ["del", "theorem", "inter", ["absorbs"]], ["del", "theorem", "mono", ["absorbs"]], ["del", "theorem", "mono_left", ["absorbs"]], ["del", "theorem", "mono_right", ["absorbs"]], ["del", "theorem", "union", ["absorbs"]], ["del", "def", "absorbs", []], ["del", "theorem", "absorbs_inter", []], ["del", "theorem", "absorbs_union", []], ["del", "theorem", "absorbs_zero_iff", []], ["del", "theorem", "absorbs_self", ["balanced"]], ["del", "theorem", "add", ["balanced"]], ["del", "theorem", "closure", ["balanced"]], ["del", "theorem", "inter", ["balanced"]], ["del", "theorem", "interior", ["balanced"]], ["del", "theorem", "smul", ["balanced"]], ["del", "theorem", "smul_eq", ["balanced"]], ["del", "theorem", "smul_mono", ["balanced"]], ["del", "theorem", "subset_smul", ["balanced"]], ["del", "theorem", "union", ["balanced"]], ["del", "def", "balanced", []], ["del", "theorem", "balanced_univ", []], ["del", "theorem", "balanced_zero_union_interior", []]]}]}, {"timestamp": 1647085040, "sha": "a4187fef", "message": "chore(algebra/category/Module): remove unnecessary universe restriction (#12610)", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["mod", "def", "of_hom", ["Module"]]]}]}, {"timestamp": 1647085039, "sha": "31d28c62", "message": "fix(src/algebra/big_operators/multiset): unify prod_le_pow_card and prod_le_of_forall_le (#12589)\nusing the name `prod_le_pow_card` as per https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/duplicate.20lemmas\nbut use the phrasing of prod_le_of_forall_le with non-implicit\n`multiset`, as that is how it is used.", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["del", "theorem", "prod_le_of_forall_le", ["multiset"]], ["mod", "theorem", "prod_le_pow_card", ["multiset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["del", "theorem", "le_prod_of_forall_le", ["finset"]], ["add", "theorem", "pow_card_le_prod", ["finset"]], ["del", "theorem", "prod_le_of_forall_le", ["finset"]], ["add", "theorem", "prod_le_pow_card", ["finset"]]]}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/combinatorics/double_counting.lean", "newPath": "src/combinatorics/double_counting.lean", "changes": []}, {"oldPath": "src/data/list/prod_monoid.lean", "newPath": "src/data/list/prod_monoid.lean", "changes": [["del", "theorem", "prod_le_of_forall_le", ["list"]], ["add", "theorem", "prod_le_pow_card", ["list"]]]}, {"oldPath": "src/linear_algebra/matrix/polynomial.lean", "newPath": "src/linear_algebra/matrix/polynomial.lean", "changes": []}]}, {"timestamp": 1647083194, "sha": "2241588b", "message": "feat(topology/homotopy): Homotopic maps induce naturally isomorphic functors between fundamental groupoid (#11595)", "changes": [{"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": [["add", "theorem", "id_to_functor", ["category_theory", "Groupoid"]]]}, {"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": [["add", "theorem", "map_eq", ["fundamental_groupoid"]]]}, {"oldPath": null, "newPath": "src/topology/homotopy/induced_maps.lean", "changes": [["add", "theorem", "apply_one_path", ["continuous_map", "homotopy"]], ["add", "theorem", "apply_zero_path", ["continuous_map", "homotopy"]], ["add", "def", "diagonal_path'", ["continuous_map", "homotopy"]], ["add", "def", "diagonal_path", ["continuous_map", "homotopy"]], ["add", "theorem", "eq_diag_path", ["continuous_map", "homotopy"]], ["add", "theorem", "eq_path_of_eq_image", ["continuous_map", "homotopy"]], ["add", "theorem", "eval_at_eq", ["continuous_map", "homotopy"]], ["add", "def", "hcast", ["continuous_map", "homotopy"]], ["add", "theorem", "hcast_def", ["continuous_map", "homotopy"]], ["add", "theorem", "heq_path_of_eq_image", ["continuous_map", "homotopy"]], ["add", "def", "prod_to_prod_Top_I", ["continuous_map", "homotopy"]], ["add", "theorem", "ulift_apply", ["continuous_map", "homotopy"]], ["add", "def", "ulift_map", ["continuous_map", "homotopy"]], ["add", "def", "equiv_of_homotopy_equiv", ["fundamental_groupoid_functor"]], ["add", "def", "homotopic_maps_nat_iso", ["fundamental_groupoid_functor"]], ["add", "def", "path01", ["unit_interval"]], ["add", "def", "uhpath01", ["unit_interval"]], ["add", "def", "upath01", ["unit_interval"]]]}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": [["add", "def", "eval_at", ["continuous_map", "homotopy"]], ["add", "theorem", "hpath_hext", ["path", "homotopic"]]]}, {"oldPath": "src/topology/homotopy/product.lean", "newPath": "src/topology/homotopy/product.lean", "changes": [["add", "theorem", "prod_to_prod_Top_map", ["fundamental_groupoid_functor"]]]}]}, {"timestamp": 1647079074, "sha": "5f3f70fe", "message": "doc(category_theory/monoidal/rigid): noting future work (#12620)", "changes": [{"oldPath": "src/category_theory/monoidal/rigid.lean", "newPath": "src/category_theory/monoidal/rigid.lean", "changes": []}]}, {"timestamp": 1647079073, "sha": "3d41a5bd", "message": "refactor(group_theory/commutator): Golf proof of `commutator_mono` (#12619)\nThis PR golfs the proof of `commutator_mono` by using `commutator_le` rather than `closure_mono`.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": []}]}, {"timestamp": 1647079072, "sha": "72c6979b", "message": "refactor(set_theory/ordinal_arithmetic): remove dot notation (#12614)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "strict_mono", ["ordinal", "enum_ord"]], ["add", "theorem", "enum_ord_strict_mono", ["ordinal"]]]}]}, {"timestamp": 1647074178, "sha": "3aaa5647", "message": "refactor(group_theory/commutator): Golf proof of `commutator_comm` (#12600)\nThis PR golfs the proof of `commutator_comm`.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_comm_le", ["subgroup"]]]}]}, {"timestamp": 1647064652, "sha": "1463f592", "message": "fix(tactic/suggest): fixing `library_search` (#12616)\nFurther enhancing `library_search` search possibilities for 'ne' and 'not eq'\nRelated: https://github.com/leanprover-community/mathlib/pull/11742", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": [["add", "structure", "foo", ["test", "library_search"]]]}]}, {"timestamp": 1647064651, "sha": "e8d0cacf", "message": "feat(analysis/inner_product_space/adjoint): gram lemmas (#12139)\nThe gram operator is a self-adjoint, positive operator.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "im_inner_adjoint_mul_self_eq_zero", ["linear_map"]], ["add", "theorem", "is_self_adjoint_adjoint_mul_self", ["linear_map"]], ["add", "theorem", "re_inner_adjoint_mul_self_nonneg", ["linear_map"]]]}]}, {"timestamp": 1647058940, "sha": "1eaf4999", "message": "feat(group_theory/subgroup/basic): {multiset_,}noncomm_prod_mem (#12523)\nand same for submonoids.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "multiset_noncomm_prod_mem", ["subgroup"]], ["add", "theorem", "noncomm_prod_mem", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "multiset_noncomm_prod_mem", ["submonoid"]], ["add", "theorem", "noncomm_prod_mem", ["submonoid"]]]}]}, {"timestamp": 1647058939, "sha": "6ee6203c", "message": "feat(counterexample) : a homogeneous ideal that is not prime but homogeneously prime (#12485)\nFor graded rings, if the indexing set is nice, then a homogeneous ideal `I` is prime if and only if it is homogeneously prime, i.e. product of two homogeneous elements being in `I` implying at least one of them is in `I`. This fact is in `src/ring_theory/graded_algebra/radical.lean`. This counter example is meant to show that \"nice condition\" at least needs to include cancellation property by exhibiting an ideal in Zmod4^2 graded by a two element set being homogeneously prime but not prime. In #12277, Eric suggests that this counter example is worth pr-ing, so here is the pr.", "changes": [{"oldPath": null, "newPath": "counterexamples/homogeneous_prime_not_prime.lean", "changes": [["add", "def", "I", ["counterexample_not_prime_but_homogeneous_prime"]], ["add", "theorem", "I_is_homogeneous", ["counterexample_not_prime_but_homogeneous_prime"]], ["add", "theorem", "I_not_prime", ["counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "decompose", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "left_inv", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "mul_mem", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "one_mem", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "theorem", "right_inv", ["counterexample_not_prime_but_homogeneous_prime", "grading"]], ["add", "def", "grading", ["counterexample_not_prime_but_homogeneous_prime"]], ["add", "theorem", "homogeneous_mem_or_mem", ["counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "submodule_o", ["counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "submodule_z", ["counterexample_not_prime_but_homogeneous_prime"]], ["add", "def", "two", ["counterexample_not_prime_but_homogeneous_prime"]]]}, {"oldPath": "src/ring_theory/graded_algebra/radical.lean", "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": []}]}, {"timestamp": 1647052134, "sha": "2e7483d2", "message": "refactor(group_theory/commutator): Move and golf `commutator_le` (#12599)\nThis PR golfs `commutator_le` and moves it earlier in the file so that it can be used earlier.\nThis PR will conflict with #12600, so don't merge them simultaneously (bors d+ might be better).", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["mod", "theorem", "commutator_le", ["subgroup"]]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}]}, {"timestamp": 1647052133, "sha": "09d0f028", "message": "chore({category_theory,order}/category/*): Missing `dsimp` lemmas (#12593)\nAdd the `dsimp` lemmas stating `↥(of α) = α `. Also rename the few `to_dual` functors to `dual` to match the other files.", "changes": [{"oldPath": "src/category_theory/category/Bipointed.lean", "newPath": "src/category_theory/category/Bipointed.lean", "changes": [["add", "theorem", "coe_of", ["Bipointed"]]]}, {"oldPath": "src/category_theory/category/PartialFun.lean", "newPath": "src/category_theory/category/PartialFun.lean", "changes": [["add", "theorem", "coe_of", ["PartialFun"]]]}, {"oldPath": "src/category_theory/category/Pointed.lean", "newPath": "src/category_theory/category/Pointed.lean", "changes": [["add", "theorem", "coe_of", ["Pointed"]]]}, {"oldPath": "src/category_theory/category/Twop.lean", "newPath": "src/category_theory/category/Twop.lean", "changes": [["add", "theorem", "coe_of", ["Twop"]], ["add", "theorem", "coe_to_Bipointed", ["Twop"]]]}, {"oldPath": "src/order/category/BoolAlg.lean", "newPath": "src/order/category/BoolAlg.lean", "changes": [["add", "theorem", "coe_of", ["BoolAlg"]]]}, {"oldPath": "src/order/category/BoundedLattice.lean", "newPath": "src/order/category/BoundedLattice.lean", "changes": [["add", "theorem", "coe_of", ["BoundedLattice"]]]}, {"oldPath": "src/order/category/BoundedOrder.lean", "newPath": "src/order/category/BoundedOrder.lean", "changes": [["add", "theorem", "coe_of", ["BoundedOrder"]]]}, {"oldPath": "src/order/category/CompleteLattice.lean", "newPath": "src/order/category/CompleteLattice.lean", "changes": [["add", "theorem", "coe_of", ["CompleteLattice"]]]}, {"oldPath": "src/order/category/DistribLattice.lean", "newPath": "src/order/category/DistribLattice.lean", "changes": [["add", "theorem", "coe_of", ["DistribLattice"]]]}, {"oldPath": "src/order/category/FinPartialOrder.lean", "newPath": "src/order/category/FinPartialOrder.lean", "changes": [["add", "theorem", "coe_of", ["FinPartialOrder"]]]}, {"oldPath": "src/order/category/Frame.lean", "newPath": "src/order/category/Frame.lean", "changes": [["add", "theorem", "coe_of", ["Frame"]]]}, {"oldPath": "src/order/category/Lattice.lean", "newPath": "src/order/category/Lattice.lean", "changes": [["add", "theorem", "coe_of", ["Lattice"]]]}, {"oldPath": "src/order/category/LinearOrder.lean", "newPath": "src/order/category/LinearOrder.lean", "changes": [["add", "theorem", "coe_of", ["LinearOrder"]]]}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": [["add", "theorem", "coe_of", ["NonemptyFinLinOrd"]], ["add", "def", "dual", ["NonemptyFinLinOrd"]], ["del", "def", "to_dual", ["NonemptyFinLinOrd"]], ["add", "theorem", "NonemptyFinLinOrd_dual_comp_forget_to_LinearOrder", []], ["del", "theorem", "NonemptyFinLinOrd_dual_equiv_comp_forget_to_LinearOrder", []]]}, {"oldPath": "src/order/category/PartialOrder.lean", "newPath": "src/order/category/PartialOrder.lean", "changes": [["add", "theorem", "coe_of", ["PartialOrder"]], ["add", "def", "dual", ["PartialOrder"]], ["del", "def", "to_dual", ["PartialOrder"]], ["add", "theorem", "PartialOrder_dual_comp_forget_to_Preorder", []], ["del", "theorem", "PartialOrder_to_dual_comp_forget_to_Preorder", []]]}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": [["add", "theorem", "coe_of", ["Preorder"]], ["add", "def", "dual", ["Preorder"]], ["del", "def", "to_dual", ["Preorder"]]]}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": [["add", "theorem", "coe_of", ["ωCPO"]]]}]}, {"timestamp": 1647052132, "sha": "4e302f54", "message": "feat(data/nat): add card_multiples (#12592)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "card_multiples", []]]}]}, {"timestamp": 1647052131, "sha": "222faeda", "message": "feat(algebra/group/units_hom): make `is_unit.map` work on `monoid_hom_class` (#12577)\n`ring_hom.is_unit_map` and `mv_power_series.is_unit_constant_coeff` are now redundant, but to keep this diff small I've left them around.", "changes": [{"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["mod", "theorem", "map", ["is_unit"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/away.lean", "newPath": "src/ring_theory/localization/away.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/localization_localization.lean", "newPath": "src/ring_theory/localization/localization_localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1647052130, "sha": "8364980d", "message": "feat(category_theory): interderivability of kernel and equalizers in preadditive cats (#12576)", "changes": [{"oldPath": "src/category_theory/idempotents/basic.lean", "newPath": "src/category_theory/idempotents/basic.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "def", "cofork_of_cokernel_cofork", ["category_theory", "preadditive"]], ["add", "def", "cokernel_cofork_of_cofork", ["category_theory", "preadditive"]], ["add", "def", "fork_of_kernel_fork", ["category_theory", "preadditive"]], ["add", "theorem", "has_coequalizer_of_has_cokernel", ["category_theory", "preadditive"]], ["add", "theorem", "has_cokernel_of_has_coequalizer", ["category_theory", "preadditive"]], ["del", "theorem", "has_colimit_parallel_pair", ["category_theory", "preadditive"]], ["add", "theorem", "has_equalizer_of_has_kernel", ["category_theory", "preadditive"]], ["mod", "theorem", "has_kernel_of_has_equalizer", ["category_theory", "preadditive"]], ["del", "theorem", "has_limit_parallel_pair", ["category_theory", "preadditive"]], ["add", "def", "is_colimit_cofork_of_cokernel_cofork", ["category_theory", "preadditive"]], ["add", "def", "is_colimit_cokernel_cofork_of_cofork", ["category_theory", "preadditive"]], ["add", "def", "is_limit_fork_of_kernel_fork", ["category_theory", "preadditive"]], ["add", "def", "is_limit_kernel_fork_of_fork", ["category_theory", "preadditive"]], ["add", "def", "kernel_fork_of_fork", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1647042059, "sha": "c0a51cf2", "message": "chore(*): update to 3.41.0c (#12591)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "newPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "changes": [["add", "def", "add_monoid_algebra_add_equiv_direct_sum", []], ["add", "def", "add_monoid_algebra_alg_equiv_direct_sum", []], ["add", "def", "add_monoid_algebra_ring_equiv_direct_sum", []]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "def", "inner_dual_cone", ["set"]]]}, {"oldPath": "src/analysis/normed_space/continuous_affine_map.lean", "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": [["add", "def", "to_const_prod_continuous_linear_map", ["continuous_affine_map"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "def", "prod_assoc", ["linear_isometry_equiv"]]]}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "def", "conj_ae", ["is_R_or_C"]], ["add", "def", "im_lm", ["is_R_or_C"]], ["add", "def", "re_lm", ["is_R_or_C"]]]}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": [["add", "def", "finsupp_add_equiv_dfinsupp", []], ["add", "def", "finsupp_lequiv_dfinsupp", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "def", "of_nnreal_hom", ["ennreal"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "def", "Icc01", ["topological_space", "positive_compacts"]], ["add", "def", "pi_Icc01", ["topological_space", "positive_compacts"]]]}, {"oldPath": "src/model_theory/direct_limit.lean", "newPath": "src/model_theory/direct_limit.lean", "changes": [["add", "def", "lift", ["first_order", "language", "direct_limit"]], ["add", "def", "of", ["first_order", "language", "direct_limit"]]]}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": [["add", "def", "homogeneous_submodule", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/witt_vector/teichmuller.lean", "newPath": "src/ring_theory/witt_vector/teichmuller.lean", "changes": [["add", "def", "teichmuller", ["witt_vector"]]]}, {"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": [["add", "def", "iso_of_topological_space", ["Compactum_to_CompHaus"]]]}]}, {"timestamp": 1647035963, "sha": "e7db1936", "message": "feat(algebra/module): add `module.nontrivial` (#12594)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "subsingleton", ["module"]]]}]}, {"timestamp": 1647026312, "sha": "5856c0c4", "message": "feat(data/finset/noncomm_prod): add noncomm_prod_mul_distrib (#12524)\nThe non-commutative version of `finset.sum_union`.", "changes": [{"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": [["add", "theorem", "noncomm_prod_mul_distrib", ["finset"]], ["add", "theorem", "noncomm_prod_mul_distrib_aux", ["finset"]]]}]}, {"timestamp": 1647026311, "sha": "dc5f7fbf", "message": "feat(set_theory/ordinal_arithmetic): Further theorems on normal functions (#12484)\nWe prove various theorems giving more convenient characterizations of normal functions.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "bsup_eq_blsub_of_lt_succ_limit", ["ordinal"]], ["add", "theorem", "is_normal_iff_lt_succ_and_blsub_eq", ["ordinal"]], ["add", "theorem", "is_normal_iff_lt_succ_and_bsup_eq", ["ordinal"]], ["add", "theorem", "is_normal_iff_strict_mono_limit", ["ordinal"]]]}]}, {"timestamp": 1647026310, "sha": "e3ad468b", "message": "feat(data/list/prod_monoid): add prod_eq_pow_card (#12473)", "changes": [{"oldPath": "src/data/list/prod_monoid.lean", "newPath": "src/data/list/prod_monoid.lean", "changes": [["add", "theorem", "prod_eq_pow_card", ["list"]]]}]}, {"timestamp": 1647019870, "sha": "7dcba96e", "message": "feat(order/monotone): Folds of monotone functions are monotone (#12581)", "changes": [{"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "foldl_monotone", ["list"]], ["add", "theorem", "foldl_strict_mono", ["list"]], ["add", "theorem", "foldr_monotone", ["list"]], ["add", "theorem", "foldr_strict_mono", ["list"]]]}]}, {"timestamp": 1647019869, "sha": "3dcc1689", "message": "feat(linear_algebra/projective_space/basic): The projectivization of a vector space. (#12438)\nThis provides the initial definitions for the projective space associated to a vector space.\nFuture work:\n- Linear subspaces of projective spaces, connection with subspaces of the vector space, etc.\n- The incidence geometry structure of a projective space.\n- The fundamental theorem of projective geometry.\nI will tag this PR as RFC for now. If you see something missing from this *initial* PR, please let me know!", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/projective_space/basic.lean", "changes": [["add", "def", "equiv_submodule", ["projectivization"]], ["add", "theorem", "exists_smul_eq_mk_rep", ["projectivization"]], ["add", "theorem", "finrank_submodule", ["projectivization"]], ["add", "theorem", "ind", ["projectivization"]], ["add", "def", "map", ["projectivization"]], ["add", "theorem", "map_comp", ["projectivization"]], ["add", "theorem", "map_id", ["projectivization"]], ["add", "theorem", "map_injective", ["projectivization"]], ["add", "def", "mk''", ["projectivization"]], ["add", "theorem", "mk''_submodule", ["projectivization"]], ["add", "def", "mk'", ["projectivization"]], ["add", "theorem", "mk'_eq_mk", ["projectivization"]], ["add", "def", "mk", ["projectivization"]], ["add", "theorem", "mk_eq_mk_iff", ["projectivization"]], ["add", "theorem", "mk_rep", ["projectivization"]], ["add", "theorem", "rep_nonzero", ["projectivization"]], ["add", "theorem", "submodule_eq", ["projectivization"]], ["add", "theorem", "submodule_injective", ["projectivization"]], ["add", "theorem", "submodule_mk''", ["projectivization"]], ["add", "theorem", "submodule_mk", ["projectivization"]], ["add", "def", "projectivization", []], ["add", "def", "projectivization_setoid", []]]}]}, {"timestamp": 1647015921, "sha": "003701f0", "message": "feat(model_theory/substructures): Facts about substructures (#12258)\nShows that `closure L s` can be viewed as the set of realizations of terms over `s`.\nBounds the cardinality of `closure L s` by the cardinality of the type of terms.\nCharacterizes `closure L[[A]] s`.", "changes": [{"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": [["add", "theorem", "coe_substructure_reduct", ["first_order", "language", "Lhom"]], ["add", "theorem", "mem_substructure_reduct", ["first_order", "language", "Lhom"]], ["add", "def", "substructure_reduct", ["first_order", "language", "Lhom"]], ["add", "theorem", "closure_with_constants_eq", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_closure_eq_range_term_realize", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_with_constants", ["first_order", "language", "substructure"]], ["mod", "theorem", "constants_mem", ["first_order", "language", "substructure"]], ["add", "theorem", "lift_card_closure_le", ["first_order", "language", "substructure"]], ["add", "theorem", "lift_card_closure_le_card_term", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_closure_iff_exists_term", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_with_constants", ["first_order", "language", "substructure"]], ["add", "theorem", "reduct_with_constants", ["first_order", "language", "substructure"]], ["add", "theorem", "subset_closure_with_constants", ["first_order", "language", "substructure"]], ["add", "def", "with_constants", ["first_order", "language", "substructure"]], ["add", "theorem", "realize_mem", ["first_order", "language", "term"]]]}]}, {"timestamp": 1647015919, "sha": "d6f337df", "message": "feat(set_theory/ordinal_arithmetic): The derivative of multiplication (#12202)\nWe prove that for `0 < a`, `deriv ((*) a) b = a ^ ω * b`.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "deriv_eq_id_of_nfp_eq_id", ["ordinal"]], ["add", "theorem", "deriv_mul_eq_opow_omega_mul", ["ordinal"]], ["add", "theorem", "deriv_mul_zero", ["ordinal"]], ["add", "theorem", "eq_zero_or_opow_omega_le_of_mul_eq_right", ["ordinal"]], ["del", "theorem", "le_opow_self", ["ordinal"]], ["add", "theorem", "left_le_opow", ["ordinal"]], ["add", "theorem", "mul_eq_right_iff_opow_omega_dvd", ["ordinal"]], ["add", "theorem", "mul_le_right_iff_opow_omega_dvd", ["ordinal"]], ["add", "theorem", "nfp_mul_eq_opow_omega", ["ordinal"]], ["add", "theorem", "nfp_mul_one", ["ordinal"]], ["add", "theorem", "nfp_mul_opow_omega_add", ["ordinal"]], ["add", "theorem", "nfp_mul_zero", ["ordinal"]], ["add", "theorem", "nfp_zero_mul", ["ordinal"]], ["add", "theorem", "opow_one_add", ["ordinal"]], ["add", "theorem", "right_le_opow", ["ordinal"]]]}]}, {"timestamp": 1647006248, "sha": "e6fef397", "message": "feat(algebra/order/monoid): add `with_zero.canonically_linear_ordered_add_monoid` (#12568)\nThis also removes some non-terminal `simp`s in nearby proofs", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}]}, {"timestamp": 1647006247, "sha": "12786d04", "message": "feat(order/sup_indep): add `finset.sup_indep_pair` (#12549)\nThis is used to provide simp lemmas about `sup_indep` on `bool` and `fin 2`.", "changes": [{"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": [["add", "theorem", "independent_iff_sup_indep_univ", ["complete_lattice"]], ["add", "theorem", "sup_indep_pair", ["finset"]], ["add", "theorem", "sup_indep_univ_bool", ["finset"]], ["add", "theorem", "sup_indep_univ_fin_two", ["finset"]]]}]}, {"timestamp": 1647006246, "sha": "4dc4dc8b", "message": "chore(topology/algebra/module/basic): cleanup variables and coercions (#12542)\nHaving the \"simple\" variables in the lemmas statements rather than globally makes it easier to move lemmas around in future.\nThis also mean lemmas like `coe_comp` can have their arguments in a better order, as it's easier to customize the argument order at the declaration.\nThis also replaces a lot of `(_ : M₁ → M₂)`s with `⇑_` for brevity in lemma statements.\nNo lemmas statements (other than argument reorders) or proofs have changed.", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["mod", "theorem", "coe_coe", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_refl'", ["continuous_linear_equiv"]], ["mod", "theorem", "add_apply", ["continuous_linear_map"]], ["mod", "theorem", "apply_ker", ["continuous_linear_map"]], ["mod", "theorem", "coe_add'", ["continuous_linear_map"]], ["mod", "theorem", "coe_add", ["continuous_linear_map"]], ["mod", "theorem", "coe_coe", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp'", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp", ["continuous_linear_map"]], ["mod", "theorem", "coe_fst'", ["continuous_linear_map"]], ["mod", "theorem", "coe_fst", ["continuous_linear_map"]], ["mod", "theorem", "coe_id'", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg'", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg", ["continuous_linear_map"]], ["mod", "theorem", "coe_smul'", ["continuous_linear_map"]], ["mod", "theorem", "coe_smul", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd'", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub'", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub", ["continuous_linear_map"]], ["mod", "theorem", "coe_zero'", ["continuous_linear_map"]], ["mod", "theorem", "comp_id", ["continuous_linear_map"]], ["mod", "theorem", "comp_smul", ["continuous_linear_map"]], ["mod", "theorem", "comp_smulₛₗ", ["continuous_linear_map"]], ["mod", "theorem", "id_apply", ["continuous_linear_map"]], ["mod", "theorem", "id_comp", ["continuous_linear_map"]], ["mod", "theorem", "image_smul_set", ["continuous_linear_map"]], ["mod", "theorem", "image_smul_setₛₗ", ["continuous_linear_map"]], ["mod", "theorem", "is_closed_ker", ["continuous_linear_map"]], ["mod", "theorem", "ker_coe", ["continuous_linear_map"]], ["mod", "theorem", "map_smulₛₗ", ["continuous_linear_map"]], ["mod", "theorem", "neg_apply", ["continuous_linear_map"]], ["mod", "theorem", "one_apply", ["continuous_linear_map"]], ["mod", "theorem", "preimage_smul_set", ["continuous_linear_map"]], ["mod", "theorem", "preimage_smul_setₛₗ", ["continuous_linear_map"]], ["mod", "theorem", "range_coe", ["continuous_linear_map"]], ["mod", "theorem", "range_prod_eq", ["continuous_linear_map"]], ["mod", "theorem", "smul_apply", ["continuous_linear_map"]], ["mod", "theorem", "smul_comp", ["continuous_linear_map"]], ["mod", "theorem", "sub_apply'", ["continuous_linear_map"]], ["mod", "theorem", "sub_apply", ["continuous_linear_map"]], ["mod", "theorem", "zero_apply", ["continuous_linear_map"]], ["mod", "theorem", "zero_comp", ["continuous_linear_map"]]]}]}, {"timestamp": 1646993597, "sha": "02e0ab2c", "message": "refactor(group_theory/commutator): Golf some proofs (#12586)\nThis PR golfs the proofs of some lemmas in `commutator.lean`.\nI also renamed `bot_commutator` and `commutator_bot` to `commutator_bot_left` and `commutator_bot_right`, since \"bot_commutator\" didn't sound right to me (you would say \"the commutator of H and K\", not \"H commutator K\"), but I can revert to the old name if you want.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["del", "theorem", "bot_commutator", ["subgroup"]], ["del", "theorem", "commutator_bot", ["subgroup"]], ["add", "theorem", "commutator_bot_left", ["subgroup"]], ["add", "theorem", "commutator_bot_right", ["subgroup"]], ["mod", "theorem", "commutator_le_inf", ["subgroup"]], ["mod", "theorem", "commutator_le_left", ["subgroup"]], ["mod", "theorem", "commutator_le_right", ["subgroup"]]]}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1646993596, "sha": "d9a774e2", "message": "feat(order/hom): `prod.swap` as an `order_iso` (#12585)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "swap_le_swap", ["prod"]], ["add", "theorem", "swap_lt_swap", ["prod"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "coe_prod_comm", ["order_iso"]], ["add", "def", "prod_comm", ["order_iso"]], ["add", "theorem", "prod_comm_symm", ["order_iso"]]]}]}, {"timestamp": 1646986946, "sha": "840a0425", "message": "feat(data/list/basic): Miscellaneous `fold` lemmas (#12579)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "foldl_combinator_K", ["list"]], ["add", "theorem", "foldl_fixed", ["list"]], ["add", "theorem", "foldr_fixed", ["list"]]]}, {"oldPath": "src/logic/function/iterate.lean", "newPath": "src/logic/function/iterate.lean", "changes": [["add", "theorem", "foldl_const", ["list"]], ["add", "theorem", "foldr_const", ["list"]]]}]}, {"timestamp": 1646986945, "sha": "1a581ede", "message": "refactor(group_theory/solvable): Golf proof (#12552)\nThis PR golfs the proof of insolvability of S_5, using the new commutator notation.", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1646986944, "sha": "1326aa7c", "message": "feat(analysis/special_functions): limit of x^s * exp(-x) for s real (#12540)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "tendsto_exp_div_rpow_at_top", []], ["add", "theorem", "tendsto_exp_mul_div_rpow_at_top", []], ["add", "theorem", "tendsto_rpow_mul_exp_neg_mul_at_top_nhds_0", []]]}]}, {"timestamp": 1646986943, "sha": "e553f8ad", "message": "refactor(algebra/group/to_additive): monadic code cosmetics (#12527)\nas suggested by @kmill and @eric-wieser, but the merge was faster\nAlso improve test file.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "test/lint_to_additive_doc.lean", "newPath": "test/lint_to_additive_doc.lean", "changes": [["add", "theorem", "no_to_additive", []]]}]}, {"timestamp": 1646986942, "sha": "47b1ddf2", "message": "feat(data/setoid/partition): Relate `setoid.is_partition` and `finpartition` (#12459)\nAdd two functions that relate `setoid.is_partition` and `finpartition`:\n* `setoid.is_partition.partition` \n* `finpartition.is_partition_parts`\nMeanwhile add some lemmas related to `finset.sup` and `finset.inf` in data/finset/lattice.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_id_set_eq_sInter", ["finset"]], ["add", "theorem", "inf_set_eq_bInter", ["finset"]], ["add", "theorem", "sup_id_set_eq_sUnion", ["finset"]], ["add", "theorem", "sup_set_eq_bUnion", ["finset"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["add", "theorem", "is_partition_parts", ["finpartition"]], ["add", "def", "finpartition", ["setoid", "is_partition"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}]}, {"timestamp": 1646981056, "sha": "115f8c7a", "message": "fix(probability): remove unused argument from `cond_cond_eq_cond_inter` (#12583)\nThis was a property that we already derived within the proof itself from conditionable intersection (I think I forgot to remove this when I made the PR).", "changes": [{"oldPath": "src/probability/conditional.lean", "newPath": "src/probability/conditional.lean", "changes": []}]}, {"timestamp": 1646981055, "sha": "3061d18f", "message": "feat(data/nat/{nth,prime}): add facts about primes (#12560)\nGives `{p | prime p}.infinite` as well as `infinite_of_not_bdd_above` lemma. Also gives simp lemmas for `prime_counting'`.", "changes": [{"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": [["add", "theorem", "nth_injective_of_infinite", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "infinite_set_of_prime", ["nat"]], ["add", "theorem", "not_bdd_above_set_of_prime", ["nat"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "infinite_of_not_bdd_above", ["set"]], ["add", "theorem", "infinite_of_not_bdd_below", ["set"]]]}, {"oldPath": "src/number_theory/prime_counting.lean", "newPath": "src/number_theory/prime_counting.lean", "changes": [["add", "theorem", "prime_counting'_nth_eq", ["nat"]], ["add", "theorem", "prime_nth_prime", ["nat"]]]}]}, {"timestamp": 1646981054, "sha": "de4d14cb", "message": "feat(group_theory/commutator): Add some basic lemmas (#12554)\nThis PR adds lemmas adds some basic lemmas about when the commutator is trivial.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_element_eq_one_iff_commute", []], ["add", "theorem", "commutator_element_eq_one_iff_mul_comm", []], ["add", "theorem", "commutator_element_one_left", []], ["add", "theorem", "commutator_element_one_right", []], ["add", "theorem", "commutator_eq", ["commute"]]]}]}, {"timestamp": 1646979131, "sha": "355472dc", "message": "refactor(group_theory/commutator): Golf proof of `commutator_mem_commutator` (#12584)\nThis PR golfs the proof of `commutator_mem_commutator`, and moves it earlier in the file so that it can be used earlier.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["mod", "theorem", "commutator_mem_commutator", ["subgroup"]]]}]}, {"timestamp": 1646966337, "sha": "b5a26d0a", "message": "feat(data/list/basic): Lists over empty type are `unique` (#12582)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "def", "unique_of_is_empty", ["list"]]]}]}, {"timestamp": 1646955876, "sha": "f0dd6e9b", "message": "refactor(group_theory/commutator): Use commutators in `commutator_le` (#12572)\nThis PR golfs the proof of `commutator_le`, and uses the new commutator notation.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": []}]}, {"timestamp": 1646953944, "sha": "6c04fcf4", "message": "refactor(group_theory/commutator): Use commutator notation in `commutator_normal` (#12575)\nThis PR uses the new commutator notation in the proof of `commutator_normal`.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": []}]}, {"timestamp": 1646947079, "sha": "84cbbc98", "message": "feat(algebra/group/to_additive + a few more files): make `to_additive` convert `unit` to `add_unit` (#12564)\nThis likely involves removing names that match autogenerated names.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "is_unit_iff_exists_inv'", []], ["mod", "theorem", "is_unit_iff_exists_inv", []], ["mod", "theorem", "is_unit_of_mul_eq_one", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["mod", "theorem", "coe_to_units", []]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["mod", "def", "lift_on_units", ["con"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1646940786, "sha": "869ef84f", "message": "feat(data/zmod/basic): some lemmas about coercions (#12571)\nThe names here are in line with `zmod.nat_coe_zmod_eq_zero_iff_dvd` and `zmod.int_coe_zmod_eq_zero_iff_dvd` a few lines above.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "int_coe_zmod_eq_iff", ["zmod"]], ["add", "theorem", "nat_coe_zmod_eq_iff", ["zmod"]], ["add", "theorem", "val_int_cast", ["zmod"]]]}]}, {"timestamp": 1646940785, "sha": "6fdb1d5d", "message": "chore(*): clear up some excessive by statements (#12570)\nDelete some `by` (and similar commands that do nothing, such as\n- `by by blah`\n- `by begin blah end`\n- `{ by blah }`\n- `begin { blah } end`\nAlso clean up the proof of `monic.map` and `nat_degree_div_by_monic` a bit.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/whiskering.lean", "newPath": "src/category_theory/adjunction/whiskering.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": [["mod", "theorem", "exponent_eq_zero_iff", ["monoid"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1646940784, "sha": "45c22c0d", "message": "feat(field_theory/is_alg_closed/basic): add `is_alg_closed.infinite` (#12566)\nAn algebraically closed field is infinite, because if it is finite then `x^(n+1) - 1` is a separable polynomial (where `n` is the cardinality of the field).", "changes": [{"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}]}, {"timestamp": 1646940782, "sha": "0e93816c", "message": "feat(tactic/norm_num_command): add user command to run norm_num on an expression (#12550)\nFor example,\n```\n#norm_num 2^100 % 10\n-- 6\n```", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1646934370, "sha": "f654a86a", "message": "chore(*): remove lines claiming to introduce variables (#12569)\nThey don't.", "changes": [{"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/data/equiv/option.lean", "newPath": "src/data/equiv/option.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/order/antisymmetrization.lean", "newPath": "src/order/antisymmetrization.lean", "changes": []}]}, {"timestamp": 1646927900, "sha": "4a59a4d4", "message": "chore(order/galois_connection): Make lifting instances reducible (#12559)\nand provide `infi₂` and `supr₂` versions of the lemmas.", "changes": [{"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["mod", "theorem", "l_Sup", ["galois_connection"]], ["mod", "theorem", "l_supr", ["galois_connection"]], ["add", "theorem", "l_supr₂", ["galois_connection"]], ["mod", "theorem", "u_Inf", ["galois_connection"]], ["mod", "theorem", "u_infi", ["galois_connection"]], ["add", "theorem", "u_infi₂", ["galois_connection"]]]}]}, {"timestamp": 1646926089, "sha": "788ccf07", "message": "chore(cardinal_divisibility): tiny golf (#12567)", "changes": [{"oldPath": "src/set_theory/cardinal_divisibility.lean", "newPath": "src/set_theory/cardinal_divisibility.lean", "changes": []}]}, {"timestamp": 1646918165, "sha": "cd111e94", "message": "feat(data/equiv/mul_add): add to_additive attribute to `group.is_unit` (#12563)\nUnless something breaks, this PR does nothing else!", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}]}, {"timestamp": 1646908735, "sha": "41f5c176", "message": "chore(set_theory/ordinal_arithmetic): Make auxiliary result private (#12562)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "CNF_pairwise_aux", ["ordinal"]]]}]}, {"timestamp": 1646906911, "sha": "4048a9be", "message": "chore(measure_theory/function/convergence_in_measure): golf proof with Borel-Cantelli (#12551)", "changes": [{"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": []}]}, {"timestamp": 1646902978, "sha": "d56a9bc2", "message": "feat(set_theory/ordinal_arithmetic): `add_eq_zero_iff`, `mul_eq_zero_iff` (#12561)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "add_eq_zero_iff", ["ordinal"]], ["add", "theorem", "left_eq_zero_of_add_eq_zero", ["ordinal"]], ["add", "theorem", "mul_eq_zero_iff", ["ordinal"]], ["add", "theorem", "right_eq_zero_of_add_eq_zero", ["ordinal"]]]}]}, {"timestamp": 1646902976, "sha": "1e560a67", "message": "refactor(group_theory/commutator): Generalize `map_commutator_element` (#12555)\nThis PR generalizes `map_commutator_element` from `monoid_hom_class F G G` to `monoid_hom_class F G G'`.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["mod", "theorem", "map_commutator_element", []]]}]}, {"timestamp": 1646897831, "sha": "24e3b5f5", "message": "refactor(topology/opens): Turn `opens.gi` into a Galois coinsertion (#12547)\n`topological_space.opens.gi` is currently a `galois_insertion` between `order_dual (opens α)` and `order_dual (set α)`. This turns it into the sensible thing, namely a `galois_coinsertion` between `opens α` and `set α`.", "changes": [{"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "theorem", "ext", ["topological_space", "opens"]], ["mod", "theorem", "ext_iff", ["topological_space", "opens"]], ["mod", "def", "gi", ["topological_space", "opens"]], ["del", "theorem", "gi_choice_val", ["topological_space", "opens"]], ["mod", "theorem", "le_def", ["topological_space", "opens"]]]}]}, {"timestamp": 1646897830, "sha": "0fd99294", "message": "feat(group_theory/double_cosets): definition of double cosets and some basic lemmas. (#9490)\nThis contains the definition of double cosets and some basic lemmas about them, such as \"the whole group is the disjoint union of its double cosets\" and relationship to usual group quotients.", "changes": [{"oldPath": null, "newPath": "src/group_theory/double_coset.lean", "changes": [["add", "theorem", "bot_rel_eq_left_rel", ["doset"]], ["add", "theorem", "disjoint_out'", ["doset"]], ["add", "theorem", "doset_eq_of_mem", ["doset"]], ["add", "theorem", "doset_union_left_coset", ["doset"]], ["add", "theorem", "doset_union_right_coset", ["doset"]], ["add", "theorem", "eq", ["doset"]], ["add", "theorem", "eq_of_not_disjoint", ["doset"]], ["add", "theorem", "left_bot_eq_left_quot", ["doset"]], ["add", "theorem", "mem_doset", ["doset"]], ["add", "theorem", "mem_doset_of_not_disjoint", ["doset"]], ["add", "theorem", "mem_doset_self", ["doset"]], ["add", "def", "mk", ["doset"]], ["add", "theorem", "mk_eq_of_doset_eq", ["doset"]], ["add", "theorem", "mk_out'_eq_mul", ["doset"]], ["add", "theorem", "out_eq'", ["doset"]], ["add", "def", "quot_to_doset", ["doset"]], ["add", "def", "quotient", ["doset"]], ["add", "theorem", "rel_bot_eq_right_group_rel", ["doset"]], ["add", "theorem", "rel_iff", ["doset"]], ["add", "theorem", "right_bot_eq_right_quot", ["doset"]], ["add", "def", "setoid", ["doset"]], ["add", "theorem", "union_quot_to_doset", ["doset"]], ["add", "def", "doset", []]]}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "theorem", "singleton_mul_subgroup", ["subgroup"]], ["add", "theorem", "subgroup_mul_singleton", ["subgroup"]]]}]}, {"timestamp": 1646894087, "sha": "750ca956", "message": "chore(linear_algebra/affine_space/affine_map): golf using the injective APIs (#12543)\nThe extra whitespace means this isn't actually any shorter by number of lines, but it does eliminate 12 trivial proofs.\nAgain, the `has_scalar` instance has been hoisted from lower down the file, so that we have the `nat` and `int` actions available when we create the `add_comm_group` structure. Previously we just built the same `has_scalar` structure three times.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["mod", "theorem", "coe_smul", ["affine_map"]]]}]}, {"timestamp": 1646894086, "sha": "8836a42d", "message": "fix(linear_algebra/quadratic_form/basic): align diamonds in the nat- and int- action (#12541)\nThis also provides `fun_like` and `zero_hom_class` instances.\nThe `has_scalar` code has been moved unchanged from further down in the file.\nThis change makes `coe_fn_sub` eligible for `dsimp`, since it can now be proved by `rfl`.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["mod", "theorem", "coe_fn_sub", ["quadratic_form"]], ["mod", "theorem", "congr_fun", ["quadratic_form"]], ["mod", "theorem", "ext", ["quadratic_form"]], ["mod", "theorem", "ext_iff", ["quadratic_form"]], ["mod", "theorem", "sub_apply", ["quadratic_form"]], ["del", "theorem", "to_fun_eq_apply", ["quadratic_form"]], ["add", "theorem", "to_fun_eq_coe", ["quadratic_form"]]]}]}, {"timestamp": 1646894084, "sha": "9e288527", "message": "feat(field_theory/krull_topology): added krull_topology_totally_disconnected (#12398)", "changes": [{"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": [["add", "theorem", "fixing_subgroup_is_closed", ["intermediate_field"]], ["mod", "theorem", "krull_topology_t2", []], ["add", "theorem", "krull_topology_totally_disconnected", []], ["del", "theorem", "is_open_of_one_mem_interior", ["subgroup"]]]}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["mod", "theorem", "is_open_mono", ["subgroup"]], ["add", "theorem", "is_open_of_one_mem_interior", ["subgroup"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "is_totally_disconnected_of_clopen_set", []]]}]}, {"timestamp": 1646890177, "sha": "bab039fb", "message": "feat(topology/opens): The frame of opens of a topological space (#12546)\nProvide the `frame` instance for `opens α` and strengthen `opens.comap` from `order_hom` to `frame_hom`.", "changes": [{"oldPath": "src/topology/algebra/order/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["del", "theorem", "Sup_s", ["topological_space", "opens"]], ["add", "theorem", "coe_Sup", ["topological_space", "opens"]], ["mod", "theorem", "coe_inf", ["topological_space", "opens"]], ["mod", "def", "comap", ["topological_space", "opens"]], ["mod", "theorem", "comap_id", ["topological_space", "opens"]], ["mod", "theorem", "comap_mono", ["topological_space", "opens"]]]}]}, {"timestamp": 1646890176, "sha": "9c2f6ebe", "message": "feat(category_theory/abelian/exact): `exact g.op f.op` (#12456)\nThis pr is about `exact g.op f.op` from `exact f g` in an abelian category; this pr is taken from liquid tensor experiment. I believe the original author is @adamtopaz.", "changes": [{"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "op_iff", ["category_theory", "abelian", "exact"]], ["add", "theorem", "unop_iff", ["category_theory", "abelian", "exact"]], ["add", "theorem", "exact_iff", ["category_theory", "abelian", "is_equivalence"]]]}, {"oldPath": "src/category_theory/abelian/opposite.lean", "newPath": "src/category_theory/abelian/opposite.lean", "changes": [["add", "theorem", "π_op", ["category_theory", "cokernel"]], ["add", "theorem", "π_unop", ["category_theory", "cokernel"]], ["add", "theorem", "ι_op", ["category_theory", "kernel"]], ["add", "theorem", "ι_unop", ["category_theory", "kernel"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "theorem", "comp_left_eq_zero", ["category_theory", "preadditive", "is_iso"]], ["add", "theorem", "comp_right_eq_zero", ["category_theory", "preadditive", "is_iso"]]]}]}, {"timestamp": 1646888181, "sha": "ef25c4ca", "message": "refactor(group_theory/commutator): Rename `commutator_containment` to `commutator_mem_commutator` (#12553)\nThis PR renames `commutator_containment` to `commutator_mem_commutator`, uses the new commutator notation, and makes the subgroups implicit.", "changes": [{"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["del", "theorem", "commutator_containment", ["subgroup"]], ["add", "theorem", "commutator_mem_commutator", ["subgroup"]]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1646834397, "sha": "9facd190", "message": "doc(combinatorics/simple_graph/basic): fix typo (#12544)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1646825298, "sha": "0d6fb8a7", "message": "chore(analysis/complex/upper_half_plane): use `coe` instead of `coe_fn` (#12532)\nThis matches the approach used by other files working with `special_linear_group`.", "changes": [{"oldPath": "src/analysis/complex/upper_half_plane.lean", "newPath": "src/analysis/complex/upper_half_plane.lean", "changes": [["mod", "def", "denom", ["upper_half_plane"]], ["mod", "def", "num", ["upper_half_plane"]]]}]}, {"timestamp": 1646825297, "sha": "c4a34136", "message": "chore(data/polynomial): use dot notation for monic lemmas (#12530)\nAs discussed in #12447\n- Use the notation throughout the library\n- Also deleted `ne_zero_of_monic` as it was a duplicate of `monic.ne_zero` it seems.\n- Cleaned up a small proof here and there too.", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": [["mod", "theorem", "lifts_and_degree_eq_and_monic", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["del", "theorem", "degree_map_of_monic", ["polynomial"]], ["add", "theorem", "add_of_left", ["polynomial", "monic"]], ["add", "theorem", "add_of_right", ["polynomial", "monic"]], ["add", "theorem", "degree_map", ["polynomial", "monic"]], ["add", "theorem", "map", ["polynomial", "monic"]], ["add", "theorem", "mul", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_map", ["polynomial", "monic"]], ["add", "theorem", "pow", ["polynomial", "monic"]], ["mod", "theorem", "monic_C_mul_of_mul_leading_coeff_eq_one", ["polynomial"]], ["del", "theorem", "monic_add_of_left", ["polynomial"]], ["del", "theorem", "monic_add_of_right", ["polynomial"]], ["del", "theorem", "monic_map", ["polynomial"]], ["del", "theorem", "monic_mul", ["polynomial"]], ["mod", "theorem", "monic_mul_C_of_leading_coeff_mul_eq_one", ["polynomial"]], ["del", "theorem", "monic_pow", ["polynomial"]], ["del", "theorem", "nat_degree_map_of_monic", ["polynomial"]], ["del", "theorem", "ne_zero_of_monic", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1646816727, "sha": "55d1f3e8", "message": "chore(set_theory/cardinal): `min` → `Inf` (#12517)\nVarious definitions are awkwardly stated in terms of minima of subtypes. We instead rewrite them as infima and golf them. Further, we protect `cardinal.min` to avoid confusion with `linear_order.min`.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "le_min", ["cardinal"]], ["mod", "theorem", "le_sup", ["cardinal"]], ["mod", "theorem", "lift_min", ["cardinal"]], ["del", "def", "min", ["cardinal"]], ["mod", "theorem", "min_eq", ["cardinal"]], ["mod", "theorem", "min_le", ["cardinal"]], ["add", "theorem", "nonempty_sup", ["cardinal"]], ["add", "theorem", "succ_nonempty", ["cardinal"]], ["mod", "def", "sup", ["cardinal"]]]}]}, {"timestamp": 1646804805, "sha": "5d405e2a", "message": "chore(linear_algebra/alternating): golf using injective APIs (#12536)\nTo do this, we have to move the has_scalar instance higher up in the file.", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}]}, {"timestamp": 1646804804, "sha": "bc9dda83", "message": "chore(algebra/module/linear_map): golf using injective APIs (#12535)\nTo do this, we have to move the `has_scalar` instance higher up in the file.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}]}, {"timestamp": 1646804803, "sha": "94e9bb55", "message": "chore(data/{finsupp,dfinsupp}/basic): use the injective APIs (#12534)\nThis also fixes a scalar diamond in the `nat` and `int` actions on `dfinsupp`.\nThe diamond did not exist for `finsupp`.", "changes": [{"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["add", "theorem", "coe_nsmul", ["dfinsupp"]], ["add", "theorem", "coe_zsmul", ["dfinsupp"]], ["add", "theorem", "nsmul_apply", ["dfinsupp"]], ["add", "theorem", "zsmul_apply", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}]}, {"timestamp": 1646804801, "sha": "b8d176e0", "message": "chore(real/cau_seq_completion): put class in Prop (#12533)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}]}, {"timestamp": 1646798658, "sha": "1f6a2e9d", "message": "chore(scripts): update nolints.txt (#12538)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1646787046, "sha": "2a3ecad0", "message": "feat(data/equiv/basic): lemmas about composition with equivalences (#10693)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "comp_symm_eq", ["equiv"]], ["add", "theorem", "eq_comp_symm", ["equiv"]], ["add", "theorem", "eq_symm_comp", ["equiv"]], ["add", "theorem", "symm_comp_eq", ["equiv"]]]}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["add", "theorem", "comp_symm_eq", ["linear_equiv"]], ["add", "theorem", "comp_to_linear_map_symm_eq", ["linear_equiv"]], ["add", "theorem", "eq_comp_symm", ["linear_equiv"]], ["add", "theorem", "eq_comp_to_linear_map_symm", ["linear_equiv"]], ["add", "theorem", "eq_symm_comp", ["linear_equiv"]], ["add", "theorem", "eq_to_linear_map_symm_comp", ["linear_equiv"]], ["add", "theorem", "symm_comp_eq", ["linear_equiv"]], ["add", "theorem", "to_linear_map_symm_comp_eq", ["linear_equiv"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "comp_symm_eq", ["mul_equiv"]], ["add", "theorem", "eq_comp_symm", ["mul_equiv"]], ["add", "theorem", "eq_symm_comp", ["mul_equiv"]], ["add", "theorem", "symm_comp_eq", ["mul_equiv"]]]}]}, {"timestamp": 1646775772, "sha": "d69cda1e", "message": "chore(order/well_founded_set): golf two proofs (#12529)", "changes": [{"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}]}, {"timestamp": 1646775771, "sha": "709a3b70", "message": "feat(set_theory/cardinal_ordinal): `#(list α) ≤ max ω (#α)` (#12519)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "mk_list_eq_omega", ["cardinal"]], ["add", "theorem", "mk_list_le_max", ["cardinal"]]]}]}, {"timestamp": 1646762030, "sha": "feb24fb6", "message": "feat(topology/vector_bundle): direct sum of topological vector bundles (#12512)", "changes": [{"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "theorem", "continuous_proj", ["topological_vector_bundle"]], ["add", "theorem", "inducing_diag", ["topological_vector_bundle", "prod"]], ["add", "theorem", "apply_eq_prod_continuous_linear_equiv_at", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "base_set_prod", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "continuous_linear_equiv_at_prod", ["topological_vector_bundle", "trivialization"]], ["add", "def", "inv_fun'", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "theorem", "inv_fun'_apply", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "def", "to_fun'", ["topological_vector_bundle", "trivialization", "prod"]], ["add", "def", "prod", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "prod_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "prod_symm_apply", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "symm_apply_eq_mk_continuous_linear_equiv_at_symm", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1646762029, "sha": "1d67b07c", "message": "feat(category_theory): cases in which (co)equalizers are split monos (epis) (#12498)", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "π_desc_of_π", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "theorem", "lift_of_ι_ι", ["category_theory", "limits", "fork", "is_limit"]], ["add", "def", "split_epi_of_coequalizer", ["category_theory", "limits"]], ["add", "def", "split_epi_of_idempotent_coequalizer", ["category_theory", "limits"]], ["add", "def", "split_epi_of_idempotent_of_is_colimit_cofork", ["category_theory", "limits"]], ["add", "def", "split_mono_of_equalizer", ["category_theory", "limits"]], ["add", "def", "split_mono_of_idempotent_equalizer", ["category_theory", "limits"]], ["add", "def", "split_mono_of_idempotent_of_is_limit_fork", ["category_theory", "limits"]]]}]}, {"timestamp": 1646762027, "sha": "b4572d16", "message": "feat(algebra/order/hom/ring): Ordered ring isomorphisms (#12158)\nDefine `order_ring_iso`, the type of ordered ring isomorphisms, along with its typeclass `order_ring_iso_class`.", "changes": [{"oldPath": "src/algebra/order/hom/ring.lean", "newPath": "src/algebra/order/hom/ring.lean", "changes": [["mod", "structure", "order_ring_hom", []], ["add", "theorem", "coe_mk", ["order_ring_iso"]], ["add", "theorem", "coe_order_iso_refl", ["order_ring_iso"]], ["add", "theorem", "coe_ring_equiv_refl", ["order_ring_iso"]], ["add", "theorem", "coe_to_order_iso", ["order_ring_iso"]], ["add", "theorem", "coe_to_order_ring_hom", ["order_ring_iso"]], ["add", "theorem", "coe_to_order_ring_hom_refl", ["order_ring_iso"]], ["add", "theorem", "coe_to_ring_equiv", ["order_ring_iso"]], ["add", "theorem", "ext", ["order_ring_iso"]], ["add", "theorem", "mk_coe", ["order_ring_iso"]], ["add", "theorem", "refl_apply", ["order_ring_iso"]], ["add", "theorem", "self_trans_symm", ["order_ring_iso"]], ["add", "def", "symm_apply", ["order_ring_iso", "simps"]], ["add", "theorem", "symm_symm", ["order_ring_iso"]], ["add", "theorem", "symm_trans_self", ["order_ring_iso"]], ["add", "theorem", "to_fun_eq_coe", ["order_ring_iso"]], ["add", "def", "to_order_iso", ["order_ring_iso"]], ["add", "theorem", "to_order_iso_eq_coe", ["order_ring_iso"]], ["add", "def", "to_order_ring_hom", ["order_ring_iso"]], ["add", "theorem", "to_order_ring_hom_eq_coe", ["order_ring_iso"]], ["add", "theorem", "to_ring_equiv_eq_coe", ["order_ring_iso"]], ["add", "theorem", "trans_apply", ["order_ring_iso"]], ["add", "structure", "order_ring_iso", []]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "le_map_inv_iff", []], ["add", "theorem", "lt_map_inv_iff", []], ["add", "theorem", "map_inv_le_iff", []], ["add", "theorem", "map_inv_lt_iff", []], ["add", "theorem", "map_lt_map_iff", []]]}]}, {"timestamp": 1646755098, "sha": "4ad5c5a3", "message": "feat(data/finset/noncomm_prod): add noncomm_prod_commute (#12521)\nadding `list.prod_commute`, `multiset.noncomm_prod_commute` and\n`finset.noncomm_prod_commute`.", "changes": [{"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": [["add", "theorem", "noncomm_prod_commute", ["finset"]], ["add", "theorem", "noncomm_prod_commute", ["multiset"]]]}, {"oldPath": "src/data/list/prod_monoid.lean", "newPath": "src/data/list/prod_monoid.lean", "changes": [["add", "theorem", "prod_commute", ["list"]]]}]}, {"timestamp": 1646755096, "sha": "fac5ffed", "message": "feat(group_theory/subgroup/basic): disjoint_iff_mul_eq_one (#12505)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "disjoint_def'", ["subgroup"]], ["add", "theorem", "disjoint_def", ["subgroup"]], ["add", "theorem", "disjoint_iff_mul_eq_one", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "disjoint_def'", ["submonoid"]], ["add", "theorem", "disjoint_def", ["submonoid"]]]}]}, {"timestamp": 1646755095, "sha": "1597e9a2", "message": "feat(set_theory/ordinal_arithmetic): prove `enum_ord_le_of_subset` (#12199)\nI also used this as an excuse to remove a trivial theorem and some awkward dot notation.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "def", "order_iso", ["ordinal", "enum_ord"]], ["del", "theorem", "surjective", ["ordinal", "enum_ord"]], ["add", "theorem", "enum_ord_le_of_subset", ["ordinal"]], ["add", "def", "enum_ord_order_iso", ["ordinal"]], ["add", "theorem", "enum_ord_surjective", ["ordinal"]], ["del", "theorem", "enum_ord_zero_le", ["ordinal"]]]}]}, {"timestamp": 1646749778, "sha": "ab6a892b", "message": "feat(data/finset/noncomm_prod): add noncomm_prod_congr (#12520)", "changes": [{"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": [["add", "theorem", "noncomm_prod_congr", ["finset"]]]}]}, {"timestamp": 1646749776, "sha": "c0ba4d69", "message": "feat(ring_theory/polynomial/eisenstein): add cyclotomic_comp_X_add_one_is_eisenstein_at (#12447)\nWe add `cyclotomic_comp_X_add_one_is_eisenstein_at`: `(cyclotomic p ℤ).comp (X + 1)` is Eisenstein at `p`.\nFrom flt-regular", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "mul_X_injective", ["polynomial"]], ["add", "theorem", "mul_X_pow_injective", ["polynomial"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "add_algebra_map", ["minpoly"]], ["del", "theorem", "minpoly_add_algebra_map", ["minpoly"]], ["del", "theorem", "minpoly_sub_algebra_map", ["minpoly"]], ["add", "theorem", "sub_algebra_map", ["minpoly"]]]}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["add", "theorem", "minpoly_sub_one_eq_cyclotomic_comp", ["is_primitive_root"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "geom_sum_X_comp_X_add_one_eq_sum", ["polynomial"]], ["add", "theorem", "geom_sum'", ["polynomial", "monic"]], ["add", "theorem", "geom_sum", ["polynomial", "monic"]], ["add", "theorem", "monic_geom_sum_X", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["add", "theorem", "cyclotomic_comp_X_add_one_is_eisenstein_at", []]]}]}, {"timestamp": 1646743440, "sha": "94cbfad7", "message": "chore(algebra/*): move some lemmas about is_unit from associated.lean (#12526)\nThere doesn't seem to be any reason for them to live there.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "dvd_and_not_dvd_iff", []], ["del", "theorem", "is_unit_iff_dvd_one", []], ["del", "theorem", "is_unit_iff_forall_dvd", []], ["del", "theorem", "is_unit_of_dvd_one", []], ["del", "theorem", "is_unit_of_dvd_unit", []], ["del", "theorem", "not_is_unit_of_not_is_unit_dvd", []], ["del", "theorem", "pow_dvd_pow_iff", []]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "dvd_and_not_dvd_iff", []], ["add", "theorem", "is_unit_iff_dvd_one", []], ["add", "theorem", "is_unit_iff_forall_dvd", []], ["add", "theorem", "is_unit_of_dvd_one", []], ["add", "theorem", "is_unit_of_dvd_unit", []], ["add", "theorem", "not_is_unit_of_not_is_unit_dvd", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_dvd_pow_iff", []]]}]}, {"timestamp": 1646743439, "sha": "9c13d629", "message": "feat(data/int/gcd): add gcd_pos_iff (#12522)", "changes": [{"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "gcd_pos_iff", ["int"]]]}]}, {"timestamp": 1646743438, "sha": "6dd32492", "message": "feat(set_theory/ordinal_arithmetic): `brange_const` (#12483)\nThis is the `brange` analog to `set.range_const`.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "brange_const", ["ordinal"]]]}]}, {"timestamp": 1646736860, "sha": "07980376", "message": "refactor(algebra/group/inj_surj): add npow and zpow to all definitions (#12126)\nCurrently, we have a small handful of helpers to construct algebraic structures via pushforwards and pullbacks that preserve `has_pow` and `has_scalar` instances (added in #10152 and #10832):\n* `function.{inj,surj}ective.add_monoid_smul`\n* `function.{inj,surj}ective.monoid_pow`\n* `function.{inj,surj}ective.sub_neg_monoid_smul`\n* `function.{inj,surj}ective.div_inv_monoid_smul`\n* `function.{inj,surj}ective.add_group_smul`\n* `function.{inj,surj}ective.group_pow`\nPredating these, we have a very large collection of helpers that construct new `has_pow` and `has_scalar` instances, for all the above and also for every other one-argument algebraic structure (`comm_monoid`, `ring`, `linear_ordered_field`, ...).\nThis puts the user in an awkward position; either:\n1. They are unaware of the complexity here, and use `add_monoid_smul` and `add_comm_monoid` within the same file, which create two nonequal scalar instances.\n2. They use only the large collection, and don't get definitional control of `has_scalar` and `has_pow`, which can cause typeclass diamonds with generic `has_scalar` instances.\n3. They use only the small handful of helpers (which requires remembering which ones are safe to use), and have to remember to manually construct `add_comm_monoid` as `{..add_comm_semigroup, ..add_monoid}`. If they screw up and construct it as `{..add_comm_semigroup, ..add_zero_class}`, then they're in the same position as (1) without knowing it.\nThis change converts every helper in the large collection to _also_ preserve scalar and power instances; as a result, these pullback and pushforward helpers once again no longer construct any new data.\nAs a result, all these helpers now take `nsmul`, `zsmul`, `npow`, and `zpow` arguments as necessary, to indicate that these operations are preserved by the function in question.\nAs a result of this change, all existing callers are now expected to have a `has_pow` or `has_scalar` implementation available ahead of time. In many cases the `has_scalar` instances already exist as a more general case, and maybe just need reordering within the file. Sometimes the general case of `has_scalar` is stated in a way that isn't general enough to describe `int` and `nat`. In these cases and the `has_pow` cases, we define new instance manually. Grepping reveals a rough summary of the new instances:\n```lean\ninstance : has_pow (A 0) ℕ\ninstance has_nsmul : has_scalar ℕ (C ⟶ D)\ninstance has_zsmul : has_scalar ℤ (C ⟶ D)\ninstance has_nsmul : has_scalar ℕ (M →ₗ⁅R,L⁆ N)\ninstance has_zsmul : has_scalar ℤ (M →ₗ⁅R,L⁆ N)\ninstance has_nsmul : has_scalar ℕ {x : α // 0 ≤ x}\ninstance has_pow : α // 0 ≤ x} ℕ\ninstance : has_scalar R (ι →ᵇᵃ[I₀] M)\ninstance has_nat_scalar : has_scalar ℕ (normed_group_hom V₁ V₂)\ninstance has_int_scalar : has_scalar ℤ (normed_group_hom V₁ V₂)\ninstance : has_pow ℕ+ ℕ\ninstance subfield.has_zpow : has_pow s ℤ\ninstance has_nat_scalar : has_scalar ℕ (left_invariant_derivation I G)\ninstance has_int_scalar : has_scalar ℤ (left_invariant_derivation I G)\ninstance add_subgroup.has_nsmul : has_scalar ℕ H\ninstance subgroup.has_npow : has_pow H ℕ\ninstance add_subgroup.has_zsmul : has_scalar ℤ H\ninstance subgroup.has_zpow : has_pow H ℤ\ninstance add_submonoid.has_nsmul : has_scalar ℕ S\ninstance submonoid.has_pow : has_pow S ℕ\ninstance : has_pow (special_linear_group n R) ℕ\ninstance : has_pow (α →ₘ[μ] γ) ℕ\ninstance has_int_pow : has_pow (α →ₘ[μ] γ) ℤ\ninstance : div_inv_monoid (α →ₘ[μ] γ)\ninstance has_nat_pow : has_pow (α →ₛ β) ℕ\ninstance has_int_pow : has_pow (α →ₛ β) ℤ\ninstance has_nat_pow : has_pow (germ l G) ℕ\ninstance has_int_pow : has_pow (germ l G) ℤ\ninstance : has_scalar ℕ (fractional_ideal S P)\ninstance has_nat_scalar : has_scalar ℕ (𝕎 R)\ninstance has_int_scalar : has_scalar ℤ (𝕎 R)\ninstance has_nat_pow : has_pow (𝕎 R) ℕ\ninstance has_nat_scalar : has_scalar ℕ (truncated_witt_vector p n R)\ninstance has_int_scalar : has_scalar ℤ (truncated_witt_vector p n R)\ninstance has_nat_pow : has_pow (truncated_witt_vector p n R) ℕ\ninstance has_nat_scalar : has_scalar ℕ (α →ᵇ β)\ninstance has_int_scalar : has_scalar ℤ (α →ᵇ β)\ninstance has_nat_pow : has_pow (α →ᵇ R) ℕ\n```", "changes": [{"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["add", "theorem", "of_zero_pow", ["direct_sum"]]]}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "theorem", "mk_zero_pow", ["graded_monoid"]]]}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": [["add", "theorem", "nsmul_f_apply", ["homological_complex"]], ["add", "theorem", "zsmul_f_apply", ["homological_complex"]]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "coe_nsmul", ["lie_module_hom"]], ["add", "theorem", "coe_zsmul", ["lie_module_hom"]], ["add", "theorem", "nsmul_apply", ["lie_module_hom"]], ["add", "theorem", "zsmul_apply", ["lie_module_hom"]]]}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": [["add", "theorem", "mk_pow", ["nonneg"]], ["add", "theorem", "nsmul_mk", ["nonneg"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "coe_mul", ["finset"]], ["add", "theorem", "coe_one", ["finset"]], ["add", "theorem", "coe_pow", ["finset"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": []}, {"oldPath": "src/algebra/symmetrized.lean", "newPath": "src/algebra/symmetrized.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": [["add", "theorem", "coe_nsmul", ["normed_group_hom"]], ["add", "theorem", "coe_zsmul", ["normed_group_hom"]], ["add", "theorem", "nsmul_apply", ["normed_group_hom"]], ["add", "theorem", "zsmul_apply", ["normed_group_hom"]]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": [["add", "theorem", "pow_def", ["equiv"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/prime.lean", "newPath": "src/data/pnat/prime.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "zpow_mem", ["subfield"]]]}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "coe_pow", ["subgroup"]], ["mod", "theorem", "coe_zpow", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["del", "theorem", "coe_pow", ["submonoid"]], ["del", "theorem", "pow_mem", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "coe_pow", ["submonoid"]], ["add", "theorem", "pow_mem", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["add", "theorem", "coe_pow", ["matrix", "special_linear_group"]]]}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": [["add", "theorem", "coe_fn_pow", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_zpow", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_pow", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_zpow", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "pow_to_germ", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "zpow_to_germ", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "coe_pow", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_zpow", ["measure_theory", "simple_func"]], ["add", "theorem", "pow_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "zpow_apply", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["mod", "theorem", "add_apply", ["measure_theory", "vector_measure"]]]}, {"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["add", "theorem", "coe_pow", ["filter", "germ"]], ["add", "theorem", "coe_zpow", ["filter", "germ"]]]}, {"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_nsmul", ["fractional_ideal"]], ["add", "theorem", "nsmul", ["is_fractional"]]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["mod", "theorem", "coe_pow", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": [["add", "theorem", "nsmul", ["witt_vector", "map_fun"]], ["add", "theorem", "pow", ["witt_vector", "map_fun"]], ["add", "theorem", "zsmul", ["witt_vector", "map_fun"]]]}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": [["add", "theorem", "constant_coeff_witt_nsmul", ["witt_vector"]], ["add", "theorem", "constant_coeff_witt_zsmul", ["witt_vector"]], ["add", "theorem", "nsmul_coeff", ["witt_vector"]], ["add", "theorem", "pow_coeff", ["witt_vector"]], ["add", "def", "witt_nsmul", ["witt_vector"]], ["add", "theorem", "witt_nsmul_vars", ["witt_vector"]], ["add", "def", "witt_pow", ["witt_vector"]], ["add", "theorem", "witt_pow_vars", ["witt_vector"]], ["add", "def", "witt_zsmul", ["witt_vector"]], ["add", "theorem", "witt_zsmul_vars", ["witt_vector"]], ["add", "theorem", "zsmul_coeff", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/identities.lean", "newPath": "src/ring_theory/witt_vector/identities.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/init_tail.lean", "newPath": "src/ring_theory/witt_vector/init_tail.lean", "changes": [["add", "theorem", "init_nsmul", ["witt_vector"]], ["add", "theorem", "init_pow", ["witt_vector"]], ["add", "theorem", "init_zsmul", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": [["add", "theorem", "truncate_fun_nsmul", ["witt_vector"]], ["add", "theorem", "truncate_fun_pow", ["witt_vector"]], ["add", "theorem", "truncate_fun_zsmul", ["witt_vector"]]]}, {"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "coe_npow_rec", ["bounded_continuous_function"]], ["add", "theorem", "coe_nsmul", ["bounded_continuous_function"]], ["add", "theorem", "coe_nsmul_rec", ["bounded_continuous_function"]], ["add", "theorem", "coe_pow", ["bounded_continuous_function"]], ["add", "theorem", "coe_zsmul", ["bounded_continuous_function"]], ["add", "theorem", "coe_zsmul_rec", ["bounded_continuous_function"]], ["add", "theorem", "nsmul_apply", ["bounded_continuous_function"]], ["add", "theorem", "pow_apply", ["bounded_continuous_function"]], ["add", "theorem", "zsmul_apply", ["bounded_continuous_function"]]]}]}, {"timestamp": 1646728266, "sha": "b4a7ad6c", "message": "chore(field_theory/laurent): drop unused 'have'. (#12516)", "changes": [{"oldPath": "src/field_theory/laurent.lean", "newPath": "src/field_theory/laurent.lean", "changes": []}]}, {"timestamp": 1646728265, "sha": "dc093e91", "message": "chore(combinatorics/configuration): don't use classical.some in a proof (#12515)", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1646728264, "sha": "ffa6e6d6", "message": "feat(set_theory/cardinal): `sum_le_sup_lift` (#12513)\nThis is a universe-polymorphic version of `sum_le_sup`.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "sum_le_sup_lift", ["cardinal"]]]}]}, {"timestamp": 1646728263, "sha": "43cb3ffc", "message": "fix(ring_theory/ideal/operations): fix a name and dot notation (#12507)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "theorem", "to_is_prime", ["ideal", "is_primary"]], ["add", "theorem", "is_primary", ["ideal", "is_prime"]]]}]}, {"timestamp": 1646728262, "sha": "b2377ea2", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): generalize scalar action (#12503)\nThis means the smul lemmas also work for `nsmul`.", "changes": [{"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["mod", "theorem", "coe_fn_smul", ["measure_theory", "finite_measure"]], ["mod", "theorem", "coe_smul", ["measure_theory", "finite_measure"]], ["mod", "theorem", "test_against_nn_smul", ["measure_theory", "finite_measure"]]]}]}, {"timestamp": 1646728260, "sha": "65095fe1", "message": "doc(order/succ_pred/basic): fix typo (#12501)", "changes": [{"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": []}]}, {"timestamp": 1646728259, "sha": "47182da5", "message": "feat(algebra/group/to_additive): add to_additive doc string linter (#12487)\nit is an easy mistake to add a docstring to a lemma with `to_additive`\nwithout also passing a string to `to_additive`. This linter checks for\nthat, and suggests to add a doc string when needed.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": null, "newPath": "test/lint_to_additive_doc.lean", "changes": [["add", "theorem", "bar", []], ["add", "theorem", "baz", []], ["add", "theorem", "foo", []], ["add", "theorem", "quux", []]]}]}, {"timestamp": 1646728258, "sha": "ccdcce13", "message": "chore(set_theory/game/nim): General golfing (#12471)\nWe make use of various relatively new theorems on ordinals to simplify various proofs, or otherwise clean up the file.", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "exists_move_left_eq", ["pgame", "nim"]], ["del", "theorem", "nim_wf_lemma", ["pgame", "nim"]], ["mod", "theorem", "non_zero_first_wins", ["pgame", "nim"]], ["mod", "theorem", "nonmoves_nonempty", ["pgame"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1646728257, "sha": "b3fba033", "message": "feat(algebra/homology/homotopy) : `mk_coinductive` (#12457)\n`mk_coinductive` is the dual version of `mk_inductive` in the same file. `mk_inductive` is to build homotopy of chain complexes inductively and `mk_coinductive` is to build homotopy of cochain complexes inductively.", "changes": [{"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": [["add", "theorem", "d_next_cochain_complex", ["homotopy"]], ["add", "def", "mk_coinductive", ["homotopy"]], ["add", "def", "mk_coinductive_aux₁", ["homotopy"]], ["add", "def", "mk_coinductive_aux₂", ["homotopy"]], ["add", "theorem", "mk_coinductive_aux₃", ["homotopy"]], ["add", "theorem", "prev_d_succ_cochain_complex", ["homotopy"]], ["add", "theorem", "prev_d_zero_cochain_complex", ["homotopy"]]]}]}, {"timestamp": 1646724403, "sha": "14997d0e", "message": "feat(analysis/normed_space): allow non-unital C^* rings (#12327)", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1646719719, "sha": "74746bde", "message": "chore(counterexamples/canonically_ordered_comm_semiring_two_mul): golf (#12504)", "changes": [{"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": [["add", "def", "L_subsemiring", ["ex_L"]]]}]}, {"timestamp": 1646693991, "sha": "5f6d30ec", "message": "chore(*): move `has_scalar` instances before `add_comm_monoid` instances (#12502)\nThis makes it easier for us to set `nsmul` and `zsmul` in future.", "changes": [{"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": []}]}, {"timestamp": 1646688666, "sha": "e409a904", "message": "feat(measure_theory/integral/periodic.lean): add lemma `function.periodic.tendsto_at_bot_interval_integral_of_pos'` (#12500)\nPartner of `function.periodic.tendsto_at_top_interval_integral_of_pos'` (I probably should have included this in #12488)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "interval_integral_pos_of_pos", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": [["add", "theorem", "integral_le_Sup_add_zsmul_of_pos", ["function", "periodic"]], ["add", "theorem", "tendsto_at_bot_interval_integral_of_pos'", ["function", "periodic"]], ["add", "theorem", "tendsto_at_bot_interval_integral_of_pos", ["function", "periodic"]]]}]}, {"timestamp": 1646688664, "sha": "390554d2", "message": "feat(ring_theory/coprime/basic): lemmas about multiplying by units (#12480)", "changes": [{"oldPath": "src/ring_theory/coprime/basic.lean", "newPath": "src/ring_theory/coprime/basic.lean", "changes": [["add", "theorem", "is_coprime_group_smul", []], ["add", "theorem", "is_coprime_group_smul_left", []], ["add", "theorem", "is_coprime_group_smul_right", []], ["add", "theorem", "is_coprime_mul_unit_left", []], ["add", "theorem", "is_coprime_mul_unit_left_left", []], ["add", "theorem", "is_coprime_mul_unit_left_right", []], ["add", "theorem", "is_coprime_mul_unit_right", []], ["add", "theorem", "is_coprime_mul_unit_right_left", []], ["add", "theorem", "is_coprime_mul_unit_right_right", []]]}]}, {"timestamp": 1646688663, "sha": "9728bd25", "message": "chore(number_theory/number_field): golf `int.not_is_field` (#12451)\nGolfed proof of number_theory.number_field.int.not_is_field\nCo-authored by: David Ang \nCo-authored by: Eric Rodriguez \nCo-authored by: Violeta Hernández ", "changes": [{"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["mod", "theorem", "not_is_field", ["int"]]]}]}, {"timestamp": 1646682458, "sha": "1b4ee53b", "message": "feat(algebra/associated): add pow_not_prime (#12493)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "of_irreducible_pow", []], ["add", "theorem", "pow_not_prime", []]]}]}, {"timestamp": 1646682456, "sha": "f28023e9", "message": "feat(measure_theory/function/uniform_integrable): Uniform integrability and Vitali convergence theorem (#12408)\nThis PR defines uniform integrability (both in the measure theory sense as well as the probability theory sense) and proves the Vitali convergence theorem which establishes a relation between convergence in measure and uniform integrability with convergence in Lp.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "rpow_one_div_le_iff", ["ennreal"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "norm_rpow", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["add", "theorem", "integral_indicator_norm_ge_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "integral_indicator_norm_ge_nonneg_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "integral_indicator_norm_ge_nonneg_le_of_meas", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_ess_sup_indicator_norm_ge_eq_zero", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_indicator_le'", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_indicator_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_indicator_le_of_meas", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_indicator_norm_ge_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_indicator_norm_ge_pos_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_indicator_le_of_bound", ["measure_theory"]], ["add", "theorem", "snorm_sub_le_of_dist_bdd", ["measure_theory"]], ["add", "theorem", "tendsto_Lp_of_tendsto_ae", ["measure_theory"]], ["add", "theorem", "tendsto_Lp_of_tendsto_ae_of_meas", ["measure_theory"]], ["add", "theorem", "tendsto_Lp_of_tendsto_in_measure", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_iff_tendsto_Lp", ["measure_theory"]], ["add", "theorem", "tendsto_indicator_ge", ["measure_theory"]], ["add", "def", "unif_integrable", ["measure_theory"]], ["add", "theorem", "unif_integrable_congr_ae", ["measure_theory"]], ["add", "theorem", "unif_integrable_const", ["measure_theory"]], ["add", "theorem", "unif_integrable_fin", ["measure_theory"]], ["add", "theorem", "unif_integrable_fintype", ["measure_theory"]], ["add", "theorem", "unif_integrable_of_tendsto_Lp", ["measure_theory"]], ["add", "theorem", "unif_integrable_of_tendsto_Lp_zero", ["measure_theory"]], ["add", "theorem", "unif_integrable_subsingleton", ["measure_theory"]], ["add", "theorem", "measurable", ["measure_theory", "uniform_integrable"]], ["add", "theorem", "mem_ℒp", ["measure_theory", "uniform_integrable"]], ["add", "theorem", "unif_integrable", ["measure_theory", "uniform_integrable"]], ["add", "def", "uniform_integrable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "restrict", ["filter", "eventually_eq"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "exists_seq_forall_of_frequently", ["filter"]], ["add", "theorem", "frequently_iff_seq_frequently", ["filter"]], ["add", "theorem", "not_tendsto_iff_exists_frequently_nmem", ["filter"]], ["add", "theorem", "subseq_forall_of_frequently", ["filter"]], ["add", "theorem", "tendsto_iff_forall_eventually_mem", ["filter"]], ["add", "theorem", "tendsto_of_subseq_tendsto", ["filter"]]]}]}, {"timestamp": 1646682454, "sha": "1ee91a5c", "message": "feat(probability_theory/stopping): define progressively measurable processes (#11350)\n* Define progressively measurable processes (`prog_measurable`), which is the correct strengthening of `adapted` to get that the stopped process is also progressively measurable.\n* Prove that an adapted continuous process is progressively measurable.\nFor discrete time processes, progressively measurable is equivalent to `adapted` .\nThis PR also changes some measurable_space arguments in `measurable_space.lean` from typeclass arguments to implicit.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "measurable_uncurry_of_continuous_of_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "prod_mk", ["measurable"]], ["mod", "theorem", "sum_elim", ["measurable"]], ["mod", "theorem", "measurable_from_prod_encodable", []], ["mod", "theorem", "measurable_fst", []], ["mod", "theorem", "measurable_inl", []], ["mod", "theorem", "measurable_inr", []], ["mod", "theorem", "measurable_prod", []], ["mod", "theorem", "measurable_snd", []], ["add", "def", "prod", ["measurable_space"]], ["mod", "theorem", "measurable_sum", []], ["mod", "theorem", "measurable_swap", []], ["mod", "theorem", "measurable_swap_iff", []], ["mod", "theorem", "measurable_to_encodable", []]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["mod", "theorem", "add", ["measure_theory", "adapted"]], ["add", "theorem", "measurable_stopped_process_of_nat", ["measure_theory", "adapted"]], ["mod", "theorem", "neg", ["measure_theory", "adapted"]], ["add", "theorem", "prog_measurable_of_continuous", ["measure_theory", "adapted"]], ["add", "theorem", "prog_measurable_of_nat", ["measure_theory", "adapted"]], ["mod", "theorem", "smul", ["measure_theory", "adapted"]], ["del", "theorem", "stopped_process", ["measure_theory", "adapted"]], ["add", "theorem", "stopped_process_of_nat", ["measure_theory", "adapted"]], ["mod", "theorem", "integrable_stopped_process", ["measure_theory"]], ["mod", "theorem", "integrable_stopped_value", ["measure_theory"]], ["del", "theorem", "max", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "min", ["measure_theory", "is_stopping_time"]], ["del", "theorem", "measurable_stopped_process", ["measure_theory"]], ["mod", "theorem", "mem_ℒp_stopped_process", ["measure_theory"]], ["mod", "theorem", "mem_ℒp_stopped_value", ["measure_theory"]], ["add", "theorem", "adapted_stopped_process", ["measure_theory", "prog_measurable"]], ["add", "theorem", "measurable_stopped_process", ["measure_theory", "prog_measurable"]], ["add", "theorem", "stopped_process", ["measure_theory", "prog_measurable"]], ["add", "def", "prog_measurable", ["measure_theory"]], ["add", "theorem", "prog_measurable_const", ["measure_theory"]], ["add", "theorem", "prog_measurable_min_stopping_time", ["measure_theory"]], ["add", "theorem", "prog_measurable_of_tendsto'", ["measure_theory"]], ["add", "theorem", "prog_measurable_of_tendsto", ["measure_theory"]]]}]}, {"timestamp": 1646677864, "sha": "e871be25", "message": "feat(data/real/nnreal): floor_semiring instance (#12495)\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60nat.2Eceil.60.20on.20.60nnreal.60.20.3F/near/274353230)", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": [["add", "theorem", "nat_ceil_coe", ["nonneg"]], ["add", "theorem", "nat_floor_coe", ["nonneg"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1646677863, "sha": "8d2ffb8f", "message": "feat(category_theory): (co)kernels of biproduct projection and inclusion (#12394)\nadd kernels and cokernels of biproduct projections and inclusions", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "fst_kernel_fork", ["category_theory", "limits", "biprod"]], ["add", "theorem", "fst_kernel_fork_ι", ["category_theory", "limits", "biprod"]], ["add", "def", "inl_cokernel_fork", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inl_cokernel_fork_π", ["category_theory", "limits", "biprod"]], ["add", "def", "inr_cokernel_fork", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inr_cokernel_fork_π", ["category_theory", "limits", "biprod"]], ["add", "def", "is_cokernel_inl_cokernel_fork", ["category_theory", "limits", "biprod"]], ["add", "def", "is_cokernel_inr_cokernel_fork", ["category_theory", "limits", "biprod"]], ["add", "def", "is_kernel_fst_kernel_fork", ["category_theory", "limits", "biprod"]], ["add", "def", "is_kernel_snd_kernel_fork", ["category_theory", "limits", "biprod"]], ["add", "def", "snd_kernel_fork", ["category_theory", "limits", "biprod"]], ["add", "theorem", "snd_kernel_fork_ι", ["category_theory", "limits", "biprod"]], ["add", "def", "from_subtype", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "from_subtype_eq_lift", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "from_subtype_to_subtype", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "from_subtype_π", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "from_subtype_π_subtype", ["category_theory", "limits", "biproduct"]], ["add", "def", "is_colimit_to_subtype", ["category_theory", "limits", "biproduct"]], ["add", "def", "is_limit_from_subtype", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "lift_map", ["category_theory", "limits", "biproduct"]], ["mod", "def", "map'", ["category_theory", "limits", "biproduct"]], ["mod", "def", "map", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "map_desc", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "map_eq_map'", ["category_theory", "limits", "biproduct"]], ["mod", "def", "map_iso", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "map_π", ["category_theory", "limits", "biproduct"]], ["add", "def", "to_subtype", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "to_subtype_eq_desc", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "to_subtype_from_subtype", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "to_subtype_π", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_from_subtype", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "ι_map", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_to_subtype", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_to_subtype_subtype", ["category_theory", "limits", "biproduct"]]]}]}, {"timestamp": 1646676076, "sha": "85a415e9", "message": "docs(overview): Add overview of model theory (#12496)\nAdds a subsection on model theory to the mathlib overview.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1646668901, "sha": "3c3c3bc1", "message": "fix(tactic/interactive): use non-interactive admit tactic (#12489)\nIn a future release of Lean 3, the interactive admit tactic will take an additional argument.", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1646668899, "sha": "5f2a6ac6", "message": "feat(measure_theory/integral/periodic): further properties of periodic integrals (#12488)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "fract_div_mul_self_add_zsmul_eq", ["int"]], ["add", "theorem", "fract_div_mul_self_mem_Ico", ["int"]]]}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": [["add", "theorem", "Inf_add_zsmul_le_integral_of_pos", ["function", "periodic"]], ["mod", "theorem", "interval_integral_add_eq", ["function", "periodic"]], ["add", "theorem", "interval_integral_add_eq_add", ["function", "periodic"]], ["mod", "theorem", "interval_integral_add_eq_of_pos", ["function", "periodic"]], ["add", "theorem", "interval_integral_add_zsmul_eq", ["function", "periodic"]], ["add", "theorem", "tendsto_at_top_interval_integral_of_pos'", ["function", "periodic"]], ["add", "theorem", "tendsto_at_top_interval_integral_of_pos", ["function", "periodic"]], ["mod", "theorem", "is_add_fundamental_domain_Ioc", []]]}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["add", "theorem", "Inf_image_Icc_le", ["continuous_on"]], ["mod", "theorem", "image_Icc", ["continuous_on"]], ["mod", "theorem", "image_interval", ["continuous_on"]], ["mod", "theorem", "image_interval_eq_Icc", ["continuous_on"]], ["add", "theorem", "le_Sup_image_Icc", ["continuous_on"]]]}]}, {"timestamp": 1646668898, "sha": "c95ce52d", "message": "fix(number_theory/modular): prefer `coe` over `coe_fn` in lemma statements (#12445)\nThis file is already full of `↑ₘ`s (aka coercions to matrix), we may as well use them uniformly.", "changes": [{"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}]}, {"timestamp": 1646662319, "sha": "f451e09a", "message": "chore(algebra/order/{group,monoid}): trivial lemma about arithmetic on `with_top` and `with_bot` (#12491)", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "coe_neg", ["with_top"]]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "coe_eq_one", ["with_bot"]], ["del", "theorem", "coe_eq_zero", ["with_bot"]], ["del", "theorem", "coe_zero", ["with_bot"]]]}]}, {"timestamp": 1646662317, "sha": "65ac316c", "message": "chore(algebra/order/nonneg): add `nonneg.coe_nat_cast` (#12490)", "changes": [{"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}]}, {"timestamp": 1646662316, "sha": "16b67661", "message": "feat(analysis/normed_space): non-unital normed rings (#12326)\nOn the way to allowing non-unital C^*-algebras.", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed/normed_field.lean", "newPath": "src/analysis/normed/normed_field.lean", "changes": []}]}, {"timestamp": 1646662315, "sha": "9ed43666", "message": "feat(category_theory/limits): limit preservation properties of functor.left_op and similar (#12168)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/preserves/opposites.lean", "changes": [["add", "def", "perserves_colimits_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimit_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimit_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimit_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimit_unop", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape_unop", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_unop", ["category_theory", "limits"]], ["add", "def", "preserves_finite_colimits_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_finite_colimits_op", ["category_theory", "limits"]], ["add", "def", "preserves_finite_colimits_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_finite_colimits_unop", ["category_theory", "limits"]], ["add", "def", "preserves_finite_limits_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_finite_limits_op", ["category_theory", "limits"]], ["add", "def", "preserves_finite_limits_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_finite_limits_unop", ["category_theory", "limits"]], ["add", "def", "preserves_limit_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_limit_op", ["category_theory", "limits"]], ["add", "def", "preserves_limit_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_limit_unop", ["category_theory", "limits"]], ["add", "def", "preserves_limits_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_left_op", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_op", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_unop", ["category_theory", "limits"]], ["add", "def", "preserves_limits_op", ["category_theory", "limits"]], ["add", "def", "preserves_limits_right_op", ["category_theory", "limits"]], ["add", "def", "preserves_limits_unop", ["category_theory", "limits"]]]}]}, {"timestamp": 1646655428, "sha": "900ce6fc", "message": "chore(data/equiv/basic): rename `involutive.to_equiv` to `to_perm` (#12486)", "changes": [{"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "perm", ["equiv"]], ["add", "theorem", "coe_to_perm", ["function", "involutive"]], ["del", "def", "to_equiv", ["function", "involutive"]], ["add", "def", "to_perm", ["function", "involutive"]], ["add", "theorem", "to_perm_involutive", ["function", "involutive"]], ["add", "theorem", "to_perm_symm", ["function", "involutive"]]]}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}]}, {"timestamp": 1646648148, "sha": "eb46e7e3", "message": "feat(algebra/group/to_additive): let to_additive turn `pow` into `nsmul` (#12477)\nThe naming convention for `npow` in lemma names is `pow`, so let’s teach\n`to_additive` about it.\nA fair number of lemmas now no longer need an explicit additive name.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "map_pow", []]]}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "inv_pow", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "pow_eq_mod_card", []]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["mod", "theorem", "coe_pow", ["submonoid"]], ["mod", "theorem", "pow_mem", ["submonoid"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["mod", "theorem", "pow_comp", ["continuous_map"]]]}]}, {"timestamp": 1646648147, "sha": "d704f27e", "message": "refactor(set_theory/*): `o.out.r` → `<` (#12468)\nWe declare a `linear_order` instance on `o.out.α`, for `o : ordinal`, with `<` def-eq to `o.out.r`. This will improve code clarity and will allow us to state theorems about specific ordinals as ordered structures.", "changes": [{"oldPath": "src/measure_theory/card_measurable_space.lean", "newPath": "src/measure_theory/card_measurable_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "def", "out'", ["ordinal"]], ["del", "def", "out", ["ordinal"]], ["del", "theorem", "type_out'", ["ordinal"]], ["mod", "theorem", "nim_wf_lemma", ["pgame", "nim"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "card_typein_out_lt", ["cardinal"]], ["mod", "def", "initial_seg_out", ["ordinal"]], ["mod", "def", "principal_seg_out", ["ordinal"]], ["mod", "def", "rel_iso_out", ["ordinal"]], ["mod", "theorem", "type_lt", ["ordinal"]], ["add", "theorem", "type_lt_iff", ["ordinal"]], ["del", "theorem", "type_out", ["ordinal"]], ["mod", "theorem", "typein_lt_self", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "lsub_typein", ["ordinal"]], ["mod", "theorem", "sup_typein_succ", ["ordinal"]]]}, {"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/principal.lean", "changes": []}]}, {"timestamp": 1646648146, "sha": "9dd8ec1e", "message": "feat(analysis/normed/group/hom): add a module instance (#12465)", "changes": [{"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": [["add", "theorem", "coe_smul", ["normed_group_hom"]], ["add", "theorem", "smul_apply", ["normed_group_hom"]]]}]}, {"timestamp": 1646648145, "sha": "0b86bb8d", "message": "feat(measure_theory/group/arithmetic): actions by int and nat are measurable (#12464)\nThe `has_measurable_smul₂` proofs are essentially copied from the analogous proofs for `has_measurable_pow`, after golfing them.", "changes": [{"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}]}, {"timestamp": 1646648143, "sha": "3f353db2", "message": "feat(data/nat/basic): add one_le_div_iff (#12461)\nCouldn't find these.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_lt_one_iff", ["nat"]], ["add", "theorem", "one_le_div_iff", ["nat"]]]}]}, {"timestamp": 1646648142, "sha": "2675b5c3", "message": "feat(measure_theory/constructions/polish): injective images of Borel sets in Polish spaces are Borel (#12448)\nWe prove several fundamental results on the Borel sigma-algebra in Polish spaces, notably:\n* Lusin separation theorem: disjoint analytic sets can be separated via Borel sets\n* Lusin-Souslin theorem: a continuous injective image of a Borel set in a Polish space is Borel\n* An injective measurable map on a Polish space is a measurable embedding, i.e., it maps measurable sets to measurable sets", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/constructions/polish.lean", "changes": [["add", "theorem", "measurable_embedding", ["continuous"]], ["add", "theorem", "measurable_embedding", ["continuous_on"]], ["add", "theorem", "analytic_set", ["is_closed"]], ["add", "theorem", "measurable_set_image_of_continuous_on_inj_on", ["is_closed"]], ["add", "theorem", "analytic_set_image", ["is_open"]], ["add", "theorem", "exists_continuous", ["measurable"]], ["add", "theorem", "measurable_embedding", ["measurable"]], ["add", "theorem", "analytic_set", ["measurable_set"]], ["add", "theorem", "image_of_continuous_on_inj_on", ["measurable_set"]], ["add", "theorem", "image_of_measurable_inj_on", ["measurable_set"]], ["add", "theorem", "is_clopenable", ["measurable_set"]], ["add", "theorem", "Inter", ["measure_theory", "analytic_set"]], ["add", "theorem", "Union", ["measure_theory", "analytic_set"]], ["add", "theorem", "image_of_continuous", ["measure_theory", "analytic_set"]], ["add", "theorem", "image_of_continuous_on", ["measure_theory", "analytic_set"]], ["add", "theorem", "measurably_separable", ["measure_theory", "analytic_set"]], ["add", "def", "analytic_set", ["measure_theory"]], ["add", "theorem", "analytic_set_empty", ["measure_theory"]], ["add", "theorem", "analytic_set_iff_exists_polish_space_range", ["measure_theory"]], ["add", "theorem", "analytic_set_range_of_polish_space", ["measure_theory"]], ["add", "theorem", "is_clopenable_iff_measurable_set", ["measure_theory"]], ["add", "theorem", "measurable_set_range_of_continuous_injective", ["measure_theory"]], ["add", "theorem", "Union", ["measure_theory", "measurably_separable"]], ["add", "def", "measurably_separable", ["measure_theory"]], ["add", "theorem", "measurably_separable_range_of_disjoint", ["measure_theory"]]]}]}, {"timestamp": 1646648141, "sha": "37783539", "message": "feat(set_theory/ordinal_arithmetic): `enum_ord univ = id` (#12391)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "enum_ord_range", ["ordinal"]], ["add", "theorem", "enum_ord_univ", ["ordinal"]], ["add", "theorem", "range_enum_ord", ["ordinal"]]]}]}, {"timestamp": 1646648140, "sha": "313f4055", "message": "feat(category_theory/*): preserves biproducts implies additive (#12014)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/biproducts.lean", "changes": [["add", "def", "map_bicone", ["category_theory", "functor"]], ["add", "def", "map_binary_bicone", ["category_theory", "functor"]], ["add", "def", "map_biprod", ["category_theory", "functor"]], ["add", "theorem", "map_biprod_hom", ["category_theory", "functor"]], ["add", "theorem", "map_biprod_inv", ["category_theory", "functor"]], ["add", "def", "map_biproduct", ["category_theory", "functor"]], ["add", "theorem", "map_biproduct_hom", ["category_theory", "functor"]], ["add", "theorem", "map_biproduct_inv", ["category_theory", "functor"]], ["add", "theorem", "lift_map_biprod", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_biprod_hom_desc", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_biprod_inv_map_desc", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_lift_map_biprod", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_biproduct_hom_desc", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "map_biproduct_inv_map_desc", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "map_lift_map_biprod", ["category_theory", "limits", "biproduct"]], ["add", "def", "is_bilimit_of_preserves", ["category_theory", "limits"]], ["add", "def", "is_binary_bilimit_of_preserves", ["category_theory", "limits"]], ["add", "def", "preserves_binary_biproduct_of_preserves_binary_coproduct", ["category_theory", "limits"]], ["add", "def", "preserves_binary_biproduct_of_preserves_binary_product", ["category_theory", "limits"]], ["add", "def", "preserves_binary_biproduct_of_preserves_biproduct", ["category_theory", "limits"]], ["add", "def", "preserves_binary_biproducts_of_preserves_binary_coproducts", ["category_theory", "limits"]], ["add", "def", "preserves_binary_biproducts_of_preserves_binary_products", ["category_theory", "limits"]], ["add", "def", "preserves_binary_biproducts_of_preserves_biproducts", ["category_theory", "limits"]], ["add", "def", "preserves_binary_coproduct_of_preserves_binary_biproduct", ["category_theory", "limits"]], ["add", "def", "preserves_binary_coproducts_of_preserves_binary_biproducts", ["category_theory", "limits"]], ["add", "def", "preserves_binary_product_of_preserves_binary_biproduct", ["category_theory", "limits"]], ["add", "def", "preserves_binary_products_of_preserves_binary_biproducts", ["category_theory", "limits"]], ["add", "def", "preserves_biproduct_of_preserves_coproduct", ["category_theory", "limits"]], ["add", "def", "preserves_biproduct_of_preserves_product", ["category_theory", "limits"]], ["add", "def", "preserves_biproducts_of_shape_of_preserves_coproducts_of_shape", ["category_theory", "limits"]], ["add", "def", "preserves_biproducts_of_shape_of_preserves_products_of_shape", ["category_theory", "limits"]], ["add", "def", "preserves_coproduct_of_preserves_biproduct", ["category_theory", "limits"]], ["add", "def", "preserves_coproducts_of_shape_of_preserves_biproducts_of_shape", ["category_theory", "limits"]], ["add", "def", "preserves_product_of_preserves_biproduct", ["category_theory", "limits"]], ["add", "def", "preserves_products_of_shape_of_preserves_biproducts_of_shape", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["add", "theorem", "additive_of_preserves_binary_biproducts", ["category_theory", "functor"]], ["del", "def", "map_biproduct", ["category_theory", "functor"]]]}]}, {"timestamp": 1646648138, "sha": "f063d0c6", "message": "feat(geometry/manifold/tangent_bundle): the `tangent_bundle` is a `topological_vector_bundle` (#8295)", "changes": [{"oldPath": "src/geometry/manifold/cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["del", "theorem", "cont_mdiff_at_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "cont_mdiff_on_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "cont_mdiff_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "cont_mdiff_within_at_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "smooth_at_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "smooth_const_section", ["basic_smooth_bundle_core"]], ["del", "theorem", "smooth_on_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "smooth_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "smooth_within_at_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "cont_mdiff_at_proj", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "cont_mdiff_on_proj", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "cont_mdiff_proj", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "cont_mdiff_within_at_proj", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "smooth_at_proj", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "smooth_const_section", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "smooth_on_proj", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "smooth_proj", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "smooth_within_at_proj", ["basic_smooth_vector_bundle_core"]], ["del", "def", "zero_section", ["tangent_bundle"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/tangent_bundle.lean", "changes": [["del", "theorem", "base_set", ["basic_smooth_bundle_core"]], ["del", "def", "chart", ["basic_smooth_bundle_core"]], ["del", "theorem", "chart_source", ["basic_smooth_bundle_core"]], ["del", "theorem", "chart_target", ["basic_smooth_bundle_core"]], ["del", "theorem", "coe_chart_at_fst", ["basic_smooth_bundle_core"]], ["del", "theorem", "coe_chart_at_symm_fst", ["basic_smooth_bundle_core"]], ["del", "theorem", "mem_atlas_iff", ["basic_smooth_bundle_core"]], ["del", "theorem", "mem_chart_source_iff", ["basic_smooth_bundle_core"]], ["del", "theorem", "mem_chart_target_iff", ["basic_smooth_bundle_core"]], ["del", "def", "to_topological_fiber_bundle_core", ["basic_smooth_bundle_core"]], ["del", "structure", "basic_smooth_bundle_core", []], ["add", "theorem", "base_set", ["basic_smooth_vector_bundle_core"]], ["add", "def", "chart", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "chart_source", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "chart_target", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "coe_chart_at_fst", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "coe_chart_at_symm_fst", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "mem_atlas_iff", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "mem_chart_source_iff", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "mem_chart_target_iff", ["basic_smooth_vector_bundle_core"]], ["add", "theorem", "target", ["basic_smooth_vector_bundle_core"]], ["add", "def", "to_topological_vector_bundle_core", ["basic_smooth_vector_bundle_core"]], ["add", "structure", "basic_smooth_vector_bundle_core", []], ["mod", "def", "tangent_bundle", []], ["mod", "def", "tangent_bundle_core", []], ["mod", "def", "tangent_space", []], ["del", "def", "trivial_basic_smooth_bundle_core", []], ["add", "def", "trivial_basic_smooth_vector_bundle_core", []]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "theorem", "base_set_at", ["topological_vector_bundle_core"]], ["add", "theorem", "local_triv_apply", ["topological_vector_bundle_core"]], ["add", "theorem", "local_triv_at_def", ["topological_vector_bundle_core"]], ["add", "theorem", "local_triv_symm_fst", ["topological_vector_bundle_core"]], ["add", "theorem", "mem_local_triv_at_base_set", ["topological_vector_bundle_core"]], ["mod", "theorem", "mem_local_triv_source", ["topological_vector_bundle_core"]], ["add", "theorem", "mem_local_triv_target", ["topological_vector_bundle_core"]], ["mod", "theorem", "mem_source_at", ["topological_vector_bundle_core"]], ["add", "def", "total_space", ["topological_vector_bundle_core"]], ["add", "def", "trivial_topological_vector_bundle_core", []]]}]}, {"timestamp": 1646640623, "sha": "a19f6c6f", "message": "doc(algebra/group/to_additive): `to_additive` and docstring interaction (#12476)", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}]}, {"timestamp": 1646603699, "sha": "92ef3c51", "message": "feat(ring_theory/graded_algebra/radical) : radical of homogeneous ideal is homogeneous (#12277)\nThis pr contains the following results about homogeneous ideals.\n* `ideal.is_homogeneous.is_prime_iff`: for any `I : ideal A`, if `I` is homogeneous, then\n `I` is prime if and only if `I` is homogeneously prime, i.e. `I ≠ ⊤` and if `x, y` are\n homogeneous elements such that `x * y ∈ I`, then at least one of `x,y` is in `I`.\n* `ideal.is_prime.homogeneous_core`: for any `I : ideal A`, if `I` is prime, then\n `I.homogeneous_core 𝒜` (i.e. the largest homogeneous ideal contained in `I`) is also prime.\n* `ideal.is_homogeneous.radical`: for any `I : ideal A`, if `I` is homogeneous, then the\n radical of `I` is homogeneous as well.\n* `homogeneous_ideal.radical`: for any `I : homogeneous_ideal 𝒜`, `I.radical` is the the\n radical of `I` as a `homogeneous_ideal 𝒜`", "changes": [{"oldPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": [["add", "theorem", "mem_homogeneous_core_of_is_homogeneous_of_mem", ["ideal"]]]}, {"oldPath": null, "newPath": "src/ring_theory/graded_algebra/radical.lean", "changes": [["add", "theorem", "coe_radical", ["homogeneous_ideal"]], ["add", "def", "radical", ["homogeneous_ideal"]], ["add", "theorem", "is_prime_iff", ["ideal", "is_homogeneous"]], ["add", "theorem", "is_prime_of_homogeneous_mem_or_mem", ["ideal", "is_homogeneous"]], ["add", "theorem", "radical", ["ideal", "is_homogeneous"]], ["add", "theorem", "radical_eq", ["ideal", "is_homogeneous"]], ["add", "theorem", "homogeneous_core", ["ideal", "is_prime"]]]}]}, {"timestamp": 1646592098, "sha": "40602e65", "message": "chore(set_theory/cardinal_divisibility): add instance unique (units cardinal) (#12458)", "changes": [{"oldPath": "src/set_theory/cardinal_divisibility.lean", "newPath": "src/set_theory/cardinal_divisibility.lean", "changes": []}]}, {"timestamp": 1646580989, "sha": "66961879", "message": "chore(set_theory/ordinal_arithmetic): Reorder theorems (#12475)\nIt makes more sense for `is_normal.bsup_eq` and `is_normal.blsub_eq` to be together.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1646579187, "sha": "0a6efe0f", "message": "feat(analysis/normed_space/star/spectrum): prove the spectral radius of a star normal element is its norm (#12249)\nIn a C⋆-algebra over ℂ, the spectral radius of any star normal element is its norm. This extends the corresponding result for selfadjoint elements.\n- [x] depends on: #12211 \n- [x] depends on: #11991", "changes": [{"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["del", "theorem", "coe_spectral_radius_eq_nnnorm", ["self_adjoint"]], ["add", "theorem", "spectral_radius_eq_nnnorm_of_star_normal", []]]}]}, {"timestamp": 1646567573, "sha": "28c902d8", "message": "fix(algebra/group/pi): Fix apply-simp-lemmas for monoid_hom.single (#12474)\nso that the simp-normal form really is `pi.mul_single`.\nWhile adjusting related lemmas in `group_theory.subgroup.basic`, add a\nfew missing `to_additive` attributes.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "single_apply", ["monoid_hom"]], ["add", "theorem", "single_apply", ["one_hom"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "mul_single_mem_pi", ["subgroup"]], ["add", "theorem", "pi_mem_of_mul_single_mem", ["subgroup"]], ["add", "theorem", "pi_mem_of_mul_single_mem_aux", ["subgroup"]], ["del", "theorem", "pi_mem_of_single_mem", ["subgroup"]], ["del", "theorem", "pi_mem_of_single_mem_aux", ["subgroup"]], ["del", "theorem", "single_mem_pi", ["subgroup"]]]}]}, {"timestamp": 1646552682, "sha": "64d953a1", "message": "refactor(set_theory/ordinal): `enum_lt` → `enum_lt_enum` (#12469)\nThat way, the theorem name matches that of `enum_le_enum`, `typein_lt_typein`, and `typein_le_typein`.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "enum_lt", ["ordinal"]], ["add", "theorem", "enum_lt_enum", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1646552681, "sha": "d61ebab1", "message": "feat(category_theory/abelian): (co)kernels in terms of exact sequences (#12460)", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "theorem", "comp_epi_desc", ["category_theory", "abelian"]], ["add", "def", "epi_desc", ["category_theory", "abelian"]], ["add", "def", "mono_lift", ["category_theory", "abelian"]], ["add", "theorem", "mono_lift_comp", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "exact_of_is_cokernel", ["category_theory", "abelian"]], ["add", "theorem", "exact_of_is_kernel", ["category_theory", "abelian"]], ["add", "def", "is_colimit_of_exact_of_epi", ["category_theory", "abelian"]], ["add", "def", "is_limit_of_exact_of_mono", ["category_theory", "abelian"]]]}]}, {"timestamp": 1646552680, "sha": "b7808a99", "message": "chore(set_theory/ordinal_arithmetic): Golf `lsub_typein` and `blsub_id` (#12203)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "blsub_id", ["ordinal"]], ["mod", "theorem", "bsup_id_limit", ["ordinal"]], ["mod", "theorem", "bsup_id_succ", ["ordinal"]], ["mod", "theorem", "lsub_typein", ["ordinal"]], ["mod", "theorem", "sup_typein_succ", ["ordinal"]]]}]}, {"timestamp": 1646552679, "sha": "b4d007fc", "message": "feat(category_theory/limits): transport is_limit along F.left_op and similar (#12166)", "changes": [{"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["mod", "theorem", "has_colimit_of_has_limit_left_op", ["category_theory", "limits"]], ["mod", "theorem", "has_limit_of_has_colimit_left_op", ["category_theory", "limits"]], ["add", "def", "is_colimit_cocone_left_op_of_cone", ["category_theory", "limits"]], ["add", "def", "is_colimit_cocone_of_cone_left_op", ["category_theory", "limits"]], ["add", "def", "is_colimit_cocone_of_cone_right_op", ["category_theory", "limits"]], ["add", "def", "is_colimit_cocone_right_op_of_cone", ["category_theory", "limits"]], ["add", "def", "is_colimit_cocone_unop_of_cone", ["category_theory", "limits"]], ["add", "def", "is_colimit_cone_of_cocone_unop", ["category_theory", "limits"]], ["add", "def", "is_colimit_cone_op", ["category_theory", "limits"]], ["add", "def", "is_colimit_cone_unop", ["category_theory", "limits"]], ["add", "def", "is_limit_cocone_op", ["category_theory", "limits"]], ["add", "def", "is_limit_cocone_unop", ["category_theory", "limits"]], ["add", "def", "is_limit_cone_left_op_of_cocone", ["category_theory", "limits"]], ["add", "def", "is_limit_cone_of_cocone_left_op", ["category_theory", "limits"]], ["add", "def", "is_limit_cone_of_cocone_right_op", ["category_theory", "limits"]], ["add", "def", "is_limit_cone_of_cocone_unop", ["category_theory", "limits"]], ["add", "def", "is_limit_cone_right_op_of_cocone", ["category_theory", "limits"]], ["add", "def", "is_limit_cone_unop_of_cocone", ["category_theory", "limits"]]]}]}, {"timestamp": 1646552678, "sha": "371b48a0", "message": "feal(category_theory/bicategory/functor): define pseudofunctors (#11992)\nThis PR defines pseudofunctors between bicategories. \nWe provide two constructors (`mk_of_oplax` and `mk_of_oplax'`) that construct pseudofunctors from oplax functors whose `map_id` and `map_comp` are isomorphisms. The constructor `mk_of_oplax` uses `iso` to describe isomorphisms, while `mk_of_oplax'` uses `is_iso`.", "changes": [{"oldPath": "src/category_theory/bicategory/functor.lean", "newPath": "src/category_theory/bicategory/functor.lean", "changes": [["mod", "def", "comp", ["category_theory", "oplax_functor"]], ["mod", "def", "id", ["category_theory", "oplax_functor"]], ["add", "structure", "pseudo_core", ["category_theory", "oplax_functor"]], ["add", "theorem", "to_prelax_eq_coe", ["category_theory", "oplax_functor"]], ["mod", "theorem", "to_prelax_functor_map", ["category_theory", "oplax_functor"]], ["mod", "theorem", "to_prelax_functor_map₂", ["category_theory", "oplax_functor"]], ["mod", "theorem", "to_prelax_functor_obj", ["category_theory", "oplax_functor"]], ["mod", "structure", "oplax_functor", ["category_theory"]], ["mod", "def", "comp", ["category_theory", "prelax_functor"]], ["mod", "def", "id", ["category_theory", "prelax_functor"]], ["add", "theorem", "to_prefunctor_eq_coe", ["category_theory", "prelax_functor"]], ["mod", "theorem", "to_prefunctor_map", ["category_theory", "prelax_functor"]], ["mod", "theorem", "to_prefunctor_obj", ["category_theory", "prelax_functor"]], ["mod", "structure", "prelax_functor", ["category_theory"]], ["add", "def", "comp", ["category_theory", "pseudofunctor"]], ["add", "def", "id", ["category_theory", "pseudofunctor"]], ["add", "def", "map_functor", ["category_theory", "pseudofunctor"]], ["add", "def", "map₂_associator_aux", ["category_theory", "pseudofunctor"]], ["add", "def", "mk_of_oplax'", ["category_theory", "pseudofunctor"]], ["add", "def", "mk_of_oplax", ["category_theory", "pseudofunctor"]], ["add", "def", "to_oplax", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_oplax_eq_coe", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_oplax_map", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_oplax_map_comp", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_oplax_map_id", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_oplax_map₂", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_oplax_obj", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_prelax_functor_eq_coe", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_prelax_functor_map", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_prelax_functor_map₂", ["category_theory", "pseudofunctor"]], ["add", "theorem", "to_prelax_functor_obj", ["category_theory", "pseudofunctor"]], ["add", "structure", "pseudofunctor", ["category_theory"]]]}]}, {"timestamp": 1646550667, "sha": "62e7d353", "message": "feat(category_theory/limits): uniqueness of preadditive structures (#12342)", "changes": [{"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "theorem", "bicone_ι_π_self", ["category_theory", "limits"]], ["add", "theorem", "add_eq_lift_desc_id", ["category_theory", "limits", "biprod"]], ["add", "theorem", "add_eq_lift_id_desc", ["category_theory", "limits", "biprod"]]]}]}, {"timestamp": 1646501892, "sha": "974d23c2", "message": "feat(data/polynomial/monic): add monic_of_mul_monic_left/right (#12446)\nAlso clean up variables that are defined in the section.\nFrom https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60geom_sum.20.28X.20.20n.29.60.20is.20monic/near/274130839", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["mod", "theorem", "as_sum", ["polynomial", "monic"]], ["add", "theorem", "of_mul_monic_left", ["polynomial", "monic"]], ["add", "theorem", "of_mul_monic_right", ["polynomial", "monic"]], ["mod", "theorem", "monic_add_of_left", ["polynomial"]], ["mod", "theorem", "monic_add_of_right", ["polynomial"]]]}]}, {"timestamp": 1646496835, "sha": "e542154b", "message": "feat(category_theory/full_subcategory): full_subcategory.map and full_subcategory.lift (#12335)", "changes": [{"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": [["add", "theorem", "inclusion_map_lift_map", ["category_theory", "full_subcategory"]], ["add", "theorem", "inclusion_obj_lift_obj", ["category_theory", "full_subcategory"]], ["add", "def", "lift", ["category_theory", "full_subcategory"]], ["add", "def", "lift_comp_inclusion", ["category_theory", "full_subcategory"]], ["add", "theorem", "lift_comp_map", ["category_theory", "full_subcategory"]], ["add", "def", "map", ["category_theory", "full_subcategory"]], ["add", "theorem", "map_inclusion", ["category_theory", "full_subcategory"]]]}, {"oldPath": "src/category_theory/functor/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": [["add", "def", "of_comp_faithful_iso", ["category_theory", "full"]]]}]}, {"timestamp": 1646496834, "sha": "51adf3a1", "message": "feat(model_theory/terms_and_formulas): Using a list encoding, bounds the number of terms (#12276)\nDefines `term.list_encode` and `term.list_decode`, which turn terms into lists, and reads off lists as lists of terms.\nBounds the number of terms by the number of allowed symbols + omega.", "changes": [{"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "theorem", "card_le", ["first_order", "language", "term"]], ["add", "def", "list_decode", ["first_order", "language", "term"]], ["add", "theorem", "list_decode_encode_list", ["first_order", "language", "term"]], ["add", "def", "list_encode", ["first_order", "language", "term"]], ["add", "theorem", "list_encode_injective", ["first_order", "language", "term"]]]}]}, {"timestamp": 1646493586, "sha": "92b27e12", "message": "feat(category_theory/discrete_category): generalize universes for comp_nat_iso_discrete (#12340)", "changes": [{"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["mod", "def", "comp_nat_iso_discrete", ["category_theory", "discrete"]]]}]}, {"timestamp": 1646493585, "sha": "4ecd92a9", "message": "feat(category_theory/abelian): faithful functors reflect exact sequences (#12071)", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["add", "theorem", "exact_of_exact_map'", ["category_theory", "functor"]], ["add", "theorem", "exact_of_exact_map", ["category_theory", "functor"]], ["mod", "theorem", "mono_iff_exact_zero_left", ["category_theory"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/zero.lean", "newPath": "src/category_theory/limits/preserves/shapes/zero.lean", "changes": [["add", "theorem", "map_eq_zero_iff", ["category_theory", "functor"]], ["add", "theorem", "zero_of_map_zero", ["category_theory", "functor"]]]}]}, {"timestamp": 1646486102, "sha": "fa6b16e1", "message": "feat(data/nat/prime): add nat.eq_two_pow_or_exists_odd_prime_and_dvd (#12395)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "eq_prime_pow_of_unique_prime_dvd", ["nat"]], ["add", "theorem", "eq_two_pow_or_exists_odd_prime_and_dvd", ["nat"]], ["add", "theorem", "eq_two_or_odd'", ["nat", "prime"]]]}]}, {"timestamp": 1646486101, "sha": "8b913902", "message": "feat(order/hom/basic): add `order_iso.with_{top,bot}_congr` (#12264)\nThis adds:\n* `with_bot.to_dual_top`\n* `with_top.to_dual_bot`\n* `order_iso.with_top_congr`\n* `order_iso.with_bot_congr`", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "map_coe'", ["option"]], ["add", "theorem", "map_coe", ["option"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "map_bot", ["with_bot"]], ["add", "theorem", "map_coe", ["with_bot"]], ["add", "theorem", "map_coe", ["with_top"]], ["add", "theorem", "map_top", ["with_top"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "def", "with_bot_congr", ["order_iso"]], ["add", "theorem", "with_bot_congr_refl", ["order_iso"]], ["add", "theorem", "with_bot_congr_symm", ["order_iso"]], ["add", "theorem", "with_bot_congr_trans", ["order_iso"]], ["add", "def", "with_top_congr", ["order_iso"]], ["add", "theorem", "with_top_congr_refl", ["order_iso"]], ["add", "theorem", "with_top_congr_symm", ["order_iso"]], ["add", "theorem", "with_top_congr_trans", ["order_iso"]], ["add", "theorem", "to_dual_top_coe", ["with_bot"]], ["add", "theorem", "to_dual_top_symm_coe", ["with_bot"]], ["add", "theorem", "to_dual_bot_coe", ["with_top"]], ["add", "theorem", "to_dual_bot_symm_coe", ["with_top"]]]}]}, {"timestamp": 1646482659, "sha": "2840532e", "message": "doc(topology/uniform_space/cauchy): fix typo (#12453)", "changes": [{"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1646477768, "sha": "bda091dd", "message": "feat(measure_theory/card_measurable_space): cardinality of generated sigma-algebras (#12422)\nIf a sigma-algebra is generated by a set of sets `s` whose cardinality is at most the continuum,\nthen the sigma-algebra satisfies the same cardinality bound.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/card_measurable_space.lean", "changes": [["add", "theorem", "cardinal_Union_generate_measurable_rec_le", ["measurable_space"]], ["add", "theorem", "cardinal_generate_measurable_le", ["measurable_space"]], ["add", "theorem", "cardinal_generate_measurable_le_continuum", ["measurable_space"]], ["add", "theorem", "cardinal_generate_measurable_rec_le", ["measurable_space"]], ["add", "theorem", "cardinal_measurable_set_le", ["measurable_space"]], ["add", "theorem", "cardinal_measurable_set_le_continuum", ["measurable_space"]], ["add", "def", "generate_measurable_rec", ["measurable_space"]], ["add", "theorem", "generate_measurable_subset_rec", ["measurable_space"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "power_le_power_left", ["cardinal"]], ["add", "theorem", "self_le_power", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "add_le_of_le", ["cardinal"]], ["add", "theorem", "omega_lt_aleph_one", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "is_regular_aleph_one", ["cardinal"]]]}, {"oldPath": "src/set_theory/continuum.lean", "newPath": "src/set_theory/continuum.lean", "changes": [["add", "theorem", "aleph_one_le_continuum", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1646471431, "sha": "93451afd", "message": "feat(order/category/BoolAlg): The category of Boolean algebras (#12452)\nDefine `BoolAlg`, the category of Boolean algebras with bounded lattice homs.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/category/BoolAlg.lean", "changes": [["add", "def", "dual", ["BoolAlg"]], ["add", "def", "dual_equiv", ["BoolAlg"]], ["add", "def", "mk", ["BoolAlg", "iso"]], ["add", "def", "of", ["BoolAlg"]], ["add", "def", "to_BoundedDistribLattice", ["BoolAlg"]], ["add", "def", "BoolAlg", []], ["add", "theorem", "BoolAlg_dual_comp_forget_to_BoundedDistribLattice", []]]}]}, {"timestamp": 1646471430, "sha": "f5b885b0", "message": "feat(linear_algebra/clifford_algebra/conjugation): reverse and involute are grade-preserving (#12373)\nThis shows that various submodules are preserved under `submodule.map` by `reverse` or `involute`.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": [["add", "theorem", "even_odd_comap_involute", ["clifford_algebra"]], ["add", "theorem", "even_odd_comap_reverse", ["clifford_algebra"]], ["add", "theorem", "even_odd_map_involute", ["clifford_algebra"]], ["add", "theorem", "even_odd_map_reverse", ["clifford_algebra"]], ["add", "theorem", "involute_mem_even_odd_iff", ["clifford_algebra"]], ["add", "theorem", "reverse_mem_even_odd_iff", ["clifford_algebra"]], ["add", "theorem", "submodule_comap_mul_reverse", ["clifford_algebra"]], ["add", "theorem", "submodule_comap_pow_reverse", ["clifford_algebra"]], ["add", "theorem", "submodule_map_involute_eq_comap", ["clifford_algebra"]], ["add", "theorem", "submodule_map_mul_reverse", ["clifford_algebra"]], ["add", "theorem", "submodule_map_pow_reverse", ["clifford_algebra"]], ["add", "theorem", "submodule_map_reverse_eq_comap", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/grading.lean", "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": [["add", "theorem", "ι_mem_even_odd_one", ["clifford_algebra"]]]}]}, {"timestamp": 1646469678, "sha": "ac28ddf7", "message": "feat(data/nat/fib): add bit0/bit1 lemmas and fast_fib (#12444)\nThis provides lemmas that let `simp` calculate `fib` from the bit0/bit1 numeral representation. (This isn't intended to be for speed, although it does evaluate things reasonably quick.)\n```lean\nlemma foo : fib 64 = 10610209857723 :=\nbegin\n norm_num [fib_bit0, fib_bit1, fib_bit0_succ, fib_bit1_succ],\nend\n```\nThese are then used to show that `fast_fib` computes `fib`.", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["add", "def", "fast_fib", ["nat"]], ["add", "def", "fast_fib_aux", ["nat"]], ["add", "theorem", "fast_fib_aux_bit_ff", ["nat"]], ["add", "theorem", "fast_fib_aux_bit_tt", ["nat"]], ["add", "theorem", "fast_fib_aux_eq", ["nat"]], ["add", "theorem", "fast_fib_eq", ["nat"]], ["add", "theorem", "fib_add_two_sub_fib_add_one", ["nat"]], ["add", "theorem", "fib_bit0", ["nat"]], ["add", "theorem", "fib_bit0_succ", ["nat"]], ["add", "theorem", "fib_bit1", ["nat"]], ["add", "theorem", "fib_bit1_succ", ["nat"]], ["add", "theorem", "fib_two_mul", ["nat"]], ["add", "theorem", "fib_two_mul_add_one", ["nat"]]]}]}, {"timestamp": 1646460325, "sha": "36a528d1", "message": "feat(set_theory/ordinal_arithmetic): `add_le_of_forall_add_lt` (#12315)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "add_le_of_forall_add_lt", ["ordinal"]]]}]}, {"timestamp": 1646449569, "sha": "b0d94624", "message": "feat(category_theory/preadditive/injective) : more basic properties and morphisms about injective objects (#12450)\nThis pr dualises the rest of `projective.lean`", "changes": [{"oldPath": "src/category_theory/preadditive/injective.lean", "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["add", "def", "d", ["category_theory", "injective"]], ["add", "theorem", "comp_desc", ["category_theory", "injective", "exact"]], ["add", "def", "desc", ["category_theory", "injective", "exact"]], ["add", "def", "syzygies", ["category_theory", "injective"]], ["add", "def", "under", ["category_theory", "injective"]], ["add", "def", "ι", ["category_theory", "injective"]]]}]}, {"timestamp": 1646449568, "sha": "fdf43f1c", "message": "feat(category_theory/closed): generalize some material from cartesian closed categories to closed monoidal categories (#12386)\nNo new content, just moving some trivially generalisable material about cartesian closed categories to closed monoidal categories.\nI've defined `ihom` for internal hom, and made `exp` an abbreviation for it in the cartesian closed case.\nA few other definitions similarly become abbreviations.\nI've left the `⟹` arrow for the internal hom in the cartesian closed case, and added `⟶[C]` for the general internal hom.", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["mod", "theorem", "curry_eq", ["category_theory", "cartesian_closed"]], ["mod", "theorem", "curry_id_eq_coev", ["category_theory", "cartesian_closed"]], ["mod", "theorem", "uncurry_eq", ["category_theory", "cartesian_closed"]], ["mod", "theorem", "uncurry_id_eq_ev", ["category_theory", "cartesian_closed"]], ["del", "def", "coev", ["category_theory"]], ["del", "theorem", "coev_ev", ["category_theory"]], ["del", "theorem", "coev_naturality", ["category_theory"]], ["del", "def", "ev", ["category_theory"]], ["del", "theorem", "ev_coev", ["category_theory"]], ["del", "theorem", "ev_naturality", ["category_theory"]], ["mod", "def", "adjunction", ["category_theory", "exp"]], ["add", "def", "coev", ["category_theory", "exp"]], ["add", "theorem", "coev_ev", ["category_theory", "exp"]], ["add", "def", "ev", ["category_theory", "exp"]], ["add", "theorem", "ev_coev", ["category_theory", "exp"]], ["mod", "def", "exp", ["category_theory"]], ["del", "theorem", "exp_adjunction_counit", ["category_theory"]], ["del", "theorem", "exp_adjunction_unit", ["category_theory"]]]}, {"oldPath": "src/category_theory/closed/functor.lean", "newPath": "src/category_theory/closed/functor.lean", "changes": []}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": [["add", "def", "adjunction", ["category_theory", "ihom"]], ["add", "def", "coev", ["category_theory", "ihom"]], ["add", "theorem", "coev_ev", ["category_theory", "ihom"]], ["add", "theorem", "coev_naturality", ["category_theory", "ihom"]], ["add", "def", "ev", ["category_theory", "ihom"]], ["add", "theorem", "ev_coev", ["category_theory", "ihom"]], ["add", "theorem", "ev_naturality", ["category_theory", "ihom"]], ["add", "theorem", "ihom_adjunction_counit", ["category_theory", "ihom"]], ["add", "theorem", "ihom_adjunction_unit", ["category_theory", "ihom"]], ["add", "def", "ihom", ["category_theory"]], ["add", "theorem", "coev_app_comp_pre_app", ["category_theory", "monoidal_closed"]], ["add", "def", "curry", ["category_theory", "monoidal_closed"]], ["add", "theorem", "curry_eq", ["category_theory", "monoidal_closed"]], ["add", "theorem", "curry_eq_iff", ["category_theory", "monoidal_closed"]], ["add", "theorem", "curry_id_eq_coev", ["category_theory", "monoidal_closed"]], ["add", "theorem", "curry_injective", ["category_theory", "monoidal_closed"]], ["add", "theorem", "curry_natural_left", ["category_theory", "monoidal_closed"]], ["add", "theorem", "curry_natural_right", ["category_theory", "monoidal_closed"]], ["add", "theorem", "curry_uncurry", ["category_theory", "monoidal_closed"]], ["add", "theorem", "eq_curry_iff", ["category_theory", "monoidal_closed"]], ["add", "theorem", "hom_equiv_apply_eq", ["category_theory", "monoidal_closed"]], ["add", "theorem", "hom_equiv_symm_apply_eq", ["category_theory", "monoidal_closed"]], ["add", "theorem", "id_tensor_pre_app_comp_ev", ["category_theory", "monoidal_closed"]], ["add", "def", "internal_hom", ["category_theory", "monoidal_closed"]], ["add", "def", "pre", ["category_theory", "monoidal_closed"]], ["add", "theorem", "pre_id", ["category_theory", "monoidal_closed"]], ["add", "theorem", "pre_map", ["category_theory", "monoidal_closed"]], ["add", "def", "uncurry", ["category_theory", "monoidal_closed"]], ["add", "theorem", "uncurry_curry", ["category_theory", "monoidal_closed"]], ["add", "theorem", "uncurry_eq", ["category_theory", "monoidal_closed"]], ["add", "theorem", "uncurry_id_eq_ev", ["category_theory", "monoidal_closed"]], ["add", "theorem", "uncurry_injective", ["category_theory", "monoidal_closed"]], ["add", "theorem", "uncurry_natural_left", ["category_theory", "monoidal_closed"]], ["add", "theorem", "uncurry_natural_right", ["category_theory", "monoidal_closed"]], ["add", "theorem", "uncurry_pre", ["category_theory", "monoidal_closed"]], ["add", "def", "tensor_closed", ["category_theory"]], ["mod", "def", "unit_closed", ["category_theory"]]]}, {"oldPath": "src/category_theory/closed/types.lean", "newPath": "src/category_theory/closed/types.lean", "changes": []}]}, {"timestamp": 1646445107, "sha": "45d235e8", "message": "feat(analysis/normed_space/star/matrix): `entrywise_sup_norm_bound_of_unitary` (#12255)\nThe entrywise sup norm of a unitary matrix is at most 1.\nI suspect there is a simpler proof!", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/star/matrix.lean", "changes": [["add", "theorem", "entry_norm_bound_of_unitary", []], ["add", "theorem", "entrywise_sup_norm_bound_of_unitary", []]]}]}, {"timestamp": 1646445106, "sha": "17559112", "message": "feat(topology/compacts): The types of clopens and of compact opens (#11966)\nDefine `clopens` and ` compact_opens`, the types of clopens and of compact open sets of a topological space.", "changes": [{"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": [["add", "theorem", "clopen", ["topological_space", "clopens"]], ["add", "theorem", "coe_bot", ["topological_space", "clopens"]], ["add", "theorem", "coe_compl", ["topological_space", "clopens"]], ["add", "theorem", "coe_inf", ["topological_space", "clopens"]], ["add", "theorem", "coe_mk", ["topological_space", "clopens"]], ["add", "theorem", "coe_sdiff", ["topological_space", "clopens"]], ["add", "theorem", "coe_sup", ["topological_space", "clopens"]], ["add", "theorem", "coe_top", ["topological_space", "clopens"]], ["add", "def", "to_opens", ["topological_space", "clopens"]], ["add", "structure", "clopens", ["topological_space"]], ["add", "theorem", "coe_bot", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_compl", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_inf", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_map", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_mk", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_sdiff", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_sup", ["topological_space", "compact_opens"]], ["add", "theorem", "coe_top", ["topological_space", "compact_opens"]], ["add", "theorem", "compact", ["topological_space", "compact_opens"]], ["add", "def", "map", ["topological_space", "compact_opens"]], ["add", "def", "to_clopens", ["topological_space", "compact_opens"]], ["add", "def", "to_opens", ["topological_space", "compact_opens"]], ["add", "theorem", "«open»", ["topological_space", "compact_opens"]], ["add", "structure", "compact_opens", ["topological_space"]]]}]}, {"timestamp": 1646438454, "sha": "8e1da4e6", "message": "feat(ring_theory/adjoin/basic): if a set of elements of a subobject commute, its closure/adjoin is also commutative (#12231)\nWe show that if a set of elements of a subobject commute, its closure/adjoin is also commutative The subobjects include (additive) submonoids, (additive) subgroups, subsemirings, subrings, and subalgebras.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "def", "closure_comm_group_of_comm", ["subgroup"]], ["add", "theorem", "closure_induction₂", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "closure_induction₂", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "def", "closure_comm_monoid_of_comm", ["submonoid"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "def", "adjoin_comm_ring_of_comm", ["algebra"]], ["add", "def", "adjoin_comm_semiring_of_comm", ["algebra"]], ["add", "theorem", "adjoin_induction₂", ["algebra"]]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["add", "def", "closure_comm_ring_of_comm", ["subring"]], ["add", "theorem", "closure_induction₂", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "def", "closure_comm_semiring_of_comm", ["subsemiring"]], ["add", "theorem", "closure_induction₂", ["subsemiring"]]]}]}, {"timestamp": 1646430261, "sha": "3ac971be", "message": "feat(order/category/Frame): The category of frames (#12363)\nDefine `Frame`, the category of frames with frame homomorphisms.", "changes": [{"oldPath": null, "newPath": "src/order/category/Frame.lean", "changes": [["add", "def", "hom", ["Frame"]], ["add", "def", "mk", ["Frame", "iso"]], ["add", "def", "of", ["Frame"]], ["add", "def", "Frame", []]]}]}, {"timestamp": 1646430260, "sha": "ee4be2db", "message": "feat(ring_theory/simple_module): Simple modules as simple objects in the Module category (#11927)\nA simple module is a simple object in the Module category. \nFrom there it should be easy to write an alternative proof of Schur's lemma for modules using category theory (using the work already done in category_theory/preadditive/schur.lean).\nThe other direction (a simple object in the Module category is a simple module) hasn't been proved yet.", "changes": [{"oldPath": "src/algebra/category/Module/epi_mono.lean", "newPath": "src/algebra/category/Module/epi_mono.lean", "changes": [["add", "def", "unique_of_epi_zero", ["Module"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/simple.lean", "changes": []}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "def", "unique_of_surjective_one", []]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "def", "unique_of_surjective_const", ["function", "surjective"]]]}]}, {"timestamp": 1646430259, "sha": "a07cf6bd", "message": "feat(ring_theory/polynomial/homogeneous) : add lemma `homogeneous_component_homogeneous_polynomial` (#10113)\nadd the following lemma\n```lean\nlemma homogeneous_component_homogeneous_polynomial (m n : ℕ)\n (p : mv_polynomial σ R) (h : p ∈ homogeneous_submodule σ R n) :\n homogeneous_component m p = if m = n then p else 0\n```", "changes": [{"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": [["add", "theorem", "homogeneous_component_homogeneous_polynomial", ["mv_polynomial"]]]}]}, {"timestamp": 1646422996, "sha": "34d8ff1d", "message": "feat(topology/algebra/weak_dual): generalize to weak topologies for arbitrary dualities (#12284)", "changes": [{"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": [["add", "theorem", "bilin_embedding", []], ["add", "theorem", "coe_fn_continuous", []], ["add", "theorem", "continuous_of_continuous_eval", []], ["add", "theorem", "dual_pairing_apply", []], ["add", "theorem", "eval_continuous", []], ["add", "theorem", "tendsto_iff_forall_eval_tendsto", []], ["add", "def", "top_dual_pairing", []], ["add", "def", "weak_bilin", []], ["del", "theorem", "coe_fn_continuous", ["weak_dual"]], ["del", "theorem", "coe_fn_embedding", ["weak_dual"]], ["del", "theorem", "continuous_of_continuous_eval", ["weak_dual"]], ["del", "theorem", "eval_continuous", ["weak_dual"]], ["del", "theorem", "tendsto_iff_forall_eval_tendsto", ["weak_dual"]], ["mod", "def", "weak_dual", []], ["add", "def", "weak_space", []]]}]}, {"timestamp": 1646422995, "sha": "89654c0f", "message": "feat(data/equiv/{mul_add,ring}): Coercions to types of morphisms from their `_class` (#12243)\nAdd missing coercions to `α ≃+ β`, `α ≃* β`, `α ≃+* β` from `add_equiv_class`, `mul_equiv_class`, `ring_equiv_class`.", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}]}, {"timestamp": 1646415252, "sha": "30d63cdb", "message": "feat(field_theory/cardinality): a cardinal can have a field structure iff it is a prime power (#12442)", "changes": [{"oldPath": "src/field_theory/cardinality.lean", "newPath": "src/field_theory/cardinality.lean", "changes": [["add", "theorem", "nonempty_iff", ["field"]]]}]}, {"timestamp": 1646415251, "sha": "858002ba", "message": "feat(algebra/char_zero): cast(_pow)_eq_one (#12429)", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "cast_eq_one", ["nat"]], ["add", "theorem", "cast_ne_one", ["nat"]], ["add", "theorem", "cast_pow_eq_one", ["nat"]]]}]}, {"timestamp": 1646415250, "sha": "a54dd9e3", "message": "feat(order/category/BoundedDistribLattice): The category of bounded distributive lattices (#12347)\nDefine `BoundedDistribLattice`, the category of bounded distributive lattices with bounded lattice homomorphisms.", "changes": [{"oldPath": null, "newPath": "src/order/category/BoundedDistribLattice.lean", "changes": [["add", "theorem", "coe_of", ["BoundedDistribLattice"]], ["add", "theorem", "coe_to_BoundedLattice", ["BoundedDistribLattice"]], ["add", "def", "dual", ["BoundedDistribLattice"]], ["add", "def", "dual_equiv", ["BoundedDistribLattice"]], ["add", "theorem", "forget_BoundedLattice_Lattice_eq_forget_DistribLattice_Lattice", ["BoundedDistribLattice"]], ["add", "def", "mk", ["BoundedDistribLattice", "iso"]], ["add", "def", "of", ["BoundedDistribLattice"]], ["add", "def", "to_BoundedLattice", ["BoundedDistribLattice"]], ["add", "structure", "BoundedDistribLattice", []], ["add", "theorem", "BoundedDistribLattice_dual_comp_forget_to_DistribLattice", []]]}, {"oldPath": "src/order/category/DistribLattice.lean", "newPath": "src/order/category/DistribLattice.lean", "changes": []}]}, {"timestamp": 1646415249, "sha": "fab59cb8", "message": "feat(set_theory/cofinality): `cof_eq_Inf_lsub` (#12314)\nThis much nicer characterization of cofinality will allow us to prove various theorems relating it to `lsub` and `blsub`.", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "mk_ordinal_out", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "cof_eq_Inf_lsub", ["ordinal"]], ["add", "theorem", "cof_lsub_def_nonempty", ["ordinal"]]]}]}, {"timestamp": 1646415247, "sha": "efd9a16a", "message": "refactor(group_theory/commutator): Define commutators of subgroups in terms of commutators of elements (#12309)\nThis PR defines commutators of elements of groups.\n(This is one of the several orthogonal changes from https://github.com/leanprover-community/mathlib/pull/12134)", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "commutator_element_def", []]]}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["mod", "theorem", "commutator_eq_closure", []]]}, {"oldPath": "src/group_theory/commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": [["add", "theorem", "commutator_element_inv", []], ["add", "theorem", "conjugate_commutator_element", []], ["add", "theorem", "map_commutator_element", []]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "test/group.lean", "newPath": "test/group.lean", "changes": [["del", "def", "commutator3", []], ["del", "def", "commutator", []]]}]}, {"timestamp": 1646415246, "sha": "35b835a2", "message": "feat(data/set/sigma): Indexed sum of sets (#12305)\nDefine `set.sigma`, the sum of a family of sets indexed by a set.", "changes": [{"oldPath": "src/data/finset/sigma.lean", "newPath": "src/data/finset/sigma.lean", "changes": [["add", "theorem", "coe_sigma", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/set/sigma.lean", "changes": [["add", "theorem", "empty_sigma", ["set"]], ["add", "theorem", "exists_sigma_iff", ["set"]], ["add", "theorem", "forall_sigma_iff", ["set"]], ["add", "theorem", "fst_image_sigma", ["set"]], ["add", "theorem", "fst_image_sigma_subset", ["set"]], ["add", "theorem", "image_sigma_mk_subset_sigma_left", ["set"]], ["add", "theorem", "image_sigma_mk_subset_sigma_right", ["set"]], ["add", "theorem", "insert_sigma", ["set"]], ["add", "theorem", "mem_sigma_iff", ["set"]], ["add", "theorem", "mk_mem_sigma", ["set"]], ["add", "theorem", "mk_preimage_sigma", ["set"]], ["add", "theorem", "mk_preimage_sigma_eq_empty", ["set"]], ["add", "theorem", "mk_preimage_sigma_eq_if", ["set"]], ["add", "theorem", "mk_preimage_sigma_fn_eq_if", ["set"]], ["add", "theorem", "mk_sigma_iff", ["set"]], ["add", "theorem", "sigma_fst", ["set", "nonempty"]], ["add", "theorem", "sigma_snd", ["set", "nonempty"]], ["add", "theorem", "preimage_sigma_map_sigma", ["set"]], ["add", "theorem", "sigma_diff_sigma", ["set"]], ["add", "theorem", "sigma_empty", ["set"]], ["add", "theorem", "sigma_eq_empty_iff", ["set"]], ["add", "theorem", "sigma_insert", ["set"]], ["add", "theorem", "sigma_inter_sigma", ["set"]], ["add", "theorem", "sigma_mono", ["set"]], ["add", "theorem", "sigma_nonempty_iff", ["set"]], ["add", "theorem", "sigma_preimage_eq", ["set"]], ["add", "theorem", "sigma_preimage_left", ["set"]], ["add", "theorem", "sigma_preimage_right", ["set"]], ["add", "theorem", "sigma_singleton", ["set"]], ["add", "theorem", "sigma_subset_iff", ["set"]], ["add", "theorem", "sigma_subset_preimage_fst", ["set"]], ["add", "theorem", "sigma_union", ["set"]], ["add", "theorem", "sigma_univ", ["set"]], ["add", "theorem", "sigma_univ_range_eq", ["set"]], ["add", "theorem", "singleton_sigma", ["set"]], ["add", "theorem", "singleton_sigma_singleton", ["set"]], ["add", "theorem", "union_sigma", ["set"]], ["add", "theorem", "univ_sigma_univ", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "imp_iff_not_or", []], ["add", "theorem", "imp_iff_or_not", []], ["mod", "theorem", "not_or_of_imp", []], ["add", "theorem", "or_not_of_imp", []]]}]}, {"timestamp": 1646415245, "sha": "ed633868", "message": "feat(category_theory/preadditive/injective) : definition of injective objects in a category (#11921)\nThis pr contains definition of injective objects and some useful instances.", "changes": [{"oldPath": null, "newPath": "src/category_theory/preadditive/injective.lean", "changes": [["add", "theorem", "comp_factor_thru", ["category_theory", "injective"]], ["add", "def", "factor_thru", ["category_theory", "injective"]], ["add", "theorem", "iso_iff", ["category_theory", "injective"]], ["add", "theorem", "of_iso", ["category_theory", "injective"]], ["add", "structure", "injective_presentation", ["category_theory"]]]}]}, {"timestamp": 1646415244, "sha": "a8629a59", "message": "refactor(tactic/interactive): use 1-indexing in work_on_goal (#11813)\nBackporting the change in https://github.com/leanprover-community/mathlib4/pull/178 to make `work_on_goal` 1-indexed. See also: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/.60work_on_goal.60.20vs.20.60swap.60", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/combinatorics/hales_jewett.lean", "newPath": "src/combinatorics/hales_jewett.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/swap_var.lean", "newPath": "test/swap_var.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": []}]}, {"timestamp": 1646407478, "sha": "0ec8e6a0", "message": "feat(algebra/algebra/operations): more lemmas about `mul_opposite` (#12441)\nNaturally the lemmas I left out of the previous PR, notably `map_unop_mul` and `map_unop_pow`, are the ones I actually needed.\nThis also improves the `simps` lemmas on `submodule.equiv_opposite`, which were previously garbage as `simps` didn't unfold `ring_equiv.symm` properly. At any rate, the only reason it was defined that way was because the lemmas in this PR were missing.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "comap_op_mul", ["submodule"]], ["add", "theorem", "comap_op_pow", ["submodule"]], ["add", "theorem", "map_unop_mul", ["submodule"]], ["add", "theorem", "map_unop_pow", ["submodule"]]]}]}, {"timestamp": 1646407477, "sha": "31cb3c16", "message": "chore(algebra/group_with_zero/basic): generalize `units.exists_iff_ne_zero` to arbitrary propositions (#12439)\nThis adds a more powerful version of this lemma that allows an existential to be replaced with one over the underlying group with zero.\nThe naming matches `subtype.exists` and `subtype.exists'`, while the trailing zero matches `units.mk0`.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "exists0'", ["units"]], ["add", "theorem", "exists0", ["units"]]]}]}, {"timestamp": 1646407476, "sha": "6e94c53a", "message": "feat(complex/basic): nnnorm coercions (#12428)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "nnnorm_eq_one_of_pow_eq_one", ["complex"]], ["add", "theorem", "nnnorm_int", ["complex"]], ["add", "theorem", "nnnorm_nat", ["complex"]], ["add", "theorem", "nnnorm_real", ["complex"]], ["add", "theorem", "norm_eq_one_of_pow_eq_one", ["complex"]]]}, {"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": [["add", "theorem", "nnnorm_eq_one", ["is_primitive_root"]]]}]}, {"timestamp": 1646407474, "sha": "dc95d02e", "message": "feat(order/filter/archimedean): add lemmas about convergence to ±∞ for archimedean rings / groups. (#12427)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": [["add", "theorem", "at_bot_mul_const'", ["filter", "tendsto"]], ["add", "theorem", "at_bot_mul_neg_const'", ["filter", "tendsto"]], ["add", "theorem", "at_bot_zsmul_const", ["filter", "tendsto"]], ["add", "theorem", "at_bot_zsmul_neg_const", ["filter", "tendsto"]], ["mod", "theorem", "at_top_mul_const'", ["filter", "tendsto"]], ["add", "theorem", "at_top_mul_neg_const'", ["filter", "tendsto"]], ["add", "theorem", "at_top_nsmul_const", ["filter", "tendsto"]], ["add", "theorem", "at_top_nsmul_neg_const", ["filter", "tendsto"]], ["add", "theorem", "at_top_zsmul_const", ["filter", "tendsto"]], ["add", "theorem", "at_top_zsmul_neg_const", ["filter", "tendsto"]], ["mod", "theorem", "const_mul_at_top'", ["filter", "tendsto"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "tendsto_at_bot_iff_tends_to_neg_at_top", ["filter"]], ["add", "theorem", "tendsto_at_top_iff_tends_to_neg_at_bot", ["filter"]]]}]}, {"timestamp": 1646407473, "sha": "e41303d6", "message": "feat(category_theory/limits/shapes): preserving (co)kernels (#12419)\nThis is work towards showing that homology is a lax monoidal functor.", "changes": [{"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": [["add", "def", "equiv_of_nat_iso_of_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "equiv_of_nat_iso_of_iso", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/kernels.lean", "changes": [["add", "def", "is_colimit_cofork_map_of_is_colimit'", ["category_theory", "limits"]], ["add", "def", "is_colimit_map_cocone_cofork_equiv'", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_has_cokernel_of_preserves_colimit", ["category_theory", "limits"]], ["add", "def", "is_limit_fork_map_of_is_limit'", ["category_theory", "limits"]], ["add", "def", "is_limit_map_cone_fork_equiv'", ["category_theory", "limits"]], ["add", "def", "is_limit_of_has_kernel_of_preserves_limit", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_cokernel"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_cokernel"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_cokernel"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_kernel"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_kernel"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_kernel"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "ext", ["category_theory", "limits", "parallel_pair"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "cokernel_comparison", ["category_theory", "limits"]], ["add", "theorem", "cokernel_comparison_map_desc", ["category_theory", "limits"]], ["add", "def", "cokernel_is_cokernel", ["category_theory", "limits"]], ["add", "def", "kernel_comparison", ["category_theory", "limits"]], ["add", "theorem", "kernel_comparison_comp_π", ["category_theory", "limits"]], ["add", "def", "kernel_is_kernel", ["category_theory", "limits"]], ["add", "theorem", "map_lift_kernel_comparison", ["category_theory", "limits"]], ["add", "theorem", "ι_comp_cokernel_comparison", ["category_theory", "limits"]]]}]}, {"timestamp": 1646402636, "sha": "2d6c52af", "message": "feat(topology/metric_space/polish): definition and basic properties of polish spaces (#12437)\nA topological space is Polish if its topology is second-countable and there exists a compatible\ncomplete metric. This is the class of spaces that is well-behaved with respect to measure theory.\nIn this PR, we establish basic (and not so basic) properties of Polish spaces.", "changes": [{"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "to_isometry", ["embedding"]], ["add", "theorem", "to_isometry", ["uniform_embedding"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/polish.lean", "changes": [["add", "theorem", "polish_space", ["closed_embedding"]], ["add", "theorem", "complete_polish_space_metric", []], ["add", "theorem", "polish_space_induced", ["equiv"]], ["add", "theorem", "is_clopenable", ["is_closed"]], ["add", "theorem", "polish_space", ["is_closed"]], ["add", "theorem", "is_clopenable", ["is_open"]], ["add", "theorem", "polish_space", ["is_open"]], ["add", "def", "aux_copy", ["polish_space"]], ["add", "def", "complete_copy", ["polish_space"]], ["add", "def", "complete_copy_id_homeo", ["polish_space"]], ["add", "def", "complete_copy_metric_space", ["polish_space"]], ["add", "theorem", "complete_space_complete_copy", ["polish_space"]], ["add", "theorem", "dist_complete_copy_eq", ["polish_space"]], ["add", "theorem", "dist_le_dist_complete_copy", ["polish_space"]], ["add", "theorem", "exists_nat_nat_continuous_surjective", ["polish_space"]], ["add", "theorem", "exists_polish_space_forall_le", ["polish_space"]], ["add", "def", "has_dist_complete_copy", ["polish_space"]], ["add", "theorem", "Union", ["polish_space", "is_clopenable"]], ["add", "theorem", "compl", ["polish_space", "is_clopenable"]], ["add", "def", "is_clopenable", ["polish_space"]], ["add", "def", "polish_space_metric", []], ["add", "def", "upgrade_polish_space", []]]}]}, {"timestamp": 1646402634, "sha": "0a3d1440", "message": "chore(topology/algebra/uniform_mul_action): add `has_uniform_continuous_const_smul.op` (#12434)\nThis matches `has_continuous_const_smul.op` and other similar lemmas.\nWith this in place, we can state `is_central_scalar` on `completion`s.", "changes": [{"oldPath": "src/topology/algebra/uniform_mul_action.lean", "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": []}]}, {"timestamp": 1646402633, "sha": "cac9242e", "message": "chore(analysis/complex/basic): golf `norm_rat/int/int_of_nonneg` (#12433)\nWhile looking at PR #12428, I found some easy golfing of some lemmas (featuring my first-ever use of `single_pass`! :smile: ).", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}]}, {"timestamp": 1646402631, "sha": "173f161b", "message": "feat(set_theory/ordinal_arithmetic): `bsup` / `blsub` of function composition (#12381)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "blsub_comp", ["ordinal"]], ["add", "theorem", "bsup_comp", ["ordinal"]]]}]}, {"timestamp": 1646397546, "sha": "a7217000", "message": "chore(algebra/algebra/operations): add missing `@[elab_as_eliminator]` on recursors (#12440)\n`refine submodule.pow_induction_on' _ _ _ _ h` struggles without this attribute", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra/grading.lean", "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra/grading.lean", "newPath": "src/linear_algebra/tensor_algebra/grading.lean", "changes": []}]}, {"timestamp": 1646397544, "sha": "4a416bc2", "message": "feat(set_theory/ordinal_arithmetic): `is_normal.blsub_eq` (#12379)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "blsub_eq", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1646397543, "sha": "b1444600", "message": "feat(number_theory/cyclotomic/primitive_roots): generalize norm_eq_one (#12359)\nWe generalize `norm_eq_one`, that now computes the norm of any primitive `n`-th root of unity if `n ≠ 2`. We modify the assumption, that is still verified in the main case of interest `K = ℚ`.\nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["mod", "theorem", "norm_zeta_eq_one", ["is_cyclotomic_extension"]], ["add", "theorem", "norm_eq_neg_one_pow", ["is_primitive_root"]], ["mod", "theorem", "norm_eq_one", ["is_primitive_root"]], ["add", "theorem", "norm_eq_one_of_linearly_ordered", ["is_primitive_root"]], ["add", "theorem", "norm_of_cyclotomic_irreducible", ["is_primitive_root"]], ["del", "theorem", "prime_ne_two_pow_sub_one_norm", ["is_primitive_root"]], ["mod", "theorem", "sub_one_norm_pow_two", ["is_primitive_root"]], ["add", "theorem", "sub_one_norm_prime_ne_two", ["is_primitive_root"]]]}]}, {"timestamp": 1646397542, "sha": "53dc7ca3", "message": "feat(linear_algebra/basic): some basic lemmas about dfinsupp.sum (#12214)\nTwo basic lemmas about dfinsupp.sum that could be useful (I needed them for another project)", "changes": [{"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["add", "theorem", "prod_eq_one", ["dfinsupp"]], ["add", "theorem", "smul_sum", ["dfinsupp"]]]}]}, {"timestamp": 1646386004, "sha": "052d027f", "message": "refactor(algebra/category/Group/basic): Avoid data shuffle in `mul_equiv.to_Group_iso` (#12407)\nChange the definition of `mul_equiv.to_Group_iso` from `{X Y : Type*} [group X] [group Y] (e : X ≃* Y) : Group.of X ≅ Group.of Y` to `{X Y : Group} (e : X ≃* Y) : X ≅ Y`. Not making `X` and `Y` into `Group`s on the fly avoids rebundling them when they already are `Group`s, which breaks definitional equality.", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["mod", "def", "to_CommGroup_iso", ["mul_equiv"]], ["mod", "def", "to_Group_iso", ["mul_equiv"]], ["mod", "def", "mul_equiv_iso_CommGroup_iso", []], ["mod", "def", "mul_equiv_iso_Group_iso", []]]}]}, {"timestamp": 1646386003, "sha": "0666dd5c", "message": "feat(order/bounded): The universal set is unbounded (#12390)", "changes": [{"oldPath": "src/order/bounded.lean", "newPath": "src/order/bounded.lean", "changes": [["add", "theorem", "unbounded_ge_univ", ["set"]], ["add", "theorem", "unbounded_gt_univ", ["set"]], ["add", "theorem", "unbounded_le_univ", ["set"]], ["add", "theorem", "unbounded_lt_univ", ["set"]]]}]}, {"timestamp": 1646386002, "sha": "09c66fa1", "message": "feat(counterexamples/seminorm_lattice_not_distrib): The lattice of seminorms is not distributive. (#12099)\nA counterexample showing the lattice of seminorms is not distributive", "changes": [{"oldPath": null, "newPath": "counterexamples/seminorm_lattice_not_distrib.lean", "changes": [["add", "theorem", "eq_one", ["seminorm_not_distrib"]], ["add", "theorem", "not_distrib", ["seminorm_not_distrib"]]]}]}, {"timestamp": 1646384170, "sha": "82a142d1", "message": "feat(algebra/category): Module R is monoidal closed for comm_ring R (#12387)", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["add", "def", "monoidal_closed_hom_equiv", ["Module"]]]}]}, {"timestamp": 1646377573, "sha": "e96cf5e6", "message": "feat(data/nat/gcd): add coprime_prod_left and coprime_prod_right (#12268)", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "coprime_prod_left", ["nat"]], ["add", "theorem", "coprime_prod_right", ["nat"]]]}]}, {"timestamp": 1646351778, "sha": "40524f19", "message": "feat(algebra/star/self_adjoint): define normal elements of a star monoid (#11991)\nIn this PR, we define the normal elements of a star monoid, i.e. those elements `x`\nthat commute with `star x`. This is defined as the prop type class `is_star_normal`.\nThis was formalized as part of the semilinear maps paper.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "is_star_normal_of_mem", ["self_adjoint"]], ["add", "theorem", "is_star_normal_of_mem", ["skew_adjoint"]], ["add", "theorem", "star_comm_self'", []]]}]}, {"timestamp": 1646349344, "sha": "544f45bc", "message": "refactor(linear_algebra/bilinear_form): split off matrix part (#12435)\nThe bilinear form file is way too large. The part that concerns matrices is not depended on by the general theory, and belongs in its own file.", "changes": [{"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["del", "theorem", "equiv_fun_symm_std_basis", ["basis"]], ["del", "theorem", "mul_to_matrix'", ["bilin_form"]], ["del", "theorem", "mul_to_matrix'_mul", ["bilin_form"]], ["del", "theorem", "mul_to_matrix", ["bilin_form"]], ["del", "theorem", "mul_to_matrix_mul", ["bilin_form"]], ["del", "theorem", "to_matrix'", ["bilin_form", "nondegenerate"]], ["del", "theorem", "to_matrix", ["bilin_form", "nondegenerate"]], ["del", "theorem", "nondegenerate_iff_det_ne_zero", ["bilin_form"]], ["del", "theorem", "nondegenerate_of_det_ne_zero", ["bilin_form"]], ["del", "theorem", "nondegenerate_to_bilin'_iff_det_ne_zero", ["bilin_form"]], ["del", "theorem", "nondegenerate_to_bilin'_of_det_ne_zero'", ["bilin_form"]], ["del", "theorem", "nondegenerate_to_matrix'_iff", ["bilin_form"]], ["del", "theorem", "nondegenerate_to_matrix_iff", ["bilin_form"]], ["del", "def", "to_matrix'", ["bilin_form"]], ["del", "theorem", "to_matrix'_apply", ["bilin_form"]], ["del", "theorem", "to_matrix'_comp", ["bilin_form"]], ["del", "theorem", "to_matrix'_comp_left", ["bilin_form"]], ["del", "theorem", "to_matrix'_comp_right", ["bilin_form"]], ["del", "theorem", "to_matrix'_mul", ["bilin_form"]], ["del", "theorem", "to_matrix'_symm", ["bilin_form"]], ["del", "theorem", "to_matrix'_to_bilin'", ["bilin_form"]], ["del", "theorem", "to_matrix_apply", ["bilin_form"]], ["del", "def", "to_matrix_aux", ["bilin_form"]], ["del", "theorem", "to_matrix_aux_std_basis", ["bilin_form"]], ["del", "theorem", "to_matrix_basis_fun", ["bilin_form"]], ["del", "theorem", "to_matrix_comp", ["bilin_form"]], ["del", "theorem", "to_matrix_comp_left", ["bilin_form"]], ["del", "theorem", "to_matrix_comp_right", ["bilin_form"]], ["del", "theorem", "to_matrix_mul", ["bilin_form"]], ["del", "theorem", "to_matrix_mul_basis_to_matrix", ["bilin_form"]], ["del", "theorem", "to_matrix_symm", ["bilin_form"]], ["del", "theorem", "to_matrix_to_bilin", ["bilin_form"]], ["del", "theorem", "to_matrix_aux_eq", ["bilinear_form"]], ["del", "theorem", "is_adjoint_pair_to_bilin'", []], ["del", "theorem", "is_adjoint_pair_to_bilin", []], ["del", "def", "is_adjoint_pair", ["matrix"]], ["del", "theorem", "is_adjoint_pair_equiv", ["matrix"]], ["del", "def", "is_self_adjoint", ["matrix"]], ["del", "def", "is_skew_adjoint", ["matrix"]], ["del", "theorem", "to_bilin'", ["matrix", "nondegenerate"]], ["del", "theorem", "to_bilin", ["matrix", "nondegenerate"]], ["del", "theorem", "nondegenerate_to_bilin'_iff", ["matrix"]], ["del", "theorem", "nondegenerate_to_bilin'_iff_nondegenerate_to_bilin", ["matrix"]], ["del", "theorem", "nondegenerate_to_bilin_iff", ["matrix"]], ["del", "def", "to_bilin'", ["matrix"]], ["del", "theorem", "to_bilin'_apply'", ["matrix"]], ["del", "theorem", "to_bilin'_apply", ["matrix"]], ["del", "def", "to_bilin'_aux", ["matrix"]], ["del", "theorem", "to_bilin'_aux_eq", ["matrix"]], ["del", "theorem", "to_bilin'_aux_std_basis", ["matrix"]], ["del", "theorem", "to_bilin'_comp", ["matrix"]], ["del", "theorem", "to_bilin'_std_basis", ["matrix"]], ["del", "theorem", "to_bilin'_symm", ["matrix"]], ["del", "theorem", "to_bilin'_to_matrix'", ["matrix"]], ["del", "theorem", "to_bilin_apply", ["matrix"]], ["del", "theorem", "to_bilin_basis_fun", ["matrix"]], ["del", "theorem", "to_bilin_comp", ["matrix"]], ["del", "theorem", "to_bilin_symm", ["matrix"]], ["del", "theorem", "to_bilin_to_matrix", ["matrix"]], ["del", "theorem", "mem_pair_self_adjoint_matrices_submodule", []], ["del", "theorem", "mem_self_adjoint_matrices_submodule", []], ["del", "theorem", "mem_skew_adjoint_matrices_submodule", []], ["del", "def", "pair_self_adjoint_matrices_submodule", []], ["del", "def", "self_adjoint_matrices_submodule", []], ["del", "def", "skew_adjoint_matrices_submodule", []], ["del", "theorem", "to_bilin'_aux_to_matrix_aux", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/bilinear_form.lean", "changes": [["add", "theorem", "equiv_fun_symm_std_basis", ["basis"]], ["add", "theorem", "mul_to_matrix'", ["bilin_form"]], ["add", "theorem", "mul_to_matrix'_mul", ["bilin_form"]], ["add", "theorem", "mul_to_matrix", ["bilin_form"]], ["add", "theorem", "mul_to_matrix_mul", ["bilin_form"]], ["add", "theorem", "to_matrix'", ["bilin_form", "nondegenerate"]], ["add", "theorem", "to_matrix", ["bilin_form", "nondegenerate"]], ["add", "theorem", "nondegenerate_iff_det_ne_zero", ["bilin_form"]], ["add", "theorem", "nondegenerate_of_det_ne_zero", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_bilin'_iff_det_ne_zero", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_bilin'_of_det_ne_zero'", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_matrix'_iff", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_matrix_iff", ["bilin_form"]], ["add", "def", "to_matrix'", ["bilin_form"]], ["add", "theorem", "to_matrix'_apply", ["bilin_form"]], ["add", "theorem", "to_matrix'_comp", ["bilin_form"]], ["add", "theorem", "to_matrix'_comp_left", ["bilin_form"]], ["add", "theorem", "to_matrix'_comp_right", ["bilin_form"]], ["add", "theorem", "to_matrix'_mul", ["bilin_form"]], ["add", "theorem", "to_matrix'_symm", ["bilin_form"]], ["add", "theorem", "to_matrix'_to_bilin'", ["bilin_form"]], ["add", "theorem", "to_matrix_apply", ["bilin_form"]], ["add", "def", "to_matrix_aux", ["bilin_form"]], ["add", "theorem", "to_matrix_aux_std_basis", ["bilin_form"]], ["add", "theorem", "to_matrix_basis_fun", ["bilin_form"]], ["add", "theorem", "to_matrix_comp", ["bilin_form"]], ["add", "theorem", "to_matrix_comp_left", ["bilin_form"]], ["add", "theorem", "to_matrix_comp_right", ["bilin_form"]], ["add", "theorem", "to_matrix_mul", ["bilin_form"]], ["add", "theorem", "to_matrix_mul_basis_to_matrix", ["bilin_form"]], ["add", "theorem", "to_matrix_symm", ["bilin_form"]], ["add", "theorem", "to_matrix_to_bilin", ["bilin_form"]], ["add", "theorem", "to_matrix_aux_eq", ["bilinear_form"]], ["add", "theorem", "is_adjoint_pair_to_bilin'", []], ["add", "theorem", "is_adjoint_pair_to_bilin", []], ["add", "def", "is_adjoint_pair", ["matrix"]], ["add", "theorem", "is_adjoint_pair_equiv", ["matrix"]], ["add", "def", "is_self_adjoint", ["matrix"]], ["add", "def", "is_skew_adjoint", ["matrix"]], ["add", "theorem", "to_bilin'", ["matrix", "nondegenerate"]], ["add", "theorem", "to_bilin", ["matrix", "nondegenerate"]], ["add", "theorem", "nondegenerate_to_bilin'_iff", ["matrix"]], ["add", "theorem", "nondegenerate_to_bilin'_iff_nondegenerate_to_bilin", ["matrix"]], ["add", "theorem", "nondegenerate_to_bilin_iff", ["matrix"]], ["add", "def", "to_bilin'", ["matrix"]], ["add", "theorem", "to_bilin'_apply'", ["matrix"]], ["add", "theorem", "to_bilin'_apply", ["matrix"]], ["add", "def", "to_bilin'_aux", ["matrix"]], ["add", "theorem", "to_bilin'_aux_eq", ["matrix"]], ["add", "theorem", "to_bilin'_aux_std_basis", ["matrix"]], ["add", "theorem", "to_bilin'_comp", ["matrix"]], ["add", "theorem", "to_bilin'_std_basis", ["matrix"]], ["add", "theorem", "to_bilin'_symm", ["matrix"]], ["add", "theorem", "to_bilin'_to_matrix'", ["matrix"]], ["add", "theorem", "to_bilin_apply", ["matrix"]], ["add", "theorem", "to_bilin_basis_fun", ["matrix"]], ["add", "theorem", "to_bilin_comp", ["matrix"]], ["add", "theorem", "to_bilin_symm", ["matrix"]], ["add", "theorem", "to_bilin_to_matrix", ["matrix"]], ["add", "theorem", "mem_pair_self_adjoint_matrices_submodule", []], ["add", "theorem", "mem_self_adjoint_matrices_submodule", []], ["add", "theorem", "mem_skew_adjoint_matrices_submodule", []], ["add", "def", "pair_self_adjoint_matrices_submodule", []], ["add", "def", "self_adjoint_matrices_submodule", []], ["add", "def", "skew_adjoint_matrices_submodule", []], ["add", "theorem", "to_bilin'_aux_to_matrix_aux", []]]}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1646343121, "sha": "5371338f", "message": "feat(group_theory/torsion): all torsion monoids are groups (#12432)", "changes": [{"oldPath": "src/group_theory/torsion.lean", "newPath": "src/group_theory/torsion.lean", "changes": []}]}, {"timestamp": 1646343120, "sha": "1af53ff5", "message": "feat(polynomial/cyclotomic): some divisibility results (#12426)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "not_mem_sdiff_of_not_mem_left", ["finset"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "map_dvd", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "X_pow_sub_one_mul_cyclotomic_dvd_X_pow_sub_one_of_dvd", ["polynomial"]], ["add", "theorem", "X_pow_sub_one_mul_prod_cyclotomic_eq_X_pow_sub_one_of_dvd", ["polynomial"]], ["add", "theorem", "cyclotomic_dvd_geom_sum_of_dvd", ["polynomial"]]]}]}, {"timestamp": 1646343119, "sha": "54c286db", "message": "feat(data/{nat,int,rat}/cast, algebra/star/basic): lemmas about `star` on casts (#12418)\nThis also includes lemmas about `mul_opposite` on casts which are used to prove the star lemmas. The new lemmas are:\n* `star_nat_cast`\n* `star_int_cast`\n* `star_rat_cast`\n* `op_nat_cast`\n* `op_int_cast`\n* `op_rat_cast`\n* `unop_nat_cast`\n* `unop_int_cast`\n* `unop_rat_cast`", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "star_int_cast", []], ["add", "theorem", "star_nat_cast", []], ["add", "theorem", "star_rat_cast", []]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "op_int_cast", ["mul_opposite"]], ["add", "theorem", "unop_int_cast", ["mul_opposite"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "op_nat_cast", ["mul_opposite"]], ["add", "theorem", "unop_nat_cast", ["mul_opposite"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "op_rat_cast", ["mul_opposite"]], ["add", "theorem", "unop_rat_cast", ["mul_opposite"]]]}]}, {"timestamp": 1646343117, "sha": "9deac65c", "message": "feat(ring_theory/ideal): more lemmas on ideals multiplied with submodules (#12401)\nThese are, like #12178, split off from #12287", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "exists_sum_of_mem_ideal_smul_span", ["submodule"]], ["add", "theorem", "mem_smul_span", ["submodule"]], ["add", "theorem", "smul_comap_le_comap_smul", ["submodule"]]]}]}, {"timestamp": 1646343116, "sha": "2fc2d1b6", "message": "feat(linear_algebra/clifford_algebra): lemmas about mapping submodules (#12399)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "range_neg", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": [["add", "theorem", "ι_range_map_lift", ["clifford_algebra"]], ["add", "theorem", "ι_range_map_map", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": [["add", "def", "involute_equiv", ["clifford_algebra"]], ["add", "def", "reverse_equiv", ["clifford_algebra"]], ["add", "theorem", "ι_range_comap_involute", ["clifford_algebra"]], ["add", "theorem", "ι_range_comap_reverse", ["clifford_algebra"]], ["add", "theorem", "ι_range_map_involute", ["clifford_algebra"]], ["add", "theorem", "ι_range_map_reverse", ["clifford_algebra"]]]}]}, {"timestamp": 1646343115, "sha": "e84c1a96", "message": "chore(linear_algebra/general_linear_group): replace coe_fn with coe in lemma statements (#12397)\nThis way, all the lemmas are expressed in terms of `↑` and not `⇑`.\nThis matches the approach used in `special_linear_group`.", "changes": [{"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": [["add", "theorem", "coe_neg", ["matrix", "GL_pos"]], ["add", "theorem", "coe_neg_apply", ["matrix", "GL_pos"]], ["del", "theorem", "GL_pos_coe_neg", ["matrix"]], ["del", "theorem", "GL_pos_neg_elt", ["matrix"]], ["mod", "theorem", "coe_fn_eq_coe", ["matrix", "general_linear_group"]]]}]}, {"timestamp": 1646343114, "sha": "4503732a", "message": "feat(field_theory/cardinality): cardinality of fields & localizations (#12285)", "changes": [{"oldPath": null, "newPath": "src/field_theory/cardinality.lean", "changes": [["add", "theorem", "is_prime_pow_card_of_field", ["fintype"]], ["add", "theorem", "nonempty_field_iff", ["fintype"]], ["add", "theorem", "not_is_field_of_card_not_prime_pow", ["fintype"]], ["add", "theorem", "nonempty_field", ["infinite"]]]}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "def", "unique_of_zero_mem", ["is_localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/cardinality.lean", "changes": [["add", "theorem", "algebra_map_surjective_of_fintype", ["is_localization"]], ["add", "theorem", "card", ["is_localization"]], ["add", "theorem", "card_le", ["is_localization"]]]}]}, {"timestamp": 1646343112, "sha": "2c0fa829", "message": "feat(group_theory/free_product): the 🏓-lemma (#12210)\nThe Ping-Pong-Lemma.\nIf a group action of `G` on `X` so that the `H i` acts in a specific way on disjoint subsets\n`X i` we can prove that `lift f` is injective, and thus the image of `lift f` is isomorphic to the free product of the `H i`.\nOften the Ping-Pong-Lemma is stated with regard to subgroups `H i` that generate the whole group; we generalize to arbitrary group homomorphisms `f i : H i →* G` and do not require the group to be generated by the images.\nUsually the Ping-Pong-Lemma requires that one group `H i` has at least three elements. This condition is only needed if `# ι = 2`, and we accept `3 ≤ # ι` as an alternative.", "changes": [{"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": [["add", "theorem", "empty_of_word_prod_eq_one", ["free_product"]], ["add", "theorem", "lift_injective_of_ping_pong:", ["free_product"]], ["add", "theorem", "lift_word_ping_pong", ["free_product"]], ["add", "theorem", "lift_word_prod_nontrivial_of_head_card", ["free_product"]], ["add", "theorem", "lift_word_prod_nontrivial_of_head_eq_last", ["free_product"]], ["add", "theorem", "lift_word_prod_nontrivial_of_not_empty", ["free_product"]], ["add", "theorem", "lift_word_prod_nontrivial_of_other_i", ["free_product"]], ["add", "theorem", "append_head", ["free_product", "neword"]], ["add", "theorem", "append_last", ["free_product", "neword"]], ["add", "theorem", "append_prod", ["free_product", "neword"]], ["add", "def", "head", ["free_product", "neword"]], ["add", "def", "inv", ["free_product", "neword"]], ["add", "theorem", "inv_head", ["free_product", "neword"]], ["add", "theorem", "inv_last", ["free_product", "neword"]], ["add", "theorem", "inv_prod", ["free_product", "neword"]], ["add", "def", "last", ["free_product", "neword"]], ["add", "def", "mul_head", ["free_product", "neword"]], ["add", "theorem", "mul_head_head", ["free_product", "neword"]], ["add", "theorem", "mul_head_prod", ["free_product", "neword"]], ["add", "theorem", "of_word", ["free_product", "neword"]], ["add", "def", "prod", ["free_product", "neword"]], ["add", "theorem", "prod_singleton", ["free_product", "neword"]], ["add", "def", "replace_head", ["free_product", "neword"]], ["add", "theorem", "replace_head_head", ["free_product", "neword"]], ["add", "theorem", "singleton_head", ["free_product", "neword"]], ["add", "theorem", "singleton_last", ["free_product", "neword"]], ["add", "def", "to_list", ["free_product", "neword"]], ["add", "theorem", "to_list_head'", ["free_product", "neword"]], ["add", "theorem", "to_list_last'", ["free_product", "neword"]], ["add", "theorem", "to_list_ne_nil", ["free_product", "neword"]], ["add", "def", "to_word", ["free_product", "neword"]], ["add", "inductive", "neword", ["free_product"]], ["add", "theorem", "prod_empty", ["free_product", "word"]], ["del", "theorem", "prod_nil", ["free_product", "word"]]]}]}, {"timestamp": 1646343111, "sha": "f549c103", "message": "feat(set_theory/cardinal_divisibility): add lemmas about divisibility in the cardinals (#12197)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "omega_le_mul_iff", ["cardinal"]]]}, {"oldPath": null, "newPath": "src/set_theory/cardinal_divisibility.lean", "changes": [["add", "theorem", "dvd_of_le_of_omega_le", ["cardinal"]], ["add", "theorem", "is_prime_iff", ["cardinal"]], ["add", "theorem", "is_prime_pow_iff", ["cardinal"]], ["add", "theorem", "is_unit_iff", ["cardinal"]], ["add", "theorem", "le_of_dvd", ["cardinal"]], ["add", "theorem", "nat_coe_dvd_iff", ["cardinal"]], ["add", "theorem", "nat_is_prime_iff", ["cardinal"]], ["add", "theorem", "not_irreducible_of_omega_le", ["cardinal"]], ["add", "theorem", "prime_of_omega_le", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "mul_eq_max'", ["cardinal"]]]}]}, {"timestamp": 1646343110, "sha": "2a05bb3a", "message": "feat(ring_theory/witt_vector): classify 1d isocrystals (#12041)\nTo show an application of semilinear maps that are not linear or conjugate-linear, we formalized the one-dimensional version of a theorem by Dieudonné and Manin classifying the isocrystals over an algebraically closed field with positive characteristic. This work is described in a recent draft from @dupuisf , @hrmacbeth , and myself: https://arxiv.org/abs/2202.05360", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "smul_of_ne_zero", ["linear_equiv"]]]}, {"oldPath": null, "newPath": "src/ring_theory/witt_vector/frobenius_fraction_field.lean", "changes": [["add", "theorem", "exists_frobenius_solution_fraction_ring", ["witt_vector"]], ["add", "theorem", "frobenius_frobenius_rotation", ["witt_vector"]], ["add", "def", "frobenius_rotation", ["witt_vector"]], ["add", "theorem", "frobenius_rotation_nonzero", ["witt_vector"]], ["add", "def", "solution", ["witt_vector", "recursion_base"]], ["add", "theorem", "solution_nonzero", ["witt_vector", "recursion_base"]], ["add", "theorem", "solution_pow", ["witt_vector", "recursion_base"]], ["add", "theorem", "solution_spec'", ["witt_vector", "recursion_base"]], ["add", "theorem", "solution_spec", ["witt_vector", "recursion_base"]], ["add", "theorem", "root_exists", ["witt_vector", "recursion_main"]], ["add", "def", "succ_nth_defining_poly", ["witt_vector", "recursion_main"]], ["add", "theorem", "succ_nth_defining_poly_degree", ["witt_vector", "recursion_main"]], ["add", "def", "succ_nth_val", ["witt_vector", "recursion_main"]], ["add", "theorem", "succ_nth_val_spec'", ["witt_vector", "recursion_main"]], ["add", "theorem", "succ_nth_val_spec", ["witt_vector", "recursion_main"]]]}, {"oldPath": null, "newPath": "src/ring_theory/witt_vector/isocrystal.lean", "changes": [["add", "def", "frobenius", ["witt_vector", "fraction_ring"]], ["add", "def", "frobenius_ring_hom", ["witt_vector", "fraction_ring"]], ["add", "def", "module", ["witt_vector", "fraction_ring"]], ["add", "def", "frobenius", ["witt_vector", "isocrystal"]], ["add", "theorem", "isocrystal_classification", ["witt_vector"]], ["add", "structure", "isocrystal_equiv", ["witt_vector"]], ["add", "structure", "isocrystal_hom", ["witt_vector"]], ["add", "theorem", "frobenius_apply", ["witt_vector", "standard_one_dim_isocrystal"]], ["add", "def", "standard_one_dim_isocrystal", ["witt_vector"]]]}]}, {"timestamp": 1646335684, "sha": "066ffdb3", "message": "chore(algebra/*): provide `non_assoc_ring` instances (#12414)", "changes": [{"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/symmetrized.lean", "newPath": "src/algebra/symmetrized.lean", "changes": []}]}, {"timestamp": 1646335683, "sha": "5d0960b6", "message": "feat(data/int/basic): add three lemmas about ints, nats and int_nat_abs (#12380)\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/int.2Eto_nat_eq_zero)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_nonpos_iff", ["int"]], ["add", "theorem", "to_nat_eq_zero", ["int"]], ["add", "theorem", "to_nat_neg_nat", ["int"]]]}]}, {"timestamp": 1646335682, "sha": "cdb69d5c", "message": "fix(data/set/function): do not use reducible (#12377)\nReducible should only be used if the definition if it occurs as an explicit argument in a type class and must reduce during type class search, or if it is a type that should inherit instances. Propositions should only be reducible if they are trivial variants (`<` and `>` for example).\nThese reducible attributes here will cause issues in Lean 4. In Lean 4, the simplifier unfold reducible definitions in simp lemmas. This means that tagging an `inj_on`-theorem with `@[simp]` creates the simp lemma `?a = ?b` (i.e. match anything).", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "def", "bij_on", ["set"]], ["mod", "def", "inj_on", ["set"]], ["mod", "def", "inv_on", ["set"]], ["mod", "def", "left_inv_on", ["set"]], ["mod", "def", "maps_to", ["set"]], ["mod", "def", "surj_on", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "def", "injective2", ["function"]]]}]}, {"timestamp": 1646335680, "sha": "363b7cd9", "message": "feat(algebra/ring/basic): generalize lemmas about differences of squares to non-commutative rings (#12366)\nThis copies `mul_self_sub_mul_self` and `mul_self_eq_mul_self_iff` to the `commute` namespace, and reproves the existing lemmas in terms of the new commute lemmas.\nAs a result, the requirements on `mul_self_sub_one` and `mul_self_eq_one_iff` and `units.inv_eq_self_iff` can be weakened from `comm_ring` to `non_unital_non_assoc_ring` or `ring`.\nThis also replaces a few `is_domain`s with the weaker `no_zero_divisors`, since the lemmas are being moved anyway. In practice this just removes the nontriviality requirements.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "mul_self_eq_mul_self_iff", ["commute"]], ["add", "theorem", "mul_self_sub_mul_self_eq'", ["commute"]], ["add", "theorem", "mul_self_sub_mul_self_eq", ["commute"]], ["mod", "theorem", "mul_self_eq_mul_self_iff", []], ["mod", "theorem", "mul_self_eq_one_iff", []], ["mod", "theorem", "mul_self_sub_mul_self", []], ["mod", "theorem", "mul_self_sub_one", []], ["mod", "theorem", "inv_eq_self_iff", ["units"]]]}]}, {"timestamp": 1646335679, "sha": "e823109e", "message": "chore(algebra/{group,group_with_zero}/basic): rename `div_mul_div` and `div_mul_comm` (#12365)\nThe new name, `div_mul_div_comm` is consistent with `mul_mul_mul_comm`.\nObviously this renames the additive versions too.", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "div_mul_comm", []], ["add", "theorem", "div_mul_div_comm", []]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "div_mul_div", []], ["add", "theorem", "div_mul_div_comm₀", []]]}, {"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "div_mul_div", ["nat"]], ["add", "theorem", "div_mul_div_comm", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/discriminant.lean", "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_with.lean", "newPath": "src/number_theory/liouville/liouville_with.lean", "changes": []}]}, {"timestamp": 1646335678, "sha": "ca7346de", "message": "feat(combinatorics/simple_graph/connectivity): add walk.darts (#12360)\nDarts can be more convenient than edges when working with walks since they keep track of orientation. This adds the list of darts along a walk and uses this to define and prove things about edges along a walk.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "edge_comp_symm", ["simple_graph", "dart"]], ["add", "def", "fst", ["simple_graph", "dart"]], ["add", "def", "snd", ["simple_graph", "dart"]], ["add", "def", "dart_adj", ["simple_graph"]], ["add", "theorem", "dart_edge_eq_mk_iff'", ["simple_graph"]], ["add", "theorem", "dart_edge_eq_mk_iff", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "chain'_adj_support", ["simple_graph", "walk"]], ["add", "theorem", "chain'_dart_adj_darts", ["simple_graph", "walk"]], ["mod", "theorem", "chain_adj_support", ["simple_graph", "walk"]], ["del", "theorem", "chain_adj_support_aux", ["simple_graph", "walk"]], ["add", "theorem", "chain_dart_adj_darts", ["simple_graph", "walk"]], ["add", "theorem", "cons_map_snd_darts", ["simple_graph", "walk"]], ["add", "theorem", "dart_fst_mem_support_of_mem_darts", ["simple_graph", "walk"]], ["add", "theorem", "dart_snd_mem_support_of_mem_darts", ["simple_graph", "walk"]], ["add", "def", "darts", ["simple_graph", "walk"]], ["add", "theorem", "darts_append", ["simple_graph", "walk"]], ["add", "theorem", "darts_bypass_subset", ["simple_graph", "walk"]], ["add", "theorem", "darts_cons", ["simple_graph", "walk"]], ["add", "theorem", "darts_drop_until_subset", ["simple_graph", "walk"]], ["add", "theorem", "darts_nil", ["simple_graph", "walk"]], ["add", "theorem", "darts_nodup_of_support_nodup", ["simple_graph", "walk"]], ["add", "theorem", "darts_reverse", ["simple_graph", "walk"]], ["add", "theorem", "darts_take_until_subset", ["simple_graph", "walk"]], ["add", "theorem", "darts_to_path_subset", ["simple_graph", "walk"]], ["mod", "def", "edges", ["simple_graph", "walk"]], ["mod", "theorem", "edges_subset_edge_set", ["simple_graph", "walk"]], ["add", "theorem", "length_darts", ["simple_graph", "walk"]], ["add", "theorem", "map_fst_darts", ["simple_graph", "walk"]], ["add", "theorem", "map_fst_darts_append", ["simple_graph", "walk"]], ["add", "theorem", "map_snd_darts", ["simple_graph", "walk"]], ["mod", "theorem", "mem_support_of_mem_edges", ["simple_graph", "walk"]], ["add", "theorem", "rotate_darts", ["simple_graph", "walk"]]]}]}, {"timestamp": 1646335677, "sha": "3b0111b9", "message": "feat(field_theory/minpoly): add minpoly_add_algebra_map and minpoly_sub_algebra_map (#12357)\nWe add minpoly_add_algebra_map and minpoly_sub_algebra_map: the minimal polynomial of x ± a.\nFrom flt-regular", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "comp", ["polynomial", "monic"]], ["add", "theorem", "comp_X_add_C", ["polynomial", "monic"]], ["add", "theorem", "comp_X_sub_C", ["polynomial", "monic"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "minpoly_add_algebra_map", ["minpoly"]], ["add", "theorem", "minpoly_sub_algebra_map", ["minpoly"]]]}]}, {"timestamp": 1646335676, "sha": "301a266f", "message": "feat(number_theory/cyclotomic/primitive_roots): add is_primitive_root.sub_one_power_basis (#12356)\nWe add `is_primitive_root.sub_one_power_basis`, the power basis of a cyclotomic extension given by `ζ - 1`, where `ζ ` is a primitive root of unity.\nFrom flt-regular.", "changes": [{"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["add", "theorem", "power_basis_gen_mem_adjoin_zeta_sub_one", ["is_primitive_root"]]]}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "adjoin_eq_top_of_gen_mem_adjoin", ["power_basis"]], ["add", "theorem", "adjoin_gen_eq_top", ["power_basis"]]]}]}, {"timestamp": 1646335675, "sha": "78b323bc", "message": "feat(analysis/special_functions/trigonometric): inequality `tan x > x` (#12352)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["del", "theorem", "sin_gt_sub_cube", ["real"]], ["del", "theorem", "sin_lt", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/bounds.lean", "changes": [["add", "theorem", "deriv_tan_sub_id", ["real"]], ["add", "theorem", "lt_tan", ["real"]], ["add", "theorem", "sin_gt_sub_cube", ["real"]], ["add", "theorem", "sin_lt", ["real"]]]}, {"oldPath": "src/data/real/pi/bounds.lean", "newPath": "src/data/real/pi/bounds.lean", "changes": []}]}, {"timestamp": 1646335673, "sha": "d0816c0f", "message": "feat(analysis/calculus): support and cont_diff (#11976)\n* Add some lemmas about the support of the (f)derivative of a function\n* Add some equivalences for `cont_diff`", "changes": [{"oldPath": "src/analysis/calculus/cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "continuous_deriv", ["cont_diff"]], ["add", "theorem", "cont_diff_at_one_iff", []], ["add", "theorem", "cont_diff_one_iff_deriv", []], ["add", "theorem", "cont_diff_one_iff_fderiv", []], ["add", "theorem", "cont_diff_top_iff_deriv", []]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_eq", []], ["add", "theorem", "deriv", ["has_compact_support"]], ["add", "theorem", "support_deriv_subset", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_eq", []], ["add", "theorem", "fderiv", ["has_compact_support"]], ["add", "theorem", "support_fderiv_subset", []]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "antitone_bforall", ["set"]]]}]}, {"timestamp": 1646329693, "sha": "16d48d7e", "message": "feat(algebra/star/basic + analysis/normed_space/star/basic): add two eq_zero/ne_zero lemmas (#12412)\nAdded two lemmas about elements being zero or non-zero.\nGolf a proof.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["mod", "theorem", "star_div", []], ["add", "theorem", "star_eq_zero", []], ["add", "theorem", "star_ne_zero", []]]}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}]}, {"timestamp": 1646329692, "sha": "3fa09c27", "message": "feat(algebra/homology/homotopy): compatibilities of null_homotopic_map with composition and additive functors (#12392)", "changes": [{"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": [["add", "theorem", "comp_null_homotopic_map'", ["homotopy"]], ["add", "theorem", "comp_null_homotopic_map", ["homotopy"]], ["add", "theorem", "map_null_homotopic_map'", ["homotopy"]], ["add", "theorem", "map_null_homotopic_map", ["homotopy"]], ["add", "theorem", "null_homotopic_map'_comp", ["homotopy"]], ["mod", "theorem", "null_homotopic_map'_f_eq_zero", ["homotopy"]], ["add", "theorem", "null_homotopic_map_comp", ["homotopy"]], ["mod", "theorem", "null_homotopic_map_f_eq_zero", ["homotopy"]]]}]}, {"timestamp": 1646329690, "sha": "0da2d1d9", "message": "feat(ring_theory/polynomial/eisenstein): add mem_adjoin_of_smul_prime_pow_smul_of_minpoly_is_eiseinstein_at (#12371)\nWe add `mem_adjoin_of_smul_prime_pow_smul_of_minpoly_is_eiseinstein_at`: let `K` be the field of fraction of an integrally closed domain `R` and let `L` be a separable extension of `K`, generated by an integral power basis `B` such that the minimal polynomial of `B.gen` is Eisenstein at `p`. Given `z : L` integral over `R`, if `p ^ n • z ∈ adjoin R {B.gen}`, then `z ∈ adjoin R {B.gen}`. Together with `algebra.discr_mul_is_integral_mem_adjoin` this result often allows to compute the ring of integers of `L`.\nFrom flt-regular", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "trans", ["no_zero_smul_divisors"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "disjoint_range_add_left_embedding", ["finset"]], ["add", "theorem", "disjoint_range_add_right_embedding", ["finset"]]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["add", "theorem", "mem_adjoin_of_dvd_coeff_of_dvd_aeval", []], ["add", "theorem", "mem_adjoin_of_smul_prime_pow_smul_of_minpoly_is_eiseinstein_at", []], ["add", "theorem", "mem_adjoin_of_smul_prime_smul_of_minpoly_is_eiseinstein_at", []]]}]}, {"timestamp": 1646329688, "sha": "b0cf3d73", "message": "feat(algebra/algebra/subalgebra): add a helper to promote submodules to subalgebras (#12368)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "to_submodule_to_subalgebra", ["subalgebra"]], ["add", "theorem", "coe_to_subalgebra", ["submodule"]], ["add", "theorem", "mem_to_subalgebra", ["submodule"]], ["add", "def", "to_subalgebra", ["submodule"]], ["add", "theorem", "to_subalgebra_mk", ["submodule"]], ["add", "theorem", "to_subalgebra_to_submodule", ["submodule"]]]}]}, {"timestamp": 1646329685, "sha": "ba998da9", "message": "feat(algebra/order/monoid_lemmas_zero_lt): more lemmas using `pos_mul` and friends (#12355)\nThis PR continues the `order` refactor. The added lemmas are the `\\le` analogues of the `<` lemmas that are already present.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "le_of_mul_le_mul_left'", ["zero_lt"]], ["add", "theorem", "le_of_mul_le_mul_right'", ["zero_lt"]], ["add", "theorem", "lt_of_mul_lt_mul_left''", ["zero_lt"]], ["add", "theorem", "lt_of_mul_lt_mul_right''", ["zero_lt"]], ["add", "theorem", "mul_le_mul_iff_left", ["zero_lt"]], ["add", "theorem", "mul_le_mul_iff_right", ["zero_lt"]], ["add", "theorem", "mul_le_mul_left'", ["zero_lt"]], ["add", "theorem", "mul_le_mul_right'", ["zero_lt"]]]}]}, {"timestamp": 1646329683, "sha": "5159a8fb", "message": "feat(simplex_category): various epi/mono lemmas (#11924)", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["add", "theorem", "eq_comp_δ_of_not_surjective'", ["simplex_category"]], ["add", "theorem", "eq_comp_δ_of_not_surjective", ["simplex_category"]], ["add", "theorem", "eq_id_of_epi", ["simplex_category"]], ["add", "theorem", "eq_id_of_is_iso", ["simplex_category"]], ["add", "theorem", "eq_id_of_mono", ["simplex_category"]], ["add", "theorem", "eq_δ_of_mono", ["simplex_category"]], ["add", "theorem", "eq_σ_comp_of_not_injective'", ["simplex_category"]], ["add", "theorem", "eq_σ_comp_of_not_injective", ["simplex_category"]], ["add", "theorem", "eq_σ_of_epi", ["simplex_category"]], ["add", "theorem", "is_iso_of_bijective", ["simplex_category"]], ["add", "theorem", "iso_eq_iso_refl", ["simplex_category"]], ["add", "def", "order_iso_of_iso", ["simplex_category"]]]}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "cast_succ_lt_iff_succ_le", ["fin"]]]}]}, {"timestamp": 1646324392, "sha": "f41897d9", "message": "feat(dynamics/fixed_points/basic): Fixed points are a subset of the range (#12423)", "changes": [{"oldPath": "src/dynamics/fixed_points/basic.lean", "newPath": "src/dynamics/fixed_points/basic.lean", "changes": [["add", "theorem", "fixed_points_subset_range", ["function"]]]}]}, {"timestamp": 1646324390, "sha": "4edf36d1", "message": "feat(data/nat/fib): sum of initial fragment of the Fibonacci sequence is one less than a Fibonacci number (#12416)", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["add", "theorem", "fib_succ_eq_succ_sum", ["nat"]]]}]}, {"timestamp": 1646324389, "sha": "59bf4540", "message": "refactor(measure_theory): enable dot notation for measure.map (#12350)\nRefactor to allow for using dot notation with `measure.map` (was previously not possible because it was bundled as a linear map). Mirrors `measure.restrict` wrapper implementation for `measure.restrictₗ`.", "changes": [{"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_map_iff", ["measurable_embedding"]], ["mod", "theorem", "map_apply", ["measurable_embedding"]], ["mod", "theorem", "map_comap", ["measurable_embedding"]], ["mod", "theorem", "map_apply_eq_iff_map_symm_apply_eq", ["measurable_equiv"]], ["mod", "theorem", "map_map_symm", ["measurable_equiv"]], ["mod", "theorem", "map_symm_map", ["measurable_equiv"]], ["mod", "theorem", "restrict_map", ["measurable_equiv"]], ["mod", "theorem", "ae_of_ae_map", ["measure_theory"]], ["mod", "theorem", "le_map_apply", ["measure_theory", "measure"]], ["mod", "def", "map", ["measure_theory", "measure"]], ["add", "theorem", "map_add", ["measure_theory", "measure"]], ["mod", "theorem", "map_mono", ["measure_theory", "measure"]], ["add", "theorem", "map_smul", ["measure_theory", "measure"]], ["add", "theorem", "map_zero", ["measure_theory", "measure"]], ["add", "def", "mapₗ", ["measure_theory", "measure"]], ["add", "theorem", "mapₗ_apply", ["measure_theory", "measure"]], ["mod", "theorem", "ae_map_le", ["measure_theory", "measure", "quasi_measure_preserving"]], ["mod", "theorem", "tendsto_ae_map", ["measure_theory", "measure"]], ["mod", "theorem", "mem_ae_of_mem_ae_map", ["measure_theory"]]]}]}, {"timestamp": 1646324388, "sha": "c5045853", "message": "fix(number_theory/number_field): make ring_of_integers_algebra not an instance (#12331)\nThis issue has caused problems for at least two of Kevin's PhD students; it is better to remove it for now or disable it temporarily.\nc.f. https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/diamond.20for.20monoid.20instance.20on.20ideals", "changes": [{"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["add", "def", "ring_of_integers_algebra", ["number_field"]]]}]}, {"timestamp": 1646324387, "sha": "0ac3f9d2", "message": "feat(category_theory/preadditive): the category of additive functors (#12330)", "changes": [{"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["add", "def", "forget", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "forget_map", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "forget_obj", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "forget_obj_of", ["category_theory", "AdditiveFunctor"]], ["add", "def", "of", ["category_theory", "AdditiveFunctor"]], ["add", "theorem", "of_fst", ["category_theory", "AdditiveFunctor"]], ["add", "def", "AdditiveFunctor", ["category_theory"]]]}]}, {"timestamp": 1646324386, "sha": "691722a6", "message": "feat(set_theory/ordinal): `enum` is injective (#12319)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "enum_inj", ["ordinal"]]]}]}, {"timestamp": 1646324385, "sha": "18f53db5", "message": "feat(topology/metric_space/pi_nat): metric structure on product spaces (#12220)\nWe endow the spaces `Π (n : ℕ), E n` or `Π (i : ι), E i` with various distances (not registered as instances), and use these to show that these spaces retract on their closed subsets.", "changes": [{"oldPath": null, "newPath": "src/topology/metric_space/pi_nat.lean", "changes": [["add", "theorem", "exists_nat_nat_continuous_surjective_of_complete_space", []], ["add", "theorem", "dist_eq_tsum", ["pi_countable"]], ["add", "theorem", "dist_le_dist_pi_of_dist_lt", ["pi_countable"]], ["add", "theorem", "dist_summable", ["pi_countable"]], ["add", "theorem", "min_dist_le_dist_pi", ["pi_countable"]], ["add", "theorem", "Union_cylinder_update", ["pi_nat"]], ["add", "theorem", "apply_eq_of_dist_lt", ["pi_nat"]], ["add", "theorem", "apply_eq_of_lt_first_diff", ["pi_nat"]], ["add", "theorem", "apply_first_diff_ne", ["pi_nat"]], ["add", "def", "cylinder", ["pi_nat"]], ["add", "theorem", "cylinder_anti", ["pi_nat"]], ["add", "theorem", "cylinder_eq_cylinder_of_le_first_diff", ["pi_nat"]], ["add", "theorem", "cylinder_eq_pi", ["pi_nat"]], ["add", "theorem", "cylinder_longest_prefix_eq_of_longest_prefix_lt_first_diff", ["pi_nat"]], ["add", "theorem", "cylinder_zero", ["pi_nat"]], ["add", "theorem", "disjoint_cylinder_of_longest_prefix_lt", ["pi_nat"]], ["add", "theorem", "dist_eq_of_ne", ["pi_nat"]], ["add", "theorem", "dist_triangle_nonarch", ["pi_nat"]], ["add", "theorem", "exists_disjoint_cylinder", ["pi_nat"]], ["add", "theorem", "exists_lipschitz_retraction_of_is_closed", ["pi_nat"]], ["add", "theorem", "exists_retraction_of_is_closed", ["pi_nat"]], ["add", "theorem", "exists_retraction_subtype_of_is_closed", ["pi_nat"]], ["add", "def", "first_diff", ["pi_nat"]], ["add", "theorem", "first_diff_comm", ["pi_nat"]], ["add", "theorem", "first_diff_le_longest_prefix", ["pi_nat"]], ["add", "theorem", "first_diff_lt_shortest_prefix_diff", ["pi_nat"]], ["add", "theorem", "inter_cylinder_longest_prefix_nonempty", ["pi_nat"]], ["add", "theorem", "is_open_iff_dist", ["pi_nat"]], ["add", "theorem", "is_topological_basis_cylinders", ["pi_nat"]], ["add", "theorem", "lipschitz_with_one_iff_forall_dist_image_le_of_mem_cylinder", ["pi_nat"]], ["add", "def", "longest_prefix", ["pi_nat"]], ["add", "theorem", "mem_cylinder_comm", ["pi_nat"]], ["add", "theorem", "mem_cylinder_first_diff", ["pi_nat"]], ["add", "theorem", "mem_cylinder_iff", ["pi_nat"]], ["add", "theorem", "mem_cylinder_iff_dist_le", ["pi_nat"]], ["add", "theorem", "mem_cylinder_iff_eq", ["pi_nat"]], ["add", "theorem", "mem_cylinder_iff_le_first_diff", ["pi_nat"]], ["add", "def", "metric_space_nat_nat", ["pi_nat"]], ["add", "theorem", "min_first_diff_le", ["pi_nat"]], ["add", "theorem", "self_mem_cylinder", ["pi_nat"]], ["add", "def", "shortest_prefix_diff", ["pi_nat"]], ["add", "theorem", "shortest_prefix_diff_pos", ["pi_nat"]], ["add", "theorem", "update_mem_cylinder", ["pi_nat"]]]}]}, {"timestamp": 1646319037, "sha": "8053f56d", "message": "feat(ring_theory/dedekind_domain): strengthen `exist_integer_multiples` (#12184)\nLet `J ≠ ⊤` be an ideal in a Dedekind domain `A`, and `f ≠ 0` a finite collection of elements of `K = Frac(A)`, then we can multiply the elements of `f` by some `a : K` to find a collection of elements of `A` that is not completely contained in `J`.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "exist_integer_multiples_not_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "def", "span_finset", ["fractional_ideal"]], ["add", "theorem", "span_finset_eq_zero", ["fractional_ideal"]], ["add", "theorem", "span_finset_ne_zero", ["fractional_ideal"]]]}]}, {"timestamp": 1646319036, "sha": "4dec7b50", "message": "feat(ring_theory/ideal): `(I : ideal R) • (⊤ : submodule R M)` (#12178)\nTwo useful lemmas on the submodule spanned by `I`-scalar multiples.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "smul_top_eq_map", ["ideal"]], ["add", "theorem", "map_le_smul_top", ["submodule"]]]}]}, {"timestamp": 1646312504, "sha": "26d9d38f", "message": "feat(number_theory): padic.complete_space instance (#12424)", "changes": [{"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1646312503, "sha": "bf203b95", "message": "docs(set_theory/cofinality): Fix cofinality definition (#12421)\nThe condition is `a ≤ b`, not `¬(b > a)`.", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1646312502, "sha": "02cad2cd", "message": "feat(data/complex/basic): add abs_hom (#12409)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "abs_prod", ["complex"]]]}]}, {"timestamp": 1646312500, "sha": "bc35902c", "message": "chore(algebra/group/hom): more generic `f x ≠ 1` lemmas (#12404)\n * `map_ne_{one,zero}_iff` is the `not_congr` version of `map_eq_one_iff`, which was previously only available for `mul_equiv_class`\n * `ne_{one,zero}_of_map` is one direction of `map_ne_{one,zero}_iff` that doesn't assume injectivity", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "map_ne_one_iff", []], ["add", "theorem", "ne_one_of_map", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}]}, {"timestamp": 1646312499, "sha": "ca0ff3ad", "message": "feat(algebra/algebra/spectrum): show the star and spectrum operations commute (#12351)\nThis establishes the identity `(σ a)⋆ = σ a⋆` for any `a : A` where `A` is a star ring and a star module over a star add monoid `R`.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "star_mem_resolvent_set_iff", ["spectrum"]]]}]}, {"timestamp": 1646312498, "sha": "f7a6fe9e", "message": "feat(set_theory/cofinality): Prove simple theorems on regular cardinals (#12328)", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "aleph'_succ_is_regular", ["cardinal"]], ["add", "theorem", "aleph_succ_is_regular", ["cardinal"]], ["add", "theorem", "cof_eq", ["cardinal", "is_regular"]], ["add", "theorem", "omega_le", ["cardinal", "is_regular"]]]}]}, {"timestamp": 1646305763, "sha": "16ad25c2", "message": "chore(analysis/normed_space/star/basic): golf a proof (#12420)\nShorten a proof using ext.", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}]}, {"timestamp": 1646305761, "sha": "228ab96a", "message": "feat(data/list/destutter): add `list.destutter` to remove chained duplicates (#11934)", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "destutter'", ["list"]], ["add", "def", "destutter", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/destutter.lean", "changes": [["add", "theorem", "destutter'_cons", ["list"]], ["add", "theorem", "destutter'_cons_neg", ["list"]], ["add", "theorem", "destutter'_cons_pos", ["list"]], ["add", "theorem", "destutter'_eq_self_iff", ["list"]], ["add", "theorem", "destutter'_is_chain'", ["list"]], ["add", "theorem", "destutter'_is_chain", ["list"]], ["add", "theorem", "destutter'_ne_nil", ["list"]], ["add", "theorem", "destutter'_nil", ["list"]], ["add", "theorem", "destutter'_of_chain", ["list"]], ["add", "theorem", "destutter'_singleton", ["list"]], ["add", "theorem", "destutter'_sublist", ["list"]], ["add", "theorem", "destutter_cons'", ["list"]], ["add", "theorem", "destutter_cons_cons", ["list"]], ["add", "theorem", "destutter_eq_nil", ["list"]], ["add", "theorem", "destutter_eq_self_iff", ["list"]], ["add", "theorem", "destutter_idem", ["list"]], ["add", "theorem", "destutter_is_chain'", ["list"]], ["add", "theorem", "destutter_nil", ["list"]], ["add", "theorem", "destutter_of_chain'", ["list"]], ["add", "theorem", "destutter_pair", ["list"]], ["add", "theorem", "destutter_singleton", ["list"]], ["add", "theorem", "destutter_sublist", ["list"]], ["add", "theorem", "mem_destutter'", ["list"]]]}]}, {"timestamp": 1646299753, "sha": "46b9d057", "message": "feat(data/part): Lemmas for get on binary function instances (#12194)\nA variety of lemmas such as `mul_get_eq` for `part`.", "changes": [{"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": [["add", "theorem", "append_get_eq", ["part"]], ["add", "theorem", "div_get_eq", ["part"]], ["add", "theorem", "inter_get_eq", ["part"]], ["add", "theorem", "left_dom_of_append_dom", ["part"]], ["add", "theorem", "left_dom_of_div_dom", ["part"]], ["add", "theorem", "left_dom_of_inter_dom", ["part"]], ["add", "theorem", "left_dom_of_mod_dom", ["part"]], ["add", "theorem", "left_dom_of_mul_dom", ["part"]], ["add", "theorem", "left_dom_of_sdiff_dom", ["part"]], ["add", "theorem", "left_dom_of_union_dom", ["part"]], ["add", "theorem", "mod_get_eq", ["part"]], ["add", "theorem", "mul_get_eq", ["part"]], ["add", "theorem", "right_dom_of_append_dom", ["part"]], ["add", "theorem", "right_dom_of_div_dom", ["part"]], ["add", "theorem", "right_dom_of_inter_dom", ["part"]], ["add", "theorem", "right_dom_of_mod_dom", ["part"]], ["add", "theorem", "right_dom_of_mul_dom", ["part"]], ["add", "theorem", "right_dom_of_sdiff_dom", ["part"]], ["add", "theorem", "right_dom_of_union_dom", ["part"]], ["add", "theorem", "sdiff_get_eq", ["part"]], ["add", "theorem", "union_get_eq", ["part"]]]}]}, {"timestamp": 1646292945, "sha": "9f721bab", "message": "chore(logic/function/basic): add function.ne_iff (#12288)", "changes": [{"oldPath": "src/data/fun_like/basic.lean", "newPath": "src/data/fun_like/basic.lean", "changes": [["add", "theorem", "ne_iff", ["fun_like"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "funext_iff", ["function"]], ["add", "theorem", "ne_iff", ["function"]]]}]}, {"timestamp": 1646266118, "sha": "9deeddb3", "message": "feat(algebra/algebra/operations): `submodule.map_pow` and opposite lemmas (#12374)\nTo prove `map_pow`, we add `submodule.map_hom` to match the very-recently-added `ideal.map_hom`. \nThe opposite lemmas can be used to extend these results for maps that reverse multiplication, by factoring them into an `alg_hom` into the opposite type composed with `mul_opposite.op`.\n`(↑(op_linear_equiv R : A ≃ₗ[R] Aᵐᵒᵖ) : A →ₗ[R] Aᵐᵒᵖ)` is really a mouthful, but the elaborator can't seem to work out the type any other way, and `.to_linear_map` appears not to be the preferred form for `simp` lemmas.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "comap_op_one", ["submodule"]], ["add", "theorem", "comap_unop_mul", ["submodule"]], ["add", "theorem", "comap_unop_one", ["submodule"]], ["add", "theorem", "comap_unop_pow", ["submodule"]], ["add", "def", "equiv_opposite", ["submodule"]], ["del", "theorem", "map_div", ["submodule"]], ["add", "def", "map_hom", ["submodule"]], ["del", "theorem", "map_mul", ["submodule"]], ["add", "theorem", "map_op_mul", ["submodule"]], ["add", "theorem", "map_op_one", ["submodule"]], ["add", "theorem", "map_op_pow", ["submodule"]], ["add", "theorem", "map_unop_one", ["submodule"]]]}]}, {"timestamp": 1646259435, "sha": "6f74d3cc", "message": "chore(algebra/ring/basic): generalize lemmas to non-associative rings (#12411)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "injective_iff'", ["ring_hom"]], ["mod", "theorem", "injective_iff", ["ring_hom"]], ["mod", "def", "mk'", ["ring_hom"]]]}]}, {"timestamp": 1646255327, "sha": "ce26d75d", "message": "refactor(analysis/normed_space/basic): split into normed_space and ../normed/normed_field (#12410)\nSplits off the sections about normed rings and fields of the file `analysis/normed_space/basic` into a new file `analysis/normed/normed_field`.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed/normed_field.lean", "changes": [["add", "theorem", "eventually_norm_pow_le", []], ["add", "theorem", "norm_prod_le'", ["finset"]], ["add", "theorem", "norm_prod_le", ["finset"]], ["add", "theorem", "norm_cast_rat", ["int"]], ["add", "theorem", "norm_cast_real", ["int"]], ["add", "theorem", "norm_eq_abs", ["int"]], ["add", "theorem", "norm_prod_le'", ["list"]], ["add", "theorem", "norm_prod_le", ["list"]], ["add", "def", "normed_group", ["matrix"]], ["add", "def", "semi_normed_group", ["matrix"]], ["add", "theorem", "mul_left_bound", []], ["add", "theorem", "mul_right_bound", []], ["add", "theorem", "nnnorm_div", []], ["add", "def", "nnnorm_hom", []], ["add", "theorem", "nnnorm_inv", []], ["add", "theorem", "nnnorm_mul", []], ["add", "theorem", "nnnorm_mul_le", []], ["add", "theorem", "nnnorm_norm", []], ["add", "theorem", "nnnorm_nsmul_le", []], ["add", "theorem", "nnnorm_one", []], ["add", "theorem", "nnnorm_pow", []], ["add", "theorem", "nnnorm_pow_le'", []], ["add", "theorem", "nnnorm_pow_le", []], ["add", "theorem", "nnnorm_prod", []], ["add", "theorem", "nnnorm_zpow", []], ["add", "theorem", "nnnorm_zsmul_le", []], ["add", "theorem", "coe_nat_abs", ["nnreal"]], ["add", "theorem", "nnnorm_eq", ["nnreal"]], ["add", "theorem", "norm_eq", ["nnreal"]], ["add", "theorem", "norm_div", []], ["add", "def", "norm_hom", []], ["add", "theorem", "norm_inv", []], ["add", "theorem", "norm_matrix_le_iff", []], ["add", "theorem", "norm_matrix_lt_iff", []], ["add", "theorem", "norm_mul", []], ["add", "theorem", "norm_mul_le", []], ["add", "theorem", "norm_norm", []], ["add", "theorem", "norm_nsmul_le", []], ["add", "theorem", "norm_pow", []], ["add", "theorem", "norm_pow_le'", []], ["add", "theorem", "norm_pow_le", []], ["add", "theorem", "norm_prod", []], ["add", "theorem", "norm_zpow", []], ["add", "theorem", "norm_zsmul_le", []], ["add", "theorem", "exists_lt_norm", ["normed_field"]], ["add", "theorem", "exists_norm_lt", ["normed_field"]], ["add", "theorem", "exists_norm_lt_one", ["normed_field"]], ["add", "theorem", "exists_one_lt_norm", ["normed_field"]], ["add", "theorem", "nhds_within_is_unit_ne_bot", ["normed_field"]], ["add", "theorem", "punctured_nhds_ne_bot", ["normed_field"]], ["add", "theorem", "tendsto_at_top'", ["normed_group"]], ["add", "theorem", "tendsto_at_top", ["normed_group"]], ["add", "theorem", "norm_cast_real", ["rat"]], ["add", "theorem", "ennnorm_eq_of_real", ["real"]], ["add", "theorem", "nnnorm_coe_nat", ["real"]], ["add", "theorem", "nnnorm_of_nonneg", ["real"]], ["add", "theorem", "nnnorm_two", ["real"]], ["add", "theorem", "norm_coe_nat", ["real"]], ["add", "theorem", "norm_of_nonneg", ["real"]], ["add", "theorem", "norm_of_nonpos", ["real"]], ["add", "theorem", "norm_two", ["real"]], ["add", "theorem", "of_real_le_ennnorm", ["real"]], ["add", "theorem", "mul_norm", ["summable"]], ["add", "theorem", "mul_of_nonneg", ["summable"]], ["add", "theorem", "summable_mul_of_summable_norm", []], ["add", "theorem", "summable_norm_sum_mul_antidiagonal_of_summable_norm", []], ["add", "theorem", "summable_norm_sum_mul_range_of_summable_norm", []], ["add", "theorem", "tsum_mul_tsum_eq_tsum_sum_antidiagonal_of_summable_norm", []], ["add", "theorem", "tsum_mul_tsum_eq_tsum_sum_range_of_summable_norm", []], ["add", "theorem", "tsum_mul_tsum_of_summable_norm", []], ["add", "theorem", "norm_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "eventually_norm_pow_le", []], ["del", "theorem", "norm_prod_le'", ["finset"]], ["del", "theorem", "norm_prod_le", ["finset"]], ["del", "theorem", "norm_cast_rat", ["int"]], ["del", "theorem", "norm_cast_real", ["int"]], ["del", "theorem", "norm_eq_abs", ["int"]], ["del", "theorem", "norm_prod_le'", ["list"]], ["del", "theorem", "norm_prod_le", ["list"]], ["del", "def", "normed_group", ["matrix"]], ["del", "def", "semi_normed_group", ["matrix"]], ["del", "theorem", "mul_left_bound", []], ["del", "theorem", "mul_right_bound", []], ["del", "theorem", "nnnorm_div", []], ["del", "def", "nnnorm_hom", []], ["del", "theorem", "nnnorm_inv", []], ["del", "theorem", "nnnorm_mul", []], ["del", "theorem", "nnnorm_mul_le", []], ["del", "theorem", "nnnorm_norm", []], ["del", "theorem", "nnnorm_nsmul_le", []], ["del", "theorem", "nnnorm_one", []], ["del", "theorem", "nnnorm_pow", []], ["del", "theorem", "nnnorm_pow_le'", []], ["del", "theorem", "nnnorm_pow_le", []], ["del", "theorem", "nnnorm_prod", []], ["del", "theorem", "nnnorm_zpow", []], ["del", "theorem", "nnnorm_zsmul_le", []], ["del", "theorem", "coe_nat_abs", ["nnreal"]], ["del", "theorem", "nnnorm_eq", ["nnreal"]], ["del", "theorem", "norm_eq", ["nnreal"]], ["del", "theorem", "norm_div", []], ["del", "def", "norm_hom", []], ["del", "theorem", "norm_inv", []], ["del", "theorem", "norm_matrix_le_iff", []], ["del", "theorem", "norm_matrix_lt_iff", []], ["del", "theorem", "norm_mul", []], ["del", "theorem", "norm_mul_le", []], ["del", "theorem", "norm_norm", []], ["del", "theorem", "norm_nsmul_le", []], ["del", "theorem", "norm_pow", []], ["del", "theorem", "norm_pow_le'", []], ["del", "theorem", "norm_pow_le", []], ["del", "theorem", "norm_prod", []], ["del", "theorem", "norm_zpow", []], ["del", "theorem", "norm_zsmul_le", []], ["del", "theorem", "exists_lt_norm", ["normed_field"]], ["del", "theorem", "exists_norm_lt", ["normed_field"]], ["del", "theorem", "exists_norm_lt_one", ["normed_field"]], ["del", "theorem", "exists_one_lt_norm", ["normed_field"]], ["del", "theorem", "nhds_within_is_unit_ne_bot", ["normed_field"]], ["del", "theorem", "punctured_nhds_ne_bot", ["normed_field"]], ["del", "theorem", "tendsto_at_top'", ["normed_group"]], ["del", "theorem", "tendsto_at_top", ["normed_group"]], ["del", "theorem", "norm_cast_real", ["rat"]], ["del", "theorem", "ennnorm_eq_of_real", ["real"]], ["del", "theorem", "nnnorm_coe_nat", ["real"]], ["del", "theorem", "nnnorm_of_nonneg", ["real"]], ["del", "theorem", "nnnorm_two", ["real"]], ["del", "theorem", "norm_coe_nat", ["real"]], ["del", "theorem", "norm_of_nonneg", ["real"]], ["del", "theorem", "norm_of_nonpos", ["real"]], ["del", "theorem", "norm_two", ["real"]], ["del", "theorem", "of_real_le_ennnorm", ["real"]], ["del", "theorem", "mul_norm", ["summable"]], ["del", "theorem", "mul_of_nonneg", ["summable"]], ["del", "theorem", "summable_mul_of_summable_norm", []], ["del", "theorem", "summable_norm_sum_mul_antidiagonal_of_summable_norm", []], ["del", "theorem", "summable_norm_sum_mul_range_of_summable_norm", []], ["del", "theorem", "tsum_mul_tsum_eq_tsum_sum_antidiagonal_of_summable_norm", []], ["del", "theorem", "tsum_mul_tsum_eq_tsum_sum_range_of_summable_norm", []], ["del", "theorem", "tsum_mul_tsum_of_summable_norm", []], ["del", "theorem", "norm_pos", ["units"]]]}]}, {"timestamp": 1646251400, "sha": "423328e0", "message": "chore(probability/independence): change to set notation and `measurable_set` (#12400)", "changes": [{"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": []}]}, {"timestamp": 1646246031, "sha": "a283e17b", "message": "feat(algebra/module/submodule_pointwise): pointwise negation (#12405)\nWe already have pointwise negation on `add_submonoid`s (from #10451), this extends it to `submodules`.\nThe lemmas are all copies of the add_submonoid lemmas, except for two new lemmas:\n* `submodule.neg_to_add_submonoid`\n* `submodule.neg_eq_self`, which isn't true for `add_submonoid`s\nFinally, we provide a `has_distrib_neg` instance; even though the negation is not cancellative, it does distribute over multiplication as expected.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_pointwise.lean", "newPath": "src/algebra/module/submodule_pointwise.lean", "changes": [["add", "theorem", "closure_neg", ["submodule"]], ["add", "theorem", "coe_set_neg", ["submodule"]], ["add", "theorem", "mem_neg", ["submodule"]], ["add", "theorem", "neg_bot", ["submodule"]], ["add", "theorem", "neg_eq_self", ["submodule"]], ["add", "theorem", "neg_inf", ["submodule"]], ["add", "theorem", "neg_infi", ["submodule"]], ["add", "theorem", "neg_le", ["submodule"]], ["add", "theorem", "neg_le_neg", ["submodule"]], ["add", "def", "neg_order_iso", ["submodule"]], ["add", "theorem", "neg_sup", ["submodule"]], ["add", "theorem", "neg_supr", ["submodule"]], ["add", "theorem", "neg_to_add_submonoid", ["submodule"]], ["add", "theorem", "neg_top", ["submodule"]]]}]}, {"timestamp": 1646243348, "sha": "90e2957e", "message": "chore(measure_theory/function/egorov): rename `uniform_integrability` file to `egorov` (#12402)", "changes": [{"oldPath": "src/measure_theory/function/convergence_in_measure.lean", "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/egorov.lean", "changes": []}]}, {"timestamp": 1646231505, "sha": "7959d982", "message": "feat(linear_algebra/matrix.determinant): add `matrix.det_neg` (#12396)", "changes": [{"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_neg", ["matrix"]], ["add", "theorem", "det_neg_eq_smul", ["matrix"]], ["mod", "theorem", "det_smul", ["matrix"]], ["add", "theorem", "det_smul_of_tower", ["matrix"]]]}]}, {"timestamp": 1646231503, "sha": "c96fb62b", "message": "refactor(group_theory/*): Rename `general_commutator.lean` to `commutator.lean` (#12388)\nFollowup to #12308.", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/general_commutator.lean", "newPath": "src/group_theory/commutator.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1646231501, "sha": "d00cbee3", "message": "feat(algebra/big_operators/basic): prod_dvd_prod_of_subset (#12383)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_dvd_prod_of_subset", ["finset"]]]}]}, {"timestamp": 1646231500, "sha": "22ddf9a3", "message": "feat(ring_theory/ideal): `map f (I^n) = (map f I)^n` (#12370)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "def", "map_hom", ["ideal"]]]}]}, {"timestamp": 1646225549, "sha": "4e8d8f27", "message": "feat(ring_theory/unique_factorization_domain): factors of `p^k` (#12369)\nThis is a relatively trivial application of existing lemmas, but the result is a particularly nice shape that I felt worth to add to the library.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "normalized_factors_pow", ["irreducible"]]]}]}, {"timestamp": 1646225548, "sha": "f191f521", "message": "chore(algebra/big_operators): generalize `map_prod` to `monoid_hom_class` (#12354)\nThis PR generalizes the following lemmas to `(add_)monoid_hom_class`:\n * `map_prod`, `map_sum`\n * `map_multiset_prod`, `map_multiset_sum`\n * `map_list_prod`, `map_list_sum`\n * `map_finsupp_prod`, `map_finsupp_sum`\nI haven't removed any of the existing specialized, namespaced versions of these lemmas yet, but I have marked them as `protected` and added a docstring saying to use the generic version instead.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "map_prod", []], ["del", "theorem", "map_prod", ["monoid_hom"]], ["del", "theorem", "map_prod", ["mul_equiv"]], ["del", "theorem", "map_list_prod", ["ring_hom"]], ["del", "theorem", "map_list_sum", ["ring_hom"]], ["del", "theorem", "map_multiset_prod", ["ring_hom"]], ["del", "theorem", "map_multiset_sum", ["ring_hom"]], ["del", "theorem", "map_prod", ["ring_hom"]], ["del", "theorem", "map_sum", ["ring_hom"]], ["del", "theorem", "unop_map_list_prod", ["ring_hom"]]]}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "map_multiset_prod", []], ["del", "theorem", "map_multiset_prod", ["monoid_hom"]], ["mod", "theorem", "prod_hom'", ["multiset"]], ["mod", "theorem", "prod_hom", ["multiset"]]]}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["mod", "theorem", "multiset_prod_X_sub_C_next_coeff", ["polynomial"]], ["mod", "theorem", "prod_X_sub_C_next_coeff", ["polynomial"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "map_finsupp_prod", []], ["del", "theorem", "map_finsupp_prod", ["monoid_hom"]], ["del", "theorem", "map_finsupp_prod", ["mul_equiv"]], ["del", "theorem", "map_finsupp_prod", ["ring_hom"]], ["del", "theorem", "map_finsupp_sum", ["ring_hom"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["mod", "theorem", "prod_hom", ["list"]], ["mod", "theorem", "prod_map_hom", ["list"]], ["add", "theorem", "map_list_prod", []], ["del", "theorem", "map_list_prod", ["monoid_hom"]], ["del", "theorem", "unop_map_list_prod", ["monoid_hom"]], ["add", "theorem", "unop_map_list_prod", []]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "map_multiset_prod", ["polynomial"]], ["del", "theorem", "map_prod", ["polynomial"]], ["del", "theorem", "map_sum", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "map_prod", ["filter"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}]}, {"timestamp": 1646216522, "sha": "20d95410", "message": "chore(ring_theory/localization): `localization_map_bijective` rename & `field` instance version (#12375)", "changes": [{"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "theorem", "localization_map_bijective", ["field"]], ["add", "theorem", "localization_map_bijective", ["is_field"]], ["del", "theorem", "localization_map_bijective_of_field", []]]}]}, {"timestamp": 1646213427, "sha": "35086a11", "message": "feat(probability): define conditional probability and add basic related theorems (#12344)\nAdd the definition of conditional probability as a scaled restricted measure and prove Bayes' Theorem and other basic theorems.", "changes": [{"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "theorem", "pos_of_subset_ne_zero", ["measure_theory", "outer_measure"]]]}, {"oldPath": null, "newPath": "src/probability/conditional.lean", "changes": [["add", "def", "cond", ["probability_theory"]], ["add", "theorem", "cond_apply", ["probability_theory"]], ["add", "theorem", "cond_cond_eq_cond_inter", ["probability_theory"]], ["add", "theorem", "cond_eq_inv_mul_cond_mul", ["probability_theory"]], ["add", "theorem", "cond_is_probability_measure", ["probability_theory"]], ["add", "theorem", "cond_mul_eq_inter", ["probability_theory"]], ["add", "theorem", "cond_pos_of_inter_ne_zero", ["probability_theory"]], ["add", "theorem", "cond_univ", ["probability_theory"]], ["add", "theorem", "inter_pos_of_cond_ne_zero", ["probability_theory"]]]}]}, {"timestamp": 1646207180, "sha": "1eebec51", "message": "perf(data/fintype/basic): speed up mem_of_mem_perms_of_list (#12389)\nThis single theorem was taking twice as long as everything else in the file put together, and it was easy to fix.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1646207179, "sha": "9daa2338", "message": "doc(*): fix broken markdown links (#12385)\nSome urls to nLab were also weird, so I replaced it with less weird ones.\nThe `MM91` reference was presumably intended to reference `MM92`.", "changes": [{"oldPath": "src/algebra/group/freiman.lean", "newPath": "src/algebra/group/freiman.lean", "changes": []}, {"oldPath": "src/category_theory/category/PartialFun.lean", "newPath": "src/category_theory/category/PartialFun.lean", "changes": []}, {"oldPath": "src/category_theory/category/Twop.lean", "newPath": "src/category_theory/category/Twop.lean", "changes": []}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/spaces.lean", "newPath": "src/category_theory/sites/spaces.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/two_pointing.lean", "newPath": "src/data/two_pointing.lean", "changes": []}, {"oldPath": "src/order/category/DistribLattice.lean", "newPath": "src/order/category/DistribLattice.lean", "changes": []}, {"oldPath": "src/order/category/Lattice.lean", "newPath": "src/order/category/Lattice.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}]}, {"timestamp": 1646207178, "sha": "b77ff234", "message": "feat(algebra/ring): add non-unital and non-associative rings (#12300)\nFollowing up on #11124.\nThe longer term goal is to develop C^* algebras, where non-unital algebras are an essential part of the theory.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "newPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "changes": []}]}, {"timestamp": 1646202229, "sha": "fefe359d", "message": "feat(set_theory/principal): prove theorems about additive principal ordinals (#11704)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "aleph_is_principal_add", ["cardinal"]], ["add", "theorem", "ord_is_principal_add", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "add_absorp", ["ordinal"]], ["del", "theorem", "add_absorp_iff", ["ordinal"]], ["del", "theorem", "add_lt_omega", ["ordinal"]], ["del", "theorem", "add_lt_omega_opow", ["ordinal"]], ["del", "theorem", "add_omega", ["ordinal"]], ["del", "theorem", "add_omega_opow", ["ordinal"]], ["del", "theorem", "mul_omega_opow_opow", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/principal.lean", "changes": [["add", "theorem", "add_absorp", ["ordinal"]], ["add", "theorem", "add_omega", ["ordinal"]], ["add", "theorem", "add_omega_opow", ["ordinal"]], ["add", "theorem", "mul_principal_add_is_principal_add", ["ordinal"]], ["add", "theorem", "opow_principal_add_is_principal_add", ["ordinal"]], ["add", "theorem", "principal_add_iff_add_left_eq_self", ["ordinal"]], ["add", "theorem", "principal_add_iff_zero_or_omega_power", ["ordinal"]], ["add", "theorem", "principal_add_is_limit", ["ordinal"]], ["add", "theorem", "principal_add_of_le_one", ["ordinal"]], ["add", "theorem", "principal_add_omega", ["ordinal"]], ["add", "theorem", "principal_add_omega_opow", ["ordinal"]], ["add", "theorem", "principal_add_one", ["ordinal"]]]}]}, {"timestamp": 1646194159, "sha": "a9902d54", "message": "feat(algebra/divisibility): generalise basic facts to semigroups (#12325)", "changes": [{"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["mod", "theorem", "dvd_lcm_left", []], ["mod", "theorem", "dvd_lcm_right", []]]}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}]}, {"timestamp": 1646189082, "sha": "cc9de07a", "message": "feat(algebra/star): replace star_monoid with star_semigroup (#12299)\nIn preparation for allowing non-unital C^* algebras, replace star_monoid with star_semigroup.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["mod", "theorem", "star", ["is_unit"]], ["mod", "theorem", "is_unit_star", []], ["mod", "theorem", "star_div", []], ["mod", "theorem", "star_inv", []], ["mod", "theorem", "star_inv_of", []], ["del", "def", "star_monoid_of_comm", []], ["mod", "theorem", "star_mul'", []], ["mod", "def", "star_mul_aut", []], ["mod", "def", "star_mul_equiv", []], ["mod", "theorem", "star_mul_self_nonneg'", []], ["mod", "theorem", "star_mul_self_nonneg", []], ["mod", "theorem", "star_one", []], ["mod", "theorem", "star_pow", []], ["mod", "theorem", "star_prod", []], ["mod", "def", "star_ring_equiv", []], ["add", "def", "star_semigroup_of_comm", []], ["mod", "theorem", "star_zpow", []]]}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": [["mod", "structure", "is_CHSH_tuple", []]]}, {"oldPath": "src/algebra/star/free.lean", "newPath": "src/algebra/star/free.lean", "changes": []}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/algebra/star/pi.lean", "newPath": "src/algebra/star/pi.lean", "changes": []}, {"oldPath": "src/algebra/star/pointwise.lean", "newPath": "src/algebra/star/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/star/unitary.lean", "newPath": "src/algebra/star/unitary.lean", "changes": [["mod", "def", "unitary", []]]}, {"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "conj_transpose_smul", ["matrix"]]]}]}, {"timestamp": 1646179122, "sha": "4ba9098e", "message": "feat(algebra/euclidean_domain,data/int/basic): dvd_div_of_mul_dvd (#12382)\nWe have a separate `int` and `euclidean_domain` version as `euclidean_domain` isn't pulled in by `int.basic`.", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "dvd_div_of_mul_dvd", ["euclidean_domain"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "div_dvd_of_dvd", ["int"]], ["del", "theorem", "div_dvd_of_ne_zero_dvd", ["int"]], ["add", "theorem", "dvd_div_of_mul_dvd", ["int"]]]}]}, {"timestamp": 1646173243, "sha": "269280a1", "message": "feat(topology/bornology/basic): Define bornology (#12036)\nThis defines bornologies and provides the basic API. A bornology on a type is a filter consisting of cobounded sets which contains the cofinite sets; bounded sets are then complements of cobounded sets. This is equivalent to the usual formulation in terms of bounded sets, but provides access to mathlib's large filter library. We provide the relevant API for bounded sets.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/topology/bornology/basic.lean", "changes": [["add", "def", "cofinite", ["bornology"]], ["add", "theorem", "ext_iff'", ["bornology"]], ["add", "theorem", "ext_iff_is_bounded", ["bornology"]], ["add", "theorem", "subset", ["bornology", "is_bounded"]], ["add", "theorem", "union", ["bornology", "is_bounded"]], ["add", "def", "is_bounded", ["bornology"]], ["add", "theorem", "is_bounded_Union", ["bornology"]], ["add", "theorem", "is_bounded_bUnion", ["bornology"]], ["add", "theorem", "is_bounded_compl_iff", ["bornology"]], ["add", "theorem", "is_bounded_def", ["bornology"]], ["add", "theorem", "is_bounded_empty", ["bornology"]], ["add", "theorem", "is_bounded_sUnion", ["bornology"]], ["add", "def", "is_cobounded", ["bornology"]], ["add", "theorem", "is_cobounded_def", ["bornology"]], ["add", "def", "of_bounded", ["bornology"]], ["add", "theorem", "sUnion_bounded_univ", ["bornology"]]]}]}, {"timestamp": 1646168052, "sha": "5c2fa35a", "message": "chore(topology/algebra/valuation): add universe (#11962)", "changes": [{"oldPath": "src/topology/algebra/valuation.lean", "newPath": "src/topology/algebra/valuation.lean", "changes": [["mod", "theorem", "loc_const", ["valued"]], ["mod", "theorem", "subgroups_basis", ["valued"]]]}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": [["mod", "theorem", "continuous_extension", ["valued"]], ["mod", "theorem", "continuous_valuation", ["valued"]], ["mod", "theorem", "extension_extends", ["valued"]]]}]}, {"timestamp": 1646161921, "sha": "818c81fc", "message": "feat(ring_theory/integral_domain): finite integral domain is a field (#12376)\nWe don't yet have Wedderburn's little theorem (on my todo list), so adding some weaker versions to tide us over.", "changes": [{"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["del", "def", "division_ring_of_is_domain", []], ["add", "def", "division_ring_of_is_domain", ["fintype"]], ["add", "def", "field_of_domain", ["fintype"]], ["add", "def", "group_with_zero_of_cancel", ["fintype"]], ["add", "theorem", "is_field_of_domain", ["fintype"]], ["del", "def", "group_with_zero_of_fintype", []]]}]}, {"timestamp": 1646161919, "sha": "130e07d3", "message": "chore(algebra/group/prod): `prod.swap` commutes with arithmetic (#12367)\nThis also adds some missing `div` lemmas using `to_additive`.", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "fst_div", ["prod"]], ["del", "theorem", "fst_sub", ["prod"]], ["add", "theorem", "mk_div_mk", ["prod"]], ["del", "theorem", "mk_sub_mk", ["prod"]], ["add", "theorem", "snd_div", ["prod"]], ["del", "theorem", "snd_sub", ["prod"]], ["add", "theorem", "swap_div", ["prod"]], ["add", "theorem", "swap_inv", ["prod"]], ["add", "theorem", "swap_mul", ["prod"]], ["add", "theorem", "swap_one", ["prod"]]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": [["add", "theorem", "smul_swap", ["prod"]]]}]}, {"timestamp": 1646155551, "sha": "5e36e121", "message": "feat(category_theory/abelian/homology): Adds API for homology mimicking that of (co)kernels. (#12171)", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/homology.lean", "changes": [["add", "def", "homology_c", ["category_theory", "abelian"]], ["add", "def", "homology_c_to_k", ["category_theory", "abelian"]], ["add", "def", "homology_k", ["category_theory", "abelian"]], ["add", "theorem", "condition_ι", ["homology"]], ["add", "theorem", "condition_π'", ["homology"]], ["add", "def", "desc'", ["homology"]], ["add", "theorem", "hom_from_ext", ["homology"]], ["add", "theorem", "hom_to_ext", ["homology"]], ["add", "def", "lift", ["homology"]], ["add", "theorem", "lift_ι", ["homology"]], ["add", "theorem", "map_eq_desc'_lift_left", ["homology"]], ["add", "theorem", "map_eq_desc'_lift_right", ["homology"]], ["add", "theorem", "map_eq_lift_desc'_left", ["homology"]], ["add", "theorem", "map_eq_lift_desc'_right", ["homology"]], ["add", "def", "ι", ["homology"]], ["add", "def", "π'", ["homology"]], ["add", "theorem", "π'_desc'", ["homology"]], ["add", "theorem", "π'_eq_π", ["homology"]], ["add", "theorem", "π'_map", ["homology"]], ["add", "theorem", "π'_ι", ["homology"]], ["add", "def", "homology_iso_kernel_desc", []]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "cokernel_iso_of_eq_hom_comp_desc", ["category_theory", "limits"]], ["add", "theorem", "cokernel_iso_of_eq_inv_comp_desc", ["category_theory", "limits"]], ["add", "theorem", "kernel_iso_of_eq_hom_comp_ι", ["category_theory", "limits"]], ["add", "theorem", "kernel_iso_of_eq_inv_comp_ι", ["category_theory", "limits"]], ["add", "theorem", "lift_comp_kernel_iso_of_eq_hom", ["category_theory", "limits"]], ["add", "theorem", "lift_comp_kernel_iso_of_eq_inv", ["category_theory", "limits"]], ["add", "theorem", "π_comp_cokernel_iso_of_eq_hom", ["category_theory", "limits"]], ["add", "theorem", "π_comp_cokernel_iso_of_eq_inv", ["category_theory", "limits"]]]}]}, {"timestamp": 1646155549, "sha": "b45657ff", "message": "feat(algebra/algebra/spectrum, analysis/normed_space/spectrum): prove the spectrum of any element in a complex Banach algebra is nonempty (#12115)\nThis establishes that the spectrum of any element in a (nontrivial) complex Banach algebra is nonempty. The nontrivial assumption is necessary, as otherwise the only element is invertible. In addition, we establish some properties of the resolvent function; in particular, it tends to zero at infinity.\n- [x] depends on: #12095", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["mod", "theorem", "smul_sub_iff_sub_inv_smul", ["is_unit"]], ["add", "theorem", "is_unit_resolvent", ["spectrum"]], ["add", "theorem", "units_smul_resolvent", ["spectrum"]], ["add", "theorem", "units_smul_resolvent_self", ["spectrum"]]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "nonempty", ["spectrum"]], ["add", "theorem", "norm_resolvent_le_forall", ["spectrum"]]]}]}, {"timestamp": 1646155548, "sha": "29c84f71", "message": "feat(combinatorics/set_family/lym): Lubell-Yamamoto-Meshalkin inequalities (#11248)\nThis proves the two local LYM inequalities, the LYM inequality and Sperner's theorem.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/set_family/lym.lean", "changes": [["add", "theorem", "card_div_choose_le_card_shadow_div_choose", ["finset"]], ["add", "theorem", "card_mul_le_card_shadow_mul", ["finset"]], ["add", "def", "falling", ["finset"]], ["add", "theorem", "falling_zero_subset", ["finset"]], ["add", "theorem", "le_card_falling_div_choose", ["finset"]], ["add", "theorem", "mem_falling", ["finset"]], ["add", "theorem", "sized_falling", ["finset"]], ["add", "theorem", "slice_subset_falling", ["finset"]], ["add", "theorem", "slice_union_shadow_falling_succ", ["finset"]], ["add", "theorem", "sum_card_slice_div_choose_le_one", ["finset"]], ["add", "theorem", "disjoint_slice_shadow_falling", ["is_antichain"]], ["add", "theorem", "sperner", ["is_antichain"]]]}, {"oldPath": "src/combinatorics/set_family/shadow.lean", "newPath": "src/combinatorics/set_family/shadow.lean", "changes": [["add", "theorem", "shadow_singleton_empty", ["finset"]], ["add", "theorem", "sized_shadow_iff", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "ssubset_iff_exists_insert_subset", ["finset"]], ["add", "theorem", "ssubset_iff_exists_subset_erase", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "insert_inj_on'", ["finset"]]]}]}, {"timestamp": 1646148576, "sha": "3007f24c", "message": "chore(*): use `*_*_*_comm` where possible (#12372)\nThese lemmas are quite helpful when proving `map_add` type statements; hopefully people will remember them more if they see them used in a few more places.", "changes": [{"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}]}, {"timestamp": 1646148575, "sha": "3fb051dc", "message": "feat(field_theory/krull_topology): added krull_topology_t2 (#11973)", "changes": [{"oldPath": "src/data/fun_like/basic.lean", "newPath": "src/data/fun_like/basic.lean", "changes": [["add", "theorem", "exists_ne", ["fun_like"]]]}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": [["add", "theorem", "fixing_subgroup_is_open", ["intermediate_field"]], ["add", "theorem", "krull_topology_t2", []], ["add", "theorem", "is_open_of_one_mem_interior", ["subgroup"]]]}]}, {"timestamp": 1646144578, "sha": "5a56e464", "message": "chore(data/polynomial/monic): remove useless lemma (#12364)\nThere is a `nontrivial` version of this lemma (`ne_zero_of_monic`) which actually has uses in the library, unlike this deleted lemma. We also tidy the proof of the lemma below.", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["del", "theorem", "ne_zero_of_monic_of_zero_ne_one", ["polynomial"]]]}]}, {"timestamp": 1646144577, "sha": "a4e936ca", "message": "chore(category_theory/idempotents) replaced \"idempotence\" by \"idem\" (#12362)", "changes": [{"oldPath": "src/category_theory/idempotents/basic.lean", "newPath": "src/category_theory/idempotents/basic.lean", "changes": [["add", "theorem", "idem_of_id_sub_idem", ["category_theory", "idempotents"]], ["del", "theorem", "idempotence_of_id_sub_idempotent", ["category_theory", "idempotents"]]]}, {"oldPath": "src/category_theory/idempotents/biproducts.lean", "newPath": "src/category_theory/idempotents/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/functor_categories.lean", "newPath": "src/category_theory/idempotents/functor_categories.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/karoubi.lean", "newPath": "src/category_theory/idempotents/karoubi.lean", "changes": [["mod", "def", "decomp_id_i", ["category_theory", "idempotents", "karoubi"]], ["mod", "theorem", "id_eq", ["category_theory", "idempotents", "karoubi"]], ["mod", "structure", "karoubi", ["category_theory", "idempotents"]]]}, {"oldPath": "src/category_theory/idempotents/karoubi_karoubi.lean", "newPath": "src/category_theory/idempotents/karoubi_karoubi.lean", "changes": []}]}, {"timestamp": 1646130961, "sha": "1f39ada7", "message": "feat(linear_algebra): generalize `linear_equiv.finrank_eq` to rings (#12358)\nSince `finrank` doesn't assume the module is actually a vector space, neither should the statement that linear equivalences preserve it.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "finrank_eq", ["linear_equiv"]], ["mod", "theorem", "finrank_map_eq", ["linear_equiv"]]]}]}, {"timestamp": 1646120156, "sha": "c223a81b", "message": "feat(measure_theory/function/locally_integrable): define locally integrable (#12216)\n* Define the locally integrable predicate\n* Move all results about integrability on compact sets to a new file\n* Rename some lemmas from `integrable_on_compact` -> `locally_integrable`, if appropriate.\n* Weaken some type-class assumptions (also on `is_compact_interval`)\n* Simplify proof of `continuous.integrable_of_has_compact_support`\n* Rename variables in moved lemmas to sensible names", "changes": [{"oldPath": null, "newPath": "src/measure_theory/function/locally_integrable.lean", "changes": [["add", "theorem", "locally_integrable", ["antitone"]], ["add", "theorem", "integrable_on_compact", ["antitone_on"]], ["add", "theorem", "integrable_of_has_compact_support", ["continuous"]], ["add", "theorem", "integrable_on_Icc", ["continuous"]], ["add", "theorem", "integrable_on_Ioc", ["continuous"]], ["add", "theorem", "integrable_on_interval", ["continuous"]], ["add", "theorem", "integrable_on_interval_oc", ["continuous"]], ["add", "theorem", "locally_integrable", ["continuous"]], ["add", "theorem", "integrable_on_Icc", ["continuous_on"]], ["add", "theorem", "integrable_on_compact", ["continuous_on"]], ["add", "theorem", "integrable_on_interval", ["continuous_on"]], ["add", "theorem", "integrable_on_of_nhds_within", ["is_compact"]], ["add", "theorem", "locally_integrable", ["measure_theory", "integrable"]], ["add", "theorem", "continuous_on_mul", ["measure_theory", "integrable_on"]], ["add", "theorem", "continuous_on_mul_of_subset", ["measure_theory", "integrable_on"]], ["add", "theorem", "mul_continuous_on", ["measure_theory", "integrable_on"]], ["add", "theorem", "mul_continuous_on_of_subset", ["measure_theory", "integrable_on"]], ["add", "theorem", "ae_measurable", ["measure_theory", "locally_integrable"]], ["add", "def", "locally_integrable", ["measure_theory"]], ["add", "theorem", "locally_integrable_iff", ["measure_theory"]], ["add", "theorem", "locally_integrable", ["monotone"]], ["add", "theorem", "integrable_on_compact", ["monotone_on"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["del", "theorem", "integrable_on_compact", ["antitone"]], ["del", "theorem", "integrable_on_compact", ["antitone_on"]], ["del", "theorem", "integrable_of_has_compact_support", ["continuous"]], ["del", "theorem", "integrable_on_Icc", ["continuous"]], ["del", "theorem", "integrable_on_Ioc", ["continuous"]], ["del", "theorem", "integrable_on_compact", ["continuous"]], ["del", "theorem", "integrable_on_interval", ["continuous"]], ["del", "theorem", "integrable_on_interval_oc", ["continuous"]], ["del", "theorem", "integrable_on_Icc", ["continuous_on"]], ["del", "theorem", "integrable_on_compact", ["continuous_on"]], ["del", "theorem", "integrable_on_interval", ["continuous_on"]], ["del", "theorem", "integrable_on_of_nhds_within", ["is_compact"]], ["del", "theorem", "continuous_on_mul", ["measure_theory", "integrable_on"]], ["del", "theorem", "continuous_on_mul_of_subset", ["measure_theory", "integrable_on"]], ["del", "theorem", "mul_continuous_on", ["measure_theory", "integrable_on"]], ["del", "theorem", "mul_continuous_on_of_subset", ["measure_theory", "integrable_on"]], ["add", "theorem", "integrable_on_iff_integable_of_support_subset", ["measure_theory"]], ["del", "theorem", "integrable_on_compact", ["monotone"]], ["del", "theorem", "integrable_on_compact", ["monotone_on"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["mod", "theorem", "is_compact_interval", []]]}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1646103333, "sha": "cd98967d", "message": "feat(order/category/CompleteLattice): The category of complete lattices (#12348)\nDefine `CompleteLattice`, the category of complete lattices with complete lattice homomorphisms.", "changes": [{"oldPath": null, "newPath": "src/order/category/CompleteLattice.lean", "changes": [["add", "def", "dual", ["CompleteLattice"]], ["add", "def", "dual_equiv", ["CompleteLattice"]], ["add", "def", "mk", ["CompleteLattice", "iso"]], ["add", "def", "of", ["CompleteLattice"]], ["add", "def", "CompleteLattice", []], ["add", "theorem", "CompleteLattice_dual_comp_forget_to_BoundedLattice", []]]}, {"oldPath": "src/order/hom/complete_lattice.lean", "newPath": "src/order/hom/complete_lattice.lean", "changes": [["add", "def", "to_bounded_lattice_hom", ["complete_lattice_hom"]]]}]}, {"timestamp": 1646103333, "sha": "37885e8c", "message": "feat(category_theory/idempotents): biproducts in idempotent completions (#12333)", "changes": [{"oldPath": null, "newPath": "src/category_theory/idempotents/biproducts.lean", "changes": [["add", "def", "bicone", ["category_theory", "idempotents", "karoubi", "biproducts"]], ["add", "def", "complement", ["category_theory", "idempotents", "karoubi"]], ["add", "def", "decomposition", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "karoubi_has_finite_biproducts", ["category_theory", "idempotents", "karoubi"]]]}]}, {"timestamp": 1646098289, "sha": "73dd4b54", "message": "refactor(category_theory/functor): a folder for concepts directly related to functors (#12346)", "changes": [{"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/ext.lean", "newPath": "src/category_theory/abelian/ext.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "newPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor/basic.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor/category.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/functor/const.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/functor/currying.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/functor/default.lean", "changes": []}, {"oldPath": "src/category_theory/derived.lean", "newPath": "src/category_theory/functor/derived.lean", "changes": []}, {"oldPath": "src/category_theory/flat_functors.lean", "newPath": "src/category_theory/functor/flat.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/functor/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functorial.lean", "newPath": "src/category_theory/functor/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/hom_functor.lean", "newPath": "src/category_theory/functor/hom.lean", "changes": []}, {"oldPath": "src/category_theory/reflects_isomorphisms.lean", "newPath": "src/category_theory/functor/reflects_isomorphisms.lean", "changes": []}, {"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": []}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/center.lean", "newPath": "src/category_theory/monoidal/center.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor_category.lean", "newPath": "src/category_theory/monoidal/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functorial.lean", "newPath": "src/category_theory/monoidal/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/tor.lean", "newPath": "src/category_theory/monoidal/tor.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/sigma/basic.lean", "newPath": "src/category_theory/sigma/basic.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/mono_over.lean", "newPath": "src/category_theory/subobject/mono_over.lean", "changes": []}, {"oldPath": "src/category_theory/thin.lean", "newPath": "src/category_theory/thin.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1646064535, "sha": "456898c7", "message": "feat(data/finsupp/basic): Version of `finsupp.prod_add_index` with weaker premises (#11353)\nA simpler proof of `finsupp.prod_add_index : (f + g).prod h = f.prod h * g.prod h` with weaker premises.\nSpecifically, this only requires:\n* `[add_zero_class M]` rather than `[add_comm_monoid M]`\n* `h_zero : ∀ a ∈ f.support ∪ g.support, h a 0 = 1` rather than `h_zero : ∀a, h a 0 = 1`. \n* `h_add : ∀ (a ∈ f.support ∪ g.support) b₁ b₂, h a (b₁ + b₂) = h a b₁ * h a b₂` rather than `h_add : ∀ a b₁ b₂, h a (b₁ + b₂) = h a b₁ * h a b₂` (thanks to Anne Baanen for spotting this weakening).\nThe original version has been retained and re-named to `finsupp.prod_add_index'`, since in some places this is more convenient to use. (There was already a lemma called `prod_add_index'` which appears not to have been used anywhere. This has been renamed to `prod_hom_add_index`.)\nDiscussed in this Zulip thread:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Variant.20of.20finsupp.2Eprod_add_index.3F", "changes": [{"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "def", "lift_add_hom", ["finsupp"]], ["mod", "theorem", "prod_add_index'", ["finsupp"]], ["mod", "theorem", "prod_add_index", ["finsupp"]], ["add", "theorem", "prod_hom_add_index", ["finsupp"]], ["del", "theorem", "sum_add_index'", ["finsupp"]], ["add", "theorem", "sum_hom_add_index", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/multiset.lean", "newPath": "src/data/finsupp/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1646052378, "sha": "1447c401", "message": "refactor(group_theory/general_commutator): Rename `general_commutator` to `subgroup.commutator` (#12308)\nThis PR renames `general_commutator` to `subgroup.commutator`.\nI'll change the file name in a followup PR, so that this PR is easier to review.\n(This is one of the several orthogonal changes from https://github.com/leanprover-community/mathlib/pull/12134)", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/general_commutator.lean", "newPath": "src/group_theory/general_commutator.lean", "changes": [["del", "theorem", "bot_general_commutator", []], ["del", "theorem", "general_commutator_bot", []], ["del", "theorem", "general_commutator_comm", []], ["del", "theorem", "general_commutator_containment", []], ["del", "theorem", "general_commutator_def'", []], ["del", "theorem", "general_commutator_def", []], ["del", "theorem", "general_commutator_le", []], ["del", "theorem", "general_commutator_le_inf", []], ["del", "theorem", "general_commutator_le_left", []], ["del", "theorem", "general_commutator_le_right", []], ["del", "theorem", "general_commutator_mono", []], ["del", "theorem", "general_commutator_pi_pi_le", []], ["del", "theorem", "general_commutator_pi_pi_of_fintype", []], ["del", "theorem", "general_commutator_prod_prod", []], ["del", "theorem", "map_general_commutator", []], ["add", "theorem", "bot_commutator", ["subgroup"]], ["add", "theorem", "commutator_bot", ["subgroup"]], ["add", "theorem", "commutator_comm", ["subgroup"]], ["add", "theorem", "commutator_containment", ["subgroup"]], ["add", "theorem", "commutator_def'", ["subgroup"]], ["add", "theorem", "commutator_def", ["subgroup"]], ["add", "theorem", "commutator_le", ["subgroup"]], ["add", "theorem", "commutator_le_inf", ["subgroup"]], ["add", "theorem", "commutator_le_left", ["subgroup"]], ["add", "theorem", "commutator_le_right", ["subgroup"]], ["add", "theorem", "commutator_mono", ["subgroup"]], ["add", "theorem", "commutator_pi_pi_le", ["subgroup"]], ["add", "theorem", "commutator_pi_pi_of_fintype", ["subgroup"]], ["add", "theorem", "commutator_prod_prod", ["subgroup"]], ["add", "theorem", "map_commutator", ["subgroup"]]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1646052377, "sha": "92cbcc32", "message": "chore(algebra): move star_ring structure on free_algebra (#12297)\nThere's no need to have `algebra.star.basic` imported transitively into pretty much everything, just to put the `star_ring` structure on `free_algebra`, so I've moved this construction to its own file.\n(I was changing definitions in `algebra.star.basic` to allow for more non-unital structures, it recompiling was very painful because of this transitive dependence.)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["del", "theorem", "star_algebra_map", ["free_algebra"]], ["del", "def", "star_hom", ["free_algebra"]], ["del", "theorem", "star_ι", ["free_algebra"]]]}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["del", "theorem", "star_of", ["free_monoid"]], ["del", "theorem", "star_one", ["free_monoid"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/star/free.lean", "changes": [["add", "theorem", "star_algebra_map", ["free_algebra"]], ["add", "def", "star_hom", ["free_algebra"]], ["add", "theorem", "star_ι", ["free_algebra"]], ["add", "theorem", "star_of", ["free_monoid"]], ["add", "theorem", "star_one", ["free_monoid"]]]}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": []}]}, {"timestamp": 1646052376, "sha": "9c71c0f0", "message": "feat(algebra/monoid_algebra/basic): add monomial_hom (#12283)\nJust adding one definition", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "def", "single_hom", ["add_monoid_algebra"]], ["add", "def", "single_hom", ["monoid_algebra"]]]}]}, {"timestamp": 1646052375, "sha": "c7498d08", "message": "feat(algebra/{group/with_one,order/monoid}): equivs for `with_zero` and `with_one` (#12275)\nThis provides:\n* `add_equiv.with_zero_congr : α ≃+ β → with_zero α ≃+ with_zero β`\n* `mul_equiv.with_one_congr : α ≃* β → with_one α ≃* with_one β`\n* `with_zero.to_mul_bot : with_zero (multiplicative α) ≃* multiplicative (with_bot α)`\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/with_zero.20.28multiplicative.20A.29.20.E2.89.83*.20multiplicative.20.28with_bot.20A.29/near/272980650)", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "def", "with_one_congr", ["mul_equiv"]], ["add", "theorem", "with_one_congr_refl", ["mul_equiv"]], ["add", "theorem", "with_one_congr_symm", ["mul_equiv"]], ["add", "theorem", "with_one_congr_trans", ["mul_equiv"]], ["add", "theorem", "map_coe", ["with_one"]], ["mod", "theorem", "map_comp", ["with_one"]], ["add", "theorem", "map_map", ["with_one"]]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["del", "def", "ordered_add_comm_monoid", ["with_zero"]], ["add", "def", "to_mul_bot", ["with_zero"]], ["add", "theorem", "to_mul_bot_coe", ["with_zero"]], ["add", "theorem", "to_mul_bot_coe_of_add", ["with_zero"]], ["add", "theorem", "to_mul_bot_le", ["with_zero"]], ["add", "theorem", "to_mul_bot_lt", ["with_zero"]], ["add", "theorem", "to_mul_bot_strict_mono", ["with_zero"]], ["add", "theorem", "to_mul_bot_symm_bot", ["with_zero"]], ["add", "theorem", "to_mul_bot_zero", ["with_zero"]]]}]}, {"timestamp": 1646052374, "sha": "474aecb9", "message": "doc(algebra,data/fun_like): small morphism documentation improvements (#11642)\n * The `fun_like` docs talked about a `to_fun` class, this doesn't exist (anymore).\n * Warn that `{one,mul,monoid,monoid_with_zero}_hom.{congr_fun,congr_arg,coe_inj,ext_iff}` has been superseded by `fun_like`.\nThanks to @YaelDillies for pointing out these issues.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/data/fun_like/basic.lean", "newPath": "src/data/fun_like/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}]}, {"timestamp": 1646050598, "sha": "33c0a1cb", "message": "feat(ring_theory/dedekind_domain/ideal): add height_one_spectrum (#12244)", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "irreducible", ["is_dedekind_domain", "height_one_spectrum", "associates"]], ["add", "theorem", "irreducible", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "theorem", "prime", ["is_dedekind_domain", "height_one_spectrum"]], ["add", "structure", "height_one_spectrum", ["is_dedekind_domain"]]]}]}, {"timestamp": 1646044417, "sha": "200c2541", "message": "feat(algebra/algebra,data/equiv/ring): `{ring,alg}_equiv.Pi_congr_right` (#12289)\nWe extend `{add,mul}_equiv.Pi_congr_right` to rings and algebras.\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60ring_equiv.2EPi_congr_right.60", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "Pi_congr_right", ["alg_equiv"]], ["add", "theorem", "Pi_congr_right_refl", ["alg_equiv"]], ["add", "theorem", "Pi_congr_right_symm", ["alg_equiv"]], ["add", "theorem", "Pi_congr_right_trans", ["alg_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "def", "Pi_congr_right", ["ring_equiv"]], ["add", "theorem", "Pi_congr_right_refl", ["ring_equiv"]], ["add", "theorem", "Pi_congr_right_symm", ["ring_equiv"]], ["add", "theorem", "Pi_congr_right_trans", ["ring_equiv"]]]}]}, {"timestamp": 1646044415, "sha": "e700d561", "message": "feat(ring_theory/polynomial/eisenstein): add a technical lemma (#11839)\nA technical lemma about Eiseinstein minimal polynomials.\nFrom flt-regular", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "dvd_of_pow_dvd_pow_mul_pow_of_square_not_dvd", ["prime"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_add_pred_of_pos", ["nat"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "degree_map_of_monic", ["polynomial"]], ["add", "theorem", "nat_degree_map_of_monic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_smul", []]]}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["add", "theorem", "dvd_coeff_zero_of_aeval_eq_prime_smul_of_minpoly_is_eiseinstein_at", []]]}]}, {"timestamp": 1646044414, "sha": "770a7ce2", "message": "feat(measure_theory/function/convergence_in_measure): Define convergence in measure (#11774)\nThis PR defines convergence in measure and proves some properties about them. \nIn particular, we prove that \n- convergence a.e. in a finite measure space implies convergence in measure\n- convergence in measure implies there exists a subsequence that converges a.e.\n- convergence in Lp implies convergence in measure", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tsum_geometric_inv_two", []], ["add", "theorem", "tsum_geometric_inv_two_ge", []]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "ae_measurable_of_tendsto_metric_ae'", []], ["mod", "theorem", "ae_measurable_of_tendsto_metric_ae", []]]}, {"oldPath": null, "newPath": "src/measure_theory/function/convergence_in_measure.lean", "changes": [["add", "theorem", "exists_nat_measure_lt_two_inv", ["measure_theory", "exists_seq_tendsto_ae"]], ["add", "def", "seq_tendsto_ae_seq", ["measure_theory", "exists_seq_tendsto_ae"]], ["add", "def", "seq_tendsto_ae_seq_aux", ["measure_theory", "exists_seq_tendsto_ae"]], ["add", "theorem", "seq_tendsto_ae_seq_spec", ["measure_theory", "exists_seq_tendsto_ae"]], ["add", "theorem", "seq_tendsto_ae_seq_strict_mono", ["measure_theory", "exists_seq_tendsto_ae"]], ["add", "theorem", "seq_tendsto_ae_seq_succ", ["measure_theory", "exists_seq_tendsto_ae"]], ["add", "theorem", "ae_measurable", ["measure_theory", "tendsto_in_measure"]], ["add", "theorem", "congr_left", ["measure_theory", "tendsto_in_measure"]], ["add", "theorem", "congr_right", ["measure_theory", "tendsto_in_measure"]], ["add", "theorem", "exists_seq_tendsto_ae'", ["measure_theory", "tendsto_in_measure"]], ["add", "theorem", "exists_seq_tendsto_ae", ["measure_theory", "tendsto_in_measure"]], ["add", "theorem", "exists_seq_tendsto_in_measure_at_top", ["measure_theory", "tendsto_in_measure"]], ["add", "def", "tendsto_in_measure", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_iff_norm", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_Lp", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_ae", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_ae_of_measurable", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_snorm", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_snorm_of_measurable", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_snorm_of_ne_top", ["measure_theory"]], ["add", "theorem", "tendsto_in_measure_of_tendsto_snorm_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1646044413, "sha": "b25bad7d", "message": "feat(archive/100-theorems-list): Partition theorem (#4259)\nA proof of Euler's partition theorem, from the Freek list.\nThe proof is sorry-free but currently unpleasant, and some parts don't belong in `archive/`, so WIP for now.", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/45_partition.lean", "changes": [["add", "theorem", "coeff_indicator", []], ["add", "theorem", "coeff_indicator_neg", []], ["add", "theorem", "coeff_indicator_pos", []], ["add", "theorem", "coeff_prod_range", []], ["add", "theorem", "constant_coeff_indicator", []], ["add", "def", "cut", []], ["add", "theorem", "cut_empty_succ", []], ["add", "theorem", "cut_equiv_antidiag", []], ["add", "theorem", "cut_insert", []], ["add", "theorem", "cut_zero", []], ["add", "theorem", "distinct_gf_prop", []], ["add", "def", "indicator_series", []], ["add", "theorem", "mem_cut", []], ["add", "def", "mk_odd", []], ["add", "theorem", "num_series'", []], ["add", "theorem", "odd_gf_prop", []], ["add", "def", "partial_distinct_gf", []], ["add", "theorem", "partial_distinct_gf_prop", []], ["add", "theorem", "partial_gf_prop", []], ["add", "def", "partial_odd_gf", []], ["add", "theorem", "partial_odd_gf_prop", []], ["add", "theorem", "partition_theorem", []], ["add", "theorem", "same_coeffs", []], ["add", "theorem", "same_gf", []], ["add", "theorem", "two_series", []]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "mem_sum", ["finset"]]]}, {"oldPath": "src/data/list/nat_antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": []}]}, {"timestamp": 1646039360, "sha": "dc72624e", "message": "chore(measure_theory/function/strongly_measurable): remove useless no_zero_divisors assumption (#12353)", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "support_mul_subset_left", ["function"]], ["add", "theorem", "support_mul_subset_right", ["function"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}]}, {"timestamp": 1646037113, "sha": "58c20c19", "message": "feat(measure_theory/group): add measures invariant under inversion/negation (#11954)\n* Define measures invariant under `inv` or `neg`\n* Prove lemmas about measures invariant under `inv` similar to the lemmas about measures invariant under `mul`\n* Also provide more `pi` instances in `arithmetic`.\n* Rename some `integral_zero...` lemmas to `integral_eq_zero...`\n* Reformulate `pi.is_mul_left_invariant_volume` using nondependent functions, so that type class inference can find it for `ι → ℝ`)\n* Add some more integration lemmas, also for multiplication", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "comp_measurable", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/group/integration.lean", "newPath": "src/measure_theory/group/integration.lean", "changes": [["add", "theorem", "comp_div_left", ["measure_theory", "integrable"]], ["add", "theorem", "comp_div_right", ["measure_theory", "integrable"]], ["add", "theorem", "comp_inv", ["measure_theory", "integrable"]], ["add", "theorem", "comp_mul_left", ["measure_theory", "integrable"]], ["add", "theorem", "comp_mul_right", ["measure_theory", "integrable"]], ["add", "theorem", "integral_div_left_eq_self", ["measure_theory"]], ["add", "theorem", "integral_eq_zero_of_mul_left_eq_neg", ["measure_theory"]], ["add", "theorem", "integral_eq_zero_of_mul_right_eq_neg", ["measure_theory"]], ["add", "theorem", "integral_inv_eq_self", ["measure_theory"]], ["del", "theorem", "integral_zero_of_mul_left_eq_neg", ["measure_theory"]], ["del", "theorem", "integral_zero_of_mul_right_eq_neg", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": [["add", "theorem", "map_div_right_eq_self", ["measure_theory"]], ["add", "theorem", "inv_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "map_div_left_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "map_inv_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "map_mul_right_inv_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "measure_inv", ["measure_theory", "measure"]], ["add", "theorem", "measure_preimage_inv", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_norm_eq_lintegral_nnnorm", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["del", "theorem", "map_volume_neg", ["real"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "map_id'", ["measure_theory", "measure"]]]}]}, {"timestamp": 1646015662, "sha": "f3a04eda", "message": "feat(group_theory/subgroup/basic): Centralizer subgroup (#11946)\nThis PR defines the centralizer subgroup, and provides a few basic lemmas.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "def", "centralizer", ["subgroup"]], ["add", "theorem", "centralizer_top", ["subgroup"]], ["add", "theorem", "mem_centralizer_iff", ["subgroup"]], ["add", "theorem", "mem_centralizer_iff_commutator_eq_one", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/group_theory/submonoid/centralizer.lean", "changes": [["add", "theorem", "add_mem_centralizer", ["set"]], ["add", "def", "centralizer", ["set"]], ["add", "theorem", "centralizer_eq_univ", ["set"]], ["add", "theorem", "centralizer_subset", ["set"]], ["add", "theorem", "centralizer_univ", ["set"]], ["add", "theorem", "div_mem_centralizer", ["set"]], ["add", "theorem", "div_mem_centralizer₀", ["set"]], ["add", "theorem", "inv_mem_centralizer", ["set"]], ["add", "theorem", "inv_mem_centralizer₀", ["set"]], ["add", "theorem", "mem_centralizer_iff", ["set"]], ["add", "theorem", "mul_mem_centralizer", ["set"]], ["add", "theorem", "neg_mem_centralizer", ["set"]], ["add", "theorem", "one_mem_centralizer", ["set"]], ["add", "theorem", "zero_mem_centralizer", ["set"]], ["add", "def", "centralizer", ["submonoid"]], ["add", "theorem", "centralizer_subset", ["submonoid"]], ["add", "theorem", "centralizer_univ", ["submonoid"]], ["add", "theorem", "coe_centralizer", ["submonoid"]], ["add", "theorem", "mem_centralizer_iff", ["submonoid"]]]}]}, {"timestamp": 1646003386, "sha": "2f86b497", "message": "doc(data/set_like/basic): tidy up docstring (#12337)\nHopefully this makes the docstring slightly clearer.", "changes": [{"oldPath": "src/data/set_like/basic.lean", "newPath": "src/data/set_like/basic.lean", "changes": []}]}, {"timestamp": 1646003385, "sha": "dfacfd34", "message": "chore(linear_algebra/basic): make `linear_map.id_coe` elegible for `dsimp` (#12334)\n`dsimp` only considers lemmas which _are_ proved by `rfl`, not ones that just _could_ be.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "id_coe", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}]}, {"timestamp": 1646001550, "sha": "f322fa0f", "message": "refactor(group_theory/solvable): Delete duplicate lemma (#12307)\n`map_commutator_eq_commutator_map` is a duplicate of `map_general_commutator`.\n(This is one of the several orthogonal changes from #12134)", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["del", "theorem", "map_commutator_eq_commutator_map", []]]}]}, {"timestamp": 1645999244, "sha": "7f52f94a", "message": "feat(analysis/complex): maximum modulus principle (#12050)", "changes": [{"oldPath": null, "newPath": "src/analysis/complex/abs_max.lean", "changes": [["add", "theorem", "eq_on_of_eq_on_frontier", ["complex"]], ["add", "theorem", "exists_mem_frontier_is_max_on_norm", ["complex"]], ["add", "theorem", "is_open_set_of_mem_nhds_and_is_max_on_norm", ["complex"]], ["add", "theorem", "norm_eq_norm_of_is_max_on_of_closed_ball_subset", ["complex"]], ["add", "theorem", "norm_eq_on_closed_ball_of_is_max_on", ["complex"]], ["add", "theorem", "norm_eventually_eq_of_is_local_max", ["complex"]], ["add", "theorem", "norm_le_of_forall_mem_frontier_norm_le", ["complex"]], ["add", "theorem", "norm_max_aux₁", ["complex"]], ["add", "theorem", "norm_max_aux₂", ["complex"]], ["add", "theorem", "norm_max_aux₃", ["complex"]]]}]}, {"timestamp": 1645997311, "sha": "b5faa34b", "message": "feat(analysis/complex/liouville): prove Liouville's theorem (#12095)", "changes": [{"oldPath": null, "newPath": "src/analysis/complex/liouville.lean", "changes": [["add", "theorem", "deriv_eq_smul_circle_integral", ["complex"]], ["add", "theorem", "liouville_theorem_aux", ["complex"]], ["add", "theorem", "norm_deriv_le_aux", ["complex"]], ["add", "theorem", "norm_deriv_le_of_forall_mem_sphere_norm_le", ["complex"]], ["add", "theorem", "apply_eq_apply_of_bounded", ["differentiable"]], ["add", "theorem", "exists_const_forall_eq_of_bounded", ["differentiable"]], ["add", "theorem", "exists_eq_const_of_bounded", ["differentiable"]]]}]}, {"timestamp": 1645992478, "sha": "a5ffb9b0", "message": "feat(analysis/special_functions): little o behaviour of exp/log at infinity (#11840)\nfrom the unit-fractions project", "changes": [{"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "is_o_pow_exp_at_top", ["real"]], ["mod", "theorem", "tendsto_div_pow_mul_exp_add_at_top", ["real"]], ["mod", "theorem", "tendsto_mul_exp_add_div_pow_at_top", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log.lean", "changes": [["add", "theorem", "is_o_pow_log_id_at_top", ["real"]], ["add", "theorem", "tendsto_pow_log_div_mul_add_at_top", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}]}, {"timestamp": 1645979555, "sha": "c4cf451a", "message": "fix(catgory_theory/limits): fix a typo (#12341)", "changes": [{"oldPath": "src/category_theory/limits/preserves/shapes/zero.lean", "newPath": "src/category_theory/limits/preserves/shapes/zero.lean", "changes": []}]}, {"timestamp": 1645977850, "sha": "8ef4331c", "message": "feat(ring_theory/witt_vector): Witt vectors are a DVR (#12213)\nThis PR adds two connected files. `mul_coeff.lean` adds an auxiliary result that's used in a few places in #12041 . One of these places is in `discrete_valuation_ring.lean`, which shows that Witt vectors over a perfect field form a DVR.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/discrete_valuation_ring.lean", "changes": [["add", "theorem", "coe_mk_unit", ["witt_vector"]], ["add", "theorem", "exists_eq_pow_p_mul'", ["witt_vector"]], ["add", "theorem", "exists_eq_pow_p_mul", ["witt_vector"]], ["add", "theorem", "irreducible", ["witt_vector"]], ["add", "theorem", "is_unit_of_coeff_zero_ne_zero", ["witt_vector"]], ["add", "def", "mk_unit", ["witt_vector"]], ["add", "def", "succ_nth_val_units", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/identities.lean", "newPath": "src/ring_theory/witt_vector/identities.lean", "changes": [["add", "theorem", "coeff_p", ["witt_vector"]], ["add", "theorem", "coeff_p_one", ["witt_vector"]], ["add", "theorem", "coeff_p_zero", ["witt_vector"]]]}, {"oldPath": null, "newPath": "src/ring_theory/witt_vector/mul_coeff.lean", "changes": [["add", "theorem", "mul_poly_of_interest_aux1", ["witt_vector"]], ["add", "theorem", "mul_poly_of_interest_aux2", ["witt_vector"]], ["add", "theorem", "mul_poly_of_interest_aux3", ["witt_vector"]], ["add", "theorem", "mul_poly_of_interest_aux4", ["witt_vector"]], ["add", "theorem", "mul_poly_of_interest_aux5", ["witt_vector"]], ["add", "theorem", "mul_poly_of_interest_vars", ["witt_vector"]], ["add", "theorem", "nth_mul_coeff'", ["witt_vector"]], ["add", "theorem", "nth_mul_coeff", ["witt_vector"]], ["add", "def", "nth_remainder", ["witt_vector"]], ["add", "theorem", "nth_remainder_spec", ["witt_vector"]], ["add", "theorem", "peval_poly_of_interest'", ["witt_vector"]], ["add", "theorem", "peval_poly_of_interest", ["witt_vector"]], ["add", "def", "poly_of_interest", ["witt_vector"]], ["add", "theorem", "poly_of_interest_vars", ["witt_vector"]], ["add", "theorem", "poly_of_interest_vars_eq", ["witt_vector"]], ["add", "def", "remainder", ["witt_vector"]], ["add", "theorem", "remainder_vars", ["witt_vector"]], ["add", "def", "witt_poly_prod", ["witt_vector"]], ["add", "def", "witt_poly_prod_remainder", ["witt_vector"]], ["add", "theorem", "witt_poly_prod_remainder_vars", ["witt_vector"]], ["add", "theorem", "witt_poly_prod_vars", ["witt_vector"]]]}]}, {"timestamp": 1645976155, "sha": "1dfb38d0", "message": "doc(imo*,algebra/continued_fractions/computation): change \\minus to - (#12338)\nChange around 14 instances of a non-standard minus to `-`.", "changes": [{"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "archive/imo/imo2005_q4.lean", "newPath": "archive/imo/imo2005_q4.lean", "changes": []}, {"oldPath": "archive/imo/imo2011_q5.lean", "newPath": "archive/imo/imo2011_q5.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}]}, {"timestamp": 1645971175, "sha": "00a3d02e", "message": "feat(geometry/euclidean/oriented_angle): oriented angles with respect to an orientation (#12236)\nAdd definitions and lemmas for oriented angles defined to take an\norientation, instead of an orthonormal basis, as an argument. These\nare the versions intended to be used by most users when working with\noriented angles between vectors, instead of users needing to deal with\na choice of basis.\nApart from the last five lemmas that relate angles and rotations for\ndifferent orientations or relate them explicitly to the definitions\nwith respect to a basis, everything is deduced directly from the\ncorresponding lemma that takes an orthonormal basis as an argument.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["add", "theorem", "det_rotation", ["orientation"]], ["add", "theorem", "eq_iff_norm_eq_and_oangle_eq_zero", ["orientation"]], ["add", "theorem", "eq_iff_norm_eq_of_oangle_eq_zero", ["orientation"]], ["add", "theorem", "eq_iff_oangle_eq_zero_of_norm_eq", ["orientation"]], ["add", "theorem", "eq_rotation_self_iff", ["orientation"]], ["add", "theorem", "eq_rotation_self_iff_angle_eq_zero", ["orientation"]], ["add", "theorem", "exists_linear_isometry_equiv_eq_of_det_pos", ["orientation"]], ["add", "theorem", "linear_equiv_det_rotation", ["orientation"]], ["add", "def", "oangle", ["orientation"]], ["add", "theorem", "oangle_add", ["orientation"]], ["add", "theorem", "oangle_add_cyc3", ["orientation"]], ["add", "theorem", "oangle_add_cyc3_neg_left", ["orientation"]], ["add", "theorem", "oangle_add_cyc3_neg_right", ["orientation"]], ["add", "theorem", "oangle_add_oangle_rev", ["orientation"]], ["add", "theorem", "oangle_add_oangle_rev_neg_left", ["orientation"]], ["add", "theorem", "oangle_add_oangle_rev_neg_right", ["orientation"]], ["add", "theorem", "oangle_add_swap", ["orientation"]], ["add", "theorem", "oangle_eq_basis_oangle", ["orientation"]], ["add", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_of_ne_zero", ["orientation"]], ["add", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_or_eq_zero", ["orientation"]], ["add", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_of_ne_zero", ["orientation"]], ["add", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_or_eq_zero", ["orientation"]], ["add", "theorem", "oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq", ["orientation"]], ["add", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq", ["orientation"]], ["add", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq_real", ["orientation"]], ["add", "theorem", "oangle_map", ["orientation"]], ["add", "theorem", "oangle_neg_left", ["orientation"]], ["add", "theorem", "oangle_neg_left_eq_neg_right", ["orientation"]], ["add", "theorem", "oangle_neg_neg", ["orientation"]], ["add", "theorem", "oangle_neg_orientation_eq_neg", ["orientation"]], ["add", "theorem", "oangle_neg_right", ["orientation"]], ["add", "theorem", "oangle_neg_self_left", ["orientation"]], ["add", "theorem", "oangle_neg_self_right", ["orientation"]], ["add", "theorem", "oangle_rev", ["orientation"]], ["add", "theorem", "oangle_rotation", ["orientation"]], ["add", "theorem", "oangle_rotation_left", ["orientation"]], ["add", "theorem", "oangle_rotation_oangle_left", ["orientation"]], ["add", "theorem", "oangle_rotation_oangle_right", ["orientation"]], ["add", "theorem", "oangle_rotation_right", ["orientation"]], ["add", "theorem", "oangle_rotation_self_left", ["orientation"]], ["add", "theorem", "oangle_rotation_self_right", ["orientation"]], ["add", "theorem", "oangle_self", ["orientation"]], ["add", "theorem", "oangle_smul_left_of_neg", ["orientation"]], ["add", "theorem", "oangle_smul_left_of_pos", ["orientation"]], ["add", "theorem", "oangle_smul_left_self_of_nonneg", ["orientation"]], ["add", "theorem", "oangle_smul_right_of_neg", ["orientation"]], ["add", "theorem", "oangle_smul_right_of_pos", ["orientation"]], ["add", "theorem", "oangle_smul_right_self_of_nonneg", ["orientation"]], ["add", "theorem", "oangle_smul_smul_self_of_nonneg", ["orientation"]], ["add", "theorem", "oangle_sub_eq_oangle_sub_rev_of_norm_eq", ["orientation"]], ["add", "theorem", "oangle_sub_left", ["orientation"]], ["add", "theorem", "oangle_sub_right", ["orientation"]], ["add", "theorem", "oangle_zero_left", ["orientation"]], ["add", "theorem", "oangle_zero_right", ["orientation"]], ["add", "def", "rotation", ["orientation"]], ["add", "theorem", "rotation_eq_basis_rotation", ["orientation"]], ["add", "theorem", "rotation_eq_self_iff", ["orientation"]], ["add", "theorem", "rotation_eq_self_iff_angle_eq_zero", ["orientation"]], ["add", "theorem", "rotation_neg_orientation_eq_neg", ["orientation"]], ["add", "theorem", "rotation_oangle_eq_iff_norm_eq", ["orientation"]], ["add", "theorem", "rotation_pi", ["orientation"]], ["add", "theorem", "rotation_symm", ["orientation"]], ["add", "theorem", "rotation_trans", ["orientation"]], ["add", "theorem", "rotation_zero", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_neg_left", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_neg_right", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_neg_self_left", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_neg_self_right", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_smul_left_of_ne_zero", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_smul_left_self", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_smul_right_of_ne_zero", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_smul_right_self", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_smul_smul_self", ["orientation"]], ["add", "theorem", "two_zsmul_oangle_sub_eq_two_zsmul_oangle_sub_of_norm_eq", ["orientation"]]]}]}, {"timestamp": 1645959458, "sha": "77e76ee5", "message": "feat(data/list/basic): add last'_append and head'_append_of_ne_nil (#12221)\nwe already have `head'_append` and `last'_append_of_ne_nil`, and users\nmight expect a symmetric API.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "head'_append_of_ne_nil", ["list"]], ["add", "theorem", "last'_append", ["list"]]]}]}, {"timestamp": 1645953222, "sha": "b1c2d70a", "message": "feat(logic/function/basic): not_surjective_Type (#12311)", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "not_surjective_Type", ["function"]]]}]}, {"timestamp": 1645951541, "sha": "7ae0b362", "message": "chore(category_theory/idempotents): minor suggestions (#12303)\n@joelriou, here are some minor suggestions on your earlier Karoubi envelope work (I wasn't around when the PR went through.)\nThe two separate suggestions are some typos, and dropping some unnecessary proofs.", "changes": [{"oldPath": "src/category_theory/idempotents/basic.lean", "newPath": "src/category_theory/idempotents/basic.lean", "changes": []}, {"oldPath": "src/category_theory/idempotents/karoubi.lean", "newPath": "src/category_theory/idempotents/karoubi.lean", "changes": []}]}, {"timestamp": 1645941611, "sha": "07374a27", "message": "feat(set_theory/cardinal): add three_le (#12225)", "changes": [{"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "le_card_sdiff", ["finset"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "exists_not_mem_of_length_le", ["cardinal"]], ["add", "theorem", "three_le", ["cardinal"]]]}]}, {"timestamp": 1645934835, "sha": "86d686cc", "message": "feat(category_theory/category/Groupoid): Add coercion to sort (#12324)\nUse coercion to type instead of `.α`", "changes": [{"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": [["add", "theorem", "coe_of", ["category_theory", "Groupoid"]]]}, {"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": [["mod", "def", "from_top", ["fundamental_groupoid"]], ["mod", "def", "to_path", ["fundamental_groupoid"]], ["mod", "def", "to_top", ["fundamental_groupoid"]]]}, {"oldPath": "src/topology/homotopy/product.lean", "newPath": "src/topology/homotopy/product.lean", "changes": [["mod", "def", "pi_iso", ["fundamental_groupoid_functor"]], ["mod", "def", "pi_to_pi_Top", ["fundamental_groupoid_functor"]], ["mod", "def", "prod_iso", ["fundamental_groupoid_functor"]], ["mod", "def", "prod_to_prod_Top", ["fundamental_groupoid_functor"]], ["mod", "def", "proj", ["fundamental_groupoid_functor"]], ["mod", "def", "proj_left", ["fundamental_groupoid_functor"]], ["mod", "theorem", "proj_left_map", ["fundamental_groupoid_functor"]], ["mod", "theorem", "proj_map", ["fundamental_groupoid_functor"]], ["mod", "def", "proj_right", ["fundamental_groupoid_functor"]], ["mod", "theorem", "proj_right_map", ["fundamental_groupoid_functor"]]]}]}, {"timestamp": 1645934834, "sha": "907e5ba4", "message": "fix(set_theory/ordinal_arithmetic): Fix universes (#12320)\n`lsub_le_of_range_subset` and `lsub_eq_of_range_eq` should have had 3 universes, but they had only two.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1645934833, "sha": "906a88bd", "message": "feat(data/quot): primed quotient funcs on `mk` (#12204)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "map'_mk", ["quotient"]]]}]}, {"timestamp": 1645929905, "sha": "4afb8d29", "message": "feat(set_theory/ordinal_arithmetic): Added missing theorems for `lsub` and `blsub` (#12318)\nThese are the analogs of `lt_sup` and `lt_bsup`, respectively.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "lt_blsub_iff", ["ordinal"]], ["add", "theorem", "lt_lsub_iff", ["ordinal"]]]}]}, {"timestamp": 1645929904, "sha": "bb9539cf", "message": "chore(set_theory/ordinal): Minor golf in `card` (#12298)\nThis was suggested by @b-mehta.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1645929902, "sha": "b4f87d99", "message": "feat(analysis/normed_space): add `normed_space 𝕜 (uniform_space.completion E)` (#12148)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "lipschitz_with_smul", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/completion.lean", "changes": [["add", "theorem", "coe_to_complL", ["uniform_space", "completion"]], ["add", "theorem", "coe_to_complₗᵢ", ["uniform_space", "completion"]], ["add", "theorem", "norm_to_complL", ["uniform_space", "completion"]], ["add", "def", "to_complL", ["uniform_space", "completion"]], ["add", "def", "to_complₗᵢ", ["uniform_space", "completion"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/uniform_mul_action.lean", "changes": [["add", "theorem", "const_smul", ["uniform_continuous"]], ["add", "theorem", "coe_smul", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["add", "theorem", "ext'", ["uniform_space", "completion"]]]}]}, {"timestamp": 1645924445, "sha": "abf5dfca", "message": "refactor(category_theory/eq_to_hom): conjugation by eq_to_hom same as heq (#12025)\nXu Junyan provided this lemma for showing that `heq` gives the same as conjugation by `eq_to_hom` for equality of functor maps. I refactored `hext` using this result.\nThen I added a bunch of lemmas for how `heq` interacts with composition of functors and `functor.map` applied to composition of morphisms", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "conj_eq_to_hom_iff_heq", ["category_theory", "functor"]], ["add", "theorem", "hcongr_hom", ["category_theory", "functor"]], ["add", "theorem", "map_comp_heq'", ["category_theory", "functor"]], ["add", "theorem", "map_comp_heq", ["category_theory", "functor"]], ["add", "theorem", "postcomp_map_heq'", ["category_theory", "functor"]], ["add", "theorem", "postcomp_map_heq", ["category_theory", "functor"]], ["add", "theorem", "precomp_map_heq", ["category_theory", "functor"]]]}]}, {"timestamp": 1645924444, "sha": "1fe9708e", "message": "feat(group_theory/nilpotent): is_nilpotent_of_product_of_sylow_group (#11834)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_of_product_of_sylow_group", []], ["mod", "theorem", "is_nilpotent", ["is_p_group"]], ["add", "theorem", "nilpotent_of_mul_equiv", []]]}]}, {"timestamp": 1645918318, "sha": "add068d1", "message": "chore(linear_algebra/orientation): split into 2 files (#12302)\nMove parts that don't need multilinear maps to a new file.", "changes": [{"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["del", "theorem", "eq_zero_of_same_ray_self_neg", []], ["del", "theorem", "equiv_iff_same_ray", []], ["del", "theorem", "equivalence_same_ray", []], ["del", "theorem", "ind", ["module", "ray"]], ["del", "theorem", "linear_equiv_smul_eq_map", ["module", "ray"]], ["del", "def", "map", ["module", "ray"]], ["del", "theorem", "map_apply", ["module", "ray"]], ["del", "theorem", "map_refl", ["module", "ray"]], ["del", "theorem", "map_symm", ["module", "ray"]], ["del", "theorem", "ne_neg_self", ["module", "ray"]], ["del", "def", "some_ray_vector", ["module", "ray"]], ["del", "theorem", "some_ray_vector_ray", ["module", "ray"]], ["del", "def", "some_vector", ["module", "ray"]], ["del", "theorem", "some_vector_ne_zero", ["module", "ray"]], ["del", "theorem", "some_vector_ray", ["module", "ray"]], ["del", "theorem", "units_smul_of_neg", ["module", "ray"]], ["del", "theorem", "units_smul_of_pos", ["module", "ray"]], ["del", "def", "ray", ["module"]], ["del", "theorem", "ray_eq_iff", []], ["del", "theorem", "ray_neg", []], ["del", "theorem", "ray_pos_smul", []], ["del", "theorem", "coe_neg", ["ray_vector"]], ["del", "theorem", "equiv_neg_iff", ["ray_vector"]], ["del", "def", "map_linear_equiv", ["ray_vector"]], ["del", "def", "same_ray_setoid", ["ray_vector"]], ["del", "def", "ray_vector", []], ["del", "theorem", "map", ["same_ray"]], ["del", "theorem", "neg", ["same_ray"]], ["del", "theorem", "pos_smul_left", ["same_ray"]], ["del", "theorem", "pos_smul_right", ["same_ray"]], ["del", "theorem", "refl", ["same_ray"]], ["del", "theorem", "smul", ["same_ray"]], ["del", "theorem", "symm", ["same_ray"]], ["del", "theorem", "trans", ["same_ray"]], ["del", "def", "same_ray", []], ["del", "theorem", "same_ray_comm", []], ["del", "theorem", "same_ray_iff_mem_orbit", []], ["del", "theorem", "same_ray_map_iff", []], ["del", "theorem", "same_ray_neg_iff", []], ["del", "theorem", "same_ray_neg_smul_left_iff", []], ["del", "theorem", "same_ray_neg_smul_right_iff", []], ["del", "theorem", "same_ray_neg_swap", []], ["del", "theorem", "same_ray_of_mem_orbit", []], ["del", "theorem", "same_ray_pos_smul_left", []], ["del", "theorem", "same_ray_pos_smul_right", []], ["del", "def", "same_ray_setoid", []], ["del", "theorem", "same_ray_setoid_eq_orbit_rel", []], ["del", "theorem", "same_ray_smul_left_iff", []], ["del", "theorem", "same_ray_smul_right_iff", []], ["del", "theorem", "smul_ray_of_ne_zero", []], ["del", "theorem", "units_inv_smul", []], ["del", "theorem", "units_smul_eq_neg_iff", []], ["del", "theorem", "units_smul_eq_self_iff", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/ray.lean", "changes": [["add", "theorem", "eq_zero_of_same_ray_self_neg", []], ["add", "theorem", "equiv_iff_same_ray", []], ["add", "theorem", "equivalence_same_ray", []], ["add", "theorem", "ind", ["module", "ray"]], ["add", "theorem", "linear_equiv_smul_eq_map", ["module", "ray"]], ["add", "def", "map", ["module", "ray"]], ["add", "theorem", "map_apply", ["module", "ray"]], ["add", "theorem", "map_refl", ["module", "ray"]], ["add", "theorem", "map_symm", ["module", "ray"]], ["add", "theorem", "ne_neg_self", ["module", "ray"]], ["add", "def", "some_ray_vector", ["module", "ray"]], ["add", "theorem", "some_ray_vector_ray", ["module", "ray"]], ["add", "def", "some_vector", ["module", "ray"]], ["add", "theorem", "some_vector_ne_zero", ["module", "ray"]], ["add", "theorem", "some_vector_ray", ["module", "ray"]], ["add", "theorem", "units_smul_of_neg", ["module", "ray"]], ["add", "theorem", "units_smul_of_pos", ["module", "ray"]], ["add", "def", "ray", ["module"]], ["add", "theorem", "ray_eq_iff", []], ["add", "theorem", "ray_neg", []], ["add", "theorem", "ray_pos_smul", []], ["add", "theorem", "coe_neg", ["ray_vector"]], ["add", "theorem", "equiv_neg_iff", ["ray_vector"]], ["add", "def", "map_linear_equiv", ["ray_vector"]], ["add", "def", "same_ray_setoid", ["ray_vector"]], ["add", "def", "ray_vector", []], ["add", "theorem", "map", ["same_ray"]], ["add", "theorem", "neg", ["same_ray"]], ["add", "theorem", "pos_smul_left", ["same_ray"]], ["add", "theorem", "pos_smul_right", ["same_ray"]], ["add", "theorem", "refl", ["same_ray"]], ["add", "theorem", "smul", ["same_ray"]], ["add", "theorem", "symm", ["same_ray"]], ["add", "theorem", "trans", ["same_ray"]], ["add", "def", "same_ray", []], ["add", "theorem", "same_ray_comm", []], ["add", "theorem", "same_ray_iff_mem_orbit", []], ["add", "theorem", "same_ray_map_iff", []], ["add", "theorem", "same_ray_neg_iff", []], ["add", "theorem", "same_ray_neg_smul_left_iff", []], ["add", "theorem", "same_ray_neg_smul_right_iff", []], ["add", "theorem", "same_ray_neg_swap", []], ["add", "theorem", "same_ray_of_mem_orbit", []], ["add", "theorem", "same_ray_pos_smul_left", []], ["add", "theorem", "same_ray_pos_smul_right", []], ["add", "def", "same_ray_setoid", []], ["add", "theorem", "same_ray_setoid_eq_orbit_rel", []], ["add", "theorem", "same_ray_smul_left_iff", []], ["add", "theorem", "same_ray_smul_right_iff", []], ["add", "theorem", "smul_ray_of_ne_zero", []], ["add", "theorem", "units_inv_smul", []], ["add", "theorem", "units_smul_eq_neg_iff", []], ["add", "theorem", "units_smul_eq_self_iff", []]]}]}, {"timestamp": 1645918317, "sha": "188b371b", "message": "feat(algebra/category/GroupWithZero): The category of groups with zero (#12278)\nDefine `GroupWithZero`, the category of groups with zero with monoid with zero homs.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/GroupWithZero.lean", "changes": [["add", "def", "mk", ["GroupWithZero", "iso"]], ["add", "def", "of", ["GroupWithZero"]], ["add", "def", "GroupWithZero", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}]}, {"timestamp": 1645918315, "sha": "163d1a6d", "message": "feat(category_theory/idempotents): idempotent completeness and functor categories (#12270)", "changes": [{"oldPath": null, "newPath": "src/category_theory/idempotents/functor_categories.lean", "changes": [["add", "def", "map", ["category_theory", "idempotents", "karoubi_functor_category_embedding"]], ["add", "def", "obj", ["category_theory", "idempotents", "karoubi_functor_category_embedding"]], ["add", "def", "karoubi_functor_category_embedding", ["category_theory", "idempotents"]], ["add", "theorem", "to_karoubi_comp_karoubi_functor_category_embedding", ["category_theory", "idempotents"]]]}, {"oldPath": null, "newPath": "src/category_theory/idempotents/simplicial_object.lean", "changes": []}]}, {"timestamp": 1645918313, "sha": "817b4c4b", "message": "feat(order/category/BoundedLattice): The category of bounded lattices (#12257)\nDefine `BoundedLattice`, the category of bounded lattices with bounded lattice homs.", "changes": [{"oldPath": null, "newPath": "src/order/category/BoundedLattice.lean", "changes": [["add", "def", "dual", ["BoundedLattice"]], ["add", "def", "dual_equiv", ["BoundedLattice"]], ["add", "theorem", "forget_Lattice_PartialOrder_eq_forget_BoundedOrder_PartialOrder", ["BoundedLattice"]], ["add", "def", "mk", ["BoundedLattice", "iso"]], ["add", "def", "of", ["BoundedLattice"]], ["add", "structure", "BoundedLattice", []], ["add", "theorem", "BoundedLattice_dual_comp_forget_to_BoundedOrder", []], ["add", "theorem", "BoundedLattice_dual_comp_forget_to_Lattice", []]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": []}]}, {"timestamp": 1645913019, "sha": "3d8c22fd", "message": "refactor(topology/compact_open): Remove `locally_compact_space` hypothesis in `continuous_map.t2_space` (#12306)\nThis PR removes the `locally_compact_space` hypothesis in `continuous_map.t2_space`, at the cost of a longer proof.", "changes": [{"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}]}, {"timestamp": 1645908945, "sha": "4cf0e600", "message": "feat(category_theory/limits): generalize has_biproduct.of_has_product (#12116)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "bicone_is_bilimit_of_colimit_cocone_of_is_colimit", ["category_theory", "limits"]], ["add", "def", "bicone_is_bilimit_of_limit_cone_of_is_limit", ["category_theory", "limits"]], ["add", "theorem", "binary_cofan_inl_to_cocone", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "binary_cofan_inr_to_cocone", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "binary_fan_fst_to_cone", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "binary_fan_snd_to_cone", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "of_colimit_cocone", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "of_limit_cone", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "binary_bicone_is_bilimit_of_colimit_cocone_of_is_colimit", ["category_theory", "limits"]], ["add", "def", "binary_bicone_is_bilimit_of_limit_cone_of_is_limit", ["category_theory", "limits"]], ["add", "theorem", "fst_of_is_colimit", ["category_theory", "limits"]], ["mod", "theorem", "of_has_coproduct", ["category_theory", "limits", "has_biproduct"]], ["mod", "theorem", "of_has_product", ["category_theory", "limits", "has_biproduct"]], ["add", "theorem", "inl_of_is_limit", ["category_theory", "limits"]], ["add", "theorem", "inr_of_is_limit", ["category_theory", "limits"]], ["add", "def", "is_bilimit_of_is_colimit", ["category_theory", "limits"]], ["add", "def", "is_bilimit_of_is_limit", ["category_theory", "limits"]], ["add", "def", "is_bilimit_of_total", ["category_theory", "limits"]], ["add", "def", "is_binary_bilimit_of_is_colimit", ["category_theory", "limits"]], ["add", "def", "is_binary_bilimit_of_is_limit", ["category_theory", "limits"]], ["add", "def", "is_binary_bilimit_of_total", ["category_theory", "limits"]], ["add", "theorem", "snd_of_is_colimit", ["category_theory", "limits"]]]}]}, {"timestamp": 1645908944, "sha": "09ba5304", "message": "feat(category_theory/limits): biproducts are unique up to iso (#12114)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "theorem", "cone_point_unique_up_to_iso_hom", ["category_theory", "limits", "biprod"]], ["add", "theorem", "cone_point_unique_up_to_iso_inv", ["category_theory", "limits", "biprod"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "biprod"]], ["add", "theorem", "cone_point_unique_up_to_iso_hom", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "cone_point_unique_up_to_iso_inv", ["category_theory", "limits", "biproduct"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "biproduct"]]]}]}, {"timestamp": 1645907030, "sha": "fe6ea3ec", "message": "feat(analysis/convex/integral): strict Jensen's inequality (#11552)", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["add", "theorem", "average_mem_interior_of_set", ["convex"]], ["add", "theorem", "ae_eq_const_or_exists_average_ne_compl", ["measure_theory", "integrable"]], ["add", "theorem", "ae_eq_const_or_lt_map_average", ["strict_concave_on"]], ["add", "theorem", "ae_eq_const_or_average_mem_interior", ["strict_convex"]], ["add", "theorem", "ae_eq_const_or_norm_integral_lt_of_norm_le_const", ["strict_convex"]], ["add", "theorem", "ae_eq_const_or_map_average_lt", ["strict_convex_on"]]]}]}, {"timestamp": 1645904344, "sha": "c8150ccf", "message": "feat(analysis/normed_space/add_torsor): `dist` and `line_map` (#12265)\nAdd a few lemmas about the distance between `line_map p₁ p₂ c₁` and\n`line_map p₁ p₂ c₂`.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "dist_left_line_map", []], ["add", "theorem", "dist_line_map_left", []], ["add", "theorem", "dist_line_map_line_map", []], ["add", "theorem", "dist_line_map_right", []], ["add", "theorem", "dist_right_line_map", []], ["add", "theorem", "lipschitz_with_line_map", []]]}]}, {"timestamp": 1645894439, "sha": "3b49fe25", "message": "feat(algebra/star/pointwise, algebra/star/basic): add pointwise star, and a few convenience lemmas (#12290)\nThis adds a star operation to sets in the pointwise locale and establishes the basic properties. The names and proofs were taken from the corresponding ones for `inv`. A few extras were added.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "eq_star_iff_eq_star", []], ["add", "theorem", "eq_star_of_eq_star", []], ["add", "theorem", "star_eq_iff_star_eq", []]]}, {"oldPath": null, "newPath": "src/algebra/star/pointwise.lean", "changes": [["add", "theorem", "Inter_star", ["set"]], ["add", "theorem", "Union_star", ["set"]], ["add", "theorem", "compl_star", ["set"]], ["add", "theorem", "star", ["set", "finite"]], ["add", "theorem", "image_star", ["set"]], ["add", "theorem", "inter_star", ["set"]], ["add", "theorem", "mem_star", ["set"]], ["add", "theorem", "star", ["set", "nonempty"]], ["add", "theorem", "nonempty_star", ["set"]], ["add", "theorem", "star_empty", ["set"]], ["add", "theorem", "star_mem_star", ["set"]], ["add", "theorem", "star_preimage", ["set"]], ["add", "theorem", "star_singleton", ["set"]], ["add", "theorem", "star_subset", ["set"]], ["add", "theorem", "star_subset_star", ["set"]], ["add", "theorem", "star_univ", ["set"]], ["add", "theorem", "union_star", ["set"]]]}]}, {"timestamp": 1645892291, "sha": "87fc3eae", "message": "feat(analysis/normed_space/star/spectrum): prove the spectrum of a unitary element in a C*-algebra is a subset of the unit sphere (#12238)\nThe spectrum of a unitary element in a C*-algebra is a subset of the unit sphere in the scalar field. This will be used to show that the spectrum of selfadjoint elements is real-valued.", "changes": [{"oldPath": "src/analysis/normed_space/star/spectrum.lean", "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["add", "theorem", "subset_circle_of_unitary", ["spectrum"]], ["add", "theorem", "spectrum_subset_circle", ["unitary"]]]}]}, {"timestamp": 1645881806, "sha": "0f1bc2c0", "message": "feat(topology,analysis): any function is continuous/differentiable on a subsingleton (#12293)\nAlso add supporting lemmas about `is_o`/`is_O` and the `pure` filter\nand drop an unneeded assumption in `asymptotics.is_o_const_const_iff`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_O_const_const_iff", ["asymptotics"]], ["add", "theorem", "is_O_pure", ["asymptotics"]], ["add", "theorem", "is_O_with_pure", ["asymptotics"]], ["mod", "theorem", "is_o_const_const_iff", ["asymptotics"]], ["add", "theorem", "is_o_pure", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "differentiable_on_empty", []], ["add", "theorem", "differentiable_on_singleton", []], ["mod", "theorem", "has_fderiv_at_of_subsingleton", []], ["add", "theorem", "has_fderiv_within_at_singleton", []], ["add", "theorem", "differentiable_on", ["set", "subsingleton"]]]}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_on_singleton", []], ["add", "theorem", "continuous_on", ["set", "subsingleton"]]]}]}, {"timestamp": 1645875632, "sha": "bfc05842", "message": "refactor(topology,analysis): use `maps_to` in lemmas like `continuous_on.comp` (#12294)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "mono", ["set", "maps_to"]], ["add", "theorem", "mono_left", ["set", "maps_to"]], ["add", "theorem", "mono_right", ["set", "maps_to"]]]}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "continuous_on_symm", ["model_with_corners"]]]}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}]}, {"timestamp": 1645873429, "sha": "d2d6f178", "message": "feat(analysis/inner_product_space/spectrum): `has_eigenvalue_eigenvalues` (#12304)\nsimilar to the existing `has_eigenvector_eigenvector_basis`", "changes": [{"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["add", "theorem", "has_eigenvalue_eigenvalues", ["inner_product_space", "is_self_adjoint"]]]}]}, {"timestamp": 1645846144, "sha": "d6a8e5d7", "message": "feat(topology/compact_open): `simp`-lemmas for `compact_open.gen` (#12267)\nThis PR adds some basic `simp`-lemmas for `compact_open.gen`.", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "gen_empty", ["continuous_map"]], ["add", "theorem", "gen_inter", ["continuous_map"]], ["add", "theorem", "gen_union", ["continuous_map"]], ["add", "theorem", "gen_univ", ["continuous_map"]]]}]}, {"timestamp": 1645846143, "sha": "7201c3b4", "message": "feat(category_theory/limits): more opposite-related transformations of cones (#12165)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "cocone_of_cone_right_op", ["category_theory", "limits"]], ["add", "def", "cocone_of_cone_unop", ["category_theory", "limits"]], ["add", "def", "cocone_right_op_of_cone", ["category_theory", "limits"]], ["add", "def", "cocone_unop_of_cone", ["category_theory", "limits"]], ["add", "def", "cone_of_cocone_right_op", ["category_theory", "limits"]], ["add", "def", "cone_of_cocone_unop", ["category_theory", "limits"]], ["add", "def", "cone_right_op_of_cocone", ["category_theory", "limits"]], ["add", "def", "cone_unop_of_cocone", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1645843454, "sha": "43fb5162", "message": "doc(analysis/normed_space): fixed normed_star_monoid doc-string (#12296)", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}]}, {"timestamp": 1645827796, "sha": "05d8188c", "message": "feat(group_theory/torsion): define torsion groups (#11850)\nI grepped for torsion group and didn't find anything -- hopefully adding this makes sense here.", "changes": [{"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": [["mod", "theorem", "exponent_eq_zero_iff", ["monoid"]], ["add", "theorem", "exponent_exists_iff_ne_zero", ["monoid"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "quotient", ["is_of_fin_order"]], ["add", "theorem", "is_of_fin_order_iff_coe", []]]}, {"oldPath": null, "newPath": "src/group_theory/torsion.lean", "changes": [["add", "theorem", "is_torsion", ["exponent_exists"]], ["add", "theorem", "exponent_exists", ["is_torsion"]], ["add", "theorem", "quotient_group", ["is_torsion"]], ["add", "theorem", "subgroup", ["is_torsion"]], ["add", "theorem", "is_torsion_of_fintype", []], ["add", "def", "is_torsion", ["monoid"]]]}]}, {"timestamp": 1645820036, "sha": "3cc9ac40", "message": "feat(analysis/normed_space/finite_dimension): add a lemma about `inf_dist` (#12282)\nAdd a version of `exists_mem_frontier_inf_dist_compl_eq_dist` for a\ncompact set in a real normed space. This version does not assume that\nthe ambient space is finite dimensional.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["mod", "theorem", "finite_dimensional_of_is_compact_closed_ball", []], ["add", "theorem", "finite_dimensional_of_is_compact_closed_ball₀", []], ["add", "theorem", "exists_mem_frontier_inf_dist_compl_eq_dist", ["is_compact"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "inf_dist_zero_of_mem_closure", ["metric"]]]}]}, {"timestamp": 1645815004, "sha": "c127fc36", "message": "chore(measure_theory/decomposition/lebesgue): tidy a proof (#12274)\nThere's no need to go through `set_integral_re_add_im` when all we need is `integral_re`.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "im_eq_complex_im", ["is_R_or_C"]], ["add", "theorem", "re_eq_complex_re", ["is_R_or_C"]]]}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}]}, {"timestamp": 1645808208, "sha": "6653544f", "message": "feat(topology/algebra/order/extr): extr on closure (#12281)\nProve `is_max_on.closure` etc", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/order/extr_closure.lean", "changes": []}]}, {"timestamp": 1645784296, "sha": "8c485a4c", "message": "feat(order/filter/extr): add `is_*_on.comp_maps_to` (#12280)", "changes": [{"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["add", "theorem", "comp_maps_to", ["is_extr_on"]], ["add", "theorem", "comp_maps_to", ["is_max_on"]], ["add", "theorem", "comp_maps_to", ["is_min_on"]]]}]}, {"timestamp": 1645774787, "sha": "c1443d66", "message": "feat(ring_theory/localization): random lemmata for edge cases (#12146)", "changes": [{"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "bijective", ["unique"]]]}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/fraction_ring.lean", "newPath": "src/ring_theory/localization/fraction_ring.lean", "changes": []}]}, {"timestamp": 1645772870, "sha": "dae1dfe9", "message": "feat(topology/spectral/hom): Spectral maps (#12228)\nDefine spectral maps in three ways:\n* `is_spectral_map`, the unbundled predicate\n* `spectral_map`, the bundled type\n* `spectral_map_class`, the hom class\nThe design for `is_spectral_map` matches `continuous`. The design for `spectral_map` and `spectral_map_class` follows the hom refactor.", "changes": [{"oldPath": null, "newPath": "src/topology/spectral/hom.lean", "changes": [["add", "theorem", "preimage_of_open", ["is_compact"]], ["add", "theorem", "comp", ["is_spectral_map"]], ["add", "theorem", "continuous", ["is_spectral_map"]], ["add", "structure", "is_spectral_map", []], ["add", "theorem", "is_spectral_map_id", []], ["add", "theorem", "cancel_left", ["spectral_map"]], ["add", "theorem", "cancel_right", ["spectral_map"]], ["add", "theorem", "coe_comp", ["spectral_map"]], ["add", "theorem", "coe_comp_continuous_map", ["spectral_map"]], ["add", "theorem", "coe_id", ["spectral_map"]], ["add", "def", "comp", ["spectral_map"]], ["add", "theorem", "comp_apply", ["spectral_map"]], ["add", "theorem", "comp_assoc", ["spectral_map"]], ["add", "theorem", "comp_id", ["spectral_map"]], ["add", "theorem", "ext", ["spectral_map"]], ["add", "theorem", "id_apply", ["spectral_map"]], ["add", "theorem", "id_comp", ["spectral_map"]], ["add", "def", "to_continuous_map", ["spectral_map"]], ["add", "theorem", "to_fun_eq_coe", ["spectral_map"]], ["add", "structure", "spectral_map", []]]}]}, {"timestamp": 1645766718, "sha": "f2fdef6f", "message": "feat(order/partition/equipartition): Equipartitions (#12023)\nDefine `finpartition.is_equipartition`, a predicate for saying that the parts of a `finpartition` of a `finset` are all the same size up to a difference of `1`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subsingleton_of_subset_singleton", ["set"]]]}, {"oldPath": "src/data/set/equitable.lean", "newPath": "src/data/set/equitable.lean", "changes": [["add", "theorem", "le", ["finset", "equitable_on"]], ["add", "theorem", "le_add_one", ["finset", "equitable_on"]], ["mod", "theorem", "equitable_on_iff", ["finset"]], ["mod", "theorem", "equitable_on_iff_le_le_add_one", ["finset"]]]}, {"oldPath": null, "newPath": "src/order/partition/equipartition.lean", "changes": [["add", "theorem", "bot_is_equipartition", ["finpartition"]], ["add", "theorem", "indiscrete_is_equipartition", ["finpartition"]], ["add", "theorem", "average_le_card_part", ["finpartition", "is_equipartition"]], ["add", "theorem", "card_part_le_average_add_one", ["finpartition", "is_equipartition"]], ["add", "def", "is_equipartition", ["finpartition"]], ["add", "theorem", "is_equipartition_iff_card_parts_eq_average", ["finpartition"]], ["add", "theorem", "top_is_equipartition", ["finpartition"]], ["add", "theorem", "is_equipartition", ["set", "subsingleton"]]]}, {"oldPath": "src/order/partition/finpartition.lean", "newPath": "src/order/partition/finpartition.lean", "changes": [["add", "theorem", "parts_top_subset", ["finpartition"]], ["add", "theorem", "parts_top_subsingleton", ["finpartition"]]]}]}, {"timestamp": 1645758310, "sha": "605ea9f3", "message": "feat(algebra/symmetrized): Define the symmetrization of a ring (#11399)\nA commutative multiplication on a real or complex space can be constructed from any multiplication by\n\"symmetrisation\" i.e\n```\na∘b = 1/2(ab+ba).\n```\nThe approach taken here is inspired by `algebra.opposites`.\nPreviously submitted as part of #11073.\nWill be used in https://github.com/leanprover-community/mathlib/pull/11401", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebra/symmetrized.lean", "changes": [["add", "theorem", "inv_of_sym", ["sym_alg"]], ["add", "theorem", "mul_comm", ["sym_alg"]], ["add", "theorem", "mul_def", ["sym_alg"]], ["add", "def", "sym", ["sym_alg"]], ["add", "theorem", "sym_add", ["sym_alg"]], ["add", "theorem", "sym_bijective", ["sym_alg"]], ["add", "theorem", "sym_comp_unsym", ["sym_alg"]], ["add", "theorem", "sym_eq_one_iff", ["sym_alg"]], ["add", "def", "sym_equiv", ["sym_alg"]], ["add", "theorem", "sym_inj", ["sym_alg"]], ["add", "theorem", "sym_injective", ["sym_alg"]], ["add", "theorem", "sym_inv", ["sym_alg"]], ["add", "theorem", "sym_mul_self", ["sym_alg"]], ["add", "theorem", "sym_mul_sym", ["sym_alg"]], ["add", "theorem", "sym_ne_one_iff", ["sym_alg"]], ["add", "theorem", "sym_neg", ["sym_alg"]], ["add", "theorem", "sym_one", ["sym_alg"]], ["add", "theorem", "sym_smul", ["sym_alg"]], ["add", "theorem", "sym_sub", ["sym_alg"]], ["add", "theorem", "sym_surjective", ["sym_alg"]], ["add", "theorem", "sym_unsym", ["sym_alg"]], ["add", "def", "unsym", ["sym_alg"]], ["add", "theorem", "unsym_add", ["sym_alg"]], ["add", "theorem", "unsym_bijective", ["sym_alg"]], ["add", "theorem", "unsym_comp_sym", ["sym_alg"]], ["add", "theorem", "unsym_eq_one_iff", ["sym_alg"]], ["add", "theorem", "unsym_inj", ["sym_alg"]], ["add", "theorem", "unsym_injective", ["sym_alg"]], ["add", "theorem", "unsym_inv", ["sym_alg"]], ["add", "theorem", "unsym_mul", ["sym_alg"]], ["add", "theorem", "unsym_mul_self", ["sym_alg"]], ["add", "theorem", "unsym_ne_one_iff", ["sym_alg"]], ["add", "theorem", "unsym_neg", ["sym_alg"]], ["add", "theorem", "unsym_one", ["sym_alg"]], ["add", "theorem", "unsym_smul", ["sym_alg"]], ["add", "theorem", "unsym_sub", ["sym_alg"]], ["add", "theorem", "unsym_surjective", ["sym_alg"]], ["add", "theorem", "unsym_sym", ["sym_alg"]], ["add", "def", "sym_alg", []]]}]}, {"timestamp": 1645732902, "sha": "f7518dbe", "message": "chore(topology/continuous_function/bounded): add an is_central_scalar instance (#12272)\nThis is only possible very recently now that `𝕜ᵐᵒᵖ` has a metric space instance.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1645732901, "sha": "feb54736", "message": "chore(*): update to 3.40.0c (#12212)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1645727077, "sha": "d3d37017", "message": "feat(analysis/mean_inequalities): AM and GM are equal on a constant tuple (#12179)\nThe converse is also true, but I have not gotten around to proving it.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "arith_mean_weighted_of_constant", ["real"]], ["add", "theorem", "geom_mean_eq_arith_mean_weighted_of_constant", ["real"]], ["add", "theorem", "geom_mean_weighted_of_constant", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "rpow_add'", ["real"]], ["mod", "theorem", "rpow_add", ["real"]], ["add", "theorem", "rpow_add_of_nonneg", ["real"]], ["add", "theorem", "rpow_sum_of_nonneg", ["real"]], ["add", "theorem", "rpow_sum_of_pos", ["real"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "filter_nonempty_iff", ["finset"]], ["add", "theorem", "forall_mem_cons", ["finset"]], ["add", "theorem", "mem_of_mem_filter", ["finset"]]]}]}, {"timestamp": 1645719633, "sha": "d620395d", "message": "feat(topology/algebra/group): homeomorphisms for div (#12251)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "def", "div_left", ["homeomorph"]], ["add", "def", "div_right", ["homeomorph"]]]}]}, {"timestamp": 1645719632, "sha": "ed9f73ca", "message": "feat(order/conditionally_complete_lattice.lean): two new lemmas (#12250)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cinfi_set_le", []], ["add", "theorem", "le_csupr_set", []]]}]}, {"timestamp": 1645713541, "sha": "08406293", "message": "test(instance_diamonds): verify that restrict_scalars produces no diamonds on the complex numbers (#12273)\nThere is already a comment on `complex.module` that indicates an intentional solution to this diamond.", "changes": [{"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1645713539, "sha": "a0d2c439", "message": "feat(algebra/punit_instances): mul_semiring_action (#12271)\nThe timeouts mentioned in the file appear to no longer occur.", "changes": [{"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}]}, {"timestamp": 1645713537, "sha": "9dca6f42", "message": "feat(topology/metric_space/lipschitz): add `set.maps_to` lemmas (#12266)", "changes": [{"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["mod", "theorem", "bounded_image", ["lipschitz_with"]], ["mod", "theorem", "diam_image_le", ["lipschitz_with"]], ["add", "theorem", "dist_le_mul_of_le", ["lipschitz_with"]], ["add", "theorem", "dist_lt_mul_of_lt", ["lipschitz_with"]], ["add", "theorem", "edist_le_mul_of_le", ["lipschitz_with"]], ["add", "theorem", "edist_lt_mul_of_lt", ["lipschitz_with"]], ["add", "theorem", "maps_to_ball", ["lipschitz_with"]], ["add", "theorem", "maps_to_closed_ball", ["lipschitz_with"]], ["add", "theorem", "maps_to_emetric_ball", ["lipschitz_with"]], ["add", "theorem", "maps_to_emetric_closed_ball", ["lipschitz_with"]], ["mod", "theorem", "nndist_le", ["lipschitz_with"]]]}]}, {"timestamp": 1645713535, "sha": "d011bf20", "message": "chore(measure_theory/function/uniform_integrable): replace `ℕ` by a type verifying enough assumptions (#12242)\nThis PR does not generalize the results of the `uniform_integrable` file much, but using a generic type instead of `ℕ` makes clear where we need assumptions like `encodable`.", "changes": [{"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["mod", "theorem", "measure_inter_not_convergent_seq_eq_zero", ["measure_theory", "egorov"]], ["mod", "theorem", "measure_not_convergent_seq_tendsto_zero", ["measure_theory", "egorov"]], ["mod", "theorem", "mem_not_convergent_seq_iff", ["measure_theory", "egorov"]], ["mod", "def", "not_convergent_seq", ["measure_theory", "egorov"]], ["mod", "theorem", "not_convergent_seq_antitone", ["measure_theory", "egorov"]], ["mod", "theorem", "not_convergent_seq_measurable_set", ["measure_theory", "egorov"]]]}]}, {"timestamp": 1645713534, "sha": "34cfcd02", "message": "feat(probability/stopping): generalize `is_stopping_time.measurable_set_lt` and variants beyond `ℕ` (#12240)\nThe lemma `is_stopping_time.measurable_set_lt` and the similar results for gt, ge and eq were written for stopping times with value in nat. We generalize those results to linear orders with the order topology.", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "exists_glb_Ioi", []], ["add", "theorem", "exists_lub_Iio", []], ["add", "theorem", "glb_Ioi_eq_self_or_Ioi_eq_Ici", []], ["add", "theorem", "le_glb_Ioi", []], ["add", "theorem", "lub_Iio_eq_self_or_Iio_eq_Iic", []], ["add", "theorem", "lub_Iio_le", []]]}, {"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["add", "theorem", "const_apply", ["measure_theory", "filtration"]], ["mod", "theorem", "add_const", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_eq", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_eq_le", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_ge", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_gt", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_le", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_lt", ["measure_theory", "is_stopping_time"]], ["mod", "theorem", "measurable_set_lt_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_lt_of_is_lub", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_lt_of_pred", ["measure_theory", "is_stopping_time"]], ["mod", "def", "is_stopping_time", ["measure_theory"]], ["mod", "theorem", "is_stopping_time_const", ["measure_theory"]], ["mod", "theorem", "is_stopping_time_of_measurable_set_eq", ["measure_theory"]], ["mod", "theorem", "measurable_set_of_filtration", ["measure_theory"]]]}]}, {"timestamp": 1645707419, "sha": "79887c96", "message": "feat(measure_theory/group/prod): generalize topological groups to measurable groups (#11933)\n* This fixes the gap in `[Halmos]` that I mentioned in `measure_theory.group.prod`\n* Thanks to @sgouezel for giving me the proof to fill that gap.\n* A text proof to fill the gap is [here](https://math.stackexchange.com/a/4387664/463377)", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "mul_indicator_image", ["set"]]]}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": [["add", "theorem", "absolutely_continuous_of_is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "ae_measure_preimage_mul_right_lt_top", ["measure_theory"]], ["add", "theorem", "ae_measure_preimage_mul_right_lt_top_of_ne_zero", ["measure_theory"]], ["add", "theorem", "measure_eq_div_smul", ["measure_theory"]], ["mod", "theorem", "measure_lintegral_div_measure", ["measure_theory"]], ["add", "theorem", "measure_mul_lintegral_eq", ["measure_theory"]], ["mod", "theorem", "measure_mul_measure_eq", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "sigma_finite_map", ["measurable_equiv"]], ["add", "theorem", "ae_of_forall_measure_lt_top_ae_restrict'", ["measure_theory"]]]}]}, {"timestamp": 1645707418, "sha": "8429ec96", "message": "feat(topology/vector_bundle): `topological_vector_prebundle` (#8154)\nIn this PR we implement a new standard construction for topological vector bundles: namely a structure that permits to define a vector bundle when trivializations are given as local equivalences but there is not yet a topology on the total space. The total space is hence given a topology in such a way that there is a vector bundle structure for which the local equivalences\nare also local homeomorphism and hence local trivializations.", "changes": [{"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": [["mod", "def", "proj", ["bundle"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "restrict_comp_cod_restrict", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "cod_restrict", ["continuous"]], ["add", "theorem", "of_cod_restrict", ["inducing"]], ["add", "theorem", "inducing_coe", []]]}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "continuous_iff_continuous_comp_left", ["local_homeomorph"]]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "structure", "pretrivialization", ["topological_vector_bundle"]], ["add", "def", "to_pretrivialization", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "continuous_total_space_mk", ["topological_vector_prebundle"]], ["add", "theorem", "inducing_total_space_mk_of_inducing_comp", ["topological_vector_prebundle"]], ["add", "theorem", "mem_trivialization_at_source", ["topological_vector_prebundle"]], ["add", "def", "to_topological_fiber_prebundle", ["topological_vector_prebundle"]], ["add", "theorem", "to_topological_vector_bundle", ["topological_vector_prebundle"]], ["add", "theorem", "total_space_mk_preimage_source", ["topological_vector_prebundle"]], ["add", "def", "total_space_topology", ["topological_vector_prebundle"]], ["add", "def", "trivialization_at", ["topological_vector_prebundle"]], ["add", "structure", "topological_vector_prebundle", []]]}]}, {"timestamp": 1645703852, "sha": "76b1e012", "message": "feat(data/equiv/option): option_congr (#12263)\nThis is a universe-polymorphic version of the existing `equiv_functor.map_equiv option`.", "changes": [{"oldPath": "src/combinatorics/derangements/basic.lean", "newPath": "src/combinatorics/derangements/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/option.lean", "newPath": "src/data/equiv/option.lean", "changes": [["add", "def", "option_congr", ["equiv"]], ["add", "theorem", "option_congr_eq_equiv_function_map_equiv", ["equiv"]], ["add", "theorem", "option_congr_injective", ["equiv"]], ["add", "theorem", "option_congr_refl", ["equiv"]], ["add", "theorem", "option_congr_symm", ["equiv"]], ["add", "theorem", "option_congr_trans", ["equiv"]], ["del", "theorem", "remove_none_map_equiv", ["equiv"]], ["add", "theorem", "remove_none_option_congr", ["equiv"]]]}, {"oldPath": "src/group_theory/perm/option.lean", "newPath": "src/group_theory/perm/option.lean", "changes": [["add", "theorem", "option_congr_one", ["equiv"]], ["add", "theorem", "option_congr_sign", ["equiv"]], ["add", "theorem", "option_congr_swap", ["equiv"]], ["del", "theorem", "map_equiv_option_injective", ["equiv_functor"]], ["del", "theorem", "map_none", ["equiv_functor", "option"]], ["del", "theorem", "sign", ["equiv_functor", "option"]], ["del", "theorem", "map_equiv_option_one", []], ["del", "theorem", "map_equiv_option_refl", []], ["del", "theorem", "map_equiv_option_swap", []]]}]}, {"timestamp": 1645703851, "sha": "b8b1b578", "message": "chore(geometry/euclidean): split repetitive proof (#12209)\nThis PR is part of the subobject refactor #11545, fixing a timeout caused by some expensive defeq checks.\nI introduce a new definition `simplex.orthogonal_projection_span s := orthogonal_projection (affine_span ℝ (set.range s.points))`, and extract a couple of its properties from (repetitive) parts of proofs in `circumcenter.lean`, especially `eq_or_eq_reflection_of_dist_eq`. This makes the latter proof noticeably faster, especially after commit #11750.", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "coe_orthogonal_projection_vadd_smul_vsub_orthogonal_projection", ["affine", "simplex"]], ["add", "theorem", "dist_circumcenter_sq_eq_sq_sub_circumradius", ["affine", "simplex"]], ["add", "theorem", "dist_sq_eq_dist_orthogonal_projection_sq_add_dist_orthogonal_projection_sq", ["affine", "simplex"]], ["add", "def", "orthogonal_projection_span", ["affine", "simplex"]], ["add", "theorem", "orthogonal_projection_vadd_smul_vsub_orthogonal_projection", ["affine", "simplex"]]]}]}, {"timestamp": 1645699334, "sha": "3d97cfb1", "message": "feat(ring_theory/ideal,dedekind_domain): lemmas on `I ≤ I^e` and `I < I^e` (#12185)", "changes": [{"oldPath": "src/ring_theory/dedekind_domain/ideal.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["add", "theorem", "exists_mem_pow_not_mem_pow_succ", ["ideal"]], ["add", "theorem", "pow_lt_self", ["ideal"]], ["add", "theorem", "strict_anti_pow", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "pow_le_self", ["ideal"]]]}]}, {"timestamp": 1645691183, "sha": "9eb78a33", "message": "feat(measure_theory/function/ae_eq_fun): generalize scalar actions (#12248)\nThis provides a more general `has_scalar` instance, along with `mul_action`, `distrib_mul_action`, `module`, `is_scalar_tower`, `smul_comm_class`, and `is_central_scalar` instances.", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": [["add", "def", "to_germ_monoid_hom", ["measure_theory", "ae_eq_fun"]]]}]}, {"timestamp": 1645676822, "sha": "f6a7ad9e", "message": "feat(measure_theory/integral/average): define `measure_theory.average` (#12128)\nAnd use it to formulate Jensen's inequality. Also add Jensen's inequality for concave functions.", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["add", "theorem", "average_mem_hypograph", ["concave_on"]], ["add", "theorem", "le_map_average", ["concave_on"]], ["add", "theorem", "le_map_integral", ["concave_on"]], ["add", "theorem", "le_map_set_average", ["concave_on"]], ["add", "theorem", "set_average_mem_hypograph", ["concave_on"]], ["add", "theorem", "average_mem", ["convex"]], ["add", "theorem", "set_average_mem", ["convex"]], ["del", "theorem", "smul_integral_mem", ["convex"]], ["add", "theorem", "average_mem_epigraph", ["convex_on"]], ["add", "theorem", "map_average_le", ["convex_on"]], ["add", "theorem", "map_set_average_le", ["convex_on"]], ["del", "theorem", "map_smul_integral_le", ["convex_on"]], ["add", "theorem", "set_average_mem_epigraph", ["convex_on"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "to_average", ["measure_theory", "integrable"]]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/average.lean", "changes": [["add", "theorem", "average_add_measure", ["measure_theory"]], ["add", "theorem", "average_congr", ["measure_theory"]], ["add", "theorem", "average_def'", ["measure_theory"]], ["add", "theorem", "average_def", ["measure_theory"]], ["add", "theorem", "average_eq_integral", ["measure_theory"]], ["add", "theorem", "average_mem_open_segment_compl_self", ["measure_theory"]], ["add", "theorem", "average_neg", ["measure_theory"]], ["add", "theorem", "average_pair", ["measure_theory"]], ["add", "theorem", "average_union", ["measure_theory"]], ["add", "theorem", "average_union_mem_open_segment", ["measure_theory"]], ["add", "theorem", "average_union_mem_segment", ["measure_theory"]], ["add", "theorem", "average_zero", ["measure_theory"]], ["add", "theorem", "average_zero_measure", ["measure_theory"]], ["add", "theorem", "measure_smul_average", ["measure_theory"]], ["add", "theorem", "measure_smul_set_average", ["measure_theory"]], ["add", "theorem", "set_average_eq", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "tendsto_integral_approx_on_of_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "is_probability_measure_smul", ["measure_theory"]]]}]}, {"timestamp": 1645674296, "sha": "f3ee4628", "message": "chore(category_theory/adjunction/opposites): Forgotten `category_theory` namespace (#12256)\nThe forgotten `category_theory` namespace means that dot notation doesn't work on `category_theory.adjunction`.", "changes": [{"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": [["del", "def", "adjoint_of_op_adjoint_op", ["adjunction"]], ["del", "def", "adjoint_of_unop_adjoint_unop", ["adjunction"]], ["del", "def", "adjoint_op_of_adjoint_unop", ["adjunction"]], ["del", "def", "adjoint_unop_of_adjoint_op", ["adjunction"]], ["del", "theorem", "hom_equiv_left_adjoint_uniq_hom_app", ["adjunction"]], ["del", "theorem", "hom_equiv_symm_right_adjoint_uniq_hom_app", ["adjunction"]], ["del", "def", "left_adjoint_uniq", ["adjunction"]], ["del", "theorem", "left_adjoint_uniq_hom_app_counit", ["adjunction"]], ["del", "theorem", "left_adjoint_uniq_hom_counit", ["adjunction"]], ["del", "theorem", "left_adjoint_uniq_inv_app", ["adjunction"]], ["del", "theorem", "left_adjoint_uniq_refl", ["adjunction"]], ["del", "theorem", "left_adjoint_uniq_trans", ["adjunction"]], ["del", "theorem", "left_adjoint_uniq_trans_app", ["adjunction"]], ["del", "def", "left_adjoints_coyoneda_equiv", ["adjunction"]], ["del", "def", "nat_iso_of_left_adjoint_nat_iso", ["adjunction"]], ["del", "def", "nat_iso_of_right_adjoint_nat_iso", ["adjunction"]], ["del", "def", "op_adjoint_of_unop_adjoint", ["adjunction"]], ["del", "def", "op_adjoint_op_of_adjoint", ["adjunction"]], ["del", "def", "right_adjoint_uniq", ["adjunction"]], ["del", "theorem", "right_adjoint_uniq_hom_app_counit", ["adjunction"]], ["del", "theorem", "right_adjoint_uniq_hom_counit", ["adjunction"]], ["del", "theorem", "right_adjoint_uniq_inv_app", ["adjunction"]], ["del", "theorem", "right_adjoint_uniq_refl", ["adjunction"]], ["del", "theorem", "right_adjoint_uniq_trans", ["adjunction"]], ["del", "theorem", "right_adjoint_uniq_trans_app", ["adjunction"]], ["del", "theorem", "unit_left_adjoint_uniq_hom", ["adjunction"]], ["del", "theorem", "unit_left_adjoint_uniq_hom_app", ["adjunction"]], ["del", "theorem", "unit_right_adjoint_uniq_hom", ["adjunction"]], ["del", "theorem", "unit_right_adjoint_uniq_hom_app", ["adjunction"]], ["del", "def", "unop_adjoint_of_op_adjoint", ["adjunction"]], ["del", "def", "unop_adjoint_unop_of_adjoint", ["adjunction"]], ["add", "def", "adjoint_of_op_adjoint_op", ["category_theory", "adjunction"]], ["add", "def", "adjoint_of_unop_adjoint_unop", ["category_theory", "adjunction"]], ["add", "def", "adjoint_op_of_adjoint_unop", ["category_theory", "adjunction"]], ["add", "def", "adjoint_unop_of_adjoint_op", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_left_adjoint_uniq_hom_app", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_symm_right_adjoint_uniq_hom_app", ["category_theory", "adjunction"]], ["add", "def", "left_adjoint_uniq", ["category_theory", "adjunction"]], ["add", "theorem", "left_adjoint_uniq_hom_app_counit", ["category_theory", "adjunction"]], ["add", "theorem", "left_adjoint_uniq_hom_counit", ["category_theory", "adjunction"]], ["add", "theorem", "left_adjoint_uniq_inv_app", ["category_theory", "adjunction"]], ["add", "theorem", "left_adjoint_uniq_refl", ["category_theory", "adjunction"]], ["add", "theorem", "left_adjoint_uniq_trans", ["category_theory", "adjunction"]], ["add", "theorem", "left_adjoint_uniq_trans_app", ["category_theory", "adjunction"]], ["add", "def", "left_adjoints_coyoneda_equiv", ["category_theory", "adjunction"]], ["add", "def", "nat_iso_of_left_adjoint_nat_iso", ["category_theory", "adjunction"]], ["add", "def", "nat_iso_of_right_adjoint_nat_iso", ["category_theory", "adjunction"]], ["add", "def", "op_adjoint_of_unop_adjoint", ["category_theory", "adjunction"]], ["add", "def", "op_adjoint_op_of_adjoint", ["category_theory", "adjunction"]], ["add", "def", "right_adjoint_uniq", ["category_theory", "adjunction"]], ["add", "theorem", "right_adjoint_uniq_hom_app_counit", ["category_theory", "adjunction"]], ["add", "theorem", "right_adjoint_uniq_hom_counit", ["category_theory", "adjunction"]], ["add", "theorem", "right_adjoint_uniq_inv_app", ["category_theory", "adjunction"]], ["add", "theorem", "right_adjoint_uniq_refl", ["category_theory", "adjunction"]], ["add", "theorem", "right_adjoint_uniq_trans", ["category_theory", "adjunction"]], ["add", "theorem", "right_adjoint_uniq_trans_app", ["category_theory", "adjunction"]], ["add", "theorem", "unit_left_adjoint_uniq_hom", ["category_theory", "adjunction"]], ["add", "theorem", "unit_left_adjoint_uniq_hom_app", ["category_theory", "adjunction"]], ["add", "theorem", "unit_right_adjoint_uniq_hom", ["category_theory", "adjunction"]], ["add", "theorem", "unit_right_adjoint_uniq_hom_app", ["category_theory", "adjunction"]], ["add", "def", "unop_adjoint_of_op_adjoint", ["category_theory", "adjunction"]], ["add", "def", "unop_adjoint_unop_of_adjoint", ["category_theory", "adjunction"]]]}]}, {"timestamp": 1645671087, "sha": "ed555939", "message": "feat(topology/metric_space/basic): add a few lemmas (#12259)\nAdd `ne_of_mem_sphere`, `subsingleton_closed_ball`, and `metric.subsingleton_sphere`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ne_of_mem_sphere", ["metric"]], ["add", "theorem", "subsingleton_closed_ball", ["metric"]], ["add", "theorem", "subsingleton_sphere", ["metric"]]]}]}, {"timestamp": 1645665523, "sha": "158550d5", "message": "feat(algebra/module/basic): add `smul_right_inj` (#12252)\nAlso golf the proof of `smul_right_injective` by reusing\n`add_monoid_hom.injective_iff`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "smul_right_inj", []]]}]}, {"timestamp": 1645665522, "sha": "2939c77d", "message": "feat(topology/metric_space): multiplicative opposites inherit the same `(pseudo_?)(e?)metric` and `uniform_space` (#12120)\nThis puts the \"obvious\" metric on the opposite type such that `dist (op x) (op y) = dist x y`.\nThis also merges `subtype.pseudo_dist_eq` and `subtype.dist_eq` as the latter was a special case of the former.", "changes": [{"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/metric_space/algebra.lean", "newPath": "src/topology/metric_space/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_op", ["mul_opposite"]], ["add", "theorem", "dist_unop", ["mul_opposite"]], ["add", "theorem", "nndist_op", ["mul_opposite"]], ["add", "theorem", "nndist_unop", ["mul_opposite"]], ["add", "theorem", "nndist_eq", ["subtype"]], ["del", "theorem", "pseudo_dist_eq", ["subtype"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_op", ["mul_opposite"]], ["add", "theorem", "edist_unop", ["mul_opposite"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_op", ["mul_opposite"]], ["add", "theorem", "uniform_continuous_unop", ["mul_opposite"]], ["add", "theorem", "uniformity_mul_opposite", []]]}]}, {"timestamp": 1645662300, "sha": "890338d4", "message": "feat(analysis/normed_space/basic): use weaker assumptions (#12260)\nAssume `r ≠ 0` instead of `0 < r` in `interior_closed_ball` and `frontier_closed_ball`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "frontier_closed_ball", []], ["mod", "theorem", "interior_closed_ball", []]]}]}, {"timestamp": 1645662297, "sha": "620af85a", "message": "refactor(topology/instances): put `ℕ`, `ℤ`, and `ℚ` in separate files (#12207)\nThe goal here is to make `metric_space ℕ` and `metric_space ℤ` available earlier, so that I can state `has_bounded_smul ℕ A` somewhere reasonable.\nNo lemmas have been added, deleted, or changed here - they've just been moved out of `topology/instances/real` and into \n`topology/instances/{nat,int,rat,real}`.\nThe resulting import structure is:\n* `rat_lemmas` → `rat`\n* `rat` → {`real`, `int`, `nat`}\n* `real` → {`int`}\n* `nat` → {`int`}", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/instances/int.lean", "changes": [["add", "theorem", "ball_eq_Ioo", ["int"]], ["add", "theorem", "closed_ball_eq_Icc", ["int"]], ["add", "theorem", "closed_embedding_coe_real", ["int"]], ["add", "theorem", "cocompact_eq", ["int"]], ["add", "theorem", "cofinite_eq", ["int"]], ["add", "theorem", "dist_cast_real", ["int"]], ["add", "theorem", "dist_eq", ["int"]], ["add", "theorem", "pairwise_one_le_dist", ["int"]], ["add", "theorem", "preimage_ball", ["int"]], ["add", "theorem", "preimage_closed_ball", ["int"]], ["add", "theorem", "uniform_embedding_coe_real", ["int"]]]}, {"oldPath": null, "newPath": "src/topology/instances/nat.lean", "changes": [["add", "theorem", "closed_ball_eq_Icc", ["nat"]], ["add", "theorem", "closed_embedding_coe_real", ["nat"]], ["add", "theorem", "dist_cast_real", ["nat"]], ["add", "theorem", "dist_coe_int", ["nat"]], ["add", "theorem", "dist_eq", ["nat"]], ["add", "theorem", "pairwise_one_le_dist", ["nat"]], ["add", "theorem", "preimage_ball", ["nat"]], ["add", "theorem", "preimage_closed_ball", ["nat"]], ["add", "theorem", "uniform_embedding_coe_real", ["nat"]]]}, {"oldPath": null, "newPath": "src/topology/instances/rat.lean", "changes": [["add", "theorem", "closed_embedding_coe_rat", ["int"]], ["add", "theorem", "dist_cast_rat", ["int"]], ["add", "theorem", "uniform_embedding_coe_rat", ["int"]], ["add", "theorem", "closed_embedding_coe_rat", ["nat"]], ["add", "theorem", "dist_cast_rat", ["nat"]], ["add", "theorem", "uniform_embedding_coe_rat", ["nat"]], ["add", "theorem", "continuous_coe_real", ["rat"]], ["add", "theorem", "continuous_mul", ["rat"]], ["add", "theorem", "dense_embedding_coe_real", ["rat"]], ["add", "theorem", "dist_cast", ["rat"]], ["add", "theorem", "dist_eq", ["rat"]], ["add", "theorem", "embedding_coe_real", ["rat"]], ["add", "theorem", "totally_bounded_Icc", ["rat"]], ["add", "theorem", "uniform_continuous_abs", ["rat"]], ["add", "theorem", "uniform_continuous_add", ["rat"]], ["add", "theorem", "uniform_continuous_coe_real", ["rat"]], ["add", "theorem", "uniform_continuous_neg", ["rat"]], ["add", "theorem", "uniform_embedding_coe_real", ["rat"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "ball_eq_Ioo", ["int"]], ["del", "theorem", "closed_ball_eq_Icc", ["int"]], ["del", "theorem", "closed_embedding_coe_rat", ["int"]], ["del", "theorem", "closed_embedding_coe_real", ["int"]], ["del", "theorem", "cocompact_eq", ["int"]], ["del", "theorem", "cofinite_eq", ["int"]], ["del", "theorem", "dist_cast_rat", ["int"]], ["del", "theorem", "dist_cast_real", ["int"]], ["del", "theorem", "dist_eq", ["int"]], ["del", "theorem", "pairwise_one_le_dist", ["int"]], ["del", "theorem", "preimage_ball", ["int"]], ["del", "theorem", "preimage_closed_ball", ["int"]], ["del", "theorem", "uniform_embedding_coe_rat", ["int"]], ["del", "theorem", "uniform_embedding_coe_real", ["int"]], ["del", "theorem", "closed_ball_eq_Icc", ["nat"]], ["del", "theorem", "closed_embedding_coe_rat", ["nat"]], ["del", "theorem", "closed_embedding_coe_real", ["nat"]], ["del", "theorem", "dist_cast_rat", ["nat"]], ["del", "theorem", "dist_cast_real", ["nat"]], ["del", "theorem", "dist_coe_int", ["nat"]], ["del", "theorem", "dist_eq", ["nat"]], ["del", "theorem", "pairwise_one_le_dist", ["nat"]], ["del", "theorem", "preimage_ball", ["nat"]], ["del", "theorem", "preimage_closed_ball", ["nat"]], ["del", "theorem", "uniform_embedding_coe_rat", ["nat"]], ["del", "theorem", "uniform_embedding_coe_real", ["nat"]], ["del", "theorem", "continuous_coe_real", ["rat"]], ["del", "theorem", "continuous_mul", ["rat"]], ["del", "theorem", "dense_embedding_coe_real", ["rat"]], ["del", "theorem", "dist_cast", ["rat"]], ["del", "theorem", "dist_eq", ["rat"]], ["del", "theorem", "embedding_coe_real", ["rat"]], ["del", "theorem", "totally_bounded_Icc", ["rat"]], ["del", "theorem", "uniform_continuous_abs", ["rat"]], ["del", "theorem", "uniform_continuous_add", ["rat"]], ["del", "theorem", "uniform_continuous_coe_real", ["rat"]], ["del", "theorem", "uniform_continuous_neg", ["rat"]], ["del", "theorem", "uniform_embedding_coe_real", ["rat"]]]}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}]}, {"timestamp": 1645657005, "sha": "eae6ae37", "message": "feat(algebra/associated): add decidable instances (#12230)\nMakes equality and divisibility decidable in `associates`, given that divisibility is decidable in the general case.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}]}, {"timestamp": 1645652565, "sha": "2c74921e", "message": "feat(data/pfun): A new induction on pfun.fix (#12109)\nA new lemma that lets you prove predicates given `b ∈ f.fix a` if `f` preserves the predicate, and it holds for values which `f` maps to `b`.", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "def", "fix_induction'", ["pfun"]]]}]}, {"timestamp": 1645649909, "sha": "9b333b26", "message": "feat(topology/algebra/continuous_monoid_hom): `to_continuous_map` is a `closed_embedding` (#12217)\nThis PR proves that `to_continuous_map : continuous_monoid_hom A B → C(A, B)` is a `closed_embedding`. This will be useful for showing that the Pontryagin dual is locally compact.", "changes": [{"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": [["add", "theorem", "is_closed_embedding", ["continuous_monoid_hom"]]]}]}, {"timestamp": 1645638181, "sha": "f04ad9a1", "message": "feat(analysis/normed_space/star/spectrum): prove the spectral radius of a selfadjoint element in a C*-algebra is its norm. (#12211)\nThis establishes that the spectral radius of a selfadjoint element in a C*-algebra is its (nn)norm using the Gelfand formula for the spectral radius. The same theorem for normal elements can be proven using this once normal elements are defined in mathlib.", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": [["add", "theorem", "nnnorm_star_mul_self", ["cstar_ring"]], ["add", "theorem", "nnnorm_pow_two_pow_of_self_adjoint", []], ["add", "theorem", "nnnorm_pow_two_pow", ["self_adjoint"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/star/spectrum.lean", "changes": [["add", "theorem", "coe_spectral_radius_eq_nnnorm", ["self_adjoint"]], ["add", "theorem", "spectral_radius_eq_nnnorm_of_self_adjoint", []]]}]}, {"timestamp": 1645632237, "sha": "b72cca41", "message": "chore(geometry/manifold/algebra/smooth_functions): golf module instance (#12247)", "changes": [{"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}]}, {"timestamp": 1645632236, "sha": "3e2df830", "message": "docs(order/order_iso_nat): Added note on `exists_increasing_or_nonincreasing_subseq` (#12239)", "changes": [{"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}]}, {"timestamp": 1645632235, "sha": "162d060c", "message": "feat(measure_theory/function/strongly_measurable): more basic properties of `strongly_measurable` (#12164)", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "support_const_smul_of_ne_zero", ["function"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "measurable_of_tendsto_ennreal'", []], ["add", "theorem", "measurable_of_tendsto_ennreal", []]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "ae_eq_mk", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "theorem", "fin_strongly_measurable_mk", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "theorem", "ae_fin_strongly_measurable_zero", ["measure_theory"]], ["mod", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "fin_strongly_measurable"]], ["mod", "theorem", "exists_set_sigma_finite", ["measure_theory", "fin_strongly_measurable"]], ["add", "theorem", "fin_strongly_measurable_zero", ["measure_theory"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "simple_func"]], ["mod", "def", "approx", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "strongly_measurable_const", ["measure_theory"]], ["add", "theorem", "strongly_measurable_id", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "coe_inf", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_sup", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1645632234, "sha": "3fe20d40", "message": "feat(ring_theory/localization): add mk' lemmas (#12081)", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "theorem", "mk'_zero", ["is_localization"]], ["add", "theorem", "ne_zero_of_mk'_ne_zero", ["is_localization"]]]}, {"oldPath": "src/ring_theory/localization/fraction_ring.lean", "newPath": "src/ring_theory/localization/fraction_ring.lean", "changes": [["add", "theorem", "mk'_eq_one_iff_eq", ["is_fraction_ring"]], ["add", "theorem", "mk'_eq_zero_iff_eq_zero", ["is_fraction_ring"]]]}]}, {"timestamp": 1645627203, "sha": "0d5bed0e", "message": "feat(ring_theory/graded_algebra): definitions and basic operations of homogeneous ideal (#10784)\nThis defines homogeneous ideals (`homogeneous_ideal`) of a graded algebra.", "changes": [{"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "theorem", "is_homogeneous_coe", ["set_like"]]]}, {"oldPath": null, "newPath": "src/ring_theory/graded_algebra/homogeneous_ideal.lean", "changes": [["add", "theorem", "coe_Inf", ["homogeneous_ideal"]], ["add", "theorem", "coe_Sup", ["homogeneous_ideal"]], ["add", "theorem", "coe_add", ["homogeneous_ideal"]], ["add", "theorem", "coe_bot", ["homogeneous_ideal"]], ["add", "theorem", "coe_inf", ["homogeneous_ideal"]], ["add", "theorem", "coe_infi", ["homogeneous_ideal"]], ["add", "theorem", "coe_mul", ["homogeneous_ideal"]], ["add", "theorem", "coe_sup", ["homogeneous_ideal"]], ["add", "theorem", "coe_supr", ["homogeneous_ideal"]], ["add", "theorem", "coe_top", ["homogeneous_ideal"]], ["add", "theorem", "eq_bot_iff", ["homogeneous_ideal"]], ["add", "theorem", "eq_top_iff", ["homogeneous_ideal"]], ["add", "theorem", "homogeneous_core_coe_eq_self", ["homogeneous_ideal"]], ["add", "theorem", "homogeneous_hull_coe_eq_self", ["homogeneous_ideal"]], ["add", "def", "homogeneous_ideal", []], ["add", "theorem", "coe_homogeneous_core_le", ["ideal"]], ["add", "theorem", "coe_homogeneous_hull_eq_supr", ["ideal"]], ["add", "def", "homogeneous_core'", ["ideal"]], ["add", "theorem", "homogeneous_core'_eq_Sup", ["ideal"]], ["add", "theorem", "homogeneous_core'_le", ["ideal"]], ["add", "theorem", "homogeneous_core'_mono", ["ideal"]], ["add", "theorem", "gc", ["ideal", "homogeneous_core"]], ["add", "def", "gi", ["ideal", "homogeneous_core"]], ["add", "def", "homogeneous_core", ["ideal"]], ["add", "theorem", "homogeneous_core_eq_Sup", ["ideal"]], ["add", "theorem", "homogeneous_core_mono", ["ideal"]], ["add", "theorem", "gc", ["ideal", "homogeneous_hull"]], ["add", "def", "gi", ["ideal", "homogeneous_hull"]], ["add", "def", "homogeneous_hull", ["ideal"]], ["add", "theorem", "homogeneous_hull_eq_Inf", ["ideal"]], ["add", "theorem", "homogeneous_hull_eq_supr", ["ideal"]], ["add", "theorem", "homogeneous_hull_mono", ["ideal"]], ["add", "theorem", "Inf", ["ideal", "is_homogeneous"]], ["add", "theorem", "Sup", ["ideal", "is_homogeneous"]], ["add", "theorem", "bot", ["ideal", "is_homogeneous"]], ["add", "theorem", "coe_homogeneous_core_eq_self", ["ideal", "is_homogeneous"]], ["add", "theorem", "homogeneous_hull_eq_self", ["ideal", "is_homogeneous"]], ["add", "theorem", "iff_eq", ["ideal", "is_homogeneous"]], ["add", "theorem", "iff_exists", ["ideal", "is_homogeneous"]], ["add", "theorem", "inf", ["ideal", "is_homogeneous"]], ["add", "theorem", "mul", ["ideal", "is_homogeneous"]], ["add", "theorem", "sup", ["ideal", "is_homogeneous"]], ["add", "theorem", "top", ["ideal", "is_homogeneous"]], ["add", "def", "is_homogeneous", ["ideal"]], ["add", "theorem", "is_homogeneous_iff_forall_subset", ["ideal"]], ["add", "theorem", "is_homogeneous_iff_subset_Inter", ["ideal"]], ["add", "theorem", "is_homogeneous_span", ["ideal"]], ["add", "theorem", "le_coe_homogeneous_hull", ["ideal"]], ["add", "theorem", "mul_homogeneous_element_mem_of_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "mem_span", ["ideal"]], ["add", "theorem", "span_Union", ["ideal"]], ["add", "theorem", "span_empty", ["ideal"]], ["add", "theorem", "span_union", ["ideal"]], ["add", "theorem", "span_univ", ["ideal"]], ["add", "theorem", "sum_mem", ["ideal"]]]}]}, {"timestamp": 1645622302, "sha": "e167efa1", "message": "chore(topology/instances/rat): rename to rat_lemmas (#12246)\nThis is to make room for the changes in #12207, which claim `topology.instances.rat` for more basic results. This has to be in a separate commit to keep the history reasonable.", "changes": [{"oldPath": "src/topology/instances/rat.lean", "newPath": "src/topology/instances/rat_lemmas.lean", "changes": []}]}, {"timestamp": 1645622300, "sha": "c5267895", "message": "feat(set_theory/ordinal_arithmetic): `is_normal.eq_iff_zero_and_succ` (#12222)\nTwo normal functions are equal iff they're equal at `0` and successor ordinals. This is used for a few lemmas in #12202.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "eq_iff_zero_and_succ", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1645622299, "sha": "7de8137d", "message": "feat(topology/order/hom): Continuous order homomorphisms (#12012)\nDefine continuous monotone functions, aka continuous order homomorphisms, aka Priestley homomorphisms, with notation `α →Co β`.", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/order/hom/basic.lean", "changes": [["add", "theorem", "cancel_left", ["continuous_order_hom"]], ["add", "theorem", "cancel_right", ["continuous_order_hom"]], ["add", "theorem", "coe_comp", ["continuous_order_hom"]], ["add", "theorem", "coe_id", ["continuous_order_hom"]], ["add", "def", "comp", ["continuous_order_hom"]], ["add", "theorem", "comp_apply", ["continuous_order_hom"]], ["add", "theorem", "comp_assoc", ["continuous_order_hom"]], ["add", "theorem", "comp_id", ["continuous_order_hom"]], ["add", "theorem", "ext", ["continuous_order_hom"]], ["add", "theorem", "id_apply", ["continuous_order_hom"]], ["add", "theorem", "id_comp", ["continuous_order_hom"]], ["add", "def", "to_continuous_map", ["continuous_order_hom"]], ["add", "theorem", "to_fun_eq_coe", ["continuous_order_hom"]], ["add", "structure", "continuous_order_hom", []]]}]}, {"timestamp": 1645619573, "sha": "b0fbd912", "message": "feat(measure_theory/measure): generalize scalar actions (#12187)\nAs a result of this change, many smul lemmas now also apply to `nat` and `nnreal`, which allows some lemmas to be removed.", "changes": [{"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "smul_measure", ["ae_measurable"]], ["mod", "theorem", "ae_smul_measure", ["measure_theory"]], ["del", "theorem", "coe_nnreal_smul", ["measure_theory", "measure"]], ["mod", "theorem", "coe_smul", ["measure_theory", "measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "measure"]], ["mod", "theorem", "smul_to_outer_measure", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "def", "coe_fn_add_monoid_hom", ["measure_theory", "outer_measure"]], ["mod", "theorem", "coe_smul", ["measure_theory", "outer_measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "outer_measure"]], ["mod", "theorem", "smul_supr", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_smul", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/probability/independence.lean", "newPath": "src/probability/independence.lean", "changes": []}]}, {"timestamp": 1645619572, "sha": "d01b55f1", "message": "split(analysis/functional/gauge): Split off `analysis.seminorm` (#12054)\nMove the Minkowski functional to a new file `analysis.convex.gauge`.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/gauge.lean", "changes": [["add", "theorem", "gauge_set_nonempty", ["absorbent"]], ["add", "theorem", "star_convex", ["balanced"]], ["add", "theorem", "gauge_le", ["convex"]], ["add", "theorem", "exists_lt_of_gauge_lt", []], ["add", "def", "gauge", []], ["add", "theorem", "gauge_add_le", []], ["add", "theorem", "gauge_ball", []], ["add", "theorem", "gauge_def'", []], ["add", "theorem", "gauge_def", []], ["add", "theorem", "gauge_empty", []], ["add", "theorem", "gauge_le_eq", []], ["add", "theorem", "gauge_le_of_mem", []], ["add", "theorem", "gauge_le_one_of_mem", []], ["add", "theorem", "gauge_lt_eq'", []], ["add", "theorem", "gauge_lt_eq", []], ["add", "theorem", "gauge_lt_of_mem_smul", []], ["add", "theorem", "gauge_lt_one_eq_self_of_open", []], ["add", "theorem", "gauge_lt_one_of_mem_of_open", []], ["add", "theorem", "gauge_lt_one_subset_self", []], ["add", "theorem", "gauge_mono", []], ["add", "theorem", "gauge_neg", []], ["add", "theorem", "gauge_nonneg", []], ["add", "theorem", "gauge_of_subset_zero", []], ["add", "def", "gauge_seminorm", []], ["add", "theorem", "gauge_seminorm_lt_one_of_open", []], ["add", "theorem", "gauge_smul", []], ["add", "theorem", "gauge_smul_left", []], ["add", "theorem", "gauge_smul_left_of_nonneg", []], ["add", "theorem", "gauge_smul_of_nonneg", []], ["add", "theorem", "gauge_unit_ball", []], ["add", "theorem", "gauge_zero'", []], ["add", "theorem", "gauge_zero", []], ["add", "theorem", "interior_subset_gauge_lt_one", []], ["add", "theorem", "le_gauge_of_not_mem", []], ["add", "theorem", "mul_gauge_le_norm", []], ["add", "theorem", "one_le_gauge_of_not_mem", []], ["add", "theorem", "self_subset_gauge_le_one", []], ["add", "theorem", "gauge_seminorm_ball", ["seminorm"]], ["add", "theorem", "smul_unit_ball", []]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["del", "theorem", "gauge_set_nonempty", ["absorbent"]], ["del", "theorem", "star_convex", ["balanced"]], ["del", "theorem", "gauge_le", ["convex"]], ["del", "theorem", "exists_lt_of_gauge_lt", []], ["del", "def", "gauge", []], ["del", "theorem", "gauge_add_le", []], ["del", "theorem", "gauge_ball", []], ["del", "theorem", "gauge_def'", []], ["del", "theorem", "gauge_def", []], ["del", "theorem", "gauge_empty", []], ["del", "theorem", "gauge_le_eq", []], ["del", "theorem", "gauge_le_of_mem", []], ["del", "theorem", "gauge_le_one_of_mem", []], ["del", "theorem", "gauge_lt_eq'", []], ["del", "theorem", "gauge_lt_eq", []], ["del", "theorem", "gauge_lt_of_mem_smul", []], ["del", "theorem", "gauge_lt_one_eq_self_of_open", []], ["del", "theorem", "gauge_lt_one_of_mem_of_open", []], ["del", "theorem", "gauge_lt_one_subset_self", []], ["del", "theorem", "gauge_mono", []], ["del", "theorem", "gauge_neg", []], ["del", "theorem", "gauge_nonneg", []], ["del", "theorem", "gauge_of_subset_zero", []], ["del", "def", "gauge_seminorm", []], ["del", "theorem", "gauge_seminorm_lt_one_of_open", []], ["del", "theorem", "gauge_smul", []], ["del", "theorem", "gauge_smul_left", []], ["del", "theorem", "gauge_smul_left_of_nonneg", []], ["del", "theorem", "gauge_smul_of_nonneg", []], ["del", "theorem", "gauge_unit_ball", []], ["del", "theorem", "gauge_zero'", []], ["del", "theorem", "gauge_zero", []], ["del", "theorem", "interior_subset_gauge_lt_one", []], ["del", "theorem", "le_gauge_of_not_mem", []], ["del", "theorem", "mul_gauge_le_norm", []], ["del", "theorem", "one_le_gauge_of_not_mem", []], ["del", "theorem", "self_subset_gauge_le_one", []], ["del", "theorem", "gauge_seminorm_ball", ["seminorm"]], ["del", "theorem", "smul_unit_ball", []]]}]}, {"timestamp": 1645613457, "sha": "6179707b", "message": "feat(ring_theory/unique_factorization_domain): add count_self (#12074)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "count_singleton_self", ["multiset"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "count_self", ["associates"]], ["add", "theorem", "factors_self", ["associates"]]]}]}, {"timestamp": 1645613456, "sha": "6f1d90d3", "message": "feat(algebra/order/monoid_lemmas_gt_zero): introduce the type of positive elements and prove some lemmas (#11833)\nThis PR continues the `order` refactor. Here I start working with the type of positive elements of a type with zero and lt. Combining `covariant_` and `contravariant_classes` where the \"acting\" type is the type of positive elements, we can formulate the condition that \"multiplication by positive elements is monotone\" and variants.\nI also prove some initial lemmas, just to give a flavour of the API.\nMore such lemmas will come in subsequent PRs (see for instance #11782 for a few more lemmas). After that, I will start simplifying existing lemmas, by weakening their assumptions.", "changes": [{"oldPath": null, "newPath": "src/algebra/order/monoid_lemmas_zero_lt.lean", "changes": [["add", "theorem", "lt_of_mul_lt_mul_left'", ["zero_lt"]], ["add", "theorem", "lt_of_mul_lt_mul_right'", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_iff_left", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_iff_right", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_left'", ["zero_lt"]], ["add", "theorem", "mul_lt_mul_right'", ["zero_lt"]], ["add", "def", "mul_pos_mono", ["zero_lt"]], ["add", "def", "mul_pos_mono_rev", ["zero_lt"]], ["add", "def", "mul_pos_reflect_lt", ["zero_lt"]], ["add", "def", "mul_pos_strict_mono", ["zero_lt"]], ["add", "def", "pos_mul_mono", ["zero_lt"]], ["add", "def", "pos_mul_mono_rev", ["zero_lt"]], ["add", "def", "pos_mul_reflect_lt", ["zero_lt"]], ["add", "def", "pos_mul_strict_mono", ["zero_lt"]]]}]}, {"timestamp": 1645609192, "sha": "3e77124c", "message": "refactor(topology/{separation,subset_properties}): use `set.subsingleton` (#12232)\nUse `set.subsingleton s` instead of `_root_.subsingleton s` in `is_preirreducible_iff_subsingleton` and `is_preirreducible_of_subsingleton`, rename the latter to `set.subsingleton.is_preirreducible`.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "theorem", "is_preirreducible_of_subsingleton", []], ["add", "theorem", "is_preirreducible", ["set", "subsingleton"]]]}]}, {"timestamp": 1645609190, "sha": "dc9b8bea", "message": "feat(analysis/normed_space/linear_isometry): add lemmas to `linear_isometry_equiv` (#12218)\nAdded two API lemmas to `linear_isometry_equiv` that I need elsewhere.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "trans_apply", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1645609189, "sha": "f44ed74a", "message": "feat(ring_theory/ideal/over): `S/p` is noetherian over `R/p` if `S` is over `R` (#12183)", "changes": [{"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": [["add", "theorem", "subsingleton_iff", ["ideal", "quotient"]]]}]}, {"timestamp": 1645604168, "sha": "515eefaf", "message": "fix(algebra/star/basic): more type classes that should be props (#12235)", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}]}, {"timestamp": 1645604167, "sha": "98bcabb0", "message": "feat(group_theory/perm): add lemmas for cycles of permutations (#11955)\n`nodup_powers_of_cycle_of` : shows that the the iterates of an element in the support give rise to a nodup list\n`cycle_is_cycle_of` : asserts that a given cycle c in `f. cycle_factors_finset` is `f.cycle_of a` if c a \\neq a\n`equiv.perm.sign_of_cycle_type` : new formula for the sign of a permutations in terms of its cycle_type — It is simpler to use (just uses number of cycles and size of support) than the earlier lemma which is renamed as equiv.perm.sign_of_cycle_type' (it could be deleted). I made one modification to make the file compile, but I need to check compatibility with the other ones.", "changes": [{"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "sign_of_cycle_type'", ["equiv", "perm"]], ["mod", "theorem", "sign_of_cycle_type", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "cycle_is_cycle_of", ["equiv", "perm"]], ["add", "theorem", "is_cycle_cycle_of_iff", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}]}, {"timestamp": 1645602395, "sha": "0eed60e3", "message": "feat(number_theory/cyclotomic/discriminant): discriminant of a p-th cyclotomic field (#11804)\nWe compute the discriminant of a p-th cyclotomic field.\nFrom flt-regular.\n- [x] depends on: #11786", "changes": [{"oldPath": null, "newPath": "src/number_theory/cyclotomic/discriminant.lean", "changes": [["add", "theorem", "discr_odd_prime", ["is_cyclotomic_extension"]]]}, {"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["del", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "is_prime_pow"]], ["add", "theorem", "is_prime_pow_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["del", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "prime_ne_two"]], ["add", "theorem", "prime_ne_two_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["del", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "prime_ne_two_pow"]], ["add", "theorem", "prime_ne_two_pow_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["del", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "two_pow"]], ["add", "theorem", "two_pow_norm_zeta_sub_one", ["is_cyclotomic_extension"]], ["del", "theorem", "sub_one_norm", ["is_primitive_root", "prime_ne_two_pow"]], ["add", "theorem", "prime_ne_two_pow_sub_one_norm", ["is_primitive_root"]], ["del", "theorem", "is_prime_pow", ["is_primitive_root", "sub_one_norm"]], ["del", "theorem", "pow_two", ["is_primitive_root", "sub_one_norm"]], ["del", "theorem", "prime", ["is_primitive_root", "sub_one_norm"]], ["add", "theorem", "sub_one_norm_is_prime_pow", ["is_primitive_root"]], ["add", "theorem", "sub_one_norm_pow_two", ["is_primitive_root"]], ["add", "theorem", "sub_one_norm_prime", ["is_primitive_root"]]]}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": [["add", "theorem", "discr_power_basis_eq_norm", ["algebra"]], ["add", "theorem", "discr_power_basis_eq_prod''", ["algebra"]], ["add", "theorem", "discr_power_basis_eq_prod'", ["algebra"]], ["del", "theorem", "of_power_basis_eq_norm", ["algebra"]], ["del", "theorem", "of_power_basis_eq_prod''", ["algebra"]], ["del", "theorem", "of_power_basis_eq_prod'", ["algebra"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "cyclotomic_prime_pow_mul_X_pow_sub_one", ["polynomial"]]]}]}, {"timestamp": 1645593859, "sha": "257bddff", "message": "feat(algebra/algebra/spectrum): add spectral mapping for inverses (#12219)\nGiven a unit `a` in an algebra `A` over a field `𝕜`, the equality `(spectrum 𝕜 a)⁻¹ = spectrum 𝕜 a⁻¹` holds.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "inv_mem_iff", ["spectrum"]], ["add", "theorem", "inv_mem_resolvent_set", ["spectrum"]], ["add", "theorem", "ne_zero_of_mem_of_unit", ["spectrum"]], ["add", "theorem", "zero_mem_resolvent_set_of_unit", ["spectrum"]]]}]}, {"timestamp": 1645590686, "sha": "e77675d2", "message": "fix(analysis/normed_space/star/basic): make prop type classes props (#12233)\nThe type classes `normed_star_monoid` and `cstar_ring` are now properly declared as prop.", "changes": [{"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}]}, {"timestamp": 1645588896, "sha": "264dd7ff", "message": "feat(model_theory/basic): Language operations (#12129)\nDefines language homomorphisms with `first_order.language.Lhom`\nDefines the sum of two languages with `first_order.language.sum`\nDefines `first_order.language.with_constants`, a language with added constants, abbreviated `L[[A]]`.\nDefines a `L[[A]].Structure` on `M` when `A : set M`.\n(Some of this code comes from the Flypitch project)", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "add_constants", ["first_order", "language", "Lhom"]], ["add", "def", "comp", ["first_order", "language", "Lhom"]], ["add", "theorem", "comp_id", ["first_order", "language", "Lhom"]], ["add", "def", "constants_on_map", ["first_order", "language", "Lhom"]], ["add", "theorem", "id_comp", ["first_order", "language", "Lhom"]], ["add", "theorem", "map_constants_comp_with_constants", ["first_order", "language", "Lhom"]], ["add", "def", "sum_elim", ["first_order", "language", "Lhom"]], ["add", "def", "sum_map", ["first_order", "language", "Lhom"]], ["add", "structure", "Lhom", ["first_order", "language"]], ["add", "def", "Lhom_trim_empty_constants", ["first_order", "language"]], ["add", "def", "Lhom_with_constants", ["first_order", "language"]], ["add", "def", "Lhom_with_constants_map", ["first_order", "language"]], ["del", "def", "const", ["first_order", "language"]], ["add", "def", "Structure", ["first_order", "language", "constants_on"]], ["add", "def", "constants_on", ["first_order", "language"]], ["add", "theorem", "constants_on_constants", ["first_order", "language"]], ["add", "def", "constants_on_functions", ["first_order", "language"]], ["add", "theorem", "constants_on_map_is_expansion_on", ["first_order", "language"]], ["del", "theorem", "map_const", ["first_order", "language", "embedding"]], ["add", "theorem", "map_constants", ["first_order", "language", "embedding"]], ["del", "theorem", "map_const", ["first_order", "language", "equiv"]], ["add", "theorem", "map_constants", ["first_order", "language", "equiv"]], ["del", "theorem", "fun_map_eq_coe_const", ["first_order", "language"]], ["add", "theorem", "fun_map_eq_coe_constants", ["first_order", "language"]], ["add", "theorem", "fun_map_sum_inl", ["first_order", "language"]], ["add", "theorem", "fun_map_sum_inr", ["first_order", "language"]], ["del", "theorem", "map_const", ["first_order", "language", "hom"]], ["add", "theorem", "map_constants", ["first_order", "language", "hom"]], ["mod", "theorem", "nonempty_of_nonempty_constants", ["first_order", "language"]], ["add", "theorem", "rel_map_sum_inl", ["first_order", "language"]], ["add", "theorem", "rel_map_sum_inr", ["first_order", "language"]], ["add", "def", "symbols", ["first_order", "language"]], ["add", "def", "with_constants", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["del", "theorem", "map_const", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "map_constants", ["first_order", "language", "elementary_embedding"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": [["del", "theorem", "const_mem", ["first_order", "language", "substructure"]], ["add", "theorem", "constants_mem", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": []}]}, {"timestamp": 1645577157, "sha": "7cc4eb9d", "message": "doc(number_theory/padics/*): typo in references (#12229)\nFix typos in a reference.", "changes": [{"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1645577156, "sha": "42388681", "message": "chore(analysis): rename times_cont_diff (#12227)\nThis replaces `times_cont_diff` by `cont_diff` everywhere, and the same for `times_cont_mdiff`. There is no change at all in content.\nSee https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/times_cont_diff.20name", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/analysis/calculus/affine_map.lean", "newPath": "src/analysis/calculus/affine_map.lean", "changes": [["add", "theorem", "cont_diff", ["continuous_affine_map"]], ["del", "theorem", "times_cont_diff", ["continuous_affine_map"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/cont_diff.lean", "changes": [["add", "theorem", "add", ["cont_diff"]], ["add", "theorem", "comp", ["cont_diff"]], ["add", "theorem", "comp_cont_diff_at", ["cont_diff"]], ["add", "theorem", "comp_cont_diff_on", ["cont_diff"]], ["add", "theorem", "comp_cont_diff_within_at", ["cont_diff"]], ["add", "theorem", "comp_continuous_linear_map", ["cont_diff"]], ["add", "theorem", "cont_diff_at", ["cont_diff"]], ["add", "theorem", "cont_diff_fderiv_apply", ["cont_diff"]], ["add", "theorem", "cont_diff_on", ["cont_diff"]], ["add", "theorem", "cont_diff_within_at", ["cont_diff"]], ["add", "theorem", "continuous", ["cont_diff"]], ["add", "theorem", "continuous_fderiv", ["cont_diff"]], ["add", "theorem", "continuous_fderiv_apply", ["cont_diff"]], ["add", "theorem", "continuous_linear_map_comp", ["cont_diff"]], ["add", "theorem", "differentiable", ["cont_diff"]], ["add", "theorem", "div", ["cont_diff"]], ["add", "theorem", "div_const", ["cont_diff"]], ["add", "theorem", "has_strict_deriv_at", ["cont_diff"]], ["add", "theorem", "has_strict_fderiv_at", ["cont_diff"]], ["add", "theorem", "inv", ["cont_diff"]], ["add", "theorem", "mul", ["cont_diff"]], ["add", "theorem", "neg", ["cont_diff"]], ["add", "theorem", "of_le", ["cont_diff"]], ["add", "theorem", "pow", ["cont_diff"]], ["add", "theorem", "prod", ["cont_diff"]], ["add", "theorem", "prod_map", ["cont_diff"]], ["add", "theorem", "restrict_scalars", ["cont_diff"]], ["add", "theorem", "smul", ["cont_diff"]], ["add", "theorem", "sub", ["cont_diff"]], ["add", "theorem", "sum", ["cont_diff"]], ["add", "theorem", "cont_diff_add", []], ["add", "theorem", "cont_diff_all_iff_nat", []], ["add", "theorem", "add", ["cont_diff_at"]], ["add", "theorem", "comp", ["cont_diff_at"]], ["add", "theorem", "comp_cont_diff_within_at", ["cont_diff_at"]], ["add", "theorem", "congr_of_eventually_eq", ["cont_diff_at"]], ["add", "theorem", "cont_diff_within_at", ["cont_diff_at"]], ["add", "theorem", "continuous_at", ["cont_diff_at"]], ["add", "theorem", "continuous_linear_map_comp", ["cont_diff_at"]], ["add", "theorem", "differentiable_at", ["cont_diff_at"]], ["add", "theorem", "div", ["cont_diff_at"]], ["add", "theorem", "div_const", ["cont_diff_at"]], ["add", "theorem", "exists_lipschitz_on_with", ["cont_diff_at"]], ["add", "theorem", "exists_lipschitz_on_with_of_nnnorm_lt", ["cont_diff_at"]], ["add", "theorem", "has_strict_deriv_at'", ["cont_diff_at"]], ["add", "theorem", "has_strict_deriv_at", ["cont_diff_at"]], ["add", "theorem", "has_strict_fderiv_at'", ["cont_diff_at"]], ["add", "theorem", "has_strict_fderiv_at", ["cont_diff_at"]], ["add", "theorem", "inv", ["cont_diff_at"]], ["add", "theorem", "mul", ["cont_diff_at"]], ["add", "theorem", "neg", ["cont_diff_at"]], ["add", "theorem", "of_le", ["cont_diff_at"]], ["add", "theorem", "pow", ["cont_diff_at"]], ["add", "theorem", "prod", ["cont_diff_at"]], ["add", "theorem", "prod_map'", ["cont_diff_at"]], ["add", "theorem", "prod_map", ["cont_diff_at"]], ["add", "theorem", "restrict_scalars", ["cont_diff_at"]], ["add", "theorem", "smul", ["cont_diff_at"]], ["add", "theorem", "sub", ["cont_diff_at"]], ["add", "theorem", "sum", ["cont_diff_at"]], ["add", "def", "cont_diff_at", []], ["add", "theorem", "cont_diff_at_const", []], ["add", "theorem", "cont_diff_at_fst", []], ["add", "theorem", "cont_diff_at_id", []], ["add", "theorem", "cont_diff_at_inv", []], ["add", "theorem", "cont_diff_at_map_inverse", []], ["add", "theorem", "cont_diff_at_of_subsingleton", []], ["add", "theorem", "cont_diff_at_pi", []], ["add", "theorem", "cont_diff_at_ring_inverse", []], ["add", "theorem", "cont_diff_at_snd", []], ["add", "theorem", "cont_diff_at_succ_iff_has_fderiv_at", []], ["add", "theorem", "cont_diff_at_top", []], ["add", "theorem", "cont_diff_at_zero", []], ["add", "theorem", "cont_diff_const", []], ["add", "theorem", "cont_diff_fst", []], ["add", "theorem", "cont_diff_id", []], ["add", "theorem", "cont_diff_iff_cont_diff_at", []], ["add", "theorem", "cont_diff_iff_continuous_differentiable", []], ["add", "theorem", "cont_diff_mul", []], ["add", "theorem", "cont_diff_neg", []], ["add", "theorem", "cont_diff_of_differentiable_iterated_fderiv", []], ["add", "theorem", "cont_diff_of_subsingleton", []], ["add", "theorem", "add", ["cont_diff_on"]], ["add", "theorem", "comp'", ["cont_diff_on"]], ["add", "theorem", "comp", ["cont_diff_on"]], ["add", "theorem", "comp_continuous_linear_map", ["cont_diff_on"]], ["add", "theorem", "congr", ["cont_diff_on"]], ["add", "theorem", "congr_mono", ["cont_diff_on"]], ["add", "theorem", "cont_diff_within_at", ["cont_diff_on"]], ["add", "theorem", "continuous_linear_map_comp", ["cont_diff_on"]], ["add", "theorem", "continuous_on", ["cont_diff_on"]], ["add", "theorem", "continuous_on_deriv_of_open", ["cont_diff_on"]], ["add", "theorem", "continuous_on_deriv_within", ["cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_of_open", ["cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_within", ["cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_within_apply", ["cont_diff_on"]], ["add", "theorem", "continuous_on_iterated_fderiv_within", ["cont_diff_on"]], ["add", "theorem", "deriv_of_open", ["cont_diff_on"]], ["add", "theorem", "deriv_within", ["cont_diff_on"]], ["add", "theorem", "differentiable_on", ["cont_diff_on"]], ["add", "theorem", "differentiable_on_iterated_fderiv_within", ["cont_diff_on"]], ["add", "theorem", "div", ["cont_diff_on"]], ["add", "theorem", "div_const", ["cont_diff_on"]], ["add", "theorem", "fderiv_of_open", ["cont_diff_on"]], ["add", "theorem", "fderiv_within", ["cont_diff_on"]], ["add", "theorem", "ftaylor_series_within", ["cont_diff_on"]], ["add", "theorem", "inv", ["cont_diff_on"]], ["add", "theorem", "mono", ["cont_diff_on"]], ["add", "theorem", "mul", ["cont_diff_on"]], ["add", "theorem", "neg", ["cont_diff_on"]], ["add", "theorem", "of_le", ["cont_diff_on"]], ["add", "theorem", "pow", ["cont_diff_on"]], ["add", "theorem", "prod", ["cont_diff_on"]], ["add", "theorem", "prod_map", ["cont_diff_on"]], ["add", "theorem", "restrict_scalars", ["cont_diff_on"]], ["add", "theorem", "smul", ["cont_diff_on"]], ["add", "theorem", "sub", ["cont_diff_on"]], ["add", "theorem", "sum", ["cont_diff_on"]], ["add", "theorem", "cont_diff_on_all_iff_nat", []], ["add", "theorem", "cont_diff_on_congr", []], ["add", "theorem", "cont_diff_on_const", []], ["add", "theorem", "cont_diff_on_fderiv_within_apply", []], ["add", "theorem", "cont_diff_on_fst", []], ["add", "theorem", "cont_diff_on_id", []], ["add", "theorem", "cont_diff_on_iff_continuous_on_differentiable_on", []], ["add", "theorem", "cont_diff_on_iff_forall_nat_le", []], ["add", "theorem", "cont_diff_on_iff_ftaylor_series", []], ["add", "theorem", "cont_diff_on_inv", []], ["add", "theorem", "cont_diff_on_of_continuous_on_differentiable_on", []], ["add", "theorem", "cont_diff_on_of_differentiable_on", []], ["add", "theorem", "cont_diff_on_of_locally_cont_diff_on", []], ["add", "theorem", "cont_diff_on_of_subsingleton", []], ["add", "theorem", "cont_diff_on_pi", []], ["add", "theorem", "cont_diff_on_snd", []], ["add", "theorem", "cont_diff_on_succ_iff_deriv_of_open", []], ["add", "theorem", "cont_diff_on_succ_iff_deriv_within", []], ["add", "theorem", "cont_diff_on_succ_iff_fderiv_of_open", []], ["add", "theorem", "cont_diff_on_succ_iff_fderiv_within", []], ["add", "theorem", "cont_diff_on_succ_iff_has_fderiv_within_at", []], ["add", "theorem", "cont_diff_on_top", []], ["add", "theorem", "cont_diff_on_top_iff_deriv_of_open", []], ["add", "theorem", "cont_diff_on_top_iff_deriv_within", []], ["add", "theorem", "cont_diff_on_top_iff_fderiv_of_open", []], ["add", "theorem", "cont_diff_on_top_iff_fderiv_within", []], ["add", "theorem", "cont_diff_on_univ", []], ["add", "theorem", "cont_diff_on_zero", []], ["add", "theorem", "cont_diff_pi", []], ["add", "theorem", "cont_diff_prod_assoc", []], ["add", "theorem", "cont_diff_prod_assoc_symm", []], ["add", "theorem", "cont_diff_smul", []], ["add", "theorem", "cont_diff_snd", []], ["add", "theorem", "cont_diff_succ_iff_deriv", []], ["add", "theorem", "cont_diff_succ_iff_fderiv", []], ["add", "theorem", "cont_diff_top", []], ["add", "theorem", "cont_diff_top_iff_fderiv", []], ["add", "theorem", "add", ["cont_diff_within_at"]], ["add", "theorem", "comp'", ["cont_diff_within_at"]], ["add", "theorem", "comp", ["cont_diff_within_at"]], ["add", "theorem", "comp_continuous_linear_map", ["cont_diff_within_at"]], ["add", "theorem", "congr'", ["cont_diff_within_at"]], ["add", "theorem", "congr", ["cont_diff_within_at"]], ["add", "theorem", "congr_nhds", ["cont_diff_within_at"]], ["add", "theorem", "congr_of_eventually_eq'", ["cont_diff_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_at", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_on", ["cont_diff_within_at"]], ["add", "theorem", "continuous_linear_map_comp", ["cont_diff_within_at"]], ["add", "theorem", "continuous_within_at", ["cont_diff_within_at"]], ["add", "theorem", "differentiable_within_at'", ["cont_diff_within_at"]], ["add", "theorem", "differentiable_within_at", ["cont_diff_within_at"]], ["add", "theorem", "div", ["cont_diff_within_at"]], ["add", "theorem", "div_const", ["cont_diff_within_at"]], ["add", "theorem", "exists_lipschitz_on_with", ["cont_diff_within_at"]], ["add", "theorem", "inv", ["cont_diff_within_at"]], ["add", "theorem", "mono", ["cont_diff_within_at"]], ["add", "theorem", "mono_of_mem", ["cont_diff_within_at"]], ["add", "theorem", "mul", ["cont_diff_within_at"]], ["add", "theorem", "neg", ["cont_diff_within_at"]], ["add", "theorem", "of_le", ["cont_diff_within_at"]], ["add", "theorem", "pow", ["cont_diff_within_at"]], ["add", "theorem", "prod", ["cont_diff_within_at"]], ["add", "theorem", "prod_map'", ["cont_diff_within_at"]], ["add", "theorem", "prod_map", ["cont_diff_within_at"]], ["add", "theorem", "restrict_scalars", ["cont_diff_within_at"]], ["add", "theorem", "smul", ["cont_diff_within_at"]], ["add", "theorem", "sub", ["cont_diff_within_at"]], ["add", "theorem", "sum", ["cont_diff_within_at"]], ["add", "def", "cont_diff_within_at", []], ["add", "theorem", "cont_diff_within_at_congr_nhds", []], ["add", "theorem", "cont_diff_within_at_const", []], ["add", "theorem", "cont_diff_within_at_fst", []], ["add", "theorem", "cont_diff_within_at_id", []], ["add", "theorem", "cont_diff_within_at_iff_forall_nat_le", []], ["add", "theorem", "cont_diff_within_at_inter'", []], ["add", "theorem", "cont_diff_within_at_inter", []], ["add", "theorem", "cont_diff_within_at_nat", []], ["add", "theorem", "cont_diff_within_at_of_subsingleton", []], ["add", "theorem", "cont_diff_within_at_pi", []], ["add", "theorem", "cont_diff_within_at_snd", []], ["add", "theorem", "cont_diff_within_at_succ_iff_has_fderiv_within_at", []], ["add", "theorem", "cont_diff_within_at_top", []], ["add", "theorem", "cont_diff_within_at_univ", []], ["add", "theorem", "cont_diff_within_at_zero", []], ["add", "theorem", "cont_diff_zero", []], ["add", "theorem", "cont_diff_zero_fun", []], ["add", "theorem", "comp_cont_diff_on_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_cont_diff_within_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_times_cont_diff_on_iff", ["continuous_linear_equiv"]], ["del", "theorem", "comp_times_cont_diff_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "cont_diff", ["continuous_linear_equiv"]], ["add", "theorem", "cont_diff_on_comp_iff", ["continuous_linear_equiv"]], ["add", "theorem", "cont_diff_within_at_comp_iff", ["continuous_linear_equiv"]], ["del", "theorem", "times_cont_diff", ["continuous_linear_equiv"]], ["del", "theorem", "times_cont_diff_on_comp_iff", ["continuous_linear_equiv"]], ["del", "theorem", "times_cont_diff_within_at_comp_iff", ["continuous_linear_equiv"]], ["add", "theorem", "cont_diff", ["continuous_linear_map"]], ["del", "theorem", "times_cont_diff", ["continuous_linear_map"]], ["add", "theorem", "cont_diff_within_at_iff", ["filter", "eventually_eq"]], ["del", "theorem", "times_cont_diff_within_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "cont_diff", ["is_bounded_bilinear_map"]], ["del", "theorem", "times_cont_diff", ["is_bounded_bilinear_map"]], ["add", "theorem", "cont_diff", ["is_bounded_linear_map"]], ["del", "theorem", "times_cont_diff", ["is_bounded_linear_map"]], ["add", "theorem", "cont_diff", ["linear_isometry"]], ["del", "theorem", "times_cont_diff", ["linear_isometry"]], ["add", "theorem", "cont_diff", ["linear_isometry_equiv"]], ["del", "theorem", "times_cont_diff", ["linear_isometry_equiv"]], ["add", "theorem", "cont_diff_at_symm", ["local_homeomorph"]], ["add", "theorem", "cont_diff_at_symm_deriv", ["local_homeomorph"]], ["del", "theorem", "times_cont_diff_at_symm", ["local_homeomorph"]], ["del", "theorem", "times_cont_diff_at_symm_deriv", ["local_homeomorph"]], ["del", "theorem", "add", ["times_cont_diff"]], ["del", "theorem", "comp", ["times_cont_diff"]], ["del", "theorem", "comp_continuous_linear_map", ["times_cont_diff"]], ["del", "theorem", "comp_times_cont_diff_at", ["times_cont_diff"]], ["del", "theorem", "comp_times_cont_diff_on", ["times_cont_diff"]], ["del", "theorem", "comp_times_cont_diff_within_at", ["times_cont_diff"]], ["del", "theorem", "continuous", ["times_cont_diff"]], ["del", "theorem", "continuous_fderiv", ["times_cont_diff"]], ["del", "theorem", "continuous_fderiv_apply", ["times_cont_diff"]], ["del", "theorem", "continuous_linear_map_comp", ["times_cont_diff"]], ["del", "theorem", "differentiable", ["times_cont_diff"]], ["del", "theorem", "div", ["times_cont_diff"]], ["del", "theorem", "div_const", ["times_cont_diff"]], ["del", "theorem", "has_strict_deriv_at", ["times_cont_diff"]], ["del", "theorem", "has_strict_fderiv_at", ["times_cont_diff"]], ["del", "theorem", "inv", ["times_cont_diff"]], ["del", "theorem", "mul", ["times_cont_diff"]], ["del", "theorem", "neg", ["times_cont_diff"]], ["del", "theorem", "of_le", ["times_cont_diff"]], ["del", "theorem", "pow", ["times_cont_diff"]], ["del", "theorem", "prod", ["times_cont_diff"]], ["del", "theorem", "prod_map", ["times_cont_diff"]], ["del", "theorem", "restrict_scalars", ["times_cont_diff"]], ["del", "theorem", "smul", ["times_cont_diff"]], ["del", "theorem", "sub", ["times_cont_diff"]], ["del", "theorem", "sum", ["times_cont_diff"]], ["del", "theorem", "times_cont_diff_at", ["times_cont_diff"]], ["del", "theorem", "times_cont_diff_fderiv_apply", ["times_cont_diff"]], ["del", "theorem", "times_cont_diff_on", ["times_cont_diff"]], ["del", "theorem", "times_cont_diff_within_at", ["times_cont_diff"]], ["del", "theorem", "times_cont_diff_add", []], ["del", "theorem", "times_cont_diff_all_iff_nat", []], ["del", "theorem", "add", ["times_cont_diff_at"]], ["del", "theorem", "comp", ["times_cont_diff_at"]], ["del", "theorem", "comp_times_cont_diff_within_at", ["times_cont_diff_at"]], ["del", "theorem", "congr_of_eventually_eq", ["times_cont_diff_at"]], ["del", "theorem", "continuous_at", ["times_cont_diff_at"]], ["del", "theorem", "continuous_linear_map_comp", ["times_cont_diff_at"]], ["del", "theorem", "differentiable_at", ["times_cont_diff_at"]], ["del", "theorem", "div", ["times_cont_diff_at"]], ["del", "theorem", "div_const", ["times_cont_diff_at"]], ["del", "theorem", "exists_lipschitz_on_with", ["times_cont_diff_at"]], ["del", "theorem", "exists_lipschitz_on_with_of_nnnorm_lt", ["times_cont_diff_at"]], ["del", "theorem", "has_strict_deriv_at'", ["times_cont_diff_at"]], ["del", "theorem", "has_strict_deriv_at", ["times_cont_diff_at"]], ["del", "theorem", "has_strict_fderiv_at'", ["times_cont_diff_at"]], ["del", "theorem", "has_strict_fderiv_at", ["times_cont_diff_at"]], ["del", "theorem", "inv", ["times_cont_diff_at"]], ["del", "theorem", "mul", ["times_cont_diff_at"]], ["del", "theorem", "neg", ["times_cont_diff_at"]], ["del", "theorem", "of_le", ["times_cont_diff_at"]], ["del", "theorem", "pow", ["times_cont_diff_at"]], ["del", "theorem", "prod", ["times_cont_diff_at"]], ["del", "theorem", "prod_map'", ["times_cont_diff_at"]], ["del", "theorem", "prod_map", ["times_cont_diff_at"]], ["del", "theorem", "restrict_scalars", ["times_cont_diff_at"]], ["del", "theorem", "smul", ["times_cont_diff_at"]], ["del", "theorem", "sub", ["times_cont_diff_at"]], ["del", "theorem", "sum", ["times_cont_diff_at"]], ["del", "theorem", "times_cont_diff_within_at", ["times_cont_diff_at"]], ["del", "def", "times_cont_diff_at", []], ["del", "theorem", "times_cont_diff_at_const", []], ["del", "theorem", "times_cont_diff_at_fst", []], ["del", "theorem", "times_cont_diff_at_id", []], ["del", "theorem", "times_cont_diff_at_inv", []], ["del", "theorem", "times_cont_diff_at_map_inverse", []], ["del", "theorem", "times_cont_diff_at_of_subsingleton", []], ["del", "theorem", "times_cont_diff_at_pi", []], ["del", "theorem", "times_cont_diff_at_ring_inverse", []], ["del", "theorem", "times_cont_diff_at_snd", []], ["del", "theorem", "times_cont_diff_at_succ_iff_has_fderiv_at", []], ["del", "theorem", "times_cont_diff_at_top", []], ["del", "theorem", "times_cont_diff_at_zero", []], ["del", "theorem", "times_cont_diff_const", []], ["del", "theorem", "times_cont_diff_fst", []], ["del", "theorem", "times_cont_diff_id", []], ["del", "theorem", "times_cont_diff_iff_continuous_differentiable", []], ["del", "theorem", "times_cont_diff_iff_times_cont_diff_at", []], ["del", "theorem", "times_cont_diff_mul", []], ["del", "theorem", "times_cont_diff_neg", []], ["del", "theorem", "times_cont_diff_of_differentiable_iterated_fderiv", []], ["del", "theorem", "times_cont_diff_of_subsingleton", []], ["del", "theorem", "add", ["times_cont_diff_on"]], ["del", "theorem", "comp'", ["times_cont_diff_on"]], ["del", "theorem", "comp", ["times_cont_diff_on"]], ["del", "theorem", "comp_continuous_linear_map", ["times_cont_diff_on"]], ["del", "theorem", "congr", ["times_cont_diff_on"]], ["del", "theorem", "congr_mono", ["times_cont_diff_on"]], ["del", "theorem", "continuous_linear_map_comp", ["times_cont_diff_on"]], ["del", "theorem", "continuous_on", ["times_cont_diff_on"]], ["del", "theorem", "continuous_on_deriv_of_open", ["times_cont_diff_on"]], ["del", "theorem", "continuous_on_deriv_within", ["times_cont_diff_on"]], ["del", "theorem", "continuous_on_fderiv_of_open", ["times_cont_diff_on"]], ["del", "theorem", "continuous_on_fderiv_within", ["times_cont_diff_on"]], ["del", "theorem", "continuous_on_fderiv_within_apply", ["times_cont_diff_on"]], ["del", "theorem", "continuous_on_iterated_fderiv_within", ["times_cont_diff_on"]], ["del", "theorem", "deriv_of_open", ["times_cont_diff_on"]], ["del", "theorem", "deriv_within", ["times_cont_diff_on"]], ["del", "theorem", "differentiable_on", ["times_cont_diff_on"]], ["del", "theorem", "differentiable_on_iterated_fderiv_within", ["times_cont_diff_on"]], ["del", "theorem", "div", ["times_cont_diff_on"]], ["del", "theorem", "div_const", ["times_cont_diff_on"]], ["del", "theorem", "fderiv_of_open", ["times_cont_diff_on"]], ["del", "theorem", "fderiv_within", ["times_cont_diff_on"]], ["del", "theorem", "ftaylor_series_within", ["times_cont_diff_on"]], ["del", "theorem", "inv", ["times_cont_diff_on"]], ["del", "theorem", "mono", ["times_cont_diff_on"]], ["del", "theorem", "mul", ["times_cont_diff_on"]], ["del", "theorem", "neg", ["times_cont_diff_on"]], ["del", "theorem", "of_le", ["times_cont_diff_on"]], ["del", "theorem", "pow", ["times_cont_diff_on"]], ["del", "theorem", "prod", ["times_cont_diff_on"]], ["del", "theorem", "prod_map", ["times_cont_diff_on"]], ["del", "theorem", "restrict_scalars", ["times_cont_diff_on"]], ["del", "theorem", "smul", ["times_cont_diff_on"]], ["del", "theorem", "sub", ["times_cont_diff_on"]], ["del", "theorem", "sum", ["times_cont_diff_on"]], ["del", "theorem", "times_cont_diff_within_at", ["times_cont_diff_on"]], ["del", "theorem", "times_cont_diff_on_all_iff_nat", []], ["del", "theorem", "times_cont_diff_on_congr", []], ["del", "theorem", "times_cont_diff_on_const", []], ["del", "theorem", "times_cont_diff_on_fderiv_within_apply", []], ["del", "theorem", "times_cont_diff_on_fst", []], ["del", "theorem", "times_cont_diff_on_id", []], ["del", "theorem", "times_cont_diff_on_iff_continuous_on_differentiable_on", []], ["del", "theorem", "times_cont_diff_on_iff_forall_nat_le", []], ["del", "theorem", "times_cont_diff_on_iff_ftaylor_series", []], ["del", "theorem", "times_cont_diff_on_inv", []], ["del", "theorem", "times_cont_diff_on_of_continuous_on_differentiable_on", []], ["del", "theorem", "times_cont_diff_on_of_differentiable_on", []], ["del", "theorem", "times_cont_diff_on_of_locally_times_cont_diff_on", []], ["del", "theorem", "times_cont_diff_on_of_subsingleton", []], ["del", "theorem", "times_cont_diff_on_pi", []], ["del", "theorem", "times_cont_diff_on_snd", []], ["del", "theorem", "times_cont_diff_on_succ_iff_deriv_of_open", []], ["del", "theorem", "times_cont_diff_on_succ_iff_deriv_within", []], ["del", "theorem", "times_cont_diff_on_succ_iff_fderiv_of_open", []], ["del", "theorem", "times_cont_diff_on_succ_iff_fderiv_within", []], ["del", "theorem", "times_cont_diff_on_succ_iff_has_fderiv_within_at", []], ["del", "theorem", "times_cont_diff_on_top", []], ["del", "theorem", "times_cont_diff_on_top_iff_deriv_of_open", []], ["del", "theorem", "times_cont_diff_on_top_iff_deriv_within", []], ["del", "theorem", "times_cont_diff_on_top_iff_fderiv_of_open", []], ["del", "theorem", "times_cont_diff_on_top_iff_fderiv_within", []], ["del", "theorem", "times_cont_diff_on_univ", []], ["del", "theorem", "times_cont_diff_on_zero", []], ["del", "theorem", "times_cont_diff_pi", []], ["del", "theorem", "times_cont_diff_prod_assoc", []], ["del", "theorem", "times_cont_diff_prod_assoc_symm", []], ["del", "theorem", "times_cont_diff_smul", []], ["del", "theorem", "times_cont_diff_snd", []], ["del", "theorem", "times_cont_diff_succ_iff_deriv", []], ["del", "theorem", "times_cont_diff_succ_iff_fderiv", []], ["del", "theorem", "times_cont_diff_top", []], ["del", "theorem", "times_cont_diff_top_iff_fderiv", []], ["del", "theorem", "add", ["times_cont_diff_within_at"]], ["del", "theorem", "comp'", ["times_cont_diff_within_at"]], ["del", "theorem", "comp", ["times_cont_diff_within_at"]], ["del", "theorem", "comp_continuous_linear_map", ["times_cont_diff_within_at"]], ["del", "theorem", "congr'", ["times_cont_diff_within_at"]], ["del", "theorem", "congr", ["times_cont_diff_within_at"]], ["del", "theorem", "congr_nhds", ["times_cont_diff_within_at"]], ["del", "theorem", "congr_of_eventually_eq'", ["times_cont_diff_within_at"]], ["del", "theorem", "congr_of_eventually_eq", ["times_cont_diff_within_at"]], ["del", "theorem", "continuous_linear_map_comp", ["times_cont_diff_within_at"]], ["del", "theorem", "continuous_within_at", ["times_cont_diff_within_at"]], ["del", "theorem", "differentiable_within_at'", ["times_cont_diff_within_at"]], ["del", "theorem", "differentiable_within_at", ["times_cont_diff_within_at"]], ["del", "theorem", "div", ["times_cont_diff_within_at"]], ["del", "theorem", "div_const", ["times_cont_diff_within_at"]], ["del", "theorem", "exists_lipschitz_on_with", ["times_cont_diff_within_at"]], ["del", "theorem", "inv", ["times_cont_diff_within_at"]], ["del", "theorem", "mono", ["times_cont_diff_within_at"]], ["del", "theorem", "mono_of_mem", ["times_cont_diff_within_at"]], ["del", "theorem", "mul", ["times_cont_diff_within_at"]], ["del", "theorem", "neg", ["times_cont_diff_within_at"]], ["del", "theorem", "of_le", ["times_cont_diff_within_at"]], ["del", "theorem", "pow", ["times_cont_diff_within_at"]], ["del", "theorem", "prod", ["times_cont_diff_within_at"]], ["del", "theorem", "prod_map'", ["times_cont_diff_within_at"]], ["del", "theorem", "prod_map", ["times_cont_diff_within_at"]], ["del", "theorem", "restrict_scalars", ["times_cont_diff_within_at"]], ["del", "theorem", "smul", ["times_cont_diff_within_at"]], ["del", "theorem", "sub", ["times_cont_diff_within_at"]], ["del", "theorem", "sum", ["times_cont_diff_within_at"]], ["del", "theorem", "times_cont_diff_at", ["times_cont_diff_within_at"]], ["del", "theorem", "times_cont_diff_on", ["times_cont_diff_within_at"]], ["del", "def", "times_cont_diff_within_at", []], ["del", "theorem", "times_cont_diff_within_at_congr_nhds", []], ["del", "theorem", "times_cont_diff_within_at_const", []], ["del", "theorem", "times_cont_diff_within_at_fst", []], ["del", "theorem", "times_cont_diff_within_at_id", []], ["del", "theorem", "times_cont_diff_within_at_iff_forall_nat_le", []], ["del", "theorem", "times_cont_diff_within_at_inter'", []], ["del", "theorem", "times_cont_diff_within_at_inter", []], ["del", "theorem", "times_cont_diff_within_at_nat", []], ["del", "theorem", "times_cont_diff_within_at_of_subsingleton", []], ["del", "theorem", "times_cont_diff_within_at_pi", []], ["del", "theorem", "times_cont_diff_within_at_snd", []], ["del", "theorem", "times_cont_diff_within_at_succ_iff_has_fderiv_within_at", []], ["del", "theorem", "times_cont_diff_within_at_top", []], ["del", "theorem", "times_cont_diff_within_at_univ", []], ["del", "theorem", "times_cont_diff_within_at_zero", []], ["del", "theorem", "times_cont_diff_zero", []], ["del", "theorem", "times_cont_diff_zero_fun", []]]}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "image_mem_to_local_homeomorph_target", ["cont_diff_at"]], ["add", "def", "local_inverse", ["cont_diff_at"]], ["add", "theorem", "local_inverse_apply_image", ["cont_diff_at"]], ["add", "theorem", "mem_to_local_homeomorph_source", ["cont_diff_at"]], ["add", "def", "to_local_homeomorph", ["cont_diff_at"]], ["add", "theorem", "to_local_homeomorph_coe", ["cont_diff_at"]], ["add", "theorem", "to_local_inverse", ["cont_diff_at"]], ["del", "theorem", "image_mem_to_local_homeomorph_target", ["times_cont_diff_at"]], ["del", "def", "local_inverse", ["times_cont_diff_at"]], ["del", "theorem", "local_inverse_apply_image", ["times_cont_diff_at"]], ["del", "theorem", "mem_to_local_homeomorph_source", ["times_cont_diff_at"]], ["del", "def", "to_local_homeomorph", ["times_cont_diff_at"]], ["del", "theorem", "to_local_homeomorph_coe", ["times_cont_diff_at"]], ["del", "theorem", "to_local_inverse", ["times_cont_diff_at"]]]}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": [["add", "theorem", "continuous_iterated_deriv", ["cont_diff"]], ["add", "theorem", "differentiable_iterated_deriv", ["cont_diff"]], ["add", "theorem", "cont_diff_iff_iterated_deriv", []], ["add", "theorem", "cont_diff_of_differentiable_iterated_deriv", []], ["add", "theorem", "continuous_on_iterated_deriv_within", ["cont_diff_on"]], ["add", "theorem", "differentiable_on_iterated_deriv_within", ["cont_diff_on"]], ["add", "theorem", "cont_diff_on_iff_continuous_on_differentiable_on_deriv", []], ["add", "theorem", "cont_diff_on_of_continuous_on_differentiable_on_deriv", []], ["add", "theorem", "cont_diff_on_of_differentiable_on_deriv", []], ["del", "theorem", "continuous_iterated_deriv", ["times_cont_diff"]], ["del", "theorem", "differentiable_iterated_deriv", ["times_cont_diff"]], ["del", "theorem", "times_cont_diff_iff_iterated_deriv", []], ["del", "theorem", "times_cont_diff_of_differentiable_iterated_deriv", []], ["del", "theorem", "continuous_on_iterated_deriv_within", ["times_cont_diff_on"]], ["del", "theorem", "differentiable_on_iterated_deriv_within", ["times_cont_diff_on"]], ["del", "theorem", "times_cont_diff_on_iff_continuous_on_differentiable_on_deriv", []], ["del", "theorem", "times_cont_diff_on_of_continuous_on_differentiable_on_deriv", []], ["del", "theorem", "times_cont_diff_on_of_differentiable_on_deriv", []]]}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["add", "theorem", "R_pos", ["cont_diff_bump"]], ["add", "theorem", "coe_eq_comp", ["cont_diff_bump"]], ["add", "theorem", "eventually_eq_one", ["cont_diff_bump"]], ["add", "theorem", "eventually_eq_one_of_mem_ball", ["cont_diff_bump"]], ["add", "theorem", "exists_closure_subset", ["cont_diff_bump"]], ["add", "theorem", "exists_tsupport_subset", ["cont_diff_bump"]], ["add", "theorem", "le_one", ["cont_diff_bump"]], ["add", "theorem", "lt_one_of_lt_dist", ["cont_diff_bump"]], ["add", "theorem", "nonneg", ["cont_diff_bump"]], ["add", "theorem", "one_of_mem_closed_ball", ["cont_diff_bump"]], ["add", "theorem", "pos_of_mem_ball", ["cont_diff_bump"]], ["add", "theorem", "support_eq", ["cont_diff_bump"]], ["add", "def", "to_fun", ["cont_diff_bump"]], ["add", "theorem", "tsupport_eq", ["cont_diff_bump"]], ["add", "theorem", "zero_of_le_dist", ["cont_diff_bump"]], ["add", "structure", "cont_diff_bump", []], ["add", "theorem", "R_pos", ["cont_diff_bump_of_inner"]], ["add", "theorem", "eventually_eq_one", ["cont_diff_bump_of_inner"]], ["add", "theorem", "eventually_eq_one_of_mem_ball", ["cont_diff_bump_of_inner"]], ["add", "theorem", "le_one", ["cont_diff_bump_of_inner"]], ["add", "theorem", "lt_one_of_lt_dist", ["cont_diff_bump_of_inner"]], ["add", "theorem", "nonneg", ["cont_diff_bump_of_inner"]], ["add", "theorem", "one_of_mem_closed_ball", ["cont_diff_bump_of_inner"]], ["add", "theorem", "pos_of_mem_ball", ["cont_diff_bump_of_inner"]], ["add", "theorem", "support_eq", ["cont_diff_bump_of_inner"]], ["add", "def", "to_fun", ["cont_diff_bump_of_inner"]], ["add", "theorem", "zero_of_le_dist", ["cont_diff_bump_of_inner"]], ["add", "structure", "cont_diff_bump_of_inner", []], ["add", "theorem", "exists_cont_diff_bump_function_of_mem_nhds", []], ["del", "theorem", "exists_times_cont_diff_bump_function_of_mem_nhds", []], ["del", "theorem", "R_pos", ["times_cont_diff_bump"]], ["del", "theorem", "coe_eq_comp", ["times_cont_diff_bump"]], ["del", "theorem", "eventually_eq_one", ["times_cont_diff_bump"]], ["del", "theorem", "eventually_eq_one_of_mem_ball", ["times_cont_diff_bump"]], ["del", "theorem", "exists_closure_subset", ["times_cont_diff_bump"]], ["del", "theorem", "exists_tsupport_subset", ["times_cont_diff_bump"]], ["del", "theorem", "le_one", ["times_cont_diff_bump"]], ["del", "theorem", "lt_one_of_lt_dist", ["times_cont_diff_bump"]], ["del", "theorem", "nonneg", ["times_cont_diff_bump"]], ["del", "theorem", "one_of_mem_closed_ball", ["times_cont_diff_bump"]], ["del", "theorem", "pos_of_mem_ball", ["times_cont_diff_bump"]], ["del", "theorem", "support_eq", ["times_cont_diff_bump"]], ["del", "def", "to_fun", ["times_cont_diff_bump"]], ["del", "theorem", "tsupport_eq", ["times_cont_diff_bump"]], ["del", "theorem", "zero_of_le_dist", ["times_cont_diff_bump"]], ["del", "structure", "times_cont_diff_bump", []], ["del", "theorem", "R_pos", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "eventually_eq_one", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "eventually_eq_one_of_mem_ball", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "le_one", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "lt_one_of_lt_dist", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "nonneg", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "one_of_mem_closed_ball", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "pos_of_mem_ball", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "support_eq", ["times_cont_diff_bump_of_inner"]], ["del", "def", "to_fun", ["times_cont_diff_bump_of_inner"]], ["del", "theorem", "zero_of_le_dist", ["times_cont_diff_bump_of_inner"]], ["del", "structure", "times_cont_diff_bump_of_inner", []]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": [["add", "theorem", "real_of_complex", ["cont_diff"]], ["add", "theorem", "real_of_complex", ["cont_diff_at"]], ["del", "theorem", "real_of_complex", ["times_cont_diff"]], ["del", "theorem", "real_of_complex", ["times_cont_diff_at"]]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": [["add", "theorem", "dist", ["cont_diff"]], ["add", "theorem", "inner", ["cont_diff"]], ["add", "theorem", "norm", ["cont_diff"]], ["add", "theorem", "norm_sq", ["cont_diff"]], ["add", "theorem", "dist", ["cont_diff_at"]], ["add", "theorem", "inner", ["cont_diff_at"]], ["add", "theorem", "norm", ["cont_diff_at"]], ["add", "theorem", "norm_sq", ["cont_diff_at"]], ["add", "theorem", "cont_diff_at_inner", []], ["add", "theorem", "cont_diff_at_norm", []], ["add", "theorem", "cont_diff_inner", []], ["add", "theorem", "cont_diff_norm_sq", []], ["add", "theorem", "dist", ["cont_diff_on"]], ["add", "theorem", "inner", ["cont_diff_on"]], ["add", "theorem", "norm", ["cont_diff_on"]], ["add", "theorem", "norm_sq", ["cont_diff_on"]], ["add", "theorem", "dist", ["cont_diff_within_at"]], ["add", "theorem", "inner", ["cont_diff_within_at"]], ["add", "theorem", "norm", ["cont_diff_within_at"]], ["add", "theorem", "norm_sq", ["cont_diff_within_at"]], ["del", "theorem", "dist", ["times_cont_diff"]], ["del", "theorem", "inner", ["times_cont_diff"]], ["del", "theorem", "norm", ["times_cont_diff"]], ["del", "theorem", "norm_sq", ["times_cont_diff"]], ["del", "theorem", "dist", ["times_cont_diff_at"]], ["del", "theorem", "inner", ["times_cont_diff_at"]], ["del", "theorem", "norm", ["times_cont_diff_at"]], ["del", "theorem", "norm_sq", ["times_cont_diff_at"]], ["del", "theorem", "times_cont_diff_at_inner", []], ["del", "theorem", "times_cont_diff_at_norm", []], ["del", "theorem", "times_cont_diff_inner", []], ["del", "theorem", "times_cont_diff_norm_sq", []], ["del", "theorem", "dist", ["times_cont_diff_on"]], ["del", "theorem", "inner", ["times_cont_diff_on"]], ["del", "theorem", "norm", ["times_cont_diff_on"]], ["del", "theorem", "norm_sq", ["times_cont_diff_on"]], ["del", "theorem", "dist", ["times_cont_diff_within_at"]], ["del", "theorem", "inner", ["times_cont_diff_within_at"]], ["del", "theorem", "norm", ["times_cont_diff_within_at"]], ["del", "theorem", "norm_sq", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": [["add", "theorem", "euclidean_dist", ["cont_diff"]], ["del", "theorem", "euclidean_dist", ["times_cont_diff"]]]}, {"oldPath": "src/analysis/special_functions/complex/log_deriv.lean", "newPath": "src/analysis/special_functions/complex/log_deriv.lean", "changes": [["add", "theorem", "cont_diff_at_log", ["complex"]], ["del", "theorem", "times_cont_diff_at_log", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": [["add", "theorem", "cont_diff_exp", ["complex"]], ["del", "theorem", "times_cont_diff_exp", ["complex"]], ["add", "theorem", "cexp", ["cont_diff"]], ["add", "theorem", "exp", ["cont_diff"]], ["add", "theorem", "cexp", ["cont_diff_at"]], ["add", "theorem", "exp", ["cont_diff_at"]], ["add", "theorem", "cexp", ["cont_diff_on"]], ["add", "theorem", "exp", ["cont_diff_on"]], ["add", "theorem", "cexp", ["cont_diff_within_at"]], ["add", "theorem", "exp", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_exp", ["real"]], ["del", "theorem", "times_cont_diff_exp", ["real"]], ["del", "theorem", "cexp", ["times_cont_diff"]], ["del", "theorem", "exp", ["times_cont_diff"]], ["del", "theorem", "cexp", ["times_cont_diff_at"]], ["del", "theorem", "exp", ["times_cont_diff_at"]], ["del", "theorem", "cexp", ["times_cont_diff_on"]], ["del", "theorem", "exp", ["times_cont_diff_on"]], ["del", "theorem", "cexp", ["times_cont_diff_within_at"]], ["del", "theorem", "exp", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/log_deriv.lean", "newPath": "src/analysis/special_functions/log_deriv.lean", "changes": [["add", "theorem", "log", ["cont_diff"]], ["add", "theorem", "log", ["cont_diff_at"]], ["add", "theorem", "log", ["cont_diff_on"]], ["add", "theorem", "log", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_at_log", ["real"]], ["add", "theorem", "cont_diff_on_log", ["real"]], ["del", "theorem", "times_cont_diff_at_log", ["real"]], ["del", "theorem", "times_cont_diff_on_log", ["real"]], ["del", "theorem", "log", ["times_cont_diff"]], ["del", "theorem", "log", ["times_cont_diff_at"]], ["del", "theorem", "log", ["times_cont_diff_on"]], ["del", "theorem", "log", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/pow_deriv.lean", "newPath": "src/analysis/special_functions/pow_deriv.lean", "changes": [["add", "theorem", "rpow", ["cont_diff"]], ["add", "theorem", "rpow_const_of_le", ["cont_diff"]], ["add", "theorem", "rpow_const_of_ne", ["cont_diff"]], ["add", "theorem", "rpow", ["cont_diff_at"]], ["add", "theorem", "rpow_const_of_le", ["cont_diff_at"]], ["add", "theorem", "rpow_const_of_ne", ["cont_diff_at"]], ["add", "theorem", "rpow", ["cont_diff_on"]], ["add", "theorem", "rpow_const_of_le", ["cont_diff_on"]], ["add", "theorem", "rpow_const_of_ne", ["cont_diff_on"]], ["add", "theorem", "rpow", ["cont_diff_within_at"]], ["add", "theorem", "rpow_const_of_le", ["cont_diff_within_at"]], ["add", "theorem", "rpow_const_of_ne", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_at_rpow_const", ["real"]], ["add", "theorem", "cont_diff_at_rpow_const_of_le", ["real"]], ["add", "theorem", "cont_diff_at_rpow_const_of_ne", ["real"]], ["add", "theorem", "cont_diff_at_rpow_of_ne", ["real"]], ["add", "theorem", "cont_diff_rpow_const_of_le", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_const", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_const_of_le", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_const_of_ne", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_of_ne", ["real"]], ["del", "theorem", "times_cont_diff_rpow_const_of_le", ["real"]], ["del", "theorem", "rpow", ["times_cont_diff"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff"]], ["del", "theorem", "rpow", ["times_cont_diff_at"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff_at"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff_at"]], ["del", "theorem", "rpow", ["times_cont_diff_on"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff_on"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff_on"]], ["del", "theorem", "rpow", ["times_cont_diff_within_at"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff_within_at"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/sqrt.lean", "newPath": "src/analysis/special_functions/sqrt.lean", "changes": [["add", "theorem", "sqrt", ["cont_diff"]], ["add", "theorem", "sqrt", ["cont_diff_at"]], ["add", "theorem", "sqrt", ["cont_diff_on"]], ["add", "theorem", "sqrt", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_at_sqrt", ["real"]], ["del", "theorem", "times_cont_diff_at_sqrt", ["real"]], ["del", "theorem", "sqrt", ["times_cont_diff"]], ["del", "theorem", "sqrt", ["times_cont_diff_at"]], ["del", "theorem", "sqrt", ["times_cont_diff_on"]], ["del", "theorem", "sqrt", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "changes": [["add", "theorem", "arctan", ["cont_diff"]], ["add", "theorem", "arctan", ["cont_diff_at"]], ["add", "theorem", "arctan", ["cont_diff_on"]], ["add", "theorem", "arctan", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_arctan", ["real"]], ["add", "theorem", "cont_diff_at_tan", ["real"]], ["del", "theorem", "times_cont_diff_arctan", ["real"]], ["del", "theorem", "times_cont_diff_at_tan", ["real"]], ["del", "theorem", "arctan", ["times_cont_diff"]], ["del", "theorem", "arctan", ["times_cont_diff_at"]], ["del", "theorem", "arctan", ["times_cont_diff_on"]], ["del", "theorem", "arctan", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": [["add", "theorem", "cont_diff_at_tan", ["complex"]], ["del", "theorem", "times_cont_diff_at_tan", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": [["add", "theorem", "cont_diff_cos", ["complex"]], ["add", "theorem", "cont_diff_cosh", ["complex"]], ["add", "theorem", "cont_diff_sin", ["complex"]], ["add", "theorem", "cont_diff_sinh", ["complex"]], ["del", "theorem", "times_cont_diff_cos", ["complex"]], ["del", "theorem", "times_cont_diff_cosh", ["complex"]], ["del", "theorem", "times_cont_diff_sin", ["complex"]], ["del", "theorem", "times_cont_diff_sinh", ["complex"]], ["add", "theorem", "ccos", ["cont_diff"]], ["add", "theorem", "ccosh", ["cont_diff"]], ["add", "theorem", "cos", ["cont_diff"]], ["add", "theorem", "cosh", ["cont_diff"]], ["add", "theorem", "csin", ["cont_diff"]], ["add", "theorem", "csinh", ["cont_diff"]], ["add", "theorem", "sin", ["cont_diff"]], ["add", "theorem", "sinh", ["cont_diff"]], ["add", "theorem", "ccos", ["cont_diff_at"]], ["add", "theorem", "ccosh", ["cont_diff_at"]], ["add", "theorem", "cos", ["cont_diff_at"]], ["add", "theorem", "cosh", ["cont_diff_at"]], ["add", "theorem", "csin", ["cont_diff_at"]], ["add", "theorem", "csinh", ["cont_diff_at"]], ["add", "theorem", "sin", ["cont_diff_at"]], ["add", "theorem", "sinh", ["cont_diff_at"]], ["add", "theorem", "ccos", ["cont_diff_on"]], ["add", "theorem", "ccosh", ["cont_diff_on"]], ["add", "theorem", "cos", ["cont_diff_on"]], ["add", "theorem", "cosh", ["cont_diff_on"]], ["add", "theorem", "csin", ["cont_diff_on"]], ["add", "theorem", "csinh", ["cont_diff_on"]], ["add", "theorem", "sin", ["cont_diff_on"]], ["add", "theorem", "sinh", ["cont_diff_on"]], ["add", "theorem", "ccos", ["cont_diff_within_at"]], ["add", "theorem", "ccosh", ["cont_diff_within_at"]], ["add", "theorem", "cos", ["cont_diff_within_at"]], ["add", "theorem", "cosh", ["cont_diff_within_at"]], ["add", "theorem", "csin", ["cont_diff_within_at"]], ["add", "theorem", "csinh", ["cont_diff_within_at"]], ["add", "theorem", "sin", ["cont_diff_within_at"]], ["add", "theorem", "sinh", ["cont_diff_within_at"]], ["add", "theorem", "cont_diff_cos", ["real"]], ["add", "theorem", "cont_diff_cosh", ["real"]], ["add", "theorem", "cont_diff_sin", ["real"]], ["add", "theorem", "cont_diff_sinh", ["real"]], ["del", "theorem", "times_cont_diff_cos", ["real"]], ["del", "theorem", "times_cont_diff_cosh", ["real"]], ["del", "theorem", "times_cont_diff_sin", ["real"]], ["del", "theorem", "times_cont_diff_sinh", ["real"]], ["del", "theorem", "ccos", ["times_cont_diff"]], ["del", "theorem", "ccosh", ["times_cont_diff"]], ["del", "theorem", "cos", ["times_cont_diff"]], ["del", "theorem", "cosh", ["times_cont_diff"]], ["del", "theorem", "csin", ["times_cont_diff"]], ["del", "theorem", "csinh", ["times_cont_diff"]], ["del", "theorem", "sin", ["times_cont_diff"]], ["del", "theorem", "sinh", ["times_cont_diff"]], ["del", "theorem", "ccos", ["times_cont_diff_at"]], ["del", "theorem", "ccosh", ["times_cont_diff_at"]], ["del", "theorem", "cos", ["times_cont_diff_at"]], ["del", "theorem", "cosh", ["times_cont_diff_at"]], ["del", "theorem", "csin", ["times_cont_diff_at"]], ["del", "theorem", "csinh", ["times_cont_diff_at"]], ["del", "theorem", "sin", ["times_cont_diff_at"]], ["del", "theorem", "sinh", ["times_cont_diff_at"]], ["del", "theorem", "ccos", ["times_cont_diff_on"]], ["del", "theorem", "ccosh", ["times_cont_diff_on"]], ["del", "theorem", "cos", ["times_cont_diff_on"]], ["del", "theorem", "cosh", ["times_cont_diff_on"]], ["del", "theorem", "csin", ["times_cont_diff_on"]], ["del", "theorem", "csinh", ["times_cont_diff_on"]], ["del", "theorem", "sin", ["times_cont_diff_on"]], ["del", "theorem", "sinh", ["times_cont_diff_on"]], ["del", "theorem", "ccos", ["times_cont_diff_within_at"]], ["del", "theorem", "ccosh", ["times_cont_diff_within_at"]], ["del", "theorem", "cos", ["times_cont_diff_within_at"]], ["del", "theorem", "cosh", ["times_cont_diff_within_at"]], ["del", "theorem", "csin", ["times_cont_diff_within_at"]], ["del", "theorem", "csinh", ["times_cont_diff_within_at"]], ["del", "theorem", "sin", ["times_cont_diff_within_at"]], ["del", "theorem", "sinh", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "changes": [["add", "theorem", "cont_diff_at_arccos", ["real"]], ["add", "theorem", "cont_diff_at_arccos_iff", ["real"]], ["add", "theorem", "cont_diff_at_arcsin", ["real"]], ["add", "theorem", "cont_diff_at_arcsin_iff", ["real"]], ["add", "theorem", "cont_diff_on_arccos", ["real"]], ["add", "theorem", "cont_diff_on_arcsin", ["real"]], ["del", "theorem", "times_cont_diff_at_arccos", ["real"]], ["del", "theorem", "times_cont_diff_at_arccos_iff", ["real"]], ["del", "theorem", "times_cont_diff_at_arcsin", ["real"]], ["del", "theorem", "times_cont_diff_at_arcsin_iff", ["real"]], ["del", "theorem", "times_cont_diff_on_arccos", ["real"]], ["del", "theorem", "times_cont_diff_on_arcsin", ["real"]]]}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": [["mod", "theorem", "R_pos", ["smooth_bump_function"]], ["mod", "structure", "smooth_bump_function", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/cont_mdiff.lean", "changes": [["add", "theorem", "cont_mdiff_at_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "cont_mdiff_on_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "cont_mdiff_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "cont_mdiff_within_at_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "times_cont_mdiff_at_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "times_cont_mdiff_on_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "times_cont_mdiff_proj", ["basic_smooth_bundle_core"]], ["del", "theorem", "times_cont_mdiff_within_at_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "cont_diff_within_at_local_invariant_prop", []], ["add", "theorem", "cont_diff_within_at_local_invariant_prop_id", []], ["add", "theorem", "cont_diff_within_at_local_invariant_prop_mono", []], ["add", "def", "cont_diff_within_at_prop", []], ["add", "theorem", "comp", ["cont_mdiff"]], ["add", "theorem", "comp_cont_mdiff_on", ["cont_mdiff"]], ["add", "theorem", "cont_mdiff_at", ["cont_mdiff"]], ["add", "theorem", "cont_mdiff_on", ["cont_mdiff"]], ["add", "theorem", "cont_mdiff_tangent_map", ["cont_mdiff"]], ["add", "theorem", "continuous", ["cont_mdiff"]], ["add", "theorem", "continuous_tangent_map", ["cont_mdiff"]], ["add", "theorem", "mdifferentiable", ["cont_mdiff"]], ["add", "theorem", "of_le", ["cont_mdiff"]], ["add", "theorem", "of_succ", ["cont_mdiff"]], ["add", "theorem", "prod_map", ["cont_mdiff"]], ["add", "theorem", "prod_mk", ["cont_mdiff"]], ["add", "theorem", "prod_mk_space", ["cont_mdiff"]], ["add", "theorem", "smooth", ["cont_mdiff"]], ["add", "def", "cont_mdiff", []], ["add", "theorem", "comp", ["cont_mdiff_at"]], ["add", "theorem", "comp_cont_mdiff_within_at", ["cont_mdiff_at"]], ["add", "theorem", "congr_of_eventually_eq", ["cont_mdiff_at"]], ["add", "theorem", "cont_mdiff_within_at", ["cont_mdiff_at"]], ["add", "theorem", "continuous_at", ["cont_mdiff_at"]], ["add", "theorem", "mdifferentiable_at", ["cont_mdiff_at"]], ["add", "theorem", "of_le", ["cont_mdiff_at"]], ["add", "theorem", "of_succ", ["cont_mdiff_at"]], ["add", "theorem", "prod_map'", ["cont_mdiff_at"]], ["add", "theorem", "prod_map", ["cont_mdiff_at"]], ["add", "theorem", "prod_mk", ["cont_mdiff_at"]], ["add", "theorem", "prod_mk_space", ["cont_mdiff_at"]], ["add", "theorem", "smooth_at", ["cont_mdiff_at"]], ["add", "def", "cont_mdiff_at", []], ["add", "theorem", "cont_mdiff_at_const", []], ["add", "theorem", "cont_mdiff_at_ext_chart_at'", []], ["add", "theorem", "cont_mdiff_at_ext_chart_at", []], ["add", "theorem", "cont_mdiff_at_fst", []], ["add", "theorem", "cont_mdiff_at_id", []], ["add", "theorem", "cont_mdiff_at_iff_cont_diff_at", []], ["add", "theorem", "cont_mdiff_at_iff_cont_mdiff_on_nhds", []], ["add", "theorem", "cont_mdiff_at_one", []], ["add", "theorem", "cont_mdiff_at_pi_space", []], ["add", "theorem", "cont_mdiff_at_snd", []], ["add", "theorem", "cont_mdiff_at_top", []], ["add", "theorem", "cont_mdiff_const", []], ["add", "theorem", "cont_mdiff_fst", []], ["add", "theorem", "cont_mdiff_id", []], ["add", "theorem", "cont_mdiff_iff", []], ["add", "theorem", "cont_mdiff_iff_cont_diff", []], ["add", "theorem", "cont_mdiff_iff_target", []], ["add", "theorem", "cont_mdiff_of_locally_cont_mdiff_on", []], ["add", "theorem", "cont_mdiff_of_support", []], ["add", "theorem", "comp'", ["cont_mdiff_on"]], ["add", "theorem", "comp", ["cont_mdiff_on"]], ["add", "theorem", "congr", ["cont_mdiff_on"]], ["add", "theorem", "cont_mdiff_on_tangent_map_within", ["cont_mdiff_on"]], ["add", "theorem", "cont_mdiff_on_tangent_map_within_aux", ["cont_mdiff_on"]], ["add", "theorem", "continuous_on", ["cont_mdiff_on"]], ["add", "theorem", "continuous_on_tangent_map_within", ["cont_mdiff_on"]], ["add", "theorem", "continuous_on_tangent_map_within_aux", ["cont_mdiff_on"]], ["add", "theorem", "mdifferentiable_on", ["cont_mdiff_on"]], ["add", "theorem", "mono", ["cont_mdiff_on"]], ["add", "theorem", "of_le", ["cont_mdiff_on"]], ["add", "theorem", "of_succ", ["cont_mdiff_on"]], ["add", "theorem", "prod_map", ["cont_mdiff_on"]], ["add", "theorem", "prod_mk", ["cont_mdiff_on"]], ["add", "theorem", "prod_mk_space", ["cont_mdiff_on"]], ["add", "theorem", "smooth_on", ["cont_mdiff_on"]], ["add", "def", "cont_mdiff_on", []], ["add", "theorem", "cont_mdiff_on_chart", []], ["add", "theorem", "cont_mdiff_on_chart_symm", []], ["add", "theorem", "cont_mdiff_on_congr", []], ["add", "theorem", "cont_mdiff_on_const", []], ["add", "theorem", "cont_mdiff_on_ext_chart_at", []], ["add", "theorem", "cont_mdiff_on_fst", []], ["add", "theorem", "cont_mdiff_on_id", []], ["add", "theorem", "cont_mdiff_on_iff", []], ["add", "theorem", "cont_mdiff_on_iff_cont_diff_on", []], ["add", "theorem", "cont_mdiff_on_iff_target", []], ["add", "theorem", "cont_mdiff_on_of_locally_cont_mdiff_on", []], ["add", "theorem", "cont_mdiff_on_of_mem_maximal_atlas", []], ["add", "theorem", "cont_mdiff_on_one", []], ["add", "theorem", "cont_mdiff_on_pi_space", []], ["add", "theorem", "cont_mdiff_on_snd", []], ["add", "theorem", "cont_mdiff_on_symm_of_mem_maximal_atlas", []], ["add", "theorem", "cont_mdiff_on_top", []], ["add", "theorem", "cont_mdiff_on_univ", []], ["add", "theorem", "cont_mdiff_one", []], ["add", "theorem", "cont_mdiff_pi_space", []], ["add", "theorem", "cont_mdiff_snd", []], ["add", "theorem", "cont_mdiff_top", []], ["add", "theorem", "comp'", ["cont_mdiff_within_at"]], ["add", "theorem", "comp", ["cont_mdiff_within_at"]], ["add", "theorem", "congr", ["cont_mdiff_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["cont_mdiff_within_at"]], ["add", "theorem", "cont_mdiff_at", ["cont_mdiff_within_at"]], ["add", "theorem", "continuous_within_at", ["cont_mdiff_within_at"]], ["add", "theorem", "mdifferentiable_within_at", ["cont_mdiff_within_at"]], ["add", "theorem", "mono", ["cont_mdiff_within_at"]], ["add", "theorem", "of_le", ["cont_mdiff_within_at"]], ["add", "theorem", "of_succ", ["cont_mdiff_within_at"]], ["add", "theorem", "prod_map'", ["cont_mdiff_within_at"]], ["add", "theorem", "prod_map", ["cont_mdiff_within_at"]], ["add", "theorem", "prod_mk", ["cont_mdiff_within_at"]], ["add", "theorem", "prod_mk_space", ["cont_mdiff_within_at"]], ["add", "theorem", "smooth_within_at", ["cont_mdiff_within_at"]], ["add", "def", "cont_mdiff_within_at", []], ["add", "theorem", "cont_mdiff_within_at_congr", []], ["add", "theorem", "cont_mdiff_within_at_const", []], ["add", "theorem", "cont_mdiff_within_at_fst", []], ["add", "theorem", "cont_mdiff_within_at_id", []], ["add", "theorem", "cont_mdiff_within_at_iff''", []], ["add", "theorem", "cont_mdiff_within_at_iff'", []], ["add", "theorem", "cont_mdiff_within_at_iff", []], ["add", "theorem", "cont_mdiff_within_at_iff_cont_diff_within_at", []], ["add", "theorem", "cont_mdiff_within_at_iff_cont_mdiff_on_nhds", []], ["add", "theorem", "cont_mdiff_within_at_iff_nat", []], ["add", "theorem", "cont_mdiff_within_at_iff_target", []], ["add", "theorem", "cont_mdiff_within_at_inter'", []], ["add", "theorem", "cont_mdiff_within_at_inter", []], ["add", "theorem", "cont_mdiff_within_at_one", []], ["add", "theorem", "cont_mdiff_within_at_pi_space", []], ["add", "theorem", "cont_mdiff_within_at_snd", []], ["add", "theorem", "cont_mdiff_within_at_top", []], ["add", "theorem", "cont_mdiff_within_at_univ", []], ["add", "theorem", "cont_mdiff", ["continuous_linear_map"]], ["del", "theorem", "times_cont_mdiff", ["continuous_linear_map"]], ["add", "theorem", "cont_mdiff_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "cont_mdiff_within_at_iff", ["filter", "eventually_eq"]], ["del", "theorem", "times_cont_mdiff_at_iff", ["filter", "eventually_eq"]], ["del", "theorem", "times_cont_mdiff_within_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "cont_mdiff", ["smooth"]], ["del", "theorem", "times_cont_mdiff", ["smooth"]], ["mod", "def", "smooth", []], ["add", "theorem", "cont_mdiff_at", ["smooth_at"]], ["del", "theorem", "times_cont_mdiff_at", ["smooth_at"]], ["mod", "def", "smooth_at", []], ["mod", "theorem", "smooth_at_id", []], ["mod", "theorem", "smooth_const", []], ["mod", "theorem", "smooth_id", []], ["add", "theorem", "cont_mdiff_on", ["smooth_on"]], ["del", "theorem", "times_cont_mdiff_on", ["smooth_on"]], ["mod", "def", "smooth_on", []], ["mod", "theorem", "smooth_on_id", []], ["add", "theorem", "cont_mdiff_within_at", ["smooth_within_at"]], ["del", "theorem", "times_cont_mdiff_within_at", ["smooth_within_at"]], ["mod", "theorem", "smooth_within_at_id", []], ["add", "theorem", "cont_mdiff_at_proj", ["tangent_bundle"]], ["add", "theorem", "cont_mdiff_on_proj", ["tangent_bundle"]], ["add", "theorem", "cont_mdiff_proj", ["tangent_bundle"]], ["add", "theorem", "cont_mdiff_within_at_proj", ["tangent_bundle"]], ["del", "theorem", "times_cont_mdiff_at_proj", ["tangent_bundle"]], ["del", "theorem", "times_cont_mdiff_on_proj", ["tangent_bundle"]], ["del", "theorem", "times_cont_mdiff_proj", ["tangent_bundle"]], ["del", "theorem", "times_cont_mdiff_within_at_proj", ["tangent_bundle"]], ["del", "theorem", "times_cont_diff_within_at_local_invariant_prop", []], ["del", "theorem", "times_cont_diff_within_at_local_invariant_prop_id", []], ["del", "theorem", "times_cont_diff_within_at_local_invariant_prop_mono", []], ["del", "def", "times_cont_diff_within_at_prop", []], ["del", "theorem", "comp", ["times_cont_mdiff"]], ["del", "theorem", "comp_times_cont_mdiff_on", ["times_cont_mdiff"]], ["del", "theorem", "continuous", ["times_cont_mdiff"]], ["del", "theorem", "continuous_tangent_map", ["times_cont_mdiff"]], ["del", "theorem", "mdifferentiable", ["times_cont_mdiff"]], ["del", "theorem", "of_le", ["times_cont_mdiff"]], ["del", "theorem", "of_succ", ["times_cont_mdiff"]], ["del", "theorem", "prod_map", ["times_cont_mdiff"]], ["del", "theorem", "prod_mk", ["times_cont_mdiff"]], ["del", "theorem", "prod_mk_space", ["times_cont_mdiff"]], ["del", "theorem", "smooth", ["times_cont_mdiff"]], ["del", "theorem", "times_cont_mdiff_at", ["times_cont_mdiff"]], ["del", "theorem", "times_cont_mdiff_on", ["times_cont_mdiff"]], ["del", "theorem", "times_cont_mdiff_tangent_map", ["times_cont_mdiff"]], ["del", "def", "times_cont_mdiff", []], ["del", "theorem", "comp", ["times_cont_mdiff_at"]], ["del", "theorem", "comp_times_cont_mdiff_within_at", ["times_cont_mdiff_at"]], ["del", "theorem", "congr_of_eventually_eq", ["times_cont_mdiff_at"]], ["del", "theorem", "continuous_at", ["times_cont_mdiff_at"]], ["del", "theorem", "mdifferentiable_at", ["times_cont_mdiff_at"]], ["del", "theorem", "of_le", ["times_cont_mdiff_at"]], ["del", "theorem", "of_succ", ["times_cont_mdiff_at"]], ["del", "theorem", "prod_map'", ["times_cont_mdiff_at"]], ["del", "theorem", "prod_map", ["times_cont_mdiff_at"]], ["del", "theorem", "prod_mk", ["times_cont_mdiff_at"]], ["del", "theorem", "prod_mk_space", ["times_cont_mdiff_at"]], ["del", "theorem", "smooth_at", ["times_cont_mdiff_at"]], ["del", "theorem", "times_cont_mdiff_within_at", ["times_cont_mdiff_at"]], ["del", "def", "times_cont_mdiff_at", []], ["del", "theorem", "times_cont_mdiff_at_const", []], ["del", "theorem", "times_cont_mdiff_at_ext_chart_at'", []], ["del", "theorem", "times_cont_mdiff_at_ext_chart_at", []], ["del", "theorem", "times_cont_mdiff_at_fst", []], ["del", "theorem", "times_cont_mdiff_at_id", []], ["del", "theorem", "times_cont_mdiff_at_iff_times_cont_diff_at", []], ["del", "theorem", "times_cont_mdiff_at_iff_times_cont_mdiff_on_nhds", []], ["del", "theorem", "times_cont_mdiff_at_one", []], ["del", "theorem", "times_cont_mdiff_at_pi_space", []], ["del", "theorem", "times_cont_mdiff_at_snd", []], ["del", "theorem", "times_cont_mdiff_at_top", []], ["del", "theorem", "times_cont_mdiff_const", []], ["del", "theorem", "times_cont_mdiff_fst", []], ["del", "theorem", "times_cont_mdiff_id", []], ["del", "theorem", "times_cont_mdiff_iff", []], ["del", "theorem", "times_cont_mdiff_iff_target", []], ["del", "theorem", "times_cont_mdiff_iff_times_cont_diff", []], ["del", "theorem", "times_cont_mdiff_of_locally_times_cont_mdiff_on", []], ["del", "theorem", "times_cont_mdiff_of_support", []], ["del", "theorem", "comp'", ["times_cont_mdiff_on"]], ["del", "theorem", "comp", ["times_cont_mdiff_on"]], ["del", "theorem", "congr", ["times_cont_mdiff_on"]], ["del", "theorem", "continuous_on", ["times_cont_mdiff_on"]], ["del", "theorem", "continuous_on_tangent_map_within", ["times_cont_mdiff_on"]], ["del", "theorem", "continuous_on_tangent_map_within_aux", ["times_cont_mdiff_on"]], ["del", "theorem", "mdifferentiable_on", ["times_cont_mdiff_on"]], ["del", "theorem", "mono", ["times_cont_mdiff_on"]], ["del", "theorem", "of_le", ["times_cont_mdiff_on"]], ["del", "theorem", "of_succ", ["times_cont_mdiff_on"]], ["del", "theorem", "prod_map", ["times_cont_mdiff_on"]], ["del", "theorem", "prod_mk", ["times_cont_mdiff_on"]], ["del", "theorem", "prod_mk_space", ["times_cont_mdiff_on"]], ["del", "theorem", "smooth_on", ["times_cont_mdiff_on"]], ["del", "theorem", "times_cont_mdiff_on_tangent_map_within", ["times_cont_mdiff_on"]], ["del", "theorem", "times_cont_mdiff_on_tangent_map_within_aux", ["times_cont_mdiff_on"]], ["del", "def", "times_cont_mdiff_on", []], ["del", "theorem", "times_cont_mdiff_on_chart", []], ["del", "theorem", "times_cont_mdiff_on_chart_symm", []], ["del", "theorem", "times_cont_mdiff_on_congr", []], ["del", "theorem", "times_cont_mdiff_on_const", []], ["del", "theorem", "times_cont_mdiff_on_ext_chart_at", []], ["del", "theorem", "times_cont_mdiff_on_fst", []], ["del", "theorem", "times_cont_mdiff_on_id", []], ["del", "theorem", "times_cont_mdiff_on_iff", []], ["del", "theorem", "times_cont_mdiff_on_iff_target", []], ["del", "theorem", "times_cont_mdiff_on_iff_times_cont_diff_on", []], ["del", "theorem", "times_cont_mdiff_on_of_locally_times_cont_mdiff_on", []], ["del", "theorem", "times_cont_mdiff_on_of_mem_maximal_atlas", []], ["del", "theorem", "times_cont_mdiff_on_one", []], ["del", "theorem", "times_cont_mdiff_on_pi_space", []], ["del", "theorem", "times_cont_mdiff_on_snd", []], ["del", "theorem", "times_cont_mdiff_on_symm_of_mem_maximal_atlas", []], ["del", "theorem", "times_cont_mdiff_on_top", []], ["del", "theorem", "times_cont_mdiff_on_univ", []], ["del", "theorem", "times_cont_mdiff_one", []], ["del", "theorem", "times_cont_mdiff_pi_space", []], ["del", "theorem", "times_cont_mdiff_snd", []], ["del", "theorem", "times_cont_mdiff_top", []], ["del", "theorem", "comp'", ["times_cont_mdiff_within_at"]], ["del", "theorem", "comp", ["times_cont_mdiff_within_at"]], ["del", "theorem", "congr", ["times_cont_mdiff_within_at"]], ["del", "theorem", "congr_of_eventually_eq", ["times_cont_mdiff_within_at"]], ["del", "theorem", "continuous_within_at", ["times_cont_mdiff_within_at"]], ["del", "theorem", "mdifferentiable_within_at", ["times_cont_mdiff_within_at"]], ["del", "theorem", "mono", ["times_cont_mdiff_within_at"]], ["del", "theorem", "of_le", ["times_cont_mdiff_within_at"]], ["del", "theorem", "of_succ", ["times_cont_mdiff_within_at"]], ["del", "theorem", "prod_map'", ["times_cont_mdiff_within_at"]], ["del", "theorem", "prod_map", ["times_cont_mdiff_within_at"]], ["del", "theorem", "prod_mk", ["times_cont_mdiff_within_at"]], ["del", "theorem", "prod_mk_space", ["times_cont_mdiff_within_at"]], ["del", "theorem", "smooth_within_at", ["times_cont_mdiff_within_at"]], ["del", "theorem", "times_cont_mdiff_at", ["times_cont_mdiff_within_at"]], ["del", "def", "times_cont_mdiff_within_at", []], ["del", "theorem", "times_cont_mdiff_within_at_congr", []], ["del", "theorem", "times_cont_mdiff_within_at_const", []], ["del", "theorem", "times_cont_mdiff_within_at_fst", []], ["del", "theorem", "times_cont_mdiff_within_at_id", []], ["del", "theorem", "times_cont_mdiff_within_at_iff''", []], ["del", "theorem", "times_cont_mdiff_within_at_iff'", []], ["del", "theorem", "times_cont_mdiff_within_at_iff", []], ["del", "theorem", "times_cont_mdiff_within_at_iff_nat", []], ["del", "theorem", "times_cont_mdiff_within_at_iff_target", []], ["del", "theorem", "times_cont_mdiff_within_at_iff_times_cont_diff_within_at", []], ["del", "theorem", "times_cont_mdiff_within_at_iff_times_cont_mdiff_on_nhds", []], ["del", "theorem", "times_cont_mdiff_within_at_inter'", []], ["del", "theorem", "times_cont_mdiff_within_at_inter", []], ["del", "theorem", "times_cont_mdiff_within_at_one", []], ["del", "theorem", "times_cont_mdiff_within_at_pi_space", []], ["del", "theorem", "times_cont_mdiff_within_at_snd", []], ["del", "theorem", "times_cont_mdiff_within_at_top", []], ["del", "theorem", "times_cont_mdiff_within_at_univ", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/cont_mdiff_map.lean", "changes": [["add", "theorem", "coe_fn_mk", ["cont_mdiff_map"]], ["add", "theorem", "coe_inj", ["cont_mdiff_map"]], ["add", "def", "comp", ["cont_mdiff_map"]], ["add", "theorem", "comp_apply", ["cont_mdiff_map"]], ["add", "def", "const", ["cont_mdiff_map"]], ["add", "theorem", "ext", ["cont_mdiff_map"]], ["add", "def", "id", ["cont_mdiff_map"]], ["add", "structure", "cont_mdiff_map", []], ["mod", "def", "smooth_map", []], ["del", "theorem", "coe_fn_mk", ["times_cont_mdiff_map"]], ["del", "theorem", "coe_inj", ["times_cont_mdiff_map"]], ["del", "def", "comp", ["times_cont_mdiff_map"]], ["del", "theorem", "comp_apply", ["times_cont_mdiff_map"]], ["del", "def", "const", ["times_cont_mdiff_map"]], ["del", "theorem", "ext", ["times_cont_mdiff_map"]], ["del", "def", "id", ["times_cont_mdiff_map"]], ["del", "structure", "times_cont_mdiff_map", []]]}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": [["add", "theorem", "cont_mdiff_at_comp_diffeomorph_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_at_diffeomorph_comp_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_at_trans_diffeomorph_left", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_at_trans_diffeomorph_right", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_comp_diffeomorph_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_diffeomorph_comp_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_on_comp_diffeomorph_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_on_diffeomorph_comp_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_on_trans_diffeomorph_left", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_on_trans_diffeomorph_right", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_trans_diffeomorph_left", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_trans_diffeomorph_right", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_within_at_comp_diffeomorph_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_within_at_diffeomorph_comp_iff", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_within_at_trans_diffeomorph_left", ["diffeomorph"]], ["add", "theorem", "cont_mdiff_within_at_trans_diffeomorph_right", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_at_comp_diffeomorph_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_at_diffeomorph_comp_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_at_trans_diffeomorph_left", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_at_trans_diffeomorph_right", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_comp_diffeomorph_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_diffeomorph_comp_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_on_comp_diffeomorph_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_on_diffeomorph_comp_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_on_trans_diffeomorph_left", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_on_trans_diffeomorph_right", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_trans_diffeomorph_left", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_trans_diffeomorph_right", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_within_at_comp_diffeomorph_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_within_at_diffeomorph_comp_iff", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_within_at_trans_diffeomorph_left", ["diffeomorph"]], ["del", "theorem", "times_cont_mdiff_within_at_trans_diffeomorph_right", ["diffeomorph"]]]}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": [["add", "theorem", "cont_diff_on_stereo_to_fun", []], ["add", "theorem", "cont_diff_stereo_inv_fun_aux", []], ["add", "theorem", "cod_restrict_sphere", ["cont_mdiff"]], ["add", "theorem", "cont_mdiff_coe_sphere", []], ["add", "theorem", "cont_mdiff_exp_map_circle", []], ["add", "theorem", "cont_mdiff_neg_sphere", []], ["del", "theorem", "times_cont_diff_on_stereo_to_fun", []], ["del", "theorem", "times_cont_diff_stereo_inv_fun_aux", []], ["del", "theorem", "cod_restrict_sphere", ["times_cont_mdiff"]], ["del", "theorem", "times_cont_mdiff_coe_sphere", []], ["del", "theorem", "times_cont_mdiff_exp_map_circle", []], ["del", "theorem", "times_cont_mdiff_neg_sphere", []]]}, {"oldPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "newPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "def", "cont_diff_groupoid", []], ["add", "theorem", "cont_diff_groupoid_le", []], ["add", "theorem", "cont_diff_groupoid_prod", []], ["add", "theorem", "cont_diff_groupoid_zero_eq", []], ["add", "theorem", "of_set_mem_cont_diff_groupoid", []], ["del", "theorem", "of_set_mem_times_cont_diff_groupoid", []], ["mod", "def", "maximal_atlas", ["smooth_manifold_with_corners"]], ["add", "theorem", "smooth_manifold_with_corners_of_cont_diff_on", []], ["del", "theorem", "smooth_manifold_with_corners_of_times_cont_diff_on", []], ["add", "theorem", "symm_trans_mem_cont_diff_groupoid", []], ["del", "theorem", "symm_trans_mem_times_cont_diff_groupoid", []], ["del", "def", "times_cont_diff_groupoid", []], ["del", "theorem", "times_cont_diff_groupoid_le", []], ["del", "theorem", "times_cont_diff_groupoid_prod", []], ["del", "theorem", "times_cont_diff_groupoid_zero_eq", []]]}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": [["add", "theorem", "dense_compl_range_of_finrank_lt_finrank", ["cont_diff"]], ["add", "theorem", "dimH_range_le", ["cont_diff"]], ["add", "theorem", "dense_compl_image_of_dimH_lt_finrank", ["cont_diff_on"]], ["add", "theorem", "dimH_image_le", ["cont_diff_on"]], ["del", "theorem", "dense_compl_range_of_finrank_lt_finrank", ["times_cont_diff"]], ["del", "theorem", "dimH_range_le", ["times_cont_diff"]], ["del", "theorem", "dense_compl_image_of_dimH_lt_finrank", ["times_cont_diff_on"]], ["del", "theorem", "dimH_image_le", ["times_cont_diff_on"]]]}]}, {"timestamp": 1645577154, "sha": "541a1a02", "message": "refactor(combinatorics/simple_graph/{basic,degree_sum}): move darts from degree_sum to basic (#12195)\nThis also changes `simple_graph.dart` to extend `prod`, so that darts are even closer to being an ordered pair.\nSince this touches the module docstrings, they are updated to use fully qualified names.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "symm", ["simple_graph", "adj"]], ["add", "def", "edge", ["simple_graph", "dart"]], ["add", "theorem", "edge_mem", ["simple_graph", "dart"]], ["add", "theorem", "edge_mk", ["simple_graph", "dart"]], ["add", "theorem", "edge_symm", ["simple_graph", "dart"]], ["add", "def", "symm", ["simple_graph", "dart"]], ["add", "theorem", "symm_involutive", ["simple_graph", "dart"]], ["add", "theorem", "symm_mk", ["simple_graph", "dart"]], ["add", "theorem", "symm_ne", ["simple_graph", "dart"]], ["add", "theorem", "symm_symm", ["simple_graph", "dart"]], ["add", "structure", "dart", ["simple_graph"]], ["add", "theorem", "dart_edge_eq_iff", ["simple_graph"]], ["add", "def", "dart_of_neighbor_set", ["simple_graph"]], ["add", "theorem", "dart_of_neighbor_set_injective", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": [["del", "def", "edge", ["simple_graph", "dart"]], ["del", "theorem", "edge_mem", ["simple_graph", "dart"]], ["del", "def", "rev", ["simple_graph", "dart"]], ["del", "theorem", "rev_edge", ["simple_graph", "dart"]], ["del", "theorem", "rev_involutive", ["simple_graph", "dart"]], ["del", "theorem", "rev_ne", ["simple_graph", "dart"]], ["del", "theorem", "rev_rev", ["simple_graph", "dart"]], ["del", "structure", "dart", ["simple_graph"]], ["del", "theorem", "dart_edge_eq_iff", ["simple_graph"]], ["del", "def", "dart_of_neighbor_set", ["simple_graph"]], ["del", "theorem", "dart_of_neighbor_set_injective", ["simple_graph"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["add", "theorem", "mk_eq_mk_iff", ["sym2"]], ["add", "theorem", "mk_prod_swap_eq", ["sym2"]]]}]}, {"timestamp": 1645577153, "sha": "f6ec999f", "message": "feat(ring_theory/localization): add a fintype instance (#12150)", "changes": [{"oldPath": "src/ring_theory/localization/basic.lean", "newPath": "src/ring_theory/localization/basic.lean", "changes": []}]}, {"timestamp": 1645570143, "sha": "e89222a6", "message": "feat(algebra/module,linear_algebra): some `restrict_scalars` lemmas (#12181)\n * add `linear_map.coe_restrict_scalars` (demoting `linear_map.restrict_scalars_apply` from `simp` lemma)\n * add `submodule.restrict_scalars_eq_top_iff`", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "coe_restrict_scalars", ["linear_map"]], ["add", "theorem", "restrict_scalars_apply", ["linear_map"]]]}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "theorem", "restrict_scalars_eq_bot_iff", ["submodule"]], ["add", "theorem", "restrict_scalars_eq_top_iff", ["submodule"]]]}]}, {"timestamp": 1645570142, "sha": "2ab3e2fa", "message": "feat(algebra/group/{hom,prod}): has_mul and mul_hom.prod (#12110)\nPorted over from `monoid_hom`.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "comp_mul", ["mul_hom"]], ["add", "theorem", "mul_apply", ["mul_hom"]], ["add", "theorem", "mul_comp", ["mul_hom"]]]}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "coe_mul", ["mul_hom"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "coe_fst", ["mul_hom"]], ["add", "theorem", "coe_prod", ["mul_hom"]], ["add", "theorem", "coe_prod_map", ["mul_hom"]], ["add", "theorem", "coe_snd", ["mul_hom"]], ["add", "theorem", "comp_coprod", ["mul_hom"]], ["add", "def", "coprod", ["mul_hom"]], ["add", "theorem", "coprod_apply", ["mul_hom"]], ["add", "def", "fst", ["mul_hom"]], ["add", "theorem", "fst_comp_prod", ["mul_hom"]], ["add", "theorem", "prod_apply", ["mul_hom"]], ["add", "theorem", "prod_comp_prod_map", ["mul_hom"]], ["add", "def", "prod_map", ["mul_hom"]], ["add", "theorem", "prod_map_def", ["mul_hom"]], ["add", "theorem", "prod_unique", ["mul_hom"]], ["add", "def", "snd", ["mul_hom"]], ["add", "theorem", "snd_comp_prod", ["mul_hom"]]]}]}, {"timestamp": 1645570141, "sha": "18d1bdfc", "message": "feat(topology/algebra/group): add subgroup lemmas (#12026)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv_mem_connected_component_one", []], ["add", "theorem", "mul_mem_connected_component_one", []], ["add", "def", "connected_component_of_one", ["subgroup"]], ["add", "theorem", "is_normal_topological_closure", ["subgroup"]], ["add", "theorem", "continuous_conj", ["topological_group"]]]}]}, {"timestamp": 1645570140, "sha": "b60b7904", "message": "feat(topology/algebra/group): add continuity lemmas (#11975)", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "uniform_continuous_iff_open_ker", ["uniform_group"]]]}]}, {"timestamp": 1645564239, "sha": "64c8d217", "message": "feat(set_theory/ordinal): `Inf_empty` (#12226)\nThe docs mention that `Inf Ø` is defined as `0`. We prove that this is indeed the case.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "Inf_empty", ["ordinal"]]]}]}, {"timestamp": 1645564238, "sha": "d990681c", "message": "docs(set_theory/ordinal): Remove mention of `omin` from docs (#12224)\n#11867 replaced `omin` by `Inf`. We remove all mentions of it from the docs.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1645564237, "sha": "f7b6f421", "message": "feat(set_theory/ordinal_arithmetic): `out_nonempty_iff_ne_zero` (#12223)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "out_nonempty_iff_ne_zero", ["ordinal"]]]}]}, {"timestamp": 1645564236, "sha": "e50ebde5", "message": "chore(analysis/specific_limits): simplify proof of `cauchy_series_of_le_geometric` (#12215)\nThis lemma is identical to the one above except over `range (n + 1)`\ninstead of `range n`. Perhaps it could be removed entirely? I'm not sure what the policy is on breaking changes.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}]}, {"timestamp": 1645564234, "sha": "48ddfd55", "message": "chore(linear_algebra/basic): golf `linear_equiv.smul_of_unit` (#12190)\nThis already exists more generally as `distrib_mul_action.to_linear_equiv`.\nThe name is probably more discoverable and it needs fewer arguments, so I've left it around for now.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1645561277, "sha": "6bb8f229", "message": "refactor(model_theory/terms_and_formulas): Improvements to basics of first-order formulas (#12091)\nImproves the simp set of lemmas related to `realize_bounded_formula` and `realize_formula`, so that they simplify higher-level definitions directly, and keep bounded formulas and formulas separate.\nGeneralizes relabelling of bounded formulas.\nDefines `close_with_exists` and `close_with_forall` to quantify bounded formulas into closed formulas.\nDefines `bd_iff` and `iff`.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/model_theory/direct_limit.lean", "newPath": "src/model_theory/direct_limit.lean", "changes": []}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["mod", "theorem", "map_formula", ["first_order", "language", "elementary_embedding"]], ["del", "theorem", "realize_bounded_formula_top", ["first_order", "language"]], ["mod", "theorem", "realize_term_substructure", ["first_order", "language"]], ["add", "theorem", "realize_bounded_formula_top", ["first_order", "language", "substructure"]], ["add", "theorem", "realize_formula_top", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/model_theory/quotients.lean", "newPath": "src/model_theory/quotients.lean", "changes": [["del", "theorem", "realize_term_quotient_mk", ["first_order", "language"]], ["add", "theorem", "realize_quotient_mk", ["first_order", "language", "term"]]]}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["del", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "Theory"]], ["del", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "Theory"]], ["mod", "def", "is_finitely_satisfiable", ["first_order", "language", "Theory"]], ["mod", "theorem", "is_finitely_satisfiable", ["first_order", "language", "Theory", "is_satisfiable"]], ["mod", "theorem", "mono", ["first_order", "language", "Theory", "is_satisfiable"]], ["mod", "def", "some_model", ["first_order", "language", "Theory", "is_satisfiable"]], ["mod", "theorem", "some_model_models", ["first_order", "language", "Theory", "is_satisfiable"]], ["mod", "def", "is_satisfiable", ["first_order", "language", "Theory"]], ["mod", "theorem", "is_satisfiable", ["first_order", "language", "Theory", "model"]], ["mod", "def", "models_bounded_formula", ["first_order", "language", "Theory"]], ["mod", "theorem", "models_formula_iff", ["first_order", "language", "Theory"]], ["mod", "theorem", "models_sentence_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "realize_bd_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "realize_eq", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "realize_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "some_model_realize_bd_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "some_model_realize_eq", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "some_model_realize_iff", ["first_order", "language", "Theory", "semantically_equivalent"]], ["del", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "Theory"]], ["del", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "Theory"]], ["del", "def", "bd_not", ["first_order", "language"]], ["add", "def", "alls", ["first_order", "language", "bounded_formula"]], ["add", "def", "exs", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "bounded_formula"]], ["add", "def", "realize", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_all", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_alls", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_bd_equal", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_bot", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_ex", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_exs", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_iff", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_imp", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_inf", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_rel", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_relabel", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_sup", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_top", ["first_order", "language", "bounded_formula"]], ["mod", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["add", "def", "relabel_aux", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "sum_elim_comp_relabel_aux", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "bounded_formula"]], ["mod", "inductive", "bounded_formula", ["first_order", "language"]], ["mod", "theorem", "realize_term", ["first_order", "language", "embedding"]], ["mod", "theorem", "realize_bounded_formula", ["first_order", "language", "equiv"]], ["add", "theorem", "realize_formula", ["first_order", "language", "equiv"]], ["mod", "theorem", "realize_term", ["first_order", "language", "equiv"]], ["del", "def", "equal", ["first_order", "language", "formula"]], ["add", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "formula"]], ["add", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "formula"]], ["add", "def", "realize", ["first_order", "language", "formula"]], ["add", "theorem", "realize_bot", ["first_order", "language", "formula"]], ["add", "theorem", "realize_equal", ["first_order", "language", "formula"]], ["add", "theorem", "realize_graph", ["first_order", "language", "formula"]], ["add", "theorem", "realize_iff", ["first_order", "language", "formula"]], ["add", "theorem", "realize_imp", ["first_order", "language", "formula"]], ["add", "theorem", "realize_inf", ["first_order", "language", "formula"]], ["add", "theorem", "realize_not", ["first_order", "language", "formula"]], ["add", "theorem", "realize_rel", ["first_order", "language", "formula"]], ["add", "theorem", "realize_relabel", ["first_order", "language", "formula"]], ["add", "theorem", "realize_sup", ["first_order", "language", "formula"]], ["add", "theorem", "realize_top", ["first_order", "language", "formula"]], ["add", "def", "relabel", ["first_order", "language", "formula"]], ["add", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "formula"]], ["add", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "formula"]], ["mod", "def", "formula", ["first_order", "language"]], ["mod", "theorem", "realize_term", ["first_order", "language", "hom"]], ["del", "def", "realize_bounded_formula", ["first_order", "language"]], ["del", "theorem", "realize_bounded_formula_relabel", ["first_order", "language"]], ["del", "theorem", "realize_equal", ["first_order", "language"]], ["del", "def", "realize_formula", ["first_order", "language"]], ["del", "theorem", "realize_formula_equiv", ["first_order", "language"]], ["del", "theorem", "realize_formula_relabel", ["first_order", "language"]], ["del", "theorem", "realize_graph", ["first_order", "language"]], ["del", "theorem", "realize_imp", ["first_order", "language"]], ["del", "theorem", "realize_inf", ["first_order", "language"]], ["del", "theorem", "realize_not", ["first_order", "language"]], ["del", "def", "realize_term", ["first_order", "language"]], ["del", "theorem", "realize_term_relabel", ["first_order", "language"]], ["add", "def", "bounded_formula", ["first_order", "language", "relations"]], ["add", "def", "formula", ["first_order", "language", "relations"]], ["mod", "def", "sentence", ["first_order", "language"]], ["add", "def", "bd_equal", ["first_order", "language", "term"]], ["add", "def", "equal", ["first_order", "language", "term"]], ["add", "def", "realize", ["first_order", "language", "term"]], ["add", "theorem", "realize_relabel", ["first_order", "language", "term"]], ["mod", "def", "relabel", ["first_order", "language", "term"]], ["mod", "inductive", "term", ["first_order", "language"]]]}]}, {"timestamp": 1645553735, "sha": "d054fcae", "message": "feat(/analysis/inner_product_space/pi_L2): `inner_matrix_row_row` (#12177)\nThe inner product between rows/columns of matrices.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "inner_matrix_col_col", []], ["add", "theorem", "inner_matrix_row_row", []]]}]}, {"timestamp": 1645553734, "sha": "d0c37a11", "message": "feat(analysis/inner_product_space/adjoint): is_self_adjoint_iff_inner… (#12113)\n…_map_self_real\nA linear operator on a complex inner product space is self-adjoint\nprecisely when ⟪T v, v⟫ is real for all v. I am interested in learning\nstyle improvements!", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_map_polarization'", []], ["add", "theorem", "is_self_adjoint_iff_inner_map_self_real", ["inner_product_space"]]]}]}, {"timestamp": 1645553732, "sha": "8f160018", "message": "chore(*): rename `erase_dup` to `dedup` (#12057)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": [["add", "theorem", "gcd_dedup", ["multiset"]], ["del", "theorem", "gcd_erase_dup", ["multiset"]], ["add", "theorem", "lcm_dedup", ["multiset"]], ["del", "theorem", "lcm_erase_dup", ["multiset"]]]}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "dedup_eq_self", ["finset"]], ["del", "theorem", "erase_dup_eq_self", ["finset"]], ["mod", "theorem", "image_val", ["finset"]], ["mod", "theorem", "insert_val'", ["finset"]], ["mod", "theorem", "mem_to_finset", ["list"]], ["add", "theorem", "to_finset_eq_iff_perm_dedup", ["list"]], ["del", "theorem", "to_finset_eq_iff_perm_erase_dup", ["list"]], ["mod", "theorem", "to_finset_val", ["list"]], ["mod", "theorem", "mem_to_finset", ["multiset"]], ["mod", "def", "to_finset", ["multiset"]], ["mod", "theorem", "to_finset_val", ["multiset"]]]}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["mod", "theorem", "card_to_finset", ["list"]], ["mod", "theorem", "card_to_finset", ["multiset"]], ["mod", "theorem", "to_finset_card_le", ["multiset"]]]}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": []}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/dedup.lean", "changes": [["add", "theorem", "dedup_append", ["list"]], ["add", "theorem", "dedup_cons_of_mem'", ["list"]], ["add", "theorem", "dedup_cons_of_mem", ["list"]], ["add", "theorem", "dedup_cons_of_not_mem'", ["list"]], ["add", "theorem", "dedup_cons_of_not_mem", ["list"]], ["add", "theorem", "dedup_eq_self", ["list"]], ["add", "theorem", "dedup_idempotent", ["list"]], ["add", "theorem", "dedup_nil", ["list"]], ["add", "theorem", "dedup_sublist", ["list"]], ["add", "theorem", "dedup_subset", ["list"]], ["add", "theorem", "mem_dedup", ["list"]], ["add", "theorem", "nodup_dedup", ["list"]], ["add", "theorem", "subset_dedup", ["list"]]]}, {"oldPath": "src/data/list/default.lean", "newPath": "src/data/list/default.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "dedup", ["list"]], ["del", "def", "erase_dup", ["list"]]]}, {"oldPath": "src/data/list/erase_dup.lean", "newPath": null, "changes": [["del", "theorem", "erase_dup_append", ["list"]], ["del", "theorem", "erase_dup_cons_of_mem'", ["list"]], ["del", "theorem", "erase_dup_cons_of_mem", ["list"]], ["del", "theorem", "erase_dup_cons_of_not_mem'", ["list"]], ["del", "theorem", "erase_dup_cons_of_not_mem", ["list"]], ["del", "theorem", "erase_dup_eq_self", ["list"]], ["del", "theorem", "erase_dup_idempotent", ["list"]], ["del", "theorem", "erase_dup_nil", ["list"]], ["del", "theorem", "erase_dup_sublist", ["list"]], ["del", "theorem", "erase_dup_subset", ["list"]], ["del", "theorem", "mem_erase_dup", ["list"]], ["del", "theorem", "nodup_erase_dup", ["list"]], ["del", "theorem", "subset_erase_dup", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "dedup", ["list", "perm"]], ["del", "theorem", "erase_dup", ["list", "perm"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["add", "def", "dedupkeys", ["list"]], ["add", "theorem", "dedupkeys_cons", ["list"]], ["del", "def", "erase_dupkeys", ["list"]], ["del", "theorem", "erase_dupkeys_cons", ["list"]], ["add", "theorem", "lookup_dedupkeys", ["list"]], ["del", "theorem", "lookup_erase_dupkeys", ["list"]], ["add", "theorem", "nodupkeys_dedupkeys", ["list"]], ["del", "theorem", "nodupkeys_erase_dupkeys", ["list"]], ["add", "theorem", "sizeof_dedupkeys", ["list"]], ["del", "theorem", "sizeof_erase_dupkeys", ["list"]]]}, {"oldPath": null, "newPath": "src/data/multiset/dedup.lean", "changes": [["add", "theorem", "coe_dedup", ["multiset"]], ["add", "def", "dedup", ["multiset"]], ["add", "theorem", "dedup_cons_of_mem", ["multiset"]], ["add", "theorem", "dedup_cons_of_not_mem", ["multiset"]], ["add", "theorem", "dedup_eq_self", ["multiset"]], ["add", "theorem", "dedup_eq_zero", ["multiset"]], ["add", "theorem", "dedup_ext", ["multiset"]], ["add", "theorem", "dedup_le", ["multiset"]], ["add", "theorem", "dedup_map_dedup_eq", ["multiset"]], ["add", "theorem", "dedup_nsmul", ["multiset"]], ["add", "theorem", "dedup_singleton", ["multiset"]], ["add", "theorem", "dedup_subset'", ["multiset"]], ["add", "theorem", "dedup_subset", ["multiset"]], ["add", "theorem", "dedup_zero", ["multiset"]], ["add", "theorem", "le_dedup", ["multiset"]], ["add", "theorem", "mem_dedup", ["multiset"]], ["add", "theorem", "le_dedup_iff_le", ["multiset", "nodup"]], ["add", "theorem", "le_nsmul_iff_le", ["multiset", "nodup"]], ["add", "theorem", "nodup_dedup", ["multiset"]], ["add", "theorem", "subset_dedup'", ["multiset"]], ["add", "theorem", "subset_dedup", ["multiset"]]]}, {"oldPath": "src/data/multiset/default.lean", "newPath": "src/data/multiset/default.lean", "changes": []}, {"oldPath": "src/data/multiset/erase_dup.lean", "newPath": null, "changes": [["del", "theorem", "coe_erase_dup", ["multiset"]], ["del", "def", "erase_dup", ["multiset"]], ["del", "theorem", "erase_dup_cons_of_mem", ["multiset"]], ["del", "theorem", "erase_dup_cons_of_not_mem", ["multiset"]], ["del", "theorem", "erase_dup_eq_self", ["multiset"]], ["del", "theorem", "erase_dup_eq_zero", ["multiset"]], ["del", "theorem", "erase_dup_ext", ["multiset"]], ["del", "theorem", "erase_dup_le", ["multiset"]], ["del", "theorem", "erase_dup_map_erase_dup_eq", ["multiset"]], ["del", "theorem", "erase_dup_nsmul", ["multiset"]], ["del", "theorem", "erase_dup_singleton", ["multiset"]], ["del", "theorem", "erase_dup_subset'", ["multiset"]], ["del", "theorem", "erase_dup_subset", ["multiset"]], ["del", "theorem", "erase_dup_zero", ["multiset"]], ["del", "theorem", "le_erase_dup", ["multiset"]], ["del", "theorem", "mem_erase_dup", ["multiset"]], ["del", "theorem", "le_erase_dup_iff_le", ["multiset", "nodup"]], ["del", "theorem", "le_nsmul_iff_le", ["multiset", "nodup"]], ["del", "theorem", "nodup_erase_dup", ["multiset"]], ["del", "theorem", "subset_erase_dup'", ["multiset"]], ["del", "theorem", "subset_erase_dup", ["multiset"]]]}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": [["add", "theorem", "dedup_add", ["multiset"]], ["add", "theorem", "dedup_cons", ["multiset"]], ["del", "theorem", "erase_dup_add", ["multiset"]], ["del", "theorem", "erase_dup_cons", ["multiset"]]]}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": [["add", "theorem", "fold_dedup_idem", ["multiset"]], ["del", "theorem", "fold_erase_dup_idem", ["multiset"]], ["add", "theorem", "le_smul_dedup", ["multiset"]], ["del", "theorem", "le_smul_erase_dup", ["multiset"]]]}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": [["add", "theorem", "inf_dedup", ["multiset"]], ["del", "theorem", "inf_erase_dup", ["multiset"]], ["add", "theorem", "sup_dedup", ["multiset"]], ["del", "theorem", "sup_erase_dup", ["multiset"]]]}, {"oldPath": "src/data/multiset/locally_finite.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}]}, {"timestamp": 1645553731, "sha": "35ef7700", "message": "refactor(topology/compacts): Turn into structures, use `set_like`, cleanup (#12035)\n* Change `closeds`, `compacts`, `nonempty_compacts`, `positive_compacts` from `subtype` to `structure`\n* Use `set_like`\n* Add missing instances\n * the `lattice` and `bounded_order` instances for `closeds`\n * the `bounded_order` instance for `compacts`\n * the `semilattice_sup` and `order_top` instances for `nonempty_compacts` \n * the `inhabited`, `semilattice_sup` and `order_top` instances for `positive_compacts`\n* kill `positive_compacts_univ` in favor of `⊤` using the new `order_top` instance\n* rename `nonempty_positive_compacts` to `positive_compacts.nonempty`\n* sectioning the file", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": [["mod", "def", "haar_circle", []]]}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": [["mod", "def", "inner_content", ["measure_theory", "content"]], ["mod", "theorem", "inner_content_le", ["measure_theory", "content"]], ["mod", "theorem", "le_inner_content", ["measure_theory", "content"]], ["mod", "theorem", "le_outer_measure_compacts", ["measure_theory", "content"]], ["mod", "theorem", "mono", ["measure_theory", "content"]], ["mod", "theorem", "outer_measure_interior_compacts", ["measure_theory", "content"]], ["mod", "theorem", "sup_disjoint", ["measure_theory", "content"]]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": [["mod", "theorem", "chaar_mem_haar_product", ["measure_theory", "measure", "haar"]], ["mod", "theorem", "chaar_mono", ["measure_theory", "measure", "haar"]], ["mod", "theorem", "chaar_self", ["measure_theory", "measure", "haar"]], ["mod", "theorem", "haar_content_self", ["measure_theory", "measure", "haar"]], ["mod", "def", "prehaar", ["measure_theory", "measure", "haar"]], ["mod", "theorem", "prehaar_empty", ["measure_theory", "measure", "haar"]], ["mod", "theorem", "prehaar_mem_haar_product", ["measure_theory", "measure", "haar"]], ["mod", "def", "haar", ["measure_theory", "measure"]], ["mod", "theorem", "haar_measure_self", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["del", "def", "Icc01", ["topological_space", "positive_compacts"]], ["del", "def", "pi_Icc01", ["topological_space", "positive_compacts"]]]}, {"oldPath": "src/measure_theory/measure/haar_quotient.lean", "newPath": "src/measure_theory/measure/haar_quotient.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": [["add", "theorem", "closed", ["topological_space", "closeds"]], ["add", "theorem", "coe_bot", ["topological_space", "closeds"]], ["add", "theorem", "coe_inf", ["topological_space", "closeds"]], ["add", "theorem", "coe_mk", ["topological_space", "closeds"]], ["add", "theorem", "coe_sup", ["topological_space", "closeds"]], ["add", "theorem", "coe_top", ["topological_space", "closeds"]], ["add", "structure", "closeds", ["topological_space"]], ["del", "def", "closeds", ["topological_space"]], ["del", "theorem", "bot_val", ["topological_space", "compacts"]], ["add", "theorem", "coe_bot", ["topological_space", "compacts"]], ["add", "theorem", "coe_finset_sup", ["topological_space", "compacts"]], ["add", "theorem", "coe_inf", ["topological_space", "compacts"]], ["add", "theorem", "coe_map", ["topological_space", "compacts"]], ["add", "theorem", "coe_mk", ["topological_space", "compacts"]], ["add", "theorem", "coe_sup", ["topological_space", "compacts"]], ["add", "theorem", "coe_top", ["topological_space", "compacts"]], ["add", "theorem", "compact", ["topological_space", "compacts"]], ["del", "theorem", "finset_sup_val", ["topological_space", "compacts"]], ["del", "theorem", "map_val", ["topological_space", "compacts"]], ["del", "theorem", "sup_val", ["topological_space", "compacts"]], ["add", "structure", "compacts", ["topological_space"]], ["del", "def", "compacts", ["topological_space"]], ["add", "theorem", "coe_mk", ["topological_space", "nonempty_compacts"]], ["add", "theorem", "coe_sup", ["topological_space", "nonempty_compacts"]], ["add", "theorem", "coe_top", ["topological_space", "nonempty_compacts"]], ["add", "theorem", "compact", ["topological_space", "nonempty_compacts"]], ["mod", "def", "to_closeds", ["topological_space", "nonempty_compacts"]], ["add", "structure", "nonempty_compacts", ["topological_space"]], ["del", "def", "nonempty_compacts", ["topological_space"]], ["add", "theorem", "coe_mk", ["topological_space", "positive_compacts"]], ["add", "theorem", "coe_sup", ["topological_space", "positive_compacts"]], ["add", "theorem", "coe_top", ["topological_space", "positive_compacts"]], ["add", "theorem", "compact", ["topological_space", "positive_compacts"]], ["add", "theorem", "interior_nonempty", ["topological_space", "positive_compacts"]], ["add", "def", "to_nonempty_compacts", ["topological_space", "positive_compacts"]], ["del", "def", "positive_compacts:", ["topological_space"]], ["add", "structure", "positive_compacts", ["topological_space"]], ["del", "def", "positive_compacts_univ", ["topological_space"]], ["del", "theorem", "positive_compacts_univ_val", ["topological_space"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": [["mod", "theorem", "edist_eq", ["emetric", "closeds"]], ["mod", "theorem", "lipschitz_inf_dist", ["metric"]], ["mod", "theorem", "lipschitz_inf_dist_set", ["metric"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": [["add", "def", "rep", ["Gromov_Hausdorff", "GH_space"]], ["mod", "theorem", "to_GH_space_rep", ["Gromov_Hausdorff", "GH_space"]], ["mod", "theorem", "dist_GH_dist", ["Gromov_Hausdorff"]], ["mod", "theorem", "eq_to_GH_space", ["Gromov_Hausdorff"]]]}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}]}, {"timestamp": 1645542981, "sha": "71da192c", "message": "chore(ring_theory/graded_algebra/basic): remove commutativity requirement (#12208)\nThis wasn't used", "changes": [{"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": []}]}, {"timestamp": 1645542980, "sha": "f0401b91", "message": "chore(ring_theory): split `localization.lean` and `dedekind_domain.lean` (#12206)\nThese files were rather long and had hundreds-deep dependency graphs. I split them into smaller files with less imports, so that they are easier to build and modify.\nProof nothing was lost:\n```bash\n$ cat src/ring_theory/localization/*.lean | sort | comm -23 <(sort src/ring_theory/localization.lean) - | grep -E 'lemma|theorem|def|instance|class'\n$ cat src/ring_theory/dedekind_domain/*.lean | sort | comm -23 <(sort src/ring_theory/dedekind_domain.lean) - | grep -E 'lemma|theorem|def|instance|class'\ngiving three equivalent definitions (TODO: and shows that they are equivalent).\n```\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Splitting.20.60localization.2Elean.60.20and.20.60dedekind_domain.2Elean", "changes": [{"oldPath": "src/algebra/category/CommRing/instances.lean", "newPath": "src/algebra/category/CommRing/instances.lean", "changes": []}, {"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/dedekind_domain/basic.lean", "changes": [["add", "theorem", "is_dedekind_domain_iff", []], ["add", "theorem", "integral_closure", ["ring", "dimension_le_one"]], ["add", "theorem", "is_integral_closure", ["ring", "dimension_le_one"]], ["add", "theorem", "principal_ideal_ring", ["ring", "dimension_le_one"]], ["add", "def", "dimension_le_one", ["ring"]]]}, {"oldPath": null, "newPath": "src/ring_theory/dedekind_domain/dvr.lean", "changes": [["add", "structure", "is_dedekind_domain_dvr", []]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain/ideal.lean", "changes": [["del", "theorem", "exists_integral_multiples", []], ["del", "theorem", "exists_is_basis_integral", ["finite_dimensional"]], ["del", "theorem", "is_dedekind_domain", ["integral_closure"]], ["del", "theorem", "is_noetherian_ring", ["integral_closure"]], ["del", "theorem", "integral_closure_le_span_dual_basis", []], ["del", "structure", "is_dedekind_domain_dvr", []], ["del", "theorem", "is_dedekind_domain_iff", []], ["del", "theorem", "is_dedekind_domain", ["is_integral_closure"]], ["del", "theorem", "is_noetherian_ring", ["is_integral_closure"]], ["del", "theorem", "range_le_span_dual_basis", ["is_integral_closure"]], ["del", "theorem", "integral_closure", ["ring", "dimension_le_one"]], ["del", "theorem", "is_integral_closure", ["ring", "dimension_le_one"]], ["del", "theorem", "principal_ideal_ring", ["ring", "dimension_le_one"]], ["del", "def", "dimension_le_one", ["ring"]]]}, {"oldPath": null, "newPath": "src/ring_theory/dedekind_domain/integral_closure.lean", "changes": [["add", "theorem", "exists_integral_multiples", []], ["add", "theorem", "exists_is_basis_integral", ["finite_dimensional"]], ["add", "theorem", "is_dedekind_domain", ["integral_closure"]], ["add", "theorem", "is_noetherian_ring", ["integral_closure"]], ["add", "theorem", "integral_closure_le_span_dual_basis", []], ["add", "theorem", "is_dedekind_domain", ["is_integral_closure"]], ["add", "theorem", "is_noetherian_ring", ["is_integral_closure"]], ["add", "theorem", "range_le_span_dual_basis", ["is_integral_closure"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/integrally_closed.lean", "newPath": "src/ring_theory/integrally_closed.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": null, "changes": [["del", "theorem", "algebra_map_mk'", []], ["del", "theorem", "mk_eq_div", ["fraction_ring"]], ["del", "def", "fraction_ring", []], ["del", "def", "prime_compl", ["ideal"]], ["del", "theorem", "is_fraction_ring_of_algebraic", ["integral_closure"]], ["del", "theorem", "is_fraction_ring_of_finite_extension", ["integral_closure"]], ["del", "theorem", "coe_submodule_injective", ["is_fraction_ring"]], ["del", "theorem", "coe_submodule_is_principal", ["is_fraction_ring"]], ["del", "theorem", "coe_submodule_le_coe_submodule", ["is_fraction_ring"]], ["del", "theorem", "coe_submodule_strict_mono", ["is_fraction_ring"]], ["del", "theorem", "comap_is_algebraic_iff", ["is_fraction_ring"]], ["del", "theorem", "div_surjective", ["is_fraction_ring"]], ["del", "theorem", "eq_zero_of_num_eq_zero", ["is_fraction_ring"]], ["del", "theorem", "exists_reduced_fraction", ["is_fraction_ring"]], ["del", "theorem", "integer_normalization_eq_zero_iff", ["is_fraction_ring"]], ["del", "theorem", "is_algebraic_iff'", ["is_fraction_ring"]], ["del", "theorem", "is_algebraic_iff", ["is_fraction_ring"]], ["del", "theorem", "is_fraction_ring_iff_of_base_ring_equiv", ["is_fraction_ring"]], ["del", "theorem", "is_fraction_ring_of_is_domain_of_is_localization", ["is_fraction_ring"]], ["del", "theorem", "is_fraction_ring_of_is_localization", ["is_fraction_ring"]], ["del", "theorem", "is_integer_of_is_unit_denom", ["is_fraction_ring"]], ["del", "theorem", "is_unit_denom_of_num_eq_zero", ["is_fraction_ring"]], ["del", "theorem", "is_unit_map_of_injective", ["is_fraction_ring"]], ["del", "theorem", "lift_algebra_map", ["is_fraction_ring"]], ["del", "theorem", "lift_mk'", ["is_fraction_ring"]], ["del", "theorem", "mk'_eq_div", ["is_fraction_ring"]], ["del", "theorem", "mk'_mk_eq_div", ["is_fraction_ring"]], ["del", "theorem", "mk'_num_denom", ["is_fraction_ring"]], ["del", "theorem", "nontrivial", ["is_fraction_ring"]], ["del", "theorem", "num_denom_reduced", ["is_fraction_ring"]], ["del", "theorem", "num_mul_denom_eq_num_iff_eq'", ["is_fraction_ring"]], ["del", "theorem", "num_mul_denom_eq_num_iff_eq", ["is_fraction_ring"]], ["del", "theorem", "num_mul_denom_eq_num_mul_denom_iff_eq", ["is_fraction_ring"]], ["del", "theorem", "to_map_eq_zero_iff", ["is_fraction_ring"]], ["del", "def", "is_fraction_ring", []], ["del", "theorem", "is_fraction_ring_of_algebraic", ["is_integral_closure"]], ["del", "theorem", "is_fraction_ring_of_finite_extension", ["is_integral_closure"]], ["del", "theorem", "is_integral_localization'", []], ["del", "theorem", "is_integral_localization", []], ["del", "theorem", "is_integral_localization_at_leading_coeff", []], ["del", "theorem", "alg_equiv_mk'", ["is_localization"]], ["del", "theorem", "alg_equiv_symm_mk'", ["is_localization"]], ["del", "def", "at_one", ["is_localization"]], ["del", "theorem", "is_unit_mk'_iff", ["is_localization", "at_prime"]], ["del", "theorem", "is_unit_to_map_iff", ["is_localization", "at_prime"]], ["del", "theorem", "local_ring", ["is_localization", "at_prime"]], ["del", "theorem", "mk'_mem_maximal_iff", ["is_localization", "at_prime"]], ["del", "theorem", "to_map_mem_maximal_iff", ["is_localization", "at_prime"]], ["del", "def", "at_unit", ["is_localization"]], ["del", "def", "at_units", ["is_localization"]], ["del", "theorem", "lift_comp", ["is_localization", "away", "away_map"]], ["del", "theorem", "lift_eq", ["is_localization", "away", "away_map"]], ["del", "def", "map", ["is_localization", "away"]], ["del", "def", "away", ["is_localization"]], ["del", "def", "coe_submodule", ["is_localization"]], ["del", "theorem", "coe_submodule_bot", ["is_localization"]], ["del", "theorem", "coe_submodule_fg", ["is_localization"]], ["del", "theorem", "coe_submodule_injective", ["is_localization"]], ["del", "theorem", "coe_submodule_is_principal", ["is_localization"]], ["del", "theorem", "coe_submodule_le_coe_submodule", ["is_localization"]], ["del", "theorem", "coe_submodule_mono", ["is_localization"]], ["del", "theorem", "coe_submodule_mul", ["is_localization"]], ["del", "theorem", "coe_submodule_span", ["is_localization"]], ["del", "theorem", "coe_submodule_span_singleton", ["is_localization"]], ["del", "theorem", "coe_submodule_strict_mono", ["is_localization"]], ["del", "theorem", "coe_submodule_sup", ["is_localization"]], ["del", "theorem", "coe_submodule_top", ["is_localization"]], ["del", "theorem", "coeff_integer_normalization_mem_support", ["is_localization"]], ["del", "theorem", "coeff_integer_normalization_of_not_mem_support", ["is_localization"]], ["del", "theorem", "comap_map_of_is_prime_disjoint", ["is_localization"]], ["del", "def", "common_denom", ["is_localization"]], ["del", "def", "common_denom_of_finset", ["is_localization"]], ["del", "theorem", "eq_iff_eq", ["is_localization"]], ["del", "theorem", "eq_mk'_iff_mul_eq", ["is_localization"]], ["del", "theorem", "eq_of_eq", ["is_localization"]], ["del", "theorem", "eq_zero_of_fst_eq_zero", ["is_localization"]], ["del", "def", "equiv_inv_submonoid", ["is_localization"]], ["del", "theorem", "exist_integer_multiples", ["is_localization"]], ["del", "theorem", "exist_integer_multiples_of_finset", ["is_localization"]], ["del", "theorem", "exist_integer_multiples_of_fintype", ["is_localization"]], ["del", "theorem", "exists_integer_multiple'", ["is_localization"]], ["del", "theorem", "exists_integer_multiple", ["is_localization"]], ["del", "theorem", "finite_type_of_monoid_fg", ["is_localization"]], ["del", "def", "finset_integer_multiple", ["is_localization"]], ["del", "theorem", "finset_integer_multiple_image", ["is_localization"]], ["del", "def", "integer_multiple", ["is_localization"]], ["del", "theorem", "integer_normalization_aeval_eq_zero", ["is_localization"]], ["del", "theorem", "integer_normalization_coeff", ["is_localization"]], ["del", "theorem", "integer_normalization_eval₂_eq_zero", ["is_localization"]], ["del", "theorem", "integer_normalization_map_to_map", ["is_localization"]], ["del", "theorem", "integer_normalization_spec", ["is_localization"]], ["del", "def", "inv_submonoid", ["is_localization"]], ["del", "theorem", "is_domain_localization", ["is_localization"]], ["del", "theorem", "is_domain_of_le_non_zero_divisors", ["is_localization"]], ["del", "def", "is_integer", ["is_localization"]], ["del", "theorem", "is_integer_add", ["is_localization"]], ["del", "theorem", "is_integer_mul", ["is_localization"]], ["del", "theorem", "is_integer_one", ["is_localization"]], ["del", "theorem", "is_integer_smul", ["is_localization"]], ["del", "theorem", "is_integer_zero", ["is_localization"]], ["del", "theorem", "is_localization_iff_of_alg_equiv", ["is_localization"]], ["del", "theorem", "is_localization_iff_of_base_ring_equiv", ["is_localization"]], ["del", "theorem", "is_localization_iff_of_ring_equiv", ["is_localization"]], ["del", "theorem", "is_localization_is_localization_at_prime_is_localization", ["is_localization"]], ["del", "theorem", "is_localization_of_alg_equiv", ["is_localization"]], ["del", "theorem", "is_localization_of_base_ring_equiv", ["is_localization"]], ["del", "theorem", "is_localization_of_is_exists_mul_mem", ["is_localization"]], ["del", "theorem", "is_localization_of_submonoid_le", ["is_localization"]], ["del", "theorem", "is_noetherian_ring", ["is_localization"]], ["del", "theorem", "is_prime_iff_is_prime_disjoint", ["is_localization"]], ["del", "theorem", "is_prime_of_is_prime_disjoint", ["is_localization"]], ["del", "theorem", "is_unit_comp", ["is_localization"]], ["del", "theorem", "lift_comp", ["is_localization"]], ["del", "theorem", "lift_eq", ["is_localization"]], ["del", "theorem", "lift_eq_iff", ["is_localization"]], ["del", "theorem", "lift_id", ["is_localization"]], ["del", "theorem", "lift_injective_iff", ["is_localization"]], ["del", "theorem", "lift_mk'", ["is_localization"]], ["del", "theorem", "lift_mk'_spec", ["is_localization"]], ["del", "theorem", "lift_of_comp", ["is_localization"]], ["del", "theorem", "lift_surjective_iff", ["is_localization"]], ["del", "theorem", "lift_unique", ["is_localization"]], ["del", "def", "localization_algebra_of_submonoid_le", ["is_localization"]], ["del", "theorem", "localization_is_scalar_tower_of_submonoid_le", ["is_localization"]], ["del", "def", "localization_localization_at_prime_iso_localization", ["is_localization"]], ["del", "theorem", "localization_localization_eq_iff_exists", ["is_localization"]], ["del", "theorem", "localization_localization_is_localization", ["is_localization"]], ["del", "theorem", "localization_localization_is_localization_of_has_all_units", ["is_localization"]], ["del", "theorem", "localization_localization_map_units", ["is_localization"]], ["del", "def", "localization_localization_submodule", ["is_localization"]], ["del", "theorem", "localization_localization_surj", ["is_localization"]], ["del", "theorem", "map_comap", ["is_localization"]], ["del", "theorem", "map_comp", ["is_localization"]], ["del", "theorem", "map_comp_map", ["is_localization"]], ["del", "theorem", "map_eq", ["is_localization"]], ["del", "theorem", "map_eq_zero_iff", ["is_localization"]], ["del", "theorem", "map_id", ["is_localization"]], ["del", "theorem", "map_injective_of_injective", ["is_localization"]], ["del", "theorem", "map_integer_multiple", ["is_localization"]], ["del", "theorem", "map_left_cancel", ["is_localization"]], ["del", "theorem", "map_map", ["is_localization"]], ["del", "theorem", "map_mk'", ["is_localization"]], ["del", "theorem", "map_non_zero_divisors_le", ["is_localization"]], ["del", "theorem", "map_right_cancel", ["is_localization"]], ["del", "theorem", "map_smul", ["is_localization"]], ["del", "theorem", "map_unique", ["is_localization"]], ["del", "theorem", "mem_coe_submodule", ["is_localization"]], ["del", "theorem", "mem_inv_submonoid_iff_exists_mk'", ["is_localization"]], ["del", "theorem", "mem_localization_localization_submodule", ["is_localization"]], ["del", "theorem", "mem_map_algebra_map_iff", ["is_localization"]], ["del", "theorem", "mk'_add", ["is_localization"]], ["del", "theorem", "mk'_eq_iff_eq", ["is_localization"]], ["del", "theorem", "mk'_eq_iff_eq_mul", ["is_localization"]], ["del", "theorem", "mk'_eq_iff_mk'_eq", ["is_localization"]], ["del", "theorem", "mk'_eq_mul_mk'_one", ["is_localization"]], ["del", "theorem", "mk'_eq_of_eq", ["is_localization"]], ["del", "theorem", "mk'_eq_zero_iff", ["is_localization"]], ["del", "theorem", "mk'_mem_iff", ["is_localization"]], ["del", "theorem", "mk'_mul", ["is_localization"]], ["del", "theorem", "mk'_mul_cancel_left", ["is_localization"]], ["del", "theorem", "mk'_mul_cancel_right", ["is_localization"]], ["del", "theorem", "mk'_mul_mk'_eq_one'", ["is_localization"]], ["del", "theorem", "mk'_mul_mk'_eq_one", ["is_localization"]], ["del", "theorem", "mk'_one", ["is_localization"]], ["del", "theorem", "mk'_sec", ["is_localization"]], ["del", "theorem", "mk'_self''", ["is_localization"]], ["del", "theorem", "mk'_self'", ["is_localization"]], ["del", "theorem", "mk'_self", ["is_localization"]], ["del", "theorem", "mk'_spec'", ["is_localization"]], ["del", "theorem", "mk'_spec'_mk", ["is_localization"]], ["del", "theorem", "mk'_spec", ["is_localization"]], ["del", "theorem", "mk'_spec_mk", ["is_localization"]], ["del", "theorem", "mk'_surjective", ["is_localization"]], ["del", "theorem", "monoid_hom_ext", ["is_localization"]], ["del", "theorem", "mul_mk'_eq_mk'_of_mul", ["is_localization"]], ["del", "theorem", "mul_to_inv_submonoid", ["is_localization"]], ["del", "theorem", "non_zero_divisors_le_comap", ["is_localization"]], ["del", "theorem", "of_le", ["is_localization"]], ["del", "def", "order_embedding", ["is_localization"]], ["del", "def", "order_iso_of_prime", ["is_localization"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq", ["is_localization"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq_map", ["is_localization"]], ["del", "theorem", "ring_equiv_of_ring_equiv_mk'", ["is_localization"]], ["del", "theorem", "ring_hom_ext", ["is_localization"]], ["del", "theorem", "sec_spec'", ["is_localization"]], ["del", "theorem", "sec_spec", ["is_localization"]], ["del", "theorem", "smul_to_inv_submonoid", ["is_localization"]], ["del", "theorem", "span_inv_submonoid", ["is_localization"]], ["del", "theorem", "submonoid_map_le_is_unit", ["is_localization"]], ["del", "theorem", "surj'", ["is_localization"]], ["del", "theorem", "surjective_quotient_map_of_maximal_of_localization", ["is_localization"]], ["del", "def", "to_inv_submonoid", ["is_localization"]], ["del", "theorem", "to_inv_submonoid_eq_mk'", ["is_localization"]], ["del", "theorem", "to_inv_submonoid_mul", ["is_localization"]], ["del", "theorem", "to_inv_submonoid_surjective", ["is_localization"]], ["del", "def", "to_localization_map", ["is_localization"]], ["del", "theorem", "to_localization_map_sec", ["is_localization"]], ["del", "theorem", "to_localization_map_to_map", ["is_localization"]], ["del", "theorem", "to_localization_map_to_map_apply", ["is_localization"]], ["del", "theorem", "to_map_eq_zero_iff", ["is_localization"]], ["del", "theorem", "add_mk", ["localization"]], ["del", "theorem", "add_mk_self", ["localization"]], ["del", "theorem", "alg_equiv_mk'", ["localization"]], ["del", "theorem", "alg_equiv_mk", ["localization"]], ["del", "theorem", "alg_equiv_symm_mk'", ["localization"]], ["del", "theorem", "alg_equiv_symm_mk", ["localization"]], ["del", "theorem", "comap_maximal_ideal", ["localization", "at_prime"]], ["del", "theorem", "map_eq_maximal_ideal", ["localization", "at_prime"]], ["del", "def", "away_lift", ["localization"]], ["del", "def", "away_map", ["localization"]], ["del", "theorem", "le_comap_prime_compl_iff", ["localization"]], ["del", "theorem", "lift_on_zero", ["localization"]], ["del", "theorem", "local_ring_hom_comp", ["localization"]], ["del", "theorem", "local_ring_hom_id", ["localization"]], ["del", "theorem", "local_ring_hom_mk'", ["localization"]], ["del", "theorem", "local_ring_hom_to_map", ["localization"]], ["del", "theorem", "local_ring_hom_unique", ["localization"]], ["del", "theorem", "mk_eq_mk'", ["localization"]], ["del", "theorem", "mk_eq_mk'_apply", ["localization"]], ["del", "theorem", "mk_one_eq_algebra_map", ["localization"]], ["del", "theorem", "mk_zero", ["localization"]], ["del", "theorem", "monoid_of_eq_algebra_map", ["localization"]], ["del", "theorem", "neg_mk", ["localization"]], ["del", "theorem", "to_localization_map_eq_monoid_of", ["localization"]], ["del", "theorem", "localization_algebra_injective", []], ["del", "theorem", "localization_map_bijective_of_field", []], ["del", "theorem", "is_integral_elem_localization_at_leading_coeff", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/at_prime.lean", "changes": [["add", "def", "prime_compl", ["ideal"]], ["add", "theorem", "is_unit_mk'_iff", ["is_localization", "at_prime"]], ["add", "theorem", "is_unit_to_map_iff", ["is_localization", "at_prime"]], ["add", "theorem", "local_ring", ["is_localization", "at_prime"]], ["add", "theorem", "mk'_mem_maximal_iff", ["is_localization", "at_prime"]], ["add", "theorem", "to_map_mem_maximal_iff", ["is_localization", "at_prime"]], ["add", "theorem", "comap_maximal_ideal", ["localization", "at_prime"]], ["add", "theorem", "map_eq_maximal_ideal", ["localization", "at_prime"]], ["add", "theorem", "le_comap_prime_compl_iff", ["localization"]], ["add", "theorem", "local_ring_hom_comp", ["localization"]], ["add", "theorem", "local_ring_hom_id", ["localization"]], ["add", "theorem", "local_ring_hom_mk'", ["localization"]], ["add", "theorem", "local_ring_hom_to_map", ["localization"]], ["add", "theorem", "local_ring_hom_unique", ["localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/away.lean", "changes": [["add", "def", "at_one", ["is_localization"]], ["add", "def", "at_unit", ["is_localization"]], ["add", "def", "at_units", ["is_localization"]], ["add", "theorem", "lift_comp", ["is_localization", "away", "away_map"]], ["add", "theorem", "lift_eq", ["is_localization", "away", "away_map"]], ["add", "def", "map", ["is_localization", "away"]], ["add", "def", "away", ["is_localization"]], ["add", "def", "away_lift", ["localization"]], ["add", "def", "away_map", ["localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/basic.lean", "changes": [["add", "theorem", "algebra_map_mk'", []], ["add", "theorem", "alg_equiv_mk'", ["is_localization"]], ["add", "theorem", "alg_equiv_symm_mk'", ["is_localization"]], ["add", "theorem", "eq_iff_eq", ["is_localization"]], ["add", "theorem", "eq_mk'_iff_mul_eq", ["is_localization"]], ["add", "theorem", "eq_of_eq", ["is_localization"]], ["add", "theorem", "eq_zero_of_fst_eq_zero", ["is_localization"]], ["add", "theorem", "is_domain_localization", ["is_localization"]], ["add", "theorem", "is_domain_of_le_non_zero_divisors", ["is_localization"]], ["add", "theorem", "is_localization_iff_of_alg_equiv", ["is_localization"]], ["add", "theorem", "is_localization_iff_of_base_ring_equiv", ["is_localization"]], ["add", "theorem", "is_localization_iff_of_ring_equiv", ["is_localization"]], ["add", "theorem", "is_localization_of_alg_equiv", ["is_localization"]], ["add", "theorem", "is_localization_of_base_ring_equiv", ["is_localization"]], ["add", "theorem", "is_unit_comp", ["is_localization"]], ["add", "theorem", "lift_comp", ["is_localization"]], ["add", "theorem", "lift_eq", ["is_localization"]], ["add", "theorem", "lift_eq_iff", ["is_localization"]], ["add", "theorem", "lift_id", ["is_localization"]], ["add", "theorem", "lift_injective_iff", ["is_localization"]], ["add", "theorem", "lift_mk'", ["is_localization"]], ["add", "theorem", "lift_mk'_spec", ["is_localization"]], ["add", "theorem", "lift_of_comp", ["is_localization"]], ["add", "theorem", "lift_surjective_iff", ["is_localization"]], ["add", "theorem", "lift_unique", ["is_localization"]], ["add", "theorem", "map_comp", ["is_localization"]], ["add", "theorem", "map_comp_map", ["is_localization"]], ["add", "theorem", "map_eq", ["is_localization"]], ["add", "theorem", "map_eq_zero_iff", ["is_localization"]], ["add", "theorem", "map_id", ["is_localization"]], ["add", "theorem", "map_injective_of_injective", ["is_localization"]], ["add", "theorem", "map_left_cancel", ["is_localization"]], ["add", "theorem", "map_map", ["is_localization"]], ["add", "theorem", "map_mk'", ["is_localization"]], ["add", "theorem", "map_non_zero_divisors_le", ["is_localization"]], ["add", "theorem", "map_right_cancel", ["is_localization"]], ["add", "theorem", "map_smul", ["is_localization"]], ["add", "theorem", "map_unique", ["is_localization"]], ["add", "theorem", "mk'_add", ["is_localization"]], ["add", "theorem", "mk'_eq_iff_eq", ["is_localization"]], ["add", "theorem", "mk'_eq_iff_eq_mul", ["is_localization"]], ["add", "theorem", "mk'_eq_iff_mk'_eq", ["is_localization"]], ["add", "theorem", "mk'_eq_mul_mk'_one", ["is_localization"]], ["add", "theorem", "mk'_eq_of_eq", ["is_localization"]], ["add", "theorem", "mk'_eq_zero_iff", ["is_localization"]], ["add", "theorem", "mk'_mem_iff", ["is_localization"]], ["add", "theorem", "mk'_mul", ["is_localization"]], ["add", "theorem", "mk'_mul_cancel_left", ["is_localization"]], ["add", "theorem", "mk'_mul_cancel_right", ["is_localization"]], ["add", "theorem", "mk'_mul_mk'_eq_one'", ["is_localization"]], ["add", "theorem", "mk'_mul_mk'_eq_one", ["is_localization"]], ["add", "theorem", "mk'_one", ["is_localization"]], ["add", "theorem", "mk'_sec", ["is_localization"]], ["add", "theorem", "mk'_self''", ["is_localization"]], ["add", "theorem", "mk'_self'", ["is_localization"]], ["add", "theorem", "mk'_self", ["is_localization"]], ["add", "theorem", "mk'_spec'", ["is_localization"]], ["add", "theorem", "mk'_spec'_mk", ["is_localization"]], ["add", "theorem", "mk'_spec", ["is_localization"]], ["add", "theorem", "mk'_spec_mk", ["is_localization"]], ["add", "theorem", "mk'_surjective", ["is_localization"]], ["add", "theorem", "monoid_hom_ext", ["is_localization"]], ["add", "theorem", "mul_mk'_eq_mk'_of_mul", ["is_localization"]], ["add", "theorem", "non_zero_divisors_le_comap", ["is_localization"]], ["add", "theorem", "of_le", ["is_localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq", ["is_localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq_map", ["is_localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_mk'", ["is_localization"]], ["add", "theorem", "ring_hom_ext", ["is_localization"]], ["add", "theorem", "sec_spec'", ["is_localization"]], ["add", "theorem", "sec_spec", ["is_localization"]], ["add", "def", "to_localization_map", ["is_localization"]], ["add", "theorem", "to_localization_map_sec", ["is_localization"]], ["add", "theorem", "to_localization_map_to_map", ["is_localization"]], ["add", "theorem", "to_localization_map_to_map_apply", ["is_localization"]], ["add", "theorem", "to_map_eq_zero_iff", ["is_localization"]], ["add", "theorem", "add_mk", ["localization"]], ["add", "theorem", "add_mk_self", ["localization"]], ["add", "theorem", "alg_equiv_mk'", ["localization"]], ["add", "theorem", "alg_equiv_mk", ["localization"]], ["add", "theorem", "alg_equiv_symm_mk'", ["localization"]], ["add", "theorem", "alg_equiv_symm_mk", ["localization"]], ["add", "theorem", "lift_on_zero", ["localization"]], ["add", "theorem", "mk_eq_mk'", ["localization"]], ["add", "theorem", "mk_eq_mk'_apply", ["localization"]], ["add", "theorem", "mk_one_eq_algebra_map", ["localization"]], ["add", "theorem", "mk_zero", ["localization"]], ["add", "theorem", "monoid_of_eq_algebra_map", ["localization"]], ["add", "theorem", "neg_mk", ["localization"]], ["add", "theorem", "to_localization_map_eq_monoid_of", ["localization"]], ["add", "theorem", "localization_algebra_injective", []], ["add", "theorem", "localization_map_bijective_of_field", []]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/fraction_ring.lean", "changes": [["add", "theorem", "mk_eq_div", ["fraction_ring"]], ["add", "def", "fraction_ring", []], ["add", "theorem", "div_surjective", ["is_fraction_ring"]], ["add", "theorem", "is_fraction_ring_iff_of_base_ring_equiv", ["is_fraction_ring"]], ["add", "theorem", "is_unit_map_of_injective", ["is_fraction_ring"]], ["add", "theorem", "lift_algebra_map", ["is_fraction_ring"]], ["add", "theorem", "lift_mk'", ["is_fraction_ring"]], ["add", "theorem", "mk'_eq_div", ["is_fraction_ring"]], ["add", "theorem", "mk'_mk_eq_div", ["is_fraction_ring"]], ["add", "theorem", "nontrivial", ["is_fraction_ring"]], ["add", "theorem", "to_map_eq_zero_iff", ["is_fraction_ring"]], ["add", "def", "is_fraction_ring", []]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/ideal.lean", "changes": [["add", "theorem", "comap_map_of_is_prime_disjoint", ["is_localization"]], ["add", "theorem", "is_prime_iff_is_prime_disjoint", ["is_localization"]], ["add", "theorem", "is_prime_of_is_prime_disjoint", ["is_localization"]], ["add", "theorem", "map_comap", ["is_localization"]], ["add", "theorem", "mem_map_algebra_map_iff", ["is_localization"]], ["add", "def", "order_embedding", ["is_localization"]], ["add", "def", "order_iso_of_prime", ["is_localization"]], ["add", "theorem", "surjective_quotient_map_of_maximal_of_localization", ["is_localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/integer.lean", "changes": [["add", "def", "common_denom", ["is_localization"]], ["add", "def", "common_denom_of_finset", ["is_localization"]], ["add", "theorem", "exist_integer_multiples", ["is_localization"]], ["add", "theorem", "exist_integer_multiples_of_finset", ["is_localization"]], ["add", "theorem", "exist_integer_multiples_of_fintype", ["is_localization"]], ["add", "theorem", "exists_integer_multiple'", ["is_localization"]], ["add", "theorem", "exists_integer_multiple", ["is_localization"]], ["add", "def", "finset_integer_multiple", ["is_localization"]], ["add", "theorem", "finset_integer_multiple_image", ["is_localization"]], ["add", "def", "integer_multiple", ["is_localization"]], ["add", "def", "is_integer", ["is_localization"]], ["add", "theorem", "is_integer_add", ["is_localization"]], ["add", "theorem", "is_integer_mul", ["is_localization"]], ["add", "theorem", "is_integer_one", ["is_localization"]], ["add", "theorem", "is_integer_smul", ["is_localization"]], ["add", "theorem", "is_integer_zero", ["is_localization"]], ["add", "theorem", "map_integer_multiple", ["is_localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/integral.lean", "changes": [["add", "theorem", "is_fraction_ring_of_algebraic", ["integral_closure"]], ["add", "theorem", "is_fraction_ring_of_finite_extension", ["integral_closure"]], ["add", "theorem", "comap_is_algebraic_iff", ["is_fraction_ring"]], ["add", "theorem", "integer_normalization_eq_zero_iff", ["is_fraction_ring"]], ["add", "theorem", "is_algebraic_iff'", ["is_fraction_ring"]], ["add", "theorem", "is_algebraic_iff", ["is_fraction_ring"]], ["add", "theorem", "is_fraction_ring_of_algebraic", ["is_integral_closure"]], ["add", "theorem", "is_fraction_ring_of_finite_extension", ["is_integral_closure"]], ["add", "theorem", "is_integral_localization'", []], ["add", "theorem", "is_integral_localization", []], ["add", "theorem", "is_integral_localization_at_leading_coeff", []], ["add", "theorem", "coeff_integer_normalization_mem_support", ["is_localization"]], ["add", "theorem", "coeff_integer_normalization_of_not_mem_support", ["is_localization"]], ["add", "theorem", "integer_normalization_aeval_eq_zero", ["is_localization"]], ["add", "theorem", "integer_normalization_coeff", ["is_localization"]], ["add", "theorem", "integer_normalization_eval₂_eq_zero", ["is_localization"]], ["add", "theorem", "integer_normalization_map_to_map", ["is_localization"]], ["add", "theorem", "integer_normalization_spec", ["is_localization"]], ["add", "theorem", "is_integral_elem_localization_at_leading_coeff", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/inv_submonoid.lean", "changes": [["add", "def", "equiv_inv_submonoid", ["is_localization"]], ["add", "theorem", "finite_type_of_monoid_fg", ["is_localization"]], ["add", "def", "inv_submonoid", ["is_localization"]], ["add", "theorem", "mem_inv_submonoid_iff_exists_mk'", ["is_localization"]], ["add", "theorem", "mul_to_inv_submonoid", ["is_localization"]], ["add", "theorem", "smul_to_inv_submonoid", ["is_localization"]], ["add", "theorem", "span_inv_submonoid", ["is_localization"]], ["add", "theorem", "submonoid_map_le_is_unit", ["is_localization"]], ["add", "theorem", "surj'", ["is_localization"]], ["add", "def", "to_inv_submonoid", ["is_localization"]], ["add", "theorem", "to_inv_submonoid_eq_mk'", ["is_localization"]], ["add", "theorem", "to_inv_submonoid_mul", ["is_localization"]], ["add", "theorem", "to_inv_submonoid_surjective", ["is_localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/localization_localization.lean", "changes": [["add", "theorem", "is_fraction_ring_of_is_domain_of_is_localization", ["is_fraction_ring"]], ["add", "theorem", "is_fraction_ring_of_is_localization", ["is_fraction_ring"]], ["add", "theorem", "is_localization_is_localization_at_prime_is_localization", ["is_localization"]], ["add", "theorem", "is_localization_of_is_exists_mul_mem", ["is_localization"]], ["add", "theorem", "is_localization_of_submonoid_le", ["is_localization"]], ["add", "def", "localization_algebra_of_submonoid_le", ["is_localization"]], ["add", "theorem", "localization_is_scalar_tower_of_submonoid_le", ["is_localization"]], ["add", "def", "localization_localization_at_prime_iso_localization", ["is_localization"]], ["add", "theorem", "localization_localization_eq_iff_exists", ["is_localization"]], ["add", "theorem", "localization_localization_is_localization", ["is_localization"]], ["add", "theorem", "localization_localization_is_localization_of_has_all_units", ["is_localization"]], ["add", "theorem", "localization_localization_map_units", ["is_localization"]], ["add", "def", "localization_localization_submodule", ["is_localization"]], ["add", "theorem", "localization_localization_surj", ["is_localization"]], ["add", "theorem", "mem_localization_localization_submodule", ["is_localization"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/num_denom.lean", "changes": [["add", "theorem", "eq_zero_of_num_eq_zero", ["is_fraction_ring"]], ["add", "theorem", "exists_reduced_fraction", ["is_fraction_ring"]], ["add", "theorem", "is_integer_of_is_unit_denom", ["is_fraction_ring"]], ["add", "theorem", "is_unit_denom_of_num_eq_zero", ["is_fraction_ring"]], ["add", "theorem", "mk'_num_denom", ["is_fraction_ring"]], ["add", "theorem", "num_denom_reduced", ["is_fraction_ring"]], ["add", "theorem", "num_mul_denom_eq_num_iff_eq'", ["is_fraction_ring"]], ["add", "theorem", "num_mul_denom_eq_num_iff_eq", ["is_fraction_ring"]], ["add", "theorem", "num_mul_denom_eq_num_mul_denom_iff_eq", ["is_fraction_ring"]]]}, {"oldPath": null, "newPath": "src/ring_theory/localization/submodule.lean", "changes": [["add", "theorem", "coe_submodule_injective", ["is_fraction_ring"]], ["add", "theorem", "coe_submodule_is_principal", ["is_fraction_ring"]], ["add", "theorem", "coe_submodule_le_coe_submodule", ["is_fraction_ring"]], ["add", "theorem", "coe_submodule_strict_mono", ["is_fraction_ring"]], ["add", "def", "coe_submodule", ["is_localization"]], ["add", "theorem", "coe_submodule_bot", ["is_localization"]], ["add", "theorem", "coe_submodule_fg", ["is_localization"]], ["add", "theorem", "coe_submodule_injective", ["is_localization"]], ["add", "theorem", "coe_submodule_is_principal", ["is_localization"]], ["add", "theorem", "coe_submodule_le_coe_submodule", ["is_localization"]], ["add", "theorem", "coe_submodule_mono", ["is_localization"]], ["add", "theorem", "coe_submodule_mul", ["is_localization"]], ["add", "theorem", "coe_submodule_span", ["is_localization"]], ["add", "theorem", "coe_submodule_span_singleton", ["is_localization"]], ["add", "theorem", "coe_submodule_strict_mono", ["is_localization"]], ["add", "theorem", "coe_submodule_sup", ["is_localization"]], ["add", "theorem", "coe_submodule_top", ["is_localization"]], ["add", "theorem", "is_noetherian_ring", ["is_localization"]], ["add", "theorem", "mem_coe_submodule", ["is_localization"]]]}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}, {"oldPath": "src/topology/algebra/localization.lean", "newPath": "src/topology/algebra/localization.lean", "changes": []}]}, {"timestamp": 1645542979, "sha": "deb5046b", "message": "feat(mv_polynomial/basic): monomial_eq_monomial_iff (#12198)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "monomial_eq_monomial_iff", ["mv_polynomial"]]]}]}, {"timestamp": 1645542978, "sha": "8b09b0ec", "message": "feat(measure_theory/group/arithmetic): add `has_measurable_smul.op` and `has_measurable_smul₂.op` (#12196)\nThis matches the naming of `has_continuous_smul.op`.", "changes": [{"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}]}, {"timestamp": 1645542977, "sha": "79c5de9a", "message": "feat(ring_theory/ideal/operations): remove unneeded assumptions from `smul_induction_on` (#12193)", "changes": [{"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1645542975, "sha": "f6d397fc", "message": "feat(order/hom/basic): `order_iso_class` (#12157)\nDefine `order_iso_class`, following the hom refactor. Also add a few missing lemmas.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "map_le_map_iff", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "ext", ["order_iso"]], ["add", "theorem", "to_fun_eq_coe", ["order_iso"]]]}]}, {"timestamp": 1645542974, "sha": "4c6b0de0", "message": "feat(topology/bases): disjoint unions of second-countable spaces are second-countable (#12061)", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "is_topological_basis_singletons", []], ["add", "theorem", "is_open_iff", ["topological_space", "is_topological_basis"]], ["add", "theorem", "sigma", ["topological_space", "is_topological_basis"]], ["add", "theorem", "sum", ["topological_space", "is_topological_basis"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "closed_embedding_inl", []], ["add", "theorem", "closed_embedding_inr", []], ["add", "theorem", "is_closed_range_inl", []], ["add", "theorem", "is_closed_range_inr", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "mono_dom", ["continuous_on"]], ["add", "theorem", "mono_rng", ["continuous_on"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "to_homeomorph_of_inducing", ["equiv"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "continuous_id_of_le", []]]}]}, {"timestamp": 1645535880, "sha": "8413f078", "message": "feat(topology/support): define topological support and compactly supported functions (#11923)\n* Also add some variants of the extreme value theorem.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["del", "theorem", "closure_support_eq", ["times_cont_diff_bump"]], ["del", "theorem", "compact_closure_support", ["times_cont_diff_bump"]], ["del", "theorem", "exists_closure_support_subset", ["times_cont_diff_bump"]], ["add", "theorem", "exists_tsupport_subset", ["times_cont_diff_bump"]], ["add", "theorem", "tsupport_eq", ["times_cont_diff_bump"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "bounded_above_of_compact_support", ["continuous"]], ["add", "theorem", "has_compact_support_norm_iff", []]]}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": [["del", "theorem", "closure_support_mem_nhds", ["smooth_bump_function"]], ["del", "theorem", "closure_support_subset_chart_at_source", ["smooth_bump_function"]], ["del", "theorem", "closure_support_subset_ext_chart_at_source", ["smooth_bump_function"]], ["del", "theorem", "closure_support_subset_symm_image_closed_ball", ["smooth_bump_function"]], ["del", "theorem", "compact_closure_support", ["smooth_bump_function"]], ["del", "theorem", "nhds_basis_closure_support", ["smooth_bump_function"]], ["add", "theorem", "nhds_basis_tsupport", ["smooth_bump_function"]], ["add", "theorem", "tsupport_mem_nhds", ["smooth_bump_function"]], ["add", "theorem", "tsupport_subset_chart_at_source", ["smooth_bump_function"]], ["add", "theorem", "tsupport_subset_ext_chart_at_source", ["smooth_bump_function"]], ["add", "theorem", "tsupport_subset_symm_image_closed_ball", ["smooth_bump_function"]]]}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["del", "theorem", "integrable_of_compact_closure_support", ["continuous"]], ["add", "theorem", "integrable_of_has_compact_support", ["continuous"]]]}, {"oldPath": "src/topology/algebra/order/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": [["add", "theorem", "bdd_above_range_of_has_compact_mul_support", ["continuous"]], ["add", "theorem", "bdd_below_range_of_has_compact_mul_support", ["continuous"]], ["add", "theorem", "exists_forall_ge'", ["continuous"]], ["add", "theorem", "exists_forall_ge_of_has_compact_mul_support", ["continuous"]], ["add", "theorem", "exists_forall_le'", ["continuous"]], ["mod", "theorem", "exists_forall_le", ["continuous"]], ["add", "theorem", "exists_forall_le_of_has_compact_mul_support", ["continuous"]], ["add", "theorem", "bdd_above_image", ["is_compact"]], ["add", "theorem", "bdd_below_image", ["is_compact"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "comp_homeomorph", ["has_compact_mul_support"]]]}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/support.lean", "changes": [["add", "theorem", "exists_compact_iff_has_compact_mul_support", []], ["add", "theorem", "comp_closed_embedding", ["has_compact_mul_support"]], ["add", "theorem", "comp_left", ["has_compact_mul_support"]], ["add", "theorem", "comp₂_left", ["has_compact_mul_support"]], ["add", "theorem", "intro", ["has_compact_mul_support"]], ["add", "theorem", "is_compact", ["has_compact_mul_support"]], ["add", "theorem", "mono'", ["has_compact_mul_support"]], ["add", "theorem", "mono", ["has_compact_mul_support"]], ["add", "theorem", "mul", ["has_compact_mul_support"]], ["add", "def", "has_compact_mul_support", []], ["add", "theorem", "has_compact_mul_support_comp_left", []], ["add", "theorem", "has_compact_mul_support_def", []], ["add", "theorem", "has_compact_mul_support_iff_eventually_eq", []], ["add", "theorem", "mul_left", ["has_compact_support"]], ["add", "theorem", "mul_right", ["has_compact_support"]], ["add", "theorem", "smul_left'", ["has_compact_support"]], ["add", "theorem", "smul_left", ["has_compact_support"]], ["add", "theorem", "smul_right", ["has_compact_support"]], ["add", "theorem", "image_eq_zero_of_nmem_mul_tsupport", []], ["add", "theorem", "is_closed_mul_tsupport", []], ["add", "def", "mul_tsupport", []], ["add", "theorem", "mul_tsupport_eq_empty_iff", []], ["add", "theorem", "not_mem_closure_mul_support_iff_eventually_eq", []], ["add", "theorem", "subset_mul_tsupport", []]]}]}, {"timestamp": 1645527040, "sha": "80591d65", "message": "feat(order/hom/lattice): Finitary join-/meet-preserving maps (#12149)\nDefine `sup_bot_hom`, `inf_top_hom` and their associated class.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "def", "lift", ["bounded_order"]], ["add", "def", "lift", ["order_bot"]], ["add", "def", "lift", ["order_top"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "def", "lift", ["bounded_order"]], ["del", "def", "lift", ["order_bot"]], ["del", "def", "lift", ["order_top"]]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["add", "def", "to_inf_top_hom", ["bounded_lattice_hom"]], ["add", "def", "to_sup_bot_hom", ["bounded_lattice_hom"]], ["add", "theorem", "bot_apply", ["inf_hom"]], ["add", "theorem", "coe_bot", ["inf_hom"]], ["add", "theorem", "coe_top", ["inf_hom"]], ["add", "theorem", "top_apply", ["inf_hom"]], ["add", "theorem", "cancel_left", ["inf_top_hom"]], ["add", "theorem", "cancel_right", ["inf_top_hom"]], ["add", "theorem", "coe_comp", ["inf_top_hom"]], ["add", "theorem", "coe_id", ["inf_top_hom"]], ["add", "theorem", "coe_inf", ["inf_top_hom"]], ["add", "theorem", "coe_top", ["inf_top_hom"]], ["add", "def", "comp", ["inf_top_hom"]], ["add", "theorem", "comp_apply", ["inf_top_hom"]], ["add", "theorem", "comp_assoc", ["inf_top_hom"]], ["add", "theorem", "comp_id", ["inf_top_hom"]], ["add", "theorem", "ext", ["inf_top_hom"]], ["add", "theorem", "id_apply", ["inf_top_hom"]], ["add", "theorem", "id_comp", ["inf_top_hom"]], ["add", "theorem", "inf_apply", ["inf_top_hom"]], ["add", "theorem", "to_fun_eq_coe", ["inf_top_hom"]], ["add", "def", "to_top_hom", ["inf_top_hom"]], ["add", "theorem", "top_apply", ["inf_top_hom"]], ["add", "structure", "inf_top_hom", []], ["add", "theorem", "map_finset_inf", []], ["add", "theorem", "map_finset_sup", []], ["add", "theorem", "bot_apply", ["sup_bot_hom"]], ["add", "theorem", "cancel_left", ["sup_bot_hom"]], ["add", "theorem", "cancel_right", ["sup_bot_hom"]], ["add", "theorem", "coe_bot", ["sup_bot_hom"]], ["add", "theorem", "coe_comp", ["sup_bot_hom"]], ["add", "theorem", "coe_id", ["sup_bot_hom"]], ["add", "theorem", "coe_sup", ["sup_bot_hom"]], ["add", "def", "comp", ["sup_bot_hom"]], ["add", "theorem", "comp_apply", ["sup_bot_hom"]], ["add", "theorem", "comp_assoc", ["sup_bot_hom"]], ["add", "theorem", "comp_id", ["sup_bot_hom"]], ["add", "theorem", "ext", ["sup_bot_hom"]], ["add", "theorem", "id_apply", ["sup_bot_hom"]], ["add", "theorem", "id_comp", ["sup_bot_hom"]], ["add", "theorem", "sup_apply", ["sup_bot_hom"]], ["add", "def", "to_bot_hom", ["sup_bot_hom"]], ["add", "theorem", "to_fun_eq_coe", ["sup_bot_hom"]], ["add", "structure", "sup_bot_hom", []], ["add", "theorem", "bot_apply", ["sup_hom"]], ["add", "theorem", "coe_bot", ["sup_hom"]], ["add", "theorem", "coe_top", ["sup_hom"]], ["mod", "theorem", "sup_apply", ["sup_hom"]], ["add", "theorem", "top_apply", ["sup_hom"]]]}]}, {"timestamp": 1645527039, "sha": "68efb10c", "message": "refactor(topology/*): Hom classes for continuous maps/homs (#11909)\nAdd\n* `continuous_map_class`\n* `bounded_continuous_map_class`\n* `continuous_monoid_hom_class`\n* `continuous_add_monoid_hom_class`\n* `continuous_map.homotopy_class`\nto follow the `fun_like` design. Deprecate lemmas accordingly.\nAlso rename a few fields to match the convention in the rest of the library.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["mod", "theorem", "comap_id", ["prime_spectrum"]]]}, {"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": [["mod", "def", "mk'", ["continuous_monoid_hom"]], ["add", "def", "to_continuous_map", ["continuous_monoid_hom"]], ["add", "theorem", "to_continuous_map_injective", ["continuous_monoid_hom"]], ["mod", "structure", "continuous_monoid_hom", []]]}, {"oldPath": "src/topology/category/CompHaus/default.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["mod", "theorem", "coe_const'", ["continuous_map"]], ["mod", "theorem", "continuous_const'", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["mod", "theorem", "coe_mul", ["continuous_map"]], ["mod", "theorem", "coe_one", ["continuous_map"]], ["mod", "theorem", "one_comp", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "cancel_left", ["continuous_map"]], ["add", "theorem", "cancel_right", ["continuous_map"]], ["add", "theorem", "coe_comp", ["continuous_map"]], ["add", "theorem", "coe_const", ["continuous_map"]], ["add", "theorem", "coe_id", ["continuous_map"]], ["mod", "theorem", "comp_apply", ["continuous_map"]], ["add", "theorem", "comp_assoc", ["continuous_map"]], ["del", "theorem", "comp_coe", ["continuous_map"]], ["add", "theorem", "comp_const", ["continuous_map"]], ["mod", "theorem", "comp_id", ["continuous_map"]], ["mod", "def", "const", ["continuous_map"]], ["mod", "theorem", "const_apply", ["continuous_map"]], ["del", "theorem", "const_coe", ["continuous_map"]], ["add", "theorem", "const_comp", ["continuous_map"]], ["mod", "theorem", "continuous_set_coe", ["continuous_map"]], ["mod", "theorem", "ext", ["continuous_map"]], ["del", "theorem", "ext_iff", ["continuous_map"]], ["del", "def", "id", ["continuous_map"]], ["mod", "theorem", "id_apply", ["continuous_map"]], ["del", "theorem", "id_coe", ["continuous_map"]], ["mod", "theorem", "id_comp", ["continuous_map"]], ["mod", "structure", "continuous_map", []], ["add", "theorem", "map_continuous_at", []], ["add", "theorem", "map_continuous_within_at", []]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["del", "theorem", "coe_injective", ["bounded_continuous_function"]], ["mod", "theorem", "ext", ["bounded_continuous_function"]], ["del", "theorem", "ext_iff", ["bounded_continuous_function"]], ["mod", "theorem", "forall_coe_one_iff_one", ["bounded_continuous_function"]], ["mod", "def", "restrict", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": [["mod", "theorem", "apply_one", ["continuous_map", "homotopy"]], ["mod", "theorem", "apply_zero", ["continuous_map", "homotopy"]], ["del", "theorem", "coe_fn_injective", ["continuous_map", "homotopy"]], ["mod", "theorem", "ext", ["continuous_map", "homotopy"]], ["mod", "theorem", "apply_one", ["continuous_map", "homotopy_with"]], ["mod", "theorem", "apply_zero", ["continuous_map", "homotopy_with"]]]}, {"oldPath": "src/topology/homotopy/equiv.lean", "newPath": "src/topology/homotopy/equiv.lean", "changes": []}, {"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": []}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": []}, {"oldPath": "src/topology/homotopy/product.lean", "newPath": "src/topology/homotopy/product.lean", "changes": [["mod", "def", "pi", ["continuous_map", "homotopy"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "theorem", "comap_id", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}]}, {"timestamp": 1645527038, "sha": "247943a9", "message": "feat(analysis/seminorm): add inf (#11791)\nDefine the infimum of seminorms.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "inf_apply", ["seminorm"]], ["add", "theorem", "le_insert'", ["seminorm"]], ["add", "theorem", "le_insert", ["seminorm"]], ["add", "theorem", "smul_inf", ["seminorm"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "csupr_mul_csupr_le", []], ["add", "theorem", "csupr_mul_le", []], ["add", "theorem", "le_cinfi_mul", []], ["add", "theorem", "le_cinfi_mul_cinfi", []], ["add", "theorem", "le_mul_cinfi", []], ["add", "theorem", "mul_csupr_le", []]]}]}, {"timestamp": 1645524632, "sha": "9a7ed8cb", "message": "chore(algebra/lie/engel): speed up proof of Engel's theorem slightly (#12205)\nLocal measurements using `set_option profiler true` are noisy but indicate\nthat this speeds up elaboration of `lie_algebra.is_engelian_of_is_noetherian`\nby about 20% from about 10s to about 8s.", "changes": [{"oldPath": "src/algebra/lie/engel.lean", "newPath": "src/algebra/lie/engel.lean", "changes": []}]}, {"timestamp": 1645499347, "sha": "cb45da26", "message": "feat(category_theory/limits): is_bilimit (#12108)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "structure", "is_bilimit", ["category_theory", "limits", "bicone"]], ["add", "def", "of_colimit_cocone", ["category_theory", "limits", "bicone"]], ["add", "def", "of_limit_cone", ["category_theory", "limits", "bicone"]], ["add", "def", "to_binary_bicone_is_bilimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_colimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_limit", ["category_theory", "limits", "bicone"]], ["add", "theorem", "ι_of_is_limit", ["category_theory", "limits", "bicone"]], ["add", "theorem", "π_of_is_colimit", ["category_theory", "limits", "bicone"]], ["mod", "theorem", "bicone_ι_π_ne", ["category_theory", "limits"]], ["add", "structure", "is_bilimit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone_is_bilimit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone_is_colimit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone_is_limit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_bilimit", ["category_theory", "limits", "binary_biproduct"]], ["add", "def", "is_bilimit", ["category_theory", "limits", "biproduct"]]]}]}, {"timestamp": 1645490265, "sha": "e16e093e", "message": "feat(analysis/specific_limits): dirichlet and alternating series tests (#11908)\nAdds [Dirichlet's test](https://en.wikipedia.org/wiki/Dirichlet%27s_test) along with the [alternating series test](https://en.wikipedia.org/wiki/Alternating_series_test) as a special case of the former. For the curious, [Nick Bingham's course notes](https://www.ma.imperial.ac.uk/~bin06/M2PM3-Complex-Analysis/m2pm3abeldir.pdf) give some more context on Dirichlet's test. It's somewhat obscure.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/infinite_sum.lean", "newPath": "src/analysis/normed/group/infinite_sum.lean", "changes": [["add", "theorem", "cauchy_seq_range_of_norm_bounded", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "cauchy_seq_alternating_series_of_tendsto_zero", ["antitone"]], ["add", "theorem", "cauchy_seq_series_mul_of_tendsto_zero_of_bounded", ["antitone"]], ["add", "theorem", "tendsto_alternating_series_of_tendsto_zero", ["antitone"]], ["add", "theorem", "cauchy_seq_alternating_series_of_tendsto_zero", ["monotone"]], ["add", "theorem", "cauchy_seq_series_mul_of_tendsto_zero_of_bounded", ["monotone"]], ["add", "theorem", "tendsto_alternating_series_of_tendsto_zero", ["monotone"]], ["add", "theorem", "norm_sum_neg_one_pow_le", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "def", "set_seq", ["sequentially_complete"]]]}]}, {"timestamp": 1645487214, "sha": "d77e91f8", "message": "perf(geometry/euclidean): speed up proof on the edge of timing out (#12191)", "changes": [{"oldPath": "src/geometry/euclidean/oriented_angle.lean", "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": []}]}, {"timestamp": 1645487213, "sha": "22464cf6", "message": "feat(analysis/normed_space/basic): `norm_matrix_lt_iff` (#12151)\nA strict variant of `norm_matrix_le_iff`, using `pi_norm_lt_iff`", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_matrix_lt_iff", []]]}]}, {"timestamp": 1645483991, "sha": "eb5c5ed5", "message": "feat(measure_theory/integral/set_integral): Bochner integral with respect to a measure with density (#12123)\nThis PR shows that `∫ a, g a ∂(μ.with_density (λ x, f x)) = ∫ a, f a • g a ∂μ`. (This fact is already available for the Lebesgue integral, not for the Bochner integral.)", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "measurable_piecewise", ["continuous_on"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "integrable_with_density_iff_integrable_coe_smul", ["measure_theory"]], ["add", "theorem", "integrable_with_density_iff_integrable_coe_smul₀", ["measure_theory"]], ["mod", "theorem", "integrable_with_density_iff_integrable_smul", ["measure_theory"]], ["add", "theorem", "integrable_with_density_iff_integrable_smul₀", ["measure_theory"]], ["add", "theorem", "mem_ℒ1_smul_of_L1_with_density", ["measure_theory"]], ["add", "theorem", "with_density_smul_li_apply", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/measure.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_with_density_eq_integral_smul", []], ["add", "theorem", "integral_with_density_eq_integral_smul₀", []], ["add", "theorem", "set_integral_with_density_eq_set_integral_smul", []], ["add", "theorem", "set_integral_with_density_eq_set_integral_smul₀", []]]}]}, {"timestamp": 1645482286, "sha": "8aa26b27", "message": "feat(tactic/linear_combination): improve error messages and degenerate case (#12062)\nThis threads the expected type of the combination from the target throughout the tactic call.\nIf no hypotheses are given to combine, the behavior is effectively to just call the normalization tactic.\ncloses #11990", "changes": [{"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": []}, {"oldPath": "test/linear_combination.lean", "newPath": "test/linear_combination.lean", "changes": []}]}, {"timestamp": 1645477598, "sha": "2971f3dc", "message": "feat(algebra/star/self_adjoint): remove commutativity hypothesis from `has_pow (self_adjoint R)` (#12188)\nThis was put in the wrong section. Powers of selfadjoint elements are still selfadjoint.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": []}]}, {"timestamp": 1645477597, "sha": "a6078202", "message": "feat(category_theory/equivalence): if two functors F and G are isomorphic, F is an equivalence iff G is (#12162)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "def", "cancel_comp_left", ["category_theory", "is_equivalence"]], ["add", "def", "cancel_comp_right", ["category_theory", "is_equivalence"]], ["add", "def", "equiv_of_iso", ["category_theory", "is_equivalence"]], ["add", "def", "of_iso", ["category_theory", "is_equivalence"]], ["add", "theorem", "of_iso_refl", ["category_theory", "is_equivalence"]], ["add", "theorem", "of_iso_trans", ["category_theory", "is_equivalence"]]]}]}, {"timestamp": 1645477595, "sha": "9a17b556", "message": "feat(analysis/normed_space/basic): `norm_entry_le_entrywise_sup_norm` (#12159)\nThe entries of a matrix are at most the entrywise sup norm.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_entry_le_entrywise_sup_norm", ["matrix"]]]}]}, {"timestamp": 1645470870, "sha": "1cfbcc63", "message": "feat(algebra/ring/ulift): add a `field` instance (#12141)", "changes": [{"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}]}, {"timestamp": 1645461700, "sha": "e3d36811", "message": "feat(analysis/inner_product_space/spectrum): `pos_nonneg_eigenvalues` (#12161)\nIf T is a positive self-adjoint operator, then its eigenvalues are\nnonnegative. Maybe there should be a definition of \"positive operator\",\nand maybe this should be generalized. Guidance appreciated!", "changes": [{"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["add", "theorem", "eigenvalue_nonneg_of_nonneg", []], ["add", "theorem", "eigenvalue_pos_of_pos", []], ["add", "theorem", "inner_product_apply_eigenvector", []]]}]}, {"timestamp": 1645457408, "sha": "02dc6f25", "message": "feat(probability/stopping): filtrations are a complete lattice (#12169)", "changes": [{"oldPath": "src/probability/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": [["del", "def", "const_filtration", ["measure_theory"]], ["add", "theorem", "Inf_def", ["measure_theory", "filtration"]], ["add", "theorem", "Sup_def", ["measure_theory", "filtration"]], ["add", "theorem", "coe_fn_inf", ["measure_theory", "filtration"]], ["add", "theorem", "coe_fn_sup", ["measure_theory", "filtration"]], ["add", "def", "const", ["measure_theory", "filtration"]]]}]}, {"timestamp": 1645457407, "sha": "9ed71796", "message": "refactor(*): move normed field lemmas into root namespace (#12163)\nThis takes the normed field lemmas given in `analysis.normed_space.basic` and moves them from the `normed_field` namespace into the root namespace.\nThis PR moves these lemmas and definitions: `norm_mul`, `nnnorm_mul`, `norm_hom`, `nnnorm_hom`, `norm_pow`, `nnnorm_pow`, `norm_prod`, `nnnorm_prod`, `norm_div`, `nnnorm_div`, `norm_inv`, `nnnorm_inv`, `norm_zpow`, `nnnorm_zpow`.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/conformal.lean", "newPath": "src/analysis/complex/conformal.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_div", []], ["add", "def", "nnnorm_hom", []], ["add", "theorem", "nnnorm_inv", []], ["add", "theorem", "nnnorm_mul", []], ["add", "theorem", "nnnorm_pow", []], ["add", "theorem", "nnnorm_prod", []], ["add", "theorem", "nnnorm_zpow", []], ["add", "theorem", "norm_div", []], ["add", "def", "norm_hom", []], ["add", "theorem", "norm_inv", []], ["add", "theorem", "norm_mul", []], ["add", "theorem", "norm_pow", []], ["add", "theorem", "norm_prod", []], ["add", "theorem", "norm_zpow", []], ["del", "theorem", "nnnorm_div", ["normed_field"]], ["del", "def", "nnnorm_hom", ["normed_field"]], ["del", "theorem", "nnnorm_inv", ["normed_field"]], ["del", "theorem", "nnnorm_mul", ["normed_field"]], ["del", "theorem", "nnnorm_pow", ["normed_field"]], ["del", "theorem", "nnnorm_prod", ["normed_field"]], ["del", "theorem", "nnnorm_zpow", ["normed_field"]], ["del", "theorem", "norm_div", ["normed_field"]], ["del", "def", "norm_hom", ["normed_field"]], ["del", "theorem", "norm_inv", ["normed_field"]], ["del", "theorem", "norm_mul", ["normed_field"]], ["del", "theorem", "norm_pow", ["normed_field"]], ["del", "theorem", "norm_prod", ["normed_field"]], ["del", "theorem", "norm_zpow", ["normed_field"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ordered.lean", "newPath": "src/analysis/normed_space/ordered.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star/basic.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_deriv.lean", "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1645457406, "sha": "95d22b52", "message": "feat(geometry/euclidean/oriented_angle): oriented angles and rotations (#12106)\nDefine oriented angles and rotations in a real inner product space,\nwith respect to a choice of orthonormal basis indexed by `fin 2`, and\nprove various lemmas about them, including that the definition depends\nonly on the orientation associated with the basis, and geometrical\nresults such as pons asinorum, \"angle at center of a circle equals\ntwice angle at circumference\" and \"angles in same segment are equal\" /\n\"opposite angles of a cyclic quadrilateral add to π\" (these last two\nbeing the same result for oriented angles mod π).", "changes": [{"oldPath": null, "newPath": "src/geometry/euclidean/oriented_angle.lean", "changes": [["add", "def", "conj_lie", ["orthonormal"]], ["add", "theorem", "conj_lie_symm", ["orthonormal"]], ["add", "theorem", "det_conj_lie", ["orthonormal"]], ["add", "theorem", "det_rotation", ["orthonormal"]], ["add", "theorem", "eq_iff_norm_eq_and_oangle_eq_zero", ["orthonormal"]], ["add", "theorem", "eq_iff_norm_eq_of_oangle_eq_zero", ["orthonormal"]], ["add", "theorem", "eq_iff_oangle_eq_zero_of_norm_eq", ["orthonormal"]], ["add", "theorem", "eq_rotation_self_iff", ["orthonormal"]], ["add", "theorem", "eq_rotation_self_iff_angle_eq_zero", ["orthonormal"]], ["add", "theorem", "exists_linear_isometry_equiv_eq", ["orthonormal"]], ["add", "theorem", "exists_linear_isometry_equiv_eq_of_det_neg", ["orthonormal"]], ["add", "theorem", "exists_linear_isometry_equiv_eq_of_det_pos", ["orthonormal"]], ["add", "theorem", "exists_linear_isometry_equiv_map_eq_of_orientation_eq", ["orthonormal"]], ["add", "theorem", "exists_linear_isometry_equiv_map_eq_of_orientation_eq_neg", ["orthonormal"]], ["add", "theorem", "linear_equiv_det_conj_lie", ["orthonormal"]], ["add", "theorem", "linear_equiv_det_rotation", ["orthonormal"]], ["add", "def", "oangle", ["orthonormal"]], ["add", "theorem", "oangle_add", ["orthonormal"]], ["add", "theorem", "oangle_add_cyc3", ["orthonormal"]], ["add", "theorem", "oangle_add_cyc3_neg_left", ["orthonormal"]], ["add", "theorem", "oangle_add_cyc3_neg_right", ["orthonormal"]], ["add", "theorem", "oangle_add_oangle_rev", ["orthonormal"]], ["add", "theorem", "oangle_add_oangle_rev_neg_left", ["orthonormal"]], ["add", "theorem", "oangle_add_oangle_rev_neg_right", ["orthonormal"]], ["add", "theorem", "oangle_add_swap", ["orthonormal"]], ["add", "theorem", "oangle_conj_lie", ["orthonormal"]], ["add", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_of_ne_zero", ["orthonormal"]], ["add", "theorem", "oangle_eq_iff_eq_norm_div_norm_smul_rotation_or_eq_zero", ["orthonormal"]], ["add", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_of_ne_zero", ["orthonormal"]], ["add", "theorem", "oangle_eq_iff_eq_pos_smul_rotation_or_eq_zero", ["orthonormal"]], ["add", "theorem", "oangle_eq_neg_of_orientation_eq_neg", ["orthonormal"]], ["add", "theorem", "oangle_eq_of_orientation_eq", ["orthonormal"]], ["add", "theorem", "oangle_eq_pi_sub_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal"]], ["add", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal"]], ["add", "theorem", "oangle_eq_two_zsmul_oangle_sub_of_norm_eq_real", ["orthonormal"]], ["add", "theorem", "oangle_map", ["orthonormal"]], ["add", "theorem", "oangle_neg_left", ["orthonormal"]], ["add", "theorem", "oangle_neg_left_eq_neg_right", ["orthonormal"]], ["add", "theorem", "oangle_neg_neg", ["orthonormal"]], ["add", "theorem", "oangle_neg_right", ["orthonormal"]], ["add", "theorem", "oangle_neg_self_left", ["orthonormal"]], ["add", "theorem", "oangle_neg_self_right", ["orthonormal"]], ["add", "theorem", "oangle_rev", ["orthonormal"]], ["add", "theorem", "oangle_rotation", ["orthonormal"]], ["add", "theorem", "oangle_rotation_left", ["orthonormal"]], ["add", "theorem", "oangle_rotation_oangle_left", ["orthonormal"]], ["add", "theorem", "oangle_rotation_oangle_right", ["orthonormal"]], ["add", "theorem", "oangle_rotation_right", ["orthonormal"]], ["add", "theorem", "oangle_rotation_self_left", ["orthonormal"]], ["add", "theorem", "oangle_rotation_self_right", ["orthonormal"]], ["add", "theorem", "oangle_self", ["orthonormal"]], ["add", "theorem", "oangle_smul_left_of_neg", ["orthonormal"]], ["add", "theorem", "oangle_smul_left_of_pos", ["orthonormal"]], ["add", "theorem", "oangle_smul_left_self_of_nonneg", ["orthonormal"]], ["add", "theorem", "oangle_smul_right_of_neg", ["orthonormal"]], ["add", "theorem", "oangle_smul_right_of_pos", ["orthonormal"]], ["add", "theorem", "oangle_smul_right_self_of_nonneg", ["orthonormal"]], ["add", "theorem", "oangle_smul_smul_self_of_nonneg", ["orthonormal"]], ["add", "theorem", "oangle_sub_eq_oangle_sub_rev_of_norm_eq", ["orthonormal"]], ["add", "theorem", "oangle_sub_left", ["orthonormal"]], ["add", "theorem", "oangle_sub_right", ["orthonormal"]], ["add", "theorem", "oangle_zero_left", ["orthonormal"]], ["add", "theorem", "oangle_zero_right", ["orthonormal"]], ["add", "def", "rotation", ["orthonormal"]], ["add", "theorem", "rotation_eq_of_orientation_eq", ["orthonormal"]], ["add", "theorem", "rotation_eq_rotation_neg_of_orientation_eq_neg", ["orthonormal"]], ["add", "theorem", "rotation_eq_self_iff", ["orthonormal"]], ["add", "theorem", "rotation_eq_self_iff_angle_eq_zero", ["orthonormal"]], ["add", "theorem", "rotation_oangle_eq_iff_norm_eq", ["orthonormal"]], ["add", "theorem", "rotation_pi", ["orthonormal"]], ["add", "theorem", "rotation_symm", ["orthonormal"]], ["add", "theorem", "rotation_trans", ["orthonormal"]], ["add", "theorem", "rotation_zero", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_neg_left", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_neg_right", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_neg_self_left", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_neg_self_right", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_smul_left_of_ne_zero", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_smul_left_self", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_smul_right_of_ne_zero", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_smul_right_self", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_smul_smul_self", ["orthonormal"]], ["add", "theorem", "two_zsmul_oangle_sub_eq_two_zsmul_oangle_sub_of_norm_eq", ["orthonormal"]]]}]}, {"timestamp": 1645457404, "sha": "6db15773", "message": "feat(category_theory/preadditive): separators in preadditive categories (#11884)", "changes": [{"oldPath": "src/category_theory/generator.lean", "newPath": "src/category_theory/generator.lean", "changes": [["mod", "theorem", "is_codetecting_op_iff", ["category_theory"]], ["mod", "theorem", "is_codetector_def", ["category_theory"]], ["mod", "theorem", "is_codetector_iff_reflects_isomorphisms_yoneda_obj", ["category_theory"]], ["mod", "theorem", "is_coseparator_def", ["category_theory"]], ["mod", "theorem", "is_coseparator_iff_faithful_yoneda_obj", ["category_theory"]], ["mod", "theorem", "is_detecting_iff_is_separating", ["category_theory"]], ["mod", "theorem", "is_detecting_op_iff", ["category_theory"]], ["mod", "theorem", "is_detecting_unop_iff", ["category_theory"]], ["mod", "theorem", "is_detector_def", ["category_theory"]], ["mod", "theorem", "is_detector_iff_reflects_isomorphisms_coyoneda_obj", ["category_theory"]], ["mod", "theorem", "is_separating_op_iff", ["category_theory"]], ["mod", "theorem", "is_separator_def", ["category_theory"]], ["mod", "theorem", "is_separator_iff_faithful_coyoneda_obj", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/preadditive/generator.lean", "changes": [["add", "theorem", "is_coseparator_iff_faithful_preadditive_yoneda", ["category_theory"]], ["add", "theorem", "is_coseparator_iff_faithful_preadditive_yoneda_obj", ["category_theory"]], ["add", "theorem", "is_separator_iff_faithful_preadditive_coyoneda", ["category_theory"]], ["add", "theorem", "is_separator_iff_faithful_preadditive_coyoneda_obj", ["category_theory"]], ["add", "theorem", "is_coseparating_iff", ["category_theory", "preadditive"]], ["add", "theorem", "is_coseparator_iff", ["category_theory", "preadditive"]], ["add", "theorem", "is_separating_iff", ["category_theory", "preadditive"]], ["add", "theorem", "is_separator_iff", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1645450425, "sha": "3ad73951", "message": "chore(topology/algebra/infinite_sum): reference Cauchy criterion in docs (#12172)", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1645450424, "sha": "634dfc8a", "message": "feat(order/*): Missing order lifting instances (#12154)\nAdd a few missing pullbacks of order instances.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["mod", "theorem", "binfi_sup_eq", []], ["mod", "theorem", "sup_binfi_eq", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "def", "lift", ["bounded_order"]], ["add", "def", "lift", ["order_bot"]], ["add", "def", "lift", ["order_top"]]]}]}, {"timestamp": 1645450423, "sha": "2f33463f", "message": "feat(group_theory/free_product): is_free_group_free_product_of_is_free_group (#12125)", "changes": [{"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": []}]}, {"timestamp": 1645443487, "sha": "7c6678ad", "message": "doc(topology/dense_embedding): fix markdown (#12180)\nRight now it just renders as \"γ -f→ α g↓ ↓e δ -h→ β\"", "changes": [{"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}]}, {"timestamp": 1645443486, "sha": "f66a5ddb", "message": "chore(data/set/basic): add a few lemmas and a `@[simp]` attribute (#12176)\n* rename `set.exists_eq_singleton_iff_nonempty_unique_mem` to `set.exists_eq_singleton_iff_nonempty_subsingleton`, use `set.subsingleton` in the statement;\n* add `@[simp]` to `set.subset_compl_singleton_iff`;\n* add `set.diff_diff_right_self`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_diff_right_self", ["set"]], ["add", "theorem", "exists_eq_singleton_iff_nonempty_subsingleton", ["set"]], ["del", "theorem", "exists_eq_singleton_iff_nonempty_unique_mem", ["set"]], ["mod", "theorem", "subset_compl_singleton_iff", ["set"]]]}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1645443485, "sha": "0eb5e2d1", "message": "feat(topology/algebra): if a subobject is commutative, then so is its topological closure (#12170)\nWe prove that if a submonoid (or subgroup, subsemiring, subring, subalgebra, and the additive versions where applicable) is commutative, then so is its topological closure.", "changes": [{"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": [["add", "def", "comm_ring_topological_closure", ["subalgebra"]], ["add", "def", "comm_semiring_topological_closure", ["subalgebra"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "def", "comm_group_topological_closure", ["subgroup"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "def", "comm_monoid_topological_closure", ["submonoid"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "def", "comm_ring_topological_closure", ["subring"]], ["add", "def", "comm_semiring_topological_closure", ["subsemiring"]]]}]}, {"timestamp": 1645443484, "sha": "56dbb604", "message": "feat(category_theory/opposites): nat_trans.remove_unop (#12147)", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "remove_left_op_id", ["category_theory", "nat_trans"]], ["add", "theorem", "remove_right_op_id", ["category_theory", "nat_trans"]], ["add", "theorem", "remove_unop_id", ["category_theory", "nat_trans"]]]}]}, {"timestamp": 1645443482, "sha": "b3b5e355", "message": "chore(data/nat/prime): slightly golf proof of mem_factors (#12143)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1645443481, "sha": "afcc7e74", "message": "feat(data/nat/prime): move nat.prime_iff_prime_int; add int.prime_two/three (#12133)\nI found it useful to have these results with somewhat lighter imports.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "prime_three", ["int"]], ["add", "theorem", "prime_two", ["int"]], ["add", "theorem", "prime_iff_prime_int", ["nat"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["del", "theorem", "prime_iff_prime_int", ["nat"]]]}]}, {"timestamp": 1645443480, "sha": "37019db9", "message": "feat(topology/algebra/{group,monoid}): nat and int scalar multiplication is continuous (#12124)\nThese instances allow a diamond to appear in the scalar action on `continuous_affine_map`s, which we fix at the same time.", "changes": [{"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["mod", "theorem", "pow_comp", ["continuous_map"]]]}]}, {"timestamp": 1645443478, "sha": "72252b3c", "message": "feat(analysis/inner_product_space/projection): norm_sq_eq_sum_norm_sq… (#12096)\n…_projection\nThe Pythagorean theorem for an orthogonal projection onto a submodule S.\nI am sure that there are some style changes that could/should be made!", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "norm_sq_eq_add_norm_sq_projection", []]]}]}, {"timestamp": 1645443477, "sha": "271c3237", "message": "feat(order/filter): prod_assoc (#12002)\nmap (prod_assoc α β γ) ((f ×ᶠ g) ×ᶠ h) = f ×ᶠ (g ×ᶠ h)\nwith two tiny supporting lemmas", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "comp_equiv", ["filter", "has_basis"]], ["add", "theorem", "comp_of_surjective", ["filter", "has_basis"]], ["add", "theorem", "prod_assoc", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_equiv_symm", ["filter"]], ["add", "theorem", "map_equiv_symm", ["filter"]]]}]}, {"timestamp": 1645443476, "sha": "d8d2f543", "message": "feat(group_theory/nilpotent): n-ary products of nilpotent group (#11829)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_pi_of_bounded_class", []], ["add", "theorem", "lower_central_series_pi_le", []], ["add", "theorem", "lower_central_series_pi_of_fintype", []], ["add", "theorem", "nilpotency_class_pi", []]]}]}, {"timestamp": 1645438495, "sha": "e966efc8", "message": "chore(topology/constructions): golf a proof (#12174)", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1645438494, "sha": "d0fa7a8e", "message": "chore(category_theory/limits): make fin_category_opposite an instance (#12153)", "changes": [{"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": [["del", "def", "fin_category_opposite", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}]}, {"timestamp": 1645436835, "sha": "b04851fe", "message": "chore(tactic): fix tactic doc tags (#12131)", "changes": [{"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_search/frontend.lean", "newPath": "src/tactic/rewrite_search/frontend.lean", "changes": []}]}, {"timestamp": 1645433312, "sha": "8b93d3a5", "message": "feat(measure_theory/function/lp_space): generalize some `integrable` lemmas to `mem_ℒp` (#11231)\nI would like to define integrable as `mem_ℒp` for `p = 1` and remove the `has_finite_integral` prop. But first we need to generalize everything we have about `integrable` to `mem_ℒp`. This is one step towards that goal.", "changes": [{"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["add", "theorem", "ess_sup_comp_le_ess_sup_map_measure", []], ["add", "theorem", "ess_sup_map_measure", []], ["add", "theorem", "ess_sup_map_measure_of_measurable", []], ["add", "theorem", "ess_sup_map_measure", ["measurable_embedding"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "mem_ℒp_map_measure_iff", ["measurable_embedding"]], ["add", "theorem", "snorm_ess_sup_map_measure", ["measurable_embedding"]], ["add", "theorem", "snorm_map_measure", ["measurable_embedding"]], ["add", "theorem", "mem_ℒp_map_measure_iff", ["measurable_equiv"]], ["add", "theorem", "left_of_add_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "right_of_add_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "smul_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_map_measure_iff", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_map_measure", ["measure_theory"]], ["add", "theorem", "snorm_le_add_measure_left", ["measure_theory"]], ["add", "theorem", "snorm_le_add_measure_right", ["measure_theory"]], ["add", "theorem", "snorm_map_measure", ["measure_theory"]], ["add", "theorem", "snorm_one_add_measure", ["measure_theory"]]]}]}, {"timestamp": 1645430452, "sha": "e60e1f22", "message": "feat(data/real/pointwise): mul distributes over `infi` and `supr` (#12105)", "changes": [{"oldPath": "src/data/real/pointwise.lean", "newPath": "src/data/real/pointwise.lean", "changes": [["add", "theorem", "infi_mul_of_nonneg", ["real"]], ["add", "theorem", "infi_mul_of_nonpos", ["real"]], ["add", "theorem", "mul_infi_of_nonneg", ["real"]], ["add", "theorem", "mul_infi_of_nonpos", ["real"]], ["add", "theorem", "mul_supr_of_nonneg", ["real"]], ["add", "theorem", "mul_supr_of_nonpos", ["real"]], ["add", "theorem", "smul_infi_of_nonneg", ["real"]], ["add", "theorem", "smul_infi_of_nonpos", ["real"]], ["add", "theorem", "smul_supr_of_nonneg", ["real"]], ["add", "theorem", "smul_supr_of_nonpos", ["real"]], ["add", "theorem", "supr_mul_of_nonneg", ["real"]], ["add", "theorem", "supr_mul_of_nonpos", ["real"]]]}]}, {"timestamp": 1645404712, "sha": "6298a431", "message": "feat(analysis/seminorm): smul_sup (#12103)\nThe `have : real.smul_max` local proof doesn't feel very general, so I've left it as a `have` rather than promoting it to a lemma.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "smul_sup", ["seminorm"]], ["add", "theorem", "sup_apply", ["seminorm"]]]}]}, {"timestamp": 1645404711, "sha": "6ecd7ab8", "message": "feat(topology/continuous_function/bounded): generalize scalar action (#12098)\nThis also makes the scalar action computable", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1645401226, "sha": "6ae1b702", "message": "feat(topology/uniform_space/cauchy): add `cauchy_seq.comp_injective` (#11986)\nAPI changes:\n- add `filter.at_top_le_cofinite`;\n- add `function.injective.nat_tendsto_at_top`;\n- add `cauchy_seq.comp_injective`, `function.bijective.cauchy_seq_comp_iff`.", "changes": [{"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "at_top_le_cofinite", []], ["add", "theorem", "nat_tendsto_at_top", ["function", "injective"]], ["mod", "theorem", "tendsto_cofinite", ["function", "injective"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "comp_injective", ["cauchy_seq"]], ["add", "theorem", "cauchy_seq_comp_iff", ["function", "bijective"]]]}]}, {"timestamp": 1645394511, "sha": "7e1ef9f8", "message": "feat(ring_theory/witt_vector): assorted facts about Witt vectors over char p rings (#12093)", "changes": [{"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": [["add", "theorem", "frobenius_bijective", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/identities.lean", "newPath": "src/ring_theory/witt_vector/identities.lean", "changes": [["add", "theorem", "p_nonzero", ["witt_vector", "fraction_ring"]], ["add", "theorem", "p_nonzero", ["witt_vector"]]]}]}, {"timestamp": 1645367115, "sha": "334fb89d", "message": "feat(algebra/order/ring): add three_ne_zero and four_ne_zero (#12142)", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "four_ne_zero", []], ["add", "theorem", "three_ne_zero", []]]}]}, {"timestamp": 1645350193, "sha": "6c6e142e", "message": "chore(data/nat/factorization): Reorder lemmas and some minor golfing (#12144)\nSome minor housework on this file, reordering and regrouping lemmas, adding and editing a few docstrings and section headers, and golfing a few proofs.", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["mod", "theorem", "pos_of_mem_factorization", ["nat"]], ["mod", "theorem", "prime_of_mem_factorization", ["nat"]], ["del", "def", "rec_on_pos_prime_coprime", ["nat"]], ["add", "def", "rec_on_pos_prime_pos_coprime", ["nat"]]]}]}, {"timestamp": 1645320146, "sha": "55c9cff7", "message": "chore(data/nat/prime): slightly weaken assumption in nat.exists_prime_and_dvd (#12156)\nIt is vacuously true for zero, as everything divides zero.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "exists_prime_and_dvd", ["nat"]]]}, {"oldPath": "src/data/pnat/prime.lean", "newPath": "src/data/pnat/prime.lean", "changes": [["mod", "theorem", "exists_prime_and_dvd", ["pnat"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["mod", "theorem", "exists_prime_and_dvd", ["int"]]]}]}, {"timestamp": 1645315255, "sha": "fa603fed", "message": "feat(order/category/FinPartialOrder): The category of finite partial orders (#11997)\nDefine `FinPartialOrder`, the category of finite partial orders with monotone functions.", "changes": [{"oldPath": null, "newPath": "src/order/category/FinPartialOrder.lean", "changes": [["add", "def", "dual", ["FinPartialOrder"]], ["add", "def", "dual_equiv", ["FinPartialOrder"]], ["add", "def", "mk", ["FinPartialOrder", "iso"]], ["add", "def", "of", ["FinPartialOrder"]], ["add", "structure", "FinPartialOrder", []], ["add", "theorem", "FinPartialOrder_dual_comp_forget_to_PartialOrder", []]]}]}, {"timestamp": 1645309571, "sha": "56115334", "message": "feat(analysis/normed_space/star/complex): real and imaginary part of an element of a star module (#11811)\nWe introduce the real and imaginary parts of an element of a star module, and show that elements of the type can be decomposed into these two parts in the obvious way.", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "inv_of_two_add_inv_of_two", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "inv_of_two_smul_add_inv_of_two_smul", []]]}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": [["add", "def", "submodule", ["self_adjoint"]], ["add", "def", "self_adjoint_part", []], ["add", "def", "submodule", ["skew_adjoint"]], ["add", "def", "skew_adjoint_part", []], ["add", "def", "decompose_prod_adjoint", ["star_module"]], ["add", "theorem", "self_adjoint_part_add_skew_adjoint_part", ["star_module"]]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/star/complex.lean", "changes": [["add", "def", "mul_neg_I_lin", ["star_module"]], ["add", "theorem", "re_add_im", ["star_module"]]]}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "conj_inv", ["complex"]], ["mod", "theorem", "star_def", ["complex"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["del", "theorem", "char_zero_R_or_C", ["is_R_or_C"]], ["add", "theorem", "conj_inv", ["is_R_or_C"]], ["add", "theorem", "star_def", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}]}, {"timestamp": 1645305248, "sha": "37775438", "message": "feat(category_theory/isomorphism): two lemmas is_iso.of_iso_comp_left/right on isomorphisms (#12056)", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "of_is_iso_comp_left", ["category_theory", "is_iso"]], ["add", "theorem", "of_is_iso_comp_right", ["category_theory", "is_iso"]], ["add", "theorem", "of_is_iso_fac_left", ["category_theory", "is_iso"]], ["add", "theorem", "of_is_iso_fac_right", ["category_theory", "is_iso"]]]}]}, {"timestamp": 1645298857, "sha": "bc63071c", "message": "feat(algebra/is_prime_pow): dot notation for nat.prime (#12145)", "changes": [{"oldPath": "src/algebra/is_prime_pow.lean", "newPath": "src/algebra/is_prime_pow.lean", "changes": [["add", "theorem", "is_prime_pow", ["nat", "prime"]]]}]}, {"timestamp": 1645298856, "sha": "628e8fbf", "message": "doc(group_theory/coset): Mention \"Lagrange's theorem\" (#12137)\nSuggested here: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.E2.9C.94.20Lagrange's.20Theorem.20.28Group.20theory.29/near/272469211", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}]}, {"timestamp": 1645295015, "sha": "e88badbf", "message": "feat(analysis/inner_product_space/pi_L2): Orthonormal basis (#12060)\nAdded the structure orthonormal_basis and basic associated API\nRenamed the previous definition orthonormal_basis in analysis/inner_product_space/projection to std_orthonormal_basis", "changes": [{"oldPath": "src/analysis/inner_product_space/orientation.lean", "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["del", "theorem", "coe_isometry_euclidean_of_orthonormal", ["basis"]], ["del", "theorem", "coe_isometry_euclidean_of_orthonormal_symm", ["basis"]], ["add", "theorem", "coe_to_orthonormal_basis", ["basis"]], ["add", "theorem", "coe_to_orthonormal_basis_repr", ["basis"]], ["add", "theorem", "coe_to_orthonormal_basis_repr_symm", ["basis"]], ["del", "def", "isometry_euclidean_of_orthonormal", ["basis"]], ["add", "theorem", "to_basis_to_orthonormal_basis", ["basis"]], ["add", "def", "to_orthonormal_basis", ["basis"]], ["add", "theorem", "inner_single_left", ["euclidean_space"]], ["add", "theorem", "inner_single_right", ["euclidean_space"]], ["add", "def", "single", ["euclidean_space"]], ["add", "theorem", "single_apply", ["euclidean_space"]], ["add", "structure", "orthonormal_basis", []]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["del", "theorem", "coe_orthonormal_basis", []], ["add", "theorem", "coe_std_orthonormal_basis", []], ["del", "def", "fin_orthonormal_basis", []], ["del", "theorem", "fin_orthonormal_basis_orthonormal", []], ["add", "def", "fin_std_orthonormal_basis", []], ["add", "theorem", "fin_std_orthonormal_basis_orthonormal", []], ["del", "def", "orthonormal_basis", []], ["del", "theorem", "orthonormal_basis_orthonormal", []], ["add", "def", "std_orthonormal_basis", []], ["add", "theorem", "std_orthonormal_basis_orthonormal", []]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "of_equiv_fun_equiv_fun", ["basis"]]]}]}, {"timestamp": 1645257282, "sha": "518b5d25", "message": "chore(topology/bases): golf a proof (#12127)\nAlso add `function.injective_iff_pairwise_ne`.", "changes": [{"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "injective_iff_pairwise_ne", ["function"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["del", "theorem", "preconnected_space", ["dense_inducing"]]]}]}, {"timestamp": 1645220805, "sha": "213e2ed7", "message": "feat(algebra/group/pi): add pi.nsmul_apply (#12122)\nvia to_additive", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["mod", "theorem", "pow_apply", ["pi"]]]}]}, {"timestamp": 1645220803, "sha": "b3d09448", "message": "feat(tactic/swap_var): name juggling, a weaker wlog (#12006)", "changes": [{"oldPath": null, "newPath": "src/tactic/swap_var.lean", "changes": []}, {"oldPath": null, "newPath": "test/swap_var.lean", "changes": []}]}, {"timestamp": 1645213967, "sha": "5f46dd09", "message": "fix(category_theory/limits): improve inaccurate docstrings (#12130)", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}]}, {"timestamp": 1645213966, "sha": "7b6c4072", "message": "feat(number_theory/divisors): add `prod_div_divisors` and `sum_div_divisors` (#12087)\nAdds lemma `prod_div_divisors : ∏ d in n.divisors, f (n/d) = n.divisors.prod f` and `sum_div_divisors`.\nAlso proves `image_div_divisors_eq_divisors : image (λ (x : ℕ), n / x) n.divisors = n.divisors`\nand `div_eq_iff_eq_of_dvd_dvd : n / x = n / y ↔ x = y` (where `n ≠ 0` and `x ∣ n` and `y ∣ n`)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_eq_iff_eq_of_dvd_dvd", ["nat"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "image_div_divisors_eq_divisors", ["nat"]], ["add", "theorem", "prod_div_divisors", ["nat"]]]}]}, {"timestamp": 1645213964, "sha": "33179f7e", "message": "refactor(topology/metric_space/completion): change namespace (#12077)\nMove lemmas about metric on `uniform_space.completion` from `metric.completion` namespace to `uniform_space.completion`.", "changes": [{"oldPath": "src/analysis/normed/group/completion.lean", "newPath": "src/analysis/normed/group/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": [["del", "theorem", "coe_isometry", ["metric", "completion"]], ["add", "theorem", "coe_isometry", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1645213963, "sha": "18c3e3f0", "message": "feat(data/nat/fib): add that `fib` is sum of `nat.choose` along antidiagonal (#12063)", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["add", "theorem", "fib_succ_eq_sum_choose", ["nat"]]]}]}, {"timestamp": 1645212071, "sha": "ffc2bdfb", "message": "refactor(group_theory/abelianization): Define `commutator` in terms of `general_commutator` (#11949)\nIt seems reasonable to define `commutator` in terms of `general_commutator`.", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["add", "theorem", "commutator_def", []], ["add", "theorem", "commutator_eq_closure", []], ["add", "theorem", "commutator_eq_normal_closure", []]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["mod", "theorem", "lower_central_series_one", []]]}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["del", "theorem", "commutator_def'", []], ["del", "theorem", "general_commutator_eq_commutator", []]]}]}, {"timestamp": 1645207778, "sha": "018c7289", "message": "refactor(ring_theory/fractional_ideal): rename lemmas for dot notation, add coe_pow (#12080)\nThis replaces `fractional_ideal.fractional_mul` with `is_fractional.mul` and likewise for the other operations. The bundling was a distraction for the content of the lemmas anyway.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_pow", ["fractional_ideal"]], ["del", "theorem", "fractional_inf", ["fractional_ideal"]], ["del", "theorem", "fractional_map", ["fractional_ideal"]], ["del", "theorem", "fractional_mul", ["fractional_ideal"]], ["del", "theorem", "fractional_sup", ["fractional_ideal"]], ["add", "theorem", "div_of_nonzero", ["is_fractional"]], ["add", "theorem", "inf_right", ["is_fractional"]], ["add", "theorem", "map", ["is_fractional"]], ["add", "theorem", "mul", ["is_fractional"]], ["add", "theorem", "pow", ["is_fractional"]], ["add", "theorem", "sup", ["is_fractional"]]]}]}, {"timestamp": 1645207777, "sha": "bcf8a6ed", "message": "feat(ring_theory/fractional_ideal): add coe_ideal lemmas (#12073)", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_ideal_finprod", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_pow", ["fractional_ideal"]]]}]}, {"timestamp": 1645203497, "sha": "98643bca", "message": "feat(algebra/big_operators/intervals): summation by parts (#11814)\nAdd the \"summation by parts\" identity over intervals of natural numbers, as well as some helper lemmas.", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["add", "theorem", "prod_Ico_add'", ["finset"]], ["add", "theorem", "prod_Ico_div_bot", ["finset"]], ["add", "theorem", "prod_Ico_succ_div_top", ["finset"]], ["add", "theorem", "prod_range_succ_div_prod", ["finset"]], ["add", "theorem", "prod_range_succ_div_top", ["finset"]], ["del", "theorem", "sum_Ico_add", ["finset"]], ["add", "theorem", "sum_Ico_by_parts", ["finset"]], ["add", "theorem", "sum_range_by_parts", ["finset"]]]}]}, {"timestamp": 1645196865, "sha": "3ca16d0a", "message": "feat(data/equiv): define `ring_equiv_class` (#11977)\nThis PR applies the morphism class pattern to `ring_equiv`, producing a new `ring_equiv_class` extending `mul_equiv_class` and `add_equiv_class`. It also provides a `ring_equiv_class` instance for `alg_equiv`s.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "bijective", ["alg_equiv"]], ["mod", "theorem", "ext", ["alg_equiv"]], ["del", "theorem", "ext_iff", ["alg_equiv"]], ["del", "theorem", "injective", ["alg_equiv"]], ["del", "theorem", "map_add", ["alg_equiv"]], ["del", "theorem", "map_mul", ["alg_equiv"]], ["del", "theorem", "map_neg", ["alg_equiv"]], ["del", "theorem", "map_one", ["alg_equiv"]], ["del", "theorem", "map_pow", ["alg_equiv"]], ["del", "theorem", "map_sub", ["alg_equiv"]], ["del", "theorem", "map_zero", ["alg_equiv"]], ["del", "theorem", "surjective", ["alg_equiv"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "coe_coe", ["ring_hom"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["mod", "theorem", "ext", ["ring_equiv"]], ["del", "theorem", "ext_iff", ["ring_equiv"]], ["del", "theorem", "map_add", ["ring_equiv"]], ["del", "theorem", "map_eq_one_iff", ["ring_equiv"]], ["del", "theorem", "map_eq_zero_iff", ["ring_equiv"]], ["del", "theorem", "map_mul", ["ring_equiv"]], ["mod", "theorem", "map_ne_one_iff", ["ring_equiv"]], ["mod", "theorem", "map_ne_zero_iff", ["ring_equiv"]], ["del", "theorem", "map_neg", ["ring_equiv"]], ["del", "theorem", "map_one", ["ring_equiv"]], ["del", "theorem", "map_pow", ["ring_equiv"]], ["del", "theorem", "map_sub", ["ring_equiv"]], ["del", "theorem", "map_zero", ["ring_equiv"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1645195062, "sha": "223f1496", "message": "chore(algebra/star/self_adjoint): extract a lemma from `has_scalar` (#12121)", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "smul_mem", ["self_adjoint"]], ["add", "theorem", "smul_mem", ["skew_adjoint"]]]}]}, {"timestamp": 1645191681, "sha": "aed97e03", "message": "doc(analysis/normed/group/basic): add docstring explaining the \"insert\" name (#12100)", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}]}, {"timestamp": 1645189053, "sha": "3e6439cd", "message": "fix(category_theory/limits/shapes/images): make class a Prop (#12119)", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}]}, {"timestamp": 1645182358, "sha": "33b4e739", "message": "refactor(topology/algebra): reorder imports (#12089)\n* move `mul_opposite.topological_space` and `units.topological_space` to a new file;\n* import `mul_action` in `monoid`, not vice versa.\nWith this order of imports, we can reuse results about `has_continuous_smul` in lemmas about topological monoids.", "changes": [{"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/constructions.lean", "changes": [["add", "theorem", "continuous_op", ["mul_opposite"]], ["add", "theorem", "continuous_unop", ["mul_opposite"]], ["add", "def", "op_homeomorph", ["mul_opposite"]], ["add", "theorem", "continuous_coe", ["units"]], ["add", "theorem", "continuous_embed_product", ["units"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["del", "theorem", "continuous_op", ["mul_opposite"]], ["del", "theorem", "continuous_unop", ["mul_opposite"]], ["del", "theorem", "continuous_coe", ["units"]], ["del", "theorem", "continuous_embed_product", ["units"]]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}]}, {"timestamp": 1645169878, "sha": "77f264f1", "message": "feat(data/finset/basic): add lemma `filter_eq_empty_iff` (#12104)\nAdd `filter_eq_empty_iff : (s.filter p = ∅) ↔ ∀ x ∈ s, ¬ p x`\nWe already have the right-to-left direction of this in `filter_false_of_mem`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "filter_eq_empty_iff", ["finset"]]]}]}, {"timestamp": 1645163360, "sha": "bb1b56c7", "message": "feat(algebra/indicator_function): smul lemmas for functions (#12059)\nAnd a few basic lemmas in `set/basic`.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "indicator_const_smul", ["set"]], ["add", "theorem", "indicator_const_smul_apply", ["set"]], ["mod", "theorem", "indicator_smul", ["set"]], ["mod", "theorem", "indicator_smul_apply", ["set"]]]}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_range_inl", ["set"]], ["add", "theorem", "compl_range_inr", ["set"]]]}, {"oldPath": "src/logic/nonempty.lean", "newPath": "src/logic/nonempty.lean", "changes": [["add", "theorem", "nonempty", ["function", "surjective"]]]}]}, {"timestamp": 1645159936, "sha": "17b3357b", "message": "feat(topology/algebra): generalize `has_continuous_smul` arguments to `has_continuous_const_smul` (#11999)\nThis changes the majority of the downstream call-sites of the `const_smul` lemmas to only need the weaker typeclass.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": [["mod", "theorem", "affinity", ["strict_convex"]], ["mod", "theorem", "smul", ["strict_convex"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "prodₗᵢ", ["continuous_linear_map"]]]}, {"oldPath": "src/dynamics/minimal.lean", "newPath": "src/dynamics/minimal.lean", "changes": [["mod", "theorem", "exists_finite_cover_smul", ["is_compact"]], ["mod", "theorem", "is_minimal_iff_closed_smul_invariant", []]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/group/action.lean", "newPath": "src/measure_theory/group/action.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/complex.lean", "newPath": "src/measure_theory/measure/complex.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["mod", "theorem", "smul", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["mod", "theorem", "smul_left", ["measure_theory", "vector_measure", "mutually_singular"]], ["mod", "theorem", "smul_right", ["measure_theory", "vector_measure", "mutually_singular"]]]}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}, {"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/weak_dual.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/locally_constant.lean", "newPath": "src/topology/continuous_function/locally_constant.lean", "changes": [["mod", "def", "to_continuous_map_alg_hom", ["locally_constant"]], ["mod", "def", "to_continuous_map_linear_map", ["locally_constant"]]]}]}, {"timestamp": 1645149951, "sha": "b7572061", "message": "feat(linear_algebra/finite_dimensional): finrank_range_of_inj (#12067)\nThe dimensions of the domain and range of an injective linear map are\nequal.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "finrank_eq", ["linear_equiv"]], ["mod", "theorem", "finrank_map_eq", ["linear_equiv"]], ["add", "theorem", "finrank_range_of_inj", ["linear_map"]]]}]}, {"timestamp": 1645145574, "sha": "59a183a1", "message": "feat(data/finset/locally_finite): add Ico_subset_Ico_union_Ico (#11710)\nThis lemma extends the result for `set`s to `finset`s.", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Ico_subset_Ico_union_Ico", ["finset"]]]}]}, {"timestamp": 1645138764, "sha": "e93996cf", "message": "feat(topology/instances/discrete): instances for the discrete topology (#11349)\nProve `first_countable_topology`, `second_countable_topology` and `order_topology` for the discrete topology under appropriate conditions like `encodable`, or being a linear order with `pred` and `succ`. These instances give in particular `second_countable_topology ℕ` and `order_topology ℕ`", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "is_countably_generated_pure", ["filter"]]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "Ici_eq_Ioi_pred'", ["pred_order"]], ["add", "theorem", "Ici_eq_Ioi_pred", ["pred_order"]], ["add", "theorem", "Iio_eq_Iic_pred'", ["pred_order"]], ["add", "theorem", "Iio_eq_Iic_pred", ["pred_order"]], ["add", "theorem", "le_pred_iff_of_not_is_min", ["pred_order"]], ["add", "theorem", "pred_lt_iff_of_not_is_min", ["pred_order"]], ["add", "theorem", "pred_lt_of_not_is_min", ["pred_order"]], ["add", "theorem", "Iic_eq_Iio_succ'", ["succ_order"]], ["add", "theorem", "Iic_eq_Iio_succ", ["succ_order"]], ["add", "theorem", "Ioi_eq_Ici_succ'", ["succ_order"]], ["add", "theorem", "Ioi_eq_Ici_succ", ["succ_order"]], ["add", "theorem", "lt_succ_iff_of_not_is_max", ["succ_order"]], ["add", "theorem", "lt_succ_of_not_is_max", ["succ_order"]], ["add", "theorem", "succ_le_iff_of_not_is_max", ["succ_order"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/instances/discrete.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "is_open_generate_from_of_mem", ["topological_space"]]]}]}, {"timestamp": 1645134625, "sha": "6089f08a", "message": "feat(data/nat/totient): add Euler's product formula for totient function (#11332)\nProving four versions of Euler's product formula for the totient function `φ`:\n* `totient_eq_prod_factorization : φ n = n.factorization.prod (λ p k, p ^ (k - 1) * (p - 1))`\n* `totient_mul_prod_factors : φ n * ∏ p in n.factors.to_finset, p = n * ∏ p in n.factors.to_finset, (p - 1)`\n* `totient_eq_div_factors_mul : φ n = n / (∏ p in n.factors.to_finset, p) * (∏ p in n.factors.to_finset, (p - 1))`\n* `totient_eq_mul_prod_factors : (φ n : ℚ) = n * ∏ p in n.factors.to_finset, (1 - p⁻¹)`", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "prod_factorization_eq_prod_factors", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "pos_of_mem_factors", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_eq_div_factors_mul", ["nat"]], ["add", "theorem", "totient_eq_mul_prod_factors", ["nat"]], ["add", "theorem", "totient_eq_prod_factorization", ["nat"]], ["add", "theorem", "totient_mul_prod_factors", ["nat"]]]}]}, {"timestamp": 1645132006, "sha": "19534b29", "message": "feat(analysis/inner_product_space/basic) : `inner_map_self_eq_zero` (#12065)\nThe main result here is: If ⟪T x, x⟫_C = 0 for all x, then T = 0.\nThe proof uses a polarization identity. Note that this is false\nwith R in place of C. I am confident that my use of ring_nf is\nnot optimal, but I hope to learn from the cleanup process!", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_map_polarization", []], ["add", "theorem", "inner_map_self_eq_zero", []]]}]}, {"timestamp": 1645135206, "sha": "8b6901b6", "message": "Revert \"feat(category_theory/limits): is_bilimit\"\nThis reverts commit 8edfa75d79ad70c88dbae01ab6166dd8b1fd2ba0.", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["del", "structure", "is_bilimit", ["category_theory", "limits", "bicone"]], ["del", "def", "of_colimit_cocone", ["category_theory", "limits", "bicone"]], ["del", "def", "of_limit_cone", ["category_theory", "limits", "bicone"]], ["del", "def", "to_binary_bicone_is_bilimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_colimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_limit", ["category_theory", "limits", "bicone"]], ["del", "theorem", "ι_of_is_limit", ["category_theory", "limits", "bicone"]], ["del", "theorem", "π_of_is_colimit", ["category_theory", "limits", "bicone"]], ["mod", "theorem", "bicone_ι_π_ne", ["category_theory", "limits"]], ["del", "structure", "is_bilimit", ["category_theory", "limits", "binary_bicone"]], ["del", "def", "to_bicone", ["category_theory", "limits", "binary_bicone"]], ["del", "def", "to_bicone_is_bilimit", ["category_theory", "limits", "binary_bicone"]], ["del", "def", "to_bicone_is_colimit", ["category_theory", "limits", "binary_bicone"]], ["del", "def", "to_bicone_is_limit", ["category_theory", "limits", "binary_bicone"]], ["del", "def", "is_bilimit", ["category_theory", "limits", "binary_biproduct"]], ["del", "def", "is_bilimit", ["category_theory", "limits", "biproduct"]]]}]}, {"timestamp": 1645135002, "sha": "8edfa75d", "message": "feat(category_theory/limits): is_bilimit", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "structure", "is_bilimit", ["category_theory", "limits", "bicone"]], ["add", "def", "of_colimit_cocone", ["category_theory", "limits", "bicone"]], ["add", "def", "of_limit_cone", ["category_theory", "limits", "bicone"]], ["add", "def", "to_binary_bicone_is_bilimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_colimit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_binary_bicone_is_limit", ["category_theory", "limits", "bicone"]], ["add", "theorem", "ι_of_is_limit", ["category_theory", "limits", "bicone"]], ["add", "theorem", "π_of_is_colimit", ["category_theory", "limits", "bicone"]], ["mod", "theorem", "bicone_ι_π_ne", ["category_theory", "limits"]], ["add", "structure", "is_bilimit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone_is_bilimit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone_is_colimit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_bicone_is_limit", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "is_bilimit", ["category_theory", "limits", "binary_biproduct"]], ["add", "def", "is_bilimit", ["category_theory", "limits", "biproduct"]]]}]}, {"timestamp": 1645126515, "sha": "aacc36c5", "message": "feat(group_theory/commensurable): Definition and lemmas about commensurability. (#9545)\nThis defines commensurability for subgroups, proves this defines a transitive relation and then defines the commensurator subgroup. In doing so it also needs some lemmas about indices of subgroups and the definition of the conjugate of a subgroup by an element of the parent group.", "changes": [{"oldPath": null, "newPath": "src/group_theory/commensurable.lean", "changes": [["add", "theorem", "comm", ["commensurable"]], ["add", "theorem", "commensurable_conj", ["commensurable"]], ["add", "theorem", "commensurable_inv", ["commensurable"]], ["add", "def", "commensurator'", ["commensurable"]], ["add", "theorem", "commensurator'_mem_iff", ["commensurable"]], ["add", "def", "commensurator", ["commensurable"]], ["add", "theorem", "commensurator_mem_iff", ["commensurable"]], ["add", "theorem", "eq", ["commensurable"]], ["add", "theorem", "equivalence", ["commensurable"]], ["add", "def", "quot_conj_equiv", ["commensurable"]], ["add", "theorem", "symm", ["commensurable"]], ["add", "theorem", "trans", ["commensurable"]], ["add", "def", "commensurable", []]]}]}, {"timestamp": 1645123575, "sha": "8575f592", "message": "feat(category_theory/limits): preservation of zero morphisms (#12068)", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/zero.lean", "changes": [["add", "def", "map_zero_object", ["category_theory", "functor"]], ["add", "theorem", "preserves_zero_morphisms_of_map_zero_object", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "initial_iso_is_initial", ["category_theory", "limits"]], ["add", "def", "terminal_iso_is_terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["del", "theorem", "equivalence_preserves_zero_morphisms", ["category_theory", "limits"]], ["add", "def", "zero_iso_initial", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_initial_hom", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_initial_inv", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_iso_is_initial", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_is_initial_hom", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_is_initial_inv", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_iso_is_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_is_terminal_hom", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_is_terminal_inv", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_iso_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_terminal_hom", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_iso_terminal_inv", ["category_theory", "limits", "has_zero_object"]], ["del", "theorem", "is_equivalence_preserves_zero_morphisms", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["del", "theorem", "map_zero", ["category_theory", "functor"]], ["del", "def", "map_zero_object", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": []}]}, {"timestamp": 1645117352, "sha": "c9e8c647", "message": "chore(*): update to lean 3.39.2c (#12102)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1645117351, "sha": "dcb28262", "message": "feat(order/filter/basic): add eventually_eq.(smul/const_smul/sup/inf) (#12101)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "const_smul", ["filter", "eventually_eq"]], ["add", "theorem", "inf", ["filter", "eventually_eq"]], ["add", "theorem", "smul", ["filter", "eventually_eq"]], ["add", "theorem", "sup", ["filter", "eventually_eq"]]]}]}, {"timestamp": 1645112084, "sha": "307711e2", "message": "feat(group_theory/general_commutator): subgroup.pi commutes with the general_commutator (#11825)", "changes": [{"oldPath": "src/group_theory/general_commutator.lean", "newPath": "src/group_theory/general_commutator.lean", "changes": [["add", "theorem", "general_commutator_pi_pi_le", []], ["add", "theorem", "general_commutator_pi_pi_of_fintype", []]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "le_pi_iff", ["subgroup"]], ["add", "theorem", "pi_eq_bot_iff", ["subgroup"]], ["add", "theorem", "pi_le_iff", ["subgroup"]], ["add", "theorem", "pi_mem_of_single_mem", ["subgroup"]], ["add", "theorem", "pi_mem_of_single_mem_aux", ["subgroup"]], ["add", "theorem", "single_mem_pi", ["subgroup"]]]}]}, {"timestamp": 1645103449, "sha": "b54f44f0", "message": "feat(data/matrix/notation): expansions of matrix multiplication for 2x2 and 3x3 (#12088)\nA clever way to generalize this would be to make a recursivedefinition of `mul` and `one` that's defeq to the desired `![...]` result and prove that's equal to the usual definition, but that doesn't help with actually writing the lemma statement, which is the tedious bit.", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "mul_fin_three", ["matrix"]], ["add", "theorem", "mul_fin_two", ["matrix"]], ["add", "theorem", "one_fin_three", ["matrix"]], ["add", "theorem", "one_fin_two", ["matrix"]]]}]}, {"timestamp": 1645100169, "sha": "eb8d58d6", "message": "fix(topology/algebra/basic): remove duplicate lemma (#12097)\nThis lemma duplicates the lemma of the same name in the root namespace, and should not be in this namespace in the first place.\nThe other half of #12072, now that the dependent PR is merged.", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["del", "theorem", "zsmul", ["continuous_linear_map", "continuous"]], ["del", "theorem", "continuous_zsmul", ["continuous_linear_map"]]]}]}, {"timestamp": 1645100167, "sha": "4afd667f", "message": "feat(measure_theory/integral): add `integral_sum_measure` (#12090)\nAlso add supporting lemmas about finite and infinite sums of measures.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["del", "theorem", "integrable_zero_measure", []], ["add", "theorem", "integrable_finset_sum_measure", ["measure_theory"]], ["add", "theorem", "integrable_zero_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "pairwise_ae_disjoint_of_ac", ["measure_theory", "is_fundamental_domain"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "has_sum_integral_measure", ["measure_theory"]], ["add", "theorem", "integral_finset_sum_measure", ["measure_theory"]], ["add", "theorem", "integral_sum_measure", ["measure_theory"]], ["add", "theorem", "nndist_integral_add_measure_le_lintegral", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "has_sum_lintegral_measure", ["measure_theory"]], ["add", "theorem", "lintegral_finset_sum_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "has_sum_integral_Union_ae", ["measure_theory"]], ["del", "theorem", "has_sum_integral_Union_of_null_inter", ["measure_theory"]], ["add", "theorem", "integral_Union_ae", ["measure_theory"]], ["del", "theorem", "integral_Union_of_null_inter", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "def", "coe_add_hom", ["measure_theory", "measure"]], ["add", "theorem", "coe_finset_sum", ["measure_theory", "measure"]], ["add", "theorem", "finset_sum_apply", ["measure_theory", "measure"]], ["add", "theorem", "sum_add_sum_compl", ["measure_theory", "measure"]], ["add", "theorem", "sum_coe_finset", ["measure_theory", "measure"]], ["add", "theorem", "sum_fintype", ["measure_theory", "measure"]]]}]}, {"timestamp": 1645096826, "sha": "20cf3ca0", "message": "feat(ring_theory/discriminant): add discr_eq_discr_of_to_matrix_coeff_is_integral (#11994)\nWe add `discr_eq_discr_of_to_matrix_coeff_is_integral`: if `b` and `b'` are `ℚ`-basis of a number field `K` such that\n`∀ i j, is_integral ℤ (b.to_matrix b' i j)` and `∀ i j, is_integral ℤ (b'.to_matrix b i j` then\n`discr ℚ b = discr ℚ b'`.", "changes": [{"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "to_matrix_map_vec_mul", ["basis"]]]}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": [["add", "theorem", "discr_eq_discr_of_to_matrix_coeff_is_integral", ["algebra"]], ["add", "theorem", "discr_reindex", ["algebra"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "trace_matrix_reindex", ["algebra"]]]}]}, {"timestamp": 1645094637, "sha": "614758eb", "message": "feat(order/category/DistribLattice): The category of distributive lattices (#12092)\nDefine `DistribLattice`, the category of distributive lattices.", "changes": [{"oldPath": null, "newPath": "src/order/category/DistribLattice.lean", "changes": [["add", "def", "dual", ["DistribLattice"]], ["add", "def", "dual_equiv", ["DistribLattice"]], ["add", "def", "mk", ["DistribLattice", "iso"]], ["add", "def", "of", ["DistribLattice"]], ["add", "def", "DistribLattice", []], ["add", "theorem", "DistribLattice_dual_comp_forget_to_Lattice", []]]}, {"oldPath": "src/order/category/Lattice.lean", "newPath": "src/order/category/Lattice.lean", "changes": []}]}, {"timestamp": 1645092032, "sha": "58a37203", "message": "feat(analysis/inner_product_space/pi_L2): `complex.isometry_of_orthonormal` (#11970)\nAdd a definition for the isometry between `ℂ` and a two-dimensional\nreal inner product space given by a basis, and an associated `simp`\nlemma for how this relates to `basis.map`.\nThis definition is just the composition of two existing definitions,\n`complex.isometry_euclidean` and (the inverse of)\n`basis.isometry_euclidean_of_orthonormal`. However, it's still useful\nto have it as a single definition when using it to define and prove\nbasic properties of oriented angles (in an oriented two-dimensional\nreal inner product space), to keep definitions and terms in proofs\nsimpler and to avoid tactics such as `simp` or `rw` rearranging things\ninside this definition when not wanted (almost everything just needs\nto use some isometry between these two spaces without caring about the\ndetails of how it's defined, so it seems best to use a single `def`\nfor this isometry, and on the rare occasions where the details of how\nit's defined matter, prove specific lemmas about the required\nproperties).", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "def", "isometry_of_orthonormal", ["complex"]], ["add", "theorem", "isometry_of_orthonormal_apply", ["complex"]], ["add", "theorem", "isometry_of_orthonormal_symm_apply", ["complex"]], ["add", "theorem", "map_isometry_of_orthonormal", ["complex"]]]}]}, {"timestamp": 1645083838, "sha": "a355d88c", "message": "feat(topology/metric_space/gluing): metric space structure on sigma types (#11965)\nWe define a (noncanonical) metric space structure on sigma types (aka arbitrary disjoint unions), as follows. Each piece is isometrically embedded in the union, while for `x` and `y` in different pieces their distance is `dist x x0 + 1 + dist y0 y`, where `x0` and `y0` are basepoints in the respective parts. This is *not* registered as an instance.\nThis definition was already there for sum types (aka disjoint union of two pieces). We also fix this existing definition to avoid `inhabited` assumptions.", "changes": [{"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": [["add", "theorem", "isometry_inl", ["metric"]], ["add", "theorem", "isometry_inr", ["metric"]], ["del", "theorem", "isometry_on_inl", ["metric"]], ["del", "theorem", "isometry_on_inr", ["metric"]], ["add", "theorem", "dist_ne", ["metric", "sigma"]], ["add", "theorem", "dist_same", ["metric", "sigma"]], ["add", "theorem", "fst_eq_of_dist_lt_one", ["metric", "sigma"]], ["add", "def", "has_dist", ["metric", "sigma"]], ["add", "theorem", "isometry_mk", ["metric", "sigma"]], ["add", "theorem", "one_le_dist_of_ne", ["metric", "sigma"]], ["mod", "theorem", "dist_eq_glue_dist", ["metric", "sum"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "is_complete_Union_separated", []]]}]}, {"timestamp": 1645077954, "sha": "09960ea1", "message": "feat(algebra/group_power/basic): `two_zsmul` (#12094)\nMark `zpow_two` with `@[to_additive two_zsmul]`. I see no apparent\nreason for this result not to use `to_additive`, and I found I had a\nuse for the additive version.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}]}, {"timestamp": 1645075947, "sha": "1831d852", "message": "feat(category_theory/limits): Preserves epi of preserves pushout. (#12084)", "changes": [{"oldPath": "src/category_theory/limits/constructions/epi_mono.lean", "newPath": "src/category_theory/limits/constructions/epi_mono.lean", "changes": [["add", "theorem", "reflects_epi", ["category_theory"]]]}]}, {"timestamp": 1645058081, "sha": "84f12be1", "message": "chore(algebra/star/self_adjoint): improve definitional unfolding of pow and div (#12085)", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "coe_div", ["self_adjoint"]], ["mod", "theorem", "coe_inv", ["self_adjoint"]], ["mod", "theorem", "coe_mul", ["self_adjoint"]], ["mod", "theorem", "coe_one", ["self_adjoint"]], ["add", "theorem", "coe_pow", ["self_adjoint"]], ["add", "theorem", "coe_zpow", ["self_adjoint"]]]}]}, {"timestamp": 1645058080, "sha": "834fd30b", "message": "feat(topology/continuous_function/algebra): generalize algebra instances (#12055)\nThis adds:\n* some missing instances in the algebra hierarchy (`comm_semigroup`, `mul_one_class`, `mul_zero_class`, `monoid_with_zero`, `comm_monoid_with_zero`, `comm_semiring`).\n* finer-grained scalar action instances, notably none of which require `topological_space R` any more, as they only need `has_continuous_const_smul R M` instead of `has_continuous_smul R M`.\n* continuity lemmas about `zpow` on groups and `zsmul` on additive groups (copied directly from the lemmas about `pow` on monoids), which are used to avoid diamonds in the int-action. In order to make room for these, the lemmas about `zpow` on groups with zero have been renamed to `zpow₀`, which is consistent with how the similar clash with `inv` is solved.\n* a few lemmas about `mk_of_compact` since an existing proof was broken by `refl` closing the goal earlier than before.", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "zpow", ["continuous"]], ["add", "theorem", "zpow", ["continuous_at"]], ["add", "theorem", "continuous_at_zpow", []], ["add", "theorem", "zpow", ["continuous_on"]], ["add", "theorem", "continuous_on_zpow", []], ["add", "theorem", "zpow", ["continuous_within_at"]], ["add", "theorem", "continuous_zpow", []], ["add", "theorem", "zpow", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["del", "theorem", "zpow", ["continuous"]], ["add", "theorem", "zpow₀", ["continuous"]], ["del", "theorem", "zpow", ["continuous_at"]], ["add", "theorem", "zpow₀", ["continuous_at"]], ["del", "theorem", "continuous_at_zpow", []], ["add", "theorem", "continuous_at_zpow₀", []], ["del", "theorem", "zpow", ["continuous_on"]], ["add", "theorem", "zpow₀", ["continuous_on"]], ["del", "theorem", "continuous_on_zpow", []], ["add", "theorem", "continuous_on_zpow₀", []], ["del", "theorem", "zpow", ["continuous_within_at"]], ["add", "theorem", "zpow₀", ["continuous_within_at"]], ["del", "theorem", "zpow", ["filter", "tendsto"]], ["add", "theorem", "zpow₀", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["mod", "theorem", "coe_div", ["continuous_map"]], ["mod", "theorem", "coe_inv", ["continuous_map"]], ["mod", "theorem", "coe_one", ["continuous_map"]], ["mod", "theorem", "coe_pow", ["continuous_map"]], ["mod", "theorem", "coe_smul", ["continuous_map"]], ["add", "theorem", "coe_zpow", ["continuous_map"]], ["mod", "theorem", "div_comp", ["continuous_map"]], ["mod", "theorem", "inv_comp", ["continuous_map"]], ["mod", "theorem", "mul_comp", ["continuous_map"]], ["mod", "theorem", "one_comp", ["continuous_map"]], ["mod", "theorem", "pow_comp", ["continuous_map"]], ["mod", "theorem", "smul_apply", ["continuous_map"]], ["mod", "theorem", "smul_comp", ["continuous_map"]], ["add", "theorem", "zpow_comp", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["del", "theorem", "coe_inj", ["continuous_map"]], ["add", "theorem", "coe_injective", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "mk_of_compact_add", ["bounded_continuous_function"]], ["add", "theorem", "mk_of_compact_neg", ["bounded_continuous_function"]], ["add", "theorem", "mk_of_compact_one", ["bounded_continuous_function"]], ["add", "theorem", "mk_of_compact_sub", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}]}, {"timestamp": 1645058079, "sha": "27df8a0d", "message": "feat(topology/instances/rat): some facts about topology on `rat` (#11832)\n* `ℚ` is a totally disconnected space;\n* `cocompact ℚ` is not a countably generated filter;\n* hence, `alexandroff ℚ` is not a first countable topological space.", "changes": [{"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "interior_compact_eq_empty", ["dense_inducing"]]]}, {"oldPath": null, "newPath": "src/topology/instances/rat.lean", "changes": [["add", "theorem", "dense_compl_compact", ["rat"]], ["add", "theorem", "interior_compact_eq_empty", ["rat"]], ["add", "theorem", "not_countably_generated_cocompact", ["rat"]], ["add", "theorem", "not_countably_generated_nhds_infty_alexandroff", ["rat"]], ["add", "theorem", "not_first_countable_topology_alexandroff", ["rat"]], ["add", "theorem", "not_second_countable_topology_alexandroff", ["rat"]]]}]}, {"timestamp": 1645051463, "sha": "7dae87fe", "message": "feat(topology/metric_space/basic): ext lemmas for metric spaces (#12070)\nAlso add a few results in `metric_space.basic`:\n* A decreasing intersection of closed sets with diameter tending to `0` is nonempty in a complete space\n* new constructions of metric spaces by pulling back structures (and adjusting definitional equalities)\n* fixing `metric_space empty` and `metric_space punit` to make sure the uniform structure is definitionally the right one.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eq_top_of_ne_bot", ["filter"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "cauchy_seq_of_le_tendsto_0'", []], ["add", "theorem", "exists_dist_lt", ["dense"]], ["add", "theorem", "exists_dist_lt", ["dense_range"]], ["add", "def", "comap_metric_space", ["embedding"]], ["add", "theorem", "nonempty_Inter_of_nonempty_bInter", ["is_complete"]], ["add", "theorem", "nonempty_Inter_of_nonempty_bInter", ["metric"]], ["add", "theorem", "ext", ["metric_space"]], ["add", "def", "replace_topology", ["metric_space"]], ["add", "theorem", "replace_topology_eq", ["metric_space"]], ["add", "theorem", "replace_uniformity_eq", ["metric_space"]], ["add", "theorem", "ext", ["pseudo_metric_space"]], ["add", "theorem", "replace_uniformity_eq", ["pseudo_metric_space"]], ["mod", "def", "comap_metric_space", ["uniform_embedding"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1645051462, "sha": "5db1ae4c", "message": "feat(analysis/specific_limits): useful specializations of some lemmas (#12069)", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "pow_le_pow_iff", []]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "le_mul_norm_sub", ["antilipschitz_with"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "summable_geometric_two_encode", []], ["add", "theorem", "tendsto_pow_const_mul_const_pow_of_lt_one", []], ["add", "theorem", "tendsto_self_mul_const_pow_of_abs_lt_one", []], ["add", "theorem", "tendsto_self_mul_const_pow_of_lt_one", []]]}]}, {"timestamp": 1645051461, "sha": "1bf41817", "message": "feat(data/equiv/{basic,mul_equiv)}: add Pi_subsingleton (#12040)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "Pi_subsingleton", ["equiv"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "Pi_subsingleton", ["mul_equiv"]]]}]}, {"timestamp": 1645051460, "sha": "b2aaece0", "message": "feat(field_theory/is_alg_closed): alg closed and char p implies perfect (#12037)", "changes": [{"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}]}, {"timestamp": 1645045763, "sha": "bd67e852", "message": "feat(algebra/char_p/basic): add ring_char_of_prime_eq_zero (#12024)\nThe characteristic of a ring is `p` if `p` is a prime and `p = 0` in the ring.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "ring_char_of_prime_eq_zero", ["char_p"]]]}]}, {"timestamp": 1645045762, "sha": "0fe91d0d", "message": "feat(data/part): Instance lemmas (#12001)\nLemmas about `part` instances, proved by `tidy`", "changes": [{"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": [["add", "theorem", "append_mem_append", ["part"]], ["add", "theorem", "div_mem_div", ["part"]], ["add", "theorem", "inter_mem_inter", ["part"]], ["add", "theorem", "inv_mem_inv", ["part"]], ["add", "theorem", "inv_some", ["part"]], ["add", "theorem", "mod_mem_mod", ["part"]], ["add", "theorem", "mul_mem_mul", ["part"]], ["add", "theorem", "one_mem_one", ["part"]], ["add", "theorem", "sdiff_mem_sdiff", ["part"]], ["add", "theorem", "some_append_some", ["part"]], ["add", "theorem", "some_div_some", ["part"]], ["add", "theorem", "some_inter_some", ["part"]], ["add", "theorem", "some_mod_some", ["part"]], ["add", "theorem", "some_mul_some", ["part"]], ["add", "theorem", "some_sdiff_some", ["part"]], ["add", "theorem", "some_union_some", ["part"]], ["add", "theorem", "union_mem_union", ["part"]]]}]}, {"timestamp": 1645038969, "sha": "b395a671", "message": "chore(data/finsupp/pointwise): golf using injective lemmas (#12086)", "changes": [{"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": [["add", "theorem", "coe_mul", ["finsupp"]], ["del", "theorem", "coe_pointwise_module", ["finsupp"]], ["add", "theorem", "coe_pointwise_smul", ["finsupp"]]]}]}, {"timestamp": 1645038968, "sha": "0ab9b5f3", "message": "chore(topology/continuous_function/bounded): golf algebra instances (#12082)\nUsing the `function.injective.*` lemmas saves a lot of proofs.\nThis also adds a few missing lemmas about `one` that were already present for `zero`.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "coe_one", ["bounded_continuous_function"]], ["del", "theorem", "coe_zero", ["bounded_continuous_function"]], ["add", "theorem", "forall_coe_one_iff_one", ["bounded_continuous_function"]], ["del", "theorem", "forall_coe_zero_iff_zero", ["bounded_continuous_function"]], ["add", "theorem", "one_comp_continuous", ["bounded_continuous_function"]], ["del", "theorem", "zero_comp_continuous", ["bounded_continuous_function"]]]}]}, {"timestamp": 1645038966, "sha": "d86ce027", "message": "chore(ring_theory/fractional_ideal): golf (#12076)", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_inf", ["fractional_ideal"]], ["add", "theorem", "coe_sup", ["fractional_ideal"]]]}]}, {"timestamp": 1645038964, "sha": "15c6eee7", "message": "feat(logic/basic): Better congruence lemmas for `or`, `or_or_or_comm` (#12004)\nProve `or_congr_left` and `or_congr_right` and rename the existing `or_congr_left`/`or_congr_right` to `or_congr_left'`/`or_congr_right'` to match the `and` lemmas. Also prove `or_rotate`, `or.rotate`, `or_or_or_comm` based on `and` again.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "imp", ["Exists₂"]], ["mod", "theorem", "rotate", ["and"]], ["add", "theorem", "and_rotate", []], ["add", "theorem", "forall₂_imp", []], ["add", "theorem", "rotate", ["or"]], ["add", "theorem", "or_congr_left'", []], ["mod", "theorem", "or_congr_left", []], ["add", "theorem", "or_congr_right'", []], ["mod", "theorem", "or_congr_right", []], ["add", "theorem", "or_or_or_comm", []], ["add", "theorem", "or_rotate", []]]}]}, {"timestamp": 1645038963, "sha": "5e3d465c", "message": "feat(category_theory/category/PartialFun): The category of types with partial functions (#11866)\nDefine `PartialFun`, the category of types with partial functions, and show its equivalence with `Pointed`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/category/PartialFun.lean", "changes": [["add", "def", "mk", ["PartialFun", "iso"]], ["add", "def", "of", ["PartialFun"]], ["add", "def", "PartialFun", []], ["add", "def", "Pointed_to_PartialFun", []], ["add", "def", "Type_to_PartialFun", []]]}, {"oldPath": "src/category_theory/category/Pointed.lean", "newPath": "src/category_theory/category/Pointed.lean", "changes": [["add", "def", "mk", ["Pointed", "iso"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "theorem", "exists_eq_subtype_mk_iff", []], ["mod", "theorem", "exists_subtype_mk_eq_iff", []], ["add", "theorem", "coe_inj", ["subtype"]], ["mod", "theorem", "coe_injective", ["subtype"]], ["add", "theorem", "val_inj", ["subtype"]], ["mod", "theorem", "val_injective", ["subtype"]]]}]}, {"timestamp": 1645031789, "sha": "3c78d00a", "message": "docs(group_theory/semidirect_product): fix typo in module docs (#12083)", "changes": [{"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}]}, {"timestamp": 1645031787, "sha": "3107a831", "message": "feat(algebra/char_p/basic): Generalize `frobenius_inj`. (#12079)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "frobenius_inj", []]]}]}, {"timestamp": 1645031786, "sha": "0eb160a5", "message": "feat(data/finset/basic): When `insert` is injective and other lemmas (#11982)\n* `insert`/`cons` lemmas for `finset` and `multiset`\n* `has_ssubset` instance for `multiset`\n* `finset.sdiff_nonempty`\n* `disjoint.of_image_finset`, `finset.disjoint_image`, `finset.disjoint_map`\n* `finset.exists_eq_insert_iff`\n* `mem` lemmas\n* change `pred` to `- 1` into the statement of `finset.card_erase_of_mem`", "changes": [{"oldPath": "src/combinatorics/derangements/finite.lean", "newPath": "src/combinatorics/derangements/finite.lean", "changes": []}, {"oldPath": "src/combinatorics/set_family/shadow.lean", "newPath": "src/combinatorics/set_family/shadow.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "forall_ne_finset", ["disjoint"]], ["add", "theorem", "of_image_finset", ["disjoint"]], ["add", "theorem", "cons_subset", ["finset"]], ["add", "theorem", "disjoint_image", ["finset"]], ["add", "theorem", "disjoint_map", ["finset"]], ["add", "theorem", "eq_of_not_mem_of_mem_insert", ["finset"]], ["add", "theorem", "insert_inj", ["finset"]], ["add", "theorem", "insert_inj_on", ["finset"]], ["add", "theorem", "sdiff_nonempty", ["finset"]], ["add", "theorem", "ssubset_cons", ["finset"]], ["add", "theorem", "ssubset_iff_exists_cons_subset", ["finset"]], ["add", "theorem", "subset_cons", ["finset"]]]}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["mod", "theorem", "card_eq_succ", ["finset"]], ["mod", "theorem", "card_erase_eq_ite", ["finset"]], ["mod", "theorem", "card_erase_of_mem", ["finset"]], ["add", "theorem", "exists_eq_insert_iff", ["finset"]]]}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "cons_subset_cons", ["multiset"]], ["add", "theorem", "ssubset_cons", ["multiset"]], ["add", "theorem", "subset_cons", ["multiset"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_of_not_mem_of_mem_insert", ["set"]], ["add", "theorem", "insert_inj", ["set"]], ["mod", "theorem", "mem_of_mem_insert_of_ne", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "insert_inj_on", ["function"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ne_of_not_mem'", ["has_mem", "mem"]], ["add", "theorem", "ne_of_not_mem", ["has_mem", "mem"]], ["add", "theorem", "ne_of_mem_of_not_mem'", []], ["mod", "theorem", "ne_of_mem_of_not_mem", []]]}]}, {"timestamp": 1645031785, "sha": "6bcb12c1", "message": "feat(order/antisymmetrization): Turning a preorder into a partial order (#11728)\nDefine `antisymmetrization`, the quotient of a preorder by the \"less than both ways\" relation. This effectively turns a preorder into a partial order, and this operation is functorial as shown by the new `Preorder_to_PartialOrder`.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/antisymmetrization.lean", "changes": [["add", "theorem", "image", ["antisymm_rel"]], ["add", "def", "setoid", ["antisymm_rel"]], ["add", "theorem", "symm", ["antisymm_rel"]], ["add", "theorem", "trans", ["antisymm_rel"]], ["add", "def", "antisymm_rel", []], ["add", "theorem", "antisymm_rel_iff_eq", []], ["add", "theorem", "antisymm_rel_refl", []], ["add", "theorem", "antisymm_rel_swap", []], ["add", "def", "antisymmetrization", []], ["add", "theorem", "of_antisymmetrization_le_of_antisymmetrization_iff", []], ["add", "theorem", "of_antisymmetrization_lt_of_antisymmetrization_iff", []], ["add", "theorem", "antisymmetrization_apply", ["order_hom"]], ["add", "theorem", "antisymmetrization_apply_mk", ["order_hom"]], ["add", "theorem", "coe_antisymmetrization", ["order_hom"]], ["add", "def", "to_antisymmetrization", ["order_hom"]], ["add", "def", "dual_antisymmetrization", ["order_iso"]], ["add", "theorem", "dual_antisymmetrization_apply", ["order_iso"]], ["add", "theorem", "dual_antisymmetrization_symm_apply", ["order_iso"]], ["add", "def", "to_antisymmetrization", []], ["add", "theorem", "to_antisymmetrization_le_to_antisymmetrization_iff", []], ["add", "theorem", "to_antisymmetrization_lt_to_antisymmetrization_iff", []], ["add", "theorem", "to_antisymmetrization_mono", []], ["add", "theorem", "to_antisymmetrization_of_antisymmetrization", []]]}, {"oldPath": "src/order/category/PartialOrder.lean", "newPath": "src/order/category/PartialOrder.lean", "changes": [["add", "def", "Preorder_to_PartialOrder", []], ["add", "def", "Preorder_to_PartialOrder_comp_to_dual_iso_to_dual_comp_Preorder_to_PartialOrder", []], ["add", "def", "Preorder_to_PartialOrder_forget_adjunction", []]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["mod", "theorem", "antisymm'", []], ["add", "theorem", "antisymm_iff", []]]}]}, {"timestamp": 1645027908, "sha": "8a286af6", "message": "chore(topology/algebra/mul_action): rename type variables (#12020)", "changes": [{"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["mod", "theorem", "smul", ["filter", "tendsto"]], ["mod", "theorem", "smul_const", ["filter", "tendsto"]], ["mod", "theorem", "has_continuous_smul_Inf", []], ["mod", "theorem", "has_continuous_smul_inf", []], ["mod", "theorem", "has_continuous_smul_infi", []]]}]}, {"timestamp": 1645021434, "sha": "e8156757", "message": "chore(topology/algebra/module/basic): remove two duplicate lemmas (#12072)\n`continuous_linear_map.continuous_nsmul` is nothing to do with `continuous_linear_map`s, and is the same as `continuous_nsmul`, but the latter doesn't require commutativity. There is no reason to keep the former.\nThis lemma was added in #7084, but probably got missed due to how large that PR had to be.\nWe can't remove `continuous_linear_map.continuous_zsmul` until #12055 is merged, as there is currently no `continuous_zsmul` in the root namespace.", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["del", "theorem", "nsmul", ["continuous_linear_map", "continuous"]], ["del", "theorem", "continuous_nsmul", ["continuous_linear_map"]]]}]}, {"timestamp": 1645021433, "sha": "a26d17fc", "message": "feat(mv_polynomial/supported): restrict_to_vars (#12043)", "changes": [{"oldPath": "src/data/mv_polynomial/supported.lean", "newPath": "src/data/mv_polynomial/supported.lean", "changes": [["add", "theorem", "exists_restrict_to_vars", ["mv_polynomial"]]]}]}, {"timestamp": 1645021432, "sha": "62297cf0", "message": "feat(analysis/complex/cauchy_integral, analysis/analytic/basic): entire functions have power series with infinite radius of convergence (#11948)\nThis proves that a formal multilinear series `p` which represents a function `f : 𝕜 → E` on a ball of every positive radius, then `p` represents `f` on a ball of infinite radius. Consequently, it is shown that if `f : ℂ → E` is differentiable everywhere, then `cauchy_power_series f z R` represents `f` as a power series centered at `z` in the entirety of `ℂ`, regardless of `R` (assuming `0 < R`).\n- [x] depends on: #11896", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "r_eq_top_of_exists", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}]}, {"timestamp": 1645018583, "sha": "22fdf47e", "message": "chore(linear_algebra/affine_space/affine_map,topology/algebra/continuous_affine_map): generalized scalar instances (#11978)\nThe main result here is that `distrib_mul_action`s are available on affine maps to a module, inherited from their codomain.\nThis fixes a diamond in the `int`-action that was already present for `int`-affine maps, and prevents the new `nat`-action introducing a diamond.\nThis also removes the requirement for `R` to be a `topological_space` in the scalar action for `continuous_affine_map` by using `has_continuous_const_smul` instead of `has_continuous_smul`.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["mod", "theorem", "coe_smul", ["affine_map"]], ["mod", "theorem", "smul_linear", ["affine_map"]], ["mod", "def", "to_const_prod_linear_map", ["affine_map"]]]}, {"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": [["mod", "theorem", "coe_smul", ["continuous_affine_map"]], ["mod", "theorem", "smul_apply", ["continuous_affine_map"]]]}]}, {"timestamp": 1645012421, "sha": "32beebbc", "message": "feat(algebra/order/monoid): add simp lemmas (#12030)", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "of_mul_le", ["additive"]], ["add", "theorem", "of_mul_lt", ["additive"]], ["add", "theorem", "to_mul_le", ["additive"]], ["add", "theorem", "to_mul_lt", ["additive"]], ["add", "theorem", "of_add_le", ["multiplicative"]], ["add", "theorem", "of_add_lt", ["multiplicative"]], ["add", "theorem", "to_add_le", ["multiplicative"]], ["add", "theorem", "to_add_lt", ["multiplicative"]]]}]}, {"timestamp": 1645012420, "sha": "75421198", "message": "refactor(algebra/group/basic): add extra typeclasses for negation (#11960)\nThe new typeclasses are:\n* `has_involutive_inv R`, stating that `(r⁻¹)⁻¹ = r` \n (instances: `group`, `group_with_zero`, `ennreal`, `set`, `submonoid`)\n* `has_involutive_neg R`, stating that `- -r = r`\n (instances: `add_group`, `ereal`, `module.ray`, `ray_vector`, `set`, `add_submonoid`, `jordan_decomposition`)\n* `has_distrib_neg R`, stating that `-a * b = a * -b = -(a * b)`\n (instances: `ring`, `units`, `unitary`, `special_linear_group`, `GL_pos`)\nWhile the original motivation only concerned the two `neg` typeclasses, the `to_additive` machinery forced the introduction of `has_involutive_inv`, which turned out to be used in more places than expected.\nAdding these typeclases removes a large number of specialized `units R` lemmas as the lemmas about `R` now match themselves. A surprising number of lemmas elsewhere in the library can also be removed. The removed lemmas are:\n* Lemmas about `units` (replaced by `units.has_distrib_neg`):\n * `units.neg_one_pow_eq_or`\n * `units.neg_pow`\n * `units.neg_pow_bit0`\n * `units.neg_pow_bit1`\n * `units.neg_sq`\n * `units.neg_inv` (now `inv_neg'` for arbitrary groups with distributive negation)\n * `units.neg_neg`\n * `units.neg_mul`\n * `units.mul_neg`\n * `units.neg_mul_eq_neg_mul`\n * `units.neg_mul_eq_mul_neg`\n * `units.neg_mul_neg`\n * `units.neg_eq_neg_one_mul`\n * `units.mul_neg_one`\n * `units.neg_one_mul`\n * `semiconj_by.units_neg_right`\n * `semiconj_by.units_neg_right_iff`\n * `semiconj_by.units_neg_left`\n * `semiconj_by.units_neg_left_iff`\n * `semiconj_by.units_neg_one_right`\n * `semiconj_by.units_neg_one_left`\n * `commute.units_neg_right`\n * `commute.units_neg_right_iff`\n * `commute.units_neg_left`\n * `commute.units_neg_left_iff`\n * `commute.units_neg_one_right`\n * `commute.units_neg_one_left`\n* Lemmas about groups with zero (replaced by `group_with_zero.to_has_involutive_neg`):\n * `inv_inv₀`\n * `inv_involutive₀`\n * `inv_injective₀`\n * `inv_eq_iff` (now shared with the `inv_eq_iff_inv_eq` group lemma)\n * `eq_inv_iff` (now shared with the `eq_inv_iff_eq_inv` group lemma)\n * `equiv.inv₀`\n * `measurable_equiv.inv₀`\n* Lemmas about `ereal` (replaced by `ereal.has_involutive_neg`):\n * `ereal.neg_neg`\n * `ereal.neg_inj`\n * `ereal.neg_eq_neg_iff`\n * `ereal.neg_eq_iff_neg_eq`\n* Lemmas about `ennreal` (replaced by `ennreal.has_involutive_inv`):\n * `ereal.inv_inv`\n * `ereal.inv_involutive`\n * `ereal.inv_bijective`\n * `ereal.inv_eq_inv`\n* Other lemmas:\n * `ray_vector.neg_neg`\n * `module.ray.neg_neg`\n * `module.ray.neg_involutive`\n * `module.ray.eq_neg_iff_eq_neg`\n * `set.inv_inv`\n * `set.neg_neg`\n * `submonoid.inv_inv`\n * `add_submonoid.neg_neg`\nAs a bonus, this provides the group `unitary R` with a negation operator and all the lemmas listed for `units` above.\nFor now this doesn't attempt to unify `units.neg_smul` and `neg_smul`.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "inv_eq_iff_inv_eq", []], ["mod", "theorem", "inv_inj", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "neg_one_pow_eq_or", ["units"]], ["del", "theorem", "neg_pow", ["units"]], ["del", "theorem", "neg_pow_bit0", ["units"]], ["del", "theorem", "neg_pow_bit1", ["units"]], ["del", "theorem", "neg_sq", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "eq_inv_iff", []], ["del", "theorem", "inv_eq_iff", []], ["del", "theorem", "inv_injective₀", []], ["del", "theorem", "inv_inj₀", []], ["del", "theorem", "inv_involutive₀", []], ["del", "theorem", "inv_inv₀", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "inv", ["set", "finite"]], ["mod", "theorem", "image_inv", ["set"]], ["mod", "theorem", "inv_mem_inv", ["set"]], ["mod", "theorem", "inv_singleton", ["set"]], ["mod", "theorem", "inv_subset", ["set"]], ["mod", "theorem", "inv_subset_inv", ["set"]], ["mod", "theorem", "inv", ["set", "nonempty"]], ["mod", "theorem", "nonempty_inv", ["set"]]]}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "units_neg_left", ["commute"]], ["del", "theorem", "units_neg_left_iff", ["commute"]], ["del", "theorem", "units_neg_one_left", ["commute"]], ["del", "theorem", "units_neg_one_right", ["commute"]], ["del", "theorem", "units_neg_right", ["commute"]], ["del", "theorem", "units_neg_right_iff", ["commute"]], ["add", "theorem", "inv_neg'", []], ["del", "theorem", "units_neg_left", ["semiconj_by"]], ["del", "theorem", "units_neg_left_iff", ["semiconj_by"]], ["del", "theorem", "units_neg_one_left", ["semiconj_by"]], ["del", "theorem", "units_neg_one_right", ["semiconj_by"]], ["del", "theorem", "units_neg_right", ["semiconj_by"]], ["del", "theorem", "units_neg_right_iff", ["semiconj_by"]], ["del", "theorem", "mul_neg_one", ["units"]], ["del", "theorem", "neg_mul_eq_mul_neg", ["units"]], ["del", "theorem", "neg_mul_eq_neg_mul", ["units"]], ["del", "theorem", "neg_one_mul", ["units"]]]}, {"oldPath": "src/algebra/star/unitary.lean", "newPath": "src/algebra/star/unitary.lean", "changes": [["add", "theorem", "coe_neg", ["unitary"]]]}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log_deriv.lean", "newPath": "src/analysis/special_functions/log_deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["del", "theorem", "inv_symm₀", ["equiv"]]]}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "inv_bijective", ["ennreal"]], ["del", "theorem", "inv_eq_inv", ["ennreal"]], ["del", "theorem", "inv_inv", ["ennreal"]], ["del", "theorem", "inv_involutive", ["ennreal"]]]}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["del", "theorem", "neg_eq_iff_neg_eq", ["ereal"]], ["del", "theorem", "neg_eq_neg_iff", ["ereal"]], ["del", "theorem", "neg_inj", ["ereal"]]]}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "inv_epsilon_eq_omega", ["hyperreal"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["del", "theorem", "neg_involutive", ["module", "ray"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/group/measurable_equiv.lean", "newPath": "src/measure_theory/group/measurable_equiv.lean", "changes": [["mod", "def", "inv", ["measurable_equiv"]], ["del", "def", "inv₀", ["measurable_equiv"]], ["mod", "theorem", "symm_inv", ["measurable_equiv"]], ["del", "theorem", "symm_inv₀", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/l_series.lean", "newPath": "src/number_theory/l_series.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1645012418, "sha": "d24792c6", "message": "feat(model_theory/terms_and_formulas): Define satisfiability and semantic equivalence of formulas (#11928)\nDefines satisfiability of theories\nProvides a default model of a satisfiable theory\nDefines semantic (logical) equivalence of formulas", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["del", "def", "empty", ["first_order", "language"]], ["add", "theorem", "nonempty_of_nonempty_constants", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/definability.lean", "newPath": "src/model_theory/definability.lean", "changes": []}, {"oldPath": "src/model_theory/terms_and_formulas.lean", "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "theorem", "imp_semantically_equivalent_not_sup", ["first_order", "language", "Theory"]], ["add", "theorem", "inf_semantically_equivalent_not_sup_not", ["first_order", "language", "Theory"]], ["add", "def", "is_finitely_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "is_finitely_satisfiable", ["first_order", "language", "Theory", "is_satisfiable"]], ["add", "theorem", "mono", ["first_order", "language", "Theory", "is_satisfiable"]], ["add", "def", "some_model", ["first_order", "language", "Theory", "is_satisfiable"]], ["add", "theorem", "some_model_models", ["first_order", "language", "Theory", "is_satisfiable"]], ["add", "def", "is_satisfiable", ["first_order", "language", "Theory"]], ["add", "theorem", "is_satisfiable", ["first_order", "language", "Theory", "model"]], ["add", "theorem", "mono", ["first_order", "language", "Theory", "model"]], ["add", "def", "model", ["first_order", "language", "Theory"]], ["add", "def", "models_bounded_formula", ["first_order", "language", "Theory"]], ["add", "theorem", "models_formula_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "models_sentence_iff", ["first_order", "language", "Theory"]], ["add", "theorem", "realize_eq", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "theorem", "some_model_realize_eq", ["first_order", "language", "Theory", "semantically_equivalent"]], ["add", "def", "semantically_equivalent", ["first_order", "language", "Theory"]], ["add", "theorem", "semantically_equivalent_not_not", ["first_order", "language", "Theory"]], ["add", "def", "semantically_equivalent_setoid", ["first_order", "language", "Theory"]], ["add", "theorem", "sup_semantically_equivalent_not_inf_not", ["first_order", "language", "Theory"]], ["add", "def", "Theory", ["first_order", "language"]], ["mod", "def", "bd_not", ["first_order", "language"]], ["add", "theorem", "realize_imp", ["first_order", "language"]], ["add", "theorem", "realize_inf", ["first_order", "language"]], ["del", "def", "theory", ["first_order", "language"]]]}]}, {"timestamp": 1645010367, "sha": "6dfb24cf", "message": "feat(algebra/star/self_adjoint): define skew-adjoint elements of a star additive group (#12013)\nThis defines the skew-adjoint elements of a star additive group, as the additive subgroup that satisfies `star x = -x`. The development is analogous to that of `self_adjoint`.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "bit0_mem", ["skew_adjoint"]], ["add", "theorem", "coe_smul", ["skew_adjoint"]], ["add", "theorem", "conjugate'", ["skew_adjoint"]], ["add", "theorem", "conjugate", ["skew_adjoint"]], ["add", "theorem", "mem_iff", ["skew_adjoint"]], ["add", "theorem", "star_coe_eq", ["skew_adjoint"]], ["add", "def", "skew_adjoint", []]]}]}, {"timestamp": 1645003811, "sha": "06e6b35d", "message": "feat(analysis/special_functions/trigonometric/angle): `coe_pi_add_coe_pi` (#12064)\nAdd another `simp` lemma to those expressing in different ways that 2π\nis zero as a `real.angle`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "coe_pi_add_coe_pi", ["real", "angle"]]]}]}, {"timestamp": 1644997537, "sha": "daf2989a", "message": "feat(algebra/big_operators): formula for product of sums to n+1 (#12042)", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": [["add", "theorem", "sum_range_succ_mul_sum_range_succ", ["finset"]]]}]}, {"timestamp": 1644995762, "sha": "6a09cd06", "message": "chore(topology/uniform_space): use weaker TC assumptions (#12066)\nWe don't need `[uniform_space β]` to prove\n`uniform_space.completion.ext`.", "changes": [{"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "ext", ["uniform_space", "completion"]]]}]}, {"timestamp": 1644958653, "sha": "eeb29569", "message": "feat(topology/algebra): relax some `Type*` assumptions to `Sort*` (#12058)\nWhen working on #11720 I forgot that we have to deal with Prop-indexed infimums quite often, so this PR fixes that.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}]}, {"timestamp": 1644953656, "sha": "b0fe9723", "message": "feat (analysis/normed_space/spectrum): prove Gelfand's formula for the spectral radius (#11916)\nThis establishes Gelfand's formula for the spectral radius in a complex Banach algebra `A`, namely that the sequence of n-th roots of the norms of n-th powers of any element tends to its spectral radius. Some results which hold in more generality concerning the function `z ↦ ring.inverse (1 - z • a)` are also given. In particular, this function is differentiable on the disk with radius the reciprocal of the spectral radius, and it has a power series on the ball with radius equal to the reciprocal of the norm of `a : A`.\nCurrently, the version of Gelfand's formula which appears here includes an assumption that `A` is second countable, which won't hold in general unless `A` is separable. This is not a true (i.e., mathematical) limitation, but a consequence of the current implementation of Bochner integrals in mathlib (which are an essential feature in the proof of Gelfand's formula because of its use of the Cauchy integral formula). When Bochner integrals are refactored, this type class assumption can be dropped.\n- [x] depends on: #11869\n- [x] depends on: #11896 \n- [x] depends on: #11915", "changes": [{"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "differentiable_on_inverse_one_sub_smul", ["spectrum"]], ["add", "theorem", "has_fpower_series_on_ball_inverse_one_sub_smul", ["spectrum"]], ["add", "theorem", "is_unit_one_sub_smul_of_lt_inv_radius", ["spectrum"]], ["add", "theorem", "limsup_pow_nnnorm_pow_one_div_le_spectral_radius", ["spectrum"]], ["add", "theorem", "mem_resolvent_set_of_spectral_radius_lt", ["spectrum"]], ["add", "theorem", "pow_nnnorm_pow_one_div_tendsto_nhds_spectral_radius", ["spectrum"]], ["add", "theorem", "pow_norm_pow_one_div_tendsto_nhds_spectral_radius", ["spectrum"]]]}]}, {"timestamp": 1644953655, "sha": "d76ac2e0", "message": "feat(category_theory): separators and detectors (#11880)", "changes": [{"oldPath": "src/category_theory/balanced.lean", "newPath": "src/category_theory/balanced.lean", "changes": [["add", "theorem", "balanced_opposite", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/generator.lean", "changes": [["add", "theorem", "groupoid_of_is_codetecting_empty", ["category_theory"]], ["add", "theorem", "groupoid_of_is_detecting_empty", ["category_theory"]], ["add", "theorem", "is_coseparating", ["category_theory", "is_codetecting"]], ["add", "theorem", "mono", ["category_theory", "is_codetecting"]], ["add", "def", "is_codetecting", ["category_theory"]], ["add", "theorem", "is_codetecting_empty_of_groupoid", ["category_theory"]], ["add", "theorem", "is_codetecting_iff_is_coseparating", ["category_theory"]], ["add", "theorem", "is_codetecting_op_iff", ["category_theory"]], ["add", "theorem", "is_codetecting_unop_iff", ["category_theory"]], ["add", "theorem", "def", ["category_theory", "is_codetector"]], ["add", "theorem", "is_coseparator", ["category_theory", "is_codetector"]], ["add", "def", "is_codetector", ["category_theory"]], ["add", "theorem", "is_codetector_def", ["category_theory"]], ["add", "theorem", "is_codetector_iff_reflects_isomorphisms_yoneda_obj", ["category_theory"]], ["add", "theorem", "is_codetector_op_iff", ["category_theory"]], ["add", "theorem", "is_codetector_unop_iff", ["category_theory"]], ["add", "theorem", "is_codetecting", ["category_theory", "is_coseparating"]], ["add", "theorem", "mono", ["category_theory", "is_coseparating"]], ["add", "def", "is_coseparating", ["category_theory"]], ["add", "theorem", "is_coseparating_empty_of_thin", ["category_theory"]], ["add", "theorem", "is_coseparating_op_iff", ["category_theory"]], ["add", "theorem", "is_coseparating_unop_iff", ["category_theory"]], ["add", "theorem", "def", ["category_theory", "is_coseparator"]], ["add", "def", "is_coseparator", ["category_theory"]], ["add", "theorem", "is_coseparator_def", ["category_theory"]], ["add", "theorem", "is_coseparator_iff_faithful_yoneda_obj", ["category_theory"]], ["add", "theorem", "is_coseparator_op_iff", ["category_theory"]], ["add", "theorem", "is_coseparator_unop_iff", ["category_theory"]], ["add", "theorem", "is_codetector", ["category_theory", "is_cospearator"]], ["add", "theorem", "is_separating", ["category_theory", "is_detecting"]], ["add", "theorem", "mono", ["category_theory", "is_detecting"]], ["add", "def", "is_detecting", ["category_theory"]], ["add", "theorem", "is_detecting_empty_of_groupoid", ["category_theory"]], ["add", "theorem", "is_detecting_iff_is_separating", ["category_theory"]], ["add", "theorem", "is_detecting_op_iff", ["category_theory"]], ["add", "theorem", "is_detecting_unop_iff", ["category_theory"]], ["add", "theorem", "def", ["category_theory", "is_detector"]], ["add", "theorem", "is_separator", ["category_theory", "is_detector"]], ["add", "def", "is_detector", ["category_theory"]], ["add", "theorem", "is_detector_def", ["category_theory"]], ["add", "theorem", "is_detector_iff_reflects_isomorphisms_coyoneda_obj", ["category_theory"]], ["add", "theorem", "is_detector_op_iff", ["category_theory"]], ["add", "theorem", "is_detector_unop_iff", ["category_theory"]], ["add", "theorem", "is_detecting", ["category_theory", "is_separating"]], ["add", "theorem", "mono", ["category_theory", "is_separating"]], ["add", "def", "is_separating", ["category_theory"]], ["add", "theorem", "is_separating_empty_of_thin", ["category_theory"]], ["add", "theorem", "is_separating_op_iff", ["category_theory"]], ["add", "theorem", "is_separating_unop_iff", ["category_theory"]], ["add", "theorem", "def", ["category_theory", "is_separator"]], ["add", "theorem", "is_detector", ["category_theory", "is_separator"]], ["add", "def", "is_separator", ["category_theory"]], ["add", "theorem", "is_separator_def", ["category_theory"]], ["add", "theorem", "is_separator_iff_faithful_coyoneda_obj", ["category_theory"]], ["add", "theorem", "is_separator_op_iff", ["category_theory"]], ["add", "theorem", "is_separator_unop_iff", ["category_theory"]], ["add", "theorem", "thin_of_is_coseparating_empty", ["category_theory"]], ["add", "theorem", "thin_of_is_separating_empty", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "is_iso_op_iff", ["category_theory"]], ["add", "theorem", "is_iso_unop_iff", ["category_theory"]], ["mod", "theorem", "op_inv", ["category_theory"]], ["add", "theorem", "unop_inv", ["category_theory"]]]}]}, {"timestamp": 1644951850, "sha": "ff2c9dc3", "message": "feat(combinatorics/simple_graph/connectivity): add functions to split walks and to create paths (#11095)\nThis is chunk 3 of #8737. Introduces `take_until` and `drop_until` to split walks at a vertex, `rotate` to rotate cycles, and `to_path` to remove internal redundancy from a walk to create a path with the same endpoints.\nThis also defines a bundled `path` type for `is_path` since `G.path u v` is a useful type.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "def", "path", ["simple_graph"]], ["add", "def", "bypass", ["simple_graph", "walk"]], ["add", "theorem", "bypass_is_path", ["simple_graph", "walk"]], ["add", "theorem", "count_edges_take_until_le_one", ["simple_graph", "walk"]], ["add", "theorem", "count_support_take_until_eq_one", ["simple_graph", "walk"]], ["add", "def", "drop_until", ["simple_graph", "walk"]], ["add", "theorem", "edges_bypass_subset", ["simple_graph", "walk"]], ["add", "theorem", "edges_drop_until_subset", ["simple_graph", "walk"]], ["add", "theorem", "edges_take_until_subset", ["simple_graph", "walk"]], ["add", "theorem", "edges_to_path_subset", ["simple_graph", "walk"]], ["add", "theorem", "rotate", ["simple_graph", "walk", "is_circuit"]], ["add", "theorem", "rotate", ["simple_graph", "walk", "is_cycle"]], ["add", "theorem", "drop_until", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "take_until", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "drop_until", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "rotate", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "take_until", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "length_bypass_le", ["simple_graph", "walk"]], ["add", "theorem", "length_drop_until_le", ["simple_graph", "walk"]], ["add", "theorem", "length_take_until_le", ["simple_graph", "walk"]], ["add", "theorem", "mem_support_nil_iff", ["simple_graph", "walk"]], ["add", "def", "rotate", ["simple_graph", "walk"]], ["add", "theorem", "rotate_edges", ["simple_graph", "walk"]], ["add", "theorem", "support_bypass_subset", ["simple_graph", "walk"]], ["add", "theorem", "support_drop_until_subset", ["simple_graph", "walk"]], ["add", "theorem", "support_rotate", ["simple_graph", "walk"]], ["add", "theorem", "support_take_until_subset", ["simple_graph", "walk"]], ["add", "theorem", "support_to_path_subset", ["simple_graph", "walk"]], ["add", "theorem", "take_spec", ["simple_graph", "walk"]], ["add", "def", "take_until", ["simple_graph", "walk"]], ["add", "def", "to_path", ["simple_graph", "walk"]]]}]}, {"timestamp": 1644947251, "sha": "5027b283", "message": "move(data/nat/choose/bounds): Move from `combinatorics.choose.bounds` (#12051)\nThis file fits better with all other files about `nat.choose`. My bad for originally proposing it goes alone under `combinatorics`.", "changes": [{"oldPath": "src/combinatorics/choose/bounds.lean", "newPath": "src/data/nat/choose/bounds.lean", "changes": []}]}, {"timestamp": 1644947250, "sha": "52aaf173", "message": "feat(data/{list,multiset,finset}/nat_antidiagonal): add lemmas to remove elements from head and tail of antidiagonal (#12028)\nAlso lowered `finset.nat.map_swap_antidiagonal` down to `list` through `multiset`.", "changes": [{"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_succ'", ["finset", "nat"]], ["add", "theorem", "antidiagonal_succ_succ'", ["finset", "nat"]]]}, {"oldPath": "src/data/list/nat_antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_succ'", ["list", "nat"]], ["add", "theorem", "antidiagonal_succ_succ'", ["list", "nat"]], ["add", "theorem", "map_swap_antidiagonal", ["list", "nat"]]]}, {"oldPath": "src/data/multiset/nat_antidiagonal.lean", "newPath": "src/data/multiset/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_succ'", ["multiset", "nat"]], ["add", "theorem", "antidiagonal_succ_succ'", ["multiset", "nat"]], ["add", "theorem", "map_swap_antidiagonal", ["multiset", "nat"]]]}]}, {"timestamp": 1644940409, "sha": "c0c673ab", "message": "feat(data/equiv,logic/embedding): add `can_lift` instances (#12049)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "of_bijective_apply_symm_apply", ["equiv"]], ["mod", "theorem", "of_bijective_symm_apply_apply", ["equiv"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}]}, {"timestamp": 1644940379, "sha": "c686fcc1", "message": "feat(analysis/specific_limits): add `tendsto_zero_smul_of_tendsto_zero_of_bounded` (#12039)", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_zero_smul_of_tendsto_zero_of_bounded", ["normed_field"]]]}]}, {"timestamp": 1644940376, "sha": "6e64492d", "message": "feat(ring_theory/multiplicity): Equality of `factorization`, `multiplicity`, and `padic_val_nat` (#12033)\nProves `multiplicity_eq_factorization : multiplicity p n = n.factorization p` for prime `p` and `n ≠ 0` and uses this to golf the proof of `padic_val_nat_eq_factorization : padic_val_nat p n = n.factorization p`.", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["mod", "theorem", "padic_val_nat_eq_factorization", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_eq_factorization", []]]}]}, {"timestamp": 1644940373, "sha": "9307f5b4", "message": "feat(topology/order/lattice): add a consequence of the continuity of sup/inf (#12003)\nProve this lemma and its `inf` counterpart:\n```lean\nlemma filter.tendsto.sup_right_nhds {ι β} [topological_space β] [has_sup β] [has_continuous_sup β]\n {l : filter ι} {f g : ι → β} {x y : β} (hf : tendsto f l (𝓝 x)) (hg : tendsto g l (𝓝 y)) :\n tendsto (f ⊔ g) l (𝓝 (x ⊔ y))\n```\nThe name is `sup_right_nhds` because `sup` already exists, and is about a supremum over the filters on the left in the tendsto.\nThe proofs of `tendsto_prod_iff'` and `prod.tendsto_iff` were written by Patrick Massot.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_prod_iff'", ["filter"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "tendsto_iff", ["prod"]]]}, {"oldPath": "src/topology/order/lattice.lean", "newPath": "src/topology/order/lattice.lean", "changes": [["add", "theorem", "inf_right_nhds'", ["filter", "tendsto"]], ["add", "theorem", "inf_right_nhds", ["filter", "tendsto"]], ["add", "theorem", "sup_right_nhds'", ["filter", "tendsto"]], ["add", "theorem", "sup_right_nhds", ["filter", "tendsto"]]]}]}, {"timestamp": 1644940372, "sha": "60b77a76", "message": "feat(analysis/special_functions/complex/circle): `real.angle.exp_map_circle` lemmas (#11969)\nAdd four more `simp` lemmas about `real.angle.exp_map_circle`:\n`exp_map_circle_zero`, `exp_map_circle_neg`, `exp_map_circle_add` and\n`arg_exp_map_circle`.", "changes": [{"oldPath": "src/analysis/special_functions/complex/circle.lean", "newPath": "src/analysis/special_functions/complex/circle.lean", "changes": [["add", "theorem", "arg_exp_map_circle", ["real", "angle"]], ["add", "theorem", "exp_map_circle_add", ["real", "angle"]], ["add", "theorem", "exp_map_circle_neg", ["real", "angle"]], ["add", "theorem", "exp_map_circle_zero", ["real", "angle"]]]}]}, {"timestamp": 1644940369, "sha": "0c33309c", "message": "feat(number_theory/zsqrtd/basic): add some lemmas (#11964)", "changes": [{"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": [["add", "theorem", "coe_int_dvd_coe_int", ["zsqrtd"]], ["mod", "theorem", "coe_int_dvd_iff", ["zsqrtd"]], ["add", "theorem", "coprime_of_dvd_coprime", ["zsqrtd"]], ["add", "theorem", "exists_coprime_of_gcd_pos", ["zsqrtd"]], ["add", "theorem", "gcd_eq_zero_iff", ["zsqrtd"]], ["add", "theorem", "gcd_pos_iff", ["zsqrtd"]], ["add", "theorem", "smul_im", ["zsqrtd"]], ["add", "theorem", "smul_re", ["zsqrtd"]]]}]}, {"timestamp": 1644940368, "sha": "3d1354ce", "message": "feat(set_theory/ordinal_arithmetic): Suprema of functions with the same range are equal (#11910)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "blsub_eq_of_brange_eq", ["ordinal"]], ["add", "theorem", "blsub_le_of_brange_subset", ["ordinal"]], ["add", "def", "brange", ["ordinal"]], ["add", "theorem", "brange_bfamily_of_family'", ["ordinal"]], ["add", "theorem", "brange_bfamily_of_family", ["ordinal"]], ["add", "theorem", "bsup_eq_of_brange_eq", ["ordinal"]], ["add", "theorem", "bsup_le_of_brange_subset", ["ordinal"]], ["add", "theorem", "lsub_eq_of_range_eq", ["ordinal"]], ["add", "theorem", "lsub_le_of_range_subset", ["ordinal"]], ["add", "theorem", "mem_brange", ["ordinal"]], ["add", "theorem", "mem_brange_self", ["ordinal"]], ["add", "theorem", "range_family_of_bfamily'", ["ordinal"]], ["add", "theorem", "range_family_of_bfamily", ["ordinal"]], ["add", "theorem", "sup_eq_of_range_eq", ["ordinal"]], ["mod", "theorem", "sup_eq_sup", ["ordinal"]], ["add", "theorem", "sup_le_of_range_subset", ["ordinal"]]]}]}, {"timestamp": 1644940366, "sha": "721bace8", "message": "refactor(set_theory/ordinal_arithmetic): `omin` → `Inf` (#11867)\nWe remove the redundant `omin` in favor of `Inf`. We also introduce a `conditionally_complete_linear_order_bot` instance on `cardinals`, and golf a particularly messy proof.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "def", "min", ["cardinal"]], ["add", "def", "out_mk_equiv", ["cardinal"]], ["add", "def", "powerlt", ["cardinal"]], ["add", "def", "succ", ["cardinal"]], ["add", "def", "sup", ["cardinal"]], ["add", "def", "to_enat", ["cardinal"]], ["add", "def", "to_nat", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["mod", "theorem", "ord_aleph'_eq_enum_card", ["cardinal"]], ["mod", "theorem", "ord_aleph_eq_enum_card", ["cardinal"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "Inf_eq_omin", ["ordinal"]], ["del", "theorem", "Inf_mem", ["ordinal"]], ["del", "theorem", "le_omin", ["ordinal"]], ["del", "theorem", "not_lt_omin", ["ordinal"]], ["del", "def", "omin", ["ordinal"]], ["del", "theorem", "omin_le", ["ordinal"]], ["del", "theorem", "omin_mem", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "blsub_le_enum_ord", ["ordinal"]], ["mod", "theorem", "deriv_eq_enum_fp", ["ordinal"]], ["mod", "theorem", "div_def", ["ordinal"]], ["add", "theorem", "div_nonempty", ["ordinal"]], ["mod", "theorem", "div_zero", ["ordinal"]], ["mod", "def", "order_iso", ["ordinal", "enum_ord"]], ["mod", "theorem", "strict_mono", ["ordinal", "enum_ord"]], ["mod", "theorem", "surjective", ["ordinal", "enum_ord"]], ["mod", "def", "enum_ord", ["ordinal"]], ["del", "theorem", "enum_ord_def'_H", ["ordinal"]], ["add", "theorem", "enum_ord_def'_nonempty", ["ordinal"]], ["del", "theorem", "enum_ord_def_H", ["ordinal"]], ["add", "theorem", "enum_ord_def_nonempty", ["ordinal"]], ["mod", "theorem", "enum_ord_mem", ["ordinal"]], ["mod", "theorem", "enum_ord_range", ["ordinal"]], ["add", "theorem", "enum_ord_succ_le", ["ordinal"]], ["add", "theorem", "enum_ord_zero", ["ordinal"]], ["add", "theorem", "enum_ord_zero_le", ["ordinal"]], ["mod", "theorem", "eq_enum_ord", ["ordinal"]], ["mod", "theorem", "log_def", ["ordinal"]], ["add", "theorem", "log_nonempty", ["ordinal"]], ["add", "theorem", "sub_nonempty", ["ordinal"]], ["mod", "theorem", "succ_log_def", ["ordinal"]], ["mod", "def", "sup", ["ordinal"]], ["add", "theorem", "sup_nonempty", ["ordinal"]]]}]}, {"timestamp": 1644940365, "sha": "9acc1d40", "message": "feat(model_theory/finitely_generated): Finitely generated and countably generated (sub)structures (#11857)\nDefines `substructure.fg` and `Structure.fg` to indicate when (sub)structures are finitely generated\nDefines `substructure.cg` and `Structure.cg` to indicate when (sub)structures are countably generated", "changes": [{"oldPath": null, "newPath": "src/model_theory/finitely_generated.lean", "changes": [["add", "theorem", "map_of_surjective", ["first_order", "language", "Structure", "cg"]], ["add", "theorem", "range", ["first_order", "language", "Structure", "cg"]], ["add", "theorem", "cg_def", ["first_order", "language", "Structure"]], ["add", "theorem", "cg_iff", ["first_order", "language", "Structure"]], ["add", "theorem", "map_of_surjective", ["first_order", "language", "Structure", "fg"]], ["add", "theorem", "range", ["first_order", "language", "Structure", "fg"]], ["add", "theorem", "fg_def", ["first_order", "language", "Structure"]], ["add", "theorem", "fg_iff", ["first_order", "language", "Structure"]], ["add", "theorem", "cg_iff", ["first_order", "language", "equiv"]], ["add", "theorem", "fg_iff", ["first_order", "language", "equiv"]], ["add", "theorem", "map", ["first_order", "language", "substructure", "cg"]], ["add", "theorem", "of_map_embedding", ["first_order", "language", "substructure", "cg"]], ["add", "def", "cg", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_bot", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_closure", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_closure_singleton", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_def", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_iff_Structure_cg", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_iff_empty_or_exists_nat_generating_family", ["first_order", "language", "substructure"]], ["add", "theorem", "cg_sup", ["first_order", "language", "substructure"]], ["add", "theorem", "cg", ["first_order", "language", "substructure", "fg"]], ["add", "theorem", "map", ["first_order", "language", "substructure", "fg"]], ["add", "theorem", "of_map_embedding", ["first_order", "language", "substructure", "fg"]], ["add", "def", "fg", ["first_order", "language", "substructure"]], ["add", "theorem", "fg_bot", ["first_order", "language", "substructure"]], ["add", "theorem", "fg_closure", ["first_order", "language", "substructure"]], ["add", "theorem", "fg_closure_singleton", ["first_order", "language", "substructure"]], ["add", "theorem", "fg_def", ["first_order", "language", "substructure"]], ["add", "theorem", "fg_iff_Structure_fg", ["first_order", "language", "substructure"]], ["add", "theorem", "fg_iff_exists_fin_generating_family", ["first_order", "language", "substructure"]], ["add", "theorem", "fg_sup", ["first_order", "language", "substructure"]]]}]}, {"timestamp": 1644940364, "sha": "41dd6d8a", "message": "feat(data/nat/modeq): add modeq and dvd lemmas from Apostol Chapter 5 (#11787)\nVarious lemmas about `modeq` from Chapter 5 of Apostol (1976) Introduction to Analytic Number Theory:\n* `mul_left_iff` and `mul_right_iff`: Apostol, Theorem 5.3\n* `dvd_iff_of_modeq_of_dvd`: Apostol, Theorem 5.5\n* `gcd_eq_of_modeq`: Apostol, Theorem 5.6\n* `eq_of_modeq_of_abs_lt`: Apostol, Theorem 5.7\n* `modeq_cancel_left_div_gcd`: Apostol, Theorem 5.4; plus other cancellation lemmas following from this.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "eq_zero_of_abs_lt_dvd", ["int"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "dvd_iff_of_modeq_of_dvd", ["nat", "modeq"]], ["add", "theorem", "eq_of_modeq_of_abs_lt", ["nat", "modeq"]], ["add", "theorem", "gcd_eq_of_modeq", ["nat", "modeq"]], ["add", "theorem", "modeq_cancel_left_div_gcd'", ["nat", "modeq"]], ["add", "theorem", "modeq_cancel_left_div_gcd", ["nat", "modeq"]], ["add", "theorem", "modeq_cancel_left_of_coprime", ["nat", "modeq"]], ["add", "theorem", "modeq_cancel_right_div_gcd'", ["nat", "modeq"]], ["add", "theorem", "modeq_cancel_right_div_gcd", ["nat", "modeq"]], ["add", "theorem", "modeq_cancel_right_of_coprime", ["nat", "modeq"]]]}]}, {"timestamp": 1644935996, "sha": "b0508f3c", "message": "feat(topology/uniform/uniform_embedding): a sum of two complete spaces is complete (#11971)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "discrete_topology_of_discrete_uniformity", []], ["mod", "def", "replace_topology", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "def", "comap_uniform_space", ["embedding"]], ["add", "theorem", "to_uniform_embedding", ["embedding"]], ["add", "theorem", "uniform_embedding_inl", []], ["add", "theorem", "uniform_embedding_inr", []]]}]}, {"timestamp": 1644935995, "sha": "77ca1ed3", "message": "feat(order/category/Lattice): The category of lattices (#11968)\nDefine `Lattice`, the category of lattices with lattice homs.", "changes": [{"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/category/Lattice.lean", "changes": [["add", "def", "dual", ["Lattice"]], ["add", "def", "dual_equiv", ["Lattice"]], ["add", "def", "mk", ["Lattice", "iso"]], ["add", "def", "of", ["Lattice"]], ["add", "def", "Lattice", []], ["add", "theorem", "Lattice_dual_comp_forget_to_PartialOrder", []]]}, {"oldPath": "src/order/category/LinearOrder.lean", "newPath": "src/order/category/LinearOrder.lean", "changes": [["add", "def", "dual", ["LinearOrder"]], ["del", "def", "to_dual", ["LinearOrder"]], ["add", "theorem", "LinearOrder_dual_comp_forget_to_Lattice", []], ["del", "theorem", "LinearOrder_dual_equiv_comp_forget_to_PartialOrder", []]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": []}]}, {"timestamp": 1644929953, "sha": "5bcffd96", "message": "feat(number_theory/cyclotomic/zeta): add lemmas (#11786)\nLemmas about the norm of `ζ - 1`.\nFrom flt-regular.\n- [x] depends on: #11941", "changes": [{"oldPath": "src/number_theory/cyclotomic/primitive_roots.lean", "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["add", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "is_prime_pow"]], ["add", "theorem", "norm_zeta_eq_one", ["is_cyclotomic_extension"]], ["add", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "prime_ne_two"]], ["add", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "prime_ne_two_pow"]], ["add", "theorem", "norm_zeta_sub_one", ["is_cyclotomic_extension", "two_pow"]], ["add", "theorem", "sub_one_norm", ["is_primitive_root", "prime_ne_two_pow"]], ["add", "theorem", "is_prime_pow", ["is_primitive_root", "sub_one_norm"]], ["add", "theorem", "pow_two", ["is_primitive_root", "sub_one_norm"]], ["add", "theorem", "prime", ["is_primitive_root", "sub_one_norm"]], ["mod", "theorem", "sub_one_norm_eq_eval_cyclotomic", ["is_primitive_root"]]]}]}, {"timestamp": 1644929952, "sha": "a2d7b55a", "message": "feat(order/complete_boolean_algebra): Frames (#11709)\nDefine the order theoretic `order.frame` and `order.coframe` and insert them between `complete_lattice` and `complete_distrib_lattice`.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["add", "theorem", "image_prod_mk_subset_prod_left", ["set"]], ["add", "theorem", "image_prod_mk_subset_prod_right", ["set"]]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["mod", "theorem", "Sup_inf_Sup", []], ["mod", "theorem", "Sup_inf_eq", []], ["add", "theorem", "binfi_sup_binfi", []], ["add", "theorem", "bsupr_inf_bsupr", []], ["mod", "theorem", "bsupr_inf_eq", []], ["mod", "theorem", "inf_Sup_eq", []], ["mod", "theorem", "inf_bsupr_eq", []], ["mod", "theorem", "inf_supr_eq", []], ["add", "theorem", "infi_sup_infi", []], ["mod", "theorem", "supr_inf_eq", []], ["add", "theorem", "supr_inf_supr", []]]}, {"oldPath": "src/order/copy.lean", "newPath": "src/order/copy.lean", "changes": [["add", "def", "copy", ["coframe"]], ["add", "def", "copy", ["frame"]]]}]}, {"timestamp": 1644928209, "sha": "440e6b3b", "message": "feat(topology/algebra/module/locally_convex): define locally convex spaces (#11859)", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "to_locally_convex_space'", ["normed_space"]], ["add", "theorem", "to_locally_convex_space", ["seminorm", "with_seminorms"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/module/locally_convex.lean", "changes": [["add", "theorem", "convex_basis_zero", ["locally_convex_space"]], ["add", "theorem", "of_bases", ["locally_convex_space"]], ["add", "theorem", "of_basis_zero", ["locally_convex_space"]], ["add", "theorem", "locally_convex_space_iff", []], ["add", "theorem", "locally_convex_space_iff_exists_convex_subset", []], ["add", "theorem", "locally_convex_space_iff_exists_convex_subset_zero", []], ["add", "theorem", "locally_convex_space_iff_zero", []]]}]}, {"timestamp": 1644923559, "sha": "c5578f91", "message": "feat(group_theory/nilpotent): products of nilpotent groups (#11827)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "lower_central_series_prod", []], ["add", "theorem", "nilpotency_class_prod", []]]}]}, {"timestamp": 1644913631, "sha": "f12b3d91", "message": "feat(topology/algebra): weaken typeclasses to only require `has_continuous_const_smul` (#11995)\nThis changes all the continuity-based `const_smul` lemmas to only require `has_continuous_const_smul` rather than `has_continuous_smul`. It does not attempt to propagate the changes out of this file.\nFour new instances are added in `const_mul_action.lean` for `has_continuous_const_smul`: `mul_opposite`, `prod`, `pi`, and `units`; all copied from the corresponding `has_continuous_smul` instance in `mul_action.lean`.\nPresumably these lemmas existed before this typeclass did.\nAt any rate, the connection was less obvious until the rename a few days ago in #11940.", "changes": [{"oldPath": "src/topology/algebra/const_mul_action.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": [["add", "theorem", "const_smul", ["continuous"]], ["add", "theorem", "const_smul", ["continuous_at"]], ["add", "theorem", "continuous_at_const_smul_iff", []], ["add", "theorem", "continuous_at_const_smul_iff₀", []], ["add", "theorem", "continuous_const_smul_iff", []], ["add", "theorem", "continuous_const_smul_iff₀", []], ["add", "theorem", "const_smul", ["continuous_on"]], ["add", "theorem", "continuous_on_const_smul_iff", []], ["add", "theorem", "continuous_on_const_smul_iff₀", []], ["add", "theorem", "const_smul", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_const_smul_iff", []], ["add", "theorem", "continuous_within_at_const_smul_iff₀", []], ["add", "theorem", "const_smul", ["filter", "tendsto"]], ["mod", "def", "smul", ["homeomorph"]], ["del", "def", "vadd", ["homeomorph"]], ["add", "theorem", "interior_smul₀", []], ["add", "theorem", "smul", ["is_closed"]], ["add", "theorem", "is_closed_map_smul", []], ["add", "theorem", "is_closed_map_smul_of_ne_zero", []], ["add", "theorem", "is_closed_map_smul₀", []], ["add", "theorem", "smul", ["is_open"]], ["add", "theorem", "smul₀", ["is_open"]], ["add", "theorem", "is_open_map_smul", []], ["add", "theorem", "is_open_map_smul₀", []], ["add", "theorem", "continuous_at_const_smul_iff", ["is_unit"]], ["add", "theorem", "continuous_const_smul_iff", ["is_unit"]], ["add", "theorem", "continuous_on_const_smul_iff", ["is_unit"]], ["add", "theorem", "continuous_within_at_const_smul_iff", ["is_unit"]], ["add", "theorem", "is_closed_map_smul", ["is_unit"]], ["add", "theorem", "is_open_map_smul", ["is_unit"]], ["add", "theorem", "tendsto_const_smul_iff", ["is_unit"]], ["add", "theorem", "smul_closure_orbit_subset", []], ["add", "theorem", "smul_closure_subset", []], ["add", "theorem", "tendsto_const_smul_iff", []], ["add", "theorem", "tendsto_const_smul_iff₀", []]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["del", "theorem", "const_smul", ["continuous"]], ["del", "theorem", "const_smul", ["continuous_at"]], ["del", "theorem", "continuous_at_const_smul_iff", []], ["del", "theorem", "continuous_at_const_smul_iff₀", []], ["del", "theorem", "continuous_const_smul_iff", []], ["del", "theorem", "continuous_const_smul_iff₀", []], ["del", "theorem", "const_smul", ["continuous_on"]], ["del", "theorem", "continuous_on_const_smul_iff", []], ["del", "theorem", "continuous_on_const_smul_iff₀", []], ["del", "theorem", "const_smul", ["continuous_within_at"]], ["del", "theorem", "continuous_within_at_const_smul_iff", []], ["del", "theorem", "continuous_within_at_const_smul_iff₀", []], ["del", "theorem", "const_smul", ["filter", "tendsto"]], ["del", "theorem", "interior_smul₀", []], ["del", "theorem", "smul", ["is_closed"]], ["del", "theorem", "is_closed_map_smul", []], ["del", "theorem", "is_closed_map_smul_of_ne_zero", []], ["del", "theorem", "is_closed_map_smul₀", []], ["del", "theorem", "smul", ["is_open"]], ["del", "theorem", "smul₀", ["is_open"]], ["del", "theorem", "is_open_map_smul", []], ["del", "theorem", "is_open_map_smul₀", []], ["del", "theorem", "continuous_at_const_smul_iff", ["is_unit"]], ["del", "theorem", "continuous_const_smul_iff", ["is_unit"]], ["del", "theorem", "continuous_on_const_smul_iff", ["is_unit"]], ["del", "theorem", "continuous_within_at_const_smul_iff", ["is_unit"]], ["del", "theorem", "is_closed_map_smul", ["is_unit"]], ["del", "theorem", "is_open_map_smul", ["is_unit"]], ["del", "theorem", "tendsto_const_smul_iff", ["is_unit"]], ["del", "theorem", "smul_closure_orbit_subset", []], ["del", "theorem", "smul_closure_subset", []], ["del", "theorem", "tendsto_const_smul_iff", []], ["del", "theorem", "tendsto_const_smul_iff₀", []]]}]}, {"timestamp": 1644906875, "sha": "f1334b95", "message": "chore(category_theory/triangulated/rotate): optimizing some proofs (#12031)\nRemoves some non-terminal `simp`s; replaces some `simp`s by `simp only [...]` and `rw`.\nCompilation time dropped from 1m40s to 1m05s on my machine.", "changes": [{"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": []}]}, {"timestamp": 1644902511, "sha": "4c76eac9", "message": "chore(probability_theory/*): Rename folder (#11989)\nRename `probability_theory` to `probability`.", "changes": [{"oldPath": "src/probability_theory/density.lean", "newPath": "src/probability/density.lean", "changes": []}, {"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability/independence.lean", "changes": []}, {"oldPath": "src/probability_theory/integration.lean", "newPath": "src/probability/integration.lean", "changes": []}, {"oldPath": "src/probability_theory/martingale.lean", "newPath": "src/probability/martingale.lean", "changes": []}, {"oldPath": "src/probability_theory/notation.lean", "newPath": "src/probability/notation.lean", "changes": []}, {"oldPath": "src/probability_theory/stopping.lean", "newPath": "src/probability/stopping.lean", "changes": []}]}, {"timestamp": 1644893483, "sha": "430faa98", "message": "chore(scripts): update nolints.txt (#12048)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1644891696, "sha": "a1283d0b", "message": "feat(analysis/inner_product_space/adjoint): `is_self_adjoint_iff_eq_a… (#12047)\n…djoint`\nA self-adjoint linear map is equal to its adjoint.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "is_self_adjoint_iff_eq_adjoint", ["linear_map"]]]}]}, {"timestamp": 1644888469, "sha": "92ac8ff8", "message": "feat(analysis/special_functions/complex/arg): `arg_coe_angle_eq_iff` (#12017)\nAdd a lemma that `arg` of two numbers coerced to `real.angle` is equal\nif and only if `arg` is equal.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_coe_angle_eq_iff", ["complex"]]]}]}, {"timestamp": 1644882087, "sha": "5dc720d1", "message": "chore(number_theory/padics/padic_norm): golf `prod_pow_prime_padic_val_nat` (#12034)\nA todo comment said \"this proof can probably be golfed with `factorization` stuff\"; it turns out that indeed it can be. :)", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}]}, {"timestamp": 1644875895, "sha": "f9bac45c", "message": "chore(category_theory/linear/yoneda): Removing some slow uses of `obviously` (#11979)\nProviding explicit proofs for `map_id'` and `map_comp'` rather than leaving them for `obviously` (and hence `tidy`) to fill in.\nSuggested by Kevin Buzzard in [this Zulip comment](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60tidy.60.20in.20mathlib.20proofs/near/271474418).\n(These are temporary changes until `obviously` can be tweaked to do this more quickly)", "changes": [{"oldPath": "src/category_theory/linear/yoneda.lean", "newPath": "src/category_theory/linear/yoneda.lean", "changes": []}]}, {"timestamp": 1644875894, "sha": "efdce094", "message": "refactor(topology/constructions): turn `cofinite_topology` into a type synonym (#11967)\nInstead of `cofinite_topology α : topological_space α`, define\n`cofinite_topology α := α` with an instance\n`topological_space (cofinite_topology α) := (old definition)`.\nThis way we can talk about cofinite topology without using `@` all\nover the place.\nAlso move `homeo_of_equiv_compact_to_t2.t1_counterexample` to\n`topology.alexandroff` and prove it for `alexandroff ℕ` and\n`cofinite_topology (alexandroff ℕ)`.", "changes": [{"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": [["add", "theorem", "not_continuous_cofinite_topology_of_symm", ["alexandroff"]], ["add", "theorem", "t1_counterexample", ["continuous", "homeo_of_equiv_compact_to_t2"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "is_closed_iff", ["cofinite_topology"]], ["add", "theorem", "is_open_iff'", ["cofinite_topology"]], ["add", "theorem", "is_open_iff", ["cofinite_topology"]], ["add", "theorem", "mem_nhds_iff", ["cofinite_topology"]], ["add", "theorem", "nhds_eq", ["cofinite_topology"]], ["add", "def", "of", ["cofinite_topology"]], ["mod", "def", "cofinite_topology", []], ["del", "theorem", "mem_nhds_cofinite", []], ["del", "theorem", "nhds_cofinite", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["del", "theorem", "t1_counterexample", ["continuous", "homeo_of_equiv_compact_to_t2"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "continuous_of", ["cofinite_topology"]], ["add", "theorem", "t1_space_iff_continuous_cofinite_of", []], ["del", "theorem", "t1_space_iff_le_cofinite", []], ["mod", "theorem", "t1_space_tfae", []]]}]}, {"timestamp": 1644875893, "sha": "ec11e5f5", "message": "feat(algebra/covariant_and_contravariant): covariance and monotonicity (#11815)\nSome simple lemmas about monotonicity and covariant operators. Proves things like `monotone f → monotone (λ n, f (3 + n))` by library search.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": [["add", "theorem", "covariant_of_const'", ["antitone"]], ["add", "theorem", "covariant_of_const", ["antitone"]], ["add", "theorem", "monotone_of_const", ["covariant"]], ["add", "theorem", "covariant_of_const'", ["monotone"]], ["add", "theorem", "covariant_of_const", ["monotone"]]]}]}, {"timestamp": 1644869866, "sha": "4ba83349", "message": "doc(number_theory/cyclotomic/gal): fix typo (#12038)", "changes": [{"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": []}]}, {"timestamp": 1644869864, "sha": "263833cf", "message": "feat(data/nat/factorization): add `le_of_mem_factorization` (#12032)\n`le_of_mem_factors`: every factor of `n` is `≤ n`\n`le_of_mem_factorization`: everything in `n.factorization.support` is `≤ n`", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "le_of_mem_factorization", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "le_of_mem_factors", ["nat"]]]}]}, {"timestamp": 1644869862, "sha": "1a3c0696", "message": "chore(data/equiv/set): more lemmas about prod (#12022)\nNote we don't need the `symm` lemmas for `prod.comm`, since `prod.comm` is involutive", "changes": [{"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": [["add", "theorem", "prod_assoc_image", ["equiv"]], ["add", "theorem", "prod_assoc_symm_image", ["equiv"]], ["add", "theorem", "prod_assoc_symm_preimage", ["equiv"]], ["add", "theorem", "prod_comm_image", ["equiv"]], ["add", "theorem", "prod_comm_preimage", ["equiv"]]]}]}, {"timestamp": 1644864035, "sha": "583ea58a", "message": "feat(data/list/big_operators): add `list.prod_map_mul` (#12029)\nThis is an analogue of the corresponding lemma `multiset.prod_map_mul`.", "changes": [{"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "prod_map_mul", ["list"]]]}]}, {"timestamp": 1644850015, "sha": "199e8ca8", "message": "feat(algebra/star/self_adjoint): generalize scalar action instances (#12021)\nThe `distrib_mul_action` instance did not require the underlying space to be a module.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["mod", "theorem", "coe_smul", ["self_adjoint"]]]}]}, {"timestamp": 1644850014, "sha": "5166aaab", "message": "feat(analysis/normed_space/linear_isometry): `trans_one`, `one_trans`, `refl_mul`, `mul_refl` (#12016)\nAdd variants of the `linear_isometry_equiv.trans_refl` and\n`linear_isometry_equiv.refl_trans` `simp` lemmas where `refl` is given\nas `1`. (`one_def` isn't a `simp` lemma in either direction, since\neither `refl` or `1` could be the appropriate simplest form depending\non the context, but it seems clear these expressions involving `trans`\nwith `1` are still appropriate to simplify.)\nAlso add corresponding `refl_mul` and `mul_refl`.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "mul_refl", ["linear_isometry_equiv"]], ["add", "theorem", "one_trans", ["linear_isometry_equiv"]], ["add", "theorem", "refl_mul", ["linear_isometry_equiv"]], ["add", "theorem", "trans_one", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1644840791, "sha": "d33792e6", "message": "feat(data/nat/factorization): add lemma `factorization_gcd` (#11605)\nFor positive `a` and `b`, `(gcd a b).factorization = a.factorization ⊓ b.factorization`; i.e. the power of prime `p` in `gcd a b` is the minimum of its powers in `a` and `b`. This is Theorem 1.12 in Apostol (1976) Introduction to Analytic Number Theory.", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factorization_gcd", ["nat"]]]}]}, {"timestamp": 1644834147, "sha": "132ea051", "message": "docs(computability/partrec_code): add docs (#11929)", "changes": [{"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}]}, {"timestamp": 1644834146, "sha": "dce5dd4c", "message": "feat(order/well_founded, set_theory/ordinal_arithmetic): `eq_strict_mono_iff_eq_range` (#11882)\nTwo strict monotonic functions with well-founded domains are equal iff their ranges are. We use this to golf `eq_enum_ord`.", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["add", "theorem", "eq_strict_mono_iff_eq_range", ["well_founded"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "eq_enum_ord", ["ordinal"]]]}]}, {"timestamp": 1644828105, "sha": "a87d431b", "message": "feat(topology/algebra): add `@[to_additive]` to some lemmas (#12018)\n* rename `embed_product` to `units.embed_product`, add `add_units.embed_product`;\n* add additive versions to lemmas about topology on `units M`;\n* add `add_opposite.topological_space` and `add_opposite.has_continuous_add`;\n* move `continuous_op` and `continuous_unop` to the `mul_opposite` namespace, add additive versions.", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["del", "def", "embed_product", []], ["add", "def", "embed_product", ["units"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["del", "theorem", "continuous_op", []], ["del", "theorem", "continuous_unop", []], ["add", "theorem", "continuous_op", ["mul_opposite"]], ["add", "theorem", "continuous_unop", ["mul_opposite"]], ["mod", "theorem", "continuous_coe", ["units"]], ["mod", "theorem", "continuous_embed_product", ["units"]]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}]}, {"timestamp": 1644825875, "sha": "2ceacc1a", "message": "feat(measure_theory/measure): more lemmas about `null_measurable_set`s (#12019)", "changes": [{"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "null_measurable_set_smul", ["measure_theory", "is_fundamental_domain"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "restrict_Union_ae", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply₀'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_restrict₀'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_restrict₀", ["measure_theory", "measure"]]]}]}, {"timestamp": 1644823208, "sha": "25ebf419", "message": "chore(analysis): move some code (#12008)\nMove the code that doesn't rely on `normed_space` from\n`analysis.normed_space.add_torsor` to\n`analysis.normed.group.add_torsor`.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed/group/add_torsor.lean", "changes": [["add", "theorem", "vsub", ["continuous"]], ["add", "theorem", "vsub", ["continuous_at"]], ["add", "theorem", "continuous_vsub", []], ["add", "theorem", "vsub", ["continuous_within_at"]], ["add", "theorem", "dist_eq_norm_vsub", []], ["add", "theorem", "dist_vadd_cancel_left", []], ["add", "theorem", "dist_vadd_cancel_right", []], ["add", "theorem", "dist_vadd_left", []], ["add", "theorem", "dist_vadd_right", []], ["add", "theorem", "dist_vadd_vadd_le", []], ["add", "theorem", "dist_vsub_cancel_left", []], ["add", "theorem", "dist_vsub_cancel_right", []], ["add", "theorem", "dist_vsub_vsub_le", []], ["add", "theorem", "edist_vadd_vadd_le", []], ["add", "theorem", "edist_vsub_vsub_le", []], ["add", "theorem", "line_map", ["filter", "tendsto"]], ["add", "theorem", "midpoint", ["filter", "tendsto"]], ["add", "theorem", "vsub", ["filter", "tendsto"]], ["add", "def", "const_vadd", ["isometric"]], ["add", "def", "const_vsub", ["isometric"]], ["add", "def", "vadd_const", ["isometric"]], ["add", "theorem", "vadd", ["lipschitz_with"]], ["add", "theorem", "vsub", ["lipschitz_with"]], ["add", "def", "metric_space_of_normed_group_of_add_torsor", []], ["add", "theorem", "nndist_vadd_vadd_le", []], ["add", "theorem", "nndist_vsub_vsub_le", []], ["add", "def", "pseudo_metric_space_of_normed_group_of_add_torsor", []], ["add", "theorem", "uniform_continuous_vadd", []], ["add", "theorem", "uniform_continuous_vsub", []], ["add", "theorem", "vadd_ball", []], ["add", "theorem", "vadd_closed_ball", []], ["add", "theorem", "vadd_sphere", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["del", "theorem", "vsub", ["continuous"]], ["del", "theorem", "vsub", ["continuous_at"]], ["del", "theorem", "continuous_vsub", []], ["del", "theorem", "vsub", ["continuous_within_at"]], ["del", "theorem", "dist_eq_norm_vsub", []], ["del", "theorem", "dist_vadd_cancel_left", []], ["del", "theorem", "dist_vadd_cancel_right", []], ["del", "theorem", "dist_vadd_left", []], ["del", "theorem", "dist_vadd_right", []], ["del", "theorem", "dist_vadd_vadd_le", []], ["del", "theorem", "dist_vsub_cancel_left", []], ["del", "theorem", "dist_vsub_cancel_right", []], ["del", "theorem", "dist_vsub_vsub_le", []], ["del", "theorem", "edist_vadd_vadd_le", []], ["del", "theorem", "edist_vsub_vsub_le", []], ["del", "theorem", "line_map", ["filter", "tendsto"]], ["del", "theorem", "midpoint", ["filter", "tendsto"]], ["del", "theorem", "vsub", ["filter", "tendsto"]], ["del", "def", "const_vadd", ["isometric"]], ["del", "def", "const_vsub", ["isometric"]], ["del", "def", "vadd_const", ["isometric"]], ["del", "theorem", "vadd", ["lipschitz_with"]], ["del", "theorem", "vsub", ["lipschitz_with"]], ["del", "def", "metric_space_of_normed_group_of_add_torsor", []], ["del", "theorem", "nndist_vadd_vadd_le", []], ["del", "theorem", "nndist_vsub_vsub_le", []], ["del", "def", "pseudo_metric_space_of_normed_group_of_add_torsor", []], ["del", "theorem", "uniform_continuous_vadd", []], ["del", "theorem", "uniform_continuous_vsub", []], ["del", "theorem", "vadd_ball", []], ["del", "theorem", "vadd_closed_ball", []], ["del", "theorem", "vadd_sphere", []]]}]}, {"timestamp": 1644819530, "sha": "26fd61c5", "message": "feat(analysis/complex/isometry): `rotation_trans` (#12015)\nAdd a `simp` lemma about the composition of two rotations.", "changes": [{"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": [["add", "theorem", "rotation_trans", []]]}]}, {"timestamp": 1644819529, "sha": "77dfac2e", "message": "feat(order/filter/bases): basis of infimum of filters (#11855)", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "has_basis_infi", ["filter"]]]}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": [["add", "theorem", "has_basis_pi", ["filter"]]]}]}, {"timestamp": 1644813759, "sha": "6550cbac", "message": "feat(order/partition/finpartition): Finite partitions (#9795)\nThis defines finite partitions along with quite a few constructions,", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "disjoint_sup_left", ["finset"]], ["mod", "theorem", "disjoint_sup_right", ["finset"]], ["mod", "theorem", "inf_sup_distrib_left", ["finset"]], ["mod", "theorem", "inf_sup_distrib_right", ["finset"]], ["mod", "theorem", "sup_inf_distrib_left", ["finset"]], ["mod", "theorem", "sup_inf_distrib_right", ["finset"]]]}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": [["add", "theorem", "mk_mem_product", ["finset"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "eq_of_le", ["set", "pairwise_disjoint"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/partition/finpartition.lean", "changes": [["add", "def", "atomise", ["finpartition"]], ["add", "theorem", "atomise_empty", ["finpartition"]], ["add", "def", "avoid", ["finpartition"]], ["add", "theorem", "bUnion_filter_atomise", ["finpartition"]], ["add", "theorem", "bUnion_parts", ["finpartition"]], ["add", "def", "bind", ["finpartition"]], ["add", "theorem", "card_atomise_le", ["finpartition"]], ["add", "theorem", "card_bind", ["finpartition"]], ["add", "theorem", "card_bot", ["finpartition"]], ["add", "theorem", "card_extend", ["finpartition"]], ["add", "theorem", "card_mono", ["finpartition"]], ["add", "theorem", "card_parts_le_card", ["finpartition"]], ["add", "def", "copy", ["finpartition"]], ["add", "theorem", "default_eq_empty", ["finpartition"]], ["add", "theorem", "exists_le_of_le", ["finpartition"]], ["add", "theorem", "exists_mem", ["finpartition"]], ["add", "def", "extend", ["finpartition"]], ["add", "def", "indiscrete", ["finpartition"]], ["add", "theorem", "mem_atomise", ["finpartition"]], ["add", "theorem", "mem_bind", ["finpartition"]], ["add", "theorem", "mem_bot_iff", ["finpartition"]], ["add", "theorem", "ne_bot", ["finpartition"]], ["add", "theorem", "nonempty_of_mem_parts", ["finpartition"]], ["add", "def", "of_erase", ["finpartition"]], ["add", "def", "of_subset", ["finpartition"]], ["add", "theorem", "parts_bot", ["finpartition"]], ["add", "theorem", "parts_eq_empty_iff", ["finpartition"]], ["add", "theorem", "parts_inf", ["finpartition"]], ["add", "theorem", "parts_nonempty", ["finpartition"]], ["add", "theorem", "parts_nonempty_iff", ["finpartition"]], ["add", "theorem", "sum_card_parts", ["finpartition"]], ["add", "structure", "finpartition", []], ["add", "def", "unique_finpartition", ["is_atom"]]]}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": []}]}, {"timestamp": 1644784573, "sha": "f91a32d1", "message": "feat(data/nat/factorization): add lemma `prod_prime_factors_dvd` (#11572)\nFor all `n : ℕ`, the product of the set of prime factors of `n` divides `n`, \ni.e. `(∏ (p : ℕ) in n.factors.to_finset, p) ∣ n`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "to_finset_prod_dvd_prod", ["multiset"]]]}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "prod_prime_factors_dvd", ["nat"]]]}]}, {"timestamp": 1644773857, "sha": "b08dc174", "message": "chore(number_theory/dioph): fix docs (#12011)", "changes": [{"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}]}, {"timestamp": 1644706533, "sha": "af1355c4", "message": "chore(measure_theory/integral/lebesgue): use to_additive when declaring instances and basic lemmas about simple functions (#12000)\nI also grouped similar lemmas together and added one or two missing ones.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["del", "theorem", "add_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "add_eq_map₂", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_add", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_div", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_inv", ["measure_theory", "simple_func"]], ["mod", "theorem", "coe_mul", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_neg", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_one", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_sub", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "const_one", ["measure_theory", "simple_func"]], ["del", "theorem", "const_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "div_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "inf_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "inv_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "map_add", ["measure_theory", "simple_func"]], ["add", "theorem", "map_mul", ["measure_theory", "simple_func"]], ["mod", "theorem", "mul_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "mul_eq_map₂", ["measure_theory", "simple_func"]], ["add", "theorem", "range_one", ["measure_theory", "simple_func"]], ["del", "theorem", "range_zero", ["measure_theory", "simple_func"]], ["del", "theorem", "sub_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "sup_eq_map₂", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1644703071, "sha": "4b217ea7", "message": "chore(topology/algebra): rename file to match renamed lemmas (#11996)\n#11940 renamed the lemmas from `continuous_smul₂` to `continuous_const_smul`, so this renames the file from `mul_action2` to `const_mul_action` accordingly.", "changes": [{"oldPath": "src/topology/algebra/mul_action2.lean", "newPath": "src/topology/algebra/const_mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}]}, {"timestamp": 1644694412, "sha": "4a4a3a90", "message": "chore(data/finset/basic): Golf and compress (#11987)\n* Move the `lattice` instance earlier so that it can be used to prove lemmas\n* Golf proofs\n* Compress statements within the style guidelines", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "finset_congr_refl", ["equiv"]], ["mod", "theorem", "finset_congr_symm", ["equiv"]], ["mod", "theorem", "bUnion_congr", ["finset"]], ["mod", "theorem", "bUnion_mono", ["finset"]], ["mod", "theorem", "bUnion_singleton_eq_self", ["finset"]], ["mod", "theorem", "bUnion_subset_bUnion_of_subset_left", ["finset"]], ["mod", "theorem", "coe_eq_empty", ["finset"]], ["mod", "theorem", "coe_to_list", ["finset"]], ["mod", "def", "cons", ["finset"]], ["mod", "theorem", "cons_subset_cons", ["finset"]], ["mod", "theorem", "cons_val", ["finset"]], ["mod", "theorem", "disj_union_eq_union", ["finset"]], ["mod", "theorem", "disjoint_bUnion_left", ["finset"]], ["mod", "theorem", "disjoint_bUnion_right", ["finset"]], ["mod", "theorem", "disjoint_filter", ["finset"]], ["mod", "theorem", "disjoint_filter_filter", ["finset"]], ["mod", "theorem", "disjoint_iff_disjoint_coe", ["finset"]], ["mod", "theorem", "disjoint_iff_inter_eq_empty", ["finset"]], ["mod", "theorem", "disjoint_iff_ne", ["finset"]], ["mod", "theorem", "disjoint_insert_left", ["finset"]], ["mod", "theorem", "disjoint_insert_right", ["finset"]], ["mod", "theorem", "disjoint_left", ["finset"]], ["mod", "theorem", "disjoint_of_subset_left", ["finset"]], ["mod", "theorem", "disjoint_of_subset_right", ["finset"]], ["mod", "theorem", "disjoint_right", ["finset"]], ["mod", "theorem", "disjoint_sdiff", ["finset"]], ["mod", "theorem", "disjoint_self_iff_empty", ["finset"]], ["mod", "theorem", "disjoint_singleton", ["finset"]], ["mod", "theorem", "disjoint_singleton_left", ["finset"]], ["mod", "theorem", "disjoint_singleton_right", ["finset"]], ["mod", "theorem", "disjoint_union_left", ["finset"]], ["mod", "theorem", "disjoint_union_right", ["finset"]], ["mod", "theorem", "disjoint_val", ["finset"]], ["mod", "theorem", "empty_inter", ["finset"]], ["mod", "theorem", "empty_sdiff", ["finset"]], ["mod", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["mod", "theorem", "eq_of_mem_of_not_mem_erase", ["finset"]], ["mod", "theorem", "eq_of_mem_singleton", ["finset"]], ["mod", "theorem", "erase_inj", ["finset"]], ["mod", "theorem", "erase_inj_on", ["finset"]], ["mod", "theorem", "exists_mem_insert", ["finset"]], ["mod", "theorem", "filter_eq", ["finset"]], ["mod", "theorem", "filter_ne'", ["finset"]], ["mod", "theorem", "filter_ne", ["finset"]], ["mod", "theorem", "forall_mem_insert", ["finset"]], ["mod", "theorem", "forall_mem_union", ["finset"]], ["mod", "theorem", "image_id", ["finset"]], ["mod", "theorem", "image_inter", ["finset"]], ["mod", "theorem", "image_subset_iff", ["finset"]], ["mod", "theorem", "inf_eq_inter", ["finset"]], ["mod", "theorem", "insert_eq_of_mem", ["finset"]], ["mod", "theorem", "insert_sdiff_of_mem", ["finset"]], ["mod", "theorem", "insert_subset", ["finset"]], ["mod", "theorem", "insert_union_distrib", ["finset"]], ["mod", "theorem", "inter_empty", ["finset"]], ["mod", "theorem", "inter_eq_left_iff_subset", ["finset"]], ["mod", "theorem", "inter_eq_right_iff_subset", ["finset"]], ["mod", "theorem", "inter_sdiff", ["finset"]], ["mod", "theorem", "inter_self", ["finset"]], ["mod", "theorem", "inter_subset_inter_left", ["finset"]], ["mod", "theorem", "inter_subset_inter_right", ["finset"]], ["mod", "theorem", "inter_val", ["finset"]], ["mod", "theorem", "left_eq_union_iff_subset", ["finset"]], ["mod", "theorem", "map_insert", ["finset"]], ["mod", "theorem", "map_subtype_subset", ["finset"]], ["mod", "theorem", "mem_bUnion", ["finset"]], ["mod", "theorem", "mem_cons", ["finset"]], ["mod", "theorem", "mem_cons_self", ["finset"]], ["mod", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["mod", "theorem", "mem_image_const", ["finset"]], ["mod", "theorem", "mem_image_const_self", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["mod", "theorem", "mem_insert_of_mem", ["finset"]], ["mod", "theorem", "mem_map'", ["finset"]], ["mod", "theorem", "mem_map_equiv", ["finset"]], ["mod", "theorem", "mem_map_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_erase", ["finset"]], ["mod", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["mod", "theorem", "mem_range_le", ["finset"]], ["mod", "theorem", "mem_union", ["finset"]], ["mod", "theorem", "mem_union_left", ["finset"]], ["mod", "theorem", "mem_union_right", ["finset"]], ["mod", "theorem", "mk_cons", ["finset"]], ["mod", "theorem", "monotone_filter_left", ["finset"]], ["mod", "theorem", "ne_insert_of_not_mem", ["finset"]], ["mod", "theorem", "ne_of_mem_erase", ["finset"]], ["mod", "theorem", "bUnion", ["finset", "nonempty"]], ["del", "theorem", "image", ["finset", "nonempty"]], ["mod", "theorem", "image_iff", ["finset", "nonempty"]], ["mod", "theorem", "nonempty_cons", ["finset"]], ["mod", "theorem", "not_disjoint_iff", ["finset"]], ["mod", "theorem", "not_mem_union", ["finset"]], ["mod", "def", "piecewise", ["finset"]], ["mod", "theorem", "piecewise_coe", ["finset"]], ["mod", "theorem", "piecewise_empty", ["finset"]], ["mod", "theorem", "piecewise_eq_of_mem", ["finset"]], ["mod", "theorem", "piecewise_insert", ["finset"]], ["mod", "theorem", "piecewise_insert_of_ne", ["finset"]], ["mod", "theorem", "piecewise_insert_self", ["finset"]], ["mod", "theorem", "range_add_one", ["finset"]], ["mod", "theorem", "right_eq_union_iff_subset", ["finset"]], ["mod", "theorem", "sdiff_disjoint", ["finset"]], ["mod", "theorem", "sdiff_empty", ["finset"]], ["mod", "theorem", "sdiff_eq_self", ["finset"]], ["mod", "theorem", "sdiff_eq_self_iff_disjoint", ["finset"]], ["mod", "theorem", "sdiff_eq_self_of_disjoint", ["finset"]], ["mod", "theorem", "sdiff_erase", ["finset"]], ["mod", "theorem", "sdiff_idem", ["finset"]], ["mod", "theorem", "sdiff_insert_of_not_mem", ["finset"]], ["mod", "theorem", "sdiff_inter_distrib_right", ["finset"]], ["mod", "theorem", "sdiff_inter_self", ["finset"]], ["mod", "theorem", "sdiff_inter_self_left", ["finset"]], ["mod", "theorem", "sdiff_inter_self_right", ["finset"]], ["mod", "theorem", "sdiff_sdiff_self_left", ["finset"]], ["mod", "theorem", "sdiff_self", ["finset"]], ["mod", "theorem", "sdiff_ssubset", ["finset"]], ["mod", "theorem", "sdiff_subset", ["finset"]], ["mod", "theorem", "sdiff_subset_sdiff", ["finset"]], ["mod", "theorem", "sdiff_union_distrib", ["finset"]], ["mod", "theorem", "sdiff_union_inter", ["finset"]], ["mod", "theorem", "singleton_subset_iff", ["finset"]], ["mod", "theorem", "singleton_subset_set_iff", ["finset"]], ["mod", "theorem", "ssubset_iff", ["finset"]], ["mod", "theorem", "ssubset_insert", ["finset"]], ["mod", "theorem", "subset_bUnion_of_mem", ["finset"]], ["mod", "theorem", "subset_image_iff", ["finset"]], ["mod", "theorem", "subset_insert", ["finset"]], ["mod", "theorem", "subset_inter", ["finset"]], ["mod", "theorem", "subset_inter_iff", ["finset"]], ["add", "theorem", "subset_singleton_iff'", ["finset"]], ["mod", "theorem", "sup_eq_union", ["finset"]], ["mod", "theorem", "to_list_empty", ["finset"]], ["mod", "theorem", "union_assoc", ["finset"]], ["mod", "theorem", "union_comm", ["finset"]], ["mod", "theorem", "union_eq_left_iff_subset", ["finset"]], ["mod", "theorem", "union_eq_right_iff_subset", ["finset"]], ["mod", "theorem", "union_idempotent", ["finset"]], ["mod", "theorem", "union_left_comm", ["finset"]], ["mod", "theorem", "union_right_comm", ["finset"]], ["mod", "theorem", "union_sdiff_distrib", ["finset"]], ["mod", "theorem", "union_sdiff_of_subset", ["finset"]], ["mod", "theorem", "union_sdiff_self", ["finset"]], ["mod", "theorem", "union_subset", ["finset"]], ["mod", "theorem", "union_subset_iff", ["finset"]], ["mod", "theorem", "union_subset_left", ["finset"]], ["mod", "theorem", "union_subset_right", ["finset"]], ["mod", "theorem", "union_subset_union", ["finset"]], ["mod", "theorem", "union_val", ["finset"]], ["mod", "theorem", "union_val_nd", ["finset"]], ["mod", "theorem", "val_le_iff_val_subset", ["finset"]], ["mod", "theorem", "mem_finset_image", ["function", "injective"]], ["mod", "theorem", "disjoint_to_finset_iff_disjoint", ["list"]], ["mod", "theorem", "mem_to_finset", ["list"]], ["mod", "theorem", "perm_of_nodup_nodup_to_finset_eq", ["list"]], ["mod", "theorem", "ext", ["list", "to_finset"]], ["mod", "theorem", "to_finset_append", ["list"]], ["mod", "theorem", "to_finset_cons", ["list"]], ["mod", "theorem", "to_finset_eq", ["list"]], ["mod", "theorem", "to_finset_eq_empty_iff", ["list"]], ["mod", "theorem", "to_finset_eq_iff_perm_erase_dup", ["list"]], ["mod", "theorem", "to_finset_eq_of_perm", ["list"]], ["mod", "theorem", "to_finset_nil", ["list"]], ["mod", "theorem", "to_finset_repeat_of_ne_zero", ["list"]], ["mod", "theorem", "to_finset_reverse", ["list"]], ["mod", "theorem", "mem_to_finset", ["multiset"]], ["mod", "theorem", "to_finset_add", ["multiset"]], ["mod", "theorem", "to_finset_inter", ["multiset"]], ["mod", "theorem", "to_finset_singleton", ["multiset"]], ["mod", "theorem", "to_finset_subset", ["multiset"]], ["mod", "theorem", "to_finset_union", ["multiset"]], ["mod", "theorem", "to_finset_zero", ["multiset"]]]}]}, {"timestamp": 1644691531, "sha": "5f70cd95", "message": "chore(measure_theory/function/ae_eq_fun): replace topological assumptions by measurability assumptions (#11981)\nSince the introduction of the `has_measurable_*` typeclasses, the topological assumptions in that file are only used to derive the measurability assumptions. This PR removes that step.", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}]}, {"timestamp": 1644686627, "sha": "b72300f3", "message": "feat(group_theory/sylow): all max groups normal imply sylow normal (#11841)", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "normal_of_all_max_subgroups_normal", ["sylow"]]]}]}, {"timestamp": 1644682672, "sha": "06e7f767", "message": "feat(analysis/analytic/basic): add uniqueness results for power series (#11896)\nThis establishes that if a function has two power series representations on balls of positive radius, then the corresponding formal multilinear series are equal; this is only for the one-dimensional case (i.e., for functions from the scalar field). Consequently, one may exchange the radius of convergence between these power series.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "continuous_multilinear_map_apply_eq_zero", ["asymptotics", "is_O"]], ["add", "theorem", "apply_eq_zero", ["has_fpower_series_at"]], ["add", "theorem", "eq_formal_multilinear_series", ["has_fpower_series_at"]], ["add", "theorem", "eq_zero", ["has_fpower_series_at"]], ["add", "theorem", "exchange_radius", ["has_fpower_series_on_ball"]]]}]}, {"timestamp": 1644657649, "sha": "91cc4ae6", "message": "feat(order/category/BoundedOrder): The category of bounded orders (#11961)\nDefine `BoundedOrder`, the category of bounded orders with bounded order homs along with its forgetful functors to `PartialOrder` and `Bipointed`.", "changes": [{"oldPath": null, "newPath": "src/order/category/BoundedOrder.lean", "changes": [["add", "def", "dual", ["BoundedOrder"]], ["add", "def", "dual_equiv", ["BoundedOrder"]], ["add", "def", "mk", ["BoundedOrder", "iso"]], ["add", "def", "of", ["BoundedOrder"]], ["add", "structure", "BoundedOrder", []], ["add", "theorem", "BoundedOrder_dual_comp_forget_to_Bipointed", []], ["add", "theorem", "BoundedOrder_dual_comp_forget_to_PartialOrder", []]]}, {"oldPath": "src/order/category/PartialOrder.lean", "newPath": "src/order/category/PartialOrder.lean", "changes": [["del", "theorem", "PartialOrder_dual_equiv_comp_forget_to_Preorder", []], ["add", "theorem", "PartialOrder_to_dual_comp_forget_to_Preorder", []]]}, {"oldPath": "src/order/hom/bounded.lean", "newPath": "src/order/hom/bounded.lean", "changes": []}]}, {"timestamp": 1644653248, "sha": "1b5f8c28", "message": "chore(topology/algebra/ordered/*): Rename folder (#11988)\nRename `topology.algebra.ordered` to `topology.algebra.order` to match `order`, `algebra.order`, `topology.order`.", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/compact.lean", "newPath": "src/topology/algebra/order/compact.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/extend_from.lean", "newPath": "src/topology/algebra/order/extend_from.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/intermediate_value.lean", "newPath": "src/topology/algebra/order/intermediate_value.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/left_right.lean", "newPath": "src/topology/algebra/order/left_right.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/liminf_limsup.lean", "newPath": "src/topology/algebra/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/monotone_continuity.lean", "newPath": "src/topology/algebra/order/monotone_continuity.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/monotone_convergence.lean", "newPath": "src/topology/algebra/order/monotone_convergence.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/proj_Icc.lean", "newPath": "src/topology/algebra/order/proj_Icc.lean", "changes": []}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/ordered.lean", "newPath": "src/topology/continuous_function/ordered.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/order/lattice.lean", "newPath": "src/topology/order/lattice.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}]}, {"timestamp": 1644653247, "sha": "7bebee66", "message": "chore(category_theory/monad/equiv_mon): Removing some slow uses of `obviously` (#11980)\nProviding explicit proofs for various fields rather than leaving them for `obviously` (and hence `tidy`) to fill in.\nFollow-up to this suggestion by Kevin Buzzard in [this Zulip comment](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60tidy.60.20in.20mathlib.20proofs/near/271474418).\n(These are temporary changes until `obviously` can be tweaked to do this more quickly)", "changes": [{"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": []}]}, {"timestamp": 1644653245, "sha": "71e90063", "message": "chore(topology/algebra/module/multilinear): relax typeclass arguments (#11972)\nPreviously `module R' (continuous_multilinear_map A M₁ M₂)` required `algebra R' A`, but now it only requires `smul_comm_class A R' M₂`.\nThe old instance required (modulo argument reordering):\n```lean\ndef continuous_multilinear_map.module {ι : Type v} {M₁ : ι → Type w₁} {M₂ : Type w₂} [decidable_eq ι]\n [Π i, add_comm_monoid (M₁ i)] [add_comm_monoid M₂] [Π i, topological_space (M₁ i)]\n [topological_space M₂] [has_continuous_add M₂] \n {R' : Type u_1} {A : Type u_2} [comm_semiring R'] [semiring A] [topological_space R']\n [Π i, module A (M₁ i)] [module A M₂] [module R' M₂] [has_continuous_smul R' M₂]\n [algebra R' A] [is_scalar_tower R' A M₂] :\n module R' (continuous_multilinear_map A M₁ M₂)\n```\nwhile the new one requires\n```lean\ndef continuous_multilinear_map.module {ι : Type v} {M₁ : ι → Type w₁} {M₂ : Type w₂} [decidable_eq ι]\n [Π i, add_comm_monoid (M₁ i)] [add_comm_monoid M₂] [Π i, topological_space (M₁ i)]\n [topological_space M₂] [has_continuous_add M₂]\n {R' : Type u_1} {A : Type u_2} [semiring R'] [semiring A] [topological_space R'] -- note: `R'` not commutative any more\n [Π i, module A (M₁ i)] [module A M₂] [module R' M₂] [has_continuous_smul R' M₂]\n [smul_comm_class A R' M₂] : -- note: `R'` needs no action at all on `A`\n module R' (continuous_multilinear_map A M₁ M₂)\n```\nThis change also adds intermediate `mul_action` and `distrib_mul_action` instances which apply in weaker situations.\nAs a result of this weakening, the typeclass arguments to `continuous_multilinear_map.to_normed_space` can also be weakened, and a weird instance workaround can be removed.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": [["add", "theorem", "to_multilinear_map_zero", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1644653243, "sha": "822244f7", "message": "refactor(measure_theory/group/basic): rename and split (#11952)\n* Rename `measure_theory/group/basic` -> `measure_theory/group/measure`. It was not the bottom file in this folder in the import hierarchy (arithmetic is below it).\n* Split off some results to `measure_theory/group/integration`. This reduces imports in some files, and makes the organization more clear. Furthermore, I will add some integrability results and more integrals in a follow-up PR.\n* Prove a general instance `pi.is_mul_left_invariant`\n* Remove lemmas specifically about `volume` on `real` in favor on the general lemmas.\n```lean\nreal.map_volume_add_left -> map_add_left_eq_self\nreal.map_volume_pi_add_left -> map_add_left_eq_self\nreal.volume_preimage_add_left -> measure_preimage_add\nreal.volume_pi_preimage_add_left -> measure_preimage_add\nreal.map_volume_add_right -> map_add_right_eq_self \nreal.volume_preimage_add_right -> measure_preimage_add_right\n```", "changes": [{"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/group/integration.lean", "changes": [["add", "theorem", "integral_mul_left_eq_self", ["measure_theory"]], ["add", "theorem", "integral_mul_right_eq_self", ["measure_theory"]], ["add", "theorem", "integral_zero_of_mul_left_eq_neg", ["measure_theory"]], ["add", "theorem", "integral_zero_of_mul_right_eq_neg", ["measure_theory"]], ["add", "theorem", "lintegral_eq_zero_of_is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "lintegral_mul_left_eq_self", ["measure_theory"]], ["add", "theorem", "lintegral_mul_right_eq_self", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/measure.lean", "changes": [["del", "theorem", "lintegral_eq_zero_of_is_mul_left_invariant", ["measure_theory"]], ["del", "theorem", "lintegral_mul_left_eq_self", ["measure_theory"]], ["del", "theorem", "lintegral_mul_right_eq_self", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["del", "theorem", "integral_mul_left_eq_self", ["measure_theory"]], ["del", "theorem", "integral_mul_right_eq_self", ["measure_theory"]], ["del", "theorem", "integral_zero_of_mul_left_eq_neg", ["measure_theory"]], ["del", "theorem", "integral_zero_of_mul_right_eq_neg", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/periodic.lean", "newPath": "src/measure_theory/integral/periodic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["del", "theorem", "map_volume_add_left", ["real"]], ["del", "theorem", "map_volume_add_right", ["real"]], ["del", "theorem", "map_volume_pi_add_left", ["real"]], ["del", "theorem", "volume_pi_preimage_add_left", ["real"]], ["del", "theorem", "volume_preimage_add_left", ["real"]], ["del", "theorem", "volume_preimage_add_right", ["real"]]]}, {"oldPath": "src/number_theory/liouville/measure.lean", "newPath": "src/number_theory/liouville/measure.lean", "changes": []}]}, {"timestamp": 1644649915, "sha": "60d32337", "message": "feat(topology/instances/real): metric space structure on nat (#11963)\nMostly copied from the already existing int version.", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "preimage_Icc", ["nat"]], ["add", "theorem", "preimage_Ici", ["nat"]], ["add", "theorem", "preimage_Ico", ["nat"]], ["add", "theorem", "preimage_Iic", ["nat"]], ["add", "theorem", "preimage_Iio", ["nat"]], ["add", "theorem", "preimage_Ioc", ["nat"]], ["add", "theorem", "preimage_Ioi", ["nat"]], ["add", "theorem", "preimage_Ioo", ["nat"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "closed_ball_eq_Icc", ["nat"]], ["add", "theorem", "closed_embedding_coe_rat", ["nat"]], ["add", "theorem", "closed_embedding_coe_real", ["nat"]], ["add", "theorem", "dist_cast_rat", ["nat"]], ["add", "theorem", "dist_cast_real", ["nat"]], ["add", "theorem", "dist_coe_int", ["nat"]], ["add", "theorem", "dist_eq", ["nat"]], ["add", "theorem", "pairwise_one_le_dist", ["nat"]], ["add", "theorem", "preimage_ball", ["nat"]], ["add", "theorem", "preimage_closed_ball", ["nat"]], ["add", "theorem", "uniform_embedding_coe_rat", ["nat"]], ["add", "theorem", "uniform_embedding_coe_real", ["nat"]]]}]}, {"timestamp": 1644633984, "sha": "dff8393c", "message": "feat(tactic/lint): add unprintable tactic linter (#11725)\nThis linter will banish the recurring issue of tactics for which `param_desc` fails, leaving a nasty error message in hovers.", "changes": [{"oldPath": "src/ring_theory/witt_vector/init_tail.lean", "newPath": "src/ring_theory/witt_vector/init_tail.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/itauto.lean", "newPath": "src/tactic/itauto.lean", "changes": []}, {"oldPath": "src/tactic/linear_combination.lean", "newPath": "src/tactic/linear_combination.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1644624182, "sha": "227293b5", "message": "feat(category_theory/category/Twop): The category of two-pointed types (#11844)\nDefine `Twop`, the category of two-pointed types. Also add `Pointed_to_Bipointed` and remove the erroneous TODOs.", "changes": [{"oldPath": "src/category_theory/category/Bipointed.lean", "newPath": "src/category_theory/category/Bipointed.lean", "changes": [["add", "def", "Pointed_to_Bipointed", []], ["add", "def", "Pointed_to_Bipointed_comp_Bipointed_to_Pointed_fst", []], ["add", "def", "Pointed_to_Bipointed_comp_Bipointed_to_Pointed_snd", []], ["del", "theorem", "Pointed_to_Bipointed_fst_comp", []], ["add", "theorem", "Pointed_to_Bipointed_fst_comp_swap", []], ["del", "theorem", "Pointed_to_Bipointed_snd_comp", []], ["add", "theorem", "Pointed_to_Bipointed_snd_comp_swap", []]]}, {"oldPath": "src/category_theory/category/Pointed.lean", "newPath": "src/category_theory/category/Pointed.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/category/Twop.lean", "changes": [["add", "def", "Pointed_to_Twop_fst", []], ["add", "theorem", "Pointed_to_Twop_fst_comp_forget_to_Bipointed", []], ["add", "theorem", "Pointed_to_Twop_fst_comp_swap", []], ["add", "def", "Pointed_to_Twop_fst_forget_comp_Bipointed_to_Pointed_fst_adjunction", []], ["add", "def", "Pointed_to_Twop_snd", []], ["add", "theorem", "Pointed_to_Twop_snd_comp_forget_to_Bipointed", []], ["add", "theorem", "Pointed_to_Twop_snd_comp_swap", []], ["add", "def", "Pointed_to_Twop_snd_forget_comp_Bipointed_to_Pointed_snd_adjunction", []], ["add", "def", "of", ["Twop"]], ["add", "def", "swap", ["Twop"]], ["add", "def", "swap_equiv", ["Twop"]], ["add", "theorem", "swap_equiv_symm", ["Twop"]], ["add", "def", "to_Bipointed", ["Twop"]], ["add", "structure", "Twop", []], ["add", "theorem", "Twop_swap_comp_forget_to_Bipointed", []]]}]}, {"timestamp": 1644614720, "sha": "788240cf", "message": "chore(order/cover): Rename `covers` to `covby` (#11984)\nThis matches the way it is written. `a ⋖ b` means that `b` covers `a`, that is `a` is covered by `b`.", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "bot_covby_iff", []], ["add", "theorem", "bot_covby_top", []], ["del", "theorem", "bot_covers_iff", []], ["del", "theorem", "bot_covers_top", []], ["add", "theorem", "covby_top_iff", []], ["del", "theorem", "covers_top_iff", []]]}, {"oldPath": "src/order/cover.lean", "newPath": "src/order/cover.lean", "changes": [["add", "theorem", "apply_covby_apply_iff", []], ["del", "theorem", "apply_covers_apply_iff", []], ["add", "theorem", "Icc_eq", ["covby"]], ["add", "theorem", "Ico_eq", ["covby"]], ["add", "theorem", "Ioc_eq", ["covby"]], ["add", "theorem", "Ioo_eq", ["covby"]], ["add", "theorem", "image", ["covby"]], ["add", "theorem", "le", ["covby"]], ["add", "theorem", "lt", ["covby"]], ["add", "theorem", "ne'", ["covby"]], ["add", "theorem", "of_image", ["covby"]], ["add", "def", "covby", []], ["del", "theorem", "Icc_eq", ["covers"]], ["del", "theorem", "Ico_eq", ["covers"]], ["del", "theorem", "Ioc_eq", ["covers"]], ["del", "theorem", "Ioo_eq", ["covers"]], ["del", "theorem", "image", ["covers"]], ["del", "theorem", "le", ["covers"]], ["del", "theorem", "lt", ["covers"]], ["del", "theorem", "ne'", ["covers"]], ["del", "theorem", "of_image", ["covers"]], ["del", "def", "covers", []], ["add", "theorem", "densely_ordered_iff_forall_not_covby", []], ["del", "theorem", "densely_ordered_iff_forall_not_covers", []], ["add", "theorem", "not_covby", []], ["add", "theorem", "not_covby_iff", []], ["del", "theorem", "not_covers", []], ["del", "theorem", "not_covers_iff", []], ["add", "theorem", "of_dual_covby_of_dual_iff", []], ["del", "theorem", "of_dual_covers_of_dual_iff", []], ["add", "theorem", "to_dual_covby_to_dual_iff", []], ["del", "theorem", "to_dual_covers_to_dual_iff", []]]}, {"oldPath": "src/order/succ_pred/basic.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["add", "theorem", "pred_eq", ["covby"]], ["add", "theorem", "succ_eq", ["covby"]], ["add", "theorem", "covby_iff_pred_eq", []], ["add", "theorem", "covby_iff_succ_eq", []], ["del", "theorem", "pred_eq", ["covers"]], ["del", "theorem", "succ_eq", ["covers"]], ["del", "theorem", "covers_iff_pred_eq", []], ["del", "theorem", "covers_iff_succ_eq", []], ["add", "theorem", "pred_covby", ["pred_order"]], ["add", "theorem", "pred_covby_of_nonempty_Iio", ["pred_order"]], ["del", "theorem", "pred_covers", ["pred_order"]], ["del", "theorem", "pred_covers_of_nonempty_Iio", ["pred_order"]], ["mod", "theorem", "pred_succ", []], ["add", "theorem", "covby_succ", ["succ_order"]], ["add", "theorem", "covby_succ_of_nonempty_Ioi", ["succ_order"]], ["del", "theorem", "covers_succ", ["succ_order"]], ["del", "theorem", "covers_succ_of_nonempty_Ioi", ["succ_order"]], ["mod", "theorem", "succ_pred", []]]}]}, {"timestamp": 1644608946, "sha": "3fcb7380", "message": "doc(data/finset/basic): correct some function names (#11983)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}]}, {"timestamp": 1644608944, "sha": "515ce797", "message": "refactor(data/nat/factorization): Use factorization instead of factors.count (#11384)\nRefactor to use `factorization` over `factors.count`, and adjust lemmas to be stated in terms of the former instead.", "changes": [{"oldPath": "src/algebra/is_prime_pow.lean", "newPath": "src/algebra/is_prime_pow.lean", "changes": []}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["del", "theorem", "div_factorization_eq_tsub_of_dvd", ["nat"]], ["add", "theorem", "dvd_of_mem_factorization", ["nat"]], ["add", "theorem", "eq_of_factorization_eq", ["nat"]], ["add", "theorem", "factorization_div", ["nat"]], ["del", "theorem", "factorization_eq_count", ["nat"]], ["add", "theorem", "factorization_eq_of_coprime_left", ["nat"]], ["add", "theorem", "factorization_eq_of_coprime_right", ["nat"]], ["add", "theorem", "factorization_le_factorization_mul_left", ["nat"]], ["add", "theorem", "factorization_le_factorization_mul_right", ["nat"]], ["add", "theorem", "factorization_mul_apply_of_coprime", ["nat"]], ["mod", "theorem", "factorization_pow", ["nat"]], ["mod", "theorem", "factorization_zero", ["nat"]], ["add", "theorem", "factors_count_eq", ["nat"]], ["mod", "theorem", "pow_factorization_dvd", ["nat"]], ["add", "theorem", "pow_succ_factorization_not_dvd", ["nat"]], ["add", "theorem", "factorization_pos_of_dvd", ["nat", "prime"]], ["mod", "theorem", "factorization_pow", ["nat", "prime"]], ["add", "def", "rec_on_mul", ["nat"]], ["add", "def", "rec_on_pos_prime_coprime", ["nat"]], ["add", "def", "rec_on_prime_coprime", ["nat"]], ["add", "def", "rec_on_prime_pow", ["nat"]], ["mod", "theorem", "support_factorization", ["nat"]]]}, {"oldPath": "src/data/nat/mul_ind.lean", "newPath": null, "changes": [["del", "def", "rec_on_mul", ["nat"]], ["del", "def", "rec_on_pos_prime_coprime", ["nat"]], ["del", "def", "rec_on_prime_coprime", ["nat"]], ["del", "def", "rec_on_prime_pow", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "count_factors_mul_of_coprime", ["nat"]], ["del", "theorem", "count_factors_mul_of_pos", ["nat"]], ["del", "theorem", "eq_of_count_factors_eq", ["nat"]], ["mod", "theorem", "eq_of_perm_factors", ["nat"]], ["del", "theorem", "factors_count_eq_of_coprime_left", ["nat"]], ["del", "theorem", "factors_count_eq_of_coprime_right", ["nat"]], ["del", "theorem", "factors_count_pow", ["nat"]], ["del", "theorem", "le_factors_count_mul_left", ["nat"]], ["del", "theorem", "le_factors_count_mul_right", ["nat"]], ["mod", "theorem", "mem_factors_iff_dvd", ["nat"]], ["mod", "theorem", "mem_factors_mul_left", ["nat"]], ["mod", "theorem", "mem_factors_mul_of_coprime", ["nat"]], ["mod", "theorem", "mem_factors_mul_right", ["nat"]], ["add", "theorem", "perm_factors_mul", ["nat"]], ["del", "theorem", "perm_factors_mul_of_pos", ["nat"]], ["del", "theorem", "pow_factors_count_dvd", ["nat"]], ["mod", "theorem", "prod_factors", ["nat"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": [["add", "theorem", "exists_order_of_eq_pow_factorization_exponent", ["nat", "prime"]], ["del", "theorem", "exists_order_of_eq_pow_padic_val_nat_exponent", ["nat", "prime"]]]}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["add", "theorem", "padic_val_nat_eq_factorization", []], ["del", "theorem", "padic_val_nat_eq_factors_count", []]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}]}, {"timestamp": 1644603943, "sha": "da76d218", "message": "feat(measure_theory/measure/haar_quotient): Pushforward of Haar measure is Haar (#11593)\nFor `G` a topological group with discrete subgroup `Γ`, the pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. When `Γ` is normal (and under other certain suitable conditions), we show that this measure is the Haar measure on the quotient group `G ⧸ Γ`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "def", "opposite", ["subgroup"]], ["add", "def", "opposite_equiv", ["subgroup"]], ["add", "theorem", "smul_opposite_image_mul_preimage", ["subgroup"]], ["add", "theorem", "smul_opposite_mul", ["subgroup"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["add", "theorem", "measurable_mul_op", []], ["add", "theorem", "measurable_mul_unop", []], ["del", "theorem", "measurable_op", []], ["del", "theorem", "measurable_unop", []]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "measure_set_eq", ["measure_theory", "is_fundamental_domain"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/haar_quotient.lean", "changes": [["add", "theorem", "is_mul_left_invariant_map", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "map_restrict_quotient", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "smul", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "smul_invariant_measure_map", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "smul_invariant_measure", ["subgroup"]]]}]}, {"timestamp": 1644594340, "sha": "edefc116", "message": "feat(number_theory/number_field/basic) : the ring of integers of a number field is not a field (#11956)", "changes": [{"oldPath": "src/data/int/char_zero.lean", "newPath": "src/data/int/char_zero.lean", "changes": [["add", "theorem", "injective_int", ["ring_hom"]]]}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["add", "theorem", "not_is_field", ["int"]], ["add", "theorem", "not_is_field", ["number_field", "ring_of_integers"]]]}]}, {"timestamp": 1644585047, "sha": "1b78b4d1", "message": "feat(measure_theory/function/ae_eq_of_integral): remove a few unnecessary `@` (#11974)\nThose `@` were necessary at the time, but `measurable_set.inter` changed and they can now be removed.", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}]}, {"timestamp": 1644585046, "sha": "114752ca", "message": "fix(algebra/monoid_algebra/basic): remove an instance that forms a diamond (#11918)\nThis turns `monoid_algebra.comap_distrib_mul_action_self` from an instance to a def.\nThis also adds some tests to prove that this diamond exists.\nNote that this diamond is not just non-defeq, it's also just plain not equal.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Schur's.20lemma/near/270990004)", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "def", "comap_distrib_mul_action_self", ["monoid_algebra"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1644578637, "sha": "492393b0", "message": "feat(model_theory/direct_limit): Direct limits of first-order structures (#11789)\nConstructs the direct limit of a directed system of first-order embeddings", "changes": [{"oldPath": "src/data/fintype/order.lean", "newPath": "src/data/fintype/order.lean", "changes": [["add", "theorem", "fintype_le", ["directed"]], ["add", "theorem", "bdd_above_range", ["fintype"]], ["add", "theorem", "exists_le", ["fintype"]]]}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "lift_comp_mk", ["quotient"]]]}, {"oldPath": null, "newPath": "src/model_theory/direct_limit.lean", "changes": [["add", "theorem", "comp_unify", ["first_order", "language", "direct_limit"]], ["add", "theorem", "equiv_iff", ["first_order", "language", "direct_limit"]], ["add", "theorem", "exists_of", ["first_order", "language", "direct_limit"]], ["add", "theorem", "exists_quotient_mk_sigma_mk_eq", ["first_order", "language", "direct_limit"]], ["add", "theorem", "exists_unify_eq", ["first_order", "language", "direct_limit"]], ["add", "theorem", "fun_map_equiv_unify", ["first_order", "language", "direct_limit"]], ["add", "theorem", "fun_map_quotient_mk_sigma_mk", ["first_order", "language", "direct_limit"]], ["add", "theorem", "fun_map_unify_equiv", ["first_order", "language", "direct_limit"]], ["add", "theorem", "lift_of", ["first_order", "language", "direct_limit"]], ["add", "theorem", "lift_quotient_mk_sigma_mk", ["first_order", "language", "direct_limit"]], ["add", "theorem", "lift_unique", ["first_order", "language", "direct_limit"]], ["add", "theorem", "of_apply", ["first_order", "language", "direct_limit"]], ["add", "theorem", "of_f", ["first_order", "language", "direct_limit"]], ["add", "theorem", "rel_map_equiv_unify", ["first_order", "language", "direct_limit"]], ["add", "theorem", "rel_map_quotient_mk_sigma_mk", ["first_order", "language", "direct_limit"]], ["add", "theorem", "rel_map_unify_equiv", ["first_order", "language", "direct_limit"]], ["add", "def", "setoid", ["first_order", "language", "direct_limit"]], ["add", "def", "unify", ["first_order", "language", "direct_limit"]], ["add", "theorem", "unify_sigma_mk_self", ["first_order", "language", "direct_limit"]], ["add", "def", "direct_limit", ["first_order", "language"]], ["add", "theorem", "map_map", ["first_order", "language", "directed_system"]], ["add", "theorem", "map_self", ["first_order", "language", "directed_system"]]]}, {"oldPath": "src/model_theory/quotients.lean", "newPath": "src/model_theory/quotients.lean", "changes": [["add", "theorem", "rel_map_quotient_mk", ["first_order", "language"]]]}]}, {"timestamp": 1644565053, "sha": "024aef0b", "message": "feat(data/pi): provide `pi.mul_single` (#11849)\nthe additive version was previously called `pi.single`, to this requires refactoring existing code.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["del", "def", "single", ["add_monoid_hom"]], ["add", "def", "single", ["monoid_hom"]], ["add", "def", "single", ["one_hom"]], ["add", "theorem", "mul_single_inv", ["pi"]], ["add", "theorem", "mul_single_mul", ["pi"]], ["del", "theorem", "single_add", ["pi"]], ["add", "theorem", "single_div", ["pi"]], ["del", "theorem", "single_neg", ["pi"]], ["del", "theorem", "single_sub", ["pi"]], ["add", "theorem", "update_eq_div_mul_single", ["pi"]], ["del", "theorem", "update_eq_sub_add_single", ["pi"]], ["del", "def", "single", ["zero_hom"]]]}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "apply_mul_single", ["pi"]], ["add", "theorem", "apply_mul_single₂", ["pi"]], ["del", "theorem", "apply_single", ["pi"]], ["del", "theorem", "apply_single₂", ["pi"]], ["add", "def", "mul_single", ["pi"]], ["add", "theorem", "mul_single_apply", ["pi"]], ["add", "theorem", "mul_single_comm", ["pi"]], ["add", "theorem", "mul_single_eq_of_ne'", ["pi"]], ["add", "theorem", "mul_single_eq_of_ne", ["pi"]], ["add", "theorem", "mul_single_eq_same", ["pi"]], ["add", "theorem", "mul_single_inj", ["pi"]], ["add", "theorem", "mul_single_injective", ["pi"]], ["add", "theorem", "mul_single_one", ["pi"]], ["add", "theorem", "mul_single_op", ["pi"]], ["add", "theorem", "mul_single_op₂", ["pi"]], ["del", "def", "single", ["pi"]], ["del", "theorem", "single_apply", ["pi"]], ["del", "theorem", "single_comm", ["pi"]], ["del", "theorem", "single_eq_of_ne'", ["pi"]], ["del", "theorem", "single_eq_of_ne", ["pi"]], ["del", "theorem", "single_eq_same", ["pi"]], ["del", "theorem", "single_inj", ["pi"]], ["del", "theorem", "single_injective", ["pi"]], ["del", "theorem", "single_op", ["pi"]], ["del", "theorem", "single_op₂", ["pi"]], ["del", "theorem", "single_zero", ["pi"]], ["add", "theorem", "pi_mul_single_eq", ["subsingleton"]], ["del", "theorem", "pi_single_eq", ["subsingleton"]]]}]}, {"timestamp": 1644549315, "sha": "8c60a927", "message": "fix(ring_theory/algebraic): prove a diamond exists and remove the instances (#11935)\nIt seems nothing used these instances anyway.", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "def", "has_scalar_pi", ["polynomial"]]]}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1644543415, "sha": "fbfdff7e", "message": "chore(data/real/ennreal, topology/instances/ennreal): change name of the order isomorphism for `inv` (#11959)\nOn [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/naming.20defs/near/271228611) it was decided that the name should be changed from `ennreal.inv_order_iso` to `order_iso.inv_ennreal` in order to better accord with the rest of the library.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "def", "inv_order_iso", ["ennreal"]], ["del", "theorem", "inv_order_iso_symm_apply", ["ennreal"]], ["add", "def", "inv_ennreal", ["order_iso"]], ["add", "theorem", "inv_ennreal_symm_apply", ["order_iso"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1644543414, "sha": "ae14f6ad", "message": "chore(algebra/star): generalize star_bit0, add star_inv_of (#11951)", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["mod", "theorem", "star_bit0", []], ["mod", "theorem", "star_bit1", []], ["add", "theorem", "star_inv_of", []]]}]}, {"timestamp": 1644543413, "sha": "0227820c", "message": "feat(topology/algebra/group): added (right/left)_coset_(open/closed) (#11876)\nAdded lemmas saying that, in a topological group, cosets of an open (resp. closed) set are open (resp. closed).", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "left_coset", ["is_closed"]], ["add", "theorem", "right_coset", ["is_closed"]], ["add", "theorem", "left_coset", ["is_open"]], ["add", "theorem", "right_coset", ["is_open"]]]}]}, {"timestamp": 1644543412, "sha": "73513580", "message": "refactor(order/well_founded, set_theory/ordinal_arithmetic): Fix namespace in `self_le_of_strict_mono` (#11871)\nThis places `self_le_of_strict_mono` in the `well_founded` namespace. We also rename `is_normal.le_self` to `is_normal.self_le` .", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["del", "theorem", "self_le_of_strict_mono", ["function", "well_founded"]], ["add", "theorem", "self_le_of_strict_mono", ["well_founded"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "le_self", ["ordinal", "is_normal"]], ["add", "theorem", "self_le", ["ordinal", "is_normal"]]]}, {"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/principal.lean", "changes": []}]}, {"timestamp": 1644536578, "sha": "4a5728fe", "message": "chore(number_theory/cyclotomic/zeta): generalize to primitive roots (#11941)\nThis was done as `(zeta p ℤ ℤ[ζₚ] : ℚ(ζₚ)) = zeta p ℚ ℚ(ζₚ)` is independent of Lean's type theory. Allows far more flexibility with results.", "changes": [{"oldPath": "src/number_theory/cyclotomic/gal.lean", "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": [["del", "theorem", "aut_to_pow_injective", ["is_cyclotomic_extension"]], ["add", "theorem", "from_zeta_aut_spec", ["is_cyclotomic_extension"]], ["add", "theorem", "aut_to_pow_injective", ["is_primitive_root"]], ["del", "theorem", "from_zeta_aut_spec", ["is_primitive_root"]]]}, {"oldPath": null, "newPath": "src/number_theory/cyclotomic/primitive_roots.lean", "changes": [["add", "theorem", "finrank", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_pow", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_primitive_root", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_spec'", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_spec", ["is_cyclotomic_extension"]], ["add", "theorem", "norm_eq_one", ["is_primitive_root"]], ["add", "theorem", "sub_one_norm_eq_eval_cyclotomic", ["is_primitive_root"]]]}, {"oldPath": "src/number_theory/cyclotomic/zeta.lean", "newPath": null, "changes": [["del", "theorem", "finrank", ["is_cyclotomic_extension"]], ["del", "theorem", "norm_zeta_eq_one", ["is_cyclotomic_extension"]], ["del", "theorem", "norm_zeta_sub_one_eq_eval_cyclotomic", ["is_cyclotomic_extension"]], ["del", "def", "embeddings_equiv_primitive_roots", ["is_cyclotomic_extension", "zeta"]], ["del", "def", "power_basis", ["is_cyclotomic_extension", "zeta"]], ["del", "theorem", "power_basis_gen_minpoly", ["is_cyclotomic_extension", "zeta"]], ["del", "def", "zeta", ["is_cyclotomic_extension"]], ["del", "theorem", "zeta_minpoly", ["is_cyclotomic_extension"]], ["del", "theorem", "zeta_pow", ["is_cyclotomic_extension"]], ["del", "theorem", "zeta_primitive_root", ["is_cyclotomic_extension"]], ["del", "theorem", "zeta_spec'", ["is_cyclotomic_extension"]], ["del", "theorem", "zeta_spec", ["is_cyclotomic_extension"]]]}]}, {"timestamp": 1644536576, "sha": "d487230d", "message": "feat(algebra/big_operators): add prod_multiset_count_of_subset (#11919)\nInspired by #4259.\nCo-Authored-By: Bhavik Mehta ", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_multiset_count_of_subset", ["finset"]]]}]}, {"timestamp": 1644525840, "sha": "fb41da97", "message": "feat(algebra/module/basic): turn implications into iffs (#11937)\n* Turn the following implications into `iff`, rename them accordingly, and make the type arguments explicit (`M` has to be explicit when using it in `rw`, otherwise one will have unsolved type-class arguments)\n```\neq_zero_of_two_nsmul_eq_zero -> two_nsmul_eq_zero\neq_zero_of_eq_neg -> self_eq_neg\nne_neg_of_ne_zero -> self_ne_neg\n```\n* Also add two variants\n* Generalize `ne_neg_iff_ne_zero` to work in modules over a ring", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "eq_zero_of_eq_neg", []], ["del", "theorem", "eq_zero_of_two_nsmul_eq_zero", []], ["del", "theorem", "ne_neg_of_ne_zero", []], ["add", "theorem", "neg_eq_self", []], ["add", "theorem", "neg_ne_self", []], ["add", "theorem", "self_eq_neg", []], ["add", "theorem", "self_ne_neg", []], ["add", "theorem", "two_nsmul_eq_zero", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}]}, {"timestamp": 1644525838, "sha": "09293874", "message": "feat(group_theory/group_action/defs): add ext attributes (#11936)\nThis adds `ext` attributes to `has_scalar`, `mul_action`, `distrib_mul_action`, `mul_distrib_mul_action`, and `module`.\nThe `ext` and `ext_iff` lemmas were eventually generated by `category_theory/preadditive/schur.lean` anyway - we may as well generate them much earlier.\nThe generated lemmas are slightly uglier than the `module_ext` we already have, but it doesn't really seem worth the trouble of writing out the \"nice\" versions when the `ext` tactic cleans up the mess for us anyway.", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "ext'", ["module"]], ["del", "theorem", "module_ext", []]]}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}]}, {"timestamp": 1644525837, "sha": "007d6602", "message": "feat(analysis/inner_product_space/pi_L2): `map_isometry_euclidean_of_orthonormal` (#11907)\nAdd a lemma giving the result of `isometry_euclidean_of_orthonormal`\nwhen applied to an orthonormal basis obtained from another orthonormal\nbasis with `basis.map`.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "map_isometry_euclidean_of_orthonormal", ["basis"]]]}]}, {"timestamp": 1644525836, "sha": "923923f1", "message": "feat(analysis/special_functions/complex/arg): `arg_mul`, `arg_div` lemmas (#11903)\nAdd lemmas about `(arg (x * y) : real.angle)` and `(arg (x / y) : real.angle)`,\nalong with preparatory lemmas that are like those such as\n`arg_mul_cos_add_sin_mul_I` but either don't require the real argument\nto be in `Ioc (-π) π` or that take a `real.angle` argument.\nI didn't add any lemmas about `arg (x * y)` or `arg (x / y)` as a\nreal; if such lemmas prove useful in future, it might make sense to\ndeduce them from the `real.angle` versions.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_cos_add_sin_mul_I_coe_angle", ["complex"]], ["add", "theorem", "arg_cos_add_sin_mul_I_eq_mul_fract", ["complex"]], ["add", "theorem", "arg_cos_add_sin_mul_I_sub", ["complex"]], ["add", "theorem", "arg_div_coe_angle", ["complex"]], ["add", "theorem", "arg_mul_coe_angle", ["complex"]], ["add", "theorem", "arg_mul_cos_add_sin_mul_I_coe_angle", ["complex"]], ["add", "theorem", "arg_mul_cos_add_sin_mul_I_eq_mul_fract", ["complex"]], ["add", "theorem", "arg_mul_cos_add_sin_mul_I_sub", ["complex"]]]}]}, {"timestamp": 1644525835, "sha": "1141703e", "message": "feat(group_theory/group_action/sub_mul_action): orbit and stabilizer lemmas (#11899)\nFeat: add lemmas for stabilizer and orbit for sub_mul_action", "changes": [{"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": [["add", "theorem", "coe_image_orbit", ["sub_mul_action"]], ["add", "theorem", "submonoid", ["sub_mul_action", "stabilizer_of_sub_mul"]], ["add", "theorem", "stabilizer_of_sub_mul", ["sub_mul_action"]]]}]}, {"timestamp": 1644518781, "sha": "de707225", "message": "chore(algebra/punit_instances): all actions on punit are central (#11953)", "changes": [{"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}]}, {"timestamp": 1644518780, "sha": "779d8363", "message": "feat(category_theory): variants of Yoneda are fully faithful (#11950)", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "theorem", "forget₂_map", ["Module"]], ["add", "theorem", "forget₂_obj", ["Module"]], ["add", "theorem", "forget₂_obj_Module_of", ["Module"]]]}, {"oldPath": "src/category_theory/linear/yoneda.lean", "newPath": "src/category_theory/linear/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/yoneda.lean", "newPath": "src/category_theory/preadditive/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}]}, {"timestamp": 1644518779, "sha": "80124455", "message": "feat(group_theory/subgroup/basic): `subgroup.map_le_map_iff_of_injective` (#11947)\nIf `f` is injective, then `H.map f ≤ K.map f ↔ H ≤ K`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "map_le_map_iff_of_injective", ["subgroup"]]]}]}, {"timestamp": 1644518778, "sha": "c28dc84a", "message": "feat(topology/subset_properties): more facts about compact sets (#11939)\n* add `tendsto.is_compact_insert_range_of_cocompact`, `tendsto.is_compact_insert_range_of_cofinite`, and `tendsto.is_compact_insert_range`;\n* reuse the former in `alexandroff.compact_space`;\n* rename `finite_of_is_compact_of_discrete` to `is_compact.finite_of_discrete`, add `is_compact_iff_finite`;\n* add `cocompact_le_cofinite`, `cocompact_eq_cofinite`;\n* add `int.cofinite_eq`, add `@[simp]` to `nat.cofinite_eq`;\n* add `set.insert_none_range_some`;\n* move `is_compact.image_of_continuous_on` and `is_compact_image` up;", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_none_range_some", ["set"]]]}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "cofinite_eq", ["int"]]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "cocompact_eq_cofinite", ["filter"]], ["add", "theorem", "cocompact_le_cofinite", ["filter"]], ["add", "theorem", "is_compact_insert_range", ["filter", "tendsto"]], ["add", "theorem", "is_compact_insert_range_of_cocompact", ["filter", "tendsto"]], ["add", "theorem", "is_compact_insert_range_of_cofinite", ["filter", "tendsto"]], ["del", "theorem", "finite_of_is_compact_of_discrete", []], ["add", "theorem", "finite_of_discrete", ["is_compact"]], ["add", "theorem", "is_compact_iff_finite", []], ["add", "theorem", "cocompact_eq", ["nat"]]]}]}, {"timestamp": 1644513250, "sha": "45ab382c", "message": "chore(field_theory/galois): make `intermediate_field.fixing_subgroup_equiv` computable (#11938)\nThis also golfs and generalizes some results to reuse infrastructure from elsewhere.\nIn particular, this generalizes:\n* `intermediate_field.fixed_field` to `fixed_points.intermediate_field`, where the latter matches the API of `fixed_points.subfield`\n* `intermediate_field.fixing_subgroup` to `fixing_subgroup` and `fixing_submonoid`\nThis removes `open_locale classical` in favor of ensuring the lemmas take in the necessary decidable / fintype arguments.", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["add", "def", "intermediate_field", ["fixed_points"]], ["add", "def", "fixing_subgroup", []], ["add", "def", "fixing_submonoid", []], ["mod", "theorem", "finrank_fixed_field_eq_card", ["intermediate_field"]], ["mod", "theorem", "card_fixing_subgroup_eq_finrank", ["is_galois"]]]}, {"oldPath": "src/field_theory/krull_topology.lean", "newPath": "src/field_theory/krull_topology.lean", "changes": []}]}, {"timestamp": 1644498706, "sha": "a86277a2", "message": "feat(category_theory/limits): epi equalizer implies equal (#11873)", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "eq_of_epi_equalizer", ["category_theory", "limits"]], ["add", "theorem", "eq_of_epi_fork_ι", ["category_theory", "limits"]], ["add", "theorem", "eq_of_mono_coequalizer", ["category_theory", "limits"]], ["add", "theorem", "eq_of_mono_cofork_π", ["category_theory", "limits"]]]}]}, {"timestamp": 1644498705, "sha": "20ef9097", "message": "feat(data/part): add instances (#11868)\nAdd common instances for `part \\alpha` to be inherited from `\\alpha`. Spun off of #11046", "changes": [{"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}]}, {"timestamp": 1644498702, "sha": "3b9dc082", "message": "feat(analysis/complex): add the Cauchy-Goursat theorem for an annulus (#11864)", "changes": [{"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": [["add", "theorem", "circle_integral_eq_of_differentiable_on_annulus_off_countable", ["complex"]]]}, {"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": [["add", "theorem", "integral_sub_inv_smul_sub_smul", ["circle_integral"]], ["add", "theorem", "preimage_circle_map", ["set", "countable"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_not_mem", ["set", "countable"]]]}]}, {"timestamp": 1644498701, "sha": "efa31576", "message": "feat(order/conditionally_complete_lattice): `cInf_le` variant without redundant assumption (#11863)\nWe prove `cInf_le'` on a `conditionally_complete_linear_order_bot`. We no longer need the boundedness assumption.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_le'", []], ["add", "theorem", "le_cInf_iff''", []]]}]}, {"timestamp": 1644498700, "sha": "66d9cc1c", "message": "feat(number_theory/cyclotomic/gal): the Galois group of K(ζₙ) (#11808)\nfrom flt-regular!", "changes": [{"oldPath": null, "newPath": "src/number_theory/cyclotomic/gal.lean", "changes": [["add", "theorem", "aut_to_pow_injective", ["is_cyclotomic_extension"]], ["add", "theorem", "from_zeta_aut_spec", ["is_primitive_root"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "aut_to_pow_spec", ["is_primitive_root"]]]}]}, {"timestamp": 1644498699, "sha": "1373d548", "message": "feat(group_theory/nilpotent): add nilpotent implies normalizer condition (#11586)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "normalizer_condition_of_is_nilpotent", []]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "map_top_of_surjective", ["subgroup"]]]}]}, {"timestamp": 1644498697, "sha": "c3f6fce7", "message": "feat(algebra/group_power/basic): add lemmas about pow and neg on units (#11447)\nIn future we might want to add a typeclass for monoids with a well-behaved negation operator to avoid needing to repeat these lemmas. Such a typeclass would also apply to the `unitary` submonoid too.", "changes": [{"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["add", "theorem", "coe_pow", ["units"]], ["add", "theorem", "coe_zpow", ["units"]]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "eq_or_eq_neg_of_sq_eq_sq", ["units"]], ["add", "theorem", "neg_one_pow_eq_or", ["units"]], ["add", "theorem", "neg_pow", ["units"]], ["add", "theorem", "neg_pow_bit0", ["units"]], ["add", "theorem", "neg_pow_bit1", ["units"]], ["add", "theorem", "neg_sq", ["units"]]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "coe_pow", ["units"]], ["del", "theorem", "coe_zpow", ["units"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "units_neg_left", ["commute"]], ["add", "theorem", "units_neg_left_iff", ["commute"]], ["add", "theorem", "units_neg_one_left", ["commute"]], ["add", "theorem", "units_neg_one_right", ["commute"]], ["add", "theorem", "units_neg_right", ["commute"]], ["add", "theorem", "units_neg_right_iff", ["commute"]], ["add", "theorem", "units_neg_left", ["semiconj_by"]], ["add", "theorem", "units_neg_left_iff", ["semiconj_by"]], ["add", "theorem", "units_neg_one_left", ["semiconj_by"]], ["add", "theorem", "units_neg_one_right", ["semiconj_by"]], ["add", "theorem", "units_neg_right", ["semiconj_by"]], ["add", "theorem", "units_neg_right_iff", ["semiconj_by"]], ["add", "theorem", "mul_neg_one", ["units"]], ["add", "theorem", "neg_mul_eq_mul_neg", ["units"]], ["add", "theorem", "neg_mul_eq_neg_mul", ["units"]], ["add", "theorem", "neg_one_mul", ["units"]]]}]}, {"timestamp": 1644498696, "sha": "c3d87824", "message": "feat(category_theory/bicategory/functor_bicategory): bicategory structure on oplax functors (#11405)\nThis PR defines a bicategory structure on the oplax functors between bicategories.", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/functor_bicategory.lean", "changes": [["add", "def", "associator", ["category_theory", "oplax_nat_trans"]], ["add", "def", "left_unitor", ["category_theory", "oplax_nat_trans"]], ["add", "def", "right_unitor", ["category_theory", "oplax_nat_trans"]], ["add", "def", "whisker_left", ["category_theory", "oplax_nat_trans"]], ["add", "def", "whisker_right", ["category_theory", "oplax_nat_trans"]]]}]}, {"timestamp": 1644489995, "sha": "da164c6b", "message": "feat (category_theory/karoubi_karoubi) : idempotence of karoubi (#11931)\nIn this file, we construct the equivalence of categories\n`karoubi_karoubi.equivalence C : karoubi C ≌ karoubi (karoubi C)` for any category `C`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/idempotents/karoubi_karoubi.lean", "changes": [["add", "def", "counit_iso", ["category_theory", "idempotents", "karoubi_karoubi"]], ["add", "def", "equivalence", ["category_theory", "idempotents", "karoubi_karoubi"]], ["add", "def", "inverse", ["category_theory", "idempotents", "karoubi_karoubi"]], ["add", "def", "unit_iso", ["category_theory", "idempotents", "karoubi_karoubi"]]]}]}, {"timestamp": 1644489994, "sha": "04909776", "message": "feat(algebra/lie/engel): add proof of Engel's theorem (#11922)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": [["add", "theorem", "lie_mem_sup_of_mem_normalizer", ["lie_subalgebra"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/engel.lean", "changes": [["add", "theorem", "is_engelian", ["function", "surjective"]], ["add", "theorem", "exists_engelian_lie_subalgebra_of_lt_normalizer", ["lie_algebra"]], ["add", "def", "is_engelian", ["lie_algebra"]], ["add", "theorem", "is_engelian_of_is_noetherian", ["lie_algebra"]], ["add", "theorem", "is_engelian_of_subsingleton", ["lie_algebra"]], ["add", "theorem", "is_nilpotent_iff_forall", ["lie_algebra"]], ["add", "theorem", "is_engelian_iff", ["lie_equiv"]], ["add", "theorem", "is_nilpotent_iff_forall", ["lie_module"]], ["add", "theorem", "exists_smul_add_of_span_sup_eq_top", ["lie_submodule"]], ["add", "theorem", "is_nilpotent_of_is_nilpotent_span_sup_eq_top", ["lie_submodule"]], ["add", "theorem", "lcs_le_lcs_of_is_nilpotent_span_sup_eq_top", ["lie_submodule"]], ["add", "theorem", "lie_top_eq_of_span_sup_eq_top", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "theorem", "to_endomorphism_eq", ["lie_subalgebra"]], ["add", "theorem", "to_endomorphism_mk", ["lie_subalgebra"]], ["add", "theorem", "coe_map_to_endomorphism_le", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "subsingleton_bot", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "injective_subtype", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_sup", ["submodule"]], ["add", "theorem", "sup_span", ["submodule"]]]}]}, {"timestamp": 1644489992, "sha": "f32fda7c", "message": "feat(set_theory/ordinal_arithmetic): More `lsub` and `blsub` lemmas (#11848)\nWe prove variants of `sup_typein`, which serve as analogs for `blsub_id`. We also prove `sup_eq_lsub_or_sup_succ_eq_lsub`, which combines `sup_le_lsub` and `lsub_le_sup_succ`.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "blsub_id", ["ordinal"]], ["add", "theorem", "bsup_eq_blsub_or_succ_bsup_eq_blsub", ["ordinal"]], ["del", "theorem", "bsup_id", ["ordinal"]], ["add", "theorem", "bsup_id_limit", ["ordinal"]], ["add", "theorem", "bsup_id_succ", ["ordinal"]], ["add", "theorem", "lsub_typein", ["ordinal"]], ["add", "theorem", "sup_eq_lsub_or_sup_succ_eq_lsub", ["ordinal"]], ["add", "theorem", "sup_typein_limit", ["ordinal"]], ["add", "theorem", "sup_typein_succ", ["ordinal"]]]}]}, {"timestamp": 1644489991, "sha": "b7360f94", "message": "feat(group_theory/general_commutator): subgroup.prod commutes with the general_commutator (#11818)", "changes": [{"oldPath": "src/group_theory/general_commutator.lean", "newPath": "src/group_theory/general_commutator.lean", "changes": [["add", "theorem", "general_commutator_prod_prod", []], ["add", "theorem", "map_general_commutator", []]]}]}, {"timestamp": 1644489988, "sha": "6afaf36d", "message": "feat(algebra/order/hom/ring): Ordered semiring/ring homomorphisms (#11634)\nDefine `order_ring_hom` with notation `→+*o` along with its hom class.", "changes": [{"oldPath": "src/algebra/order/hom/monoid.lean", "newPath": "src/algebra/order/hom/monoid.lean", "changes": [["mod", "structure", "order_add_monoid_hom", []], ["mod", "structure", "order_monoid_hom", []], ["mod", "theorem", "coe_monoid_with_zero_hom", ["order_monoid_with_zero_hom"]], ["mod", "theorem", "coe_order_monoid_hom", ["order_monoid_with_zero_hom"]], ["mod", "structure", "order_monoid_with_zero_hom", []]]}, {"oldPath": null, "newPath": "src/algebra/order/hom/ring.lean", "changes": [["add", "theorem", "cancel_left", ["order_ring_hom"]], ["add", "theorem", "cancel_right", ["order_ring_hom"]], ["add", "theorem", "coe_coe_order_add_monoid_hom", ["order_ring_hom"]], ["add", "theorem", "coe_coe_order_monoid_with_zero_hom", ["order_ring_hom"]], ["add", "theorem", "coe_coe_ring_hom", ["order_ring_hom"]], ["add", "theorem", "coe_comp", ["order_ring_hom"]], ["add", "theorem", "coe_id", ["order_ring_hom"]], ["add", "theorem", "coe_order_add_monoid_hom_apply", ["order_ring_hom"]], ["add", "theorem", "coe_order_add_monoid_hom_id", ["order_ring_hom"]], ["add", "theorem", "coe_order_monoid_with_zero_hom_apply", ["order_ring_hom"]], ["add", "theorem", "coe_order_monoid_with_zero_hom_id", ["order_ring_hom"]], ["add", "theorem", "coe_ring_hom_apply", ["order_ring_hom"]], ["add", "theorem", "coe_ring_hom_id", ["order_ring_hom"]], ["add", "theorem", "comp_apply", ["order_ring_hom"]], ["add", "theorem", "comp_assoc", ["order_ring_hom"]], ["add", "theorem", "comp_id", ["order_ring_hom"]], ["add", "theorem", "ext", ["order_ring_hom"]], ["add", "theorem", "id_apply", ["order_ring_hom"]], ["add", "theorem", "id_comp", ["order_ring_hom"]], ["add", "theorem", "to_fun_eq_coe", ["order_ring_hom"]], ["add", "def", "to_order_add_monoid_hom", ["order_ring_hom"]], ["add", "theorem", "to_order_add_monoid_hom_eq_coe", ["order_ring_hom"]], ["add", "def", "to_order_monoid_with_zero_hom", ["order_ring_hom"]], ["add", "theorem", "to_order_monoid_with_zero_hom_eq_coe", ["order_ring_hom"]], ["add", "theorem", "to_ring_hom_eq_coe", ["order_ring_hom"]], ["add", "structure", "order_ring_hom", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "def", "copy", ["ring_hom"]]]}]}, {"timestamp": 1644485243, "sha": "8f5fd269", "message": "feat(data/nat/factorization): bijection between positive nats and finsupps over primes (#11440)\nProof that for any finsupp `f : ℕ →₀ ℕ` whose support is in the primes, `f = (f.prod pow).factorization`, and hence that the positive natural numbers are bijective with finsupps `ℕ →₀ ℕ` with support in the primes.", "changes": [{"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": [["add", "theorem", "prod_pow_pos_of_zero_not_mem_support", ["nat"]]]}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "eq_factorization_iff", ["nat"]], ["add", "def", "factorization_equiv", ["nat"]], ["add", "theorem", "factorization_equiv_apply", ["nat"]], ["add", "theorem", "factorization_equiv_inv_apply", ["nat"]], ["add", "theorem", "prod_pow_factorization_eq_self", ["nat"]]]}]}, {"timestamp": 1644485242, "sha": "0aa0bc8f", "message": "feat(set_theory/ordinal_arithmetic): The derivative of addition (#11270)\nWe prove that the derivative of `(+) a` evaluated at `b` is given by `a * ω + b`.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "add_eq_right_iff_mul_omega_le", ["ordinal"]], ["add", "theorem", "add_le_right_iff_mul_omega_le", ["ordinal"]], ["add", "theorem", "deriv_add_eq_mul_omega_add", ["ordinal"]], ["mod", "def", "family_of_bfamily", ["ordinal"]], ["mod", "theorem", "family_of_bfamily_enum", ["ordinal"]], ["add", "theorem", "apply_eq_self_iff_deriv", ["ordinal", "is_normal"]], ["mod", "theorem", "deriv_fp", ["ordinal", "is_normal"]], ["del", "theorem", "fp_iff_deriv'", ["ordinal", "is_normal"]], ["del", "theorem", "fp_iff_deriv", ["ordinal", "is_normal"]], ["add", "theorem", "le_iff_deriv", ["ordinal", "is_normal"]], ["add", "theorem", "le_iff_eq", ["ordinal", "is_normal"]], ["mod", "theorem", "le_nfp", ["ordinal", "is_normal"]], ["mod", "theorem", "nfp_fp", ["ordinal", "is_normal"]], ["del", "theorem", "nfp_le", ["ordinal", "is_normal"]], ["mod", "theorem", "nfp_le_fp", ["ordinal", "is_normal"]], ["add", "theorem", "mul_one_add", ["ordinal"]], ["add", "theorem", "nfp_add_eq_mul_omega", ["ordinal"]], ["add", "theorem", "nfp_add_zero", ["ordinal"]], ["mod", "theorem", "nfp_eq_self", ["ordinal"]], ["mod", "theorem", "sup_add_nat", ["ordinal"]], ["mod", "theorem", "sup_mul_nat", ["ordinal"]], ["mod", "theorem", "sup_nat_cast", ["ordinal"]]]}]}, {"timestamp": 1644482046, "sha": "e60ca6b4", "message": "feat(data/real/ennreal): `inv` is an `order_iso` to the order dual and lemmas for `supr, infi` (#11869)\nEstablishes that `inv` is an order isomorphism to the order dual. We then provide some convenience lemmas which guarantee that `inv` switches `supr` and `infi` and hence also switches `limsup` and `liminf`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "def", "inv_order_iso", ["ennreal"]], ["add", "theorem", "inv_order_iso_symm_apply", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "inv_liminf", ["ennreal"]], ["add", "theorem", "inv_limsup", ["ennreal"]], ["add", "theorem", "inv_map_infi", ["ennreal"]], ["add", "theorem", "inv_map_supr", ["ennreal"]]]}]}, {"timestamp": 1644482045, "sha": "b7e72ea4", "message": "feat(measure_theory/probability_mass_function): Measure calculations for additional pmf constructions (#11858)\nThis PR adds calculations of the measures of sets under various `pmf` constructions.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": [["add", "theorem", "mem_support_uniform_of_fintype", ["pmf"]], ["del", "theorem", "mem_support_uniform_of_fintype_iff", ["pmf"]], ["mod", "theorem", "support_uniform_of_fintype", ["pmf"]], ["add", "theorem", "to_measure_map_apply", ["pmf"]], ["add", "theorem", "to_measure_of_finset_apply", ["pmf"]], ["add", "theorem", "to_measure_of_fintype_apply", ["pmf"]], ["add", "theorem", "to_measure_of_multiset_apply", ["pmf"]], ["add", "theorem", "to_measure_uniform_of_finset_apply", ["pmf"]], ["add", "theorem", "to_measure_uniform_of_fintype_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_map_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_of_finset_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_of_fintype_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_of_multiset_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_uniform_of_finset_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_uniform_of_fintype_apply", ["pmf"]]]}, {"oldPath": "src/measure_theory/probability_mass_function/monad.lean", "newPath": "src/measure_theory/probability_mass_function/monad.lean", "changes": [["mod", "theorem", "to_measure_bind_apply", ["pmf"]], ["mod", "theorem", "to_measure_bind_on_support_apply", ["pmf"]], ["mod", "theorem", "to_measure_pure_apply", ["pmf"]], ["mod", "theorem", "to_outer_measure_bind_apply", ["pmf"]], ["mod", "theorem", "to_outer_measure_bind_on_support_apply", ["pmf"]], ["mod", "theorem", "to_outer_measure_pure_apply", ["pmf"]]]}]}, {"timestamp": 1644480244, "sha": "e9a18930", "message": "chore(tactic/default): import `linear_combination` (#11942)", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}]}, {"timestamp": 1644464432, "sha": "ea0e4589", "message": "refactor(topology/algebra/mul_action2): rename type classes (#11940)\nRename `has_continuous_smul₂` and `has_continuous_vadd₂` to\n`has_continuous_const_smul` and `has_continuous_const_vadd`,\nrespectively.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action2.lean", "newPath": "src/topology/algebra/mul_action2.lean", "changes": [["mod", "theorem", "is_open_map_quotient_mk_mul", []]]}]}, {"timestamp": 1644448235, "sha": "4e8d8faa", "message": "feat(order/hom/bounded): Bounded order homomorphisms (#11806)\nDefine `bounded_order_hom` in `order.hom.bounded` and move `top_hom`, `bot_hom` there.", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/hom/bounded.lean", "changes": [["add", "theorem", "bot_apply", ["bot_hom"]], ["add", "theorem", "cancel_left", ["bot_hom"]], ["add", "theorem", "cancel_right", ["bot_hom"]], ["add", "theorem", "coe_bot", ["bot_hom"]], ["add", "theorem", "coe_comp", ["bot_hom"]], ["add", "theorem", "coe_id", ["bot_hom"]], ["add", "theorem", "coe_inf", ["bot_hom"]], ["add", "theorem", "coe_sup", ["bot_hom"]], ["add", "def", "comp", ["bot_hom"]], ["add", "theorem", "comp_apply", ["bot_hom"]], ["add", "theorem", "comp_assoc", ["bot_hom"]], ["add", "theorem", "comp_id", ["bot_hom"]], ["add", "theorem", "ext", ["bot_hom"]], ["add", "theorem", "id_apply", ["bot_hom"]], ["add", "theorem", "id_comp", ["bot_hom"]], ["add", "theorem", "inf_apply", ["bot_hom"]], ["add", "theorem", "sup_apply", ["bot_hom"]], ["add", "theorem", "to_fun_eq_coe", ["bot_hom"]], ["add", "structure", "bot_hom", []], ["add", "theorem", "cancel_left", ["bounded_order_hom"]], ["add", "theorem", "cancel_right", ["bounded_order_hom"]], ["add", "theorem", "coe_comp", ["bounded_order_hom"]], ["add", "theorem", "coe_comp_bot_hom", ["bounded_order_hom"]], ["add", "theorem", "coe_comp_order_hom", ["bounded_order_hom"]], ["add", "theorem", "coe_comp_top_hom", ["bounded_order_hom"]], ["add", "theorem", "coe_id", ["bounded_order_hom"]], ["add", "def", "comp", ["bounded_order_hom"]], ["add", "theorem", "comp_apply", ["bounded_order_hom"]], ["add", "theorem", "comp_assoc", ["bounded_order_hom"]], ["add", "theorem", "comp_id", ["bounded_order_hom"]], ["add", "theorem", "ext", ["bounded_order_hom"]], ["add", "theorem", "id_apply", ["bounded_order_hom"]], ["add", "theorem", "id_comp", ["bounded_order_hom"]], ["add", "def", "to_bot_hom", ["bounded_order_hom"]], ["add", "theorem", "to_fun_eq_coe", ["bounded_order_hom"]], ["add", "def", "to_top_hom", ["bounded_order_hom"]], ["add", "structure", "bounded_order_hom", []], ["add", "theorem", "cancel_left", ["top_hom"]], ["add", "theorem", "cancel_right", ["top_hom"]], ["add", "theorem", "coe_comp", ["top_hom"]], ["add", "theorem", "coe_id", ["top_hom"]], ["add", "theorem", "coe_inf", ["top_hom"]], ["add", "theorem", "coe_sup", ["top_hom"]], ["add", "theorem", "coe_top", ["top_hom"]], ["add", "def", "comp", ["top_hom"]], ["add", "theorem", "comp_apply", ["top_hom"]], ["add", "theorem", "comp_assoc", ["top_hom"]], ["add", "theorem", "comp_id", ["top_hom"]], ["add", "theorem", "ext", ["top_hom"]], ["add", "theorem", "id_apply", ["top_hom"]], ["add", "theorem", "id_comp", ["top_hom"]], ["add", "theorem", "inf_apply", ["top_hom"]], ["add", "theorem", "sup_apply", ["top_hom"]], ["add", "theorem", "to_fun_eq_coe", ["top_hom"]], ["add", "theorem", "top_apply", ["top_hom"]], ["add", "structure", "top_hom", []]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["del", "theorem", "bot_apply", ["bot_hom"]], ["del", "theorem", "cancel_left", ["bot_hom"]], ["del", "theorem", "cancel_right", ["bot_hom"]], ["del", "theorem", "coe_bot", ["bot_hom"]], ["del", "theorem", "coe_comp", ["bot_hom"]], ["del", "theorem", "coe_id", ["bot_hom"]], ["del", "theorem", "coe_inf", ["bot_hom"]], ["del", "theorem", "coe_sup", ["bot_hom"]], ["del", "def", "comp", ["bot_hom"]], ["del", "theorem", "comp_apply", ["bot_hom"]], ["del", "theorem", "comp_assoc", ["bot_hom"]], ["del", "theorem", "comp_id", ["bot_hom"]], ["del", "theorem", "ext", ["bot_hom"]], ["del", "theorem", "id_apply", ["bot_hom"]], ["del", "theorem", "id_comp", ["bot_hom"]], ["del", "theorem", "inf_apply", ["bot_hom"]], ["del", "theorem", "sup_apply", ["bot_hom"]], ["del", "theorem", "to_fun_eq_coe", ["bot_hom"]], ["del", "structure", "bot_hom", []], ["del", "def", "to_bot_hom", ["bounded_lattice_hom"]], ["add", "def", "to_bounded_order_hom", ["bounded_lattice_hom"]], ["del", "def", "to_top_hom", ["bounded_lattice_hom"]], ["mod", "theorem", "cancel_left", ["inf_hom"]], ["mod", "theorem", "cancel_right", ["inf_hom"]], ["mod", "theorem", "cancel_left", ["lattice_hom"]], ["mod", "theorem", "cancel_right", ["lattice_hom"]], ["mod", "theorem", "cancel_left", ["sup_hom"]], ["mod", "theorem", "cancel_right", ["sup_hom"]], ["del", "theorem", "cancel_left", ["top_hom"]], ["del", "theorem", "cancel_right", ["top_hom"]], ["del", "theorem", "coe_comp", ["top_hom"]], ["del", "theorem", "coe_id", ["top_hom"]], ["del", "theorem", "coe_inf", ["top_hom"]], ["del", "theorem", "coe_sup", ["top_hom"]], ["del", "theorem", "coe_top", ["top_hom"]], ["del", "def", "comp", ["top_hom"]], ["del", "theorem", "comp_apply", ["top_hom"]], ["del", "theorem", "comp_assoc", ["top_hom"]], ["del", "theorem", "comp_id", ["top_hom"]], ["del", "theorem", "ext", ["top_hom"]], ["del", "theorem", "id_apply", ["top_hom"]], ["del", "theorem", "id_comp", ["top_hom"]], ["del", "theorem", "inf_apply", ["top_hom"]], ["del", "theorem", "sup_apply", ["top_hom"]], ["del", "theorem", "to_fun_eq_coe", ["top_hom"]], ["del", "theorem", "top_apply", ["top_hom"]], ["del", "structure", "top_hom", []]]}]}, {"timestamp": 1644442524, "sha": "46911598", "message": "doc(algebra/group/hom_instances): Fix spellings (#11943)\nFixes spelling mistakes introduced by #11843", "changes": [{"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}]}, {"timestamp": 1644439121, "sha": "352e0642", "message": "feat(topology/uniform_space/cauchy): add a few lemmas (#11912)", "changes": [{"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "ultrafilter_of", ["cauchy"]], ["add", "theorem", "complete_space_iff_ultrafilter", []], ["del", "theorem", "is_complete", ["is_compact"]], ["add", "theorem", "is_complete_iff_cluster_pt", []], ["add", "theorem", "is_complete_iff_ultrafilter'", []], ["add", "theorem", "is_complete_iff_ultrafilter", []]]}]}, {"timestamp": 1644433032, "sha": "2b9aca75", "message": "feat(topology): a few more results about compact sets (#11905)\n* Also a few lemmas about sets and `mul_support`.", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "disjoint_mul_support_iff", ["function"]], ["add", "theorem", "mul_support_disjoint_iff", ["function"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_ne_univ", ["set"]], ["add", "theorem", "not_mem_compl_iff", ["set"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv", ["is_compact"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "mul", ["is_compact"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "exists_compact_superset_iff", []]]}]}, {"timestamp": 1644433030, "sha": "b8fb8e5b", "message": "feat(set_theory/ordinal_arithmetic): `le_one_iff` (#11847)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "le_one_iff", ["ordinal"]]]}]}, {"timestamp": 1644433029, "sha": "2726e238", "message": "feat(algebra.group.hom_instances): Define left and right multiplication operators (#11843)\nDefines left and right multiplication operators on non unital, non associative semirings.\nSuggested by @ocfnash for #11073", "changes": [{"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": [["add", "def", "mul_left", ["add_monoid", "End"]], ["add", "def", "mul_right", ["add_monoid", "End"]]]}]}, {"timestamp": 1644426855, "sha": "5008de8b", "message": "feat(order): some properties about monotone predicates (#11904)\n* We prove that some predicates are monotone/antitone w.r.t. some order. The proofs are all trivial.\n* We prove 2 `iff` statements depending on the hypothesis that a certain predicate is (anti)mono: `exists_ge_and_iff_exists` and `filter.exists_mem_and_iff`)\n* The former is used to prove `bdd_above_iff_exists_ge`, the latter will be used in a later PR.", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "ball", ["antitone"]], ["add", "theorem", "forall", ["antitone"]], ["add", "theorem", "antitone_le", []], ["add", "theorem", "antitone_lt", []], ["add", "theorem", "exists_ge_and_iff_exists", []], ["add", "theorem", "exists_le_and_iff_exists", []], ["add", "theorem", "ball", ["monotone"]], ["add", "theorem", "forall", ["monotone"]], ["add", "theorem", "monotone_le", []], ["add", "theorem", "monotone_lt", []]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "exists_ge", ["bdd_above"]], ["add", "theorem", "bdd_above_def", []], ["add", "theorem", "bdd_above_iff_exists_ge", []], ["add", "theorem", "exists_le", ["bdd_below"]], ["add", "theorem", "bdd_below_def", []], ["add", "theorem", "bdd_below_iff_exists_le", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "exists_mem_and_iff", ["filter"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "antitone_continuous_on", []]]}]}, {"timestamp": 1644426854, "sha": "d3cdcd83", "message": "feat(order/filter/basic): add lemma `le_prod_map_fst_snd` (#11901)\nA lemma relating filters on products and the filter-product of the projections. This lemma is particularly useful when proving the continuity of a function on a product space using filters.\nDiscussion: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Some.20missing.20prod.20stuff", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "le_prod_map_fst_snd", ["filter"]]]}]}, {"timestamp": 1644426852, "sha": "9648ce29", "message": "chore(data/pi): add pi.prod and use elsewhere (#11877)\n`pi.prod` is the function that underlies `add_monoid_hom.prod`, `linear_map.prod`, etc.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Some.20missing.20prod.20stuff/near/270851797)", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "coe_finset_prod", ["monoid_hom"]], ["del", "theorem", "coe_prod", ["monoid_hom"]]]}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "coe_prod", ["monoid_hom"]]]}, {"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "prod_fst_snd", ["pi"]], ["add", "theorem", "prod_snd_fst", ["pi"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "coe_prod", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1644421847, "sha": "ca2450fe", "message": "feat(order/atoms): finite orders are (co)atomic (#11930)", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/order/minimal.lean", "newPath": "src/order/minimal.lean", "changes": []}]}, {"timestamp": 1644415833, "sha": "c8827532", "message": "chore(algebra/tropical/basic): remove 3 instances (#11920)\nThe three removed instances are\n* `covariant_swap_add` (exists since addition is commutative and the non-swapped version is proved);\n* `covariant_add_lt` (as is, this is a copy of `covariant_add` -- judging from the name, it could have been intended to have a `(<)`, but with `(<)` it is false, see below);\n* `covariant_swap_add_lt` (exists since addition is commutative and the non-swapped version is proved).\nHere is a proof that the second instance with `(<)` is false:\n```lean\nlemma not_cov_lt : ¬ covariant_class (tropical ℕ) (tropical ℕ) (+) (<) :=\nbegin\n refine λ h, (lt_irrefl (trop 0) _),\n cases h,\n have : trop 0 < trop 1 := show 0 < 1, from zero_lt_one,\n calc trop 0 = trop 0 + trop 0 : (trop 0).add_self.symm\n ... < trop 0 + trop 1 : h _ this\n ... = trop 0 : add_eq_left this.le,\nend\n```", "changes": [{"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": []}]}, {"timestamp": 1644406595, "sha": "fea68aac", "message": "chore(data/fintype/basic): documenting elaboration bug (#11247)\nSimplifying an expression and documenting an elaboration bug that it was avoiding.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "to_finset_univ", ["set"]]]}]}, {"timestamp": 1644400575, "sha": "3aa5b8a9", "message": "refactor(algebra/ring/basic): rename lemmas about `a*(-b)` and `(-a)*b` (#11925)\nThis renames:\n* `(- a) * b = - (a * b)` from `neg_mul_eq_neg_mul_symm` to `neg_mul`\n* `a * (-b) = - (a * b)` from `mul_neg_eq_neg_mul_symm` to `mul_neg`\nThe new names are much easier to find when compared with `sub_mul`, `mul_sub` etc, and match the existing namespaced names under `units` and `matrix`.\nThis also replaces rewrites by `← neg_mul_eq_neg_mul` with `neg_mul` and rewrites by `← neg_mul_eq_mul_neg` with `mul_neg`.\nTo avoid clashes, the names in the `matrix` namespace are now `protected`.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/mul_neg.2C.20neg_mul/near/233638226)", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/quaternion_basis.lean", "newPath": "src/algebra/quaternion_basis.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "mul_neg", []], ["del", "theorem", "mul_neg_eq_neg_mul_symm", []], ["add", "theorem", "neg_mul", []], ["del", "theorem", "neg_mul_eq_neg_mul_symm", []]]}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/algebraic_topology/alternating_face_map_complex.lean", "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "theorem", "mul_neg", ["matrix"]], ["del", "theorem", "neg_mul", ["matrix"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime/basic.lean", "newPath": "src/ring_theory/coprime/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/henselian.lean", "newPath": "src/ring_theory/henselian.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/tactic/noncomm_ring.lean", "newPath": "src/tactic/noncomm_ring.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1644396708, "sha": "4e17e081", "message": "feat(data/complex/basic): re-im set product (#11770)\n`set.re_im_prod s t` (notation: `s ×ℂ t`) is the product of a set on the real axis and a set on the\nimaginary axis of the complex plane.", "changes": [{"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/re_im_topology.lean", "newPath": "src/analysis/complex/re_im_topology.lean", "changes": [["del", "theorem", "closure_preimage_re_inter_preimage_im", ["complex"]], ["add", "theorem", "closure_re_prod_im", ["complex"]], ["del", "theorem", "frontier_preimage_re_inter_preimage_im", ["complex"]], ["add", "theorem", "frontier_re_prod_im", ["complex"]], ["del", "theorem", "interior_preimage_re_inter_preimage_im", ["complex"]], ["add", "theorem", "interior_re_prod_im", ["complex"]], ["mod", "theorem", "re_prod_im", ["is_open"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "def", "re_prod_im", ["set"]]]}]}, {"timestamp": 1644391004, "sha": "78c39752", "message": "feat(category_theory/pseudoabelian/basic): basic facts and contructions about pseudoabelian categories (#11817)", "changes": [{"oldPath": null, "newPath": "src/category_theory/idempotents/basic.lean", "changes": [["add", "theorem", "is_idempotent_complete", ["category_theory", "idempotents", "equivalence"]], ["add", "theorem", "idempotence_of_id_sub_idempotent", ["category_theory", "idempotents"]], ["add", "theorem", "is_idempotent_complete_iff_has_equalizer_of_id_and_idempotent", ["category_theory", "idempotents"]], ["add", "theorem", "is_idempotent_complete_iff_idempotents_have_kernels", ["category_theory", "idempotents"]], ["add", "theorem", "is_idempotent_complete_iff_of_equivalence", ["category_theory", "idempotents"]], ["add", "theorem", "is_idempotent_complete_iff_opposite", ["category_theory", "idempotents"]], ["add", "theorem", "is_idempotent_complete_of_is_idempotent_complete_opposite", ["category_theory", "idempotents"]], ["add", "theorem", "split_iff_of_iso", ["category_theory", "idempotents"]], ["add", "theorem", "split_imp_of_iso", ["category_theory", "idempotents"]]]}, {"oldPath": null, "newPath": "src/category_theory/idempotents/karoubi.lean", "changes": [["add", "theorem", "coe_X", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "coe_p", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "comp", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "comp_p", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "comp_proof", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "decomp_id", ["category_theory", "idempotents", "karoubi"]], ["add", "def", "decomp_id_i", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "decomp_id_i_naturality", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "decomp_id_i_to_karoubi", ["category_theory", "idempotents", "karoubi"]], ["add", "def", "decomp_id_p", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "decomp_id_p_naturality", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "decomp_id_p_to_karoubi", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "decomp_p", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "eq_to_hom_f", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "ext", ["category_theory", "idempotents", "karoubi"]], ["add", "structure", "hom", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "hom_eq_zero_iff", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "hom_ext", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "id_eq", ["category_theory", "idempotents", "karoubi"]], ["add", "def", "inclusion_hom", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "p_comm", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "p_comp", ["category_theory", "idempotents", "karoubi"]], ["add", "theorem", "sum_hom", ["category_theory", "idempotents", "karoubi"]], ["add", "structure", "karoubi", ["category_theory", "idempotents"]], ["add", "def", "to_karoubi", ["category_theory", "idempotents"]], ["add", "def", "to_karoubi_is_equivalence", ["category_theory", "idempotents"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "theorem", "has_kernel_of_has_equalizer", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1644358480, "sha": "56db7ed0", "message": "feat(analysis/normed_space/basic): add lemmas `nnnorm_mul_le` and `nnnorm_pow_succ_le` (#11915)\nAdds two convenience lemmas for `nnnorm`, submultiplicativity of `nnnorm` for semi-normed rings and the corresponding extension to powers. We only allow successors so as not to incur the `norm_one_class` type class constraint.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_mul_le", []], ["add", "theorem", "nnnorm_pow_le'", []], ["add", "theorem", "nnnorm_pow_le", []], ["mod", "theorem", "norm_pow_le'", []], ["mod", "theorem", "norm_pow_le", []]]}]}, {"timestamp": 1644354457, "sha": "a3d6b43c", "message": "feat(topology/algebra/uniform_group): `cauchy_seq.const_mul` and friends (#11917)\nA Cauchy sequence multiplied by a constant (including `-1`) remains a Cauchy sequence.", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "const_mul", ["cauchy_seq"]], ["add", "theorem", "inv", ["cauchy_seq"]], ["add", "theorem", "mul_const", ["cauchy_seq"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "theorem", "cauchy_seq_const", []]]}]}, {"timestamp": 1644346917, "sha": "4545e31e", "message": "feat(model_theory/substructures): More operations on substructures (#11906)\nDefines the substructure `first_order.language.hom.range`.\nDefines the homomorphisms `first_order.language.hom.dom_restrict` and `first_order.language.hom.cod_restrict`, and the embeddings `first_order.language.embedding.dom_restrict`, `first_order.language.embedding.cod_restrict` which restrict the domain or codomain of a first-order hom or embedding to a substructure.\nDefines the embedding `first_order.language.substructure.inclusion` between nested substructures.", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "comp_to_hom", ["first_order", "language", "embedding"]]]}, {"oldPath": "src/model_theory/substructures.lean", "newPath": "src/model_theory/substructures.lean", "changes": [["add", "def", "cod_restrict", ["first_order", "language", "embedding"]], ["add", "theorem", "cod_restrict_apply", ["first_order", "language", "embedding"]], ["add", "theorem", "comp_cod_restrict", ["first_order", "language", "embedding"]], ["add", "def", "dom_restrict", ["first_order", "language", "embedding"]], ["add", "theorem", "dom_restrict_apply", ["first_order", "language", "embedding"]], ["add", "theorem", "equiv_range_apply", ["first_order", "language", "embedding"]], ["add", "theorem", "substructure_equiv_map_apply", ["first_order", "language", "embedding"]], ["add", "theorem", "subtype_comp_cod_restrict", ["first_order", "language", "embedding"]], ["add", "theorem", "to_hom_range", ["first_order", "language", "equiv"]], ["add", "def", "cod_restrict", ["first_order", "language", "hom"]], ["add", "theorem", "comp_cod_restrict", ["first_order", "language", "hom"]], ["add", "def", "dom_restrict", ["first_order", "language", "hom"]], ["add", "theorem", "map_le_range", ["first_order", "language", "hom"]], ["add", "theorem", "mem_range", ["first_order", "language", "hom"]], ["add", "theorem", "mem_range_self", ["first_order", "language", "hom"]], ["add", "def", "range", ["first_order", "language", "hom"]], ["add", "theorem", "range_coe", ["first_order", "language", "hom"]], ["add", "theorem", "range_comp", ["first_order", "language", "hom"]], ["add", "theorem", "range_comp_le_range", ["first_order", "language", "hom"]], ["add", "theorem", "range_eq_map", ["first_order", "language", "hom"]], ["add", "theorem", "range_eq_top", ["first_order", "language", "hom"]], ["add", "theorem", "range_id", ["first_order", "language", "hom"]], ["add", "theorem", "range_le_iff_comap", ["first_order", "language", "hom"]], ["add", "theorem", "subtype_comp_cod_restrict", ["first_order", "language", "hom"]], ["add", "theorem", "closure_image", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_inclusion", ["first_order", "language", "substructure"]], ["add", "def", "inclusion", ["first_order", "language", "substructure"]], ["add", "theorem", "map_closure", ["first_order", "language", "substructure"]], ["add", "theorem", "range_subtype", ["first_order", "language", "substructure"]]]}]}, {"timestamp": 1644340753, "sha": "1ae83049", "message": "chore(*): update to lean 3.39.1c (#11926)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1644328204, "sha": "b1269b0d", "message": "chore(algebra/order/ring): add a few aliases (#11911)\nAdd aliases `one_pos`, `two_pos`, `three_pos`, and `four_pos`.\nWe used to have (some of) these lemmas. They were removed during one of cleanups but it doesn't hurt to have aliases.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}]}, {"timestamp": 1644324222, "sha": "85d9f218", "message": "feat(*): localized `R[X]` notation for `polynomial R` (#11895)\nI did not change `polynomial (complex_term_here taking args)` in many places because I thought it would be more confusing. Also, in some files that prove things about polynomials incidentally, I also did not include the notation and change the files.", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["mod", "theorem", "exists_mem_of_not_is_unit_aeval_prod", ["spectrum"]], ["mod", "theorem", "map_polynomial_aeval_of_degree_pos", ["spectrum"]], ["mod", "theorem", "map_polynomial_aeval_of_nonempty", ["spectrum"]], ["mod", "theorem", "subset_polynomial_aeval", ["spectrum"]]]}, {"oldPath": "src/algebra/cubic_discriminant.lean", "newPath": "src/algebra/cubic_discriminant.lean", "changes": [["mod", "def", "equiv", ["cubic"]], ["mod", "def", "to_poly", ["cubic"]]]}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": [["mod", "def", "char_poly", ["linear_recurrence"]]]}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["mod", "theorem", "coeff_list_prod_of_nat_degree_le", ["polynomial"]], ["mod", "theorem", "coeff_prod_of_nat_degree_le", ["polynomial"]], ["mod", "theorem", "degree_list_prod_le", ["polynomial"]], ["mod", "theorem", "degree_list_sum_le", ["polynomial"]], ["mod", "theorem", "nat_degree_list_prod_le", ["polynomial"]], ["mod", "theorem", "nat_degree_list_sum_le", ["polynomial"]], ["mod", "theorem", "nat_degree_multiset_prod", ["polynomial"]], ["mod", "theorem", "nat_degree_multiset_sum_le", ["polynomial"]], ["mod", "theorem", "nat_degree_sum_le", ["polynomial"]]]}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": [["mod", "theorem", "eval_smul'", ["polynomial"]], ["mod", "theorem", "smul_X", ["polynomial"]], ["mod", "theorem", "smul_eval", ["polynomial"]], ["mod", "theorem", "smul_eval_smul", ["polynomial"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "newPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "changes": [["mod", "theorem", "comap_C_mem_image_of_Df", ["algebraic_geometry", "polynomial"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": [["mod", "theorem", "card_root_set_le_derivative", ["polynomial"]]]}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["mod", "def", "option_equiv_right", ["mv_polynomial"]], ["mod", "def", "punit_alg_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["mod", "theorem", "adjoin_X", ["polynomial"]], ["mod", "def", "aeval", ["polynomial"]], ["mod", "theorem", "aeval_X", ["polynomial"]], ["mod", "theorem", "aeval_X_left", ["polynomial"]], ["mod", "theorem", "aeval_X_pow", ["polynomial"]], ["mod", "theorem", "aeval_alg_equiv_apply", ["polynomial"]], ["mod", "theorem", "aeval_alg_hom_apply", ["polynomial"]], ["mod", "theorem", "aeval_algebra_map_apply", ["polynomial"]], ["mod", "theorem", "aeval_def", ["polynomial"]], ["mod", "theorem", "aeval_eq_sum_range'", ["polynomial"]], ["mod", "theorem", "aeval_eq_sum_range", ["polynomial"]], ["mod", "theorem", "aeval_fn_apply", ["polynomial"]], ["mod", "theorem", "aeval_nat_cast", ["polynomial"]], ["mod", "theorem", "aeval_one", ["polynomial"]], ["mod", "theorem", "aeval_sum", ["polynomial"]], ["mod", "def", "aeval_tower", ["polynomial"]], ["mod", "theorem", "aeval_tower_comp_C", ["polynomial"]], ["mod", "theorem", "aeval_zero", ["polynomial"]], ["mod", "theorem", "alg_hom_ext", ["polynomial"]], ["mod", "theorem", "coeff_zero_eq_aeval_zero'", ["polynomial"]], ["mod", "theorem", "coeff_zero_eq_aeval_zero", ["polynomial"]], ["mod", "theorem", "dvd_term_of_dvd_eval_of_dvd_terms", ["polynomial"]], ["mod", "theorem", "dvd_term_of_is_root_of_dvd_terms", ["polynomial"]], ["mod", "theorem", "eval_mul_X_sub_C", ["polynomial"]], ["mod", "theorem", "eval_unique", ["polynomial"]], ["mod", "theorem", "eval₂_int_cast_ring_hom_X", ["polynomial"]], ["mod", "theorem", "is_root_of_aeval_algebra_map_eq_zero", ["polynomial"]], ["mod", "def", "to_finsupp_iso_alg", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "def", "C", ["polynomial"]], ["mod", "theorem", "C_eq_nat_cast", ["polynomial"]], ["mod", "def", "X", ["polynomial"]], ["mod", "theorem", "X_ne_zero", ["polynomial"]], ["mod", "theorem", "add_hom_ext'", ["polynomial"]], ["mod", "theorem", "add_hom_ext", ["polynomial"]], ["mod", "theorem", "add_to_finsupp", ["polynomial"]], ["mod", "def", "coeff", ["polynomial"]], ["mod", "theorem", "coeff_X", ["polynomial"]], ["mod", "theorem", "coeff_X_of_ne_one", ["polynomial"]], ["mod", "theorem", "coeff_X_one", ["polynomial"]], ["mod", "theorem", "coeff_X_zero", ["polynomial"]], ["mod", "theorem", "coeff_erase", ["polynomial"]], ["mod", "theorem", "coeff_neg", ["polynomial"]], ["mod", "theorem", "coeff_one_zero", ["polynomial"]], ["mod", "theorem", "coeff_sub", ["polynomial"]], ["mod", "theorem", "coeff_update", ["polynomial"]], ["mod", "theorem", "coeff_update_apply", ["polynomial"]], ["mod", "theorem", "coeff_update_ne", ["polynomial"]], ["mod", "theorem", "coeff_update_same", ["polynomial"]], ["mod", "theorem", "coeff_zero", ["polynomial"]], ["mod", "theorem", "commute_X", ["polynomial"]], ["mod", "theorem", "commute_X_pow", ["polynomial"]], ["mod", "theorem", "eq_zero_of_eq_zero", ["polynomial"]], ["mod", "theorem", "erase_ne", ["polynomial"]], ["mod", "theorem", "erase_same", ["polynomial"]], ["mod", "theorem", "erase_zero", ["polynomial"]], ["mod", "theorem", "exists_iff_exists_finsupp", ["polynomial"]], ["mod", "theorem", "ext", ["polynomial"]], ["mod", "theorem", "ext_iff", ["polynomial"]], ["mod", "theorem", "forall_iff_forall_finsupp", ["polynomial"]], ["mod", "theorem", "lhom_ext'", ["polynomial"]], ["mod", "def", "monomial", ["polynomial"]], ["mod", "theorem", "monomial_add_erase", ["polynomial"]], ["mod", "def", "monomial_fun", ["polynomial"]], ["mod", "theorem", "mul_to_finsupp", ["polynomial"]], ["mod", "theorem", "nat_cast_mul", ["polynomial"]], ["mod", "theorem", "neg_to_finsupp", ["polynomial"]], ["mod", "theorem", "one_to_finsupp", ["polynomial"]], ["mod", "def", "op_ring_equiv", ["polynomial"]], ["mod", "def", "sum", ["polynomial"]], ["mod", "theorem", "sum_add'", ["polynomial"]], ["mod", "theorem", "sum_add", ["polynomial"]], ["mod", "theorem", "sum_add_index", ["polynomial"]], ["mod", "theorem", "sum_def", ["polynomial"]], ["mod", "theorem", "sum_eq_of_subset", ["polynomial"]], ["mod", "theorem", "sum_smul_index", ["polynomial"]], ["mod", "def", "support", ["polynomial"]], ["mod", "theorem", "support_X", ["polynomial"]], ["mod", "theorem", "support_X_empty", ["polynomial"]], ["mod", "theorem", "support_X_pow", ["polynomial"]], ["mod", "theorem", "support_erase", ["polynomial"]], ["mod", "theorem", "support_neg", ["polynomial"]], ["mod", "theorem", "support_update", ["polynomial"]], ["mod", "theorem", "support_update_ne_zero", ["polynomial"]], ["mod", "theorem", "support_update_zero", ["polynomial"]], ["mod", "theorem", "support_zero", ["polynomial"]], ["mod", "def", "to_finsupp_iso", ["polynomial"]], ["mod", "def", "update", ["polynomial"]], ["mod", "theorem", "update_zero_eq_erase", ["polynomial"]], ["mod", "theorem", "zero_to_finsupp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": [["mod", "def", "cancel_leads", ["polynomial"]], ["mod", "theorem", "dvd_cancel_leads_of_dvd_of_dvd", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/cardinal.lean", "newPath": "src/data/polynomial/cardinal.lean", "changes": [["mod", "theorem", "cardinal_mk_le_max", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["mod", "theorem", "C_dvd_iff_dvd_coeff", ["polynomial"]], ["mod", "theorem", "C_mul'", ["polynomial"]], ["mod", "theorem", "coeff_C_mul", ["polynomial"]], ["mod", "theorem", "coeff_C_mul_X", ["polynomial"]], ["mod", "theorem", "coeff_X_mul", ["polynomial"]], ["mod", "theorem", "coeff_X_mul_zero", ["polynomial"]], ["mod", "theorem", "coeff_X_pow_mul'", ["polynomial"]], ["mod", "theorem", "coeff_X_pow_mul", ["polynomial"]], ["mod", "theorem", "coeff_add", ["polynomial"]], ["mod", "theorem", "coeff_bit0_mul", ["polynomial"]], ["mod", "theorem", "coeff_bit1_mul", ["polynomial"]], ["mod", "theorem", "coeff_mul", ["polynomial"]], ["mod", "theorem", "coeff_mul_C", ["polynomial"]], ["mod", "theorem", "coeff_mul_X", ["polynomial"]], ["mod", "theorem", "coeff_mul_X_pow'", ["polynomial"]], ["mod", "theorem", "coeff_mul_X_pow", ["polynomial"]], ["mod", "theorem", "coeff_mul_X_zero", ["polynomial"]], ["mod", "theorem", "coeff_one", ["polynomial"]], ["mod", "theorem", "coeff_smul", ["polynomial"]], ["mod", "theorem", "coeff_sum", ["polynomial"]], ["mod", "theorem", "finset_sum_coeff", ["polynomial"]], ["mod", "def", "lcoeff", ["polynomial"]], ["mod", "theorem", "lcoeff_apply", ["polynomial"]], ["mod", "theorem", "mul_X_pow_eq_zero", ["polynomial"]], ["mod", "theorem", "mul_coeff_zero", ["polynomial"]], ["mod", "theorem", "support_smul", ["polynomial"]], ["mod", "theorem", "update_eq_add_sub_coeff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/card_pow_degree.lean", "newPath": "src/data/polynomial/degree/card_pow_degree.lean", "changes": [["mod", "theorem", "card_pow_degree_apply", ["polynomial"]], ["mod", "theorem", "card_pow_degree_nonzero", ["polynomial"]], ["mod", "theorem", "card_pow_degree_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "as_sum_range'", ["polynomial"]], ["mod", "theorem", "as_sum_range", ["polynomial"]], ["mod", "theorem", "as_sum_range_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "as_sum_support", ["polynomial"]], ["mod", "theorem", "as_sum_support_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "card_supp_le_succ_nat_degree", ["polynomial"]], ["mod", "theorem", "coeff_eq_zero_of_nat_degree_lt", ["polynomial"]], ["mod", "theorem", "coeff_mul_X_sub_C", ["polynomial"]], ["mod", "theorem", "coeff_mul_degree_add_degree", ["polynomial"]], ["mod", "theorem", "coeff_nat_degree_succ_eq_zero", ["polynomial"]], ["mod", "theorem", "coeff_pow_mul_nat_degree", ["polynomial"]], ["mod", "def", "degree", ["polynomial"]], ["mod", "theorem", "degree_X", ["polynomial"]], ["mod", "theorem", "degree_X_le", ["polynomial"]], ["mod", "theorem", "degree_X_pow", ["polynomial"]], ["mod", "theorem", "degree_X_pow_le", ["polynomial"]], ["mod", "theorem", "degree_add_le", ["polynomial"]], ["mod", "theorem", "degree_add_le_of_degree_le", ["polynomial"]], ["mod", "theorem", "degree_eq_iff_nat_degree_eq", ["polynomial"]], ["mod", "theorem", "degree_eq_iff_nat_degree_eq_of_pos", ["polynomial"]], ["mod", "theorem", "degree_erase_le", ["polynomial"]], ["mod", "theorem", "degree_le_iff_coeff_zero", ["polynomial"]], ["mod", "theorem", "degree_lt_iff_coeff_zero", ["polynomial"]], ["mod", "theorem", "degree_lt_wf", ["polynomial"]], ["mod", "theorem", "degree_mono", ["polynomial"]], ["mod", "theorem", "degree_mul_le", ["polynomial"]], ["mod", "theorem", "degree_neg", ["polynomial"]], ["mod", "theorem", "degree_one", ["polynomial"]], ["mod", "theorem", "degree_one_le", ["polynomial"]], ["mod", "theorem", "degree_pow", ["polynomial"]], ["mod", "theorem", "degree_pow_le", ["polynomial"]], ["mod", "theorem", "degree_smul_le", ["polynomial"]], ["mod", "theorem", "degree_sub_le", ["polynomial"]], ["mod", "theorem", "degree_sum_le", ["polynomial"]], ["mod", "theorem", "degree_update_le", ["polynomial"]], ["mod", "theorem", "degree_zero", ["polynomial"]], ["mod", "theorem", "ite_le_nat_degree_coeff", ["polynomial"]], ["mod", "def", "leading_coeff", ["polynomial"]], ["mod", "theorem", "leading_coeff_X", ["polynomial"]], ["mod", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["mod", "def", "leading_coeff_hom", ["polynomial"]], ["mod", "theorem", "leading_coeff_hom_apply", ["polynomial"]], ["mod", "theorem", "leading_coeff_monic_mul", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul_X", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul_monic", ["polynomial"]], ["mod", "theorem", "leading_coeff_one", ["polynomial"]], ["mod", "theorem", "leading_coeff_pow", ["polynomial"]], ["mod", "theorem", "leading_coeff_zero", ["polynomial"]], ["mod", "theorem", "coeff_nat_degree", ["polynomial", "monic"]], ["mod", "theorem", "leading_coeff", ["polynomial", "monic"]], ["mod", "theorem", "ne_zero", ["polynomial", "monic"]], ["mod", "theorem", "ne_zero_of_ne", ["polynomial", "monic"]], ["mod", "def", "monic", ["polynomial"]], ["mod", "theorem", "monic_X", ["polynomial"]], ["mod", "theorem", "monic_X_pow", ["polynomial"]], ["mod", "theorem", "monic_of_subsingleton", ["polynomial"]], ["mod", "theorem", "monic_one", ["polynomial"]], ["mod", "def", "nat_degree", ["polynomial"]], ["mod", "theorem", "nat_degree_X", ["polynomial"]], ["mod", "theorem", "nat_degree_X_le", ["polynomial"]], ["mod", "theorem", "nat_degree_X_pow", ["polynomial"]], ["mod", "theorem", "nat_degree_add_le", ["polynomial"]], ["mod", "theorem", "nat_degree_add_le_of_degree_le", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_of_degree_eq_some", ["polynomial"]], ["mod", "theorem", "nat_degree_int_cast", ["polynomial"]], ["mod", "theorem", "nat_degree_le_nat_degree", ["polynomial"]], ["mod", "theorem", "nat_degree_mul_le", ["polynomial"]], ["mod", "theorem", "nat_degree_nat_cast", ["polynomial"]], ["mod", "theorem", "nat_degree_neg", ["polynomial"]], ["mod", "theorem", "nat_degree_one", ["polynomial"]], ["mod", "theorem", "nat_degree_pow_le", ["polynomial"]], ["mod", "theorem", "nat_degree_smul_le", ["polynomial"]], ["mod", "theorem", "nat_degree_zero", ["polynomial"]], ["mod", "def", "next_coeff", ["polynomial"]], ["mod", "theorem", "next_coeff_of_pos_nat_degree", ["polynomial"]], ["mod", "theorem", "not_is_unit_X", ["polynomial"]], ["mod", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["mod", "theorem", "sum_over_range'", ["polynomial"]], ["mod", "theorem", "sum_over_range", ["polynomial"]], ["mod", "theorem", "zero_le_degree_iff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["mod", "theorem", "coe_lt_degree", ["polynomial"]], ["mod", "theorem", "degree_pos_of_eval₂_root", ["polynomial"]], ["mod", "theorem", "degree_pos_of_root", ["polynomial"]], ["mod", "theorem", "degree_sum_eq_of_disjoint", ["polynomial"]], ["mod", "theorem", "nat_degree_C_mul_le", ["polynomial"]], ["mod", "theorem", "nat_degree_add_coeff_mul", ["polynomial"]], ["mod", "theorem", "nat_degree_mul_C_le", ["polynomial"]], ["mod", "theorem", "nat_degree_pos_of_eval₂_root", ["polynomial"]], ["mod", "theorem", "nat_degree_sum_eq_of_disjoint", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["mod", "theorem", "coeff_eq_zero_of_lt_nat_trailing_degree", ["polynomial"]], ["mod", "theorem", "coeff_nat_trailing_degree_pred_eq_zero", ["polynomial"]], ["mod", "theorem", "le_trailing_degree_X", ["polynomial"]], ["mod", "def", "nat_trailing_degree", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_X", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_X_le", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_eq_of_trailing_degree_eq", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_eq_of_trailing_degree_eq_some", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_int_cast", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_le_nat_degree", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_mul_X_pow", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_nat_cast", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_neg", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_one", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_zero", ["polynomial"]], ["mod", "def", "next_coeff_up", ["polynomial"]], ["mod", "theorem", "next_coeff_up_of_pos_nat_trailing_degree", ["polynomial"]], ["mod", "def", "trailing_coeff", ["polynomial"]], ["mod", "theorem", "trailing_coeff_zero", ["polynomial"]], ["mod", "def", "trailing_degree", ["polynomial"]], ["mod", "theorem", "trailing_degree_X", ["polynomial"]], ["mod", "theorem", "trailing_degree_eq_iff_nat_trailing_degree_eq", ["polynomial"]], ["mod", "theorem", "trailing_degree_eq_iff_nat_trailing_degree_eq_of_pos", ["polynomial"]], ["mod", "theorem", "trailing_degree_neg", ["polynomial"]], ["mod", "theorem", "trailing_degree_one", ["polynomial"]], ["mod", "theorem", "trailing_degree_one_le", ["polynomial"]], ["mod", "theorem", "trailing_degree_zero", ["polynomial"]], ["mod", "theorem", "trailing_coeff", ["polynomial", "trailing_monic"]], ["mod", "def", "trailing_monic", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": [["mod", "theorem", "add", ["denoms_clearable"]], ["mod", "def", "denoms_clearable", []], ["mod", "theorem", "one_le_pow_mul_abs_eval_div", []]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["mod", "theorem", "coeff_derivative", ["polynomial"]], ["mod", "theorem", "degree_derivative_eq", ["polynomial"]], ["mod", "theorem", "degree_derivative_le", ["polynomial"]], ["mod", "theorem", "degree_derivative_lt", ["polynomial"]], ["mod", "def", "derivative", ["polynomial"]], ["mod", "theorem", "derivative_C_mul", ["polynomial"]], ["mod", "theorem", "derivative_X", ["polynomial"]], ["mod", "theorem", "derivative_add", ["polynomial"]], ["mod", "theorem", "derivative_apply", ["polynomial"]], ["mod", "theorem", "derivative_bit0", ["polynomial"]], ["mod", "theorem", "derivative_bit1", ["polynomial"]], ["mod", "theorem", "derivative_cast_nat", ["polynomial"]], ["mod", "theorem", "derivative_comp", ["polynomial"]], ["mod", "theorem", "derivative_comp_one_sub_X", ["polynomial"]], ["mod", "theorem", "derivative_eval", ["polynomial"]], ["mod", "theorem", "derivative_eval₂_C", ["polynomial"]], ["mod", "def", "derivative_lhom", ["polynomial"]], ["mod", "theorem", "derivative_map", ["polynomial"]], ["mod", "theorem", "derivative_mul", ["polynomial"]], ["mod", "theorem", "derivative_neg", ["polynomial"]], ["mod", "theorem", "derivative_one", ["polynomial"]], ["mod", "theorem", "derivative_pow", ["polynomial"]], ["mod", "theorem", "derivative_pow_succ", ["polynomial"]], ["mod", "theorem", "derivative_prod", ["polynomial"]], ["mod", "theorem", "derivative_smul", ["polynomial"]], ["mod", "theorem", "derivative_sub", ["polynomial"]], ["mod", "theorem", "derivative_sum", ["polynomial"]], ["mod", "theorem", "derivative_zero", ["polynomial"]], ["mod", "theorem", "iterate_derivative_C_mul", ["polynomial"]], ["mod", "theorem", "iterate_derivative_add", ["polynomial"]], ["mod", "theorem", "iterate_derivative_cast_nat_mul", ["polynomial"]], ["mod", "theorem", "iterate_derivative_comp_one_sub_X", ["polynomial"]], ["mod", "theorem", "iterate_derivative_map", ["polynomial"]], ["mod", "theorem", "iterate_derivative_neg", ["polynomial"]], ["mod", "theorem", "iterate_derivative_smul", ["polynomial"]], ["mod", "theorem", "iterate_derivative_sub", ["polynomial"]], ["mod", "theorem", "iterate_derivative_zero", ["polynomial"]], ["mod", "theorem", "mem_support_derivative", ["polynomial"]], ["mod", "theorem", "nat_degree_derivative_lt", ["polynomial"]], ["mod", "theorem", "of_mem_support_derivative", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["mod", "theorem", "X_dvd_iff", ["polynomial"]], ["mod", "def", "decidable_dvd_monic", ["polynomial"]], ["mod", "theorem", "degree_div_by_monic_le", ["polynomial"]], ["mod", "theorem", "degree_div_by_monic_lt", ["polynomial"]], ["mod", "theorem", "degree_mod_by_monic_le", ["polynomial"]], ["mod", "theorem", "degree_mod_by_monic_lt", ["polynomial"]], ["mod", "def", "div_by_monic", ["polynomial"]], ["mod", "theorem", "div_by_monic_eq_of_not_monic", ["polynomial"]], ["mod", "theorem", "div_by_monic_one", ["polynomial"]], ["mod", "theorem", "div_by_monic_zero", ["polynomial"]], ["mod", "theorem", "div_mod_by_monic_unique", ["polynomial"]], ["mod", "theorem", "map_dvd_map", ["polynomial"]], ["mod", "def", "mod_by_monic", ["polynomial"]], ["mod", "theorem", "mod_by_monic_X", ["polynomial"]], ["mod", "theorem", "mod_by_monic_X_sub_C_eq_C_eval", ["polynomial"]], ["mod", "theorem", "mod_by_monic_add_div", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_of_not_monic", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_sub_mul_div", ["polynomial"]], ["mod", "theorem", "mod_by_monic_one", ["polynomial"]], ["mod", "theorem", "mod_by_monic_zero", ["polynomial"]], ["mod", "theorem", "nat_degree_div_by_monic", ["polynomial"]], ["mod", "theorem", "pow_root_multiplicity_dvd", ["polynomial"]], ["mod", "def", "root_multiplicity", ["polynomial"]], ["mod", "theorem", "root_multiplicity_eq_multiplicity", ["polynomial"]], ["mod", "theorem", "root_multiplicity_eq_zero", ["polynomial"]], ["mod", "theorem", "root_multiplicity_pos", ["polynomial"]], ["mod", "theorem", "zero_div_by_monic", ["polynomial"]], ["mod", "theorem", "zero_mod_by_monic", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["mod", "def", "erase_lead", ["polynomial"]], ["mod", "theorem", "erase_lead_X", ["polynomial"]], ["mod", "theorem", "erase_lead_X_pow", ["polynomial"]], ["mod", "theorem", "erase_lead_add_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "erase_lead_add_monomial_nat_degree_leading_coeff", ["polynomial"]], ["mod", "theorem", "erase_lead_nat_degree_lt_or_erase_lead_eq_zero", ["polynomial"]], ["mod", "theorem", "erase_lead_support", ["polynomial"]], ["mod", "theorem", "erase_lead_zero", ["polynomial"]], ["mod", "theorem", "induction_with_nat_degree_le", ["polynomial"]], ["mod", "theorem", "self_sub_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "self_sub_monomial_nat_degree_leading_coeff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "bit0_comp", ["polynomial"]], ["mod", "theorem", "bit1_comp", ["polynomial"]], ["mod", "theorem", "cast_int_comp", ["polynomial"]], ["mod", "theorem", "coe_eval_ring_hom", ["polynomial"]], ["mod", "theorem", "coeff_zero_eq_eval_zero", ["polynomial"]], ["mod", "def", "comp", ["polynomial"]], ["mod", "theorem", "comp_assoc", ["polynomial"]], ["mod", "def", "comp_ring_hom", ["polynomial"]], ["mod", "theorem", "comp_zero", ["polynomial"]], ["mod", "theorem", "degree_map_le", ["polynomial"]], ["mod", "def", "eval", ["polynomial"]], ["mod", "theorem", "eval_eq_finset_sum'", ["polynomial"]], ["mod", "theorem", "eval_eq_finset_sum", ["polynomial"]], ["mod", "theorem", "eval_finset_sum", ["polynomial"]], ["mod", "theorem", "eval_int_cast", ["polynomial"]], ["mod", "theorem", "eval_list_prod", ["polynomial"]], ["mod", "theorem", "eval_multiset_prod", ["polynomial"]], ["mod", "theorem", "eval_nat_cast", ["polynomial"]], ["mod", "theorem", "eval_nat_cast_map", ["polynomial"]], ["mod", "theorem", "eval_nat_cast_mul", ["polynomial"]], ["mod", "theorem", "eval_neg", ["polynomial"]], ["mod", "theorem", "eval_one", ["polynomial"]], ["mod", "theorem", "eval_one_map", ["polynomial"]], ["mod", "theorem", "eval_prod", ["polynomial"]], ["mod", "def", "eval_ring_hom", ["polynomial"]], ["mod", "theorem", "eval_smul", ["polynomial"]], ["mod", "theorem", "eval_sub", ["polynomial"]], ["mod", "theorem", "eval_sum", ["polynomial"]], ["mod", "theorem", "eval_zero", ["polynomial"]], ["mod", "theorem", "eval_zero_map", ["polynomial"]], ["mod", "def", "eval₂", ["polynomial"]], ["mod", "def", "eval₂_add_monoid_hom", ["polynomial"]], ["mod", "theorem", "eval₂_eq_sum_range'", ["polynomial"]], ["mod", "theorem", "eval₂_finset_sum", ["polynomial"]], ["mod", "theorem", "eval₂_list_prod_noncomm", ["polynomial"]], ["mod", "theorem", "eval₂_mul_eq_zero_of_left", ["polynomial"]], ["mod", "theorem", "eval₂_mul_eq_zero_of_right", ["polynomial"]], ["mod", "theorem", "eval₂_nat_cast", ["polynomial"]], ["mod", "theorem", "eval₂_one", ["polynomial"]], ["mod", "def", "eval₂_ring_hom'", ["polynomial"]], ["mod", "def", "eval₂_ring_hom", ["polynomial"]], ["mod", "theorem", "eval₂_smul", ["polynomial"]], ["mod", "theorem", "eval₂_sum", ["polynomial"]], ["mod", "theorem", "eval₂_zero", ["polynomial"]], ["mod", "theorem", "dvd", ["polynomial", "is_root"]], ["mod", "theorem", "map", ["polynomial", "is_root"]], ["mod", "theorem", "of_map", ["polynomial", "is_root"]], ["mod", "def", "is_root", ["polynomial"]], ["mod", "theorem", "is_root_map_iff", ["polynomial"]], ["mod", "def", "leval", ["polynomial"]], ["mod", "def", "map", ["polynomial"]], ["mod", "theorem", "map_comp", ["polynomial"]], ["mod", "def", "map_equiv", ["polynomial"]], ["mod", "theorem", "map_list_prod", ["polynomial"]], ["mod", "theorem", "map_multiset_prod", ["polynomial"]], ["mod", "theorem", "map_one", ["polynomial"]], ["mod", "theorem", "map_prod", ["polynomial"]], ["mod", "def", "map_ring_hom", ["polynomial"]], ["mod", "theorem", "map_ring_hom_id", ["polynomial"]], ["mod", "theorem", "map_sum", ["polynomial"]], ["mod", "theorem", "map_zero", ["polynomial"]], ["mod", "theorem", "mem_map_srange", ["polynomial"]], ["mod", "theorem", "mul_comp", ["polynomial"]], ["mod", "theorem", "nat_cast_comp", ["polynomial"]], ["mod", "theorem", "nat_cast_mul_comp", ["polynomial"]], ["mod", "theorem", "nat_degree_map_le", ["polynomial"]], ["mod", "theorem", "one_comp", ["polynomial"]], ["mod", "theorem", "pow_comp", ["polynomial"]], ["mod", "theorem", "prod_comp", ["polynomial"]], ["mod", "theorem", "root_mul_left_of_is_root", ["polynomial"]], ["mod", "theorem", "root_mul_right_of_is_root", ["polynomial"]], ["mod", "theorem", "support_map_subset", ["polynomial"]], ["mod", "theorem", "zero_comp", ["polynomial"]], ["mod", "theorem", "zero_is_root_of_coeff_zero_eq_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "coe_norm_unit", ["polynomial"]], ["mod", "theorem", "coe_norm_unit_of_ne_zero", ["polynomial"]], ["mod", "theorem", "coeff_inv_units", ["polynomial"]], ["mod", "theorem", "degree_div_le", ["polynomial"]], ["mod", "theorem", "degree_map", ["polynomial"]], ["mod", "theorem", "degree_mul_leading_coeff_inv", ["polynomial"]], ["mod", "def", "div", ["polynomial"]], ["mod", "theorem", "div_by_monic_eq_div", ["polynomial"]], ["mod", "theorem", "eval_gcd_eq_zero", ["polynomial"]], ["mod", "theorem", "eval₂_gcd_eq_zero", ["polynomial"]], ["mod", "theorem", "irreducible_of_monic", ["polynomial"]], ["mod", "theorem", "is_root_gcd_iff_is_root_left_right", ["polynomial"]], ["mod", "theorem", "leading_coeff_normalize", ["polynomial"]], ["mod", "theorem", "map_dvd_map'", ["polynomial"]], ["mod", "def", "mod", ["polynomial"]], ["mod", "theorem", "mod_X_sub_C_eq_C_eval", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_mod", ["polynomial"]], ["mod", "theorem", "normalize_eq_self", ["polynomial", "monic"]], ["mod", "theorem", "monic_map_iff", ["polynomial"]], ["mod", "theorem", "prod_multiset_X_sub_C_dvd", ["polynomial"]], ["mod", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]], ["mod", "theorem", "root_gcd_iff_root_left_right", ["polynomial"]], ["mod", "theorem", "root_left_of_root_gcd", ["polynomial"]], ["mod", "theorem", "root_right_of_root_gcd", ["polynomial"]], ["mod", "theorem", "roots_C_mul", ["polynomial"]], ["mod", "theorem", "roots_normalize", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": [["mod", "def", "hasse_deriv", ["polynomial"]], ["mod", "theorem", "hasse_deriv_X", ["polynomial"]], ["mod", "theorem", "hasse_deriv_apply_one", ["polynomial"]], ["mod", "theorem", "hasse_deriv_eq_zero_of_lt_nat_degree", ["polynomial"]], ["mod", "theorem", "hasse_deriv_mul", ["polynomial"]], ["mod", "theorem", "nat_degree_hasse_deriv", ["polynomial"]], ["mod", "theorem", "nat_degree_hasse_deriv_le", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": [["mod", "def", "binom_expansion", ["polynomial"]], ["mod", "def", "eval_sub_factor", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/induction.lean", "newPath": "src/data/polynomial/induction.lean", "changes": [["mod", "theorem", "coeff_monomial_mul", ["polynomial"]], ["mod", "theorem", "coeff_monomial_zero_mul", ["polynomial"]], ["mod", "theorem", "coeff_mul_monomial", ["polynomial"]], ["mod", "theorem", "coeff_mul_monomial_zero", ["polynomial"]], ["mod", "theorem", "sum_C_mul_X_eq", ["polynomial"]], ["mod", "theorem", "sum_monomial_eq", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": [["mod", "def", "div_X", ["polynomial"]], ["mod", "theorem", "div_X_mul_X_add", ["polynomial"]], ["mod", "theorem", "nat_degree_ne_zero_induction_on", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": [["mod", "theorem", "integral_normalization_aeval_eq_zero", ["polynomial"]], ["mod", "theorem", "integral_normalization_coeff", ["polynomial"]], ["mod", "theorem", "integral_normalization_coeff_degree", ["polynomial"]], ["mod", "theorem", "integral_normalization_coeff_nat_degree", ["polynomial"]], ["mod", "theorem", "integral_normalization_coeff_ne_degree", ["polynomial"]], ["mod", "theorem", "integral_normalization_eval₂_eq_zero", ["polynomial"]], ["mod", "theorem", "integral_normalization_support", ["polynomial"]], ["mod", "theorem", "monic_integral_normalization", ["polynomial"]], ["mod", "theorem", "support_integral_normalization", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": [["mod", "def", "iterated_deriv", ["polynomial"]], ["mod", "theorem", "iterated_deriv_X", ["polynomial"]], ["mod", "theorem", "iterated_deriv_X_one", ["polynomial"]], ["mod", "theorem", "iterated_deriv_X_zero", ["polynomial"]], ["mod", "theorem", "iterated_deriv_one", ["polynomial"]], ["mod", "theorem", "iterated_deriv_one_zero", ["polynomial"]], ["mod", "theorem", "iterated_deriv_zero_left", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": [["mod", "theorem", "X_mem_lifts", ["polynomial"]], ["mod", "theorem", "X_pow_mem_lifts", ["polynomial"]], ["mod", "theorem", "base_mul_mem_lifts", ["polynomial"]], ["mod", "theorem", "erase_mem_lifts", ["polynomial"]], ["mod", "def", "lifts", ["polynomial"]], ["mod", "theorem", "lifts_and_degree_eq_and_monic", ["polynomial"]], ["mod", "theorem", "lifts_iff_coeff_lifts", ["polynomial"]], ["mod", "theorem", "lifts_iff_lifts_ring", ["polynomial"]], ["mod", "theorem", "lifts_iff_ring_hom_srange", ["polynomial"]], ["mod", "theorem", "lifts_iff_set_range", ["polynomial"]], ["mod", "def", "lifts_ring", ["polynomial"]], ["mod", "theorem", "map_alg_eq_map", ["polynomial"]], ["mod", "theorem", "mem_lifts", ["polynomial"]], ["mod", "theorem", "mem_lifts_and_degree_eq", ["polynomial"]], ["mod", "theorem", "smul_mem_lifts", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["mod", "theorem", "irreducible_of_mirror", ["polynomial"]], ["mod", "theorem", "mirror_X", ["polynomial"]], ["mod", "theorem", "mirror_mul_of_domain", ["polynomial"]], ["mod", "theorem", "mirror_neg", ["polynomial"]], ["mod", "theorem", "mirror_smul", ["polynomial"]], ["mod", "theorem", "mirror_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["mod", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["mod", "theorem", "is_unit_leading_coeff_mul_left_eq_zero_iff", ["polynomial"]], ["mod", "theorem", "is_unit_leading_coeff_mul_right_eq_zero_iff", ["polynomial"]], ["mod", "theorem", "leading_coeff_map'", ["polynomial"]], ["mod", "theorem", "leading_coeff_of_injective", ["polynomial"]], ["mod", "theorem", "as_sum", ["polynomial", "monic"]], ["mod", "theorem", "degree_le_zero_iff_eq_one", ["polynomial", "monic"]], ["mod", "theorem", "degree_mul_comm", ["polynomial", "monic"]], ["mod", "theorem", "is_regular", ["polynomial", "monic"]], ["mod", "theorem", "mul_left_eq_zero_iff", ["polynomial", "monic"]], ["mod", "theorem", "mul_left_ne_zero", ["polynomial", "monic"]], ["mod", "theorem", "mul_nat_degree_lt_iff", ["polynomial", "monic"]], ["mod", "theorem", "mul_right_eq_zero_iff", ["polynomial", "monic"]], ["mod", "theorem", "mul_right_ne_zero", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_eq_zero_iff_eq_one", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_mul'", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_mul", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_mul_comm", ["polynomial", "monic"]], ["mod", "theorem", "next_coeff_mul", ["polynomial", "monic"]], ["mod", "theorem", "next_coeff_multiset_prod", ["polynomial", "monic"]], ["mod", "theorem", "next_coeff_prod", ["polynomial", "monic"]], ["mod", "theorem", "monic_add_of_left", ["polynomial"]], ["mod", "theorem", "monic_add_of_right", ["polynomial"]], ["mod", "theorem", "monic_multiset_prod_of_monic", ["polynomial"]], ["mod", "theorem", "monic_of_injective", ["polynomial"]], ["mod", "theorem", "monic_prod_of_monic", ["polynomial"]], ["mod", "theorem", "monic_sub_of_left", ["polynomial"]], ["mod", "theorem", "monic_sub_of_right", ["polynomial"]], ["mod", "theorem", "nat_degree_map_eq_of_injective", ["polynomial"]], ["mod", "theorem", "next_coeff_map", ["polynomial"]], ["mod", "theorem", "not_monic_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["mod", "theorem", "card_support_le_one_iff_monomial", ["polynomial"]], ["mod", "theorem", "ring_hom_ext'", ["polynomial"]], ["mod", "theorem", "ring_hom_ext", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["mod", "theorem", "coeff_one_reverse", ["polynomial"]], ["mod", "theorem", "coeff_reflect", ["polynomial"]], ["mod", "theorem", "coeff_reverse", ["polynomial"]], ["mod", "theorem", "coeff_zero_reverse", ["polynomial"]], ["mod", "theorem", "eval₂_reflect_eq_zero_iff", ["polynomial"]], ["mod", "theorem", "eval₂_reflect_mul_pow", ["polynomial"]], ["mod", "theorem", "eval₂_reverse_eq_zero_iff", ["polynomial"]], ["mod", "theorem", "eval₂_reverse_mul_pow", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_reverse_nat_degree_add_nat_trailing_degree", ["polynomial"]], ["mod", "theorem", "reflect_C_mul", ["polynomial"]], ["mod", "theorem", "reflect_add", ["polynomial"]], ["mod", "theorem", "reflect_eq_zero_iff", ["polynomial"]], ["mod", "theorem", "reflect_monomial", ["polynomial"]], ["mod", "theorem", "reflect_neg", ["polynomial"]], ["mod", "theorem", "reflect_sub", ["polynomial"]], ["mod", "theorem", "reflect_support", ["polynomial"]], ["mod", "theorem", "reflect_zero", ["polynomial"]], ["mod", "theorem", "reverse_leading_coeff", ["polynomial"]], ["mod", "theorem", "reverse_mul", ["polynomial"]], ["mod", "theorem", "reverse_mul_of_domain", ["polynomial"]], ["mod", "theorem", "reverse_nat_degree", ["polynomial"]], ["mod", "theorem", "reverse_nat_degree_le", ["polynomial"]], ["mod", "theorem", "reverse_nat_trailing_degree", ["polynomial"]], ["mod", "theorem", "reverse_neg", ["polynomial"]], ["mod", "theorem", "reverse_trailing_coeff", ["polynomial"]], ["mod", "theorem", "reverse_zero", ["polynomial"]], ["mod", "theorem", "trailing_coeff_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "card_le_degree_of_subset_roots", ["polynomial"]], ["mod", "theorem", "card_roots'", ["polynomial"]], ["mod", "theorem", "card_roots_sub_C'", ["polynomial"]], ["mod", "theorem", "card_roots_sub_C", ["polynomial"]], ["mod", "theorem", "coeff_coe_units_zero_ne_zero", ["polynomial"]], ["mod", "theorem", "count_roots", ["polynomial"]], ["mod", "theorem", "degree_coe_units", ["polynomial"]], ["mod", "theorem", "degree_le_mul_left", ["polynomial"]], ["mod", "theorem", "degree_pos_of_aeval_root", ["polynomial"]], ["mod", "theorem", "exists_max_root", ["polynomial"]], ["mod", "theorem", "exists_min_root", ["polynomial"]], ["mod", "theorem", "exists_multiset_roots", ["polynomial"]], ["mod", "theorem", "funext", ["polynomial"]], ["mod", "theorem", "irreducible_X", ["polynomial"]], ["mod", "theorem", "is_unit_iff", ["polynomial"]], ["mod", "theorem", "leading_coeff_div_by_monic_X_sub_C", ["polynomial"]], ["mod", "theorem", "mem_roots_sub_C", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_of_dvd_sub", ["polynomial"]], ["mod", "theorem", "irreducible_of_irreducible_map", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_coe_units", ["polynomial"]], ["mod", "theorem", "nat_degree_le_of_dvd", ["polynomial"]], ["mod", "theorem", "nat_degree_pos_of_aeval_root", ["polynomial"]], ["mod", "theorem", "nat_degree_pow", ["polynomial"]], ["mod", "theorem", "prime_X", ["polynomial"]], ["mod", "theorem", "root_multiplicity_add", ["polynomial"]], ["mod", "theorem", "root_multiplicity_mul", ["polynomial"]], ["mod", "theorem", "root_multiplicity_of_dvd", ["polynomial"]], ["mod", "def", "root_set", ["polynomial"]], ["mod", "theorem", "root_set_def", ["polynomial"]], ["mod", "theorem", "root_set_finite", ["polynomial"]], ["mod", "theorem", "roots_list_prod", ["polynomial"]], ["mod", "theorem", "roots_mul", ["polynomial"]], ["mod", "theorem", "roots_multiset_prod", ["polynomial"]], ["mod", "theorem", "roots_one", ["polynomial"]], ["mod", "theorem", "roots_prod", ["polynomial"]], ["mod", "theorem", "roots_smul_nonzero", ["polynomial"]], ["mod", "theorem", "roots_zero", ["polynomial"]], ["mod", "theorem", "units_coeff_zero_smul", ["polynomial"]], ["mod", "theorem", "zero_of_eval_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/taylor.lean", "newPath": "src/data/polynomial/taylor.lean", "changes": [["mod", "theorem", "eq_zero_of_hasse_deriv_eq_zero", ["polynomial"]], ["mod", "theorem", "nat_degree_taylor", ["polynomial"]], ["mod", "theorem", "sum_taylor_eq", ["polynomial"]], ["mod", "def", "taylor", ["polynomial"]], ["mod", "theorem", "taylor_eval", ["polynomial"]], ["mod", "theorem", "taylor_eval_sub", ["polynomial"]], ["mod", "theorem", "taylor_mul", ["polynomial"]], ["mod", "theorem", "taylor_one", ["polynomial"]], ["mod", "theorem", "taylor_taylor", ["polynomial"]], ["mod", "theorem", "taylor_zero", ["polynomial"]]]}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": [["mod", "theorem", "gal_X_is_solvable", []], ["mod", "theorem", "gal_X_pow_is_solvable", []], ["mod", "theorem", "gal_X_pow_sub_one_is_solvable", []], ["mod", "theorem", "gal_is_solvable_of_splits", []], ["mod", "theorem", "gal_is_solvable_tower", []], ["mod", "theorem", "gal_mul_is_solvable", []], ["mod", "theorem", "gal_one_is_solvable", []], ["mod", "theorem", "gal_prod_is_solvable", []], ["mod", "theorem", "gal_zero_is_solvable", []], ["mod", "theorem", "is_solvable'", ["solvable_by_rad"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["mod", "theorem", "equiv_adjoin_simple_aeval", ["power_basis"]], ["mod", "theorem", "equiv_adjoin_simple_symm_aeval", ["power_basis"]]]}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "X_pow_card_sub_X_ne_zero", ["finite_field"]], ["mod", "theorem", "card_image_polynomial_eval", ["finite_field"]], ["mod", "theorem", "exists_root_sum_quadratic", ["finite_field"]], ["mod", "theorem", "expand_card", ["finite_field"]], ["mod", "theorem", "roots_X_pow_card_sub_X", ["finite_field"]]]}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": [["mod", "theorem", "exists_root", ["algebraic_closure", "adjoin_monic"]]]}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["mod", "theorem", "degree_eq_one_of_irreducible", ["is_alg_closed"]], ["mod", "theorem", "exists_root", ["is_alg_closed"]], ["mod", "theorem", "of_exists_root", ["is_alg_closed"]], ["mod", "theorem", "roots_eq_zero_iff", ["is_alg_closed"]]]}, {"oldPath": "src/field_theory/is_alg_closed/classification.lean", "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": []}, {"oldPath": "src/field_theory/laurent.lean", "newPath": "src/field_theory/laurent.lean", "changes": [["mod", "theorem", "laurent_aux_of_fraction_ring_mk", ["ratfunc"]], ["mod", "theorem", "taylor_mem_non_zero_divisors", ["ratfunc"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "aeval_ne_zero_of_dvd_not_unit_minpoly", ["minpoly"]], ["mod", "theorem", "dvd", ["minpoly"]], ["mod", "theorem", "eq_of_irreducible", ["minpoly"]], ["mod", "theorem", "min", ["minpoly"]], ["mod", "theorem", "unique", ["minpoly"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["mod", "theorem", "of_is_splitting_field", ["normal"]]]}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["mod", "theorem", "card_complex_roots_eq_card_real_add_card_not_gal_inv", ["polynomial", "gal"]], ["mod", "theorem", "mul_splits_in_splitting_field_of_mul", ["polynomial", "gal"]], ["mod", "theorem", "splits_ℚ_ℂ", ["polynomial", "gal"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["mod", "theorem", "primitive_element_inf_aux_exists_c", ["field"]]]}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["mod", "def", "X", ["ratfunc"]], ["mod", "theorem", "algebra_map_apply", ["ratfunc"]], ["mod", "theorem", "algebra_map_eq_zero_iff", ["ratfunc"]], ["mod", "theorem", "algebra_map_injective", ["ratfunc"]], ["mod", "theorem", "algebra_map_ne_zero", ["ratfunc"]], ["mod", "theorem", "coe_map_alg_hom_eq_coe_map", ["ratfunc"]], ["mod", "theorem", "coe_map_ring_hom_eq_coe_map", ["ratfunc"]], ["mod", "def", "denom", ["ratfunc"]], ["mod", "theorem", "denom_algebra_map", ["ratfunc"]], ["mod", "theorem", "denom_div", ["ratfunc"]], ["mod", "theorem", "denom_div_dvd", ["ratfunc"]], ["mod", "theorem", "denom_dvd", ["ratfunc"]], ["mod", "theorem", "div_smul", ["ratfunc"]], ["mod", "theorem", "eval_algebra_map", ["ratfunc"]], ["mod", "theorem", "lift_alg_hom_apply", ["ratfunc"]], ["mod", "theorem", "lift_alg_hom_apply_div", ["ratfunc"]], ["mod", "theorem", "lift_alg_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["mod", "theorem", "lift_alg_hom_injective", ["ratfunc"]], ["mod", "def", "lift_monoid_with_zero_hom", ["ratfunc"]], ["mod", "theorem", "lift_monoid_with_zero_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["mod", "theorem", "lift_monoid_with_zero_hom_injective", ["ratfunc"]], ["mod", "theorem", "lift_on'_div", ["ratfunc"]], ["mod", "theorem", "lift_on'_mk", ["ratfunc"]], ["mod", "theorem", "lift_on_condition_of_lift_on'_condition", ["ratfunc"]], ["mod", "theorem", "lift_on_div", ["ratfunc"]], ["mod", "theorem", "lift_on_mk", ["ratfunc"]], ["mod", "theorem", "lift_on_of_fraction_ring_mk", ["ratfunc"]], ["mod", "def", "lift_ring_hom", ["ratfunc"]], ["mod", "theorem", "lift_ring_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["mod", "theorem", "lift_ring_hom_injective", ["ratfunc"]], ["mod", "def", "map", ["ratfunc"]], ["mod", "def", "map_alg_hom", ["ratfunc"]], ["mod", "theorem", "map_apply_of_fraction_ring_mk", ["ratfunc"]], ["mod", "theorem", "map_denom_ne_zero", ["ratfunc"]], ["mod", "theorem", "map_injective", ["ratfunc"]], ["mod", "def", "map_ring_hom", ["ratfunc"]], ["mod", "theorem", "mk_coe_def", ["ratfunc"]], ["mod", "theorem", "mk_def_of_mem", ["ratfunc"]], ["mod", "theorem", "mk_def_of_ne", ["ratfunc"]], ["mod", "theorem", "mk_eq_div'", ["ratfunc"]], ["mod", "theorem", "mk_eq_div", ["ratfunc"]], ["mod", "theorem", "mk_eq_localization_mk", ["ratfunc"]], ["mod", "theorem", "mk_eq_mk", ["ratfunc"]], ["mod", "theorem", "mk_one'", ["ratfunc"]], ["mod", "theorem", "mk_one", ["ratfunc"]], ["mod", "theorem", "mk_smul", ["ratfunc"]], ["mod", "theorem", "mk_zero", ["ratfunc"]], ["mod", "def", "num", ["ratfunc"]], ["mod", "theorem", "num_algebra_map", ["ratfunc"]], ["mod", "def", "num_denom", ["ratfunc"]], ["mod", "theorem", "num_denom_div", ["ratfunc"]], ["mod", "theorem", "num_div", ["ratfunc"]], ["mod", "theorem", "num_div_dvd", ["ratfunc"]], ["mod", "theorem", "num_dvd", ["ratfunc"]], ["mod", "theorem", "num_mul_eq_mul_denom_iff", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_add", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_algebra_map", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_div", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_inv", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_mk'", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_mul", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_neg", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_smul", ["ratfunc"]], ["mod", "theorem", "of_fraction_ring_sub", ["ratfunc"]], ["mod", "def", "to_fraction_ring_ring_equiv", ["ratfunc"]], ["mod", "theorem", "to_fraction_ring_smul", ["ratfunc"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "separable", ["irreducible"]], ["mod", "theorem", "card_root_set_eq_nat_degree", ["polynomial"]], ["mod", "theorem", "coe_expand", ["polynomial"]], ["mod", "theorem", "coeff_contract", ["polynomial"]], ["mod", "theorem", "coeff_expand", ["polynomial"]], ["mod", "theorem", "coeff_expand_mul'", ["polynomial"]], ["mod", "theorem", "coeff_expand_mul", ["polynomial"]], ["mod", "theorem", "contract_expand", ["polynomial"]], ["mod", "theorem", "count_roots_le_one", ["polynomial"]], ["mod", "theorem", "derivative_expand", ["polynomial"]], ["mod", "theorem", "eq_X_sub_C_of_separable_of_root_eq", ["polynomial"]], ["mod", "theorem", "exists_separable_of_irreducible", ["polynomial"]], ["mod", "theorem", "expand_char", ["polynomial"]], ["mod", "theorem", "expand_contract", ["polynomial"]], ["mod", "theorem", "expand_eq_C", ["polynomial"]], ["mod", "theorem", "expand_eq_sum", ["polynomial"]], ["mod", "theorem", "expand_eq_zero", ["polynomial"]], ["mod", "theorem", "expand_eval", ["polynomial"]], ["mod", "theorem", "expand_expand", ["polynomial"]], ["mod", "theorem", "expand_inj", ["polynomial"]], ["mod", "theorem", "expand_mul", ["polynomial"]], ["mod", "theorem", "expand_one", ["polynomial"]], ["mod", "theorem", "expand_pow", ["polynomial"]], ["mod", "theorem", "expand_zero", ["polynomial"]], ["mod", "theorem", "is_unit_of_self_mul_dvd_separable", ["polynomial"]], ["mod", "theorem", "is_unit_or_eq_zero_of_separable_expand", ["polynomial"]], ["mod", "theorem", "map_expand", ["polynomial"]], ["mod", "theorem", "map_expand_pow_char", ["polynomial"]], ["mod", "theorem", "expand", ["polynomial", "monic"]], ["mod", "theorem", "multiplicity_le_one_of_separable", ["polynomial"]], ["mod", "theorem", "nat_degree_expand", ["polynomial"]], ["mod", "theorem", "nodup_roots", ["polynomial"]], ["mod", "theorem", "not_separable_zero", ["polynomial"]], ["mod", "theorem", "of_irreducible_expand", ["polynomial"]], ["mod", "theorem", "of_irreducible_expand_pow", ["polynomial"]], ["mod", "theorem", "root_multiplicity_le_one_of_separable", ["polynomial"]], ["mod", "theorem", "is_coprime", ["polynomial", "separable"]], ["mod", "theorem", "map", ["polynomial", "separable"]], ["mod", "theorem", "mul", ["polynomial", "separable"]], ["mod", "theorem", "of_dvd", ["polynomial", "separable"]], ["mod", "theorem", "of_mul_left", ["polynomial", "separable"]], ["mod", "theorem", "of_mul_right", ["polynomial", "separable"]], ["mod", "theorem", "of_pow'", ["polynomial", "separable"]], ["mod", "theorem", "of_pow", ["polynomial", "separable"]], ["mod", "theorem", "squarefree", ["polynomial", "separable"]], ["mod", "def", "separable", ["polynomial"]], ["mod", "theorem", "separable_X", ["polynomial"]], ["mod", "theorem", "separable_def'", ["polynomial"]], ["mod", "theorem", "separable_def", ["polynomial"]], ["mod", "theorem", "separable_gcd_left", ["polynomial"]], ["mod", "theorem", "separable_gcd_right", ["polynomial"]], ["mod", "theorem", "separable_iff_derivative_ne_zero", ["polynomial"]], ["mod", "theorem", "separable_map", ["polynomial"]], ["mod", "theorem", "separable_of_subsingleton", ["polynomial"]], ["mod", "theorem", "separable_one", ["polynomial"]], ["mod", "theorem", "separable_or", ["polynomial"]], ["mod", "theorem", "separable_prod'", ["polynomial"]], ["mod", "theorem", "separable_prod", ["polynomial"]], ["mod", "theorem", "unique_separable_of_irreducible", ["polynomial"]]]}, {"oldPath": "src/field_theory/separable_degree.lean", "newPath": "src/field_theory/separable_degree.lean", "changes": [["mod", "def", "contraction", ["polynomial", "has_separable_contraction"]], ["mod", "theorem", "eq_degree", ["polynomial", "has_separable_contraction"]], ["mod", "def", "has_separable_contraction", ["polynomial"]], ["mod", "def", "is_separable_contraction", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "X_sub_C_mul_remove_factor", ["polynomial"]], ["mod", "theorem", "aeval_root_derivative_of_splits", ["polynomial"]], ["mod", "theorem", "degree_eq_card_roots", ["polynomial"]], ["mod", "theorem", "degree_eq_one_of_irreducible_of_splits", ["polynomial"]], ["mod", "theorem", "eq_X_sub_C_of_splits_of_single_root", ["polynomial"]], ["mod", "theorem", "eq_prod_roots_of_monic_of_splits_id", ["polynomial"]], ["mod", "theorem", "eq_prod_roots_of_splits", ["polynomial"]], ["mod", "theorem", "eq_prod_roots_of_splits_id", ["polynomial"]], ["mod", "theorem", "exists_multiset_of_splits", ["polynomial"]], ["mod", "theorem", "exists_root_of_splits", ["polynomial"]], ["mod", "def", "factor", ["polynomial"]], ["mod", "theorem", "factor_dvd_of_degree_ne_zero", ["polynomial"]], ["mod", "theorem", "factor_dvd_of_nat_degree_ne_zero", ["polynomial"]], ["mod", "theorem", "factor_dvd_of_not_is_unit", ["polynomial"]], ["mod", "def", "alg_equiv", ["polynomial", "is_splitting_field"]], ["mod", "theorem", "finite_dimensional", ["polynomial", "is_splitting_field"]], ["mod", "def", "lift", ["polynomial", "is_splitting_field"]], ["mod", "theorem", "mul", ["polynomial", "is_splitting_field"]], ["mod", "theorem", "splits_iff", ["polynomial", "is_splitting_field"]], ["mod", "theorem", "map_root_of_splits", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_card_roots", ["polynomial"]], ["mod", "theorem", "nat_degree_remove_factor'", ["polynomial"]], ["mod", "theorem", "nat_degree_remove_factor", ["polynomial"]], ["mod", "theorem", "prod_roots_eq_coeff_zero_of_monic_of_split", ["polynomial"]], ["mod", "def", "remove_factor", ["polynomial"]], ["mod", "def", "root_of_splits", ["polynomial"]], ["mod", "theorem", "roots_map", ["polynomial"]], ["mod", "def", "splits", ["polynomial"]], ["mod", "theorem", "splits_comp_of_splits", ["polynomial"]], ["mod", "theorem", "splits_id_iff_splits", ["polynomial"]], ["mod", "theorem", "splits_iff_card_roots", ["polynomial"]], ["mod", "theorem", "splits_iff_exists_multiset", ["polynomial"]], ["mod", "theorem", "splits_map_iff", ["polynomial"]], ["mod", "theorem", "splits_mul", ["polynomial"]], ["mod", "theorem", "splits_mul_iff", ["polynomial"]], ["mod", "theorem", "splits_of_degree_eq_one", ["polynomial"]], ["mod", "theorem", "splits_of_degree_le_one", ["polynomial"]], ["mod", "theorem", "splits_of_exists_multiset", ["polynomial"]], ["mod", "theorem", "splits_of_is_unit", ["polynomial"]], ["mod", "theorem", "splits_of_nat_degree_eq_one", ["polynomial"]], ["mod", "theorem", "splits_of_nat_degree_le_one", ["polynomial"]], ["mod", "theorem", "splits_of_splits_gcd_left", ["polynomial"]], ["mod", "theorem", "splits_of_splits_gcd_right", ["polynomial"]], ["mod", "theorem", "splits_of_splits_id", ["polynomial"]], ["mod", "theorem", "splits_of_splits_mul", ["polynomial"]], ["mod", "theorem", "splits_of_splits_of_dvd", ["polynomial"]], ["mod", "theorem", "splits_pow", ["polynomial"]], ["mod", "theorem", "splits_prod", ["polynomial"]], ["mod", "theorem", "splits_prod_iff", ["polynomial"]], ["mod", "theorem", "splits_zero", ["polynomial"]], ["mod", "def", "splitting_field", ["polynomial"]], ["mod", "theorem", "algebra_map_succ", ["polynomial", "splitting_field_aux"]], ["mod", "theorem", "succ", ["polynomial", "splitting_field_aux"]], ["mod", "def", "splitting_field_aux", ["polynomial"]], ["mod", "theorem", "sum_roots_eq_next_coeff_of_monic_of_split", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": [["mod", "def", "charpoly", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": [["mod", "def", "basis", ["lagrange"]], ["mod", "theorem", "eq_interpolate", ["lagrange"]], ["mod", "theorem", "eq_interpolate_of_eval_eq", ["lagrange"]], ["mod", "theorem", "eq_of_eval_eq", ["lagrange"]], ["mod", "theorem", "eq_zero_of_eval_eq_zero", ["lagrange"]], ["mod", "def", "interpolate", ["lagrange"]]]}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/basic.lean", "newPath": "src/linear_algebra/matrix/charpoly/basic.lean", "changes": [["mod", "def", "charmatrix", []], ["mod", "def", "charpoly", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": [["mod", "theorem", "eval_det", ["matrix"]], ["mod", "theorem", "mat_poly_equiv_eval", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/polynomial.lean", "newPath": "src/linear_algebra/matrix/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/smodeq.lean", "newPath": "src/linear_algebra/smodeq.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": [["mod", "def", "bernoulli", ["polynomial"]]]}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": [["mod", "theorem", "card_pow_degree_anti_archimedean", ["polynomial"]], ["mod", "theorem", "exists_approx_polynomial", ["polynomial"]], ["mod", "theorem", "exists_eq_polynomial", ["polynomial"]]]}, {"oldPath": "src/number_theory/class_number/function_field.lean", "newPath": "src/number_theory/class_number/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": [["mod", "def", "ring_of_integers", ["function_field"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "theorem", "aeval_eq", ["adjoin_root"]], ["mod", "def", "equiv", ["adjoin_root"]], ["mod", "theorem", "eval₂_root", ["adjoin_root"]], ["mod", "theorem", "is_root_root", ["adjoin_root"]], ["mod", "theorem", "lift_hom_eq_alg_hom", ["adjoin_root"]], ["mod", "theorem", "lift_hom_mk", ["adjoin_root"]], ["mod", "theorem", "lift_mk", ["adjoin_root"]], ["mod", "def", "mk", ["adjoin_root"]], ["mod", "theorem", "mk_eq_mk", ["adjoin_root"]], ["mod", "theorem", "mod_by_monic_hom_mk", ["adjoin_root"]], ["mod", "def", "adjoin_root", []]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["mod", "theorem", "inv_eq_of_aeval_div_X_ne_zero", []], ["mod", "theorem", "inv_eq_of_root_of_coeff_zero_ne_zero", []], ["mod", "theorem", "inv_mem_of_root_of_coeff_zero_ne_zero", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": [["mod", "theorem", "is_unit_of_nat_degree_eq_zero_of_forall_dvd_is_unit", ["polynomial", "eisenstein_criterion_aux"]], ["mod", "theorem", "map_eq_C_mul_X_pow_of_forall_coeff_mem", ["polynomial", "eisenstein_criterion_aux"]], ["mod", "theorem", "irreducible_of_eisenstein_criterion", ["polynomial"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["mod", "theorem", "is_scalar_tower", ["module_polynomial_of_endo"]], ["mod", "def", "module_polynomial_of_endo", []]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["mod", "theorem", "algebra_map_hahn_series_apply", ["polynomial"]]]}, {"oldPath": "src/ring_theory/henselian.lean", "newPath": "src/ring_theory/henselian.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["mod", "theorem", "coeff_zero_mem_comap_of_root_mem", ["ideal"]], ["mod", "theorem", "coeff_zero_mem_comap_of_root_mem_of_eval_mem", ["ideal"]], ["mod", "theorem", "exists_nonzero_mem_of_ne_bot", ["ideal"]], ["mod", "theorem", "injective_quotient_le_comap_map", ["ideal"]], ["mod", "theorem", "quotient_mk_maps_eq", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["mod", "theorem", "is_integral_trans_aux", []], ["mod", "theorem", "leading_coeff_smul_normalize_scale_roots", []], ["mod", "def", "normalize_scale_roots", []]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": [["add", "theorem", "coe_neg", ["power_series"]], ["add", "theorem", "coe_sub", ["power_series"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "integer_normalization_eq_zero_iff", ["is_fraction_ring"]], ["mod", "theorem", "is_integral_localization_at_leading_coeff", []], ["mod", "theorem", "coeff_integer_normalization_mem_support", ["is_localization"]], ["mod", "theorem", "coeff_integer_normalization_of_not_mem_support", ["is_localization"]], ["mod", "theorem", "integer_normalization_coeff", ["is_localization"]], ["mod", "theorem", "integer_normalization_eval₂_eq_zero", ["is_localization"]], ["mod", "theorem", "integer_normalization_map_to_map", ["is_localization"]], ["mod", "theorem", "integer_normalization_spec", ["is_localization"]]]}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "def", "degree_le", ["ideal"]], ["mod", "theorem", "eq_zero_of_polynomial_mem_map_range", ["ideal"]], ["mod", "theorem", "mem_map_C_iff", ["ideal"]], ["mod", "def", "of_polynomial", ["ideal"]], ["mod", "theorem", "polynomial_mem_ideal_of_coeff_mem_ideal", ["ideal"]], ["mod", "theorem", "polynomial_not_is_field", ["ideal"]], ["mod", "theorem", "polynomial_quotient_equiv_quotient_polynomial_map_mk", ["ideal"]], ["mod", "theorem", "polynomial_quotient_equiv_quotient_polynomial_symm_mk", ["ideal"]], ["mod", "theorem", "coeff_mem_frange", ["polynomial"]], ["mod", "theorem", "coeff_of_subring", ["polynomial"]], ["mod", "theorem", "coeff_restriction'", ["polynomial"]], ["mod", "theorem", "coeff_restriction", ["polynomial"]], ["mod", "def", "degree_le", ["polynomial"]], ["mod", "def", "degree_lt", ["polynomial"]], ["mod", "theorem", "degree_restriction", ["polynomial"]], ["mod", "theorem", "eval₂_restriction", ["polynomial"]], ["mod", "def", "frange", ["polynomial"]], ["mod", "theorem", "frange_of_subring", ["polynomial"]], ["mod", "theorem", "frange_one", ["polynomial"]], ["mod", "theorem", "frange_zero", ["polynomial"]], ["mod", "theorem", "map_restriction", ["polynomial"]], ["mod", "theorem", "mem_degree_le", ["polynomial"]], ["mod", "theorem", "mem_degree_lt", ["polynomial"]], ["mod", "theorem", "mem_frange_iff", ["polynomial"]], ["mod", "theorem", "mem_ker_mod_by_monic", ["polynomial"]], ["mod", "theorem", "monic_restriction", ["polynomial"]], ["mod", "theorem", "nat_degree_restriction", ["polynomial"]], ["mod", "def", "of_subring", ["polynomial"]], ["mod", "def", "restriction", ["polynomial"]], ["mod", "theorem", "restriction_one", ["polynomial"]], ["mod", "theorem", "restriction_zero", ["polynomial"]], ["mod", "theorem", "sup_ker_aeval_le_ker_aeval_mul", ["polynomial"]], ["mod", "theorem", "support_restriction", ["polynomial"]], ["mod", "def", "to_subring", ["polynomial"]], ["mod", "theorem", "to_subring_one", ["polynomial"]], ["mod", "theorem", "to_subring_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": [["mod", "def", "bernstein_polynomial", []]]}, {"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": [["mod", "theorem", "C_content_dvd", ["polynomial"]], ["mod", "def", "content", ["polynomial"]], ["mod", "theorem", "content_C_mul", ["polynomial"]], ["mod", "theorem", "content_X", ["polynomial"]], ["mod", "theorem", "content_X_mul", ["polynomial"]], ["mod", "theorem", "content_X_pow", ["polynomial"]], ["mod", "theorem", "content_dvd_coeff", ["polynomial"]], ["mod", "theorem", "content_eq_gcd_leading_coeff_content_erase_lead", ["polynomial"]], ["mod", "theorem", "content_eq_gcd_range_of_lt", ["polynomial"]], ["mod", "theorem", "content_eq_gcd_range_succ", ["polynomial"]], ["mod", "theorem", "content_eq_zero_iff", ["polynomial"]], ["mod", "theorem", "content_mul", ["polynomial"]], ["mod", "theorem", "content_mul_aux", ["polynomial"]], ["mod", "theorem", "content_one", ["polynomial"]], ["mod", "theorem", "content_prim_part", ["polynomial"]], ["mod", "theorem", "content_zero", ["polynomial"]], ["mod", "theorem", "degree_gcd_le_left", ["polynomial"]], ["mod", "theorem", "degree_gcd_le_right", ["polynomial"]], ["mod", "theorem", "dvd_content_iff_C_dvd", ["polynomial"]], ["mod", "theorem", "eq_C_content_mul_prim_part", ["polynomial"]], ["mod", "theorem", "exists_primitive_lcm_of_is_primitive", ["polynomial"]], ["mod", "theorem", "gcd_content_eq_of_dvd_sub", ["polynomial"]], ["mod", "theorem", "content_eq_one", ["polynomial", "is_primitive"]], ["mod", "theorem", "dvd_prim_part_iff_dvd", ["polynomial", "is_primitive"]], ["mod", "theorem", "is_primitive_of_dvd", ["polynomial", "is_primitive"]], ["mod", "theorem", "mul", ["polynomial", "is_primitive"]], ["mod", "theorem", "ne_zero", ["polynomial", "is_primitive"]], ["mod", "theorem", "prim_part_eq", ["polynomial", "is_primitive"]], ["mod", "def", "is_primitive", ["polynomial"]], ["mod", "theorem", "is_primitive_iff_content_eq_one", ["polynomial"]], ["mod", "theorem", "is_primitive_iff_is_unit_of_C_dvd", ["polynomial"]], ["mod", "theorem", "is_primitive_one", ["polynomial"]], ["mod", "theorem", "is_primitive_prim_part", ["polynomial"]], ["mod", "theorem", "is_primitive", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_prim_part", ["polynomial"]], ["mod", "theorem", "normalize_content", ["polynomial"]], ["mod", "def", "prim_part", ["polynomial"]], ["mod", "theorem", "prim_part_dvd", ["polynomial"]], ["mod", "theorem", "prim_part_mul", ["polynomial"]], ["mod", "theorem", "prim_part_ne_zero", ["polynomial"]], ["mod", "theorem", "prim_part_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["mod", "def", "cyclotomic'", ["polynomial"]], ["mod", "def", "cyclotomic", ["polynomial"]], ["mod", "theorem", "int_cyclotomic_unique", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/eisenstein.lean", "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["mod", "structure", "is_eisenstein_at", ["polynomial"]], ["mod", "structure", "is_weakly_eisenstein_at", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": [["mod", "theorem", "dvd_iff_fraction_map_dvd_fraction_map", ["polynomial", "is_primitive"]], ["mod", "theorem", "dvd_of_fraction_map_dvd_fraction_map", ["polynomial", "is_primitive"]], ["mod", "theorem", "dvd_iff_map_cast_dvd_map_cast", ["polynomial", "is_primitive", "int"]], ["mod", "theorem", "is_unit_iff_is_unit_map", ["polynomial", "is_primitive"]]]}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": [["mod", "theorem", "mul_X_add_nat_cast_comp", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": [["mod", "theorem", "denom_dvd_of_is_root", []], ["mod", "theorem", "is_integer_of_is_root_of_monic", []], ["mod", "theorem", "num_dvd_of_is_root", []], ["mod", "theorem", "scale_roots_aeval_eq_zero_of_aeval_mk'_eq_zero", []]]}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": [["mod", "theorem", "coeff_scale_roots", []], ["mod", "theorem", "coeff_scale_roots_nat_degree", []], ["mod", "theorem", "degree_scale_roots", []], ["mod", "theorem", "monic_scale_roots_iff", []], ["mod", "theorem", "nat_degree_scale_roots", []], ["mod", "theorem", "scale_roots_aeval_eq_zero", []], ["mod", "theorem", "scale_roots_eval₂_eq_zero", []], ["mod", "theorem", "scale_roots_ne_zero", []], ["mod", "theorem", "support_scale_roots_eq", []], ["mod", "theorem", "support_scale_roots_le", []]]}, {"oldPath": "src/ring_theory/polynomial/tower.lean", "newPath": "src/ring_theory/polynomial/tower.lean", "changes": [["mod", "theorem", "aeval_apply", ["is_scalar_tower"]], ["mod", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero", ["is_scalar_tower"]], ["mod", "theorem", "algebra_map_aeval", ["is_scalar_tower"]], ["mod", "theorem", "aeval_coe", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": [["mod", "theorem", "mat_poly_equiv_smul_one", []], ["mod", "def", "equiv", ["poly_equiv_tensor"]], ["mod", "def", "inv_fun", ["poly_equiv_tensor"]], ["mod", "theorem", "left_inv", ["poly_equiv_tensor"]], ["mod", "theorem", "right_inv", ["poly_equiv_tensor"]], ["mod", "def", "to_fun_alg_hom", ["poly_equiv_tensor"]], ["mod", "theorem", "to_fun_alg_hom_apply_tmul", ["poly_equiv_tensor"]], ["mod", "def", "to_fun_bilinear", ["poly_equiv_tensor"]], ["mod", "theorem", "to_fun_bilinear_apply_eq_sum", ["poly_equiv_tensor"]], ["mod", "def", "to_fun_linear", ["poly_equiv_tensor"]], ["mod", "theorem", "to_fun_linear_mul_tmul_mul", ["poly_equiv_tensor"]], ["mod", "theorem", "to_fun_linear_mul_tmul_mul_aux_2", ["poly_equiv_tensor"]], ["mod", "theorem", "to_fun_linear_tmul_apply", ["poly_equiv_tensor"]], ["mod", "def", "poly_equiv_tensor", []], ["mod", "theorem", "poly_equiv_tensor_apply", []], ["mod", "theorem", "poly_equiv_tensor_symm_apply_tmul", []]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["mod", "theorem", "dim_le_degree_of_root", ["power_basis"]], ["mod", "theorem", "dim_le_nat_degree_of_root", ["power_basis"]], ["mod", "theorem", "nat_degree_lt_nat_degree", ["power_basis"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["mod", "theorem", "map_X", ["mv_power_series"]], ["mod", "theorem", "coe_injective", ["polynomial"]], ["mod", "theorem", "coe_one", ["polynomial"]], ["mod", "def", "alg_hom", ["polynomial", "coe_to_power_series"]], ["mod", "def", "ring_hom", ["polynomial", "coe_to_power_series"]], ["mod", "theorem", "coe_zero", ["polynomial"]], ["mod", "theorem", "algebra_map_apply'", ["power_series"]], ["mod", "def", "trunc", ["power_series"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": [["mod", "theorem", "exists_forall_norm_le", ["polynomial"]], ["mod", "theorem", "tendsto_norm_at_top", ["polynomial"]]]}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": [["mod", "theorem", "aeval_continuous_map_apply", ["polynomial"]], ["mod", "def", "to_continuous_map", ["polynomial"]], ["mod", "def", "to_continuous_map_alg_hom", ["polynomial"]], ["mod", "def", "to_continuous_map_on", ["polynomial"]], ["mod", "def", "to_continuous_map_on_alg_hom", ["polynomial"]]]}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}]}, {"timestamp": 1644312010, "sha": "59325814", "message": "feat(group_theory/submonoid/operations): prod_le_iff and le_prod_iff, also for groups and modules (#11898)", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "to_add_subgroup_le", ["submodule"]], ["add", "theorem", "to_add_submonoid_le", ["submodule"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "le_prod_iff", ["subgroup"]], ["add", "theorem", "map_one_eq_bot", ["subgroup"]], ["add", "theorem", "prod_eq_bot_iff", ["subgroup"]], ["add", "theorem", "prod_le_iff", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "mker_inl", ["monoid_hom"]], ["add", "theorem", "mker_inr", ["monoid_hom"]], ["add", "theorem", "le_prod_iff", ["submonoid"]], ["add", "theorem", "prod_eq_bot_iff", ["submonoid"]], ["add", "theorem", "prod_eq_top_iff", ["submonoid"]], ["add", "theorem", "prod_le_iff", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "le_prod_iff", ["submodule"]], ["add", "theorem", "prod_eq_bot_iff", ["submodule"]], ["add", "theorem", "prod_eq_top_iff", ["submodule"]], ["add", "theorem", "prod_le_iff", ["submodule"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "le_iff_le", ["galois_connection"]]]}]}, {"timestamp": 1644310263, "sha": "2b68801b", "message": "refactor(number_theory/bernoulli_polynomials): improve names (#11805)\nCleanup the bernoulli_polynomials file", "changes": [{"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": [["del", "theorem", "bernoulli_poly_eval_one", ["bernoulli_poly"]], ["del", "theorem", "bernoulli_poly_eval_zero", ["bernoulli_poly"]], ["del", "theorem", "bernoulli_poly_zero", ["bernoulli_poly"]], ["del", "theorem", "exp_bernoulli_poly'", ["bernoulli_poly"]], ["del", "theorem", "sum_bernoulli_poly", ["bernoulli_poly"]], ["del", "def", "bernoulli_poly", []], ["del", "theorem", "bernoulli_poly_def", []], ["add", "def", "bernoulli", ["polynomial"]], ["add", "theorem", "bernoulli_def", ["polynomial"]], ["add", "theorem", "bernoulli_eval_one", ["polynomial"]], ["add", "theorem", "bernoulli_eval_zero", ["polynomial"]], ["add", "theorem", "bernoulli_generating_function", ["polynomial"]], ["add", "theorem", "bernoulli_zero", ["polynomial"]], ["add", "theorem", "sum_bernoulli", ["polynomial"]]]}]}, {"timestamp": 1644296031, "sha": "1077eb3c", "message": "feat(analysis/complex): a few lemmas about `dist` and `conj` (#11913)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "dist_conj_comm", ["complex"]], ["add", "theorem", "dist_conj_conj", ["complex"]], ["add", "theorem", "dist_conj_self", ["complex"]], ["add", "theorem", "dist_self_conj", ["complex"]]]}]}, {"timestamp": 1644265546, "sha": "36d3b688", "message": "feat(linear_algebra/basis): `basis.map_equiv_fun` (#11888)\nAdd a `simp` lemma about the effect of `equiv_fun` for a basis\nobtained with `basis.map`.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "map_equiv_fun", ["basis"]]]}]}, {"timestamp": 1644262437, "sha": "f94b0b31", "message": "style(analysis/special_functions/trigonometric/angle): make types of `sin` and `cos` explicit (#11902)\nGive the types of the results of `real.angle.sin` and `real.angle.cos`\nexplicitly, as requested by @eric-wieser in #11887.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["mod", "def", "cos", ["real", "angle"]], ["mod", "def", "sin", ["real", "angle"]]]}]}, {"timestamp": 1644262436, "sha": "9ceb3c2a", "message": "feat(topology/sheaf_condition): connect sheaves on sites and on spaces without has_products (#11706)\nAs an application of #11692, show that the is_sheaf_opens_le_cover sheaf condition on spaces is equivalent to is_sheaf on sites, thereby connecting sheaves on sites and on spaces without the value category has_products for the first time. (@justus-springer: you might want to take a look so as to determine whether and which of your work in #9609 should be deprecated.) This could be seen as a step towards refactoring sheaves on spaces through sheaves on sites.\n- [x] depends on: #11692", "changes": [{"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": [["add", "def", "generate_equivalence_opens_le", ["Top", "presheaf"]], ["add", "def", "is_limit_opens_le_equiv_generate₁", ["Top", "presheaf"]], ["add", "def", "is_limit_opens_le_equiv_generate₂", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_sites_iff_is_sheaf_opens_le_cover", ["Top", "presheaf"]], ["add", "def", "whisker_iso_map_generate_cocone", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": [["add", "theorem", "covering_presieve_eq_self", ["Top", "presheaf"]], ["add", "def", "presieve_of_covering_aux", ["Top", "presheaf"]]]}]}, {"timestamp": 1644254902, "sha": "436966c1", "message": "chore(data/finsupp/basic): generalize comap_mul_action (#11900)\nThis new definition is propoitionally equal to the old one in the presence of `[group G]` (all the previous `lemma`s continue to apply), but generalizes to `[monoid G]`.\nThis also removes `finsupp.comap_distrib_mul_action_self` as there is no need to have this as a separate definition.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "def", "comap_distrib_mul_action_self", ["finsupp"]], ["mod", "theorem", "comap_smul_apply", ["finsupp"]], ["add", "theorem", "comap_smul_def", ["finsupp"]], ["mod", "theorem", "comap_smul_single", ["finsupp"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "comp_smul_left", []], ["add", "theorem", "one_smul_eq_id", []]]}]}, {"timestamp": 1644254901, "sha": "7b91f008", "message": "feat(algebra/big_operators/basic): add multiset.prod_sum (#11885)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_sum", ["multiset"]]]}]}, {"timestamp": 1644248527, "sha": "02c9d69d", "message": "feat(analysis/inner_product_space/basic): `orthonormal.map_linear_isometry_equiv` (#11893)\nAdd a variant of `orthonormal.comp_linear_isometry_equiv` for the case\nof an orthonormal basis mapped with `basis.map`.\nIf in future we get a bundled type of orthonormal bases with its own\n`map` operation, this would no longer be a separate lemma, but until\nthen it's useful.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "map_linear_isometry_equiv", ["orthonormal"]]]}]}, {"timestamp": 1644248526, "sha": "c61ea33b", "message": "feat(analysis/complex/isometry): `rotation_symm` (#11891)\nAdd a `simp` lemma that the inverse of `rotation` is rotation by the\ninverse angle.", "changes": [{"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": [["add", "theorem", "rotation_symm", []]]}]}, {"timestamp": 1644248524, "sha": "2364a091", "message": "feat(analysis/complex/circle): `exp_map_circle_neg` (#11889)\nAdd the lemma `exp_map_circle_neg`, similar to other lemmas for\n`exp_map_circle` that are already present.", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["add", "theorem", "exp_map_circle_neg", []]]}]}, {"timestamp": 1644248523, "sha": "99215e3d", "message": "feat(analysis/special_functions/trigonometric/angle): `sin`, `cos` (#11887)\nAdd definitions of `sin` and `cos` that act on a `real.angle`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "def", "cos", ["real", "angle"]], ["add", "theorem", "cos_coe", ["real", "angle"]], ["add", "def", "sin", ["real", "angle"]], ["add", "theorem", "sin_coe", ["real", "angle"]]]}]}, {"timestamp": 1644248521, "sha": "98ef84ef", "message": "feat(analysis/special_functions/trigonometric/angle): `induction_on` (#11886)\nAdd `real.angle.induction_on`, for use in deducing results for\n`real.angle` from those for `ℝ`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}]}, {"timestamp": 1644248520, "sha": "26179ccd", "message": "feat(data/list): add some lemmas. (#11879)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_length_eq_length", ["list"]]]}, {"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "count_eq_length", ["list"]], ["add", "theorem", "countp_eq_length", ["list"]]]}]}, {"timestamp": 1644248518, "sha": "dcbb59c4", "message": "feat(category_theory/limits): is_limit.exists_unique (#11875)\nYet another restatement of the limit property which is occasionally useful.", "changes": [{"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["add", "theorem", "exists_unique", ["category_theory", "limits", "colimit"]], ["add", "theorem", "exists_unique", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": [["add", "theorem", "exists_unique", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_exists_unique", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "exists_unique", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_exists_unique", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "exists_unique", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "exists_unique", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "def", "of_exists_unique", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "theorem", "exists_unique", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "exists_unique", ["category_theory", "limits", "fork", "is_limit"]], ["add", "def", "of_exists_unique", ["category_theory", "limits", "fork", "is_limit"]]]}]}, {"timestamp": 1644248517, "sha": "556483f4", "message": "feat(category_theory/limits): (co)equalizers in the opposite category (#11874)", "changes": [{"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "theorem", "has_coequalizers_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_equalizers_opposite", ["category_theory", "limits"]]]}]}, {"timestamp": 1644248515, "sha": "7a2a5468", "message": "feat(data/set/opposite): the opposite of a set (#11860)", "changes": [{"oldPath": null, "newPath": "src/data/set/opposite.lean", "changes": [["add", "theorem", "mem_op", ["set"]], ["add", "theorem", "mem_unop", ["set"]], ["add", "def", "op_equiv", ["set"]], ["add", "theorem", "op_mem_op", ["set"]], ["add", "theorem", "op_unop", ["set"]], ["add", "theorem", "singleton_op", ["set"]], ["add", "theorem", "singleton_op_unop", ["set"]], ["add", "theorem", "singleton_unop", ["set"]], ["add", "theorem", "singleton_unop_op", ["set"]], ["add", "theorem", "unop_mem_unop", ["set"]], ["add", "theorem", "unop_op", ["set"]]]}]}, {"timestamp": 1644248514, "sha": "0354e56f", "message": "feat(order/complete_lattice): infi_le_iff (#11810)\nAdd missing lemma `infi_le_iff {s : ι → α} : infi s ≤ a ↔ (∀ b, (∀ i, b ≤ s i) → b ≤ a)`\nAlso take the opportunity to restate `Inf_le_iff` to restore consistency with `le_Sup_iff` that was broken in #10607 and move `le_supr_iff` close to `le_Sup_iff` and remove a couple of unneeded parentheses.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Sup_le_iff", []], ["add", "theorem", "infi_le_iff", []], ["mod", "theorem", "le_Sup_iff", []], ["mod", "theorem", "le_supr_iff", []], ["mod", "theorem", "supr_le_iff", []]]}]}, {"timestamp": 1644244375, "sha": "a2f3f55e", "message": "chore(algebra/monoid_algebra): generalize lift_nc (#11881)\nThe g argument does not need to be a bundled morphism here in the definition.\nInstead, we require it be a bundled morphism only in the downstream lemmas, using the new typeclass machinery", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["mod", "def", "lift_nc", ["add_monoid_algebra"]], ["mod", "theorem", "lift_nc_mul", ["add_monoid_algebra"]], ["mod", "theorem", "lift_nc_one", ["add_monoid_algebra"]], ["mod", "theorem", "lift_nc_single", ["add_monoid_algebra"]], ["mod", "def", "lift_nc", ["monoid_algebra"]], ["mod", "theorem", "lift_nc_mul", ["monoid_algebra"]], ["mod", "theorem", "lift_nc_one", ["monoid_algebra"]], ["mod", "theorem", "lift_nc_single", ["monoid_algebra"]]]}]}, {"timestamp": 1644237188, "sha": "04b9d281", "message": "feat(data/pfun): Composition of partial functions (#11865)\nDefine\n* `pfun.id`: The identity as a partial function\n* `pfun.comp`: Composition of partial functions\n* `pfun.to_subtype`: Restrict the codomain of a function to a subtype and make it partial", "changes": [{"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": [["add", "theorem", "bind_to_option", ["part"]], ["add", "theorem", "of_bind", ["part", "dom"]], ["add", "theorem", "elim_to_option", ["part"]], ["add", "theorem", "mem_mk_iff", ["part"]], ["mod", "theorem", "some_inj", ["part"]], ["add", "theorem", "some_injective", ["part"]], ["add", "theorem", "to_option_eq_none_iff", ["part"]]]}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "bind_comp", ["part"]], ["add", "theorem", "bind_apply", ["pfun"]], ["add", "theorem", "coe_comp", ["pfun"]], ["add", "theorem", "coe_id", ["pfun"]], ["add", "theorem", "coe_injective", ["pfun"]], ["add", "def", "comp", ["pfun"]], ["add", "theorem", "comp_apply", ["pfun"]], ["add", "theorem", "comp_assoc", ["pfun"]], ["add", "theorem", "comp_id", ["pfun"]], ["add", "theorem", "dom_coe", ["pfun"]], ["add", "theorem", "dom_comp", ["pfun"]], ["add", "theorem", "dom_to_subtype", ["pfun"]], ["add", "theorem", "dom_to_subtype_apply_iff", ["pfun"]], ["mod", "def", "fn", ["pfun"]], ["add", "theorem", "fn_apply", ["pfun"]], ["add", "theorem", "id_apply", ["pfun"]], ["add", "theorem", "id_comp", ["pfun"]], ["mod", "theorem", "mem_core", ["pfun"]], ["mod", "theorem", "mem_dom", ["pfun"]], ["mod", "theorem", "mem_preimage", ["pfun"]], ["add", "theorem", "mem_to_subtype_iff", ["pfun"]], ["add", "theorem", "preimage_comp", ["pfun"]], ["add", "def", "to_subtype", ["pfun"]], ["add", "theorem", "to_subtype_apply", ["pfun"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "exists_eq_subtype_mk_iff", []], ["add", "theorem", "exists_subtype_mk_eq_iff", []]]}]}, {"timestamp": 1644232621, "sha": "00908913", "message": "chore(model_theory/*): Split up model_theory/basic (#11846)\nSplits model_theory/basic into separate files: basic, substructures, terms_and_formulas, definability, quotients\nImproves documentation throughout", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["del", "def", "bd_not", ["first_order", "language"]], ["del", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["del", "inductive", "bounded_formula", ["first_order", "language"]], ["del", "theorem", "Inf", ["first_order", "language", "closed_under"]], ["del", "theorem", "inf", ["first_order", "language", "closed_under"]], ["del", "theorem", "inter", ["first_order", "language", "closed_under"]], ["del", "def", "closed_under", ["first_order", "language"]], ["del", "theorem", "closed_under_univ", ["first_order", "language"]], ["del", "theorem", "coe_bot", ["first_order", "language", "definable_set"]], ["del", "theorem", "coe_compl", ["first_order", "language", "definable_set"]], ["del", "theorem", "coe_inf", ["first_order", "language", "definable_set"]], ["del", "theorem", "coe_sup", ["first_order", "language", "definable_set"]], ["del", "theorem", "coe_top", ["first_order", "language", "definable_set"]], ["del", "theorem", "le_iff", ["first_order", "language", "definable_set"]], ["del", "theorem", "mem_compl", ["first_order", "language", "definable_set"]], ["del", "theorem", "mem_inf", ["first_order", "language", "definable_set"]], ["del", "theorem", "mem_sup", ["first_order", "language", "definable_set"]], ["del", "theorem", "mem_top", ["first_order", "language", "definable_set"]], ["del", "theorem", "not_mem_bot", ["first_order", "language", "definable_set"]], ["del", "def", "definable_set", ["first_order", "language"]], ["del", "theorem", "realize_term", ["first_order", "language", "embedding"]], ["del", "theorem", "realize_bounded_formula", ["first_order", "language", "equiv"]], ["del", "theorem", "realize_term", ["first_order", "language", "equiv"]], ["del", "def", "equal", ["first_order", "language", "formula"]], ["del", "def", "graph", ["first_order", "language", "formula"]], ["del", "def", "formula", ["first_order", "language"]], ["del", "theorem", "fun_map_quotient_mk", ["first_order", "language"]], ["del", "def", "eq_locus", ["first_order", "language", "hom"]], ["del", "theorem", "eq_of_eq_on_dense", ["first_order", "language", "hom"]], ["del", "theorem", "eq_of_eq_on_top", ["first_order", "language", "hom"]], ["del", "theorem", "eq_on_closure", ["first_order", "language", "hom"]], ["del", "theorem", "realize_term", ["first_order", "language", "hom"]], ["del", "theorem", "compl", ["first_order", "language", "is_definable"]], ["del", "theorem", "inter", ["first_order", "language", "is_definable"]], ["del", "theorem", "sdiff", ["first_order", "language", "is_definable"]], ["del", "theorem", "union", ["first_order", "language", "is_definable"]], ["del", "structure", "is_definable", ["first_order", "language"]], ["del", "theorem", "is_definable_empty", ["first_order", "language"]], ["del", "theorem", "is_definable_univ", ["first_order", "language"]], ["del", "def", "realize_bounded_formula", ["first_order", "language"]], ["del", "theorem", "realize_bounded_formula_relabel", ["first_order", "language"]], ["del", "theorem", "realize_bounded_formula_top", ["first_order", "language"]], ["del", "theorem", "realize_equal", ["first_order", "language"]], ["del", "def", "realize_formula", ["first_order", "language"]], ["del", "theorem", "realize_formula_equiv", ["first_order", "language"]], ["del", "theorem", "realize_formula_relabel", ["first_order", "language"]], ["del", "theorem", "realize_graph", ["first_order", "language"]], ["del", "theorem", "realize_not", ["first_order", "language"]], ["del", "def", "realize_sentence", ["first_order", "language"]], ["del", "def", "realize_term", ["first_order", "language"]], ["del", "theorem", "realize_term_quotient_mk", ["first_order", "language"]], ["del", "theorem", "realize_term_relabel", ["first_order", "language"]], ["del", "theorem", "realize_term_substructure", ["first_order", "language"]], ["del", "def", "sentence", ["first_order", "language"]], ["del", "theorem", "apply_coe_mem_map", ["first_order", "language", "substructure"]], ["del", "theorem", "closed", ["first_order", "language", "substructure"]], ["del", "def", "closure", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_Union", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_empty", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_eq", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_eq_of_le", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_induction'", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_induction", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_le", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_mono", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_union", ["first_order", "language", "substructure"]], ["del", "theorem", "closure_univ", ["first_order", "language", "substructure"]], ["del", "theorem", "coe_Inf", ["first_order", "language", "substructure"]], ["del", "theorem", "coe_copy", ["first_order", "language", "substructure"]], ["del", "theorem", "coe_inf", ["first_order", "language", "substructure"]], ["del", "theorem", "coe_infi", ["first_order", "language", "substructure"]], ["del", "theorem", "coe_subtype", ["first_order", "language", "substructure"]], ["del", "theorem", "coe_top", ["first_order", "language", "substructure"]], ["del", "theorem", "coe_top_equiv", ["first_order", "language", "substructure"]], ["del", "def", "comap", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_comap", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_id", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_inf", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_inf_map_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_infi", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_infi_map_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_injective_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_le_comap_iff_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_map_comap", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_map_eq_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_strict_mono_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_sup_map_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_supr_map_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_surjective_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "comap_top", ["first_order", "language", "substructure"]], ["del", "theorem", "const_mem", ["first_order", "language", "substructure"]], ["del", "theorem", "copy_eq", ["first_order", "language", "substructure"]], ["del", "theorem", "dense_induction", ["first_order", "language", "substructure"]], ["del", "theorem", "ext", ["first_order", "language", "substructure"]], ["del", "theorem", "gc_map_comap", ["first_order", "language", "substructure"]], ["del", "def", "gci_map_comap", ["first_order", "language", "substructure"]], ["del", "def", "gi_map_comap", ["first_order", "language", "substructure"]], ["del", "theorem", "le_comap_map", ["first_order", "language", "substructure"]], ["del", "theorem", "le_comap_of_map_le", ["first_order", "language", "substructure"]], ["del", "def", "map", ["first_order", "language", "substructure"]], ["del", "theorem", "map_bot", ["first_order", "language", "substructure"]], ["del", "theorem", "map_comap_eq_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_comap_le", ["first_order", "language", "substructure"]], ["del", "theorem", "map_comap_map", ["first_order", "language", "substructure"]], ["del", "theorem", "map_id", ["first_order", "language", "substructure"]], ["del", "theorem", "map_inf_comap_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_infi_comap_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_injective_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_le_iff_le_comap", ["first_order", "language", "substructure"]], ["del", "theorem", "map_le_map_iff_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_le_of_le_comap", ["first_order", "language", "substructure"]], ["del", "theorem", "map_map", ["first_order", "language", "substructure"]], ["del", "theorem", "map_strict_mono_of_injective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_sup", ["first_order", "language", "substructure"]], ["del", "theorem", "map_sup_comap_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_supr", ["first_order", "language", "substructure"]], ["del", "theorem", "map_supr_comap_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "map_surjective_of_surjective", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_Inf", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_carrier", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_closure", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_comap", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_inf", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_infi", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_map", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_map_of_mem", ["first_order", "language", "substructure"]], ["del", "theorem", "mem_top", ["first_order", "language", "substructure"]], ["del", "theorem", "monotone_comap", ["first_order", "language", "substructure"]], ["del", "theorem", "monotone_map", ["first_order", "language", "substructure"]], ["del", "theorem", "not_mem_of_not_mem_closure", ["first_order", "language", "substructure"]], ["del", "def", "coe", ["first_order", "language", "substructure", "simps"]], ["del", "theorem", "subset_closure", ["first_order", "language", "substructure"]], ["del", "def", "subtype", ["first_order", "language", "substructure"]], ["del", "def", "top_equiv", ["first_order", "language", "substructure"]], ["del", "structure", "substructure", ["first_order", "language"]], ["del", "def", "relabel", ["first_order", "language", "term"]], ["del", "inductive", "term", ["first_order", "language"]], ["del", "def", "theory", ["first_order", "language"]]]}, {"oldPath": null, "newPath": "src/model_theory/definability.lean", "changes": [["add", "theorem", "coe_bot", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_compl", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_inf", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_sup", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_top", ["first_order", "language", "definable_set"]], ["add", "theorem", "le_iff", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_compl", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_inf", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_sup", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_top", ["first_order", "language", "definable_set"]], ["add", "theorem", "not_mem_bot", ["first_order", "language", "definable_set"]], ["add", "def", "definable_set", ["first_order", "language"]], ["add", "theorem", "compl", ["first_order", "language", "is_definable"]], ["add", "theorem", "inter", ["first_order", "language", "is_definable"]], ["add", "theorem", "sdiff", ["first_order", "language", "is_definable"]], ["add", "theorem", "union", ["first_order", "language", "is_definable"]], ["add", "structure", "is_definable", ["first_order", "language"]], ["add", "theorem", "is_definable_empty", ["first_order", "language"]], ["add", "theorem", "is_definable_univ", ["first_order", "language"]]]}, {"oldPath": "src/model_theory/elementary_maps.lean", "newPath": "src/model_theory/elementary_maps.lean", "changes": [["add", "theorem", "realize_bounded_formula_top", ["first_order", "language"]], ["add", "theorem", "realize_term_substructure", ["first_order", "language"]]]}, {"oldPath": null, "newPath": "src/model_theory/quotients.lean", "changes": [["add", "theorem", "fun_map_quotient_mk", ["first_order", "language"]], ["add", "theorem", "realize_term_quotient_mk", ["first_order", "language"]]]}, {"oldPath": null, "newPath": "src/model_theory/substructures.lean", "changes": [["add", "theorem", "Inf", ["first_order", "language", "closed_under"]], ["add", "theorem", "inf", ["first_order", "language", "closed_under"]], ["add", "theorem", "inter", ["first_order", "language", "closed_under"]], ["add", "def", "closed_under", ["first_order", "language"]], ["add", "theorem", "closed_under_univ", ["first_order", "language"]], ["add", "def", "eq_locus", ["first_order", "language", "hom"]], ["add", "theorem", "eq_of_eq_on_dense", ["first_order", "language", "hom"]], ["add", "theorem", "eq_of_eq_on_top", ["first_order", "language", "hom"]], ["add", "theorem", "eq_on_closure", ["first_order", "language", "hom"]], ["add", "theorem", "apply_coe_mem_map", ["first_order", "language", "substructure"]], ["add", "theorem", "closed", ["first_order", "language", "substructure"]], ["add", "def", "closure", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_Union", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_empty", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_eq", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_eq_of_le", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_induction'", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_induction", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_le", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_mono", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_union", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_univ", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_Inf", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_copy", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_inf", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_infi", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_subtype", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_top", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_top_equiv", ["first_order", "language", "substructure"]], ["add", "def", "comap", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_id", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_inf", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_inf_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_infi", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_infi_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_injective_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_le_comap_iff_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_map_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_map_eq_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_strict_mono_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_sup_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_supr_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_surjective_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_top", ["first_order", "language", "substructure"]], ["add", "theorem", "const_mem", ["first_order", "language", "substructure"]], ["add", "theorem", "copy_eq", ["first_order", "language", "substructure"]], ["add", "theorem", "dense_induction", ["first_order", "language", "substructure"]], ["add", "theorem", "ext", ["first_order", "language", "substructure"]], ["add", "theorem", "gc_map_comap", ["first_order", "language", "substructure"]], ["add", "def", "gci_map_comap", ["first_order", "language", "substructure"]], ["add", "def", "gi_map_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "le_comap_map", ["first_order", "language", "substructure"]], ["add", "theorem", "le_comap_of_map_le", ["first_order", "language", "substructure"]], ["add", "def", "map", ["first_order", "language", "substructure"]], ["add", "theorem", "map_bot", ["first_order", "language", "substructure"]], ["add", "theorem", "map_comap_eq_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_comap_le", ["first_order", "language", "substructure"]], ["add", "theorem", "map_comap_map", ["first_order", "language", "substructure"]], ["add", "theorem", "map_id", ["first_order", "language", "substructure"]], ["add", "theorem", "map_inf_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_infi_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_injective_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_le_iff_le_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "map_le_map_iff_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_le_of_le_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "map_map", ["first_order", "language", "substructure"]], ["add", "theorem", "map_strict_mono_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_sup", ["first_order", "language", "substructure"]], ["add", "theorem", "map_sup_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_supr", ["first_order", "language", "substructure"]], ["add", "theorem", "map_supr_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_surjective_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_Inf", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_carrier", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_closure", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_inf", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_infi", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_map", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_map_of_mem", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_top", ["first_order", "language", "substructure"]], ["add", "theorem", "monotone_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "monotone_map", ["first_order", "language", "substructure"]], ["add", "theorem", "not_mem_of_not_mem_closure", ["first_order", "language", "substructure"]], ["add", "def", "coe", ["first_order", "language", "substructure", "simps"]], ["add", "theorem", "subset_closure", ["first_order", "language", "substructure"]], ["add", "def", "subtype", ["first_order", "language", "substructure"]], ["add", "def", "top_equiv", ["first_order", "language", "substructure"]], ["add", "structure", "substructure", ["first_order", "language"]]]}, {"oldPath": null, "newPath": "src/model_theory/terms_and_formulas.lean", "changes": [["add", "def", "bd_not", ["first_order", "language"]], ["add", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["add", "inductive", "bounded_formula", ["first_order", "language"]], ["add", "theorem", "realize_term", ["first_order", "language", "embedding"]], ["add", "theorem", "realize_bounded_formula", ["first_order", "language", "equiv"]], ["add", "theorem", "realize_term", ["first_order", "language", "equiv"]], ["add", "def", "equal", ["first_order", "language", "formula"]], ["add", "def", "graph", ["first_order", "language", "formula"]], ["add", "def", "formula", ["first_order", "language"]], ["add", "theorem", "realize_term", ["first_order", "language", "hom"]], ["add", "def", "realize_bounded_formula", ["first_order", "language"]], ["add", "theorem", "realize_bounded_formula_relabel", ["first_order", "language"]], ["add", "theorem", "realize_equal", ["first_order", "language"]], ["add", "def", "realize_formula", ["first_order", "language"]], ["add", "theorem", "realize_formula_equiv", ["first_order", "language"]], ["add", "theorem", "realize_formula_relabel", ["first_order", "language"]], ["add", "theorem", "realize_graph", ["first_order", "language"]], ["add", "theorem", "realize_not", ["first_order", "language"]], ["add", "def", "realize_sentence", ["first_order", "language"]], ["add", "def", "realize_term", ["first_order", "language"]], ["add", "theorem", "realize_term_relabel", ["first_order", "language"]], ["add", "def", "sentence", ["first_order", "language"]], ["add", "def", "relabel", ["first_order", "language", "term"]], ["add", "inductive", "term", ["first_order", "language"]], ["add", "def", "theory", ["first_order", "language"]]]}]}, {"timestamp": 1644229061, "sha": "3c70566a", "message": "feat(analysis/normed_space/linear_isometry): `symm_trans` (#11892)\nAdd a `simp` lemma `linear_isometry_equiv.symm_trans`, like\n`coe_symm_trans` but without a coercion involved. `coe_symm_trans`\ncan then be proved by `simp`, so stops being a `simp` lemma itself.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["mod", "theorem", "coe_symm_trans", ["linear_isometry_equiv"]], ["add", "theorem", "symm_trans", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1644222813, "sha": "b1b09eb3", "message": "refactor(data/quot): Make more `setoid` arguments implicit (#11824)\nCurrently, not all of the `quotient` API can be used with non-instance setoids. This fixes it by making a few `setoid` arguments explicit rather than instances.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["mod", "theorem", "out_equiv_out", ["quotient"]], ["mod", "theorem", "out_inj", ["quotient"]]]}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}]}, {"timestamp": 1644206265, "sha": "25297ecf", "message": "feat(analysis/complex/basic): `conj_lie_symm` (#11890)\nAdd a `simp` lemma that the inverse of `conj_lie` is `conj_lie`.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "conj_lie_symm", ["complex"]]]}]}, {"timestamp": 1644174223, "sha": "e18972b3", "message": "feat(set_theory/ordinal_arithmetic): Suprema of empty families (#11872)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "blsub_eq_zero", ["ordinal"]], ["add", "theorem", "blsub_zero", ["ordinal"]], ["add", "theorem", "bsup_zero", ["ordinal"]], ["add", "theorem", "lsub_empty", ["ordinal"]], ["del", "theorem", "lsub_eq_zero", ["ordinal"]], ["add", "theorem", "sup_empty", ["ordinal"]]]}]}, {"timestamp": 1644132314, "sha": "24ebc5cd", "message": "feat(group_theory/sylow): the cardinality of a sylow group (#11776)", "changes": [{"oldPath": "src/algebra/is_prime_pow.lean", "newPath": "src/algebra/is_prime_pow.lean", "changes": []}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "pow_dvd_iff_dvd_pow_factorization", ["nat", "prime"]], ["add", "theorem", "pow_dvd_iff_le_factorization", ["nat", "prime"]], ["del", "theorem", "prime_pow_dvd_iff_le_factorization", ["nat"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "card_eq_multiplicity", ["sylow"]]]}]}, {"timestamp": 1644112438, "sha": "4148990d", "message": "feat(set_theory/ordinal_arithmetic): Suprema and least strict upper bounds of constant families (#11862)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "blsub_const", ["ordinal"]], ["add", "theorem", "bsup_const", ["ordinal"]], ["add", "theorem", "lsub_const", ["ordinal"]], ["add", "theorem", "sup_const", ["ordinal"]]]}]}, {"timestamp": 1644096159, "sha": "6787a8d9", "message": "feat(category_theory): a hierarchy of balanced categories (#11856)", "changes": [{"oldPath": "src/algebra/category/Group/abelian.lean", "newPath": "src/algebra/category/Group/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["del", "theorem", "is_iso_of_mono_of_epi", ["category_theory", "abelian"]], ["del", "theorem", "strong_epi_of_epi", ["category_theory", "abelian"]], ["del", "theorem", "strong_mono_of_mono", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": [["del", "theorem", "is_iso_of_mono_of_epi", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "strong_epi_of_epi", ["category_theory", "non_preadditive_abelian"]]]}, {"oldPath": "src/category_theory/abelian/opposite.lean", "newPath": "src/category_theory/abelian/opposite.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/balanced.lean", "changes": [["add", "theorem", "is_iso_iff_mono_and_epi", ["category_theory"]], ["add", "theorem", "is_iso_of_mono_of_epi", ["category_theory"]]]}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["add", "def", "split_epi_of_epi", ["category_theory"]], ["add", "def", "split_mono_of_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/normal_mono.lean", "newPath": "src/category_theory/limits/shapes/normal_mono.lean", "changes": [["add", "def", "normal_epi_of_epi", ["category_theory"]], ["add", "def", "normal_mono_of_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["add", "def", "regular_epi_of_epi", ["category_theory"]], ["add", "def", "regular_mono_of_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": [["add", "theorem", "strong_epi_of_epi", ["category_theory"]], ["add", "theorem", "strong_mono_of_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "theorem", "injective_of_mono", ["category_theory"]], ["add", "theorem", "surjective_of_epi", ["category_theory"]]]}]}, {"timestamp": 1644090029, "sha": "0f9c1538", "message": "feat(algebra/cubic_discriminant): basics of cubic polynomials and their discriminants (#11483)", "changes": [{"oldPath": null, "newPath": "src/algebra/cubic_discriminant.lean", "changes": [["add", "theorem", "a_of_eq", ["cubic"]], ["add", "theorem", "b_eq_three_roots", ["cubic"]], ["add", "theorem", "b_of_eq", ["cubic"]], ["add", "theorem", "c_eq_three_roots", ["cubic"]], ["add", "theorem", "c_of_eq", ["cubic"]], ["add", "theorem", "card_roots_le", ["cubic"]], ["add", "theorem", "card_roots_of_disc_ne_zero", ["cubic"]], ["add", "theorem", "coeff_gt_three", ["cubic"]], ["add", "theorem", "coeff_one", ["cubic"]], ["add", "theorem", "coeff_three", ["cubic"]], ["add", "theorem", "coeff_two", ["cubic"]], ["add", "theorem", "coeff_zero", ["cubic"]], ["add", "theorem", "d_eq_three_roots", ["cubic"]], ["add", "theorem", "d_of_eq", ["cubic"]], ["add", "theorem", "degree", ["cubic"]], ["add", "theorem", "degree_of_a_b_c_eq_zero", ["cubic"]], ["add", "theorem", "degree_of_a_b_eq_zero", ["cubic"]], ["add", "theorem", "degree_of_a_eq_zero", ["cubic"]], ["add", "theorem", "degree_of_zero", ["cubic"]], ["add", "def", "disc", ["cubic"]], ["add", "theorem", "disc_eq_prod_three_roots", ["cubic"]], ["add", "theorem", "disc_ne_zero_iff_roots_ne", ["cubic"]], ["add", "theorem", "disc_ne_zero_iff_roots_nodup", ["cubic"]], ["add", "theorem", "eq_prod_three_roots", ["cubic"]], ["add", "theorem", "eq_sum_three_roots", ["cubic"]], ["add", "theorem", "eq_zero_iff", ["cubic"]], ["add", "def", "equiv", ["cubic"]], ["add", "theorem", "leading_coeff", ["cubic"]], ["add", "theorem", "leading_coeff_of_a_b_c_eq_zero", ["cubic"]], ["add", "theorem", "leading_coeff_of_a_b_eq_zero", ["cubic"]], ["add", "theorem", "leading_coeff_of_a_eq_zero", ["cubic"]], ["add", "def", "map", ["cubic"]], ["add", "theorem", "map_roots", ["cubic"]], ["add", "theorem", "map_to_poly", ["cubic"]], ["add", "theorem", "mem_roots_iff", ["cubic"]], ["add", "theorem", "ne_zero", ["cubic"]], ["add", "theorem", "ne_zero_of_a_ne_zero", ["cubic"]], ["add", "theorem", "ne_zero_of_b_ne_zero", ["cubic"]], ["add", "theorem", "ne_zero_of_c_ne_zero", ["cubic"]], ["add", "theorem", "ne_zero_of_d_ne_zero", ["cubic"]], ["add", "theorem", "of_a_b_c_eq_zero", ["cubic"]], ["add", "theorem", "of_a_b_eq_zero", ["cubic"]], ["add", "theorem", "of_a_eq_zero", ["cubic"]], ["add", "theorem", "of_zero", ["cubic"]], ["add", "def", "roots", ["cubic"]], ["add", "theorem", "splits_iff_card_roots", ["cubic"]], ["add", "theorem", "splits_iff_roots_eq_three", ["cubic"]], ["add", "def", "to_poly", ["cubic"]], ["add", "theorem", "to_poly_injective", ["cubic"]], ["add", "theorem", "zero", ["cubic"]], ["add", "structure", "cubic", []]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["mod", "theorem", "coeff_C_mul_X", ["polynomial"]], ["add", "theorem", "coeff_C_mul_X_pow", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "degree_C_lt", ["polynomial"]], ["add", "theorem", "degree_C_lt_degree_C_mul_X", ["polynomial"]], ["add", "theorem", "degree_C_mul_X", ["polynomial"]], ["add", "theorem", "degree_add_le_of_degree_le", ["polynomial"]], ["add", "theorem", "degree_cubic", ["polynomial"]], ["add", "theorem", "degree_cubic_le", ["polynomial"]], ["add", "theorem", "degree_cubic_lt", ["polynomial"]], ["add", "theorem", "degree_linear", ["polynomial"]], ["add", "theorem", "degree_linear_le", ["polynomial"]], ["add", "theorem", "degree_linear_lt", ["polynomial"]], ["add", "theorem", "degree_linear_lt_degree_C_mul_X_sq", ["polynomial"]], ["add", "theorem", "degree_quadratic", ["polynomial"]], ["add", "theorem", "degree_quadratic_le", ["polynomial"]], ["add", "theorem", "degree_quadratic_lt", ["polynomial"]], ["add", "theorem", "degree_quadratic_lt_degree_C_mul_X_cb", ["polynomial"]], ["add", "theorem", "leading_coeff_C_mul_X", ["polynomial"]], ["del", "theorem", "leading_coeff_C_mul_X_add_C", ["polynomial"]], ["add", "theorem", "leading_coeff_cubic", ["polynomial"]], ["add", "theorem", "leading_coeff_linear", ["polynomial"]], ["add", "theorem", "leading_coeff_quadratic", ["polynomial"]], ["add", "theorem", "nat_degree_add_le_of_degree_le", ["polynomial"]], ["add", "theorem", "nat_degree_cubic", ["polynomial"]], ["add", "theorem", "nat_degree_cubic_le", ["polynomial"]], ["add", "theorem", "nat_degree_linear", ["polynomial"]], ["add", "theorem", "nat_degree_linear_le", ["polynomial"]], ["add", "theorem", "nat_degree_quadratic", ["polynomial"]], ["add", "theorem", "nat_degree_quadratic_le", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["del", "theorem", "coeff_C_mul_X", ["power_series"]], ["add", "theorem", "coeff_C_mul_X_pow", ["power_series"]]]}]}, {"timestamp": 1644083991, "sha": "39b12623", "message": "feat(algebra/lie/nilpotent): nilpotency of Lie modules depends only on the Lie subalgebra of linear endomorphisms (#11853)", "changes": [{"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_range_ad_iff", ["lie_algebra"]], ["add", "theorem", "is_nilpotent_range", ["lie_hom"]], ["add", "theorem", "coe_lcs_range_to_endomorphism_eq", ["lie_module"]], ["add", "theorem", "is_nilpotent_range_to_endomorphism_iff", ["lie_module"]]]}]}, {"timestamp": 1644083989, "sha": "b9d19ed3", "message": "feat(algebra/lie/nilpotent): nilpotency of Lie modules is preserved under surjective morphisms (#11852)", "changes": [{"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "lie_module_is_nilpotent_iff", ["equiv"]], ["add", "theorem", "lie_module_is_nilpotent", ["function", "surjective"]], ["add", "theorem", "lie_module_lcs_map_eq", ["function", "surjective"]], ["add", "theorem", "is_nilpotent_of_top_iff", ["lie_module"]]]}]}, {"timestamp": 1644083987, "sha": "9fcd1f24", "message": "feat(algebra/lie/nilpotent): add lemma `lie_module.coe_lower_central_series_ideal_le` (#11851)", "changes": [{"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "coe_lower_central_series_ideal_le", ["lie_module"]]]}]}, {"timestamp": 1644082264, "sha": "df7c217f", "message": "feat(algebra/lie/nilpotent): add definition `lie_ideal.lcs` (#11854)\nThis is extremely useful when proving a generalised version of Engel's lemma.", "changes": [{"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "coe_lcs_eq", ["lie_ideal"]], ["add", "def", "lcs", ["lie_ideal"]], ["add", "theorem", "lcs_succ", ["lie_ideal"]], ["add", "theorem", "lcs_top", ["lie_ideal"]], ["add", "theorem", "lcs_zero", ["lie_ideal"]]]}]}, {"timestamp": 1644054723, "sha": "99693218", "message": "feat(measure_theory/probability_mass_function): Lemmas connecting `pmf.support` and `pmf.to_measure` (#11842)\nAdd lemmas relating the support of a `pmf` to the measures of sets under the induced measure.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": [["mod", "theorem", "to_measure_apply'", ["pmf"]], ["mod", "theorem", "to_measure_apply", ["pmf"]], ["add", "theorem", "to_measure_apply_eq_of_inter_support_eq", ["pmf"]], ["add", "theorem", "to_measure_apply_eq_one_iff", ["pmf"]], ["mod", "theorem", "to_measure_apply_eq_to_outer_measure_apply", ["pmf"]], ["mod", "theorem", "to_measure_apply_finset", ["pmf"]], ["mod", "theorem", "to_measure_apply_fintype", ["pmf"]], ["add", "theorem", "to_measure_apply_inter_support", ["pmf"]], ["mod", "theorem", "to_measure_apply_of_finite", ["pmf"]], ["add", "theorem", "to_measure_mono", ["pmf"]], ["mod", "theorem", "to_outer_measure_apply'", ["pmf"]], ["mod", "theorem", "to_outer_measure_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_eq_of_inter_support_eq", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_eq_one_iff", ["pmf"]], ["mod", "theorem", "to_outer_measure_apply_eq_zero_iff", ["pmf"]], ["mod", "theorem", "to_outer_measure_apply_finset", ["pmf"]], ["mod", "theorem", "to_outer_measure_apply_fintype", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_inter_support", ["pmf"]], ["mod", "theorem", "to_outer_measure_apply_le_to_measure_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_mono", ["pmf"]]]}]}, {"timestamp": 1644054721, "sha": "612ca40a", "message": "feat(data/finset): erase is empty iff (#11838)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "erase_eq_empty_iff", ["finset"]]]}]}, {"timestamp": 1644054720, "sha": "31f5688a", "message": "refactor(ring_theory/valuation/basic): `fun_like` design for `valuation` (#11830)\nIntroduce `valuation_class`, the companion typeclass to `valuation`. Deprecate lemmas. Rename the field from `map_add'` to `map_add_le_max'` to avoid confusion with the eponymous field from `add_hom`.", "changes": [{"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "coe_coe", ["valuation"]], ["mod", "theorem", "ext", ["valuation"]], ["mod", "theorem", "ext_iff", ["valuation"]], ["mod", "theorem", "map_add", ["valuation"]], ["add", "theorem", "to_fun_eq_coe", ["valuation"]]]}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}]}, {"timestamp": 1644054719, "sha": "e78563c0", "message": "feat(ring_theory/power_series): reindex trunc of a power series to truncate below index n (#10891)\nCurrently the definition of truncation of a univariate and multivariate power series truncates above the index, that is if we truncate a power series $\\sum a_i x^i$ at index `n` the term $a_n x^n$ is included.\nThis makes it impossible to truncate the first monomial $x^0$ away as it is included with the smallest possible value of n, which causes some issues in applications (imagine if you could only pop elements of lists if the result was non-empty!).", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["mod", "theorem", "trunc_C", ["mv_power_series"]], ["mod", "theorem", "trunc_one", ["mv_power_series"]], ["mod", "theorem", "trunc_C", ["power_series"]], ["mod", "theorem", "trunc_one", ["power_series"]]]}]}, {"timestamp": 1644048993, "sha": "6b4e2691", "message": "chore(data/fintype/basic): rename some instances (#11845)\nRename instances from `infinite.multiset.infinite` etc to\n`multiset.infinite` etc; rename `infinite.set.infinite` to\n`infinite.set` to avoid name clash.\nAlso add `option.infinite`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1644038373, "sha": "b0d9761b", "message": "feat(ring_theory/hahn_series): add a map to power series and dickson's lemma (#11836)\nAdd a ring equivalence between `hahn_series` and `mv_power_series` as discussed in https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/induction.20on.20an.20index.20type/near/269463528.\nThis required adding some partially well ordered lemmas that it seems go under the name Dickson's lemma.\nThis may be independently useful, a constructive version of this has been used in other provers, especially in connection to Grobner basis and commutative algebra type material.", "changes": [{"oldPath": null, "newPath": "src/data/finsupp/pwo.lean", "changes": [["add", "theorem", "is_pwo", ["finsupp"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "is_pwo", ["pi"]], ["add", "theorem", "mono", ["set", "is_pwo"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "coeff_to_mv_power_series", ["hahn_series"]], ["add", "theorem", "coeff_to_mv_power_series_symm", ["hahn_series"]], ["add", "def", "to_mv_power_series", ["hahn_series"]]]}]}, {"timestamp": 1644017678, "sha": "bd7d034b", "message": "feat(ring_theory/nilpotent): add lemma `module.End.is_nilpotent_mapq` (#11831)\nTogether with the other lemmas necessary for its proof.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "le_comap_pow_of_le_comap", ["submodule"]]]}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": [["add", "theorem", "mapq_comp", ["submodule"]], ["add", "theorem", "mapq_id", ["submodule"]], ["add", "theorem", "mapq_pow", ["submodule"]], ["add", "theorem", "mapq_zero", ["submodule"]]]}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["add", "theorem", "mapq", ["module", "End", "is_nilpotent"]]]}]}, {"timestamp": 1644015046, "sha": "b905eb66", "message": "fix(group_theory/nilpotent): don’t unnecessarily `open_locale classical` (#11779)\nh/t @pechersky for noticing", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}]}, {"timestamp": 1644009138, "sha": "b3b32c87", "message": "feat(algebra/lie/quotient): first isomorphism theorem for morphisms of Lie algebras (#11826)", "changes": [{"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}]}, {"timestamp": 1644009137, "sha": "292bf34d", "message": "feat(algebra/lie/ideal_operations): add lemma `lie_ideal_oper_eq_linear_span'` (#11823)\nIt is useful to have this alternate form in situations where we have a hypothesis like `h : I = J` since we can then rewrite using `h` after applying this lemma.\nAn (admittedly brief) scan of the existing applications of `lie_ideal_oper_eq_linear_span` indicates that it's worth keeping both forms for convenience but I'm happy to dig deeper into this if requested.", "changes": [{"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": [["add", "theorem", "lie_ideal_oper_eq_linear_span'", ["lie_submodule"]]]}]}, {"timestamp": 1644009136, "sha": "fa204820", "message": "feat(linear_algebra/basic): add minor lemmas, tweak `simp` attributes (#11822)", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["mod", "theorem", "coe_subtype", ["submodule"]], ["mod", "theorem", "subtype_apply", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "comap_id", ["submodule"]], ["add", "theorem", "map_subtype_range_of_le", ["submodule"]], ["add", "theorem", "map_subtype_span_singleton", ["submodule"]], ["mod", "theorem", "span_singleton_le_iff_mem", ["submodule"]]]}]}, {"timestamp": 1644009135, "sha": "247504c8", "message": "feat(algebra/lie/cartan_subalgebra): add lemma `lie_subalgebra.exists_nested_lie_ideal_of_le_normalizer` (#11820)", "changes": [{"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": [["add", "theorem", "exists_nested_lie_ideal_of_le_normalizer", ["lie_subalgebra"]], ["mod", "theorem", "ideal_in_normalizer", ["lie_subalgebra"]]]}]}, {"timestamp": 1644009133, "sha": "a2fd0bd5", "message": "feat(algebra/lie/basic): define pull back of a Lie module along a morphism of Lie algebras. (#11819)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "def", "comp_lie_hom", ["lie_module"]], ["add", "def", "comp_lie_hom", ["lie_ring_module"]], ["add", "theorem", "comp_lie_hom_apply", ["lie_ring_module"]]]}]}, {"timestamp": 1644009132, "sha": "2e7efe99", "message": "refactor(set_theory/ordinal_arithmetic): Change `α → Prop` to `set α` (#11816)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "le_set'", ["ordinal", "is_normal"]], ["mod", "theorem", "le_set", ["ordinal", "is_normal"]], ["mod", "theorem", "sup", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1644009131, "sha": "a7415855", "message": "chore(algebra/group): make `coe_norm_subgroup` and `submodule.norm_coe` consistent (#11427)\nThe `simp` lemmas for norms in a subgroup and in a submodule disagreed: the first inserted a coercion to the larger group, the second deleted the coercion. Currently this is not a big deal, but it will become a real issue when defining `add_subgroup_class`. I want to make them consistent by pointing them in the same direction. The consensus in the [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Simp.20normal.20form.3A.20coe_norm_subgroup.2C.20submodule.2Enorm_coe) suggests `simp` should insert a coercion here, so I went with that.\nAfter making the changes, a few places need extra `simp [submodule.coe_norm]` on the local hypotheses, but nothing major.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "coe_norm", ["add_subgroup"]], ["add", "theorem", "norm_coe", ["add_subgroup"]], ["del", "theorem", "coe_norm_subgroup", []], ["add", "theorem", "coe_norm", ["submodule"]], ["mod", "theorem", "norm_coe", ["submodule"]], ["del", "theorem", "norm_mk", ["submodule"]]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1644007186, "sha": "c3273aa2", "message": "feat(algebra/lie/subalgebra): add `lie_subalgebra.equiv_of_le` and `lie_subalgebra.equiv_range_of_injective` (#11828)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "equiv_range_of_injective_apply", ["lie_hom"]], ["add", "theorem", "coe_of_le", ["lie_subalgebra"]], ["add", "theorem", "equiv_of_le_apply", ["lie_subalgebra"]]]}]}, {"timestamp": 1644000806, "sha": "3c00e5d7", "message": "fix(algebra/Module/colimits): Change `comm_ring` to `ring`. (#11837)\n... despite the well-known fact that all rings are commutative.", "changes": [{"oldPath": "src/algebra/category/Module/colimits.lean", "newPath": "src/algebra/category/Module/colimits.lean", "changes": []}]}, {"timestamp": 1644000805, "sha": "5b3cd4a9", "message": "refactor(analysis/normed_space/add_torsor): Kill `seminormed_add_torsor` (#11795)\nDelete `normed_add_torsor` in favor of the equivalent `seminormed_add_torsor` and rename `seminormed_add_torsor` to `normed_add_torsor`.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["mod", "theorem", "dist_eq_norm_vsub", []]]}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1644000804, "sha": "aaaeeaed", "message": "feat(category_theory/category/{Pointed,Bipointed}): The categories of pointed/bipointed types (#11777)\nDefine\n* `Pointed`, the category of pointed types\n* `Bipointed`, the category of bipointed types\n* the forgetful functors from `Bipointed` to `Pointed` and from `Pointed` to `Type*`\n* `Type_to_Pointed`, the functor from `Type*` to `Pointed` induced by `option`\n* `Bipointed.swap_equiv` the equivalence between `Bipointed` and itself induced by `prod.swap` both ways.", "changes": [{"oldPath": null, "newPath": "src/category_theory/category/Bipointed.lean", "changes": [["add", "def", "comp", ["Bipointed", "hom"]], ["add", "def", "id", ["Bipointed", "hom"]], ["add", "def", "of", ["Bipointed"]], ["add", "def", "swap", ["Bipointed"]], ["add", "def", "swap_equiv", ["Bipointed"]], ["add", "theorem", "swap_equiv_symm", ["Bipointed"]], ["add", "structure", "Bipointed", []], ["add", "def", "Bipointed_to_Pointed_fst", []], ["add", "theorem", "Bipointed_to_Pointed_fst_comp_forget", []], ["add", "def", "Bipointed_to_Pointed_snd", []], ["add", "theorem", "Bipointed_to_Pointed_snd_comp_forget", []], ["add", "def", "Pointed_to_Bipointed_fst", []], ["add", "def", "Pointed_to_Bipointed_fst_Bipointed_to_Pointed_fst_adjunction", []], ["add", "theorem", "Pointed_to_Bipointed_fst_comp", []], ["add", "def", "Pointed_to_Bipointed_snd", []], ["add", "def", "Pointed_to_Bipointed_snd_Bipointed_to_Pointed_snd_adjunction", []], ["add", "theorem", "Pointed_to_Bipointed_snd_comp", []], ["add", "theorem", "swap_comp_Bipointed_to_Pointed_fst", []], ["add", "theorem", "swap_comp_Bipointed_to_Pointed_snd", []]]}, {"oldPath": null, "newPath": "src/category_theory/category/Pointed.lean", "changes": [["add", "def", "comp", ["Pointed", "hom"]], ["add", "def", "id", ["Pointed", "hom"]], ["add", "def", "of", ["Pointed"]], ["add", "structure", "Pointed", []], ["add", "def", "Type_to_Pointed", []], ["add", "def", "Type_to_Pointed_forget_adjunction", []]]}]}, {"timestamp": 1643994626, "sha": "cedcf073", "message": "chore(*): update to lean 3.39.0c (#11821)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": [["add", "def", "assoc_proof", ["tactic", "id_tag"]]]}]}, {"timestamp": 1643965111, "sha": "049a1b2b", "message": "feat(group_theory/subgroup/basic): add pi subgroups (#11801)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "coe_pi", ["subgroup"]], ["add", "theorem", "mem_pi", ["subgroup"]], ["add", "def", "pi", ["subgroup"]], ["add", "theorem", "pi_bot", ["subgroup"]], ["add", "theorem", "pi_empty", ["subgroup"]], ["add", "theorem", "pi_top", ["subgroup"]], ["add", "def", "pi", ["submonoid"]]]}]}, {"timestamp": 1643957672, "sha": "46c48d7f", "message": "feat(logic/basic): add projection notation for iff (#11803)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "and_congr_left'", []], ["mod", "theorem", "and_congr_right'", []], ["add", "theorem", "and", ["iff"]], ["add", "theorem", "iff", ["iff"]], ["add", "theorem", "imp", ["iff"]], ["add", "theorem", "not", ["iff"]], ["add", "theorem", "or", ["iff"]], ["mod", "theorem", "or_congr_left", []], ["mod", "theorem", "or_congr_right", []]]}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1643941998, "sha": "553cb9cc", "message": "fix(algebra/category/Module/colimits): Add some additional instances with permuted universe parameters (#11812)", "changes": [{"oldPath": "src/algebra/category/Module/colimits.lean", "newPath": "src/algebra/category/Module/colimits.lean", "changes": []}]}, {"timestamp": 1643941997, "sha": "4cfc30e3", "message": "chore(*): use le_rfl instead of le_refl _ (#11797)", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": []}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/pi.lean", "newPath": "src/algebra/order/pi.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/infinite_sum.lean", "newPath": "src/analysis/normed/group/infinite_sum.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/sites/closed.lean", "newPath": "src/category_theory/sites/closed.lean", "changes": []}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/data/W/basic.lean", "newPath": "src/data/W/basic.lean", "changes": []}, {"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": []}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": []}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/cardinal.lean", "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordnode.lean", "newPath": "src/data/ordmap/ordnode.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/rbtree/basic.lean", "newPath": "src/data/rbtree/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/real/pi/bounds.lean", "newPath": "src/data/real/pi/bounds.lean", "changes": []}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/isomorphisms.lean", "newPath": "src/linear_algebra/isomorphisms.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/giry_monad.lean", "newPath": "src/measure_theory/measure/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/indicator_function.lean", "newPath": "src/order/filter/indicator_function.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/probability_theory/stopping.lean", "newPath": "src/probability_theory/stopping.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/nakayama.lean", "newPath": "src/ring_theory/nakayama.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "supp_quot_supp", ["add_valuation"]], ["mod", "theorem", "supp_quot_supp", ["valuation"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/intermediate_value.lean", "newPath": "src/topology/algebra/ordered/intermediate_value.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/monotone_convergence.lean", "newPath": "src/topology/algebra/ordered/monotone_convergence.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}, {"oldPath": "test/apply.lean", "newPath": "test/apply.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1643940222, "sha": "6dcad021", "message": "feat(linear_algebra/lagrange): Add recurrence formula for Lagrange polynomials (#11762)\nI have also changed `interpolate` to take in a function `f : F → F` instead of `f : s → F`, since this makes the statement of the theorem nicer.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": [["add", "theorem", "basis_singleton_self", ["lagrange"]], ["add", "theorem", "degree_interpolate_erase", ["lagrange"]], ["add", "theorem", "eq_interpolate_of_eval_eq", ["lagrange"]], ["mod", "theorem", "eval_interpolate", ["lagrange"]], ["add", "theorem", "interpolate_eq_interpolate_erase_add", ["lagrange"]], ["add", "theorem", "interpolate_eq_of_eval_eq", ["lagrange"]], ["add", "theorem", "interpolate_singleton", ["lagrange"]], ["mod", "def", "linterpolate", ["lagrange"]]]}]}, {"timestamp": 1643931371, "sha": "853192ce", "message": "feat(topology/algebra): Inf and inducing preserve compatibility with algebraic structure (#11720)\nThis partly duplicates @mariainesdff 's work on group topologies, but I'm using an unbundled approach which avoids defining a new `X_topology` structure for each interesting X.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "topological_group_Inf", []], ["add", "theorem", "topological_group_induced", []], ["add", "theorem", "topological_group_inf", []], ["add", "theorem", "topological_group_infi", []]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["add", "theorem", "has_continuous_smul_induced", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "has_continuous_mul_Inf", []], ["add", "theorem", "has_continuous_mul_induced", []], ["add", "theorem", "has_continuous_mul_inf", []], ["add", "theorem", "has_continuous_mul_infi", []]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["add", "theorem", "has_continuous_smul_Inf", []], ["add", "theorem", "has_continuous_smul_inf", []], ["add", "theorem", "has_continuous_smul_infi", []]]}]}, {"timestamp": 1643913592, "sha": "30a731ca", "message": "fix(algebra/category/Module/colimits): generalize universes (#11802)", "changes": [{"oldPath": "src/algebra/category/Module/colimits.lean", "newPath": "src/algebra/category/Module/colimits.lean", "changes": [["mod", "theorem", "cocone_naturality_components", ["Module", "colimits"]], ["mod", "def", "colimit_type", ["Module", "colimits"]]]}]}, {"timestamp": 1643913591, "sha": "f2be0d22", "message": "feat(polynomial/cyclotomic): irreducible cyclotomic polynomials are minimal polynomials (#11796)\nfrom flt-regular", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "minpoly_dvd_cyclotomic", ["is_primitive_root"]], ["add", "theorem", "minpoly_eq_cyclotomic_of_irreducible", ["is_primitive_root"]], ["del", "theorem", "minpoly_dvd_cyclotomic", []]]}]}, {"timestamp": 1643907543, "sha": "2c5f36c4", "message": "feat(data/finset/sort): an order embedding from fin (#11800)\nGiven a set `s` of at least `k` element in a linear order, there is an order embedding from `fin k` whose image is contained in `s`.", "changes": [{"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "def", "order_emb_of_card_le", ["finset"]], ["add", "theorem", "order_emb_of_card_le_mem", ["finset"]]]}]}, {"timestamp": 1643907541, "sha": "25f0406d", "message": "fix(topology/connected): typos in docstrings (#11798)\nAs pointed out by @YaelDillies", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}]}, {"timestamp": 1643900599, "sha": "a4d9581e", "message": "feat(algebra/group_power/order): add pow_bit0_pos_iff (#11785)", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "pow_bit0_pos_iff", []], ["add", "theorem", "sq_pos_iff", []]]}]}, {"timestamp": 1643897851, "sha": "324d845a", "message": "feat(field_theory/krull_topology): defined Krull topology on Galois groups (#11780)", "changes": [{"oldPath": null, "newPath": "src/field_theory/krull_topology.lean", "changes": [["add", "theorem", "finite_dimensional_sup", []], ["add", "def", "finite_exts", []], ["add", "def", "fixed_by_finite", []], ["add", "def", "gal_basis", []], ["add", "def", "gal_group_basis", []], ["add", "theorem", "finite_dimensional_bot", ["intermediate_field"]], ["add", "theorem", "antimono", ["intermediate_field", "fixing_subgroup"]], ["add", "theorem", "bot", ["intermediate_field", "fixing_subgroup"]], ["add", "theorem", "map_id", ["intermediate_field"]], ["add", "theorem", "map_mono", ["intermediate_field"]], ["add", "theorem", "mem_fixing_subgroup_iff", []], ["add", "theorem", "mem_gal_basis_iff", []], ["add", "theorem", "top_fixed_by_finite", []]]}]}, {"timestamp": 1643892795, "sha": "d6e1c554", "message": "chore(data/polynomial/monic): dedup `degree_map` (#11792)", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["del", "theorem", "degree_map'", ["polynomial"]], ["del", "theorem", "nat_degree_map'", ["polynomial"]], ["add", "theorem", "nat_degree_map_eq_of_injective", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}]}, {"timestamp": 1643892794, "sha": "2f4f8ad4", "message": "feat(set_theory/principal): Principal ordinals are unbounded (#11755)\nAmazingly, this theorem requires no conditions on the operation.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "lt_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "lt_nfp", ["ordinal"]]]}, {"oldPath": "src/set_theory/principal.lean", "newPath": "src/set_theory/principal.lean", "changes": [["add", "def", "blsub₂", ["ordinal"]], ["add", "theorem", "lt_blsub₂", ["ordinal"]], ["add", "theorem", "principal_nfp_blsub₂", ["ordinal"]], ["add", "theorem", "unbounded_principal", ["ordinal"]]]}]}, {"timestamp": 1643890358, "sha": "50ee3d56", "message": "feat(ring_theory/roots_of_unity): coe_injective (#11793)\nfrom flt-regular", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "coe_injective", ["roots_of_unity"]]]}]}, {"timestamp": 1643887219, "sha": "934f1828", "message": "feat(field_theory/is_alg_closed/classification): Classify algebraically closed fields (#9370)\nThe main results here are that two algebraically closed fields with the same characteristic and the same cardinality of transcendence basis are isomorphic. The consequence of this is that two uncountable algebraically closed fields of the same cardinality and characteristic are isomorphic. This has applications in model theory, in particular the Lefschetz principle https://proofwiki.org/wiki/Lefschetz_Principle_(First-Order)", "changes": [{"oldPath": null, "newPath": "src/field_theory/is_alg_closed/classification.lean", "changes": [["add", "theorem", "cardinal_mk_le_max", ["algebra", "is_algebraic"]], ["add", "theorem", "cardinal_mk_le_sigma_polynomial", ["algebra", "is_algebraic"]], ["add", "theorem", "cardinal_eq_cardinal_transcendence_basis_of_omega_lt", ["is_alg_closed"]], ["add", "theorem", "cardinal_le_max_transcendence_basis", ["is_alg_closed"]], ["add", "def", "equiv_of_transcendence_basis", ["is_alg_closed"]], ["add", "theorem", "is_alg_closure_of_transcendence_basis", ["is_alg_closed"]], ["add", "theorem", "ring_equiv_of_cardinal_eq_of_char_eq", ["is_alg_closed"]], ["add", "theorem", "ring_equiv_of_cardinal_eq_of_char_zero", ["is_alg_closed"]]]}]}, {"timestamp": 1643883639, "sha": "e39f617c", "message": "feat(category_theory/linear): compatibility of linear Yoneda (#11784)", "changes": [{"oldPath": "src/category_theory/linear/yoneda.lean", "newPath": "src/category_theory/linear/yoneda.lean", "changes": [["add", "def", "linear_coyoneda", ["category_theory"]], ["add", "theorem", "whiskering_linear_coyoneda", ["category_theory"]], ["add", "theorem", "whiskering_linear_coyoneda₂", ["category_theory"]], ["add", "theorem", "whiskering_linear_yoneda", ["category_theory"]], ["add", "theorem", "whiskering_linear_yoneda₂", ["category_theory"]]]}]}, {"timestamp": 1643883638, "sha": "e61ce5dc", "message": "chore(category_theory/limits): dualize strong_epi (#11783)", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "theorem", "strong_mono_of_mono", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": [["add", "theorem", "is_iso_of_epi_of_strong_mono", ["category_theory"]], ["add", "theorem", "strong_mono_comp", ["category_theory"]], ["add", "theorem", "strong_mono_of_strong_mono", ["category_theory"]]]}]}, {"timestamp": 1643883637, "sha": "93f2bdc8", "message": "feat(topology/algebra/ordered/monotone_convergence): add `antitone.{ge,le}_of_tendsto` (#11754)", "changes": [{"oldPath": "src/topology/algebra/ordered/monotone_convergence.lean", "newPath": "src/topology/algebra/ordered/monotone_convergence.lean", "changes": [["add", "theorem", "ge_of_tendsto", ["antitone"]], ["add", "theorem", "le_of_tendsto", ["antitone"]]]}]}, {"timestamp": 1643880326, "sha": "a4831583", "message": "feat(topology/algebra/group): continuity of action of a group on its own coset space (#11772)\nGiven a subgroup `Γ` of a topological group `G`, there is an induced scalar action of `G` on the coset space `G ⧸ Γ`, and there is also an induced topology on `G ⧸ Γ`. We prove that this action is continuous in each variable, and, if the group `G` is locally compact, also jointly continuous.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "continuous_smul₁", ["quotient_group"]]]}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "continuous_lift_prod_left", ["quotient_map"]], ["add", "theorem", "continuous_lift_prod_right", ["quotient_map"]]]}]}, {"timestamp": 1643864155, "sha": "18163786", "message": "chore(*): golf `by_contra, push_neg` to `by_contra'` (#11768)", "changes": [{"oldPath": "archive/imo/imo1972_b2.lean", "newPath": "archive/imo/imo1972_b2.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/order/extension.lean", "newPath": "src/order/extension.lean", "changes": []}, {"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/domain.lean", "newPath": "src/ring_theory/witt_vector/domain.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/liminf_limsup.lean", "newPath": "src/topology/algebra/ordered/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_paracompact.lean", "newPath": "src/topology/metric_space/emetric_paracompact.lean", "changes": []}]}, {"timestamp": 1643862068, "sha": "89a3c072", "message": "feat(field_theory/laurent): Laurent expansions of rational functions (#11199)\nAlso provide more API for `ratfunc`, lifting homomorphisms of (polynomial to polynomial) to (ratfunc to ratfunc).", "changes": [{"oldPath": null, "newPath": "src/field_theory/laurent.lean", "changes": [["add", "def", "laurent", ["ratfunc"]], ["add", "theorem", "laurent_C", ["ratfunc"]], ["add", "theorem", "laurent_X", ["ratfunc"]], ["add", "theorem", "laurent_algebra_map", ["ratfunc"]], ["add", "theorem", "laurent_at_zero", ["ratfunc"]], ["add", "def", "laurent_aux", ["ratfunc"]], ["add", "theorem", "laurent_aux_algebra_map", ["ratfunc"]], ["add", "theorem", "laurent_aux_div", ["ratfunc"]], ["add", "theorem", "laurent_aux_of_fraction_ring_mk", ["ratfunc"]], ["add", "theorem", "laurent_div", ["ratfunc"]], ["add", "theorem", "laurent_injective", ["ratfunc"]], ["add", "theorem", "laurent_laurent", ["ratfunc"]], ["add", "theorem", "taylor_mem_non_zero_divisors", ["ratfunc"]]]}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "theorem", "coe_map_alg_hom_eq_coe_map", ["ratfunc"]], ["add", "theorem", "coe_map_ring_hom_eq_coe_map", ["ratfunc"]], ["mod", "theorem", "div_smul", ["ratfunc"]], ["mod", "theorem", "lift_alg_hom_injective", ["ratfunc"]], ["mod", "def", "lift_monoid_with_zero_hom", ["ratfunc"]], ["mod", "theorem", "lift_monoid_with_zero_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["mod", "theorem", "lift_monoid_with_zero_hom_injective", ["ratfunc"]], ["mod", "def", "lift_ring_hom", ["ratfunc"]], ["mod", "theorem", "lift_ring_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["mod", "theorem", "lift_ring_hom_injective", ["ratfunc"]], ["add", "def", "map", ["ratfunc"]], ["add", "def", "map_alg_hom", ["ratfunc"]], ["add", "theorem", "map_apply", ["ratfunc"]], ["add", "theorem", "map_apply_div", ["ratfunc"]], ["add", "theorem", "map_apply_div_ne_zero", ["ratfunc"]], ["add", "theorem", "map_apply_of_fraction_ring_mk", ["ratfunc"]], ["add", "theorem", "map_injective", ["ratfunc"]], ["add", "def", "map_ring_hom", ["ratfunc"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "single_eq_zero_iff", ["hahn_series"]]]}]}, {"timestamp": 1643835956, "sha": "7f3590b4", "message": "feat(field_theory/minpoly): add a nontriviality lemma (#11781)", "changes": [{"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "subsingleton", ["minpoly"]]]}]}, {"timestamp": 1643832279, "sha": "cdad1104", "message": "feat(tactic/equiv_rw): enhancing 'equiv_rw' (#11730)\nExpands the `equiv_rw` API by:\n* Making it accept a list of equivalences instead of a single one, if intended\n* Allowing multiple targets (closes #2891)\nExtra: some optimizations.", "changes": [{"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}]}, {"timestamp": 1643820496, "sha": "41811cdd", "message": "feat(number_theory): von Mangoldt function (#11727)\nDefines the von Mangoldt function", "changes": [{"oldPath": "src/algebra/is_prime_pow.lean", "newPath": "src/algebra/is_prime_pow.lean", "changes": [["add", "theorem", "is_prime_pow_pow_iff", []], ["add", "theorem", "is_prime_pow_dvd_mul", ["nat", "coprime"]], ["add", "theorem", "disjoint_divisors_filter_prime_pow", ["nat"]], ["add", "theorem", "mul_divisors_filter_prime_pow", ["nat"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "prod_divisors_antidiagonal'", ["nat"]], ["add", "theorem", "prod_divisors_antidiagonal", ["nat"]]]}, {"oldPath": null, "newPath": "src/number_theory/von_mangoldt.lean", "changes": [["add", "theorem", "log_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "log_mul_moebius_eq_von_mangoldt", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_mul_log_eq_von_mangoldt", ["nat", "arithmetic_function"]], ["add", "theorem", "sum_moebius_mul_log_eq", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_apply_one", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_apply_pow", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_apply_prime", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_mul_zeta", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_nonneg", ["nat", "arithmetic_function"]], ["add", "theorem", "von_mangoldt_sum", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_mul_von_mangoldt", ["nat", "arithmetic_function"]]]}]}, {"timestamp": 1643820495, "sha": "c235c612", "message": "refactor(set_theory/ordinal_arithmetic): Simpler `bsup` definition (#11386)\nWe also simplify some existing proofs.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "def", "bsup", ["ordinal"]], ["add", "theorem", "comp_bfamily_of_family'", ["ordinal"]], ["add", "theorem", "comp_bfamily_of_family", ["ordinal"]], ["add", "theorem", "comp_family_of_bfamily'", ["ordinal"]], ["add", "theorem", "comp_family_of_bfamily", ["ordinal"]], ["mod", "theorem", "lsub_eq_lsub", ["ordinal"]], ["mod", "theorem", "sup_eq_sup", ["ordinal"]]]}]}, {"timestamp": 1643820494, "sha": "4d0b3983", "message": "feat(topology/connected): Connectedness of unions of sets (#10005)\n* Add multiple results about when unions of sets are (pre)connected. In particular, the union of connected sets indexed by `ℕ` such that each set intersects the next is connected.\n* Remove some `set.` prefixes in the file\n* There are two minor fixes in other files, presumably caused by the fact that they now import `order.succ_pred`\n* Co-authored by Floris van Doorn fpvdoorn@gmail.com", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "nonempty_bUnion", ["set"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "Union_of_chain", ["is_connected"]], ["add", "theorem", "Union_of_refl_trans_gen", ["is_connected"]], ["add", "theorem", "bUnion_of_chain", ["is_connected"]], ["add", "theorem", "bUnion_of_refl_trans_gen", ["is_connected"]], ["mod", "theorem", "subset_closure", ["is_connected"]], ["add", "theorem", "Union_of_chain", ["is_preconnected"]], ["add", "theorem", "Union_of_refl_trans_gen", ["is_preconnected"]], ["add", "theorem", "bUnion_of_chain", ["is_preconnected"]], ["add", "theorem", "bUnion_of_refl_trans_gen", ["is_preconnected"]], ["add", "theorem", "sUnion_directed", ["is_preconnected"]], ["add", "theorem", "union'", ["is_preconnected"]]]}]}, {"timestamp": 1643813504, "sha": "d6c002c7", "message": "feat(group_theory/p_group): finite p-groups with different p have coprime orders (#11775)", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "coprime_card_of_ne", ["is_p_group"]]]}]}, {"timestamp": 1643813503, "sha": "307a456f", "message": "refactor(set_theory/ordinal): Add `covariant_class` instances for ordinal addition and multiplication (#11678)\nThis replaces the old `add_le_add_left`, `add_le_add_right`, `mul_le_mul_left`, `mul_le_mul_right` theorems.", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "add_le_add_left", ["ordinal"]], ["del", "theorem", "add_le_add_right", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "add_le_add_iff_left", ["ordinal"]], ["del", "theorem", "add_lt_add_iff_left", ["ordinal"]], ["del", "theorem", "mul_le_mul", ["ordinal"]], ["del", "theorem", "mul_le_mul_left", ["ordinal"]], ["del", "theorem", "mul_le_mul_right", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1643813502, "sha": "cd1d839a", "message": "feat(order/rel_classes): Unbundled typeclass to state that two relations are the non strict and strict versions (#11381)\nThis defines a Prop-valued mixin `is_nonstrict_strict_order α r s` to state `s a b ↔ r a b ∧ ¬ r b a`.\nThe idea is to allow dot notation for lemmas about the interaction of `⊆` and `⊂` (which currently do not have a `preorder`-like typeclass). Dot notation on each of them is already possible thanks to unbundled relation classes (which allow to state lemmas for both `set` and `finset`).", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "ssubset_def", ["finset"]], ["mod", "theorem", "subset_def", ["finset"]], ["del", "theorem", "subset_of_eq", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "asymm", ["has_ssubset", "ssubset"]], ["del", "theorem", "trans", ["has_ssubset", "ssubset"]], ["del", "theorem", "antisymm", ["has_subset", "subset"]], ["del", "theorem", "trans", ["has_subset", "subset"]], ["del", "theorem", "eq_or_ssubset_of_subset", ["set"]], ["mod", "theorem", "ssubset_def", ["set"]], ["del", "theorem", "ssubset_iff_subset_ne", ["set"]], ["del", "theorem", "ssubset_of_ssubset_of_subset", ["set"]], ["del", "theorem", "ssubset_of_subset_of_ssubset", ["set"]], ["mod", "theorem", "subset_def", ["set"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "antisymm'", []], ["add", "theorem", "antisymm_of'", []], ["add", "theorem", "eq_or_ssubset_of_subset", []], ["add", "theorem", "ne_of_irrefl'", []], ["mod", "theorem", "ne_of_irrefl", []], ["add", "theorem", "ne_of_not_subset", []], ["add", "theorem", "ne_of_not_superset", []], ["add", "theorem", "ne_of_ssubset", []], ["add", "theorem", "ne_of_ssuperset", []], ["add", "theorem", "not_ssubset_of_subset", []], ["add", "theorem", "not_subset_of_ssubset", []], ["add", "theorem", "right_iff_left_not_left", []], ["add", "theorem", "right_iff_left_not_left_of", []], ["add", "theorem", "ssubset_asymm", []], ["add", "theorem", "ssubset_iff_subset_ne", []], ["add", "theorem", "ssubset_iff_subset_not_subset", []], ["add", "theorem", "ssubset_irrefl", []], ["add", "theorem", "ssubset_irrfl", []], ["add", "theorem", "ssubset_of_ne_of_subset", []], ["add", "theorem", "ssubset_of_ssubset_of_subset", []], ["add", "theorem", "ssubset_of_subset_not_subset", []], ["add", "theorem", "ssubset_of_subset_of_ne", []], ["add", "theorem", "ssubset_of_subset_of_ssubset", []], ["add", "theorem", "ssubset_or_eq_of_subset", []], ["add", "theorem", "ssubset_trans", []], ["add", "theorem", "subset_antisymm", []], ["add", "theorem", "subset_antisymm_iff", []], ["add", "theorem", "subset_iff_ssubset_or_eq", []], ["add", "theorem", "subset_of_eq", []], ["add", "theorem", "subset_of_ssubset", []], ["add", "theorem", "subset_refl", []], ["add", "theorem", "subset_rfl", []], ["add", "theorem", "subset_trans", []], ["add", "theorem", "superset_antisymm", []], ["add", "theorem", "superset_antisymm_iff", []], ["add", "theorem", "superset_of_eq", []]]}]}, {"timestamp": 1643810378, "sha": "d0027691", "message": "refactor(ring_theory): clean up `algebraic_iff_integral` (#11773)\nThe definitions `is_algebraic_iff_integral`, `is_algebraic_iff_integral'` and `algebra.is_algebraic_of_finite` have always been annoying me, so I decided to fix that:\n * The name `is_algebraic_iff_integral'` doesn't explain how it differs from `is_algebraic_iff_integral` (namely that the whole algebra is algebraic, rather than one element), so I renamed it to `algebra.is_algebraic_iff_integral`.\n * The two `is_algebraic_iff_integral` lemmas have an unnecessarily explicit parameter `K`, so I made that implicit\n * `is_algebraic_of_finite` has no explicit parameters (so we always have to use type ascriptions), so I made them explicit\n * Half of the usages of `is_algebraic_of_finite` are of the form `is_algebraic_iff_integral.mp is_algebraic_of_finite`, even though `is_algebraic_of_finite` is proved as `is_algebraic_iff_integral.mpr (some_proof_that_it_is_integral)`, so I split it up into a part showing it is integral, that we can use directly.\nAs a result, I was able to golf a few proofs.", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_integral_of_finite", ["algebra"]], ["del", "theorem", "is_algebraic_iff_is_integral'", []]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1643810377, "sha": "07d6d173", "message": "refactor(field_theory/is_alg_closed/basic): Generalize alg closures to commutative rings (#11703)", "changes": [{"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["mod", "theorem", "equiv_of_equiv_algebra_map", ["is_alg_closure"]], ["mod", "theorem", "equiv_of_equiv_comp_algebra_map", ["is_alg_closure"]], ["mod", "theorem", "equiv_of_equiv_symm_algebra_map", ["is_alg_closure"]], ["mod", "theorem", "equiv_of_equiv_symm_comp_algebra_map", ["is_alg_closure"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1643805043, "sha": "4db1f964", "message": "chore(algebra/ne_zero): revert transitivity changes (#11760)\nThe `trans` methods were a disaster for `flt-regular` - this reverts them unless a better solution can be found.", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/zeta.lean", "newPath": "src/number_theory/cyclotomic/zeta.lean", "changes": [["mod", "theorem", "zeta_primitive_root", ["is_cyclotomic_extension"]]]}]}, {"timestamp": 1643805042, "sha": "6c6fbe66", "message": "feat(group_theory/subgroup/basic): normalizer condition implies max subgroups normal (#11597)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "normal_of_coatom", ["subgroup", "normalizer_condition"]]]}]}, {"timestamp": 1643799370, "sha": "1ed19a9d", "message": "feat(group_theory/nilpotent): p-groups are nilpotent (#11726)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "induction_subsingleton_or_nontrivial", ["fintype"]]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent", ["is_p_group"]], ["add", "theorem", "of_quotient_center_nilpotent", []]]}]}, {"timestamp": 1643799369, "sha": "c1d28601", "message": "feat(measure_theory/probability_mass_function): Measures of sets under `pmf` monad operations (#11613)\nThis PR adds explicit formulas for the measures of sets under `pmf.pure`, `pmf.bind`, and `pmf.bind_on_support`.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/monad.lean", "newPath": "src/measure_theory/probability_mass_function/monad.lean", "changes": [["mod", "theorem", "bind_bind", ["pmf"]], ["mod", "theorem", "bind_pure", ["pmf"]], ["mod", "theorem", "coe_bind_apply", ["pmf"]], ["mod", "theorem", "pure_bind", ["pmf"]], ["add", "theorem", "to_measure_bind_apply", ["pmf"]], ["add", "theorem", "to_measure_bind_on_support_apply", ["pmf"]], ["add", "theorem", "to_measure_pure_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_bind_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_bind_on_support_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_pure_apply", ["pmf"]]]}]}, {"timestamp": 1643799368, "sha": "a687cbfb", "message": "feat(field_theory/intermediate_field, ring_theory/.., algebra/algebra… (#11168)\nIf `E` is an subsemiring/subring/subalgebra/intermediate_field and e is an equivalence of the larger semiring/ring/algebra/field, then e induces an equivalence from E to E.map e. We define this equivalence.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "def", "subalgebra_map", ["alg_equiv"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "def", "intermediate_field_map", ["intermediate_field"]]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["add", "def", "subring_map", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["add", "def", "subsemiring_map", ["ring_equiv"]]]}]}, {"timestamp": 1643791989, "sha": "d5d57849", "message": "chore(ring_theory/power_basis): add `simps` (#11766)\nfor flt-regular", "changes": [{"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1643791987, "sha": "2fdc1510", "message": "refactor(power_series/basic): generalize order to semirings (#11765)\nThere are still some TODOs about generalizing statements downstream of this file.", "changes": [{"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["add", "theorem", "filter_fst_eq_antidiagonal", ["finset", "nat"]], ["add", "theorem", "filter_snd_eq_antidiagonal", ["finset", "nat"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "X_pow_order_dvd", ["power_series"]], ["mod", "theorem", "coeff_of_lt_order", ["power_series"]], ["mod", "theorem", "coeff_order", ["power_series"]], ["add", "theorem", "exists_coeff_ne_zero_iff_ne_zero", ["power_series"]], ["mod", "def", "order", ["power_series"]], ["add", "theorem", "order_eq_multiplicity_X", ["power_series"]], ["add", "theorem", "order_finite_iff_ne_zero", ["power_series"]], ["del", "theorem", "order_finite_of_coeff_ne_zero", ["power_series"]], ["mod", "theorem", "order_le", ["power_series"]], ["mod", "theorem", "order_zero", ["power_series"]]]}]}, {"timestamp": 1643791986, "sha": "a32b0d37", "message": "feat(group_theory/p_group): p-groups with different p are disjoint (#11752)", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "disjoint_of_ne", ["is_p_group"]]]}]}, {"timestamp": 1643791984, "sha": "664b5bed", "message": "feat(group_theory/subgroup/basic): add commute_of_normal_of_disjoint (#11751)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "commute_of_normal_of_disjoint", ["subgroup"]]]}]}, {"timestamp": 1643791983, "sha": "a6d70aa7", "message": "feat(order/category/*): `order_dual` as an equivalence of categories (#11743)\nFor `whatever` a category of orders, define\n* `whatever.iso_of_order_iso`: Turns an order isomorphism into an equivalence of objects inside `whatever`\n* `whatever.to_dual`: `order_dual` as a functor from `whatever` to itself\n* `whatever.dual_equiv`: The equivalence of categories between `whatever` and itself induced by `order_dual` both ways\n* `order_iso.dual_dual`: The order isomorphism between `α` and `order_dual (order_dual α)`", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_lex", ["fintype"]], ["add", "theorem", "card_order_dual", ["fintype"]]]}, {"oldPath": "src/order/category/LinearOrder.lean", "newPath": "src/order/category/LinearOrder.lean", "changes": [["add", "def", "dual_equiv", ["LinearOrder"]], ["add", "def", "mk", ["LinearOrder", "iso"]], ["add", "def", "to_dual", ["LinearOrder"]], ["add", "theorem", "LinearOrder_dual_equiv_comp_forget_to_PartialOrder", []]]}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": [["add", "def", "dual_equiv", ["NonemptyFinLinOrd"]], ["add", "def", "mk", ["NonemptyFinLinOrd", "iso"]], ["add", "def", "to_dual", ["NonemptyFinLinOrd"]], ["add", "theorem", "NonemptyFinLinOrd_dual_equiv_comp_forget_to_LinearOrder", []]]}, {"oldPath": "src/order/category/PartialOrder.lean", "newPath": "src/order/category/PartialOrder.lean", "changes": [["add", "def", "dual_equiv", ["PartialOrder"]], ["add", "def", "mk", ["PartialOrder", "iso"]], ["add", "def", "to_dual", ["PartialOrder"]], ["add", "theorem", "PartialOrder_dual_equiv_comp_forget_to_Preorder", []]]}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": [["add", "def", "dual_equiv", ["Preorder"]], ["add", "def", "mk", ["Preorder", "iso"]], ["add", "def", "to_dual", ["Preorder"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "coe_dual_dual", ["order_iso"]], ["add", "theorem", "coe_dual_dual_symm", ["order_iso"]], ["add", "def", "dual_dual", ["order_iso"]], ["add", "theorem", "dual_dual_apply", ["order_iso"]], ["add", "theorem", "dual_dual_symm_apply", ["order_iso"]]]}]}, {"timestamp": 1643786466, "sha": "400dbb3a", "message": "refactor(ring_theory/non_zero_divisors): use fun_like (#11764)", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["add", "theorem", "map_le_non_zero_divisors_of_injective", []], ["add", "theorem", "map_mem_non_zero_divisors", []], ["add", "theorem", "map_ne_zero_of_mem_non_zero_divisors", []], ["add", "theorem", "mem_non_zero_divisors_of_ne_zero", []], ["del", "theorem", "map_le_non_zero_divisors_of_injective", ["monoid_with_zero_hom"]], ["del", "theorem", "map_mem_non_zero_divisors", ["monoid_with_zero_hom"]], ["del", "theorem", "map_ne_zero_of_mem_non_zero_divisors", ["monoid_with_zero_hom"]], ["add", "theorem", "non_zero_divisors_le_comap_non_zero_divisors_of_injective", []], ["del", "theorem", "map_le_non_zero_divisors_of_injective", ["ring_hom"]], ["del", "theorem", "map_mem_non_zero_divisors", ["ring_hom"]], ["del", "theorem", "map_ne_zero_of_mem_non_zero_divisors", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}]}, {"timestamp": 1643786465, "sha": "c8fd7e33", "message": "chore(measure_theory/covering/besicovitch): Weaker import (#11763)\nWe relax the `set_theory.cardinal_ordinal` import to the weaker `set_theory.ordinal_arithmetic` import. We also fix some trivial spacing issues in the docs.", "changes": [{"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}]}, {"timestamp": 1643786464, "sha": "a18680a6", "message": "chore(topology/continuous_function/ordered): split from `continuous_function/basic` (#11761)\nSplit material about orders out from `continuous_function/basic`, to move that file lower down the import hierarchy.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["del", "def", "Icc_extend", ["continuous_map"]], ["del", "def", "abs", ["continuous_map"]], ["del", "theorem", "abs_apply", ["continuous_map"]], ["del", "theorem", "coe_Icc_extend", ["continuous_map"]], ["del", "theorem", "inf'_apply", ["continuous_map"]], ["del", "theorem", "inf'_coe", ["continuous_map"]], ["del", "theorem", "inf_apply", ["continuous_map"]], ["del", "theorem", "inf_coe", ["continuous_map"]], ["del", "theorem", "le_def", ["continuous_map"]], ["del", "theorem", "lt_def", ["continuous_map"]], ["del", "theorem", "sup'_apply", ["continuous_map"]], ["del", "theorem", "sup'_coe", ["continuous_map"]], ["del", "theorem", "sup_apply", ["continuous_map"]], ["del", "theorem", "sup_coe", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/continuous_function/ordered.lean", "changes": [["add", "def", "Icc_extend", ["continuous_map"]], ["add", "def", "abs", ["continuous_map"]], ["add", "theorem", "abs_apply", ["continuous_map"]], ["add", "theorem", "coe_Icc_extend", ["continuous_map"]], ["add", "theorem", "inf'_apply", ["continuous_map"]], ["add", "theorem", "inf'_coe", ["continuous_map"]], ["add", "theorem", "inf_apply", ["continuous_map"]], ["add", "theorem", "inf_coe", ["continuous_map"]], ["add", "theorem", "le_def", ["continuous_map"]], ["add", "theorem", "lt_def", ["continuous_map"]], ["add", "theorem", "sup'_apply", ["continuous_map"]], ["add", "theorem", "sup'_coe", ["continuous_map"]], ["add", "theorem", "sup_apply", ["continuous_map"]], ["add", "theorem", "sup_coe", ["continuous_map"]]]}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}]}, {"timestamp": 1643786463, "sha": "366fd9b1", "message": "feat(analysis/special_functions): show (2 / π) * x ≤ sin x (#11724)\nI wasn't entirely sure where to put this - trigonometric/basic is too high on the import graph but here seems to work. \nThis is a fairly weak inequality but it can sometimes turn out to be useful, and is important enough to be named!", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": [["add", "theorem", "le_sin_mul", ["real"]], ["add", "theorem", "lt_sin_mul", ["real"]], ["add", "theorem", "mul_le_sin", ["real"]], ["add", "theorem", "mul_lt_sin", ["real"]]]}]}, {"timestamp": 1643786461, "sha": "5c4c1c08", "message": "feat(topology/homotopy): Fundamental groupoid preserves products (#11459)", "changes": [{"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": [["add", "theorem", "hom_to_functor", ["category_theory", "Groupoid"]], ["add", "theorem", "pi_iso_pi_hom_π", ["category_theory", "Groupoid"]], ["add", "def", "pi_limit_cone", ["category_theory", "Groupoid"]], ["add", "def", "pi_limit_fan", ["category_theory", "Groupoid"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "def", "comp_nat_iso_discrete", ["category_theory", "discrete"]]]}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/pi/basic.lean", "newPath": "src/category_theory/pi/basic.lean", "changes": [["add", "theorem", "eq_to_hom_proj", ["category_theory", "functor"]], ["add", "def", "pi'", ["category_theory", "functor"]], ["add", "theorem", "pi'_eval", ["category_theory", "functor"]], ["add", "theorem", "pi_ext", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["add", "def", "prod'", ["category_theory", "functor"]]]}, {"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": [["mod", "theorem", "comp_eq", ["fundamental_groupoid"]], ["add", "def", "from_path", ["fundamental_groupoid"]], ["add", "def", "from_top", ["fundamental_groupoid"]], ["add", "theorem", "id_eq_path_refl", ["fundamental_groupoid"]], ["add", "def", "to_path", ["fundamental_groupoid"]], ["add", "def", "to_top", ["fundamental_groupoid"]]]}, {"oldPath": "src/topology/homotopy/product.lean", "newPath": "src/topology/homotopy/product.lean", "changes": [["add", "def", "cone_discrete_comp", ["fundamental_groupoid_functor"]], ["add", "theorem", "cone_discrete_comp_obj_map_cone", ["fundamental_groupoid_functor"]], ["add", "def", "pi_Top_to_pi_cone", ["fundamental_groupoid_functor"]], ["add", "def", "pi_iso", ["fundamental_groupoid_functor"]], ["add", "def", "pi_to_pi_Top", ["fundamental_groupoid_functor"]], ["add", "def", "preserves_product", ["fundamental_groupoid_functor"]], ["add", "def", "prod_iso", ["fundamental_groupoid_functor"]], ["add", "def", "prod_to_prod_Top", ["fundamental_groupoid_functor"]], ["add", "def", "proj", ["fundamental_groupoid_functor"]], ["add", "def", "proj_left", ["fundamental_groupoid_functor"]], ["add", "theorem", "proj_left_map", ["fundamental_groupoid_functor"]], ["add", "theorem", "proj_map", ["fundamental_groupoid_functor"]], ["add", "def", "proj_right", ["fundamental_groupoid_functor"]], ["add", "theorem", "proj_right_map", ["fundamental_groupoid_functor"]]]}]}, {"timestamp": 1643782840, "sha": "fa863706", "message": "chore(*): Golfed some random theorems (#11769)", "changes": [{"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1643779514, "sha": "8ef783b4", "message": "feat(measure_theory/measure): drop more `measurable_set` args (#11547)\nMost notably, in `measure_Union_eq_supr`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "bsupr_measure_Iic", []]]}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_eq_of_subset_of_measure_ge", ["measure_theory"]], ["add", "theorem", "bsupr_measure_Iic", ["measure_theory"]], ["mod", "theorem", "ext_iff_of_Union_eq_univ", ["measure_theory", "measure"]], ["mod", "theorem", "ext_iff_of_sUnion_eq_univ", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_bUnion_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_finset_bUnion_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_sUnion_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_congr", ["measure_theory", "measure"]], ["add", "theorem", "measure_Union_congr_of_subset", ["measure_theory"]], ["mod", "theorem", "measure_Union_eq_supr", ["measure_theory"]], ["add", "theorem", "measure_Union_to_measurable", ["measure_theory"]], ["add", "theorem", "measure_add_diff", ["measure_theory"]], ["add", "theorem", "measure_bUnion_to_measurable", ["measure_theory"]], ["add", "theorem", "measure_diff'", ["measure_theory"]], ["add", "theorem", "measure_to_measurable_union", ["measure_theory"]], ["add", "theorem", "measure_union_congr_of_subset", ["measure_theory"]], ["add", "theorem", "measure_union_to_measurable", ["measure_theory"]], ["mod", "theorem", "tendsto_measure_Union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "exists_measurable_superset₂", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": [["mod", "theorem", "is_compact_is_closed", ["measure_theory", "measure", "inner_regular"]], ["mod", "theorem", "of_pseudo_emetric_space", ["measure_theory", "measure", "inner_regular"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1643770666, "sha": "d68b4808", "message": "chore(linear_algebra): remove `bilinear_map` from imports in `pi` (#11767)\nRemove `bilinear_map` from imports in `pi`", "changes": [{"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}]}, {"timestamp": 1643748087, "sha": "343cbd98", "message": "feat(sites/sheaf): simple sheaf condition in terms of limit (#11692)\n+ Given a presheaf on a site, construct a simple cone for each sieve. The sheaf condition is equivalent to all these cones being limit cones for all covering sieves of the Grothendieck topology. This is made possible by a series of work that mostly removed universe restrictions on limits.\n+ Given a sieve over X : C, the diagram of its associated cone is a functor from the full subcategory of the over category C/X consisting of the arrows in the sieve, constructed from the canonical cocone over `forget : over X ⥤ C` with cone point X, which is only now added to mathlib. This cone is simpler than the multifork cone in [`is_sheaf_iff_multifork`](https://leanprover-community.github.io/mathlib_docs/category_theory/sites/sheaf.html#category_theory.presheaf.is_sheaf_iff_multifork). The underlying type of this full subcategory is equivalent to [`grothendieck_topology.cover.arrow`](https://leanprover-community.github.io/mathlib_docs/category_theory/sites/grothendieck.html#category_theory.grothendieck_topology.cover.arrow).\n+ This limit sheaf condition might be more convenient to use to do sheafification, which has been done by @adamtopaz using the multifork cone before universes are sufficiently generalized for limits, though I haven't thought about it in detail. It may not be worth refactoring sheafification in terms of this sheaf condition, but we might consider using this if we ever want to do sheafification for more general (e.g. non-concrete) value categories. #11706 is another application.\nThis is based on a [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/universe.20restriction.20on.20limit/near/260732627) with @adamtopaz.", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "is_initial_equiv_unique", ["category_theory", "limits"]], ["add", "def", "is_terminal_equiv_unique", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["add", "def", "forget_cocone", ["category_theory", "over"]], ["add", "def", "forget_cone", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "def", "cones_equiv_sieve_compatible_family", ["category_theory", "presheaf"]], ["add", "def", "hom_equiv_amalgamation", ["category_theory", "presheaf"]], ["add", "theorem", "is_limit_iff_is_sheaf_for", ["category_theory", "presheaf"]], ["add", "theorem", "is_limit_iff_is_sheaf_for_presieve", ["category_theory", "presheaf"]], ["add", "theorem", "is_separated_iff_subsingleton", ["category_theory", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_limit", ["category_theory", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_limit_pretopology", ["category_theory", "presheaf"]], ["add", "theorem", "subsingleton_iff_is_separated_for", ["category_theory", "presheaf"]], ["add", "def", "cone", ["category_theory", "presieve", "family_of_elements", "sieve_compatible"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["mod", "theorem", "sieve_extend", ["category_theory", "presieve", "family_of_elements", "compatible"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "def", "cocone", ["category_theory", "presieve"]], ["add", "def", "diagram", ["category_theory", "presieve"]]]}, {"oldPath": "src/category_theory/sites/spaces.lean", "newPath": "src/category_theory/sites/spaces.lean", "changes": [["add", "theorem", "pretopology_of_grothendieck", ["opens"]]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "unique_iff_exists_unique", []], ["add", "theorem", "unique_subtype_iff_exists_unique", []]]}]}, {"timestamp": 1643739850, "sha": "ec611821", "message": "feat(algebra/group_power): relate square equality and absolute value equality (#11683)", "changes": [{"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "one_le_sq_iff_one_le_abs", []], ["add", "theorem", "one_lt_sq_iff_one_lt_abs", []], ["add", "theorem", "sq_eq_one_iff", []], ["add", "theorem", "sq_eq_sq_iff_abs_eq_abs", []], ["add", "theorem", "sq_le_one_iff_abs_le_one", []], ["add", "theorem", "sq_lt_one_iff_abs_lt_one", []], ["mod", "theorem", "sq_lt_sq", []], ["add", "theorem", "sq_ne_one_iff", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}]}, {"timestamp": 1643719585, "sha": "23e0e290", "message": "chore(*): register global fact instances (#11749)\nWe register globally some fact instances which are necessary for integration or euclidean spaces. And also the fact that 2 and 3 are prime. See https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/euclidean_space.20error/near/269992165", "changes": [{"oldPath": "src/algebra/char_p/two.lean", "newPath": "src/algebra/char_p/two.lean", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["del", "theorem", "fact_one_le_one_real", []], ["del", "theorem", "fact_one_le_two_real", []]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "fact_prime_three", ["nat"]], ["del", "theorem", "fact_prime_two", ["nat"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "fact_one_le_one_ennreal", []], ["del", "theorem", "fact_one_le_top_ennreal", []], ["del", "theorem", "fact_one_le_two_ennreal", []]]}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}]}, {"timestamp": 1643713470, "sha": "2508cbd9", "message": "feat(model_theory/basic.lean): Elementary embeddings and elementary substructures (#11089)\nDefines elementary embeddings between structures\nDefines when substructures are elementary\nProvides lemmas about preservation of realizations of terms and formulas under various maps", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "relabel", ["first_order", "language", "bounded_formula"]], ["add", "theorem", "realize_term", ["first_order", "language", "embedding"]], ["add", "structure", "embedding", ["first_order", "language"]], ["add", "theorem", "apply_symm_apply", ["first_order", "language", "equiv"]], ["add", "theorem", "realize_bounded_formula", ["first_order", "language", "equiv"]], ["add", "theorem", "realize_term", ["first_order", "language", "equiv"]], ["add", "theorem", "symm_apply_apply", ["first_order", "language", "equiv"]], ["add", "structure", "equiv", ["first_order", "language"]], ["add", "def", "equal", ["first_order", "language", "formula"]], ["add", "def", "graph", ["first_order", "language", "formula"]], ["add", "theorem", "realize_term", ["first_order", "language", "hom"]], ["add", "structure", "hom", ["first_order", "language"]], ["add", "theorem", "realize_bounded_formula_relabel", ["first_order", "language"]], ["add", "theorem", "realize_bounded_formula_top", ["first_order", "language"]], ["add", "theorem", "realize_equal", ["first_order", "language"]], ["add", "theorem", "realize_formula_equiv", ["first_order", "language"]], ["add", "theorem", "realize_formula_relabel", ["first_order", "language"]], ["add", "theorem", "realize_graph", ["first_order", "language"]], ["add", "theorem", "realize_term_relabel", ["first_order", "language"]], ["add", "theorem", "realize_term_substructure", ["first_order", "language"]], ["add", "theorem", "coe_top_equiv", ["first_order", "language", "substructure"]], ["add", "def", "top_equiv", ["first_order", "language", "substructure"]], ["add", "def", "relabel", ["first_order", "language", "term"]]]}, {"oldPath": null, "newPath": "src/model_theory/elementary_maps.lean", "changes": [["add", "theorem", "coe_injective", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "coe_to_embedding", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "coe_to_hom", ["first_order", "language", "elementary_embedding"]], ["add", "def", "comp", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "comp_apply", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "comp_assoc", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "ext", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "ext_iff", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "injective", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "map_const", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "map_formula", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "map_fun", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "map_rel", ["first_order", "language", "elementary_embedding"]], ["add", "def", "refl", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "refl_apply", ["first_order", "language", "elementary_embedding"]], ["add", "def", "to_embedding", ["first_order", "language", "elementary_embedding"]], ["add", "theorem", "to_embedding_to_hom", ["first_order", "language", "elementary_embedding"]], ["add", "def", "to_hom", ["first_order", "language", "elementary_embedding"]], ["add", "structure", "elementary_embedding", ["first_order", "language"]], ["add", "theorem", "coe_subtype", ["first_order", "language", "elementary_substructure"]], ["add", "theorem", "coe_top", ["first_order", "language", "elementary_substructure"]], ["add", "theorem", "is_elementary", ["first_order", "language", "elementary_substructure"]], ["add", "theorem", "mem_top", ["first_order", "language", "elementary_substructure"]], ["add", "def", "subtype", ["first_order", "language", "elementary_substructure"]], ["add", "structure", "elementary_substructure", ["first_order", "language"]], ["add", "theorem", "coe_to_elementary_embedding", ["first_order", "language", "equiv"]], ["add", "def", "to_elementary_embedding", ["first_order", "language", "equiv"]], ["add", "theorem", "to_elementary_embedding_to_embedding", ["first_order", "language", "equiv"]], ["add", "def", "is_elementary", ["first_order", "language", "substructure"]]]}]}, {"timestamp": 1643709765, "sha": "94a700f3", "message": "chore(set_theory/ordinal_arithmetic): Remove redundant explicit argument (#11757)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1643709764, "sha": "ca2a99dd", "message": "feat(set_theory/ordinal_arithmetic): Normal functions evaluated at `ω` (#11687)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "eq_zero_or_pos", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "apply_omega", ["ordinal", "is_normal"]], ["add", "theorem", "sup_add_nat", ["ordinal"]], ["add", "theorem", "sup_mul_nat", ["ordinal"]], ["add", "theorem", "sup_nat_cast", ["ordinal"]], ["add", "theorem", "sup_opow_nat", ["ordinal"]]]}]}, {"timestamp": 1643706080, "sha": "cbad62c5", "message": "feat(set_theory/{ordinal_arithmetic, cardinal_ordinal}): Ordinals aren't a small type (#11756)\nWe substantially golf and extend some results previously in `cardinal_ordinal.lean`.", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["del", "theorem", "not_injective_of_ordinal", []], ["del", "theorem", "not_injective_of_ordinal_of_small", []]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "not_injective_of_ordinal", []], ["add", "theorem", "not_injective_of_ordinal_of_small", []], ["add", "theorem", "not_small_ordinal", []], ["add", "theorem", "not_surjective_of_ordinal", []], ["add", "theorem", "not_surjective_of_ordinal_of_small", []], ["add", "theorem", "lsub_nmem_range", ["ordinal"]]]}]}, {"timestamp": 1643704371, "sha": "30dcd70e", "message": "feat(number_theory/cyclotomic/zeta): add lemmas (#11753)\nVarious lemmas about `zeta`.\nFrom flt-regular.", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["mod", "theorem", "finite_dimensional", ["is_cyclotomic_extension"]], ["add", "theorem", "is_galois", ["is_cyclotomic_extension"]]]}, {"oldPath": "src/number_theory/cyclotomic/zeta.lean", "newPath": "src/number_theory/cyclotomic/zeta.lean", "changes": [["add", "theorem", "finrank", ["is_cyclotomic_extension"]], ["add", "theorem", "norm_zeta_eq_one", ["is_cyclotomic_extension"]], ["add", "theorem", "norm_zeta_sub_one_eq_eval_cyclotomic", ["is_cyclotomic_extension"]], ["mod", "def", "embeddings_equiv_primitive_roots", ["is_cyclotomic_extension", "zeta"]], ["mod", "theorem", "zeta_minpoly", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_pow", ["is_cyclotomic_extension"]], ["mod", "theorem", "zeta_primitive_root", ["is_cyclotomic_extension"]]]}]}, {"timestamp": 1643701364, "sha": "350ba8db", "message": "feat(data/two_pointing): Two pointings of a type (#11648)\nDefine `two_pointing α` as the type of two pointings of `α`. This is a Type-valued structure version of `nontrivial`.", "changes": [{"oldPath": null, "newPath": "src/data/two_pointing.lean", "changes": [["add", "theorem", "Prop_fst", ["two_pointing"]], ["add", "theorem", "Prop_snd", ["two_pointing"]], ["add", "theorem", "bool_fst", ["two_pointing"]], ["add", "theorem", "bool_snd", ["two_pointing"]], ["add", "theorem", "nonempty_two_pointing_iff", ["two_pointing"]], ["add", "def", "pi", ["two_pointing"]], ["add", "theorem", "pi_fst", ["two_pointing"]], ["add", "theorem", "pi_snd", ["two_pointing"]], ["add", "def", "prod", ["two_pointing"]], ["add", "theorem", "prod_fst", ["two_pointing"]], ["add", "theorem", "prod_snd", ["two_pointing"]], ["add", "theorem", "snd_ne_fst", ["two_pointing"]], ["add", "theorem", "sum_fst", ["two_pointing"]], ["add", "theorem", "sum_snd", ["two_pointing"]], ["add", "def", "swap", ["two_pointing"]], ["add", "theorem", "swap_fst", ["two_pointing"]], ["add", "theorem", "swap_snd", ["two_pointing"]], ["add", "theorem", "swap_swap", ["two_pointing"]], ["add", "theorem", "to_nontrivial", ["two_pointing"]], ["add", "structure", "two_pointing", []]]}]}, {"timestamp": 1643697621, "sha": "5582d84f", "message": "feat(ring_theory/localization): fraction rings of algebraic extensions are algebraic (#11717)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["mod", "theorem", "is_algebraic_algebra_map", []], ["add", "theorem", "is_algebraic_algebra_map_of_is_algebraic", []], ["add", "theorem", "is_algebraic_of_larger_base", []], ["add", "theorem", "is_algebraic_of_larger_base_of_injective", []], ["mod", "theorem", "is_algebraic", ["is_integral"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_algebraic_iff'", ["is_fraction_ring"]]]}]}, {"timestamp": 1643681590, "sha": "4b9f0482", "message": "feat(set_theory/principal): Define `principal` ordinals (#11679)\nAn ordinal `o` is said to be principal or indecomposable under an operation when the set of ordinals less than it is closed under that operation. In standard mathematical usage, this term is almost exclusively used for additive and multiplicative principal ordinals.\nFor simplicity, we break usual convention and regard 0 as principal.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "nfp_le", ["ordinal"]]]}, {"oldPath": null, "newPath": "src/set_theory/principal.lean", "changes": [["add", "theorem", "nfp_le_of_principal", ["ordinal"]], ["add", "theorem", "op_eq_self_of_principal", ["ordinal"]], ["add", "theorem", "iterate_lt", ["ordinal", "principal"]], ["add", "def", "principal", ["ordinal"]], ["add", "theorem", "principal_iff_principal_swap", ["ordinal"]], ["add", "theorem", "principal_one_iff", ["ordinal"]], ["add", "theorem", "principal_zero", ["ordinal"]]]}]}, {"timestamp": 1643677182, "sha": "e37daad5", "message": "feat(linear_algebra/sesquilinear_form): Add orthogonality properties (#10992)\nGeneralize lemmas about orthogonality from bilinear forms to sesquilinear forms.", "changes": [{"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": [["mod", "theorem", "map_smul₂", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "def", "is_Ortho", ["linear_map"]], ["add", "theorem", "is_Ortho_def", ["linear_map"]], ["mod", "def", "is_alt", ["linear_map"]], ["add", "theorem", "is_compl_span_singleton_orthogonal", ["linear_map"]], ["mod", "def", "is_ortho", ["linear_map"]], ["mod", "theorem", "is_ortho_def", ["linear_map"]], ["mod", "theorem", "is_ortho_zero_left", ["linear_map"]], ["mod", "theorem", "is_ortho_zero_right", ["linear_map"]], ["mod", "def", "is_refl", ["linear_map"]], ["mod", "theorem", "is_refl", ["linear_map", "is_symm"]], ["mod", "theorem", "ortho_comm", ["linear_map", "is_symm"]], ["add", "theorem", "linear_independent_of_is_Ortho", ["linear_map"]], ["mod", "theorem", "ortho_smul_left", ["linear_map"]], ["mod", "theorem", "ortho_smul_right", ["linear_map"]], ["add", "theorem", "orthogonal_span_singleton_eq_to_lin_ker", ["linear_map"]], ["add", "theorem", "span_singleton_inf_orthogonal_eq_bot", ["linear_map"]], ["add", "theorem", "span_singleton_sup_orthogonal_eq_top", ["linear_map"]], ["add", "theorem", "le_orthogonal_bilin_orthogonal_bilin", ["submodule"]], ["add", "theorem", "mem_orthogonal_bilin_iff", ["submodule"]], ["add", "def", "orthogonal_bilin", ["submodule"]], ["add", "theorem", "orthogonal_bilin_le", ["submodule"]]]}]}, {"timestamp": 1643674099, "sha": "b52cb02c", "message": "feat(analysis/special_functions/{log, pow}): add log_base (#11246)\nAdds `real.logb`, the log base `b` of `x`, defined as `log x / log b`. Proves that this is related to `real.rpow`.", "changes": [{"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log.lean", "changes": [["mod", "theorem", "log_le_log", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/logb.lean", "changes": [["add", "theorem", "eq_one_of_pos_of_logb_eq_zero", ["real"]], ["add", "theorem", "eq_one_of_pos_of_logb_eq_zero_of_base_lt_one", ["real"]], ["add", "theorem", "le_logb_iff_rpow_le", ["real"]], ["add", "theorem", "le_logb_iff_rpow_le_of_base_lt_one", ["real"]], ["add", "theorem", "log_div_log", ["real"]], ["add", "theorem", "logb_abs", ["real"]], ["add", "theorem", "logb_div", ["real"]], ["add", "theorem", "logb_eq_zero", ["real"]], ["add", "theorem", "logb_inj_on_pos", ["real"]], ["add", "theorem", "logb_inj_on_pos_of_base_lt_one", ["real"]], ["add", "theorem", "logb_inv", ["real"]], ["add", "theorem", "logb_le_iff_le_rpow", ["real"]], ["add", "theorem", "logb_le_iff_le_rpow_of_base_lt_one", ["real"]], ["add", "theorem", "logb_le_logb", ["real"]], ["add", "theorem", "logb_le_logb_of_base_lt_one", ["real"]], ["add", "theorem", "logb_lt_iff_lt_rpow", ["real"]], ["add", "theorem", "logb_lt_iff_lt_rpow_of_base_lt_one", ["real"]], ["add", "theorem", "logb_lt_logb", ["real"]], ["add", "theorem", "logb_lt_logb_iff", ["real"]], ["add", "theorem", "logb_lt_logb_iff_of_base_lt_one", ["real"]], ["add", "theorem", "logb_lt_logb_of_base_lt_one", ["real"]], ["add", "theorem", "logb_mul", ["real"]], ["add", "theorem", "logb_ne_zero_of_pos_of_ne_one", ["real"]], ["add", "theorem", "logb_ne_zero_of_pos_of_ne_one_of_base_lt_one", ["real"]], ["add", "theorem", "logb_neg", ["real"]], ["add", "theorem", "logb_neg_eq_logb", ["real"]], ["add", "theorem", "logb_neg_iff", ["real"]], ["add", "theorem", "logb_neg_iff_of_base_lt_one", ["real"]], ["add", "theorem", "logb_neg_of_base_lt_one", ["real"]], ["add", "theorem", "logb_nonneg", ["real"]], ["add", "theorem", "logb_nonneg_iff", ["real"]], ["add", "theorem", "logb_nonneg_iff_of_base_lt_one", ["real"]], ["add", "theorem", "logb_nonneg_of_base_lt_one", ["real"]], ["add", "theorem", "logb_nonpos", ["real"]], ["add", "theorem", "logb_nonpos_iff'", ["real"]], ["add", "theorem", "logb_nonpos_iff", ["real"]], ["add", "theorem", "logb_nonpos_iff_of_base_lt_one", ["real"]], ["add", "theorem", "logb_one", ["real"]], ["add", "theorem", "logb_pos", ["real"]], ["add", "theorem", "logb_pos_iff", ["real"]], ["add", "theorem", "logb_pos_iff_of_base_lt_one", ["real"]], ["add", "theorem", "logb_pos_of_base_lt_one", ["real"]], ["add", "theorem", "logb_prod", ["real"]], ["add", "theorem", "logb_rpow", ["real"]], ["add", "theorem", "logb_surjective", ["real"]], ["add", "theorem", "logb_zero", ["real"]], ["add", "theorem", "lt_logb_iff_rpow_lt", ["real"]], ["add", "theorem", "lt_logb_iff_rpow_lt_of_base_lt_one", ["real"]], ["add", "theorem", "range_logb", ["real"]], ["add", "theorem", "rpow_logb", ["real"]], ["add", "theorem", "rpow_logb_eq_abs", ["real"]], ["add", "theorem", "rpow_logb_of_neg", ["real"]], ["add", "theorem", "strict_anti_on_logb", ["real"]], ["add", "theorem", "strict_anti_on_logb_of_base_lt_one", ["real"]], ["add", "theorem", "strict_mono_on_logb", ["real"]], ["add", "theorem", "strict_mono_on_logb_of_base_lt_one", ["real"]], ["add", "theorem", "surj_on_logb'", ["real"]], ["add", "theorem", "surj_on_logb", ["real"]], ["add", "theorem", "tendsto_logb_at_top", ["real"]], ["add", "theorem", "tendsto_logb_at_top_of_base_lt_one", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "rpow_le_rpow_left_iff", ["real"]], ["add", "theorem", "rpow_le_rpow_left_iff_of_base_lt_one", ["real"]], ["add", "theorem", "rpow_lt_rpow_left_iff", ["real"]], ["add", "theorem", "rpow_lt_rpow_left_iff_of_base_lt_one", ["real"]]]}]}, {"timestamp": 1643667743, "sha": "731d93b3", "message": "feat(group_theory/sylow): the normalizer is self-normalizing (#11638)\nwith hat tip to Thomas Browning for a proof on Zuplip.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "normal_of_normalizer_condition", ["sylow"]], ["add", "theorem", "normal_of_normalizer_normal", ["sylow"]], ["add", "theorem", "normalizer_normalizer", ["sylow"]]]}]}, {"timestamp": 1643667742, "sha": "59643439", "message": "feat(data/equiv): define `mul_equiv_class` (#10760)\nThis PR defines a class of types of multiplicative (additive) equivalences, along the lines of #9888.", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["del", "theorem", "map_sub", ["add_equiv"]], ["mod", "theorem", "ext", ["mul_equiv"]], ["mod", "theorem", "ext_iff", ["mul_equiv"]], ["del", "theorem", "map_eq_one_iff", ["mul_equiv"]], ["del", "theorem", "map_inv", ["mul_equiv"]], ["del", "theorem", "map_mul", ["mul_equiv"]], ["del", "theorem", "map_one", ["mul_equiv"]], ["add", "theorem", "map_eq_one_iff", ["mul_equiv_class"]], ["add", "theorem", "map_ne_one_iff", ["mul_equiv_class"]]]}, {"oldPath": "src/data/fun_like/basic.lean", "newPath": "src/data/fun_like/basic.lean", "changes": [["add", "theorem", "coe_eq_coe_fn", ["fun_like"]]]}]}, {"timestamp": 1643661768, "sha": "a0bb6ea9", "message": "feat(algebraic_geometry): Open covers of the fibred product. (#11733)", "changes": [{"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "copy", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "pushforward_iso", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "open_cover_of_is_iso", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/pullbacks.lean", "newPath": "src/algebraic_geometry/pullbacks.lean", "changes": [["add", "def", "open_cover_of_base'", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "open_cover_of_base", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "open_cover_of_left", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "open_cover_of_right", ["algebraic_geometry", "Scheme", "pullback"]]]}]}, {"timestamp": 1643661766, "sha": "6130e571", "message": "feat(topology/metric_space/basic): add some lemmas about spheres (#11719)", "changes": [{"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": [["add", "theorem", "sphere_nonempty_is_R_or_C", ["normed_space"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "bounded_sphere", ["metric"]], ["add", "theorem", "sphere_eq_empty_of_subsingleton", ["metric"]], ["add", "theorem", "sphere_is_empty_of_subsingleton", ["metric"]]]}]}, {"timestamp": 1643661765, "sha": "ca17a181", "message": "feat(algebra/pointwise): introduce `canonically_ordered_comm_semiring` on `set_semiring` ... (#11580)\n... assuming multiplication is commutative (there is no `canonically_ordered_`~~comm~~`_semiring` structure).\nAlso prove the relevant `no_zero_divisors` and `covariant_class` properties of addition and multiplication.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}]}, {"timestamp": 1643661763, "sha": "719b7b06", "message": "feat(set_theory/ordinal_arithmetic, set_theory/cardinal_ordinal): `deriv` and `aleph` are enumerators (#10987)\nWe prove `deriv_eq_enum_fp`, `ord_aleph'_eq_enum_card`, and `ord_aleph_eq_enum_card`.", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "eq_aleph'_of_eq_card_ord", ["cardinal"]], ["add", "theorem", "eq_aleph_of_eq_card_ord", ["cardinal"]], ["add", "theorem", "ord_aleph'_eq_enum_card", ["cardinal"]], ["add", "theorem", "ord_aleph_eq_enum_card", ["cardinal"]], ["add", "theorem", "ord_card_unbounded'", ["cardinal"]], ["add", "theorem", "ord_card_unbounded", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "deriv_eq_enum_fp", ["ordinal"]], ["mod", "theorem", "deriv_limit", ["ordinal"]], ["add", "theorem", "fp_iff_deriv'", ["ordinal", "is_normal"]], ["mod", "theorem", "fp_iff_deriv", ["ordinal", "is_normal"]], ["mod", "theorem", "le_nfp", ["ordinal", "is_normal"]], ["mod", "theorem", "lt_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_unbounded", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1643658953, "sha": "750f53c8", "message": "feat(analysis/seminorm): define the topology induced by a family of seminorms (#11604)\nDefine the topology induced by a single seminorm and by a family of seminorms and show that boundedness of linear maps implies continuity.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["mod", "theorem", "ball_finset_sup", ["seminorm"]], ["mod", "theorem", "ball_finset_sup_eq_Inter", ["seminorm"]], ["add", "theorem", "ball_smul", ["seminorm"]], ["add", "theorem", "const_is_bounded", ["seminorm"]], ["add", "theorem", "cont_normed_space_to_with_seminorms", ["seminorm"]], ["add", "theorem", "cont_with_seminorms_normed_space", ["seminorm"]], ["add", "theorem", "continuous_from_bounded", ["seminorm"]], ["add", "theorem", "finset_sup_le_sum", ["seminorm"]], ["add", "def", "is_bounded", ["seminorm"]], ["add", "theorem", "is_bounded_const", ["seminorm"]], ["add", "theorem", "is_bounded_sup", ["seminorm"]], ["add", "def", "pullback", ["seminorm"]], ["add", "def", "seminorm_add_group_filter_basis", ["seminorm"]], ["add", "def", "seminorm_basis_zero", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_add", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_iff", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_intersect", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_mem", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_neg", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_nonempty", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_singleton_mem", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_smul", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_smul_left", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_smul_right", ["seminorm"]], ["add", "theorem", "seminorm_basis_zero_zero", ["seminorm"]], ["add", "def", "seminorm_module_filter_basis", ["seminorm"]], ["add", "theorem", "smul_le_smul", ["seminorm"]], ["add", "theorem", "with_seminorms_eq", ["seminorm"]]]}]}, {"timestamp": 1643643733, "sha": "ccbb8487", "message": "feat(set_theory/ordinal_arithmetic): `lt_add_of_limit` (#11748)\nBoth `lt_mul_of_limit` and `lt_opow_of_limit` already existed, so this exclusion is odd to say the least.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "lt_add_of_limit", ["ordinal"]]]}]}, {"timestamp": 1643643732, "sha": "c0be8dcb", "message": "feat(model_theory/basic): define quotient structures (#11747)\nDefines prestructures and quotient structures", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "fun_map_quotient_mk", ["first_order", "language"]], ["add", "theorem", "realize_term_quotient_mk", ["first_order", "language"]]]}]}, {"timestamp": 1643643730, "sha": "792d3e56", "message": "feat(group_theory/order_of_element): pow_eq_pow_iff_modeq (#11737)\nFrom flt-regular.", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "pow_eq_one_iff_modeq", []], ["add", "theorem", "pow_eq_pow_iff_modeq", []]]}]}, {"timestamp": 1643643729, "sha": "76b2a0ec", "message": "feat(group_theory/nilpotent): abelian iff nilpotency class ≤ 1 (#11718)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "nilpotency_class_le_one", ["comm_group"]], ["add", "def", "comm_group_of_nilpotency_class", []]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "center_eq_top", ["comm_group"]], ["add", "def", "comm_group_of_center_eq_top", ["group"]]]}]}, {"timestamp": 1643643728, "sha": "ff027743", "message": "feat(algebra/squarefree): norm_num extension for squarefree (#11666)\nAdds two methods for computing `squarefree`: an improved algorithm for VM computation of squarefreedom via the `min_sq_fac` function, and a proof procedure which follows the same evaluation strategy as a `norm_num` extension.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "def", "min_sq_fac", ["nat"]], ["add", "def", "min_sq_fac_aux", ["nat"]], ["add", "theorem", "min_sq_fac_aux_has_prop", ["nat"]], ["add", "theorem", "min_sq_fac_dvd", ["nat"]], ["add", "theorem", "min_sq_fac_has_prop", ["nat"]], ["add", "theorem", "min_sq_fac_le_of_dvd", ["nat"]], ["add", "theorem", "min_sq_fac_prime", ["nat"]], ["add", "def", "min_sq_fac_prop", ["nat"]], ["add", "theorem", "min_sq_fac_prop_div", ["nat"]], ["add", "theorem", "squarefree_iff_min_sq_fac", ["nat"]], ["add", "theorem", "squarefree_iff_prime_squarefree", ["nat"]], ["add", "theorem", "squarefree_two", ["nat"]], ["add", "theorem", "not_squarefree_mul", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_bit10", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_bit1", ["tactic", "norm_num"]], ["add", "def", "squarefree_helper", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_0", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_1", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_2", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_3", ["tactic", "norm_num"]], ["add", "theorem", "squarefree_helper_4", ["tactic", "norm_num"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "min_fac_aux_has_prop", ["nat"]], ["add", "theorem", "min_fac_lemma", ["nat"]]]}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1643643726, "sha": "c04daaf4", "message": "feat(measure_theory): typeclass for measures positive on nonempty opens (#11652)\nAdd a typeclass for measures positive on nonempty opens, migrate `is(_add?)_haar_measure` to this API.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "is_open_pos_measure_map", ["continuous"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": [["del", "theorem", "haar_pos", ["is_open"]], ["add", "theorem", "is_open_pos_measure_of_mul_left_invariant_of_compact", ["measure_theory"]], ["add", "theorem", "is_open_pos_measure_of_mul_left_invariant_of_regular", ["measure_theory"]], ["del", "theorem", "haar_pos_of_nonempty_interior", ["measure_theory", "measure"]], ["del", "theorem", "measure_pos_of_is_open_of_is_mul_left_invariant", ["measure_theory"]], ["del", "theorem", "null_iff_empty_of_is_mul_left_invariant", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["del", "theorem", "add_haar_ball_pos", ["measure_theory", "measure"]], ["del", "theorem", "add_haar_closed_ball_pos", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/open_pos.lean", "changes": [["add", "theorem", "ae_eq_iff_eq", ["continuous"]], ["add", "theorem", "measure_ball_pos", ["emetric"]], ["add", "theorem", "measure_closed_ball_pos", ["emetric"]], ["add", "theorem", "is_open_pos_measure", ["has_le", "le"]], ["add", "theorem", "eq_empty_of_measure_zero", ["is_open"]], ["add", "theorem", "measure_eq_zero_iff", ["is_open"]], ["add", "theorem", "measure_ne_zero", ["is_open"]], ["add", "theorem", "measure_pos", ["is_open"]], ["add", "theorem", "measure_pos_iff", ["is_open"]], ["add", "theorem", "eq_of_ae_eq", ["measure_theory", "measure"]], ["add", "theorem", "eq_on_Icc_of_ae_eq", ["measure_theory", "measure"]], ["add", "theorem", "eq_on_Ico_of_ae_eq", ["measure_theory", "measure"]], ["add", "theorem", "eq_on_Ioc_of_ae_eq", ["measure_theory", "measure"]], ["add", "theorem", "eq_on_Ioo_of_ae_eq", ["measure_theory", "measure"]], ["add", "theorem", "eq_on_of_ae_eq", ["measure_theory", "measure"]], ["add", "theorem", "eq_on_open_of_ae_eq", ["measure_theory", "measure"]], ["add", "theorem", "interior_eq_empty_of_null", ["measure_theory", "measure"]], ["add", "theorem", "is_open_pos_measure_smul", ["measure_theory", "measure"]], ["add", "theorem", "measure_Iio_pos", ["measure_theory", "measure"]], ["add", "theorem", "measure_Ioi_pos", ["measure_theory", "measure"]], ["add", "theorem", "measure_Ioo_eq_zero", ["measure_theory", "measure"]], ["add", "theorem", "measure_Ioo_pos", ["measure_theory", "measure"]], ["add", "theorem", "measure_pos_of_mem_nhds", ["measure_theory", "measure"]], ["add", "theorem", "measure_pos_of_nonempty_interior", ["measure_theory", "measure"]], ["add", "theorem", "measure_ball_pos", ["metric"]], ["add", "theorem", "measure_closed_ball_pos", ["metric"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "Ico_subset_closure_interior", []], ["add", "theorem", "Ioc_subset_closure_interior", []], ["add", "theorem", "Ioo_subset_closure_interior", []], ["add", "theorem", "closure_interior_Icc", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "of_subset_closure", ["set", "eq_on"]]]}]}, {"timestamp": 1643643725, "sha": "d6440a84", "message": "feat(group_theory/nilpotent): add lemmas about `G / center G` (#11592)\nin particular its nilpotency class and an induction principle based on\nthat.", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "comap_upper_central_series_quotient_center", []], ["add", "theorem", "nilpotency_class_eq_quotient_center_plus_one", []], ["add", "theorem", "nilpotency_class_quotient_center", []], ["add", "theorem", "nilpotency_class_zero_iff_subsingleton", []], ["add", "theorem", "nilpotent_center_quotient_ind", []]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "comap_comap_center", ["quotient_group"]]]}]}, {"timestamp": 1643643724, "sha": "06bb5b66", "message": "feat(topology/nhds_set): define neighborhoods of a set (#11520)\n* Co-authored by @PatrickMassot\n* From the sphere eversion project", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "interior_eq_univ", []], ["add", "theorem", "mem_nhds_iff", ["is_open"]], ["add", "theorem", "subset_interior_iff", []]]}, {"oldPath": null, "newPath": "src/topology/nhds_set.lean", "changes": [["add", "theorem", "mem_nhds_set", ["is_open"]], ["add", "theorem", "mem_nhds_set_empty", []], ["add", "theorem", "mem_nhds_set_iff_exists", []], ["add", "theorem", "mem_nhds_set_iff_forall", []], ["add", "theorem", "mem_nhds_set_interior", []], ["add", "theorem", "monotone_nhds_set", []], ["add", "def", "nhds_set", []], ["add", "theorem", "nhds_set_empty", []], ["add", "theorem", "nhds_set_singleton", []], ["add", "theorem", "nhds_set_univ", []], ["add", "theorem", "subset_interior_iff_mem_nhds_set", []], ["add", "theorem", "union_mem_nhds_set", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "compl_singleton_mem_nhds_iff", []], ["add", "theorem", "compl_singleton_mem_nhds_set_iff", []], ["add", "theorem", "injective_nhds_set", []], ["add", "theorem", "nhds_le_nhds_set", []], ["add", "theorem", "nhds_set_inj_iff", []], ["add", "theorem", "nhds_set_le_iff", []], ["add", "theorem", "strict_mono_nhds_set", []]]}]}, {"timestamp": 1643643722, "sha": "366d13ef", "message": "feat(scripts/lint_style): Add a check for unfreeze_local_instances (#11509)", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": "src/tactic/choose.lean", "newPath": "src/tactic/choose.lean", "changes": []}]}, {"timestamp": 1643638474, "sha": "ada43f00", "message": "feat(order/hom/complete_lattice): Complete lattice homomorphisms (#11741)\nDefine frame homs and complete lattice homs using the `fun_like` along with weaker homomorphisms that only preserve `Sup`, `Inf`.", "changes": [{"oldPath": null, "newPath": "src/order/hom/complete_lattice.lean", "changes": [["add", "theorem", "cancel_left", ["Inf_hom"]], ["add", "theorem", "cancel_right", ["Inf_hom"]], ["add", "theorem", "coe_comp", ["Inf_hom"]], ["add", "theorem", "coe_id", ["Inf_hom"]], ["add", "theorem", "coe_top", ["Inf_hom"]], ["add", "def", "comp", ["Inf_hom"]], ["add", "theorem", "comp_apply", ["Inf_hom"]], ["add", "theorem", "comp_assoc", ["Inf_hom"]], ["add", "theorem", "comp_id", ["Inf_hom"]], ["add", "theorem", "ext", ["Inf_hom"]], ["add", "theorem", "id_apply", ["Inf_hom"]], ["add", "theorem", "id_comp", ["Inf_hom"]], ["add", "theorem", "to_fun_eq_coe", ["Inf_hom"]], ["add", "theorem", "top_apply", ["Inf_hom"]], ["add", "structure", "Inf_hom", []], ["add", "theorem", "bot_apply", ["Sup_hom"]], ["add", "theorem", "cancel_left", ["Sup_hom"]], ["add", "theorem", "cancel_right", ["Sup_hom"]], ["add", "theorem", "coe_bot", ["Sup_hom"]], ["add", "theorem", "coe_comp", ["Sup_hom"]], ["add", "theorem", "coe_id", ["Sup_hom"]], ["add", "def", "comp", ["Sup_hom"]], ["add", "theorem", "comp_apply", ["Sup_hom"]], ["add", "theorem", "comp_assoc", ["Sup_hom"]], ["add", "theorem", "comp_id", ["Sup_hom"]], ["add", "theorem", "ext", ["Sup_hom"]], ["add", "theorem", "id_apply", ["Sup_hom"]], ["add", "theorem", "id_comp", ["Sup_hom"]], ["add", "theorem", "to_fun_eq_coe", ["Sup_hom"]], ["add", "structure", "Sup_hom", []], ["add", "theorem", "cancel_left", ["complete_lattice_hom"]], ["add", "theorem", "cancel_right", ["complete_lattice_hom"]], ["add", "theorem", "coe_comp", ["complete_lattice_hom"]], ["add", "theorem", "coe_id", ["complete_lattice_hom"]], ["add", "def", "comp", ["complete_lattice_hom"]], ["add", "theorem", "comp_apply", ["complete_lattice_hom"]], ["add", "theorem", "comp_assoc", ["complete_lattice_hom"]], ["add", "theorem", "comp_id", ["complete_lattice_hom"]], ["add", "theorem", "ext", ["complete_lattice_hom"]], ["add", "theorem", "id_apply", ["complete_lattice_hom"]], ["add", "theorem", "id_comp", ["complete_lattice_hom"]], ["add", "def", "to_Inf_hom", ["complete_lattice_hom"]], ["add", "theorem", "to_fun_eq_coe", ["complete_lattice_hom"]], ["add", "structure", "complete_lattice_hom", []], ["add", "theorem", "bot_apply", ["frame_hom"]], ["add", "theorem", "cancel_left", ["frame_hom"]], ["add", "theorem", "cancel_right", ["frame_hom"]], ["add", "theorem", "coe_bot", ["frame_hom"]], ["add", "theorem", "coe_comp", ["frame_hom"]], ["add", "theorem", "coe_id", ["frame_hom"]], ["add", "def", "comp", ["frame_hom"]], ["add", "theorem", "comp_apply", ["frame_hom"]], ["add", "theorem", "comp_assoc", ["frame_hom"]], ["add", "theorem", "comp_id", ["frame_hom"]], ["add", "theorem", "ext", ["frame_hom"]], ["add", "theorem", "id_apply", ["frame_hom"]], ["add", "theorem", "id_comp", ["frame_hom"]], ["add", "theorem", "to_fun_eq_coe", ["frame_hom"]], ["add", "def", "to_lattice_hom", ["frame_hom"]], ["add", "structure", "frame_hom", []], ["add", "theorem", "map_infi", []], ["add", "theorem", "map_infi₂", []], ["add", "theorem", "map_supr", []], ["add", "theorem", "map_supr₂", []]]}]}, {"timestamp": 1643638472, "sha": "08fed82d", "message": "feat(category_theory/preadditive): the Yoneda embedding for preadditive categories (#11740)", "changes": [{"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["add", "theorem", "smul_left", ["category_theory", "End"]], ["add", "theorem", "smul_right", ["category_theory", "End"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/opposite.lean", "newPath": "src/category_theory/preadditive/opposite.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/preadditive/yoneda.lean", "changes": [["add", "def", "preadditive_coyoneda", ["category_theory"]], ["add", "def", "preadditive_coyoneda_obj", ["category_theory"]], ["add", "def", "preadditive_yoneda", ["category_theory"]], ["add", "def", "preadditive_yoneda_obj", ["category_theory"]], ["add", "theorem", "whiskering_preadditive_coyoneda", ["category_theory"]], ["add", "theorem", "whiskering_preadditive_yoneda", ["category_theory"]]]}]}, {"timestamp": 1643638470, "sha": "323287e6", "message": "feat(data/polynomial/reverse): lemmas about evaluating reversed polynomials (#11705)", "changes": [{"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["add", "theorem", "eval₂_reflect_eq_zero_iff", ["polynomial"]], ["add", "theorem", "eval₂_reflect_mul_pow", ["polynomial"]], ["add", "theorem", "eval₂_reverse_eq_zero_iff", ["polynomial"]], ["add", "theorem", "eval₂_reverse_mul_pow", ["polynomial"]], ["add", "theorem", "reflect_C", ["polynomial"]], ["add", "theorem", "rev_at_zero", ["polynomial"]]]}]}, {"timestamp": 1643638467, "sha": "bb2b58ed", "message": "feat(data/{nat,int}/parity): add division lemmas (#11570)\nAdd lemmas of the form `even n → n / 2 * 2 = n` and `odd n → n / 2 * 2 + 1 = n`", "changes": [{"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "theorem", "add_one_div_two_mul_two_of_odd", ["int"]], ["add", "theorem", "div_two_mul_two_add_one_of_odd", ["int"]], ["add", "theorem", "div_two_mul_two_of_even", ["int"]], ["add", "theorem", "two_mul_div_two_add_one_of_odd", ["int"]], ["add", "theorem", "two_mul_div_two_of_even", ["int"]], ["add", "theorem", "two_mul_div_two_of_odd", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "div_two_mul_two_add_one_of_odd", ["nat"]], ["add", "theorem", "div_two_mul_two_of_even", ["nat"]], ["add", "theorem", "one_add_div_two_mul_two_of_odd", ["nat"]], ["add", "theorem", "two_mul_div_two_add_one_of_odd", ["nat"]], ["add", "theorem", "two_mul_div_two_of_even", ["nat"]]]}]}, {"timestamp": 1643638466, "sha": "6e016d21", "message": "feat(linear_algebra/{tensor,exterior,clifford}_algebra): these algebras are graded by powers of the submodules of their generators (#11542)\nThis shows that:\n* The tensor and exterior algebras are `nat`-graded algebras, with each grade `n` corresponding to the submodule `(ι R).range ^ n`\n* The clifford algebra is a superalgebra (`zmod 2`-graded algebra), with even and odd grades corresponding to even and odd powers of the submodule `(ι Q).range`\nEventually we'll also want to show that the tensor algebra is also graded with pieces in `pi_tensor_prod`, but that's a job for another time.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "theorem", "supr_eq_to_submodule_range", ["submodule"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/grading.lean", "changes": [["add", "def", "even_odd", ["clifford_algebra"]], ["add", "theorem", "even_odd_mul_le", ["clifford_algebra"]], ["add", "def", "ι", ["clifford_algebra", "graded_algebra"]], ["add", "theorem", "ι_apply", ["clifford_algebra", "graded_algebra"]], ["add", "theorem", "ι_sq_scalar", ["clifford_algebra", "graded_algebra"]], ["add", "theorem", "one_le_even_odd_zero", ["clifford_algebra"]], ["add", "theorem", "range_ι_le_even_odd_one", ["clifford_algebra"]], ["add", "theorem", "supr_ι_range_eq_top", ["clifford_algebra"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/exterior_algebra/grading.lean", "changes": [["add", "def", "ι", ["exterior_algebra", "graded_algebra"]], ["add", "theorem", "ι_apply", ["exterior_algebra", "graded_algebra"]], ["add", "theorem", "ι_sq_zero", ["exterior_algebra", "graded_algebra"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/tensor_algebra/grading.lean", "changes": [["add", "def", "ι", ["tensor_algebra", "graded_algebra"]], ["add", "theorem", "ι_apply", ["tensor_algebra", "graded_algebra"]]]}]}, {"timestamp": 1643632577, "sha": "45cfb254", "message": "refactor(order/bounded_order): Use `is_min`/`is_max` (#11408)\nGolf `order.bounded_order` and `data.set.basic` using `is_min`/`is_max`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "subsingleton_is_bot", ["set"]], ["mod", "theorem", "subsingleton_is_top", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["del", "theorem", "Iic_eq", ["is_bot"]], ["del", "theorem", "Iio_eq", ["is_bot"]], ["add", "theorem", "Ici_eq", ["is_max"]], ["add", "theorem", "Ioi_eq", ["is_max"]], ["add", "theorem", "Iic_eq", ["is_min"]], ["add", "theorem", "Iio_eq", ["is_min"]], ["del", "theorem", "Ici_eq", ["is_top"]], ["del", "theorem", "Ioi_eq", ["is_top"]], ["mod", "theorem", "Ici_top", ["set"]], ["mod", "theorem", "Iic_bot", ["set"]], ["mod", "theorem", "Iio_bot", ["set"]], ["mod", "theorem", "Ioi_top", ["set"]]]}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "eq_bot_of_lt", ["is_simple_order"]], ["add", "theorem", "eq_top_of_lt", ["is_simple_order"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "eq_or_gt_of_le", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "bot_le", []], ["add", "theorem", "bot_lt_top", []], ["mod", "theorem", "eq_bot_or_bot_lt", []], ["mod", "theorem", "is_bot_bot", []], ["mod", "theorem", "is_bot_iff_eq_bot", []], ["add", "theorem", "is_max_iff_eq_top", []], ["add", "theorem", "is_max_top", []], ["add", "theorem", "is_min_bot", []], ["add", "theorem", "is_min_iff_eq_bot", []], ["mod", "theorem", "is_top_iff_eq_top", []], ["mod", "theorem", "is_top_top", []], ["mod", "theorem", "le_top", []], ["mod", "theorem", "not_lt_bot", []], ["mod", "theorem", "not_top_lt", []], ["mod", "theorem", "top_ne_bot", []]]}, {"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["del", "theorem", "unique", ["is_bot"]], ["del", "theorem", "unique", ["is_top"]]]}]}, {"timestamp": 1643628094, "sha": "2e1d8d67", "message": "feat(ring_theory/roots_of_unity): `fun_like` support (#11735)\n- feat(ring_theory/roots_of_unity): ring_hom_class\n- oops these could've been monoid homs from the start", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "map_iff_of_injective", ["is_primitive_root"]], ["mod", "theorem", "map_of_injective", ["is_primitive_root"]], ["mod", "theorem", "of_map_of_injective", ["is_primitive_root"]], ["add", "theorem", "map_root_of_unity_eq_pow_self", []], ["add", "def", "restrict_roots_of_unity", []], ["add", "theorem", "restrict_roots_of_unity_coe_apply", []], ["del", "theorem", "map_root_of_unity_eq_pow_self", ["ring_hom"]], ["del", "def", "restrict_roots_of_unity", ["ring_hom"]], ["del", "theorem", "restrict_roots_of_unity_coe_apply", ["ring_hom"]]]}]}, {"timestamp": 1643628093, "sha": "406719e9", "message": "feat(order/hom/lattice): Composition of lattice homs (#11676)\nDefine `top_hom.comp`, `bot_hom.comp`, `sup_hom.comp`, `inf_hom.comp`, `lattice_hom.comp`, `bounded_lattice_hom.comp`, `order_hom.to_lattice_hom`.", "changes": [{"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["add", "theorem", "cancel_left", ["bot_hom"]], ["add", "theorem", "cancel_right", ["bot_hom"]], ["add", "theorem", "coe_comp", ["bot_hom"]], ["add", "def", "comp", ["bot_hom"]], ["add", "theorem", "comp_apply", ["bot_hom"]], ["add", "theorem", "comp_assoc", ["bot_hom"]], ["add", "theorem", "comp_id", ["bot_hom"]], ["add", "theorem", "id_comp", ["bot_hom"]], ["add", "theorem", "cancel_left", ["bounded_lattice_hom"]], ["add", "theorem", "cancel_right", ["bounded_lattice_hom"]], ["add", "theorem", "coe_comp", ["bounded_lattice_hom"]], ["add", "theorem", "coe_comp_inf_hom", ["bounded_lattice_hom"]], ["add", "theorem", "coe_comp_lattice_hom", ["bounded_lattice_hom"]], ["add", "theorem", "coe_comp_sup_hom", ["bounded_lattice_hom"]], ["add", "def", "comp", ["bounded_lattice_hom"]], ["add", "theorem", "comp_apply", ["bounded_lattice_hom"]], ["add", "theorem", "comp_assoc", ["bounded_lattice_hom"]], ["add", "theorem", "comp_id", ["bounded_lattice_hom"]], ["add", "theorem", "id_comp", ["bounded_lattice_hom"]], ["add", "theorem", "cancel_left", ["inf_hom"]], ["add", "theorem", "cancel_right", ["inf_hom"]], ["add", "theorem", "coe_comp", ["inf_hom"]], ["add", "def", "comp", ["inf_hom"]], ["add", "theorem", "comp_apply", ["inf_hom"]], ["add", "theorem", "comp_assoc", ["inf_hom"]], ["add", "theorem", "comp_id", ["inf_hom"]], ["add", "theorem", "id_comp", ["inf_hom"]], ["add", "theorem", "cancel_left", ["lattice_hom"]], ["add", "theorem", "cancel_right", ["lattice_hom"]], ["add", "theorem", "coe_comp", ["lattice_hom"]], ["add", "theorem", "coe_comp_inf_hom", ["lattice_hom"]], ["add", "theorem", "coe_comp_sup_hom", ["lattice_hom"]], ["add", "def", "comp", ["lattice_hom"]], ["add", "theorem", "comp_apply", ["lattice_hom"]], ["add", "theorem", "comp_assoc", ["lattice_hom"]], ["add", "theorem", "comp_id", ["lattice_hom"]], ["add", "theorem", "id_comp", ["lattice_hom"]], ["add", "theorem", "coe_to_lattice_hom", ["order_hom_class"]], ["add", "def", "to_lattice_hom", ["order_hom_class"]], ["add", "theorem", "to_lattice_hom_apply", ["order_hom_class"]], ["add", "def", "to_lattice_hom_class", ["order_hom_class"]], ["add", "theorem", "cancel_left", ["sup_hom"]], ["add", "theorem", "cancel_right", ["sup_hom"]], ["add", "theorem", "coe_comp", ["sup_hom"]], ["add", "def", "comp", ["sup_hom"]], ["add", "theorem", "comp_apply", ["sup_hom"]], ["add", "theorem", "comp_assoc", ["sup_hom"]], ["add", "theorem", "comp_id", ["sup_hom"]], ["add", "theorem", "id_comp", ["sup_hom"]], ["add", "theorem", "cancel_left", ["top_hom"]], ["add", "theorem", "cancel_right", ["top_hom"]], ["add", "theorem", "coe_comp", ["top_hom"]], ["add", "def", "comp", ["top_hom"]], ["add", "theorem", "comp_apply", ["top_hom"]], ["add", "theorem", "comp_assoc", ["top_hom"]], ["add", "theorem", "comp_id", ["top_hom"]], ["add", "theorem", "id_comp", ["top_hom"]]]}]}, {"timestamp": 1643622390, "sha": "16274f60", "message": "chore(analysis/inner_product_space/lax_milgram): docs fixes (#11745)\nA couple of corrections, and a couple of additions of namespaces to docstrings so that they get hyperlinks when docgen is run.", "changes": [{"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/lax_milgram.lean", "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": []}]}, {"timestamp": 1643622389, "sha": "43887435", "message": "feat(algebra/algebra/basic): add 1-related lemmas for `aut` (#11738)\nfrom flt-regular", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "one_apply", ["alg_equiv"]], ["mod", "def", "refl", ["alg_equiv"]]]}]}, {"timestamp": 1643622388, "sha": "7468d8dd", "message": "feat(measure_theory/integral/lebesgue): weaken assumptions for with_density lemmas (#11711)\nWe state more precise versions of some lemmas about the measure `μ.with_density f`, making it possible to remove some assumptions down the road. For instance, the lemma\n```lean\n integrable g (μ.with_density f) ↔ integrable (λ x, g x * (f x).to_real) μ\n```\ncurrently requires the measurability of `g`, while we can completely remove it with the new lemmas.\nWe also make `lintegral` irreducible.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "ae_measurable_of_unif_approx", []]]}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "coe_to_nnreal_ae_eq", ["measure_theory"]], ["add", "theorem", "integrable_with_density_iff_integrable_smul'", ["measure_theory"]], ["add", "theorem", "integrable_with_density_iff_integrable_smul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "ae_measurable_with_density_ennreal_iff", ["measure_theory"]], ["add", "theorem", "ae_measurable_with_density_iff", ["measure_theory"]], ["add", "theorem", "ae_with_density_iff", ["measure_theory"]], ["add", "theorem", "ae_with_density_iff_ae_restrict", ["measure_theory"]], ["mod", "def", "lintegral", ["measure_theory"]], ["mod", "theorem", "lintegral_map'", ["measure_theory"]], ["mod", "theorem", "lintegral_map", ["measure_theory"]], ["add", "theorem", "lintegral_map_le", ["measure_theory"]], ["add", "theorem", "lintegral_with_density_eq_lintegral_mul_non_measurable", ["measure_theory"]], ["add", "theorem", "lintegral_with_density_eq_lintegral_mul_non_measurable₀", ["measure_theory"]], ["add", "theorem", "lintegral_with_density_eq_lintegral_mul₀'", ["measure_theory"]], ["add", "theorem", "lintegral_with_density_eq_lintegral_mul₀", ["measure_theory"]], ["add", "theorem", "lintegral_with_density_le_lintegral_mul", ["measure_theory"]], ["add", "theorem", "set_lintegral_with_density_eq_set_lintegral_mul_non_measurable", ["measure_theory"]], ["add", "theorem", "set_lintegral_with_density_eq_set_lintegral_mul_non_measurable₀", ["measure_theory"]], ["add", "theorem", "supr_lintegral_measurable_le_eq_lintegral", ["measure_theory"]], ["add", "theorem", "with_density_apply_eq_zero", ["measure_theory"]], ["add", "theorem", "with_density_congr_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_of_ae_restrict_of_ae_restrict_compl", ["measure_theory"]]]}, {"oldPath": "src/probability_theory/density.lean", "newPath": "src/probability_theory/density.lean", "changes": []}]}, {"timestamp": 1643622387, "sha": "0c0ab69d", "message": "feat(topology/algebra/continuous_monoid_hom): Add `topological_group` instance (#11707)\nThis PR proves that continuous monoid homs form a topological group.", "changes": [{"oldPath": "src/topology/algebra/continuous_monoid_hom.lean", "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": [["add", "theorem", "is_embedding", ["continuous_monoid_hom"]], ["add", "theorem", "is_inducing", ["continuous_monoid_hom"]]]}]}, {"timestamp": 1643622386, "sha": "b3ad3f2a", "message": "feat(data/set/lattice): review (#11672)\n* generalize `set.Union_coe_set` and `set.Inter_coe_set` to dependent functions;\n* add `bInter_Union`, `sUnion_Union`;\n* drop `sUnion_bUnion`, `sInter_bUnion`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_coe_set", ["set"]], ["mod", "theorem", "Union_coe_set", ["set"]], ["add", "theorem", "bInter_Union", ["set"]], ["del", "theorem", "sInter_bUnion", ["set"]], ["add", "theorem", "sUnion_Union", ["set"]], ["del", "theorem", "sUnion_bUnion", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}]}, {"timestamp": 1643620673, "sha": "6319a238", "message": "feat(number_theory/cyclotomic): simplify `ne_zero`s (#11715)\nFor flt-regular.", "changes": [{"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["mod", "theorem", "of_no_zero_smul_divisors", ["ne_zero"]], ["add", "theorem", "trans", ["ne_zero"]]]}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/zeta.lean", "newPath": "src/number_theory/cyclotomic/zeta.lean", "changes": []}]}, {"timestamp": 1643613905, "sha": "8a67cf51", "message": "feat(ring_theory/roots_of_unity): turn `is_primitive_root` into a member of `roots_of_unity` (#11739)\nfrom flt-regular", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "def", "to_roots_of_unity", ["is_primitive_root"]]]}]}, {"timestamp": 1643589609, "sha": "50cdb957", "message": "fix(tactic/suggest): make `library_search` aware of definition of `ne` (#11742)\n`library_search` wasn't including results like `¬ a = b` to solve goals like `a ≠ b` and vice-versa.\nCloses #3428", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}]}, {"timestamp": 1643583698, "sha": "07735b8a", "message": "fix(tactic/squeeze_simp): \"match failed\" when `simp` works (#11659)\nCloses #11196.", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "test/squeeze.lean", "newPath": "test/squeeze.lean", "changes": [["add", "theorem", "asda", []], ["add", "theorem", "asda", ["pnat"]]]}]}, {"timestamp": 1643569042, "sha": "b0fc10a1", "message": "chore(ring_theory/polynomial/chebyshev): simplify argument using new `linear_combination` tactic (#11736)\ncc @agoldb10 @robertylewis", "changes": [{"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": []}]}, {"timestamp": 1643557270, "sha": "97f61dfd", "message": "feat(group_theory/sylow): preimages of sylow groups (#11722)", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "coe_comap_of_injective", ["sylow"]], ["add", "theorem", "coe_comap_of_ker_is_p_group", ["sylow"]], ["add", "theorem", "coe_subtype", ["sylow"]], ["add", "def", "comap_of_injective", ["sylow"]], ["add", "def", "comap_of_ker_is_p_group", ["sylow"]], ["add", "def", "subtype", ["sylow"]]]}]}, {"timestamp": 1643551740, "sha": "02c720ee", "message": "chore(*): Rename `prod_dvd_prod` (#11734)\nIn #11693 I introduced the counterpart for `multiset` of `finset.prod_dvd_prod`. It makes sense for these to have the same name, but there's already a different lemma called `multiset.prod_dvd_prod`, so the new lemma was named `multiset.prod_dvd_prod_of_dvd` instead. As discussed with @riccardobrasca and @ericrbg at #11693, this PR brings the names of the two counterpart lemmas into alignment, and also renames `multiset.prod_dvd_prod` to something more informative.\nRenaming as follows:\n`multiset.prod_dvd_prod` to `multiset.prod_dvd_prod_of_le`\n`finset.prod_dvd_prod` to `finset.prod_dvd_prod_of_dvd`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["del", "theorem", "prod_dvd_prod", ["finset"]], ["add", "theorem", "prod_dvd_prod_of_dvd", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["del", "theorem", "prod_dvd_prod", ["multiset"]], ["add", "theorem", "prod_dvd_prod_of_le", ["multiset"]]]}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1643541294, "sha": "a248befb", "message": "feat(data/pnat/basic): 0 < n as a fact (#11729)", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "fact_pos", ["pnat"]]]}]}, {"timestamp": 1643538697, "sha": "dde904e0", "message": "chore(ring_theory/localization) weaken hypothesis from field to comm_ring (#11713)\nalso making `B` an explicit argument", "changes": [{"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "comap_is_algebraic_iff", ["is_fraction_ring"]], ["mod", "theorem", "is_algebraic_iff", ["is_fraction_ring"]]]}]}, {"timestamp": 1643535576, "sha": "1ea49d0f", "message": "feat(tactic/linear_combination): add tactic for combining equations (#11646)\nThis new tactic attempts to prove a target equation by creating a linear combination of a list of equalities. The name of this tactic is currently `linear_combination`, but I am open to other possible names.\nAn example of how to use this tactic is shown below:\n```\nexample (x y : ℤ) (h1 : x*y + 2*x = 1) (h2 : x = y) :\n x*y = -2*y + 1 :=\nby linear_combination (h1, 1) (h2, -2)\n```", "changes": [{"oldPath": null, "newPath": "src/tactic/linear_combination.lean", "changes": [["add", "theorem", "all_on_left_equiv", ["linear_combo"]], ["add", "theorem", "left_minus_right", ["linear_combo"]], ["add", "theorem", "left_mul_both_sides", ["linear_combo"]], ["add", "theorem", "replace_eq_expr", ["linear_combo"]], ["add", "theorem", "sum_two_equations", ["linear_combo"]]]}, {"oldPath": null, "newPath": "test/linear_combination.lean", "changes": []}]}, {"timestamp": 1643527702, "sha": "73e45c62", "message": "chore(analysis/normed_space/star): create new folder for normed star rings (#11732)\nThis PR moves the file `analysis/normed_space/star.lean` to the new folder `analysis/normed_space/star` (where it of course becomes `basic.lean`).\nI expect a lot of material about C*-algebras to land in this folder in the (hopefully) near future.", "changes": [{"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star/basic.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1643521083, "sha": "09d4f485", "message": "chore(measure_theory/function/conditional_expectation): fix typo (#11731)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}]}, {"timestamp": 1643501557, "sha": "af1290cb", "message": "feat(field_theory/ratfunc): rational functions as Laurent series (#11276)", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "theorem", "algebra_map_apply", ["ratfunc"]], ["add", "theorem", "algebra_map_apply_div", ["ratfunc"]], ["add", "theorem", "coe_C", ["ratfunc"]], ["add", "theorem", "coe_X", ["ratfunc"]], ["add", "theorem", "coe_add", ["ratfunc"]], ["add", "def", "coe_alg_hom", ["ratfunc"]], ["add", "theorem", "coe_apply", ["ratfunc"]], ["add", "theorem", "coe_def", ["ratfunc"]], ["add", "theorem", "coe_div", ["ratfunc"]], ["add", "theorem", "coe_injective", ["ratfunc"]], ["add", "theorem", "coe_mul", ["ratfunc"]], ["add", "theorem", "coe_num_denom", ["ratfunc"]], ["add", "theorem", "coe_one", ["ratfunc"]], ["add", "theorem", "coe_smul", ["ratfunc"]], ["add", "theorem", "coe_zero", ["ratfunc"]], ["add", "theorem", "div_smul", ["ratfunc"]], ["add", "def", "lift_alg_hom", ["ratfunc"]], ["add", "theorem", "lift_alg_hom_apply", ["ratfunc"]], ["add", "theorem", "lift_alg_hom_apply_div", ["ratfunc"]], ["add", "theorem", "lift_alg_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["add", "theorem", "lift_alg_hom_injective", ["ratfunc"]], ["add", "def", "lift_monoid_with_zero_hom", ["ratfunc"]], ["add", "theorem", "lift_monoid_with_zero_hom_apply", ["ratfunc"]], ["add", "theorem", "lift_monoid_with_zero_hom_apply_div", ["ratfunc"]], ["add", "theorem", "lift_monoid_with_zero_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["add", "theorem", "lift_monoid_with_zero_hom_injective", ["ratfunc"]], ["add", "def", "lift_ring_hom", ["ratfunc"]], ["add", "theorem", "lift_ring_hom_apply", ["ratfunc"]], ["add", "theorem", "lift_ring_hom_apply_div", ["ratfunc"]], ["add", "theorem", "lift_ring_hom_apply_of_fraction_ring_mk", ["ratfunc"]], ["add", "theorem", "lift_ring_hom_injective", ["ratfunc"]], ["add", "theorem", "map_denom_ne_zero", ["ratfunc"]], ["add", "theorem", "smul_eq_C_mul", ["ratfunc"]], ["add", "theorem", "smul_eq_C_smul", ["ratfunc"]]]}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": [["add", "theorem", "gcd_ne_zero_of_left", []], ["add", "theorem", "gcd_ne_zero_of_right", []]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "algebra_map_apply'", ["hahn_series"]], ["add", "theorem", "algebra_map_hahn_series_apply", ["polynomial"]], ["add", "theorem", "algebra_map_hahn_series_injective", ["polynomial"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1643490610, "sha": "ff352187", "message": "feat(analysis/convex/topology): add lemmas (#11615)", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "combo_interior_self_subset_interior", ["convex"]], ["add", "theorem", "combo_mem_interior_left", ["convex"]], ["add", "theorem", "combo_mem_interior_right", ["convex"]], ["add", "theorem", "combo_self_interior_subset_interior", ["convex"]], ["add", "theorem", "open_segment_subset_interior_left", ["convex"]], ["add", "theorem", "open_segment_subset_interior_right", ["convex"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "mul_left", ["is_open"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "epigraph", ["is_closed"]], ["add", "theorem", "hypograph", ["is_closed"]]]}]}, {"timestamp": 1643488098, "sha": "4085363d", "message": "feat(number_theory/prime_counting): The prime counting function (#9080)\nWith an eye to implementing [this proof](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.238002/near/251178921), I am adding a file to define the prime counting function and prove a simple upper bound on it.", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "Ico_filter_coprime_le", ["nat"]], ["add", "theorem", "filter_coprime_Ico_eq_totient", ["nat"]], ["mod", "def", "totient", ["nat"]], ["mod", "theorem", "totient_eq_card_coprime", ["nat"]]]}, {"oldPath": null, "newPath": "src/number_theory/prime_counting.lean", "changes": [["add", "theorem", "monotone_prime_counting'", ["nat"]], ["add", "theorem", "monotone_prime_counting", ["nat"]], ["add", "def", "prime_counting'", ["nat"]], ["add", "theorem", "prime_counting'_add_le", ["nat"]], ["add", "def", "prime_counting", ["nat"]]]}, {"oldPath": "src/set_theory/fincard.lean", "newPath": "src/set_theory/fincard.lean", "changes": [["del", "def", "card", ["nat"]], ["mod", "theorem", "card_eq_fintype_card", ["nat"]], ["mod", "theorem", "card_eq_zero_of_infinite", ["nat"]]]}]}, {"timestamp": 1643485633, "sha": "74250a0a", "message": "chore(representation_theory/maschke): remove recover (#11721)", "changes": [{"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}]}, {"timestamp": 1643464912, "sha": "49b8b91a", "message": "feat(data/fintype/order): `bool` is a boolean algebra (#11694)\nProvide the `boolean_algebra` instance for `bool` and use the machinery from `data.fintype.order` to deduce `complete_boolean_algebra bool` and `complete_linear_order bool`.", "changes": [{"oldPath": "src/data/bool/basic.lean", "newPath": "src/data/bool/basic.lean", "changes": [["add", "theorem", "band_bnot_self", ["bool"]], ["add", "theorem", "bnot_band_self", ["bool"]], ["add", "theorem", "bnot_bor_self", ["bool"]], ["add", "theorem", "bor_bnot_self", ["bool"]]]}, {"oldPath": "src/data/fintype/order.lean", "newPath": "src/data/fintype/order.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1643428041, "sha": "fc4e471b", "message": "feat(measure_theory/group/basic): make is_[add|mul]_[left|right]_invariant classes (#11655)\n* Simplify the definitions of these classes\n* Generalize many results about topological groups to measurable groups (still to do in `group/prod`)\n* Simplify some proofs\n* Make function argument of `integral_mul_[left|right]_eq_self` explicit (otherwise it is hard to apply this lemma in case the function is not a variable)", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": [["add", "theorem", "forall_measure_preimage_mul_iff", ["measure_theory"]], ["add", "theorem", "forall_measure_preimage_mul_right_iff", ["measure_theory"]], ["del", "theorem", "inv", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "measure_lt_top_of_is_compact'", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "measure_lt_top_of_is_compact", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "measure_ne_zero_iff_nonempty", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "measure_pos_iff_nonempty", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "measure_pos_of_is_open", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "measure_preimage_mul", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "null_iff", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "null_iff_empty", ["measure_theory", "is_mul_left_invariant"]], ["del", "theorem", "smul", ["measure_theory", "is_mul_left_invariant"]], ["del", "def", "is_mul_left_invariant", ["measure_theory"]], ["del", "theorem", "is_mul_left_invariant_inv", ["measure_theory"]], ["del", "theorem", "inv", ["measure_theory", "is_mul_right_invariant"]], ["del", "theorem", "smul", ["measure_theory", "is_mul_right_invariant"]], ["del", "def", "is_mul_right_invariant", ["measure_theory"]], ["del", "theorem", "is_mul_right_invariant_inv", ["measure_theory"]], ["mod", "theorem", "lintegral_eq_zero_of_is_mul_left_invariant", ["measure_theory"]], ["mod", "theorem", "lintegral_mul_left_eq_self", ["measure_theory"]], ["mod", "theorem", "lintegral_mul_right_eq_self", ["measure_theory"]], ["add", "theorem", "map_mul_left_eq_self", ["measure_theory"]], ["add", "theorem", "map_mul_right_eq_self", ["measure_theory"]], ["del", "theorem", "haar_preimage_mul", ["measure_theory", "measure"]], ["del", "theorem", "haar_preimage_mul_right", ["measure_theory", "measure"]], ["mod", "theorem", "inv_apply", ["measure_theory", "measure"]], ["del", "theorem", "is_mul_left_invariant_haar", ["measure_theory", "measure"]], ["del", "theorem", "map_mul_left_eq_self", ["measure_theory", "measure"]], ["del", "theorem", "map_mul_right_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "measure_lt_top_of_is_compact_of_is_mul_left_invariant'", ["measure_theory"]], ["add", "theorem", "measure_lt_top_of_is_compact_of_is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "measure_ne_zero_iff_nonempty_of_is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "measure_pos_iff_nonempty_of_is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "measure_pos_of_is_open_of_is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "measure_preimage_mul", ["measure_theory"]], ["add", "theorem", "measure_preimage_mul_right", ["measure_theory"]], ["add", "theorem", "null_iff_empty_of_is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "null_iff_of_is_mul_left_invariant", ["measure_theory"]], ["mod", "theorem", "regular_inv_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": [["mod", "theorem", "lintegral_lintegral_mul_inv", ["measure_theory"]], ["mod", "theorem", "map_prod_inv_mul_eq", ["measure_theory"]], ["mod", "theorem", "map_prod_inv_mul_eq_swap", ["measure_theory"]], ["mod", "theorem", "map_prod_mul_eq", ["measure_theory"]], ["mod", "theorem", "map_prod_mul_eq_swap", ["measure_theory"]], ["mod", "theorem", "map_prod_mul_inv_eq", ["measure_theory"]], ["mod", "theorem", "measure_inv_null", ["measure_theory"]], ["mod", "theorem", "measure_lintegral_div_measure", ["measure_theory"]], ["mod", "theorem", "measure_mul_measure_eq", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_ne_zero", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_null", ["measure_theory"]], ["mod", "theorem", "quasi_measure_preserving_inv", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "integral_mul_left_eq_self", ["measure_theory"]], ["mod", "theorem", "integral_mul_right_eq_self", ["measure_theory"]], ["mod", "theorem", "integral_zero_of_mul_left_eq_neg", ["measure_theory"]], ["mod", "theorem", "integral_zero_of_mul_right_eq_neg", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": [["mod", "theorem", "haar_measure_unique", ["measure_theory", "measure"]], ["del", "theorem", "is_mul_left_invariant_haar_measure", ["measure_theory", "measure"]], ["mod", "theorem", "regular_of_is_mul_left_invariant", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["del", "theorem", "is_add_left_invariant_real_volume", ["measure_theory"]], ["del", "theorem", "is_add_left_invariant_real_volume_pi", ["measure_theory"]]]}]}, {"timestamp": 1643419020, "sha": "44105f84", "message": "feat(analysis/inner_product_space): proof of the Lax Milgram theorem (#11491)\nMy work on the Lax Milgram theorem, as suggested by @hrmacbeth. Done following the [slides from Peter Howard (Texas A&M University)](https://www.math.tamu.edu/~phoward/m612/s20/elliptic2.pdf).\nCloses #10213.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["add", "def", "continuous_linear_map_of_bilin", ["inner_product_space"]], ["add", "theorem", "continuous_linear_map_of_bilin_apply", ["inner_product_space"]], ["add", "theorem", "unique_continuous_linear_map_of_bilin", ["inner_product_space"]]]}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/lax_milgram.lean", "changes": [["add", "theorem", "antilipschitz", ["is_coercive"]], ["add", "theorem", "bounded_below", ["is_coercive"]], ["add", "theorem", "closed_range", ["is_coercive"]], ["add", "def", "continuous_linear_equiv_of_bilin", ["is_coercive"]], ["add", "theorem", "continuous_linear_equiv_of_bilin_apply", ["is_coercive"]], ["add", "theorem", "ker_eq_bot", ["is_coercive"]], ["add", "theorem", "range_eq_top", ["is_coercive"]], ["add", "theorem", "unique_continuous_linear_equiv_of_bilin", ["is_coercive"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "is_coercive", []]]}]}, {"timestamp": 1643416422, "sha": "f51d6bfd", "message": "chore(ring_theory/polynomial/tower): weaken comm_semiring hypothesis to semiring (#11712)\n…to semiring", "changes": [{"oldPath": "src/ring_theory/polynomial/tower.lean", "newPath": "src/ring_theory/polynomial/tower.lean", "changes": []}]}, {"timestamp": 1643414695, "sha": "601ea914", "message": "feat(data/nat/mul_ind): generalise rec_on_prime to assume positivity (#11714)\nThis makes the multiplicative induction principles slightly stronger, as the coprimality part can assume the given values are positive.", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": []}, {"oldPath": "src/data/nat/mul_ind.lean", "newPath": "src/data/nat/mul_ind.lean", "changes": []}]}, {"timestamp": 1643388698, "sha": "d58ce5ac", "message": "feat(number_theory/cyclotomic/zeta): add is_cyclotomic_extension.zeta (#11695)\nWe add `is_cyclotomic_extension.zeta n A B`: any primitive `n`-th root of unity in a cyclotomic extension.\nFrom flt-regular.", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/number_theory/cyclotomic/zeta.lean", "changes": [["add", "def", "embeddings_equiv_primitive_roots", ["is_cyclotomic_extension", "zeta"]], ["add", "def", "power_basis", ["is_cyclotomic_extension", "zeta"]], ["add", "theorem", "power_basis_gen_minpoly", ["is_cyclotomic_extension", "zeta"]], ["add", "def", "zeta", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_minpoly", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_primitive_root", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_spec'", ["is_cyclotomic_extension"]], ["add", "theorem", "zeta_spec", ["is_cyclotomic_extension"]]]}]}, {"timestamp": 1643388696, "sha": "02c31460", "message": "feat(analysis/complex): removable singularity theorem (#11686)", "changes": [{"oldPath": null, "newPath": "src/analysis/complex/removable_singularity.lean", "changes": [["add", "theorem", "analytic_at_of_differentiable_on_punctured_nhds_of_continuous_at", ["complex"]], ["add", "theorem", "differentiable_on_compl_singleton_and_continuous_at_iff", ["complex"]], ["add", "theorem", "differentiable_on_dslope", ["complex"]], ["add", "theorem", "differentiable_on_update_lim_insert_of_is_o", ["complex"]], ["add", "theorem", "differentiable_on_update_lim_of_bdd_above", ["complex"]], ["add", "theorem", "differentiable_on_update_lim_of_is_o", ["complex"]], ["add", "theorem", "tendsto_lim_of_differentiable_on_punctured_nhds_of_bounded_under", ["complex"]], ["add", "theorem", "tendsto_lim_of_differentiable_on_punctured_nhds_of_is_o", ["complex"]]]}]}, {"timestamp": 1643388694, "sha": "7e8cb757", "message": "refactor(algebra/linear_ordered_comm_group_with_zero, *): mostly take advantage of the new classes for `linear_ordered_comm_group_with_zero` (#7645)\nThis PR continues the refactor of the `ordered` hierarchy, begun in #7371.\nIn this iteration, I weakened the assumptions of the lemmas in `ordered_group`. The bulk of the changes are in the two files\n* `algebra/ordered_monoid_lemmas`\n* `algebra/ordered_group`\nwhile the remaining files have been edited mostly to accommodate for name/assumption changes.\nI have tried to be careful to maintain the **exact** assumptions of each one of the `norm_num` and `linarith` lemmas. For this reason, some lemmas have a proof that is simply an application of a lemma with weaker assumptions. The end result is that no lemma whose proof involved a call to `norm_num` or `linarith` broke.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "to_covariant_class_left", ["has_mul"]], ["add", "theorem", "to_covariant_class_right", ["has_mul"]]]}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["add", "theorem", "one_le_pow_of_le", ["left"]], ["add", "theorem", "pow_lt_one_iff", ["left"]], ["add", "theorem", "pow_lt_one_of_lt", ["left"]], ["add", "theorem", "pow_le_pow_of_le", []], ["add", "theorem", "one_le_pow_of_le", ["right"]], ["add", "theorem", "pow_le_one_of_le", ["right"]], ["add", "theorem", "pow_lt_one_iff", ["right"]], ["add", "theorem", "pow_lt_one_of_lt", ["right"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}]}, {"timestamp": 1643383161, "sha": "dddf6ebe", "message": "feat(data/fintype/order): More and better instances (#11702)\nIn a fintype, this allows to promote \n* `distrib_lattice` to `complete_distrib_lattice`\n* `boolean_algebra` to `complete_boolean_algebra`\nAlso strengthen\n* `fintype.to_order_bot`\n* `fintype.to_order_top`\n* `fintype.to_bounded_order`\n* `complete_linear_order.to_conditionally_complete_linear_order_bot`", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_sup_distrib_left", ["finset"]], ["add", "theorem", "inf_sup_distrib_right", ["finset"]], ["add", "theorem", "sup_inf_distrib_left", ["finset"]], ["add", "theorem", "sup_inf_distrib_right", ["finset"]]]}, {"oldPath": "src/data/fintype/order.lean", "newPath": "src/data/fintype/order.lean", "changes": [["mod", "def", "to_bounded_order", ["fintype"]], ["mod", "def", "to_order_bot", ["fintype"]], ["mod", "def", "to_order_top", ["fintype"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1643383160, "sha": "6ca08e81", "message": "feat(algebra/ne_zero): add `coe_trans` instance (#11700)\nThis is super-useful for `flt_regular`, meaning we don't have to write all of our lemmata as `ne_zero ((n : ℕ) : R)`.", "changes": []}, {"timestamp": 1643383159, "sha": "de27bfc8", "message": "feat(algebra/big_operators/{basic,multiset}): two `multiset.prod` lemmas (#11693)\nTwo lemmas suggested by Riccardo Brasca on #11572:\n`to_finset_prod_dvd_prod`: `S.to_finset.prod id ∣ S.prod`\n`prod_dvd_prod_of_dvd`: For any `S : multiset α`, if `∀ a ∈ S, g1 a ∣ g2 a` then `S.prod g1 ∣ S.prod g2` (a counterpart to `finset.prod_dvd_prod`)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "to_finset_prod_dvd_prod", ["multiset"]]]}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "prod_dvd_prod_of_dvd", ["multiset"]]]}]}, {"timestamp": 1643383157, "sha": "c50a60de", "message": "feat(analysis/convex/specific_functions): sin is strictly concave (#11688)", "changes": [{"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["add", "theorem", "strict_concave_on_cos_Icc", []], ["add", "theorem", "strict_concave_on_sin_Icc", []]]}]}, {"timestamp": 1643383156, "sha": "92c64c45", "message": "feat(group_theory/nilpotent): add upper_central_series_eq_top_iff_nilpotency_class_le (#11670)\nand the analogue for the lower central series.", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "lower_central_series_eq_bot_iff_nilpotency_class_le", []], ["add", "theorem", "upper_central_series_eq_top_iff_nilpotency_class_le", []]]}]}, {"timestamp": 1643383155, "sha": "7a485b1b", "message": "feat(topology/continuous_function/algebra): `C(α, β)` is a topological group (#11665)\nThis PR proves that `C(α, β)` is a topological group. I had to borrow the fix from #11229 to avoid a diamond.", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "uniform_embedding_equiv_bounded_of_compact", ["continuous_map"]], ["add", "theorem", "uniform_inducing_equiv_bounded_of_compact", ["continuous_map"]]]}]}, {"timestamp": 1643383154, "sha": "113ab32f", "message": "feat(ring_theory/power_series/basic): API about inv (#11617)\nAlso rename protected lemmas\n`mul_inv` to `mul_inv_cancel`\n`inv_mul` to `inv_mul_cancel`", "changes": [{"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "C_inv", ["mv_power_series"]], ["add", "theorem", "X_inv", ["mv_power_series"]], ["add", "theorem", "one_inv", ["mv_power_series"]], ["add", "theorem", "smul_eq_C_mul", ["mv_power_series"]], ["add", "theorem", "smul_inv", ["mv_power_series"]], ["add", "theorem", "zero_inv", ["mv_power_series"]], ["add", "theorem", "constant_coeff_coe", ["polynomial"]], ["add", "theorem", "C_inv", ["power_series"]], ["add", "theorem", "X_inv", ["power_series"]], ["add", "theorem", "one_inv", ["power_series"]], ["add", "theorem", "smul_eq_C_mul", ["power_series"]], ["add", "theorem", "smul_inv", ["power_series"]], ["add", "theorem", "zero_inv", ["power_series"]]]}]}, {"timestamp": 1643383153, "sha": "36dd6a66", "message": "feat(algebra/squarefree): squarefree iff no square irreducible divisors (#11544)", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "irreducible_sq_not_dvd_iff_eq_zero_and_no_irreducibles_or_squarefree", []], ["add", "theorem", "squarefree_iff_prime_sq_not_dvd", ["nat"]], ["add", "theorem", "squarefree_iff_irreducible_sq_not_dvd_of_exists_irreducible", []], ["add", "theorem", "squarefree_iff_irreducible_sq_not_dvd_of_ne_zero", []]]}]}, {"timestamp": 1643383151, "sha": "fb9c5d30", "message": "feat(cyclotomic/basic): diverse roots of unity lemmas (#11473)\nFrom flt-regular.", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "roots_eq_primitive_roots_val", ["polynomial", "cyclotomic"]], ["add", "theorem", "roots_to_finset_eq_primitive_roots", ["polynomial", "cyclotomic"]], ["mod", "theorem", "is_root_cyclotomic", ["polynomial"]], ["mod", "theorem", "is_root_cyclotomic_iff", ["polynomial"]], ["add", "theorem", "is_root_of_unity_of_root_cyclotomic", ["polynomial"]], ["add", "theorem", "roots_cyclotomic_nodup", ["polynomial"]]]}]}, {"timestamp": 1643383150, "sha": "91a1afb4", "message": "feat(algebraic_geometry): The function field is the fraction field of stalks (#11129)", "changes": [{"oldPath": "src/algebraic_geometry/function_field.lean", "newPath": "src/algebraic_geometry/function_field.lean", "changes": [["add", "theorem", "function_field_is_fraction_ring_of_is_affine_open", ["algebraic_geometry"]], ["add", "theorem", "generic_point_eq_bot_of_affine", ["algebraic_geometry"]], ["add", "theorem", "generic_point_eq_of_is_open_immersion", ["algebraic_geometry"]], ["add", "theorem", "prime_ideal_of_generic_point", ["algebraic_geometry", "is_affine_open"]]]}]}, {"timestamp": 1643383148, "sha": "0b6330de", "message": "feat(data/finsupp/interval): Finitely supported functions to a locally finite order are locally finite (#10930)\n... when the codomain itself is locally finite.\nThis allows getting rid of `finsupp.Iic_finset`.", "changes": [{"oldPath": "src/data/finsupp/antidiagonal.lean", "newPath": "src/data/finsupp/antidiagonal.lean", "changes": [["del", "def", "Iic_finset", ["finsupp"]], ["del", "theorem", "coe_Iic_finset", ["finsupp"]], ["del", "theorem", "finite_le_nat", ["finsupp"]], ["del", "theorem", "finite_lt_nat", ["finsupp"]], ["del", "theorem", "mem_Iic_finset", ["finsupp"]]]}, {"oldPath": null, "newPath": "src/data/finsupp/interval.lean", "changes": [["add", "theorem", "card_Icc", ["finsupp"]], ["add", "theorem", "card_Ico", ["finsupp"]], ["add", "theorem", "card_Ioc", ["finsupp"]], ["add", "theorem", "card_Ioo", ["finsupp"]], ["add", "theorem", "mem_range_Icc_apply_iff", ["finsupp"]], ["add", "theorem", "mem_range_singleton_apply_iff", ["finsupp"]], ["add", "def", "range_Icc", ["finsupp"]], ["add", "def", "range_singleton", ["finsupp"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1643376669, "sha": "445be96e", "message": "fix(tactic/squeeze): `squeeze_simp` providing invalid suggestions (#11696)\n`squeeze_simp` was previously permuting the lemmas passed to `simp`, which caused failures in cases where the lemma order mattered. The fix is to ensure that `squeeze_simp` does not change the order of passed lemmas.\nCloses #3097", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "test/squeeze.lean", "newPath": "test/squeeze.lean", "changes": [["add", "def", "a", []], ["add", "def", "b", []], ["add", "def", "c", []], ["add", "def", "f", []], ["add", "theorem", "k", []], ["add", "theorem", "l", []]]}]}, {"timestamp": 1643376668, "sha": "3837abcb", "message": "feat(data/list/*): subperm_singleton_iff (#11680)", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["mod", "theorem", "count_pos", ["list"]], ["add", "theorem", "one_le_count_iff_mem", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "subperm_singleton_iff", ["list"]]]}]}, {"timestamp": 1643376666, "sha": "1e44add0", "message": "feat(order/filter/countable_Inter): review (#11673)\n- drop `_sets` in more names;\n- add `filter.of_countable_Inter` and instances for\n `filter.map`/`filter.comap`;\n- add docs.", "changes": [{"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": [["add", "theorem", "countable_Inter_mem", []], ["del", "theorem", "countable_Inter_mem_sets", []], ["add", "theorem", "countable_sInter_mem", []], ["del", "theorem", "countable_sInter_mem_sets", []], ["add", "theorem", "mem_of_countable_Inter", ["filter"]], ["add", "def", "of_countable_Inter", ["filter"]]]}]}, {"timestamp": 1643376665, "sha": "680733c3", "message": "feat(order/hom/basic): `compl` as a dual order isomorphism (#11630)", "changes": [{"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "compl_antitone", []], ["add", "theorem", "compl_strict_anti", []], ["add", "def", "compl", ["order_iso"]]]}]}, {"timestamp": 1643376664, "sha": "ff241e13", "message": "feat(order/max): Predicate for minimal/maximal elements, typeclass for orders without bottoms (#11618)\nThis defines\n* `is_min`: Predicate for a minimal element\n* `is_max`: Predicate for a maximal element\n* `no_bot_order`: Predicate for an order without bottoms\n* `no_top_order`: Predicate for an order without tops", "changes": [{"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "is_bot_iff_is_min", []], ["add", "theorem", "is_top_iff_is_max", []]]}, {"oldPath": "src/order/max.lean", "newPath": "src/order/max.lean", "changes": [["add", "theorem", "mono", ["is_bot"]], ["del", "theorem", "to_dual", ["is_bot"]], ["add", "theorem", "is_bot_of_dual_iff", []], ["add", "theorem", "is_bot_to_dual_iff", []], ["add", "theorem", "mono", ["is_max"]], ["add", "theorem", "not_lt", ["is_max"]], ["add", "def", "is_max", []], ["add", "theorem", "is_max_iff_forall_not_lt", []], ["add", "theorem", "is_max_of_dual_iff", []], ["add", "theorem", "is_max_to_dual_iff", []], ["add", "theorem", "mono", ["is_min"]], ["add", "theorem", "not_lt", ["is_min"]], ["add", "def", "is_min", []], ["add", "theorem", "is_min_iff_forall_not_lt", []], ["add", "theorem", "is_min_of_dual_iff", []], ["add", "theorem", "is_min_to_dual_iff", []], ["add", "theorem", "mono", ["is_top"]], ["del", "theorem", "to_dual", ["is_top"]], ["mod", "theorem", "unique", ["is_top"]], ["add", "theorem", "is_top_of_dual_iff", []], ["add", "theorem", "is_top_to_dual_iff", []], ["mod", "theorem", "not_is_bot", []], ["add", "theorem", "not_is_max", []], ["add", "theorem", "not_is_max_iff", []], ["add", "theorem", "not_is_min", []], ["add", "theorem", "not_is_min_iff", []], ["mod", "theorem", "not_is_top", []]]}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": []}]}, {"timestamp": 1643376662, "sha": "2fa59776", "message": "feat(category_theory/bicategory/natural_transformation): define oplax natural transformations (#11404)\nThis PR define oplax natural transformations between oplax functors.\nWe give a composition and a category structure on oplax natural transformations.", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/natural_transformation.lean", "changes": [["add", "def", "id", ["category_theory", "oplax_nat_trans"]], ["add", "def", "id", ["category_theory", "oplax_nat_trans", "modification"]], ["add", "def", "vcomp", ["category_theory", "oplax_nat_trans", "modification"]], ["add", "theorem", "whisker_left_naturality", ["category_theory", "oplax_nat_trans", "modification"]], ["add", "theorem", "whisker_right_naturality", ["category_theory", "oplax_nat_trans", "modification"]], ["add", "structure", "modification", ["category_theory", "oplax_nat_trans"]], ["add", "def", "of_components", ["category_theory", "oplax_nat_trans", "modification_iso"]], ["add", "def", "vcomp", ["category_theory", "oplax_nat_trans"]], ["add", "theorem", "whisker_left_naturality_comp", ["category_theory", "oplax_nat_trans"]], ["add", "theorem", "whisker_left_naturality_id", ["category_theory", "oplax_nat_trans"]], ["add", "theorem", "whisker_left_naturality_naturality", ["category_theory", "oplax_nat_trans"]], ["add", "theorem", "whisker_right_naturality_comp", ["category_theory", "oplax_nat_trans"]], ["add", "theorem", "whisker_right_naturality_id", ["category_theory", "oplax_nat_trans"]], ["add", "theorem", "whisker_right_naturality_naturality", ["category_theory", "oplax_nat_trans"]], ["add", "structure", "oplax_nat_trans", ["category_theory"]]]}]}, {"timestamp": 1643376660, "sha": "b9db1696", "message": "chore(order/locally_finite): fill in finset interval API (#11338)\nA bunch of statements about finset intervals, mimicking the set interval API and mostly proved using it. `simp` attributes are chosen as they were for sets. Also some golf.", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Icc_diff_Ico_self", ["finset"]], ["add", "theorem", "Icc_diff_Ioc_self", ["finset"]], ["add", "theorem", "Icc_diff_Ioo_self", ["finset"]], ["add", "theorem", "Icc_diff_both", ["finset"]], ["add", "theorem", "Icc_eq_cons_Ico", ["finset"]], ["add", "theorem", "Icc_eq_cons_Ioc", ["finset"]], ["mod", "theorem", "Icc_erase_left", ["finset"]], ["mod", "theorem", "Icc_erase_right", ["finset"]], ["add", "theorem", "Icc_ssubset_Icc_left", ["finset"]], ["add", "theorem", "Icc_ssubset_Icc_right", ["finset"]], ["add", "theorem", "Icc_subset_Icc", ["finset"]], ["add", "theorem", "Icc_subset_Icc_iff", ["finset"]], ["add", "theorem", "Icc_subset_Icc_left", ["finset"]], ["add", "theorem", "Icc_subset_Icc_right", ["finset"]], ["add", "theorem", "Icc_subset_Ici_self", ["finset"]], ["add", "theorem", "Icc_subset_Ico_iff", ["finset"]], ["add", "theorem", "Icc_subset_Ico_right", ["finset"]], ["add", "theorem", "Icc_subset_Iic_self", ["finset"]], ["add", "theorem", "Icc_subset_Ioc_iff", ["finset"]], ["add", "theorem", "Icc_subset_Ioo_iff", ["finset"]], ["add", "theorem", "Ici_eq_cons_Ioi", ["finset"]], ["add", "theorem", "Ici_erase", ["finset"]], ["add", "theorem", "Ico_diff_Ioo_self", ["finset"]], ["add", "theorem", "Ico_erase_left", ["finset"]], ["mod", "theorem", "Ico_filter_le_of_right_le", ["finset"]], ["mod", "theorem", "Ico_filter_lt_of_le_left", ["finset"]], ["mod", "theorem", "Ico_filter_lt_of_le_right", ["finset"]], ["mod", "theorem", "Ico_filter_lt_of_right_le", ["finset"]], ["mod", "theorem", "Ico_insert_right", ["finset"]], ["mod", "theorem", "Ico_self", ["finset"]], ["add", "theorem", "Ico_subset_Icc_self", ["finset"]], ["add", "theorem", "Ico_subset_Ici_self", ["finset"]], ["add", "theorem", "Ico_subset_Ico", ["finset"]], ["add", "theorem", "Ico_subset_Ico_left", ["finset"]], ["add", "theorem", "Ico_subset_Ico_right", ["finset"]], ["add", "theorem", "Ico_subset_Iic_self", ["finset"]], ["add", "theorem", "Ico_subset_Iio_self", ["finset"]], ["add", "theorem", "Ico_subset_Ioo_left", ["finset"]], ["add", "theorem", "Iic_eq_cons_Iio", ["finset"]], ["add", "theorem", "Iic_erase", ["finset"]], ["add", "theorem", "Iio_insert", ["finset"]], ["add", "theorem", "Iio_subset_Iic_self", ["finset"]], ["add", "theorem", "Ioc_diff_Ioo_self", ["finset"]], ["add", "theorem", "Ioc_erase_right", ["finset"]], ["add", "theorem", "Ioc_insert_left", ["finset"]], ["mod", "theorem", "Ioc_self", ["finset"]], ["add", "theorem", "Ioc_subset_Icc_self", ["finset"]], ["add", "theorem", "Ioc_subset_Ici_self", ["finset"]], ["add", "theorem", "Ioc_subset_Iic_self", ["finset"]], ["add", "theorem", "Ioc_subset_Ioc", ["finset"]], ["add", "theorem", "Ioc_subset_Ioc_left", ["finset"]], ["add", "theorem", "Ioc_subset_Ioc_right", ["finset"]], ["add", "theorem", "Ioc_subset_Ioi_self", ["finset"]], ["add", "theorem", "Ioc_subset_Ioo_right", ["finset"]], ["add", "theorem", "Ioi_insert", ["finset"]], ["add", "theorem", "Ioi_subset_Ici_self", ["finset"]], ["mod", "theorem", "Ioo_insert_left", ["finset"]], ["add", "theorem", "Ioo_insert_right", ["finset"]], ["mod", "theorem", "Ioo_self", ["finset"]], ["add", "theorem", "Ioo_subset_Icc_self", ["finset"]], ["add", "theorem", "Ioo_subset_Ici_self", ["finset"]], ["add", "theorem", "Ioo_subset_Ico_self", ["finset"]], ["add", "theorem", "Ioo_subset_Iic_self", ["finset"]], ["add", "theorem", "Ioo_subset_Iio_self", ["finset"]], ["add", "theorem", "Ioo_subset_Ioc_self", ["finset"]], ["add", "theorem", "Ioo_subset_Ioi_self", ["finset"]], ["add", "theorem", "Ioo_subset_Ioo", ["finset"]], ["add", "theorem", "Ioo_subset_Ioo_left", ["finset"]], ["add", "theorem", "Ioo_subset_Ioo_right", ["finset"]], ["add", "theorem", "card_Ioo_eq_card_Ioc_sub_one", ["finset"]], ["mod", "theorem", "filter_ge_eq_Iic", ["finset"]], ["mod", "theorem", "filter_gt_eq_Iio", ["finset"]], ["mod", "theorem", "filter_le_eq_Ici", ["finset"]], ["mod", "theorem", "filter_le_le_eq_Icc", ["finset"]], ["mod", "theorem", "filter_le_lt_eq_Ico", ["finset"]], ["mod", "theorem", "filter_lt_eq_Ioi", ["finset"]], ["mod", "theorem", "filter_lt_le_eq_Ioc", ["finset"]], ["mod", "theorem", "filter_lt_lt_eq_Ioo", ["finset"]], ["mod", "theorem", "image_add_right_Icc", ["finset"]], ["mod", "theorem", "image_add_right_Ico", ["finset"]], ["mod", "theorem", "image_add_right_Ioc", ["finset"]], ["mod", "theorem", "image_add_right_Ioo", ["finset"]], ["mod", "theorem", "left_mem_Icc", ["finset"]], ["mod", "theorem", "left_mem_Ico", ["finset"]], ["mod", "theorem", "right_mem_Icc", ["finset"]], ["mod", "theorem", "right_mem_Ioc", ["finset"]], ["mod", "def", "fintype_of_mem_bounds", ["set"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["del", "theorem", "Ico_subset_Ico", ["finset"]], ["mod", "theorem", "coe_Icc", ["finset"]], ["mod", "theorem", "coe_Ico", ["finset"]], ["mod", "theorem", "coe_Ioc", ["finset"]], ["mod", "theorem", "coe_Ioo", ["finset"]], ["mod", "theorem", "mem_Icc", ["finset"]], ["mod", "theorem", "mem_Ici", ["finset"]], ["mod", "theorem", "mem_Ico", ["finset"]], ["mod", "theorem", "mem_Iic", ["finset"]], ["mod", "theorem", "mem_Iio", ["finset"]], ["mod", "theorem", "mem_Ioc", ["finset"]], ["mod", "theorem", "mem_Ioi", ["finset"]], ["mod", "theorem", "mem_Ioo", ["finset"]]]}]}, {"timestamp": 1643375019, "sha": "924aab15", "message": "feat(ring_theory/polynomial/eisenstein): add miscellaneous results about Eisenstein polynomials (#11697)\nMiscellaneous results about Eisenstein polynomials\nFrom flt-regular.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/polynomial/eisenstein.lean", "changes": [["add", "theorem", "coeff_mem", ["polynomial", "is_eisenstein_at"]], ["add", "theorem", "irreducible", ["polynomial", "is_eisenstein_at"]], ["add", "theorem", "is_weakly_eisenstein_at", ["polynomial", "is_eisenstein_at"]], ["add", "structure", "is_eisenstein_at", ["polynomial"]], ["add", "theorem", "exists_mem_adjoin_mul_eq_pow_nat_degree", ["polynomial", "is_weakly_eisenstein_at"]], ["add", "theorem", "exists_mem_adjoin_mul_eq_pow_nat_degree_le", ["polynomial", "is_weakly_eisenstein_at"]], ["add", "theorem", "map", ["polynomial", "is_weakly_eisenstein_at"]], ["add", "theorem", "pow_nat_degree_le_of_aeval_zero_of_monic_mem_map", ["polynomial", "is_weakly_eisenstein_at"]], ["add", "theorem", "pow_nat_degree_le_of_root_of_monic_mem", ["polynomial", "is_weakly_eisenstein_at"]], ["add", "structure", "is_weakly_eisenstein_at", ["polynomial"]]]}]}, {"timestamp": 1643368282, "sha": "e290b29c", "message": "feat(data/quot): add subsingleton instances (#11668)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}]}, {"timestamp": 1643359089, "sha": "bf347f9c", "message": "feat(algebraic_geometry): Fiber products of schemes (#10605)", "changes": [{"oldPath": "src/algebraic_geometry/gluing.lean", "newPath": "src/algebraic_geometry/gluing.lean", "changes": [["add", "theorem", "hom_ext", ["algebraic_geometry", "Scheme", "open_cover"]]]}, {"oldPath": "src/algebraic_geometry/pullbacks.lean", "newPath": "src/algebraic_geometry/pullbacks.lean", "changes": [["add", "theorem", "affine_affine_has_pullback", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "glued_is_limit", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "has_pullback_of_cover", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "lift_comp_ι", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "pullback_fst_ι_to_V", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "pullback_fst_ι_to_V_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "pullback_fst_ι_to_V_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "pullback_p1_iso", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "pullback_p1_iso_hom_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "pullback_p1_iso_hom_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "pullback_p1_iso_hom_ι", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "pullback_p1_iso_inv_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "pullback_p1_iso_inv_snd", ["algebraic_geometry", "Scheme", "pullback"]]]}]}, {"timestamp": 1643354767, "sha": "67dcdef2", "message": "feat(data/mv_polynomial/derivation): derivations of `mv_polynomial`s (#9145)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/mv_polynomial/derivation.lean", "changes": [["add", "theorem", "derivation_C", ["mv_polynomial"]], ["add", "theorem", "derivation_C_mul", ["mv_polynomial"]], ["add", "theorem", "derivation_eq_of_forall_mem_vars", ["mv_polynomial"]], ["add", "theorem", "derivation_eq_on_supported", ["mv_polynomial"]], ["add", "theorem", "derivation_eq_zero_of_forall_mem_vars", ["mv_polynomial"]], ["add", "theorem", "derivation_ext", ["mv_polynomial"]], ["add", "theorem", "leibniz_iff_X", ["mv_polynomial"]], ["add", "def", "mk_derivation", ["mv_polynomial"]], ["add", "theorem", "mk_derivation_X", ["mv_polynomial"]], ["add", "def", "mk_derivation_equiv", ["mv_polynomial"]], ["add", "theorem", "mk_derivation_monomial", ["mv_polynomial"]], ["add", "def", "mk_derivationₗ", ["mv_polynomial"]], ["add", "theorem", "mk_derivationₗ_C", ["mv_polynomial"]], ["add", "theorem", "mk_derivationₗ_X", ["mv_polynomial"]], ["add", "theorem", "mk_derivationₗ_monomial", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": [["mod", "def", "pderiv", ["mv_polynomial"]], ["mod", "theorem", "pderiv_C", ["mv_polynomial"]], ["mod", "theorem", "pderiv_C_mul", ["mv_polynomial"]], ["mod", "theorem", "pderiv_X", ["mv_polynomial"]], ["add", "theorem", "pderiv_X_of_ne", ["mv_polynomial"]], ["mod", "theorem", "pderiv_X_self", ["mv_polynomial"]], ["mod", "theorem", "pderiv_monomial", ["mv_polynomial"]], ["del", "theorem", "pderiv_monomial_mul", ["mv_polynomial"]], ["del", "theorem", "pderiv_nat_cast", ["mv_polynomial"]], ["del", "theorem", "pderiv_pow", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "theorem", "map_sum", ["derivation"]]]}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}]}, {"timestamp": 1643353116, "sha": "6687cf15", "message": "feat(group_theory/sylow): `fintype (sylow p H)` from `fintype (sylow p G)` (#11664)\nIf the number of Sylow `p`-subgroups of `G` is finite, then the number of Sylow `p`-subgroups of `H` is finite.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "ker_is_p_group_of_injective", ["is_p_group"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "exists_comap_eq_of_injective", ["sylow"]], ["add", "theorem", "exists_comap_eq_of_ker_is_p_group", ["sylow"]], ["add", "theorem", "exists_comap_subtype_eq", ["sylow"]]]}]}, {"timestamp": 1643339252, "sha": "f5d63f9f", "message": "feat(topology/category/Compactum): forget creates limits (#11690)\nWill likely be used in LTE.", "changes": [{"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": [["add", "def", "Compactum_to_CompHaus_comp_forget", []]]}]}, {"timestamp": 1643330424, "sha": "24cfb883", "message": "chore(set_theory/ordinal_arithmetic): Golf some instances of `lt_irrefl _ h` down to `h.false` (#11699)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1643330423, "sha": "bac0f55e", "message": "chore(order/conditionally_complete_lattice): move code to a new file (#11698)\nThis is the first step towards adding a `complete_lattice` instance for `Icc`/`interval`.", "changes": [{"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/complete_lattice_intervals.lean", "changes": [["add", "theorem", "Inf_within_of_ord_connected", []], ["add", "theorem", "Sup_within_of_ord_connected", []], ["add", "theorem", "subset_Inf_def", []], ["add", "theorem", "subset_Inf_of_within", []], ["add", "theorem", "subset_Sup_def", []], ["add", "theorem", "subset_Sup_of_within", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "Inf_within_of_ord_connected", []], ["del", "theorem", "Sup_within_of_ord_connected", []], ["del", "theorem", "subset_Inf_def", []], ["del", "theorem", "subset_Inf_of_within", []], ["del", "theorem", "subset_Sup_def", []], ["del", "theorem", "subset_Sup_of_within", []]]}, {"oldPath": "src/topology/algebra/ordered/intermediate_value.lean", "newPath": "src/topology/algebra/ordered/intermediate_value.lean", "changes": []}]}, {"timestamp": 1643324741, "sha": "21cea47a", "message": "feat(analysis/special_functions/log): log of natural power (#11685)\nThe rpow versions are already present, but the natural/integer versions can also be very helpful (eg for squares).", "changes": [{"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log.lean", "changes": [["add", "theorem", "log_pow", ["real"]], ["add", "theorem", "log_zpow", ["real"]]]}]}, {"timestamp": 1643324740, "sha": "79e6cb09", "message": "feat(order/succ_pred/relation): `succ`/`pred` inductions on relations (#11518)\n* Rename file `order.succ_pred` -> `order.succ_pred.basic`\n* Generalize induction principles `succ.rec` and `pred.rec`, make the argument order more \"induction-like\" and add the attribute `@[elab_as_eliminator]`\n* Proof properties about `refl_trans_gen` and `trans_gen` in a `is_succ_archimedean` order.\n* Proof some monotonicity properties of closure operations.", "changes": [{"oldPath": "src/data/int/succ_pred.lean", "newPath": "src/data/int/succ_pred.lean", "changes": []}, {"oldPath": "src/data/nat/succ_pred.lean", "newPath": "src/data/nat/succ_pred.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "mono", ["relation", "refl_gen"]], ["mod", "theorem", "to_refl_trans_gen", ["relation", "refl_gen"]], ["add", "theorem", "swap", ["relation", "refl_trans_gen"]], ["add", "theorem", "refl_trans_gen_swap", ["relation"]], ["add", "theorem", "mono", ["relation", "trans_gen"]], ["add", "theorem", "swap", ["relation", "trans_gen"]], ["add", "theorem", "trans_gen_swap", ["relation"]]]}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred/basic.lean", "changes": [["mod", "theorem", "rec", ["pred"]], ["mod", "theorem", "rec", ["succ"]]]}, {"oldPath": null, "newPath": "src/order/succ_pred/relation.lean", "changes": [["add", "theorem", "refl_trans_gen_of_pred", []], ["add", "theorem", "refl_trans_gen_of_pred_of_ge", []], ["add", "theorem", "refl_trans_gen_of_pred_of_le", []], ["add", "theorem", "refl_trans_gen_of_succ", []], ["add", "theorem", "refl_trans_gen_of_succ_of_ge", []], ["add", "theorem", "refl_trans_gen_of_succ_of_le", []], ["add", "theorem", "trans_gen_of_pred_of_gt", []], ["add", "theorem", "trans_gen_of_pred_of_lt", []], ["add", "theorem", "trans_gen_of_pred_of_ne", []], ["add", "theorem", "trans_gen_of_pred_of_reflexive", []], ["add", "theorem", "trans_gen_of_succ_of_gt", []], ["add", "theorem", "trans_gen_of_succ_of_lt", []], ["add", "theorem", "trans_gen_of_succ_of_ne", []], ["add", "theorem", "trans_gen_of_succ_of_reflexive", []]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1643324738, "sha": "0a721ccc", "message": "feat(data/nat): a predicate for prime powers (#11313)\nAdds a predicate for prime powers, in preparation for defining the von Mangoldt function.\ncc @stuart-presnell since you might be needing this material soon, and @jcommelin if you have thoughts about generalising this to rings/UFDs?", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "of_pow_associated_of_prime'", ["associated"]], ["add", "theorem", "of_pow_associated_of_prime", ["associated"]]]}, {"oldPath": null, "newPath": "src/algebra/is_prime_pow.lean", "changes": [["add", "theorem", "eq_of_prime_pow_eq'", []], ["add", "theorem", "eq_of_prime_pow_eq", []], ["add", "theorem", "dvd", ["is_prime_pow"]], ["add", "theorem", "min_fac_pow_factorization_eq", ["is_prime_pow"]], ["add", "theorem", "ne_one", ["is_prime_pow"]], ["add", "theorem", "ne_zero", ["is_prime_pow"]], ["add", "theorem", "one_lt", ["is_prime_pow"]], ["add", "theorem", "pos", ["is_prime_pow"]], ["add", "theorem", "pow", ["is_prime_pow"]], ["add", "theorem", "two_le", ["is_prime_pow"]], ["add", "def", "is_prime_pow", []], ["add", "theorem", "is_prime_pow_def", []], ["add", "theorem", "is_prime_pow_iff_min_fac_pow_factorization_eq", []], ["add", "theorem", "is_prime_pow_iff_pow_succ", []], ["add", "theorem", "is_prime_pow_iff_unique_prime_dvd", []], ["add", "theorem", "is_prime_pow_nat_iff", []], ["add", "theorem", "is_prime_pow_nat_iff_bounded", []], ["add", "theorem", "is_prime_pow_of_min_fac_pow_factorization_eq", []], ["add", "theorem", "not_is_prime_pow_one", []], ["add", "theorem", "not_is_prime_pow_zero", []], ["add", "theorem", "is_prime_pow", ["prime"]]]}, {"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}]}, {"timestamp": 1643321022, "sha": "74584760", "message": "chore(set_theory/ordinal_arithmetic): golf proof into term mode (#11691)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1643314592, "sha": "02c08d9b", "message": "doc(polynomial/eval): why map_ring_hom can't replace map (#11537)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}]}, {"timestamp": 1643277674, "sha": "05e1845c", "message": "feat(archive/100-theorems-list): add proof of the solution of the cubic (#11635)\nGives solution to the cubic equation, based on the cardano's formula. The base field should have cube root of unity and characteristic neither 2 nor 3.", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/37_solution_of_cubic.lean", "changes": [["add", "theorem", "cube_root_of_unity_sum", []], ["add", "theorem", "cubic_basic_eq_zero_iff", []], ["add", "theorem", "cubic_eq_zero_iff", []], ["add", "theorem", "cubic_eq_zero_iff_of_p_eq_zero", []], ["add", "theorem", "cubic_monic_eq_zero_iff", []]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1643261447, "sha": "08445971", "message": "feat(set_theory/ordinal_arithmetic): Update header (#11681)\nAdded definitions from my previous PRs, and made myself an author.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1643247611, "sha": "a6ace8c1", "message": "feat(set_theory/ordinal_arithmetic): Proved `sup_eq_lsub_iff_lt_sup` (#11660)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "bsup_eq_blsub", ["ordinal"]], ["add", "theorem", "bsup_eq_blsub_iff_lt_bsup", ["ordinal"]], ["add", "theorem", "bsup_eq_blsub_iff_succ", ["ordinal"]], ["del", "theorem", "sup_eq_lsub", ["ordinal"]], ["add", "theorem", "sup_eq_lsub_iff_lt_sup", ["ordinal"]], ["add", "theorem", "sup_eq_lsub_iff_succ", ["ordinal"]]]}]}, {"timestamp": 1643240118, "sha": "92ee748e", "message": "chore(analysis/complex/cauchy_integral): use `dslope` to golf a proof (#11675)", "changes": [{"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}]}, {"timestamp": 1643240116, "sha": "a1e1ffd1", "message": "feat(order/filter): +1 version of `mem_inf_principal` (#11674)", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "disjoint_assoc", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "mem_inf_principal'", ["filter"]]]}]}, {"timestamp": 1643240115, "sha": "52e9fd52", "message": "chore(*): don't use tactic internal lemmas in proofs (#11641)\nSome lemmas that are intended as internals to a tactic get picked up by library search and end up in proofs.\nWe replace a few of these tactic lemma uses with actual library lemmas which should be more maintainable, de-coupling tactic internals from the actual library.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "test/induction.lean", "newPath": "test/induction.lean", "changes": []}]}, {"timestamp": 1643237131, "sha": "577e3a22", "message": "chore(topology/algebra/uniform_group): Remove newline after docstring (#11671)\nYael pointed out that #11662 added an erroneous newline after a docstring. This PR removes that newline.", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1643230377, "sha": "946454a8", "message": "feat(data/nat/factorization): various theorems on factorization and division (#11663)", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "div_factorization_eq_tsub_of_dvd", ["nat"]], ["add", "theorem", "dvd_iff_div_factorization_eq_tsub", ["nat"]], ["add", "theorem", "dvd_iff_prime_pow_dvd_dvd", ["nat"]], ["add", "theorem", "exists_factorization_lt_of_lt", ["nat"]], ["add", "theorem", "factorization_eq_zero_of_non_prime", ["nat"]], ["add", "theorem", "pow_factorization_dvd", ["nat"]], ["add", "theorem", "prime_pow_dvd_iff_le_factorization", ["nat"]]]}]}, {"timestamp": 1643228094, "sha": "97e01cda", "message": "feat(group_theory/free_abelian_group_finsupp): various equiv.of_free_*_group lemmas (#11469)\nNamely `equiv.of_free_abelian_group_linear_equiv`,\n`equiv.of_free_abelian_group_equiv` and `equiv.of_free_group_equiv`", "changes": [{"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": [["add", "def", "of_free_abelian_group_equiv", ["free_abelian_group", "equiv"]], ["add", "def", "of_free_abelian_group_linear_equiv", ["free_abelian_group", "equiv"]], ["add", "def", "of_free_group_equiv", ["free_abelian_group", "equiv"]], ["add", "def", "of_is_free_group_equiv", ["free_abelian_group", "equiv"]]]}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}]}, {"timestamp": 1643217048, "sha": "8fbc009a", "message": "feat(data/{dfinsupp,finsupp}/basic): `fun_like` instances for `Π₀ i, α i` and `ι →₀ α` (#11667)\nThis provides the `fun_like` instances for `finsupp` and `dfinsupp` and deprecates the lemmas that are now provided by the `fun_like` API.", "changes": [{"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["dfinsupp"]], ["mod", "theorem", "ext", ["dfinsupp"]], ["mod", "theorem", "ext_iff", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_fn_inj", ["finsupp"]], ["mod", "theorem", "coe_fn_injective", ["finsupp"]], ["mod", "theorem", "congr_fun", ["finsupp"]], ["mod", "theorem", "ext", ["finsupp"]], ["mod", "theorem", "ext_iff", ["finsupp"]]]}]}, {"timestamp": 1643217046, "sha": "c447a31c", "message": "feat(algebraic_geometry): Stalk is localization of affine open. (#11640)", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["add", "theorem", "CommRing_iso_to_ring_equiv_symm_to_ring_hom", ["category_theory", "iso"]], ["add", "theorem", "CommRing_iso_to_ring_equiv_to_ring_hom", ["category_theory", "iso"]]]}, {"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["add", "theorem", "from_Spec_prime_ideal_of", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "is_localization_stalk", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "is_localization_stalk_aux", ["algebraic_geometry", "is_affine_open"]], ["add", "def", "prime_ideal_of", ["algebraic_geometry", "is_affine_open"]]]}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "theorem", "app_eq", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "id_app", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "id_coe_base", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "id_val_base", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "inv_val_c_app", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": [["add", "theorem", "is_integral_of_is_affine_is_domain", ["algebraic_geometry"]], ["add", "theorem", "is_reduced_of_is_affine_is_reduced", ["algebraic_geometry"]], ["add", "theorem", "reduce_to_affine_nbhd", ["algebraic_geometry"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_fraction_ring_of_is_domain_of_is_localization", ["is_fraction_ring"]], ["add", "theorem", "is_fraction_ring_of_is_localization", ["is_fraction_ring"]], ["add", "theorem", "nontrivial", ["is_fraction_ring"]], ["add", "theorem", "map_non_zero_divisors_le", ["is_localization"]], ["add", "theorem", "mk'_eq_zero_iff", ["is_localization"]], ["add", "theorem", "non_zero_divisors_le_comap", ["is_localization"]]]}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "theorem", "adjunction_counit_app_self", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "stalk_open_algebra_map", ["Top", "presheaf"]]]}]}, {"timestamp": 1643210563, "sha": "b8fcac51", "message": "feat(data/nat/basic): three small `dvd_iff...` lemmas (#11669)\nThree biconditionals for proving `d ∣ n`", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "dvd_iff_div_mul_eq", ["nat"]], ["add", "theorem", "dvd_iff_dvd_dvd", ["nat"]], ["add", "theorem", "dvd_iff_le_div_mul", ["nat"]]]}]}, {"timestamp": 1643203801, "sha": "c5a8a818", "message": "refactor(topology/algebra/uniform_group): Use `to_additive`. (#11662)\nThis PR refactors `topology/algebra/uniform_group` to use `to_additive`.", "changes": [{"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["del", "theorem", "uniform_continuous_of_continuous_at_zero", ["add_monoid_hom"]], ["del", "theorem", "add", ["cauchy_seq"]], ["add", "theorem", "mul", ["cauchy_seq"]], ["mod", "theorem", "group_separation_rel", []], ["add", "theorem", "uniform_continuous_of_continuous_at_one", ["monoid_hom"]], ["add", "theorem", "tendsto_div_comap_self", []], ["del", "theorem", "tendsto_sub_comap_self", []], ["del", "theorem", "to_uniform_space_eq", []], ["del", "theorem", "separated_iff_zero_closed", ["topological_add_group"]], ["del", "theorem", "separated_of_zero_sep", ["topological_add_group"]], ["del", "theorem", "topological_add_group_is_uniform", []], ["add", "theorem", "separated_iff_one_closed", ["topological_group"]], ["add", "theorem", "separated_of_one_sep", ["topological_group"]], ["add", "theorem", "topological_group_is_uniform", []], ["del", "theorem", "mk'", ["uniform_add_group"]], ["del", "theorem", "add", ["uniform_continuous"]], ["add", "theorem", "div", ["uniform_continuous"]], ["add", "theorem", "inv", ["uniform_continuous"]], ["add", "theorem", "mul", ["uniform_continuous"]], ["del", "theorem", "neg", ["uniform_continuous"]], ["del", "theorem", "sub", ["uniform_continuous"]], ["del", "theorem", "uniform_continuous_add", []], ["add", "theorem", "uniform_continuous_div", []], ["add", "theorem", "uniform_continuous_inv", []], ["add", "theorem", "uniform_continuous_monoid_hom_of_continuous", []], ["add", "theorem", "uniform_continuous_mul", []], ["del", "theorem", "uniform_continuous_neg", []], ["del", "theorem", "uniform_continuous_of_continuous", []], ["add", "theorem", "uniform_continuous_of_tendsto_one", []], ["del", "theorem", "uniform_continuous_of_tendsto_zero", []], ["del", "theorem", "uniform_continuous_sub", []], ["del", "theorem", "uniform_embedding_translate", []], ["add", "theorem", "uniform_embedding_translate_mul", []], ["add", "theorem", "mk'", ["uniform_group"]], ["add", "theorem", "to_uniform_space_eq", ["uniform_group"]], ["add", "theorem", "uniformity_eq_comap_nhds_one'", []], ["add", "theorem", "uniformity_eq_comap_nhds_one", []], ["del", "theorem", "uniformity_eq_comap_nhds_zero'", []], ["del", "theorem", "uniformity_eq_comap_nhds_zero", []], ["del", "theorem", "uniformity_translate", []], ["add", "theorem", "uniformity_translate_mul", []]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1643203800, "sha": "5472f0a7", "message": "feat(group_theory/subgroup/basic): add lemmas related to map, comap, normalizer (#11637)\nwhich are useful when `H < K < G` and one needs to move from `subgroup\nG` to `subgroup K`", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "comap_subtype", ["is_p_group"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "comap_normalizer_eq_of_injective_of_le_range", ["subgroup"]], ["add", "theorem", "comap_subtype_normalizer_eq", ["subgroup"]], ["add", "theorem", "comap_subtype_self_eq_top", ["subgroup"]]]}]}, {"timestamp": 1643203799, "sha": "2b257230", "message": "feat(group_theory/sylow): add characteristic_of_normal (#11636)\nA normal sylow subgroup is characteristic.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "characteristic_of_normal", ["sylow"]], ["add", "theorem", "smul_eq_of_normal", ["sylow"]], ["add", "theorem", "subsingleton_of_normal", ["sylow"]]]}]}, {"timestamp": 1643203798, "sha": "1a72f887", "message": "feat(analysis/inner_product_space/basic): isometries and orthonormal families (#11631)\nAdd various lemmas and definitions about the action of isometries on\northonormal families of vectors. An isometry preserves the property\nof being orthonormal; a linear map sending an orthonormal basis to an\northonormal family is a linear isometry, and a linear equiv sending an\northonormal basis to an orthonormal family is a linear isometry equiv.\nA definition `orthonormal.equiv` is provided that uses `basis.equiv`\nto provide a linear isometry equiv mapping a given orthonormal basis\nto another given orthonormal basis, and lemmas are provided analogous\nto those for `basis.equiv` (`orthonormal.map_equiv` isn't a `simp`\nlemma because `simp` can prove it).", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "coe_isometry_of_orthonormal", ["linear_equiv"]], ["add", "def", "isometry_of_orthonormal", ["linear_equiv"]], ["add", "theorem", "isometry_of_orthonormal_to_linear_equiv", ["linear_equiv"]], ["add", "theorem", "coe_isometry_of_orthonormal", ["linear_map"]], ["add", "def", "isometry_of_orthonormal", ["linear_map"]], ["add", "theorem", "isometry_of_orthonormal_to_linear_map", ["linear_map"]], ["add", "theorem", "comp_linear_isometry", ["orthonormal"]], ["add", "theorem", "comp_linear_isometry_equiv", ["orthonormal"]], ["add", "def", "equiv", ["orthonormal"]], ["add", "theorem", "equiv_apply", ["orthonormal"]], ["add", "theorem", "equiv_refl", ["orthonormal"]], ["add", "theorem", "equiv_symm", ["orthonormal"]], ["add", "theorem", "equiv_to_linear_equiv", ["orthonormal"]], ["add", "theorem", "equiv_trans", ["orthonormal"]], ["add", "theorem", "map_equiv", ["orthonormal"]]]}]}, {"timestamp": 1643203797, "sha": "631f3394", "message": "feat(measure_theory/measure/haar_lebesgue): a density point for closed balls is a density point for rescalings of arbitrary sets (#11620)\nConsider a point `x` in a finite-dimensional real vector space with a Haar measure, at which a set `s` has density one, with respect to closed balls (i.e., a Lebesgue density point of `s`). Then `s` has also density one at `x` with respect to any measurable set `t`: the proportion of points in `s` belonging to a rescaled copy `{x} + r • t` of `t` tends to one as `r` tends to zero. In particular, `s ∩ ({x} + r • t)` is nonempty for small enough `r`.", "changes": [{"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "theorem", "add_haar_ball_mul", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_ball_mul_of_pos", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_ball_mul", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_ball_mul_of_pos", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_singleton_add_smul_div_singleton_add_smul", ["measure_theory", "measure"]], ["add", "theorem", "eventually_nonempty_inter_smul_of_density_one", ["measure_theory", "measure"]], ["add", "theorem", "tendsto_add_haar_inter_smul_one_of_density_one", ["measure_theory", "measure"]], ["add", "theorem", "tendsto_add_haar_inter_smul_one_of_density_one_aux", ["measure_theory", "measure"]], ["add", "theorem", "tendsto_add_haar_inter_smul_zero_of_density_zero", ["measure_theory", "measure"]], ["add", "theorem", "tendsto_add_haar_inter_smul_zero_of_density_zero_aux1", ["measure_theory", "measure"]], ["add", "theorem", "tendsto_add_haar_inter_smul_zero_of_density_zero_aux2", ["measure_theory", "measure"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "Union_inter_closed_ball_nat", ["metric"]]]}]}, {"timestamp": 1643203794, "sha": "590b5eb4", "message": "feat(analysis/seminorm): The norm as a seminorm, balanced and absorbent lemmas (#11487)\nThis\n* defines `norm_seminorm`, the norm as a seminorm. This is useful to translate seminorm lemmas to norm lemmas\n* proves many lemmas about `balanced`, `absorbs`, `absorbent`\n* generalizes many lemmas about the aforementioned predicates. In particular, `one_le_gauge_of_not_mem` now takes `(star_convex ℝ 0 s) (absorbs ℝ s {x})` instead of `(convex ℝ s) ((0 : E) ∈ s) (is_open s)`. The new `star_convex` lemmas justify that it's a generalization.\n* proves `star_convex_zero_iff`\n* proves `ne_zero_of_norm_ne_zero` and friends\n* makes `x` implicit in `convex.star_convex`\n* renames `balanced.univ` to `balanced_univ`", "changes": [{"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": [["add", "theorem", "smul_inv₀", []]]}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["add", "theorem", "ne_zero_of_mem_circle", []], ["del", "theorem", "nonzero_of_mem_circle", []]]}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": [["add", "theorem", "star_convex", ["convex"]], ["add", "theorem", "star_convex_zero_iff", []]]}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "ne_zero_of_mem_sphere", []], ["add", "theorem", "ne_zero_of_mem_unit_sphere", []], ["add", "theorem", "ne_zero_of_nnnorm_ne_zero", []], ["add", "theorem", "ne_zero_of_norm_ne_zero", []], ["del", "theorem", "ne_zero_of_norm_pos", []], ["add", "theorem", "nnnorm_ne_zero_iff", []], ["del", "theorem", "nonzero_of_mem_sphere", []], ["del", "theorem", "nonzero_of_mem_unit_sphere", []], ["add", "theorem", "norm_ne_zero_iff", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "ne_neg_of_mem_sphere", []]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "absorbs", ["absorbent"]], ["add", "theorem", "zero_mem", ["absorbent"]], ["add", "theorem", "absorbent_ball", []], ["add", "theorem", "absorbent_ball_zero", []], ["add", "theorem", "absorbent_univ", []], ["add", "theorem", "inter", ["absorbs"]], ["add", "theorem", "mono", ["absorbs"]], ["add", "theorem", "mono_left", ["absorbs"]], ["add", "theorem", "mono_right", ["absorbs"]], ["add", "theorem", "union", ["absorbs"]], ["add", "theorem", "absorbs_inter", []], ["add", "theorem", "absorbs_union", []], ["add", "theorem", "absorbs_zero_iff", []], ["add", "theorem", "smul_mono", ["balanced"]], ["add", "theorem", "star_convex", ["balanced"]], ["del", "theorem", "univ", ["balanced"]], ["add", "theorem", "balanced_ball_zero", []], ["add", "theorem", "balanced_univ", []], ["mod", "theorem", "balanced_zero_union_interior", []], ["add", "theorem", "ball_norm_seminorm", []], ["add", "theorem", "coe_norm_seminorm", []], ["add", "theorem", "gauge_le", ["convex"]], ["del", "theorem", "gauge_le_one", ["convex"]], ["mod", "theorem", "exists_lt_of_gauge_lt", []], ["add", "theorem", "gauge_ball", []], ["add", "theorem", "gauge_empty", []], ["add", "theorem", "gauge_le_eq", []], ["mod", "theorem", "gauge_le_of_mem", []], ["del", "theorem", "gauge_le_one_eq'", []], ["del", "theorem", "gauge_le_one_eq", []], ["add", "theorem", "gauge_lt_eq'", []], ["add", "theorem", "gauge_lt_eq", []], ["add", "theorem", "gauge_lt_of_mem_smul", []], ["del", "theorem", "gauge_lt_one_eq'", []], ["del", "theorem", "gauge_lt_one_eq", []], ["mod", "theorem", "gauge_lt_one_eq_self_of_open", []], ["mod", "theorem", "gauge_lt_one_of_mem_of_open", []], ["add", "theorem", "gauge_mono", []], ["add", "theorem", "gauge_of_subset_zero", []], ["mod", "def", "gauge_seminorm", []], ["add", "theorem", "gauge_seminorm_lt_one_of_open", []], ["add", "theorem", "gauge_smul_left", []], ["add", "theorem", "gauge_smul_left_of_nonneg", []], ["add", "theorem", "gauge_unit_ball", []], ["add", "theorem", "gauge_zero'", []], ["add", "theorem", "le_gauge_of_not_mem", []], ["add", "theorem", "mul_gauge_le_norm", []], ["add", "def", "norm_seminorm", []], ["mod", "theorem", "one_le_gauge_of_not_mem", []], ["del", "theorem", "absorbent_ball", ["seminorm"]], ["del", "theorem", "absorbent_ball_zero", ["seminorm"]], ["mod", "theorem", "balanced_ball_zero", ["seminorm"]], ["del", "theorem", "gauge_ball", ["seminorm"]], ["mod", "theorem", "mem_ball", ["seminorm"]], ["add", "theorem", "smul_unit_ball", []]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1643203793, "sha": "573ca836", "message": "feat(analysis/seminorm): add some lemmas for seminorm balls (#11471)\nAdd some lemmas for seminorm balls.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "ball_add_ball_subset", ["seminorm"]], ["add", "theorem", "ball_antitone", ["seminorm"]], ["add", "theorem", "ball_mono", ["seminorm"]], ["add", "theorem", "ball_smul_ball", ["seminorm"]], ["add", "theorem", "neg_ball", ["seminorm"]], ["add", "theorem", "smul_ball_preimage", ["seminorm"]]]}]}, {"timestamp": 1643203792, "sha": "07d8ca6d", "message": "feat(combinatorics/configuration): Formula for cardinality of a projective plane (#11462)\nThis PR proves the formula for the cardinality of a projective plane in terms of the order.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "card_lines", ["configuration", "projective_plane"]], ["add", "theorem", "card_points", ["configuration", "projective_plane"]]]}]}, {"timestamp": 1643197983, "sha": "7f0f3f19", "message": "feat(algebra/order/hom/monoid): Ordered monoid/group homomorphisms (#11633)\nDefine\n* `order_add_monoid_hom` with notation `→+o`\n* `order_monoid_hom` with notation `→*o`\n* `order_monoid_with_zero_hom` with notation `→*₀o`\nand their corresponding hom classes.\nAlso add a few missing API lemmas in `algebra.group.hom` and `order.hom.basic`.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/order/hom/monoid.lean", "changes": [["add", "structure", "order_add_monoid_hom", []], ["add", "theorem", "cancel_left", ["order_monoid_hom"]], ["add", "theorem", "cancel_right", ["order_monoid_hom"]], ["add", "theorem", "coe_comp", ["order_monoid_hom"]], ["add", "theorem", "coe_comp_monoid_hom", ["order_monoid_hom"]], ["add", "theorem", "coe_comp_order_hom", ["order_monoid_hom"]], ["add", "theorem", "coe_id", ["order_monoid_hom"]], ["add", "theorem", "coe_mk", ["order_monoid_hom"]], ["add", "theorem", "coe_monoid_hom", ["order_monoid_hom"]], ["add", "theorem", "coe_mul", ["order_monoid_hom"]], ["add", "theorem", "coe_one", ["order_monoid_hom"]], ["add", "theorem", "coe_order_hom", ["order_monoid_hom"]], ["add", "def", "comp", ["order_monoid_hom"]], ["add", "theorem", "comp_apply", ["order_monoid_hom"]], ["add", "theorem", "comp_assoc", ["order_monoid_hom"]], ["add", "theorem", "comp_id", ["order_monoid_hom"]], ["add", "theorem", "comp_mul", ["order_monoid_hom"]], ["add", "theorem", "comp_one", ["order_monoid_hom"]], ["add", "theorem", "ext", ["order_monoid_hom"]], ["add", "theorem", "id_comp", ["order_monoid_hom"]], ["add", "def", "mk'", ["order_monoid_hom"]], ["add", "theorem", "mk_coe", ["order_monoid_hom"]], ["add", "theorem", "mul_apply", ["order_monoid_hom"]], ["add", "theorem", "mul_comp", ["order_monoid_hom"]], ["add", "theorem", "one_apply", ["order_monoid_hom"]], ["add", "theorem", "one_comp", ["order_monoid_hom"]], ["add", "theorem", "to_fun_eq_coe", ["order_monoid_hom"]], ["add", "theorem", "to_monoid_hom_eq_coe", ["order_monoid_hom"]], ["add", "theorem", "to_monoid_hom_injective", ["order_monoid_hom"]], ["add", "def", "to_order_hom", ["order_monoid_hom"]], ["add", "theorem", "to_order_hom_eq_coe", ["order_monoid_hom"]], ["add", "theorem", "to_order_hom_injective", ["order_monoid_hom"]], ["add", "structure", "order_monoid_hom", []], ["add", "theorem", "cancel_left", ["order_monoid_with_zero_hom"]], ["add", "theorem", "cancel_right", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_comp", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_comp_monoid_with_zero_hom", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_comp_order_monoid_hom", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_id", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_mk", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_monoid_with_zero_hom", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_mul", ["order_monoid_with_zero_hom"]], ["add", "theorem", "coe_order_monoid_hom", ["order_monoid_with_zero_hom"]], ["add", "def", "comp", ["order_monoid_with_zero_hom"]], ["add", "theorem", "comp_apply", ["order_monoid_with_zero_hom"]], ["add", "theorem", "comp_assoc", ["order_monoid_with_zero_hom"]], ["add", "theorem", "comp_id", ["order_monoid_with_zero_hom"]], ["add", "theorem", "comp_mul", ["order_monoid_with_zero_hom"]], ["add", "theorem", "ext", ["order_monoid_with_zero_hom"]], ["add", "theorem", "id_comp", ["order_monoid_with_zero_hom"]], ["add", "theorem", "mk_coe", ["order_monoid_with_zero_hom"]], ["add", "theorem", "mul_apply", ["order_monoid_with_zero_hom"]], ["add", "theorem", "mul_comp", ["order_monoid_with_zero_hom"]], ["add", "theorem", "to_fun_eq_coe", ["order_monoid_with_zero_hom"]], ["add", "theorem", "to_monoid_with_zero_hom_eq_coe", ["order_monoid_with_zero_hom"]], ["add", "theorem", "to_monoid_with_zero_hom_injective", ["order_monoid_with_zero_hom"]], ["add", "def", "to_order_monoid_hom", ["order_monoid_with_zero_hom"]], ["add", "theorem", "to_order_monoid_hom_eq_coe", ["order_monoid_with_zero_hom"]], ["add", "theorem", "to_order_monoid_hom_injective", ["order_monoid_with_zero_hom"]], ["add", "structure", "order_monoid_with_zero_hom", []]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": []}]}, {"timestamp": 1643196356, "sha": "20aae835", "message": "feat(order/hom/lattice): Lattice homomorphisms (#11610)\nThis defines (bounded) lattice homomorphisms using the `fun_like` along with weaker homomorphisms that only preserve `sup`, `inf`, `top`, `bot`.", "changes": [{"oldPath": null, "newPath": "src/order/hom/lattice.lean", "changes": [["add", "theorem", "bot_apply", ["bot_hom"]], ["add", "theorem", "coe_bot", ["bot_hom"]], ["add", "theorem", "coe_id", ["bot_hom"]], ["add", "theorem", "coe_inf", ["bot_hom"]], ["add", "theorem", "coe_sup", ["bot_hom"]], ["add", "theorem", "ext", ["bot_hom"]], ["add", "theorem", "id_apply", ["bot_hom"]], ["add", "theorem", "inf_apply", ["bot_hom"]], ["add", "theorem", "sup_apply", ["bot_hom"]], ["add", "theorem", "to_fun_eq_coe", ["bot_hom"]], ["add", "structure", "bot_hom", []], ["add", "theorem", "coe_id", ["bounded_lattice_hom"]], ["add", "theorem", "ext", ["bounded_lattice_hom"]], ["add", "theorem", "id_apply", ["bounded_lattice_hom"]], ["add", "def", "to_bot_hom", ["bounded_lattice_hom"]], ["add", "theorem", "to_fun_eq_coe", ["bounded_lattice_hom"]], ["add", "def", "to_top_hom", ["bounded_lattice_hom"]], ["add", "structure", "bounded_lattice_hom", []], ["add", "theorem", "coe_const", ["inf_hom"]], ["add", "theorem", "coe_id", ["inf_hom"]], ["add", "theorem", "coe_inf", ["inf_hom"]], ["add", "def", "const", ["inf_hom"]], ["add", "theorem", "const_apply", ["inf_hom"]], ["add", "theorem", "ext", ["inf_hom"]], ["add", "theorem", "id_apply", ["inf_hom"]], ["add", "theorem", "inf_apply", ["inf_hom"]], ["add", "theorem", "to_fun_eq_coe", ["inf_hom"]], ["add", "structure", "inf_hom", []], ["add", "theorem", "coe_id", ["lattice_hom"]], ["add", "theorem", "ext", ["lattice_hom"]], ["add", "theorem", "id_apply", ["lattice_hom"]], ["add", "theorem", "to_fun_eq_coe", ["lattice_hom"]], ["add", "def", "to_inf_hom", ["lattice_hom"]], ["add", "structure", "lattice_hom", []], ["add", "theorem", "coe_const", ["sup_hom"]], ["add", "theorem", "coe_id", ["sup_hom"]], ["add", "theorem", "coe_sup", ["sup_hom"]], ["add", "def", "const", ["sup_hom"]], ["add", "theorem", "const_apply", ["sup_hom"]], ["add", "theorem", "ext", ["sup_hom"]], ["add", "theorem", "id_apply", ["sup_hom"]], ["add", "theorem", "sup_apply", ["sup_hom"]], ["add", "theorem", "to_fun_eq_coe", ["sup_hom"]], ["add", "structure", "sup_hom", []], ["add", "theorem", "coe_id", ["top_hom"]], ["add", "theorem", "coe_inf", ["top_hom"]], ["add", "theorem", "coe_sup", ["top_hom"]], ["add", "theorem", "coe_top", ["top_hom"]], ["add", "theorem", "ext", ["top_hom"]], ["add", "theorem", "id_apply", ["top_hom"]], ["add", "theorem", "inf_apply", ["top_hom"]], ["add", "theorem", "sup_apply", ["top_hom"]], ["add", "theorem", "to_fun_eq_coe", ["top_hom"]], ["add", "theorem", "top_apply", ["top_hom"]], ["add", "structure", "top_hom", []]]}]}, {"timestamp": 1643191462, "sha": "09c6ce81", "message": "feat(group_theory/subgroup/basic): add normalizer_condition definition (#11587)\nand an equivalent formula that is a bit easier to work with.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "def", "normalizer_condition", []], ["add", "theorem", "normalizer_condition_iff_only_full_group_self_normalizing", []]]}]}, {"timestamp": 1643188225, "sha": "c294e4bb", "message": "feat(topology/*): replace some `a < b` assumptions with `a ≠ b` (#11650)", "changes": [{"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": [["add", "theorem", "lower_ne_upper", ["box_integral", "box"]]]}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["mod", "theorem", "closure_Ico", []], ["mod", "theorem", "closure_Ioc", []], ["mod", "theorem", "closure_Ioo", []]]}, {"oldPath": "src/topology/algebra/ordered/extend_from.lean", "newPath": "src/topology/algebra/ordered/extend_from.lean", "changes": []}]}, {"timestamp": 1643154416, "sha": "20a461f3", "message": "feat(algebra/big_operators/order): The size of a finset of disjoint finsets is less than the size of its union (#11654)\nProve `card_le_card_bUnion`, its corollary `card_le_card_bUnion_add_card_fiber` where we drop the nonemptiness condition in exchange of a `+` card of the fiber of `∅` on the RHS, and its useful special case `card_le_card_bUnion_add_one`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "card_le_card_bUnion", ["finset"]], ["add", "theorem", "card_le_card_bUnion_add_card_fiber", ["finset"]], ["add", "theorem", "card_le_card_bUnion_add_one", ["finset"]]]}]}, {"timestamp": 1643149492, "sha": "b237af52", "message": "refactor(set_theory/ordinal_arithmetic): Rename `lsub_le_iff_lt` to `lsub_le` (#11661)\nThis way, it directly corresponds to `sup_le`. Ditto for `blsub_le_iff_lt`.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "blsub_le", ["ordinal"]], ["del", "theorem", "blsub_le_iff_lt", ["ordinal"]], ["add", "theorem", "lsub_le", ["ordinal"]], ["del", "theorem", "lsub_le_iff_lt", ["ordinal"]]]}]}, {"timestamp": 1643149491, "sha": "b0a18124", "message": "chore(data/buffer/parser/numeral): fix backticks (#11658)", "changes": [{"oldPath": "src/data/buffer/parser/numeral.lean", "newPath": "src/data/buffer/parser/numeral.lean", "changes": []}]}, {"timestamp": 1643149490, "sha": "033dd3c5", "message": "feat(analysis/special_functions/complex/circle): `real.angle.exp_map_circle` (#11627)\nAdd a version of `exp_map_circle` that applies to a `real.angle`\nargument.", "changes": [{"oldPath": "src/analysis/special_functions/complex/circle.lean", "newPath": "src/analysis/special_functions/complex/circle.lean", "changes": [["add", "theorem", "exp_map_circle_coe", ["real", "angle"]]]}]}, {"timestamp": 1643149489, "sha": "f5b11ad5", "message": "feat(algebra/lie/{nilpotent,of_associative}): a representation of an associative algebra gives a representation of a Lie algebra (#11558)\nThe lemma `lie_algebra.non_trivial_center_of_is_nilpotent` is unrelated.", "changes": [{"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "non_trivial_center_of_is_nilpotent", ["lie_algebra"]]]}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "theorem", "lie_eq_smul", []], ["add", "def", "of_associative_module", ["lie_module"]], ["add", "theorem", "to_endomorphism_module_End", ["lie_module"]], ["add", "def", "of_associative_module", ["lie_ring_module"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}]}, {"timestamp": 1643144348, "sha": "99608cc6", "message": "feat(group_theory/sub{monoid,group}, linear_algebra/basic): add `supr_induction` for `submonoid`, `add_submonoid`, `subgroup`, `add_subgroup`, and `submodule` (#11556)\nThis also adds dependent versions, which match the style of the dependent versions of `submodule.span_induction` and `submonoid.closure_induction` in #11555.\nPrimarily it's the group and module versions that are useful here, as they remove the inv and smul obligations that would appear if using `closure_induction` or `span_induction`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "mem_supr_of_mem", ["subgroup"]], ["add", "theorem", "supr_eq_closure", ["subgroup"]], ["add", "theorem", "supr_induction'", ["subgroup"]], ["add", "theorem", "supr_induction", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["mod", "theorem", "mem_supr_of_mem", ["submonoid"]], ["add", "theorem", "supr_induction'", ["submonoid"]], ["add", "theorem", "supr_induction", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "supr_induction'", ["submodule"]], ["add", "theorem", "supr_induction", ["submodule"]]]}]}, {"timestamp": 1643144347, "sha": "25d1341b", "message": "feat(group_theory/sub{monoid,group}, linear_algebra/basic): remove specialization to subtypes from dependent recursors (#11555)\nThe following recursors (the first of which was added in #4984) are more generally applicable than to subtypes alone:\n* `submonoid.closure_induction'`\n* `add_submonoid.closure_induction'`\n* `subgroup.closure_induction'`\n* `add_subgroup.closure_induction'`\n* `submodule.span_induction'`\nNow that these live right next to their non-dependent version, there is little need to repeat the docstring.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "closure_induction'", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "closure_induction'", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["del", "theorem", "closure_induction'", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "span_induction'", ["submodule"]]]}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["mod", "theorem", "closure_induction'", ["first_order", "language", "substructure"]]]}]}, {"timestamp": 1643144346, "sha": "7e098272", "message": "feat(analysis/inner_product_space/adjoint): matrix and linear map adjoints agree (#11551)", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "conj_transpose_eq_adjoint", ["matrix"]]]}]}, {"timestamp": 1643144344, "sha": "84f2e934", "message": "feat(group_theory/free_abelian_group): add free_abelian_group.basis (#11465)\nAlthough a statement about `free_abelian_group`, it lives in\n`free_abelian_group_finsupp` because it uses the isomorphism between\n`free_abelian_group X` and `X →₀ ℤ`", "changes": [{"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": []}]}, {"timestamp": 1643140288, "sha": "009cec03", "message": "feat(set_theory/cardinal_ordinal): Aleph is positive (#11657)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "aleph'_pos", ["cardinal"]], ["add", "theorem", "aleph_pos", ["cardinal"]]]}]}, {"timestamp": 1643131828, "sha": "6184db11", "message": "feat(topology/algebra/mul_action2): quotient by a properly discontinuous group action is t2 (#10465)\nWe prove that the quotient of a Hausdorff (t2) locally compact space by a properly discontinuous group action is itself Hausdorff.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "image_inter_image_iff", ["mul_action"]], ["add", "theorem", "quotient_preimage_image_eq_union_mul", ["mul_action"]]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/mul_action2.lean", "changes": [["add", "def", "smul", ["homeomorph"]], ["add", "def", "vadd", ["homeomorph"]], ["add", "theorem", "is_open_map_quotient_mk_mul", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "t2_separation_compact_nhds", []], ["add", "theorem", "t2_separation_nhds", []], ["add", "theorem", "t2_space_iff_nhds", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "local_compact_nhds", []]]}]}, {"timestamp": 1643116798, "sha": "4d761f44", "message": "feat(algebra/group/hom): Notation for `monoid_with_zero_hom` (#11632)\nIntroduce notation `→*₀` for `monoid_with_zero_hom` and use it everywhere.", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["mod", "def", "normalize", []]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "cancel_left", ["monoid_with_zero_hom"]], ["mod", "theorem", "cancel_right", ["monoid_with_zero_hom"]], ["mod", "theorem", "comp_apply", ["monoid_with_zero_hom"]], ["mod", "theorem", "congr_arg", ["monoid_with_zero_hom"]], ["mod", "theorem", "congr_fun", ["monoid_with_zero_hom"]], ["mod", "theorem", "ext", ["monoid_with_zero_hom"]], ["mod", "theorem", "ext_iff", ["monoid_with_zero_hom"]], ["mod", "def", "id", ["monoid_with_zero_hom"]], ["mod", "theorem", "mk_coe", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "def", "div_monoid_with_zero_hom", []], ["mod", "def", "mul_monoid_with_zero_hom", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "def", "inv_monoid_with_zero_hom", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": [["mod", "def", "to_monoid_with_zero_hom", ["absolute_value"]], ["mod", "def", "abv_hom", ["is_absolute_value"]]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["mod", "theorem", "abs_div", []], ["mod", "theorem", "abs_inv", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["mod", "def", "abs_hom", []]]}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["mod", "def", "norm_sq", ["quaternion"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": [["mod", "def", "comp_hom", ["mul_action_with_zero"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "nnnorm_div", ["normed_field"]], ["mod", "def", "nnnorm_hom", ["normed_field"]], ["mod", "theorem", "norm_div", ["normed_field"]], ["mod", "def", "norm_hom", ["normed_field"]], ["mod", "theorem", "norm_inv", ["normed_field"]], ["mod", "theorem", "norm_zpow", ["normed_field"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "def", "norm_sq", ["complex"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "def", "norm_sq", ["is_R_or_C"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["mod", "theorem", "ext_int'", ["monoid_with_zero_hom"]], ["mod", "theorem", "ext_int", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "ext_rat", ["monoid_with_zero_hom"]], ["mod", "theorem", "ext_rat_on_pnat", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["mod", "theorem", "map_le_non_zero_divisors_of_injective", ["monoid_with_zero_hom"]], ["mod", "theorem", "map_ne_zero_of_mem_non_zero_divisors", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "coe_coe", ["valuation"]], ["mod", "theorem", "map", ["valuation", "is_equiv"]], ["mod", "def", "map", ["valuation"]], ["mod", "structure", "valuation", []]]}]}, {"timestamp": 1643113539, "sha": "1b3da831", "message": "feat(combinatorics/simple_graph/coloring): add inequalities from embeddings (#11548)\nAlso add a lemma that the chromatic number of an infinite complete graph is zero (i.e., it needs infinitely many colors), as suggested by @arthurpaulino.", "changes": [{"oldPath": "src/combinatorics/simple_graph/coloring.lean", "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": [["del", "theorem", "chromatic_number_complete_graph", ["simple_graph"]], ["del", "theorem", "chromatic_number_le_of_forall_imp", ["simple_graph"]], ["del", "theorem", "chromatic_number_le_of_le_colorable", ["simple_graph"]], ["add", "theorem", "chromatic_number_pos", ["simple_graph"]], ["add", "theorem", "chromatic_number_top", ["simple_graph"]], ["add", "theorem", "chromatic_number_top_eq_zero_of_infinite", ["simple_graph"]], ["add", "theorem", "chromatic_number_le_of_forall_imp", ["simple_graph", "colorable"]], ["add", "theorem", "chromatic_number_mono", ["simple_graph", "colorable"]], ["add", "theorem", "chromatic_number_mono_of_embedding", ["simple_graph", "colorable"]], ["add", "theorem", "mono", ["simple_graph", "colorable"]], ["add", "theorem", "mono_left", ["simple_graph", "colorable"]], ["add", "theorem", "of_embedding", ["simple_graph", "colorable"]], ["del", "theorem", "of_le", ["simple_graph", "colorable"]], ["add", "theorem", "colorable_of_chromatic_number_pos", ["simple_graph"]], ["del", "theorem", "colorable_of_le_colorable", ["simple_graph"]], ["del", "theorem", "zero_lt_chromatic_number", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/partition.lean", "newPath": "src/combinatorics/simple_graph/partition.lean", "changes": []}]}, {"timestamp": 1643113538, "sha": "158c0eaf", "message": "feat(group_theory/abelianization): add abelianization_of_comm_group (#11467)", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["add", "def", "equiv_of_comm", ["abelianization"]]]}]}, {"timestamp": 1643107774, "sha": "494f7199", "message": "feat(data/fun_like): define `embedding_like` and `equiv_like` (#10759)\nThese extend `fun_like` with a proof of injectivity resp. an inverse.\nThe number of new generic lemmas is quite low at the moment, so their use is more in defining derived classes such as `mul_equiv_class`.", "changes": [{"oldPath": "src/algebra/group/freiman.lean", "newPath": "src/algebra/group/freiman.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["equiv"]], ["mod", "theorem", "bijective_comp", ["equiv"]], ["mod", "theorem", "coe_fn_injective", ["equiv"]], ["mod", "theorem", "comp_bijective", ["equiv"]], ["mod", "theorem", "comp_injective", ["equiv"]], ["mod", "theorem", "comp_surjective", ["equiv"]], ["mod", "theorem", "ext", ["equiv"]], ["mod", "theorem", "ext_iff", ["equiv"]], ["mod", "theorem", "injective_comp", ["equiv"]], ["mod", "theorem", "surjective_comp", ["equiv"]]]}, {"oldPath": "src/data/fun_like.lean", "newPath": "src/data/fun_like/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/fun_like/embedding.lean", "changes": [["add", "structure", "cooler_embedding", []], ["add", "theorem", "do_something", []], ["add", "theorem", "apply_eq_iff_eq", ["embedding_like"]], ["add", "theorem", "comp_injective", ["embedding_like"]], ["add", "theorem", "map_cool", []], ["add", "theorem", "map_op", []]]}, {"oldPath": null, "newPath": "src/data/fun_like/equiv.lean", "changes": [["add", "structure", "cooler_iso", []], ["add", "theorem", "do_something", []], ["add", "theorem", "apply_eq_iff_eq", ["equiv_like"]], ["add", "theorem", "bijective_comp", ["equiv_like"]], ["add", "theorem", "comp_bijective", ["equiv_like"]], ["add", "theorem", "comp_injective", ["equiv_like"]], ["add", "theorem", "comp_surjective", ["equiv_like"]], ["add", "theorem", "injective_comp", ["equiv_like"]], ["add", "theorem", "inv_injective", ["equiv_like"]], ["add", "theorem", "surjective_comp", ["equiv_like"]], ["add", "theorem", "map_cool", []]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["function", "embedding"]], ["mod", "theorem", "coe_injective", ["function", "embedding"]], ["mod", "theorem", "ext", ["function", "embedding"]], ["mod", "theorem", "ext_iff", ["function", "embedding"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1643105057, "sha": "6b322417", "message": "feat(model_theory/basic): Terms, formulas, and definable sets (#11067)\nDefines first-order terms, formulas, sentences and theories\nDefines the boolean algebra of definable sets\n(Several of these definitions are based on those from the flypitch project.)", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "bd_not", ["first_order", "language"]], ["add", "inductive", "bounded_formula", ["first_order", "language"]], ["add", "theorem", "coe_bot", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_compl", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_inf", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_sup", ["first_order", "language", "definable_set"]], ["add", "theorem", "coe_top", ["first_order", "language", "definable_set"]], ["add", "theorem", "le_iff", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_compl", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_inf", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_sup", ["first_order", "language", "definable_set"]], ["add", "theorem", "mem_top", ["first_order", "language", "definable_set"]], ["add", "theorem", "not_mem_bot", ["first_order", "language", "definable_set"]], ["add", "def", "definable_set", ["first_order", "language"]], ["add", "def", "formula", ["first_order", "language"]], ["add", "theorem", "compl", ["first_order", "language", "is_definable"]], ["add", "theorem", "inter", ["first_order", "language", "is_definable"]], ["add", "theorem", "sdiff", ["first_order", "language", "is_definable"]], ["add", "theorem", "union", ["first_order", "language", "is_definable"]], ["add", "structure", "is_definable", ["first_order", "language"]], ["add", "theorem", "is_definable_empty", ["first_order", "language"]], ["add", "theorem", "is_definable_univ", ["first_order", "language"]], ["add", "def", "realize_bounded_formula", ["first_order", "language"]], ["add", "def", "realize_formula", ["first_order", "language"]], ["add", "theorem", "realize_not", ["first_order", "language"]], ["add", "def", "realize_sentence", ["first_order", "language"]], ["add", "def", "realize_term", ["first_order", "language"]], ["add", "def", "sentence", ["first_order", "language"]], ["add", "inductive", "term", ["first_order", "language"]], ["add", "def", "theory", ["first_order", "language"]]]}]}, {"timestamp": 1643099758, "sha": "4883d11c", "message": "feat(README.md): add Kyle Miller as new maintainer (#11653)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1643096576, "sha": "bf71feb0", "message": "feat(number_theory/quadratic_reciprocity): generalise legendre_sym to allow integer first argument (#11573)\nTalking about the legendre symbol of -1 mod p is quite natural, so we generalize to include this case.\nSo far in a minimal way without changing any existing lemmas", "changes": [{"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["mod", "def", "legendre_sym", ["zmod"]]]}]}, {"timestamp": 1643094951, "sha": "f7a597ad", "message": "feat(group_theory/nilpotent): add nilpotency_class inequalities (#11585)\nEvery theorem that proves `nilpotency G'` (e.g. for subgroups, images,\npreimages) should be accompanied by a lemma relating their\n`nilpotency_class`, so add thse lmmeas for subgroups and preimages.\nAlso add nilpotency lemmas for surjective homomorphisms and quotions,\nincluding nilpotency_class lemmas.", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["mod", "theorem", "is_nilpotent_of_ker_le_center", []], ["add", "theorem", "lower_central_series_nilpotency_class", []], ["add", "theorem", "nilpotency_class_le_of_ker_le_center", []], ["add", "theorem", "nilpotency_class_le_of_surjective", []], ["add", "theorem", "nilpotency_class_quotient_le", []], ["add", "theorem", "nilpotent_of_surjective", []], ["add", "theorem", "nilpotency_class_le", ["subgroup"]], ["add", "theorem", "upper_central_series_nilpotency_class", []]]}]}, {"timestamp": 1643090883, "sha": "f2786639", "message": "feat(README.md): add Frédéric Dupuis as new maintainer (#11651)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1643087484, "sha": "b3cd0e6d", "message": "chore(order/filter, *): enhancing `filter_upwards` tactic (#11624)", "changes": [{"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exponential.lean", "newPath": "src/analysis/special_functions/exponential.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/non_integrable.lean", "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/analysis/subadditive.lean", "newPath": "src/analysis/subadditive.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali_family.lean", "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_order.lean", "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_order.lean", "newPath": "src/measure_theory/function/lp_order.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/probability_theory/martingale.lean", "newPath": "src/probability_theory/martingale.lean", "changes": []}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/monotone_continuity.lean", "newPath": "src/topology/algebra/ordered/monotone_continuity.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/urysohns_lemma.lean", "newPath": "src/topology/urysohns_lemma.lean", "changes": []}]}, {"timestamp": 1643081614, "sha": "8cc2ff4c", "message": "refactor(order/{bounded, rel_classes}): Moved `bounded` into the `set` namespace (#11594)\nAs per the [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/bounded.2Emono). Closes #11589.", "changes": [{"oldPath": "src/order/bounded.lean", "newPath": "src/order/bounded.lean", "changes": [["del", "theorem", "mono", ["bounded"]], ["del", "theorem", "rel_mono", ["bounded"]], ["del", "theorem", "bounded_ge_Icc", []], ["del", "theorem", "bounded_ge_Ici", []], ["del", "theorem", "bounded_ge_Ico", []], ["del", "theorem", "bounded_ge_Ioc", []], ["del", "theorem", "bounded_ge_Ioi", []], ["del", "theorem", "bounded_ge_Ioo", []], ["del", "theorem", "bounded_ge_iff_bounded_gt", []], ["del", "theorem", "bounded_ge_inter_ge", []], ["del", "theorem", "bounded_ge_inter_gt", []], ["del", "theorem", "bounded_ge_inter_not_ge", []], ["del", "theorem", "bounded_ge_of_bounded_gt", []], ["del", "theorem", "bounded_gt_Icc", []], ["del", "theorem", "bounded_gt_Ici", []], ["del", "theorem", "bounded_gt_Ico", []], ["del", "theorem", "bounded_gt_Ioc", []], ["del", "theorem", "bounded_gt_Ioi", []], ["del", "theorem", "bounded_gt_Ioo", []], ["del", "theorem", "bounded_gt_inter_ge", []], ["del", "theorem", "bounded_gt_inter_gt", []], ["del", "theorem", "bounded_gt_inter_not_gt", []], ["del", "theorem", "bounded_inter_not", []], ["del", "theorem", "bounded_le_Icc", []], ["del", "theorem", "bounded_le_Ico", []], ["del", "theorem", "bounded_le_Iic", []], ["del", "theorem", "bounded_le_Iio", []], ["del", "theorem", "bounded_le_Ioc", []], ["del", "theorem", "bounded_le_Ioo", []], ["del", "theorem", "bounded_le_iff_bounded_lt", []], ["del", "theorem", "bounded_le_inter_le", []], ["del", "theorem", "bounded_le_inter_lt", []], ["del", "theorem", "bounded_le_inter_not_le", []], ["del", "theorem", "bounded_le_of_bounded_lt", []], ["del", "theorem", "bounded_lt_Icc", []], ["del", "theorem", "bounded_lt_Ico", []], ["del", "theorem", "bounded_lt_Iic", []], ["del", "theorem", "bounded_lt_Iio", []], ["del", "theorem", "bounded_lt_Ioc", []], ["del", "theorem", "bounded_lt_Ioo", []], ["del", "theorem", "bounded_lt_inter_le", []], ["del", "theorem", "bounded_lt_inter_lt", []], ["del", "theorem", "bounded_lt_inter_not_lt", []], ["del", "theorem", "bounded_self", []], ["add", "theorem", "mono", ["set", "bounded"]], ["add", "theorem", "rel_mono", ["set", "bounded"]], ["add", "theorem", "bounded_ge_Icc", ["set"]], ["add", "theorem", "bounded_ge_Ici", ["set"]], ["add", "theorem", "bounded_ge_Ico", ["set"]], ["add", "theorem", "bounded_ge_Ioc", ["set"]], ["add", "theorem", "bounded_ge_Ioi", ["set"]], ["add", "theorem", "bounded_ge_Ioo", ["set"]], ["add", "theorem", "bounded_ge_iff_bounded_gt", ["set"]], ["add", "theorem", "bounded_ge_inter_ge", ["set"]], ["add", "theorem", "bounded_ge_inter_gt", ["set"]], ["add", "theorem", "bounded_ge_inter_not_ge", ["set"]], ["add", "theorem", "bounded_ge_of_bounded_gt", ["set"]], ["add", "theorem", "bounded_gt_Icc", ["set"]], ["add", "theorem", "bounded_gt_Ici", ["set"]], ["add", "theorem", "bounded_gt_Ico", ["set"]], ["add", "theorem", "bounded_gt_Ioc", ["set"]], ["add", "theorem", "bounded_gt_Ioi", ["set"]], ["add", "theorem", "bounded_gt_Ioo", ["set"]], ["add", "theorem", "bounded_gt_inter_ge", ["set"]], ["add", "theorem", "bounded_gt_inter_gt", ["set"]], ["add", "theorem", "bounded_gt_inter_not_gt", ["set"]], ["add", "theorem", "bounded_inter_not", ["set"]], ["add", "theorem", "bounded_le_Icc", ["set"]], ["add", "theorem", "bounded_le_Ico", ["set"]], ["add", "theorem", "bounded_le_Iic", ["set"]], ["add", "theorem", "bounded_le_Iio", ["set"]], ["add", "theorem", "bounded_le_Ioc", ["set"]], ["add", "theorem", "bounded_le_Ioo", ["set"]], ["add", "theorem", "bounded_le_iff_bounded_lt", ["set"]], ["add", "theorem", "bounded_le_inter_le", ["set"]], ["add", "theorem", "bounded_le_inter_lt", ["set"]], ["add", "theorem", "bounded_le_inter_not_le", ["set"]], ["add", "theorem", "bounded_le_of_bounded_lt", ["set"]], ["add", "theorem", "bounded_lt_Icc", ["set"]], ["add", "theorem", "bounded_lt_Ico", ["set"]], ["add", "theorem", "bounded_lt_Iic", ["set"]], ["add", "theorem", "bounded_lt_Iio", ["set"]], ["add", "theorem", "bounded_lt_Ioc", ["set"]], ["add", "theorem", "bounded_lt_Ioo", ["set"]], ["add", "theorem", "bounded_lt_inter_le", ["set"]], ["add", "theorem", "bounded_lt_inter_lt", ["set"]], ["add", "theorem", "bounded_lt_inter_not_lt", ["set"]], ["add", "theorem", "bounded_self", ["set"]], ["add", "theorem", "mono", ["set", "unbounded"]], ["add", "theorem", "rel_mono", ["set", "unbounded"]], ["add", "theorem", "unbounded_ge_iff", ["set"]], ["add", "theorem", "unbounded_ge_iff_unbounded_inter_ge", ["set"]], ["add", "theorem", "unbounded_ge_inter_gt", ["set"]], ["add", "theorem", "unbounded_ge_inter_not_ge", ["set"]], ["add", "theorem", "unbounded_ge_of_forall_exists_gt", ["set"]], ["add", "theorem", "unbounded_gt_iff", ["set"]], ["add", "theorem", "unbounded_gt_iff_unbounded_ge", ["set"]], ["add", "theorem", "unbounded_gt_inter_gt", ["set"]], ["add", "theorem", "unbounded_gt_inter_not_gt", ["set"]], ["add", "theorem", "unbounded_gt_of_forall_exists_ge", ["set"]], ["add", "theorem", "unbounded_gt_of_unbounded_ge", ["set"]], ["add", "theorem", "unbounded_inter_ge", ["set"]], ["add", "theorem", "unbounded_inter_not", ["set"]], ["add", "theorem", "unbounded_le_Ici", ["set"]], ["add", "theorem", "unbounded_le_Ioi", ["set"]], ["add", "theorem", "unbounded_le_iff", ["set"]], ["add", "theorem", "unbounded_le_inter_le", ["set"]], ["add", "theorem", "unbounded_le_inter_lt", ["set"]], ["add", "theorem", "unbounded_le_inter_not_le", ["set"]], ["add", "theorem", "unbounded_le_of_forall_exists_lt", ["set"]], ["add", "theorem", "unbounded_lt_Ici", ["set"]], ["add", "theorem", "unbounded_lt_Ioi", ["set"]], ["add", "theorem", "unbounded_lt_iff", ["set"]], ["add", "theorem", "unbounded_lt_iff_unbounded_le", ["set"]], ["add", "theorem", "unbounded_lt_inter_le", ["set"]], ["add", "theorem", "unbounded_lt_inter_lt", ["set"]], ["add", "theorem", "unbounded_lt_inter_not_lt", ["set"]], ["add", "theorem", "unbounded_lt_of_forall_exists_le", ["set"]], ["add", "theorem", "unbounded_lt_of_unbounded_le", ["set"]], ["del", "theorem", "mono", ["unbounded"]], ["del", "theorem", "rel_mono", ["unbounded"]], ["del", "theorem", "unbounded_ge_iff", []], ["del", "theorem", "unbounded_ge_iff_unbounded_inter_ge", []], ["del", "theorem", "unbounded_ge_inter_gt", []], ["del", "theorem", "unbounded_ge_inter_not_ge", []], ["del", "theorem", "unbounded_ge_of_forall_exists_gt", []], ["del", "theorem", "unbounded_gt_iff", []], ["del", "theorem", "unbounded_gt_iff_unbounded_ge", []], ["del", "theorem", "unbounded_gt_inter_gt", []], ["del", "theorem", "unbounded_gt_inter_not_gt", []], ["del", "theorem", "unbounded_gt_of_forall_exists_ge", []], ["del", "theorem", "unbounded_gt_of_unbounded_ge", []], ["del", "theorem", "unbounded_inter_ge", []], ["del", "theorem", "unbounded_inter_not", []], ["del", "theorem", "unbounded_le_Ici", []], ["del", "theorem", "unbounded_le_Ioi", []], ["del", "theorem", "unbounded_le_iff", []], ["del", "theorem", "unbounded_le_inter_le", []], ["del", "theorem", "unbounded_le_inter_lt", []], ["del", "theorem", "unbounded_le_inter_not_le", []], ["del", "theorem", "unbounded_le_of_forall_exists_lt", []], ["del", "theorem", "unbounded_lt_Ici", []], ["del", "theorem", "unbounded_lt_Ioi", []], ["del", "theorem", "unbounded_lt_iff", []], ["del", "theorem", "unbounded_lt_iff_unbounded_le", []], ["del", "theorem", "unbounded_lt_inter_le", []], ["del", "theorem", "unbounded_lt_inter_lt", []], ["del", "theorem", "unbounded_lt_inter_not_lt", []], ["del", "theorem", "unbounded_lt_of_forall_exists_le", []], ["del", "theorem", "unbounded_lt_of_unbounded_le", []]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["del", "def", "bounded", []], ["del", "theorem", "not_bounded_iff", []], ["del", "theorem", "not_unbounded_iff", []], ["add", "def", "bounded", ["set"]], ["add", "theorem", "not_bounded_iff", ["set"]], ["add", "theorem", "not_unbounded_iff", ["set"]], ["add", "def", "unbounded", ["set"]], ["del", "def", "unbounded", []]]}]}, {"timestamp": 1643081612, "sha": "b834415b", "message": "chore(topology/metric_space/gromov_hausdorff): Golf some theorems (#11591)", "changes": [{"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1643081611, "sha": "88479be0", "message": "feat(algebra/big_operators/basic): add lemma `finset.prod_dvd_prod` (#11521)\nFor any `S : finset α`, if `∀ a ∈ S, g1 a ∣ g2 a` then `S.prod g1 ∣ S.prod g2`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_dvd_prod", ["finset"]]]}]}, {"timestamp": 1643075767, "sha": "4f5d6acf", "message": "refactor(tactic/interactive): rename tactic.interactive.triv to tactic.interactive.trivial' (#11643)\nThe difference between `tactic.interactive.trivial` and `tactic.interactive.triv` is that the latter expands only reducible constants; the first uses `tactic.triv` and the latter uses `tactic.triv'`. This name change is to improve consistency.\nAlso (slipping in a new feature) add `tactic.interactive.triv`, which is the old `tactic.interactive.triv` but does not run `contradiction`. This is useful for teaching.", "changes": [{"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/fix.lean", "newPath": "src/data/qpf/multivariate/constructions/fix.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1643064831, "sha": "0d172bac", "message": "feat(README.md): add Riccardo Brasca as new maintainer (#11647)\nAdd myself as new maintainer and test my superpowers :)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1643064830, "sha": "12fde093", "message": "feat(data/finset/finsupp): Finitely supported product of finsets (#11639)\nDefine\n* `finsupp.indicator`: Similar to `finsupp.on_finset` except that it only requires a partially defined function. This is more compatible with `finset.pi`.\n* `finset.finsupp : finset ι → (ι → finset α) → finset (ι →₀ α)`: Finitely supported product of finsets.\n* `finsupp.pi : (ι →₀ finset α) → finset (ι →₀ α)`: The set of finitely supported functions whose `i`-th value lies in the `i`-th of a given `finset`-valued `finsupp`.", "changes": [{"oldPath": null, "newPath": "src/data/finset/finsupp.lean", "changes": [["add", "theorem", "card_finsupp", ["finset"]], ["add", "theorem", "mem_finsupp_iff", ["finset"]], ["add", "theorem", "mem_finsupp_iff_of_support_subset", ["finset"]], ["add", "theorem", "card_pi", ["finsupp"]], ["add", "theorem", "mem_pi", ["finsupp"]], ["add", "def", "pi", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "def", "add_monoid_hom", ["finsupp", "emb_domain"]], ["mod", "def", "map_domain_embedding", ["finsupp"]], ["mod", "def", "zip_with", ["finsupp"]]]}, {"oldPath": null, "newPath": "src/data/finsupp/indicator.lean", "changes": [["add", "def", "indicator", ["finsupp"]], ["add", "theorem", "indicator_apply", ["finsupp"]], ["add", "theorem", "indicator_injective", ["finsupp"]], ["add", "theorem", "indicator_of_mem", ["finsupp"]], ["add", "theorem", "indicator_of_not_mem", ["finsupp"]], ["add", "theorem", "support_indicator_subset", ["finsupp"]]]}]}, {"timestamp": 1643058089, "sha": "32052b86", "message": "chore(ci): remove working directory on self-hosted (#11645)\nMathlib now takes several gigabytes to build. This addresses some of the space issues on the CI machines.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1643058086, "sha": "511aa358", "message": "feat(algebra/pointwise): add partial order to `set_semiring` (#11567)\nThis PR introduces the natural inclusion order on sets on `set_semiring`.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Ordered.20semirings)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "down_ssubset_down", ["set"]], ["add", "theorem", "down_subset_down", ["set"]], ["del", "def", "set_semiring", ["set"]], ["add", "theorem", "up_le_up", ["set"]], ["add", "theorem", "up_lt_up", ["set"]]]}]}, {"timestamp": 1643058085, "sha": "9e799a08", "message": "feat(algebra/pointwise): Scalar multiplication lemmas (#11486)\nThis proves a bunch of lemmas about pointwise scalar multiplication of sets, moves `has_vsub` to `algebra.group.defs` and pointwise `vsub` lemmas to `algebra.pointwise`.\nI'm also adding a few sections because having `{s t : set α}` is nice for multiplication but not for scalar multiplication.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["del", "theorem", "empty_vsub", ["set"]], ["del", "theorem", "vadd", ["set", "finite"]], ["del", "theorem", "vsub", ["set", "finite"]], ["del", "theorem", "mem_vsub", ["set"]], ["del", "theorem", "set_vadd_singleton", ["set"]], ["del", "theorem", "singleton_vsub", ["set"]], ["del", "theorem", "vadd_subset_vadd", ["set"]], ["del", "theorem", "vsub_empty", ["set"]], ["del", "theorem", "vsub_mem_vsub", ["set"]], ["del", "theorem", "vsub_self_mono", ["set"]], ["del", "theorem", "vsub_singleton", ["set"]], ["del", "theorem", "vsub_subset_iff", ["set"]], ["del", "theorem", "vsub_subset_vsub", ["set"]]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "mem_inv_smul_set_iff₀", []], ["mod", "theorem", "mem_smul_set_iff_inv_smul_mem₀", []], ["mod", "theorem", "preimage_smul_inv₀", []], ["mod", "theorem", "preimage_smul₀", []], ["add", "theorem", "Inter_mul_subset", ["set"]], ["add", "theorem", "Inter_smul_subset", ["set"]], ["add", "theorem", "Inter_vsub_subset", ["set"]], ["add", "theorem", "Inter₂_mul_subset", ["set"]], ["add", "theorem", "Inter₂_smul_subset", ["set"]], ["add", "theorem", "Inter₂_vsub_subset", ["set"]], ["mod", "theorem", "Union_mul", ["set"]], ["mod", "theorem", "Union_mul_left_image", ["set"]], ["mod", "theorem", "Union_mul_right_image", ["set"]], ["add", "theorem", "Union_smul", ["set"]], ["add", "theorem", "Union_smul_left_image", ["set"]], ["add", "theorem", "Union_smul_right_image", ["set"]], ["add", "theorem", "Union_vsub", ["set"]], ["add", "theorem", "Union_vsub_left_image", ["set"]], ["add", "theorem", "Union_vsub_right_image", ["set"]], ["add", "theorem", "Union₂_mul", ["set"]], ["add", "theorem", "Union₂_smul", ["set"]], ["add", "theorem", "Union₂_vsub", ["set"]], ["mod", "theorem", "empty_mul", ["set"]], ["add", "theorem", "empty_smul", ["set"]], ["add", "theorem", "empty_vsub", ["set"]], ["add", "theorem", "smul_set", ["set", "finite"]], ["add", "theorem", "vsub", ["set", "finite"]], ["mod", "theorem", "image2_mul", ["set"]], ["mod", "theorem", "image2_smul", ["set"]], ["add", "theorem", "image2_vsub", ["set"]], ["mod", "theorem", "image_mul_left", ["set"]], ["mod", "theorem", "image_mul_prod", ["set"]], ["mod", "theorem", "image_mul_right'", ["set"]], ["mod", "theorem", "image_mul_right", ["set"]], ["mod", "theorem", "image_one", ["set"]], ["mod", "theorem", "image_smul", ["set"]], ["mod", "theorem", "image_smul_prod", ["set"]], ["add", "theorem", "image_vsub_prod", ["set"]], ["add", "theorem", "inter_mul_subset", ["set"]], ["add", "theorem", "inter_smul_subset", ["set"]], ["add", "theorem", "inter_vsub_subset", ["set"]], ["mod", "theorem", "mem_mul", ["set"]], ["mod", "theorem", "mem_one", ["set"]], ["mod", "theorem", "mem_smul", ["set"]], ["mod", "theorem", "mem_smul_of_mem", ["set"]], ["mod", "theorem", "mem_smul_set", ["set"]], ["add", "theorem", "mem_vsub", ["set"]], ["add", "theorem", "mul_Inter_subset", ["set"]], ["add", "theorem", "mul_Inter₂_subset", ["set"]], ["mod", "theorem", "mul_Union", ["set"]], ["add", "theorem", "mul_Union₂", ["set"]], ["mod", "theorem", "mul_empty", ["set"]], ["add", "theorem", "mul_inter_subset", ["set"]], ["mod", "theorem", "mul_mem_mul", ["set"]], ["mod", "theorem", "mul_singleton", ["set"]], ["mod", "theorem", "mul_subset_mul", ["set"]], ["mod", "theorem", "mul_subset_mul_left", ["set"]], ["mod", "theorem", "mul_subset_mul_right", ["set"]], ["mod", "theorem", "mul_union", ["set"]], ["add", "theorem", "mul_univ", ["set"]], ["add", "theorem", "neg_smul_set", ["set"]], ["mod", "theorem", "one_mem_one", ["set"]], ["mod", "theorem", "one_nonempty", ["set"]], ["mod", "theorem", "one_subset", ["set"]], ["mod", "theorem", "preimage_mul_left_one", ["set"]], ["mod", "theorem", "preimage_mul_right_one'", ["set"]], ["mod", "theorem", "preimage_mul_right_one", ["set"]], ["mod", "theorem", "range_smul_range", ["set"]], ["mod", "theorem", "singleton_mul", ["set"]], ["mod", "def", "singleton_mul_hom", ["set"]], ["mod", "theorem", "singleton_mul_singleton", ["set"]], ["mod", "theorem", "singleton_one", ["set"]], ["mod", "theorem", "singleton_smul", ["set"]], ["add", "theorem", "singleton_smul_singleton", ["set"]], ["add", "theorem", "singleton_vsub", ["set"]], ["add", "theorem", "singleton_vsub_singleton", ["set"]], ["add", "theorem", "smul_Inter_subset", ["set"]], ["add", "theorem", "smul_Inter₂_subset", ["set"]], ["add", "theorem", "smul_Union", ["set"]], ["add", "theorem", "smul_Union₂", ["set"]], ["add", "theorem", "smul_empty", ["set"]], ["add", "theorem", "smul_inter_subset", ["set"]], ["add", "theorem", "smul_mem_smul", ["set"]], ["mod", "theorem", "smul_mem_smul_set", ["set"]], ["add", "theorem", "smul_set_Inter_subset", ["set"]], ["add", "theorem", "smul_set_Inter₂_subset", ["set"]], ["add", "theorem", "smul_set_Union", ["set"]], ["add", "theorem", "smul_set_Union₂", ["set"]], ["mod", "theorem", "smul_set_empty", ["set"]], ["mod", "theorem", "smul_set_inter_subset", ["set"]], ["mod", "theorem", "smul_set_mono", ["set"]], ["add", "theorem", "smul_set_neg", ["set"]], ["add", "theorem", "smul_set_singleton", ["set"]], ["mod", "theorem", "smul_set_union", ["set"]], ["add", "theorem", "smul_set_univ", ["set"]], ["mod", "theorem", "smul_singleton", ["set"]], ["add", "theorem", "smul_subset_iff", ["set"]], ["add", "theorem", "smul_subset_smul", ["set"]], ["add", "theorem", "smul_subset_smul_left", ["set"]], ["add", "theorem", "smul_subset_smul_right", ["set"]], ["add", "theorem", "smul_union", ["set"]], ["add", "theorem", "smul_univ", ["set"]], ["add", "theorem", "subset_mul_left", ["set"]], ["add", "theorem", "subset_mul_right", ["set"]], ["mod", "theorem", "union_mul", ["set"]], ["add", "theorem", "union_smul", ["set"]], ["add", "theorem", "union_vsub", ["set"]], ["add", "theorem", "univ_mul", ["set"]], ["add", "theorem", "vsub_Inter_subset", ["set"]], ["add", "theorem", "vsub_Inter₂_subset", ["set"]], ["add", "theorem", "vsub_Union", ["set"]], ["add", "theorem", "vsub_Union₂", ["set"]], ["add", "theorem", "vsub_empty", ["set"]], ["add", "theorem", "vsub_inter_subset", ["set"]], ["add", "theorem", "vsub_mem_vsub", ["set"]], ["add", "theorem", "vsub_self_mono", ["set"]], ["add", "theorem", "vsub_singleton", ["set"]], ["add", "theorem", "vsub_subset_iff", ["set"]], ["add", "theorem", "vsub_subset_vsub", ["set"]], ["add", "theorem", "vsub_subset_vsub_left", ["set"]], ["add", "theorem", "vsub_subset_vsub_right", ["set"]], ["add", "theorem", "vsub_union", ["set"]], ["mod", "theorem", "set_smul_subset_iff₀", []], ["mod", "theorem", "set_smul_subset_set_smul_iff₀", []], ["mod", "theorem", "smul_mem_smul_set_iff₀", []], ["add", "theorem", "smul_set_univ₀", []], ["add", "theorem", "smul_univ₀", []], ["mod", "theorem", "subset_set_smul_iff₀", []], ["mod", "theorem", "subsingleton_zero_smul_set", []], ["add", "theorem", "zero_mem_smul_iff", []], ["add", "theorem", "zero_mem_smul_set", []], ["add", "theorem", "zero_mem_smul_set_iff", []], ["mod", "theorem", "zero_smul_set", []], ["mod", "theorem", "zero_smul_subset", []]]}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": []}]}, {"timestamp": 1643055487, "sha": "6aea8acc", "message": "chore(probability_theory/stopping): fix names in documentation (#11644)", "changes": [{"oldPath": "src/probability_theory/stopping.lean", "newPath": "src/probability_theory/stopping.lean", "changes": []}]}, {"timestamp": 1643047456, "sha": "1bbed968", "message": "doc(tactic/interactive): mention triv uses contradiction (#11502)\nAdding the fact that `triv` tries `contradiction` to the docstring for `triv`.", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1643040239, "sha": "eccd8dd1", "message": "feat(algebra/lie/nilpotent): generalise lower central series to start with given Lie submodule (#11625)\nThe advantage of this approach is that we can regard the terms of the lower central series of a Lie submodule as Lie submodules of the enclosing Lie module.\nIn particular, this is useful when considering the lower central series of a Lie ideal.", "changes": [{"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": [["add", "theorem", "comap_bracket_eq", ["lie_submodule"]], ["add", "theorem", "comap_map_eq", ["lie_submodule"]], ["add", "theorem", "le_comap_map", ["lie_submodule"]], ["mod", "theorem", "map_bracket_eq", ["lie_submodule"]], ["add", "theorem", "map_comap_eq", ["lie_submodule"]], ["add", "theorem", "map_comap_incl", ["lie_submodule"]], ["add", "theorem", "map_comap_le", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["mod", "def", "lower_central_series", ["lie_module"]], ["mod", "theorem", "lower_central_series_succ", ["lie_module"]], ["add", "def", "lcs", ["lie_submodule"]], ["add", "theorem", "lcs_le_self", ["lie_submodule"]], ["add", "theorem", "lcs_succ", ["lie_submodule"]], ["add", "theorem", "lcs_zero", ["lie_submodule"]], ["add", "theorem", "lower_central_series_eq_lcs_comap", ["lie_submodule"]], ["add", "theorem", "lower_central_series_map_eq_lcs", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "ker_coe_submodule", ["lie_module_hom"]], ["add", "theorem", "ker_eq_bot", ["lie_module_hom"]], ["add", "theorem", "coe_submodule_comap", ["lie_submodule"]], ["add", "theorem", "comap_incl_self", ["lie_submodule"]], ["add", "theorem", "incl_coe", ["lie_submodule"]], ["add", "theorem", "ker_incl", ["lie_submodule"]], ["add", "theorem", "range_incl", ["lie_submodule"]]]}]}, {"timestamp": 1643040236, "sha": "a6318391", "message": "feat(analysis/special_functions/pow): add nnreal variant of rpow_pos (#11619)\nThis matches the lemma for ennreal.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "rpow_pos", ["nnreal"]]]}]}, {"timestamp": 1643040235, "sha": "155c3309", "message": "feat(analysis/convex/{basic,function}): add lemmas, golf (#11608)\n* add `segment_subset_iff`, `open_segment_subset_iff`, use them to golf some proofs;\n* add `mem_segment_iff_div`, `mem_open_segment_iff_div`, use the\n former in the proof of `convex_iff_div`;\n* move the proof of `mpr` in `convex_on_iff_convex_epigraph` to a new\n lemma;\n* prove that the strict epigraph of a convex function include the open\n segment provided that one of the endpoints is in the strong epigraph\n and the other is in the epigraph; use it in the proof of\n `convex_on.convex_strict_epigraph`.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "linear_image", ["convex"]], ["add", "theorem", "mem_open_segment_iff_div", []], ["add", "theorem", "mem_segment_iff_div", []], ["add", "theorem", "open_segment_subset_iff", []], ["add", "theorem", "segment_subset_iff", []]]}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["add", "theorem", "open_segment_subset_strict_hypograph", ["concave_on"]], ["add", "theorem", "concave_on_of_convex_hypograph", []], ["add", "theorem", "open_segment_subset_strict_epigraph", ["convex_on"]], ["add", "theorem", "convex_on_of_convex_epigraph", []]]}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}]}, {"timestamp": 1643040233, "sha": "a52ce83e", "message": "feat(combinatorics/configuration): The order of a projective plane is at least 2 (#11550)\nThis PR proves that the order of a projective plane is strictly larger than 1.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "one_lt_order", ["configuration", "projective_plane"]], ["add", "theorem", "two_lt_line_count", ["configuration", "projective_plane"]], ["add", "theorem", "two_lt_point_count", ["configuration", "projective_plane"]]]}]}, {"timestamp": 1643040232, "sha": "9150268c", "message": "feat (algebraic_geometry): Constructions of fibred products of schemes (#11450)\nThis is the first half of the PRs about constructing fibred products of schemes, where we\nconstruct all the relevant schemes and morphisms but yet to show that they are actually\nfibred products.", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/pullbacks.lean", "changes": [["add", "def", "V", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "cocycle", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "cocycle_fst_fst_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "cocycle_fst_fst_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "cocycle_fst_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "cocycle_snd_fst_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "cocycle_snd_fst_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "cocycle_snd_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "fV", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "glued_lift", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "glued_lift_p1", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "glued_lift_p2", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "glued_lift_pullback_map", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "glued_lift_pullback_map_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "glued_lift_pullback_map_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "gluing", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "p1", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "p2", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "p_comm", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "t'", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t'_fst_fst_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t'_fst_fst_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t'_fst_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t'_snd_fst_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t'_snd_fst_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t'_snd_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "def", "t", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t_fst_fst", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t_fst_snd", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t_id", ["algebraic_geometry", "Scheme", "pullback"]], ["add", "theorem", "t_snd", ["algebraic_geometry", "Scheme", "pullback"]]]}]}, {"timestamp": 1643034036, "sha": "4a6709bc", "message": "feat(data/{int,nat}/gcd): add `nat.gcd_greatest` (#11611)\nAdd lemma characterising `gcd` in `ℕ`, counterpart of `int.gcd_greatest`. Also add shorter proof of `int.gcd_greatest`.", "changes": [{"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "gcd_greatest", ["nat"]]]}]}, {"timestamp": 1643034033, "sha": "bc2f73f7", "message": "feat(topology/uniform_space/uniform_convergence): Product of `tendsto_uniformly` (#11562)\nThis PR adds lemmas `tendsto_uniformly_on.prod` and `tendsto_uniformly.prod`.", "changes": [{"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "prod", ["tendsto_uniformly"]], ["add", "theorem", "prod_map", ["tendsto_uniformly"]], ["add", "theorem", "prod", ["tendsto_uniformly_on"]], ["add", "theorem", "prod_map", ["tendsto_uniformly_on"]]]}]}, {"timestamp": 1643028440, "sha": "f99af7da", "message": "chore(data/set/lattice): Generalize more `⋃`/`⋂` lemmas to dependent families (#11516)\nThe \"bounded union\" and \"bounded intersection\" are both instances of nested `⋃`/`⋂`. But they only apply when the inner one runs over a predicate `p : ι → Prop`, and the resulting set couldn't depend on `p`. This generalizes to `κ : ι → Sort*` and allows dependence on `κ i`.\nThe lemmas are renamed from `bUnion`/`bInter` to `Union₂`/`Inter₂` to show that they are more general. Some generalizations lead to unification problems, so I've kept the `b` version around.\nSome lemmas were missing between `⋃` and `⋂` or between `⋃`/`⋂` and nested `⋃`/`⋂`, so I'm adding them as well.\nRenames", "changes": [{"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": [["mod", "theorem", "Union_subset", ["box_integral", "prepartition"]]]}, {"oldPath": "src/analysis/box_integral/partition/tagged.lean", "newPath": "src/analysis/box_integral/partition/tagged.lean", "changes": [["mod", "theorem", "Union_subset", ["box_integral", "tagged_prepartition"]]]}, {"oldPath": "src/analysis/convex/simplicial_complex/basic.lean", "newPath": "src/analysis/convex/simplicial_complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/data/set/accumulate.lean", "newPath": "src/data/set/accumulate.lean", "changes": []}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_congr", ["set"]], ["add", "theorem", "Inter_congr_of_surjective", ["set"]], ["add", "theorem", "Inter_mono'", ["set"]], ["add", "theorem", "Inter_mono", ["set"]], ["del", "theorem", "Inter_subset_Inter2", ["set"]], ["del", "theorem", "Inter_subset_Inter", ["set"]], ["add", "theorem", "Inter_subset_Inter₂", ["set"]], ["mod", "theorem", "Inter_subset_of_subset", ["set"]], ["add", "theorem", "Inter₂_congr", ["set"]], ["add", "theorem", "Inter₂_eq_empty_iff", ["set"]], ["add", "theorem", "Inter₂_mono'", ["set"]], ["add", "theorem", "Inter₂_mono", ["set"]], ["add", "theorem", "Inter₂_subset", ["set"]], ["mod", "theorem", "Union_Inter_subset", ["set"]], ["mod", "theorem", "Union_congr", ["set"]], ["add", "theorem", "Union_congr_of_surjective", ["set"]], ["add", "theorem", "Union_mono'", ["set"]], ["add", "theorem", "Union_mono", ["set"]], ["mod", "theorem", "Union_prod_const", ["set"]], ["mod", "theorem", "Union_range_eq_Union", ["set"]], ["add", "theorem", "Union_set_of", ["set"]], ["mod", "theorem", "Union_subset", ["set"]], ["del", "theorem", "Union_subset_Union2", ["set"]], ["del", "theorem", "Union_subset_Union", ["set"]], ["mod", "theorem", "Union_subset_iff", ["set"]], ["add", "theorem", "Union₂_congr", ["set"]], ["add", "theorem", "Union₂_eq_univ_iff", ["set"]], ["add", "theorem", "Union₂_inter", ["set"]], ["add", "theorem", "Union₂_mono'", ["set"]], ["add", "theorem", "Union₂_mono", ["set"]], ["add", "theorem", "Union₂_prod_const", ["set"]], ["add", "theorem", "Union₂_subset", ["set"]], ["add", "theorem", "Union₂_subset_Union", ["set"]], ["add", "theorem", "Union₂_subset_iff", ["set"]], ["del", "theorem", "bInter_congr", ["set"]], ["del", "theorem", "bInter_eq_empty_iff", ["set"]], ["del", "theorem", "bInter_mono'", ["set"]], ["mod", "theorem", "bInter_mono", ["set"]], ["del", "theorem", "bUnion_congr", ["set"]], ["del", "theorem", "bUnion_eq_univ_iff", ["set"]], ["del", "theorem", "bUnion_inter", ["set"]], ["mod", "theorem", "bUnion_mono", ["set"]], ["del", "theorem", "bUnion_prod_const", ["set"]], ["del", "theorem", "bUnion_subset", ["set"]], ["del", "theorem", "bUnion_subset_Union", ["set"]], ["del", "theorem", "bUnion_subset_bUnion", ["set"]], ["add", "theorem", "compl_Inter₂", ["set"]], ["add", "theorem", "compl_Union₂", ["set"]], ["del", "theorem", "compl_bInter", ["set"]], ["del", "theorem", "compl_bUnion", ["set"]], ["add", "theorem", "image2_Inter_subset_left", ["set"]], ["add", "theorem", "image2_Inter_subset_right", ["set"]], ["add", "theorem", "image2_Inter₂_subset_left", ["set"]], ["add", "theorem", "image2_Inter₂_subset_right", ["set"]], ["add", "theorem", "image2_Union₂_left", ["set"]], ["add", "theorem", "image2_Union₂_right", ["set"]], ["add", "theorem", "image_Inter₂_subset", ["set"]], ["add", "theorem", "image_Union₂", ["set"]], ["del", "theorem", "image_bInter_subset", ["set"]], ["del", "theorem", "image_bUnion", ["set"]], ["add", "theorem", "inter_Union₂", ["set"]], ["del", "theorem", "inter_bUnion", ["set"]], ["add", "theorem", "maps_to_Inter₂", ["set"]], ["add", "theorem", "maps_to_Inter₂_Inter₂", ["set"]], ["add", "theorem", "maps_to_Union₂", ["set"]], ["add", "theorem", "maps_to_Union₂_Union₂", ["set"]], ["del", "theorem", "maps_to_bInter", ["set"]], ["del", "theorem", "maps_to_bInter_bInter", ["set"]], ["del", "theorem", "maps_to_bUnion", ["set"]], ["del", "theorem", "maps_to_bUnion_bUnion", ["set"]], ["mod", "theorem", "mem_Inter", ["set"]], ["mod", "theorem", "mem_Inter_of_mem", ["set"]], ["mod", "theorem", "mem_Inter₂", ["set"]], ["add", "theorem", "mem_Inter₂_of_mem", ["set"]], ["mod", "theorem", "mem_Union", ["set"]], ["add", "theorem", "mem_Union_of_mem", ["set"]], ["mod", "theorem", "mem_Union₂", ["set"]], ["add", "theorem", "mem_Union₂_of_mem", ["set"]], ["add", "theorem", "nonempty_Inter₂", ["set"]], ["del", "theorem", "nonempty_bInter", ["set"]], ["mod", "theorem", "preimage_Inter", ["set"]], ["add", "theorem", "preimage_Inter₂", ["set"]], ["mod", "theorem", "preimage_Union", ["set"]], ["add", "theorem", "preimage_Union₂", ["set"]], ["del", "theorem", "preimage_bInter", ["set"]], ["del", "theorem", "preimage_bUnion", ["set"]], ["mod", "theorem", "prod_Union", ["set"]], ["add", "theorem", "prod_Union₂", ["set"]], ["del", "theorem", "prod_bUnion", ["set"]], ["mod", "theorem", "subset_Inter_iff", ["set"]], ["add", "theorem", "subset_Inter₂", ["set"]], ["add", "theorem", "subset_Inter₂_iff", ["set"]], ["add", "theorem", "subset_Union_of_subset", ["set"]], ["add", "theorem", "subset_Union₂", ["set"]], ["del", "theorem", "subset_bInter", ["set"]], ["del", "theorem", "subset_subset_Union", ["set"]], ["add", "theorem", "surj_on_Union₂", ["set"]], ["add", "theorem", "surj_on_Union₂_Union₂", ["set"]], ["del", "theorem", "surj_on_bUnion", ["set"]], ["del", "theorem", "surj_on_bUnion_bUnion", ["set"]], ["mod", "theorem", "union_distrib_Inter_left", ["set"]], ["mod", "theorem", "union_distrib_Inter_right", ["set"]], ["add", "theorem", "union_distrib_Inter₂_left", ["set"]], ["add", "theorem", "union_distrib_Inter₂_right", ["set"]], ["del", "theorem", "union_distrib_bInter_left", ["set"]], ["del", "theorem", "union_distrib_bInter_right", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/function/uniform_integrable.lean", "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/residual.lean", "newPath": "src/number_theory/liouville/residual.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/pi.lean", "newPath": "src/order/filter/pi.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "interior_Inter₂_subset", []], ["del", "theorem", "interior_bInter_subset", []]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/shrinking_lemma.lean", "newPath": "src/topology/metric_space/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_convergence.lean", "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": []}]}, {"timestamp": 1643026734, "sha": "ee36571e", "message": "feat(algebra/lie/cartan_subalgebra): add self-normalizing characterisation for Lie subalgebra (#11598)", "changes": [{"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": [["add", "theorem", "mem_normalizer_iff'", ["lie_subalgebra"]], ["add", "theorem", "normalizer_eq_self_iff", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "neg_mem_iff", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "mk_eq_zero", ["lie_submodule"]], ["add", "theorem", "to_submodule_eq_coe", ["lie_submodule"]]]}]}, {"timestamp": 1643024085, "sha": "dac4f405", "message": "feat(analysis/normed_space/linear_isometry): `to_linear_equiv_trans` (#11628)\nAdd a lemma relating `trans` for `linear_isometry_equiv` and\n`linear_equiv`.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "to_linear_equiv_trans", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1643024084, "sha": "ed903019", "message": "feat(group_theory/commuting_probability): Commuting probability inequalities (#11564)\nThis PR adds some inequalities for the commuting probability.", "changes": [{"oldPath": "src/group_theory/commuting_probability.lean", "newPath": "src/group_theory/commuting_probability.lean", "changes": [["add", "theorem", "inv_card_commutator_le_comm_prob", []], ["add", "theorem", "comm_prob_quotient_le", ["subgroup"]], ["add", "theorem", "comm_prob_subgroup_le", ["subgroup"]]]}]}, {"timestamp": 1643018558, "sha": "9ef7f6bd", "message": "feat(linear_algebra/orientation): `eq_neg_iff_eq_neg` (#11629)\nAdd two more `module.ray` lemmas about negation.", "changes": [{"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "theorem", "neg_involutive", ["module", "ray"]]]}]}, {"timestamp": 1643018557, "sha": "7ddb9a3c", "message": "refactor(order/ideal): Generalize definition and lemmas (#11421)\n* Generalize the `order_top` instance to `[nonempty P] [is_directed P (≤)]`.\n* Delete `order.ideal.ideal_inter_nonempty` in favor of the equivalent condition `is_directed P (swap (≤))`.\n* Delete `order.ideal.sup`/`order.ideal.inf` in favor of a direct instance declaration.\n* Generalize defs/lemmas from `preorder` to `has_le` or `partial_order` to `preorder`.\n* Two more `is_directed` lemmas and instances for `order_bot` and `order_top`.", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["mod", "def", "is_atom", []], ["mod", "def", "is_coatom", []]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "directed_id_iff", []], ["del", "theorem", "directed_id_iff_is_directed", []], ["add", "theorem", "directed_on_univ", []], ["add", "theorem", "directed_on_univ_iff", []]]}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["mod", "theorem", "is_maximal", ["is_coatom"]], ["mod", "theorem", "is_proper", ["is_coatom"]], ["mod", "theorem", "bot_mem", ["order", "ideal"]], ["add", "theorem", "coe_inj", ["order", "ideal"]], ["add", "theorem", "coe_injective", ["order", "ideal"]], ["mod", "theorem", "coe_top", ["order", "ideal"]], ["mod", "theorem", "eq_sup_of_le_sup", ["order", "ideal"]], ["del", "theorem", "ext'_iff", ["order", "ideal"]], ["mod", "theorem", "ext", ["order", "ideal"]], ["add", "theorem", "ext_iff", ["order", "ideal"]], ["del", "theorem", "ext_set_eq", ["order", "ideal"]], ["del", "def", "inf", ["order", "ideal"]], ["mod", "theorem", "inter_nonempty", ["order", "ideal"]], ["del", "theorem", "is_ideal", ["order", "ideal"]], ["mod", "theorem", "is_coatom'", ["order", "ideal", "is_maximal"]], ["mod", "theorem", "is_coatom", ["order", "ideal", "is_maximal"]], ["mod", "theorem", "is_maximal_iff_is_coatom", ["order", "ideal"]], ["mod", "theorem", "ne_top", ["order", "ideal", "is_proper"]], ["mod", "theorem", "top_not_mem", ["order", "ideal", "is_proper"]], ["mod", "theorem", "is_proper_iff_ne_top", ["order", "ideal"]], ["mod", "theorem", "is_proper_of_ne_top", ["order", "ideal"]], ["mod", "theorem", "mem_inf", ["order", "ideal"]], ["mod", "theorem", "mem_principal", ["order", "ideal"]], ["mod", "theorem", "mem_sup", ["order", "ideal"]], ["del", "def", "sup", ["order", "ideal"]], ["del", "theorem", "sup_le", ["order", "ideal"]], ["del", "theorem", "top_of_mem_top", ["order", "ideal"]], ["add", "theorem", "top_of_top_mem", ["order", "ideal"]], ["mod", "structure", "ideal", ["order"]], ["mod", "def", "to_ideal", ["order", "is_ideal"]], ["mod", "structure", "is_ideal", ["order"]], ["mod", "theorem", "mem_ideal_of_cofinals", ["order"]]]}]}, {"timestamp": 1643018556, "sha": "9becbc7c", "message": "feat(algebra/order/rearrangement) : Rearrangement Inequality (#10861)\nA range of variants of the rearrangement inequality.\nThis is stated with scalar multiplication of a linear ring over an additive linear group, rather than having everything be in a linear ring. We couldn't find general statements of the rearrangement inequality in the literature, but this very much seems like an improvement.", "changes": [{"oldPath": null, "newPath": "src/algebra/order/rearrangement.lean", "changes": [["add", "theorem", "sum_mul_le_sum_comp_perm_mul", ["antivary"]], ["add", "theorem", "sum_mul_le_sum_mul_comp_perm", ["antivary"]], ["add", "theorem", "sum_smul_le_sum_comp_perm_smul", ["antivary"]], ["add", "theorem", "sum_smul_le_sum_smul_comp_perm", ["antivary"]], ["add", "theorem", "sum_mul_le_sum_comp_perm_mul", ["antivary_on"]], ["add", "theorem", "sum_mul_le_sum_mul_comp_perm", ["antivary_on"]], ["add", "theorem", "sum_smul_le_sum_comp_perm_smul", ["antivary_on"]], ["add", "theorem", "sum_smul_le_sum_smul_comp_perm", ["antivary_on"]], ["add", "theorem", "sum_comp_perm_mul_le_sum_mul", ["monovary"]], ["add", "theorem", "sum_comp_perm_smul_le_sum_smul", ["monovary"]], ["add", "theorem", "sum_mul_comp_perm_le_sum_mul", ["monovary"]], ["add", "theorem", "sum_smul_comp_perm_le_sum_smul", ["monovary"]], ["add", "theorem", "sum_comp_perm_mul_le_sum_mul", ["monovary_on"]], ["add", "theorem", "sum_comp_perm_smul_le_sum_smul", ["monovary_on"]], ["add", "theorem", "sum_mul_comp_perm_le_sum_mul", ["monovary_on"]], ["add", "theorem", "sum_smul_comp_perm_le_sum_smul", ["monovary_on"]]]}, {"oldPath": "src/order/monovary.lean", "newPath": "src/order/monovary.lean", "changes": []}]}, {"timestamp": 1643009097, "sha": "8c64be0b", "message": "chore(category_theory/abelian): Moved more stuff into `pseudoelement` locale (#11621)\nThe `ext` lemma triggers unwantedly in lots of places.", "changes": [{"oldPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": [["mod", "theorem", "zero_morphism_ext'", ["category_theory", "abelian", "pseudoelement"]], ["mod", "theorem", "zero_morphism_ext", ["category_theory", "abelian", "pseudoelement"]]]}]}, {"timestamp": 1643003669, "sha": "8f73b079", "message": "feat(set_theory/surreal/dyadic): define add_monoid_hom structure on dyadic map (#11052)\nThe proof is mechanical and mostly requires unraveling definitions.\nThe above map cannot be extended to ring morphism as so far there's not multiplication structure on surreal numbers.", "changes": [{"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "log_mul", ["submonoid"]], ["mod", "theorem", "log_pow_eq_self", ["submonoid"]], ["add", "theorem", "pow_apply", ["submonoid"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "lift_on_zero", ["localization"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": [["mod", "def", "dyadic_map", ["surreal"]], ["add", "theorem", "dyadic_map_apply", ["surreal"]], ["add", "theorem", "dyadic_map_apply_pow", ["surreal"]]]}]}, {"timestamp": 1642996346, "sha": "32cd2787", "message": "feat(analysis/asymptotics): add a few lemmas (#11623)\n* rename `is_o.tendsto_0` to `is_o.tendsto_div_nhds_zero`, add `is_o.tendsto_inv_smul_nhds_zero`;\n* add `is_o_const_left` and `filter.is_bounded_under.is_o_sub_self_inv`.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["del", "theorem", "tendsto_0", ["asymptotics", "is_o"]], ["add", "theorem", "tendsto_div_nhds_zero", ["asymptotics", "is_o"]], ["add", "theorem", "tendsto_inv_smul_nhds_zero", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_const_left", ["asymptotics"]], ["add", "theorem", "is_o_const_left_of_ne", ["asymptotics"]], ["mod", "theorem", "is_O_const", ["filter", "is_bounded_under"]]]}, {"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": [["add", "theorem", "is_o_sub_self_inv", ["filter", "is_bounded_under"]]]}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "tendsto_norm_sub_self_punctured_nhds", []]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}]}, {"timestamp": 1642990698, "sha": "095c46c2", "message": "feat(linear_algebra/basis): `reindex_refl` (#11626)\nAdd a `simp` lemma about applying `basis.reindex` with `equiv.refl`.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "reindex_refl", ["basis"]]]}]}, {"timestamp": 1642952625, "sha": "5449ffa4", "message": "feat(data/nat/prime): factors of non-prime powers (#11546)\nAdds the result `pow_factors_to_finset`, fills in `factors_mul_to_finset_of_coprime` for the sake of completion, and adjusts statements to take `ne_zero` rather than pos assumptions.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "ext", ["list", "to_finset"]], ["add", "theorem", "ext_iff", ["list", "to_finset"]]]}, {"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factorization_mul_support", ["nat"]], ["del", "theorem", "factorization_mul_support_of_pos", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "coprime_factors_disjoint", ["nat"]], ["del", "theorem", "factors_mul_of_coprime", ["nat"]], ["del", "theorem", "factors_mul_of_pos", ["nat"]], ["add", "theorem", "factors_mul_to_finset", ["nat"]], ["add", "theorem", "factors_mul_to_finset_of_coprime", ["nat"]], ["mod", "theorem", "mem_factors", ["nat"]], ["add", "theorem", "mem_factors_mul", ["nat"]], ["add", "theorem", "mem_factors_mul_of_coprime", ["nat"]], ["del", "theorem", "mem_factors_mul_of_pos", ["nat"]], ["add", "theorem", "pow_factors_to_finset", ["nat"]], ["add", "theorem", "pow_succ_factors_to_finset", ["nat"]], ["mod", "theorem", "prime_pow_prime_divisor", ["nat"]]]}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}]}, {"timestamp": 1642946113, "sha": "59ef8ce5", "message": "feat(measure_theory/measure): assorted lemmas (#11612)\n* add `ae_disjoint_compl_left/right`;\n* deduce `restrict_to_measurable` and `restrict_to_measurable_of_sigma_finite` from @sgouezel 's lemmas about measures of intersections;\n* add `ae_restrict_mem₀`;\n* add `ae_eq_univ`.", "changes": [{"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": [["add", "theorem", "ae_disjoint_compl_left", ["measure_theory"]], ["add", "theorem", "ae_disjoint_compl_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_restrict_iff'", ["measure_theory"]], ["mod", "theorem", "ae_restrict_mem", ["measure_theory"]], ["add", "theorem", "ae_restrict_mem₀", ["measure_theory"]], ["add", "theorem", "restrict_to_measurable", ["measure_theory", "measure"]], ["add", "theorem", "restrict_to_measurable_of_sigma_finite", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "ae_eq_univ", ["measure_theory"]]]}]}, {"timestamp": 1642935561, "sha": "d0f392e1", "message": "feat(analysis/calculus/inverse): a map which approximates a linear map on a set admits a nice global extension (#11568)\nAnd several other results on maps that are well approximated by linear maps on some subset of the space (not necessarily open).", "changes": [{"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "approximates_linear_on_iff_lipschitz_on_with", ["approximates_linear_on"]], ["add", "theorem", "exists_homeomorph_extension", ["approximates_linear_on"]], ["mod", "theorem", "open_image", ["approximates_linear_on"]], ["add", "def", "to_homeomorph", ["approximates_linear_on"]], ["add", "theorem", "to_inv", ["approximates_linear_on"]], ["add", "theorem", "approximates_linear_on_empty", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "antilipschitz_of_bound", ["continuous_linear_map"]], ["add", "theorem", "bound_of_antilipschitz", ["continuous_linear_map"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "Ici_mem_at_top", ["filter"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "forall_of_forall_mem_ball", ["metric"]], ["add", "theorem", "forall_of_forall_mem_closed_ball", ["metric"]]]}]}, {"timestamp": 1642923881, "sha": "b1ad3012", "message": "feat(number_theory/cyclotomic/basic): add missing lemmas (#11451)\nWe add some missing lemmas about cyclotomic extensions.\nFrom flt-regular.", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["add", "theorem", "eq_adjoin_primitive_root", ["cyclotomic_ring"]], ["add", "theorem", "adjoin_primitive_root_eq_top", ["is_cyclotomic_extension"]], ["add", "theorem", "adjoin_roots_cyclotomic_eq_adjoin_root_cyclotomic", ["is_cyclotomic_extension"]]]}]}, {"timestamp": 1642908371, "sha": "9a517cf0", "message": "chore(analysis/normed/group/completion): fix attribution (#11614)\nThis code was written by @jcommelin in #6189 but somehow acquired my name during a refactor (#10055). I don't think I've ever touched it!", "changes": [{"oldPath": "src/analysis/normed/group/completion.lean", "newPath": "src/analysis/normed/group/completion.lean", "changes": []}]}, {"timestamp": 1642905945, "sha": "2babfeb0", "message": "chore(data/complex/is_R_or_C): squeeze simps (#11251)\nThis PR squeezes most of the simps in `is_R_or_C`, and updates the module docstring.", "changes": [{"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": [["mod", "theorem", "norm_coe_norm", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "theorem", "I_im'", ["is_R_or_C"]], ["mod", "theorem", "I_im", ["is_R_or_C"]], ["mod", "theorem", "I_mul_re", ["is_R_or_C"]], ["mod", "theorem", "I_re", ["is_R_or_C"]], ["mod", "theorem", "I_to_real", ["is_R_or_C"]], ["mod", "theorem", "abs_abs", ["is_R_or_C"]], ["mod", "theorem", "abs_cast_nat", ["is_R_or_C"]], ["mod", "theorem", "abs_conj", ["is_R_or_C"]], ["mod", "theorem", "abs_div", ["is_R_or_C"]], ["mod", "theorem", "abs_eq_zero", ["is_R_or_C"]], ["mod", "theorem", "abs_inv", ["is_R_or_C"]], ["mod", "theorem", "abs_mul", ["is_R_or_C"]], ["mod", "theorem", "abs_neg", ["is_R_or_C"]], ["mod", "theorem", "abs_one", ["is_R_or_C"]], ["mod", "theorem", "abs_pos", ["is_R_or_C"]], ["mod", "theorem", "abs_to_real", ["is_R_or_C"]], ["mod", "theorem", "abs_two", ["is_R_or_C"]], ["mod", "theorem", "abs_zero", ["is_R_or_C"]], ["mod", "theorem", "bit0_im", ["is_R_or_C"]], ["mod", "theorem", "bit0_re", ["is_R_or_C"]], ["mod", "theorem", "bit1_im", ["is_R_or_C"]], ["mod", "theorem", "bit1_re", ["is_R_or_C"]], ["mod", "theorem", "conj_I", ["is_R_or_C"]], ["mod", "theorem", "conj_ae_coe", ["is_R_or_C"]], ["mod", "theorem", "conj_bit0", ["is_R_or_C"]], ["mod", "theorem", "conj_bit1", ["is_R_or_C"]], ["mod", "theorem", "conj_cle_apply", ["is_R_or_C"]], ["mod", "theorem", "conj_cle_coe", ["is_R_or_C"]], ["mod", "theorem", "conj_cle_norm", ["is_R_or_C"]], ["mod", "theorem", "conj_eq_re_sub_im", ["is_R_or_C"]], ["mod", "theorem", "conj_im", ["is_R_or_C"]], ["mod", "theorem", "conj_lie_apply", ["is_R_or_C"]], ["mod", "theorem", "conj_neg_I", ["is_R_or_C"]], ["mod", "theorem", "conj_of_real", ["is_R_or_C"]], ["mod", "theorem", "conj_re", ["is_R_or_C"]], ["mod", "theorem", "conj_smul", ["is_R_or_C"]], ["mod", "theorem", "conj_to_real", ["is_R_or_C"]], ["mod", "theorem", "div_I", ["is_R_or_C"]], ["mod", "theorem", "im_clm_apply", ["is_R_or_C"]], ["mod", "theorem", "im_clm_coe", ["is_R_or_C"]], ["mod", "theorem", "im_lm_coe", ["is_R_or_C"]], ["mod", "theorem", "im_to_real", ["is_R_or_C"]], ["mod", "theorem", "int_cast_im", ["is_R_or_C"]], ["mod", "theorem", "int_cast_re", ["is_R_or_C"]], ["mod", "theorem", "inv_I", ["is_R_or_C"]], ["mod", "theorem", "inv_im", ["is_R_or_C"]], ["mod", "theorem", "inv_re", ["is_R_or_C"]], ["mod", "theorem", "mul_im", ["is_R_or_C"]], ["mod", "theorem", "mul_re", ["is_R_or_C"]], ["mod", "theorem", "nat_cast_im", ["is_R_or_C"]], ["mod", "theorem", "nat_cast_re", ["is_R_or_C"]], ["mod", "theorem", "norm_conj", ["is_R_or_C"]], ["mod", "theorem", "norm_eq_abs", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_conj", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_div", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_eq_zero", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_inv", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_mul", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_neg", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_of_real", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_one", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_pos", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_sub", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_to_real", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_zero", ["is_R_or_C"]], ["mod", "theorem", "of_real_add", ["is_R_or_C"]], ["mod", "theorem", "of_real_am_coe", ["is_R_or_C"]], ["mod", "theorem", "of_real_bit0", ["is_R_or_C"]], ["mod", "theorem", "of_real_bit1", ["is_R_or_C"]], ["mod", "theorem", "of_real_clm_apply", ["is_R_or_C"]], ["mod", "theorem", "of_real_clm_coe", ["is_R_or_C"]], ["mod", "theorem", "of_real_clm_norm", ["is_R_or_C"]], ["mod", "theorem", "of_real_div", ["is_R_or_C"]], ["mod", "theorem", "of_real_eq_zero", ["is_R_or_C"]], ["mod", "theorem", "of_real_finsupp_prod", ["is_R_or_C"]], ["mod", "theorem", "of_real_finsupp_sum", ["is_R_or_C"]], ["mod", "theorem", "of_real_im", ["is_R_or_C"]], ["mod", "theorem", "of_real_int_cast", ["is_R_or_C"]], ["mod", "theorem", "of_real_inv", ["is_R_or_C"]], ["mod", "theorem", "of_real_li_apply", ["is_R_or_C"]], ["mod", "theorem", "of_real_mul", ["is_R_or_C"]], ["mod", "theorem", "of_real_mul_im", ["is_R_or_C"]], ["mod", "theorem", "of_real_mul_re", ["is_R_or_C"]], ["mod", "theorem", "of_real_nat_cast", ["is_R_or_C"]], ["mod", "theorem", "of_real_neg", ["is_R_or_C"]], ["mod", "theorem", "of_real_one", ["is_R_or_C"]], ["mod", "theorem", "of_real_pow", ["is_R_or_C"]], ["mod", "theorem", "of_real_prod", ["is_R_or_C"]], ["mod", "theorem", "of_real_rat_cast", ["is_R_or_C"]], ["mod", "theorem", "of_real_re", ["is_R_or_C"]], ["mod", "theorem", "of_real_smul", ["is_R_or_C"]], ["mod", "theorem", "of_real_sub", ["is_R_or_C"]], ["mod", "theorem", "of_real_sum", ["is_R_or_C"]], ["mod", "theorem", "of_real_zero", ["is_R_or_C"]], ["mod", "theorem", "of_real_zpow", ["is_R_or_C"]], ["mod", "theorem", "one_im", ["is_R_or_C"]], ["mod", "theorem", "one_re", ["is_R_or_C"]], ["mod", "theorem", "rat_cast_im", ["is_R_or_C"]], ["mod", "theorem", "rat_cast_re", ["is_R_or_C"]], ["mod", "theorem", "re_add_im", ["is_R_or_C"]], ["mod", "theorem", "re_clm_apply", ["is_R_or_C"]], ["mod", "theorem", "re_clm_coe", ["is_R_or_C"]], ["mod", "theorem", "re_clm_norm", ["is_R_or_C"]], ["mod", "theorem", "re_lm_coe", ["is_R_or_C"]], ["mod", "theorem", "re_to_real", ["is_R_or_C"]], ["mod", "theorem", "smul_im", ["is_R_or_C"]], ["mod", "theorem", "smul_re", ["is_R_or_C"]], ["mod", "theorem", "zero_re'", ["is_R_or_C"]]]}]}, {"timestamp": 1642894788, "sha": "84dbe7ba", "message": "feat(measure_theory/covering): Lebesgue density points (#11554)\nWe show in the general context of differentiation of measures that `μ (s ∩ a) / μ a` converges, when `a` shrinks towards a point `x`, to `1` for almost every `x` in `s`, and to `0` for almost every point outside of `s`. In other words, almost every point of `s` is a Lebesgue density points of `s`. Of course, this requires assumptions on allowed sets `a`. We state this in the general context of Vitali families. We also give easier to use versions in spaces with the Besicovitch property (e.g., final dimensional real vector spaces), where one can take for `a` the closed balls centered at `x`.", "changes": [{"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": [["add", "theorem", "ae_tendsto_measure_inter_div", ["besicovitch"]], ["add", "theorem", "ae_tendsto_measure_inter_div_of_measurable_set", ["besicovitch"]], ["add", "theorem", "ae_tendsto_rn_deriv", ["besicovitch"]], ["mod", "theorem", "exists_disjoint_closed_ball_covering_ae", ["besicovitch"]], ["mod", "theorem", "exists_disjoint_closed_ball_covering_ae_aux", ["besicovitch"]], ["add", "theorem", "tendsto_filter_at", ["besicovitch"]]]}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": [["add", "theorem", "ae_tendsto_measure_inter_div", ["vitali_family"]], ["add", "theorem", "ae_tendsto_measure_inter_div_of_measurable_set", ["vitali_family"]]]}, {"oldPath": "src/measure_theory/covering/vitali_family.lean", "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": [["add", "theorem", "eventually_filter_at_measurable_set", ["vitali_family"]]]}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["add", "theorem", "rn_deriv_restrict", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "with_density_indicator_one", ["measure_theory"]]]}]}, {"timestamp": 1642890536, "sha": "a196f9be", "message": "chore(measure_theory/probability_mass_function): Move pmf monad operations into a seperate file (#11579)\nThis PR moves the `pure`, `bind`, and `bind_on_support` operations on `pmf` into a new `probability_mass_function/monad.lean` file.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": [["del", "def", "bind", ["pmf"]], ["del", "theorem", "bind_apply", ["pmf"]], ["del", "theorem", "bind_bind", ["pmf"]], ["del", "theorem", "bind_comm", ["pmf"]], ["del", "theorem", "bind_pure", ["pmf"]], ["del", "theorem", "coe_bind_apply", ["pmf"]], ["del", "theorem", "mem_support_bind_iff", ["pmf"]], ["del", "theorem", "mem_support_pure_iff:", ["pmf"]], ["del", "def", "pure", ["pmf"]], ["del", "theorem", "pure_apply", ["pmf"]], ["del", "theorem", "pure_bind", ["pmf"]], ["del", "theorem", "support_bind", ["pmf"]], ["del", "theorem", "support_pure", ["pmf"]]]}, {"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": [["del", "def", "bind_on_support", ["pmf"]], ["del", "theorem", "bind_on_support_apply", ["pmf"]], ["del", "theorem", "bind_on_support_bind_on_support", ["pmf"]], ["del", "theorem", "bind_on_support_comm", ["pmf"]], ["del", "theorem", "bind_on_support_eq_bind", ["pmf"]], ["del", "theorem", "bind_on_support_eq_zero_iff", ["pmf"]], ["del", "theorem", "bind_on_support_pure", ["pmf"]], ["del", "theorem", "coe_bind_on_support_apply", ["pmf"]], ["del", "theorem", "mem_support_bind_on_support_iff", ["pmf"]], ["del", "theorem", "pure_bind_on_support", ["pmf"]], ["del", "theorem", "support_bind_on_support", ["pmf"]]]}, {"oldPath": null, "newPath": "src/measure_theory/probability_mass_function/monad.lean", "changes": [["add", "def", "bind", ["pmf"]], ["add", "theorem", "bind_apply", ["pmf"]], ["add", "theorem", "bind_bind", ["pmf"]], ["add", "theorem", "bind_comm", ["pmf"]], ["add", "def", "bind_on_support", ["pmf"]], ["add", "theorem", "bind_on_support_apply", ["pmf"]], ["add", "theorem", "bind_on_support_bind_on_support", ["pmf"]], ["add", "theorem", "bind_on_support_comm", ["pmf"]], ["add", "theorem", "bind_on_support_eq_bind", ["pmf"]], ["add", "theorem", "bind_on_support_eq_zero_iff", ["pmf"]], ["add", "theorem", "bind_on_support_pure", ["pmf"]], ["add", "theorem", "bind_pure", ["pmf"]], ["add", "theorem", "coe_bind_apply", ["pmf"]], ["add", "theorem", "coe_bind_on_support_apply", ["pmf"]], ["add", "theorem", "mem_support_bind_iff", ["pmf"]], ["add", "theorem", "mem_support_bind_on_support_iff", ["pmf"]], ["add", "theorem", "mem_support_pure_iff:", ["pmf"]], ["add", "def", "pure", ["pmf"]], ["add", "theorem", "pure_apply", ["pmf"]], ["add", "theorem", "pure_bind", ["pmf"]], ["add", "theorem", "pure_bind_on_support", ["pmf"]], ["add", "theorem", "support_bind", ["pmf"]], ["add", "theorem", "support_bind_on_support", ["pmf"]], ["add", "theorem", "support_pure", ["pmf"]]]}]}, {"timestamp": 1642890535, "sha": "31db25b4", "message": "feat(topology/instances/ennreal): continuity of subtraction on ennreal (#11527)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "mul_inv", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "inv_lt_inv", ["nnreal"]], ["add", "theorem", "inv_lt_inv_iff", ["nnreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_sub", ["ennreal"]]]}]}, {"timestamp": 1642884835, "sha": "159d9aca", "message": "split(order/max): Split off `order.basic` (#11603)\nThis moves `is_bot`, `is_top`, `no_min_order`, `no_max_order` to a new file `order.max`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "exists_gt", []], ["del", "theorem", "exists_lt", []], ["del", "theorem", "unique", ["is_bot"]], ["del", "def", "is_bot", []], ["del", "theorem", "is_bot_or_exists_lt", []], ["del", "theorem", "unique", ["is_top"]], ["del", "def", "is_top", []], ["del", "theorem", "is_top_or_exists_gt", []], ["del", "theorem", "not_is_bot", []], ["del", "theorem", "not_is_top", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/max.lean", "changes": [["add", "theorem", "to_dual", ["is_bot"]], ["add", "theorem", "unique", ["is_bot"]], ["add", "def", "is_bot", []], ["add", "theorem", "is_bot_or_exists_lt", []], ["add", "theorem", "to_dual", ["is_top"]], ["add", "theorem", "unique", ["is_top"]], ["add", "def", "is_top", []], ["add", "theorem", "is_top_or_exists_gt", []], ["add", "theorem", "not_is_bot", []], ["add", "theorem", "not_is_top", []]]}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": [["del", "theorem", "to_dual", ["is_bot"]], ["del", "theorem", "to_dual", ["is_top"]]]}]}, {"timestamp": 1642881608, "sha": "5080d64d", "message": "feat(topology): add a few lemmas (#11607)\n* add `homeomorph.preimage_interior`, `homeomorph.image_interior`,\n reorder lemmas;\n* add `is_open.smul₀` and `interior_smul₀`.", "changes": [{"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["add", "theorem", "interior_smul₀", []], ["add", "theorem", "smul₀", ["is_open"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "image_interior", ["homeomorph"]], ["add", "theorem", "preimage_interior", ["homeomorph"]]]}]}, {"timestamp": 1642876686, "sha": "bd3b892f", "message": "move(order/hom/order): Move from `order.hom.lattice` (#11601)\nRename `order.hom.lattice` into `order.hom.order` to make space for lattice homomorphisms, as opposed to the lattice of order homomorphisms.", "changes": [{"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/order.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1642876685, "sha": "206b56ec", "message": "doc(group_theory.quotient_group): Fix typos in main statement list (#11581)\nThis now matches the docstring for the declaration in question.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1642876683, "sha": "155cf1df", "message": "feat(group_theory/abelianization): add mul_equiv.abelianization_congr (#11466)", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["add", "theorem", "lift_of", ["abelianization"]], ["add", "def", "map", ["abelianization"]], ["add", "theorem", "map_comp", ["abelianization"]], ["add", "theorem", "map_id", ["abelianization"]], ["add", "theorem", "map_map_apply", ["abelianization"]], ["add", "theorem", "map_of", ["abelianization"]], ["add", "theorem", "mk_eq_of", ["abelianization"]], ["add", "theorem", "abelianization_congr_of", []], ["add", "theorem", "abelianization_congr_refl", []], ["add", "theorem", "abelianization_congr_symm", []], ["add", "theorem", "abelianization_congr_trans", []], ["add", "def", "abelianization_congr", ["mul_equiv"]]]}]}, {"timestamp": 1642874724, "sha": "7ba08d3c", "message": "fix(category_theory/triangulated): Fix definition of pretriangulated (#11596)\nThe original definition unfolds to `(T₁ : triangle C) (T₁ ∈ distinguished_triangles) (T₂ : triangle C) (T₁ : triangle C) (e : T₁ ≅ T₂)`, where the two `T₁` are referring to different triangles.", "changes": [{"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": []}]}, {"timestamp": 1642870841, "sha": "d1b51655", "message": "chore(group_theory/nilpotent): golf some proofs (#11599)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}]}, {"timestamp": 1642868282, "sha": "fbf3c643", "message": "chore(analysis/normed_space/star): golf some lemmas (#11600)", "changes": [{"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": []}]}, {"timestamp": 1642856778, "sha": "504e1f60", "message": "feat(group_theory.nilpotent): add *_central_series_one G 1 = … simp lemmas (#11584)\nanalogously to the existing `_zero` lemmas", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "lower_central_series_one", []], ["add", "theorem", "upper_central_series_one", []]]}]}, {"timestamp": 1642856777, "sha": "b630b8cd", "message": "feat(order/antichain): Strong antichains (#11400)\nThis introduces a predicate `is_strong_antichain` to state that a set is a strong antichain with respect to a relation.\n`s` is a strong (upward) antichain wrt `r` if for all `a ≠ b` in `s` there is some `c` such that `¬ r a c` or `¬ r b c`. A strong downward antichain of the swapped relation.", "changes": [{"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/order/antichain.lean", "newPath": "src/order/antichain.lean", "changes": [["del", "theorem", "eq_of_related'", ["is_antichain"]], ["del", "theorem", "eq_of_related", ["is_antichain"]], ["add", "theorem", "eq", ["is_strong_antichain"]], ["add", "theorem", "image", ["is_strong_antichain"]], ["add", "theorem", "mono", ["is_strong_antichain"]], ["add", "theorem", "preimage", ["is_strong_antichain"]], ["add", "theorem", "swap", ["is_strong_antichain"]], ["add", "def", "is_strong_antichain", []], ["add", "theorem", "is_strong_antichain_insert", []], ["add", "theorem", "is_strong_antichain", ["set", "subsingleton"]]]}, {"oldPath": "src/order/minimal.lean", "newPath": "src/order/minimal.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}]}, {"timestamp": 1642852898, "sha": "0ca77959", "message": "feat(algebra/algebra/operations): remove two hypotheses from `submodule.mul_induction_on` (#11533)\n`h0 : C 0` followed trivially from `hm 0 _ 0 _`.\n`hs : ∀ (r : R) x, C x → C (r • x)` follows nontrivially from an analogy to the `add_submonoid` case.\nThis also adds:\n* a `pow_induction` variant.\n* primed variants for when the motive depends on the proof term (such as the proof field in a subtype)", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "mul_to_add_submonoid", ["submodule"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}]}, {"timestamp": 1642806466, "sha": "5e9c0a56", "message": "feat(group_theory/subgroup/basic): add center_le_normalizer (#11590)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "center_le_normalizer", ["subgroup"]]]}]}, {"timestamp": 1642803587, "sha": "d99f2fd7", "message": "chore(analysis/normed/group/basic): merge `norm` and `semi_norm` lemmas on `prod` and `pi` (#11492)\n`norm` and `semi_norm` are the same operator, so there is no need to have two sets of lemmas.\nAs a result the elaborator needs a few hints for some applications of the `pi` lemmas, but this is par for the course for pi typeclass instances anyway.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["mod", "theorem", "norm_le_pi_norm", []], ["del", "theorem", "pi_nnsemi_norm_const", []], ["mod", "theorem", "pi_norm_le_iff", []], ["mod", "theorem", "pi_norm_lt_iff", []], ["del", "theorem", "pi_semi_norm_const", []], ["del", "theorem", "pi_semi_norm_le_iff", []], ["del", "theorem", "pi_semi_norm_lt_iff", []], ["del", "theorem", "nnsemi_norm_def", ["prod"]], ["del", "theorem", "semi_norm_def", ["prod"]], ["del", "theorem", "semi_norm_fst_le", []], ["del", "theorem", "semi_norm_le_pi_norm", []], ["del", "theorem", "semi_norm_prod_le_iff", []], ["del", "theorem", "semi_norm_snd_le", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_matrix_le_iff", []], ["del", "theorem", "semi_norm_matrix_le_iff", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1642800840, "sha": "0653975e", "message": "chore(category_theory/sites): Generalize universes for the comparison lemma. (#11588)", "changes": [{"oldPath": "src/category_theory/limits/kan_extension.lean", "newPath": "src/category_theory/limits/kan_extension.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_lifting.lean", "newPath": "src/category_theory/sites/cover_lifting.lean", "changes": []}, {"oldPath": "src/category_theory/sites/dense_subsite.lean", "newPath": "src/category_theory/sites/dense_subsite.lean", "changes": []}]}, {"timestamp": 1642793419, "sha": "049d2aca", "message": "feat(analysis/fourier): Fourier series for functions in L2; Parseval's identity (#11320)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": [["add", "theorem", "coe_fn_fourier_Lp", []], ["add", "theorem", "coe_fourier_series", []], ["add", "def", "fourier_series", []], ["add", "theorem", "fourier_series_repr", []], ["add", "theorem", "has_sum_fourier_series", []], ["add", "theorem", "tsum_sq_fourier_series_repr", []]]}]}, {"timestamp": 1642779651, "sha": "9c39019f", "message": "refactor(src/order/bounded): Invert iff direction (#11582)\nThat way, `unbounded_gt_iff_unbounded_ge` corresponds to `unbounded_lt_iff_unbounded_le`.", "changes": [{"oldPath": "src/order/bounded.lean", "newPath": "src/order/bounded.lean", "changes": [["del", "theorem", "unbounded_ge_iff_unbounded_gt", []], ["add", "theorem", "unbounded_gt_iff_unbounded_ge", []]]}]}, {"timestamp": 1642762470, "sha": "ca795135", "message": "feat(order/bounded): Proved many lemmas about bounded and unbounded sets (#11179)\nThese include more convenient characterizations of unboundedness in preorders and linear orders, and many results about bounded intervals and initial segments.", "changes": [{"oldPath": null, "newPath": "src/order/bounded.lean", "changes": [["add", "theorem", "mono", ["bounded"]], ["add", "theorem", "rel_mono", ["bounded"]], ["add", "theorem", "bounded_ge_Icc", []], ["add", "theorem", "bounded_ge_Ici", []], ["add", "theorem", "bounded_ge_Ico", []], ["add", "theorem", "bounded_ge_Ioc", []], ["add", "theorem", "bounded_ge_Ioi", []], ["add", "theorem", "bounded_ge_Ioo", []], ["add", "theorem", "bounded_ge_iff_bounded_gt", []], ["add", "theorem", "bounded_ge_inter_ge", []], ["add", "theorem", "bounded_ge_inter_gt", []], ["add", "theorem", "bounded_ge_inter_not_ge", []], ["add", "theorem", "bounded_ge_of_bounded_gt", []], ["add", "theorem", "bounded_gt_Icc", []], ["add", "theorem", "bounded_gt_Ici", []], ["add", "theorem", "bounded_gt_Ico", []], ["add", "theorem", "bounded_gt_Ioc", []], ["add", "theorem", "bounded_gt_Ioi", []], ["add", "theorem", "bounded_gt_Ioo", []], ["add", "theorem", "bounded_gt_inter_ge", []], ["add", "theorem", "bounded_gt_inter_gt", []], ["add", "theorem", "bounded_gt_inter_not_gt", []], ["add", "theorem", "bounded_inter_not", []], ["add", "theorem", "bounded_le_Icc", []], ["add", "theorem", "bounded_le_Ico", []], ["add", "theorem", "bounded_le_Iic", []], ["add", "theorem", "bounded_le_Iio", []], ["add", "theorem", "bounded_le_Ioc", []], ["add", "theorem", "bounded_le_Ioo", []], ["add", "theorem", "bounded_le_iff_bounded_lt", []], ["add", "theorem", "bounded_le_inter_le", []], ["add", "theorem", "bounded_le_inter_lt", []], ["add", "theorem", "bounded_le_inter_not_le", []], ["add", "theorem", "bounded_le_of_bounded_lt", []], ["add", "theorem", "bounded_lt_Icc", []], ["add", "theorem", "bounded_lt_Ico", []], ["add", "theorem", "bounded_lt_Iic", []], ["add", "theorem", "bounded_lt_Iio", []], ["add", "theorem", "bounded_lt_Ioc", []], ["add", "theorem", "bounded_lt_Ioo", []], ["add", "theorem", "bounded_lt_inter_le", []], ["add", "theorem", "bounded_lt_inter_lt", []], ["add", "theorem", "bounded_lt_inter_not_lt", []], ["add", "theorem", "bounded_self", []], ["add", "theorem", "mono", ["unbounded"]], ["add", "theorem", "rel_mono", ["unbounded"]], ["add", "theorem", "unbounded_ge_iff", []], ["add", "theorem", "unbounded_ge_iff_unbounded_gt", []], ["add", "theorem", "unbounded_ge_iff_unbounded_inter_ge", []], ["add", "theorem", "unbounded_ge_inter_gt", []], ["add", "theorem", "unbounded_ge_inter_not_ge", []], ["add", "theorem", "unbounded_ge_of_forall_exists_gt", []], ["add", "theorem", "unbounded_gt_iff", []], ["add", "theorem", "unbounded_gt_inter_gt", []], ["add", "theorem", "unbounded_gt_inter_not_gt", []], ["add", "theorem", "unbounded_gt_of_forall_exists_ge", []], ["add", "theorem", "unbounded_gt_of_unbounded_ge", []], ["add", "theorem", "unbounded_inter_ge", []], ["add", "theorem", "unbounded_inter_not", []], ["add", "theorem", "unbounded_le_Ici", []], ["add", "theorem", "unbounded_le_Ioi", []], ["add", "theorem", "unbounded_le_iff", []], ["add", "theorem", "unbounded_le_inter_le", []], ["add", "theorem", "unbounded_le_inter_lt", []], ["add", "theorem", "unbounded_le_inter_not_le", []], ["add", "theorem", "unbounded_le_of_forall_exists_lt", []], ["add", "theorem", "unbounded_lt_Ici", []], ["add", "theorem", "unbounded_lt_Ioi", []], ["add", "theorem", "unbounded_lt_iff", []], ["add", "theorem", "unbounded_lt_iff_unbounded_le", []], ["add", "theorem", "unbounded_lt_inter_le", []], ["add", "theorem", "unbounded_lt_inter_lt", []], ["add", "theorem", "unbounded_lt_inter_not_lt", []], ["add", "theorem", "unbounded_lt_of_forall_exists_le", []], ["add", "theorem", "unbounded_lt_of_unbounded_le", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_lt_of_left_lt", []], ["add", "theorem", "inf_lt_of_right_lt", []], ["add", "theorem", "lt_sup_of_lt_left", []], ["add", "theorem", "lt_sup_of_lt_right", []]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["mod", "def", "bounded", []]]}]}, {"timestamp": 1642740395, "sha": "884d8137", "message": "chore(analysis/inner_product_space/dual): remove unneeded `complete_space` assumption in four lemmas (#11578)\nWe remove the `[complete_space E]` assumption in four lemmas.", "changes": [{"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}]}, {"timestamp": 1642734457, "sha": "80e072ec", "message": "feat(data/finset/basic): random golf (#11576)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}]}, {"timestamp": 1642724170, "sha": "d71cab9f", "message": "feat(analysis/seminorm): add composition with linear maps (#11477)\nThis PR defines the composition of seminorms with linear maps and shows that composition is monotone and calculates the seminorm ball of the composition.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "add_comp", ["seminorm"]], ["add", "theorem", "ball_comp", ["seminorm"]], ["add", "theorem", "coe_comp", ["seminorm"]], ["add", "def", "comp", ["seminorm"]], ["add", "theorem", "comp_apply", ["seminorm"]], ["add", "theorem", "comp_comp", ["seminorm"]], ["add", "theorem", "comp_id", ["seminorm"]], ["add", "theorem", "comp_mono", ["seminorm"]], ["add", "theorem", "comp_smul", ["seminorm"]], ["add", "theorem", "comp_smul_apply", ["seminorm"]], ["add", "theorem", "comp_triangle", ["seminorm"]], ["add", "theorem", "comp_zero", ["seminorm"]], ["add", "theorem", "smul_comp", ["seminorm"]], ["add", "theorem", "zero_apply", ["seminorm"]], ["add", "theorem", "zero_comp", ["seminorm"]]]}]}, {"timestamp": 1642718737, "sha": "6c97821d", "message": "feat(group_theory/submonoid/pointwise): add pointwise multiplication to `add_submonoid`s (#11522)", "changes": [{"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["add", "theorem", "bot_mul", ["add_submonoid"]], ["add", "theorem", "closure_mul_closure", ["add_submonoid"]], ["add", "theorem", "mul_bot", ["add_submonoid"]], ["add", "theorem", "mul_le", ["add_submonoid"]], ["add", "theorem", "mul_le_mul", ["add_submonoid"]], ["add", "theorem", "mul_le_mul_left", ["add_submonoid"]], ["add", "theorem", "mul_le_mul_right", ["add_submonoid"]], ["add", "theorem", "mul_mem_mul", ["add_submonoid"]], ["add", "theorem", "mul_subset_mul", ["add_submonoid"]]]}]}, {"timestamp": 1642707350, "sha": "adadd4af", "message": "feat(measure_theory/function/lp_space): some variations of Markov's inequality formulated using `snorm` (#11478)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "meas_ge_le_mul_pow_norm", ["measure_theory", "Lp"]], ["add", "theorem", "mul_meas_ge_le_pow_norm'", ["measure_theory", "Lp"]], ["add", "theorem", "mul_meas_ge_le_pow_norm", ["measure_theory", "Lp"]], ["add", "theorem", "pow_mul_meas_ge_le_norm", ["measure_theory", "Lp"]], ["add", "theorem", "meas_ge_le_mul_pow_snorm", ["measure_theory"]], ["add", "theorem", "mul_meas_ge_le_pow_snorm'", ["measure_theory"]], ["add", "theorem", "mul_meas_ge_le_pow_snorm", ["measure_theory"]], ["add", "theorem", "pow_mul_meas_ge_le_snorm", ["measure_theory"]]]}]}, {"timestamp": 1642702407, "sha": "8c9074f8", "message": "chore(*): Remove tactic.unfreeze_local_instances (#11507)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": []}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/combinatorics/hall/finite.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}]}, {"timestamp": 1642700765, "sha": "dfca2b0f", "message": "feat(data/sym/sym2): add lemma that eq from distinct common members (#11563)\nTwo terms of type `sym2 a` are equal if one can find two distinct elements of type `a` that are members of both.", "changes": [{"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["add", "theorem", "eq_of_ne_mem", ["sym2"]]]}]}, {"timestamp": 1642697541, "sha": "b87449ab", "message": "feat(group_theory/nilpotent): Add equality theorems for nilpotency class (#11540)\nthe nilpotency class can be defined as the length of the\nupper central series, the lower central series, or as the shortest\nlength across all ascending or descending series.\nIn order to use the equivalence proofs between the various definition\nof nilpotency in these lemmas, I had to reorder them to put the `∃n` in\nfront.", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "is_ascending_rev_series_of_is_descending", []], ["add", "theorem", "is_decending_rev_series_of_is_ascending", []], ["add", "theorem", "least_ascending_central_series_length_eq_nilpotency_class", []], ["add", "theorem", "least_descending_central_series_length_eq_nilpotency_class", []], ["add", "theorem", "lower_central_series_length_eq_nilpotency_class", []]]}]}, {"timestamp": 1642694483, "sha": "b5e542d3", "message": "feat(measure_theory/measurable_space): defining a measurable function on countably many pieces (#11532)\nAlso, remove `open_locale classical` in this file and add decidability assumptions where needed. And add a few isolated useful lemmas.", "changes": [{"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "exists_measurable_piecewise_nat", []], ["add", "theorem", "find", ["measurable"]], ["add", "def", "pi_measurable_equiv_tprod", ["measurable_equiv"]], ["mod", "theorem", "measurable_find", []], ["mod", "theorem", "measurable_find_greatest'", []], ["mod", "theorem", "measurable_find_greatest", []], ["mod", "theorem", "measurable_from_prod_encodable", []], ["mod", "theorem", "measurable_set_pi_of_nonempty", []], ["mod", "theorem", "measurable_tprod_elim'", []], ["mod", "theorem", "measurable_tprod_elim", []], ["mod", "theorem", "measurable_update", []]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}]}, {"timestamp": 1642692570, "sha": "1d762c7e", "message": "feat(ring_theory/{norm.lean, trace.lean}): improve two statements. (#11569)\nThese statement are more precise.\nFrom flt-regular.", "changes": [{"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1642678383, "sha": "447928c9", "message": "feat(topology/uniform_space/uniform_convergence): Composition on the left (#11560)\nComposing on the left by a uniformly continuous function preserves uniform convergence.", "changes": [{"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "comp'", ["tendsto_uniformly"]], ["add", "theorem", "comp'", ["tendsto_uniformly_on"]]]}]}, {"timestamp": 1642674753, "sha": "5a40c33f", "message": "feat(analysis/inner_product_space/l2): a Hilbert space is isometrically isomorphic to `ℓ²` (#11255)\nDefine `orthogonal_family.linear_isometry_equiv`: the isometric isomorphism of a Hilbert space `E` with a Hilbert sum of a family of Hilbert spaces `G i`, induced by individual isometries of each `G i` into `E` whose images are orthogonal and span a dense subset of `E`.\nDefine a Hilbert basis of `E` to be an isometric isomorphism of `E` with `ℓ²(ι, 𝕜)`, the Hilbert sum of `ι` copies of `𝕜`. Prove that an orthonormal family of vectors in `E` whose span is dense in `E` has an associated Hilbert basis.\nProve that every Hilbert space admit a Hilbert basis.\nDelete three lemmas `maximal_orthonormal_iff_dense_span`, `exists_subset_is_orthonormal_dense_span`, `exists_is_orthonormal_dense_span` which previously expressed this existence theorem in a more awkward way (before the definition `ℓ²(ι, 𝕜)` was available).", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/inner_product_space/l2_space.lean", "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": [["add", "theorem", "exists_hilbert_basis", []], ["add", "structure", "hilbert_basis", []], ["add", "theorem", "inner_single_left", ["lp"]], ["add", "theorem", "inner_single_right", ["lp"]], ["add", "theorem", "exists_hilbert_basis_extension", ["orthonormal"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["del", "theorem", "exists_is_orthonormal_dense_span", []], ["del", "theorem", "exists_subset_is_orthonormal_dense_span", []], ["del", "theorem", "maximal_orthonormal_iff_dense_span", []]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_of_surjective", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1642669061, "sha": "53650a00", "message": "feat(*): lemmas about `disjoint` on `set`s and `filter`s (#11549)", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "ne_of_mem", ["disjoint"]], ["add", "theorem", "disjoint_iff_forall_ne", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "disjoint_comap", ["filter"]], ["add", "theorem", "disjoint_map", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_left", ["disjoint"]], ["add", "theorem", "closure_right", ["disjoint"]]]}]}, {"timestamp": 1642664623, "sha": "e96e55d8", "message": "feat(analysis/normed_space/finite_dimension): extending partially defined Lipschitz functions (#11530)\nAny Lipschitz function on a subset of a metric space, into a finite-dimensional real vector space, can be extended to a globally defined Lipschitz function (up to worsening slightly the Lipschitz constant).", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "coe_to_continuous_linear_equiv'", ["linear_equiv"]], ["add", "theorem", "coe_to_continuous_linear_equiv", ["linear_equiv"]], ["add", "theorem", "coe_to_continuous_linear_equiv_symm'", ["linear_equiv"]], ["add", "theorem", "coe_to_continuous_linear_equiv_symm", ["linear_equiv"]], ["mod", "def", "to_continuous_linear_equiv", ["linear_equiv"]], ["add", "theorem", "to_linear_equiv_to_continuous_linear_equiv", ["linear_equiv"]], ["add", "theorem", "to_linear_equiv_to_continuous_linear_equiv_symm", ["linear_equiv"]], ["add", "def", "lipschitz_extension_constant", []], ["add", "theorem", "lipschitz_extension_constant_pos", []], ["add", "theorem", "extend_finite_dimension", ["lipschitz_on_with"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["mod", "theorem", "continuous_at_of_locally_lipschitz", []], ["add", "theorem", "extend_pi", ["lipschitz_on_with"]], ["add", "theorem", "extend_real", ["lipschitz_on_with"]], ["add", "theorem", "comp_lipschitz_on_with", ["lipschitz_with"]]]}]}, {"timestamp": 1642646201, "sha": "0a8848ac", "message": "chore(topology/uniform_space/uniform_convergence): Golf some proofs (#11561)\nThis PR golfs a couple proofs.", "changes": [{"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": []}]}, {"timestamp": 1642637463, "sha": "656372c4", "message": "doc(group_theory/free_group): fix linkify (#11565)", "changes": [{"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}]}, {"timestamp": 1642632575, "sha": "0bb42725", "message": "chore(*): to_additive related cleanup (#11559)\nA few to_additive related cleanups\n* Move measurability before to_additive to avoid having to manually do it later (or forget).\n* Ensure anything tagged to_additive, mono has the additive version also mono'd\n* Move simp before to_additive", "changes": [{"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "measurable_set_mul_support", []]]}]}, {"timestamp": 1642619781, "sha": "7ee41aab", "message": "feat(data/finsupp/basic): lemmas about map domain with only inj_on hypotheses (#11484)\nAlso a lemma `sum_update_add` expressing the sum of an update in a monoid in terms of the original sum and the value of the update.\nAnd golf `map_domain_smul`.\nFrom flt-regular.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "map_domain_apply'", ["finsupp"]], ["add", "theorem", "map_domain_inj_on", ["finsupp"]], ["add", "theorem", "map_domain_support_of_inj_on", ["finsupp"]], ["add", "theorem", "sum_update_add", ["finsupp"]]]}]}, {"timestamp": 1642614065, "sha": "bbd0f769", "message": "chore(*): clean up comment strings in docstrings (#11557)\nThe syntax for these was wrong and showed up in doc-gen output unintentionally e.g.\nhttps://leanprover-community.github.io/mathlib_docs/algebra/group/opposite.html#add_monoid_hom.op", "changes": [{"oldPath": "src/algebra/category/Mon/filtered_colimits.lean", "newPath": "src/algebra/category/Mon/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1642608357, "sha": "a90f9692", "message": "feat(data/finset/slice): More `finset.slice` and antichain lemmas (#11397)\nAlso move `finset.coe_bUnion` to a more sensible location.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "coe_bUnion", ["finset"]]]}, {"oldPath": "src/data/finset/slice.lean", "newPath": "src/data/finset/slice.lean", "changes": [["add", "theorem", "bUnion_slice", ["finset"]], ["mod", "theorem", "pairwise_disjoint_slice", ["finset"]], ["add", "theorem", "sum_card_slice", ["finset"]], ["add", "theorem", "empty_mem_iff", ["set", "sized"]], ["add", "theorem", "subsingleton'", ["set", "sized"]], ["add", "theorem", "univ_mem_iff", ["set", "sized"]], ["add", "theorem", "sized_Union", ["set"]], ["add", "theorem", "sized_Union₂", ["set"]], ["add", "theorem", "sized_powerset_len", ["set"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subsingleton_of_forall_eq", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "coe_bUnion", ["finset"]]]}, {"oldPath": "src/order/antichain.lean", "newPath": "src/order/antichain.lean", "changes": [["add", "theorem", "bot_mem_iff", ["is_antichain"]], ["add", "theorem", "greatest_iff", ["is_antichain"]], ["add", "theorem", "least_iff", ["is_antichain"]], ["add", "theorem", "top_mem_iff", ["is_antichain"]], ["add", "theorem", "is_antichain_and_greatest_iff", []], ["add", "theorem", "is_antichain_and_least_iff", []], ["add", "theorem", "is_antichain_singleton", []], ["add", "theorem", "antichain_iff", ["is_greatest"]], ["add", "theorem", "antichain_iff", ["is_least"]], ["mod", "theorem", "is_antichain", ["set", "subsingleton"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "bot_mem_lower_bounds", []], ["add", "theorem", "is_greatest_top_iff", []], ["add", "theorem", "is_least_bot_iff", []], ["add", "theorem", "top_mem_upper_bounds", []]]}]}, {"timestamp": 1642606770, "sha": "c72e709e", "message": "feat(data/sum/interval): The disjoint sum of two locally finite orders is locally finite (#11351)\nThis proves `locally_finite_order (α ⊕ β)` where `α` and `β` are locally finite themselves.", "changes": [{"oldPath": null, "newPath": "src/data/sum/interval.lean", "changes": [["add", "theorem", "inl_mem_sum_lift₂", ["finset"]], ["add", "theorem", "inr_mem_sum_lift₂", ["finset"]], ["add", "theorem", "mem_sum_lift₂", ["finset"]], ["add", "def", "sum_lift₂", ["finset"]], ["add", "theorem", "sum_lift₂_eq_empty", ["finset"]], ["add", "theorem", "sum_lift₂_mono", ["finset"]], ["add", "theorem", "sum_lift₂_nonempty", ["finset"]], ["add", "theorem", "Icc_inl_inl", ["sum"]], ["add", "theorem", "Icc_inl_inr", ["sum"]], ["add", "theorem", "Icc_inr_inl", ["sum"]], ["add", "theorem", "Icc_inr_inr", ["sum"]], ["add", "theorem", "Ico_inl_inl", ["sum"]], ["add", "theorem", "Ico_inl_inr", ["sum"]], ["add", "theorem", "Ico_inr_inl", ["sum"]], ["add", "theorem", "Ico_inr_inr", ["sum"]], ["add", "theorem", "Ioc_inl_inl", ["sum"]], ["add", "theorem", "Ioc_inl_inr", ["sum"]], ["add", "theorem", "Ioc_inr_inl", ["sum"]], ["add", "theorem", "Ioc_inr_inr", ["sum"]], ["add", "theorem", "Ioo_inl_inl", ["sum"]], ["add", "theorem", "Ioo_inl_inr", ["sum"]], ["add", "theorem", "Ioo_inr_inl", ["sum"]], ["add", "theorem", "Ioo_inr_inr", ["sum"]]]}]}, {"timestamp": 1642597608, "sha": "dbf59ba1", "message": "feat(algebra/roots_of_unity): basic constructor (#11504)\nfrom flt-regular", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "coe_mk_of_pow_eq", ["roots_of_unity"]], ["add", "def", "mk_of_pow_eq", ["roots_of_unity"]]]}]}, {"timestamp": 1642593484, "sha": "7ddaf104", "message": "chore(algebra/algebra): algebra_map_int_eq (#11474)\nfrom flt-regular", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_int_eq", []]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["del", "theorem", "eval₂_algebra_map_int_X", ["polynomial"]], ["add", "theorem", "eval₂_int_cast_ring_hom_X", ["polynomial"]], ["del", "theorem", "ring_hom_eval₂_algebra_map_int", ["polynomial"]], ["add", "theorem", "ring_hom_eval₂_cast_int_ring_hom", ["polynomial"]]]}]}, {"timestamp": 1642587864, "sha": "4ad74aed", "message": "chore(algebra/order/sub): Generalize to `preorder` and `add_comm_semigroup` (#11463)\nThis generalizes a bunch of lemmas from `partial_order` to `preorder` and from `add_comm_monoid` to `add_comm_semigroup`.\nIt also adds `tsub_tsub_le_tsub_add : a - (b - c) ≤ a - b + c`.", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["mod", "theorem", "le_add_tsub'", []], ["mod", "theorem", "le_add_tsub_swap", []], ["add", "theorem", "tsub_tsub_le_tsub_add", []]]}]}, {"timestamp": 1642575229, "sha": "1cfb97d5", "message": "feat(analysis/normed/group/pointwise): the closed thickening of a compact set is the addition of a closed ball. (#11528)", "changes": [{"oldPath": "src/analysis/normed/group/pointwise.lean", "newPath": "src/analysis/normed/group/pointwise.lean", "changes": [["add", "theorem", "cthickening_eq_add_closed_ball", ["is_compact"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "cthickening_eq_bUnion_closed_ball", ["is_compact"]], ["add", "theorem", "closed_ball_subset_cthickening", ["metric"]], ["add", "theorem", "closed_ball_subset_cthickening_singleton", ["metric"]], ["add", "theorem", "cthickening_singleton", ["metric"]], ["add", "theorem", "thickening_singleton", ["metric"]]]}]}, {"timestamp": 1642575228, "sha": "ff9b7574", "message": "feat(category_theory/bicategory/locally_discrete): define locally discrete bicategory (#11402)\nThis PR defines the locally discrete bicategory on a category.", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/locally_discrete.lean", "changes": [["add", "def", "to_oplax_functor", ["category_theory", "functor"]], ["add", "def", "locally_discrete", ["category_theory"]]]}, {"oldPath": "src/category_theory/bicategory/strict.lean", "newPath": "src/category_theory/bicategory/strict.lean", "changes": [["add", "theorem", "eq_to_hom_whisker_right", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_left_eq_to_hom", ["category_theory", "bicategory"]]]}]}, {"timestamp": 1642539988, "sha": "6dd65257", "message": "feat(measure_theory/measure/measure_space): better definition of to_measurable (#11529)\nCurrently, `to_measurable μ t` picks a measurable superset of `t` with the same measure. When the measure of `t` is infinite, it is most often useless. This PR adjusts the definition so that, in the case of sigma-finite spaces, `to_measurable μ t` has good properties even when `t` has infinite measure.", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "is_locally_finite_measure_of_is_finite_measure_on_compacts", ["measure_theory"]], ["add", "theorem", "exists_subset_measure_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "measure_to_measurable_inter_of_sigma_finite", ["measure_theory", "measure"]], ["add", "theorem", "nonempty_inter_of_measure_lt_add'", ["measure_theory"]], ["add", "theorem", "nonempty_inter_of_measure_lt_add", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "ae_eq_set_inter", ["measure_theory"]], ["add", "theorem", "ae_le_set_inter", ["measure_theory"]], ["mod", "def", "to_measurable", ["measure_theory"]]]}]}, {"timestamp": 1642538327, "sha": "de53f9c4", "message": "feat(data/nat/factorization): add two convenience lemmas (#11543)\nAdds convenience lemmas `prime_of_mem_factorization` and `pos_of_mem_factorization`.\nAlso adds a different proof of `factorization_prod_pow_eq_self` that doesn't depend on `multiplicative_factorization` and so can appear earlier in the file.", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "pos_of_mem_factorization", ["nat"]], ["add", "theorem", "prime_of_mem_factorization", ["nat"]]]}]}, {"timestamp": 1642525716, "sha": "5a1cbe36", "message": "feat(linear_algebra,algebra,group_theory): miscellaneous lemmas linking some additive monoid and module operations (#11525)\nThis adds:\n* `submodule.map_to_add_submonoid`\n* `submodule.sup_to_add_submonoid`\n* `submodule.supr_to_add_submonoid`\nAs well as some missing `add_submonoid` lemmas copied from the `submodule` API:\n* `add_submonoid.closure_singleton_le_iff_mem`\n* `add_submonoid.mem_supr`\n* `add_submonoid.supr_eq_closure`\nFinally, it generalizes some indices in `supr` and `infi` lemmas from `Type*` to `Sort*`.\nThis is pre-work for removing a redundant hypothesis from `submodule.mul_induction_on`.", "changes": [{"oldPath": "src/algebra/algebra/bilinear.lean", "newPath": "src/algebra/algebra/bilinear.lean", "changes": [["add", "theorem", "lmul_left_to_add_monoid_hom", ["algebra"]], ["add", "theorem", "lmul_right_to_add_monoid_hom", ["algebra"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "closure_singleton_le_iff_mem", ["submonoid"]], ["add", "theorem", "mem_supr", ["submonoid"]], ["add", "theorem", "supr_eq_closure", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "infi_invariant", ["linear_map"]], ["mod", "theorem", "comap_infi_map_of_injective", ["submodule"]], ["mod", "theorem", "comap_supr_map_of_injective", ["submodule"]], ["mod", "theorem", "map_infi_comap_of_surjective", ["submodule"]], ["mod", "theorem", "map_supr_comap_of_sujective", ["submodule"]], ["add", "theorem", "map_to_add_submonoid", ["submodule"]], ["add", "theorem", "sup_to_add_subgroup", ["submodule"]], ["add", "theorem", "sup_to_add_submonoid", ["submodule"]], ["add", "theorem", "supr_to_add_submonoid", ["submodule"]]]}]}, {"timestamp": 1642522097, "sha": "a0ff65df", "message": "feat(ring_theory/norm): add is_integral_norm (#11489)\nWe add `is_integral_norm`.\nFrom flt-regular", "changes": [{"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["add", "theorem", "is_integral_norm", ["algebra"]], ["add", "theorem", "norm_eq_prod_roots", ["algebra"]], ["mod", "theorem", "prod_embeddings_eq_finrank_pow", ["algebra"]], ["add", "theorem", "norm_gen_eq_one", ["intermediate_field", "adjoin_simple"]], ["add", "theorem", "norm_gen_eq_prod_roots", ["intermediate_field", "adjoin_simple"]]]}]}, {"timestamp": 1642518808, "sha": "6f23973a", "message": "feat(ring_theory/graded_algebra/basic): add a helper for construction from an alg hom (#11541)\nMost graded algebras are already equipped with some kind of universal property which gives an easy way to build such an `alg_hom`.\nThis lemma makes it easier to discharge the associated proof obligations to show that this alg hom forms a decomposition.\nThis also relaxes a `ring` argument to `semiring`.", "changes": [{"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["add", "def", "of_alg_hom", ["graded_algebra"]]]}]}, {"timestamp": 1642508557, "sha": "496a744e", "message": "feat(measure_theory): generalize `null_of_locally_null` to `outer_measure`, add versions (#11535)\n* generalize `null_of_locally_null`;\n* don't intersect with `s` twice;\n* add a contraposed version;\n* golf.", "changes": [{"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "exists_mem_forall_mem_nhds_within_pos_measure", ["measure_theory"]], ["add", "theorem", "exists_ne_forall_mem_nhds_pos_measure_preimage", ["measure_theory"]], ["mod", "theorem", "null_of_locally_null", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "theorem", "exists_mem_forall_mem_nhds_within_pos", ["measure_theory", "outer_measure"]], ["add", "theorem", "null_of_locally_null", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "diam_le_of_subset_closed_ball", ["metric"]]]}]}, {"timestamp": 1642508555, "sha": "be9a5dec", "message": "feat(topology/separation): add `t1_space_tfae` (#11534)\nAlso add some lemmas about `filter.disjoint`.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "disjoint_principal_left", ["filter"]], ["add", "theorem", "disjoint_principal_principal", ["filter"]], ["add", "theorem", "disjoint_principal_right", ["filter"]], ["add", "theorem", "disjoint_pure_pure", ["filter"]], ["add", "theorem", "disjoint_basis_iff", ["filter", "has_basis"]], ["del", "theorem", "inf_eq_bot_iff", ["filter"]], ["del", "theorem", "le_iff_forall_disjoint_principal_compl", ["filter"]], ["del", "theorem", "mem_iff_disjoint_principal_compl", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "inf_eq_bot_iff", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "disjoint_nhds_pure", []], ["add", "theorem", "disjoint_pure_nhds", []], ["del", "theorem", "is_closed", ["finite"]], ["del", "theorem", "t1_iff_exists_open", []], ["del", "theorem", "t1_space_antimono", []], ["add", "theorem", "t1_space_antitone", []], ["add", "theorem", "t1_space_iff_disjoint_nhds_pure", []], ["add", "theorem", "t1_space_iff_disjoint_pure_nhds", []], ["add", "theorem", "t1_space_iff_exists_open", []], ["add", "theorem", "t1_space_tfae", []]]}]}, {"timestamp": 1642508554, "sha": "135a92d1", "message": "feat(data/set): two simple lemmas (#11531)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "image", ["disjoint"]], ["add", "theorem", "image_inter", ["set", "inj_on"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "mono", ["pairwise_disjoint"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}]}, {"timestamp": 1642508552, "sha": "5bbc187e", "message": "feat(algebra/lie/nilpotent): a non-trivial nilpotent Lie module has non-trivial maximal trivial submodule (#11515)\nThe main result is `lie_module.nontrivial_max_triv_of_is_nilpotent`", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": [["add", "theorem", "le_max_triv_iff_bracket_eq_bot", ["lie_module"]]]}, {"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": [["add", "theorem", "lie_eq_bot_iff", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "antitone_lower_central_series", ["lie_module"]], ["add", "theorem", "lower_central_series_last_le_max_triv", ["lie_module"]], ["add", "theorem", "nilpotency_length_eq_succ_iff", ["lie_module"]], ["add", "theorem", "nilpotency_length_eq_zero_iff", ["lie_module"]], ["add", "theorem", "nontrivial_lower_central_series_last", ["lie_module"]], ["add", "theorem", "nontrivial_max_triv_of_is_nilpotent", ["lie_module"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "lie_span_eq_bot_iff", ["lie_submodule"]], ["add", "theorem", "nontrivial_iff_ne_bot", ["lie_submodule"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nontrivial_mono", ["set"]]]}]}, {"timestamp": 1642503220, "sha": "a0da4f1f", "message": "feat(algebra/big_operators/basic): Reindexing a product with a permutation (#11344)\nThis proves `(∏ x in s, f (σ x)) = ∏ x in s, f x` for a permutation `σ`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_comp'", ["equiv", "perm"]], ["add", "theorem", "prod_comp", ["equiv", "perm"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "map_perm", ["finset"]]]}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "map_eq_of_subset", ["finset"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1642497283, "sha": "8d5caba3", "message": "chore(order/bounded_order): golf (#11538)", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "bot_lt_iff_ne_bot", []], ["mod", "theorem", "bot_unique", []], ["mod", "theorem", "eq_bot_iff", []], ["mod", "theorem", "eq_bot_mono", []], ["mod", "theorem", "eq_bot_of_minimal", []], ["mod", "theorem", "eq_bot_or_bot_lt", []], ["mod", "theorem", "eq_top_iff", []], ["mod", "theorem", "eq_top_mono", []], ["mod", "theorem", "eq_top_or_lt_top", []], ["mod", "theorem", "le_bot_iff", []], ["mod", "theorem", "ne_bot_of_gt", []], ["mod", "theorem", "ne_bot_of_le_ne_bot", []], ["mod", "theorem", "ne_top_of_le_ne_top", []], ["mod", "theorem", "ne_top_of_lt", []], ["mod", "theorem", "top_le_iff", []], ["mod", "theorem", "top_unique", []]]}]}, {"timestamp": 1642497281, "sha": "a217b9c3", "message": "feat(measure_theory): drop some `measurable_set` assumptions (#11536)\n* make `exists_subordinate_pairwise_disjoint` work for `null_measurable_set`s;\n* use `ae_disjoint` in `measure_Union₀`, drop `measure_Union_of_null_inter`;\n* prove `measure_inter_add_diff` for `null_measurable_set`s;\n* drop some `measurable_set` assumptions in `measure_union`, `measure_diff`, etc;\n* golf.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "weighted_smul_union'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "integral_diff", ["measure_theory"]], ["mod", "theorem", "integral_union", ["measure_theory"]], ["mod", "theorem", "integral_union_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/ae_disjoint.lean", "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": [["add", "theorem", "diff_ae_eq_left", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "diff_ae_eq_right", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "measure_diff_left", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "measure_diff_right", ["measure_theory", "ae_disjoint"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "exists_subordinate_pairwise_disjoint", ["measure_theory"]], ["add", "theorem", "restrict_union'", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union_add_inter'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union_add_inter₀", ["measure_theory", "measure"]], ["del", "theorem", "restrict_union_apply", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union₀", ["measure_theory", "measure"]], ["del", "theorem", "measure_Union_of_null_inter", ["measure_theory"]], ["mod", "theorem", "measure_diff", ["measure_theory"]], ["add", "theorem", "measure_diff_add_inter", ["measure_theory"]], ["mod", "theorem", "measure_diff_le_iff_le_add", ["measure_theory"]], ["mod", "theorem", "measure_diff_lt_of_lt_add", ["measure_theory"]], ["mod", "theorem", "measure_eq_measure_of_null_diff", ["measure_theory"]], ["add", "theorem", "measure_union'", ["measure_theory"]], ["mod", "theorem", "measure_union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "diff_null_ae_eq_self", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/null_measurable.lean", "newPath": "src/measure_theory/measure/null_measurable.lean", "changes": [["add", "theorem", "exists_subordinate_pairwise_disjoint", ["measure_theory"]], ["add", "theorem", "measure_inter_add_diff₀", ["measure_theory"]], ["add", "theorem", "measure_union_add_inter₀'", ["measure_theory"]], ["add", "theorem", "measure_union_add_inter₀", ["measure_theory"]], ["add", "theorem", "measure_union₀'", ["measure_theory"]], ["mod", "theorem", "measure_union₀", ["measure_theory"]], ["add", "theorem", "measure_union₀_aux", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": [["mod", "theorem", "exists_is_closed_lt_add", ["measurable_set"]], ["mod", "theorem", "exists_is_compact_lt_add", ["measurable_set"]], ["mod", "theorem", "exists_is_open_diff_lt", ["measurable_set"]], ["mod", "theorem", "exists_lt_is_compact_of_ne_top", ["measurable_set"]], ["mod", "theorem", "measure_eq_supr_is_closed_of_ne_top", ["measurable_set"]], ["mod", "theorem", "measure_eq_supr_is_compact_of_ne_top", ["measurable_set"]], ["mod", "theorem", "measurable_set_of_open", ["measure_theory", "measure", "inner_regular"]], ["mod", "theorem", "inner_regular_measurable", ["measure_theory", "measure", "regular"]], ["mod", "theorem", "inner_regular_measurable", ["measure_theory", "measure", "weakly_regular"]]]}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}]}, {"timestamp": 1642497279, "sha": "f23c00f2", "message": "chore(algebra/order/ring): move lemmas about invertible into a new file (#11511)\nThe motivation here is to eventually be able to use the `one_pow` lemma in `algebra.group.units`. This is one very small step in that direction.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/order/invertible.lean", "changes": [["add", "theorem", "inv_of_le_one", []], ["add", "theorem", "inv_of_lt_zero", []], ["add", "theorem", "inv_of_nonneg", []], ["add", "theorem", "inv_of_nonpos", []], ["add", "theorem", "inv_of_pos", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "inv_of_le_one", []], ["del", "theorem", "inv_of_lt_zero", []], ["del", "theorem", "inv_of_nonneg", []], ["del", "theorem", "inv_of_nonpos", []], ["del", "theorem", "inv_of_pos", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}]}, {"timestamp": 1642491951, "sha": "01fa7f52", "message": "feat(data/fintype/basic): `one_lt_card_iff` and `two_lt_card_iff` (#11524)\nThis PR adds `one_lt_card_iff` and `two_lt_card_iff`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "one_lt_card_iff", ["fintype"]], ["add", "theorem", "two_lt_card_iff", ["fintype"]]]}]}, {"timestamp": 1642489781, "sha": "e895c8fa", "message": "chore(cone_category): generalize universes (#11539)", "changes": [{"oldPath": "src/category_theory/limits/cone_category.lean", "newPath": "src/category_theory/limits/cone_category.lean", "changes": [["mod", "def", "of_preserves_cocone_initial", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_reflects_cocone_initial", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_preserves_cone_terminal", ["category_theory", "limits", "is_limit"]], ["mod", "def", "of_reflects_cone_terminal", ["category_theory", "limits", "is_limit"]]]}]}, {"timestamp": 1642478081, "sha": "813a191d", "message": "chore(logic/basic): Make higher `forall_congr`/`exists_congr` lemmas dependent (#11490)\nCurrently, `forall₂_congr` and friends take as arguments non dependent propositions like `p q : α → β → Prop`. This prevents them being useful virtually anywhere as most often foralls are nested like `∀ a, a ∈ s → ...` and `a ∈ s` depends on `a`.\nThis PR turns them into `Π a, β a → Prop` (and similar for higher arities).\nAs a bonus, it adds the `5`-ary version and golfs all occurrences of nested `forall_congr`s.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "exists₂_congr", []], ["mod", "theorem", "exists₃_congr", []], ["mod", "theorem", "exists₄_congr", []], ["add", "theorem", "exists₅_congr", []], ["mod", "theorem", "forall₂_congr", []], ["mod", "theorem", "forall₃_congr", []], ["mod", "theorem", "forall₄_congr", []], ["add", "theorem", "forall₅_congr", []]]}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": []}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["mod", "theorem", "continuous_on_const_smul_iff", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_convergence.lean", "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": []}]}, {"timestamp": 1642464659, "sha": "99e90364", "message": "chore(algebra/algebra/subalgebra): lemmas about top and injectivity (#11514)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "to_submodule_eq_top", ["algebra"]], ["add", "theorem", "to_subring_eq_top", ["algebra"]], ["add", "theorem", "to_subsemiring_eq_top", ["algebra"]], ["add", "theorem", "top_to_subring", ["algebra"]], ["add", "theorem", "to_subring_inj", ["subalgebra"]], ["add", "theorem", "to_subring_injective", ["subalgebra"]], ["add", "theorem", "to_subsemiring_inj", ["subalgebra"]], ["add", "theorem", "to_subsemiring_injective", ["subalgebra"]]]}]}, {"timestamp": 1642462963, "sha": "1e4da8d5", "message": "refactor(linear_algebra/{tensor,exterior}_algebra): convert to a directory (#11513)\nThese files can be quite slow, so it's useful to be able to add new definitions and lemmas in standalone files, rather than in the same file.\nThere are a number of open PRs of mine that make this move as part of a new feature, so let's just move them pre-emptively.", "changes": [{"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra/basic.lean", "changes": []}, {"oldPath": "test/free_algebra.lean", "newPath": "test/free_algebra.lean", "changes": []}]}, {"timestamp": 1642459159, "sha": "5b36c868", "message": "feat(analysis/normed_space/finite_dimension): the determinant is continuous on the space of continuous linear maps (#11526)", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "continuous_det", ["continuous_linear_map"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "coe_of_is_unit_det", ["linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1642457504, "sha": "40725122", "message": "feat(src/group_theory/nilpotent): solvable_of_nilpotent (#11512)\nfollowing the proof on\n", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "derived_le_lower_central", []]]}]}, {"timestamp": 1642453453, "sha": "274b5309", "message": "feat(data/equiv/basic): add `add_equiv.to_int_linear_equiv` (#11456)\nas written by @adamtopaz on [zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/injections.20to.20equiv/near/268038978)", "changes": [{"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["add", "theorem", "coe_to_int_linear_equiv", ["add_equiv"]], ["add", "theorem", "coe_to_linear_equiv", ["add_equiv"]], ["add", "theorem", "coe_to_linear_equiv_symm", ["add_equiv"]], ["add", "theorem", "coe_to_nat_linear_equiv", ["add_equiv"]], ["add", "def", "to_int_linear_equiv", ["add_equiv"]], ["add", "theorem", "to_int_linear_equiv_refl", ["add_equiv"]], ["add", "theorem", "to_int_linear_equiv_symm", ["add_equiv"]], ["add", "theorem", "to_int_linear_equiv_to_add_equiv", ["add_equiv"]], ["add", "theorem", "to_int_linear_equiv_trans", ["add_equiv"]], ["add", "def", "to_linear_equiv", ["add_equiv"]], ["add", "def", "to_nat_linear_equiv", ["add_equiv"]], ["add", "theorem", "to_nat_linear_equiv_refl", ["add_equiv"]], ["add", "theorem", "to_nat_linear_equiv_symm", ["add_equiv"]], ["add", "theorem", "to_nat_linear_equiv_to_add_equiv", ["add_equiv"]], ["add", "theorem", "to_nat_linear_equiv_trans", ["add_equiv"]], ["add", "theorem", "to_add_equiv_to_int_linear_equiv", ["linear_equiv"]], ["add", "theorem", "to_add_equiv_to_nat_linear_equiv", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "coe_to_linear_equiv", ["add_equiv"]], ["del", "theorem", "coe_to_linear_equiv_symm", ["add_equiv"]], ["del", "def", "to_linear_equiv", ["add_equiv"]]]}]}, {"timestamp": 1642449254, "sha": "1fbef63a", "message": "feat(order/filter): add two lemmas (#11519)\nTwo easy lemmas (from the sphere eversion project) and some minor style changes.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_ne_at_top", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "diff_mem", ["filter"]], ["mod", "theorem", "inter_mem", ["filter"]], ["mod", "theorem", "inter_mem_iff", ["filter"]], ["mod", "theorem", "mem_of_superset", ["filter"]]]}]}, {"timestamp": 1642449253, "sha": "e096b99a", "message": "refactor(set_theory/ordinal_arithmetic): Rename `power` to `opow` (#11279)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "add_lt_omega_opow", ["ordinal"]], ["del", "theorem", "add_lt_omega_power", ["ordinal"]], ["add", "theorem", "add_omega_opow", ["ordinal"]], ["del", "theorem", "add_omega_power", ["ordinal"]], ["add", "theorem", "le_opow_self", ["ordinal"]], ["del", "theorem", "le_power_self", ["ordinal"]], ["add", "theorem", "log_opow", ["ordinal"]], ["add", "theorem", "log_opow_mul_add", ["ordinal"]], ["del", "theorem", "log_power", ["ordinal"]], ["del", "theorem", "log_power_mul_add", ["ordinal"]], ["add", "theorem", "lt_opow_of_limit", ["ordinal"]], ["add", "theorem", "lt_opow_succ_log", ["ordinal"]], ["del", "theorem", "lt_power_of_limit", ["ordinal"]], ["del", "theorem", "lt_power_succ_log", ["ordinal"]], ["add", "theorem", "mul_lt_omega_opow", ["ordinal"]], ["del", "theorem", "mul_lt_omega_power", ["ordinal"]], ["add", "theorem", "mul_omega_opow_opow", ["ordinal"]], ["del", "theorem", "mul_omega_power_power", ["ordinal"]], ["add", "theorem", "nat_cast_opow", ["ordinal"]], ["del", "theorem", "nat_cast_power", ["ordinal"]], ["add", "theorem", "one_opow", ["ordinal"]], ["del", "theorem", "one_power", ["ordinal"]], ["add", "def", "opow", ["ordinal"]], ["add", "theorem", "opow_add", ["ordinal"]], ["add", "theorem", "opow_dvd_opow", ["ordinal"]], ["add", "theorem", "opow_dvd_opow_iff", ["ordinal"]], ["add", "theorem", "opow_is_limit", ["ordinal"]], ["add", "theorem", "opow_is_limit_left", ["ordinal"]], ["add", "theorem", "opow_is_normal", ["ordinal"]], ["add", "theorem", "opow_le_of_limit", ["ordinal"]], ["add", "theorem", "opow_le_opow_iff_right", ["ordinal"]], ["add", "theorem", "opow_le_opow_left", ["ordinal"]], ["add", "theorem", "opow_le_opow_right", ["ordinal"]], ["add", "theorem", "opow_limit", ["ordinal"]], ["add", "theorem", "opow_log_le", ["ordinal"]], ["add", "theorem", "opow_lt_omega", ["ordinal"]], ["add", "theorem", "opow_lt_opow_iff_right", ["ordinal"]], ["add", "theorem", "opow_lt_opow_left_of_succ", ["ordinal"]], ["add", "theorem", "opow_mul", ["ordinal"]], ["add", "theorem", "opow_mul_add_lt_opow_mul_succ", ["ordinal"]], ["add", "theorem", "opow_mul_add_lt_opow_succ", ["ordinal"]], ["add", "theorem", "opow_mul_add_pos", ["ordinal"]], ["add", "theorem", "opow_ne_zero", ["ordinal"]], ["add", "theorem", "opow_omega", ["ordinal"]], ["add", "theorem", "opow_one", ["ordinal"]], ["add", "theorem", "opow_pos", ["ordinal"]], ["add", "theorem", "opow_right_inj", ["ordinal"]], ["add", "theorem", "opow_succ", ["ordinal"]], ["add", "theorem", "opow_zero", ["ordinal"]], ["del", "def", "power", ["ordinal"]], ["del", "theorem", "power_add", ["ordinal"]], ["del", "theorem", "power_dvd_power", ["ordinal"]], ["del", "theorem", "power_dvd_power_iff", ["ordinal"]], ["del", "theorem", "power_is_limit", ["ordinal"]], ["del", "theorem", "power_is_limit_left", ["ordinal"]], ["del", "theorem", "power_is_normal", ["ordinal"]], ["del", "theorem", "power_le_of_limit", ["ordinal"]], ["del", "theorem", "power_le_power_iff_right", ["ordinal"]], ["del", "theorem", "power_le_power_left", ["ordinal"]], ["del", "theorem", "power_le_power_right", ["ordinal"]], ["del", "theorem", "power_limit", ["ordinal"]], ["del", "theorem", "power_log_le", ["ordinal"]], ["del", "theorem", "power_lt_omega", ["ordinal"]], ["del", "theorem", "power_lt_power_iff_right", ["ordinal"]], ["del", "theorem", "power_lt_power_left_of_succ", ["ordinal"]], ["del", "theorem", "power_mul", ["ordinal"]], ["del", "theorem", "power_mul_add_lt_power_mul_succ", ["ordinal"]], ["del", "theorem", "power_mul_add_lt_power_succ", ["ordinal"]], ["del", "theorem", "power_mul_add_pos", ["ordinal"]], ["del", "theorem", "power_ne_zero", ["ordinal"]], ["del", "theorem", "power_omega", ["ordinal"]], ["del", "theorem", "power_one", ["ordinal"]], ["del", "theorem", "power_pos", ["ordinal"]], ["del", "theorem", "power_right_inj", ["ordinal"]], ["del", "theorem", "power_succ", ["ordinal"]], ["del", "theorem", "power_zero", ["ordinal"]], ["add", "theorem", "zero_opow'", ["ordinal"]], ["add", "theorem", "zero_opow", ["ordinal"]], ["del", "theorem", "zero_power'", ["ordinal"]], ["del", "theorem", "zero_power", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": [["add", "def", "opow", ["nonote"]], ["del", "def", "power", ["nonote"]], ["add", "theorem", "repr_opow", ["nonote"]], ["del", "theorem", "repr_power", ["nonote"]], ["add", "theorem", "of_dvd_omega_opow", ["onote", "NF"]], ["del", "theorem", "of_dvd_omega_power", ["onote", "NF"]], ["add", "def", "opow", ["onote"]], ["add", "def", "opow_aux", ["onote"]], ["add", "theorem", "opow_def", ["onote"]], ["del", "def", "power", ["onote"]], ["del", "def", "power_aux", ["onote"]], ["del", "theorem", "power_def", ["onote"]], ["add", "theorem", "repr_opow", ["onote"]], ["add", "theorem", "repr_opow_aux₁", ["onote"]], ["add", "theorem", "repr_opow_aux₂", ["onote"]], ["del", "theorem", "repr_power", ["onote"]], ["del", "theorem", "repr_power_aux₁", ["onote"]], ["del", "theorem", "repr_power_aux₂", ["onote"]], ["add", "theorem", "scale_opow_aux", ["onote"]], ["del", "theorem", "scale_power_aux", ["onote"]]]}]}, {"timestamp": 1642446529, "sha": "2a8a01bc", "message": "chore(measure_theory/integral/bochner): use set_to_fun lemmas to prove integral properties (#10717)", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "weighted_smul_nonneg", ["measure_theory"]], ["add", "theorem", "weighted_smul_smul_measure", ["measure_theory"]]]}]}, {"timestamp": 1642434984, "sha": "905871f4", "message": "feat(analysis/normed_space/spectrum): an algebra homomorphism into the base field is bounded (#11494)\nWe prove basic facts about `φ : A →ₐ[𝕜] 𝕜` when `A` is a Banach algebra, namely that `φ` maps elements of `A` to their spectrum, and that `φ` is bounded.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "apply_mem_spectrum", ["alg_hom"]]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "continuous", ["alg_hom"]], ["add", "def", "to_continuous_linear_map", ["alg_hom"]], ["add", "theorem", "to_continuous_linear_map_norm", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "ker_ne_top", ["ring_hom"]]]}]}, {"timestamp": 1642432220, "sha": "4e313969", "message": "feat(measure_theory/measure): define `ae_disjoint` (#11500)\nI am going to migrate most `disjoint` assumptions to `ae_disjoint`.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/measure/ae_disjoint.lean", "changes": [["add", "theorem", "ae_disjoint", ["disjoint"]], ["add", "theorem", "Union_left_iff", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "Union_right_iff", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "exists_disjoint_diff", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "mono", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "mono_ae", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "of_null_left", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "of_null_right", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "union_left", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "union_left_iff", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "union_right", ["measure_theory", "ae_disjoint"]], ["add", "theorem", "union_right_iff", ["measure_theory", "ae_disjoint"]], ["add", "def", "ae_disjoint", ["measure_theory"]], ["add", "theorem", "exists_null_pairwise_disjoint_diff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "measure_mono_null_ae", ["measure_theory"]]]}]}, {"timestamp": 1642430603, "sha": "50bdb297", "message": "feat(analysis/complex/cauchy_integral): review docs, add versions without `off_countable` (#11417)", "changes": [{"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": [["add", "theorem", "circle_integral_sub_inv_smul_of_continuous_on_of_differentiable_on", ["complex"]], ["add", "theorem", "circle_integral_sub_inv_smul_of_differentiable_on", ["complex"]], ["add", "theorem", "has_fpower_series_on_ball_of_continuous_on_of_differentiable_on", ["complex"]], ["add", "theorem", "integral_boundary_rect_eq_zero_of_continuous_on_of_differentiable_on", ["complex"]], ["add", "theorem", "integral_boundary_rect_eq_zero_of_differentiable_on", ["complex"]], ["add", "theorem", "integral_boundary_rect_of_continuous_on_of_has_fderiv_at_real", ["complex"]], ["add", "theorem", "integral_boundary_rect_of_differentiable_on_real", ["complex"]], ["add", "theorem", "integral_boundary_rect_of_has_fderiv_at_real_off_countable", ["complex"]], ["del", "theorem", "integral_boundary_rect_of_has_fderiv_within_at_real_off_countable", ["complex"]]]}, {"oldPath": "src/analysis/complex/re_im_topology.lean", "newPath": "src/analysis/complex/re_im_topology.lean", "changes": [["add", "theorem", "re_prod_im", ["is_closed"]], ["add", "theorem", "re_prod_im", ["is_open"]]]}]}, {"timestamp": 1642419991, "sha": "391bd215", "message": "doc(src/data/equiv/transfer_instances): nontrivial, not nonzero (#11508)\nsmall docs typo, it seems.", "changes": [{"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}]}, {"timestamp": 1642414491, "sha": "6b475a41", "message": "feat(data/finset/basic): `finset.two_lt_card` (#11505)\nThis PR adds lemmas `finset.two_lt_card` and `finset.two_lt_card_iff`, similar to `finset.one_lt_card` and `finset.one_lt_card_iff`.\nThese lemmas are also similar to `finset.card_eq_three`.", "changes": [{"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "two_lt_card", ["finset"]], ["add", "theorem", "two_lt_card_iff", ["finset"]]]}]}, {"timestamp": 1642414490, "sha": "079fb166", "message": "feat(analysis/special_functions/complex/arg): `arg_neg` lemmas (#11503)\nAdd lemmas about the value of `arg (-x)`: one each for positive and\nnegative sign of `x.im`, two `iff` lemmas saying exactly when it's\nequal to `arg x - π` or `arg x + π`, and a simpler lemma giving the\nvalue of `(arg (-x) : real.angle)` for any nonzero `x`.\nThese replace the previous lemmas\n`arg_eq_arg_neg_add_pi_of_im_nonneg_of_re_neg` and\n`arg_eq_arg_neg_sub_pi_of_im_neg_of_re_neg`, which are strictly less\ngeneral (they have a hypothesis `x.re < 0` that's not needed unless\nthe imaginary part is 0). Those two lemmas are unused in current\nmathlib (they were used in the proof of `cos_arg` before the golfing\nin #10365) and it seems reasonable to me to replace them with the more\ngeneral lemmas.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["del", "theorem", "arg_eq_arg_neg_add_pi_of_im_nonneg_of_re_neg", ["complex"]], ["del", "theorem", "arg_eq_arg_neg_sub_pi_of_im_neg_of_re_neg", ["complex"]], ["add", "theorem", "arg_neg_coe_angle", ["complex"]], ["add", "theorem", "arg_neg_eq_arg_add_pi_iff", ["complex"]], ["add", "theorem", "arg_neg_eq_arg_add_pi_of_im_neg", ["complex"]], ["add", "theorem", "arg_neg_eq_arg_sub_pi_iff", ["complex"]], ["add", "theorem", "arg_neg_eq_arg_sub_pi_of_im_pos", ["complex"]]]}]}, {"timestamp": 1642414489, "sha": "1c56a8de", "message": "feat(order/well_founded_set): Antichains in a partial well order are finite (#11286)\nand when the relation is reflexive and symmetric, it's actually an equivalent condition.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_lt_map_eq_of_range_subset", ["set", "finite"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["mod", "theorem", "partially_well_ordered_on", ["finset"]], ["add", "theorem", "finite_of_partially_well_ordered_on", ["is_antichain"]], ["add", "theorem", "partially_well_ordered_on_iff", ["is_antichain"]], ["add", "theorem", "partially_well_ordered_on", ["set", "finite"]], ["add", "theorem", "partially_well_ordered_on_iff_finite_antichains", ["set"]]]}]}, {"timestamp": 1642408966, "sha": "0d5bfd7b", "message": "feat(*): add a few lemmas about `function.extend` (#11498)\nI'm going to use `function.extend` as another way to get from\n`[encodable ι] (s : ι → set α)` to `t : ℕ → set α` in measure theory.", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "apply_extend", ["function"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "supr_extend_bot", []]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "extend_bot", ["directed"]]]}]}, {"timestamp": 1642408965, "sha": "9b70cc61", "message": "feat(data/equiv/encodable): add a few lemmas (#11497)\n* add `simp` lemmas `encodable.encode_inj` and\n `encodable.decode₂_encode`;\n* add `encodable.decode₂_eq_some`;\n* avoid non-final `simp` in the proof of `encodable.Union_decode₂_disjoint_on`.", "changes": [{"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": [["add", "theorem", "decode₂_encode", ["encodable"]], ["add", "theorem", "decode₂_eq_some", ["encodable"]], ["add", "theorem", "encode_inj", ["encodable"]]]}, {"oldPath": "src/data/equiv/encodable/lattice.lean", "newPath": "src/data/equiv/encodable/lattice.lean", "changes": []}]}, {"timestamp": 1642408964, "sha": "ac76eb37", "message": "feat(algebra/star/unitary): lemmas about group_with_zero (#11493)", "changes": [{"oldPath": "src/algebra/star/unitary.lean", "newPath": "src/algebra/star/unitary.lean", "changes": [["add", "theorem", "coe_div", ["unitary"]], ["add", "theorem", "coe_inv", ["unitary"]], ["add", "theorem", "coe_zpow", ["unitary"]], ["add", "theorem", "mem_iff", ["unitary"]], ["add", "theorem", "mem_iff_self_mul_star", ["unitary"]], ["add", "theorem", "mem_iff_star_mul_self", ["unitary"]], ["add", "def", "to_units", ["unitary"]], ["add", "theorem", "to_units_injective", ["unitary"]]]}]}, {"timestamp": 1642408963, "sha": "a88ae0c4", "message": "refactor(data/set/lattice): Generalize `mem_bUnion_iff` and `mem_bInter_iff` to dependent families (#11485)\nThey're now called `mem_Union₂` and `mem_Inter₂`.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": []}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": [["mod", "theorem", "mem_Union", ["box_integral", "prepartition"]]]}, {"oldPath": "src/analysis/box_integral/partition/split.lean", "newPath": "src/analysis/box_integral/partition/split.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/tagged.lean", "newPath": "src/analysis/box_integral/partition/tagged.lean", "changes": [["mod", "theorem", "disj_union_boxes", ["box_integral", "tagged_prepartition"]], ["mod", "theorem", "mem_Union", ["box_integral", "tagged_prepartition"]]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["mod", "theorem", "mem_Inf", ["convex_cone"]]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/simplicial_complex/basic.lean", "newPath": "src/analysis/convex/simplicial_complex/basic.lean", "changes": [["mod", "theorem", "mem_space_iff", ["geometry", "simplicial_complex"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/accumulate.lean", "newPath": "src/data/set/accumulate.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "mem_Inter₂", ["set"]], ["add", "theorem", "mem_Union₂", ["set"]], ["del", "theorem", "mem_bInter_iff", ["set"]], ["del", "theorem", "mem_bUnion_iff'", ["set"]], ["del", "theorem", "mem_bUnion_iff", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "mem_Inf", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["mod", "theorem", "mem_Inf", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "mem_span", ["submodule"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["mod", "theorem", "mem_Inf", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["mod", "theorem", "mem_Inf", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["mod", "theorem", "mem_Inf", ["subsemiring"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1642406111, "sha": "83eff323", "message": "feat(topology/metric_space): more lemmas about disjoint balls (#11506)\n* drop unused lemmas `metric.ball_disjoint` and\n `metric.ball_disjoint_same`; the former was a duplicate of\n `metric.ball_disjoint_ball`;\n* add `metric.closed_ball_disjoint_ball`, `metric.closed_ball_disjoint_closed_ball`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "ball_disjoint", ["metric"]], ["del", "theorem", "ball_disjoint_same", ["metric"]], ["add", "theorem", "closed_ball_disjoint_ball", ["metric"]], ["add", "theorem", "closed_ball_disjoint_closed_ball", ["metric"]]]}]}, {"timestamp": 1642406109, "sha": "2f342b80", "message": "feat(measure_theory): generalize some lemmas to `outer_measure` (#11501)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "measure_union_eq_top_iff", ["measure_theory"]], ["mod", "theorem", "measure_union_lt_top_iff", ["measure_theory"]], ["mod", "theorem", "measure_union_null_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["mod", "theorem", "Union_null", ["measure_theory", "outer_measure"]], ["add", "theorem", "Union_null_iff", ["measure_theory", "outer_measure"]], ["add", "theorem", "bUnion_null_iff", ["measure_theory", "outer_measure"]], ["add", "theorem", "mono_null", ["measure_theory", "outer_measure"]], ["add", "theorem", "sUnion_null_iff", ["measure_theory", "outer_measure"]], ["add", "theorem", "univ_eq_zero_iff", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1642404057, "sha": "43bbaee8", "message": "feat(measure_theory/measure): add lemmas, drop `measurable_set` assumptions (#11499)\n* `restrict_eq_self` no longer requires measurability of either set;\n* `restrict_apply_self` no longer requires measurability of the set;\n* add `restrict_apply_superset` and `restrict_restrict_of_subset` ;\n* add `restrict_restrict'` that assumes measurability of the other\n set, drop one `measurable_set` assumption in `restrict_comm`;\n* drop measurability assumptions in `restrict_congr_mono`.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "restrict_apply_self", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply_superset", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_comm", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_congr_mono", ["measure_theory", "measure"]], ["del", "theorem", "restrict_eq_self'", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "restrict_restrict'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_restrict_of_subset", ["measure_theory", "measure"]]]}]}, {"timestamp": 1642380166, "sha": "6d19ebaa", "message": "feat(*): add to_sub* lemmas for `map`, `fg` (#11480)\nFrom flt-regular.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "map_to_submodule", ["subalgebra"]], ["add", "theorem", "map_to_subsemiring", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_bot_to_submodule", ["subalgebra"]]]}]}, {"timestamp": 1642377126, "sha": "4ed73168", "message": "feat(analysis/special_functions/pow): tendsto rpow lemma for ennreals (#11475)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "continuous_rpow_const", ["ennreal"]], ["add", "theorem", "ennrpow_const", ["filter", "tendsto"]]]}]}, {"timestamp": 1642374716, "sha": "2c2338e7", "message": "chore(data/complex/basic): add of_real_eq_one (#11496)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "of_real_eq_one", ["complex"]], ["add", "theorem", "of_real_ne_one", ["complex"]]]}]}, {"timestamp": 1642374714, "sha": "1f6bbf9e", "message": "feat(analysis/special_functions/complex/arg): `arg_conj`, `arg_inv` lemmas (#11479)\nAdd lemmas giving the values of `arg (conj x)` and `arg x⁻¹`, both for\n`arg` as a real number and `arg` coerced to `real.angle` (the latter\nfunction being better behaved because it avoids case distinctions\naround getting a result into the interval (-π, π]).", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_conj", ["complex"]], ["add", "theorem", "arg_conj_coe_angle", ["complex"]], ["add", "theorem", "arg_inv", ["complex"]], ["add", "theorem", "arg_inv_coe_angle", ["complex"]]]}]}, {"timestamp": 1642373083, "sha": "f4b93c8c", "message": "feat(analysis/special_functions/trigonometric/angle): more 2π = 0 lemmas (#11482)\nAdd some more lemmas useful for manipulation of `real.angle` expressions.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "sub_coe_pi_eq_add_coe_pi", ["real", "angle"]], ["add", "theorem", "two_nsmul_coe_pi", ["real", "angle"]], ["add", "theorem", "two_zsmul_coe_pi", ["real", "angle"]]]}]}, {"timestamp": 1642370846, "sha": "ed57bdd3", "message": "feat(number_field): notation for 𝓞 K, an algebra & ∈ 𝓞 K iff (#11476)\nFrom flt-regular.", "changes": [{"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": [["add", "theorem", "mem_ring_of_integers", ["number_field"]], ["mod", "theorem", "is_integral_coe", ["number_field", "ring_of_integers"]]]}]}, {"timestamp": 1642367707, "sha": "5f5bcd85", "message": "feat(order/filter/ultrafilter): add some comap_inf_principal lemmas (#11495)\n...in the setting of ultrafilters\nThese lemmas are useful to prove e.g. that the continuous image of a\ncompact set is compact in the setting of convergence spaces.", "changes": [{"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "comap_inf_principal_ne_bot_of_image_mem", ["ultrafilter"]], ["add", "theorem", "eq_of_le", ["ultrafilter"]], ["add", "theorem", "of_comap_inf_principal_eq_of_map", ["ultrafilter"]], ["add", "theorem", "of_comap_inf_principal_mem", ["ultrafilter"]]]}]}, {"timestamp": 1642345206, "sha": "d7f8f580", "message": "feat(algebra/star/unitary): (re)define unitary elements of a star monoid (#11457)\nThis PR defines `unitary R` for a star monoid `R` as the submonoid containing the elements that satisfy both `star U * U = 1` and `U * star U = 1`. We show basic properties (i.e. that this forms a group) and show that they\npreserve the norm when `R` is a C* ring.\nNote that this replaces `unitary_submonoid`, which only included the condition `star U * U = 1` -- see [the discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/unitary.20submonoid) on Zulip.", "changes": [{"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/star/unitary.lean", "changes": [["add", "theorem", "coe_mul_star_self", ["unitary"]], ["add", "theorem", "coe_star", ["unitary"]], ["add", "theorem", "coe_star_mul_self", ["unitary"]], ["add", "theorem", "mul_star_self", ["unitary"]], ["add", "theorem", "mul_star_self_of_mem", ["unitary"]], ["add", "theorem", "star_eq_inv'", ["unitary"]], ["add", "theorem", "star_eq_inv", ["unitary"]], ["add", "theorem", "star_mem", ["unitary"]], ["add", "theorem", "star_mem_iff", ["unitary"]], ["add", "theorem", "star_mul_self", ["unitary"]], ["add", "theorem", "star_mul_self_of_mem", ["unitary"]], ["add", "def", "unitary", []]]}, {"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": [["add", "theorem", "norm_coe_unitary", ["cstar_ring"]], ["add", "theorem", "norm_coe_unitary_mul", ["cstar_ring"]], ["add", "theorem", "norm_mem_unitary_mul", ["cstar_ring"]], ["add", "theorem", "norm_mul_coe_unitary", ["cstar_ring"]], ["add", "theorem", "norm_mul_mem_unitary", ["cstar_ring"]], ["add", "theorem", "norm_of_mem_unitary", ["cstar_ring"]], ["add", "theorem", "norm_unitary_smul", ["cstar_ring"]]]}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": [["mod", "theorem", "star_mul_self", ["matrix", "unitary_group"]], ["mod", "def", "unitary_group", ["matrix"]], ["del", "theorem", "star_mem", ["matrix", "unitary_submonoid"]], ["del", "theorem", "star_mem_iff", ["matrix", "unitary_submonoid"]], ["del", "def", "unitary_submonoid", []]]}]}, {"timestamp": 1642345204, "sha": "1d1f3841", "message": "feat(analysis/calculus/dslope): define dslope (#11432)", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/dslope.lean", "changes": [["add", "theorem", "of_dslope", ["continuous_at"]], ["add", "theorem", "continuous_at_dslope_of_ne", []], ["add", "theorem", "continuous_at_dslope_same", []], ["add", "theorem", "of_dslope", ["continuous_on"]], ["add", "theorem", "continuous_on_dslope", []], ["add", "theorem", "of_dslope", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_dslope_of_ne", []], ["add", "theorem", "of_dslope", ["differentiable_at"]], ["add", "theorem", "differentiable_at_dslope_of_ne", []], ["add", "theorem", "of_dslope", ["differentiable_on"]], ["add", "theorem", "differentiable_on_dslope_of_nmem", []], ["add", "theorem", "of_dslope", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_dslope_of_ne", []], ["add", "theorem", "dslope_eventually_eq_slope_of_ne", []], ["add", "theorem", "dslope_eventually_eq_slope_punctured_nhds", []], ["add", "theorem", "dslope_of_ne", []], ["add", "theorem", "dslope_same", []], ["add", "theorem", "dslope_sub_smul", []], ["add", "theorem", "dslope_sub_smul_of_ne", []], ["add", "theorem", "eq_on_dslope_slope", []], ["add", "theorem", "eq_on_dslope_sub_smul", []], ["add", "theorem", "sub_smul_dslope", []]]}]}, {"timestamp": 1642339827, "sha": "1aee8a8d", "message": "chore(*): Put `simp` attribute before `to_additive` (#11488)\nA few lemmas were tagged in the wrong order. As tags are applied from left to right, `@[to_additive, simp]` only marks the multiplicative lemma as `simp`. The correct order is thus `@[simp, to_additive]`.", "changes": [{"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["mod", "theorem", "commute_op", ["mul_opposite"]], ["mod", "theorem", "commute_unop", ["mul_opposite"]]]}, {"oldPath": "src/algebra/order/lattice_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/inverses.lean", "newPath": "src/group_theory/submonoid/inverses.lean", "changes": [["mod", "theorem", "from_left_inv_eq_inv", ["submonoid"]], ["mod", "theorem", "from_left_inv_left_inv_equiv_symm", ["submonoid"]], ["mod", "theorem", "from_left_inv_one", ["submonoid"]], ["mod", "theorem", "left_inv_equiv_symm_eq_inv", ["submonoid"]], ["mod", "theorem", "left_inv_equiv_symm_from_left_inv", ["submonoid"]], ["mod", "theorem", "left_inv_equiv_symm_mul", ["submonoid"]], ["mod", "theorem", "mul_left_inv_equiv_symm", ["submonoid"]]]}]}, {"timestamp": 1642339825, "sha": "02a4775a", "message": "refactor(analysis/normed_space): merge `normed_space` and `semi_normed_space` (#8218)\nThere are no theorems which are true for `[normed_group M] [normed_space R M]` but not `[normed_group M] [semi_normed_space R M]`; so there is about as much value to the `semi_normed_space` / `normed_space` distinction as there was between `module` / `semimodule`. Since we eliminated `semimodule`, we should eliminte `semi_normed_space` too.\nThis relaxes the typeclass arguments of `normed_space` to make it a drop-in replacement for `semi_normed_space`; or viewed another way, this removes `normed_space` and renames `semi_normed_space` to replace it.\nThis does the same thing to `normed_algebra` and `seminormed_algebra`, but these are hardly used anyway.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/semi_normed_space.20vs.20normed_space/near/245089933)\nAs with any typeclass refactor, this randomly breaks elaboration in a few places; presumably, it was able to unify arguments from one particular typeclass path, but not from another. To fix this, some type ascriptions have to be added where previously none were needed. In a few rare cases, the elaborator gets so confused that we have to enter tactic mode to produce a term.\nThis isn't really a new problem - this PR just makes these issues all visible at once, whereas normally we'd only run into one or two at a time. Optimistically Lean 4 will fix all this, but we won't really know until we try.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach_steinhaus.lean", "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "closure_ball", []], ["mod", "theorem", "dist_smul", []], ["mod", "theorem", "frontier_ball", []], ["mod", "theorem", "frontier_closed_ball", []], ["mod", "def", "homeomorph_unit_ball", []], ["mod", "theorem", "interior_closed_ball", []], ["mod", "theorem", "nndist_smul", []], ["mod", "theorem", "nnnorm_smul", []], ["mod", "theorem", "norm_smul", []], ["mod", "theorem", "norm_smul_of_nonneg", []], ["del", "def", "restrict_scalars", ["semi_normed_space"]]]}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["mod", "theorem", "polar_univ", []]]}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": [["mod", "theorem", "extend_to_𝕜'_apply", ["continuous_linear_map"]], ["mod", "theorem", "norm_bound", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "op_norm_smul_le", ["continuous_linear_map"]], ["mod", "theorem", "to_span_singleton_smul'", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pointwise.lean", "newPath": "src/analysis/normed_space/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["mod", "theorem", "smul", ["measure_theory", "dominated_fin_meas_additive"]], ["mod", "theorem", "set_to_simple_func_smul_left'", ["measure_theory", "simple_func"]], ["mod", "theorem", "set_to_simple_func_smul_left", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1642338239, "sha": "d60541cc", "message": "feat(analysis/seminorm): Add `has_add` and `has_scalar nnreal` (#11414)\nAdd instances of `has_add` and `has_scalar nnreal` type classes for `seminorm`.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "add_apply", ["seminorm"]], ["add", "theorem", "coe_add", ["seminorm"]], ["add", "def", "coe_fn_add_monoid_hom", ["seminorm"]], ["add", "theorem", "coe_fn_add_monoid_hom_injective", ["seminorm"]], ["add", "theorem", "coe_smul", ["seminorm"]], ["add", "theorem", "smul_apply", ["seminorm"]]]}]}, {"timestamp": 1642325597, "sha": "3fb5b82e", "message": "feat(algebra/star/basic): change `star_ring_aut` (notably, complex conjugation) from `ring_equiv` to `ring_hom` and make type argument explicit (#11418)\nChange the underlying object notated by `conj` from\n```lean\ndef star_ring_aut [comm_semiring R] [star_ring R] : ring_aut R :=\n```\nto\n```lean\ndef star_ring_end [comm_semiring R] [star_ring R] : R →+* R :=\n```\nand also make the `R` argument explicit. These two changes allow the notation for conjugate-linear maps, `E →ₗ⋆[R] F` and variants, to pretty-print, see\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Pretty.20printer.20omits.20notation\nThis is a partial reversion of #9640, in which complex conjugation was upgraded from `ring_hom` to `ring_equiv`.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["del", "theorem", "star_ring_aut_apply", []], ["del", "theorem", "star_ring_aut_self_apply", []], ["add", "def", "star_ring_end", []], ["add", "theorem", "star_ring_end_apply", []], ["add", "theorem", "star_ring_end_self_apply", []]]}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["mod", "theorem", "coe_inv_circle_eq_conj", []]]}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1642282360, "sha": "1a29adc4", "message": "feat(measure_theory/integral): weaker assumptions on Ioi integrability (#11090)\nTo show a function is integrable given an `ae_cover` it suffices to show boundedness along a filter, not necessarily convergence. This PR adds these generalisations, and uses them to show the older convergence versions.", "changes": [{"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["add", "theorem", "integrable_of_integral_bounded_of_nonneg_ae", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_integral_norm_bounded", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_lintegral_nnnorm_bounded'", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_lintegral_nnnorm_bounded", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_interval_integral_norm_bounded", ["measure_theory"]], ["add", "theorem", "integrable_on_Iic_of_interval_integral_norm_bounded", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_of_interval_integral_norm_bounded", ["measure_theory"]]]}]}, {"timestamp": 1642277370, "sha": "1f266d62", "message": "feat(data/pnat/basic): `succ_nat_pred` (#11455)", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "nat_pred_add_one", ["pnat"]], ["add", "theorem", "nat_pred_eq_pred", ["pnat"]], ["add", "theorem", "one_add_nat_pred", ["pnat"]]]}]}, {"timestamp": 1642271928, "sha": "0b4f07f1", "message": "feat(data/set/basic): add singleton_injective (#11464)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "singleton_injective", ["set"]]]}]}, {"timestamp": 1642267968, "sha": "37cf695a", "message": "feat(measure_theory/integral/set_to_l1): monotonicity properties of set_to_fun (#10714)\nWe prove that in a `normed_lattice_add_comm_group`, if `T` is such that `0 ≤ T s x` for `0 ≤ x`, then `set_to_fun μ T` verifies\n- `set_to_fun_mono_left (h : ∀ s x, T' s x ≤ T'' s x) : set_to_fun μ T' hT' f ≤ set_to_fun μ T'' hT'' f`\n- `set_to_fun_nonneg (hf : 0 ≤ᵐ[μ] f) : 0 ≤ set_to_fun μ T hT f`\n- `set_to_fun_mono (hfg : f ≤ᵐ[μ] g) : set_to_fun μ T hT f ≤ set_to_fun μ T hT g`", "changes": [{"oldPath": null, "newPath": "src/measure_theory/function/lp_order.lean", "changes": [["add", "theorem", "coe_fn_le", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_nonneg", ["measure_theory", "Lp"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": [["add", "theorem", "coe_fn_le", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_fn_nonneg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_fn_zero", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "coe_simple_func_nonneg_to_Lp_nonneg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "dense_range_coe_simple_func_nonneg_to_Lp_nonneg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "exists_simple_func_nonneg_ae_eq", ["measure_theory", "Lp", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["add", "theorem", "set_to_L1_mono", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_mono_left'", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_mono_left", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_nonneg", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1s_clm_mono", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_mono_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_mono_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_nonneg", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_mono", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_mono_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_mono_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_nonneg", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_fun_mono", ["measure_theory"]], ["add", "theorem", "set_to_fun_mono_left'", ["measure_theory"]], ["add", "theorem", "set_to_fun_mono_left", ["measure_theory"]], ["add", "theorem", "set_to_fun_nonneg", ["measure_theory"]], ["mod", "theorem", "set_to_simple_func_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_mono_left'", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_mono_left", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_nonneg'", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_nonneg", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1642260616, "sha": "51c5a40e", "message": "feat(analysis/special_functions/trigonometric/angle): `neg_coe_pi` (#11460)\nAdd the lemma that `-π` and `π` are the same `real.angle` (angle mod 2π).", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "neg_coe_pi", ["real", "angle"]]]}]}, {"timestamp": 1642256368, "sha": "ce62dbc3", "message": "feat(algebra/star/self_adjoint): module instance on self-adjoint elements of a star algebra (#11322)\nWe put a module instance on `self_adjoint A`, where `A` is a `[star_module R A]` and `R` has a trivial star operation. A new typeclass `[has_trivial_star R]` is created for this purpose with an instance on `ℝ`. This allows us to express the fact that e.g. the space of complex Hermitian matrices is a real vector space.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/self_adjoint.lean", "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "coe_smul", ["self_adjoint"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1642243361, "sha": "0d1d4c95", "message": "feat(data/finset/basic): strengthen `finset.nonempty.cons_induction` (#11452)\nThis change makes it strong enough to be used in three other lemmas.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "cons_induction", ["finset", "nonempty"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}]}, {"timestamp": 1642238164, "sha": "ff19c951", "message": "chore(algebra/group_power/basic): collect together ring lemmas (#11446)\nThis reorders the lemmas so that all the ring and comm_ring lemmas can be put in a single section.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "eq_or_eq_neg_of_sq_eq_sq", []], ["mod", "theorem", "mul_neg_one_pow_eq_zero_iff", []], ["mod", "theorem", "neg_one_pow_eq_or", []], ["mod", "theorem", "neg_one_pow_mul_eq_zero_iff", []], ["mod", "theorem", "neg_pow", []], ["mod", "theorem", "neg_pow_bit0", []], ["mod", "theorem", "neg_pow_bit1", []], ["mod", "theorem", "neg_sq", []], ["mod", "theorem", "of_mul_pow", []], ["mod", "theorem", "sq_sub_sq", []], ["mod", "theorem", "sub_sq", []]]}]}, {"timestamp": 1642232392, "sha": "df2d70d6", "message": "refactor(analysis/inner_product_space/basic): generalize `orthogonal_family` from submodules to maps (#11254)\nThe old definition of `orthogonal_family` was a predicate on `V : ι → submodule 𝕜 E`, a family of submodules of an inner product space `E`; the new definition is a predicate on \n```lean\n{G : ι → Type*} [Π i, inner_product_space 𝕜 (G i)] (V : Π i, G i →ₗᵢ[𝕜] E)\n```\na family of inner product spaces and (injective, generally not surjective) isometries of these inner product spaces into `E`.\nThe new definition subsumes the old definition, but also applies more cleanly to orthonormal sets of vectors. An orthonormal set `{v : ι → E}` of vectors in `E` induces an `orthogonal_family` of the new style with `G i` chosen to be `𝕜`, for each `i`, and `V i : G i →ₗᵢ[𝕜] E` the map from `𝕜` to the span of `v i` in `E`.\nIn #11255 we write down the induced isometry from the l2 space `lp G 2` into `E` induced by \"summing\" all the isometries in an orthogonal family. This works for either the old definition or the new definition. But with the old definition, an orthonormal set of vectors induces an isometry from the weird l2 space `lp (λ i, span 𝕜 (v i)) 2` into `E`, whereas with the new definition it induces an isometry from the standard l2 space `lp (λ i, 𝕜) 2` into `E`. This is much more elegant!", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_sum", ["dfinsupp"]], ["add", "theorem", "sum_inner", ["dfinsupp"]], ["mod", "theorem", "collected_basis_orthonormal", ["direct_sum", "submodule_is_internal"]], ["mod", "theorem", "eq_ite", ["orthogonal_family"]], ["mod", "theorem", "independent", ["orthogonal_family"]], ["mod", "theorem", "inner_right_dfinsupp", ["orthogonal_family"]], ["mod", "theorem", "inner_right_fintype", ["orthogonal_family"]], ["mod", "theorem", "inner_sum", ["orthogonal_family"]], ["mod", "theorem", "norm_sq_diff_sum", ["orthogonal_family"]], ["mod", "theorem", "norm_sum", ["orthogonal_family"]], ["mod", "theorem", "orthonormal_sigma_orthonormal", ["orthogonal_family"]], ["mod", "theorem", "summable_iff_norm_sq_summable", ["orthogonal_family"]], ["mod", "def", "orthogonal_family", []], ["add", "theorem", "orthogonal_family", ["orthonormal"]]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["mod", "theorem", "orthogonal_family_eigenspaces'", ["inner_product_space", "is_self_adjoint"]], ["mod", "theorem", "orthogonal_family_eigenspaces", ["inner_product_space", "is_self_adjoint"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "map_neg", ["linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "coe_to_span_singleton", ["linear_isometry"]], ["add", "def", "to_span_singleton", ["linear_isometry"]], ["add", "theorem", "to_span_singleton_apply", ["linear_isometry"]]]}]}, {"timestamp": 1642214773, "sha": "fa41b7aa", "message": "feat(topology/algebra/uniform_group): Condition for uniform convergence (#11391)\nThis PR adds a lemma regarding uniform convergence on a topological group `G`, placed right after the construction of the `uniform_space` structure on `G`.", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "tendsto_locally_uniformly_iff", ["topological_group"]], ["add", "theorem", "tendsto_locally_uniformly_on_iff", ["topological_group"]], ["add", "theorem", "tendsto_uniformly_iff", ["topological_group"]], ["add", "theorem", "tendsto_uniformly_on_iff", ["topological_group"]]]}]}, {"timestamp": 1642195794, "sha": "323e388c", "message": "feat(algebraic_geometry): More lemmas about affine schemes and basic open sets (#11449)", "changes": [{"oldPath": "src/algebraic_geometry/AffineScheme.lean", "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["add", "theorem", "Spec_map_presheaf_map_eq_to_hom", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "map_prime_spectrum_basic_open_of_affine", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Spec_Γ_identity_hom_app_from_Spec", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "basic_open_is_affine", ["algebraic_geometry", "is_affine_open"]], ["add", "def", "from_Spec", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "from_Spec_app_eq", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "from_Spec_base_preimage", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "from_Spec_image_top", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "from_Spec_range", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "is_compact", ["algebraic_geometry", "is_affine_open"]], ["add", "theorem", "is_basis_basic_open", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["mod", "theorem", "basic_open_res", ["algebraic_geometry", "Scheme"]], ["mod", "theorem", "basic_open_res_eq", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_subset", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "comp_coe_base", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "comp_val", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "comp_val_base", ["algebraic_geometry", "Scheme"]]]}]}, {"timestamp": 1642186955, "sha": "f770d6ef", "message": "feat(topology/separation): generalize two lemmas (#11454)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "nhds_eq_nhds_iff", []], ["mod", "theorem", "nhds_le_nhds_iff", []]]}]}, {"timestamp": 1642186954, "sha": "d54375ea", "message": "feat(data/nat/totient): `totient_even` (#11436)", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_even", ["nat"]]]}]}, {"timestamp": 1642182441, "sha": "49079c14", "message": "feat(data/finsupp/basic): add `finset_sum_apply` and `coe_fn_add_hom` (#11423)\n`finset_sum_apply`: Given a family of functions `f i : α → ℕ` indexed over `S : finset ι`, the sum of this family over `S` is a function `α → ℕ` whose value at `p : α` is `∑ (i : ι) in S, (f i) p`\n`coe_fn_add_monoid_hom`: Coercion from a `finsupp` to a function type is an `add_monoid_hom`. Proved by Alex J. Best", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "coe_finset_sum", ["finsupp"]], ["add", "theorem", "coe_sum", ["finsupp"]], ["add", "theorem", "finset_sum_apply", ["finsupp"]]]}]}, {"timestamp": 1642182439, "sha": "757eaf4f", "message": "chore(analysis/calculus/{deriv,mean_value}): use `slope` (#11419)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/log_deriv.lean", "newPath": "src/analysis/special_functions/log_deriv.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/slope.lean", "newPath": "src/linear_algebra/affine_space/slope.lean", "changes": [["add", "theorem", "slope_fun_def", []]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}]}, {"timestamp": 1642182438, "sha": "653fe45e", "message": "feat(analysis/seminorm): `semilattice_sup` on seminorms and lemmas about `ball` (#11329)\nDefine `bot` and the the binary `sup` on seminorms, and some lemmas about the supremum of a finite number of seminorms.\nShows that the unit ball of the supremum is given by the intersection of the unit balls.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "ball_bot", ["seminorm"]], ["add", "theorem", "ball_finset_sup'", ["seminorm"]], ["add", "theorem", "ball_finset_sup", ["seminorm"]], ["add", "theorem", "ball_finset_sup_eq_Inter", ["seminorm"]], ["add", "theorem", "ball_sup", ["seminorm"]], ["add", "theorem", "ball_zero'", ["seminorm"]], ["add", "theorem", "bot_eq_zero", ["seminorm"]], ["add", "theorem", "coe_bot", ["seminorm"]], ["add", "theorem", "coe_sup", ["seminorm"]], ["add", "theorem", "coe_zero", ["seminorm"]], ["mod", "theorem", "ext", ["seminorm"]], ["add", "theorem", "finset_sup_apply", ["seminorm"]], ["add", "theorem", "le_def", ["seminorm"]], ["add", "theorem", "lt_def", ["seminorm"]]]}]}, {"timestamp": 1642178998, "sha": "2ce607e4", "message": "Docs typo in set_theory/cardinal: Wrong type product symbol (#11453)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1642173145, "sha": "d8aed79b", "message": "chore(analysis/inner_product_space/projection): Speedup `linear_isometry_equiv.reflections_generate_dim_aux` (#11443)\nThis takes it from around 17s to around 6s on my machine.\nIMO using `e * f` instead of `f.trans e` makes this proof a little easier to follow, as then we don't have to translate between the two different spellings mid proof (and `prod` uses the `*` spelling internally)", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "reflection_inv", []], ["add", "theorem", "reflection_mul_reflection", []]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "mul_def", ["linear_isometry"]], ["add", "theorem", "one_def", ["linear_isometry"]], ["add", "theorem", "inv_def", ["linear_isometry_equiv"]], ["add", "theorem", "mul_def", ["linear_isometry_equiv"]], ["add", "theorem", "one_def", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1642173144, "sha": "22a9f2eb", "message": "feat(algebra/field/basic): `div_neg_self`, `neg_div_self` (#11438)\nI think these two lemmas are useful as `simp` lemmas, but they don't\nseem to be there already.", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["add", "theorem", "div_neg_self", []], ["add", "theorem", "neg_div_self", []]]}]}, {"timestamp": 1642169537, "sha": "201aeaa3", "message": "chore(algebra/char_p): ring_char.eq is better in the other direction, with instances, and explicit arguments (#11439)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "eq", ["ring_char"]], ["mod", "theorem", "eq_zero", ["ring_char"]]]}]}, {"timestamp": 1642165470, "sha": "011a5998", "message": "feat(algebraic_geometry): Gluing morphisms from an open cover. (#11441)", "changes": [{"oldPath": "src/algebraic_geometry/gluing.lean", "newPath": "src/algebraic_geometry/gluing.lean", "changes": [["add", "def", "open_cover", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "from_glued", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "from_glued_injective", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "from_glued_open_embedding", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "from_glued_open_map", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "glue_morphisms", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "glued_cover", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "glued_cover_cocycle", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "glued_cover_cocycle_fst", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "glued_cover_cocycle_snd", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "glued_cover_t'", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "glued_cover_t'_fst_fst", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "glued_cover_t'_fst_snd", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "glued_cover_t'_snd_fst", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "glued_cover_t'_snd_snd", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "ι_from_glued", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "theorem", "ι_glue_morphisms", ["algebraic_geometry", "Scheme", "open_cover"]]]}]}, {"timestamp": 1642157930, "sha": "44351a9f", "message": "chore(analysis/complex/circle): add to_units and golf (#11435)", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["add", "def", "to_units", ["circle"]]]}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": [["del", "def", "rotation_aux", []]]}]}, {"timestamp": 1642157929, "sha": "38eb719f", "message": "feat(data/matrix/notation): relax typeclass assumptions (#11429)", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "smul_vec2", ["matrix"]], ["mod", "theorem", "smul_vec3", ["matrix"]]]}, {"oldPath": "src/linear_algebra/cross_product.lean", "newPath": "src/linear_algebra/cross_product.lean", "changes": []}]}, {"timestamp": 1642157927, "sha": "a8618391", "message": "feat(ring_theory/discriminant): add discr_mul_is_integral_mem_adjoin (#11396)\nWe add `discr_mul_is_integral_mem_adjoin`: let `K` be the fraction field of an integrally closed domain `R` and let `L` be a finite\nseparable extension of `K`. Let `B : power_basis K L` be such that `is_integral R B.gen`. Then for all `z : L` that are integral over `R`, we have `(discr K B.basis) • z ∈ adjoin R ({B.gen} : set L)`.\nFrom flt-regular.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "aeval_coe", ["intermediate_field"]], ["add", "theorem", "coe_is_integral_iff", ["intermediate_field"]], ["add", "theorem", "coe_prod", ["intermediate_field"]], ["add", "theorem", "coe_sum", ["intermediate_field"]]]}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": [["mod", "theorem", "discr_eq_det_embeddings_matrix_reindex_pow_two", ["algebra"]], ["add", "theorem", "discr_is_integral", ["algebra"]], ["add", "theorem", "discr_is_unit_of_basis", ["algebra"]], ["add", "theorem", "discr_mul_is_integral_mem_adjoin", ["algebra"]], ["mod", "theorem", "discr_not_zero_of_basis", ["algebra"]], ["mod", "theorem", "discr_power_basis_eq_prod", ["algebra"]], ["mod", "theorem", "of_power_basis_eq_norm", ["algebra"]], ["mod", "theorem", "of_power_basis_eq_prod''", ["algebra"]], ["mod", "theorem", "of_power_basis_eq_prod'", ["algebra"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "adjoin_le_integral_closure", []], ["add", "theorem", "det", ["is_integral"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "trace_matrix_of_basis_mul_vec", ["algebra"]]]}]}, {"timestamp": 1642154866, "sha": "5a6c13bc", "message": "feat(algebraic_geometry/open_immersion): Operations on open covers. (#11442)", "changes": [{"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "finite_subcover", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "def", "pullback_cover", ["algebraic_geometry", "Scheme", "open_cover"]]]}]}, {"timestamp": 1642154864, "sha": "e2860129", "message": "feat(algebra/ne_zero): `pos_of_ne_zero_coe` (#11437)", "changes": [{"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["add", "theorem", "not_char_dvd", ["ne_zero"]], ["del", "theorem", "not_dvd_char", ["ne_zero"]], ["add", "theorem", "pos_of_ne_zero_coe", ["ne_zero"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}]}, {"timestamp": 1642154863, "sha": "021baaee", "message": "feat(analysis/normed_space/linear_isometry): coercion injectivity lemmas and add_monoid_hom_class (#11434)\nThis also registers `linear_isometry` and `linear_isometry_equiv` with `add_monoid_hom_class`.\nI found myself wanting one of these while squeezing a simp, so may as well have all of them now.", "changes": [{"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": [["del", "theorem", "congr_fun", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["del", "theorem", "coe_fn_injective", ["linear_isometry"]], ["add", "theorem", "coe_injective", ["linear_isometry"]], ["add", "theorem", "to_continuous_linear_map_inj", ["linear_isometry"]], ["add", "theorem", "to_continuous_linear_map_injective", ["linear_isometry"]], ["add", "theorem", "to_linear_map_inj", ["linear_isometry"]], ["add", "theorem", "coe_injective", ["linear_isometry_equiv"]], ["add", "theorem", "to_continuous_linear_equiv_inj", ["linear_isometry_equiv"]], ["add", "theorem", "to_continuous_linear_equiv_injective", ["linear_isometry_equiv"]], ["add", "theorem", "to_homeomorph_inj", ["linear_isometry_equiv"]], ["add", "theorem", "to_homeomorph_injective", ["linear_isometry_equiv"]], ["add", "theorem", "to_isometric_inj", ["linear_isometry_equiv"]], ["add", "theorem", "to_isometric_injective", ["linear_isometry_equiv"]], ["add", "theorem", "to_linear_equiv_inj", ["linear_isometry_equiv"]], ["add", "theorem", "to_linear_isometry_inj", ["linear_isometry_equiv"]], ["add", "theorem", "to_linear_isometry_injective", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1642154862, "sha": "61054f70", "message": "feat(topology): some improvements (#11424)\n* Prove a better version of `continuous_on.comp_fract`. Rename `continuous_on.comp_fract` -> `continuous_on.comp_fract''`.\n* Rename `finset.closure_Union` -> `finset.closure_bUnion`\n* Add `continuous.congr` and `continuous.subtype_coe`", "changes": [{"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": [["add", "theorem", "comp_fract''", ["continuous_on"]], ["mod", "theorem", "comp_fract'", ["continuous_on"]], ["mod", "theorem", "comp_fract", ["continuous_on"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "congr", ["continuous"]], ["del", "theorem", "closure_Union", ["finset"]], ["add", "theorem", "closure_bUnion", ["finset"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "subtype_coe", ["continuous"]]]}]}, {"timestamp": 1642149440, "sha": "3c1740ac", "message": "feat(combinatorics/configuration): Define the order of a projective plane (#11430)\nThis PR defines the order of a projective plane, and proves a couple lemmas.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "order", ["configuration", "projective_plane", "dual"]], ["add", "theorem", "line_count_eq", ["configuration", "projective_plane"]], ["add", "theorem", "point_count_eq", ["configuration", "projective_plane"]]]}]}, {"timestamp": 1642149438, "sha": "5a3abca1", "message": "feat(topology/subset_properties): some compactness properties (#11425)\n* Add some lemmas about the existence of compact sets\n* Add `is_compact.eventually_forall_of_forall_eventually`\n* Some cleanup in `topology/subset_properties` and `topology/separation`", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "exists_compact_between", []], ["add", "theorem", "exists_open_between_and_is_compact_closure", []], ["add", "theorem", "exists_open_superset_and_is_compact_closure", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "compact_Union", []], ["mod", "theorem", "elim_nhds_subcover", ["compact_space"]], ["mod", "theorem", "compact_space_of_finite_subfamily_closed", []], ["mod", "theorem", "preimage_clopen_of_clopen", ["continuous_on"]], ["mod", "theorem", "compact_bUnion", ["finset"]], ["mod", "theorem", "is_clopen_bInter", []], ["mod", "theorem", "is_clopen_bUnion", []], ["mod", "theorem", "elim_finite_subcover_image", ["is_compact"]], ["add", "theorem", "eventually_forall_of_forall_eventually", ["is_compact"]], ["mod", "def", "is_compact", []], ["mod", "theorem", "image", ["is_irreducible"]], ["mod", "theorem", "image", ["is_preirreducible"]], ["mod", "theorem", "preimage", ["is_preirreducible"]], ["mod", "theorem", "compact_bUnion", ["set", "finite"]]]}]}, {"timestamp": 1642149437, "sha": "feaf6f5e", "message": "feat(algebraic_geometry): lemmas about basic opens in schemes (#11393)", "changes": [{"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": [["add", "theorem", "adjunction_unit_app_app_top", ["algebraic_geometry", "Γ_Spec"]]]}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "def", "basic_open", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_mul", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_of_is_unit", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_res", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_res_eq", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_zero", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "comp_val_c_app", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "congr_app", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "mem_basic_open", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "mem_basic_open_top", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "preimage_basic_open'", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "preimage_basic_open", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "basic_open_eq_of_affine'", ["algebraic_geometry"]], ["add", "theorem", "basic_open_eq_of_affine", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["mod", "def", "Spec_Γ_identity", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": [["del", "theorem", "basic_open_eq_of_affine'", ["algebraic_geometry"]], ["del", "theorem", "basic_open_eq_of_affine", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": [["add", "theorem", "basic_open_mul", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "basic_open_of_is_unit", ["algebraic_geometry", "RingedSpace"]], ["mod", "theorem", "basic_open_res", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "basic_open_res_eq", ["algebraic_geometry", "RingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "theorem", "inclusion_map_eq_top", ["topological_space", "opens"]], ["add", "theorem", "open_embedding_obj_top", ["topological_space", "opens"]]]}]}, {"timestamp": 1642149436, "sha": "85accb8a", "message": "feat(data/{multiset,finset}/sum): Disjoint sum of multisets/finsets (#11355)\nThis defines the disjoint union of two multisets/finsets as `multiset (α ⊕ β)`/`finset (α ⊕ β)`.", "changes": [{"oldPath": null, "newPath": "src/data/finset/sum.lean", "changes": [["add", "theorem", "card_disj_sum", ["finset"]], ["add", "def", "disj_sum", ["finset"]], ["add", "theorem", "disj_sum_empty", ["finset"]], ["add", "theorem", "disj_sum_mono", ["finset"]], ["add", "theorem", "disj_sum_mono_left", ["finset"]], ["add", "theorem", "disj_sum_mono_right", ["finset"]], ["add", "theorem", "disj_sum_ssubset_disj_sum_of_ssubset_of_subset", ["finset"]], ["add", "theorem", "disj_sum_ssubset_disj_sum_of_subset_of_ssubset", ["finset"]], ["add", "theorem", "disj_sum_strict_mono_left", ["finset"]], ["add", "theorem", "disj_sum_strict_mono_right", ["finset"]], ["add", "theorem", "empty_disj_sum", ["finset"]], ["add", "theorem", "inl_mem_disj_sum", ["finset"]], ["add", "theorem", "inr_mem_disj_sum", ["finset"]], ["add", "theorem", "mem_disj_sum", ["finset"]], ["add", "theorem", "val_disj_sum", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "map_lt_map", ["multiset"]], ["add", "theorem", "map_mono", ["multiset"]], ["add", "theorem", "map_strict_mono", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/sum.lean", "changes": [["add", "theorem", "card_disj_sum", ["multiset"]], ["add", "def", "disj_sum", ["multiset"]], ["add", "theorem", "disj_sum_lt_disj_sum_of_le_of_lt", ["multiset"]], ["add", "theorem", "disj_sum_lt_disj_sum_of_lt_of_le", ["multiset"]], ["add", "theorem", "disj_sum_mono", ["multiset"]], ["add", "theorem", "disj_sum_mono_left", ["multiset"]], ["add", "theorem", "disj_sum_mono_right", ["multiset"]], ["add", "theorem", "disj_sum_strict_mono_left", ["multiset"]], ["add", "theorem", "disj_sum_strict_mono_right", ["multiset"]], ["add", "theorem", "disj_sum_zero", ["multiset"]], ["add", "theorem", "inl_mem_disj_sum", ["multiset"]], ["add", "theorem", "inr_mem_disj_sum", ["multiset"]], ["add", "theorem", "mem_disj_sum", ["multiset"]], ["add", "theorem", "zero_disj_sum", ["multiset"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "or_iff_left", []], ["add", "theorem", "or_iff_right", []]]}]}, {"timestamp": 1642149435, "sha": "9a949936", "message": "feat(analysis/inner_product_space/l2): Inner product space structure on `l2` (#11315)", "changes": [{"oldPath": null, "newPath": "src/analysis/inner_product_space/l2_space.lean", "changes": [["add", "theorem", "has_sum_inner", ["lp"]], ["add", "theorem", "inner_eq_tsum", ["lp"]], ["add", "theorem", "summable_inner", ["lp"]]]}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}]}, {"timestamp": 1642149434, "sha": "fb2b1a01", "message": "fix(algebra/star/basic): redefine `star_ordered_ring` (#11213)\nThis PR redefines `star_ordered_ring` to remove the `ordered_semiring` assumption, which includes undesirable axioms such as `∀ (a b c : α), a < b → 0 < c → c * a < c * b`. See the discussion on Zulip [here](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Star.20ordered.20ring).", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "star_mul_self_nonneg'", []], ["mod", "theorem", "star_mul_self_nonneg", []]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}]}, {"timestamp": 1642143590, "sha": "60c77d49", "message": "feat(tactic/lint): include linter name in github output (#11413)", "changes": [{"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}]}, {"timestamp": 1642141733, "sha": "d2484474", "message": "feat(algebraic_geometry): Gluing schemes (#11431)", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/gluing.lean", "changes": [["add", "def", "V_pullback_cone", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "V_pullback_cone_is_limit", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "theorem", "glue_condition", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "glued", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "glued_Scheme", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "theorem", "is_open_iff", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "iso_LocallyRingedSpace", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "iso_carrier", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "rel", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "to_LocallyRingedSpace_glue_data", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "def", "ι", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "theorem", "ι_eq_iff", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "theorem", "ι_iso_LocallyRingedSpace_inv", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "theorem", "ι_iso_carrier_inv", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "theorem", "ι_jointly_surjective", ["algebraic_geometry", "Scheme", "glue_data"]], ["add", "structure", "glue_data", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "theorem", "coe_to_fun_eq", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": [["add", "def", "V_pullback_cone_is_limit", ["algebraic_geometry", "LocallyRingedSpace", "glue_data"]], ["add", "def", "iso_SheafedSpace", ["algebraic_geometry", "LocallyRingedSpace", "glue_data"]], ["add", "def", "to_SheafedSpace_glue_data", ["algebraic_geometry", "LocallyRingedSpace", "glue_data"]], ["add", "theorem", "ι_iso_SheafedSpace_inv", ["algebraic_geometry", "LocallyRingedSpace", "glue_data"]], ["add", "theorem", "ι_jointly_surjective", ["algebraic_geometry", "LocallyRingedSpace", "glue_data"]], ["add", "structure", "glue_data", ["algebraic_geometry", "LocallyRingedSpace"]], ["del", "theorem", "coe_to_fun_eq", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "V_pullback_cone_is_limit", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "ι_jointly_surjective", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "def", "V_pullback_cone_is_limit", ["algebraic_geometry", "SheafedSpace", "glue_data"]], ["add", "def", "iso_PresheafedSpace", ["algebraic_geometry", "SheafedSpace", "glue_data"]], ["add", "def", "to_PresheafedSpace_glue_data", ["algebraic_geometry", "SheafedSpace", "glue_data"]], ["add", "theorem", "ι_iso_PresheafedSpace_inv", ["algebraic_geometry", "SheafedSpace", "glue_data"]], ["add", "theorem", "ι_jointly_surjective", ["algebraic_geometry", "SheafedSpace", "glue_data"]], ["add", "structure", "glue_data", ["algebraic_geometry", "SheafedSpace"]]]}]}, {"timestamp": 1642115760, "sha": "48fd9f25", "message": "chore(data/list/big_operators): rename vars, reorder lemmas (#11433)\n* use better variable names;\n* move lemmas to proper sections;\n* relax `[comm_semiring R]` to `[semiring R]` in `dvd_sum`.", "changes": [{"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["mod", "theorem", "all_one_of_le_one_le_of_prod_eq_one", ["list"]], ["mod", "theorem", "dvd_prod", ["list"]], ["mod", "theorem", "dvd_sum", ["list"]], ["mod", "theorem", "eq_of_sum_take_eq", ["list"]], ["mod", "theorem", "exists_le_of_sum_le", ["list"]], ["mod", "theorem", "exists_lt_of_sum_lt", ["list"]], ["mod", "theorem", "head_mul_tail_prod_of_ne_nil", ["list"]], ["mod", "theorem", "length_pos_of_prod_ne_one", ["list"]], ["mod", "theorem", "length_pos_of_sum_pos", ["list"]], ["mod", "theorem", "monotone_sum_take", ["list"]], ["mod", "theorem", "nth_zero_mul_tail_prod", ["list"]], ["mod", "theorem", "one_le_prod_of_one_le", ["list"]], ["mod", "theorem", "one_lt_prod_of_one_lt", ["list"]], ["mod", "theorem", "prod_eq_one_iff", ["list"]], ["mod", "theorem", "prod_eq_zero", ["list"]], ["mod", "theorem", "prod_eq_zero_iff", ["list"]], ["mod", "theorem", "prod_erase", ["list"]], ["mod", "theorem", "prod_hom", ["list"]], ["mod", "theorem", "prod_hom_rel", ["list"]], ["mod", "theorem", "prod_hom₂", ["list"]], ["mod", "theorem", "prod_inv", ["list"]], ["mod", "theorem", "prod_inv_reverse", ["list"]], ["mod", "theorem", "prod_is_unit", ["list"]], ["mod", "theorem", "prod_join", ["list"]], ["mod", "theorem", "prod_map_hom", ["list"]], ["mod", "theorem", "prod_ne_zero", ["list"]], ["mod", "theorem", "prod_nil", ["list"]], ["mod", "theorem", "prod_pos", ["list"]], ["mod", "theorem", "prod_reverse_noncomm", ["list"]], ["mod", "theorem", "prod_update_nth'", ["list"]], ["mod", "theorem", "prod_update_nth", ["list"]], ["mod", "theorem", "single_le_prod", ["list"]], ["mod", "theorem", "sum_le_foldr_max", ["list"]], ["mod", "theorem", "sum_map_mul_left", ["list"]], ["mod", "theorem", "sum_map_mul_right", ["list"]], ["mod", "theorem", "map_list_prod", ["monoid_hom"]], ["mod", "theorem", "unop_map_list_prod", ["monoid_hom"]], ["mod", "theorem", "op_list_prod", ["mul_opposite"]], ["mod", "theorem", "unop_list_prod", ["mul_opposite"]]]}]}, {"timestamp": 1642108222, "sha": "e830348b", "message": "feat(set_theory/ordinal_arithmetic): Families of ordinals (#11278)\nThis PR introduces some API to convert from `ι → β` indexed families to `Π o < b, β` indexed families. This simplifies and contextualizes some existing results.", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "def", "bfamily_of_family'", ["ordinal"]], ["add", "theorem", "bfamily_of_family'_typein", ["ordinal"]], ["add", "def", "bfamily_of_family", ["ordinal"]], ["add", "theorem", "bfamily_of_family_typein", ["ordinal"]], ["add", "theorem", "blsub_eq_blsub", ["ordinal"]], ["add", "theorem", "blsub_eq_lsub'", ["ordinal"]], ["mod", "theorem", "blsub_eq_lsub", ["ordinal"]], ["add", "theorem", "bsup_eq_bsup", ["ordinal"]], ["add", "theorem", "bsup_eq_sup'", ["ordinal"]], ["mod", "theorem", "bsup_eq_sup", ["ordinal"]], ["del", "theorem", "bsup_type", ["ordinal"]], ["add", "def", "family_of_bfamily'", ["ordinal"]], ["add", "theorem", "family_of_bfamily'_enum", ["ordinal"]], ["add", "def", "family_of_bfamily", ["ordinal"]], ["add", "theorem", "family_of_bfamily_enum", ["ordinal"]], ["add", "theorem", "lsub_eq_blsub'", ["ordinal"]], ["mod", "theorem", "lsub_eq_blsub", ["ordinal"]], ["add", "theorem", "lsub_eq_lsub", ["ordinal"]], ["add", "theorem", "sup_eq_bsup'", ["ordinal"]], ["mod", "theorem", "sup_eq_bsup", ["ordinal"]], ["add", "theorem", "sup_eq_sup", ["ordinal"]]]}]}, {"timestamp": 1642105018, "sha": "6fa2e46e", "message": "feat(algebra/lie/nilpotent): central extensions of nilpotent Lie modules / algebras are nilpotent (#11422)\nThe main result is `lie_algebra.nilpotent_of_nilpotent_quotient`.", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": [["add", "theorem", "ideal_oper_max_triv_submodule_eq_bot", ["lie_module"]]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "coe_id", ["lie_module_hom"]], ["add", "def", "id", ["lie_module_hom"]], ["add", "theorem", "id_apply", ["lie_module_hom"]]]}, {"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": [["add", "theorem", "map_bracket_eq", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "coe_lower_central_series_ideal_quot_eq", []], ["add", "theorem", "nilpotent_of_nilpotent_quotient", ["lie_algebra"]], ["del", "theorem", "lower_central_series_map_le", ["lie_ideal"]], ["add", "theorem", "map_lower_central_series_le", ["lie_ideal"]], ["add", "theorem", "map_lower_central_series_le", ["lie_module"]], ["add", "theorem", "nilpotent_of_nilpotent_quotient", ["lie_module"]]]}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": [["add", "theorem", "map_mk'_eq_bot_le", ["lie_submodule", "quotient"]], ["add", "theorem", "mk'_ker", ["lie_submodule", "quotient"]], ["add", "theorem", "mk_eq_zero", ["lie_submodule", "quotient"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "comp_ker_incl", ["lie_module_hom"]], ["add", "def", "ker", ["lie_module_hom"]], ["add", "theorem", "ker_id", ["lie_module_hom"]], ["add", "theorem", "le_ker_iff_map", ["lie_module_hom"]], ["add", "theorem", "mem_ker", ["lie_module_hom"]], ["mod", "theorem", "coe_to_lie_submodule", ["lie_subalgebra"]], ["mod", "theorem", "exists_lie_ideal_coe_eq_iff", ["lie_subalgebra"]], ["mod", "theorem", "exists_nested_lie_ideal_coe_eq_iff", ["lie_subalgebra"]], ["mod", "theorem", "mem_to_lie_submodule", ["lie_subalgebra"]], ["mod", "def", "to_lie_submodule", ["lie_subalgebra"]], ["add", "theorem", "coe_submodule_map", ["lie_submodule"]]]}]}, {"timestamp": 1642102458, "sha": "432e85ef", "message": "feat(analysis/normed_space/linear_isometry): add congr_arg and congr_fun (#11428)\nTwo trivial lemmas that are missing from this bundled morphism but present on most others.\nTurns out I didn't actually need these in the branch I created them in, but we should have them anyway.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}]}, {"timestamp": 1642102457, "sha": "8a13846e", "message": "feat(analysis/mean_inequalities): Hölder's inequality for infinite sums (#11314)\nState a few versions of Hölder's inequality for infinite sums.\nThe specific forms of the inequality chosen are parallel to those for Minkowski's inequality in #10984.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "Lp_add_le_tsum'", ["nnreal"]], ["add", "theorem", "inner_le_Lp_mul_Lq_has_sum", ["nnreal"]], ["add", "theorem", "inner_le_Lp_mul_Lq_tsum'", ["nnreal"]], ["add", "theorem", "inner_le_Lp_mul_Lq_tsum", ["nnreal"]], ["add", "theorem", "summable_Lp_add", ["nnreal"]], ["add", "theorem", "summable_mul_of_Lp_Lq", ["nnreal"]], ["add", "theorem", "Lp_add_le_tsum_of_nonneg'", ["real"]], ["add", "theorem", "inner_le_Lp_mul_Lq_has_sum_of_nonneg", ["real"]], ["add", "theorem", "inner_le_Lp_mul_Lq_tsum_of_nonneg'", ["real"]], ["add", "theorem", "inner_le_Lp_mul_Lq_tsum_of_nonneg", ["real"]], ["add", "theorem", "summable_Lp_add_of_nonneg", ["real"]], ["add", "theorem", "summable_mul_of_Lp_Lq_of_nonneg", ["real"]]]}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}]}, {"timestamp": 1642096633, "sha": "05044255", "message": "feat(analysis/inner_product_space/basic): criterion for summability (#11224)\nIn a complete inner product space `E`, a family `f` of mutually-orthogonal elements of `E` is summable, if and only if\n`(λ i, ∥f i∥ ^ 2)` is summable.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_sdiff_div_prod_sdiff", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "abs_sum_of_nonneg'", ["finset"]], ["add", "theorem", "abs_sum_of_nonneg", ["finset"]], ["add", "theorem", "one_le_prod''", ["finset"]], ["add", "theorem", "one_le_prod'", ["finset"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_sum", ["orthogonal_family"]], ["add", "theorem", "norm_sq_diff_sum", ["orthogonal_family"]], ["add", "theorem", "norm_sum", ["orthogonal_family"]], ["add", "theorem", "summable_iff_norm_sq_summable", ["orthogonal_family"]]]}]}, {"timestamp": 1642094366, "sha": "6446ba8f", "message": "feat(ring_theory/{trace,norm}): add trace_gen_eq_next_coeff_minpoly and norm_gen_eq_coeff_zero_minpoly (#11420)\nWe add `trace_gen_eq_next_coeff_minpoly` and `norm_gen_eq_coeff_zero_minpoly`.\nFrom flt-regular.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "prod_roots_eq_coeff_zero_of_monic_of_split", ["polynomial"]], ["add", "theorem", "sum_roots_eq_next_coeff_of_monic_of_split", ["polynomial"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["del", "theorem", "norm_gen_eq_prod_roots", ["algebra"]], ["add", "theorem", "norm_gen_eq_coeff_zero_minpoly", ["algebra", "power_basis"]], ["add", "theorem", "norm_gen_eq_prod_roots", ["algebra", "power_basis"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "trace_gen_eq_next_coeff_minpoly", ["power_basis"]]]}]}, {"timestamp": 1642092763, "sha": "ea9f964b", "message": "fix(analysis/calculus/fderiv_symmetric): speed up tactic block from 3.6s to 180ms (#11426)\nThe timings are measured for the single small begin/end block. The proof as a whole is still around 7.6s, down from 11s.\nThe fault here was likely the `convert`, which presumably spent a lot of time trying to unify typeclass arguments.", "changes": [{"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}]}, {"timestamp": 1642092762, "sha": "0f79668f", "message": "feat(measure_theory/function/uniform_integrable): Egorov's theorem (#11328)\nThis PR proves Egorov's theorem which is necessary for the Vitali convergence theorem which is vital for the martingale convergence theorems.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/function/uniform_integrable.lean", "changes": [["add", "def", "Union_not_convergent_seq", ["measure_theory", "egorov"]], ["add", "theorem", "Union_not_convergent_seq_measurable_set", ["measure_theory", "egorov"]], ["add", "theorem", "Union_not_convergent_seq_subset", ["measure_theory", "egorov"]], ["add", "theorem", "exists_not_convergent_seq_lt", ["measure_theory", "egorov"]], ["add", "theorem", "measure_Union_not_convergent_seq", ["measure_theory", "egorov"]], ["add", "theorem", "measure_inter_not_convergent_seq_eq_zero", ["measure_theory", "egorov"]], ["add", "theorem", "measure_not_convergent_seq_tendsto_zero", ["measure_theory", "egorov"]], ["add", "theorem", "mem_not_convergent_seq_iff", ["measure_theory", "egorov"]], ["add", "def", "not_convergent_seq", ["measure_theory", "egorov"]], ["add", "theorem", "not_convergent_seq_antitone", ["measure_theory", "egorov"]], ["add", "def", "not_convergent_seq_lt_index", ["measure_theory", "egorov"]], ["add", "theorem", "not_convergent_seq_lt_index_spec", ["measure_theory", "egorov"]], ["add", "theorem", "not_convergent_seq_measurable_set", ["measure_theory", "egorov"]], ["add", "theorem", "tendsto_uniformly_on_diff_Union_not_convergent_seq", ["measure_theory", "egorov"]], ["add", "theorem", "tendsto_uniformly_on_of_ae_tendsto'", ["measure_theory"]], ["add", "theorem", "tendsto_uniformly_on_of_ae_tendsto", ["measure_theory"]]]}]}, {"timestamp": 1642087131, "sha": "a16a5b5b", "message": "chore(order/lattice_intervals): review (#11416)\n* use `@[reducible] protected def`;\n* add `is_least.order_bot` and `is_greatest.order_top`, use them;\n* weaken TC assumptions on `set.Ici.bounded_order` and `set.Iic.bounded_order`.", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "def", "order_top", ["is_greatest"]], ["add", "def", "order_bot", ["is_least"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_pair", []], ["add", "theorem", "cSup_pair", []]]}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": [["del", "def", "bounded_order", ["set", "Icc"]], ["del", "def", "order_bot", ["set", "Icc"]], ["del", "def", "order_top", ["set", "Icc"]], ["del", "def", "order_bot", ["set", "Ico"]], ["del", "def", "order_top", ["set", "Ioc"]]]}]}, {"timestamp": 1642076721, "sha": "cd4f5c40", "message": "feat(linear_algebra/{cross_product,vectors}): cross product (#11181)\nDefines the cross product for R^3 and gives localized notation for that and the dot product.\nWas https://github.com/leanprover-community/mathlib/pull/10959", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "smul_vec2", ["matrix"]], ["add", "theorem", "smul_vec3", ["matrix"]], ["add", "theorem", "vec2_add", ["matrix"]], ["add", "theorem", "vec2_dot_product'", ["matrix"]], ["add", "theorem", "vec2_dot_product", ["matrix"]], ["add", "theorem", "vec2_eq", ["matrix"]], ["add", "theorem", "vec3_add", ["matrix"]], ["add", "theorem", "vec3_dot_product'", ["matrix"]], ["add", "theorem", "vec3_dot_product", ["matrix"]], ["add", "theorem", "vec3_eq", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/cross_product.lean", "changes": [["add", "def", "lie_ring", ["cross"]], ["add", "theorem", "cross_anticomm'", []], ["add", "theorem", "cross_anticomm", []], ["add", "theorem", "cross_apply", []], ["add", "theorem", "cross_cross", []], ["add", "theorem", "cross_dot_cross", []], ["add", "def", "cross_product", []], ["add", "theorem", "cross_self", []], ["add", "theorem", "dot_cross_self", []], ["add", "theorem", "dot_self_cross", []], ["add", "theorem", "jacobi_cross", []], ["add", "theorem", "leibniz_cross", []], ["add", "theorem", "triple_product_eq_det", []], ["add", "theorem", "triple_product_permutation", []]]}]}, {"timestamp": 1642076720, "sha": "799cdbb2", "message": "feat(data/nat/periodic): periodic functions for nat (#10888)\nAdds a lemma saying that the cardinality of an Ico of length `a` filtered over a periodic predicate of period `a` is the same as the cardinality of `range a` filtered over that predicate.", "changes": [{"oldPath": "src/data/int/interval.lean", "newPath": "src/data/int/interval.lean", "changes": [["add", "theorem", "image_Ico_mod", ["int"]]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "image_Ico_mod", ["nat"]], ["add", "theorem", "mod_inj_on_Ico", ["nat"]], ["add", "theorem", "multiset_Ico_map_mod", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/periodic.lean", "changes": [["add", "theorem", "map_mod_nat", ["function", "periodic"]], ["add", "theorem", "filter_Ico_card_eq_of_periodic", ["nat"]], ["add", "theorem", "filter_multiset_Ico_card_eq_of_periodic", ["nat"]], ["add", "theorem", "periodic_coprime", ["nat"]], ["add", "theorem", "periodic_gcd", ["nat"]], ["add", "theorem", "periodic_mod", ["nat"]]]}]}, {"timestamp": 1642076718, "sha": "6609204b", "message": "feat(algebraic_geometry): Gluing presheafed spaces (#10269)", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/presheafed_space/gluing.lean", "changes": [["add", "theorem", "coe_to_fun_eq", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "diagram_over_open", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "def", "diagram_over_open_π", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "f_inv_app_f_app", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "def", "opens_image_preimage_map", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "opens_image_preimage_map_app'", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "opens_image_preimage_map_app", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "opens_image_preimage_map_app_assoc", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "pullback_base", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "snd_inv_app_t_app'", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "snd_inv_app_t_app", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "def", "to_Top_glue_data", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "ι_image_preimage_eq", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "def", "ι_inv_app", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "ι_inv_app_π", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "def", "ι_inv_app_π_app", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "def", "ι_inv_app_π_eq_map", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "ι_open_embedding", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "π_ι_inv_app_eq_id", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "theorem", "π_ι_inv_app_π", ["algebraic_geometry", "PresheafedSpace", "glue_data"]], ["add", "structure", "glue_data", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["add", "theorem", "pullback_fst_image_snd_preimage", ["Top"]], ["add", "theorem", "pullback_snd_image_fst_preimage", ["Top"]]]}]}, {"timestamp": 1642057700, "sha": "e6db2457", "message": "chore(ring_theory/roots_of_unity): change argument order (#11415)\nthis is for easier dot notation in situations such as `refine`.", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "map_of_injective", ["is_primitive_root"]], ["mod", "theorem", "of_map_of_injective", ["is_primitive_root"]]]}]}, {"timestamp": 1642057699, "sha": "0c844566", "message": "feat(order,data/set/intervals): lemmas about `is_bot`/`is_top` (#11412)\n* add `is_top.Iic_eq`, `is_bot.Ici_eq`, `is_top.Ioi_eq`,\n `is_bot.Iio_eq`, `set.Ioi_top`, `set.Iio_bot`;\n* rename `set.Ici_singleton_of_top` and `set.Iic_singleton_of_bot` to\n `is_top.Ici_eq` and `is_bot.Iic_eq`;\n* add `is_top_or_exists_gt`, `is_bot_or_exists_lt`, `is_top_top`, and\n `is_bot_bot`;\n* add `is_top.to_dual` and `is_bot.to_dual`;\n* add `set.empty_ssubset`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "empty_ssubset", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ici_eq", ["is_bot"]], ["add", "theorem", "Iic_eq", ["is_bot"]], ["add", "theorem", "Iio_eq", ["is_bot"]], ["add", "theorem", "Ici_eq", ["is_top"]], ["add", "theorem", "Iic_eq", ["is_top"]], ["add", "theorem", "Ioi_eq", ["is_top"]], ["mod", "theorem", "Ici_bot", ["set"]], ["del", "theorem", "Ici_singleton_of_top", ["set"]], ["mod", "theorem", "Iic_inter_Ioc_of_le", ["set"]], ["del", "theorem", "Iic_singleton_of_bot", ["set"]], ["mod", "theorem", "Iic_top", ["set"]], ["add", "theorem", "Iio_bot", ["set"]], ["add", "theorem", "Ioi_top", ["set"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "is_bot_or_exists_lt", []], ["add", "theorem", "is_top_or_exists_gt", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "is_bot_bot", []], ["add", "theorem", "is_top_top", []]]}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": [["add", "theorem", "to_dual", ["is_bot"]], ["add", "theorem", "to_dual", ["is_top"]]]}]}, {"timestamp": 1642057697, "sha": "3f1ac6c5", "message": "doc(number_theory/cyclotomic/basic): fix docstrings (#11411)", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}]}, {"timestamp": 1642057696, "sha": "e839c9ae", "message": "feat(combinatorics/configuration): Cardinality results for projective plane. (#11406)\nThis PR proves several cardinality results for projective planes (e.g., number of points = number of lines, number of points on given line = number of lines on given point).\nIt looks like the `exists_config` (whose sole purpose is to rule out [the 7th example here](https://en.wikipedia.org/wiki/Projective_plane#Degenerate_planes)) can be weakened slightly.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "card_points_eq_card_lines", ["configuration", "projective_plane"]], ["add", "theorem", "line_count_eq_line_count", ["configuration", "projective_plane"]], ["add", "theorem", "line_count_eq_point_count", ["configuration", "projective_plane"]], ["add", "theorem", "point_count_eq_point_count", ["configuration", "projective_plane"]]]}]}, {"timestamp": 1642054813, "sha": "12b6b993", "message": "refactor(linear_algebra/affine_space): move def of `slope` to a new file (#11361)\nAlso add a few trivial lemmas.", "changes": [{"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": [["del", "theorem", "eq_of_slope_eq_zero", []], ["del", "theorem", "line_map_slope_line_map_slope_line_map", []], ["del", "theorem", "line_map_slope_slope_sub_div_sub", []], ["del", "def", "slope", []], ["del", "theorem", "slope_comm", []], ["del", "theorem", "slope_def_field", []], ["del", "theorem", "slope_same", []], ["del", "theorem", "sub_div_sub_smul_slope_add_sub_div_sub_smul_slope", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/slope.lean", "changes": [["add", "theorem", "eq_of_slope_eq_zero", []], ["add", "theorem", "line_map_slope_line_map_slope_line_map", []], ["add", "theorem", "line_map_slope_slope_sub_div_sub", []], ["add", "def", "slope", []], ["add", "theorem", "slope_comm", []], ["add", "theorem", "slope_def_field", []], ["add", "theorem", "slope_def_module", []], ["add", "theorem", "slope_same", []], ["add", "theorem", "slope_sub_smul", []], ["add", "theorem", "slope_vadd_const", []], ["add", "theorem", "sub_div_sub_smul_slope_add_sub_div_sub_smul_slope", []], ["add", "theorem", "sub_smul_slope", []], ["add", "theorem", "sub_smul_slope_vadd", []]]}]}, {"timestamp": 1642038148, "sha": "3fed75a2", "message": "doc(data/pfun): fix a typo (#11410)", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}]}, {"timestamp": 1642038146, "sha": "dfad4c6b", "message": "fix(data/equiv/set): Fix doc comment syntax (#11409)", "changes": [{"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}]}, {"timestamp": 1642038145, "sha": "1f370bb4", "message": "feat(linear_algebra/pi): linear_map.vec_cons and friends (#11343)\nThe idea of these definitions is to be able to define a map as `x ↦ ![f₁ x, f₂ x, f₃ x]`, where\n`f₁ f₂ f₃` are already linear maps, as `f₁.vec_cons $ f₂.vec_cons $ f₃.vec_cons $ vec_empty`.\nThis adds the same thing for bilinear maps as `x y ↦ ![f₁ x y, f₂ x y, f₃ x y]`.\nWhile the same thing could be achieved using `linear_map.pi ![f₁, f₂, f₃]`, this is not\ndefinitionally equal to the result using `linear_map.vec_cons`, as `fin.cases` and function\napplication do not commute definitionally.\nVersions for when `f₁ f₂ f₃` are bilinear maps are also provided.", "changes": [{"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "vec_cons", ["linear_map"]], ["add", "theorem", "vec_cons_apply", ["linear_map"]], ["add", "def", "vec_cons₂", ["linear_map"]], ["add", "def", "vec_empty", ["linear_map"]], ["add", "theorem", "vec_empty_apply", ["linear_map"]], ["add", "def", "vec_empty₂", ["linear_map"]]]}]}, {"timestamp": 1642027785, "sha": "e6fab1dc", "message": "refactor(order/directed): Make `is_directed` a Prop mixin (#11238)\nThis turns `directed_order` into a Prop-valued mixin `is_directed`. The design follows the unbundled relation classes found in core Lean.\nThe current design created obscure problems when showing that a `semilattice_sup` is directed and we couldn't even state that `semilattice_inf` is codirected. Further, it was kind of already used as a mixin, because there was no point inserting it in the hierarchy.", "changes": [{"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": [["mod", "def", "direct_limit_is_colimit", ["Module"]]]}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "theorem", "lift_unique", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "zero_exact", ["add_comm_group", "direct_limit", "of"]], ["mod", "theorem", "exists_of", ["module", "direct_limit"]], ["mod", "theorem", "lift_unique", ["module", "direct_limit"]], ["mod", "theorem", "zero_exact", ["module", "direct_limit", "of"]], ["mod", "theorem", "zero_exact_aux", ["module", "direct_limit", "of"]], ["mod", "theorem", "exists_of", ["ring", "direct_limit"]], ["mod", "theorem", "induction_on", ["ring", "direct_limit"]], ["mod", "theorem", "lift_unique", ["ring", "direct_limit"]], ["mod", "theorem", "zero_exact", ["ring", "direct_limit", "of"]], ["mod", "theorem", "zero_exact_aux", ["ring", "direct_limit", "of"]], ["mod", "theorem", "of_injective", ["ring", "direct_limit"]], ["mod", "theorem", "exists_of", ["ring", "direct_limit", "polynomial"]]]}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/analysis/convex/quasiconvex.lean", "newPath": "src/analysis/convex/quasiconvex.lean", "changes": [["mod", "theorem", "convex", ["quasiconcave_on"]], ["mod", "theorem", "convex", ["quasiconvex_on"]]]}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/combinatorics/hall/basic.lean", "newPath": "src/combinatorics/hall/basic.lean", "changes": [["del", "def", "hall_finset_directed_order", []]]}, {"oldPath": "src/data/finset/order.lean", "newPath": "src/data/finset/order.lean", "changes": [["mod", "theorem", "exists_le", ["finset"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "exists_forall_le", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "directed_id", []], ["add", "theorem", "directed_id_iff_is_directed", []], ["add", "theorem", "directed_of", []], ["add", "theorem", "exists_ge_ge", []], ["add", "theorem", "exists_le_le", []], ["add", "theorem", "is_directed_mono", []]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integral.lean", "newPath": "src/ring_theory/valuation/integral.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}]}, {"timestamp": 1642020698, "sha": "2a380976", "message": "feat(combinatorics/configuration): Define projective planes (#11390)\nThis PR defines abstract projective planes and their duals. More will be PRed later.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1642009959, "sha": "5e48b217", "message": "feat(number_theory/cyclotomic/basic): add cyclotomic_field and cyclotomic_ring (#11383)\nWe add `cyclotomic_field` and `cyclotomic_ring`, that provide an explicit cyclotomic extension of a given field/ring.\nFrom flt-regular", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["add", "def", "algebra_base", ["cyclotomic_field"]], ["add", "def", "cyclotomic_field", []], ["add", "theorem", "adjoin_algebra_injective", ["cyclotomic_ring"]], ["add", "def", "algebra_base", ["cyclotomic_ring"]], ["add", "theorem", "algebra_base_injective", ["cyclotomic_ring"]], ["add", "def", "cyclotomic_ring", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1642009958, "sha": "fa9d2bf3", "message": "feat(data/mv_polynomial/variables): add mv_polynomial.total_deg_finset_sum (#11375)\nTotal degree of a sum of mv_polynomials is less than or equal to the maximum of all their degrees.", "changes": [{"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "total_degree_finset_sum", ["mv_polynomial"]]]}]}, {"timestamp": 1642009957, "sha": "258686f9", "message": "fix(order/complete_lattice): fix diamond in sup vs max and min vs inf (#11309)\n`complete_linear_order` has separate `max` and `sup` fields. There is no need to have both, so this removes one of them by telling the structure compiler to merge the two fields. The same is true of `inf` and `min`.\nAs well as diamonds being possible in the abstract case, a handful of concrete example of this diamond existed.\n`linear_order` instances with default-populated fields were usually to blame.", "changes": [{"oldPath": "src/algebra/tropical/big_operators.lean", "newPath": "src/algebra/tropical/big_operators.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["del", "theorem", "inf_eq_min", ["enat"]], ["del", "theorem", "sup_eq_max", ["enat"]]]}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "add_top", ["ennreal"]], ["mod", "theorem", "top_add", ["ennreal"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_eq_min_default", []], ["add", "theorem", "sup_eq_max_default", []]]}]}, {"timestamp": 1642004720, "sha": "975031d5", "message": "feat(data/nat/factorization): add lemma `factorization_prod` (#11395)\nFor any `p : ℕ` and any function `g : α → ℕ` that's non-zero on `S : finset α`, the power of `p` in `S.prod g` equals the sum over `x ∈ S` of the powers of `p` in `g x`.\nGeneralises `factorization_mul`, which is the special case where `S.card = 2` and `g = id`.", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factorization_prod", ["nat"]]]}]}, {"timestamp": 1642004717, "sha": "67593dcd", "message": "fix(tactic/ring_exp): fix normalization proof of unchanged subexpressions (#11394)\nWhen trying to simplify a goal (instead of proving equalities), `ring_exp` will rewrite subexpressions to a normal form, then simplify this normal form by removing extraneous `+ 0`s and `* 1`s. Both steps return a new expression and a proof that the *step*'s input expression equals the output expression.\nIn some cases where the normal form and simplified form coincide, `ex.simplify` would instead output a proof that *ring_exp*'s input expression equals the output expression, so we'd get a type error in trying to compose a proof that `a = b` with a proof that `a = b`.\nThis PR fixes that bug by returning instead a proof that `b = b`, as expected.", "changes": [{"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1641994616, "sha": "aece00a2", "message": "feat(data/sigma/interval): A disjoint sum of locally finite orders is locally finite (#10929)\nThis provides `locally_finite_order (Σ i, α i)` in a new file `data.sigma.interval`. This also makes `<` a primitive on `Σ i, α i`.", "changes": [{"oldPath": null, "newPath": "src/data/sigma/interval.lean", "changes": [["add", "theorem", "Icc_mk_mk", ["sigma"]], ["add", "theorem", "Ico_mk_mk", ["sigma"]], ["add", "theorem", "Ioc_mk_mk", ["sigma"]], ["add", "theorem", "Ioo_mk_mk", ["sigma"]], ["add", "theorem", "card_Icc", ["sigma"]], ["add", "theorem", "card_Ico", ["sigma"]], ["add", "theorem", "card_Ioc", ["sigma"]], ["add", "theorem", "card_Ioo", ["sigma"]]]}, {"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": [["add", "theorem", "le_def", ["sigma"]], ["add", "inductive", "lt", ["sigma"]], ["add", "theorem", "lt_def", ["sigma"]], ["add", "theorem", "mk_le_mk_iff", ["sigma"]], ["add", "theorem", "mk_lt_mk_iff", ["sigma"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": []}]}, {"timestamp": 1641985731, "sha": "e8eb7d96", "message": "feat(order/cover): `f a` covers `f b` iff `a` covers `b` (#11392)\n... for order isomorphisms, and also weaker statements.", "changes": [{"oldPath": "src/order/cover.lean", "newPath": "src/order/cover.lean", "changes": [["add", "theorem", "apply_covers_apply_iff", []], ["add", "theorem", "image", ["covers"]], ["add", "theorem", "of_image", ["covers"]], ["add", "theorem", "densely_ordered_iff_forall_not_covers", []], ["add", "theorem", "of_dual_covers_of_dual_iff", []]]}]}, {"timestamp": 1641981973, "sha": "912c47d3", "message": "feat(topology/algebra/continuous_monoid_hom): New file (#11304)\nThis PR defines continuous monoid homs.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/continuous_monoid_hom.lean", "changes": [["add", "structure", "continuous_add_monoid_hom", []], ["add", "def", "comp", ["continuous_monoid_hom"]], ["add", "def", "coprod", ["continuous_monoid_hom"]], ["add", "def", "diag", ["continuous_monoid_hom"]], ["add", "theorem", "ext", ["continuous_monoid_hom"]], ["add", "def", "fst", ["continuous_monoid_hom"]], ["add", "def", "id", ["continuous_monoid_hom"]], ["add", "def", "inl", ["continuous_monoid_hom"]], ["add", "def", "inr", ["continuous_monoid_hom"]], ["add", "def", "inv", ["continuous_monoid_hom"]], ["add", "def", "mk'", ["continuous_monoid_hom"]], ["add", "def", "mul", ["continuous_monoid_hom"]], ["add", "def", "one", ["continuous_monoid_hom"]], ["add", "def", "prod", ["continuous_monoid_hom"]], ["add", "def", "prod_map", ["continuous_monoid_hom"]], ["add", "def", "snd", ["continuous_monoid_hom"]], ["add", "def", "swap", ["continuous_monoid_hom"]], ["add", "structure", "continuous_monoid_hom", []]]}]}, {"timestamp": 1641972666, "sha": "c1f3f1af", "message": "feat(analysis/complex/basic): determinant of `conj_lie` (#11389)\nAdd lemmas giving the determinant of `conj_lie`, as a linear map and\nas a linear equiv, deduced from the corresponding lemmas for `conj_ae`\nwhich is used to define `conj_lie`. This completes the basic lemmas\nabout determinants of linear isometries of `ℂ` (which can thus be used\nto talk about how those isometries affect orientations), since we also\nhave `linear_isometry_complex` describing all such isometries in terms\nof `rotation` and `conj_lie`.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "det_conj_lie", ["complex"]], ["add", "theorem", "linear_equiv_det_conj_lie", ["complex"]]]}]}, {"timestamp": 1641972664, "sha": "72c86c3f", "message": "chore(algebra/ring/basic): generalize `is_domain.to_cancel_monoid_with_zero` to `no_zero_divisors` (#11387)\nThis generalization doesn't work for typeclass search as `cancel_monoid_with_zero` implies `no_zero_divisors` which would form a loop, but it can be useful for a `letI` in another proof.\nIndependent of whether this turns out to be useful, it's nice to show that nontriviality doesn't affect the fact that rings with no zero divisors are cancellative.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "def", "to_cancel_monoid_with_zero", ["no_zero_divisors"]]]}]}, {"timestamp": 1641972663, "sha": "cb1b6d97", "message": "feat(algebra/order/floor): adds some missing floor API (#11336)", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["mod", "theorem", "ceil_to_nat", ["int"]], ["mod", "theorem", "floor_to_nat", ["int"]], ["add", "theorem", "cast_ceil_eq_cast_int_ceil", ["nat"]], ["add", "theorem", "cast_ceil_eq_int_ceil", ["nat"]], ["add", "theorem", "cast_floor_eq_cast_int_floor", ["nat"]], ["add", "theorem", "cast_floor_eq_int_floor", ["nat"]], ["add", "theorem", "floor_le_of_le", ["nat"]]]}]}, {"timestamp": 1641972662, "sha": "bfe95158", "message": "feat(data/multiset/basic): add map_count_true_eq_filter_card (#11306)\nAdd a lemma about counting over a map. Spun off of #10888.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_eq_card_filter_eq", ["multiset"]], ["add", "theorem", "map_count_true_eq_filter_card", ["multiset"]]]}]}, {"timestamp": 1641972660, "sha": "9fd03e1d", "message": "chore(order/lexicographic): cleanup (#11299)\nChanges include:\n* factoring out `prod.lex.trans` from the proof of `le_trans` in `prod.lex.has_le`, and similarly for `antisymm` and `is_total`\n* adding some missing `to_lex` annotations in the `prod.lex.{le,lt}_def` lemmas\n* avoiding reproving decidability of `prod.lex`\n* replacing some proofs with pattern matching to avoid getting type-incorrect goals where `prod.lex.has_le` appears comparing terms that are not of type `lex`.", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "refl_left", ["prod", "lex"]], ["add", "theorem", "refl_right", ["prod", "lex"]], ["add", "theorem", "trans", ["prod", "lex"]]]}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": [["mod", "theorem", "le_iff", ["prod", "lex"]], ["mod", "theorem", "lt_iff", ["prod", "lex"]]]}]}, {"timestamp": 1641972659, "sha": "deac58aa", "message": "feat(topology/uniform_space/compact_convergence): when the domain is locally compact, compact convergence is just locally uniform convergence (#11292)\nAlso, locally uniform convergence is just uniform convergence when the domain is compact.", "changes": [{"oldPath": "src/topology/uniform_space/compact_convergence.lean", "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": [["mod", "theorem", "tendsto_iff_forall_compact_tendsto_uniformly_on", ["continuous_map"]], ["add", "theorem", "tendsto_iff_tendsto_locally_uniformly", ["continuous_map"]], ["mod", "theorem", "tendsto_iff_tendsto_uniformly", ["continuous_map"]], ["add", "theorem", "tendsto_locally_uniformly_of_tendsto", ["continuous_map"]], ["add", "theorem", "tendsto_of_tendsto_locally_uniformly", ["continuous_map"]]]}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "tendsto_locally_uniformly_iff_tendsto_uniformly_of_compact_space", []], ["add", "theorem", "tendsto_locally_uniformly_on_iff_tendsto_locally_uniformly_comp_coe", []], ["add", "theorem", "tendsto_locally_uniformly_on_iff_tendsto_uniformly_on_of_compact", []], ["add", "theorem", "tendsto_uniformly_on_iff_tendsto_uniformly_comp_coe", []]]}]}, {"timestamp": 1641972658, "sha": "20997252", "message": "feat(topology/homotopy/product): Product of homotopic paths (#11153)\nSpecialize homotopy products to paths and prove some theorems about the product of paths.", "changes": [{"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": []}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": [["add", "theorem", "comp_lift", ["path", "homotopic"]], ["add", "theorem", "map_lift", ["path", "homotopic"]], ["add", "def", "comp", ["path", "homotopic", "quotient"]], ["add", "def", "map_fn", ["path", "homotopic", "quotient"]]]}, {"oldPath": "src/topology/homotopy/product.lean", "newPath": "src/topology/homotopy/product.lean", "changes": [["add", "theorem", "comp_pi_eq_pi_comp", ["path", "homotopic"]], ["add", "theorem", "comp_prod_eq_prod_comp", ["path", "homotopic"]], ["add", "def", "pi", ["path", "homotopic"]], ["add", "def", "pi_homotopy", ["path", "homotopic"]], ["add", "theorem", "pi_lift", ["path", "homotopic"]], ["add", "theorem", "pi_proj", ["path", "homotopic"]], ["add", "def", "prod", ["path", "homotopic"]], ["add", "def", "prod_homotopy", ["path", "homotopic"]], ["add", "theorem", "prod_lift", ["path", "homotopic"]], ["add", "theorem", "prod_proj_left_proj_right", ["path", "homotopic"]], ["add", "def", "proj", ["path", "homotopic"]], ["add", "def", "proj_left", ["path", "homotopic"]], ["add", "theorem", "proj_left_prod", ["path", "homotopic"]], ["add", "theorem", "proj_pi", ["path", "homotopic"]], ["add", "def", "proj_right", ["path", "homotopic"]], ["add", "theorem", "proj_right_prod", ["path", "homotopic"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "pi_coe_fn", ["path"]], ["add", "theorem", "prod_coe_fn", ["path"]], ["add", "theorem", "trans_pi_eq_pi_trans", ["path"]], ["add", "theorem", "trans_prod_eq_prod_trans", ["path"]]]}]}, {"timestamp": 1641963898, "sha": "15b5e24e", "message": "feat(data/polynomial/taylor): taylor's formula (#11139)\nVia proofs about `hasse_deriv`.\nAdded some monomial API too.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "sup_ite", ["finset"]]]}, {"oldPath": "src/data/nat/with_bot.lean", "newPath": "src/data/nat/with_bot.lean", "changes": [["add", "theorem", "lt_one_iff_le_zero", ["nat", "with_bot"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_C_lt", ["polynomial"]], ["add", "theorem", "leading_coeff_pow_X_add_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": [["add", "theorem", "hasse_deriv_eq_zero_of_lt_nat_degree", ["polynomial"]], ["add", "theorem", "nat_degree_hasse_deriv", ["polynomial"]], ["add", "theorem", "nat_degree_hasse_deriv_le", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/taylor.lean", "newPath": "src/data/polynomial/taylor.lean", "changes": [["add", "theorem", "nat_degree_taylor", ["polynomial"]], ["add", "theorem", "sum_taylor_eq", ["polynomial"]], ["add", "theorem", "taylor_monomial", ["polynomial"]], ["add", "theorem", "taylor_taylor", ["polynomial"]], ["add", "theorem", "taylor_zero'", ["polynomial"]], ["add", "theorem", "taylor_zero", ["polynomial"]]]}]}, {"timestamp": 1641960173, "sha": "af074c84", "message": "feat(analysis/normed_space/lp_space): API for `lp.single` (#11307)\nDefinition and basic properties for `lp.single`, an element of `lp` space supported at one point.", "changes": [{"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["add", "theorem", "coe_fn_sum", ["lp"]]]}]}, {"timestamp": 1641954671, "sha": "cdd44cd7", "message": "refactor(topology/algebra/uniform_group): Use `to_additive` (#11366)\nThis PR replace the definition\n`def topological_add_group.to_uniform_space : uniform_space G :=`\nwith the definition\n`@[to_additive] def topological_group.to_uniform_space : uniform_space G :=`", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["del", "def", "to_uniform_space", ["topological_add_group"]], ["add", "def", "to_uniform_space", ["topological_group"]]]}]}, {"timestamp": 1641946102, "sha": "89f4786e", "message": "feat(analysis/special_functions/pow): norm_num extension for rpow (#11382)\nFixes #11374", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "zpow_neg_coe_of_pos", []]]}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "cpow_neg", ["norm_num"]], ["add", "theorem", "cpow_pos", ["norm_num"]], ["add", "theorem", "ennrpow_neg", ["norm_num"]], ["add", "theorem", "ennrpow_pos", ["norm_num"]], ["add", "theorem", "nnrpow_neg", ["norm_num"]], ["add", "theorem", "nnrpow_pos", ["norm_num"]], ["add", "theorem", "rpow_neg", ["norm_num"]], ["add", "theorem", "rpow_pos", ["norm_num"]]]}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["add", "theorem", "zpow_neg", ["norm_num"]], ["add", "theorem", "zpow_pos", ["norm_num"]]]}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1641946101, "sha": "647598bd", "message": "feat(data/nat/factorization): add lemma `factorization_le_iff_dvd` (#11377)\nFor non-zero `d n : ℕ`, `d.factorization ≤ n.factorization ↔ d ∣ n`", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factorization_le_iff_dvd", ["nat"]]]}]}, {"timestamp": 1641934156, "sha": "a5f79090", "message": "fix(algebra/tropical/basic): provide explicit min and max (#11380)\nThis also renames `tropical.add` to `tropical.has_add`, since this matches how we normally do this, and it makes unfolding easier.\nWithout this change, we have a diamond where `linear_order.min` is not defeq to `lattice.inf`.", "changes": [{"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": [["add", "theorem", "inf_eq_add", ["tropical"]], ["add", "theorem", "min_eq_add", ["tropical"]], ["add", "theorem", "trop_max_def", ["tropical"]], ["add", "theorem", "trop_sup_def", ["tropical"]], ["add", "theorem", "untrop_max", ["tropical"]], ["add", "theorem", "untrop_sup", ["tropical"]]]}]}, {"timestamp": 1641934155, "sha": "73847ff3", "message": "feat(algebra/indicator_function): add primed version for `mul_indicator_mul` and `indicator_sub` (#11379)", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["del", "theorem", "indicator_sub", ["set"]], ["add", "theorem", "mul_indicator_div'", ["set"]], ["add", "theorem", "mul_indicator_div", ["set"]], ["add", "theorem", "mul_indicator_mul'", ["set"]]]}]}, {"timestamp": 1641934154, "sha": "d1c49616", "message": "feat(data/real/ennreal): add ennreal lemma for `a / 3 + a / 3 + a / 3 = a` (#11378)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "add_thirds", ["ennreal"]], ["add", "theorem", "inv_three_add_inv_three", ["ennreal"]]]}]}, {"timestamp": 1641934153, "sha": "57a8933b", "message": "feat(group_theory/free_group): promote free_group_congr to a mul_equiv (#11373)\nAlso some various golfs and cleanups", "changes": [{"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["mod", "def", "free_group_congr", ["free_group"]], ["add", "theorem", "free_group_congr_refl", ["free_group"]], ["add", "theorem", "free_group_congr_symm", ["free_group"]], ["add", "theorem", "free_group_congr_trans", ["free_group"]], ["del", "def", "aux", ["free_group", "map"]], ["mod", "theorem", "comp", ["free_group", "map"]], ["mod", "theorem", "id'", ["free_group", "map"]], ["mod", "theorem", "id", ["free_group", "map"]], ["del", "def", "to_fun", ["free_group", "map"]], ["mod", "def", "map", ["free_group"]], ["add", "theorem", "quot_map_mk", ["free_group"]]]}]}, {"timestamp": 1641934152, "sha": "8db96a8f", "message": "feat(combinatorics/double_counting): Double-counting the edges of a bipartite graph (#11372)\nThis proves a classic of double-counting arguments: If each element of the `|α|` elements on the left is connected to at least `m` elements on the right and each of the `|β|` elements on the right is connected to at most `n` elements on the left, then `|α| * m ≤ |β| * n` because the LHS is less than the number of edges which is less than the RHS.\nThis is put in a new file `combinatorics.double_counting` with the idea that we could gather double counting arguments here, much as is done with `combinatorics.pigeonhole`.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/double_counting.lean", "changes": [["add", "def", "bipartite_above", ["finset"]], ["add", "theorem", "bipartite_above_swap", ["finset"]], ["add", "def", "bipartite_below", ["finset"]], ["add", "theorem", "bipartite_below_swap", ["finset"]], ["add", "theorem", "card_mul_eq_card_mul", ["finset"]], ["add", "theorem", "card_mul_le_card_mul'", ["finset"]], ["add", "theorem", "card_mul_le_card_mul", ["finset"]], ["add", "theorem", "mem_bipartite_above", ["finset"]], ["add", "theorem", "mem_bipartite_below", ["finset"]], ["add", "theorem", "sum_card_bipartite_above_eq_sum_card_bipartite_below", ["finset"]]]}]}, {"timestamp": 1641934151, "sha": "93e77412", "message": "feat(ring_theory/witt_vector): Witt vectors over a domain are a domain (#11346)", "changes": [{"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": [["add", "def", "constant_coeff", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": [["add", "theorem", "add_coeff_zero", ["witt_vector"]], ["add", "theorem", "mul_coeff_zero", ["witt_vector"]]]}, {"oldPath": null, "newPath": "src/ring_theory/witt_vector/domain.lean", "changes": [["add", "theorem", "eq_iterate_verschiebung", ["witt_vector"]], ["add", "def", "shift", ["witt_vector"]], ["add", "theorem", "shift_coeff", ["witt_vector"]], ["add", "theorem", "verschiebung_nonzero", ["witt_vector"]], ["add", "theorem", "verschiebung_shift", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/identities.lean", "newPath": "src/ring_theory/witt_vector/identities.lean", "changes": [["add", "theorem", "coeff_p_pow_eq_zero", ["witt_vector"]], ["add", "theorem", "iterate_frobenius_coeff", ["witt_vector"]], ["add", "theorem", "iterate_verschiebung_coeff", ["witt_vector"]], ["add", "theorem", "iterate_verschiebung_mul", ["witt_vector"]], ["add", "theorem", "iterate_verschiebung_mul_coeff", ["witt_vector"]], ["add", "theorem", "iterate_verschiebung_mul_left", ["witt_vector"]], ["add", "theorem", "mul_char_p_coeff_succ", ["witt_vector"]], ["add", "theorem", "mul_char_p_coeff_zero", ["witt_vector"]], ["add", "theorem", "verschiebung_frobenius", ["witt_vector"]], ["add", "theorem", "verschiebung_frobenius_comm", ["witt_vector"]]]}]}, {"timestamp": 1641934149, "sha": "83b03557", "message": "feat(analysis/complex/isometry): `rotation` matrix representation and determinant (#11339)\nAdd lemmas giving the matrix representation of `rotation` (with\nrespect to `basis_one_I`), and its determinant (both as a linear map\nand as a linear equiv). This is preparation for doing things about\nhow isometries affect orientations.", "changes": [{"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": [["add", "theorem", "det_rotation", []], ["add", "theorem", "linear_equiv_det_rotation", []], ["add", "theorem", "to_matrix_rotation", []]]}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}]}, {"timestamp": 1641934148, "sha": "e4a41e6f", "message": "feat(data/complex/module,data/complex/determinant): `conj_ae` matrix representation and determinant (#11337)\nAdd lemmas giving the matrix representation of `conj_ae` (with respect\nto `basis_one_I`), and its determinant (both as a linear map and as a\nlinear equiv). This is preparation for doing things about how\nisometries affect orientations (so it's actually `conj_lie` I'm\ninterested in, but `conj_lie` is defined in terms of `conj_ae` so\nproving things first for `conj_ae` seems appropriate).", "changes": [{"oldPath": null, "newPath": "src/data/complex/determinant.lean", "changes": [["add", "theorem", "det_conj_ae", ["complex"]], ["add", "theorem", "linear_equiv_det_conj_ae", ["complex"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "theorem", "to_matrix_conj_ae", ["complex"]]]}]}, {"timestamp": 1641934147, "sha": "aa7a439d", "message": "feat(algebra/*): injective hom into kernel `map_eq_*_iff` (#11275)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "map_eq_one_iff", []]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}]}, {"timestamp": 1641934146, "sha": "94fd004d", "message": "feat(order/minimal): Subset of minimal/maximal elements (#11268)\nThis defines `minimals r s`/`maximals r s` the minimal/maximal elements of `s` with respect to relation `r`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "sep_empty", ["set"]]]}, {"oldPath": "src/order/antichain.lean", "newPath": "src/order/antichain.lean", "changes": [["add", "theorem", "eq_of_related'", ["is_antichain"]], ["del", "theorem", "mk_is_antichain", ["is_antichain"]], ["del", "theorem", "mk_max", ["is_antichain"]], ["del", "theorem", "mk_subset", ["is_antichain"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "ge_antisymm", []]]}, {"oldPath": null, "newPath": "src/order/minimal.lean", "changes": [["add", "theorem", "inter_maximals_subset", []], ["add", "theorem", "inter_minimals_subset", []], ["add", "theorem", "max_maximals", ["is_antichain"]], ["add", "theorem", "max_minimals", ["is_antichain"]], ["add", "theorem", "maximals_eq", ["is_antichain"]], ["add", "theorem", "minimals_eq", ["is_antichain"]], ["add", "theorem", "maximals_eq", ["is_greatest"]], ["add", "theorem", "mem_maximals", ["is_greatest"]], ["add", "theorem", "mem_minimals", ["is_least"]], ["add", "theorem", "minimals_eq", ["is_least"]], ["add", "def", "maximals", []], ["add", "theorem", "maximals_antichain", []], ["add", "theorem", "maximals_empty", []], ["add", "theorem", "maximals_eq_minimals", []], ["add", "theorem", "maximals_idem", []], ["add", "theorem", "maximals_inter_subset", []], ["add", "theorem", "maximals_mono", []], ["add", "theorem", "maximals_singleton", []], ["add", "theorem", "maximals_subset", []], ["add", "theorem", "maximals_swap", []], ["add", "theorem", "maximals_union", []], ["add", "def", "minimals", []], ["add", "theorem", "minimals_antichain", []], ["add", "theorem", "minimals_empty", []], ["add", "theorem", "minimals_idem", []], ["add", "theorem", "minimals_inter_subset", []], ["add", "theorem", "minimals_mono", []], ["add", "theorem", "minimals_singleton", []], ["add", "theorem", "minimals_subset", []], ["add", "theorem", "minimals_swap", []], ["add", "theorem", "minimals_union", []], ["add", "theorem", "maximals_eq", ["set", "subsingleton"]], ["add", "theorem", "minimals_eq", ["set", "subsingleton"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "comm", []], ["add", "theorem", "comm_of", []]]}]}, {"timestamp": 1641934144, "sha": "490847ee", "message": "feat(data/polynomial/degree/lemmas): add induction principle for non-constant polynomials (#8463)\nThis PR introduces an induction principle to prove that a property holds for non-constant polynomials. It suffices to check that the property holds for\n* the sum of a constant polynomial and any polynomial for which the property holds;\n* the sum of any two polynomials for which the property holds;\n* for non-constant monomials.\nI plan to use this to show that polynomials with coefficients in `ℕ` are monotone.", "changes": [{"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": [["add", "theorem", "nat_degree_ne_zero_induction_on", ["polynomial"]]]}]}, {"timestamp": 1641922605, "sha": "b7107717", "message": "chore(*): update to 3.38.0c (#11371)", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}, {"oldPath": "src/combinatorics/hall/finite.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "mem_neighbor_set'", ["simple_graph"]]]}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "piecewise_coe", ["finset"]]]}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}, {"oldPath": "src/data/finsupp/multiset.lean", "newPath": "src/data/finsupp/multiset.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_congr'", ["fintype"]], ["add", "theorem", "to_finset_congr", ["set"]]]}, {"oldPath": "src/data/fintype/fin.lean", "newPath": "src/data/fintype/fin.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_congr'", ["list"]], ["del", "theorem", "filter_congr", ["list"]], ["add", "theorem", "map_id''", ["list"]]]}, {"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": "src/data/list/lattice.lean", "newPath": "src/data/list/lattice.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/permutation.lean", "newPath": "src/data/list/permutation.lean", "changes": []}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "map_comp_cons", ["multiset"]], ["mod", "theorem", "map_congr", ["multiset"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": [["add", "theorem", "cons_ext", ["multiset", "pi"]]]}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/data/nat/count.lean", "newPath": "src/data/nat/count.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["mod", "theorem", "guard_eq_some'", ["option"]]]}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": []}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/group_theory/commuting_probability.lean", "newPath": "src/group_theory/commuting_probability.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1641909335, "sha": "b8d2affd", "message": "refactor(ring_theory/discriminant): refactor discr_not_zero_of_linear_independent (#11370)\n`(hcard : fintype.card ι = finite_dimensional.finrank K L) (hli : linear_independent K b)` is better expressed as `b : basis ι K L`.", "changes": [{"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": [["add", "theorem", "discr_not_zero_of_basis", ["algebra"]], ["del", "theorem", "discr_not_zero_of_linear_independent", ["algebra"]]]}]}, {"timestamp": 1641909334, "sha": "380e28e9", "message": "chore(set_theory/ordinal_arithmetic): Golfed some proofs (#11369)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "blsub_le_enum_ord", ["ordinal"]], ["mod", "def", "order_iso", ["ordinal", "enum_ord"]], ["mod", "theorem", "strict_mono", ["ordinal", "enum_ord"]], ["mod", "theorem", "surjective", ["ordinal", "enum_ord"]], ["mod", "def", "enum_ord", ["ordinal"]], ["mod", "theorem", "enum_ord_mem", ["ordinal"]], ["mod", "theorem", "enum_ord_range", ["ordinal"]], ["mod", "theorem", "eq_enum_ord", ["ordinal"]]]}]}, {"timestamp": 1641909333, "sha": "2963d7ce", "message": "feat(analysis/asymptotics/asymptotics): add `is_bounded_under.is_O_const` (#11367)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_O_const", ["filter", "is_bounded_under"]]]}]}, {"timestamp": 1641909332, "sha": "8f5303ae", "message": "refactor(topology/connected): drop `local attribute [instance] connected_component_setoid` (#11365)\nAdd a coercion from `X` to `connected_components X` instead.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_or_nonempty_inter", ["set"]], ["mod", "theorem", "not_disjoint_iff_nonempty_inter", ["set"]]]}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["del", "theorem", "connected_component_nrel_iff", []], ["del", "theorem", "connected_component_rel_iff", []], ["add", "theorem", "coe_eq_coe'", ["connected_components"]], ["add", "theorem", "coe_eq_coe", ["connected_components"]], ["add", "theorem", "coe_ne_coe", ["connected_components"]], ["add", "theorem", "continuous_coe", ["connected_components"]], ["add", "theorem", "quotient_map_coe", ["connected_components"]], ["add", "theorem", "range_coe", ["connected_components"]], ["add", "theorem", "surjective_coe", ["connected_components"]], ["mod", "theorem", "connected_components_lift_unique'", []], ["mod", "theorem", "connected_components_preimage_singleton", []], ["mod", "def", "connected_components_lift", ["continuous"]], ["add", "theorem", "connected_components_lift_apply_coe", ["continuous"]], ["add", "theorem", "connected_components_lift_comp_coe", ["continuous"]], ["mod", "theorem", "connected_components_lift_continuous", ["continuous"]], ["del", "theorem", "connected_components_lift_factors", ["continuous"]], ["mod", "theorem", "connected_components_lift_unique", ["continuous"]], ["add", "theorem", "image_eq_of_connected_component_eq", ["continuous"]], ["del", "theorem", "image_eq_of_equiv", ["continuous"]], ["add", "theorem", "disjoint_or_subset_of_clopen", []], ["add", "theorem", "bUnion_connected_component_eq", ["is_clopen"]], ["add", "theorem", "connected_component_subset", ["is_clopen"]], ["del", "theorem", "eq_union_connected_components", ["is_clopen"]], ["add", "theorem", "subset_clopen", ["is_preconnected"]], ["mod", "theorem", "is_preconnected_iff_subset_of_disjoint_closed", []], ["add", "theorem", "image_connected_component", ["quotient_map"]], ["add", "theorem", "preimage_connected_component", ["quotient_map"]], ["del", "theorem", "subset_or_disjoint_of_clopen", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_quotient_lift_on'", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "connected_component_eq_Inter_clopen", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1641909330, "sha": "c1c0fa4a", "message": "feat(analysis/calculus/{f,}deriv): add some `iff` lemmas (#11363)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "has_deriv_at_deriv_iff", []], ["add", "theorem", "has_deriv_within_at_deriv_within_iff", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "differentiable_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "differentiable_within_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "differentiable_within_at_iff_of_mem", ["filter", "eventually_eq"]], ["add", "theorem", "has_fderiv_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "has_fderiv_within_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "has_fderiv_within_at_iff_of_mem", ["filter", "eventually_eq"]]]}]}, {"timestamp": 1641909328, "sha": "02181c76", "message": "feat(algebra/group/conj): `conj_classes.map` preserves surjectivity (#11362)\nIf `f : α →* β` is surjective, then so is `conj_classes.map f : conj_classes α → conj_classes β`.", "changes": [{"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["add", "theorem", "map_surjective", ["conj_classes"]]]}]}, {"timestamp": 1641909313, "sha": "c94a17c7", "message": "feat(topology): a few simple lemmas (#11360)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "eventually_mem_nhds", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_at_update_same", []], ["add", "theorem", "continuous_within_at_compl_self", []], ["add", "theorem", "continuous_within_at_iff_continuous_at", []], ["mod", "theorem", "continuous_within_at_update_same", []], ["add", "theorem", "insert_mem_nhds_iff", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "continuous_at_update_of_ne", []], ["add", "theorem", "nhds_within_diff_singleton", ["ne"]]]}]}, {"timestamp": 1641909312, "sha": "56d6a915", "message": "chore(order/basic): Rename `no_bot_order`/`no_top_order` to `no_min_order`/`no_max_order` (#11357)\nbecause that's really what they are.\n`∀ a, ∃ b, b < a` precisely means that every `a` is not a minimal element. The correct statement for an order without bottom elements is `∀ a, ∃ b, ¬ a ≤ b`, which is a weaker condition in general. Both conditions are equivalent over a linear order.\nRenames\n* `no_bot_order` -> `no_min_order`\n* `no_top_order` -> `no_max_order`\n* `no_bot` -> `exists_lt`\n* `no_top` -> `exists_gt`", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "tendsto_at_top'", ["normed_group"]]]}, {"oldPath": "src/data/psigma/order.lean", "newPath": "src/data/psigma/order.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "nonempty_Iio", ["set"]], ["mod", "theorem", "nonempty_Ioi", ["set"]]]}, {"oldPath": "src/data/set/intervals/infinite.lean", "newPath": "src/data/set/intervals/infinite.lean", "changes": []}, {"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": []}, {"oldPath": "src/data/sum/order.lean", "newPath": "src/data/sum/order.lean", "changes": [["del", "theorem", "no_bot_order_iff", ["sum"]], ["add", "theorem", "no_max_order_iff", ["sum"]], ["add", "theorem", "no_min_order_iff", ["sum"]], ["del", "theorem", "no_top_order_iff", ["sum"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["mod", "theorem", "ae_cover_Ico", ["measure_theory"]], ["mod", "theorem", "ae_cover_Iio", ["measure_theory"]], ["mod", "theorem", "ae_cover_Ioc", ["measure_theory"]], ["mod", "theorem", "ae_cover_Ioi", ["measure_theory"]], ["mod", "theorem", "ae_cover_Ioo", ["measure_theory"]], ["mod", "theorem", "integrable_of_interval_integral_norm_tendsto", ["measure_theory"]], ["mod", "theorem", "integrable_on_Iic_of_interval_integral_norm_tendsto", ["measure_theory"]], ["mod", "theorem", "interval_integral_tendsto_integral", ["measure_theory"]], ["mod", "theorem", "interval_integral_tendsto_integral_Iic", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "exists_gt", []], ["add", "theorem", "exists_lt", []], ["del", "theorem", "no_bot", []], ["del", "theorem", "no_top", []], ["mod", "theorem", "not_is_bot", []], ["mod", "theorem", "not_is_top", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "lt_iff_exists_coe_btwn", ["with_top"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "theorem", "nonempty", ["is_glb"]], ["mod", "theorem", "nonempty", ["is_lub"]], ["del", "theorem", "lower_bounds_univ", ["no_bot_order"]], ["add", "theorem", "upper_bounds_univ", ["no_max_order"]], ["add", "theorem", "lower_bounds_univ", ["no_min_order"]], ["del", "theorem", "upper_bounds_univ", ["no_top_order"]], ["mod", "theorem", "not_bdd_above_univ", []], ["mod", "theorem", "not_bdd_below_univ", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cInf_Ioi", []], ["mod", "theorem", "cSup_Iio", []]]}, {"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": [["mod", "def", "defined_at_left", ["order", "partial_iso"]], ["mod", "def", "defined_at_right", ["order", "partial_iso"]], ["mod", "theorem", "exists_across", ["order", "partial_iso"]], ["mod", "def", "fun_of_ideal", ["order", "partial_iso"]], ["mod", "def", "inv_of_ideal", ["order", "partial_iso"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "Iio_mem_at_bot", ["filter"]], ["mod", "theorem", "Ioi_mem_at_top", ["filter"]], ["mod", "theorem", "at_top_basis_Ioi", ["filter"]], ["mod", "theorem", "eventually_gt_at_top", ["filter"]], ["mod", "theorem", "eventually_lt_at_bot", ["filter"]], ["mod", "theorem", "exists_lt_of_tendsto_at_bot", ["filter"]], ["mod", "theorem", "exists_lt_of_tendsto_at_top", ["filter"]], ["mod", "theorem", "frequently_at_bot'", ["filter"]], ["mod", "theorem", "frequently_at_top'", ["filter"]], ["mod", "theorem", "frequently_high_scores", ["filter"]], ["mod", "theorem", "frequently_low_scores", ["filter"]], ["mod", "theorem", "high_scores", ["filter"]], ["mod", "theorem", "low_scores", ["filter"]], ["mod", "theorem", "map_coe_Iio_at_bot", ["filter"]], ["mod", "theorem", "map_coe_Ioi_at_top", ["filter"]], ["mod", "theorem", "tendsto_comp_coe_Iio_at_bot", ["filter"]], ["mod", "theorem", "tendsto_comp_coe_Ioi_at_top", ["filter"]], ["mod", "theorem", "unbounded_of_tendsto_at_bot'", ["filter"]], ["mod", "theorem", "unbounded_of_tendsto_at_bot", ["filter"]], ["mod", "theorem", "unbounded_of_tendsto_at_top'", ["filter"]], ["mod", "theorem", "unbounded_of_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "theorem", "not_is_bounded_under_of_tendsto_at_bot", ["filter"]], ["mod", "theorem", "not_is_bounded_under_of_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": []}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": [["mod", "theorem", "pred_succ", []], ["mod", "theorem", "succ_pred", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["mod", "theorem", "closure_Iio", []], ["mod", "theorem", "closure_Ioi", []], ["mod", "theorem", "exists_ge", ["dense"]], ["mod", "theorem", "exists_gt", ["dense"]], ["mod", "theorem", "exists_le", ["dense"]], ["mod", "theorem", "exists_lt", ["dense"]], ["mod", "theorem", "disjoint_nhds_at_bot", []], ["mod", "theorem", "disjoint_nhds_at_top", []], ["mod", "theorem", "exists_seq_strict_anti_tendsto", []], ["mod", "theorem", "exists_seq_strict_mono_tendsto", []], ["mod", "theorem", "exists_Ioo_subset", ["filter", "eventually"]], ["mod", "theorem", "exists_gt", ["filter", "eventually"]], ["mod", "theorem", "exists_lt", ["filter", "eventually"]], ["mod", "theorem", "frontier_Icc", []], ["mod", "theorem", "frontier_Ici", []], ["mod", "theorem", "frontier_Ico", []], ["mod", "theorem", "frontier_Iic", []], ["mod", "theorem", "frontier_Iio", []], ["mod", "theorem", "frontier_Ioc", []], ["mod", "theorem", "frontier_Ioi", []], ["mod", "theorem", "inf_nhds_at_bot", []], ["mod", "theorem", "inf_nhds_at_top", []], ["mod", "theorem", "interior_Icc", []], ["mod", "theorem", "interior_Ici", []], ["mod", "theorem", "interior_Ico", []], ["mod", "theorem", "interior_Iic", []], ["mod", "theorem", "interior_Ioc", []], ["mod", "theorem", "mem_nhds_iff_exists_Ioo_subset", []], ["mod", "theorem", "mem_nhds_within_Ici_iff_exists_Icc_subset'", []], ["mod", "theorem", "mem_nhds_within_Ici_iff_exists_Icc_subset", []], ["mod", "theorem", "mem_nhds_within_Ici_iff_exists_Ico_subset", []], ["mod", "theorem", "mem_nhds_within_Iic_iff_exists_Icc_subset'", []], ["mod", "theorem", "mem_nhds_within_Iic_iff_exists_Icc_subset", []], ["mod", "theorem", "mem_nhds_within_Iic_iff_exists_Ioc_subset", []], ["mod", "theorem", "mem_nhds_within_Iio_iff_exists_Ico_subset", []], ["mod", "theorem", "mem_nhds_within_Iio_iff_exists_Ioo_subset", []], ["mod", "theorem", "mem_nhds_within_Ioi_iff_exists_Ioc_subset", []], ["mod", "theorem", "mem_nhds_within_Ioi_iff_exists_Ioo_subset", []], ["mod", "theorem", "nhds_basis_Ioo", []], ["mod", "theorem", "nhds_basis_Ioo_pos", []], ["mod", "theorem", "nhds_basis_Ioo_pos_of_pos", []], ["mod", "theorem", "nhds_basis_abs_sub_lt", []], ["mod", "theorem", "nhds_basis_zero_abs_sub_lt", []], ["mod", "theorem", "nhds_within_Iio_ne_bot", []], ["mod", "theorem", "nhds_within_Iio_self_ne_bot", []], ["mod", "theorem", "nhds_within_Ioi_ne_bot", []], ["mod", "theorem", "nhds_within_Ioi_self_ne_bot", []], ["mod", "theorem", "not_tendsto_at_bot_of_tendsto_nhds", []], ["mod", "theorem", "not_tendsto_at_top_of_tendsto_nhds", []], ["mod", "theorem", "not_tendsto_nhds_of_tendsto_at_bot", []], ["mod", "theorem", "not_tendsto_nhds_of_tendsto_at_top", []]]}, {"oldPath": "src/topology/algebra/ordered/monotone_convergence.lean", "newPath": "src/topology/algebra/ordered/monotone_convergence.lean", "changes": []}, {"oldPath": "src/topology/instances/irrational.lean", "newPath": "src/topology/instances/irrational.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "tendsto_at_top'", ["metric"]]]}]}, {"timestamp": 1641909309, "sha": "be4c5aa4", "message": "feat(scripts/lint_mathlib): implement github annotations for mathlib linters (#11345)\nResolves the last part of #5863\nThis causes `lean --run lint_mathlib --github` to produce error messages understood by github actions, which will tag the lines causing linter failures with annotations in the files changed tab", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/lint_mathlib.lean", "newPath": "scripts/lint_mathlib.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": [["add", "def", "escape_workflow_command", []]]}]}, {"timestamp": 1641909308, "sha": "e138d3bb", "message": "feat(algebra/big_operators/finprod): `finprod_eq_one_of_forall_eq_one` (#11335)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_eq_one_of_forall_eq_one", []], ["add", "theorem", "finprod_mem_eq_one_of_forall_eq_one", []]]}]}, {"timestamp": 1641909307, "sha": "eb9c1525", "message": "feat(algebra/order/field): lemmas relating `a / b` and `a` when `1 ≤ b` and `1 < b` (#11333)\nThis PR is a collection of items that https://github.com/leanprover-community/mathlib/pull/7891 adds in and that aren't declared on `master` yet. Please let me know if I overlooked something.\nAfter merging it, https://github.com/leanprover-community/mathlib/pull/7891 can theoretically be closed.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "div_le_self", []], ["mod", "theorem", "div_lt_div_of_lt_left", []], ["add", "theorem", "div_lt_self", []]]}]}, {"timestamp": 1641909305, "sha": "2865d8c2", "message": "refactor(data/set/prod): add notation class for set-like product (#11300)\nThis PR adds notation class `has_set_prod` for product of sets and subobjects. I also add an instance for `set`s. Later I want to migrate `finset`s and `sub*` product to this notation class.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "image_mul_prod", ["set"]]]}, {"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/cauchy_integral.lean", "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/convex/star.lean", "newPath": "src/analysis/convex/star.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "prod", ["set", "finite"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Ici_prod_Ici", ["set"]], ["mod", "theorem", "Ici_prod_eq", ["set"]], ["mod", "theorem", "Iic_prod_Iic", ["set"]], ["mod", "theorem", "Iic_prod_eq", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Union_prod", ["set"]], ["mod", "theorem", "Union_prod_const", ["set"]], ["mod", "theorem", "prod_Union", ["set"]], ["mod", "theorem", "prod_eq_seq", ["set"]], ["mod", "theorem", "prod_sUnion", ["set"]]]}, {"oldPath": "src/data/set/prod.lean", "newPath": "src/data/set/prod.lean", "changes": [["mod", "theorem", "empty_prod", ["set"]], ["mod", "theorem", "exists_prod_set", ["set"]], ["mod", "theorem", "forall_prod_set", ["set"]], ["mod", "theorem", "fst_image_prod", ["set"]], ["mod", "theorem", "fst_image_prod_subset", ["set"]], ["mod", "theorem", "image_prod", ["set"]], ["mod", "theorem", "image_swap_prod", ["set"]], ["mod", "theorem", "insert_prod", ["set"]], ["mod", "theorem", "mem_prod", ["set"]], ["mod", "theorem", "mem_prod_eq", ["set"]], ["mod", "theorem", "mk_mem_prod", ["set"]], ["mod", "theorem", "mk_preimage_prod_left", ["set"]], ["mod", "theorem", "mk_preimage_prod_left_eq_empty", ["set"]], ["mod", "theorem", "mk_preimage_prod_right", ["set"]], ["mod", "theorem", "mk_preimage_prod_right_eq_empty", ["set"]], ["mod", "theorem", "fst", ["set", "nonempty"]], ["mod", "theorem", "prod", ["set", "nonempty"]], ["mod", "theorem", "snd", ["set", "nonempty"]], ["mod", "theorem", "preimage_swap_prod", ["set"]], ["mod", "theorem", "prod_diff_prod", ["set"]], ["mod", "theorem", "prod_empty", ["set"]], ["mod", "theorem", "prod_eq", ["set"]], ["mod", "theorem", "prod_eq_empty_iff", ["set"]], ["mod", "theorem", "prod_insert", ["set"]], ["mod", "theorem", "prod_inter_prod", ["set"]], ["mod", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["mod", "theorem", "prod_mono", ["set"]], ["mod", "theorem", "prod_nonempty_iff", ["set"]], ["mod", "theorem", "prod_preimage_left", ["set"]], ["mod", "theorem", "prod_preimage_right", ["set"]], ["mod", "theorem", "prod_singleton", ["set"]], ["mod", "theorem", "prod_subset_iff", ["set"]], ["mod", "theorem", "prod_subset_preimage_fst", ["set"]], ["mod", "theorem", "prod_subset_preimage_snd", ["set"]], ["mod", "theorem", "prod_subset_prod_iff", ["set"]], ["mod", "theorem", "prod_union", ["set"]], ["mod", "theorem", "prod_univ", ["set"]], ["mod", "theorem", "singleton_prod", ["set"]], ["mod", "theorem", "singleton_prod_singleton", ["set"]], ["mod", "theorem", "snd_image_prod", ["set"]], ["mod", "theorem", "snd_image_prod_subset", ["set"]], ["mod", "theorem", "union_prod", ["set"]], ["mod", "theorem", "univ_prod", ["set"]], ["mod", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": "src/data/tprod.lean", "newPath": "src/data/tprod.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["mod", "theorem", "prod_prod", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "def", "prod", ["measurable_equiv", "set"]], ["mod", "theorem", "measurable_set_prod_of_nonempty", []]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["mod", "theorem", "region_between_subset", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["mod", "theorem", "Inf_sup_Inf", []], ["mod", "theorem", "Sup_inf_Sup", []]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "mem_prod_self_iff", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/interval.lean", "newPath": "src/order/filter/interval.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "prod_def", ["filter"]], ["mod", "theorem", "prod_same_eq", ["filter"]]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["mod", "theorem", "image_coev", ["continuous_map"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "is_open_prod_iff", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metrizable.lean", "newPath": "src/topology/metric_space/metrizable.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "def", "set_seq_aux", ["sequentially_complete"]]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["mod", "theorem", "is_separated_def'", []]]}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}]}, {"timestamp": 1641909304, "sha": "3cd9088b", "message": "feat(ring_theory/polynomial/cyclotomic/basic): add lemmas (#11266)\nFrom flt-regular.", "changes": [{"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["add", "theorem", "not_dvd_char", ["ne_zero"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "cyclotomic_mul_prime_dvd_eq_pow", ["polynomial"]], ["add", "theorem", "cyclotomic_mul_prime_eq_pow_of_not_dvd", ["polynomial"]], ["add", "theorem", "cyclotomic_mul_prime_pow_eq", ["polynomial"]], ["add", "theorem", "is_root_cyclotomic_iff_char_zero", ["polynomial"]], ["add", "theorem", "is_root_cyclotomic_prime_pow_mul_iff_of_char_p", ["polynomial"]]]}]}, {"timestamp": 1641909302, "sha": "4ac13d92", "message": "feat(data/dfinsupp/interval): Finitely supported dependent functions to locally finite orders are locally finite (#11175)\nThis provides the ` locally_finite_order` instance for `Π₀ i, α i` in a new file `data.dfinsupp.interval`.", "changes": [{"oldPath": "src/data/dfinsupp/basic.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": [["mod", "theorem", "mem_support_iff", ["dfinsupp"]], ["mod", "theorem", "mk_apply", ["dfinsupp"]], ["add", "theorem", "mk_of_mem", ["dfinsupp"]], ["add", "theorem", "mk_of_not_mem", ["dfinsupp"]], ["add", "theorem", "not_mem_support_iff", ["dfinsupp"]]]}, {"oldPath": null, "newPath": "src/data/dfinsupp/interval.lean", "changes": [["add", "theorem", "card_Icc", ["dfinsupp"]], ["add", "theorem", "card_Ico", ["dfinsupp"]], ["add", "theorem", "card_Ioc", ["dfinsupp"]], ["add", "theorem", "card_Ioo", ["dfinsupp"]], ["add", "theorem", "card_pi", ["dfinsupp"]], ["add", "theorem", "mem_pi", ["dfinsupp"]], ["add", "theorem", "mem_range_Icc_apply_iff", ["dfinsupp"]], ["add", "theorem", "mem_singleton_apply_iff", ["dfinsupp"]], ["add", "def", "pi", ["dfinsupp"]], ["add", "def", "range_Icc", ["dfinsupp"]], ["add", "theorem", "range_Icc_apply", ["dfinsupp"]], ["add", "def", "singleton", ["dfinsupp"]], ["add", "theorem", "support_range_Icc_subset", ["dfinsupp"]], ["add", "theorem", "card_dfinsupp", ["finset"]], ["add", "def", "dfinsupp", ["finset"]], ["add", "theorem", "mem_dfinsupp_iff", ["finset"]], ["add", "theorem", "mem_dfinsupp_iff_of_support_subset", ["finset"]]]}, {"oldPath": "src/data/dfinsupp/order.lean", "newPath": "src/data/dfinsupp/order.lean", "changes": [["mod", "theorem", "le_iff'", ["dfinsupp"]], ["mod", "theorem", "le_iff", ["dfinsupp"]], ["del", "theorem", "not_mem_support_iff", ["dfinsupp"]], ["mod", "theorem", "single_le_iff", ["dfinsupp"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "not_mem_mono", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "cons_le_cons", ["multiset"]], ["mod", "theorem", "cons_le_cons_iff", ["multiset"]], ["mod", "theorem", "le_cons_of_not_mem", ["multiset"]], ["mod", "theorem", "le_zero", ["multiset"]], ["mod", "theorem", "mem_of_le", ["multiset"]], ["add", "theorem", "not_mem_mono", ["multiset"]], ["mod", "theorem", "subset_of_le", ["multiset"]]]}]}, {"timestamp": 1641899600, "sha": "40b6b45c", "message": "feat(category_theory): `Cat` is a strict bicategory (#11348)\nThis PR defines a bicategory structure on `Cat`. This also introduces the propositional type class `bicategory.strict`, and proves that `Cat` is an instance of this class.", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/strict.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}]}, {"timestamp": 1641899599, "sha": "a4052f90", "message": "feat(ring_theory/hahn_series): order_pow (#11334)\nGeneralize to have `no_zero_divisors (hahn_series Γ R)`,\nwhich generalizes `order_mul`.\nAlso provide `coeff_eq_zero_of_lt_order`.", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "coeff_eq_zero_of_lt_order", ["hahn_series"]], ["mod", "theorem", "order_mul", ["hahn_series"]], ["add", "theorem", "order_pow", ["hahn_series"]]]}]}, {"timestamp": 1641899598, "sha": "90ba0541", "message": "feat(algebraic_geometry): Define the category of `AffineScheme`s (#11326)", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/AffineScheme.lean", "changes": [["add", "def", "Spec", ["algebraic_geometry", "AffineScheme"]], ["add", "def", "equiv_CommRing", ["algebraic_geometry", "AffineScheme"]], ["add", "def", "forget_to_Scheme", ["algebraic_geometry", "AffineScheme"]], ["add", "def", "Γ", ["algebraic_geometry", "AffineScheme"]], ["add", "def", "AffineScheme", ["algebraic_geometry"]], ["add", "def", "iso_Spec", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "is_affine_of_iso", ["algebraic_geometry"]], ["add", "def", "is_affine_open", ["algebraic_geometry"]], ["add", "theorem", "is_basis_affine_open", ["algebraic_geometry"]], ["add", "theorem", "mem_AffineScheme", ["algebraic_geometry"]], ["add", "theorem", "range_is_affine_open_of_open_immersion", ["algebraic_geometry"]], ["add", "theorem", "top_is_affine_open", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "of_restrict", ["algebraic_geometry", "Scheme"]], ["add", "def", "restrict", ["algebraic_geometry", "Scheme"]], ["add", "def", "iso_of_range_eq", ["algebraic_geometry", "is_open_immersion"]], ["add", "def", "iso_restrict", ["algebraic_geometry", "is_open_immersion"]], ["add", "def", "lift", ["algebraic_geometry", "is_open_immersion"]], ["add", "theorem", "lift_fac", ["algebraic_geometry", "is_open_immersion"]], ["add", "theorem", "lift_uniq", ["algebraic_geometry", "is_open_immersion"]]]}, {"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": [["add", "def", "equiv_ess_image_of_reflective", ["category_theory"]]]}]}, {"timestamp": 1641899597, "sha": "c03bd328", "message": "feat(analysis/normed_space/star): add lemmas about continuity and norm of identity (#11324)", "changes": [{"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": [["add", "theorem", "star", ["continuous"]], ["add", "theorem", "star", ["continuous_at"]], ["add", "theorem", "continuous_at_star", []], ["add", "theorem", "star", ["continuous_on"]], ["add", "theorem", "continuous_on_star", []], ["add", "theorem", "continuous_star", []], ["add", "theorem", "star", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_star", []], ["add", "theorem", "norm_one", ["cstar_ring"]], ["mod", "theorem", "norm_self_mul_star", ["cstar_ring"]], ["mod", "theorem", "norm_star_mul_self'", ["cstar_ring"]], ["add", "theorem", "star", ["filter", "tendsto"]], ["mod", "theorem", "star_isometry", []], ["mod", "def", "star_normed_group_hom", []], ["add", "theorem", "tendsto_star", []]]}]}, {"timestamp": 1641899596, "sha": "ebbc973b", "message": "feat(data/mv_polynomial): assorted mv_polynomial and finsupp lemmas (#11319)\nMostly around total degree, supports and homogeneous components.\nFrom flt-regular.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "support_smul_eq", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "monomial_eq_zero", ["mv_polynomial"]], ["mod", "theorem", "monomial_zero", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "total_degree_X_pow", ["mv_polynomial"]], ["add", "theorem", "total_degree_monomial", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": [["add", "theorem", "homogeneous_component_C_mul", ["mv_polynomial"]], ["add", "theorem", "is_homogeneous_of_total_degree_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1641899595, "sha": "c500b99f", "message": "feat(ring_theory/laurent): coe from R[[x]] to R((x)) (#11318)\nAnd actually the changes reported in #11295\nGeneralize `power_series.coeff_smul`", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "of_power_series_C", ["hahn_series"]], ["add", "theorem", "of_power_series_X", ["hahn_series"]], ["add", "theorem", "of_power_series_X_pow", ["hahn_series"]]]}, {"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": [["del", "theorem", "of_power_series_C", ["laurent_series"]], ["del", "theorem", "of_power_series_X", ["laurent_series"]], ["del", "theorem", "of_power_series_X_pow", ["laurent_series"]], ["del", "theorem", "coe_coe", ["polynomial"]], ["del", "theorem", "coe_laurent", ["polynomial"]], ["del", "theorem", "coe_laurent_C", ["polynomial"]], ["del", "theorem", "coe_laurent_X", ["polynomial"]], ["del", "theorem", "coe_laurent_add", ["polynomial"]], ["del", "theorem", "coe_laurent_mul", ["polynomial"]], ["del", "theorem", "coe_laurent_one", ["polynomial"]], ["del", "theorem", "coe_laurent_smul", ["polynomial"]], ["del", "theorem", "coe_laurent_zero", ["polynomial"]], ["del", "theorem", "coeff_coe_laurent", ["polynomial"]], ["del", "theorem", "coeff_coe_laurent_coe", ["polynomial"]], ["add", "theorem", "coe_C", ["power_series"]], ["add", "theorem", "coe_X", ["power_series"]], ["add", "theorem", "coe_add", ["power_series"]], ["add", "theorem", "coe_bit0", ["power_series"]], ["add", "theorem", "coe_bit1", ["power_series"]], ["add", "theorem", "coe_mul", ["power_series"]], ["add", "theorem", "coe_one", ["power_series"]], ["add", "theorem", "coe_pow", ["power_series"]], ["add", "theorem", "coe_smul", ["power_series"]], ["add", "theorem", "coe_zero", ["power_series"]], ["add", "theorem", "coeff_coe", ["power_series"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["mod", "theorem", "coeff_smul", ["power_series"]]]}]}, {"timestamp": 1641899594, "sha": "be594eb4", "message": "feat(linear_algebra/finite_dimensional): Define rank of set of vectors (#11290)\nAdded in the definition of \"rank of a set of vectors\" and a useful lemma about the rank when one set is a subset of the other.\nRead the zulip stream here: https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/First.20Time.20Contributing", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_mono", ["set"]]]}]}, {"timestamp": 1641899593, "sha": "b7f8f725", "message": "feat(category_theory/bicategory/functor): define oplax functors and their composition (#11277)\nThis PR defines oplax functors between bicategories and their composition.", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/functor.lean", "changes": [["add", "def", "comp", ["category_theory", "oplax_functor"]], ["add", "def", "id", ["category_theory", "oplax_functor"]], ["add", "def", "map_functor", ["category_theory", "oplax_functor"]], ["add", "def", "map₂_associator_aux", ["category_theory", "oplax_functor"]], ["add", "theorem", "to_prelax_functor_map", ["category_theory", "oplax_functor"]], ["add", "theorem", "to_prelax_functor_map₂", ["category_theory", "oplax_functor"]], ["add", "theorem", "to_prelax_functor_obj", ["category_theory", "oplax_functor"]], ["add", "structure", "oplax_functor", ["category_theory"]], ["add", "def", "comp", ["category_theory", "prelax_functor"]], ["add", "def", "id", ["category_theory", "prelax_functor"]], ["add", "theorem", "to_prefunctor_map", ["category_theory", "prelax_functor"]], ["add", "theorem", "to_prefunctor_obj", ["category_theory", "prelax_functor"]], ["add", "structure", "prelax_functor", ["category_theory"]]]}]}, {"timestamp": 1641899591, "sha": "624cb707", "message": "feat(set_theory/ordinal_arithmetic): Extra lemmas about suprema (#11178)\nProved lemmas pertaining to when suprema or least strict upper bounds are zero.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "eq_zero_of_out_empty", ["ordinal"]], ["add", "theorem", "out_empty_iff_eq_zero", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "blsub_eq_zero", ["ordinal"]], ["add", "theorem", "blsub_eq_zero_iff", ["ordinal"]], ["add", "theorem", "blsub_pos", ["ordinal"]], ["add", "theorem", "bsup_eq_zero_iff", ["ordinal"]], ["add", "theorem", "lsub_eq_zero", ["ordinal"]], ["add", "theorem", "lsub_eq_zero_iff", ["ordinal"]], ["add", "theorem", "lsub_pos", ["ordinal"]], ["add", "theorem", "sup_eq_zero_iff", ["ordinal"]]]}]}, {"timestamp": 1641888813, "sha": "de9944b1", "message": "refactor(analysis/complex/circle): The circle group is commutative (#11368)\nThis PR upgrades the `group circle` instance to a `comm_group circle` instance.", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": []}]}, {"timestamp": 1641888811, "sha": "e8839a30", "message": "refactor(logic/small, *): Infer `f : α → β` when followed by a simple condition on `f` (#11037)", "changes": [{"oldPath": "src/data/equiv/encodable/small.lean", "newPath": "src/data/equiv/encodable/small.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": [["mod", "theorem", "apply_of_injective_symm", ["equiv"]], ["mod", "theorem", "coe_of_injective_symm", ["equiv"]], ["mod", "theorem", "of_injective_symm_apply", ["equiv"]], ["mod", "theorem", "self_comp_of_injective_symm", ["equiv"]]]}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": [["mod", "theorem", "small_of_injective", []], ["mod", "theorem", "small_of_surjective", []]]}]}, {"timestamp": 1641869139, "sha": "89bff5e7", "message": "feat(algebra/big_operators): add product versions of some sum lemmas (#11358)\nand to_additive to get the old ones back", "changes": [{"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "le_prod_of_mem", ["multiset"]], ["del", "theorem", "le_sum_of_mem", ["multiset"]], ["add", "theorem", "prod_eq_one_iff", ["multiset"]], ["del", "theorem", "sum_eq_zero_iff", ["multiset"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "prod_eq_one_iff", ["list"]], ["del", "theorem", "sum_eq_zero_iff", ["list"]]]}]}, {"timestamp": 1641869138, "sha": "d8a75bd0", "message": "chore(simple_graph/basic): Fix typo in docstring: adjacent vertices, not edges (#11356)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1641857459, "sha": "8910f6d9", "message": "feat(ring_theory/discriminant): remove an assumption (#11359)\nWe remove a `nonempty` assumption.", "changes": [{"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": [["mod", "theorem", "discr_not_zero_of_linear_independent", ["algebra"]]]}]}, {"timestamp": 1641857458, "sha": "fd51bda5", "message": "feat(analysis/normed_space/linear_isometry): basis ext lemmas (#11331)\nAdd lemmas that two linear isometries / linear isometric equivalences\nare equal if they are equal on basis vectors, similar to such lemmas\nfor equality on basis vectors of other kinds of maps.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "ext_linear_isometry", ["basis"]], ["add", "theorem", "ext_linear_isometry_equiv", ["basis"]]]}]}, {"timestamp": 1641857457, "sha": "3b55b948", "message": "feat(analysis/inner_product_space/basic): inner products of linear combinations of orthonormal vectors (#11323)\nThere are some lemmas about the inner product of a linear combination\nof orthonormal vectors with one vector from that orthonormal family.\nAdd similar lemmas where both sides of the inner product are linear\ncombinations.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_finsupp_eq_sum_left", ["orthonormal"]], ["add", "theorem", "inner_finsupp_eq_sum_right", ["orthonormal"]], ["add", "theorem", "inner_left_sum", ["orthonormal"]], ["add", "theorem", "inner_right_sum", ["orthonormal"]], ["add", "theorem", "inner_sum", ["orthonormal"]]]}]}, {"timestamp": 1641857455, "sha": "fd524810", "message": "feat(group_theory/abelianization): Add fintype instance (#11302)\nAdds `fintype` instance for `abelianization`.", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}]}, {"timestamp": 1641857454, "sha": "2642c89b", "message": "feat(analysis/inner_product_space/orientation): orientations of real inner product spaces (#11269)\nAdd definitions and lemmas relating to orientations of real inner\nproduct spaces, in particular constructing an orthonormal basis with a\ngiven orientation in finite positive dimension.\nThis is in a new file since nothing else about inner product spaces\nneeds to depend on orientations.", "changes": [{"oldPath": null, "newPath": "src/analysis/inner_product_space/orientation.lean", "changes": [["add", "theorem", "fin_orthonormal_basis_orientation", ["orientation"]], ["add", "theorem", "orthonormal_adjust_to_orientation", ["orthonormal"]]]}]}, {"timestamp": 1641857452, "sha": "4e7e5a6e", "message": "feat(set_theory/ordinal_arithmetic): Enumerating unbounded sets of ordinals with ordinals (#10979)\nThis PR introduces `enum_ord`, which enumerates an unbounded set of ordinals using ordinals. This is used to build an explicit order isomorphism `enum_ord.order_iso`.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "not_lt_omin", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "def", "CNF", ["ordinal"]], ["add", "theorem", "blsub_le_enum_ord", ["ordinal"]], ["add", "def", "order_iso", ["ordinal", "enum_ord"]], ["add", "theorem", "strict_mono", ["ordinal", "enum_ord"]], ["add", "theorem", "surjective", ["ordinal", "enum_ord"]], ["add", "def", "enum_ord", ["ordinal"]], ["add", "theorem", "enum_ord_def'", ["ordinal"]], ["add", "theorem", "enum_ord_def'_H", ["ordinal"]], ["add", "theorem", "enum_ord_def", ["ordinal"]], ["add", "theorem", "enum_ord_def_H", ["ordinal"]], ["add", "theorem", "enum_ord_mem", ["ordinal"]], ["add", "theorem", "enum_ord_range", ["ordinal"]], ["add", "theorem", "eq_enum_ord", ["ordinal"]]]}]}, {"timestamp": 1641857451, "sha": "8e92af1d", "message": "feat(algebra/associated): add lemmas to split #9345 (#10941)\nThis PR contains lemmas from PR [#9345](https://github.com/leanprover-community/mathlib/pull/9345), which was starting to get quite lengthy.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "bot_eq_one", ["associates"]], ["add", "theorem", "le_one_iff", ["associates"]], ["add", "theorem", "mk_injective", ["associates"]], ["add", "theorem", "is_unit_of_irreducible_right", ["dvd_not_unit"]], ["add", "theorem", "ne", ["dvd_not_unit"]], ["add", "theorem", "not_associated", ["dvd_not_unit"]], ["add", "theorem", "not_unit", ["dvd_not_unit"]], ["add", "theorem", "dvd_not_unit_of_dvd_not_unit_associated", []], ["add", "theorem", "is_unit_of_associated_mul", []], ["add", "theorem", "not_irreducible_of_not_unit_dvd_not_unit", []], ["add", "theorem", "not_is_unit_of_not_is_unit_dvd", []], ["add", "theorem", "pow_injective_of_not_unit", []]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "ne_zero_of_dvd_ne_zero", []]]}]}, {"timestamp": 1641857450, "sha": "4bf48590", "message": "feat(data/finsupp/pointwise): add a definition of the pointwise action of functions on finsupps (#10933)\nI couldn't find this, and it seems like quite a natural way to talk about multiplying functions with finsupps.\nI'm not sure what additional lemmas would be useful yet, as I don't have a particular application in mind at present so suggestions/additions are welcome", "changes": [{"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": [["add", "theorem", "coe_pointwise_module", ["finsupp"]]]}]}, {"timestamp": 1641844468, "sha": "2e003c9a", "message": "feat(data/set/basic): add decidable instances for boolean operations (#11354)\nAdd decidability instances for `a ∈ s ∩ t`, etc.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}]}, {"timestamp": 1641844466, "sha": "427e5b59", "message": "feat(data/nat/factorization): Evaluating a multiplicative function over prime power divisors (#11167)\nFor any multiplicative function `f` with `f 1 = 1` and any `n > 0`, we can evaluate `f n` by evaluating `f` at `p ^ k` over the factorization of `n`.\nAlso provides an alternative version that swaps the `0 < n` condition for an extra `f 0 = 1` condition, as suggested by @ericrbg. \nThis allows a very simple proof that `n.factorization.prod pow = n`", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factorization_prod_pow_eq_self", ["nat"]], ["add", "theorem", "multiplicative_factorization'", ["nat"]], ["add", "theorem", "multiplicative_factorization", ["nat"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "multiplicative_factorization", ["nat", "arithmetic_function", "is_multiplicative"]]]}]}, {"timestamp": 1641831440, "sha": "dc3cbb7d", "message": "feat(data/polynomial/erase_lead): introduce two lemmas to compute `nat_degree`s under certain maps (#11265)\nThis PR is a step in the direction of simplifying #11139.\nIt contains a proof of the helper lemmas `map_nat_degree_eq_sub` and `map_nat_degree_eq_nat_degree` to shorten the proof of `nat_degree_hasse_deriv` and `nat_degree_taylor`.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2311139.20taylor.20sum.20and.20nat_degree_taylor)", "changes": [{"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "map_nat_degree_eq_nat_degree", ["polynomial"]], ["add", "theorem", "map_nat_degree_eq_sub", ["polynomial"]], ["add", "theorem", "mono_map_nat_degree_eq", ["polynomial"]]]}]}, {"timestamp": 1641831439, "sha": "168ad7fc", "message": "feat(data/nat/cast): generalize to `fun_like` (#11128)", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "map_nat_cast", ["alg_hom"]]]}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "frobenius_nat_cast", []]]}, {"oldPath": "src/algebra/char_p/pi.lean", "newPath": "src/algebra/char_p/pi.lean", "changes": []}, {"oldPath": "src/algebra/char_p/quotient.lean", "newPath": "src/algebra/char_p/quotient.lean", "changes": []}, {"oldPath": "src/algebra/char_p/subring.lean", "newPath": "src/algebra/char_p/subring.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/ne_zero.lean", "newPath": "src/algebra/ne_zero.lean", "changes": [["add", "theorem", "nat_of_injective", ["ne_zero"]], ["del", "theorem", "of_injective'", ["ne_zero"]], ["mod", "theorem", "of_injective", ["ne_zero"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": []}, {"oldPath": "src/data/matrix/char_p.lean", "newPath": "src/data/matrix/char_p.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["del", "theorem", "eq_nat_cast", ["add_monoid_hom"]], ["mod", "theorem", "ext_nat", ["add_monoid_hom"]], ["del", "theorem", "map_nat_cast", ["add_monoid_hom"]], ["add", "theorem", "eq_nat_cast'", []], ["add", "theorem", "eq_nat_cast", []], ["add", "theorem", "ext_nat''", []], ["add", "theorem", "ext_nat'", []], ["add", "theorem", "ext_nat", []], ["add", "theorem", "map_nat_cast'", []], ["add", "theorem", "map_nat_cast", []], ["mod", "theorem", "ext_nat", ["monoid_with_zero_hom"]], ["mod", "theorem", "cast_one", ["nat"]], ["mod", "theorem", "cast_two", ["nat"]], ["mod", "theorem", "coe_nat_dvd", ["nat"]], ["mod", "theorem", "commute_cast", ["nat"]], ["del", "theorem", "eq_nat_cast", ["ring_hom"]], ["del", "theorem", "ext_nat", ["ring_hom"]], ["del", "theorem", "map_nat_cast", ["ring_hom"]], ["mod", "theorem", "coe_nat", ["with_top"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "map_nat_cast", ["polynomial"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": [["mod", "theorem", "coe_nat_cast", ["subring"]]]}, {"oldPath": "src/ring_theory/witt_vector/compare.lean", "newPath": "src/ring_theory/witt_vector/compare.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/verschiebung.lean", "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}]}, {"timestamp": 1641820080, "sha": "1533f158", "message": "feat(logic/basic): add eq_true_eq_id (#11341)\nAdds the simp lemma `eq_true_eq_id : eq true = id`, a sort of curried version of `eq_true : (a = true) = a` in core.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "eq_true_eq_id", []]]}]}, {"timestamp": 1641820079, "sha": "fabc5101", "message": "feat(linear_algebra/determinant): `linear_equiv.det_conj` (#11340)\nAdd a version of the `linear_map.det_conj` lemma for `linear_equiv.det`.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_conj", ["linear_equiv"]]]}]}, {"timestamp": 1641820077, "sha": "48b21e51", "message": "feat(probability_theory/martingale): one direction of the optional stopping theorem (#11007)", "changes": [{"oldPath": "src/probability_theory/martingale.lean", "newPath": "src/probability_theory/martingale.lean", "changes": [["add", "theorem", "expected_stopped_value_mono", ["measure_theory", "submartingale"]], ["add", "theorem", "integrable_stopped_value", ["measure_theory", "submartingale"]]]}, {"oldPath": "src/probability_theory/stopping.lean", "newPath": "src/probability_theory/stopping.lean", "changes": [["add", "theorem", "integrable_stopped_value", ["measure_theory"]], ["add", "theorem", "measurable_set_lt", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_lt_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "mem_ℒp_stopped_value", ["measure_theory"]], ["add", "theorem", "stopped_value_eq", ["measure_theory"]], ["add", "theorem", "stopped_value_sub_eq_sum'", ["measure_theory"]], ["add", "theorem", "stopped_value_sub_eq_sum", ["measure_theory"]]]}]}, {"timestamp": 1641809896, "sha": "77821571", "message": "feat (data/finset/lattice): add more finset induction lemmas (#10889)\n2 more finset induction lemmas based on the order imposed by a function.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "induction_on_max_value", ["finset"]], ["add", "theorem", "induction_on_min_value", ["finset"]]]}]}, {"timestamp": 1641777826, "sha": "99fe7acb", "message": "chore(data/set/function): move inv_fun_on out of `logic/function/basic` (#11330)\nThis removes `function.inv_fun_on_eq'` as it is a duplicate of `inj_on.left_inv_on_inv_fun_on`.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inv_fun_on_eq", ["function"]], ["add", "theorem", "inv_fun_on_mem", ["function"]], ["add", "theorem", "inv_fun_on_neg", ["function"]], ["add", "theorem", "inv_fun_on_pos", ["function"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["del", "theorem", "inv_fun_on_eq'", ["function"]], ["del", "theorem", "inv_fun_on_eq", ["function"]], ["del", "theorem", "inv_fun_on_mem", ["function"]], ["del", "theorem", "inv_fun_on_neg", ["function"]], ["del", "theorem", "inv_fun_on_pos", ["function"]]]}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}]}, {"timestamp": 1641770130, "sha": "6a109397", "message": "fix(docs/references.bib): syntax error (#11342)\nThis broke the docs build.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1641762486, "sha": "ce17b657", "message": "feat(topology/algebra/monoid): to_additivize some lemmas (#11310)\nUncomment a commented out to additive line that looks like its been there\nfor 3 years (since\nhttps://github.com/leanprover-community/mathlib/commit/581cf19bf1885ef874c39c9902a93f579bc8c22d)\nThe changes to to_additive in the past few years now make the\ngenerated lemma useful.\nAlso to_additivize a bunch of other lemmas in this file.", "changes": [{"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1641751571, "sha": "d13b3a4a", "message": "chore(*): update to 3.37.0c (#11325)\nthe major breaking change this version is making `default`'s parameters\nimplicit, as opposed to explicit. there was also some slight \"free\"\ngolfing due to the better `out_param` simp support.", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["mod", "theorem", "finprod_unique", []]]}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/lie/cartan_matrix.lean", "newPath": "src/algebra/lie/cartan_matrix.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "default_def", ["linear_map"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": []}, {"oldPath": "src/category_theory/category/Kleisli.lean", "newPath": "src/category_theory/category/Kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/category/pairwise.lean", "newPath": "src/category_theory/category/pairwise.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/closed/zero.lean", "newPath": "src/category_theory/closed/zero.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/connected_components.lean", "newPath": "src/category_theory/connected_components.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/lifting_properties.lean", "newPath": "src/category_theory/lifting_properties.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/kleisli.lean", "newPath": "src/category_theory/monad/kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/path_category.lean", "newPath": "src/category_theory/path_category.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": []}, {"oldPath": "src/combinatorics/hales_jewett.lean", "newPath": "src/combinatorics/hales_jewett.lean", "changes": []}, {"oldPath": "src/combinatorics/quiver/connected_component.lean", "newPath": "src/combinatorics/quiver/connected_component.lean", "changes": []}, {"oldPath": "src/combinatorics/quiver/subquiver.lean", "newPath": "src/combinatorics/quiver/subquiver.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/reduce.lean", "newPath": "src/computability/reduce.lean", "changes": []}, {"oldPath": "src/computability/tm_computable.lean", "newPath": "src/computability/tm_computable.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/control/functor.lean", "newPath": "src/control/functor.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/bool/basic.lean", "newPath": "src/data/bool/basic.lean", "changes": [["mod", "theorem", "default_bool", ["bool"]]]}, {"oldPath": "src/data/bundle.lean", "newPath": "src/data/bundle.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/embedding.lean", "newPath": "src/data/equiv/embedding.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "unique_ext", ["finsupp"]], ["mod", "theorem", "unique_ext_iff", ["finsupp"]], ["mod", "theorem", "unique_single", ["finsupp"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "univ_unique", ["finset"]]]}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "default_eq_zero", ["int"]]]}, {"oldPath": "src/data/lazy_list.lean", "newPath": "src/data/lazy_list.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "take'_nil", ["list"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": [["mod", "theorem", "get_nil", ["list", "func"]], ["mod", "theorem", "get_pointwise", ["list", "func"]], ["mod", "theorem", "nil_pointwise", ["list", "func"]]]}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/M.lean", "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/basic.lean", "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/const.lean", "newPath": "src/data/qpf/multivariate/constructions/const.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/prj.lean", "newPath": "src/data/qpf/multivariate/constructions/prj.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/quot.lean", "newPath": "src/data/qpf/multivariate/constructions/quot.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/sigma.lean", "newPath": "src/data/qpf/multivariate/constructions/sigma.lean", "changes": []}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/data/rbmap/basic.lean", "newPath": "src/data/rbmap/basic.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "default_coe_singleton", ["set"]], ["mod", "theorem", "range_unique", ["set"]], ["mod", "theorem", "univ_unique", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}, {"oldPath": "src/data/stream/init.lean", "newPath": "src/data/stream/init.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": [["mod", "theorem", "head_empty", ["string"]]]}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": []}, {"oldPath": "src/data/tprod.lean", "newPath": "src/data/tprod.lean", "changes": []}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": []}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": [["mod", "def", "tree_hom", ["is_free_groupoid", "spanning_tree"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["mod", "theorem", "default_perm", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["mod", "theorem", "default_eq_zero", ["fin"]], ["mod", "theorem", "default_eq", ["unique"]], ["mod", "theorem", "eq_default", ["unique"]], ["mod", "theorem", "exists_iff", ["unique"]], ["mod", "theorem", "forall_iff", ["unique"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "infi_unique", []], ["mod", "theorem", "supr_unique", []]]}, {"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": []}, {"oldPath": "src/order/extension.lean", "newPath": "src/order/extension.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/pfilter.lean", "newPath": "src/order/pfilter.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "default_def", ["rel_iso"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/derive_inhabited.lean", "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/explode_widget.lean", "newPath": "src/tactic/explode_widget.lean", "changes": []}, {"oldPath": "src/tactic/fix_reflect_string.lean", "newPath": "src/tactic/fix_reflect_string.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}, {"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["mod", "theorem", "coe_fun_unique", ["continuous_linear_equiv"]], ["mod", "theorem", "default_def", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/nonarchimedean/bases.lean", "newPath": "src/topology/algebra/nonarchimedean/bases.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/compact.lean", "newPath": "src/topology/algebra/ordered/compact.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/tietze_extension.lean", "newPath": "src/topology/tietze_extension.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "test/inhabit.lean", "newPath": "test/inhabit.lean", "changes": []}, {"oldPath": "test/instance_cache.lean", "newPath": "test/instance_cache.lean", "changes": []}, {"oldPath": "test/lint_coe_t.lean", "newPath": "test/lint_coe_t.lean", "changes": [["mod", "def", "int_to_a", []]]}, {"oldPath": "test/lint_simp_nf.lean", "newPath": "test/lint_simp_nf.lean", "changes": [["mod", "def", "c", []], ["mod", "def", "d", []], ["mod", "def", "f", []], ["mod", "def", "h", []]]}, {"oldPath": "test/pi_simp.lean", "newPath": "test/pi_simp.lean", "changes": [["mod", "def", "eval_default", ["test"]]]}, {"oldPath": "test/qpf.lean", "newPath": "test/qpf.lean", "changes": []}]}, {"timestamp": 1641751569, "sha": "47a8d5a6", "message": "refactor(data/{sigma,psigma}/order): Use `lex` synonym and new notation (#11235)\nThis introduces notations `Σₗ i, α i` and `Σₗ' i, α i` for `lex (Σ i, α i)` and `lex (Σ' i, α i)` and use them instead of the instance switch with locale `lex`.", "changes": [{"oldPath": "src/data/psigma/order.lean", "newPath": "src/data/psigma/order.lean", "changes": []}, {"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": []}]}, {"timestamp": 1641745105, "sha": "2bb25f05", "message": "feat(algebra/periodic): lifting to function on quotient group (#11321)\nI want to make more use of the type `real.angle` in\n`analysis.special_functions.trigonometric.angle`, including defining\nfunctions from this type in terms of periodic functions from `ℝ`. To\nsupport defining such functions, add a definition `periodic.lift` that\nlifts a periodic function from `α` to a function from\n`α ⧸ (add_subgroup.zmultiples c)`, along with a lemma\n`periodic.lift_coe` about the values of the resulting function.", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "def", "lift", ["function", "periodic"]], ["add", "theorem", "lift_coe", ["function", "periodic"]]]}]}, {"timestamp": 1641745104, "sha": "49ba33e5", "message": "feat(vscode): add a snippet for inserting a module docstring template (#11312)\nWe already have a vscode snippet for adding copyright headers, this PR adds a similar one to generate a default module docstring with many of the common sections stubbed out.\nBy default it takes the filename, converts underscores to spaces and capitalizes each word to create the title, as this seems a sensible default. But otherwise all text is a static default example following the documentation style page to make it easier to remember the various recommended secitons.\nTo test do `ctrl+shift+p` to open the command pallette, type insert snippet, enter, and type module and it should show up.\nSee also #3186", "changes": [{"oldPath": null, "newPath": ".vscode/module-docstring.code-snippets", "changes": []}]}, {"timestamp": 1641745103, "sha": "fadbd959", "message": "feat(field_theory/ratfunc): ratfunc.lift_on without is_domain (#11227)\nWe might want to state results about rational functions without assuming\nthat the base ring is an integral domain.\nCf. Misconceptions about $K_X$, Kleiman, Steven; Stacks01X1", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "theorem", "lift_on_condition_of_lift_on'_condition", ["ratfunc"]], ["add", "theorem", "lift_on_of_fraction_ring_mk", ["ratfunc"]]]}]}, {"timestamp": 1641733797, "sha": "9c224ff6", "message": "split(data/set/functor): Split off `data.set.lattice` (#11327)\nThis moves the functor structure of `set` in a new file `data.set.functor`.\nAlso adds `alternative set` because it's quick and easy.", "changes": [{"oldPath": "src/computability/NFA.lean", "newPath": "src/computability/NFA.lean", "changes": []}, {"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/set/functor.lean", "changes": [["add", "theorem", "bind_def", ["set"]], ["add", "theorem", "fmap_eq_image", ["set"]], ["add", "theorem", "pure_def", ["set"]], ["add", "theorem", "seq_eq_set_seq", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "bind_def", ["set"]], ["del", "theorem", "fmap_eq_image", ["set"]], ["del", "theorem", "pure_def", ["set"]], ["del", "theorem", "seq_eq_set_seq", ["set"]]]}]}, {"timestamp": 1641715095, "sha": "ad4ea538", "message": "chore(*): miscellaneous to_additive related cleanup (#11316)\nA few cleanup changes related to to_additive:\n* After https://github.com/leanprover-community/lean/pull/618 was merged, we no longer need to add namespaces manually in filtered_colimits and open subgroup\n* to_additive can now generate some more lemmas in big_operators/fin\n* to_additive now handles a proof in measure/haar better than it used to\n so remove a workaround there", "changes": [{"oldPath": "src/algebra/big_operators/fin.lean", "newPath": "src/algebra/big_operators/fin.lean", "changes": [["del", "theorem", "sum_filter_succ_lt", ["fin"]], ["del", "theorem", "sum_filter_zero_lt", ["fin"]]]}, {"oldPath": "src/algebra/category/CommRing/filtered_colimits.lean", "newPath": "src/algebra/category/CommRing/filtered_colimits.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}]}, {"timestamp": 1641708367, "sha": "ca5e55cc", "message": "feat(linear_algebra/basis): `basis.ext`, `basis.ext'` for semilinear maps (#11317)\nExtend `basis.ext` and `basis.ext'` to apply to the general\n(semilinear) case of `linear_map` and `linear_equiv`.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "ext'", ["basis"]], ["mod", "theorem", "ext", ["basis"]]]}]}, {"timestamp": 1641700494, "sha": "a58553d5", "message": "feat(data/nat/factorization): Add lemmas on factorizations of pairs of coprime numbers (#10850)", "changes": [{"oldPath": "src/data/nat/factorization.lean", "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factorization_disjoint_of_coprime", ["nat"]], ["add", "theorem", "factorization_mul_of_coprime", ["nat"]], ["add", "theorem", "factorization_mul_support_of_coprime", ["nat"]], ["add", "theorem", "factorization_mul_support_of_pos", ["nat"]]]}]}, {"timestamp": 1641691292, "sha": "d4846b32", "message": "chore(ring_theory/fractional_ideal): fix typo (#11311)", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}]}, {"timestamp": 1641683453, "sha": "22ff4ebc", "message": "feat(combinatorics/simple_graph/matchings): even_card_vertices_of_perfect_matching (#11083)", "changes": [{"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": [["add", "theorem", "even_card", ["simple_graph", "subgraph", "is_matching"]], ["add", "theorem", "surjective", ["simple_graph", "subgraph", "is_matching", "to_edge"]], ["add", "theorem", "to_edge_eq_of_adj", ["simple_graph", "subgraph", "is_matching"]], ["add", "theorem", "to_edge_eq_to_edge_of_adj", ["simple_graph", "subgraph", "is_matching"]], ["add", "theorem", "even_card", ["simple_graph", "subgraph", "is_perfect_matching"]], ["add", "theorem", "is_perfect_matching_iff_forall_degree", ["simple_graph", "subgraph"]]]}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "of_spanning_coe", ["simple_graph", "subgraph", "adj"]], ["add", "theorem", "degree_spanning_coe", ["simple_graph", "subgraph"]], ["add", "theorem", "card_verts", ["simple_graph", "subgraph", "is_spanning"]], ["add", "theorem", "neighbor_set_subset_verts", ["simple_graph", "subgraph"]], ["del", "theorem", "spanning_coe_adj_sub", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1641678888, "sha": "0a75fdfb", "message": "feat(linear_algebra/eigenspace): prove eigenvalues are exactly elements of the spectrum when the space is finite dimensional (#10961)\nThis adds `has_eigenvalue_iff_mem_spectrum` and then uses it to golf `exists_eigenvalue`\n- [x] depends on: #10912 \n- [x] depends on: #10919", "changes": [{"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "has_eigenvalue_iff_mem_spectrum", ["module", "End"]]]}]}, {"timestamp": 1641667019, "sha": "ee136d90", "message": "chore(set_theory/game/domineering): extract repeated goal into lemma and golf (#11298)\n`fst_pred_mem_erase_of_mem_right` and `snd_pred_mem_erase_of_mem_left` were common subgoals that appeared in two lemmas each.", "changes": [{"oldPath": "src/set_theory/game/domineering.lean", "newPath": "src/set_theory/game/domineering.lean", "changes": [["add", "theorem", "fst_pred_mem_erase_of_mem_right", ["pgame", "domineering"]], ["add", "theorem", "mem_left", ["pgame", "domineering"]], ["add", "theorem", "mem_right", ["pgame", "domineering"]], ["mod", "def", "shift_right", ["pgame", "domineering"]], ["mod", "def", "shift_up", ["pgame", "domineering"]], ["add", "theorem", "snd_pred_mem_erase_of_mem_left", ["pgame", "domineering"]]]}]}, {"timestamp": 1641667017, "sha": "84dbe31d", "message": "feat(topology/basic): add explicit definition of continuous_at (#11296)\nThis was convenient in a demo.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "continuous_at_def", []]]}]}, {"timestamp": 1641667016, "sha": "25704cac", "message": "docs(algebra/covariant_and_contravariant): minor typos (#11293)", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}]}, {"timestamp": 1641667014, "sha": "09f69890", "message": "chore(analysis/normed_space/banach): move more to the `continuous_linear_map` NS (#11263)\n## Rename\n* `open_mapping` → `continuous_linear_map.is_open_map`;\n* `open_mapping_affine` → `affine_map.is_open_map`;\n### New lemmas\n* `continuous_linear_map.quotient_map`,\n* `continuous_linear_map.interior_preimage`,\n* `continuous_linear_map.closure_preimage`,\n* `continuous_linear_map.frontier_preimage`.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "is_open_map", ["affine_map"]], ["add", "theorem", "closure_preimage", ["continuous_linear_map"]], ["add", "theorem", "exists_approx_preimage_norm_le", ["continuous_linear_map"]], ["add", "theorem", "exists_preimage_norm_le", ["continuous_linear_map"]], ["add", "theorem", "frontier_preimage", ["continuous_linear_map"]], ["add", "theorem", "interior_preimage", ["continuous_linear_map"]], ["del", "theorem", "exists_approx_preimage_norm_le", []], ["del", "theorem", "exists_preimage_norm_le", []], ["del", "theorem", "open_mapping", []], ["del", "theorem", "open_mapping_affine", []]]}]}, {"timestamp": 1641667012, "sha": "60e279ba", "message": "chore(*): update to lean 3.36.0 (#11253)\nThe main breaking change is the change in elaboration of double membership binders into x hx y hy, from x y hx hy.", "changes": [{"oldPath": "archive/imo/imo1994_q1.lean", "newPath": "archive/imo/imo1994_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo2021_q1.lean", "newPath": "archive/imo/imo2021_q1.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/simplicial_complex/basic.lean", "newPath": "src/analysis/convex/simplicial_complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/hindman.lean", "newPath": "src/combinatorics/hindman.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "inf'_induction", ["finset"]], ["mod", "theorem", "inf_induction", ["finset"]], ["mod", "theorem", "sup'_induction", ["finset"]], ["mod", "theorem", "sup_induction", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/constructions.lean", "newPath": "src/data/set/constructions.lean", "changes": []}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ball_cond_comm", []], ["add", "theorem", "ball_mem_comm", []]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": []}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/order/pfilter.lean", "newPath": "src/order/pfilter.lean", "changes": []}, {"oldPath": "src/order/prime_ideal.lean", "newPath": "src/order/prime_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/pretty_cases.lean", "newPath": "src/tactic/pretty_cases.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/transfer.lean", "newPath": "src/tactic/transfer.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/intermediate_value.lean", "newPath": "src/topology/algebra/ordered/intermediate_value.lean", "changes": []}, {"oldPath": "src/topology/algebra/semigroup.lean", "newPath": "src/topology/algebra/semigroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_filter_basis.lean", "newPath": "src/topology/algebra/uniform_filter_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/valuation.lean", "newPath": "src/topology/algebra/valuation.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/holder.lean", "newPath": "src/topology/metric_space/holder.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1641659346, "sha": "dd1242d2", "message": "feat(algebra/associated): generalize nat.prime.pow_dvd_of_dvd_mul_{left,right} (#11301)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "pow_dvd_of_dvd_mul_left", ["prime"]], ["add", "theorem", "pow_dvd_of_dvd_mul_right", ["prime"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "pow_dvd_of_dvd_mul_left", ["nat", "prime"]], ["del", "theorem", "pow_dvd_of_dvd_mul_right", ["nat", "prime"]]]}]}, {"timestamp": 1641659345, "sha": "c76e1136", "message": "feat(ring_theory/laurent): coercion of R[x] to R((x)) lemmas (#11295)\nMake the coercion be `simp`-normal as opposed to `(algebra_map _ _)`.\nAlso generalize `of_power_series Γ R (power_series.C R r) = hahn_series.C r` and similarly for `X` to be true for any `[ordered semiring Γ]`, not just `ℤ`.", "changes": [{"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": [["add", "theorem", "of_power_series_C", ["laurent_series"]], ["add", "theorem", "coe_coe", ["polynomial"]], ["add", "theorem", "coe_laurent", ["polynomial"]], ["add", "theorem", "coe_laurent_C", ["polynomial"]], ["add", "theorem", "coe_laurent_X", ["polynomial"]], ["add", "theorem", "coe_laurent_add", ["polynomial"]], ["add", "theorem", "coe_laurent_mul", ["polynomial"]], ["add", "theorem", "coe_laurent_one", ["polynomial"]], ["add", "theorem", "coe_laurent_smul", ["polynomial"]], ["add", "theorem", "coe_laurent_zero", ["polynomial"]], ["add", "theorem", "coeff_coe_laurent", ["polynomial"]], ["add", "theorem", "coeff_coe_laurent_coe", ["polynomial"]]]}]}, {"timestamp": 1641659344, "sha": "11625097", "message": "chore(data/fin/vec_notation): generalize smul_cons (#11285)", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": [["mod", "theorem", "smul_cons", ["matrix"]], ["mod", "theorem", "smul_empty", ["matrix"]]]}]}, {"timestamp": 1641659341, "sha": "56f021a9", "message": "feat(data/polynomial/{erase_lead + denoms_clearable}): strengthen a lemma (#11257)\nThis PR is a step in the direction of simplifying #11139 .\nIt strengthens lemma `induction_with_nat_degree_le` by showing that restriction can be strengthened on one of the assumptions.\n~~It proves a lemma computing the `nat_degree` under functions on polynomials that include the shift of a variable.~~\nEDIT: the lemma was moved to the later PR #11265.\nIt fixes the unique use of lemma `induction_with_nat_degree_le`.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2311139.20taylor.20sum.20and.20nat_degree_taylor)", "changes": [{"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["mod", "theorem", "induction_with_nat_degree_le", ["polynomial"]]]}]}, {"timestamp": 1641659339, "sha": "b181a120", "message": "refactor(combinatorics/quiver): split into several files (#11006)\nThis PR splits `combinatorics/quiver.lean` into several files. The main reason for this is to ensure that the category theory library only imports the necessary definitions (and not for example the stuff on arborescences).\nAlso adds some more documentation, and fixes a bug in the definition of weakly connected components.", "changes": [{"oldPath": "src/category_theory/category/basic.lean", "newPath": "src/category_theory/category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/path_category.lean", "newPath": "src/category_theory/path_category.lean", "changes": []}, {"oldPath": "src/combinatorics/quiver.lean", "newPath": null, "changes": [["del", "def", "comp", ["prefunctor"]], ["del", "def", "id", ["prefunctor"]], ["del", "def", "map_path", ["prefunctor"]], ["del", "theorem", "map_path_comp", ["prefunctor"]], ["del", "theorem", "map_path_cons", ["prefunctor"]], ["del", "theorem", "map_path_nil", ["prefunctor"]], ["del", "structure", "prefunctor", []], ["del", "def", "empty", ["quiver"]], ["del", "theorem", "empty_arrow", ["quiver"]], ["del", "def", "geodesic_subtree", ["quiver"]], ["del", "def", "op", ["quiver", "hom"]], ["del", "def", "to_path", ["quiver", "hom"]], ["del", "def", "unop", ["quiver", "hom"]], ["del", "def", "labelling", ["quiver"]], ["del", "def", "comp", ["quiver", "path"]], ["del", "theorem", "comp_assoc", ["quiver", "path"]], ["del", "theorem", "comp_cons", ["quiver", "path"]], ["del", "theorem", "comp_nil", ["quiver", "path"]], ["del", "def", "length", ["quiver", "path"]], ["del", "theorem", "length_cons", ["quiver", "path"]], ["del", "theorem", "length_nil", ["quiver", "path"]], ["del", "theorem", "nil_comp", ["quiver", "path"]], ["del", "def", "reverse", ["quiver", "path"]], ["del", "inductive", "path", ["quiver"]], ["del", "def", "reverse", ["quiver"]], ["del", "def", "root", ["quiver"]], ["del", "theorem", "shortest_path_spec", ["quiver"]], ["del", "def", "symmetrify", ["quiver"]], ["del", "structure", "total", ["quiver"]], ["del", "def", "weakly_connected_component", ["quiver"]], ["del", "def", "wide_subquiver_equiv_set_total", ["quiver"]], ["del", "def", "wide_subquiver_symmetrify", ["quiver"]], ["del", "def", "zigzag_setoid", ["quiver"]], ["del", "def", "to_Type", ["wide_subquiver"]], ["del", "def", "wide_subquiver", []]]}, {"oldPath": null, "newPath": "src/combinatorics/quiver/arborescence.lean", "changes": [["add", "def", "geodesic_subtree", ["quiver"]], ["add", "def", "root", ["quiver"]], ["add", "theorem", "shortest_path_spec", ["quiver"]]]}, {"oldPath": null, "newPath": "src/combinatorics/quiver/basic.lean", "changes": [["add", "def", "comp", ["prefunctor"]], ["add", "def", "id", ["prefunctor"]], ["add", "structure", "prefunctor", []], ["add", "def", "empty", ["quiver"]], ["add", "theorem", "empty_arrow", ["quiver"]], ["add", "def", "op", ["quiver", "hom"]], ["add", "def", "unop", ["quiver", "hom"]]]}, {"oldPath": null, "newPath": "src/combinatorics/quiver/connected_component.lean", "changes": [["add", "def", "reverse", ["quiver", "path"]], ["add", "def", "reverse", ["quiver"]], ["add", "def", "symmetrify", ["quiver"]], ["add", "def", "weakly_connected_component", ["quiver"]], ["add", "def", "wide_subquiver_symmetrify", ["quiver"]], ["add", "def", "zigzag_setoid", ["quiver"]]]}, {"oldPath": null, "newPath": "src/combinatorics/quiver/path.lean", "changes": [["add", "def", "map_path", ["prefunctor"]], ["add", "theorem", "map_path_comp", ["prefunctor"]], ["add", "theorem", "map_path_cons", ["prefunctor"]], ["add", "theorem", "map_path_nil", ["prefunctor"]], ["add", "def", "to_path", ["quiver", "hom"]], ["add", "def", "comp", ["quiver", "path"]], ["add", "theorem", "comp_assoc", ["quiver", "path"]], ["add", "theorem", "comp_cons", ["quiver", "path"]], ["add", "theorem", "comp_nil", ["quiver", "path"]], ["add", "def", "length", ["quiver", "path"]], ["add", "theorem", "length_cons", ["quiver", "path"]], ["add", "theorem", "length_nil", ["quiver", "path"]], ["add", "theorem", "nil_comp", ["quiver", "path"]], ["add", "inductive", "path", ["quiver"]]]}, {"oldPath": null, "newPath": "src/combinatorics/quiver/subquiver.lean", "changes": [["add", "def", "labelling", ["quiver"]], ["add", "structure", "total", ["quiver"]], ["add", "def", "wide_subquiver_equiv_set_total", ["quiver"]], ["add", "def", "to_Type", ["wide_subquiver"]], ["add", "def", "wide_subquiver", []]]}, {"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": []}]}, {"timestamp": 1641659338, "sha": "9b3fec55", "message": "feat(algebraic_geometry): Gamma-Spec adjunction (#9802)\nDefine the adjunction between the functors Gamma (global sections) and Spec (to LocallyRingedSpace).\nI'm currently working on a more general version in http://arxiv.org/pdf/1103.2139.pdf (Theorem 2), which may require refactoring `structure_sheaf` and `Spec`.", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/Gamma_Spec_adjunction.lean", "changes": [["add", "theorem", "comp_ring_hom_ext", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "is_unit_res_to_Γ_Spec_map_basic_open", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "not_mem_prime_iff_unit_in_stalk", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_stalk_stalk_map_to_Γ_Spec", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_to_Γ_Spec_map_basic_open", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Γ_Spec", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Γ_Spec_SheafedSpace", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_Γ_Spec_SheafedSpace_app_eq", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_Γ_Spec_SheafedSpace_app_spec", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Γ_Spec_base", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Γ_Spec_c_app", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_Γ_Spec_c_app_iff", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_Γ_Spec_c_app_spec", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Γ_Spec_c_basic_opens", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_Γ_Spec_continuous", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Γ_Spec_fun", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Γ_Spec_map_basic_open", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_Γ_Spec_map_basic_open_eq", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "to_Γ_Spec_preim_basic_open_eq", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "Γ_Spec_left_triangle", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "Γ_to_stalk", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "identity_to_Γ_Spec", ["algebraic_geometry"]], ["add", "def", "LocallyRingedSpace_adjunction", ["algebraic_geometry", "Γ_Spec"]], ["add", "def", "adjunction", ["algebraic_geometry", "Γ_Spec"]], ["add", "theorem", "adjunction_counit_app", ["algebraic_geometry", "Γ_Spec"]], ["add", "theorem", "adjunction_hom_equiv", ["algebraic_geometry", "Γ_Spec"]], ["add", "theorem", "adjunction_hom_equiv_apply", ["algebraic_geometry", "Γ_Spec"]], ["add", "theorem", "adjunction_hom_equiv_symm_apply", ["algebraic_geometry", "Γ_Spec"]], ["add", "theorem", "adjunction_unit_app", ["algebraic_geometry", "Γ_Spec"]], ["add", "theorem", "left_triangle", ["algebraic_geometry", "Γ_Spec"]], ["add", "theorem", "right_triangle", ["algebraic_geometry", "Γ_Spec"]]]}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["del", "theorem", "to_basic_open", ["algebraic_geometry", "structure_sheaf", "is_localization"]], ["del", "theorem", "to_stalk", ["algebraic_geometry", "structure_sheaf", "is_localization"]], ["add", "theorem", "open_algebra_map", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "stalk_algebra_map", ["algebraic_geometry", "structure_sheaf"]]]}]}, {"timestamp": 1641654277, "sha": "b1955dca", "message": "feat(data/matrix/basic): infix notation for matrix.dot_product in locale matrix (#11289)\nI created an infix notation for `matrix.dot_product` in locale `matrix`. The notation was consulted with @eric-wieser in #11181.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "add_dot_product", ["matrix"]], ["mod", "theorem", "diagonal_dot_product", ["matrix"]], ["mod", "theorem", "dot_product_add", ["matrix"]], ["mod", "theorem", "dot_product_diagonal'", ["matrix"]], ["mod", "theorem", "dot_product_diagonal", ["matrix"]], ["mod", "theorem", "dot_product_neg", ["matrix"]], ["mod", "theorem", "dot_product_single", ["matrix"]], ["mod", "theorem", "dot_product_star", ["matrix"]], ["mod", "theorem", "dot_product_sub", ["matrix"]], ["mod", "theorem", "dot_product_zero'", ["matrix"]], ["mod", "theorem", "dot_product_zero", ["matrix"]], ["mod", "theorem", "neg_dot_product", ["matrix"]], ["mod", "theorem", "single_dot_product", ["matrix"]], ["mod", "theorem", "star_dot_product", ["matrix"]], ["mod", "theorem", "star_dot_product_star", ["matrix"]], ["mod", "theorem", "sub_dot_product", ["matrix"]], ["mod", "theorem", "zero_dot_product'", ["matrix"]], ["mod", "theorem", "zero_dot_product", ["matrix"]]]}]}, {"timestamp": 1641654276, "sha": "43041277", "message": "feat(ring_theory/power_series): teach simp to simplify more coercions of polynomials to power series (#11287)\nSo that simp can prove that the polynomial `5 * X^2 + X + 1` coerced to a power series is the same thing with the power series generator `X`. Likewise for `mv_power_series`.", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "coe_bit0", ["mv_polynomial"]], ["add", "theorem", "coe_bit1", ["mv_polynomial"]], ["add", "theorem", "coe_pow", ["mv_polynomial"]], ["add", "theorem", "coe_bit0", ["polynomial"]], ["add", "theorem", "coe_bit1", ["polynomial"]], ["add", "theorem", "coe_pow", ["polynomial"]]]}]}, {"timestamp": 1641654275, "sha": "e8713864", "message": "feat(number_theory/cyclotomic/basic): add lemmas (#11264)\nFrom flt-regular.", "changes": [{"oldPath": "src/number_theory/cyclotomic/basic.lean", "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["add", "theorem", "adjoin_roots_cyclotomic_eq_adjoin_nth_roots", ["is_cyclotomic_extension"]], ["add", "theorem", "finite_dimensional", ["is_cyclotomic_extension"]], ["add", "theorem", "integral", ["is_cyclotomic_extension"]], ["add", "theorem", "splits_X_pow_sub_one", ["is_cyclotomic_extension"]], ["add", "theorem", "splits_cyclotomic", ["is_cyclotomic_extension"]], ["add", "theorem", "splitting_field_X_pow_sub_one", ["is_cyclotomic_extension"]], ["add", "theorem", "splitting_field_cyclotomic", ["is_cyclotomic_extension"]]]}]}, {"timestamp": 1641654273, "sha": "c7fa66ea", "message": "feat(data/nat/prime): power to factor count divides natural (#11226)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "pow_factors_count_dvd", ["nat"]]]}]}, {"timestamp": 1641654272, "sha": "4d79d5fe", "message": "chore(measure_theory/group/arithmetic): use implicit argument for measurable_space (#11205)\nThe `measurable_space` argument is inferred from other arguments (like `measurable f` or a measure for example) instead of being a type class. This ensures that the lemmas are usable without `@` when several measurable space structures are used for the same type.\nAlso use more `variables`.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions.lean", "newPath": "src/measure_theory/function/special_functions.lean", "changes": [["mod", "theorem", "inner", ["ae_measurable"]], ["mod", "theorem", "inner", ["measurable"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["mod", "theorem", "const_div", ["ae_measurable"]], ["mod", "theorem", "const_mul", ["ae_measurable"]], ["mod", "theorem", "const_pow", ["ae_measurable"]], ["mod", "theorem", "const_smul'", ["ae_measurable"]], ["mod", "theorem", "const_smul", ["ae_measurable"]], ["mod", "theorem", "div'", ["ae_measurable"]], ["mod", "theorem", "div", ["ae_measurable"]], ["mod", "theorem", "div_const", ["ae_measurable"]], ["mod", "theorem", "inv", ["ae_measurable"]], ["mod", "theorem", "mul'", ["ae_measurable"]], ["mod", "theorem", "mul", ["ae_measurable"]], ["mod", "theorem", "mul_const", ["ae_measurable"]], ["mod", "theorem", "pow", ["ae_measurable"]], ["mod", "theorem", "pow_const", ["ae_measurable"]], ["mod", "theorem", "smul_const", ["ae_measurable"]], ["mod", "theorem", "ae_measurable_prod'", ["finset"]], ["mod", "theorem", "ae_measurable_prod", ["finset"]], ["mod", "theorem", "measurable_prod'", ["finset"]], ["mod", "theorem", "measurable_prod", ["finset"]], ["mod", "theorem", "ae_measurable_prod'", ["list"]], ["mod", "theorem", "ae_measurable_prod", ["list"]], ["mod", "theorem", "const_div", ["measurable"]], ["mod", "theorem", "const_mul", ["measurable"]], ["mod", "theorem", "const_pow", ["measurable"]], ["mod", "theorem", "const_smul'", ["measurable"]], ["mod", "theorem", "const_smul", ["measurable"]], ["mod", "theorem", "div'", ["measurable"]], ["mod", "theorem", "div", ["measurable"]], ["mod", "theorem", "div_const", ["measurable"]], ["mod", "theorem", "inv", ["measurable"]], ["mod", "theorem", "mul'", ["measurable"]], ["mod", "theorem", "mul", ["measurable"]], ["mod", "theorem", "mul_const", ["measurable"]], ["mod", "theorem", "pow", ["measurable"]], ["mod", "theorem", "pow_const", ["measurable"]], ["mod", "theorem", "smul", ["measurable"]], ["mod", "theorem", "smul_const", ["measurable"]], ["mod", "theorem", "measurable_set_eq_fun", []], ["mod", "theorem", "ae_measurable_prod'", ["multiset"]], ["mod", "theorem", "ae_measurable_prod", ["multiset"]]]}]}, {"timestamp": 1641651840, "sha": "22311732", "message": "feat(group_theory/commuting_probability): New file (#11243)\nThis PR introduces commuting probabilities of finite groups.", "changes": [{"oldPath": null, "newPath": "src/group_theory/commuting_probability.lean", "changes": [["add", "theorem", "card_comm_eq_card_conj_classes_mul_card", []], ["add", "def", "comm_prob", []], ["add", "theorem", "comm_prob_def'", []], ["add", "theorem", "comm_prob_def", []], ["add", "theorem", "comm_prob_eq_one_iff", []], ["add", "theorem", "comm_prob_le_one", []], ["add", "theorem", "comm_prob_pos", []]]}]}, {"timestamp": 1641626574, "sha": "07f9b8e1", "message": "feat(data/sum/order): Linear and disjoint sums of orders (#11157)\nThis defines the disjoint sum of two orders on `α ⊕ β` and the linear (aka lexicographic) sum of two orders on `α ⊕ₗ β` (a type synonym of `α ⊕ β`) in a new file `data.sum.order`.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "sum_assoc", ["equiv"]], ["del", "theorem", "sum_assoc_apply_in1", ["equiv"]], ["del", "theorem", "sum_assoc_apply_in2", ["equiv"]], ["del", "theorem", "sum_assoc_apply_in3", ["equiv"]], ["add", "theorem", "sum_assoc_apply_inl_inl", ["equiv"]], ["add", "theorem", "sum_assoc_apply_inl_inr", ["equiv"]], ["add", "theorem", "sum_assoc_apply_inr", ["equiv"]], ["add", "theorem", "sum_assoc_symm_apply_inl", ["equiv"]], ["add", "theorem", "sum_assoc_symm_apply_inr_inl", ["equiv"]], ["add", "theorem", "sum_assoc_symm_apply_inr_inr", ["equiv"]], ["mod", "def", "sum_comm", ["equiv"]]]}, {"oldPath": "src/data/sum/basic.lean", "newPath": "src/data/sum/basic.lean", "changes": [["add", "theorem", "get_left_eq_none_iff", ["sum"]], ["add", "theorem", "get_right_eq_none_iff", ["sum"]], ["add", "theorem", "mono", ["sum", "lift_rel"]], ["add", "theorem", "mono_left", ["sum", "lift_rel"]], ["add", "theorem", "mono_right", ["sum", "lift_rel"]], ["add", "inductive", "lift_rel", ["sum"]], ["add", "theorem", "lift_rel_inl_inl", ["sum"]], ["add", "theorem", "lift_rel_inr_inr", ["sum"]], ["add", "theorem", "lift_rel_swap_iff", ["sum"]], ["add", "theorem", "not_lift_rel_inl_inr", ["sum"]], ["add", "theorem", "not_lift_rel_inr_inl", ["sum"]]]}, {"oldPath": null, "newPath": "src/data/sum/order.lean", "changes": [["add", "def", "sum_assoc", ["order_iso"]], ["add", "theorem", "sum_assoc_apply_inl_inl", ["order_iso"]], ["add", "theorem", "sum_assoc_apply_inl_inr", ["order_iso"]], ["add", "theorem", "sum_assoc_apply_inr", ["order_iso"]], ["add", "theorem", "sum_assoc_symm_apply_inl", ["order_iso"]], ["add", "theorem", "sum_assoc_symm_apply_inr_inl", ["order_iso"]], ["add", "theorem", "sum_assoc_symm_apply_inr_inr", ["order_iso"]], ["add", "def", "sum_comm", ["order_iso"]], ["add", "theorem", "sum_comm_symm", ["order_iso"]], ["add", "def", "sum_dual_distrib", ["order_iso"]], ["add", "theorem", "sum_dual_distrib_inl", ["order_iso"]], ["add", "theorem", "sum_dual_distrib_inr", ["order_iso"]], ["add", "theorem", "sum_dual_distrib_symm_inl", ["order_iso"]], ["add", "theorem", "sum_dual_distrib_symm_inr", ["order_iso"]], ["add", "def", "sum_lex_assoc", ["order_iso"]], ["add", "theorem", "sum_lex_assoc_apply_inl_inl", ["order_iso"]], ["add", "theorem", "sum_lex_assoc_apply_inl_inr", ["order_iso"]], ["add", "theorem", "sum_lex_assoc_apply_inr", ["order_iso"]], ["add", "theorem", "sum_lex_assoc_symm_apply_inl", ["order_iso"]], ["add", "theorem", "sum_lex_assoc_symm_apply_inr_inl", ["order_iso"]], ["add", "theorem", "sum_lex_assoc_symm_apply_inr_inr", ["order_iso"]], ["add", "def", "sum_lex_dual_antidistrib", ["order_iso"]], ["add", "theorem", "sum_lex_dual_antidistrib_inl", ["order_iso"]], ["add", "theorem", "sum_lex_dual_antidistrib_inr", ["order_iso"]], ["add", "theorem", "sum_lex_dual_antidistrib_symm_inl", ["order_iso"]], ["add", "theorem", "sum_lex_dual_antidistrib_symm_inr", ["order_iso"]], ["add", "theorem", "densely_ordered_iff", ["sum"]], ["add", "theorem", "inl_le_inl_iff", ["sum"]], ["add", "theorem", "inl_lt_inl_iff", ["sum"]], ["add", "theorem", "inl_mono", ["sum"]], ["add", "theorem", "inl_strict_mono", ["sum"]], ["add", "def", "inlₗ", ["sum"]], ["add", "theorem", "inr_le_inr_iff", ["sum"]], ["add", "theorem", "inr_lt_inr_iff", ["sum"]], ["add", "theorem", "inr_mono", ["sum"]], ["add", "theorem", "inr_strict_mono", ["sum"]], ["add", "def", "inrₗ", ["sum"]], ["add", "theorem", "le_def", ["sum"]], ["add", "theorem", "inl_bot", ["sum", "lex"]], ["add", "theorem", "inl_le_inl_iff", ["sum", "lex"]], ["add", "theorem", "inl_le_inr", ["sum", "lex"]], ["add", "theorem", "inl_lt_inl_iff", ["sum", "lex"]], ["add", "theorem", "inl_lt_inr", ["sum", "lex"]], ["add", "theorem", "inl_mono", ["sum", "lex"]], ["add", "theorem", "inl_strict_mono", ["sum", "lex"]], ["add", "theorem", "inr_le_inr_iff", ["sum", "lex"]], ["add", "theorem", "inr_lt_inr_iff", ["sum", "lex"]], ["add", "theorem", "inr_mono", ["sum", "lex"]], ["add", "theorem", "inr_strict_mono", ["sum", "lex"]], ["add", "theorem", "inr_top", ["sum", "lex"]], ["add", "theorem", "le_def", ["sum", "lex"]], ["add", "theorem", "lt_def", ["sum", "lex"]], ["add", "theorem", "not_inr_le_inl", ["sum", "lex"]], ["add", "theorem", "not_inr_lt_inl", ["sum", "lex"]], ["add", "theorem", "to_lex_le_to_lex", ["sum", "lex"]], ["add", "theorem", "to_lex_lt_to_lex", ["sum", "lex"]], ["add", "theorem", "to_lex_mono", ["sum", "lex"]], ["add", "theorem", "to_lex_strict_mono", ["sum", "lex"]], ["add", "theorem", "refl", ["sum", "lift_rel"]], ["add", "theorem", "trans", ["sum", "lift_rel"]], ["add", "theorem", "lt_def", ["sum"]], ["add", "theorem", "no_bot_order_iff", ["sum"]], ["add", "theorem", "no_top_order_iff", ["sum"]], ["add", "theorem", "not_inl_le_inr", ["sum"]], ["add", "theorem", "not_inl_lt_inr", ["sum"]], ["add", "theorem", "not_inr_le_inl", ["sum"]], ["add", "theorem", "not_inr_lt_inl", ["sum"]], ["add", "theorem", "swap_le_swap_iff", ["sum"]], ["add", "theorem", "swap_lt_swap_iff", ["sum"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "imp3", ["or"]]]}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": [["mod", "def", "of_lex", []], ["mod", "def", "to_lex", []]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "antisymm_of", []]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/induction.lean", "newPath": "src/tactic/induction.lean", "changes": []}]}, {"timestamp": 1641600882, "sha": "303e77c8", "message": "feat(topology/metric_space/hausdorff_distance): make iffs (#11288)\n* Make `exists_edist_lt_of_inf_edist_lt` and `exists_dist_lt_of_inf_edist_lt` iffs. Rename to `inf_[e]dist_lt_iff`.\n* Simplify some proofs", "changes": [{"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["del", "theorem", "exists_edist_lt_of_inf_edist_lt", ["emetric"]], ["add", "theorem", "inf_edist_lt_iff", ["emetric"]], ["del", "theorem", "exists_dist_lt_of_inf_dist_lt", ["metric"]], ["add", "theorem", "inf_dist_lt_iff", ["metric"]]]}]}, {"timestamp": 1641579713, "sha": "5cbfddd3", "message": "feat(data/finset/sym): Symmetric powers of a finset (#11142)\nThis defines `finset.sym` and `finset.sym2`, which are the `finset` analogs of `sym` and `sym2`, in a new file `data.finset.sym`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "disjoint_filter_filter_neg", ["finset"]]]}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": [["add", "theorem", "diag_union_off_diag", ["finset"]], ["add", "theorem", "disjoint_diag_off_diag", ["finset"]], ["add", "theorem", "product_eq_empty", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/sym.lean", "changes": [["add", "theorem", "diag_mem_sym2_iff", ["finset"]], ["add", "theorem", "eq_empty_of_sym_eq_empty", ["finset"]], ["add", "theorem", "image_diag_union_image_off_diag", ["finset"]], ["add", "theorem", "is_diag_mk_of_mem_diag", ["finset"]], ["add", "theorem", "mem_sym2_iff", ["finset"]], ["add", "theorem", "mem_sym_iff", ["finset"]], ["add", "theorem", "mk_mem_sym2_iff", ["finset"]], ["add", "theorem", "not_is_diag_mk_of_mem_off_diag", ["finset"]], ["add", "theorem", "repeat_mem_sym", ["finset"]], ["add", "theorem", "sym2_empty", ["finset"]], ["add", "theorem", "sym2_eq_empty", ["finset"]], ["add", "theorem", "sym2_mono", ["finset"]], ["add", "theorem", "sym2_nonempty", ["finset"]], ["add", "theorem", "sym2_singleton", ["finset"]], ["add", "theorem", "sym2_univ", ["finset"]], ["add", "theorem", "sym_empty", ["finset"]], ["add", "theorem", "sym_eq_empty", ["finset"]], ["add", "theorem", "sym_inter", ["finset"]], ["add", "theorem", "sym_mono", ["finset"]], ["add", "theorem", "sym_nonempty", ["finset"]], ["add", "theorem", "sym_singleton", ["finset"]], ["add", "theorem", "sym_succ", ["finset"]], ["add", "theorem", "sym_union", ["finset"]], ["add", "theorem", "sym_univ", ["finset"]], ["add", "theorem", "sym_zero", ["finset"]]]}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["add", "theorem", "coe_repeat", ["sym"]], ["add", "theorem", "eq_repeat_iff", ["sym"]], ["add", "theorem", "mem_repeat", ["sym"]]]}, {"oldPath": "src/data/sym/card.lean", "newPath": "src/data/sym/card.lean", "changes": [["add", "theorem", "card_sym2", ["finset"]], ["mod", "theorem", "card_image_diag", ["sym2"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["add", "theorem", "ball", ["sym2"]], ["add", "theorem", "out_fst_mem", ["sym2"]], ["add", "theorem", "out_snd_mem", ["sym2"]]]}]}, {"timestamp": 1641579712, "sha": "a8d37c1d", "message": "feat(data/nat/factorization): Defining `factorization` (#10540)\nDefining `factorization` as a `finsupp`, as discussed in\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Prime.20factorizations\nand \nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Proof.20of.20Euler's.20product.20formula.20for.20totient\nThis is the first of a series of PRs to build up the infrastructure needed for the proof of Euler's product formula for the totient function.", "changes": [{"oldPath": null, "newPath": "src/data/nat/factorization.lean", "changes": [["add", "theorem", "factor_iff_mem_factorization", ["nat"]], ["add", "theorem", "factorization_eq_count", ["nat"]], ["add", "theorem", "factorization_eq_zero_iff", ["nat"]], ["add", "theorem", "factorization_inj", ["nat"]], ["add", "theorem", "factorization_mul", ["nat"]], ["add", "theorem", "factorization_one", ["nat"]], ["add", "theorem", "factorization_pow", ["nat"]], ["add", "theorem", "factorization_zero", ["nat"]], ["add", "theorem", "factorization", ["nat", "prime"]], ["add", "theorem", "factorization_pow", ["nat", "prime"]], ["add", "theorem", "support_factorization", ["nat"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "associated_of_factorization_eq", []], ["add", "theorem", "factorization_eq_count", []], ["add", "theorem", "factorization_mul", []], ["add", "theorem", "factorization_one", []], ["add", "theorem", "factorization_pow", []], ["add", "theorem", "factorization_zero", []], ["add", "theorem", "support_factorization", []]]}]}, {"timestamp": 1641579710, "sha": "3b02ad77", "message": "feat(topology/homotopy/equiv): Add homotopy equivalences between topological spaces (#10529)", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "comp_id", ["continuous_map"]], ["add", "theorem", "id_comp", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/homotopy/equiv.lean", "changes": [["add", "theorem", "coe_inv_fun", ["continuous_map", "homotopy_equiv"]], ["add", "theorem", "continuous", ["continuous_map", "homotopy_equiv"]], ["add", "def", "refl", ["continuous_map", "homotopy_equiv"]], ["add", "def", "apply", ["continuous_map", "homotopy_equiv", "simps"]], ["add", "def", "symm_apply", ["continuous_map", "homotopy_equiv", "simps"]], ["add", "def", "symm", ["continuous_map", "homotopy_equiv"]], ["add", "theorem", "symm_trans", ["continuous_map", "homotopy_equiv"]], ["add", "theorem", "to_fun_eq_coe", ["continuous_map", "homotopy_equiv"]], ["add", "def", "trans", ["continuous_map", "homotopy_equiv"]], ["add", "structure", "homotopy_equiv", ["continuous_map"]], ["add", "theorem", "coe_to_homotopy_equiv", ["homeomorph"]], ["add", "theorem", "refl_to_homotopy_equiv", ["homeomorph"]], ["add", "theorem", "symm_to_homotopy_equiv", ["homeomorph"]], ["add", "def", "to_homotopy_equiv", ["homeomorph"]], ["add", "theorem", "trans_to_homotopy_equiv", ["homeomorph"]]]}]}, {"timestamp": 1641572753, "sha": "13e99c70", "message": "feat(algebra,linear_algebra,ring_theory): more is_central_scalar instances (#11297)\nThis provides new transitive scalar actions:\n* on `lie_submodule R L M` that match the actions on `submodule R M`\n* on quotients by `lie_submodule R L M` that match the actions on quotients by `submodule R M`\nThe rest of the instances in this PR live in `Prop` so do not define any further actions.\nThis also fixes some overly verbose instance names.", "changes": [{"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": []}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}]}, {"timestamp": 1641572752, "sha": "b8f5d0ac", "message": "chore(category_theory/abelian/basic): abelian categories have finite limits and finite colimits. (#11271)", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}]}, {"timestamp": 1641565460, "sha": "b4303168", "message": "chore(topology/algebra/module/basic): add continuous_linear_map.is_central_scalar (#11291)", "changes": [{"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1641565457, "sha": "3b7a783f", "message": "feat(topology/*): Gluing topological spaces (#9864)", "changes": [{"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/concrete_category/elementwise.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/concrete_category.lean", "newPath": "src/category_theory/limits/shapes/concrete_category.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "equivalence", ["inv_image"]]]}, {"oldPath": null, "newPath": "src/topology/gluing.lean", "changes": [["add", "theorem", "eqv_gen_of_π_eq", ["Top", "glue_data"]], ["add", "def", "from_open_subsets_glue", ["Top", "glue_data"]], ["add", "theorem", "from_open_subsets_glue_injective", ["Top", "glue_data"]], ["add", "theorem", "from_open_subsets_glue_is_open_map", ["Top", "glue_data"]], ["add", "theorem", "from_open_subsets_glue_open_embedding", ["Top", "glue_data"]], ["add", "theorem", "image_inter", ["Top", "glue_data"]], ["add", "theorem", "is_open_iff", ["Top", "glue_data"]], ["add", "def", "mk'", ["Top", "glue_data"]], ["add", "def", "t'", ["Top", "glue_data", "mk_core"]], ["add", "theorem", "t_inv", ["Top", "glue_data", "mk_core"]], ["add", "structure", "mk_core", ["Top", "glue_data"]], ["add", "def", "of_open_subsets", ["Top", "glue_data"]], ["add", "def", "open_cover_glue_homeo", ["Top", "glue_data"]], ["add", "theorem", "open_image_open", ["Top", "glue_data"]], ["add", "theorem", "preimage_image_eq_image'", ["Top", "glue_data"]], ["add", "theorem", "preimage_image_eq_image", ["Top", "glue_data"]], ["add", "theorem", "preimage_range", ["Top", "glue_data"]], ["add", "theorem", "range_from_open_subsets_glue", ["Top", "glue_data"]], ["add", "def", "rel", ["Top", "glue_data"]], ["add", "theorem", "rel_equiv", ["Top", "glue_data"]], ["add", "theorem", "ι_eq_iff_rel", ["Top", "glue_data"]], ["add", "theorem", "ι_from_open_subsets_glue", ["Top", "glue_data"]], ["add", "theorem", "ι_injective", ["Top", "glue_data"]], ["add", "theorem", "ι_jointly_surjective", ["Top", "glue_data"]], ["add", "theorem", "ι_open_embedding", ["Top", "glue_data"]], ["add", "theorem", "π_surjective", ["Top", "glue_data"]], ["add", "structure", "glue_data", ["Top"]]]}]}, {"timestamp": 1641559421, "sha": "6fb638b3", "message": "feat(*): add lemmas, golf (#11294)\n### New lemmas\n* `function.mul_support_nonempty_iff` and `function.support_nonempty_iff`;\n* `set.infinite_union`;\n* `nat.exists_subseq_of_forall_mem_union` (to be used in an upcoming mass golfing of `is_pwo`/`is_wf`);\n* `hahn_series.coeff_inj`, `hahn_series.coeff_injective`, `hahn_series.coeff_fun_eq_zero_iff`, `hahn_series.support_eq_empty_iff`;\n* `nat.coe_order_embedding_of_set` (`simp` + `rfl`);\n* `nat.subtype.of_nat_range`, `nat.subtype.coe_comp_of_nat_range`.\n### Golfed proofs\n* `set.countable.prod`;\n* `nat.order_embedding_of_set_range`;\n* `hahn-series.support_nonempty_iff`;\n### Renamed\n* `set.finite.union_iff` → `set.finite_union`, add `@[simp]` attr;\n* `set.finite.diff` → `set.finite.of_diff`, drop 1 arg;", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "mul_support_nonempty_iff", ["function"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": [["add", "theorem", "coe_comp_of_nat_range", ["nat", "subtype"]], ["add", "theorem", "of_nat_range", ["nat", "subtype"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "diff", ["set", "finite"]], ["add", "theorem", "of_diff", ["set", "finite"]], ["del", "theorem", "union_iff", ["set", "finite"]], ["add", "theorem", "finite_union", ["set"]], ["add", "theorem", "infinite_union", ["set"]]]}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": [["add", "theorem", "coe_order_embedding_of_set", ["nat"]], ["add", "theorem", "exists_subseq_of_forall_mem_union", ["nat"]], ["mod", "theorem", "order_embedding_of_set_apply", ["nat"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "coeff_fun_eq_zero_iff", ["hahn_series"]], ["add", "theorem", "coeff_inj", ["hahn_series"]], ["add", "theorem", "coeff_injective", ["hahn_series"]], ["mod", "def", "support", ["hahn_series"]], ["add", "theorem", "support_eq_empty_iff", ["hahn_series"]], ["mod", "theorem", "support_nonempty_iff", ["hahn_series"]], ["mod", "theorem", "support_zero", ["hahn_series"]], ["mod", "theorem", "zero_coeff", ["hahn_series"]]]}]}, {"timestamp": 1641497648, "sha": "0b966303", "message": "feat(algebra/{monoid_algebra/basic,free_non_unital_non_assoc_algebra,lie/free}): generalize typeclasses (#11283)\nThis fixes a number of missing or problematic typeclasses:\n* The smul typeclasses on `monoid_algebra` had overly strong assumptions\n* `add_comm_group (monoid_algebra k G)` was missing.\n* `monoid_algebra` had diamonds in its int-module structures, which were different between the one inferred from `ring` and `add_group`.\n* `monoid_algebra` was missing an instance of the new `non_unital_non_assoc_ring`.\n* `free_non_unital_non_assoc_algebra` was missing a lot of smul typeclasses and transitive module structures that it should inherit from `monoid_algebra`. Since every instance should just be inherited, we change `free_non_unital_non_assoc_algebra` to an abbreviation.\n* `free_lie_algebra` had diamonds in its int-module and nat-module structures.\n* `free_lie_algebra` was missing transitive module structures.\nThis also golfs some proofs about `free_non_unital_non_assoc_algebra`, and removes the `irreducible` attributes since these just make some obvious proofs more awkward.", "changes": [{"oldPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "changes": [["mod", "def", "free_non_unital_non_assoc_algebra", []]]}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": [["mod", "theorem", "add_left", ["free_lie_algebra", "rel"]], ["mod", "theorem", "neg", ["free_lie_algebra", "rel"]], ["add", "theorem", "smul_of_tower", ["free_lie_algebra", "rel"]], ["add", "theorem", "sub_left", ["free_lie_algebra", "rel"]], ["add", "theorem", "sub_right", ["free_lie_algebra", "rel"]]]}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}]}, {"timestamp": 1641491515, "sha": "d0bf8bd2", "message": "feat(set_theory/ordinal): `ordinal` is a successor order (#11284)\nThis provides the `succ_order` instance for `ordinal`.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1641491512, "sha": "5893fbfc", "message": "feat(data/polynomial/monic): add two lemmas on degrees of monic polynomials (#11259)\nThis PR is a step in the direction of simplifying #11139.\nThe two lemmas involve computing the degree of a power of monic polynomials.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2311139.20taylor.20sum.20and.20nat_degree_taylor)", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "nat_degree_pow", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_pow_X_add_C", ["polynomial"]]]}]}, {"timestamp": 1641480071, "sha": "9b39ab2a", "message": "feat(algebra/group/freiman): Freiman homomorphisms (#10497)\nThis defines Freiman homomorphisms, which are maps preserving products of `n` elements (but only in the codomain. One can never get back to the domain).\nThis is useful in additive combinatorics.", "changes": [{"oldPath": null, "newPath": "src/algebra/group/freiman.lean", "changes": [["add", "structure", "add_freiman_hom", []], ["add", "theorem", "cancel_left_on", ["freiman_hom"]], ["add", "theorem", "cancel_right", ["freiman_hom"]], ["add", "theorem", "cancel_right_on", ["freiman_hom"]], ["add", "theorem", "coe_comp", ["freiman_hom"]], ["add", "theorem", "coe_mk", ["freiman_hom"]], ["add", "theorem", "comp_apply", ["freiman_hom"]], ["add", "theorem", "comp_assoc", ["freiman_hom"]], ["add", "theorem", "comp_id", ["freiman_hom"]], ["add", "def", "const", ["freiman_hom"]], ["add", "theorem", "const_apply", ["freiman_hom"]], ["add", "theorem", "const_comp", ["freiman_hom"]], ["add", "theorem", "div_apply", ["freiman_hom"]], ["add", "theorem", "div_comp", ["freiman_hom"]], ["add", "theorem", "ext", ["freiman_hom"]], ["add", "def", "freiman_hom_class_of_le", ["freiman_hom"]], ["add", "theorem", "id_comp", ["freiman_hom"]], ["add", "theorem", "inv_apply", ["freiman_hom"]], ["add", "theorem", "inv_comp", ["freiman_hom"]], ["add", "theorem", "mk_coe", ["freiman_hom"]], ["add", "theorem", "mul_apply", ["freiman_hom"]], ["add", "theorem", "mul_comp", ["freiman_hom"]], ["add", "theorem", "one_apply", ["freiman_hom"]], ["add", "theorem", "one_comp", ["freiman_hom"]], ["add", "def", "to_freiman_hom", ["freiman_hom"]], ["add", "theorem", "to_freiman_hom_coe", ["freiman_hom"]], ["add", "theorem", "to_freiman_hom_injective", ["freiman_hom"]], ["add", "theorem", "to_fun_eq_coe", ["freiman_hom"]], ["add", "structure", "freiman_hom", []], ["add", "theorem", "map_prod_eq_map_prod", []], ["add", "theorem", "map_prod_eq_map_prod_of_le", []], ["add", "def", "to_freiman_hom", ["monoid_hom"]], ["add", "theorem", "to_freiman_hom_coe", ["monoid_hom"]], ["add", "theorem", "to_freiman_hom_injective", ["monoid_hom"]]]}, {"oldPath": "src/data/fun_like.lean", "newPath": "src/data/fun_like.lean", "changes": []}]}, {"timestamp": 1641472796, "sha": "d2428fae", "message": "feat(ring_theory/localization): Localization is the localization of localization. (#11145)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "exists_image_iff", ["set"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_localization_of_is_exists_mul_mem", ["is_localization"]], ["add", "theorem", "is_localization_of_submonoid_le", ["is_localization"]], ["add", "def", "localization_algebra_of_submonoid_le", ["is_localization"]], ["add", "theorem", "localization_is_scalar_tower_of_submonoid_le", ["is_localization"]]]}]}, {"timestamp": 1641465564, "sha": "54c2567d", "message": "feat(category_theory/sites): The pushforward pullback adjunction (#11273)", "changes": [{"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": [["add", "theorem", "compatible_preserving_of_flat", ["category_theory"]], ["add", "def", "pullback_pushforward_adjunction", ["category_theory", "sites"]], ["add", "def", "pushforward", ["category_theory", "sites"]]]}]}, {"timestamp": 1641465563, "sha": "7af5e86c", "message": "feat(algebra/big_operators/multiset): Multiset product under some usual maps (#10907)\nProduct of the image of a multiset under `λ a, (f a)⁻¹`, `λ a, f a / g a`, `λ a, f a ^ n` (for `n` in `ℕ` and `ℤ`).", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_inv_distrib", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/multiset.lean", "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["mod", "theorem", "pow_count", ["multiset"]], ["add", "theorem", "prod_hom'", ["multiset"]], ["add", "theorem", "prod_hom₂", ["multiset"]], ["add", "theorem", "prod_map_div", ["multiset"]], ["add", "theorem", "prod_map_div₀", ["multiset"]], ["add", "theorem", "prod_map_inv'", ["multiset"]], ["add", "theorem", "prod_map_inv₀", ["multiset"]], ["mod", "theorem", "prod_map_mul", ["multiset"]], ["mod", "theorem", "prod_map_one", ["multiset"]], ["add", "theorem", "prod_map_pow", ["multiset"]], ["add", "theorem", "prod_map_zpow", ["multiset"]], ["add", "theorem", "prod_map_zpow₀", ["multiset"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "def", "div_monoid_hom", []], ["add", "def", "div_monoid_with_zero_hom", []], ["add", "def", "mul_monoid_hom", []], ["add", "def", "mul_monoid_with_zero_hom", []], ["add", "def", "mul_mul_hom", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "def", "inv_monoid_with_zero_hom", []]]}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": [["add", "def", "smul_monoid_with_zero_hom", []]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "foldl_hom₂", ["list"]], ["add", "theorem", "foldr_hom₂", ["list"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["mod", "theorem", "prod_hom_rel", ["list"]], ["add", "theorem", "prod_hom₂", ["list"]]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": [["add", "def", "smul_monoid_hom", []], ["add", "def", "smul_mul_hom", []]]}]}, {"timestamp": 1641463050, "sha": "c391512e", "message": "feat(topology/metric_space/kuratowski): make the Kuratowski embedding have codomain the \"true\" ℓ^∞(ℕ) (#11280)\n(Previously, we didn't have the \"true\" ℓ^∞(ℕ), so we used the space of bounded continuous functions on `ℕ` equipped with the discrete topology.)", "changes": [{"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": [["del", "def", "ℓ_infty_ℝ", []]]}]}, {"timestamp": 1641455741, "sha": "f07f87e9", "message": "feat(ring_theory/power_series/basic): algebra, solving TODOs (#11267)\n`algebra (mv_polynomial σ R) (mv_power_series σ A)`\n`algebra (mv_power_series σ R) (mv_power_series σ A)`\n`algebra (polynomial R) (power_series A)`\n`algebra (power_series R) (power_series A)`\n`coe_to_mv_power_series.alg_hom`\n`coe_to_power_series.alg_hom`\nAnd API about the injectivity of coercions", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "algebra_map_apply", ["mv_polynomial"]], ["mod", "theorem", "coe_add", ["mv_polynomial"]], ["add", "theorem", "coe_def", ["mv_polynomial"]], ["add", "theorem", "coe_eq_one_iff", ["mv_polynomial"]], ["add", "theorem", "coe_eq_zero_iff", ["mv_polynomial"]], ["add", "theorem", "coe_inj", ["mv_polynomial"]], ["add", "theorem", "coe_injective", ["mv_polynomial"]], ["mod", "theorem", "coe_mul", ["mv_polynomial"]], ["add", "def", "alg_hom", ["mv_polynomial", "coe_to_mv_power_series"]], ["add", "theorem", "alg_hom_apply", ["mv_polynomial", "coe_to_mv_power_series"]], ["add", "theorem", "ring_hom_apply", ["mv_polynomial", "coe_to_mv_power_series"]], ["mod", "theorem", "coeff_coe", ["mv_polynomial"]], ["add", "theorem", "algebra_map_apply''", ["mv_power_series"]], ["add", "theorem", "algebra_map_apply'", ["mv_power_series"]], ["mod", "theorem", "coe_add", ["polynomial"]], ["add", "theorem", "coe_def", ["polynomial"]], ["add", "theorem", "coe_eq_one_iff", ["polynomial"]], ["add", "theorem", "coe_eq_zero_iff", ["polynomial"]], ["add", "theorem", "coe_inj", ["polynomial"]], ["add", "theorem", "coe_injective", ["polynomial"]], ["mod", "theorem", "coe_mul", ["polynomial"]], ["add", "def", "alg_hom", ["polynomial", "coe_to_power_series"]], ["add", "theorem", "alg_hom_apply", ["polynomial", "coe_to_power_series"]], ["mod", "def", "ring_hom", ["polynomial", "coe_to_power_series"]], ["add", "theorem", "ring_hom_apply", ["polynomial", "coe_to_power_series"]], ["mod", "theorem", "coeff_coe", ["polynomial"]], ["add", "theorem", "algebra_map_apply''", ["power_series"]], ["add", "theorem", "algebra_map_apply'", ["power_series"]], ["add", "theorem", "map_C", ["power_series"]], ["add", "theorem", "map_X", ["power_series"]]]}]}, {"timestamp": 1641455740, "sha": "69521729", "message": "feat(data/nat/digits): digits_len (#11187)\nVia a new `data.nat.log` import.\nAlso unprivate `digits_eq_cons_digits_div`.\nThe file needs a refactor to make the names more mathlib-like,\notherwise I would have named it `length_digits`.", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "digits_eq_cons_digits_div", ["nat"]], ["add", "theorem", "digits_len", ["nat"]]]}]}, {"timestamp": 1641452728, "sha": "b3260f37", "message": "feat(measure_theory/constructions/borel_space): new lemma tendsto_measure_cthickening (#11009)\nProve that, when `r` tends to `0`, the measure of the `r`-thickening of a set `s` tends to the measure of `s`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "tendsto_measure_cthickening", []], ["add", "theorem", "tendsto_measure_cthickening_of_is_closed", []], ["add", "theorem", "tendsto_measure_cthickening_of_is_compact", []]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "tendsto_measure_bInter_gt", ["measure_theory"]]]}]}, {"timestamp": 1641426335, "sha": "9f28b5d4", "message": "chore(ci): update some workflows to use custom bot token (#11274)", "changes": [{"oldPath": ".github/workflows/add_label_from_review.yml", "newPath": ".github/workflows/add_label_from_review.yml", "changes": []}, {"oldPath": ".github/workflows/dependent-issues.yml", "newPath": ".github/workflows/dependent-issues.yml", "changes": []}, {"oldPath": ".github/workflows/merge_conflicts.yml", "newPath": ".github/workflows/merge_conflicts.yml", "changes": []}]}, {"timestamp": 1641426333, "sha": "e7189651", "message": "feat(topology/uniform_space/compact_convergence): when the domain is compact, compact convergence is just uniform convergence (#11262)", "changes": [{"oldPath": "src/topology/uniform_space/compact_convergence.lean", "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": [["add", "theorem", "has_basis_compact_convergence_uniformity_of_compact", ["continuous_map"]], ["add", "theorem", "tendsto_iff_tendsto_uniformly", ["continuous_map"]]]}]}, {"timestamp": 1641426332, "sha": "a7611b2c", "message": "chore(*): notation for `units` (#11236)", "changes": [{"oldPath": "counterexamples/direct_sum_is_internal.lean", "newPath": "counterexamples/direct_sum_is_internal.lean", "changes": [["mod", "theorem", "one_ne_neg_one", ["units_int"]], ["mod", "def", "with_sign", []]]}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["mod", "theorem", "smul_mem_smul_iff", ["spectrum"]], ["mod", "theorem", "unit_mem_mul_iff_mem_swap_mul", ["spectrum"]], ["mod", "theorem", "unit_smul_eq_smul", ["spectrum"]]]}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "def", "associated", []], ["mod", "theorem", "coe_unit_eq_one", ["associates"]], ["mod", "theorem", "units_eq_one", ["associates"]], ["mod", "theorem", "unit_associated_one", []], ["mod", "theorem", "units_eq_one", []]]}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "coe_prod", ["units"]]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": []}, {"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": [["mod", "theorem", "map_units_inv", ["ring_hom"]]]}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["mod", "theorem", "exists_eq_pow_of_mul_eq_pow", []], ["mod", "theorem", "lcm_units_coe_left", []], ["mod", "theorem", "lcm_units_coe_right", []], ["mod", "theorem", "normalize_coe_units", []]]}, {"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["mod", "def", "is_conj", []]]}, {"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["mod", "theorem", "coe_op_equiv_symm", ["units"]], ["mod", "theorem", "coe_unop_op_equiv", ["units"]], ["mod", "def", "op_equiv", ["units"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "def", "embed_product", []], ["mod", "def", "prod_units", ["mul_equiv"]]]}, {"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": [["mod", "theorem", "units_coe", ["semiconj_by"]], ["mod", "theorem", "units_coe_iff", ["semiconj_by"]], ["mod", "theorem", "units_inv_right", ["semiconj_by"]], ["mod", "theorem", "units_inv_right_iff", ["semiconj_by"]], ["mod", "theorem", "units_inv_symm_left", ["semiconj_by"]], ["mod", "theorem", "units_inv_symm_left_iff", ["semiconj_by"]], ["mod", "theorem", "units_of_coe", ["semiconj_by"]], ["mod", "theorem", "mk_semiconj_by", ["units"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "def", "divp", []], ["mod", "theorem", "divp_assoc", []], ["mod", "theorem", "divp_divp_eq_divp_mul", []], ["mod", "theorem", "divp_eq_divp_iff", []], ["mod", "theorem", "divp_eq_iff_mul_eq", []], ["mod", "theorem", "divp_eq_one_iff_eq", []], ["mod", "theorem", "divp_inv", []], ["mod", "theorem", "divp_left_inj", []], ["mod", "theorem", "divp_mul_cancel", []], ["mod", "theorem", "divp_mul_divp", []], ["mod", "theorem", "divp_self", []], ["mod", "def", "is_unit", []], ["mod", "theorem", "mul_divp_cancel", []], ["mod", "theorem", "one_divp", []], ["mod", "theorem", "coe_eq_one", ["units"]], ["mod", "theorem", "coe_one", ["units"]], ["mod", "def", "copy", ["units"]], ["mod", "theorem", "copy_eq", ["units"]], ["mod", "theorem", "eq_iff", ["units"]], ["mod", "theorem", "ext_iff", ["units"]], ["mod", "theorem", "inv_eq_coe_inv", ["units"]], ["mod", "theorem", "inv_eq_of_mul_eq_one", ["units"]], ["mod", "theorem", "inv_mul_cancel_left", ["units"]], ["mod", "theorem", "inv_mul_cancel_right", ["units"]], ["mod", "theorem", "inv_mul_of_eq", ["units"]], ["mod", "theorem", "inv_unique", ["units"]], ["mod", "theorem", "is_unit_mul_units", ["units"]], ["mod", "theorem", "is_unit_units_mul", ["units"]], ["mod", "theorem", "mk_coe", ["units"]], ["mod", "theorem", "mul_inv_cancel_left", ["units"]], ["mod", "theorem", "mul_inv_cancel_right", ["units"]], ["mod", "theorem", "mul_inv_of_eq", ["units"]], ["mod", "theorem", "mul_left_inj", ["units"]], ["mod", "theorem", "mul_right_inj", ["units"]], ["mod", "def", "coe", ["units", "simps"]], ["mod", "def", "coe_inv", ["units", "simps"]]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["mod", "def", "to_hom_units", ["monoid_hom"]], ["mod", "def", "coe_hom", ["units"]], ["mod", "theorem", "coe_hom_apply", ["units"]], ["mod", "theorem", "coe_lift_right", ["units"]], ["mod", "theorem", "coe_map", ["units"]], ["mod", "theorem", "coe_map_inv", ["units"]], ["mod", "def", "lift_right", ["units"]], ["mod", "theorem", "lift_right_inv_mul", ["units"]], ["mod", "def", "map", ["units"]], ["mod", "theorem", "map_id", ["units"]], ["mod", "theorem", "mul_lift_right_inv", ["units"]]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "units_zpow_left", ["commute"]], ["mod", "theorem", "units_zpow_right", ["commute"]], ["mod", "theorem", "units_pow_eq_pow_mod_two", ["int"]], ["mod", "theorem", "units_sq", ["int"]], ["mod", "theorem", "units_zpow_right", ["semiconj_by"]], ["mod", "theorem", "coe_pow", ["units"]], ["mod", "theorem", "coe_zpow", ["units"]], ["mod", "theorem", "conj_pow'", ["units"]], ["mod", "theorem", "conj_pow", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "divp_eq_div", []], ["mod", "theorem", "inverse_unit", ["ring"]], ["mod", "theorem", "coe_inv'", ["units"]], ["mod", "theorem", "exists_iff_ne_zero", ["units"]], ["mod", "theorem", "inv_mul'", ["units"]], ["mod", "def", "mk0", ["units"]], ["mod", "theorem", "mk0_coe", ["units"]], ["mod", "theorem", "mul_inv'", ["units"]], ["mod", "theorem", "mul_left_eq_zero", ["units"]], ["mod", "theorem", "mul_right_eq_zero", ["units"]], ["mod", "theorem", "ne_zero", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["mod", "theorem", "coe_zpow₀", ["units"]]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "theorem", "inv_of_units", []], ["mod", "def", "unit_of_invertible", []], ["mod", "def", "invertible", ["units"]]]}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": [["mod", "theorem", "mem_skew_adjoint_matrices_lie_subalgebra_unit_smul", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "neg_smul", ["units"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["mod", "theorem", "coe_le_coe", ["units"]], ["mod", "theorem", "coe_lt_coe", ["units"]], ["mod", "theorem", "max_coe", ["units"]], ["mod", "theorem", "min_coe", ["units"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["mod", "theorem", "inv_neg", ["units"]], ["mod", "theorem", "inv_pos", ["units"]]]}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["mod", "theorem", "zero_lt", ["units"]]]}, {"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": [["mod", "theorem", "is_regular", ["units"]]]}, {"oldPath": "src/algebra/regular/smul.lean", "newPath": "src/algebra/regular/smul.lean", "changes": [["mod", "theorem", "is_smul_regular", ["units"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "inv_eq_self_iff", ["units"]]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["mod", "theorem", "coe_star", ["units"]], ["mod", "theorem", "coe_star_inv", ["units"]]]}, {"oldPath": "src/algebraic_geometry/EllipticCurve.lean", "newPath": "src/algebraic_geometry/EllipticCurve.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["mod", "theorem", "const_mul_right'", ["asymptotics", "is_O_with"]], ["mod", "theorem", "is_O_with_self_const_mul'", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "differentiable_at_inverse", []], ["mod", "theorem", "fderiv_inverse", []], ["mod", "theorem", "has_fderiv_at_ring_inverse", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["mod", "theorem", "times_cont_diff_at_ring_inverse", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/int.lean", "newPath": "src/analysis/normed_space/int.lean", "changes": [["mod", "theorem", "nnnorm_coe_units", ["int"]], ["mod", "theorem", "norm_coe_units", ["int"]]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": [["mod", "theorem", "inverse_add", ["normed_ring"]], ["mod", "theorem", "inverse_add_norm", ["normed_ring"]], ["mod", "theorem", "inverse_add_norm_diff_first_order", ["normed_ring"]], ["mod", "theorem", "inverse_add_norm_diff_nth_order", ["normed_ring"]], ["mod", "theorem", "inverse_add_norm_diff_second_order", ["normed_ring"]], ["mod", "theorem", "inverse_add_nth_order", ["normed_ring"]], ["mod", "theorem", "inverse_continuous_at", ["normed_ring"]], ["mod", "def", "add", ["units"]], ["mod", "theorem", "is_open_map_coe", ["units"]], ["mod", "def", "one_sub", ["units"]], ["mod", "theorem", "open_embedding_coe", ["units"]], ["mod", "def", "unit_of_nearby", ["units"]]]}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["mod", "def", "units_End_equiv_Aut", ["category_theory", "Aut"]]]}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": [["mod", "def", "to_Aut", ["units"]], ["mod", "theorem", "to_Aut_hom", ["units"]], ["mod", "theorem", "to_Aut_inv", ["units"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["mod", "def", "to_units", []], ["mod", "theorem", "coe_inv", ["units"]], ["mod", "def", "map_equiv", ["units"]], ["mod", "def", "mul_left", ["units"]], ["mod", "theorem", "mul_left_bijective", ["units"]], ["mod", "theorem", "mul_left_symm", ["units"]], ["mod", "def", "mul_right", ["units"]], ["mod", "theorem", "mul_right_bijective", ["units"]], ["mod", "theorem", "mul_right_symm", ["units"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "card_units", ["fintype"]], ["mod", "theorem", "card_units_int", ["fintype"]], ["mod", "def", "units_equiv_ne_zero", []], ["mod", "theorem", "univ", ["units_int"]]]}, {"oldPath": "src/data/int/absolute_value.lean", "newPath": "src/data/int/absolute_value.lean", "changes": [["mod", "theorem", "map_units_int", ["absolute_value"]], ["mod", "theorem", "map_units_int_cast", ["absolute_value"]], ["mod", "theorem", "map_units_int_smul", ["absolute_value"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "units_coe_mul_self", ["int"]], ["mod", "theorem", "units_eq_one_or", ["int"]], ["mod", "theorem", "units_inv_eq_self", ["int"]], ["mod", "theorem", "units_mul_self", ["int"]], ["mod", "theorem", "units_nat_abs", ["int"]]]}, {"oldPath": "src/data/matrix/rank.lean", "newPath": "src/data/matrix/rank.lean", "changes": [["mod", "theorem", "rank_unit", ["matrix"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "units_eq_one", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["mod", "theorem", "card_units_zmod_lt_sub_one", ["nat"]], ["mod", "theorem", "prime_iff_card_units", ["nat"]], ["mod", "theorem", "card_units_eq_totient", ["zmod"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "coeff_inv_units", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "coeff_coe_units_zero_ne_zero", ["polynomial"]], ["mod", "theorem", "degree_coe_units", ["polynomial"]], ["mod", "theorem", "nat_degree_coe_units", ["polynomial"]], ["mod", "theorem", "units_coeff_zero_smul", ["polynomial"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/real/sign.lean", "newPath": "src/data/real/sign.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["mod", "theorem", "inv_coe_unit", ["zmod"]], ["mod", "def", "unit_of_coprime", ["zmod"]], ["mod", "theorem", "val_coe_unit_coprime", ["zmod"]]]}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": [["mod", "theorem", "coe_is_monoid_hom", ["units"]], ["mod", "theorem", "coe_map'", ["units"]], ["mod", "def", "map'", ["units"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": [["mod", "theorem", "coe_to_order_iso", ["circle_deg1_lift"]], ["mod", "theorem", "coe_to_order_iso_inv", ["circle_deg1_lift"]], ["mod", "theorem", "coe_to_order_iso_symm", ["circle_deg1_lift"]], ["mod", "def", "to_order_iso", ["circle_deg1_lift"]], ["mod", "def", "translate", ["circle_deg1_lift"]], ["mod", "theorem", "translation_number_conj_eq'", ["circle_deg1_lift"]], ["mod", "theorem", "translation_number_conj_eq", ["circle_deg1_lift"]], ["mod", "theorem", "translation_number_units_inv", ["circle_deg1_lift"]], ["mod", "theorem", "translation_number_zpow", ["circle_deg1_lift"]], ["mod", "theorem", "units_apply_inv_apply", ["circle_deg1_lift"]], ["mod", "theorem", "units_coe", ["circle_deg1_lift"]], ["mod", "theorem", "units_inv_apply_apply", ["circle_deg1_lift"]], ["mod", "theorem", "units_semiconj_of_translation_number_eq", ["circle_deg1_lift"]]]}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "prod_univ_units_id_eq_neg_one", ["finite_field"]], ["mod", "theorem", "sum_pow_units", ["finite_field"]], ["mod", "theorem", "card_units", ["zmod"]], ["mod", "theorem", "pow_totient", ["zmod"]], ["mod", "theorem", "units_pow_card_sub_one_eq_one", ["zmod"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "separable_X_pow_sub_C_unit", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "newPath": "src/geometry/manifold/instances/units_of_normed_algebra.lean", "changes": [["mod", "theorem", "chart_at_apply", ["units"]], ["mod", "theorem", "chart_at_source", ["units"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": [["mod", "theorem", "smul_def", ["units"]]]}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "order_of_units", []]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["mod", "theorem", "eq_sign_of_surjective_hom", ["equiv", "perm"]], ["mod", "def", "sign", ["equiv", "perm"]], ["mod", "def", "sign_aux2", ["equiv", "perm"]], ["mod", "def", "sign_aux3", ["equiv", "perm"]], ["mod", "def", "sign_aux", ["equiv", "perm"]], ["mod", "theorem", "sign_surjective", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/inverses.lean", "newPath": "src/group_theory/submonoid/inverses.lean", "changes": [["mod", "theorem", "unit_mem_left_inv", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["mod", "theorem", "coe_homothety_units_mul_hom_apply", ["affine_equiv"]], ["mod", "theorem", "coe_homothety_units_mul_hom_apply_symm", ["affine_equiv"]], ["mod", "def", "equiv_units_affine_map", ["affine_equiv"]], ["mod", "def", "homothety_units_mul_hom", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "smul_of_unit", ["linear_equiv"]], ["mod", "def", "general_linear_group", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "def", "units_smul", ["basis"]], ["mod", "theorem", "units_smul_apply", ["basis"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "det_units_smul", ["basis"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": [["mod", "def", "det", ["matrix", "general_linear_group"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["mod", "theorem", "to_matrix_units_smul", ["basis"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["mod", "theorem", "det_units_conj'", ["matrix"]], ["mod", "theorem", "det_units_conj", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["mod", "theorem", "inv_smul'", ["matrix"]], ["mod", "def", "unit_of_det_invertible", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": [["mod", "theorem", "coe_inv''", ["matrix", "units"]], ["mod", "theorem", "coe_zpow", ["matrix", "units"]]]}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["mod", "theorem", "units_smul_of_neg", ["module", "ray"]], ["mod", "theorem", "units_smul_of_pos", ["module", "ray"]], ["mod", "theorem", "units_inv_smul", []], ["mod", "theorem", "units_smul_eq_neg_iff", []], ["mod", "theorem", "units_smul_eq_self_iff", []]]}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/real.lean", "newPath": "src/linear_algebra/quadratic_form/real.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["mod", "theorem", "trace_conj", ["linear_map"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["mod", "def", "zeta_unit", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": [["mod", "theorem", "units_card", ["lucas_lehmer", "X"]]]}, {"oldPath": "src/number_theory/lucas_primality.lean", "newPath": "src/number_theory/lucas_primality.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": [["mod", "def", "mk_units", ["padic_int"]], ["mod", "theorem", "norm_units", ["padic_int"]], ["mod", "def", "unit_coeff", ["padic_int"]]]}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["mod", "theorem", "euler_criterion_units", ["zmod"]]]}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": [["mod", "def", "class_group", []], ["mod", "theorem", "coe_to_principal_ideal", []], ["mod", "def", "to_principal_ideal", []], ["mod", "theorem", "to_principal_ideal_eq_iff", []]]}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["mod", "theorem", "add_val_def'", ["discrete_valuation_ring"]], ["mod", "theorem", "add_val_def", ["discrete_valuation_ring"]], ["mod", "theorem", "unit_mul_pow_congr_unit", ["discrete_valuation_ring"]]]}, {"oldPath": "src/ring_theory/fintype.lean", "newPath": "src/ring_theory/fintype.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["mod", "theorem", "fg_unit", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["mod", "theorem", "unit_left", ["multiplicity"]], ["mod", "theorem", "unit_right", ["multiplicity"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["mod", "theorem", "coeff_inv_of_unit", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_inv_of_unit", ["mv_power_series"]], ["mod", "def", "inv_of_unit", ["mv_power_series"]], ["mod", "theorem", "mul_inv_of_unit", ["mv_power_series"]], ["mod", "theorem", "coeff_inv_of_unit", ["power_series"]], ["mod", "theorem", "constant_coeff_inv_of_unit", ["power_series"]], ["mod", "def", "inv_of_unit", ["power_series"]], ["mod", "theorem", "mul_inv_of_unit", ["power_series"]]]}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["mod", "theorem", "coeff_inv_units_sub", ["power_series"]], ["mod", "theorem", "constant_coeff_inv_units_sub", ["power_series"]], ["mod", "def", "inv_units_sub", ["power_series"]], ["mod", "theorem", "inv_units_sub_mul_X", ["power_series"]], ["mod", "theorem", "inv_units_sub_mul_sub", ["power_series"]], ["mod", "theorem", "map_inv_units_sub", ["power_series"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "coe_units_iff", ["is_primitive_root"]], ["mod", "theorem", "eq_pow_of_mem_roots_of_unity", ["is_primitive_root"]], ["mod", "theorem", "is_primitive_root_iff'", ["is_primitive_root"]], ["mod", "theorem", "zpowers_eq", ["is_primitive_root"]], ["mod", "theorem", "map_roots_of_unity", []], ["mod", "theorem", "mem_roots_of_unity", []], ["mod", "theorem", "mem_roots_of_unity_iff_mem_nth_roots", []], ["mod", "def", "roots_of_unity", []]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/basic.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": [["mod", "theorem", "mem_pos_monoid", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "map_units_inv", ["add_valuation"]], ["mod", "def", "lt_add_subgroup", ["valuation"]], ["mod", "theorem", "map_units_inv", ["valuation"]], ["mod", "theorem", "unit_map_eq", ["valuation"]]]}, {"oldPath": "src/ring_theory/valuation/integers.lean", "newPath": "src/ring_theory/valuation/integers.lean", "changes": []}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": [["mod", "theorem", "continuous_units_inv", ["topological_division_ring"]], ["mod", "theorem", "units_top_group", ["topological_division_ring"]], ["mod", "theorem", "continuous_coe", ["topological_ring", "induced_units"]], ["mod", "def", "topological_space_units", ["topological_ring"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "def", "prod_units", ["units", "homeomorph"]]]}, {"oldPath": "src/topology/algebra/module/basic.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": [["mod", "def", "of_unit", ["continuous_linear_equiv"]], ["mod", "def", "to_unit", ["continuous_linear_equiv"]], ["mod", "def", "units_equiv", ["continuous_linear_equiv"]], ["mod", "theorem", "units_equiv_apply", ["continuous_linear_equiv"]], ["mod", "def", "units_equiv_aut", ["continuous_linear_equiv"]], ["mod", "theorem", "units_equiv_aut_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "units_equiv_aut_apply_symm", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["mod", "theorem", "continuous_coe", ["units"]]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/valuation.lean", "newPath": "src/topology/algebra/valuation.lean", "changes": [["mod", "theorem", "subgroups_basis", ["valued"]]]}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": [["mod", "theorem", "inversion_estimate", ["valuation"]]]}, {"oldPath": "src/topology/algebra/with_zero_topology.lean", "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": [["mod", "theorem", "directed_lt", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "has_basis_nhds_units", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "nhds_coe_units", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "nhds_zero_of_units", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "singleton_nhds_of_units", ["linear_ordered_comm_group_with_zero"]], ["mod", "theorem", "tendsto_units", ["linear_ordered_comm_group_with_zero"]]]}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1641426331, "sha": "cac4e196", "message": "feat(set_theory/ordinal_arithmetic): Proved characterization of `log` (#11192)\nAs well as a few simple missing lemmas.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "le_mul_left", ["ordinal"]], ["add", "theorem", "le_mul_right", ["ordinal"]], ["add", "theorem", "log_one", ["ordinal"]], ["add", "theorem", "log_power", ["ordinal"]], ["add", "theorem", "log_power_mul_add", ["ordinal"]], ["add", "theorem", "lt_one_iff_zero", ["ordinal"]], ["add", "theorem", "power_mul_add_lt_power_mul_succ", ["ordinal"]], ["add", "theorem", "power_mul_add_lt_power_succ", ["ordinal"]], ["add", "theorem", "power_mul_add_pos", ["ordinal"]]]}]}, {"timestamp": 1641426329, "sha": "b67857e7", "message": "refactor(set_theory/ordinal_arithmetic): Reworked `sup` and `bsup` API (#11048)\nThis PR does two things:\n- It reworks and matches, for the most part, the API for `ordinal.sup` and `ordinal.bsup`.\n- It introduces `ordinal.lsub` and `ordinal.blsub` for (bounded) least strict upper bounds, and proves the expected results.", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "succ_ne_self", ["ordinal"]], ["add", "theorem", "typein_lt_self", ["ordinal"]], ["mod", "theorem", "typein_lt_type", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "def", "blsub", ["ordinal"]], ["add", "theorem", "blsub_eq_lsub", ["ordinal"]], ["add", "theorem", "blsub_id", ["ordinal"]], ["add", "theorem", "blsub_le_bsup_succ", ["ordinal"]], ["add", "theorem", "blsub_le_iff_lt", ["ordinal"]], ["add", "theorem", "blsub_type", ["ordinal"]], ["add", "theorem", "bsup_eq_blsub", ["ordinal"]], ["add", "theorem", "bsup_eq_sup", ["ordinal"]], ["add", "theorem", "bsup_le_blsub", ["ordinal"]], ["add", "theorem", "bsup_not_succ_of_ne_bsup", ["ordinal"]], ["add", "theorem", "bsup_succ_eq_blsub", ["ordinal"]], ["add", "theorem", "bsup_succ_le_blsub", ["ordinal"]], ["mod", "theorem", "bsup", ["ordinal", "is_normal"]], ["add", "def", "lsub", ["ordinal"]], ["add", "theorem", "lsub_eq_blsub", ["ordinal"]], ["add", "theorem", "lsub_le_iff_lt", ["ordinal"]], ["add", "theorem", "lsub_le_sup_succ", ["ordinal"]], ["add", "theorem", "lt_blsub", ["ordinal"]], ["mod", "theorem", "lt_bsup", ["ordinal"]], ["add", "theorem", "lt_bsup_of_limit", ["ordinal"]], ["add", "theorem", "lt_bsup_of_ne_bsup", ["ordinal"]], ["add", "theorem", "lt_lsub", ["ordinal"]], ["add", "theorem", "lt_sup_of_ne_sup", ["ordinal"]], ["add", "theorem", "sup_eq_bsup", ["ordinal"]], ["add", "theorem", "sup_eq_lsub", ["ordinal"]], ["add", "theorem", "sup_le_lsub", ["ordinal"]], ["add", "theorem", "sup_not_succ_of_ne_sup", ["ordinal"]], ["del", "theorem", "sup_succ", ["ordinal"]], ["add", "theorem", "sup_succ_eq_lsub", ["ordinal"]], ["add", "theorem", "sup_succ_le_lsub", ["ordinal"]]]}]}, {"timestamp": 1641421916, "sha": "771d1449", "message": "feat(analysis/normed_space/lp_space): completeness of the lp space on `Π i, E i` (#11094)", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "uniformity_basis_dist", ["normed_group"]]]}, {"oldPath": "src/analysis/normed/group/pointwise.lean", "newPath": "src/analysis/normed/group/pointwise.lean", "changes": [["add", "theorem", "exists_pos_norm_le", ["metric", "bounded"]]]}, {"oldPath": "src/analysis/normed_space/lp_space.lean", "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["add", "theorem", "mem_ℓp_of_tendsto", ["lp"]], ["add", "theorem", "norm_apply_le_norm", ["lp"]], ["add", "theorem", "norm_apply_le_of_tendsto", ["lp"]], ["add", "theorem", "norm_le_of_forall_le'", ["lp"]], ["add", "theorem", "norm_le_of_forall_le", ["lp"]], ["add", "theorem", "norm_le_of_forall_sum_le", ["lp"]], ["add", "theorem", "norm_le_of_tendsto", ["lp"]], ["add", "theorem", "norm_le_of_tsum_le", ["lp"]], ["add", "theorem", "sum_rpow_le_norm_rpow", ["lp"]], ["add", "theorem", "sum_rpow_le_of_tendsto", ["lp"]], ["add", "theorem", "tendsto_lp_of_tendsto_pi", ["lp"]], ["add", "theorem", "uniform_continuous_coe", ["lp"]], ["add", "theorem", "mem_ℓp_gen'", []], ["mod", "theorem", "mem_ℓp_gen", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_at_bot_curry", ["filter"]], ["add", "theorem", "eventually_at_top_curry", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "finite_of_summable_const", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "eventually_eventually", ["cauchy_seq"]]]}]}, {"timestamp": 1641409696, "sha": "8b2d1815", "message": "feat(ring_theory/laurent_series): laurent_series is_fraction_ring over power_series (#11220)", "changes": [{"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "of_le", ["is_localization"]]]}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["add", "theorem", "is_unit_of_mem_non_zero_divisors", []]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "X_ne_zero", ["power_series"]]]}]}, {"timestamp": 1641403698, "sha": "f6dfea67", "message": "feat(measure_theory/integral): Cauchy integral formula for a circle (#10000)", "changes": [{"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": [["add", "theorem", "Ioo_subset_coe", ["box_integral", "box"]], ["add", "theorem", "Union_Ioo_of_tendsto", ["box_integral", "box"]], ["add", "theorem", "exists_seq_mono_tendsto", ["box_integral", "box"]], ["mod", "def", "face", ["box_integral", "box"]], ["add", "theorem", "monotone_face", ["box_integral", "box"]]]}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": [["add", "theorem", "Ioo_ae_eq_Icc", ["box_integral", "box"]], ["add", "theorem", "coe_ae_eq_Icc", ["box_integral", "box"]], ["mod", "theorem", "measurable_set_Icc", ["box_integral", "box"]], ["add", "theorem", "measurable_set_Ioo", ["box_integral", "box"]], ["mod", "theorem", "measurable_set_coe", ["box_integral", "box"]], ["mod", "theorem", "measure_Icc_lt_top", ["box_integral", "box"]], ["mod", "theorem", "measure_coe_lt_top", ["box_integral", "box"]]]}, {"oldPath": null, "newPath": "src/analysis/complex/cauchy_integral.lean", "changes": [["add", "theorem", "circle_integral_div_sub_of_differentiable_on_off_countable", ["complex"]], ["add", "theorem", "circle_integral_eq_zero_of_differentiable_on_off_countable", ["complex"]], ["add", "theorem", "circle_integral_sub_center_inv_smul_eq_of_differentiable_on_annulus_off_countable", ["complex"]], ["add", "theorem", "circle_integral_sub_center_inv_smul_of_differentiable_on_off_countable", ["complex"]], ["add", "theorem", "circle_integral_sub_center_inv_smul_of_differentiable_on_off_countable_of_tendsto", ["complex"]], ["add", "theorem", "circle_integral_sub_inv_smul_of_differentiable_on_off_countable", ["complex"]], ["add", "theorem", "circle_integral_sub_inv_smul_of_differentiable_on_off_countable_aux", ["complex"]], ["add", "theorem", "has_fpower_series_on_ball_of_differentiable_off_countable", ["complex"]], ["add", "theorem", "integral_boundary_rect_eq_zero_of_differentiable_on_off_countable", ["complex"]], ["add", "theorem", "integral_boundary_rect_of_has_fderiv_within_at_real_off_countable", ["complex"]], ["add", "theorem", "two_pi_I_inv_smul_circle_integral_sub_inv_smul_of_differentiable_on_off_countable", ["complex"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["add", "theorem", "pi_Ioo_ae_eq_pi_Ioc", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": [["add", "theorem", "integral_divergence_of_has_fderiv_within_at_off_countable_aux₁", ["measure_theory"]], ["add", "theorem", "integral_divergence_of_has_fderiv_within_at_off_countable_aux₂", ["measure_theory"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "tendsto_nhds_unique_of_frequently_eq", []]]}]}, {"timestamp": 1641399413, "sha": "6bf90418", "message": "doc(analysis/normed/group/basic): show notation in the typeclass docstring (#11260)", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}]}, {"timestamp": 1641399411, "sha": "3ab1c1cb", "message": "feat(algebra/polynomial/big_operators): lemmas about polynomial degree of products (#11258)\nThese already existed for `nat_degree` but `degree` versions seemed missing.\nfrom flt-regular", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["add", "theorem", "degree_list_prod_le", ["polynomial"]], ["add", "theorem", "degree_multiset_prod_le", ["polynomial"]], ["add", "theorem", "degree_prod_le", ["polynomial"]]]}]}, {"timestamp": 1641399410, "sha": "a1f4ac35", "message": "chore(topology): move 3 files to `topology/algebra/module/` (#11242)", "changes": [{"oldPath": "src/analysis/normed_space/banach_steinhaus.lean", "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": []}, {"oldPath": "src/topology/algebra/filter_basis.lean", "newPath": "src/topology/algebra/filter_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/module/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/weak_dual_topology.lean", "newPath": "src/topology/algebra/module/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}]}, {"timestamp": 1641392146, "sha": "9fd7a02d", "message": "feat(category_theory/sites/left_exact): Sheafification is left exact. (#11252)", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/left_exact.lean", "changes": [["add", "def", "cone_comp_evaluation_of_cone_comp_diagram_functor_comp_evaluation", ["category_theory", "grothendieck_topology"]], ["add", "def", "lift_to_diagram_limit_obj", ["category_theory", "grothendieck_topology"]], ["add", "def", "lift_to_plus_obj_limit_obj", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "lift_to_plus_obj_limit_obj_fac", ["category_theory", "grothendieck_topology"]]]}]}, {"timestamp": 1641392144, "sha": "a5807271", "message": "chore(topology/omega_complete_partial_order): golf (#11250)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "set_of_bijective", ["set"]]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["add", "theorem", "inf_continuous'", ["complete_lattice"]]]}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "is_open_sUnion", ["Scott"]]]}]}, {"timestamp": 1641392140, "sha": "802f23cf", "message": "feat(data/fintype/basic): `set_fintype_card_eq_univ_iff` (#11244)\nAdds companion lemma to `set_fintype_card_le_univ`. This PR also moves several `set.to_finset` lemmas earlier in the file.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "to_finset_empty", ["set"]], ["mod", "theorem", "to_finset_eq_empty_iff", ["set"]], ["mod", "def", "set_fintype", []], ["add", "theorem", "set_fintype_card_eq_univ_iff", []], ["mod", "theorem", "set_fintype_card_le_univ", []]]}]}, {"timestamp": 1641392139, "sha": "b27e33a0", "message": "feat(data/{fin/vec_notation, matrix/notation}): `cons_{add,sub,dot_product}_cons` (#11241)\nWhile these can be proved by `simp`, they are not rejected by the simp linter.", "changes": [{"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": [["add", "theorem", "cons_add_cons", ["matrix"]], ["add", "theorem", "cons_sub_cons", ["matrix"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "cons_dot_product_cons", ["matrix"]]]}]}, {"timestamp": 1641392138, "sha": "98b64f49", "message": "feat(linear_algebra/orientation): bases from orientations (#11234)\nAdd a lemma giving the orientation of a basis constructed with\n`units_smul`, and thus definitions and lemmas to construct a basis\nfrom an orientation.", "changes": [{"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "def", "adjust_to_orientation", ["basis"]], ["add", "theorem", "adjust_to_orientation_apply_eq_or_eq_neg", ["basis"]], ["add", "theorem", "orientation_adjust_to_orientation", ["basis"]], ["add", "theorem", "orientation_neg_single", ["basis"]], ["add", "theorem", "orientation_units_smul", ["basis"]], ["add", "def", "some_basis", ["orientation"]], ["add", "theorem", "some_basis_orientation", ["orientation"]]]}]}, {"timestamp": 1641392137, "sha": "33b5d264", "message": "feat(analysis/complex): `re`, `im`, and `closure`/`interior`/`frontier` (#11215)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/complex/re_im_topology.lean", "changes": [["add", "theorem", "closure_preimage_im", ["complex"]], ["add", "theorem", "closure_preimage_re", ["complex"]], ["add", "theorem", "closure_preimage_re_inter_preimage_im", ["complex"]], ["add", "theorem", "closure_set_of_im_lt", ["complex"]], ["add", "theorem", "closure_set_of_lt_im", ["complex"]], ["add", "theorem", "closure_set_of_lt_re", ["complex"]], ["add", "theorem", "closure_set_of_re_lt", ["complex"]], ["add", "theorem", "frontier_preimage_im", ["complex"]], ["add", "theorem", "frontier_preimage_re", ["complex"]], ["add", "theorem", "frontier_preimage_re_inter_preimage_im", ["complex"]], ["add", "theorem", "frontier_set_of_im_le", ["complex"]], ["add", "theorem", "frontier_set_of_im_lt", ["complex"]], ["add", "theorem", "frontier_set_of_le_im", ["complex"]], ["add", "theorem", "frontier_set_of_le_re", ["complex"]], ["add", "theorem", "frontier_set_of_le_re_and_im_le", ["complex"]], ["add", "theorem", "frontier_set_of_le_re_and_le_im", ["complex"]], ["add", "theorem", "frontier_set_of_lt_im", ["complex"]], ["add", "theorem", "frontier_set_of_lt_re", ["complex"]], ["add", "theorem", "frontier_set_of_re_le", ["complex"]], ["add", "theorem", "frontier_set_of_re_lt", ["complex"]], ["add", "theorem", "interior_preimage_im", ["complex"]], ["add", "theorem", "interior_preimage_re", ["complex"]], ["add", "theorem", "interior_preimage_re_inter_preimage_im", ["complex"]], ["add", "theorem", "interior_set_of_im_le", ["complex"]], ["add", "theorem", "interior_set_of_le_im", ["complex"]], ["add", "theorem", "interior_set_of_le_re", ["complex"]], ["add", "theorem", "interior_set_of_re_le", ["complex"]], ["add", "theorem", "is_open_map_im", ["complex"]], ["add", "theorem", "is_open_map_re", ["complex"]], ["add", "theorem", "is_topological_fiber_bundle_im", ["complex"]], ["add", "theorem", "is_topological_fiber_bundle_re", ["complex"]], ["add", "theorem", "is_trivial_topological_fiber_bundle_im", ["complex"]], ["add", "theorem", "is_trivial_topological_fiber_bundle_re", ["complex"]], ["add", "theorem", "quotient_map_im", ["complex"]], ["add", "theorem", "quotient_map_re", ["complex"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "def", "equiv_real_prod", ["complex"]], ["del", "theorem", "equiv_real_prod_apply", ["complex"]], ["del", "theorem", "equiv_real_prod_symm_im", ["complex"]], ["del", "theorem", "equiv_real_prod_symm_re", ["complex"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "preimage_frontier", ["homeomorph"]]]}]}, {"timestamp": 1641392135, "sha": "3115ced1", "message": "feat(ring_theory/non_zero_divisors): mul_{left,right}_cancel API (#11211)\nNot all `monoid_with_zero` are `cancel_monoid_with_zero`,\nso we can't use `mul_right_cancel₀` everywhere. However, by definition,\nmultiplication by non-zero-divisors is 0 iff the multiplicand is 0.\nIn the context of a ring, that allows us to `mul_cancel_right`", "changes": [{"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["add", "theorem", "mem_non_zero_divisors_iff", []], ["add", "theorem", "mul_cancel_left_coe_non_zero_divisor", []], ["add", "theorem", "mul_cancel_left_mem_non_zero_divisor", []], ["add", "theorem", "mul_cancel_right_coe_non_zero_divisor", []], ["add", "theorem", "mul_cancel_right_mem_non_zero_divisor", []], ["add", "theorem", "mul_left_coe_non_zero_divisors_eq_zero_iff", []], ["add", "theorem", "mul_left_mem_non_zero_divisors_eq_zero_iff", []], ["add", "theorem", "mul_right_coe_non_zero_divisors_eq_zero_iff", []], ["add", "theorem", "mul_right_mem_non_zero_divisors_eq_zero_iff", []]]}]}, {"timestamp": 1641392134, "sha": "3bd2044b", "message": "chore(data/nat/prime): reuse a result from algebra.big_operators.associated (#11143)", "changes": [{"oldPath": "src/algebra/big_operators/associated.lean", "newPath": "src/algebra/big_operators/associated.lean", "changes": [["del", "theorem", "dvd_finset_prod_iff", ["nat", "prime"]], ["del", "theorem", "dvd_finsupp_prod_iff", ["nat", "prime"]], ["del", "theorem", "dvd_prod_iff", ["prime"]]]}, {"oldPath": null, "newPath": "src/data/list/prime.lean", "changes": [["add", "theorem", "mem_list_primes_of_dvd_prod", []], ["add", "theorem", "perm_of_prod_eq_prod", []], ["add", "theorem", "dvd_prod_iff", ["prime"]], ["add", "theorem", "not_dvd_prod", ["prime"]], ["add", "theorem", "prime_dvd_prime_iff_eq", []]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "mem_list_primes_of_dvd_prod", ["nat"]], ["del", "theorem", "perm_of_prod_eq_prod", ["nat"]], ["del", "theorem", "dvd_prod_iff", ["nat", "prime"]], ["del", "theorem", "not_dvd_prod", ["nat", "prime"]]]}]}, {"timestamp": 1641392133, "sha": "57a9f8be", "message": "chore(group_theory/sub{monoid,group}, linear_algebra/basic): rename equivalences to mapped subobjects (#11075)\nThis makes the names shorter and more uniform:\n* `add_equiv.map_add_submonoid`\n* `add_equiv.map_add_subgroup`\n* `linear_equiv.map_submodule`", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "def", "lie_subalgebra_map", ["lie_equiv"]], ["add", "theorem", "lie_subalgebra_map_apply", ["lie_equiv"]], ["del", "def", "of_subalgebra", ["lie_equiv"]], ["del", "theorem", "of_subalgebra_apply", ["lie_equiv"]]]}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "def", "subgroup_equiv_map", ["mul_equiv"]], ["add", "def", "subgroup_map", ["mul_equiv"]]]}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["del", "def", "submonoid_equiv_map", ["mul_equiv"]], ["add", "def", "submonoid_map", ["mul_equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "of_submodule", ["linear_equiv"]], ["del", "theorem", "of_submodule_apply", ["linear_equiv"]], ["del", "theorem", "of_submodule_symm_apply", ["linear_equiv"]], ["add", "def", "submodule_map", ["linear_equiv"]], ["add", "theorem", "submodule_map_apply", ["linear_equiv"]], ["add", "theorem", "submodule_map_symm_apply", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1641392132, "sha": "7e5eebd7", "message": "feat(linear_algebra/clifford_algebra/equivs): There is a clifford algebra isomorphic to the dual numbers (#10730)\nThis adds a brief file on the dual numbers, and then shows that they are equivalent to the clifford algebra with `Q = (0 : quadratic_form R R)`.", "changes": [{"oldPath": null, "newPath": "src/algebra/dual_number.lean", "changes": [["add", "theorem", "alg_hom_ext", ["dual_number"]], ["add", "def", "eps", ["dual_number"]], ["add", "theorem", "eps_mul_eps", ["dual_number"]], ["add", "theorem", "fst_eps", ["dual_number"]], ["add", "theorem", "inr_eq_smul_eps", ["dual_number"]], ["add", "def", "lift", ["dual_number"]], ["add", "theorem", "lift_apply_eps", ["dual_number"]], ["add", "theorem", "lift_eps", ["dual_number"]], ["add", "theorem", "snd_eps", ["dual_number"]], ["add", "theorem", "snd_mul", ["dual_number"]], ["add", "def", "dual_number", []]]}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["add", "theorem", "equiv_symm_eps", ["clifford_algebra_dual_number"]], ["add", "theorem", "equiv_ι", ["clifford_algebra_dual_number"]], ["add", "theorem", "ι_mul_ι", ["clifford_algebra_dual_number"]]]}]}, {"timestamp": 1641385309, "sha": "cef32586", "message": "chore(group_theory/group_action/defs): add instances to copy statements about left actions to right actions when the two are equal (#10949)\nWhile these instances are usually available elsewhere, these shortcuts can reduce the number of typeclass assumptions other lemmas needs.\nSince the instances carry no data, the only harm they can cause is performance.\nThere were some typeclass loops brought on by some bad instance unification, similar to the ones removed by @Vierkantor in 9ee2a50aa439d092c8dea16c1f82f7f8e1f1ea2c. We turn these into `lemma`s and duplicate the docstring explaining the problem. That commit has a much longer explanation of the problem.", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "smul_comm_class'", ["has_scalar", "comp"]], ["add", "theorem", "smul_comm_class", ["has_scalar", "comp"]]]}]}, {"timestamp": 1641382322, "sha": "8d5830e6", "message": "chore(measure_theory/measurable_space): use implicit measurable_space argument (#11230)\nThe `measurable_space` argument is inferred from other arguments (like `measurable f` or a measure for example) instead of being a type class. This ensures that the lemmas are usable without `@` when several measurable space structures are used for the same type.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "indicator", ["measurable"]], ["mod", "theorem", "ite", ["measurable"]], ["mod", "theorem", "piecewise", ["measurable"]], ["mod", "theorem", "measurable_from_top", []], ["mod", "theorem", "measurable_fst", []], ["mod", "theorem", "measurable_inl", []], ["mod", "theorem", "measurable_inr", []], ["mod", "theorem", "measurable_of_subsingleton_codomain", []], ["mod", "theorem", "measurable_prod", []], ["mod", "theorem", "exists_measurable_proj", ["measurable_set"]], ["mod", "theorem", "measurable_set_preimage", []], ["mod", "theorem", "measurable_set_range_inl", []], ["mod", "theorem", "measurable_set_range_inr", []], ["mod", "theorem", "measurable_snd", []], ["mod", "theorem", "measurable_swap", []], ["mod", "theorem", "measurable_swap_iff", []], ["mod", "theorem", "measurable_to_encodable", []], ["mod", "theorem", "measurable_unit", []], ["mod", "theorem", "measurable", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["mod", "theorem", "comp", ["measurable"]], ["mod", "theorem", "empty", ["measurable_set"]], ["mod", "def", "measurable_set", []]]}, {"oldPath": "src/probability_theory/stopping.lean", "newPath": "src/probability_theory/stopping.lean", "changes": []}]}, {"timestamp": 1641370247, "sha": "4912740a", "message": "chore(analysis/inner_product_space/basic): extract common `variables` (#11214)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "theorem", "collected_basis_orthonormal", ["direct_sum", "submodule_is_internal"]], ["mod", "theorem", "comp", ["orthogonal_family"]], ["mod", "theorem", "eq_ite", ["orthogonal_family"]], ["mod", "theorem", "independent", ["orthogonal_family"]], ["mod", "theorem", "inner_right_dfinsupp", ["orthogonal_family"]], ["mod", "theorem", "inner_right_fintype", ["orthogonal_family"]], ["mod", "theorem", "orthonormal_sigma_orthonormal", ["orthogonal_family"]]]}]}, {"timestamp": 1641370246, "sha": "b72d2ab2", "message": "feat(algebra/ring/basic): Introduce non-unital, non-associative rings (#11124)\nAdds the class `non_unital_non_assoc_ring` to `algebra.ring.basic` to represent rings which are not assumed to be unital or associative and shows that (unital, associative) rings are instances of `non_unital_non_assoc_ring`.\nNeeded by #11073.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}]}, {"timestamp": 1641363487, "sha": "58b1429a", "message": "chore(algebra/group/pi): `pow_apply` can be `rfl` (#11249)", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["mod", "theorem", "pow_apply", ["pi"]]]}]}, {"timestamp": 1641347064, "sha": "4093834b", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): add definition and lemmas of pairing measures with nonnegative continuous test functions. (#9430)\nAdd definition and lemmas about pairing of `finite_measure`s and `probability_measure`s with nonnegative continuous test functions. These pairings will be used in the definition of the topology of weak convergence (convergence in distribution): the topology will be defined as an induced topology based on them.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_lt_top_of_bounded_to_ennreal", ["is_finite_measure"]]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "to_ennreal_comp_measurable", ["bounded_continuous_function", "nnreal"]], ["add", "theorem", "lintegral_lt_top_of_bounded_continuous_to_nnreal", ["measure_theory", "finite_measure"]], ["add", "def", "test_against_nn", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_add", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_coe_eq", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_const", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_lipschitz", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_lipschitz_estimate", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_mono", ["measure_theory", "finite_measure"]], ["add", "theorem", "test_against_nn_smul", ["measure_theory", "finite_measure"]], ["add", "def", "to_weak_dual_bounded_continuous_nnreal", ["measure_theory", "finite_measure"]], ["add", "theorem", "lintegral_lt_top_of_bounded_continuous_to_nnreal", ["measure_theory", "probability_measure"]], ["add", "def", "test_against_nn", ["measure_theory", "probability_measure"]], ["add", "theorem", "test_against_nn_coe_eq", ["measure_theory", "probability_measure"]], ["add", "theorem", "test_against_nn_const", ["measure_theory", "probability_measure"]], ["add", "theorem", "test_against_nn_lipschitz", ["measure_theory", "probability_measure"]], ["add", "theorem", "test_against_nn_mono", ["measure_theory", "probability_measure"]], ["add", "theorem", "to_finite_measure_test_against_nn_eq_test_against_nn", ["measure_theory", "probability_measure"]], ["add", "def", "to_weak_dual_bounded_continuous_nnreal", ["measure_theory", "probability_measure"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "upper_bound", ["bounded_continuous_function", "nnreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "le_add_nndist", ["nnreal"]], ["add", "theorem", "nndist_zero_eq_val'", ["nnreal"]], ["add", "theorem", "nndist_zero_eq_val", ["nnreal"]]]}]}, {"timestamp": 1641339705, "sha": "5c8243f9", "message": "fix(algebra/group/type_tags): resolve an instance diamond caused by over-eager unfolding (#11240)\nBy setting the `one` and `zero` fields manually, we ensure that they are syntactically equal to the ones found via `has_one` and `has_zero`, rather than potentially having typeclass arguments resolved in a different way.\nThis seems to fix the failing test.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Diamond.20in.20multiplicative.20nat/near/266824443)", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1641334213, "sha": "862854ed", "message": "chore(ring_theory/localization): fix typo in module docstring (#11245)\nThere was a mismatch in the module docstring to the decl name later.", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1641322079, "sha": "dc352a64", "message": "chore(.github): include co-author attributions in PR template (#11239)", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}]}, {"timestamp": 1641322078, "sha": "692b6b7c", "message": "chore(analysis/inner_product_space/basic): adjust decidability assumptions (#11212)\nEliminate the `open_locale classical` in `inner_product_space.basic` and replace by specific decidability assumptions.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}]}, {"timestamp": 1641322077, "sha": "49cbce22", "message": "chore(data/fintype/basic): set.to_finset_univ generalization (#11174)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "to_finset_univ", ["set"]]]}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}]}, {"timestamp": 1641322076, "sha": "037147ec", "message": "feat(probability_theory/stopping): define stopped process (#10851)", "changes": [{"oldPath": "src/probability_theory/stopping.lean", "newPath": "src/probability_theory/stopping.lean", "changes": [["add", "theorem", "stopped_process", ["measure_theory", "adapted"]], ["add", "theorem", "integrable_stopped_process", ["measure_theory"]], ["mod", "theorem", "measurable_set_eq", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_ge", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_stopped_process", ["measure_theory"]], ["add", "theorem", "mem_ℒp_stopped_process", ["measure_theory"]], ["add", "def", "stopped_process", ["measure_theory"]], ["add", "theorem", "stopped_process_eq", ["measure_theory"]], ["add", "theorem", "stopped_process_eq_of_ge", ["measure_theory"]], ["add", "theorem", "stopped_process_eq_of_le", ["measure_theory"]], ["add", "def", "stopped_value", ["measure_theory"]]]}]}, {"timestamp": 1641314727, "sha": "5df2e7bb", "message": "chore(data/polynomial, data/finset/lattice): basic lemmas (#11237)", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "coe_inf_of_nonempty", ["finset"]], ["add", "theorem", "coe_sup_of_nonempty", ["finset"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_mono", ["polynomial"]]]}]}, {"timestamp": 1641314725, "sha": "5f3f01f9", "message": "feat(set_theory/ordinal_arithmetic): Proved `add_log_le_log_mul` (#11228)\nThat is, `log b u + log b v ≤ log b (u * v)`. The other direction holds only when `b ≠ 2` and `b` is principal multiplicative, and will be added at a much later PR.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "add_log_le_log_mul", ["ordinal"]]]}]}, {"timestamp": 1641314724, "sha": "18330f63", "message": "feat(tactic/abel): support 0 in group expressions (#11201)\n[As reported on Zulip.](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60abel.60.20not.20rewriting.20with.20.60sub_zero.60/near/266645648)\nfixes #11200", "changes": [{"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "test/abel.lean", "newPath": "test/abel.lean", "changes": []}]}, {"timestamp": 1641314723, "sha": "b0f2f559", "message": "feat(set_theory/ordinal_arithmetic): Proved `dvd_iff_mod_eq_zero` (#11195)", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "dvd_iff_mod_eq_zero", ["ordinal"]], ["add", "theorem", "dvd_of_mod_eq_zero", ["ordinal"]], ["add", "theorem", "mod_eq_zero_of_dvd", ["ordinal"]]]}]}, {"timestamp": 1641314722, "sha": "7f244cfe", "message": "feat(category_theory/limits/filtered_colimits_commute_with_finite_limits): A curried variant of the fact that filtered colimits commute with finite limits. (#11154)", "changes": [{"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": [["add", "theorem", "ι_colimit_limit_iso_limit_π", ["category_theory", "limits"]]]}]}, {"timestamp": 1641314720, "sha": "06c3ab2b", "message": "feat(ring_theory/discriminant): add of_power_basis_eq_norm (#11149)\nFrom flt-regular.", "changes": [{"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["add", "theorem", "prod_filter_lt_mul_neg_eq_prod_off_diag", ["fin"]]]}, {"oldPath": "src/ring_theory/discriminant.lean", "newPath": "src/ring_theory/discriminant.lean", "changes": [["add", "theorem", "of_power_basis_eq_norm", ["algebra"]], ["add", "theorem", "of_power_basis_eq_prod''", ["algebra"]], ["add", "theorem", "of_power_basis_eq_prod'", ["algebra"]]]}]}, {"timestamp": 1641314719, "sha": "4a0e844b", "message": "feat(data/finset): to_finset empty iff (#11088)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_finset_eq_empty_iff", ["list"]]]}]}, {"timestamp": 1641314718, "sha": "68d2d213", "message": "feat(testing/slim_check): teach slim_check about `finsupp`s (#10916)\nWe add some instances so that `slim_check` can generate `finsupp`s and hence try to provide counterexamples for them.\nAs the way the original slim_check for functions works is to generate a finite list of random values and pick a default for the rest of the values these `total_functions` are quite close to finsupps already, we just have to map the default value to zero, and prove various things about the support.\nThere might be conceptually nicer ways of building this instance but this seems functional enough.\nSeeing as many finsupp defs are classical (and noncomputable) this isn't quite as useful for generating counterexamples as I originally hoped.\nSee the test at `test/slim_check.lean` for a basic example of usage\nI wrote this while working on flt-regular but it is hopefully useful outside of that", "changes": [{"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": [["add", "def", "apply_finsupp", ["slim_check", "total_function"]], ["add", "def", "zero_default", ["slim_check", "total_function"]], ["add", "def", "zero_default_supp", ["slim_check", "total_function"]]]}, {"oldPath": "test/slim_check.lean", "newPath": "test/slim_check.lean", "changes": []}]}, {"timestamp": 1641314716, "sha": "7d42deda", "message": "chore(*): Rename instances (#9200)\nRename\n* `lattice_of_linear_order` -> `linear_order.to_lattice`\n* `distrib_lattice_of_linear_order` -> `linear_order.to_distrib_lattice`\nto follow the naming convention (well, it's currently not explicitly written there, but autogenerated names follow that).", "changes": [{"oldPath": "src/algebra/char_p/exp_char.lean", "newPath": "src/algebra/char_p/exp_char.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/int/order.lean", "newPath": "src/data/int/order.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["del", "theorem", "lattice_of_linear_order_eq_filter_germ_lattice", ["filter", "germ"]], ["add", "theorem", "to_lattice_eq_filter_germ_lattice", ["filter", "germ", "linear_order"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1641310638, "sha": "b99a98e3", "message": "doc(category_theory/limits/shapes/pullbacks): fix doc (#11225)\nthe link doesn't work with the full stop", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}]}, {"timestamp": 1641303402, "sha": "a30375e0", "message": "feat(topology/fiber_bundle): a topological fiber bundle is a quotient map (#11194)\n* The projection map of a topological fiber bundle (pre)trivialization\n is surjective onto its base set.\n* The projection map of a topological fiber bundle with a nonempty\n fiber is surjective. Since it is also a continuous open map, it is a\n quotient map.\n* Golf a few proofs.", "changes": [{"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["add", "theorem", "map_proj_nhds", ["is_topological_fiber_bundle"]], ["add", "theorem", "quotient_map_proj", ["is_topological_fiber_bundle"]], ["add", "theorem", "surjective_proj", ["is_topological_fiber_bundle"]], ["add", "theorem", "proj_surj_on_base_set", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "proj_surj_on_base_set", ["topological_fiber_bundle", "trivialization"]]]}]}, {"timestamp": 1641303393, "sha": "aa82ba00", "message": "feat(algebra/opposites): add `add_opposite` (#11080)\nAdd `add_opposite`, add `to_additive` here and there. More `to_additive` can be added as needed later.", "changes": [{"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["add", "def", "mul_op", ["add_equiv"]], ["add", "def", "mul_unop", ["add_equiv"]], ["del", "def", "op", ["add_equiv"]], ["del", "def", "unop", ["add_equiv"]], ["add", "def", "mul_op", ["add_monoid_hom"]], ["add", "theorem", "mul_op_ext", ["add_monoid_hom"]], ["add", "def", "mul_unop", ["add_monoid_hom"]], ["del", "def", "op", ["add_monoid_hom"]], ["del", "theorem", "op_ext", ["add_monoid_hom"]], ["del", "def", "unop", ["add_monoid_hom"]], ["add", "def", "op_mul_equiv", ["add_opposite"]], ["add", "theorem", "op_mul_equiv_to_equiv", ["add_opposite"]], ["add", "theorem", "op_pow", ["add_opposite"]], ["add", "theorem", "unop_pow", ["add_opposite"]], ["add", "theorem", "op", ["commute"]], ["mod", "def", "from_opposite", ["monoid_hom"]], ["mod", "def", "op", ["monoid_hom"]], ["mod", "def", "to_opposite", ["monoid_hom"]], ["mod", "def", "unop", ["monoid_hom"]], ["mod", "def", "unop", ["mul_equiv"]], ["del", "theorem", "op", ["mul_opposite", "commute"]], ["mod", "theorem", "unop", ["mul_opposite", "commute"]], ["mod", "theorem", "commute_op", ["mul_opposite"]], ["mod", "theorem", "commute_unop", ["mul_opposite"]], ["del", "theorem", "op", ["mul_opposite", "semiconj_by"]], ["del", "theorem", "unop", ["mul_opposite", "semiconj_by"]], ["mod", "theorem", "semiconj_by_op", ["mul_opposite"]], ["mod", "theorem", "semiconj_by_unop", ["mul_opposite"]], ["add", "theorem", "op", ["semiconj_by"]], ["add", "theorem", "unop", ["semiconj_by"]], ["mod", "theorem", "coe_op_equiv_symm", ["units"]], ["mod", "theorem", "coe_unop_op_equiv", ["units"]], ["mod", "def", "op_equiv", ["units"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op_div", ["add_opposite"]], ["add", "theorem", "op_eq_one_iff", ["add_opposite"]], ["add", "theorem", "op_inv", ["add_opposite"]], ["add", "theorem", "op_mul", ["add_opposite"]], ["add", "theorem", "op_one", ["add_opposite"]], ["add", "theorem", "unop_div", ["add_opposite"]], ["add", "theorem", "unop_eq_one_iff", ["add_opposite"]], ["add", "theorem", "unop_inv", ["add_opposite"]], ["add", "theorem", "unop_mul", ["add_opposite"]], ["add", "theorem", "unop_one", ["add_opposite"]], ["mod", "theorem", "op_bijective", ["mul_opposite"]], ["mod", "theorem", "op_comp_unop", ["mul_opposite"]], ["mod", "theorem", "op_eq_one_iff", ["mul_opposite"]], ["mod", "theorem", "op_eq_zero_iff", ["mul_opposite"]], ["mod", "theorem", "op_inj", ["mul_opposite"]], ["mod", "theorem", "op_injective", ["mul_opposite"]], ["mod", "theorem", "op_inv", ["mul_opposite"]], ["mod", "theorem", "op_mul", ["mul_opposite"]], ["mod", "theorem", "op_ne_zero_iff", ["mul_opposite"]], ["mod", "theorem", "op_one", ["mul_opposite"]], ["mod", "theorem", "op_smul", ["mul_opposite"]], ["mod", "theorem", "op_surjective", ["mul_opposite"]], ["mod", "theorem", "op_unop", ["mul_opposite"]], ["mod", "theorem", "unop_bijective", ["mul_opposite"]], ["mod", "theorem", "unop_comp_op", ["mul_opposite"]], ["mod", "theorem", "unop_eq_one_iff", ["mul_opposite"]], ["mod", "theorem", "unop_eq_zero_iff", ["mul_opposite"]], ["mod", "theorem", "unop_inj", ["mul_opposite"]], ["mod", "theorem", "unop_injective", ["mul_opposite"]], ["mod", "theorem", "unop_inv", ["mul_opposite"]], ["mod", "theorem", "unop_mul", ["mul_opposite"]], ["mod", "theorem", "unop_ne_zero_iff", ["mul_opposite"]], ["mod", "theorem", "unop_one", ["mul_opposite"]], ["mod", "theorem", "unop_op", ["mul_opposite"]], ["mod", "theorem", "unop_smul", ["mul_opposite"]], ["mod", "theorem", "unop_surjective", ["mul_opposite"]]]}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": [["mod", "theorem", "op_smul_eq_mul", []]]}]}, {"timestamp": 1641303384, "sha": "a7aa2c87", "message": "feat(data/finset/sigma): A way to lift `finset`-valued functions to a sigma type (#10958)\nThis defines `finset.sigma_lift : (Π i, α i → β i → finset (γ i)) → Σ i, α i → Σ i, β i → finset (Σ i, γ i)` as the function which returns the finset corresponding to the first coordinate of `a b : Σ i, α i` if they have the same, or the empty set else.", "changes": [{"oldPath": "src/data/finset/sigma.lean", "newPath": "src/data/finset/sigma.lean", "changes": [["add", "theorem", "card_sigma_lift", ["finset"]], ["add", "theorem", "mem_sigma_lift", ["finset"]], ["add", "theorem", "mk_mem_sigma_lift", ["finset"]], ["add", "theorem", "not_mem_sigma_lift_of_ne_left", ["finset"]], ["add", "theorem", "not_mem_sigma_lift_of_ne_right", ["finset"]], ["add", "def", "sigma_lift", ["finset"]], ["add", "theorem", "sigma_lift_eq_empty", ["finset"]], ["add", "theorem", "sigma_lift_mono", ["finset"]], ["add", "theorem", "sigma_lift_nonempty", ["finset"]]]}]}, {"timestamp": 1641303376, "sha": "8bd20598", "message": "feat(data/finset/slice): `r`-sets and slice (#10685)\nTwo simple nonetheless useful definitions about set families. A family of `r`-sets is a set of finsets of cardinality `r`. The slice of a set family is its subset of `r`-sets.", "changes": [{"oldPath": "src/combinatorics/set_family/shadow.lean", "newPath": "src/combinatorics/set_family/shadow.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finset/slice.lean", "changes": [["add", "theorem", "eq_of_mem_slice", ["finset"]], ["add", "theorem", "mem_slice", ["finset"]], ["add", "theorem", "ne_of_mem_slice", ["finset"]], ["add", "theorem", "pairwise_disjoint_slice", ["finset"]], ["add", "theorem", "sized_slice", ["finset"]], ["add", "def", "slice", ["finset"]], ["add", "theorem", "slice_subset", ["finset"]], ["add", "theorem", "subset_powerset_len_univ_iff", ["finset"]], ["add", "theorem", "card_le", ["set", "sized"]], ["add", "theorem", "mono", ["set", "sized"]], ["add", "def", "sized", ["set"]], ["add", "theorem", "sized_union", ["set"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "mem_powerset_len_univ_iff", ["finset"]]]}]}, {"timestamp": 1641298124, "sha": "1aec9a19", "message": "feat(analysis/inner_product_space/dual,adjoint): add some lemmas about extensionality with respect to a basis (#11176)\nThis PR adds some lemmas about extensionality in inner product spaces with respect to a basis.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "eq_adjoint_iff_basis", ["linear_map"]], ["add", "theorem", "eq_adjoint_iff_basis_left", ["linear_map"]], ["add", "theorem", "eq_adjoint_iff_basis_right", ["linear_map"]]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["add", "theorem", "ext_inner_left_basis", ["inner_product_space"]], ["add", "theorem", "ext_inner_right_basis", ["inner_product_space"]]]}]}, {"timestamp": 1641289491, "sha": "03872fdd", "message": "feat(*): Prerequisites for the Spec gamma adjunction (#11209)", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "theorem", "forget_to_LocallyRingedSpace_preimage", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["add", "theorem", "basic_open_hom_ext", ["algebraic_geometry", "Spec"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "theorem", "comp_val_c", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "comp_val_c_app", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "theorem", "comap_closed_point", ["local_ring"]], ["add", "theorem", "is_local_ring_hom_iff_comap_closed_point", ["local_ring"]], ["del", "theorem", "local_hom_iff_comap_closed_point", ["local_ring"]], ["add", "theorem", "comap_comp_apply", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": [["add", "theorem", "mem_top_basic_open", ["algebraic_geometry", "RingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["mod", "def", "stalk", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "theorem", "to_basic_open", ["algebraic_geometry", "structure_sheaf", "is_localization"]], ["add", "theorem", "to_stalk", ["algebraic_geometry", "structure_sheaf", "is_localization"]]]}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "theorem", "hom_equiv_id", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_symm_id", ["category_theory", "adjunction"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["add", "theorem", "pushforward_eq'_hom_app", ["Top", "presheaf"]], ["add", "theorem", "pushforward_map_app'", ["Top", "presheaf"]]]}]}, {"timestamp": 1641289490, "sha": "9a8e9fa5", "message": "chore(category_theory/limits): Generalize universes for `preserves/shapes/pullback.lean` (#10780)", "changes": [{"oldPath": "src/category_theory/limits/constructions/epi_mono.lean", "newPath": "src/category_theory/limits/constructions/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["del", "def", "preserves_colimits_of_evaluation", ["category_theory", "limits"]], ["mod", "def", "preserves_colimits_of_shape_of_evaluation", ["category_theory", "limits"]], ["del", "def", "preserves_limits_of_evaluation", ["category_theory", "limits"]], ["mod", "def", "preserves_limits_of_shape_of_evaluation", ["category_theory", "limits"]], ["add", "def", "{w'", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": [["add", "def", "of_whisker_equivalence", ["category_theory", "limits", "is_colimit"]], ["add", "def", "whisker_equivalence_equiv", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_whisker_equivalence", ["category_theory", "limits", "is_limit"]], ["add", "def", "whisker_equivalence_equiv", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/preserves/limits.lean", "newPath": "src/category_theory/limits/preserves/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "changes": [["mod", "def", "is_colimit_of_has_pushout_of_preserves_colimit", ["category_theory", "limits"]], ["mod", "def", "is_limit_of_has_pullback_of_preserves_limit", ["category_theory", "limits"]], ["mod", "def", "preserves_pullback_symmetry", ["category_theory", "limits"]], ["mod", "def", "preserves_pushout_symmetry", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "walking_cospan_equiv", ["category_theory", "limits"]], ["add", "def", "walking_cospan_functor", ["category_theory", "limits"]], ["add", "theorem", "walking_cospan_functor_id", ["category_theory", "limits"]], ["add", "theorem", "walking_cospan_functor_inl", ["category_theory", "limits"]], ["add", "theorem", "walking_cospan_functor_inr", ["category_theory", "limits"]], ["add", "theorem", "walking_cospan_functor_left", ["category_theory", "limits"]], ["add", "theorem", "walking_cospan_functor_one", ["category_theory", "limits"]], ["add", "theorem", "walking_cospan_functor_right", ["category_theory", "limits"]], ["add", "def", "walking_span_equiv", ["category_theory", "limits"]], ["add", "def", "walking_span_functor", ["category_theory", "limits"]], ["add", "theorem", "walking_span_functor_fst", ["category_theory", "limits"]], ["add", "theorem", "walking_span_functor_id", ["category_theory", "limits"]], ["add", "theorem", "walking_span_functor_left", ["category_theory", "limits"]], ["add", "theorem", "walking_span_functor_right", ["category_theory", "limits"]], ["add", "theorem", "walking_span_functor_snd", ["category_theory", "limits"]], ["add", "theorem", "walking_span_functor_zero", ["category_theory", "limits"]]]}]}, {"timestamp": 1641282419, "sha": "044c1def", "message": "feat(analysis/special_functions/trigonometric): a few lemmas (#11217)\nAdd a few trivial lemmas about `arcsin`/`arccos`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": [["add", "theorem", "arccos_le_pi_div_four", ["real"]], ["add", "theorem", "arccos_le_pi_div_two", ["real"]], ["add", "theorem", "pi_div_four_le_arcsin", ["real"]]]}]}, {"timestamp": 1641282418, "sha": "3045014d", "message": "feat(algebra/order/ring): turn `mul_self_pos` into an `iff` (#11216)", "changes": [{"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["mod", "theorem", "mul_self_pos", []]]}, {"oldPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "newPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}]}, {"timestamp": 1641282417, "sha": "85784b05", "message": "feat(linear_algebra/determinant): `det_units_smul` and `det_is_unit_smul` (#11206)\nAdd lemmas giving the determinant of a basis constructed with\n`units_smul` or `is_unit_smul` with respect to the original basis.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_is_unit_smul", ["basis"]], ["add", "theorem", "det_units_smul", ["basis"]]]}]}, {"timestamp": 1641282416, "sha": "1fc7a93c", "message": "chore(topology/metric_space/hausdorff_distance): slightly tidy some proofs (#11203)", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1641282415, "sha": "9d1503a6", "message": "feat(field_theory.intermediate_field): add intermediate_field.map_map (#11020)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "map_map", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}]}, {"timestamp": 1641277902, "sha": "71dc1eab", "message": "feat(topology/maps): preimage of closure/frontier under an open map (#11189)\nWe had lemmas about `interior`. Add versions about `frontier` and `closure`.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "theorem", "interior_preimage_subset_preimage_interior", ["is_open_map"]], ["add", "theorem", "maps_to_interior", ["is_open_map"]], ["add", "theorem", "of_sections", ["is_open_map"]], ["add", "theorem", "preimage_closure_eq_closure_preimage", ["is_open_map"]], ["add", "theorem", "preimage_closure_subset_closure_preimage", ["is_open_map"]], ["add", "theorem", "preimage_frontier_eq_frontier_preimage", ["is_open_map"]], ["add", "theorem", "preimage_frontier_subset_frontier_preimage", ["is_open_map"]], ["mod", "theorem", "preimage_interior_eq_interior_preimage", ["is_open_map"]]]}]}, {"timestamp": 1641268392, "sha": "8f391aa5", "message": "chore(algebra/module/submodule): switch `subtype_eq_val` to `coe_subtype` (#11210)\nChange the name and form of a lemma, from\n```lean\nlemma subtype_eq_val : ((submodule.subtype p) : p → M) = subtype.val := rfl\n```\nto\n```lean\nlemma coe_subtype : ((submodule.subtype p) : p → M) = coe := rfl\n```\nThe latter is the simp-normal form so I claim it should be preferred.", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "coe_subtype", ["submodule"]], ["del", "theorem", "subtype_eq_val", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1641260934, "sha": "4daaff06", "message": "feat(data/nat/prime): factors sublist of product (#11104)\nThis PR changes the existing `factors_subset_right` to give a stronger sublist conclusion (which trivially can be used to reproduce the subst version).", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_sublist_of_dvd", ["nat"]], ["add", "theorem", "factors_sublist_right", ["nat"]]]}]}, {"timestamp": 1641241805, "sha": "62d814a4", "message": "refactor(order/lexicographic): Change the `lex` synonym (#10926)\nAt least five types have a natural lexicographic order, namely:\n* `α ⊕ β` where everything on the left is smaller than everything on the right\n* `Σ i, α i` where things are first ordered following `ι`, then following `α i`\n* `Σ' i, α i` where things are first ordered following `ι`, then following `α i`\n* `α × β` where things are first ordered following `α`, then following `β`\n* `finset α`, which is in a specific sene the dual of `finset.colex`.\nAnd we could even add `Π i, α i`, `ι →₀ α`, `Π₀ i, α i`, etc... although those haven't come up yet in practice.\nHence, we generalize the `lex` synonym away from `prod` to make it a general purpose synonym to equip a type with its lexicographical order. What was `lex α β` now is `α ×ₗ β`.\nNote that this PR doesn't add any of the aforementioned instances.", "changes": [{"oldPath": "src/data/fin/tuple/sort.lean", "newPath": "src/data/fin/tuple/sort.lean", "changes": [["mod", "def", "graph", ["tuple"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": [["mod", "def", "lex", []], ["del", "theorem", "lex_le_iff", []], ["del", "theorem", "lex_lt_iff", []], ["add", "def", "of_lex", []], ["add", "theorem", "of_lex_inj", []], ["add", "theorem", "of_lex_symm_eq", []], ["add", "theorem", "of_lex_to_lex", []], ["add", "theorem", "le_iff", ["prod", "lex"]], ["add", "theorem", "lt_iff", ["prod", "lex"]], ["add", "def", "to_lex", []], ["add", "theorem", "to_lex_inj", []], ["add", "theorem", "to_lex_of_lex", []], ["add", "theorem", "to_lex_symm_eq", []]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}]}, {"timestamp": 1641236141, "sha": "9d0fd523", "message": "feat(measure_theory/function/lp_space): use has_measurable_add2 instead of second_countable_topology (#11202)\nUse the weaker assumption `[has_measurable_add₂ E]` instead of `[second_countable_topology E]` in 4 lemmas.", "changes": [{"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "snorm'_sum_le", ["measure_theory"]], ["mod", "theorem", "snorm_sum_le", ["measure_theory"]]]}]}, {"timestamp": 1641227135, "sha": "72498958", "message": "feat(analysis/inner_product_space/basic): negating orthonormal vectors (#11208)\nAdd a lemma that, given an orthonormal family, negating some of the\nvectors in it produces another orthonormal family.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "orthonormal_of_forall_eq_or_eq_neg", ["orthonormal"]]]}]}, {"timestamp": 1641223588, "sha": "83f40364", "message": "feat(*/cyclotomic): update is_root_cyclotomic_iff to use ne_zero (#11071)", "changes": [{"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["mod", "theorem", "is_root_cyclotomic_iff", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": []}]}, {"timestamp": 1641220217, "sha": "236d978d", "message": "feat(linear_algebra/matrix/basis): `to_matrix_units_smul` and `to_matrix_is_unit_smul` (#11191)\nAdd lemmas that applying `to_matrix` to a basis constructed with\n`units_smul` or `is_unit_smul` produces the corresponding diagonal\nmatrix.", "changes": [{"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "to_matrix_is_unit_smul", ["basis"]], ["add", "theorem", "to_matrix_units_smul", ["basis"]]]}]}, {"timestamp": 1641214142, "sha": "4b3198b9", "message": "feat(combinatorics/configuration): `has_lines` implies `has_points`, and vice versa (#11170)\nIf `|P| = |L|`, then `has_lines` and `has_points` are equivalent!", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1641209260, "sha": "a10cb2f3", "message": "feat(algebra/big_operators/associated): `dvd_prod_iff` for `finset` and `finsupp` (#10675)\nAdding the counterparts of `dvd_prod_iff` (in #10624) for `finset` and `finsupp`.", "changes": [{"oldPath": "src/algebra/big_operators/associated.lean", "newPath": "src/algebra/big_operators/associated.lean", "changes": [["add", "theorem", "dvd_finset_prod_iff", ["nat", "prime"]], ["add", "theorem", "dvd_finsupp_prod_iff", ["nat", "prime"]], ["add", "theorem", "dvd_finset_prod_iff", ["prime"]], ["add", "theorem", "dvd_finsupp_prod_iff", ["prime"]], ["mod", "theorem", "dvd_prod_iff", ["prime"]]]}]}, {"timestamp": 1641205931, "sha": "a813cf5c", "message": "chore(algebra/algebra/spectrum): move `exists_spectrum_of_is_alg_closed_of_finite_dimensional` (#10919)\nMove a lemma from `field_theory/is_alg_closed/basic` into `algebra/algebra/spectrum` which belongs in this relatively new file. Also, rename (now in `spectrum` namespace) and refactor it slightly; and update the two references to it accordingly.\n- [x] depends on: #10783", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "nonempty_of_is_alg_closed_of_finite_dimensional", ["spectrum"]]]}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["del", "theorem", "exists_spectrum_of_is_alg_closed_of_finite_dimensional", []]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1641195322, "sha": "49bf3d3e", "message": "feat(data/polynomial/taylor): taylor_mul (#11193)", "changes": [{"oldPath": "src/data/polynomial/taylor.lean", "newPath": "src/data/polynomial/taylor.lean", "changes": [["add", "theorem", "taylor_mul", ["polynomial"]]]}]}, {"timestamp": 1641195321, "sha": "a49ee49b", "message": "feat(data/finset/functor): Functor structures for `finset` (#10980)\nThis defines the monad, the commutative applicative and the (almost) traversable functor structures on `finset`.\nIt all goes in a new file `data.finset.functor` and picks up the `functor` instance that was stranded in `data.finset.basic` by Scott in #2997.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "mem_image", ["finset"]], ["add", "theorem", "mem_image_const", ["finset"]], ["add", "theorem", "mem_image_const_self", ["finset"]], ["mod", "theorem", "mem_image_of_mem", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/functor.lean", "changes": [["add", "theorem", "bind_def", ["finset"]], ["add", "theorem", "fmap_def", ["finset"]], ["add", "theorem", "id_traverse", ["finset"]], ["add", "theorem", "map_comp_coe", ["finset"]], ["add", "theorem", "map_traverse", ["finset"]], ["add", "theorem", "pure_def", ["finset"]], ["add", "theorem", "seq_def", ["finset"]], ["add", "theorem", "seq_left_def", ["finset"]], ["add", "theorem", "seq_right_def", ["finset"]], ["add", "def", "traverse", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_top", ["finset"]], ["add", "theorem", "sup_bot", ["finset"]], ["add", "theorem", "sup_singleton''", ["finset"]]]}]}, {"timestamp": 1641192879, "sha": "138c61fc", "message": "chore(field_theory/ratfunc): comm_ring (ratfunc K) (#11188)\nPreviously, the file only gave a `field (ratfunc K)` instance,\nrequiring `comm_ring K` and `is_domain K`.\nIn fact, `ratfunc K` is a `comm_ring` regardless of the `is_domain`.\nThe upstream instance is proven first, with a generalized tactic.", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}]}, {"timestamp": 1641167746, "sha": "03a54829", "message": "chore(topology/continuous_on): fix a typo (#11190)\n`eventually_nhds_with_of_forall` → `eventually_nhds_within_of_forall`", "changes": [{"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["del", "theorem", "eventually_nhds_with_of_forall", []], ["add", "theorem", "eventually_nhds_within_of_forall", []]]}]}, {"timestamp": 1641144104, "sha": "3f777613", "message": "feat(ring_theory/algebraic): algebraic functions (#11156)\nAccessible via a new `algebra (polynomial R) (R → R)`\nand a generalization that gives `algebra (polynomial R) (S → S)` when `[algebra R S]`.", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "algebra_map_pi_eq_aeval", ["polynomial"]], ["add", "theorem", "algebra_map_pi_self_eq_eval", ["polynomial"]], ["add", "theorem", "polynomial_smul_apply'", []], ["add", "theorem", "polynomial_smul_apply", []]]}]}, {"timestamp": 1641068587, "sha": "ebdbe6b0", "message": "feat(topology/algebra/ordered): new lemmas, update (#11184)\n* In `exists_seq_strict_mono_tendsto'` and `exists_seq_strict_anti_tendsto'`, prove that `u n` belongs to the corresponding open interval.\n* Add `exists_seq_strict_anti_strict_mono_tendsto`.\n* Rename `is_lub_of_tendsto` to `is_lub_of_tendsto_at_top`, rename `is_glb_of_tendsto` to `is_glb_of_tendsto_at_bot`.\n* Add `is_lub_of_tendsto_at_bot`, `is_glb_of_tendsto_at_top`.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "exists_seq_strict_anti_strict_mono_tendsto", []]]}, {"oldPath": "src/topology/algebra/ordered/monotone_convergence.lean", "newPath": "src/topology/algebra/ordered/monotone_convergence.lean", "changes": [["del", "theorem", "is_glb_of_tendsto", []], ["add", "theorem", "is_glb_of_tendsto_at_bot", []], ["add", "theorem", "is_glb_of_tendsto_at_top", []], ["del", "theorem", "is_lub_of_tendsto", []], ["add", "theorem", "is_lub_of_tendsto_at_bot", []], ["add", "theorem", "is_lub_of_tendsto_at_top", []], ["mod", "theorem", "ge_of_tendsto", ["monotone"]], ["mod", "theorem", "le_of_tendsto", ["monotone"]]]}]}, {"timestamp": 1641064035, "sha": "02d02dfc", "message": "chore(measure_theory): fix TC assumptions in 2 lemmas (#11185)\nWith new assumptions, these lemmas work, e.g., for `β = ι → ℝ`.", "changes": [{"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}]}, {"timestamp": 1641064033, "sha": "c1b10417", "message": "feat(topology/metric_space/basic): add `fin.dist_insert_nth_insert_nth` (#11183)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_insert_nth_insert_nth", ["fin"]], ["add", "theorem", "nndist_insert_nth_insert_nth", ["fin"]], ["add", "theorem", "nndist_pi_le_iff", []]]}]}, {"timestamp": 1641056992, "sha": "6486e9b3", "message": "chore(order/rel_classes): Removed unnecessary `classical` (#11180)\nNot sure what that was doing here.", "changes": [{"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}]}, {"timestamp": 1641051899, "sha": "93cf56c5", "message": "feat(algebraic_geometry/*): The map `F.stalk y ⟶ F.stalk x` for `x ⤳ y` (#11144)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "theorem", "le_iff_specializes", ["prime_spectrum"]], ["add", "def", "localization_map_of_specializes", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["add", "theorem", "stalk_specializes_stalk_map", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "theorem", "localization_to_stalk_stalk_specializes", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "localization_to_stalk_stalk_to_fiber_ring_hom", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "stalk_specializes_stalk_to_fiber", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "stalk_to_fiber_ring_hom_localization_to_stalk", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_stalk_stalk_specializes", ["algebraic_geometry", "structure_sheaf"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "germ_stalk_specializes'", ["Top", "presheaf"]], ["add", "theorem", "germ_stalk_specializes", ["Top", "presheaf"]], ["add", "def", "stalk_specializes", ["Top", "presheaf"]], ["add", "theorem", "stalk_specializes_stalk_functor_map", ["Top", "presheaf"]], ["add", "theorem", "stalk_specializes_stalk_pushforward", ["Top", "presheaf"]]]}]}, {"timestamp": 1641048254, "sha": "892d465a", "message": "feat(linear_algebra/multilinear/basic): the space of multilinear maps is finite-dimensional when the components are finite-dimensional (#10504)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}]}, {"timestamp": 1641045332, "sha": "53533697", "message": "feat(combinatorics/configuration): Line count equals point count (#11169)\nIn a configuration satisfying `has_lines` or `has_points`, if the number of points equals the number of lines, then the number of lines through a given point equals the number of points on a given line.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "line_count_eq_point_count", ["configuration", "has_lines"]], ["add", "theorem", "line_count_eq_point_count", ["configuration", "has_points"]]]}]}, {"timestamp": 1641045331, "sha": "a6c82afb", "message": "feat(group_theory/specific_groups/*): computes the exponents of the dihedral and generalised quaternion groups (#11166)\nThis PR shows that the exponent of the dihedral group of order `2n` is equal to `lcm n 2` and that the exponent of the generalised quaternion group of order `4n` is `2 * lcm n 2`", "changes": [{"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": [["add", "theorem", "exponent", ["dihedral_group"]]]}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": [["add", "theorem", "exponent", ["quaternion_group"]], ["mod", "theorem", "order_of_a_one", ["quaternion_group"]]]}]}, {"timestamp": 1641045330, "sha": "ad76a5ee", "message": "feat(data/nat/log): log_mul, log_div (#11164)\nEven with division over natural, the log \"spec\" holds.", "changes": [{"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": [["add", "theorem", "log_div_base", ["nat"]], ["add", "theorem", "log_div_mul_self", ["nat"]], ["add", "theorem", "log_mul_base", ["nat"]]]}]}, {"timestamp": 1641038344, "sha": "23b01cc4", "message": "feat(algebraic_geometry): The function field of an integral scheme (#11147)", "changes": [{"oldPath": "src/algebra/field/basic.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_geometry/function_field.lean", "changes": [["add", "def", "function_field", ["algebraic_geometry", "Scheme"]], ["add", "def", "germ_to_function_field", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "germ_to_function_field_injective", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "germ_injective_of_is_integral", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": [["add", "theorem", "affine_is_integral_iff", ["algebraic_geometry"]], ["add", "theorem", "affine_is_reduced_iff", ["algebraic_geometry"]], ["add", "theorem", "is_integral_iff_is_irreducible_and_is_reduced", ["algebraic_geometry"]], ["add", "theorem", "is_integral_of_is_irreducible_is_reduced", ["algebraic_geometry"]], ["add", "theorem", "is_integral_of_open_immersion", ["algebraic_geometry"]], ["add", "theorem", "map_injective_of_is_integral", ["algebraic_geometry"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "theorem", "coe_top", ["topological_space", "opens"]], ["add", "theorem", "ne_bot_iff_nonempty", ["topological_space", "opens"]], ["add", "theorem", "not_nonempty_iff_eq_bot", ["topological_space", "opens"]]]}]}, {"timestamp": 1641004365, "sha": "1594b0ca", "message": "feat(normed_space/lp_space): Lp space for `Π i, E i` (#11015)\nFor a family `Π i, E i` of normed spaces, define the subgroup with finite lp norm, and prove it is a `normed_group`. Many parts adapted from the development of `measure_theory.Lp` by @RemyDegenne.\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Lp.20space", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/lp_space.lean", "changes": [["add", "theorem", "coe_fn_add", ["lp"]], ["add", "theorem", "coe_fn_neg", ["lp"]], ["add", "theorem", "coe_fn_smul", ["lp"]], ["add", "theorem", "coe_fn_sub", ["lp"]], ["add", "theorem", "coe_fn_zero", ["lp"]], ["add", "theorem", "coe_lp_submodule", ["lp"]], ["add", "theorem", "eq_zero'", ["lp"]], ["add", "theorem", "eq_zero_iff_coe_fn_eq_zero", ["lp"]], ["add", "theorem", "ext", ["lp"]], ["add", "theorem", "has_sum_norm", ["lp"]], ["add", "theorem", "is_lub_norm", ["lp"]], ["add", "def", "lp_submodule", ["lp"]], ["add", "theorem", "mem_lp_const_smul", ["lp"]], ["add", "theorem", "norm_const_smul", ["lp"]], ["add", "theorem", "norm_eq_card_dsupport", ["lp"]], ["add", "theorem", "norm_eq_csupr", ["lp"]], ["add", "theorem", "norm_eq_tsum_rpow", ["lp"]], ["add", "theorem", "norm_eq_zero_iff", ["lp"]], ["add", "theorem", "norm_neg", ["lp"]], ["add", "theorem", "norm_nonneg'", ["lp"]], ["add", "theorem", "norm_rpow_eq_tsum", ["lp"]], ["add", "theorem", "norm_zero", ["lp"]], ["add", "def", "lp", []], ["add", "theorem", "add", ["mem_ℓp"]], ["add", "theorem", "bdd_above", ["mem_ℓp"]], ["add", "theorem", "const_mul", ["mem_ℓp"]], ["add", "theorem", "const_smul", ["mem_ℓp"]], ["add", "theorem", "finite_dsupport", ["mem_ℓp"]], ["add", "theorem", "finset_sum", ["mem_ℓp"]], ["add", "theorem", "neg", ["mem_ℓp"]], ["add", "theorem", "neg_iff", ["mem_ℓp"]], ["add", "theorem", "of_exponent_ge", ["mem_ℓp"]], ["add", "theorem", "sub", ["mem_ℓp"]], ["add", "theorem", "summable", ["mem_ℓp"]], ["add", "def", "mem_ℓp", []], ["add", "theorem", "mem_ℓp_gen", []], ["add", "theorem", "mem_ℓp_gen_iff", []], ["add", "theorem", "mem_ℓp_infty", []], ["add", "theorem", "mem_ℓp_infty_iff", []], ["add", "theorem", "mem_ℓp_zero", []], ["add", "theorem", "mem_ℓp_zero_iff", []], ["add", "def", "pre_lp", []], ["add", "theorem", "zero_mem_ℓp'", []], ["add", "theorem", "zero_mem_ℓp", []]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "rpow_le_rpow_of_exponent_ge'", ["real"]], ["add", "theorem", "rpow_left_inj_on", ["real"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_zero_iff_of_nonneg", []]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "eventually_gt_of_tendsto_gt", []], ["add", "theorem", "eventually_lt_of_tendsto_lt", []]]}]}, {"timestamp": 1640996437, "sha": "742ec88c", "message": "feat(data/set/*): lemmas about `monotone`/`antitone` and sets/intervals (#11173)\n* Rename `set.monotone_inter` and `set.monotone_union` to\n `monotone.inter` and `monotone.union`.\n* Add `antitone` versions of some `monotone` lemmas.\n* Specialize `Union_Inter_of_monotone` for `set.pi`.\n* Add lemmas about `⋃ x, Ioi (f x)`, `⋃ x, Iio (f x)`, and `⋃ x, Ioo (f x) (g x)`.\n* Add dot notation lemmas `monotone.Ixx` and `antitone.Ixx`.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "Union_pi_of_monotone", ["set"]], ["add", "theorem", "Union_univ_pi_of_monotone", ["set"]]]}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": [["add", "theorem", "Union_Ioi_eq", ["is_glb"]], ["add", "theorem", "bUnion_Ioi_eq", ["is_glb"]], ["add", "theorem", "Union_Iio_eq", ["is_lub"]], ["add", "theorem", "bUnion_Iio_eq", ["is_lub"]], ["mod", "theorem", "Union_Ico_eq_Iio_self_iff", ["set"]], ["mod", "theorem", "Union_Ioc_eq_Ioi_self_iff", ["set"]], ["mod", "theorem", "bUnion_Ico_eq_Iio_self_iff", ["set"]], ["mod", "theorem", "bUnion_Ioc_eq_Ioi_self_iff", ["set"]]]}, {"oldPath": "src/data/set/intervals/monotone.lean", "newPath": "src/data/set/intervals/monotone.lean", "changes": [["add", "theorem", "Union_Ioo_of_mono_of_is_glb_of_is_lub", []], ["add", "theorem", "antitone_Ici", []], ["add", "theorem", "antitone_Ioi", []], ["add", "theorem", "monotone_Iic", []], ["add", "theorem", "monotone_Iio", []], ["mod", "def", "order_iso_Ioo_neg_one_one", []]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "inter", ["antitone"]], ["add", "theorem", "union", ["antitone"]], ["add", "theorem", "inter", ["monotone"]], ["add", "theorem", "union", ["monotone"]], ["add", "theorem", "antitone_set_of", ["set"]], ["del", "theorem", "monotone_inter", ["set"]], ["del", "theorem", "monotone_union", ["set"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "le_map_inf", ["antitone"]], ["add", "theorem", "map_inf", ["antitone"]], ["add", "theorem", "map_sup", ["antitone"]], ["add", "theorem", "map_sup_le", ["antitone"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1640996436, "sha": "979f2e72", "message": "fix(order/filter/ultrafilter): dedup instance names (#11171)", "changes": [{"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}]}, {"timestamp": 1640996435, "sha": "da54388a", "message": "feat(combinatorics/simple_graph/srg): is_SRG_with for complete graphs, edgeless graphs, and complements (#5698)\nWe add the definition of a strongly regular graph and prove some useful lemmas about them.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "bot_degree", ["simple_graph"]], ["add", "theorem", "card_common_neighbors_top", ["simple_graph"]], ["add", "theorem", "common_neighbors_top_eq", ["simple_graph"]], ["del", "theorem", "complete_graph_is_regular", ["simple_graph"]], ["del", "theorem", "is_regular_compl_of_is_regular", ["simple_graph"]], ["add", "theorem", "compl", ["simple_graph", "is_regular_of_degree"]], ["add", "theorem", "degree_eq", ["simple_graph", "is_regular_of_degree"]], ["add", "theorem", "top", ["simple_graph", "is_regular_of_degree"]], ["del", "theorem", "is_regular_of_degree_eq", ["simple_graph"]], ["add", "theorem", "ne_of_adj_of_not_adj", ["simple_graph"]], ["add", "theorem", "neighbor_finset_compl", ["simple_graph"]], ["add", "theorem", "neighbor_finset_def", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/strongly_regular.lean", "newPath": "src/combinatorics/simple_graph/strongly_regular.lean", "changes": [["add", "theorem", "bot_strongly_regular", ["simple_graph"]], ["add", "theorem", "compl_neighbor_finset_sdiff_inter_eq", ["simple_graph"]], ["del", "theorem", "complete_strongly_regular", ["simple_graph"]], ["del", "structure", "is_SRG_of", ["simple_graph"]], ["add", "theorem", "card_common_neighbors_eq_of_adj_compl", ["simple_graph", "is_SRG_with"]], ["add", "theorem", "card_common_neighbors_eq_of_not_adj_compl", ["simple_graph", "is_SRG_with"]], ["add", "theorem", "card_neighbor_finset_union_eq", ["simple_graph", "is_SRG_with"]], ["add", "theorem", "card_neighbor_finset_union_of_adj", ["simple_graph", "is_SRG_with"]], ["add", "theorem", "card_neighbor_finset_union_of_not_adj", ["simple_graph", "is_SRG_with"]], ["add", "theorem", "compl", ["simple_graph", "is_SRG_with"]], ["add", "theorem", "compl_is_regular", ["simple_graph", "is_SRG_with"]], ["add", "theorem", "top", ["simple_graph", "is_SRG_with"]], ["add", "structure", "is_SRG_with", ["simple_graph"]], ["add", "theorem", "sdiff_compl_neighbor_finset_inter_eq", ["simple_graph"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "compl_inter", ["finset"]], ["add", "theorem", "compl_union", ["finset"]], ["add", "theorem", "inter_compl", ["finset"]], ["mod", "theorem", "union_compl", ["finset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "to_finset_sdiff", ["set"]], ["add", "theorem", "to_finset_singleton", ["set"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}]}, {"timestamp": 1640989404, "sha": "8db2fa05", "message": "chore(category_theory/closed/cartesian): make exp right-associative (#11172)\nThis makes `X ⟹ Y ⟹ Z` parse as `X ⟹ (Y ⟹ Z)`, like ordinary function types.", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}]}, {"timestamp": 1640989403, "sha": "559951cd", "message": "feat(data/quot): Add quotient pi induction (#11137)\nI am planning to use this later to show that the (pi) product of homotopy classes of paths is well-defined, and prove\nproperties about that product.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["mod", "theorem", "choice_eq", ["quotient"]], ["add", "theorem", "induction_on_pi", ["quotient"]]]}]}, {"timestamp": 1640989402, "sha": "200f47d3", "message": "feat(analysis/normed_space/banach_steinhaus): prove the standard Banach-Steinhaus theorem (#10663)\nHere we prove the Banach-Steinhaus theorem for maps from a Banach space into a (semi-)normed space. This is the standard version of the theorem and the proof proceeds via the Baire category theorem. Notably, the version from barelled spaces to locally convex spaces is not included because these spaces do not yet exist in `mathlib`. In addition, it is established that the pointwise limit of continuous linear maps from a Banach space into a normed space is itself a continuous linear map.\n- [x] depends on: #10700", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/banach_steinhaus.lean", "changes": [["add", "theorem", "banach_steinhaus", []], ["add", "theorem", "banach_steinhaus_supr_nnnorm", []], ["add", "def", "continuous_linear_map_of_tendsto", []]]}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}]}, {"timestamp": 1640984600, "sha": "ea710ca6", "message": "feat(data/polynomial/ring_division): golf and generalize `leading_coeff_div_by_monic_of_monic` (#11077)\nNo longer require that the underlying ring is a domain.\nAlso added helper API lemma `leading_coeff_monic_mul`.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "leading_coeff_monic_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "leading_coeff_div_by_monic_of_monic", ["polynomial"]]]}]}, {"timestamp": 1640984599, "sha": "8ec59f9c", "message": "feat(data/int/gcd): add theorem `gcd_least_linear` (#10743)\nFor nonzero integers `a` and `b`, `gcd a b` is the smallest positive integer that can be written in the form `a * x + b * y` for some pair of integers `x` and `y`\nThis is an extension of Bézout's lemma (`gcd_eq_gcd_ab`), which says that `gcd a b` can be written in that form.", "changes": [{"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "gcd_dvd_iff", ["int"]], ["add", "theorem", "gcd_least_linear", ["int"]]]}]}, {"timestamp": 1640978038, "sha": "e4607f8f", "message": "chore(data/sym/basic): golf and add missing simp lemmas (#11160)\nBy changing `cons` to not use pattern matching, `(a :: s).1 = a ::ₘ s.1` is true by `rfl`, which is convenient here and there for golfing.", "changes": [{"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["mod", "def", "cons", ["sym"]], ["add", "theorem", "cons_erase", ["sym"]], ["add", "theorem", "eq_repeat", ["sym"]], ["add", "theorem", "exists_mem", ["sym"]], ["del", "def", "mem", ["sym"]], ["mod", "def", "nil", ["sym"]], ["del", "def", "of_vector", ["sym"]], ["add", "theorem", "of_vector_cons", ["sym"]], ["add", "theorem", "of_vector_nil", ["sym"]]]}]}, {"timestamp": 1640978037, "sha": "fbbbdfa0", "message": "feat(algebra/star/self_adjoint): define the self-adjoint elements of a star additive group (#11135)\nGiven a type `R` with `[add_group R] [star_add_monoid R]`, we define `self_adjoint R` as the additive subgroup of self-adjoint elements, i.e. those such that `star x = x`. To avoid confusion, we move `is_self_adjoint` (which defines this to mean `⟪T x, y⟫ = ⟪x, T y⟫` in an inner product space) to the `inner_product_space` namespace.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/algebra/star/self_adjoint.lean", "changes": [["add", "theorem", "bit0_mem", ["self_adjoint"]], ["add", "theorem", "bit1_mem", ["self_adjoint"]], ["add", "theorem", "coe_inv", ["self_adjoint"]], ["add", "theorem", "coe_mul", ["self_adjoint"]], ["add", "theorem", "coe_one", ["self_adjoint"]], ["add", "theorem", "conjugate'", ["self_adjoint"]], ["add", "theorem", "conjugate", ["self_adjoint"]], ["add", "theorem", "mem_iff", ["self_adjoint"]], ["add", "theorem", "one_mem", ["self_adjoint"]], ["add", "theorem", "star_coe_eq", ["self_adjoint"]], ["add", "def", "self_adjoint", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "apply_clm", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "coe_re_apply_inner_self_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "conj_inner_sym", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "restrict_invariant", ["inner_product_space", "is_self_adjoint"]], ["add", "def", "is_self_adjoint", ["inner_product_space"]], ["add", "theorem", "is_self_adjoint_iff_bilin_form", ["inner_product_space"]], ["del", "theorem", "apply_clm", ["is_self_adjoint"]], ["del", "theorem", "coe_re_apply_inner_self_apply", ["is_self_adjoint"]], ["del", "theorem", "conj_inner_sym", ["is_self_adjoint"]], ["del", "theorem", "restrict_invariant", ["is_self_adjoint"]], ["del", "def", "is_self_adjoint", []], ["del", "theorem", "is_self_adjoint_iff_bilin_form", []]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": [["add", "theorem", "eq_smul_self_of_is_local_extr_on", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "eq_smul_self_of_is_local_extr_on_real", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "has_eigenvalue_infi_of_finite_dimensional", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "has_eigenvalue_supr_of_finite_dimensional", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_local_extr_on", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_max_on", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_min_on", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "has_strict_fderiv_at_re_apply_inner_self", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "linearly_dependent_of_is_local_extr_on", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "subsingleton_of_no_eigenvalue_finite_dimensional", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "eq_smul_self_of_is_local_extr_on", ["is_self_adjoint"]], ["del", "theorem", "eq_smul_self_of_is_local_extr_on_real", ["is_self_adjoint"]], ["del", "theorem", "has_eigenvalue_infi_of_finite_dimensional", ["is_self_adjoint"]], ["del", "theorem", "has_eigenvalue_supr_of_finite_dimensional", ["is_self_adjoint"]], ["del", "theorem", "has_eigenvector_of_is_local_extr_on", ["is_self_adjoint"]], ["del", "theorem", "has_eigenvector_of_is_max_on", ["is_self_adjoint"]], ["del", "theorem", "has_eigenvector_of_is_min_on", ["is_self_adjoint"]], ["del", "theorem", "has_strict_fderiv_at_re_apply_inner_self", ["is_self_adjoint"]], ["del", "theorem", "linearly_dependent_of_is_local_extr_on", ["is_self_adjoint"]], ["del", "theorem", "subsingleton_of_no_eigenvalue_finite_dimensional", ["is_self_adjoint"]]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["add", "theorem", "apply_eigenvector_basis", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "conj_eigenvalue_eq_self", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "diagonalization_apply_self_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "diagonalization_basis_apply_self_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "diagonalization_basis_symm_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "diagonalization_symm_apply", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "direct_sum_submodule_is_internal", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "eigenvector_basis_orthonormal", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "has_eigenvector_eigenvector_basis", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "invariant_orthogonal_eigenspace", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "orthogonal_family_eigenspaces'", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "orthogonal_family_eigenspaces", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces_eq_bot'", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces_eq_bot", ["inner_product_space", "is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces_invariant", ["inner_product_space", "is_self_adjoint"]], ["del", "theorem", "apply_eigenvector_basis", ["is_self_adjoint"]], ["del", "theorem", "conj_eigenvalue_eq_self", ["is_self_adjoint"]], ["del", "theorem", "diagonalization_apply_self_apply", ["is_self_adjoint"]], ["del", "theorem", "diagonalization_basis_apply_self_apply", ["is_self_adjoint"]], ["del", "theorem", "diagonalization_basis_symm_apply", ["is_self_adjoint"]], ["del", "theorem", "diagonalization_symm_apply", ["is_self_adjoint"]], ["del", "theorem", "direct_sum_submodule_is_internal", ["is_self_adjoint"]], ["del", "theorem", "eigenvector_basis_orthonormal", ["is_self_adjoint"]], ["del", "theorem", "has_eigenvector_eigenvector_basis", ["is_self_adjoint"]], ["del", "theorem", "invariant_orthogonal_eigenspace", ["is_self_adjoint"]], ["del", "theorem", "orthogonal_family_eigenspaces'", ["is_self_adjoint"]], ["del", "theorem", "orthogonal_family_eigenspaces", ["is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces", ["is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces_eq_bot'", ["is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces_eq_bot", ["is_self_adjoint"]], ["del", "theorem", "orthogonal_supr_eigenspaces_invariant", ["is_self_adjoint"]]]}]}, {"timestamp": 1640978035, "sha": "fdf09df0", "message": "feat(data/polynomial/degree/lemmas): (nat_)degree_sum_eq_of_disjoint (#11121)\nAlso two helper lemmas on `nat_degree`.\nGeneralize `degree_sum_fin_lt` to semirings", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "nat_degree_add_eq_left_of_nat_degree_lt", ["polynomial"]], ["add", "theorem", "nat_degree_add_eq_right_of_nat_degree_lt", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "degree_sum_eq_of_disjoint", ["polynomial"]], ["add", "theorem", "nat_degree_sum_eq_of_disjoint", ["polynomial"]]]}]}, {"timestamp": 1640967198, "sha": "c4caf0ee", "message": "feat(linear_algebra/multilinear/basic): add dependent version of `multilinear_map.dom_dom_congr_linear_equiv` (#10474)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "Pi_congr_left'_symm_update", ["function"]], ["add", "theorem", "Pi_congr_left'_update", ["function"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "def", "dom_dom_congr_linear_equiv'", ["multilinear_map"]]]}]}, {"timestamp": 1640960150, "sha": "9a38c196", "message": "feat(data/list/indexes): map_with_index_eq_of_fn (#11163)\nSome `list.map_with_index` API.", "changes": [{"oldPath": "src/data/list/indexes.lean", "newPath": "src/data/list/indexes.lean", "changes": [["add", "theorem", "length_map_with_index", ["list"]], ["add", "theorem", "map_with_index_cons", ["list"]], ["add", "theorem", "map_with_index_eq_of_fn", ["list"]], ["add", "theorem", "map_with_index_nil", ["list"]], ["add", "theorem", "nth_le_map_with_index", ["list"]]]}]}, {"timestamp": 1640960149, "sha": "b92afc90", "message": "chore(data/equiv/basic): missing dsimp lemmas (#11159)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "subtype_quotient_equiv_quotient_subtype_mk", ["equiv"]], ["add", "theorem", "subtype_quotient_equiv_quotient_subtype_symm_mk", ["equiv"]]]}]}, {"timestamp": 1640960148, "sha": "bcf1d2dd", "message": "feat(category_theory/sites/plus): Adds a functorial version of `J.diagram P`, functorial in `P`. (#11155)", "changes": [{"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": [["add", "def", "diagram_functor", ["category_theory", "grothendieck_topology"]]]}]}, {"timestamp": 1640960146, "sha": "7b387924", "message": "feat(category_theory/limits/functor_category): Some additional isomorphisms involving (co)limits of functors. (#11152)", "changes": [{"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["add", "def", "colimit_flip_iso_comp_colim", ["category_theory", "limits"]], ["add", "def", "colimit_iso_flip_comp_colim", ["category_theory", "limits"]], ["mod", "def", "colimit_iso_swap_comp_colim", ["category_theory", "limits"]], ["add", "theorem", "colimit_map_colimit_obj_iso_colimit_comp_evaluation_hom", ["category_theory", "limits"]], ["add", "theorem", "colimit_obj_iso_colimit_comp_evaluation_inv_colimit_map", ["category_theory", "limits"]], ["add", "def", "limit_flip_iso_comp_lim", ["category_theory", "limits"]], ["add", "def", "limit_iso_flip_comp_lim", ["category_theory", "limits"]], ["mod", "def", "limit_iso_swap_comp_lim", ["category_theory", "limits"]], ["add", "theorem", "limit_map_limit_obj_iso_limit_comp_evaluation_hom", ["category_theory", "limits"]], ["add", "theorem", "limit_obj_iso_limit_comp_evaluation_inv_limit_map", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["add", "def", "flip_comp_evaluation", ["category_theory"]]]}]}, {"timestamp": 1640960145, "sha": "b142b697", "message": "feat(data/list/count): add lemma `count_le_count_map` (#11148)\nGeneralises `count_map_map`: for any `f : α → β` (not necessarily injective), `count x l ≤ count (f x) (map f l)`", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "count_le_count_map", ["list"]], ["del", "theorem", "count_map_map", ["list"]], ["add", "theorem", "count_map_of_injective", ["list"]]]}]}, {"timestamp": 1640960144, "sha": "dc57b544", "message": "feat(ring_theory/localization): Transferring `is_localization` along equivs. (#11146)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_fraction_ring_iff_of_base_ring_equiv", ["is_fraction_ring"]], ["add", "theorem", "is_localization_iff_of_alg_equiv", ["is_localization"]], ["add", "theorem", "is_localization_iff_of_base_ring_equiv", ["is_localization"]], ["add", "theorem", "is_localization_iff_of_ring_equiv", ["is_localization"]], ["add", "theorem", "is_localization_of_alg_equiv", ["is_localization"]], ["add", "theorem", "is_localization_of_base_ring_equiv", ["is_localization"]], ["del", "theorem", "iso_comp", ["is_localization"]]]}]}, {"timestamp": 1640960143, "sha": "bc5e0081", "message": "feat(data/dfinsupp/order): Pointwise order on finitely supported dependent functions (#11138)\nThis defines the pointwise order on `Π₀ i, α i`, in very much the same way as in `data.finsupp.order`. It also moves `data.dfinsupp` to `data.dfinsupp.basic`.", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/dfinsupp/order.lean", "changes": [["add", "theorem", "add_eq_zero_iff", ["dfinsupp"]], ["add", "theorem", "coe_fn_mono", ["dfinsupp"]], ["add", "theorem", "coe_tsub", ["dfinsupp"]], ["add", "theorem", "disjoint_iff", ["dfinsupp"]], ["add", "theorem", "inf_apply", ["dfinsupp"]], ["add", "theorem", "le_def", ["dfinsupp"]], ["add", "theorem", "le_iff'", ["dfinsupp"]], ["add", "theorem", "le_iff", ["dfinsupp"]], ["add", "theorem", "not_mem_support_iff", ["dfinsupp"]], ["add", "def", "order_embedding_to_fun", ["dfinsupp"]], ["add", "theorem", "order_embedding_to_fun_apply", ["dfinsupp"]], ["add", "theorem", "single_le_iff", ["dfinsupp"]], ["add", "theorem", "single_tsub", ["dfinsupp"]], ["add", "theorem", "subset_support_tsub", ["dfinsupp"]], ["add", "theorem", "sup_apply", ["dfinsupp"]], ["add", "theorem", "support_inf", ["dfinsupp"]], ["add", "theorem", "support_sup", ["dfinsupp"]], ["add", "theorem", "support_tsub", ["dfinsupp"]], ["add", "theorem", "tsub_apply", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1640960142, "sha": "2e8ebdc0", "message": "feat(algebra/homology): Construction of null homotopic chain complex … (#11125)\n…morphisms and one lemma on addivity of homotopies", "changes": [{"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": [["add", "def", "add", ["homotopy"]], ["add", "def", "null_homotopic_map'", ["homotopy"]], ["add", "theorem", "null_homotopic_map'_f", ["homotopy"]], ["add", "theorem", "null_homotopic_map'_f_eq_zero", ["homotopy"]], ["add", "theorem", "null_homotopic_map'_f_of_not_rel_left", ["homotopy"]], ["add", "theorem", "null_homotopic_map'_f_of_not_rel_right", ["homotopy"]], ["add", "def", "null_homotopic_map", ["homotopy"]], ["add", "theorem", "null_homotopic_map_f", ["homotopy"]], ["add", "theorem", "null_homotopic_map_f_eq_zero", ["homotopy"]], ["add", "theorem", "null_homotopic_map_f_of_not_rel_left", ["homotopy"]], ["add", "theorem", "null_homotopic_map_f_of_not_rel_right", ["homotopy"]], ["add", "def", "null_homotopy'", ["homotopy"]], ["add", "def", "null_homotopy", ["homotopy"]]]}]}, {"timestamp": 1640960141, "sha": "ff7e837a", "message": "feat(combinatorics/configuration): Variant of `exists_injective_of_card_le` (#11116)\nProves a variant of `exists_injective_of_card_le` that will be useful in an upcoming proof.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "exists_bijective_of_card_eq", ["configuration", "has_lines"]]]}]}, {"timestamp": 1640960141, "sha": "1fd70b1b", "message": "refactor(algebra/big_operators/basic): Reorder lemmas (#11113)\nThis PR does the following things:\n- Move `prod_bij` and `prod_bij'` earlier in the file, so that they can be put to use.\n- Move `prod_product` and `prod_product'` past `prod_sigma` and `prod_sigma'` down to `prod_product_right` and `prod_product_right'`.\n- Use `prod_bij` and `prod_sigma` to give an easier proof of `prod_product`.\n- The new proof introduces `prod_finset_product` and the remaining three analogs of the four `prod_product` lemmas.\n`prod_finset_product` is a lemma that I found helpful in my own work.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_finset_product'", ["finset"]], ["add", "theorem", "prod_finset_product", ["finset"]], ["add", "theorem", "prod_finset_product_right'", ["finset"]], ["add", "theorem", "prod_finset_product_right", ["finset"]]]}]}, {"timestamp": 1640960140, "sha": "99e3ffbd", "message": "feat(data/fin/tuple): new directory and file on sorting (#11096)\nCode written by @kmill at https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Permutation.20to.20make.20a.20function.20monotone\nCo-authored by: Kyle Miller ", "changes": [{"oldPath": "src/data/fin/tuple.lean", "newPath": "src/data/fin/tuple/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/fin/tuple/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/fin/tuple/sort.lean", "changes": [["add", "theorem", "card", ["tuple", "graph"]], ["add", "def", "proj", ["tuple", "graph"]], ["add", "def", "graph", ["tuple"]], ["add", "def", "graph_equiv₁", ["tuple"]], ["add", "def", "graph_equiv₂", ["tuple"]], ["add", "theorem", "monotone_proj", ["tuple"]], ["add", "theorem", "monotone_sort", ["tuple"]], ["add", "theorem", "proj_equiv₁'", ["tuple"]], ["add", "theorem", "self_comp_sort", ["tuple"]], ["add", "def", "sort", ["tuple"]]]}]}, {"timestamp": 1640960139, "sha": "06a01971", "message": "feat(category_theory/bicategory/basic): define bicategories (#11079)\nThis PR defines bicategories and gives basic lemmas.", "changes": [{"oldPath": null, "newPath": "src/category_theory/bicategory/basic.lean", "changes": [["add", "theorem", "associator_conjugation_left", ["category_theory", "bicategory"]], ["add", "theorem", "associator_conjugation_middle", ["category_theory", "bicategory"]], ["add", "theorem", "associator_conjugation_right", ["category_theory", "bicategory"]], ["add", "theorem", "associator_inv_conjugation_left", ["category_theory", "bicategory"]], ["add", "theorem", "associator_inv_conjugation_middle", ["category_theory", "bicategory"]], ["add", "theorem", "associator_inv_conjugation_right", ["category_theory", "bicategory"]], ["add", "theorem", "associator_inv_naturality_left", ["category_theory", "bicategory"]], ["add", "theorem", "associator_inv_naturality_middle", ["category_theory", "bicategory"]], ["add", "theorem", "associator_inv_naturality_right", ["category_theory", "bicategory"]], ["add", "theorem", "hom_inv_whisker_left", ["category_theory", "bicategory"]], ["add", "theorem", "hom_inv_whisker_right", ["category_theory", "bicategory"]], ["add", "theorem", "inv_hom_whisker_left", ["category_theory", "bicategory"]], ["add", "theorem", "inv_hom_whisker_right", ["category_theory", "bicategory"]], ["add", "theorem", "inv_whisker_left", ["category_theory", "bicategory"]], ["add", "theorem", "inv_whisker_right", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_comp'", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_comp", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_comp_inv'", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_comp_inv", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_conjugation", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_inv_naturality", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_inv_whisker_right", ["category_theory", "bicategory"]], ["add", "theorem", "left_unitor_whisker_right", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_hom_hom_inv_hom_hom", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_hom_hom_inv_inv_hom", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_hom_inv_inv_inv_hom", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_hom_inv_inv_inv_inv", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_inv", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_inv_hom_hom_hom_hom", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_inv_hom_hom_hom_inv", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_inv_inv_hom_hom_inv", ["category_theory", "bicategory"]], ["add", "theorem", "pentagon_inv_inv_hom_inv_inv", ["category_theory", "bicategory"]], ["add", "theorem", "right_unitor_comp", ["category_theory", "bicategory"]], ["add", "theorem", "right_unitor_comp_inv", ["category_theory", "bicategory"]], ["add", "theorem", "right_unitor_conjugation", ["category_theory", "bicategory"]], ["add", "theorem", "right_unitor_inv_naturality", ["category_theory", "bicategory"]], ["add", "theorem", "triangle_assoc_comp_left", ["category_theory", "bicategory"]], ["add", "theorem", "triangle_assoc_comp_left_inv", ["category_theory", "bicategory"]], ["add", "theorem", "triangle_assoc_comp_right", ["category_theory", "bicategory"]], ["add", "theorem", "triangle_assoc_comp_right_inv", ["category_theory", "bicategory"]], ["add", "theorem", "unitors_equal", ["category_theory", "bicategory"]], ["add", "theorem", "unitors_inv_equal", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_left_iff", ["category_theory", "bicategory"]], ["add", "def", "whisker_left_iso", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_left_right_unitor", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_left_right_unitor_inv", ["category_theory", "bicategory"]], ["add", "theorem", "whisker_right_iff", ["category_theory", "bicategory"]], ["add", "def", "whisker_right_iso", ["category_theory", "bicategory"]]]}]}, {"timestamp": 1640960137, "sha": "a5573f37", "message": "feat(data/{fin,multi}set/powerset): add some lemmas about powerset_len (#10866)\nFor both multisets and finsets\nFrom flt-regular", "changes": [{"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["add", "theorem", "map_val_val_powerset_len", ["finset"]], ["add", "theorem", "powerset_len_card_add", ["finset"]]]}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": [["add", "theorem", "powerset_len_card_add", ["multiset"]], ["add", "theorem", "powerset_len_empty", ["multiset"]], ["add", "theorem", "powerset_len_map", ["multiset"]], ["mod", "theorem", "powerset_len_zero_right", ["multiset"]]]}]}, {"timestamp": 1640953561, "sha": "78a9900b", "message": "refactor(algebra/group/hom_instances): relax semiring to non_unital_non_assoc_semiring in add_monoid_hom.mul (#11165)\nPreviously `algebra.group.hom_instances` ended with some results showing that left and right multiplication operators are additive monoid homomorphisms between (unital, associative) semirings. The assumptions of a unit and associativity are not required for these results to work, so we relax the condition to `non_unital_non_assoc_semiring`.\nRequired for #11073 .", "changes": [{"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}]}, {"timestamp": 1640936648, "sha": "dc1525fb", "message": "docs(data/sum/basic): Expand module docstring and cleanup (#11158)\nThis moves `data.sum` to `data.sum.basic`, provides a proper docstring for it, cleans it up.\nThere are no new declarations, just some file rearrangement, variable grouping, unindentation, and a `protected` attribute for `sum.lex.inl`/`sum.lex.inr` to avoid them clashing with `sum.inl`/`sum.inr`.", "changes": [{"oldPath": "src/control/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum/basic.lean", "changes": [["mod", "theorem", "sum_elim", ["function", "injective"]], ["del", "theorem", "exists", ["sum"]], ["del", "theorem", "forall", ["sum"]], ["mod", "def", "get_left", ["sum"]], ["mod", "def", "get_right", ["sum"]], ["mod", "theorem", "inl_injective", ["sum"]], ["mod", "theorem", "inr_injective", ["sum"]], ["mod", "def", "is_left", ["sum"]], ["mod", "def", "is_right", ["sum"]], ["add", "theorem", "mono", ["sum", "lex"]], ["add", "theorem", "mono_left", ["sum", "lex"]], ["add", "theorem", "mono_right", ["sum", "lex"]], ["mod", "inductive", "lex", ["sum"]], ["mod", "theorem", "lex_acc_inl", ["sum"]], ["mod", "theorem", "lex_acc_inr", ["sum"]], ["mod", "theorem", "lex_inl_inl", ["sum"]], ["mod", "theorem", "lex_inr_inl", ["sum"]], ["mod", "theorem", "lex_inr_inr", ["sum"]], ["mod", "theorem", "lex_wf", ["sum"]], ["mod", "theorem", "swap_left_inverse", ["sum"]], ["mod", "theorem", "swap_right_inverse", ["sum"]], ["mod", "theorem", "swap_swap", ["sum"]], ["mod", "theorem", "swap_swap_eq", ["sum"]], ["mod", "theorem", "update_elim_inl", ["sum"]], ["mod", "theorem", "update_elim_inr", ["sum"]], ["mod", "theorem", "update_inl_apply_inl", ["sum"]], ["mod", "theorem", "update_inl_apply_inr", ["sum"]], ["mod", "theorem", "update_inl_comp_inl", ["sum"]], ["mod", "theorem", "update_inl_comp_inr", ["sum"]], ["mod", "theorem", "update_inr_apply_inl", ["sum"]], ["mod", "theorem", "update_inr_apply_inr", ["sum"]], ["mod", "theorem", "update_inr_comp_inl", ["sum"]], ["mod", "theorem", "update_inr_comp_inr", ["sum"]], ["add", "theorem", "«exists»", ["sum"]], ["add", "theorem", "«forall»", ["sum"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/tactic/fresh_names.lean", "newPath": "src/tactic/fresh_names.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}]}, {"timestamp": 1640900371, "sha": "e1a8b886", "message": "feat(tactic/itauto): add support for [decidable p] assumptions (#10744)\nThis allows proving theorems like the following, which use excluded middle selectively through `decidable` assumptions:\n```\nexample (p q r : Prop) [decidable p] : (p → (q ∨ r)) → ((p → q) ∨ (p → r)) := by itauto\n```\nThis also fixes a bug in the proof search order of the original itauto implementation causing nontermination in one of the new tests, which also makes the \"big test\" at the end run instantly.\nAlso adds a `!` option to enable decidability for all propositions using classical logic.\nBecause adding decidability instances can be expensive for proof search, they are disabled by default. You can specify specific decidable instances to add by `itauto [p, q]`, or use `itauto*` which adds all decidable atoms. (The `!` option is useless on its own, and should be combined with `*` or `[p]` options.)", "changes": [{"oldPath": "src/tactic/itauto.lean", "newPath": "src/tactic/itauto.lean", "changes": [["add", "def", "is_ok", ["tactic", "itauto"]], ["add", "def", "map_proof", ["tactic", "itauto"]], ["add", "def", "when_ok", ["tactic", "itauto"]]]}, {"oldPath": "test/itauto.lean", "newPath": "test/itauto.lean", "changes": []}]}, {"timestamp": 1640895392, "sha": "7f928329", "message": "feat(category_theory/currying): `flip` is isomorphic to uncurrying, swapping, and currying. (#11151)", "changes": [{"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": [["add", "def", "flip_iso_curry_swap_uncurry", ["category_theory"]]]}]}, {"timestamp": 1640889683, "sha": "3dad7c8c", "message": "chore(algebra/ring/comp_typeclasses): fix doctrings (#11150)\nThis fixes the docstrings of two typeclasses.", "changes": [{"oldPath": "src/algebra/ring/comp_typeclasses.lean", "newPath": "src/algebra/ring/comp_typeclasses.lean", "changes": []}]}, {"timestamp": 1640883088, "sha": "682f1e63", "message": "feat(analysis/normed_space/operator_norm): generalize linear_map.bound_of_ball_bound (#11140)\nThis was proved over `is_R_or_C` but holds (in a slightly different form) over all nondiscrete normed fields.", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": [["add", "theorem", "bound_of_ball_bound'", ["linear_map"]], ["del", "theorem", "bound_of_ball_bound", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "bound_of_ball_bound", ["linear_map"]]]}]}, {"timestamp": 1640883087, "sha": "c0b5ce12", "message": "feat(data/nat/choose/basic): choose_eq_zero_iff (#11120)", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "theorem", "choose_eq_zero_iff", ["nat"]]]}]}, {"timestamp": 1640883087, "sha": "993a470e", "message": "feat(analysis/special_functions/log): add log_div_self_antitone_on (#10985)\nAdds lemma `log_div_self_antitone_on`, which shows that `log x / x` is decreasing when `exp 1 \\le x`. Needed for Bertrand's postulate (#8002).", "changes": [{"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log.lean", "changes": [["add", "theorem", "log_div_self_antitone_on", ["real"]], ["add", "theorem", "log_le_sub_one_of_pos", ["real"]]]}]}, {"timestamp": 1640876086, "sha": "ac976755", "message": "feat(data/polynomial/degree/definition): nat_degree_monomial in ite form (#11123)\nChanged the proof usage elsewhere.\nThis helps deal with sums of over monomials.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "nat_degree_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}]}, {"timestamp": 1640876085, "sha": "424773a7", "message": "feat(data/finset/fold): fold_const, fold_ite (#11122)", "changes": [{"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": [["add", "theorem", "fold_const", ["finset"]], ["add", "theorem", "fold_ite'", ["finset"]], ["add", "theorem", "fold_ite", ["finset"]]]}]}, {"timestamp": 1640876084, "sha": "c8a57623", "message": "feat(order/galois_connection): gc magic (#11114)\nsee [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.28l.E2.82.81.20S.29.2Emap.20.CF.83.20.E2.89.A4.20l.E2.82.82.20.28S.2Emap.20.E2.87.91.CF.83.29).", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "l_comm_iff_u_comm", ["galois_connection"]], ["add", "theorem", "l_comm_of_u_comm", ["galois_connection"]], ["add", "theorem", "l_eq", ["galois_connection"]], ["add", "theorem", "u_comm_of_l_comm", ["galois_connection"]], ["add", "theorem", "u_eq", ["galois_connection"]]]}]}, {"timestamp": 1640876083, "sha": "f6d0f8d1", "message": "refactor(analysis/normed_space/operator_norm): split a proof (#11112)\nSplit the proof of `continuous_linear_map.complete_space` into\nreusable steps.\nMotivated by #9862", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "lipschitz_apply", ["continuous_linear_map"]], ["add", "def", "of_mem_closure_image_coe_bounded", ["continuous_linear_map"]], ["add", "def", "of_tendsto_of_bounded_range", ["continuous_linear_map"]], ["add", "theorem", "tendsto_of_tendsto_pointwise_of_cauchy_seq", ["continuous_linear_map"]]]}]}, {"timestamp": 1640876082, "sha": "11de8674", "message": "feat(data/fin/interval): add lemmas (#11102)\nFrom flt-regular.", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "bot_eq_zero", ["fin"]], ["add", "theorem", "top_eq_last", ["fin"]]]}, {"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["add", "theorem", "card_filter_ge", ["fin"]], ["add", "theorem", "card_filter_gt", ["fin"]], ["add", "theorem", "card_filter_le", ["fin"]], ["add", "theorem", "card_filter_le_le", ["fin"]], ["add", "theorem", "card_filter_le_lt", ["fin"]], ["add", "theorem", "card_filter_lt", ["fin"]], ["add", "theorem", "card_filter_lt_le", ["fin"]], ["add", "theorem", "card_filter_lt_lt", ["fin"]]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "filter_ge_eq_Iic", ["finset"]], ["add", "theorem", "filter_gt_eq_Iio", ["finset"]], ["add", "theorem", "filter_le_eq_Ici", ["finset"]], ["add", "theorem", "filter_le_le_eq_Icc", ["finset"]], ["add", "theorem", "filter_le_lt_eq_Ico", ["finset"]], ["add", "theorem", "filter_lt_eq_Ioi", ["finset"]], ["add", "theorem", "filter_lt_le_eq_Ioc", ["finset"]], ["add", "theorem", "filter_lt_lt_eq_Ioo", ["finset"]]]}]}, {"timestamp": 1640876081, "sha": "3398efa6", "message": "feat(topology/homeomorph): homeo of continuous equivalence from compact to T2 (#11072)", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "continuous_symm_of_equiv_compact_to_t2", ["continuous"]], ["add", "theorem", "t1_counterexample", ["continuous", "homeo_of_equiv_compact_to_t2"]], ["add", "def", "homeo_of_equiv_compact_to_t2", ["continuous"]], ["del", "theorem", "compact_space", ["homeomorph"]], ["del", "theorem", "t2_space", ["homeomorph"]]]}]}, {"timestamp": 1640876080, "sha": "7b1c7751", "message": "chore(category_theory/adjunction/limits): generalize universe (#11070)", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["mod", "def", "cocones_iso", ["category_theory", "adjunction"]], ["mod", "def", "cocones_iso_component_hom", ["category_theory", "adjunction"]], ["mod", "def", "cocones_iso_component_inv", ["category_theory", "adjunction"]], ["mod", "def", "cones_iso", ["category_theory", "adjunction"]], ["mod", "def", "cones_iso_component_hom", ["category_theory", "adjunction"]], ["mod", "def", "cones_iso_component_inv", ["category_theory", "adjunction"]], ["mod", "theorem", "has_colimits_of_equivalence", ["category_theory", "adjunction"]], ["mod", "theorem", "has_limits_of_equivalence", ["category_theory", "adjunction"]], ["mod", "def", "left_adjoint_preserves_colimits", ["category_theory", "adjunction"]], ["mod", "def", "right_adjoint_preserves_limits", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cone_category.lean", "newPath": "src/category_theory/limits/cone_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["add", "theorem", "has_colimits_of_shape", ["category_theory", "limits", "has_colimits"]], ["del", "theorem", "has_limits_of_shape", ["category_theory", "limits", "has_colimits"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": [["mod", "theorem", "has_initial_of_has_initial_of_preserves_colimit", ["category_theory", "limits"]], ["mod", "theorem", "has_terminal_of_has_terminal_of_preserves_limit", ["category_theory", "limits"]], ["mod", "def", "is_colimit_of_has_initial_of_preserves_colimit", ["category_theory", "limits"]], ["mod", "def", "is_initial_obj", ["category_theory", "limits", "is_initial"]], ["mod", "def", "is_initial_of_obj", ["category_theory", "limits", "is_initial"]], ["mod", "def", "is_limit_of_has_terminal_of_preserves_limit", ["category_theory", "limits"]], ["mod", "def", "is_terminal_obj", ["category_theory", "limits", "is_terminal"]], ["mod", "def", "is_terminal_of_obj", ["category_theory", "limits", "is_terminal"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["mod", "def", "as_empty_cocone", ["category_theory", "limits"]], ["mod", "def", "as_empty_cone", ["category_theory", "limits"]], ["mod", "def", "has_initial", ["category_theory", "limits"]], ["add", "theorem", "has_initial_change_diagram", ["category_theory", "limits"]], ["add", "theorem", "has_initial_change_universe", ["category_theory", "limits"]], ["mod", "def", "has_terminal", ["category_theory", "limits"]], ["add", "theorem", "has_terminal_change_diagram", ["category_theory", "limits"]], ["add", "theorem", "has_terminal_change_universe", ["category_theory", "limits"]], ["mod", "def", "initial", ["category_theory", "limits"]], ["add", "def", "is_colimit_change_empty_cocone", ["category_theory", "limits"]], ["add", "def", "is_colimit_empty_cocone_equiv", ["category_theory", "limits"]], ["mod", "def", "is_initial", ["category_theory", "limits"]], ["add", "def", "is_limit_change_empty_cone", ["category_theory", "limits"]], ["add", "def", "is_limit_empty_cone_equiv", ["category_theory", "limits"]], ["mod", "def", "is_terminal", ["category_theory", "limits"]], ["mod", "def", "terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["mod", "theorem", "has_colimits_of_reflective", ["category_theory"]], ["mod", "theorem", "has_limits_of_reflective", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "changes": [["mod", "def", "left_unitor", ["category_theory", "limits", "binary_fan"]], ["mod", "def", "right_unitor", ["category_theory", "limits", "binary_fan"]]]}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": [["mod", "def", "empty", ["category_theory", "functor"]], ["add", "def", "empty_equivalence", ["category_theory", "functor"]], ["mod", "theorem", "empty_ext'", ["category_theory", "functor"]], ["mod", "def", "empty_ext", ["category_theory", "functor"]], ["mod", "def", "unique_from_empty", ["category_theory", "functor"]]]}]}, {"timestamp": 1640876079, "sha": "d49ae127", "message": "feat(topology/homotopy): Add homotopy product (#10946)\nBinary product and pi product of homotopies.", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "def", "pi", ["continuous_map"]], ["add", "theorem", "pi_eval", ["continuous_map"]], ["add", "theorem", "prod_eval", ["continuous_map"]], ["mod", "def", "prod_map", ["continuous_map"]], ["mod", "def", "prod_mk", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/homotopy/product.lean", "changes": [["add", "def", "pi", ["continuous_map", "homotopy"]], ["add", "def", "prod", ["continuous_map", "homotopy"]], ["add", "def", "pi", ["continuous_map", "homotopy_rel"]], ["add", "def", "prod", ["continuous_map", "homotopy_rel"]]]}]}, {"timestamp": 1640873695, "sha": "52841fbf", "message": "feat(ring_theory/polynomial/cyclotomic/basic): add cyclotomic_expand_eq_cyclotomic_mul (#11005)\nWe prove that, if `¬p ∣ n`, then `expand R p (cyclotomic n R) = (cyclotomic (n * p) R) * (cyclotomic n R)`\n- [x] depends on: #10965", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "irreducible_rat", ["polynomial", "cyclotomic"]], ["add", "theorem", "is_coprime_rat", ["polynomial", "cyclotomic"]], ["add", "theorem", "is_primitive", ["polynomial", "cyclotomic"]], ["add", "theorem", "cyclotomic_eq_minpoly_rat", ["polynomial"]], ["add", "theorem", "cyclotomic_expand_eq_cyclotomic_mul", ["polynomial"]], ["add", "theorem", "cyclotomic_injective", ["polynomial"]]]}]}, {"timestamp": 1640852352, "sha": "655c2f06", "message": "chore(topology/algebra/weak_dual_topology): review (#11141)\n* Fix universes in `pi.has_continuous_smul`.\n* Add `function.injective.embedding_induced` and\n `weak_dual.coe_fn_embedding`.\n* Golf some proofs.\n* Review `weak_dual.module` etc instances to ensure, e.g.,\n `module ℝ (weak_dual ℂ E)`.", "changes": [{"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/weak_dual_topology.lean", "newPath": "src/topology/algebra/weak_dual_topology.lean", "changes": [["add", "theorem", "coe_fn_embedding", ["weak_dual"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "embedding_induced", ["function", "injective"]]]}]}, {"timestamp": 1640847130, "sha": "04071ae3", "message": "feat(analysis/inner_product_space/adjoint): define the adjoint for linear maps between finite-dimensional spaces (#11119)\nThis PR defines the adjoint of a linear map between finite-dimensional inner product spaces. We use the fact that such maps are always continuous and define it as the adjoint of the corresponding continuous linear map.", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "def", "adjoint", ["linear_map"]], ["add", "theorem", "adjoint_adjoint", ["linear_map"]], ["add", "theorem", "adjoint_comp", ["linear_map"]], ["add", "theorem", "adjoint_eq_to_clm_adjoint", ["linear_map"]], ["add", "theorem", "adjoint_inner_left", ["linear_map"]], ["add", "theorem", "adjoint_inner_right", ["linear_map"]], ["add", "theorem", "adjoint_to_continuous_linear_map", ["linear_map"]], ["add", "theorem", "eq_adjoint_iff", ["linear_map"]], ["add", "theorem", "is_adjoint_pair", ["linear_map"]], ["add", "theorem", "star_eq_adjoint", ["linear_map"]]]}]}, {"timestamp": 1640847129, "sha": "9443a7b3", "message": "feat(data/nat/prime): min fac of a power (#11115)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "pow_min_fac", ["nat"]], ["add", "theorem", "min_fac_eq", ["nat", "prime"]], ["add", "theorem", "pow_min_fac", ["nat", "prime"]]]}]}, {"timestamp": 1640847129, "sha": "0b6f9ebb", "message": "feat(logic/small): The image of a small set is small (#11108)\nA followup to #11029. Only realized this could be easily proved once that PR was approved.", "changes": [{"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}]}, {"timestamp": 1640847128, "sha": "864a43bc", "message": "feat(combinatorics/simple_graph): lemmas describing edge set of subgraphs (#11087)", "changes": [{"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "edge_set", ["disjoint"]], ["add", "theorem", "edge_set_bot", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_inf", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_mono", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_sup", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_top", ["simple_graph", "subgraph"]], ["add", "theorem", "inf_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "spanning_coe_bot", ["simple_graph", "subgraph"]], ["add", "theorem", "sup_adj", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1640847126, "sha": "8f873b72", "message": "chore(data/nat/prime): move some results (#11066)\nI was expecting there'd be more that could be moved, but it doesn't seem like it.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "irreducible_iff_nat_prime", []], ["add", "theorem", "irreducible_iff_prime", ["nat"]], ["add", "theorem", "prime_iff", ["nat"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["del", "theorem", "irreducible_iff_nat_prime", []], ["del", "theorem", "irreducible_iff_prime", ["nat"]], ["del", "theorem", "prime_iff", ["nat"]]]}]}, {"timestamp": 1640844259, "sha": "0c149c90", "message": "feat(analysis/special_functions/log): sum of logs is log of product (#11106)", "changes": [{"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log.lean", "changes": [["add", "theorem", "log_prod", ["real"]]]}]}, {"timestamp": 1640830259, "sha": "23fdf99d", "message": "chore(measure_theory/function/lp_space): move `fact`s (#11107)\nMove from `measure_theory/function/lp_space` to `data/real/ennreal` the `fact`s\n- `fact_one_le_one_ennreal`\n- `fact_one_le_two_ennreal`\n- `fact_one_le_top_ennreal`\nso that they can be used not just in the measure theory development of `Lp` space but also in the new `lp` spaces.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "fact_one_le_one_ennreal", []], ["add", "theorem", "fact_one_le_top_ennreal", []], ["add", "theorem", "fact_one_le_two_ennreal", []]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["del", "theorem", "fact_one_le_one_ennreal", []], ["del", "theorem", "fact_one_le_top_ennreal", []], ["del", "theorem", "fact_one_le_two_ennreal", []]]}]}, {"timestamp": 1640826153, "sha": "4f3e99a6", "message": "feat(topology/algebra): range of `coe_fn : (M₁ →ₛₗ[σ] M₂) → (M₁ → M₂)` is closed (#11105)\nMotivated by #9862", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "is_closed_set_of_map_smul", []], ["add", "theorem", "is_closed_range_coe", ["linear_map"]], ["add", "def", "linear_map_of_mem_closure_range_coe", []], ["mod", "def", "linear_map_of_tendsto", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "is_closed_set_of_map_mul", []], ["add", "theorem", "is_closed_set_of_map_one", []], ["add", "theorem", "is_closed_range_coe", ["monoid_hom"]], ["add", "def", "monoid_hom_of_mem_closure_range_coe", []], ["mod", "def", "monoid_hom_of_tendsto", []]]}]}, {"timestamp": 1640823650, "sha": "ea95523d", "message": "feat(analysis/normed_space/dual): add lemmas, golf (#11132)\n* add `polar_univ`, `is_closed_polar`, `polar_gc`, `polar_Union`,\n `polar_union`, `polar_antitone`, `polar_zero`, `polar_closure`;\n* extract `polar_ball_subset_closed_ball_div` and\n `closed_ball_inv_subset_polar_closed_ball` out of the proofs of\n `polar_closed_ball` and `polar_bounded_of_nhds_zero`;\n* rename `polar_bounded_of_nhds_zero` to\n `bounded_polar_of_mem_nhds_zero`, use `metric.bounded`;\n* use `r⁻¹` instead of `1 / r` in `polar_closed_ball`. This is the\n simp normal form (though we might want to change this in the future).", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["add", "theorem", "bounded_polar_of_mem_nhds_zero", []], ["add", "theorem", "closed_ball_inv_subset_polar_closed_ball", []], ["add", "theorem", "is_closed_polar", []], ["add", "theorem", "polar_Union", []], ["add", "theorem", "polar_antitone", []], ["add", "theorem", "polar_ball_subset_closed_ball_div", []], ["del", "theorem", "polar_bounded_of_nhds_zero", []], ["add", "theorem", "polar_closure", []], ["mod", "theorem", "polar_empty", []], ["add", "theorem", "polar_gc", []], ["add", "theorem", "polar_union", []], ["add", "theorem", "polar_univ", []], ["add", "theorem", "polar_zero", []]]}]}, {"timestamp": 1640815123, "sha": "be17b92a", "message": "feat(topology/metric_space/lipschitz): image of a bdd set (#11134)\nProve that `f '' s` is bounded provided that `f` is Lipschitz\ncontinuous and `s` is bounded.", "changes": [{"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "bounded_image", ["lipschitz_with"]]]}]}, {"timestamp": 1640815122, "sha": "5bfd9245", "message": "chore(analysis/normed_space/basic): add `normed_space.unbounded_univ` (#11131)\nExtract it from the proof of `normed_space.noncompact_space`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1640815121, "sha": "5ac87153", "message": "split(data/finsupp/multiset): Split off `data.finsupp.basic` (#11110)\nThis moves `finsupp.to_multiset`, `multiset.to_finsupp` and `finsupp.order_iso_multiset` to a new file `data.finsupp.multiset`.", "changes": [{"oldPath": "src/data/finsupp/antidiagonal.lean", "newPath": "src/data/finsupp/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "theorem", "card_to_multiset", ["finsupp"]], ["del", "theorem", "count_to_multiset", ["finsupp"]], ["del", "theorem", "mem_to_multiset", ["finsupp"]], ["del", "theorem", "prod_to_multiset", ["finsupp"]], ["del", "theorem", "to_finset_to_multiset", ["finsupp"]], ["del", "def", "to_multiset", ["finsupp"]], ["del", "theorem", "to_multiset_add", ["finsupp"]], ["del", "theorem", "to_multiset_apply", ["finsupp"]], ["del", "theorem", "to_multiset_map", ["finsupp"]], ["del", "theorem", "to_multiset_single", ["finsupp"]], ["del", "theorem", "to_multiset_sum", ["finsupp"]], ["del", "theorem", "to_multiset_sum_single", ["finsupp"]], ["del", "theorem", "to_multiset_symm_apply", ["finsupp"]], ["del", "theorem", "to_multiset_to_finsupp", ["finsupp"]], ["del", "theorem", "to_multiset_zero", ["finsupp"]], ["del", "def", "to_finsupp", ["multiset"]], ["del", "theorem", "to_finsupp_add", ["multiset"]], ["del", "theorem", "to_finsupp_apply", ["multiset"]], ["del", "theorem", "to_finsupp_eq_iff", ["multiset"]], ["del", "theorem", "to_finsupp_singleton", ["multiset"]], ["del", "theorem", "to_finsupp_support", ["multiset"]], ["del", "theorem", "to_finsupp_to_multiset", ["multiset"]], ["del", "theorem", "to_finsupp_zero", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/finsupp/multiset.lean", "changes": [["add", "theorem", "card_to_multiset", ["finsupp"]], ["add", "theorem", "coe_order_iso_multiset", ["finsupp"]], ["add", "theorem", "coe_order_iso_multiset_symm", ["finsupp"]], ["add", "theorem", "count_to_multiset", ["finsupp"]], ["add", "theorem", "lt_wf", ["finsupp"]], ["add", "theorem", "mem_to_multiset", ["finsupp"]], ["add", "def", "order_iso_multiset", ["finsupp"]], ["add", "theorem", "prod_to_multiset", ["finsupp"]], ["add", "theorem", "sum_id_lt_of_lt", ["finsupp"]], ["add", "theorem", "to_finset_to_multiset", ["finsupp"]], ["add", "def", "to_multiset", ["finsupp"]], ["add", "theorem", "to_multiset_add", ["finsupp"]], ["add", "theorem", "to_multiset_apply", ["finsupp"]], ["add", "theorem", "to_multiset_map", ["finsupp"]], ["add", "theorem", "to_multiset_single", ["finsupp"]], ["add", "theorem", "to_multiset_strict_mono", ["finsupp"]], ["add", "theorem", "to_multiset_sum", ["finsupp"]], ["add", "theorem", "to_multiset_sum_single", ["finsupp"]], ["add", "theorem", "to_multiset_symm_apply", ["finsupp"]], ["add", "theorem", "to_multiset_to_finsupp", ["finsupp"]], ["add", "theorem", "to_multiset_zero", ["finsupp"]], ["add", "def", "to_finsupp", ["multiset"]], ["add", "theorem", "to_finsupp_add", ["multiset"]], ["add", "theorem", "to_finsupp_apply", ["multiset"]], ["add", "theorem", "to_finsupp_eq_iff", ["multiset"]], ["add", "theorem", "to_finsupp_singleton", ["multiset"]], ["add", "theorem", "to_finsupp_strict_mono", ["multiset"]], ["add", "theorem", "to_finsupp_support", ["multiset"]], ["add", "theorem", "to_finsupp_to_multiset", ["multiset"]], ["add", "theorem", "to_finsupp_zero", ["multiset"]]]}, {"oldPath": "src/data/finsupp/order.lean", "newPath": "src/data/finsupp/order.lean", "changes": [["del", "theorem", "coe_order_iso_multiset", ["finsupp"]], ["del", "theorem", "coe_order_iso_multiset_symm", ["finsupp"]], ["del", "theorem", "lt_wf", ["finsupp"]], ["del", "def", "order_iso_multiset", ["finsupp"]], ["del", "theorem", "sum_id_lt_of_lt", ["finsupp"]], ["del", "theorem", "to_multiset_strict_mono", ["finsupp"]], ["del", "theorem", "to_finsupp_strict_mono", ["multiset"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1640815120, "sha": "b8833e9e", "message": "chore(data/*): Eliminate `finish` (#11099)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": [["add", "theorem", "mem_some_iff", ["option"]]]}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}]}, {"timestamp": 1640815119, "sha": "2a929f24", "message": "feat(algebra/ne_zero): typeclass for n ≠ 0 (#11033)", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "theorem", "nonzero_of_invertible", []]]}, {"oldPath": null, "newPath": "src/algebra/ne_zero.lean", "changes": [["add", "theorem", "ne'", ["ne_zero"]], ["add", "theorem", "ne", ["ne_zero"]], ["add", "theorem", "of_gt", ["ne_zero"]], ["add", "theorem", "of_injective'", ["ne_zero"]], ["add", "theorem", "of_injective", ["ne_zero"]], ["add", "theorem", "of_map", ["ne_zero"]], ["add", "theorem", "of_ne_zero_coe", ["ne_zero"]], ["add", "theorem", "of_no_zero_smul_divisors", ["ne_zero"]], ["add", "theorem", "of_not_dvd", ["ne_zero"]], ["add", "theorem", "of_pos", ["ne_zero"]], ["add", "theorem", "ne_zero_iff", []], ["add", "theorem", "not_ne_zero", []]]}]}, {"timestamp": 1640811786, "sha": "dd65894b", "message": "chore(*): Eliminate some more instances of `finish` (#11136)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)\nThis (and the previous series of PRs) eliminates the last few instances of `finish` in the main body of mathlib, leaving only instances in the `scripts`, `test`, `tactic`, and `archive` folders.", "changes": [{"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}]}, {"timestamp": 1640811785, "sha": "d67a1dc6", "message": "chore(number_theory/quadratic_reciprocity): Eliminate `finish` (#11133)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}]}, {"timestamp": 1640811784, "sha": "c03dbd16", "message": "chore(algebra/continued_fractions/computation/translations): Eliminate `finish` (#11130)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}]}, {"timestamp": 1640811783, "sha": "90d12bb1", "message": "chore(computability/NFA): Eliminate `finish` (#11103)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/computability/NFA.lean", "newPath": "src/computability/NFA.lean", "changes": []}]}, {"timestamp": 1640808905, "sha": "6703cdda", "message": "chore([normed/charted]_space): Eliminate `finish` (#11126)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}]}, {"timestamp": 1640801937, "sha": "c25bd03e", "message": "feat(algebra/order/field): prove `a / a ≤ 1` (#11118)", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "div_self_le_one", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "div_self_le", ["nnreal"]]]}]}, {"timestamp": 1640794357, "sha": "395e2755", "message": "chore(topology/metric_space/basic): +1 version of Heine-Borel (#11127)\n* Mark `metric.is_compact_of_closed_bounded` as \"Heine-Borel\" theorem\n too.\n* Add `metric.bounded.is_compact_closure`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "is_compact_closure", ["metric", "bounded"]]]}]}, {"timestamp": 1640794356, "sha": "cb37df34", "message": "feat(data/list/pairwise): pairwise repeat (#11117)", "changes": [{"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "pairwise_repeat", ["list"]]]}]}, {"timestamp": 1640789617, "sha": "d8b42674", "message": "chore(algebra/big_operators/finprod): Eliminate `finish` (#10923)\nRemoving uses of finish, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}]}, {"timestamp": 1640780764, "sha": "e003d6e2", "message": "feat(data/polynomial): more API for roots (#11081)\n`leading_coeff_monic_mul`\n`leading_coeff_X_sub_C`\n`root_multiplicity_C`\n`not_is_root_C`\n`roots_smul_nonzero`\n`leading_coeff_div_by_monic_X_sub_C`\n`roots_eq_zero_iff`\nalso generalized various statements about `X - C a` to `X + C a` over semirings.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "X_add_C_ne_zero", ["polynomial"]], ["add", "theorem", "X_pow_add_C_ne_zero", ["polynomial"]], ["mod", "theorem", "degree_X_add_C", ["polynomial"]], ["add", "theorem", "degree_X_pow_add_C", ["polynomial"]], ["add", "theorem", "leading_coeff_C_mul_X_add_C", ["polynomial"]], ["mod", "theorem", "leading_coeff_X_add_C", ["polynomial"]], ["add", "theorem", "leading_coeff_X_pow_add_C", ["polynomial"]], ["add", "theorem", "leading_coeff_X_pow_add_one", ["polynomial"]], ["add", "theorem", "leading_coeff_X_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_add_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_pow_add_C", ["polynomial"]], ["add", "theorem", "next_coeff_X_add_C", ["polynomial"]], ["mod", "theorem", "next_coeff_X_sub_C", ["polynomial"]], ["add", "theorem", "zero_nmem_multiset_map_X_add_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "root_multiplicity_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "not_is_root_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "leading_coeff_div_by_monic_X_sub_C", ["polynomial"]], ["add", "theorem", "roots_smul_nonzero", ["polynomial"]]]}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["add", "theorem", "roots_eq_zero_iff", ["is_alg_closed"]]]}]}, {"timestamp": 1640744771, "sha": "268d1a86", "message": "chore(topology/metric_space/basic): golf, add dot notation (#11111)\n* add `cauchy_seq.bounded_range`;\n* golf `metric.bounded_range_of_tendsto`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "bounded_range", ["cauchy_seq"]]]}]}, {"timestamp": 1640724985, "sha": "a82c4819", "message": "feat(data/polynomial/basic): `add_submonoid.closure` of monomials is `⊤` (#11101)\nUse it to golf `polynomial.add_hom_ext`.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "add_submonoid_closure_set_of_eq_monomial", ["polynomial"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "map_equiv_top", ["submonoid"]]]}]}, {"timestamp": 1640724984, "sha": "134ff7d2", "message": "feat(data/option/basic): add `eq_of_mem_of_mem` (#11098)\nIf `a : α` belongs to both `o1 o2 : option α` then `o1 = o2`", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "eq_of_mem_of_mem", ["option"]]]}]}, {"timestamp": 1640724983, "sha": "f11d3ca2", "message": "feat(analysis/special_functions/pow): `rpow` as an `order_iso` (#10831)\nBundles `rpow` into an order isomorphism on `ennreal` when the exponent is a fixed positive real.\n- [x] depends on: #10701", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "def", "order_iso_rpow", ["ennreal"]], ["add", "theorem", "order_iso_rpow_symm_apply", ["ennreal"]]]}]}, {"timestamp": 1640720975, "sha": "8d41552f", "message": "feat(logic/small): The range of a function from a small type is small (#11029)\nThat is, you don't actually need an equivalence to build `small α`, a mere function does the trick.", "changes": [{"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": [["mod", "theorem", "small_of_injective", []], ["add", "theorem", "small_of_surjective", []]]}]}, {"timestamp": 1640720974, "sha": "8d24a1fe", "message": "refactor(category_theory/shift): make shifts more flexible (#10573)", "changes": [{"oldPath": "src/algebra/homology/differential_object.lean", "newPath": "src/algebra/homology/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["del", "def", "shift_counit", ["category_theory", "differential_object"]], ["del", "def", "shift_counit_inv", ["category_theory", "differential_object"]], ["del", "def", "shift_counit_iso", ["category_theory", "differential_object"]], ["mod", "def", "shift_functor", ["category_theory", "differential_object"]], ["add", "def", "shift_functor_add", ["category_theory", "differential_object"]], ["del", "def", "shift_inverse", ["category_theory", "differential_object"]], ["del", "def", "shift_inverse_obj", ["category_theory", "differential_object"]], ["del", "def", "shift_unit", ["category_theory", "differential_object"]], ["del", "def", "shift_unit_inv", ["category_theory", "differential_object"]], ["del", "def", "shift_unit_iso", ["category_theory", "differential_object"]], ["add", "def", "shift_ε", ["category_theory", "differential_object"]], ["mod", "def", "map_differential_object", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["mod", "theorem", "shift_functor_obj_apply", ["category_theory", "graded_object"]]]}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": [["add", "def", "add_neg_equiv", ["category_theory"]], ["add", "theorem", "eq_to_hom_comp_shift_add_inv₁", ["category_theory"]], ["add", "theorem", "eq_to_hom_comp_shift_add_inv₁₂", ["category_theory"]], ["add", "theorem", "eq_to_hom_comp_shift_add_inv₂", ["category_theory"]], ["add", "theorem", "eq_to_hom_μ_app", ["category_theory"]], ["add", "theorem", "shift_obj_obj", ["category_theory", "has_shift"]], ["add", "def", "has_shift_mk", ["category_theory"]], ["add", "theorem", "map_opaque_eq_to_iso_comp_app", ["category_theory"]], ["add", "def", "opaque_eq_to_iso", ["category_theory"]], ["add", "theorem", "opaque_eq_to_iso_inv", ["category_theory"]], ["add", "theorem", "opaque_eq_to_iso_symm", ["category_theory"]], ["del", "def", "shift", ["category_theory"]], ["add", "def", "shift_add", ["category_theory"]], ["add", "theorem", "shift_add_hom_comp_eq_to_hom₁", ["category_theory"]], ["add", "theorem", "shift_add_hom_comp_eq_to_hom₁₂", ["category_theory"]], ["add", "theorem", "shift_add_hom_comp_eq_to_hom₂", ["category_theory"]], ["add", "theorem", "shift_comm'", ["category_theory"]], ["add", "def", "shift_comm", ["category_theory"]], ["add", "theorem", "shift_comm_hom_comp", ["category_theory"]], ["add", "theorem", "shift_comm_symm", ["category_theory"]], ["add", "def", "shift_equiv", ["category_theory"]], ["add", "theorem", "shift_equiv_triangle", ["category_theory"]], ["add", "def", "shift_functor", ["category_theory"]], ["add", "def", "shift_functor_add", ["category_theory"]], ["add", "def", "shift_functor_comp_shift_functor_neg", ["category_theory"]], ["add", "def", "shift_functor_neg_comp_shift_functor", ["category_theory"]], ["add", "def", "shift_functor_zero", ["category_theory"]], ["add", "structure", "shift_mk_core", ["category_theory"]], ["add", "def", "shift_monoidal_functor", ["category_theory"]], ["add", "theorem", "shift_neg_shift'", ["category_theory"]], ["add", "def", "shift_neg_shift", ["category_theory"]], ["add", "theorem", "shift_shift'", ["category_theory"]], ["add", "theorem", "shift_shift_neg'", ["category_theory"]], ["add", "def", "shift_shift_neg", ["category_theory"]], ["add", "theorem", "shift_shift_neg_hom_shift", ["category_theory"]], ["add", "theorem", "shift_shift_neg_inv_shift", ["category_theory"]], ["add", "theorem", "shift_shift_neg_shift_eq", ["category_theory"]], ["add", "theorem", "shift_zero'", ["category_theory"]], ["add", "def", "shift_zero", ["category_theory"]], ["mod", "theorem", "shift_zero_eq_zero", ["category_theory"]], ["add", "theorem", "μ_inv_app_eq_to_hom", ["category_theory"]]]}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": [["add", "def", "from_inv_rotate_rotate", ["category_theory", "triangulated"]], ["add", "def", "from_rotate_inv_rotate", ["category_theory", "triangulated"]], ["mod", "def", "inv_rot_comp_rot_hom", ["category_theory", "triangulated"]], ["add", "def", "to_inv_rotate_rotate", ["category_theory", "triangulated"]], ["add", "def", "to_rotate_inv_rotate", ["category_theory", "triangulated"]]]}]}, {"timestamp": 1640715418, "sha": "0b80d0cb", "message": "chore(ring_theory/*): Eliminate `finish` (#11100)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1640705989, "sha": "143fec64", "message": "chore(linear_algebra/*): Eliminate `finish` (#11074)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}]}, {"timestamp": 1640699616, "sha": "d053d57a", "message": "feat(topology): missing lemmas for Kyle (#11076)\nDiscussion [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Continuous.20bijective.20from.20compact.20to.20T1.20implies.20homeomorphis) revealed gaps in library. This PR fills those gaps and related ones discovered on the way. It will simplify #11072. Note that it unprotects `topological_space.nhds_adjoint` and puts it into the root namespace. I guess this was protected because it was seen only as a technical tools to prove properties of `nhds`.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "sInter", ["set", "finite"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "eq_principal_of_finite_mem", ["ultrafilter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "is_open_singleton_iff_nhds_eq_pure", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "def", "cofinite_topology", []], ["add", "theorem", "mem_nhds_cofinite", []], ["add", "theorem", "nhds_cofinite", []]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "is_open_singleton_nhds_adjoint", []], ["add", "theorem", "le_iff_nhds", []], ["add", "theorem", "le_nhds_adjoint_iff'", []], ["add", "theorem", "le_nhds_adjoint_iff", []], ["add", "def", "nhds_adjoint", []], ["add", "theorem", "nhds_adjoint_nhds", []], ["add", "theorem", "nhds_adjoint_nhds_of_ne", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "t1_space_antimono", []], ["add", "theorem", "t1_space_iff_le_cofinite", []]]}]}, {"timestamp": 1640693706, "sha": "10771d7e", "message": "doc(combinatorics/configuration): Make comments into docstrings (#11097)\nThese comments should have been docstrings.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1640693705, "sha": "d3aa0a43", "message": "feat(data/polynomial/coeff): generalize to coeff_X_add_C_pow (#11093)\nThat golfs the proof for `coeff_X_add_one_pow`.", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_X_add_C_pow", ["polynomial"]]]}]}, {"timestamp": 1640693703, "sha": "afff1bbc", "message": "chore(data/polynomial/eval): golf a proof, add versions (#11092)\n* golf the proof of `polynomial.eval_prod`;\n* add versions `polynomial.eval_multiset_prod` and\n `polynomial.eval_list_prod`.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_list_prod", ["polynomial"]], ["add", "theorem", "eval_multiset_prod", ["polynomial"]]]}]}, {"timestamp": 1640691338, "sha": "c04a42fe", "message": "feat(measure_theory/integral/{interval,circle}_integral): add strict inequalities (#11061)", "changes": [{"oldPath": "src/measure_theory/integral/circle_integral.lean", "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": [["add", "theorem", "norm_integral_lt_of_norm_le_const_of_lt", ["circle_integral"]], ["add", "theorem", "norm_two_pi_I_inv_smul_integral_le_of_norm_le_const", ["circle_integral"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "abs_integral_le_integral_abs", ["interval_integral"]], ["add", "theorem", "integral_lt_integral_of_ae_le_of_measure_set_of_lt_ne_zero", ["interval_integral"]], ["add", "theorem", "integral_lt_integral_of_continuous_on_of_le_of_exists_lt", ["interval_integral"]], ["mod", "theorem", "integral_nonneg_of_ae", ["interval_integral"]], ["mod", "theorem", "integral_nonneg_of_ae_restrict", ["interval_integral"]], ["mod", "theorem", "integral_nonneg_of_forall", ["interval_integral"]], ["mod", "theorem", "integral_pos_iff_support_of_nonneg_ae", ["interval_integral"]]]}]}, {"timestamp": 1640684404, "sha": "f452b383", "message": "feat(data/pi): bit[01]_apply simp lemmas (#11086)", "changes": [{"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "bit0_apply", ["pi"]], ["add", "theorem", "bit1_apply", ["pi"]]]}]}, {"timestamp": 1640675001, "sha": "94bb4667", "message": "feat(tactic/fin_cases): document `fin_cases with` and add `fin_cases using` (#11085)\nCloses #11016", "changes": [{"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}]}, {"timestamp": 1640672469, "sha": "44f22aac", "message": "feat(ring_theory/power_series/basic): add api for coeffs of shifts (#11082)\nBased on the corresponding API for polynomials", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "coeff_C_mul_X", ["power_series"]], ["add", "theorem", "coeff_X_pow_mul'", ["power_series"]], ["add", "theorem", "coeff_X_pow_mul", ["power_series"]], ["add", "theorem", "coeff_mul_X_pow'", ["power_series"]], ["add", "theorem", "coeff_mul_X_pow", ["power_series"]]]}]}, {"timestamp": 1640661946, "sha": "f0ca4338", "message": "feat(data/set/finite): finite_or_infinite (#11084)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_or_infinite", ["set"]]]}]}, {"timestamp": 1640661945, "sha": "612a4766", "message": "feat(ring_theory/polynomial/cyclotomic/basic): add cyclotomic_expand_eq_cyclotomic (#10974)\nWe prove that, if `p ∣ n`, then `expand R p (cyclotomic n R) = cyclotomic (p * n) R`.\n- [x] depends on: #10965\n- [x] depends on: #10971", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "cyclotomic_expand_eq_cyclotomic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "pow_of_dvd", ["is_primitive_root"]]]}]}, {"timestamp": 1640659574, "sha": "10ea8609", "message": "feat(ring_theory/polynomial/cyclotomic/basic): cyclotomic_prime_mul_X_sub_one (#11063)\nFrom flt-regular.", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "cyclotomic_prime_mul_X_sub_one", ["polynomial"]]]}]}, {"timestamp": 1640631478, "sha": "294e78e7", "message": "feat(algebra/group_with_zero/power): With zero lemmas (#11051)\nThis proves the `group_with_zero` variant of some lemmas and moves lemmas from `algebra.group_power.basic` to `algebra.group_with_zero.power`.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "fzero_pow_eq", []], ["add", "theorem", "inv_pow_sub_of_lt", []], ["add", "theorem", "inv_pow_sub₀", []], ["add", "theorem", "mul_zpow_neg_one₀", []], ["mod", "theorem", "mul_zpow₀", []], ["add", "theorem", "pow_sub_of_lt", []], ["add", "theorem", "zero_zpow_eq", []], ["add", "def", "zpow_group_hom₀", []], ["add", "theorem", "zpow_neg_one₀", []]]}]}, {"timestamp": 1640631477, "sha": "1332fe1a", "message": "fix(tactic/rcases): more with_desc fail (#11004)\nThis causes hovers for definitions using `rcases_patt_parse` to print\nweird stuff for the parser description.", "changes": [{"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}]}, {"timestamp": 1640623586, "sha": "0e8cca36", "message": "feat(algebra/big_operators/order): `prod_eq_prod_iff_of_le` (#11068)\nIf `f i ≤ g i` for all `i ∈ s`, then `∏ i in s, f i = ∏ i in s, g i` if and only if `f i = g i` for all `i ∈ s`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "prod_eq_prod_iff_of_le", ["finset"]]]}]}, {"timestamp": 1640623585, "sha": "6ed17fc7", "message": "refactor(combinatorics/configuration): Generalize results (#11065)\nThis PR slightly generalizes the results in `configuration.lean` by weakening the definitions of `has_points` and `has_lines`. The new definitions are also more natural, in my opinion.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1640623584, "sha": "e1133ccc", "message": "chore(order/*): Eliminate `finish` (#11064)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)\nCredit to Ruben Van de Velde who suggested the solution for `eventually_lift'_powerset_eventually`", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}]}, {"timestamp": 1640623583, "sha": "46566c5b", "message": "split(data/list/infix): Split off `data.list.basic` (#11062)\nThis moves `list.prefix`, `list.subfix`, `list.infix`, `list.inits`, `list.tails` and `insert` lemmas from `data.list.basic` to a new file `data.list.infix`.", "changes": [{"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "cons_prefix_iff", ["list"]], ["del", "theorem", "drop_sublist", ["list"]], ["del", "theorem", "drop_subset", ["list"]], ["del", "theorem", "drop_suffix", ["list"]], ["del", "theorem", "eq_nil_iff_infix_nil", ["list"]], ["del", "theorem", "eq_nil_iff_prefix_nil", ["list"]], ["del", "theorem", "eq_nil_iff_suffix_nil", ["list"]], ["del", "theorem", "eq_nil_of_infix_nil", ["list"]], ["del", "theorem", "eq_nil_of_prefix_nil", ["list"]], ["del", "theorem", "eq_nil_of_suffix_nil", ["list"]], ["del", "theorem", "eq_of_infix_of_length_eq", ["list"]], ["del", "theorem", "eq_of_prefix_of_length_eq", ["list"]], ["del", "theorem", "eq_of_suffix_of_length_eq", ["list"]], ["del", "theorem", "eq_or_mem_of_mem_insert", ["list"]], ["del", "theorem", "length_le", ["list", "infix"]], ["del", "theorem", "infix_append'", ["list"]], ["del", "theorem", "infix_append", ["list"]], ["del", "theorem", "infix_cons", ["list"]], ["del", "theorem", "infix_iff_prefix_suffix", ["list"]], ["del", "theorem", "infix_insert", ["list"]], ["del", "theorem", "infix_of_mem_join", ["list"]], ["del", "theorem", "infix_refl", ["list"]], ["del", "theorem", "init_prefix", ["list"]], ["del", "theorem", "init_sublist", ["list"]], ["del", "theorem", "init_subset", ["list"]], ["del", "theorem", "inits_append", ["list"]], ["del", "theorem", "inits_cons", ["list"]], ["del", "theorem", "inits_eq_tails", ["list"]], ["del", "theorem", "inits_reverse", ["list"]], ["del", "theorem", "def", ["list", "insert"]], ["del", "theorem", "insert_nil", ["list"]], ["del", "theorem", "insert_of_mem", ["list"]], ["del", "theorem", "insert_of_not_mem", ["list"]], ["del", "theorem", "filter", ["list", "is_infix"]], ["del", "theorem", "trans", ["list", "is_infix"]], ["del", "theorem", "filter", ["list", "is_prefix"]], ["del", "theorem", "filter_map", ["list", "is_prefix"]], ["del", "theorem", "is_infix", ["list", "is_prefix"]], ["del", "theorem", "reduce_option", ["list", "is_prefix"]], ["del", "theorem", "trans", ["list", "is_prefix"]], ["del", "theorem", "filter", ["list", "is_suffix"]], ["del", "theorem", "is_infix", ["list", "is_suffix"]], ["del", "theorem", "trans", ["list", "is_suffix"]], ["del", "theorem", "length_inits", ["list"]], ["del", "theorem", "length_insert_of_mem", ["list"]], ["del", "theorem", "length_insert_of_not_mem", ["list"]], ["del", "theorem", "length_tails", ["list"]], ["del", "theorem", "map_prefix", ["list"]], ["del", "theorem", "map_reverse_inits", ["list"]], ["del", "theorem", "map_reverse_tails", ["list"]], ["del", "theorem", "mem_inits", ["list"]], ["del", "theorem", "mem_insert_iff", ["list"]], ["del", "theorem", "mem_insert_of_mem", ["list"]], ["del", "theorem", "mem_insert_self", ["list"]], ["del", "theorem", "mem_of_mem_drop", ["list"]], ["del", "theorem", "mem_of_mem_init", ["list"]], ["del", "theorem", "mem_of_mem_tail", ["list"]], ["del", "theorem", "mem_of_mem_take", ["list"]], ["del", "theorem", "mem_tails", ["list"]], ["del", "theorem", "nil_infix", ["list"]], ["del", "theorem", "nil_prefix", ["list"]], ["del", "theorem", "nil_suffix", ["list"]], ["del", "theorem", "nth_le_inits", ["list"]], ["del", "theorem", "nth_le_tails", ["list"]], ["del", "theorem", "prefix_append", ["list"]], ["del", "theorem", "prefix_append_right_inj", ["list"]], ["del", "theorem", "prefix_concat", ["list"]], ["del", "theorem", "prefix_cons_inj", ["list"]], ["del", "theorem", "prefix_iff_eq_append", ["list"]], ["del", "theorem", "prefix_iff_eq_take", ["list"]], ["del", "theorem", "prefix_of_prefix_length_le", ["list"]], ["del", "theorem", "prefix_or_prefix_of_prefix", ["list"]], ["del", "theorem", "prefix_refl", ["list"]], ["del", "theorem", "prefix_take_le_iff", ["list"]], ["del", "theorem", "reverse_prefix", ["list"]], ["del", "theorem", "reverse_suffix", ["list"]], ["del", "theorem", "sublist_insert", ["list"]], ["del", "theorem", "subset_insert", ["list"]], ["del", "theorem", "suffix_append", ["list"]], ["del", "theorem", "suffix_cons", ["list"]], ["del", "theorem", "suffix_cons_iff", ["list"]], ["del", "theorem", "suffix_iff_eq_append", ["list"]], ["del", "theorem", "suffix_iff_eq_drop", ["list"]], ["del", "theorem", "suffix_insert", ["list"]], ["del", "theorem", "suffix_of_suffix_length_le", ["list"]], ["del", "theorem", "suffix_or_suffix_of_suffix", ["list"]], ["del", "theorem", "suffix_refl", ["list"]], ["del", "theorem", "tail_sublist", ["list"]], ["del", "theorem", "tail_subset", ["list"]], ["del", "theorem", "tail_suffix", ["list"]], ["del", "theorem", "tails_append", ["list"]], ["del", "theorem", "tails_cons", ["list"]], ["del", "theorem", "tails_eq_inits", ["list"]], ["del", "theorem", "tails_reverse", ["list"]], ["del", "theorem", "take_prefix", ["list"]], ["del", "theorem", "take_sublist", ["list"]], ["del", "theorem", "take_subset", ["list"]]]}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/infix.lean", "changes": [["add", "theorem", "cons_prefix_iff", ["list"]], ["add", "theorem", "drop_sublist", ["list"]], ["add", "theorem", "drop_subset", ["list"]], ["add", "theorem", "drop_suffix", ["list"]], ["add", "theorem", "eq_nil_of_infix_nil", ["list"]], ["add", "theorem", "eq_of_infix_of_length_eq", ["list"]], ["add", "theorem", "eq_of_prefix_of_length_eq", ["list"]], ["add", "theorem", "eq_of_suffix_of_length_eq", ["list"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["list"]], ["add", "theorem", "length_le", ["list", "infix"]], ["add", "theorem", "infix_append'", ["list"]], ["add", "theorem", "infix_append", ["list"]], ["add", "theorem", "infix_concat", ["list"]], ["add", "theorem", "infix_cons", ["list"]], ["add", "theorem", "infix_iff_prefix_suffix", ["list"]], ["add", "theorem", "infix_insert", ["list"]], ["add", "theorem", "infix_nil_iff", ["list"]], ["add", "theorem", "infix_of_mem_join", ["list"]], ["add", "theorem", "infix_refl", ["list"]], ["add", "theorem", "infix_rfl", ["list"]], ["add", "theorem", "init_prefix", ["list"]], ["add", "theorem", "init_sublist", ["list"]], ["add", "theorem", "init_subset", ["list"]], ["add", "theorem", "inits_append", ["list"]], ["add", "theorem", "inits_cons", ["list"]], ["add", "theorem", "inits_eq_tails", ["list"]], ["add", "theorem", "inits_reverse", ["list"]], ["add", "theorem", "def", ["list", "insert"]], ["add", "theorem", "insert_nil", ["list"]], ["add", "theorem", "insert_of_mem", ["list"]], ["add", "theorem", "insert_of_not_mem", ["list"]], ["add", "theorem", "filter", ["list", "is_infix"]], ["add", "theorem", "trans", ["list", "is_infix"]], ["add", "theorem", "filter", ["list", "is_prefix"]], ["add", "theorem", "filter_map", ["list", "is_prefix"]], ["add", "theorem", "is_infix", ["list", "is_prefix"]], ["add", "theorem", "map", ["list", "is_prefix"]], ["add", "theorem", "reduce_option", ["list", "is_prefix"]], ["add", "theorem", "trans", ["list", "is_prefix"]], ["add", "theorem", "filter", ["list", "is_suffix"]], ["add", "theorem", "is_infix", ["list", "is_suffix"]], ["add", "theorem", "trans", ["list", "is_suffix"]], ["add", "theorem", "length_inits", ["list"]], ["add", "theorem", "length_insert_of_mem", ["list"]], ["add", "theorem", "length_insert_of_not_mem", ["list"]], ["add", "theorem", "length_tails", ["list"]], ["add", "theorem", "map_reverse_inits", ["list"]], ["add", "theorem", "map_reverse_tails", ["list"]], ["add", "theorem", "mem_inits", ["list"]], ["add", "theorem", "mem_insert_iff", ["list"]], ["add", "theorem", "mem_insert_of_mem", ["list"]], ["add", "theorem", "mem_insert_self", ["list"]], ["add", "theorem", "mem_of_mem_drop", ["list"]], ["add", "theorem", "mem_of_mem_init", ["list"]], ["add", "theorem", "mem_of_mem_tail", ["list"]], ["add", "theorem", "mem_of_mem_take", ["list"]], ["add", "theorem", "mem_tails", ["list"]], ["add", "theorem", "nil_infix", ["list"]], ["add", "theorem", "nil_prefix", ["list"]], ["add", "theorem", "nil_suffix", ["list"]], ["add", "theorem", "nth_le_inits", ["list"]], ["add", "theorem", "nth_le_tails", ["list"]], ["add", "theorem", "prefix_append", ["list"]], ["add", "theorem", "prefix_append_right_inj", ["list"]], ["add", "theorem", "prefix_concat", ["list"]], ["add", "theorem", "prefix_cons_inj", ["list"]], ["add", "theorem", "prefix_iff_eq_append", ["list"]], ["add", "theorem", "prefix_iff_eq_take", ["list"]], ["add", "theorem", "prefix_nil_iff", ["list"]], ["add", "theorem", "prefix_of_prefix_length_le", ["list"]], ["add", "theorem", "prefix_or_prefix_of_prefix", ["list"]], ["add", "theorem", "prefix_refl", ["list"]], ["add", "theorem", "prefix_rfl", ["list"]], ["add", "theorem", "prefix_take_le_iff", ["list"]], ["add", "theorem", "reverse_prefix", ["list"]], ["add", "theorem", "reverse_suffix", ["list"]], ["add", "theorem", "sublist_insert", ["list"]], ["add", "theorem", "subset_insert", ["list"]], ["add", "theorem", "suffix_append", ["list"]], ["add", "theorem", "suffix_cons", ["list"]], ["add", "theorem", "suffix_cons_iff", ["list"]], ["add", "theorem", "suffix_iff_eq_append", ["list"]], ["add", "theorem", "suffix_iff_eq_drop", ["list"]], ["add", "theorem", "suffix_insert", ["list"]], ["add", "theorem", "suffix_nil_iff", ["list"]], ["add", "theorem", "suffix_of_suffix_length_le", ["list"]], ["add", "theorem", "suffix_or_suffix_of_suffix", ["list"]], ["add", "theorem", "suffix_refl", ["list"]], ["add", "theorem", "suffix_rfl", ["list"]], ["add", "theorem", "tail_sublist", ["list"]], ["add", "theorem", "tail_subset", ["list"]], ["add", "theorem", "tail_suffix", ["list"]], ["add", "theorem", "tails_append", ["list"]], ["add", "theorem", "tails_cons", ["list"]], ["add", "theorem", "tails_eq_inits", ["list"]], ["add", "theorem", "tails_reverse", ["list"]], ["add", "theorem", "take_prefix", ["list"]], ["add", "theorem", "take_sublist", ["list"]], ["add", "theorem", "take_subset", ["list"]]]}, {"oldPath": "src/data/list/lattice.lean", "newPath": "src/data/list/lattice.lean", "changes": []}, {"oldPath": "src/data/nat/nth.lean", "newPath": "src/data/nat/nth.lean", "changes": []}]}, {"timestamp": 1640623582, "sha": "2ecf4800", "message": "feat(algebra/group/units): generalize `units.coe_lift` (#11057)\n* Generalize `units.coe_lift` from `group_with_zero` to `monoid`; use condition `is_unit` instead of `≠ 0`.\n* Add some missing `@[to_additive]` attrs.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "is_unit_of_subsingleton", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": []}]}, {"timestamp": 1640623581, "sha": "de6f57d2", "message": "chore(ring_theory/unique_factorization_domain): Eliminate `finish` (#11055)\nRemoving uses of finish, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1640623580, "sha": "d67c4697", "message": "feat(combinatorics/simple_graph/basic): edge deletion (#11054)\nFunction to delete edges from a simple graph, and some associated lemmas.\nAlso defines `sym2.to_rel` as an inverse to `sym2.from_rel`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "compl_eq_delete_edges", ["simple_graph"]], ["add", "def", "delete_edges", ["simple_graph"]], ["add", "theorem", "delete_edges_adj", ["simple_graph"]], ["add", "theorem", "delete_edges_delete_edges", ["simple_graph"]], ["add", "theorem", "delete_edges_empty_eq", ["simple_graph"]], ["add", "theorem", "delete_edges_eq_inter_edge_set", ["simple_graph"]], ["add", "theorem", "delete_edges_le", ["simple_graph"]], ["add", "theorem", "delete_edges_le_of_le", ["simple_graph"]], ["add", "theorem", "delete_edges_univ_eq", ["simple_graph"]], ["add", "theorem", "sdiff_eq_delete_edges", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["del", "theorem", "is_subgraph_of_is_subgraph", ["simple_graph", "subgraph", "spanning_coe"]], ["add", "theorem", "spanning_coe_le_of_le", ["simple_graph", "subgraph"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["add", "theorem", "from_rel_to_rel", ["sym2"]], ["add", "def", "to_rel", ["sym2"]], ["add", "theorem", "to_rel_from_rel", ["sym2"]], ["add", "theorem", "to_rel_prop", ["sym2"]], ["add", "theorem", "to_rel_symmetric", ["sym2"]]]}]}, {"timestamp": 1640623579, "sha": "ca2c3443", "message": "split(data/finsupp/order): Split off `data.finsupp.basic` (#11045)\nThis moves all order instances about `finsupp` from `data.finsupp.basic` and `data.finsupp.lattice` to a new file `data.finsupp.order`.\nI'm crediting\n* Johan for #1216, #1244\n* Aaron Anderson for #3335", "changes": [{"oldPath": "src/data/finsupp/antidiagonal.lean", "newPath": "src/data/finsupp/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "theorem", "add_eq_zero_iff", ["finsupp"]], ["del", "theorem", "add_sub_single_one", ["finsupp"]], ["del", "theorem", "coe_order_iso_multiset", ["finsupp"]], ["del", "theorem", "coe_order_iso_multiset_symm", ["finsupp"]], ["del", "theorem", "coe_tsub", ["finsupp"]], ["del", "theorem", "le_def", ["finsupp"]], ["del", "theorem", "le_iff'", ["finsupp"]], ["del", "theorem", "le_iff", ["finsupp"]], ["del", "theorem", "lt_wf", ["finsupp"]], ["del", "def", "order_iso_multiset", ["finsupp"]], ["del", "theorem", "single_le_iff", ["finsupp"]], ["del", "theorem", "single_tsub", ["finsupp"]], ["del", "theorem", "sub_single_one_add", ["finsupp"]], ["del", "theorem", "subset_support_tsub", ["finsupp"]], ["del", "theorem", "sum_id_lt_of_lt", ["finsupp"]], ["del", "theorem", "support_tsub", ["finsupp"]], ["del", "theorem", "to_multiset_strict_mono", ["finsupp"]], ["del", "theorem", "tsub_apply", ["finsupp"]], ["del", "theorem", "to_finsuppstrict_mono", ["multiset"]]]}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": null, "changes": [["del", "theorem", "bot_eq_zero", ["finsupp"]], ["del", "theorem", "disjoint_iff", ["finsupp"]], ["del", "theorem", "inf_apply", ["finsupp"]], ["del", "theorem", "monotone_to_fun", ["finsupp"]], ["del", "def", "order_embedding_to_fun", ["finsupp"]], ["del", "theorem", "order_embedding_to_fun_apply", ["finsupp"]], ["del", "theorem", "sup_apply", ["finsupp"]], ["del", "theorem", "support_inf", ["finsupp"]], ["del", "theorem", "support_sup", ["finsupp"]]]}, {"oldPath": null, "newPath": "src/data/finsupp/order.lean", "changes": [["add", "theorem", "add_eq_zero_iff", ["finsupp"]], ["add", "theorem", "add_sub_single_one", ["finsupp"]], ["add", "theorem", "coe_order_iso_multiset", ["finsupp"]], ["add", "theorem", "coe_order_iso_multiset_symm", ["finsupp"]], ["add", "theorem", "coe_tsub", ["finsupp"]], ["add", "theorem", "disjoint_iff", ["finsupp"]], ["add", "theorem", "inf_apply", ["finsupp"]], ["add", "theorem", "le_def", ["finsupp"]], ["add", "theorem", "le_iff'", ["finsupp"]], ["add", "theorem", "le_iff", ["finsupp"]], ["add", "theorem", "lt_wf", ["finsupp"]], ["add", "theorem", "monotone_to_fun", ["finsupp"]], ["add", "def", "order_embedding_to_fun", ["finsupp"]], ["add", "theorem", "order_embedding_to_fun_apply", ["finsupp"]], ["add", "def", "order_iso_multiset", ["finsupp"]], ["add", "theorem", "single_le_iff", ["finsupp"]], ["add", "theorem", "single_tsub", ["finsupp"]], ["add", "theorem", "sub_single_one_add", ["finsupp"]], ["add", "theorem", "subset_support_tsub", ["finsupp"]], ["add", "theorem", "sum_id_lt_of_lt", ["finsupp"]], ["add", "theorem", "sup_apply", ["finsupp"]], ["add", "theorem", "support_inf", ["finsupp"]], ["add", "theorem", "support_sup", ["finsupp"]], ["add", "theorem", "support_tsub", ["finsupp"]], ["add", "theorem", "to_multiset_strict_mono", ["finsupp"]], ["add", "theorem", "tsub_apply", ["finsupp"]], ["add", "theorem", "to_finsupp_strict_mono", ["multiset"]]]}]}, {"timestamp": 1640623578, "sha": "463be884", "message": "feat(algebra/group_with_zero): add zero_mul_eq_const and mul_zero_eq_const (#11021)\nThese are to match the corresponding lemmas about unapplied application of multiplication by 1. Like those lemmas, these are not marked simp.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "mul_zero_eq_const", []], ["add", "theorem", "zero_mul_eq_const", []]]}]}, {"timestamp": 1640623577, "sha": "a3603547", "message": "feat(algebraic_geometry): Basic open set is empty iff section is zero in reduced schemes. (#11012)", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "theorem", "basic_open_zero", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "theorem", "basic_open_eq_bot_iff", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": [["add", "theorem", "basic_open_eq_bot_iff", ["algebraic_geometry"]], ["add", "theorem", "basic_open_eq_of_affine'", ["algebraic_geometry"]], ["add", "theorem", "basic_open_eq_of_affine", ["algebraic_geometry"]], ["add", "theorem", "eq_zero_of_basic_open_empty", ["algebraic_geometry"]], ["add", "theorem", "is_reduced_of_open_immersion", ["algebraic_geometry"]], ["add", "theorem", "reduce_to_affine_global", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["add", "theorem", "is_reduced_of_injective", []]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "theorem", "coe_bot", ["topological_space", "opens"]]]}]}, {"timestamp": 1640623576, "sha": "ae8f08fe", "message": "feat(combinatorics/simple_graph/connectivity): more lemmas (#11010)\nThis is the second chunk of #8737, which gives some more lemmas for manipulating the support and edge lists of walks. This also turns `is_trail` back into a structure.", "changes": [{"oldPath": "src/combinatorics/simple_graph/connectivity.lean", "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "theorem", "coe_support", ["simple_graph", "walk"]], ["add", "theorem", "coe_support_append'", ["simple_graph", "walk"]], ["add", "theorem", "coe_support_append", ["simple_graph", "walk"]], ["del", "theorem", "count_edges_eq_one_of_trail", ["simple_graph", "walk"]], ["del", "theorem", "count_edges_le_one_of_trail", ["simple_graph", "walk"]], ["add", "theorem", "edges_append", ["simple_graph", "walk"]], ["add", "theorem", "edges_nodup_of_support_nodup", ["simple_graph", "walk"]], ["add", "theorem", "edges_reverse", ["simple_graph", "walk"]], ["add", "theorem", "end_mem_tail_support_of_ne", ["simple_graph", "walk"]], ["add", "theorem", "exists_eq_cons_of_ne", ["simple_graph", "walk"]], ["mod", "structure", "is_circuit", ["simple_graph", "walk"]], ["mod", "structure", "is_cycle", ["simple_graph", "walk"]], ["add", "theorem", "mk'", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "nil", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "of_append_left", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "of_append_right", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "of_cons", ["simple_graph", "walk", "is_path"]], ["add", "theorem", "reverse", ["simple_graph", "walk", "is_path"]], ["mod", "structure", "is_path", ["simple_graph", "walk"]], ["mod", "theorem", "is_path_def", ["simple_graph", "walk"]], ["del", "theorem", "is_path_of_cons_is_path", ["simple_graph", "walk"]], ["add", "theorem", "is_path_reverse_iff", ["simple_graph", "walk"]], ["add", "theorem", "count_edges_eq_one", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "count_edges_le_one", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "nil", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "of_append_left", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "of_append_right", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "of_cons", ["simple_graph", "walk", "is_trail"]], ["add", "theorem", "reverse", ["simple_graph", "walk", "is_trail"]], ["add", "structure", "is_trail", ["simple_graph", "walk"]], ["del", "def", "is_trail", ["simple_graph", "walk"]], ["add", "theorem", "is_trail_def", ["simple_graph", "walk"]], ["del", "theorem", "is_trail_of_cons_is_trail", ["simple_graph", "walk"]], ["add", "theorem", "mem_support_append_iff", ["simple_graph", "walk"]], ["add", "theorem", "mem_support_iff", ["simple_graph", "walk"]], ["mod", "theorem", "mem_support_of_mem_edges", ["simple_graph", "walk"]], ["add", "theorem", "mem_tail_support_append_iff", ["simple_graph", "walk"]], ["del", "theorem", "nil_is_path", ["simple_graph", "walk"]], ["del", "theorem", "nil_is_trail", ["simple_graph", "walk"]], ["add", "theorem", "reverse_is_trail_iff", ["simple_graph", "walk"]], ["add", "theorem", "support_append", ["simple_graph", "walk"]], ["del", "theorem", "support_eq", ["simple_graph", "walk"]], ["add", "theorem", "support_eq_cons", ["simple_graph", "walk"]], ["add", "theorem", "support_reverse", ["simple_graph", "walk"]], ["add", "theorem", "tail_support_append", ["simple_graph", "walk"]]]}]}, {"timestamp": 1640623574, "sha": "f525f93e", "message": "chore(*): Eliminate `finish` (#10970)\nEliminating the use of `finish` in `data/set/basic`, `order/filter/bases`, and `topology/algebra/valued_field`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}]}, {"timestamp": 1640623573, "sha": "2f3b966f", "message": "feat(number_theory/cyclotomic/basic): add is_cyclotomic_extension (#10849)\nWe add a class `is_cyclotomic_extension S A B` expressing the fact that `B` is obtained by `A` by adding `n`-th\nprimitive roots of unity, for all `n ∈ S`, where `S : set ℕ+`, and some basic properties.\nWe will add more properties of cyclotomic extensions in a future work.\nFrom flt-regular.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "dvd", ["polynomial", "is_root"]]]}, {"oldPath": null, "newPath": "src/number_theory/cyclotomic/basic.lean", "changes": [["add", "theorem", "empty", ["is_cyclotomic_extension"]], ["add", "theorem", "finite", ["is_cyclotomic_extension"]], ["add", "theorem", "finite_of_singleton", ["is_cyclotomic_extension"]], ["add", "theorem", "iff_adjoin_eq_top", ["is_cyclotomic_extension"]], ["add", "theorem", "iff_singleton", ["is_cyclotomic_extension"]], ["add", "theorem", "number_field", ["is_cyclotomic_extension"]], ["add", "theorem", "trans", ["is_cyclotomic_extension"]], ["add", "theorem", "union_left", ["is_cyclotomic_extension"]], ["add", "theorem", "union_right", ["is_cyclotomic_extension"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["add", "theorem", "dvd_X_pow_sub_one", ["polynomial", "cyclotomic"]]]}]}, {"timestamp": 1640616727, "sha": "002b8d97", "message": "feat(algebra/group_with_zero/basic): mul_{left,right}_eq_self₀ (#11069)\nDefined on `cancel_monoid_with_zero`,\ncopying the name and proofs from `{left,right)_cancel_monoid`s,", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "mul_left_eq_self₀", []], ["add", "theorem", "mul_right_eq_self₀", []]]}]}, {"timestamp": 1640606860, "sha": "b28734c8", "message": "feat(data/sym): Provide API for data.sym (#11032)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "mem_repeat", ["multiset"]], ["add", "theorem", "repeat_left_inj", ["multiset"]], ["add", "theorem", "repeat_left_injective", ["multiset"]]]}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": [["add", "theorem", "eq_nil_of_card_zero", ["sym"]], ["add", "theorem", "eq_repeat_of_subsingleton", ["sym"]], ["add", "def", "equiv_congr", ["sym"]], ["add", "def", "erase", ["sym"]], ["add", "theorem", "exists_eq_cons_of_succ", ["sym"]], ["add", "def", "map", ["sym"]], ["add", "theorem", "map_cons", ["sym"]], ["add", "theorem", "map_id", ["sym"]], ["add", "theorem", "map_map", ["sym"]], ["add", "theorem", "map_zero", ["sym"]], ["add", "theorem", "mem_map", ["sym"]], ["add", "def", "repeat", ["sym"]], ["add", "theorem", "repeat_left_inj", ["sym"]], ["add", "theorem", "repeat_left_injective", ["sym"]], ["add", "theorem", "repeat_succ", ["sym"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": []}]}, {"timestamp": 1640593440, "sha": "7e0b994c", "message": "feat(topology/compact_convergence): define compact convergence (#10967)\nAnd prove that the topology it induces is the compact-open topology", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "nhds_mk_of_nhds_filter_basis", ["topological_space"]]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/compact_convergence.lean", "changes": [["add", "theorem", "Inter_compact_open_gen_subset_compact_conv_nhd", ["continuous_map"]], ["add", "def", "compact_conv_nhd", ["continuous_map"]], ["add", "theorem", "compact_conv_nhd_compact_entourage_nonempty", ["continuous_map"]], ["add", "theorem", "compact_conv_nhd_filter_is_basis", ["continuous_map"]], ["add", "theorem", "compact_conv_nhd_mem_comp", ["continuous_map"]], ["add", "theorem", "compact_conv_nhd_mono", ["continuous_map"]], ["add", "theorem", "compact_conv_nhd_nhd_basis", ["continuous_map"]], ["add", "theorem", "compact_conv_nhd_subset_compact_open", ["continuous_map"]], ["add", "theorem", "compact_conv_nhd_subset_inter", ["continuous_map"]], ["add", "def", "compact_convergence_filter_basis", ["continuous_map"]], ["add", "def", "compact_convergence_topology", ["continuous_map"]], ["add", "def", "compact_convergence_uniformity", ["continuous_map"]], ["add", "theorem", "compact_open_eq_compact_convergence", ["continuous_map"]], ["add", "theorem", "has_basis_compact_convergence_uniformity", ["continuous_map"]], ["add", "theorem", "has_basis_nhds_compact_convergence", ["continuous_map"]], ["add", "theorem", "mem_compact_convergence_entourage_iff", ["continuous_map"]], ["add", "theorem", "mem_compact_convergence_nhd_filter", ["continuous_map"]], ["add", "theorem", "mem_compact_convergence_uniformity", ["continuous_map"]], ["add", "theorem", "nhds_compact_convergence", ["continuous_map"]], ["add", "theorem", "self_mem_compact_conv_nhd", ["continuous_map"]], ["add", "theorem", "tendsto_iff_forall_compact_tendsto_uniformly_on'", ["continuous_map"]], ["add", "theorem", "tendsto_iff_forall_compact_tendsto_uniformly_on", ["continuous_map"]]]}]}, {"timestamp": 1640562574, "sha": "7c9ce5c0", "message": "feat(algebra/order/monoid_lemmas): `mul_eq_mul_iff_eq_and_eq` (#11056)\nIf `a ≤ c` and `b ≤ d`, then `a * b = c * d` iff `a = c` and `b = d`.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["add", "theorem", "mul_eq_mul_iff_eq_and_eq", []]]}]}, {"timestamp": 1640495127, "sha": "4f02336c", "message": "chore(analysis/complex/circle): minor review (#11059)\n* use implicit arg in `mem_circle_iff_abs`;\n* rename `abs_eq_of_mem_circle` to `abs_coe_circle` to reflect the type of LHS;\n* add `mem_circle_iff_norm_sq`.", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["add", "theorem", "abs_coe_circle", []], ["del", "theorem", "abs_eq_of_mem_circle", []], ["mod", "theorem", "circle_def", []], ["mod", "theorem", "mem_circle_iff_abs", []], ["add", "theorem", "mem_circle_iff_norm_sq", []]]}, {"oldPath": "src/analysis/special_functions/complex/circle.lean", "newPath": "src/analysis/special_functions/complex/circle.lean", "changes": []}]}, {"timestamp": 1640490568, "sha": "daab3ac4", "message": "feat(data/pi/interval): Dependent functions to locally finite orders are locally finite (#11050)\nThis provides the locally finite order instance for `Π i, α i` where the `α i` are locally finite.", "changes": [{"oldPath": null, "newPath": "src/data/pi/interval.lean", "changes": [["add", "theorem", "card_Icc", ["pi"]], ["add", "theorem", "card_Ico", ["pi"]], ["add", "theorem", "card_Ioc", ["pi"]], ["add", "theorem", "card_Ioo", ["pi"]]]}]}, {"timestamp": 1640490567, "sha": "2e2510ee", "message": "chore(logic/small): Some golfing (#11030)", "changes": [{"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": [["add", "theorem", "small_map", []]]}]}, {"timestamp": 1640490566, "sha": "dd6707c9", "message": "feat(measure_theory/integral): a couple of lemmas on integrals and integrability (#10983)\nAdds a couple of congruence lemmas for integrating on intervals and integrability", "changes": [{"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "congr_fun'", ["measure_theory", "integrable_on"]], ["add", "theorem", "congr_fun", ["measure_theory", "integrable_on"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["del", "theorem", "integral_Icc_eq_integral_Ioc'", ["interval_integral"]], ["del", "theorem", "integral_Icc_eq_integral_Ioc", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_Icc_eq_integral_Ioc'", ["measure_theory"]], ["add", "theorem", "integral_Icc_eq_integral_Ioc", ["measure_theory"]], ["add", "theorem", "integral_Ioc_eq_integral_Ioo'", ["measure_theory"]], ["add", "theorem", "integral_Ioc_eq_integral_Ioo", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "Ico_ae_eq_Icc'", ["measure_theory"]], ["add", "theorem", "Ico_ae_eq_Ioc'", ["measure_theory"]], ["add", "theorem", "Iio_ae_eq_Iic'", ["measure_theory"]], ["add", "theorem", "Ioc_ae_eq_Icc'", ["measure_theory"]], ["add", "theorem", "Ioi_ae_eq_Ici'", ["measure_theory"]], ["add", "theorem", "Ioo_ae_eq_Icc'", ["measure_theory"]], ["add", "theorem", "Ioo_ae_eq_Ico'", ["measure_theory"]], ["add", "theorem", "Ioo_ae_eq_Ioc'", ["measure_theory"]]]}]}, {"timestamp": 1640484029, "sha": "34e79d6c", "message": "chore(data/list/prod): remove an out of date comment (#11058)\nDue to changes in the library structure this comment is no longer relevant.", "changes": [{"oldPath": "src/data/list/prod_monoid.lean", "newPath": "src/data/list/prod_monoid.lean", "changes": []}]}, {"timestamp": 1640481652, "sha": "266d12be", "message": "chore(ring_theory/polynomial/bernstein): use `∑` notation (#11060)\nAlso rewrite a proof using `calc` mode", "changes": [{"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": [["mod", "theorem", "sum", ["bernstein_polynomial"]]]}]}, {"timestamp": 1640466318, "sha": "abf96572", "message": "feat(algebraic_geometry): Results about open immersions of schemes. (#10977)", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["del", "def", "to_LocallyRingedSpace", ["algebraic_geometry", "Scheme"]], ["mod", "structure", "Scheme", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "iso_restrict", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "Scheme_eq_of_LocallyRingedSpace_eq", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "Scheme_to_Scheme", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_Scheme", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_Scheme_hom", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_Scheme_hom_val", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_Scheme_to_LocallyRingedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "affine_basis_cover_obj", ["algebraic_geometry", "Scheme"]], ["add", "def", "affine_basis_cover_ring", ["algebraic_geometry", "Scheme"]]]}]}, {"timestamp": 1640466317, "sha": "07b578e5", "message": "feat(data/int/basic): add lemma `gcd_greatest` (#10613)\nProving a uniqueness property for `gcd`. This is (a version of) Theorem 1.3 in Apostol (1976) Introduction to Analytic Number Theory.", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["add", "theorem", "gcd_greatest", []], ["add", "theorem", "gcd_greatest_associated", []]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "gcd_greatest", ["int"]]]}]}, {"timestamp": 1640459646, "sha": "8d426f04", "message": "split(algebra/big_operators/multiset): Split off `data.multiset.basic` (#11043)\nThis moves\n* `multiset.prod`, `multiset.sum` to `algebra.big_operators.multiset`\n* `multiset.join`, `multiset.bind`, `multiset.product`, `multiset.sigma` to `data.multiset.bind`. This is needed as `join` is defined\n using `sum`.\nThe file was quite messy, so I reorganized `algebra.big_operators.multiset` by increasing typeclass assumptions.\nI'm crediting Mario for 0663945f55335e51c2b9b3a0177a84262dd87eaf (`prod`, `sum`, `join`), f9de18397dc1a43817803c2fe5d84b282287ed0d (`bind`, `product`), 16d40d7491d1fe8a733d21e90e516e0dd3f41c5b (`sigma`).", "changes": [{"oldPath": null, "newPath": "src/algebra/big_operators/multiset.lean", "changes": [["add", "theorem", "map_multiset_prod", ["monoid_hom"]], ["add", "theorem", "abs_sum_le_sum_abs", ["multiset"]], ["add", "theorem", "all_one_of_le_one_le_of_prod_eq_one", ["multiset"]], ["add", "theorem", "coe_inv_monoid_hom", ["multiset"]], ["add", "theorem", "coe_prod", ["multiset"]], ["add", "theorem", "coe_sum_add_monoid_hom", ["multiset"]], ["add", "theorem", "dvd_prod", ["multiset"]], ["add", "theorem", "dvd_sum", ["multiset"]], ["add", "theorem", "le_prod_nonempty_of_submultiplicative", ["multiset"]], ["add", "theorem", "le_prod_nonempty_of_submultiplicative_on_pred", ["multiset"]], ["add", "theorem", "le_prod_of_submultiplicative", ["multiset"]], ["add", "theorem", "le_prod_of_submultiplicative_on_pred", ["multiset"]], ["add", "theorem", "le_sum_of_mem", ["multiset"]], ["add", "theorem", "one_le_prod_of_one_le", ["multiset"]], ["add", "theorem", "pow_card_le_prod", ["multiset"]], ["add", "theorem", "pow_count", ["multiset"]], ["add", "def", "prod", ["multiset"]], ["add", "theorem", "prod_add", ["multiset"]], ["add", "theorem", "prod_cons", ["multiset"]], ["add", "theorem", "prod_dvd_prod", ["multiset"]], ["add", "theorem", "prod_eq_foldl", ["multiset"]], ["add", "theorem", "prod_eq_foldr", ["multiset"]], ["add", "theorem", "prod_eq_zero", ["multiset"]], ["add", "theorem", "prod_eq_zero_iff", ["multiset"]], ["add", "theorem", "prod_hom", ["multiset"]], ["add", "theorem", "prod_hom_rel", ["multiset"]], ["add", "theorem", "prod_induction", ["multiset"]], ["add", "theorem", "prod_induction_nonempty", ["multiset"]], ["add", "theorem", "prod_le_of_forall_le", ["multiset"]], ["add", "theorem", "prod_le_pow_card", ["multiset"]], ["add", "theorem", "prod_le_prod_of_rel_le", ["multiset"]], ["add", "theorem", "prod_le_sum_prod", ["multiset"]], ["add", "theorem", "prod_map_inv", ["multiset"]], ["add", "theorem", "prod_map_le_prod", ["multiset"]], ["add", "theorem", "prod_map_mul", ["multiset"]], ["add", "theorem", "prod_map_one", ["multiset"]], ["add", "theorem", "prod_map_prod_map", ["multiset"]], ["add", "theorem", "prod_ne_zero", ["multiset"]], ["add", "theorem", "prod_nonneg", ["multiset"]], ["add", "theorem", "prod_nsmul", ["multiset"]], ["add", "theorem", "prod_repeat", ["multiset"]], ["add", "theorem", "prod_singleton", ["multiset"]], ["add", "theorem", "prod_to_list", ["multiset"]], ["add", "theorem", "prod_zero", ["multiset"]], ["add", "theorem", "single_le_prod", ["multiset"]], ["add", "def", "sum_add_monoid_hom", ["multiset"]], ["add", "theorem", "sum_eq_zero_iff", ["multiset"]], ["add", "theorem", "sum_map_mul_left", ["multiset"]], ["add", "theorem", "sum_map_mul_right", ["multiset"]], ["add", "theorem", "sum_map_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "map_multiset_prod", ["monoid_hom"]], ["del", "theorem", "abs_sum_le_sum_abs", ["multiset"]], ["del", "theorem", "add_bind", ["multiset"]], ["del", "theorem", "add_product", ["multiset"]], ["del", "theorem", "add_sigma", ["multiset"]], ["del", "theorem", "all_one_of_le_one_le_of_prod_eq_one", ["multiset"]], ["del", "def", "bind", ["multiset"]], ["del", "theorem", "bind_add", ["multiset"]], ["del", "theorem", "bind_assoc", ["multiset"]], ["del", "theorem", "bind_bind", ["multiset"]], ["del", "theorem", "bind_congr", ["multiset"]], ["del", "theorem", "bind_cons", ["multiset"]], ["del", "theorem", "bind_hcongr", ["multiset"]], ["del", "theorem", "bind_map", ["multiset"]], ["del", "theorem", "bind_map_comm", ["multiset"]], ["del", "theorem", "bind_singleton", ["multiset"]], ["del", "theorem", "bind_zero", ["multiset"]], ["del", "theorem", "card_bind", ["multiset"]], ["del", "theorem", "card_join", ["multiset"]], ["del", "theorem", "card_nsmul_le_sum", ["multiset"]], ["del", "theorem", "card_product", ["multiset"]], ["del", "theorem", "card_sigma", ["multiset"]], ["del", "theorem", "coe_bind", ["multiset"]], ["del", "theorem", "coe_inv_monoid_hom", ["multiset"]], ["del", "theorem", "coe_join", ["multiset"]], ["del", "theorem", "coe_prod", ["multiset"]], ["del", "theorem", "coe_product", ["multiset"]], ["del", "theorem", "coe_sigma", ["multiset"]], ["del", "theorem", "coe_sum_add_monoid_hom", ["multiset"]], ["del", "theorem", "cons_bind", ["multiset"]], ["del", "theorem", "cons_product", ["multiset"]], ["del", "theorem", "cons_sigma", ["multiset"]], ["del", "theorem", "count_bind", ["multiset"]], ["del", "theorem", "count_sum", ["multiset"]], ["del", "theorem", "dvd_prod", ["multiset"]], ["del", "theorem", "dvd_sum", ["multiset"]], ["del", "def", "join", ["multiset"]], ["del", "theorem", "join_add", ["multiset"]], ["del", "theorem", "join_cons", ["multiset"]], ["del", "theorem", "join_zero", ["multiset"]], ["del", "theorem", "le_prod_nonempty_of_submultiplicative", ["multiset"]], ["del", "theorem", "le_prod_nonempty_of_submultiplicative_on_pred", ["multiset"]], ["del", "theorem", "le_prod_of_submultiplicative", ["multiset"]], ["del", "theorem", "le_prod_of_submultiplicative_on_pred", ["multiset"]], ["del", "theorem", "le_sum_of_mem", ["multiset"]], ["del", "theorem", "map_bind", ["multiset"]], ["del", "theorem", "mem_bind", ["multiset"]], ["del", "theorem", "mem_join", ["multiset"]], ["del", "theorem", "mem_product", ["multiset"]], ["del", "theorem", "mem_sigma", ["multiset"]], ["del", "theorem", "one_le_prod_of_one_le", ["multiset"]], ["del", "theorem", "pow_count", ["multiset"]], ["del", "def", "prod", ["multiset"]], ["del", "theorem", "prod_add", ["multiset"]], ["del", "theorem", "prod_bind", ["multiset"]], ["del", "theorem", "prod_cons", ["multiset"]], ["del", "theorem", "prod_dvd_prod", ["multiset"]], ["del", "theorem", "prod_eq_foldl", ["multiset"]], ["del", "theorem", "prod_eq_foldr", ["multiset"]], ["del", "theorem", "prod_eq_zero", ["multiset"]], ["del", "theorem", "prod_eq_zero_iff", ["multiset"]], ["del", "theorem", "prod_hom", ["multiset"]], ["del", "theorem", "prod_hom_rel", ["multiset"]], ["del", "theorem", "prod_induction", ["multiset"]], ["del", "theorem", "prod_induction_nonempty", ["multiset"]], ["del", "theorem", "prod_le_of_forall_le", ["multiset"]], ["del", "theorem", "prod_map_inv", ["multiset"]], ["del", "theorem", "prod_map_mul", ["multiset"]], ["del", "theorem", "prod_map_one", ["multiset"]], ["del", "theorem", "prod_map_prod_map", ["multiset"]], ["del", "theorem", "prod_ne_zero", ["multiset"]], ["del", "theorem", "prod_nonneg", ["multiset"]], ["del", "theorem", "prod_nsmul", ["multiset"]], ["del", "theorem", "prod_repeat", ["multiset"]], ["del", "theorem", "prod_singleton", ["multiset"]], ["del", "theorem", "prod_to_list", ["multiset"]], ["del", "theorem", "prod_zero", ["multiset"]], ["del", "def", "product", ["multiset"]], ["del", "theorem", "product_add", ["multiset"]], ["del", "theorem", "product_singleton", ["multiset"]], ["del", "theorem", "rel_bind", ["multiset"]], ["del", "theorem", "rel_join", ["multiset"]], ["del", "theorem", "sigma_add", ["multiset"]], ["del", "theorem", "sigma_singleton", ["multiset"]], ["del", "theorem", "single_le_prod", ["multiset"]], ["del", "theorem", "singleton_bind", ["multiset"]], ["del", "theorem", "singleton_join", ["multiset"]], ["del", "def", "sum_add_monoid_hom", ["multiset"]], ["del", "theorem", "sum_eq_zero_iff", ["multiset"]], ["del", "theorem", "sum_le_card_nsmul", ["multiset"]], ["del", "theorem", "sum_le_sum_map", ["multiset"]], ["del", "theorem", "sum_le_sum_of_rel_le", ["multiset"]], ["del", "theorem", "sum_map_le_sum", ["multiset"]], ["del", "theorem", "sum_map_mul_left", ["multiset"]], ["del", "theorem", "sum_map_mul_right", ["multiset"]], ["del", "theorem", "sum_map_singleton", ["multiset"]], ["del", "theorem", "zero_bind", ["multiset"]], ["del", "theorem", "zero_product", ["multiset"]], ["del", "theorem", "zero_sigma", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/bind.lean", "changes": [["add", "theorem", "add_bind", ["multiset"]], ["add", "theorem", "add_product", ["multiset"]], ["add", "theorem", "add_sigma", ["multiset"]], ["add", "def", "bind", ["multiset"]], ["add", "theorem", "bind_add", ["multiset"]], ["add", "theorem", "bind_assoc", ["multiset"]], ["add", "theorem", "bind_bind", ["multiset"]], ["add", "theorem", "bind_congr", ["multiset"]], ["add", "theorem", "bind_cons", ["multiset"]], ["add", "theorem", "bind_hcongr", ["multiset"]], ["add", "theorem", "bind_map", ["multiset"]], ["add", "theorem", "bind_map_comm", ["multiset"]], ["add", "theorem", "bind_singleton", ["multiset"]], ["add", "theorem", "bind_zero", ["multiset"]], ["add", "theorem", "card_bind", ["multiset"]], ["add", "theorem", "card_join", ["multiset"]], ["add", "theorem", "card_product", ["multiset"]], ["add", "theorem", "card_sigma", ["multiset"]], ["add", "theorem", "coe_bind", ["multiset"]], ["add", "theorem", "coe_join", ["multiset"]], ["add", "theorem", "coe_product", ["multiset"]], ["add", "theorem", "coe_sigma", ["multiset"]], ["add", "theorem", "cons_bind", ["multiset"]], ["add", "theorem", "cons_product", ["multiset"]], ["add", "theorem", "cons_sigma", ["multiset"]], ["add", "theorem", "count_bind", ["multiset"]], ["add", "theorem", "count_sum", ["multiset"]], ["add", "def", "join", ["multiset"]], ["add", "theorem", "join_add", ["multiset"]], ["add", "theorem", "join_cons", ["multiset"]], ["add", "theorem", "join_zero", ["multiset"]], ["add", "theorem", "map_bind", ["multiset"]], ["add", "theorem", "mem_bind", ["multiset"]], ["add", "theorem", "mem_join", ["multiset"]], ["add", "theorem", "mem_product", ["multiset"]], ["add", "theorem", "mem_sigma", ["multiset"]], ["add", "theorem", "prod_bind", ["multiset"]], ["add", "def", "product", ["multiset"]], ["add", "theorem", "product_add", ["multiset"]], ["add", "theorem", "product_singleton", ["multiset"]], ["add", "theorem", "rel_bind", ["multiset"]], ["add", "theorem", "rel_join", ["multiset"]], ["add", "theorem", "sigma_add", ["multiset"]], ["add", "theorem", "sigma_singleton", ["multiset"]], ["add", "theorem", "singleton_bind", ["multiset"]], ["add", "theorem", "singleton_join", ["multiset"]], ["add", "theorem", "zero_bind", ["multiset"]], ["add", "theorem", "zero_product", ["multiset"]], ["add", "theorem", "zero_sigma", ["multiset"]]]}, {"oldPath": "src/data/multiset/functor.lean", "newPath": "src/data/multiset/functor.lean", "changes": []}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": "src/data/multiset/sections.lean", "newPath": "src/data/multiset/sections.lean", "changes": []}]}, {"timestamp": 1640452805, "sha": "4923cfc5", "message": "chore(set_theory/ordinal): Removed redundant argument from `enum_typein` (#11049)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "enum_typein", ["ordinal"]]]}]}, {"timestamp": 1640452804, "sha": "ad99529e", "message": "feat(data/set/basic): Added `range_eq_iff` (#11044)\nThis serves as a convenient theorem for proving statements of the form `range f = S`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_eq_iff", ["set"]]]}]}, {"timestamp": 1640448990, "sha": "914250ef", "message": "chore(data/real/ennreal): adjust form of `to_real_pos_iff` (#11047)\nWe have a principle (which may not have been crystallized at the time of writing of `data/real/ennreal`) that hypotheses of lemmas should contain the weak form `a ≠ ∞`, while conclusions should report the strong form `a < ∞`, and also the same for `a ≠ 0`, `0 < a`.\nIn the case of the existing lemma\n```lean\nlemma to_real_pos_iff : 0 < a.to_real ↔ (0 < a ∧ a ≠ ∞):=\n```\nit's not clear whether the RHS of the iff should count as a hypothesis or a conclusion. So I have rewritten to provide two forms,\n```lean\nlemma to_real_pos_iff : 0 < a.to_real ↔ (0 < a ∧ a < ∞):=\nlemma to_real_pos {a : ℝ≥0∞} (ha₀ : a ≠ 0) (ha_top : a ≠ ∞) : 0 < a.to_real :=\n```\nHaving both versions available shortens many proofs slightly.", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_inv_le", ["ennreal"]], ["add", "theorem", "to_nnreal_pos", ["ennreal"]], ["mod", "theorem", "to_nnreal_pos_iff", ["ennreal"]], ["add", "theorem", "to_real_pos", ["ennreal"]], ["mod", "theorem", "to_real_pos_iff", ["ennreal"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": [["mod", "theorem", "measure_lt_top_of_mem_ℒp_indicator", ["measure_theory", "simple_func"]], ["mod", "theorem", "measure_preimage_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["mod", "theorem", "mem_ℒp_iff", ["measure_theory", "simple_func"]], ["mod", "theorem", "mem_ℒp_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["mod", "theorem", "mem_ℒp_iff_integrable", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}]}, {"timestamp": 1640428190, "sha": "c9f47c97", "message": "chore(data/matrix/block): Eliminate `finish` (#10948)\nRemoving uses of finish, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": []}]}, {"timestamp": 1640428189, "sha": "0aca7061", "message": "feat(measure_theory/integral): define `circle_integral` (#10906)", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "image_Ioc", ["function", "periodic"]]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/circle_integral.lean", "changes": [["add", "theorem", "abs_circle_map_zero", []], ["add", "def", "cauchy_power_series", []], ["add", "theorem", "cauchy_power_series_apply", []], ["add", "theorem", "add", ["circle_integrable"]], ["add", "theorem", "neg", ["circle_integrable"]], ["add", "theorem", "out", ["circle_integrable"]], ["add", "def", "circle_integrable", []], ["add", "theorem", "circle_integrable_const", []], ["add", "theorem", "circle_integrable_iff", []], ["add", "theorem", "circle_integrable_sub_inv_iff", []], ["add", "theorem", "circle_integrable_sub_zpow_iff", []], ["add", "theorem", "circle_integrable_zero_radius", []], ["add", "theorem", "integral_congr", ["circle_integral"]], ["add", "theorem", "integral_const_mul", ["circle_integral"]], ["add", "theorem", "integral_eq_zero_of_has_deriv_within_at'", ["circle_integral"]], ["add", "theorem", "integral_eq_zero_of_has_deriv_within_at", ["circle_integral"]], ["add", "theorem", "integral_radius_zero", ["circle_integral"]], ["add", "theorem", "integral_smul", ["circle_integral"]], ["add", "theorem", "integral_smul_const", ["circle_integral"]], ["add", "theorem", "integral_sub", ["circle_integral"]], ["add", "theorem", "integral_sub_center_inv", ["circle_integral"]], ["add", "theorem", "integral_sub_inv_of_mem_ball", ["circle_integral"]], ["add", "theorem", "integral_sub_zpow_of_ne", ["circle_integral"]], ["add", "theorem", "integral_sub_zpow_of_undef", ["circle_integral"]], ["add", "theorem", "integral_undef", ["circle_integral"]], ["add", "theorem", "norm_integral_le_of_norm_le_const'", ["circle_integral"]], ["add", "theorem", "norm_integral_le_of_norm_le_const", ["circle_integral"]], ["add", "def", "circle_integral", []], ["add", "def", "circle_map", []], ["add", "theorem", "circle_map_eq_center_iff", []], ["add", "theorem", "circle_map_mem_closed_ball", []], ["add", "theorem", "circle_map_mem_sphere'", []], ["add", "theorem", "circle_map_mem_sphere", []], ["add", "theorem", "circle_map_ne_center", []], ["add", "theorem", "circle_map_sub_center", []], ["add", "theorem", "circle_map_zero_radius", []], ["add", "theorem", "continuous_circle_map", []], ["add", "theorem", "circle_integrable'", ["continuous_on"]], ["add", "theorem", "circle_integrable", ["continuous_on"]], ["add", "theorem", "deriv_circle_map", []], ["add", "theorem", "deriv_circle_map_eq_zero_iff", []], ["add", "theorem", "deriv_circle_map_ne_zero", []], ["add", "theorem", "differentiable_circle_map", []], ["add", "theorem", "has_deriv_at_circle_map", []], ["add", "theorem", "has_fpower_series_on_cauchy_integral", []], ["add", "theorem", "has_sum_cauchy_power_series_integral", []], ["add", "theorem", "has_sum_two_pi_I_cauchy_power_series_integral", []], ["add", "theorem", "image_circle_map_Ioc", []], ["add", "theorem", "le_radius_cauchy_power_series", []], ["add", "theorem", "lipschitz_with_circle_map", []], ["add", "theorem", "measurable_circle_map", []], ["add", "theorem", "norm_cauchy_power_series_le", []], ["add", "theorem", "periodic_circle_map", []], ["add", "theorem", "range_circle_map", []], ["add", "theorem", "sum_cauchy_power_series_eq_integral", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "closed_ball_mem_nhds_of_mem", ["metric"]]]}]}, {"timestamp": 1640411485, "sha": "ef8005cd", "message": "chore(category_theory/limits) : Remove instance requirement (#11041)", "changes": [{"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": []}]}, {"timestamp": 1640411484, "sha": "864a12e8", "message": "chore(measure_theory/function/lp_space): use notation for `nnnorm` (#11039)", "changes": [{"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "snorm_one_eq_lintegral_nnnorm", ["measure_theory"]]]}]}, {"timestamp": 1640411483, "sha": "0f076d24", "message": "chore(algebra/*): Eliminate `finish` (#11034)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}]}, {"timestamp": 1640411482, "sha": "f9561d40", "message": "feat(ring_theory/localization): The localization at a fg submonoid is of finite type. (#10990)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "equiv_inv_submonoid", ["is_localization"]], ["add", "theorem", "finite_type_of_monoid_fg", ["is_localization"]], ["add", "def", "inv_submonoid", ["is_localization"]], ["add", "theorem", "mem_inv_submonoid_iff_exists_mk'", ["is_localization"]], ["add", "theorem", "mul_to_inv_submonoid", ["is_localization"]], ["add", "theorem", "smul_to_inv_submonoid", ["is_localization"]], ["add", "theorem", "span_inv_submonoid", ["is_localization"]], ["add", "theorem", "submonoid_map_le_is_unit", ["is_localization"]], ["add", "theorem", "surj'", ["is_localization"]], ["add", "def", "to_inv_submonoid", ["is_localization"]], ["add", "theorem", "to_inv_submonoid_eq_mk'", ["is_localization"]], ["add", "theorem", "to_inv_submonoid_mul", ["is_localization"]], ["add", "theorem", "to_inv_submonoid_surjective", ["is_localization"]]]}]}, {"timestamp": 1640411481, "sha": "5719a029", "message": "feat(data/nat/totient): add totient_mul_prime_div (#10971)\nWe add `(p * n).totient = p * n.totient` if `p ∣ n`.", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_mul_of_prime_of_dvd", ["nat"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "exists_eq_pow_mul_and_not_dvd", ["multiplicity"]], ["add", "theorem", "pos_of_dvd", ["multiplicity"]]]}]}, {"timestamp": 1640411480, "sha": "d28b3bd5", "message": "feat(combinatorics/configuration): Points and lines inequality (#10772)\nIf a nondegenerate configuration has a unique line through any two points, then there are at least as many lines as points.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "card_le", ["configuration", "has_lines"]], ["add", "theorem", "card_le", ["configuration", "has_points"]]]}]}, {"timestamp": 1640408965, "sha": "0dd60aeb", "message": "feat(algebraic_geometry): Schemes are sober. (#11040)\nAlso renamed things in `topology/sober.lean`.", "changes": [{"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": [["add", "theorem", "quasi_sober", ["closed_embedding"]], ["del", "theorem", "sober", ["closed_embedding"]], ["add", "theorem", "quasi_sober", ["open_embedding"]], ["del", "theorem", "sober", ["open_embedding"]], ["add", "theorem", "quasi_sober_of_open_cover", []], ["del", "theorem", "sober_of_open_cover", []]]}]}, {"timestamp": 1640398650, "sha": "f80c18bf", "message": "feat(measure_theory/measure/haar_lebesgue): Lebesgue measure of the image of a set under a linear map (#11038)\nThe image of a set `s` under a linear map `f` has measure equal to `μ s` times the absolute value of the determinant of `f`.", "changes": [{"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "theorem", "add_haar_eq_zero_of_disjoint_translates", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_eq_zero_of_disjoint_translates_aux", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_image_continuous_linear_equiv", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_image_continuous_linear_map", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_image_linear_map", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_preimage_continuous_linear_equiv", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_preimage_continuous_linear_map", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_preimage_linear_equiv", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_preimage_linear_map", ["measure_theory", "measure"]], ["mod", "theorem", "add_haar_preimage_smul", ["measure_theory", "measure"]], ["mod", "theorem", "add_haar_smul", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_submodule", ["measure_theory", "measure"]], ["del", "theorem", "haar_preimage_linear_map", ["measure_theory", "measure"]]]}]}, {"timestamp": 1640387400, "sha": "aa669096", "message": "chore(algebraic_geometry): Remove unwanted spaces. (#11042)", "changes": [{"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}]}, {"timestamp": 1640387399, "sha": "d6ecc14a", "message": "feat(data/mv_polynomial): API for mv polynomial.rename (#10921)\nRelation between `rename` and `support`, `degrees` and `degree_of` when `f : σ → τ` is injective.\n- I'm not sure if we already have something like `sup_map_multiset`.\n- I've stated `sup_map_multiset`using `embedding` but I've used `injective` elsewhere because `mv_polynomial.rename` is written using `injective`.\n- I'm not sure if we should have `map_domain_embedding_of_injective`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "map_finset_sup", ["multiset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "map_domain_embedding", ["finsupp"]], ["add", "theorem", "map_domain_support_of_injective", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["add", "theorem", "support_rename_of_injective", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "degree_of_rename_of_injective", ["mv_polynomial"]], ["add", "theorem", "degrees_rename_of_injective", ["mv_polynomial"]]]}]}, {"timestamp": 1640387398, "sha": "f7038c24", "message": "feat(analysis/inner_product_space/adjoint): show that continuous linear maps on a Hilbert space form a C*-algebra (#10837)\nThis PR puts a `cstar_ring` instance on `E →L[𝕜] E`, thereby showing that it forms a C*-algebra.\n- [x] depends on: #10825 [which defines the adjoint]", "changes": [{"oldPath": "src/analysis/inner_product_space/adjoint.lean", "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "theorem", "apply_norm_eq_sqrt_inner_adjoint_left", ["continuous_linear_map"]], ["add", "theorem", "apply_norm_eq_sqrt_inner_adjoint_right", ["continuous_linear_map"]], ["add", "theorem", "apply_norm_sq_eq_inner_adjoint_left", ["continuous_linear_map"]], ["add", "theorem", "apply_norm_sq_eq_inner_adjoint_right", ["continuous_linear_map"]], ["add", "theorem", "star_eq_adjoint", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "re_inner_le_norm", []]]}]}, {"timestamp": 1640380453, "sha": "8a997f3f", "message": "feat(combinatorics/configuration): Inequality between `point_count` and `line_count` (#11036)\nAn inequality between `point_count` and `line_count`.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "point_count_le_line_count", ["configuration", "has_lines"]], ["add", "theorem", "line_count_le_point_count", ["configuration", "has_points"]]]}]}, {"timestamp": 1640380452, "sha": "8181fe89", "message": "feat(measure_theory/covering/besicovitch): covering a set by balls with controlled measure (#11035)\nWe show that, in a real vector space, any set `s` can be covered by balls whose measures add up to at most `μ s + ε`, as a consequence of the Besicovitch covering theorem.", "changes": [{"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": [["add", "theorem", "exists_closed_ball_covering_tsum_measure_le", ["besicovitch"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_congr_subtype", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tsum_Union_le", ["ennreal"]], ["add", "theorem", "tsum_bUnion_le", ["ennreal"]], ["add", "theorem", "tsum_mono_subtype", ["ennreal"]], ["add", "theorem", "tsum_union_le", ["ennreal"]]]}]}, {"timestamp": 1640380451, "sha": "a998db66", "message": "refactor(data/nat/prime): redefine nat.prime as irreducible (#11031)", "changes": [{"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "archive/imo/imo1969_q1.lean", "newPath": "archive/imo/imo1969_q1.lean", "changes": [["mod", "def", "good_nats", []], ["mod", "theorem", "imo1969_q1", []], ["mod", "theorem", "polynomial_not_prime", []]]}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "ne_one", ["irreducible"]]]}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/data/int/nat_prime.lean", "newPath": "src/data/int/nat_prime.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "def", "min_fac_aux", ["nat"]], ["mod", "theorem", "not_prime_one", ["nat"]], ["mod", "theorem", "not_prime_zero", ["nat"]], ["add", "theorem", "eq_one_or_self_of_dvd", ["nat", "prime"]], ["mod", "theorem", "ne_zero", ["nat", "prime"]], ["mod", "theorem", "pos", ["nat", "prime"]], ["mod", "theorem", "two_le", ["nat", "prime"]], ["mod", "def", "prime", ["nat"]], ["add", "theorem", "prime_def_lt''", ["nat"]], ["add", "theorem", "two_le_iff", ["nat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": [["mod", "theorem", "dvd_choose_of_middling_prime", []], ["mod", "def", "primorial", []], ["mod", "theorem", "prod_primes_dvd", []]]}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["mod", "theorem", "irreducible_iff_nat_prime", []]]}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}]}, {"timestamp": 1640380450, "sha": "3588c3a0", "message": "feat(data/multiset/basic): empty_or_exists_mem (#11023)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "empty_or_exists_mem", ["multiset"]]]}]}, {"timestamp": 1640380449, "sha": "404a9125", "message": "chore(ring_theory/adjoin/power_basis): add `simps` (#11018)", "changes": [{"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1640380448, "sha": "d5a3e8c2", "message": "feat(ring_theory/derivation): add 3 lemmas (#10996)\nAdd `map_smul_of_tower`, `map_coe_nat`, and `map_coe_int`.", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "theorem", "map_coe_int", ["derivation"]], ["add", "theorem", "map_coe_nat", ["derivation"]], ["add", "theorem", "map_smul_of_tower", ["derivation"]]]}]}, {"timestamp": 1640380447, "sha": "c4268a86", "message": "feat(topology,analysis): there exists `y ∈ frontier s` at distance `inf_dist x sᶜ` from `x` (#10976)", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "exists_mem_frontier_inf_dist_compl_eq_dist", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "exists_inf_dist_eq_dist", ["is_closed"]], ["add", "theorem", "exists_inf_dist_eq_dist", ["is_compact"]], ["mod", "theorem", "exists_inf_edist_eq_edist", ["is_compact"]], ["add", "theorem", "closed_ball_inf_dist_compl_subset_closure'", ["metric"]], ["add", "theorem", "closed_ball_inf_dist_compl_subset_closure", ["metric"]], ["add", "theorem", "disjoint_ball_inf_dist", ["metric"]], ["add", "theorem", "exists_mem_closure_inf_dist_eq_dist", ["metric"]], ["add", "theorem", "inf_dist_inter_closed_ball_of_mem", ["metric"]], ["add", "theorem", "not_mem_of_dist_lt_inf_dist", ["metric"]]]}]}, {"timestamp": 1640373800, "sha": "5dac1c08", "message": "chore(topology/*): Eliminate `finish` (#10991)\nRemoving uses of finish, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "fin_two_eq_of_eq_zero_iff", ["fin"]]]}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1640363551, "sha": "35b67fd9", "message": "feat(algebra/order/field, data/real/basic): lemmas about `Sup` and `is_lub` (#11013)\nAdd a lemma stating that for `f : α → ℝ` with `α` empty, `(⨆ i, f i) = 0`; a lemma stating that in an ordered field `is_lub` scales under multiplication by a nonnegative constant, and some variants.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "mul_left", ["is_glb"]], ["add", "theorem", "mul_right", ["is_glb"]], ["add", "theorem", "mul_left", ["is_lub"]], ["add", "theorem", "mul_right", ["is_lub"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "cinfi_const_zero", ["real"]], ["add", "theorem", "cinfi_empty", ["real"]], ["add", "theorem", "csupr_const_zero", ["real"]], ["add", "theorem", "csupr_empty", ["real"]]]}]}, {"timestamp": 1640363550, "sha": "3377bccd", "message": "feat(analysis/inner_product_space/adjoint): define the adjoint of a continuous linear map between Hilbert spaces (#10825)\nThis PR defines the adjoint of an operator `A : E →L[𝕜] F` as the unique operator `adjoint A : F →L[𝕜] E` such that `⟪x, A y⟫ = ⟪adjoint A x, y⟫` for all `x` and `y`. We then use this to put a star algebra structure on `E →L[𝕜] E` with the adjoint as the star operation (while leaving the C* property for a subsequent PR).", "changes": [{"oldPath": null, "newPath": "src/analysis/inner_product_space/adjoint.lean", "changes": [["add", "def", "adjoint", ["continuous_linear_map"]], ["add", "theorem", "adjoint_adjoint", ["continuous_linear_map"]], ["add", "def", "adjoint_aux", ["continuous_linear_map"]], ["add", "theorem", "adjoint_aux_adjoint_aux", ["continuous_linear_map"]], ["add", "theorem", "adjoint_aux_apply", ["continuous_linear_map"]], ["add", "theorem", "adjoint_aux_inner_left", ["continuous_linear_map"]], ["add", "theorem", "adjoint_aux_inner_right", ["continuous_linear_map"]], ["add", "theorem", "adjoint_aux_norm", ["continuous_linear_map"]], ["add", "theorem", "adjoint_comp", ["continuous_linear_map"]], ["add", "theorem", "adjoint_inner_left", ["continuous_linear_map"]], ["add", "theorem", "adjoint_inner_right", ["continuous_linear_map"]], ["add", "theorem", "eq_adjoint_iff", ["continuous_linear_map"]], ["add", "theorem", "is_adjoint_pair", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "def", "to_sesq_form", ["continuous_linear_map"]], ["add", "theorem", "to_sesq_form_apply_coe", ["continuous_linear_map"]], ["add", "theorem", "to_sesq_form_apply_norm_le", ["continuous_linear_map"]], ["add", "def", "innerSL_flip", []], ["add", "theorem", "innerSL_flip_apply", []]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["add", "theorem", "ext_inner_left", ["inner_product_space"]], ["add", "theorem", "ext_inner_right", ["inner_product_space"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_ext", ["continuous_linear_map"]], ["add", "theorem", "norm_to_continuous_linear_map_comp", ["linear_isometry"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "comp_smulₛₗ", ["continuous_linear_map"]]]}]}, {"timestamp": 1640359909, "sha": "99c634cc", "message": "feat(analysis/normed_space/spectrum): adds easy direction of Gelfand's formula for the spectral radius (#10847)\nThis adds the easy direction (i.e., an inequality) of Gelfand's formula for the spectral radius. Namely, we prove that `spectral_radius 𝕜 a ≤ ∥a ^ (n + 1)∥₊ ^ (1 / (n + 1) : ℝ)` for all `n : ℕ` using the spectral mapping theorem for polynomials.\n- [x] depends on: #10783", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "norm_to_nnreal", []]]}, {"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "spectral_radius_le_pow_nnnorm_pow_one_div", ["spectrum"]]]}]}, {"timestamp": 1640354238, "sha": "ffbab0dc", "message": "chore(group_theory/quotient_group): change injective_ker_lift to ker_lift_injective for naming regularisation (#11027)\nMinor change for naming regularisation.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1640354237, "sha": "a0993e4d", "message": "feat(combinatorics/configuration): Sum of line counts equals sum of point counts (#11026)\nCounting the set `{(p,l) : P × L | p ∈ l}` in two different ways.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "sum_line_count_eq_sum_point_count", ["configuration"]]]}]}, {"timestamp": 1640354236, "sha": "04aeb019", "message": "feat(data/polynomial/ring_division): roots.le_of_dvd (#11025)", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "le_of_dvd", ["polynomial", "roots"]]]}]}, {"timestamp": 1640354235, "sha": "c0e613a2", "message": "feat(combinatorics/configuration): `nondegenerate.exists_injective_of_card_le` (#11019)\nIf a nondegenerate configuration has at least as many points as lines, then there exists an injective function `f` from lines to points, such that `f l` does not lie on `l`.\nThis is the key lemma for #10772. The proof is an application of Hall's marriage theorem.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "theorem", "exists_injective_of_card_le", ["configuration", "nondegenerate"]]]}]}, {"timestamp": 1640354234, "sha": "2c4e6dfd", "message": "feat(data/real/ennreal): trichotomy lemmas (#11014)\nIf there is a case split one performs frequently, it can be useful to provide the case split and the standard data-wrangling one performs after the case split together. I do this here for the `ennreal` case-split lemma\n```lean\nprotected lemma trichotomy (p : ℝ≥0∞) : p = 0 ∨ p = ∞ ∨ 0 < p.to_real :=\n```\nand a couple of variants.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}]}, {"timestamp": 1640354232, "sha": "7c7195f6", "message": "feat(field_theory/adjoin): lemmas about `inf`s of `intermediate_field`s (#10997)\nThis adjusts the data in the `galois_insertion` slightly such that this new lemma is true by `rfl`, to match how we handle this in `subalgebra`. As a result, `top_to_subalgebra` is now refl, but `adjoin_univ` is no longer refl.\nThis also adds a handful of trivial simp lemmas.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "Inf_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "Inf_to_subfield", ["intermediate_field"]], ["add", "theorem", "adjoin_univ", ["intermediate_field"]], ["add", "theorem", "coe_Inf", ["intermediate_field"]], ["add", "theorem", "coe_bot", ["intermediate_field"]], ["add", "theorem", "coe_inf", ["intermediate_field"]], ["add", "theorem", "coe_infi", ["intermediate_field"]], ["add", "theorem", "coe_top", ["intermediate_field"]], ["add", "theorem", "inf_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "inf_to_subfield", ["intermediate_field"]], ["add", "theorem", "infi_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "infi_to_subfield", ["intermediate_field"]], ["add", "theorem", "mem_inf", ["intermediate_field"]], ["mod", "theorem", "mem_top", ["intermediate_field"]], ["add", "theorem", "top_to_subfield", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_copy", ["intermediate_field"]], ["add", "theorem", "copy_eq", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}]}, {"timestamp": 1640354231, "sha": "d329d6bd", "message": "feat(combinatorics/simple_graph/connectivity): walks, paths, cycles (#10981)\nThis is the first chunk of #8737, which gives a type for walks in a simple graph as well as some basic operations.\nIt is designed to one day generalize to other types of graphs once there is a more generic framework by swapping out the `G.adj u v` argument from `walk`.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/connectivity.lean", "changes": [["add", "def", "append", ["simple_graph", "walk"]], ["add", "theorem", "append_assoc", ["simple_graph", "walk"]], ["add", "theorem", "append_nil", ["simple_graph", "walk"]], ["add", "theorem", "chain_adj_support", ["simple_graph", "walk"]], ["add", "theorem", "chain_adj_support_aux", ["simple_graph", "walk"]], ["add", "theorem", "cons_append", ["simple_graph", "walk"]], ["add", "theorem", "cons_is_path_iff", ["simple_graph", "walk"]], ["add", "theorem", "cons_is_trail_iff", ["simple_graph", "walk"]], ["add", "theorem", "cons_nil_append", ["simple_graph", "walk"]], ["add", "theorem", "cons_reverse_aux", ["simple_graph", "walk"]], ["add", "theorem", "count_edges_eq_one_of_trail", ["simple_graph", "walk"]], ["add", "theorem", "count_edges_le_one_of_trail", ["simple_graph", "walk"]], ["add", "def", "edges", ["simple_graph", "walk"]], ["add", "theorem", "edges_cons", ["simple_graph", "walk"]], ["add", "theorem", "edges_nil", ["simple_graph", "walk"]], ["add", "theorem", "edges_subset_edge_set", ["simple_graph", "walk"]], ["add", "theorem", "end_mem_support", ["simple_graph", "walk"]], ["add", "def", "get_vert", ["simple_graph", "walk"]], ["add", "structure", "is_circuit", ["simple_graph", "walk"]], ["add", "structure", "is_cycle", ["simple_graph", "walk"]], ["add", "theorem", "is_cycle_def", ["simple_graph", "walk"]], ["add", "structure", "is_path", ["simple_graph", "walk"]], ["add", "theorem", "is_path_def", ["simple_graph", "walk"]], ["add", "theorem", "is_path_of_cons_is_path", ["simple_graph", "walk"]], ["add", "def", "is_trail", ["simple_graph", "walk"]], ["add", "theorem", "is_trail_of_cons_is_trail", ["simple_graph", "walk"]], ["add", "def", "length", ["simple_graph", "walk"]], ["add", "theorem", "length_append", ["simple_graph", "walk"]], ["add", "theorem", "length_cons", ["simple_graph", "walk"]], ["add", "theorem", "length_edges", ["simple_graph", "walk"]], ["add", "theorem", "length_nil", ["simple_graph", "walk"]], ["add", "theorem", "length_reverse", ["simple_graph", "walk"]], ["add", "theorem", "length_support", ["simple_graph", "walk"]], ["add", "theorem", "mem_support_of_mem_edges", ["simple_graph", "walk"]], ["add", "theorem", "nil_append", ["simple_graph", "walk"]], ["add", "theorem", "nil_is_path", ["simple_graph", "walk"]], ["add", "theorem", "nil_is_trail", ["simple_graph", "walk"]], ["add", "def", "reverse", ["simple_graph", "walk"]], ["add", "theorem", "reverse_append", ["simple_graph", "walk"]], ["add", "theorem", "reverse_cons", ["simple_graph", "walk"]], ["add", "theorem", "reverse_nil", ["simple_graph", "walk"]], ["add", "theorem", "reverse_reverse", ["simple_graph", "walk"]], ["add", "theorem", "reverse_singleton", ["simple_graph", "walk"]], ["add", "theorem", "start_mem_support", ["simple_graph", "walk"]], ["add", "def", "support", ["simple_graph", "walk"]], ["add", "theorem", "support_cons", ["simple_graph", "walk"]], ["add", "theorem", "support_eq", ["simple_graph", "walk"]], ["add", "theorem", "support_ne_nil", ["simple_graph", "walk"]], ["add", "theorem", "support_nil", ["simple_graph", "walk"]], ["add", "inductive", "walk", ["simple_graph"]]]}]}, {"timestamp": 1640354230, "sha": "028c161c", "message": "feat(topology/is_locally_homeomorph): New file (#10960)\nThis PR defines local homeomorphisms.", "changes": [{"oldPath": null, "newPath": "src/topology/is_locally_homeomorph.lean", "changes": [["add", "theorem", "is_open_map", ["is_locally_homeomorph"]], ["add", "theorem", "map_nhds_eq", ["is_locally_homeomorph"]], ["add", "theorem", "mk", ["is_locally_homeomorph"]], ["add", "def", "is_locally_homeomorph", []]]}]}, {"timestamp": 1640354229, "sha": "a0f12bc1", "message": "feat(field_theory/adjoin): Supremum of finite dimensional intermediate fields (#10938)\nThe supremum of finite dimensional intermediate fields is finite dimensional.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "finite_dimensional_sup", ["intermediate_field"]]]}]}, {"timestamp": 1640354228, "sha": "084b1ac2", "message": "feat(group_theory/specific_groups/cyclic): |G|=expG ↔ G is cyclic (#10692)", "changes": [{"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": [["add", "theorem", "order_of_eq_zero_of_forall_mem_zpowers", ["infinite"]], ["add", "theorem", "exponent_eq_card", ["is_cyclic"]], ["add", "theorem", "exponent_eq_zero_of_infinite", ["is_cyclic"]], ["add", "theorem", "iff_exponent_eq_card", ["is_cyclic"]], ["add", "theorem", "of_exponent_eq_card", ["is_cyclic"]]]}]}, {"timestamp": 1640350184, "sha": "6c6c7da8", "message": "feat(topology/connected): add `inducing.is_preconnected_image` (#11011)\nGeneralize the proof of `subtype.preconnected_space` to any `inducing`\nmap. Also golf the proof of `is_preconnected.subset_right_of_subset_union`.", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["mod", "theorem", "image_connected_component_subset", ["continuous"]], ["add", "theorem", "maps_to_connected_component", ["continuous"]], ["add", "theorem", "is_preconnected_image", ["inducing"]], ["mod", "theorem", "preimage_connected_component_connected", []]]}]}, {"timestamp": 1640316638, "sha": "67cf4061", "message": "chore(scripts): update nolints.txt (#11028)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1640316637, "sha": "f846a426", "message": "feat(algebra/pointwise): expand API for multiplication / addition of finsets by copying the corresponding API for sets (#10600)\nFrom flt-regular, I wanted to be able to add finsets so we add a lot of API to show that the existing definition has good algebraic properties by copying the existing set API.\nWhere possible I tried to give proofs that use the existing set lemmas and cast the finsets to sets to make it clear that these are essentially the same lemmas.\nIt would be nice to have a better system for duplicating this API of course, some general versions for set_like or Galois insertions perhaps to unify the theories, but I don't know what that would look like.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "image_mul_left'", ["finset"]], ["add", "theorem", "image_mul_left", ["finset"]], ["add", "theorem", "image_mul_prod", ["finset"]], ["add", "theorem", "image_mul_right'", ["finset"]], ["add", "theorem", "image_mul_right", ["finset"]], ["add", "theorem", "image_one", ["finset"]], ["add", "theorem", "one_mem_one", ["finset"]], ["add", "theorem", "one_nonempty", ["finset"]], ["add", "theorem", "preimage_mul_left_one'", ["finset"]], ["add", "theorem", "preimage_mul_left_one", ["finset"]], ["add", "theorem", "preimage_mul_left_singleton", ["finset"]], ["add", "theorem", "preimage_mul_right_one'", ["finset"]], ["add", "theorem", "preimage_mul_right_one", ["finset"]], ["add", "theorem", "preimage_mul_right_singleton", ["finset"]], ["add", "theorem", "singleton_one", ["finset"]], ["add", "theorem", "singleton_zero_mul", ["finset"]]]}]}, {"timestamp": 1640313272, "sha": "7b641cba", "message": "chore(number_theory/primorial): golf some proofs (#11024)", "changes": [{"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}]}, {"timestamp": 1640306592, "sha": "1dd60802", "message": "feat(ring_theory/derivation): drop unused `is_scalar_tower` (#10995)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["mod", "theorem", "leibniz_inv", ["derivation"]]]}]}, {"timestamp": 1640306591, "sha": "f03447fb", "message": "feat(analysis/normed_space): a normed space over a nondiscrete normed field is noncompact (#10994)\nRegister this as an instance for a nondiscrete normed field and for a real normed vector space. Also add `is_compact.ne_univ`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "exists_lt_norm", ["normed_space"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "ne_univ", ["is_compact"]]]}]}, {"timestamp": 1640306590, "sha": "0ac9f83b", "message": "feat(analysis/mean_inequalities): Minkowski inequality for infinite sums (#10984)\nA few versions of the Minkowski inequality for `tsum` and `has_sum`.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "Lp_add_le_has_sum", ["nnreal"]], ["add", "theorem", "Lp_add_le_tsum", ["nnreal"]], ["add", "theorem", "Lp_add_le_has_sum_of_nonneg", ["real"]], ["add", "theorem", "Lp_add_le_tsum_of_nonneg", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "eq_rpow_one_div_iff", ["nnreal"]], ["add", "theorem", "rpow_eq_rpow_iff", ["nnreal"]], ["add", "theorem", "rpow_inv_rpow_self", ["nnreal"]], ["add", "theorem", "rpow_left_bijective", ["nnreal"]], ["add", "theorem", "rpow_left_injective", ["nnreal"]], ["add", "theorem", "rpow_left_surjective", ["nnreal"]], ["add", "theorem", "rpow_one_div_eq_iff", ["nnreal"]], ["add", "theorem", "rpow_one_div_le_iff", ["nnreal"]], ["add", "theorem", "rpow_self_rpow_inv", ["nnreal"]]]}]}, {"timestamp": 1640306589, "sha": "1a780f69", "message": "chore(topology/metric_space): export `is_compact_closed_ball` (#10973)", "changes": [{"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1640306588, "sha": "36ba1acd", "message": "feat(algebraic_geometry): Define `open_cover`s of Schemes. (#10931)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/CommRing/instances.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "def", "forget_to_LocallyRingedSpace", ["algebraic_geometry", "Scheme"]], ["add", "def", "forget_to_Top", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["mod", "def", "forget_to_SheafedSpace", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "forget_to_Top", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "affine_basis_cover", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "affine_basis_cover_is_basis", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "affine_basis_cover_map_range", ["algebraic_geometry", "Scheme"]], ["add", "def", "affine_basis_cover_of_affine", ["algebraic_geometry", "Scheme"]], ["add", "def", "affine_cover", ["algebraic_geometry", "Scheme"]], ["add", "def", "bind", ["algebraic_geometry", "Scheme", "open_cover"]], ["add", "structure", "open_cover", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "open_range", ["algebraic_geometry", "is_open_immersion"]]]}]}, {"timestamp": 1640306587, "sha": "c374a3b9", "message": "feat(data/nat/nth): add nth function (#10707)\nSplit off from #9457, introduces `nth` and proves theorems about it.", "changes": [{"oldPath": "src/data/nat/count.lean", "newPath": "src/data/nat/count.lean", "changes": [["add", "theorem", "count_injective", ["nat"]], ["add", "theorem", "count_le_card", ["nat"]], ["add", "theorem", "count_lt_card", ["nat"]], ["add", "theorem", "count_lt_count_succ_iff", ["nat"]], ["mod", "theorem", "count_monotone", ["nat"]], ["add", "theorem", "count_strict_mono", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/nth.lean", "changes": [["add", "theorem", "count_le_iff_le_nth", ["nat"]], ["add", "theorem", "count_nth_gc", ["nat"]], ["add", "theorem", "count_nth_of_infinite", ["nat"]], ["add", "theorem", "count_nth_of_lt_card_finite", ["nat"]], ["add", "theorem", "count_nth_zero", ["nat"]], ["add", "theorem", "filter_range_nth_eq_insert_of_finite", ["nat"]], ["add", "theorem", "filter_range_nth_eq_insert_of_infinite", ["nat"]], ["add", "theorem", "le_nth_of_count_le", ["nat"]], ["add", "theorem", "le_nth_of_lt_nth_succ_finite", ["nat"]], ["add", "theorem", "le_nth_of_lt_nth_succ_infinite", ["nat"]], ["add", "theorem", "lt_nth_iff_count_lt", ["nat"]], ["add", "theorem", "nth_count", ["nat"]], ["add", "theorem", "nth_count_eq_Inf", ["nat"]], ["add", "theorem", "nth_count_le", ["nat"]], ["add", "theorem", "nth_eq_order_iso_of_nat", ["nat"]], ["add", "theorem", "nth_lt_of_lt_count", ["nat"]], ["add", "theorem", "nth_mem_of_infinite", ["nat"]], ["add", "theorem", "nth_mem_of_infinite_aux", ["nat"]], ["add", "theorem", "nth_mem_of_lt_card_finite", ["nat"]], ["add", "theorem", "nth_mem_of_lt_card_finite_aux", ["nat"]], ["add", "theorem", "nth_mono_of_finite", ["nat"]], ["add", "theorem", "nth_monotone", ["nat"]], ["add", "theorem", "nth_set_card", ["nat"]], ["add", "theorem", "nth_set_card_aux", ["nat"]], ["add", "theorem", "nth_set_nonempty_of_lt_card", ["nat"]], ["add", "theorem", "nth_strict_mono", ["nat"]], ["add", "theorem", "nth_strict_mono_of_finite", ["nat"]], ["add", "theorem", "nth_zero", ["nat"]], ["add", "theorem", "nth_zero_of_exists", ["nat"]], ["add", "theorem", "nth_zero_of_nth_zero", ["nat"]], ["add", "theorem", "nth_zero_of_zero", ["nat"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}]}, {"timestamp": 1640298958, "sha": "421b9bbe", "message": "feat(algebraic_topology): alternating face map complex of a simplicial object (#10927)\nadded the alternating face map complex of a simplicial object in a preadditive category and the natural inclusion of the normalized_Moore_complex", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/alternating_face_map_complex.lean", "changes": [["add", "theorem", "d_squared", ["algebraic_topology", "alternating_face_map_complex"]], ["add", "def", "map", ["algebraic_topology", "alternating_face_map_complex"]], ["add", "def", "obj", ["algebraic_topology", "alternating_face_map_complex"]], ["add", "def", "obj_d", ["algebraic_topology", "alternating_face_map_complex"]], ["add", "def", "alternating_face_map_complex", ["algebraic_topology"]], ["add", "def", "inclusion_of_Moore_complex", ["algebraic_topology"]], ["add", "def", "inclusion_of_Moore_complex_map", ["algebraic_topology"]], ["add", "theorem", "inclusion_of_Moore_complex_map_f", ["algebraic_topology"]]]}]}, {"timestamp": 1640298957, "sha": "dc57de22", "message": "feat(logic/basic): When a dependent If-Then-Else is not one of its arguments (#10924)\nThis is the dependent version of #10800.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "dite_eq_iff", []], ["add", "theorem", "dite_eq_left_iff", []], ["add", "theorem", "dite_eq_or_eq", []], ["add", "theorem", "dite_eq_right_iff", []], ["add", "theorem", "dite_ne_left_iff", []], ["add", "theorem", "dite_ne_right_iff", []], ["add", "theorem", "exists_iff_of_forall", []], ["mod", "theorem", "ite_eq_iff", []], ["mod", "theorem", "ite_eq_left_iff", []], ["mod", "theorem", "ite_eq_right_iff", []], ["mod", "theorem", "ite_ne_left_iff", []], ["mod", "theorem", "ite_ne_right_iff", []], ["add", "theorem", "not_ne_iff", []]]}]}, {"timestamp": 1640298956, "sha": "1db0052e", "message": "feat(group_theory/submonoid/membership): upgrade definition of pow from a set morphism to a monoid morphism (#10898)\nThis comes at no extra cost. All the prerequisite definitions and lemmas were already in mathlib.", "changes": [{"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["mod", "def", "pow", ["submonoid"]], ["add", "def", "pow_log_equiv", ["submonoid"]]]}]}, {"timestamp": 1640298955, "sha": "68aada0d", "message": "feat(algebra/algebra/spectrum): prove the spectral mapping theorem for polynomials (#10783)\nProve the spectral mapping theorem for polynomials. That is, if `p` is a polynomial and `a : A` where `A` is an algebra over a field `𝕜`, then `p (σ a) ⊆ σ (p a)`. Moreover, if `𝕜` is algebraically closed, then this inclusion is an equality.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "exists_mem_of_not_is_unit_aeval_prod", ["spectrum"]], ["add", "theorem", "map_polynomial_aeval_of_degree_pos", ["spectrum"]], ["add", "theorem", "map_polynomial_aeval_of_nonempty", ["spectrum"]], ["add", "theorem", "subset_polynomial_aeval", ["spectrum"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "sub_iff", ["is_unit"]]]}]}, {"timestamp": 1640298954, "sha": "720fa8fa", "message": "feat(data/rat/basic): API around rat.mk (#10782)", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "denom_mk", ["rat"]], ["add", "theorem", "ext", ["rat"]], ["add", "theorem", "ext_iff", ["rat"]], ["add", "theorem", "mk_neg_denom", ["rat"]], ["add", "theorem", "num_mk", ["rat"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}]}, {"timestamp": 1640286702, "sha": "4ce0d047", "message": "feat(data/real/sqrt): add a few lemmas (#11003)", "changes": [{"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["add", "theorem", "sqrt_eq_cases", ["real"]], ["add", "theorem", "sqrt_eq_iff_mul_self_eq_of_pos", ["real"]], ["add", "theorem", "sqrt_eq_one", ["real"]]]}]}, {"timestamp": 1640286701, "sha": "694b3f85", "message": "chore(measure_theory): golf a proof (#11002)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}]}, {"timestamp": 1640286700, "sha": "3362b1e2", "message": "refactor(analysis/seminorm): Weaken typeclasses (#10999)\nThis weakens `normed_field` to the appropriate `normed_whatever`.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["mod", "theorem", "add", ["balanced"]], ["mod", "theorem", "inter", ["balanced"]], ["mod", "theorem", "smul_eq", ["balanced"]], ["mod", "theorem", "subset_smul", ["balanced"]], ["mod", "theorem", "union", ["balanced"]], ["mod", "theorem", "univ", ["balanced"]], ["mod", "theorem", "balanced_zero_union_interior", []], ["mod", "theorem", "absorbent_ball_zero", ["seminorm"]], ["mod", "theorem", "balanced_ball_zero", ["seminorm"]], ["mod", "def", "ball", ["seminorm"]], ["mod", "theorem", "ball_zero_eq", ["seminorm"]], ["mod", "theorem", "mem_ball", ["seminorm"]], ["mod", "theorem", "mem_ball_zero", ["seminorm"]], ["mod", "theorem", "sub_rev", ["seminorm"]], ["mod", "theorem", "symmetric_ball_zero", ["seminorm"]], ["mod", "structure", "seminorm", []]]}]}, {"timestamp": 1640286699, "sha": "cce09a6b", "message": "feat(ring_theory/finiteness): prove that a surjective endomorphism of a finite module over a comm ring is injective (#10944)\nUsing an approach of Vasconcelos, treating the module as a module over the polynomial ring, with action induced by the endomorphism.\nThis result was rescued from #1822.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "injective_of_surjective_endomorphism", ["module", "finite"]], ["add", "theorem", "is_scalar_tower", ["module_polynomial_of_endo"]], ["add", "def", "module_polynomial_of_endo", []]]}]}, {"timestamp": 1640286698, "sha": "327bacc4", "message": "feat(field_theory/adjoin): `intermediate_field.to_subalgebra` distributes over supremum (#10937)\nThis PR proves `(E1 ⊔ E2).to_subalgebra = E1.to_subalgebra ⊔ E2.to_subalgebra`, under the assumption that `E1` and `E2` are finite-dimensional over `F`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "le_sup_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "sup_to_subalgebra", ["intermediate_field"]]]}]}, {"timestamp": 1640286697, "sha": "e6f4852b", "message": "feat(group_theory/exponent): exponent G = ⨆ g : G, order_of g (#10767)\nPrecursor to #10692.", "changes": [{"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": [["add", "theorem", "Sup_eq_zero", ["set", "infinite", "nat"]]]}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": [["mod", "theorem", "exponent_dvd_of_forall_pow_eq_one", ["monoid"]], ["add", "theorem", "exponent_eq_max'_order_of", ["monoid"]], ["add", "theorem", "exponent_eq_supr_order_of'", ["monoid"]], ["add", "theorem", "exponent_eq_supr_order_of", ["monoid"]], ["add", "theorem", "exponent_eq_zero_iff", ["monoid"]], ["add", "theorem", "exponent_eq_zero_iff_range_order_of_infinite", ["monoid"]], ["add", "theorem", "exponent_eq_zero_of_order_zero", ["monoid"]], ["add", "theorem", "exponent_ne_zero_iff_range_order_of_finite", ["monoid"]], ["add", "theorem", "exponent_ne_zero_of_fintype", ["monoid"]], ["mod", "theorem", "lcm_order_eq_exponent", ["monoid"]], ["mod", "theorem", "lcm_order_of_dvd_exponent", ["monoid"]], ["add", "theorem", "exists_order_of_eq_pow_padic_val_nat_exponent", ["nat", "prime"]]]}]}, {"timestamp": 1640286696, "sha": "1107693b", "message": "feat(combinatorics/simple_graph/basic): add lemmas about the neighbor set of a vertex in the complement graph (#7138)\nAdd lemmas about the neighbor set of a vertex in the complement graph, including a lemma proving that the complement of a regular graph is regular. Part of #5698 in order to prove facts about strongly regular graphs.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "card_neighbor_set_union_compl_neighbor_set", ["simple_graph"]], ["add", "theorem", "degree_compl", ["simple_graph"]], ["add", "theorem", "is_regular_compl_of_is_regular", ["simple_graph"]], ["add", "theorem", "neighbor_set_compl", ["simple_graph"]]]}]}, {"timestamp": 1640284328, "sha": "63a0936b", "message": "ci(.github/workflows/*): cleanup after upload step (#11008)\ncf. https://github.com/actions/upload-artifact/issues/256", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1640277187, "sha": "cf345987", "message": "chore(tactic/norm_cast): minor cleanup (#10993)", "changes": [{"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}]}, {"timestamp": 1640277186, "sha": "1a57c79e", "message": "feat(analysis/calculus): assorted simple lemmas (#10975)\nVarious lemmas from the formalization of the Cauchy integral formula (#10000 and some later developments on top of it).\nAlso add `@[measurability]` attrs to theorems like `measurable_fderiv`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "scomp_has_deriv_at", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "differentiable_at", ["differentiable_on"]], ["add", "theorem", "eventually_differentiable_at", ["differentiable_on"]]]}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": [["mod", "theorem", "measurable_deriv", []], ["mod", "theorem", "measurable_fderiv", []], ["mod", "theorem", "measurable_fderiv_apply_const", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "is_const_of_deriv_eq_zero", []], ["add", "theorem", "lipschitz_with_of_nnnorm_deriv_le", []]]}]}, {"timestamp": 1640277184, "sha": "35ede3d4", "message": "chore(algebra/algebra/*): add some `simp` lemmas (#10969)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_of_bijective", ["alg_equiv"]], ["add", "theorem", "of_bijective_apply", ["alg_equiv"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "def", "top_equiv", ["algebra"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "def", "top_equiv", ["intermediate_field"]], ["del", "theorem", "top_equiv_def", ["intermediate_field"]], ["add", "theorem", "top_equiv_symm_apply_coe", ["intermediate_field"]]]}]}, {"timestamp": 1640277183, "sha": "7defe7df", "message": "feat(field_theory/separable): add expand_eval and expand_monic (#10965)\nSimple properties of `polynomial.expand`.", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "expand_eval", ["polynomial"]], ["add", "theorem", "expand", ["polynomial", "monic"]]]}]}, {"timestamp": 1640277181, "sha": "2be37b00", "message": "feat(combinatorics/set_family/shadow): Upper shadow of a set family (#10956)\nThis defines the upper shadow of `𝒜 : finset (finset α)`, which is the dual of the shadow. Instead of removing each element from each set, we add each element not in each set.", "changes": [{"oldPath": "src/combinatorics/set_family/shadow.lean", "newPath": "src/combinatorics/set_family/shadow.lean", "changes": [["add", "theorem", "exists_subset_of_mem_up_shadow", ["finset"]], ["add", "theorem", "insert_mem_up_shadow", ["finset"]], ["add", "theorem", "mem_up_shadow_iff", ["finset"]], ["add", "theorem", "mem_up_shadow_iff_erase_mem", ["finset"]], ["add", "theorem", "mem_up_shadow_iff_exists_mem_card_add", ["finset"]], ["add", "theorem", "mem_up_shadow_iff_exists_mem_card_add_one", ["finset"]], ["add", "theorem", "shadow_image_compl", ["finset"]], ["add", "def", "up_shadow", ["finset"]], ["add", "theorem", "up_shadow_empty", ["finset"]], ["add", "theorem", "up_shadow_image_compl", ["finset"]], ["add", "theorem", "up_shadow_monotone", ["finset"]]]}]}, {"timestamp": 1640277180, "sha": "60c2b68c", "message": "feat(data/sigma/order): The lexicographical order has a bot/top (#10905)\nAlso fix localized instances declarations. They weren't using fully qualified names and I had forgotten `sigma.lex.linear_order`.", "changes": [{"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": [["del", "def", "has_le", ["sigma", "lex"]], ["del", "def", "has_lt", ["sigma", "lex"]], ["del", "def", "linear_order", ["sigma", "lex"]], ["del", "def", "partial_order", ["sigma", "lex"]], ["del", "def", "preorder", ["sigma", "lex"]]]}]}, {"timestamp": 1640277179, "sha": "87fa060c", "message": "feat(combinatorics/configuration): Define `line_count` and `point_count` (#10884)\nAdds definitions for the number of lines through a given point and the number of points through a given line.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1640277177, "sha": "bd164c7f", "message": "feat(data/polynomial/ring_division): add `polynomial.card_le_degree_of_subset_roots` (#10824)", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "card_le_degree_of_subset_roots", ["polynomial"]]]}]}, {"timestamp": 1640277175, "sha": "ec6d9a73", "message": "feat(topology/algebra/group): definitionally better lattice (#10792)\nThis provides `(⊓)`, `⊤`, and `⊥` explicitly such that the associated `to_topological_space` lemmas are definitionally equal.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "continuous_inv'", ["group_topology"]], ["add", "theorem", "continuous_mul'", ["group_topology"]], ["mod", "theorem", "ext'", ["group_topology"]], ["add", "theorem", "to_topological_space_Inf", ["group_topology"]], ["add", "theorem", "to_topological_space_bot", ["group_topology"]], ["add", "theorem", "to_topological_space_inf", ["group_topology"]], ["add", "theorem", "to_topological_space_infi", ["group_topology"]], ["add", "theorem", "to_topological_space_injective", ["group_topology"]], ["add", "theorem", "to_topological_space_le", ["group_topology"]], ["add", "theorem", "to_topological_space_top", ["group_topology"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_Inf_dom₂", []], ["add", "theorem", "continuous_inf_dom_left₂", []], ["add", "theorem", "continuous_inf_dom_right₂", []]]}]}, {"timestamp": 1640277173, "sha": "6e9b0112", "message": "feat(linear_algebra/orientation): composing with linear equivs and determinant (#10737)\nAdd lemmas that composing an alternating map with a linear equiv using\n`comp_linear_map`, or composing a basis with a linear equiv using\n`basis.map`, produces the same orientation if and only if the\ndeterminant of that linear equiv is positive.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "inv_neg", ["units"]], ["add", "theorem", "inv_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_map'", ["basis"]]]}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "theorem", "map_orientation_eq_det_inv_smul", ["basis"]], ["add", "theorem", "orientation_comp_linear_equiv_eq_iff_det_pos", ["basis"]], ["add", "theorem", "orientation_comp_linear_equiv_eq_neg_iff_det_neg", ["basis"]], ["add", "theorem", "orientation_map", ["basis"]], ["add", "theorem", "orientation_ne_iff_eq_neg", ["basis"]], ["add", "theorem", "map_eq_det_inv_smul", ["orientation"]], ["add", "theorem", "map_eq_iff_det_pos", ["orientation"]], ["add", "theorem", "map_eq_neg_iff_det_neg", ["orientation"]], ["add", "theorem", "ne_iff_eq_neg", ["orientation"]], ["add", "theorem", "units_inv_smul", []]]}, {"oldPath": "src/ring_theory/subring/basic.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}]}, {"timestamp": 1640269601, "sha": "34993236", "message": "chore(data/vector3): Make linter happy (#10998)\nand clean up a bit.", "changes": [{"oldPath": "src/data/vector3.lean", "newPath": "src/data/vector3.lean", "changes": [["mod", "theorem", "exists_vector_succ", []], ["mod", "theorem", "exists_vector_zero", []], ["mod", "def", "append", ["vector3"]], ["mod", "theorem", "append_add", ["vector3"]], ["mod", "theorem", "append_cons", ["vector3"]], ["mod", "theorem", "append_insert", ["vector3"]], ["mod", "theorem", "append_left", ["vector3"]], ["mod", "theorem", "append_nil", ["vector3"]], ["mod", "def", "cons", ["vector3"]], ["mod", "def", "cons_elim", ["vector3"]], ["mod", "theorem", "cons_elim_cons", ["vector3"]], ["mod", "theorem", "cons_fs", ["vector3"]], ["mod", "theorem", "cons_fz", ["vector3"]], ["mod", "theorem", "cons_head_tail", ["vector3"]], ["mod", "theorem", "eq_nil", ["vector3"]], ["mod", "def", "head", ["vector3"]], ["mod", "def", "insert", ["vector3"]], ["mod", "theorem", "insert_fs", ["vector3"]], ["mod", "theorem", "insert_fz", ["vector3"]], ["mod", "def", "nil", ["vector3"]], ["mod", "def", "nil_elim", ["vector3"]], ["mod", "def", "nth", ["vector3"]], ["mod", "def", "of_fn", ["vector3"]], ["mod", "theorem", "rec_on_cons", ["vector3"]], ["mod", "theorem", "rec_on_nil", ["vector3"]], ["mod", "def", "tail", ["vector3"]], ["mod", "def", "vector_all", []], ["mod", "theorem", "vector_all_iff_forall", []], ["mod", "theorem", "imp", ["vector_allp"]], ["mod", "def", "vector_allp", []], ["mod", "theorem", "vector_allp_cons", []], ["mod", "theorem", "vector_allp_iff_forall", []], ["mod", "theorem", "vector_allp_nil", []], ["mod", "theorem", "vector_allp_singleton", []], ["mod", "def", "vector_ex", []], ["mod", "theorem", "vector_ex_iff_exists", []]]}]}, {"timestamp": 1640269600, "sha": "72b4541a", "message": "feat(data/option): simple lemmas about orelse (#10972)\nSome simple lemmas about orelse. Analogous to `bind_eq_some` and friends.", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "orelse_eq_none'", ["option"]], ["add", "theorem", "orelse_eq_none", ["option"]], ["add", "theorem", "orelse_eq_some'", ["option"]], ["add", "theorem", "orelse_eq_some", ["option"]]]}]}, {"timestamp": 1640269599, "sha": "db1788c4", "message": "feat(ring_theory/tensor_product): Supremum of finite dimensional subalgebras (#10922)\nThe supremum of finite dimensional subalgebras is finite dimensional.", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "theorem", "finite_dimensional_sup", ["subalgebra"]]]}]}, {"timestamp": 1640264073, "sha": "f3b380e4", "message": "feat(algebraic_geometry): Prime spectrum is sober. (#10989)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "theorem", "is_closed_iff_zero_locus_ideal", ["prime_spectrum"]], ["add", "theorem", "is_closed_iff_zero_locus_radical_ideal", ["prime_spectrum"]], ["add", "theorem", "is_irreducible_zero_locus_iff", ["prime_spectrum"]], ["add", "theorem", "is_irreducible_zero_locus_iff_of_radical", ["prime_spectrum"]]]}, {"oldPath": "src/topology/sober.lean", "newPath": "src/topology/sober.lean", "changes": [["add", "theorem", "is_generic_point_iff_forall_closed", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "irreducible_space_def", []]]}]}, {"timestamp": 1640255801, "sha": "086469f7", "message": "chore(order/*): Change `order_hom` notation (#10988)\nThis changes the notation for `order_hom` from `α →ₘ β` to `α →o β` to match `order_embedding` and `order_iso`, which are respectively `α ↪o β` and `α ≃o β`. This also solves the conflict with measurable functions.", "changes": [{"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["mod", "def", "mk", ["simplex_category", "hom"]], ["mod", "def", "mk_hom", ["simplex_category"]]]}, {"oldPath": "src/combinatorics/additive/salem_spencer.lean", "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": [["mod", "def", "mul_roth_number", []], ["mod", "def", "roth_number_nat", []]]}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": [["mod", "theorem", "to_unit_cont", ["part"]], ["mod", "def", "to_unit_mono", ["part"]]]}, {"oldPath": "src/data/finset/option.lean", "newPath": "src/data/finset/option.lean", "changes": [["mod", "def", "erase_none", ["finset"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "iterate_ker", ["linear_map"]], ["mod", "def", "iterate_range", ["linear_map"]], ["mod", "theorem", "coe_supr_of_chain", ["submodule"]], ["mod", "theorem", "mem_supr_of_chain", ["submodule"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["mod", "def", "generalized_eigenspace", ["module", "End"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["mod", "def", "tunnel", ["linear_map"]]]}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": [["mod", "structure", "closure_operator", []]]}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": [["mod", "def", "gfp", ["order_hom"]], ["mod", "theorem", "gfp_gfp", ["order_hom"]], ["mod", "def", "lfp", ["order_hom"]], ["mod", "theorem", "lfp_lfp", ["order_hom"]]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["mod", "def", "to_order_hom", ["order_embedding"]], ["mod", "def", "apply", ["order_hom"]], ["mod", "theorem", "apply_mono", ["order_hom"]], ["mod", "def", "coe_fn_hom", ["order_hom"]], ["mod", "theorem", "coe_le_coe", ["order_hom"]], ["mod", "def", "comp", ["order_hom"]], ["mod", "theorem", "comp_const", ["order_hom"]], ["mod", "theorem", "comp_id", ["order_hom"]], ["mod", "theorem", "comp_mono", ["order_hom"]], ["mod", "theorem", "comp_prod_comp_same", ["order_hom"]], ["mod", "def", "compₘ", ["order_hom"]], ["mod", "def", "const", ["order_hom"]], ["mod", "theorem", "const_comp", ["order_hom"]], ["mod", "def", "curry", ["order_hom"]], ["mod", "theorem", "curry_apply", ["order_hom"]], ["mod", "theorem", "curry_symm_apply", ["order_hom"]], ["mod", "def", "diag", ["order_hom"]], ["mod", "theorem", "ext", ["order_hom"]], ["mod", "def", "fst", ["order_hom"]], ["mod", "theorem", "fst_comp_prod", ["order_hom"]], ["mod", "theorem", "fst_prod_snd", ["order_hom"]], ["mod", "def", "id", ["order_hom"]], ["mod", "theorem", "id_comp", ["order_hom"]], ["mod", "theorem", "le_def", ["order_hom"]], ["mod", "def", "on_diag", ["order_hom"]], ["mod", "theorem", "order_hom_eq_id", ["order_hom"]], ["mod", "def", "pi", ["order_hom"]], ["mod", "def", "pi_iso", ["order_hom"]], ["mod", "def", "prod_iso", ["order_hom"]], ["mod", "def", "prod_map", ["order_hom"]], ["mod", "theorem", "prod_mono", ["order_hom"]], ["mod", "def", "prodₘ", ["order_hom"]], ["mod", "def", "snd", ["order_hom"]], ["mod", "theorem", "snd_comp_prod", ["order_hom"]], ["mod", "def", "val", ["order_hom", "subtype"]], ["mod", "theorem", "to_fun_eq_coe", ["order_hom"]], ["mod", "def", "unique", ["order_hom"]], ["mod", "def", "eval_order_hom", ["pi"]], ["mod", "def", "to_order_hom", ["rel_hom"]]]}, {"oldPath": "src/order/hom/lattice.lean", "newPath": "src/order/hom/lattice.lean", "changes": [["mod", "theorem", "Inf_apply", ["order_hom"]], ["mod", "theorem", "Sup_apply", ["order_hom"]], ["mod", "theorem", "coe_infi", ["order_hom"]], ["mod", "theorem", "coe_supr", ["order_hom"]], ["mod", "theorem", "infi_apply", ["order_hom"]], ["mod", "theorem", "iterate_sup_le_sup_iff", ["order_hom"]], ["mod", "theorem", "supr_apply", ["order_hom"]]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "Sup_continuous", ["complete_lattice"]], ["mod", "theorem", "inf_continuous", ["complete_lattice"]], ["mod", "theorem", "sup_continuous", ["complete_lattice"]], ["mod", "theorem", "supr_continuous", ["complete_lattice"]], ["mod", "theorem", "map_le_map", ["omega_complete_partial_order", "chain"]], ["mod", "theorem", "continuous'_coe", ["omega_complete_partial_order"]], ["mod", "theorem", "of_bundled'", ["omega_complete_partial_order", "continuous"]], ["mod", "def", "continuous", ["omega_complete_partial_order"]], ["mod", "theorem", "coe_apply", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "def", "of_mono", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "def", "apply", ["omega_complete_partial_order", "continuous_hom", "prod"]], ["mod", "def", "to_mono", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "theorem", "ωSup_bind", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "def", "bind", ["order_hom"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": [["mod", "def", "gi", ["partial_sups"]], ["mod", "def", "partial_sups", []], ["mod", "theorem", "partial_sups_mono", []]]}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": [["mod", "theorem", "monotone_stabilizes", ["is_artinian"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "def", "comap", ["topological_space", "opens"]]]}]}, {"timestamp": 1640255800, "sha": "03062ea4", "message": "feat(ring_theory/integral_closure): The product of the leading coeff and the root is integral. (#10807)", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_leading_coeff_smul", []], ["add", "theorem", "leading_coeff_smul_normalize_scale_roots", []], ["add", "def", "normalize_scale_roots", []], ["add", "theorem", "normalize_scale_roots_coeff_mul_leading_coeff_pow", []], ["add", "theorem", "normalize_scale_roots_degree", []], ["add", "theorem", "normalize_scale_roots_eval₂_leading_coeff_mul", []], ["add", "theorem", "normalize_scale_roots_monic", []], ["add", "theorem", "normalize_scale_roots_support", []], ["add", "theorem", "is_integral_elem_leading_coeff_mul", ["ring_hom"]]]}]}, {"timestamp": 1640249378, "sha": "2cfa052b", "message": "feat(data/list/count): countp of true and false (#10986)", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "countp_false", ["list"]], ["add", "theorem", "countp_true", ["list"]]]}]}, {"timestamp": 1640244153, "sha": "08b13ec9", "message": "feat(field_theory/adjoin): add dim_bot, finrank_bot (#10964)\nAdded two simp lemmas, showing that the dimension and finrank respectively of bottom intermediate fields are 1.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "dim_bot", ["intermediate_field"]], ["add", "theorem", "finrank_bot", ["intermediate_field"]]]}]}, {"timestamp": 1640237704, "sha": "f4e46fd2", "message": "feat(data/list/count): count_le_length (#10982)", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "count_le_length", ["list"]], ["add", "theorem", "countp_le_length", ["list"]]]}]}, {"timestamp": 1640231037, "sha": "04779a32", "message": "feat(order/complete_boolean_algebra): lemmas about binfi (#10852)\nAdds corresponding `binfi` and `Inf` lemmas for existing `infi` results, especially where `rw` struggles to achieve the same thing alone.", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "binfi_sup_eq", []], ["add", "theorem", "bsupr_inf_eq", []], ["add", "theorem", "inf_bsupr_eq", []], ["add", "theorem", "sup_binfi_eq", []]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "u_Inf_l_image", ["galois_coinsertion"]], ["add", "theorem", "u_Sup_l_image", ["galois_coinsertion"]], ["add", "theorem", "u_bsupr_l", ["galois_coinsertion"]], ["add", "theorem", "u_bsupr_of_lu_eq_self", ["galois_coinsertion"]], ["add", "theorem", "l_Inf_u_image", ["galois_insertion"]], ["add", "theorem", "l_Sup_u_image", ["galois_insertion"]], ["add", "theorem", "l_binfi_of_ul_eq_self", ["galois_insertion"]], ["add", "theorem", "l_binfi_u", ["galois_insertion"]], ["add", "theorem", "l_bsupr_u", ["galois_insertion"]]]}]}, {"timestamp": 1640224933, "sha": "f00007dc", "message": "feat(analysis/normed_space/pointwise): more on pointwise operations on sets in normed spaces (#10820)\nAlso move all related results to a new file `analysis/normed_space/pointwise`, to shorten `normed_space/basic` a little bit.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "mem_closed_ball_zero_iff", []], ["mod", "theorem", "preimage_add_ball", []], ["mod", "theorem", "preimage_add_closed_ball", []]]}, {"oldPath": null, "newPath": "src/analysis/normed/group/pointwise.lean", "changes": [["add", "theorem", "ball_add_singleton", []], ["add", "theorem", "ball_zero_add_singleton", []], ["add", "theorem", "bounded_iff_exists_norm_le", []], ["add", "theorem", "closed_ball_add_singleton", []], ["add", "theorem", "closed_ball_zero_add_singleton", []], ["add", "theorem", "add", ["metric", "bounded"]], ["add", "theorem", "singleton_add_ball", []], ["add", "theorem", "singleton_add_ball_zero", []], ["add", "theorem", "singleton_add_closed_ball", []], ["add", "theorem", "singleton_add_closed_ball_zero", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "sphere_nonempty", ["normed_space"]], ["del", "theorem", "smul_ball", []], ["del", "theorem", "smul_closed_ball'", []], ["del", "theorem", "smul_closed_ball", []], ["del", "theorem", "smul_sphere'", []], ["del", "theorem", "smul_sphere", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/pointwise.lean", "changes": [["add", "theorem", "eventually_singleton_add_smul_subset", []], ["add", "theorem", "smul", ["metric", "bounded"]], ["add", "theorem", "sphere_nonempty", ["normed_space"]], ["add", "theorem", "set_smul_mem_nhds_zero", []], ["add", "theorem", "set_smul_mem_nhds_zero_iff", []], ["add", "theorem", "smul_ball", []], ["add", "theorem", "smul_closed_ball'", []], ["add", "theorem", "smul_closed_ball", []], ["add", "theorem", "smul_sphere'", []], ["add", "theorem", "smul_sphere", []]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "subset_ball_lt", ["metric", "bounded"]]]}]}, {"timestamp": 1640214474, "sha": "e15e015b", "message": "split(data/finset/sigma): Split off `data.finset.basic` (#10957)\nThis moves `finset.sigma` to a new file `data.finset.sigma`.\nI'm crediting Mario for 16d40d7491d1fe8a733d21e90e516e0dd3f41c5b", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "theorem", "mem_sigma", ["finset"]], ["del", "theorem", "sigma_eq_bUnion", ["finset"]], ["del", "theorem", "sigma_eq_empty", ["finset"]], ["del", "theorem", "sigma_mono", ["finset"]], ["del", "theorem", "sigma_nonempty", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["del", "theorem", "inf_sigma", ["finset"]], ["del", "theorem", "sup_sigma", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/sigma.lean", "changes": [["add", "theorem", "inf_sigma", ["finset"]], ["add", "theorem", "mem_sigma", ["finset"]], ["add", "theorem", "sigma_eq_bUnion", ["finset"]], ["add", "theorem", "sigma_eq_empty", ["finset"]], ["add", "theorem", "sigma_mono", ["finset"]], ["add", "theorem", "sigma_nonempty", ["finset"]], ["add", "theorem", "sup_sigma", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1640214473, "sha": "3f164099", "message": "feat(data/finset/*): Random lemmas (#10955)\nProve some `compl` lemmas for `finset`, `(s.erase a).card + 1 = s.card` for `list`, `multiset`, `set`, copy over one more `generalized_boolean_algebra` lemma.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "map_nonempty", ["finset"]], ["mod", "theorem", "mem_sdiff", ["finset"]], ["del", "theorem", "map", ["finset", "nonempty"]], ["mod", "theorem", "not_mem_sdiff_of_mem_right", ["finset"]], ["mod", "theorem", "sdiff_eq_empty_iff_subset", ["finset"]], ["add", "theorem", "sdiff_sdiff_eq_self", ["finset"]], ["mod", "theorem", "sdiff_ssubset", ["finset"]], ["mod", "theorem", "sdiff_union_self_eq_union", ["finset"]], ["mod", "theorem", "union_sdiff_self_eq_union", ["finset"]], ["mod", "theorem", "union_sdiff_symm", ["finset"]]]}, {"oldPath": "src/data/finset/card.lean", "newPath": "src/data/finset/card.lean", "changes": [["add", "theorem", "card_erase_add_one", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "coe_compl", ["finset"]], ["add", "theorem", "compl_empty", ["finset"]], ["mod", "theorem", "compl_eq_univ_sdiff", ["finset"]], ["add", "theorem", "compl_erase", ["finset"]], ["mod", "theorem", "compl_filter", ["finset"]], ["add", "theorem", "compl_insert", ["finset"]], ["mod", "theorem", "compl_ne_univ_iff_nonempty", ["finset"]], ["mod", "theorem", "compl_singleton", ["finset"]], ["mod", "theorem", "eq_univ_iff_forall", ["finset"]], ["mod", "theorem", "insert_compl_self", ["finset"]], ["mod", "theorem", "mem_compl", ["finset"]], ["add", "theorem", "not_mem_compl", ["finset"]], ["mod", "theorem", "union_compl", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "length_erase_add_one", ["list"]], ["add", "theorem", "length_erasep_add_one", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "card_erase_add_one", ["multiset"]]]}]}, {"timestamp": 1640214472, "sha": "2b9ab3bb", "message": "split(data/psigma/order): Split off `order.lexicographic` (#10953)\nThis moves all the stuff about `Σ' i, α i` to a new file `data.psigma.order`. This mimics the file organisation of `sigma`.\nI'm crediting:\n* Scott for #820\n* Minchao for #914", "changes": [{"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/data/list/lex.lean", "newPath": "src/data/list/lex.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/psigma/order.lean", "changes": []}, {"oldPath": "src/data/sigma/lex.lean", "newPath": "src/data/sigma/lex.lean", "changes": []}, {"oldPath": "src/data/sigma/order.lean", "newPath": "src/data/sigma/order.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}]}, {"timestamp": 1640214471, "sha": "43159737", "message": "feat(quadratic_form/prod): quadratic forms on product and pi types (#10939)\nIn order to provide the `pos_def` members, some new API was needed.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["mod", "def", "Q", ["clifford_algebra_complex"]]]}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["add", "theorem", "eq_zero_iff", ["quadratic_form", "anisotropic"]], ["add", "theorem", "anisotropic", ["quadratic_form", "pos_def"]], ["add", "theorem", "nonneg", ["quadratic_form", "pos_def"]], ["add", "theorem", "pos_def_iff_nonneg", ["quadratic_form"]], ["add", "theorem", "pos_def_of_nonneg", ["quadratic_form"]], ["add", "def", "sq", ["quadratic_form"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/quadratic_form/prod.lean", "changes": [["add", "theorem", "anisotropic_of_pi", ["quadratic_form"]], ["add", "theorem", "anisotropic_of_prod", ["quadratic_form"]], ["add", "theorem", "pi", ["quadratic_form", "equivalent"]], ["add", "theorem", "prod", ["quadratic_form", "equivalent"]], ["add", "def", "pi", ["quadratic_form", "isometry"]], ["add", "def", "prod", ["quadratic_form", "isometry"]], ["add", "theorem", "nonneg_pi_iff", ["quadratic_form"]], ["add", "theorem", "nonneg_prod_iff", ["quadratic_form"]], ["add", "def", "pi", ["quadratic_form"]], ["add", "theorem", "pi_apply", ["quadratic_form"]], ["add", "theorem", "prod", ["quadratic_form", "pos_def"]], ["add", "theorem", "pos_def_pi_iff", ["quadratic_form"]], ["add", "theorem", "pos_def_prod_iff", ["quadratic_form"]], ["add", "def", "prod", ["quadratic_form"]]]}]}, {"timestamp": 1640214470, "sha": "c8f0afcd", "message": "feat(group_theory/index): Transitivity of finite relative index. (#10936)\nIf `H` has finite relative index in `K`, and `K` has finite relative index in `L`, then `H` has finite relative index in `L`. Golfed from #9545.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "relindex_inf_mul_relindex", ["subgroup"]], ["add", "theorem", "relindex_ne_zero_trans", ["subgroup"]]]}]}, {"timestamp": 1640214469, "sha": "24cefb50", "message": "feat(data/real/ennreal): add monotonicity lemmas for ennreal.to_nnreal (#10556)\nAdd four lemmas about monotonicity of `to_nnreal` on extended nonnegative reals, `to_nnreal_mono`, `to_nnreal_le_to_nnreal`, `to_nnreal_strict_mono`, `to_nnreal_lt_to_nnreal` (analogous to `to_real_mono`, `to_real_le_to_nnreal`, `to_real_strict_mono`, `to_real_lt_to_real`).", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_nnreal_le_to_nnreal", ["ennreal"]], ["add", "theorem", "to_nnreal_lt_to_nnreal", ["ennreal"]], ["add", "theorem", "to_nnreal_mono", ["ennreal"]], ["add", "theorem", "to_nnreal_strict_mono", ["ennreal"]]]}]}, {"timestamp": 1640208722, "sha": "c5bb320c", "message": "refactor(*): Random lemmas and modifications from the shifting refactor. (#10940)", "changes": [{"oldPath": "src/algebra/homology/differential_object.lean", "newPath": "src/algebra/homology/differential_object.lean", "changes": [["add", "def", "X_eq_to_hom", ["category_theory", "differential_object"]], ["add", "theorem", "X_eq_to_hom_refl", ["category_theory", "differential_object"]], ["add", "theorem", "d_eq_to_hom", ["homological_complex"]], ["add", "theorem", "eq_to_hom_d", ["homological_complex"]], ["add", "theorem", "eq_to_hom_f", ["homological_complex"]]]}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["add", "theorem", "eq_to_hom_f", ["category_theory", "differential_object"]], ["add", "def", "mk_iso", ["category_theory", "differential_object"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "theorem", "as_equivalence_counit", ["category_theory", "functor"]], ["add", "theorem", "as_equivalence_unit", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["add", "theorem", "eq_to_hom_apply", ["category_theory", "graded_object"]]]}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["add", "theorem", "has_smallest_colimits_of_has_colimits", ["category_theory", "limits"]], ["add", "theorem", "has_smallest_limits_of_has_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monoidal/End.lean", "newPath": "src/category_theory/monoidal/End.lean", "changes": [["add", "theorem", "μ_inv_naturalityᵣ", ["category_theory"]], ["add", "theorem", "μ_inv_naturalityₗ", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/discrete.lean", "newPath": "src/category_theory/monoidal/discrete.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": [["mod", "def", "mk", ["category_theory", "triangulated", "triangle"]]]}]}, {"timestamp": 1640205583, "sha": "ee25d58a", "message": "feat(linear_algebra/quadratic_form/basic): `linear_map.comp_quadratic_form` (#10950)\nThe name is taken to mirror `linear_map.comp_multilinear_map`", "changes": [{"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["add", "def", "comp_quadratic_form", ["linear_map"]], ["add", "theorem", "map_smul_of_tower", ["quadratic_form"]], ["add", "theorem", "polar_comp", ["quadratic_form"]]]}]}, {"timestamp": 1640205582, "sha": "b2e881b9", "message": "feat(linear_algebra/eigenspace): the eigenvalues of a linear endomorphism are in its spectrum (#10912)\nThis PR shows that the eigenvalues of `f : End R M` are in `spectrum R f`.", "changes": [{"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "apply_eq_smul", ["module", "End", "has_eigenvector"]], ["add", "theorem", "mem_spectrum_of_has_eigenvalue", ["module", "End"]]]}]}, {"timestamp": 1640198917, "sha": "12ee59fa", "message": "feat(data/{finset,multiset}/locally_finite): When an `Icc` is a singleton, cardinality generalization (#10925)\nThis proves `Icc a b = {c} ↔ a = c ∧ b = c` for sets and finsets, gets rid of the `a ≤ b` assumption in `card_Ico_eq_card_Icc_sub_one` and friends and proves them for multisets.", "changes": [{"oldPath": "src/data/finset/interval.lean", "newPath": "src/data/finset/interval.lean", "changes": []}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Icc_eq_singleton_iff", ["finset"]], ["mod", "theorem", "card_Ico_eq_card_Icc_sub_one", ["finset"]], ["mod", "theorem", "card_Ioc_eq_card_Icc_sub_one", ["finset"]], ["mod", "theorem", "card_Ioo_eq_card_Icc_sub_two", ["finset"]], ["mod", "theorem", "card_Ioo_eq_card_Ico_sub_one", ["finset"]]]}, {"oldPath": "src/data/multiset/locally_finite.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": [["add", "theorem", "card_Ico_eq_card_Icc_sub_one", ["multiset"]], ["add", "theorem", "card_Ioc_eq_card_Icc_sub_one", ["multiset"]], ["add", "theorem", "card_Ioo_eq_card_Icc_sub_two", ["multiset"]], ["add", "theorem", "card_Ioo_eq_card_Ico_sub_one", ["multiset"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_eq_singleton_iff", ["set"]]]}]}, {"timestamp": 1640196438, "sha": "da07a992", "message": "feat(ring_theory/tensor_product): Range of `tensor_product.product_map` (#10882)\nThis PR proves `(product_map f g).range = f.range ⊔ g.range`.", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "theorem", "map_range", ["algebra", "tensor_product"]], ["add", "theorem", "product_map_range", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1640189896, "sha": "dda469d0", "message": "chore(analysis/normed_space/exponential + logic/function/iterate): fix typos in doc-strings (#10968)\nOne `m` was missing in 3 different places.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/logic/function/iterate.lean", "newPath": "src/logic/function/iterate.lean", "changes": []}]}, {"timestamp": 1640183312, "sha": "7ca68f8e", "message": "chore(*): fix some doc (#10966)", "changes": [{"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}]}, {"timestamp": 1640174688, "sha": "af683b11", "message": "feat(topology/tietze_extension): Tietze extension theorem (#10701)", "changes": [{"oldPath": null, "newPath": "src/data/set/intervals/monotone.lean", "changes": [["add", "theorem", "monotone_of_odd_of_monotone_on_nonneg", []], ["add", "def", "order_iso_Ioo_neg_one_one", []], ["add", "theorem", "strict_mono_of_odd_strict_mono_on_nonneg", []]]}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["add", "def", "order_iso_of_right_inverse", ["strict_mono"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "norm_comp_continuous_le", ["bounded_continuous_function"]]]}, {"oldPath": null, "newPath": "src/topology/tietze_extension.lean", "changes": [["add", "theorem", "exists_extension_forall_exists_le_ge_of_closed_embedding", ["bounded_continuous_function"]], ["add", "theorem", "exists_extension_forall_mem_Icc_of_closed_embedding", ["bounded_continuous_function"]], ["add", "theorem", "exists_extension_forall_mem_of_closed_embedding", ["bounded_continuous_function"]], ["add", "theorem", "exists_extension_norm_eq_of_closed_embedding'", ["bounded_continuous_function"]], ["add", "theorem", "exists_extension_norm_eq_of_closed_embedding", ["bounded_continuous_function"]], ["add", "theorem", "exists_forall_mem_restrict_eq_of_closed", ["bounded_continuous_function"]], ["add", "theorem", "exists_norm_eq_restrict_eq_of_closed", ["bounded_continuous_function"]], ["add", "theorem", "tietze_extension_step", ["bounded_continuous_function"]], ["add", "theorem", "exists_extension_forall_mem_of_closed_embedding", ["continuous_map"]], ["add", "theorem", "exists_extension_of_closed_embedding", ["continuous_map"]], ["add", "theorem", "exists_restrict_eq_forall_mem_of_closed", ["continuous_map"]], ["add", "theorem", "exists_restrict_eq_of_closed", ["continuous_map"]]]}, {"oldPath": "src/topology/urysohns_bounded.lean", "newPath": "src/topology/urysohns_bounded.lean", "changes": []}]}, {"timestamp": 1640129557, "sha": "fc66d88c", "message": "refactor(ring_theory/derivation): use weaker TC assumptions (#10952)\nDon't assume `[add_cancel_comm_monoid M]`, add `map_one_eq_zero` as an axiom instead. Add a constructor `derivation.mk'` that deduces `map_one_eq_zero` from `leibniz`.\nAlso generalize `smul`/`module` instances.", "changes": [{"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["del", "theorem", "Rsmul_apply", ["derivation"]], ["del", "theorem", "coe_Rsmul", ["derivation"]], ["del", "theorem", "coe_Rsmul_linear_map", ["derivation"]], ["add", "theorem", "coe_mk'", ["derivation"]], ["add", "theorem", "coe_mk'_linear_map", ["derivation"]], ["mod", "theorem", "coe_smul", ["derivation"]], ["mod", "theorem", "coe_smul_linear_map", ["derivation"]], ["mod", "theorem", "map_one_eq_zero", ["derivation"]], ["add", "def", "mk'", ["derivation"]], ["mod", "theorem", "mk_coe", ["derivation"]], ["mod", "theorem", "smul_apply", ["derivation"]]]}]}, {"timestamp": 1640114611, "sha": "55f575f1", "message": "feat(linear_algebra/quadratic_form/complex): all non-degenerate quadratic forms over ℂ are equivalent (#10951)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form/complex.lean", "newPath": "src/linear_algebra/quadratic_form/complex.lean", "changes": [["add", "theorem", "complex_equivalent", ["quadratic_form"]]]}]}, {"timestamp": 1640110008, "sha": "b434a0db", "message": "feat(data/nat/prime): `prime.dvd_prod_iff`; golf `mem_list_primes_of_dvd_prod` (#10624)\nAdds a generalisation of `prime.dvd_mul`: prime `p` divides the product of `L : list ℕ` iff it divides some `a ∈ L`. The `.mp` direction of this lemma is the second part of Theorem 1.9 in Apostol (1976) Introduction to Analytic Number Theory.\nAlso adds the converse `prime.not_dvd_prod`, and uses `dvd_prod_iff` to golf the proof of `mem_list_primes_of_dvd_prod`.", "changes": [{"oldPath": "src/algebra/big_operators/associated.lean", "newPath": "src/algebra/big_operators/associated.lean", "changes": [["add", "theorem", "dvd_prod_iff", ["prime"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "dvd_prod_iff", ["nat", "prime"]], ["add", "theorem", "not_dvd_prod", ["nat", "prime"]]]}]}, {"timestamp": 1640103671, "sha": "ca554bee", "message": "chore(group_theory/quotient_group): make pow definitionally equal (#10833)\nMotivated by a TODO comment.", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "theorem", "coe_div", ["quotient_group"]], ["mod", "theorem", "coe_pow", ["quotient_group"]], ["mod", "theorem", "coe_zpow", ["quotient_group"]]]}]}, {"timestamp": 1640103670, "sha": "cea1988f", "message": "feat(data/finsupp/basic): add lemma `disjoint_prod_add` (#10799)\nFor disjoint finsupps `f1` and `f2`, and function `g`, the product of the products of `g` over `f1` and `f2` equals the product of `g` over `f1 + f2`", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "prod_add_index_of_disjoint", ["finsupp"]]]}]}, {"timestamp": 1640099837, "sha": "4aa7ac67", "message": "feat(data/mv_polynomial): add `mv_polynomial.linear_map_ext` (#10945)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "linear_map_ext", ["mv_polynomial"]]]}]}, {"timestamp": 1640090567, "sha": "8dafccc1", "message": "chore(data/nat/digits): Eliminate `finish` (#10947)\nRemoving uses of finish, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}]}, {"timestamp": 1640090566, "sha": "7e48e350", "message": "feat(algebra/module/submodule_lattice, linear_algebra/projection): two lemmas about `is_compl` (#10709)", "changes": [{"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "theorem", "disjoint_def'", ["submodule"]], ["add", "theorem", "disjoint_def", ["submodule"]], ["add", "theorem", "eq_zero_of_coe_mem_of_disjoint", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "disjoint_def'", ["submodule"]], ["del", "theorem", "disjoint_def", ["submodule"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "def", "prod_comm", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["add", "theorem", "linear_proj_add_linear_proj_of_is_compl_eq_self", ["submodule"]], ["add", "theorem", "prod_comm_trans_prod_equiv_of_is_compl", ["submodule"]]]}]}, {"timestamp": 1640090565, "sha": "a6b2f94a", "message": "refactor(linear_algebra/sesquilinear_form): Use similar definition as used in `bilinear_map` (#10443)\nDefine sesquilinear forms as `M →ₗ[R] M →ₛₗ[I] R`.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "def", "sesq_form_of_inner", []]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "theorem", "is_refl", ["linear_map", "is_alt"]], ["add", "theorem", "neg", ["linear_map", "is_alt"]], ["add", "theorem", "ortho_comm", ["linear_map", "is_alt"]], ["add", "theorem", "self_eq_zero", ["linear_map", "is_alt"]], ["add", "def", "is_alt", ["linear_map"]], ["add", "def", "is_ortho", ["linear_map"]], ["add", "theorem", "is_ortho_def", ["linear_map"]], ["add", "theorem", "is_ortho_zero_left", ["linear_map"]], ["add", "theorem", "is_ortho_zero_right", ["linear_map"]], ["add", "theorem", "eq_zero", ["linear_map", "is_refl"]], ["add", "theorem", "ortho_comm", ["linear_map", "is_refl"]], ["add", "def", "is_refl", ["linear_map"]], ["add", "theorem", "is_refl", ["linear_map", "is_symm"]], ["add", "theorem", "ortho_comm", ["linear_map", "is_symm"]], ["add", "def", "is_symm", ["linear_map"]], ["add", "theorem", "ortho_smul_left", ["linear_map"]], ["add", "theorem", "ortho_smul_right", ["linear_map"]], ["del", "theorem", "add_left", ["sesq_form"]], ["del", "def", "add_monoid_hom_right", ["sesq_form"]], ["del", "theorem", "add_right", ["sesq_form"]], ["del", "def", "comp", ["sesq_form"]], ["del", "theorem", "comp_apply", ["sesq_form"]], ["del", "theorem", "comp_comp", ["sesq_form"]], ["del", "theorem", "comp_injective", ["sesq_form"]], ["del", "def", "comp_left", ["sesq_form"]], ["del", "theorem", "comp_left_apply", ["sesq_form"]], ["del", "theorem", "comp_left_comp_right", ["sesq_form"]], ["del", "def", "comp_right", ["sesq_form"]], ["del", "theorem", "comp_right_apply", ["sesq_form"]], ["del", "theorem", "comp_right_comp_left", ["sesq_form"]], ["del", "theorem", "ext", ["sesq_form"]], ["del", "theorem", "is_refl", ["sesq_form", "is_alt"]], ["del", "theorem", "neg", ["sesq_form", "is_alt"]], ["del", "theorem", "ortho_comm", ["sesq_form", "is_alt"]], ["del", "theorem", "self_eq_zero", ["sesq_form", "is_alt"]], ["del", "def", "is_alt", ["sesq_form"]], ["del", "def", "is_ortho", ["sesq_form"]], ["del", "theorem", "eq_zero", ["sesq_form", "is_refl"]], ["del", "theorem", "ortho_comm", ["sesq_form", "is_refl"]], ["del", "def", "is_refl", ["sesq_form"]], ["del", "theorem", "is_refl", ["sesq_form", "is_symm"]], ["del", "theorem", "ortho_comm", ["sesq_form", "is_symm"]], ["del", "def", "is_symm", ["sesq_form"]], ["del", "def", "linear_map_left", ["sesq_form"]], ["del", "theorem", "neg_left", ["sesq_form"]], ["del", "theorem", "neg_right", ["sesq_form"]], ["del", "theorem", "ortho_smul_left", ["sesq_form"]], ["del", "theorem", "ortho_smul_right", ["sesq_form"]], ["del", "theorem", "ortho_zero", ["sesq_form"]], ["del", "theorem", "smul_left", ["sesq_form"]], ["del", "theorem", "smul_right", ["sesq_form"]], ["del", "theorem", "sub_left", ["sesq_form"]], ["del", "theorem", "sub_right", ["sesq_form"]], ["del", "theorem", "sum_left", ["sesq_form"]], ["del", "theorem", "sum_right", ["sesq_form"]], ["del", "theorem", "zero_left", ["sesq_form"]], ["del", "theorem", "zero_right", ["sesq_form"]], ["del", "structure", "sesq_form", []]]}]}, {"timestamp": 1640083982, "sha": "d5653736", "message": "feat(order/galois_connection, linear_algebra/basic): `x ∈ R ∙ y` is a transitive relation (#10943)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mem_span_singleton_trans", ["submodule"]], ["add", "theorem", "subset_span_trans", ["submodule"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "l_u_le_trans", ["galois_connection"]], ["add", "theorem", "le_u_l_trans", ["galois_connection"]]]}]}, {"timestamp": 1640071348, "sha": "2ceda785", "message": "feat(order/monovary): Monovariance of a pair of functions. (#10890)\n`f` monovaries with `g` if `g i < g j → f i ≤ f j`. `f` antivaries with `g` if `g i < g j → f j ≤ f i`.\nThis is a way to talk about functions being monotone together, without needing an order on the index type.", "changes": [{"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "antitone_iff_forall_lt", []], ["add", "theorem", "reflect_lt", ["antitone_on"]], ["add", "theorem", "antitone_on_iff_forall_lt", []], ["add", "theorem", "monotone_iff_forall_lt", []], ["add", "theorem", "reflect_lt", ["monotone_on"]], ["add", "theorem", "monotone_on_iff_forall_lt", []]]}, {"oldPath": null, "newPath": "src/order/monovary.lean", "changes": [["add", "theorem", "comp_right", ["antivary"]], ["add", "theorem", "dual", ["antivary"]], ["add", "theorem", "dual_left", ["antivary"]], ["add", "theorem", "dual_right", ["antivary"]], ["add", "def", "antivary", []], ["add", "theorem", "antivary_const_left", []], ["add", "theorem", "antivary_const_right", []], ["add", "theorem", "antivary_id_iff", []], ["add", "theorem", "dual", ["antivary_on"]], ["add", "theorem", "dual_left", ["antivary_on"]], ["add", "theorem", "dual_right", ["antivary_on"]], ["add", "def", "antivary_on", []], ["add", "theorem", "antivary_on_const_left", []], ["add", "theorem", "antivary_on_const_right", []], ["add", "theorem", "antivary_on_id_iff", []], ["add", "theorem", "antivary_on_univ", []], ["add", "theorem", "comp_right", ["monovary"]], ["add", "theorem", "dual", ["monovary"]], ["add", "theorem", "dual_left", ["monovary"]], ["add", "theorem", "dual_right", ["monovary"]], ["add", "def", "monovary", []], ["add", "theorem", "monovary_const_left", []], ["add", "theorem", "monovary_const_right", []], ["add", "theorem", "monovary_id_iff", []], ["add", "theorem", "dual", ["monovary_on"]], ["add", "theorem", "dual_left", ["monovary_on"]], ["add", "theorem", "dual_right", ["monovary_on"]], ["add", "def", "monovary_on", []], ["add", "theorem", "monovary_on_const_left", []], ["add", "theorem", "monovary_on_const_right", []], ["add", "theorem", "monovary_on_id_iff", []], ["add", "theorem", "monovary_on_self", []], ["add", "theorem", "monovary_on_univ", []], ["add", "theorem", "monovary_self", []], ["add", "theorem", "antivary", ["subsingleton"]], ["add", "theorem", "antivary_on", ["subsingleton"]], ["add", "theorem", "monovary", ["subsingleton"]], ["add", "theorem", "monovary_on", ["subsingleton"]]]}]}, {"timestamp": 1640051004, "sha": "d145e8e3", "message": "chore(combinatorics/simple_graph/basic): Golf and cleanup (#10942)\nThis kills a few `simp` and fixes typos.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["del", "theorem", "common_neighbors_subset_neighbor_set", ["simple_graph"]], ["add", "theorem", "common_neighbors_subset_neighbor_set_left", ["simple_graph"]], ["add", "theorem", "common_neighbors_subset_neighbor_set_right", ["simple_graph"]]]}]}, {"timestamp": 1640043373, "sha": "5ac4cd35", "message": "feat(analysis/special_functions/non_integrable): examples of non-integrable functions (#10788)", "changes": [{"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": [["add", "theorem", "ae_measurable_deriv", []]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/non_integrable.lean", "changes": [["add", "theorem", "interval_integrable_inv_iff", []], ["add", "theorem", "interval_integrable_sub_inv_iff", []], ["add", "theorem", "not_interval_integrable_of_sub_inv_is_O_punctured", []], ["add", "theorem", "not_interval_integrable_of_tendsto_norm_at_top_of_deriv_is_O_filter", []], ["add", "theorem", "not_interval_integrable_of_tendsto_norm_at_top_of_deriv_is_O_punctured", []], ["add", "theorem", "not_interval_integrable_of_tendsto_norm_at_top_of_deriv_is_O_within_diff_singleton", []]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "interval_oc_subset_interval_oc_of_interval_subset_interval", ["set"]], ["add", "theorem", "interval_oc_swap", ["set"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "mono_fun'", ["interval_integrable"]], ["add", "theorem", "mono_fun", ["interval_integrable"]], ["add", "theorem", "abs_integral_eq_abs_integral_interval_oc", ["interval_integral"]], ["add", "theorem", "abs_integral_mono_interval", ["interval_integral"]], ["mod", "theorem", "norm_integral_eq_norm_integral_Ioc", ["interval_integral"]], ["add", "theorem", "norm_integral_min_max", ["interval_integral"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/interval.lean", "newPath": "src/order/filter/interval.lean", "changes": [["add", "theorem", "interval", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "diff_mem_nhds_within_compl", []], ["add", "theorem", "diff_mem_nhds_within_diff", []]]}]}, {"timestamp": 1640036960, "sha": "c88943fa", "message": "feat(algebra/algebra/subalgebra): define the center of a (unital) algebra (#10910)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "algebra_map_mem_center", ["set"]], ["add", "def", "center", ["subalgebra"]], ["add", "theorem", "center_eq_top", ["subalgebra"]], ["add", "theorem", "center_to_subring", ["subalgebra"]], ["add", "theorem", "center_to_subsemiring", ["subalgebra"]], ["add", "theorem", "coe_center", ["subalgebra"]], ["add", "theorem", "mem_center_iff", ["subalgebra"]]]}]}, {"timestamp": 1640036958, "sha": "3b6bd997", "message": "chore(data/finset/prod): eliminate `finish` (#10904)\nRemoving uses of finish, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": []}]}, {"timestamp": 1640032942, "sha": "ed250f7b", "message": "feat(topology/[path_]connected): add random [path-]connectedness lemmas (#10932)\nFrom sphere-eversion", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "connected_component_eq_univ", ["preconnected_space"]], ["add", "theorem", "preconnected_space_iff_connected_component", []]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "is_connected", ["is_path_connected"]]]}]}, {"timestamp": 1640029677, "sha": "7555ea78", "message": "feat(ring_theory/integral_closure): Supremum of integral subalgebras (#10935)\nThe supremum of integral subalgebras is integral.", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_sup", []]]}]}, {"timestamp": 1640029676, "sha": "5dd0edef", "message": "refactor(algebra/category/CommRing/constructions): Squeeze a slow simp (#10934)\n`prod_fan_is_limit` was causing timeouts on CI for another PR, so I squeezed one of the simps.", "changes": [{"oldPath": "src/algebra/category/CommRing/constructions.lean", "newPath": "src/algebra/category/CommRing/constructions.lean", "changes": []}]}, {"timestamp": 1640026630, "sha": "082665e8", "message": "feat(group_theory/index): relindex_eq_zero_of_le_right (#10928)\nIf H has infinite index in K, then so does any L ≥ K.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "relindex_eq_zero_of_le_right", ["subgroup"]]]}]}, {"timestamp": 1640017796, "sha": "d910e835", "message": "chore(*): ensure all open_locales work without any open namespaces (#10913)\nInspired by #10905 we clean up the localized notation in all locales by using the full names of declarations, this should mean that `open_locale blah` should almost never error.\nThe cases I'm aware of where this doesn't hold still are the locales:\n- `witt` which hard codes the variable name `p`, if there is no `p` in context this will fail\n- `list.func` and `topological_space` opening `list.func` breaks the notation in `topological_space` due to ``notation as `{` m ` ↦ ` a `}` := list.func.set a as m`` in `list.func` and ``localized \"notation `𝓝[≠] ` x:100 := nhds_within x {x}ᶜ\" in topological_space``\n- likewise for `parser` and `kronecker` due to ``localized \"infix ` ⊗ₖ `:100 := matrix.kronecker_map (*)\" in kronecker``\nBut we don't fix these in this PR.\nThere may be others instances like this too as these errors can depend on the ordering chosen and I didn't check them all.\nA very basic script to check this sort of thing is at https://github.com/leanprover-community/mathlib/tree/alexjbest/check_localized", "changes": [{"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/data/nat/count.lean", "newPath": "src/data/nat/count.lean", "changes": []}, {"oldPath": "src/data/vector3.lean", "newPath": "src/data/vector3.lean", "changes": []}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/modular.lean", "newPath": "src/number_theory/modular.lean", "changes": []}]}, {"timestamp": 1640017795, "sha": "d14ac1fe", "message": "feat(*) : added missing lemma for pointwise smul of submonoid, add_subgroup, add_submonoid, subsemiring, and semiring. (#10908)", "changes": [{"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "theorem", "mem_smul_pointwise_iff_exists", ["add_subgroup"]], ["add", "theorem", "mem_smul_pointwise_iff_exists", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["add", "theorem", "mem_smul_pointwise_iff_exists", ["add_submonoid"]], ["add", "theorem", "mem_smul_pointwise_iff_exists", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subring/pointwise.lean", "newPath": "src/ring_theory/subring/pointwise.lean", "changes": [["add", "theorem", "mem_smul_pointwise_iff_exists", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring/pointwise.lean", "newPath": "src/ring_theory/subsemiring/pointwise.lean", "changes": [["add", "theorem", "mem_smul_pointwise_iff_exists", ["subsemiring"]]]}]}, {"timestamp": 1640017794, "sha": "c2debc48", "message": "refactor(combinatorics/configuration): Implicit arguments for `nondegenerate.eq_or_eq` (#10885)\nThe arguments `p₁`, `p₂`, `l₁`, `l₂` can be implicit, since they can be inferred from `p₁ ∈ l₁`, `p₂ ∈ l₁`, `p₁ ∈ l₂`, `p₂ ∈ l₂`.", "changes": [{"oldPath": "src/combinatorics/configuration.lean", "newPath": "src/combinatorics/configuration.lean", "changes": []}]}, {"timestamp": 1640015489, "sha": "b9fbef82", "message": "feat(tactic/observe): have a claim proved by library_search under the hood (#10878)", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": null, "newPath": "src/tactic/observe.lean", "changes": []}, {"oldPath": null, "newPath": "test/observe.lean", "changes": []}]}, {"timestamp": 1640006824, "sha": "ab654e5c", "message": "feat(topology/sober): Specialization & generic points & sober spaces (#10914)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_iff_closure_subset", ["is_closed"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "closure_image_eq", ["closed_embedding"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "eq", ["indistinguishable"]], ["add", "theorem", "is_irreducible_iff_singleton", []], ["add", "theorem", "is_preirreducible_iff_subsingleton", []]]}, {"oldPath": null, "newPath": "src/topology/sober.lean", "changes": [["add", "theorem", "sober", ["closed_embedding"]], ["add", "theorem", "map_specialization", ["continuous_map"]], ["add", "def", "generic_point", []], ["add", "theorem", "generic_point_closure", []], ["add", "theorem", "generic_point_spec", []], ["add", "theorem", "generic_point_specializes", []], ["add", "theorem", "indistinguishable_iff_specializes_and", []], ["add", "def", "irreducible_set_equiv_points", []], ["add", "theorem", "def", ["is_generic_point"]], ["add", "theorem", "disjoint_iff", ["is_generic_point"]], ["add", "theorem", "eq", ["is_generic_point"]], ["add", "theorem", "image", ["is_generic_point"]], ["add", "theorem", "is_closed", ["is_generic_point"]], ["add", "theorem", "is_irreducible", ["is_generic_point"]], ["add", "theorem", "mem", ["is_generic_point"]], ["add", "theorem", "mem_closed_set_iff", ["is_generic_point"]], ["add", "theorem", "mem_open_set_iff", ["is_generic_point"]], ["add", "theorem", "specializes", ["is_generic_point"]], ["add", "def", "is_generic_point", []], ["add", "theorem", "is_generic_point_closure", []], ["add", "theorem", "is_generic_point_def", []], ["add", "def", "generic_point", ["is_irreducible"]], ["add", "theorem", "generic_point_closure_eq", ["is_irreducible"]], ["add", "theorem", "generic_point_spec", ["is_irreducible"]], ["add", "theorem", "sober", ["open_embedding"]], ["add", "theorem", "sober_of_open_cover", []], ["add", "theorem", "monotone_of_continuous", ["specialization_order"]], ["add", "def", "specialization_order", []], ["add", "def", "specialization_preorder", []], ["add", "theorem", "eq", ["specializes"]], ["add", "theorem", "map", ["specializes"]], ["add", "theorem", "trans", ["specializes"]], ["add", "def", "specializes", []], ["add", "theorem", "specializes_antisymm", []], ["add", "theorem", "specializes_def", []], ["add", "theorem", "specializes_iff_closure_subset", []], ["add", "theorem", "specializes_iff_eq", []], ["add", "theorem", "specializes_iff_forall_closed", []], ["add", "theorem", "specializes_iff_forall_open", []], ["add", "theorem", "specializes_refl", []], ["add", "theorem", "specializes_rfl", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_irreducible_univ", ["irreducible_space"]], ["add", "theorem", "interior", ["is_preirreducible"]], ["add", "theorem", "open_subset", ["is_preirreducible"]], ["add", "theorem", "preimage", ["is_preirreducible"]], ["add", "theorem", "subset_irreducible", ["is_preirreducible"]], ["add", "theorem", "is_preirreducible_of_subsingleton", []], ["add", "theorem", "subset_closure_inter_of_is_preirreducible_of_is_open", []]]}]}, {"timestamp": 1640006821, "sha": "e473898e", "message": "feat(category_theory/glue_data): Some more API for glue_data (#10881)", "changes": [{"oldPath": "src/category_theory/glue_data.lean", "newPath": "src/category_theory/glue_data.lean", "changes": [["add", "def", "V_pullback_cone", ["category_theory", "glue_data"]], ["add", "def", "V_pullback_cone_is_limit_of_map", ["category_theory", "glue_data"]], ["add", "def", "glued_iso", ["category_theory", "glue_data"]], ["add", "theorem", "has_colimit_map_glue_data_diagram", ["category_theory", "glue_data"]], ["add", "theorem", "has_colimit_multispan_comp", ["category_theory", "glue_data"]], ["add", "theorem", "types_ι_jointly_surjective", ["category_theory", "glue_data"]], ["add", "theorem", "types_π_surjective", ["category_theory", "glue_data"]], ["add", "theorem", "ι_glued_iso_hom", ["category_theory", "glue_data"]], ["add", "theorem", "ι_glued_iso_inv", ["category_theory", "glue_data"]], ["add", "theorem", "ι_jointly_surjective", ["category_theory", "glue_data"]]]}]}, {"timestamp": 1640006817, "sha": "6cfc8d82", "message": "feat(algebraic_geometry/locally_ringed_space): LocallyRingedSpace is cocomplete. (#10791)", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": [["add", "def", "coequalizer", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "coequalizer_cofork", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "coequalizer_cofork_is_colimit", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "image_basic_open", ["algebraic_geometry", "LocallyRingedSpace", "has_coequalizer"]], ["add", "theorem", "image_basic_open_image_open", ["algebraic_geometry", "LocallyRingedSpace", "has_coequalizer"]], ["add", "theorem", "image_basic_open_image_preimage", ["algebraic_geometry", "LocallyRingedSpace", "has_coequalizer"]], ["add", "theorem", "is_local_ring_hom_stalk_map_congr", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": [["add", "theorem", "comp_c_app'", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "congr_app", ["algebraic_geometry", "SheafedSpace"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "coequalizer_preimage_image_eq_of_preimage_eq", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["add", "theorem", "is_local_ring_hom_of_comp", []], ["add", "theorem", "domain_local_ring", ["ring_hom"]]]}]}, {"timestamp": 1640001200, "sha": "b02e2ea1", "message": "feat(group_theory/coset): Embeddings of quotients (#10901)\nIf `K ≤ L`, then there is an embedding `K ⧸ (H.subgroup_of K) ↪ L ⧸ (H.subgroup_of L)`. Golfed from #9545.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "def", "quotient_subgroup_of_embedding_of_le", ["subgroup"]]]}]}, {"timestamp": 1640001199, "sha": "b4961da2", "message": "feat(analysis/calculus/{f,}deriv): generalize `has_fderiv_at_filter.is_O_sub_rev` (#10897)\nAlso add `has_deriv_at.is_O_sub_rev`", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "has_fderiv_at_equiv", ["has_deriv_at"]], ["add", "theorem", "is_O_sub_rev", ["has_deriv_at_filter"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "is_O_sub_rev", ["has_fderiv_at_filter"]]]}]}, {"timestamp": 1639994860, "sha": "bcf20b09", "message": "feat(combinatorics/simple_graph/matching): is_matching iff all degrees = 1 (#10864)", "changes": [{"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": [["add", "theorem", "is_matching_iff_forall_degree", ["simple_graph", "subgraph"]]]}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "degree_eq_one_iff_unique_adj", ["simple_graph", "subgraph"]], ["add", "theorem", "finset_card_neighbor_set_eq_degree", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1639994858, "sha": "19290257", "message": "feat(ring_theory/polynomial/cyclotomic): generalize a few results to domains (#10741)\nPrimarily for flt-regular", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "degree_X_add_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]], ["mod", "theorem", "roots_C_mul", ["polynomial"]], ["mod", "theorem", "roots_normalize", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["del", "theorem", "C_leading_coeff_mul_prod_multiset_X_sub_C_of_field", ["polynomial"]], ["del", "theorem", "prod_multiset_X_sub_C_of_monic_of_roots_card_eq_of_field", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["mod", "theorem", "X_pow_sub_one_eq_prod", ["polynomial"]], ["mod", "theorem", "cyclotomic'_eq_X_pow_sub_one_div", ["polynomial"]], ["mod", "theorem", "cyclotomic_eq_prod_X_sub_primitive_roots", ["polynomial"]], ["mod", "theorem", "int_coeff_of_cyclotomic'", ["polynomial"]], ["mod", "theorem", "prod_cyclotomic'_eq_X_pow_sub_one", ["polynomial"]], ["mod", "theorem", "unique_int_coeff_of_cycl", ["polynomial"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1639990879, "sha": "5a790471", "message": "feat(group_theory/index): `relindex_eq_zero_of_le_left` (#10902)\nIf `K` has infinite index in `L`, then so does any `H ≤ K`.\nThe `right`-version is forthcoming.\nMaking the subgroups explicit in `relindex_mul_relindex` makes rewriting much easier (both in this situation, and in others).", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "relindex_eq_zero_of_le_left", ["subgroup"]]]}]}, {"timestamp": 1639990878, "sha": "5c05ca28", "message": "feat(ring_theory/integral_closure): `is_field_iff_is_field` (#10875)\nIf `R/S` is an integral extension, then `R` is a field if and only if `S` is a field. One direction was already in mathlib, and this PR proves the converse direction.", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_field_of_is_integral_of_is_field'", []], ["add", "theorem", "is_field_iff_is_field", ["is_integral"]]]}]}, {"timestamp": 1639990876, "sha": "d5de8eac", "message": "feat(data/polynomial): add some simp attributes and commuted versions of coeff_mul_X_pow (#10868)\nI couldn't find these before and accidentally rewrote them from scratch, I think part of the reason is that I would have expected all of these vesions to be simp lemmas, so we add some more versions of these lemmas and tag everything as simp.\nFrom flt-regular", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "commute_X_pow", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_X_mul", ["polynomial"]], ["add", "theorem", "coeff_X_pow_mul'", ["polynomial"]], ["add", "theorem", "coeff_X_pow_mul", ["polynomial"]]]}]}, {"timestamp": 1639986507, "sha": "ade581e9", "message": "feat(algebraic_geometry): Open immersions of locally ringed spaces have pullbacks (#10917)", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "theorem", "comp_val", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "of_restrict", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "lift", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "lift_fac", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "lift_range", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "lift_uniq", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_is_limit", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_snd_is_iso_of_range_subset", ["algebraic_geometry", "LocallyRingedSpace", "is_open_immersion"]]]}, {"oldPath": "src/category_theory/reflects_isomorphisms.lean", "newPath": "src/category_theory/reflects_isomorphisms.lean", "changes": []}]}, {"timestamp": 1639979517, "sha": "093aef54", "message": "feat(order/monotone): Functions from/to subsingletons are monotone (#10903)\nA few really trivial results about monotonicity/antitonicity of `f : α → β` where `subsingleton α` or `subsingleton β`.\nAlso fixes the markdown heading levels in this file", "changes": [{"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "antitone'", ["subsingleton"]], ["add", "theorem", "monotone'", ["subsingleton"]]]}]}, {"timestamp": 1639975665, "sha": "1067556a", "message": "refactor(data/polynomial/eval): Golf `hom_eval₂` (#10920)\nHere's a much easier proof of `hom_eval₂`.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}]}, {"timestamp": 1639965240, "sha": "c40c7013", "message": "feat(docs/references) : Added reference for #10791 (#10915)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1639965238, "sha": "9cbd828a", "message": "feat(data/finset/basic): add image_congr (#10911)\nAdd `finset.image_congr`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "image_congr", ["finset"]]]}]}, {"timestamp": 1639965237, "sha": "f7b24fa7", "message": "refactor(ring_theory/tensor_product): Speed up slow proofs (#10883)\n`alg_hom_of_linear_map_tensor_product` was causing timeouts, due to many uses of `simp`. This refactor speeds up the proofs.", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1639961824, "sha": "6ab0f909", "message": "chore(category_theory/filtered): avoid `finish` (#10918)\nRemoving uses of finish, as discussed on Zulip (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers).", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}]}, {"timestamp": 1639946948, "sha": "5dd35377", "message": "feat(algebra/algebra/subalgebra): `subalgebra.map` commutes with supremum (#10899)\nThis PR proves `(S ⊔ T).map f = S.map f ⊔ T.map f`.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "map_sup", ["algebra"]]]}]}, {"timestamp": 1639939903, "sha": "41ced1ca", "message": "feat(ring_theory/tensor_product): The tensor product `A ⊗ B` is generated by tensors `a ⊗ₜ b` (#10900)\nThe tensor product is generated by tensors, in terms of `algebra.adjoin`. This is an immediate consequence of `span_tmul_eq_top`.", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "theorem", "adjoin_tmul_eq_top", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1639939902, "sha": "194bde8f", "message": "feat(order/monotone): add `monotone_int_of_le_succ` etc (#10895)\nAlso use new lemmas to golf `zpow_strict_mono` and prove `zpow_strict_anti`.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "zpow_strict_anti", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "antitone_int_of_succ_le", []], ["del", "theorem", "forall_ge_le_of_forall_le_succ", []], ["add", "theorem", "rel_of_forall_rel_succ_of_le", ["int"]], ["add", "theorem", "rel_of_forall_rel_succ_of_lt", ["int"]], ["add", "theorem", "monotone_int_of_le_succ", []], ["add", "theorem", "rel_of_forall_rel_succ_of_le", ["nat"]], ["add", "theorem", "rel_of_forall_rel_succ_of_le_of_le", ["nat"]], ["add", "theorem", "rel_of_forall_rel_succ_of_le_of_lt", ["nat"]], ["add", "theorem", "rel_of_forall_rel_succ_of_lt", ["nat"]], ["add", "theorem", "strict_anti_int_of_succ_lt", []], ["mod", "theorem", "strict_anti_nat_of_succ_lt", []], ["add", "theorem", "strict_mono_int_of_lt_succ", []], ["mod", "theorem", "strict_mono_nat_of_lt_succ", []]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}]}, {"timestamp": 1639939901, "sha": "a60ef7c9", "message": "feat(data/list/sort): subperm sorted implies sublist (#10892)\nA \"sub\" version of the lemma directly above.", "changes": [{"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["add", "theorem", "sublist_of_subperm_of_sorted", ["list"]]]}]}, {"timestamp": 1639939900, "sha": "faee3582", "message": "feat (order/lexicographic): add API lemmas (#10887)", "changes": [{"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": [["add", "theorem", "lex_le_iff", []], ["add", "theorem", "lex_lt_iff", []]]}]}, {"timestamp": 1639939900, "sha": "45ed9ded", "message": "chore(order/complete_lattice): eliminate `finish` (#10876)\nRemoving uses of finish, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}]}, {"timestamp": 1639933577, "sha": "68d9b42b", "message": "feat(data/list/count): add lemma `list.count_singleton'` (#10880)\nA generalisation of `count_singleton`: `count a [b] = ite (a = b) 1 0`", "changes": [{"oldPath": "src/data/list/count.lean", "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "count_singleton'", ["list"]]]}]}, {"timestamp": 1639916100, "sha": "9e5cbc12", "message": "feat(algebra/group_power/basic): generalize `zpow_neg_one` to `div_inv_monoid` (#10894)\nDrop `zpow_neg_one₀`", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "zpow_neg_one₀", []]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}]}, {"timestamp": 1639912592, "sha": "3fc32e3e", "message": "feat(analysis/asymptotics): add `is_O.inv_rev`, `is_o.inv_rev` (#10896)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "inv_rev", ["asymptotics", "is_O"]], ["add", "theorem", "inv_rev", ["asymptotics", "is_O_with"]], ["add", "theorem", "inv_rev", ["asymptotics", "is_o"]]]}]}, {"timestamp": 1639908083, "sha": "72224634", "message": "chore(algebra/iterate_hom): use to_additive to fill missing lemmas (#10886)", "changes": [{"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": [["add", "theorem", "coe_pow", ["add_monoid", "End"]], ["del", "theorem", "iterate_map_sub", ["add_monoid_hom"]], ["add", "theorem", "coe_pow", ["monoid", "End"]], ["add", "theorem", "iterate_map_div", ["monoid_hom"]], ["mod", "theorem", "iterate_map_pow", ["monoid_hom"]], ["mod", "theorem", "iterate_map_zpow", ["monoid_hom"]]]}]}, {"timestamp": 1639882093, "sha": "a2c3b293", "message": "chore(scripts): update nolints.txt (#10893)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1639858281, "sha": "ee17ab3a", "message": "refactor(measure_theory/measure/hausdorff): change Hausdorff measure definition at 0 (#10859)\nCurrently, our definition of the Hausdorff measure ensures that it has no atom. This differs from the standard definition of the 0-Hausdorff measure, which is the counting measure -- and this convention is better behaved in many respects, for instance in a `d`-dimensional space the `d`-Hausdorff measure is proportional to Lebesgue measure, while currently we only have this for `d > 0`.\nThis PR refactors the definition of the Hausdorff measure, to conform to the standard definition.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nonempty_of_nonempty_preimage", ["set"]]]}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["mod", "theorem", "hausdorff_measure_pi_real", ["measure_theory"]], ["del", "theorem", "hausdorff_measure_apply'", ["measure_theory", "measure"]], ["mod", "theorem", "hausdorff_measure_apply", ["measure_theory", "measure"]], ["add", "theorem", "hausdorff_measure_le_one_of_subsingleton", ["measure_theory", "measure"]], ["add", "theorem", "hausdorff_measure_zero_singleton", ["measure_theory", "measure"]], ["mod", "theorem", "le_hausdorff_measure", ["measure_theory", "measure"]], ["mod", "theorem", "le_mk_metric", ["measure_theory", "measure"]], ["mod", "theorem", "mk_metric_mono", ["measure_theory", "measure"]], ["add", "theorem", "no_atoms_hausdorff", ["measure_theory", "measure"]], ["add", "theorem", "one_le_hausdorff_measure_zero_of_nonempty", ["measure_theory", "measure"]], ["mod", "theorem", "le_mk_metric", ["measure_theory", "outer_measure"]], ["mod", "theorem", "mk_metric_mono", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}]}, {"timestamp": 1639858280, "sha": "289ebe58", "message": "chore(category_theory/monoidal/End): Adding API for monoidal functors into `C ⥤ C` (#10841)\nNeeded for the shift refactor", "changes": [{"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["add", "theorem", "map_hom_inv_app", ["category_theory"]], ["add", "theorem", "map_inv_hom_app", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/End.lean", "newPath": "src/category_theory/monoidal/End.lean", "changes": [["add", "theorem", "associativity_app", ["category_theory"]], ["add", "def", "equiv_of_tensor_iso_unit", ["category_theory"]], ["add", "theorem", "left_unitality_app", ["category_theory"]], ["add", "theorem", "obj_zero_map_μ_app", ["category_theory"]], ["add", "theorem", "obj_ε_app", ["category_theory"]], ["add", "theorem", "obj_ε_inv_app", ["category_theory"]], ["add", "theorem", "obj_μ_app", ["category_theory"]], ["add", "theorem", "obj_μ_inv_app", ["category_theory"]], ["add", "theorem", "obj_μ_zero_app", ["category_theory"]], ["add", "theorem", "right_unitality_app", ["category_theory"]], ["mod", "def", "tensoring_right_monoidal", ["category_theory"]], ["add", "def", "unit_of_tensor_iso_unit", ["category_theory"]], ["add", "theorem", "ε_app_obj", ["category_theory"]], ["add", "theorem", "ε_hom_inv_app", ["category_theory"]], ["add", "theorem", "ε_inv_app_obj", ["category_theory"]], ["add", "theorem", "ε_inv_hom_app", ["category_theory"]], ["add", "theorem", "ε_inv_naturality", ["category_theory"]], ["add", "theorem", "ε_naturality", ["category_theory"]], ["add", "theorem", "μ_hom_inv_app", ["category_theory"]], ["add", "theorem", "μ_inv_hom_app", ["category_theory"]], ["add", "theorem", "μ_inv_naturality", ["category_theory"]], ["add", "theorem", "μ_naturality", ["category_theory"]], ["add", "theorem", "μ_naturalityᵣ", ["category_theory"]], ["add", "theorem", "μ_naturality₂", ["category_theory"]], ["add", "theorem", "μ_naturalityₗ", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["mod", "theorem", "map_left_unitor", ["category_theory", "monoidal_functor"]], ["mod", "theorem", "map_right_unitor", ["category_theory", "monoidal_functor"]], ["mod", "theorem", "map_tensor", ["category_theory", "monoidal_functor"]], ["add", "theorem", "ε_hom_inv_id", ["category_theory", "monoidal_functor"]], ["add", "theorem", "ε_inv_hom_id", ["category_theory", "monoidal_functor"]], ["add", "theorem", "ε_iso_hom", ["category_theory", "monoidal_functor"]], ["add", "theorem", "μ_hom_inv_id", ["category_theory", "monoidal_functor"]], ["add", "theorem", "μ_inv_hom_id", ["category_theory", "monoidal_functor"]], ["add", "theorem", "μ_iso_hom", ["category_theory", "monoidal_functor"]], ["mod", "def", "μ_nat_iso", ["category_theory", "monoidal_functor"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "inv_inv_app", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1639858279, "sha": "9f1b9bcd", "message": "feat(linear_algebra/determinant): more properties of the determinant of linear maps (#10809)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_coe_symm", ["linear_equiv"]], ["add", "theorem", "bot_lt_ker_of_det_eq_zero", ["linear_map"]], ["add", "theorem", "finite_dimensional_of_det_ne_one", ["linear_map"]], ["add", "theorem", "is_unit_det", ["linear_map"]], ["add", "theorem", "range_lt_top_of_det_eq_zero", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "is_unit_iff", ["linear_map"]], ["add", "theorem", "is_unit_iff_ker_eq_bot", ["linear_map"]], ["add", "theorem", "is_unit_iff_range_eq_top", ["linear_map"]]]}]}, {"timestamp": 1639858278, "sha": "0d473696", "message": "feat(topology/metric/hausdorff_distance): more properties of cthickening (#10808)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "eventually_closed_ball_subset", []], ["add", "theorem", "bounded_range_of_tendsto", ["metric"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "exists_inf_edist_eq_edist", ["is_compact"]], ["add", "theorem", "cthickening", ["metric", "bounded"]], ["add", "theorem", "thickening", ["metric", "bounded"]], ["add", "theorem", "mem_cthickening_of_dist_le", ["metric"]], ["add", "theorem", "mem_cthickening_of_edist_le", ["metric"]]]}]}, {"timestamp": 1639850976, "sha": "a6179f61", "message": "feat(linear_algebra/affine_space/affine_equiv): isomorphism with the units (#10798)\nThis adds:\n* `affine_equiv.equiv_units_affine_map` (the main point in this PR)\n* `affine_map.linear_hom`\n* `affine_equiv.linear_hom`\n* `simps` configuration for `affine_equiv`. In order to makes `simp` happy, we adjust the order of the implicit variables to all lemmas in this file, so that they match the order of the arguments to `affine_equiv`.\nThe new definition can be used to majorly golf `homothety_units_mul_hom`", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["del", "theorem", "const_vadd_apply", ["affine_equiv"]], ["del", "theorem", "const_vadd_symm_apply", ["affine_equiv"]], ["add", "def", "equiv_units_affine_map", ["affine_equiv"]], ["del", "theorem", "linear_const_vadd", ["affine_equiv"]], ["add", "def", "linear_hom", ["affine_equiv"]], ["del", "theorem", "linear_vadd_const", ["affine_equiv"]], ["add", "def", "apply", ["affine_equiv", "simps"]], ["add", "def", "symm_apply", ["affine_equiv", "simps"]], ["del", "theorem", "vadd_const_apply", ["affine_equiv"]], ["del", "theorem", "vadd_const_symm_apply", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "def", "linear_hom", ["affine_map"]]]}]}, {"timestamp": 1639850975, "sha": "2c4e66f7", "message": "split(data/finset/*): Split `data.finset.card` and `data.finset.fin` off `data.finset.basic` (#10796)\nThis moves stuff from `data.finset.basic` in two new files:\n* Stuff about `finset.card` goes into `data.finset.card`\n* Stuff about `finset.fin_range` and `finset.attach_fin` goes into `data.finset.fin`. I expect this file to be shortlived as I'm planning on killing `fin_range`.\nI reordered lemmas thematically and it appeared that there were two pairs of duplicated lemmas:\n* `finset.one_lt_card`, `finset.one_lt_card_iff`. They differ only for binder order.\n* `finset.card_union_eq`, `finset.card_disjoint_union`. They are literally the same.\nAll are used so I will clean up in a later PR.\nI'm crediting:\n* Microsoft Corporation, Leonardo, Jeremy for 8dbee5b1ca9680a22ffe90751654f51d6852d7f0\n* Chris Hughes for #231\n* Scott for #3319", "changes": [{"oldPath": "src/combinatorics/set_family/compression/uv.lean", "newPath": "src/combinatorics/set_family/compression/uv.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "def", "attach_fin", ["finset"]], ["del", "def", "card", ["finset"]], ["del", "theorem", "card_attach", ["finset"]], ["del", "theorem", "card_attach_fin", ["finset"]], ["del", "theorem", "card_congr", ["finset"]], ["del", "theorem", "card_cons", ["finset"]], ["del", "theorem", "card_def", ["finset"]], ["del", "theorem", "card_disjoint_union", ["finset"]], ["del", "theorem", "card_empty", ["finset"]], ["del", "theorem", "card_eq_of_bijective", ["finset"]], ["del", "theorem", "card_eq_one", ["finset"]], ["del", "theorem", "card_eq_succ", ["finset"]], ["del", "theorem", "card_eq_three", ["finset"]], ["del", "theorem", "card_eq_two", ["finset"]], ["del", "theorem", "card_eq_zero", ["finset"]], ["del", "theorem", "card_erase_eq_ite", ["finset"]], ["del", "theorem", "card_erase_le", ["finset"]], ["del", "theorem", "card_erase_lt_of_mem", ["finset"]], ["del", "theorem", "card_erase_of_mem", ["finset"]], ["del", "theorem", "card_filter_le", ["finset"]], ["del", "theorem", "card_image_eq_iff_inj_on", ["finset"]], ["del", "theorem", "card_image_le", ["finset"]], ["del", "theorem", "card_image_of_inj_on", ["finset"]], ["del", "theorem", "card_image_of_injective", ["finset"]], ["del", "theorem", "card_insert_eq_ite", ["finset"]], ["del", "theorem", "card_insert_le", ["finset"]], ["del", "theorem", "card_insert_of_mem", ["finset"]], ["del", "theorem", "card_insert_of_not_mem", ["finset"]], ["del", "theorem", "card_le_card_of_inj_on", ["finset"]], ["del", "theorem", "card_le_of_subset", ["finset"]], ["del", "theorem", "card_le_one", ["finset"]], ["del", "theorem", "card_le_one_iff", ["finset"]], ["del", "theorem", "card_le_one_iff_subset_singleton", ["finset"]], ["del", "theorem", "card_le_one_of_subsingleton", ["finset"]], ["del", "theorem", "card_lt_card", ["finset"]], ["del", "theorem", "card_map", ["finset"]], ["del", "theorem", "card_mk", ["finset"]], ["del", "theorem", "card_mono", ["finset"]], ["del", "theorem", "card_ne_zero_of_mem", ["finset"]], ["del", "theorem", "card_pos", ["finset"]], ["del", "theorem", "card_range", ["finset"]], ["del", "theorem", "card_sdiff", ["finset"]], ["del", "theorem", "card_sdiff_add_card", ["finset"]], ["del", "theorem", "card_singleton", ["finset"]], ["del", "theorem", "card_singleton_inter", ["finset"]], ["del", "theorem", "card_subtype", ["finset"]], ["del", "theorem", "card_union_add_card_inter", ["finset"]], ["del", "theorem", "card_union_eq", ["finset"]], ["del", "theorem", "card_union_le", ["finset"]], ["del", "theorem", "case_strong_induction_on", ["finset"]], ["del", "theorem", "coe_fin_range", ["finset"]], ["del", "theorem", "eq_of_subset_of_card_le", ["finset"]], ["del", "theorem", "exists_intermediate_set", ["finset"]], ["del", "theorem", "exists_ne_map_eq_of_card_lt_of_maps_to", ["finset"]], ["del", "theorem", "exists_ne_of_one_lt_card", ["finset"]], ["del", "theorem", "exists_smaller_set", ["finset"]], ["del", "theorem", "exists_subset_or_subset_of_two_mul_lt_card", ["finset"]], ["del", "theorem", "fiber_card_ne_zero_iff_mem_image", ["finset"]], ["del", "theorem", "filter_card_add_filter_neg_card_eq_card", ["finset"]], ["del", "theorem", "filter_card_eq", ["finset"]], ["del", "def", "fin_range", ["finset"]], ["del", "theorem", "fin_range_card", ["finset"]], ["del", "theorem", "inj_on_of_card_image_eq", ["finset"]], ["del", "theorem", "inj_on_of_surj_on_of_card_le", ["finset"]], ["del", "theorem", "le_card_of_inj_on_range", ["finset"]], ["del", "theorem", "length_to_list", ["finset"]], ["del", "theorem", "lt_wf", ["finset"]], ["del", "theorem", "mem_attach_fin", ["finset"]], ["del", "theorem", "mem_fin_range", ["finset"]], ["del", "theorem", "one_lt_card", ["finset"]], ["del", "theorem", "one_lt_card_iff", ["finset"]], ["del", "theorem", "pred_card_le_card_erase", ["finset"]], ["del", "def", "strong_downward_induction", ["finset"]], ["del", "theorem", "strong_downward_induction_eq", ["finset"]], ["del", "def", "strong_downward_induction_on", ["finset"]], ["del", "theorem", "strong_downward_induction_on_eq", ["finset"]], ["del", "def", "strong_induction", ["finset"]], ["del", "theorem", "strong_induction_eq", ["finset"]], ["del", "def", "strong_induction_on", ["finset"]], ["del", "theorem", "strong_induction_on_eq", ["finset"]], ["del", "theorem", "surj_on_of_inj_on_of_card_le", ["finset"]], ["del", "theorem", "card_to_finset", ["list"]], ["del", "theorem", "to_finset_card_le", ["list"]], ["del", "theorem", "to_finset_card_of_nodup", ["list"]], ["del", "theorem", "to_finset_card_le", ["multiset"]], ["del", "theorem", "to_finset_card_of_nodup", ["multiset"]], ["mod", "theorem", "to_finset_map", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/finset/card.lean", "changes": [["add", "def", "card", ["finset"]], ["add", "theorem", "card_attach", ["finset"]], ["add", "theorem", "card_congr", ["finset"]], ["add", "theorem", "card_cons", ["finset"]], ["add", "theorem", "card_def", ["finset"]], ["add", "theorem", "card_disjoint_union", ["finset"]], ["add", "theorem", "card_empty", ["finset"]], ["add", "theorem", "card_eq_of_bijective", ["finset"]], ["add", "theorem", "card_eq_one", ["finset"]], ["add", "theorem", "card_eq_succ", ["finset"]], ["add", "theorem", "card_eq_three", ["finset"]], ["add", "theorem", "card_eq_two", ["finset"]], ["add", "theorem", "card_eq_zero", ["finset"]], ["add", "theorem", "card_erase_eq_ite", ["finset"]], ["add", "theorem", "card_erase_le", ["finset"]], ["add", "theorem", "card_erase_lt_of_mem", ["finset"]], ["add", "theorem", "card_erase_of_mem", ["finset"]], ["add", "theorem", "card_filter_le", ["finset"]], ["add", "theorem", "card_image_eq_iff_inj_on", ["finset"]], ["add", "theorem", "card_image_le", ["finset"]], ["add", "theorem", "card_image_of_inj_on", ["finset"]], ["add", "theorem", "card_image_of_injective", ["finset"]], ["add", "theorem", "card_insert_eq_ite", ["finset"]], ["add", "theorem", "card_insert_le", ["finset"]], ["add", "theorem", "card_insert_of_mem", ["finset"]], ["add", "theorem", "card_insert_of_not_mem", ["finset"]], ["add", "theorem", "card_le_card_of_inj_on", ["finset"]], ["add", "theorem", "card_le_of_subset", ["finset"]], ["add", "theorem", "card_le_one", ["finset"]], ["add", "theorem", "card_le_one_iff", ["finset"]], ["add", "theorem", "card_le_one_iff_subset_singleton", ["finset"]], ["add", "theorem", "card_le_one_of_subsingleton", ["finset"]], ["add", "theorem", "card_lt_card", ["finset"]], ["add", "theorem", "card_map", ["finset"]], ["add", "theorem", "card_mk", ["finset"]], ["add", "theorem", "card_mono", ["finset"]], ["add", "theorem", "card_ne_zero_of_mem", ["finset"]], ["add", "theorem", "card_pos", ["finset"]], ["add", "theorem", "card_range", ["finset"]], ["add", "theorem", "card_sdiff", ["finset"]], ["add", "theorem", "card_sdiff_add_card", ["finset"]], ["add", "theorem", "card_singleton", ["finset"]], ["add", "theorem", "card_singleton_inter", ["finset"]], ["add", "theorem", "card_subtype", ["finset"]], ["add", "theorem", "card_union_add_card_inter", ["finset"]], ["add", "theorem", "card_union_eq", ["finset"]], ["add", "theorem", "card_union_le", ["finset"]], ["add", "theorem", "case_strong_induction_on", ["finset"]], ["add", "theorem", "eq_of_subset_of_card_le", ["finset"]], ["add", "theorem", "exists_intermediate_set", ["finset"]], ["add", "theorem", "exists_ne_map_eq_of_card_lt_of_maps_to", ["finset"]], ["add", "theorem", "exists_ne_of_one_lt_card", ["finset"]], ["add", "theorem", "exists_smaller_set", ["finset"]], ["add", "theorem", "exists_subset_or_subset_of_two_mul_lt_card", ["finset"]], ["add", "theorem", "fiber_card_ne_zero_iff_mem_image", ["finset"]], ["add", "theorem", "filter_card_add_filter_neg_card_eq_card", ["finset"]], ["add", "theorem", "filter_card_eq", ["finset"]], ["add", "theorem", "inj_on_of_card_image_eq", ["finset"]], ["add", "theorem", "inj_on_of_surj_on_of_card_le", ["finset"]], ["add", "theorem", "le_card_of_inj_on_range", ["finset"]], ["add", "theorem", "length_to_list", ["finset"]], ["add", "theorem", "lt_wf", ["finset"]], ["add", "theorem", "one_lt_card", ["finset"]], ["add", "theorem", "one_lt_card_iff", ["finset"]], ["add", "theorem", "pred_card_le_card_erase", ["finset"]], ["add", "def", "strong_downward_induction", ["finset"]], ["add", "theorem", "strong_downward_induction_eq", ["finset"]], ["add", "def", "strong_downward_induction_on", ["finset"]], ["add", "theorem", "strong_downward_induction_on_eq", ["finset"]], ["add", "def", "strong_induction", ["finset"]], ["add", "theorem", "strong_induction_eq", ["finset"]], ["add", "def", "strong_induction_on", ["finset"]], ["add", "theorem", "strong_induction_on_eq", ["finset"]], ["add", "theorem", "surj_on_of_inj_on_of_card_le", ["finset"]], ["add", "theorem", "card_to_finset", ["list"]], ["add", "theorem", "to_finset_card_le", ["list"]], ["add", "theorem", "to_finset_card_of_nodup", ["list"]], ["add", "theorem", "card_to_finset", ["multiset"]], ["add", "theorem", "to_finset_card_le", ["multiset"]], ["add", "theorem", "to_finset_card_of_nodup", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/finset/fin.lean", "changes": [["add", "def", "attach_fin", ["finset"]], ["add", "theorem", "card_attach_fin", ["finset"]], ["add", "theorem", "coe_fin_range", ["finset"]], ["add", "def", "fin_range", ["finset"]], ["add", "theorem", "fin_range_card", ["finset"]], ["add", "theorem", "mem_attach_fin", ["finset"]], ["add", "theorem", "mem_fin_range", ["finset"]]]}, {"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/finset/option.lean", "newPath": "src/data/finset/option.lean", "changes": []}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}]}, {"timestamp": 1639850974, "sha": "fa46ef10", "message": "feat(linear_algebra/affine_space/combination): vsub distributivity lemmas (#10786)\nAdd lemmas about weighted sums of `-ᵥ` expressions in terms of\n`weighted_vsub_of_point`, `weighted_vsub` and `affine_combination`,\nwith special cases where the points on one side of the subtractions\nare constant, and lemmas about those three functions for constant\npoints used to prove those special cases.\nThese were suggested by one of the lemmas in #10632; the lemma\n`affine_basis.vsub_eq_coord_smul_sum` is a very specific case, but\nshowed up that these distributivity lemmas were missing (and should\nfollow immediately from\n`sum_smul_const_vsub_eq_vsub_affine_combination` in this PR).", "changes": [{"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "affine_combination_apply_const", ["finset"]], ["add", "theorem", "sum_smul_const_vsub_eq_neg_weighted_vsub", ["finset"]], ["add", "theorem", "sum_smul_const_vsub_eq_sub_weighted_vsub_of_point", ["finset"]], ["add", "theorem", "sum_smul_const_vsub_eq_vsub_affine_combination", ["finset"]], ["add", "theorem", "sum_smul_vsub_const_eq_affine_combination_vsub", ["finset"]], ["add", "theorem", "sum_smul_vsub_const_eq_weighted_vsub", ["finset"]], ["add", "theorem", "sum_smul_vsub_const_eq_weighted_vsub_of_point_sub", ["finset"]], ["add", "theorem", "sum_smul_vsub_eq_affine_combination_vsub", ["finset"]], ["add", "theorem", "sum_smul_vsub_eq_weighted_vsub_of_point_sub", ["finset"]], ["add", "theorem", "sum_smul_vsub_eq_weighted_vsub_sub", ["finset"]], ["add", "theorem", "weighted_vsub_apply_const", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_apply_const", ["finset"]]]}]}, {"timestamp": 1639850972, "sha": "ecec43a2", "message": "feat(algebraic_geometry/open_immersion): Easy results about open immersions. (#10776)", "changes": [{"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "theorem", "LocallyRingedSpace_to_LocallyRingedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "SheafedSpace_to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_LocallyRingedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_LocallyRingedSpace_hom", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_LocallyRingedSpace_hom_val", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_LocallyRingedSpace_to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_SheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "to_SheafedSpace_hom", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_SheafedSpace_hom_base", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_SheafedSpace_hom_c", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_SheafedSpace_to_PresheafedSpace", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "of_stalk_iso", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]]]}]}, {"timestamp": 1639850971, "sha": "6e59fbe3", "message": "feat(field_theory/splitting_field): generalize some results from field to domain (#10726)\nThis PR does a few things generalizing / golfing facts related to polynomials and splitting fields.\n- Generalize some results in `data.polynomial.field_division` to division rings\n- generalize `C_leading_coeff_mul_prod_multiset_X_sub_C` from a field to a domain\n- same for `prod_multiset_X_sub_C_of_monic_of_roots_card_eq`\n- add a supporting useful lemma `roots_map_of_injective_card_eq_total_degree` saying that if we already have a full (multi)set of roots over a domain, passing along an injection gives the set of roots of the mapped polynomial\nInspired by needs of flt-regular.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_map", ["multiset"]], ["add", "theorem", "count_map_eq_count'", ["multiset"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]], ["mod", "theorem", "roots_C_mul", ["polynomial"]], ["mod", "theorem", "roots_normalize", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "count_map_roots", ["polynomial"]], ["add", "theorem", "le_root_multiplicity_map", ["polynomial"]], ["add", "theorem", "roots_map_of_injective_card_eq_total_degree", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "C_leading_coeff_mul_prod_multiset_X_sub_C", ["polynomial"]], ["add", "theorem", "C_leading_coeff_mul_prod_multiset_X_sub_C_of_field", ["polynomial"]], ["mod", "theorem", "prod_multiset_X_sub_C_of_monic_of_roots_card_eq", ["polynomial"]], ["add", "theorem", "prod_multiset_X_sub_C_of_monic_of_roots_card_eq_of_field", ["polynomial"]]]}]}, {"timestamp": 1639850970, "sha": "fec084c3", "message": "feat(order/cover): The covering relation (#10676)\nThis defines `a ⋖ b` to mean that `a < b` and there is no element in between. It is generally useful, but in particular in the context of polytopes and successor orders.", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "bot_covers_iff", []], ["add", "theorem", "bot_covers_top", []], ["add", "theorem", "covers_top_iff", []], ["mod", "theorem", "eq_bot_or_eq_of_le_atom", []], ["mod", "theorem", "eq_top_or_eq_of_coatom_le", []], ["mod", "theorem", "Iic", ["is_atom"]], ["mod", "theorem", "of_is_atom_coe_Iic", ["is_atom"]], ["mod", "theorem", "Ici", ["is_coatom"]], ["mod", "theorem", "of_is_coatom_coe_Ici", ["is_coatom"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "eq_of_ge_of_not_gt", []], ["add", "theorem", "eq_of_le_of_not_lt", []]]}, {"oldPath": null, "newPath": "src/order/cover.lean", "changes": [["add", "theorem", "Icc_eq", ["covers"]], ["add", "theorem", "Ico_eq", ["covers"]], ["add", "theorem", "Ioc_eq", ["covers"]], ["add", "theorem", "Ioo_eq", ["covers"]], ["add", "theorem", "le", ["covers"]], ["add", "theorem", "lt", ["covers"]], ["add", "theorem", "ne'", ["covers"]], ["add", "def", "covers", []], ["add", "theorem", "not_covers", []], ["add", "theorem", "not_covers_iff", []], ["add", "theorem", "to_dual_covers_to_dual_iff", []]]}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": [["add", "theorem", "pred_eq", ["covers"]], ["add", "theorem", "succ_eq", ["covers"]], ["add", "theorem", "covers_iff_pred_eq", []], ["add", "theorem", "covers_iff_succ_eq", []], ["add", "theorem", "pred_covers", ["pred_order"]], ["add", "theorem", "pred_covers_of_nonempty_Iio", ["pred_order"]], ["add", "theorem", "pred_succ", []], ["add", "theorem", "pred_succ_of_nonempty_Ioi", []], ["add", "theorem", "covers_succ", ["succ_order"]], ["add", "theorem", "covers_succ_of_nonempty_Ioi", ["succ_order"]], ["add", "theorem", "succ_pred", []], ["add", "theorem", "succ_pred_of_nonempty_Iio", []]]}]}, {"timestamp": 1639844143, "sha": "011203d9", "message": "feat(algebra/group/inj_surj): _pow definitions for surjective too (#10832)\nWe already have these three variants for the injective counterparts, added in #10152.", "changes": [{"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}]}, {"timestamp": 1639844142, "sha": "59152548", "message": "feat(data/matrix/rank): rank of a matrix (#10826)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/data/matrix/rank.lean", "changes": [["add", "theorem", "rank_eq_finrank_range_to_lin", ["matrix"]], ["add", "theorem", "rank_le_card_height", ["matrix"]], ["add", "theorem", "rank_le_card_width", ["matrix"]], ["add", "theorem", "rank_le_height", ["matrix"]], ["add", "theorem", "rank_le_width", ["matrix"]], ["add", "theorem", "rank_mul_le", ["matrix"]], ["add", "theorem", "rank_of_is_unit", ["matrix"]], ["add", "theorem", "rank_one", ["matrix"]], ["add", "theorem", "rank_unit", ["matrix"]], ["add", "theorem", "rank_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}]}, {"timestamp": 1639844141, "sha": "915e2b5b", "message": "feat(linear_algebra/orientation): add orientation.map (#10815)\nThis also adds `alternating_map.dom_lcongr` following the naming established by `finsupp.dom_lcongr`.", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["mod", "theorem", "comp_linear_equiv_eq_zero_iff", ["alternating_map"]], ["add", "def", "dom_lcongr", ["alternating_map"]], ["add", "theorem", "dom_lcongr_refl", ["alternating_map"]], ["add", "theorem", "dom_lcongr_symm", ["alternating_map"]], ["add", "theorem", "dom_lcongr_trans", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "def", "map", ["orientation"]], ["add", "theorem", "map_apply", ["orientation"]], ["add", "theorem", "map_refl", ["orientation"]], ["add", "theorem", "map_symm", ["orientation"]]]}]}, {"timestamp": 1639844140, "sha": "e70faf34", "message": "feat(ring_theory/prinicipal_ideal_domain): Bézout's lemma for PIDs (#10810)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "exists_gcd_eq_mul_add_mul", []], ["add", "theorem", "gcd_dvd_iff_exists", []]]}]}, {"timestamp": 1639844139, "sha": "47c676ed", "message": "feat(linear_algebra/affine_space/affine_subspace): affine_subspace.comap (#10795)\nThis copies a handful of lemmas from `group_theory/subgroup/basic.lean` to get things started.", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "coe_comap", ["affine_subspace"]], ["add", "theorem", "coe_injective", ["affine_subspace"]], ["add", "theorem", "coe_map", ["affine_subspace"]], ["add", "def", "comap", ["affine_subspace"]], ["add", "theorem", "comap_comap", ["affine_subspace"]], ["add", "theorem", "comap_id", ["affine_subspace"]], ["add", "theorem", "comap_inf", ["affine_subspace"]], ["add", "theorem", "comap_mono", ["affine_subspace"]], ["add", "theorem", "comap_supr", ["affine_subspace"]], ["add", "theorem", "comap_top", ["affine_subspace"]], ["del", "theorem", "ext", ["affine_subspace"]], ["add", "theorem", "gc_map_comap", ["affine_subspace"]], ["add", "theorem", "le_comap_map", ["affine_subspace"]], ["del", "theorem", "map_coe", ["affine_subspace"]], ["add", "theorem", "map_comap_le", ["affine_subspace"]], ["add", "theorem", "map_id", ["affine_subspace"]], ["add", "theorem", "map_le_iff_le_comap", ["affine_subspace"]], ["add", "theorem", "map_map", ["affine_subspace"]], ["add", "theorem", "map_sup", ["affine_subspace"]], ["add", "theorem", "map_supr", ["affine_subspace"]], ["add", "theorem", "mem_comap", ["affine_subspace"]], ["add", "theorem", "mem_map", ["affine_subspace"]]]}]}, {"timestamp": 1639844138, "sha": "00454f23", "message": "feat(topology/algebra/mul_action): add an instance in the presence of `is_central_scalar` (#10787)", "changes": [{"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}]}, {"timestamp": 1639844138, "sha": "56033982", "message": "feat(ring_theory/local_properties): Being finite / of finite type is local. (#10775)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "span_eq_top_iff_finite", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "mem_of_span_eq_top_of_smul_pow_mem", ["submodule"]]]}, {"oldPath": "src/ring_theory/local_properties.lean", "newPath": "src/ring_theory/local_properties.lean", "changes": [["add", "theorem", "finite_of_localization_span", []], ["add", "theorem", "finite_type_of_localization_span", []], ["add", "theorem", "lift_mem_adjoin_finset_integer_multiple", ["is_localization"]], ["add", "theorem", "smul_mem_finset_integer_multiple_span", ["is_localization"]], ["add", "theorem", "localization_away_map_finite", []], ["add", "theorem", "localization_away_map_finite_type", []], ["add", "theorem", "localization_finite", []], ["add", "theorem", "localization_finite_type", []], ["add", "theorem", "multiple_mem_adjoin_of_mem_localization_adjoin", []], ["add", "theorem", "multiple_mem_span_of_mem_localization_span", []], ["add", "theorem", "localization_away_of_localization_preserves", ["ring_hom"]], ["add", "def", "localization_preserves", ["ring_hom"]], ["add", "def", "of_localization_finite_span", ["ring_hom"]], ["add", "def", "of_localization_span", ["ring_hom"]], ["add", "theorem", "of_localization_span_iff_finite", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "map", ["is_localization", "away"]], ["add", "def", "away_lift", ["localization"]], ["add", "def", "away_map", ["localization"]]]}]}, {"timestamp": 1639844136, "sha": "c10a8728", "message": "feat(order): define a `rel_hom_class` for types of relation-preserving maps (#10755)\nUse the design of #9888 to define a class `rel_hom_class F r s` for types of maps such that all `f : F` satisfy `r a b → s (f a) (f b)`. Requested by @YaelDillies.\n`order_hom_class F α β` is defined as an abbreviation for `rel_hom_class F (≤) (≤)`.", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/hom/basic.lean", "newPath": "src/order/hom/basic.lean", "changes": [["mod", "theorem", "ext", ["order_hom"]], ["add", "def", "order_hom_class", []]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["rel_embedding"]], ["mod", "theorem", "ext", ["rel_embedding"]], ["mod", "theorem", "ext_iff", ["rel_embedding"]], ["mod", "theorem", "coe_fn_injective", ["rel_hom"]], ["del", "theorem", "map_inf", ["rel_hom"]], ["del", "theorem", "map_rel", ["rel_hom"]], ["del", "theorem", "map_sup", ["rel_hom"]], ["add", "theorem", "map_inf", ["rel_hom_class"]], ["add", "theorem", "map_sup", ["rel_hom_class"]], ["mod", "theorem", "coe_fn_injective", ["rel_iso"]], ["mod", "theorem", "ext", ["rel_iso"]], ["mod", "theorem", "ext_iff", ["rel_iso"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1639837439, "sha": "af682d35", "message": "feat(algebraic_geometry): A scheme is reduced iff its stalks are reduced. (#10879)", "changes": [{"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": [["add", "theorem", "is_reduced_of_stalk_is_reduced", ["algebraic_geometry"]]]}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["add", "theorem", "mk", ["is_nilpotent"]]]}]}, {"timestamp": 1639837438, "sha": "65118e5f", "message": "feat(analysis/calculus/deriv): add `has_deriv_at.tendsto_punctured_nhds` (#10877)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "tendsto_punctured_nhds", ["has_deriv_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": []}]}, {"timestamp": 1639837437, "sha": "01088844", "message": "feat(ring_theory/integral_closure): A subalgebra is contained in the integral closure iff it is integral (#10874)\nA subalgebra is contained in the integral closure iff it is integral.", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "le_integral_closure_iff_is_integral", []]]}]}, {"timestamp": 1639837436, "sha": "7de517b2", "message": "feat(algebra/algebra/subalgebra): Elements of supremum (#10872)\nAdds a few lemmas about elements of a supremum of subalgebras (essentially copied from the analogous lemmas in `group_theory/subgroup.basic`).", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "mem_sup_left", ["algebra"]], ["add", "theorem", "mem_sup_right", ["algebra"]], ["add", "theorem", "mul_mem_sup", ["algebra"]]]}]}, {"timestamp": 1639837435, "sha": "df113020", "message": "feat(algebra/algebra/subalgebra): Lemmas about `alg_hom.range` (#10871)\nThis PR adds a few lemmas about `alg_hom.range`.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "range_comp", ["alg_hom"]], ["add", "theorem", "range_comp_le_range", ["alg_hom"]], ["add", "theorem", "range_id", ["algebra"]]]}]}, {"timestamp": 1639837434, "sha": "ac10136f", "message": "feat(algebraic_geometry): The underlying topological space of a Scheme is T0 (#10869)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/properties.lean", "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "not_xor", []], ["add", "theorem", "xor_iff_not_iff", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "def", "indistinguishable", []], ["add", "theorem", "indistinguishable_iff_closed", []], ["add", "theorem", "indistinguishable_iff_closure", []], ["add", "theorem", "subtype_indistinguishable_iff", []], ["add", "theorem", "t0_space_def", []], ["add", "theorem", "t0_space_iff_distinguishable", []], ["add", "theorem", "t0_space_iff_or_not_mem_closure", []], ["add", "theorem", "t0_space_of_injective_of_continuous", []]]}]}, {"timestamp": 1639837433, "sha": "cb0a6f70", "message": "feat(data/int): various lemmas (#10862)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "abs_sign_of_nonzero", ["int"]], ["add", "theorem", "is_unit_iff_abs_eq", ["int"]], ["add", "theorem", "of_nat_is_unit", ["int"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "theorem", "four_dvd_add_or_sub_of_odd", ["int"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "exists_prime_and_dvd", ["int"]]]}]}, {"timestamp": 1639837432, "sha": "04e2f5f7", "message": "feat(algebra/group/basic): add a few lemmas (#10856)\n* move `inv_eq_one`, `one_eq_inv`, and `inv_ne_one` up;\n* move `div_one'` below `div_eq_one` to golf the proof;\n* add `div_eq_inv_iff`;\n* golf 2 proofs.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_eq_inv_self", []], ["mod", "theorem", "inv_eq_one", []], ["mod", "theorem", "inv_ne_one", []], ["mod", "theorem", "one_eq_inv", []]]}]}, {"timestamp": 1639837431, "sha": "5859ec0f", "message": "feat(analysis/normed_space/lattice_ordered_group): prove `order_closed_topology` for `normed_lattice_add_comm_group` (#10838)", "changes": [{"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": [["add", "theorem", "continuous_neg'", []], ["add", "theorem", "continuous_pos", []], ["add", "theorem", "is_closed_le_of_is_closed_nonneg", []], ["add", "theorem", "is_closed_nonneg", []], ["add", "theorem", "lipschitz_with_pos", []], ["add", "theorem", "lipschitz_with_sup_right", []], ["add", "theorem", "norm_inf_sub_inf_le_norm", []], ["add", "theorem", "norm_sup_sub_sup_le_norm", []]]}]}, {"timestamp": 1639831792, "sha": "6353d6b2", "message": "chore(*): more assorted proof simplifications (#10863)\nA few more random small golfs found by linters", "changes": [{"oldPath": "src/analysis/normed_space/spectrum.lean", "newPath": "src/analysis/normed_space/spectrum.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}]}, {"timestamp": 1639825315, "sha": "0e995a37", "message": "refactor(*): kill a few uses of finish (#10860)", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "convex_empty", []]]}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/data/set/constructions.lean", "newPath": "src/data/set/constructions.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}]}, {"timestamp": 1639822937, "sha": "ec2f3509", "message": "feat(field_theory/intermediate_field): Range of `intermediate_field.val` (#10873)\nThe range of the algebra homomorphism `S.val` equals `S.to_subalgebra`.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "range_val", ["intermediate_field"]]]}]}, {"timestamp": 1639822936, "sha": "718ea932", "message": "feat(category_theory): Glue data (#10436)", "changes": [{"oldPath": null, "newPath": "src/category_theory/glue_data.lean", "changes": [["add", "def", "diagram", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_L", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_R", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_fst", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_fst_from", ["category_theory", "glue_data"]], ["add", "def", "diagram_iso", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_iso_app_left", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_iso_app_right", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_iso_hom_app_left", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_iso_hom_app_right", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_iso_inv_app_left", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_iso_inv_app_right", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_left", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_right", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_snd", ["category_theory", "glue_data"]], ["add", "theorem", "diagram_snd_from", ["category_theory", "glue_data"]], ["add", "theorem", "glue_condition", ["category_theory", "glue_data"]], ["add", "def", "glued", ["category_theory", "glue_data"]], ["add", "def", "map_glue_data", ["category_theory", "glue_data"]], ["add", "def", "sigma_opens", ["category_theory", "glue_data"]], ["add", "theorem", "t'_comp_eq_pullback_symmetry", ["category_theory", "glue_data"]], ["add", "theorem", "t'_iij", ["category_theory", "glue_data"]], ["add", "theorem", "t'_iji", ["category_theory", "glue_data"]], ["add", "theorem", "t'_inv", ["category_theory", "glue_data"]], ["add", "theorem", "t'_jii", ["category_theory", "glue_data"]], ["add", "theorem", "t_inv", ["category_theory", "glue_data"]], ["add", "def", "ι", ["category_theory", "glue_data"]], ["add", "def", "π", ["category_theory", "glue_data"]], ["add", "structure", "glue_data", ["category_theory"]]]}]}, {"timestamp": 1639808777, "sha": "a252427a", "message": "chore(algebra/algebra/basic): fix instances names to make doc links work (#10834)\nThe blank lines avoid sentences being pulled into the bulleted list above them.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_rat_rat", []], ["add", "theorem", "algebra_rat_subsingleton", []], ["del", "theorem", "algebra_map_rat_rat", ["rat"]], ["del", "theorem", "algebra_rat_subsingleton", ["rat"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}]}, {"timestamp": 1639782339, "sha": "2043748c", "message": "feat(data/finset/basic): add to_list_insert and to_list_cons (#10840)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_list_cons", ["finset"]], ["add", "theorem", "to_list_insert", ["finset"]]]}]}, {"timestamp": 1639776306, "sha": "fc09b17f", "message": "feat(measure_theory/integral/bochner): prove `set_integral_eq_subtype` (#10858)\nRelate integral w.r.t. `μ.restrict s` and w.r.t. `comap (coe : s → α) μ`.", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "set_integral_eq_subtype", ["measure_theory"]]]}]}, {"timestamp": 1639769019, "sha": "86493f12", "message": "feat(data/nat): decidable exists le instance (#10857)\nAdds the `le` instance for a corresponding `lt` instance above.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1639769018, "sha": "70f4ba07", "message": "feat(algebra/group/hom): generalize `semiconj_by.map` and `commute.map` (#10854)\nThis generalizes the results in 2 ways: from `monoid_hom` to `mul_hom` and from `mul_hom` to `mul_hom_class`. For use in #10783.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}]}, {"timestamp": 1639769017, "sha": "0b5f0a2d", "message": "feat(data/finset/basic): add ite_subset_union, inter_subset_ite for finset (#10586)\nJust a couple of lemmas to simplify expressions involving ite and union / inter on finsets, note that this is not related to `set.ite`.\nFrom flt-regular.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "inter_subset_ite", ["finset"]], ["add", "theorem", "ite_subset_union", ["finset"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_le_ite", []], ["add", "theorem", "ite_le_sup", []]]}]}, {"timestamp": 1639761764, "sha": "e5a844e1", "message": "feat(data/finsupp/basic): add two versions of `finsupp.mul_prod_erase` (#10708)\nAdding a counterpart for `finsupp` of `finset.mul_prod_erase`", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "mul_prod_erase'", ["finsupp"]], ["add", "theorem", "mul_prod_erase", ["finsupp"]]]}]}, {"timestamp": 1639754479, "sha": "c9fe6d1a", "message": "feat(algebra/algebra): instantiate `ring_hom_class` for `alg_hom` (#10853)\nThis PR provides a `ring_hom_class` instance for `alg_hom`, to be used in #10783. I'm not quite finished with my design of morphism classes for linear maps, but I expect this instance will stick around anyway: to avoid a dangerous instance `alg_hom_class F R A B → ring_hom_class F A B` (where the base ring `R` can't be inferred), `alg_hom_class` will probably have to be unbundled and take a `ring_hom_class` as a parameter.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "coe_fn_inj", ["alg_hom"]], ["mod", "theorem", "coe_fn_injective", ["alg_hom"]], ["mod", "theorem", "coe_to_add_monoid_hom", ["alg_hom"]], ["mod", "theorem", "coe_to_monoid_hom", ["alg_hom"]], ["mod", "theorem", "ext", ["alg_hom"]], ["mod", "theorem", "ext_iff", ["alg_hom"]], ["mod", "theorem", "map_add", ["alg_hom"]], ["mod", "theorem", "map_bit0", ["alg_hom"]], ["mod", "theorem", "map_bit1", ["alg_hom"]], ["mod", "theorem", "map_mul", ["alg_hom"]], ["mod", "theorem", "map_neg", ["alg_hom"]], ["mod", "theorem", "map_one", ["alg_hom"]], ["mod", "theorem", "map_pow", ["alg_hom"]], ["mod", "theorem", "map_sub", ["alg_hom"]], ["mod", "theorem", "map_zero", ["alg_hom"]]]}]}, {"timestamp": 1639754478, "sha": "ba24b38b", "message": "feat(ring_theory/noetherian): fg_pi (#10845)", "changes": [{"oldPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "newPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "theorem", "pi_empty", ["submodule"]], ["add", "theorem", "pi_mono", ["submodule"]], ["add", "theorem", "pi_top", ["submodule"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_pi", ["submodule"]]]}]}, {"timestamp": 1639747617, "sha": "5a598003", "message": "feat(data/set/function): Cancelling composition on a set (#10803)\nA few stupid lemmas", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "cancel_left", ["set", "eq_on"]], ["add", "theorem", "cancel_right", ["set", "eq_on"]], ["add", "theorem", "comp_left", ["set", "eq_on"]], ["add", "theorem", "comp_right", ["set", "eq_on"]], ["add", "theorem", "eq_on_comp_right_iff", ["set"]], ["add", "theorem", "image_eq_iff_surj_on_maps_to", ["set"]], ["add", "theorem", "cancel_left", ["set", "inj_on"]], ["add", "theorem", "cancel_right", ["set", "surj_on"]]]}]}, {"timestamp": 1639744291, "sha": "6838233f", "message": "feat(combinatorics/configuration): New file (#10773)\nThis PR defines abstract configurations of points and lines, and provides some basic definitions. Actual results are in the followup PR.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/configuration.lean", "changes": [["add", "def", "dual", ["configuration"]], ["add", "theorem", "exists_unique_line", ["configuration", "has_lines"]], ["add", "theorem", "exists_unique_point", ["configuration", "has_points"]]]}]}, {"timestamp": 1639744290, "sha": "8743573e", "message": "feat(data/nat/count): The count function on naturals (#9457)\nDefines `nat.count` a generic counting function on `ℕ`, computing how many numbers under `k` satisfy a given predicate\".\nCo-authored by:\nYaël Dillies, yael.dillies@gmail.com\nVladimir Goryachev, gor050299@gmail.com\nKyle Miller, kmill31415@gmail.com\nScott Morrison, scott@tqft.net\nEric Rodriguez, ericrboidi@gmail.com", "changes": [{"oldPath": null, "newPath": "src/data/nat/count.lean", "changes": [["add", "def", "count", ["nat"]], ["add", "theorem", "count_add'", ["nat"]], ["add", "theorem", "count_add", ["nat"]], ["add", "theorem", "count_eq_card_filter_range", ["nat"]], ["add", "theorem", "count_eq_card_fintype", ["nat"]], ["add", "theorem", "count_le_cardinal", ["nat"]], ["add", "theorem", "count_mono_left", ["nat"]], ["add", "theorem", "count_monotone", ["nat"]], ["add", "theorem", "count_one", ["nat"]], ["add", "def", "fintype", ["nat", "count_set"]], ["add", "theorem", "count_succ'", ["nat"]], ["add", "theorem", "count_succ", ["nat"]], ["add", "theorem", "count_succ_eq_count_iff", ["nat"]], ["add", "theorem", "count_succ_eq_succ_count_iff", ["nat"]], ["add", "theorem", "count_zero", ["nat"]], ["add", "theorem", "lt_of_count_lt_count", ["nat"]]]}]}, {"timestamp": 1639738141, "sha": "081cb8ab", "message": "chore(algebra/associated): split off dependencies of `big_operators` (#10848)\nThis prepares for the replacement of `nat.prime` with `_root_.prime` by reducing the amount of dependencies needed to define `_root_.prime`.\nNote that there wouldn't be an import loop without this change, just that `data/nat/prime.lean` would have a bigger amount of imports.\nZulip discussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/nat.2Eprime", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "exists_mem_multiset_le_of_prime", ["associates"]], ["del", "theorem", "prod_eq_one_iff", ["associates"]], ["del", "theorem", "prod_le_prod", ["associates"]], ["del", "theorem", "prod_mk", ["associates"]], ["del", "theorem", "rel_associated_iff_map_eq_map", ["associates"]], ["del", "theorem", "exists_associated_mem_of_dvd_prod", []], ["del", "theorem", "prod_ne_zero_of_prime", ["multiset"]], ["del", "theorem", "exists_mem_finset_dvd", ["prime"]], ["del", "theorem", "exists_mem_multiset_dvd", ["prime"]], ["del", "theorem", "exists_mem_multiset_map_dvd", ["prime"]]]}, {"oldPath": null, "newPath": "src/algebra/big_operators/associated.lean", "changes": [["add", "theorem", "exists_mem_multiset_le_of_prime", ["associates"]], ["add", "theorem", "prod_eq_one_iff", ["associates"]], ["add", "theorem", "prod_le_prod", ["associates"]], ["add", "theorem", "prod_mk", ["associates"]], ["add", "theorem", "rel_associated_iff_map_eq_map", ["associates"]], ["add", "theorem", "exists_associated_mem_of_dvd_prod", []], ["add", "theorem", "prod_ne_zero_of_prime", ["multiset"]], ["add", "theorem", "exists_mem_finset_dvd", ["prime"]], ["add", "theorem", "exists_mem_multiset_dvd", ["prime"]], ["add", "theorem", "exists_mem_multiset_map_dvd", ["prime"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1639738140, "sha": "862a68c9", "message": "feat(algebra/big_operators/basic): add finset.prod_to_list (#10842)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_to_list", ["finset"]]]}]}, {"timestamp": 1639734147, "sha": "5558fd9f", "message": "feat(topology/subset_properties): open/closed sets are locally compact spaces (#10844)\n* add `inducing.image_mem_nhds_within`;\n* move `inducing.is_compact_iff` up, use it to prove `embedding.is_compact_iff_is_compact_image`;\n* prove `closed_embedding.is_compact_preimage`, use it to prove `closed_embedding.tendsto_cocompact`;\n* prove `closed_embedding.locally_compact_space`, `open_embedding.locally_compact_space`;\n* specialize to `is_closed.locally_compact_space`, `is_open.locally_compact_space`;\n* rename `locally_finite.countable_of_sigma_compact` to `locally_finite.countable_univ`, provide `locally_finite.encodable`.", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "image_mem_nhds_within", ["inducing"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_compact_preimage", ["closed_embedding"]], ["del", "theorem", "countable_of_sigma_compact", ["locally_finite"]]]}]}, {"timestamp": 1639707224, "sha": "b100af69", "message": "feat(combinatorics/simple_graph/basic): Incidence set lemmas (#10839)\nSome more `simple_graph.incidence_set` API.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "adj_iff_exists_edge_coe", ["simple_graph"]], ["add", "theorem", "adj_of_mem_incidence_set", ["simple_graph"]], ["mod", "theorem", "adj_symm", ["simple_graph"]], ["add", "theorem", "edge_mem_incidence_set_iff", ["simple_graph"]], ["add", "theorem", "incidence_set_inter_incidence_set", ["simple_graph"]], ["add", "theorem", "incidence_set_inter_incidence_set_subset", ["simple_graph"]], ["mod", "theorem", "incidence_set_subset", ["simple_graph"]], ["mod", "theorem", "mem_edge_set", ["simple_graph"]], ["add", "theorem", "mk_mem_incidence_set_iff", ["simple_graph"]], ["add", "theorem", "mk_mem_incidence_set_left_iff", ["simple_graph"]], ["add", "theorem", "mk_mem_incidence_set_right_iff", ["simple_graph"]], ["mod", "theorem", "ne_of_adj", ["simple_graph"]]]}]}, {"timestamp": 1639690593, "sha": "9f9015c6", "message": "refactor(category_theory/sites/*): Redefine the category of sheaves. (#10678)\nThis refactor redefines sheaves and morphisms of sheaves using bespoke structures.\nThis is an attempt to make automation more useful when dealing with categories of sheaves.\nSee the associated [zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Redefining.20Sheaves/near/263308542)", "changes": [{"oldPath": "src/category_theory/sites/adjunction.lean", "newPath": "src/category_theory/sites/adjunction.lean", "changes": [["del", "theorem", "adjunction_counit_app", ["category_theory", "Sheaf"]], ["del", "theorem", "adjunction_hom_equiv_apply", ["category_theory", "Sheaf"]], ["del", "theorem", "adjunction_hom_equiv_symm_apply", ["category_theory", "Sheaf"]], ["del", "theorem", "adjunction_to_types_counit_app", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_to_types_counit_app_val", ["category_theory", "Sheaf"]], ["del", "theorem", "adjunction_to_types_hom_equiv_apply", ["category_theory", "Sheaf"]], ["del", "theorem", "adjunction_to_types_hom_equiv_symm_apply", ["category_theory", "Sheaf"]], ["del", "theorem", "adjunction_to_types_unit_app", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_to_types_unit_app_val", ["category_theory", "Sheaf"]], ["del", "theorem", "adjunction_unit_app", ["category_theory", "Sheaf"]]]}, {"oldPath": "src/category_theory/sites/cover_lifting.lean", "newPath": "src/category_theory/sites/cover_lifting.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/category_theory/sites/dense_subsite.lean", "newPath": "src/category_theory/sites/dense_subsite.lean", "changes": []}, {"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["del", "theorem", "comp_app", ["category_theory", "Sheaf"]], ["add", "structure", "hom", ["category_theory", "Sheaf"]], ["del", "theorem", "id_app", ["category_theory", "Sheaf"]], ["add", "structure", "Sheaf", ["category_theory"]], ["del", "def", "Sheaf", ["category_theory"]], ["del", "theorem", "Sheaf_to_presheaf_obj", ["category_theory"]], ["mod", "def", "sheaf_over", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["del", "theorem", "comp_app", ["category_theory", "SheafOfTypes"]], ["add", "structure", "hom", ["category_theory", "SheafOfTypes"]], ["del", "theorem", "id_app", ["category_theory", "SheafOfTypes"]], ["add", "structure", "SheafOfTypes", ["category_theory"]], ["del", "def", "SheafOfTypes", ["category_theory"]], ["del", "theorem", "SheafOfTypes_to_presheaf_obj", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": [["del", "theorem", "sheafification_adjunction_unit_app", ["category_theory"]], ["del", "theorem", "sheafification_iso_hom", ["category_theory"]], ["del", "theorem", "sheafification_iso_inv", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/types.lean", "newPath": "src/category_theory/sites/types.lean", "changes": [["mod", "theorem", "yoneda'_comp", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/whiskering.lean", "newPath": "src/category_theory/sites/whiskering.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1639677149, "sha": "601f2ab7", "message": "fix(ring_theory/ideal/basic): remove universe restriction (#10843)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "mem_infi", ["ideal"]], ["mod", "theorem", "mem_supr_of_mem", ["ideal"]]]}]}, {"timestamp": 1639671373, "sha": "905d887f", "message": "chore(field_theory/ratfunc): to_fraction_ring_ring_equiv (#10806)\nRename the underlying `ratfunc.aux_equiv` for discoverability.", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["del", "def", "aux_equiv", ["ratfunc"]], ["del", "theorem", "aux_equiv_eq", ["ratfunc"]], ["add", "def", "to_fraction_ring_ring_equiv", ["ratfunc"]], ["add", "theorem", "to_fraction_ring_ring_equiv_symm_eq", ["ratfunc"]]]}]}, {"timestamp": 1639652300, "sha": "eeef771d", "message": "chore(field_theory/ratfunc): has_scalar in terms of localization (#10828)\nNow that `localization.has_scalar` is general enough, fix a TODO", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "theorem", "of_fraction_ring_smul", ["ratfunc"]], ["add", "theorem", "to_fraction_ring_smul", ["ratfunc"]]]}]}, {"timestamp": 1639652299, "sha": "542471fd", "message": "feat(data/set/function): Congruence lemmas for `monotone_on` and friends (#10817)\nCongruence lemmas for `monotone_on`, `antitone_on`, `strict_mono_on`, `strict_anti_on` using `set.eq_on`.\n`data.set.function` imports `order.monotone` so we must put them here.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "congr", ["antitone_on"]], ["add", "theorem", "congr", ["monotone_on"]], ["add", "theorem", "congr_antitone_on", ["set", "eq_on"]], ["add", "theorem", "congr_monotone_on", ["set", "eq_on"]], ["add", "theorem", "congr_strict_anti_on", ["set", "eq_on"]], ["add", "theorem", "congr_strict_mono_on", ["set", "eq_on"]], ["add", "theorem", "congr", ["strict_anti_on"]], ["add", "theorem", "congr", ["strict_mono_on"]]]}]}, {"timestamp": 1639652298, "sha": "b5b19a69", "message": "feat(ring_theory/local_property): Being reduced is a local property. (#10734)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "mem_annihilator_span", ["submodule"]], ["add", "theorem", "mem_annihilator_span_singleton", ["submodule"]]]}, {"oldPath": null, "newPath": "src/ring_theory/local_properties.lean", "changes": [["add", "theorem", "eq_zero_of_localization", []], ["add", "theorem", "ideal_eq_zero_of_localization", []], ["add", "theorem", "is_reduced_of_localization_maximal", []], ["add", "theorem", "localization_is_reduced", []], ["add", "def", "localization_preserves", []], ["add", "def", "of_localization_maximal", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "map_eq_zero_iff", ["is_localization"]]]}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["add", "theorem", "map", ["is_nilpotent"]]]}]}, {"timestamp": 1639645674, "sha": "68ced9a9", "message": "chore(analysis/mean_inequalities_pow): nnreal versions of some ennreal inequalities (#10836)\nMake `nnreal` versions of the existing `ennreal` lemmas\n```lean\nlemma add_rpow_le_rpow_add {p : ℝ} (a b : ℝ≥0∞) (hp1 : 1 ≤ p) :\n a ^ p + b ^ p ≤ (a + b) ^ p \n```\nand similar, introduced by @RemyDegenne in #5828. Refactor the proofs of the `ennreal` versions to pass through these.", "changes": [{"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": [["add", "theorem", "add_rpow_le_rpow_add", ["nnreal"]], ["add", "theorem", "rpow_add_le_add_rpow", ["nnreal"]], ["add", "theorem", "rpow_add_rpow_le", ["nnreal"]], ["add", "theorem", "rpow_add_rpow_le_add", ["nnreal"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "le_rpow_one_div_iff", ["nnreal"]], ["add", "theorem", "rpow_le_self_of_le_one", ["nnreal"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "eq_bot_or_bot_lt", []], ["add", "theorem", "eq_top_or_lt_top", []]]}]}, {"timestamp": 1639645673, "sha": "d212f3eb", "message": "feat(measure_theory/measure): new class is_finite_measure_on_compacts (#10827)\nWe have currently four independent type classes guaranteeing that a measure of compact sets is finite: `is_locally_finite_measure`, `is_regular_measure`, `is_haar_measure` and `is_add_haar_measure`. Instead of repeting lemmas for all these classes, we introduce a new typeclass saying that a measure is finite on compact sets.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": [["del", "theorem", "haar_lt_top", ["is_compact"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["del", "theorem", "add_haar_ball_lt_top", ["measure_theory", "measure"]], ["del", "theorem", "add_haar_closed_ball_lt_top", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "measure_lt_top", ["is_compact"]], ["add", "theorem", "measure_ball_lt_top", ["measure_theory"]], ["add", "theorem", "measure_closed_ball_lt_top", ["measure_theory"]], ["mod", "theorem", "measure_lt_top", ["metric", "bounded"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}]}, {"timestamp": 1639643405, "sha": "87e2f24b", "message": "feat(category_theory/adjunction/evaluation): Evaluation has a left and a right adjoint. (#10793)", "changes": [{"oldPath": null, "newPath": "src/category_theory/adjunction/evaluation.lean", "changes": [["add", "def", "evaluation_adjunction_left", ["category_theory"]], ["add", "def", "evaluation_adjunction_right", ["category_theory"]], ["add", "def", "evaluation_left_adjoint", ["category_theory"]], ["add", "def", "evaluation_right_adjoint", ["category_theory"]], ["add", "theorem", "epi_iff_app_epi", ["category_theory", "nat_trans"]], ["add", "theorem", "mono_iff_app_mono", ["category_theory", "nat_trans"]]]}]}, {"timestamp": 1639622023, "sha": "8e4b3b0f", "message": "chore(data/polynomial/field_division): beta-reduce (#10835)", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}]}, {"timestamp": 1639604961, "sha": "5a835b7b", "message": "chore(*): tweaks taken from gh-8889 (#10829)\nThat PR is stale, but contained some trivial changes we should just take.", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "theorem", "coe_pow", ["quotient_group"]], ["mod", "theorem", "coe_zpow", ["quotient_group"]]]}]}, {"timestamp": 1639604960, "sha": "8218a788", "message": "feat(analysis/normed_space/basic): formula for `c • sphere x r` (#10814)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "sphere_nonempty", ["normed_space"]], ["add", "theorem", "smul_sphere'", []], ["add", "theorem", "smul_sphere", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "sphere_zero", ["metric"]]]}]}, {"timestamp": 1639604959, "sha": "b82c0d25", "message": "feat(topology/metric_space/isometry): (pre)image of a (closed) ball or a sphere (#10813)\nAlso specialize for translations in a normed add torsor.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "def", "const_vadd", ["isometric"]], ["add", "def", "const_vsub", ["isometric"]], ["add", "def", "vadd_const", ["isometric"]], ["add", "theorem", "vadd_ball", []], ["add", "theorem", "vadd_closed_ball", []], ["add", "theorem", "vadd_sphere", []]]}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "image_ball", ["isometric"]], ["add", "theorem", "image_closed_ball", ["isometric"]], ["add", "theorem", "image_emetric_ball", ["isometric"]], ["add", "theorem", "image_emetric_closed_ball", ["isometric"]], ["add", "theorem", "image_sphere", ["isometric"]], ["add", "theorem", "preimage_ball", ["isometric"]], ["add", "theorem", "preimage_closed_ball", ["isometric"]], ["add", "theorem", "preimage_emetric_ball", ["isometric"]], ["add", "theorem", "preimage_emetric_closed_ball", ["isometric"]], ["add", "theorem", "preimage_sphere", ["isometric"]], ["mod", "theorem", "diam_image", ["isometry"]], ["mod", "theorem", "diam_range", ["isometry"]], ["add", "theorem", "maps_to_ball", ["isometry"]], ["add", "theorem", "maps_to_closed_ball", ["isometry"]], ["add", "theorem", "maps_to_emetric_ball", ["isometry"]], ["add", "theorem", "maps_to_emetric_closed_ball", ["isometry"]], ["add", "theorem", "maps_to_sphere", ["isometry"]], ["mod", "theorem", "tendsto_nhds_iff", ["isometry"]]]}]}, {"timestamp": 1639604958, "sha": "21c9d3b3", "message": "feat(topology/metric_space/hausdorff_distance): add more topological properties API to thickenings (#10661)\nMore lemmas about thickenings, especially topological properties, still in preparation for the portmanteau theorem on characterizations of weak convergence of Borel probability measures.", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "closure_eq_Inter_cthickening'", ["metric"]], ["mod", "theorem", "closure_eq_Inter_cthickening", ["metric"]], ["add", "theorem", "closure_eq_Inter_thickening'", ["metric"]], ["add", "theorem", "closure_eq_Inter_thickening", ["metric"]], ["mod", "theorem", "closure_subset_cthickening", ["metric"]], ["add", "theorem", "closure_subset_thickening", ["metric"]], ["add", "theorem", "closure_thickening_subset_cthickening", ["metric"]], ["add", "theorem", "cthickening_eq_Inter_cthickening'", ["metric"]], ["mod", "theorem", "cthickening_eq_Inter_cthickening", ["metric"]], ["add", "theorem", "cthickening_eq_Inter_thickening'", ["metric"]], ["add", "theorem", "cthickening_eq_Inter_thickening", ["metric"]], ["add", "theorem", "cthickening_of_nonpos", ["metric"]], ["add", "theorem", "frontier_cthickening_subset", ["metric"]], ["add", "theorem", "frontier_thickening_subset", ["metric"]], ["add", "theorem", "self_subset_cthickening", ["metric"]], ["add", "theorem", "self_subset_thickening", ["metric"]], ["add", "theorem", "thickening_subset_interior_cthickening", ["metric"]]]}]}, {"timestamp": 1639598299, "sha": "ef69cac1", "message": "chore(topology/continuous_function/bounded): remove extra typeclass assumption (#10823)\nRemove `[normed_star_monoid β]` from the typeclass assumptions of `[cstar_ring (α →ᵇ β)]` -- it was doing no harm, since it's implied by the assumption `[cstar_ring β]`, but it's unnecessary.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1639598298, "sha": "00c55f5e", "message": "feat(algebra/module/linear_map): interaction of linear maps and pointwise operations on sets (#10821)", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "image_smul_set", ["linear_map"]], ["add", "theorem", "image_smul_setₛₗ", ["linear_map"]], ["add", "theorem", "preimage_smul_set", ["linear_map"]], ["add", "theorem", "preimage_smul_setₛₗ", ["linear_map"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "smul_add_set", []]]}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["add", "theorem", "image_smul_set", ["linear_equiv"]], ["add", "theorem", "image_smul_setₛₗ", ["linear_equiv"]], ["add", "theorem", "preimage_smul_set", ["linear_equiv"]], ["add", "theorem", "preimage_smul_setₛₗ", ["linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "image_smul_set", ["continuous_linear_equiv"]], ["add", "theorem", "image_smul_setₛₗ", ["continuous_linear_equiv"]], ["add", "theorem", "preimage_smul_set", ["continuous_linear_equiv"]], ["add", "theorem", "preimage_smul_setₛₗ", ["continuous_linear_equiv"]], ["add", "theorem", "image_smul_set", ["continuous_linear_map"]], ["add", "theorem", "image_smul_setₛₗ", ["continuous_linear_map"]], ["add", "theorem", "preimage_smul_set", ["continuous_linear_map"]], ["add", "theorem", "preimage_smul_setₛₗ", ["continuous_linear_map"]]]}]}, {"timestamp": 1639598297, "sha": "dfb78f7e", "message": "feat(analysis/special_functions/complex): range of `complex.exp (↑x * I)` (#10816)", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "range_exp_mul_I", ["complex"]]]}]}, {"timestamp": 1639598296, "sha": "81e58c9e", "message": "feat(analysis/mean_inequalities): corollary of Hölder inequality (#10789)\nSeveral versions of the fact that\n```\n(∑ i in s, f i) ^ p ≤ (card s) ^ (p - 1) * ∑ i in s, (f i) ^ p\n```\nfor `1 ≤ p`.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "rpow_sum_le_const_mul_sum_rpow", ["ennreal"]], ["add", "theorem", "rpow_sum_le_const_mul_sum_rpow", ["nnreal"]], ["add", "theorem", "rpow_sum_le_const_mul_sum_rpow", ["real"]], ["add", "theorem", "rpow_sum_le_const_mul_sum_rpow_of_nonneg", ["real"]]]}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": [["add", "theorem", "div_conj_eq_sub_one", ["real", "is_conjugate_exponent"]]]}]}, {"timestamp": 1639598295, "sha": "026e6929", "message": "chore(combinatorics/simple_graph): fix name mixup (#10785)\nFixes the name mixup from #10778 and reorders lemmas to make the difference more clear.", "changes": [{"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["del", "theorem", "bot_adj_iff", ["simple_graph", "subgraph"]], ["mod", "theorem", "bot_verts", ["simple_graph", "subgraph"]], ["add", "theorem", "not_bot_adj", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1639598293, "sha": "204aa7e8", "message": "feat(data/int/basic): more int.sign API (#10781)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_sign", ["int"]], ["add", "theorem", "nat_abs_sign_of_nonzero", ["int"]], ["add", "theorem", "sign_coe_nat_of_nonzero", ["int"]], ["add", "theorem", "sign_neg", ["int"]]]}]}, {"timestamp": 1639598292, "sha": "75b4e5f5", "message": "chore(*): remove edge case assumptions from lemmas (#10774)\nRemove edge case assumptions from lemmas when the result is easy to prove without the assumption.\nWe clean up a few lemmas in the library which assume something like `n \\ne 0`, `0 < n`, or `set.nonempty` but where the result is easy to prove by case splitting on this instead and then simplifying.\nRemoving these unneeded assumptions makes such lemmas easier to apply, and lets us minorly golf a few other proofs along the way.\nThe main external changes are to remove assumptions to around 30 lemmas, and make some arguments explicit when they were no longer inferable, all other lines are just fixing up the proofs, which shortens some proofs in the process.\nI also added a couple of lemmas to help simp in a couple of examples.\nThe code I used to find these is in the branch https://github.com/leanprover-community/mathlib/tree/alexjbest/simple_edge_cases_linter", "changes": [{"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["mod", "theorem", "div_sq_cancel", []]]}, {"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": [["mod", "theorem", "card_primitive_roots", ["complex"]]]}, {"oldPath": "src/data/bitvec/core.lean", "newPath": "src/data/bitvec/core.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "div_dvd_of_ne_zero_dvd", ["int"]]]}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["mod", "theorem", "digits_last", ["nat"]]]}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": [["mod", "theorem", "mod_pow_succ", ["nat"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "card_roots'", ["polynomial"]], ["mod", "theorem", "count_roots", ["polynomial"]], ["add", "theorem", "nth_roots_finset_zero", ["polynomial"]]]}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["mod", "theorem", "degree_eq_one_of_irreducible", ["is_alg_closed"]]]}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": [["mod", "theorem", "denom_div_dvd", ["ratfunc"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "map_expand", ["polynomial"]], ["mod", "theorem", "root_multiplicity_le_one_of_separable", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["mod", "theorem", "direction_monge_plane", ["affine", "simplex"]], ["mod", "theorem", "monge_point_mem_monge_plane", ["affine", "simplex"]]]}, {"oldPath": "src/group_theory/exponent.lean", "newPath": "src/group_theory/exponent.lean", "changes": [["mod", "theorem", "exponent_dvd_of_forall_pow_eq_one", ["monoid"]]]}, {"oldPath": "src/number_theory/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["mod", "theorem", "padic_val_nat_zero", []], ["mod", "theorem", "min_le_padic_val_rat_add", ["padic_val_rat"]]]}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "theorem", "eq_of_xn_modeq", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_le", ["pell"]]]}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "card_primitive_roots", ["is_primitive_root"]], ["mod", "theorem", "disjoint", ["is_primitive_root"]], ["mod", "theorem", "nth_roots_one_eq_bUnion_primitive_roots", ["is_primitive_root"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "count_mul_of_coprime'", ["associates"]], ["mod", "theorem", "count_mul_of_coprime", ["associates"]], ["mod", "theorem", "dvd_count_of_dvd_count_mul", ["associates"]]]}]}, {"timestamp": 1639598290, "sha": "3f55e027", "message": "feat(data/{multiset, finset}/basic): add card_mono (#10771)\nAdd a `@[mono]` lemma for `finset.card`. Also `multiset.card_mono` as an alias of a preexisting lemma.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_mono", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "card_mono", ["multiset"]]]}]}, {"timestamp": 1639598288, "sha": "a0b6bab2", "message": "split(logic/nonempty): Split off `logic.basic` (#10762)\nThis moves the lemmas about `nonempty` to a new file `logic.basic`\nI'm crediting Johannes for 79483182abffcac3a1ddd7098d47a475e75a5ed2", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["del", "theorem", "nonempty_pi", ["classical"]], ["del", "theorem", "exists_true_iff_nonempty", []], ["del", "theorem", "elim_to_inhabited", ["nonempty"]], ["del", "theorem", "exists", ["nonempty"]], ["del", "theorem", "forall", ["nonempty"]], ["del", "theorem", "map", ["nonempty"]], ["del", "theorem", "nonempty_Prop", []], ["del", "theorem", "nonempty_empty", []], ["del", "theorem", "nonempty_plift", []], ["del", "theorem", "nonempty_pprod", []], ["del", "theorem", "nonempty_prod", []], ["del", "theorem", "nonempty_psigma", []], ["del", "theorem", "nonempty_psum", []], ["del", "theorem", "nonempty_sigma", []], ["del", "theorem", "nonempty_subtype", []], ["del", "theorem", "nonempty_sum", []], ["del", "theorem", "nonempty_ulift", []], ["del", "theorem", "not_nonempty_iff_imp_false", []], ["del", "theorem", "subsingleton_of_not_nonempty", []]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/logic/nonempty.lean", "changes": [["add", "theorem", "nonempty_pi", ["classical"]], ["add", "theorem", "exists_true_iff_nonempty", []], ["add", "theorem", "elim_to_inhabited", ["nonempty"]], ["add", "theorem", "exists", ["nonempty"]], ["add", "theorem", "forall", ["nonempty"]], ["add", "theorem", "map", ["nonempty"]], ["add", "theorem", "nonempty_Prop", []], ["add", "theorem", "nonempty_empty", []], ["add", "theorem", "nonempty_plift", []], ["add", "theorem", "nonempty_pprod", []], ["add", "theorem", "nonempty_prod", []], ["add", "theorem", "nonempty_psigma", []], ["add", "theorem", "nonempty_psum", []], ["add", "theorem", "nonempty_sigma", []], ["add", "theorem", "nonempty_subtype", []], ["add", "theorem", "nonempty_sum", []], ["add", "theorem", "nonempty_ulift", []], ["add", "theorem", "not_nonempty_iff_imp_false", []], ["add", "theorem", "subsingleton_of_not_nonempty", []]]}, {"oldPath": "src/tactic/derive_fintype.lean", "newPath": "src/tactic/derive_fintype.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1639598287, "sha": "02cdc812", "message": "refactor(order/sup_indep): Get rid of decidable equality assumption (#10673)\nThe `erase` in the definition required a `decidable_eq`. We can make do without it while keeping it functionally the same.", "changes": [{"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": [["mod", "theorem", "independent_iff_sup_indep", ["complete_lattice"]], ["mod", "theorem", "bUnion", ["finset", "sup_indep"]], ["mod", "theorem", "pairwise_disjoint", ["finset", "sup_indep"]], ["mod", "theorem", "sup", ["finset", "sup_indep"]], ["mod", "def", "sup_indep", ["finset"]], ["mod", "theorem", "sup_indep_empty", ["finset"]], ["add", "theorem", "sup_indep_iff_disjoint_erase", ["finset"]], ["mod", "theorem", "sup_indep_iff_pairwise_disjoint", ["finset"]]]}]}, {"timestamp": 1639598286, "sha": "9525f5e0", "message": "feat(order/zorn): Added some results about chains (#10658)\nAdded `chain_empty`, `chain_subsingleton`, and `chain.max_chain_of_chain`.\nThe first two of these are immediate yet useful lemmas. The last one is a consequence of Zorn's lemma, which generalizes Hausdorff's maximality principle.", "changes": [{"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["add", "theorem", "chain", ["set", "subsingleton"]], ["add", "theorem", "max_chain_of_chain", ["zorn", "chain"]], ["add", "theorem", "chain_empty", ["zorn"]]]}]}, {"timestamp": 1639598284, "sha": "accdb8fc", "message": "feat(measure_theory/integral/divergence_theorem): specialize for `f : ℝ → E` and `f g : ℝ × ℝ → E` (#10616)", "changes": [{"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": [["add", "theorem", "integral2_divergence_prod_of_has_fderiv_within_at_off_countable", ["measure_theory"]], ["add", "theorem", "integral_divergence_of_has_fderiv_within_at_off_countable'", ["measure_theory"]], ["add", "theorem", "integral_divergence_of_has_fderiv_within_at_off_countable_of_equiv", ["measure_theory"]], ["add", "theorem", "integral_divergence_prod_Icc_of_has_fderiv_within_at_off_countable_of_le", ["measure_theory"]], ["add", "theorem", "integral_eq_of_has_deriv_within_at_off_countable", ["measure_theory"]], ["add", "theorem", "integral_eq_of_has_deriv_within_at_off_countable_of_le", ["measure_theory"]]]}]}, {"timestamp": 1639591560, "sha": "4ff9b82a", "message": "feat(data/set/lattice): new lemma Union_singleton_eq_range (#10819)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_id'", ["set"]]]}, {"oldPath": "src/data/set/intervals/proj_Icc.lean", "newPath": "src/data/set/intervals/proj_Icc.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Union_of_singleton", ["set"]], ["mod", "theorem", "Union_of_singleton_coe", ["set"]], ["add", "theorem", "Union_singleton_eq_range", ["set"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}]}, {"timestamp": 1639591559, "sha": "dc732a3c", "message": "feat(logic/basic): When an If-Then-Else is not one of its arguments (#10800)\nConditions for `ite P a b ≠ a` and `ite P a b ≠ b`.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "imp_iff_not", []], ["add", "theorem", "ite_ne_left_iff", []], ["add", "theorem", "ite_ne_right_iff", []]]}]}, {"timestamp": 1639591558, "sha": "7130d75d", "message": "chore(*): introduce notation for left/right/punctured nhds (#10694)\nNew notation:\n* `𝓝[≤] x`: the filter `nhds_within x (set.Iic x)` of left-neighborhoods of `x`;\n* `𝓝[≥] x`: the filter `nhds_within x (set.Ici x)` of right-neighborhoods of `x`;\n* `𝓝[<] x`: the filter `nhds_within x (set.Iio x)` of punctured left-neighborhoods of `x`;\n* `𝓝[>] x`: the filter `nhds_within x (set.Ioi x)` of punctured right-neighborhoods of `x`;\n* `𝓝[≠] x`: the filter `nhds_within x {x}ᶜ` of punctured neighborhoods of `x`.", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["mod", "theorem", "tendsto_norm_nhds_within_zero", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "punctured_nhds_ne_bot", ["normed_field"]]]}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": [["mod", "theorem", "comap_exp_nhds_within_Ioi_zero", ["real"]], ["mod", "theorem", "map_exp_at_bot", ["real"]], ["mod", "theorem", "tendsto_exp_at_bot_nhds_within", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log.lean", "changes": [["mod", "theorem", "tendsto_log_nhds_within_zero", ["real"]]]}, {"oldPath": "src/analysis/special_functions/log_deriv.lean", "newPath": "src/analysis/special_functions/log_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["mod", "theorem", "tendsto_cos_neg_pi_div_two", ["real"]], ["mod", "theorem", "tendsto_cos_pi_div_two", ["real"]], ["mod", "theorem", "tendsto_sin_neg_pi_div_two", ["real"]], ["mod", "theorem", "tendsto_sin_pi_div_two", ["real"]], ["mod", "theorem", "tendsto_tan_neg_pi_div_two", ["real"]], ["mod", "theorem", "tendsto_tan_pi_div_two", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/differentiation.lean", "newPath": "src/measure_theory/covering/differentiation.lean", "changes": []}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["mod", "theorem", "mk_metric_mono", ["measure_theory", "measure"]], ["mod", "theorem", "mk_metric_mono", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": [["mod", "theorem", "tendsto_left_lim", ["stieltjes_function"]]]}, {"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": [["mod", "theorem", "nhds_within_compl_infty_eq", ["alexandroff"]]]}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "punctured_nhds_ne_bot", ["module"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["mod", "theorem", "comap_coe_Ioi_nhds_within_Ioi", []], ["mod", "theorem", "inv_tendsto_zero", ["filter", "tendsto"]], ["mod", "theorem", "tendsto_abs_nhds_within_zero", []], ["mod", "theorem", "tendsto_inv_at_top_zero'", []], ["mod", "theorem", "tendsto_inv_zero_at_top", []]]}, {"oldPath": "src/topology/algebra/ordered/extend_from.lean", "newPath": "src/topology/algebra/ordered/extend_from.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/intermediate_value.lean", "newPath": "src/topology/algebra/ordered/intermediate_value.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/left_right.lean", "newPath": "src/topology/algebra/ordered/left_right.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/monotone_continuity.lean", "newPath": "src/topology/algebra/ordered/monotone_continuity.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "closure_compl_singleton", []], ["mod", "theorem", "dense_compl_singleton", []], ["mod", "theorem", "interior_singleton", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "nhds_within_compl_singleton_sup_pure", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "nhds_within_Ioi_coe_ne_bot", ["ennreal"]], ["mod", "theorem", "nhds_within_Ioi_zero_ne_bot", ["ennreal"]]]}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "diff_finite", ["dense"]], ["mod", "theorem", "diff_finset", ["dense"]], ["mod", "theorem", "diff_singleton", ["dense"]], ["mod", "theorem", "infinite_of_mem_nhds", []]]}]}, {"timestamp": 1639591557, "sha": "6043522e", "message": "refactor(order/basic): Change definition of `<` on `α × β` (#10667)\nThis prove that `a < b` on `prod` is equivalent to `a.1 < b.1 ∧ a.2 ≤ b.2 ∨ a.1 ≤ b.1 ∧ a.2 < b.2`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "le_def", ["prod"]], ["add", "theorem", "lt_iff", ["prod"]], ["mod", "theorem", "mk_le_mk", ["prod"]], ["add", "theorem", "mk_lt_mk", ["prod"]]]}]}, {"timestamp": 1639591556, "sha": "6530769a", "message": "doc(algebra/algebra/basic): expand the docstring (#10221)\nThis doesn't rule out having a better way to spell \"non-unital non-associative algebra\" in future, but let's document how it can be done today.\nMuch of this description is taken from [my talk at CICM's FMM](https://eric-wieser.github.io/fmm-2021/#/algebras).", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}]}, {"timestamp": 1639587614, "sha": "bb51df36", "message": "chore(computability/regular_expressions): eliminate `finish` (#10811)\nRemoving uses of `finish`, as discussed in this Zulip thread (https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20sat.20solvers)", "changes": [{"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": []}]}, {"timestamp": 1639587612, "sha": "5658241a", "message": "feat(ring_theory/localization,group_theory/monoid_localization): other scalar action instances (#10804)\nAs requested by @pechersky. With this instance it's possible to state:\n```lean\nimport field_theory.ratfunc\nimport data.complex.basic\nimport ring_theory.laurent_series\nnoncomputable example : ratfunc ℂ ≃ₐ[ℂ] fraction_ring (polynomial ℂ) := sorry\n```", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "smul_mk", ["localization"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "theorem", "smul_mk", ["localization"]]]}]}, {"timestamp": 1639587611, "sha": "930ae468", "message": "chore(analysis/special_functions/pow): remove duplicate lemmas concerning monotonicity of `rpow` (#10794)\nThe lemmas `rpow_left_monotone_of_nonneg` and `rpow_left_strict_mono_of_pos` were duplicates of `monotone_rpow_of_nonneg` and `strict_mono_rpow_of_pos`, respectively. The duplicates are removed as well as references to them in mathlib in `measure_theory/function/{continuous_function_dense, lp_space}`", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["del", "theorem", "rpow_left_monotone_of_nonneg", ["ennreal"]], ["del", "theorem", "rpow_left_strict_mono_of_pos", ["ennreal"]]]}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}]}, {"timestamp": 1639582827, "sha": "61949afe", "message": "doc(linear_algebra/std_basis): update module doc (#10818)\nThe old module documentation for this file still referred to the removed old `is_basis`-based definitions. This PR updates the documentation to refer to the new bundled `basis`-based definitions.", "changes": [{"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}]}, {"timestamp": 1639572282, "sha": "9f787c2c", "message": "doc(undergrad): Link the affine group (#10797)\nThis is the statement `group (P₁ ≃ᵃ[k] P₁)`. Per the \"Undergrad TODO trivial targets\" wiki page, this should [match wikipedia](https://en.wikipedia.org/wiki/Affine_group), which says:\n> In mathematics, the affine group or general affine group of any affine space over a field K is the group of all invertible affine transformations from the space into itself.\nI guess you could also ask for the statement that `(P₁ ≃ᵃ[k] P₁) ≃ units (P₁ →ᵃ[k] P₁)`, but I'll PR that separately.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1639564570, "sha": "c574e387", "message": "feat(data/finsupp/basic): Add `finsupp.erase_of_not_mem_support` (#10689)\nAnalogous to `list.erase_of_not_mem`", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "erase_of_not_mem_support", ["finsupp"]]]}]}, {"timestamp": 1639562023, "sha": "03a250a4", "message": "chore(data/sym/sym2): Better lemma names (#10801)\nRenames\n* `mk_has_mem` to `mk_mem_left`\n* `mk_has_mem_right` to `mk_mem_right`. Just doesn't follow the convention.\n* `mem_other` to `other` in lemma names. The `mem` is confusing and is only part of the fully qualified name for dot notation to work.\n* `sym2.elems_iff_eq` to `mem_and_mem_iff`. `elems` is never used elsewhere. Could also be `mem_mem_iff`.\n* `is_diag_iff_eq` to `mk_is_diag_iff`. The form of the argument was ambiguous. Adding `mk` solves it.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["del", "theorem", "edge_mem_other_incident_set", ["simple_graph"]], ["add", "theorem", "edge_other_incident_set", ["simple_graph"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["mod", "theorem", "coe_lift_symm_apply", ["sym2"]], ["mod", "theorem", "diag_is_diag", ["sym2"]], ["del", "theorem", "elems_iff_eq", ["sym2"]], ["mod", "theorem", "from_rel_proj_prop", ["sym2"]], ["mod", "theorem", "from_rel_prop", ["sym2"]], ["del", "theorem", "is_diag_iff_eq", ["sym2"]], ["mod", "def", "lift", ["sym2"]], ["mod", "theorem", "lift_mk", ["sym2"]], ["mod", "theorem", "injective", ["sym2", "map"]], ["mod", "def", "map", ["sym2"]], ["mod", "theorem", "map_comp", ["sym2"]], ["mod", "theorem", "map_map", ["sym2"]], ["mod", "theorem", "map_pair_eq", ["sym2"]], ["add", "theorem", "mem_and_mem_iff", ["sym2"]], ["add", "theorem", "mem_mk_left", ["sym2"]], ["add", "theorem", "mem_mk_right", ["sym2"]], ["del", "theorem", "mem_other_mem'", ["sym2"]], ["del", "theorem", "mem_other_mem", ["sym2"]], ["del", "theorem", "mem_other_ne", ["sym2"]], ["del", "theorem", "mem_other_spec'", ["sym2"]], ["del", "theorem", "mem_other_spec", ["sym2"]], ["del", "theorem", "mk_has_mem", ["sym2"]], ["del", "theorem", "mk_has_mem_right", ["sym2"]], ["add", "theorem", "mk_is_diag_iff", ["sym2"]], ["mod", "theorem", "other_invol'", ["sym2"]], ["mod", "theorem", "other_invol", ["sym2"]], ["add", "theorem", "other_mem'", ["sym2"]], ["add", "theorem", "other_mem", ["sym2"]], ["add", "theorem", "other_ne", ["sym2"]], ["add", "theorem", "other_spec'", ["sym2"]], ["add", "theorem", "other_spec", ["sym2"]], ["mod", "theorem", "rel_bool_spec", ["sym2"]], ["mod", "def", "sym2_equiv_sym'", ["sym2"]], ["del", "theorem", "sym2_ext", ["sym2"]]]}]}, {"timestamp": 1639551910, "sha": "40cfdecd", "message": "chore(algebra/algebra/basic): alg_equiv.map_smul (#10805)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_smul", ["alg_equiv"]]]}]}, {"timestamp": 1639549331, "sha": "8f5031ae", "message": "docs(undergrad): more links (#10790)\nThe only change to existing declaration links is removing wrong claims of having proving Sylvester's law of inertia (we don't have that the number of 1 and -1 is independent from the basis).", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1639491264, "sha": "e3eb0eb0", "message": "feat(measure_theory/integral/set_to_l1): various properties of the set_to_fun construction (#10713)", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "of_measure_le_smul", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "of_measure_le_smul", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["add", "theorem", "set_to_L1_add_left'", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_add_left", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_congr_left'", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_congr_left", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_const", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_simple_func_indicator_const", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_smul_left'", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_smul_left", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_zero_left'", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_zero_left", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1s_add_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_add_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_add_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_add_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_congr_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_congr_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_congr_measure", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_const", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_smul_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_smul_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_zero_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_clm_zero_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_congr_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_congr_measure", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_const", ["measure_theory", "L1", "simple_func"]], ["mod", "theorem", "set_to_L1s_indicator_const", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_neg", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_smul_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_smul_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_sub", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_zero_left'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_zero_left", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "continuous_L1_to_L1", ["measure_theory"]], ["add", "theorem", "set_to_fun_add_left'", ["measure_theory"]], ["add", "theorem", "set_to_fun_add_left", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_left'", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_left", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_measure", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_measure_of_add_left", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_measure_of_add_right", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_measure_of_integrable", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_smul_measure", ["measure_theory"]], ["add", "theorem", "set_to_fun_const", ["measure_theory"]], ["add", "theorem", "set_to_fun_finset_sum'", ["measure_theory"]], ["add", "theorem", "set_to_fun_finset_sum", ["measure_theory"]], ["add", "theorem", "set_to_fun_measure_zero'", ["measure_theory"]], ["add", "theorem", "set_to_fun_measure_zero", ["measure_theory"]], ["add", "theorem", "set_to_fun_smul_left'", ["measure_theory"]], ["add", "theorem", "set_to_fun_smul_left", ["measure_theory"]], ["add", "theorem", "set_to_fun_top_smul_measure", ["measure_theory"]], ["add", "theorem", "set_to_fun_zero_left'", ["measure_theory"]], ["add", "theorem", "set_to_fun_zero_left", ["measure_theory"]], ["add", "theorem", "norm_set_to_simple_func_le_sum_mul_norm", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_congr_left", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_const'", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_const", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_smul_left'", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_smul_left", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_zero'", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "absolutely_continuous_of_le_smul", ["measure_theory", "measure"]]]}]}, {"timestamp": 1639486628, "sha": "1367c19b", "message": "feat(algebraic_geometry): LocallyRingedSpace has coproducts. (#10665)", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/locally_ringed_space/has_colimits.lean", "changes": [["add", "def", "coproduct", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "coproduct_cofan", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "coproduct_cofan_is_colimit", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "colimit_exists_rep", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "is_colimit_exists_rep", ["algebraic_geometry", "SheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "theorem", "image_preimage_is_empty", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]], ["add", "theorem", "sigma_ι_open_embedding", ["algebraic_geometry", "SheafedSpace", "is_open_immersion"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": [["add", "theorem", "open_embedding_iff_comp_is_iso", ["Top"]], ["add", "theorem", "open_embedding_iff_is_iso_comp", ["Top"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "open_embedding_iff_open_embedding_compose", []], ["add", "theorem", "open_embedding_of_open_embedding_compose", []]]}]}, {"timestamp": 1639480037, "sha": "9078914e", "message": "feat(algebra/group): make `map_[z]pow` generic in `monoid_hom_class` (#10749)\nThis PR makes `map_pow` take a `monoid_hom_class` instead of specifically a `monoid_hom`.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "map_pow", []], ["add", "theorem", "map_zpow'", []], ["add", "theorem", "map_zpow", []], ["del", "theorem", "map_pow", ["monoid_hom"]], ["del", "theorem", "map_zpow'", ["monoid_hom"]], ["del", "theorem", "map_zpow", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "map_pow", ["ring_hom"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "map_pow", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["del", "theorem", "map_pow", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1639474418, "sha": "f46a7a0f", "message": "chore(data/equiv/ring): inv_fun_eq_symm (#10779)\nLike what we have for `alg_equiv`.", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "inv_fun_eq_symm", ["ring_equiv"]]]}]}, {"timestamp": 1639474417, "sha": "6d15ea43", "message": "feat(combinatorics/simple_graph): simp lemmas about spanning coe (#10778)\nA couple of lemmas from #8737 which don't involve connectivity, plus some extra related results.\ncc @kmill", "changes": [{"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "bot_adj_iff", ["simple_graph", "subgraph"]], ["add", "theorem", "bot_verts", ["simple_graph", "subgraph"]], ["add", "theorem", "injective", ["simple_graph", "subgraph", "map_spanning_top"]], ["add", "def", "map_spanning_top", ["simple_graph", "subgraph"]], ["add", "theorem", "spanning_coe_top", ["simple_graph", "subgraph"]], ["add", "theorem", "top_adj_iff", ["simple_graph", "subgraph"]], ["add", "theorem", "top_verts", ["simple_graph", "subgraph"]], ["mod", "def", "to_subgraph", ["simple_graph"]]]}]}, {"timestamp": 1639474416, "sha": "05d87671", "message": "feat(group_theory/order_of_element): additivize (#10766)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "add_order_of_eq_prime", []], ["mod", "theorem", "order_of_mul_dvd_lcm", ["commute"]], ["del", "theorem", "order_of_mul_dvd_lcm_order_of", ["commute"]], ["del", "theorem", "image_range_add_order_of", []], ["del", "theorem", "is_of_fin_add_order_iff_nsmul_eq_zero", []], ["del", "theorem", "is_periodic_pt_add_iff_nsmul_eq_zero", []], ["add", "theorem", "mem_powers_iff_mem_range_order_of'", []], ["mod", "def", "pow_coprime", []], ["mod", "theorem", "pow_coprime_inv", []], ["mod", "theorem", "pow_coprime_one", []]]}]}, {"timestamp": 1639467655, "sha": "85cb4a81", "message": "chore(measure_theory/decomposition/signed_hahn): Fixed a few typos (#10777)", "changes": [{"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}]}, {"timestamp": 1639467654, "sha": "f070a69b", "message": "move(algebra/order/lattice_group): Move from `algebra.lattice_ordered_group` (#10763)\nRename `algebra.lattice_ordered_group` in `algebra/order/lattice_group`.", "changes": [{"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/order/lattice_group.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}]}, {"timestamp": 1639467653, "sha": "f727e126", "message": "chore(logic/basic): tidy `ite` section and misplaced lemmas (#10761)\nMoves a few lemmas down and use `variables`.", "changes": [{"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "apply_dite2", []], ["mod", "theorem", "apply_dite", []], ["mod", "theorem", "apply_ite2", []], ["mod", "theorem", "apply_ite", []], ["mod", "theorem", "dite_apply", []], ["mod", "theorem", "dite_eq_ite", []], ["mod", "theorem", "dite_not", []], ["mod", "theorem", "ite_and", []], ["mod", "theorem", "ite_apply", []], ["mod", "theorem", "ite_eq_iff", []], ["mod", "theorem", "ite_eq_left_iff", []], ["mod", "theorem", "ite_eq_or_eq", []], ["mod", "theorem", "ite_eq_right_iff", []], ["mod", "theorem", "ite_not", []]]}]}, {"timestamp": 1639467652, "sha": "dda8a10a", "message": "feat(data/mv_polynomial/basic): add `mv_polynomial.support_sum` (#10731)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "support_finset_sum", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "support_sum", ["mv_polynomial"]], ["add", "theorem", "support_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1639467651, "sha": "9af43e4e", "message": "feat(analysis/inner_product_space/basic): inner product as a (continuous) sesquilinear map (#10684)\nThis PR replaces `inner_right (v : E) : E →L[𝕜] 𝕜` (the inner product with a fixed left element as a continuous linear map) by `innerₛₗ : E →ₗ⋆[𝕜] E →ₗ[𝕜] 𝕜 ` and `innerSL : E →L⋆[𝕜] E →L[𝕜] 𝕜 `, which bundle the inner product as a sesquilinear map and as a continuous sesquilinear map respectively.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "def", "innerSL", []], ["add", "theorem", "innerSL_apply", []], ["add", "theorem", "innerSL_apply_coe", []], ["add", "theorem", "innerSL_apply_norm", []], ["del", "def", "inner_right", []], ["del", "theorem", "inner_right_apply", []], ["del", "theorem", "inner_right_coe", []], ["add", "def", "innerₛₗ", []], ["add", "theorem", "innerₛₗ_apply", []], ["add", "theorem", "innerₛₗ_apply_coe", []], ["mod", "theorem", "orthogonal_eq_inter", []]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["add", "theorem", "innerSL_norm", ["inner_product_space"]]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}]}, {"timestamp": 1639460176, "sha": "f3fa5e3f", "message": "feat(data/mv_polynomial/variables): add `mv_polynomial.degree_of_zero` (#10768)", "changes": [{"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "degree_of_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1639460175, "sha": "ee78812f", "message": "feat(number_theory/padics/padic_norm): lemmas (#10765)", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["del", "theorem", "padic_val_nat_prime_pow", []]]}]}, {"timestamp": 1639460174, "sha": "9b1a8321", "message": "feat(data/nat/prime): dvd_of_factors_subperm (#10764)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "dvd_of_factors_subperm", ["nat"]]]}]}, {"timestamp": 1639460173, "sha": "d9edeea2", "message": "refactor(linear_algebra/orientation): add refl, symm, and trans lemma (#10753)\nThis restates the `reflexive`, `symmetric`, and `transitive` lemmas in a form understood by `@[refl]`, `@[symm]`, and `@[trans]`.\nAs a bonus, these versions also work with dot notation.\nI've discarded the original statements, since they're always recoverable via the fields of equivalence_same_ray, and keeping them is just noise.", "changes": [{"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["mod", "theorem", "equivalence_same_ray", []], ["del", "theorem", "reflexive_same_ray", []], ["add", "theorem", "refl", ["same_ray"]], ["add", "theorem", "symm", ["same_ray"]], ["add", "theorem", "trans", ["same_ray"]], ["add", "theorem", "same_ray_comm", []], ["del", "theorem", "symmetric_same_ray", []], ["del", "theorem", "transitive_same_ray", []]]}]}, {"timestamp": 1639460172, "sha": "00004975", "message": "feat(order/basic, order/bounded_order): Generalized `preorder` to `has_lt` (#10695)\nThis is a continuation of #10664.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "no_bot", []], ["mod", "theorem", "no_top", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "not_lt_none", ["with_bot"]], ["mod", "theorem", "well_founded_lt", ["with_bot"]], ["add", "theorem", "not_none_lt", ["with_top"]], ["mod", "theorem", "well_founded_lt", ["with_top"]]]}]}, {"timestamp": 1639455863, "sha": "32c24f1b", "message": "chore(set_theory/ordinal_arithmetic): simplified proof of `is_normal.le_self` (#10770)\nThanks to #10732, this proof is now a one-liner.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1639445371, "sha": "cd462cda", "message": "feat(topology/algebra/*, analysis/normed_space/operator_norm): construct bundled {monoid_hom, linear_map} from limits of such maps (#10700)\nGiven a function which is a pointwise limit of {`monoid_hom`, `add_monoid_hom`, `linear_map`} maps, construct a bundled version of the corresponding type with that function as its `to_fun`. Then this construction is used to replace the existing in-proof construction that the continuous linear maps into a banach space is itself complete.", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "linear_map_of_tendsto", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "def", "monoid_hom_of_tendsto", []]]}]}, {"timestamp": 1639442264, "sha": "77e52484", "message": "feat(algebra/triv_sq_zero_ext): universal property (#10754)", "changes": [{"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": [["add", "theorem", "alg_hom_ext'", ["triv_sq_zero_ext"]], ["add", "theorem", "alg_hom_ext", ["triv_sq_zero_ext"]], ["add", "theorem", "ind", ["triv_sq_zero_ext"]], ["add", "def", "lift", ["triv_sq_zero_ext"]], ["add", "def", "lift_aux", ["triv_sq_zero_ext"]], ["add", "theorem", "lift_aux_apply_inr", ["triv_sq_zero_ext"]], ["add", "theorem", "lift_aux_comp_inr_hom", ["triv_sq_zero_ext"]], ["add", "theorem", "lift_aux_inr_hom", ["triv_sq_zero_ext"]], ["add", "theorem", "linear_map_ext", ["triv_sq_zero_ext"]]]}]}, {"timestamp": 1639438469, "sha": "c3391c26", "message": "feat(analysis/convex/simplicial_complex): Simplicial complexes (#9762)\nThis introduces simplicial complexes in modules.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/simplicial_complex/basic.lean", "changes": [["add", "theorem", "convex_hull_inter_convex_hull", ["geometry", "simplicial_complex"]], ["add", "theorem", "convex_hull_subset_space", ["geometry", "simplicial_complex"]], ["add", "theorem", "disjoint_or_exists_inter_eq_convex_hull", ["geometry", "simplicial_complex"]], ["add", "theorem", "face_subset_face_iff", ["geometry", "simplicial_complex"]], ["add", "theorem", "faces_bot", ["geometry", "simplicial_complex"]], ["add", "def", "facets", ["geometry", "simplicial_complex"]], ["add", "theorem", "facets_bot", ["geometry", "simplicial_complex"]], ["add", "theorem", "facets_subset", ["geometry", "simplicial_complex"]], ["add", "theorem", "mem_facets", ["geometry", "simplicial_complex"]], ["add", "theorem", "mem_space_iff", ["geometry", "simplicial_complex"]], ["add", "theorem", "mem_vertices", ["geometry", "simplicial_complex"]], ["add", "theorem", "not_facet_iff_subface", ["geometry", "simplicial_complex"]], ["add", "def", "of_erase", ["geometry", "simplicial_complex"]], ["add", "def", "of_subcomplex", ["geometry", "simplicial_complex"]], ["add", "def", "space", ["geometry", "simplicial_complex"]], ["add", "theorem", "space_bot", ["geometry", "simplicial_complex"]], ["add", "theorem", "vertex_mem_convex_hull_iff", ["geometry", "simplicial_complex"]], ["add", "def", "vertices", ["geometry", "simplicial_complex"]], ["add", "theorem", "vertices_eq", ["geometry", "simplicial_complex"]], ["add", "theorem", "vertices_subset_space", ["geometry", "simplicial_complex"]], ["add", "structure", "simplicial_complex", ["geometry"]]]}]}, {"timestamp": 1639431202, "sha": "7181b3af", "message": "chore(order/hom): rearrange definitions of `order_{hom,iso,embedding}` (#10752)\nWe symmetrize the locations of `rel_{hom,iso,embedding}` and `order_{hom,iso,embedding}` by putting the `rel_` definitions in `order/rel_iso.lean` and the `order_` definitions in `order/hom/basic.lean`. (`order_hom.lean` needed to be split up to fix an import loop.) Requested by @YaelDillies.\n## Moved definitions\n * `order_hom`, `order_iso`, `order_embedding` are now in `order/hom/basic.lean`\n * `order_hom.has_sup` ... `order_hom.complete_lattice` are now in `order/hom/lattice.lean`\n## Other changes\nSome import cleanup.", "changes": [{"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/combinatorics/set_family/shadow.lean", "newPath": "src/combinatorics/set_family/shadow.lean", "changes": []}, {"oldPath": "src/data/finset/option.lean", "newPath": "src/data/finset/option.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/hom/basic.lean", "changes": [["add", "theorem", "map_order_iso", ["disjoint"]], ["add", "theorem", "disjoint_map_order_iso_iff", []], ["add", "theorem", "coe_to_order_iso", ["equiv"]], ["add", "def", "to_order_iso", ["equiv"]], ["add", "theorem", "to_order_iso_to_equiv", ["equiv"]], ["add", "theorem", "coe_of_map_le_iff", ["order_embedding"]], ["add", "theorem", "coe_of_strict_mono", ["order_embedding"]], ["add", "theorem", "eq_iff_eq", ["order_embedding"]], ["add", "theorem", "le_iff_le", ["order_embedding"]], ["add", "theorem", "le_map_sup", ["order_embedding"]], ["add", "def", "lt_embedding", ["order_embedding"]], ["add", "theorem", "lt_embedding_apply", ["order_embedding"]], ["add", "theorem", "lt_iff_lt", ["order_embedding"]], ["add", "theorem", "map_inf_le", ["order_embedding"]], ["add", "def", "of_map_le_iff", ["order_embedding"]], ["add", "def", "of_strict_mono", ["order_embedding"]], ["add", "def", "subtype", ["order_embedding"]], ["add", "def", "to_order_hom", ["order_embedding"]], ["add", "def", "order_embedding", []], ["add", "def", "apply", ["order_hom"]], ["add", "theorem", "apply_mono", ["order_hom"]], ["add", "def", "coe_fn_hom", ["order_hom"]], ["add", "theorem", "coe_fun_mk", ["order_hom"]], ["add", "theorem", "coe_le_coe", ["order_hom"]], ["add", "def", "comp", ["order_hom"]], ["add", "theorem", "comp_const", ["order_hom"]], ["add", "theorem", "comp_id", ["order_hom"]], ["add", "theorem", "comp_mono", ["order_hom"]], ["add", "theorem", "comp_prod_comp_same", ["order_hom"]], ["add", "def", "compₘ", ["order_hom"]], ["add", "def", "const", ["order_hom"]], ["add", "theorem", "const_comp", ["order_hom"]], ["add", "def", "curry", ["order_hom"]], ["add", "theorem", "curry_apply", ["order_hom"]], ["add", "theorem", "curry_symm_apply", ["order_hom"]], ["add", "def", "diag", ["order_hom"]], ["add", "def", "dual_iso", ["order_hom"]], ["add", "theorem", "ext", ["order_hom"]], ["add", "def", "fst", ["order_hom"]], ["add", "theorem", "fst_comp_prod", ["order_hom"]], ["add", "theorem", "fst_prod_snd", ["order_hom"]], ["add", "def", "id", ["order_hom"]], ["add", "theorem", "id_comp", ["order_hom"]], ["add", "theorem", "le_def", ["order_hom"]], ["add", "theorem", "mk_le_mk", ["order_hom"]], ["add", "def", "on_diag", ["order_hom"]], ["add", "theorem", "order_hom_eq_id", ["order_hom"]], ["add", "def", "pi", ["order_hom"]], ["add", "def", "pi_iso", ["order_hom"]], ["add", "def", "prod_iso", ["order_hom"]], ["add", "def", "prod_map", ["order_hom"]], ["add", "theorem", "prod_mono", ["order_hom"]], ["add", "def", "prodₘ", ["order_hom"]], ["add", "def", "snd", ["order_hom"]], ["add", "theorem", "snd_comp_prod", ["order_hom"]], ["add", "def", "val", ["order_hom", "subtype"]], ["add", "theorem", "to_fun_eq_coe", ["order_hom"]], ["add", "def", "unique", ["order_hom"]], ["add", "structure", "order_hom", []], ["add", "theorem", "apply_eq_iff_eq", ["order_iso"]], ["add", "theorem", "apply_eq_iff_eq_symm_apply", ["order_iso"]], ["add", "theorem", "apply_symm_apply", ["order_iso"]], ["add", "theorem", "coe_refl", ["order_iso"]], ["add", "theorem", "coe_to_order_embedding", ["order_iso"]], ["add", "theorem", "coe_trans", ["order_iso"]], ["add", "def", "fun_unique", ["order_iso"]], ["add", "theorem", "fun_unique_symm_apply", ["order_iso"]], ["add", "theorem", "image_eq_preimage", ["order_iso"]], ["add", "theorem", "image_preimage", ["order_iso"]], ["add", "theorem", "image_symm_image", ["order_iso"]], ["add", "theorem", "is_compl", ["order_iso"]], ["add", "theorem", "is_compl_iff", ["order_iso"]], ["add", "theorem", "is_complemented", ["order_iso"]], ["add", "theorem", "is_complemented_iff", ["order_iso"]], ["add", "theorem", "le_iff_le", ["order_iso"]], ["add", "theorem", "le_symm_apply", ["order_iso"]], ["add", "theorem", "lt_iff_lt", ["order_iso"]], ["add", "theorem", "map_bot'", ["order_iso"]], ["add", "theorem", "map_bot", ["order_iso"]], ["add", "theorem", "map_inf", ["order_iso"]], ["add", "theorem", "map_sup", ["order_iso"]], ["add", "theorem", "map_top'", ["order_iso"]], ["add", "theorem", "map_top", ["order_iso"]], ["add", "def", "of_cmp_eq_cmp", ["order_iso"]], ["add", "theorem", "preimage_image", ["order_iso"]], ["add", "theorem", "preimage_symm_preimage", ["order_iso"]], ["add", "theorem", "range_eq", ["order_iso"]], ["add", "def", "refl", ["order_iso"]], ["add", "theorem", "refl_apply", ["order_iso"]], ["add", "theorem", "refl_to_equiv", ["order_iso"]], ["add", "theorem", "refl_trans", ["order_iso"]], ["add", "def", "univ", ["order_iso", "set"]], ["add", "def", "set_congr", ["order_iso"]], ["add", "def", "symm", ["order_iso"]], ["add", "theorem", "symm_apply_apply", ["order_iso"]], ["add", "theorem", "symm_apply_eq", ["order_iso"]], ["add", "theorem", "symm_apply_le", ["order_iso"]], ["add", "theorem", "symm_image_image", ["order_iso"]], ["add", "theorem", "symm_injective", ["order_iso"]], ["add", "theorem", "symm_preimage_preimage", ["order_iso"]], ["add", "theorem", "symm_refl", ["order_iso"]], ["add", "theorem", "symm_symm", ["order_iso"]], ["add", "theorem", "to_equiv_symm", ["order_iso"]], ["add", "def", "to_order_embedding", ["order_iso"]], ["add", "def", "trans", ["order_iso"]], ["add", "theorem", "trans_apply", ["order_iso"]], ["add", "theorem", "trans_refl", ["order_iso"]], ["add", "def", "order_iso", []], ["add", "def", "eval_order_hom", ["pi"]], ["add", "def", "order_embedding_of_lt_embedding", ["rel_embedding"]], ["add", "theorem", "order_embedding_of_lt_embedding_apply", ["rel_embedding"]], ["add", "theorem", "to_order_hom_injective", ["rel_embedding"]], ["add", "def", "to_order_hom", ["rel_hom"]]]}, {"oldPath": null, "newPath": "src/order/hom/lattice.lean", "changes": [["add", "theorem", "Inf_apply", ["order_hom"]], ["add", "theorem", "Sup_apply", ["order_hom"]], ["add", "theorem", "coe_infi", ["order_hom"]], ["add", "theorem", "coe_supr", ["order_hom"]], ["add", "theorem", "infi_apply", ["order_hom"]], ["add", "theorem", "iterate_sup_le_sup_iff", ["order_hom"]], ["add", "theorem", "supr_apply", ["order_hom"]]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/order_hom.lean", "newPath": null, "changes": [["del", "def", "to_order_hom", ["order_embedding"]], ["del", "theorem", "Inf_apply", ["order_hom"]], ["del", "theorem", "Sup_apply", ["order_hom"]], ["del", "def", "apply", ["order_hom"]], ["del", "theorem", "apply_mono", ["order_hom"]], ["del", "def", "coe_fn_hom", ["order_hom"]], ["del", "theorem", "coe_fun_mk", ["order_hom"]], ["del", "theorem", "coe_infi", ["order_hom"]], ["del", "theorem", "coe_le_coe", ["order_hom"]], ["del", "theorem", "coe_supr", ["order_hom"]], ["del", "def", "comp", ["order_hom"]], ["del", "theorem", "comp_const", ["order_hom"]], ["del", "theorem", "comp_id", ["order_hom"]], ["del", "theorem", "comp_mono", ["order_hom"]], ["del", "theorem", "comp_prod_comp_same", ["order_hom"]], ["del", "def", "compₘ", ["order_hom"]], ["del", "def", "const", ["order_hom"]], ["del", "theorem", "const_comp", ["order_hom"]], ["del", "def", "curry", ["order_hom"]], ["del", "theorem", "curry_apply", ["order_hom"]], ["del", "theorem", "curry_symm_apply", ["order_hom"]], ["del", "def", "diag", ["order_hom"]], ["del", "def", "dual_iso", ["order_hom"]], ["del", "theorem", "ext", ["order_hom"]], ["del", "def", "fst", ["order_hom"]], ["del", "theorem", "fst_comp_prod", ["order_hom"]], ["del", "theorem", "fst_prod_snd", ["order_hom"]], ["del", "def", "id", ["order_hom"]], ["del", "theorem", "id_comp", ["order_hom"]], ["del", "theorem", "infi_apply", ["order_hom"]], ["del", "theorem", "iterate_sup_le_sup_iff", ["order_hom"]], ["del", "theorem", "le_def", ["order_hom"]], ["del", "theorem", "mk_le_mk", ["order_hom"]], ["del", "def", "on_diag", ["order_hom"]], ["del", "theorem", "order_hom_eq_id", ["order_hom"]], ["del", "def", "pi", ["order_hom"]], ["del", "def", "pi_iso", ["order_hom"]], ["del", "def", "prod_iso", ["order_hom"]], ["del", "def", "prod_map", ["order_hom"]], ["del", "theorem", "prod_mono", ["order_hom"]], ["del", "def", "prodₘ", ["order_hom"]], ["del", "def", "snd", ["order_hom"]], ["del", "theorem", "snd_comp_prod", ["order_hom"]], ["del", "def", "val", ["order_hom", "subtype"]], ["del", "theorem", "supr_apply", ["order_hom"]], ["del", "theorem", "to_fun_eq_coe", ["order_hom"]], ["del", "def", "unique", ["order_hom"]], ["del", "structure", "order_hom", []], ["del", "def", "eval_order_hom", ["pi"]], ["del", "theorem", "to_order_hom_injective", ["rel_embedding"]], ["del", "def", "to_order_hom", ["rel_hom"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["del", "theorem", "map_order_iso", ["disjoint"]], ["del", "theorem", "disjoint_map_order_iso_iff", []], ["del", "theorem", "coe_to_order_iso", ["equiv"]], ["del", "def", "to_order_iso", ["equiv"]], ["del", "theorem", "to_order_iso_to_equiv", ["equiv"]], ["del", "theorem", "coe_of_map_le_iff", ["order_embedding"]], ["del", "theorem", "coe_of_strict_mono", ["order_embedding"]], ["del", "theorem", "eq_iff_eq", ["order_embedding"]], ["del", "theorem", "le_iff_le", ["order_embedding"]], ["del", "theorem", "le_map_sup", ["order_embedding"]], ["del", "def", "lt_embedding", ["order_embedding"]], ["del", "theorem", "lt_embedding_apply", ["order_embedding"]], ["del", "theorem", "lt_iff_lt", ["order_embedding"]], ["del", "theorem", "map_inf_le", ["order_embedding"]], ["del", "def", "of_map_le_iff", ["order_embedding"]], ["del", "def", "of_strict_mono", ["order_embedding"]], ["del", "def", "subtype", ["order_embedding"]], ["del", "def", "order_embedding", []], ["del", "theorem", "apply_eq_iff_eq", ["order_iso"]], ["del", "theorem", "apply_eq_iff_eq_symm_apply", ["order_iso"]], ["del", "theorem", "apply_symm_apply", ["order_iso"]], ["del", "theorem", "coe_refl", ["order_iso"]], ["del", "theorem", "coe_to_order_embedding", ["order_iso"]], ["del", "theorem", "coe_trans", ["order_iso"]], ["del", "def", "fun_unique", ["order_iso"]], ["del", "theorem", "fun_unique_symm_apply", ["order_iso"]], ["del", "theorem", "image_eq_preimage", ["order_iso"]], ["del", "theorem", "image_preimage", ["order_iso"]], ["del", "theorem", "image_symm_image", ["order_iso"]], ["del", "theorem", "is_compl", ["order_iso"]], ["del", "theorem", "is_compl_iff", ["order_iso"]], ["del", "theorem", "is_complemented", ["order_iso"]], ["del", "theorem", "is_complemented_iff", ["order_iso"]], ["del", "theorem", "le_iff_le", ["order_iso"]], ["del", "theorem", "le_symm_apply", ["order_iso"]], ["del", "theorem", "lt_iff_lt", ["order_iso"]], ["del", "theorem", "map_bot'", ["order_iso"]], ["del", "theorem", "map_bot", ["order_iso"]], ["del", "theorem", "map_inf", ["order_iso"]], ["del", "theorem", "map_sup", ["order_iso"]], ["del", "theorem", "map_top'", ["order_iso"]], ["del", "theorem", "map_top", ["order_iso"]], ["del", "def", "of_cmp_eq_cmp", ["order_iso"]], ["del", "theorem", "preimage_image", ["order_iso"]], ["del", "theorem", "preimage_symm_preimage", ["order_iso"]], ["del", "theorem", "range_eq", ["order_iso"]], ["del", "def", "refl", ["order_iso"]], ["del", "theorem", "refl_apply", ["order_iso"]], ["del", "theorem", "refl_to_equiv", ["order_iso"]], ["del", "theorem", "refl_trans", ["order_iso"]], ["del", "def", "univ", ["order_iso", "set"]], ["del", "def", "set_congr", ["order_iso"]], ["del", "def", "symm", ["order_iso"]], ["del", "theorem", "symm_apply_apply", ["order_iso"]], ["del", "theorem", "symm_apply_eq", ["order_iso"]], ["del", "theorem", "symm_apply_le", ["order_iso"]], ["del", "theorem", "symm_image_image", ["order_iso"]], ["del", "theorem", "symm_injective", ["order_iso"]], ["del", "theorem", "symm_preimage_preimage", ["order_iso"]], ["del", "theorem", "symm_refl", ["order_iso"]], ["del", "theorem", "symm_symm", ["order_iso"]], ["del", "theorem", "to_equiv_symm", ["order_iso"]], ["del", "def", "to_order_embedding", ["order_iso"]], ["del", "def", "trans", ["order_iso"]], ["del", "theorem", "trans_apply", ["order_iso"]], ["del", "theorem", "trans_refl", ["order_iso"]], ["del", "def", "order_iso", []], ["del", "def", "order_embedding_of_lt_embedding", ["rel_embedding"]], ["del", "theorem", "order_embedding_of_lt_embedding_apply", ["rel_embedding"]]]}]}, {"timestamp": 1639423913, "sha": "b351ca98", "message": "chore(algebra/algebra/tower): golf ext lemma (#10756)\nIt turns out that we have both `algebra.ext` and `algebra.algebra_ext`, with slightly different statements.\nThis changes one to be proved in terms of the other.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}]}, {"timestamp": 1639423912, "sha": "3b2cf53d", "message": "feat(order/well_founded) Added `strict_mono.id_le_of_wo` (#10732)\nThis generalizes `strict_mono.id_le`.", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["add", "theorem", "self_le_of_strict_mono", ["function", "well_founded"]]]}]}, {"timestamp": 1639423911, "sha": "c895ddd9", "message": "feat(topology/algebra/group): add homeomorph.prod_units (#10725)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "def", "prod_units", ["units", "homeomorph"]]]}]}, {"timestamp": 1639423910, "sha": "ad88a836", "message": "feat(probability_theory/martingale): add super/sub-martingales (#10710)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/probability_theory/martingale.lean", "newPath": "src/probability_theory/martingale.lean", "changes": [["add", "theorem", "set_integral_eq", ["measure_theory", "martingale"]], ["add", "theorem", "submartingale", ["measure_theory", "martingale"]], ["add", "theorem", "supermartingale", ["measure_theory", "martingale"]], ["add", "theorem", "martingale_iff", ["measure_theory"]], ["add", "theorem", "adapted", ["measure_theory", "submartingale"]], ["add", "theorem", "add", ["measure_theory", "submartingale"]], ["add", "theorem", "add_martingale", ["measure_theory", "submartingale"]], ["add", "theorem", "ae_le_condexp", ["measure_theory", "submartingale"]], ["add", "theorem", "integrable", ["measure_theory", "submartingale"]], ["add", "theorem", "measurable", ["measure_theory", "submartingale"]], ["add", "theorem", "neg", ["measure_theory", "submartingale"]], ["add", "theorem", "set_integral_le", ["measure_theory", "submartingale"]], ["add", "theorem", "smul_nonneg", ["measure_theory", "submartingale"]], ["add", "theorem", "smul_nonpos", ["measure_theory", "submartingale"]], ["add", "theorem", "sub_martingale", ["measure_theory", "submartingale"]], ["add", "theorem", "sub_supermartingale", ["measure_theory", "submartingale"]], ["add", "def", "submartingale", ["measure_theory"]], ["add", "theorem", "adapted", ["measure_theory", "supermartingale"]], ["add", "theorem", "add", ["measure_theory", "supermartingale"]], ["add", "theorem", "add_martingale", ["measure_theory", "supermartingale"]], ["add", "theorem", "condexp_ae_le", ["measure_theory", "supermartingale"]], ["add", "theorem", "integrable", ["measure_theory", "supermartingale"]], ["add", "theorem", "measurable", ["measure_theory", "supermartingale"]], ["add", "theorem", "neg", ["measure_theory", "supermartingale"]], ["add", "theorem", "set_integral_le", ["measure_theory", "supermartingale"]], ["add", "theorem", "smul_nonneg", ["measure_theory", "supermartingale"]], ["add", "theorem", "smul_nonpos", ["measure_theory", "supermartingale"]], ["add", "theorem", "sub_martingale", ["measure_theory", "supermartingale"]], ["add", "theorem", "sub_submartingale", ["measure_theory", "supermartingale"]], ["add", "def", "supermartingale", ["measure_theory"]]]}]}, {"timestamp": 1639423909, "sha": "c7e355d3", "message": "feat(algebra/big_operators/finprod): add div lemmas (#10472)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_cond_ne", []], ["mod", "theorem", "finprod_div_distrib", []], ["add", "theorem", "finprod_div_distrib₀", []], ["add", "theorem", "finprod_inv_distrib₀", []], ["mod", "theorem", "finprod_mem_div_distrib", []], ["add", "theorem", "finprod_mem_div_distrib₀", []], ["add", "theorem", "finprod_mem_inv_distrib₀", []], ["add", "theorem", "mul_finprod_cond_ne", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "inv₀", ["mul_equiv"]], ["add", "theorem", "inv₀_symm", ["mul_equiv"]]]}]}, {"timestamp": 1639416909, "sha": "0c0ee7b0", "message": "refactor(data/set/pairwise): Make arguments of `set.pairwise` semi-implicit (#10740)\nThe previous definition was `∀ x ∈ s, ∀ y ∈ s, x ≠ y → r x y`. It now is `∀ ⦃x⦄, x ∈ s → ∀ ⦃y⦄, y ∈ s → x ≠ y → r x y`.\nThe explicitness resulted in a lot of useless `_` and general pain using `set.pairwise`, `set.pairwise_disjoint`, `zorn.chain`, `is_antichain`...", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["mod", "theorem", "finprod_mem_sUnion", []]]}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/convex/strict.lean", "newPath": "src/analysis/convex/strict.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/partition.lean", "newPath": "src/combinatorics/simple_graph/partition.lean", "changes": []}, {"oldPath": "src/data/finset/pairwise.lean", "newPath": "src/data/finset/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/order/antichain.lean", "newPath": "src/order/antichain.lean", "changes": []}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime/lemmas.lean", "newPath": "src/ring_theory/coprime/lemmas.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1639409608, "sha": "ee8de4cf", "message": "doc(linear_algebra/finite_dimensional): update doc to new definition (#10758)\n`finite_dimensional` is now (since a couple of months) defined to be `module.finite`. The lines modified by this PR are about the old definition.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1639409607, "sha": "108eb0b2", "message": "feat(combinatorics/additive/salem_spencer): Salem-Spencer sets and Roth numbers (#10509)\nThis defines Salem-Spencer sets and Roth numbers in (additive) monoids.", "changes": [{"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": [["add", "theorem", "mul_left_embedding_eq_mul_right_embedding", []]]}, {"oldPath": null, "newPath": "src/combinatorics/additive/salem_spencer.lean", "changes": [["add", "theorem", "add_roth_number_Ico", []], ["add", "theorem", "le_roth_number_nat", ["add_salem_spencer"]], ["add", "theorem", "add_salem_spencer_iff_eq_right", []], ["add", "theorem", "le_mul_roth_number_product", []], ["add", "def", "mul_roth_number", []], ["add", "theorem", "mul_roth_number_empty", []], ["add", "theorem", "mul_roth_number_le", []], ["add", "theorem", "mul_roth_number_lt_of_forall_not_mul_salem_spencer", []], ["add", "theorem", "mul_roth_number_map_mul_left", []], ["add", "theorem", "mul_roth_number_map_mul_right", []], ["add", "theorem", "mul_roth_number_singleton", []], ["add", "theorem", "mul_roth_number_spec", []], ["add", "theorem", "mul_roth_number_union_le", []], ["add", "theorem", "le_mul_roth_number", ["mul_salem_spencer"]], ["add", "theorem", "mono", ["mul_salem_spencer"]], ["add", "theorem", "mul_left", ["mul_salem_spencer"]], ["add", "theorem", "mul_left₀", ["mul_salem_spencer"]], ["add", "theorem", "mul_right", ["mul_salem_spencer"]], ["add", "theorem", "mul_right₀", ["mul_salem_spencer"]], ["add", "theorem", "prod", ["mul_salem_spencer"]], ["add", "theorem", "roth_number_eq", ["mul_salem_spencer"]], ["add", "def", "mul_salem_spencer", []], ["add", "theorem", "mul_salem_spencer_empty", []], ["add", "theorem", "mul_salem_spencer_insert", []], ["add", "theorem", "mul_salem_spencer_insert_of_lt", []], ["add", "theorem", "mul_salem_spencer_mul_left_iff", []], ["add", "theorem", "mul_salem_spencer_mul_left_iff₀", []], ["add", "theorem", "mul_salem_spencer_mul_right_iff", []], ["add", "theorem", "mul_salem_spencer_mul_right_iff₀", []], ["add", "theorem", "mul_salem_spencer_pair", []], ["add", "theorem", "mul_salem_spencer_pi", []], ["add", "theorem", "mul_salem_spencer_singleton", []], ["add", "def", "roth_number_nat", []], ["add", "theorem", "roth_number_nat_add_le", []], ["add", "theorem", "roth_number_nat_def", []], ["add", "theorem", "roth_number_nat_is_O_id", []], ["add", "theorem", "roth_number_nat_is_O_with_id", []], ["add", "theorem", "roth_number_nat_le", []], ["add", "theorem", "roth_number_nat_spec", []], ["add", "theorem", "roth_number_nat_zero", []], ["add", "theorem", "mul_salem_spencer", ["set", "subsingleton"]]]}, {"oldPath": "src/data/finset/preimage.lean", "newPath": "src/data/finset/preimage.lean", "changes": [["add", "theorem", "preimage_subset", ["finset"]], ["add", "theorem", "subset_map_iff", ["finset"]]]}]}, {"timestamp": 1639409606, "sha": "e1747364", "message": "feat(ring_theory/unique_factorization_domain): add count lemmas (#10475)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "count_ne_zero_iff_dvd", ["associates"]], ["add", "theorem", "eq_factors_of_eq_counts", ["associates"]], ["add", "theorem", "eq_of_eq_counts", ["associates"]], ["add", "theorem", "factors_eq_none_iff_zero", ["associates"]], ["add", "theorem", "factors_eq_some_iff_ne_zero", ["associates"]], ["add", "theorem", "factors_subsingleton", ["associates"]]]}]}, {"timestamp": 1639409605, "sha": "efbbb767", "message": "feat(ring_theory/graded_algebra): `homogeneous_element` (#10118)\nThis pr is about what `homogeneous_element` of graded ring is.\nWe need this definition to make the definition of homogeneous ideal more natural, i.e. we can say that a homogeneous ideal is just an ideal spanned by homogeneous elements.", "changes": [{"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "theorem", "smul", ["set_like", "is_homogeneous"]], ["add", "theorem", "is_homogeneous_zero_submodule", ["set_like"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "def", "homogeneous_submonoid", ["set_like"]], ["add", "theorem", "mul", ["set_like", "is_homogeneous"]], ["add", "def", "is_homogeneous", ["set_like"]], ["add", "theorem", "is_homogeneous_one", ["set_like"]]]}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["mod", "theorem", "mem_support_iff", ["graded_algebra"]]]}]}, {"timestamp": 1639402558, "sha": "1589c7b4", "message": "feat(linear_algebra/determinant): determinant of a linear equivalence as a unit (#10751)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "coe_det", ["linear_equiv"]], ["add", "theorem", "coe_inv_det", ["linear_equiv"]], ["add", "theorem", "det_refl", ["linear_equiv"]], ["add", "theorem", "det_symm", ["linear_equiv"]], ["add", "theorem", "det_trans", ["linear_equiv"]]]}]}, {"timestamp": 1639402557, "sha": "324a605f", "message": "chore(order): rename `preorder_hom` to `order_hom` (#10750)\nFor consistency with `order_embedding` and `order_iso`, this PR renames `preorder_hom` to `order_hom`, at the request of @YaelDillies.", "changes": [{"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["add", "theorem", "mk_to_order_hom", ["simplex_category", "hom"]], ["add", "theorem", "mk_to_order_hom_apply", ["simplex_category", "hom"]], ["del", "theorem", "mk_to_preorder_hom", ["simplex_category", "hom"]], ["del", "theorem", "mk_to_preorder_hom_apply", ["simplex_category", "hom"]], ["add", "def", "to_order_hom", ["simplex_category", "hom"]], ["add", "theorem", "to_order_hom_mk", ["simplex_category", "hom"]], ["del", "def", "to_preorder_hom", ["simplex_category", "hom"]], ["del", "theorem", "to_preorder_hom_mk", ["simplex_category", "hom"]]]}, {"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": [["add", "def", "as_order_hom", ["sSet"]], ["del", "def", "as_preorder_hom", ["sSet"]]]}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/data/finset/option.lean", "newPath": "src/data/finset/option.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": [["add", "def", "gfp", ["order_hom"]], ["add", "theorem", "gfp_const_inf_le", ["order_hom"]], ["add", "theorem", "gfp_gfp", ["order_hom"]], ["add", "theorem", "gfp_induction", ["order_hom"]], ["add", "theorem", "gfp_le", ["order_hom"]], ["add", "theorem", "gfp_le_map", ["order_hom"]], ["add", "theorem", "is_fixed_pt_gfp", ["order_hom"]], ["add", "theorem", "is_fixed_pt_lfp", ["order_hom"]], ["add", "theorem", "is_greatest_gfp", ["order_hom"]], ["add", "theorem", "is_greatest_gfp_le", ["order_hom"]], ["add", "theorem", "is_least_lfp", ["order_hom"]], ["add", "theorem", "is_least_lfp_le", ["order_hom"]], ["add", "theorem", "le_gfp", ["order_hom"]], ["add", "theorem", "le_lfp", ["order_hom"]], ["add", "theorem", "le_map_Sup_subset_fixed_points", ["order_hom"]], ["add", "theorem", "le_map_sup_fixed_points", ["order_hom"]], ["add", "theorem", "le_next_fixed", ["order_hom"]], ["add", "theorem", "le_prev_fixed", ["order_hom"]], ["add", "theorem", "le_prev_fixed_iff", ["order_hom"]], ["add", "def", "lfp", ["order_hom"]], ["add", "theorem", "lfp_induction", ["order_hom"]], ["add", "theorem", "lfp_le", ["order_hom"]], ["add", "theorem", "lfp_le_fixed", ["order_hom"]], ["add", "theorem", "lfp_le_map", ["order_hom"]], ["add", "theorem", "lfp_lfp", ["order_hom"]], ["add", "theorem", "map_Inf_subset_fixed_points_le", ["order_hom"]], ["add", "theorem", "map_gfp", ["order_hom"]], ["add", "theorem", "map_gfp_comp", ["order_hom"]], ["add", "theorem", "map_inf_fixed_points_le", ["order_hom"]], ["add", "theorem", "map_le_gfp", ["order_hom"]], ["add", "theorem", "map_le_lfp", ["order_hom"]], ["add", "theorem", "map_lfp", ["order_hom"]], ["add", "theorem", "map_lfp_comp", ["order_hom"]], ["add", "def", "next_fixed", ["order_hom"]], ["add", "theorem", "next_fixed_le", ["order_hom"]], ["add", "theorem", "next_fixed_le_iff", ["order_hom"]], ["add", "def", "prev_fixed", ["order_hom"]], ["add", "theorem", "prev_fixed_le", ["order_hom"]], ["del", "def", "gfp", ["preorder_hom"]], ["del", "theorem", "gfp_const_inf_le", ["preorder_hom"]], ["del", "theorem", "gfp_gfp", ["preorder_hom"]], ["del", "theorem", "gfp_induction", ["preorder_hom"]], ["del", "theorem", "gfp_le", ["preorder_hom"]], ["del", "theorem", "gfp_le_map", ["preorder_hom"]], ["del", "theorem", "is_fixed_pt_gfp", ["preorder_hom"]], ["del", "theorem", "is_fixed_pt_lfp", ["preorder_hom"]], ["del", "theorem", "is_greatest_gfp", ["preorder_hom"]], ["del", "theorem", "is_greatest_gfp_le", ["preorder_hom"]], ["del", "theorem", "is_least_lfp", ["preorder_hom"]], ["del", "theorem", "is_least_lfp_le", ["preorder_hom"]], ["del", "theorem", "le_gfp", ["preorder_hom"]], ["del", "theorem", "le_lfp", ["preorder_hom"]], ["del", "theorem", "le_map_Sup_subset_fixed_points", ["preorder_hom"]], ["del", "theorem", "le_map_sup_fixed_points", ["preorder_hom"]], ["del", "theorem", "le_next_fixed", ["preorder_hom"]], ["del", "theorem", "le_prev_fixed", ["preorder_hom"]], ["del", "theorem", "le_prev_fixed_iff", ["preorder_hom"]], ["del", "def", "lfp", ["preorder_hom"]], ["del", "theorem", "lfp_induction", ["preorder_hom"]], ["del", "theorem", "lfp_le", ["preorder_hom"]], ["del", "theorem", "lfp_le_fixed", ["preorder_hom"]], ["del", "theorem", "lfp_le_map", ["preorder_hom"]], ["del", "theorem", "lfp_lfp", ["preorder_hom"]], ["del", "theorem", "map_Inf_subset_fixed_points_le", ["preorder_hom"]], ["del", "theorem", "map_gfp", ["preorder_hom"]], ["del", "theorem", "map_gfp_comp", ["preorder_hom"]], ["del", "theorem", "map_inf_fixed_points_le", ["preorder_hom"]], ["del", "theorem", "map_le_gfp", ["preorder_hom"]], ["del", "theorem", "map_le_lfp", ["preorder_hom"]], ["del", "theorem", "map_lfp", ["preorder_hom"]], ["del", "theorem", "map_lfp_comp", ["preorder_hom"]], ["del", "def", "next_fixed", ["preorder_hom"]], ["del", "theorem", "next_fixed_le", ["preorder_hom"]], ["del", "theorem", "next_fixed_le_iff", ["preorder_hom"]], ["del", "def", "prev_fixed", ["preorder_hom"]], ["del", "theorem", "prev_fixed_le", ["preorder_hom"]]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "map_id", ["omega_complete_partial_order", "chain"]], ["mod", "theorem", "continuous_const", ["omega_complete_partial_order"]], ["mod", "structure", "continuous_hom", ["omega_complete_partial_order"]], ["mod", "theorem", "continuous_id", ["omega_complete_partial_order"]], ["add", "def", "bind", ["order_hom"]], ["del", "def", "bind", ["preorder_hom"]]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/order_hom.lean", "changes": [["add", "def", "to_order_hom", ["order_embedding"]], ["del", "def", "to_preorder_hom", ["order_embedding"]], ["add", "theorem", "Inf_apply", ["order_hom"]], ["add", "theorem", "Sup_apply", ["order_hom"]], ["add", "def", "apply", ["order_hom"]], ["add", "theorem", "apply_mono", ["order_hom"]], ["add", "def", "coe_fn_hom", ["order_hom"]], ["add", "theorem", "coe_fun_mk", ["order_hom"]], ["add", "theorem", "coe_infi", ["order_hom"]], ["add", "theorem", "coe_le_coe", ["order_hom"]], ["add", "theorem", "coe_supr", ["order_hom"]], ["add", "def", "comp", ["order_hom"]], ["add", "theorem", "comp_const", ["order_hom"]], ["add", "theorem", "comp_id", ["order_hom"]], ["add", "theorem", "comp_mono", ["order_hom"]], ["add", "theorem", "comp_prod_comp_same", ["order_hom"]], ["add", "def", "compₘ", ["order_hom"]], ["add", "def", "const", ["order_hom"]], ["add", "theorem", "const_comp", ["order_hom"]], ["add", "def", "curry", ["order_hom"]], ["add", "theorem", "curry_apply", ["order_hom"]], ["add", "theorem", "curry_symm_apply", ["order_hom"]], ["add", "def", "diag", ["order_hom"]], ["add", "def", "dual_iso", ["order_hom"]], ["add", "theorem", "ext", ["order_hom"]], ["add", "def", "fst", ["order_hom"]], ["add", "theorem", "fst_comp_prod", ["order_hom"]], ["add", "theorem", "fst_prod_snd", ["order_hom"]], ["add", "def", "id", ["order_hom"]], ["add", "theorem", "id_comp", ["order_hom"]], ["add", "theorem", "infi_apply", ["order_hom"]], ["add", "theorem", "iterate_sup_le_sup_iff", ["order_hom"]], ["add", "theorem", "le_def", ["order_hom"]], ["add", "theorem", "mk_le_mk", ["order_hom"]], ["add", "def", "on_diag", ["order_hom"]], ["add", "theorem", "order_hom_eq_id", ["order_hom"]], ["add", "def", "pi", ["order_hom"]], ["add", "def", "pi_iso", ["order_hom"]], ["add", "def", "prod_iso", ["order_hom"]], ["add", "def", "prod_map", ["order_hom"]], ["add", "theorem", "prod_mono", ["order_hom"]], ["add", "def", "prodₘ", ["order_hom"]], ["add", "def", "snd", ["order_hom"]], ["add", "theorem", "snd_comp_prod", ["order_hom"]], ["add", "def", "val", ["order_hom", "subtype"]], ["add", "theorem", "supr_apply", ["order_hom"]], ["add", "theorem", "to_fun_eq_coe", ["order_hom"]], ["add", "def", "unique", ["order_hom"]], ["add", "structure", "order_hom", []], ["add", "def", "eval_order_hom", ["pi"]], ["del", "def", "eval_preorder_hom", ["pi"]], ["del", "theorem", "Inf_apply", ["preorder_hom"]], ["del", "theorem", "Sup_apply", ["preorder_hom"]], ["del", "def", "apply", ["preorder_hom"]], ["del", "theorem", "apply_mono", ["preorder_hom"]], ["del", "def", "coe_fn_hom", ["preorder_hom"]], ["del", "theorem", "coe_fun_mk", ["preorder_hom"]], ["del", "theorem", "coe_infi", ["preorder_hom"]], ["del", "theorem", "coe_le_coe", ["preorder_hom"]], ["del", "theorem", "coe_supr", ["preorder_hom"]], ["del", "def", "comp", ["preorder_hom"]], ["del", "theorem", "comp_const", ["preorder_hom"]], ["del", "theorem", "comp_id", ["preorder_hom"]], ["del", "theorem", "comp_mono", ["preorder_hom"]], ["del", "theorem", "comp_prod_comp_same", ["preorder_hom"]], ["del", "def", "compₘ", ["preorder_hom"]], ["del", "def", "const", ["preorder_hom"]], ["del", "theorem", "const_comp", ["preorder_hom"]], ["del", "def", "curry", ["preorder_hom"]], ["del", "theorem", "curry_apply", ["preorder_hom"]], ["del", "theorem", "curry_symm_apply", ["preorder_hom"]], ["del", "def", "diag", ["preorder_hom"]], ["del", "def", "dual_iso", ["preorder_hom"]], ["del", "theorem", "ext", ["preorder_hom"]], ["del", "def", "fst", ["preorder_hom"]], ["del", "theorem", "fst_comp_prod", ["preorder_hom"]], ["del", "theorem", "fst_prod_snd", ["preorder_hom"]], ["del", "def", "id", ["preorder_hom"]], ["del", "theorem", "id_comp", ["preorder_hom"]], ["del", "theorem", "infi_apply", ["preorder_hom"]], ["del", "theorem", "iterate_sup_le_sup_iff", ["preorder_hom"]], ["del", "theorem", "le_def", ["preorder_hom"]], ["del", "theorem", "mk_le_mk", ["preorder_hom"]], ["del", "def", "on_diag", ["preorder_hom"]], ["del", "def", "pi", ["preorder_hom"]], ["del", "def", "pi_iso", ["preorder_hom"]], ["del", "theorem", "preorder_hom_eq_id", ["preorder_hom"]], ["del", "def", "prod_iso", ["preorder_hom"]], ["del", "def", "prod_map", ["preorder_hom"]], ["del", "theorem", "prod_mono", ["preorder_hom"]], ["del", "def", "prodₘ", ["preorder_hom"]], ["del", "def", "snd", ["preorder_hom"]], ["del", "theorem", "snd_comp_prod", ["preorder_hom"]], ["del", "def", "val", ["preorder_hom", "subtype"]], ["del", "theorem", "supr_apply", ["preorder_hom"]], ["del", "theorem", "to_fun_eq_coe", ["preorder_hom"]], ["del", "def", "unique", ["preorder_hom"]], ["del", "structure", "preorder_hom", []], ["add", "theorem", "to_order_hom_injective", ["rel_embedding"]], ["del", "theorem", "to_preorder_hom_injective", ["rel_embedding"]], ["add", "def", "to_order_hom", ["rel_hom"]], ["del", "def", "to_preorder_hom", ["rel_hom"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "theorem", "comap_id", ["topological_space", "opens"]]]}]}, {"timestamp": 1639402556, "sha": "35cd7c0c", "message": "refactor(set_theory/ordinal_arithmetic) Separate `is_normal.lt_iff` (#10745)\nWe split off `is_normal.strict_mono` from `is_normal.lt_iff`. The reasoning is that normal functions are usually defined as being strictly monotone, so this should be a separate theorem.", "changes": [{"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "strict_mono", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1639396414, "sha": "7697ec6e", "message": "feat(analysis/special_function/integrals): integral of `x ^ r`, `r : ℝ`, and `x ^ n`, `n : ℤ` (#10650)\nAlso generalize `has_deriv_at.div_const` etc.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_div_const", []], ["mod", "theorem", "deriv_within_div_const", []], ["mod", "theorem", "div_const", ["differentiable"]], ["mod", "theorem", "div_const", ["differentiable_at"]], ["mod", "theorem", "div_const", ["differentiable_on"]], ["mod", "theorem", "div_const", ["differentiable_within_at"]], ["add", "theorem", "div_const", ["has_deriv_at"]], ["add", "theorem", "div_const", ["has_deriv_within_at"]], ["add", "theorem", "div_const", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["mod", "theorem", "integral_pow", []], ["add", "theorem", "integral_rpow", []], ["add", "theorem", "integral_zpow", []], ["add", "theorem", "interval_integrable_rpow", ["interval_integral"]], ["add", "theorem", "interval_integrable_zpow", ["interval_integral"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "rpow_int_cast", ["real"]], ["mod", "theorem", "rpow_nat_cast", ["real"]]]}]}, {"timestamp": 1639388201, "sha": "779517b6", "message": "feat(algebra/order/floor): Floor of `a / n` and other lemmas (#10748)\nA few floor lemmas + one `tsub` lemma", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["add", "theorem", "floor_le_ceil", ["int"]], ["add", "theorem", "floor_div_eq_div", ["nat"]], ["add", "theorem", "floor_div_nat", ["nat"]], ["add", "theorem", "floor_le_ceil", ["nat"]], ["add", "theorem", "floor_sub_nat", ["nat"]]]}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "tsub_nonpos", []]]}]}, {"timestamp": 1639388200, "sha": "563c3643", "message": "chore(topology/maps): golf, use section vars (#10747)\nAlso add `quotient_map.is_closed_preimage`", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["del", "theorem", "continuous", ["inducing"]], ["del", "theorem", "is_open_map", ["inducing"]]]}]}, {"timestamp": 1639388198, "sha": "10fb7f91", "message": "feat(archive/imo): IMO 2005 problem 4 (modular arithmetic) (#10746)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2005_q4.lean", "changes": [["add", "def", "a", []], ["add", "theorem", "find_specified_factor", []]]}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["add", "theorem", "pow_card_sub_one_eq_one", ["int", "modeq"]]]}]}, {"timestamp": 1639388197, "sha": "9d73418c", "message": "split(data/set/prod): split off `data.set.basic` (#10739)\nThis moves `set.prod`, `set.pi` and `set.diagonal` from `data.set.basic` to a new file `data.set.prod`.\nI'm crediting\n* Mario for `set.prod` from bd013e8089378e8057dc7e93c9eaf2c8ebaf25a2\n* Johannes for `set.pi` from da7bbd7fc2c80a785f7992bb7751304f6cafe235\n* Patrick for `set.diagonal` from #3118", "changes": [{"oldPath": "archive/imo/imo1972_b2.lean", "newPath": "archive/imo/imo1972_b2.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q2.lean", "newPath": "archive/imo/imo2008_q2.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "def", "diagonal", ["set"]], ["del", "theorem", "diagonal_eq_range", ["set"]], ["del", "theorem", "empty_pi", ["set"]], ["del", "theorem", "empty_prod", ["set"]], ["del", "theorem", "eval_image_pi", ["set"]], ["del", "theorem", "eval_image_univ_pi", ["set"]], ["del", "theorem", "eval_preimage'", ["set"]], ["del", "theorem", "eval_preimage", ["set"]], ["del", "theorem", "exists_prod_set", ["set"]], ["del", "theorem", "forall_prod_set", ["set"]], ["del", "theorem", "fst_image_prod", ["set"]], ["del", "theorem", "fst_image_prod_subset", ["set"]], ["del", "theorem", "image_prod", ["set"]], ["mod", "theorem", "image_swap_eq_preimage_swap", ["set"]], ["del", "theorem", "image_swap_prod", ["set"]], ["del", "theorem", "insert_pi", ["set"]], ["del", "theorem", "insert_prod", ["set"]], ["del", "theorem", "mem_diagonal", ["set"]], ["del", "theorem", "mem_pi", ["set"]], ["del", "theorem", "mem_prod", ["set"]], ["del", "theorem", "mem_prod_eq", ["set"]], ["del", "theorem", "mem_univ_pi", ["set"]], ["del", "theorem", "mk_mem_prod", ["set"]], ["del", "theorem", "mk_preimage_prod", ["set"]], ["del", "theorem", "mk_preimage_prod_left", ["set"]], ["del", "theorem", "mk_preimage_prod_left_eq_empty", ["set"]], ["del", "theorem", "mk_preimage_prod_left_eq_if", ["set"]], ["del", "theorem", "mk_preimage_prod_left_fn_eq_if", ["set"]], ["del", "theorem", "mk_preimage_prod_right", ["set"]], ["del", "theorem", "mk_preimage_prod_right_eq_empty", ["set"]], ["del", "theorem", "mk_preimage_prod_right_eq_if", ["set"]], ["del", "theorem", "mk_preimage_prod_right_fn_eq_if", ["set"]], ["del", "theorem", "fst", ["set", "nonempty"]], ["del", "theorem", "prod", ["set", "nonempty"]], ["del", "theorem", "snd", ["set", "nonempty"]], ["del", "def", "pi", ["set"]], ["del", "theorem", "pi_congr", ["set"]], ["del", "theorem", "pi_eq_empty", ["set"]], ["del", "theorem", "pi_eq_empty_iff", ["set"]], ["del", "theorem", "pi_if", ["set"]], ["del", "theorem", "pi_inter_compl", ["set"]], ["del", "theorem", "pi_inter_distrib", ["set"]], ["del", "theorem", "pi_mono", ["set"]], ["del", "theorem", "pi_nonempty_iff", ["set"]], ["del", "theorem", "pi_univ", ["set"]], ["del", "theorem", "pi_update_of_mem", ["set"]], ["del", "theorem", "pi_update_of_not_mem", ["set"]], ["del", "theorem", "preimage_coe_coe_diagonal", ["set"]], ["del", "theorem", "preimage_prod_map_prod", ["set"]], ["del", "theorem", "preimage_swap_prod", ["set"]], ["del", "theorem", "prod_diff_prod", ["set"]], ["del", "theorem", "prod_empty", ["set"]], ["del", "theorem", "prod_eq", ["set"]], ["del", "theorem", "prod_eq_empty_iff", ["set"]], ["del", "theorem", "prod_image_image_eq", ["set"]], ["del", "theorem", "prod_insert", ["set"]], ["del", "theorem", "prod_inter_prod", ["set"]], ["del", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["del", "theorem", "prod_mono", ["set"]], ["del", "theorem", "prod_nonempty_iff", ["set"]], ["del", "theorem", "prod_preimage_eq", ["set"]], ["del", "theorem", "prod_preimage_left", ["set"]], ["del", "theorem", "prod_preimage_right", ["set"]], ["del", "theorem", "prod_range_range_eq", ["set"]], ["del", "theorem", "prod_range_univ_eq", ["set"]], ["del", "theorem", "prod_singleton", ["set"]], ["del", "theorem", "prod_sub_preimage_iff", ["set"]], ["del", "theorem", "prod_subset_iff", ["set"]], ["del", "theorem", "prod_subset_preimage_fst", ["set"]], ["del", "theorem", "prod_subset_preimage_snd", ["set"]], ["del", "theorem", "prod_subset_prod_iff", ["set"]], ["del", "theorem", "prod_union", ["set"]], ["del", "theorem", "prod_univ", ["set"]], ["del", "theorem", "prod_univ_range_eq", ["set"]], ["del", "theorem", "range_dcomp", ["set"]], ["del", "theorem", "range_pair_subset", ["set"]], ["del", "theorem", "range_prod_map", ["set"]], ["del", "theorem", "singleton_pi'", ["set"]], ["del", "theorem", "singleton_pi", ["set"]], ["del", "theorem", "singleton_prod", ["set"]], ["del", "theorem", "singleton_prod_singleton", ["set"]], ["del", "theorem", "snd_image_prod", ["set"]], ["del", "theorem", "snd_image_prod_subset", ["set"]], ["del", "theorem", "subset_pi_eval_image", ["set"]], ["del", "theorem", "union_pi", ["set"]], ["del", "theorem", "union_prod", ["set"]], ["del", "theorem", "univ_pi_empty", ["set"]], ["del", "theorem", "univ_pi_eq_empty", ["set"]], ["del", "theorem", "univ_pi_eq_empty_iff", ["set"]], ["del", "theorem", "univ_pi_ite", ["set"]], ["del", "theorem", "univ_pi_nonempty_iff", ["set"]], ["del", "theorem", "univ_pi_update", ["set"]], ["del", "theorem", "univ_pi_update_univ", ["set"]], ["del", "theorem", "univ_prod", ["set"]], ["del", "theorem", "univ_prod_univ", ["set"]], ["del", "theorem", "update_preimage_pi", ["set"]], ["del", "theorem", "update_preimage_univ_pi", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/set/prod.lean", "changes": [["add", "def", "diagonal", ["set"]], ["add", "theorem", "diagonal_eq_range", ["set"]], ["add", "theorem", "empty_pi", ["set"]], ["add", "theorem", "empty_prod", ["set"]], ["add", "theorem", "eval_image_pi", ["set"]], ["add", "theorem", "eval_image_univ_pi", ["set"]], ["add", "theorem", "eval_preimage'", ["set"]], ["add", "theorem", "eval_preimage", ["set"]], ["add", "theorem", "exists_prod_set", ["set"]], ["add", "theorem", "forall_prod_set", ["set"]], ["add", "theorem", "fst_image_prod", ["set"]], ["add", "theorem", "fst_image_prod_subset", ["set"]], ["add", "theorem", "image_prod", ["set"]], ["add", "theorem", "image_swap_prod", ["set"]], ["add", "theorem", "insert_pi", ["set"]], ["add", "theorem", "insert_prod", ["set"]], ["add", "theorem", "mem_diagonal", ["set"]], ["add", "theorem", "mem_pi", ["set"]], ["add", "theorem", "mem_prod", ["set"]], ["add", "theorem", "mem_prod_eq", ["set"]], ["add", "theorem", "mem_univ_pi", ["set"]], ["add", "theorem", "mk_mem_prod", ["set"]], ["add", "theorem", "mk_preimage_prod", ["set"]], ["add", "theorem", "mk_preimage_prod_left", ["set"]], ["add", "theorem", "mk_preimage_prod_left_eq_empty", ["set"]], ["add", "theorem", "mk_preimage_prod_left_eq_if", ["set"]], ["add", "theorem", "mk_preimage_prod_left_fn_eq_if", ["set"]], ["add", "theorem", "mk_preimage_prod_right", ["set"]], ["add", "theorem", "mk_preimage_prod_right_eq_empty", ["set"]], ["add", "theorem", "mk_preimage_prod_right_eq_if", ["set"]], ["add", "theorem", "mk_preimage_prod_right_fn_eq_if", ["set"]], ["add", "theorem", "fst", ["set", "nonempty"]], ["add", "theorem", "prod", ["set", "nonempty"]], ["add", "theorem", "snd", ["set", "nonempty"]], ["add", "def", "pi", ["set"]], ["add", "theorem", "pi_congr", ["set"]], ["add", "theorem", "pi_eq_empty", ["set"]], ["add", "theorem", "pi_eq_empty_iff", ["set"]], ["add", "theorem", "pi_if", ["set"]], ["add", "theorem", "pi_inter_compl", ["set"]], ["add", "theorem", "pi_inter_distrib", ["set"]], ["add", "theorem", "pi_mono", ["set"]], ["add", "theorem", "pi_nonempty_iff", ["set"]], ["add", "theorem", "pi_univ", ["set"]], ["add", "theorem", "pi_update_of_mem", ["set"]], ["add", "theorem", "pi_update_of_not_mem", ["set"]], ["add", "theorem", "preimage_coe_coe_diagonal", ["set"]], ["add", "theorem", "preimage_prod_map_prod", ["set"]], ["add", "theorem", "preimage_swap_prod", ["set"]], ["add", "theorem", "prod_diff_prod", ["set"]], ["add", "theorem", "prod_empty", ["set"]], ["add", "theorem", "prod_eq", ["set"]], ["add", "theorem", "prod_eq_empty_iff", ["set"]], ["add", "theorem", "prod_image_image_eq", ["set"]], ["add", "theorem", "prod_insert", ["set"]], ["add", "theorem", "prod_inter_prod", ["set"]], ["add", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["add", "theorem", "prod_mono", ["set"]], ["add", "theorem", "prod_nonempty_iff", ["set"]], ["add", "theorem", "prod_preimage_eq", ["set"]], ["add", "theorem", "prod_preimage_left", ["set"]], ["add", "theorem", "prod_preimage_right", ["set"]], ["add", "theorem", "prod_range_range_eq", ["set"]], ["add", "theorem", "prod_range_univ_eq", ["set"]], ["add", "theorem", "prod_singleton", ["set"]], ["add", "theorem", "prod_sub_preimage_iff", ["set"]], ["add", "theorem", "prod_subset_iff", ["set"]], ["add", "theorem", "prod_subset_preimage_fst", ["set"]], ["add", "theorem", "prod_subset_preimage_snd", ["set"]], ["add", "theorem", "prod_subset_prod_iff", ["set"]], ["add", "theorem", "prod_union", ["set"]], ["add", "theorem", "prod_univ", ["set"]], ["add", "theorem", "prod_univ_range_eq", ["set"]], ["add", "theorem", "range_dcomp", ["set"]], ["add", "theorem", "range_pair_subset", ["set"]], ["add", "theorem", "range_prod_map", ["set"]], ["add", "theorem", "singleton_pi'", ["set"]], ["add", "theorem", "singleton_pi", ["set"]], ["add", "theorem", "singleton_prod", ["set"]], ["add", "theorem", "singleton_prod_singleton", ["set"]], ["add", "theorem", "snd_image_prod", ["set"]], ["add", "theorem", "snd_image_prod_subset", ["set"]], ["add", "theorem", "subset_pi_eval_image", ["set"]], ["add", "theorem", "union_pi", ["set"]], ["add", "theorem", "union_prod", ["set"]], ["add", "theorem", "univ_pi_empty", ["set"]], ["add", "theorem", "univ_pi_eq_empty", ["set"]], ["add", "theorem", "univ_pi_eq_empty_iff", ["set"]], ["add", "theorem", "univ_pi_ite", ["set"]], ["add", "theorem", "univ_pi_nonempty_iff", ["set"]], ["add", "theorem", "univ_pi_update", ["set"]], ["add", "theorem", "univ_pi_update_univ", ["set"]], ["add", "theorem", "univ_prod", ["set"]], ["add", "theorem", "univ_prod_univ", ["set"]], ["add", "theorem", "update_preimage_pi", ["set"]], ["add", "theorem", "update_preimage_univ_pi", ["set"]]]}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "test/lift.lean", "newPath": "test/lift.lean", "changes": []}]}, {"timestamp": 1639388196, "sha": "e60899c5", "message": "feat(linear_algebra/orientation): inherit an action by `units R` on `module.ray R M` (#10738)\nThis action is just the action inherited on the elements of the module under the quotient.\nWe provide it generally for any group `G` that satisfies the required properties, but are only really interested in `G = units R`.\nThis PR also provides `module.ray.map`, for sending a ray through a linear equivalence.\nThis generalization also provides us with `mul_action (M ≃ₗ[R] M) (module.ray R M)`, which might also turn out to be useful.", "changes": [{"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "theorem", "linear_equiv_smul_eq_map", ["module", "ray"]], ["add", "def", "map", ["module", "ray"]], ["add", "theorem", "map_apply", ["module", "ray"]], ["add", "theorem", "map_refl", ["module", "ray"]], ["add", "theorem", "map_symm", ["module", "ray"]], ["add", "theorem", "units_smul_of_neg", ["module", "ray"]], ["add", "theorem", "units_smul_of_pos", ["module", "ray"]], ["add", "def", "map_linear_equiv", ["ray_vector"]], ["add", "theorem", "map", ["same_ray"]], ["add", "theorem", "smul", ["same_ray"]], ["add", "theorem", "same_ray_map_iff", []], ["mod", "theorem", "same_ray_neg_smul_left_iff", []], ["mod", "theorem", "same_ray_neg_smul_right_iff", []], ["mod", "theorem", "same_ray_smul_left_iff", []], ["mod", "theorem", "same_ray_smul_right_iff", []], ["add", "theorem", "smul_ray_of_ne_zero", []], ["add", "theorem", "units_smul_eq_neg_iff", []], ["add", "theorem", "units_smul_eq_self_iff", []]]}]}, {"timestamp": 1639388195, "sha": "ea88bd61", "message": "refactor(algebra/triv_sq_zero_ext): generalize and cleanup (#10729)\nThis:\n* Generalizes typeclass assumptions on many lemmas\n* Generalizes and adds missing typeclass instances on `triv_sq_zero_ext`, most notably the algebra structure over a different ring.\n* Reorders many of the lemmas in the file to ensure that the right arguments are implicit / explicit", "changes": [{"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": [["add", "theorem", "algebra_map_eq_inl'", ["triv_sq_zero_ext"]], ["add", "theorem", "algebra_map_eq_inl", ["triv_sq_zero_ext"]], ["add", "theorem", "algebra_map_eq_inl_hom", ["triv_sq_zero_ext"]], ["mod", "def", "fst_hom", ["triv_sq_zero_ext"]], ["mod", "theorem", "fst_smul", ["triv_sq_zero_ext"]], ["mod", "theorem", "inl_add", ["triv_sq_zero_ext"]], ["mod", "theorem", "inl_fst_add_inr_snd_eq", ["triv_sq_zero_ext"]], ["mod", "def", "inl_hom", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_smul", ["triv_sq_zero_ext"]], ["mod", "theorem", "inr_add", ["triv_sq_zero_ext"]], ["mod", "theorem", "inr_smul", ["triv_sq_zero_ext"]], ["mod", "theorem", "snd_smul", ["triv_sq_zero_ext"]], ["mod", "def", "triv_sq_zero_ext", []]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": []}]}, {"timestamp": 1639388194, "sha": "e70e22f2", "message": "feat(data/{list, multiset, finset}/range): add range_add (#10706)\nAdds `range_add` lemmas", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "range_add", ["finset"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "range_add", ["list"]]]}, {"oldPath": "src/data/multiset/range.lean", "newPath": "src/data/multiset/range.lean", "changes": [["add", "theorem", "range_add", ["multiset"]], ["add", "theorem", "range_add_eq_union", ["multiset"]], ["add", "theorem", "range_disjoint_map_add", ["multiset"]]]}]}, {"timestamp": 1639388192, "sha": "e4b6b5cc", "message": "feat(order/galois_connection): add lt_iff_lt (#10702)\nA lemma for galois connections on linear orders.", "changes": [{"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "lt_iff_lt", ["galois_connection"]]]}]}, {"timestamp": 1639388191, "sha": "29fecae5", "message": "feat(data/polynomial/degree/definitions): add pow lemmas (#10698)\nAdd lemmas `nat_degree_pow_le` and `coeff_pow_degree_mul_degree`", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "coeff_pow_mul_nat_degree", ["polynomial"]], ["add", "theorem", "nat_degree_pow_le", ["polynomial"]]]}]}, {"timestamp": 1639388190, "sha": "fb819501", "message": "feat(analysis/convex/basic): lemmas about midpoint and segment (#10682)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "mem_segment_add_sub", []], ["add", "theorem", "mem_segment_sub_add", []], ["add", "theorem", "midpoint_mem_segment", []]]}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": [["add", "theorem", "midpoint_add_sub", []], ["add", "theorem", "midpoint_neg_self", []], ["add", "theorem", "midpoint_self_neg", []], ["add", "theorem", "midpoint_sub_add", []]]}]}, {"timestamp": 1639388188, "sha": "f8171e09", "message": "feat(algebra/graded_monoid): dependent products (#10674)\nThis introduces `list.dprod`, which takes the (possibly non-commutative) product of a list of graded elements of type `A i`. This definition primarily exist to allow `graded_monoid.mk` and `direct_sum.of` to be pulled outside a product, such as in the new `graded_monoid.mk_list_dprod` and `direct_sum.of_list_dprod` lemmas added in this PR.", "changes": [{"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["add", "theorem", "list_prod_of_fn_of_eq_dprod", ["direct_sum"]], ["add", "theorem", "of_list_dprod", ["direct_sum"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "theorem", "list_prod_map_eq_dprod", ["graded_monoid"]], ["add", "theorem", "list_prod_of_fn_eq_dprod", ["graded_monoid"]], ["add", "theorem", "mk_list_dprod", ["graded_monoid"]], ["add", "def", "dprod", ["list"]], ["add", "theorem", "dprod_cons", ["list"]], ["add", "def", "dprod_index", ["list"]], ["add", "theorem", "dprod_index_cons", ["list"]], ["add", "theorem", "dprod_index_eq_map_sum", ["list"]], ["add", "theorem", "dprod_index_nil", ["list"]], ["add", "theorem", "dprod_monoid", ["list"]], ["add", "theorem", "dprod_nil", ["list"]], ["add", "theorem", "coe_list_dprod", ["set_like"]], ["add", "theorem", "list_dprod_eq", ["set_like"]]]}]}, {"timestamp": 1639388187, "sha": "309da201", "message": "feat(*): Random lemmas about adjoin/span. (#10666)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "pow_smul_mem_closure_smul", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "map_powers", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_attach_bUnion", ["submodule"]], ["add", "theorem", "span_smul_eq_of_is_unit", ["submodule"]], ["add", "theorem", "span_smul_le", ["submodule"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_Union", ["algebra"]], ["add", "theorem", "adjoin_attach_bUnion", ["algebra"]], ["add", "theorem", "adjoin_eq_Inf", ["algebra"]], ["add", "theorem", "pow_smul_mem_adjoin_smul", ["algebra"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "ideal_span_singleton_smul", ["submodule"]], ["add", "theorem", "mem_of_span_top_of_smul_mem", ["submodule"]], ["add", "theorem", "span_smul_eq", ["submodule"]], ["add", "theorem", "union_eq_smul_set", ["submodule"]]]}]}, {"timestamp": 1639388186, "sha": "e19473a9", "message": "feat(algebra/pointwise): Multiplying a singleton (#10660)\nand other lemmas about `finset.product` and singletons.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "mem_one", ["finset"]], ["add", "theorem", "mul_singleton", ["finset"]], ["del", "theorem", "mul_singleton_zero_subset", ["finset"]], ["add", "theorem", "mul_zero_subset", ["finset"]], ["add", "theorem", "mul_zero", ["finset", "nonempty"]], ["add", "theorem", "zero_mul", ["finset", "nonempty"]], ["add", "theorem", "one_subset", ["finset"]], ["add", "theorem", "singleton_mul", ["finset"]], ["add", "theorem", "singleton_mul_singleton", ["finset"]], ["del", "theorem", "singleton_zero_mul_subset", ["finset"]], ["add", "theorem", "zero_mul_subset", ["finset"]]]}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": [["add", "theorem", "product_singleton", ["finset"]], ["add", "theorem", "singleton_product", ["finset"]], ["add", "theorem", "singleton_product_singleton", ["finset"]]]}]}, {"timestamp": 1639388185, "sha": "ec48e3b9", "message": "feat(analysis/convex/strict): Strictly convex sets (#10648)\nThis defines strictly convex sets.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/strict.lean", "changes": [["add", "theorem", "strict_convex_Union", ["directed"]], ["add", "theorem", "strict_convex_sUnion", ["directed_on"]], ["add", "theorem", "strict_convex_iff", ["is_open"]], ["add", "theorem", "strict_convex", ["set", "subsingleton"]], ["add", "theorem", "add", ["strict_convex"]], ["add", "theorem", "add_left", ["strict_convex"]], ["add", "theorem", "add_right", ["strict_convex"]], ["add", "theorem", "add_smul_mem", ["strict_convex"]], ["add", "theorem", "add_smul_sub_mem", ["strict_convex"]], ["add", "theorem", "affine_image", ["strict_convex"]], ["add", "theorem", "affine_preimage", ["strict_convex"]], ["add", "theorem", "affinity", ["strict_convex"]], ["add", "theorem", "eq_of_open_segment_subset_frontier", ["strict_convex"]], ["add", "theorem", "is_linear_image", ["strict_convex"]], ["add", "theorem", "is_linear_preimage", ["strict_convex"]], ["add", "theorem", "linear_image", ["strict_convex"]], ["add", "theorem", "linear_preimage", ["strict_convex"]], ["add", "theorem", "mem_smul_of_zero_mem", ["strict_convex"]], ["add", "theorem", "neg", ["strict_convex"]], ["add", "theorem", "neg_preimage", ["strict_convex"]], ["add", "theorem", "open_segment_subset", ["strict_convex"]], ["add", "theorem", "preimage_add_left", ["strict_convex"]], ["add", "theorem", "preimage_add_right", ["strict_convex"]], ["add", "theorem", "preimage_smul", ["strict_convex"]], ["add", "theorem", "smul", ["strict_convex"]], ["add", "theorem", "smul_mem_of_zero_mem", ["strict_convex"]], ["add", "def", "strict_convex", []], ["add", "theorem", "strict_convex_Icc", []], ["add", "theorem", "strict_convex_Ici", []], ["add", "theorem", "strict_convex_Ico", []], ["add", "theorem", "strict_convex_Iic", []], ["add", "theorem", "strict_convex_Iio", []], ["add", "theorem", "strict_convex_Ioc", []], ["add", "theorem", "strict_convex_Ioi", []], ["add", "theorem", "strict_convex_Ioo", []], ["add", "theorem", "strict_convex_empty", []], ["add", "theorem", "strict_convex_iff_convex", []], ["add", "theorem", "strict_convex_iff_div", []], ["add", "theorem", "strict_convex_iff_open_segment_subset", []], ["add", "theorem", "strict_convex_iff_ord_connected", []], ["add", "theorem", "strict_convex_interval", []], ["add", "theorem", "strict_convex_singleton", []], ["add", "theorem", "strict_convex_univ", []]]}]}, {"timestamp": 1639388183, "sha": "2d47c1d6", "message": "feat(ring_theory/polynomial/cyclotomic/*): ɸₙ(1) = 1 (#10483)\n(for `n` not a prime power)", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": [["add", "theorem", "eval_one_cyclotomic_not_prime_pow", ["polynomial"]]]}]}, {"timestamp": 1639381980, "sha": "7cd8adb7", "message": "chore(category_theory/limits): Generalize universe for preserving limits (#10736)", "changes": [{"oldPath": "src/category_theory/closed/functor.lean", "newPath": "src/category_theory/closed/functor.lean", "changes": []}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/comma.lean", "newPath": "src/category_theory/limits/comma.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "def", "creates_colimits", ["category_theory"]], ["mod", "def", "creates_colimits_of_nat_iso", ["category_theory"]], ["add", "def", "creates_limits", ["category_theory"]], ["mod", "def", "creates_limits_of_nat_iso", ["category_theory"]], ["mod", "theorem", "has_colimits_of_has_colimits_creates_colimits", ["category_theory"]], ["mod", "theorem", "has_limits_of_has_limits_creates_limits", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["mod", "def", "fully_faithful_reflects_colimits", ["category_theory", "limits"]], ["mod", "def", "fully_faithful_reflects_limits", ["category_theory", "limits"]], ["add", "def", "preserves_colimits", ["category_theory", "limits"]], ["mod", "def", "preserves_colimits_of_nat_iso", ["category_theory", "limits"]], ["mod", "def", "preserves_colimits_of_reflects_of_preserves", ["category_theory", "limits"]], ["mod", "def", "preserves_colimits_of_shape_of_equiv", ["category_theory", "limits"]], ["add", "def", "preserves_limits", ["category_theory", "limits"]], ["mod", "def", "preserves_limits_of_nat_iso", ["category_theory", "limits"]], ["mod", "def", "preserves_limits_of_reflects_of_preserves", ["category_theory", "limits"]], ["mod", "def", "preserves_limits_of_shape_of_equiv", ["category_theory", "limits"]], ["add", "def", "reflects_colimits", ["category_theory", "limits"]], ["mod", "def", "reflects_colimits_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "reflects_limits", ["category_theory", "limits"]], ["mod", "def", "reflects_limits_of_nat_iso", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/finite.lean", "newPath": "src/category_theory/limits/preserves/finite.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": []}, {"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}]}, {"timestamp": 1639381979, "sha": "381b9541", "message": "feat(algebraic_geometry): An integral scheme is reduced and irreducible (#10733)", "changes": [{"oldPath": "src/algebra/category/CommRing/constructions.lean", "newPath": "src/algebra/category/CommRing/constructions.lean", "changes": [["add", "theorem", "subsingleton_of_is_terminal", ["CommRing"]]]}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": [["add", "theorem", "false_of_nontrivial_of_product_domain", []]]}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_geometry/properties.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": []}]}, {"timestamp": 1639381978, "sha": "214a80f3", "message": "feat(data/mv_polynomial/variables): API for mv_polynomial.degree_of (#10646)\nThis PR provides some API for `mv_polynomial.degree_of` for `comm_ring` and `comm_semiring`. I don't know which of these lemmas should be simp lemmas.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "count_finset_sup", ["multiset"]], ["del", "theorem", "count_sup", ["multiset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "support_neg", ["finsupp"]], ["add", "theorem", "support_sub", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["add", "theorem", "degree_of_sub_lt", ["mv_polynomial"]], ["add", "theorem", "support_sub", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "degree_of_C", ["mv_polynomial"]], ["add", "theorem", "degree_of_X", ["mv_polynomial"]], ["add", "theorem", "degree_of_add_le", ["mv_polynomial"]], ["add", "theorem", "degree_of_eq_sup", ["mv_polynomial"]], ["add", "theorem", "degree_of_lt_iff", ["mv_polynomial"]], ["add", "theorem", "degree_of_mul_X_eq", ["mv_polynomial"]], ["add", "theorem", "degree_of_mul_X_ne", ["mv_polynomial"]], ["add", "theorem", "degree_of_mul_le", ["mv_polynomial"]], ["add", "theorem", "monomial_le_degree_of", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1639381977, "sha": "8b8f08d0", "message": "feat(category_theory/limits): The associativity of pullbacks and pushouts. (#10619)\nAlso provides the pasting lemma for pullback (pushout) squares", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "big_square_is_pullback", ["category_theory", "limits"]], ["add", "def", "big_square_is_pushout", ["category_theory", "limits"]], ["add", "theorem", "has_pullback_assoc", ["category_theory", "limits"]], ["add", "theorem", "has_pullback_assoc_symm", ["category_theory", "limits"]], ["add", "theorem", "has_pushout_assoc", ["category_theory", "limits"]], ["add", "theorem", "has_pushout_assoc_symm", ["category_theory", "limits"]], ["add", "theorem", "inl_inl_pushout_assoc_hom", ["category_theory", "limits"]], ["add", "theorem", "inl_inl_pushout_left_pushout_inr_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "inl_inr_pushout_assoc_inv", ["category_theory", "limits"]], ["add", "theorem", "inl_pushout_assoc_inv", ["category_theory", "limits"]], ["add", "theorem", "inl_pushout_left_pushout_inr_iso_inv", ["category_theory", "limits"]], ["add", "theorem", "inr_inl_pushout_assoc_hom", ["category_theory", "limits"]], ["add", "theorem", "inr_inl_pushout_left_pushout_inr_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "inr_inr_pushout_assoc_inv", ["category_theory", "limits"]], ["add", "theorem", "inr_pushout_assoc_hom", ["category_theory", "limits"]], ["add", "theorem", "inr_pushout_left_pushout_inr_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "inr_pushout_left_pushout_inr_iso_inv", ["category_theory", "limits"]], ["add", "def", "left_square_is_pullback", ["category_theory", "limits"]], ["add", "def", "pullback_assoc", ["category_theory", "limits"]], ["add", "theorem", "pullback_assoc_hom_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_assoc_hom_snd_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_assoc_hom_snd_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_assoc_inv_fst_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_assoc_inv_fst_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_assoc_inv_snd", ["category_theory", "limits"]], ["add", "def", "pullback_assoc_is_pullback", ["category_theory", "limits"]], ["add", "def", "pullback_assoc_symm_is_pullback", ["category_theory", "limits"]], ["add", "def", "pullback_pullback_left_is_pullback", ["category_theory", "limits"]], ["add", "def", "pullback_pullback_right_is_pullback", ["category_theory", "limits"]], ["add", "def", "pullback_right_pullback_fst_iso", ["category_theory", "limits"]], ["add", "theorem", "pullback_right_pullback_fst_iso_hom_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_right_pullback_fst_iso_hom_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_right_pullback_fst_iso_inv_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_right_pullback_fst_iso_inv_snd_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_right_pullback_fst_iso_inv_snd_snd", ["category_theory", "limits"]], ["add", "def", "pushout_assoc", ["category_theory", "limits"]], ["add", "def", "pushout_assoc_is_pushout", ["category_theory", "limits"]], ["add", "def", "pushout_assoc_symm_is_pushout", ["category_theory", "limits"]], ["add", "def", "pushout_left_pushout_inr_iso", ["category_theory", "limits"]], ["add", "def", "pushout_pushout_left_is_pushout", ["category_theory", "limits"]], ["add", "def", "pushout_pushout_right_is_pushout", ["category_theory", "limits"]], ["add", "def", "right_square_is_pushout", ["category_theory", "limits"]]]}]}, {"timestamp": 1639381976, "sha": "b6b47ed5", "message": "feat(algebraic_geometry/presheafed_space): Open immersions of presheafed spaces has pullbacks. (#10069)", "changes": [{"oldPath": "src/algebraic_geometry/open_immersion.lean", "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "iso_of_range_eq", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "lift", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "lift_fac", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "lift_uniq", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_cone_of_left_condition", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_fst", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_is_limit", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "pullback_cone_of_left_lift", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_cone_of_left_lift_fst", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_cone_of_left_lift_snd", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "pullback_snd_is_iso_of_range_subset", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]]]}]}, {"timestamp": 1639379739, "sha": "fcd0f11c", "message": "feat(category_theory/flat_functor): Generalize results into algebraic categories. (#10735)\nAlso proves that the identity is flat, and compositions of flat functors are flat.", "changes": [{"oldPath": "src/category_theory/flat_functors.lean", "newPath": "src/category_theory/flat_functors.lean", "changes": [["mod", "def", "Lan_evaluation_iso_colim", ["category_theory"]]]}]}, {"timestamp": 1639354334, "sha": "06905422", "message": "feat(data/nat/prime): add `prime.dvd_mul_of_dvd_ne` (#10727)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "dvd_mul_of_dvd_ne", ["nat", "prime"]]]}]}, {"timestamp": 1639354332, "sha": "0c248b74", "message": "feat(algebra/{group,ring}/opposite): `{ring,monoid}_hom.from_opposite` (#10723)\nWe already have the `to_opposite` versions.", "changes": [{"oldPath": "src/algebra/group/opposite.lean", "newPath": "src/algebra/group/opposite.lean", "changes": [["add", "def", "from_opposite", ["monoid_hom"]]]}, {"oldPath": "src/algebra/ring/opposite.lean", "newPath": "src/algebra/ring/opposite.lean", "changes": [["add", "def", "from_opposite", ["ring_hom"]]]}]}, {"timestamp": 1639354331, "sha": "4b079496", "message": "chore(algebra/module/submodule): missing is_central_scalar instance (#10720)", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": []}]}, {"timestamp": 1639354330, "sha": "41def6a8", "message": "feat(algebra/tropical/big_operators): sum, prod, Inf (#10544)", "changes": [{"oldPath": null, "newPath": "src/algebra/tropical/big_operators.lean", "changes": [["add", "theorem", "trop_inf", ["finset"]], ["add", "theorem", "untrop_sum'", ["finset"]], ["add", "theorem", "untrop_sum", ["finset"]], ["add", "theorem", "trop_minimum", ["list"]], ["add", "theorem", "trop_sum", ["list"]], ["add", "theorem", "untrop_prod", ["list"]], ["add", "theorem", "trop_inf", ["multiset"]], ["add", "theorem", "trop_sum", ["multiset"]], ["add", "theorem", "untrop_prod", ["multiset"]], ["add", "theorem", "untrop_sum", ["multiset"]], ["add", "theorem", "trop_Inf_image", []], ["add", "theorem", "trop_infi", []], ["add", "theorem", "trop_sum", []], ["add", "theorem", "untrop_prod", []], ["add", "theorem", "untrop_sum", []], ["add", "theorem", "untrop_sum_eq_Inf_image", []]]}, {"oldPath": null, "newPath": "src/algebra/tropical/lattice.lean", "changes": []}]}, {"timestamp": 1639351529, "sha": "b9f24408", "message": "chore(linear_algebra/orientation): golf a proof (#10742)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "map_basis_eq_zero_iff", ["alternating_map"]], ["add", "theorem", "map_basis_ne_zero_iff", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/orientation.lean", "newPath": "src/linear_algebra/orientation.lean", "changes": []}]}, {"timestamp": 1639344863, "sha": "19dd4be3", "message": "chore(tactic/reserved_notation): change precedence of sup and inf (#10623)\nPut the precedence of `⊔` and `⊓` at 68 and 69 respectively, which is above `+` (65), `∑` and `∏` (67), and below `*` (70). This makes sure that inf and sup behave in the same way in expressions where arithmetic operations appear (which was not the case before).\nDiscussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/inf.20and.20sup.20don't.20bind.20similarly", "changes": [{"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": [["mod", "theorem", "inf_mul_sup", []]]}, {"oldPath": "src/tactic/reserved_notation.lean", "newPath": "src/tactic/reserved_notation.lean", "changes": []}]}, {"timestamp": 1639324469, "sha": "61b0f419", "message": "refactor(data/{mv_,}polynomial): lemmas about `adjoin` (#10670)\nProve `adjoin {X} = ⊤` and `adjoin (range X) = ⊤` for `polynomial`s\nand `mv_polynomial`s much earlier and use these equalities to golf\nsome proofs.\nAlso drop some `comm_` in typeclass assumptions.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "coe_map", ["subalgebra"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "adjoin_eq_range", ["algebra"]], ["add", "theorem", "adjoin_range_eq_range_aeval", ["algebra"]], ["add", "theorem", "adjoin_range_X", ["mv_polynomial"]], ["mod", "theorem", "alg_hom_ext", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/supported.lean", "newPath": "src/data/mv_polynomial/supported.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "adjoin_singleton_eq_range_aeval", ["algebra"]], ["add", "theorem", "adjoin_X", ["polynomial"]], ["add", "theorem", "aeval_X_left", ["polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_le_equalizer", ["alg_hom"]], ["add", "theorem", "ext_of_adjoin_eq_top", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/polynomial.lean", "newPath": null, "changes": [["del", "theorem", "adjoin_eq_range", ["algebra"]], ["del", "theorem", "adjoin_range_eq_range_aeval", ["algebra"]], ["del", "theorem", "adjoin_singleton_eq_range_aeval", ["algebra"]]]}]}, {"timestamp": 1639292047, "sha": "e68fcf8d", "message": "move(data/bool/*): Move `bool` files in one folder (#10718)\n* renames `data.bool` to `data.bool.basic`\n* renames `data.set.bool` to `data.bool.set`\n* splits `data.bool.all_any` off `data.list.basic`", "changes": [{"oldPath": null, "newPath": "src/data/bool/all_any.lean", "changes": [["add", "theorem", "all_cons", ["list"]], ["add", "theorem", "all_iff_forall", ["list"]], ["add", "theorem", "all_iff_forall_prop", ["list"]], ["add", "theorem", "all_nil", ["list"]], ["add", "theorem", "any_cons", ["list"]], ["add", "theorem", "any_iff_exists", ["list"]], ["add", "theorem", "any_iff_exists_prop", ["list"]], ["add", "theorem", "any_nil", ["list"]], ["add", "theorem", "any_of_mem", ["list"]]]}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool/basic.lean", "changes": [["mod", "theorem", "not_ff", ["bool"]]]}, {"oldPath": "src/data/set/bool.lean", "newPath": "src/data/bool/set.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "all_cons", ["list"]], ["del", "theorem", "all_iff_forall", ["list"]], ["del", "theorem", "all_iff_forall_prop", ["list"]], ["del", "theorem", "all_nil", ["list"]], ["del", "theorem", "any_cons", ["list"]], ["del", "theorem", "any_iff_exists", ["list"]], ["del", "theorem", "any_iff_exists_prop", ["list"]], ["del", "theorem", "any_nil", ["list"]], ["del", "theorem", "any_of_mem", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/tactic/clear.lean", "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "src/tactic/find_unused.lean", "newPath": "src/tactic/find_unused.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1639273073, "sha": "50e318ec", "message": "feat(algebra/order/ring): pos_iff_pos_of_mul_pos, neg_iff_neg_of_mul_pos (#10634)\nAdd four lemmas, deducing equivalence of `a` and `b` being positive or\nnegative from such a hypothesis for their product, that don't currently\nseem to be present.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "neg_iff_neg_of_mul_pos", []], ["add", "theorem", "neg_iff_pos_of_mul_neg", []], ["mod", "theorem", "neg_of_mul_pos_left", []], ["mod", "theorem", "neg_of_mul_pos_right", []], ["add", "theorem", "pos_iff_neg_of_mul_neg", []], ["add", "theorem", "pos_iff_pos_of_mul_pos", []]]}]}, {"timestamp": 1639257713, "sha": "f3613738", "message": "chore(order/boolean_algebra): add `compl_sdiff` (#10722)\nAlso mark `sdiff_compl` and `top_sdiff` as `@[simp]`.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_sdiff", []], ["mod", "theorem", "sdiff_compl", []], ["mod", "theorem", "top_sdiff", []]]}]}, {"timestamp": 1639257712, "sha": "f9fff7c6", "message": "feat(measure_theory): integral is mono in measure (#10721)\n* Bochner integral of a nonnegative function is monotone in measure;\n* set integral of a nonnegative function is monotone in set (generalize existing lemma);\n* interval integral of a nonnegative function is monotone in interval.", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_mono_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "integral_mono_interval", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "set_integral_mono_set", ["measure_theory"]]]}]}, {"timestamp": 1639257711, "sha": "cc5ff8ca", "message": "feat(group_theory/submonoid): The submonoid of left inverses of a submonoid (#10679)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/submonoid/inverses.lean", "changes": [["add", "def", "from_comm_left_inv", ["submonoid"]], ["add", "def", "from_left_inv", ["submonoid"]], ["add", "theorem", "from_left_inv_eq_iff", ["submonoid"]], ["add", "theorem", "from_left_inv_eq_inv", ["submonoid"]], ["add", "theorem", "from_left_inv_left_inv_equiv_symm", ["submonoid"]], ["add", "theorem", "from_left_inv_mul", ["submonoid"]], ["add", "theorem", "from_left_inv_one", ["submonoid"]], ["add", "theorem", "coe_inv", ["submonoid", "is_unit", "submonoid"]], ["add", "def", "left_inv", ["submonoid"]], ["add", "theorem", "left_inv_eq_inv", ["submonoid"]], ["add", "def", "left_inv_equiv", ["submonoid"]], ["add", "theorem", "left_inv_equiv_mul", ["submonoid"]], ["add", "theorem", "left_inv_equiv_symm_eq_inv", ["submonoid"]], ["add", "theorem", "left_inv_equiv_symm_from_left_inv", ["submonoid"]], ["add", "theorem", "left_inv_equiv_symm_mul", ["submonoid"]], ["add", "theorem", "left_inv_le_is_unit", ["submonoid"]], ["add", "theorem", "left_inv_left_inv_eq", ["submonoid"]], ["add", "theorem", "left_inv_left_inv_le", ["submonoid"]], ["add", "theorem", "mul_from_left_inv", ["submonoid"]], ["add", "theorem", "mul_left_inv_equiv", ["submonoid"]], ["add", "theorem", "mul_left_inv_equiv_symm", ["submonoid"]], ["add", "theorem", "unit_mem_left_inv", ["submonoid"]]]}]}, {"timestamp": 1639257710, "sha": "1c2b7420", "message": "feat(ring_theory/polynomial/cyclotomic/eval): `cyclotomic_pos` (#10482)", "changes": [{"oldPath": "counterexamples/cyclotomic_105.lean", "newPath": "counterexamples/cyclotomic_105.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "two_lt_of_ne", ["nat"]]]}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic/basic.lean", "changes": [["del", "theorem", "eval_one_cyclotomic_prime", ["polynomial"]], ["del", "theorem", "eval_one_cyclotomic_prime_pow", ["polynomial"]], ["del", "theorem", "eval₂_one_cyclotomic_prime", ["polynomial"]], ["del", "theorem", "eval₂_one_cyclotomic_prime_pow", ["polynomial"]], ["add", "theorem", "prod_cyclotomic_eq_geom_sum", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/cyclotomic/eval.lean", "changes": [["add", "theorem", "cyclotomic_pos", ["polynomial"]], ["add", "theorem", "eval_one_cyclotomic_prime", ["polynomial"]], ["add", "theorem", "eval_one_cyclotomic_prime_pow", ["polynomial"]], ["add", "theorem", "eval₂_one_cyclotomic_prime", ["polynomial"]], ["add", "theorem", "eval₂_one_cyclotomic_prime_pow", ["polynomial"]]]}]}, {"timestamp": 1639251117, "sha": "f068b9de", "message": "refactor(algebra/group/basic): Migrate add_comm_group section into comm_group section (#10565)\nCurrently mathlib has a rich set of lemmas connecting the addition, subtraction and negation additive commutative group operations, but a far thinner collection of results for multiplication, division and inverse multiplicative commutative group operations, despite the fact that the former can be generated easily from the latter via to_additive.\nThis PR refactors the additive results in the `add_comm_group` section as the equivalent multiplicative results in the `comm_group` section and then recovers the additive results via to_additive. There is a complication in that unfortunately the multiplicative forms of the names of some of the `add_comm_group` lemmas collide with existing names in `group_with_zero`. I have worked around this by appending an apostrophe to the name and then manually overriding the names generated by to_additive. In a few cases, names with `1...n` appended apostrophes already existed. In these cases I have appended `n+1` apostrophes.\nPrevious discussion\nThe `add_group` section was previously tackled in #10532.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "add_add_neg_cancel'_right", []], ["del", "theorem", "add_add_sub_cancel", []], ["del", "theorem", "add_eq_of_eq_sub'", []], ["del", "theorem", "add_sub_add_left_eq_sub", []], ["del", "theorem", "add_sub_cancel'", []], ["del", "theorem", "add_sub_cancel'_right", []], ["del", "theorem", "add_sub_comm", []], ["del", "theorem", "add_sub_sub_cancel", []], ["add", "theorem", "div_div", []], ["add", "theorem", "div_div_cancel", []], ["add", "theorem", "div_div_cancel_left", []], ["add", "theorem", "div_div_div_cancel_left", []], ["add", "theorem", "div_div_self'", []], ["add", "theorem", "div_eq_div_iff_div_eq_div", []], ["add", "theorem", "div_eq_div_iff_mul_eq_mul", []], ["add", "theorem", "div_eq_div_mul_div", []], ["add", "theorem", "div_eq_iff_eq_mul'", []], ["add", "theorem", "div_eq_inv_mul'", []], ["add", "theorem", "div_mul", []], ["add", "theorem", "div_mul_cancel''", []], ["add", "theorem", "div_mul_div_cancel''", []], ["add", "theorem", "div_mul_eq_div_div", []], ["add", "theorem", "div_mul_eq_mul_div'", []], ["add", "theorem", "div_mul_mul_cancel", []], ["add", "theorem", "div_right_comm'", []], ["del", "theorem", "eq_add_of_sub_eq'", []], ["add", "theorem", "eq_div_iff_mul_eq''", []], ["add", "theorem", "eq_div_of_mul_eq''", []], ["add", "theorem", "eq_mul_of_div_eq'", []], ["del", "theorem", "eq_sub_iff_add_eq'", []], ["del", "theorem", "eq_sub_of_add_eq'", []], ["add", "theorem", "inv_div_inv", []], ["add", "theorem", "inv_inv_div_inv", []], ["add", "theorem", "inv_mul'", []], ["add", "theorem", "inv_mul_eq_div", []], ["add", "theorem", "mul_div_cancel'''", []], ["add", "theorem", "mul_div_cancel'_right", []], ["add", "theorem", "mul_div_comm'", []], ["add", "theorem", "mul_div_div_cancel", []], ["add", "theorem", "mul_div_mul_left_eq_div", []], ["add", "theorem", "mul_eq_of_eq_div'", []], ["add", "theorem", "mul_mul_div_cancel", []], ["add", "theorem", "mul_mul_inv_cancel'_right", []], ["del", "theorem", "neg_add'", []], ["del", "theorem", "neg_add_eq_sub", []], ["del", "theorem", "neg_neg_sub_neg", []], ["del", "theorem", "neg_sub_neg", []], ["del", "theorem", "sub_add", []], ["del", "theorem", "sub_add_add_cancel", []], ["del", "theorem", "sub_add_cancel'", []], ["del", "theorem", "sub_add_eq_add_sub", []], ["del", "theorem", "sub_add_eq_sub_sub", []], ["del", "theorem", "sub_add_sub_cancel'", []], ["del", "theorem", "sub_eq_iff_eq_add'", []], ["del", "theorem", "sub_eq_neg_add", []], ["del", "theorem", "sub_eq_sub_add_sub", []], ["del", "theorem", "sub_eq_sub_iff_add_eq_add", []], ["del", "theorem", "sub_eq_sub_iff_sub_eq_sub", []], ["del", "theorem", "sub_right_comm", []], ["del", "theorem", "sub_sub", []], ["del", "theorem", "sub_sub_cancel", []], ["del", "theorem", "sub_sub_cancel_left", []], ["del", "theorem", "sub_sub_self", []], ["del", "theorem", "sub_sub_sub_cancel_left", []]]}]}, {"timestamp": 1639227824, "sha": "294753e9", "message": "Fix comment typo (#10715)", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1639220815, "sha": "97417665", "message": "feat(analysis/normed_space): normed space is homeomorphic to the unit ball (#10690)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "def", "homeomorph_unit_ball", []]]}]}, {"timestamp": 1639215235, "sha": "08d30d66", "message": "chore(algebra/pointwise): Better `variables` management (#10686)\nMoves a few variables from lemma statements to `variables`.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "coe_mul", ["finset"]], ["mod", "theorem", "empty_mul", ["finset"]], ["mod", "theorem", "mem_mul", ["finset"]], ["mod", "theorem", "mul_card_le", ["finset"]], ["mod", "theorem", "mul_def", ["finset"]], ["mod", "theorem", "mul_empty", ["finset"]], ["mod", "theorem", "mul_mem_mul", ["finset"]], ["mod", "theorem", "mul_nonempty_iff", ["finset"]], ["del", "theorem", "mul_singleton_zero", ["finset"]], ["add", "theorem", "mul_singleton_zero_subset", ["finset"]], ["mod", "theorem", "mul_subset_mul", ["finset"]], ["del", "theorem", "singleton_zero_mul", ["finset"]], ["add", "theorem", "singleton_zero_mul_subset", ["finset"]], ["mod", "theorem", "mem_inv_smul_set_iff", []], ["mod", "theorem", "mem_smul_set_iff_inv_smul_mem", []], ["mod", "theorem", "range_smul_range", ["set"]], ["mod", "theorem", "set_smul_subset_iff", []], ["mod", "theorem", "set_smul_subset_set_smul_iff", []], ["mod", "theorem", "smul_mem_smul_set_iff", []], ["mod", "theorem", "mul_subset", ["submonoid"]], ["mod", "theorem", "mul_subset_closure", ["submonoid"]], ["mod", "theorem", "subset_set_smul_iff", []]]}]}, {"timestamp": 1639196593, "sha": "d856bf9b", "message": "feat(ring_theory/localization): Clearing denominators (#10668)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "common_denom", ["is_localization"]], ["add", "def", "common_denom_of_finset", ["is_localization"]], ["add", "def", "finset_integer_multiple", ["is_localization"]], ["add", "theorem", "finset_integer_multiple_image", ["is_localization"]], ["add", "def", "integer_multiple", ["is_localization"]], ["add", "theorem", "map_integer_multiple", ["is_localization"]]]}]}, {"timestamp": 1639180124, "sha": "0b87b0ae", "message": "chore(algebra/group_with_zero/defs: Rename `comm_cancel_monoid_with_zero` to `cancel_comm_monoid_with_zero` (#10669)\nWe currently have `cancel_comm_monoid` but `comm_cancel_monoid_with_zero`. This renames the latter to follow the former.\nReplaced `comm_cancel_` by `cancel_comm_` everywhere.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "of_mul_left", ["associated"]], ["mod", "theorem", "of_mul_right", ["associated"]], ["mod", "theorem", "dvd_and_not_dvd_iff", []], ["mod", "theorem", "exists_associated_mem_of_dvd_prod", []], ["mod", "theorem", "prod_ne_zero_of_prime", ["multiset"]], ["mod", "theorem", "pow_dvd_pow_iff", []], ["mod", "theorem", "associated_of_dvd", ["prime"]], ["mod", "theorem", "dvd_prime_iff_associated", ["prime"]], ["mod", "theorem", "left_dvd_or_dvd_right_of_dvd_mul", ["prime"]], ["mod", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", []]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["mod", "theorem", "mul_dvd_mul_iff_right", []]]}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/defs.lean", "newPath": "src/algebra/group_with_zero/defs.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["mod", "theorem", "squarefree", ["prime"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/prime.lean", "newPath": "src/ring_theory/prime.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "def", "{u}", ["associates"]], ["mod", "theorem", "irreducible_iff_prime_of_exists_unique_irreducible_factors", []], ["mod", "theorem", "prime_factors_irreducible", []], ["mod", "theorem", "prime_factors_unique", []], ["mod", "theorem", "ufm_of_gcd_of_wf_dvd_monoid", []], ["mod", "theorem", "iff_exists_prime_factors", ["unique_factorization_monoid"]], ["mod", "theorem", "iff_well_founded_associates", ["wf_dvd_monoid"]], ["mod", "theorem", "of_well_founded_associates", ["wf_dvd_monoid"]]]}]}, {"timestamp": 1639173577, "sha": "52c2f742", "message": "docs(topology/homotopy): add namespace in docstring to fix links (#10711)\nCurrently all the occurences of `homotopy` in the docs link to `algebra/homology/homotopy`.", "changes": [{"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}]}, {"timestamp": 1639173576, "sha": "a12fc705", "message": "feat(logic/function/basic): surjective function is an epimorphism (#10691)\n* Move proofs about `surjective`/`injective` and `epi`/`mono` to `logic.function.basic` (formulated in terms of injectivity of composition), make them universe polymorphic.\n* drop `forall_iff_forall_surj`, use `function.surjective.forall` instead.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["del", "theorem", "forall_iff_forall_surj", []]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "comp_left", ["function", "bijective"]], ["add", "theorem", "comp_right", ["function", "bijective"]], ["add", "theorem", "surjective_comp_right'", ["function", "injective"]], ["add", "theorem", "surjective_comp_right", ["function", "injective"]], ["mod", "theorem", "comp_left", ["function", "surjective"]], ["add", "theorem", "injective_comp_right", ["function", "surjective"]], ["mod", "theorem", "of_comp_iff'", ["function", "surjective"]], ["add", "theorem", "surjective_of_right_cancellable_Prop", ["function"]]]}]}, {"timestamp": 1639167808, "sha": "3e1d4d32", "message": "feat(algebra/gcd_monoid): `associates` lemmas (#10705)", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["add", "theorem", "mk_out", ["associates"]], ["add", "theorem", "out_injective", ["associates"]], ["mod", "theorem", "out_mk", ["associates"]], ["add", "def", "associates_equiv_of_unique_units", []]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}]}, {"timestamp": 1639163577, "sha": "b7ac8334", "message": "feat(ring_theory/discriminant): add the discriminant of a family of vectors (#10350)\nWe add the definition and some basic results about the discriminant.\nFrom FLT-regular.\n- [x] depends on: #10657", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "minor_mul_transpose_minor", ["matrix"]]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "not_linear_independent_iff", ["fintype"]], ["del", "theorem", "linear_dependent_iff", []], ["add", "theorem", "not_linear_independent_iff", []]]}, {"oldPath": null, "newPath": "src/ring_theory/discriminant.lean", "changes": [["add", "def", "discr", ["algebra"]], ["add", "theorem", "discr_def", ["algebra"]], ["add", "theorem", "discr_eq_det_embeddings_matrix_reindex_pow_two", ["algebra"]], ["add", "theorem", "discr_not_zero_of_linear_independent", ["algebra"]], ["add", "theorem", "discr_of_matrix_mul_vec", ["algebra"]], ["add", "theorem", "discr_of_matrix_vec_mul", ["algebra"]], ["add", "theorem", "discr_power_basis_eq_prod", ["algebra"]], ["add", "theorem", "discr_zero_of_not_linear_independent", ["algebra"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "def", "embeddings_matrix", ["algebra"]], ["add", "def", "embeddings_matrix_reindex", ["algebra"]], ["add", "theorem", "embeddings_matrix_reindex_eq_vandermonde", ["algebra"]], ["add", "def", "trace_matrix", ["algebra"]], ["add", "theorem", "trace_matrix_def", ["algebra"]], ["add", "theorem", "trace_matrix_eq_embeddings_matrix_mul_trans", ["algebra"]], ["add", "theorem", "trace_matrix_eq_embeddings_matrix_reindex_mul_trans", ["algebra"]], ["add", "theorem", "trace_matrix_of_basis", ["algebra"]], ["add", "theorem", "trace_matrix_of_matrix_mul_vec", ["algebra"]], ["add", "theorem", "trace_matrix_of_matrix_vec_mul", ["algebra"]], ["del", "theorem", "det_trace_form_ne_zero'", []], ["add", "theorem", "det_trace_matrix_ne_zero'", []]]}]}, {"timestamp": 1639156075, "sha": "71e9f90d", "message": "feat(order/basic): Slightly generalized `densely_ordered` (#10664)\nChanged `[preorder α]` to `[has_lt α]`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "exists_between", []]]}]}, {"timestamp": 1639149369, "sha": "12e18e8e", "message": "feat(data/nat/gcd): coprime add mul lemmas (#10588)\nAdds `coprime m (n + k * m) ↔ coprime m n` for nats, (and permutations thereof).", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "coprime_add_mul_left_left", ["nat"]], ["add", "theorem", "coprime_add_mul_left_right", ["nat"]], ["add", "theorem", "coprime_add_mul_right_left", ["nat"]], ["add", "theorem", "coprime_add_mul_right_right", ["nat"]], ["add", "theorem", "coprime_mul_left_add_left", ["nat"]], ["add", "theorem", "coprime_mul_left_add_right", ["nat"]], ["add", "theorem", "coprime_mul_right_add_left", ["nat"]], ["add", "theorem", "coprime_mul_right_add_right", ["nat"]], ["add", "theorem", "gcd_add_mul_left_left", ["nat"]], ["add", "theorem", "gcd_add_mul_left_right", ["nat"]], ["add", "theorem", "gcd_add_mul_right_left", ["nat"]], ["add", "theorem", "gcd_add_mul_right_right", ["nat"]], ["del", "theorem", "gcd_add_mul_self", ["nat"]], ["add", "theorem", "gcd_mul_left_add_left", ["nat"]], ["add", "theorem", "gcd_mul_left_add_right", ["nat"]], ["add", "theorem", "gcd_mul_right_add_left", ["nat"]], ["add", "theorem", "gcd_mul_right_add_right", ["nat"]]]}]}, {"timestamp": 1639149368, "sha": "18ce3a8f", "message": "feat(group_theory/group_action/defs): add a typeclass to show that an action is central (aka symmetric) (#10543)\nThis adds a new `is_central_scalar` typeclass to indicate that `op m • a = m • a` (or rather, to indicate that a type has the same right and left scalar action on another type).\nThe main instance for this is `comm_semigroup.is_central_scalar`, for when `m • a = m * a` and `op m • a = a * m`, and then all the other instances follow transitively when `has_scalar R (f M)` is derived from `has_scalar R M`:\n* `prod`\n* `pi`\n* `ulift`\n* `finsupp`\n* `dfinsupp`\n* `monoid_algebra`\n* `add_monoid_algebra`\n* `polynomial`\n* `mv_polynomial`\n* `matrix`\n* `add_monoid_hom`\n* `linear_map`\n* `complex`\n* `pointwise` instances on:\n * `set`\n * `submonoid`\n * `add_submonoid`\n * `subgroup`\n * `add_subgroup`\n * `subsemiring`\n * `subring`\n * `submodule`", "changes": [{"oldPath": "src/algebra/module/hom.lean", "newPath": "src/algebra/module/hom.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_pointwise.lean", "newPath": "src/algebra/module/submodule_pointwise.lean", "changes": []}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "unop_smul_eq_smul", ["is_central_scalar"]]]}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": [["add", "theorem", "op_smul_eq_op_smul_op", ["mul_opposite"]], ["add", "theorem", "unop_smul_eq_unop_smul_unop", ["mul_opposite"]]]}, {"oldPath": "src/group_theory/group_action/pi.lean", "newPath": "src/group_theory/group_action/pi.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/ring_theory/subring/pointwise.lean", "newPath": "src/ring_theory/subring/pointwise.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring/pointwise.lean", "newPath": "src/ring_theory/subsemiring/pointwise.lean", "changes": []}]}, {"timestamp": 1639142786, "sha": "94d51b99", "message": "chore(algebraic_geometry/presheafed_space): Make `has_colimits` work faster (#10703)", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": [["add", "theorem", "colimit_carrier", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "desc", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["add", "theorem", "desc_fac", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["add", "theorem", "colimit_presheaf", ["algebraic_geometry", "PresheafedSpace"]]]}]}, {"timestamp": 1639142785, "sha": "c29b7067", "message": "feat(data/int/gcd): another version of Euclid's lemma (#10622)\nWe already have something described as \"Euclid's lemma\" in `ring_theory/unique_factorization_domain`, but not this specific statement of the lemma.\nThis is Theorem 1.5 in Apostol (1976) Introduction to Analytic Number Theory", "changes": [{"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "dvd_of_dvd_mul_left_of_gcd_one", ["int"]], ["add", "theorem", "dvd_of_dvd_mul_right_of_gcd_one", ["int"]]]}]}, {"timestamp": 1639142784, "sha": "4471de61", "message": "feat(order/lattice): define a lattice structure using an injective map to another lattice (#10615)\nThis is done similarly to `function.injective.group` etc.", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1639142783, "sha": "ebbb991a", "message": "feat(ring_theory/principal_ideal_domain): add some corollaries about is_coprime (#10601)", "changes": [{"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "coprime_iff_not_dvd", ["irreducible"]], ["add", "theorem", "is_coprime_of_irreducible_dvd", []], ["add", "theorem", "is_coprime_of_prime_dvd", []], ["add", "theorem", "coprime_iff_not_dvd", ["prime"]]]}]}, {"timestamp": 1639142782, "sha": "46ac3c41", "message": "feat(*): introduce classes for types of homomorphism (#9888)\nThis PR is the main proof-of-concept in my plan to use typeclasses to reduce duplication surrounding `hom` classes. Essentially, I want to take each type of bundled homs, such as `monoid_hom`, and add a class `monoid_hom_class` which has an instance for each *type* extending `monoid_hom`. Declarations that now take a parameter of the specific type `monoid_hom M N` can instead take a more general `{F : Type*} [monoid_hom_class F M N] (f : F)`; this means we don't need to duplicate e.g. `monoid_hom.map_prod` to `ring_hom.map_prod`, `mul_equiv.map_prod`, `ring_equiv.map_prod`, or `monoid_hom.map_div` to `ring_hom.map_div`, `mul_equiv.map_div`, `ring_equiv.map_div`, ...\nBasically, instead of having `O(n * k)` declarations for `n` types of homs and `k` lemmas, following the plan we only need `O(n + k)`.\n## Overview\n * Change `has_coe_to_fun` to include the type of the function as a parameter (rather than a field of the structure) (**done** as part of #7033)\n * Define a class `fun_like`, analogous to `set_like`, for types of bundled function + proof (**done** in #10286)\n * Extend `fun_like` for each `foo_hom` to create a `foo_hom_class` (**done** in this PR for `ring_hom` and its ancestors, **todo** in follow-up for the rest)\n * Change parameters of type `foo_hom A B` to take `{F : Type*} [foo_hom_class F A B] (f : F)` instead (**done** in this PR for `map_{add,zero,mul,one,sub,div}`, **todo** in follow-up for remaining declarations)\n## API changes\nLemmas matching `*_hom.map_{add,zero,mul,one,sub,div}` are deprecated. Use the new `simp` lemmas called simply `map_add`, `map_zero`, ...\nNamespaced lemmas of the form `map_{add,zero,mul,one,sub,div}` are now protected. This includes e.g. `polynomial.map_add` and `multiset.map_add`, which involve `polynomial.map` and `multiset.map` respectively. In fact, it should be possible to turn those `map` definitions into bundled maps, so we don't even need to worry about the name change.\n## New classes\n * `zero_hom_class`, `one_hom_class` defines `map_zero`, `map_one`\n * `add_hom_class`, `mul_hom_class` defines `map_add`, `map_mul`\n * `add_monoid_hom_class`, `monoid_hom_class` extends `{zero,one}_hom_class`, `{add,mul}_hom_class`\n * `monoid_with_zero_hom_class` extends `monoid_hom_class` and `zero_hom_class`\n * `ring_hom_class` extends `monoid_hom_class`, `add_monoid_hom_class` and `monoid_with_zero_hom_class`\n## Classes still to be implemented\nSome of the core algebraic homomorphisms are still missing their corresponding classes:\n * `mul_action_hom_class` defines `map_smul`\n * `distrib_mul_action_hom_class`, `mul_semiring_action_hom_class` extends the above\n * `linear_map_class` extends `add_hom_class` and defines `map_smulₛₗ`\n * `alg_hom_class` extends `ring_hom_class` and defines `commutes`\nWe could also add an `equiv_like` and its descendants `add_equiv_class`, `mul_equiv_class`, `ring_equiv_class`, `linear_equiv_class`, ...\n## Other changes\n`coe_fn_coe_base` now has an appropriately low priority, so it doesn't take precedence over `fun_like.has_coe_to_fun`.\n## Why are you unbundling the morphisms again?\nIt's not quite the same thing as unbundling. When using unbundled morphisms, parameters have the form `(f : A → B) (hf : is_foo_hom f)`; bundled morphisms look like `(f : foo_hom A B)` (where `foo_hom A B` is equivalent to `{ f : A → B // is_foo_hom f }`; typically you would use a custom structure instead of `subtype`). This plan puts a predicate on the *type* `foo_hom` rather than the *elements* of the type as you would with unbundled morphisms. I believe this will preserve the advantages of the bundled approach (being able to talk about the identity map, making it work with `simp`), while addressing one of its disadvantages (needing to duplicate all the lemmas whenever extending the type of morphisms).\n## Discussion\nMain Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Typeclasses.20for.20morphisms\nSome other threads referencing this plan:\n * https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Morphism.20refactor\n * https://leanprover.zulipchat.com/#narrow/stream/263328-triage/topic/issue.20.231044.3A.20bundling.20morphisms\n * #1044\n * #4985", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "map_div", []], ["add", "theorem", "map_inv", []], ["add", "theorem", "map_mul", []], ["add", "theorem", "map_mul_eq_one", []], ["add", "theorem", "map_mul_inv", []], ["add", "theorem", "map_one", []], ["del", "theorem", "map_div", ["monoid_hom"]], ["del", "theorem", "map_inv", ["monoid_hom"]], ["del", "theorem", "map_mul", ["monoid_hom"]], ["del", "theorem", "map_mul_inv", ["monoid_hom"]], ["del", "theorem", "map_one", ["monoid_hom"]], ["del", "theorem", "map_mul", ["monoid_with_zero_hom"]], ["del", "theorem", "map_one", ["monoid_with_zero_hom"]], ["del", "theorem", "map_zero", ["monoid_with_zero_hom"]], ["del", "theorem", "map_mul", ["mul_hom"]], ["del", "theorem", "map_one", ["one_hom"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "ext", ["linear_map"]], ["del", "theorem", "map_add", ["linear_map"]], ["del", "theorem", "map_neg", ["linear_map"]], ["del", "theorem", "map_sub", ["linear_map"]], ["del", "theorem", "map_zero", ["linear_map"]], ["mod", "theorem", "to_fun_eq_coe", ["linear_map"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "map_bit0", []], ["add", "theorem", "map_bit1", []], ["del", "theorem", "map_add", ["ring_hom"]], ["del", "theorem", "map_bit0", ["ring_hom"]], ["del", "theorem", "map_bit1", ["ring_hom"]], ["del", "theorem", "map_mul", ["ring_hom"]], ["del", "theorem", "map_neg", ["ring_hom"]], ["del", "theorem", "map_one", ["ring_hom"]], ["del", "theorem", "map_sub", ["ring_hom"]], ["del", "theorem", "map_zero", ["ring_hom"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["mod", "theorem", "ext", ["linear_equiv"]], ["mod", "theorem", "ext_iff", ["linear_equiv"]], ["del", "theorem", "map_add", ["linear_equiv"]], ["del", "theorem", "map_zero", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["del", "theorem", "map_add", ["multilinear_map"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["mod", "theorem", "congr_fun", ["derivation"]], ["del", "theorem", "map_add", ["derivation"]], ["del", "theorem", "map_neg", ["derivation"]], ["mod", "theorem", "map_smul", ["derivation"]], ["del", "theorem", "map_sub", ["derivation"]], ["del", "theorem", "map_zero", ["derivation"]], ["add", "theorem", "to_fun_eq_coe", ["derivation"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["del", "theorem", "map_add", ["continuous_linear_map"]], ["del", "theorem", "map_neg", ["continuous_linear_map"]], ["del", "theorem", "map_sub", ["continuous_linear_map"]], ["del", "theorem", "map_sum", ["continuous_linear_map"]], ["del", "theorem", "map_zero", ["continuous_linear_map"]]]}]}, {"timestamp": 1639137176, "sha": "165e0556", "message": "refactor(group_theory/quotient_group): use `con` (#10699)\nUse `con` to define `group` structure on `G ⧸ N` instead of repeating the construction in this case.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1639137175, "sha": "9a24b3e5", "message": "chore(ring_theory/noetherian): rename `submodule.fg_map` to `submodule.fg.map` (#10688)\nThis renames:\n* `submodule.fg_map` to `submodule.fg.map` (to match `submonoid.fg.map` and enable dot notation)\n* `submodule.map_fg_of_fg` to `ideal.fg.map`\n* `submodule.fg_ker_ring_hom_comp` to `ideal.fg_ker_comp` to match `submodule.fg_ker_comp`\nand defines a new `ideal.fg` alias to avoid unfolding to `submodule R R` and `submodule.span`.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/nakayama.lean", "newPath": "src/ring_theory/nakayama.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "map", ["ideal", "fg"]], ["add", "def", "fg", ["ideal"]], ["add", "theorem", "fg_ker_comp", ["ideal"]], ["add", "theorem", "map", ["submodule", "fg"]], ["del", "theorem", "fg_ker_ring_hom_comp", ["submodule"]], ["del", "theorem", "fg_map", ["submodule"]], ["del", "theorem", "map_fg_of_fg", ["submodule"]]]}]}, {"timestamp": 1639137174, "sha": "24cf723e", "message": "feat(ring_theory/polynomial/cyclotomic): generalize `is_root_cyclotomic` (#10687)", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["mod", "theorem", "is_root_cyclotomic", ["polynomial"]]]}]}, {"timestamp": 1639137172, "sha": "3dcdf93f", "message": "feat(group_theory/finiteness): Lemmas about finitely generated submonoids (#10681)", "changes": [{"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": [["add", "theorem", "fg_iff_submonoid_fg", ["monoid"]], ["add", "theorem", "fg_of_surjective", ["monoid"]], ["add", "theorem", "map", ["submonoid", "fg"]], ["add", "theorem", "map_injective", ["submonoid", "fg"]], ["add", "theorem", "powers_fg", ["submonoid"]]]}]}, {"timestamp": 1639137170, "sha": "508fc181", "message": "feat(ring_theory/ideal): Power of a spanning set is a spanning set (#10656)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "pow_multiset_sum_mem_span_pow", ["ideal"]], ["add", "theorem", "span_pow_eq_top", ["ideal"]], ["add", "theorem", "sum_pow_mem_span_pow", ["ideal"]]]}]}, {"timestamp": 1639128023, "sha": "ce0e2c44", "message": "feat(category_theory/limits): Pullback API (#10620)\nNeeded for constructing fibered products of Schemes", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "congr_hom", ["category_theory", "limits", "pullback"]], ["add", "theorem", "congr_hom_inv", ["category_theory", "limits", "pullback"]], ["add", "def", "is_limit_of_comp_mono", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "pullback_is_pullback_of_comp_mono", ["category_theory", "limits"]], ["add", "def", "congr_hom", ["category_theory", "limits", "pushout"]], ["add", "theorem", "congr_hom_inv", ["category_theory", "limits", "pushout"]], ["add", "def", "is_colimit_of_epi_comp", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "pushout_is_pushout_of_epi_comp", ["category_theory", "limits"]]]}]}, {"timestamp": 1639106208, "sha": "e7959fb8", "message": "chore(scripts): update nolints.txt (#10697)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1639096456, "sha": "1ecdf714", "message": "chore(algebra/punit_instances): add `comm_cancel_monoid_with_zero`, `normalized_gcd_monoid`, and scalar action instances (#10312)\nMotivated by [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Is.200.20not.20equal.20to.201.3F/near/261366868). \nThis also moves the simp lemmas closer to the instances they refer to.", "changes": [{"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": [["del", "theorem", "add_eq", ["punit"]], ["add", "theorem", "compl_eq", ["punit"]], ["add", "theorem", "gcd_eq", ["punit"]], ["add", "theorem", "lcm_eq", ["punit"]], ["del", "theorem", "neg_eq", ["punit"]], ["add", "theorem", "norm_unit_eq", ["punit"]], ["add", "theorem", "sdiff_eq", ["punit"]], ["mod", "theorem", "smul_eq", ["punit"]], ["del", "theorem", "zero_eq", ["punit"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}]}, {"timestamp": 1639086695, "sha": "61dd3432", "message": "feat(probability_theory/martingale): define martingales (#10625)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "condexp_condexp_of_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "trim_trim", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/probability_theory/martingale.lean", "changes": [["add", "theorem", "adapted", ["measure_theory", "martingale"]], ["add", "theorem", "add", ["measure_theory", "martingale"]], ["add", "theorem", "condexp_ae_eq", ["measure_theory", "martingale"]], ["add", "theorem", "integrable", ["measure_theory", "martingale"]], ["add", "theorem", "measurable", ["measure_theory", "martingale"]], ["add", "theorem", "neg", ["measure_theory", "martingale"]], ["add", "theorem", "smul", ["measure_theory", "martingale"]], ["add", "theorem", "sub", ["measure_theory", "martingale"]], ["add", "def", "martingale", ["measure_theory"]], ["add", "theorem", "martingale_condexp", ["measure_theory"]], ["add", "theorem", "martingale_zero", ["measure_theory"]]]}]}, {"timestamp": 1639078705, "sha": "e618cfe3", "message": "feat(topology/continuous_function/bounded): register instances of `star` structures (#10570)\nProve that the bounded continuous functions which take values in a normed C⋆-ring themselves form a C⋆-ring. Moreover, if the codomain is a normed algebra and a star module over a normed ⋆-ring, then so are the bounded continuous functions. Thus the bounded continuous functions form a C⋆-algebra when the codomain is a C⋆-algebra.", "changes": [{"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": [["add", "theorem", "star_isometry", []], ["add", "def", "star_normed_group_hom", []]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "coe_star", ["bounded_continuous_function"]], ["add", "theorem", "star_apply", ["bounded_continuous_function"]]]}]}, {"timestamp": 1639070331, "sha": "25386262", "message": "fix(tactic/ring): instantiate metavariables (#10589)\nFixes the issue reported in #10572.\n- [x] depends on: #10572", "changes": [{"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1639067189, "sha": "94783bef", "message": "feat(algebra/algebra/spectrum): lemmas when scalars are a field (#10476)\nProve some properties of the spectrum when the underlying scalar ring\nis a field, and mostly assuming the algebra is itself nontrivial.\nShow that the spectrum of a scalar (i.e., `algebra_map 𝕜 A k`) is\nthe singleton `{k}`. Prove that `σ (a * b) \\ {0} = σ (b * a) \\ {0}`.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["mod", "theorem", "smul_sub_iff_sub_inv_smul", ["is_unit"]], ["add", "theorem", "nonzero_mul_eq_swap_mul", ["spectrum"]], ["add", "theorem", "one_eq", ["spectrum"]], ["add", "theorem", "scalar_eq", ["spectrum"]], ["mod", "theorem", "smul_eq_smul", ["spectrum"]], ["add", "theorem", "unit_smul_eq_smul", ["spectrum"]], ["add", "theorem", "zero_eq", ["spectrum"]]]}]}, {"timestamp": 1639061577, "sha": "08215b55", "message": "feat(data/finsupp/basic): lemmas on the support of the `tsub` of `finsupp`s (#10651)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "subset_support_tsub", ["finsupp"]], ["add", "theorem", "support_tsub", ["finsupp"]]]}]}, {"timestamp": 1639061576, "sha": "9ef122d2", "message": "feat(measure_theory/integral/set_to_l1): properties of (dominated_)fin_meas_additive (#10590)\nVarious properties of `fin_meas_additive` and `dominated_fin_meas_additive` which will be useful to generalize results about integrals to `set_to_fun`.", "changes": [{"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["add", "theorem", "add", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "add_measure_left", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "add_measure_right", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "eq_zero", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "eq_zero_of_measure_zero", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "of_measure_le", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "of_measure_le_smul", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "of_smul_measure", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "smul", ["measure_theory", "dominated_fin_meas_additive"]], ["add", "theorem", "zero", ["measure_theory", "dominated_fin_meas_additive"]], ["mod", "def", "dominated_fin_meas_additive", ["measure_theory"]], ["add", "theorem", "add", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "map_Union_fin_meas_set_eq_sum", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "map_empty_eq_zero", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "of_eq_top_imp_eq_top", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "of_smul_measure", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "smul", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "smul_measure", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "smul_measure_iff", ["measure_theory", "fin_meas_additive"]], ["add", "theorem", "zero", ["measure_theory", "fin_meas_additive"]], ["del", "theorem", "map_Union_fin_meas_set_eq_sum", ["measure_theory"]], ["del", "theorem", "map_empty_eq_zero_of_map_union", ["measure_theory"]]]}]}, {"timestamp": 1639056038, "sha": "c23b54c7", "message": "feat(group_theory/submonoid): The monoid_hom from a submonoid to its image. (#10680)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "def", "subgroup_comap", ["monoid_hom"]], ["add", "def", "subgroup_map", ["monoid_hom"]], ["add", "theorem", "subgroup_map_surjective", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "def", "submonoid_comap", ["monoid_hom"]], ["add", "def", "submonoid_map", ["monoid_hom"]], ["add", "theorem", "submonoid_map_surjective", ["monoid_hom"]]]}]}, {"timestamp": 1639056036, "sha": "97e44687", "message": "feat(analysis/calculus/deriv): generalize some lemmas (#10639)\nGeneralize lemmas about the chain rule to work with different fields.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "comp", ["has_deriv_within_at"]], ["mod", "theorem", "scomp", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "comp", ["has_fderiv_at_filter"]], ["add", "theorem", "restrict_scalars", ["has_fderiv_at_filter"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}]}, {"timestamp": 1639048706, "sha": "bfe595d3", "message": "feat(order/filter,topology/instances/real): lemmas about `at_top`, `at_bot`, and `cocompact` (#10652)\n* prove `comap abs at_top = at_bot ⊔ at_top`;\n* prove `comap coe at_top = at_top` and `comap coe at_bot = at_bot` for coercion from `ℕ`, `ℤ`, or `ℚ` to an archimedian semiring, ring, or field, respectively;\n* prove `cocompact ℤ = at_bot ⊔ at_top` and `cocompact ℝ = at_bot ⊔ at_top`.", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "theorem", "abs_le", []], ["add", "theorem", "le_abs'", []]]}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": [["add", "theorem", "comap_coe_at_bot", ["int"]], ["add", "theorem", "comap_coe_at_top", ["int"]], ["add", "theorem", "comap_coe_at_top", ["nat"]], ["add", "theorem", "comap_coe_at_bot", ["rat"]], ["add", "theorem", "comap_coe_at_top", ["rat"]], ["add", "theorem", "tendsto_coe_int_at_bot_iff", []], ["add", "theorem", "tendsto_coe_rat_at_bot_iff", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "comap_abs_at_top", ["filter"]], ["add", "theorem", "comap_embedding_at_bot", ["filter"]], ["add", "theorem", "comap_embedding_at_top", ["filter"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "cocompact_eq", ["int"]], ["add", "theorem", "cocompact_eq", ["real"]]]}]}, {"timestamp": 1639043834, "sha": "e3d9adf1", "message": "chore(measure_theory/function/conditional_expectation): change condexp notation (#10584)\nThe previous definition and notation showed the `measurable_space` argument only through the other argument `m \\le m0`, which tends to be replaced by `_` in the goal view if it becomes complicated.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "theorem", "condexp_ae_eq_condexp_L1", ["measure_theory"]], ["mod", "theorem", "condexp_const", ["measure_theory"]], ["mod", "theorem", "condexp_neg", ["measure_theory"]], ["mod", "theorem", "condexp_smul", ["measure_theory"]], ["mod", "theorem", "condexp_undef", ["measure_theory"]], ["mod", "theorem", "condexp_zero", ["measure_theory"]], ["mod", "theorem", "integrable_condexp", ["measure_theory"]], ["mod", "theorem", "integral_condexp", ["measure_theory"]], ["mod", "theorem", "measurable_condexp", ["measure_theory"]]]}, {"oldPath": "src/probability_theory/notation.lean", "newPath": "src/probability_theory/notation.lean", "changes": []}]}, {"timestamp": 1639040058, "sha": "70171ac4", "message": "feat(topology/instances/real_vector_space): add an `is_scalar_tower` instance (#10490)\nThere is at most one topological real vector space structure on a topological additive group, so `[is_scalar_tower real A E]` holds automatically as long as `A` is a topological real algebra and `E` is a topological module over `A`.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_interval_integral.lean", "newPath": "src/analysis/calculus/parametric_interval_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/conformal.lean", "newPath": "src/analysis/complex/conformal.lean", "changes": []}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "theorem", "is_bounded_bilinear_map_inner", []]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "theorem", "integral_condexp_L2_eq", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": [["mod", "theorem", "inner_def", ["measure_theory", "L2"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "integral_const_mul", ["interval_integral"]], ["mod", "theorem", "integral_div", ["interval_integral"]], ["mod", "theorem", "integral_mul_const", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "integral_smul_const", []]]}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": [["add", "def", "to_real_linear_equiv", ["add_equiv"]]]}]}, {"timestamp": 1639034986, "sha": "4efa9d8a", "message": "chore(algebra/direct_limit): remove module.directed_system (#10636)\nThis typeclass duplicated `_root_.directed_system`", "changes": [{"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["del", "theorem", "totalize_apply", ["module", "direct_limit"]], ["add", "theorem", "totalize_of_le", ["module", "direct_limit"]], ["add", "theorem", "totalize_of_not_le", ["module", "direct_limit"]], ["add", "theorem", "map_map", ["module", "directed_system"]], ["add", "theorem", "map_self", ["module", "directed_system"]]]}]}, {"timestamp": 1639028301, "sha": "11bf7e52", "message": "feat(analysis/normed_space/weak_dual): add polar sets in preparation for Banach-Alaoglu theorem (#9836)\nThe first of two parts to add the Banach-Alaoglu theorem about the compactness of the closed unit ball (and more generally polar sets of neighborhoods of the origin) of the dual of a normed space in the weak-star topology.\nThis first half is about polar sets (for a set `s` in a normed space `E`, the `polar s` is the subset of `weak_dual _ E` consisting of the functionals that evaluate to something of norm at most one at all elements of `s`).", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["add", "def", "polar", []], ["add", "theorem", "polar_bounded_of_nhds_zero", []], ["add", "theorem", "polar_closed_ball", []], ["add", "theorem", "polar_empty", []], ["add", "theorem", "polar_eq_Inter", []], ["add", "theorem", "smul_mem_polar", []], ["add", "theorem", "zero_mem_polar", []]]}, {"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": [["add", "theorem", "is_closed_polar", ["weak_dual"]], ["add", "def", "polar", ["weak_dual"]], ["add", "theorem", "preimage_closed_unit_ball", ["weak_dual", "to_normed_dual"]]]}]}, {"timestamp": 1639022203, "sha": "fc3116f9", "message": "doc(data/nat/prime): fix links (#10677)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1639022202, "sha": "ab316732", "message": "feat(data/finset/basic): val_le_iff_val_subset (#10603)\nI'm not sure if we have something like this already on mathlib. The application of `val_le_of_val_subset` that I have in mind is to deduce\n```\ntheorem polynomial.card_roots'' {F : Type u} [field F]{p : polynomial F}(h : p ≠ 0)\n{Z : finset F} (hZ : ∀ z ∈ Z, polynomial.eval z p = 0) : Z.card ≤ p.nat_degree\n```\nfrom [polynomial.card_roots' ](https://github.com/leanprover-community/mathlib/blob/1376f53dacd3c3ccd3c345b6b8552cce96c5d0c8/src/data/polynomial/ring_division.lean#L318)\nIf this approach seems right, I will send the proof of `polynomial.card_roots''` in a follow up PR.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "val_le_iff_val_subset", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "one_le_count_iff_mem", ["multiset"]]]}]}, {"timestamp": 1639012385, "sha": "60c1d60e", "message": "feat(data/mv_polynomial/basic) induction_on'' (#10621)\nA new flavor of `induction_on` which is useful when we do not have ` h_add : ∀p q, M p → M q → M (p + q)` but we have\n```\nh_add_weak : ∀ (a : σ →₀ ℕ) (b : R) (f : (σ →₀ ℕ) →₀ R), a ∉ f.support → b ≠ 0 → M f → M (monomial a b + f)\n```", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "induction_on'''", ["mv_polynomial"]], ["add", "theorem", "induction_on''", ["mv_polynomial"]], ["add", "theorem", "induction_on_monomial", ["mv_polynomial"]]]}]}, {"timestamp": 1639012384, "sha": "e14dc11a", "message": "feat(data/int/basic): add `nat_abs_eq_nat_abs_iff_*` lemmas for nonnegative and nonpositive arguments (#10611)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "inj_on_nat_abs_Ici", ["int"]], ["add", "theorem", "inj_on_nat_abs_Iic", ["int"]], ["add", "theorem", "nat_abs_inj_of_nonneg_of_nonneg", ["int"]], ["add", "theorem", "nat_abs_inj_of_nonneg_of_nonpos", ["int"]], ["add", "theorem", "nat_abs_inj_of_nonpos_of_nonneg", ["int"]], ["add", "theorem", "nat_abs_inj_of_nonpos_of_nonpos", ["int"]], ["add", "theorem", "strict_anti_on_nat_abs", ["int"]], ["add", "theorem", "strict_mono_on_nat_abs", ["int"]]]}]}, {"timestamp": 1639002500, "sha": "baab5d30", "message": "refactor(data/matrix): reverse the direction of `matrix.minor_mul_equiv` (#10657)\nIn #10350 this change was proposed, since we apparently use that backwards way more than we use it forwards.\nWe also change `reindex_linear_equiv_mul`, which is similarly much more popular backwards than forwards.\nCloses: #10638", "changes": [{"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/charpoly/to_matrix.lean", "newPath": "src/linear_algebra/charpoly/to_matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": []}]}, {"timestamp": 1639002499, "sha": "2ea1fb68", "message": "feat(data/list/range): fin_range_succ_eq_map (#10654)", "changes": [{"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "fin_range_succ_eq_map", ["list"]], ["add", "theorem", "map_coe_fin_range", ["list"]]]}]}, {"timestamp": 1639002498, "sha": "fdb773a2", "message": "chore(algebra/tropical/basic): golf and clean (#10633)", "changes": [{"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": [["add", "theorem", "trop_smul", ["tropical"]], ["mod", "theorem", "untrop_pow", ["tropical"]]]}]}, {"timestamp": 1639002496, "sha": "bcd9a745", "message": "refactor(data/complex/is_R_or_C): `finite_dimensional.proper_is_R_or_C` is not an `instance` anymore (#10629)\nThis instance caused a search for `[finite_dimensional ?x E]` with an unknown `?x`. Turn it into a lemma and add `haveI` to some proofs. Also add an instance for `K ∙ x`.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "submodule_is_internal_iff_of_is_complete", ["orthogonal_family"]]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "proper_is_R_or_C", ["finite_dimensional"]]]}]}, {"timestamp": 1639002495, "sha": "e289343a", "message": "feat(algebra/graded_monoid): add lemmas about power and product membership (#10627)\nThis adds:\n* `set_like.graded_monoid.pow_mem`\n* `set_like.graded_monoid.list_prod_map_mem`\n* `set_like.graded_monoid.list_prod_of_fn_mem`\nIt doesn't bother to add the multiset and finset versions for now, because these are not imported at this point, and require the ring to be commutative.", "changes": [{"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "theorem", "coe_gnpow", ["set_like"]], ["del", "theorem", "coe_gpow", ["set_like"]], ["add", "theorem", "list_prod_map_mem", ["set_like", "graded_monoid"]], ["add", "theorem", "list_prod_of_fn_mem", ["set_like", "graded_monoid"]], ["add", "theorem", "pow_mem", ["set_like", "graded_monoid"]]]}]}, {"timestamp": 1638989095, "sha": "1d0bb865", "message": "fix(data/finsupp/basic): add missing decidable arguments (#10672)\n`finsupp` is classical, meaning that `def`s should just use noncomputable decidable instances rather than taking arguments that make more work for mathematicians.\nHowever, this doesn't mean that lemma _statements_ should use noncomputable decidable instances, as this just makes the lemma less general and harder to apply (as shown by the `congr` removed elsewhere in the diff).\nThese were found by removing `open_locale classical` from the top of the file, adding `by classical; exact` to some definitions, and then fixing the broken lemma statements. In future we should detect this type of mistake with a linter.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_update", ["finsupp"]], ["mod", "theorem", "equiv_fun_on_fintype_single", ["finsupp"]], ["mod", "theorem", "equiv_fun_on_fintype_symm_single", ["finsupp"]], ["mod", "theorem", "single_eq_pi_single", ["finsupp"]], ["mod", "theorem", "single_eq_update", ["finsupp"]], ["mod", "theorem", "support_single_disjoint", ["finsupp"]], ["mod", "theorem", "support_update", ["finsupp"]], ["mod", "theorem", "support_update_ne_zero", ["finsupp"]], ["mod", "theorem", "support_update_zero", ["finsupp"]], ["mod", "theorem", "to_multiset_symm_apply", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": [["mod", "theorem", "disjoint_iff", ["finsupp"]], ["mod", "theorem", "support_inf", ["finsupp"]], ["mod", "theorem", "support_sup", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": [["mod", "theorem", "support_mul", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1638983806, "sha": "2ce95ca8", "message": "refactor(data/finsupp): use `{f : α →₀ M | ∃ a b, f = single a b}` instead of union of ranges (#10671)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "theorem", "add_closure_Union_range_single", ["finsupp"]], ["add", "theorem", "add_closure_set_of_eq_single", ["finsupp"]]]}]}, {"timestamp": 1638983804, "sha": "8ab1b3b4", "message": "feat(measure_theory/probability_mass_function): Calculate supports of pmf constructions (#10371)\nThis PR gives explicit descriptions for the `support` of the various `pmf` constructions in mathlib. \nThis also tries to clean up the variable declarations in the different sections, so that all the lemmas don't need to specify them explicitly.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": [["mod", "theorem", "apply_eq_zero_iff", ["pmf"]], ["mod", "theorem", "bind_apply", ["pmf"]], ["add", "theorem", "mem_support_bind_iff", ["pmf"]], ["mod", "theorem", "mem_support_iff", ["pmf"]], ["add", "theorem", "mem_support_pure_iff:", ["pmf"]], ["del", "theorem", "mem_support_pure_iff", ["pmf"]], ["mod", "theorem", "pure_apply", ["pmf"]], ["add", "theorem", "support_bind", ["pmf"]], ["add", "theorem", "support_pure", ["pmf"]]]}, {"oldPath": "src/measure_theory/probability_mass_function/constructions.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": [["add", "theorem", "bernoulli_apply", ["pmf"]], ["del", "theorem", "bernuolli_apply", ["pmf"]], ["mod", "def", "bind_on_support", ["pmf"]], ["mod", "theorem", "bind_on_support_apply", ["pmf"]], ["mod", "theorem", "bind_on_support_eq_zero_iff", ["pmf"]], ["mod", "theorem", "bind_pure_comp", ["pmf"]], ["mod", "theorem", "coe_bind_on_support_apply", ["pmf"]], ["mod", "def", "filter", ["pmf"]], ["mod", "theorem", "filter_apply", ["pmf"]], ["mod", "theorem", "filter_apply_eq_zero_iff", ["pmf"]], ["mod", "theorem", "filter_apply_eq_zero_of_not_mem", ["pmf"]], ["mod", "theorem", "filter_apply_ne_zero_iff", ["pmf"]], ["add", "theorem", "map_apply", ["pmf"]], ["mod", "theorem", "map_comp", ["pmf"]], ["mod", "theorem", "map_id", ["pmf"]], ["add", "theorem", "mem_support_bernoulli_iff", ["pmf"]], ["mod", "theorem", "mem_support_bind_on_support_iff", ["pmf"]], ["add", "theorem", "mem_support_filter_iff", ["pmf"]], ["add", "theorem", "mem_support_map_iff", ["pmf"]], ["add", "theorem", "mem_support_normalize_iff", ["pmf"]], ["add", "theorem", "mem_support_of_finset_iff", ["pmf"]], ["add", "theorem", "mem_support_of_fintype_iff", ["pmf"]], ["add", "theorem", "mem_support_of_multiset_iff", ["pmf"]], ["add", "theorem", "mem_support_seq_iff", ["pmf"]], ["add", "theorem", "mem_support_uniform_of_finset_iff", ["pmf"]], ["add", "theorem", "mem_support_uniform_of_fintype_iff", ["pmf"]], ["mod", "theorem", "normalize_apply", ["pmf"]], ["mod", "def", "of_finset", ["pmf"]], ["mod", "theorem", "of_finset_apply", ["pmf"]], ["mod", "theorem", "of_finset_apply_of_not_mem", ["pmf"]], ["mod", "def", "of_fintype", ["pmf"]], ["mod", "theorem", "of_fintype_apply", ["pmf"]], ["mod", "theorem", "of_multiset_apply", ["pmf"]], ["mod", "theorem", "of_multiset_apply_of_not_mem", ["pmf"]], ["mod", "theorem", "pure_bind_on_support", ["pmf"]], ["mod", "theorem", "pure_map", ["pmf"]], ["mod", "def", "seq", ["pmf"]], ["add", "theorem", "seq_apply", ["pmf"]], ["add", "theorem", "support_bernoulli", ["pmf"]], ["add", "theorem", "support_bind_on_support", ["pmf"]], ["add", "theorem", "support_filter", ["pmf"]], ["add", "theorem", "support_map", ["pmf"]], ["add", "theorem", "support_normalize", ["pmf"]], ["add", "theorem", "support_of_finset", ["pmf"]], ["add", "theorem", "support_of_fintype", ["pmf"]], ["add", "theorem", "support_of_multiset", ["pmf"]], ["add", "theorem", "support_seq", ["pmf"]], ["add", "theorem", "support_uniform_of_finset", ["pmf"]], ["add", "theorem", "support_uniform_of_fintype", ["pmf"]], ["mod", "theorem", "uniform_of_finset_apply", ["pmf"]], ["mod", "theorem", "uniform_of_finset_apply_of_mem", ["pmf"]], ["mod", "theorem", "uniform_of_finset_apply_of_not_mem", ["pmf"]], ["mod", "theorem", "uniform_of_fintype_apply", ["pmf"]]]}]}, {"timestamp": 1638977331, "sha": "678566f2", "message": "feat(topology/algebra/group): Addition of interiors (#10659)\nThis proves `interior s * t ⊆ interior (s * t)`, a few prerequisites, and generalizes to `is_open.mul_left`/`is_open.mul_right`.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "mul_subset_mul_left", ["set"]], ["add", "theorem", "mul_subset_mul_right", ["set"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image2_subset_left", ["set"]], ["add", "theorem", "image2_subset_right", ["set"]], ["mod", "theorem", "image_preimage_subset", ["set"]], ["mod", "theorem", "inclusion_self", ["set"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv", ["is_closed"]], ["add", "theorem", "inv", ["is_open"]], ["mod", "theorem", "mul_left", ["is_open"]], ["mod", "theorem", "mul_right", ["is_open"]], ["add", "theorem", "subset_interior_mul", []], ["add", "theorem", "subset_interior_mul_left", []], ["add", "theorem", "subset_interior_mul_right", []]]}]}, {"timestamp": 1638971040, "sha": "eedb906c", "message": "feat(measure_theory/integral): `∫ x in b..b+a, f x = ∫ x in c..c + a, f x` for a periodic `f` (#10477)", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "map_vadd_multiples", ["function", "periodic"]], ["add", "theorem", "map_vadd_zmultiples", ["function", "periodic"]]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "quotient_lift_on_coe", ["quotient_group"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "coe_div", ["quotient_group"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "mk'", ["measure_theory", "is_fundamental_domain"]]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/periodic.lean", "changes": [["add", "theorem", "interval_integral_add_eq", ["function", "periodic"]], ["add", "theorem", "interval_integral_add_eq_of_pos", ["function", "periodic"]], ["add", "theorem", "is_add_fundamental_domain_Ioc", []]]}]}, {"timestamp": 1638942812, "sha": "4d56716d", "message": "fix(data/finsupp/basic): add missing decidable argument (#10649)\nWhile `finsupp.erase` is classical and requires no decidability, `finset.erase` is not so.\nWithout this argument, this lemma does not apply in the general case, and introduces mismatching decidable instances. With it, a `congr` is no longer needed elsewhere in mathlib.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "support_erase", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1638942811, "sha": "e5ba338e", "message": "fix(algebra/direct_sum): change `ring_hom_ext` to not duplicate `ring_hom_ext'` (#10640)\nThese two lemmas differed only in the explicitness of their binders.\nThe statement of the unprimed version has been changed to be fully applied.\nThis also renames `alg_hom_ext` to `alg_hom_ext'` to make way for the fully applied version. This is consistent with `direct_sum.add_hom_ext` vs `direct_sum.add_hom_ext'`.", "changes": [{"oldPath": "src/algebra/direct_sum/algebra.lean", "newPath": "src/algebra/direct_sum/algebra.lean", "changes": [["add", "theorem", "alg_hom_ext'", ["direct_sum"]], ["mod", "theorem", "alg_hom_ext", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["mod", "theorem", "ring_hom_ext'", ["direct_sum"]], ["mod", "theorem", "ring_hom_ext", ["direct_sum"]]]}]}, {"timestamp": 1638939566, "sha": "b495fdfd", "message": "feat(category_theory): Filtered colimits preserves finite limits in algebraic categories (#10604)", "changes": [{"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/limits.lean", "newPath": "src/category_theory/limits/preserves/limits.lean", "changes": [["add", "def", "preserves_colimit_nat_iso", ["category_theory"]], ["add", "def", "preserves_limit_nat_iso", ["category_theory"]]]}]}, {"timestamp": 1638935405, "sha": "2bfa7684", "message": "feat(analysis/normed_space/operator_norm): module and norm instances on continuous semilinear maps (#10494)\nThis PR adds a module and a norm instance on continuous semilinear maps, generalizes most of the results in `operator_norm.lean` to the semilinear case. Many of these results require the ring homomorphism to be isometric, which is expressed via the new typeclass `[ring_hom_isometric σ]`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "homothety_inverse", ["continuous_linear_equiv"]], ["mod", "theorem", "nnnorm_symm_pos", ["continuous_linear_equiv"]], ["mod", "theorem", "norm_pos", ["continuous_linear_equiv"]], ["mod", "theorem", "norm_symm_pos", ["continuous_linear_equiv"]], ["mod", "def", "of_homothety", ["continuous_linear_equiv"]], ["mod", "theorem", "one_le_norm_mul_norm_symm", ["continuous_linear_equiv"]], ["mod", "theorem", "subsingleton_or_nnnorm_symm_pos", ["continuous_linear_equiv"]], ["mod", "theorem", "subsingleton_or_norm_symm_pos", ["continuous_linear_equiv"]], ["mod", "theorem", "uniform_embedding", ["continuous_linear_equiv"]], ["mod", "theorem", "antilipschitz_of_uniform_embedding", ["continuous_linear_map"]], ["add", "def", "apply'", ["continuous_linear_map"]], ["mod", "def", "apply", ["continuous_linear_map"]], ["add", "theorem", "apply_apply'", ["continuous_linear_map"]], ["mod", "theorem", "apply_apply", ["continuous_linear_map"]], ["mod", "def", "bilinear_comp", ["continuous_linear_map"]], ["mod", "theorem", "bilinear_comp_apply", ["continuous_linear_map"]], ["mod", "theorem", "bound", ["continuous_linear_map"]], ["mod", "theorem", "bounds_bdd_below", ["continuous_linear_map"]], ["mod", "theorem", "bounds_nonempty", ["continuous_linear_map"]], ["mod", "theorem", "coe_deriv₂", ["continuous_linear_map"]], ["add", "theorem", "coe_flipₗᵢ'", ["continuous_linear_map"]], ["mod", "theorem", "coe_flipₗᵢ", ["continuous_linear_map"]], ["mod", "def", "compL", ["continuous_linear_map"]], ["mod", "theorem", "compL_apply", ["continuous_linear_map"]], ["add", "def", "compSL", ["continuous_linear_map"]], ["add", "theorem", "compSL_apply", ["continuous_linear_map"]], ["mod", "def", "deriv₂", ["continuous_linear_map"]], ["mod", "def", "extend", ["continuous_linear_map"]], ["mod", "theorem", "extend_unique", ["continuous_linear_map"]], ["mod", "theorem", "extend_zero", ["continuous_linear_map"]], ["mod", "def", "flip", ["continuous_linear_map"]], ["mod", "theorem", "flip_add", ["continuous_linear_map"]], ["mod", "theorem", "flip_apply", ["continuous_linear_map"]], ["mod", "theorem", "flip_flip", ["continuous_linear_map"]], ["mod", "theorem", "flip_smul", ["continuous_linear_map"]], ["add", "def", "flipₗᵢ'", ["continuous_linear_map"]], ["add", "theorem", "flipₗᵢ'_symm", ["continuous_linear_map"]], ["mod", "def", "flipₗᵢ", ["continuous_linear_map"]], ["mod", "theorem", "flipₗᵢ_symm", ["continuous_linear_map"]], ["mod", "theorem", "homothety_norm", ["continuous_linear_map"]], ["mod", "theorem", "is_O_comp", ["continuous_linear_map"]], ["mod", "theorem", "is_O_sub", ["continuous_linear_map"]], ["mod", "theorem", "is_O_with_comp", ["continuous_linear_map"]], ["mod", "theorem", "is_O_with_sub", ["continuous_linear_map"]], ["mod", "theorem", "isometry_iff_norm", ["continuous_linear_map"]], ["mod", "theorem", "le_op_norm₂", ["continuous_linear_map"]], ["mod", "theorem", "map_add₂", ["continuous_linear_map"]], ["mod", "theorem", "nnnorm_smul_right_apply", ["continuous_linear_map"]], ["mod", "theorem", "norm_def", ["continuous_linear_map"]], ["mod", "theorem", "norm_restrict_scalars", ["continuous_linear_map"]], ["mod", "theorem", "norm_smul_rightL", ["continuous_linear_map"]], ["mod", "theorem", "norm_smul_rightL_apply", ["continuous_linear_map"]], ["mod", "theorem", "norm_smul_right_apply", ["continuous_linear_map"]], ["mod", "def", "of_homothety", ["continuous_linear_map"]], ["mod", "def", "op_norm", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_comp_le", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_comp_linear_isometry_equiv", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_eq_of_bounds", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_flip", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_le_bound", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_le_bound₂", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_le_of_ball", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_le_of_lipschitz", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_le_of_nhds_zero", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_le_of_shell'", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_le_of_shell", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_neg", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_prod", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_zero", ["continuous_linear_map"]], ["mod", "def", "prodₗᵢ", ["continuous_linear_map"]], ["mod", "def", "restrict_scalarsL", ["continuous_linear_map"]], ["mod", "def", "restrict_scalars_isometry", ["continuous_linear_map"]], ["mod", "def", "smul_rightL", ["continuous_linear_map"]], ["mod", "def", "to_continuous_linear_equiv_of_bounds", ["linear_equiv"]], ["mod", "theorem", "uniform_embedding", ["linear_equiv"]], ["mod", "theorem", "norm_to_continuous_linear_map", ["linear_isometry"]], ["mod", "theorem", "norm_to_continuous_linear_map_le", ["linear_isometry"]], ["mod", "theorem", "bound_of_continuous", ["linear_map"]], ["mod", "theorem", "bound_of_shell", ["linear_map"]], ["mod", "theorem", "bound_of_shell_semi_normed", ["linear_map"]], ["mod", "theorem", "mk_continuous_norm_le'", ["linear_map"]], ["mod", "theorem", "mk_continuous_norm_le", ["linear_map"]], ["mod", "def", "mk_continuous₂", ["linear_map"]], ["mod", "theorem", "mk_continuous₂_apply", ["linear_map"]], ["mod", "theorem", "mk_continuous₂_norm_le'", ["linear_map"]], ["mod", "theorem", "mk_continuous₂_norm_le", ["linear_map"]], ["mod", "theorem", "norm_image_of_norm_zero", []]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "def", "coe_lm", ["continuous_linear_map"]], ["add", "def", "coe_lmₛₗ", ["continuous_linear_map"]], ["mod", "theorem", "coe_smul'", ["continuous_linear_map"]], ["mod", "theorem", "coe_smul", ["continuous_linear_map"]], ["mod", "theorem", "comp_smul", ["continuous_linear_map"]], ["mod", "def", "prod_equiv", ["continuous_linear_map"]], ["mod", "theorem", "prod_ext", ["continuous_linear_map"]], ["mod", "theorem", "prod_ext_iff", ["continuous_linear_map"]], ["mod", "def", "prodₗ", ["continuous_linear_map"]]]}]}, {"timestamp": 1638931006, "sha": "1a92bc97", "message": "chore(scripts): update nolints.txt (#10662)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1638911581, "sha": "eaa9e876", "message": "chore(measure_theory/integral/set_to_l1): change definition of dominated_fin_meas_additive (#10585)\nChange the definition to check the property only on measurable sets with finite measure (like every other property in that file).\nAlso make some arguments of `set_to_fun` explicit to improve readability.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["mod", "theorem", "norm_set_to_L1s_le", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "norm_set_to_simple_func_le_sum_mul_norm", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_set_to_simple_func_le_sum_mul_norm_of_integrable", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1638904586, "sha": "54aeec74", "message": "feat(topology/algebra/ordered/basic): Interior of `{x | f x ≤ g x}` (#10653)\nand golf the dual one: `closure_lt_subset_le`", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "lt_subset_interior_le", []]]}]}, {"timestamp": 1638901696, "sha": "a803e21d", "message": "feat(measure_theory/lattice): define typeclasses for measurability of lattice operations, define a lattice on ae_eq_fun (#10591)\nAs was previously done for measurability of arithmetic operations, I define typeclasses for the measurability of sup and inf in a lattice. In the borel_space file, instances of these are provided when the lattice operations are continuous.\nFinally I've put a lattice structure on `ae_eq_fun`.", "changes": [{"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": [["add", "theorem", "coe_fn_inf", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_sup", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": null, "newPath": "src/measure_theory/lattice.lean", "changes": [["add", "theorem", "const_inf", ["ae_measurable"]], ["add", "theorem", "const_sup", ["ae_measurable"]], ["add", "theorem", "inf'", ["ae_measurable"]], ["add", "theorem", "inf", ["ae_measurable"]], ["add", "theorem", "inf_const", ["ae_measurable"]], ["add", "theorem", "sup'", ["ae_measurable"]], ["add", "theorem", "sup", ["ae_measurable"]], ["add", "theorem", "sup_const", ["ae_measurable"]], ["add", "theorem", "const_inf", ["measurable"]], ["add", "theorem", "const_sup", ["measurable"]], ["add", "theorem", "inf'", ["measurable"]], ["add", "theorem", "inf", ["measurable"]], ["add", "theorem", "inf_const", ["measurable"]], ["add", "theorem", "sup'", ["measurable"]], ["add", "theorem", "sup", ["measurable"]], ["add", "theorem", "sup_const", ["measurable"]]]}, {"oldPath": "src/topology/order/lattice.lean", "newPath": "src/topology/order/lattice.lean", "changes": []}]}, {"timestamp": 1638891570, "sha": "ae7a88d1", "message": "feat(field_theory/finite/basic): generalize lemma from field to integral domain (#10655)", "changes": [{"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "prod_univ_units_id_eq_neg_one", ["finite_field"]]]}]}, {"timestamp": 1638891568, "sha": "9a2c2998", "message": "feat(data/pi): add `pi.single_inj` (#10644)", "changes": [{"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "single_inj", ["pi"]]]}]}, {"timestamp": 1638891567, "sha": "03dd404a", "message": "feat(algebra/category): (co)limits in CommRing (#10593)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/CommRing/constructions.lean", "changes": [["add", "def", "Z_is_initial", ["CommRing"]], ["add", "def", "equalizer_fork", ["CommRing"]], ["add", "def", "equalizer_fork_is_limit", ["CommRing"]], ["add", "def", "prod_fan", ["CommRing"]], ["add", "def", "prod_fan_is_limit", ["CommRing"]], ["add", "def", "punit_is_terminal", ["CommRing"]], ["add", "def", "pushout_cocone", ["CommRing"]], ["add", "theorem", "pushout_cocone_X", ["CommRing"]], ["add", "theorem", "pushout_cocone_inl", ["CommRing"]], ["add", "theorem", "pushout_cocone_inr", ["CommRing"]], ["add", "def", "pushout_cocone_is_colimit", ["CommRing"]]]}, {"oldPath": "src/algebra/category/CommRing/pushout.lean", "newPath": null, "changes": [["del", "def", "pushout_cocone", ["CommRing"]], ["del", "theorem", "pushout_cocone_X", ["CommRing"]], ["del", "theorem", "pushout_cocone_inl", ["CommRing"]], ["del", "theorem", "pushout_cocone_inr", ["CommRing"]], ["del", "def", "pushout_cocone_is_colimit", ["CommRing"]]]}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}]}, {"timestamp": 1638888355, "sha": "173a21ab", "message": "feat(topology/sheaves): `F(U ⨿ V) = F(U) × F(V)` (#10597)", "changes": [{"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": [["add", "def", "inter_union_pullback_cone", ["Top", "sheaf"]], ["add", "theorem", "inter_union_pullback_cone_X", ["Top", "sheaf"]], ["add", "theorem", "inter_union_pullback_cone_fst", ["Top", "sheaf"]], ["add", "def", "inter_union_pullback_cone_lift", ["Top", "sheaf"]], ["add", "theorem", "inter_union_pullback_cone_lift_left", ["Top", "sheaf"]], ["add", "theorem", "inter_union_pullback_cone_lift_right", ["Top", "sheaf"]], ["add", "theorem", "inter_union_pullback_cone_snd", ["Top", "sheaf"]], ["add", "def", "is_limit_pullback_cone", ["Top", "sheaf"]], ["add", "def", "is_product_of_disjoint", ["Top", "sheaf"]]]}]}, {"timestamp": 1638859190, "sha": "ba1cbfac", "message": "feat(topology/algebra/ordered/basic): Add alternative formulations of four lemmas. (#10630)\nAdd alternative formulations of lemmas about interiors and frontiers of `Iic` and `Ici`. The existing formulations make typeclass assumptions `[no_top_order]` or `[no_bot_order]`. These alternative formulations assume instead that the endpoint of the interval is not top or bottom; and as such they can be applied in, e.g., `nnreal` and `ennreal`.\nAlso, some lemmas now assume `(Ioi a).nonempty` or `(Iio a).nonempty` instead of `{b} (h : a < b)` or `{b} (h : b < a)`, respectively.", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["mod", "theorem", "closure_Iio'", []], ["mod", "theorem", "closure_Ioi'", []], ["add", "theorem", "frontier_Ici'", []], ["mod", "theorem", "frontier_Ici", []], ["add", "theorem", "frontier_Iic'", []], ["mod", "theorem", "frontier_Iic", []], ["add", "theorem", "frontier_Iio'", []], ["mod", "theorem", "frontier_Iio", []], ["add", "theorem", "frontier_Ioi'", []], ["mod", "theorem", "frontier_Ioi", []], ["add", "theorem", "interior_Ici'", []], ["mod", "theorem", "interior_Ici", []], ["add", "theorem", "interior_Iic'", []], ["mod", "theorem", "interior_Iic", []], ["mod", "theorem", "nhds_within_Iio_ne_bot'", []], ["mod", "theorem", "nhds_within_Iio_self_ne_bot'", []], ["mod", "theorem", "nhds_within_Ioi_ne_bot'", []], ["mod", "theorem", "nhds_within_Ioi_self_ne_bot'", []]]}, {"oldPath": "src/topology/algebra/ordered/intermediate_value.lean", "newPath": "src/topology/algebra/ordered/intermediate_value.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1638836764, "sha": "90319890", "message": "chore(*): fix last line length and notation style linter errors (#10642)\nThese are the last non-module doc style linter errors (from https://github.com/leanprover-community/mathlib/blob/master/scripts/style-exceptions.txt).", "changes": [{"oldPath": "src/data/pfunctor/multivariate/M.lean", "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/W.lean", "newPath": "src/data/pfunctor/multivariate/W.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/fix.lean", "newPath": "src/data/qpf/multivariate/constructions/fix.lean", "changes": []}, {"oldPath": "src/tactic/induction.lean", "newPath": "src/tactic/induction.lean", "changes": []}, {"oldPath": "src/tactic/reserved_notation.lean", "newPath": "src/tactic/reserved_notation.lean", "changes": []}]}, {"timestamp": 1638836763, "sha": "cd857f77", "message": "feat(data/int/basic): four lemmas about integer divisibility (#10602)\nTheorem 1.1, parts (c), (i), (j), and (k) of Apostol (1976) Introduction to Analytic Number Theory", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "linear_comb", ["has_dvd", "dvd"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "div_dvd_of_ne_zero_dvd", ["int"]], ["add", "theorem", "nat_abs_eq_of_dvd_dvd", ["int"]], ["add", "theorem", "nat_abs_le_of_dvd_ne_zero", ["int"]]]}]}, {"timestamp": 1638830280, "sha": "eec4b70c", "message": "feat(algebra/geom_sum): criteria for 0 < geom_sum (#10567)", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["mod", "def", "geom_sum", []], ["add", "theorem", "geom_sum_alternating_of_lt_neg_one", []], ["mod", "theorem", "geom_sum_def", []], ["add", "theorem", "geom_sum_eq_zero_iff_neg_one", []], ["add", "theorem", "geom_sum_neg_iff", []], ["mod", "theorem", "geom_sum_one", []], ["add", "theorem", "geom_sum_pos", []], ["add", "theorem", "geom_sum_pos_and_lt_one", []], ["add", "theorem", "geom_sum_pos_iff", []], ["add", "theorem", "geom_sum_pos_of_odd", []], ["add", "theorem", "geom_sum_succ'", []], ["add", "theorem", "geom_sum_succ", []], ["add", "theorem", "geom_sum_two", []], ["mod", "theorem", "geom_sum_zero", []], ["mod", "def", "geom_sum₂", []], ["mod", "theorem", "geom_sum₂_def", []], ["mod", "theorem", "geom_sum₂_one", []], ["mod", "theorem", "geom_sum₂_with_one", []], ["mod", "theorem", "geom_sum₂_zero", []], ["add", "theorem", "neg_one_geom_sum", []], ["mod", "theorem", "one_geom_sum", []], ["mod", "theorem", "op_geom_sum", []], ["mod", "theorem", "op_geom_sum₂", []], ["add", "theorem", "zero_geom_sum", []]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "and_or_imp", []], ["add", "theorem", "and_or_imp", ["decidable"]]]}]}, {"timestamp": 1638824746, "sha": "a8c086fe", "message": "feat(linear_algebra/determinant): linear_equiv.det_mul_det_symm (#10635)\nAdd lemmas that the determinants of a `linear_equiv` and its\ninverse multiply to 1. There are a few other lemmas involving\ndeterminants and `linear_equiv`, but apparently not this one.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_mul_det_symm", ["linear_equiv"]], ["add", "theorem", "det_symm_mul_det", ["linear_equiv"]]]}]}, {"timestamp": 1638818582, "sha": "1d5202ae", "message": "feat(data/multiset): add some lemmas about filter (eq x) (#10626)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_filter", ["multiset"]], ["add", "theorem", "filter_eq'", ["multiset"]], ["add", "theorem", "filter_eq", ["multiset"]], ["add", "theorem", "pow_count", ["multiset"]]]}]}, {"timestamp": 1638801934, "sha": "81243140", "message": "feat(linear_algebra/multilinear/basic,linear_algebra/alternating): comp_linear_map lemmas (#10631)\nAdd more lemmas about composing multilinear and alternating maps with\nlinear maps in each argument.\nWhere I wanted a lemma for either of multilinear or alternating maps,\nI added it for both. There are however some lemmas for\n`alternating_map.comp_linear_map` that don't have equivalents at\npresent for `multilinear_map.comp_linear_map` (I added one such\nequivalent `multilinear_map.zero_comp_linear_map` because I needed it\nfor another lemma, but didn't try adding such equivalents of existing\nlemmas where I didn't need them).", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "comp_linear_equiv_eq_zero_iff", ["alternating_map"]], ["add", "theorem", "comp_linear_map_assoc", ["alternating_map"]], ["add", "theorem", "comp_linear_map_id", ["alternating_map"]], ["add", "theorem", "comp_linear_map_inj", ["alternating_map"]], ["add", "theorem", "comp_linear_map_injective", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "theorem", "comp_linear_equiv_eq_zero_iff", ["multilinear_map"]], ["add", "theorem", "comp_linear_map_assoc", ["multilinear_map"]], ["add", "theorem", "comp_linear_map_id", ["multilinear_map"]], ["add", "theorem", "comp_linear_map_inj", ["multilinear_map"]], ["add", "theorem", "comp_linear_map_injective", ["multilinear_map"]], ["add", "theorem", "zero_comp_linear_map", ["multilinear_map"]]]}]}, {"timestamp": 1638797154, "sha": "f50984d8", "message": "chore(linear_algebra/affine_space/basis): remove unhelpful coercion (#10637)\nIt is more useful to have a statement of equality of linear maps than\nof raw functions.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": [["del", "theorem", "coe_linear", ["affine_basis"]], ["add", "theorem", "linear_eq_sum_coords", ["affine_basis"]]]}]}, {"timestamp": 1638773314, "sha": "e6ad0f29", "message": "chore(analysis/inner_product/projections): generalize some lemmas (#10608)\n* generalize a few lemmas from `[finite_dimensional 𝕜 ?x]` to `[complete_space ?x]`;\n* drop unneeded TC assumption in `isometry.tendsto_nhds_iff`;\n* image of a complete set/submodule under an isometry is a complete set/submodule.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "map_orthogonal_projection", ["linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "is_complete_image_iff", ["linear_isometry"]], ["add", "theorem", "is_complete_map_iff", ["linear_isometry"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["mod", "theorem", "tendsto_nhds_iff", ["isometry"]]]}]}, {"timestamp": 1638766923, "sha": "e726945e", "message": "refactor(order/atoms): is_simple_order from is_simple_lattice (#10537)\nRename `is_simple_lattice` to `is_simple_order`, still stating that every element is either `bot` or `top` are, and that it is nontrivial.\nTo state `is_simple_order`, `has_le` and `bounded_order` are required to be defined. This allows for an order where `⊤ ≤ ⊥` (the always true order). \nMany proofs/statements about `is_simple_order`s have been generalized to require solely `partial_order` and not `lattice`. The statements themselves have not been changed. \nThe `is_simple_order.distrib_lattice` instance has been downgraded into a `def` to prevent loops.\nHelper defs have been added like `is_simple_order.preorder` (which is true given the `has_le` `bounded_order` axioms) `is_simple_order.linear_order`, and `is_simple_order.lattice` (which are true when `partial_order`, implying `⊥ < ⊤`.).", "changes": [{"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["del", "theorem", "card", ["fintype", "is_simple_lattice"]], ["del", "theorem", "univ", ["fintype", "is_simple_lattice"]], ["add", "theorem", "card", ["fintype", "is_simple_order"]], ["add", "theorem", "univ", ["fintype", "is_simple_order"]], ["del", "def", "order_iso_bool", ["is_simple_lattice"]], ["del", "theorem", "is_simple_lattice_iff_is_atom_top", []], ["del", "theorem", "is_simple_lattice_iff_is_coatom_bot", []], ["del", "theorem", "is_simple_lattice_iff_is_simple_lattice_order_dual", []], ["add", "theorem", "bot_ne_top", ["is_simple_order"]], ["add", "def", "equiv_bool", ["is_simple_order"]], ["add", "def", "order_iso_bool", ["is_simple_order"]], ["add", "theorem", "is_simple_order_iff_is_atom_top", []], ["add", "theorem", "is_simple_order_iff_is_coatom_bot", []], ["add", "theorem", "is_simple_order_iff_is_simple_order_order_dual", []], ["del", "theorem", "is_simple_lattice", ["order_iso"]], ["del", "theorem", "is_simple_lattice_iff", ["order_iso"]], ["add", "theorem", "is_simple_order", ["order_iso"]], ["add", "theorem", "is_simple_order_iff", ["order_iso"]], ["del", "theorem", "is_simple_lattice_Ici_iff_is_coatom", ["set"]], ["del", "theorem", "is_simple_lattice_Iic_iff_is_atom", ["set"]], ["add", "theorem", "is_simple_order_Ici_iff_is_coatom", ["set"]], ["add", "theorem", "is_simple_order_Iic_iff_is_atom", ["set"]]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": [["mod", "def", "is_simple_module", []]]}]}, {"timestamp": 1638734085, "sha": "e7bd49f2", "message": "chore(scripts/mk_all.sh): allow 'mk_all.sh ../test' (#10628)\nHelpful for mathport CI, cf https://github.com/leanprover-community/mathport/pull/64", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}]}, {"timestamp": 1638727559, "sha": "2b2d1167", "message": "chore(combinatorics/simple_graph/coloring): remove extra asterisk (#10618)", "changes": [{"oldPath": "src/combinatorics/simple_graph/partition.lean", "newPath": "src/combinatorics/simple_graph/partition.lean", "changes": []}]}, {"timestamp": 1638721991, "sha": "8c1f2b5d", "message": "feat(ring_theory/graded_algebra): projection map of graded algebra (#10116)\nThis pr defines and proves some property about `graded_algebra.proj : A →ₗ[R] A`", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": [["add", "theorem", "coe_of_add_subgroup_apply", ["direct_sum"]], ["add", "theorem", "coe_of_add_submonoid_apply", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "theorem", "coe_mul_apply_add_subgroup", ["direct_sum"]], ["add", "theorem", "coe_mul_apply_add_submonoid", ["direct_sum"]], ["add", "theorem", "coe_mul_apply_submodule", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "theorem", "coe_of_submodule_apply", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["add", "theorem", "mul_eq_sum_support_ghas_mul", ["direct_sum"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "coe_finset_prod", ["subgroup"]], ["add", "theorem", "coe_list_prod", ["subgroup"]], ["add", "theorem", "coe_multiset_prod", ["subgroup"]]]}, {"oldPath": "src/ring_theory/graded_algebra/basic.lean", "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["add", "theorem", "decompose_coe", ["graded_algebra"]], ["add", "theorem", "decompose_of_mem", ["graded_algebra"]], ["add", "theorem", "decompose_of_mem_ne", ["graded_algebra"]], ["add", "theorem", "decompose_of_mem_same", ["graded_algebra"]], ["add", "theorem", "is_internal", ["graded_algebra"]], ["add", "theorem", "mem_support_iff", ["graded_algebra"]], ["add", "def", "proj", ["graded_algebra"]], ["add", "theorem", "proj_apply", ["graded_algebra"]], ["add", "theorem", "proj_recompose", ["graded_algebra"]], ["add", "theorem", "sum_support_decompose", ["graded_algebra"]], ["add", "def", "support", ["graded_algebra"]], ["del", "theorem", "is_internal", ["graded_ring"]]]}]}, {"timestamp": 1638704810, "sha": "428b9e55", "message": "feat(topology/continuous_function/bounded): continuous bounded real-valued functions form a normed vector lattice (#10322)\nfeat(topology/continuous_function/bounded): continuous bounded real-valued functions form a normed vector lattice", "changes": [{"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": [["add", "theorem", "norm_sup_sub_sup_le_add_norm", []], ["del", "theorem", "norm_two_inf_sub_two_inf_le", []], ["del", "theorem", "norm_two_sup_sub_two_sup_le", []]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "coe_fn_abs", ["bounded_continuous_function"]], ["add", "theorem", "coe_fn_sup", ["bounded_continuous_function"]]]}]}, {"timestamp": 1638676019, "sha": "37f343cf", "message": "chore(data/stream): merge `basic` into `init` (#10617)", "changes": [{"oldPath": "src/combinatorics/hindman.lean", "newPath": "src/combinatorics/hindman.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/stream/basic.lean", "newPath": null, "changes": [["del", "theorem", "head_drop", ["stream"]]]}, {"oldPath": "src/data/stream/init.lean", "newPath": "src/data/stream/init.lean", "changes": [["add", "theorem", "head_drop", ["stream"]]]}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": []}]}, {"timestamp": 1638631501, "sha": "6eeb54e6", "message": "fix(topology/algebra/uniform_field): remove unnecessary topological_r… (#10614)\n…ing variable\nRight now the last three definitions in `topology.algebra.uniform_field` (after line 115) have `[topological_division_ring K]` and `[topological_ring K]`. For example\n```\nmul_hat_inv_cancel :\n ∀ {K : Type u_1} [_inst_1 : field K] [_inst_2 : uniform_space K] [_inst_3 : topological_division_ring K]\n [_inst_4 : completable_top_field K] [_inst_5 : uniform_add_group K] [_inst_6 : topological_ring K]\n {x : uniform_space.completion K}, x ≠ 0 → x * hat_inv x = 1\n```\nWhilst it is not obvious from the notation, both of these are `Prop`s so there is no danger of diamonds. The full logic is: `field` and `uniform_space` are data, and the rest are Props (so should be called things like `is_topological_ring` etc IMO). `topological_division_ring` is the assertion of continuity of `add`, `neg`, `mul` and `inv` (away from 0), `completable_top_field` is another assertion about how inversion plays well with the topology (and which is not implied by `topological_division_ring`), `uniform_add_group` is the assertion about `add` and `neg` playing well with the uniform structure, and then `topological_ring` is a prop which is implied by `topological_division_ring`. I am not sure I see the benefits of carrying around the extra `topological_ring` for these three definitions so I've removed it to see if mathlib still compiles. Edit: it does.", "changes": [{"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}]}, {"timestamp": 1638631500, "sha": "c940e474", "message": "chore(topology/continuous_function): remove forget_boundedness (#10612)\nIt is the same as `to_continuous_map`.", "changes": [{"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["del", "theorem", "to_Lp_comp_forget_boundedness", ["continuous_map"]], ["add", "theorem", "to_Lp_comp_to_continuous_map", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["del", "def", "forget_boundedness", ["bounded_continuous_function"]], ["del", "def", "forget_boundedness_add_hom", ["bounded_continuous_function"]], ["del", "theorem", "forget_boundedness_coe", ["bounded_continuous_function"]], ["del", "def", "forget_boundedness_linear_map", ["bounded_continuous_function"]], ["add", "def", "to_continuous_map_add_hom", ["bounded_continuous_function"]], ["add", "def", "to_continuous_map_linear_map", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["del", "theorem", "dist_forget_boundedness", ["bounded_continuous_function"]], ["add", "theorem", "dist_to_continuous_map", ["bounded_continuous_function"]], ["del", "theorem", "norm_forget_boundedness_eq", ["bounded_continuous_function"]], ["add", "theorem", "norm_to_continuous_map_eq", ["bounded_continuous_function"]]]}]}, {"timestamp": 1638624976, "sha": "b3b7fe67", "message": "chore(algebra/module): generalize `char_zero.of_algebra` to `char_zero.of_module` (#10609)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "of_algebra", ["char_zero"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "of_module", ["char_zero"]], ["del", "theorem", "eq_zero_of_smul_two_eq_zero", []], ["add", "theorem", "eq_zero_of_two_nsmul_eq_zero", []]]}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}]}, {"timestamp": 1638608317, "sha": "5d0e65aa", "message": "chore(order/galois_connection): upgrade `is_glb_l` to `is_least_l` (#10606)\n* upgrade `galois_connection.is_glb_l` to `galois_connection.is_least_l`;\n* upgrade `galois_connection.is_lub_l` to `galois_connection.is_greatest_l`.", "changes": [{"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["mod", "theorem", "is_glb_l", ["galois_connection"]], ["add", "theorem", "is_greatest_u", ["galois_connection"]], ["add", "theorem", "is_least_l", ["galois_connection"]], ["mod", "theorem", "is_lub_u", ["galois_connection"]]]}]}, {"timestamp": 1638602094, "sha": "3479b7f1", "message": "chore(order/complete_lattice): golf a proof (#10607)\nAlso reformulate `le_Sup_iff` in terms of `upper_bounds`.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "le_Sup_iff", []]]}]}, {"timestamp": 1638594306, "sha": "9c4e41ae", "message": "feat(number_theory/modular): the action of `SL(2, ℤ)` on the upper half plane (#8611)\nWe define the action of `SL(2,ℤ)` on `ℍ` (via restriction of the `SL(2,ℝ)` action in `analysis.complex.upper_half_plane`). We then define the standard fundamental domain `𝒟` for this action and show that any point in `ℍ` can be moved inside `𝒟`.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_fn_general_linear_equiv", ["linear_map", "general_linear_group"]]]}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": [["add", "theorem", "coe_to_linear", ["matrix", "general_linear_group"]], ["add", "def", "mk_of_det_ne_zero", ["matrix", "general_linear_group"]], ["add", "def", "to_linear", ["matrix", "general_linear_group"]], ["add", "theorem", "to_linear_apply", ["matrix", "general_linear_group"]], ["add", "def", "plane_conformal_matrix", ["matrix"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["add", "theorem", "coe_int_neg", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_matrix_coe", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_mk", ["matrix", "special_linear_group"]], ["add", "def", "map", ["matrix", "special_linear_group"]]]}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/number_theory/modular.lean", "changes": [["add", "def", "S", ["modular_group"]], ["add", "def", "T'", ["modular_group"]], ["add", "def", "T", ["modular_group"]], ["add", "theorem", "bottom_row_coprime", ["modular_group"]], ["add", "theorem", "bottom_row_surj", ["modular_group"]], ["add", "theorem", "coe_smul", ["modular_group"]], ["add", "theorem", "denom_apply", ["modular_group"]], ["add", "theorem", "exists_max_im", ["modular_group"]], ["add", "theorem", "exists_row_one_eq_and_min_re", ["modular_group"]], ["add", "theorem", "exists_smul_mem_fundamental_domain", ["modular_group"]], ["add", "def", "fundamental_domain", ["modular_group"]], ["add", "theorem", "im_lt_im_S_smul", ["modular_group"]], ["add", "theorem", "im_smul", ["modular_group"]], ["add", "theorem", "im_smul_eq_div_norm_sq", ["modular_group"]], ["add", "def", "lc_row0", ["modular_group"]], ["add", "theorem", "lc_row0_apply'", ["modular_group"]], ["add", "theorem", "lc_row0_apply", ["modular_group"]], ["add", "def", "lc_row0_extend", ["modular_group"]], ["add", "theorem", "neg_smul", ["modular_group"]], ["add", "theorem", "re_smul", ["modular_group"]], ["add", "theorem", "smul_coe", ["modular_group"]], ["add", "theorem", "smul_eq_lc_row0_add", ["modular_group"]], ["add", "theorem", "tendsto_abs_re_smul", ["modular_group"]], ["add", "theorem", "tendsto_lc_row0", ["modular_group"]], ["add", "theorem", "tendsto_norm_sq_coprime_pair", ["modular_group"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "coe_mul_right", ["homeomorph"]], ["add", "theorem", "mul_right_symm", ["homeomorph"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "trans_apply", ["homeomorph"]]]}]}, {"timestamp": 1638588304, "sha": "2da25ede", "message": "feat(combinatorics/simple_graph): Graph coloring and partitions (#10287)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "def", "complete_bipartite_graph", []], ["add", "def", "of_embedding", ["simple_graph", "embedding", "complete_graph"]], ["add", "def", "map_spanning_subgraphs", ["simple_graph", "hom"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/coloring.lean", "changes": [["add", "theorem", "chromatic_number_bdd_below", ["simple_graph"]], ["add", "theorem", "chromatic_number_bot", ["simple_graph"]], ["add", "theorem", "chromatic_number_complete_graph", ["simple_graph"]], ["add", "theorem", "chromatic_number_eq_card_of_forall_surj", ["simple_graph"]], ["add", "theorem", "chromatic_number_eq_zero_of_isempty", ["simple_graph"]], ["add", "theorem", "chromatic_number_le_card", ["simple_graph"]], ["add", "theorem", "chromatic_number_le_of_colorable", ["simple_graph"]], ["add", "theorem", "chromatic_number_le_of_forall_imp", ["simple_graph"]], ["add", "theorem", "chromatic_number_le_of_le_colorable", ["simple_graph"]], ["add", "theorem", "chromatic_number_le_one_of_subsingleton", ["simple_graph"]], ["add", "theorem", "of_le", ["simple_graph", "colorable"]], ["add", "def", "colorable", ["simple_graph"]], ["add", "theorem", "colorable_chromatic_number", ["simple_graph"]], ["add", "theorem", "colorable_chromatic_number_of_fintype", ["simple_graph"]], ["add", "theorem", "colorable_iff_exists_bdd_nat_coloring", ["simple_graph"]], ["add", "theorem", "colorable_of_fintype", ["simple_graph"]], ["add", "theorem", "colorable_of_is_empty", ["simple_graph"]], ["add", "theorem", "colorable_of_le_colorable", ["simple_graph"]], ["add", "theorem", "colorable_set_nonempty_of_colorable", ["simple_graph"]], ["add", "theorem", "card_color_classes_le", ["simple_graph", "coloring"]], ["add", "def", "color_class", ["simple_graph", "coloring"]], ["add", "def", "color_classes", ["simple_graph", "coloring"]], ["add", "theorem", "color_classes_finite_of_fintype", ["simple_graph", "coloring"]], ["add", "theorem", "color_classes_independent", ["simple_graph", "coloring"]], ["add", "theorem", "color_classes_is_partition", ["simple_graph", "coloring"]], ["add", "theorem", "mem_color_class", ["simple_graph", "coloring"]], ["add", "theorem", "mem_color_classes", ["simple_graph", "coloring"]], ["add", "def", "mk", ["simple_graph", "coloring"]], ["add", "theorem", "not_adj_of_mem_color_class", ["simple_graph", "coloring"]], ["add", "theorem", "to_colorable", ["simple_graph", "coloring"]], ["add", "theorem", "valid", ["simple_graph", "coloring"]], ["add", "def", "coloring", ["simple_graph"]], ["add", "def", "coloring_of_is_empty", ["simple_graph"]], ["add", "def", "bicoloring", ["simple_graph", "complete_bipartite_graph"]], ["add", "theorem", "chromatic_number", ["simple_graph", "complete_bipartite_graph"]], ["add", "theorem", "is_empty_of_chromatic_number_eq_zero", ["simple_graph"]], ["add", "theorem", "is_empty_of_colorable_zero", ["simple_graph"]], ["add", "def", "recolor_of_embedding", ["simple_graph"]], ["add", "def", "recolor_of_equiv", ["simple_graph"]], ["add", "def", "self_coloring", ["simple_graph"]], ["add", "theorem", "zero_lt_chromatic_number", ["simple_graph"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/partition.lean", "changes": [["add", "def", "to_partition", ["simple_graph", "coloring"]], ["add", "theorem", "mem_part_of_vertex", ["simple_graph", "partition"]], ["add", "def", "part_of_vertex", ["simple_graph", "partition"]], ["add", "theorem", "part_of_vertex_mem", ["simple_graph", "partition"]], ["add", "theorem", "part_of_vertex_ne_of_adj", ["simple_graph", "partition"]], ["add", "def", "parts_card_le", ["simple_graph", "partition"]], ["add", "theorem", "to_colorable", ["simple_graph", "partition"]], ["add", "def", "to_coloring'", ["simple_graph", "partition"]], ["add", "def", "to_coloring", ["simple_graph", "partition"]], ["add", "structure", "partition", ["simple_graph"]], ["add", "def", "partitionable", ["simple_graph"]], ["add", "theorem", "partitionable_iff_colorable", ["simple_graph"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_range_le", ["fintype"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["add", "theorem", "card_classes_ker_le", ["setoid"]], ["add", "theorem", "classes_ker_subset_fiber_set", ["setoid"]], ["add", "theorem", "nonempty_fintype_classes_ker", ["setoid"]]]}]}, {"timestamp": 1638582770, "sha": "ef3540a9", "message": "chore(measure_theory/function/conditional_expectation): golf condexp_L1 proofs using set_to_fun lemmas (#10592)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "theorem", "condexp_L1_neg", ["measure_theory"]], ["mod", "theorem", "condexp_L1_smul", ["measure_theory"]]]}]}, {"timestamp": 1638582769, "sha": "23dfe700", "message": "feat(*): `A ⧸ B` notation for quotients in algebra (#10501)\nWe introduce a class `has_quotient` that provides `⧸` (U+29F8 BIG SOLIDUS) notation for quotients, e.g. if `H : subgroup G` then `quotient_group.quotient H` is now written as `G ⧸ H`. Thanks to @jcommelin for suggesting the initial design.\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Notation.20for.20group.28module.2Cideal.29.20quotients", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/kernels.lean", "newPath": "src/algebra/category/Module/kernels.lean", "changes": []}, {"oldPath": "src/algebra/char_p/quotient.lean", "newPath": "src/algebra/char_p/quotient.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": [["mod", "def", "to_quotient", ["mul_action_hom"]]]}, {"oldPath": "src/algebra/lie/cartan_matrix.lean", "newPath": "src/algebra/lie/cartan_matrix.lean", "changes": [["mod", "def", "to_lie_algebra", ["matrix"]]]}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": [["mod", "def", "action_as_endo_map", ["lie_submodule", "quotient"]], ["mod", "def", "action_as_endo_map_bracket", ["lie_submodule", "quotient"]], ["mod", "theorem", "lie_module_hom_ext", ["lie_submodule", "quotient"]], ["mod", "def", "mk'", ["lie_submodule", "quotient"]], ["mod", "def", "mk", ["lie_submodule", "quotient"]], ["del", "def", "quotient", ["lie_submodule"]]]}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/quotient.lean", "changes": [["add", "def", "quotient", ["has_quotient"]]]}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": [["mod", "def", "normed_mk", ["add_subgroup"]], ["mod", "theorem", "norm_mk_lt", []], ["mod", "theorem", "norm_mk_zero", []], ["mod", "theorem", "quotient_norm_add_le", []], ["mod", "theorem", "quotient_norm_neg", []], ["mod", "theorem", "quotient_norm_nonneg", []], ["mod", "theorem", "quotient_norm_sub_rev", []]]}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/angle.lean", "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "theorem", "eq'", ["quotient_group"]], ["mod", "theorem", "forall_coe", ["quotient_group"]], ["mod", "theorem", "induction_on'", ["quotient_group"]], ["mod", "theorem", "induction_on", ["quotient_group"]], ["mod", "def", "mk", ["quotient_group"]], ["mod", "theorem", "mk_mul_of_mem", ["quotient_group"]], ["mod", "theorem", "mk_out'_eq_mul", ["quotient_group"]], ["mod", "theorem", "out_eq'", ["quotient_group"]], ["del", "def", "quotient", ["quotient_group"]]]}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["mod", "def", "of_quotient_stabilizer", ["mul_action"]]]}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["mod", "theorem", "index_eq_card", ["subgroup"]], ["mod", "theorem", "index_ne_zero_of_fintype", ["subgroup"]], ["mod", "theorem", "one_lt_index_of_ne_top", ["subgroup"]]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["mod", "theorem", "index", ["is_p_group"]]]}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "theorem", "coe_mk'", ["quotient_group"]], ["mod", "theorem", "eq_one_iff", ["quotient_group"]], ["mod", "def", "ker_lift", ["quotient_group"]], ["mod", "def", "mk'", ["quotient_group"]], ["mod", "theorem", "monoid_hom_ext", ["quotient_group"]], ["mod", "def", "quotient_bot", ["quotient_group"]], ["mod", "theorem", "quotient_quotient_equiv_quotient_aux_coe", ["quotient_group"]], ["mod", "def", "range_ker_lift", ["quotient_group"]]]}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": [["mod", "def", "eval", ["adic_completion"]], ["mod", "def", "adic_completion", []]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/linear_algebra/isomorphisms.lean", "newPath": "src/linear_algebra/isomorphisms.lean", "changes": [["mod", "theorem", "quotient_quotient_equiv_quotient_aux_mk", ["submodule"]]]}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["mod", "theorem", "mk_quotient_equiv_of_is_compl_apply", ["submodule"]], ["mod", "def", "quotient_equiv_of_is_compl", ["submodule"]]]}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": [["mod", "theorem", "comap_mkq_embedding_eq", ["submodule"]], ["mod", "theorem", "le_comap_mkq", ["submodule"]], ["mod", "def", "liftq", ["submodule"]], ["mod", "theorem", "linear_map_qext", ["submodule"]], ["mod", "theorem", "map_liftq", ["submodule"]], ["mod", "def", "mapq_linear", ["submodule"]], ["mod", "def", "mkq", ["submodule"]], ["mod", "def", "quot_equiv_of_eq", ["submodule"]], ["mod", "def", "quot_equiv_of_eq_bot", ["submodule"]], ["mod", "theorem", "quot_hom_ext", ["submodule"]], ["mod", "theorem", "mk'_eq_mk", ["submodule", "quotient"]], ["mod", "def", "mk", ["submodule", "quotient"]], ["mod", "theorem", "mk_add", ["submodule", "quotient"]], ["mod", "theorem", "mk_eq_zero", ["submodule", "quotient"]], ["mod", "theorem", "mk_neg", ["submodule", "quotient"]], ["mod", "theorem", "mk_smul", ["submodule", "quotient"]], ["mod", "theorem", "mk_sub", ["submodule", "quotient"]], ["mod", "theorem", "mk_zero", ["submodule", "quotient"]], ["mod", "theorem", "nontrivial_of_lt_top", ["submodule", "quotient"]], ["mod", "theorem", "quot_mk_eq_mk", ["submodule", "quotient"]], ["del", "def", "quotient", ["submodule"]]]}, {"oldPath": "src/linear_algebra/smodeq.lean", "newPath": "src/linear_algebra/smodeq.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": [["mod", "def", "class_group", []]]}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["mod", "def", "residue_field", ["local_ring"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "def", "lift_sup_quot_quot_mk", ["double_quot"]], ["mod", "def", "quot_left_to_quot_sup", ["double_quot"]], ["mod", "def", "quot_quot_equiv_comm", ["double_quot"]], ["mod", "def", "quot_quot_equiv_quot_sup", ["double_quot"]], ["mod", "def", "quot_quot_mk", ["double_quot"]], ["mod", "def", "quot_quot_to_quot_sup", ["double_quot"]], ["mod", "theorem", "map_smul", ["ideal", "ker_lift"]], ["mod", "def", "ker_lift_alg", ["ideal"]], ["mod", "def", "mkₐ", ["ideal", "quotient"]], ["mod", "theorem", "mkₐ_ker", ["ideal", "quotient"]], ["mod", "def", "ker_lift", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["mod", "theorem", "comap_eq_of_scalar_tower_quotient", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/quotient.lean", "newPath": "src/ring_theory/ideal/quotient.lean", "changes": [["mod", "def", "factor", ["ideal", "quotient"]], ["mod", "theorem", "is_domain_iff_prime", ["ideal", "quotient"]], ["mod", "def", "mk", ["ideal", "quotient"]], ["mod", "theorem", "mk_eq_mk", ["ideal", "quotient"]], ["mod", "theorem", "ring_hom_ext", ["ideal", "quotient"]], ["mod", "theorem", "zero_eq_one_iff", ["ideal", "quotient"]], ["mod", "theorem", "zero_ne_one_iff", ["ideal", "quotient"]], ["del", "def", "quotient", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "comap_on_quot_eq", ["add_valuation"]], ["mod", "def", "on_quot_val", ["add_valuation"]], ["mod", "theorem", "self_le_supp_comap", ["add_valuation"]], ["mod", "theorem", "comap_on_quot_eq", ["valuation"]], ["mod", "theorem", "self_le_supp_comap", ["valuation"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "is_open_map_coe", ["quotient_group"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1638576876, "sha": "0bd9b6a3", "message": "feat(group_theory/order_of_element): order of a product of elements (#10399)\nThe lemma is: If `x` and `y` are commuting elements of coprime orders, then the order of `x * y` is the product of the orders of `x` and `y`. This also gives a version for the minimal period in dynamics from which the algebraic statement is derived.", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "lcm_dvd_mul", ["nat"]]]}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "minimal_period_of_comp_dvd_mul", ["function", "commute"]], ["add", "theorem", "minimal_period_of_comp_eq_mul_of_coprime", ["function", "commute"]], ["add", "theorem", "comp", ["function", "is_periodic_pt"]], ["add", "theorem", "comp_lcm", ["function", "is_periodic_pt"]], ["add", "theorem", "iterate_mod_apply", ["function", "is_periodic_pt"]], ["add", "theorem", "left_of_comp", ["function", "is_periodic_pt"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_mul_dvd_lcm_order_of", ["commute"]], ["add", "theorem", "order_of_mul_dvd_mul_order_of", ["commute"]], ["add", "theorem", "order_of_mul_eq_mul_order_of_of_coprime", ["commute"]]]}]}, {"timestamp": 1638564391, "sha": "1376f53d", "message": "feat(analysis.normed_space.lattice_ordered_group): Add `two_inf_sub_two_inf_le`, `two_sup_sub_two_sup_le` and supporting lemmas (#10514)\nfeat(analysis.normed_space.lattice_ordered_group): Add `two_inf_sub_two_inf_le`, `two_sup_sub_two_sup_le` and supporting lemmas", "changes": [{"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": [["add", "theorem", "abs_abs_div_abs_le", ["lattice_ordered_comm_group"]], ["add", "theorem", "abs_inv_comm", ["lattice_ordered_comm_group"]], ["add", "theorem", "inf_sq_eq_mul_div_abs_div", ["lattice_ordered_comm_group"]], ["del", "theorem", "two_inf_eq_mul_div_abs_div", ["lattice_ordered_comm_group"]]]}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": [["add", "theorem", "norm_abs_sub_abs", []], ["add", "theorem", "norm_two_inf_sub_two_inf_le", []], ["add", "theorem", "norm_two_sup_sub_two_sup_le", []]]}]}, {"timestamp": 1638559628, "sha": "cd2230b4", "message": "chore(data/nat/prime): golf some proofs (#10599)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1638559625, "sha": "bddc16a5", "message": "fix(tactic/abel): handle smul on groups (#10587)\nThe issue was that `abel` expects to see only `smulg` used for groups and only `smul` for monoids, but you can also use `smul` on groups so we have to normalize that away.\nfixes #8456", "changes": [{"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": [["add", "theorem", "subst_into_smul_upcast", ["tactic", "abel"]]]}, {"oldPath": "test/abel.lean", "newPath": "test/abel.lean", "changes": []}]}, {"timestamp": 1638553594, "sha": "46e9a235", "message": "feat(probability_theory/stopping): generalize a lemma (#10598)", "changes": [{"oldPath": "src/probability_theory/stopping.lean", "newPath": "src/probability_theory/stopping.lean", "changes": [["mod", "theorem", "measurable", ["measure_theory", "is_stopping_time"]], ["del", "def", "measurable_space", ["measure_theory", "is_stopping_time"]]]}]}, {"timestamp": 1638553593, "sha": "1e897458", "message": "feat(data/finset/lattice): add sup_eq_bot_iff and inf_eq_top_iff (#10596)\nFrom flt-regular.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_eq_top_iff", ["finset"]], ["add", "theorem", "sup_eq_bot_iff", ["finset"]]]}]}, {"timestamp": 1638553592, "sha": "92fafba2", "message": "feat(data/(mv_)polynomial): add aeval_prod and aeval_sum for (mv_)polynomial (#10594)\nAnother couple of small polynomial helper lemmas from flt-regular.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "aeval_prod", ["mv_polynomial"]], ["add", "theorem", "aeval_sum", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_prod", ["polynomial"]], ["add", "theorem", "aeval_sum", ["polynomial"]]]}]}, {"timestamp": 1638553591, "sha": "4de07731", "message": "feat(category_theory/limits): Strict terminal objects. (#10582)", "changes": [{"oldPath": "src/category_theory/limits/shapes/strict_initial.lean", "newPath": "src/category_theory/limits/shapes/strict_initial.lean", "changes": [["add", "theorem", "has_strict_terminal_objects_of_terminal_is_strict", ["category_theory", "limits"]], ["add", "theorem", "is_iso_from", ["category_theory", "limits", "is_terminal"]], ["add", "theorem", "strict_hom_ext", ["category_theory", "limits", "is_terminal"]], ["add", "theorem", "subsingleton_to", ["category_theory", "limits", "is_terminal"]], ["add", "theorem", "limit_π_is_iso_of_is_strict_terminal", ["category_theory", "limits"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "terminal"]], ["add", "theorem", "subsingleton_to", ["category_theory", "limits", "terminal"]]]}]}, {"timestamp": 1638553589, "sha": "d45708fc", "message": "feat(topology/sheaves): The empty component of a sheaf is terminal (#10578)", "changes": [{"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "def", "is_terminal_of_bot_cover", ["category_theory", "Sheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": [["add", "def", "is_terminal_of_empty", ["Top", "sheaf"]], ["add", "def", "is_terminal_of_eq_empty", ["Top", "sheaf"]]]}]}, {"timestamp": 1638547905, "sha": "1e18e93d", "message": "chore(algebra/lattice_ordered_group): review (names, spaces, golf...) (#10595)\nThis is a review of `algebra/lattice_ordered_group` and `analysis/normed_space/lattice_ordered_group`:\n- delete or add spaces at many places\n- add brackets around goals\n- replace `apply` by `exact` when closing a goal\n- change many names to better fit the naming convention\n- cut some big proofs into several lemmas\n- add a few `simp` attributes\n- remove a non-terminal simp\n- golf\n- add some simple API lemmas\nI did not do anything about the docstrings of the lemmas. Some of them don't interact correctly with `to_additive` (the additive comment is shown for the multiplicative lemma in the doc, for example).", "changes": [{"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": [["add", "theorem", "inv_le_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_abs_abs", ["lattice_ordered_comm_group"]], ["del", "theorem", "m_le_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_neg_abs", ["lattice_ordered_comm_group"]], ["del", "theorem", "m_neg_pos", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_pos_abs", ["lattice_ordered_comm_group"]], ["del", "theorem", "m_pos_pos", ["lattice_ordered_comm_group"]], ["del", "theorem", "m_pos_pos_id", ["lattice_ordered_comm_group"]], ["del", "theorem", "mabs_idempotent", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_inf_div_inf_le_mabs", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_mul_le", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_of_one_le", ["lattice_ordered_comm_group"]], ["del", "theorem", "mabs_pos", ["lattice_ordered_comm_group"]], ["del", "theorem", "mabs_pos_eq", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_sup_div_sup_le_mabs", ["lattice_ordered_comm_group"]], ["del", "theorem", "mabs_triangle", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_eq_one_iff'", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_eq_one_iff", ["lattice_ordered_comm_group"]], ["mod", "theorem", "neg_eq_pos_inv", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_le_one_iff", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_of_inv_le_one", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_of_le_one", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_of_one_le", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_of_one_le_inv", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_one", ["lattice_ordered_comm_group"]], ["add", "theorem", "one_le_abs", ["lattice_ordered_comm_group"]], ["add", "theorem", "one_le_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "one_le_pos", ["lattice_ordered_comm_group"]], ["del", "theorem", "pos_div_neg'", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_div_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_eq_one_iff", ["lattice_ordered_comm_group"]], ["mod", "theorem", "pos_inf_neg_eq_one", ["lattice_ordered_comm_group"]], ["del", "theorem", "pos_inv_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_le_one_iff", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_of_le_one", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_of_one_le", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_one", ["lattice_ordered_comm_group"]], ["add", "theorem", "mul_inf", []], ["add", "theorem", "mul_sup", []], ["del", "theorem", "mul_sup_eq_mul_sup_mul", []]]}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": [["mod", "theorem", "dual_solid", []], ["mod", "theorem", "norm_abs_eq_norm", []], ["add", "theorem", "norm_inf_sub_inf_le_add_norm", []]]}]}, {"timestamp": 1638547903, "sha": "a7b4018a", "message": "fix(tactic/ring): bugfixes in ring_nf (#10572)\nAs reported by @hrmacbeth:\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60ring_nf.60.20behaves.20strangely.20with.20def.20in.20original.20goal", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1638547901, "sha": "df931664", "message": "feat(algebraic_geometry): Explicit description of the colimit of presheafed spaces. (#10466)", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": [["add", "def", "colimit_presheaf_obj_iso_componentwise_limit", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "colimit_presheaf_obj_iso_componentwise_limit_hom_π", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "colimit_presheaf_obj_iso_componentwise_limit_inv_ι_app", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "componentwise_diagram", ["algebraic_geometry", "PresheafedSpace"]]]}]}, {"timestamp": 1638547900, "sha": "b7ed03f9", "message": "feat(algebraic_geometry): Open immersions of presheafed spaces (#10437)", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/open_immersion.lean", "changes": [["add", "def", "is_open_immersion", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "app_inv_app'", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "app_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "inv_app_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "inv_inv_app", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "inv_naturality", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "iso_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "iso_restrict_hom_of_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "iso_restrict_inv_of_restrict", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "open_functor", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "theorem", "to_iso", ["algebraic_geometry", "PresheafedSpace", "is_open_immersion"]], ["add", "def", "is_open_immersion", ["algebraic_geometry", "SheafedSpace"]], ["add", "def", "is_open_immersion", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["add", "theorem", "restrict_stalk_iso_inv_eq_of_restrict", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "stalk_pushforward_iso_of_open_embedding", ["Top", "presheaf", "stalk_pushforward"]]]}]}, {"timestamp": 1638547898, "sha": "2f44ac8f", "message": "feat(algebra/monoid_algebra/grading): internal graded structure for an arbitrary degree function (#10435)\nThis gives an internal graded structure of an additive monoid algebra for the grading given by an arbitrary degree function. The grading in the original file is redefined as the grading for the identity degree function.", "changes": [{"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": [["add", "def", "equiv_grades_by", ["add_monoid_algebra"]], ["mod", "def", "grade", ["add_monoid_algebra"]], ["add", "theorem", "is_internal", ["add_monoid_algebra", "grade_by"]], ["add", "def", "grade_by", ["add_monoid_algebra"]], ["add", "theorem", "grade_by_id", ["add_monoid_algebra"]], ["add", "theorem", "grade_eq_lsingle_range", ["add_monoid_algebra"]], ["add", "theorem", "mem_grade_by_iff", ["add_monoid_algebra"]], ["add", "theorem", "mem_grade_iff'", ["add_monoid_algebra"]], ["add", "theorem", "mem_grade_iff", ["add_monoid_algebra"]], ["add", "def", "of_grades_by", ["add_monoid_algebra"]], ["add", "theorem", "of_grades_by_comp_to_grades_by", ["add_monoid_algebra"]], ["add", "theorem", "of_grades_by_of", ["add_monoid_algebra"]], ["add", "theorem", "of_grades_by_to_grades_by", ["add_monoid_algebra"]], ["mod", "theorem", "of_grades_comp_to_grades", ["add_monoid_algebra"]], ["add", "theorem", "single_mem_grade", ["add_monoid_algebra"]], ["add", "theorem", "single_mem_grade_by", ["add_monoid_algebra"]], ["mod", "def", "to_grades", ["add_monoid_algebra"]], ["add", "def", "to_grades_by", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_by_coe", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_by_comp_of_grades_by", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_by_of_grades_by", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_by_single'", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_by_single", ["add_monoid_algebra"]]]}]}, {"timestamp": 1638547897, "sha": "f0a1cd1a", "message": "feat(category_theory/*): Representably flat functors (#9519)\nDefined representably flat functors as functors `F : C ⥤ D` such that `(X/F)` is cofiltered for each `X : C`.\n- Proved that if `C` has all finite limits and `F` preserves them, then `F` is flat.\n- Proved that flat functors preserves finite limits.\nIn particular, if `C` is finitely complete, then flat iff left exact.\n- Proved that if `C, D` are small, then `F` flat implies `Lan F.op` preserves finite limits implies `F` preserves finite limits.\nIn particular, if `C` is finitely cocomplete, then flat iff `Lan F.op` is left exact.", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["add", "theorem", "eq_to_hom_left", ["category_theory", "comma"]], ["add", "theorem", "eq_to_hom_right", ["category_theory", "comma"]]]}, {"oldPath": null, "newPath": "src/category_theory/flat_functors.lean", "changes": [["add", "def", "Lan_evaluation_iso_colim", ["category_theory"]], ["add", "theorem", "flat_iff_Lan_flat", ["category_theory"]], ["add", "theorem", "flat_of_preserves_finite_limits", ["category_theory"]], ["add", "def", "preserves_finite_limits_iff_Lan_preserves_finite_limits", ["category_theory"]], ["add", "def", "preserves_finite_limits_iff_flat", ["category_theory"]], ["add", "theorem", "fac", ["category_theory", "preserves_finite_limits_of_flat"]], ["add", "theorem", "uniq", ["category_theory", "preserves_finite_limits_of_flat"]], ["add", "def", "preserves_finite_limits_of_flat", ["category_theory"]], ["add", "def", "diagram_to_cone", ["category_theory", "structured_arrow_cone"]], ["add", "def", "to_cone", ["category_theory", "structured_arrow_cone"]], ["add", "def", "to_diagram", ["category_theory", "structured_arrow_cone"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/bicones.lean", "changes": [["add", "inductive", "bicone", ["category_theory"]], ["add", "inductive", "bicone_hom", ["category_theory"]], ["add", "def", "bicone_mk", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/finite.lean", "changes": [["add", "def", "comp_preserves_finite_colimits", ["category_theory", "limits"]], ["add", "def", "comp_preserves_finite_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": [["add", "def", "preserves_limit_of_Lan_presesrves_limit", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": [["add", "def", "extend_of_comp_yoneda_iso_Lan", ["category_theory", "colimit_adj"]], ["add", "def", "comp_yoneda_iso_yoneda_comp_Lan", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["del", "theorem", "has_finite_colimits_of_has_colimits", ["category_theory", "limits"]], ["del", "theorem", "has_finite_limits_of_has_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": []}]}, {"timestamp": 1638541939, "sha": "8bb26a72", "message": "chore(*): protect `to_fun` and `map_{add,zero,mul,one,div}` (#10580)\nThis PR prepares for #9888 by namespacing all usages of `to_fun` and `map_{add,zero,mul,one,div}` that do not involve the classes of #9888. This includes e.g. `polynomial.map_add` and `multiset.map_add`, which involve `polynomial.map` and `multiset.map` respectively.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "newPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["del", "theorem", "coe_ideal_le_self_mul_inv", []], ["del", "theorem", "coe_inv_of_nonzero", []], ["add", "theorem", "coe_ideal_le_self_mul_inv", ["fractional_ideal"]], ["add", "theorem", "coe_inv_of_nonzero", ["fractional_ideal"]], ["add", "theorem", "inv_anti_mono", ["fractional_ideal"]], ["add", "theorem", "inv_eq", ["fractional_ideal"]], ["add", "theorem", "inv_nonzero", ["fractional_ideal"]], ["add", "theorem", "inv_zero'", ["fractional_ideal"]], ["add", "theorem", "invertible_iff_generator_nonzero", ["fractional_ideal"]], ["add", "theorem", "invertible_of_principal", ["fractional_ideal"]], ["add", "theorem", "is_principal_inv", ["fractional_ideal"]], ["add", "theorem", "le_self_mul_inv", ["fractional_ideal"]], ["add", "theorem", "map_inv", ["fractional_ideal"]], ["add", "theorem", "mem_inv_iff", ["fractional_ideal"]], ["add", "theorem", "mul_generator_self_inv", ["fractional_ideal"]], ["add", "theorem", "mul_inv_cancel_iff", ["fractional_ideal"]], ["add", "theorem", "mul_inv_cancel_iff_is_unit", ["fractional_ideal"]], ["mod", "theorem", "one_inv", ["fractional_ideal"]], ["add", "theorem", "right_inverse_eq", ["fractional_ideal"]], ["add", "theorem", "span_singleton_inv", ["fractional_ideal"]], ["del", "theorem", "inv_anti_mono", []], ["del", "theorem", "inv_eq", []], ["del", "theorem", "inv_nonzero", []], ["del", "theorem", "inv_zero'", []], ["del", "theorem", "invertible_iff_generator_nonzero", []], ["del", "theorem", "invertible_of_principal", []], ["del", "theorem", "is_principal_inv", []], ["del", "theorem", "le_self_mul_inv", []], ["del", "theorem", "map_inv", []], ["del", "theorem", "mem_inv_iff", []], ["del", "theorem", "mul_generator_self_inv", []], ["del", "theorem", "mul_inv_cancel_iff", []], ["del", "theorem", "mul_inv_cancel_iff_is_unit", []], ["del", "theorem", "right_inverse_eq", []], ["del", "theorem", "span_singleton_inv", []]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1638541937, "sha": "235e5839", "message": "feat(topology/metric_space/hausdorff_distance): add definition and lemmas about closed thickenings of subsets (#10542)\nAdd definition and basic API about closed thickenings of subsets in metric spaces, in preparation for the portmanteau theorem on characterizations of weak convergence of Borel probability measures.", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "closure_eq_Inter_cthickening", ["metric"]], ["add", "theorem", "closure_subset_cthickening", ["metric"]], ["add", "def", "cthickening", ["metric"]], ["add", "theorem", "cthickening_empty", ["metric"]], ["add", "theorem", "cthickening_eq_Inter_cthickening", ["metric"]], ["add", "theorem", "cthickening_eq_preimage_inf_edist", ["metric"]], ["add", "theorem", "cthickening_mono", ["metric"]], ["add", "theorem", "cthickening_subset_of_subset", ["metric"]], ["add", "theorem", "cthickening_subset_thickening'", ["metric"]], ["add", "theorem", "cthickening_subset_thickening", ["metric"]], ["add", "theorem", "cthickening_zero", ["metric"]], ["add", "theorem", "is_closed_cthickening", ["metric"]], ["add", "theorem", "mem_thickening_iff_exists_edist_lt", ["metric"]], ["add", "theorem", "thickening_subset_cthickening", ["metric"]], ["add", "theorem", "thickening_subset_cthickening_of_le", ["metric"]]]}]}, {"timestamp": 1638535248, "sha": "65335003", "message": "feat(data/mv_polynomial): add total_degree_add_of_total_degree_lt (#10571)\nA helpful lemma to compute total degrees from flt-regular.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "support_sdiff_support_subset_support_add", ["mv_polynomial"]], ["add", "theorem", "support_symm_diff_support_subset_support_add", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "total_degree_add_eq_left_of_total_degree_lt", ["mv_polynomial"]], ["add", "theorem", "total_degree_add_eq_right_of_total_degree_lt", ["mv_polynomial"]]]}]}, {"timestamp": 1638535247, "sha": "672e2b20", "message": "feat(src/algebra/gcd_monoid,src/ring_theory): add some exists_associated_pow_of_mul_eq_pow variants (#10560)", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["add", "theorem", "exists_eq_pow_of_mul_eq_pow", []]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "eq_pow_of_mul_eq_pow_bit1", ["int"]], ["add", "theorem", "eq_pow_of_mul_eq_pow_bit1_left", ["int"]], ["add", "theorem", "eq_pow_of_mul_eq_pow_bit1_right", ["int"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "exists_associated_pow_of_mul_eq_pow'", []]]}]}, {"timestamp": 1638535246, "sha": "89697a24", "message": "feat(data/fintype/order): complete order instances for fintype (#7123)\nThis PR adds several instances (as defs) for fintypes:\n* `order_bot` from `semilattice_inf`, `order_top` from `semilattice_sup`, `bounded_order` from `lattice`.\n* `complete_lattice` from `lattice`.\n* `complete_linear_order` from `linear_order`.\nWe use this last one to give a `complete_linear_order` instance for `fin (n + 1)` .", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "fold_inf_univ", ["finset"]], ["add", "theorem", "fold_sup_univ", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/fintype/order.lean", "changes": [["add", "def", "to_bounded_order", ["fintype"]], ["add", "def", "to_order_bot", ["fintype"]], ["add", "def", "to_order_top", ["fintype"]]]}]}, {"timestamp": 1638528910, "sha": "e0c27fe4", "message": "feat(order/bounded_order): a few more `simp` lemmas (#10533)\nInspired by #10486", "changes": [{"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "max_eq_bot", []], ["add", "theorem", "max_eq_top", []], ["add", "theorem", "max_top_left", []], ["add", "theorem", "max_top_right", []], ["add", "theorem", "min_bot_left", []], ["add", "theorem", "min_bot_right", []], ["add", "theorem", "min_eq_bot", []], ["add", "theorem", "min_eq_top", []]]}]}, {"timestamp": 1638528909, "sha": "970f0746", "message": "feat(analysis/convex/star): Star-convex sets (#10524)\nThis defines `star_convex 𝕜 x s` to mean that a set is star-convex (aka star-shaped, radially convex, or a star domain) at `x`. This means that every segment from `x` to a point in `s` is a subset of `s`.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "set_vadd_singleton", ["set"]], ["del", "theorem", "vadd_singleton", ["set"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "smul_singleton", ["set"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "sub", ["convex"]]]}, {"oldPath": null, "newPath": "src/analysis/convex/star.lean", "changes": [["add", "theorem", "star_convex_iff", ["convex"]], ["add", "theorem", "convex_iff_forall_star_convex", []], ["add", "theorem", "star_convex", ["set", "ord_connected"]], ["add", "theorem", "add", ["star_convex"]], ["add", "theorem", "add_left", ["star_convex"]], ["add", "theorem", "add_right", ["star_convex"]], ["add", "theorem", "add_smul_mem", ["star_convex"]], ["add", "theorem", "add_smul_sub_mem", ["star_convex"]], ["add", "theorem", "affine_image", ["star_convex"]], ["add", "theorem", "affine_preimage", ["star_convex"]], ["add", "theorem", "affinity", ["star_convex"]], ["add", "theorem", "inter", ["star_convex"]], ["add", "theorem", "is_linear_image", ["star_convex"]], ["add", "theorem", "is_linear_preimage", ["star_convex"]], ["add", "theorem", "linear_image", ["star_convex"]], ["add", "theorem", "linear_preimage", ["star_convex"]], ["add", "theorem", "mem", ["star_convex"]], ["add", "theorem", "mem_smul", ["star_convex"]], ["add", "theorem", "neg", ["star_convex"]], ["add", "theorem", "neg_preimage", ["star_convex"]], ["add", "theorem", "open_segment_subset", ["star_convex"]], ["add", "theorem", "preimage_add_left", ["star_convex"]], ["add", "theorem", "preimage_add_right", ["star_convex"]], ["add", "theorem", "preimage_smul", ["star_convex"]], ["add", "theorem", "prod", ["star_convex"]], ["add", "theorem", "segment_subset", ["star_convex"]], ["add", "theorem", "smul", ["star_convex"]], ["add", "theorem", "smul_mem", ["star_convex"]], ["add", "theorem", "sub", ["star_convex"]], ["add", "theorem", "union", ["star_convex"]], ["add", "def", "star_convex", []], ["add", "theorem", "star_convex_Inter", []], ["add", "theorem", "star_convex_Union", []], ["add", "theorem", "star_convex_empty", []], ["add", "theorem", "star_convex_iff_div", []], ["add", "theorem", "star_convex_iff_forall_ne_pos", []], ["add", "theorem", "star_convex_iff_forall_pos", []], ["add", "theorem", "star_convex_iff_open_segment_subset", []], ["add", "theorem", "star_convex_iff_ord_connected", []], ["add", "theorem", "star_convex_iff_pointwise_add_subset", []], ["add", "theorem", "star_convex_iff_segment_subset", []], ["add", "theorem", "star_convex_pi", []], ["add", "theorem", "star_convex_sInter", []], ["add", "theorem", "star_convex_sUnion", []], ["add", "theorem", "star_convex_singleton", []], ["add", "theorem", "star_convex_univ", []], ["add", "theorem", "star_convex", ["submodule"]], ["add", "theorem", "star_convex", ["subspace"]]]}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["mod", "theorem", "interval_subset", ["set", "ord_connected"]], ["mod", "theorem", "ord_connected_iff_interval_subset", ["set"]], ["add", "theorem", "ord_connected_iff_interval_subset_left", ["set"]], ["add", "theorem", "ord_connected_iff_interval_subset_right", ["set"]], ["mod", "theorem", "ord_connected_interval", ["set"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "interval_subset_interval_union_interval", ["set"]], ["mod", "theorem", "not_mem_interval_of_gt", ["set"]], ["mod", "theorem", "not_mem_interval_of_lt", ["set"]]]}]}, {"timestamp": 1638528908, "sha": "44b649ca", "message": "doc(algebra.lattice_ordered_group): Remove verbose docstrings (#10468)\ndoc(algebra.lattice_ordered_group): Remove verbose docstrings", "changes": [{"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}]}, {"timestamp": 1638521851, "sha": "2648e685", "message": "chore(int/*): dedup lemma (#10583)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "nat_abs_dvd_iff_dvd", ["int"]]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["del", "theorem", "nat_abs_dvd_abs_iff", ["int"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}]}, {"timestamp": 1638521850, "sha": "0453320a", "message": "feat(category_theory/limits): The product is the pullback over the terminal objects. (#10581)", "changes": [{"oldPath": "src/category_theory/limits/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": [["add", "theorem", "has_binary_coproducts_of_initial_and_pushouts", []], ["add", "def", "is_coproduct_of_is_initial_is_pushout", []], ["add", "def", "is_product_of_is_terminal_is_pullback", []], ["add", "def", "is_pullback_of_is_terminal_is_product", []], ["add", "def", "is_pushout_of_is_initial_is_coproduct", []]]}]}, {"timestamp": 1638521848, "sha": "bfccd1b8", "message": "chore(topology/{metric_space,instances/real}): cleanup (#10577)\n* merge `real.ball_eq` and `real.ball_eq_Ioo` into `real.ball_eq_Ioo`;\n* merge `real.closed_ball_eq` and `real.closed_ball_eq_Icc` into `real.closed_ball_eq_Icc`;\n* add missing `real.Icc_eq_closed_ball`;\n* generalize lemmas about `*bounded_Ixx` so that they work for (indexed) products of conditionally complete linear orders.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "ball_eq", ["int"]], ["add", "theorem", "ball_eq_Ioo", ["int"]], ["del", "theorem", "closed_ball_eq", ["int"]], ["add", "theorem", "closed_ball_eq_Icc", ["int"]], ["del", "theorem", "Ioo_eq_ball", ["real"]], ["del", "theorem", "ball_eq_Ioo", ["real"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "Icc_eq_closed_ball", ["real"]], ["add", "theorem", "Ioo_eq_ball", ["real"]], ["del", "theorem", "ball_eq", ["real"]], ["add", "theorem", "ball_eq_Ioo", ["real"]], ["del", "theorem", "closed_ball_eq", ["real"]], ["add", "theorem", "closed_ball_eq_Icc", ["real"]]]}]}, {"timestamp": 1638521847, "sha": "158263c1", "message": "feat(ring_theory): Nilradical and reduced ring (#10576)", "changes": [{"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["mod", "theorem", "eq_zero", ["is_nilpotent"]], ["mod", "theorem", "is_nilpotent_iff_eq_zero", []], ["add", "theorem", "mem_nilradical", []], ["add", "theorem", "nilpotent_iff_mem_prime", []], ["add", "def", "nilradical", []], ["add", "theorem", "nilradical_eq_Inf", []], ["add", "theorem", "nilradical_eq_zero", []], ["add", "theorem", "nilradical_le_prime", []]]}]}, {"timestamp": 1638521846, "sha": "c176aa5d", "message": "refactor(data/stream): swap args of `stream.nth` (#10559)\nThis way it agrees with (a) `list.nth`; (b) a possible redefinition\n```lean\nstructure stream (α : Type*) := (nth : nat → α)\n```", "changes": [{"oldPath": "src/data/stream/defs.lean", "newPath": "src/data/stream/defs.lean", "changes": [["mod", "def", "all", ["stream"]], ["mod", "def", "any", ["stream"]], ["mod", "def", "nth", ["stream"]]]}, {"oldPath": "src/data/stream/init.lean", "newPath": "src/data/stream/init.lean", "changes": [["mod", "theorem", "all_def", ["stream"]], ["mod", "theorem", "any_def", ["stream"]], ["mod", "theorem", "mem_of_nth_eq", ["stream"]], ["mod", "theorem", "nth_const", ["stream"]], ["mod", "theorem", "nth_drop", ["stream"]], ["mod", "theorem", "nth_even", ["stream"]], ["mod", "theorem", "nth_inits", ["stream"]], ["mod", "theorem", "nth_interleave_left", ["stream"]], ["mod", "theorem", "nth_interleave_right", ["stream"]], ["mod", "theorem", "nth_map", ["stream"]], ["mod", "theorem", "nth_nats", ["stream"]], ["mod", "theorem", "nth_odd", ["stream"]], ["mod", "theorem", "nth_succ", ["stream"]], ["mod", "theorem", "nth_tails", ["stream"]], ["mod", "theorem", "nth_take_succ", ["stream"]], ["mod", "theorem", "nth_unfolds_head_tail", ["stream"]], ["mod", "theorem", "nth_zero_cons", ["stream"]], ["mod", "theorem", "nth_zero_iterate", ["stream"]]]}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": []}]}, {"timestamp": 1638521845, "sha": "55b64b61", "message": "chore(group_theory/*): additivise! (#10557)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "mul_zpow_neg_one", []]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "theorem", "card_comap_dvd_of_injective", ["subgroup"]], ["mod", "theorem", "card_dvd_of_injective", ["subgroup"]], ["mod", "theorem", "card_dvd_of_le", ["subgroup"]], ["mod", "theorem", "card_quotient_dvd_card", ["subgroup"]], ["mod", "theorem", "card_subgroup_dvd_card", ["subgroup"]]]}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": [["del", "theorem", "card_pow_eq_one_eq_order_of_aux", []], ["add", "theorem", "card_order_of_eq_totient", ["is_add_cyclic"]], ["add", "theorem", "is_add_cyclic_of_card_pow_eq_one_le", []]]}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}]}, {"timestamp": 1638521843, "sha": "56c9cab5", "message": "feat(data/sigma{lex,order}): Lexicographic and disjoint orders on a sigma type (#10552)\nThis defines the two natural order on a sigma type: the one where we just juxtapose the summands with their respective order, and the one where we also add in an order between summands.", "changes": [{"oldPath": "src/data/list/lex.lean", "newPath": "src/data/list/lex.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/sigma/lex.lean", "changes": [["add", "theorem", "mono", ["psigma", "lex"]], ["add", "theorem", "mono_left", ["psigma", "lex"]], ["add", "theorem", "mono_right", ["psigma", "lex"]], ["add", "theorem", "lex_iff", ["psigma"]], ["add", "theorem", "mono", ["sigma", "lex"]], ["add", "theorem", "mono_left", ["sigma", "lex"]], ["add", "theorem", "mono_right", ["sigma", "lex"]], ["add", "inductive", "lex", ["sigma"]], ["add", "theorem", "lex_iff", ["sigma"]]]}, {"oldPath": null, "newPath": "src/data/sigma/order.lean", "changes": [["add", "inductive", "le", ["sigma"]], ["add", "def", "has_le", ["sigma", "lex"]], ["add", "def", "has_lt", ["sigma", "lex"]], ["add", "def", "linear_order", ["sigma", "lex"]], ["add", "def", "partial_order", ["sigma", "lex"]], ["add", "def", "preorder", ["sigma", "lex"]]]}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}]}, {"timestamp": 1638521842, "sha": "d62b5178", "message": "feat(category_theory/limits): Walking parallel pair equiv to its op. (#10516)", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "walking_parallel_pair_op", ["category_theory", "limits"]], ["add", "def", "walking_parallel_pair_op_equiv", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_equiv_counit_iso_one", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_equiv_counit_iso_zero", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_equiv_unit_iso_one", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_equiv_unit_iso_zero", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_left", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_one", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_right", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_op_zero", ["category_theory", "limits"]]]}]}, {"timestamp": 1638521841, "sha": "c151a121", "message": "feat(algebra/gcd_monoid/*): assorted lemmas (#10508)\nFrom flt-regular.", "changes": [{"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": [["add", "theorem", "gcd_eq_gcd_image", ["finset"]], ["add", "theorem", "gcd_image", ["finset"]]]}, {"oldPath": null, "newPath": "src/algebra/gcd_monoid/nat.lean", "changes": [["add", "theorem", "coprime_of_div_gcd", ["finset"]]]}]}, {"timestamp": 1638521840, "sha": "c093d04d", "message": "feat(data/nat/basic): Monotonicity of `nat.find_greatest` (#10507)\nThis proves that `nat.find_greatest` is monotone in both arguments.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "find_greatest_eq", ["nat"]], ["mod", "theorem", "find_greatest_eq_iff", ["nat"]], ["mod", "theorem", "find_greatest_eq_zero_iff", ["nat"]], ["mod", "theorem", "find_greatest_is_greatest", ["nat"]], ["mod", "theorem", "find_greatest_le", ["nat"]], ["add", "theorem", "find_greatest_mono", ["nat"]], ["add", "theorem", "find_greatest_mono_left", ["nat"]], ["add", "theorem", "find_greatest_mono_right", ["nat"]], ["mod", "theorem", "find_greatest_of_ne_zero", ["nat"]], ["mod", "theorem", "find_greatest_of_not", ["nat"]], ["mod", "theorem", "find_greatest_spec", ["nat"]], ["add", "theorem", "find_greatest_succ", ["nat"]], ["mod", "theorem", "le_find_greatest", ["nat"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}]}, {"timestamp": 1638521839, "sha": "00e9e90a", "message": "feat(topology/urysohns_bounded): +2 versions of Urysohn's lemma (#10479)", "changes": [{"oldPath": null, "newPath": "src/topology/urysohns_bounded.lean", "changes": [["add", "theorem", "exists_bounded_mem_Icc_of_closed_of_le", []], ["add", "theorem", "exists_bounded_zero_one_of_closed", []]]}]}, {"timestamp": 1638515446, "sha": "403d9c0e", "message": "feat(category_theory/adjunction): Added simp lemmas for `left_adjoint_uniq` and `right_adjoint_uniq` (#10551)", "changes": [{"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": [["mod", "def", "adjoint_of_op_adjoint_op", ["adjunction"]], ["add", "theorem", "hom_equiv_left_adjoint_uniq_hom_app", ["adjunction"]], ["add", "theorem", "hom_equiv_symm_right_adjoint_uniq_hom_app", ["adjunction"]], ["add", "theorem", "left_adjoint_uniq_hom_app_counit", ["adjunction"]], ["add", "theorem", "left_adjoint_uniq_hom_counit", ["adjunction"]], ["add", "theorem", "left_adjoint_uniq_inv_app", ["adjunction"]], ["add", "theorem", "left_adjoint_uniq_refl", ["adjunction"]], ["add", "theorem", "left_adjoint_uniq_trans", ["adjunction"]], ["add", "theorem", "left_adjoint_uniq_trans_app", ["adjunction"]], ["mod", "def", "op_adjoint_op_of_adjoint", ["adjunction"]], ["add", "theorem", "right_adjoint_uniq_hom_app_counit", ["adjunction"]], ["add", "theorem", "right_adjoint_uniq_hom_counit", ["adjunction"]], ["add", "theorem", "right_adjoint_uniq_inv_app", ["adjunction"]], ["add", "theorem", "right_adjoint_uniq_refl", ["adjunction"]], ["add", "theorem", "right_adjoint_uniq_trans", ["adjunction"]], ["add", "theorem", "right_adjoint_uniq_trans_app", ["adjunction"]], ["add", "theorem", "unit_left_adjoint_uniq_hom", ["adjunction"]], ["add", "theorem", "unit_left_adjoint_uniq_hom_app", ["adjunction"]], ["add", "theorem", "unit_right_adjoint_uniq_hom", ["adjunction"]], ["add", "theorem", "unit_right_adjoint_uniq_hom_app", ["adjunction"]]]}]}, {"timestamp": 1638515445, "sha": "30185dca", "message": "feat(topology/algebra/group): group topologies on a given group form a complete lattice (#10531)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "structure", "add_group_topology", []], ["add", "def", "coinduced", ["group_topology"]], ["add", "theorem", "coinduced_continuous", ["group_topology"]], ["add", "theorem", "ext'", ["group_topology"]], ["add", "structure", "group_topology", []]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "def", "order_embedding", ["ring_topology", "to_add_group_topology"]], ["add", "def", "to_add_group_topology", ["ring_topology"]]]}]}, {"timestamp": 1638515444, "sha": "cfecf720", "message": "feat(algebra/module): push forward the action of `R` on `M` along `f : R → S` (#10502)\nIf `f : R →+* S` is compatible with the `R`-module structure on `M`, and the scalar action of `S` on `M`, then `M` gets an `S`-module structure too. Additionally, if `R` is a ring and the kernel of `f` acts on `M` by sending it to `0`, then we don't need to specify the scalar action of `S` on `M` (but it is still possible for defeq purposes).\nThese definitions should allow you to turn an action of `R` on `M` into an action of `R/I` on `M/N` via the (previously defined) action of `R` on `M/N`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "def", "module_left", ["function", "surjective"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "def", "distrib_mul_action_left", ["function", "surjective"]], ["add", "def", "mul_action_left", ["function", "surjective"]]]}]}, {"timestamp": 1638515443, "sha": "461051ae", "message": "feat(algebraic_geometry): Localization map is an embedding. (#10471)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "theorem", "localization_away_comap_range", ["prime_spectrum"]], ["add", "theorem", "localization_away_open_embedding", ["prime_spectrum"]], ["add", "theorem", "localization_comap_embedding", ["prime_spectrum"]], ["add", "theorem", "localization_comap_inducing", ["prime_spectrum"]], ["add", "theorem", "localization_comap_injective", ["prime_spectrum"]], ["add", "theorem", "localization_comap_range", ["prime_spectrum"]]]}]}, {"timestamp": 1638515441, "sha": "6bd6b45e", "message": "feat(algebraic_geometry): Isomorphisms of presheafed space. (#10461)", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["mod", "theorem", "comp_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "is_iso_of_components", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "iso_of_components", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "sheaf_iso_of_iso", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["mod", "theorem", "pre_desc", ["category_theory", "limits", "colimit"]]]}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "def", "map_map_iso", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["add", "def", "presheaf_equiv_of_iso", ["Top", "presheaf"]], ["add", "def", "pullback_hom_iso_pushforward_inv", ["Top", "presheaf"]], ["add", "def", "pullback_inv_iso_pushforward_hom", ["Top", "presheaf"]], ["add", "theorem", "pullback_obj_eq_pullback_obj", ["Top", "presheaf"]], ["add", "def", "pushforward_to_of_iso", ["Top", "presheaf"]], ["add", "theorem", "pushforward_to_of_iso_app", ["Top", "presheaf"]], ["add", "def", "to_pushforward_of_iso", ["Top", "presheaf"]], ["add", "theorem", "to_pushforward_of_iso_app", ["Top", "presheaf"]]]}]}, {"timestamp": 1638515440, "sha": "f8f28da0", "message": "feat(linear_algebra/orientation): orientations of modules and rays in modules (#10306)\nDefine orientations of modules, along the lines of a definition\nsuggested by @hrmacbeth: equivalence classes of nonzero alternating\nmaps. See:\nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/adding.20angles/near/243856522\nRays are defined in an arbitrary module over an\n`ordered_comm_semiring`, then orientations are considered as the case\nof rays for the space of alternating maps. That definition uses an\narbitrary index type; the motivating use case is where this has the\ncardinality of a basis (two-dimensional use cases will use an index\ntype that is definitionally `fin 2`, for example).\nThe motivating use case is over the reals, but the definitions and\nlemmas are for `ordered_comm_semiring`, `ordered_comm_ring`,\n`linear_ordered_comm_ring` or `linear_ordered_field` as appropriate (a\n`nontrivial` `ordered_comm_semiring` looks like it's the weakest case\nfor which much useful can be done with this definition).\nGiven an intended use case (oriented angles for Euclidean geometry)\nwhere it will make sense for many proofs (and notation) to fix a\nchoice of orientation throughout, there is also a `module.oriented`\ntype class so the choice of orientation can be implicit in such proofs\nand the lemmas they use. However, nothing yet makes use of the type\nclass; everything so far is for explicit rays or orientations.\nI expect more definitions and lemmas about orientations will need\nadding to make much use of orientations. In particular, I expect to\nneed to add more about orientations in relation to bases\n(e.g. extracting a basis that gives a given orientation, in positive\ndimension).", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/orientation.lean", "changes": [["add", "theorem", "orientation_eq_iff_det_pos", ["basis"]], ["add", "theorem", "orientation_eq_or_eq_neg", ["basis"]], ["add", "theorem", "eq_zero_of_same_ray_self_neg", []], ["add", "theorem", "equiv_iff_same_ray", []], ["add", "theorem", "equivalence_same_ray", []], ["add", "theorem", "ind", ["module", "ray"]], ["add", "theorem", "ne_neg_self", ["module", "ray"]], ["add", "def", "some_ray_vector", ["module", "ray"]], ["add", "theorem", "some_ray_vector_ray", ["module", "ray"]], ["add", "def", "some_vector", ["module", "ray"]], ["add", "theorem", "some_vector_ne_zero", ["module", "ray"]], ["add", "theorem", "some_vector_ray", ["module", "ray"]], ["add", "def", "ray", ["module"]], ["add", "theorem", "eq_or_eq_neg", ["orientation"]], ["add", "def", "orientation", []], ["add", "theorem", "ray_eq_iff", []], ["add", "theorem", "ray_neg", []], ["add", "theorem", "ray_pos_smul", []], ["add", "theorem", "coe_neg", ["ray_vector"]], ["add", "theorem", "equiv_neg_iff", ["ray_vector"]], ["add", "def", "same_ray_setoid", ["ray_vector"]], ["add", "def", "ray_vector", []], ["add", "theorem", "reflexive_same_ray", []], ["add", "theorem", "neg", ["same_ray"]], ["add", "theorem", "pos_smul_left", ["same_ray"]], ["add", "theorem", "pos_smul_right", ["same_ray"]], ["add", "def", "same_ray", []], ["add", "theorem", "same_ray_iff_mem_orbit", []], ["add", "theorem", "same_ray_neg_iff", []], ["add", "theorem", "same_ray_neg_smul_left_iff", []], ["add", "theorem", "same_ray_neg_smul_right_iff", []], ["add", "theorem", "same_ray_neg_swap", []], ["add", "theorem", "same_ray_of_mem_orbit", []], ["add", "theorem", "same_ray_pos_smul_left", []], ["add", "theorem", "same_ray_pos_smul_right", []], ["add", "def", "same_ray_setoid", []], ["add", "theorem", "same_ray_setoid_eq_orbit_rel", []], ["add", "theorem", "same_ray_smul_left_iff", []], ["add", "theorem", "same_ray_smul_right_iff", []], ["add", "theorem", "symmetric_same_ray", []], ["add", "theorem", "transitive_same_ray", []]]}]}, {"timestamp": 1638515439, "sha": "2bb627fc", "message": "feat(analysis/convex/[basic, topology]): generalize path connectedness of convex sets to topological real vector spaces (#10011)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "open_segment_eq_image_line_map", []], ["add", "theorem", "segment_eq_image_line_map", []]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1638513310, "sha": "8915dc8e", "message": "feat(ring_theory/polynomial/cyclotomic): `is_root_cyclotomic_iff` (#10422)\nFrom the flt-regular project.", "changes": [{"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "is_root_of_unity_iff", []], ["add", "theorem", "is_root_cyclotomic_iff", ["polynomial"]], ["del", "theorem", "order_of_root_cyclotomic_eq", ["polynomial"]]]}]}, {"timestamp": 1638509086, "sha": "6f745cd2", "message": "feat(category_theory/limits): Lemmas about preserving pullbacks (#10438)", "changes": [{"oldPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "changes": [["add", "def", "is_colimit_map_cocone_pushout_cocone_equiv", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_has_pushout_of_preserves_colimit", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_is_colimit_pushout_cocone_map", ["category_theory", "limits"]], ["add", "def", "is_colimit_pushout_cocone_map_of_is_colimit", ["category_theory", "limits"]], ["add", "theorem", "iso_hom_fst", ["category_theory", "limits", "preserves_pullback"]], ["add", "theorem", "iso_hom_snd", ["category_theory", "limits", "preserves_pullback"]], ["add", "theorem", "iso_inv_fst", ["category_theory", "limits", "preserves_pullback"]], ["add", "theorem", "iso_inv_snd", ["category_theory", "limits", "preserves_pullback"]], ["add", "def", "preserves_pullback_symmetry", ["category_theory", "limits"]], ["add", "theorem", "inl_iso_hom", ["category_theory", "limits", "preserves_pushout"]], ["add", "theorem", "inl_iso_inv", ["category_theory", "limits", "preserves_pushout"]], ["add", "theorem", "inr_iso_hom", ["category_theory", "limits", "preserves_pushout"]], ["add", "theorem", "inr_iso_inv", ["category_theory", "limits", "preserves_pushout"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_pushout"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_pushout"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_pushout"]], ["add", "def", "preserves_pushout_symmetry", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "inl_comp_pushout_comparison", ["category_theory", "limits"]], ["add", "theorem", "inr_comp_pushout_comparison", ["category_theory", "limits"]], ["add", "def", "iso_mk", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "iso_mk", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "pushout_comparison", ["category_theory", "limits"]], ["add", "theorem", "pushout_comparison_map_desc", ["category_theory", "limits"]]]}]}, {"timestamp": 1638487430, "sha": "c791747d", "message": "feat(algebra/tropical/basic): various API (#10487)\nGeneralize some order instance to just require `has_le` of the base `R`.\n`(un)trop_monotone`\n`trop_(min|inf)`\niffs between addition and order\n`tropical.add_comm_monoid` (in parallel to #10486)\n`(co|contra)variant` instances", "changes": [{"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": [["add", "theorem", "add_eq_left_iff", ["tropical"]], ["add", "theorem", "add_eq_right_iff", ["tropical"]], ["mod", "theorem", "le_zero", ["tropical"]], ["mod", "theorem", "succ_nsmul", ["tropical"]], ["add", "theorem", "trop_add", ["tropical"]], ["add", "theorem", "trop_inf", ["tropical"]], ["add", "theorem", "trop_min", ["tropical"]], ["add", "theorem", "trop_monotone", ["tropical"]], ["add", "theorem", "trop_zero", ["tropical"]], ["add", "theorem", "trop_zsmul", ["tropical"]], ["mod", "theorem", "untrop_le_iff", ["tropical"]], ["add", "theorem", "untrop_lt_iff", ["tropical"]], ["add", "theorem", "untrop_monotone", ["tropical"]], ["mod", "theorem", "untrop_one", ["tropical"]], ["add", "theorem", "untrop_zpow", ["tropical"]]]}]}, {"timestamp": 1638482676, "sha": "ac767452", "message": "feat(data/finsupp/basic): add `finsupp.prod_congr` and `sum_congr` (#10568)\nThese are the counterparts for `finsupp` of a simpler form of `finset.prod_congr`", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "prod_congr", ["finsupp"]]]}]}, {"timestamp": 1638477865, "sha": "42d3cbc3", "message": "feat(data/finsupp/basic): add `nat.cast_finsupp_prod` and 3 others (#10579)\nAdd counterparts for `finsupp` of `nat.cast_prod` etc., as discussed in this thread https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/push_cast", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "cast_finsupp_prod", ["int"]], ["add", "theorem", "cast_finsupp_sum", ["int"]], ["add", "theorem", "cast_finsupp_prod", ["nat"]], ["add", "theorem", "cast_finsupp_sum", ["nat"]]]}]}, {"timestamp": 1638473328, "sha": "4cfe637b", "message": "chore(category_theory/sites/*): Adjust some `simp` lemmas. (#10574)\nThe primary change is removing some `simp` tags from the definition of `sheafify` and friends, so that the sheafification related constructions are not unfolded to the `plus` constructions.\nAlso -- added coercion from Sheaves to presheaves, and some `rfl` simp lemmas which help some proofs move along.\nSome proofs cleaned up as well.", "changes": [{"oldPath": "src/category_theory/sites/adjunction.lean", "newPath": "src/category_theory/sites/adjunction.lean", "changes": [["del", "theorem", "adjunction_to_types_hom_equiv_symm_apply'", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_to_types_hom_equiv_symm_apply", ["category_theory", "Sheaf"]]]}, {"oldPath": "src/category_theory/sites/compatible_plus.lean", "newPath": "src/category_theory/sites/compatible_plus.lean", "changes": []}, {"oldPath": "src/category_theory/sites/compatible_sheafification.lean", "newPath": "src/category_theory/sites/compatible_sheafification.lean", "changes": []}, {"oldPath": "src/category_theory/sites/cover_preserving.lean", "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": []}, {"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": [["add", "theorem", "iso_to_plus_hom", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "iso_to_plus_inv", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_map_plus_lift", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "theorem", "comp_app", ["category_theory", "Sheaf"]], ["add", "theorem", "id_app", ["category_theory", "Sheaf"]], ["add", "theorem", "Sheaf_to_presheaf_obj", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["add", "theorem", "comp_app", ["category_theory", "SheafOfTypes"]], ["add", "theorem", "id_app", ["category_theory", "SheafOfTypes"]], ["add", "theorem", "SheafOfTypes_to_presheaf_obj", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": [["add", "theorem", "iso_sheafify_hom", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "iso_sheafify_inv", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafification_map", ["category_theory", "grothendieck_topology"]], ["del", "theorem", "sheafification_map_sheafify_lift", ["category_theory", "grothendieck_topology"]], ["add", "def", "sheafify_map", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafify_map_comp", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafify_map_id", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafify_map_sheafify_lift", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_sheafify_naturality", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafification_adjunction_unit_app", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/whiskering.lean", "newPath": "src/category_theory/sites/whiskering.lean", "changes": [["del", "def", "Sheaf_compose_map", ["category_theory"]], ["del", "theorem", "Sheaf_compose_map_app", ["category_theory"]], ["del", "theorem", "Sheaf_compose_map_app_app", ["category_theory"]], ["del", "theorem", "Sheaf_compose_map_comp", ["category_theory"]], ["del", "theorem", "Sheaf_compose_map_id", ["category_theory"]], ["del", "theorem", "Sheaf_compose_map_to_presheaf", ["category_theory"]], ["del", "theorem", "Sheaf_compose_obj_to_presheaf", ["category_theory"]]]}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["add", "theorem", "comp_app", ["Top", "sheaf"]], ["add", "theorem", "id_app", ["Top", "sheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1638473326, "sha": "cbb2d2c0", "message": "feat(data/nat/prime): Add lemma `count_factors_mul_of_pos` (#10536)\nAdding the counterpart to `count_factors_mul_of_coprime` for positive `a` and `b`", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "count_factors_mul_of_pos", ["nat"]]]}]}, {"timestamp": 1638467555, "sha": "38ae0c96", "message": "feat(data/nat/prime): add coprime_of_prime lemmas (#10534)\nAdds `coprime_of_lt_prime` and `eq_or_coprime_of_le_prime`, which help one to prove a number is coprime to a prime. Spun off of #9080.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "coprime_of_lt_prime", ["nat"]], ["add", "theorem", "eq_or_coprime_of_le_prime", ["nat"]]]}]}, {"timestamp": 1638455008, "sha": "5e022925", "message": "feat(data/finset/*): Diverse lemmas (#10388)\nA bunch of simple lemmas", "changes": [{"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "filter_bUnion", ["finset"]], ["add", "theorem", "sdiff_erase", ["finset"]], ["add", "theorem", "subset_erase", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_comm", ["finset"]], ["add", "theorem", "inf_product_left", ["finset"]], ["add", "theorem", "inf_product_right", ["finset"]], ["add", "theorem", "inf_sigma", ["finset"]], ["add", "theorem", "sup_comm", ["finset"]], ["add", "theorem", "sup_product_left", ["finset"]], ["add", "theorem", "sup_product_right", ["finset"]], ["add", "theorem", "sup_sigma", ["finset"]]]}, {"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": [["add", "theorem", "coe_product", ["finset"]], ["add", "theorem", "product_eq_bUnion_right", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "univ_eq_empty", ["finset"]], ["add", "theorem", "univ_unique", ["finset"]], ["del", "theorem", "univ_is_empty", []], ["add", "theorem", "univ_option", []], ["del", "theorem", "univ_unique", []]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "range_add_eq_union", ["finset"]], ["add", "theorem", "range_image_pred_top_sub", ["finset"]], ["del", "theorem", "range_image_pred_top_sub", ["nat"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "univ_unique", ["set"]]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}]}, {"timestamp": 1638455007, "sha": "790d6373", "message": "feat(combinatorics/set_family/compression/uv): UV-compression of a set family (#10238)\nThis defines the UV-compression of a set family, along with a bunch of preliminary definitions and some basic results.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/set_family/compression/uv.lean", "changes": [["add", "theorem", "sup_sdiff_inj_on", []], ["add", "theorem", "card_compress", ["uv"]], ["add", "theorem", "card_compression", ["uv"]], ["add", "def", "compress", ["uv"]], ["add", "theorem", "compress_disjoint", ["uv"]], ["add", "theorem", "compress_idem", ["uv"]], ["add", "theorem", "compress_mem_compression", ["uv"]], ["add", "theorem", "compress_mem_compression_of_mem_compression", ["uv"]], ["add", "theorem", "compress_of_disjoint_of_le", ["uv"]], ["add", "theorem", "compress_self", ["uv"]], ["add", "def", "compression", ["uv"]], ["add", "theorem", "compression_idem", ["uv"]], ["add", "theorem", "compression_self", ["uv"]], ["add", "def", "is_compressed", ["uv"]], ["add", "theorem", "is_compressed_self", ["uv"]], ["add", "theorem", "mem_compression", ["uv"]], ["add", "theorem", "mem_of_mem_compression", ["uv"]], ["add", "theorem", "sup_sdiff_mem_of_mem_compression", ["uv"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "le_sdiff_iff", []]]}]}, {"timestamp": 1638449223, "sha": "17c22094", "message": "feat(probability_theory/stopping): define filtration and stopping time (#10553)\nThis PR defines filtrations and stopping times which are used in stochastic processes. This is the first step towards creating a theory of martingales in lean.", "changes": [{"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "le", ["measurable"]]]}, {"oldPath": null, "newPath": "src/probability_theory/stopping.lean", "changes": [["add", "theorem", "add", ["measure_theory", "adapted"]], ["add", "theorem", "neg", ["measure_theory", "adapted"]], ["add", "theorem", "smul", ["measure_theory", "adapted"]], ["add", "def", "adapted", ["measure_theory"]], ["add", "theorem", "adapted_zero", ["measure_theory"]], ["add", "def", "const_filtration", ["measure_theory"]], ["add", "theorem", "adapted_natural", ["measure_theory", "filtration"]], ["add", "def", "natural", ["measure_theory", "filtration"]], ["add", "structure", "filtration", ["measure_theory"]], ["add", "theorem", "add_const", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "max", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_eq", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_eq_const", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_set_eq_le", ["measure_theory", "is_stopping_time"]], ["add", "def", "measurable_space", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_le", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "measurable_space_mono", ["measure_theory", "is_stopping_time"]], ["add", "theorem", "min", ["measure_theory", "is_stopping_time"]], ["add", "def", "is_stopping_time", ["measure_theory"]], ["add", "theorem", "is_stopping_time_const", ["measure_theory"]], ["add", "theorem", "is_stopping_time_of_measurable_set_eq", ["measure_theory"]], ["add", "theorem", "measurable_set_of_filtration", ["measure_theory"]]]}]}, {"timestamp": 1638449222, "sha": "68060507", "message": "feat(category_theory/sites/adjunction): Adjunctions between categories of sheaves. (#10541)\nWe construct adjunctions between categories of sheaves obtained by composition (and sheafification) with functors which form a given adjunction.\nWill be used in LTE.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/adjunction.lean", "changes": [["add", "def", "adjunction", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_counit_app", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_hom_equiv_apply", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_hom_equiv_symm_apply", ["category_theory", "Sheaf"]], ["add", "def", "adjunction_to_types", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_to_types_counit_app", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_to_types_hom_equiv_apply", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_to_types_hom_equiv_symm_apply'", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_to_types_unit_app", ["category_theory", "Sheaf"]], ["add", "theorem", "adjunction_unit_app", ["category_theory", "Sheaf"]], ["add", "def", "compose_and_sheafify", ["category_theory", "Sheaf"]], ["add", "def", "compose_and_sheafify_from_types", ["category_theory", "Sheaf"]], ["add", "def", "compose_equiv", ["category_theory", "Sheaf"]], ["add", "def", "Sheaf_forget", ["category_theory"]]]}]}, {"timestamp": 1638449220, "sha": "3e72feb3", "message": "feat(ring_theory/localization): The localization of a localization is a localization. (#10456)\nAlso provides an easy consequence : the map of `Spec M⁻¹R ⟶ Spec R` is isomorphic on stalks.", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["add", "theorem", "Spec_map_localization_is_iso", ["algebraic_geometry"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_localization_is_localization_at_prime_is_localization", ["is_localization"]], ["add", "def", "localization_localization_at_prime_iso_localization", ["is_localization"]], ["add", "theorem", "localization_localization_eq_iff_exists", ["is_localization"]], ["add", "theorem", "localization_localization_is_localization", ["is_localization"]], ["add", "theorem", "localization_localization_is_localization_of_has_all_units", ["is_localization"]], ["add", "theorem", "localization_localization_map_units", ["is_localization"]], ["add", "def", "localization_localization_submodule", ["is_localization"]], ["add", "theorem", "localization_localization_surj", ["is_localization"]], ["add", "theorem", "mem_localization_localization_submodule", ["is_localization"]]]}]}, {"timestamp": 1638442969, "sha": "fed2929b", "message": "chore(*): golf some proofs (#10575)\nAlso add `strict_mono_on.monotone_on` and `strict_anti_on.antitone_on`.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1638422508, "sha": "665c13a4", "message": "chore(*): clean up/golf proofs with unneeded or case splits (#10569)\nGolf/simplify/clean up some more proofs with unnecessary case splits, this time found by linting for `or.dcases_on` with branches proving the more general fact.", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}]}, {"timestamp": 1638416271, "sha": "34758d3f", "message": "doc(group_theory/index): add a theorem name and fix a to_additive (#10564)\nI wanted to find the theorem I know as \"Lagrange's theorem\" but couldn't by searching.\nThis PR adds the name Lagrange's theorem to the relevant file, and also fixes an extra eager `to_additive` renaming that creates a lemma `add_subgroup.index_add_card` which talks about multiplication previously.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["mod", "theorem", "index_mul_card", ["subgroup"]]]}]}, {"timestamp": 1638416270, "sha": "70435215", "message": "chore(algebra/order/*): drop some `[nontrivial _]` assumptions (#10550)\nUse `pullback_nonzero` to deduce `nontrivial _` in some `function.injective.*` constructors.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}]}, {"timestamp": 1638416269, "sha": "0f12400c", "message": "chore(*): more cleanups of by_cases (#10549)\nFollow up #10523 with more tool-assisted golfing, see that PR for details.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/probability_theory/density.lean", "newPath": "src/probability_theory/density.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1638378294, "sha": "c09501db", "message": "feat(*): assorted `finset` lemmas (#10566)", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "one_lt_prod", ["finset"]], ["add", "theorem", "prod_lt_one", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "range_sdiff_zero", ["finset"]]]}]}, {"timestamp": 1638359193, "sha": "cc604706", "message": "feat(data/nat/prime): Add lemma `factors_count_pow` (#10554)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_count_pow", ["nat"]]]}]}, {"timestamp": 1638328671, "sha": "599a5118", "message": "feat(analysis/normed_space/star and data/complex/is_R_or_C): register instances of `cstar_ring` (#10555)\nRegister instances `cstar_ring ℝ` and `cstar_ring K` when `[is_R_or_C K]`", "changes": [{"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}]}, {"timestamp": 1638326488, "sha": "3f7d0cfd", "message": "chore(scripts): update nolints.txt (#10563)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1638291156, "sha": "49f8b6b8", "message": "chore(analysis/mean_inequalities[_pow]): use vector notation (#10546)\nSeveral elementary inequalities in the library are expressed both in arbitrary n-ary versions and in explicit binary, ternary etc versions, with the latter deduced from the former. This PR introduces vector notation to the proof terms deducing the latter from the former, which shortens them, and also makes them more readable.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities_pow.lean", "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": []}]}, {"timestamp": 1638291155, "sha": "b876e76b", "message": "feat(algebra/char_p/two): couple more lemmas + 🏌️ (#10467)", "changes": [{"oldPath": "src/algebra/char_p/two.lean", "newPath": "src/algebra/char_p/two.lean", "changes": [["add", "theorem", "neg_one_eq_one_iff", []], ["add", "theorem", "order_of_neg_one", []]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "neg_one", ["is_primitive_root"]]]}]}, {"timestamp": 1638284869, "sha": "cd69351b", "message": "doc(data/stream/defs): add docstrings to most defs (#10547)\nAlso move 1 def from `basic` to `defs`.", "changes": [{"oldPath": "src/control/random.lean", "newPath": "src/control/random.lean", "changes": []}, {"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": [["del", "def", "corec_state", ["stream"]]]}, {"oldPath": "src/data/stream/defs.lean", "newPath": "src/data/stream/defs.lean", "changes": [["add", "def", "corec_state", ["stream"]], ["mod", "def", "head", ["stream"]], ["mod", "def", "nth", ["stream"]]]}]}, {"timestamp": 1638284868, "sha": "8bce7eb0", "message": "refactor(algebra/group/basic): Migrate `add_group` section into `group` section (#10532)", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "add_eq_of_eq_sub", []], ["del", "theorem", "add_sub", []], ["del", "theorem", "add_sub_add_right_eq_sub", []], ["del", "theorem", "add_sub_assoc", []], ["del", "theorem", "add_sub_cancel", []], ["add", "theorem", "div_div_assoc_swap", []], ["add", "theorem", "div_div_div_cancel_right'", []], ["add", "theorem", "div_eq_iff_eq_mul", []], ["add", "theorem", "div_eq_of_eq_mul''", []], ["add", "theorem", "div_eq_one", []], ["add", "theorem", "div_eq_self", []], ["add", "theorem", "div_inv_eq_mul", []], ["add", "theorem", "div_left_inj", []], ["add", "theorem", "div_mul_div_cancel'", []], ["add", "theorem", "div_mul_eq_div_div_swap", []], ["add", "theorem", "div_ne_one", []], ["add", "theorem", "div_ne_one_of_ne", []], ["add", "theorem", "div_right_inj", []], ["add", "theorem", "div_self'", []], ["del", "theorem", "eq_add_of_sub_eq", []], ["add", "theorem", "eq_div_iff_mul_eq'", []], ["add", "theorem", "eq_div_of_mul_eq'", []], ["add", "theorem", "eq_iff_eq_of_div_eq_div", []], ["del", "theorem", "eq_iff_eq_of_sub_eq_sub", []], ["add", "theorem", "eq_mul_of_div_eq", []], ["add", "theorem", "eq_of_div_eq_one'", []], ["del", "theorem", "eq_of_sub_eq_zero", []], ["del", "theorem", "eq_sub_iff_add_eq", []], ["del", "theorem", "eq_sub_of_add_eq", []], ["del", "theorem", "left_inverse_add_left_sub", []], ["del", "theorem", "left_inverse_add_right_neg_add", []], ["add", "theorem", "left_inverse_div_mul_left", []], ["add", "theorem", "left_inverse_inv_mul_mul_right", []], ["add", "theorem", "left_inverse_mul_left_div", []], ["add", "theorem", "left_inverse_mul_right_inv_mul", []], ["del", "theorem", "left_inverse_neg_add_add_right", []], ["del", "theorem", "left_inverse_sub_add_left", []], ["add", "theorem", "mul_div", []], ["mod", "theorem", "mul_div_assoc", []], ["add", "theorem", "mul_div_cancel''", []], ["add", "theorem", "mul_div_mul_right_eq_div", []], ["add", "theorem", "mul_eq_of_eq_div", []], ["del", "theorem", "sub_add_eq_sub_sub_swap", []], ["del", "theorem", "sub_add_sub_cancel", []], ["del", "theorem", "sub_eq_iff_eq_add", []], ["del", "theorem", "sub_eq_of_eq_add", []], ["del", "theorem", "sub_eq_self", []], ["del", "theorem", "sub_eq_zero", []], ["del", "theorem", "sub_left_inj", []], ["del", "theorem", "sub_ne_zero", []], ["del", "theorem", "sub_ne_zero_of_ne", []], ["del", "theorem", "sub_neg_eq_add", []], ["del", "theorem", "sub_right_inj", []], ["del", "theorem", "sub_self", []], ["del", "theorem", "sub_sub_assoc_swap", []], ["del", "theorem", "sub_sub_sub_cancel_right", []]]}]}, {"timestamp": 1638278684, "sha": "41fa32b3", "message": "feat(data/nat/pairing): add an `equiv` version of `nat.mkpair`/`nat.unpair` (#10520)", "changes": [{"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["add", "theorem", "mkpair_eq_mkpair", ["nat"]], ["add", "def", "mkpair_equiv", ["nat"]]]}]}, {"timestamp": 1638278683, "sha": "af5c778c", "message": "feat(topology/[continuous_function, path_connected]): add bundled versions of prod_mk and prod_map (#10512)\nI also added a definition for pointwise addition of paths, but I'm not sure it would be really useful in general (my use case is the Sphere eversion project, where I need to add together two paths living in complement subspaces of a real TVS).", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "def", "prod_map", ["continuous_map"]], ["add", "def", "prod_mk", ["continuous_map"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1638278681, "sha": "4d90ff97", "message": "feat(topology/connected): Connectedness in sum and sigma type (#10511)\nThis provides the `compact_space` and `totally_disconnected_space` instances for `α ⊕ β` and `Σ i, π i`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "univ", ["set", "sigma"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["mod", "theorem", "is_connected_univ_pi", []], ["mod", "theorem", "is_preconnected_univ_pi", []], ["add", "theorem", "is_connected_iff", ["sigma"]], ["add", "theorem", "is_preconnected_iff", ["sigma"]], ["add", "theorem", "is_connected_iff", ["sum"]], ["add", "theorem", "is_preconnected_iff", ["sum"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "is_open_sigma_fst_preimage", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "clopen_range_sigma_mk", []]]}]}, {"timestamp": 1638278679, "sha": "73562699", "message": "feat(linear_algebra/affine_space/basis): upgrade `affine_basis.coords` to an affine map (#10452)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": [["add", "theorem", "coe_linear", ["affine_basis"]]]}]}, {"timestamp": 1638275955, "sha": "35574bbf", "message": "fix(*): replace \"the the\" by \"the\" (#10548)", "changes": [{"oldPath": "src/linear_algebra/affine_space/basis.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1638272946, "sha": "1077f346", "message": "feat(algebraic_geometry): Generalized basic open for arbitrary sections (#10515)", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "theorem", "preimage_basic_open", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": [["mod", "def", "basic_open", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "basic_open_res", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "basic_open_subset", ["algebraic_geometry", "RingedSpace"]], ["mod", "theorem", "is_unit_res_basic_open", ["algebraic_geometry", "RingedSpace"]], ["mod", "theorem", "mem_basic_open", ["algebraic_geometry", "RingedSpace"]]]}]}, {"timestamp": 1638266901, "sha": "6102d771", "message": "feat(group_theory/submonoid/pointwise): pointwise inverse of a submonoid (#10451)\nThis also adds `order_iso.map_{supr,infi,Sup,Inf}` which are used here to provide some short proofs.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "Inter_inv", ["set"]], ["add", "theorem", "Union_inv", ["set"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["add", "theorem", "closure_inv", ["submonoid"]], ["add", "theorem", "coe_inv", ["submonoid"]], ["add", "theorem", "inv_bot", ["submonoid"]], ["add", "theorem", "inv_inf", ["submonoid"]], ["add", "theorem", "inv_infi", ["submonoid"]], ["add", "theorem", "inv_le", ["submonoid"]], ["add", "theorem", "inv_le_inv", ["submonoid"]], ["add", "def", "inv_order_iso", ["submonoid"]], ["add", "theorem", "inv_sup", ["submonoid"]], ["add", "theorem", "inv_supr", ["submonoid"]], ["add", "theorem", "inv_top", ["submonoid"]], ["add", "theorem", "mem_inv", ["submonoid"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "map_Inf", ["order_iso"]], ["add", "theorem", "map_Sup", ["order_iso"]], ["add", "theorem", "map_infi", ["order_iso"]], ["add", "theorem", "map_supr", ["order_iso"]]]}]}, {"timestamp": 1638257345, "sha": "4a9aa275", "message": "feat(analysis/normed_space/spectrum and algebra/algebra/spectrum): prove properties of spectrum in a Banach algebra (#10530)\nProve that the `spectrum` of an element in a Banach algebra is closed and bounded, hence compact when the scalar field is \nproper. Compute the derivative of the `resolvent a` function in preparation for showing that the spectrum is nonempty when the base field is ℂ. Define the `spectral_radius` and prove that it is bounded by the norm. Also rename the resolvent set to `resolvent_set` instead of `resolvent` so that it doesn't clash with the function name.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["del", "def", "resolvent", []], ["add", "def", "resolvent_set", []], ["del", "theorem", "mem_resolvent_iff", ["spectrum"]], ["del", "theorem", "mem_resolvent_of_left_right_inverse", ["spectrum"]], ["add", "theorem", "mem_resolvent_set_iff", ["spectrum"]], ["add", "theorem", "mem_resolvent_set_of_left_right_inverse", ["spectrum"]], ["add", "theorem", "resolvent_eq", ["spectrum"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/spectrum.lean", "changes": [["add", "theorem", "has_deriv_at_resolvent", ["spectrum"]], ["add", "theorem", "is_bounded", ["spectrum"]], ["add", "theorem", "is_closed", ["spectrum"]], ["add", "theorem", "is_compact", ["spectrum"]], ["add", "theorem", "is_open_resolvent_set", ["spectrum"]], ["add", "theorem", "mem_resolvent_of_norm_lt", ["spectrum"]], ["add", "theorem", "norm_le_norm_of_mem", ["spectrum"]], ["add", "theorem", "spectral_radius_le_nnnorm", ["spectrum"]], ["add", "theorem", "subset_closed_ball_norm", ["spectrum"]]]}]}, {"timestamp": 1638255040, "sha": "f11d505e", "message": "feat(category_theory/sites/compatible_*): Compatibility of plus and sheafification with composition. (#10510)\nCompatibility of sheafification with composition. This will be used later to obtain adjunctions between categories of sheaves.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/compatible_plus.lean", "changes": [["add", "def", "diagram_comp_iso", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "diagram_comp_iso_hom_ι", ["category_theory", "grothendieck_topology"]], ["add", "def", "plus_comp_iso", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_comp_iso_inv_eq_plus_lift", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_comp_iso_whisker_left", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_comp_iso_whisker_right", ["category_theory", "grothendieck_topology"]], ["add", "def", "plus_functor_whisker_left_iso", ["category_theory", "grothendieck_topology"]], ["add", "def", "plus_functor_whisker_right_iso", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_plus_comp_plus_comp_iso_inv", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "whisker_right_to_plus_comp_plus_comp_iso_hom", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "ι_plus_comp_iso_hom", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/compatible_sheafification.lean", "changes": [["add", "def", "sheafification_whisker_left_iso", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafification_whisker_left_iso_hom_app", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafification_whisker_left_iso_inv_app", ["category_theory", "grothendieck_topology"]], ["add", "def", "sheafification_whisker_right_iso", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafification_whisker_right_iso_hom_app", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafification_whisker_right_iso_inv_app", ["category_theory", "grothendieck_topology"]], ["add", "def", "sheafify_comp_iso", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafify_comp_iso_inv_eq_sheafify_lift", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_sheafify_comp_sheafify_comp_iso_inv", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "whisker_right_to_sheafify_sheafify_comp_iso_hom", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": [["add", "def", "diagram_nat_trans", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "diagram_nat_trans_comp", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "diagram_nat_trans_id", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_map_comp", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_map_id", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_plus_naturality", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": [["add", "theorem", "sheafification_map_sheafify_lift", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafify_is_sheaf", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": "src/category_theory/sites/whiskering.lean", "newPath": "src/category_theory/sites/whiskering.lean", "changes": [["add", "theorem", "multicospan_comp_hom_inv_left", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "multicospan_comp_hom_inv_right", ["category_theory", "grothendieck_topology", "cover"]]]}]}, {"timestamp": 1638240767, "sha": "396351bd", "message": "chore(scripts): update nolints.txt (#10545)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1638221353, "sha": "04fc415a", "message": "feat(algebra/char_p/two): lemmas about characteristic two (#10442)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "list_sum_pow_char", []], ["add", "theorem", "multiset_sum_pow_char", []], ["add", "theorem", "sum_pow_char", []]]}, {"oldPath": null, "newPath": "src/algebra/char_p/two.lean", "changes": [["add", "theorem", "add_mul_self", ["char_two"]], ["add", "theorem", "add_self_eq_zero", ["char_two"]], ["add", "theorem", "add_sq", ["char_two"]], ["add", "theorem", "bit0_eq_zero", ["char_two"]], ["add", "theorem", "bit1_eq_one", ["char_two"]], ["add", "theorem", "list_sum_mul_self", ["char_two"]], ["add", "theorem", "list_sum_sq", ["char_two"]], ["add", "theorem", "multiset_sum_mul_self", ["char_two"]], ["add", "theorem", "multiset_sum_sq", ["char_two"]], ["add", "theorem", "neg_eq'", ["char_two"]], ["add", "theorem", "neg_eq", ["char_two"]], ["add", "theorem", "sub_eq_add'", ["char_two"]], ["add", "theorem", "sub_eq_add", ["char_two"]], ["add", "theorem", "sum_mul_self", ["char_two"]], ["add", "theorem", "sum_sq", ["char_two"]], ["add", "theorem", "two_eq_zero", ["char_two"]]]}]}, {"timestamp": 1638214963, "sha": "f798f22e", "message": "refactor(order/filter/bases): drop `p` in `has_antitone_basis` (#10499)\nWe never use `has_antitone_basis` for `p ≠ λ _, true` in `mathlib`.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "subseq_tendsto_of_ne_bot", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["del", "theorem", "exists_antitone_eq_infi_principal", ["filter"]], ["mod", "structure", "has_antitone_basis", ["filter"]], ["mod", "structure", "is_antitone_basis", ["filter"]]]}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1638208164, "sha": "da6aceb8", "message": "chore(order): fix-ups after #9891 (#10538)", "changes": [{"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["mod", "theorem", "inf_eq_bot_iff_le_compl", []]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}]}, {"timestamp": 1638208163, "sha": "7545909c", "message": "chore(logic/function): allow `Sort*` in `function.inv_fun` (#10526)", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "inv_fun_eq", ["function"]], ["mod", "theorem", "inv_fun_neg", ["function"]]]}]}, {"timestamp": 1638208161, "sha": "3ac9ae73", "message": "chore(data/stream): dedup `take` and `approx` (#10525)\n`stream.take` and `stream.approx` were propositionally equal. Merge\nthem into one function `stream.take`; the definition comes from the old `stream.approx`.", "changes": [{"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": [["del", "theorem", "length_take", ["stream"]]]}, {"oldPath": "src/data/stream/defs.lean", "newPath": "src/data/stream/defs.lean", "changes": [["del", "def", "approx", ["stream"]], ["mod", "def", "take", ["stream"]]]}, {"oldPath": "src/data/stream/init.lean", "newPath": "src/data/stream/init.lean", "changes": [["del", "theorem", "append_approx_drop", ["stream"]], ["add", "theorem", "append_take_drop", ["stream"]], ["del", "theorem", "approx_succ", ["stream"]], ["del", "theorem", "approx_zero", ["stream"]], ["add", "theorem", "length_take", ["stream"]], ["del", "theorem", "nth_approx", ["stream"]], ["mod", "theorem", "nth_inits", ["stream"]], ["add", "theorem", "nth_take_succ", ["stream"]], ["add", "theorem", "take_succ", ["stream"]], ["mod", "theorem", "take_theorem", ["stream"]], ["add", "theorem", "take_zero", ["stream"]]]}]}, {"timestamp": 1638208160, "sha": "bc4ed5c0", "message": "chore(*): cleanup unneeded uses of by_cases across the library (#10523)\nMany proofs in the library do case splits but then never use the introduced assumption in one of the cases, meaning the case split can be removed and replaced with the general argument.\nIts easy to either accidentally introduce these more complicated than needed arguments when writing proofs, or in some cases presumably refactors made assumptions unnecessary, we golf / simplify several of these to simplify these proofs.\nSimilar things happen for `split_ifs` and explicit `if ... then` proofs.\nRather remarkably the changes to `uniformly_extend_spec` make the separated space assumption unnecessary too, and removing this removes this assumption from around 10 other lemmas in the library too.\nSome more random golfs were added in the review process\nFound with a work in progress linter.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": []}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": []}, {"oldPath": "src/group_theory/perm/option.lean", "newPath": "src/group_theory/perm/option.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": []}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "extension_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1638208159, "sha": "56018332", "message": "chore(*): a few facts about `pprod` (#10519)\nAdd `equiv.pprod_equiv_prod` and `function.embedding.pprod_map`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "pprod_equiv_prod", ["equiv"]]]}, {"oldPath": "src/data/pprod.lean", "newPath": "src/data/pprod.lean", "changes": [["add", "theorem", "pprod_map", ["function", "injective"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "pprod_map", ["function", "embedding"]]]}]}, {"timestamp": 1638208158, "sha": "be48f958", "message": "refactor(algebra.order.group): Convert abs_eq_sup_neg to multiplicative form (#10505)\nrefactor(algebra.order.group): Convert abs_eq_sup_neg to multiplicative form", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "abs_eq_sup_inv", []], ["del", "theorem", "abs_eq_sup_neg", []]]}]}, {"timestamp": 1638208157, "sha": "2ed7c0ff", "message": "doc(field_theory/galois): add comment that separable extensions are a… (#10500)\n…lgebraic\nI teach my students that a Galois extension is algebraic, normal and separable, and was\njust taken aback when I read the mathlib definition which omits \"algebraic\". Apparently\nthere are two conventions for the definition of separability, one implying algebraic and the other not:\nhttps://en.wikipedia.org/wiki/Separable_extension#Separability_of_transcendental_extensions .\nRight now we have separability implies algebraic in mathlib so mathematically we're fine; I just\nadd a note to clarify what's going on. In particular if we act on the TODO in\nthe separability definition, we may (perhaps unwittingly) break the definition of\n`is_galois`; hopefully this note lessens the chance that this happens.", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}]}, {"timestamp": 1638208155, "sha": "fcbe7142", "message": "refactor(data/nat/fib): use `nat.iterate` (#10489)\nThe main drawback of the new definition is that `fib (n + 2) = fib n + fib (n + 1)` is no longer `rfl` but I think that we should have one API for iterates.\nSee discussion at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60nat.2Eiterate.60.20vs.20.60stream.2Eiterate.60", "changes": [{"oldPath": "archive/imo/imo1981_q3.lean", "newPath": "archive/imo/imo1981_q3.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["mod", "def", "fib", ["nat"]], ["add", "theorem", "fib_add_two", ["nat"]], ["mod", "theorem", "fib_le_fib_succ", ["nat"]], ["add", "theorem", "fib_lt_fib_succ", ["nat"]], ["del", "theorem", "fib_succ_succ", ["nat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "coprime_add_self_left", ["nat"]], ["add", "theorem", "coprime_add_self_right", ["nat"]], ["add", "theorem", "coprime_self_add_left", ["nat"]], ["add", "theorem", "coprime_self_add_right", ["nat"]], ["mod", "theorem", "gcd_add_mul_self", ["nat"]], ["add", "theorem", "gcd_add_self_left", ["nat"]], ["add", "theorem", "gcd_add_self_right", ["nat"]], ["mod", "theorem", "gcd_eq_zero_iff", ["nat"]], ["add", "theorem", "gcd_self_add_left", ["nat"]], ["add", "theorem", "gcd_self_add_right", ["nat"]]]}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}]}, {"timestamp": 1638205911, "sha": "b849b3c2", "message": "feat(number_theory/padics/padic_norm): prime powers in divisors (#10481)", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["add", "theorem", "range_pow_padic_val_nat_subset_divisors'", []], ["add", "theorem", "range_pow_padic_val_nat_subset_divisors", []]]}]}, {"timestamp": 1638179822, "sha": "957fa4bb", "message": "feat(order/locally_finite): `with_top α`/`with_bot α` are locally finite orders (#10202)\nThis provides the two instances `locally_finite_order (with_top α)` and `locally_finite_order (with_bot α)`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "mem_cons_self", ["finset"]]]}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": [["add", "theorem", "mem_iff", ["option"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "coe_option", ["function", "embedding"]], ["add", "def", "coe_with_top", ["function", "embedding"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "theorem", "Icc_bot_coe", ["with_bot"]], ["add", "theorem", "Icc_coe_coe", ["with_bot"]], ["add", "theorem", "Ico_bot_coe", ["with_bot"]], ["add", "theorem", "Ico_coe_coe", ["with_bot"]], ["add", "theorem", "Ioc_bot_coe", ["with_bot"]], ["add", "theorem", "Ioc_coe_coe", ["with_bot"]], ["add", "theorem", "Ioo_bot_coe", ["with_bot"]], ["add", "theorem", "Ioo_coe_coe", ["with_bot"]], ["add", "theorem", "Icc_coe_coe", ["with_top"]], ["add", "theorem", "Icc_coe_top", ["with_top"]], ["add", "theorem", "Ico_coe_coe", ["with_top"]], ["add", "theorem", "Ico_coe_top", ["with_top"]], ["add", "theorem", "Ioc_coe_coe", ["with_top"]], ["add", "theorem", "Ioc_coe_top", ["with_top"]], ["add", "theorem", "Ioo_coe_coe", ["with_top"]], ["add", "theorem", "Ioo_coe_top", ["with_top"]]]}]}, {"timestamp": 1638168732, "sha": "202ca0b1", "message": "feat(*/is_R_or_C): deduplicate (#10522)\nI noticed that the same argument, that in a normed space over `is_R_or_C` an element can be normalized, appears in a couple of different places in the library. I have deduplicated and placed it in `analysis/normed_space/is_R_or_C`.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": [["mod", "theorem", "bound_of_ball_bound", ["linear_map"]], ["add", "theorem", "norm_smul_inv_norm'", []], ["add", "theorem", "norm_smul_inv_norm", []]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["del", "theorem", "norm_smul_inv_norm", []]]}]}, {"timestamp": 1638168731, "sha": "a53da16c", "message": "feat(data/int/basic): `nat_abs_dvd_iff_dvd` (#10469)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_dvd_iff_dvd", ["int"]]]}]}, {"timestamp": 1638165868, "sha": "50cc57be", "message": "chore(category_theory/limits/shapes/wide_pullbacks): speed up `wide_cospan` (#10535)", "changes": [{"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}]}, {"timestamp": 1638149773, "sha": "16daabf7", "message": "chore(algebra/group_power): golf a few proofs (#10498)\n* move `pow_lt_pow_of_lt_one` and `pow_lt_pow_iff_of_lt_one` from\n `algebra.group_power.lemmas` to `algebra.group_power.order`;\n* add `strict_anti_pow`, use it to golf the proofs of the two lemmas\n above;\n* golf a few other proofs;\n* add `nnreal.exists_pow_lt_of_lt_one`.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "pow_lt_pow_iff_of_lt_one", []], ["del", "theorem", "pow_lt_pow_of_lt_one", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["mod", "theorem", "one_lt_pow", []], ["add", "theorem", "pow_lt_pow_iff_of_lt_one", []], ["add", "theorem", "pow_lt_pow_of_lt_one", []], ["add", "theorem", "strict_anti_pow", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "exists_pow_lt_of_lt_one", ["nnreal"]]]}]}, {"timestamp": 1638143439, "sha": "77ba0c41", "message": "chore(logic): allow `Sort*` args in 2 lemmas (#10517)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "congr_arg2", []]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["function", "embedding"]]]}]}, {"timestamp": 1638143438, "sha": "c058607c", "message": "chore(order): generalize `min_top_left` (#10486)\nAs well as its relative `min_top_right`.\nAlso provide `max_bot_(left|right)`.", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["del", "theorem", "min_top_left", []], ["del", "theorem", "min_top_right", []]]}, {"oldPath": "src/order/bounded_order.lean", "newPath": "src/order/bounded_order.lean", "changes": [["add", "theorem", "max_bot_left", []], ["add", "theorem", "max_bot_right", []], ["add", "theorem", "min_top_left", []], ["add", "theorem", "min_top_right", []]]}]}, {"timestamp": 1638143437, "sha": "43519fc7", "message": "feat(tactic/lint/misc): unused arguments checks for more sorry's (#10431)\n* The `unused_arguments` linter now checks whether `sorry` occurs in any of the `_proof_i` declarations and will not raise an error if this is the case\n* Two minor changes: `open tactic` in all of `meta.expr` and fix a typo.\n* I cannot add a test without adding a `sorry` to the test suite, but this succeeds without linter warning:\n```lean\nimport tactic.lint\n/-- dummy doc -/\ndef one (h : 0 < 1) : {n : ℕ // 0 < n} := ⟨1, sorry⟩\n#lint\n```", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1638137186, "sha": "dfa98e0e", "message": "chore(algebra/opposites): split out lemmas about rings and groups (#10457)\nAll these lemmas are just moved.\nThe advantage of this is that `algebra.opposites` becomes a much lighter-weight import, allowing us to use the `has_mul` and `has_scalar` instance on opposite types earlier in the import hierarchy.\nIt also matches how we structure the instances on `prod` and `pi` types.\nThis follows on from #10383", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/field/opposite.lean", "newPath": "src/algebra/field/opposite.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group/opposite.lean", "changes": [["add", "def", "op", ["add_equiv"]], ["add", "def", "unop", ["add_equiv"]], ["add", "def", "op", ["add_monoid_hom"]], ["add", "theorem", "op_ext", ["add_monoid_hom"]], ["add", "def", "unop", ["add_monoid_hom"]], ["add", "def", "op", ["monoid_hom"]], ["add", "def", "to_opposite", ["monoid_hom"]], ["add", "def", "unop", ["monoid_hom"]], ["add", "def", "inv'", ["mul_equiv"]], ["add", "def", "op", ["mul_equiv"]], ["add", "def", "unop", ["mul_equiv"]], ["add", "theorem", "op", ["mul_opposite", "commute"]], ["add", "theorem", "unop", ["mul_opposite", "commute"]], ["add", "theorem", "commute_op", ["mul_opposite"]], ["add", "theorem", "commute_unop", ["mul_opposite"]], ["add", "def", "op_add_equiv", ["mul_opposite"]], ["add", "theorem", "op_add_equiv_to_equiv", ["mul_opposite"]], ["add", "theorem", "op", ["mul_opposite", "semiconj_by"]], ["add", "theorem", "unop", ["mul_opposite", "semiconj_by"]], ["add", "theorem", "semiconj_by_op", ["mul_opposite"]], ["add", "theorem", "semiconj_by_unop", ["mul_opposite"]], ["add", "theorem", "coe_op_equiv_symm", ["units"]], ["add", "theorem", "coe_unop_op_equiv", ["units"]], ["add", "def", "op_equiv", ["units"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["del", "def", "op", ["add_equiv"]], ["del", "def", "unop", ["add_equiv"]], ["del", "def", "op", ["add_monoid_hom"]], ["del", "theorem", "op_ext", ["add_monoid_hom"]], ["del", "def", "unop", ["add_monoid_hom"]], ["del", "def", "op", ["monoid_hom"]], ["del", "def", "to_opposite", ["monoid_hom"]], ["del", "def", "unop", ["monoid_hom"]], ["del", "def", "inv'", ["mul_equiv"]], ["del", "def", "op", ["mul_equiv"]], ["del", "def", "unop", ["mul_equiv"]], ["del", "theorem", "op", ["mul_opposite", "commute"]], ["del", "theorem", "unop", ["mul_opposite", "commute"]], ["del", "theorem", "commute_op", ["mul_opposite"]], ["del", "theorem", "commute_unop", ["mul_opposite"]], ["del", "def", "op_add_equiv", ["mul_opposite"]], ["del", "theorem", "op_add_equiv_to_equiv", ["mul_opposite"]], ["del", "theorem", "op", ["mul_opposite", "semiconj_by"]], ["del", "theorem", "unop", ["mul_opposite", "semiconj_by"]], ["del", "theorem", "semiconj_by_op", ["mul_opposite"]], ["del", "theorem", "semiconj_by_unop", ["mul_opposite"]], ["del", "def", "op", ["ring_hom"]], ["del", "def", "to_opposite", ["ring_hom"]], ["del", "def", "unop", ["ring_hom"]], ["del", "theorem", "coe_op_equiv_symm", ["units"]], ["del", "theorem", "coe_unop_op_equiv", ["units"]], ["del", "def", "op_equiv", ["units"]]]}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/ring/opposite.lean", "changes": [["add", "def", "op", ["ring_hom"]], ["add", "def", "to_opposite", ["ring_hom"]], ["add", "def", "unop", ["ring_hom"]]]}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/opposite.lean", "newPath": "src/group_theory/group_action/opposite.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_invo.lean", "newPath": "src/ring_theory/ring_invo.lean", "changes": []}]}, {"timestamp": 1638130990, "sha": "f684721d", "message": "chore(data/nat/prime): `fact (2.prime)` (#10441)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "fact_prime_three", ["nat"]], ["add", "theorem", "fact_prime_two", ["nat"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["del", "theorem", "fact_prime_two", ["zmod"]]]}]}, {"timestamp": 1638128170, "sha": "a2e6bf89", "message": "chore(algebraic_topology/cech_nerve): An attempt to speed up the proofs... (#10521)\nLet's hope this works!\nSee [zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2310312.20timeouts.20in.20cech_nerve/near/262587999)", "changes": [{"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": [["add", "def", "map_augmented_cech_conerve", ["category_theory", "arrow"]], ["add", "def", "map_augmented_cech_nerve", ["category_theory", "arrow"]], ["add", "def", "map_cech_conerve", ["category_theory", "arrow"]], ["add", "def", "map_cech_nerve", ["category_theory", "arrow"]]]}]}, {"timestamp": 1638084088, "sha": "044f5320", "message": "chore(analysis/normed_space/hahn_banach): remove `norm'` (#10527)\nFor a normed space over `ℝ`-algebra `𝕜`, `norm'` is currently defined to be `algebra_map ℝ 𝕜 ∥x∥`. I believe this was introduced before the `is_R_or_C` construct (including the coercion from `ℝ` to `𝕜` for `[is_R_or_C 𝕜]`) joined mathlib. Now that we have these things, it's easy to just say `(∥x∥ : 𝕜)` instead of `norm' 𝕜 ∥x∥`, so I don't really think `norm'` needs to exist any more.\n(In principle, `norm'` is more general, since it works for all `ℝ`-algebras `𝕜` rather than just `[is_R_or_C 𝕜]`. But I can only really think of applications in the`is_R_or_C` case, and that's the only way it's used in the library.)", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["mod", "theorem", "coord_norm'", []], ["mod", "theorem", "exists_dual_vector", []], ["del", "theorem", "norm'_def", []], ["del", "theorem", "norm'_eq_zero_iff", []], ["del", "theorem", "norm_norm'", []]]}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}]}, {"timestamp": 1638084087, "sha": "099fb0f6", "message": "feat(data/nat/prime): lemma eq_of_eq_count_factors (#10493)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "eq_of_count_factors_eq", ["nat"]], ["add", "theorem", "eq_of_perm_factors", ["nat"]]]}]}, {"timestamp": 1638079930, "sha": "45d45ef0", "message": "feat(data/nat/prime): lemma count_factors_mul_of_coprime (#10492)\nAdding lemma `count_factors_mul_of_coprime` and using it to simplify the proof of `factors_count_eq_of_coprime_left`.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "count_factors_mul_of_coprime", ["nat"]]]}]}, {"timestamp": 1638070780, "sha": "b1f90678", "message": "feat(group_theory/group_action/units): add a `mul_distrib_mul_action` instance (#10480)\nThis doesn't add any new \"data\" instances, it just shows the existing instance satisfies stronger properties with stronger assumptions.", "changes": [{"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": []}]}, {"timestamp": 1638006377, "sha": "b8af4914", "message": "feat(category_theory/sites/whiskering): Functors between sheaf categories induced by compositiion (#10496)\nWe construct the functor `Sheaf J A` to `Sheaf J B` induced by a functor `A` to `B` which preserves the appropriate limits.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/whiskering.lean", "changes": [["add", "def", "Sheaf_compose", ["category_theory"]], ["add", "def", "Sheaf_compose_map", ["category_theory"]], ["add", "theorem", "Sheaf_compose_map_app", ["category_theory"]], ["add", "theorem", "Sheaf_compose_map_app_app", ["category_theory"]], ["add", "theorem", "Sheaf_compose_map_comp", ["category_theory"]], ["add", "theorem", "Sheaf_compose_map_id", ["category_theory"]], ["add", "theorem", "Sheaf_compose_map_to_presheaf", ["category_theory"]], ["add", "theorem", "Sheaf_compose_obj_to_presheaf", ["category_theory"]], ["add", "def", "map_multifork", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "multicospan_comp", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "multicospan_comp_app_left", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "multicospan_comp_app_right", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "multicospan_comp_hom_app_left", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "multicospan_comp_hom_app_right", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "comp", ["category_theory", "presheaf", "is_sheaf"]]]}]}, {"timestamp": 1638002552, "sha": "fcb37903", "message": "feat(topology/algebra/matrix): the determinant is a continuous map (#10503)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "coe_det_is_empty", ["matrix"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/matrix.lean", "changes": [["add", "theorem", "continuous_det", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_apply_apply", []]]}]}, {"timestamp": 1637996541, "sha": "d36a67c7", "message": "feat(ring_theory/euclidean_domain): generalize lemmas to PIDs (#10324)\nThis moves the existing lemmas to the `euclidean_domain` namespace.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": [["del", "theorem", "dvd_or_coprime", []], ["add", "theorem", "dvd_or_coprime", ["euclidean_domain"]], ["add", "theorem", "gcd_is_unit_iff", ["euclidean_domain"]], ["add", "def", "gcd_monoid", ["euclidean_domain"]], ["add", "theorem", "is_coprime_of_dvd", ["euclidean_domain"]], ["add", "theorem", "span_gcd", ["euclidean_domain"]], ["del", "theorem", "gcd_is_unit_iff", []], ["del", "theorem", "is_coprime_of_dvd", []], ["del", "theorem", "span_gcd", []]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "dvd_or_coprime", []], ["add", "theorem", "gcd_is_unit_iff", []], ["add", "theorem", "is_coprime_of_dvd", []], ["add", "theorem", "span_gcd", []]]}]}, {"timestamp": 1637981399, "sha": "150b2179", "message": "chore(scripts): update nolints.txt (#10513)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1637968090, "sha": "7a19aa1d", "message": "feat(group_theory/order_of_element): linear ordered rings (#10473)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_le_two", ["linear_ordered_ring"]], ["add", "theorem", "order_of_abs_ne_one", []], ["add", "theorem", "order_of_eq_zero_iff'", []]]}]}, {"timestamp": 1637962836, "sha": "7348f1b7", "message": "Adding a matching TODO back (#10506)\nBecause we were careless and removed it too early:\nhttps://github.com/leanprover-community/mathlib/pull/10210#discussion_r757640946", "changes": [{"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": []}]}, {"timestamp": 1637949035, "sha": "deb56921", "message": "refactor(combinatorics/simple_graph): use subgraphs to represent matchings (#10210)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": [["del", "def", "is_perfect", ["simple_graph", "matching"]], ["del", "theorem", "is_perfect_iff", ["simple_graph", "matching"]], ["del", "def", "support", ["simple_graph", "matching"]], ["del", "structure", "matching", ["simple_graph"]], ["add", "theorem", "support_eq_verts", ["simple_graph", "subgraph", "is_matching"]], ["add", "def", "is_matching", ["simple_graph", "subgraph"]], ["add", "def", "is_perfect_matching", ["simple_graph", "subgraph"]], ["add", "theorem", "is_perfect_matching_iff", ["simple_graph", "subgraph"]]]}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "is_spanning_iff", ["simple_graph", "subgraph"]], ["add", "theorem", "mem_support", ["simple_graph", "subgraph"]], ["add", "def", "support", ["simple_graph", "subgraph"]], ["add", "theorem", "support_mono", ["simple_graph", "subgraph"]], ["add", "theorem", "support_subset_verts", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1637943600, "sha": "dabb58bb", "message": "chore(algebra/module/pi): split out `group_theory/group_action/pi` to match `group_theory/group_action/prod` (#10485)\nThese declarations are copied without modification.", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["del", "theorem", "extend_smul", ["function"]], ["del", "theorem", "update_smul", ["function"]], ["del", "theorem", "has_faithful_scalar_at", ["pi"]], ["del", "theorem", "single_smul'", ["pi"]], ["del", "theorem", "single_smul", ["pi"]], ["del", "theorem", "single_smul₀", ["pi"]], ["del", "theorem", "smul_apply'", ["pi"]], ["del", "theorem", "smul_apply", ["pi"]], ["del", "theorem", "smul_def", ["pi"]], ["del", "theorem", "piecewise_smul", ["set"]]]}, {"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/group_action/pi.lean", "changes": [["add", "theorem", "extend_smul", ["function"]], ["add", "theorem", "update_smul", ["function"]], ["add", "theorem", "has_faithful_scalar_at", ["pi"]], ["add", "theorem", "single_smul'", ["pi"]], ["add", "theorem", "single_smul", ["pi"]], ["add", "theorem", "single_smul₀", ["pi"]], ["add", "theorem", "smul_apply'", ["pi"]], ["add", "theorem", "smul_apply", ["pi"]], ["add", "theorem", "smul_def", ["pi"]], ["add", "theorem", "piecewise_smul", ["set"]]]}]}, {"timestamp": 1637943599, "sha": "ea52ec1f", "message": "feat(ring_theory/ideal/operations): add lemmas about comap (#10418)\nThis also adds `ring_hom.to_semilinear_map` and `ring_equiv.to_semilinear_equiv`.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "to_semilinear_map", ["ring_hom"]]]}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["add", "def", "to_semilinear_equiv", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "comap_le_map_of_inv_on", ["ideal"]], ["add", "theorem", "comap_le_map_of_inverse", ["ideal"]], ["add", "theorem", "map_le_comap_of_inv_on", ["ideal"]], ["add", "theorem", "map_le_comap_of_inverse", ["ideal"]], ["add", "theorem", "comap_ker", ["ring_hom"]]]}]}, {"timestamp": 1637941443, "sha": "9cfa33a6", "message": "feat(algebra/lie): implement `set_like` for `lie_submodule` (#10488)\nThis PR provides a `set_like` instance for `lie_submodule` and uses it to define `has_mem` and `has_le` for Lie submodules / ideals.", "changes": [{"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["mod", "theorem", "ext", ["lie_submodule"]], ["del", "theorem", "le_def", ["lie_submodule"]]]}]}, {"timestamp": 1637931568, "sha": "83bce9f1", "message": "feat(category_theory/adjunction/whiskering): Whiskering adjunctions. (#10495)\nConstruct adjunctions between functor categories induced by whiskering (both left and right).\nThis will be used later to construct adjunctions between categories of sheaves.", "changes": [{"oldPath": null, "newPath": "src/category_theory/adjunction/whiskering.lean", "changes": []}]}, {"timestamp": 1637927956, "sha": "61e8aa81", "message": "feat(topology/algebra/[X]): sub[X] of a topological [X] is itself a topological [X] (#10491)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1637924690, "sha": "36f33d0d", "message": "chore(category_theory/limits): Generalize universes for limits (#10243)", "changes": [{"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": [["mod", "def", "limit_cone", ["Algebra", "has_limits"]]]}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["mod", "def", "limit_cone", ["SemiRing", "has_limits"]]]}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": [["mod", "def", "limit_cone", ["Module", "has_limits"]]]}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": [["mod", "def", "limit_cone", ["Mon", "has_limits"]]]}, {"oldPath": "src/category_theory/category/ulift.lean", "newPath": "src/category_theory/category/ulift.lean", "changes": [["del", "def", "down", ["category_theory", "ulift"]], ["add", "def", "down_functor", ["category_theory", "ulift"]], ["del", "def", "up", ["category_theory", "ulift"]], ["add", "def", "up_functor", ["category_theory", "ulift"]], ["add", "def", "{v'", ["category_theory"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["mod", "def", "equiv_of_equivalence", ["category_theory", "discrete"]], ["mod", "def", "equivalence", ["category_theory", "discrete"]]]}, {"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": [["add", "def", "as_type", ["category_theory", "fin_category"]], ["add", "def", "obj_as_type", ["category_theory", "fin_category"]], ["add", "def", "obj_as_type_equiv_as_type", ["category_theory", "fin_category"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/comma.lean", "newPath": "src/category_theory/limits/comma.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "cocones", ["category_theory"]], ["mod", "def", "cones", ["category_theory"]], ["mod", "def", "cocones", ["category_theory", "functor"]], ["mod", "def", "cones", ["category_theory", "functor"]], ["mod", "def", "extensions", ["category_theory", "limits", "cocone"]]]}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/has_limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["mod", "def", "colim_coyoneda", ["category_theory", "limits"]], ["mod", "def", "hom_iso", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "map_post", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "of_cocones_iso", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "has_limits_of_shape", ["category_theory", "limits", "has_colimits"]], ["add", "def", "has_colimits", ["category_theory", "limits"]], ["mod", "theorem", "has_colimits_of_shape_of_equivalence", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_of_size_shrink", ["category_theory", "limits"]], ["mod", "theorem", "of_cones_iso", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "has_limits_of_shape", ["category_theory", "limits", "has_limits"]], ["add", "def", "has_limits", ["category_theory", "limits"]], ["mod", "theorem", "has_limits_of_shape_of_equivalence", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_size_shrink", ["category_theory", "limits"]], ["mod", "def", "lim_yoneda", ["category_theory", "limits"]], ["mod", "def", "hom_iso", ["category_theory", "limits", "limit"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "limit"]], ["mod", "theorem", "map_post", ["category_theory", "limits", "limit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/is_limit.lean", "newPath": "src/category_theory/limits/is_limit.lean", "changes": [["mod", "def", "hom_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "map_cocone_equiv", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "nat_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_cocone_equiv", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "of_cocone_equiv_apply_desc", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "of_cocone_equiv_symm_apply_desc", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_left_adjoint", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "hom_of_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["mod", "def", "of_nat_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "hom_iso", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_limit"]], ["mod", "def", "map_cone_equiv", ["category_theory", "limits", "is_limit"]], ["mod", "def", "nat_iso", ["category_theory", "limits", "is_limit"]], ["mod", "def", "of_cone_equiv", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "of_cone_equiv_apply_desc", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "of_cone_equiv_symm_apply_desc", ["category_theory", "limits", "is_limit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_limit"]], ["mod", "def", "hom_of_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["mod", "def", "of_nat_iso", ["category_theory", "limits", "is_limit"]], ["mod", "def", "of_right_adjoint", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["mod", "theorem", "has_colimits_op_of_has_limits", ["category_theory", "limits"]], ["mod", "theorem", "has_limits_op_of_has_colimits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "newPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "theorem", "map_comp_inl_inr_codiag", ["category_theory", "limits", "coprod"]], ["mod", "def", "has_binary_coproducts", ["category_theory", "limits"]], ["mod", "def", "has_binary_products", ["category_theory", "limits"]], ["mod", "def", "pair", ["category_theory", "limits"]], ["mod", "theorem", "diag_map_fst_snd_comp", ["category_theory", "limits", "prod"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["mod", "def", "has_coequalizers", ["category_theory", "limits"]], ["mod", "def", "has_equalizers", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["mod", "theorem", "has_finite_limits_of_has_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/normal_mono.lean", "newPath": "src/category_theory/limits/shapes/normal_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "def", "has_pullbacks", ["category_theory", "limits"]], ["mod", "def", "has_pushouts", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["mod", "def", "has_initial", ["category_theory", "limits"]], ["mod", "def", "has_terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_equalizers.lean", "newPath": "src/category_theory/limits/shapes/wide_equalizers.lean", "changes": [["mod", "def", "has_wide_coequalizers", ["category_theory", "limits"]], ["mod", "def", "has_wide_equalizers", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": []}, {"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["mod", "theorem", "coequalizer_is_open_iff", ["Top"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}]}, {"timestamp": 1637911219, "sha": "0b9d3320", "message": "feat(data/complex/basic): `of_real_injective` (#10464)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "of_real_injective", ["complex"]]]}]}, {"timestamp": 1637911218, "sha": "e742fce8", "message": "feat(data/nat/prime): `nat.{eq/ne}_one_iff` (#10463)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "eq_one_iff_not_exists_prime_dvd", ["nat"]], ["add", "theorem", "ne_one_iff_exists_prime_dvd", ["nat"]]]}]}, {"timestamp": 1637911217, "sha": "71bc7f41", "message": "feat(set_theory/ordinal_notation): nonote is well founded (#10462)", "changes": [{"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": [["add", "theorem", "wf", ["nonote"]]]}]}, {"timestamp": 1637911216, "sha": "cdb38195", "message": "feat(algebraic_geometry): `of_restrict` is mono. (#10460)", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}]}, {"timestamp": 1637911215, "sha": "757aa6f8", "message": "chore(data/stream): move most defs to a new file (#10458)", "changes": [{"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": [["del", "def", "take", ["stream"]]]}, {"oldPath": null, "newPath": "src/data/stream/defs.lean", "changes": [["add", "def", "all", ["stream"]], ["add", "def", "any", ["stream"]], ["add", "def", "append_stream", ["stream"]], ["add", "def", "apply", ["stream"]], ["add", "def", "approx", ["stream"]], ["add", "def", "cons", ["stream"]], ["add", "def", "const", ["stream"]], ["add", "def", "corec'", ["stream"]], ["add", "def", "corec", ["stream"]], ["add", "def", "corec_on", ["stream"]], ["add", "def", "cycle", ["stream"]], ["add", "def", "drop", ["stream"]], ["add", "def", "even", ["stream"]], ["add", "def", "head", ["stream"]], ["add", "def", "inits", ["stream"]], ["add", "def", "inits_core", ["stream"]], ["add", "def", "interleave", ["stream"]], ["add", "def", "iterate", ["stream"]], ["add", "def", "map", ["stream"]], ["add", "def", "nats", ["stream"]], ["add", "def", "nth", ["stream"]], ["add", "def", "odd", ["stream"]], ["add", "def", "pure", ["stream"]], ["add", "def", "tail", ["stream"]], ["add", "def", "tails", ["stream"]], ["add", "def", "take", ["stream"]], ["add", "def", "unfolds", ["stream"]], ["add", "def", "zip", ["stream"]], ["add", "def", "stream", []]]}, {"oldPath": "src/data/stream/init.lean", "newPath": "src/data/stream/init.lean", "changes": [["del", "def", "all", ["stream"]], ["del", "def", "any", ["stream"]], ["del", "def", "append_stream", ["stream"]], ["del", "def", "apply", ["stream"]], ["del", "def", "approx", ["stream"]], ["del", "def", "cons", ["stream"]], ["del", "def", "const", ["stream"]], ["del", "def", "corec'", ["stream"]], ["del", "def", "corec", ["stream"]], ["del", "def", "corec_on", ["stream"]], ["del", "def", "cycle", ["stream"]], ["del", "def", "drop", ["stream"]], ["del", "def", "even", ["stream"]], ["del", "def", "head", ["stream"]], ["del", "def", "inits", ["stream"]], ["del", "def", "inits_core", ["stream"]], ["del", "def", "interleave", ["stream"]], ["del", "def", "iterate", ["stream"]], ["del", "def", "map", ["stream"]], ["del", "def", "nats", ["stream"]], ["del", "def", "nth", ["stream"]], ["del", "def", "odd", ["stream"]], ["del", "def", "pure", ["stream"]], ["del", "def", "tail", ["stream"]], ["del", "def", "tails", ["stream"]], ["del", "def", "unfolds", ["stream"]], ["del", "def", "zip", ["stream"]], ["del", "def", "stream", []]]}]}, {"timestamp": 1637911214, "sha": "3dfa3496", "message": "feat(topology/uniform_space/completion) : add injective_coe (#10454)", "changes": [{"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["add", "theorem", "coe_injective", ["uniform_space", "completion"]]]}]}, {"timestamp": 1637911213, "sha": "cbe1d379", "message": "feat(ring_theory/valuation/basic): add valuation.map_zpow (#10453)", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "theorem", "map_zpow", ["valuation"]]]}]}, {"timestamp": 1637911212, "sha": "9249e1e6", "message": "chore(linear_algebra/affine_space/barycentric_coords): rename file `barycentric_coords` to `basis` (#10449)\nFollow up from https://github.com/leanprover-community/mathlib/pull/10320#discussion_r748936743", "changes": [{"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/basis.lean", "changes": []}]}, {"timestamp": 1637911211, "sha": "28d9a5b1", "message": "feat(data/equiv/basic): add lemmas characterising `equiv.Pi_congr` and `equiv.Pi_congr'` (#10432)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "Pi_congr'_apply", ["equiv"]], ["add", "theorem", "Pi_congr'_symm_apply_symm_apply", ["equiv"]], ["add", "theorem", "Pi_congr_apply_apply", ["equiv"]], ["add", "theorem", "Pi_congr_symm_apply", ["equiv"]], ["add", "theorem", "coe_Pi_congr'", ["equiv"]], ["add", "theorem", "coe_Pi_congr_symm", ["equiv"]]]}]}, {"timestamp": 1637909143, "sha": "be9b96e0", "message": "feat(computablility/halting): halting problem is r.e. (#10459)\nThis is a minor oversight from the original formalization, pointed out by Keji Neri.", "changes": [{"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": [["add", "theorem", "computable_iff_re_compl_re'", ["computable_pred"]], ["add", "theorem", "halting_problem_not_re", ["computable_pred"]], ["add", "theorem", "halting_problem_re", ["computable_pred"]], ["add", "theorem", "dom_re", ["partrec"]], ["add", "theorem", "of_eq", ["re_pred"]]]}]}, {"timestamp": 1637893930, "sha": "f55a284e", "message": "feat(topology): normal topological space with second countable topology is metrizable (#10402)\nAlso prove that a regular topological space with second countable topology is a normal space.", "changes": [{"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": [["add", "theorem", "extend_of_empty", ["function"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "bounded_image", ["bounded_continuous_function"]], ["mod", "theorem", "bounded_range", ["bounded_continuous_function"]], ["add", "theorem", "coe_injective", ["bounded_continuous_function"]], ["add", "theorem", "dist_eq_supr", ["bounded_continuous_function"]], ["add", "theorem", "dist_extend_extend", ["bounded_continuous_function"]], ["add", "def", "extend", ["bounded_continuous_function"]], ["add", "theorem", "extend_apply'", ["bounded_continuous_function"]], ["add", "theorem", "extend_apply", ["bounded_continuous_function"]], ["add", "theorem", "extend_comp", ["bounded_continuous_function"]], ["add", "theorem", "extend_of_empty", ["bounded_continuous_function"]], ["add", "theorem", "isometry_extend", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "union", ["metric", "bounded"]], ["mod", "theorem", "bounded_union", ["metric"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "embedding", ["isometry"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/metrizable.lean", "changes": [["add", "theorem", "exists_embedding_l_infty", ["topological_space"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "normal_space_of_regular_second_countable", []], ["add", "theorem", "exists_closure_subset", ["topological_space", "is_topological_basis"]], ["add", "theorem", "nhds_basis_closure", ["topological_space", "is_topological_basis"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "def", "replace_topology", ["uniform_space"]], ["add", "theorem", "replace_topology_eq", ["uniform_space"]]]}]}, {"timestamp": 1637864714, "sha": "ee71ddfe", "message": "feat(ring_theory/graded_algebra): definition of type class `graded_algebra` (#10115)\nThis is largely written by @eric-wieser. Thank you.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/graded_algebra/basic.lean", "changes": [["add", "theorem", "decompose'_def", ["graded_algebra"]], ["add", "def", "decompose", ["graded_algebra"]], ["add", "theorem", "decompose_symm_of", ["graded_algebra"]], ["add", "theorem", "is_internal", ["graded_ring"]]]}]}, {"timestamp": 1637856208, "sha": "644591fe", "message": "chore(algebra/group/basic): + 2 simp lemmas about `a - b` (#10478)", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "sub_add_cancel'", []]]}]}, {"timestamp": 1637842478, "sha": "7d8a1e07", "message": "feat(data/polynomial/eval): random `eval` lemmas (#10470)\nnote that the `geom_sum` import only adds the `geom_sum` file itself; all other files were imported already", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "one_geom_sum", []], ["mod", "theorem", "op_geom_sum", []], ["mod", "theorem", "op_geom_sum₂", []]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_dvd", ["polynomial"]], ["add", "theorem", "eval_eq_zero_of_dvd_of_eval_eq_zero", ["polynomial"]], ["add", "theorem", "eval_geom_sum", ["polynomial"]]]}]}, {"timestamp": 1637826780, "sha": "5b767aac", "message": "feat(measure_theory/integral/integral_eq_improper): weaken measurability assumptions (#10387)\nAs suggested by @fpvandoorn, this removes a.e. measurability assumptions which could be deduced from integrability assumptions. More of them could be removed assuming the codomain is a `borel_space` and not only an `open_measurable_space`, but I’m not sure wether or not it would be a good idea.", "changes": [{"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["add", "theorem", "ae_measurable", ["measure_theory", "ae_cover"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "restrict_congr_set", ["measure_theory", "measure"]], ["add", "theorem", "restrict_eq_self_of_ae_mem", ["measure_theory", "measure"]], ["add", "theorem", "restrict_mono_ae", ["measure_theory", "measure"]], ["del", "theorem", "restrict_congr_set", ["measure_theory"]], ["del", "theorem", "restrict_mono_ae", ["measure_theory"]]]}]}, {"timestamp": 1637809894, "sha": "7dfd7e8c", "message": "chore(scripts): update nolints.txt (#10484)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1637804431, "sha": "d04f5a55", "message": "feat(algebra/pointwise): lemmas about multiplication of finsets (#10455)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "coe_mul", ["finset"]], ["add", "theorem", "empty_mul", ["finset"]], ["mod", "theorem", "mem_mul", ["finset"]], ["mod", "theorem", "mul_card_le", ["finset"]], ["mod", "theorem", "mul_def", ["finset"]], ["add", "theorem", "mul_empty", ["finset"]], ["mod", "theorem", "mul_mem_mul", ["finset"]], ["add", "theorem", "mul_nonempty_iff", ["finset"]], ["add", "theorem", "mul_singleton_zero", ["finset"]], ["add", "theorem", "mul_subset_mul", ["finset"]], ["add", "theorem", "singleton_zero_mul", ["finset"]]]}]}, {"timestamp": 1637777936, "sha": "daf30fd7", "message": "feat(analysis/asymptotics): Generalize superpolynomial decay using limits instead of big O (#10296)\nThis PR generalizes the definition of `superpolynomial_decay` in terms of `filter.tendsto` instead of `asymptotics.is_O`.", "changes": [{"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": [["del", "theorem", "trans_superpolynomial_decay", ["asymptotics", "is_O"]], ["mod", "theorem", "add", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "algebra_map_mul", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "algebra_map_pow_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "congr'", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "congr", ["asymptotics", "superpolynomial_decay"]], ["mod", "theorem", "const_mul", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "eventually_le", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "eventually_mono", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "inv_param_mul", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "mono", ["asymptotics", "superpolynomial_decay"]], ["mod", "theorem", "mul", ["asymptotics", "superpolynomial_decay"]], ["mod", "theorem", "mul_const", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "mul_is_O", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "mul_is_O_polynomial", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul_param", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul_param_pow", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul_param_zpow", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul_polynomial", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "param_inv_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "param_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "param_pow_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "param_zpow_mul", ["asymptotics", "superpolynomial_decay"]], ["mod", "theorem", "polynomial_mul", ["asymptotics", "superpolynomial_decay"]], ["del", "theorem", "tendsto_zero", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "trans_abs_le", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "trans_eventually_abs_le", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "trans_eventually_le", ["asymptotics", "superpolynomial_decay"]], ["mod", "def", "superpolynomial_decay", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_const_iff", ["asymptotics"]], ["mod", "theorem", "superpolynomial_decay_const_mul_iff", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_const_mul_iff_of_ne_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_abs_is_bounded_under", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_abs_tendsto_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_is_O", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_iff_is_bounded_under", ["asymptotics"]], ["mod", "theorem", "superpolynomial_decay_iff_is_o", ["asymptotics"]], ["mod", "theorem", "superpolynomial_decay_iff_norm_tendsto_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_superpolynomial_decay_abs", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_superpolynomial_decay_norm", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_iff_tendsto_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_zpow_tendsto_zero", ["asymptotics"]], ["mod", "theorem", "superpolynomial_decay_mul_const_iff", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_mul_const_iff_of_ne_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_mul_param_iff", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_mul_param_pow_iff", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_of_eventually_is_O", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_of_is_O_zpow_le", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_of_is_O_zpow_lt", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_param_mul_iff", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_param_pow_mul_iff", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_zero'", ["asymptotics"]], ["mod", "theorem", "superpolynomial_decay_zero", ["asymptotics"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_ne_of_tendsto_at_bot", ["filter"]], ["add", "theorem", "eventually_ne_of_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "tendsto_zero_iff_abs_tendsto_zero", []]]}]}, {"timestamp": 1637765817, "sha": "18e55105", "message": "fix(tactic/cancel_denoms): remove debug code (#10434)\nThis code must not be used -- worth keeping, as it's a potentially useful function, but it shouldn't trace anything.", "changes": [{"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}]}, {"timestamp": 1637756682, "sha": "b29b9528", "message": "feat(measure_theory/group/fundamental_domain): prove equality of integrals (#10448)", "changes": [{"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": [["add", "theorem", "ae_measurable_comp_iff", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/group/fundamental_domain.lean", "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "theorem", "lintegral_eq_tsum_of_ac", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "measure_eq_tsum_of_ac", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "mono", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "set_lintegral_eq_tsum'", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "set_lintegral_eq_tsum", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "sum_restrict_of_ac", ["measure_theory", "is_fundamental_domain"]]]}]}, {"timestamp": 1637756681, "sha": "563f8c4f", "message": "feat(measure_theory/integral): dominated convergence for a series (#10398)", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "has_sum_integral_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "has_sum_integral_of_dominated_convergence", ["interval_integral"]], ["add", "theorem", "tendsto_integral_filter_of_dominated_convergence", ["interval_integral"]]]}]}, {"timestamp": 1637750563, "sha": "132833b7", "message": "refactor(algebra.abs): Introduce `has_pos_part` and `has_neg_part` classes (#10420)\nrefactor(algebra.abs): Introduce `has_pos_part` and `has_neg_part` classes", "changes": [{"oldPath": "src/algebra/abs.lean", "newPath": "src/algebra/abs.lean", "changes": []}, {"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": [["add", "theorem", "m_neg_part_def", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_pos_part_def", ["lattice_ordered_comm_group"]], ["del", "def", "mneg", ["lattice_ordered_comm_group"]], ["del", "def", "mpos", ["lattice_ordered_comm_group"]], ["mod", "theorem", "neg_eq_pos_inv", ["lattice_ordered_comm_group"]]]}]}, {"timestamp": 1637745826, "sha": "09b4bfc9", "message": "feat(linear_algebra/multilinear/basic): multilinear maps with respect to an empty family are all constant (#10433)\nThis seemingly-innocuous statement is valuable as a base case for induction.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "def", "const_linear_equiv_of_is_empty", ["multilinear_map"]], ["add", "theorem", "mk_coe", ["multilinear_map"]]]}]}, {"timestamp": 1637740161, "sha": "d487d650", "message": "refactor(topology,algebraic_geometry): use bundled maps here and there (#10447)\n* `opens.comap` now takes a `continuous_map` and returns a `preorder_hom`;\n* `prime_spectrum.comap` is now a bundled `continuous_map`.", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["mod", "def", "Top_map", ["algebraic_geometry", "Spec"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["mod", "def", "comap", ["prime_spectrum"]], ["del", "theorem", "comap_continuous", ["prime_spectrum"]], ["mod", "theorem", "comap_id", ["prime_spectrum"]], ["add", "theorem", "preimage_comap_zero_locus_aux", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "newPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "theorem", "coe_comap", ["topological_space", "opens"]], ["mod", "def", "comap", ["topological_space", "opens"]], ["mod", "theorem", "comap_id", ["topological_space", "opens"]], ["mod", "theorem", "comap_mono", ["topological_space", "opens"]], ["mod", "theorem", "comap_val", ["topological_space", "opens"]]]}]}, {"timestamp": 1637740160, "sha": "3590dc29", "message": "feat(topology/uniform_space/uniform_convergence): slightly generalize theorems (#10444)\n* add `protected` to some theorems;\n* assume `∀ᶠ n, continuous (F n)` instead of `∀ n, continuous (F n)`;\n* get rid of `F n` in lemmas like `continuous_within_at_of_locally_uniform_approx_of_continuous_within_at`; instead, assume that there exists a continuous `F` that approximates `f`.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["del", "theorem", "continuous_at", ["analytic_at"]], ["del", "theorem", "continuous_at", ["has_fpower_series_at"]], ["del", "theorem", "continuous_on", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["del", "theorem", "continuous_of_locally_uniform_approx_of_continuous", []], ["add", "theorem", "continuous_of_locally_uniform_approx_of_continuous_at", []], ["mod", "theorem", "continuous_of_uniform_approx_of_continuous", []], ["del", "theorem", "continuous_on_of_locally_uniform_approx_of_continuous_on", []], ["add", "theorem", "continuous_on_of_locally_uniform_approx_of_continuous_within_at", []], ["del", "theorem", "continuous", ["tendsto_locally_uniformly"]], ["del", "theorem", "continuous_on", ["tendsto_locally_uniformly_on"]], ["del", "theorem", "continuous", ["tendsto_uniformly"]], ["del", "theorem", "tendsto_locally_uniformly", ["tendsto_uniformly"]], ["del", "theorem", "tendsto_uniformly_on", ["tendsto_uniformly"]], ["del", "theorem", "continuous_on", ["tendsto_uniformly_on"]], ["del", "theorem", "tendsto_locally_uniformly_on", ["tendsto_uniformly_on"]]]}]}, {"timestamp": 1637740159, "sha": "8d07dbf4", "message": "feat(topology/sheaves): Generalized some lemmas. (#10440)\nGeneralizes some lemmas and explicitly stated that for `f` to be an iso on `U`, it suffices that the stalk map is an iso for all `x : U`.", "changes": [{"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "app_is_iso_of_stalk_functor_map_iso", ["Top", "presheaf"]]]}]}, {"timestamp": 1637740158, "sha": "a086daa5", "message": "chore(ring_theory/polynomial/cyclotomic): use `ratfunc` (#10421)", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["mod", "theorem", "cyclotomic_eq_prod_X_pow_sub_one_pow_moebius", ["polynomial"]]]}]}, {"timestamp": 1637740157, "sha": "6cb52e67", "message": "feat(category_theory/limits): Results about (co)limits in Top (#9985)\n- Provided the explicit topologies for limits and colimits, and specialized this result onto some shapes.\n- Provided the isomorphism between the (co)limits and the constructions in `topology/constructions.lean`.\n- Provided conditions about whether `prod.map` and `pullback_map` are inducing, embedding, etc.", "changes": [{"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["add", "theorem", "coequalizer_is_open_iff", ["Top"]], ["add", "theorem", "coinduced_of_is_colimit", ["Top"]], ["add", "theorem", "colimit_is_open_iff", ["Top"]], ["add", "theorem", "colimit_topology", ["Top"]], ["add", "theorem", "embedding_of_pullback_embeddings", ["Top"]], ["add", "theorem", "embedding_prod_map", ["Top"]], ["add", "theorem", "embedding_pullback_to_prod", ["Top"]], ["add", "theorem", "fst_embedding_of_right_embedding", ["Top"]], ["add", "theorem", "fst_iso_of_right_embedding_range_subset", ["Top"]], ["add", "theorem", "fst_open_embedding_of_right_open_embedding", ["Top"]], ["add", "theorem", "induced_of_is_limit", ["Top"]], ["add", "theorem", "inducing_prod_map", ["Top"]], ["add", "theorem", "inducing_pullback_to_prod", ["Top"]], ["add", "theorem", "limit_topology", ["Top"]], ["add", "theorem", "open_embedding_of_pullback_open_embeddings", ["Top"]], ["add", "def", "pi_fan", ["Top"]], ["add", "def", "pi_fan_is_limit", ["Top"]], ["add", "def", "pi_iso_pi", ["Top"]], ["add", "theorem", "pi_iso_pi_hom_apply", ["Top"]], ["add", "theorem", "pi_iso_pi_inv_π", ["Top"]], ["add", "theorem", "pi_iso_pi_inv_π_apply", ["Top"]], ["add", "def", "pi_π", ["Top"]], ["add", "def", "prod_binary_fan", ["Top"]], ["add", "def", "prod_binary_fan_is_limit", ["Top"]], ["add", "def", "prod_fst", ["Top"]], ["add", "def", "prod_iso_prod", ["Top"]], ["add", "theorem", "prod_iso_prod_hom_apply", ["Top"]], ["add", "theorem", "prod_iso_prod_hom_fst", ["Top"]], ["add", "theorem", "prod_iso_prod_hom_snd", ["Top"]], ["add", "theorem", "prod_iso_prod_inv_fst", ["Top"]], ["add", "theorem", "prod_iso_prod_inv_snd", ["Top"]], ["add", "def", "prod_snd", ["Top"]], ["add", "theorem", "prod_topology", ["Top"]], ["add", "def", "pullback_cone", ["Top"]], ["add", "def", "pullback_cone_is_limit", ["Top"]], ["add", "def", "pullback_fst", ["Top"]], ["add", "theorem", "pullback_fst_range", ["Top"]], ["add", "def", "pullback_iso_prod_subtype", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_hom_apply", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_hom_fst", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_hom_snd", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_fst", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_fst_apply", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_snd", ["Top"]], ["add", "theorem", "pullback_iso_prod_subtype_inv_snd_apply", ["Top"]], ["add", "theorem", "pullback_map_embedding_of_embeddings", ["Top"]], ["add", "theorem", "pullback_map_open_embedding_of_open_embeddings", ["Top"]], ["add", "def", "pullback_snd", ["Top"]], ["add", "theorem", "pullback_snd_range", ["Top"]], ["add", "theorem", "pullback_topology", ["Top"]], ["add", "theorem", "range_prod_map", ["Top"]], ["add", "theorem", "range_pullback_map", ["Top"]], ["add", "theorem", "range_pullback_to_prod", ["Top"]], ["add", "def", "sigma_cofan", ["Top"]], ["add", "def", "sigma_cofan_is_colimit", ["Top"]], ["add", "def", "sigma_iso_sigma", ["Top"]], ["add", "theorem", "sigma_iso_sigma_hom_ι", ["Top"]], ["add", "theorem", "sigma_iso_sigma_hom_ι_apply", ["Top"]], ["add", "theorem", "sigma_iso_sigma_inv_apply", ["Top"]], ["add", "def", "sigma_ι", ["Top"]], ["add", "theorem", "snd_embedding_of_left_embedding", ["Top"]], ["add", "theorem", "snd_iso_of_left_embedding_range_subset", ["Top"]], ["add", "theorem", "snd_open_embedding_of_left_open_embedding", ["Top"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}]}, {"timestamp": 1637736710, "sha": "d267b6ca", "message": "chore(topology): add 2 missing `inhabited` instances (#10446)\nAlso add an instance from `discrete_topology` to `topological_ring`.", "changes": [{"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}]}, {"timestamp": 1637723770, "sha": "1c001794", "message": "chore(scripts): update nolints.txt (#10445)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1637721183, "sha": "f578d1d6", "message": "feat(measure_theory): TC for smul-invariant measures (#10325)", "changes": [{"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": [["add", "theorem", "measure_preimage_emb", ["measure_theory", "measure_preserving"]]]}, {"oldPath": null, "newPath": "src/measure_theory/group/action.lean", "changes": [["add", "theorem", "is_locally_finite_measure_of_smul_invariant", ["measure_theory"]], ["add", "theorem", "map_smul", ["measure_theory"]], ["add", "theorem", "measure_eq_zero_iff_eq_empty_of_smul_invariant", ["measure_theory"]], ["add", "theorem", "measure_is_open_pos_of_smul_invariant_of_compact_ne_zero", ["measure_theory"]], ["add", "theorem", "measure_is_open_pos_of_smul_invariant_of_ne_zero", ["measure_theory"]], ["add", "theorem", "measure_pos_iff_nonempty_of_smul_invariant", ["measure_theory"]], ["add", "theorem", "measure_preimage_smul", ["measure_theory"]], ["add", "theorem", "measure_preserving_smul", ["measure_theory"]], ["add", "theorem", "measure_smul_set", ["measure_theory"]], ["add", "theorem", "smul_invariant_measure_tfae", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/group/fundamental_domain.lean", "changes": [["add", "structure", "is_add_fundamental_domain", ["measure_theory"]], ["add", "theorem", "Union_smul_ae_eq", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "measurable_set_smul", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "measure_eq_tsum'", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "measure_eq_tsum", ["measure_theory", "is_fundamental_domain"]], ["add", "theorem", "pairwise_ae_disjoint", ["measure_theory", "is_fundamental_domain"]], ["add", "structure", "is_fundamental_domain", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["mod", "theorem", "measure_Union_null_iff", ["measure_theory"]], ["add", "theorem", "measure_sUnion_null_iff", ["measure_theory"]]]}]}, {"timestamp": 1637707366, "sha": "0cbba1a4", "message": "feat(ring_theory/adjoin/basic): add adjoin_induction' and adjoin_adjoin_coe_preimage (#10427)\nFrom FLT-regular.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "closure_closure_coe_preimage", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "closure_closure_coe_preimage", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_induction'", ["submodule"]], ["add", "theorem", "span_span_coe_preimage", ["submodule"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_adjoin_coe_preimage", ["algebra"]], ["add", "theorem", "adjoin_induction'", ["algebra"]]]}]}, {"timestamp": 1637707365, "sha": "c192937f", "message": "feat(analysis): derivative of a parametric interval integral (#10404)", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/parametric_interval_integral.lean", "changes": [["add", "theorem", "has_deriv_at_integral_of_dominated_loc_of_deriv_le", ["interval_integral"]], ["add", "theorem", "has_deriv_at_integral_of_dominated_loc_of_lip", ["interval_integral"]], ["add", "theorem", "has_fderiv_at_integral_of_dominated_loc_of_lip", ["interval_integral"]], ["add", "theorem", "has_fderiv_at_integral_of_dominated_of_fderiv_le", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "measurable_set_interval_oc", []]]}]}, {"timestamp": 1637703282, "sha": "ac283c22", "message": "feat(data/nat/prime): some lemmas about prime factors (#10385)\nA few small lemmas about prime factors, for use in future PRs on prime factorisations and the Euler product formula for totient", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_count_eq_of_coprime_left", ["nat"]], ["add", "theorem", "factors_count_eq_of_coprime_right", ["nat"]], ["add", "theorem", "le_factors_count_mul_left", ["nat"]], ["add", "theorem", "le_factors_count_mul_right", ["nat"]], ["add", "theorem", "mem_factors_mul_left", ["nat"]], ["add", "theorem", "mem_factors_mul_right", ["nat"]], ["add", "theorem", "perm_factors_mul_of_coprime", ["nat"]], ["add", "theorem", "perm_factors_mul_of_pos", ["nat"]]]}]}, {"timestamp": 1637700639, "sha": "eb8b1b82", "message": "feat(linear_algebra/affine_space/barycentric_coords): characterise affine bases in terms of coordinate matrices (#10370)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["add", "theorem", "affine_independent_of_to_matrix_right_inv", ["affine_basis"]], ["add", "theorem", "affine_span_eq_top_of_to_matrix_left_inv", ["affine_basis"]], ["add", "theorem", "ext_elem", ["affine_basis"]], ["add", "theorem", "is_unit_to_matrix_iff", ["affine_basis"]], ["add", "theorem", "to_matrix_row_sum_one", ["affine_basis"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_independent_iff_eq_of_fintype_affine_combination_eq", []]]}]}, {"timestamp": 1637696874, "sha": "fb82d0a5", "message": "feat(data/mv_polynomial/basic): add a symmetric version of coeff_X_mul and generalize to monomials (#10429)", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "theorem", "support_single_mul", ["add_monoid_algebra"]], ["add", "theorem", "support_single_mul", ["monoid_algebra"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "coeff_X_mul'", ["mv_polynomial"]], ["add", "theorem", "coeff_X_mul", ["mv_polynomial"]], ["add", "theorem", "coeff_monomial_mul'", ["mv_polynomial"]], ["add", "theorem", "coeff_monomial_mul", ["mv_polynomial"]], ["add", "theorem", "coeff_mul_monomial'", ["mv_polynomial"]], ["add", "theorem", "coeff_mul_monomial", ["mv_polynomial"]], ["mod", "theorem", "map_alg_hom_coe_ring_hom", ["mv_polynomial"]], ["add", "theorem", "support_X_mul", ["mv_polynomial"]]]}]}, {"timestamp": 1637696873, "sha": "ba43124c", "message": "feat(category_theory/sites/*): Comparison lemma (#9785)", "changes": [{"oldPath": "src/category_theory/sites/cover_lifting.lean", "newPath": "src/category_theory/sites/cover_lifting.lean", "changes": [["mod", "theorem", "Ran_is_sheaf_of_cover_lifting", ["category_theory"]], ["add", "theorem", "comp_cover_lifting", ["category_theory"]], ["del", "def", "comp_cover_lifting", ["category_theory"]], ["mod", "structure", "cover_lifting", ["category_theory"]], ["add", "theorem", "id_cover_lifting", ["category_theory"]], ["del", "def", "id_cover_lifting", ["category_theory"]], ["add", "def", "copullback", ["category_theory", "sites"]], ["add", "def", "pullback_copullback_adjunction", ["category_theory", "sites"]]]}, {"oldPath": "src/category_theory/sites/dense_subsite.lean", "newPath": "src/category_theory/sites/dense_subsite.lean", "changes": [["add", "def", "Sheaf_equiv_of_cover_preserving_cover_lifting", ["category_theory", "cover_dense"]], ["add", "theorem", "compatible_preserving", ["category_theory", "cover_dense"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/induced_topology.lean", "changes": [["add", "def", "Sheaf_equiv", ["category_theory", "cover_dense"]], ["add", "def", "induced_topology", ["category_theory", "cover_dense"]], ["add", "theorem", "locally_cover_dense", ["category_theory", "cover_dense"]], ["add", "def", "induced_topology", ["category_theory", "locally_cover_dense"]], ["add", "theorem", "induced_topology_cover_lifting", ["category_theory", "locally_cover_dense"]], ["add", "theorem", "induced_topology_cover_preserving", ["category_theory", "locally_cover_dense"]], ["add", "theorem", "pushforward_cover_iff_cover_pullback", ["category_theory", "locally_cover_dense"]], ["add", "def", "locally_cover_dense", ["category_theory"]], ["add", "theorem", "over_forget_locally_cover_dense", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["mod", "theorem", "functor_pushforward_bot", ["category_theory", "sieve"]], ["add", "theorem", "functor_pushforward_top", ["category_theory", "sieve"]]]}]}, {"timestamp": 1637691664, "sha": "a779f6cf", "message": "feat(topology/algebra/ordered): convergent sequence is bounded above/below (#10424)\nAlso move lemmas `Ixx_mem_nhds` up to generalize them from\n`[linear_order α] [order_topology α]` to\n`[linear_order α] [order_closed_topology α]`.", "changes": [{"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "bdd_above_range", ["filter", "is_bounded_under"]], ["add", "theorem", "bdd_above_range_of_cofinite", ["filter", "is_bounded_under"]], ["add", "theorem", "bdd_below_range", ["filter", "is_bounded_under"]], ["add", "theorem", "bdd_below_range_of_cofinite", ["filter", "is_bounded_under"]], ["mod", "theorem", "not_is_bounded_under_of_tendsto_at_bot", ["filter"]], ["mod", "theorem", "not_is_bounded_under_of_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/liminf_limsup.lean", "newPath": "src/topology/algebra/ordered/liminf_limsup.lean", "changes": [["add", "theorem", "bdd_above_range", ["filter", "tendsto"]], ["add", "theorem", "bdd_above_range_of_cofinite", ["filter", "tendsto"]], ["add", "theorem", "bdd_below_range", ["filter", "tendsto"]], ["add", "theorem", "bdd_below_range_of_cofinite", ["filter", "tendsto"]]]}]}, {"timestamp": 1637691662, "sha": "1dd3ae1c", "message": "feat(algebra/big_operators/order): Bounding on a sum of cards by double counting (#10389)\nIf every element of `s` is in at least/most `n` finsets of `B : finset (finset α)`, then the sum of `(s ∩ t).card` over `t ∈ B` is at most/least `s.card * n`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "le_sum_card", ["finset"]], ["add", "theorem", "le_sum_card_inter", ["finset"]], ["add", "theorem", "sum_card", ["finset"]], ["add", "theorem", "sum_card_inter", ["finset"]], ["add", "theorem", "sum_card_inter_le", ["finset"]], ["add", "theorem", "sum_card_le", ["finset"]]]}]}, {"timestamp": 1637686165, "sha": "b14f22e9", "message": "chore(algebra/algebra and group_theory/group_action): move a lemma (#10425)\nMove a lemma about the action of a group on the units of a monoid\nto a more appropriate place. It accidentally ended up in\n`algebra/algebra/spectrum` but a better place is\n`group_theory/group_action/units`.", "changes": [{"oldPath": "src/algebra/algebra/spectrum.lean", "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["del", "theorem", "smul_iff", ["is_unit"]]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "theorem", "is_unit_smul_iff", []]]}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": [["add", "theorem", "smul", ["is_unit"]]]}]}, {"timestamp": 1637686164, "sha": "7c4f395a", "message": "feat(measure_theory): add `is_R_or_C.measurable_space` (#10417)\nDon't remove specific instances because otherwise Lean fails to generate `borel_space (ι → ℝ)`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "theorem", "const_inner", ["measure_theory", "ae_measurable'"]], ["mod", "theorem", "norm_condexp_L2_le_one", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "of_real", ["measure_theory", "integrable"]], ["mod", "theorem", "re_im_iff", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions.lean", "newPath": "src/measure_theory/function/special_functions.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "continuous_integral_comp_L1", ["continuous_linear_map"]], ["mod", "def", "Lp_to_Lp_restrict_clm", ["measure_theory"]], ["mod", "theorem", "Lp_to_Lp_restrict_clm_coe_fn", ["measure_theory"]], ["mod", "theorem", "Lp_to_Lp_restrict_smul", ["measure_theory"]]]}]}, {"timestamp": 1637686163, "sha": "a1338d62", "message": "feat(linear_algebra/affine_space/barycentric_coords): affine bases exist over fields (#10333)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["add", "theorem", "exists_affine_basis", ["affine_basis"]], ["add", "theorem", "exists_affine_basis_of_finite_dimensional", ["affine_basis"]]]}]}, {"timestamp": 1637686162, "sha": "7a6e6d8b", "message": "feat(group_theory/schur_zassenhaus): Prove the full Schur-Zassenhaus theorem (#10283)\nPreviously, the Schur-Zassenhaus theorem was only proved for abelian normal subgroups. This PR removes the abelian assumption.", "changes": [{"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": [["mod", "theorem", "exists_left_complement'_of_coprime", ["subgroup"]], ["add", "theorem", "exists_left_complement'_of_coprime_of_fintype", ["subgroup"]], ["mod", "theorem", "exists_right_complement'_of_coprime", ["subgroup"]], ["add", "theorem", "exists_right_complement'_of_coprime_of_fintype", ["subgroup"]], ["add", "theorem", "step7", ["subgroup", "schur_zassenhaus_induction"]]]}]}, {"timestamp": 1637686161, "sha": "97186fe6", "message": "feat(combinatorics): Hindman's theorem on finite sums (#10029)\nA short proof of Hindman's theorem using idempotent ultrafilters.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/hindman.lean", "changes": [["add", "theorem", "finset_prod", ["hindman", "FP"]], ["add", "theorem", "mul", ["hindman", "FP"]], ["add", "theorem", "mul_two", ["hindman", "FP"]], ["add", "theorem", "singleton", ["hindman", "FP"]], ["add", "inductive", "FP", ["hindman"]], ["add", "theorem", "FP_drop_subset_FP", ["hindman"]], ["add", "theorem", "FP_partition_regular", ["hindman"]], ["add", "inductive", "FS", ["hindman"]], ["add", "theorem", "exists_FP_of_finite_cover", ["hindman"]], ["add", "theorem", "exists_FP_of_large", ["hindman"]], ["add", "theorem", "exists_idempotent_ultrafilter_le_FP", ["hindman"]], ["add", "structure", "on", []], ["add", "theorem", "continuous_mul_left", ["ultrafilter"]], ["add", "theorem", "eventually_mul", ["ultrafilter"]], ["add", "def", "has_mul", ["ultrafilter"]], ["add", "def", "semigroup", ["ultrafilter"]]]}, {"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": [["add", "theorem", "head_drop", ["stream"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/semigroup.lean", "changes": [["add", "theorem", "exists_idempotent_in_compact_subsemigroup", []], ["add", "theorem", "exists_idempotent_of_compact_t2_of_continuous_mul_left", []]]}]}, {"timestamp": 1637679970, "sha": "050482cb", "message": "doc(measure_theory/decomposition/jordan): typo (#10430)", "changes": [{"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}]}, {"timestamp": 1637679968, "sha": "53bd9d73", "message": "feat(field_theory): generalize `ratfunc K` to `comm_ring K`/`is_domain K` (#10428)\nFixes one of the TODO's from the original ratfunc PR: apply all the easy generalizations where `K` doesn't need to be a field, only a `is_domain K` or even just `comm_ring K`.\nThis would allow us to use `ratfunc` in #10421.", "changes": [{"oldPath": "src/field_theory/ratfunc.lean", "newPath": "src/field_theory/ratfunc.lean", "changes": []}]}, {"timestamp": 1637679967, "sha": "79582514", "message": "doc(field_theory/abel_ruffini): update module doc (#10426)", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}]}, {"timestamp": 1637679966, "sha": "2b754933", "message": "refactor(algebra.group.basic): Convert sub_add_cancel and neg_sub to multaplicative form (#10419)\nCurrently mathlib has a rich set of lemmas connecting the addition, subtraction and negation additive group operations, but a far thinner collection of results for multiplication, division and inverse multiplicative group operations, despite the fact that the former can be generated easily from the latter via `to_additive`.\nIn #9548 I require multiplicative forms of the existing `sub_add_cancel` and `neg_sub` lemmas. This PR refactors them as the equivalent multiplicative results and then recovers `sub_add_cancel` and `neg_sub` via `to_additive`. There is a complication in that unfortunately `group_with_zero` already has lemmas named `inv_div` and `div_mul_cancel`. I have worked around this by naming the lemmas in this PR `inv_div'` and `div_mul_cancel'` and then manually overriding the names generated by `to_additive`. Other suggestions as to how to approach this welcome.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_mul_cancel'", []], ["add", "theorem", "inv_div'", []], ["del", "theorem", "neg_sub", []], ["del", "theorem", "sub_add_cancel", []]]}]}, {"timestamp": 1637679964, "sha": "d0e454ac", "message": "feat(logic/function/basic): add `function.{in,sur,bi}jective.comp_left` (#10406)\nAs far as I can tell we don't have these variations.\nNote that the `surjective` and `bijective` versions do not appear next to the other composition statements, as they require `surj_inv` to concisely prove.", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "comp_left", ["function", "bijective"]], ["add", "theorem", "comp_left", ["function", "injective"]], ["add", "theorem", "comp_left", ["function", "surjective"]]]}]}, {"timestamp": 1637673115, "sha": "d9e40b44", "message": "chore(measure_theory/integral): generalize `interval_integral.norm_integral_le_integral_norm` (#10412)\nIt was formulated only for functions `f : α → ℝ`; generalize to `f : α → E`.", "changes": [{"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "norm_integral_le_integral_norm", ["interval_integral"]]]}]}, {"timestamp": 1637673114, "sha": "28177886", "message": "chore(measure_theory/integral): add `integrable_const` for `interval_integral` (#10410)", "changes": [{"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["mod", "theorem", "integrable_on_const", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "interval_integrable_const", []], ["add", "theorem", "interval_integrable_const_iff", []]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}]}, {"timestamp": 1637673113, "sha": "3b137447", "message": "chore(measure_theory/integral): more versions of `integral_finset_sum` (#10394)\n* fix assumptions in existing lemmas (`∀ i ∈ s` instead of `∀ i`);\n* add a version for interval integrals.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "integral_finset_sum", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "integral_finset_sum", ["interval_integral"]]]}]}, {"timestamp": 1637673112, "sha": "2ec6de7d", "message": "feat(topology/connected): sufficient conditions for the preimage of a connected set to be connected (#10289)\nand other simple connectedness results", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage'", ["set", "nonempty"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "subset_left_of_subset_union", ["disjoint"]], ["add", "theorem", "subset_right_of_subset_union", ["disjoint"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "preimage_of_closed_map", ["is_connected"]], ["add", "theorem", "preimage_of_open_map", ["is_connected"]], ["add", "theorem", "preimage_of_closed_map", ["is_preconnected"]], ["add", "theorem", "preimage_of_open_map", ["is_preconnected"]], ["add", "theorem", "subset_left_of_subset_union", ["is_preconnected"]], ["add", "theorem", "subset_or_subset", ["is_preconnected"]], ["add", "theorem", "subset_right_of_subset_union", ["is_preconnected"]]]}]}, {"timestamp": 1637673110, "sha": "e8386bd4", "message": "feat(group_theory/exponent): Define the exponent of a group (#10249)\nThis PR provides the definition and some very basic API for the exponent of a group/monoid.", "changes": [{"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": [["add", "theorem", "lcm_eq_zero_iff", ["finset"]]]}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": [["add", "theorem", "lcm_eq_zero_iff", ["multiset"]]]}, {"oldPath": null, "newPath": "src/group_theory/exponent.lean", "changes": [["add", "theorem", "exp_eq_one_of_subsingleton", ["monoid"]], ["add", "theorem", "exponent_dvd_of_forall_pow_eq_one", ["monoid"]], ["add", "def", "exponent_exists", ["monoid"]], ["add", "theorem", "exponent_min'", ["monoid"]], ["add", "theorem", "exponent_min", ["monoid"]], ["add", "theorem", "exponent_pos_of_exists", ["monoid"]], ["add", "theorem", "lcm_order_eq_exponent", ["monoid"]], ["add", "theorem", "lcm_order_of_dvd_exponent", ["monoid"]], ["add", "theorem", "order_dvd_exponent", ["monoid"]], ["add", "theorem", "pow_eq_mod_exponent", ["monoid"]], ["add", "theorem", "pow_exponent_eq_one", ["monoid"]]]}]}, {"timestamp": 1637673108, "sha": "cf917732", "message": "refactor(*): split `order_{top,bot}` from `lattice` hierarchy (#9891)\nRename `bounded_lattice` to `bounded_order`.\nSplit out `order_{top,bot}` and `bounded_order` from the order hierarchy.\nThat means that we no longer have `semilattice_{sup,inf}_{top,bot}`, but use the `[order_top]` as a mixin to `semilattice_inf`, for example.\nSimilarly, `lattice` and `bounded_order` instead of what was before `bounded_lattice`.\nSimilarly, `distrib_lattice` and `bounded_order` instead of what was before `bounded_distrib_lattice`.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/filter.lean", "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": [["mod", "theorem", "coprod_eq_sup", ["category_theory", "limits", "complete_lattice"]], ["mod", "def", "finite_colimit_cocone", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "finite_colimit_eq_finset_univ_sup", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "finite_coproduct_eq_finset_sup", ["category_theory", "limits", "complete_lattice"]], ["mod", "def", "finite_limit_cone", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "finite_limit_eq_finset_univ_inf", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "finite_product_eq_finset_inf", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "prod_eq_inf", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "pullback_eq_inf", ["category_theory", "limits", "complete_lattice"]], ["mod", "theorem", "pushout_eq_sup", ["category_theory", "limits", "complete_lattice"]]]}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": [["add", "theorem", "le_def", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": [["add", "theorem", "le_def", ["category_theory", "pretopology"]]]}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "comp_inf_eq_inf_comp", ["finset"]], ["mod", "theorem", "comp_inf_eq_inf_comp_of_is_total", ["finset"]], ["mod", "theorem", "comp_sup_eq_sup_comp", ["finset"]], ["mod", "theorem", "comp_sup_eq_sup_comp_of_is_total", ["finset"]], ["mod", "theorem", "disjoint_sup_left", ["finset"]], ["mod", "theorem", "disjoint_sup_right", ["finset"]], ["mod", "theorem", "sup_finset_image", ["finset"]], ["mod", "theorem", "sup_le_of_le_directed", ["finset"]]]}, {"oldPath": "src/data/finset/pairwise.lean", "newPath": "src/data/finset/pairwise.lean", "changes": [["mod", "theorem", "image_finset_of_le", ["set", "pairwise_disjoint"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": [["mod", "theorem", "support_sup", ["finsupp"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Icc_bot_top", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["mod", "theorem", "pairwise_disjoint_on", []], ["mod", "theorem", "pairwise_disjoint_on_bool", []]]}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "finset_sup_apply", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "le_def", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": [["add", "theorem", "le_def", ["measurable_space", "dynkin_system"]]]}, {"oldPath": "src/measure_theory/probability_mass_function/basic.lean", "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["mod", "theorem", "disjoint_of_ne", ["is_atom"]], ["mod", "theorem", "inf_eq_bot_of_ne", ["is_atom"]], ["mod", "theorem", "is_atom_dual_iff_is_coatom", []], ["mod", "theorem", "sup_eq_top_of_ne", ["is_coatom"]], ["mod", "theorem", "is_coatom_dual_iff_is_atom", []], ["mod", "theorem", "is_simple_lattice_iff_is_atom_top", []], ["mod", "theorem", "is_simple_lattice_iff_is_coatom_bot", []], ["mod", "theorem", "is_simple_lattice_iff_is_simple_lattice_order_dual", []], ["mod", "theorem", "is_atom_iff", ["order_iso"]], ["mod", "theorem", "is_atomic_iff", ["order_iso"]], ["mod", "theorem", "is_coatom_iff", ["order_iso"]], ["mod", "theorem", "is_coatomic_iff", ["order_iso"]], ["mod", "theorem", "is_simple_lattice", ["order_iso"]], ["mod", "theorem", "is_simple_lattice_iff", ["order_iso"]], ["mod", "theorem", "is_simple_lattice_Ici_iff_is_coatom", ["set"]], ["mod", "theorem", "is_simple_lattice_Iic_iff_is_atom", ["set"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "le_def", ["pi"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "def", "sdiff", ["boolean_algebra", "core"]], ["add", "theorem", "sdiff_eq", ["boolean_algebra", "core"]], ["mod", "theorem", "compl_apply", ["pi"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_order.lean", "changes": [["del", "theorem", "ext", ["bounded_lattice"]], ["add", "theorem", "ext", ["bounded_order"]], ["mod", "theorem", "eq_bot_of_bot_eq_top", []], ["mod", "theorem", "eq_top_of_bot_eq_top", []], ["add", "theorem", "inf_eq_bot_iff_le_compl", []], ["mod", "structure", "is_compl", []], ["mod", "theorem", "is_compl_bot_top", []], ["mod", "theorem", "is_compl_top_bot", []], ["mod", "theorem", "ext", ["order_bot"]], ["mod", "theorem", "ext_bot", ["order_bot"]], ["mod", "theorem", "ext", ["order_top"]], ["mod", "theorem", "subsingleton_iff_bot_eq_top", []], ["mod", "theorem", "subsingleton_of_bot_eq_top", []], ["mod", "theorem", "subsingleton_of_top_le_bot", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/copy.lean", "newPath": "src/order/copy.lean", "changes": [["del", "def", "copy", ["bounded_lattice"]], ["add", "def", "copy", ["bounded_order"]], ["add", "def", "copy", ["lattice"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["del", "def", "lift_bounded_lattice", ["galois_coinsertion"]], ["add", "def", "lift_bounded_order", ["galois_coinsertion"]], ["del", "def", "lift_bounded_lattice", ["galois_insertion"]], ["add", "def", "lift_bounded_order", ["galois_insertion"]]]}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": [["del", "def", "bounded_lattice", ["set", "Icc"]], ["add", "def", "bounded_order", ["set", "Icc"]], ["mod", "def", "order_bot", ["set", "Icc"]], ["mod", "def", "order_top", ["set", "Icc"]], ["del", "def", "semilattice_inf_bot", ["set", "Icc"]], ["del", "def", "semilattice_inf_top", ["set", "Icc"]], ["del", "def", "semilattice_sup_bot", ["set", "Icc"]], ["del", "def", "semilattice_sup_top", ["set", "Icc"]], ["del", "def", "semilattice_inf_bot", ["set", "Ico"]], ["del", "def", "semilattice_sup_top", ["set", "Ioc"]]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": [["mod", "theorem", "partial_sups_disjoint_of_disjoint", []], ["mod", "theorem", "partial_sups_eq_sup_range", []]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "map_order_iso", ["disjoint"]], ["mod", "theorem", "disjoint_map_order_iso_iff", []]]}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": []}, {"oldPath": "src/order/sup_indep.lean", "newPath": "src/order/sup_indep.lean", "changes": [["mod", "theorem", "bUnion", ["finset", "sup_indep"]], ["mod", "theorem", "sup", ["finset", "sup_indep"]], ["mod", "theorem", "sup_indep_iff_pairwise_disjoint", ["finset"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["mod", "theorem", "nhds_bot_basis", []], ["mod", "theorem", "nhds_bot_basis_Iic", []], ["mod", "theorem", "nhds_top_basis", []], ["mod", "theorem", "nhds_top_basis_Ici", []]]}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "test/transport/basic.lean", "newPath": "test/transport/basic.lean", "changes": [["add", "def", "map", ["sup"]], ["del", "def", "map", ["sup_top"]]]}]}, {"timestamp": 1637668158, "sha": "3fee4b9b", "message": "chore(control/random): Move from `system.random.basic` (#10408)\nThe top folder `system` contains a single file, apparently because it mimics Lean core's organisation. This moves it under `control.` and gets rid of one top folder.", "changes": [{"oldPath": "src/system/random/basic.lean", "newPath": "src/control/random.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}, {"oldPath": "test/random.lean", "newPath": "test/random.lean", "changes": []}]}, {"timestamp": 1637668156, "sha": "b1a9c2e4", "message": "feat(analysis/normed_space/multilinear): add `norm_mk_pi_field` (#10396)\nAlso upgrade the corresponding equivalence to a `linear_isometry`.", "changes": [{"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "self_comp_symm", ["linear_isometry_equiv"]], ["add", "theorem", "symm_comp_self", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "norm_mk_pi_field", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1637668155, "sha": "87b0084b", "message": "chore(field_theory/separable): generalize theorems (#10337)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["mod", "theorem", "not_is_unit_X_sub_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "separable", ["irreducible"]], ["mod", "theorem", "coeff_contract", ["polynomial"]], ["add", "theorem", "contract_expand", ["polynomial"]], ["mod", "theorem", "count_roots_le_one", ["polynomial"]], ["mod", "theorem", "eq_X_sub_C_of_separable_of_root_eq", ["polynomial"]], ["mod", "theorem", "exists_separable_of_irreducible", ["polynomial"]], ["mod", "theorem", "expand_char", ["polynomial"]], ["mod", "theorem", "expand_contract", ["polynomial"]], ["add", "theorem", "expand_zero", ["polynomial"]], ["mod", "theorem", "is_unit_or_eq_zero_of_separable_expand", ["polynomial"]], ["mod", "theorem", "map_expand_pow_char", ["polynomial"]], ["mod", "theorem", "multiplicity_le_one_of_separable", ["polynomial"]], ["mod", "theorem", "nodup_of_separable_prod", ["polynomial"]], ["mod", "theorem", "nodup_roots", ["polynomial"]], ["del", "theorem", "not_unit_X_sub_C", ["polynomial"]], ["mod", "theorem", "of_irreducible_expand", ["polynomial"]], ["mod", "theorem", "of_irreducible_expand_pow", ["polynomial"]], ["mod", "theorem", "root_multiplicity_le_one_of_separable", ["polynomial"]], ["mod", "theorem", "squarefree", ["polynomial", "separable"]], ["mod", "theorem", "separable_X_pow_sub_C_unit", ["polynomial"]], ["add", "theorem", "separable_of_subsingleton", ["polynomial"]], ["del", "theorem", "squarefree_X_pow_sub_C", ["polynomial"]], ["mod", "theorem", "unique_separable_of_irreducible", ["polynomial"]]]}, {"oldPath": "src/field_theory/separable_degree.lean", "newPath": "src/field_theory/separable_degree.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1637668154, "sha": "9cf6766f", "message": "feat(order/filter/pi): define `filter.pi` and prove some properties (#10323)", "changes": [{"oldPath": "src/analysis/box_integral/box/subbox_induction.lean", "newPath": "src/analysis/box_integral/box/subbox_induction.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["del", "theorem", "ae_pi_le_infi_comap", ["measure_theory", "measure"]], ["add", "theorem", "ae_pi_le_pi", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "Coprod_mono", ["filter"]], ["del", "theorem", "Coprod_ne_bot", ["filter"]], ["del", "theorem", "Coprod_ne_bot_iff'", ["filter"]], ["del", "theorem", "Coprod_ne_bot_iff", ["filter"]], ["del", "theorem", "compl_mem_Coprod_iff", ["filter"]], ["del", "theorem", "map_pi_map_Coprod_le", ["filter"]], ["del", "theorem", "mem_Coprod_iff", ["filter"]], ["del", "theorem", "Coprod", ["filter", "ne_bot"]], ["del", "theorem", "pi_map_Coprod", ["filter", "tendsto"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/filter/pi.lean", "changes": [["add", "theorem", "Coprod_mono", ["filter"]], ["add", "theorem", "Coprod_ne_bot", ["filter"]], ["add", "theorem", "Coprod_ne_bot_iff'", ["filter"]], ["add", "theorem", "Coprod_ne_bot_iff", ["filter"]], ["add", "theorem", "compl_mem_Coprod_iff", ["filter"]], ["add", "theorem", "le_pi", ["filter"]], ["add", "theorem", "map_pi_map_Coprod_le", ["filter"]], ["add", "theorem", "mem_Coprod_iff", ["filter"]], ["add", "theorem", "mem_of_pi_mem_pi", ["filter"]], ["add", "theorem", "mem_pi'", ["filter"]], ["add", "theorem", "mem_pi", ["filter"]], ["add", "theorem", "mem_pi_of_mem", ["filter"]], ["add", "theorem", "Coprod", ["filter", "ne_bot"]], ["add", "def", "pi", ["filter"]], ["add", "theorem", "pi_eq_bot", ["filter"]], ["add", "theorem", "pi_inf_principal_pi_eq_bot", ["filter"]], ["add", "theorem", "pi_inf_principal_pi_ne_bot", ["filter"]], ["add", "theorem", "pi_inf_principal_univ_pi_eq_bot", ["filter"]], ["add", "theorem", "pi_inf_principal_univ_pi_ne_bot", ["filter"]], ["add", "theorem", "pi_mem_pi", ["filter"]], ["add", "theorem", "pi_mem_pi_iff", ["filter"]], ["add", "theorem", "pi_mono", ["filter"]], ["add", "theorem", "pi_ne_bot", ["filter"]], ["add", "theorem", "pi_map_Coprod", ["filter", "tendsto"]], ["add", "theorem", "tendsto_eval_pi", ["filter"]], ["add", "theorem", "tendsto_pi", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/monotone_convergence.lean", "newPath": "src/topology/algebra/ordered/monotone_convergence.lean", "changes": []}, {"oldPath": "src/topology/algebra/weak_dual_topology.lean", "newPath": "src/topology/algebra/weak_dual_topology.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "interior_pi_set", []], ["add", "theorem", "mem_nhds_of_pi_mem_nhds", []], ["del", "theorem", "mem_nhds_pi", []], ["mod", "theorem", "set_pi_mem_nhds_iff", []], ["del", "theorem", "tendsto_pi", []], ["add", "theorem", "tendsto_pi_nhds", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["del", "theorem", "nhds_within_pi_univ_eq_bot", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}]}, {"timestamp": 1637668153, "sha": "33ea4012", "message": "feat(linear_algebra/affine_space/barycentric_coords): barycentric coordinates are ratio of determinants (#10320)\nThe main goal of this PR is the new lemma `affine_basis.det_smul_coords_eq_camer_coords`\nA secondary goal is a minor refactor of barycentric coordinates so that they are associated to a new structure `affine_basis`. As well as making the API for affine spaces more similar to that of modules, this enables an extremely useful dot notation.\nThe work here could easily be split into two PRs and I will happily do so if requested.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["mod", "theorem", "convex_hull_affine_basis_eq_nonneg_barycentric", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["mod", "theorem", "continuous_barycentric_coord", []]]}, {"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["add", "theorem", "affine_combination_coord_eq_self", ["affine_basis"]], ["add", "theorem", "basis_of_apply", ["affine_basis"]], ["add", "theorem", "coe_coord_of_subsingleton_eq_one", ["affine_basis"]], ["add", "theorem", "coord_apply", ["affine_basis"]], ["add", "theorem", "coord_apply_combination_of_mem", ["affine_basis"]], ["add", "theorem", "coord_apply_combination_of_not_mem", ["affine_basis"]], ["add", "theorem", "coord_apply_eq", ["affine_basis"]], ["add", "theorem", "coord_apply_neq", ["affine_basis"]], ["add", "theorem", "coords_apply", ["affine_basis"]], ["add", "theorem", "det_smul_coords_eq_cramer_coords", ["affine_basis"]], ["add", "theorem", "is_unit_to_matrix", ["affine_basis"]], ["add", "theorem", "sum_coord_apply_eq_one", ["affine_basis"]], ["add", "theorem", "surjective_coord", ["affine_basis"]], ["add", "theorem", "to_matrix_apply", ["affine_basis"]], ["add", "theorem", "to_matrix_inv_vec_mul_to_matrix", ["affine_basis"]], ["add", "theorem", "to_matrix_mul_to_matrix", ["affine_basis"]], ["add", "theorem", "to_matrix_self", ["affine_basis"]], ["add", "theorem", "to_matrix_vec_mul_coords", ["affine_basis"]], ["add", "structure", "affine_basis", []], ["del", "theorem", "affine_combination_barycentric_coord_eq_self", []], ["del", "theorem", "barycentric_coord_apply", []], ["del", "theorem", "barycentric_coord_apply_combination_of_mem", []], ["del", "theorem", "barycentric_coord_apply_combination_of_not_mem", []], ["del", "theorem", "barycentric_coord_apply_eq", []], ["del", "theorem", "barycentric_coord_apply_neq", []], ["del", "theorem", "basis_of_aff_ind_span_eq_top_apply", []], ["del", "theorem", "coe_barycentric_coord_of_subsingleton_eq_one", []], ["del", "theorem", "sum_barycentric_coord_apply_eq_one", []], ["del", "theorem", "surjective_barycentric_coord", []]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["add", "theorem", "cramer_transpose_apply", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "det_smul_inv_vec_mul_eq_cramer_transpose", ["matrix"]]]}]}, {"timestamp": 1637668152, "sha": "d94772bb", "message": "feat(algebra/big_operators/finprod): add finprod_div_distrib and finsum_sub_distrib (#10044)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_div_distrib", []], ["add", "theorem", "finprod_mem_div_distrib", []], ["add", "theorem", "finprod_mem_inv_distrib", []], ["add", "theorem", "map_finprod_mem", ["mul_equiv"]]]}]}, {"timestamp": 1637660313, "sha": "ac712929", "message": "chore(measure_theory/integral): generalize `integral_smul_const` (#10411)\n* generalize to `is_R_or_C`;\n* add an `interval_integral` version.", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["del", "theorem", "integral_const_mul", ["interval_integral"]], ["del", "theorem", "integral_div", ["interval_integral"]], ["del", "theorem", "integral_mul_const", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "integral_const_mul", ["interval_integral"]], ["add", "theorem", "integral_div", ["interval_integral"]], ["add", "theorem", "integral_mul_const", ["interval_integral"]], ["add", "theorem", "integral_smul_const", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "integral_smul_const", []]]}]}, {"timestamp": 1637660312, "sha": "8f681f12", "message": "chore(data/complex): add a few simp lemmas (#10395)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "abs_pow", ["complex"]], ["add", "theorem", "abs_zpow", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "abs_cos_add_sin_mul_I", ["complex"]], ["add", "theorem", "abs_exp_of_real_mul_I", ["complex"]]]}]}, {"timestamp": 1637660311, "sha": "4d5d7708", "message": "feat(data/complex/exponential): Add lemma add_one_le_exp (#10358)\nThis PR resolves https://github.com/leanprover-community/mathlib/blob/master/src/data/complex/exponential.lean#L1140", "changes": [{"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "add_one_le_exp", ["real"]], ["add", "theorem", "add_one_le_exp_of_nonpos", ["real"]], ["add", "theorem", "exp_bound'", ["real"]], ["add", "theorem", "exp_bound_div_one_sub_of_interval", ["real"]], ["add", "theorem", "exp_bound_div_one_sub_of_interval_approx", ["real"]], ["add", "theorem", "one_sub_le_exp_minus_of_pos", ["real"]]]}]}, {"timestamp": 1637652185, "sha": "6050f9df", "message": "feat(algebraic_geometry, category_theory): SheafedSpace has colimits (#10401)", "changes": [{"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "def", "creates_colimit_of_fully_faithful_of_iso", ["category_theory"]], ["add", "def", "creates_colimit_of_fully_faithful_of_lift", ["category_theory"]]]}, {"oldPath": "src/topology/sheaves/limits.lean", "newPath": "src/topology/sheaves/limits.lean", "changes": [["add", "theorem", "is_sheaf_of_is_limit", ["Top"]], ["add", "theorem", "limit_is_sheaf", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": [["add", "def", "Sheaf_spaces_equiv_sheaf_sites", ["Top", "presheaf"]], ["add", "def", "Sheaf_spaces_equiv_sheaf_sites_functor_forget", ["Top", "presheaf"]], ["add", "def", "Sheaf_spaces_equiv_sheaf_sites_inverse_forget", ["Top", "presheaf"]], ["del", "def", "Sheaf_spaces_equivelence_sheaf_sites", ["Top", "presheaf"]]]}]}, {"timestamp": 1637652184, "sha": "ca7347c4", "message": "refactor(ring_theory/sub[semi]ring): move pointwise instances to their own file (#10347)\nThis matches how we have separate pointwise files for `submonoid` and `subgroup`.\nAll the new lemmas are direct copies of the subgroup lemmas.", "changes": [{"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/char_p/subring.lean", "newPath": "src/algebra/char_p/subring.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "theorem", "coe_pointwise_smul", ["subring"]], ["del", "theorem", "pointwise_smul_to_add_subgroup", ["subring"]], ["del", "theorem", "pointwise_smul_to_subsemiring", ["subring"]], ["del", "theorem", "smul_mem_pointwise_smul", ["subring"]], ["del", "theorem", "coe_pointwise_smul", ["subsemiring"]], ["del", "theorem", "pointwise_smul_to_add_submonoid", ["subsemiring"]], ["del", "theorem", "smul_mem_pointwise_smul", ["subsemiring"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/subring/pointwise.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["subring"]], ["add", "theorem", "le_pointwise_smul_iff₀", ["subring"]], ["add", "theorem", "mem_inv_pointwise_smul_iff", ["subring"]], ["add", "theorem", "mem_inv_pointwise_smul_iff₀", ["subring"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem", ["subring"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem₀", ["subring"]], ["add", "theorem", "pointwise_smul_def", ["subring"]], ["add", "theorem", "pointwise_smul_le_iff₀", ["subring"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff", ["subring"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff₀", ["subring"]], ["add", "theorem", "pointwise_smul_subset_iff", ["subring"]], ["add", "theorem", "pointwise_smul_to_add_subgroup", ["subring"]], ["add", "theorem", "pointwise_smul_to_subsemiring", ["subring"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subring"]], ["add", "theorem", "smul_mem_pointwise_smul_iff", ["subring"]], ["add", "theorem", "smul_mem_pointwise_smul_iff₀", ["subring"]], ["add", "theorem", "subset_pointwise_smul_iff", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/subsemiring/pointwise.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["subsemiring"]], ["add", "theorem", "le_pointwise_smul_iff₀", ["subsemiring"]], ["add", "theorem", "mem_inv_pointwise_smul_iff", ["subsemiring"]], ["add", "theorem", "mem_inv_pointwise_smul_iff₀", ["subsemiring"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem", ["subsemiring"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem₀", ["subsemiring"]], ["add", "theorem", "pointwise_smul_def", ["subsemiring"]], ["add", "theorem", "pointwise_smul_le_iff₀", ["subsemiring"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff", ["subsemiring"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff₀", ["subsemiring"]], ["add", "theorem", "pointwise_smul_subset_iff", ["subsemiring"]], ["add", "theorem", "pointwise_smul_to_add_submonoid", ["subsemiring"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subsemiring"]], ["add", "theorem", "smul_mem_pointwise_smul_iff", ["subsemiring"]], ["add", "theorem", "smul_mem_pointwise_smul_iff₀", ["subsemiring"]], ["add", "theorem", "subset_pointwise_smul_iff", ["subsemiring"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1637652182, "sha": "a5866810", "message": "feat(category_theory/limits/shapes): Multiequalizer is the equalizer (#10267)", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": [["add", "def", "iso_coequalizer", ["category_theory", "limits", "multicoequalizer"]], ["add", "def", "sigma_π", ["category_theory", "limits", "multicoequalizer"]], ["add", "theorem", "ι_sigma_π", ["category_theory", "limits", "multicoequalizer"]], ["add", "def", "of_sigma_cofork", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "of_sigma_cofork_ι_app_left", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "of_sigma_cofork_ι_app_right", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "sigma_condition", ["category_theory", "limits", "multicofork"]], ["add", "def", "to_sigma_cofork", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "to_sigma_cofork_ι_app_one", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "to_sigma_cofork_ι_app_zero", ["category_theory", "limits", "multicofork"]], ["mod", "def", "multicofork", ["category_theory", "limits"]], ["add", "def", "fst_pi_map", ["category_theory", "limits", "multicospan_index"]], ["add", "theorem", "fst_pi_map_π", ["category_theory", "limits", "multicospan_index"]], ["add", "def", "multifork_equiv_pi_fork", ["category_theory", "limits", "multicospan_index"]], ["add", "def", "of_pi_fork_functor", ["category_theory", "limits", "multicospan_index"]], ["add", "def", "parallel_pair_diagram", ["category_theory", "limits", "multicospan_index"]], ["add", "def", "snd_pi_map", ["category_theory", "limits", "multicospan_index"]], ["add", "theorem", "snd_pi_map_π", ["category_theory", "limits", "multicospan_index"]], ["add", "def", "to_pi_fork_functor", ["category_theory", "limits", "multicospan_index"]], ["add", "def", "iso_equalizer", ["category_theory", "limits", "multiequalizer"]], ["add", "def", "ι_pi", ["category_theory", "limits", "multiequalizer"]], ["add", "theorem", "ι_pi_π", ["category_theory", "limits", "multiequalizer"]], ["add", "def", "of_pi_fork", ["category_theory", "limits", "multifork"]], ["add", "theorem", "of_pi_fork_π_app_left", ["category_theory", "limits", "multifork"]], ["add", "theorem", "of_pi_fork_π_app_right", ["category_theory", "limits", "multifork"]], ["add", "theorem", "pi_condition", ["category_theory", "limits", "multifork"]], ["add", "def", "to_pi_fork", ["category_theory", "limits", "multifork"]], ["add", "theorem", "to_pi_fork_π_app_one", ["category_theory", "limits", "multifork"]], ["add", "theorem", "to_pi_fork_π_app_zero", ["category_theory", "limits", "multifork"]], ["mod", "def", "multifork", ["category_theory", "limits"]], ["add", "def", "fst_sigma_map", ["category_theory", "limits", "multispan_index"]], ["add", "def", "multicofork_equiv_sigma_cofork", ["category_theory", "limits", "multispan_index"]], ["add", "def", "of_sigma_cofork_functor", ["category_theory", "limits", "multispan_index"]], ["add", "def", "parallel_pair_diagram", ["category_theory", "limits", "multispan_index"]], ["add", "def", "snd_sigma_map", ["category_theory", "limits", "multispan_index"]], ["add", "def", "to_sigma_cofork_functor", ["category_theory", "limits", "multispan_index"]], ["add", "theorem", "ι_fst_sigma_map", ["category_theory", "limits", "multispan_index"]], ["add", "theorem", "ι_snd_sigma_map", ["category_theory", "limits", "multispan_index"]]]}]}, {"timestamp": 1637645713, "sha": "6dddef28", "message": "feat(topology/metric_space): range of a cauchy seq is bounded (#10423)", "changes": [{"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "has_basis_cofinite", ["filter"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "bounded_range_of_cauchy_map_cofinite", ["metric"]], ["add", "theorem", "bounded_range_of_tendsto_cofinite", ["metric"]], ["add", "theorem", "bounded_range_of_tendsto_cofinite_uniformity", ["metric"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "theorem", "cauchy_iff", ["filter", "has_basis"]]]}]}, {"timestamp": 1637631194, "sha": "f684f612", "message": "feat(algebra/algebra/spectrum): define spectrum and prove basic prope... (#10390)\n…rties\nDefine the resolvent set and the spectrum of an element of an algebra as\na set of elements in the scalar ring. We prove a few basic facts\nincluding that additive cosets of the spectrum commute with the\nspectrum, that is, r + σ a = σ (r ⬝ 1 + a). Similarly, multiplicative\ncosets of the spectrum also commute when the element r is a unit of\nthe scalar ring R. Finally, we also show that the units of R in\nσ (a*b) coincide with those of σ (b*a).", "changes": [{"oldPath": null, "newPath": "src/algebra/algebra/spectrum.lean", "changes": [["add", "theorem", "smul_iff", ["is_unit"]], ["add", "theorem", "smul_sub_iff_sub_inv_smul", ["is_unit"]], ["add", "def", "resolvent", []], ["add", "theorem", "add_mem_iff", ["spectrum"]], ["add", "theorem", "left_add_coset_eq", ["spectrum"]], ["add", "theorem", "mem_iff", ["spectrum"]], ["add", "theorem", "mem_resolvent_iff", ["spectrum"]], ["add", "theorem", "mem_resolvent_of_left_right_inverse", ["spectrum"]], ["add", "theorem", "not_mem_iff", ["spectrum"]], ["add", "theorem", "preimage_units_mul_eq_swap_mul", ["spectrum"]], ["add", "theorem", "smul_eq_smul", ["spectrum"]], ["add", "theorem", "smul_mem_smul_iff", ["spectrum"]], ["add", "theorem", "unit_mem_mul_iff_mem_swap_mul", ["spectrum"]], ["add", "def", "spectrum", []]]}]}, {"timestamp": 1637621299, "sha": "e59e03f1", "message": "feat(measure_theory/integral/interval_integral): add an alternative definition (#10380)\nProve that `∫ x in a..b, f x ∂μ = sgn a b • ∫ x in Ι a b, f x ∂μ`,\nwhere `sgn a b = if a ≤ b then 1 else -1`.", "changes": [{"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "interval_integral_eq_integral_interval_oc", ["interval_integral"]]]}]}, {"timestamp": 1637610374, "sha": "2f5af98b", "message": "feat(data/nat/prime): prime divisors (#10318)\nAdding some basic lemmas about `factors` and `factors.to_finset`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_finset_repeat_of_ne_zero", ["list"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "eq_one_of_dvd_coprimes", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "coprime_factors_disjoint", ["nat"]], ["add", "theorem", "dvd_of_mem_factors", ["nat"]], ["add", "theorem", "factors_mul_of_coprime", ["nat"]], ["add", "theorem", "factors_mul_of_pos", ["nat"]], ["add", "theorem", "mem_factors_mul_of_pos", ["nat"]], ["add", "theorem", "prime_pow_prime_divisor", ["nat"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "prime_divisors_eq_to_filter_divisors_prime", ["nat"]]]}]}, {"timestamp": 1637607052, "sha": "317483a6", "message": "feat(analysis/calculus/parametric_integral): generalize, rename (#10397)\n* add `integral` to lemma names;\n* a bit more general\n `has_fderiv_at_integral_of_dominated_loc_of_lip'`: only require an\n estimate on `∥F x a - F x₀ a∥` instead of `∥F x a - F y a∥`;\n* generalize the `deriv` lemmas to `F : 𝕜 → α → E`, `[is_R_or_C 𝕜]`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "le_of_lip'", ["has_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": [["add", "theorem", "has_deriv_at_integral_of_dominated_loc_of_deriv_le", []], ["add", "theorem", "has_deriv_at_integral_of_dominated_loc_of_lip", []], ["del", "theorem", "has_deriv_at_of_dominated_loc_of_deriv_le", []], ["del", "theorem", "has_deriv_at_of_dominated_loc_of_lip", []], ["add", "theorem", "has_fderiv_at_integral_of_dominated_loc_of_lip'", []], ["add", "theorem", "has_fderiv_at_integral_of_dominated_loc_of_lip", []], ["add", "theorem", "has_fderiv_at_integral_of_dominated_of_fderiv_le", []], ["del", "theorem", "has_fderiv_at_of_dominated_loc_of_lip'", []], ["del", "theorem", "has_fderiv_at_of_dominated_loc_of_lip", []], ["del", "theorem", "has_fderiv_at_of_dominated_of_fderiv_le", []]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "integrable_comp", ["continuous_linear_map"]], ["mod", "theorem", "apply_continuous_linear_map", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "integral_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1637599884, "sha": "d2ebcad1", "message": "fix(undergrad.yaml): reinstate deleted entry (#10416)\nRevert an (I assume accidental?) deletion in #10415.\ncc @PatrickMassot", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1637586881, "sha": "c8961621", "message": "feat(data/finset/basic) eq_of_mem_singleton (#10414)\nThe `finset` equivalent of [set.eq_of_mem_singleton](https://leanprover-community.github.io/mathlib_docs/find/set.eq_of_mem_singleton/src)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "eq_of_mem_singleton", ["finset"]]]}]}, {"timestamp": 1637580191, "sha": "d8d0c595", "message": "chore(algebra/opposites): split group actions and division_ring into their own files (#10383)\nThis splits out `group_theory.group_action.opposite` and `algebra.field.opposite` from `algebra.opposites`.\nThe motivation is to make opposite actions available slightly earlier in the import graph.\nWe probably want to split out `ring` at some point too, but that's likely a more annoying change so I've left it for future work.\nThese lemmas are just moved, and some `_root_` prefixes eliminated by removing the surrounding `namespace`.", "changes": [{"oldPath": "src/algebra/char_p/invertible.lean", "newPath": "src/algebra/char_p/invertible.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/field/opposite.lean", "changes": []}, {"oldPath": "src/algebra/module/opposites.lean", "newPath": "src/algebra/module/opposites.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["del", "theorem", "op_smul_eq_mul", ["mul_opposite"]]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/group_action/opposite.lean", "changes": [["add", "theorem", "op_smul_eq_mul", []]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}]}, {"timestamp": 1637580190, "sha": "2aea9961", "message": "feat(data): define a `fun_like` class of bundled homs (function + proofs) (#10286)\nThis PR introduces a class `fun_like` for types of bundled homomorphisms, like `set_like` is for bundled subobjects. This should be useful by itself, but an important use I see for it is the per-morphism class refactor, see #9888.\nAlso, `coe_fn_coe_base` now has an appropriately low priority, so it doesn't take precedence over `fun_like.has_coe_to_fun`.", "changes": [{"oldPath": null, "newPath": "src/data/fun_like.lean", "changes": [["add", "structure", "cooler_hom", []], ["add", "theorem", "do_something", []], ["add", "theorem", "coe_fn_eq", ["fun_like"]], ["add", "theorem", "coe_injective", ["fun_like"]], ["add", "theorem", "ext'", ["fun_like"]], ["add", "theorem", "ext'_iff", ["fun_like"]], ["add", "theorem", "ext", ["fun_like"]], ["add", "theorem", "ext_iff", ["fun_like"]], ["add", "theorem", "map_cool", []], ["add", "theorem", "map_op", []]]}]}, {"timestamp": 1637574892, "sha": "7a5fac38", "message": "feat(ring_theory/roots_of_unity): primitive root lemmas (#10356)\nFrom the flt-regular project.", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "eq_order_of", ["is_primitive_root"]], ["add", "theorem", "map_iff_of_injective", ["is_primitive_root"]], ["add", "theorem", "map_of_injective", ["is_primitive_root"]], ["add", "theorem", "of_map_of_injective", ["is_primitive_root"]], ["add", "theorem", "of_subsingleton", ["is_primitive_root"]], ["add", "theorem", "unique", ["is_primitive_root"]], ["add", "theorem", "zero", ["is_primitive_root"]]]}]}, {"timestamp": 1637571597, "sha": "9f075796", "message": "docs(undergrad): add urls in linear algebra (#10415)\nThis uses the new possibility to put urls in `undergrad.yaml` hoping to help describing what is meant to be formalized. We should probably create wiki pages for some cases that are not so clear even with a url. There is one case where I could find only a French page and some cases where I couldn't find anything. Amazingly \"endormorphism exponential\" is such a case, but hopefully this example is already clear. Another kind of problematic item is the \"example\" item in the representation section. Presumably it should be removed and replaced with a couple of explicit examples such as \"standard representation of a matrix group\" or \"permutation representation\".", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1637540815, "sha": "9277d4b4", "message": "chore(data/finset/basic): finset.prod -> finset.product in module docstring (#10413)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}]}, {"timestamp": 1637534007, "sha": "d17db717", "message": "chore(*): golf proofs about `filter.Coprod` (#10400)\nAlso add some supporting lemmas.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "coe_pi_finset", ["fintype"]]]}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "bijective_pi_map", ["function"]], ["add", "theorem", "injective_pi_map", ["function"]], ["add", "theorem", "surjective_pi_map", ["function"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_surjective", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "compl_mem_Coprod_iff", ["filter"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1637534006, "sha": "d98b8e0e", "message": "feat(linear_algebra/bilinear_map): semilinearize bilinear maps (#10373)\nThis PR generalizes most of `linear_algebra/bilinear_map` to semilinear maps. Along the way, we introduce an instance for `module S (E →ₛₗ[σ] F)`, with `σ : R →+* S`. This allows us to define \"semibilinear\" maps of type `E →ₛₗ[σ] F →ₛₗ[ρ] G`, where `E`, `F` and `G` are modules over `R₁`, `R₂` and `R₃` respectively, and `σ : R₁ →+* R₃` and `ρ : R₂ →+* R₃`. See `mk₂'ₛₗ` to see how to construct such a map.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "coe_smul", ["linear_map"]], ["mod", "theorem", "comp_smul", ["linear_map"]], ["mod", "theorem", "smul_apply", ["linear_map"]], ["mod", "theorem", "smul_comp", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": [["mod", "def", "compl₂", ["linear_map"]], ["mod", "theorem", "compl₂_apply", ["linear_map"]], ["mod", "def", "compr₂", ["linear_map"]], ["mod", "theorem", "compr₂_apply", ["linear_map"]], ["mod", "theorem", "ext₂", ["linear_map"]], ["mod", "def", "flip", ["linear_map"]], ["mod", "theorem", "flip_apply", ["linear_map"]], ["mod", "theorem", "flip_inj", ["linear_map"]], ["mod", "def", "lcomp", ["linear_map"]], ["mod", "theorem", "lcomp_apply", ["linear_map"]], ["add", "def", "lcompₛₗ", ["linear_map"]], ["add", "theorem", "lcompₛₗ_apply", ["linear_map"]], ["mod", "def", "lflip", ["linear_map"]], ["mod", "def", "llcomp", ["linear_map"]], ["mod", "theorem", "llcomp_apply", ["linear_map"]], ["mod", "theorem", "map_add₂", ["linear_map"]], ["mod", "theorem", "map_neg₂", ["linear_map"]], ["mod", "theorem", "map_smul₂", ["linear_map"]], ["add", "theorem", "map_smulₛₗ₂", ["linear_map"]], ["mod", "theorem", "map_sub₂", ["linear_map"]], ["mod", "theorem", "map_sum₂", ["linear_map"]], ["mod", "theorem", "map_zero₂", ["linear_map"]], ["mod", "def", "mk₂'", ["linear_map"]], ["add", "def", "mk₂'ₛₗ", ["linear_map"]], ["add", "theorem", "mk₂'ₛₗ_apply", ["linear_map"]], ["mod", "def", "mk₂", ["linear_map"]]]}]}, {"timestamp": 1637531254, "sha": "8f07d75b", "message": "feat(measure_theory/covering/differentiation): differentiation of measures (#10101)\nIf `ρ` and `μ` are two Radon measures on a finite-dimensional normed real vector space, then for `μ`-almost every `x`, the ratio `ρ (B (x, r)) / μ (B(x,r))` converges when `r` tends to `0`, towards the Radon-Nikodym derivative of `ρ` with respect to `μ`. This is the main theorem on differentiation of measures.\nThe convergence in fact holds for more general families of sets than balls, called Vitali families (the fact that balls form a Vitali family is a restatement of the Besicovitch covering theorem). The general version of the differentation of measures theorem is proved in this PR, following [Federer, geometric measure theory].", "changes": [{"oldPath": null, "newPath": "src/measure_theory/covering/differentiation.lean", "changes": [["add", "theorem", "ae_eventually_measure_pos", ["vitali_family"]], ["add", "theorem", "ae_eventually_measure_zero_of_singular", ["vitali_family"]], ["add", "theorem", "ae_measurable_lim_ratio", ["vitali_family"]], ["add", "theorem", "ae_tendsto_div", ["vitali_family"]], ["add", "theorem", "ae_tendsto_lim_ratio", ["vitali_family"]], ["add", "theorem", "ae_tendsto_lim_ratio_meas", ["vitali_family"]], ["add", "theorem", "ae_tendsto_rn_deriv", ["vitali_family"]], ["add", "theorem", "ae_tendsto_rn_deriv_of_absolutely_continuous", ["vitali_family"]], ["add", "theorem", "eventually_measure_lt_top", ["vitali_family"]], ["add", "theorem", "exists_measurable_supersets_lim_ratio", ["vitali_family"]], ["add", "theorem", "le_mul_with_density", ["vitali_family"]], ["add", "theorem", "lim_ratio_meas_measurable", ["vitali_family"]], ["add", "theorem", "measure_le_mul_of_subset_lim_ratio_meas_lt", ["vitali_family"]], ["add", "theorem", "measure_le_of_frequently_le", ["vitali_family"]], ["add", "theorem", "measure_lim_ratio_meas_top", ["vitali_family"]], ["add", "theorem", "measure_lim_ratio_meas_zero", ["vitali_family"]], ["add", "theorem", "mul_measure_le_of_subset_lt_lim_ratio_meas", ["vitali_family"]], ["add", "theorem", "null_of_frequently_le_of_frequently_ge", ["vitali_family"]], ["add", "theorem", "with_density_le_mul", ["vitali_family"]], ["add", "theorem", "with_density_lim_ratio_meas_eq", ["vitali_family"]]]}, {"oldPath": "src/measure_theory/covering/vitali_family.lean", "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": []}]}, {"timestamp": 1637528177, "sha": "8ee634b0", "message": "feat(measure_theory): define volume on `complex` (#10403)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/measure/complex_lebesgue.lean", "changes": [["add", "def", "measurable_equiv_pi", ["complex"]], ["add", "def", "measurable_equiv_real_prod", ["complex"]], ["add", "theorem", "volume_preserving_equiv_pi", ["complex"]], ["add", "theorem", "volume_preserving_equiv_real_prod", ["complex"]]]}]}, {"timestamp": 1637520048, "sha": "2168297e", "message": "feat(analysis/inner_product_space/projection): orthogonal group is generated by reflections (#10381)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "mem_orthogonal_singleton_of_inner_left", []], ["add", "theorem", "mem_orthogonal_singleton_of_inner_right", []]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "reflections_generate", ["linear_isometry_equiv"]], ["add", "theorem", "reflections_generate_dim", ["linear_isometry_equiv"]], ["add", "theorem", "reflections_generate_dim_aux", ["linear_isometry_equiv"]], ["add", "theorem", "reflection_sub", []], ["add", "theorem", "reflection_trans_reflection", []], ["mod", "theorem", "finrank_add_finrank_orthogonal", ["submodule"]]]}]}, {"timestamp": 1637513204, "sha": "e0c0d84a", "message": "feat(topology/separation): removing a finite set from a dense set preserves density (#10405)\nAlso add the fact that one can find a dense set containing neither top nor bottom in a nontrivial dense linear order.", "changes": [{"oldPath": "src/measure_theory/function/ae_measurable_order.lean", "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "exists_countable_dense_subset_no_bot_top", ["dense"]], ["add", "theorem", "exists_countable_dense_no_bot_top", []]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "exists_countable_dense_no_zero_top", ["ennreal"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "diff_finite", ["dense"]], ["add", "theorem", "diff_finset", ["dense"]], ["add", "theorem", "diff_singleton", ["dense"]], ["mod", "theorem", "is_closed", ["finite"]]]}]}, {"timestamp": 1637493065, "sha": "55b81f8b", "message": "feat(measure_theory): measure preserving maps and integrals (#10326)\nIf `f` is a measure preserving map, then `∫ y, g y ∂ν = ∫ x, g (f x) ∂μ`. It was two rewrites with the old API (`hf.map_eq`, then a lemma about integral over map measure); it's one `rw` now.\nAlso add versions for special cases when `f` is a measurable embedding (in this case we don't need to assume measurability of `g`).", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "theorem", "preimage_apply_01_prod'", ["fin"]], ["add", "theorem", "preimage_apply_01_prod", ["fin"]]]}, {"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": [["add", "theorem", "restrict_image_emb", ["measure_theory", "measure_preserving"]], ["add", "theorem", "restrict_preimage", ["measure_theory", "measure_preserving"]], ["add", "theorem", "restrict_preimage_emb", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["del", "theorem", "integral_fin_two_arrow'", ["measure_theory"]], ["del", "theorem", "integral_fin_two_arrow", ["measure_theory"]], ["del", "theorem", "integral_fin_two_arrow_pi'", ["measure_theory"]], ["del", "theorem", "integral_fin_two_arrow_pi", ["measure_theory"]], ["del", "theorem", "integral_fun_unique'", ["measure_theory"]], ["del", "theorem", "integral_fun_unique", ["measure_theory"]], ["del", "theorem", "integral_fun_unique_pi'", ["measure_theory"]], ["del", "theorem", "integral_fun_unique_pi", ["measure_theory"]], ["del", "theorem", "map_fun_unique", ["measure_theory", "measure"]], ["del", "theorem", "pi_unique_eq_map", ["measure_theory", "measure"]], ["del", "theorem", "prod_eq_map_fin_two_arrow", ["measure_theory", "measure"]], ["del", "theorem", "prod_eq_map_fin_two_arrow_same", ["measure_theory", "measure"]], ["del", "theorem", "{u}", ["measure_theory", "measure"]], ["add", "theorem", "measure_preserving_fin_two_arrow", ["measure_theory"]], ["add", "theorem", "measure_preserving_fin_two_arrow_vec", ["measure_theory"]], ["add", "theorem", "measure_preserving_fun_unique", ["measure_theory"]], ["add", "theorem", "measure_preserving_pi_empty", ["measure_theory"]], ["add", "theorem", "measure_preserving_pi_fin_two", ["measure_theory"]], ["del", "theorem", "set_integral_fin_two_arrow'", ["measure_theory"]], ["del", "theorem", "set_integral_fin_two_arrow", ["measure_theory"]], ["del", "theorem", "set_integral_fin_two_arrow_pi'", ["measure_theory"]], ["del", "theorem", "set_integral_fin_two_arrow_pi", ["measure_theory"]], ["del", "theorem", "set_integral_fun_unique'", ["measure_theory"]], ["del", "theorem", "set_integral_fun_unique", ["measure_theory"]], ["del", "theorem", "set_integral_fun_unique_pi'", ["measure_theory"]], ["del", "theorem", "set_integral_fun_unique_pi", ["measure_theory"]], ["add", "theorem", "volume_preserving_fin_two_arrow", ["measure_theory"]], ["add", "theorem", "volume_preserving_fun_unique", ["measure_theory"]], ["add", "theorem", "volume_preserving_pi_empty", ["measure_theory"]], ["add", "theorem", "volume_preserving_pi_fin_two", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "integrable_comp", ["measure_theory", "measure_preserving"]], ["add", "theorem", "integrable_comp_emb", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_comp", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_comp_preimage", ["measure_theory", "measure_preserving"]], ["add", "theorem", "integrable_on_image", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_comp", ["measure_theory", "measure_preserving"]], ["add", "theorem", "lintegral_comp_emb", ["measure_theory", "measure_preserving"]], ["add", "theorem", "set_lintegral_comp_emb", ["measure_theory", "measure_preserving"]], ["add", "theorem", "set_lintegral_comp_preimage", ["measure_theory", "measure_preserving"]], ["add", "theorem", "set_lintegral_comp_preimage_emb", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "set_integral_image_emb", ["measure_theory", "measure_preserving"]], ["add", "theorem", "set_integral_preimage_emb", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}]}, {"timestamp": 1637451449, "sha": "2a286527", "message": "feat(data/finset/basic): add filter_erase (#10384)\nLike `filter_insert`, but for `erase`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "erase_idem", ["finset"]], ["add", "theorem", "erase_right_comm", ["finset"]], ["add", "theorem", "filter_erase", ["finset"]]]}]}, {"timestamp": 1637443374, "sha": "32c05079", "message": "feat(data/nat/interval): add Ico_succ_left_eq_erase (#10386)\nAdds `Ico_succ_left_eq_erase`. Also adds a few order lemmas needed for this.\nSee [this discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Ico_succ_left_eq_erase_Ico/near/259180476)", "changes": [{"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "Ico_succ_left_eq_erase_Ico", ["nat"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "ne_of_not_le", []]]}]}, {"timestamp": 1637414528, "sha": "b3538bfa", "message": "feat(topology/algebra/infinite_sum): add `has_sum.smul_const` etc (#10393)\nRename old `*.smul` to `*.const_smul`.", "changes": [{"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "const_smul", ["has_sum"]], ["del", "theorem", "smul", ["has_sum"]], ["add", "theorem", "smul_const", ["has_sum"]], ["add", "theorem", "const_smul", ["summable"]], ["del", "theorem", "smul", ["summable"]], ["add", "theorem", "smul_const", ["summable"]], ["add", "theorem", "tsum_const_smul", []], ["del", "theorem", "tsum_smul", []], ["add", "theorem", "tsum_smul_const", []]]}]}, {"timestamp": 1637407832, "sha": "618447fa", "message": "feat(analysis/special_functions/complex/arg): review, golf, lemmas (#10365)\n* add `|z| * exp (arg z * I) = z`;\n* reorder theorems to help golfing;\n* prove formulas for `arg z` in terms of `arccos (re z / abs z)` in cases `0 < im z` and `im z < 0`;\n* use them to golf continuity of `arg`.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "mul_nonneg_iff_left_nonneg_of_pos", []], ["mod", "theorem", "mul_nonneg_iff_right_nonneg_of_pos", []]]}, {"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "abs_mul_cos_add_sin_mul_I", ["complex"]], ["add", "theorem", "abs_mul_exp_arg_mul_I", ["complex"]], ["mod", "theorem", "arg_cos_add_sin_mul_I", ["complex"]], ["add", "theorem", "arg_eq_neg_pi_div_two_iff", ["complex"]], ["add", "theorem", "arg_eq_nhds_of_im_neg", ["complex"]], ["add", "theorem", "arg_eq_nhds_of_im_pos", ["complex"]], ["add", "theorem", "arg_eq_pi_div_two_iff", ["complex"]], ["add", "theorem", "arg_mem_Ioc", ["complex"]], ["add", "theorem", "arg_mul_cos_add_sin_mul_I", ["complex"]], ["add", "theorem", "arg_neg_iff", ["complex"]], ["add", "theorem", "arg_nonneg_iff", ["complex"]], ["add", "theorem", "arg_of_im_neg", ["complex"]], ["add", "theorem", "arg_of_im_nonneg_of_ne_zero", ["complex"]], ["add", "theorem", "arg_of_im_pos", ["complex"]], ["del", "theorem", "arg_of_re_zero_of_im_neg", ["complex"]], ["del", "theorem", "arg_of_re_zero_of_im_pos", ["complex"]], ["mod", "theorem", "arg_zero", ["complex"]], ["del", "theorem", "continuous_at_arg_of_re_neg_of_im_neg", ["complex"]], ["del", "theorem", "continuous_at_arg_of_re_neg_of_im_pos", ["complex"]], ["del", "theorem", "continuous_at_arg_of_re_pos", ["complex"]], ["del", "theorem", "continuous_at_arg_of_re_zero", ["complex"]], ["add", "theorem", "ext_abs_arg_iff", ["complex"]], ["add", "theorem", "range_arg", ["complex"]], ["mod", "theorem", "tan_arg", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/complex/circle.lean", "newPath": "src/analysis/special_functions/complex/circle.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "norm_sq_add_mul_I", ["complex"]], ["add", "theorem", "sq_abs", ["complex"]], ["add", "theorem", "sq_abs_sub_sq_im", ["complex"]], ["add", "theorem", "sq_abs_sub_sq_re", ["complex"]]]}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}]}, {"timestamp": 1637376134, "sha": "bd6c6d54", "message": "chore(scripts): update nolints.txt (#10391)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1637336743, "sha": "db926f00", "message": "chore(category_theory/limits/shapes/pullbacks): fix diagrams in docs (#10379)", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}]}, {"timestamp": 1637332451, "sha": "7638fe21", "message": "doc(topology/separation): two typos (#10382)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1637323437, "sha": "e8858fdd", "message": "refactor(algebra/opposites): use mul_opposite for multiplicative opposite (#10302)\nSplit out `mul_opposite` from `opposite`, to leave room for an `add_opposite` in future.\nMultiplicative opposites are now spelt `Aᵐᵒᵖ` instead of `Aᵒᵖ`. `Aᵒᵖ` now refers to the categorical opposite.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_apply", ["mul_opposite"]], ["del", "theorem", "algebra_map_apply", ["opposite"]]]}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "unop_sum", ["finset"]], ["mod", "theorem", "unop_map_list_prod", ["ring_hom"]]]}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["mod", "def", "star_hom", ["free_algebra"]]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "def", "embed_product", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "op_pow", ["mul_opposite"]], ["add", "theorem", "op_zpow", ["mul_opposite"]], ["add", "theorem", "unop_pow", ["mul_opposite"]], ["add", "theorem", "unop_zpow", ["mul_opposite"]], ["del", "theorem", "op_pow", ["opposite"]], ["del", "theorem", "op_zpow", ["opposite"]], ["del", "theorem", "unop_pow", ["opposite"]], ["del", "theorem", "unop_zpow", ["opposite"]]]}, {"oldPath": "src/algebra/hierarchy_design.lean", "newPath": "src/algebra/hierarchy_design.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/opposites.lean", "newPath": "src/algebra/module/opposites.lean", "changes": [["add", "theorem", "coe_op_linear_equiv", ["mul_opposite"]], ["add", "theorem", "coe_op_linear_equiv_symm", ["mul_opposite"]], ["add", "theorem", "coe_op_linear_equiv_symm_to_linear_map", ["mul_opposite"]], ["add", "theorem", "coe_op_linear_equiv_to_linear_map", ["mul_opposite"]], ["add", "def", "op_linear_equiv", ["mul_opposite"]], ["add", "theorem", "op_linear_equiv_symm_to_add_equiv", ["mul_opposite"]], ["add", "theorem", "op_linear_equiv_to_add_equiv", ["mul_opposite"]], ["del", "theorem", "coe_op_linear_equiv", ["opposite"]], ["del", "theorem", "coe_op_linear_equiv_symm", ["opposite"]], ["del", "theorem", "coe_op_linear_equiv_symm_to_linear_map", ["opposite"]], ["del", "theorem", "coe_op_linear_equiv_to_linear_map", ["opposite"]], ["del", "def", "op_linear_equiv", ["opposite"]], ["del", "theorem", "op_linear_equiv_symm_to_add_equiv", ["opposite"]], ["del", "theorem", "op_linear_equiv_to_add_equiv", ["opposite"]]]}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["mod", "theorem", "op_ring_equiv_symm_single", ["add_monoid_algebra"]], ["mod", "theorem", "op_ring_equiv_symm_single", ["monoid_algebra"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["mod", "def", "inv'", ["mul_equiv"]], ["add", "theorem", "op", ["mul_opposite", "commute"]], ["add", "theorem", "unop", ["mul_opposite", "commute"]], ["add", "theorem", "commute_op", ["mul_opposite"]], ["add", "theorem", "commute_unop", ["mul_opposite"]], ["add", "def", "op", ["mul_opposite"]], ["add", "theorem", "op_add", ["mul_opposite"]], ["add", "def", "op_add_equiv", ["mul_opposite"]], ["add", "theorem", "op_add_equiv_to_equiv", ["mul_opposite"]], ["add", "theorem", "op_bijective", ["mul_opposite"]], ["add", "theorem", "op_comp_unop", ["mul_opposite"]], ["add", "theorem", "op_eq_one_iff", ["mul_opposite"]], ["add", "theorem", "op_eq_zero_iff", ["mul_opposite"]], ["add", "def", "op_equiv", ["mul_opposite"]], ["add", "theorem", "op_inj", ["mul_opposite"]], ["add", "theorem", "op_injective", ["mul_opposite"]], ["add", "theorem", "op_inv", ["mul_opposite"]], ["add", "theorem", "op_mul", ["mul_opposite"]], ["add", "theorem", "op_ne_zero_iff", ["mul_opposite"]], ["add", "theorem", "op_neg", ["mul_opposite"]], ["add", "theorem", "op_one", ["mul_opposite"]], ["add", "theorem", "op_smul", ["mul_opposite"]], ["add", "theorem", "op_smul_eq_mul", ["mul_opposite"]], ["add", "theorem", "op_sub", ["mul_opposite"]], ["add", "theorem", "op_surjective", ["mul_opposite"]], ["add", "theorem", "op_unop", ["mul_opposite"]], ["add", "theorem", "op_zero", ["mul_opposite"]], ["add", "theorem", "op", ["mul_opposite", "semiconj_by"]], ["add", "theorem", "unop", ["mul_opposite", "semiconj_by"]], ["add", "theorem", "semiconj_by_op", ["mul_opposite"]], ["add", "theorem", "semiconj_by_unop", ["mul_opposite"]], ["add", "def", "unop", ["mul_opposite"]], ["add", "theorem", "unop_add", ["mul_opposite"]], ["add", "theorem", "unop_bijective", ["mul_opposite"]], ["add", "theorem", "unop_comp_op", ["mul_opposite"]], ["add", "theorem", "unop_eq_one_iff", ["mul_opposite"]], ["add", "theorem", "unop_eq_zero_iff", ["mul_opposite"]], ["add", "theorem", "unop_inj", ["mul_opposite"]], ["add", "theorem", "unop_injective", ["mul_opposite"]], ["add", "theorem", "unop_inv", ["mul_opposite"]], ["add", "theorem", "unop_mul", ["mul_opposite"]], ["add", "theorem", "unop_ne_zero_iff", ["mul_opposite"]], ["add", "theorem", "unop_neg", ["mul_opposite"]], ["add", "theorem", "unop_one", ["mul_opposite"]], ["add", "theorem", "unop_op", ["mul_opposite"]], ["add", "theorem", "unop_smul", ["mul_opposite"]], ["add", "theorem", "unop_sub", ["mul_opposite"]], ["add", "theorem", "unop_surjective", ["mul_opposite"]], ["add", "theorem", "unop_zero", ["mul_opposite"]], ["add", "def", "mul_opposite", []], ["del", "theorem", "coe_op_add_equiv", ["opposite"]], ["del", "theorem", "coe_op_add_equiv_symm", ["opposite"]], ["del", "theorem", "op", ["opposite", "commute"]], ["del", "theorem", "unop", ["opposite", "commute"]], ["del", "theorem", "commute_op", ["opposite"]], ["del", "theorem", "commute_unop", ["opposite"]], ["del", "theorem", "op_add", ["opposite"]], ["del", "def", "op_add_equiv", ["opposite"]], ["del", "theorem", "op_add_equiv_to_equiv", ["opposite"]], ["del", "theorem", "op_eq_one_iff", ["opposite"]], ["del", "theorem", "op_eq_zero_iff", ["opposite"]], ["del", "theorem", "op_inv", ["opposite"]], ["del", "theorem", "op_mul", ["opposite"]], ["del", "theorem", "op_ne_zero_iff", ["opposite"]], ["del", "theorem", "op_neg", ["opposite"]], ["del", "theorem", "op_one", ["opposite"]], ["del", "theorem", "op_smul", ["opposite"]], ["del", "theorem", "op_smul_eq_mul", ["opposite"]], ["del", "theorem", "op_sub", ["opposite"]], ["del", "theorem", "op_zero", ["opposite"]], ["del", "theorem", "op", ["opposite", "semiconj_by"]], ["del", "theorem", "unop", ["opposite", "semiconj_by"]], ["del", "theorem", "semiconj_by_op", ["opposite"]], ["del", "theorem", "semiconj_by_unop", ["opposite"]], ["del", "theorem", "unop_add", ["opposite"]], ["del", "theorem", "unop_eq_one_iff", ["opposite"]], ["del", "theorem", "unop_eq_zero_iff", ["opposite"]], ["del", "theorem", "unop_inv", ["opposite"]], ["del", "theorem", "unop_mul", ["opposite"]], ["del", "theorem", "unop_ne_zero_iff", ["opposite"]], ["del", "theorem", "unop_neg", ["opposite"]], ["del", "theorem", "unop_one", ["opposite"]], ["del", "theorem", "unop_smul", ["opposite"]], ["del", "theorem", "unop_sub", ["opposite"]], ["del", "theorem", "unop_zero", ["opposite"]], ["mod", "theorem", "coe_op_equiv_symm", ["units"]], ["mod", "theorem", "coe_unop_op_equiv", ["units"]], ["mod", "def", "op_equiv", ["units"]]]}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["mod", "theorem", "coe_conj_ae", ["quaternion"]], ["mod", "def", "conj_ae", ["quaternion"]], ["mod", "def", "conj_ae", ["quaternion_algebra"]]]}, {"oldPath": "src/algebra/regular/smul.lean", "newPath": "src/algebra/regular/smul.lean", "changes": [["mod", "theorem", "is_right_regular", ["is_smul_regular"]]]}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "op_star", ["mul_opposite"]], ["add", "theorem", "unop_star", ["mul_opposite"]], ["del", "theorem", "op_star", ["opposite"]], ["del", "theorem", "unop_star", ["opposite"]], ["mod", "def", "star_mul_equiv", []], ["mod", "def", "star_ring_equiv", []]]}, {"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/opposite.lean", "newPath": "src/category_theory/monoidal/opposite.lean", "changes": [["mod", "def", "mop", ["category_theory", "monoidal_opposite"]], ["mod", "theorem", "mop_unmop", ["category_theory", "monoidal_opposite"]], ["mod", "theorem", "op_injective", ["category_theory", "monoidal_opposite"]], ["mod", "def", "unmop", ["category_theory", "monoidal_opposite"]], ["mod", "theorem", "unop_inj_iff", ["category_theory", "monoidal_opposite"]], ["mod", "theorem", "unop_injective", ["category_theory", "monoidal_opposite"]], ["mod", "theorem", "mop_id_unmop", ["category_theory"]], ["mod", "theorem", "mop_tensor_obj", ["category_theory"]], ["mod", "theorem", "mop_tensor_unit", ["category_theory"]], ["mod", "theorem", "mop_unmop", ["category_theory"]], ["mod", "theorem", "unmop_comp", ["category_theory"]], ["mod", "theorem", "unmop_id", ["category_theory"]], ["mod", "theorem", "unmop_inj", ["category_theory"]], ["mod", "def", "mop", ["quiver", "hom"]], ["mod", "def", "unmop", ["quiver", "hom"]]]}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": [["mod", "def", "foldl", ["monoid"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "def", "conj_to_ring_equiv", ["is_R_or_C"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["mod", "theorem", "to_add_equiv_eq_coe", ["ring_equiv"]], ["mod", "theorem", "to_mul_equiv_eq_coe", ["ring_equiv"]], ["mod", "def", "to_opposite", ["ring_equiv"]], ["mod", "theorem", "to_opposite_symm_apply", ["ring_equiv"]], ["mod", "theorem", "unop_map_list_prod", ["ring_equiv"]]]}, {"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["mod", "theorem", "unop_map_list_prod", ["monoid_hom"]], ["add", "theorem", "op_list_prod", ["mul_opposite"]], ["add", "theorem", "unop_list_prod", ["mul_opposite"]], ["del", "theorem", "op_list_prod", ["opposite"]], ["del", "theorem", "unop_list_prod", ["opposite"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "transpose_ring_equiv", ["matrix"]]]}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "def", "op_ring_equiv", ["polynomial"]]]}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "fst_comp_mk", ["prod"]], ["add", "theorem", "snd_comp_mk", ["prod"]]]}, {"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": [["mod", "theorem", "inv_def", ["free_product"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["mod", "structure", "sesq_form", []]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["mod", "def", "mk'", ["unique"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["mod", "theorem", "measurable_op", []], ["mod", "theorem", "measurable_unop", []]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_invo.lean", "newPath": "src/ring_theory/ring_invo.lean", "changes": [["mod", "def", "mk'", ["ring_invo"]], ["mod", "structure", "ring_invo", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["mod", "theorem", "continuous_op", []], ["mod", "theorem", "continuous_unop", []]]}]}, {"timestamp": 1637316647, "sha": "d6814c58", "message": "feat(*): Reduce imports to only those necessary in the entire library (#10349)\nWe reduce imports of many files in the library to only those actually needed by the content of the file, this is done by inspecting the declarations and attributes used by declarations in a file, and then computing a minimal set of imports that includes all of the necessary content. (A tool to do this was written by @jcommelin and I for this purpose).\nThe point of doing this is to reduce unnecessary recompilation when files that aren't needed for some file higher up the import graph are changed and everything in between gets recompiled. \nAnother side benefit might be slightly faster simp / library_searches / tc lookups in some files as there may be less random declarations in the environment that aren't too relevant to the file.\nThe exception is that we do not remove any tactic file imports (in this run at least) as that requires more care to get right.\nWe also skip any `default.lean` files as the point of these is to provide a convenient way of importing a large chunk of the library (though arguably no mathlib file should import a default file that has no non-import content).\nSome OLD statistics (not 100% accurate as several things changed since then):\nThe average number of imports of each file in the library reduces by around 2, (this equals the average number of dependencies of each file) raw numbers are `806748 / 2033` (total number of transitive links/total number files before) to `802710 / 2033` (after)\nThe length of the longest chain of imports in mathlib decreases from 139 to 130.\nThe imports (transitively) removed from the most from other files are as follows (file, decrease in number of files importing):\n```\ndata.polynomial.degree.trailing_degree 13\nlinear_algebra.quotient 13\nring_theory.principal_ideal_domain 13\ndata.int.gcd 14\ndata.polynomial.div 14\ndata.list.rotate 15\ndata.nat.modeq 15\ndata.fin.interval 17\ndata.int.interval 17\ndata.pnat.interval 17\n```\nThe original script generated by an import-reducing tool is at https://github.com/alexjbest/dag-tools though I did clean up the output and some weirdness after running this script\nIn touched files the imports are put into alphabetical order, we tried not to touch too many files that don't have their imports changed, but some were in the many merges and iterations on this.\nThere are a couple of changes to mathlib not to an import line (compared to master) that I couldn't resist doing that became apparent when the tool recommended deletions of imports containing named simp lemmas in the file, that weren't firing and so the tool was right to remove the import.\nAnother sort of issue is discussed in https://github.com/leanprover-community/mathlib/blob/master/src/algebraic_geometry/presheafed_space/has_colimits.lean#L253, this is discussed at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Reordering.20ext.20lemmas/near/261581547 and there seems to be currently no good way to avoid this so we just fix the proof. One can verify this with the command ` git diff origin/master -I import`\nAt a later point we hope to modify this tooling to suggest splits in long files by their prerequisites, but getting the library into a more minimal state w.r.t file imports seems to be important for such a tool to work well.", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/bilinear.lean", "newPath": "src/algebra/algebra/bilinear.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/colimits.lean", "newPath": "src/algebra/category/Module/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/epi_mono.lean", "newPath": "src/algebra/category/Module/epi_mono.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/filtered_colimits.lean", "newPath": "src/algebra/category/Module/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/projective.lean", "newPath": "src/algebra/category/Module/projective.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_p/quotient.lean", "newPath": "src/algebra/char_p/quotient.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/algebra.lean", "newPath": "src/algebra/direct_sum/algebra.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": []}, {"oldPath": "src/algebra/homology/complex_shape.lean", "newPath": "src/algebra/homology/complex_shape.lean", "changes": []}, {"oldPath": "src/algebra/lie/base_change.lean", "newPath": "src/algebra/lie/base_change.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/cartan_matrix.lean", "newPath": "src/algebra/lie/cartan_matrix.lean", "changes": []}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/lie/direct_sum.lean", "newPath": "src/algebra/lie/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}, {"oldPath": "src/algebra/order/algebra.lean", "newPath": "src/algebra/order/algebra.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/algebra/pempty_instances.lean", "newPath": "src/algebra/pempty_instances.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/EllipticCurve.lean", "newPath": "src/algebraic_geometry/EllipticCurve.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_topology/Moore_complex.lean", "newPath": "src/algebraic_topology/Moore_complex.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": []}, {"oldPath": "src/algebraic_topology/topological_simplex.lean", "newPath": "src/algebraic_topology/topological_simplex.lean", "changes": []}, {"oldPath": "src/analysis/ODE/picard_lindelof.lean", "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/filter.lean", "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": []}, {"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/indicator_function.lean", "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/star.lean", "newPath": "src/analysis/normed_space/star.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "newPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/comma.lean", "newPath": "src/category_theory/adjunction/comma.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/lifting.lean", "newPath": "src/category_theory/adjunction/lifting.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/mates.lean", "newPath": "src/category_theory/adjunction/mates.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/over.lean", "newPath": "src/category_theory/adjunction/over.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/category/Quiv.lean", "newPath": "src/category_theory/category/Quiv.lean", "changes": []}, {"oldPath": "src/category_theory/category/pairwise.lean", "newPath": "src/category_theory/category/pairwise.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/hom_functor.lean", "newPath": "src/category_theory/hom_functor.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism_classes.lean", "newPath": "src/category_theory/isomorphism_classes.lean", "changes": []}, {"oldPath": "src/category_theory/lifting_properties.lean", "newPath": "src/category_theory/lifting_properties.lean", "changes": []}, {"oldPath": "src/category_theory/limits/comma.lean", "newPath": "src/category_theory/limits/comma.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/connected.lean", "newPath": "src/category_theory/limits/constructions/over/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/default.lean", "newPath": "src/category_theory/limits/constructions/over/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/kan_extension.lean", "newPath": "src/category_theory/limits/kan_extension.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/filtered.lean", "newPath": "src/category_theory/limits/preserves/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/disjoint_coproduct.lean", "newPath": "src/category_theory/limits/shapes/disjoint_coproduct.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/normal_mono.lean", "newPath": "src/category_theory/limits/shapes/normal_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/reflexive.lean", "newPath": "src/category_theory/limits/shapes/reflexive.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/coequalizer.lean", "newPath": "src/category_theory/monad/coequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/monad/kleisli.lean", "newPath": "src/category_theory/monad/kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": []}, {"oldPath": "src/category_theory/monad/products.lean", "newPath": "src/category_theory/monad/products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/basic.lean", "newPath": "src/category_theory/monoidal/free/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/free/coherence.lean", "newPath": "src/category_theory/monoidal/free/coherence.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/pi/basic.lean", "newPath": "src/category_theory/pi/basic.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/category_theory/sigma/basic.lean", "newPath": "src/category_theory/sigma/basic.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": []}, {"oldPath": "src/category_theory/subterminal.lean", "newPath": "src/category_theory/subterminal.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/rotate.lean", "newPath": "src/category_theory/triangulated/rotate.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/combinatorics/hales_jewett.lean", "newPath": "src/combinatorics/hales_jewett.lean", "changes": []}, {"oldPath": "src/combinatorics/hall/finite.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": []}, {"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": []}, {"oldPath": "src/control/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": []}, {"oldPath": "src/control/equiv_functor.lean", "newPath": "src/control/equiv_functor.lean", "changes": []}, {"oldPath": "src/control/fix.lean", "newPath": "src/control/fix.lean", "changes": []}, {"oldPath": "src/control/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": []}, {"oldPath": "src/control/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": []}, {"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/numeral.lean", "newPath": "src/data/buffer/parser/numeral.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/embedding.lean", "newPath": "src/data/equiv/embedding.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/int/absolute_value.lean", "newPath": "src/data/int/absolute_value.lean", "changes": []}, {"oldPath": "src/data/int/interval.lean", "newPath": "src/data/int/interval.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/list/duplicate.lean", "newPath": "src/data/list/duplicate.lean", "changes": []}, {"oldPath": "src/data/list/prod_monoid.lean", "newPath": "src/data/list/prod_monoid.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": []}, {"oldPath": "src/data/matrix/hadamard.lean", "newPath": "src/data/matrix/hadamard.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose/central.lean", "newPath": "src/data/nat/choose/central.lean", "changes": []}, {"oldPath": "src/data/nat/choose/vandermonde.lean", "newPath": "src/data/nat/choose/vandermonde.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/M.lean", "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/basic.lean", "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": []}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": []}, {"oldPath": "src/data/sym/card.lean", "newPath": "src/data/sym/card.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": []}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/separable_degree.lean", "newPath": "src/field_theory/separable_degree.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/coevaluation.lean", "newPath": "src/linear_algebra/coevaluation.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/basic.lean", "newPath": "src/linear_algebra/matrix/charpoly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/polynomial.lean", "newPath": "src/linear_algebra/matrix/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product_basis.lean", "newPath": "src/linear_algebra/tensor_product_basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": []}, {"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_sequence.lean", "newPath": "src/measure_theory/function/ae_measurable_sequence.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/complex.lean", "newPath": "src/measure_theory/measure/complex.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/expr_lens.lean", "newPath": "src/meta/expr_lens.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_abs.lean", "newPath": "src/number_theory/class_number/admissible_abs.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_absolute_value.lean", "newPath": "src/number_theory/class_number/admissible_absolute_value.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_primality.lean", "newPath": "src/number_theory/lucas_primality.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": []}, {"oldPath": "src/probability_theory/notation.lean", "newPath": "src/probability_theory/notation.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/polynomial.lean", "newPath": "src/ring_theory/adjoin/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/fintype.lean", "newPath": "src/ring_theory/fintype.lean", "changes": []}, {"oldPath": "src/ring_theory/flat.lean", "newPath": "src/ring_theory/flat.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/nakayama.lean", "newPath": "src/ring_theory/nakayama.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}, {"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": []}, {"oldPath": "src/tactic/choose.lean", "newPath": "src/tactic/choose.lean", "changes": []}, {"oldPath": "src/tactic/clear.lean", "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "src/tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/dependencies.lean", "newPath": "src/tactic/dependencies.lean", "changes": []}, {"oldPath": "src/tactic/elementwise.lean", "newPath": "src/tactic/elementwise.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/find_unused.lean", "newPath": "src/tactic/find_unused.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/linarith/datatypes.lean", "newPath": "src/tactic/linarith/datatypes.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/nth_rewrite/congr.lean", "newPath": "src/tactic/nth_rewrite/congr.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/basic.lean", "newPath": "src/tactic/rewrite_all/basic.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_search/search.lean", "newPath": "src/tactic/rewrite_search/search.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/zify.lean", "newPath": "src/tactic/zify.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/bases.lean", "newPath": "src/topology/algebra/nonarchimedean/bases.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/locally_constant.lean", "newPath": "src/topology/continuous_function/locally_constant.lean", "changes": []}, {"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/irrational.lean", "newPath": "src/topology/instances/irrational.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/algebra.lean", "newPath": "src/topology/metric_space/algebra.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}, {"oldPath": "test/monotonicity/test_cases.lean", "newPath": "test/monotonicity/test_cases.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}, {"oldPath": "test/slim_check.lean", "newPath": "test/slim_check.lean", "changes": []}]}, {"timestamp": 1637312187, "sha": "5000fb02", "message": "feat(data/polynomial/eval): is_root_(prod/map) (#10360)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eq_zero", ["polynomial", "is_root"]], ["add", "theorem", "map", ["polynomial", "is_root"]], ["add", "theorem", "of_map", ["polynomial", "is_root"]], ["add", "theorem", "is_root_map_iff", ["polynomial"]], ["add", "theorem", "is_root_prod", ["polynomial"]]]}]}, {"timestamp": 1637308902, "sha": "784fe06d", "message": "feat(analysis/calculus/deriv): generalize lemmas about deriv and `smul` (#10378)\nAllow scalar multiplication by numbers from a different field.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_const_smul", []], ["mod", "theorem", "const_smul", ["has_deriv_at"]], ["add", "theorem", "const_smul", ["has_deriv_at_filter"]], ["add", "theorem", "has_deriv_at_mul_const", []], ["add", "theorem", "const_smul", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}]}, {"timestamp": 1637272101, "sha": "f3f44425", "message": "feat(logic/basic): define exists_unique_eq as a simp lemma (#10364)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_unique_eq'", []], ["add", "theorem", "exists_unique_eq", []]]}]}, {"timestamp": 1637268763, "sha": "d5d2c4f6", "message": "feat(field_theory/splitting_field): add a more general algebra instance as a def (#10220)\nUnfortunately this def results in the following non-defeq diamonds in `splitting_field_aux.algebra` and `splitting_field.algebra`:\n```lean\nexample\n (n : ℕ) {K : Type u} [field K] {f : polynomial K} (hfn : f.nat_degree = n) :\n (add_comm_monoid.nat_module : module ℕ (splitting_field_aux n f hfn)) =\n @algebra.to_module _ _ _ _ (splitting_field_aux.algebra n _ hfn) :=\nrfl --fail\nexample : (add_comm_group.int_module _ : module ℤ (splitting_field_aux n f hfn)) =\n @algebra.to_module _ _ _ _ (splitting_field_aux.algebra f) :=\nrfl --fail\n```\nFor this reason, we do not make `splitting_field.algebra` an instance by default. The `splitting_field_aux.algebra` instance is less harmful as it is an implementation detail.\nHowever, the new def is still perfectly good for recovering the old less-general instance, and avoids the need for `restrict_scalars.algebra`.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "theorem", "algebra_map_eq'", ["adjoin_root"]]]}]}, {"timestamp": 1637255235, "sha": "96540719", "message": "feat(topology/algebra/module): add `is_scalar_tower` and `smul_comm_class` instances for `continuous_linear_map` (#10375)\nAlso generalize some instances about `smul`.", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1637250636, "sha": "0d09e993", "message": "feat(measure_theory/integral/{set_to_l1,bochner}): generalize results about integrals to `set_to_fun` (#10369)\nThe Bochner integral is a particular case of the `set_to_fun` construction. We generalize some lemmas which were proved for integrals to `set_to_fun`, notably the Lebesgue dominated convergence theorem.", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["add", "theorem", "norm_set_to_L1_le'", ["measure_theory", "L1"]], ["add", "theorem", "norm_set_to_L1_le", ["measure_theory", "L1"]], ["add", "theorem", "norm_set_to_L1_le_mul_norm'", ["measure_theory", "L1"]], ["add", "theorem", "norm_set_to_L1_le_mul_norm", ["measure_theory", "L1"]], ["add", "theorem", "norm_set_to_L1_le_norm_set_to_L1s_clm", ["measure_theory", "L1"]], ["mod", "theorem", "set_to_L1_eq_set_to_L1s_clm", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_lipschitz", ["measure_theory", "L1"]], ["add", "theorem", "norm_set_to_L1s_clm_le'", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_set_to_L1s_clm_le", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "tendsto_set_to_L1", ["measure_theory", "L1"]], ["add", "theorem", "continuous_at_set_to_fun_of_dominated", ["measure_theory"]], ["add", "theorem", "continuous_set_to_fun", ["measure_theory"]], ["add", "theorem", "continuous_set_to_fun_of_dominated", ["measure_theory"]], ["add", "theorem", "norm_set_to_fun_le'", ["measure_theory"]], ["add", "theorem", "norm_set_to_fun_le", ["measure_theory"]], ["add", "theorem", "norm_set_to_fun_le_mul_norm'", ["measure_theory"]], ["add", "theorem", "norm_set_to_fun_le_mul_norm", ["measure_theory"]], ["add", "theorem", "set_to_fun_to_L1", ["measure_theory"]], ["add", "theorem", "tendsto_set_to_fun_filter_of_dominated_convergence", ["measure_theory"]], ["add", "theorem", "tendsto_set_to_fun_of_dominated_convergence", ["measure_theory"]]]}]}, {"timestamp": 1637246518, "sha": "0ededd5d", "message": "chore(analysis/calculus): use `is_R_or_C` in several lemmas (#10376)", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["mod", "theorem", "exists_nhds_within_lipschitz_on_with_of_has_fderiv_within_at", ["convex"]], ["mod", "theorem", "exists_nhds_within_lipschitz_on_with_of_has_fderiv_within_at_of_nnnorm_lt", ["convex"]], ["mod", "theorem", "is_const_of_fderiv_within_eq_zero", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_nnnorm_deriv_le", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_nnnorm_deriv_within_le", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_nnnorm_fderiv_le", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_nnnorm_fderiv_within_le", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_nnnorm_has_deriv_within_le", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_nnnorm_has_fderiv_within_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_deriv_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_deriv_within_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_le'", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_within_le'", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_within_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_has_deriv_within_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_has_fderiv_within_le'", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_has_fderiv_within_le", ["convex"]], ["mod", "theorem", "is_const_of_fderiv_eq_zero", []]]}]}, {"timestamp": 1637239691, "sha": "198ed6bb", "message": "doc(order/monotone): fix 2 typos (#10377)", "changes": [{"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": []}]}, {"timestamp": 1637202970, "sha": "2f3b1852", "message": "chore(scripts): update nolints.txt (#10374)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1637176283, "sha": "f8cbb3e4", "message": "chore(.docker): don't install unnecessary toolchains (#10363)", "changes": [{"oldPath": ".docker/debian/lean/Dockerfile", "newPath": ".docker/debian/lean/Dockerfile", "changes": []}, {"oldPath": ".docker/gitpod/mathlib/Dockerfile", "newPath": ".docker/gitpod/mathlib/Dockerfile", "changes": []}]}, {"timestamp": 1637176282, "sha": "5d1363ea", "message": "feat(data/nat/parity): add lemmas (#10352)\nFrom FLT-regular.", "changes": [{"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "even_mul_self_pred", ["nat"]], ["add", "theorem", "even_sub_one_of_prime_ne_two", ["nat"]]]}]}, {"timestamp": 1637172931, "sha": "276ab17f", "message": "feat(linear_algebra/bilinear_form): add lemmas (#10353)\nFrom FLT-regular.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "to_matrix'", ["bilin_form", "nondegenerate"]], ["add", "theorem", "to_matrix", ["bilin_form", "nondegenerate"]], ["add", "theorem", "nondegenerate_iff_det_ne_zero", ["bilin_form"]], ["del", "theorem", "nondegenerate_of_det_ne_zero'", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_bilin'_iff_det_ne_zero", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_bilin'_of_det_ne_zero'", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_matrix'_iff", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_matrix_iff", ["bilin_form"]], ["add", "theorem", "nondegenerate_to_bilin'_iff", ["matrix"]], ["add", "theorem", "nondegenerate_to_bilin'_iff_nondegenerate_to_bilin", ["matrix"]], ["add", "theorem", "nondegenerate_to_bilin_iff", ["matrix"]]]}]}, {"timestamp": 1637163457, "sha": "6f793bb0", "message": "chore(measure_theory/group/basic): drop measurability assumption (#10367)", "changes": [{"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": [["mod", "theorem", "inv_apply", ["measure_theory", "measure"]]]}]}, {"timestamp": 1637160360, "sha": "e14e87ae", "message": "chore(category_theory/filtered): slightly golf two proofs (#10368)", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}]}, {"timestamp": 1637139729, "sha": "c7441af1", "message": "feat(linear_algebra/bilinear_form): add lemmas about congr (#10362)\nWith these some of the `nondegenerate` proofs can be golfed to oblivion, rather than reproving variants of the same statement over and over again.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "comp_congr", ["bilin_form"]], ["mod", "theorem", "congr_comp", ["bilin_form"]], ["add", "theorem", "congr_congr", ["bilin_form"]], ["add", "theorem", "congr_refl", ["bilin_form"]], ["add", "theorem", "congr_trans", ["bilin_form"]], ["add", "theorem", "congr", ["bilin_form", "nondegenerate"]], ["add", "theorem", "nondegenerate_congr_iff", ["bilin_form"]], ["add", "theorem", "to_bilin", ["matrix", "nondegenerate"]]]}]}, {"timestamp": 1637139728, "sha": "568435cb", "message": "chore(analysis/inner_product_space/projection): typeclass inference for completeness (#10357)\nAs of #5408, most lemmas about orthogonal projection onto a subspace `K` / reflection through a subspace `K` / orthogonal complement of `K` which require `K` to be complete phrase this in terms of `complete_space K` rather than `is_complete K`, so that it can be found by typeclass inference. A few still used the old way; this PR completes the switch.", "changes": [{"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "sub_orthogonal_projection_mem_orthogonal", []], ["add", "theorem", "is_compl_orthogonal_of_complete_space", ["submodule"]], ["del", "theorem", "is_compl_orthogonal_of_is_complete", ["submodule"]], ["mod", "theorem", "orthogonal_eq_bot_iff", ["submodule"]], ["add", "theorem", "sup_orthogonal_inf_of_complete_space", ["submodule"]], ["del", "theorem", "sup_orthogonal_inf_of_is_complete", ["submodule"]], ["del", "theorem", "sup_orthogonal_of_is_complete", ["submodule"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1637139727, "sha": "d5c2b34c", "message": "chore(analysis/mean_inequalities): split mean_inequalities into two files (#10355)\nThis PR puts all results related to power functions into a new file.\nCurrently, we prove convexity of `exp` and `pow`, then use those properties in `mean_inequalities`. I am refactoring some parts of the analysis library to reduce the use of derivatives. I want to prove convexity of exp without derivatives (in a future PR), prove Holder's inequality, then use it to prove the convexity of pow. This requires Holder's inequality to be in a file that does not use convexity of pow, hence the split.\nI needed to change the proof of Holder's inequality since it used the generalized mean inequality (hence `pow`). I switched to the second possible proof mentioned in the file docstring.\nI also moved some lemmas in `mean_inequalities` to have three main sections: AM-GM, then Young and a final section with Holder and Minkowski.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["del", "theorem", "add_rpow_le_rpow_add", ["ennreal"]], ["del", "theorem", "rpow_add_le_add_rpow", ["ennreal"]], ["del", "theorem", "rpow_add_rpow_le", ["ennreal"]], ["del", "theorem", "rpow_add_rpow_le_add", ["ennreal"]], ["del", "theorem", "rpow_arith_mean_le_arith_mean2_rpow", ["ennreal"]], ["del", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["ennreal"]], ["del", "theorem", "arith_mean_le_rpow_mean", ["nnreal"]], ["del", "theorem", "pow_arith_mean_le_arith_mean_pow", ["nnreal"]], ["del", "theorem", "rpow_arith_mean_le_arith_mean2_rpow", ["nnreal"]], ["del", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["nnreal"]], ["del", "theorem", "arith_mean_le_rpow_mean", ["real"]], ["del", "theorem", "pow_arith_mean_le_arith_mean_pow", ["real"]], ["del", "theorem", "pow_arith_mean_le_arith_mean_pow_of_even", ["real"]], ["del", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["real"]], ["del", "theorem", "zpow_arith_mean_le_arith_mean_zpow", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/mean_inequalities_pow.lean", "changes": [["add", "theorem", "add_rpow_le_rpow_add", ["ennreal"]], ["add", "theorem", "rpow_add_le_add_rpow", ["ennreal"]], ["add", "theorem", "rpow_add_rpow_le", ["ennreal"]], ["add", "theorem", "rpow_add_rpow_le_add", ["ennreal"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean2_rpow", ["ennreal"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["ennreal"]], ["add", "theorem", "arith_mean_le_rpow_mean", ["nnreal"]], ["add", "theorem", "pow_arith_mean_le_arith_mean_pow", ["nnreal"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean2_rpow", ["nnreal"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["nnreal"]], ["add", "theorem", "arith_mean_le_rpow_mean", ["real"]], ["add", "theorem", "pow_arith_mean_le_arith_mean_pow", ["real"]], ["add", "theorem", "pow_arith_mean_le_arith_mean_pow_of_even", ["real"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["real"]], ["add", "theorem", "zpow_arith_mean_le_arith_mean_zpow", ["real"]]]}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}]}, {"timestamp": 1637139725, "sha": "60363a4e", "message": "feat(finset/basic): Adding `list.to_finset_union` and `list.to_finset_inter` (#10351)\nTwo tiny lemmas, matching their counterparts for `multiset`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_finset_inter", ["list"]], ["add", "theorem", "to_finset_union", ["list"]]]}]}, {"timestamp": 1637132772, "sha": "8f6fd1b6", "message": "lint(*): curly braces linter (#10280)\nThis PR:\n1. Adds a style linter for curly braces: a line shall never end with `{` or start with `}` (modulo white space)\n2. Adds `scripts/cleanup-braces.{sh,py}` to reflow lines that violate (1)\n3. Runs the scripts from (2) to generate a boatload of changes in mathlib\n4. Fixes one line that became to long due to (3)", "changes": [{"oldPath": "archive/imo/imo1960_q1.lean", "newPath": "archive/imo/imo1960_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": null, "newPath": "scripts/cleanup-braces.py", "changes": []}, {"oldPath": null, "newPath": "scripts/cleanup-braces.sh", "changes": []}, {"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "def", "semiring_to_ring", ["algebra"]]]}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/pushout.lean", "newPath": "src/algebra/category/CommRing/pushout.lean", "changes": [["mod", "theorem", "pushout_cocone_X", ["CommRing"]], ["mod", "theorem", "pushout_cocone_inl", ["CommRing"]], ["mod", "theorem", "pushout_cocone_inr", ["CommRing"]]]}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/adjunctions.lean", "newPath": "src/algebra/category/Mon/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/lattice_ordered_group.lean", "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/rigid.lean", "newPath": "src/category_theory/monoidal/rigid.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheafification.lean", "newPath": "src/category_theory/sites/sheafification.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/numeral.lean", "newPath": "src/data/buffer/parser/numeral.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/functor.lean", "newPath": "src/data/multiset/functor.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/M.lean", "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/const.lean", "newPath": "src/data/qpf/multivariate/constructions/const.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/sigma.lean", "newPath": "src/data/qpf/multivariate/constructions/sigma.lean", "changes": []}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/rbmap/default.lean", "newPath": "src/data/rbmap/default.lean", "changes": []}, {"oldPath": "src/data/rbtree/basic.lean", "newPath": "src/data/rbtree/basic.lean", "changes": []}, {"oldPath": "src/data/rbtree/find.lean", "newPath": "src/data/rbtree/find.lean", "changes": []}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": []}, {"oldPath": "src/data/rbtree/main.lean", "newPath": "src/data/rbtree/main.lean", "changes": []}, {"oldPath": "src/data/rbtree/min_max.lean", "newPath": "src/data/rbtree/min_max.lean", "changes": []}, {"oldPath": "src/data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/vector3.lean", "newPath": "src/data/vector3.lean", "changes": []}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/polynomial.lean", "newPath": "src/linear_algebra/matrix/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basis.lean", "newPath": "src/linear_algebra/multilinear/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "src/meta/expr_lens.lean", "newPath": "src/meta/expr_lens.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/apply.lean", "newPath": "src/tactic/apply.lean", "changes": []}, {"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/converter/apply_congr.lean", "newPath": "src/tactic/converter/apply_congr.lean", "changes": []}, {"oldPath": "src/tactic/converter/old_conv.lean", "newPath": "src/tactic/converter/old_conv.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/dependencies.lean", "newPath": "src/tactic/dependencies.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/fresh_names.lean", "newPath": "src/tactic/fresh_names.lean", "changes": []}, {"oldPath": "src/tactic/generalizes.lean", "newPath": "src/tactic/generalizes.lean", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/induction.lean", "newPath": "src/tactic/induction.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}, {"oldPath": "src/tactic/itauto.lean", "newPath": "src/tactic/itauto.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/lint/basic.lean", "newPath": "src/tactic/lint/basic.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}, {"oldPath": "src/tactic/simp_command.lean", "newPath": "src/tactic/simp_command.lean", "changes": []}, {"oldPath": "src/tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/tactic/transfer.lean", "newPath": "src/tactic/transfer.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "src/tactic/unify_equations.lean", "newPath": "src/tactic/unify_equations.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}, {"oldPath": "src/topology/tactic.lean", "newPath": "src/topology/tactic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1637124714, "sha": "2bdadb4f", "message": "feat(order/imp): define `lattice.imp` and `lattice.biimp` (#10327)", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["mod", "theorem", "sdiff_eq_bot_iff", []]]}, {"oldPath": null, "newPath": "src/order/imp.lean", "changes": [["add", "def", "biimp", ["lattice"]], ["add", "theorem", "biimp_comm", ["lattice"]], ["add", "theorem", "biimp_eq_iff", ["lattice"]], ["add", "theorem", "biimp_eq_top_iff", ["lattice"]], ["add", "theorem", "biimp_mp", ["lattice"]], ["add", "theorem", "biimp_mpr", ["lattice"]], ["add", "theorem", "biimp_self", ["lattice"]], ["add", "theorem", "biimp_symm", ["lattice"]], ["add", "theorem", "bot_imp", ["lattice"]], ["add", "theorem", "compl_biimp", ["lattice"]], ["add", "theorem", "compl_biimp_compl", ["lattice"]], ["add", "theorem", "compl_imp", ["lattice"]], ["add", "theorem", "compl_imp_compl", ["lattice"]], ["add", "theorem", "compl_sdiff", ["lattice"]], ["add", "theorem", "compl_symm_diff", ["lattice"]], ["add", "def", "imp", ["lattice"]], ["add", "theorem", "imp_bot", ["lattice"]], ["add", "theorem", "imp_eq_arrow", ["lattice"]], ["add", "theorem", "imp_eq_bot_iff", ["lattice"]], ["add", "theorem", "imp_eq_top_iff", ["lattice"]], ["add", "theorem", "imp_inf_le", ["lattice"]], ["add", "theorem", "imp_mono", ["lattice"]], ["add", "theorem", "imp_self", ["lattice"]], ["add", "theorem", "imp_top", ["lattice"]], ["add", "theorem", "inf_imp_eq", ["lattice"]], ["add", "theorem", "inf_imp_eq_imp_imp", ["lattice"]], ["add", "theorem", "le_imp_iff", ["lattice"]], ["add", "theorem", "top_imp", ["lattice"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1637106486, "sha": "0a2a9229", "message": "feat(combinatorics/set_family/shadow): Shadow of a set family (#10223)\nThis defines `shadow 𝒜` where `𝒜 : finset (finset α))`.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/set_family/shadow.lean", "changes": [["add", "theorem", "erase_mem_shadow", ["finset"]], ["add", "theorem", "exists_subset_of_mem_shadow", ["finset"]], ["add", "theorem", "mem_shadow_iff", ["finset"]], ["add", "theorem", "mem_shadow_iff_exists_mem_card_add", ["finset"]], ["add", "theorem", "mem_shadow_iff_exists_mem_card_add_one", ["finset"]], ["add", "theorem", "mem_shadow_iff_insert_mem", ["finset"]], ["add", "def", "shadow", ["finset"]], ["add", "theorem", "shadow_empty", ["finset"]], ["add", "theorem", "shadow_monotone", ["finset"]]]}]}, {"timestamp": 1637106485, "sha": "7fec4014", "message": "feat(topology/metric_space/hausdorff_distance): add definition and lemmas about open thickenings of subsets (#10188)\nAdd definition and basic API about open thickenings of subsets in metric spaces, in preparation for the portmanteau theorem on characterizations of weak convergence of Borel probability measures.", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "is_open_thickening", ["metric"]], ["add", "theorem", "mem_thickening_iff", ["metric"]], ["add", "def", "thickening", ["metric"]], ["add", "theorem", "thickening_empty", ["metric"]], ["add", "theorem", "thickening_eq_bUnion_ball", ["metric"]], ["add", "theorem", "thickening_eq_preimage_inf_edist", ["metric"]], ["add", "theorem", "thickening_mono", ["metric"]], ["add", "theorem", "thickening_subset_of_subset", ["metric"]]]}]}, {"timestamp": 1637099822, "sha": "bce0ede7", "message": "feat(number_theory/divisors): mem_divisors_self (#10359)\nFrom flt-regular.", "changes": [{"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "mem_divisors_self", ["nat"]]]}]}, {"timestamp": 1637099820, "sha": "8f7971ae", "message": "refactor(linear_algebra/bilinear_form): Change namespace of is_refl, is_symm, and is_alt (#10338)\nThe propositions `is_refl`, `is_symm`, and `is_alt` are now in the\nnamespace `bilin_form`. Moreover, `is_sym` is now renamed to `is_symm`.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["del", "def", "is_alt", ["alt_bilin_form"]], ["del", "theorem", "is_refl", ["alt_bilin_form"]], ["del", "theorem", "neg", ["alt_bilin_form"]], ["del", "theorem", "ortho_sym", ["alt_bilin_form"]], ["del", "theorem", "self_eq_zero", ["alt_bilin_form"]], ["add", "theorem", "is_refl", ["bilin_form", "is_alt"]], ["add", "theorem", "neg", ["bilin_form", "is_alt"]], ["add", "theorem", "ortho_comm", ["bilin_form", "is_alt"]], ["add", "theorem", "self_eq_zero", ["bilin_form", "is_alt"]], ["add", "def", "is_alt", ["bilin_form"]], ["add", "theorem", "eq_zero", ["bilin_form", "is_refl"]], ["add", "theorem", "ortho_comm", ["bilin_form", "is_refl"]], ["add", "def", "is_refl", ["bilin_form"]], ["add", "theorem", "is_refl", ["bilin_form", "is_symm"]], ["add", "theorem", "ortho_comm", ["bilin_form", "is_symm"]], ["add", "def", "is_symm", ["bilin_form"]], ["add", "theorem", "is_symm_iff_flip'", ["bilin_form"]], ["mod", "theorem", "le_orthogonal_orthogonal", ["bilin_form"]], ["del", "theorem", "restrict_sym", ["bilin_form"]], ["add", "theorem", "restrict_symm", ["bilin_form"]], ["del", "theorem", "eq_zero", ["refl_bilin_form"]], ["del", "def", "is_refl", ["refl_bilin_form"]], ["del", "theorem", "ortho_sym", ["refl_bilin_form"]], ["del", "theorem", "is_refl", ["sym_bilin_form"]], ["del", "def", "is_sym", ["sym_bilin_form"]], ["del", "theorem", "is_sym_iff_flip'", ["sym_bilin_form"]], ["del", "theorem", "ortho_sym", ["sym_bilin_form"]], ["del", "theorem", "sym", ["sym_bilin_form"]]]}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["del", "theorem", "associated_is_sym", ["quadratic_form"]], ["add", "theorem", "associated_is_symm", ["quadratic_form"]], ["mod", "theorem", "associated_left_inverse", ["quadratic_form"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["del", "theorem", "trace_form_is_sym", ["algebra"]], ["add", "theorem", "trace_form_is_symm", ["algebra"]]]}]}, {"timestamp": 1637099819, "sha": "698eb1e3", "message": "feat(data/fin/basic): add lemmas about fin.cast (#10329)", "changes": [{"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "add_nat_cast", ["fin"]], ["add", "theorem", "cast_add_cast", ["fin"]], ["add", "theorem", "cast_add_nat_left", ["fin"]], ["add", "theorem", "cast_add_nat_right", ["fin"]], ["add", "theorem", "cast_add_nat_zero", ["fin"]], ["add", "theorem", "cast_cast_add_left", ["fin"]], ["add", "theorem", "cast_cast_add_right", ["fin"]], ["add", "theorem", "cast_nat_add_left", ["fin"]], ["add", "theorem", "cast_nat_add_right", ["fin"]], ["add", "theorem", "cast_nat_add_zero", ["fin"]], ["add", "theorem", "cast_succ_eq", ["fin"]], ["add", "theorem", "nat_add_cast", ["fin"]], ["add", "theorem", "succ_cast_eq", ["fin"]]]}]}, {"timestamp": 1637088275, "sha": "9fa14a60", "message": "feat(topology/uniform_space): properties of uniform convergence (#9958)\n* From the sphere eversion project\n* multiple proofs were golfed by @PatrickMassot \n* Probably some proofs can be golfed quite heavily\nCo-authored by: Patrick Massot ", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "imp_forall_iff", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "mem_prod_principal", ["filter"]], ["add", "theorem", "mem_prod_top", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": [["add", "theorem", "tendsto_uniformly", ["continuous"]], ["add", "theorem", "tendsto_uniformly", ["continuous_on"]]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["add", "theorem", "eq_of_uniform_continuous", ["is_separated"]], ["add", "theorem", "mono", ["is_separated"]], ["add", "theorem", "prod", ["is_separated"]]]}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "tendsto_prod_top_iff", []], ["add", "theorem", "tendsto_uniformly_iff_tendsto", []], ["add", "theorem", "tendsto_uniformly_on_iff_tendsto", []], ["add", "theorem", "tendsto_uniformly", ["uniform_continuous_on"]], ["add", "theorem", "tendsto_uniformly", ["uniform_continuous₂"]]]}]}, {"timestamp": 1637088274, "sha": "d6b83d87", "message": "feat(number_theory): define the class number (#9071)\nWe instantiate the finiteness proof of the class group for rings of integers, and define the class number of a number field, or of a separable function field, as the finite cardinality of the class group.\nCo-Authored-By: Ashvni \nCo-Authored-By: Filippo A. E. Nuccio ", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "normalize_monic", ["polynomial"]]]}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": null, "newPath": "src/number_theory/class_number/function_field.lean", "changes": [["add", "theorem", "class_number_eq_one_iff", ["function_field"]]]}, {"oldPath": null, "newPath": "src/number_theory/class_number/number_field.lean", "changes": [["add", "theorem", "class_number_eq_one_iff", ["number_field"]], ["add", "theorem", "class_number_eq", ["rat"]]]}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/number_field.lean", "newPath": "src/number_theory/number_field.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "ufm_of_gcd_of_wf_dvd_monoid", []]]}]}, {"timestamp": 1637078253, "sha": "f7807881", "message": "feat(dynamics): define `{mul,add}_action.is_minimal` (#10311)", "changes": [{"oldPath": null, "newPath": "src/dynamics/minimal.lean", "changes": [["add", "theorem", "dense_of_nonempty_smul_invariant", []], ["add", "theorem", "dense_range_smul", []], ["add", "theorem", "eq_empty_or_univ_of_smul_invariant_closed", []], ["add", "theorem", "exists_finite_cover_smul", ["is_compact"]], ["add", "theorem", "is_minimal_iff_closed_smul_invariant", []], ["add", "theorem", "Union_preimage_smul", ["is_open"]], ["add", "theorem", "Union_smul", ["is_open"]], ["add", "theorem", "exists_smul_mem", ["is_open"]], ["add", "theorem", "dense_orbit", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "orbit_nonempty", ["mul_action"]]]}]}, {"timestamp": 1637066936, "sha": "d36f17f8", "message": "feat(linear_algebra/sesquilinear_form): Add is_refl for sesq_form.is_alt (#10341)\nLemma `is_refl` shows that an alternating sesquilinear form is reflexive.\nRefactored `sesquilinear_form` in a similar way as `bilinear_form` will be in #10338.", "changes": [{"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["del", "def", "is_alt", ["alt_sesq_form"]], ["del", "theorem", "neg", ["alt_sesq_form"]], ["del", "theorem", "self_eq_zero", ["alt_sesq_form"]], ["del", "theorem", "eq_zero", ["refl_sesq_form"]], ["del", "def", "is_refl", ["refl_sesq_form"]], ["del", "theorem", "ortho_sym", ["refl_sesq_form"]], ["add", "theorem", "is_refl", ["sesq_form", "is_alt"]], ["add", "theorem", "neg", ["sesq_form", "is_alt"]], ["add", "theorem", "ortho_comm", ["sesq_form", "is_alt"]], ["add", "theorem", "self_eq_zero", ["sesq_form", "is_alt"]], ["add", "def", "is_alt", ["sesq_form"]], ["add", "theorem", "eq_zero", ["sesq_form", "is_refl"]], ["add", "theorem", "ortho_comm", ["sesq_form", "is_refl"]], ["add", "def", "is_refl", ["sesq_form"]], ["add", "theorem", "is_refl", ["sesq_form", "is_symm"]], ["add", "theorem", "ortho_comm", ["sesq_form", "is_symm"]], ["add", "def", "is_symm", ["sesq_form"]], ["del", "theorem", "is_refl", ["sym_sesq_form"]], ["del", "def", "is_sym", ["sym_sesq_form"]], ["del", "theorem", "ortho_sym", ["sym_sesq_form"]], ["del", "theorem", "sym", ["sym_sesq_form"]]]}]}, {"timestamp": 1637066935, "sha": "7f4b91b0", "message": "feat(linear_algebra/determinant): the determinant associated to the standard basis of the free module is the usual matrix determinant (#10278)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "basis_fun_det", ["pi"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "to_matrix_eq_transpose", ["basis", "coe_pi_basis_fun"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "def", "det_row_alternating", ["matrix"]], ["del", "def", "det_row_multilinear", ["matrix"]]]}]}, {"timestamp": 1637066934, "sha": "e20af159", "message": "feat(field_theory): define the field of rational functions `ratfunc` (#9563)\nThis PR defines `ratfunc K` as the field of rational functions over a field `K`, in terms of `fraction_ring (polynomial K)`. I have been careful to use `structure`s and `@[irreducible] def`s. Not only does that make for a nicer API, it also helps quite a bit with unification since the check can stop at `ratfunc` and doesn't have to start unfolding along the lines of `fraction_field.field → localization.comm_ring → localization.comm_monoid → localization.has_mul` and/or `polynomial.integral_domain → polynomial.comm_ring → polynomial.ring → polynomial.semiring`.\nMost of the API is automatically derived from the (components of the) `is_fraction_ring` instance: the map `polynomial K → ratpoly K` is `algebra_map`, the isomorphism to `fraction_ring (polynomial K)` is `is_localization.alg_equiv`, ...\nAs a first application to verify that the definitions work, I rewrote `function_field` in terms of `ratfunc`.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/field_theory/ratfunc.lean", "changes": [["add", "def", "C", ["ratfunc"]], ["add", "def", "X", ["ratfunc"]], ["add", "theorem", "algebra_map_C", ["ratfunc"]], ["add", "theorem", "algebra_map_X", ["ratfunc"]], ["add", "theorem", "algebra_map_comp_C", ["ratfunc"]], ["add", "theorem", "algebra_map_eq_C", ["ratfunc"]], ["add", "theorem", "algebra_map_eq_zero_iff", ["ratfunc"]], ["add", "theorem", "algebra_map_injective", ["ratfunc"]], ["add", "theorem", "algebra_map_ne_zero", ["ratfunc"]], ["add", "def", "aux_equiv", ["ratfunc"]], ["add", "theorem", "aux_equiv_eq", ["ratfunc"]], ["add", "def", "denom", ["ratfunc"]], ["add", "theorem", "denom_C", ["ratfunc"]], ["add", "theorem", "denom_X", ["ratfunc"]], ["add", "theorem", "denom_add_dvd", ["ratfunc"]], ["add", "theorem", "denom_algebra_map", ["ratfunc"]], ["add", "theorem", "denom_div", ["ratfunc"]], ["add", "theorem", "denom_div_dvd", ["ratfunc"]], ["add", "theorem", "denom_dvd", ["ratfunc"]], ["add", "theorem", "denom_mul_dvd", ["ratfunc"]], ["add", "theorem", "denom_ne_zero", ["ratfunc"]], ["add", "theorem", "denom_one", ["ratfunc"]], ["add", "theorem", "denom_zero", ["ratfunc"]], ["add", "def", "eval", ["ratfunc"]], ["add", "theorem", "eval_C", ["ratfunc"]], ["add", "theorem", "eval_X", ["ratfunc"]], ["add", "theorem", "eval_add", ["ratfunc"]], ["add", "theorem", "eval_algebra_map", ["ratfunc"]], ["add", "theorem", "eval_eq_zero_of_eval₂_denom_eq_zero", ["ratfunc"]], ["add", "theorem", "eval_mul", ["ratfunc"]], ["add", "theorem", "eval_one", ["ratfunc"]], ["add", "theorem", "eval_zero", ["ratfunc"]], ["add", "theorem", "eval₂_denom_ne_zero", ["ratfunc"]], ["add", "theorem", "lift_on'_div", ["ratfunc"]], ["add", "theorem", "lift_on'_mk", ["ratfunc"]], ["add", "theorem", "lift_on_div", ["ratfunc"]], ["add", "theorem", "lift_on_mk", ["ratfunc"]], ["add", "theorem", "mk_coe_def", ["ratfunc"]], ["add", "theorem", "mk_def_of_mem", ["ratfunc"]], ["add", "theorem", "mk_def_of_ne", ["ratfunc"]], ["add", "theorem", "mk_eq_div'", ["ratfunc"]], ["add", "theorem", "mk_eq_div", ["ratfunc"]], ["add", "theorem", "mk_eq_localization_mk", ["ratfunc"]], ["add", "theorem", "mk_eq_mk", ["ratfunc"]], ["add", "theorem", "mk_one'", ["ratfunc"]], ["add", "theorem", "mk_one", ["ratfunc"]], ["add", "theorem", "mk_smul", ["ratfunc"]], ["add", "theorem", "mk_zero", ["ratfunc"]], ["add", "theorem", "monic_denom", ["ratfunc"]], ["add", "theorem", "mul_inv_cancel", ["ratfunc"]], ["add", "def", "num", ["ratfunc"]], ["add", "theorem", "num_C", ["ratfunc"]], ["add", "theorem", "num_X", ["ratfunc"]], ["add", "theorem", "num_algebra_map", ["ratfunc"]], ["add", "def", "num_denom", ["ratfunc"]], ["add", "theorem", "num_denom_add", ["ratfunc"]], ["add", "theorem", "num_denom_div", ["ratfunc"]], ["add", "theorem", "num_denom_mul", ["ratfunc"]], ["add", "theorem", "num_div", ["ratfunc"]], ["add", "theorem", "num_div_denom", ["ratfunc"]], ["add", "theorem", "num_div_dvd", ["ratfunc"]], ["add", "theorem", "num_dvd", ["ratfunc"]], ["add", "theorem", "num_eq_zero_iff", ["ratfunc"]], ["add", "theorem", "num_mul_dvd", ["ratfunc"]], ["add", "theorem", "num_mul_eq_mul_denom_iff", ["ratfunc"]], ["add", "theorem", "num_ne_zero", ["ratfunc"]], ["add", "theorem", "num_one", ["ratfunc"]], ["add", "theorem", "num_zero", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_add", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_algebra_map", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_comp_algebra_map", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_div", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_eq", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_injective", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_inv", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_mk'", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_mul", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_neg", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_one", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_sub", ["ratfunc"]], ["add", "theorem", "of_fraction_ring_zero", ["ratfunc"]], ["add", "theorem", "to_fraction_ring_eq", ["ratfunc"]], ["add", "theorem", "to_fraction_ring_injective", ["ratfunc"]], ["add", "structure", "ratfunc", []]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": [["mod", "def", "function_field", []]]}]}, {"timestamp": 1637051856, "sha": "f01399c4", "message": "chore(order/filter/basic): add 2 trivial `simp` lemmas (#10344)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually_eq_univ", ["filter"]], ["add", "theorem", "eventually_mem_set", ["filter"]]]}]}, {"timestamp": 1637051855, "sha": "1181c990", "message": "feat(algebra/order/archimedean): upgrade some `∃` to `∃!` (#10343)", "changes": [{"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["del", "theorem", "exists_add_int_smul_mem_Ico", []], ["del", "theorem", "exists_add_int_smul_mem_Ioc", []], ["del", "theorem", "exists_int_smul_near_of_pos'", []], ["del", "theorem", "exists_int_smul_near_of_pos", []], ["add", "theorem", "exists_unique_add_zsmul_mem_Ico", []], ["add", "theorem", "exists_unique_add_zsmul_mem_Ioc", []], ["add", "theorem", "exists_unique_zsmul_near_of_pos'", []], ["add", "theorem", "exists_unique_zsmul_near_of_pos", []]]}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/group_theory/archimedean.lean", "newPath": "src/group_theory/archimedean.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["del", "theorem", "exists_unique", ["function", "bijective"]], ["add", "theorem", "exists_unique_iff", ["function", "bijective"]], ["del", "theorem", "exists", ["function", "surjective"]], ["del", "theorem", "exists₂", ["function", "surjective"]], ["del", "theorem", "exists₃", ["function", "surjective"]], ["del", "theorem", "forall", ["function", "surjective"]], ["del", "theorem", "forall₂", ["function", "surjective"]], ["del", "theorem", "forall₃", ["function", "surjective"]]]}]}, {"timestamp": 1637044997, "sha": "30abde68", "message": "chore(*): clean up some unused open statements and extra simps (#10342)\nWe clean up some specific statements that are essentially no-ops in the library, i.e. opening a namespace and then never using it and using a simp-set larger than actually needed.\nThis is a preparatory miscellany of small fixes for a larger PR upcoming from me and Johan to reduce imports in the library.\nHopefully merging this first will make the content of that PR clearer.", "changes": [{"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}]}, {"timestamp": 1637038557, "sha": "979f0e83", "message": "feat(data/fin/basic): extract `div_nat` and `mod_nat` from `fin_prod_fin_equiv` (#10339)\nThis makes it a little easier to tell which component is div and which is mod from the docs alone, and also makes these available earlier than `data/equiv/fin`.", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["add", "theorem", "coe_div_nat", ["fin"]], ["add", "theorem", "coe_mod_nat", ["fin"]], ["add", "def", "div_nat", ["fin"]], ["add", "def", "mod_nat", ["fin"]]]}]}, {"timestamp": 1637032645, "sha": "bd80b339", "message": "chore(ring_theory/subring): fix stale docstring (#10340)\nOversight from https://github.com/leanprover-community/mathlib/pull/10332", "changes": [{"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1637029850, "sha": "9264f302", "message": "feat(analysis/calculus/times_cont_diff): continuous affine maps are smooth (#10335)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/affine_map.lean", "changes": [["add", "theorem", "times_cont_diff", ["continuous_affine_map"]]]}]}, {"timestamp": 1637022547, "sha": "bff69c9f", "message": "feat(data/nat/lattice): add ```Inf_add``` lemma (#10008)\nAdds a lemma about Inf on natural numbers. It will be needed for the count PR.", "changes": [{"oldPath": "src/data/nat/lattice.lean", "newPath": "src/data/nat/lattice.lean", "changes": [["add", "theorem", "Inf_add'", ["nat"]], ["add", "theorem", "Inf_add", ["nat"]], ["add", "theorem", "Inf_empty", ["nat"]]]}]}, {"timestamp": 1637022545, "sha": "ddb6c75f", "message": "feat(algebra/homology/exact): preadditive.exact_iff_exact_of_iso (#9979)", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["add", "theorem", "exact_iff_exact_of_iso", ["category_theory", "preadditive"]], ["add", "theorem", "exact_of_iso_of_exact", ["category_theory", "preadditive"]]]}, {"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "theorem", "inv_left_hom_right", ["category_theory", "arrow"]], ["add", "theorem", "left_hom_inv_right", ["category_theory", "arrow"]]]}]}, {"timestamp": 1637016404, "sha": "90740956", "message": "chore(linear_algebra/pi_tensor_product): add reindex_reindex (#10336)", "changes": [{"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": [["add", "theorem", "reindex_reindex", ["pi_tensor_product"]]]}]}, {"timestamp": 1637016403, "sha": "a0f2c47f", "message": "feat(logic/relation): induction principles for `trans_gen` (#10331)\nCorresponding induction principles already exist for `refl_trans_gen`.", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "head_induction_on", ["relation", "trans_gen"]], ["add", "theorem", "trans_induction_on", ["relation", "trans_gen"]]]}]}, {"timestamp": 1637016401, "sha": "65ff54c7", "message": "feat(data/fintype/basic): add fin_injective (#10330)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "cast_eq_cast'", ["fin"]], ["add", "theorem", "fin_injective", []]]}]}, {"timestamp": 1637010106, "sha": "93047c52", "message": "feat(linear_algebra/determinant): linear coordinates are ratio of determinants (#10261)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "mk_coord_apply", ["basis"]], ["add", "theorem", "mk_coord_apply_eq", ["basis"]], ["add", "theorem", "mk_coord_apply_ne", ["basis"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_smul_mk_coord_eq_det_update", ["basis"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["mod", "def", "to_linear_map", ["multilinear_map"]]]}]}, {"timestamp": 1637010105, "sha": "7ccc7ae6", "message": "feat(topology/homotopy/fundamental_groupoid): The functor from `Top` to `Groupoid` (#10195)\nI have no idea if the ways I've done things is the right way, eg. I don't know if I need to be thinking about universes when defining the functor, so comments about that are definitely welcome.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "map₂_mk", ["quotient"]]]}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": [["mod", "theorem", "symm", ["continuous_map", "homotopic"]], ["mod", "theorem", "symm", ["continuous_map", "homotopic_rel"]]]}, {"oldPath": "src/topology/homotopy/fundamental_groupoid.lean", "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": [["add", "theorem", "comp_eq", ["fundamental_groupoid"]], ["add", "def", "fundamental_groupoid_functor", ["fundamental_groupoid"]]]}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": [["add", "theorem", "hcomp", ["path", "homotopic"]], ["add", "theorem", "map", ["path", "homotopic"]], ["mod", "theorem", "symm", ["path", "homotopic"]], ["add", "def", "map", ["path", "homotopy"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "map_id", ["path"]], ["add", "theorem", "map_map", ["path"]], ["add", "theorem", "map_symm", ["path"]], ["add", "theorem", "map_trans", ["path"]]]}]}, {"timestamp": 1637010104, "sha": "9c03e9dc", "message": "feat(data/fintype): computable trunc bijection from fin (#10141)\nWhen a type `X` lacks decidable equality, there is still computably a bijection `fin (card X) -> X` using `trunc`.\nAlso, move `fintype.equiv_fin_of_forall_mem_list` to `list.nodup.nth_le_equiv_of_forall_mem_list`.", "changes": [{"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "def", "equiv_fin_of_forall_mem_list", ["fintype"]], ["add", "def", "trunc_fin_bijection", ["fintype"]]]}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": [["del", "theorem", "coe_nth_le_equiv_apply", ["list", "nodup"]], ["del", "theorem", "coe_nth_le_equiv_symm_apply", ["list", "nodup"]], ["add", "def", "nth_le_bijection_of_forall_mem_list", ["list", "nodup"]], ["add", "def", "nth_le_equiv_of_forall_mem_list", ["list", "nodup"]]]}]}, {"timestamp": 1637003525, "sha": "7b607682", "message": "feat(ring_theory/subring): weaken typeclass assumption for `units.pos_subgroup` (#10332)", "changes": [{"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["mod", "theorem", "mem_pos_subgroup", ["units"]], ["mod", "def", "pos_subgroup", ["units"]]]}]}, {"timestamp": 1637003523, "sha": "7803884e", "message": "feat(data/pi): Composition of addition/subtraction/... of functions (#10305)", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["del", "theorem", "comp_one", ["pi"]], ["del", "theorem", "const_one", ["pi"]], ["del", "theorem", "one_comp", ["pi"]]]}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "comp_one", ["pi"]], ["add", "theorem", "const_div", ["pi"]], ["add", "theorem", "const_inv", ["pi"]], ["add", "theorem", "const_mul", ["pi"]], ["add", "theorem", "const_one", ["pi"]], ["add", "theorem", "div_comp", ["pi"]], ["add", "theorem", "inv_comp", ["pi"]], ["add", "theorem", "mul_comp", ["pi"]], ["add", "theorem", "one_comp", ["pi"]]]}]}, {"timestamp": 1637003521, "sha": "43ef5787", "message": "feat(category_theory/limits): Random results about limits. (#10285)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "map", ["category_theory", "limits", "pullback"]], ["add", "def", "map", ["category_theory", "limits", "pushout"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "def", "coequalizer_colimit", ["category_theory", "limits", "types"]], ["add", "inductive", "coequalizer_rel", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1637003518, "sha": "1a47cfc7", "message": "feat(data/finset/basic): A finset has card two iff it's `{x, y}` for some `x ≠ y` (#10252)\nand the similar result for card three. Dumb but surprisingly annoying!", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_eq_three", ["finset"]], ["add", "theorem", "card_eq_two", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "length_eq_three", ["list"]], ["add", "theorem", "length_eq_two", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "card_eq_three", ["multiset"]], ["add", "theorem", "card_eq_two", ["multiset"]]]}]}, {"timestamp": 1637003516, "sha": "9fe0cbc8", "message": "feat(category_theory/preadditive/additive_functor): map_zero' is a redundant field, remove it (#10229)\nThe map_zero' field in the definition of an additive functor can be deduced from the map_add' field. So we remove it.", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}]}, {"timestamp": 1636997235, "sha": "64418d7e", "message": "fix(logic/basic): remove `noncomputable lemma` (#10292)\nIt's been three years since this was discussed according to the zulip archive link in the library note.\nAccording to CI, the reason is no longer relevant. Leaving these as `noncomputable lemma` is harmful as it results in non-defeq instance diamonds sometimes as lean was not able to unfold the lemmas to get to the data underneath.\nSince these are now `def`s, the linter requires them to have docstrings.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1636997233, "sha": "d5d60719", "message": "chore(analysis/special_functions/trigonometric/arctan): put lemmas about derivatives into a new file (#10157)", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": [["del", "theorem", "deriv_arctan", []], ["del", "theorem", "deriv_within_arctan", []], ["del", "theorem", "arctan", ["differentiable"]], ["del", "theorem", "arctan", ["differentiable_at"]], ["del", "theorem", "arctan", ["differentiable_on"]], ["del", "theorem", "arctan", ["differentiable_within_at"]], ["del", "theorem", "fderiv_arctan", []], ["del", "theorem", "fderiv_within_arctan", []], ["del", "theorem", "arctan", ["has_deriv_at"]], ["del", "theorem", "arctan", ["has_deriv_within_at"]], ["del", "theorem", "arctan", ["has_fderiv_at"]], ["del", "theorem", "arctan", ["has_fderiv_within_at"]], ["del", "theorem", "arctan", ["has_strict_deriv_at"]], ["del", "theorem", "arctan", ["has_strict_fderiv_at"]], ["del", "theorem", "continuous_at_tan", ["real"]], ["del", "theorem", "deriv_arctan", ["real"]], ["del", "theorem", "deriv_tan", ["real"]], ["del", "theorem", "differentiable_arctan", ["real"]], ["del", "theorem", "differentiable_at_arctan", ["real"]], ["del", "theorem", "differentiable_at_tan", ["real"]], ["del", "theorem", "differentiable_at_tan_of_mem_Ioo", ["real"]], ["del", "theorem", "has_deriv_at_arctan", ["real"]], ["del", "theorem", "has_deriv_at_tan", ["real"]], ["del", "theorem", "has_deriv_at_tan_of_mem_Ioo", ["real"]], ["del", "theorem", "has_strict_deriv_at_arctan", ["real"]], ["del", "theorem", "has_strict_deriv_at_tan", ["real"]], ["del", "theorem", "tendsto_abs_tan_at_top", ["real"]], ["del", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["real"]], ["del", "theorem", "times_cont_diff_arctan", ["real"]], ["del", "theorem", "times_cont_diff_at_tan", ["real"]], ["del", "theorem", "arctan", ["times_cont_diff"]], ["del", "theorem", "arctan", ["times_cont_diff_at"]], ["del", "theorem", "arctan", ["times_cont_diff_on"]], ["del", "theorem", "arctan", ["times_cont_diff_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/arctan_deriv.lean", "changes": [["add", "theorem", "deriv_arctan", []], ["add", "theorem", "deriv_within_arctan", []], ["add", "theorem", "arctan", ["differentiable"]], ["add", "theorem", "arctan", ["differentiable_at"]], ["add", "theorem", "arctan", ["differentiable_on"]], ["add", "theorem", "arctan", ["differentiable_within_at"]], ["add", "theorem", "fderiv_arctan", []], ["add", "theorem", "fderiv_within_arctan", []], ["add", "theorem", "arctan", ["has_deriv_at"]], ["add", "theorem", "arctan", ["has_deriv_within_at"]], ["add", "theorem", "arctan", ["has_fderiv_at"]], ["add", "theorem", "arctan", ["has_fderiv_within_at"]], ["add", "theorem", "arctan", ["has_strict_deriv_at"]], ["add", "theorem", "arctan", ["has_strict_fderiv_at"]], ["add", "theorem", "continuous_at_tan", ["real"]], ["add", "theorem", "deriv_arctan", ["real"]], ["add", "theorem", "deriv_tan", ["real"]], ["add", "theorem", "differentiable_arctan", ["real"]], ["add", "theorem", "differentiable_at_arctan", ["real"]], ["add", "theorem", "differentiable_at_tan", ["real"]], ["add", "theorem", "differentiable_at_tan_of_mem_Ioo", ["real"]], ["add", "theorem", "has_deriv_at_arctan", ["real"]], ["add", "theorem", "has_deriv_at_tan", ["real"]], ["add", "theorem", "has_deriv_at_tan_of_mem_Ioo", ["real"]], ["add", "theorem", "has_strict_deriv_at_arctan", ["real"]], ["add", "theorem", "has_strict_deriv_at_tan", ["real"]], ["add", "theorem", "tendsto_abs_tan_at_top", ["real"]], ["add", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["real"]], ["add", "theorem", "times_cont_diff_arctan", ["real"]], ["add", "theorem", "times_cont_diff_at_tan", ["real"]], ["add", "theorem", "arctan", ["times_cont_diff"]], ["add", "theorem", "arctan", ["times_cont_diff_at"]], ["add", "theorem", "arctan", ["times_cont_diff_on"]], ["add", "theorem", "arctan", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}]}, {"timestamp": 1636995122, "sha": "02100d81", "message": "feat(category_theory/sites/limits): `Sheaf J D` has colimits. (#10334)\nWe show that the category of sheaves has colimits obtained by sheafifying colimits on the level of presheaves.", "changes": [{"oldPath": "src/category_theory/sites/limits.lean", "newPath": "src/category_theory/sites/limits.lean", "changes": [["add", "def", "is_colimit_sheafify_cocone", ["category_theory", "Sheaf"]], ["add", "def", "sheafify_cocone", ["category_theory", "Sheaf"]]]}]}, {"timestamp": 1636987285, "sha": "bf068540", "message": "feat(algebra/big_operators/basic): Sum over a product of finsets, right version (#10124)\nThis adds `finset.sum_prod_right` and renames `finset.sum_prod` to `finset.sum_prod_left`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_product_right'", ["finset"]], ["add", "theorem", "prod_product_right", ["finset"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1636981007, "sha": "ca5c4b37", "message": "feat(group_theory/group_action): add a few instances (#10310)\n* regular and opposite regular actions of a group on itself are transitive;\n* the action of a group on an orbit is transitive.", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "theorem", "exists_smul_eq", ["mul_action"]], ["mod", "theorem", "orbit_eq_univ", ["mul_action"]], ["del", "theorem", "surjective_smul", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "exists_smul_eq", ["mul_action"]], ["add", "theorem", "surjective_smul", ["mul_action"]]]}]}, {"timestamp": 1636973876, "sha": "ca61dbff", "message": "feat(order/sup_indep): Finite supremum independence (#9867)\nThis defines supremum independence of indexed finsets.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "disjoint_sup_left", ["finset"]], ["add", "theorem", "disjoint_sup_right", ["finset"]]]}, {"oldPath": null, "newPath": "src/order/sup_indep.lean", "changes": [["add", "theorem", "independent_iff_sup_indep", ["complete_lattice"]], ["add", "theorem", "attach", ["finset", "sup_indep"]], ["add", "theorem", "bUnion", ["finset", "sup_indep"]], ["add", "theorem", "pairwise_disjoint", ["finset", "sup_indep"]], ["add", "theorem", "subset", ["finset", "sup_indep"]], ["add", "theorem", "sup", ["finset", "sup_indep"]], ["add", "def", "sup_indep", ["finset"]], ["add", "theorem", "sup_indep_empty", ["finset"]], ["add", "theorem", "sup_indep_iff_pairwise_disjoint", ["finset"]], ["add", "theorem", "sup_indep_singleton", ["finset"]]]}]}, {"timestamp": 1636963528, "sha": "60bc370d", "message": "feat(category_theory/sites/limits): `Sheaf_to_presheaf` creates limits (#10328)\nAs a consequence, we obtain that sheaves have limits (of a given shape) when the target category does, and that these limit sheaves are computed on each object of the site \"pointwise\".", "changes": [{"oldPath": "src/category_theory/limits/shapes/multiequalizer.lean", "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": [["add", "def", "mk", ["category_theory", "limits", "multicofork", "is_colimit"]], ["add", "def", "mk", ["category_theory", "limits", "multifork", "is_limit"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/limits.lean", "changes": [["add", "def", "is_limit_multifork_of_is_limit", ["category_theory", "Sheaf"]], ["add", "theorem", "is_sheaf_of_is_limit", ["category_theory", "Sheaf"]], ["add", "def", "multifork_evaluation_cone", ["category_theory", "Sheaf"]]]}]}, {"timestamp": 1636952872, "sha": "189e0662", "message": "feat(category_theory/sites/sheafification): The sheafification of a presheaf. (#10303)\nWe construct the sheafification of a presheaf `P` taking values in a concrete category `D` with enough (co)limits, where the forgetful functor preserves the appropriate (co)limits and reflects isomorphisms.\nWe follow the construction on the stacks project https://stacks.math.columbia.edu/tag/00W1\n**Note:** There are two very long proofs here, so I added several comments explaining what's going on.", "changes": [{"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["add", "def", "multiequalizer_equiv", ["category_theory", "limits", "concrete"]], ["add", "theorem", "multiequalizer_equiv_apply", ["category_theory", "limits", "concrete"]], ["add", "def", "multiequalizer_equiv_aux", ["category_theory", "limits", "concrete"]]]}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": [["add", "def", "from_middle", ["category_theory", "grothendieck_topology", "cover", "arrow"]], ["add", "theorem", "from_middle_condition", ["category_theory", "grothendieck_topology", "cover", "arrow"]], ["add", "theorem", "middle_spec", ["category_theory", "grothendieck_topology", "cover", "arrow"]], ["add", "def", "to_middle", ["category_theory", "grothendieck_topology", "cover", "arrow"]], ["add", "theorem", "to_middle_condition", ["category_theory", "grothendieck_topology", "cover", "arrow"]], ["add", "def", "bind", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "bind_to_base", ["category_theory", "grothendieck_topology", "cover"]]]}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": [["add", "def", "iso_to_plus", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_hom_ext", ["category_theory", "grothendieck_topology"]], ["add", "def", "plus_lift", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_lift_unique", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_plus_plus_lift", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/sheafification.lean", "changes": [["add", "theorem", "is_iso_to_sheafify", ["category_theory", "grothendieck_topology"]], ["add", "def", "iso_sheafify", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "eq_mk_iff_exists", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "exists_of_sep", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "exists_rep", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "inj_of_sep", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "is_sheaf_of_sep", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "is_sheaf_plus_plus", ["category_theory", "grothendieck_topology", "plus"]], ["add", "def", "meq_of_sep", ["category_theory", "grothendieck_topology", "plus"]], ["add", "def", "mk", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "res_mk_eq_mk_pullback", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "sep", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "to_plus_apply", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "to_plus_eq_mk", ["category_theory", "grothendieck_topology", "plus"]], ["add", "theorem", "to_plus_mk", ["category_theory", "grothendieck_topology", "plus"]], ["add", "def", "sheafification", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafification_obj", ["category_theory", "grothendieck_topology"]], ["add", "def", "sheafify", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafify_hom_ext", ["category_theory", "grothendieck_topology"]], ["add", "def", "sheafify_lift", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "sheafify_lift_unique", ["category_theory", "grothendieck_topology"]], ["add", "def", "to_sheafification", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_sheafification_app", ["category_theory", "grothendieck_topology"]], ["add", "def", "to_sheafify", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "to_sheafify_sheafify_lift", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "condition", ["category_theory", "meq"]], ["add", "def", "equiv", ["category_theory", "meq"]], ["add", "theorem", "equiv_apply", ["category_theory", "meq"]], ["add", "theorem", "equiv_symm_eq_apply", ["category_theory", "meq"]], ["add", "theorem", "ext", ["category_theory", "meq"]], ["add", "def", "mk", ["category_theory", "meq"]], ["add", "theorem", "mk_apply", ["category_theory", "meq"]], ["add", "def", "pullback", ["category_theory", "meq"]], ["add", "theorem", "pullback_apply", ["category_theory", "meq"]], ["add", "theorem", "pullback_refine", ["category_theory", "meq"]], ["add", "def", "refine", ["category_theory", "meq"]], ["add", "theorem", "refine_apply", ["category_theory", "meq"]], ["add", "def", "meq", ["category_theory"]], ["add", "def", "presheaf_to_Sheaf", ["category_theory"]], ["add", "def", "sheafification_adjunction", ["category_theory"]], ["add", "def", "sheafification_iso", ["category_theory"]], ["add", "theorem", "sheafification_iso_hom", ["category_theory"]], ["add", "theorem", "sheafification_iso_inv", ["category_theory"]]]}]}, {"timestamp": 1636949989, "sha": "62992fa9", "message": "feat(analysis/inner_product_space/spectrum): more concrete diagonalization theorem (#10317)\nThis is a second version of the diagonalization theorem for self-adjoint operators on finite-dimensional inner product spaces, stating that a self-adjoint operator admits an orthonormal basis of eigenvectors, and deducing the standard consequences (when expressed with respect to this basis the operator acts diagonally).\nI have also updated `undergrad.yaml` and `overview.yaml` to cover the diagonalization theorem and other things proved in the library about Hilbert spaces.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "coe_isometry_euclidean_of_orthonormal", ["basis"]], ["add", "theorem", "coe_isometry_euclidean_of_orthonormal_symm", ["basis"]]]}, {"oldPath": "src/analysis/inner_product_space/spectrum.lean", "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["add", "theorem", "apply_eigenvector_basis", ["is_self_adjoint"]], ["add", "theorem", "diagonalization_basis_apply_self_apply", ["is_self_adjoint"]], ["add", "theorem", "diagonalization_basis_symm_apply", ["is_self_adjoint"]], ["add", "theorem", "eigenvector_basis_orthonormal", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvector_eigenvector_basis", ["is_self_adjoint"]]]}]}, {"timestamp": 1636921637, "sha": "0c8f53e5", "message": "feat(linear_algebra/trace): add lemmas about trace of linear maps (#10279)\nLemmas for the trace of the identity and the trace of a conjugation", "changes": [{"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "theorem", "trace_conj'", ["linear_map"]], ["add", "theorem", "trace_conj", ["linear_map"]], ["add", "theorem", "trace_one", ["linear_map"]]]}]}, {"timestamp": 1636913028, "sha": "1b51fe0f", "message": "feat(linear_algebra/alternating): add alternating_map.comp_linear_map (#10314)", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "add_comp_linear_map", ["alternating_map"]], ["add", "theorem", "coe_comp_linear_map", ["alternating_map"]], ["add", "def", "comp_linear_map", ["alternating_map"]], ["add", "theorem", "comp_linear_map_apply", ["alternating_map"]], ["add", "theorem", "comp_linear_map_zero", ["alternating_map"]], ["add", "theorem", "zero_comp_linear_map", ["alternating_map"]]]}]}, {"timestamp": 1636909393, "sha": "8728e85b", "message": "feat(measure_theory): drop some unneeded assumptions (#10319)\nProve that for a nontrivial countably generated filter there exists a sequence that converges to this filter. Use this lemma to drop some assumptions.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "theorem", "measurable_of_tendsto_metric'", []], ["mod", "theorem", "measurable_of_tendsto_nnreal'", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "exists_seq_tendsto", ["filter"]]]}]}, {"timestamp": 1636903336, "sha": "5307dc1b", "message": "feat(data/equiv/module): add module.to_module_End (#10300)\nThe new definitions are:\n* `distrib_mul_action.to_module_End`\n* `distrib_mul_action.to_module_aut`\n* `module.to_module_End`\nEverything else is a move.\nThis also moves the group structure on linear_equiv earlier in the import heirarchy.\nThis is more consistent with where it is for `linear_map`.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "to_linear_map", ["distrib_mul_action"]], ["add", "def", "to_module_End", ["distrib_mul_action"]], ["add", "def", "to_module_End", ["module"]]]}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["del", "def", "to_linear_map", ["distrib_mul_action"]], ["add", "def", "to_module_aut", ["distrib_mul_action"]], ["add", "def", "to_linear_map_monoid_hom", ["linear_equiv", "automorphism_group"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "to_linear_map_monoid_hom", ["linear_equiv", "automorphism_group"]]]}]}, {"timestamp": 1636903335, "sha": "299af47c", "message": "chore(data/fin/basic): move tuple stuff to a new file (#10295)\nThere are almost 600 lines of tuple stuff, which is definitely sufficient to justify a standalone file.\nThe author information has been guessed from the git history.\nFloris is responsible for `cons` and `tail` which came first in #1294, Chris added find, and Yury and Sébastien were involved all over the place.\nThis is simply a cut-and-paste job, with the exception of the new module docstring which has been merged with the docstring for the tuple subheading.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": [["del", "def", "append", ["fin"]], ["del", "theorem", "comp_cons", ["fin"]], ["del", "theorem", "comp_init", ["fin"]], ["del", "theorem", "comp_snoc", ["fin"]], ["del", "theorem", "comp_tail", ["fin"]], ["del", "def", "cons", ["fin"]], ["del", "theorem", "cons_le", ["fin"]], ["del", "theorem", "cons_self_tail", ["fin"]], ["del", "theorem", "cons_snoc_eq_snoc_cons", ["fin"]], ["del", "theorem", "cons_succ", ["fin"]], ["del", "theorem", "cons_update", ["fin"]], ["del", "theorem", "cons_zero", ["fin"]], ["del", "theorem", "eq_insert_nth_iff", ["fin"]], ["del", "theorem", "fin_append_apply_zero", ["fin"]], ["del", "def", "find", ["fin"]], ["del", "theorem", "find_eq_none_iff", ["fin"]], ["del", "theorem", "find_eq_some_iff", ["fin"]], ["del", "theorem", "find_min'", ["fin"]], ["del", "theorem", "find_min", ["fin"]], ["del", "theorem", "find_spec", ["fin"]], ["del", "theorem", "forall_iff_succ_above", ["fin"]], ["del", "def", "init", ["fin"]], ["del", "theorem", "init_def", ["fin"]], ["del", "theorem", "init_snoc", ["fin"]], ["del", "theorem", "init_update_cast_succ", ["fin"]], ["del", "theorem", "init_update_last", ["fin"]], ["del", "def", "insert_nth", ["fin"]], ["del", "theorem", "insert_nth_add", ["fin"]], ["del", "theorem", "insert_nth_apply_above", ["fin"]], ["del", "theorem", "insert_nth_apply_below", ["fin"]], ["del", "theorem", "insert_nth_apply_same", ["fin"]], ["del", "theorem", "insert_nth_apply_succ_above", ["fin"]], ["del", "theorem", "insert_nth_binop", ["fin"]], ["del", "theorem", "insert_nth_comp_succ_above", ["fin"]], ["del", "theorem", "insert_nth_div", ["fin"]], ["del", "theorem", "insert_nth_eq_iff", ["fin"]], ["del", "theorem", "insert_nth_last'", ["fin"]], ["del", "theorem", "insert_nth_last", ["fin"]], ["del", "theorem", "insert_nth_le_iff", ["fin"]], ["del", "theorem", "insert_nth_mem_Icc", ["fin"]], ["del", "theorem", "insert_nth_mul", ["fin"]], ["del", "theorem", "insert_nth_sub", ["fin"]], ["del", "theorem", "insert_nth_sub_same", ["fin"]], ["del", "theorem", "insert_nth_zero'", ["fin"]], ["del", "theorem", "insert_nth_zero", ["fin"]], ["del", "theorem", "insert_nth_zero_right", ["fin"]], ["del", "theorem", "is_some_find_iff", ["fin"]], ["del", "theorem", "le_cons", ["fin"]], ["del", "theorem", "le_insert_nth_iff", ["fin"]], ["del", "theorem", "mem_find_iff", ["fin"]], ["del", "theorem", "mem_find_of_unique", ["fin"]], ["del", "theorem", "nat_find_mem_find", ["fin"]], ["del", "theorem", "preimage_insert_nth_Icc_of_mem", ["fin"]], ["del", "theorem", "preimage_insert_nth_Icc_of_not_mem", ["fin"]], ["del", "theorem", "range_cons", ["fin"]], ["del", "def", "snoc", ["fin"]], ["del", "theorem", "snoc_cast_succ", ["fin"]], ["del", "theorem", "snoc_init_self", ["fin"]], ["del", "theorem", "snoc_last", ["fin"]], ["del", "theorem", "snoc_update", ["fin"]], ["del", "def", "succ_above_cases", ["fin"]], ["del", "theorem", "succ_above_cases_eq_insert_nth", ["fin"]], ["del", "def", "tail", ["fin"]], ["del", "theorem", "tail_cons", ["fin"]], ["del", "theorem", "tail_def", ["fin"]], ["del", "theorem", "tail_init_eq_init_tail", ["fin"]], ["del", "theorem", "tail_update_succ", ["fin"]], ["del", "theorem", "tail_update_zero", ["fin"]], ["del", "theorem", "tuple0_le", ["fin"]], ["del", "theorem", "update_cons_zero", ["fin"]], ["del", "theorem", "update_snoc_last", ["fin"]]]}, {"oldPath": null, "newPath": "src/data/fin/tuple.lean", "changes": [["add", "def", "append", ["fin"]], ["add", "theorem", "comp_cons", ["fin"]], ["add", "theorem", "comp_init", ["fin"]], ["add", "theorem", "comp_snoc", ["fin"]], ["add", "theorem", "comp_tail", ["fin"]], ["add", "def", "cons", ["fin"]], ["add", "theorem", "cons_le", ["fin"]], ["add", "theorem", "cons_self_tail", ["fin"]], ["add", "theorem", "cons_snoc_eq_snoc_cons", ["fin"]], ["add", "theorem", "cons_succ", ["fin"]], ["add", "theorem", "cons_update", ["fin"]], ["add", "theorem", "cons_zero", ["fin"]], ["add", "theorem", "eq_insert_nth_iff", ["fin"]], ["add", "theorem", "fin_append_apply_zero", ["fin"]], ["add", "def", "find", ["fin"]], ["add", "theorem", "find_eq_none_iff", ["fin"]], ["add", "theorem", "find_eq_some_iff", ["fin"]], ["add", "theorem", "find_min'", ["fin"]], ["add", "theorem", "find_min", ["fin"]], ["add", "theorem", "find_spec", ["fin"]], ["add", "theorem", "forall_iff_succ_above", ["fin"]], ["add", "def", "init", ["fin"]], ["add", "theorem", "init_def", ["fin"]], ["add", "theorem", "init_snoc", ["fin"]], ["add", "theorem", "init_update_cast_succ", ["fin"]], ["add", "theorem", "init_update_last", ["fin"]], ["add", "def", "insert_nth", ["fin"]], ["add", "theorem", "insert_nth_add", ["fin"]], ["add", "theorem", "insert_nth_apply_above", ["fin"]], ["add", "theorem", "insert_nth_apply_below", ["fin"]], ["add", "theorem", "insert_nth_apply_same", ["fin"]], ["add", "theorem", "insert_nth_apply_succ_above", ["fin"]], ["add", "theorem", "insert_nth_binop", ["fin"]], ["add", "theorem", "insert_nth_comp_succ_above", ["fin"]], ["add", "theorem", "insert_nth_div", ["fin"]], ["add", "theorem", "insert_nth_eq_iff", ["fin"]], ["add", "theorem", "insert_nth_last'", ["fin"]], ["add", "theorem", "insert_nth_last", ["fin"]], ["add", "theorem", "insert_nth_le_iff", ["fin"]], ["add", "theorem", "insert_nth_mem_Icc", ["fin"]], ["add", "theorem", "insert_nth_mul", ["fin"]], ["add", "theorem", "insert_nth_sub", ["fin"]], ["add", "theorem", "insert_nth_sub_same", ["fin"]], ["add", "theorem", "insert_nth_zero'", ["fin"]], ["add", "theorem", "insert_nth_zero", ["fin"]], ["add", "theorem", "insert_nth_zero_right", ["fin"]], ["add", "theorem", "is_some_find_iff", ["fin"]], ["add", "theorem", "le_cons", ["fin"]], ["add", "theorem", "le_insert_nth_iff", ["fin"]], ["add", "theorem", "mem_find_iff", ["fin"]], ["add", "theorem", "mem_find_of_unique", ["fin"]], ["add", "theorem", "nat_find_mem_find", ["fin"]], ["add", "theorem", "preimage_insert_nth_Icc_of_mem", ["fin"]], ["add", "theorem", "preimage_insert_nth_Icc_of_not_mem", ["fin"]], ["add", "theorem", "range_cons", ["fin"]], ["add", "def", "snoc", ["fin"]], ["add", "theorem", "snoc_cast_succ", ["fin"]], ["add", "theorem", "snoc_init_self", ["fin"]], ["add", "theorem", "snoc_last", ["fin"]], ["add", "theorem", "snoc_update", ["fin"]], ["add", "def", "succ_above_cases", ["fin"]], ["add", "theorem", "succ_above_cases_eq_insert_nth", ["fin"]], ["add", "def", "tail", ["fin"]], ["add", "theorem", "tail_cons", ["fin"]], ["add", "theorem", "tail_def", ["fin"]], ["add", "theorem", "tail_init_eq_init_tail", ["fin"]], ["add", "theorem", "tail_update_succ", ["fin"]], ["add", "theorem", "tail_update_zero", ["fin"]], ["add", "theorem", "tuple0_le", ["fin"]], ["add", "theorem", "update_cons_zero", ["fin"]], ["add", "theorem", "update_snoc_last", ["fin"]]]}, {"oldPath": "src/data/fin/vec_notation.lean", "newPath": "src/data/fin/vec_notation.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1636903334, "sha": "7dc33bf7", "message": "feat(data/nat/basic): Some `nat.find` lemmas (#10263)\nThis proves `nat.find_le` and `nat.find_add` and renames the current `nat.find_le` to `nat.find_mono`.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "find_add", ["nat"]], ["mod", "theorem", "find_le", ["nat"]], ["add", "theorem", "find_mono", ["nat"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1636897593, "sha": "dd72ebc0", "message": "feat(data/list/big_operators): When `list.sum` is strictly positive (#10282)", "changes": [{"oldPath": "src/data/list/big_operators.lean", "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "one_lt_prod_of_one_lt", ["list"]]]}]}, {"timestamp": 1636882329, "sha": "bca82787", "message": "feat(algebra/lie/basic): add missing `@[ext]` and `@[simp]` lemmas (#10316)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "theorem", "bijective", ["lie_equiv"]], ["add", "theorem", "coe_injective", ["lie_equiv"]], ["add", "theorem", "coe_linear_equiv_injective", ["lie_equiv"]], ["del", "theorem", "coe_to_lie_equiv", ["lie_equiv"]], ["add", "theorem", "coe_to_lie_hom", ["lie_equiv"]], ["add", "theorem", "ext", ["lie_equiv"]], ["del", "theorem", "injective", ["lie_equiv"]], ["add", "theorem", "self_trans_symm", ["lie_equiv"]], ["del", "theorem", "surjective", ["lie_equiv"]], ["add", "theorem", "symm_trans", ["lie_equiv"]], ["del", "theorem", "symm_trans_apply", ["lie_equiv"]], ["add", "theorem", "symm_trans_self", ["lie_equiv"]], ["add", "theorem", "to_linear_equiv_mk", ["lie_equiv"]], ["add", "theorem", "self_trans_symm", ["lie_module_equiv"]], ["add", "theorem", "symm_trans", ["lie_module_equiv"]], ["del", "theorem", "symm_trans_apply", ["lie_module_equiv"]], ["add", "theorem", "symm_trans_self", ["lie_module_equiv"]]]}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["add", "theorem", "coe_injective", ["linear_equiv"]]]}]}, {"timestamp": 1636839297, "sha": "3b5edd06", "message": "refactor(set_theory/cardinal_ordinal): use TC assumptions instead of inequalities (#10313)\nAssume `[fintype α]` or `[infinite α]` instead of `#α < ω` or `ω ≤ #α`.", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["mod", "theorem", "extend_function_finite", ["cardinal"]], ["add", "theorem", "mk_bounded_set_le_of_infinite", ["cardinal"]], ["del", "theorem", "mk_bounded_set_le_of_omega_le", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_finite", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_finite_lift", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_finite_same", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_infinite", ["cardinal"]], ["add", "theorem", "mk_compl_finset_of_infinite", ["cardinal"]], ["del", "theorem", "mk_compl_finset_of_omega_le", ["cardinal"]], ["add", "theorem", "mk_compl_of_infinite", ["cardinal"]], ["del", "theorem", "mk_compl_of_omega_le", ["cardinal"]], ["mod", "theorem", "powerlt_omega", ["cardinal"]]]}]}, {"timestamp": 1636830320, "sha": "d8c87253", "message": "feat(ring_theory,algebraic_geometry): Miscellaneous lemmas/def/typo corrections (#10307)\nSplit out from #9802 since I'm aiming at more general version.", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "def", "closed_point", ["local_ring"]], ["add", "theorem", "local_hom_iff_comap_closed_point", ["local_ring"]], ["add", "theorem", "is_basis_basic_opens", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["add", "theorem", "local_hom_tfae", ["local_ring"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "iso_comp", ["is_localization"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": [["add", "theorem", "cover_dense_iff_is_basis", ["Top", "opens"]], ["add", "theorem", "cover_dense_induced_functor", ["Top", "opens"]], ["add", "theorem", "extend_hom_app", ["Top", "sheaf"]], ["add", "theorem", "hom_ext", ["Top", "sheaf"]], ["add", "def", "restrict_hom_equiv_hom", ["Top", "sheaf"]]]}]}, {"timestamp": 1636824311, "sha": "ca56c5ad", "message": "feat(measure_theory/group): define a few `measurable_equiv`s (#10299)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "inv_symm₀", ["equiv"]]]}, {"oldPath": null, "newPath": "src/measure_theory/group/measurable_equiv.lean", "changes": [["add", "theorem", "measurable_embedding_const_smul", []], ["add", "theorem", "measurable_embedding_const_smul₀", []], ["add", "theorem", "measurable_embedding_mul_left", []], ["add", "theorem", "measurable_embedding_mul_left₀", []], ["add", "theorem", "measurable_embedding_mul_right", []], ["add", "theorem", "measurable_embedding_mul_right₀", []], ["add", "theorem", "coe_mul_left", ["measurable_equiv"]], ["add", "theorem", "coe_mul_left₀", ["measurable_equiv"]], ["add", "theorem", "coe_mul_right", ["measurable_equiv"]], ["add", "theorem", "coe_mul_right₀", ["measurable_equiv"]], ["add", "theorem", "coe_smul₀", ["measurable_equiv"]], ["add", "def", "inv", ["measurable_equiv"]], ["add", "def", "inv₀", ["measurable_equiv"]], ["add", "def", "mul_left", ["measurable_equiv"]], ["add", "def", "mul_left₀", ["measurable_equiv"]], ["add", "def", "mul_right", ["measurable_equiv"]], ["add", "def", "mul_right₀", ["measurable_equiv"]], ["add", "def", "smul", ["measurable_equiv"]], ["add", "def", "smul₀", ["measurable_equiv"]], ["add", "theorem", "symm_inv", ["measurable_equiv"]], ["add", "theorem", "symm_inv₀", ["measurable_equiv"]], ["add", "theorem", "symm_mul_left", ["measurable_equiv"]], ["add", "theorem", "symm_mul_left₀", ["measurable_equiv"]], ["add", "theorem", "symm_mul_right", ["measurable_equiv"]], ["add", "theorem", "symm_mul_right₀", ["measurable_equiv"]], ["add", "theorem", "symm_smul", ["measurable_equiv"]], ["add", "theorem", "symm_smul₀", ["measurable_equiv"]], ["add", "theorem", "to_equiv_mul_left", ["measurable_equiv"]], ["add", "theorem", "to_equiv_mul_left₀", ["measurable_equiv"]], ["add", "theorem", "to_equiv_mul_right", ["measurable_equiv"]], ["add", "theorem", "to_equiv_mul_right₀", ["measurable_equiv"]]]}]}, {"timestamp": 1636819576, "sha": "3578403f", "message": "feat(*/{group,mul}_action): more lemmas (#10308)\n* add several lemmas about orbits and pointwise scalar multiplication;\n* generalize `mul_action.orbit.mul_action` to a monoid action;\n* more lemmas about pretransitive actions, use `to_additive` more;\n* add dot notation lemmas `is_open.smul` and `is_closed.smul`.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "theorem", "exists_vadd_eq", ["add_action"]], ["add", "theorem", "maps_to_smul_orbit", ["mul_action"]], ["mod", "theorem", "mem_orbit_smul", ["mul_action"]], ["add", "theorem", "orbit_eq_univ", ["mul_action"]], ["add", "theorem", "orbit_smul", ["mul_action"]], ["add", "theorem", "orbit_smul_subset", ["mul_action"]], ["mod", "theorem", "smul_mem_orbit_smul", ["mul_action"]], ["add", "theorem", "smul_orbit", ["mul_action"]], ["add", "theorem", "smul_orbit_subset", ["mul_action"]], ["add", "theorem", "surjective_smul", ["mul_action"]]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["add", "theorem", "smul", ["is_closed"]], ["add", "theorem", "smul", ["is_open"]], ["add", "theorem", "smul_closure_orbit_subset", []], ["add", "theorem", "smul_closure_subset", []]]}]}, {"timestamp": 1636813499, "sha": "b91d3449", "message": "chore(data/equiv/*): rename `trans_symm` and `symm_trans` to `self_trans_symm` and `symm_trans_self`. (#10309)\nThis frees up `symm_trans` to state `(a.trans b).symm = a.symm.trans b.symm`.\nThese names are consistent with `self_comp_symm` and `symm_comp_self`.", "changes": [{"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["add", "theorem", "self_trans_symm", ["affine_isometry_equiv"]], ["del", "theorem", "symm_trans", ["affine_isometry_equiv"]], ["add", "theorem", "symm_trans_self", ["affine_isometry_equiv"]], ["del", "theorem", "trans_symm", ["affine_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "self_trans_symm", ["linear_isometry_equiv"]], ["del", "theorem", "symm_trans", ["linear_isometry_equiv"]], ["add", "theorem", "symm_trans_self", ["linear_isometry_equiv"]], ["del", "theorem", "trans_symm", ["linear_isometry_equiv"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "self_trans_symm", ["equiv"]], ["del", "theorem", "symm_trans", ["equiv"]], ["add", "theorem", "symm_trans_self", ["equiv"]], ["del", "theorem", "trans_symm", ["equiv"]]]}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["add", "theorem", "self_trans_symm", ["linear_equiv"]], ["del", "theorem", "symm_trans", ["linear_equiv"]], ["add", "theorem", "symm_trans_self", ["linear_equiv"]], ["del", "theorem", "trans_symm", ["linear_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "self_trans_symm", ["ring_equiv"]], ["del", "theorem", "symm_trans", ["ring_equiv"]], ["add", "theorem", "symm_trans_self", ["ring_equiv"]], ["del", "theorem", "trans_symm", ["ring_equiv"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["add", "theorem", "self_trans_symm", ["pequiv"]], ["del", "theorem", "symm_trans", ["pequiv"]], ["add", "theorem", "symm_trans_self", ["pequiv"]], ["del", "theorem", "trans_symm", ["pequiv"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": [["add", "theorem", "self_trans_symm", ["diffeomorph"]], ["del", "theorem", "symm_trans", ["diffeomorph"]], ["add", "theorem", "symm_trans_self", ["diffeomorph"]], ["del", "theorem", "trans_symm", ["diffeomorph"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["del", "theorem", "inv_trans", ["equiv", "perm"]], ["add", "theorem", "inv_trans_self", ["equiv", "perm"]], ["mod", "theorem", "mul_symm", ["equiv", "perm"]], ["add", "theorem", "self_trans_inv", ["equiv", "perm"]], ["mod", "theorem", "symm_mul", ["equiv", "perm"]], ["del", "theorem", "trans_inv", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "self_trans_symm", ["affine_equiv"]], ["del", "theorem", "symm_trans", ["affine_equiv"]], ["add", "theorem", "symm_trans_self", ["affine_equiv"]], ["del", "theorem", "trans_symm", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1636799274, "sha": "869cb328", "message": "chore(measure_theory/probability_mass_function): Refactor the `pmf` file into a definitions file and a constructions file (#10298)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/probability_mass_function/basic.lean", "changes": [["add", "theorem", "apply_eq_zero_iff", ["pmf"]], ["add", "def", "bind", ["pmf"]], ["add", "theorem", "bind_apply", ["pmf"]], ["add", "theorem", "bind_bind", ["pmf"]], ["add", "theorem", "bind_comm", ["pmf"]], ["add", "theorem", "bind_pure", ["pmf"]], ["add", "theorem", "coe_bind_apply", ["pmf"]], ["add", "theorem", "coe_le_one", ["pmf"]], ["add", "theorem", "has_sum_coe_one", ["pmf"]], ["add", "theorem", "mem_support_iff", ["pmf"]], ["add", "theorem", "mem_support_pure_iff", ["pmf"]], ["add", "def", "pure", ["pmf"]], ["add", "theorem", "pure_apply", ["pmf"]], ["add", "theorem", "pure_bind", ["pmf"]], ["add", "theorem", "summable_coe", ["pmf"]], ["add", "def", "support", ["pmf"]], ["add", "def", "to_measure", ["pmf"]], ["add", "theorem", "to_measure_apply'", ["pmf"]], ["add", "theorem", "to_measure_apply", ["pmf"]], ["add", "theorem", "to_measure_apply_eq_to_outer_measure_apply", ["pmf"]], ["add", "theorem", "to_measure_apply_finset", ["pmf"]], ["add", "theorem", "to_measure_apply_fintype", ["pmf"]], ["add", "theorem", "to_measure_apply_of_finite", ["pmf"]], ["add", "def", "to_outer_measure", ["pmf"]], ["add", "theorem", "to_outer_measure_apply'", ["pmf"]], ["add", "theorem", "to_outer_measure_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_eq_zero_iff", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_finset", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_fintype", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_le_to_measure_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_caratheodory", ["pmf"]], ["add", "theorem", "tsum_coe", ["pmf"]], ["add", "def", "{u}", []]]}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function/constructions.lean", "changes": [["del", "def", "bind", ["pmf"]], ["del", "theorem", "bind_apply", ["pmf"]], ["del", "theorem", "bind_bind", ["pmf"]], ["del", "theorem", "bind_comm", ["pmf"]], ["del", "theorem", "bind_pure", ["pmf"]], ["del", "theorem", "coe_bind_apply", ["pmf"]], ["del", "theorem", "coe_le_one", ["pmf"]], ["del", "theorem", "has_sum_coe_one", ["pmf"]], ["del", "theorem", "mem_support_iff", ["pmf"]], ["del", "theorem", "mem_support_pure_iff", ["pmf"]], ["del", "def", "pure", ["pmf"]], ["del", "theorem", "pure_apply", ["pmf"]], ["del", "theorem", "pure_bind", ["pmf"]], ["del", "theorem", "summable_coe", ["pmf"]], ["del", "def", "support", ["pmf"]], ["del", "def", "to_measure", ["pmf"]], ["del", "theorem", "to_measure_apply'", ["pmf"]], ["del", "theorem", "to_measure_apply", ["pmf"]], ["del", "theorem", "to_measure_apply_eq_to_outer_measure_apply", ["pmf"]], ["del", "theorem", "to_measure_apply_finset", ["pmf"]], ["del", "theorem", "to_measure_apply_fintype", ["pmf"]], ["del", "theorem", "to_measure_apply_of_finite", ["pmf"]], ["del", "def", "to_outer_measure", ["pmf"]], ["del", "theorem", "to_outer_measure_apply'", ["pmf"]], ["del", "theorem", "to_outer_measure_apply", ["pmf"]], ["del", "theorem", "to_outer_measure_apply_eq_zero_iff", ["pmf"]], ["del", "theorem", "to_outer_measure_apply_finset", ["pmf"]], ["del", "theorem", "to_outer_measure_apply_fintype", ["pmf"]], ["del", "theorem", "to_outer_measure_apply_le_to_measure_apply", ["pmf"]], ["del", "theorem", "to_outer_measure_caratheodory", ["pmf"]], ["del", "theorem", "tsum_coe", ["pmf"]], ["del", "def", "{u}", []]]}]}, {"timestamp": 1636794576, "sha": "a7e38a03", "message": "feat(linear_algebra/bilinear_form): add is_refl and ortho_sym for alt_bilin_form (#10304)\nLemma `is_refl` shows that every alternating bilinear form is reflexive.\nLemma `ortho_sym` shows that being orthogonal with respect to an alternating bilinear form is symmetric.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "is_refl", ["alt_bilin_form"]], ["add", "theorem", "ortho_sym", ["alt_bilin_form"]]]}]}, {"timestamp": 1636771566, "sha": "a2323660", "message": "feat(analysis/inner_product_space/projection): orthonormal basis subordinate to an `orthogonal_family` (#10208)\nIn a finite-dimensional inner product space of `E`, there exists an orthonormal basis subordinate to a given direct sum decomposition into an `orthogonal_family` of subspaces `E`.", "changes": [{"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "theorem", "collected_basis_coe", ["direct_sum", "submodule_is_internal"]], ["add", "theorem", "collected_basis_mem", ["direct_sum", "submodule_is_internal"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "collected_basis_orthonormal", ["direct_sum", "submodule_is_internal"]], ["add", "theorem", "orthonormal_sigma_orthonormal", ["orthogonal_family"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["mod", "theorem", "coe_orthonormal_basis", []], ["add", "def", "sigma_orthonormal_basis_index_equiv", ["direct_sum", "submodule_is_internal"]], ["add", "def", "subordinate_orthonormal_basis", ["direct_sum", "submodule_is_internal"]], ["add", "def", "subordinate_orthonormal_basis_index", ["direct_sum", "submodule_is_internal"]], ["add", "theorem", "subordinate_orthonormal_basis_orthonormal", ["direct_sum", "submodule_is_internal"]], ["add", "theorem", "subordinate_orthonormal_basis_subordinate", ["direct_sum", "submodule_is_internal"]], ["mod", "def", "fin_orthonormal_basis", []], ["mod", "theorem", "fin_orthonormal_basis_orthonormal", []], ["mod", "def", "orthonormal_basis", []], ["mod", "def", "orthonormal_basis_index", []], ["mod", "theorem", "orthonormal_basis_orthonormal", []]]}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": [["add", "theorem", "sigma_finsupp_equiv_dfinsupp_single", []]]}]}, {"timestamp": 1636759290, "sha": "8bb0b6f7", "message": "feat(category_theory/sites/plus): If P is a sheaf, then the map from P to P^+ is an isomorphism. (#10297)\nAlso adds some simple results about (co)limits where the morphisms in the diagram are isomorphisms.", "changes": [{"oldPath": "src/category_theory/category/preorder.lean", "newPath": "src/category_theory/category/preorder.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "cocone_of_diagram_initial", ["category_theory", "limits"]], ["add", "def", "colimit_of_diagram_initial", ["category_theory", "limits"]], ["add", "def", "colimit_of_initial", ["category_theory", "limits"]], ["add", "def", "cone_of_diagram_terminal", ["category_theory", "limits"]], ["add", "def", "is_initial_bot", ["category_theory", "limits"]], ["add", "theorem", "is_iso_ι_of_is_initial", ["category_theory", "limits"]], ["add", "theorem", "is_iso_π_of_is_terminal", ["category_theory", "limits"]], ["add", "def", "is_terminal_top", ["category_theory", "limits"]], ["add", "def", "limit_of_diagram_terminal", ["category_theory", "limits"]], ["add", "def", "limit_of_terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/sites/plus.lean", "newPath": "src/category_theory/sites/plus.lean", "changes": [["add", "theorem", "is_iso_to_plus_of_is_sheaf", ["category_theory", "grothendieck_topology"]]]}]}, {"timestamp": 1636753371, "sha": "55534c4f", "message": "feat(data/nat/basic): recursion for set nat (#10273)\nAdding a special case of `nat.le_rec_on` where the predicate is membership of a subset.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "set_eq_univ", ["nat"]], ["add", "theorem", "set_induction", ["nat"]], ["add", "theorem", "set_induction_bounded", ["nat"]]]}]}, {"timestamp": 1636747340, "sha": "6afda884", "message": "feat(analysis/inner_product_space/spectrum): diagonalization of self-adjoint endomorphisms (finite dimension) (#9995)\nDiagonalization of a self-adjoint endomorphism `T` of a finite-dimensional inner product space `E` over either `ℝ` or `ℂ`: construct a linear isometry `T.diagonalization` from `E` to the direct sum of `T`'s eigenspaces, such that `T` conjugated by `T.diagonalization` is diagonal:\n```lean\nlemma diagonalization_apply_self_apply (v : E) (μ : eigenvalues T) :\n hT.diagonalization (T v) μ = (μ : 𝕜) • hT.diagonalization v μ\n```", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "restrict_invariant", ["is_self_adjoint"]], ["add", "theorem", "comp", ["orthogonal_family"]]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "theorem", "isometry_L2_of_orthogonal_family_symm_apply", ["direct_sum", "submodule_is_internal"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["mod", "theorem", "submodule_is_internal_iff", ["orthogonal_family"]]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": [["add", "theorem", "subsingleton_of_no_eigenvalue_finite_dimensional", ["is_self_adjoint"]]]}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/spectrum.lean", "changes": [["add", "theorem", "conj_eigenvalue_eq_self", ["is_self_adjoint"]], ["add", "theorem", "diagonalization_apply_self_apply", ["is_self_adjoint"]], ["add", "theorem", "diagonalization_symm_apply", ["is_self_adjoint"]], ["add", "theorem", "direct_sum_submodule_is_internal", ["is_self_adjoint"]], ["add", "theorem", "invariant_orthogonal_eigenspace", ["is_self_adjoint"]], ["add", "theorem", "orthogonal_family_eigenspaces'", ["is_self_adjoint"]], ["add", "theorem", "orthogonal_family_eigenspaces", ["is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces", ["is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces_eq_bot'", ["is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces_eq_bot", ["is_self_adjoint"]], ["add", "theorem", "orthogonal_supr_eigenspaces_invariant", ["is_self_adjoint"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "prod_eq_prod_fintype", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "infi_invariant", ["linear_map"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_ne_top_subtype", []], ["add", "theorem", "supr_ne_bot_subtype", []]]}]}, {"timestamp": 1636739298, "sha": "f0a98494", "message": "feat(category_theory/sites/sheaf): Add sheaf conditions in terms of multiforks/multiequalizers. (#10294)\nAnother PR toward sheafification.", "changes": [{"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "def", "is_limit_of_is_sheaf", ["category_theory", "presheaf"]], ["add", "def", "amalgamate", ["category_theory", "presheaf", "is_sheaf"]], ["add", "theorem", "amalgamate_map", ["category_theory", "presheaf", "is_sheaf"]], ["add", "theorem", "hom_ext", ["category_theory", "presheaf", "is_sheaf"]], ["add", "theorem", "is_sheaf_iff_multiequalizer", ["category_theory", "presheaf"]], ["add", "theorem", "is_sheaf_iff_multifork", ["category_theory", "presheaf"]]]}]}, {"timestamp": 1636736903, "sha": "adb5c2d6", "message": "chore(analysis/special_functions/trigonometric/complex): put results about derivatives into a new file (#10156)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/arctan.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": [["del", "theorem", "continuous_at_tan", ["complex"]], ["del", "theorem", "deriv_tan", ["complex"]], ["del", "theorem", "differentiable_at_tan", ["complex"]], ["del", "theorem", "has_deriv_at_tan", ["complex"]], ["del", "theorem", "has_strict_deriv_at_tan", ["complex"]], ["del", "theorem", "tendsto_abs_tan_at_top", ["complex"]], ["del", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["complex"]], ["del", "theorem", "times_cont_diff_at_tan", ["complex"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/complex_deriv.lean", "changes": [["add", "theorem", "continuous_at_tan", ["complex"]], ["add", "theorem", "deriv_tan", ["complex"]], ["add", "theorem", "differentiable_at_tan", ["complex"]], ["add", "theorem", "has_deriv_at_tan", ["complex"]], ["add", "theorem", "has_strict_deriv_at_tan", ["complex"]], ["add", "theorem", "tendsto_abs_tan_at_top", ["complex"]], ["add", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["complex"]], ["add", "theorem", "times_cont_diff_at_tan", ["complex"]]]}]}, {"timestamp": 1636734634, "sha": "62621659", "message": "feat(analysis/normed_space/continuous_affine_map): isometry from space of continuous affine maps to product of codomain with space of continuous linear maps (#10201)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/normed_space/continuous_affine_map.lean", "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": [["add", "theorem", "add_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "coe_cont_linear", ["continuous_affine_map"]], ["mod", "theorem", "coe_linear_eq_coe_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "comp_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "decomp", ["continuous_affine_map"]], ["add", "theorem", "neg_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "norm_comp_le", ["continuous_affine_map"]], ["add", "theorem", "norm_cont_linear_le", ["continuous_affine_map"]], ["add", "theorem", "norm_def", ["continuous_affine_map"]], ["add", "theorem", "norm_eq", ["continuous_affine_map"]], ["add", "theorem", "norm_image_zero_le", ["continuous_affine_map"]], ["add", "theorem", "smul_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "sub_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "to_affine_map_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "to_const_prod_continuous_linear_map_fst", ["continuous_affine_map"]], ["add", "theorem", "to_const_prod_continuous_linear_map_snd", ["continuous_affine_map"]], ["add", "theorem", "zero_cont_linear", ["continuous_affine_map"]]]}, {"oldPath": "src/topology/algebra/continuous_affine_map.lean", "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": [["add", "theorem", "add_apply", ["continuous_affine_map"]], ["add", "theorem", "coe_add", ["continuous_affine_map"]], ["add", "theorem", "coe_neg", ["continuous_affine_map"]], ["add", "theorem", "coe_smul", ["continuous_affine_map"]], ["add", "theorem", "coe_sub", ["continuous_affine_map"]], ["add", "theorem", "coe_zero", ["continuous_affine_map"]], ["add", "theorem", "neg_apply", ["continuous_affine_map"]], ["add", "theorem", "smul_apply", ["continuous_affine_map"]], ["add", "theorem", "sub_apply", ["continuous_affine_map"]], ["add", "theorem", "zero_apply", ["continuous_affine_map"]], ["add", "theorem", "coe_to_continuous_affine_map", ["continuous_linear_map"]], ["add", "def", "to_continuous_affine_map", ["continuous_linear_map"]], ["add", "theorem", "to_continuous_affine_map_map_zero", ["continuous_linear_map"]]]}]}, {"timestamp": 1636731514, "sha": "b9f7b4db", "message": "fix(algebra/graded_monoid): correct nonexistent names in tactic defaults (#10293)\nThese were left by a bad rename by me in the past, and resulted in the default values not actually working.", "changes": [{"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": []}]}, {"timestamp": 1636731513, "sha": "d7b5ffa0", "message": "chore(linear_algebra/multilinear): add const_of_is_empty (#10291)\nThis is extracted from `pi_tensor_product.is_empty_equiv`", "changes": [{"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "def", "const_of_is_empty", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}]}, {"timestamp": 1636731511, "sha": "c5027c91", "message": "doc(field_theory/separable): typo (#10290)", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}]}, {"timestamp": 1636729478, "sha": "6cd63207", "message": "feat(group_theory/complement): `is_complement'.sup_eq_top` (#10230)\nIf `H` and `K` are complementary subgroups, then `H ⊔ K = ⊤`.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "is_compl", ["subgroup", "is_complement'"]], ["add", "theorem", "sup_eq_top", ["subgroup", "is_complement'"]]]}]}, {"timestamp": 1636719886, "sha": "07be9042", "message": "doc(README): add list of emeritus maintainers (#10288)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1636717762, "sha": "b51335c4", "message": "feat(category_theory/sites/plus): `P⁺` for a presheaf `P`. (#10284)\nThis file adds the construction of `P⁺`, for a presheaf `P : Cᵒᵖ ⥤ D`, whenever `C` has a Grothendieck topology `J` and `D` has the appropriate (co)limits.\nLater, we will show that `P⁺⁺` is the sheafification of `P`, under certain additional hypotheses on `D`.\nSee https://stacks.math.columbia.edu/tag/00W1", "changes": [{"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": [["add", "def", "base", ["category_theory", "grothendieck_topology", "cover", "arrow"]], ["add", "def", "map", ["category_theory", "grothendieck_topology", "cover", "arrow"]], ["add", "structure", "arrow", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "coe_fun_coe", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "coe_pullback", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "condition", ["category_theory", "grothendieck_topology", "cover"]], ["add", "theorem", "ext", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "index", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "multifork", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "pullback", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "pullback_comp", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "pullback_id", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "base", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "theorem", "base_fst", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "theorem", "base_snd", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "def", "fst", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "def", "map", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "theorem", "map_fst", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "theorem", "map_snd", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "def", "snd", ["category_theory", "grothendieck_topology", "cover", "relation"]], ["add", "structure", "relation", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "to_multiequalizer", ["category_theory", "grothendieck_topology", "cover"]], ["add", "def", "cover", ["category_theory", "grothendieck_topology"]], ["add", "def", "pullback", ["category_theory", "grothendieck_topology"]], ["add", "def", "pullback_comp", ["category_theory", "grothendieck_topology"]], ["add", "def", "pullback_id", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/plus.lean", "changes": [["add", "def", "diagram", ["category_theory", "grothendieck_topology"]], ["add", "def", "diagram_pullback", ["category_theory", "grothendieck_topology"]], ["add", "def", "plus_functor", ["category_theory", "grothendieck_topology"]], ["add", "def", "plus_map", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "plus_map_to_plus", ["category_theory", "grothendieck_topology"]], ["add", "def", "plus_obj", ["category_theory", "grothendieck_topology"]], ["add", "def", "to_plus", ["category_theory", "grothendieck_topology"]], ["add", "def", "to_plus_nat_trans", ["category_theory", "grothendieck_topology"]]]}]}, {"timestamp": 1636712878, "sha": "e6790930", "message": "feat(measure_theory): define `measurable_space` instance on a quotient (#10275)", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_from_quotient", []], ["add", "theorem", "measurable_quot_mk", []], ["add", "theorem", "measurable_quotient_mk'", []], ["add", "theorem", "measurable_quotient_mk", []], ["add", "theorem", "measurable_set_quotient", []], ["add", "theorem", "measurable_coe", ["quotient_group"]], ["add", "theorem", "measurable_from_quotient", ["quotient_group"]]]}]}, {"timestamp": 1636709877, "sha": "c45e70ac", "message": "chore(analysis/special_functions/pow): put lemmas about derivatives into a new file (#10153)\nIn order to keep results about continuity of the power function in the original file, we prove some continuity results directly (these were previously proved using derivatives).", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["del", "theorem", "has_fderiv_at_cpow", ["complex"]], ["del", "theorem", "has_strict_deriv_at_const_cpow", ["complex"]], ["del", "theorem", "has_strict_deriv_at_cpow_const", ["complex"]], ["del", "theorem", "has_strict_fderiv_at_cpow'", ["complex"]], ["del", "theorem", "has_strict_fderiv_at_cpow", ["complex"]], ["add", "theorem", "continuous_at_const_cpow'", []], ["add", "theorem", "continuous_at_const_cpow", []], ["add", "theorem", "continuous_at_cpow", []], ["add", "theorem", "continuous_at_cpow_const", []], ["add", "theorem", "cpow_eq_nhds'", []], ["add", "theorem", "cpow_eq_nhds", []], ["del", "theorem", "deriv_rpow_const", []], ["del", "theorem", "deriv_within_rpow_const", []], ["del", "theorem", "rpow", ["differentiable"]], ["del", "theorem", "rpow_const", ["differentiable"]], ["del", "theorem", "const_cpow", ["differentiable_at"]], ["del", "theorem", "cpow", ["differentiable_at"]], ["del", "theorem", "rpow", ["differentiable_at"]], ["del", "theorem", "rpow_const", ["differentiable_at"]], ["del", "theorem", "rpow", ["differentiable_on"]], ["del", "theorem", "rpow_const", ["differentiable_on"]], ["del", "theorem", "const_cpow", ["differentiable_within_at"]], ["del", "theorem", "cpow", ["differentiable_within_at"]], ["del", "theorem", "rpow", ["differentiable_within_at"]], ["del", "theorem", "rpow_const", ["differentiable_within_at"]], ["del", "theorem", "const_cpow", ["has_deriv_at"]], ["del", "theorem", "cpow", ["has_deriv_at"]], ["del", "theorem", "cpow_const", ["has_deriv_at"]], ["del", "theorem", "rpow", ["has_deriv_at"]], ["del", "theorem", "rpow_const", ["has_deriv_at"]], ["del", "theorem", "const_cpow", ["has_deriv_within_at"]], ["del", "theorem", "cpow", ["has_deriv_within_at"]], ["del", "theorem", "cpow_const", ["has_deriv_within_at"]], ["del", "theorem", "rpow", ["has_deriv_within_at"]], ["del", "theorem", "rpow_const", ["has_deriv_within_at"]], ["del", "theorem", "const_cpow", ["has_fderiv_at"]], ["del", "theorem", "const_rpow", ["has_fderiv_at"]], ["del", "theorem", "cpow", ["has_fderiv_at"]], ["del", "theorem", "rpow", ["has_fderiv_at"]], ["del", "theorem", "rpow_const", ["has_fderiv_at"]], ["del", "theorem", "const_cpow", ["has_fderiv_within_at"]], ["del", "theorem", "const_rpow", ["has_fderiv_within_at"]], ["del", "theorem", "cpow", ["has_fderiv_within_at"]], ["del", "theorem", "rpow", ["has_fderiv_within_at"]], ["del", "theorem", "rpow_const", ["has_fderiv_within_at"]], ["del", "theorem", "const_cpow", ["has_strict_deriv_at"]], ["del", "theorem", "cpow", ["has_strict_deriv_at"]], ["del", "theorem", "cpow_const", ["has_strict_deriv_at"]], ["del", "theorem", "rpow", ["has_strict_deriv_at"]], ["del", "theorem", "const_cpow", ["has_strict_fderiv_at"]], ["del", "theorem", "const_rpow", ["has_strict_fderiv_at"]], ["del", "theorem", "cpow", ["has_strict_fderiv_at"]], ["del", "theorem", "rpow", ["has_strict_fderiv_at"]], ["del", "theorem", "rpow_const", ["has_strict_fderiv_at"]], ["add", "theorem", "continuous_at_const_rpow'", ["real"]], ["add", "theorem", "continuous_at_const_rpow", ["real"]], ["del", "theorem", "deriv_rpow_const'", ["real"]], ["del", "theorem", "deriv_rpow_const", ["real"]], ["del", "theorem", "differentiable_at_rpow_of_ne", ["real"]], ["del", "theorem", "differentiable_rpow_const", ["real"]], ["del", "theorem", "has_deriv_at_rpow_const", ["real"]], ["del", "theorem", "has_strict_deriv_at_const_rpow", ["real"]], ["del", "theorem", "has_strict_deriv_at_const_rpow_of_neg", ["real"]], ["del", "theorem", "has_strict_deriv_at_rpow_const", ["real"]], ["del", "theorem", "has_strict_deriv_at_rpow_const_of_ne", ["real"]], ["del", "theorem", "has_strict_fderiv_at_rpow_of_neg", ["real"]], ["del", "theorem", "has_strict_fderiv_at_rpow_of_pos", ["real"]], ["add", "theorem", "rpow_eq_nhds_of_neg", ["real"]], ["add", "theorem", "rpow_eq_nhds_of_pos", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_const", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_const_of_le", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_const_of_ne", ["real"]], ["del", "theorem", "times_cont_diff_at_rpow_of_ne", ["real"]], ["del", "theorem", "times_cont_diff_rpow_const_of_le", ["real"]], ["del", "theorem", "tendsto_one_plus_div_pow_exp", []], ["del", "theorem", "tendsto_one_plus_div_rpow_exp", []], ["del", "theorem", "rpow", ["times_cont_diff"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff"]], ["del", "theorem", "rpow", ["times_cont_diff_at"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff_at"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff_at"]], ["del", "theorem", "rpow", ["times_cont_diff_on"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff_on"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff_on"]], ["del", "theorem", "rpow", ["times_cont_diff_within_at"]], ["del", "theorem", "rpow_const_of_le", ["times_cont_diff_within_at"]], ["del", "theorem", "rpow_const_of_ne", ["times_cont_diff_within_at"]], ["add", "theorem", "zero_cpow_eq_nhds", []]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow_deriv.lean", "changes": [["add", "theorem", "has_fderiv_at_cpow", ["complex"]], ["add", "theorem", "has_strict_deriv_at_const_cpow", ["complex"]], ["add", "theorem", "has_strict_deriv_at_cpow_const", ["complex"]], ["add", "theorem", "has_strict_fderiv_at_cpow'", ["complex"]], ["add", "theorem", "has_strict_fderiv_at_cpow", ["complex"]], ["add", "theorem", "deriv_rpow_const", []], ["add", "theorem", "deriv_within_rpow_const", []], ["add", "theorem", "rpow", ["differentiable"]], ["add", "theorem", "rpow_const", ["differentiable"]], ["add", "theorem", "const_cpow", ["differentiable_at"]], ["add", "theorem", "cpow", ["differentiable_at"]], ["add", "theorem", "rpow", ["differentiable_at"]], ["add", "theorem", "rpow_const", ["differentiable_at"]], ["add", "theorem", "rpow", ["differentiable_on"]], ["add", "theorem", "rpow_const", ["differentiable_on"]], ["add", "theorem", "const_cpow", ["differentiable_within_at"]], ["add", "theorem", "cpow", ["differentiable_within_at"]], ["add", "theorem", "rpow", ["differentiable_within_at"]], ["add", "theorem", "rpow_const", ["differentiable_within_at"]], ["add", "theorem", "const_cpow", ["has_deriv_at"]], ["add", "theorem", "cpow", ["has_deriv_at"]], ["add", "theorem", "cpow_const", ["has_deriv_at"]], ["add", "theorem", "rpow", ["has_deriv_at"]], ["add", "theorem", "rpow_const", ["has_deriv_at"]], ["add", "theorem", "const_cpow", ["has_deriv_within_at"]], ["add", "theorem", "cpow", ["has_deriv_within_at"]], ["add", "theorem", "cpow_const", ["has_deriv_within_at"]], ["add", "theorem", "rpow", ["has_deriv_within_at"]], ["add", "theorem", "rpow_const", ["has_deriv_within_at"]], ["add", "theorem", "const_cpow", ["has_fderiv_at"]], ["add", "theorem", "const_rpow", ["has_fderiv_at"]], ["add", "theorem", "cpow", ["has_fderiv_at"]], ["add", "theorem", "rpow", ["has_fderiv_at"]], ["add", "theorem", "rpow_const", ["has_fderiv_at"]], ["add", "theorem", "const_cpow", ["has_fderiv_within_at"]], ["add", "theorem", "const_rpow", ["has_fderiv_within_at"]], ["add", "theorem", "cpow", ["has_fderiv_within_at"]], ["add", "theorem", "rpow", ["has_fderiv_within_at"]], ["add", "theorem", "rpow_const", ["has_fderiv_within_at"]], ["add", "theorem", "const_cpow", ["has_strict_deriv_at"]], ["add", "theorem", "cpow", ["has_strict_deriv_at"]], ["add", "theorem", "cpow_const", ["has_strict_deriv_at"]], ["add", "theorem", "rpow", ["has_strict_deriv_at"]], ["add", "theorem", "const_cpow", ["has_strict_fderiv_at"]], ["add", "theorem", "const_rpow", ["has_strict_fderiv_at"]], ["add", "theorem", "cpow", ["has_strict_fderiv_at"]], ["add", "theorem", "rpow", ["has_strict_fderiv_at"]], ["add", "theorem", "rpow_const", ["has_strict_fderiv_at"]], ["add", "theorem", "deriv_rpow_const'", ["real"]], ["add", "theorem", "deriv_rpow_const", ["real"]], ["add", "theorem", "differentiable_at_rpow_of_ne", ["real"]], ["add", "theorem", "differentiable_rpow_const", ["real"]], ["add", "theorem", "has_deriv_at_rpow_const", ["real"]], ["add", "theorem", "has_strict_deriv_at_const_rpow", ["real"]], ["add", "theorem", "has_strict_deriv_at_const_rpow_of_neg", ["real"]], ["add", "theorem", "has_strict_deriv_at_rpow_const", ["real"]], ["add", "theorem", "has_strict_deriv_at_rpow_const_of_ne", ["real"]], ["add", "theorem", "has_strict_fderiv_at_rpow_of_neg", ["real"]], ["add", "theorem", "has_strict_fderiv_at_rpow_of_pos", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_const", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_const_of_le", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_const_of_ne", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_of_ne", ["real"]], ["add", "theorem", "times_cont_diff_rpow_const_of_le", ["real"]], ["add", "theorem", "tendsto_one_plus_div_pow_exp", []], ["add", "theorem", "tendsto_one_plus_div_rpow_exp", []], ["add", "theorem", "rpow", ["times_cont_diff"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff"]], ["add", "theorem", "rpow", ["times_cont_diff_at"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff_at"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff_at"]], ["add", "theorem", "rpow", ["times_cont_diff_on"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff_on"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff_on"]], ["add", "theorem", "rpow", ["times_cont_diff_within_at"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff_within_at"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}]}, {"timestamp": 1636703987, "sha": "75207e91", "message": "refactor(linear_algebra/eigenspace): refactor `eigenvectors_linearly_independent` (#10198)\nThis refactors the proof of the lemma\n```lean\nlemma eigenvectors_linear_independent (f : End K V) (μs : set K) (xs : μs → V)\n (h_eigenvec : ∀ μ : μs, f.has_eigenvector μ (xs μ)) :\n linear_independent K xs\n```\nto extract the formulation\n```lean\nlemma eigenspaces_independent (f : End K V) : complete_lattice.independent f.eigenspace\n```\nfrom which `eigenvectors_linear_independent` follows as a 1-liner.\nI don't need this for anything (although it might have applications -- for example, cardinality lemmas) -- just think it's a possibly more elegant statement.", "changes": [{"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "theorem", "linear_map", ["dfinsupp", "sum_map_range_index"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "eigenspaces_independent", ["module", "End"]]]}]}, {"timestamp": 1636703986, "sha": "1019dd67", "message": "feat(measure_theory/probability_mass_function): Define a measure assosiated to a pmf (#9966)\nThis PR defines `pmf.to_outer_measure` and `pmf.to_measure`, where the measure of a set is given by the total probability of elements of the set, and shows that this is a probability measure.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "def", "support", ["pmf"]], ["add", "def", "to_measure", ["pmf"]], ["add", "theorem", "to_measure_apply'", ["pmf"]], ["add", "theorem", "to_measure_apply", ["pmf"]], ["add", "theorem", "to_measure_apply_eq_to_outer_measure_apply", ["pmf"]], ["add", "theorem", "to_measure_apply_finset", ["pmf"]], ["add", "theorem", "to_measure_apply_fintype", ["pmf"]], ["add", "theorem", "to_measure_apply_of_finite", ["pmf"]], ["add", "def", "to_outer_measure", ["pmf"]], ["add", "theorem", "to_outer_measure_apply'", ["pmf"]], ["add", "theorem", "to_outer_measure_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_eq_zero_iff", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_finset", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_fintype", ["pmf"]], ["add", "theorem", "to_outer_measure_apply_le_to_measure_apply", ["pmf"]], ["add", "theorem", "to_outer_measure_caratheodory", ["pmf"]]]}]}, {"timestamp": 1636701931, "sha": "9e1e4f01", "message": "feat(category_theory/sites/*): Dense subsite (#9694)\nDefined `cover_dense` functors as functors into sites such that each object can be covered by images of the functor.\nProved that for a `cover_dense` functor `G`, any morphisms of presheaves `G ⋙ ℱ ⟶ G ⋙ ℱ'` can be glued into a \nmorphism `ℱ ⟶ ℱ'`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/dense_subsite.lean", "changes": [["add", "theorem", "ext", ["category_theory", "cover_dense"]], ["add", "theorem", "functor_pullback_pushforward_covering", ["category_theory", "cover_dense"]], ["add", "def", "hom_over", ["category_theory", "cover_dense"]], ["add", "theorem", "iso_of_restrict_iso", ["category_theory", "cover_dense"]], ["add", "def", "iso_over", ["category_theory", "cover_dense"]], ["add", "def", "presheaf_iso", ["category_theory", "cover_dense"]], ["add", "def", "restrict_hom_equiv_hom", ["category_theory", "cover_dense"]], ["add", "def", "sheaf_coyoneda_hom", ["category_theory", "cover_dense"]], ["add", "theorem", "sheaf_eq_amalgamation", ["category_theory", "cover_dense"]], ["add", "def", "sheaf_hom", ["category_theory", "cover_dense"]], ["add", "theorem", "sheaf_hom_eq", ["category_theory", "cover_dense"]], ["add", "theorem", "sheaf_hom_restrict_eq", ["category_theory", "cover_dense"]], ["add", "def", "sheaf_iso", ["category_theory", "cover_dense"]], ["add", "def", "sheaf_yoneda_hom", ["category_theory", "cover_dense"]], ["add", "def", "app_hom", ["category_theory", "cover_dense", "types"]], ["add", "theorem", "app_hom_restrict", ["category_theory", "cover_dense", "types"]], ["add", "theorem", "app_hom_valid_glue", ["category_theory", "cover_dense", "types"]], ["add", "def", "app_iso", ["category_theory", "cover_dense", "types"]], ["add", "def", "presheaf_hom", ["category_theory", "cover_dense", "types"]], ["add", "def", "presheaf_iso", ["category_theory", "cover_dense", "types"]], ["add", "def", "pushforward_family", ["category_theory", "cover_dense", "types"]], ["add", "theorem", "pushforward_family_apply", ["category_theory", "cover_dense", "types"]], ["add", "theorem", "pushforward_family_compatible", ["category_theory", "cover_dense", "types"]], ["add", "def", "sheaf_iso", ["category_theory", "cover_dense", "types"]], ["add", "structure", "cover_dense", ["category_theory"]], ["add", "def", "cover_by_image", ["category_theory", "presieve"]], ["add", "structure", "cover_by_image_structure", ["category_theory", "presieve"]], ["add", "theorem", "in_cover_by_image", ["category_theory", "presieve"]], ["add", "def", "cover_by_image", ["category_theory", "sieve"]]]}]}, {"timestamp": 1636692776, "sha": "6fd688b5", "message": "chore(measure_theory): move `mutually_singular` to a new file (#10281)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "add_left", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "add_left_iff", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "add_right", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "add_right_iff", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "comm", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "mk", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "mono", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "mono_ac", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "smul", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "smul_nnreal", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "sum_left", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "sum_right", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "symm", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "zero_left", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "zero_right", ["measure_theory", "measure", "mutually_singular"]], ["del", "def", "mutually_singular", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/mutually_singular.lean", "changes": [["add", "theorem", "add_left", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "add_left_iff", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "add_right", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "add_right_iff", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "comm", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "mk", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "mono", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "mono_ac", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "smul", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "smul_nnreal", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "sum_left", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "sum_right", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "symm", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "zero_left", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "zero_right", ["measure_theory", "measure", "mutually_singular"]], ["add", "def", "mutually_singular", ["measure_theory", "measure"]]]}]}, {"timestamp": 1636692774, "sha": "d7e320e6", "message": "feat(category_theory/limits): Cone limiting iff terminal. (#10266)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/cone_category.lean", "changes": [["add", "def", "is_colimit_equiv_is_initial", ["category_theory", "limits", "cocone"]], ["add", "def", "is_limit_equiv_is_terminal", ["category_theory", "limits", "cone"]], ["add", "theorem", "desc_cocone_morphism_eq_is_initial_to", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_preserves_cocone_initial", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_reflects_cocone_initial", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "to_eq_desc_cocone_morphism", ["category_theory", "limits", "is_initial"]], ["add", "theorem", "lift_cone_morphism_eq_is_terminal_from", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_preserves_cone_terminal", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_reflects_cone_terminal", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "from_eq_lift_cone_morphism", ["category_theory", "limits", "is_terminal"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": [["add", "theorem", "has_initial_of_has_initial_of_preserves_colimit", ["category_theory", "limits"]], ["add", "def", "is_colimit_map_cocone_empty_cocone_equiv", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_has_initial_of_preserves_colimit", ["category_theory", "limits"]], ["add", "def", "is_initial_obj", ["category_theory", "limits", "is_initial"]], ["add", "def", "is_initial_of_obj", ["category_theory", "limits", "is_initial"]], ["add", "def", "is_terminal_obj", ["category_theory", "limits", "is_terminal"]], ["add", "def", "is_terminal_of_obj", ["category_theory", "limits", "is_terminal"]], ["del", "def", "is_terminal_obj_of_is_terminal", ["category_theory", "limits"]], ["del", "def", "is_terminal_of_is_terminal_obj", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_initial"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_initial"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_initial"]], ["add", "def", "preserves_initial_of_is_iso", ["category_theory", "limits"]], ["add", "def", "preserves_initial_of_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1636689082, "sha": "e5a79a7a", "message": "feat(analysis/normed_space/star): introduce C*-algebras (#10145)\nThis PR introduces normed star rings/algebras and C*-rings/algebras, as well as a version of `star` bundled as a linear isometric equivalence.", "changes": [{"oldPath": "src/algebra/star/module.lean", "newPath": "src/algebra/star/module.lean", "changes": [["mod", "def", "star_linear_equiv", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/star.lean", "changes": [["add", "theorem", "coe_starₗᵢ", []], ["add", "theorem", "norm_self_mul_star", ["cstar_ring"]], ["add", "theorem", "norm_star_mul_self'", ["cstar_ring"]], ["add", "def", "starₗᵢ", []], ["add", "theorem", "starₗᵢ_apply", []]]}]}, {"timestamp": 1636678558, "sha": "d6056eee", "message": "feat(field_theory/splitting_field): add eval_root_derivative_of_split (#10224)\nFrom flt-regular.", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "derivative_prod", ["polynomial"]], ["add", "theorem", "eval_multiset_prod_X_sub_C_derivative", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "aeval_root_derivative_of_splits", ["polynomial"]]]}]}, {"timestamp": 1636676381, "sha": "73b2b651", "message": "feat(category_theory/limits/concrete_category): A lemma about concrete multiequalizers (#10277)", "changes": [{"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["add", "theorem", "multiequalizer_ext", ["category_theory", "limits", "concrete"]]]}]}, {"timestamp": 1636672718, "sha": "0b4c5409", "message": "feat(field_theory/separable): X^n - 1 is separable iff ↑n ≠ 0. (#9779)\nMost of the proof actually due to @Vierkantor!", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "not_is_unit_X_pow_sub_one", ["polynomial"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "X_pow_sub_one_separable_iff", ["polynomial"]], ["add", "theorem", "separable_X_pow_sub_C_unit", ["polynomial"]]]}]}, {"timestamp": 1636659348, "sha": "8cd5f0ee", "message": "chore(category_theory/isomorphisms): Adjust priority for is_iso.comp_is_iso (#10276)\n[See Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/iso.20to.20is_iso.20for.20types/near/261122457)\nGiven `f : X ≅ Y` with `X Y : Type u`, without this change, typeclass inference cannot deduce `is_iso f.hom` because `f.hom` is defeq to `(λ x, x) ≫ f.hom`, triggering a loop.", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}]}, {"timestamp": 1636659347, "sha": "d6860258", "message": "feat(linear_algebra/pi_tensor_product): add subsingleton_equiv (#10274)\nThis is useful for constructing the tensor product of a single module, which we will ultimately need to show an isomorphism to `tensor_algebra`.\nThis also refactors `pempty_equiv` to use `is_empty`, which probably didn't exist at the time. This eliminates a surprising universe variable that was parameterizing `pempty`.", "changes": [{"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": [["add", "def", "is_empty_equiv", ["pi_tensor_product"]], ["add", "theorem", "is_empty_equiv_apply_tprod", ["pi_tensor_product"]], ["del", "def", "pempty_equiv", ["pi_tensor_product"]], ["add", "def", "subsingleton_equiv", ["pi_tensor_product"]], ["add", "theorem", "subsingleton_equiv_apply_tprod", ["pi_tensor_product"]]]}]}, {"timestamp": 1636659345, "sha": "f99d6386", "message": "feat(measure_theory): integral over a family of pairwise a.e. disjoint sets (#10268)\nAlso golf a few proofs", "changes": [{"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "has_sum_integral_Union_of_null_inter", ["measure_theory"]], ["add", "theorem", "integral_Union_of_null_inter", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "exists_subordinate_pairwise_disjoint", ["measure_theory"]]]}]}, {"timestamp": 1636659344, "sha": "12c868a5", "message": "refactor(group_theory/complement): Generalize `card_mul` to from subgroups to subsets (#10264)\nAdds `is_complement.card_mul`, which generalizes `is_complement'.card_mul`.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "card_mul", ["subgroup", "is_complement"]]]}]}, {"timestamp": 1636659342, "sha": "72ca0d33", "message": "feat(linear_algebra/pi_tensor_prod): generalize actions and provide missing smul_comm_class and is_scalar_tower instance (#10262)\nAlso squeezes some `simp`s.", "changes": [{"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": [["mod", "theorem", "smul_tprod_coeff'", ["pi_tensor_product"]], ["mod", "theorem", "smul_tprod_coeff", ["pi_tensor_product"]]]}]}, {"timestamp": 1636659341, "sha": "c7f3e5c6", "message": "feat(group_theory/submonoid/membership): `exists_multiset_of_mem_closure` (#10256)\nVersion of `exists_list_of_mem_closure` for `comm_monoid`.", "changes": [{"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "exists_multiset_of_mem_closure", ["submonoid"]]]}]}, {"timestamp": 1636659340, "sha": "9a30dcfd", "message": "feat(data/finset/pairwise): Interaction of `set.pairwise_disjoint` with `finset` (#10244)\nThis proves a few results about `set.pairwise_disjoint` and `finset` that couldn't go `data.set.pairwise` because of cyclic imports.", "changes": [{"oldPath": null, "newPath": "src/data/finset/pairwise.lean", "changes": [["add", "theorem", "pairwise_disjoint_range_singleton", ["finset"]], ["add", "theorem", "bUnion_finset", ["set", "pairwise_disjoint"]], ["add", "theorem", "elim_finset", ["set", "pairwise_disjoint"]], ["add", "theorem", "image_finset_of_le", ["set", "pairwise_disjoint"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "bUnion", ["set", "pairwise_disjoint"]]]}]}, {"timestamp": 1636659338, "sha": "820f8d72", "message": "feat(group_theory/index): Index of `subgroup.map` (#10232)\nProves `(H.map f).index = H.index`, assuming `function.surjective f` and `f.ker ≤ H`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "dvd_index_map", ["subgroup"]], ["add", "theorem", "index_map", ["subgroup"]], ["add", "theorem", "index_map_dvd", ["subgroup"]], ["add", "theorem", "index_map_eq", ["subgroup"]]]}]}, {"timestamp": 1636659337, "sha": "4b1a0577", "message": "feat(algebra/order/sub): An `add_group` has ordered subtraction (#10225)\nThis wraps up `sub_le_iff_le_add` in an `has_ordered_sub` instance.", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}]}, {"timestamp": 1636659336, "sha": "a9c3ab5d", "message": "feat(data/polynomial): assorted lemmas on division and gcd of polynomials (#9600)\nThis PR provides a couple of lemmas involving the division and gcd operators of polynomials that I needed for #9563. The ones that generalized to `euclidean_domain` and/or `gcd_monoid` are provided in the respective files.", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "div_dvd_of_dvd", ["euclidean_domain"]], ["add", "theorem", "div_one", ["euclidean_domain"]], ["add", "theorem", "mul_div_mul_cancel", ["euclidean_domain"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "C_mul_dvd", ["polynomial"]], ["add", "theorem", "div_C_mul", ["polynomial"]], ["add", "theorem", "dvd_C_mul", ["polynomial"]], ["add", "theorem", "leading_coeff_div", ["polynomial"]]]}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": [["add", "theorem", "left_div_gcd_ne_zero", []], ["add", "theorem", "right_div_gcd_ne_zero", []]]}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": [["add", "theorem", "degree_gcd_le_left", ["polynomial"]], ["add", "theorem", "degree_gcd_le_right", ["polynomial"]]]}]}, {"timestamp": 1636657323, "sha": "01e7b209", "message": "feat(analysis/subadditive): prove that, if u_n is subadditive, then u_n / n converges. (#10258)", "changes": [{"oldPath": null, "newPath": "src/analysis/subadditive.lean", "changes": [["add", "theorem", "apply_mul_add_le", ["subadditive"]], ["add", "theorem", "eventually_div_lt_of_div_lt", ["subadditive"]], ["add", "theorem", "lim_le_div", ["subadditive"]], ["add", "theorem", "tendsto_lim", ["subadditive"]], ["add", "def", "subadditive", []]]}]}, {"timestamp": 1636642125, "sha": "4df3cd76", "message": "chore(analysis/special_functions/complex/log): move results about derivatives to a new file (#10117)", "changes": [{"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["del", "def", "exp_local_homeomorph", ["complex"]], ["del", "theorem", "has_strict_deriv_at_log", ["complex"]], ["del", "theorem", "has_strict_fderiv_at_log_real", ["complex"]], ["del", "theorem", "times_cont_diff_at_log", ["complex"]], ["add", "theorem", "continuous_at_clog", []], ["del", "theorem", "clog", ["differentiable"]], ["del", "theorem", "clog", ["differentiable_at"]], ["del", "theorem", "clog", ["differentiable_on"]], ["del", "theorem", "clog", ["differentiable_within_at"]], ["del", "theorem", "clog", ["has_deriv_at"]], ["del", "theorem", "clog_real", ["has_deriv_at"]], ["del", "theorem", "clog", ["has_deriv_within_at"]], ["del", "theorem", "clog_real", ["has_deriv_within_at"]], ["del", "theorem", "clog", ["has_fderiv_at"]], ["del", "theorem", "clog", ["has_fderiv_within_at"]], ["del", "theorem", "clog", ["has_strict_deriv_at"]], ["del", "theorem", "clog_real", ["has_strict_deriv_at"]], ["del", "theorem", "clog", ["has_strict_fderiv_at"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/complex/log_deriv.lean", "changes": [["add", "def", "exp_local_homeomorph", ["complex"]], ["add", "theorem", "has_strict_deriv_at_log", ["complex"]], ["add", "theorem", "has_strict_fderiv_at_log_real", ["complex"]], ["add", "theorem", "times_cont_diff_at_log", ["complex"]], ["add", "theorem", "clog", ["differentiable"]], ["add", "theorem", "clog", ["differentiable_at"]], ["add", "theorem", "clog", ["differentiable_on"]], ["add", "theorem", "clog", ["differentiable_within_at"]], ["add", "theorem", "clog", ["has_deriv_at"]], ["add", "theorem", "clog_real", ["has_deriv_at"]], ["add", "theorem", "clog", ["has_deriv_within_at"]], ["add", "theorem", "clog_real", ["has_deriv_within_at"]], ["add", "theorem", "clog", ["has_fderiv_at"]], ["add", "theorem", "clog", ["has_fderiv_within_at"]], ["add", "theorem", "clog", ["has_strict_deriv_at"]], ["add", "theorem", "clog_real", ["has_strict_deriv_at"]], ["add", "theorem", "clog", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}]}, {"timestamp": 1636639469, "sha": "6e268cd8", "message": "chore(probability_theory/notation): change `volume` to `measure_theory.measure.volume` (#10272)", "changes": [{"oldPath": "src/probability_theory/notation.lean", "newPath": "src/probability_theory/notation.lean", "changes": []}]}, {"timestamp": 1636636956, "sha": "270c644c", "message": "feat(measure_theory): add `ae_measurable.sum_measure` (#10271)\nAlso add a few supporting lemmas.", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_of_subsingleton_codomain", []]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "sum_measure", ["ae_measurable"]], ["add", "theorem", "ae_measurable_Union_iff", []], ["mod", "theorem", "ae_measurable_add_measure_iff", []], ["add", "theorem", "ae_measurable_of_subsingleton_codomain", []], ["add", "theorem", "ae_measurable_sum_measure_iff", []], ["add", "theorem", "ae_sum_eq", ["measure_theory", "measure"]], ["add", "theorem", "ae_sum_iff'", ["measure_theory", "measure"]], ["add", "theorem", "ae_sum_iff", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Union_ae", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Union_apply_ae", ["measure_theory", "measure"]], ["add", "theorem", "sum_apply_eq_zero'", ["measure_theory", "measure"]], ["add", "theorem", "sum_apply_eq_zero", ["measure_theory", "measure"]]]}]}, {"timestamp": 1636631053, "sha": "c062d9ea", "message": "feat(*): more bundled versions of `(fin 2 → α) ≃ (α × α)` (#10214)\nAlso ensure that the inverse function uses vector notation when possible.", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["mod", "def", "fin_two_arrow_equiv", []]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "fin_two_arrow", ["linear_equiv"]], ["add", "def", "pi_fin_two", ["linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "fin_two_arrow", ["continuous_linear_equiv"]], ["add", "def", "pi_fin_two", ["continuous_linear_equiv"]], ["add", "def", "apply", ["continuous_linear_equiv", "simps"]], ["add", "def", "symm_apply", ["continuous_linear_equiv", "simps"]], ["add", "def", "apply", ["continuous_linear_map", "simps"]], ["add", "def", "coe", ["continuous_linear_map", "simps"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "fin_two_arrow", ["homeomorph"]], ["add", "def", "{u}", ["homeomorph"]]]}]}, {"timestamp": 1636626375, "sha": "e4a882dd", "message": "feat(measure_theory): a file about null measurable sets/functions (#10231)\n* Move definitions and lemmas about `null_measurable` to a new file.\n* Redefine, rename, review API.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "mul_support_eq_preimage", ["function"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "def", "completion", []], ["del", "theorem", "ae_eq", ["measurable"]], ["del", "theorem", "diff_null", ["measurable_set"]], ["del", "theorem", "null_measurable_set", ["measurable_set"]], ["del", "theorem", "out", ["measure_theory", "measure", "is_complete"]], ["del", "theorem", "is_complete_iff", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply₀", ["measure_theory", "measure"]], ["del", "theorem", "measure_Union", ["measure_theory"]], ["add", "theorem", "mono", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "mono_ac", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "to_measure_apply₀", ["measure_theory"]], ["del", "def", "null_measurable", []], ["del", "theorem", "Union_nat", ["null_measurable_set"]], ["del", "theorem", "compl", ["null_measurable_set"]], ["del", "theorem", "diff_null", ["null_measurable_set"]], ["del", "theorem", "union_null", ["null_measurable_set"]], ["del", "def", "null_measurable_set", []], ["del", "theorem", "null_measurable_set_iff", []], ["del", "theorem", "null_measurable_set_iff_ae", []], ["del", "theorem", "null_measurable_set_iff_sandwich", []], ["del", "theorem", "null_measurable_set_measure_eq", []], ["del", "theorem", "null_measurable_set_of_complete", []], ["del", "theorem", "null_null_measurable_set", []], ["del", "theorem", "restrict_apply_of_null_measurable_set", []]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "ae_le_to_measurable", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/null_measurable.lean", "changes": [["add", "theorem", "null_measurable_set_bInter", ["finset"]], ["add", "theorem", "null_measurable_set_bUnion", ["finset"]], ["add", "theorem", "congr_ae", ["measurable"]], ["add", "theorem", "null_measurable_set", ["measurable_set"]], ["add", "theorem", "comp_null_measurable", ["measure_theory", "measurable"]], ["add", "theorem", "measurable_set_of_null", ["measure_theory"]], ["add", "theorem", "coe_completion", ["measure_theory", "measure"]], ["add", "def", "completion", ["measure_theory", "measure"]], ["add", "theorem", "completion_apply", ["measure_theory", "measure"]], ["add", "theorem", "out", ["measure_theory", "measure", "is_complete"]], ["add", "theorem", "is_complete_iff", ["measure_theory", "measure"]], ["add", "theorem", "measure_Union", ["measure_theory"]], ["add", "theorem", "measure_Union₀", ["measure_theory"]], ["add", "theorem", "measure_union₀", ["measure_theory"]], ["add", "theorem", "congr", ["measure_theory", "null_measurable"]], ["add", "theorem", "measurable_of_complete", ["measure_theory", "null_measurable"]], ["add", "def", "null_measurable", ["measure_theory"]], ["add", "theorem", "Inter_Prop", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "Inter_fintype", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "Union_Prop", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "Union_fintype", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "compl", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "compl_iff", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "compl_to_measurable_compl_ae_eq", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "exists_measurable_subset_ae_eq", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "exists_measurable_superset_ae_eq", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "measurable_of_complete", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "of_compl", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "of_null", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "of_subsingleton", ["measure_theory", "null_measurable_set"]], ["add", "theorem", "to_measurable_ae_eq", ["measure_theory", "null_measurable_set"]], ["add", "def", "null_measurable_set", ["measure_theory"]], ["add", "theorem", "null_measurable_set_empty", ["measure_theory"]], ["add", "theorem", "null_measurable_set_eq", ["measure_theory"]], ["add", "theorem", "null_measurable_set_insert", ["measure_theory"]], ["add", "theorem", "null_measurable_set_singleton", ["measure_theory"]], ["add", "theorem", "null_measurable_set_to_measurable", ["measure_theory"]], ["add", "theorem", "null_measurable_set_univ", ["measure_theory"]], ["add", "def", "null_measurable_space", ["measure_theory"]], ["add", "theorem", "null_measurable_set_bInter", ["set", "finite"]], ["add", "theorem", "null_measurable_set_bUnion", ["set", "finite"]], ["add", "theorem", "null_measurable_set_sInter", ["set", "finite"]], ["add", "theorem", "null_measurable_set_sUnion", ["set", "finite"]]]}]}, {"timestamp": 1636622964, "sha": "d5964a9a", "message": "feat(measure_theory): `int.floor` etc are measurable (#10265)\n## API changes\n### `algebra/order/archimedean`\n* rename `rat.cast_floor` to `rat.floor_cast` to reflect the order of operations;\n* same for `rat.cast_ceil` and `rat.cast_round`;\n* add `rat.cast_fract`.\n### `algebra/order/floor`\n* add `@[simp]` to `nat.floor_eq_zero`;\n* add `nat.floor_eq_iff'`, `nat.preimage_floor_zero`, and `nat.preimage_floor_of_ne_zero`;\n* add `nat.ceil_eq_iff`, `nat.preimage_ceil_zero`, and `nat.preimage_ceil_of_ne_zero`;\n* add `int.preimage_floor_singleton`;\n* add `int.self_sub_floor`, `int.fract_int_add`, `int.preimage_fract`, `int.image_fract`;\n* add `int.preimage_ceil_singleton`.\n### `measure_theory/function/floor`\nNew file. Prove that the functions defined in `algebra.order.floor` are measurable.", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["del", "theorem", "cast_ceil", ["rat"]], ["del", "theorem", "cast_floor", ["rat"]], ["add", "theorem", "cast_fract", ["rat"]], ["del", "theorem", "cast_round", ["rat"]], ["add", "theorem", "ceil_cast", ["rat"]], ["add", "theorem", "floor_cast", ["rat"]], ["add", "theorem", "round_cast", ["rat"]]]}, {"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["mod", "theorem", "fract_add_int", ["int"]], ["add", "theorem", "fract_int_add", ["int"]], ["mod", "theorem", "fract_sub_int", ["int"]], ["add", "theorem", "image_fract", ["int"]], ["add", "theorem", "preimage_ceil_singleton", ["int"]], ["add", "theorem", "preimage_floor_singleton", ["int"]], ["add", "theorem", "preimage_fract", ["int"]], ["add", "theorem", "self_sub_floor", ["int"]], ["add", "theorem", "ceil_eq_iff", ["nat"]], ["add", "theorem", "floor_eq_iff'", ["nat"]], ["mod", "theorem", "floor_eq_zero", ["nat"]], ["add", "theorem", "preimage_ceil_of_ne_zero", ["nat"]], ["add", "theorem", "preimage_ceil_zero", ["nat"]], ["add", "theorem", "preimage_floor_of_ne_zero", ["nat"]], ["add", "theorem", "preimage_floor_zero", ["nat"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/floor.lean", "changes": [["add", "theorem", "measurable_ceil", ["int"]], ["add", "theorem", "measurable_floor", ["int"]], ["add", "theorem", "ceil", ["measurable"]], ["add", "theorem", "floor", ["measurable"]], ["add", "theorem", "fract", ["measurable"]], ["add", "theorem", "nat_ceil", ["measurable"]], ["add", "theorem", "nat_floor", ["measurable"]], ["add", "theorem", "measurable_fract", []], ["add", "theorem", "image_fract", ["measurable_set"]], ["add", "theorem", "measurable_ceil", ["nat"]], ["add", "theorem", "measurable_floor", ["nat"]]]}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1636615435, "sha": "8c1fa705", "message": "feat(category_theory/limits/concrete_category): Some lemmas about filtered colimits (#10270)\nThis PR adds some lemmas about (filtered) colimits in concrete categories which are preserved under the forgetful functor.\nThis will be used later for the sheafification construction.", "changes": [{"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["add", "theorem", "colimit_exists_of_rep_eq", ["category_theory", "limits", "concrete"]], ["add", "theorem", "colimit_rep_eq_iff_exists", ["category_theory", "limits", "concrete"]], ["add", "theorem", "colimit_rep_eq_of_exists", ["category_theory", "limits", "concrete"]], ["add", "theorem", "is_colimit_exists_of_rep_eq", ["category_theory", "limits", "concrete"]], ["add", "theorem", "is_colimit_rep_eq_iff_exists", ["category_theory", "limits", "concrete"]], ["add", "theorem", "is_colimit_rep_eq_of_exists", ["category_theory", "limits", "concrete"]]]}]}, {"timestamp": 1636581129, "sha": "dfa73639", "message": "feat(analysis/normed_space/finite_dimension): finite-dimensionality of spaces of continuous linear map (#10259)", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner_self_eq_norm_mul_norm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_eq_norm_sq", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_eq_norm_mul_norm", []], ["mod", "theorem", "inner_self_eq_norm_sq", []], ["add", "theorem", "real_inner_self_eq_norm_mul_norm", []], ["mod", "theorem", "real_inner_self_eq_norm_sq", []]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["add", "theorem", "to_dual_symm_apply", ["inner_product_space"]]]}, {"oldPath": "src/analysis/inner_product_space/rayleigh.lean", "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "coe_lm", ["continuous_linear_map"]]]}]}, {"timestamp": 1636577078, "sha": "3c2bc2e7", "message": "lint(scripts/lint-style.py): add indentation linter (#10257)", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}]}, {"timestamp": 1636565144, "sha": "6f10557a", "message": "refactor(order): order_{top,bot} as mixin (#10097)\nThis changes `order_top α` / `order_bot α` to _require_ `has_le α` instead of _extending_ `partial_order α`.\nAs a result, `order_top` can be combined with other lattice typeclasses. This lends itself to more refactors downstream, such as phrasing lemmas that currently require orders/semilattices and top/bot to provide them as separate TC inference, instead of \"bundled\" classes like `semilattice_inf_top`.\nThis refactor also provides the basis for making more consistent the \"extended\" algebraic classes, like \"e(nn)real\", \"enat\", etc. Some proof terms for lemmas about `nnreal` and `ennreal` have been switched to rely on more direct coercions from the underlying non-extended type or other (semi)rings.\nModify `semilattice_{inf,sup}_{top,bot}` to not directly inherit from\n`order_{top,bot}`. Instead, they are now extending from `has_{top,bot}`. Extending `order_{top,bot}` is now only possible is `has_le` is provided to the TC cache at `extends` declaration time, when using `old_structure_cmd true`. That is,\n```\nset_option old_structure_cmd true\nclass mnwe (α : Type u) extends semilattice_inf α, order_top α.\n```\nerrors with\n```\ntype mismatch at application\n @semilattice_inf.to_partial_order α top\nterm\n top\nhas type\n α\nbut is expected to have type\n semilattice_inf α\n```\nOne can make this work through one of three ways:\nNo `old_structure_cmd`, which is unfriendly to the rest of the class hierarchy\nRequire `has_le` in `class mwe (α : Type u) [has_le α] extends semilattice_inf α, order_top α.`, which is unfriendly to the existing hierarchy and how lemmas are stated.\nProvide an additional axiom on top of a \"data-only\" TC and have a low-priority instance:\n```\nclass semilattice_inf_top (α : Type u) extends semilattice_inf α, has_top α :=\n(le_top : ∀ a : α, a ≤ ⊤)\n@[priority 100]\ninstance semilattice_inf_top.to_order_top : order_top α :=\n{ top := ⊤, le_top := semilattice_inf_top.le_top }\n```\nThe third option is chosen in this refactor.\nPulled out from #9891, without the semilattice refactor.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": [["add", "theorem", "bot_eq", ["nonneg"]]]}, {"oldPath": "src/algebra/tropical/basic.lean", "newPath": "src/algebra/tropical/basic.lean", "changes": [["mod", "theorem", "le_zero", ["tropical"]]]}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "bot_eq_empty", ["finset"]]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "def", "Ici_bot", ["order_iso"]], ["mod", "def", "Iic_top", ["order_iso"]], ["mod", "theorem", "Ici_bot", ["set"]], ["mod", "theorem", "Ici_top", ["set"]], ["mod", "theorem", "Iic_bot", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "theorem", "coe_bot", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["mod", "theorem", "is_atom_iff", ["order_iso"]], ["mod", "theorem", "is_atomic_iff", ["order_iso"]], ["mod", "theorem", "is_coatom_iff", ["order_iso"]], ["mod", "theorem", "is_coatomic_iff", ["order_iso"]], ["mod", "theorem", "is_simple_lattice", ["order_iso"]], ["mod", "theorem", "is_simple_lattice_iff", ["order_iso"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "bot_le", []], ["mod", "theorem", "le_top", []], ["mod", "theorem", "not_lt_bot", []], ["mod", "theorem", "not_top_lt", []], ["mod", "theorem", "ext", ["order_bot"]], ["mod", "theorem", "ext_bot", ["order_bot"]], ["mod", "theorem", "ext", ["order_top"]], ["mod", "theorem", "ext_top", ["order_top"]], ["mod", "theorem", "maximal_preimage_top", ["strict_mono"]], ["mod", "theorem", "minimal_preimage_bot", ["strict_mono"]], ["mod", "theorem", "get_or_else_bot_le_iff", ["with_bot"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "theorem", "is_glb_empty", []], ["mod", "theorem", "is_glb_univ", []], ["mod", "theorem", "is_greatest_univ", []], ["mod", "theorem", "is_least_univ", []], ["mod", "theorem", "is_lub_empty", []], ["mod", "theorem", "is_lub_univ", []], ["mod", "theorem", "lower_bounds_univ", ["order_bot"]], ["mod", "theorem", "upper_bounds_univ", ["order_top"]]]}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": [["mod", "theorem", "closure_top", ["lower_adjoint"]]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "at_bot_eq", ["filter", "order_bot"]], ["mod", "theorem", "at_top_eq", ["filter", "order_top"]], ["mod", "theorem", "tendsto_at_bot_pure", ["filter"]], ["mod", "theorem", "tendsto_at_top_pure", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "lt_top_iff_ne_top", ["filter", "eventually"]], ["mod", "theorem", "lt_top_of_ne", ["filter", "eventually"]], ["mod", "theorem", "ne_top_of_lt", ["filter", "eventually"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["mod", "def", "lift_order_bot", ["galois_coinsertion"]], ["mod", "def", "lift_order_bot", ["galois_connection"]], ["mod", "def", "lift_order_top", ["galois_connection"]], ["mod", "def", "lift_order_top", ["galois_insertion"]], ["mod", "def", "gi_get_or_else_bot", ["with_bot"]]]}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": [["mod", "theorem", "coe_top", ["set", "Ici"]], ["mod", "theorem", "coe_bot", ["set", "Iic"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "theorem", "is_bounded_ge_of_bot", ["filter"]], ["mod", "theorem", "is_bounded_le_of_top", ["filter"]], ["mod", "theorem", "is_cobounded_ge_of_top", ["filter"]], ["mod", "theorem", "is_cobounded_le_of_bot", ["filter"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": []}, {"oldPath": "src/order/pfilter.lean", "newPath": "src/order/pfilter.lean", "changes": []}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "map_bot'", ["order_iso"]], ["mod", "theorem", "map_bot", ["order_iso"]], ["mod", "theorem", "map_top'", ["order_iso"]], ["mod", "theorem", "map_top", ["order_iso"]]]}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": []}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["mod", "theorem", "nhds_bot_order", []], ["mod", "theorem", "nhds_top_order", []], ["mod", "theorem", "tendsto_nhds_bot_mono'", []], ["mod", "theorem", "tendsto_nhds_bot_mono", []], ["mod", "theorem", "tendsto_nhds_top_mono'", []], ["mod", "theorem", "tendsto_nhds_top_mono", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "tendsto_at_top_nhds", ["order_top"]]]}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1636561570, "sha": "cd5cb441", "message": "chore(set_theory/cardinal_ordinal): golf some proofs (#10260)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}]}, {"timestamp": 1636555949, "sha": "8aadbcb7", "message": "feat(linear_algebra/*_algebra): add some simp lemmas about the algebra map and generators of free constructions (#10247)\nThese are quite repetitive, but I'm not sure how to generalize", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["add", "theorem", "algebra_map_eq_one_iff", ["free_algebra"]], ["add", "theorem", "algebra_map_eq_zero_iff", ["free_algebra"]], ["add", "theorem", "algebra_map_inj", ["free_algebra"]], ["add", "theorem", "ι_inj", ["free_algebra"]], ["add", "theorem", "ι_ne_algebra_map", ["free_algebra"]], ["add", "theorem", "ι_ne_one", ["free_algebra"]], ["add", "theorem", "ι_ne_zero", ["free_algebra"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["add", "theorem", "algebra_map_eq_one_iff", ["exterior_algebra"]], ["add", "theorem", "algebra_map_eq_zero_iff", ["exterior_algebra"]], ["add", "theorem", "algebra_map_inj", ["exterior_algebra"]], ["add", "def", "to_triv_sq_zero_ext", ["exterior_algebra"]], ["add", "theorem", "to_triv_sq_zero_ext_ι", ["exterior_algebra"]], ["add", "theorem", "ι_eq_algebra_map_iff", ["exterior_algebra"]], ["add", "theorem", "ι_eq_zero_iff", ["exterior_algebra"]], ["add", "theorem", "ι_inj", ["exterior_algebra"]], ["add", "theorem", "ι_ne_one", ["exterior_algebra"]], ["add", "theorem", "ι_range_disjoint_one", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["add", "theorem", "algebra_map_eq_one_iff", ["tensor_algebra"]], ["add", "theorem", "algebra_map_eq_zero_iff", ["tensor_algebra"]], ["add", "theorem", "algebra_map_inj", ["tensor_algebra"]], ["add", "def", "to_triv_sq_zero_ext", ["tensor_algebra"]], ["add", "theorem", "to_triv_sq_zero_ext_ι", ["tensor_algebra"]], ["add", "theorem", "ι_eq_algebra_map_iff", ["tensor_algebra"]], ["add", "theorem", "ι_eq_zero_iff", ["tensor_algebra"]], ["add", "theorem", "ι_inj", ["tensor_algebra"]], ["add", "theorem", "ι_ne_one", ["tensor_algebra"]], ["add", "theorem", "ι_range_disjoint_one", ["tensor_algebra"]]]}]}, {"timestamp": 1636555948, "sha": "543fcef1", "message": "chore(algebra/group_power/lemmas): minimize imports (#10246)\nMost of these were imported transitively anyway, but `data.list.basic` is unneeded.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}]}, {"timestamp": 1636555946, "sha": "444b5964", "message": "doc(ring_theory/norm) `norm_eq_prod_embeddings` docstring (#10242)", "changes": [{"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}]}, {"timestamp": 1636555944, "sha": "bbbefe4e", "message": "feat(measure_theory/constructions/{pi,prod}): drop some measurability assumptions (#10241)\nSome lemmas (most notably `prod_prod` and `pi_pi`) are true for non-measurable sets as well.", "changes": [{"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": [["mod", "theorem", "length_sorted_univ", ["encodable"]], ["mod", "theorem", "mem_sorted_univ", ["encodable"]], ["mod", "theorem", "sorted_univ_nodup", ["encodable"]], ["add", "theorem", "sorted_univ_to_finset", ["encodable"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["add", "theorem", "pi'_eq_pi", ["measure_theory", "measure"]], ["mod", "theorem", "pi'_pi", ["measure_theory", "measure"]], ["del", "theorem", "pi'_pi_le", ["measure_theory", "measure"]], ["mod", "theorem", "pi_ball", ["measure_theory", "measure"]], ["mod", "theorem", "pi_closed_ball", ["measure_theory", "measure"]], ["mod", "theorem", "pi_pi", ["measure_theory", "measure"]], ["add", "theorem", "pi_pi_aux", ["measure_theory", "measure"]], ["mod", "theorem", "pi_univ", ["measure_theory", "measure"]], ["del", "theorem", "tprod_tprod_le", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["mod", "theorem", "prod_prod", ["measure_theory", "measure"]], ["del", "theorem", "prod_prod_le", ["measure_theory", "measure"]], ["mod", "theorem", "prod_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_prod_eq_prod_univ", ["measure_theory", "measure"]], ["add", "theorem", "set_integral_prod", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["add", "theorem", "inv", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": [["mod", "theorem", "measure_inv_null", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_ne_zero", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_null", ["measure_theory"]], ["del", "theorem", "measure_null_of_measure_inv_null", ["measure_theory"]], ["add", "theorem", "quasi_measure_preserving_inv", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "preimage_null", ["measure_theory", "measure", "quasi_measure_preserving"]]]}]}, {"timestamp": 1636555943, "sha": "eadd4400", "message": "feat(group_theory/index): `card_mul_index` (#10228)\nProves `nat.card H * H.index = nat.card G` as the special case of `K.relindex H * H.index = K.index` when `K = ⊥`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "card_mul_index", ["subgroup"]]]}]}, {"timestamp": 1636555941, "sha": "2b57ee7f", "message": "fix(*): fix many indentation mistakes (#10163)", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "archive/miu_language/decision_nec.lean", "newPath": "archive/miu_language/decision_nec.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/pushout.lean", "newPath": "src/algebra/category/CommRing/pushout.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": []}, {"oldPath": "src/data/list/tfae.lean", "newPath": "src/data/list/tfae.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/rbmap/default.lean", "newPath": "src/data/rbmap/default.lean", "changes": []}, {"oldPath": "src/data/rbtree/basic.lean", "newPath": "src/data/rbtree/basic.lean", "changes": []}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": []}, {"oldPath": "src/data/rbtree/min_max.lean", "newPath": "src/data/rbtree/min_max.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/pi/bounds.lean", "newPath": "src/data/real/pi/bounds.lean", "changes": []}, {"oldPath": "src/data/stream/init.lean", "newPath": "src/data/stream/init.lean", "changes": []}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/topology/algebra/valuation.lean", "newPath": "src/topology/algebra/valuation.lean", "changes": []}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}]}, {"timestamp": 1636555940, "sha": "f41854e8", "message": "feat(ring_theory/ideal/over): algebra structure on R/p → S/P for `P` lying over `p` (#9858)\nThis PR shows `P` lies over `p` if there is an injective map completing the square `R/p ← R —f→ S → S/P`, and conversely that there is a (not necessarily injective, since `f` doesn't have to be) map completing the square if `P` lies over `p`. Then we specialize this to the case where `P = map f p` to provide an `algebra p.quotient (map f p).quotient` instance.\nThis algebra instance is useful if you want to study the extension `R → S` locally at `p`, e.g. to show `R/p : S/pS` has the same dimension as `Frac(R) : Frac(S)` if `p` is prime.", "changes": [{"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["add", "theorem", "comap_eq_of_scalar_tower_quotient", ["ideal"]], ["add", "theorem", "algebra_map_quotient_map_quotient", ["ideal", "quotient"]], ["add", "def", "algebra_quotient_of_le_comap", ["ideal", "quotient"]], ["add", "theorem", "mk_smul_mk_quotient_map_quotient", ["ideal", "quotient"]]]}]}, {"timestamp": 1636555938, "sha": "e1fea3a1", "message": "feat(ring_theory/ideal): the product and infimum of principal ideals (#9852)\nThree useful lemmas for applying the Chinese remainder theorem when an ideal is generated by one, non-prime, element.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "prod_span", ["submodule"]], ["add", "theorem", "prod_span_singleton", ["submodule"]]]}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "theorem", "finset_inf_coe", ["submodule"]], ["add", "theorem", "mem_finset_inf", ["submodule"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "finset_prod_singleton", ["set"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "finset_inf_span_singleton", ["ideal"]], ["add", "theorem", "infi_span_singleton", ["ideal"]], ["add", "theorem", "prod_span", ["ideal"]], ["add", "theorem", "prod_span_singleton", ["ideal"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1636549971, "sha": "bfd3a89c", "message": "doc(algebra/ring/basic): fix typo (#10250)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}]}, {"timestamp": 1636526622, "sha": "18412ef1", "message": "feat(data/nat/cast): Cast of natural division is less than division of casts (#10251)", "changes": [{"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_div_le", ["nat"]]]}]}, {"timestamp": 1636512567, "sha": "3f173e11", "message": "feat(group_theory/complement): iff-lemmas for when bottom and top subgroups are complementary (#10143)\nAdds iff lemmas for when bottom and top subgroups are complementary.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "eq_singleton_iff_nonempty_unique_mem", ["set"]], ["mod", "theorem", "eq_singleton_iff_unique_mem", ["set"]], ["add", "theorem", "exists_eq_singleton_iff_nonempty_unique_mem", ["set"]]]}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "is_complement'_bot_left", ["subgroup"]], ["add", "theorem", "is_complement'_bot_right", ["subgroup"]], ["add", "theorem", "is_complement'_bot_top", ["subgroup"]], ["add", "theorem", "is_complement'_top_bot", ["subgroup"]], ["add", "theorem", "is_complement'_top_left", ["subgroup"]], ["add", "theorem", "is_complement'_top_right", ["subgroup"]], ["add", "theorem", "is_complement_singleton_left", ["subgroup"]], ["add", "theorem", "is_complement_singleton_right", ["subgroup"]], ["mod", "theorem", "is_complement_singleton_top", ["subgroup"]], ["add", "theorem", "is_complement_top_left", ["subgroup"]], ["add", "theorem", "is_complement_top_right", ["subgroup"]], ["mod", "theorem", "is_complement_top_singleton", ["subgroup"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "coe_eq_singleton", ["subgroup"]], ["add", "theorem", "coe_eq_univ", ["subgroup"]]]}]}, {"timestamp": 1636501955, "sha": "64289fe0", "message": "chore(group_theory/order_of_element): fix weird lemma name (#10245)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "pow_eq_one_of_lt_order_of'", []], ["add", "theorem", "pow_ne_one_of_lt_order_of'", []]]}]}, {"timestamp": 1636501953, "sha": "10d3d256", "message": "chore(set_theory/cardinal): fix name & reorder universes (#10236)\n* add `cardinal.lift_injective`, `cardinal.lift_eq_zero`;\n* reorder universe arguments in `cardinal.lift_nat_cast` to match\n`cardinal.lift` and `ulift`;\n* rename `cardinal.nat_eq_lift_eq_iff` to `cardinal.nat_eq_lift_iff`;\n* add `@[simp]` to `cardinal.lift_eq_zero`,\n`cardinal.lift_eq_nat_iff`, and `cardinal.nat_eq_lift_iff`.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "lift_eq_nat_iff", ["cardinal"]], ["add", "theorem", "lift_eq_zero", ["cardinal"]], ["add", "theorem", "lift_injective", ["cardinal"]], ["mod", "theorem", "lift_nat_cast", ["cardinal"]], ["del", "theorem", "nat_eq_lift_eq_iff", ["cardinal"]], ["add", "theorem", "nat_eq_lift_iff", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}]}, {"timestamp": 1636501952, "sha": "7bdb6b39", "message": "feat(algebra/module/linear_map,linear_algebra/alternating,linear_algebra/multilinear/basic): no_zero_smul_divisors instances (#10234)\nAdd `no_zero_smul_divisors` instances for linear, multilinear and alternating maps, given such instances for the codomain of the maps.\nThis also adds some missing `coe_smul` lemmas on these types.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "no_zero_smul_divisors", ["function", "injective"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "coe_smul", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "coe_fn_smul", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "theorem", "coe_smul", ["multilinear_map"]]]}]}, {"timestamp": 1636477346, "sha": "a2810d97", "message": "feat(data/int/basic): coercion subtraction inequality (#10054)\nAdding to simp a subtraction inequality over coercion from int to nat", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "le_coe_nat_sub", ["int"]]]}]}, {"timestamp": 1636467992, "sha": "35d574e3", "message": "feat(linear_algebra/determinant): alternating maps as multiples of determinant (#10233)\nAdd the lemma that any alternating map with the same type as the\ndeterminant map with respect to a basis is a multiple of the\ndeterminant map (given by the value of the alternating map applied to\nthe basis vectors).", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "map_eq_zero_of_not_injective", ["alternating_map"]], ["add", "theorem", "ext_alternating", ["basis"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "eq_smul_basis_det", ["alternating_map"]]]}]}, {"timestamp": 1636454804, "sha": "00d9b9f5", "message": "feast(ring_theory/norm): add norm_eq_prod_embeddings (#10226)\nWe prove that the norm equals the product of the embeddings in an algebraically closed field.\nNote that we follow a slightly different path than for the trace, since transitivity of the norm is more delicate, and we avoid it.\nFrom flt-regular.", "changes": [{"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["add", "theorem", "norm_eq_norm_adjoin", ["algebra"]], ["add", "theorem", "norm_eq_prod_embeddings", ["algebra"]], ["add", "theorem", "norm_eq_prod_embeddings_gen", ["algebra"]], ["add", "theorem", "prod_embeddings_eq_finrank_pow", ["algebra"]]]}]}, {"timestamp": 1636449622, "sha": "11ced180", "message": "feat(algebra/lie/classical): Use computable matrix inverses where possible (#10218)", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": [["mod", "theorem", "PB_inv", ["lie_algebra", "orthogonal"]], ["add", "def", "invertible_Pso", ["lie_algebra", "orthogonal"]], ["del", "theorem", "is_unit_PB", ["lie_algebra", "orthogonal"]], ["del", "theorem", "is_unit_PD", ["lie_algebra", "orthogonal"]], ["del", "theorem", "is_unit_Pso", ["lie_algebra", "orthogonal"]], ["add", "def", "so_indefinite_equiv", ["lie_algebra", "orthogonal"]], ["add", "def", "type_B_equiv_so'", ["lie_algebra", "orthogonal"]], ["add", "def", "type_D_equiv_so'", ["lie_algebra", "orthogonal"]]]}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": [["add", "def", "lie_conj", ["matrix"]], ["mod", "theorem", "lie_conj_apply", ["matrix"]], ["mod", "theorem", "lie_conj_symm_apply", ["matrix"]]]}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": [["add", "def", "skew_adjoint_matrices_lie_subalgebra_equiv", []]]}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": [["add", "def", "to_linear_equiv'", ["matrix"]], ["mod", "theorem", "to_linear_equiv'_apply", ["matrix"]], ["mod", "theorem", "to_linear_equiv'_symm_apply", ["matrix"]]]}]}, {"timestamp": 1636449621, "sha": "86146152", "message": "refactor(data/nat/interval): simp for Ico_zero_eq_range (#10211)\nThis PR makes two changes: It refactors `nat.Ico_zero_eq_range` from `Ico 0 a = range a` to `Ico 0 = range`, and makes the lemma a simp lemma.\nThese changes feel good to me, but feel free to close this if this is not the direction we want to go with this lemma.", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["mod", "theorem", "range_eq_Ico", ["finset"]], ["mod", "theorem", "Ico_zero_eq_range", ["nat"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1636442989, "sha": "0b093e6a", "message": "feat(order/bounded_lattice): a couple of basic instances about with_bot still not having a top if the original preorder didn't and vice versa (#10215)\nUsed in the flt-regular project.", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1636428348, "sha": "6af6f670", "message": "chore(scripts): update nolints.txt (#10240)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1636428347, "sha": "9d49c4ad", "message": "doc(data/finset/fold): fix typo (#10239)", "changes": [{"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}]}, {"timestamp": 1636428345, "sha": "223f6590", "message": "chore(linear_algebra/basic): remove a duplicate proof, generalize map_span_le (#10219)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "map_span_le", ["submodule"]]]}]}, {"timestamp": 1636422172, "sha": "424012aa", "message": "chore(*): bump to Lean 3.35.1 (#10237)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1636409861, "sha": "440163b4", "message": "chore(topology/algebra/mul_action): define `has_continuous_vadd` using `to_additive` (#10227)\nMake additive version of the theory of `has_continuous_smul`, i.e., `has_continuous_vadd`, using `to_additive`. I've been fairly conservative in adding `to_additive` tags -- I left them off lemmas that didn't seem like they'd be relevant for typical additive actions, like those about `units` or `group_with_zero`.\nAlso make `normed_add_torsor` an instance of `has_continuous_vadd` and use this to establish some of its continuity API.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["del", "theorem", "vadd", ["continuous"]], ["del", "theorem", "vadd", ["continuous_at"]], ["del", "theorem", "continuous_vadd", []], ["del", "theorem", "vadd", ["continuous_within_at"]], ["del", "theorem", "vadd", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}]}, {"timestamp": 1636387391, "sha": "2e4813dd", "message": "feat(linear_algebra/matrix/nonsingular_inverse): add invertible_equiv_det_invertible (#10222)", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "def", "invertible_equiv_det_invertible", ["matrix"]]]}]}, {"timestamp": 1636387390, "sha": "1519cd77", "message": "chore(set_theory/cardinal): more simp, fix LHS/RHS (#10212)\nWhile `coe (fintype.card α)` is a larger expression than `#α`, it allows us to compute the cardinality of a finite type provided that we have a `simp` lemma for `fintype.card α`. It also plays well with lemmas about coercions from `nat` and `cardinal.lift`.\n* rename `cardinal.fintype_card` to `cardinal.mk_fintype`, make it a `@[simp]` lemma;\n* deduce other cases (`bool`, `Prop`, `unique`, `is_empty`) from it;\n* rename `cardinal.finset_card` to `cardinal.mk_finset`, swap LHS/RHS;\n* rename `ordinal.fintype_card` to `ordinal.type_fintype`.", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_Prop", ["fintype"]], ["add", "theorem", "induction_empty_option'", ["fintype"]]]}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": [["mod", "theorem", "dim_lt_omega", ["is_noetherian"]], ["mod", "theorem", "iff_dim_lt_omega", ["is_noetherian"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "finite_of_vector_space_index_of_dim_lt_omega", ["basis"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["del", "theorem", "finset_card", ["cardinal"]], ["del", "theorem", "fintype_card", ["cardinal"]], ["mod", "theorem", "mk_Prop", ["cardinal"]], ["mod", "theorem", "mk_bool", ["cardinal"]], ["mod", "theorem", "mk_eq_one", ["cardinal"]], ["mod", "theorem", "mk_eq_zero", ["cardinal"]], ["mod", "theorem", "mk_fin", ["cardinal"]], ["add", "theorem", "mk_finset", ["cardinal"]], ["add", "theorem", "mk_fintype", ["cardinal"]], ["mod", "theorem", "mk_to_nat_eq_card", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "fintype_card", ["ordinal"]], ["add", "theorem", "type_fintype", ["ordinal"]]]}]}, {"timestamp": 1636387389, "sha": "66dea297", "message": "feat(analysis/convex/specific_functions): Strict convexity of `exp`, `log` and `pow` (#10123)\nThis strictifies the results of convexity/concavity of `exp`/`log` and add the strict versions for `pow`, `zpow`, `rpow`.\nI'm also renaming `convex_on_pow_of_even` to `even.convex_on_pow` for dot notation.", "changes": [{"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["del", "theorem", "concave_on_log_Iio", []], ["del", "theorem", "concave_on_log_Ioi", []], ["mod", "theorem", "convex_on_exp", []], ["del", "theorem", "convex_on_pow_of_even", []], ["add", "theorem", "convex_on_pow", ["even"]], ["add", "theorem", "strict_convex_on_pow", ["even"]], ["add", "theorem", "int_prod_range_pos", []], ["add", "theorem", "strict_concave_on_log_Iio", []], ["add", "theorem", "strict_concave_on_log_Ioi", []], ["add", "theorem", "strict_convex_on_exp", []], ["add", "theorem", "strict_convex_on_pow", []], ["add", "theorem", "strict_convex_on_rpow", []], ["add", "theorem", "strict_convex_on_zpow", []]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}]}, {"timestamp": 1636387388, "sha": "ef68f556", "message": "feat(linear_algebra/multilinear/basis): multilinear maps on basis vectors (#10090)\nAdd two versions of the fact that a multilinear map on finitely many\narguments is determined by its values on basis vectors. The precise\nrequirements for each version follow from the results used in the\nproof: `basis.ext_multilinear_fin` uses the `curry` and `uncurry`\nresults to deduce it from `basis.ext` and thus works for multilinear\nmaps on a family of modules indexed by `fin n`, while\n`basis.ext_multilinear` works for an arbitrary `fintype` index type\nbut is limited to the case where the modules for all the arguments\n(and the bases used for those modules) are the same, since it's\nderived from the previous result using `dom_dom_congr` which only\nhandles the case where all the modules are the same.\nThis is in preparation for proving a corresponding result for\nalternating maps, for which the case of all argument modules the same\nsuffices.\nThere is probably room for making results more general.", "changes": [{"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "theorem", "dom_dom_congr_eq_iff", ["multilinear_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/multilinear/basis.lean", "changes": [["add", "theorem", "ext_multilinear", ["basis"]], ["add", "theorem", "ext_multilinear_fin", ["basis"]]]}]}, {"timestamp": 1636380915, "sha": "eb678347", "message": "chore(ring_theory/noetherian): golf and generalize map_fg_of_fg (#10217)", "changes": [{"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "map_fg_of_fg", ["submodule"]]]}]}, {"timestamp": 1636380914, "sha": "5ba41d8f", "message": "feat(algebra/direct_sum): specialize `submodule_is_internal.independent` to add_subgroup (#10108)\nThis adds the lemmas `disjoint.map_order_iso` and `complete_lattice.independent.map_order_iso` (and `iff` versions), and uses them to transfer some results on `submodule`s to `add_submonoid`s and `add_subgroup`s.", "changes": [{"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "theorem", "independent", ["direct_sum", "add_subgroup_is_internal"]], ["add", "theorem", "independent", ["direct_sum", "add_submonoid_is_internal"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "theorem", "dfinsupp_sum_add_hom_injective", ["complete_lattice", "independent"]], ["add", "theorem", "independent_iff_dfinsupp_sum_add_hom_injective", ["complete_lattice"]], ["add", "theorem", "independent_of_dfinsupp_sum_add_hom_injective'", ["complete_lattice"]], ["add", "theorem", "independent_of_dfinsupp_sum_add_hom_injective", ["complete_lattice"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "map_order_iso", ["complete_lattice", "independent"]], ["add", "theorem", "independent_map_order_iso_iff", ["complete_lattice"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "map_order_iso", ["disjoint"]], ["add", "theorem", "disjoint_map_order_iso_iff", []]]}]}, {"timestamp": 1636377268, "sha": "0dabcb8e", "message": "chore(ring_theory/ideal/operations): relax the base ring of algebras from comm_ring to comm_semiring (#10024)\nThis also tidies up some variables and consistently uses `B` instead of `S` for the second algebra.\nOne proof in `ring_theory/finiteness.lean` has to be redone because typeclass search times out where it previously did not.\nThankfully, the new proof is shorter anyway.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "algebra_map_quotient_injective", ["ideal"]], ["mod", "theorem", "map_smul", ["ideal", "ker_lift"]], ["mod", "def", "ker_lift_alg", ["ideal"]], ["mod", "theorem", "ker_lift_alg_injective", ["ideal"]], ["mod", "theorem", "ker_lift_alg_mk", ["ideal"]], ["mod", "theorem", "ker_lift_alg_to_ring_hom", ["ideal"]], ["mod", "theorem", "mk_algebra_map", ["ideal", "quotient"]], ["mod", "def", "mkₐ", ["ideal", "quotient"]], ["mod", "theorem", "mkₐ_ker", ["ideal", "quotient"]], ["mod", "theorem", "mkₐ_surjective", ["ideal", "quotient"]], ["mod", "def", "quotient_equiv_alg", ["ideal"]], ["mod", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse"]], ["mod", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse_symm"]], ["mod", "theorem", "quotient_map_comp_mkₐ", ["ideal"]], ["mod", "theorem", "quotient_map_mkₐ", ["ideal"]], ["mod", "def", "quotient_mapₐ", ["ideal"]]]}]}, {"timestamp": 1636371804, "sha": "b4a5b013", "message": "feat(data/finset/basic): add card_insert_eq_ite (#10209)\nAdds the lemma `card_insert_eq_ite` combining the functionality of `card_insert_of_not_mem` and `card_insert_of_mem`, analogous to how `card_erase_eq_ite`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_insert_eq_ite", ["finset"]]]}]}, {"timestamp": 1636371803, "sha": "2fd6a77c", "message": "chore(algebra/algebra/basic): add `algebra.coe_linear_map` (#10204)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_linear_map", ["algebra"]]]}]}, {"timestamp": 1636371800, "sha": "4dd7ecae", "message": "feat(analysis/{seminorm, convex/specific_functions}): A seminorm is convex (#10203)\nThis proves `seminorm.convex_on`, `convex_on_norm` (which is morally a special case of the former) and leverages it to golf `seminorm.convex_ball`.\nThis also fixes the explicitness of arguments of `convex_on.translate_left` and friends.", "changes": [{"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["mod", "theorem", "translate_left", ["concave_on"]], ["mod", "theorem", "translate_right", ["concave_on"]], ["mod", "theorem", "translate_left", ["convex_on"]], ["mod", "theorem", "translate_right", ["convex_on"]], ["mod", "theorem", "translate_left", ["strict_concave_on"]], ["mod", "theorem", "translate_right", ["strict_concave_on"]], ["mod", "theorem", "translate_left", ["strict_convex_on"]], ["mod", "theorem", "translate_right", ["strict_convex_on"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["add", "theorem", "convex_on_norm", []]]}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}]}, {"timestamp": 1636371799, "sha": "e44aa6e7", "message": "feat(linear_algebra/basic): some lemmas about span and restrict_scalars (#10167)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "span_le_restrict_scalars", ["submodule"]]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "coe_restrict_scalars", ["submodule"]], ["mod", "theorem", "restrict_scalars_mem", ["submodule"]], ["add", "theorem", "restrict_scalars_self", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_coe_eq_restrict_scalars", ["submodule"]], ["mod", "theorem", "span_eq", ["submodule"]], ["add", "theorem", "span_le_restrict_scalars", ["submodule"]], ["add", "theorem", "span_span_of_tower", ["submodule"]], ["add", "theorem", "span_subset_span", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1636371798, "sha": "fb0cfbd4", "message": "feat(measure_theory/measure/complex): define complex measures (#10166)\nComplex measures was defined to be a vector measure over ℂ without any API. This PR adds some basic definitions about complex measures and proves the complex version of the Lebesgue decomposition theorem.", "changes": [{"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["add", "theorem", "integrable_rn_deriv", ["measure_theory", "complex_measure"]], ["add", "def", "rn_deriv", ["measure_theory", "complex_measure"]], ["add", "def", "singular_part", ["measure_theory", "complex_measure"]], ["add", "theorem", "singular_part_add_with_density_rn_deriv_eq", ["measure_theory", "complex_measure"]], ["mod", "theorem", "singular_part_smul", ["measure_theory", "signed_measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/complex.lean", "changes": [["add", "theorem", "absolutely_continuous_ennreal_iff", ["measure_theory", "complex_measure"]], ["add", "def", "equiv_signed_measure", ["measure_theory", "complex_measure"]], ["add", "def", "equiv_signed_measureₗ", ["measure_theory", "complex_measure"]], ["add", "def", "im", ["measure_theory", "complex_measure"]], ["add", "def", "re", ["measure_theory", "complex_measure"]], ["add", "theorem", "to_complex_measure_to_signed_measure", ["measure_theory", "complex_measure"]], ["add", "theorem", "im_to_complex_measure", ["measure_theory", "signed_measure"]], ["add", "theorem", "re_to_complex_measure", ["measure_theory", "signed_measure"]], ["add", "def", "to_complex_measure", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_complex_measure_apply", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "def", "map_range", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_range_add", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_range_apply", ["measure_theory", "vector_measure"]], ["add", "def", "map_range_hom", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_range_id", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_range_zero", ["measure_theory", "vector_measure"]], ["add", "def", "map_rangeₗ", ["measure_theory", "vector_measure"]]]}]}, {"timestamp": 1636371797, "sha": "e4a1e80f", "message": "feat(analysis/convex/combination): Convex hull of a `set.prod` and `set.pi` (#10125)\nThis proves\n* `(∀ i, convex 𝕜 (t i)) → convex 𝕜 (s.pi t)`\n* `convex_hull 𝕜 (s.prod t) = (convex_hull 𝕜 s).prod (convex_hull 𝕜 t)`\n* `convex_hull 𝕜 (s.pi t) = s.pi (convex_hull 𝕜 ∘ t)`", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_pi", []]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["add", "theorem", "convex_hull_prod", []]]}]}, {"timestamp": 1636371796, "sha": "1fac00e8", "message": "feat(analysis): lemmas about `arg` and `exp_map_circle` (#10066)", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["add", "theorem", "exp_map_circle_sub", []]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/complex/circle.lean", "changes": [["add", "theorem", "arg_exp_map_circle", []], ["add", "theorem", "arg_eq_arg", ["circle"]], ["add", "theorem", "injective_arg", ["circle"]], ["add", "theorem", "exp_map_circle_add_two_pi", []], ["add", "theorem", "exp_map_circle_arg", []], ["add", "theorem", "exp_map_circle_eq_exp_map_circle", []], ["add", "theorem", "exp_map_circle_sub_two_pi", []], ["add", "theorem", "exp_map_circle_two_pi", []], ["add", "theorem", "inv_on_arg_exp_map_circle", []], ["add", "theorem", "left_inverse_exp_map_circle_arg", []], ["add", "theorem", "periodic_exp_map_circle", []], ["add", "theorem", "surj_on_exp_map_circle_neg_pi_pi", []]]}]}, {"timestamp": 1636371795, "sha": "48abaedc", "message": "feat(analysis/special_functions/complex/arg): continuity of arg outside of the negative real half-line (#9500)", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_eq_nhds_of_re_neg_of_im_neg", ["complex"]], ["add", "theorem", "arg_eq_nhds_of_re_neg_of_im_pos", ["complex"]], ["add", "theorem", "arg_eq_nhds_of_re_pos", ["complex"]], ["add", "theorem", "arg_of_re_neg_of_im_neg", ["complex"]], ["add", "theorem", "arg_of_re_neg_of_im_nonneg", ["complex"]], ["add", "theorem", "arg_of_re_nonneg", ["complex"]], ["add", "theorem", "arg_of_re_zero_of_im_neg", ["complex"]], ["add", "theorem", "arg_of_re_zero_of_im_pos", ["complex"]], ["add", "theorem", "continuous_at_arg", ["complex"]], ["add", "theorem", "continuous_at_arg_of_re_neg_of_im_neg", ["complex"]], ["add", "theorem", "continuous_at_arg_of_re_neg_of_im_pos", ["complex"]], ["add", "theorem", "continuous_at_arg_of_re_pos", ["complex"]], ["add", "theorem", "continuous_at_arg_of_re_zero", ["complex"]]]}]}, {"timestamp": 1636366002, "sha": "32c8445a", "message": "split(data/list/*): split off `data.list.basic` (#10164)\nKilling the giants. This moves 700 lines off `data.list.basic` that were about\n* `list.sum` and `list.product` into `data.list.big_operators`\n* `list.countp` and `list.count` into `data.list.count`\n* `list.sigma` and `list.prod` into `data.list.sigma_prod`", "changes": [{"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "all_one_of_le_one_le_of_prod_eq_one", ["list"]], ["del", "theorem", "alternating_prod_cons_cons", ["list"]], ["del", "theorem", "alternating_prod_nil", ["list"]], ["del", "theorem", "alternating_prod_singleton", ["list"]], ["del", "theorem", "alternating_sum_cons_cons", ["list"]], ["del", "theorem", "count_append", ["list"]], ["del", "theorem", "count_bind", ["list"]], ["del", "theorem", "count_concat", ["list"]], ["del", "theorem", "count_cons'", ["list"]], ["del", "theorem", "count_cons", ["list"]], ["del", "theorem", "count_cons_of_ne", ["list"]], ["del", "theorem", "count_cons_self", ["list"]], ["del", "theorem", "count_eq_zero_of_not_mem", ["list"]], ["del", "theorem", "count_erase_of_ne", ["list"]], ["del", "theorem", "count_erase_self", ["list"]], ["del", "theorem", "count_filter", ["list"]], ["del", "theorem", "count_le_count_cons", ["list"]], ["del", "theorem", "count_le_of_sublist", ["list"]], ["del", "theorem", "count_map_map", ["list"]], ["del", "theorem", "count_nil", ["list"]], ["del", "theorem", "count_pos", ["list"]], ["del", "theorem", "count_repeat", ["list"]], ["del", "theorem", "count_singleton", ["list"]], ["del", "theorem", "count_tail", ["list"]], ["del", "theorem", "countp_append", ["list"]], ["del", "theorem", "countp_cons_of_neg", ["list"]], ["del", "theorem", "countp_cons_of_pos", ["list"]], ["del", "theorem", "countp_eq_length_filter", ["list"]], ["del", "theorem", "countp_filter", ["list"]], ["del", "theorem", "countp_le_of_sublist", ["list"]], ["del", "theorem", "countp_nil", ["list"]], ["del", "theorem", "countp_pos", ["list"]], ["del", "theorem", "drop_sum_join", ["list"]], ["del", "theorem", "drop_take_succ_eq_cons_nth_le", ["list"]], ["del", "theorem", "drop_take_succ_join_eq_nth_le", ["list"]], ["del", "theorem", "dvd_prod", ["list"]], ["del", "theorem", "dvd_sum", ["list"]], ["del", "theorem", "eq_iff_join_eq", ["list"]], ["del", "theorem", "eq_of_sum_take_eq", ["list"]], ["del", "theorem", "exists_le_of_sum_le", ["list"]], ["del", "theorem", "exists_lt_of_sum_lt", ["list"]], ["del", "theorem", "head_add_tail_sum", ["list"]], ["del", "theorem", "head_le_sum", ["list"]], ["del", "theorem", "head_mul_tail_prod_of_ne_nil", ["list"]], ["del", "theorem", "join_append", ["list"]], ["del", "theorem", "join_eq_nil", ["list"]], ["del", "theorem", "join_filter_empty_eq_ff", ["list"]], ["del", "theorem", "join_filter_ne_nil", ["list"]], ["del", "theorem", "join_join", ["list"]], ["del", "theorem", "join_nil", ["list"]], ["del", "theorem", "le_count_iff_repeat_sublist", ["list"]], ["del", "theorem", "length_bind", ["list"]], ["del", "theorem", "length_eq_countp_add_countp", ["list"]], ["del", "theorem", "length_filter_lt_length_iff_exists", ["list"]], ["del", "theorem", "length_join", ["list"]], ["del", "theorem", "length_le_sum_of_one_le", ["list"]], ["del", "theorem", "length_pos_of_prod_ne_one", ["list"]], ["del", "theorem", "length_pos_of_sum_pos", ["list"]], ["del", "theorem", "length_product", ["list"]], ["del", "theorem", "length_sigma", ["list"]], ["mod", "theorem", "mem_map_swap", ["list"]], ["del", "theorem", "mem_product", ["list"]], ["del", "theorem", "mem_sigma", ["list"]], ["del", "theorem", "monotone_sum_take", ["list"]], ["del", "theorem", "nil_product", ["list"]], ["del", "theorem", "nil_sigma", ["list"]], ["del", "theorem", "not_mem_of_count_eq_zero", ["list"]], ["del", "theorem", "nth_le_join", ["list"]], ["del", "theorem", "nth_zero_mul_tail_prod", ["list"]], ["del", "theorem", "one_le_prod_of_one_le", ["list"]], ["del", "theorem", "prod_append", ["list"]], ["del", "theorem", "prod_concat", ["list"]], ["del", "theorem", "prod_cons", ["list"]], ["del", "theorem", "prod_drop_succ", ["list"]], ["del", "theorem", "prod_eq_foldr", ["list"]], ["del", "theorem", "prod_eq_zero", ["list"]], ["del", "theorem", "prod_eq_zero_iff", ["list"]], ["del", "theorem", "prod_erase", ["list"]], ["del", "theorem", "prod_hom", ["list"]], ["del", "theorem", "prod_hom_rel", ["list"]], ["del", "theorem", "prod_inv", ["list"]], ["del", "theorem", "prod_inv_reverse", ["list"]], ["del", "theorem", "prod_is_unit", ["list"]], ["del", "theorem", "prod_join", ["list"]], ["del", "theorem", "prod_map_hom", ["list"]], ["del", "theorem", "prod_ne_zero", ["list"]], ["del", "theorem", "prod_nil", ["list"]], ["del", "theorem", "prod_pos", ["list"]], ["del", "theorem", "prod_reverse_noncomm", ["list"]], ["del", "theorem", "prod_singleton", ["list"]], ["del", "theorem", "prod_take_mul_prod_drop", ["list"]], ["del", "theorem", "prod_take_succ", ["list"]], ["del", "theorem", "prod_update_nth'", ["list"]], ["del", "theorem", "prod_update_nth", ["list"]], ["del", "theorem", "product_cons", ["list"]], ["del", "theorem", "product_nil", ["list"]], ["del", "theorem", "repeat_count_eq_of_count_eq_length", ["list"]], ["del", "theorem", "sigma_cons", ["list"]], ["del", "theorem", "sigma_nil", ["list"]], ["del", "theorem", "single_le_prod", ["list"]], ["mod", "theorem", "sizeof_slice_lt", ["list"]], ["mod", "theorem", "slice_eq", ["list"]], ["del", "theorem", "sum_const_nat", ["list"]], ["del", "theorem", "sum_eq_zero_iff", ["list"]], ["del", "theorem", "sum_le_foldr_max", ["list"]], ["del", "theorem", "sum_map_mul_left", ["list"]], ["del", "theorem", "sum_map_mul_right", ["list"]], ["del", "theorem", "sum_take_map_length_lt1", ["list"]], ["del", "theorem", "sum_take_map_length_lt2", ["list"]], ["del", "theorem", "tail_sum", ["list"]], ["del", "theorem", "take_sum_join", ["list"]], ["del", "theorem", "map_list_prod", ["monoid_hom"]], ["del", "theorem", "unop_map_list_prod", ["monoid_hom"]], ["del", "theorem", "op_list_prod", ["opposite"]], ["del", "theorem", "unop_list_prod", ["opposite"]]]}, {"oldPath": null, "newPath": "src/data/list/big_operators.lean", "changes": [["add", "theorem", "all_one_of_le_one_le_of_prod_eq_one", ["list"]], ["add", "theorem", "alternating_prod_cons_cons", ["list"]], ["add", "theorem", "alternating_prod_nil", ["list"]], ["add", "theorem", "alternating_prod_singleton", ["list"]], ["add", "theorem", "alternating_sum_cons_cons", ["list"]], ["add", "theorem", "dvd_prod", ["list"]], ["add", "theorem", "dvd_sum", ["list"]], ["add", "theorem", "eq_of_sum_take_eq", ["list"]], ["add", "theorem", "exists_le_of_sum_le", ["list"]], ["add", "theorem", "exists_lt_of_sum_lt", ["list"]], ["add", "theorem", "head_add_tail_sum", ["list"]], ["add", "theorem", "head_le_sum", ["list"]], ["add", "theorem", "head_mul_tail_prod_of_ne_nil", ["list"]], ["add", "theorem", "length_le_sum_of_one_le", ["list"]], ["add", "theorem", "length_pos_of_prod_ne_one", ["list"]], ["add", "theorem", "length_pos_of_sum_pos", ["list"]], ["add", "theorem", "monotone_sum_take", ["list"]], ["add", "theorem", "nth_zero_mul_tail_prod", ["list"]], ["add", "theorem", "one_le_prod_of_one_le", ["list"]], ["add", "theorem", "prod_append", ["list"]], ["add", "theorem", "prod_concat", ["list"]], ["add", "theorem", "prod_cons", ["list"]], ["add", "theorem", "prod_drop_succ", ["list"]], ["add", "theorem", "prod_eq_foldr", ["list"]], ["add", "theorem", "prod_eq_zero", ["list"]], ["add", "theorem", "prod_eq_zero_iff", ["list"]], ["add", "theorem", "prod_erase", ["list"]], ["add", "theorem", "prod_hom", ["list"]], ["add", "theorem", "prod_hom_rel", ["list"]], ["add", "theorem", "prod_inv", ["list"]], ["add", "theorem", "prod_inv_reverse", ["list"]], ["add", "theorem", "prod_is_unit", ["list"]], ["add", "theorem", "prod_join", ["list"]], ["add", "theorem", "prod_map_hom", ["list"]], ["add", "theorem", "prod_ne_zero", ["list"]], ["add", "theorem", "prod_nil", ["list"]], ["add", "theorem", "prod_pos", ["list"]], ["add", "theorem", "prod_reverse_noncomm", ["list"]], ["add", "theorem", "prod_singleton", ["list"]], ["add", "theorem", "prod_take_mul_prod_drop", ["list"]], ["add", "theorem", "prod_take_succ", ["list"]], ["add", "theorem", "prod_update_nth'", ["list"]], ["add", "theorem", "prod_update_nth", ["list"]], ["add", "theorem", "single_le_prod", ["list"]], ["add", "theorem", "sum_const_nat", ["list"]], ["add", "theorem", "sum_eq_zero_iff", ["list"]], ["add", "theorem", "sum_le_foldr_max", ["list"]], ["add", "theorem", "sum_map_mul_left", ["list"]], ["add", "theorem", "sum_map_mul_right", ["list"]], ["add", "theorem", "tail_sum", ["list"]], ["add", "theorem", "map_list_prod", ["monoid_hom"]], ["add", "theorem", "unop_map_list_prod", ["monoid_hom"]], ["add", "theorem", "op_list_prod", ["opposite"]], ["add", "theorem", "unop_list_prod", ["opposite"]]]}, {"oldPath": null, "newPath": "src/data/list/count.lean", "changes": [["add", "theorem", "count_append", ["list"]], ["add", "theorem", "count_bind", ["list"]], ["add", "theorem", "count_concat", ["list"]], ["add", "theorem", "count_cons'", ["list"]], ["add", "theorem", "count_cons", ["list"]], ["add", "theorem", "count_cons_of_ne", ["list"]], ["add", "theorem", "count_cons_self", ["list"]], ["add", "theorem", "count_eq_zero_of_not_mem", ["list"]], ["add", "theorem", "count_erase_of_ne", ["list"]], ["add", "theorem", "count_erase_self", ["list"]], ["add", "theorem", "count_filter", ["list"]], ["add", "theorem", "count_le_count_cons", ["list"]], ["add", "theorem", "count_map_map", ["list"]], ["add", "theorem", "count_nil", ["list"]], ["add", "theorem", "count_pos", ["list"]], ["add", "theorem", "count_repeat", ["list"]], ["add", "theorem", "count_singleton", ["list"]], ["add", "theorem", "count_tail", ["list"]], ["add", "theorem", "countp_append", ["list"]], ["add", "theorem", "countp_cons_of_neg", ["list"]], ["add", "theorem", "countp_cons_of_pos", ["list"]], ["add", "theorem", "countp_eq_length_filter", ["list"]], ["add", "theorem", "countp_filter", ["list"]], ["add", "theorem", "countp_nil", ["list"]], ["add", "theorem", "countp_pos", ["list"]], ["add", "theorem", "le_count_iff_repeat_sublist", ["list"]], ["add", "theorem", "length_eq_countp_add_countp", ["list"]], ["add", "theorem", "length_filter_lt_length_iff_exists", ["list"]], ["add", "theorem", "not_mem_of_count_eq_zero", ["list"]], ["add", "theorem", "repeat_count_eq_of_count_eq_length", ["list"]], ["add", "theorem", "count_le", ["list", "sublist"]], ["add", "theorem", "countp_le", ["list", "sublist"]]]}, {"oldPath": null, "newPath": "src/data/list/join.lean", "changes": [["add", "theorem", "drop_sum_join", ["list"]], ["add", "theorem", "drop_take_succ_eq_cons_nth_le", ["list"]], ["add", "theorem", "drop_take_succ_join_eq_nth_le", ["list"]], ["add", "theorem", "eq_iff_join_eq", ["list"]], ["add", "theorem", "join_append", ["list"]], ["add", "theorem", "join_eq_nil", ["list"]], ["add", "theorem", "join_filter_empty_eq_ff", ["list"]], ["add", "theorem", "join_filter_ne_nil", ["list"]], ["add", "theorem", "join_join", ["list"]], ["add", "theorem", "join_nil", ["list"]], ["add", "theorem", "length_bind", ["list"]], ["add", "theorem", "length_join", ["list"]], ["add", "theorem", "nth_le_join", ["list"]], ["add", "theorem", "sum_take_map_length_lt1", ["list"]], ["add", "theorem", "sum_take_map_length_lt2", ["list"]], ["add", "theorem", "take_sum_join", ["list"]]]}, {"oldPath": "src/data/list/lattice.lean", "newPath": "src/data/list/lattice.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/permutation.lean", "newPath": "src/data/list/permutation.lean", "changes": []}, {"oldPath": "src/data/list/prod_monoid.lean", "newPath": "src/data/list/prod_monoid.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/prod_sigma.lean", "changes": [["add", "theorem", "length_product", ["list"]], ["add", "theorem", "length_sigma", ["list"]], ["add", "theorem", "mem_product", ["list"]], ["add", "theorem", "mem_sigma", ["list"]], ["add", "theorem", "nil_product", ["list"]], ["add", "theorem", "nil_sigma", ["list"]], ["add", "theorem", "product_cons", ["list"]], ["add", "theorem", "product_nil", ["list"]], ["add", "theorem", "sigma_cons", ["list"]], ["add", "theorem", "sigma_nil", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}]}, {"timestamp": 1636360047, "sha": "380d6cae", "message": "chore(algebra/direct_sum/module): extract out common `variables` (#10207)\nSlight reorganization to extract out repeatedly-used variable declarations, and update module docstring. No changes to the content.", "changes": [{"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["mod", "def", "submodule_coe", ["direct_sum"]], ["mod", "theorem", "submodule_coe_of", ["direct_sum"]], ["mod", "theorem", "independent", ["direct_sum", "submodule_is_internal"]], ["mod", "theorem", "supr_eq_top", ["direct_sum", "submodule_is_internal"]], ["mod", "theorem", "to_add_subgroup", ["direct_sum", "submodule_is_internal"]], ["mod", "theorem", "to_add_submonoid", ["direct_sum", "submodule_is_internal"]], ["mod", "def", "submodule_is_internal", ["direct_sum"]], ["mod", "theorem", "submodule_is_internal_iff_independent_and_supr_eq_top", ["direct_sum"]], ["mod", "theorem", "submodule_is_internal_of_independent_of_supr_eq_top", ["direct_sum"]]]}]}, {"timestamp": 1636360045, "sha": "bf242b78", "message": "feat(algebra/order/with_zero): add le lemmas (#10183)", "changes": [{"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["add", "theorem", "div_le_div_right₀", []], ["add", "theorem", "div_le_iff₀", []], ["add", "theorem", "le_div_iff₀", []], ["add", "theorem", "le_mul_inv_iff₀", []], ["add", "theorem", "mul_inv_le_iff₀", []], ["add", "theorem", "mul_le_mul_right₀", []]]}]}, {"timestamp": 1636360043, "sha": "e0aa9f07", "message": "refactor(linear_algebra/matrix/nonsingular_inverse): clean up (#10175)\nThis file is a mess, and switches back and forth between three different inverses, proving the same things over and over again.\nThis pulls all the `invertible` versions of these statements to the top, and uses them here and there to golf proofs.\nThe lemmas `nonsing_inv_left_right` and `nonsing_inv_right_left` are merged into a single lemma `mul_eq_one_comm`.\nThe lemma `inv_eq_nonsing_inv_of_invertible` has been renamed to `inv_of_eq_nonsing_inv`\nThis also adds two new lemmas `inv_of_eq` and `det_inv_of`, both of which have trivial proofs.", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "inverse_invertible", ["ring"]]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "det_inv_of", ["matrix"]], ["del", "theorem", "inv_eq_nonsing_inv_of_invertible", ["matrix"]], ["add", "theorem", "inv_of_eq", ["matrix"]], ["add", "theorem", "inv_of_eq_nonsing_inv", ["matrix"]], ["mod", "def", "invertible_of_left_inverse", ["matrix"]], ["mod", "def", "invertible_of_right_inverse", ["matrix"]], ["mod", "theorem", "left_inv_eq_left_inv", ["matrix"]], ["add", "theorem", "mul_eq_one_comm", ["matrix"]], ["del", "theorem", "nonsing_inv_left_right", ["matrix"]], ["del", "theorem", "nonsing_inv_right_left", ["matrix"]], ["mod", "theorem", "right_inv_eq_left_inv", ["matrix"]], ["mod", "theorem", "right_inv_eq_right_inv", ["matrix"]]]}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": []}]}, {"timestamp": 1636360041, "sha": "bc55cd78", "message": "feat(archive/imo) : Add solution to IMO 1994 Q1 (#10171)\nIMO 1994 Q1", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1994_q1.lean", "changes": [["add", "theorem", "imo1994_q1", []], ["add", "theorem", "tedious", []]]}]}, {"timestamp": 1636360040, "sha": "62f94ad6", "message": "feat(measure_theory/measurable_space): define `measurable_embedding` (#10023)\nThis way we can generalize our theorems about `measurable_equiv` and `closed_embedding`s.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "range_extend", ["set"]], ["add", "theorem", "range_extend_subset", ["set"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "ae_measurable_comp_iff_of_closed_embedding", []], ["del", "theorem", "ae_measurable_comp_right_iff_of_closed_embedding", []], ["del", "theorem", "measurable_inv_fun", ["closed_embedding"]], ["del", "theorem", "measurable_comp_iff_of_closed_embedding", []]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "integrable_map_iff", ["measurable_embedding"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_map", ["closed_embedding"]], ["add", "theorem", "integral_map", ["measurable_embedding"]], ["del", "theorem", "integral_map_of_closed_embedding", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_map_iff", ["measurable_embedding"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_map", ["measurable_embedding"]], ["add", "def", "extend", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_comp_eq'", ["measure_theory", "simple_func"]], ["add", "theorem", "extend_comp_eq", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_map'", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_map", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_map_equiv", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "set_integral_map", ["closed_embedding"]], ["add", "theorem", "set_integral_map", ["measurable_embedding"]], ["del", "theorem", "set_integral_map_of_closed_embedding", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "dite", ["measurable"]], ["add", "theorem", "comp", ["measurable_embedding"]], ["add", "theorem", "exists_measurable_extend", ["measurable_embedding"]], ["add", "theorem", "id", ["measurable_embedding"]], ["add", "theorem", "measurable_comp_iff", ["measurable_embedding"]], ["add", "theorem", "measurable_extend", ["measurable_embedding"]], ["add", "theorem", "measurable_range_splitting", ["measurable_embedding"]], ["add", "theorem", "measurable_set_image", ["measurable_embedding"]], ["add", "theorem", "measurable_set_preimage", ["measurable_embedding"]], ["add", "theorem", "measurable_set_range", ["measurable_embedding"]], ["add", "theorem", "of_measurable_inverse", ["measurable_embedding"]], ["add", "theorem", "of_measurable_inverse_on_range", ["measurable_embedding"]], ["add", "theorem", "subtype_coe", ["measurable_embedding"]], ["add", "structure", "measurable_embedding", []], ["add", "theorem", "image_eq_preimage", ["measurable_equiv"]], ["add", "theorem", "measurable_set_image", ["measurable_equiv"]], ["add", "theorem", "measurable_set_preimage", ["measurable_equiv"]], ["add", "theorem", "symm_preimage_preimage", ["measurable_equiv"]], ["add", "theorem", "measurable_of_restrict_of_restrict_compl", []], ["add", "theorem", "exists_measurable_proj", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "subtype_mk", ["ae_measurable"]], ["add", "theorem", "ae_measurable_restrict_iff_comap_subtype", []], ["add", "theorem", "ae_restrict_iff_subtype", []], ["add", "theorem", "comap_subtype_coe_apply", []], ["add", "theorem", "map_comap_subtype_coe", []], ["add", "theorem", "ae_map_iff", ["measurable_embedding"]], ["add", "theorem", "ae_measurable_comp_iff", ["measurable_embedding"]], ["add", "theorem", "ae_measurable_map_iff", ["measurable_embedding"]], ["add", "theorem", "comap_apply", ["measurable_embedding"]], ["add", "theorem", "map_apply", ["measurable_embedding"]], ["add", "theorem", "map_comap", ["measurable_embedding"]], ["add", "theorem", "restrict_map", ["measurable_embedding"]], ["add", "theorem", "map_coe_volume", ["measurable_set"]], ["del", "theorem", "map_comap_subtype_coe", ["measure_theory", "measure"]], ["add", "theorem", "volume_image_subtype_coe", []], ["add", "theorem", "volume_set_coe_def", []]]}]}, {"timestamp": 1636354700, "sha": "c50c2c32", "message": "docs(algebra/big_operators): correct documentation for prod (#10206)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}]}, {"timestamp": 1636279956, "sha": "ae98aad6", "message": "chore(measure_theory/measure): review API of `mutually_singular` (#10186)", "changes": [{"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["del", "def", "singular_part(s", ["measure_theory", "signed_measure"]], ["add", "def", "singular_part", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "add", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "add_iff", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "add_left", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "add_left_iff", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "add_right", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "add_right_iff", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "comm", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "mk", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "mono", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "mono_ac", ["measure_theory", "measure", "mutually_singular"]], ["del", "theorem", "of_absolutely_continuous", ["measure_theory", "measure", "mutually_singular"]], ["mod", "theorem", "smul", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "smul_nnreal", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "sum_left", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "sum_right", ["measure_theory", "measure", "mutually_singular"]], ["mod", "theorem", "symm", ["measure_theory", "measure", "mutually_singular"]], ["mod", "theorem", "zero_left", ["measure_theory", "measure", "mutually_singular"]], ["mod", "theorem", "zero_right", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "sum_of_empty", ["measure_theory", "measure"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1636277689, "sha": "7a8a9146", "message": "refactor(measure_theory/function/l1_space): remove hypothesis (#10185)\n* from `tendsto_lintegral_norm_of_dominated_convergence`\n* Missed this in #10181\n* Add comment about the ability to weaker `bound_integrable`.", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}]}, {"timestamp": 1636262224, "sha": "7d240ce1", "message": "chore(data/matrix/notation): split into 2 files (#10199)\nI want to use `![a, b]` notation in some files that don't need to import `data.matrix.basic`.", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/fin/vec_notation.lean", "changes": [["add", "theorem", "add_cons", ["matrix"]], ["add", "theorem", "cons_add", ["matrix"]], ["add", "theorem", "cons_append", ["matrix"]], ["add", "theorem", "cons_eq_zero_iff", ["matrix"]], ["add", "theorem", "cons_fin_one", ["matrix"]], ["add", "theorem", "cons_head_tail", ["matrix"]], ["add", "theorem", "cons_nonzero_iff", ["matrix"]], ["add", "theorem", "cons_sub", ["matrix"]], ["add", "theorem", "cons_val_fin_one", ["matrix"]], ["add", "theorem", "cons_val_one", ["matrix"]], ["add", "theorem", "cons_val_succ'", ["matrix"]], ["add", "theorem", "cons_val_succ", ["matrix"]], ["add", "theorem", "cons_val_zero'", ["matrix"]], ["add", "theorem", "cons_val_zero", ["matrix"]], ["add", "theorem", "cons_vec_alt0", ["matrix"]], ["add", "theorem", "cons_vec_alt1", ["matrix"]], ["add", "theorem", "cons_vec_bit0_eq_alt0", ["matrix"]], ["add", "theorem", "cons_vec_bit1_eq_alt1", ["matrix"]], ["add", "theorem", "cons_zero_zero", ["matrix"]], ["add", "theorem", "empty_add_empty", ["matrix"]], ["add", "theorem", "empty_append", ["matrix"]], ["add", "theorem", "empty_eq", ["matrix"]], ["add", "theorem", "empty_sub_empty", ["matrix"]], ["add", "theorem", "empty_val'", ["matrix"]], ["add", "theorem", "empty_vec_alt0", ["matrix"]], ["add", "theorem", "empty_vec_alt1", ["matrix"]], ["add", "theorem", "head_add", ["matrix"]], ["add", "theorem", "head_cons", ["matrix"]], ["add", "theorem", "head_fin_const", ["matrix"]], ["add", "theorem", "head_neg", ["matrix"]], ["add", "theorem", "head_sub", ["matrix"]], ["add", "theorem", "head_zero", ["matrix"]], ["add", "theorem", "neg_cons", ["matrix"]], ["add", "theorem", "neg_empty", ["matrix"]], ["add", "theorem", "range_cons", ["matrix"]], ["add", "theorem", "range_empty", ["matrix"]], ["add", "theorem", "smul_cons", ["matrix"]], ["add", "theorem", "smul_empty", ["matrix"]], ["add", "theorem", "sub_cons", ["matrix"]], ["add", "theorem", "tail_add", ["matrix"]], ["add", "theorem", "tail_cons", ["matrix"]], ["add", "theorem", "tail_neg", ["matrix"]], ["add", "theorem", "tail_sub", ["matrix"]], ["add", "theorem", "tail_zero", ["matrix"]], ["add", "def", "vec_alt0", ["matrix"]], ["add", "theorem", "vec_alt0_append", ["matrix"]], ["add", "def", "vec_alt1", ["matrix"]], ["add", "theorem", "vec_alt1_append", ["matrix"]], ["add", "def", "vec_cons", ["matrix"]], ["add", "theorem", "vec_cons_const", ["matrix"]], ["add", "def", "vec_empty", ["matrix"]], ["add", "def", "vec_head", ["matrix"]], ["add", "theorem", "vec_head_vec_alt0", ["matrix"]], ["add", "theorem", "vec_head_vec_alt1", ["matrix"]], ["add", "theorem", "vec_single_eq_const", ["matrix"]], ["add", "def", "vec_tail", ["matrix"]], ["add", "theorem", "zero_empty", ["matrix"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["del", "theorem", "add_cons", ["matrix"]], ["del", "theorem", "cons_add", ["matrix"]], ["del", "theorem", "cons_append", ["matrix"]], ["del", "theorem", "cons_eq_zero_iff", ["matrix"]], ["del", "theorem", "cons_fin_one", ["matrix"]], ["del", "theorem", "cons_head_tail", ["matrix"]], ["del", "theorem", "cons_nonzero_iff", ["matrix"]], ["del", "theorem", "cons_sub", ["matrix"]], ["del", "theorem", "cons_val_fin_one", ["matrix"]], ["del", "theorem", "cons_val_one", ["matrix"]], ["del", "theorem", "cons_val_succ'", ["matrix"]], ["del", "theorem", "cons_val_succ", ["matrix"]], ["del", "theorem", "cons_val_zero'", ["matrix"]], ["del", "theorem", "cons_val_zero", ["matrix"]], ["del", "theorem", "cons_vec_alt0", ["matrix"]], ["del", "theorem", "cons_vec_alt1", ["matrix"]], ["del", "theorem", "cons_vec_bit0_eq_alt0", ["matrix"]], ["del", "theorem", "cons_vec_bit1_eq_alt1", ["matrix"]], ["del", "theorem", "cons_zero_zero", ["matrix"]], ["del", "theorem", "empty_add_empty", ["matrix"]], ["del", "theorem", "empty_append", ["matrix"]], ["del", "theorem", "empty_eq", ["matrix"]], ["del", "theorem", "empty_sub_empty", ["matrix"]], ["del", "theorem", "empty_val'", ["matrix"]], ["del", "theorem", "empty_vec_alt0", ["matrix"]], ["del", "theorem", "empty_vec_alt1", ["matrix"]], ["del", "theorem", "head_add", ["matrix"]], ["del", "theorem", "head_cons", ["matrix"]], ["del", "theorem", "head_fin_const", ["matrix"]], ["del", "theorem", "head_neg", ["matrix"]], ["del", "theorem", "head_sub", ["matrix"]], ["del", "theorem", "head_zero", ["matrix"]], ["del", "theorem", "neg_cons", ["matrix"]], ["del", "theorem", "neg_empty", ["matrix"]], ["del", "theorem", "range_cons", ["matrix"]], ["del", "theorem", "range_empty", ["matrix"]], ["del", "theorem", "smul_cons", ["matrix"]], ["del", "theorem", "smul_empty", ["matrix"]], ["del", "theorem", "sub_cons", ["matrix"]], ["del", "theorem", "tail_add", ["matrix"]], ["del", "theorem", "tail_cons", ["matrix"]], ["del", "theorem", "tail_neg", ["matrix"]], ["del", "theorem", "tail_sub", ["matrix"]], ["del", "theorem", "tail_zero", ["matrix"]], ["del", "def", "vec_alt0", ["matrix"]], ["del", "theorem", "vec_alt0_append", ["matrix"]], ["del", "def", "vec_alt1", ["matrix"]], ["del", "theorem", "vec_alt1_append", ["matrix"]], ["del", "def", "vec_cons", ["matrix"]], ["del", "theorem", "vec_cons_const", ["matrix"]], ["del", "def", "vec_empty", ["matrix"]], ["del", "def", "vec_head", ["matrix"]], ["del", "theorem", "vec_head_vec_alt0", ["matrix"]], ["del", "theorem", "vec_head_vec_alt1", ["matrix"]], ["del", "theorem", "vec_single_eq_const", ["matrix"]], ["del", "def", "vec_tail", ["matrix"]], ["del", "theorem", "zero_empty", ["matrix"]]]}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1636237348, "sha": "daac8545", "message": "feat(analysis/special_functions/log): Relating `log`-inequalities and `exp`-inequalities (#10191)\nThis proves `log x ≤ y ↔ x ≤ exp y` and `x ≤ log y ↔ exp x ≤ y`.", "changes": [{"oldPath": "src/analysis/special_functions/log.lean", "newPath": "src/analysis/special_functions/log.lean", "changes": [["add", "theorem", "le_log_iff_exp_le", ["real"]], ["add", "theorem", "log_le_iff_le_exp", ["real"]], ["add", "theorem", "log_lt_iff_lt_exp", ["real"]], ["add", "theorem", "lt_log_iff_exp_lt", ["real"]]]}]}, {"timestamp": 1636230464, "sha": "169bb29d", "message": "feat(algebra/group/with_one): cleanup algebraic instances (#10194)\nThis:\n* adds a `has_neg (with_zero α)` instance which sends `0` to `0` and otherwise uses the underlying negation (and the same for `has_inv (with_one α)`).\n* replaces the `has_div (with_zero α)`, `has_pow (with_zero α) ℕ`, and `has_pow (with_zero α) ℤ` instances in order to produce better definitional properties than the previous default ones.", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "theorem", "coe_inv", ["with_one"]], ["add", "theorem", "coe_div", ["with_zero"]], ["add", "theorem", "coe_pow", ["with_zero"]], ["add", "theorem", "coe_zpow", ["with_zero"]], ["del", "theorem", "div_coe", ["with_zero"]]]}]}, {"timestamp": 1636230463, "sha": "56a9228f", "message": "feat(analysis/normed_space/continuous_affine_map): define bundled continuous affine maps (#10161)\nI want to use the result the evaluation map `Hom(E, F) × E → F` is smooth in a category with continuous affine maps as morphisms. It is convenient to have a bundled type for this, despite the necessary boilerplate (proposed here).\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/continuous_affine_map.lean", "changes": [["add", "theorem", "coe_cont_linear_eq_linear", ["continuous_affine_map"]], ["add", "theorem", "coe_linear_eq_coe_cont_linear", ["continuous_affine_map"]], ["add", "theorem", "coe_mk_const_linear_eq_linear", ["continuous_affine_map"]], ["add", "theorem", "const_cont_linear", ["continuous_affine_map"]], ["add", "def", "cont_linear", ["continuous_affine_map"]], ["add", "theorem", "cont_linear_eq_zero_iff_exists_const", ["continuous_affine_map"]], ["add", "theorem", "cont_linear_map_vsub", ["continuous_affine_map"]], ["add", "theorem", "map_vadd", ["continuous_affine_map"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "linear_eq_zero_iff_exists_const", ["affine_map"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/continuous_affine_map.lean", "changes": [["add", "theorem", "coe_affine_map_mk", ["continuous_affine_map"]], ["add", "theorem", "coe_comp", ["continuous_affine_map"]], ["add", "theorem", "coe_const", ["continuous_affine_map"]], ["add", "theorem", "coe_continuous_map_mk", ["continuous_affine_map"]], ["add", "theorem", "coe_injective", ["continuous_affine_map"]], ["add", "theorem", "coe_mk", ["continuous_affine_map"]], ["add", "theorem", "coe_to_affine_map", ["continuous_affine_map"]], ["add", "theorem", "coe_to_continuous_map", ["continuous_affine_map"]], ["add", "def", "comp", ["continuous_affine_map"]], ["add", "theorem", "comp_apply", ["continuous_affine_map"]], ["add", "theorem", "congr_fun", ["continuous_affine_map"]], ["add", "def", "const", ["continuous_affine_map"]], ["add", "theorem", "ext", ["continuous_affine_map"]], ["add", "theorem", "ext_iff", ["continuous_affine_map"]], ["add", "theorem", "mk_coe", ["continuous_affine_map"]], ["add", "theorem", "to_affine_map_eq_coe", ["continuous_affine_map"]], ["add", "theorem", "to_affine_map_injective", ["continuous_affine_map"]], ["add", "def", "to_continuous_map", ["continuous_affine_map"]], ["add", "theorem", "to_continuous_map_coe", ["continuous_affine_map"]], ["add", "theorem", "to_continuous_map_injective", ["continuous_affine_map"]], ["add", "theorem", "to_fun_eq_coe", ["continuous_affine_map"]], ["add", "structure", "continuous_affine_map", []]]}]}, {"timestamp": 1636230462, "sha": "26c0c23e", "message": "feat(algebra/homology/image_to_kernel): homology.map_iso (#9978)", "changes": [{"oldPath": "src/algebra/homology/image_to_kernel.lean", "newPath": "src/algebra/homology/image_to_kernel.lean", "changes": [["add", "theorem", "comp_right_eq_comp_left", ["homology"]], ["add", "theorem", "map_comp", ["homology"]], ["add", "theorem", "map_id", ["homology"]], ["add", "def", "map_iso", ["homology"]]]}]}, {"timestamp": 1636224557, "sha": "f18278de", "message": "chore(algebra/opposites): use `injective.*` constructors (#10200)", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["mod", "theorem", "op_sub", ["opposite"]], ["mod", "theorem", "unop_sub", ["opposite"]]]}]}, {"timestamp": 1636224556, "sha": "38caa506", "message": "feat(data/nat/basic): `a < a / b * b + b` (#10193)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "lt_div_mul_add", ["nat"]]]}]}, {"timestamp": 1636224555, "sha": "ebe7951d", "message": "feat(algebra/big_operators/order): Bound on a product from a pointwise bound (#10190)\nThis proves `finset.le_prod_of_forall_le` which is the dual of `finset.prod_le_of_forall_le`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["mod", "theorem", "card_bUnion_le_card_mul", ["finset"]], ["add", "theorem", "le_prod_of_forall_le", ["finset"]], ["mod", "theorem", "prod_le_of_forall_le", ["finset"]]]}]}, {"timestamp": 1636224554, "sha": "be412c3d", "message": "fix(README): update specialties of maintainers (#10086)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1636222519, "sha": "0c54c57c", "message": "feat(data/set/equitable): A singleton is equitable (#10192)\nProve `set.subsingleton.equitable_on` and `set.equitable_on_singleton`.", "changes": [{"oldPath": "src/data/set/equitable.lean", "newPath": "src/data/set/equitable.lean", "changes": [["mod", "theorem", "equitable_on_empty", ["set"]], ["add", "theorem", "equitable_on_singleton", ["set"]], ["add", "theorem", "equitable_on", ["set", "subsingleton"]]]}]}, {"timestamp": 1636203271, "sha": "af36f1a3", "message": "chore(algebra/group/ulift): use injective.* to define instances (#10172)\nAlso rename `ulift.mul_equiv` to `mul_equiv.ulift` and add some\nmissing instances.", "changes": [{"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": [["add", "def", "ulift", ["mul_equiv"]], ["del", "def", "mul_equiv", ["ulift"]]]}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}]}, {"timestamp": 1636197851, "sha": "4b14ef48", "message": "feat(data/fintype): instances for `infinite (α ⊕ β)` and `infinite (α × β)` (#10196)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "infinite_prod", []], ["add", "theorem", "infinite_sum", []]]}]}, {"timestamp": 1636192042, "sha": "239bf055", "message": "feat(data/list/basic): list products (#10184)\nAdding a couple of lemmas about list products. The first is a simpler variant of `head_mul_tail_prod'` in the case where the list is not empty. The other is a variant of `list.prod_ne_zero` for `list ℕ`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "head_mul_tail_prod'", ["list"]], ["add", "theorem", "head_mul_tail_prod_of_ne_nil", ["list"]], ["add", "theorem", "nth_zero_mul_tail_prod", ["list"]], ["add", "theorem", "prod_pos", ["list"]]]}]}, {"timestamp": 1636187515, "sha": "051cb615", "message": "feat(data/sym/sym2): Induction on `sym2` (#10189)\nA few basics about `sym2` that were blatantly missing.", "changes": [{"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": []}]}, {"timestamp": 1636164773, "sha": "4341fff2", "message": "chore(set_theory/cardinal_ordinal): use notation ω (#10197)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["mod", "theorem", "add_eq_left", ["cardinal"]], ["mod", "theorem", "add_eq_left_iff", ["cardinal"]], ["mod", "theorem", "add_eq_max", ["cardinal"]], ["mod", "theorem", "add_eq_right", ["cardinal"]], ["mod", "theorem", "add_eq_right_iff", ["cardinal"]], ["mod", "theorem", "add_eq_self", ["cardinal"]], ["mod", "theorem", "add_lt_of_lt", ["cardinal"]], ["mod", "theorem", "add_one_eq", ["cardinal"]], ["mod", "theorem", "aleph'_omega", ["cardinal"]], ["mod", "theorem", "aleph_zero", ["cardinal"]], ["mod", "theorem", "bit0_eq_self", ["cardinal"]], ["mod", "theorem", "bit0_lt_bit1", ["cardinal"]], ["mod", "theorem", "bit0_lt_omega", ["cardinal"]], ["mod", "theorem", "bit1_eq_self_iff", ["cardinal"]], ["mod", "theorem", "bit1_le_bit0", ["cardinal"]], ["mod", "theorem", "bit1_lt_omega", ["cardinal"]], ["mod", "theorem", "eq_of_add_eq_of_omega_le", ["cardinal"]], ["mod", "theorem", "exists_aleph", ["cardinal"]], ["mod", "theorem", "mk_bounded_set_le_of_omega_le", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_finite_same", ["cardinal"]], ["mod", "theorem", "mk_compl_eq_mk_compl_infinite", ["cardinal"]], ["mod", "theorem", "mk_compl_finset_of_omega_le", ["cardinal"]], ["mod", "theorem", "mk_compl_of_omega_le", ["cardinal"]], ["mod", "theorem", "mul_eq_left", ["cardinal"]], ["mod", "theorem", "mul_eq_left_iff", ["cardinal"]], ["mod", "theorem", "mul_eq_max", ["cardinal"]], ["mod", "theorem", "mul_eq_max_of_omega_le_left", ["cardinal"]], ["mod", "theorem", "mul_eq_right", ["cardinal"]], ["mod", "theorem", "mul_eq_self", ["cardinal"]], ["mod", "theorem", "mul_le_max_of_omega_le_left", ["cardinal"]], ["mod", "theorem", "mul_lt_of_lt", ["cardinal"]], ["mod", "theorem", "omega_le_aleph'", ["cardinal"]], ["mod", "theorem", "omega_le_aleph", ["cardinal"]], ["mod", "theorem", "omega_le_bit0", ["cardinal"]], ["mod", "theorem", "omega_le_bit1", ["cardinal"]], ["mod", "theorem", "ord_is_limit", ["cardinal"]], ["mod", "theorem", "powerlt_omega", ["cardinal"]], ["mod", "theorem", "powerlt_omega_le", ["cardinal"]]]}]}, {"timestamp": 1636155557, "sha": "8174bd07", "message": "feat(analysis/inner_product_space/rayleigh): Rayleigh quotient produces eigenvectors (#9840)\nDefine `self_adjoint` for an operator `T` to mean `∀ x y, ⟪T x, y⟫ = ⟪x, T y⟫`. (This doesn't require a definition of `adjoint`, although that will come soon.). Prove that a local extremum of the Rayleigh quotient of a self-adjoint operator on the unit sphere is an eigenvector, and use this to prove that in finite dimension a self-adjoint operator has an eigenvector.", "changes": [{"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": [["add", "theorem", "exists_multipliers_of_has_strict_fderiv_at_1d", ["is_local_extr_on"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "def", "re_apply_inner_self", ["continuous_linear_map"]], ["add", "theorem", "re_apply_inner_self_apply", ["continuous_linear_map"]], ["add", "theorem", "re_apply_inner_self_continuous", ["continuous_linear_map"]], ["add", "theorem", "re_apply_inner_self_smul", ["continuous_linear_map"]], ["add", "theorem", "apply_clm", ["is_self_adjoint"]], ["add", "theorem", "coe_re_apply_inner_self_apply", ["is_self_adjoint"]], ["add", "theorem", "conj_inner_sym", ["is_self_adjoint"]], ["add", "def", "is_self_adjoint", []], ["add", "theorem", "is_self_adjoint_iff_bilin_form", []]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": [["add", "theorem", "inner", ["has_strict_fderiv_at"]], ["add", "theorem", "has_strict_fderiv_at_norm_sq", []]]}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/rayleigh.lean", "changes": [["add", "theorem", "image_rayleigh_eq_image_rayleigh_sphere", ["continuous_linear_map"]], ["add", "theorem", "infi_rayleigh_eq_infi_rayleigh_sphere", ["continuous_linear_map"]], ["add", "theorem", "rayleigh_smul", ["continuous_linear_map"]], ["add", "theorem", "supr_rayleigh_eq_supr_rayleigh_sphere", ["continuous_linear_map"]], ["add", "theorem", "eq_smul_self_of_is_local_extr_on", ["is_self_adjoint"]], ["add", "theorem", "eq_smul_self_of_is_local_extr_on_real", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvalue_infi_of_finite_dimensional", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvalue_supr_of_finite_dimensional", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_local_extr_on", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_max_on", ["is_self_adjoint"]], ["add", "theorem", "has_eigenvector_of_is_min_on", ["is_self_adjoint"]], ["add", "theorem", "has_strict_fderiv_at_re_apply_inner_self", ["is_self_adjoint"]], ["add", "theorem", "linearly_dependent_of_is_local_extr_on", ["is_self_adjoint"]]]}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["add", "theorem", "supr_eq", ["is_max_on"]], ["add", "theorem", "infi_eq", ["is_min_on"]]]}]}, {"timestamp": 1636141253, "sha": "6cd6975d", "message": "feat(order/lattice): add `inf_lt_sup` (#10178)\nAlso add `inf_le_sup`, `lt_or_lt_iff_ne`, and `min_lt_max`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "lt_or_lt_iff_ne", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_le_sup", []], ["add", "theorem", "inf_lt_sup", []]]}, {"oldPath": "src/order/min_max.lean", "newPath": "src/order/min_max.lean", "changes": [["add", "theorem", "min_lt_max", []]]}]}, {"timestamp": 1636141252, "sha": "85f64207", "message": "feat(algebra/group/inj_surj): add `injective.monoid_pow` etc (#10152)\nAdd versions of some constructors that take `pow`/`zpow`/`nsmul`/`zsmul` as explicit arguments.", "changes": [{"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}]}, {"timestamp": 1636139224, "sha": "d69501f1", "message": "feat(category_theory/limits/shapes/multiequalizer): Multi(co)equalizers (#10169)\nThis PR adds another special shape to the limits library, which directly generalizes shapes for many other special limits (like pullbacks, equalizers, etc.). A `multiequalizer` can be thought of an an equalizer of two maps between two products. This will be used later on in the context of sheafification.\nI don't know if there is a standard name for the gadgets this PR introduces. I would be happy to change the names if needed.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/multiequalizer.lean", "changes": [["add", "def", "has_multicoequalizer", ["category_theory", "limits"]], ["add", "def", "has_multiequalizer", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "multicoequalizer"]], ["add", "def", "desc", ["category_theory", "limits", "multicoequalizer"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "multicoequalizer"]], ["add", "def", "multicofork", ["category_theory", "limits", "multicoequalizer"]], ["add", "theorem", "multicofork_ι_app_right", ["category_theory", "limits", "multicoequalizer"]], ["add", "theorem", "multicofork_π", ["category_theory", "limits", "multicoequalizer"]], ["add", "def", "π", ["category_theory", "limits", "multicoequalizer"]], ["add", "theorem", "π_desc", ["category_theory", "limits", "multicoequalizer"]], ["add", "def", "multicoequalizer", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "fst_app_right", ["category_theory", "limits", "multicofork"]], ["add", "def", "of_π", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "snd_app_right", ["category_theory", "limits", "multicofork"]], ["add", "def", "π", ["category_theory", "limits", "multicofork"]], ["add", "theorem", "π_eq_app_right", ["category_theory", "limits", "multicofork"]], ["add", "def", "multicofork", ["category_theory", "limits"]], ["add", "def", "multicospan", ["category_theory", "limits", "multicospan_index"]], ["add", "theorem", "multicospan_map_fst", ["category_theory", "limits", "multicospan_index"]], ["add", "theorem", "multicospan_map_snd", ["category_theory", "limits", "multicospan_index"]], ["add", "theorem", "multicospan_obj_left", ["category_theory", "limits", "multicospan_index"]], ["add", "theorem", "multicospan_obj_right", ["category_theory", "limits", "multicospan_index"]], ["add", "structure", "multicospan_index", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "multiequalizer"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "multiequalizer"]], ["add", "def", "lift", ["category_theory", "limits", "multiequalizer"]], ["add", "theorem", "lift_ι", ["category_theory", "limits", "multiequalizer"]], ["add", "def", "multifork", ["category_theory", "limits", "multiequalizer"]], ["add", "theorem", "multifork_ι", ["category_theory", "limits", "multiequalizer"]], ["add", "theorem", "multifork_π_app_left", ["category_theory", "limits", "multiequalizer"]], ["add", "def", "ι", ["category_theory", "limits", "multiequalizer"]], ["add", "def", "multiequalizer", ["category_theory", "limits"]], ["add", "theorem", "app_left_fst", ["category_theory", "limits", "multifork"]], ["add", "theorem", "app_left_snd", ["category_theory", "limits", "multifork"]], ["add", "theorem", "condition", ["category_theory", "limits", "multifork"]], ["add", "def", "of_ι", ["category_theory", "limits", "multifork"]], ["add", "def", "ι", ["category_theory", "limits", "multifork"]], ["add", "theorem", "ι_eq_app_left", ["category_theory", "limits", "multifork"]], ["add", "def", "multifork", ["category_theory", "limits"]], ["add", "def", "multispan", ["category_theory", "limits", "multispan_index"]], ["add", "theorem", "multispan_map_fst", ["category_theory", "limits", "multispan_index"]], ["add", "theorem", "multispan_map_snd", ["category_theory", "limits", "multispan_index"]], ["add", "theorem", "multispan_obj_left", ["category_theory", "limits", "multispan_index"]], ["add", "theorem", "multispan_obj_right", ["category_theory", "limits", "multispan_index"]], ["add", "structure", "multispan_index", ["category_theory", "limits"]], ["add", "def", "comp", ["category_theory", "limits", "walking_multicospan", "hom"]], ["add", "inductive", "hom", ["category_theory", "limits", "walking_multicospan"]], ["add", "inductive", "walking_multicospan", ["category_theory", "limits"]], ["add", "def", "comp", ["category_theory", "limits", "walking_multispan", "hom"]], ["add", "inductive", "hom", ["category_theory", "limits", "walking_multispan"]], ["add", "inductive", "walking_multispan", ["category_theory", "limits"]]]}]}, {"timestamp": 1636134680, "sha": "cc59673b", "message": "chore(*complex*): add a few simp lemmas (#10187)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["add", "theorem", "exp_add_pi_mul_I", ["complex"]], ["mod", "theorem", "exp_int_mul_two_pi_mul_I", ["complex"]], ["mod", "theorem", "exp_nat_mul_two_pi_mul_I", ["complex"]], ["mod", "theorem", "exp_pi_mul_I", ["complex"]], ["add", "theorem", "exp_sub_pi_mul_I", ["complex"]], ["mod", "theorem", "exp_two_pi_mul_I", ["complex"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "norm_sq_mk", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_of_real_mul_I_im", ["complex"]], ["add", "theorem", "exp_of_real_mul_I_re", ["complex"]]]}]}, {"timestamp": 1636134678, "sha": "a71bfdca", "message": "feat(analysis/calculus/times_cont_diff): `equiv.prod_assoc` is smooth. (#10165)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff_prod_assoc", []], ["add", "theorem", "times_cont_diff_prod_assoc_symm", []]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_prod_assoc", ["linear_isometry_equiv"]], ["add", "theorem", "coe_prod_assoc_symm", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1636134677, "sha": "d9a80ee9", "message": "refactor(data/multiset/locally_finite): Generalize `multiset.Ico` to locally finite orders (#10031)\nThis deletes `data.multiset.intervals` entirely, redefines `multiset.Ico` using `locally_finite_order` and restores the lemmas in their correct generality:\n* `multiset.Ico.map_add` → `multiset.map_add_left_Ico`, `multiset.map_add_right_Ico`\n* `multiset.Ico.eq_zero_of_le` → `multiset.Ico_eq_zero_of_le `\n* `multiset.Ico.self_eq_zero` → `multiset.Ico_self`\n* `multiset.Ico.nodup` → `multiset.nodup_Ico`\n* `multiset.Ico.mem` → `multiset.mem_Ico`\n* `multiset.Ico.not_mem_top` → `multiset.right_not_mem_Ico`\n* `multiset.Ico.inter_consecutive` → `multiset.Ico_inter_Ico_of_le`\n* `multiset.Ico.filter_something` → `multiset.filter_Ico_something`\n* `multiset.Ico.eq_cons` → `multiset.Ioo_cons_left`\n* `multiset.Ico.succ_top` →`multiset.Ico_cons_right`\n`open set multiset` now causes a (minor) clash. This explains the changes to `analysis.box_integral.divergence_theorem` and `measure_theory.integral.divergence_theorem`", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["mod", "theorem", "Ico_filter_le_left", ["finset"]], ["mod", "theorem", "Ico_filter_le_of_le_left", ["finset"]], ["mod", "theorem", "Ico_filter_le_of_left_le", ["finset"]], ["mod", "theorem", "Ico_filter_le_of_right_le", ["finset"]], ["mod", "theorem", "Ico_filter_lt_of_le_left", ["finset"]], ["mod", "theorem", "Ico_filter_lt_of_le_right", ["finset"]], ["mod", "theorem", "Ico_filter_lt_of_right_le", ["finset"]]]}, {"oldPath": "src/data/multiset/default.lean", "newPath": "src/data/multiset/default.lean", "changes": []}, {"oldPath": "src/data/multiset/intervals.lean", "newPath": null, "changes": [["del", "theorem", "add_consecutive", ["multiset", "Ico"]], ["del", "theorem", "card", ["multiset", "Ico"]], ["del", "theorem", "eq_cons", ["multiset", "Ico"]], ["del", "theorem", "eq_zero_iff", ["multiset", "Ico"]], ["del", "theorem", "eq_zero_of_le", ["multiset", "Ico"]], ["del", "theorem", "filter_le", ["multiset", "Ico"]], ["del", "theorem", "filter_le_of_bot", ["multiset", "Ico"]], ["del", "theorem", "filter_le_of_le", ["multiset", "Ico"]], ["del", "theorem", "filter_le_of_le_bot", ["multiset", "Ico"]], ["del", "theorem", "filter_le_of_top_le", ["multiset", "Ico"]], ["del", "theorem", "filter_lt", ["multiset", "Ico"]], ["del", "theorem", "filter_lt_of_ge", ["multiset", "Ico"]], ["del", "theorem", "filter_lt_of_le_bot", ["multiset", "Ico"]], ["del", "theorem", "filter_lt_of_top_le", ["multiset", "Ico"]], ["del", "theorem", "inter_consecutive", ["multiset", "Ico"]], ["del", "theorem", "map_add", ["multiset", "Ico"]], ["del", "theorem", "map_sub", ["multiset", "Ico"]], ["del", "theorem", "mem", ["multiset", "Ico"]], ["del", "theorem", "nodup", ["multiset", "Ico"]], ["del", "theorem", "not_mem_top", ["multiset", "Ico"]], ["del", "theorem", "pred_singleton", ["multiset", "Ico"]], ["del", "theorem", "self_eq_zero", ["multiset", "Ico"]], ["del", "theorem", "succ_singleton", ["multiset", "Ico"]], ["del", "theorem", "succ_top", ["multiset", "Ico"]], ["del", "theorem", "zero_bot", ["multiset", "Ico"]], ["del", "def", "Ico", ["multiset"]]]}, {"oldPath": "src/data/multiset/locally_finite.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": [["add", "theorem", "Ico_add_Ico_eq_Ico", ["multiset"]], ["add", "theorem", "Ico_cons_right", ["multiset"]], ["add", "theorem", "Ico_disjoint_Ico", ["multiset"]], ["add", "theorem", "Ico_eq_zero_iff", ["multiset"]], ["add", "theorem", "Ico_eq_zero_of_le", ["multiset"]], ["add", "theorem", "Ico_filter_le", ["multiset"]], ["add", "theorem", "Ico_filter_le_left", ["multiset"]], ["add", "theorem", "Ico_filter_le_of_le_left", ["multiset"]], ["add", "theorem", "Ico_filter_le_of_left_le", ["multiset"]], ["add", "theorem", "Ico_filter_le_of_right_le", ["multiset"]], ["add", "theorem", "Ico_filter_lt", ["multiset"]], ["add", "theorem", "Ico_filter_lt_of_le_left", ["multiset"]], ["add", "theorem", "Ico_filter_lt_of_le_right", ["multiset"]], ["add", "theorem", "Ico_filter_lt_of_right_le", ["multiset"]], ["add", "theorem", "Ico_inter_Ico", ["multiset"]], ["add", "theorem", "Ico_inter_Ico_of_le", ["multiset"]], ["add", "theorem", "Ico_self", ["multiset"]], ["add", "theorem", "Ico_sub_Ico_left", ["multiset"]], ["add", "theorem", "Ico_sub_Ico_right", ["multiset"]], ["add", "theorem", "Ico_subset_Ico_iff", ["multiset"]], ["add", "theorem", "Ioo_cons_left", ["multiset"]], ["add", "theorem", "left_mem_Icc", ["multiset"]], ["add", "theorem", "left_mem_Ico", ["multiset"]], ["add", "theorem", "left_not_mem_Ioc", ["multiset"]], ["add", "theorem", "left_not_mem_Ioo", ["multiset"]], ["add", "theorem", "map_add_left_Ico", ["multiset"]], ["add", "theorem", "map_add_right_Ico", ["multiset"]], ["add", "theorem", "nodup_Ico", ["multiset"]], ["add", "theorem", "right_mem_Icc", ["multiset"]], ["add", "theorem", "right_mem_Ioc", ["multiset"]], ["add", "theorem", "right_not_mem_Ico", ["multiset"]], ["add", "theorem", "right_not_mem_Ioo", ["multiset"]]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["mod", "theorem", "Icc_succ_left", ["nat"]], ["mod", "theorem", "Ico_succ_left", ["nat"]], ["mod", "theorem", "Ico_succ_right", ["nat"]], ["mod", "theorem", "Ico_succ_singleton", ["nat"]], ["mod", "theorem", "Ico_zero_eq_range", ["nat"]], ["mod", "theorem", "Iio_eq_range", ["nat"]], ["mod", "theorem", "image_sub_const_Ico", ["nat"]], ["mod", "theorem", "range_image_pred_top_sub", ["nat"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "def", "Ico", ["multiset"]], ["add", "theorem", "mem_Ico", ["multiset"]], ["mod", "theorem", "finite_Icc", ["set"]], ["mod", "theorem", "finite_Ico", ["set"]], ["mod", "theorem", "finite_Ioc", ["set"]], ["mod", "theorem", "finite_Ioo", ["set"]]]}]}, {"timestamp": 1636129514, "sha": "5f5ce2b4", "message": "feat(combinatorics/simple_graph): adding simple_graph.support and mem_support / support_mono lemmas (#10176)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "mem_support", ["simple_graph"]], ["add", "def", "support", ["simple_graph"]], ["add", "theorem", "support_mono", ["simple_graph"]]]}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": [["add", "theorem", "dom_mono", ["rel"]]]}]}, {"timestamp": 1636125579, "sha": "8ac2fa06", "message": "chore(linear_algebra/affine_space/affine_map): make `affine_map.coe_sub` true by definition (#10182)\nThis makes life slightly easier in some work following on from https://github.com/leanprover-community/mathlib/pull/10161\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["mod", "theorem", "add_linear", ["affine_map"]], ["mod", "theorem", "coe_sub", ["affine_map"]], ["add", "theorem", "neg_linear", ["affine_map"]], ["add", "theorem", "sub_linear", ["affine_map"]]]}]}, {"timestamp": 1636125578, "sha": "b22a7c7e", "message": "refactor(measure_theory/integral/bochner): remove superfluous hypothesis (#10181)\n* Remove hypothesis from `tendsto_integral_of_dominated_convergence` that was superfluous\n* This results in simplifying some proofs, and removing some hypotheses from other lemmas\n* Also remove some `ae_measurable` hypotheses for functions that were also assumed to be `integrable`.", "changes": [{"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}]}, {"timestamp": 1636125577, "sha": "88b4ce73", "message": "feat(algebra/order/with_zero): add with_zero.linear_ordered_comm_grou… (#10180)\n…p_with_zero", "changes": [{"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}]}, {"timestamp": 1636119229, "sha": "b31af6d9", "message": "refactor(algebra/group): move `monoid.has_pow` etc to `algebra.group.defs` (#10147)\nThis way we can state theorems about `pow`/`nsmul` using notation `^` and `•` right away.\nAlso move some `ext` lemmas to a new file and rewrite proofs using properties of `monoid_hom`s.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_zpow", ["finset"]], ["del", "theorem", "zsmul_sum", ["finset"]]]}, {"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": [["mod", "theorem", "is_unit_mul_iff", ["commute"]], ["add", "theorem", "pow_left", ["commute"]], ["add", "theorem", "pow_pow", ["commute"]], ["add", "theorem", "pow_pow_self", ["commute"]], ["add", "theorem", "pow_right", ["commute"]], ["add", "theorem", "pow_self", ["commute"]], ["add", "theorem", "self_pow", ["commute"]], ["mod", "theorem", "units_inv_left", ["commute"]], ["add", "theorem", "units_inv_left_iff:", ["commute"]], ["del", "theorem", "units_inv_left_iff", ["commute"]], ["mod", "theorem", "units_inv_right", ["commute"]], ["mod", "theorem", "units_inv_right_iff", ["commute"]], ["mod", "theorem", "is_unit_mul_self_iff", []], ["add", "theorem", "pow_succ'", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["del", "theorem", "ext", ["cancel_comm_monoid"]], ["del", "theorem", "to_comm_monoid_injective", ["cancel_comm_monoid"]], ["del", "theorem", "ext", ["cancel_monoid"]], ["del", "theorem", "to_left_cancel_monoid_injective", ["cancel_monoid"]], ["del", "theorem", "ext", ["comm_group"]], ["del", "theorem", "ext", ["comm_monoid"]], ["del", "theorem", "to_monoid_injective", ["comm_monoid"]], ["del", "theorem", "ext", ["div_inv_monoid"]], ["del", "theorem", "ext", ["group"]], ["del", "theorem", "ext", ["left_cancel_monoid"]], ["del", "theorem", "to_monoid_injective", ["left_cancel_monoid"]], ["del", "theorem", "ext", ["monoid"]], ["del", "theorem", "npow_add", []], ["add", "theorem", "npow_eq_pow", []], ["del", "theorem", "npow_one", []], ["add", "theorem", "pow_succ", []], ["add", "theorem", "pow_zero", []], ["del", "theorem", "ext", ["right_cancel_monoid"]], ["del", "theorem", "to_monoid_injective", ["right_cancel_monoid"]], ["add", "theorem", "zpow_coe_nat", []], ["add", "theorem", "zpow_eq_pow", []], ["add", "theorem", "zpow_neg_succ_of_nat", []], ["add", "theorem", "zpow_of_nat", []], ["add", "theorem", "zpow_zero", []]]}, {"oldPath": null, "newPath": "src/algebra/group/ext.lean", "changes": [["add", "theorem", "ext", ["cancel_comm_monoid"]], ["add", "theorem", "to_comm_monoid_injective", ["cancel_comm_monoid"]], ["add", "theorem", "ext", ["cancel_monoid"]], ["add", "theorem", "to_left_cancel_monoid_injective", ["cancel_monoid"]], ["add", "theorem", "ext", ["comm_group"]], ["add", "theorem", "ext", ["comm_monoid"]], ["add", "theorem", "to_monoid_injective", ["comm_monoid"]], ["add", "theorem", "ext", ["div_inv_monoid"]], ["add", "theorem", "ext", ["group"]], ["add", "theorem", "ext", ["left_cancel_monoid"]], ["add", "theorem", "to_monoid_injective", ["left_cancel_monoid"]], ["add", "theorem", "ext", ["monoid"]], ["add", "theorem", "ext", ["right_cancel_monoid"]], ["add", "theorem", "to_monoid_injective", ["right_cancel_monoid"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "map_div'", ["monoid_hom"]], ["add", "theorem", "map_pow", ["monoid_hom"]], ["add", "theorem", "map_zpow'", ["monoid_hom"]], ["add", "theorem", "map_zpow", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": [["add", "theorem", "pow_right", ["semiconj_by"]]]}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "pow_left", ["commute"]], ["del", "theorem", "pow_pow", ["commute"]], ["del", "theorem", "pow_pow_self", ["commute"]], ["del", "theorem", "pow_right", ["commute"]], ["del", "theorem", "pow_self", ["commute"]], ["del", "theorem", "self_pow", ["commute"]], ["del", "theorem", "map_pow", ["monoid_hom"]], ["del", "theorem", "npow_eq_pow", []], ["del", "theorem", "pow_succ'", []], ["del", "theorem", "pow_succ", []], ["del", "theorem", "pow_zero", []], ["del", "theorem", "pow_right", ["semiconj_by"]], ["del", "theorem", "zpow_coe_nat", []], ["del", "theorem", "zpow_eq_pow", []], ["del", "theorem", "zpow_neg_succ_of_nat", []], ["del", "theorem", "zpow_of_nat", []], ["del", "theorem", "zpow_zero", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "map_zpow", ["monoid_hom"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/order/pi.lean", "newPath": "src/algebra/order/pi.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "def", "saturated", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1636106906, "sha": "16af388f", "message": "feat(data/quot): add `quotient.lift₂_mk` (#10173)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "lift₂_mk", ["quotient"]]]}]}, {"timestamp": 1636100838, "sha": "35d36288", "message": "chore(data/bool): add `bool.lt_iff` (#10179)", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["mod", "theorem", "ff_lt_tt", ["bool"]], ["add", "theorem", "lt_iff", ["bool"]]]}]}, {"timestamp": 1636094939, "sha": "8991f28d", "message": "feat(measure_theory/covering/vitali_family): define Vitali families (#10057)\nVitali families are families of sets (for instance balls around each point in vector spaces) that satisfy covering theorems. Their main feature is that differentiation of measure theorems hold along Vitali families. This PR is a stub defining Vitali families, and giving examples of them thanks to the Besicovitch and Vitali covering theorems.\nThe differentiation theorem is left for another PR.", "changes": [{"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "pairwise_subtype_iff_pairwise_set", []], ["mod", "theorem", "pairwise_disjoint_empty", ["set"]], ["mod", "theorem", "pairwise_disjoint_singleton", ["set"]]]}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/covering/vitali_family.lean", "changes": [["add", "theorem", "eventually_filter_at_iff", ["vitali_family"]], ["add", "theorem", "eventually_filter_at_mem_sets", ["vitali_family"]], ["add", "theorem", "eventually_filter_at_subset_of_nhds", ["vitali_family"]], ["add", "def", "filter_at", ["vitali_family"]], ["add", "theorem", "covering_disjoint", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "covering_disjoint_subtype", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "covering_mem", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "covering_mem_family", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "exists_disjoint_covering_ae", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "index_countable", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "index_subset", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "measure_diff_bUnion", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "measure_le_tsum", ["vitali_family", "fine_subfamily_on"]], ["add", "theorem", "measure_le_tsum_of_absolutely_continuous", ["vitali_family", "fine_subfamily_on"]], ["add", "def", "fine_subfamily_on", ["vitali_family"]], ["add", "theorem", "fine_subfamily_on_of_frequently", ["vitali_family"]], ["add", "theorem", "frequently_filter_at_iff", ["vitali_family"]], ["add", "theorem", "mem_filter_at_iff", ["vitali_family"]], ["add", "def", "mono", ["vitali_family"]], ["add", "structure", "vitali_family", []]]}]}, {"timestamp": 1636092009, "sha": "6f9ec121", "message": "doc(group_theory/sylow): Expand Frattini's argument docstring (#10174)\nExpands the docstring for Frattini's argument.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1636079062, "sha": "8490f2aa", "message": "chore(scripts): update nolints.txt (#10177)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1636073035, "sha": "41a820dd", "message": "feat(number_theory/lucas_primality): Add theorem for Lucas primality test (#8820)\nThis is a PR for adding the [Lucas primality test](https://en.wikipedia.org/wiki/Lucas_primality_test) to mathlib. This tells us that a number `p` is prime when an element `a : zmod p` has order `p-1` .", "changes": [{"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "dvd_iff_exists_eq_mul_left", []]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "card_units_zmod_lt_sub_one", ["nat"]], ["add", "theorem", "prime_iff_card_units", ["nat"]], ["add", "theorem", "totient_lt", ["nat"]], ["mod", "theorem", "card_units_eq_totient", ["zmod"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_eq_of_pow_and_pow_div_prime", []]]}, {"oldPath": null, "newPath": "src/number_theory/lucas_primality.lean", "changes": [["add", "theorem", "lucas_primality", []]]}]}, {"timestamp": 1636065402, "sha": "d6a57f89", "message": "feat(data/finset/prod): When `finset.product` is nonempty (#10170)\nand two lemmas about how it interacts with the union.", "changes": [{"oldPath": "src/data/finset/prod.lean", "newPath": "src/data/finset/prod.lean", "changes": [["add", "theorem", "fst", ["finset", "nonempty"]], ["add", "theorem", "product", ["finset", "nonempty"]], ["add", "theorem", "snd", ["finset", "nonempty"]], ["add", "theorem", "nonempty_product", ["finset"]], ["add", "theorem", "product_union", ["finset"]], ["add", "theorem", "union_product", ["finset"]]]}]}, {"timestamp": 1636065400, "sha": "b064622f", "message": "feat(data/fin/interval): Cardinality of `finset.Ixi`/`finset.Iix` in `fin` (#10168)\nThis proves `(Ici a).card = n + 1 - a`, `(Ioi a).card = n - a`, `(Iic b).card = b + 1`, `(Iio b).card = b` where `a b : fin (n + 1)` (and also `a b : ℕ` for the last two).", "changes": [{"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["add", "theorem", "Ici_eq_finset_subtype", ["fin"]], ["add", "theorem", "Iic_eq_finset_subtype", ["fin"]], ["add", "theorem", "Iio_eq_finset_subtype", ["fin"]], ["add", "theorem", "Ioi_eq_finset_subtype", ["fin"]], ["add", "theorem", "card_Ici", ["fin"]], ["add", "theorem", "card_Iic", ["fin"]], ["add", "theorem", "card_Iio", ["fin"]], ["add", "theorem", "card_Ioi", ["fin"]], ["add", "theorem", "card_fintype_Ici", ["fin"]], ["add", "theorem", "card_fintype_Iic", ["fin"]], ["add", "theorem", "card_fintype_Iio", ["fin"]], ["add", "theorem", "card_fintype_Ioi", ["fin"]], ["add", "theorem", "map_subtype_embedding_Ici", ["fin"]], ["add", "theorem", "map_subtype_embedding_Iic", ["fin"]], ["add", "theorem", "map_subtype_embedding_Iio", ["fin"]], ["add", "theorem", "map_subtype_embedding_Ioi", ["fin"]]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "card_Iic", ["nat"]], ["add", "theorem", "card_Iio", ["nat"]], ["add", "theorem", "card_fintype_Iic", ["nat"]], ["add", "theorem", "card_fintype_Iio", ["nat"]]]}]}, {"timestamp": 1636065399, "sha": "fab61c9f", "message": "chore(topology/continuous_function/bounded): add simple lemmas (#10149)", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "add_comp_continuous", ["bounded_continuous_function"]], ["add", "theorem", "coe_to_continuous_fun", ["bounded_continuous_function"]], ["add", "theorem", "continuous_comp_continuous", ["bounded_continuous_function"]], ["add", "theorem", "eq_of_empty", ["bounded_continuous_function"]], ["add", "theorem", "lipschitz_comp_continuous", ["bounded_continuous_function"]], ["add", "theorem", "zero_comp_continuous", ["bounded_continuous_function"]]]}]}, {"timestamp": 1636065397, "sha": "466fd276", "message": "feat(algebra/group_with_zero/basic): relax some commutativity assumptions (#10075)\nMoving some lemmas so they require group_with_zero instead of comm_group_with_zero, using the generalization linter.", "changes": [{"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}]}, {"timestamp": 1636065396, "sha": "ce0e0583", "message": "feat(data/equiv/mul_add): add lemmas about multiplication and addition on a group being bijective and finite cancel_monoid_with_zeros (#10046)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "mul_left_bijective", ["group"]], ["add", "theorem", "mul_right_bijective", ["group"]], ["add", "theorem", "mul_left_bijective₀", []], ["add", "theorem", "mul_right_bijective₀", []], ["add", "theorem", "mul_left_bijective", ["units"]], ["add", "theorem", "mul_right_bijective", ["units"]]]}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["add", "def", "group_with_zero_of_fintype", []], ["add", "theorem", "mul_left_bijective_of_fintype₀", []], ["del", "theorem", "mul_left_bijective₀", []], ["add", "theorem", "mul_right_bijective_of_fintype₀", []], ["del", "theorem", "mul_right_bijective₀", []]]}]}, {"timestamp": 1636060054, "sha": "773a7a42", "message": "feat(analysis/ODE): prove Picard-Lindelöf/Cauchy-Lipschitz Theorem (#9791)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/analysis/ODE/picard_lindelof.lean", "changes": [["add", "theorem", "exists_forall_deriv_within_Icc_eq_of_lipschitz_of_continuous", []], ["add", "theorem", "continuous_proj", ["picard_lindelof"]], ["add", "theorem", "dist_t₀_le", ["picard_lindelof"]], ["add", "theorem", "exists_contracting_iterate", ["picard_lindelof"]], ["add", "theorem", "exists_fixed", ["picard_lindelof"]], ["add", "theorem", "exists_solution", ["picard_lindelof"]], ["add", "theorem", "continuous_v_comp", ["picard_lindelof", "fun_space"]], ["add", "theorem", "dist_apply_le_dist", ["picard_lindelof", "fun_space"]], ["add", "theorem", "dist_iterate_next_apply_le", ["picard_lindelof", "fun_space"]], ["add", "theorem", "dist_iterate_next_le", ["picard_lindelof", "fun_space"]], ["add", "theorem", "dist_le_of_forall", ["picard_lindelof", "fun_space"]], ["add", "theorem", "dist_next_apply_le_of_le", ["picard_lindelof", "fun_space"]], ["add", "theorem", "has_deriv_within_at_next", ["picard_lindelof", "fun_space"]], ["add", "theorem", "interval_integrable_v_comp", ["picard_lindelof", "fun_space"]], ["add", "theorem", "map_t₀", ["picard_lindelof", "fun_space"]], ["add", "def", "next", ["picard_lindelof", "fun_space"]], ["add", "theorem", "next_apply", ["picard_lindelof", "fun_space"]], ["add", "theorem", "norm_v_comp_le", ["picard_lindelof", "fun_space"]], ["add", "theorem", "range_to_continuous_map", ["picard_lindelof", "fun_space"]], ["add", "def", "to_continuous_map", ["picard_lindelof", "fun_space"]], ["add", "theorem", "uniform_inducing_to_continuous_map", ["picard_lindelof", "fun_space"]], ["add", "def", "v_comp", ["picard_lindelof", "fun_space"]], ["add", "theorem", "v_comp_apply_coe", ["picard_lindelof", "fun_space"]], ["add", "structure", "fun_space", ["picard_lindelof"]], ["add", "theorem", "norm_le", ["picard_lindelof"]], ["add", "def", "proj", ["picard_lindelof"]], ["add", "theorem", "proj_coe", ["picard_lindelof"]], ["add", "theorem", "proj_of_mem", ["picard_lindelof"]], ["add", "def", "t_dist", ["picard_lindelof"]], ["add", "theorem", "t_dist_nonneg", ["picard_lindelof"]], ["add", "theorem", "t_min_le_t_max", ["picard_lindelof"]], ["add", "structure", "picard_lindelof", []]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "interval_subset_Icc", ["set"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1636057813, "sha": "74c27b25", "message": "feat(topology/sheaves): Pullback of presheaf (#9961)\nDefined the pullback of a presheaf along a continuous map, and proved that it is adjoint to pushforwards\nand it preserves stalks.", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["mod", "theorem", "id_pushforward", ["Top", "presheaf"]], ["add", "def", "id", ["Top", "presheaf", "pullback"]], ["add", "theorem", "id_inv_app", ["Top", "presheaf", "pullback"]], ["add", "def", "pullback", ["Top", "presheaf"]], ["add", "def", "pullback_map", ["Top", "presheaf"]], ["add", "def", "pullback_obj", ["Top", "presheaf"]], ["add", "def", "pullback_obj_obj_of_image_open", ["Top", "presheaf"]], ["add", "def", "pushforward_pullback_adjunction", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "def", "germ_to_pullback_stalk", ["Top", "presheaf"]], ["add", "def", "stalk_pullback_hom", ["Top", "presheaf"]], ["add", "def", "stalk_pullback_inv", ["Top", "presheaf"]], ["add", "def", "stalk_pullback_iso", ["Top", "presheaf"]]]}]}, {"timestamp": 1636051753, "sha": "79eb9344", "message": "chore(data/mv_polynomial/basic): add `map_alg_hom_coe_ring_hom` (#10158)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "map_alg_hom_coe_ring_hom", ["mv_polynomial"]]]}]}, {"timestamp": 1636051751, "sha": "11439d8c", "message": "chore(algebra/direct_sum/internal): add missing simp lemmas (#10154)\nThese previously weren't needed when these were `@[reducible] def`s as `simp` saw right through them.", "changes": [{"oldPath": "src/algebra/direct_sum/internal.lean", "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "theorem", "coe_galgebra_to_fun", ["submodule", "set_like"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "theorem", "coe_ghas_mul", ["set_like"]], ["add", "theorem", "coe_ghas_one", ["set_like"]], ["add", "theorem", "coe_gpow", ["set_like"]]]}]}, {"timestamp": 1636051750, "sha": "828e1004", "message": "feat(data/finset/interval): `finset α` is a locally finite order (#9963)", "changes": [{"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finset/interval.lean", "changes": [["add", "theorem", "Icc_eq_filter_powerset", ["finset"]], ["add", "theorem", "Icc_eq_image_powerset", ["finset"]], ["add", "theorem", "Ico_eq_filter_ssubsets", ["finset"]], ["add", "theorem", "Ico_eq_image_ssubsets", ["finset"]], ["add", "theorem", "Iic_eq_powerset", ["finset"]], ["add", "theorem", "Iio_eq_ssubsets", ["finset"]], ["add", "theorem", "Ioc_eq_filter_powerset", ["finset"]], ["add", "theorem", "Ioo_eq_filter_ssubsets", ["finset"]], ["add", "theorem", "card_Icc_finset", ["finset"]], ["add", "theorem", "card_Ico_finset", ["finset"]], ["add", "theorem", "card_Ioc_finset", ["finset"]], ["add", "theorem", "card_Ioo_finset", ["finset"]]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "Icc_erase_left", ["finset"]], ["add", "theorem", "Icc_erase_right", ["finset"]], ["mod", "theorem", "Ico_disjoint_Ico_consecutive", ["finset"]], ["mod", "theorem", "Ico_insert_right", ["finset"]], ["mod", "theorem", "Ico_inter_Ico_consecutive", ["finset"]], ["mod", "theorem", "Ioo_insert_left", ["finset"]], ["add", "theorem", "card_Ico_eq_card_Icc_sub_one", ["finset"]], ["add", "theorem", "card_Ioc_eq_card_Icc_sub_one", ["finset"]], ["add", "theorem", "card_Ioo_eq_card_Icc_sub_two", ["finset"]], ["add", "theorem", "card_Ioo_eq_card_Ico_sub_one", ["finset"]], ["add", "theorem", "left_mem_Icc", ["finset"]], ["add", "theorem", "left_mem_Ico", ["finset"]], ["add", "theorem", "left_not_mem_Ioc", ["finset"]], ["add", "theorem", "left_not_mem_Ioo", ["finset"]], ["add", "theorem", "right_mem_Icc", ["finset"]], ["add", "theorem", "right_mem_Ioc", ["finset"]], ["mod", "theorem", "right_not_mem_Ico", ["finset"]], ["add", "theorem", "right_not_mem_Ioo", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/divergence_theorem.lean", "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "sdiff_le_sdiff_left", []], ["add", "theorem", "sdiff_le_sdiff_of_sup_le_sup_left", []], ["add", "theorem", "sdiff_le_sdiff_of_sup_le_sup_right", []], ["add", "theorem", "sdiff_le_sdiff_right", []], ["del", "theorem", "sdiff_le_sdiff_self", []], ["del", "theorem", "sdiff_le_self_sdiff", []], ["add", "theorem", "sdiff_lt_sdiff_right", []], ["add", "theorem", "sdiff_sup_cancel", []], ["add", "theorem", "sup_le_of_le_sdiff_left", []], ["add", "theorem", "sup_le_of_le_sdiff_right", []], ["add", "theorem", "sup_lt_of_lt_sdiff_left", []], ["add", "theorem", "sup_lt_of_lt_sdiff_right", []], ["add", "theorem", "sup_sdiff_cancel_right", []], ["del", "theorem", "sup_sdiff_of_le", []]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": []}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": []}]}, {"timestamp": 1636045903, "sha": "cf2ff033", "message": "feat(group_theory/sylow): Sylow subgroups are nontrivial! (#10144)\nThese lemmas (finally!) connect the work of @ChrisHughes24 with the recent definition of Sylow subgroups, to show that Sylow subgroups are actually nontrivial!", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "dvd_card_of_dvd_card", ["sylow"]], ["add", "theorem", "ne_bot_of_dvd_card", ["sylow"]], ["add", "theorem", "pow_dvd_card_of_pow_dvd_card", ["sylow"]]]}]}, {"timestamp": 1636045902, "sha": "52cd4453", "message": "refactor(data/set/pairwise): Indexed sets as arguments to `set.pairwise_disjoint` (#9898)\nThis will allow to express the bind operation: you can't currently express that the pairwise disjoint union of pairwise disjoint sets pairwise disjoint. Here's the corresponding statement with `finset.sup_indep` (defined in #9867):\n```lean\nlemma sup_indep.sup {s : finset ι'} {g : ι' → finset ι} {f : ι → α}\n (hs : s.sup_indep (λ i, (g i).sup f)) (hg : ∀ i' ∈ s, (g i').sup_indep f) :\n (s.sup g).sup_indep f :=\n```\nYou currently can't do `set.pairwise_disjoint s (λ i, ⋃ x ∈ g i, f x)`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_bUnion", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["mod", "theorem", "bUnion_diff_bUnion_eq", ["set"]], ["add", "theorem", "pairwise_disjoint_image", ["set", "inj_on"]], ["mod", "theorem", "elim'", ["set", "pairwise_disjoint"]], ["mod", "theorem", "elim", ["set", "pairwise_disjoint"]], ["mod", "theorem", "elim_set", ["set", "pairwise_disjoint"]], ["mod", "theorem", "image_of_le", ["set", "pairwise_disjoint"]], ["mod", "theorem", "insert", ["set", "pairwise_disjoint"]], ["add", "theorem", "mono", ["set", "pairwise_disjoint"]], ["add", "theorem", "mono_on", ["set", "pairwise_disjoint"]], ["mod", "theorem", "range", ["set", "pairwise_disjoint"]], ["mod", "theorem", "subset", ["set", "pairwise_disjoint"]], ["add", "theorem", "union", ["set", "pairwise_disjoint"]], ["mod", "def", "pairwise_disjoint", ["set"]], ["add", "theorem", "pairwise_disjoint_Union", ["set"]], ["mod", "theorem", "pairwise_disjoint_empty", ["set"]], ["mod", "theorem", "pairwise_disjoint_fiber", ["set"]], ["mod", "theorem", "pairwise_disjoint_insert", ["set"]], ["del", "theorem", "pairwise_disjoint_on_mono", ["set"]], ["mod", "theorem", "pairwise_disjoint_range_singleton", ["set"]], ["add", "theorem", "pairwise_disjoint_sUnion", ["set"]], ["mod", "theorem", "pairwise_disjoint_singleton", ["set"]], ["add", "theorem", "pairwise_disjoint_union", ["set"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "countable_of_is_open", ["set", "pairwise_disjoint"]], ["add", "theorem", "countable_of_nonempty_interior", ["set", "pairwise_disjoint"]], ["del", "theorem", "countable_of_is_open_of_disjoint", ["topological_space"]], ["del", "theorem", "countable_of_nonempty_interior_of_disjoint", ["topological_space"]]]}]}, {"timestamp": 1636039776, "sha": "5187a427", "message": "feat(linear_algebra/affine_space/affine_map): decomposition of an affine map between modules as an equiv (#10162)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "smul_linear", ["affine_map"]], ["add", "def", "to_const_prod_linear_map", ["affine_map"]]]}]}, {"timestamp": 1636039774, "sha": "22ec295c", "message": "chore(data/set): lemmas about `disjoint` (#10148)", "changes": [{"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": [["add", "theorem", "Ici_disjoint_Iic", ["set"]], ["add", "theorem", "Iic_disjoint_Ici", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_image_of_injective", ["set"]], ["add", "theorem", "disjoint_preimage", ["set"]]]}]}, {"timestamp": 1636039773, "sha": "69189d44", "message": "split(data/finset/prod): split off `data.finset.basic` (#10142)\nKilling the giants. This moves `finset.product`, `finset.diag`, `finset.off_diag` to their own file, the theme being \"finsets on `α × β`\".\nThe copyright header now credits:\n* Johannes Hölzl for ba95269a65a77c8ab5eae075f842fdad0c0a7aaf\n* Mario Carneiro\n* Oliver Nash for #4502", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "theorem", "card_product", ["finset"]], ["del", "def", "diag", ["finset"]], ["del", "theorem", "diag_card", ["finset"]], ["del", "theorem", "diag_empty", ["finset"]], ["del", "theorem", "empty_product", ["finset"]], ["del", "theorem", "filter_product", ["finset"]], ["del", "theorem", "filter_product_card", ["finset"]], ["del", "theorem", "mem_diag", ["finset"]], ["del", "theorem", "mem_off_diag", ["finset"]], ["del", "theorem", "mem_product", ["finset"]], ["del", "def", "off_diag", ["finset"]], ["del", "theorem", "off_diag_card", ["finset"]], ["del", "theorem", "off_diag_empty", ["finset"]], ["del", "theorem", "product_bUnion", ["finset"]], ["del", "theorem", "product_empty", ["finset"]], ["del", "theorem", "product_eq_bUnion", ["finset"]], ["del", "theorem", "product_subset_product", ["finset"]], ["del", "theorem", "product_subset_product_left", ["finset"]], ["del", "theorem", "product_subset_product_right", ["finset"]], ["del", "theorem", "product_val", ["finset"]], ["del", "theorem", "subset_product", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/prod.lean", "changes": [["add", "theorem", "card_product", ["finset"]], ["add", "def", "diag", ["finset"]], ["add", "theorem", "diag_card", ["finset"]], ["add", "theorem", "diag_empty", ["finset"]], ["add", "theorem", "empty_product", ["finset"]], ["add", "theorem", "filter_product", ["finset"]], ["add", "theorem", "filter_product_card", ["finset"]], ["add", "theorem", "mem_diag", ["finset"]], ["add", "theorem", "mem_off_diag", ["finset"]], ["add", "theorem", "mem_product", ["finset"]], ["add", "def", "off_diag", ["finset"]], ["add", "theorem", "off_diag_card", ["finset"]], ["add", "theorem", "off_diag_empty", ["finset"]], ["add", "theorem", "product_bUnion", ["finset"]], ["add", "theorem", "product_empty", ["finset"]], ["add", "theorem", "product_eq_bUnion", ["finset"]], ["add", "theorem", "product_subset_product", ["finset"]], ["add", "theorem", "product_subset_product_left", ["finset"]], ["add", "theorem", "product_subset_product_right", ["finset"]], ["add", "theorem", "product_val", ["finset"]], ["add", "theorem", "subset_product", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1636031094, "sha": "de79226c", "message": "feat(ring_theory/polynomial/basic): `polynomial.ker_map_ring_hom` and `mv_polynomial.ker_map` (#10160)", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "ker_map", ["mv_polynomial"]], ["add", "theorem", "ker_map_ring_hom", ["polynomial"]]]}]}, {"timestamp": 1636031093, "sha": "2129d053", "message": "chore(measure_theory/function/special_functions): import inner_product_space.basic instead of inner_product_space.calculus (#10159)\nRight now this changes almost nothing because other imports like `analysis.special_functions.pow` depend on calculus, but I am changing that in other PRs. `measure_theory/function/special_functions` will soon not depend on calculus at all.", "changes": [{"oldPath": "src/measure_theory/function/special_functions.lean", "newPath": "src/measure_theory/function/special_functions.lean", "changes": []}]}, {"timestamp": 1636031091, "sha": "b8908367", "message": "chore(analysis/calculus/times_cont_diff): rename `linear_isometry_map.times_cont_diff`; drop `_map` (#10155)\nI think the old name is a typo; the new name enables dot notation.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff", ["linear_isometry"]], ["del", "theorem", "times_cont_diff", ["linear_isometry_map"]]]}]}, {"timestamp": 1636031090, "sha": "3cbe0feb", "message": "feat(linear_algebra/matrix/nonsingular_inverse): determinant of inverse is inverse of determinant (#10038)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "inv_pow_sub", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "ring_inverse", ["is_unit"]], ["add", "theorem", "is_unit_ring_inverse", []]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "conj_transpose_nonsing_inv", ["matrix"]], ["add", "theorem", "det_nonsing_inv", ["matrix"]], ["add", "theorem", "det_nonsing_inv_mul_det", ["matrix"]], ["mod", "theorem", "is_unit_nonsing_inv_det_iff", ["matrix"]], ["del", "theorem", "nonsing_inv_det", ["matrix"]], ["add", "theorem", "nonsing_inv_eq_ring_inverse", ["matrix"]]]}]}, {"timestamp": 1636031088, "sha": "17afc5c0", "message": "feat(topology/algebra/group_with_zero): continuity lemma for division (#9959)\n* This even applies when dividing by `0`.\n* From the sphere eversion project.\n* This PR mentions `filter.tendsto_prod_top_iff` which is added by #9958", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "prod_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["add", "theorem", "comp_div_cases", ["continuous"]], ["add", "theorem", "comp_div_cases", ["continuous_at"]]]}]}, {"timestamp": 1636025056, "sha": "211bdff0", "message": "feat(data/nat/choose/basic): add some inequalities showing that choose is monotonic in the first argument (#10102)\nFrom flt-regular", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "theorem", "choose_le_add", ["nat"]], ["add", "theorem", "choose_le_choose", ["nat"]], ["add", "theorem", "choose_le_succ", ["nat"]], ["add", "theorem", "choose_mono", ["nat"]]]}]}, {"timestamp": 1636025054, "sha": "1f0d878c", "message": "feat(data/list): standardize list prefixes and suffixes (#10052)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "drop_sublist", ["list"]], ["add", "theorem", "drop_subset", ["list"]], ["add", "theorem", "init_prefix", ["list"]], ["add", "theorem", "init_sublist", ["list"]], ["add", "theorem", "init_subset", ["list"]], ["mod", "theorem", "mem_of_mem_drop", ["list"]], ["add", "theorem", "mem_of_mem_init", ["list"]], ["mod", "theorem", "mem_of_mem_tail", ["list"]], ["add", "theorem", "mem_of_mem_take", ["list"]], ["mod", "theorem", "tail_sublist", ["list"]], ["add", "theorem", "take_sublist", ["list"]], ["add", "theorem", "take_subset", ["list"]]]}]}, {"timestamp": 1636025053, "sha": "4c0b6ada", "message": "feat(topology/homotopy/basic): add `homotopic` for `continuous_map`s. (#9865)", "changes": [{"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": [["add", "theorem", "equivalence", ["continuous_map", "homotopic"]], ["add", "theorem", "hcomp", ["continuous_map", "homotopic"]], ["add", "theorem", "refl", ["continuous_map", "homotopic"]], ["add", "theorem", "symm", ["continuous_map", "homotopic"]], ["add", "theorem", "trans", ["continuous_map", "homotopic"]], ["add", "def", "homotopic", ["continuous_map"]], ["add", "theorem", "equivalence", ["continuous_map", "homotopic_rel"]], ["add", "theorem", "refl", ["continuous_map", "homotopic_rel"]], ["add", "theorem", "symm", ["continuous_map", "homotopic_rel"]], ["add", "theorem", "trans", ["continuous_map", "homotopic_rel"]], ["add", "def", "homotopic_rel", ["continuous_map"]], ["add", "theorem", "refl", ["continuous_map", "homotopic_with"]], ["add", "theorem", "symm", ["continuous_map", "homotopic_with"]], ["add", "theorem", "trans", ["continuous_map", "homotopic_with"]], ["add", "def", "homotopic_with", ["continuous_map"]], ["add", "def", "hcomp", ["continuous_map", "homotopy"]]]}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": []}]}, {"timestamp": 1636019032, "sha": "d219e6bb", "message": "chore(data/equiv/mul_add): DRY (#10150)\nuse `units.mul_left`/`units.mul_right` to define\n`equiv.mul_left₀`/`equiv.mul_right₀`.", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}]}, {"timestamp": 1636019031, "sha": "76ba1b64", "message": "chore(ring_theory/finiteness): make `finite_presentation.{quotient,mv_polynomial}` protected (#10091)\nThis lets us clean up some `_root_`s\nThis also golfs a proof", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["del", "theorem", "mv_polynomial", ["algebra", "finite_presentation"]], ["del", "theorem", "quotient", ["algebra", "finite_presentation"]]]}]}, {"timestamp": 1636012587, "sha": "8658f40c", "message": "feat(algebra/group_power/order): Sign of an odd/even power without linearity (#10122)\nThis proves that `a < 0 → 0 < a ^ bit0 n` and `a < 0 → a ^ bit1 n < 0` in an `ordered_semiring`.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "strict_mono_pow", ["odd"]], ["mod", "theorem", "one_add_mul_le_pow'", []], ["mod", "theorem", "pow_le_of_le_one", []], ["mod", "theorem", "pow_le_pow_of_le_one", []], ["mod", "theorem", "pow_lt_pow_iff_of_lt_one", []], ["mod", "theorem", "pow_lt_pow_of_lt_one", []], ["mod", "theorem", "sq_le", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["mod", "theorem", "one_le_pow_of_one_le", []], ["mod", "theorem", "one_lt_pow", []], ["mod", "theorem", "pow_add_pow_le", []], ["add", "theorem", "pow_bit0_pos_of_neg", []], ["add", "theorem", "pow_bit1_neg", []], ["mod", "theorem", "pow_le_one", []], ["mod", "theorem", "pow_le_pow", []], ["mod", "theorem", "pow_lt_one", []], ["mod", "theorem", "pow_lt_pow", []], ["mod", "theorem", "pow_lt_pow_iff", []], ["mod", "theorem", "pow_lt_pow_of_lt_left", []], ["mod", "theorem", "pow_mono", []], ["mod", "theorem", "pow_nonneg", []], ["mod", "theorem", "pow_pos", []], ["add", "theorem", "sq_pos_of_neg", []], ["add", "theorem", "sq_pos_of_pos", []], ["mod", "theorem", "strict_mono_on_pow", []], ["mod", "theorem", "strict_mono_pow", []]]}]}, {"timestamp": 1635993387, "sha": "4770a6a7", "message": "chore(scripts): update nolints.txt (#10146)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1635984953, "sha": "0fac0807", "message": "refactor(analysis/calculus/mean_value): Remove useless hypotheses (#10129)\nBecause the junk value of `deriv` is `0`, assuming `∀ x, 0 < deriv f x` implies that `f` is derivable. We thus remove all those redundant derivability assumptions.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "differentiable_at_of_deriv_ne_zero", []], ["add", "theorem", "differentiable_within_at_of_deriv_within_ne_zero", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["mod", "theorem", "strict_anti_of_deriv_neg", []], ["mod", "theorem", "strict_mono_of_deriv_pos", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric/deriv.lean", "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": []}]}, {"timestamp": 1635977414, "sha": "fed57b54", "message": "refactor(algebra/direct_sum): rework internally-graded objects (#10127)\nThis is a replacement for the `graded_ring.core` typeclass in #10115, which is called `set_like.graded_monoid` here. The advantage of this approach is that we can use the same typeclass for graded semirings, graded rings, and graded algebras.\nLargely, this change replaces a bunch of `def`s with `instances`, by bundling up the arguments to those defs to a new typeclass. This seems to make life easier for the few global `gmonoid` instance we already provide for direct sums of submodules, suggesting this API change is a useful one.\nIn principle the new `[set_like.graded_monoid A]` typeclass is useless, as the same effect can be achieved with `[set_like.has_graded_one A] [set_like.has_graded_mul A]`; pragmatically though this is painfully verbose, and probably results in larger term sizes. We can always remove it later if it causes problems.", "changes": [{"oldPath": "src/algebra/direct_sum/algebra.lean", "newPath": "src/algebra/direct_sum/algebra.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/direct_sum/internal.lean", "changes": [["add", "def", "subgroup_coe_ring_hom", ["direct_sum"]], ["add", "theorem", "subgroup_coe_ring_hom_of", ["direct_sum"]], ["add", "def", "submodule_coe_alg_hom", ["direct_sum"]], ["add", "theorem", "submodule_coe_alg_hom_of", ["direct_sum"]], ["add", "def", "submonoid_coe_ring_hom", ["direct_sum"]], ["add", "theorem", "submonoid_coe_ring_hom_of", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["del", "def", "of_add_subgroups", ["direct_sum", "gcomm_semiring"]], ["del", "def", "of_add_submonoids", ["direct_sum", "gcomm_semiring"]], ["del", "def", "of_submodules", ["direct_sum", "gcomm_semiring"]], ["del", "def", "of_add_subgroups", ["direct_sum", "gsemiring"]], ["del", "def", "of_add_submonoids", ["direct_sum", "gsemiring"]], ["del", "def", "of_submodules", ["direct_sum", "gsemiring"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["del", "def", "of_subobjects", ["graded_monoid", "gcomm_monoid"]], ["del", "def", "of_subobjects", ["graded_monoid", "ghas_mul"]], ["del", "def", "of_subobjects", ["graded_monoid", "ghas_one"]], ["del", "def", "of_subobjects", ["graded_monoid", "gmonoid"]]]}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}]}, {"timestamp": 1635969644, "sha": "6433c1c6", "message": "feat(group_theory/sylow): Sylow subgroups are isomorphic (#10059)\nConstructs `sylow.mul_equiv`.", "changes": [{"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "def", "equiv_smul", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "def", "equiv_smul", ["sylow"]]]}]}, {"timestamp": 1635969642, "sha": "5541b256", "message": "refactor(group_theory/complement): Introduce abbreviation for subgroups (#10009)\nIntroduces abbreviation for `is_complement (H : set G) (K : set G)`.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "card_mul", ["subgroup", "is_complement'"]], ["add", "theorem", "disjoint", ["subgroup", "is_complement'"]], ["add", "theorem", "symm", ["subgroup", "is_complement'"]], ["add", "def", "is_complement'", ["subgroup"]], ["add", "theorem", "is_complement'_comm", ["subgroup"]], ["add", "theorem", "is_complement'_def", ["subgroup"]], ["add", "theorem", "is_complement'_iff_card_mul_and_disjoint", ["subgroup"]], ["add", "theorem", "is_complement'_of_card_mul_and_disjoint", ["subgroup"]], ["add", "theorem", "is_complement'_of_coprime", ["subgroup"]], ["del", "theorem", "card_mul", ["subgroup", "is_complement"]], ["del", "theorem", "disjoint", ["subgroup", "is_complement"]], ["del", "theorem", "symm", ["subgroup", "is_complement"]], ["del", "theorem", "is_complement_comm", ["subgroup"]], ["del", "theorem", "is_complement_iff_card_mul_and_disjoint", ["subgroup"]], ["del", "theorem", "is_complement_of_card_mul_and_disjoint", ["subgroup"]], ["del", "theorem", "is_complement_of_coprime", ["subgroup"]]]}, {"oldPath": "src/group_theory/schur_zassenhaus.lean", "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": [["add", "theorem", "exists_left_complement'_of_coprime", ["subgroup"]], ["del", "theorem", "exists_left_complement_of_coprime", ["subgroup"]], ["add", "theorem", "exists_right_complement'_of_coprime", ["subgroup"]], ["del", "theorem", "exists_right_complement_of_coprime", ["subgroup"]], ["add", "theorem", "is_complement'_stabilizer_of_coprime", ["subgroup"]], ["del", "theorem", "is_complement_stabilizer_of_coprime", ["subgroup"]]]}]}, {"timestamp": 1635962203, "sha": "3a0b0d1d", "message": "chore(order/lattice): add `exists_lt_of_sup/inf` (#10133)", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "exists_lt_of_inf", []], ["add", "theorem", "exists_lt_of_sup", []]]}]}, {"timestamp": 1635962202, "sha": "8f7ffec9", "message": "chore(analysis/special_functions/trigonometric/inverse): move results about derivatives to a new file (#10110)\nThis is part of a refactor of the `analysis/special_functions` folder, in which I will isolate all lemmas about derivatives. The result will be a definition of Lp spaces that does not import derivatives.", "changes": [{"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": [["del", "theorem", "deriv_arccos", ["real"]], ["del", "theorem", "deriv_arcsin", ["real"]], ["del", "theorem", "deriv_arcsin_aux", ["real"]], ["del", "theorem", "differentiable_at_arccos", ["real"]], ["del", "theorem", "differentiable_at_arcsin", ["real"]], ["del", "theorem", "differentiable_on_arccos", ["real"]], ["del", "theorem", "differentiable_on_arcsin", ["real"]], ["del", "theorem", "differentiable_within_at_arccos_Ici", ["real"]], ["del", "theorem", "differentiable_within_at_arccos_Iic", ["real"]], ["del", "theorem", "differentiable_within_at_arcsin_Ici", ["real"]], ["del", "theorem", "differentiable_within_at_arcsin_Iic", ["real"]], ["del", "theorem", "has_deriv_at_arccos", ["real"]], ["del", "theorem", "has_deriv_at_arcsin", ["real"]], ["del", "theorem", "has_deriv_within_at_arccos_Ici", ["real"]], ["del", "theorem", "has_deriv_within_at_arccos_Iic", ["real"]], ["del", "theorem", "has_deriv_within_at_arcsin_Ici", ["real"]], ["del", "theorem", "has_deriv_within_at_arcsin_Iic", ["real"]], ["del", "theorem", "has_strict_deriv_at_arccos", ["real"]], ["del", "theorem", "has_strict_deriv_at_arcsin", ["real"]], ["del", "theorem", "times_cont_diff_at_arccos", ["real"]], ["del", "theorem", "times_cont_diff_at_arccos_iff", ["real"]], ["del", "theorem", "times_cont_diff_at_arcsin", ["real"]], ["del", "theorem", "times_cont_diff_at_arcsin_iff", ["real"]], ["del", "theorem", "times_cont_diff_on_arccos", ["real"]], ["del", "theorem", "times_cont_diff_on_arcsin", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/inverse_deriv.lean", "changes": [["add", "theorem", "deriv_arccos", ["real"]], ["add", "theorem", "deriv_arcsin", ["real"]], ["add", "theorem", "deriv_arcsin_aux", ["real"]], ["add", "theorem", "differentiable_at_arccos", ["real"]], ["add", "theorem", "differentiable_at_arcsin", ["real"]], ["add", "theorem", "differentiable_on_arccos", ["real"]], ["add", "theorem", "differentiable_on_arcsin", ["real"]], ["add", "theorem", "differentiable_within_at_arccos_Ici", ["real"]], ["add", "theorem", "differentiable_within_at_arccos_Iic", ["real"]], ["add", "theorem", "differentiable_within_at_arcsin_Ici", ["real"]], ["add", "theorem", "differentiable_within_at_arcsin_Iic", ["real"]], ["add", "theorem", "has_deriv_at_arccos", ["real"]], ["add", "theorem", "has_deriv_at_arcsin", ["real"]], ["add", "theorem", "has_deriv_within_at_arccos_Ici", ["real"]], ["add", "theorem", "has_deriv_within_at_arccos_Iic", ["real"]], ["add", "theorem", "has_deriv_within_at_arcsin_Ici", ["real"]], ["add", "theorem", "has_deriv_within_at_arcsin_Iic", ["real"]], ["add", "theorem", "has_strict_deriv_at_arccos", ["real"]], ["add", "theorem", "has_strict_deriv_at_arcsin", ["real"]], ["add", "theorem", "times_cont_diff_at_arccos", ["real"]], ["add", "theorem", "times_cont_diff_at_arccos_iff", ["real"]], ["add", "theorem", "times_cont_diff_at_arcsin", ["real"]], ["add", "theorem", "times_cont_diff_at_arcsin_iff", ["real"]], ["add", "theorem", "times_cont_diff_on_arccos", ["real"]], ["add", "theorem", "times_cont_diff_on_arcsin", ["real"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "conj_bit0", ["complex"]], ["mod", "theorem", "conj_bit1", ["complex"]], ["mod", "theorem", "conj_of_real", ["complex"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1635962201, "sha": "00a1022f", "message": "chore(logic/relation): rename to permit dot notation (#10105)", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/M.lean", "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "eqv_gen_eq", ["equivalence"]], ["add", "theorem", "eqv_gen_iff", ["equivalence"]], ["add", "theorem", "mono", ["eqv_gen"]], ["del", "theorem", "eqv_gen_eq_of_equivalence", ["relation"]], ["del", "theorem", "eqv_gen_iff_of_equivalence", ["relation"]], ["del", "theorem", "eqv_gen_mono", ["relation"]], ["add", "theorem", "lift'", ["relation", "refl_trans_gen"]], ["add", "theorem", "lift", ["relation", "refl_trans_gen"]], ["add", "theorem", "mono", ["relation", "refl_trans_gen"]], ["del", "theorem", "refl_trans_gen_lift'", ["relation"]], ["del", "theorem", "refl_trans_gen_lift", ["relation"]], ["del", "theorem", "refl_trans_gen_mono", ["relation"]], ["add", "theorem", "closed", ["relation", "trans_gen"]], ["add", "theorem", "lift'", ["relation", "trans_gen"]], ["add", "theorem", "lift", ["relation", "trans_gen"]], ["del", "theorem", "trans_gen_closed", ["relation", "trans_gen"]], ["del", "theorem", "trans_gen_eq_self", ["relation", "trans_gen"]], ["del", "theorem", "trans_gen_idem", ["relation", "trans_gen"]], ["del", "theorem", "trans_gen_lift'", ["relation", "trans_gen"]], ["del", "theorem", "trans_gen_lift", ["relation", "trans_gen"]], ["del", "theorem", "transitive_trans_gen", ["relation", "trans_gen"]], ["add", "theorem", "trans_gen_eq_self", ["relation"]], ["add", "theorem", "trans_gen_idem", ["relation"]], ["add", "theorem", "transitive_trans_gen", ["relation"]]]}, {"oldPath": "test/qpf.lean", "newPath": "test/qpf.lean", "changes": []}]}, {"timestamp": 1635962200, "sha": "6993e6f8", "message": "feat(measure_theory/constructions/borel_space): decomposing the measure of a set into slices (#10096)\nAlso add the fact that `μ (to_measurable μ t ∩ s) = μ (t ∩ s)`, and useful variations around this fact.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "measure_eq_measure_preimage_add_measure_tsum_Ico_zpow", []]]}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "coe_nnreal_smul_apply", ["measure_theory", "measure"]], ["add", "theorem", "measure_eq_left_of_subset_of_measure_add_eq", ["measure_theory", "measure"]], ["add", "theorem", "measure_eq_right_of_subset_of_measure_add_eq", ["measure_theory", "measure"]], ["add", "theorem", "measure_inter_eq_of_measure_eq", ["measure_theory", "measure"]], ["add", "theorem", "measure_to_measurable_add_inter_left", ["measure_theory", "measure"]], ["add", "theorem", "measure_to_measurable_add_inter_right", ["measure_theory", "measure"]], ["add", "theorem", "measure_to_measurable_inter", ["measure_theory", "measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": [["add", "theorem", "exists_is_open_le_add", ["set"]]]}]}, {"timestamp": 1635962198, "sha": "b51f18f7", "message": "feat(topology): properties about intervals and paths (#9914)\n* From the sphere eversion project\n* Properties about paths, the interval, and `proj_Icc`", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": []}, {"oldPath": "src/data/set/intervals/proj_Icc.lean", "newPath": "src/data/set/intervals/proj_Icc.lean", "changes": [["add", "theorem", "proj_Icc_eq_left", ["set"]], ["add", "theorem", "proj_Icc_eq_right", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered/proj_Icc.lean", "newPath": "src/topology/algebra/ordered/proj_Icc.lean", "changes": [["add", "theorem", "Icc_extend'", ["continuous"]], ["mod", "theorem", "Icc_extend", ["continuous"]], ["add", "theorem", "Icc_extend", ["continuous_at"]], ["add", "theorem", "Icc_extend", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "path_extend", ["continuous"]], ["add", "theorem", "path_extend", ["continuous_at"]], ["add", "theorem", "path_extend", ["filter", "tendsto"]], ["mod", "theorem", "refl_range", ["path"]], ["mod", "theorem", "refl_symm", ["path"]], ["mod", "theorem", "symm_range", ["path"]]]}, {"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": [["add", "theorem", "proj_Icc_eq_one", []], ["add", "theorem", "proj_Icc_eq_zero", []], ["add", "theorem", "coe_eq_one", ["unit_interval"]], ["add", "theorem", "coe_eq_zero", ["unit_interval"]], ["add", "theorem", "coe_mul", ["unit_interval"]], ["add", "theorem", "coe_ne_one", ["unit_interval"]], ["add", "theorem", "coe_ne_zero", ["unit_interval"]], ["add", "theorem", "le_one'", ["unit_interval"]], ["add", "theorem", "mul_le_left", ["unit_interval"]], ["add", "theorem", "mul_le_right", ["unit_interval"]], ["add", "theorem", "mul_mem", ["unit_interval"]], ["add", "theorem", "nonneg'", ["unit_interval"]]]}]}, {"timestamp": 1635958442, "sha": "8d52be4a", "message": "feat(measure_theory/function/ae_measurable_order): an ae measurability criterion for ennreal-valued functions (#10072)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/function/ae_measurable_order.lean", "changes": [["add", "theorem", "ae_measurable_of_exist_almost_disjoint_supersets", ["ennreal"]], ["add", "theorem", "ae_measurable_of_exist_almost_disjoint_supersets", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "dense_iff_forall_lt_exists_mem", []], ["add", "theorem", "exists_Ioo_subset", ["is_open"]]]}]}, {"timestamp": 1635955804, "sha": "4f033b7d", "message": "feat(analysis/seminorm): define the Minkowski functional (#9097)\nThis defines the gauge of a set, aka the Minkowski functional, in a vector space over a real normed field.", "changes": [{"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": [["add", "theorem", "gauge_set_nonempty", ["absorbent"]], ["add", "theorem", "subset", ["absorbent"]], ["mod", "def", "absorbent", []], ["mod", "theorem", "absorbent_iff_forall_absorbs_singleton", []], ["add", "theorem", "absorbent_iff_nonneg_lt", []], ["mod", "def", "absorbs", []], ["add", "theorem", "smul_eq", ["balanced"]], ["add", "theorem", "subset_smul", ["balanced"]], ["add", "theorem", "gauge_le_one", ["convex"]], ["add", "theorem", "exists_lt_of_gauge_lt", []], ["add", "def", "gauge", []], ["add", "theorem", "gauge_add_le", []], ["add", "theorem", "gauge_def'", []], ["add", "theorem", "gauge_def", []], ["add", "theorem", "gauge_le_of_mem", []], ["add", "theorem", "gauge_le_one_eq'", []], ["add", "theorem", "gauge_le_one_eq", []], ["add", "theorem", "gauge_le_one_of_mem", []], ["add", "theorem", "gauge_lt_one_eq'", []], ["add", "theorem", "gauge_lt_one_eq", []], ["add", "theorem", "gauge_lt_one_eq_self_of_open", []], ["add", "theorem", "gauge_lt_one_of_mem_of_open", []], ["add", "theorem", "gauge_lt_one_subset_self", []], ["add", "theorem", "gauge_neg", []], ["add", "theorem", "gauge_nonneg", []], ["add", "def", "gauge_seminorm", []], ["add", "theorem", "gauge_smul", []], ["add", "theorem", "gauge_smul_of_nonneg", []], ["add", "theorem", "gauge_zero", []], ["add", "theorem", "interior_subset_gauge_lt_one", []], ["add", "theorem", "one_le_gauge_of_not_mem", []], ["add", "theorem", "self_subset_gauge_le_one", []], ["add", "theorem", "absorbent_ball", ["seminorm"]], ["add", "theorem", "absorbent_ball_zero", ["seminorm"]], ["add", "theorem", "convex_ball", ["seminorm"]], ["add", "theorem", "ext", ["seminorm"]], ["add", "theorem", "gauge_ball", ["seminorm"]], ["add", "theorem", "gauge_seminorm_ball", ["seminorm"]], ["add", "theorem", "symmetric_ball_zero", ["seminorm"]]]}]}, {"timestamp": 1635950395, "sha": "95cdebac", "message": "doc(linear_algebra): fix wrong docstring (#10139)", "changes": [{"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}]}, {"timestamp": 1635950393, "sha": "2b87435a", "message": "feat(ring_theory/trace): remove a useless assumption (#10138)\nWe remove an assumption that is always true.", "changes": [{"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1635950392, "sha": "93cec259", "message": "chore(*): replace `exact calc` by `calc` (#10137)\nThis PR is the result of a sed script that replaces\n* `exact calc` by `calc`\n* `refine calc` by `calc`", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1635946553, "sha": "eaf2a16b", "message": "fix(scripts/lint-style.py): typo in error reporting (#10135)", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}]}, {"timestamp": 1635946552, "sha": "1e7f3ca6", "message": "feat(data/zmod/basic): add nat_coe_eq_nat_coe_iff' (#10128)\nTo match the int version, from flt-regular", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "nat_coe_eq_nat_coe_iff'", ["zmod"]]]}]}, {"timestamp": 1635930093, "sha": "e5c66a09", "message": "chore(topology/continuous_function/bounded): add `comp_continuous` (#10134)", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "def", "comp_continuous", ["bounded_continuous_function"]], ["add", "def", "restrict", ["bounded_continuous_function"]]]}]}, {"timestamp": 1635924697, "sha": "e5acda42", "message": "chore(order/conditionally_complete_lattice): drop an unneeded `nonempty` assumption (#10132)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "csupr_mem_Inter_Icc_of_antitone_Icc", []], ["mod", "theorem", "csupr_mem_Inter_Icc_of_antitone", ["monotone"]]]}]}, {"timestamp": 1635908165, "sha": "5f2e5270", "message": "chore(scripts): update nolints.txt (#10130)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1635897421, "sha": "123db5e8", "message": "feat(linear_algebra/determinant): basis.det_ne_zero (#10126)\nAdd the trivial lemma that the determinant with respect to a basis is\nnot the zero map (if the ring is nontrivial).", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_ne_zero", ["basis"]]]}]}, {"timestamp": 1635897420, "sha": "86ed02f9", "message": "chore(algebra/order/floor): add a few trivial lemmas (#10120)", "changes": [{"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["mod", "theorem", "ceil_add_one", ["int"]], ["mod", "theorem", "ceil_sub_int", ["int"]], ["add", "theorem", "ceil_sub_one", ["int"]], ["add", "theorem", "fract_add_int", ["int"]], ["add", "theorem", "fract_eq_self", ["int"]], ["add", "theorem", "fract_sub_int", ["int"]], ["add", "theorem", "fract_sub_self", ["int"]], ["add", "theorem", "self_sub_fract", ["int"]]]}]}, {"timestamp": 1635897418, "sha": "1dec85c5", "message": "doc(topology): three module docstrings (#10107)", "changes": [{"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}]}, {"timestamp": 1635890255, "sha": "d49636ec", "message": "doc(topology/open_subgroup): add module docstring (#10111)\nAlso add a lattice instance.", "changes": [{"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}]}, {"timestamp": 1635890254, "sha": "70ed9dce", "message": "chore(analysis/special_functions/trigonometric/basic): move results about derivatives to a new file (#10109)\nThis is part of a refactor of the `analysis/special_functions` folder, in which I will isolate all lemmas about derivatives. The result will be a definition of Lp spaces that does not import derivatives.", "changes": [{"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["del", "theorem", "deriv_cos'", ["complex"]], ["del", "theorem", "deriv_cos", ["complex"]], ["del", "theorem", "deriv_cosh", ["complex"]], ["del", "theorem", "deriv_sin", ["complex"]], ["del", "theorem", "deriv_sinh", ["complex"]], ["del", "theorem", "differentiable_at_cos", ["complex"]], ["del", "theorem", "differentiable_at_cosh", ["complex"]], ["del", "theorem", "differentiable_at_sin", ["complex"]], ["del", "theorem", "differentiable_at_sinh", ["complex"]], ["del", "theorem", "differentiable_cos", ["complex"]], ["del", "theorem", "differentiable_cosh", ["complex"]], ["del", "theorem", "differentiable_sin", ["complex"]], ["del", "theorem", "differentiable_sinh", ["complex"]], ["del", "theorem", "has_deriv_at_cos", ["complex"]], ["del", "theorem", "has_deriv_at_cosh", ["complex"]], ["del", "theorem", "has_deriv_at_sin", ["complex"]], ["del", "theorem", "has_deriv_at_sinh", ["complex"]], ["del", "theorem", "has_strict_deriv_at_cos", ["complex"]], ["del", "theorem", "has_strict_deriv_at_cosh", ["complex"]], ["del", "theorem", "has_strict_deriv_at_sin", ["complex"]], ["del", "theorem", "has_strict_deriv_at_sinh", ["complex"]], ["del", "theorem", "times_cont_diff_cos", ["complex"]], ["del", "theorem", "times_cont_diff_cosh", ["complex"]], ["del", "theorem", "times_cont_diff_sin", ["complex"]], ["del", "theorem", "times_cont_diff_sinh", ["complex"]], ["del", "theorem", "deriv_ccos", []], ["del", "theorem", "deriv_ccosh", []], ["del", "theorem", "deriv_cos", []], ["del", "theorem", "deriv_cosh", []], ["del", "theorem", "deriv_csin", []], ["del", "theorem", "deriv_csinh", []], ["del", "theorem", "deriv_sin", []], ["del", "theorem", "deriv_sinh", []], ["del", "theorem", "deriv_within_ccos", []], ["del", "theorem", "deriv_within_ccosh", []], ["del", "theorem", "deriv_within_cos", []], ["del", "theorem", "deriv_within_cosh", []], ["del", "theorem", "deriv_within_csin", []], ["del", "theorem", "deriv_within_csinh", []], ["del", "theorem", "deriv_within_sin", []], ["del", "theorem", "deriv_within_sinh", []], ["del", "theorem", "ccos", ["differentiable"]], ["del", "theorem", "ccosh", ["differentiable"]], ["del", "theorem", "cos", ["differentiable"]], ["del", "theorem", "cosh", ["differentiable"]], ["del", "theorem", "csin", ["differentiable"]], ["del", "theorem", "csinh", ["differentiable"]], ["del", "theorem", "sin", ["differentiable"]], ["del", "theorem", "sinh", ["differentiable"]], ["del", "theorem", "ccos", ["differentiable_at"]], ["del", "theorem", "ccosh", ["differentiable_at"]], ["del", "theorem", "cos", ["differentiable_at"]], ["del", "theorem", "cosh", ["differentiable_at"]], ["del", "theorem", "csin", ["differentiable_at"]], ["del", "theorem", "csinh", ["differentiable_at"]], ["del", "theorem", "sin", ["differentiable_at"]], ["del", "theorem", "sinh", ["differentiable_at"]], ["del", "theorem", "ccos", ["differentiable_on"]], ["del", "theorem", "ccosh", ["differentiable_on"]], ["del", "theorem", "cos", ["differentiable_on"]], ["del", "theorem", "cosh", ["differentiable_on"]], ["del", "theorem", "csin", ["differentiable_on"]], ["del", "theorem", "csinh", ["differentiable_on"]], ["del", "theorem", "sin", ["differentiable_on"]], ["del", "theorem", "sinh", ["differentiable_on"]], ["del", "theorem", "ccos", ["differentiable_within_at"]], ["del", "theorem", "ccosh", ["differentiable_within_at"]], ["del", "theorem", "cos", ["differentiable_within_at"]], ["del", "theorem", "cosh", ["differentiable_within_at"]], ["del", "theorem", "csin", ["differentiable_within_at"]], ["del", "theorem", "csinh", ["differentiable_within_at"]], ["del", "theorem", "sin", ["differentiable_within_at"]], ["del", "theorem", "sinh", ["differentiable_within_at"]], ["del", "theorem", "fderiv_ccos", []], ["del", "theorem", "fderiv_ccosh", []], ["del", "theorem", "fderiv_cos", []], ["del", "theorem", "fderiv_cosh", []], ["del", "theorem", "fderiv_csin", []], ["del", "theorem", "fderiv_csinh", []], ["del", "theorem", "fderiv_sin", []], ["del", "theorem", "fderiv_sinh", []], ["del", "theorem", "fderiv_within_ccos", []], ["del", "theorem", "fderiv_within_ccosh", []], ["del", "theorem", "fderiv_within_cos", []], ["del", "theorem", "fderiv_within_cosh", []], ["del", "theorem", "fderiv_within_csin", []], ["del", "theorem", "fderiv_within_csinh", []], ["del", "theorem", "fderiv_within_sin", []], ["del", "theorem", "fderiv_within_sinh", []], ["del", "theorem", "ccos", ["has_deriv_at"]], ["del", "theorem", "ccosh", ["has_deriv_at"]], ["del", "theorem", "cos", ["has_deriv_at"]], ["del", "theorem", "cosh", ["has_deriv_at"]], ["del", "theorem", "csin", ["has_deriv_at"]], ["del", "theorem", "csinh", ["has_deriv_at"]], ["del", "theorem", "sin", ["has_deriv_at"]], ["del", "theorem", "sinh", ["has_deriv_at"]], ["del", "theorem", "ccos", ["has_deriv_within_at"]], ["del", "theorem", "ccosh", ["has_deriv_within_at"]], ["del", "theorem", "cos", ["has_deriv_within_at"]], ["del", "theorem", "cosh", ["has_deriv_within_at"]], ["del", "theorem", "csin", ["has_deriv_within_at"]], ["del", "theorem", "csinh", ["has_deriv_within_at"]], ["del", "theorem", "sin", ["has_deriv_within_at"]], ["del", "theorem", "sinh", ["has_deriv_within_at"]], ["del", "theorem", "ccos", ["has_fderiv_at"]], ["del", "theorem", "ccosh", ["has_fderiv_at"]], ["del", "theorem", "cos", ["has_fderiv_at"]], ["del", "theorem", "cosh", ["has_fderiv_at"]], ["del", "theorem", "csin", ["has_fderiv_at"]], ["del", "theorem", "csinh", ["has_fderiv_at"]], ["del", "theorem", "sin", ["has_fderiv_at"]], ["del", "theorem", "sinh", ["has_fderiv_at"]], ["del", "theorem", "ccos", ["has_fderiv_within_at"]], ["del", "theorem", "ccosh", ["has_fderiv_within_at"]], ["del", "theorem", "cos", ["has_fderiv_within_at"]], ["del", "theorem", "cosh", ["has_fderiv_within_at"]], ["del", "theorem", "csin", ["has_fderiv_within_at"]], ["del", "theorem", "csinh", ["has_fderiv_within_at"]], ["del", "theorem", "sin", ["has_fderiv_within_at"]], ["del", "theorem", "sinh", ["has_fderiv_within_at"]], ["del", "theorem", "ccos", ["has_strict_deriv_at"]], ["del", "theorem", "ccosh", ["has_strict_deriv_at"]], ["del", "theorem", "cos", ["has_strict_deriv_at"]], ["del", "theorem", "cosh", ["has_strict_deriv_at"]], ["del", "theorem", "csin", ["has_strict_deriv_at"]], ["del", "theorem", "csinh", ["has_strict_deriv_at"]], ["del", "theorem", "sin", ["has_strict_deriv_at"]], ["del", "theorem", "sinh", ["has_strict_deriv_at"]], ["del", "theorem", "ccos", ["has_strict_fderiv_at"]], ["del", "theorem", "ccosh", ["has_strict_fderiv_at"]], ["del", "theorem", "cos", ["has_strict_fderiv_at"]], ["del", "theorem", "cosh", ["has_strict_fderiv_at"]], ["del", "theorem", "csin", ["has_strict_fderiv_at"]], ["del", "theorem", "csinh", ["has_strict_fderiv_at"]], ["del", "theorem", "sin", ["has_strict_fderiv_at"]], ["del", "theorem", "sinh", ["has_strict_fderiv_at"]], ["del", "theorem", "deriv_cos'", ["real"]], ["del", "theorem", "deriv_cos", ["real"]], ["del", "theorem", "deriv_cosh", ["real"]], ["del", "theorem", "deriv_sin", ["real"]], ["del", "theorem", "deriv_sinh", ["real"]], ["del", "theorem", "differentiable_at_cos", ["real"]], ["del", "theorem", "differentiable_at_cosh", ["real"]], ["del", "theorem", "differentiable_at_sin", ["real"]], ["del", "theorem", "differentiable_at_sinh", ["real"]], ["del", "theorem", "differentiable_cos", ["real"]], ["del", "theorem", "differentiable_cosh", ["real"]], ["del", "theorem", "differentiable_sin", ["real"]], ["del", "theorem", "differentiable_sinh", ["real"]], ["del", "theorem", "has_deriv_at_cos", ["real"]], ["del", "theorem", "has_deriv_at_cosh", ["real"]], ["del", "theorem", "has_deriv_at_sin", ["real"]], ["del", "theorem", "has_deriv_at_sinh", ["real"]], ["del", "theorem", "has_strict_deriv_at_cos", ["real"]], ["del", "theorem", "has_strict_deriv_at_cosh", ["real"]], ["del", "theorem", "has_strict_deriv_at_sin", ["real"]], ["del", "theorem", "has_strict_deriv_at_sinh", ["real"]], ["del", "theorem", "sinh_strict_mono", ["real"]], ["del", "theorem", "times_cont_diff_cos", ["real"]], ["del", "theorem", "times_cont_diff_cosh", ["real"]], ["del", "theorem", "times_cont_diff_sin", ["real"]], ["del", "theorem", "times_cont_diff_sinh", ["real"]], ["del", "theorem", "ccos", ["times_cont_diff"]], ["del", "theorem", "ccosh", ["times_cont_diff"]], ["del", "theorem", "cos", ["times_cont_diff"]], ["del", "theorem", "cosh", ["times_cont_diff"]], ["del", "theorem", "csin", ["times_cont_diff"]], ["del", "theorem", "csinh", ["times_cont_diff"]], ["del", "theorem", "sin", ["times_cont_diff"]], ["del", "theorem", "sinh", ["times_cont_diff"]], ["del", "theorem", "ccos", ["times_cont_diff_at"]], ["del", "theorem", "ccosh", ["times_cont_diff_at"]], ["del", "theorem", "cos", ["times_cont_diff_at"]], ["del", "theorem", "cosh", ["times_cont_diff_at"]], ["del", "theorem", "csin", ["times_cont_diff_at"]], ["del", "theorem", "csinh", ["times_cont_diff_at"]], ["del", "theorem", "sin", ["times_cont_diff_at"]], ["del", "theorem", "sinh", ["times_cont_diff_at"]], ["del", "theorem", "ccos", ["times_cont_diff_on"]], ["del", "theorem", "ccosh", ["times_cont_diff_on"]], ["del", "theorem", "cos", ["times_cont_diff_on"]], ["del", "theorem", "cosh", ["times_cont_diff_on"]], ["del", "theorem", "csin", ["times_cont_diff_on"]], ["del", "theorem", "csinh", ["times_cont_diff_on"]], ["del", "theorem", "sin", ["times_cont_diff_on"]], ["del", "theorem", "sinh", ["times_cont_diff_on"]], ["del", "theorem", "ccos", ["times_cont_diff_within_at"]], ["del", "theorem", "ccosh", ["times_cont_diff_within_at"]], ["del", "theorem", "cos", ["times_cont_diff_within_at"]], ["del", "theorem", "cosh", ["times_cont_diff_within_at"]], ["del", "theorem", "csin", ["times_cont_diff_within_at"]], ["del", "theorem", "csinh", ["times_cont_diff_within_at"]], ["del", "theorem", "sin", ["times_cont_diff_within_at"]], ["del", "theorem", "sinh", ["times_cont_diff_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/deriv.lean", "changes": [["add", "theorem", "deriv_cos'", ["complex"]], ["add", "theorem", "deriv_cos", ["complex"]], ["add", "theorem", "deriv_cosh", ["complex"]], ["add", "theorem", "deriv_sin", ["complex"]], ["add", "theorem", "deriv_sinh", ["complex"]], ["add", "theorem", "differentiable_at_cos", ["complex"]], ["add", "theorem", "differentiable_at_cosh", ["complex"]], ["add", "theorem", "differentiable_at_sin", ["complex"]], ["add", "theorem", "differentiable_at_sinh", ["complex"]], ["add", "theorem", "differentiable_cos", ["complex"]], ["add", "theorem", "differentiable_cosh", ["complex"]], ["add", "theorem", "differentiable_sin", ["complex"]], ["add", "theorem", "differentiable_sinh", ["complex"]], ["add", "theorem", "has_deriv_at_cos", ["complex"]], ["add", "theorem", "has_deriv_at_cosh", ["complex"]], ["add", "theorem", "has_deriv_at_sin", ["complex"]], ["add", "theorem", "has_deriv_at_sinh", ["complex"]], ["add", "theorem", "has_strict_deriv_at_cos", ["complex"]], ["add", "theorem", "has_strict_deriv_at_cosh", ["complex"]], ["add", "theorem", "has_strict_deriv_at_sin", ["complex"]], ["add", "theorem", "has_strict_deriv_at_sinh", ["complex"]], ["add", "theorem", "times_cont_diff_cos", ["complex"]], ["add", "theorem", "times_cont_diff_cosh", ["complex"]], ["add", "theorem", "times_cont_diff_sin", ["complex"]], ["add", "theorem", "times_cont_diff_sinh", ["complex"]], ["add", "theorem", "deriv_ccos", []], ["add", "theorem", "deriv_ccosh", []], ["add", "theorem", "deriv_cos", []], ["add", "theorem", "deriv_cosh", []], ["add", "theorem", "deriv_csin", []], ["add", "theorem", "deriv_csinh", []], ["add", "theorem", "deriv_sin", []], ["add", "theorem", "deriv_sinh", []], ["add", "theorem", "deriv_within_ccos", []], ["add", "theorem", "deriv_within_ccosh", []], ["add", "theorem", "deriv_within_cos", []], ["add", "theorem", "deriv_within_cosh", []], ["add", "theorem", "deriv_within_csin", []], ["add", "theorem", "deriv_within_csinh", []], ["add", "theorem", "deriv_within_sin", []], ["add", "theorem", "deriv_within_sinh", []], ["add", "theorem", "ccos", ["differentiable"]], ["add", "theorem", "ccosh", ["differentiable"]], ["add", "theorem", "cos", ["differentiable"]], ["add", "theorem", "cosh", ["differentiable"]], ["add", "theorem", "csin", ["differentiable"]], ["add", "theorem", "csinh", ["differentiable"]], ["add", "theorem", "sin", ["differentiable"]], ["add", "theorem", "sinh", ["differentiable"]], ["add", "theorem", "ccos", ["differentiable_at"]], ["add", "theorem", "ccosh", ["differentiable_at"]], ["add", "theorem", "cos", ["differentiable_at"]], ["add", "theorem", "cosh", ["differentiable_at"]], ["add", "theorem", "csin", ["differentiable_at"]], ["add", "theorem", "csinh", ["differentiable_at"]], ["add", "theorem", "sin", ["differentiable_at"]], ["add", "theorem", "sinh", ["differentiable_at"]], ["add", "theorem", "ccos", ["differentiable_on"]], ["add", "theorem", "ccosh", ["differentiable_on"]], ["add", "theorem", "cos", ["differentiable_on"]], ["add", "theorem", "cosh", ["differentiable_on"]], ["add", "theorem", "csin", ["differentiable_on"]], ["add", "theorem", "csinh", ["differentiable_on"]], ["add", "theorem", "sin", ["differentiable_on"]], ["add", "theorem", "sinh", ["differentiable_on"]], ["add", "theorem", "ccos", ["differentiable_within_at"]], ["add", "theorem", "ccosh", ["differentiable_within_at"]], ["add", "theorem", "cos", ["differentiable_within_at"]], ["add", "theorem", "cosh", ["differentiable_within_at"]], ["add", "theorem", "csin", ["differentiable_within_at"]], ["add", "theorem", "csinh", ["differentiable_within_at"]], ["add", "theorem", "sin", ["differentiable_within_at"]], ["add", "theorem", "sinh", ["differentiable_within_at"]], ["add", "theorem", "fderiv_ccos", []], ["add", "theorem", "fderiv_ccosh", []], ["add", "theorem", "fderiv_cos", []], ["add", "theorem", "fderiv_cosh", []], ["add", "theorem", "fderiv_csin", []], ["add", "theorem", "fderiv_csinh", []], ["add", "theorem", "fderiv_sin", []], ["add", "theorem", "fderiv_sinh", []], ["add", "theorem", "fderiv_within_ccos", []], ["add", "theorem", "fderiv_within_ccosh", []], ["add", "theorem", "fderiv_within_cos", []], ["add", "theorem", "fderiv_within_cosh", []], ["add", "theorem", "fderiv_within_csin", []], ["add", "theorem", "fderiv_within_csinh", []], ["add", "theorem", "fderiv_within_sin", []], ["add", "theorem", "fderiv_within_sinh", []], ["add", "theorem", "ccos", ["has_deriv_at"]], ["add", "theorem", "ccosh", ["has_deriv_at"]], ["add", "theorem", "cos", ["has_deriv_at"]], ["add", "theorem", "cosh", ["has_deriv_at"]], ["add", "theorem", "csin", ["has_deriv_at"]], ["add", "theorem", "csinh", ["has_deriv_at"]], ["add", "theorem", "sin", ["has_deriv_at"]], ["add", "theorem", "sinh", ["has_deriv_at"]], ["add", "theorem", "ccos", ["has_deriv_within_at"]], ["add", "theorem", "ccosh", ["has_deriv_within_at"]], ["add", "theorem", "cos", ["has_deriv_within_at"]], ["add", "theorem", "cosh", ["has_deriv_within_at"]], ["add", "theorem", "csin", ["has_deriv_within_at"]], ["add", "theorem", "csinh", ["has_deriv_within_at"]], ["add", "theorem", "sin", ["has_deriv_within_at"]], ["add", "theorem", "sinh", ["has_deriv_within_at"]], ["add", "theorem", "ccos", ["has_fderiv_at"]], ["add", "theorem", "ccosh", ["has_fderiv_at"]], ["add", "theorem", "cos", ["has_fderiv_at"]], ["add", "theorem", "cosh", ["has_fderiv_at"]], ["add", "theorem", "csin", ["has_fderiv_at"]], ["add", "theorem", "csinh", ["has_fderiv_at"]], ["add", "theorem", "sin", ["has_fderiv_at"]], ["add", "theorem", "sinh", ["has_fderiv_at"]], ["add", "theorem", "ccos", ["has_fderiv_within_at"]], ["add", "theorem", "ccosh", ["has_fderiv_within_at"]], ["add", "theorem", "cos", ["has_fderiv_within_at"]], ["add", "theorem", "cosh", ["has_fderiv_within_at"]], ["add", "theorem", "csin", ["has_fderiv_within_at"]], ["add", "theorem", "csinh", ["has_fderiv_within_at"]], ["add", "theorem", "sin", ["has_fderiv_within_at"]], ["add", "theorem", "sinh", ["has_fderiv_within_at"]], ["add", "theorem", "ccos", ["has_strict_deriv_at"]], ["add", "theorem", "ccosh", ["has_strict_deriv_at"]], ["add", "theorem", "cos", ["has_strict_deriv_at"]], ["add", "theorem", "cosh", ["has_strict_deriv_at"]], ["add", "theorem", "csin", ["has_strict_deriv_at"]], ["add", "theorem", "csinh", ["has_strict_deriv_at"]], ["add", "theorem", "sin", ["has_strict_deriv_at"]], ["add", "theorem", "sinh", ["has_strict_deriv_at"]], ["add", "theorem", "ccos", ["has_strict_fderiv_at"]], ["add", "theorem", "ccosh", ["has_strict_fderiv_at"]], ["add", "theorem", "cos", ["has_strict_fderiv_at"]], ["add", "theorem", "cosh", ["has_strict_fderiv_at"]], ["add", "theorem", "csin", ["has_strict_fderiv_at"]], ["add", "theorem", "csinh", ["has_strict_fderiv_at"]], ["add", "theorem", "sin", ["has_strict_fderiv_at"]], ["add", "theorem", "sinh", ["has_strict_fderiv_at"]], ["add", "theorem", "deriv_cos'", ["real"]], ["add", "theorem", "deriv_cos", ["real"]], ["add", "theorem", "deriv_cosh", ["real"]], ["add", "theorem", "deriv_sin", ["real"]], ["add", "theorem", "deriv_sinh", ["real"]], ["add", "theorem", "differentiable_at_cos", ["real"]], ["add", "theorem", "differentiable_at_cosh", ["real"]], ["add", "theorem", "differentiable_at_sin", ["real"]], ["add", "theorem", "differentiable_at_sinh", ["real"]], ["add", "theorem", "differentiable_cos", ["real"]], ["add", "theorem", "differentiable_cosh", ["real"]], ["add", "theorem", "differentiable_sin", ["real"]], ["add", "theorem", "differentiable_sinh", ["real"]], ["add", "theorem", "has_deriv_at_cos", ["real"]], ["add", "theorem", "has_deriv_at_cosh", ["real"]], ["add", "theorem", "has_deriv_at_sin", ["real"]], ["add", "theorem", "has_deriv_at_sinh", ["real"]], ["add", "theorem", "has_strict_deriv_at_cos", ["real"]], ["add", "theorem", "has_strict_deriv_at_cosh", ["real"]], ["add", "theorem", "has_strict_deriv_at_sin", ["real"]], ["add", "theorem", "has_strict_deriv_at_sinh", ["real"]], ["add", "theorem", "sinh_strict_mono", ["real"]], ["add", "theorem", "times_cont_diff_cos", ["real"]], ["add", "theorem", "times_cont_diff_cosh", ["real"]], ["add", "theorem", "times_cont_diff_sin", ["real"]], ["add", "theorem", "times_cont_diff_sinh", ["real"]], ["add", "theorem", "ccos", ["times_cont_diff"]], ["add", "theorem", "ccosh", ["times_cont_diff"]], ["add", "theorem", "cos", ["times_cont_diff"]], ["add", "theorem", "cosh", ["times_cont_diff"]], ["add", "theorem", "csin", ["times_cont_diff"]], ["add", "theorem", "csinh", ["times_cont_diff"]], ["add", "theorem", "sin", ["times_cont_diff"]], ["add", "theorem", "sinh", ["times_cont_diff"]], ["add", "theorem", "ccos", ["times_cont_diff_at"]], ["add", "theorem", "ccosh", ["times_cont_diff_at"]], ["add", "theorem", "cos", ["times_cont_diff_at"]], ["add", "theorem", "cosh", ["times_cont_diff_at"]], ["add", "theorem", "csin", ["times_cont_diff_at"]], ["add", "theorem", "csinh", ["times_cont_diff_at"]], ["add", "theorem", "sin", ["times_cont_diff_at"]], ["add", "theorem", "sinh", ["times_cont_diff_at"]], ["add", "theorem", "ccos", ["times_cont_diff_on"]], ["add", "theorem", "ccosh", ["times_cont_diff_on"]], ["add", "theorem", "cos", ["times_cont_diff_on"]], ["add", "theorem", "cosh", ["times_cont_diff_on"]], ["add", "theorem", "csin", ["times_cont_diff_on"]], ["add", "theorem", "csinh", ["times_cont_diff_on"]], ["add", "theorem", "sin", ["times_cont_diff_on"]], ["add", "theorem", "sinh", ["times_cont_diff_on"]], ["add", "theorem", "ccos", ["times_cont_diff_within_at"]], ["add", "theorem", "ccosh", ["times_cont_diff_within_at"]], ["add", "theorem", "cos", ["times_cont_diff_within_at"]], ["add", "theorem", "cosh", ["times_cont_diff_within_at"]], ["add", "theorem", "csin", ["times_cont_diff_within_at"]], ["add", "theorem", "csinh", ["times_cont_diff_within_at"]], ["add", "theorem", "sin", ["times_cont_diff_within_at"]], ["add", "theorem", "sinh", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": []}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}, {"oldPath": "test/simp_command.lean", "newPath": "test/simp_command.lean", "changes": []}]}, {"timestamp": 1635890253, "sha": "d43daf01", "message": "feat(algebra/big_operators/order): add unbundled is_absolute_value.sum_le and map_prod (#10104)\nAdd unbundled versions of two existing lemmas.\nAdditionally generalize a few typeclass assumptions in an earlier file.\nFrom the flt-regular project", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "abv_sum", ["is_absolute_value"]], ["add", "theorem", "map_prod", ["is_absolute_value"]]]}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}]}, {"timestamp": 1635890252, "sha": "3accc5ed", "message": "feat(data/bool): bnot_iff_not (#10095)", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "bnot_iff_not", ["bool"]]]}]}, {"timestamp": 1635882537, "sha": "00064bd6", "message": "feat(logic/relation): add equivalence.comap (#10103)", "changes": [{"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "comap", ["equivalence"]]]}]}, {"timestamp": 1635879942, "sha": "2d8be73e", "message": "chore(measure_theory/probability_mass_function): avoid non-terminal simp in coe_le_one (#10112)", "changes": [{"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}]}, {"timestamp": 1635870392, "sha": "6df3143a", "message": "chore(combinatorics/choose/bounds): move to nat namespace (#10106)\nThere are module docstrings elsewhere that expect this to be in the `nat` namespace with the other `choose` lemmas.", "changes": [{"oldPath": "src/combinatorics/choose/bounds.lean", "newPath": "src/combinatorics/choose/bounds.lean", "changes": [["del", "theorem", "choose_le_pow", []], ["add", "theorem", "choose_le_pow", ["nat"]], ["add", "theorem", "pow_le_choose", ["nat"]], ["del", "theorem", "pow_le_choose", []]]}]}, {"timestamp": 1635868308, "sha": "0dcb1849", "message": "style(testing/slim_check): fix line length (#10114)", "changes": [{"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}]}, {"timestamp": 1635862447, "sha": "796a051a", "message": "feat(measure_theory/decomposition/lebesgue): more on Radon-Nikodym derivatives (#10070)\nWe show that the density in the Lebesgue decomposition theorem (aka the Radon-Nikodym derivative) is unique. Previously, uniqueness of the absolutely continuous part was known, but not of its density. We also show that the Radon-Nikodym derivative is almost everywhere finite. Plus some cleanup of the whole file.", "changes": [{"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["mod", "theorem", "eq_rn_deriv", ["measure_theory", "measure"]], ["add", "theorem", "eq_with_density_rn_deriv", ["measure_theory", "measure"]], ["add", "theorem", "lintegral_rn_deriv_lt_top_of_measure_ne_top", ["measure_theory", "measure"]], ["add", "theorem", "rn_deriv_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "rn_deriv_with_density", ["measure_theory", "measure"]], ["mod", "theorem", "singular_part_le", ["measure_theory", "measure"]], ["add", "theorem", "singular_part_with_density", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["add", "theorem", "ae_eq_of_forall_set_lintegral_eq_of_sigma_finite", ["measure_theory"]], ["add", "theorem", "ae_le_of_forall_set_lintegral_le_of_sigma_finite", ["measure_theory"]], ["mod", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_sigma_finite", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_of_forall_measure_lt_top_ae_restrict", ["measure_theory"]], ["add", "theorem", "eventually_mem_spanning_sets", ["measure_theory"]], ["add", "theorem", "is_locally_finite_measure_of_le", ["measure_theory", "measure"]], ["del", "theorem", "zero", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "zero_left", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "zero_right", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "mem_spanning_sets_of_index_le", ["measure_theory"]]]}, {"oldPath": "src/probability_theory/density.lean", "newPath": "src/probability_theory/density.lean", "changes": []}]}, {"timestamp": 1635854869, "sha": "da6706d0", "message": "feat(data/mv_polynomial/basic): lemmas about map (#10092)\nThis adds `map_alg_hom`, which fills the gap between `map` and `map_alg_equiv`.\nThe only new proof here is `map_surjective`; everything else is just a reworked existing proof.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "def", "map_alg_hom", ["mv_polynomial"]], ["add", "theorem", "map_alg_hom_id", ["mv_polynomial"]], ["add", "theorem", "map_left_inverse", ["mv_polynomial"]], ["add", "theorem", "map_right_inverse", ["mv_polynomial"]], ["add", "theorem", "map_surjective", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["del", "theorem", "map_alg_equiv_apply", ["mv_polynomial"]]]}]}, {"timestamp": 1635848794, "sha": "80dc445d", "message": "refactor(order/bounded_lattice): generalize le on with_{top,bot} (#10085)\nBefore, some lemmas assumed `preorder` even when they were true for\njust the underlying `le`. In the case of `with_bot`, the missing\nunderlying `has_le` instance is defined.\nFor both `with_{top,bot}`, a few lemmas are generalized accordingly.", "changes": [{"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_le", ["with_bot"]], ["mod", "theorem", "coe_le_coe", ["with_bot"]], ["mod", "theorem", "coe_lt_coe", ["with_bot"]], ["mod", "theorem", "some_le_some", ["with_bot"]], ["mod", "theorem", "coe_le_coe", ["with_top"]], ["mod", "theorem", "coe_lt_coe", ["with_top"]], ["mod", "theorem", "coe_lt_top", ["with_top"]], ["mod", "theorem", "le_coe", ["with_top"]]]}]}, {"timestamp": 1635848793, "sha": "658a3d77", "message": "refactor(algebra/algebra): remove subalgebra.under (#10081)\nThis removes `subalgebra.under`, and replaces `subalgebra.of_under` with `subalgebra.of_restrict_scalars`.\nLemmas associated with `under` have been renamed accordingly.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "adjoin_range_to_alg_hom", ["is_scalar_tower"]], ["del", "theorem", "range_under_adjoin", ["is_scalar_tower"]], ["del", "theorem", "mem_under", ["subalgebra"]], ["add", "def", "of_restrict_scalars", ["subalgebra"]], ["del", "def", "of_under", ["subalgebra"]], ["del", "def", "under", ["subalgebra"]]]}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_union_eq_adjoin_adjoin", ["algebra"]], ["del", "theorem", "adjoin_union_eq_under", ["algebra"]]]}, {"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1635848792, "sha": "541df8a0", "message": "feat(topology/algebra/ordered/liminf_limsup): convergence of a sequence which does not oscillate infinitely (#10073)\nIf, for all `a < b`, a sequence is not frequently below `a` and frequently above `b`, then it has to converge. This is a useful convergence criterion (called no upcrossings), used for instance in martingales.\nAlso generalize several statements on liminfs and limsups from complete linear orders to conditionally complete linear orders.", "changes": [{"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "is_cobounded_ge", ["filter", "is_bounded"]], ["add", "theorem", "is_cobounded_le", ["filter", "is_bounded"]], ["mod", "theorem", "liminf_le_limsup", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered/liminf_limsup.lean", "newPath": "src/topology/algebra/ordered/liminf_limsup.lean", "changes": [["add", "theorem", "tendsto_of_no_upcrossings", []]]}]}, {"timestamp": 1635848791, "sha": "880182d6", "message": "chore(analysis/normed/group): add `cauchy_seq_finset_of_norm_bounded_eventually` (#10060)\nAdd `cauchy_seq_finset_of_norm_bounded_eventually`, use it to golf some proofs.", "changes": [{"oldPath": "src/analysis/normed/group/infinite_sum.lean", "newPath": "src/analysis/normed/group/infinite_sum.lean", "changes": [["add", "theorem", "cauchy_seq_finset_of_norm_bounded_eventually", []]]}]}, {"timestamp": 1635848790, "sha": "fc12ca8d", "message": "feat(measure_theory/probability_mass_function): Define uniform pmf on an inhabited fintype (#9920)\nThis PR defines uniform probability mass functions on nonempty finsets and inhabited fintypes.", "changes": [{"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["add", "theorem", "bernuolli_apply", ["pmf"]], ["add", "def", "of_finset", ["pmf"]], ["add", "theorem", "of_finset_apply", ["pmf"]], ["add", "theorem", "of_finset_apply_of_not_mem", ["pmf"]], ["add", "theorem", "of_fintype_apply", ["pmf"]], ["add", "theorem", "of_multiset_apply", ["pmf"]], ["add", "theorem", "of_multiset_apply_of_not_mem", ["pmf"]], ["add", "def", "uniform_of_finset", ["pmf"]], ["add", "theorem", "uniform_of_finset_apply", ["pmf"]], ["add", "theorem", "uniform_of_finset_apply_of_mem", ["pmf"]], ["add", "theorem", "uniform_of_finset_apply_of_not_mem", ["pmf"]], ["add", "def", "uniform_of_fintype", ["pmf"]], ["add", "theorem", "uniform_of_fintype_apply", ["pmf"]]]}]}, {"timestamp": 1635845495, "sha": "f6894c47", "message": "chore(ring_theory/adjoin/fg): generalize ring to semiring in a few places (#10089)", "changes": [{"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}]}, {"timestamp": 1635841402, "sha": "26bdcac0", "message": "chore(coinductive_predicates): remove private and use of import_private (#10084)\nRemove a `private` modifier (I think this had previously been ported from core by @bryangingechen).\nThen remove the only use of `import_private` from the library. (Besides another use in `tests/`, which we're not porting.)\n(In mathlib4 we have `OpenPrivate` as an alternative. Removing `import_private` is one less thing for mathport to care about.)", "changes": [{"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": []}, {"oldPath": "test/coinductive.lean", "newPath": "test/coinductive.lean", "changes": []}]}, {"timestamp": 1635841401, "sha": "18528404", "message": "feat(analysis/calculus/mean_value): Strict convexity from derivatives (#10034)\nThis duplicates all the results relating convex/concave function and their derivatives to strictly convex/strictly concave functions.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["del", "theorem", "concave_on_univ", ["antitone"]], ["add", "theorem", "concave_on_univ_of_deriv", ["antitone"]], ["add", "theorem", "concave_on_of_deriv", ["antitone_on"]], ["del", "theorem", "concave_on_of_deriv_antitone_on", []], ["del", "theorem", "convex_on_of_deriv_monotone_on", []], ["del", "theorem", "convex_on_univ_of_deriv_monotone", []], ["add", "theorem", "convex_on_univ_of_deriv", ["monotone"]], ["add", "theorem", "convex_on_of_deriv", ["monotone_on"]], ["add", "theorem", "strict_concave_on_univ_of_deriv", ["strict_anti"]], ["add", "theorem", "strict_concave_on_of_deriv", ["strict_anti_on"]], ["add", "theorem", "strict_concave_on_of_deriv2_neg", []], ["add", "theorem", "strict_concave_on_open_of_deriv2_neg", []], ["add", "theorem", "strict_concave_on_univ_of_deriv2_neg", []], ["add", "theorem", "strict_convex_on_of_deriv2_pos", []], ["add", "theorem", "strict_convex_on_open_of_deriv2_pos", []], ["add", "theorem", "strict_convex_on_univ_of_deriv2_pos", []], ["add", "theorem", "strict_convex_on_univ_of_deriv", ["strict_mono"]], ["add", "theorem", "strict_convex_on_of_deriv", ["strict_mono_on"]]]}]}, {"timestamp": 1635835388, "sha": "6d2af9a1", "message": "chore(data/list/defs): remove unneeded open (#10100)", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}]}, {"timestamp": 1635821719, "sha": "d926ac73", "message": "chore(scripts): update nolints.txt (#10098)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1635800850, "sha": "fd783e39", "message": "chore(algebra/free_algebra): remove a heavy and unecessary import (#10093)\n`transfer_instance` pulls in category theory, which is overkill", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}]}, {"timestamp": 1635797684, "sha": "b1d5446e", "message": "chore(analysis/normed_space/operator_norm): remove an import to data.equiv.transfer_instance (#10094)\nThis import isn't needed, and the spelling without it is shorter.", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1635771331, "sha": "0144b6ca", "message": "chore({data/finset,data/multiset,order}/locally_finite): Better line wraps (#10087)", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["mod", "theorem", "Icc_eq_empty_of_lt", ["finset"]], ["mod", "theorem", "Icc_self", ["finset"]], ["mod", "theorem", "Ico_eq_empty_of_le", ["finset"]], ["mod", "theorem", "Ico_self", ["finset"]], ["mod", "theorem", "Ioc_eq_empty_of_le", ["finset"]], ["mod", "theorem", "Ioc_self", ["finset"]], ["mod", "theorem", "Ioo_eq_empty_of_le", ["finset"]], ["mod", "theorem", "Ioo_self", ["finset"]]]}, {"oldPath": "src/data/multiset/locally_finite.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": [["mod", "theorem", "Icc_eq_zero_of_lt", ["multiset"]], ["mod", "theorem", "Icc_self", ["multiset"]], ["mod", "theorem", "Ioc_eq_zero_of_le", ["multiset"]], ["mod", "theorem", "Ioc_self", ["multiset"]], ["mod", "theorem", "Ioo_eq_zero_of_le", ["multiset"]], ["mod", "theorem", "Ioo_self", ["multiset"]]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["mod", "def", "Icc", ["finset"]], ["mod", "def", "Ico", ["finset"]], ["mod", "theorem", "Ico_subset_Ico", ["finset"]], ["mod", "def", "Iic", ["finset"]], ["mod", "def", "Iio", ["finset"]], ["mod", "def", "Ioc", ["finset"]], ["mod", "def", "Ioo", ["finset"]], ["mod", "theorem", "mem_Ici", ["finset"]], ["mod", "theorem", "mem_Iic", ["finset"]], ["mod", "theorem", "mem_Iio", ["finset"]], ["mod", "theorem", "mem_Ioi", ["finset"]], ["mod", "def", "Icc", ["multiset"]], ["mod", "def", "Ici", ["multiset"]], ["mod", "def", "Iic", ["multiset"]], ["mod", "def", "Iio", ["multiset"]], ["mod", "def", "Ioc", ["multiset"]], ["mod", "def", "Ioi", ["multiset"]], ["mod", "def", "Ioo", ["multiset"]], ["mod", "theorem", "mem_Ici", ["multiset"]], ["mod", "theorem", "mem_Iic", ["multiset"]], ["mod", "theorem", "mem_Iio", ["multiset"]], ["mod", "theorem", "mem_Ioi", ["multiset"]], ["mod", "theorem", "finite_Ici", ["set"]], ["mod", "theorem", "finite_Iic", ["set"]], ["mod", "theorem", "finite_Iio", ["set"]], ["mod", "theorem", "finite_Ioi", ["set"]]]}]}, {"timestamp": 1635769340, "sha": "fef1535b", "message": "chore(category_theory/limits): reuse a previous result (#10088)", "changes": [{"oldPath": "src/category_theory/limits/shapes/kernel_pair.lean", "newPath": "src/category_theory/limits/shapes/kernel_pair.lean", "changes": []}]}, {"timestamp": 1635764794, "sha": "9ef310f2", "message": "chore(algebra/algebra): implement subalgebra.under in terms of restrict_scalars (#10080)\nWe should probably remove `subalgebra.under` entirely, but that's likely a lot more work.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["del", "theorem", "mem_under", ["subalgebra"]], ["del", "def", "under", ["subalgebra"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "mem_under", ["subalgebra"]], ["add", "def", "under", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["mod", "theorem", "adjoin_induction", ["algebra"]]]}]}, {"timestamp": 1635764793, "sha": "17ebcf01", "message": "chore(ring_theory/algebra_tower): relax typeclasses (#10078)\nThis generalizes some `comm_ring`s to `comm_semiring`s.\nSplit from #10024", "changes": [{"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["mod", "theorem", "fg_trans'", ["algebra"]], ["mod", "theorem", "algebra_map_injective", ["basis"]]]}]}, {"timestamp": 1635761560, "sha": "23892a05", "message": "chore(analysis/normed_space/operator_norm): semilinearize part of the file (#10076)\nThis PR generalizes part of the `operator_norm` file to semilinear maps. Only the first section (`semi_normed`) is done, which allows us to construct continuous semilinear maps using `linear_map.mk_continuous`.\nThe rest of the file is trickier, since we need specify how the ring hom interacts with the norm. I'd rather leave it to a future PR since I don't need the rest now.", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "continuous_of_linear_of_bound", []], ["add", "theorem", "continuous_of_linear_of_boundₛₗ", []], ["mod", "def", "mk_continuous", ["linear_map"]], ["mod", "def", "mk_continuous_of_exists_bound", ["linear_map"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}]}, {"timestamp": 1635750117, "sha": "85fe90e9", "message": "feat(algebra/direct_sum/module) : coe and internal (#10004)\nThis extracts the following `def`s from within the various `is_internal` properties:\n* `direct_sum.add_submonoid_coe`\n* `direct_sum.add_subgroup_coe`\n* `direct_sum.submodule_coe`\nPacking these into a def makes things more concise, and avoids some annoying elaboration issues.", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": [["add", "def", "add_subgroup_coe", ["direct_sum"]], ["add", "theorem", "add_subgroup_coe_of", ["direct_sum"]], ["add", "def", "add_submonoid_coe", ["direct_sum"]], ["add", "theorem", "add_submonoid_coe_of", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "def", "submodule_coe", ["direct_sum"]], ["add", "theorem", "submodule_coe_of", ["direct_sum"]]]}]}, {"timestamp": 1635744663, "sha": "acc504e1", "message": "docs(category_theory/*): add missing module docs (#9990)", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/products/bifunctor.lean", "newPath": "src/category_theory/products/bifunctor.lean", "changes": []}]}, {"timestamp": 1635734313, "sha": "e8fa2328", "message": "chore(scripts): update nolints.txt (#10083)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1635727110, "sha": "cd457a5d", "message": "fix(data/{rbtree,rbmap}): fix some lint errors (#10036)", "changes": [{"oldPath": "src/data/rbmap/default.lean", "newPath": "src/data/rbmap/default.lean", "changes": [["mod", "theorem", "eq_leaf_of_max_eq_none", ["rbmap"]], ["mod", "theorem", "eq_leaf_of_min_eq_none", ["rbmap"]]]}, {"oldPath": "src/data/rbtree/basic.lean", "newPath": "src/data/rbtree/basic.lean", "changes": [["mod", "theorem", "balanced", ["rbnode"]], ["mod", "theorem", "depth_min", ["rbnode"]]]}, {"oldPath": "src/data/rbtree/find.lean", "newPath": "src/data/rbtree/find.lean", "changes": [["mod", "theorem", "eqv_of_find_some", ["rbnode"]]]}, {"oldPath": "src/data/rbtree/insert.lean", "newPath": "src/data/rbtree/insert.lean", "changes": [["mod", "theorem", "equiv_or_mem_of_mem_ins", ["rbnode"]], ["mod", "theorem", "equiv_or_mem_of_mem_insert", ["rbnode"]], ["mod", "theorem", "find_balance1_node", ["rbnode"]], ["mod", "theorem", "find_balance2_node", ["rbnode"]], ["mod", "theorem", "find_black_eq_find_red", ["rbnode"]], ["mod", "theorem", "find_ins_of_eqv", ["rbnode"]], ["mod", "theorem", "find_insert_of_disj", ["rbnode"]], ["mod", "theorem", "find_insert_of_eqv", ["rbnode"]], ["mod", "theorem", "find_insert_of_not_eqv", ["rbnode"]], ["mod", "theorem", "find_mk_insert_result", ["rbnode"]], ["mod", "theorem", "find_red_of_gt", ["rbnode"]], ["mod", "theorem", "find_red_of_incomp", ["rbnode"]], ["mod", "theorem", "find_red_of_lt", ["rbnode"]], ["mod", "theorem", "induction", ["rbnode", "ins"]], ["mod", "theorem", "ins_ne_leaf", ["rbnode"]], ["mod", "theorem", "insert_ne_leaf", ["rbnode"]], ["mod", "theorem", "is_searchable_ins", ["rbnode"]], ["mod", "theorem", "is_searchable_insert", ["rbnode"]], ["mod", "theorem", "ite_eq_of_not_lt", ["rbnode"]], ["mod", "theorem", "mem_ins_of_incomp", ["rbnode"]], ["mod", "theorem", "mem_ins_of_mem", ["rbnode"]], ["mod", "theorem", "mem_insert_of_incomp", ["rbnode"]], ["mod", "theorem", "mem_insert_of_mem", ["rbnode"]], ["mod", "theorem", "of_mem_balance1_node", ["rbnode"]], ["mod", "theorem", "of_mem_balance2_node", ["rbnode"]]]}, {"oldPath": "src/data/rbtree/main.lean", "newPath": "src/data/rbtree/main.lean", "changes": [["mod", "theorem", "balanced", ["rbtree"]], ["mod", "theorem", "eq_leaf_of_max_eq_none", ["rbtree"]], ["mod", "theorem", "eq_leaf_of_min_eq_none", ["rbtree"]]]}, {"oldPath": "src/data/rbtree/min_max.lean", "newPath": "src/data/rbtree/min_max.lean", "changes": []}]}, {"timestamp": 1635727108, "sha": "bf821223", "message": "feat(algebra/direct_sum/basic): some lemmas about `direct_sum.of` (#10003)\nSome small lemmas about `direct_sum.of` that are handy.", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": [["add", "theorem", "of_eq_of_ne", ["direct_sum"]], ["add", "theorem", "of_eq_same", ["direct_sum"]], ["add", "theorem", "sum_support_of", ["direct_sum"]], ["add", "theorem", "support_of", ["direct_sum"]], ["add", "theorem", "support_of_subset", ["direct_sum"]], ["add", "theorem", "support_zero", ["direct_sum"]]]}]}, {"timestamp": 1635721249, "sha": "932e9548", "message": "feat(data/finset): some simple finset lemmas (#10079)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "diag_empty", ["finset"]], ["add", "theorem", "off_diag_empty", ["finset"]], ["add", "theorem", "product_subset_product", ["finset"]], ["add", "theorem", "product_subset_product_left", ["finset"]], ["add", "theorem", "product_subset_product_right", ["finset"]]]}]}, {"timestamp": 1635721248, "sha": "60cb2cfe", "message": "feat(data/list): length_filter_lt_length_iff_exists (#10074)\nAlso moved a lemma about filter_map that was placed in the wrong file", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_map_cons", ["list"]], ["add", "theorem", "length_eq_countp_add_countp", ["list"]], ["add", "theorem", "length_filter_lt_length_iff_exists", ["list"]]]}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["del", "theorem", "filter_map_cons", ["list"]]]}]}, {"timestamp": 1635721247, "sha": "af4f4df5", "message": "feat(list/init): simplifier lemmas for list.init (#10061)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "init_append_of_ne_nil", ["list"]], ["add", "theorem", "init_cons_of_ne_nil", ["list"]]]}]}, {"timestamp": 1635721245, "sha": "d6dd4516", "message": "chore(data/list/basic): use dot notation here and there (#10056)\n### Renamed lemmas\n- `list.cons_sublist_cons` → `list.sublist.cons_cons`;\n- `list.infix_of_prefix` → `list.is_prefix.is_infix`;\n- `list.infix_of_suffix` → `list.is_suffix.is_infix`;\n- `list.sublist_of_infix` → `list.is_infix.sublist`;\n- `list.sublist_of_prefix` → `list.is_prefix.sublist`;\n- `list.sublist_of_suffix` → `list.is_suffix.sublist`;\n- `list.length_le_of_infix` → `list.is_infix.length_le`.\n### New `simp` attrs\n`list.singleton_sublist`, `list.repeat_sublist_repeat`, `list.reverse_suffix`, `list.reverse_prefix`.\n### New lemmas\n`list.infix_insert`, `list.sublist_insert`, `list.subset_insert`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "cons_sublist_cons", ["list"]], ["add", "theorem", "length_le", ["list", "infix"]], ["add", "theorem", "infix_insert", ["list"]], ["del", "theorem", "infix_of_prefix", ["list"]], ["del", "theorem", "infix_of_suffix", ["list"]], ["mod", "theorem", "infix_refl", ["list"]], ["add", "theorem", "is_infix", ["list", "is_prefix"]], ["add", "theorem", "is_infix", ["list", "is_suffix"]], ["del", "theorem", "length_le_of_infix", ["list"]], ["mod", "theorem", "nil_infix", ["list"]], ["mod", "theorem", "repeat_sublist_repeat", ["list"]], ["mod", "theorem", "reverse_prefix", ["list"]], ["mod", "theorem", "reverse_suffix", ["list"]], ["mod", "theorem", "singleton_sublist", ["list"]], ["add", "theorem", "cons_cons", ["list", "sublist"]], ["add", "theorem", "sublist_insert", ["list"]], ["del", "theorem", "sublist_of_infix", ["list"]], ["del", "theorem", "sublist_of_prefix", ["list"]], ["del", "theorem", "sublist_of_suffix", ["list"]], ["add", "theorem", "subset_insert", ["list"]], ["mod", "theorem", "tail_sublist", ["list"]]]}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": "src/data/list/lattice.lean", "newPath": "src/data/list/lattice.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/sublists.lean", "newPath": "src/data/list/sublists.lean", "changes": []}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": []}]}, {"timestamp": 1635721244, "sha": "76f13b36", "message": "feat(algebra/star/basic): `ring.inverse_star` (#10039)\nAlso adds `is_unit.star` and `is_unit_star`.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "star", ["is_unit"]], ["add", "theorem", "is_unit_star", []], ["add", "theorem", "inverse_star", ["ring"]]]}]}, {"timestamp": 1635715698, "sha": "106dc579", "message": "chore(ring_theory/ideal/operations): generalize typeclass in map_map and comap_comap (#10077)\nSplit from #10024 which is hitting timeouts somewhere more irritating.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "comap_comap", ["ideal"]], ["mod", "theorem", "map_map", ["ideal"]]]}]}, {"timestamp": 1635715697, "sha": "233eb660", "message": "feat(data/real/ennreal): more on integer powers on ennreal (#10071)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "zpow_two", []]]}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["add", "theorem", "exists_mem_Ico_zpow", []], ["add", "theorem", "exists_mem_Ioc_zpow", []], ["del", "theorem", "exists_zpow_near'", []], ["del", "theorem", "exists_zpow_near", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "Ioo_zero_top_eq_Union_Ico_zpow", ["ennreal"]], ["add", "theorem", "add_div", ["ennreal"]], ["add", "theorem", "coe_zpow", ["ennreal"]], ["add", "theorem", "exists_mem_Ico_zpow", ["ennreal"]], ["add", "theorem", "exists_mem_Ioc_zpow", ["ennreal"]], ["add", "theorem", "monotone_zpow", ["ennreal"]], ["add", "theorem", "one_le_pow_of_one_le", ["ennreal"]], ["add", "theorem", "zpow_add", ["ennreal"]], ["add", "theorem", "zpow_le_of_le", ["ennreal"]], ["add", "theorem", "zpow_lt_top", ["ennreal"]], ["add", "theorem", "zpow_pos", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_zpow", ["nnreal"]], ["add", "theorem", "exists_mem_Ico_zpow", ["nnreal"]], ["add", "theorem", "exists_mem_Ioc_zpow", ["nnreal"]], ["add", "theorem", "inv_lt_one", ["nnreal"]], ["add", "theorem", "inv_lt_one_iff", ["nnreal"]], ["add", "theorem", "zpow_pos", ["nnreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "continuous_pow", ["ennreal"]]]}]}, {"timestamp": 1635706701, "sha": "5ca3c5e9", "message": "chore(data/set/intervals): add some lemmas (#10062)\nAdd several lemma lemmas about intersection/difference of intervals.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ico_inter_Ici", ["set"]], ["mod", "theorem", "Iic_inter_Ioc_of_le", ["set"]], ["add", "theorem", "Ioc_diff_Iic", ["set"]], ["add", "theorem", "Ioc_inter_Iic", ["set"]]]}]}, {"timestamp": 1635706700, "sha": "05bd61d0", "message": "chore(analysis): move more code out of `analysis.normed_space.basic` (#10055)", "changes": [{"oldPath": null, "newPath": "src/analysis/normed/group/completion.lean", "changes": [["add", "theorem", "norm_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/analysis/normed/group/hom_completion.lean", "newPath": "src/analysis/normed/group/hom_completion.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed/group/infinite_sum.lean", "changes": [["add", "theorem", "cauchy_seq_finset_iff_vanishing_norm", []], ["add", "theorem", "cauchy_seq_finset_of_norm_bounded", []], ["add", "theorem", "cauchy_seq_finset_of_summable_norm", []], ["add", "theorem", "norm_le_of_bounded", ["has_sum"]], ["add", "theorem", "has_sum_iff_tendsto_nat_of_summable_norm", []], ["add", "theorem", "has_sum_of_subseq_of_summable", []], ["add", "theorem", "nnnorm_tsum_le", []], ["add", "theorem", "norm_tsum_le_tsum_norm", []], ["add", "theorem", "summable_iff_vanishing_norm", []], ["add", "theorem", "summable_of_nnnorm_bounded", []], ["add", "theorem", "summable_of_norm_bounded", []], ["add", "theorem", "summable_of_norm_bounded_eventually", []], ["add", "theorem", "summable_of_summable_nnnorm", []], ["add", "theorem", "summable_of_summable_norm", []], ["add", "theorem", "tsum_of_nnnorm_bounded", []], ["add", "theorem", "tsum_of_norm_bounded", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "cauchy_seq_finset_iff_vanishing_norm", []], ["del", "theorem", "cauchy_seq_finset_of_norm_bounded", []], ["del", "theorem", "cauchy_seq_finset_of_summable_norm", []], ["del", "theorem", "norm_le_of_bounded", ["has_sum"]], ["del", "theorem", "has_sum_iff_tendsto_nat_of_summable_norm", []], ["del", "theorem", "has_sum_of_subseq_of_summable", []], ["del", "theorem", "nnnorm_tsum_le", []], ["del", "theorem", "norm_tsum_le_tsum_norm", []], ["del", "theorem", "summable_iff_vanishing_norm", []], ["del", "theorem", "summable_of_nnnorm_bounded", []], ["del", "theorem", "summable_of_norm_bounded", []], ["del", "theorem", "summable_of_norm_bounded_eventually", []], ["del", "theorem", "summable_of_summable_nnnorm", []], ["del", "theorem", "summable_of_summable_norm", []], ["del", "theorem", "tsum_of_nnnorm_bounded", []], ["del", "theorem", "tsum_of_norm_bounded", []], ["del", "theorem", "norm_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "extension_coe", ["uniform_space", "completion"]]]}]}, {"timestamp": 1635706699, "sha": "8390325e", "message": "fix(data/pequiv): fix lint (#10043)", "changes": [{"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}]}, {"timestamp": 1635706698, "sha": "66f7114a", "message": "feat(measure_theory/group): add `measurable_set.const_smul` (#10025)\nPartially based on lemmas from #2819.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "subsingleton_zero_smul_set", []], ["add", "theorem", "zero_smul_subset", []]]}, {"oldPath": null, "newPath": "src/measure_theory/group/pointwise.lean", "changes": [["add", "theorem", "const_smul", ["measurable_set"]], ["add", "theorem", "const_smul_of_ne_zero", ["measurable_set"]], ["add", "theorem", "const_smul₀", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "measurable_set", ["set", "subsingleton"]]]}]}, {"timestamp": 1635701189, "sha": "f2b77d7d", "message": "refactor(set_theory/cardinal): swap sides of `simp` lemmas (#10040)\n## API changes\n### Swap sides of simp lemmas\n- `cardinal.add_def` is no loner a `simp` lemma, `cardinal.mk_sum` (renamed from `cardinal.add`) simplifies `#(α ⊕ β)` to `lift.{v u} (#α) + lift.{u v} (#β)`;\n- `cardinal.mul_def` is no loner a `simp` lemma, `cardinal.mk_prod` (merged with `cardinal.mul`) simplifies `#(α × β)` to `lift.{v u} (#α) * lift.{u v} (#β)`;\n- `cardinal.power_def` is no longer a `simp` lemma. New lemma `cardinal.mk_arrow` computes `#(α → β)`. It is not a `simp` lemma because it follows from other `simp` lemmas.\n- replace `cardinal.sum_mk` with `cardinal.mk_sigma` and `cardinal.prod_mk` with `cardinal.mk_pi`;\n### Other changes\n- new lemmas `@[simp] cardinal.lift_uzero` and `cardinal.lift_umax'`;\n- split `cardinal.linear_order` into `cardinal.preorder` (doesn't rely on `classical.choice`), `cardinal.partial_order` (needs `classical.choice`, computable), and `cardinal.linear_order` (noncomputable);\n- add `cardinal.lift_order_embedding`;\n- add `cardinal.mk_psum`;\n- rename `cardinal.prop_eq_two` to `cardinal.mk_Prop`, drop the old `mk_Prop`;\n- use local notation for natural power;\n- rename old `sum_const` to `sum_const'`, the new `@[simp] lemma sum_const` is what used to be `sum_const_eq_lift_mul`;\n- rename old `prod_const` to `prod_const'`, the new `@[simp] lemma prod_const` deals with types in different universes;\n- add `@[simp]` to `cardinal.prod_eq_zero` and `cardinal.omega_le_mk`;\n- add `@[simp]` lemmas `cardinal.mk_eq_one`, `cardinal.mk_vector`, `cardinal.omega_mul_eq`, and `cardinal.mul_omega_eq`;\n- replace `mk_plift_of_true` and `mk_plift_of_false` with `mk_plift_true` and `mk_plift_false`;\n- `mk_list_eq_mk` and `mk_finset_eq_mk` now assume `[infinite α]` instead of `ω ≤ #α`.", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": [["del", "def", "vector_equiv_fin", ["equiv"]]]}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": [["add", "def", "vector_equiv_fin", ["equiv"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite/rank.lean", "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": [["mod", "theorem", "rank_prod", ["module", "free"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["del", "theorem", "add", ["cardinal"]], ["mod", "theorem", "add_def", ["cardinal"]], ["mod", "theorem", "cantor", ["cardinal"]], ["add", "def", "lift_order_embedding", ["cardinal"]], ["add", "theorem", "lift_umax'", ["cardinal"]], ["add", "theorem", "lift_uzero", ["cardinal"]], ["mod", "theorem", "mk_Prop", ["cardinal"]], ["add", "theorem", "mk_arrow", ["cardinal"]], ["mod", "theorem", "mk_empty", ["cardinal"]], ["add", "theorem", "mk_eq_one", ["cardinal"]], ["mod", "theorem", "mk_list_eq_sum_pow", ["cardinal"]], ["mod", "theorem", "mk_pempty", ["cardinal"]], ["add", "theorem", "mk_pi", ["cardinal"]], ["add", "theorem", "mk_plift_false", ["cardinal"]], ["del", "theorem", "mk_plift_of_false", ["cardinal"]], ["del", "theorem", "mk_plift_of_true", ["cardinal"]], ["add", "theorem", "mk_plift_true", ["cardinal"]], ["mod", "theorem", "mk_prod", ["cardinal"]], ["add", "theorem", "mk_psum", ["cardinal"]], ["mod", "theorem", "mk_punit", ["cardinal"]], ["mod", "theorem", "mk_set", ["cardinal"]], ["add", "theorem", "mk_sigma", ["cardinal"]], ["add", "theorem", "mk_sum", ["cardinal"]], ["mod", "theorem", "mk_unit", ["cardinal"]], ["add", "theorem", "mk_vector", ["cardinal"]], ["del", "theorem", "mul", ["cardinal"]], ["mod", "theorem", "mul_def", ["cardinal"]], ["mod", "theorem", "omega_le_mk", ["cardinal"]], ["mod", "theorem", "omega_mul_omega", ["cardinal"]], ["mod", "theorem", "power_def", ["cardinal"]], ["add", "theorem", "prod_const'", ["cardinal"]], ["mod", "theorem", "prod_const", ["cardinal"]], ["mod", "theorem", "prod_eq_zero", ["cardinal"]], ["del", "theorem", "prod_mk", ["cardinal"]], ["del", "theorem", "prop_eq_two", ["cardinal"]], ["add", "theorem", "sum_const'", ["cardinal"]], ["mod", "theorem", "sum_const", ["cardinal"]], ["del", "theorem", "sum_const_eq_lift_mul", ["cardinal"]], ["del", "theorem", "sum_mk", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["mod", "theorem", "mk_finset_eq_mk", ["cardinal"]], ["mod", "theorem", "mk_list_eq_mk", ["cardinal"]], ["add", "theorem", "mul_omega_eq", ["cardinal"]], ["add", "theorem", "omega_mul_eq", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1635688889, "sha": "4ef3fcd2", "message": "chore(algebra/group/inj_surj): add 2 missing `def`s (#10068)\n`function.injective.right_cancel_monoid` and `function.injective.cancel_monoid` were missing.\n`function.injective.sub_neg_monoid` was also misnamed `function.injective.sub_neg_add_monoid`.", "changes": [{"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}]}, {"timestamp": 1635688888, "sha": "36de1ef6", "message": "chore(ring_theory/noetherian): generalize to semiring (#10032)\nThis weakens some typeclasses on some results about `is_noetherian` (which already permits modules over semirings), and relaxes `is_noetherian_ring` to permit semirings.\nThis does not actually try changing any of the proofs, it just relaxes assumptions that were stronger than what was actually used.", "changes": [{"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "is_noetherian_of_submodule_of_noetherian", []], ["mod", "theorem", "is_noetherian_of_tower", []], ["mod", "theorem", "is_noetherian_ring_iff", []], ["mod", "theorem", "is_noetherian_ring_iff_ideal_fg", []], ["mod", "theorem", "is_noetherian_of_zero_eq_one", ["ring"]], ["mod", "theorem", "well_founded_submodule_gt", []]]}]}, {"timestamp": 1635686284, "sha": "ca7fee84", "message": "feat(category_theory/limits): Results about pullbacks (#9984)\n- Provided the explicit isomorphism `X ×[Z] Y ≅ Y ×[Z] X`.\n- Provided the pullback of f g when either one is iso or when both are mono.", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "fst_eq_snd_of_mono_eq", ["category_theory", "limits"]], ["add", "theorem", "has_pullback_of_left_iso", ["category_theory", "limits"]], ["add", "theorem", "has_pullback_of_right_iso", ["category_theory", "limits"]], ["add", "theorem", "has_pullback_symmetry", ["category_theory", "limits"]], ["add", "theorem", "has_pushout_of_left_iso", ["category_theory", "limits"]], ["add", "theorem", "has_pushout_of_right_iso", ["category_theory", "limits"]], ["add", "theorem", "has_pushout_symmetry", ["category_theory", "limits"]], ["add", "theorem", "inl_comp_pushout_symmetry_hom", ["category_theory", "limits"]], ["add", "theorem", "inl_comp_pushout_symmetry_inv", ["category_theory", "limits"]], ["add", "theorem", "inl_eq_inr_of_epi_eq", ["category_theory", "limits"]], ["add", "theorem", "inr_comp_pushout_symmetry_hom", ["category_theory", "limits"]], ["add", "theorem", "inr_comp_pushout_symmetry_inv", ["category_theory", "limits"]], ["add", "def", "pullback_cone_of_left_iso", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_left_iso_X", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_left_iso_fst", ["category_theory", "limits"]], ["add", "def", "pullback_cone_of_left_iso_is_limit", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_left_iso_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_left_iso_π_app_left", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_left_iso_π_app_none", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_left_iso_π_app_right", ["category_theory", "limits"]], ["add", "def", "pullback_cone_of_right_iso", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_right_iso_X", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_right_iso_fst", ["category_theory", "limits"]], ["add", "def", "pullback_cone_of_right_iso_is_limit", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_right_iso_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_right_iso_π_app_left", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_right_iso_π_app_none", ["category_theory", "limits"]], ["add", "theorem", "pullback_cone_of_right_iso_π_app_right", ["category_theory", "limits"]], ["add", "def", "pullback_symmetry", ["category_theory", "limits"]], ["add", "theorem", "pullback_symmetry_hom_comp_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_symmetry_hom_comp_snd", ["category_theory", "limits"]], ["add", "theorem", "pullback_symmetry_hom_of_epi_eq", ["category_theory", "limits"]], ["add", "theorem", "pullback_symmetry_hom_of_mono_eq", ["category_theory", "limits"]], ["add", "theorem", "pullback_symmetry_inv_comp_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_symmetry_inv_comp_snd", ["category_theory", "limits"]], ["add", "theorem", "epi_of_is_colimit_mk_id_id", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "is_colimit_mk_id_id", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "pushout_cocone_of_left_iso", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_left_iso_X", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_left_iso_inl", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_left_iso_inr", ["category_theory", "limits"]], ["add", "def", "pushout_cocone_of_left_iso_is_limit", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_left_iso_ι_app_left", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_left_iso_ι_app_none", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_left_iso_ι_app_right", ["category_theory", "limits"]], ["add", "def", "pushout_cocone_of_right_iso", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_right_iso_X", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_right_iso_inl", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_right_iso_inr", ["category_theory", "limits"]], ["add", "def", "pushout_cocone_of_right_iso_is_limit", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_right_iso_ι_app_left", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_right_iso_ι_app_none", ["category_theory", "limits"]], ["add", "theorem", "pushout_cocone_of_right_iso_ι_app_right", ["category_theory", "limits"]], ["add", "def", "pushout_is_pushout", ["category_theory", "limits"]], ["add", "def", "pushout_symmetry", ["category_theory", "limits"]]]}]}, {"timestamp": 1635681441, "sha": "be0a4af2", "message": "chore(analysis): move `real.angle` to a dedicated file (#10065)\nWe don't use this type anywhere else.", "changes": [{"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/angle.lean", "changes": [["add", "theorem", "angle_eq_iff_two_pi_dvd_sub", ["real", "angle"]], ["add", "theorem", "coe_add", ["real", "angle"]], ["add", "theorem", "coe_coe_hom", ["real", "angle"]], ["add", "def", "coe_hom", ["real", "angle"]], ["add", "theorem", "coe_int_mul_eq_zsmul", ["real", "angle"]], ["add", "theorem", "coe_nat_mul_eq_nsmul", ["real", "angle"]], ["add", "theorem", "coe_neg", ["real", "angle"]], ["add", "theorem", "coe_sub", ["real", "angle"]], ["add", "theorem", "coe_two_pi", ["real", "angle"]], ["add", "theorem", "coe_zero", ["real", "angle"]], ["add", "theorem", "cos_eq_iff_eq_or_eq_neg", ["real", "angle"]], ["add", "theorem", "cos_sin_inj", ["real", "angle"]], ["add", "theorem", "sin_eq_iff_eq_or_add_eq_pi", ["real", "angle"]], ["add", "def", "angle", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["del", "theorem", "angle_eq_iff_two_pi_dvd_sub", ["real", "angle"]], ["del", "theorem", "coe_add", ["real", "angle"]], ["del", "theorem", "coe_int_mul_eq_zsmul", ["real", "angle"]], ["del", "theorem", "coe_nat_mul_eq_nsmul", ["real", "angle"]], ["del", "theorem", "coe_neg", ["real", "angle"]], ["del", "theorem", "coe_sub", ["real", "angle"]], ["del", "theorem", "coe_two_pi", ["real", "angle"]], ["del", "theorem", "coe_zero", ["real", "angle"]], ["del", "theorem", "cos_eq_iff_eq_or_eq_neg", ["real", "angle"]], ["del", "theorem", "cos_sin_inj", ["real", "angle"]], ["del", "theorem", "sin_eq_iff_eq_or_add_eq_pi", ["real", "angle"]], ["del", "def", "angle", ["real"]]]}]}, {"timestamp": 1635681440, "sha": "0433eb62", "message": "doc(topology/uniform_space/uniform_embedding): add some docs (#10045)", "changes": [{"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["del", "theorem", "uniform_embedding", ["uniform_inducing"]]]}]}, {"timestamp": 1635681439, "sha": "e5f9becc", "message": "chore(linear_algebra/basic): relax ring to semiring (#10030)\nThis relaxes a random selection of lemmas from `ring R` to `semiring R`, and cleans up some unused `variables` nearby.\nProbably the most useful of these are `submodule.mem_map_equiv`, `map_subtype.rel_iso`, and `submodule.disjoint_iff_comap_eq_bot`", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "iterate_ker", ["linear_map"]], ["mod", "def", "iterate_range", ["linear_map"]], ["mod", "def", "order_embedding", ["submodule", "map_subtype"]], ["mod", "def", "rel_iso", ["submodule", "map_subtype"]]]}]}, {"timestamp": 1635681438, "sha": "35cf1547", "message": "feat(linear_algebra/eigenspace): define `eigenvalues` of an endomorphism (#10027)\nPrerequisites in `linear_algebra/eigenspace` for #9995, including a definition `module.End.eigenvalues`, the eigenvalues of an endomorphism considered as a subtype of the scalar ring.", "changes": [{"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "eigenspace_restrict_eq_bot", ["module", "End"]], ["add", "theorem", "eigenspace_restrict_le_eigenspace", ["module", "End"]], ["add", "def", "eigenvalues", ["module", "End"]], ["add", "theorem", "exists_has_eigenvector", ["module", "End", "has_eigenvalue"]]]}]}, {"timestamp": 1635675547, "sha": "175ac2c8", "message": "chore(algebra/group/defs): golf a proof (#10067)\nUse `monoid.ext` to golf `div_inv_monoid.ext`.", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}]}, {"timestamp": 1635675546, "sha": "31c8aa59", "message": "chore(algebra/group_with_zero/basic): zero, one, and pow lemmas for `ring.inverse` (#10049)\nThis adds:\n* `ring.inverse_zero`\n* `ring.inverse_one`\n* `ring.inverse_pow` (to match `inv_pow`, `inv_pow₀`)\n* `commute.ring_inverse_ring_inverse` (to match `commute.inv_inv`)", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "ring_inverse_ring_inverse", ["commute"]], ["add", "theorem", "map_units_inv", ["monoid_with_zero_hom"]], ["add", "theorem", "inverse_one", ["ring"]], ["add", "theorem", "inverse_zero", ["ring"]], ["add", "theorem", "mul_inverse_rev'", ["ring"]], ["mod", "theorem", "mul_inverse_rev", ["ring"]]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["add", "theorem", "inverse_pow", ["ring"]]]}]}, {"timestamp": 1635673596, "sha": "43e7d1b5", "message": "feat(order/antichain): Antichains (#9926)\nThis defines antichains mimicking the definition of chains.", "changes": [{"oldPath": null, "newPath": "src/order/antichain.lean", "changes": [["add", "theorem", "eq_of_related", ["is_antichain"]], ["add", "theorem", "image", ["is_antichain"]], ["add", "theorem", "insert_of_symmetric", ["is_antichain"]], ["add", "theorem", "mk_is_antichain", ["is_antichain"]], ["add", "theorem", "mk_max", ["is_antichain"]], ["add", "theorem", "mk_subset", ["is_antichain"]], ["add", "theorem", "mono", ["is_antichain"]], ["add", "theorem", "mono_on", ["is_antichain"]], ["add", "theorem", "preimage", ["is_antichain"]], ["add", "theorem", "swap", ["is_antichain"]], ["add", "def", "is_antichain", []], ["add", "theorem", "is_antichain_insert", []], ["add", "theorem", "is_antichain_insert_of_symmetric", []], ["add", "theorem", "is_antichain", ["set", "subsingleton"]]]}]}, {"timestamp": 1635665691, "sha": "b7f120f1", "message": "chore(*): clean up the library using to_additive (#9790)\nSince #9138 and #5487 to_additive got a lot better, so a lot of duplication in the library becomes unnecessary and makes maintenence a burden. So we remove a large number of copy-pasted declarations that can now be generated automatically.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "pow_eq_prod_const", ["finset"]], ["mod", "theorem", "prod_const", ["finset"]], ["del", "theorem", "sum_const", ["finset"]], ["del", "theorem", "sum_nsmul", ["finset"]], ["del", "theorem", "sum_update_of_mem", ["finset"]]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["del", "theorem", "nsmul_one'", []]]}, {"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "map_zsmul", ["add_monoid_hom"]], ["del", "theorem", "add_one_zsmul", []], ["del", "theorem", "add_zsmul", []], ["del", "theorem", "bit0_zsmul", []], ["del", "theorem", "bit1_zsmul", []], ["mod", "theorem", "units_zpow_left", ["commute"]], ["mod", "theorem", "units_zpow_right", ["commute"]], ["mod", "theorem", "map_zpow", ["monoid_hom"]], ["del", "theorem", "mul_zsmul", []], ["del", "theorem", "one_add_zsmul", []], ["mod", "theorem", "units_zpow_right", ["semiconj_by"]], ["del", "theorem", "sub_zsmul", []], ["mod", "theorem", "coe_pow", ["units"]], ["mod", "theorem", "coe_zpow", ["units"]], ["del", "theorem", "zsmul_add_comm", []], ["del", "theorem", "zsmul_mul'", []]]}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": [["del", "theorem", "add_left_iterate", []], ["del", "theorem", "add_right_iterate", []], ["del", "theorem", "add_right_iterate_apply_zero", []], ["mod", "theorem", "mul_left_iterate", []], ["mod", "theorem", "mul_right_iterate", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["del", "theorem", "sum_take_of_fn", ["list"]]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "length_pos_of_sum_ne_zero", ["list"]]]}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": [["del", "theorem", "multiple_subset", ["is_add_submonoid"]], ["del", "theorem", "smul_mem", ["is_add_submonoid"]], ["del", "theorem", "add_mem", ["multiples"]], ["del", "theorem", "self_mem", ["multiples"]], ["del", "theorem", "zero_mem", ["multiples"]], ["del", "def", "multiples", []]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["del", "def", "quotient", ["quotient_add_group"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "add_order_eq_card_zmultiples", []], ["del", "theorem", "add_order_of_dvd_card_univ", []], ["del", "theorem", "add_order_of_dvd_iff_nsmul_eq_zero", []], ["del", "theorem", "add_order_of_dvd_of_nsmul_eq_zero", []], ["del", "theorem", "add_order_of_eq_add_order_of_iff", []], ["del", "theorem", "add_order_of_eq_card_multiples", []], ["del", "theorem", "add_order_of_eq_one_iff", []], ["del", "theorem", "add_order_of_eq_prime_pow", []], ["del", "theorem", "add_order_of_injective", []], ["del", "theorem", "add_order_of_le_card_univ", []], ["del", "theorem", "add_order_of_le_of_nsmul_eq_zero", []], ["del", "theorem", "add_order_of_nsmul''", []], ["del", "theorem", "add_order_of_nsmul'", []], ["del", "theorem", "add_order_of_nsmul", []], ["del", "theorem", "add_order_of_nsmul_eq_zero", []], ["del", "theorem", "add_order_of_pos", []], ["del", "theorem", "add_order_of_zero", []], ["del", "theorem", "card_nsmul_eq_zero", []], ["del", "theorem", "exists_nsmul_eq_self_of_coprime", []], ["del", "theorem", "exists_nsmul_eq_zero", []], ["del", "theorem", "exists_zsmul_eq_zero", []], ["del", "theorem", "fin_equiv_multiples_apply", []], ["del", "theorem", "fin_equiv_multiples_symm_apply", []], ["mod", "theorem", "fin_equiv_powers_apply", []], ["mod", "theorem", "fin_equiv_powers_symm_apply", []], ["del", "theorem", "fin_equiv_zmultiples_apply", []], ["del", "theorem", "fin_equiv_zmultiples_symm_apply", []], ["mod", "theorem", "fin_equiv_zpowers_apply", []], ["mod", "theorem", "fin_equiv_zpowers_symm_apply", []], ["del", "theorem", "gcd_nsmul_card_eq_zero_iff", []], ["del", "theorem", "mem_multiples_iff_mem_range_add_order_of", []], ["del", "theorem", "mem_multiples_iff_mem_zmultiples", []], ["del", "theorem", "mem_zmultiples_iff_mem_range_add_order_of", []], ["del", "theorem", "multiples_eq_zmultiples", []], ["del", "theorem", "multiples_equiv_multiples_apply", []], ["del", "theorem", "nsmul_eq_mod_add_order_of", []], ["del", "theorem", "nsmul_inj_mod", []], ["del", "theorem", "nsmul_injective_aux", []], ["del", "theorem", "nsmul_injective_of_lt_add_order_of", []], ["del", "theorem", "nsmul_ne_zero_of_lt_add_order_of'", []], ["mod", "theorem", "order_of_eq_one_iff", []], ["mod", "theorem", "order_of_one", []], ["mod", "theorem", "pow_card_eq_one", []], ["del", "theorem", "sum_card_add_order_of_eq_card_nsmul_eq_zero", []], ["del", "theorem", "zmultiples_equiv_zmultiples_apply", []], ["del", "theorem", "zsmul_eq_mod_add_order_of", []]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "theorem", "closure_singleton_zero", ["add_subgroup"]], ["del", "theorem", "coe_smul", ["add_subgroup"]], ["del", "theorem", "coe_zsmul", ["add_subgroup"]], ["del", "theorem", "mem_closure_singleton", ["add_subgroup"]], ["del", "theorem", "zmultiples_subset", ["add_subgroup"]], ["mod", "theorem", "of_left_inverse_apply", ["monoid_hom"]], ["mod", "theorem", "of_left_inverse_symm_apply", ["monoid_hom"]], ["mod", "theorem", "coe_copy", ["subgroup"]], ["mod", "theorem", "coe_pow", ["subgroup"]], ["mod", "theorem", "coe_zpow", ["subgroup"]]]}]}, {"timestamp": 1635650362, "sha": "236f395a", "message": "chore(topology/compacts): add a missing simp lemma (#10063)", "changes": [{"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": [["add", "theorem", "positive_compacts_univ_val", ["topological_space"]]]}]}, {"timestamp": 1635644021, "sha": "c9520174", "message": "chore(logic/embedding): docs, fixes (#10047)\n* generalize `function.extend` and some lemmas from `Type*` to `Sort*`.\n* add missing docs in `logic.embedding`;\n* swap `function.embedding.arrow_congr_left` and `function.embedding.arrow_congr_right`;\n* use `function.extend` to define the new `function.embedding.arrow_congr_left`.", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["mod", "theorem", "extend_smul", ["function"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "exists_apply_eq_apply'", []], ["mod", "theorem", "exists_apply_eq_apply", []], ["mod", "theorem", "exists_eq", []]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "def", "Pi_congr_right", ["function", "embedding"]], ["del", "def", "arrow_congr_left", ["function", "embedding"]], ["add", "def", "arrow_congr_right", ["function", "embedding"]], ["add", "theorem", "arrow_congr_right_apply", ["function", "embedding"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1635638560, "sha": "951c063d", "message": "chore(data/set/pairwise): rename `set.pairwise_on` to `set.pairwise` to match `list.pairwise` and `multiset.pairwise` (#10035)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["mod", "theorem", "finprod_mem_sUnion", []]]}, {"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/split.lean", "newPath": "src/analysis/box_integral/partition/split.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "convex_iff_pairwise_on_pos", []], ["add", "theorem", "convex_iff_pairwise_pos", []]]}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["del", "theorem", "concave_on_iff_pairwise_on_pos", []], ["add", "theorem", "concave_on_iff_pairwise_pos", []], ["del", "theorem", "convex_on_iff_pairwise_on_pos", []], ["add", "theorem", "convex_on_iff_pairwise_pos", []]]}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["add", "theorem", "pairwise_of_set_pairwise", ["list", "nodup"]], ["del", "theorem", "pairwise_of_set_pairwise_on", ["list", "nodup"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "set_pairwise", ["list", "pairwise"]], ["del", "theorem", "set_pairwise_on", ["list", "pairwise"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["del", "theorem", "pairwise_on", ["pairwise"]], ["add", "theorem", "set_pairwise", ["pairwise"]], ["add", "theorem", "pairwise_image", ["set", "inj_on"]], ["del", "theorem", "pairwise_on_image", ["set", "inj_on"]], ["add", "theorem", "pairwise_eq_iff_exists_eq", ["set", "nonempty"]], ["add", "theorem", "pairwise_iff_exists_forall", ["set", "nonempty"]], ["del", "theorem", "pairwise_on_eq_iff_exists_eq", ["set", "nonempty"]], ["del", "theorem", "pairwise_on_iff_exists_forall", ["set", "nonempty"]], ["add", "theorem", "imp", ["set", "pairwise"]], ["add", "theorem", "imp_on", ["set", "pairwise"]], ["add", "theorem", "mono'", ["set", "pairwise"]], ["add", "theorem", "mono", ["set", "pairwise"]], ["add", "theorem", "on_injective", ["set", "pairwise"]], ["add", "theorem", "pairwise_Union", ["set"]], ["add", "theorem", "pairwise_disjoint_fiber", ["set"]], ["add", "theorem", "pairwise_disjoint_on_mono", ["set"]], ["add", "theorem", "pairwise_empty", ["set"]], ["add", "theorem", "pairwise_eq_iff_exists_eq", ["set"]], ["add", "theorem", "pairwise_iff_exists_forall", ["set"]], ["add", "theorem", "pairwise_insert", ["set"]], ["add", "theorem", "pairwise_insert_of_symmetric", ["set"]], ["add", "theorem", "pairwise_of_forall", ["set"]], ["del", "theorem", "imp", ["set", "pairwise_on"]], ["del", "theorem", "imp_on", ["set", "pairwise_on"]], ["del", "theorem", "mono'", ["set", "pairwise_on"]], ["del", "theorem", "mono", ["set", "pairwise_on"]], ["del", "theorem", "on_injective", ["set", "pairwise_on"]], ["del", "def", "pairwise_on", ["set"]], ["del", "theorem", "pairwise_on_Union", ["set"]], ["del", "theorem", "pairwise_on_disjoint_fiber", ["set"]], ["del", "theorem", "pairwise_on_disjoint_on_mono", ["set"]], ["del", "theorem", "pairwise_on_empty", ["set"]], ["del", "theorem", "pairwise_on_eq_iff_exists_eq", ["set"]], ["del", "theorem", "pairwise_on_iff_exists_forall", ["set"]], ["del", "theorem", "pairwise_on_insert", ["set"]], ["del", "theorem", "pairwise_on_insert_of_symmetric", ["set"]], ["del", "theorem", "pairwise_on_of_forall", ["set"]], ["del", "theorem", "pairwise_on_pair", ["set"]], ["del", "theorem", "pairwise_on_pair_of_symmetric", ["set"]], ["del", "theorem", "pairwise_on_sUnion", ["set"]], ["del", "theorem", "pairwise_on_singleton", ["set"]], ["del", "theorem", "pairwise_on_top", ["set"]], ["del", "theorem", "pairwise_on_union", ["set"]], ["del", "theorem", "pairwise_on_union_of_symmetric", ["set"]], ["del", "theorem", "pairwise_on_univ", ["set"]], ["add", "theorem", "pairwise_pair", ["set"]], ["add", "theorem", "pairwise_pair_of_symmetric", ["set"]], ["add", "theorem", "pairwise_sUnion", ["set"]], ["add", "theorem", "pairwise_singleton", ["set"]], ["add", "theorem", "pairwise_top", ["set"]], ["add", "theorem", "pairwise_union", ["set"]], ["add", "theorem", "pairwise_union_of_symmetric", ["set"]], ["add", "theorem", "pairwise_univ", ["set"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/covering/vitali.lean", "newPath": "src/measure_theory/covering/vitali.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "measure_bUnion_finset", ["measure_theory"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["mod", "def", "chain", ["zorn"]]]}, {"oldPath": "src/ring_theory/coprime/lemmas.lean", "newPath": "src/ring_theory/coprime/lemmas.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "is_closed_of_pairwise_le_dist", ["metric"]], ["del", "theorem", "is_closed_of_pairwise_on_le_dist", ["metric"]]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1635636660, "sha": "7ef32622", "message": "ci(.github/workflows/bors.yml): \"bors\" label for staging builds (#10064)", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/mk_build_yml.sh", "newPath": ".github/workflows/mk_build_yml.sh", "changes": []}]}, {"timestamp": 1635626745, "sha": "bdf38cf5", "message": "chore(*): rename int_pow to zpow (#10058)\nLeftovers of #9989", "changes": [{"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["del", "theorem", "exists_int_pow_near'", []], ["del", "theorem", "exists_int_pow_near", []], ["add", "theorem", "exists_zpow_near'", []], ["add", "theorem", "exists_zpow_near", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/zpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": []}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": [["del", "theorem", "nsmul_int_pow_two_pow_half", ["surreal"]], ["add", "theorem", "zsmul_pow_two_pow_half", ["surreal"]]]}]}, {"timestamp": 1635587140, "sha": "5ff850b9", "message": "feat(algebra/module/submodule_lattice): add `add_subgroup.to_int_submodule` (#10051)\nThis converts an `add_subgroup M` to a `submodule ℤ M`. We already have the analogous construction for `add_submonoid M`.", "changes": [{"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "theorem", "coe_to_int_submodule", ["add_subgroup"]], ["add", "def", "to_int_submodule", ["add_subgroup"]], ["add", "theorem", "to_int_submodule_symm", ["add_subgroup"]], ["add", "theorem", "to_int_submodule_to_add_subgroup", ["add_subgroup"]], ["add", "theorem", "to_add_subgroup_to_int_submodule", ["submodule"]]]}]}, {"timestamp": 1635582529, "sha": "d06bd9a4", "message": "feat(algebra/big_operators/finprod): add finprod_eq_of_bijective (#10048)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_comp", []], ["add", "theorem", "finprod_eq_of_bijective", []]]}]}, {"timestamp": 1635573846, "sha": "06b1d878", "message": "feat(algebra/group): add `commute.is_unit_mul_iff` (#10042)", "changes": [{"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": [["add", "theorem", "is_unit_mul_iff", ["commute"]], ["add", "theorem", "is_unit_mul_self_iff", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "is_unit_pos_pow_iff", []], ["add", "theorem", "is_unit_pow_succ_iff", []]]}]}, {"timestamp": 1635558312, "sha": "fcc158e9", "message": "chore(*): update to Lean-3.35.0c (#9988)\nMove `stream`, `rbtree`, and `rbmap` from core to `mathlib` and reflows some long lines. Rename some files to avoid name clashes.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rbmap/basic.lean", "changes": [["add", "def", "mk_rbmap", []], ["add", "def", "contains", ["rbmap"]], ["add", "def", "empty", ["rbmap"]], ["add", "def", "find", ["rbmap"]], ["add", "def", "find_entry", ["rbmap"]], ["add", "def", "fold", ["rbmap"]], ["add", "def", "from_list", ["rbmap"]], ["add", "def", "insert", ["rbmap"]], ["add", "def", "max", ["rbmap"]], ["add", "def", "min", ["rbmap"]], ["add", "def", "rbmap_lt_dec", ["rbmap"]], ["add", "def", "rev_fold", ["rbmap"]], ["add", "def", "to_list", ["rbmap"]], ["add", "def", "to_value", ["rbmap"]], ["add", "def", "rbmap", []], ["add", "def", "rbmap_lt", []], ["add", "def", "rbmap_of", []]]}, {"oldPath": null, "newPath": "src/data/rbmap/default.lean", "changes": [["add", "theorem", "constains_correct", ["rbmap"]], ["add", "theorem", "eq_leaf_of_max_eq_none", ["rbmap"]], ["add", "theorem", "eq_leaf_of_min_eq_none", ["rbmap"]], ["add", "theorem", "eq_none_of_to_value_eq_none", ["rbmap"]], ["add", "theorem", "eq_of_find_entry_some", ["rbmap"]], ["add", "theorem", "eq_or_mem_of_mem_ins", ["rbmap"]], ["add", "theorem", "eq_some_of_to_value_eq_some", ["rbmap"]], ["add", "theorem", "equiv_or_mem_of_mem_insert", ["rbmap"]], ["add", "theorem", "eqv_of_find_entry_some", ["rbmap"]], ["add", "theorem", "find_correct", ["rbmap"]], ["add", "theorem", "find_entry_correct", ["rbmap"]], ["add", "theorem", "find_entry_eq_find_entry_of_eqv", ["rbmap"]], ["add", "theorem", "find_entry_insert", ["rbmap"]], ["add", "theorem", "find_entry_insert_of_disj", ["rbmap"]], ["add", "theorem", "find_entry_insert_of_eqv", ["rbmap"]], ["add", "theorem", "find_entry_insert_of_ne", ["rbmap"]], ["add", "theorem", "find_entry_insert_of_not_eqv", ["rbmap"]], ["add", "theorem", "find_eq_find_of_eqv", ["rbmap"]], ["add", "theorem", "find_insert", ["rbmap"]], ["add", "theorem", "find_insert_of_disj", ["rbmap"]], ["add", "theorem", "find_insert_of_eqv", ["rbmap"]], ["add", "theorem", "find_insert_of_ne", ["rbmap"]], ["add", "theorem", "find_insert_of_not_eqv", ["rbmap"]], ["add", "theorem", "incomp_or_mem_of_mem_ins", ["rbmap"]], ["add", "theorem", "max_is_maximal", ["rbmap"]], ["add", "theorem", "max_is_maximal_of_total", ["rbmap"]], ["add", "theorem", "mem_insert", ["rbmap"]], ["add", "theorem", "mem_insert_of_equiv", ["rbmap"]], ["add", "theorem", "mem_insert_of_incomp", ["rbmap"]], ["add", "theorem", "mem_insert_of_mem", ["rbmap"]], ["add", "theorem", "mem_of_find_entry_some", ["rbmap"]], ["add", "theorem", "mem_of_find_some", ["rbmap"]], ["add", "theorem", "mem_of_max_eq", ["rbmap"]], ["add", "theorem", "mem_of_mem_of_eqv", ["rbmap"]], ["add", "theorem", "mem_of_min_eq", ["rbmap"]], ["add", "theorem", "min_is_minimal", ["rbmap"]], ["add", "theorem", "min_is_minimal_of_total", ["rbmap"]], ["add", "theorem", "not_mem_mk_rbmap", ["rbmap"]], ["add", "theorem", "not_mem_of_empty", ["rbmap"]], ["add", "theorem", "not_mem_of_find_entry_none", ["rbmap"]], ["add", "theorem", "not_mem_of_find_none", ["rbmap"]]]}, {"oldPath": null, "newPath": "src/data/rbtree/basic.lean", "changes": [["add", "theorem", "balanced", ["rbnode"]], ["add", "theorem", "depth_max'", ["rbnode"]], ["add", "theorem", "depth_max", ["rbnode"]], ["add", "theorem", "depth_min", ["rbnode"]], ["add", "inductive", "is_node_of", ["rbnode"]], ["add", "inductive", "is_red_black", ["rbnode"]], ["add", "inductive", "is_searchable", ["rbnode"]], ["add", "theorem", "is_searchable_none_high_of_is_searchable_some_high", ["rbnode"]], ["add", "theorem", "is_searchable_none_low_of_is_searchable_some_low", ["rbnode"]], ["add", "theorem", "is_searchable_of_incomp_of_is_searchable", ["rbnode"]], ["add", "theorem", "is_searchable_of_is_searchable_of_incomp", ["rbnode"]], ["add", "theorem", "is_searchable_some_high_of_is_searchable_of_lt", ["rbnode"]], ["add", "theorem", "is_searchable_some_low_of_is_searchable_of_lt", ["rbnode"]], ["add", "def", "lift", ["rbnode"]], ["add", "theorem", "lo_lt_hi", ["rbnode"]], ["add", "theorem", "lt_of_mem_left", ["rbnode"]], ["add", "theorem", "lt_of_mem_left_right", ["rbnode"]], ["add", "theorem", "lt_of_mem_right", ["rbnode"]], ["add", "theorem", "range", ["rbnode"]]]}, {"oldPath": null, "newPath": "src/data/rbtree/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rbtree/default_lt.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rbtree/find.lean", "changes": [["add", "theorem", "eqv_of_find_some", ["rbnode"]], ["add", "theorem", "induction", ["rbnode", "find"]], ["add", "theorem", "find_correct", ["rbnode"]], ["add", "theorem", "find_correct_exact", ["rbnode"]], ["add", "theorem", "find_eq_find_of_eqv", ["rbnode"]], ["add", "theorem", "mem_of_mem_exact", ["rbnode"]]]}, {"oldPath": null, "newPath": "src/data/rbtree/init.lean", "changes": [["add", "def", "mk_rbtree", []], ["add", "def", "balance1", ["rbnode"]], ["add", "def", "balance1_node", ["rbnode"]], ["add", "def", "balance2", ["rbnode"]], ["add", "def", "balance2_node", ["rbnode"]], ["add", "inductive", "color", ["rbnode"]], ["add", "def", "depth", ["rbnode"]], ["add", "def", "find", ["rbnode"]], ["add", "def", "fold", ["rbnode"]], ["add", "def", "get_color", ["rbnode"]], ["add", "def", "ins", ["rbnode"]], ["add", "def", "insert", ["rbnode"]], ["add", "def", "mem", ["rbnode"]], ["add", "def", "mem_exact", ["rbnode"]], ["add", "def", "mk_insert_result", ["rbnode"]], ["add", "def", "rev_fold", ["rbnode"]], ["add", "inductive", "well_formed", ["rbnode"]], ["add", "inductive", "rbnode", []], ["add", "def", "contains", ["rbtree"]], ["add", "def", "depth", ["rbtree"]], ["add", "def", "empty", ["rbtree"]], ["add", "def", "find", ["rbtree"]], ["add", "def", "fold", ["rbtree"]], ["add", "def", "from_list", ["rbtree"]], ["add", "def", "insert", ["rbtree"]], ["add", "def", "mem_exact", ["rbtree"]], ["add", "def", "rev_fold", ["rbtree"]], ["add", "def", "to_list", ["rbtree"]], ["add", "def", "rbtree", []], ["add", "def", "rbtree_of", []]]}, {"oldPath": null, "newPath": "src/data/rbtree/insert.lean", "changes": [["add", "theorem", "cases", ["rbnode", "balance"]], ["add", "theorem", "balance1_eq₁", ["rbnode"]], ["add", "theorem", "balance1_eq₂", ["rbnode"]], ["add", "theorem", "balance1_eq₃", ["rbnode"]], ["add", "theorem", "balance1_ne_leaf", ["rbnode"]], ["add", "theorem", "balance1_node_ne_leaf", ["rbnode"]], ["add", "theorem", "balance1_node_rb", ["rbnode"]], ["add", "theorem", "balance1_rb", ["rbnode"]], ["add", "theorem", "balance2_eq₁", ["rbnode"]], ["add", "theorem", "balance2_eq₂", ["rbnode"]], ["add", "theorem", "balance2_eq₃", ["rbnode"]], ["add", "theorem", "balance2_ne_leaf", ["rbnode"]], ["add", "theorem", "balance2_node_ne_leaf", ["rbnode"]], ["add", "theorem", "balance2_node_rb", ["rbnode"]], ["add", "theorem", "balance2_rb", ["rbnode"]], ["add", "theorem", "equiv_or_mem_of_mem_ins", ["rbnode"]], ["add", "theorem", "equiv_or_mem_of_mem_insert", ["rbnode"]], ["add", "theorem", "find_balance1_eqv", ["rbnode"]], ["add", "theorem", "find_balance1_gt", ["rbnode"]], ["add", "theorem", "find_balance1_lt", ["rbnode"]], ["add", "theorem", "find_balance1_node", ["rbnode"]], ["add", "theorem", "find_balance1_node_eqv", ["rbnode"]], ["add", "theorem", "find_balance1_node_gt", ["rbnode"]], ["add", "theorem", "find_balance1_node_lt", ["rbnode"]], ["add", "theorem", "find_balance2_eqv", ["rbnode"]], ["add", "theorem", "find_balance2_gt", ["rbnode"]], ["add", "theorem", "find_balance2_lt", ["rbnode"]], ["add", "theorem", "find_balance2_node", ["rbnode"]], ["add", "theorem", "find_balance2_node_eqv", ["rbnode"]], ["add", "theorem", "find_balance2_node_gt", ["rbnode"]], ["add", "theorem", "find_balance2_node_lt", ["rbnode"]], ["add", "theorem", "find_black_eq_find_red", ["rbnode"]], ["add", "theorem", "find_ins_of_disj", ["rbnode"]], ["add", "theorem", "find_ins_of_eqv", ["rbnode"]], ["add", "theorem", "find_insert_of_disj", ["rbnode"]], ["add", "theorem", "find_insert_of_eqv", ["rbnode"]], ["add", "theorem", "find_insert_of_not_eqv", ["rbnode"]], ["add", "theorem", "find_mk_insert_result", ["rbnode"]], ["add", "theorem", "find_red_of_gt", ["rbnode"]], ["add", "theorem", "find_red_of_incomp", ["rbnode"]], ["add", "theorem", "find_red_of_lt", ["rbnode"]], ["add", "theorem", "induction", ["rbnode", "ins"]], ["add", "theorem", "ins_ne_leaf", ["rbnode"]], ["add", "theorem", "ins_rb", ["rbnode"]], ["add", "def", "ins_rb_result", ["rbnode"]], ["add", "theorem", "insert_is_red_black", ["rbnode"]], ["add", "theorem", "insert_ne_leaf", ["rbnode"]], ["add", "theorem", "insert_rb", ["rbnode"]], ["add", "def", "insert_rb_result", ["rbnode"]], ["add", "inductive", "is_bad_red_black", ["rbnode"]], ["add", "theorem", "is_searchable_balance1", ["rbnode"]], ["add", "theorem", "is_searchable_balance1_node", ["rbnode"]], ["add", "theorem", "is_searchable_balance2", ["rbnode"]], ["add", "theorem", "is_searchable_balance2_node", ["rbnode"]], ["add", "theorem", "is_searchable_ins", ["rbnode"]], ["add", "theorem", "is_searchable_insert", ["rbnode"]], ["add", "theorem", "is_searchable_mk_insert_result", ["rbnode"]], ["add", "theorem", "ite_eq_of_not_lt", ["rbnode"]], ["add", "theorem", "mem_balance1_node_of_incomp", ["rbnode"]], ["add", "theorem", "mem_balance1_node_of_mem_left", ["rbnode"]], ["add", "theorem", "mem_balance1_node_of_mem_right", ["rbnode"]], ["add", "theorem", "mem_balance2_node_of_incomp", ["rbnode"]], ["add", "theorem", "mem_balance2_node_of_mem_left", ["rbnode"]], ["add", "theorem", "mem_balance2_node_of_mem_right", ["rbnode"]], ["add", "theorem", "mem_exact_balance1_node_of_mem_exact", ["rbnode"]], ["add", "theorem", "mem_exact_balance2_node_of_mem_exact", ["rbnode"]], ["add", "theorem", "mem_ins_of_incomp", ["rbnode"]], ["add", "theorem", "mem_ins_of_mem", ["rbnode"]], ["add", "theorem", "mem_insert_of_incomp", ["rbnode"]], ["add", "theorem", "mem_insert_of_mem", ["rbnode"]], ["add", "theorem", "mem_mk_insert_result", ["rbnode"]], ["add", "theorem", "mem_of_mem_mk_insert_result", ["rbnode"]], ["add", "theorem", "of_get_color_eq_red", ["rbnode"]], ["add", "theorem", "of_get_color_ne_red", ["rbnode"]], ["add", "theorem", "of_mem_balance1_node", ["rbnode"]], ["add", "theorem", "of_mem_balance2_node", ["rbnode"]], ["add", "theorem", "weak_trichotomous", ["rbnode"]]]}, {"oldPath": null, "newPath": "src/data/rbtree/main.lean", "changes": [["add", "theorem", "is_red_black_of_well_formed", ["rbnode"]], ["add", "theorem", "is_searchable_of_well_formed", ["rbnode"]], ["add", "theorem", "balanced", ["rbtree"]], ["add", "theorem", "contains_correct", ["rbtree"]], ["add", "theorem", "eq_leaf_of_max_eq_none", ["rbtree"]], ["add", "theorem", "eq_leaf_of_min_eq_none", ["rbtree"]], ["add", "theorem", "eq_of_find_some", ["rbtree"]], ["add", "theorem", "eq_or_mem_of_mem_ins", ["rbtree"]], ["add", "theorem", "equiv_or_mem_of_mem_insert", ["rbtree"]], ["add", "theorem", "eqv_of_find_some", ["rbtree"]], ["add", "theorem", "find_correct", ["rbtree"]], ["add", "theorem", "find_correct_exact", ["rbtree"]], ["add", "theorem", "find_correct_of_total", ["rbtree"]], ["add", "theorem", "find_eq_find_of_eqv", ["rbtree"]], ["add", "theorem", "find_insert", ["rbtree"]], ["add", "theorem", "find_insert_of_disj", ["rbtree"]], ["add", "theorem", "find_insert_of_eqv", ["rbtree"]], ["add", "theorem", "find_insert_of_ne", ["rbtree"]], ["add", "theorem", "find_insert_of_not_eqv", ["rbtree"]], ["add", "theorem", "incomp_or_mem_of_mem_ins", ["rbtree"]], ["add", "theorem", "insert_ne_mk_rbtree", ["rbtree"]], ["add", "theorem", "max_is_maximal", ["rbtree"]], ["add", "theorem", "mem_insert", ["rbtree"]], ["add", "theorem", "mem_insert_of_equiv", ["rbtree"]], ["add", "theorem", "mem_insert_of_incomp", ["rbtree"]], ["add", "theorem", "mem_insert_of_mem", ["rbtree"]], ["add", "theorem", "mem_of_find_some", ["rbtree"]], ["add", "theorem", "mem_of_max_eq", ["rbtree"]], ["add", "theorem", "mem_of_mem_of_eqv", ["rbtree"]], ["add", "theorem", "mem_of_min_eq", ["rbtree"]], ["add", "theorem", "min_is_minimal", ["rbtree"]], ["add", "theorem", "not_mem_mk_rbtree", ["rbtree"]], ["add", "theorem", "not_mem_of_empty", ["rbtree"]], ["add", "theorem", "not_mem_of_find_none", ["rbtree"]]]}, {"oldPath": null, "newPath": "src/data/rbtree/min_max.lean", "changes": [["add", "theorem", "eq_leaf_of_max_eq_none", ["rbnode"]], ["add", "theorem", "eq_leaf_of_min_eq_none", ["rbnode"]], ["add", "theorem", "max_is_maximal", ["rbnode"]], ["add", "theorem", "mem_of_max_eq", ["rbnode"]], ["add", "theorem", "mem_of_min_eq", ["rbnode"]], ["add", "theorem", "min_is_minimal", ["rbnode"]]]}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/stream/init.lean", "changes": [["add", "def", "all", ["stream"]], ["add", "theorem", "all_def", ["stream"]], ["add", "def", "any", ["stream"]], ["add", "theorem", "any_def", ["stream"]], ["add", "theorem", "append_append_stream", ["stream"]], ["add", "theorem", "append_approx_drop", ["stream"]], ["add", "def", "append_stream", ["stream"]], ["add", "theorem", "append_stream_head_tail", ["stream"]], ["add", "def", "apply", ["stream"]], ["add", "def", "approx", ["stream"]], ["add", "theorem", "approx_succ", ["stream"]], ["add", "theorem", "approx_zero", ["stream"]], ["add", "theorem", "bisim_simple", ["stream"]], ["add", "theorem", "coinduction", ["stream"]], ["add", "theorem", "composition", ["stream"]], ["add", "def", "cons", ["stream"]], ["add", "theorem", "cons_append_stream", ["stream"]], ["add", "theorem", "cons_nth_inits_core", ["stream"]], ["add", "def", "const", ["stream"]], ["add", "theorem", "const_eq", ["stream"]], ["add", "def", "corec'", ["stream"]], ["add", "theorem", "corec'_eq", ["stream"]], ["add", "def", "corec", ["stream"]], ["add", "theorem", "corec_def", ["stream"]], ["add", "theorem", "corec_eq", ["stream"]], ["add", "theorem", "corec_id_f_eq_iterate", ["stream"]], ["add", "theorem", "corec_id_id_eq_const", ["stream"]], ["add", "def", "corec_on", ["stream"]], ["add", "def", "cycle", ["stream"]], ["add", "theorem", "cycle_eq", ["stream"]], ["add", "theorem", "cycle_singleton", ["stream"]], ["add", "def", "drop", ["stream"]], ["add", "theorem", "drop_append_stream", ["stream"]], ["add", "theorem", "drop_const", ["stream"]], ["add", "theorem", "drop_drop", ["stream"]], ["add", "theorem", "drop_map", ["stream"]], ["add", "theorem", "drop_succ", ["stream"]], ["add", "theorem", "drop_zip", ["stream"]], ["add", "theorem", "eq_of_bisim", ["stream"]], ["add", "theorem", "eq_or_mem_of_mem_cons", ["stream"]], ["add", "def", "even", ["stream"]], ["add", "theorem", "even_cons_cons", ["stream"]], ["add", "theorem", "even_interleave", ["stream"]], ["add", "theorem", "even_tail", ["stream"]], ["add", "theorem", "exists_of_mem_map", ["stream"]], ["add", "def", "head", ["stream"]], ["add", "theorem", "head_cons", ["stream"]], ["add", "theorem", "head_even", ["stream"]], ["add", "theorem", "head_iterate", ["stream"]], ["add", "theorem", "head_map", ["stream"]], ["add", "theorem", "head_zip", ["stream"]], ["add", "theorem", "homomorphism", ["stream"]], ["add", "theorem", "identity", ["stream"]], ["add", "def", "inits", ["stream"]], ["add", "def", "inits_core", ["stream"]], ["add", "theorem", "inits_core_eq", ["stream"]], ["add", "theorem", "inits_eq", ["stream"]], ["add", "theorem", "inits_tail", ["stream"]], ["add", "theorem", "interchange", ["stream"]], ["add", "def", "interleave", ["stream"]], ["add", "theorem", "interleave_eq", ["stream"]], ["add", "theorem", "interleave_even_odd", ["stream"]], ["add", "theorem", "interleave_tail_tail", ["stream"]], ["add", "def", "is_bisimulation", ["stream"]], ["add", "def", "iterate", ["stream"]], ["add", "theorem", "iterate_eq", ["stream"]], ["add", "theorem", "iterate_id", ["stream"]], ["add", "def", "map", ["stream"]], ["add", "theorem", "map_append_stream", ["stream"]], ["add", "theorem", "map_cons", ["stream"]], ["add", "theorem", "map_const", ["stream"]], ["add", "theorem", "map_eq", ["stream"]], ["add", "theorem", "map_eq_apply", ["stream"]], ["add", "theorem", "map_id", ["stream"]], ["add", "theorem", "map_iterate", ["stream"]], ["add", "theorem", "map_map", ["stream"]], ["add", "theorem", "map_tail", ["stream"]], ["add", "theorem", "mem_append_stream_left", ["stream"]], ["add", "theorem", "mem_append_stream_right", ["stream"]], ["add", "theorem", "mem_cons", ["stream"]], ["add", "theorem", "mem_cons_of_mem", ["stream"]], ["add", "theorem", "mem_const", ["stream"]], ["add", "theorem", "mem_cycle", ["stream"]], ["add", "theorem", "mem_interleave_left", ["stream"]], ["add", "theorem", "mem_interleave_right", ["stream"]], ["add", "theorem", "mem_map", ["stream"]], ["add", "theorem", "mem_of_mem_even", ["stream"]], ["add", "theorem", "mem_of_mem_odd", ["stream"]], ["add", "theorem", "mem_of_nth_eq", ["stream"]], ["add", "def", "nats", ["stream"]], ["add", "theorem", "nats_eq", ["stream"]], ["add", "theorem", "nil_append_stream", ["stream"]], ["add", "def", "nth", ["stream"]], ["add", "theorem", "nth_approx", ["stream"]], ["add", "theorem", "nth_const", ["stream"]], ["add", "theorem", "nth_drop", ["stream"]], ["add", "theorem", "nth_even", ["stream"]], ["add", "theorem", "nth_inits", ["stream"]], ["add", "theorem", "nth_interleave_left", ["stream"]], ["add", "theorem", "nth_interleave_right", ["stream"]], ["add", "theorem", "nth_map", ["stream"]], ["add", "theorem", "nth_nats", ["stream"]], ["add", "theorem", "nth_odd", ["stream"]], ["add", "theorem", "nth_of_bisim", ["stream"]], ["add", "theorem", "nth_succ", ["stream"]], ["add", "theorem", "nth_succ_iterate", ["stream"]], ["add", "theorem", "nth_tails", ["stream"]], ["add", "theorem", "nth_unfolds_head_tail", ["stream"]], ["add", "theorem", "nth_zero_cons", ["stream"]], ["add", "theorem", "nth_zero_iterate", ["stream"]], ["add", "theorem", "nth_zip", ["stream"]], ["add", "def", "odd", ["stream"]], ["add", "theorem", "odd_eq", ["stream"]], ["add", "def", "pure", ["stream"]], ["add", "def", "tail", ["stream"]], ["add", "theorem", "tail_cons", ["stream"]], ["add", "theorem", "tail_const", ["stream"]], ["add", "theorem", "tail_drop", ["stream"]], ["add", "theorem", "tail_eq_drop", ["stream"]], ["add", "theorem", "tail_even", ["stream"]], ["add", "theorem", "tail_inits", ["stream"]], ["add", "theorem", "tail_interleave", ["stream"]], ["add", "theorem", "tail_iterate", ["stream"]], ["add", "theorem", "tail_map", ["stream"]], ["add", "theorem", "tail_zip", ["stream"]], ["add", "def", "tails", ["stream"]], ["add", "theorem", "tails_eq", ["stream"]], ["add", "theorem", "tails_eq_iterate", ["stream"]], ["add", "theorem", "take_theorem", ["stream"]], ["add", "def", "unfolds", ["stream"]], ["add", "theorem", "unfolds_eq", ["stream"]], ["add", "theorem", "unfolds_head_eq", ["stream"]], ["add", "def", "zip", ["stream"]], ["add", "theorem", "zip_eq", ["stream"]], ["add", "theorem", "zip_inits_tails", ["stream"]], ["add", "def", "stream", []]]}, {"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/tactic/derive_inhabited.lean", "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": "test/coinductive.lean", "newPath": "test/coinductive.lean", "changes": []}]}, {"timestamp": 1635536609, "sha": "c722dae6", "message": "chore(data/fintype/basic): add a few `infinite` instances (#10037)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "nonempty", ["infinite"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "repeat_injective", ["multiset"]]]}]}, {"timestamp": 1635536607, "sha": "4f053a56", "message": "feat(data/list): chain'_drop lemma (#10028)", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "drop", ["list", "chain'"]]]}]}, {"timestamp": 1635527524, "sha": "c5456607", "message": "chore(algebra/group_with_zero/basic): move `ring.inverse`, generalize and rename `inverse_eq_has_inv` (#10033)\nThis moves `ring.inverse` earlier in the import graph, since it's not about rings at all.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "inverse_eq_has_inv", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "inverse_eq_inv'", ["ring"]], ["add", "theorem", "inverse_eq_inv", ["ring"]], ["add", "theorem", "inverse_mul_cancel", ["ring"]], ["add", "theorem", "inverse_mul_cancel_left", ["ring"]], ["add", "theorem", "inverse_mul_cancel_right", ["ring"]], ["add", "theorem", "inverse_non_unit", ["ring"]], ["add", "theorem", "inverse_unit", ["ring"]], ["add", "theorem", "mul_inverse_cancel", ["ring"]], ["add", "theorem", "mul_inverse_cancel_left", ["ring"]], ["add", "theorem", "mul_inverse_cancel_right", ["ring"]], ["add", "theorem", "mul_inverse_rev", ["ring"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "inverse_mul_cancel", ["ring"]], ["del", "theorem", "inverse_mul_cancel_left", ["ring"]], ["del", "theorem", "inverse_mul_cancel_right", ["ring"]], ["del", "theorem", "inverse_non_unit", ["ring"]], ["del", "theorem", "inverse_unit", ["ring"]], ["del", "theorem", "mul_inverse_cancel", ["ring"]], ["del", "theorem", "mul_inverse_cancel_left", ["ring"]], ["del", "theorem", "mul_inverse_cancel_right", ["ring"]], ["del", "theorem", "mul_inverse_rev", ["ring"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}]}, {"timestamp": 1635518388, "sha": "e1bafaa4", "message": "feat(category_theory/limits/shapes/images): some explicit instances of has_image_map (#9977)", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "theorem", "inv_left", ["category_theory", "arrow"]], ["add", "theorem", "inv_right", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "of_arrow_iso", ["category_theory", "limits", "has_image"]], ["add", "def", "of_arrow_iso", ["category_theory", "limits", "image_factorisation"]], ["mod", "theorem", "fac_lift", ["category_theory", "limits", "is_image"]], ["add", "def", "of_arrow_iso", ["category_theory", "limits", "is_image"]], ["add", "def", "of_arrow_iso", ["category_theory", "limits", "mono_factorisation"]]]}]}, {"timestamp": 1635515587, "sha": "4f3443a8", "message": "feat(measure_theory/group/arithmetic): add a section about `opposite` (#10026)", "changes": [{"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["add", "theorem", "measurable_op", []], ["add", "theorem", "measurable_unop", []]]}]}, {"timestamp": 1635494681, "sha": "3f6174ba", "message": "fix(tactic/norm_cast): make push_cast discharger match the others (#10021)\ncloses #9822", "changes": [{"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["add", "theorem", "mytest", []]]}]}, {"timestamp": 1635470676, "sha": "4ce2a5f1", "message": "chore(algebra/module/submodule_lattice): lemmas about the trivial submodule (#10022)\nLemmas about the trivial submodule. Also move an existing lemma `exists_mem_ne_zero_of_ne_bot` about the trivial submodule from `linear_algebra/dimension` to `algebra/module/submodule_lattice`, since it doesn't use any facts about dimension.", "changes": [{"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "theorem", "eq_bot_of_subsingleton", ["submodule"]], ["add", "theorem", "exists_mem_ne_zero_of_ne_bot", ["submodule"]], ["mod", "theorem", "nonzero_mem_of_bot_lt", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "exists_mem_ne_zero_of_ne_bot", []]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1635470675, "sha": "7538f9b4", "message": "feat(data/list/defs): map_with_prefix_suffix and map_with_complement (#10020)\nAdds two list definitions: one that will be useful to me, and a generalization which may be useful to @semorrison", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "map_with_complement", ["list"]], ["add", "def", "map_with_prefix_suffix", ["list"]], ["add", "def", "map_with_prefix_suffix_aux", ["list"]]]}]}, {"timestamp": 1635470673, "sha": "c7f51395", "message": "chore(measure_theory): drop a few `measurable_set` assumptions (#9999)\nWe had an extra `measurable_set` assumption in (one of the copies of) Caratheodory. Also remove `measurable f` assumption in `is_finite_measure (map f μ)` and make it an instance.", "changes": [{"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "is_finite_measure_map", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_add_inter", ["measure_theory", "measure"]], ["del", "theorem", "measure_eq_inter_diff", ["measure_theory"]], ["add", "theorem", "measure_inter_add_diff", ["measure_theory"]], ["add", "theorem", "measure_union_add_inter'", ["measure_theory"]], ["mod", "theorem", "measure_union_add_inter", ["measure_theory"]]]}, {"oldPath": "src/probability_theory/density.lean", "newPath": "src/probability_theory/density.lean", "changes": []}]}, {"timestamp": 1635467595, "sha": "bdcb7310", "message": "feat(linear_algebra/matrix/adjugate): det_adjugate and adjugate_adjugate (#9991)\nThis also adds `matrix.mv_polynomial_X`", "changes": [{"oldPath": "src/linear_algebra/matrix/adjugate.lean", "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["add", "theorem", "map_adjugate", ["alg_hom"]], ["add", "theorem", "adjugate_adjugate'", ["matrix"]], ["add", "theorem", "adjugate_adjugate", ["matrix"]], ["add", "theorem", "det_adjugate", ["matrix"]], ["del", "theorem", "det_adjugate_eq_one", ["matrix"]], ["del", "theorem", "det_adjugate_of_cancel", ["matrix"]], ["del", "theorem", "det_adjugate_of_is_unit", ["matrix"]], ["add", "theorem", "det_smul_adjugate_adjugate", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/mv_polynomial.lean", "changes": [["add", "theorem", "det_mv_polynomial_X_ne_zero", ["matrix"]], ["add", "theorem", "mv_polynomial_X_map_eval₂", ["matrix"]], ["add", "theorem", "mv_polynomial_X_map_matrix_aeval", ["matrix"]], ["add", "theorem", "mv_polynomial_X_map_matrix_eval", ["matrix"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}]}, {"timestamp": 1635454105, "sha": "415da222", "message": "chore(topology,measure_theory): generalize a few instances (#9967)\n* Prove that `Π i : ι, π i` has second countable topology if `ι` is encodable and each `π i` has second countable topology.\n* Similarly for `borel_space`.\n* Preserve old instances about `fintype` because we don't have (and can't have) an instance `fintype ι → encodable ι`.", "changes": [{"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "surjective_restrict", ["subtype"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}]}, {"timestamp": 1635454104, "sha": "0cfae438", "message": "feat(archive/imo): IMO 2021 Q1 (#8432)\nFormalised solution to IMO 2021 Q1", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2021_q1.lean", "changes": [["add", "theorem", "IMO_2021_Q1", []], ["add", "theorem", "exists_finset_3_le_card_with_pairs_summing_to_squares", []], ["add", "theorem", "exists_numbers_in_interval", []], ["add", "theorem", "exists_triplet_summing_to_squares", []], ["add", "theorem", "lower_bound", []], ["add", "theorem", "radical_inequality", []], ["add", "theorem", "upper_bound", []]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "lt_or_lt_of_add_lt_add", []]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "exists_subset_or_subset_of_two_mul_lt_card", ["finset"]]]}]}, {"timestamp": 1635447468, "sha": "99a2d5bf", "message": "feat(ring_theory/adjoin_root): golf and generalize the algebra structure on `adjoin_root` (#10019)\nWe already have a more general version of this instance elsewhere, lets just reuse it.", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "algebra_map_eq'", ["adjoin_root"]]]}]}, {"timestamp": 1635447466, "sha": "18dce134", "message": "feat(data/finset/interval): Bounded intervals in locally finite orders are finite (#9960)\nA set which is bounded above and below is finite. A set which is bounded below in an `order_top` is finite. A set which is bounded above in an `order_bot` is finite.\nAlso provide the `order_dual` constructions for `bdd_stuff` and `locally_finite_order`.", "changes": [{"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["add", "theorem", "finite", ["bdd_above"]], ["add", "theorem", "finite", ["bdd_below"]], ["add", "theorem", "finite_of_bdd_above", ["bdd_below"]], ["add", "def", "fintype_of_mem_bounds", ["set"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "dual", ["bdd_above"]], ["add", "theorem", "dual", ["bdd_below"]], ["add", "theorem", "dual", ["is_glb"]], ["mod", "theorem", "lower_bounds_eq", ["is_glb"]], ["mod", "theorem", "nonempty", ["is_glb"]], ["mod", "theorem", "is_glb_lt_iff", []], ["add", "theorem", "dual", ["is_greatest"]], ["add", "theorem", "dual", ["is_least"]], ["add", "theorem", "dual", ["is_lub"]], ["mod", "theorem", "lt_is_glb_iff", []]]}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "theorem", "Icc_to_dual", []], ["add", "theorem", "Ico_to_dual", []], ["add", "theorem", "Ioc_to_dual", []], ["add", "theorem", "Ioo_to_dual", []]]}]}, {"timestamp": 1635447465, "sha": "17339204", "message": "feat(list): add some lemmas (#9873)\nAdd a few lemmas about lists.\nThese are helpful when manipulating lists.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "head'_append", ["list"]], ["add", "theorem", "last'_cons_cons", ["list"]], ["add", "theorem", "last'_eq_last_of_ne_nil", ["list"]], ["add", "theorem", "mem_last'_cons", ["list"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "drop", ["list", "pairwise"]]]}]}, {"timestamp": 1635440422, "sha": "e927aa4e", "message": "feat(data/set/function): restrict `dite/ite/piecewise/extend` (#10017)", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "restrict_dite", ["set"]], ["add", "theorem", "restrict_dite_compl", ["set"]], ["add", "theorem", "restrict_extend_compl_range", ["set"]], ["add", "theorem", "restrict_extend_range", ["set"]], ["add", "theorem", "restrict_ite", ["set"]], ["add", "theorem", "restrict_ite_compl", ["set"]], ["add", "theorem", "restrict_piecewise", ["set"]], ["add", "theorem", "restrict_piecewise_compl", ["set"]]]}]}, {"timestamp": 1635440420, "sha": "0d6548fc", "message": "chore(*): a few lemmas about `range_splitting (#10016)", "changes": [{"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": [["add", "theorem", "coe_of_injective_symm", ["equiv"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "coe_comp_range_factorization", ["set"]], ["add", "theorem", "preimage_range_splitting", ["set"]], ["add", "theorem", "right_inverse_range_splitting", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "right_inverse_of_injective", ["function", "left_inverse"]], ["add", "theorem", "right_inverse_of_surjective", ["function", "left_inverse"]]]}]}, {"timestamp": 1635440418, "sha": "b9ff26b5", "message": "chore(measure_theory/measure/measure_space): reorder, golf (#10015)\nMove `restrict_apply'` up and use it to golf some proofs. Drop an unneeded `measurable_set` assumption in 1 proof.", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_of_ae_restrict_of_ae_restrict_compl", ["measure_theory"]], ["mod", "theorem", "restrict_apply'", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_empty", ["measure_theory", "measure"]], ["add", "theorem", "restrict_eq_self'", ["measure_theory", "measure"]], ["del", "theorem", "restrict_eq_self_of_measurable_subset", ["measure_theory", "measure"]], ["del", "theorem", "restrict_eq_self_of_subset_of_measurable", ["measure_theory", "measure"]]]}]}, {"timestamp": 1635440416, "sha": "fd6f6816", "message": "feat(order/bounded_lattice): add `is_compl.le_sup_right_iff_inf_left_le` (#10014)\nThis lemma is a generalization of `is_compl.inf_left_eq_bot_iff`.\nAlso drop `inf_eq_bot_iff_le_compl` in favor of\n`is_compl.inf_left_eq_bot_iff` and add\n`set.subset_union_compl_iff_inter_subset`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subset_union_compl_iff_inter_subset", ["set"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["del", "theorem", "inf_eq_bot_iff_le_compl", []], ["add", "theorem", "inf_left_le_of_le_sup_right", ["is_compl"]], ["add", "theorem", "le_sup_right_iff_inf_left_le", ["is_compl"]]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1635440414, "sha": "22d32dcd", "message": "fix(field_theory/intermediate_field): use a better `algebra.smul` definition, and generalize (#10012)\nPreviously coe_smul was not true by `rfl`", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_smul", ["intermediate_field"]], ["add", "theorem", "lift2_algebra_map", ["intermediate_field"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1635440412, "sha": "fe76b5c0", "message": "feat(group_theory/subgroup/basic): `mul_mem_sup` (#10007)\nAdds `mul_mem_sup` and golfs a couple proofs that reprove this result.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "mul_mem_sup", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mul_mem_sup", ["submonoid"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1635440410, "sha": "c495ed61", "message": "move(data/set/pairwise): Move `set.pairwise_on` (#9986)\nThis moves `set.pairwise_on` to `data.set.pairwise`, where `pairwise` and `set.pairwise_disjoint` already are.", "changes": [{"oldPath": "src/analysis/box_integral/partition/basic.lean", "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "pairwise_on_eq_iff_exists_eq", ["set", "nonempty"]], ["del", "theorem", "pairwise_on_iff_exists_forall", ["set", "nonempty"]], ["del", "theorem", "imp", ["set", "pairwise_on"]], ["del", "theorem", "imp_on", ["set", "pairwise_on"]], ["del", "theorem", "mono'", ["set", "pairwise_on"]], ["del", "theorem", "mono", ["set", "pairwise_on"]], ["del", "def", "pairwise_on", ["set"]], ["del", "theorem", "pairwise_on_disjoint_on_mono", ["set"]], ["del", "theorem", "pairwise_on_empty", ["set"]], ["del", "theorem", "pairwise_on_eq_iff_exists_eq", ["set"]], ["del", "theorem", "pairwise_on_iff_exists_forall", ["set"]], ["del", "theorem", "pairwise_on_insert", ["set"]], ["del", "theorem", "pairwise_on_insert_of_symmetric", ["set"]], ["del", "theorem", "pairwise_on_of_forall", ["set"]], ["del", "theorem", "pairwise_on_pair", ["set"]], ["del", "theorem", "pairwise_on_pair_of_symmetric", ["set"]], ["del", "theorem", "pairwise_on_singleton", ["set"]], ["del", "theorem", "pairwise_on_top", ["set"]], ["del", "theorem", "pairwise_on_union", ["set"]], ["del", "theorem", "pairwise_on_union_of_symmetric", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["del", "theorem", "pairwise_on_image", ["set", "inj_on"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "bUnion_diff_bUnion_eq", ["set"]], ["del", "theorem", "pairwise_on_Union", ["set"]], ["del", "theorem", "pairwise_on_disjoint_fiber", ["set"]], ["del", "theorem", "pairwise_on_sUnion", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["mod", "theorem", "mono", ["pairwise"]], ["mod", "theorem", "pairwise_on", ["pairwise"]], ["mod", "def", "pairwise", []], ["mod", "theorem", "pairwise_disjoint_fiber", []], ["mod", "theorem", "pairwise_disjoint_on", []], ["mod", "theorem", "pairwise_disjoint_on_bool", []], ["mod", "theorem", "pairwise_on_bool", []], ["add", "theorem", "bUnion_diff_bUnion_eq", ["set"]], ["add", "theorem", "pairwise_on_image", ["set", "inj_on"]], ["add", "theorem", "pairwise_on_eq_iff_exists_eq", ["set", "nonempty"]], ["add", "theorem", "pairwise_on_iff_exists_forall", ["set", "nonempty"]], ["add", "theorem", "imp", ["set", "pairwise_on"]], ["add", "theorem", "imp_on", ["set", "pairwise_on"]], ["add", "theorem", "mono'", ["set", "pairwise_on"]], ["add", "theorem", "mono", ["set", "pairwise_on"]], ["mod", "theorem", "on_injective", ["set", "pairwise_on"]], ["add", "def", "pairwise_on", ["set"]], ["add", "theorem", "pairwise_on_Union", ["set"]], ["add", "theorem", "pairwise_on_disjoint_fiber", ["set"]], ["add", "theorem", "pairwise_on_disjoint_on_mono", ["set"]], ["add", "theorem", "pairwise_on_empty", ["set"]], ["add", "theorem", "pairwise_on_eq_iff_exists_eq", ["set"]], ["add", "theorem", "pairwise_on_iff_exists_forall", ["set"]], ["add", "theorem", "pairwise_on_insert", ["set"]], ["add", "theorem", "pairwise_on_insert_of_symmetric", ["set"]], ["add", "theorem", "pairwise_on_of_forall", ["set"]], ["add", "theorem", "pairwise_on_pair", ["set"]], ["add", "theorem", "pairwise_on_pair_of_symmetric", ["set"]], ["add", "theorem", "pairwise_on_sUnion", ["set"]], ["add", "theorem", "pairwise_on_singleton", ["set"]], ["add", "theorem", "pairwise_on_top", ["set"]], ["add", "theorem", "pairwise_on_union", ["set"]], ["add", "theorem", "pairwise_on_union_of_symmetric", ["set"]], ["mod", "theorem", "pairwise_on_univ", ["set"]], ["mod", "theorem", "pairwise_on", ["symmetric"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}]}, {"timestamp": 1635440408, "sha": "628f418d", "message": "feat(computability/tm_to_partrec): prove finiteness (#6955)\nThe proof in this file was incomplete, and I finally found the time to\nfinish it. `tm_to_partrec.lean` constructs a turing machine that can\nsimulate a given partial recursive function. Previously, the functional\ncorrectness of this machine was proven, but it uses an infinite state\nspace so it is not a priori obvious that it is in fact a true (finite)\nturing machine, which is important for the Church-Turing theorem. This\nPR adds a proof that the machine is in fact finite.", "changes": [{"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": [["add", "def", "code_supp'", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp'_self", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp'_supports", ["turing", "partrec_to_TM2"]], ["add", "def", "code_supp", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_case", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_comp", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_cons", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_fix", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_self", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_succ", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_supports", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_tail", ["turing", "partrec_to_TM2"]], ["add", "theorem", "code_supp_zero", ["turing", "partrec_to_TM2"]], ["add", "def", "cont_supp", ["turing", "partrec_to_TM2"]], ["add", "theorem", "cont_supp_comp", ["turing", "partrec_to_TM2"]], ["add", "theorem", "cont_supp_cons₁", ["turing", "partrec_to_TM2"]], ["add", "theorem", "cont_supp_cons₂", ["turing", "partrec_to_TM2"]], ["add", "theorem", "cont_supp_fix", ["turing", "partrec_to_TM2"]], ["add", "theorem", "cont_supp_halt", ["turing", "partrec_to_TM2"]], ["add", "theorem", "cont_supp_supports", ["turing", "partrec_to_TM2"]], ["add", "theorem", "head_supports", ["turing", "partrec_to_TM2"]], ["add", "theorem", "ret_supports", ["turing", "partrec_to_TM2"]], ["add", "def", "supports", ["turing", "partrec_to_TM2"]], ["add", "theorem", "supports_bUnion", ["turing", "partrec_to_TM2"]], ["add", "theorem", "supports_insert", ["turing", "partrec_to_TM2"]], ["add", "theorem", "supports_singleton", ["turing", "partrec_to_TM2"]], ["add", "theorem", "supports_union", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_normal_supports", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_stmts₁", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_stmts₁_self", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_stmts₁_supports'", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_stmts₁_supports", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_stmts₁_trans", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_supports", ["turing", "partrec_to_TM2"]], ["add", "def", "supports", ["turing", "partrec_to_TM2", "Λ'"]]]}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "bUnion_subset", ["finset"]], ["add", "theorem", "inter_left_idem", ["finset"]], ["add", "theorem", "inter_right_idem", ["finset"]], ["add", "theorem", "union_left_idem", ["finset"]], ["add", "theorem", "union_right_idem", ["finset"]], ["add", "theorem", "union_subset_left", ["finset"]], ["add", "theorem", "union_subset_right", ["finset"]]]}]}, {"timestamp": 1635434035, "sha": "c8d14294", "message": "feat(data/{finset,multiset}/locally_finite): Simple interval lemmas (#9877)\n`(finset/multiset).image_add_(left/right)_Ixx` and `multiset.nodup_Ixx`", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["mod", "theorem", "prod_Ico_add", ["finset"]], ["mod", "theorem", "sum_Ico_add", ["finset"]]]}, {"oldPath": "src/data/finset/locally_finite.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": [["del", "theorem", "image_add_const_Icc", ["finset"]], ["del", "theorem", "image_add_const_Ico", ["finset"]], ["del", "theorem", "image_add_const_Ioc", ["finset"]], ["del", "theorem", "image_add_const_Ioo", ["finset"]], ["add", "theorem", "image_add_left_Icc", ["finset"]], ["add", "theorem", "image_add_left_Ico", ["finset"]], ["add", "theorem", "image_add_left_Ioc", ["finset"]], ["add", "theorem", "image_add_left_Ioo", ["finset"]], ["add", "theorem", "image_add_right_Icc", ["finset"]], ["add", "theorem", "image_add_right_Ico", ["finset"]], ["add", "theorem", "image_add_right_Ioc", ["finset"]], ["add", "theorem", "image_add_right_Ioo", ["finset"]]]}, {"oldPath": "src/data/multiset/locally_finite.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": [["del", "theorem", "map_add_const_Icc", ["multiset"]], ["del", "theorem", "map_add_const_Ioc", ["multiset"]], ["del", "theorem", "map_add_const_Ioo", ["multiset"]], ["add", "theorem", "map_add_left_Icc", ["multiset"]], ["add", "theorem", "map_add_left_Ioc", ["multiset"]], ["add", "theorem", "map_add_left_Ioo", ["multiset"]], ["add", "theorem", "map_add_right_Icc", ["multiset"]], ["add", "theorem", "map_add_right_Ioc", ["multiset"]], ["add", "theorem", "map_add_right_Ioo", ["multiset"]], ["add", "theorem", "nodup_Icc", ["multiset"]], ["add", "theorem", "nodup_Ioc", ["multiset"]], ["add", "theorem", "nodup_Ioo", ["multiset"]]]}]}, {"timestamp": 1635424871, "sha": "acbb2a53", "message": "feat(analysis/normed_space/pi_Lp): use typeclass inference for `1 ≤ p` (#9922)\nIn `measure_theory.Lp`, the exponent `(p : ℝ≥0∞)` is an explicit hypothesis, and typeclass inference finds `[fact (1 ≤ p)]` silently (with the help of some pre-built `fact_one_le_two_ennreal` etc for specific use cases).\nCurrently, in `pi_Lp`, the fact that `(hp : 1 ≤ p)` must be provided explicitly. I propose changing over to the `fact` system as used `measure_theory.Lp` -- I think it looks a bit prettier in typical use cases.", "changes": [{"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "theorem", "fact_one_le_one_real", []], ["add", "theorem", "fact_one_le_two_real", []], ["mod", "def", "emetric_aux", ["pi_Lp"]], ["mod", "theorem", "lipschitz_with_equiv", ["pi_Lp"]], ["mod", "theorem", "norm_eq", ["pi_Lp"]], ["mod", "theorem", "norm_eq_of_nat", ["pi_Lp"]], ["mod", "def", "pseudo_emetric_aux", ["pi_Lp"]], ["mod", "def", "pi_Lp", []]]}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}]}, {"timestamp": 1635413084, "sha": "b0349aa9", "message": "chore(measure_theory): a `continuous_map` is measurable (#9998)\nAlso move the proof of `homeomorph.measurable` up and use it in the\ndefinition of `homeomorph.to_measurable_equiv`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "measurable", ["continuous_map"]], ["del", "theorem", "measurable", ["homeomorph"]]]}]}, {"timestamp": 1635413083, "sha": "73423cf9", "message": "feat(measure/measurable_space): add `measurable_equiv.of_unique_of_unique` (#9968)\nAlso fix a typo in a lemma name: `measurable_equiv.measurable_coe_iff` → `measurable_comp_iff`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "def", "of_unique_of_unique", ["measurable_equiv"]]]}]}, {"timestamp": 1635413081, "sha": "7f2b8064", "message": "feat(analysis/inner_product_space/dual): complex Riesz representation theorem (#9924)\nNow that we have conjugate-linear maps, the Riesz representation theorem can be stated in a form that works over both `ℝ` and `ℂ`, as the construction of a conjugate-linear isometric equivalence from a complete inner product space `E` to its dual.", "changes": [{"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["del", "theorem", "norm_to_dual'_apply", ["inner_product_space"]], ["del", "def", "to_dual'", ["inner_product_space"]], ["del", "theorem", "to_dual'_apply", ["inner_product_space"]], ["del", "theorem", "to_dual'_isometry", ["inner_product_space"]], ["del", "theorem", "to_dual'_surjective", ["inner_product_space"]], ["mod", "def", "to_dual", ["inner_product_space"]], ["mod", "theorem", "to_dual_apply", ["inner_product_space"]], ["mod", "def", "to_dual_map", ["inner_product_space"]], ["mod", "theorem", "to_dual_map_apply", ["inner_product_space"]]]}]}, {"timestamp": 1635404252, "sha": "f78b7398", "message": "feat(category_theory/arrow): is_iso, mono, epi instances for maps between arrows (#9976)", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "theorem", "is_iso_of_iso_left_of_is_iso_right", ["category_theory", "arrow"]]]}]}, {"timestamp": 1635404250, "sha": "8159af67", "message": "feat(measure_theory/construction/borel_space): two measures are equal if they agree on closed-open intervals (#9396)", "changes": [{"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": [["add", "theorem", "Union_Ico_eq_Iio_self_iff", ["set"]], ["add", "theorem", "Union_Ioc_eq_Ioi_self_iff", ["set"]], ["add", "theorem", "bUnion_Ico_eq_Iio_self_iff", ["set"]], ["add", "theorem", "bUnion_Ioc_eq_Ioi_self_iff", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "borel_eq_generate_Iio", []], ["del", "theorem", "borel_eq_generate_Ioi", []], ["add", "theorem", "borel_eq_generate_from_Ico", []], ["add", "theorem", "borel_eq_generate_from_Iio", []], ["add", "theorem", "borel_eq_generate_from_Ioc", []], ["add", "theorem", "borel_eq_generate_from_Ioi", []], ["add", "theorem", "bsupr_measure_Iic", []], ["add", "theorem", "borel_eq_generate_from_Ico_mem", ["dense"]], ["add", "theorem", "borel_eq_generate_from_Ico_mem_aux", ["dense"]], ["add", "theorem", "borel_eq_generate_from_Ioc_mem", ["dense"]], ["add", "theorem", "borel_eq_generate_from_Ioc_mem_aux", ["dense"]], ["add", "theorem", "generate_from_Ico_mem_le_borel", []], ["del", "theorem", "is_pi_system_Ioo", []], ["del", "theorem", "is_pi_system_Ioo_mem", []], ["add", "theorem", "ext_of_Ici", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_Ico'", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_Ico", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_Ico_finite", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_Iic", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_Ioc'", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_Ioc", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_Ioc_finite", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "generate_from_le_generate_from", ["measurable_space"]], ["add", "theorem", "generate_from_mono", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": [["add", "theorem", "is_pi_system_Icc", []], ["add", "theorem", "is_pi_system_Icc_mem", []], ["add", "theorem", "is_pi_system_Ico", []], ["add", "theorem", "is_pi_system_Ico_mem", []], ["add", "theorem", "is_pi_system_Iio", []], ["add", "theorem", "is_pi_system_Ioc", []], ["add", "theorem", "is_pi_system_Ioc_mem", []], ["add", "theorem", "is_pi_system_Ioi", []], ["add", "theorem", "is_pi_system_Ioo", []], ["add", "theorem", "is_pi_system_Ioo_mem", []], ["add", "theorem", "is_pi_system_Ixx", []], ["add", "theorem", "is_pi_system_Ixx_mem", []], ["add", "theorem", "is_pi_system_image_Iio", []], ["add", "theorem", "is_pi_system_image_Ioi", []]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "exists_between", ["dense"]], ["add", "theorem", "exists_ge'", ["dense"]], ["add", "theorem", "exists_ge", ["dense"]], ["add", "theorem", "exists_gt", ["dense"]], ["add", "theorem", "exists_le'", ["dense"]], ["add", "theorem", "exists_le", ["dense"]], ["add", "theorem", "exists_lt", ["dense"]], ["add", "theorem", "order_dual", ["dense"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "exists_countable_dense_subset_bot_top", ["dense"]], ["add", "theorem", "exists_countable_dense_bot_top", []]]}]}, {"timestamp": 1635396638, "sha": "468a9d56", "message": "chore(scripts): update nolints.txt (#10013)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1635396637, "sha": "bcaeb57a", "message": "fix(data/equiv/encodable): turn `unique.encodable` into a `def` (#10006)", "changes": [{"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": [["add", "def", "encodable", ["unique"]]]}]}, {"timestamp": 1635388620, "sha": "9db72700", "message": "chore(*): rename gsmul to zsmul and gmultiples to zmultiples (#10010)\nThis is consistent with an earlier rename from `gpow` to `zpow`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["del", "theorem", "gsmul_mem", ["subalgebra"]], ["add", "theorem", "zsmul_mem", ["subalgebra"]]]}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["del", "theorem", "gsmul_sum", ["finset"]], ["add", "theorem", "zsmul_sum", ["finset"]]]}, {"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["del", "def", "gsmul_rec", []], ["add", "def", "zsmul_rec", []]]}, {"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "of_add_gsmul", []], ["add", "theorem", "of_add_zsmul", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "abs_gsmul", []], ["add", "theorem", "abs_zsmul", []], ["del", "theorem", "add_gsmul", []], ["del", "theorem", "map_gsmul", ["add_monoid_hom"]], ["add", "theorem", "map_zsmul", ["add_monoid_hom"]], ["del", "theorem", "add_one_gsmul", []], ["add", "theorem", "add_one_zsmul", []], ["add", "theorem", "add_zsmul", []], ["del", "theorem", "bit0_gsmul", []], ["add", "theorem", "bit0_zsmul", []], ["del", "theorem", "bit1_gsmul", []], ["add", "theorem", "bit1_zsmul", []], ["del", "def", "gmultiples_add_hom", []], ["del", "theorem", "gmultiples_add_hom_apply", []], ["del", "theorem", "gmultiples_add_hom_symm_apply", []], ["del", "def", "gmultiples_hom", []], ["del", "theorem", "gmultiples_hom_apply", []], ["del", "theorem", "gmultiples_hom_symm_apply", []], ["del", "theorem", "gsmul_add_comm", []], ["del", "theorem", "gsmul_eq_gsmul_iff'", []], ["del", "theorem", "gsmul_eq_mul'", []], ["del", "theorem", "gsmul_eq_mul", []], ["del", "theorem", "gsmul_int_int", []], ["del", "theorem", "gsmul_int_one", []], ["del", "theorem", "gsmul_le_gsmul'", []], ["del", "theorem", "gsmul_le_gsmul", []], ["del", "theorem", "gsmul_le_gsmul_iff'", []], ["del", "theorem", "gsmul_le_gsmul_iff", []], ["del", "theorem", "gsmul_lt_gsmul'", []], ["del", "theorem", "gsmul_lt_gsmul", []], ["del", "theorem", "gsmul_lt_gsmul_iff'", []], ["del", "theorem", "gsmul_lt_gsmul_iff", []], ["del", "theorem", "gsmul_mono_left", []], ["del", "theorem", "gsmul_mono_right", []], ["del", "theorem", "gsmul_mul'", []], ["del", "theorem", "gsmul_one", []], ["del", "theorem", "gsmul_pos", []], ["del", "theorem", "gsmul_right_inj", []], ["del", "theorem", "gsmul_right_injective", []], ["del", "theorem", "gsmul_strict_mono_left", []], ["del", "theorem", "gsmul_strict_mono_right", []], ["del", "theorem", "mul_gsmul", []], ["del", "theorem", "mul_gsmul_assoc", []], ["del", "theorem", "mul_gsmul_left", []], ["add", "theorem", "mul_zsmul", []], ["add", "theorem", "mul_zsmul_assoc", []], ["add", "theorem", "mul_zsmul_left", []], ["del", "theorem", "one_add_gsmul", []], ["add", "theorem", "one_add_zsmul", []], ["del", "theorem", "sub_gsmul", []], ["add", "theorem", "sub_zsmul", []], ["add", "def", "zmultiples_add_hom", []], ["add", "theorem", "zmultiples_add_hom_apply", []], ["add", "theorem", "zmultiples_add_hom_symm_apply", []], ["add", "def", "zmultiples_hom", []], ["add", "theorem", "zmultiples_hom_apply", []], ["add", "theorem", "zmultiples_hom_symm_apply", []], ["add", "theorem", "zsmul_add_comm", []], ["add", "theorem", "zsmul_eq_mul'", []], ["add", "theorem", "zsmul_eq_mul", []], ["add", "theorem", "zsmul_eq_zsmul_iff'", []], ["add", "theorem", "zsmul_int_int", []], ["add", "theorem", "zsmul_int_one", []], ["add", "theorem", "zsmul_le_zsmul'", []], ["add", "theorem", "zsmul_le_zsmul", []], ["add", "theorem", "zsmul_le_zsmul_iff'", []], ["add", "theorem", "zsmul_le_zsmul_iff", []], ["add", "theorem", "zsmul_lt_zsmul'", []], ["add", "theorem", "zsmul_lt_zsmul", []], ["add", "theorem", "zsmul_lt_zsmul_iff'", []], ["add", "theorem", "zsmul_lt_zsmul_iff", []], ["add", "theorem", "zsmul_mono_left", []], ["add", "theorem", "zsmul_mono_right", []], ["add", "theorem", "zsmul_mul'", []], ["add", "theorem", "zsmul_one", []], ["add", "theorem", "zsmul_pos", []], ["add", "theorem", "zsmul_right_inj", []], ["add", "theorem", "zsmul_right_injective", []], ["add", "theorem", "zsmul_strict_mono_left", []], ["add", "theorem", "zsmul_strict_mono_right", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": [["del", "theorem", "iterate_map_gsmul", ["add_monoid_hom"]], ["add", "theorem", "iterate_map_zsmul", ["add_monoid_hom"]], ["del", "theorem", "iterate_map_gsmul", ["ring_hom"]], ["add", "theorem", "iterate_map_zsmul", ["ring_hom"]]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "theorem", "gsmul_lie", []], ["del", "theorem", "lie_gsmul", []], ["add", "theorem", "lie_zsmul", []], ["add", "theorem", "zsmul_lie", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "gsmul_eq_smul_cast", []], ["del", "theorem", "int_smul_eq_gsmul", []], ["add", "theorem", "int_smul_eq_zsmul", []], ["add", "theorem", "zsmul_eq_smul_cast", []]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["del", "theorem", "gsmul", ["function", "periodic"]], ["del", "theorem", "gsmul_eq", ["function", "periodic"]], ["del", "theorem", "gsmul_sub_eq", ["function", "periodic"]], ["del", "theorem", "sub_gsmul_eq", ["function", "periodic"]], ["add", "theorem", "sub_zsmul_eq", ["function", "periodic"]], ["add", "theorem", "zsmul", ["function", "periodic"]], ["add", "theorem", "zsmul_eq", ["function", "periodic"]], ["add", "theorem", "zsmul_sub_eq", ["function", "periodic"]]]}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["del", "theorem", "star_gsmul", []], ["add", "theorem", "star_zsmul", []]]}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "nnnorm_gsmul_le", []], ["add", "theorem", "nnnorm_zsmul_le", []], ["del", "theorem", "norm_gsmul_le", []], ["add", "theorem", "norm_zsmul_le", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["del", "theorem", "coe_int_mul_eq_gsmul", ["real", "angle"]], ["add", "theorem", "coe_int_mul_eq_zsmul", ["real", "angle"]]]}, {"oldPath": "src/category_theory/linear/default.lean", "newPath": "src/category_theory/linear/default.lean", "changes": []}, {"oldPath": "src/category_theory/linear/linear_functor.lean", "newPath": "src/category_theory/linear/linear_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["del", "theorem", "map_gsmul", ["category_theory", "functor"]], ["add", "theorem", "map_zsmul", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["del", "theorem", "comp_gsmul", ["category_theory", "preadditive"]], ["add", "theorem", "comp_zsmul", ["category_theory", "preadditive"]], ["del", "theorem", "gsmul_comp", ["category_theory", "preadditive"]], ["add", "theorem", "zsmul_comp", ["category_theory", "preadditive"]]]}, {"oldPath": "src/category_theory/preadditive/functor_category.lean", "newPath": "src/category_theory/preadditive/functor_category.lean", "changes": [["del", "theorem", "app_gsmul", ["category_theory", "nat_trans"]], ["add", "theorem", "app_zsmul", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/quotient.lean", "newPath": "src/data/zmod/quotient.lean", "changes": [["del", "def", "quotient_gmultiples_equiv_zmod", ["int"]], ["del", "def", "quotient_gmultiples_nat_equiv_zmod", ["int"]], ["add", "def", "quotient_zmultiples_equiv_zmod", ["int"]], ["add", "def", "quotient_zmultiples_nat_equiv_zmod", ["int"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["del", "theorem", "gsmul_mem", ["intermediate_field"]], ["add", "theorem", "zsmul_mem", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["del", "theorem", "gsmul_mem", ["subfield"]], ["add", "theorem", "zsmul_mem", ["subfield"]]]}, {"oldPath": "src/group_theory/archimedean.lean", "newPath": "src/group_theory/archimedean.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": [["del", "theorem", "support_gsmul", ["free_abelian_group"]], ["add", "theorem", "support_zsmul", ["free_abelian_group"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "add_order_eq_card_gmultiples", []], ["add", "theorem", "add_order_eq_card_zmultiples", []], ["del", "theorem", "exists_gsmul_eq_zero", []], ["add", "theorem", "exists_zsmul_eq_zero", []], ["del", "theorem", "fin_equiv_gmultiples_apply", []], ["del", "theorem", "fin_equiv_gmultiples_symm_apply", []], ["add", "theorem", "fin_equiv_zmultiples_apply", []], ["add", "theorem", "fin_equiv_zmultiples_symm_apply", []], ["del", "theorem", "gmultiples_equiv_gmultiples_apply", []], ["del", "theorem", "gsmul_eq_mod_add_order_of", []], ["del", "theorem", "mem_gmultiples_iff_mem_range_add_order_of", []], ["del", "theorem", "mem_multiples_iff_mem_gmultiples", []], ["add", "theorem", "mem_multiples_iff_mem_zmultiples", []], ["add", "theorem", "mem_zmultiples_iff_mem_range_add_order_of", []], ["del", "theorem", "multiples_eq_gmultiples", []], ["add", "theorem", "multiples_eq_zmultiples", []], ["add", "theorem", "zmultiples_equiv_zmultiples_apply", []], ["add", "theorem", "zsmul_eq_mod_add_order_of", []]]}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "theorem", "coe_gsmul", ["add_subgroup"]], ["add", "theorem", "coe_zsmul", ["add_subgroup"]], ["del", "def", "gmultiples", ["add_subgroup"]], ["del", "theorem", "gmultiples_subset", ["add_subgroup"]], ["del", "theorem", "range_gmultiples_hom", ["add_subgroup"]], ["add", "theorem", "range_zmultiples_hom", ["add_subgroup"]], ["add", "def", "zmultiples", ["add_subgroup"]], ["add", "theorem", "zmultiples_subset", ["add_subgroup"]], ["del", "theorem", "mem_gmultiples_iff", ["int"]], ["add", "theorem", "mem_zmultiples_iff", ["int"]], ["del", "theorem", "of_add_image_gmultiples_eq_zpowers_of_add", []], ["add", "theorem", "of_add_image_zmultiples_eq_zpowers_of_add", []], ["del", "theorem", "of_mul_image_zpowers_eq_gmultiples_of_mul", []], ["add", "theorem", "of_mul_image_zpowers_eq_zmultiples_of_mul", []]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["del", "theorem", "gmultiples_nat_abs", ["int"]], ["add", "theorem", "zmultiples_nat_abs", ["int"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["del", "theorem", "gsmul", ["is_integral"]], ["add", "theorem", "zsmul", ["is_integral"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["del", "theorem", "gsmul_mem", ["subring"]], ["add", "theorem", "zsmul_mem", ["subring"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": [["del", "theorem", "unfold_gsmul", ["tactic", "abel"]], ["add", "theorem", "unfold_zsmul", ["tactic", "abel"]]]}, {"oldPath": "src/tactic/noncomm_ring.lean", "newPath": "src/tactic/noncomm_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["del", "theorem", "gsmul", ["continuous_linear_map", "continuous"]], ["add", "theorem", "zsmul", ["continuous_linear_map", "continuous"]], ["del", "theorem", "continuous_gsmul", ["continuous_linear_map"]], ["add", "theorem", "continuous_zsmul", ["continuous_linear_map"]]]}]}, {"timestamp": 1635366074, "sha": "d360f3cb", "message": "feat(linear_algebra/free_module/finite/rank): add linear_algebra/free_module/finite/rank (#9832)\nA basic API for rank of free modules.\n- [x] depends on: #9821", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_self", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/free_module/finite/rank.lean", "changes": [["add", "theorem", "finrank_direct_sum", ["module", "free"]], ["add", "theorem", "finrank_eq_card_choose_basis_index", ["module", "free"]], ["add", "theorem", "finrank_eq_rank", ["module", "free"]], ["add", "theorem", "finrank_finsupp", ["module", "free"]], ["add", "theorem", "finrank_linear_hom", ["module", "free"]], ["add", "theorem", "finrank_matrix", ["module", "free"]], ["add", "theorem", "finrank_pi", ["module", "free"]], ["add", "theorem", "finrank_pi_fintype", ["module", "free"]], ["add", "theorem", "finrank_prod", ["module", "free"]], ["add", "theorem", "finrank_tensor_product", ["module", "free"]], ["add", "theorem", "rank_lt_omega", ["module", "free"]]]}, {"oldPath": "src/linear_algebra/free_module/rank.lean", "newPath": "src/linear_algebra/free_module/rank.lean", "changes": [["mod", "theorem", "rank_direct_sum", ["module", "free"]], ["add", "theorem", "rank_matrix''", ["module", "free"]], ["add", "theorem", "rank_matrix'", ["module", "free"]], ["add", "theorem", "rank_matrix", ["module", "free"]], ["add", "theorem", "rank_pi_fintype", ["module", "free"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "to_nat_add_of_lt_omega", ["cardinal"]], ["mod", "theorem", "to_nat_mul", ["cardinal"]]]}]}, {"timestamp": 1635356852, "sha": "8ce5da4b", "message": "feat(algebra/order/archimedean): a few more lemmas (#9997)\nProve that `a + m • b ∈ Ioc c (c + b)` for some `m : ℤ`, and similarly for `Ico`.\nAlso move some lemmas out of a namespace.", "changes": [{"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": [["add", "theorem", "exists_add_int_smul_mem_Ico", []], ["add", "theorem", "exists_add_int_smul_mem_Ioc", []], ["add", "theorem", "exists_int_smul_near_of_pos'", []], ["add", "theorem", "exists_int_smul_near_of_pos", []], ["del", "theorem", "exists_int_smul_near_of_pos'", ["linear_ordered_add_comm_group"]], ["del", "theorem", "exists_int_smul_near_of_pos", ["linear_ordered_add_comm_group"]]]}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "exists_mem_Ico₀", ["function", "periodic"]], ["add", "theorem", "exists_mem_Ioc", ["function", "periodic"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1635356851, "sha": "ec51fb79", "message": "chore(algebra/order/floor): prove `subsingleton`s (#9996)", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/algebra/order/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": [["del", "theorem", "floor_ring_unique", []], ["del", "theorem", "floor_semiring_unique", []], ["add", "theorem", "subsingleton_floor_ring", []], ["add", "theorem", "subsingleton_floor_semiring", []]]}]}, {"timestamp": 1635356849, "sha": "eaec1dae", "message": "feat(group_theory/group_action/conj_act): A characteristic subgroup of a normal subgroup is normal (#9992)\nUses `mul_aut.conj_normal` to prove an instance stating that a characteristic subgroup of a normal subgroup is normal.", "changes": [{"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": []}]}, {"timestamp": 1635356847, "sha": "c529711f", "message": "refactor(*): rename fpow and gpow to zpow (#9989)\nHistorically, we had two notions of integer power, one on groups called `gpow` and the other one on fields called `fpow`. Since the introduction of `div_inv_monoid` and `group_with_zero`, these definitions have been merged into one, and the boundaries are not clear any more. We rename both of them to `zpow`, adding a subscript `0` to disambiguate lemma names when there is a collision, where the subscripted version is for groups with zeroes (as is already done for inv lemmas).\nTo limit the scope of the change. this PR does not rename `gsmul` to `zsmul` or `gmultiples` to `zmultiples`.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "abs_fpow_bit0", []], ["add", "theorem", "abs_zpow_bit0", []], ["del", "theorem", "abs_fpow", ["even"]], ["add", "theorem", "abs_zpow", ["even"]], ["del", "theorem", "fpow_abs", ["even"]], ["del", "theorem", "fpow_neg", ["even"]], ["del", "theorem", "fpow_nonneg", ["even"]], ["del", "theorem", "fpow_pos", ["even"]], ["add", "theorem", "zpow_abs", ["even"]], ["add", "theorem", "zpow_neg", ["even"]], ["add", "theorem", "zpow_nonneg", ["even"]], ["add", "theorem", "zpow_pos", ["even"]], ["del", "theorem", "fpow_bit0_abs", []], ["del", "theorem", "fpow_bit0_neg", []], ["del", "theorem", "fpow_bit0_nonneg", []], ["del", "theorem", "fpow_bit0_pos", []], ["del", "theorem", "fpow_bit1_neg", []], ["del", "theorem", "fpow_bit1_neg_iff", []], ["del", "theorem", "fpow_bit1_nonneg_iff", []], ["del", "theorem", "fpow_bit1_nonpos_iff", []], ["del", "theorem", "fpow_bit1_pos_iff", []], ["del", "theorem", "fpow_eq_zero_iff", []], ["del", "theorem", "fpow_inj", []], ["del", "theorem", "fpow_injective", []], ["del", "theorem", "fpow_le_iff_le", []], ["del", "theorem", "fpow_le_of_le", []], ["del", "theorem", "fpow_le_one_of_nonpos", []], ["del", "theorem", "fpow_lt_iff_lt", []], ["del", "theorem", "fpow_nonneg", []], ["del", "theorem", "fpow_pos_of_pos", []], ["del", "theorem", "fpow_strict_mono", []], ["del", "theorem", "fpow_two_nonneg", []], ["del", "theorem", "fpow_two_pos_of_ne_zero", []], ["del", "theorem", "fpow_ne_zero_of_pos", ["nat"]], ["del", "theorem", "fpow_pos_of_pos", ["nat"]], ["add", "theorem", "zpow_ne_zero_of_pos", ["nat"]], ["add", "theorem", "zpow_pos_of_pos", ["nat"]], ["del", "theorem", "fpow_neg", ["odd"]], ["del", "theorem", "fpow_nonneg", ["odd"]], ["del", "theorem", "fpow_nonpos", ["odd"]], ["del", "theorem", "fpow_pos", ["odd"]], ["add", "theorem", "zpow_neg", ["odd"]], ["add", "theorem", "zpow_nonneg", ["odd"]], ["add", "theorem", "zpow_nonpos", ["odd"]], ["add", "theorem", "zpow_pos", ["odd"]], ["del", "theorem", "one_le_fpow_of_nonneg", []], ["add", "theorem", "one_le_zpow_of_nonneg", []], ["del", "theorem", "one_lt_fpow", []], ["add", "theorem", "one_lt_zpow", []], ["del", "theorem", "cast_fpow", ["rat"]], ["add", "theorem", "cast_zpow", ["rat"]], ["del", "theorem", "map_fpow", ["ring_equiv"]], ["add", "theorem", "map_zpow", ["ring_equiv"]], ["del", "theorem", "map_fpow", ["ring_hom"]], ["add", "theorem", "map_zpow", ["ring_hom"]], ["add", "theorem", "zpow_bit0_abs", []], ["add", "theorem", "zpow_bit0_neg", []], ["add", "theorem", "zpow_bit0_nonneg", []], ["add", "theorem", "zpow_bit0_pos", []], ["add", "theorem", "zpow_bit1_neg", []], ["add", "theorem", "zpow_bit1_neg_iff", []], ["add", "theorem", "zpow_bit1_nonneg_iff", []], ["add", "theorem", "zpow_bit1_nonpos_iff", []], ["add", "theorem", "zpow_bit1_pos_iff", []], ["add", "theorem", "zpow_eq_zero_iff", []], ["add", "theorem", "zpow_inj", []], ["add", "theorem", "zpow_injective", []], ["add", "theorem", "zpow_le_iff_le", []], ["add", "theorem", "zpow_le_of_le", []], ["add", "theorem", "zpow_le_one_of_nonpos", []], ["add", "theorem", "zpow_lt_iff_lt", []], ["add", "theorem", "zpow_nonneg", []], ["add", "theorem", "zpow_pos_of_pos", []], ["add", "theorem", "zpow_strict_mono", []], ["add", "theorem", "zpow_two_nonneg", []], ["add", "theorem", "zpow_two_pos_of_ne_zero", []]]}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["del", "theorem", "conj_gpow", []], ["add", "theorem", "conj_zpow", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["del", "def", "gpow_rec", []], ["add", "def", "zpow_rec", []]]}, {"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "gpow_gpow", ["commute"]], ["del", "theorem", "gpow_gpow_self", ["commute"]], ["del", "theorem", "gpow_left", ["commute"]], ["del", "theorem", "gpow_right", ["commute"]], ["del", "theorem", "gpow_self", ["commute"]], ["del", "theorem", "mul_gpow", ["commute"]], ["add", "theorem", "mul_zpow", ["commute"]], ["del", "theorem", "self_gpow", ["commute"]], ["add", "theorem", "self_zpow", ["commute"]], ["add", "theorem", "zpow_left", ["commute"]], ["add", "theorem", "zpow_right", ["commute"]], ["add", "theorem", "zpow_self", ["commute"]], ["add", "theorem", "zpow_zpow", ["commute"]], ["add", "theorem", "zpow_zpow_self", ["commute"]], ["del", "theorem", "div_gpow", []], ["add", "theorem", "div_zpow", []], ["del", "theorem", "gpow_coe_nat", []], ["del", "theorem", "gpow_eq_pow", []], ["del", "def", "gpow_group_hom", []], ["del", "theorem", "gpow_neg", []], ["del", "theorem", "gpow_neg_one", []], ["del", "theorem", "gpow_neg_succ_of_nat", []], ["del", "theorem", "gpow_of_nat", []], ["del", "theorem", "gpow_one", []], ["del", "theorem", "gpow_zero", []], ["del", "theorem", "inv_gpow", []], ["add", "theorem", "inv_zpow", []], ["del", "theorem", "mul_gpow", []], ["del", "theorem", "mul_gpow_neg_one", []], ["add", "theorem", "mul_zpow", []], ["add", "theorem", "mul_zpow_neg_one", []], ["del", "theorem", "of_mul_gpow", []], ["add", "theorem", "of_mul_zpow", []], ["del", "theorem", "one_gpow", []], ["add", "theorem", "one_zpow", []], ["del", "theorem", "gpow_right", ["semiconj_by"]], ["add", "theorem", "zpow_right", ["semiconj_by"]], ["add", "theorem", "zpow_coe_nat", []], ["add", "theorem", "zpow_eq_pow", []], ["add", "def", "zpow_group_hom", []], ["add", "theorem", "zpow_neg", []], ["add", "theorem", "zpow_neg_one", []], ["add", "theorem", "zpow_neg_succ_of_nat", []], ["add", "theorem", "zpow_of_nat", []], ["add", "theorem", "zpow_one", []], ["add", "theorem", "zpow_zero", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "units_gpow_left", ["commute"]], ["del", "theorem", "units_gpow_right", ["commute"]], ["add", "theorem", "units_zpow_left", ["commute"]], ["add", "theorem", "units_zpow_right", ["commute"]], ["del", "theorem", "gpow_add", []], ["del", "theorem", "gpow_add_one", []], ["del", "theorem", "gpow_bit0", []], ["del", "theorem", "gpow_bit1", []], ["del", "theorem", "gpow_mul'", []], ["del", "theorem", "gpow_mul", []], ["del", "theorem", "gpow_mul_comm", []], ["del", "theorem", "gpow_one_add", []], ["del", "theorem", "gpow_sub", []], ["del", "theorem", "gpow_sub_one", []], ["del", "def", "gpowers_hom", []], ["del", "theorem", "gpowers_hom_apply", []], ["del", "theorem", "gpowers_hom_symm_apply", []], ["del", "def", "gpowers_mul_hom", []], ["del", "theorem", "gpowers_mul_hom_apply", []], ["del", "theorem", "gpowers_mul_hom_symm_apply", []], ["del", "theorem", "to_add_gpow", ["int"]], ["add", "theorem", "to_add_zpow", ["int"]], ["del", "theorem", "map_gpow", ["monoid_hom"]], ["add", "theorem", "map_zpow", ["monoid_hom"]], ["del", "theorem", "mul_gpow_self", []], ["del", "theorem", "mul_self_gpow", []], ["add", "theorem", "mul_self_zpow", []], ["add", "theorem", "mul_zpow_self", []], ["del", "theorem", "op_gpow", ["opposite"]], ["add", "theorem", "op_zpow", ["opposite"]], ["del", "theorem", "unop_gpow", ["opposite"]], ["add", "theorem", "unop_zpow", ["opposite"]], ["del", "theorem", "units_gpow_right", ["semiconj_by"]], ["add", "theorem", "units_zpow_right", ["semiconj_by"]], ["del", "theorem", "coe_gpow", ["units"]], ["add", "theorem", "coe_zpow", ["units"]], ["add", "theorem", "zpow_add", []], ["add", "theorem", "zpow_add_one", []], ["add", "theorem", "zpow_bit0", []], ["add", "theorem", "zpow_bit1", []], ["add", "theorem", "zpow_mul'", []], ["add", "theorem", "zpow_mul", []], ["add", "theorem", "zpow_mul_comm", []], ["add", "theorem", "zpow_one_add", []], ["add", "theorem", "zpow_sub", []], ["add", "theorem", "zpow_sub_one", []], ["add", "def", "zpowers_hom", []], ["add", "theorem", "zpowers_hom_apply", []], ["add", "theorem", "zpowers_hom_symm_apply", []], ["add", "def", "zpowers_mul_hom", []], ["add", "theorem", "zpowers_mul_hom_apply", []], ["add", "theorem", "zpowers_mul_hom_symm_apply", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["del", "theorem", "one_le_gpow", []], ["add", "theorem", "one_le_zpow", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "fpow_fpow", ["commute"]], ["del", "theorem", "fpow_fpow_self", ["commute"]], ["del", "theorem", "fpow_left", ["commute"]], ["del", "theorem", "fpow_right", ["commute"]], ["del", "theorem", "fpow_self", ["commute"]], ["del", "theorem", "mul_fpow", ["commute"]], ["add", "theorem", "mul_zpow₀", ["commute"]], ["del", "theorem", "self_fpow", ["commute"]], ["add", "theorem", "self_zpow₀", ["commute"]], ["add", "theorem", "zpow_left₀", ["commute"]], ["add", "theorem", "zpow_right₀", ["commute"]], ["add", "theorem", "zpow_self₀", ["commute"]], ["add", "theorem", "zpow_zpow_self₀", ["commute"]], ["add", "theorem", "zpow_zpow₀", ["commute"]], ["del", "theorem", "div_fpow", []], ["add", "theorem", "div_zpow₀", []], ["del", "theorem", "fpow_add'", []], ["del", "theorem", "fpow_add", []], ["del", "theorem", "fpow_add_one", []], ["del", "theorem", "fpow_bit0'", []], ["del", "theorem", "fpow_bit0", []], ["del", "theorem", "fpow_bit1'", []], ["del", "theorem", "fpow_bit1", []], ["del", "theorem", "fpow_eq_zero", []], ["del", "theorem", "fpow_mul'", []], ["del", "theorem", "fpow_mul", []], ["del", "theorem", "fpow_ne_zero", []], ["del", "theorem", "fpow_ne_zero_of_ne_zero", []], ["del", "theorem", "fpow_neg", []], ["del", "theorem", "fpow_neg_mul_fpow_self", []], ["del", "theorem", "fpow_neg_one", []], ["del", "theorem", "fpow_one_add", []], ["del", "theorem", "fpow_sub", []], ["del", "theorem", "fpow_sub_one", []], ["del", "theorem", "inv_fpow'", []], ["del", "theorem", "inv_fpow", []], ["add", "theorem", "inv_zpow'", []], ["add", "theorem", "inv_zpow₀", []], ["del", "theorem", "map_fpow", ["monoid_with_zero_hom"]], ["add", "theorem", "map_zpow", ["monoid_with_zero_hom"]], ["del", "theorem", "mul_fpow", []], ["add", "theorem", "mul_zpow₀", []], ["del", "theorem", "one_div_fpow", []], ["add", "theorem", "one_div_zpow", []], ["del", "theorem", "one_fpow", []], ["add", "theorem", "one_zpow₀", []], ["del", "theorem", "fpow_right", ["semiconj_by"]], ["add", "theorem", "zpow_right₀", ["semiconj_by"]], ["del", "theorem", "coe_gpow₀", ["units"]], ["add", "theorem", "coe_zpow₀", ["units"]], ["del", "theorem", "zero_fpow", []], ["add", "theorem", "zero_zpow", []], ["add", "theorem", "zpow_add'", []], ["add", "theorem", "zpow_add_one₀", []], ["add", "theorem", "zpow_add₀", []], ["add", "theorem", "zpow_bit0'", []], ["add", "theorem", "zpow_bit0₀", []], ["add", "theorem", "zpow_bit1'", []], ["add", "theorem", "zpow_bit1₀", []], ["add", "theorem", "zpow_eq_zero", []], ["add", "theorem", "zpow_mul₀'", []], ["add", "theorem", "zpow_mul₀", []], ["add", "theorem", "zpow_ne_zero", []], ["add", "theorem", "zpow_ne_zero_of_ne_zero", []], ["add", "theorem", "zpow_neg_mul_zpow_self", []], ["add", "theorem", "zpow_neg_one₀", []], ["add", "theorem", "zpow_neg₀", []], ["add", "theorem", "zpow_one_add₀", []], ["add", "theorem", "zpow_sub_one₀", []], ["add", "theorem", "zpow_sub₀", []]]}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": [["del", "theorem", "iterate_map_gpow", ["monoid_hom"]], ["add", "theorem", "iterate_map_zpow", ["monoid_hom"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/order/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["del", "theorem", "star_fpow", []], ["del", "theorem", "star_gpow", []], ["add", "theorem", "star_zpow", []], ["add", "theorem", "star_zpow₀", []]]}, {"oldPath": "src/analysis/asymptotics/specific_asymptotics.lean", "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": [["del", "theorem", "tendsto_fpow_at_top_at_top", []], ["add", "theorem", "tendsto_zpow_at_top_at_top", []]]}, {"oldPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": [["del", "theorem", "superpolynomial_decay_of_is_O_fpow_le", ["asymptotics"]], ["del", "theorem", "superpolynomial_decay_of_is_O_fpow_lt", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_of_is_O_zpow_le", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_of_is_O_zpow_lt", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["del", "theorem", "deriv_fpow'", []], ["del", "theorem", "deriv_fpow", []], ["del", "theorem", "deriv_within_fpow", []], ["add", "theorem", "deriv_within_zpow", []], ["add", "theorem", "deriv_zpow'", []], ["add", "theorem", "deriv_zpow", []], ["del", "theorem", "differentiable_at_fpow", []], ["add", "theorem", "differentiable_at_zpow", []], ["del", "theorem", "differentiable_on_fpow", []], ["add", "theorem", "differentiable_on_zpow", []], ["del", "theorem", "differentiable_within_at_fpow", []], ["add", "theorem", "differentiable_within_at_zpow", []], ["del", "theorem", "has_deriv_at_fpow", []], ["add", "theorem", "has_deriv_at_zpow", []], ["del", "theorem", "has_deriv_within_at_fpow", []], ["add", "theorem", "has_deriv_within_at_zpow", []], ["del", "theorem", "has_strict_deriv_at_fpow", []], ["add", "theorem", "has_strict_deriv_at_zpow", []], ["del", "theorem", "iter_deriv_fpow'", []], ["del", "theorem", "iter_deriv_fpow", []], ["add", "theorem", "iter_deriv_zpow'", []], ["add", "theorem", "iter_deriv_zpow", []]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["del", "theorem", "convex_on_fpow", []], ["add", "theorem", "convex_on_zpow", []]]}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["del", "theorem", "fpow_arith_mean_le_arith_mean_fpow", ["real"]], ["add", "theorem", "zpow_arith_mean_le_arith_mean_zpow", ["real"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "nnnorm_fpow", ["normed_field"]], ["add", "theorem", "nnnorm_zpow", ["normed_field"]], ["del", "theorem", "norm_fpow", ["normed_field"]], ["add", "theorem", "norm_zpow", ["normed_field"]]]}, {"oldPath": "src/analysis/special_functions/exp.lean", "newPath": "src/analysis/special_functions/exp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "continuous_at_fpow", ["normed_field"]], ["add", "theorem", "continuous_at_zpow", ["normed_field"]], ["del", "theorem", "tendsto_norm_fpow_nhds_within_0_at_top", ["normed_field"]], ["add", "theorem", "tendsto_norm_zpow_nhds_within_0_at_top", ["normed_field"]]]}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": [["del", "theorem", "conj_Aut_gpow", ["category_theory", "iso"]], ["add", "theorem", "conj_Aut_zpow", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["del", "theorem", "I_fpow_bit0", ["complex"]], ["del", "theorem", "I_fpow_bit1", ["complex"]], ["add", "theorem", "I_zpow_bit0", ["complex"]], ["add", "theorem", "I_zpow_bit1", ["complex"]], ["del", "theorem", "of_real_fpow", ["complex"]], ["add", "theorem", "of_real_zpow", ["complex"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["del", "theorem", "of_real_fpow", ["is_R_or_C"]], ["add", "theorem", "of_real_zpow", ["is_R_or_C"]]]}, {"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": []}, {"oldPath": "src/data/equiv/ring_aut.lean", "newPath": "src/data/equiv/ring_aut.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["del", "theorem", "of_fpow", ["irrational"]], ["add", "theorem", "of_zpow", ["irrational"]]]}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": [["del", "theorem", "translate_gpow", ["circle_deg1_lift"]], ["add", "theorem", "translate_zpow", ["circle_deg1_lift"]], ["del", "theorem", "translation_number_gpow", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_zpow", ["circle_deg1_lift"]]]}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["del", "theorem", "smul_gpow", []], ["add", "theorem", "smul_zpow", []]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "exists_gpow_eq_one", []], ["add", "theorem", "exists_zpow_eq_one", []], ["del", "theorem", "fin_equiv_gpowers_apply", []], ["del", "theorem", "fin_equiv_gpowers_symm_apply", []], ["add", "theorem", "fin_equiv_zpowers_apply", []], ["add", "theorem", "fin_equiv_zpowers_symm_apply", []], ["del", "theorem", "gpow_eq_mod_card", []], ["del", "theorem", "gpow_eq_mod_order_of", []], ["del", "theorem", "gpowers_equiv_gpowers_apply", []], ["del", "theorem", "mem_gpowers_iff_mem_range_order_of", []], ["del", "theorem", "mem_powers_iff_mem_gpowers", []], ["add", "theorem", "mem_powers_iff_mem_zpowers", []], ["add", "theorem", "mem_zpowers_iff_mem_range_order_of", []], ["del", "theorem", "order_eq_card_gpowers", []], ["add", "theorem", "order_eq_card_zpowers", []], ["del", "theorem", "order_of_dvd_iff_gpow_eq_one", []], ["add", "theorem", "order_of_dvd_iff_zpow_eq_one", []], ["del", "theorem", "powers_eq_gpowers", []], ["add", "theorem", "powers_eq_zpowers", []], ["add", "theorem", "zpow_eq_mod_card", []], ["add", "theorem", "zpow_eq_mod_order_of", []], ["add", "theorem", "zpowers_equiv_zpowers_apply", []]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["del", "theorem", "gpow_apply_comm", ["equiv", "perm"]], ["add", "theorem", "zpow_apply_comm", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["del", "theorem", "cycle_of_apply_apply_gpow_self", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply_apply_zpow_self", ["equiv", "perm"]], ["del", "theorem", "cycle_of_gpow_apply_self", ["equiv", "perm"]], ["del", "theorem", "cycle_of_self_apply_gpow", ["equiv", "perm"]], ["add", "theorem", "cycle_of_self_apply_zpow", ["equiv", "perm"]], ["add", "theorem", "cycle_of_zpow_apply_self", ["equiv", "perm"]], ["del", "theorem", "exists_gpow_eq", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "exists_zpow_eq", ["equiv", "perm", "is_cycle"]], ["del", "theorem", "gpowers_equiv_support_apply", ["equiv", "perm", "is_cycle"]], ["del", "theorem", "gpowers_equiv_support_symm_apply", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "zpowers_equiv_support_apply", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "zpowers_equiv_support_symm_apply", ["equiv", "perm", "is_cycle"]], ["del", "theorem", "is_cycle_of_is_cycle_gpow", ["equiv", "perm"]], ["add", "theorem", "is_cycle_of_is_cycle_zpow", ["equiv", "perm"]], ["del", "theorem", "same_cycle_gpow_left_iff", ["equiv", "perm"]], ["add", "theorem", "same_cycle_zpow_left_iff", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": [["del", "theorem", "form_perm_gpow_apply_mem_imp_mem", ["list"]], ["add", "theorem", "form_perm_zpow_apply_mem_imp_mem", ["list"]]]}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": [["del", "theorem", "gpow_disjoint_gpow", ["equiv", "perm", "disjoint"]], ["add", "theorem", "zpow_disjoint_zpow", ["equiv", "perm", "disjoint"]], ["del", "theorem", "gpow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "gpow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "gpow_apply_mem_support", ["equiv", "perm"]], ["del", "theorem", "set_support_gpow_subset", ["equiv", "perm"]], ["add", "theorem", "set_support_zpow_subset", ["equiv", "perm"]], ["del", "theorem", "support_gpow_le", ["equiv", "perm"]], ["add", "theorem", "support_zpow_le", ["equiv", "perm"]], ["add", "theorem", "zpow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "zpow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "zpow_apply_mem_support", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["del", "theorem", "coe_gpow", ["quotient_group"]], ["add", "theorem", "coe_zpow", ["quotient_group"]]]}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": [["mod", "theorem", "image_range_card", ["is_cyclic"]], ["mod", "theorem", "image_range_order_of", ["is_cyclic"]], ["del", "theorem", "order_of_eq_card_of_forall_mem_gpowers", []], ["add", "theorem", "order_of_eq_card_of_forall_mem_zpowers", []]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "theorem", "of_add_image_gmultiples_eq_gpowers_of_add", []], ["add", "theorem", "of_add_image_gmultiples_eq_zpowers_of_add", []], ["del", "theorem", "of_mul_image_gpowers_eq_gmultiples_of_mul", []], ["add", "theorem", "of_mul_image_zpowers_eq_gmultiples_of_mul", []], ["del", "theorem", "coe_gpow", ["subgroup"]], ["add", "theorem", "coe_zpow", ["subgroup"]], ["del", "theorem", "exists_gpowers", ["subgroup"]], ["del", "theorem", "exists_mem_gpowers", ["subgroup"]], ["add", "theorem", "exists_mem_zpowers", ["subgroup"]], ["add", "theorem", "exists_zpowers", ["subgroup"]], ["del", "theorem", "forall_gpowers", ["subgroup"]], ["del", "theorem", "forall_mem_gpowers", ["subgroup"]], ["add", "theorem", "forall_mem_zpowers", ["subgroup"]], ["add", "theorem", "forall_zpowers", ["subgroup"]], ["del", "theorem", "gpow_mem", ["subgroup"]], ["del", "def", "gpowers", ["subgroup"]], ["del", "theorem", "gpowers_eq_closure", ["subgroup"]], ["del", "theorem", "gpowers_subset", ["subgroup"]], ["del", "theorem", "mem_gpowers", ["subgroup"]], ["del", "theorem", "mem_gpowers_iff", ["subgroup"]], ["add", "theorem", "mem_zpowers", ["subgroup"]], ["add", "theorem", "mem_zpowers_iff", ["subgroup"]], ["del", "theorem", "range_gpowers_hom", ["subgroup"]], ["add", "theorem", "range_zpowers_hom", ["subgroup"]], ["del", "theorem", "saturated_iff_gpow", ["subgroup"]], ["add", "theorem", "saturated_iff_zpow", ["subgroup"]], ["add", "theorem", "zpow_mem", ["subgroup"]], ["add", "def", "zpowers", ["subgroup"]], ["add", "theorem", "zpowers_eq_closure", ["subgroup"]], ["add", "theorem", "zpowers_subset", ["subgroup"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/fpow.lean", "newPath": "src/linear_algebra/matrix/zpow.lean", "changes": [["del", "theorem", "det_fpow", ["is_unit"]], ["add", "theorem", "det_zpow", ["is_unit"]], ["del", "theorem", "fpow_fpow", ["matrix", "commute"]], ["del", "theorem", "fpow_fpow_self", ["matrix", "commute"]], ["del", "theorem", "fpow_left", ["matrix", "commute"]], ["del", "theorem", "fpow_right", ["matrix", "commute"]], ["del", "theorem", "fpow_self", ["matrix", "commute"]], ["del", "theorem", "mul_fpow", ["matrix", "commute"]], ["add", "theorem", "mul_zpow", ["matrix", "commute"]], ["del", "theorem", "self_fpow", ["matrix", "commute"]], ["add", "theorem", "self_zpow", ["matrix", "commute"]], ["add", "theorem", "zpow_left", ["matrix", "commute"]], ["add", "theorem", "zpow_right", ["matrix", "commute"]], ["add", "theorem", "zpow_self", ["matrix", "commute"]], ["add", "theorem", "zpow_zpow", ["matrix", "commute"]], ["add", "theorem", "zpow_zpow_self", ["matrix", "commute"]], ["del", "theorem", "fpow_add", ["matrix"]], ["del", "theorem", "fpow_add_of_nonneg", ["matrix"]], ["del", "theorem", "fpow_add_of_nonpos", ["matrix"]], ["del", "theorem", "fpow_add_one", ["matrix"]], ["del", "theorem", "fpow_add_one_of_ne_neg_one", ["matrix"]], ["del", "theorem", "fpow_bit0'", ["matrix"]], ["del", "theorem", "fpow_bit0", ["matrix"]], ["del", "theorem", "fpow_bit1'", ["matrix"]], ["del", "theorem", "fpow_bit1", ["matrix"]], ["del", "theorem", "fpow_coe_nat", ["matrix"]], ["del", "theorem", "fpow_mul'", ["matrix"]], ["del", "theorem", "fpow_mul", ["matrix"]], ["del", "theorem", "fpow_ne_zero_of_is_unit_det", ["matrix"]], ["del", "theorem", "fpow_neg", ["matrix"]], ["del", "theorem", "fpow_neg_coe_nat", ["matrix"]], ["del", "theorem", "fpow_neg_mul_fpow_self", ["matrix"]], ["del", "theorem", "fpow_neg_one", ["matrix"]], ["del", "theorem", "fpow_one_add", ["matrix"]], ["del", "theorem", "fpow_sub", ["matrix"]], ["del", "theorem", "fpow_sub_one", ["matrix"]], ["del", "theorem", "inv_fpow'", ["matrix"]], ["del", "theorem", "inv_fpow", ["matrix"]], ["add", "theorem", "inv_zpow'", ["matrix"]], ["add", "theorem", "inv_zpow", ["matrix"]], ["del", "theorem", "is_unit_det_fpow_iff", ["matrix"]], ["add", "theorem", "is_unit_det_zpow_iff", ["matrix"]], ["del", "theorem", "one_div_fpow", ["matrix"]], ["add", "theorem", "one_div_zpow", ["matrix"]], ["del", "theorem", "one_fpow", ["matrix"]], ["add", "theorem", "one_zpow", ["matrix"]], ["del", "theorem", "fpow_right", ["matrix", "semiconj_by"]], ["add", "theorem", "zpow_right", ["matrix", "semiconj_by"]], ["del", "theorem", "coe_fpow", ["matrix", "units"]], ["add", "theorem", "coe_zpow", ["matrix", "units"]], ["del", "theorem", "zero_fpow", ["matrix"]], ["del", "theorem", "zero_fpow_eq", ["matrix"]], ["add", "theorem", "zero_zpow", ["matrix"]], ["add", "theorem", "zero_zpow_eq", ["matrix"]], ["add", "theorem", "zpow_add", ["matrix"]], ["add", "theorem", "zpow_add_of_nonneg", ["matrix"]], ["add", "theorem", "zpow_add_of_nonpos", ["matrix"]], ["add", "theorem", "zpow_add_one", ["matrix"]], ["add", "theorem", "zpow_add_one_of_ne_neg_one", ["matrix"]], ["add", "theorem", "zpow_bit0'", ["matrix"]], ["add", "theorem", "zpow_bit0", ["matrix"]], ["add", "theorem", "zpow_bit1'", ["matrix"]], ["add", "theorem", "zpow_bit1", ["matrix"]], ["add", "theorem", "zpow_coe_nat", ["matrix"]], ["add", "theorem", "zpow_mul'", ["matrix"]], ["add", "theorem", "zpow_mul", ["matrix"]], ["add", "theorem", "zpow_ne_zero_of_is_unit_det", ["matrix"]], ["add", "theorem", "zpow_neg", ["matrix"]], ["add", "theorem", "zpow_neg_coe_nat", ["matrix"]], ["add", "theorem", "zpow_neg_mul_zpow_self", ["matrix"]], ["add", "theorem", "zpow_neg_one", ["matrix"]], ["add", "theorem", "zpow_one_add", ["matrix"]], ["add", "theorem", "zpow_sub", ["matrix"]], ["add", "theorem", "zpow_sub_one", ["matrix"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["del", "theorem", "fpow_eq_one", ["is_primitive_root"]], ["del", "theorem", "fpow_eq_one_iff_dvd", ["is_primitive_root"]], ["del", "theorem", "fpow_of_gcd_eq_one", ["is_primitive_root"]], ["del", "theorem", "gpow_eq_one", ["is_primitive_root"]], ["del", "theorem", "gpow_eq_one_iff_dvd", ["is_primitive_root"]], ["del", "theorem", "gpow_of_gcd_eq_one", ["is_primitive_root"]], ["del", "theorem", "gpowers_eq", ["is_primitive_root"]], ["del", "def", "zmod_equiv_gpowers", ["is_primitive_root"]], ["del", "theorem", "zmod_equiv_gpowers_apply_coe_int", ["is_primitive_root"]], ["del", "theorem", "zmod_equiv_gpowers_apply_coe_nat", ["is_primitive_root"]], ["del", "theorem", "zmod_equiv_gpowers_symm_apply_gpow'", ["is_primitive_root"]], ["del", "theorem", "zmod_equiv_gpowers_symm_apply_gpow", ["is_primitive_root"]], ["del", "theorem", "zmod_equiv_gpowers_symm_apply_pow'", ["is_primitive_root"]], ["del", "theorem", "zmod_equiv_gpowers_symm_apply_pow", ["is_primitive_root"]], ["add", "def", "zmod_equiv_zpowers", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_zpowers_apply_coe_int", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_zpowers_apply_coe_nat", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_zpowers_symm_apply_pow'", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_zpowers_symm_apply_pow", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_zpowers_symm_apply_zpow'", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_zpowers_symm_apply_zpow", ["is_primitive_root"]], ["add", "theorem", "zpow_eq_one", ["is_primitive_root"]], ["add", "theorem", "zpow_eq_one_iff_dvd", ["is_primitive_root"]], ["add", "theorem", "zpow_eq_one_iff_dvd₀", ["is_primitive_root"]], ["add", "theorem", "zpow_eq_one₀", ["is_primitive_root"]], ["add", "theorem", "zpow_of_gcd_eq_one", ["is_primitive_root"]], ["add", "theorem", "zpow_of_gcd_eq_one₀", ["is_primitive_root"]], ["add", "theorem", "zpowers_eq", ["is_primitive_root"]]]}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": [["del", "theorem", "gpow_trick", ["tactic", "group"]], ["del", "theorem", "gpow_trick_one'", ["tactic", "group"]], ["del", "theorem", "gpow_trick_one", ["tactic", "group"]], ["del", "theorem", "gpow_trick_sub", ["tactic", "group"]], ["add", "theorem", "zpow_trick", ["tactic", "group"]], ["add", "theorem", "zpow_trick_one'", ["tactic", "group"]], ["add", "theorem", "zpow_trick_one", ["tactic", "group"]], ["add", "theorem", "zpow_trick_sub", ["tactic", "group"]]]}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["del", "theorem", "fpow", ["continuous"]], ["add", "theorem", "zpow", ["continuous"]], ["del", "theorem", "fpow", ["continuous_at"]], ["add", "theorem", "zpow", ["continuous_at"]], ["del", "theorem", "continuous_at_fpow", []], ["add", "theorem", "continuous_at_zpow", []], ["del", "theorem", "fpow", ["continuous_on"]], ["add", "theorem", "zpow", ["continuous_on"]], ["del", "theorem", "continuous_on_fpow", []], ["add", "theorem", "continuous_on_zpow", []], ["del", "theorem", "fpow", ["continuous_within_at"]], ["add", "theorem", "zpow", ["continuous_within_at"]], ["del", "theorem", "fpow", ["filter", "tendsto"]], ["add", "theorem", "zpow", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "tendsto_const_mul_fpow_at_top_zero", []], ["del", "theorem", "tendsto_const_mul_fpow_at_top_zero_iff", []], ["add", "theorem", "tendsto_const_mul_zpow_at_top_zero", []], ["add", "theorem", "tendsto_const_mul_zpow_at_top_zero_iff", []], ["del", "theorem", "tendsto_fpow_at_top_zero", []], ["add", "theorem", "tendsto_zpow_at_top_zero", []]]}, {"oldPath": "test/refine_struct.lean", "newPath": "test/refine_struct.lean", "changes": []}]}, {"timestamp": 1635356846, "sha": "9e4609b0", "message": "chore(data/fintype/card): add `fin.prod_univ_{one,two}` (#9987)\nSometimes Lean fails to simplify `(default : fin 1)` to `0` and\n`0.succ` to `1` in complex expressions. These lemmas explicitly use\n`f 0` and `f 1` in the output.", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_univ_one", ["fin"]], ["add", "theorem", "prod_univ_two", ["fin"]]]}]}, {"timestamp": 1635356845, "sha": "29079ba8", "message": "feat(tactic/lint): linter improvements (#9901)\n* Make the linter framework easier to use on projects outside mathlib with the new `lint_project` (replacing `lint_mathlib`). Also replace `lint_mathlib_decls` by `lint_project_decls`.\n* Make most declarations in the frontend not-private (I want to use them in other projects)\n* The unused argument linter does not report declarations that contain `sorry`. It will still report declarations that use other declarations that contain sorry. I did not add a test for this, since it's hard to do that while keeping the test suite silent (but I did test locally).\n* Some minor changes in the test suite (not important, but they cannot hurt).", "changes": [{"oldPath": "scripts/lint_mathlib.lean", "newPath": "scripts/lint_mathlib.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/project_dir.lean", "changes": [["add", "theorem", "mathlib_dir_locator", []]]}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1635347633, "sha": "25718c26", "message": "feat(data/nat/basic): Add two lemmas two nat/basic which are necessary for the count PR (#10001)\nAdd two lemmas proved by refl to data/nat/basic. They are needed for the count PR, and are changing a file low enogh in the import hierarchy to be a separate PR.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "sub_succ'", ["nat"]], ["add", "theorem", "coe_bot", ["nat", "subtype"]]]}]}, {"timestamp": 1635347631, "sha": "4e29dc75", "message": "chore(topology/algebra/module): add `continuous_linear_equiv.arrow_congr_equiv` (#9982)", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "arrow_congr_equiv", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1635347630, "sha": "a3f4a025", "message": "chore(analysis/normed_space/is_R_or_C + data/complex/is_R_or_C): make some proof steps standalone lemmas (#9933)\nSeparate some proof steps from `linear_map.bound_of_sphere_bound` as standalone lemmas to golf them a little bit.", "changes": [{"oldPath": "src/analysis/normed_space/is_R_or_C.lean", "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": [["add", "theorem", "norm_coe_norm", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "norm_of_nonneg", ["is_R_or_C"]]]}]}, {"timestamp": 1635347629, "sha": "d7c689d2", "message": "feat(algebraic_geometry/prime_spectrum): Closed points in prime spectrum (#9861)\nThis PR adds lemmas about the correspondence between closed points in `prime_spectrum R` and maximal ideals of `R`.\nIn order to import and talk about integral maps I had to move some lemmas from `noetherian.lean` to `prime_spectrum.lean` to prevent cyclic import dependencies.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum/basic.lean", "changes": [["add", "theorem", "comap_injective_of_surjective", ["prime_spectrum"]], ["add", "theorem", "comap_singleton_is_closed_of_is_integral", ["prime_spectrum"]], ["add", "theorem", "comap_singleton_is_closed_of_surjective", ["prime_spectrum"]], ["add", "theorem", "is_closed_singleton_iff_is_maximal", ["prime_spectrum"]], ["add", "theorem", "t1_space_iff_is_field", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/is_open_comap_C.lean", "newPath": "src/algebraic_geometry/prime_spectrum/is_open_comap_C.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_geometry/prime_spectrum/noetherian.lean", "changes": [["add", "theorem", "exists_prime_spectrum_prod_le", ["prime_spectrum"]], ["add", "theorem", "exists_prime_spectrum_prod_le_and_ne_bot_of_domain", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["del", "theorem", "exists_prime_spectrum_prod_le", []], ["del", "theorem", "exists_prime_spectrum_prod_le_and_ne_bot_of_domain", []]]}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}]}, {"timestamp": 1635318086, "sha": "d9cea393", "message": "refactor(topology+algebraic_geometry): prove and make use of equalities to simplify definitions (#9972)\nProve and make use of equalities whenever possible, even between functors (which is discouraged according to certain philosophy), to replace isomorphisms by equalities, to remove the need of transporting across isomorphisms in various definitions (using `eq_to_hom` directly), most notably: [simplified definition of identity morphism for PresheafedSpace](https://github.com/leanprover-community/mathlib/compare/use_equality?expand=1#diff-252fb30c3a3221e6472db5ba794344dfb423898696e70299653d95f635de06adR89), [simplified extensionality lemma for morphisms](https://github.com/leanprover-community/mathlib/compare/use_equality?expand=1#diff-252fb30c3a3221e6472db5ba794344dfb423898696e70299653d95f635de06adR68), [simplified definition of composition](https://github.com/leanprover-community/mathlib/compare/use_equality?expand=1#diff-252fb30c3a3221e6472db5ba794344dfb423898696e70299653d95f635de06adR96) and [the global section functor](https://github.com/leanprover-community/mathlib/compare/use_equality?expand=1#diff-252fb30c3a3221e6472db5ba794344dfb423898696e70299653d95f635de06adR228) (takes advantage of defeq and doesn't require proving any new equality).\nOther small changes to mathlib:\n- Define pushforward functor of presheaves in topology/sheaves/presheaf.lean\n- Add new file functor.lean in topology/sheaves, proves the pushforward of a sheaf is a sheaf, and defines the pushforward functor of sheaves, with the expectation that pullbacks will be added later.\n- Make one of the arguments in various `restrict`s implicit.\n- Change statement of [`to_open_comp_comap`](https://github.com/leanprover-community/mathlib/compare/use_equality?expand=1#diff-54364470f443f847742b1c105e853afebc25da68faad63cc5a73db167bc85d06R973) in structure_sheaf.lean to be more general (the same proof works!)\nThe new definitions result in simplified proofs, but apart from the main files opens.lean, presheaf.lean and presheafed_space.lean where proofs are optimized, I did only the minimum changes required to fix the broken proofs, and I expect there to be large room of improvement with the new definitions especially in the files changed in this PR. I also didn't remove the old lemmas and mostly just add new ones, so subsequent cleanup may be desired.", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["mod", "def", "restrict", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "theorem", "comp_c", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "hext", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "of_restrict_top_c", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "restrict_top_presheaf", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["mod", "theorem", "restrict_stalk_iso_hom_eq_germ", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "restrict_stalk_iso_inv_eq_germ", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["mod", "theorem", "to_open_comp_comap", ["algebraic_geometry", "structure_sheaf"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "theorem", "inclusion_top_functor", ["topological_space", "opens"]], ["add", "def", "inclusion_top_iso", ["topological_space", "opens"]], ["add", "theorem", "map_comp_eq", ["topological_space", "opens"]], ["add", "theorem", "map_eq", ["topological_space", "opens"]], ["add", "theorem", "map_id_eq", ["topological_space", "opens"]], ["add", "theorem", "map_supr", ["topological_space", "opens"]]]}, {"oldPath": null, "newPath": "src/topology/sheaves/functors.lean", "changes": [["add", "theorem", "map_cocone", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "theorem", "map_diagram", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "theorem", "pushforward_sheaf_of_sheaf", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "pushforward", ["Top", "sheaf"]], ["add", "theorem", "pushforward_sheaf_of_sheaf", ["Top", "sheaf"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["add", "theorem", "id_pushforward", ["Top", "presheaf"]], ["add", "theorem", "comp_eq", ["Top", "presheaf", "pushforward"]], ["add", "theorem", "id_eq", ["Top", "presheaf", "pushforward"]], ["add", "def", "pushforward", ["Top", "presheaf"]], ["add", "theorem", "pushforward_eq'", ["Top", "presheaf"]]]}]}, {"timestamp": 1635308701, "sha": "996ece59", "message": "feat(tactic/suggest): add a flag to disable \"Try this\" lines (#9820)", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1635302426, "sha": "62edbe57", "message": "chore(scripts): update nolints.txt (#9994)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1635288081, "sha": "b5925894", "message": "refactor(order/boolean_algebra): factor out pi.sdiff and pi.compl (#9955)\nProvide definitional lemmas about sdiff and compl on pi types.\nThis allows usage later on even without a whole `boolean_algebra` instance.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_apply", ["pi"]], ["add", "theorem", "compl_def", ["pi"]], ["add", "theorem", "sdiff_apply", ["pi"]], ["add", "theorem", "sdiff_def", ["pi"]]]}]}, {"timestamp": 1635288080, "sha": "120cf5bc", "message": "doc(topology) add a library note about continuity lemmas (#9954)\n* This is a note with some tips how to formulate a continuity (or measurability, differentiability, ...) lemma.\n* I wanted to write this up after formulating `continuous.strans` in many \"wrong\" ways before discovering the \"right\" way.\n* I think many lemmas are not following this principle, and could be improved in generality and/or convenience by following this advice.\n* Based on experience from the sphere eversion project.\n* The note mentions a lemma that will be added in #9959, but I don't think we necessarily have to wait for that PR.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1635282145, "sha": "36a20152", "message": "feat(topology/[separation, dense_embedding]): a function to a T1 space which has a limit at x is continuous at x (#9934)\nWe prove that, for a function `f` with values in a T1 space, knowing that `f` admits *any* limit at `x` suffices to prove that `f` is continuous at `x`.\nWe then use it to give a variant of `dense_inducing.extend_eq` with the same assumption required for continuity of the extension, which makes using both `extend_eq` and `continuous_extend` easier, and also brings us closer to Bourbaki who makes no explicit continuity assumption on the function to extend.", "changes": [{"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "extend_eq'", ["dense_inducing"]], ["add", "theorem", "extend_eq_at'", ["dense_inducing"]], ["mod", "theorem", "extend_eq_at", ["dense_inducing"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "continuous_at_of_tendsto_nhds", []], ["add", "theorem", "eq_of_tendsto_nhds", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1635278759, "sha": "92e90786", "message": "fix(linear_algebra/matrix/determinant): remove coercions (#9975)", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}]}, {"timestamp": 1635278758, "sha": "2a32c70c", "message": "refactor(linear_algebra/matrix/nonsingular_inverse): split out files for adjugate and nondegenerate (#9974)\nThis breaks the file roughly in two, and rescues lost lemmas that ended up in the wrong sections of the file.\nThe module docstrings have been tweaked a little, but all the lemmas have just been moved around.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/adjugate.lean", "changes": [["add", "def", "adjugate", ["matrix"]], ["add", "theorem", "adjugate_apply", ["matrix"]], ["add", "theorem", "adjugate_conj_transpose", ["matrix"]], ["add", "theorem", "adjugate_def", ["matrix"]], ["add", "theorem", "adjugate_eq_one_of_card_eq_one", ["matrix"]], ["add", "theorem", "adjugate_fin_one", ["matrix"]], ["add", "theorem", "adjugate_fin_two'", ["matrix"]], ["add", "theorem", "adjugate_fin_two", ["matrix"]], ["add", "theorem", "adjugate_fin_zero", ["matrix"]], ["add", "theorem", "adjugate_mul", ["matrix"]], ["add", "theorem", "adjugate_mul_distrib", ["matrix"]], ["add", "theorem", "adjugate_mul_distrib_aux", ["matrix"]], ["add", "theorem", "adjugate_one", ["matrix"]], ["add", "theorem", "adjugate_pow", ["matrix"]], ["add", "theorem", "adjugate_smul", ["matrix"]], ["add", "theorem", "adjugate_subsingleton", ["matrix"]], ["add", "theorem", "adjugate_transpose", ["matrix"]], ["add", "theorem", "adjugate_zero", ["matrix"]], ["add", "def", "cramer", ["matrix"]], ["add", "theorem", "cramer_apply", ["matrix"]], ["add", "theorem", "cramer_eq_adjugate_mul_vec", ["matrix"]], ["add", "theorem", "cramer_is_linear", ["matrix"]], ["add", "def", "cramer_map", ["matrix"]], ["add", "theorem", "cramer_map_is_linear", ["matrix"]], ["add", "theorem", "cramer_one", ["matrix"]], ["add", "theorem", "cramer_row_self", ["matrix"]], ["add", "theorem", "cramer_smul", ["matrix"]], ["add", "theorem", "cramer_subsingleton_apply", ["matrix"]], ["add", "theorem", "cramer_transpose_row_self", ["matrix"]], ["add", "theorem", "cramer_zero", ["matrix"]], ["add", "theorem", "det_adjugate_eq_one", ["matrix"]], ["add", "theorem", "det_adjugate_of_cancel", ["matrix"]], ["add", "theorem", "det_adjugate_of_is_unit", ["matrix"]], ["add", "theorem", "is_regular_of_is_left_regular_det", ["matrix"]], ["add", "theorem", "mul_adjugate", ["matrix"]], ["add", "theorem", "mul_adjugate_apply", ["matrix"]], ["add", "theorem", "mul_vec_cramer", ["matrix"]], ["add", "theorem", "sum_cramer", ["matrix"]], ["add", "theorem", "sum_cramer_apply", ["matrix"]], ["add", "theorem", "map_adjugate", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/nondegenerate.lean", "changes": [["add", "theorem", "eq_zero_of_mul_vec_eq_zero", ["matrix"]], ["add", "theorem", "eq_zero_of_vec_mul_eq_zero", ["matrix"]], ["add", "theorem", "eq_zero_of_ortho", ["matrix", "nondegenerate"]], ["add", "theorem", "exists_not_ortho_of_ne_zero", ["matrix", "nondegenerate"]], ["add", "def", "nondegenerate", ["matrix"]], ["add", "theorem", "nondegenerate_of_det_ne_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["del", "def", "adjugate", ["matrix"]], ["del", "theorem", "adjugate_apply", ["matrix"]], ["del", "theorem", "adjugate_conj_transpose", ["matrix"]], ["del", "theorem", "adjugate_def", ["matrix"]], ["del", "theorem", "adjugate_eq_one_of_card_eq_one", ["matrix"]], ["del", "theorem", "adjugate_fin_one", ["matrix"]], ["del", "theorem", "adjugate_fin_two'", ["matrix"]], ["del", "theorem", "adjugate_fin_two", ["matrix"]], ["del", "theorem", "adjugate_fin_zero", ["matrix"]], ["del", "theorem", "adjugate_mul", ["matrix"]], ["del", "theorem", "adjugate_mul_distrib", ["matrix"]], ["del", "theorem", "adjugate_mul_distrib_aux", ["matrix"]], ["del", "theorem", "adjugate_one", ["matrix"]], ["del", "theorem", "adjugate_pow", ["matrix"]], ["del", "theorem", "adjugate_smul", ["matrix"]], ["del", "theorem", "adjugate_subsingleton", ["matrix"]], ["del", "theorem", "adjugate_transpose", ["matrix"]], ["del", "theorem", "adjugate_zero", ["matrix"]], ["del", "def", "cramer", ["matrix"]], ["del", "theorem", "cramer_apply", ["matrix"]], ["del", "theorem", "cramer_eq_adjugate_mul_vec", ["matrix"]], ["del", "theorem", "cramer_is_linear", ["matrix"]], ["del", "def", "cramer_map", ["matrix"]], ["del", "theorem", "cramer_map_is_linear", ["matrix"]], ["del", "theorem", "cramer_one", ["matrix"]], ["del", "theorem", "cramer_row_self", ["matrix"]], ["del", "theorem", "cramer_smul", ["matrix"]], ["del", "theorem", "cramer_subsingleton_apply", ["matrix"]], ["del", "theorem", "cramer_transpose_row_self", ["matrix"]], ["del", "theorem", "cramer_zero", ["matrix"]], ["del", "theorem", "det_adjugate_eq_one", ["matrix"]], ["del", "theorem", "det_adjugate_of_cancel", ["matrix"]], ["del", "theorem", "det_adjugate_of_is_unit", ["matrix"]], ["del", "theorem", "eq_zero_of_mul_vec_eq_zero", ["matrix"]], ["del", "theorem", "eq_zero_of_vec_mul_eq_zero", ["matrix"]], ["del", "theorem", "is_regular_of_is_left_regular_det", ["matrix"]], ["del", "theorem", "mul_adjugate", ["matrix"]], ["del", "theorem", "mul_adjugate_apply", ["matrix"]], ["del", "theorem", "mul_vec_cramer", ["matrix"]], ["del", "theorem", "eq_zero_of_ortho", ["matrix", "nondegenerate"]], ["del", "theorem", "exists_not_ortho_of_ne_zero", ["matrix", "nondegenerate"]], ["del", "def", "nondegenerate", ["matrix"]], ["del", "theorem", "nondegenerate_of_det_ne_zero", ["matrix"]], ["del", "theorem", "sum_cramer", ["matrix"]], ["del", "theorem", "sum_cramer_apply", ["matrix"]], ["del", "theorem", "map_adjugate", ["ring_hom"]]]}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}]}, {"timestamp": 1635270866, "sha": "ce164e28", "message": "chore(data/{finset,multiset}/locally_finite): rename from `.interval` (#9980)\nThe pattern is `data.stuff.interval` for files about `locally_finite_order stuff` and... `finset α` and `multiset α` are locally finite orders. This thus makes space for this theory.", "changes": [{"oldPath": "src/data/finset/default.lean", "newPath": "src/data/finset/default.lean", "changes": []}, {"oldPath": "src/data/finset/interval.lean", "newPath": "src/data/finset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/multiset/interval.lean", "newPath": "src/data/multiset/locally_finite.lean", "changes": []}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": []}]}, {"timestamp": 1635270864, "sha": "3aa57492", "message": "feat(group_theory/subgroup/basic): Define characteristic subgroups (#9921)\nThis PR defines characteristic subgroups and builds the basic API.\nGetting `@[to_additive]` to work correctly was a bit tricky, so I mostly just copied the setup for `subgroup.normal`.", "changes": [{"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": [["mod", "theorem", "conj_apply", ["add_aut"]]]}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "structure", "characteristic", ["add_subgroup"]], ["add", "structure", "characteristic", ["subgroup"]], ["add", "theorem", "characteristic_iff_comap_eq", ["subgroup"]], ["add", "theorem", "characteristic_iff_comap_le", ["subgroup"]], ["add", "theorem", "characteristic_iff_le_comap", ["subgroup"]], ["add", "theorem", "characteristic_iff_le_map", ["subgroup"]], ["add", "theorem", "characteristic_iff_map_eq", ["subgroup"]], ["add", "theorem", "characteristic_iff_map_le", ["subgroup"]]]}]}, {"timestamp": 1635265370, "sha": "50c60943", "message": "feat(topology/uniform_space/basic): add lemma `comp_open_symm_mem_uniformity_sets` (#9981)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "comp_open_symm_mem_uniformity_sets", []]]}]}, {"timestamp": 1635251023, "sha": "d2b12217", "message": "feat(algebra/order/group|order/filter): add two lemmas (#9956)\n* Also open `function` namespace in `order.filter.basic`\n* From the sphere eversion project", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "le_div_self_iff", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_map", ["filter"]], ["mod", "theorem", "image_mem_map_iff", ["filter"]], ["mod", "theorem", "map_comap_of_surjective", ["filter"]], ["mod", "theorem", "map_inf", ["filter"]], ["mod", "theorem", "map_inj", ["filter"]], ["mod", "theorem", "mem_comap_iff", ["filter"]], ["mod", "theorem", "pure_injective", ["filter"]], ["add", "theorem", "filter_map_top", ["function", "surjective"]]]}]}, {"timestamp": 1635241799, "sha": "41df5b35", "message": "docs(data/sigma/basic): Add module docstring (#9908)", "changes": [{"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}]}, {"timestamp": 1635239355, "sha": "6b47ccb7", "message": "feat(group_theory/p_group): Center of a p-group is nontrivial (#9973)\nThe center of a p-group is nontrivial, stated in two different ways.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "bot_lt_center", ["is_p_group"]], ["add", "theorem", "center_nontrivial", ["is_p_group"]]]}]}, {"timestamp": 1635233148, "sha": "f229c83c", "message": "chore(*): move 2 lemmas to reorder imports (#9969)\nI want to use `measure_theory.measure_preserving` in various files, including `measure_theory.integral.lebesgue`. The file about measure preserving map had two lemmas about product measures. I move them to `measure_theory.constructions.prod`. I also golfed (and made it more readable at the same time!) the proof of `measure_theory.measure.prod_prod_le` using `to_measurable_set`.", "changes": [{"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": [["del", "theorem", "prod", ["measure_theory", "measure_preserving"]], ["del", "theorem", "skew_product", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["add", "theorem", "skew_product", ["measure_theory", "measure_preserving"]]]}]}, {"timestamp": 1635233147, "sha": "367d71ef", "message": "chore(order/iterate): review, add docs (#9965)\n* reorder sections;\n* add section docs;\n* use inequalities between functions in a few statements;\n* add a few lemmas about `strict_mono` functions.", "changes": [{"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": [["add", "theorem", "antitone_iterate_of_le_id", ["function"]], ["mod", "theorem", "id_le_iterate_of_id_le", ["function"]], ["mod", "theorem", "iterate_le_id_of_le_id", ["function"]], ["del", "theorem", "iterate_le_iterate_of_id_le", ["function"]], ["del", "theorem", "iterate_le_iterate_of_le_id", ["function"]], ["add", "theorem", "monotone_iterate_of_id_le", ["function"]], ["add", "theorem", "antitone_iterate_of_map_le", ["monotone"]], ["mod", "theorem", "iterate_comp_le_of_le", ["monotone"]], ["del", "theorem", "iterate_ge_of_ge", ["monotone"]], ["mod", "theorem", "iterate_le_of_le", ["monotone"]], ["mod", "theorem", "le_iterate_comp_of_le", ["monotone"]], ["add", "theorem", "le_iterate_of_le", ["monotone"]], ["add", "theorem", "monotone_iterate_of_le_map", ["monotone"]], ["add", "theorem", "strict_anti_iterate_of_map_lt", ["strict_mono"]], ["add", "theorem", "strict_mono_iterate_of_lt_map", ["strict_mono"]]]}]}, {"timestamp": 1635233145, "sha": "717de02d", "message": "refactor(linear_algebra/free_module/pid): move lemmas (#9962)\n`linear_algebra/free_module/pid` contains several results not directly related to PID. We move them in more appropriate files.\nExcept for small golfing and easy generalization, the statements and the proofs are untouched.", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "ne_zero_of_ortho", ["submodule"]], ["add", "theorem", "not_mem_of_ortho", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mem_submodule_image", ["linear_map"]], ["add", "theorem", "mem_submodule_image_of_le", ["linear_map"]], ["add", "def", "submodule_image", ["linear_map"]], ["add", "theorem", "submodule_image_apply_of_le", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "eq_bot_of_rank_eq_zero", []], ["add", "def", "induction_on_rank_aux", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "card_le_card_of_le", ["basis"]], ["add", "theorem", "card_le_card_of_linear_independent", ["basis"]], ["add", "theorem", "card_le_card_of_linear_independent_aux", ["basis"]], ["add", "theorem", "card_le_card_of_submodule", ["basis"]], ["add", "theorem", "rank_eq", ["ideal"]], ["add", "def", "induction_on_rank", ["submodule"]]]}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": [["del", "theorem", "card_le_card_of_le", ["basis"]], ["del", "theorem", "card_le_card_of_linear_independent", ["basis"]], ["del", "theorem", "card_le_card_of_linear_independent_aux", ["basis"]], ["del", "theorem", "card_le_card_of_submodule", ["basis"]], ["del", "theorem", "eq_bot_of_rank_eq_zero", []], ["del", "theorem", "generator_map_dvd_of_mem", []], ["del", "theorem", "generator_submodule_image_dvd_of_mem", []], ["del", "theorem", "rank_eq", ["ideal"]], ["del", "theorem", "mem_submodule_image", ["linear_map"]], ["del", "theorem", "mem_submodule_image_of_le", ["linear_map"]], ["del", "def", "submodule_image", ["linear_map"]], ["del", "theorem", "submodule_image_apply_of_le", ["linear_map"]], ["del", "theorem", "ne_zero_of_ortho", []], ["del", "theorem", "not_mem_of_ortho", []], ["del", "def", "induction_on_rank", ["submodule"]], ["del", "def", "induction_on_rank_aux", ["submodule"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "generator_map_dvd_of_mem", ["submodule", "is_principal"]], ["add", "theorem", "generator_submodule_image_dvd_of_mem", ["submodule", "is_principal"]]]}]}, {"timestamp": 1635225774, "sha": "5227f539", "message": "chore(data/equiv/encodable): a `[unique]` type is encodable (#9970)", "changes": [{"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/small.lean", "newPath": "src/data/equiv/encodable/small.lean", "changes": []}]}, {"timestamp": 1635215288, "sha": "a8e6442f", "message": "chore(scripts): update nolints.txt (#9971)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1635210078, "sha": "e88b4ede", "message": "chore(measure_theory/constructions/pi): add `pi_of_empty` (#9937)", "changes": [{"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["add", "theorem", "pi_of_empty", ["measure_theory", "measure"]], ["add", "theorem", "pi_univ", ["measure_theory", "measure"]]]}]}, {"timestamp": 1635202558, "sha": "56de12a7", "message": "refactor(data/mv_polynomial): upgrade `monomial` to a `linear_map` (#9870)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "C_eq_smul_one", ["mv_polynomial"]], ["add", "theorem", "X_pow_eq_monomial", ["mv_polynomial"]], ["del", "theorem", "X_pow_eq_single", ["mv_polynomial"]], ["add", "theorem", "eval₂_mul_C", ["mv_polynomial"]], ["add", "theorem", "finsupp_support_eq_support", ["mv_polynomial"]], ["mod", "def", "monomial", ["mv_polynomial"]], ["del", "theorem", "monomial_add", ["mv_polynomial"]], ["add", "theorem", "monomial_finsupp_sum_index", ["mv_polynomial"]], ["add", "def", "monomial_one_hom", ["mv_polynomial"]], ["add", "theorem", "monomial_one_hom_apply", ["mv_polynomial"]], ["add", "theorem", "monomial_pow", ["mv_polynomial"]], ["add", "theorem", "monomial_sum_index", ["mv_polynomial"]], ["add", "theorem", "monomial_sum_one", ["mv_polynomial"]], ["add", "theorem", "monomial_zero'", ["mv_polynomial"]], ["mod", "theorem", "sum_monomial_eq", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["del", "theorem", "monomial_neg", ["mv_polynomial"]], ["del", "theorem", "monomial_sub", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}]}, {"timestamp": 1635202556, "sha": "34b99336", "message": "feat(number_theory/liouville): the set of Liouville numbers has measure zero (#9702)\nAs a corollary, the filters `residual ℝ` and `volume.ae` are disjoint.", "changes": [{"oldPath": null, "newPath": "src/number_theory/liouville/liouville_with.lean", "changes": [["add", "theorem", "forall_liouville_with_iff", []], ["add", "theorem", "frequently_exists_num", ["liouville"]], ["add", "theorem", "add_int", ["liouville_with"]], ["add", "theorem", "add_int_iff", ["liouville_with"]], ["add", "theorem", "add_nat", ["liouville_with"]], ["add", "theorem", "add_nat_iff", ["liouville_with"]], ["add", "theorem", "add_rat", ["liouville_with"]], ["add", "theorem", "add_rat_iff", ["liouville_with"]], ["add", "theorem", "exists_pos", ["liouville_with"]], ["add", "theorem", "frequently_lt_rpow_neg", ["liouville_with"]], ["add", "theorem", "int_add", ["liouville_with"]], ["add", "theorem", "int_add_iff", ["liouville_with"]], ["add", "theorem", "int_mul", ["liouville_with"]], ["add", "theorem", "int_mul_iff", ["liouville_with"]], ["add", "theorem", "int_sub", ["liouville_with"]], ["add", "theorem", "int_sub_iff", ["liouville_with"]], ["add", "theorem", "mono", ["liouville_with"]], ["add", "theorem", "mul_int", ["liouville_with"]], ["add", "theorem", "mul_int_iff", ["liouville_with"]], ["add", "theorem", "mul_nat", ["liouville_with"]], ["add", "theorem", "mul_nat_iff", ["liouville_with"]], ["add", "theorem", "mul_rat", ["liouville_with"]], ["add", "theorem", "mul_rat_iff", ["liouville_with"]], ["add", "theorem", "nat_add", ["liouville_with"]], ["add", "theorem", "nat_add_iff", ["liouville_with"]], ["add", "theorem", "nat_mul", ["liouville_with"]], ["add", "theorem", "nat_mul_iff", ["liouville_with"]], ["add", "theorem", "nat_sub", ["liouville_with"]], ["add", "theorem", "nat_sub_iff", ["liouville_with"]], ["add", "theorem", "ne_cast_int", ["liouville_with"]], ["add", "theorem", "neg_iff", ["liouville_with"]], ["add", "theorem", "rat_add", ["liouville_with"]], ["add", "theorem", "rat_add_iff", ["liouville_with"]], ["add", "theorem", "rat_mul", ["liouville_with"]], ["add", "theorem", "rat_mul_iff", ["liouville_with"]], ["add", "theorem", "rat_sub", ["liouville_with"]], ["add", "theorem", "rat_sub_iff", ["liouville_with"]], ["add", "theorem", "sub_int", ["liouville_with"]], ["add", "theorem", "sub_int_iff", ["liouville_with"]], ["add", "theorem", "sub_nat", ["liouville_with"]], ["add", "theorem", "sub_nat_iff", ["liouville_with"]], ["add", "theorem", "sub_rat", ["liouville_with"]], ["add", "theorem", "sub_rat_iff", ["liouville_with"]], ["add", "def", "liouville_with", []], ["add", "theorem", "liouville_with_one", []]]}, {"oldPath": null, "newPath": "src/number_theory/liouville/measure.lean", "changes": [["add", "theorem", "ae_not_liouville", []], ["add", "theorem", "ae_not_liouville_with", []], ["add", "theorem", "disjoint_residual_ae", ["real"]], ["add", "theorem", "set_of_liouville_with_subset_aux", []], ["add", "theorem", "volume_Union_set_of_liouville_with", []], ["add", "theorem", "volume_set_of_liouville", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "disjoint_of_disjoint_of_mem", ["filter"]], ["add", "theorem", "and_frequently", ["filter", "eventually"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "exists_gt", ["filter", "eventually"]], ["add", "theorem", "exists_lt", ["filter", "eventually"]]]}]}, {"timestamp": 1635202555, "sha": "c363ad63", "message": "feat(category_theory/sites/*): Cover preserving functors (#9691)\nSplit from #9650\n- Defined `cover_preserving` functors as functors that push covering sieves to covering sieves.\n- Defined `compatible_preserving` functors as functors that push compatible families to compatible families.\n- Proved that functors that are both `cover_preserving` and `compatible_preserving` pulls sheaves to sheaves.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/cover_preserving.lean", "changes": [["add", "theorem", "apply_map", ["category_theory", "compatible_preserving"]], ["add", "structure", "compatible_preserving", ["category_theory"]], ["add", "theorem", "comp", ["category_theory", "cover_preserving"]], ["add", "structure", "cover_preserving", ["category_theory"]], ["add", "theorem", "id_cover_preserving", ["category_theory"]], ["add", "theorem", "functor_pushforward", ["category_theory", "presieve", "family_of_elements", "compatible"]], ["add", "theorem", "pullback_is_sheaf_of_cover_preserving", ["category_theory"]], ["add", "def", "pullback_sheaf", ["category_theory"]], ["add", "def", "pullback", ["category_theory", "sites"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "def", "sheaf_over", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["add", "theorem", "comp_of_compatible", ["category_theory", "presieve", "family_of_elements"]], ["add", "def", "functor_pushforward", ["category_theory", "presieve", "family_of_elements"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "structure", "functor_pushforward_structure", ["category_theory", "presieve"]]]}]}, {"timestamp": 1635193881, "sha": "54212007", "message": "feat(group_theory/index): Small values of `subgroup.index` (#9893)\n`H.index = 1 ↔ H = ⊤` and related results.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_eq_one", ["subgroup"]], ["add", "theorem", "index_ne_zero_of_fintype", ["subgroup"]], ["add", "theorem", "one_lt_index_of_ne_top", ["subgroup"]]]}]}, {"timestamp": 1635193880, "sha": "880c7bd4", "message": "chore(linear_algebra/matrix): add fin expansions for trace and adjugate, and some trace lemmas (#9884)\nWe have these expansions for `det` already, I figured we may as well have them for these.\nThis adds some other trivial trace lemmas while I'm touching the same file.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "adjugate_fin_one", ["matrix"]], ["add", "theorem", "adjugate_fin_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": [["add", "theorem", "diag_col_mul_row", ["matrix"]], ["add", "theorem", "trace_col_mul_row", ["matrix"]], ["add", "theorem", "trace_fin_one", ["matrix"]], ["add", "theorem", "trace_fin_three", ["matrix"]], ["add", "theorem", "trace_fin_two", ["matrix"]], ["add", "theorem", "trace_fin_zero", ["matrix"]], ["add", "theorem", "trace_mul_cycle'", ["matrix"]], ["add", "theorem", "trace_mul_cycle", ["matrix"]]]}]}, {"timestamp": 1635193879, "sha": "e808b419", "message": "feat(data/matrix/basic): lemmas about transpose and conj_transpose on sums and products (#9880)\nThis also generalizes some previous results from `star_ring` to `star_add_monoid` now that the latter exists.\nTo help prove the non-commutative statements, this adds `monoid_hom.unop_map_list_prod` and similar.\nThis could probably used for proving `star_list_prod` in future.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "unop_map_list_prod", ["ring_hom"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "unop_map_list_prod", ["ring_equiv"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_concat", ["list"]], ["add", "theorem", "unop_map_list_prod", ["monoid_hom"]], ["add", "theorem", "op_list_prod", ["opposite"]], ["add", "theorem", "unop_list_prod", ["opposite"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "conj_transpose_add", ["matrix"]], ["add", "def", "conj_transpose_add_equiv", ["matrix"]], ["add", "theorem", "conj_transpose_add_equiv_symm", ["matrix"]], ["add", "theorem", "conj_transpose_list_prod", ["matrix"]], ["add", "theorem", "conj_transpose_list_sum", ["matrix"]], ["add", "theorem", "conj_transpose_multiset_sum", ["matrix"]], ["add", "def", "conj_transpose_ring_equiv", ["matrix"]], ["mod", "theorem", "conj_transpose_sub", ["matrix"]], ["add", "theorem", "conj_transpose_sum", ["matrix"]], ["add", "def", "transpose_add_equiv", ["matrix"]], ["add", "theorem", "transpose_add_equiv_symm", ["matrix"]], ["add", "theorem", "transpose_list_prod", ["matrix"]], ["add", "theorem", "transpose_list_sum", ["matrix"]], ["add", "theorem", "transpose_multiset_sum", ["matrix"]], ["add", "def", "transpose_ring_equiv", ["matrix"]], ["add", "theorem", "transpose_sum", ["matrix"]]]}]}, {"timestamp": 1635183791, "sha": "87fa12a7", "message": "chore(linear_algebra/matrix/nonsingular_inverse): replace `1 < fintype.card n` with `nontrivial n` (#9953)\nThis likely makes this a better simp lemma", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["mod", "theorem", "adjugate_zero", ["matrix"]]]}]}, {"timestamp": 1635183790, "sha": "0d131fe5", "message": "chore(group_theory/submonoid): move a lemma to reduce imports (#9951)\nCurrently, `algebra.pointwise` is a relatively \"heavy\" import (e.g., it depends on `data.set.finite`) and I want to use submonoid closures a bit earlier than that.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["del", "theorem", "mem_closure_inv", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["add", "theorem", "mem_closure_inv", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1635183789, "sha": "374885af", "message": "feat(linear_algebra/matrix/nonsingular_inverse): lemmas about adjugate (#9947)", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_update_column_smul'", ["matrix"]], ["add", "theorem", "det_update_row_smul'", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "adjugate_conj_transpose", ["matrix"]], ["add", "theorem", "adjugate_smul", ["matrix"]], ["add", "theorem", "cramer_smul", ["matrix"]], ["del", "theorem", "map_adjugate", ["matrix", "ring_hom"]], ["add", "theorem", "map_adjugate", ["ring_hom"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["add", "theorem", "map_update_smul", ["multilinear_map"]]]}]}, {"timestamp": 1635183786, "sha": "c693682f", "message": "chore(analysis/normed/group/basic): make various norm instances computable (#9946)\nInstead of defining the default `edist` as `ennreal.of_real` which introduces an `ite` on an undecidable equality, this constructs the `ennreal` directly using a proof of non-negativity.\nThis removes `noncomputable theory` from some files so as to make it obvious from the source alone which definitions are and are not computable.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "def", "of_core", ["normed_group"]], ["add", "def", "of_core", ["semi_normed_group"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "def", "diam", ["metric"]]]}]}, {"timestamp": 1635183783, "sha": "5fcbd2b9", "message": "chore(linear_algebra/matrix/nonsingular_inverse): use pi.single instead of ite (#9944)", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["mod", "def", "adjugate", ["matrix"]]]}]}, {"timestamp": 1635183781, "sha": "5778df87", "message": "chore(analysis/complex/circle): upgrade `exp_map_circle` to `continuous_map` (#9942)", "changes": [{"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["mod", "def", "exp_map_circle", []], ["add", "theorem", "exp_map_circle_add", []], ["add", "theorem", "exp_map_circle_zero", []]]}]}, {"timestamp": 1635183780, "sha": "2026a5f7", "message": "feat(measure_theory/measure): better `measure.restrict_singleton` (#9936)\nWith new `restrict_singleton`, `simp` can simplify `∫ x in {a}, f x ∂μ`\nto `(μ {a}).to_real • f a`.", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "integral_dirac'", ["measure_theory"]], ["mod", "theorem", "integral_dirac", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "restrict_singleton'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_singleton", ["measure_theory", "measure"]]]}]}, {"timestamp": 1635183779, "sha": "8eb1c029", "message": "feat(analysis/special_functions/pow): Equivalent conditions for zero powers (#9897)\nLemmas for 0^x in the reals and complex numbers.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "eq_zero_cpow_iff", ["complex"]], ["add", "theorem", "zero_cpow_eq_iff", ["complex"]], ["add", "theorem", "eq_zero_rpow_iff", ["real"]], ["add", "theorem", "zero_rpow_eq_iff", ["real"]]]}]}, {"timestamp": 1635183778, "sha": "312db88b", "message": "feat(*): use `ordered_sub` instead of `nat.sub` lemmas (#9855)\n* For all `nat.sub` lemmas in core, prefer to use the `has_ordered_sub` version.\n* Most lemmas have an identical version for `has_ordered_sub`. In some cases we only have the symmetric version.\n* Make arguments to `tsub_add_eq_tsub_tsub` and `tsub_add_eq_tsub_tsub_swap` explicit\n* Rename `add_tsub_add_right_eq_tsub -> add_tsub_add_eq_tsub_right` (for consistency with the `_left` version)\n* Rename `sub_mul' -> tsub_mul` and `mul_sub' -> mul_tsub` (these were forgotten in #9793)\n* Many of the fixes are to fix the identification of `n < m` and `n.succ \\le m`.\n* Add projection notation `h.nat_succ_le` for `nat.succ_le_of_lt h`.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo1981_q3.lean", "newPath": "archive/imo/imo1981_q3.lean", "changes": []}, {"oldPath": "archive/miu_language/decision_suf.lean", "newPath": "archive/miu_language/decision_suf.lean", "changes": []}, {"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": []}, {"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/terminated_stable.lean", "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "mul_sub'", []], ["add", "theorem", "mul_tsub", []], ["del", "theorem", "sub_mul'", []], ["add", "theorem", "tsub_mul", []]]}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "add_tsub_add_eq_tsub_right", []], ["del", "theorem", "add_tsub_add_right_eq_tsub", []], ["mod", "theorem", "tsub_add_eq_tsub_tsub", []], ["mod", "theorem", "tsub_add_eq_tsub_tsub_swap", []]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/finite.lean", "newPath": "src/combinatorics/derangements/finite.lean", "changes": []}, {"oldPath": "src/combinatorics/hall/finite.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/bitvec/core.lean", "newPath": "src/data/bitvec/core.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": "src/data/list/nat_antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": []}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "nat_succ_le", ["has_lt", "lt"]]]}, {"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose/cast.lean", "newPath": "src/data/nat/choose/cast.lean", "changes": []}, {"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": []}, {"oldPath": "src/data/nat/choose/sum.lean", "newPath": "src/data/nat/choose/sum.lean", "changes": []}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/cast.lean", "newPath": "src/data/nat/factorial/cast.lean", "changes": []}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/psub.lean", "newPath": "src/data/nat/psub.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/sym/card.lean", "newPath": "src/data/sym/card.lean", "changes": []}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/fpow.lean", "newPath": "src/linear_algebra/matrix/fpow.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/teichmuller.lean", "newPath": "src/ring_theory/witt_vector/teichmuller.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/verschiebung.lean", "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/game/domineering.lean", "newPath": "src/set_theory/game/domineering.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}]}, {"timestamp": 1635183776, "sha": "f298c559", "message": "refactor(linear_algebra/finite_dimensional): define finite_dimensional using module.finite (#9854)\n`finite_dimensional K V` is by definition `is_noetherian K V`. We refactor this to use everywhere `finite K V` instead.\nTo keep the PR reasonably small, we don't delete `finite_dimension`, but we define it as `module.finite`. In a future PR we will remove it.\n- [x] depends on: #9860", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "def", "fintype_basis_index", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}]}, {"timestamp": 1635169432, "sha": "3d457a24", "message": "chore(topology/continuous_function): review API (#9950)\n* add `simps` config for `α →ᵇ β`;\n* use better variable names in `topology.continuous_function.compact`;\n* weaken some TC assumptions in `topology.continuous_function.compact`;\n* migrate more API from `α →ᵇ β` to `C(α, β)`.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["del", "theorem", "coe_const", ["bounded_continuous_function"]], ["mod", "def", "const", ["bounded_continuous_function"]], ["add", "theorem", "const_apply'", ["bounded_continuous_function"]], ["del", "theorem", "const_apply", ["bounded_continuous_function"]], ["mod", "def", "mk_of_discrete", ["bounded_continuous_function"]], ["del", "theorem", "mk_of_discrete_apply", ["bounded_continuous_function"]], ["add", "def", "apply", ["bounded_continuous_function", "simps"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "dist_forget_boundedness", ["bounded_continuous_function"]], ["add", "theorem", "dist_mk_of_compact", ["bounded_continuous_function"]], ["mod", "theorem", "norm_forget_boundedness_eq", ["bounded_continuous_function"]], ["add", "theorem", "norm_mk_of_compact", ["bounded_continuous_function"]], ["mod", "def", "add_equiv_bounded_of_compact", ["continuous_map"]], ["del", "theorem", "add_equiv_bounded_of_compact_apply_apply", ["continuous_map"]], ["del", "theorem", "add_equiv_bounded_of_compact_to_equiv", ["continuous_map"]], ["add", "theorem", "continuous_coe", ["continuous_map"]], ["add", "theorem", "continuous_eval", ["continuous_map"]], ["add", "theorem", "continuous_evalx", ["continuous_map"]], ["add", "theorem", "dist_apply_le_dist", ["continuous_map"]], ["mod", "theorem", "dist_lt_of_nonempty", ["continuous_map"]], ["mod", "def", "equiv_bounded_of_compact", ["continuous_map"]], ["mod", "theorem", "linear_isometry_bounded_of_compact_apply_apply", ["continuous_map"]], ["mod", "theorem", "linear_isometry_bounded_of_compact_symm_apply", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}]}, {"timestamp": 1635169431, "sha": "f23354dc", "message": "feat(linear_algebra/basic, ring_theory/ideal/basic): add span_insert (#9941)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_insert", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "span_insert", ["ideal"]]]}]}, {"timestamp": 1635159585, "sha": "26c838fc", "message": "refactor(data/real/ennreal): remove ordered sub simp lemmas (#9902)\n* They are now simp lemmas in `algebra/order/sub`\n* Squeeze some simps", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["mod", "theorem", "add_tsub_cancel_of_le", []], ["mod", "theorem", "tsub_eq_zero_iff_le", []], ["add", "theorem", "tsub_eq_zero_of_le", []], ["mod", "theorem", "tsub_pos_iff_lt", []]]}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "sub_eq_zero_of_le", ["ennreal"]]]}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1635151042, "sha": "dc1484e4", "message": "feat(ring_theory/polynomial/cyclotomic): add lemmas about evaluation of cyclotomic polynomials at one (#9910)", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "eval_one_cyclotomic_prime", ["polynomial"]], ["add", "theorem", "eval_one_cyclotomic_prime_pow", ["polynomial"]], ["add", "theorem", "eval₂_one_cyclotomic_prime", ["polynomial"]], ["add", "theorem", "eval₂_one_cyclotomic_prime_pow", ["polynomial"]]]}]}, {"timestamp": 1635144667, "sha": "7e532030", "message": "chore(group_theory/submonoid/operations): golf a few proofs (#9948)", "changes": [{"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "mk_mul_mk", ["submonoid"]], ["add", "theorem", "mul_def", ["submonoid"]], ["add", "theorem", "one_def", ["submonoid"]]]}]}, {"timestamp": 1635144665, "sha": "bfcbe681", "message": "feat(group_theory/subgroup/basic): `normalizer_eq_top` (#9917)\nThe normalizer is the whole group if and only if the subgroup is normal.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "normalizer_eq_top", ["subgroup"]]]}]}, {"timestamp": 1635144663, "sha": "41b90d7a", "message": "feat(group_theory/index): Second isomorphism theorem in terms of `relindex` (#9915)\nRestates the second isomorphism theorem in terms of `relindex`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "inf_relindex_eq_relindex_sup", ["subgroup"]], ["add", "theorem", "relindex_eq_relindex_sup", ["subgroup"]]]}]}, {"timestamp": 1635138807, "sha": "b9260f28", "message": "feat(group_theory/subgroup/basic): `map_subtype_le` (#9916)\nA subgroup of a subgroup is `≤`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "map_subtype_le", ["subgroup"]]]}]}, {"timestamp": 1635125297, "sha": "951a60ea", "message": "chore(data/list/basic): golf a proof (#9949)\nProve `list.mem_map` directly, get `list.exists_of_mem_map` and\n`list.mem_map_of_mem` as corollaries.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "exists_of_mem_map", ["list"]], ["mod", "theorem", "pmap_eq_map", ["list"]]]}]}, {"timestamp": 1635125296, "sha": "264d33ec", "message": "docs(control/traversable/lemmas): Add module docstring (#9927)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/control/traversable/lemmas.lean", "newPath": "src/control/traversable/lemmas.lean", "changes": [["mod", "theorem", "id_sequence", ["traversable"]], ["mod", "theorem", "map_traverse", ["traversable"]], ["mod", "theorem", "pure_transformation_apply", ["traversable"]], ["mod", "theorem", "pure_traverse", ["traversable"]], ["mod", "theorem", "traverse_eq_map_id'", ["traversable"]], ["mod", "theorem", "traverse_id", ["traversable"]]]}]}, {"timestamp": 1635115978, "sha": "c4760b97", "message": "feat(algebra/big_operators/basic): prod/sum over an empty type (#9939)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_empty", ["fintype"]]]}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": []}]}, {"timestamp": 1635115977, "sha": "f9da68cc", "message": "feat(*): a few more `fun_unique`s (#9938)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "fun_unique", ["equiv"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "fun_unique", ["linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_fun_unique", ["continuous_linear_equiv"]], ["add", "theorem", "coe_fun_unique_symm", ["continuous_linear_equiv"]], ["add", "def", "fun_unique", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "fun_unique", ["homeomorph"]]]}]}, {"timestamp": 1635115976, "sha": "942e60f7", "message": "chore(algebra/*/pi): add missing lemmas about function.update and set.piecewise (#9935)\nThis adds `function.update_{zero,one,add,mul,sub,div,neg,inv,smul,vadd}`, and moves `pi.piecewise_{sub,div,neg,inv}` into the `set` namespace to match `set.piecewise_{add,mul}`.\nThis also adds `finset.piecewise_erase_univ`, as this is tangentially related.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "update_div", ["function"]], ["add", "theorem", "update_inv", ["function"]], ["add", "theorem", "update_mul", ["function"]], ["add", "theorem", "update_one", ["function"]], ["del", "theorem", "piecewise_div", ["pi"]], ["del", "theorem", "piecewise_inv", ["pi"]], ["add", "theorem", "piecewise_div", ["set"]], ["add", "theorem", "piecewise_inv", ["set"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "update_smul", ["function"]], ["add", "theorem", "piecewise_smul", ["set"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "compl_singleton", ["finset"]], ["add", "theorem", "piecewise_erase_univ", ["finset"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "apply_update₂", ["function"]]]}]}, {"timestamp": 1635115975, "sha": "1e7f6b9a", "message": "docs(control/bitraversable/instances): Add def docstrings (#9931)", "changes": [{"oldPath": "src/control/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": [["mod", "def", "bitraverse", ["const"]]]}]}, {"timestamp": 1635115974, "sha": "5d1e8f79", "message": "docs(control/applicative): Add module docstring (#9930)", "changes": [{"oldPath": "src/control/applicative.lean", "newPath": "src/control/applicative.lean", "changes": [["mod", "theorem", "pure_seq_eq_map'", ["applicative"]]]}]}, {"timestamp": 1635115973, "sha": "6f1d45dc", "message": "docs(control/bitraversable/basic): Add defs docstrings (#9929)", "changes": [{"oldPath": "src/control/bitraversable/basic.lean", "newPath": "src/control/bitraversable/basic.lean", "changes": []}]}, {"timestamp": 1635115972, "sha": "5642c628", "message": "docs(control/traversable/equiv): Add module docstring (#9928)", "changes": [{"oldPath": "src/control/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}]}, {"timestamp": 1635115971, "sha": "8c0b8c71", "message": "feat(group_theory/subgroup/basic): Contrapositive of `card_le_one_iff_eq_bot` (#9918)\nAdds contrapositive of `card_le_one_iff_eq_bot`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "one_lt_card_iff_ne_bot", ["subgroup"]]]}]}, {"timestamp": 1635115970, "sha": "44682319", "message": "feat(data/nat/log): Equivalent conditions for logarithms to equal zero and one (#9903)\nAdd equivalent conditions for a `nat.log` to equal 0 or 1.", "changes": [{"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": [["add", "theorem", "log_eq_one_iff", ["nat"]], ["add", "theorem", "log_eq_zero_iff", ["nat"]], ["add", "theorem", "log_of_one_lt_of_le", ["nat"]]]}]}, {"timestamp": 1635115969, "sha": "12515db6", "message": "feat(data/list): product of list.update_nth in terms of inverses (#9800)\nExpression for the product of `l.update_nth n x` in terms of inverses instead of `take` and `drop`, assuming a group instead of a monoid.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_drop_succ", ["list"]], ["add", "theorem", "prod_update_nth'", ["list"]], ["del", "theorem", "sum_take_add_sum_drop", ["list"]], ["del", "theorem", "sum_take_succ", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "prod_mul_prod_eq_prod_zip_with_mul_prod_drop", ["list"]], ["add", "theorem", "prod_mul_prod_eq_prod_zip_with_of_length_eq", ["list"]]]}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": [["add", "theorem", "prod_update_nth'", ["vector"]], ["add", "theorem", "prod_update_nth", ["vector"]], ["add", "theorem", "to_list_update_nth", ["vector"]]]}, {"oldPath": "src/data/vector/zip.lean", "newPath": "src/data/vector/zip.lean", "changes": [["add", "theorem", "prod_mul_prod_eq_prod_zip_with", ["vector"]]]}]}, {"timestamp": 1635113209, "sha": "c20f08ed", "message": "feat(dynamics/ergodic/measure_preserving): add `measure_preserving.symm` (#9940)\nAlso make the proof of `measure_preserving.skew_product` a bit more readable.", "changes": [{"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": [["add", "theorem", "symm", ["measure_theory", "measure_preserving"]]]}]}, {"timestamp": 1635113208, "sha": "4ea8de91", "message": "feat(measure_theory/integral): Divergence theorem for Bochner integral (#9811)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/integral/divergence_theorem.lean", "changes": [["add", "theorem", "integral_divergence_of_has_fderiv_within_at_off_countable", ["measure_theory"]]]}]}, {"timestamp": 1635110191, "sha": "a30e1900", "message": "split(analysis/normed_space/exponential): split file to minimize dependencies (#9932)\nAs suggested by @urkud, this moves all the results depending on derivatives, `complex.exp` and `real.exp` to a new file `analysis/special_function/exponential`. That way the definitions of `exp` and `[complex, real].exp` are independent, which means we could eventually redefine the latter in terms of the former without breaking the import tree.", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["del", "theorem", "exp_eq_exp_ℂ_ℂ", ["complex"]], ["del", "theorem", "has_deriv_at_exp", []], ["del", "theorem", "has_deriv_at_exp_of_mem_ball", []], ["del", "theorem", "has_deriv_at_exp_zero", []], ["del", "theorem", "has_deriv_at_exp_zero_of_radius_pos", []], ["del", "theorem", "has_fderiv_at_exp", []], ["del", "theorem", "has_fderiv_at_exp_of_mem_ball", []], ["del", "theorem", "has_fderiv_at_exp_zero", []], ["del", "theorem", "has_fderiv_at_exp_zero_of_radius_pos", []], ["del", "theorem", "has_strict_deriv_at_exp", []], ["del", "theorem", "has_strict_deriv_at_exp_of_mem_ball", []], ["del", "theorem", "has_strict_deriv_at_exp_zero", []], ["del", "theorem", "has_strict_deriv_at_exp_zero_of_radius_pos", []], ["del", "theorem", "has_strict_fderiv_at_exp", []], ["del", "theorem", "has_strict_fderiv_at_exp_of_mem_ball", []], ["del", "theorem", "has_strict_fderiv_at_exp_zero", []], ["del", "theorem", "has_strict_fderiv_at_exp_zero_of_radius_pos", []], ["del", "theorem", "exp_eq_exp_ℝ_ℝ", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/exponential.lean", "changes": [["add", "theorem", "exp_eq_exp_ℂ_ℂ", ["complex"]], ["add", "theorem", "has_deriv_at_exp", []], ["add", "theorem", "has_deriv_at_exp_of_mem_ball", []], ["add", "theorem", "has_deriv_at_exp_zero", []], ["add", "theorem", "has_deriv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "has_fderiv_at_exp", []], ["add", "theorem", "has_fderiv_at_exp_of_mem_ball", []], ["add", "theorem", "has_fderiv_at_exp_zero", []], ["add", "theorem", "has_fderiv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "has_strict_deriv_at_exp", []], ["add", "theorem", "has_strict_deriv_at_exp_of_mem_ball", []], ["add", "theorem", "has_strict_deriv_at_exp_zero", []], ["add", "theorem", "has_strict_deriv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "has_strict_fderiv_at_exp", []], ["add", "theorem", "has_strict_fderiv_at_exp_of_mem_ball", []], ["add", "theorem", "has_strict_fderiv_at_exp_zero", []], ["add", "theorem", "has_strict_fderiv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "exp_eq_exp_ℝ_ℝ", ["real"]]]}, {"oldPath": "src/combinatorics/derangements/exponential.lean", "newPath": "src/combinatorics/derangements/exponential.lean", "changes": []}]}, {"timestamp": 1635091462, "sha": "dc6b8e1c", "message": "feat(topology): add some lemmas (#9907)\n* From the sphere eversion project\n* Add compositional version `continuous.fst` of `continuous_fst`, compare `measurable.fst`.\n* Add `comp_continuous_at_iff` and `comp_continuous_at_iff'` for `homeomorph` (and for `inducing`).\n* Add some variants of these (requested by review).", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "fst", ["continuous"]], ["add", "theorem", "snd", ["continuous"]], ["add", "theorem", "fst", ["continuous_at"]], ["add", "theorem", "snd", ["continuous_at"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "fst", ["continuous_on"]], ["add", "theorem", "snd", ["continuous_on"]], ["add", "theorem", "continuous_within_at_iff", ["inducing"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "comp_continuous_at_iff'", ["homeomorph"]], ["add", "theorem", "comp_continuous_at_iff", ["homeomorph"]], ["add", "theorem", "comp_continuous_within_at_iff", ["homeomorph"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "continuous_at_iff'", ["inducing"]], ["add", "theorem", "continuous_at_iff", ["inducing"]]]}]}, {"timestamp": 1635082494, "sha": "696f07f2", "message": "split(data/list/lattice): split off `data.list.basic` (#9906)", "changes": [{"oldPath": "src/data/list/bag_inter.lean", "newPath": null, "changes": [["del", "theorem", "bag_inter_nil", ["list"]], ["del", "theorem", "bag_inter_nil_iff_inter_nil", ["list"]], ["del", "theorem", "bag_inter_sublist_left", ["list"]], ["del", "theorem", "cons_bag_inter_of_neg", ["list"]], ["del", "theorem", "cons_bag_inter_of_pos", ["list"]], ["del", "theorem", "count_bag_inter", ["list"]], ["del", "theorem", "mem_bag_inter", ["list"]], ["del", "theorem", "nil_bag_inter", ["list"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "cons_union", ["list"]], ["del", "theorem", "symm", ["list", "disjoint"]], ["del", "theorem", "disjoint_append_left", ["list"]], ["del", "theorem", "disjoint_append_right", ["list"]], ["del", "theorem", "disjoint_comm", ["list"]], ["del", "theorem", "disjoint_cons_left", ["list"]], ["del", "theorem", "disjoint_cons_right", ["list"]], ["del", "theorem", "disjoint_iff_ne", ["list"]], ["del", "theorem", "disjoint_left", ["list"]], ["del", "theorem", "disjoint_nil_left", ["list"]], ["del", "theorem", "disjoint_nil_right", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_left_left", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_left_right", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_right_left", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_right_right", ["list"]], ["del", "theorem", "disjoint_of_disjoint_cons_left", ["list"]], ["del", "theorem", "disjoint_of_disjoint_cons_right", ["list"]], ["del", "theorem", "disjoint_of_subset_left", ["list"]], ["del", "theorem", "disjoint_of_subset_right", ["list"]], ["del", "theorem", "disjoint_right", ["list"]], ["del", "theorem", "disjoint_singleton", ["list"]], ["del", "theorem", "disjoint_take_drop", ["list"]], ["del", "theorem", "forall_mem_inter_of_forall_left", ["list"]], ["del", "theorem", "forall_mem_inter_of_forall_right", ["list"]], ["del", "theorem", "forall_mem_of_forall_mem_union_left", ["list"]], ["del", "theorem", "forall_mem_of_forall_mem_union_right", ["list"]], ["del", "theorem", "forall_mem_union", ["list"]], ["del", "theorem", "inter_cons_of_mem", ["list"]], ["del", "theorem", "inter_cons_of_not_mem", ["list"]], ["del", "theorem", "inter_eq_nil_iff_disjoint", ["list"]], ["del", "theorem", "inter_nil", ["list"]], ["del", "theorem", "inter_reverse", ["list"]], ["del", "theorem", "inter_subset_left", ["list"]], ["del", "theorem", "inter_subset_right", ["list"]], ["del", "theorem", "mem_inter", ["list"]], ["del", "theorem", "mem_inter_of_mem_of_mem", ["list"]], ["del", "theorem", "mem_of_mem_inter_left", ["list"]], ["del", "theorem", "mem_of_mem_inter_right", ["list"]], ["del", "theorem", "mem_union", ["list"]], ["del", "theorem", "mem_union_left", ["list"]], ["del", "theorem", "mem_union_right", ["list"]], ["del", "theorem", "nil_union", ["list"]], ["del", "theorem", "singleton_disjoint", ["list"]], ["del", "theorem", "sublist_suffix_of_union", ["list"]], ["del", "theorem", "subset_inter", ["list"]], ["del", "theorem", "suffix_union_right", ["list"]], ["del", "theorem", "union_sublist_append", ["list"]]]}, {"oldPath": "src/data/list/default.lean", "newPath": "src/data/list/default.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/lattice.lean", "changes": [["add", "theorem", "bag_inter_nil", ["list"]], ["add", "theorem", "bag_inter_nil_iff_inter_nil", ["list"]], ["add", "theorem", "bag_inter_sublist_left", ["list"]], ["add", "theorem", "cons_bag_inter_of_neg", ["list"]], ["add", "theorem", "cons_bag_inter_of_pos", ["list"]], ["add", "theorem", "cons_union", ["list"]], ["add", "theorem", "count_bag_inter", ["list"]], ["add", "theorem", "symm", ["list", "disjoint"]], ["add", "theorem", "disjoint_append_left", ["list"]], ["add", "theorem", "disjoint_append_right", ["list"]], ["add", "theorem", "disjoint_comm", ["list"]], ["add", "theorem", "disjoint_cons_left", ["list"]], ["add", "theorem", "disjoint_cons_right", ["list"]], ["add", "theorem", "disjoint_iff_ne", ["list"]], ["add", "theorem", "disjoint_left", ["list"]], ["add", "theorem", "disjoint_nil_left", ["list"]], ["add", "theorem", "disjoint_nil_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_left_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_left_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_right_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_right_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_cons_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_cons_right", ["list"]], ["add", "theorem", "disjoint_of_subset_left", ["list"]], ["add", "theorem", "disjoint_of_subset_right", ["list"]], ["add", "theorem", "disjoint_right", ["list"]], ["add", "theorem", "disjoint_singleton", ["list"]], ["add", "theorem", "disjoint_take_drop", ["list"]], ["add", "theorem", "forall_mem_inter_of_forall_left", ["list"]], ["add", "theorem", "forall_mem_inter_of_forall_right", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_union_left", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_union_right", ["list"]], ["add", "theorem", "forall_mem_union", ["list"]], ["add", "theorem", "inter_cons_of_mem", ["list"]], ["add", "theorem", "inter_cons_of_not_mem", ["list"]], ["add", "theorem", "inter_eq_nil_iff_disjoint", ["list"]], ["add", "theorem", "inter_nil", ["list"]], ["add", "theorem", "inter_reverse", ["list"]], ["add", "theorem", "inter_subset_left", ["list"]], ["add", "theorem", "inter_subset_right", ["list"]], ["add", "theorem", "mem_bag_inter", ["list"]], ["add", "theorem", "mem_inter", ["list"]], ["add", "theorem", "mem_inter_of_mem_of_mem", ["list"]], ["add", "theorem", "mem_of_mem_inter_left", ["list"]], ["add", "theorem", "mem_of_mem_inter_right", ["list"]], ["add", "theorem", "mem_union", ["list"]], ["add", "theorem", "mem_union_left", ["list"]], ["add", "theorem", "mem_union_right", ["list"]], ["add", "theorem", "nil_bag_inter", ["list"]], ["add", "theorem", "nil_union", ["list"]], ["add", "theorem", "singleton_disjoint", ["list"]], ["add", "theorem", "sublist_suffix_of_union", ["list"]], ["add", "theorem", "subset_inter", ["list"]], ["add", "theorem", "suffix_union_right", ["list"]], ["add", "theorem", "union_sublist_append", ["list"]]]}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}]}, {"timestamp": 1635082492, "sha": "9dc3b4d6", "message": "feat(topology/algebra/group): continuous div lemmas (#9905)\n* From the sphere eversion project\n* There were already some lemmas about `sub`, now they also have multiplicative versions\n* Add more lemmas about `div` being continuous\n* Add `continuous_at.inv`\n* Rename `nhds_translation` -> `nhds_translation_sub`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "div'", ["continuous"]], ["del", "theorem", "sub", ["continuous"]], ["add", "theorem", "div'", ["continuous_at"]], ["add", "theorem", "inv", ["continuous_at"]], ["add", "theorem", "continuous_div_left'", []], ["add", "theorem", "continuous_div_right'", []], ["add", "theorem", "div'", ["continuous_on"]], ["del", "theorem", "sub", ["continuous_on"]], ["add", "theorem", "div'", ["continuous_within_at"]], ["del", "theorem", "sub", ["continuous_within_at"]], ["add", "theorem", "const_div'", ["filter", "tendsto"]], ["add", "theorem", "div'", ["filter", "tendsto"]], ["add", "theorem", "div_const'", ["filter", "tendsto"]], ["del", "theorem", "sub", ["filter", "tendsto"]], ["del", "theorem", "nhds_translation", []], ["add", "theorem", "nhds_translation_div", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1635072608, "sha": "be948000", "message": "feat(data/real/nnreal): use the nonneg instance (#9701)\n... to show that `nnreal` forms a conditionally complete linear order with bot.\nThis requires some fixes in the order hierarchy.\n* orders on subtypes are now obtained by lifting `coe` instead of `subtype.val`. This has the nice side benefit that some proofs became simpler.\n* `subset_conditionally_complete_linear_order` is now reducible", "changes": [{"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/ringed_space.lean", "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": [["mod", "theorem", "exists_succ", ["nat", "subtype"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1635063999, "sha": "416edeed", "message": "feat(analysis/normed_space/is_R_or_C): add three lemmas on bounds of linear maps over is_R_or_C. (#9827)\nAdding lemmas `linear_map.bound_of_sphere_bound`, `linear_map.bound_of_ball_bound`, `continuous_linear_map.op_norm_bound_of_ball_bound` as a preparation of a PR on Banach-Alaoglu theorem.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/is_R_or_C.lean", "changes": [["add", "theorem", "op_norm_bound_of_ball_bound", ["continuous_linear_map"]], ["add", "theorem", "bound_of_ball_bound", ["linear_map"]], ["add", "theorem", "bound_of_sphere_bound", ["linear_map"]]]}]}, {"timestamp": 1635046419, "sha": "ecc544ea", "message": "chore(scripts): update nolints.txt (#9923)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1635046418, "sha": "e836a722", "message": "feat(order/galois_connection): add `exists_eq_{l,u}`, tidy up lemmas (#9904)\nThis makes some arguments implicit to `compose` as these are inferrable from the other arguments, and changes `u_l_u_eq_u` and `l_u_l_eq_l` to be applied rather than unapplied, which shortens both the proof and the places where the lemma is used.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "exists_eq_l", ["galois_connection"]], ["add", "theorem", "exists_eq_u", ["galois_connection"]], ["add", "theorem", "l_u_l_eq_l'", ["galois_connection"]], ["mod", "theorem", "l_u_l_eq_l", ["galois_connection"]], ["add", "theorem", "u_l_u_eq_u'", ["galois_connection"]], ["mod", "theorem", "u_l_u_eq_u", ["galois_connection"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1635046417, "sha": "49c68412", "message": "chore(topology): generalize `real.image_Icc` etc (#9784)\n* add lemmas about `Ici`/`Iic`/`Icc` in `α × β`;\n* introduce a typeclass for `is_compact_Icc` so that the same lemma works for `ℝ` and `ℝⁿ`;\n* generalize `real.image_Icc` etc to a conditionally complete linear order (e.g., now it works for `nnreal`, `ennreal`, `ereal`), move these lemmas to the `continuous_on` namespace.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/box_integral/basic.lean", "newPath": "src/analysis/box_integral/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/box/basic.lean", "newPath": "src/analysis/box_integral/box/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/divergence_theorem.lean", "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/measure.lean", "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_prod_Icc", ["set"]], ["add", "theorem", "Icc_prod_eq", ["set"]], ["add", "theorem", "Ici_prod_Ici", ["set"]], ["add", "theorem", "Ici_prod_eq", ["set"]], ["add", "theorem", "Iic_prod_Iic", ["set"]], ["add", "theorem", "Iic_prod_eq", ["set"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/compact.lean", "newPath": "src/topology/algebra/ordered/compact.lean", "changes": [["mod", "theorem", "exists_forall_ge", ["continuous"]], ["mod", "theorem", "exists_forall_le", ["continuous"]], ["add", "theorem", "image_Icc", ["continuous_on"]], ["add", "theorem", "image_interval", ["continuous_on"]], ["add", "theorem", "image_interval_eq_Icc", ["continuous_on"]], ["mod", "theorem", "exists_Inf_image_eq", ["is_compact"]], ["mod", "theorem", "exists_Sup_image_eq", ["is_compact"]], ["mod", "theorem", "exists_forall_ge", ["is_compact"]], ["mod", "theorem", "exists_forall_le", ["is_compact"]], ["del", "theorem", "is_compact_Icc", []], ["mod", "theorem", "is_compact_interval", []], ["del", "theorem", "is_compact_pi_Icc", []]]}, {"oldPath": "src/topology/algebra/ordered/intermediate_value.lean", "newPath": "src/topology/algebra/ordered/intermediate_value.lean", "changes": [["add", "theorem", "surj_on_Icc", ["continuous_on"]], ["add", "theorem", "surj_on_interval", ["continuous_on"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "image_Icc", ["real"]], ["del", "theorem", "image_interval", ["real"]], ["del", "theorem", "image_interval_eq_Icc", ["real"]], ["del", "theorem", "interval_subset_image_interval", ["real"]]]}]}, {"timestamp": 1635040426, "sha": "55a11604", "message": "feat(linear_algebra): add notation for star-linear maps (#9875)\nThis PR adds the notation `M →ₗ⋆[R] N`, `M ≃ₗ⋆[R] N`, etc, to denote star-linear maps/equivalences, i.e. semilinear maps where the ring hom is `star`. A special case of this are conjugate-linear maps when `R = ℂ`.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": null, "newPath": "test/semilinear.lean", "changes": []}]}, {"timestamp": 1635035859, "sha": "5ec1572c", "message": "feat(nat/choose/central): definition of the central binomial coefficient, and bounds (#9753)\nTwo exponential lower bounds on the central binomial coefficient.", "changes": [{"oldPath": null, "newPath": "src/data/nat/choose/central.lean", "changes": [["add", "def", "central_binom", ["nat"]], ["add", "theorem", "central_binom_eq_two_mul_choose", ["nat"]], ["add", "theorem", "central_binom_ne_zero", ["nat"]], ["add", "theorem", "central_binom_pos", ["nat"]], ["add", "theorem", "central_binom_zero", ["nat"]], ["add", "theorem", "choose_le_central_binom", ["nat"]], ["add", "theorem", "four_pow_le_two_mul_self_mul_central_binom", ["nat"]], ["add", "theorem", "four_pow_lt_mul_central_binom", ["nat"]], ["add", "theorem", "succ_mul_central_binom_succ", ["nat"]], ["add", "theorem", "two_le_central_binom", ["nat"]]]}]}, {"timestamp": 1635035857, "sha": "d788647f", "message": "feat(ring_theory): generalize `adjoin_root.power_basis` (#9536)\nNow we only need that `g` is monic to state that `adjoin_root g` has a power basis. Note that this does not quite imply the result of #9529: this is phrased in terms of `minpoly R (root g)` and the other PR in terms of `g` itself, so I don't have a direct use for the current PR. However, it seems useful enough to have this statement, so I PR'd it anyway.", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "sum_fin", ["polynomial"]], ["add", "theorem", "sum_mod_by_monic_coeff", ["polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "is_integral_root'", ["adjoin_root"]], ["add", "theorem", "mk_eq_mk", ["adjoin_root"]], ["add", "theorem", "mk_left_inverse", ["adjoin_root"]], ["add", "theorem", "mk_surjective", ["adjoin_root"]], ["add", "def", "mod_by_monic_hom", ["adjoin_root"]], ["add", "theorem", "mod_by_monic_hom_mk", ["adjoin_root"]], ["add", "def", "power_basis'", ["adjoin_root"]], ["add", "def", "power_basis_aux'", ["adjoin_root"]]]}]}, {"timestamp": 1635027047, "sha": "928d0e03", "message": "docs(data/dlist/instances): Add module docstring (#9912)", "changes": [{"oldPath": "src/control/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}, {"oldPath": "src/data/dlist/instances.lean", "newPath": "src/data/dlist/instances.lean", "changes": []}]}, {"timestamp": 1635027046, "sha": "15161e96", "message": "docs(data/list/sigma): Add missing def dosctrings, expand module docs (#9909)", "changes": [{"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["mod", "def", "keys", ["list"]], ["mod", "theorem", "keys_cons", ["list"]], ["mod", "theorem", "keys_nil", ["list"]], ["mod", "def", "nodupkeys", ["list"]]]}]}, {"timestamp": 1635027045, "sha": "75b1a94a", "message": "refactor(analysis/special_functions/exp_log): split into 4 files (#9882)", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/special_functions/exp.lean", "changes": [["add", "theorem", "continuous_exp", ["complex"]], ["add", "theorem", "continuous_on_exp", ["complex"]], ["add", "theorem", "exp_bound_sq", ["complex"]], ["add", "theorem", "locally_lipschitz_exp", ["complex"]], ["add", "theorem", "cexp", ["continuous"]], ["add", "theorem", "exp", ["continuous"]], ["add", "theorem", "cexp", ["continuous_at"]], ["add", "theorem", "exp", ["continuous_at"]], ["add", "theorem", "cexp", ["continuous_on"]], ["add", "theorem", "exp", ["continuous_on"]], ["add", "theorem", "cexp", ["continuous_within_at"]], ["add", "theorem", "exp", ["continuous_within_at"]], ["add", "theorem", "cexp", ["filter", "tendsto"]], ["add", "theorem", "exp", ["filter", "tendsto"]], ["add", "theorem", "coe_comp_exp_order_iso", ["real"]], ["add", "theorem", "coe_exp_order_iso_apply", ["real"]], ["add", "theorem", "comap_exp_at_top", ["real"]], ["add", "theorem", "comap_exp_nhds_within_Ioi_zero", ["real"]], ["add", "theorem", "continuous_exp", ["real"]], ["add", "theorem", "continuous_on_exp", ["real"]], ["add", "def", "exp_order_iso", ["real"]], ["add", "theorem", "map_exp_at_bot", ["real"]], ["add", "theorem", "map_exp_at_top", ["real"]], ["add", "theorem", "range_exp", ["real"]], ["add", "theorem", "tendsto_comp_exp_at_bot", ["real"]], ["add", "theorem", "tendsto_comp_exp_at_top", ["real"]], ["add", "theorem", "tendsto_div_pow_mul_exp_add_at_top", ["real"]], ["add", "theorem", "tendsto_exp_at_bot", ["real"]], ["add", "theorem", "tendsto_exp_at_bot_nhds_within", ["real"]], ["add", "theorem", "tendsto_exp_at_top", ["real"]], ["add", "theorem", "tendsto_exp_comp_at_top", ["real"]], ["add", "theorem", "tendsto_exp_div_pow_at_top", ["real"]], ["add", "theorem", "tendsto_exp_neg_at_top_nhds_0", ["real"]], ["add", "theorem", "tendsto_exp_nhds_0_nhds_1", ["real"]], ["add", "theorem", "tendsto_mul_exp_add_div_pow_at_top", ["real"]], ["add", "theorem", "tendsto_pow_mul_exp_neg_at_top_nhds_0", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/exp_deriv.lean", "changes": [["add", "theorem", "deriv_exp", ["complex"]], ["add", "theorem", "differentiable_at_exp", ["complex"]], ["add", "theorem", "differentiable_exp", ["complex"]], ["add", "theorem", "has_deriv_at_exp", ["complex"]], ["add", "theorem", "has_strict_deriv_at_exp", ["complex"]], ["add", "theorem", "has_strict_fderiv_at_exp_real", ["complex"]], ["add", "theorem", "is_open_map_exp", ["complex"]], ["add", "theorem", "iter_deriv_exp", ["complex"]], ["add", "theorem", "times_cont_diff_exp", ["complex"]], ["add", "theorem", "deriv_cexp", []], ["add", "theorem", "deriv_exp", []], ["add", "theorem", "deriv_within_cexp", []], ["add", "theorem", "deriv_within_exp", []], ["add", "theorem", "cexp", ["differentiable"]], ["add", "theorem", "exp", ["differentiable"]], ["add", "theorem", "cexp", ["differentiable_at"]], ["add", "theorem", "exp", ["differentiable_at"]], ["add", "theorem", "cexp", ["differentiable_on"]], ["add", "theorem", "exp", ["differentiable_on"]], ["add", "theorem", "cexp", ["differentiable_within_at"]], ["add", "theorem", "exp", ["differentiable_within_at"]], ["add", "theorem", "fderiv_exp", []], ["add", "theorem", "fderiv_within_exp", []], ["add", "theorem", "cexp", ["has_deriv_at"]], ["add", "theorem", "cexp_real", ["has_deriv_at"]], ["add", "theorem", "exp", ["has_deriv_at"]], ["add", "theorem", "cexp", ["has_deriv_within_at"]], ["add", "theorem", "cexp_real", ["has_deriv_within_at"]], ["add", "theorem", "exp", ["has_deriv_within_at"]], ["add", "theorem", "cexp", ["has_fderiv_at"]], ["add", "theorem", "exp", ["has_fderiv_at"]], ["add", "theorem", "cexp", ["has_fderiv_within_at"]], ["add", "theorem", "exp", ["has_fderiv_within_at"]], ["add", "theorem", "cexp", ["has_strict_deriv_at"]], ["add", "theorem", "cexp_real", ["has_strict_deriv_at"]], ["add", "theorem", "exp", ["has_strict_deriv_at"]], ["add", "theorem", "cexp", ["has_strict_fderiv_at"]], ["add", "theorem", "exp", ["has_strict_fderiv_at"]], ["add", "theorem", "deriv_exp", ["real"]], ["add", "theorem", "differentiable_at_exp", ["real"]], ["add", "theorem", "differentiable_exp", ["real"]], ["add", "theorem", "has_deriv_at_exp", ["real"]], ["add", "theorem", "has_strict_deriv_at_exp", ["real"]], ["add", "theorem", "iter_deriv_exp", ["real"]], ["add", "theorem", "times_cont_diff_exp", ["real"]], ["add", "theorem", "cexp", ["times_cont_diff"]], ["add", "theorem", "exp", ["times_cont_diff"]], ["add", "theorem", "cexp", ["times_cont_diff_at"]], ["add", "theorem", "exp", ["times_cont_diff_at"]], ["add", "theorem", "cexp", ["times_cont_diff_on"]], ["add", "theorem", "exp", ["times_cont_diff_on"]], ["add", "theorem", "cexp", ["times_cont_diff_within_at"]], ["add", "theorem", "exp", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": null, "changes": [["del", "theorem", "continuous_exp", ["complex"]], ["del", "theorem", "continuous_on_exp", ["complex"]], ["del", "theorem", "deriv_exp", ["complex"]], ["del", "theorem", "differentiable_at_exp", ["complex"]], ["del", "theorem", "differentiable_exp", ["complex"]], ["del", "theorem", "exp_bound_sq", ["complex"]], ["del", "theorem", "has_deriv_at_exp", ["complex"]], ["del", "theorem", "has_strict_deriv_at_exp", ["complex"]], ["del", "theorem", "has_strict_fderiv_at_exp_real", ["complex"]], ["del", "theorem", "is_open_map_exp", ["complex"]], ["del", "theorem", "iter_deriv_exp", ["complex"]], ["del", "theorem", "locally_lipschitz_exp", ["complex"]], ["del", "theorem", "times_cont_diff_exp", ["complex"]], ["del", "theorem", "cexp", ["continuous"]], ["del", "theorem", "log", ["continuous"]], ["del", "theorem", "cexp", ["continuous_at"]], ["del", "theorem", "log", ["continuous_at"]], ["del", "theorem", "cexp", ["continuous_on"]], ["del", "theorem", "log", ["continuous_on"]], ["del", "theorem", "cexp", ["continuous_within_at"]], ["del", "theorem", "log", ["continuous_within_at"]], ["del", "theorem", "log", ["deriv"]], ["del", "theorem", "deriv_cexp", []], ["del", "theorem", "deriv_exp", []], ["del", "theorem", "log", ["deriv_within"]], ["del", "theorem", "deriv_within_cexp", []], ["del", "theorem", "deriv_within_exp", []], ["del", "theorem", "cexp", ["differentiable"]], ["del", "theorem", "exp", ["differentiable"]], ["del", "theorem", "log", ["differentiable"]], ["del", "theorem", "cexp", ["differentiable_at"]], ["del", "theorem", "exp", ["differentiable_at"]], ["del", "theorem", "log", ["differentiable_at"]], ["del", "theorem", "cexp", ["differentiable_on"]], ["del", "theorem", "exp", ["differentiable_on"]], ["del", "theorem", "log", ["differentiable_on"]], ["del", "theorem", "cexp", ["differentiable_within_at"]], ["del", "theorem", "exp", ["differentiable_within_at"]], ["del", "theorem", "log", ["differentiable_within_at"]], ["del", "theorem", "log", ["fderiv"]], ["del", "theorem", "fderiv_exp", []], ["del", "theorem", "log", ["fderiv_within"]], ["del", "theorem", "fderiv_within_exp", []], ["del", "theorem", "cexp", ["filter", "tendsto"]], ["del", "theorem", "log", ["filter", "tendsto"]], ["del", "theorem", "cexp", ["has_deriv_at"]], ["del", "theorem", "cexp_real", ["has_deriv_at"]], ["del", "theorem", "exp", ["has_deriv_at"]], ["del", "theorem", "log", ["has_deriv_at"]], ["del", "theorem", "cexp", ["has_deriv_within_at"]], ["del", "theorem", "cexp_real", ["has_deriv_within_at"]], ["del", "theorem", "exp", ["has_deriv_within_at"]], ["del", "theorem", "log", ["has_deriv_within_at"]], ["del", "theorem", "cexp", ["has_fderiv_at"]], ["del", "theorem", "exp", ["has_fderiv_at"]], ["del", "theorem", "log", ["has_fderiv_at"]], ["del", "theorem", "cexp", ["has_fderiv_within_at"]], ["del", "theorem", "exp", ["has_fderiv_within_at"]], ["del", "theorem", "log", ["has_fderiv_within_at"]], ["del", "theorem", "cexp", ["has_strict_deriv_at"]], ["del", "theorem", "cexp_real", ["has_strict_deriv_at"]], ["del", "theorem", "exp", ["has_strict_deriv_at"]], ["del", "theorem", "log", ["has_strict_deriv_at"]], ["del", "theorem", "cexp", ["has_strict_fderiv_at"]], ["del", "theorem", "exp", ["has_strict_fderiv_at"]], ["del", "theorem", "log", ["has_strict_fderiv_at"]], ["del", "theorem", "abs_log_sub_add_sum_range_le", ["real"]], ["del", "theorem", "coe_comp_exp_order_iso", ["real"]], ["del", "theorem", "coe_exp_order_iso_apply", ["real"]], ["del", "theorem", "comap_exp_at_top", ["real"]], ["del", "theorem", "comap_exp_nhds_within_Ioi_zero", ["real"]], ["del", "theorem", "continuous_at_log", ["real"]], ["del", "theorem", "continuous_at_log_iff", ["real"]], ["del", "theorem", "continuous_exp", ["real"]], ["del", "theorem", "continuous_log'", ["real"]], ["del", "theorem", "continuous_log", ["real"]], ["del", "theorem", "continuous_on_exp", ["real"]], ["del", "theorem", "continuous_on_log", ["real"]], ["del", "theorem", "deriv_exp", ["real"]], ["del", "theorem", "deriv_log'", ["real"]], ["del", "theorem", "deriv_log", ["real"]], ["del", "theorem", "differentiable_at_exp", ["real"]], ["del", "theorem", "differentiable_at_log", ["real"]], ["del", "theorem", "differentiable_at_log_iff", ["real"]], ["del", "theorem", "differentiable_exp", ["real"]], ["del", "theorem", "differentiable_on_log", ["real"]], ["del", "theorem", "eq_one_of_pos_of_log_eq_zero", ["real"]], ["del", "theorem", "exp_log", ["real"]], ["del", "theorem", "exp_log_eq_abs", ["real"]], ["del", "theorem", "exp_log_of_neg", ["real"]], ["del", "def", "exp_order_iso", ["real"]], ["del", "theorem", "has_deriv_at_exp", ["real"]], ["del", "theorem", "has_deriv_at_log", ["real"]], ["del", "theorem", "has_strict_deriv_at_exp", ["real"]], ["del", "theorem", "has_strict_deriv_at_log", ["real"]], ["del", "theorem", "has_strict_deriv_at_log_of_pos", ["real"]], ["del", "theorem", "has_sum_pow_div_log_of_abs_lt_1", ["real"]], ["del", "theorem", "iter_deriv_exp", ["real"]], ["del", "theorem", "log_abs", ["real"]], ["del", "theorem", "log_div", ["real"]], ["del", "theorem", "log_eq_zero", ["real"]], ["del", "theorem", "log_exp", ["real"]], ["del", "theorem", "log_inj_on_pos", ["real"]], ["del", "theorem", "log_inv", ["real"]], ["del", "theorem", "log_le_log", ["real"]], ["del", "theorem", "log_lt_log", ["real"]], ["del", "theorem", "log_lt_log_iff", ["real"]], ["del", "theorem", "log_mul", ["real"]], ["del", "theorem", "log_ne_zero_of_pos_of_ne_one", ["real"]], ["del", "theorem", "log_neg", ["real"]], ["del", "theorem", "log_neg_eq_log", ["real"]], ["del", "theorem", "log_neg_iff", ["real"]], ["del", "theorem", "log_nonneg", ["real"]], ["del", "theorem", "log_nonneg_iff", ["real"]], ["del", "theorem", "log_nonpos", ["real"]], ["del", "theorem", "log_nonpos_iff'", ["real"]], ["del", "theorem", "log_nonpos_iff", ["real"]], ["del", "theorem", "log_of_ne_zero", ["real"]], ["del", "theorem", "log_of_pos", ["real"]], ["del", "theorem", "log_one", ["real"]], ["del", "theorem", "log_pos", ["real"]], ["del", "theorem", "log_pos_iff", ["real"]], ["del", "theorem", "log_surjective", ["real"]], ["del", "theorem", "log_zero", ["real"]], ["del", "theorem", "map_exp_at_bot", ["real"]], ["del", "theorem", "map_exp_at_top", ["real"]], ["del", "theorem", "range_exp", ["real"]], ["del", "theorem", "range_log", ["real"]], ["del", "theorem", "strict_anti_on_log", ["real"]], ["del", "theorem", "strict_mono_on_log", ["real"]], ["del", "theorem", "surj_on_log'", ["real"]], ["del", "theorem", "surj_on_log", ["real"]], ["del", "theorem", "tendsto_comp_exp_at_bot", ["real"]], ["del", "theorem", "tendsto_comp_exp_at_top", ["real"]], ["del", "theorem", "tendsto_div_pow_mul_exp_add_at_top", ["real"]], ["del", "theorem", "tendsto_exp_at_bot", ["real"]], ["del", "theorem", "tendsto_exp_at_bot_nhds_within", ["real"]], ["del", "theorem", "tendsto_exp_at_top", ["real"]], ["del", "theorem", "tendsto_exp_comp_at_top", ["real"]], ["del", "theorem", "tendsto_exp_div_pow_at_top", ["real"]], ["del", "theorem", "tendsto_exp_neg_at_top_nhds_0", ["real"]], ["del", "theorem", "tendsto_exp_nhds_0_nhds_1", ["real"]], ["del", "theorem", "tendsto_log_at_top", ["real"]], ["del", "theorem", "tendsto_log_nhds_within_zero", ["real"]], ["del", "theorem", "tendsto_mul_exp_add_div_pow_at_top", ["real"]], ["del", "theorem", "tendsto_mul_log_one_plus_div_at_top", ["real"]], ["del", "theorem", "tendsto_pow_mul_exp_neg_at_top_nhds_0", ["real"]], ["del", "theorem", "times_cont_diff_at_log", ["real"]], ["del", "theorem", "times_cont_diff_exp", ["real"]], ["del", "theorem", "times_cont_diff_on_log", ["real"]], ["del", "theorem", "cexp", ["times_cont_diff"]], ["del", "theorem", "exp", ["times_cont_diff"]], ["del", "theorem", "log", ["times_cont_diff"]], ["del", "theorem", "cexp", ["times_cont_diff_at"]], ["del", "theorem", "exp", ["times_cont_diff_at"]], ["del", "theorem", "log", ["times_cont_diff_at"]], ["del", "theorem", "cexp", ["times_cont_diff_on"]], ["del", "theorem", "exp", ["times_cont_diff_on"]], ["del", "theorem", "log", ["times_cont_diff_on"]], ["del", "theorem", "cexp", ["times_cont_diff_within_at"]], ["del", "theorem", "exp", ["times_cont_diff_within_at"]], ["del", "theorem", "log", ["times_cont_diff_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/log.lean", "changes": [["add", "theorem", "log", ["continuous"]], ["add", "theorem", "log", ["continuous_at"]], ["add", "theorem", "log", ["continuous_on"]], ["add", "theorem", "log", ["continuous_within_at"]], ["add", "theorem", "log", ["filter", "tendsto"]], ["add", "theorem", "continuous_at_log", ["real"]], ["add", "theorem", "continuous_at_log_iff", ["real"]], ["add", "theorem", "continuous_log'", ["real"]], ["add", "theorem", "continuous_log", ["real"]], ["add", "theorem", "continuous_on_log", ["real"]], ["add", "theorem", "eq_one_of_pos_of_log_eq_zero", ["real"]], ["add", "theorem", "exp_log", ["real"]], ["add", "theorem", "exp_log_eq_abs", ["real"]], ["add", "theorem", "exp_log_of_neg", ["real"]], ["add", "theorem", "log_abs", ["real"]], ["add", "theorem", "log_div", ["real"]], ["add", "theorem", "log_eq_zero", ["real"]], ["add", "theorem", "log_exp", ["real"]], ["add", "theorem", "log_inj_on_pos", ["real"]], ["add", "theorem", "log_inv", ["real"]], ["add", "theorem", "log_le_log", ["real"]], ["add", "theorem", "log_lt_log", ["real"]], ["add", "theorem", "log_lt_log_iff", ["real"]], ["add", "theorem", "log_mul", ["real"]], ["add", "theorem", "log_ne_zero_of_pos_of_ne_one", ["real"]], ["add", "theorem", "log_neg", ["real"]], ["add", "theorem", "log_neg_eq_log", ["real"]], ["add", "theorem", "log_neg_iff", ["real"]], ["add", "theorem", "log_nonneg", ["real"]], ["add", "theorem", "log_nonneg_iff", ["real"]], ["add", "theorem", "log_nonpos", ["real"]], ["add", "theorem", "log_nonpos_iff'", ["real"]], ["add", "theorem", "log_nonpos_iff", ["real"]], ["add", "theorem", "log_of_ne_zero", ["real"]], ["add", "theorem", "log_of_pos", ["real"]], ["add", "theorem", "log_one", ["real"]], ["add", "theorem", "log_pos", ["real"]], ["add", "theorem", "log_pos_iff", ["real"]], ["add", "theorem", "log_surjective", ["real"]], ["add", "theorem", "log_zero", ["real"]], ["add", "theorem", "range_log", ["real"]], ["add", "theorem", "strict_anti_on_log", ["real"]], ["add", "theorem", "strict_mono_on_log", ["real"]], ["add", "theorem", "surj_on_log'", ["real"]], ["add", "theorem", "surj_on_log", ["real"]], ["add", "theorem", "tendsto_log_at_top", ["real"]], ["add", "theorem", "tendsto_log_nhds_within_zero", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/log_deriv.lean", "changes": [["add", "theorem", "log", ["deriv"]], ["add", "theorem", "log", ["deriv_within"]], ["add", "theorem", "log", ["differentiable"]], ["add", "theorem", "log", ["differentiable_at"]], ["add", "theorem", "log", ["differentiable_on"]], ["add", "theorem", "log", ["differentiable_within_at"]], ["add", "theorem", "log", ["fderiv"]], ["add", "theorem", "log", ["fderiv_within"]], ["add", "theorem", "log", ["has_deriv_at"]], ["add", "theorem", "log", ["has_deriv_within_at"]], ["add", "theorem", "log", ["has_fderiv_at"]], ["add", "theorem", "log", ["has_fderiv_within_at"]], ["add", "theorem", "log", ["has_strict_deriv_at"]], ["add", "theorem", "log", ["has_strict_fderiv_at"]], ["add", "theorem", "abs_log_sub_add_sum_range_le", ["real"]], ["add", "theorem", "deriv_log'", ["real"]], ["add", "theorem", "deriv_log", ["real"]], ["add", "theorem", "differentiable_at_log", ["real"]], ["add", "theorem", "differentiable_at_log_iff", ["real"]], ["add", "theorem", "differentiable_on_log", ["real"]], ["add", "theorem", "has_deriv_at_log", ["real"]], ["add", "theorem", "has_strict_deriv_at_log", ["real"]], ["add", "theorem", "has_strict_deriv_at_log_of_pos", ["real"]], ["add", "theorem", "has_sum_pow_div_log_of_abs_lt_1", ["real"]], ["add", "theorem", "tendsto_mul_log_one_plus_div_at_top", ["real"]], ["add", "theorem", "times_cont_diff_at_log", ["real"]], ["add", "theorem", "times_cont_diff_on_log", ["real"]], ["add", "theorem", "log", ["times_cont_diff"]], ["add", "theorem", "log", ["times_cont_diff_at"]], ["add", "theorem", "log", ["times_cont_diff_on"]], ["add", "theorem", "log", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential_bounds.lean", "newPath": "src/data/complex/exponential_bounds.lean", "changes": [["mod", "theorem", "exp_one_near_10", ["real"]], ["mod", "theorem", "exp_one_near_20", ["real"]], ["mod", "theorem", "log_two_near_10", ["real"]]]}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}, {"oldPath": "test/library_search/exp_le_exp.lean", "newPath": "test/library_search/exp_le_exp.lean", "changes": []}]}, {"timestamp": 1635027044, "sha": "59db9032", "message": "feat(topology/metric_space/lipschitz): continuity on product of continuity in 1 var and Lipschitz continuity in another (#9758)\nAlso apply the new lemma to `continuous_bounded_map`s and add a few lemmas there.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "continuous_coe", ["bounded_continuous_function"]], ["add", "theorem", "lipschitz_evalx", ["bounded_continuous_function"]], ["add", "theorem", "uniform_continuous_coe", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "continuous_on_prod_of_continuous_on_lipschitz_on", []], ["add", "theorem", "continuous_prod_of_continuous_lipschitz", []], ["add", "theorem", "edist_lt_of_edist_lt_div", ["lipschitz_on_with"]], ["add", "theorem", "edist_lt_of_edist_lt_div", ["lipschitz_with"]]]}]}, {"timestamp": 1635019475, "sha": "939e8b9a", "message": "docs(control/traversable/instances): Add module docstring (#9913)", "changes": [{"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}]}, {"timestamp": 1635019474, "sha": "14b998b2", "message": "docs(control/bifunctor): Add module and defs docstrings (#9911)", "changes": [{"oldPath": "src/control/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": [["mod", "def", "fst", ["bifunctor"]], ["mod", "def", "snd", ["bifunctor"]]]}]}, {"timestamp": 1635019473, "sha": "78252a30", "message": "chore(data/real/sqrt): A couple of lemmas about sqrt (#9892)\nAdd a couple of lemmas about `sqrt x / x`.", "changes": [{"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["add", "theorem", "sqrt_div_self'", ["real"]], ["add", "theorem", "sqrt_div_self", ["real"]]]}]}, {"timestamp": 1635019472, "sha": "3f58dc78", "message": "feat(linear_algebra/free_module/pid): golf basis.card_le_card_of_linear_independent_aux (#9813)\nWe go from a 70 lines proof to a one line proof.", "changes": [{"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}]}, {"timestamp": 1635019471, "sha": "fc3c0560", "message": "chore(data/real): make more instances on real, nnreal, and ennreal computable (#9806)\nThis makes it possible to talk about the add_monoid structure of nnreal and ennreal without worrying about computability.\nTo make it clear exactly which operations are computable, we remove `noncomputable theory`.", "changes": [{"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_smul", ["ennreal"]], ["del", "def", "of_nnreal_hom", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "def", "nnabs", ["real"]], ["del", "def", "to_nnreal", ["real"]]]}]}, {"timestamp": 1635009073, "sha": "5c5d818d", "message": "chore(data/fintype/basic): make units.fintype computable (#9846)\nThis also:\n* renames `equiv.units_equiv_ne_zero` to `units_equiv_ne_zero`, and resolves the TODO comment about generalization\n* renames and generalizes `finite_field.card_units` to `fintype.card_units`, and proves it right next to the fintype instance\n* generalizes some typeclass assumptions in `finite_field.basic` as the linter already required me to tweak them", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["del", "theorem", "coe_units_equiv_ne_zero", ["equiv"]], ["del", "def", "units_equiv_ne_zero", ["equiv"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "card_subtype_eq'", ["fintype"]], ["mod", "theorem", "card_subtype_eq", ["fintype"]], ["add", "theorem", "card_units", ["fintype"]], ["add", "def", "units_equiv_ne_zero", []], ["add", "def", "units_equiv_prod_subtype", []]]}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["del", "theorem", "card_units", ["finite_field"]], ["mod", "theorem", "prod_univ_units_id_eq_neg_one", ["finite_field"]], ["mod", "theorem", "sum_pow_units", ["finite_field"]]]}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}]}, {"timestamp": 1635009072, "sha": "36f8c1db", "message": "refactor(order/filter/bases): turn `is_countably_generated` into a class (#9838)\n## API changes\n### Filters\n* turn `filter.is_countably_generated` into a class, turn some lemmas into instances;\n* remove definition/lemmas (all were in the `filter.is_countably_generated` namespace): `generating_set`, `countable_generating_set`, `eq_generate`, `countable_filter_basis`, `filter_basis_filter`, `has_countable_basis`, `exists_countable_infi_principal`, `exists_seq`;\n* rename `filter.is_countably_generated.exists_antitone_subbasis` to `filter.has_basis.exists_antitone_subbasis`;\n* rename `filter.is_countably_generated.exists_antitone_basis` to `filter.exists_antitone_basis`;\n* rename `filter.is_countably_generated.exists_antitone_seq'` to `filter.exists_antitone_seq`;\n* rename `filter.is_countably_generated.exists_seq` to `filter.exists_antitone_eq_infi_principal`;\n* rename `filter.is_countably_generated.tendsto_iff_seq_tendsto` to `filter.tendsto_iff_seq_tendsto`;\n* rename `filter.is_countably_generated.tendsto_of_seq_tendsto` to `filter.tendsto_of_seq_tendsto`;\n* slightly generalize `is_countably_generated_at_top` and `is_countably_generated_at_bot`;\n* add `filter.generate_eq_binfi`;\n### Topology\n* merge `is_closed.is_Gδ` with `is_closed.is_Gδ'`;\n* merge `is_Gδ_set_of_continuous_at_of_countably_generated_uniformity` with `is_Gδ_set_of_continuous_at`;\n* merge `is_lub.exists_seq_strict_mono_tendsto_of_not_mem'` with `is_lub.exists_seq_strict_mono_tendsto_of_not_mem`;\n* merge `is_lub.exists_seq_monotone_tendsto'` with `is_lub.exists_seq_monotone_tendsto`;\n* merge `is_glb.exists_seq_strict_anti_tendsto_of_not_mem'` with `is_glb.exists_seq_strict_anti_tendsto_of_not_mem`;\n* merge `is_glb.exists_seq_antitone_tendsto'` with `is_glb.exists_seq_antitone_tendsto`;\n* drop `emetric.first_countable_topology`, turn `uniform_space.first_countable_topology` into an instance;\n* drop `emetric.second_countable_of_separable`, use `uniform_space.second_countable_of_separable` instead;\n* drop `metric.compact_iff_seq_compact`, use `uniform_space.compact_iff_seq_compact` instead;\n* drop `metric.compact_space_iff_seq_compact_space`, use `uniform_space.compact_space_iff_seq_compact_space` instead;\n## Measure theory and integrals\nVarious lemmas assume `[is_countably_generated l]` instead of `(h : is_countably_generated l)`.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": [["mod", "theorem", "integrable_of_integral_norm_tendsto", ["measure_theory", "ae_cover"]], ["mod", "theorem", "integrable_of_integral_tendsto_of_nonneg_ae", ["measure_theory", "ae_cover"]], ["mod", "theorem", "integrable_of_lintegral_nnnorm_tendsto'", ["measure_theory", "ae_cover"]], ["mod", "theorem", "integrable_of_lintegral_nnnorm_tendsto", ["measure_theory", "ae_cover"]], ["mod", "theorem", "integral_eq_of_tendsto", ["measure_theory", "ae_cover"]], ["mod", "theorem", "integral_eq_of_tendsto_of_nonneg_ae", ["measure_theory", "ae_cover"]], ["mod", "theorem", "integral_tendsto_of_countably_generated", ["measure_theory", "ae_cover"]], ["mod", "theorem", "lintegral_eq_of_tendsto", ["measure_theory", "ae_cover"]], ["mod", "theorem", "lintegral_tendsto_of_countably_generated", ["measure_theory", "ae_cover"]], ["mod", "theorem", "supr_lintegral_eq_of_countably_generated", ["measure_theory", "ae_cover"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": [["del", "theorem", "at_bot_countably_generated", []], ["del", "theorem", "at_top_countably_generated_of_archimedean", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["del", "theorem", "subseq_tendsto", ["filter", "is_countably_generated"]], ["del", "theorem", "tendsto_iff_seq_tendsto", ["filter", "is_countably_generated"]], ["del", "theorem", "tendsto_of_seq_tendsto", ["filter", "is_countably_generated"]], ["del", "theorem", "is_countably_generated_at_bot", ["filter"]], ["del", "theorem", "is_countably_generated_at_top", ["filter"]], ["add", "theorem", "subseq_tendsto_of_ne_bot", ["filter"]], ["add", "theorem", "tendsto_iff_seq_tendsto", ["filter"]], ["add", "theorem", "tendsto_of_seq_tendsto", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "exists_antitone_basis", ["filter"]], ["add", "theorem", "exists_antitone_eq_infi_principal", ["filter"]], ["add", "theorem", "exists_antitone_seq", ["filter"]], ["add", "theorem", "exists_antitone_subbasis", ["filter", "has_basis"]], ["del", "def", "countable_filter_basis", ["filter", "is_countably_generated"]], ["del", "theorem", "countable_generating_set", ["filter", "is_countably_generated"]], ["del", "theorem", "eq_generate", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_antitone_basis", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_antitone_seq'", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_antitone_subbasis", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_countable_infi_principal", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_seq", ["filter", "is_countably_generated"]], ["del", "theorem", "filter_basis_filter", ["filter", "is_countably_generated"]], ["del", "def", "generating_set", ["filter", "is_countably_generated"]], ["del", "theorem", "has_countable_basis", ["filter", "is_countably_generated"]], ["del", "theorem", "inf", ["filter", "is_countably_generated"]], ["del", "theorem", "inf_principal", ["filter", "is_countably_generated"]], ["del", "def", "is_countably_generated", ["filter"]], ["add", "theorem", "is_countably_generated_bot", ["filter"]], ["mod", "theorem", "is_countably_generated_principal", ["filter"]], ["mod", "theorem", "is_countably_generated_seq", ["filter"]], ["add", "theorem", "is_countably_generated_top", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "generate_eq_binfi", ["filter"]]]}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": [["mod", "theorem", "is_Gδ_set_of_continuous_at", []], ["del", "theorem", "is_Gδ_set_of_continuous_at_of_countably_generated_uniformity", []], ["del", "theorem", "is_Gδ'", ["is_closed"]], ["mod", "theorem", "is_Gδ", ["is_closed"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "exists_seq_antitone_tendsto'", ["is_glb"]], ["mod", "theorem", "exists_seq_antitone_tendsto", ["is_glb"]], ["del", "theorem", "exists_seq_strict_anti_tendsto_of_not_mem'", ["is_glb"]], ["mod", "theorem", "exists_seq_strict_anti_tendsto_of_not_mem", ["is_glb"]], ["del", "theorem", "exists_seq_monotone_tendsto'", ["is_lub"]], ["mod", "theorem", "exists_seq_monotone_tendsto", ["is_lub"]], ["del", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem'", ["is_lub"]], ["mod", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem", ["is_lub"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["del", "theorem", "is_countably_generated_nhds", ["topological_space"]], ["del", "theorem", "is_countably_generated_nhds_within", ["topological_space"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["del", "theorem", "second_countable_of_separable", ["emetric"]], ["del", "theorem", "uniformity_has_countable_basis", ["emetric"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["mod", "theorem", "lebesgue_number_lemma_seq", []], ["del", "theorem", "compact_iff_seq_compact", ["metric"]], ["del", "theorem", "compact_space_iff_seq_compact_space", ["metric"]], ["mod", "theorem", "compact_space_iff_seq_compact_space", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "has_seq_basis", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1635009071, "sha": "d0d15202", "message": "chore(ring_theory/derivation): add `leibniz_pow` and `leibniz_inv` (#9837)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "theorem", "leibniz_inv", ["derivation"]], ["add", "theorem", "leibniz_inv_of", ["derivation"]], ["add", "theorem", "leibniz_of_mul_eq_one", ["derivation"]], ["add", "theorem", "leibniz_pow", ["derivation"]]]}]}, {"timestamp": 1635009069, "sha": "1ebea893", "message": "feat(field_theory/finite/galois_field): finite fields with the same cardinality are isomorphic (#9834)\nAdded the isomorphism of finite fields of the same cardinality.", "changes": [{"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": [["add", "def", "alg_equiv_of_card_eq", ["finite_field"]], ["add", "def", "ring_equiv_of_card_eq", ["finite_field"]]]}]}, {"timestamp": 1635009068, "sha": "0411b1e3", "message": "feat(ring_theory/ideal): `simp` lemmas for `ideal.quotient.mk` + `algebra_map` (#9829)\nSome `simp` lemmas I needed for combining `algebra_map` with `ideal.quotient.mk`. This also allowed me to golf two existing proofs.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "algebra_map_eq", ["ideal", "quotient"]], ["add", "theorem", "mk_algebra_map", ["ideal", "quotient"]], ["add", "theorem", "mk_comp_algebra_map", ["ideal", "quotient"]], ["add", "theorem", "quotient_map_algebra_map", ["ideal"]]]}]}, {"timestamp": 1635009067, "sha": "44ab28e3", "message": "refactor(linear_algebra/free_module/finite): move to a new folder (#9821)\nWe move `linear_algebra/free_module/finite` to `linear_algebra/free_module/finite/basic`.\nWe also move two lemmas from `linear_algebra/free_module/finite/basic` to `linear_algebra/free_module/basic`, since they don't need any finiteness assumption on the modules.", "changes": [{"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/basic.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/finite.lean", "newPath": "src/linear_algebra/free_module/finite/basic.lean", "changes": []}]}, {"timestamp": 1634999444, "sha": "a58ae545", "message": "chore(algebra/big_operators/finprod): remove outdated todo (#9900)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}]}, {"timestamp": 1634999443, "sha": "bd81d555", "message": "feat(data/finsupp): add lemmas about `single` (#9894)\nThese are subset versions of the four lemmas related to `support_eq_singleton`.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "card_support_le_one'", ["finsupp"]], ["add", "theorem", "card_support_le_one", ["finsupp"]], ["add", "theorem", "support_subset_singleton'", ["finsupp"]], ["add", "theorem", "support_subset_singleton", ["finsupp"]]]}]}, {"timestamp": 1634999442, "sha": "95535a3e", "message": "refactor(ring_theory/unique_factorization_domain): golf some factor_set lemmas (#9889)", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "prod_eq_zero_iff", ["associates", "factor_set"]], ["add", "theorem", "unique", ["associates", "factor_set"]], ["mod", "theorem", "factors'_cong", ["associates"]], ["mod", "theorem", "prod_factors", ["associates"]]]}]}, {"timestamp": 1634999441, "sha": "e1c0dbc8", "message": "feat(set_theory/cardinal): add `add_le_omega` (#9887)\n* simplify `c₁ + c₂ ≤ ω` to `c₁ ≤ ω ∧ c₂ ≤ ω`;\n* simplify `ω + ω` to `ω`;\n* simplify `#s ≤ ω` to `s.countable`;\n* simplify `(s ∪ t).countable` and `(insert a s).countable`.\nMotivated by lemmas from flypitch.", "changes": [{"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "countable_insert", ["set"]], ["add", "theorem", "countable_union", ["set"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "add_le_omega", ["cardinal"]], ["del", "theorem", "countable_iff", ["cardinal"]], ["add", "theorem", "mk_set_le_omega", ["cardinal"]], ["add", "theorem", "mk_union_le_omega", ["cardinal"]], ["add", "theorem", "omega_add_omega", ["cardinal"]], ["add", "theorem", "omega_mul_omega", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "succ_omega", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "ord_pos", ["cardinal", "is_regular"]], ["add", "theorem", "pos", ["cardinal", "is_regular"]]]}]}, {"timestamp": 1634999440, "sha": "82896b53", "message": "feat(topology): add a few lemmas (#9885)\nAdd `is_topological_basis.is_open_map_iff`,\n`is_topological_basis.exists_nonempty_subset`, and\n`interior_{s,b,}Inter_subset`.\nMotivated by lemmas from `flypitch`.", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "exists_nonempty_subset", ["topological_space", "is_topological_basis"]], ["add", "theorem", "is_open_map_iff", ["topological_space", "is_topological_basis"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "interior_Inter_subset", []], ["add", "theorem", "interior_bInter_subset", []], ["add", "theorem", "interior_sInter_subset", []]]}]}, {"timestamp": 1634999439, "sha": "1e0661ce", "message": "feat(ring_theory/noetherian): generalize to semiring (#9881)\nWe generalize some of the results in `ring_theory/noetherian` to `semiring`.\n- [x] depends on: #9860", "changes": [{"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["mod", "theorem", "of_injective", ["module", "finite"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "fg_of_injective", []], ["add", "theorem", "fg_of_ker_bot", []], ["mod", "theorem", "is_noetherian_of_injective", []], ["add", "theorem", "is_noetherian_of_ker_bot", []], ["add", "theorem", "fg_of_fg_map_injective", ["submodule"]], ["mod", "theorem", "fg_top", ["submodule"]]]}]}, {"timestamp": 1634999438, "sha": "bb71667d", "message": "feat(topology/instances/irrational): new file (#9872)\n* move `is_Gδ_irrational` etc to a new file `topology.instances.irrational`;\n* prove that a small ball around an irrational number is disjoint with the set of rational numbers with bounded denominators;\n* prove `order_topology`, `no_top_order`, `no_bot_order`, and `densely_ordered` instances for `{x // irrational x}`.", "changes": [{"oldPath": "src/number_theory/liouville/residual.lean", "newPath": "src/number_theory/liouville/residual.lean", "changes": [["del", "theorem", "dense_irrational", []], ["del", "theorem", "eventually_residual_irrational", []], ["del", "theorem", "is_Gδ_irrational", []]]}, {"oldPath": null, "newPath": "src/topology/instances/irrational.lean", "changes": [["add", "theorem", "dense_irrational", []], ["add", "theorem", "eventually_residual_irrational", []], ["add", "theorem", "eventually_forall_le_dist_cast_div", ["irrational"]], ["add", "theorem", "eventually_forall_le_dist_cast_div_of_denom_le", ["irrational"]], ["add", "theorem", "eventually_forall_le_dist_cast_rat_of_denom_le", ["irrational"]], ["add", "theorem", "is_Gδ_irrational", []]]}]}, {"timestamp": 1634999437, "sha": "b877f6b8", "message": "chore(analysis/normed/group): generalize `cauchy_seq.add` (#9868)\nAlso golf a few proofs.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["del", "theorem", "add", ["cauchy_seq"]], ["mod", "theorem", "norm_eq_zero", []], ["mod", "theorem", "norm_le_zero_iff", []], ["mod", "theorem", "norm_pos_iff", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "add", ["cauchy_seq"]]]}]}, {"timestamp": 1634999436, "sha": "29c72664", "message": "refactor(linear_algebra/matrix/nonsingular_inverse): use ring.inverse in matrix.has_inv (#9863)\nThis makes some of the proofs a little shorter.\nIndependently, this removes an assumption from `matrix.transpose_nonsing_inv`.\nThis adds the missing `units.is_unit_units_mul` to complement the existing `units.is_unit_mul_units`, even though it ultimately was not used in this PR.\nThis removes the def `matrix.nonsing_inv` in favor of just using `has_inv.inv` directly. Having two ways to spell the same thing isn't helpful here.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "is_unit_units_mul", ["units"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "mul_inverse_rev", ["ring"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/fpow.lean", "newPath": "src/linear_algebra/matrix/fpow.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["mod", "theorem", "inv_def", ["matrix"]], ["mod", "theorem", "transpose_nonsing_inv", ["matrix"]]]}]}, {"timestamp": 1634999435, "sha": "2a1f4542", "message": "refactor(algebra/algebra): choose `coe` as the normal form for the map `alg_equiv → ring_equiv` (#9848)\nWe never chose a `simp`-normal form for this map, resulting in some duplicate work and annoying `show _ = _, from rfl` when rewriting. I picked this choice because it matches the convention for the map `alg_hom → ring_hom`.\nVery surprisingly, there were absolutely no CI failures due to this choice.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "coe_ring_equiv'", ["alg_equiv"]], ["add", "theorem", "to_ring_equiv_eq_coe", ["alg_equiv"]]]}]}, {"timestamp": 1634999434, "sha": "5f11361a", "message": "refactor(algebra/continued_fractions): remove use of open ... as (#9847)\nLean 4 doesn't support the use of `open ... as ...`, so let's get rid of the few uses from mathlib rather than automating it in mathport.", "changes": [{"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": [["mod", "theorem", "coe_to_generalized_continued_fraction", ["continued_fraction"]], ["mod", "theorem", "coe_to_simple_continued_fraction", ["continued_fraction"]], ["mod", "def", "of_integer", ["continued_fraction"]], ["mod", "theorem", "coe_to_generalized_continued_fraction", ["generalized_continued_fraction"]], ["mod", "def", "continuants", ["generalized_continued_fraction"]], ["mod", "def", "continuants_aux", ["generalized_continued_fraction"]], ["mod", "def", "convergents'", ["generalized_continued_fraction"]], ["mod", "def", "convergents'_aux", ["generalized_continued_fraction"]], ["mod", "def", "convergents", ["generalized_continued_fraction"]], ["mod", "def", "denominators", ["generalized_continued_fraction"]], ["mod", "def", "next_continuants", ["generalized_continued_fraction"]], ["mod", "def", "numerators", ["generalized_continued_fraction"]], ["mod", "def", "of_integer", ["generalized_continued_fraction"]], ["mod", "def", "map", ["generalized_continued_fraction", "pair"]], ["mod", "def", "partial_denominators", ["generalized_continued_fraction"]], ["mod", "def", "partial_numerators", ["generalized_continued_fraction"]], ["mod", "def", "terminated_at", ["generalized_continued_fraction"]], ["mod", "def", "terminates", ["generalized_continued_fraction"]], ["mod", "theorem", "coe_to_generalized_continued_fraction", ["simple_continued_fraction"]], ["mod", "def", "of_integer", ["simple_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": [["mod", "theorem", "of_convergents_eq_convergents'", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": [["mod", "theorem", "abs_sub_convergents_le", ["generalized_continued_fraction"]], ["mod", "theorem", "determinant", ["generalized_continued_fraction"]], ["mod", "theorem", "determinant_aux", ["generalized_continued_fraction"]], ["mod", "theorem", "fib_le_of_continuants_aux_b", ["generalized_continued_fraction"]], ["mod", "theorem", "of_denom_mono", ["generalized_continued_fraction"]], ["mod", "theorem", "of_part_num_eq_one", ["generalized_continued_fraction"]], ["mod", "theorem", "of_part_num_eq_one_and_exists_int_part_denom_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "succ_nth_fib_le_of_nth_denom", ["generalized_continued_fraction"]], ["mod", "theorem", "zero_le_of_continuants_aux_b", ["generalized_continued_fraction"]], ["mod", "theorem", "zero_le_of_denom", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": [["mod", "theorem", "of_correctness_at_top_of_terminates", ["generalized_continued_fraction"]], ["mod", "theorem", "of_correctness_of_terminated_at", ["generalized_continued_fraction"]], ["mod", "theorem", "of_correctness_of_terminates", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": [["mod", "theorem", "coe_of_h_rat_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "coe_of_rat_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "coe_of_s_rat_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "exists_rat_eq_nth_convergent", ["generalized_continued_fraction"]], ["mod", "theorem", "exists_rat_eq_nth_denominator", ["generalized_continued_fraction"]], ["mod", "theorem", "exists_rat_eq_nth_numerator", ["generalized_continued_fraction"]], ["mod", "theorem", "exists_rat_eq_of_terminates", ["generalized_continued_fraction"]], ["mod", "theorem", "terminates_iff_rat", ["generalized_continued_fraction"]], ["mod", "theorem", "terminates_of_rat", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": [["mod", "theorem", "exists_succ_nth_stream_of_gcf_of_nth_eq_some", ["generalized_continued_fraction", "int_fract_pair"]], ["mod", "theorem", "of_h_eq_floor", ["generalized_continued_fraction"]], ["mod", "theorem", "of_h_eq_int_fract_pair_seq1_fst_b", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "newPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "changes": [["mod", "theorem", "continuants_aux_recurrence", ["generalized_continued_fraction"]], ["mod", "theorem", "continuants_recurrence", ["generalized_continued_fraction"]], ["mod", "theorem", "continuants_recurrence_aux", ["generalized_continued_fraction"]], ["mod", "theorem", "denominators_recurrence", ["generalized_continued_fraction"]], ["mod", "theorem", "numerators_recurrence", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": [["mod", "theorem", "convergents_eq_convergents'", ["continued_fraction"]], ["mod", "def", "squash_gcf", ["generalized_continued_fraction"]], ["mod", "def", "squash_seq", ["generalized_continued_fraction"]], ["mod", "theorem", "squash_seq_nth_of_not_terminated", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/terminated_stable.lean", "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": [["mod", "theorem", "convergents'_aux_stable_of_terminated", ["generalized_continued_fraction"]], ["mod", "theorem", "convergents'_aux_stable_step_of_terminated", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/translations.lean", "newPath": "src/algebra/continued_fractions/translations.lean", "changes": [["mod", "theorem", "first_continuant_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "first_denominator_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "first_numerator_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "part_denom_eq_s_b", ["generalized_continued_fraction"]], ["mod", "theorem", "part_num_eq_s_a", ["generalized_continued_fraction"]], ["mod", "theorem", "second_continuant_aux_eq", ["generalized_continued_fraction"]], ["mod", "theorem", "zeroth_convergent'_aux_eq_zero", ["generalized_continued_fraction"]]]}]}, {"timestamp": 1634994839, "sha": "7b979aaf", "message": "move(algebra/order/*): More algebraic order files in the correct place (#9899)\n`algebra.module.ordered` and `algebra.algebra.ordered` were really continuations of `algebra.order.smul` (the first being quite literally the same with additive inverses), so it makes sense to bring them closer. `algebra.floor` and `algebra.archimedean` also perfectly qualify for the subfolder.", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/ordered.lean", "newPath": "src/algebra/order/algebra.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/order/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/order/floor.lean", "changes": []}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/order/module.lean", "changes": []}, {"oldPath": "src/algebra/order/nonneg.lean", "newPath": "src/algebra/order/nonneg.lean", "changes": []}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/pointwise.lean", "newPath": "src/data/real/pointwise.lean", "changes": []}, {"oldPath": "src/group_theory/archimedean.lean", "newPath": "src/group_theory/archimedean.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}]}, {"timestamp": 1634977369, "sha": "eb1e037f", "message": "doc(algebra/ring): correct docs for surjective pushforwards (#9896)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}]}, {"timestamp": 1634977368, "sha": "a75f7623", "message": "feat(ring_theory/localization): generalize `exist_integer_multiples` to finite families (#9859)\nThis PR shows we can clear denominators of finitely-indexed collections of fractions (i.e. elements of `S` where `is_localization M S`), with the existing result about finite sets of fractions as a special case.", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "exist_integer_multiples", ["is_localization"]], ["add", "theorem", "exist_integer_multiples_of_fintype", ["is_localization"]]]}]}, {"timestamp": 1634977368, "sha": "294ce353", "message": "fix(algebra/module/submodule): fix incorrectly generalized arguments to `smul_mem_iff'` and `smul_of_tower_mem` (#9851)\nThese put unnecessary requirements on `S`.", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["mod", "theorem", "coe_smul_of_tower", ["submodule"]], ["mod", "theorem", "smul_mem_iff'", ["submodule"]], ["mod", "theorem", "smul_of_tower_mem", ["submodule"]]]}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": [["mod", "theorem", "smul_mem_iff'", ["sub_mul_action"]], ["mod", "theorem", "smul_of_tower_mem", ["sub_mul_action"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1634977367, "sha": "2cbd4bad", "message": "feat(group_theory/index): `relindex_dvd_of_le_left` (#9835)\nIf `H ≤ K`, then `K.relindex L ∣ H.relindex L`.\nCaution: `relindex_dvd_of_le_right` is not true. `relindex_le_of_le_right` is true, but it is harder to prove, and harder to state (because you have to be careful about `relindex = 0`).", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "inf_relindex_left", ["subgroup"]], ["add", "theorem", "inf_relindex_right", ["subgroup"]], ["add", "theorem", "relindex_dvd_of_le_left", ["subgroup"]]]}]}, {"timestamp": 1634968421, "sha": "183b8c8a", "message": "refactor(data/list/defs): move defs about rb_map (#9844)\nThere is nothing intrinsically `meta` about `rb_map`, but in practice in mathlib we prove nothing about it and only use it in tactic infrastructure. This PR moves a definition involving `rb_map` out of `data.list.defs` and into `meta.rb_map` (where many others already exist).\n(motivated by mathport; rb_map is of course disappearing/changing, so better to quarantine this stuff off with other things that aren't being automatically ported)\n`rbmap` is not related to `rb_map`. It can likely be moved from core to mathlib entirely.", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["mod", "def", "to_rbmap", ["list"]]]}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}]}, {"timestamp": 1634957756, "sha": "45ba2ada", "message": "chore(scripts): update nolints.txt (#9895)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1634940362, "sha": "7690e0a4", "message": "chore(order/complete_lattice): add `(supr|infi)_option_elim` (#9886)\nMotivated by `supr_option'` and `infi_option'` from `flypitch`.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_option_elim", []], ["add", "theorem", "supr_option_elim", []]]}]}, {"timestamp": 1634933757, "sha": "72c20fab", "message": "feat(analysis/special_functions/exp_log): Classify when log is zero (#9815)\nClassify when the real `log` function is zero.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "log_eq_zero", ["real"]]]}]}, {"timestamp": 1634918308, "sha": "d23b8334", "message": "chore(data/set/lattice): add `@[simp]` to a few lemmas (#9883)\nAdd `@[simp]` to `Union_subset_iff`, `subset_Inter_iff`,\n`sUnion_subset_iff`, and `subset_sInter_iff` (new lemma).", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Union_subset_iff", ["set"]], ["mod", "theorem", "sUnion_subset_iff", ["set"]], ["mod", "theorem", "subset_Inter_iff", ["set"]], ["add", "theorem", "subset_sInter_iff", ["set"]]]}]}, {"timestamp": 1634918306, "sha": "3d237db7", "message": "feat(linear_algebra/matrix/determinant): det_conj_transpose (#9879)\nAlso:\n* Makes the arguments of `ring_hom.map_det` and `alg_hom.map_det` explicit, and removes them from the `matrix` namespace to enable dot notation.\n* Adds `ring_equiv.map_det` and `alg_equiv.map_det`", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "map_det", ["alg_equiv"]], ["add", "theorem", "map_det", ["alg_hom"]], ["del", "theorem", "map_det", ["matrix", "alg_hom"]], ["add", "theorem", "det_conj_transpose", ["matrix"]], ["del", "theorem", "map_det", ["matrix", "ring_hom"]], ["add", "theorem", "map_det", ["ring_equiv"]], ["add", "theorem", "map_det", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1634918305, "sha": "20bb02f6", "message": "feat(data/fintype/basic): `fintype.card_pos` (#9876)\nTwo lemmas `fintype.card_pos` and `fintype.card_ne_zero` that are often easier to use than `fintype.card_pos_iff`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_ne_zero", ["fintype"]], ["add", "theorem", "card_pos", ["fintype"]]]}]}, {"timestamp": 1634918304, "sha": "22c7474e", "message": "feat(algebra/module/basic): a few more instances (#9871)\n* generalize `is_scalar_tower.rat`;\n* add `smul_comm_class.rat` and `smul_comm_class.rat'`;\n* golf a few proofs.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1634918303, "sha": "87ea7806", "message": "chore(set_theory/cardinal): use `protected` instead of `private` (#9869)\nAlso use `mk_congr`.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "mk_emptyc", ["cardinal"]]]}]}, {"timestamp": 1634918301, "sha": "d8b92599", "message": "feat(*): add various divisibility-related lemmas (#9866)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "mk_ne_zero", ["associates"]], ["add", "theorem", "dvd_irreducible_iff_associated", ["irreducible"]], ["add", "theorem", "dvd_prime_iff_associated", ["prime"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "neg_iff", ["is_unit"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "eq_of_associated_of_nonneg", ["int"]], ["add", "theorem", "nonneg_iff_normalize_eq_self", ["int"]], ["add", "theorem", "nonneg_of_normalize_eq_self", ["int"]]]}, {"oldPath": "src/ring_theory/prime.lean", "newPath": "src/ring_theory/prime.lean", "changes": [["add", "theorem", "abs", ["prime"]], ["add", "theorem", "neg", ["prime"]]]}]}, {"timestamp": 1634918300, "sha": "29553061", "message": "feat(ring_theory/finiteness): generalize module.finite to noncommutative setting (#9860)\nAn almost for free generalization of `module.finite` to `semiring`.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["mod", "def", "finite_presentation", ["algebra"]], ["mod", "theorem", "of_injective", ["module", "finite"]], ["mod", "theorem", "of_restrict_scalars_finite", ["module", "finite"]], ["mod", "theorem", "trans", ["module", "finite"]], ["mod", "theorem", "finite_def", ["module"]]]}]}, {"timestamp": 1634918299, "sha": "0a7f4482", "message": "chore(group_theory/congruence): lower priority for `con.quotient.decidable_eq` (#9826)\nI was debugging some slow typeclass searches, and it turns out (`add_`)`con.quotient.decidable_eq` wants to be applied to all quotient types, causing a search for a `has_mul` instance before the elaborator can try unifying the `con.to_setoid` relation with the quotient type's relation, so e.g. `decidable_eq (multiset α)` first tries going all the way up to searching for a `linear_ordered_normed_etc_field (list α)` before even trying `multiset.decidable_eq`.\nAnother approach would be to make `multiset` and/or `con.quotient` irreducible, but that would require a lot more work to ensure we don't break the irreducibility barrier.", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}]}, {"timestamp": 1634918297, "sha": "03ba4ccf", "message": "feat(algebra/floor): Floor semirings (#9592)\nA floor semiring is a semiring equipped with a `floor` and a `ceil` function.", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "floor_semiring_unique", []], ["add", "theorem", "ceil_to_nat", ["int"]], ["add", "theorem", "floor_nonpos", ["int"]], ["add", "theorem", "floor_to_nat", ["int"]], ["mod", "def", "ceil", ["nat"]], ["mod", "theorem", "ceil_eq_zero", ["nat"]], ["mod", "theorem", "ceil_le", ["nat"]], ["mod", "theorem", "ceil_mono", ["nat"]], ["mod", "def", "floor", ["nat"]], ["add", "theorem", "floor_eq_iff", ["nat"]], ["add", "theorem", "floor_eq_on_Ico'", ["nat"]], ["add", "theorem", "floor_eq_on_Ico", ["nat"]], ["add", "theorem", "floor_eq_zero", ["nat"]], ["del", "theorem", "floor_eq_zero_iff", ["nat"]], ["mod", "theorem", "floor_le", ["nat"]], ["add", "theorem", "floor_lt'", ["nat"]], ["add", "theorem", "floor_lt", ["nat"]], ["del", "theorem", "floor_lt_iff", ["nat"]], ["mod", "theorem", "floor_mono", ["nat"]], ["add", "theorem", "floor_one", ["nat"]], ["add", "theorem", "gc_ceil_coe", ["nat"]], ["add", "theorem", "le_floor", ["nat"]], ["add", "theorem", "le_floor_iff'", ["nat"]], ["mod", "theorem", "le_floor_iff", ["nat"]], ["del", "theorem", "le_floor_of_le", ["nat"]], ["mod", "theorem", "lt_ceil", ["nat"]], ["mod", "theorem", "lt_floor_add_one", ["nat"]], ["add", "theorem", "lt_of_floor_lt", ["nat"]], ["add", "theorem", "lt_succ_floor", ["nat"]], ["mod", "theorem", "sub_one_lt_floor", ["nat"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "le_to_nat_iff", ["int"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1634908578, "sha": "bee8d4ac", "message": "chore(order/filter/basic): golf a proof (#9874)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_coe_set", ["set"]], ["add", "theorem", "Inter_subtype", ["set"]], ["add", "theorem", "Union_coe_set", ["set"]], ["mod", "theorem", "Union_subtype", ["set"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "mem_infi_finset", ["filter"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}]}, {"timestamp": 1634908576, "sha": "b812fb9c", "message": "refactor(ring_theory/ideal): split off `quotient.lean` (#9850)\nBoth `ring_theory/ideal/basic.lean` and `ring_theory/ideal/operations.lean` were starting to get a bit long, so I split off the definition of `ideal.quotient` and the results that had no further dependencies.\nI also went through all the imports for files depending on either `ideal/basic.lean` or `ideal/operations.lean` to check whether they shouldn't depend on `ideal/quotient.lean` instead.", "changes": [{"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/linear_algebra/smodeq.lean", "newPath": "src/linear_algebra/smodeq.lean", "changes": []}, {"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["del", "theorem", "map_pi", ["ideal"]], ["del", "def", "quot_equiv_of_eq", ["ideal"]], ["del", "theorem", "quot_equiv_of_eq_mk", ["ideal"]], ["del", "theorem", "eq_zero_iff_mem", ["ideal", "quotient"]], ["del", "theorem", "exists_inv", ["ideal", "quotient"]], ["del", "def", "factor", ["ideal", "quotient"]], ["del", "theorem", "factor_comp_mk", ["ideal", "quotient"]], ["del", "theorem", "factor_mk", ["ideal", "quotient"]], ["del", "theorem", "is_domain_iff_prime", ["ideal", "quotient"]], ["del", "def", "lift", ["ideal", "quotient"]], ["del", "theorem", "lift_mk", ["ideal", "quotient"]], ["del", "theorem", "maximal_ideal_iff_is_field_quotient", ["ideal", "quotient"]], ["del", "theorem", "maximal_of_is_field", ["ideal", "quotient"]], ["del", "def", "mk", ["ideal", "quotient"]], ["del", "theorem", "mk_eq_mk", ["ideal", "quotient"]], ["del", "theorem", "mk_surjective", ["ideal", "quotient"]], ["del", "theorem", "quotient_ring_saturate", ["ideal", "quotient"]], ["del", "theorem", "ring_hom_ext", ["ideal", "quotient"]], ["del", "theorem", "zero_eq_one_iff", ["ideal", "quotient"]], ["del", "theorem", "zero_ne_one_iff", ["ideal", "quotient"]], ["del", "def", "quotient", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "theorem", "exists_sub_mem", ["ideal"]], ["del", "theorem", "exists_sub_one_mem_and_mem", ["ideal"]], ["del", "def", "quotient_inf_to_pi_quotient", ["ideal"]], ["del", "theorem", "quotient_inf_to_pi_quotient_bijective", ["ideal"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ideal/quotient.lean", "changes": [["add", "theorem", "exists_sub_mem", ["ideal"]], ["add", "theorem", "exists_sub_one_mem_and_mem", ["ideal"]], ["add", "theorem", "map_pi", ["ideal"]], ["add", "def", "quot_equiv_of_eq", ["ideal"]], ["add", "theorem", "quot_equiv_of_eq_mk", ["ideal"]], ["add", "theorem", "eq_zero_iff_mem", ["ideal", "quotient"]], ["add", "theorem", "exists_inv", ["ideal", "quotient"]], ["add", "def", "factor", ["ideal", "quotient"]], ["add", "theorem", "factor_comp_mk", ["ideal", "quotient"]], ["add", "theorem", "factor_mk", ["ideal", "quotient"]], ["add", "theorem", "is_domain_iff_prime", ["ideal", "quotient"]], ["add", "def", "lift", ["ideal", "quotient"]], ["add", "theorem", "lift_mk", ["ideal", "quotient"]], ["add", "theorem", "maximal_ideal_iff_is_field_quotient", ["ideal", "quotient"]], ["add", "theorem", "maximal_of_is_field", ["ideal", "quotient"]], ["add", "def", "mk", ["ideal", "quotient"]], ["add", "theorem", "mk_eq_mk", ["ideal", "quotient"]], ["add", "theorem", "mk_surjective", ["ideal", "quotient"]], ["add", "theorem", "quotient_ring_saturate", ["ideal", "quotient"]], ["add", "theorem", "ring_hom_ext", ["ideal", "quotient"]], ["add", "theorem", "zero_eq_one_iff", ["ideal", "quotient"]], ["add", "theorem", "zero_ne_one_iff", ["ideal", "quotient"]], ["add", "def", "quotient", ["ideal"]], ["add", "def", "quotient_inf_to_pi_quotient", ["ideal"]], ["add", "theorem", "quotient_inf_to_pi_quotient_bijective", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "newPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1634908575, "sha": "e6c516d5", "message": "feat(topology/maps): Characterize open/closed maps in terms of images of interior/closure (#9814)\nAlso provide the docstring for `inducing`.", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "closure_image_subset", ["is_closed_map"]], ["add", "theorem", "is_closed_map_iff_closure_image", []], ["add", "theorem", "is_open_map_iff_interior", []]]}]}, {"timestamp": 1634899789, "sha": "43cd79f9", "message": "feat(data/finset/basic): Simple `finset.erase` lemmas (#9878)\n`finset.erase.singleton` and `finset.(map/image)_erase`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "erase_singleton", ["finset"]], ["add", "theorem", "image_erase", ["finset"]], ["add", "theorem", "map_erase", ["finset"]]]}]}, {"timestamp": 1634885273, "sha": "76212e65", "message": "feat(measure_theory/integral/set_integral): integral of a `is_R_or_C` function equals integral of real part + integral of imaginary part (#9735)", "changes": [{"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "norm_of_real", ["is_R_or_C"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "of_real", ["measure_theory", "integrable"]], ["add", "theorem", "re_im_iff", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "comp_mem_ℒp'", ["continuous_linear_map"]], ["add", "theorem", "comp_mem_ℒp", ["continuous_linear_map"]], ["add", "theorem", "comp_mem_ℒp", ["lipschitz_with"]], ["add", "theorem", "of_comp_antilipschitz_with", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_real", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_re_im_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/special_functions.lean", "newPath": "src/measure_theory/function/special_functions.lean", "changes": [["add", "theorem", "ae_measurable_of_re_im", []], ["add", "theorem", "measurable_of_real", ["is_R_or_C"]], ["add", "theorem", "measurable_of_re_im", []]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_coe_re_add_coe_im", []], ["add", "theorem", "integral_re_add_im", []], ["add", "theorem", "set_integral_re_add_im", []]]}, {"oldPath": "test/measurability.lean", "newPath": "test/measurability.lean", "changes": []}]}, {"timestamp": 1634865349, "sha": "c4c71d2f", "message": "feat(topology): define class `[noncompact_space]` (#9839)", "changes": [{"oldPath": "src/topology/alexandroff.lean", "newPath": "src/topology/alexandroff.lean", "changes": [["mod", "theorem", "dense_embedding_coe", ["alexandroff"]], ["mod", "theorem", "dense_range_coe", ["alexandroff"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "diam_univ_of_noncompact", ["metric"]], ["add", "theorem", "ediam_univ_eq_top_iff_noncompact", ["metric"]], ["add", "theorem", "ediam_univ_of_noncompact", ["metric"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "cocompact_ne_bot_iff", ["filter"]], ["del", "theorem", "cocompact_ne_bot_tfae", ["filter"]], ["mod", "theorem", "coprod_cocompact", ["filter"]], ["add", "theorem", "noncompact_space_of_ne_bot", []], ["add", "theorem", "not_compact_space_iff", []], ["add", "theorem", "noncompact_space_iff", ["prod"]]]}]}, {"timestamp": 1634857460, "sha": "6f837a6e", "message": "feat(data/polynomial): generalize and rename `polynomial.normalize_monic` (#9853)\nThis PR renames `polynomial.normalize_monic` to `polynomial.monic.normalize_eq_self` (more dot notation!) and generalizes it from fields to `normalization_monoid`s.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "normalize_eq_self", ["polynomial", "monic"]], ["del", "theorem", "normalize_monic", ["polynomial"]]]}]}, {"timestamp": 1634857459, "sha": "16a9031a", "message": "refactor(data/complex/*): replace `complex.conj` and `is_R_or_C.conj` with star (#9640)\nThis PR replaces `complex.conj` and `is_R_or_C.conj` by the star operation defined in `algebra/star`. Both of these are replaced with `star_ring_aut`, which is also made available under the notation `conj` defined in the locale `complex_conjugate`. This effectively also upgrades conj from a `ring_hom` to a `ring_aut`.\nFixes #9421", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "star_ring_aut_apply", []], ["add", "theorem", "star_ring_aut_self_apply", []]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "theorem", "conj_cle_apply", ["complex"]], ["mod", "theorem", "continuous_conj", ["complex"]], ["del", "theorem", "conj_to_complex", ["is_R_or_C"]]]}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["mod", "theorem", "coe_inv_circle_eq_conj", []]]}, {"oldPath": "src/analysis/complex/conformal.lean", "newPath": "src/analysis/complex/conformal.lean", "changes": []}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": [["mod", "theorem", "fourier_neg", []]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["mod", "theorem", "real_inner_comm", []]]}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["del", "def", "conj", ["complex"]], ["del", "theorem", "conj_bijective", ["complex"]], ["del", "theorem", "conj_conj", ["complex"]], ["del", "theorem", "conj_eq_zero", ["complex"]], ["del", "theorem", "conj_inj", ["complex"]], ["del", "theorem", "conj_involutive", ["complex"]], ["mod", "theorem", "conj_of_real", ["complex"]], ["del", "theorem", "conj_one", ["complex"]], ["del", "theorem", "conj_sub", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "theorem", "abs_sq_re_add_conj'", ["is_R_or_C"]], ["mod", "theorem", "abs_sq_re_add_conj", ["is_R_or_C"]], ["del", "theorem", "conj_bijective", ["is_R_or_C"]], ["del", "theorem", "conj_conj", ["is_R_or_C"]], ["del", "theorem", "conj_div", ["is_R_or_C"]], ["del", "theorem", "conj_eq_zero", ["is_R_or_C"]], ["del", "theorem", "conj_inj", ["is_R_or_C"]], ["del", "theorem", "conj_inv", ["is_R_or_C"]], ["del", "theorem", "conj_involutive", ["is_R_or_C"]], ["mod", "theorem", "conj_mul_eq_norm_sq_left", ["is_R_or_C"]], ["mod", "theorem", "conj_to_real", ["is_R_or_C"]], ["mod", "def", "conj_to_ring_equiv", ["is_R_or_C"]], ["del", "theorem", "ring_equiv_apply", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["mod", "theorem", "of_complex_conj", ["clifford_algebra_complex"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["mod", "theorem", "integral_conj", []]]}]}, {"timestamp": 1634846784, "sha": "912039d7", "message": "feat(algebra/group_power/lemmas): Positivity of an odd/even power (#9796)\nThis adds `odd.pow_nonneg` and co and `pow_right_comm`.\nThis also deletes `pow_odd_nonneg` and `pow_odd_pos` as they are special cases of `pow_nonneg` and `pow_pos`.\nTo make dot notation work, this renames `(pow/fpow)_(odd/even)_(nonneg/nonpos/pos/neg/abs)` to `(odd/even).(pow/fpow)_(nonneg/nonpos/pos/neg/abs)`", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "abs_fpow_even", []], ["add", "theorem", "abs_fpow", ["even"]], ["add", "theorem", "fpow_abs", ["even"]], ["add", "theorem", "fpow_neg", ["even"]], ["add", "theorem", "fpow_nonneg", ["even"]], ["add", "theorem", "fpow_pos", ["even"]], ["mod", "theorem", "fpow_bit0_abs", []], ["del", "theorem", "fpow_even_abs", []], ["del", "theorem", "fpow_even_neg", []], ["del", "theorem", "fpow_even_nonneg", []], ["del", "theorem", "fpow_even_pos", []], ["del", "theorem", "fpow_odd_neg", []], ["del", "theorem", "fpow_odd_nonneg", []], ["del", "theorem", "fpow_odd_nonpos", []], ["del", "theorem", "fpow_odd_pos", []], ["add", "theorem", "fpow_neg", ["odd"]], ["add", "theorem", "fpow_nonneg", ["odd"]], ["add", "theorem", "fpow_nonpos", ["odd"]], ["add", "theorem", "fpow_pos", ["odd"]]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_right_comm", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "pow_abs", ["even"]], ["add", "theorem", "pow_nonneg", ["even"]], ["add", "theorem", "pow_pos", ["even"]], ["add", "theorem", "pow_pos_iff", ["even"]], ["add", "theorem", "pow_neg", ["odd"]], ["add", "theorem", "pow_neg_iff", ["odd"]], ["add", "theorem", "pow_nonneg_iff", ["odd"]], ["add", "theorem", "pow_nonpos", ["odd"]], ["add", "theorem", "pow_nonpos_iff", ["odd"]], ["add", "theorem", "pow_pos_iff", ["odd"]], ["mod", "theorem", "pow_bit0_abs", []], ["del", "theorem", "pow_even_abs", []], ["del", "theorem", "pow_even_nonneg", []], ["del", "theorem", "pow_even_pos", []], ["del", "theorem", "pow_odd_neg", []], ["del", "theorem", "pow_odd_nonneg", []], ["del", "theorem", "pow_odd_nonpos", []], ["del", "theorem", "pow_odd_pos", []]]}]}, {"timestamp": 1634840900, "sha": "15d4e5f1", "message": "refactor(data/real/ennreal): remove sub lemmas (#9857)\n* Remove all lemmas about subtraction on `ennreal` that are special cases of `has_ordered_sub` lemmas.\n* [This](https://github.com/leanprover-community/mathlib/blob/fe5ddaf42c5d61ecc740e815d63ac38f5e94a2e8/src/data/real/ennreal.lean#L734-L795) gives a list of renamings.\n* The lemmas that have a `@[simp]` attribute will be done in a separate PR", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/integrability.lean", "newPath": "src/analysis/box_integral/integrability.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "le_sub_add_self", ["ennreal"]], ["del", "theorem", "lt_sub_comm", ["ennreal"]], ["del", "theorem", "lt_sub_iff_add_lt", ["ennreal"]], ["mod", "theorem", "mul_sub", ["ennreal"]], ["del", "theorem", "sub_add_self_eq_max", ["ennreal"]], ["del", "theorem", "sub_le_self", ["ennreal"]], ["del", "theorem", "sub_le_sub", ["ennreal"]], ["del", "theorem", "sub_le_sub_add_sub", ["ennreal"]], ["del", "theorem", "sub_self", ["ennreal"]], ["del", "theorem", "sub_zero", ["ennreal"]], ["del", "theorem", "zero_sub", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}]}, {"timestamp": 1634840899, "sha": "5b72c4ee", "message": "feat(linear_algebra/quotient): `S.restrict_scalars.quotient` is `S.quotient` (#9535)\nThis PR adds a more general module instance on submodule quotients, in order to show that `(S.restrict_scalars R).quotient` is equivalent to `S.quotient`. If we decide this instance is not a good idea, I can write it instead as `S.quotient.restrict_scalars`, but that is a bit less convenient to work with.", "changes": [{"oldPath": "src/linear_algebra/quotient.lean", "newPath": "src/linear_algebra/quotient.lean", "changes": [["del", "theorem", "mk_nsmul", ["submodule", "quotient"]], ["mod", "theorem", "mk_smul", ["submodule", "quotient"]], ["add", "def", "restrict_scalars_equiv", ["submodule", "quotient"]], ["add", "theorem", "restrict_scalars_equiv_mk", ["submodule", "quotient"]], ["add", "theorem", "restrict_scalars_equiv_symm_mk", ["submodule", "quotient"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1634831005, "sha": "9be82475", "message": "feat(logic/function/embedding): add `function.embedding.option_elim` (#9841)\n* add `option.injective_iff`;\n* add `function.embedding.option_elim`;\n* use it in the proof of `cardinal.add_one_le_succ`;\n* add `function.embedding.cardinal_le`, `cardinal.succ_pos`;\n* add `@[simp]` to `cardinal.lt_succ`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "injective_iff", ["option"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "option_elim", ["function", "embedding"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "add_one_le_succ", ["cardinal"]], ["mod", "theorem", "lt_succ", ["cardinal"]], ["mod", "theorem", "succ_ne_zero", ["cardinal"]], ["add", "theorem", "succ_pos", ["cardinal"]], ["add", "theorem", "cardinal_le", ["function", "embedding"]]]}]}, {"timestamp": 1634831003, "sha": "14ec1c8e", "message": "feat(linear_algebra/matrix/nonsingular_inverse): adjugate of a 2x2 matrix (#9830)\nSince we have `det_fin_two`, let's have `adjugate_fin_two` as well.", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "adjugate_fin_two'", ["matrix"]], ["add", "theorem", "adjugate_fin_two", ["matrix"]]]}]}, {"timestamp": 1634831000, "sha": "9c240b58", "message": "feat(analysis/inner_product_space): define `orthogonal_family` of subspaces (#9718)\nDefine `orthogonal_family` on `V : ι → submodule 𝕜 E` to mean that any two vectors from distinct subspaces are orthogonal. Prove that an orthogonal family of subspaces is `complete_lattice.independent`.\nAlso prove that in finite dimension an orthogonal family `V` satisifies `direct_sum.submodule_is_internal` (i.e., it provides an internal direct sum decomposition of `E`) if and only if their joint orthogonal complement is trivial, `(supr V)ᗮ = ⊥`, and that in this case, the identification of `E` with the direct sum of `V` is an isometry.", "changes": [{"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "eq_ite", ["orthogonal_family"]], ["add", "theorem", "independent", ["orthogonal_family"]], ["add", "theorem", "inner_right_dfinsupp", ["orthogonal_family"]], ["add", "theorem", "inner_right_fintype", ["orthogonal_family"]], ["add", "def", "orthogonal_family", []]]}, {"oldPath": "src/analysis/inner_product_space/pi_L2.lean", "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "def", "isometry_L2_of_orthogonal_family", ["direct_sum", "submodule_is_internal"]]]}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "submodule_is_internal_iff", ["orthogonal_family"]]]}]}, {"timestamp": 1634822178, "sha": "d8096aa6", "message": "fix(ring_theory/subring): `inclusion` is a ring_hom! (#9849)", "changes": [{"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["mod", "def", "inclusion", ["subring"]]]}]}, {"timestamp": 1634822177, "sha": "d8b0d1a9", "message": "chore(algebra/big_operators): avoid 'abel' tactic (#9833)\nI'd like to add an import ` algebra.euclidean_domain` → `algebra.associated` in #9606, so this removes the dependency in the other direction (`algebra.associated` → `algebra.big_operators.basic` → `tactic.abel` → `tactic.norm_num` → `data.rat.cast` → `data.rat.order` → `data.rat.basic` → ` algebra.euclidean_domain`). Fortunately, the dependency on `abel` was quite shallow here.", "changes": [{"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/data/int/interval.lean", "newPath": "src/data/int/interval.lean", "changes": []}, {"oldPath": "src/data/pnat/interval.lean", "newPath": "src/data/pnat/interval.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}]}, {"timestamp": 1634822176, "sha": "de13786a", "message": "chore(topology/algebra/ordered): move IVT to a new file (#9792)", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "surjective'", ["continuous"]], ["del", "theorem", "surjective", ["continuous"]], ["del", "theorem", "surj_on_of_tendsto'", ["continuous_on"]], ["del", "theorem", "surj_on_of_tendsto", ["continuous_on"]], ["del", "theorem", "eq_Icc_cInf_cSup_of_connected_bdd_closed", []], ["del", "theorem", "intermediate_value_Icc'", []], ["del", "theorem", "intermediate_value_Icc", []], ["del", "theorem", "intermediate_value_Ico'", []], ["del", "theorem", "intermediate_value_Ico", []], ["del", "theorem", "intermediate_value_Ioc'", []], ["del", "theorem", "intermediate_value_Ioc", []], ["del", "theorem", "intermediate_value_Ioo'", []], ["del", "theorem", "intermediate_value_Ioo", []], ["del", "theorem", "intermediate_value_interval", []], ["del", "theorem", "intermediate_value_univ", []], ["del", "theorem", "intermediate_value_univ₂", []], ["del", "theorem", "intermediate_value_univ₂_eventually₁", []], ["del", "theorem", "intermediate_value_univ₂_eventually₂", []], ["del", "theorem", "Icc_subset_of_forall_exists_gt", ["is_closed"]], ["del", "theorem", "Icc_subset_of_forall_mem_nhds_within", ["is_closed"]], ["del", "theorem", "mem_of_ge_of_forall_exists_gt", ["is_closed"]], ["del", "theorem", "Icc_subset", ["is_connected"]], ["del", "theorem", "Ioo_cInf_cSup_subset", ["is_connected"]], ["del", "theorem", "Icc_subset", ["is_preconnected"]], ["del", "theorem", "Iio_cSup_subset", ["is_preconnected"]], ["del", "theorem", "Ioi_cInf_subset", ["is_preconnected"]], ["del", "theorem", "eq_univ_of_unbounded", ["is_preconnected"]], ["del", "theorem", "intermediate_value", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Ici", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Ico", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Iic", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Iii", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Iio", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Ioc", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Ioi", ["is_preconnected"]], ["del", "theorem", "intermediate_value_Ioo", ["is_preconnected"]], ["del", "theorem", "intermediate_value₂", ["is_preconnected"]], ["del", "theorem", "intermediate_value₂_eventually₁", ["is_preconnected"]], ["del", "theorem", "intermediate_value₂_eventually₂", ["is_preconnected"]], ["del", "theorem", "mem_intervals", ["is_preconnected"]], ["del", "theorem", "ord_connected", ["is_preconnected"]], ["del", "theorem", "is_preconnected_Icc", []], ["del", "theorem", "is_preconnected_Ici", []], ["del", "theorem", "is_preconnected_Ico", []], ["del", "theorem", "is_preconnected_Iic", []], ["del", "theorem", "is_preconnected_Iio", []], ["del", "theorem", "is_preconnected_Ioc", []], ["del", "theorem", "is_preconnected_Ioi", []], ["del", "theorem", "is_preconnected_Ioo", []], ["del", "theorem", "is_preconnected_iff_ord_connected", []], ["del", "theorem", "is_preconnected_interval", []], ["del", "theorem", "mem_range_of_exists_le_of_exists_ge", []], ["del", "theorem", "is_preconnected", ["set", "ord_connected"]], ["del", "theorem", "set_of_is_preconnected_eq_of_ordered", []], ["del", "theorem", "set_of_is_preconnected_subset_of_ordered", []]]}, {"oldPath": "src/topology/algebra/ordered/compact.lean", "newPath": "src/topology/algebra/ordered/compact.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/intermediate_value.lean", "changes": [["add", "theorem", "surjective'", ["continuous"]], ["add", "theorem", "surjective", ["continuous"]], ["add", "theorem", "surj_on_of_tendsto'", ["continuous_on"]], ["add", "theorem", "surj_on_of_tendsto", ["continuous_on"]], ["add", "theorem", "eq_Icc_cInf_cSup_of_connected_bdd_closed", []], ["add", "theorem", "intermediate_value_Icc'", []], ["add", "theorem", "intermediate_value_Icc", []], ["add", "theorem", "intermediate_value_Ico'", []], ["add", "theorem", "intermediate_value_Ico", []], ["add", "theorem", "intermediate_value_Ioc'", []], ["add", "theorem", "intermediate_value_Ioc", []], ["add", "theorem", "intermediate_value_Ioo'", []], ["add", "theorem", "intermediate_value_Ioo", []], ["add", "theorem", "intermediate_value_interval", []], ["add", "theorem", "intermediate_value_univ", []], ["add", "theorem", "intermediate_value_univ₂", []], ["add", "theorem", "intermediate_value_univ₂_eventually₁", []], ["add", "theorem", "intermediate_value_univ₂_eventually₂", []], ["add", "theorem", "Icc_subset_of_forall_exists_gt", ["is_closed"]], ["add", "theorem", "Icc_subset_of_forall_mem_nhds_within", ["is_closed"]], ["add", "theorem", "mem_of_ge_of_forall_exists_gt", ["is_closed"]], ["add", "theorem", "Icc_subset", ["is_connected"]], ["add", "theorem", "Ioo_cInf_cSup_subset", ["is_connected"]], ["add", "theorem", "Icc_subset", ["is_preconnected"]], ["add", "theorem", "Iio_cSup_subset", ["is_preconnected"]], ["add", "theorem", "Ioi_cInf_subset", ["is_preconnected"]], ["add", "theorem", "eq_univ_of_unbounded", ["is_preconnected"]], ["add", "theorem", "intermediate_value", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Ici", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Ico", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Iic", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Iii", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Iio", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Ioc", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Ioi", ["is_preconnected"]], ["add", "theorem", "intermediate_value_Ioo", ["is_preconnected"]], ["add", "theorem", "intermediate_value₂", ["is_preconnected"]], ["add", "theorem", "intermediate_value₂_eventually₁", ["is_preconnected"]], ["add", "theorem", "intermediate_value₂_eventually₂", ["is_preconnected"]], ["add", "theorem", "mem_intervals", ["is_preconnected"]], ["add", "theorem", "ord_connected", ["is_preconnected"]], ["add", "theorem", "is_preconnected_Icc", []], ["add", "theorem", "is_preconnected_Ici", []], ["add", "theorem", "is_preconnected_Ico", []], ["add", "theorem", "is_preconnected_Iic", []], ["add", "theorem", "is_preconnected_Iio", []], ["add", "theorem", "is_preconnected_Ioc", []], ["add", "theorem", "is_preconnected_Ioi", []], ["add", "theorem", "is_preconnected_Ioo", []], ["add", "theorem", "is_preconnected_iff_ord_connected", []], ["add", "theorem", "is_preconnected_interval", []], ["add", "theorem", "mem_range_of_exists_le_of_exists_ge", []], ["add", "theorem", "is_preconnected", ["set", "ord_connected"]], ["add", "theorem", "set_of_is_preconnected_eq_of_ordered", []], ["add", "theorem", "set_of_is_preconnected_subset_of_ordered", []]]}]}, {"timestamp": 1634822174, "sha": "d9daf541", "message": "feat(topology/metric_space/isometry): add simps config (#9757)\nAlso make `isometric.complete_space` take `complete_space β` as an instance argument.", "changes": [{"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "def", "apply", ["isometric", "simps"]], ["add", "def", "symm_apply", ["isometric", "simps"]], ["del", "theorem", "to_homeomorph_to_equiv", ["isometric"]], ["del", "theorem", "isometric_on_range_apply", ["isometry"]]]}]}, {"timestamp": 1634815537, "sha": "fe5ddaf4", "message": "feat(ring_theory/polynomial/cyclotomic): add cyclotomic_prime_pow_eq_geom_sum and supporting lemmas (#9845)\nClean up a little bit in src/number_theory/divisors.lean using to_additive too.", "changes": [{"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "mem_proper_divisors_prime_pow", ["nat"]], ["add", "theorem", "prod_divisors", ["nat", "prime"]], ["add", "theorem", "prod_proper_divisors", ["nat", "prime"]], ["del", "theorem", "sum_divisors", ["nat", "prime"]], ["del", "theorem", "sum_proper_divisors", ["nat", "prime"]], ["del", "theorem", "prod_divisors_prime", ["nat"]], ["add", "theorem", "prod_proper_divisors_prime_pow", ["nat"]], ["add", "theorem", "proper_divisors_prime_pow", ["nat"]], ["del", "theorem", "sum_divisors_prime_pow", ["nat"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "cyclotomic_prime_pow_eq_geom_sum", ["polynomial"]]]}]}, {"timestamp": 1634815535, "sha": "edd801f7", "message": "chore(set_theory/cardinal): ensure `c ^ ↑n = c ^ n` is definitional (#9842)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "pow_cast_right", ["cardinal"]]]}]}, {"timestamp": 1634815533, "sha": "777f11c8", "message": "feat(group_theory/index): Special cases of relindex (#9831)\nAdds special cases of relindex. Also refactors the file to use `nat.card`, rather than the equivalent `(# _).to_nat`.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["mod", "theorem", "index_bot", ["subgroup"]], ["add", "theorem", "relindex_bot_left", ["subgroup"]], ["add", "theorem", "relindex_bot_left_eq_card", ["subgroup"]], ["add", "theorem", "relindex_bot_right", ["subgroup"]], ["add", "theorem", "relindex_self", ["subgroup"]], ["add", "theorem", "relindex_top_left", ["subgroup"]], ["add", "theorem", "relindex_top_right", ["subgroup"]]]}]}, {"timestamp": 1634815532, "sha": "bfa40102", "message": "feat(data/nat/modeq): `modeq.le_of_lt_add` (#9816)\nIf `a ≡ b [MOD m]` and `a < b + m`, then `a ≤ b`.", "changes": [{"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "add_le_of_lt", ["nat", "modeq"]], ["add", "theorem", "le_of_lt_add", ["nat", "modeq"]]]}]}, {"timestamp": 1634805522, "sha": "da01792c", "message": "refactor(*): remove integral_domain, rename domain to is_domain (#9748)", "changes": [{"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": [["mod", "theorem", "formula", []]]}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "iff_algebra_map_injective", ["no_zero_smul_divisors"]]]}, {"oldPath": "src/algebra/algebra/bilinear.lean", "newPath": "src/algebra/algebra/bilinear.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "eq_or_eq_neg_of_sq_eq_sq", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "to_is_integral_domain", ["integral_domain"]], ["del", "theorem", "to_integral_domain", ["is_integral_domain"]], ["del", "structure", "is_integral_domain", []]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": [["mod", "theorem", "nat_degree_cancel_leads_lt_of_nat_degree_le_nat_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["mod", "theorem", "irreducible_of_mirror", ["polynomial"]], ["mod", "theorem", "mirror_mul_of_domain", ["polynomial"]], ["mod", "theorem", "mirror_smul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["mod", "theorem", "reverse_mul_of_domain", ["polynomial"]], ["mod", "theorem", "trailing_coeff_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["del", "theorem", "polynomial", ["is_integral_domain"]], ["mod", "theorem", "eq_of_infinite_eval_eq", ["polynomial"]], ["mod", "theorem", "leading_coeff_div_by_monic_of_monic", ["polynomial"]], ["mod", "def", "nth_roots_finset", ["polynomial"]], ["mod", "def", "root_set", ["polynomial"]], ["mod", "theorem", "root_set_C", ["polynomial"]], ["mod", "theorem", "root_set_def", ["polynomial"]], ["mod", "theorem", "root_set_zero", ["polynomial"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "sq_add_sq", ["char_p"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["mod", "theorem", "algebra_map_surjective_of_is_algebraic", ["is_alg_closed"]], ["mod", "theorem", "algebra_map_surjective_of_is_integral", ["is_alg_closed"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "gcd_domain_eq_field_fractions", ["minpoly"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["mod", "theorem", "eq_iff", ["perfect_closure"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "def", "equiv_of_pi_lequiv_pi", []], ["mod", "theorem", "is_unit_det'", ["linear_equiv"]], ["mod", "theorem", "det_comm'", ["matrix"]], ["mod", "theorem", "det_conj", ["matrix"]], ["mod", "def", "index_equiv_of_inv", ["matrix"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": [["mod", "theorem", "rank_eq", ["ideal"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": [["mod", "theorem", "exists_mul_vec_eq_zero_iff", ["matrix"]], ["mod", "theorem", "exists_vec_mul_eq_zero_iff", ["matrix"]], ["mod", "theorem", "nondegenerate_iff_det_ne_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/number_theory/function_field.lean", "newPath": "src/number_theory/function_field.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["mod", "theorem", "integral_closure", ["ring", "dimension_le_one"]], ["mod", "theorem", "is_integral_closure", ["ring", "dimension_le_one"]]]}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["mod", "theorem", "iff_pid_with_one_nonzero_prime", ["discrete_valuation_ring"]], ["mod", "theorem", "of_has_unit_mul_pow_irreducible_factorization", ["discrete_valuation_ring"]]]}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["mod", "theorem", "order_mul", ["hahn_series"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "bot_prime", ["ideal"]], ["mod", "theorem", "factors_decreasing", ["ideal"]], ["add", "theorem", "is_domain_iff_prime", ["ideal", "quotient"]], ["del", "theorem", "is_integral_domain_iff_prime", ["ideal", "quotient"]], ["mod", "theorem", "span_singleton_eq_span_singleton", ["ideal"]], ["mod", "theorem", "span_singleton_lt_span_singleton", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "mul_eq_bot", ["ideal"]], ["mod", "theorem", "prod_eq_bot", ["ideal"]], ["del", "theorem", "radical_bot_of_integral_domain", ["ideal"]], ["add", "theorem", "radical_bot_of_is_domain", ["ideal"]], ["mod", "theorem", "ker_is_prime", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["mod", "theorem", "comap_ne_bot_of_algebraic_mem", ["ideal"]], ["mod", "theorem", "comap_ne_bot_of_integral_mem", ["ideal"]], ["mod", "theorem", "comap_ne_bot_of_root_mem", ["ideal"]], ["mod", "theorem", "eq_bot_of_comap_eq_bot", ["ideal"]], ["mod", "theorem", "exists_ideal_over_maximal_of_is_integral", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["del", "def", "division_ring_of_domain", []], ["add", "def", "division_ring_of_is_domain", []], ["del", "def", "field_of_integral_domain", []], ["add", "def", "field_of_is_domain", []], ["del", "theorem", "is_cyclic_of_subgroup_integral_domain", []], ["add", "theorem", "is_cyclic_of_subgroup_is_domain", []]]}, {"oldPath": "src/ring_theory/integrally_closed.lean", "newPath": "src/ring_theory/integrally_closed.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "theorem", "to_integral_domain", ["is_fraction_ring"]], ["del", "theorem", "integral_domain_localization", ["is_localization"]], ["del", "theorem", "integral_domain_of_le_non_zero_divisors", ["is_localization"]], ["add", "theorem", "is_domain_localization", ["is_localization"]], ["add", "theorem", "is_domain_of_le_non_zero_divisors", ["is_localization"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["mod", "theorem", "norm_eq_zero_iff_of_basis", ["algebra"]], ["mod", "theorem", "norm_ne_zero_iff_of_basis", ["algebra"]]]}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "is_domain_map_C_quotient", ["ideal"]], ["del", "theorem", "is_integral_domain_map_C_quotient", ["ideal"]], ["del", "theorem", "integral_domain_fintype", ["mv_polynomial"]], ["add", "theorem", "is_domain_fin", ["mv_polynomial"]], ["add", "theorem", "is_domain_fin_zero", ["mv_polynomial"]], ["add", "theorem", "is_domain_fintype", ["mv_polynomial"]], ["del", "theorem", "is_integral_domain_fin", ["mv_polynomial"]], ["del", "theorem", "is_integral_domain_fin_zero", ["mv_polynomial"]], ["del", "theorem", "is_integral_domain_fintype", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["mod", "def", "cyclotomic'", ["polynomial"]], ["mod", "theorem", "roots_of_cyclotomic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["mod", "theorem", "to_maximal_ideal", ["is_prime"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "def", "primitive_roots", []]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integral.lean", "newPath": "src/ring_theory/valuation/integral.lean", "changes": []}]}, {"timestamp": 1634784910, "sha": "3c11bd77", "message": "chore(*): bump to lean 3.34.0 (#9824)\n### Backport coercions from Lean 4\nNow `has_coe_to_fun` and `has_coe_to_sort` take the output type as an `out_param` argument. This change comes with some changes in the elaboration order, so some proofs/definitions need more type annotations.\n### Smarter `by_contra`\nNow `by_contra h` does better job if the goal is a negation.\n### `open` and current namespace\nIn\n```lean\nnamespace A\nopen B _root_.C\nend A\n```\nLean will try to open `A.B`; if this fails, it will open `B`. It will also open `C`.\n`setup_tactic_parser_cmd` command was updated to open appropriate `_root_.*` namespaces.", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_fn_inj", ["alg_hom"]]]}, {"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/FinVect.lean", "newPath": "src/algebra/category/FinVect.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": [["add", "theorem", "associativity", ["Module", "free"]], ["add", "theorem", "left_unitality", ["Module", "free"]], ["add", "theorem", "right_unitality", ["Module", "free"]], ["add", "def", "ε", ["Module", "free"]], ["add", "def", "μ", ["Module", "free"]], ["add", "theorem", "μ_natural", ["Module", "free"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/tensor_product.lean", "newPath": "src/algebra/lie/tensor_product.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/non_unital_alg_hom.lean", "newPath": "src/algebra/non_unital_alg_hom.lean", "changes": []}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/algebraic_topology/topological_simplex.lean", "newPath": "src/algebraic_topology/topological_simplex.lean", "changes": []}, {"oldPath": "src/analysis/box_integral/partition/additive.lean", "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["mod", "theorem", "support_eq", ["times_cont_diff_bump"]], ["mod", "theorem", "support_eq", ["times_cont_diff_bump_of_inner"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": [["add", "theorem", "coe_comp'", ["SemiNormedGroup₁"]]]}, {"oldPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": [["mod", "theorem", "coe_inj", ["normed_group_hom"]], ["mod", "theorem", "coe_inj_iff", ["normed_group_hom"]]]}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["mod", "theorem", "coe_one", ["affine_isometry"]]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["enorm"]], ["mod", "theorem", "coe_inj", ["enorm"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["mod", "theorem", "coe_id", ["linear_isometry"]], ["mod", "theorem", "coe_one", ["linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": [["mod", "def", "hom_to_fun", ["category_theory", "abelian", "pseudoelement"]], ["mod", "def", "object_to_sort", ["category_theory", "abelian", "pseudoelement"]]]}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/category/Quiv.lean", "newPath": "src/category_theory/category/Quiv.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["mod", "def", "has_coe_to_fun", ["category_theory", "concrete_category"]]]}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": [["mod", "theorem", "coe_mk", ["category_theory", "bundled"]]]}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/linear/yoneda.lean", "newPath": "src/category_theory/linear/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/monad/products.lean", "newPath": "src/category_theory/monad/products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/basic.lean", "newPath": "src/combinatorics/derangements/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/hales_jewett.lean", "newPath": "src/combinatorics/hales_jewett.lean", "changes": []}, {"oldPath": "src/combinatorics/quiver.lean", "newPath": "src/combinatorics/quiver.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card_embedding.lean", "newPath": "src/data/fintype/card_embedding.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set_like/basic.lean", "newPath": "src/data/set_like/basic.lean", "changes": [["mod", "theorem", "coe_sort_coe", ["set_like"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/dynamics/flow.lean", "newPath": "src/dynamics/flow.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["mod", "theorem", "coe_fn_inj", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["mod", "theorem", "coe_inj", ["alternating_map"]], ["add", "theorem", "coe_injective", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/general_linear_group.lean", "newPath": "src/linear_algebra/general_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear/basic.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["mod", "theorem", "coe_inj", ["multilinear_map"]], ["add", "theorem", "coe_injective", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/quadratic_form/basic.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "coe_fn_coe_base'", []], ["add", "theorem", "coe_fn_coe_trans'", []]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "coe_injective", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/order/category/LinearOrder.lean", "newPath": "src/order/category/LinearOrder.lean", "changes": []}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/category/PartialOrder.lean", "newPath": "src/order/category/PartialOrder.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "map_at_bot", ["order_iso"]], ["mod", "theorem", "map_at_top", ["order_iso"]]]}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": [["add", "theorem", "mv_polynomial_option_equiv_polynomial_adjoin_C", ["algebraic_independent"]], ["add", "theorem", "mv_polynomial_option_equiv_polynomial_adjoin_X_none", ["algebraic_independent"]], ["add", "theorem", "mv_polynomial_option_equiv_polynomial_adjoin_X_some", ["algebraic_independent"]], ["add", "theorem", "mv_polynomial_option_equiv_polynomial_adjoin_apply", ["algebraic_independent"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/flat.lean", "newPath": "src/ring_theory/flat.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_invo.lean", "newPath": "src/ring_theory/ring_invo.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["mod", "theorem", "lt_mk_of_le", ["pgame"]]]}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["mod", "theorem", "mem_powerset", ["Set"]]]}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/converter/interactive.lean", "newPath": "src/tactic/converter/interactive.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/elementwise.lean", "newPath": "src/tactic/elementwise.lean", "changes": []}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/explode_widget.lean", "newPath": "src/tactic/explode_widget.lean", "changes": []}, {"oldPath": "src/tactic/field_simp.lean", "newPath": "src/tactic/field_simp.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/generalize_proofs.lean", "newPath": "src/tactic/generalize_proofs.lean", "changes": []}, {"oldPath": "src/tactic/generalizes.lean", "newPath": "src/tactic/generalizes.lean", "changes": []}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/norm_fin.lean", "newPath": "src/tactic/norm_fin.lean", "changes": []}, {"oldPath": "src/tactic/norm_swap.lean", "newPath": "src/tactic/norm_swap.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/simp_result.lean", "newPath": "src/tactic/simp_result.lean", "changes": []}, {"oldPath": "src/tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/tactic/slice.lean", "newPath": "src/tactic/slice.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/tactic/trunc_cases.lean", "newPath": "src/tactic/trunc_cases.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/weak_dual_topology.lean", "newPath": "src/topology/algebra/weak_dual_topology.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus/default.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": []}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": []}, {"oldPath": "src/topology/fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}, {"oldPath": "test/delta_instance.lean", "newPath": "test/delta_instance.lean", "changes": [["mod", "def", "X", []]]}, {"oldPath": "test/lint_coe_to_fun.lean", "newPath": "test/lint_coe_to_fun.lean", "changes": []}, {"oldPath": "test/lint_simp_nf.lean", "newPath": "test/lint_simp_nf.lean", "changes": []}, {"oldPath": "test/norm_cast_coe_fn.lean", "newPath": "test/norm_cast_coe_fn.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}]}, {"timestamp": 1634759002, "sha": "8366f932", "message": "feat(ring_theory/integral_domain): finite domains are division rings (#9823)\nTODO: Prove Wedderburn's little theorem\nwhich shows a finite domain is in fact commutative, hence a field.", "changes": [{"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["add", "def", "division_ring_of_domain", []], ["add", "theorem", "mul_left_bijective₀", []], ["add", "theorem", "mul_right_bijective₀", []]]}]}, {"timestamp": 1634753013, "sha": "4ebeb055", "message": "chore(group_theory/submonoid/center): add decidable_mem_center (#9825)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1634753011, "sha": "3d00081c", "message": "feat(group_theory/index): Index of top and bottom subgroups (#9819)\nThis PR computes the index of the top and bottom subgroups.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_bot", ["subgroup"]], ["add", "theorem", "index_bot_eq_card", ["subgroup"]], ["add", "theorem", "index_top", ["subgroup"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "one_to_nat", ["cardinal"]], ["add", "theorem", "to_nat_eq_one", ["cardinal"]], ["add", "theorem", "to_nat_eq_one_iff_unique", ["cardinal"]], ["mod", "theorem", "zero_to_nat", ["cardinal"]]]}]}, {"timestamp": 1634744346, "sha": "68a674ef", "message": "refactor(algebra/order/sub): rename sub -> tsub (#9793)\n* Renames lemmas in the file `algebra/order/sub` to use `tsub` instead of `sub` in the name\n* Remove primes from lemma names where possible\n* [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mul_lt_mul'''')\n* Remove `sub_mul_ge`, `mul_sub_ge` and `lt_sub_iff_lt_sub`. They were special cases of `le_sub_mul`, `le_mul_sub` and `lt_sub_comm`, respectively.", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": []}, {"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "mul_sub_ge", []], ["del", "theorem", "sub_mul_ge", []]]}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["del", "theorem", "le_map_sub", ["add_hom"]], ["add", "theorem", "le_map_tsub", ["add_hom"]], ["del", "theorem", "add_le_add_add_sub", []], ["add", "theorem", "add_le_add_add_tsub", []], ["del", "theorem", "add_le_of_le_sub_left_of_le", []], ["del", "theorem", "add_le_of_le_sub_right_of_le", []], ["add", "theorem", "add_le_of_le_tsub_left_of_le", []], ["add", "theorem", "add_le_of_le_tsub_right_of_le", []], ["del", "theorem", "le_map_sub", ["add_monoid_hom"]], ["add", "theorem", "le_map_tsub", ["add_monoid_hom"]], ["del", "theorem", "add_sub_add_eq_sub_left'", []], ["del", "theorem", "add_sub_add_right_eq_sub'", []], ["del", "theorem", "add_sub_assoc_of_le", []], ["del", "theorem", "add_sub_cancel_iff_le", []], ["del", "theorem", "add_sub_cancel_left", []], ["del", "theorem", "add_sub_cancel_of_le", []], ["del", "theorem", "add_sub_cancel_right", []], ["del", "theorem", "add_sub_eq_max", []], ["del", "theorem", "add_sub_le_assoc", []], ["del", "theorem", "add_sub_le_left", []], ["del", "theorem", "add_sub_le_right", []], ["del", "theorem", "add_sub_sub_cancel'", []], ["add", "theorem", "add_tsub_add_eq_tsub_left", []], ["add", "theorem", "add_tsub_add_right_eq_tsub", []], ["add", "theorem", "add_tsub_assoc_of_le", []], ["add", "theorem", "add_tsub_cancel_iff_le", []], ["add", "theorem", "add_tsub_cancel_left", []], ["add", "theorem", "add_tsub_cancel_of_le", []], ["add", "theorem", "add_tsub_cancel_right", []], ["add", "theorem", "add_tsub_eq_max", []], ["add", "theorem", "add_tsub_le_assoc", []], ["add", "theorem", "add_tsub_le_left", []], ["add", "theorem", "add_tsub_le_right", []], ["add", "theorem", "add_tsub_tsub_cancel", []], ["del", "theorem", "eq_sub_iff_add_eq_of_le", []], ["del", "theorem", "eq_sub_of_add_eq''", []], ["add", "theorem", "eq_tsub_iff_add_eq_of_le", []], ["add", "theorem", "eq_tsub_of_add_eq", []], ["del", "theorem", "le_add_sub'", []], ["del", "theorem", "le_add_sub", []], ["del", "theorem", "le_add_sub_swap", []], ["add", "theorem", "le_add_tsub'", []], ["add", "theorem", "le_add_tsub", []], ["add", "theorem", "le_add_tsub_swap", []], ["del", "theorem", "le_mul_sub", []], ["add", "theorem", "le_mul_tsub", []], ["del", "theorem", "le_sub_add", []], ["del", "theorem", "le_sub_add_add", []], ["del", "theorem", "le_sub_iff_le_sub", []], ["del", "theorem", "le_sub_iff_left", []], ["del", "theorem", "le_sub_iff_right", []], ["del", "theorem", "le_sub_mul", []], ["del", "theorem", "le_sub_of_add_le_left'", []], ["del", "theorem", "le_sub_of_add_le_right'", []], ["add", "theorem", "le_tsub_add", []], ["add", "theorem", "le_tsub_add_add", []], ["add", "theorem", "le_tsub_iff_le_tsub", []], ["add", "theorem", "le_tsub_iff_left", []], ["add", "theorem", "le_tsub_iff_right", []], ["add", "theorem", "le_tsub_mul", []], ["add", "theorem", "le_tsub_of_add_le_left", []], ["add", "theorem", "le_tsub_of_add_le_right", []], ["del", "theorem", "lt_add_of_sub_lt_left'", []], ["del", "theorem", "lt_add_of_sub_lt_right'", []], ["add", "theorem", "lt_add_of_tsub_lt_left", []], ["add", "theorem", "lt_add_of_tsub_lt_right", []], ["del", "theorem", "lt_of_sub_lt_sub_left", []], ["del", "theorem", "lt_of_sub_lt_sub_left_of_le", []], ["del", "theorem", "lt_of_sub_lt_sub_right", []], ["del", "theorem", "lt_of_sub_lt_sub_right_of_le", []], ["add", "theorem", "lt_of_tsub_lt_tsub_left", []], ["add", "theorem", "lt_of_tsub_lt_tsub_left_of_le", []], ["add", "theorem", "lt_of_tsub_lt_tsub_right", []], ["add", "theorem", "lt_of_tsub_lt_tsub_right_of_le", []], ["del", "theorem", "lt_sub_comm", []], ["del", "theorem", "lt_sub_iff_left", []], ["del", "theorem", "lt_sub_iff_left_of_le", []], ["del", "theorem", "lt_sub_iff_lt_sub", []], ["del", "theorem", "lt_sub_iff_right", []], ["del", "theorem", "lt_sub_iff_right_of_le", []], ["del", "theorem", "lt_sub_of_add_lt_left", []], ["del", "theorem", "lt_sub_of_add_lt_right", []], ["add", "theorem", "lt_tsub_comm", []], ["add", "theorem", "lt_tsub_iff_left", []], ["add", "theorem", "lt_tsub_iff_left_of_le", []], ["add", "theorem", "lt_tsub_iff_right", []], ["add", "theorem", "lt_tsub_iff_right_of_le", []], ["add", "theorem", "lt_tsub_of_add_lt_left", []], ["add", "theorem", "lt_tsub_of_add_lt_right", []], ["del", "theorem", "map_sub", ["order_iso"]], ["add", "theorem", "map_tsub", ["order_iso"]], ["del", "theorem", "sub_add_cancel_iff_le", []], ["del", "theorem", "sub_add_cancel_of_le", []], ["del", "theorem", "sub_add_eq_add_sub'", []], ["del", "theorem", "sub_add_eq_max", []], ["del", "theorem", "sub_add_eq_sub_sub'", []], ["del", "theorem", "sub_add_eq_sub_sub_swap'", []], ["del", "theorem", "sub_add_min", []], ["del", "theorem", "sub_add_sub_cancel''", []], ["del", "theorem", "sub_eq_iff_eq_add_of_le", []], ["del", "theorem", "sub_eq_of_eq_add''", []], ["del", "theorem", "sub_eq_of_eq_add_rev", []], ["del", "theorem", "sub_eq_sub_min", []], ["del", "theorem", "sub_eq_zero_iff_le", []], ["del", "theorem", "sub_inj_left", []], ["del", "theorem", "sub_inj_right", []], ["del", "theorem", "sub_le_iff_left", []], ["del", "theorem", "sub_le_iff_right", []], ["del", "theorem", "sub_le_iff_sub_le", []], ["del", "theorem", "sub_le_self'", []], ["del", "theorem", "sub_le_sub'", []], ["del", "theorem", "sub_le_sub_add_sub", []], ["del", "theorem", "sub_le_sub_iff_left'", []], ["del", "theorem", "sub_le_sub_iff_right'", []], ["del", "theorem", "sub_le_sub_left'", []], ["del", "theorem", "sub_le_sub_right'", []], ["del", "theorem", "sub_left_inj'", []], ["del", "theorem", "sub_lt_iff_left", []], ["del", "theorem", "sub_lt_iff_right", []], ["del", "theorem", "sub_lt_iff_sub_lt", []], ["del", "theorem", "sub_lt_self'", []], ["del", "theorem", "sub_lt_self_iff'", []], ["del", "theorem", "sub_lt_sub_iff_left_of_le", []], ["del", "theorem", "sub_lt_sub_iff_left_of_le_of_le", []], ["del", "theorem", "sub_lt_sub_iff_right'", []], ["del", "theorem", "sub_lt_sub_right_of_le", []], ["del", "theorem", "sub_min", []], ["del", "theorem", "sub_pos_iff_lt", []], ["del", "theorem", "sub_pos_iff_not_le", []], ["del", "theorem", "sub_pos_of_lt'", []], ["del", "theorem", "sub_right_comm'", []], ["del", "theorem", "sub_right_inj'", []], ["del", "theorem", "sub_self'", []], ["del", "theorem", "sub_self_add", []], ["del", "theorem", "sub_sub'", []], ["del", "theorem", "sub_sub_assoc", []], ["del", "theorem", "sub_sub_cancel_of_le", []], ["del", "theorem", "sub_sub_le", []], ["del", "theorem", "sub_sub_sub_cancel_right'", []], ["del", "theorem", "sub_sub_sub_le_sub", []], ["del", "theorem", "sub_zero'", []], ["add", "theorem", "tsub_add_cancel_iff_le", []], ["add", "theorem", "tsub_add_cancel_of_le", []], ["add", "theorem", "tsub_add_eq_add_tsub", []], ["add", "theorem", "tsub_add_eq_max", []], ["add", "theorem", "tsub_add_eq_tsub_tsub", []], ["add", "theorem", "tsub_add_eq_tsub_tsub_swap", []], ["add", "theorem", "tsub_add_min", []], ["add", "theorem", "tsub_add_tsub_cancel", []], ["add", "theorem", "tsub_eq_iff_eq_add_of_le", []], ["add", "theorem", "tsub_eq_of_eq_add", []], ["add", "theorem", "tsub_eq_of_eq_add_rev", []], ["add", "theorem", "tsub_eq_tsub_min", []], ["add", "theorem", "tsub_eq_zero_iff_le", []], ["add", "theorem", "tsub_inj_left", []], ["add", "theorem", "tsub_inj_right", []], ["add", "theorem", "tsub_le_iff_left", []], ["add", "theorem", "tsub_le_iff_right", []], ["add", "theorem", "tsub_le_iff_tsub_le", []], ["add", "theorem", "tsub_le_self", []], ["add", "theorem", "tsub_le_tsub", []], ["add", "theorem", "tsub_le_tsub_add_tsub", []], ["add", "theorem", "tsub_le_tsub_iff_left", []], ["add", "theorem", "tsub_le_tsub_iff_right", []], ["add", "theorem", "tsub_le_tsub_left", []], ["add", "theorem", "tsub_le_tsub_right", []], ["add", "theorem", "tsub_left_inj", []], ["add", "theorem", "tsub_lt_iff_left", []], ["add", "theorem", "tsub_lt_iff_right", []], ["add", "theorem", "tsub_lt_iff_tsub_lt", []], ["add", "theorem", "tsub_lt_self", []], ["add", "theorem", "tsub_lt_self_iff", []], ["add", "theorem", "tsub_lt_tsub_iff_left_of_le", []], ["add", "theorem", "tsub_lt_tsub_iff_left_of_le_of_le", []], ["add", "theorem", "tsub_lt_tsub_iff_right", []], ["add", "theorem", "tsub_lt_tsub_right_of_le", []], ["add", "theorem", "tsub_min", []], ["add", "theorem", "tsub_pos_iff_lt", []], ["add", "theorem", "tsub_pos_iff_not_le", []], ["add", "theorem", "tsub_pos_of_lt", []], ["add", "theorem", "tsub_right_comm", []], ["add", "theorem", "tsub_right_inj", []], ["add", "theorem", "tsub_self", []], ["add", "theorem", "tsub_self_add", []], ["add", "theorem", "tsub_tsub", []], ["add", "theorem", "tsub_tsub_assoc", []], ["add", "theorem", "tsub_tsub_cancel_of_le", []], ["add", "theorem", "tsub_tsub_le", []], ["add", "theorem", "tsub_tsub_tsub_cancel_right", []], ["add", "theorem", "tsub_tsub_tsub_le_tsub", []], ["add", "theorem", "tsub_zero", []], ["del", "theorem", "zero_sub'", []], ["add", "theorem", "zero_tsub", []]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/exponential.lean", "newPath": "src/combinatorics/derangements/exponential.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/finite.lean", "newPath": "src/combinatorics/derangements/finite.lean", "changes": []}, {"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/fin/basic.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/finsupp/antidiagonal.lean", "newPath": "src/data/finsupp/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "eq_union_left", ["multiset"]], ["mod", "theorem", "le_union_left", ["multiset"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/nat/succ_pred.lean", "newPath": "src/data/nat/succ_pred.lean", "changes": []}, {"oldPath": "src/data/nat/upto.lean", "newPath": "src/data/nat/upto.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "lt_sub_comm", ["ennreal"]], ["mod", "theorem", "lt_sub_iff_add_lt", ["ennreal"]]]}, {"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/set_theory/game/state.lean", "newPath": "src/set_theory/game/state.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "test/general_recursion.lean", "newPath": "test/general_recursion.lean", "changes": []}]}, {"timestamp": 1634736189, "sha": "5223e262", "message": "feat(field_theory/finite/galois_field): uniqueness of finite fields (#9817)\nEvery finite field is isomorphic to some Galois field. Closes #9599", "changes": [{"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "card'", ["finite_field"]]]}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": [["add", "def", "alg_equiv_galois_field", ["galois_field"]], ["add", "theorem", "is_splitting_field_of_card_eq", ["galois_field"]], ["add", "theorem", "splits_X_pow_card_sub_X", ["galois_field"]]]}]}, {"timestamp": 1634730403, "sha": "49ab444f", "message": "fix(algebra/module/submodule_lattice): correct bad lemma (#9809)\nThis lemma was accidentally stating that inf and inter are the same on sets, and wasn't about submodule at all.\nThe old statement was `↑p ⊓ ↑q = ↑p ∩ ↑q`, the new one is `↑(p ⊓ q) = ↑p ∩ ↑q`", "changes": [{"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["mod", "theorem", "inf_coe", ["submodule"]]]}]}, {"timestamp": 1634723603, "sha": "24901dde", "message": "feat(linear_algebra/free_module/rank): rank of free modules (#9810)\nThis file contains a basic API for the rank of free modules.\nWe will add the results for finite free modules in a future PR.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/free_module/rank.lean", "changes": [["add", "theorem", "rank_direct_sum", ["module", "free"]], ["add", "theorem", "rank_eq_card_choose_basis_index", ["module", "free"]], ["add", "theorem", "rank_finsupp'", ["module", "free"]], ["add", "theorem", "rank_finsupp", ["module", "free"]], ["add", "theorem", "rank_prod'", ["module", "free"]], ["add", "theorem", "rank_prod", ["module", "free"]], ["add", "theorem", "rank_tensor_product'", ["module", "free"]], ["add", "theorem", "rank_tensor_product", ["module", "free"]]]}]}, {"timestamp": 1634723602, "sha": "2f548407", "message": "refactor(*): replace comm_ring/integral_domain with ring/domain where possible (#9739)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["mod", "theorem", "mirror_mul_of_domain", ["polynomial"]], ["mod", "theorem", "mirror_smul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["mod", "theorem", "trailing_coeff_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["mod", "theorem", "order_mul", ["hahn_series"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "bot_prime", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "ker_is_prime", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1634717998, "sha": "a6d5ba81", "message": "chore(set_theory/cardinal): add `map`, `induction_on` etc (#9812)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "induction_on", ["cardinal"]], ["add", "theorem", "induction_on₂", ["cardinal"]], ["add", "theorem", "induction_on₃", ["cardinal"]], ["mod", "theorem", "lift_id'", ["cardinal"]], ["mod", "theorem", "lift_id", ["cardinal"]], ["mod", "theorem", "lift_umax", ["cardinal"]], ["mod", "theorem", "lift_zero", ["cardinal"]], ["add", "def", "map", ["cardinal"]], ["add", "theorem", "map_mk", ["cardinal"]], ["add", "def", "map₂", ["cardinal"]], ["add", "theorem", "mk_congr", ["cardinal"]], ["mod", "theorem", "succ_ne_zero", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1634703308, "sha": "9dafdf79", "message": "feat(group_theory/subgroup/basic): `subgroup_of_self` (#9818)\nA subgroup is the top subgroup of itself.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "subgroup_of_self", ["subgroup"]]]}]}, {"timestamp": 1634703307, "sha": "68987280", "message": "feat(analysis/complex/basic): a complex-valued function `has_sum` iff its real part and imaginary part `has_sum` (#9648)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "def", "equiv_real_prod_add_hom", ["complex"]], ["add", "def", "equiv_real_prod_add_hom_lm", ["complex"]], ["add", "def", "equiv_real_prodₗ", ["complex"]], ["add", "theorem", "has_sum_iff", ["complex"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "prod_mk", ["has_sum"]]]}]}, {"timestamp": 1634694358, "sha": "cd343474", "message": "chore(*): remove uses of `universe variable` (#9794)\nMost of these uses are relics of when the distinction between `universe` and `universe variable` was more significant. There is still a difference inside sections, but it's an edge case and I don't think any of these uses are consciously trying to handle the edge case.", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/control/applicative.lean", "newPath": "src/control/applicative.lean", "changes": []}, {"oldPath": "src/control/functor.lean", "newPath": "src/control/functor.lean", "changes": []}, {"oldPath": "src/control/traversable/lemmas.lean", "newPath": "src/control/traversable/lemmas.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_algebra.lean", "newPath": "src/linear_algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "nonempty_pi", ["classical"]], ["mod", "theorem", "exists", ["nonempty"]], ["mod", "theorem", "forall", ["nonempty"]], ["mod", "theorem", "map", ["nonempty"]], ["mod", "theorem", "nonempty_plift", []], ["mod", "theorem", "nonempty_pprod", []], ["mod", "theorem", "nonempty_psigma", []], ["mod", "theorem", "nonempty_psum", []], ["mod", "theorem", "nonempty_subtype", []]]}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/copy.lean", "newPath": "src/order/copy.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/flat.lean", "newPath": "src/ring_theory/flat.lean", "changes": []}, {"oldPath": "src/ring_theory/henselian.lean", "newPath": "src/ring_theory/henselian.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/weak_dual_topology.lean", "newPath": "src/topology/algebra/weak_dual_topology.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/projective.lean", "newPath": "src/topology/category/Profinite/projective.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}]}, {"timestamp": 1634687011, "sha": "2d17c5a2", "message": "feat(group_theory/index): Relative index (#9780)\nDefines relative index between subgroups, and proves that relative index is multiplicative in towers.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_comap", ["subgroup"]], ["del", "theorem", "index_eq_mul_of_le", ["subgroup"]], ["add", "theorem", "relindex_mul_index", ["subgroup"]], ["add", "theorem", "relindex_mul_relindex", ["subgroup"]], ["add", "theorem", "relindex_subgroup_of", ["subgroup"]]]}]}, {"timestamp": 1634677185, "sha": "72cb2e82", "message": "refactor(*): rename some declarations ending with '' (#9504)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "smul_def''", ["algebra"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": [["del", "def", "rec_on'", ["free_magma"]], ["add", "def", "rec_on_mul", ["free_magma"]], ["del", "def", "rec_on'", ["free_semigroup"]], ["add", "def", "rec_on_pure", ["free_semigroup"]]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["del", "theorem", "pow_lt_pow''", []], ["add", "theorem", "pow_lt_pow'", []]]}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["del", "theorem", "mul_support_inv''", ["function"]], ["add", "theorem", "mul_support_inv'", ["function"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["del", "theorem", "exact_iff''", ["category_theory", "abelian"]], ["add", "theorem", "exact_iff_image_eq_kernel", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/monoidal/natural_transformation.lean", "newPath": "src/category_theory/monoidal/natural_transformation.lean", "changes": [["del", "theorem", "comp_to_nat_trans''", ["category_theory", "monoidal_nat_trans"]], ["del", "theorem", "comp_to_nat_trans'", ["category_theory", "monoidal_nat_trans"]], ["add", "theorem", "comp_to_nat_trans", ["category_theory", "monoidal_nat_trans"]], ["add", "theorem", "comp_to_nat_trans_lax", ["category_theory", "monoidal_nat_trans"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "eq_of_irreducible", ["minpoly"]], ["add", "theorem", "eq_of_irreducible_of_monic", ["minpoly"]], ["del", "theorem", "unique''", ["minpoly"]], ["del", "theorem", "unique'", ["minpoly"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1634662198, "sha": "65eef746", "message": "fix(data/int/basic): ensure the additive group structure on integers is computable (#9803)\nThis prevents the following failure:\n```lean\nimport analysis.normed_space.basic\ninstance whoops : add_comm_group ℤ := by apply_instance\n-- definition 'whoops' is noncomputable, it depends on 'int.normed_comm_ring'\n```", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1634656736, "sha": "e61584d5", "message": "fix(topology/sheaves/*): Fix docstrings (#9807)\nAs noted by @alreadydone in #9607, I forgot propagate naming changes to docstrings. This PR fixes that.", "changes": [{"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}]}, {"timestamp": 1634647624, "sha": "34aa23af", "message": "feat(ring_theory/dedekind_domain): connect (/) and (⁻¹) on fractional ideals (#9808)\nTurns out we never actually proved the `div_eq_mul_inv` lemma on fractional ideals, which motivated the entire definition of `div_inv_monoid`. So here it is, along with some useful supporting lemmas.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "theorem", "mul_left_le_iff", ["fractional_ideal"]], ["add", "theorem", "mul_left_strict_mono", ["fractional_ideal"]], ["add", "theorem", "mul_right_le_iff", ["fractional_ideal"]], ["add", "theorem", "mul_right_strict_mono", ["fractional_ideal"]]]}]}, {"timestamp": 1634644781, "sha": "065a7081", "message": "refactor(analysis/inner_product_space/projection): speedup proof (#9804)\nSpeed up slow proof that caused a timeout on another branch.", "changes": [{"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "def", "reflection_linear_equiv", []]]}]}, {"timestamp": 1634635875, "sha": "b961b684", "message": "feat(topology/connected): product of connected spaces is a connected space (#9789)\n* prove more in the RHS of `filter.mem_infi'`;\n* prove that the product of (pre)connected sets is a (pre)connected set;\n* prove a similar statement about indexed product `set.pi set.univ _`;\n* add instances for `prod.preconnected_space`, `prod.connected_space`, `pi.preconnected_space`, and `pi.connected_space`.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "prod", ["is_connected"]], ["add", "theorem", "is_connected_univ_pi", []], ["add", "theorem", "prod", ["is_preconnected"]], ["add", "theorem", "is_preconnected_Union", []], ["add", "theorem", "is_preconnected_singleton", []], ["add", "theorem", "is_preconnected_univ_pi", []], ["add", "theorem", "is_preconnected", ["set", "subsingleton"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "exists_finset_piecewise_mem_of_mem_nhds", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}]}, {"timestamp": 1634635873, "sha": "ff3e868c", "message": "refactor(algebra/domain): make domain and integral_domain mixins (#9719)\nThis PR turns `domain` and `integral_domain` into mixins. There's quite a lot of work here, as the unused argument linter then forces us to do some generalizations! (i.e. getting rid of unnecessary `integral_domain` arguments).\nThis PR does the minimum possible generalization: #9739 does some more.\nIn a subsequent PR we can unify `domain` and `integral_domain`, which now only differ in their typeclass requirements.\nThis also remove use of `old_structure_cmd` in `euclidean_domain`.\n- [x] depends on: #9725 [An RFC]\n- [x] depends on: #9736\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)", "changes": [{"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": [["mod", "theorem", "formula", []]]}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "iff_algebra_map_injective", ["no_zero_smul_divisors"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "eq_or_eq_neg_of_sq_eq_sq", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "to_is_integral_domain", ["integral_domain"]], ["add", "theorem", "to_integral_domain", ["is_integral_domain"]], ["del", "def", "to_integral_domain", ["is_integral_domain"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": [["mod", "theorem", "nat_degree_cancel_leads_lt_of_nat_degree_le_nat_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "root_multiplicity_eq_zero", ["polynomial"]], ["add", "theorem", "root_multiplicity_pos", ["polynomial"]], ["add", "theorem", "root_multiplicity_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["mod", "theorem", "irreducible_of_mirror", ["polynomial"]], ["mod", "theorem", "mirror_mul_of_domain", ["polynomial"]], ["mod", "theorem", "mirror_smul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["mod", "theorem", "reverse_mul_of_domain", ["polynomial"]], ["mod", "theorem", "trailing_coeff_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "eq_of_infinite_eval_eq", ["polynomial"]], ["mod", "theorem", "leading_coeff_div_by_monic_of_monic", ["polynomial"]], ["mod", "def", "nth_roots_finset", ["polynomial"]], ["del", "theorem", "root_multiplicity_eq_zero", ["polynomial"]], ["del", "theorem", "root_multiplicity_pos", ["polynomial"]], ["del", "theorem", "root_multiplicity_zero", ["polynomial"]], ["mod", "def", "root_set", ["polynomial"]], ["mod", "theorem", "root_set_C", ["polynomial"]], ["mod", "theorem", "root_set_def", ["polynomial"]], ["mod", "theorem", "root_set_finite", ["polynomial"]], ["mod", "theorem", "root_set_zero", ["polynomial"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "sq_add_sq", ["char_p"]]]}, {"oldPath": "src/field_theory/finite/galois_field.lean", "newPath": "src/field_theory/finite/galois_field.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["mod", "theorem", "algebra_map_surjective_of_is_algebraic", ["is_alg_closed"]], ["mod", "theorem", "algebra_map_surjective_of_is_integral'", ["is_alg_closed"]], ["mod", "theorem", "algebra_map_surjective_of_is_integral", ["is_alg_closed"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "gcd_domain_eq_field_fractions", ["minpoly"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["mod", "theorem", "eq_iff", ["perfect_closure"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "def", "equiv_of_pi_lequiv_pi", []], ["mod", "theorem", "is_unit_det'", ["linear_equiv"]], ["mod", "theorem", "det_comm'", ["matrix"]], ["mod", "theorem", "det_conj", ["matrix"]], ["mod", "def", "index_equiv_of_inv", ["matrix"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module/pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": [["mod", "theorem", "exists_smith_normal_form", ["ideal"]], ["mod", "theorem", "rank_eq", ["ideal"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": [["mod", "theorem", "exists_mul_vec_eq_zero_iff'", ["matrix"]], ["mod", "theorem", "exists_mul_vec_eq_zero_iff", ["matrix"]], ["mod", "theorem", "exists_vec_mul_eq_zero_iff", ["matrix"]], ["mod", "theorem", "nondegenerate_iff_det_ne_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/class_group.lean", "newPath": "src/ring_theory/class_group.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["mod", "theorem", "mul_generator_self_inv", []], ["mod", "theorem", "integral_closure", ["ring", "dimension_le_one"]], ["mod", "theorem", "is_integral_closure", ["ring", "dimension_le_one"]]]}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["mod", "def", "has_unit_mul_pow_irreducible_factorization", ["discrete_valuation_ring"]], ["mod", "theorem", "iff_pid_with_one_nonzero_prime", ["discrete_valuation_ring"]], ["mod", "theorem", "of_has_unit_mul_pow_irreducible_factorization", ["discrete_valuation_ring"]], ["mod", "theorem", "of_ufd_of_unique_irreducible", ["discrete_valuation_ring"]]]}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["mod", "theorem", "is_pwo_Union_support_powers", ["hahn_series"]], ["mod", "theorem", "order_mul", ["hahn_series"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "bot_prime", ["ideal"]], ["mod", "theorem", "factors_decreasing", ["ideal"]], ["mod", "theorem", "span_singleton_eq_span_singleton", ["ideal"]], ["mod", "theorem", "span_singleton_lt_span_singleton", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "mul_eq_bot", ["ideal"]], ["mod", "theorem", "prod_eq_bot", ["ideal"]], ["mod", "theorem", "radical_bot_of_integral_domain", ["ideal"]], ["mod", "theorem", "ker_is_prime", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["mod", "theorem", "comap_lt_comap_of_integral_mem_sdiff", ["ideal"]], ["mod", "theorem", "comap_ne_bot_of_algebraic_mem", ["ideal"]], ["mod", "theorem", "comap_ne_bot_of_integral_mem", ["ideal"]], ["mod", "theorem", "comap_ne_bot_of_root_mem", ["ideal"]], ["mod", "theorem", "eq_bot_of_comap_eq_bot", ["ideal"]], ["mod", "theorem", "exists_coeff_ne_zero_mem_comap_of_root_mem", ["ideal"]], ["mod", "theorem", "exists_ideal_over_maximal_of_is_integral", ["ideal"]], ["mod", "theorem", "is_maximal_comap_of_is_integral_of_is_maximal'", ["ideal"]], ["mod", "theorem", "is_maximal_of_is_integral_of_is_maximal_comap'", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["mod", "theorem", "is_field_of_is_integral_of_is_field", []]]}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/integrally_closed.lean", "newPath": "src/ring_theory/integrally_closed.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["mod", "theorem", "comp_C_integral_of_surjective_of_jacobson", ["ideal", "mv_polynomial"]], ["mod", "theorem", "quotient_mk_comp_C_is_integral_of_jacobson", ["ideal", "mv_polynomial"]], ["mod", "theorem", "is_maximal_comap_C_of_is_jacobson", ["ideal", "polynomial"]], ["mod", "theorem", "is_maximal_comap_C_of_is_maximal", ["ideal", "polynomial"]], ["mod", "theorem", "jacobson_bot_of_integral_localization", ["ideal", "polynomial"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "to_integral_domain", ["is_fraction_ring"]], ["del", "def", "to_integral_domain", ["is_fraction_ring"]], ["add", "theorem", "integral_domain_localization", ["is_localization"]], ["del", "def", "integral_domain_localization", ["is_localization"]], ["add", "theorem", "integral_domain_of_le_non_zero_divisors", ["is_localization"]], ["del", "def", "integral_domain_of_le_non_zero_divisors", ["is_localization"]], ["mod", "theorem", "localization_map_bijective_of_field", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["mod", "theorem", "norm_eq_zero_iff_of_basis", ["algebra"]], ["mod", "theorem", "norm_ne_zero_iff_of_basis", ["algebra"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "integral_domain_fintype", ["mv_polynomial"]], ["del", "def", "integral_domain_fintype", ["mv_polynomial"]], ["mod", "theorem", "exists_irreducible_of_degree_pos", ["polynomial"]], ["mod", "theorem", "exists_irreducible_of_nat_degree_ne_zero", ["polynomial"]], ["mod", "theorem", "exists_irreducible_of_nat_degree_pos", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["mod", "theorem", "monic", ["polynomial", "cyclotomic'"]], ["mod", "def", "cyclotomic'", ["polynomial"]], ["mod", "theorem", "cyclotomic'_ne_zero", ["polynomial"]], ["mod", "theorem", "cyclotomic'_one", ["polynomial"]], ["mod", "theorem", "cyclotomic'_two", ["polynomial"]], ["mod", "theorem", "cyclotomic'_zero", ["polynomial"]], ["mod", "theorem", "roots_of_cyclotomic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["mod", "theorem", "is_principal_ideal_ring", ["is_field"]], ["mod", "theorem", "to_maximal_ideal", ["is_prime"]], ["mod", "theorem", "ne_zero_of_mem_factors", ["principal_ideal_ring"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "def", "primitive_roots", []]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integral.lean", "newPath": "src/ring_theory/valuation/integral.lean", "changes": []}]}, {"timestamp": 1634629578, "sha": "a7bc7174", "message": "feat(algebra/big_operators/order): Upper bound on the cardinality of `finset.bUnion` (#9797)\nAlso fix notation in all the additivized statements docstrings.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "card_bUnion_le_card_mul", ["finset"]]]}]}, {"timestamp": 1634629577, "sha": "4df649cb", "message": "feat(data/nat/modeq): Upper bound for `chinese_remainder` (#9783)\nProves that `chinese_remainder' < lcm n m` and `chinese_remainder < n * m`, as claimed by the doc-strings.", "changes": [{"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "chinese_remainder'_lt_lcm", ["nat"]], ["add", "theorem", "chinese_remainder_lt_mul", ["nat"]]]}]}, {"timestamp": 1634627107, "sha": "1f8c96ba", "message": "feat(data/nat/succ_pred): `ℕ` is succ- and pred- archimedean (#9730)\nThis provides the instances `succ_order ℕ`, `pred_order ℕ`, `is_succ_archimedean ℕ`, `is_pred_archimedean ℕ`.", "changes": [{"oldPath": null, "newPath": "src/data/nat/succ_pred.lean", "changes": [["add", "theorem", "pred_iterate", ["nat"]], ["add", "theorem", "succ_iterate", ["nat"]]]}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": [["mod", "theorem", "succ_lt_succ_iff", ["succ_order"]]]}]}, {"timestamp": 1634618461, "sha": "1ec385df", "message": "chore(scripts): update nolints.txt (#9799)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1634610240, "sha": "04094c4b", "message": "feat(analysis/box_integral): Divergence thm for a Henstock-style integral (#9496)\n* Define integrals of Riemann, McShane, and Henstock (plus a few\n variations).\n* Prove basic properties.\n* Prove a version of the divergence theorem for one of these integrals.\n* Prove that a Bochner integrable function is McShane integrable.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "add_div_two_lt_right", []], ["add", "theorem", "exists_pos_mul_lt", []], ["add", "theorem", "left_lt_add_div_two", []]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/basic.lean", "changes": [["add", "theorem", "add", ["box_integral", "has_integral"]], ["add", "theorem", "integrable", ["box_integral", "has_integral"]], ["add", "theorem", "integral_eq", ["box_integral", "has_integral"]], ["add", "theorem", "mono", ["box_integral", "has_integral"]], ["add", "theorem", "neg", ["box_integral", "has_integral"]], ["add", "theorem", "smul", ["box_integral", "has_integral"]], ["add", "theorem", "sub", ["box_integral", "has_integral"]], ["add", "theorem", "tendsto", ["box_integral", "has_integral"]], ["add", "theorem", "unique", ["box_integral", "has_integral"]], ["add", "def", "has_integral", ["box_integral"]], ["add", "theorem", "has_integral_McShane_of_forall_is_o", ["box_integral"]], ["add", "theorem", "has_integral_const", ["box_integral"]], ["add", "theorem", "has_integral_iff", ["box_integral"]], ["add", "theorem", "has_integral_of_bRiemann_eq_ff_of_forall_is_o", ["box_integral"]], ["add", "theorem", "has_integral_of_le_Henstock_of_forall_is_o", ["box_integral"]], ["add", "theorem", "has_integral_of_mul", ["box_integral"]], ["add", "theorem", "has_integral_sum", ["box_integral"]], ["add", "theorem", "has_integral_zero", ["box_integral"]], ["add", "theorem", "add", ["box_integral", "integrable"]], ["add", "theorem", "cauchy_map_integral_sum_to_filter_Union", ["box_integral", "integrable"]], ["add", "def", "convergence_r", ["box_integral", "integrable"]], ["add", "theorem", "convergence_r_cond", ["box_integral", "integrable"]], ["add", "theorem", "dist_integral_sum_integral_le_of_mem_base_set", ["box_integral", "integrable"]], ["add", "theorem", "dist_integral_sum_le_of_mem_base_set", ["box_integral", "integrable"]], ["add", "theorem", "dist_integral_sum_sum_integral_le_of_mem_base_set", ["box_integral", "integrable"]], ["add", "theorem", "dist_integral_sum_sum_integral_le_of_mem_base_set_of_Union_eq", ["box_integral", "integrable"]], ["add", "theorem", "mono", ["box_integral", "integrable"]], ["add", "theorem", "neg", ["box_integral", "integrable"]], ["add", "theorem", "of_neg", ["box_integral", "integrable"]], ["add", "theorem", "of_smul", ["box_integral", "integrable"]], ["add", "theorem", "smul", ["box_integral", "integrable"]], ["add", "theorem", "sub", ["box_integral", "integrable"]], ["add", "theorem", "sum_integral_congr", ["box_integral", "integrable"]], ["add", "theorem", "tendsto_integral_sum_sum_integral", ["box_integral", "integrable"]], ["add", "theorem", "tendsto_integral_sum_to_filter_Union_single", ["box_integral", "integrable"]], ["add", "theorem", "tendsto_integral_sum_to_filter_prod_self_inf_Union_eq_uniformity", ["box_integral", "integrable"]], ["add", "def", "to_box_additive", ["box_integral", "integrable"]], ["add", "theorem", "to_subbox", ["box_integral", "integrable"]], ["add", "theorem", "to_subbox_aux", ["box_integral", "integrable"]], ["add", "def", "integrable", ["box_integral"]], ["add", "theorem", "integrable_const", ["box_integral"]], ["add", "theorem", "integrable_iff_cauchy", ["box_integral"]], ["add", "theorem", "integrable_iff_cauchy_basis", ["box_integral"]], ["add", "theorem", "integrable_neg", ["box_integral"]], ["add", "theorem", "integrable_of_continuous_on", ["box_integral"]], ["add", "theorem", "integrable_zero", ["box_integral"]], ["add", "def", "integral", ["box_integral"]], ["add", "theorem", "integral_add", ["box_integral"]], ["add", "theorem", "integral_const", ["box_integral"]], ["add", "theorem", "integral_neg", ["box_integral"]], ["add", "theorem", "integral_nonneg", ["box_integral"]], ["add", "theorem", "integral_smul", ["box_integral"]], ["add", "theorem", "integral_sub", ["box_integral"]], ["add", "def", "integral_sum", ["box_integral"]], ["add", "theorem", "integral_sum_add", ["box_integral"]], ["add", "theorem", "integral_sum_bUnion_partition", ["box_integral"]], ["add", "theorem", "integral_sum_bUnion_tagged", ["box_integral"]], ["add", "theorem", "integral_sum_disj_union", ["box_integral"]], ["add", "theorem", "integral_sum_fiberwise", ["box_integral"]], ["add", "theorem", "integral_sum_inf_partition", ["box_integral"]], ["add", "theorem", "integral_sum_neg", ["box_integral"]], ["add", "theorem", "integral_sum_smul", ["box_integral"]], ["add", "theorem", "integral_sum_sub_partitions", ["box_integral"]], ["add", "theorem", "integral_zero", ["box_integral"]], ["add", "theorem", "norm_integral_le_of_le_const", ["box_integral"]], ["add", "theorem", "norm_integral_le_of_norm_le", ["box_integral"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/box/basic.lean", "changes": [["add", "theorem", "Icc_def", ["box_integral", "box"]], ["add", "theorem", "Icc_eq_pi", ["box_integral", "box"]], ["add", "theorem", "antitone_lower", ["box_integral", "box"]], ["add", "theorem", "bUnion_coe_eq_coe", ["box_integral", "box"]], ["add", "theorem", "coe_bot", ["box_integral", "box"]], ["add", "theorem", "coe_coe", ["box_integral", "box"]], ["add", "theorem", "coe_eq_pi", ["box_integral", "box"]], ["add", "theorem", "coe_inf", ["box_integral", "box"]], ["add", "theorem", "coe_inj", ["box_integral", "box"]], ["add", "theorem", "coe_mk'", ["box_integral", "box"]], ["add", "theorem", "coe_ne_empty", ["box_integral", "box"]], ["add", "theorem", "coe_subset_Icc", ["box_integral", "box"]], ["add", "theorem", "coe_subset_coe", ["box_integral", "box"]], ["add", "theorem", "continuous_on_face_Icc", ["box_integral", "box"]], ["add", "theorem", "diam_Icc_le_of_distortion_le", ["box_integral", "box"]], ["add", "theorem", "disjoint_coe", ["box_integral", "box"]], ["add", "theorem", "disjoint_with_bot_coe", ["box_integral", "box"]], ["add", "theorem", "dist_le_distortion_mul", ["box_integral", "box"]], ["add", "def", "distortion", ["box_integral", "box"]], ["add", "theorem", "distortion_eq_of_sub_eq_div", ["box_integral", "box"]], ["add", "theorem", "empty_ne_coe", ["box_integral", "box"]], ["add", "theorem", "exists_mem", ["box_integral", "box"]], ["add", "theorem", "ext", ["box_integral", "box"]], ["add", "def", "face", ["box_integral", "box"]], ["add", "theorem", "face_mk", ["box_integral", "box"]], ["add", "theorem", "face_mono", ["box_integral", "box"]], ["add", "theorem", "injective_coe", ["box_integral", "box"]], ["add", "theorem", "is_some_iff", ["box_integral", "box"]], ["add", "theorem", "le_def", ["box_integral", "box"]], ["add", "theorem", "le_iff_Icc", ["box_integral", "box"]], ["add", "theorem", "le_iff_bounds", ["box_integral", "box"]], ["add", "theorem", "le_tfae", ["box_integral", "box"]], ["add", "theorem", "lower_le_upper", ["box_integral", "box"]], ["add", "theorem", "lower_mem_Icc", ["box_integral", "box"]], ["add", "theorem", "maps_to_insert_nth_face", ["box_integral", "box"]], ["add", "theorem", "maps_to_insert_nth_face_Icc", ["box_integral", "box"]], ["add", "theorem", "mem_coe", ["box_integral", "box"]], ["add", "theorem", "mem_def", ["box_integral", "box"]], ["add", "theorem", "mem_mk", ["box_integral", "box"]], ["add", "theorem", "mem_univ_Ioc", ["box_integral", "box"]], ["add", "def", "mk'", ["box_integral", "box"]], ["add", "theorem", "mk'_eq_bot", ["box_integral", "box"]], ["add", "theorem", "mk'_eq_coe", ["box_integral", "box"]], ["add", "theorem", "monotone_upper", ["box_integral", "box"]], ["add", "theorem", "ne_of_disjoint_coe", ["box_integral", "box"]], ["add", "theorem", "nndist_le_distortion_mul", ["box_integral", "box"]], ["add", "theorem", "nonempty_coe", ["box_integral", "box"]], ["add", "theorem", "not_disjoint_coe_iff_nonempty_inter", ["box_integral", "box"]], ["add", "theorem", "upper_mem", ["box_integral", "box"]], ["add", "theorem", "upper_mem_Icc", ["box_integral", "box"]], ["add", "theorem", "with_bot_coe_inj", ["box_integral", "box"]], ["add", "theorem", "with_bot_coe_subset_iff", ["box_integral", "box"]], ["add", "structure", "box", ["box_integral"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/box/subbox_induction.lean", "changes": [["add", "theorem", "Union_coe_split_center_box", ["box_integral", "box"]], ["add", "theorem", "disjoint_split_center_box", ["box_integral", "box"]], ["add", "theorem", "exists_mem_split_center_box", ["box_integral", "box"]], ["add", "theorem", "injective_split_center_box", ["box_integral", "box"]], ["add", "theorem", "mem_split_center_box", ["box_integral", "box"]], ["add", "def", "split_center_box", ["box_integral", "box"]], ["add", "def", "split_center_box_emb", ["box_integral", "box"]], ["add", "theorem", "split_center_box_le", ["box_integral", "box"]], ["add", "theorem", "subbox_induction_on'", ["box_integral", "box"]], ["add", "theorem", "upper_sub_lower_split_center_box", ["box_integral", "box"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/divergence_theorem.lean", "changes": [["add", "theorem", "has_integral_bot_divergence_of_forall_has_deriv_within_at", ["box_integral"]], ["add", "theorem", "has_integral_bot_pderiv", ["box_integral"]], ["add", "theorem", "norm_volume_sub_integral_face_upper_sub_lower_smul_le", ["box_integral"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/integrability.lean", "changes": [["add", "theorem", "congr_ae", ["box_integral", "has_integral"]], ["add", "theorem", "has_integral_indicator_const", ["box_integral"]], ["add", "theorem", "has_integral_zero_of_ae_eq_zero", ["box_integral"]], ["add", "theorem", "has_box_integral", ["measure_theory", "integrable_on"]], ["add", "theorem", "box_integral_eq_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "has_box_integral", ["measure_theory", "simple_func"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/partition/additive.lean", "changes": [["add", "theorem", "coe_inj", ["box_integral", "box_additive_map"]], ["add", "theorem", "coe_injective", ["box_integral", "box_additive_map"]], ["add", "theorem", "coe_mk", ["box_integral", "box_additive_map"]], ["add", "def", "map", ["box_integral", "box_additive_map"]], ["add", "theorem", "map_split_add", ["box_integral", "box_additive_map"]], ["add", "def", "of_map_split_add", ["box_integral", "box_additive_map"]], ["add", "def", "restrict", ["box_integral", "box_additive_map"]], ["add", "theorem", "sum_boxes_congr", ["box_integral", "box_additive_map"]], ["add", "theorem", "sum_partition_boxes", ["box_integral", "box_additive_map"]], ["add", "theorem", "to_fun_eq_coe", ["box_integral", "box_additive_map"]], ["add", "def", "to_smul", ["box_integral", "box_additive_map"]], ["add", "theorem", "to_smul_apply", ["box_integral", "box_additive_map"]], ["add", "def", "{u}", ["box_integral", "box_additive_map"]], ["add", "structure", "box_additive_map", ["box_integral"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/partition/basic.lean", "changes": [["add", "theorem", "Union_bUnion", ["box_integral", "prepartition"]], ["add", "theorem", "Union_bUnion_partition", ["box_integral", "prepartition"]], ["add", "theorem", "Union_bot", ["box_integral", "prepartition"]], ["add", "theorem", "Union_def'", ["box_integral", "prepartition"]], ["add", "theorem", "Union_def", ["box_integral", "prepartition"]], ["add", "theorem", "Union_disj_union", ["box_integral", "prepartition"]], ["add", "theorem", "Union_eq_empty", ["box_integral", "prepartition"]], ["add", "theorem", "Union_filter_not", ["box_integral", "prepartition"]], ["add", "theorem", "Union_inf", ["box_integral", "prepartition"]], ["add", "theorem", "Union_mono", ["box_integral", "prepartition"]], ["add", "theorem", "Union_of_with_bot", ["box_integral", "prepartition"]], ["add", "theorem", "Union_restrict", ["box_integral", "prepartition"]], ["add", "theorem", "Union_single", ["box_integral", "prepartition"]], ["add", "theorem", "Union_subset", ["box_integral", "prepartition"]], ["add", "theorem", "Union_top", ["box_integral", "prepartition"]], ["add", "def", "bUnion", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_assoc", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_congr", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_congr_of_le", ["box_integral", "prepartition"]], ["add", "def", "bUnion_index", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_index_le", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_index_mem", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_index_of_mem", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_le", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_le_iff", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_top", ["box_integral", "prepartition"]], ["add", "theorem", "bot_boxes", ["box_integral", "prepartition"]], ["add", "theorem", "card_filter_mem_Icc_le", ["box_integral", "prepartition"]], ["add", "def", "disj_union", ["box_integral", "prepartition"]], ["add", "theorem", "disjoint_boxes_of_disjoint_Union", ["box_integral", "prepartition"]], ["add", "theorem", "disjoint_coe_of_mem", ["box_integral", "prepartition"]], ["add", "def", "distortion", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_bUnion", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_bot", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_disj_union", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_le_iff", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_le_of_mem", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_of_const", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_top", ["box_integral", "prepartition"]], ["add", "theorem", "eq_of_boxes_subset_Union_superset", ["box_integral", "prepartition"]], ["add", "theorem", "eq_of_le", ["box_integral", "prepartition"]], ["add", "theorem", "eq_of_le_of_le", ["box_integral", "prepartition"]], ["add", "theorem", "eq_of_mem_of_mem", ["box_integral", "prepartition"]], ["add", "theorem", "ext", ["box_integral", "prepartition"]], ["add", "def", "filter", ["box_integral", "prepartition"]], ["add", "theorem", "filter_le", ["box_integral", "prepartition"]], ["add", "theorem", "filter_of_true", ["box_integral", "prepartition"]], ["add", "theorem", "filter_true", ["box_integral", "prepartition"]], ["add", "theorem", "inf_def", ["box_integral", "prepartition"]], ["add", "theorem", "inj_on_set_of_mem_Icc_set_of_lower_eq", ["box_integral", "prepartition"]], ["add", "theorem", "injective_boxes", ["box_integral", "prepartition"]], ["add", "theorem", "Union_eq", ["box_integral", "prepartition", "is_partition"]], ["add", "theorem", "Union_subset", ["box_integral", "prepartition", "is_partition"]], ["add", "theorem", "eq_of_boxes_subset", ["box_integral", "prepartition", "is_partition"]], ["add", "theorem", "le_iff", ["box_integral", "prepartition", "is_partition"]], ["add", "theorem", "nonempty_boxes", ["box_integral", "prepartition", "is_partition"]], ["add", "def", "is_partition", ["box_integral", "prepartition"]], ["add", "theorem", "is_partition_disj_union_of_eq_diff", ["box_integral", "prepartition"]], ["add", "theorem", "is_partition_iff_Union_eq", ["box_integral", "prepartition"]], ["add", "theorem", "is_partition_single_iff", ["box_integral", "prepartition"]], ["add", "theorem", "is_partition_top", ["box_integral", "prepartition"]], ["add", "theorem", "le_bUnion_iff", ["box_integral", "prepartition"]], ["add", "theorem", "le_bUnion_index", ["box_integral", "prepartition"]], ["add", "theorem", "le_def", ["box_integral", "prepartition"]], ["add", "theorem", "le_iff_nonempty_imp_le_and_Union_subset", ["box_integral", "prepartition"]], ["add", "theorem", "le_of_mem", ["box_integral", "prepartition"]], ["add", "theorem", "le_of_with_bot", ["box_integral", "prepartition"]], ["add", "theorem", "lower_le_lower", ["box_integral", "prepartition"]], ["add", "theorem", "mem_Union", ["box_integral", "prepartition"]], ["add", "theorem", "mem_bUnion", ["box_integral", "prepartition"]], ["add", "theorem", "mem_bUnion_index", ["box_integral", "prepartition"]], ["add", "theorem", "mem_boxes", ["box_integral", "prepartition"]], ["add", "theorem", "mem_disj_union", ["box_integral", "prepartition"]], ["add", "theorem", "mem_filter", ["box_integral", "prepartition"]], ["add", "theorem", "mem_inf", ["box_integral", "prepartition"]], ["add", "theorem", "mem_mk", ["box_integral", "prepartition"]], ["add", "theorem", "mem_of_with_bot", ["box_integral", "prepartition"]], ["add", "theorem", "mem_restrict'", ["box_integral", "prepartition"]], ["add", "theorem", "mem_restrict", ["box_integral", "prepartition"]], ["add", "theorem", "mem_single", ["box_integral", "prepartition"]], ["add", "theorem", "mem_top", ["box_integral", "prepartition"]], ["add", "theorem", "monotone_restrict", ["box_integral", "prepartition"]], ["add", "theorem", "not_mem_bot", ["box_integral", "prepartition"]], ["add", "def", "of_with_bot", ["box_integral", "prepartition"]], ["add", "theorem", "of_with_bot_le", ["box_integral", "prepartition"]], ["add", "theorem", "of_with_bot_mono", ["box_integral", "prepartition"]], ["add", "def", "restrict", ["box_integral", "prepartition"]], ["add", "theorem", "restrict_bUnion", ["box_integral", "prepartition"]], ["add", "theorem", "restrict_boxes_of_le", ["box_integral", "prepartition"]], ["add", "theorem", "restrict_mono", ["box_integral", "prepartition"]], ["add", "theorem", "restrict_self", ["box_integral", "prepartition"]], ["add", "def", "single", ["box_integral", "prepartition"]], ["add", "theorem", "subset_Union", ["box_integral", "prepartition"]], ["add", "theorem", "sum_bUnion_boxes", ["box_integral", "prepartition"]], ["add", "theorem", "sum_disj_union_boxes", ["box_integral", "prepartition"]], ["add", "theorem", "sum_fiberwise", ["box_integral", "prepartition"]], ["add", "theorem", "sum_of_with_bot", ["box_integral", "prepartition"]], ["add", "theorem", "top_boxes", ["box_integral", "prepartition"]], ["add", "theorem", "upper_le_upper", ["box_integral", "prepartition"]], ["add", "structure", "prepartition", ["box_integral"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/partition/filter.lean", "changes": [["add", "def", "Henstock", ["box_integral", "integration_params"]], ["add", "theorem", "Henstock_le_McShane", ["box_integral", "integration_params"]], ["add", "theorem", "Henstock_le_Riemann", ["box_integral", "integration_params"]], ["add", "def", "McShane", ["box_integral", "integration_params"]], ["add", "def", "Riemann", ["box_integral", "integration_params"]], ["add", "theorem", "bUnion_tagged_mem_base_set", ["box_integral", "integration_params"]], ["add", "def", "equiv_prod", ["box_integral", "integration_params"]], ["add", "theorem", "eventually_is_partition", ["box_integral", "integration_params"]], ["add", "theorem", "exists_mem_base_set_is_partition", ["box_integral", "integration_params"]], ["add", "theorem", "exists_mem_base_set_le_Union_eq", ["box_integral", "integration_params"]], ["add", "theorem", "has_basis_to_filter", ["box_integral", "integration_params"]], ["add", "theorem", "has_basis_to_filter_Union", ["box_integral", "integration_params"]], ["add", "theorem", "has_basis_to_filter_Union_top", ["box_integral", "integration_params"]], ["add", "theorem", "has_basis_to_filter_distortion", ["box_integral", "integration_params"]], ["add", "theorem", "has_basis_to_filter_distortion_Union", ["box_integral", "integration_params"]], ["add", "def", "iso_prod", ["box_integral", "integration_params"]], ["add", "theorem", "exists_common_compl", ["box_integral", "integration_params", "mem_base_set"]], ["add", "theorem", "mono'", ["box_integral", "integration_params", "mem_base_set"]], ["add", "theorem", "mono", ["box_integral", "integration_params", "mem_base_set"]], ["add", "structure", "mem_base_set", ["box_integral", "integration_params"]], ["add", "theorem", "min", ["box_integral", "integration_params", "r_cond"]], ["add", "theorem", "mono", ["box_integral", "integration_params", "r_cond"]], ["add", "def", "r_cond", ["box_integral", "integration_params"]], ["add", "theorem", "r_cond_of_bRiemann_eq_ff", ["box_integral", "integration_params"]], ["add", "theorem", "tendsto_embed_box_to_filter_Union_top", ["box_integral", "integration_params"]], ["add", "def", "to_filter", ["box_integral", "integration_params"]], ["add", "def", "to_filter_Union", ["box_integral", "integration_params"]], ["add", "theorem", "to_filter_Union_congr", ["box_integral", "integration_params"]], ["add", "theorem", "to_filter_Union_mono", ["box_integral", "integration_params"]], ["add", "def", "to_filter_distortion", ["box_integral", "integration_params"]], ["add", "def", "to_filter_distortion_Union", ["box_integral", "integration_params"]], ["add", "theorem", "to_filter_distortion_Union_ne_bot", ["box_integral", "integration_params"]], ["add", "theorem", "to_filter_distortion_mono", ["box_integral", "integration_params"]], ["add", "theorem", "to_filter_inf_Union_eq", ["box_integral", "integration_params"]], ["add", "theorem", "to_filter_mono", ["box_integral", "integration_params"]], ["add", "structure", "integration_params", ["box_integral"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/partition/measure.lean", "changes": [["add", "theorem", "measurable_set_Icc", ["box_integral", "box"]], ["add", "theorem", "measurable_set_coe", ["box_integral", "box"]], ["add", "theorem", "measure_Icc_lt_top", ["box_integral", "box"]], ["add", "theorem", "measure_coe_lt_top", ["box_integral", "box"]], ["add", "theorem", "volume_apply", ["box_integral", "box"]], ["add", "theorem", "volume_face_mul", ["box_integral", "box"]], ["add", "theorem", "volume_apply", ["box_integral", "box_additive_map"]], ["add", "theorem", "measure_Union_to_real", ["box_integral", "prepartition"]], ["add", "def", "to_box_additive", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/partition/split.lean", "changes": [["add", "theorem", "coe_split_lower", ["box_integral", "box"]], ["add", "theorem", "coe_split_upper", ["box_integral", "box"]], ["add", "theorem", "disjoint_split_lower_split_upper", ["box_integral", "box"]], ["add", "def", "split_lower", ["box_integral", "box"]], ["add", "theorem", "split_lower_def", ["box_integral", "box"]], ["add", "theorem", "split_lower_eq_bot", ["box_integral", "box"]], ["add", "theorem", "split_lower_eq_self", ["box_integral", "box"]], ["add", "theorem", "split_lower_le", ["box_integral", "box"]], ["add", "theorem", "split_lower_ne_split_upper", ["box_integral", "box"]], ["add", "def", "split_upper", ["box_integral", "box"]], ["add", "theorem", "split_upper_def", ["box_integral", "box"]], ["add", "theorem", "split_upper_eq_bot", ["box_integral", "box"]], ["add", "theorem", "split_upper_eq_self", ["box_integral", "box"]], ["add", "theorem", "split_upper_le", ["box_integral", "box"]], ["add", "theorem", "Union_compl", ["box_integral", "prepartition"]], ["add", "theorem", "Union_split", ["box_integral", "prepartition"]], ["add", "theorem", "Union_split_many", ["box_integral", "prepartition"]], ["add", "theorem", "coe_eq_of_mem_split_of_lt_mem", ["box_integral", "prepartition"]], ["add", "theorem", "coe_eq_of_mem_split_of_mem_le", ["box_integral", "prepartition"]], ["add", "def", "compl", ["box_integral", "prepartition"]], ["add", "theorem", "compl_congr", ["box_integral", "prepartition"]], ["add", "theorem", "compl_top", ["box_integral", "prepartition"]], ["add", "theorem", "eventually_not_disjoint_imp_le_of_mem_split_many", ["box_integral", "prepartition"]], ["add", "theorem", "eventually_split_many_inf_eq_filter", ["box_integral", "prepartition"]], ["add", "theorem", "exists_Union_eq_diff", ["box_integral", "prepartition"]], ["add", "theorem", "exists_split_many_inf_eq_filter_of_finite", ["box_integral", "prepartition"]], ["add", "theorem", "inf_split", ["box_integral", "prepartition"]], ["add", "theorem", "inf_split_many", ["box_integral", "prepartition"]], ["add", "theorem", "compl_eq_bot", ["box_integral", "prepartition", "is_partition"]], ["add", "theorem", "exists_split_many_le", ["box_integral", "prepartition", "is_partition"]], ["add", "theorem", "is_partition_split", ["box_integral", "prepartition"]], ["add", "theorem", "is_partition_split_many", ["box_integral", "prepartition"]], ["add", "theorem", "mem_split_iff'", ["box_integral", "prepartition"]], ["add", "theorem", "mem_split_iff", ["box_integral", "prepartition"]], ["add", "theorem", "not_disjoint_imp_le_of_subset_of_mem_split_many", ["box_integral", "prepartition"]], ["add", "theorem", "restrict_split", ["box_integral", "prepartition"]], ["add", "def", "split", ["box_integral", "prepartition"]], ["add", "def", "split_many", ["box_integral", "prepartition"]], ["add", "theorem", "split_many_empty", ["box_integral", "prepartition"]], ["add", "theorem", "split_many_insert", ["box_integral", "prepartition"]], ["add", "theorem", "split_many_le_split", ["box_integral", "prepartition"]], ["add", "theorem", "split_of_not_mem_Ioo", ["box_integral", "prepartition"]], ["add", "theorem", "sum_split_boxes", ["box_integral", "prepartition"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/partition/subbox_induction.lean", "changes": [["add", "theorem", "exists_tagged_partition_is_Henstock_is_subordinate_homothetic", ["box_integral", "box"]], ["add", "theorem", "subbox_induction_on", ["box_integral", "box"]], ["add", "theorem", "Union_to_subordinate", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_to_subordinate", ["box_integral", "prepartition"]], ["add", "theorem", "exists_tagged_le_is_Henstock_is_subordinate_Union_eq", ["box_integral", "prepartition"]], ["add", "theorem", "is_Henstock_to_subordinate", ["box_integral", "prepartition"]], ["add", "theorem", "is_partition_split_center", ["box_integral", "prepartition"]], ["add", "theorem", "is_subordinate_to_subordinate", ["box_integral", "prepartition"]], ["add", "theorem", "mem_split_center", ["box_integral", "prepartition"]], ["add", "def", "split_center", ["box_integral", "prepartition"]], ["add", "def", "to_subordinate", ["box_integral", "prepartition"]], ["add", "theorem", "to_subordinate_to_prepartition_le", ["box_integral", "prepartition"]], ["add", "theorem", "upper_sub_lower_of_mem_split_center", ["box_integral", "prepartition"]], ["add", "theorem", "Union_union_compl_to_subordinate_boxes", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_union_compl_to_subordinate", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_partition_union_compl_to_subordinate", ["box_integral", "tagged_prepartition"]], ["add", "def", "union_compl_to_subordinate", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "union_compl_to_subordinate_boxes", ["box_integral", "tagged_prepartition"]]]}, {"oldPath": null, "newPath": "src/analysis/box_integral/partition/tagged.lean", "changes": [["add", "theorem", "Union_bUnion_tagged", ["box_integral", "prepartition"]], ["add", "def", "bUnion_tagged", ["box_integral", "prepartition"]], ["add", "theorem", "distortion_bUnion_tagged", ["box_integral", "prepartition"]], ["add", "theorem", "forall_bUnion_tagged", ["box_integral", "prepartition"]], ["add", "theorem", "bUnion_tagged", ["box_integral", "prepartition", "is_partition"]], ["add", "theorem", "mem_bUnion_tagged", ["box_integral", "prepartition"]], ["add", "theorem", "tag_bUnion_tagged", ["box_integral", "prepartition"]], ["add", "def", "Union", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "Union_def", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "Union_disj_union", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "Union_filter_not", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "Union_mk", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "Union_single", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "Union_subset", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "Union_to_prepartition", ["box_integral", "tagged_prepartition"]], ["add", "def", "bUnion_prepartition", ["box_integral", "tagged_prepartition"]], ["add", "def", "disj_union", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "disj_union_boxes", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "disj_union_tag_of_mem_left", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "disj_union_tag_of_mem_right", ["box_integral", "tagged_prepartition"]], ["add", "def", "distortion", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_bUnion_prepartition", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_disj_union", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_filter_le", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_le_iff", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_le_of_mem", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_of_const", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "distortion_single", ["box_integral", "tagged_prepartition"]], ["add", "def", "embed_box", ["box_integral", "tagged_prepartition"]], ["add", "def", "filter", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "forall_mem_single", ["box_integral", "tagged_prepartition"]], ["add", "def", "inf_prepartition", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "inf_prepartition_to_prepartition", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "card_filter_tag_eq_le", ["box_integral", "tagged_prepartition", "is_Henstock"]], ["add", "theorem", "disj_union", ["box_integral", "tagged_prepartition", "is_Henstock"]], ["add", "def", "is_Henstock", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_Henstock_bUnion_tagged", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_Henstock_single", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_Henstock_single_iff", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "bUnion_prepartition", ["box_integral", "tagged_prepartition", "is_partition"]], ["add", "theorem", "inf_prepartition", ["box_integral", "tagged_prepartition", "is_partition"]], ["add", "def", "is_partition", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_partition_iff_Union_eq", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_partition_single", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_partition_single_iff", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "bUnion_prepartition", ["box_integral", "tagged_prepartition", "is_subordinate"]], ["add", "theorem", "diam_le", ["box_integral", "tagged_prepartition", "is_subordinate"]], ["add", "theorem", "disj_union", ["box_integral", "tagged_prepartition", "is_subordinate"]], ["add", "theorem", "inf_prepartition", ["box_integral", "tagged_prepartition", "is_subordinate"]], ["add", "theorem", "mono'", ["box_integral", "tagged_prepartition", "is_subordinate"]], ["add", "theorem", "mono", ["box_integral", "tagged_prepartition", "is_subordinate"]], ["add", "def", "is_subordinate", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_subordinate_bUnion_tagged", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "is_subordinate_single", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "mem_Union", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "mem_disj_union", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "mem_filter", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "mem_inf_prepartition_comm", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "mem_mk", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "mem_single", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "mem_to_prepartition", ["box_integral", "tagged_prepartition"]], ["add", "def", "single", ["box_integral", "tagged_prepartition"]], ["add", "theorem", "subset_Union", ["box_integral", "tagged_prepartition"]], ["add", "structure", "tagged_prepartition", ["box_integral"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bUnion_diff_bUnion_eq", ["set"]], ["add", "theorem", "bUnion_diff_bUnion_subset", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "exists_update_iff", ["function"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_le_of_mem_pi_Icc", ["real"]]]}]}, {"timestamp": 1634601042, "sha": "5eee6a27", "message": "refactor(ring_theory/adjoin/fg): replace a fragile convert with rewrites (#9786)", "changes": [{"oldPath": "src/ring_theory/adjoin/fg.lean", "newPath": "src/ring_theory/adjoin/fg.lean", "changes": []}]}, {"timestamp": 1634601041, "sha": "98d07d31", "message": "refactor(algebra/order): replace typeclasses with constructors (#9725)\nThis RFC suggests removing some unused classes for the ordered algebra hierarchy, replacing them with constructors\nWe have `nonneg_add_comm_group extends add_comm_group`, and an instance from this to `ordered_add_comm_group`. The intention is to be able to construct an `ordered_add_comm_group` by specifying its positive cone, rather than directly its order.\nThere are then `nonneg_ring` and `linear_nonneg_ring`, similarly.\n(None of these are actually used later in mathlib at this point.)", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "structure", "positive_cone", ["add_comm_group"]], ["add", "structure", "total_positive_cone", ["add_comm_group"]], ["add", "def", "mk_of_positive_cone", ["linear_ordered_add_comm_group"]], ["del", "theorem", "nonneg_def", ["nonneg_add_comm_group"]], ["del", "theorem", "nonneg_total_iff", ["nonneg_add_comm_group"]], ["del", "theorem", "not_zero_pos", ["nonneg_add_comm_group"]], ["del", "theorem", "pos_def", ["nonneg_add_comm_group"]], ["del", "def", "to_linear_ordered_add_comm_group", ["nonneg_add_comm_group"]], ["del", "theorem", "zero_lt_iff_nonneg_nonneg", ["nonneg_add_comm_group"]], ["add", "def", "mk_of_positive_cone", ["ordered_add_comm_group"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "def", "to_linear_order", ["linear_nonneg_ring"]], ["del", "def", "to_linear_ordered_comm_ring", ["linear_nonneg_ring"]], ["del", "def", "to_linear_ordered_ring", ["linear_nonneg_ring"]], ["add", "def", "mk_of_positive_cone", ["linear_ordered_ring"]], ["del", "def", "to_linear_nonneg_ring", ["nonneg_ring"]], ["add", "def", "mk_of_positive_cone", ["ordered_ring"]], ["add", "structure", "positive_cone", ["ring"]], ["add", "structure", "total_positive_cone", ["ring"]]]}]}, {"timestamp": 1634601040, "sha": "442382db", "message": "feat(tactic/to_additive): Improvements to to_additive (#5487)\nChange a couple of things in to_additive:\n- First add a `tactic.copy_attribute'` intended for user attributes with parameters very similar to `tactic.copy_attribute` that just copies the parameter over when setting the attribute. This allows to_additive after many other attributes to transfer those attributes properly (e.g. norm_cast)\n- Have to additive register generated equation lemmas as such, this necessitates a bit of restructuring, first all declarations must be generated (including equational lemmas), then the equational lemmas need their attributes, then they are registered as equation lemmas, finally the attributes are added to the main declaration.\n- I also fixup the library in many places to account for these changes simplifying the source files, only one new lemma was added, in src/analysis/normed/group/quotient.lean `quotient_norm_mk_le'` to replace the unprimed version in the proof of `norm_normed_mk_le` as simp got better thanks to the new simp lemmas introduced by this PR. Probably many more handwritten additive versions can now be deleted in a future PR, especially defs and instances.\n- All other library changes are just simplifications by using to additive for some hand generated declarations, and many more attributes on the generated lemmas.\n- The attribute mono is trickier as it contains for its parameter not actual exprs containing names but exprs making names from strings, so I don't see how to handle it right now. We now warn the user about this, and fix the library in a couple of places.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/filtered_colimits.lean", "newPath": "src/algebra/category/Mon/filtered_colimits.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["mod", "theorem", "coe_eq_one", ["with_top"]], ["mod", "theorem", "coe_one", ["with_top"]], ["mod", "theorem", "one_eq_coe", ["with_top"]]]}, {"oldPath": "src/analysis/normed/group/quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": [["add", "theorem", "quotient_norm_mk_le'", []], ["mod", "theorem", "quotient_norm_sub_rev", []]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["del", "def", "sum", ["dfinsupp"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["del", "def", "to_add_equiv", ["add_monoid_hom"]]]}, {"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "def", "sum", ["finsupp"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "theorem", "left_coset_assoc", []], ["mod", "theorem", "one_left_coset", []], ["mod", "theorem", "right_coset_assoc", []], ["mod", "theorem", "right_coset_one", []]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["mod", "theorem", "ext", ["submonoid", "localization_map"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["mod", "theorem", "to_submonoid_strict_mono", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["mod", "theorem", "coe_of_mdense", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "coe_mul", ["submonoid"]], ["mod", "theorem", "coe_one", ["submonoid"]]]}, {"oldPath": "src/measure_theory/function/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": [["mod", "theorem", "mk_div", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["mod", "theorem", "coe_inf", ["open_subgroup"]], ["mod", "theorem", "coe_subgroup_le", ["open_subgroup"]], ["mod", "theorem", "coe_subset", ["open_subgroup"]], ["mod", "theorem", "mem_coe", ["open_subgroup"]], ["mod", "theorem", "mem_coe_opens", ["open_subgroup"]]]}, {"oldPath": "src/topology/tactic.lean", "newPath": "src/topology/tactic.lean", "changes": []}, {"oldPath": "test/to_additive.lean", "newPath": "test/to_additive.lean", "changes": [["del", "def", "foo0", []], ["del", "def", "foo1", []], ["del", "def", "foo2", []], ["del", "def", "foo3", []], ["del", "theorem", "foo4_test", []], ["del", "def", "foo5", []], ["del", "def", "foo6", []], ["del", "def", "foo7", []], ["del", "def", "foo_mul", []], ["del", "def", "nat_pi_has_one", []], ["del", "def", "pi_nat_has_one", []], ["del", "def", "in_namespace", ["some_def"]], ["del", "def", "some_def", []], ["add", "def", "foo0", ["test"]], ["add", "def", "foo1", ["test"]], ["add", "def", "foo2", ["test"]], ["add", "def", "foo3", ["test"]], ["add", "theorem", "foo4_test", ["test"]], ["add", "def", "foo5", ["test"]], ["add", "def", "foo6", ["test"]], ["add", "def", "foo7", ["test"]], ["add", "def", "foo_mul", ["test"]], ["add", "def", "nat_pi_has_one", ["test"]], ["add", "def", "pi_nat_has_one", ["test"]], ["add", "def", "in_namespace", ["test", "some_def"]], ["add", "def", "some_def", ["test"]], ["add", "def", "{a", ["test"]], ["del", "def", "{a", []]]}]}, {"timestamp": 1634591295, "sha": "8b7e16fe", "message": "feat(tactic/lint): improve check_univs linter (#9698)\n* `check_univs` now only checks the type of `d` and ignores `d._proof_i` subterms\n* move `expr.univ_params_grouped` to the linter file (it seems increasingly unlikely that this has a use in other applications)\n* We now don't test automatically generated declarations anymore.", "changes": [{"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/category/Quiv.lean", "newPath": "src/category_theory/category/Quiv.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1634579759, "sha": "b112d4dd", "message": "refactor(ring_theory/ideal/operations): generalize various definitions to remove negation and commutativity (#9737)\nMostly this just weakens assumptions in `variable`s lines, but occasionally this moves lemmas to a more appropriate section too.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "comap_is_maximal_of_surjective", ["ideal"]], ["mod", "theorem", "comap_le_iff_le_map", ["ideal"]], ["mod", "theorem", "comap_map_of_surjective", ["ideal"]], ["mod", "theorem", "is_maximal", ["ideal", "map"]], ["mod", "theorem", "map_eq_top_or_is_maximal_of_surjective", ["ideal"]], ["mod", "def", "rel_iso_of_surjective", ["ideal"]], ["mod", "theorem", "subset_union", ["ideal"]], ["mod", "theorem", "subset_union_prime'", ["ideal"]], ["mod", "theorem", "subset_union_prime", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}]}, {"timestamp": 1634575270, "sha": "71c203a9", "message": "feat(analysis/normed/group/SemiNormedGroup/completion): add SemiNormedGroup.Completion (#9788)\nFrom LTE.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed/group/SemiNormedGroup/completion.lean", "changes": [["add", "def", "incl", ["SemiNormedGroup", "Completion"]], ["add", "def", "lift", ["SemiNormedGroup", "Completion"]], ["add", "theorem", "lift_comp_incl", ["SemiNormedGroup", "Completion"]], ["add", "theorem", "lift_unique", ["SemiNormedGroup", "Completion"]], ["add", "def", "map_hom", ["SemiNormedGroup", "Completion"]], ["add", "theorem", "map_norm_noninc", ["SemiNormedGroup", "Completion"]], ["add", "theorem", "map_zero", ["SemiNormedGroup", "Completion"]], ["add", "theorem", "norm_incl_eq", ["SemiNormedGroup", "Completion"]], ["add", "def", "Completion", ["SemiNormedGroup"]]]}, {"oldPath": "src/analysis/normed/group/hom_completion.lean", "newPath": "src/analysis/normed/group/hom_completion.lean", "changes": [["add", "def", "extension", ["normed_group_hom"]], ["add", "theorem", "extension_coe", ["normed_group_hom"]], ["add", "theorem", "extension_coe_to_fun", ["normed_group_hom"]], ["add", "theorem", "extension_def", ["normed_group_hom"]], ["add", "theorem", "extension_unique", ["normed_group_hom"]]]}]}, {"timestamp": 1634575269, "sha": "80071d45", "message": "refactor(algebra/floor): Add `ceil` as a field of `floor_ring` (#9591)\nThis allows more control on definitional equality.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "def", "of_ceil", ["floor_ring"]], ["add", "def", "of_floor", ["floor_ring"]], ["mod", "def", "ceil", ["int"]], ["mod", "theorem", "ceil_eq_iff", ["int"]], ["mod", "theorem", "ceil_le", ["int"]], ["mod", "theorem", "ceil_mono", ["int"]], ["mod", "theorem", "ceil_neg", ["int"]], ["mod", "theorem", "ceil_nonneg", ["int"]], ["mod", "theorem", "ceil_pos", ["int"]], ["mod", "theorem", "floor_eq_iff", ["int"]], ["mod", "theorem", "floor_le", ["int"]], ["mod", "theorem", "floor_lt", ["int"]], ["mod", "theorem", "floor_mono", ["int"]], ["mod", "theorem", "floor_neg", ["int"]], ["mod", "theorem", "floor_nonneg", ["int"]], ["add", "theorem", "floor_ring_ceil_eq", ["int"]], ["add", "theorem", "floor_ring_floor_eq", ["int"]], ["add", "theorem", "gc_ceil_coe", ["int"]], ["add", "theorem", "gc_coe_floor", ["int"]], ["mod", "theorem", "le_ceil", ["int"]], ["mod", "theorem", "le_floor", ["int"]], ["mod", "theorem", "lt_ceil", ["int"]], ["mod", "theorem", "preimage_Ici", ["int"]], ["mod", "theorem", "preimage_Iic", ["int"]], ["mod", "theorem", "preimage_Iio", ["int"]], ["mod", "theorem", "preimage_Ioi", ["int"]], ["mod", "theorem", "ceil_add_nat", ["nat"]], ["mod", "theorem", "ceil_add_one", ["nat"]], ["mod", "theorem", "ceil_lt_add_one", ["nat"]], ["mod", "theorem", "floor_add_one", ["nat"]], ["mod", "theorem", "le_of_ceil_le", ["nat"]], ["mod", "theorem", "lt_of_ceil_lt", ["nat"]]]}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}]}, {"timestamp": 1634566551, "sha": "5ea384e8", "message": "refactor(ring_theory/finiteness): replace fragile convert with rewrites (#9787)", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "coe_restrict_scalars", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1634566549, "sha": "6f4aea44", "message": "feat(data/set/pairwise): Simple `pairwise_disjoint` lemmas (#9764)", "changes": [{"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "disjoint_singleton", ["finset"]], ["add", "theorem", "disjoint_singleton_left", ["finset"]], ["add", "theorem", "disjoint_singleton_right", ["finset"]], ["del", "theorem", "singleton_disjoint", ["finset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_singleton", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["mod", "theorem", "elim'", ["set", "pairwise_disjoint"]], ["mod", "theorem", "elim", ["set", "pairwise_disjoint"]], ["add", "theorem", "image_of_le", ["set", "pairwise_disjoint"]], ["add", "theorem", "insert", ["set", "pairwise_disjoint"]], ["mod", "theorem", "range", ["set", "pairwise_disjoint"]], ["mod", "theorem", "subset", ["set", "pairwise_disjoint"]], ["add", "theorem", "pairwise_disjoint_empty", ["set"]], ["add", "theorem", "pairwise_disjoint_insert", ["set"]], ["add", "theorem", "pairwise_disjoint_range_singleton", ["set"]], ["add", "theorem", "pairwise_disjoint_singleton", ["set"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1634561630, "sha": "116e4267", "message": "chore(group_theory/order_of_element): order_of_units (#9777)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_units", []]]}]}, {"timestamp": 1634561628, "sha": "a7ac6996", "message": "feat(topology/metric_space): dimH is the supr of local dimH (#9741)", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_dimension.lean", "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": [["add", "theorem", "bsupr_limsup_dimH", []], ["add", "theorem", "exists_mem_nhds_within_lt_dimH_of_lt_dimH", []], ["add", "theorem", "supr_limsup_dimH", []]]}]}, {"timestamp": 1634561627, "sha": "06179ca9", "message": "feat(data/real/pointwise): Inf and Sup of `a • s` for `s : set ℝ` (#9707)\nThis relates `Inf (a • s)`/`Sup (a • s)` with `a • Inf s`/`a • Sup s` for `s : set ℝ`.", "changes": [{"oldPath": null, "newPath": "src/data/real/pointwise.lean", "changes": [["add", "theorem", "Inf_smul_of_nonneg", ["real"]], ["add", "theorem", "Inf_smul_of_nonpos", ["real"]], ["add", "theorem", "Sup_smul_of_nonneg", ["real"]], ["add", "theorem", "Sup_smul_of_nonpos", ["real"]]]}]}, {"timestamp": 1634556082, "sha": "e8413250", "message": "feat(linear_algebra/dfinsupp): cardinality lemmas for `complete_lattice.independent` (#9705)\nIf `p` is a system of independent subspaces of a vector space `V`, and `v` is a system of nonzero vectors each contained in the corresponding subspace, then `v` is linearly independent.\nConsequently, if `p` is a system of independent subspaces of `V`, then no more than `dim V` many can be nontrivial.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "to_span_singleton", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["mod", "theorem", "dfinsupp_lsum_injective", ["complete_lattice", "independent"]], ["add", "theorem", "linear_independent", ["complete_lattice", "independent"]], ["mod", "theorem", "independent_iff_dfinsupp_lsum_injective", ["complete_lattice"]], ["mod", "theorem", "independent_iff_forall_dfinsupp", ["complete_lattice"]], ["mod", "theorem", "independent_of_dfinsupp_lsum_injective", ["complete_lattice"]], ["add", "theorem", "lsum_comp_map_range_to_span_singleton", ["complete_lattice"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "cardinal_lift_le_dim_of_linear_independent'", []], ["add", "theorem", "subtype_ne_bot_le_rank", ["complete_lattice", "independent"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "subtype_ne_bot_le_finrank", ["complete_lattice", "independent"]], ["add", "theorem", "subtype_ne_bot_le_finrank_aux", ["complete_lattice", "independent"]]]}]}, {"timestamp": 1634549556, "sha": "39db98c8", "message": "feat(analysis/normed_space/add_torsor_bases): the convex hull has non-empty interior iff the affine span is top (#9727)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex", ["affine_subspace"]]]}, {"oldPath": "src/analysis/convex/hull.lean", "newPath": "src/analysis/convex/hull.lean", "changes": [["add", "theorem", "affine_span_convex_hull", []], ["mod", "theorem", "convex_hull_mono", []], ["add", "theorem", "convex_hull_subset_affine_span", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["add", "theorem", "interior_convex_hull_nonempty_iff_aff_span_eq_top", []]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "line_map_mem", ["affine_map"]], ["add", "theorem", "affine_span_le", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "interior_mono", []]]}]}, {"timestamp": 1634545200, "sha": "2e62b33c", "message": "chore(field_theory/galois): speedup a slow convert (#9782)\nThis was broken by a deterministic timeout in another branch. This replaces a `convert` with an explicit `simp`.", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}]}, {"timestamp": 1634545199, "sha": "27d28a84", "message": "feat(linear_algebra/affine_space/independent): affine equivalences preserve affine independence of sets of points (#9776)\nThe key addition is `affine_equiv.affine_independent_set_of_eq_iff`.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_independent_set_of_eq_iff", ["affine_equiv"]], ["add", "theorem", "affine_independent_equiv", []], ["del", "theorem", "homothety_affine_independent_iff", ["affine_map"]]]}]}, {"timestamp": 1634545198, "sha": "fb5c0bec", "message": "feat(topology/metric_space): closed if spaced out (#9754)\nIf pairwise distances between the points of a set are bounded from below by a positive number, then the set is closed.\nAlso prove some theorems about `uniform_inducing` and `uniform_embedding` and show that `coe : int → real` is a closed embedding.", "changes": [{"oldPath": "src/number_theory/liouville/residual.lean", "newPath": "src/number_theory/liouville/residual.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "continuous_of_rat", []], ["del", "theorem", "dense_embedding_of_rat", []], ["del", "theorem", "embedding_of_rat", []], ["add", "theorem", "closed_embedding_coe_rat", ["int"]], ["add", "theorem", "closed_embedding_coe_real", ["int"]], ["add", "theorem", "pairwise_one_le_dist", ["int"]], ["add", "theorem", "uniform_embedding_coe_rat", ["int"]], ["add", "theorem", "continuous_coe_real", ["rat"]], ["add", "theorem", "dense_embedding_coe_real", ["rat"]], ["mod", "theorem", "dist_cast", ["rat"]], ["mod", "theorem", "dist_eq", ["rat"]], ["add", "theorem", "embedding_coe_real", ["rat"]], ["add", "theorem", "uniform_continuous_coe_real", ["rat"]], ["add", "theorem", "uniform_embedding_coe_real", ["rat"]], ["del", "theorem", "uniform_continuous_of_rat", []], ["del", "theorem", "uniform_embedding_of_rat", []]]}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "closed_embedding_of_pairwise_le_dist", ["metric"]], ["add", "theorem", "is_closed_of_pairwise_on_le_dist", ["metric"]], ["add", "theorem", "uniform_embedding_bot_of_pairwise_le_dist", ["metric"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "mem_uniformity_of_eq", []]]}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["add", "theorem", "is_closed_range_of_spaced_out", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "closed_embedding_of_spaced_out", []], ["add", "theorem", "comap_uniformity_of_spaced_out", []], ["add", "theorem", "uniform_embedding_of_spaced_out", []], ["add", "theorem", "basis_uniformity", ["uniform_inducing"]], ["add", "theorem", "uniform_embedding", ["uniform_inducing"]]]}]}, {"timestamp": 1634536391, "sha": "6cd6ff44", "message": "split(data/list/permutation): split off `data.list.basic` (#9749)\nThis moves all the `list.permutations` definitions and lemmas not involving `list.perm` to a new file.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "foldr_permutations_aux2", ["list"]], ["del", "theorem", "length_foldr_permutations_aux2'", ["list"]], ["del", "theorem", "length_foldr_permutations_aux2", ["list"]], ["del", "theorem", "length_permutations_aux2", ["list"]], ["del", "theorem", "map_map_permutations'_aux", ["list"]], ["del", "theorem", "map_map_permutations_aux2", ["list"]], ["del", "theorem", "map_permutations'", ["list"]], ["del", "theorem", "map_permutations", ["list"]], ["del", "theorem", "map_permutations_aux2'", ["list"]], ["del", "theorem", "map_permutations_aux2", ["list"]], ["del", "theorem", "map_permutations_aux", ["list"]], ["del", "theorem", "mem_foldr_permutations_aux2", ["list"]], ["del", "theorem", "mem_permutations_aux2'", ["list"]], ["del", "theorem", "mem_permutations_aux2", ["list"]], ["del", "theorem", "permutations'_aux_eq_permutations_aux2", ["list"]], ["del", "theorem", "permutations_append", ["list"]], ["del", "theorem", "permutations_aux2_append", ["list"]], ["del", "theorem", "permutations_aux2_comp_append", ["list"]], ["del", "theorem", "permutations_aux2_fst", ["list"]], ["del", "theorem", "permutations_aux2_snd_cons", ["list"]], ["del", "theorem", "permutations_aux2_snd_eq", ["list"]], ["del", "theorem", "permutations_aux2_snd_nil", ["list"]], ["del", "theorem", "permutations_aux_append", ["list"]], ["del", "theorem", "permutations_aux_cons", ["list"]], ["del", "theorem", "permutations_aux_nil", ["list"]], ["del", "theorem", "permutations_nil", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/permutation.lean", "changes": [["add", "theorem", "foldr_permutations_aux2", ["list"]], ["add", "theorem", "length_foldr_permutations_aux2'", ["list"]], ["add", "theorem", "length_foldr_permutations_aux2", ["list"]], ["add", "theorem", "length_permutations_aux2", ["list"]], ["add", "theorem", "map_map_permutations'_aux", ["list"]], ["add", "theorem", "map_map_permutations_aux2", ["list"]], ["add", "theorem", "map_permutations'", ["list"]], ["add", "theorem", "map_permutations", ["list"]], ["add", "theorem", "map_permutations_aux2'", ["list"]], ["add", "theorem", "map_permutations_aux2", ["list"]], ["add", "theorem", "map_permutations_aux", ["list"]], ["add", "theorem", "mem_foldr_permutations_aux2", ["list"]], ["add", "theorem", "mem_permutations_aux2'", ["list"]], ["add", "theorem", "mem_permutations_aux2", ["list"]], ["add", "theorem", "permutations'_aux_eq_permutations_aux2", ["list"]], ["add", "theorem", "permutations_append", ["list"]], ["add", "theorem", "permutations_aux2_append", ["list"]], ["add", "theorem", "permutations_aux2_comp_append", ["list"]], ["add", "theorem", "permutations_aux2_fst", ["list"]], ["add", "theorem", "permutations_aux2_snd_cons", ["list"]], ["add", "theorem", "permutations_aux2_snd_eq", ["list"]], ["add", "theorem", "permutations_aux2_snd_nil", ["list"]], ["add", "theorem", "permutations_aux_append", ["list"]], ["add", "theorem", "permutations_aux_cons", ["list"]], ["add", "theorem", "permutations_aux_nil", ["list"]], ["add", "theorem", "permutations_nil", ["list"]]]}]}, {"timestamp": 1634524094, "sha": "5b527bd0", "message": "refactor(linear_algebra/quadratic_form): split file (#9781)\nThe section on quadratic forms over complex numbers required pulling in the developing of the complex power function, which significantly increases the import depth. Splitting this file allows `clifford_algebra` to be compiled much earlier.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form/basic.lean", "changes": [["del", "theorem", "equivalent_one_neg_one_weighted_sum_squared", ["quadratic_form"]], ["del", "theorem", "equivalent_one_zero_neg_one_weighted_sum_squared", ["quadratic_form"]], ["del", "theorem", "equivalent_sum_squares", ["quadratic_form"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/quadratic_form/complex.lean", "changes": [["add", "theorem", "equivalent_sum_squares", ["quadratic_form"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/quadratic_form/real.lean", "changes": [["add", "theorem", "equivalent_one_neg_one_weighted_sum_squared", ["quadratic_form"]], ["add", "theorem", "equivalent_one_zero_neg_one_weighted_sum_squared", ["quadratic_form"]]]}]}, {"timestamp": 1634507729, "sha": "27a777b1", "message": "feat(data/nat/gcd): `coprime.lcm_eq_mul` (#9761)\nSurprisingly, this result doesn't seem to be present yet.", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["mod", "theorem", "gcd_eq_one", ["nat", "coprime"]], ["add", "theorem", "lcm_eq_mul", ["nat", "coprime"]]]}]}, {"timestamp": 1634503438, "sha": "5dbe8c48", "message": "feat(topology/metric_space): a map with a contracting iterate has a fixed pt (#9760)", "changes": [{"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["add", "theorem", "is_fixed_pt_fixed_point_iterate", ["contracting_with"]]]}]}, {"timestamp": 1634494396, "sha": "084702d0", "message": "chore(analysis/normed_algebra/exponential): golf, generalize (#9740)\n* move `real.summable_pow_div_factorial` to\n `analysis.specific_limits`, golf the proof;\n* use recently added lemma `inv_nat_cast_smul_eq` to golf the proof of\n equality of exponentials defined using different fields and\n generalize the statement: we no longer require one field to be a\n normed algebra over another.\n* rename `exp_eq_exp_of_field_extension` → `exp_eq_exp` and\n `exp_series_eq_exp_series_of_field_extension` →\n `exp_series_eq_exp_series` because we no longer require\n `[normed_algebra 𝕂 𝕂']`.", "changes": [{"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["mod", "theorem", "div_le_div_of_le_left", []]]}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "exp_eq_exp", []], ["del", "theorem", "exp_eq_exp_of_field_extension", []], ["add", "theorem", "exp_series_eq_exp_series", []], ["del", "theorem", "exp_series_eq_exp_series_of_field_extension", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "summable_pow_div_factorial", ["real"]], ["add", "theorem", "tendsto_pow_div_factorial_at_top", ["real"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "cast_lt", ["nat"]], ["mod", "theorem", "mono_cast", ["nat"]]]}]}, {"timestamp": 1634476715, "sha": "376bba8a", "message": "chore(data/finset/lattice): fix infi docstrings (#9775)", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}]}, {"timestamp": 1634476714, "sha": "41b56455", "message": "chore(topology/algebra/ordered/basic): move code out of `basic` (#9772)", "changes": [{"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "tendsto_inv_nhds_within_Ici", []], ["add", "theorem", "tendsto_inv_nhds_within_Ici_inv", []], ["add", "theorem", "tendsto_inv_nhds_within_Iic", []], ["add", "theorem", "tendsto_inv_nhds_within_Iic_inv", []], ["add", "theorem", "tendsto_inv_nhds_within_Iio", []], ["add", "theorem", "tendsto_inv_nhds_within_Iio_inv", []], ["add", "theorem", "tendsto_inv_nhds_within_Ioi", []], ["add", "theorem", "tendsto_inv_nhds_within_Ioi_inv", []]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "exists_forall_ge", ["continuous"]], ["del", "theorem", "exists_forall_le", ["continuous"]], ["del", "theorem", "continuous_at_iff_continuous_left'_right'", []], ["del", "theorem", "continuous_at_iff_continuous_left_right", []], ["del", "theorem", "continuous_at_left_of_monotone_on_of_closure_image_mem_nhds_within", []], ["del", "theorem", "continuous_at_left_of_monotone_on_of_exists_between", []], ["del", "theorem", "continuous_at_left_of_monotone_on_of_image_mem_nhds_within", []], ["del", "theorem", "continuous_at_of_monotone_on_of_closure_image_mem_nhds", []], ["del", "theorem", "continuous_at_of_monotone_on_of_exists_between", []], ["del", "theorem", "continuous_at_of_monotone_on_of_image_mem_nhds", []], ["del", "theorem", "continuous_at_right_of_monotone_on_of_closure_image_mem_nhds_within", []], ["del", "theorem", "continuous_at_right_of_monotone_on_of_exists_between", []], ["del", "theorem", "continuous_at_right_of_monotone_on_of_image_mem_nhds_within", []], ["del", "theorem", "continuous_within_at_Iio_iff_Iic", []], ["del", "theorem", "continuous_within_at_Ioi_iff_Ici", []], ["del", "theorem", "eq_Icc_of_connected_compact", []], ["del", "theorem", "Inf_mem", ["is_compact"]], ["del", "theorem", "Sup_mem", ["is_compact"]], ["del", "theorem", "exists_Inf_image_eq", ["is_compact"]], ["del", "theorem", "exists_Sup_image_eq", ["is_compact"]], ["del", "theorem", "exists_forall_ge", ["is_compact"]], ["del", "theorem", "exists_forall_le", ["is_compact"]], ["del", "theorem", "exists_is_glb", ["is_compact"]], ["del", "theorem", "exists_is_greatest", ["is_compact"]], ["del", "theorem", "exists_is_least", ["is_compact"]], ["del", "theorem", "exists_is_lub", ["is_compact"]], ["del", "theorem", "is_glb_Inf", ["is_compact"]], ["del", "theorem", "is_greatest_Sup", ["is_compact"]], ["del", "theorem", "is_least_Inf", ["is_compact"]], ["del", "theorem", "is_lub_Sup", ["is_compact"]], ["del", "theorem", "is_compact_Icc", []], ["del", "theorem", "is_compact_interval", []], ["del", "theorem", "is_compact_pi_Icc", []], ["del", "theorem", "continuous_of_dense_range", ["monotone"]], ["del", "theorem", "continuous_of_surjective", ["monotone"]], ["del", "theorem", "nhds_left'_sup_nhds_right", []], ["del", "theorem", "nhds_left_sup_nhds_right'", []], ["del", "theorem", "nhds_left_sup_nhds_right", []], ["del", "theorem", "coe_to_homeomorph", ["order_iso"]], ["del", "theorem", "coe_to_homeomorph_symm", ["order_iso"]], ["del", "def", "to_homeomorph", ["order_iso"]], ["del", "theorem", "continuous_at_left_of_closure_image_mem_nhds_within", ["strict_mono_on"]], ["del", "theorem", "continuous_at_left_of_exists_between", ["strict_mono_on"]], ["del", "theorem", "continuous_at_left_of_image_mem_nhds_within", ["strict_mono_on"]], ["del", "theorem", "continuous_at_left_of_surj_on", ["strict_mono_on"]], ["del", "theorem", "continuous_at_of_closure_image_mem_nhds", ["strict_mono_on"]], ["del", "theorem", "continuous_at_of_exists_between", ["strict_mono_on"]], ["del", "theorem", "continuous_at_of_image_mem_nhds", ["strict_mono_on"]], ["del", "theorem", "continuous_at_right_of_closure_image_mem_nhds_within", ["strict_mono_on"]], ["del", "theorem", "continuous_at_right_of_exists_between", ["strict_mono_on"]], ["del", "theorem", "continuous_at_right_of_image_mem_nhds_within", ["strict_mono_on"]], ["del", "theorem", "continuous_at_right_of_surj_on", ["strict_mono_on"]], ["del", "theorem", "tendsto_inv_nhds_within_Ici", []], ["del", "theorem", "tendsto_inv_nhds_within_Ici_inv", []], ["del", "theorem", "tendsto_inv_nhds_within_Iic", []], ["del", "theorem", "tendsto_inv_nhds_within_Iic_inv", []], ["del", "theorem", "tendsto_inv_nhds_within_Iio", []], ["del", "theorem", "tendsto_inv_nhds_within_Iio_inv", []], ["del", "theorem", "tendsto_inv_nhds_within_Ioi", []], ["del", "theorem", "tendsto_inv_nhds_within_Ioi_inv", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/compact.lean", "changes": [["add", "theorem", "exists_forall_ge", ["continuous"]], ["add", "theorem", "exists_forall_le", ["continuous"]], ["add", "theorem", "eq_Icc_of_connected_compact", []], ["add", "theorem", "Inf_mem", ["is_compact"]], ["add", "theorem", "Sup_mem", ["is_compact"]], ["add", "theorem", "exists_Inf_image_eq", ["is_compact"]], ["add", "theorem", "exists_Sup_image_eq", ["is_compact"]], ["add", "theorem", "exists_forall_ge", ["is_compact"]], ["add", "theorem", "exists_forall_le", ["is_compact"]], ["add", "theorem", "exists_is_glb", ["is_compact"]], ["add", "theorem", "exists_is_greatest", ["is_compact"]], ["add", "theorem", "exists_is_least", ["is_compact"]], ["add", "theorem", "exists_is_lub", ["is_compact"]], ["add", "theorem", "is_glb_Inf", ["is_compact"]], ["add", "theorem", "is_greatest_Sup", ["is_compact"]], ["add", "theorem", "is_least_Inf", ["is_compact"]], ["add", "theorem", "is_lub_Sup", ["is_compact"]], ["add", "theorem", "is_compact_Icc", []], ["add", "theorem", "is_compact_interval", []], ["add", "theorem", "is_compact_pi_Icc", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/left_right.lean", "changes": [["add", "theorem", "continuous_at_iff_continuous_left'_right'", []], ["add", "theorem", "continuous_at_iff_continuous_left_right", []], ["add", "theorem", "continuous_within_at_Iio_iff_Iic", []], ["add", "theorem", "continuous_within_at_Ioi_iff_Ici", []], ["add", "theorem", "nhds_left'_sup_nhds_right", []], ["add", "theorem", "nhds_left_sup_nhds_right'", []], ["add", "theorem", "nhds_left_sup_nhds_right", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/monotone_continuity.lean", "changes": [["add", "theorem", "continuous_at_left_of_monotone_on_of_closure_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_left_of_monotone_on_of_exists_between", []], ["add", "theorem", "continuous_at_left_of_monotone_on_of_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_of_monotone_on_of_closure_image_mem_nhds", []], ["add", "theorem", "continuous_at_of_monotone_on_of_exists_between", []], ["add", "theorem", "continuous_at_of_monotone_on_of_image_mem_nhds", []], ["add", "theorem", "continuous_at_right_of_monotone_on_of_closure_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_right_of_monotone_on_of_exists_between", []], ["add", "theorem", "continuous_at_right_of_monotone_on_of_image_mem_nhds_within", []], ["add", "theorem", "continuous_of_dense_range", ["monotone"]], ["add", "theorem", "continuous_of_surjective", ["monotone"]], ["add", "theorem", "coe_to_homeomorph", ["order_iso"]], ["add", "theorem", "coe_to_homeomorph_symm", ["order_iso"]], ["add", "def", "to_homeomorph", ["order_iso"]], ["add", "theorem", "continuous_at_left_of_closure_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_left_of_exists_between", ["strict_mono_on"]], ["add", "theorem", "continuous_at_left_of_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_left_of_surj_on", ["strict_mono_on"]], ["add", "theorem", "continuous_at_of_closure_image_mem_nhds", ["strict_mono_on"]], ["add", "theorem", "continuous_at_of_exists_between", ["strict_mono_on"]], ["add", "theorem", "continuous_at_of_image_mem_nhds", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_closure_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_exists_between", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_surj_on", ["strict_mono_on"]]]}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1634476712, "sha": "1432c308", "message": "feat(topology/algebra/mul_action): `λ x, c • x` is a closed map for all `c` (#9756)\n* rename old `is_closed_map_smul₀` to `is_closed_map_smul_of_ne_zero`;\n* add a new `is_closed_map_smul₀` that assumes more about typeclasses\n but works for `c = 0`.", "changes": [{"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["add", "theorem", "is_closed_map_smul_of_ne_zero", []], ["mod", "theorem", "is_closed_map_smul₀", []]]}]}, {"timestamp": 1634476711, "sha": "48dc2492", "message": "feat(measure_theory/measure): +1 version of Borel-Cantelli, drop an assumption (#9678)\n* In all versions of Borel-Cantelli lemma, do not require that the\n sets are measurable.\n* Add +1 version.\n* Golf proofs.", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_eventually_not_mem", ["measure_theory"]], ["mod", "theorem", "measure_limsup_eq_zero", ["measure_theory"]], ["add", "theorem", "measure_set_of_frequently_eq_zero", ["measure_theory"]]]}]}, {"timestamp": 1634468498, "sha": "3f15148f", "message": "chore(analysis/p_series): use `lift` tactic (#9773)", "changes": [{"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}]}, {"timestamp": 1634468497, "sha": "9fec8f35", "message": "feat(group_theory/index): `index_comap_of_surjective` (#9768)\n`subgroup.index` is preserved by `subgroup.comap`, provided that the homomorphism is surjective.", "changes": [{"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_comap_of_surjective", ["subgroup"]]]}]}, {"timestamp": 1634468496, "sha": "85f36400", "message": "feat(topology/instances/ennreal): `{f | lipschitz_with K f}` is a closed set (#9766)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "edist", ["continuous"]], ["add", "theorem", "is_closed_set_of_lipschitz_on_with", []], ["add", "theorem", "is_closed_set_of_lipschitz_with", []]]}]}, {"timestamp": 1634468495, "sha": "678d7edf", "message": "chore(data/equiv/mul_add): add missing `to_equiv_mk` (#9765)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "to_equiv_mk", ["mul_equiv"]]]}]}, {"timestamp": 1634468494, "sha": "24ebeece", "message": "feat(data/nat/gcd): Add `iff` version of `coprime.dvd_of_dvd_mul` (#9759)\nAdds `iff` versions of `coprime.dvd_of_dvd_mul_right` and `coprime.dvd_of_dvd_mul_left`.", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "dvd_mul_left", ["nat", "coprime"]], ["add", "theorem", "dvd_mul_right", ["nat", "coprime"]]]}]}, {"timestamp": 1634468493, "sha": "1558a767", "message": "feat(group_theory/subgroup/basic): Special cases of `subgroup_of` (#9755)\nAdd four lemmas regarding special cases of `subgroup_of`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "bot_subgroup_of", ["subgroup"]], ["add", "theorem", "subgroup_of_bot_eq_bot", ["subgroup"]], ["add", "theorem", "subgroup_of_bot_eq_top", ["subgroup"]], ["add", "theorem", "top_subgroup_of", ["subgroup"]]]}]}, {"timestamp": 1634468491, "sha": "4b00aa2d", "message": "refactor(ring_theory/jacobson): avoid shadowing hypothesis (#9736)\nThis PR postpones a `rw` in a proof, which was creating a shadowed hypothesis. At present, this shadowing was not a big deal, but in another branch it caused a hard-to-diagnose error.", "changes": [{"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}]}, {"timestamp": 1634468490, "sha": "5eb47c00", "message": "feat(topology/homotopy): Define the fundamental groupoid of a topological space (#9683)", "changes": [{"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": [["add", "def", "cast", ["continuous_map", "homotopy"]], ["add", "def", "cast", ["continuous_map", "homotopy_rel"]], ["add", "def", "cast", ["continuous_map", "homotopy_with"]]]}, {"oldPath": null, "newPath": "src/topology/homotopy/fundamental_groupoid.lean", "changes": [["add", "def", "fundamental_groupoid", []], ["add", "theorem", "continuous_refl_trans_symm_aux", ["path", "homotopy"]], ["add", "theorem", "continuous_trans_assoc_reparam_aux", ["path", "homotopy"]], ["add", "theorem", "continuous_trans_refl_reparam_aux", ["path", "homotopy"]], ["add", "def", "refl_symm_trans", ["path", "homotopy"]], ["add", "def", "refl_trans", ["path", "homotopy"]], ["add", "def", "refl_trans_symm", ["path", "homotopy"]], ["add", "def", "refl_trans_symm_aux", ["path", "homotopy"]], ["add", "theorem", "refl_trans_symm_aux_mem_I", ["path", "homotopy"]], ["add", "def", "trans_assoc", ["path", "homotopy"]], ["add", "theorem", "trans_assoc_reparam", ["path", "homotopy"]], ["add", "def", "trans_assoc_reparam_aux", ["path", "homotopy"]], ["add", "theorem", "trans_assoc_reparam_aux_mem_I", ["path", "homotopy"]], ["add", "theorem", "trans_assoc_reparam_aux_one", ["path", "homotopy"]], ["add", "theorem", "trans_assoc_reparam_aux_zero", ["path", "homotopy"]], ["add", "def", "trans_refl", ["path", "homotopy"]], ["add", "theorem", "trans_refl_reparam", ["path", "homotopy"]], ["add", "def", "trans_refl_reparam_aux", ["path", "homotopy"]], ["add", "theorem", "trans_refl_reparam_aux_mem_I", ["path", "homotopy"]], ["add", "theorem", "trans_refl_reparam_aux_one", ["path", "homotopy"]], ["add", "theorem", "trans_refl_reparam_aux_zero", ["path", "homotopy"]]]}, {"oldPath": "src/topology/homotopy/path.lean", "newPath": "src/topology/homotopy/path.lean", "changes": [["add", "def", "cast", ["path", "homotopy"]], ["add", "def", "reparam", ["path", "homotopy"]], ["add", "def", "symm₂", ["path", "homotopy"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "symm_symm", ["path"]], ["add", "theorem", "trans_apply", ["path"]], ["add", "theorem", "trans_symm", ["path"]]]}]}, {"timestamp": 1634460838, "sha": "f171c615", "message": "feat(linear_algebra/affine_space/independent): add `exists_affine_independent` (#9747)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "exists_affine_independent", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_insert_zero", ["submodule"]]]}, {"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": []}]}, {"timestamp": 1634451804, "sha": "ff8a35d4", "message": "feat(group_theory/subgroup/basic): Kernel of `subtype` and `inclusion` (#9763)\n`subtype` and `inculusion` are injective, so they have trivial kernel.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "ker_inclusion", ["subgroup"]], ["add", "theorem", "ker_subtype", ["subgroup"]]]}]}, {"timestamp": 1634441670, "sha": "7aa431c9", "message": "chore(group_theory/quotient_group): Tag lemmas with `@[to_additive]` (#9771)\nAdds `@[to_additive]` to a couple lemmas.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "theorem", "subgroup_eq_top_of_subsingleton", ["quotient_group"]], ["mod", "theorem", "subsingleton_quotient_top", ["quotient_group"]]]}]}, {"timestamp": 1634441669, "sha": "a1a05ad8", "message": "chore(measure_theory/*): don't require the codomain to be a normed group (#9769)\nLemmas like `continuous_on.ae_measurable` are true for any codomain. Also add `continuous.integrable_on_Ioc` and `continuous.integrable_on_interval_oc`.", "changes": [{"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_Ioc", ["continuous"]], ["add", "theorem", "integrable_on_interval_oc", ["continuous"]], ["mod", "theorem", "ae_measurable", ["continuous_on"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "measurable_at_filter", ["continuous"]], ["mod", "theorem", "measurable_at_filter_nhds_within", ["continuous_on"]]]}]}, {"timestamp": 1634441668, "sha": "08a070b4", "message": "chore(topology/instances/ennreal): golf a proof (#9767)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "continuous_of_const", []], ["add", "theorem", "continuous_at", ["filter", "eventually_eq"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1634437429, "sha": "4a837fb9", "message": "chore(analysis/normed/group): add a few convenience lemmas (#9770)\nAdd `lipschitz_on_with.norm_sub_le_of_le`,\n`lipschitz_with.norm_sub_le`, and `lipschitz_with.norm_sub_le_of_le`.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "norm_sub_le_of_le", ["lipschitz_on_with"]], ["add", "theorem", "norm_sub_le_of_le", ["lipschitz_with"]]]}]}, {"timestamp": 1634425885, "sha": "cf72eff0", "message": "refactor(group_theory/quotient_group): Fix typo (#9746)\nFix typo in `quotient_bot`.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1634420814, "sha": "ad7000b9", "message": "feat(set_theory/cardinal): cardinal.to_nat_congr (#9726)\nIf `e : α ≃ β`, then `(cardinal.mk α).to_nat = (cardinal.mk β).to_nat`.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "to_nat_congr", ["cardinal"]], ["add", "theorem", "to_nat_lift", ["cardinal"]]]}]}, {"timestamp": 1634416372, "sha": "b97bb92f", "message": "feat(set_theory/cardinal): lemmas (#9690)\n* swap sides of `cardinal.lift_mk`, rename it to `cardinal.mk_ulift`;\n* add `cardinal.out_mk_equiv`.", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/cardinal.lean", "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["del", "theorem", "lift_mk", ["cardinal"]], ["add", "theorem", "mk_ulift", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}]}, {"timestamp": 1634407276, "sha": "3fe67d65", "message": "feat(analysis/special_functions/integrals): integral of `|x - a| ^ n` over `Ι a b` (#9752)\nAlso use notation for `interval a b` and `interval_oc a b`.", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["mod", "theorem", "integral_inv", []], ["mod", "theorem", "integral_log", []], ["mod", "theorem", "integral_one_div", []], ["add", "theorem", "integral_pow_abs_sub_interval_oc", []], ["mod", "theorem", "interval_integrable_inv", ["interval_integral"]], ["mod", "theorem", "interval_integrable_log", ["interval_integral"]], ["mod", "theorem", "interval_integrable_one_div", ["interval_integral"]]]}]}, {"timestamp": 1634407275, "sha": "54e9e120", "message": "chore(topology/maps): add `is_closed_map.closed_range` (#9751)", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "closed_range", ["is_closed_map"]]]}]}, {"timestamp": 1634407274, "sha": "998ab788", "message": "chore(data/list/lex): make data.list.lex not depend on data.list.basic (#9750)\nAnother simplification in list related dependencies, if this commit breaks external code the fix is to add `import data.list.basic` to the broken file.", "changes": [{"oldPath": "src/data/list/lex.lean", "newPath": "src/data/list/lex.lean", "changes": []}]}, {"timestamp": 1634407273, "sha": "066a168d", "message": "feat(topology/G_delta): add lemmas, minor golf (#9742)\n* the complement to a countable set is a Gδ set;\n* a closed set is a Gδ set;\n* finite union of Gδ sets is a Gδ set;\n* generalize some universe levels in `topology.basic`;\n* golf a few proofs in `topology.uniform_space.basic`;\n* add `filter.has_basis.bInter_bUnion_ball`.", "changes": [{"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": [["add", "theorem", "is_Gδ_compl", ["finset"]], ["mod", "theorem", "is_Gδ_Inter", []], ["add", "theorem", "is_Gδ_bUnion", []], ["add", "theorem", "is_Gδ_compl_singleton", []], ["mod", "theorem", "is_Gδ_empty", []], ["mod", "theorem", "is_Gδ_set_of_continuous_at", []], ["mod", "theorem", "is_Gδ_univ", []], ["add", "theorem", "is_Gδ'", ["is_closed"]], ["add", "theorem", "is_Gδ", ["is_closed"]], ["add", "theorem", "is_Gδ_compl", ["set", "countable"]], ["add", "theorem", "is_Gδ_compl", ["set", "finite"]], ["add", "theorem", "is_Gδ_compl", ["set", "subsingleton"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "mem_closure_iff_nhds_basis'", []], ["mod", "theorem", "mem_closure_iff_nhds_basis", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "bInter_bUnion_ball", ["filter", "has_basis"]], ["mod", "theorem", "nhds_basis_uniformity'", []], ["mod", "theorem", "nhds_basis_uniformity", []]]}]}, {"timestamp": 1634407271, "sha": "aa0d0d41", "message": "feat(group_theory/subgroup/basic): Range of inclusion (#9732)\nIf `H ≤ K`, then the range of `inclusion : H → K` is `H` (viewed as a subgroup of `K`).", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "inclusion_range", ["subgroup"]]]}]}, {"timestamp": 1634407270, "sha": "155f8e66", "message": "feat(data/int/succ_pred): `ℤ` is succ- and pred- archimedean (#9731)\nThis provides the instances `succ_order ℤ`, `pred_order ℤ`, `is_succ_archimedean ℤ`, `is_pred_archimedean ℤ`.", "changes": [{"oldPath": null, "newPath": "src/data/int/succ_pred.lean", "changes": [["add", "theorem", "pred_iterate", ["int"]], ["add", "theorem", "succ_iterate", ["int"]]]}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": [["add", "def", "of_le_pred_iff", ["pred_order"]], ["add", "def", "of_le_pred_iff_of_pred_le_pred", ["pred_order"]], ["del", "def", "pred_order_of_le_pred_iff", ["pred_order"]], ["del", "def", "pred_order_of_le_pred_iff_of_pred_le_pred", ["pred_order"]], ["add", "def", "of_succ_le_iff", ["succ_order"]], ["add", "def", "of_succ_le_iff_of_le_lt_succ", ["succ_order"]], ["del", "def", "succ_order_of_succ_le_iff", ["succ_order"]], ["del", "def", "succ_order_of_succ_le_iff_of_le_lt_succ", ["succ_order"]]]}]}, {"timestamp": 1634407269, "sha": "e7440330", "message": "feat(data/finset/basic, lattice): Simple lemmas (#9723)\nThis proves lemmas about `finset.sup`/`finset.inf` and `finset.singleton`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "cons_induction", ["finset", "nonempty"]], ["add", "theorem", "not_disjoint_iff", ["finset"]], ["add", "theorem", "singleton_injective", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_attach", ["finset"]], ["add", "theorem", "inf_erase_top", ["finset"]], ["mod", "theorem", "inf_image", ["finset"]], ["add", "theorem", "inf_inf", ["finset"]], ["add", "theorem", "inf_sdiff_left", ["finset"]], ["add", "theorem", "inf_sdiff_right", ["finset"]], ["add", "theorem", "sup_attach", ["finset"]], ["add", "theorem", "sup_erase_bot", ["finset"]], ["mod", "theorem", "sup_image", ["finset"]], ["add", "theorem", "sup_sdiff_left", ["finset"]], ["add", "theorem", "sup_sdiff_right", ["finset"]], ["add", "theorem", "sup_singleton'", ["finset"]], ["add", "theorem", "sup_sup", ["finset"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_inf_inf_comm", []], ["add", "theorem", "sup_sup_sup_comm", []]]}]}, {"timestamp": 1634407268, "sha": "bf34d9b8", "message": "feat(analysis/normed/group/SemiNormedGroup/kernels): add explicit_cokernel.map (#9712)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": [["add", "theorem", "map_desc", ["SemiNormedGroup", "explicit_coker"]]]}]}, {"timestamp": 1634407267, "sha": "686b3635", "message": "feat(analysis/normed/group/SemiNormedGroup/kernels): add kernels (#9711)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": [["add", "def", "parallel_pair_cone", ["SemiNormedGroup"]]]}]}, {"timestamp": 1634407266, "sha": "3d999265", "message": "feat(analysis/normed/group/SemiNormedGroup): add iso_isometry_of_norm_noninc (#9710)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed/group/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": [["add", "theorem", "iso_isometry_of_norm_noninc", ["SemiNormedGroup"]]]}]}, {"timestamp": 1634407265, "sha": "5ac586a6", "message": "feat(algebra/group_power/order): When a power is less than one (#9700)\nThis proves a bunch of simple order lemmas relating `1`, `a` and `a ^ n`. I also move `pow_le_one` upstream as it could already be proved in `algebra.group_power.order` and remove `[nontrivial R]` from `one_lt_pow`.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "pow_le_of_le_one", []], ["del", "theorem", "pow_le_one", []], ["mod", "theorem", "pow_le_pow_of_le_one", []], ["add", "theorem", "sq_le", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "one_le_pow_iff_of_nonneg", []], ["add", "theorem", "one_le_sq_iff", []], ["mod", "theorem", "one_lt_pow", []], ["add", "theorem", "one_lt_pow_iff_of_nonneg", []], ["add", "theorem", "one_lt_sq_iff", []], ["add", "theorem", "pow_le_one", []], ["add", "theorem", "pow_le_one_iff_of_nonneg", []], ["add", "theorem", "pow_lt_one", []], ["add", "theorem", "pow_lt_one_iff_of_nonneg", []], ["add", "theorem", "sq_le_one_iff", []], ["add", "theorem", "sq_lt_one_iff", []]]}]}, {"timestamp": 1634402815, "sha": "99b2d40e", "message": "feat(algebra/floor): Floor and ceil of `-a` (#9715)\nThis proves `floor_neg : ⌊-a⌋ = -⌈a⌉` and `ceil_neg : ⌈-a⌉ = -⌊a⌋` and uses them to remove explicit dependency on the definition of `int.ceil` in prevision of #9591. This also proves `⌊a + 1⌋ = ⌊a⌋ + 1` and variants.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "ceil_add_one", ["int"]], ["add", "theorem", "ceil_neg", ["int"]], ["add", "theorem", "floor_add_one", ["int"]], ["add", "theorem", "floor_neg", ["int"]], ["add", "theorem", "ceil_add_one", ["nat"]], ["mod", "theorem", "ceil_lt_add_one", ["nat"]], ["add", "theorem", "floor_add_one", ["nat"]]]}]}, {"timestamp": 1634376415, "sha": "9ac2aa29", "message": "feat(topology/metric_space/lipschitz): add `lipschitz_with.min` and `lipschitz_with.max` (#9744)\nAlso change assumptions in some lemmas in `algebra.order.group` from\n `[add_comm_group α] [linear_order α] [covariant_class α α (+) (≤)]`\nto `[linear_ordered_add_comm_group α]`. These two sets of assumptions\nare equivalent but the latter is more readable.", "changes": [{"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["add", "theorem", "abs_max_sub_max_le_max", []], ["add", "theorem", "abs_min_sub_min_le_max", []], ["add", "theorem", "max_sub_max_le_max", []]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "const_max", ["lipschitz_with"]], ["add", "theorem", "const_min", ["lipschitz_with"]], ["add", "theorem", "max_const", ["lipschitz_with"]], ["add", "theorem", "min_const", ["lipschitz_with"]], ["add", "theorem", "subtype_mk", ["lipschitz_with"]], ["add", "theorem", "lipschitz_with_max", []], ["add", "theorem", "lipschitz_with_min", []]]}]}, {"timestamp": 1634376414, "sha": "96ba8b6a", "message": "chore(topology/uniform_space/pi): add `uniform_continuous_pi` (#9743)", "changes": [{"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": [["add", "theorem", "uniform_continuous_pi", []]]}]}, {"timestamp": 1634373860, "sha": "e3622934", "message": "refactor(ring_theory/fractional_ideal): speedup a proof (#9738)\nThis was timing out on another branch. Just replaces a `simp only []` with a `rw []`.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}]}, {"timestamp": 1634369553, "sha": "f40cd88c", "message": "chore(topology/algebra/ordered): move some lemmas to a new file (#9745)", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "infi_eq_infi_subseq_of_monotone", []], ["del", "theorem", "infi_eq_of_tendsto", []], ["del", "theorem", "is_glb_of_tendsto", []], ["del", "theorem", "is_lub_of_tendsto", []], ["del", "theorem", "ge_of_tendsto", ["monotone"]], ["del", "theorem", "le_of_tendsto", ["monotone"]], ["del", "theorem", "supr_eq_of_tendsto", []], ["del", "theorem", "supr_eq_supr_subseq_of_monotone", []], ["del", "theorem", "tendsto_at_bot_cinfi", []], ["del", "theorem", "tendsto_at_bot_csupr", []], ["del", "theorem", "tendsto_at_bot_infi", []], ["del", "theorem", "tendsto_at_bot_is_glb", []], ["del", "theorem", "tendsto_at_bot_is_lub", []], ["del", "theorem", "tendsto_at_bot_supr", []], ["del", "theorem", "tendsto_at_top_cinfi", []], ["del", "theorem", "tendsto_at_top_csupr", []], ["del", "theorem", "tendsto_at_top_infi", []], ["del", "theorem", "tendsto_at_top_is_glb", []], ["del", "theorem", "tendsto_at_top_is_lub", []], ["del", "theorem", "tendsto_at_top_supr", []], ["del", "theorem", "tendsto_iff_tendsto_subseq_of_monotone", []], ["del", "theorem", "tendsto_of_monotone", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/monotone_convergence.lean", "changes": [["add", "theorem", "infi_eq_infi_subseq_of_monotone", []], ["add", "theorem", "infi_eq_of_tendsto", []], ["add", "theorem", "is_glb_of_tendsto", []], ["add", "theorem", "is_lub_of_tendsto", []], ["add", "theorem", "ge_of_tendsto", ["monotone"]], ["add", "theorem", "le_of_tendsto", ["monotone"]], ["add", "theorem", "supr_eq_of_tendsto", []], ["add", "theorem", "supr_eq_supr_subseq_of_monotone", []], ["add", "theorem", "tendsto_at_bot_cinfi", []], ["add", "theorem", "tendsto_at_bot_csupr", []], ["add", "theorem", "tendsto_at_bot_infi", []], ["add", "theorem", "tendsto_at_bot_is_glb", []], ["add", "theorem", "tendsto_at_bot_is_lub", []], ["add", "theorem", "tendsto_at_bot_supr", []], ["add", "theorem", "tendsto_at_top_cinfi", []], ["add", "theorem", "tendsto_at_top_csupr", []], ["add", "theorem", "tendsto_at_top_infi", []], ["add", "theorem", "tendsto_at_top_is_glb", []], ["add", "theorem", "tendsto_at_top_is_lub", []], ["add", "theorem", "tendsto_at_top_supr", []], ["add", "theorem", "tendsto_iff_tendsto_subseq_of_monotone", []], ["add", "theorem", "tendsto_of_monotone", []]]}]}, {"timestamp": 1634357794, "sha": "150bbeab", "message": "feat(group_theory/subgroup/basic): Bottom subgroup has unique element (#9734)\nAdds instance for `unique (⊥ : subgroup G)`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}]}, {"timestamp": 1634347049, "sha": "17665882", "message": "feat(measure_theory/covering/vitali): Vitali covering theorems (#9680)\nThe topological and measurable Vitali covering theorems.\n* topological version: if a space is covered by balls `(B (x_i, r_i))_{i \\in I}`, one can extract a disjointed subfamily indexed by `J` such that the space is covered by the balls `B (x_j, 5 r_j)`.\n* measurable version: if additionally the measure has a doubling-like property, and the covering contains balls of arbitrarily small radius at every point, then the disjointed subfamily one obtains above covers almost all the space.\nThese two statements are particular cases of more general statements that are proved in this PR.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/covering/vitali.lean", "changes": [["add", "theorem", "exists_disjoint_covering_ae", ["vitali"]], ["add", "theorem", "exists_disjoint_subfamily_covering_enlargment", ["vitali"]], ["add", "theorem", "exists_disjoint_subfamily_covering_enlargment_closed_ball", ["vitali"]]]}]}, {"timestamp": 1634338671, "sha": "ea22ce39", "message": "chore(data/list): move lemmas from data.list.basic that require algebra.group_power to a new file (#9728)\nHopefully ease the dependencies on anyone importing data.list.basic, if your code broke after this change adding `import data.list.prod_monoid` should fix it.\nLemmas moved:\n- `list.prod_repeat`\n- `list.sum_repeat`\n- `list.prod_le_of_forall_le`\n- `list.sum_le_of_forall_le`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "prod_le_of_forall_le", ["list"]], ["del", "theorem", "prod_repeat", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/prod_monoid.lean", "changes": [["add", "theorem", "prod_le_of_forall_le", ["list"]], ["add", "theorem", "prod_repeat", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "test/lint_unused_haves_suffices.lean", "newPath": "test/lint_unused_haves_suffices.lean", "changes": []}]}, {"timestamp": 1634333725, "sha": "711aa755", "message": "refactor(algebra/gcd_monoid): remove superfluous old_structure_cmd (#9720)", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}]}, {"timestamp": 1634315900, "sha": "b3f602b9", "message": "feat(linear_algebra/linear_independent): add variant of `exists_linear_independent` (#9708)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["mod", "theorem", "exists_linear_independent", []], ["add", "theorem", "exists_linear_independent_extension", []]]}]}, {"timestamp": 1634310493, "sha": "d6fd5f5f", "message": "feat(linear_algebra/dimension): generalize dim_zero_iff_forall_zero (#9713)\nWe generalize `dim_zero_iff_forall_zero` to `[nontrivial R] [no_zero_smul_divisors R M]`.\nIf you see a more general class to consider let me know.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_pos", []], ["mod", "theorem", "dim_pos_iff_exists_ne_zero", []], ["mod", "theorem", "dim_pos_iff_nontrivial", []], ["mod", "theorem", "dim_zero_iff", []], ["mod", "theorem", "dim_zero_iff_forall_zero", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1634299859, "sha": "ad6d4764", "message": "refactor(ring_theory/derivation): remove old_structure_cmd (#9724)", "changes": [{"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["mod", "theorem", "mk_coe", ["derivation"]], ["del", "theorem", "to_fun_eq_coe", ["derivation"]]]}]}, {"timestamp": 1634299858, "sha": "a2737b4b", "message": "chore(data/set_like/basic): remove superfluous old_structure_cmd (#9722)", "changes": [{"oldPath": "src/data/set_like/basic.lean", "newPath": "src/data/set_like/basic.lean", "changes": []}]}, {"timestamp": 1634297316, "sha": "6bc2a1a2", "message": "refactor(algebra/lie/basic): remove old_structure_cmd (#9721)", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "theorem", "coe_mk", ["lie_module_equiv"]], ["add", "theorem", "injective", ["lie_module_equiv"]], ["add", "def", "to_equiv", ["lie_module_equiv"]], ["add", "def", "to_linear_equiv", ["lie_module_equiv"]], ["mod", "structure", "lie_module_equiv", []], ["mod", "theorem", "coe_linear_mk", ["lie_module_hom"]], ["mod", "theorem", "coe_mk", ["lie_module_hom"]], ["mod", "theorem", "mk_coe", ["lie_module_hom"]]]}, {"oldPath": "src/algebra/lie/tensor_product.lean", "newPath": "src/algebra/lie/tensor_product.lean", "changes": []}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": [["add", "def", "root_space_weight_space_product_aux", ["lie_algebra"]]]}]}, {"timestamp": 1634279288, "sha": "77070364", "message": "feat(tactic/by_contra): add by_contra' tactic (#9619)", "changes": [{"oldPath": null, "newPath": "src/tactic/by_contra.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": null, "newPath": "test/by_contra.lean", "changes": []}]}, {"timestamp": 1634260018, "sha": "be91f696", "message": "chore(algebra/floor): general golf (#9716)\nThis cleans the file in depth:\n* kill some `simp`\n* use available dot notation on `≤`\n* remove the `by ... ; ...` (there's one left that #9715) takes care of\n* group definition and notation of `int.floor`,`int.ceil` and `int.fract`\n* move `int.preimage_...` lemmas with the rest of the `ℤ` stuff\n* homogeneize variable names", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["mod", "theorem", "abs_sub_lt_one_of_floor_eq_floor", ["int"]], ["mod", "def", "ceil", ["int"]], ["mod", "theorem", "ceil_add_int", ["int"]], ["mod", "theorem", "ceil_coe", ["int"]], ["mod", "theorem", "ceil_eq_iff", ["int"]], ["mod", "theorem", "ceil_eq_on_Ioc'", ["int"]], ["mod", "theorem", "ceil_eq_on_Ioc", ["int"]], ["mod", "theorem", "ceil_le", ["int"]], ["mod", "theorem", "ceil_le_floor_add_one", ["int"]], ["mod", "theorem", "ceil_lt_add_one", ["int"]], ["mod", "theorem", "ceil_mono", ["int"]], ["mod", "theorem", "ceil_nonneg", ["int"]], ["mod", "theorem", "ceil_pos", ["int"]], ["mod", "theorem", "ceil_sub_int", ["int"]], ["mod", "theorem", "ceil_zero", ["int"]], ["del", "theorem", "floor_add", ["int"]], ["mod", "theorem", "floor_add_fract", ["int"]], ["mod", "theorem", "floor_add_int", ["int"]], ["mod", "theorem", "floor_add_nat", ["int"]], ["mod", "theorem", "floor_coe", ["int"]], ["mod", "theorem", "floor_eq_iff", ["int"]], ["mod", "theorem", "floor_eq_on_Ico'", ["int"]], ["mod", "theorem", "floor_eq_on_Ico", ["int"]], ["mod", "theorem", "floor_fract", ["int"]], ["mod", "theorem", "floor_int_add", ["int"]], ["mod", "theorem", "floor_le", ["int"]], ["mod", "theorem", "floor_lt", ["int"]], ["mod", "theorem", "floor_lt_ceil_of_lt", ["int"]], ["mod", "theorem", "floor_mono", ["int"]], ["add", "theorem", "floor_nat_add", ["int"]], ["mod", "theorem", "floor_nonneg", ["int"]], ["mod", "theorem", "floor_one", ["int"]], ["mod", "theorem", "floor_sub_int", ["int"]], ["mod", "theorem", "floor_sub_nat", ["int"]], ["mod", "theorem", "floor_zero", ["int"]], ["mod", "def", "fract", ["int"]], ["mod", "theorem", "fract_add", ["int"]], ["mod", "theorem", "fract_add_floor", ["int"]], ["mod", "theorem", "fract_eq_fract", ["int"]], ["mod", "theorem", "fract_eq_iff", ["int"]], ["mod", "theorem", "fract_floor", ["int"]], ["mod", "theorem", "fract_fract", ["int"]], ["mod", "theorem", "fract_lt_one", ["int"]], ["mod", "theorem", "fract_mul_nat", ["int"]], ["mod", "theorem", "fract_nonneg", ["int"]], ["mod", "theorem", "fract_zero", ["int"]], ["mod", "theorem", "le_ceil", ["int"]], ["mod", "theorem", "le_floor", ["int"]], ["mod", "theorem", "lt_ceil", ["int"]], ["mod", "theorem", "lt_floor_add_one", ["int"]], ["mod", "theorem", "lt_succ_floor", ["int"]], ["mod", "theorem", "preimage_Icc", ["int"]], ["mod", "theorem", "preimage_Ici", ["int"]], ["mod", "theorem", "preimage_Ico", ["int"]], ["mod", "theorem", "preimage_Iic", ["int"]], ["mod", "theorem", "preimage_Iio", ["int"]], ["mod", "theorem", "preimage_Ioc", ["int"]], ["mod", "theorem", "preimage_Ioi", ["int"]], ["mod", "theorem", "preimage_Ioo", ["int"]], ["mod", "theorem", "sub_one_lt_floor", ["int"]], ["mod", "theorem", "ceil_add_nat", ["nat"]], ["mod", "theorem", "ceil_coe", ["nat"]], ["mod", "theorem", "ceil_eq_zero", ["nat"]], ["mod", "theorem", "ceil_le", ["nat"]], ["mod", "theorem", "ceil_mono", ["nat"]], ["mod", "theorem", "ceil_zero", ["nat"]], ["mod", "theorem", "floor_add_nat", ["nat"]], ["mod", "theorem", "floor_coe", ["nat"]], ["mod", "theorem", "floor_lt_ceil_of_lt_of_pos", ["nat"]], ["mod", "theorem", "floor_lt_iff", ["nat"]], ["mod", "theorem", "floor_mono", ["nat"]], ["mod", "theorem", "floor_zero", ["nat"]], ["mod", "theorem", "le_ceil", ["nat"]], ["mod", "theorem", "le_floor_iff", ["nat"]], ["mod", "theorem", "le_of_ceil_le", ["nat"]], ["mod", "theorem", "lt_ceil", ["nat"]], ["mod", "theorem", "lt_of_ceil_lt", ["nat"]], ["mod", "theorem", "sub_one_lt_floor", ["nat"]]]}]}, {"timestamp": 1634253005, "sha": "c37ea535", "message": "feat(order/succ_pred): `succ`-Archimedean orders (#9714)\nThis defines `succ`-Archimedean orders: orders in which `a ≤ b` means that `succ^[n] a = b` for some `n`.", "changes": [{"oldPath": "src/logic/function/iterate.lean", "newPath": "src/logic/function/iterate.lean", "changes": [["add", "def", "rec", ["function", "iterate"]], ["add", "theorem", "rec_zero", ["function", "iterate"]]]}, {"oldPath": "src/order/succ_pred.lean", "newPath": "src/order/succ_pred.lean", "changes": [["add", "theorem", "exists_pred_iterate_iff_le", []], ["add", "theorem", "exists_pred_iterate_or", []], ["add", "theorem", "exists_succ_iterate_iff_le", []], ["add", "theorem", "exists_succ_iterate_or", []], ["add", "theorem", "exists_pred_iterate", ["has_le", "le"]], ["add", "theorem", "exists_succ_iterate", ["has_le", "le"]], ["add", "theorem", "rec", ["pred"]], ["add", "theorem", "rec_iff", ["pred"]], ["add", "theorem", "rec_linear", ["pred"]], ["add", "theorem", "rec_top", ["pred"]], ["add", "theorem", "rec", ["succ"]], ["add", "theorem", "rec_bot", ["succ"]], ["add", "theorem", "rec_iff", ["succ"]], ["add", "theorem", "rec_linear", ["succ"]]]}]}, {"timestamp": 1634245978, "sha": "c12acedd", "message": "feat(algebra/star): star_linear_equiv (#9426)", "changes": [{"oldPath": "src/algebra/ring/comp_typeclasses.lean", "newPath": "src/algebra/ring/comp_typeclasses.lean", "changes": [["add", "theorem", "of_ring_equiv", ["ring_hom_inv_pair"]], ["add", "theorem", "symm", ["ring_hom_inv_pair"]]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/star/module.lean", "changes": [["add", "def", "star_linear_equiv", []]]}]}, {"timestamp": 1634241259, "sha": "158fbc5d", "message": "refactor(algebra/module/order): Make space argument explicit in the `order_iso` (#9706)\nExplicitly providing `M` in `order_iso.smul_left` and `order_iso.smul_left_dual` turns out to work much better with dot notation on `order_iso`. This allows golfing half the proofs introduced in #9078.", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": [["mod", "theorem", "smul_of_nonneg", ["bdd_above"]], ["mod", "theorem", "smul_of_nonpos", ["bdd_above"]], ["mod", "theorem", "bdd_above_smul_iff_of_neg", []], ["mod", "theorem", "bdd_above_smul_iff_of_pos", []], ["mod", "theorem", "smul_of_nonneg", ["bdd_below"]], ["mod", "theorem", "smul_of_nonpos", ["bdd_below"]], ["mod", "theorem", "bdd_below_smul_iff_of_neg", []], ["mod", "theorem", "bdd_below_smul_iff_of_pos", []], ["mod", "theorem", "lower_bounds_smul_of_neg", []], ["mod", "theorem", "lower_bounds_smul_of_pos", []], ["mod", "theorem", "upper_bounds_smul_of_neg", []], ["mod", "theorem", "upper_bounds_smul_of_pos", []]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}]}, {"timestamp": 1634237392, "sha": "72789f57", "message": "feat(linear_algebra/affine_space/affine_subspace): add lemma `affine_equiv.span_eq_top_iff` (#9695)\nTogether with supporting lemmas.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "mem_vsub", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "image_vsub_image", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "span_eq_top_iff", ["affine_equiv"]], ["add", "theorem", "map_top_of_surjective", ["affine_map"]], ["add", "theorem", "span_eq_top_of_surjective", ["affine_map"]], ["add", "theorem", "vector_span_image_eq_submodule_map", ["affine_map"]], ["add", "def", "map", ["affine_subspace"]], ["add", "theorem", "map_bot", ["affine_subspace"]], ["add", "theorem", "map_coe", ["affine_subspace"]], ["add", "theorem", "map_direction", ["affine_subspace"]], ["add", "theorem", "map_span", ["affine_subspace"]]]}]}, {"timestamp": 1634234770, "sha": "cef78dd4", "message": "feat(archive/abel_ruffini): speedup by squeezing (#9709)\n30s->9s elaboration for me, hopefully stop #9705 timing out", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}]}, {"timestamp": 1634228751, "sha": "393fe700", "message": "chore(analysis/p_series): add 2 more versions (#9703)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": [["del", "theorem", "summable_one_rpow_inv", ["nnreal"]], ["add", "theorem", "summable_rpow", ["nnreal"]], ["add", "theorem", "summable_rpow_inv", ["nnreal"]], ["add", "theorem", "summable_nat_rpow", ["real"]]]}]}, {"timestamp": 1634217896, "sha": "aff49a63", "message": "feat(data/equiv/basic): prop_equiv_pempty (#9689)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "prop_equiv_pempty", ["equiv"]]]}]}, {"timestamp": 1634217894, "sha": "dc23dfa1", "message": "feat(data/equiv/basic): subtype_equiv_psigma (#9688)\n- [x] depends on: #9687\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "psigma_equiv_subtype", ["equiv"]], ["add", "def", "sigma_plift_equiv_subtype", ["equiv"]], ["add", "def", "sigma_ulift_plift_equiv_subtype", ["equiv"]]]}]}, {"timestamp": 1634217892, "sha": "9da33a89", "message": "refactor(algebra/floor): Rename floor and ceil functions (#9590)\nThis renames\n* `floor` -> `int.floor`\n* `ceil` -> `int.ceil`\n* `fract` -> `int.fract`\n* `nat_floor` -> `nat.floor`\n* `nat_ceil` -> `nat.ceil`", "changes": [{"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["del", "theorem", "abs_sub_lt_one_of_floor_eq_floor", []], ["del", "def", "ceil", []], ["del", "theorem", "ceil_add_int", []], ["del", "theorem", "ceil_coe", []], ["del", "theorem", "ceil_eq_iff", []], ["del", "theorem", "ceil_eq_on_Ioc'", []], ["del", "theorem", "ceil_eq_on_Ioc", []], ["del", "theorem", "ceil_le", []], ["del", "theorem", "ceil_le_floor_add_one", []], ["del", "theorem", "ceil_lt_add_one", []], ["del", "theorem", "ceil_mono", []], ["del", "theorem", "ceil_nonneg", []], ["del", "theorem", "ceil_pos", []], ["del", "theorem", "ceil_sub_int", []], ["del", "theorem", "ceil_zero", []], ["del", "def", "floor", []], ["del", "theorem", "floor_add_fract", []], ["del", "theorem", "floor_add_int", []], ["del", "theorem", "floor_add_nat", []], ["del", "theorem", "floor_coe", []], ["del", "theorem", "floor_eq_iff", []], ["del", "theorem", "floor_eq_on_Ico'", []], ["del", "theorem", "floor_eq_on_Ico", []], ["del", "theorem", "floor_fract", []], ["del", "theorem", "floor_int_add", []], ["del", "theorem", "floor_le", []], ["del", "theorem", "floor_lt", []], ["del", "theorem", "floor_lt_ceil_of_lt", []], ["del", "theorem", "floor_mono", []], ["del", "theorem", "floor_nat_add", []], ["del", "theorem", "floor_nonneg", []], ["del", "theorem", "floor_one", []], ["del", "theorem", "floor_pos", []], ["del", "theorem", "floor_sub_int", []], ["del", "theorem", "floor_sub_nat", []], ["del", "theorem", "floor_zero", []], ["del", "def", "fract", []], ["del", "theorem", "fract_add", []], ["del", "theorem", "fract_add_floor", []], ["del", "theorem", "fract_coe", []], ["del", "theorem", "fract_eq_fract", []], ["del", "theorem", "fract_eq_iff", []], ["del", "theorem", "fract_floor", []], ["del", "theorem", "fract_fract", []], ["del", "theorem", "fract_lt_one", []], ["del", "theorem", "fract_mul_nat", []], ["del", "theorem", "fract_nonneg", []], ["del", "theorem", "fract_zero", []], ["add", "theorem", "abs_sub_lt_one_of_floor_eq_floor", ["int"]], ["add", "def", "ceil", ["int"]], ["add", "theorem", "ceil_add_int", ["int"]], ["add", "theorem", "ceil_coe", ["int"]], ["add", "theorem", "ceil_eq_iff", ["int"]], ["add", "theorem", "ceil_eq_on_Ioc'", ["int"]], ["add", "theorem", "ceil_eq_on_Ioc", ["int"]], ["add", "theorem", "ceil_le", ["int"]], ["add", "theorem", "ceil_le_floor_add_one", ["int"]], ["add", "theorem", "ceil_lt_add_one", ["int"]], ["add", "theorem", "ceil_mono", ["int"]], ["add", "theorem", "ceil_nonneg", ["int"]], ["add", "theorem", "ceil_pos", ["int"]], ["add", "theorem", "ceil_sub_int", ["int"]], ["add", "theorem", "ceil_zero", ["int"]], ["add", "def", "floor", ["int"]], ["add", "theorem", "floor_add", ["int"]], ["add", "theorem", "floor_add_fract", ["int"]], ["add", "theorem", "floor_add_int", ["int"]], ["add", "theorem", "floor_add_nat", ["int"]], ["add", "theorem", "floor_coe", ["int"]], ["add", "theorem", "floor_eq_iff", ["int"]], ["add", "theorem", "floor_eq_on_Ico'", ["int"]], ["add", "theorem", "floor_eq_on_Ico", ["int"]], ["add", "theorem", "floor_fract", ["int"]], ["add", "theorem", "floor_int_add", ["int"]], ["add", "theorem", "floor_le", ["int"]], ["add", "theorem", "floor_lt", ["int"]], ["add", "theorem", "floor_lt_ceil_of_lt", ["int"]], ["add", "theorem", "floor_mono", ["int"]], ["add", "theorem", "floor_nonneg", ["int"]], ["add", "theorem", "floor_one", ["int"]], ["add", "theorem", "floor_pos", ["int"]], ["add", "theorem", "floor_sub_int", ["int"]], ["add", "theorem", "floor_sub_nat", ["int"]], ["add", "theorem", "floor_zero", ["int"]], ["add", "def", "fract", ["int"]], ["add", "theorem", "fract_add", ["int"]], ["add", "theorem", "fract_add_floor", ["int"]], ["add", "theorem", "fract_coe", ["int"]], ["add", "theorem", "fract_eq_fract", ["int"]], ["add", "theorem", "fract_eq_iff", ["int"]], ["add", "theorem", "fract_floor", ["int"]], ["add", "theorem", "fract_fract", ["int"]], ["add", "theorem", "fract_lt_one", ["int"]], ["add", "theorem", "fract_mul_nat", ["int"]], ["add", "theorem", "fract_nonneg", ["int"]], ["add", "theorem", "fract_zero", ["int"]], ["add", "theorem", "le_ceil", ["int"]], ["add", "theorem", "le_floor", ["int"]], ["add", "theorem", "lt_ceil", ["int"]], ["add", "theorem", "lt_floor_add_one", ["int"]], ["add", "theorem", "lt_succ_floor", ["int"]], ["add", "theorem", "sub_one_lt_floor", ["int"]], ["del", "theorem", "le_ceil", []], ["del", "theorem", "le_floor", []], ["del", "theorem", "le_nat_ceil", []], ["del", "theorem", "le_nat_floor_iff", []], ["del", "theorem", "le_nat_floor_of_le", []], ["del", "theorem", "le_of_nat_ceil_le", []], ["del", "theorem", "lt_ceil", []], ["del", "theorem", "lt_floor_add_one", []], ["del", "theorem", "lt_nat_ceil", []], ["del", "theorem", "lt_nat_floor_add_one", []], ["del", "theorem", "lt_of_lt_nat_floor", []], ["del", "theorem", "lt_of_nat_ceil_lt", []], ["del", "theorem", "lt_succ_floor", []], ["add", "def", "ceil", ["nat"]], ["add", "theorem", "ceil_add_nat", ["nat"]], ["add", "theorem", "ceil_coe", ["nat"]], ["add", "theorem", "ceil_eq_zero", ["nat"]], ["add", "theorem", "ceil_le", ["nat"]], ["add", "theorem", "ceil_lt_add_one", ["nat"]], ["add", "theorem", "ceil_mono", ["nat"]], ["add", "theorem", "ceil_zero", ["nat"]], ["add", "def", "floor", ["nat"]], ["add", "theorem", "floor_add_nat", ["nat"]], ["add", "theorem", "floor_coe", ["nat"]], ["add", "theorem", "floor_eq_zero_iff", ["nat"]], ["add", "theorem", "floor_le", ["nat"]], ["add", "theorem", "floor_lt_ceil_of_lt_of_pos", ["nat"]], ["add", "theorem", "floor_lt_iff", ["nat"]], ["add", "theorem", "floor_mono", ["nat"]], ["add", "theorem", "floor_of_nonpos", ["nat"]], ["add", "theorem", "floor_pos", ["nat"]], ["add", "theorem", "floor_zero", ["nat"]], ["add", "theorem", "le_ceil", ["nat"]], ["add", "theorem", "le_floor_iff", ["nat"]], ["add", "theorem", "le_floor_of_le", ["nat"]], ["add", "theorem", "le_of_ceil_le", ["nat"]], ["add", "theorem", "lt_ceil", ["nat"]], ["add", "theorem", "lt_floor_add_one", ["nat"]], ["add", "theorem", "lt_of_ceil_lt", ["nat"]], ["add", "theorem", "lt_of_lt_floor", ["nat"]], ["add", "theorem", "pos_of_floor_pos", ["nat"]], ["add", "theorem", "sub_one_lt_floor", ["nat"]], ["del", "def", "nat_ceil", []], ["del", "theorem", "nat_ceil_add_nat", []], ["del", "theorem", "nat_ceil_coe", []], ["del", "theorem", "nat_ceil_eq_zero", []], ["del", "theorem", "nat_ceil_le", []], ["del", "theorem", "nat_ceil_lt_add_one", []], ["del", "theorem", "nat_ceil_mono", []], ["del", "theorem", "nat_ceil_zero", []], ["del", "def", "nat_floor", []], ["del", "theorem", "nat_floor_add_nat", []], ["del", "theorem", "nat_floor_coe", []], ["del", "theorem", "nat_floor_eq_zero_iff", []], ["del", "theorem", "nat_floor_le", []], ["del", "theorem", "nat_floor_lt_iff", []], ["del", "theorem", "nat_floor_lt_nat_ceil_of_lt_of_pos", []], ["del", "theorem", "nat_floor_mono", []], ["del", "theorem", "nat_floor_of_nonpos", []], ["del", "theorem", "nat_floor_pos", []], ["del", "theorem", "nat_floor_zero", []], ["del", "theorem", "pos_of_nat_floor_pos", []], ["del", "theorem", "sub_one_lt_floor", []], ["del", "theorem", "sub_one_lt_nat_floor", []]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_abs.lean", "newPath": "src/number_theory/class_number/admissible_abs.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1634197881, "sha": "264ff903", "message": "refactor(analysis/special_functions): generalise nth-root lemmas (#9704)\n`exists_pow_nat_eq` and `exists_eq_mul_self` both hold for any algebraically closed field, so pull them out into `is_alg_closed/basic` and generalise appropriately\nCloses #4674", "changes": [{"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["del", "theorem", "exists_eq_mul_self", ["complex"]], ["del", "theorem", "exists_pow_nat_eq", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["add", "theorem", "exists_eq_mul_self", ["is_alg_closed"]], ["add", "theorem", "exists_pow_nat_eq", ["is_alg_closed"]]]}]}, {"timestamp": 1634197879, "sha": "8d67d9ae", "message": "chore(category_theory/sites/*): Generalize universes (#9675)\nThis generalizes the universe levels for sheaves to some extent.\nThis will allow us to now consider sheaves on `C : Type u` (satisfying `[category.{v} C]` and endowed with a Grothendieck topology) taking values in an arbitrary category with no additional universe restrictions.\nThe only part of the theory which has not been generalized is the equivalence of the sheaf condition with the condition involving Yoneda. To generalize this would require composing with `ulift_functors`'s, which we may or may not want to do.", "changes": [{"oldPath": "src/category_theory/sites/closed.lean", "newPath": "src/category_theory/sites/closed.lean", "changes": [["mod", "def", "closed_sieves", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["mod", "def", "Sheaf_equiv_SheafOfTypes", ["category_theory"]], ["mod", "theorem", "is_sheaf_iff_is_sheaf_of_type", ["category_theory"]], ["mod", "def", "is_sheaf_for_is_sheaf_for'", ["category_theory", "presheaf"]], ["mod", "theorem", "is_sheaf_iff_is_sheaf_forget", ["category_theory", "presheaf"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["mod", "def", "SheafOfTypes", ["category_theory"]], ["mod", "def", "SheafOfTypes_bot_equiv", ["category_theory"]], ["mod", "def", "SheafOfTypes_to_presheaf", ["category_theory"]], ["mod", "def", "first_obj", ["category_theory", "equalizer"]], ["mod", "def", "second_obj", ["category_theory", "equalizer", "presieve"]], ["mod", "def", "second_obj", ["category_theory", "equalizer", "sieve"]], ["mod", "theorem", "extension_iff_amalgamation", ["category_theory", "presieve"]], ["add", "theorem", "comp_prersheaf_map_comp", ["category_theory", "presieve", "family_of_elements"]], ["add", "theorem", "comp_presheaf_map_id", ["category_theory", "presieve", "family_of_elements"]], ["add", "theorem", "comp_presheaf_map", ["category_theory", "presieve", "family_of_elements", "is_amalgamation"]], ["mod", "def", "family_of_elements", ["category_theory", "presieve"]], ["mod", "def", "is_separated", ["category_theory", "presieve"]], ["mod", "def", "is_separated_for", ["category_theory", "presieve"]], ["mod", "theorem", "is_separated_for_top", ["category_theory", "presieve"]], ["mod", "theorem", "is_separated_of_is_sheaf", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for", ["category_theory", "presieve", "is_sheaf"]], ["mod", "def", "is_sheaf", ["category_theory", "presieve"]], ["mod", "theorem", "functor_inclusion_comp_extend", ["category_theory", "presieve", "is_sheaf_for"]], ["mod", "theorem", "hom_ext", ["category_theory", "presieve", "is_sheaf_for"]], ["mod", "theorem", "unique_extend", ["category_theory", "presieve", "is_sheaf_for"]], ["mod", "def", "is_sheaf_for", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for_iff_yoneda_sheaf_condition", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for_iso", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for_singleton_iso", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for_subsieve", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for_subsieve_aux", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for_top_sieve", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_iso", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_of_le", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_of_yoneda", ["category_theory", "presieve"]], ["mod", "def", "nat_trans_equiv_compatible_family", ["category_theory", "presieve"]], ["mod", "def", "yoneda_sheaf_condition", ["category_theory", "presieve"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/sites.lean", "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": [["mod", "def", "pi_inters_to_second_obj", ["Top", "presheaf", "presieve_of_covering"]], ["mod", "def", "pi_opens_to_first_obj", ["Top", "presheaf", "presieve_of_covering"]]]}]}, {"timestamp": 1634189774, "sha": "34f34942", "message": "chore(set_theory/cardinal): rename `is_empty`/`nonempty` lemmas (#9668)\n* add `is_empty_pi`, `is_empty_prod`, `is_empty_pprod`, `is_empty_sum`;\n* rename `cardinal.eq_zero_of_is_empty` to `cardinal.mk_eq_zero`, make\n the argument `α : Type u` explicit;\n* rename `cardinal.eq_zero_iff_is_empty` to `cardinal.mk_eq_zero_iff`;\n* rename `cardinal.ne_zero_iff_nonempty` to `cardinal.mk_ne_zero_iff`;\n* add `@[simp]` lemma `cardinal.mk_ne_zero`;\n* fix compile errors caused by these changes, golf a few proofs.", "changes": [{"oldPath": "src/data/W/cardinal.lean", "newPath": "src/data/W/cardinal.lean", "changes": []}, {"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": [["add", "theorem", "is_empty_pi", []], ["add", "theorem", "is_empty_pprod", []], ["add", "theorem", "is_empty_prod", []], ["add", "theorem", "is_empty_psum", []], ["add", "theorem", "is_empty_sum", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["del", "theorem", "eq_zero_iff_is_empty", ["cardinal"]], ["del", "theorem", "eq_zero_of_is_empty", ["cardinal"]], ["add", "theorem", "mk_eq_zero", ["cardinal"]], ["add", "theorem", "mk_eq_zero_iff", ["cardinal"]], ["add", "theorem", "mk_ne_zero", ["cardinal"]], ["add", "theorem", "mk_ne_zero_iff", ["cardinal"]], ["del", "theorem", "ne_zero_iff_nonempty", ["cardinal"]], ["mod", "theorem", "omega_ne_zero", ["cardinal"]], ["mod", "theorem", "prod_eq_zero", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1634184243, "sha": "33406172", "message": "feat(algebra/bounds): `smul` of upper/lower bounds (#9078)\nThis relates `lower_bounds (a • s)`/`upper_bounds (a • s)` and `a • lower_bounds s`/`a • upper_bounds s`.", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": [["add", "theorem", "smul_of_nonneg", ["bdd_above"]], ["add", "theorem", "smul_of_nonpos", ["bdd_above"]], ["add", "theorem", "bdd_above_smul_iff_of_neg", []], ["add", "theorem", "bdd_above_smul_iff_of_pos", []], ["add", "theorem", "smul_of_nonneg", ["bdd_below"]], ["add", "theorem", "smul_of_nonpos", ["bdd_below"]], ["add", "theorem", "bdd_below_smul_iff_of_neg", []], ["add", "theorem", "bdd_below_smul_iff_of_pos", []], ["add", "theorem", "lower_bounds_smul_of_neg", []], ["add", "theorem", "lower_bounds_smul_of_pos", []], ["add", "theorem", "smul_lower_bounds_subset_lower_bounds_smul", []], ["add", "theorem", "smul_lower_bounds_subset_upper_bounds_smul", []], ["add", "theorem", "smul_upper_bounds_subset_lower_bounds_smul", []], ["add", "theorem", "smul_upper_bounds_subset_upper_bounds_smul", []], ["add", "theorem", "upper_bounds_smul_of_neg", []], ["add", "theorem", "upper_bounds_smul_of_pos", []]]}]}, {"timestamp": 1634160572, "sha": "19da20b0", "message": "feat(combinatorics/hall): generalized Hall's Marriage Theorem (#7825)\nUsed the generalized Kőnig's lemma to prove a version of Hall's Marriage Theorem with the `fintype` constraint on the index type removed. The original `fintype` version is moved into `hall/finite.lean`, and the infinite version is put in `hall/basic.lean`. They are in separate files because the infinite version pulls in `topology.category.Top.limits`, which is a rather large dependency.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/hall/basic.lean", "changes": [["add", "theorem", "all_card_le_bUnion_card_iff_exists_injective", ["finset"]], ["add", "theorem", "all_card_le_filter_rel_iff_exists_injective", ["fintype"]], ["add", "theorem", "all_card_le_rel_image_card_iff_exists_injective", ["fintype"]], ["add", "def", "hall_finset_directed_order", []], ["add", "def", "hall_matchings_functor", []], ["add", "theorem", "nonempty", ["hall_matchings_on"]], ["add", "def", "restrict", ["hall_matchings_on"]], ["add", "def", "hall_matchings_on", []]]}, {"oldPath": "src/combinatorics/hall.lean", "newPath": "src/combinatorics/hall/finite.lean", "changes": [["add", "theorem", "all_card_le_bUnion_card_iff_exists_injective'", ["finset"]], ["del", "theorem", "all_card_le_bUnion_card_iff_exists_injective", ["finset"]], ["del", "theorem", "all_card_le_filter_rel_iff_exists_injective", ["fintype"]], ["del", "theorem", "all_card_le_rel_image_card_iff_exists_injective", ["fintype"]]]}]}, {"timestamp": 1634147880, "sha": "5db83f9c", "message": "feat(set_theory/cardinal): add lemmas (#9697)\nWe add three easy lemmas about cardinals living in different universes.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "add", ["cardinal"]], ["mod", "theorem", "lift_umax", ["cardinal"]], ["add", "theorem", "mul", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1634147879, "sha": "3faf0f5d", "message": "chore(data/real/irrational): add more lemmas (#9684)", "changes": [{"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["add", "theorem", "not_irrational", ["int"]], ["add", "theorem", "add_int", ["irrational"]], ["add", "theorem", "add_nat", ["irrational"]], ["add", "theorem", "div_int", ["irrational"]], ["add", "theorem", "div_nat", ["irrational"]], ["add", "theorem", "div_rat", ["irrational"]], ["add", "theorem", "int_add", ["irrational"]], ["add", "theorem", "int_div", ["irrational"]], ["add", "theorem", "int_mul", ["irrational"]], ["add", "theorem", "int_sub", ["irrational"]], ["add", "theorem", "mul_int", ["irrational"]], ["add", "theorem", "mul_nat", ["irrational"]], ["add", "theorem", "nat_add", ["irrational"]], ["add", "theorem", "nat_div", ["irrational"]], ["add", "theorem", "nat_mul", ["irrational"]], ["add", "theorem", "nat_sub", ["irrational"]], ["add", "theorem", "ne_int", ["irrational"]], ["add", "theorem", "ne_nat", ["irrational"]], ["add", "theorem", "ne_one", ["irrational"]], ["add", "theorem", "ne_rat", ["irrational"]], ["add", "theorem", "ne_zero", ["irrational"]], ["add", "theorem", "of_add_int", ["irrational"]], ["add", "theorem", "of_add_nat", ["irrational"]], ["add", "theorem", "of_div_int", ["irrational"]], ["add", "theorem", "of_div_nat", ["irrational"]], ["add", "theorem", "of_div_rat", ["irrational"]], ["add", "theorem", "of_int_add", ["irrational"]], ["add", "theorem", "of_int_div", ["irrational"]], ["add", "theorem", "of_int_mul", ["irrational"]], ["add", "theorem", "of_int_sub", ["irrational"]], ["add", "theorem", "of_mul_int", ["irrational"]], ["add", "theorem", "of_mul_nat", ["irrational"]], ["add", "theorem", "of_nat_add", ["irrational"]], ["add", "theorem", "of_nat_div", ["irrational"]], ["add", "theorem", "of_nat_mul", ["irrational"]], ["add", "theorem", "of_nat_sub", ["irrational"]], ["add", "theorem", "of_sub_int", ["irrational"]], ["add", "theorem", "of_sub_nat", ["irrational"]], ["add", "theorem", "rat_div", ["irrational"]], ["add", "theorem", "sub_int", ["irrational"]], ["add", "theorem", "sub_nat", ["irrational"]], ["add", "theorem", "irrational_add_int_iff", []], ["add", "theorem", "irrational_add_nat_iff", []], ["add", "theorem", "irrational_div_int_iff", []], ["add", "theorem", "irrational_div_nat_iff", []], ["add", "theorem", "irrational_div_rat_iff", []], ["add", "theorem", "irrational_int_add_iff", []], ["add", "theorem", "irrational_int_div_iff", []], ["add", "theorem", "irrational_int_mul_iff", []], ["add", "theorem", "irrational_int_sub_iff", []], ["add", "theorem", "irrational_mul_int_iff", []], ["add", "theorem", "irrational_mul_nat_iff", []], ["add", "theorem", "irrational_mul_rat_iff", []], ["add", "theorem", "irrational_nat_add_iff", []], ["add", "theorem", "irrational_nat_div_iff", []], ["add", "theorem", "irrational_nat_mul_iff", []], ["add", "theorem", "irrational_nat_sub_iff", []], ["add", "theorem", "irrational_rat_div_iff", []], ["add", "theorem", "irrational_rat_mul_iff", []], ["add", "theorem", "irrational_sub_int_iff", []], ["add", "theorem", "irrational_sub_nat_iff", []], ["add", "theorem", "not_irrational", ["nat"]], ["mod", "theorem", "not_irrational", ["rat"]]]}]}, {"timestamp": 1634147878, "sha": "096923c0", "message": "feat(topology/connected.lean): add theorems about connectedness o… (#9633)\nfeat(src/topology/connected.lean): add theorems about connectedness of closure\nadd two theorems is_preconnected.inclosure and is_connected.closure\n\twhich formalize that if a set s is (pre)connected\n\tand a set t satisfies s ⊆ t ⊆ closure s,\n\tthen t is (pre)connected as well\nmodify is_preconnected.closure and is_connected.closure\n\tto take these theorems into account\nadd a few comments for theorems in the code", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "subset_closure", ["is_connected"]], ["add", "theorem", "subset_closure", ["is_preconnected"]]]}]}, {"timestamp": 1634140109, "sha": "32e1b6c1", "message": "chore(ring_theory/ideal): improve 1st isomorphism theorem docstrings (#9699)\nFix a typo and add **bold** to the theorem names.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1634140108, "sha": "0ce44420", "message": "refactor(algebra/group_power/order): relax linearity condition on `one_lt_pow` (#9696)\n`[linear_ordered_semiring R]` becomes `[ordered_semiring R] [nontrivial R]`. I also golf the proof and move ìt from `algebra.field_power` to `algebra.group_power.order`, where it belongs.", "changes": [{"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["mod", "theorem", "one_lt_fpow", []], ["del", "theorem", "one_lt_pow", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "one_lt_pow", []]]}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}]}, {"timestamp": 1634140107, "sha": "bc9e38f4", "message": "refactor(linear_algebra/dimension): remove some nontrivial assumptions (#9693)\nWe remove some `nontrivial R` assumptions.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}]}, {"timestamp": 1634140105, "sha": "313db47a", "message": "feat(measure_theory/covering/besicovitch): remove measurability assumptions (#9679)\nFor applications, it is important to allow non-measurable sets in the Besicovitch covering theorem. We tweak the proof to allow this.\nAlso give an improved statement that is easier to use in applications.", "changes": [{"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": [["del", "theorem", "exists_disjoint_closed_ball_covering", ["besicovitch"]], ["add", "theorem", "exists_disjoint_closed_ball_covering_ae", ["besicovitch"]], ["add", "theorem", "exists_disjoint_closed_ball_covering_ae_aux", ["besicovitch"]], ["add", "theorem", "exists_disjoint_closed_ball_covering_ae_of_finite_measure_aux", ["besicovitch"]], ["del", "theorem", "exists_disjoint_closed_ball_covering_of_finite_measure", ["besicovitch"]]]}]}, {"timestamp": 1634140104, "sha": "f29755b9", "message": "refactor(data/set/pairwise): generalize `pairwise_disjoint` to `semilattice_inf_bot` (#9670)\n`set.pairwise_disjoint` was only defined for `set (set α)`. Now, it's defined for `set α` where `semilattice_inf_bot α`. I also\n* move it to `data.set.pairwise` because it's really not about `set` anymore.\n* drop the `set` namespace.\n* add more general elimination rules and rename the current one to `elim_set`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "elim", ["set", "pairwise_disjoint"]], ["del", "theorem", "range", ["set", "pairwise_disjoint"]], ["del", "theorem", "subset", ["set", "pairwise_disjoint"]], ["del", "def", "pairwise_disjoint", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "elim'", ["set", "pairwise_disjoint"]], ["add", "theorem", "elim", ["set", "pairwise_disjoint"]], ["add", "theorem", "elim_set", ["set", "pairwise_disjoint"]], ["add", "theorem", "range", ["set", "pairwise_disjoint"]], ["add", "theorem", "subset", ["set", "pairwise_disjoint"]], ["add", "def", "pairwise_disjoint", ["set"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}]}, {"timestamp": 1634140102, "sha": "9ee2a50a", "message": "fix(group_theory/group_action): `has_scalar.comp.is_scalar_tower` is a dangerous instance (#9656)\nThis issue came up in the discussion of #9535: in certain cases, the instance `has_scalar.comp.is_scalar_tower` is fed too many metavariables and starts recursing infinitely. So I believe we should demote it from being an instance. Example trace:\n```plain\n[class_instances] (0) ?x_0 : has_scalar S P.quotient := @quotient.has_scalar ?x_1 ?x_2 ?x_3 ?x_4 ?x_5 ?x_6 ?x_7 ?x_8 ?x_9 ?x_10\n[class_instances] (1) ?x_9 : @is_scalar_tower S R M ?x_7\n (@smul_with_zero.to_has_scalar R M\n (@mul_zero_class.to_has_zero R\n (@mul_zero_one_class.to_mul_zero_class R\n (@monoid_with_zero.to_mul_zero_one_class R (@semiring.to_monoid_with_zero R (@ring.to_semiring R _inst_1)))))\n (@add_zero_class.to_has_zero M\n (@add_monoid.to_add_zero_class M\n (@add_comm_monoid.to_add_monoid M (@add_comm_group.to_add_comm_monoid M _inst_2))))\n (@mul_action_with_zero.to_smul_with_zero R M (@semiring.to_monoid_with_zero R (@ring.to_semiring R _inst_1))\n (@add_zero_class.to_has_zero M\n (@add_monoid.to_add_zero_class M\n (@add_comm_monoid.to_add_monoid M (@add_comm_group.to_add_comm_monoid M _inst_2))))\n (@module.to_mul_action_with_zero R M (@ring.to_semiring R _inst_1)\n (@add_comm_group.to_add_comm_monoid M _inst_2)\n _inst_3)))\n ?x_8 := @has_scalar.comp.is_scalar_tower ?x_11 ?x_12 ?x_13 ?x_14 ?x_15 ?x_16 ?x_17 ?x_18 ?x_19\n[class_instances] (2) ?x_18 : @is_scalar_tower ?x_11 R M ?x_15\n (@smul_with_zero.to_has_scalar R M\n (@mul_zero_class.to_has_zero R\n (@mul_zero_one_class.to_mul_zero_class R\n (@monoid_with_zero.to_mul_zero_one_class R (@semiring.to_monoid_with_zero R (@ring.to_semiring R _inst_1)))))\n (@add_zero_class.to_has_zero M\n (@add_monoid.to_add_zero_class M\n (@add_comm_monoid.to_add_monoid M (@add_comm_group.to_add_comm_monoid M _inst_2))))\n (@mul_action_with_zero.to_smul_with_zero R M (@semiring.to_monoid_with_zero R (@ring.to_semiring R _inst_1))\n (@add_zero_class.to_has_zero M\n (@add_monoid.to_add_zero_class M\n (@add_comm_monoid.to_add_monoid M (@add_comm_group.to_add_comm_monoid M _inst_2))))\n (@module.to_mul_action_with_zero R M (@ring.to_semiring R _inst_1)\n (@add_comm_group.to_add_comm_monoid M _inst_2)\n _inst_3)))\n ?x_16 := @has_scalar.comp.is_scalar_tower ?x_20 ?x_21 ?x_22 ?x_23 ?x_24 ?x_25 ?x_26 ?x_27 ?x_28\n...\n```\nYou'll see that the places where `has_scalar.comp.is_scalar_tower` expects a `has_scalar.comp` are in fact metavariables, so they always unify.\nI have included a test case where the instance looks innocuous enough in its parameters: everything is phrased in terms of either irreducible defs, implicit variables or instance implicits, to argue that the issue really lies with `has_scalar.comp.is_scalar_tower`. Moreover, I don't think we lose a lot by demoting the latter from an instance since `has_scalar.comp` isn't an instance either.", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "is_scalar_tower", ["has_scalar", "comp"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": null, "newPath": "test/has_scalar_comp_loop.lean", "changes": [["add", "def", "foo", []]]}]}, {"timestamp": 1634140101, "sha": "e8427b03", "message": "feat(ring_theory/ideal/operation): add some extra definitions in the `double_quot` section (#9649)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "def", "quot_quot_equiv_comm", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_comp_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_comm_symm", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_sup_quot_quot_mk", ["double_quot"]], ["add", "theorem", "quot_quot_equiv_quot_sup_symm_quot_quot_mk", ["double_quot"]]]}]}, {"timestamp": 1634140100, "sha": "a7ec6336", "message": "chore(algebra/*): add missing lemmas about `copy` on subobjects (#9624)\nThis adds `coe_copy` and `copy_eq` to `sub{mul_action,group,ring,semiring,field,module,algebra,lie_module}`, to match the lemmas already present on `submonoid`.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "coe_copy", ["subalgebra"]], ["add", "theorem", "copy_eq", ["subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "coe_copy", ["lie_submodule"]], ["mod", "theorem", "coe_submodule_injective", ["lie_submodule"]], ["add", "theorem", "copy_eq", ["lie_submodule"]]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "coe_copy", ["submodule"]], ["add", "theorem", "copy_eq", ["submodule"]]]}, {"oldPath": "src/data/set_like/basic.lean", "newPath": "src/data/set_like/basic.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "coe_copy", ["subfield"]], ["add", "theorem", "copy_eq", ["subfield"]]]}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": [["add", "theorem", "coe_copy", ["sub_mul_action"]], ["add", "theorem", "copy_eq", ["sub_mul_action"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "coe_copy", ["subgroup"]], ["add", "theorem", "copy_eq", ["subgroup"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "coe_copy", ["subring"]], ["add", "theorem", "copy_eq", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "coe_copy", ["subsemiring"]], ["add", "theorem", "copy_eq", ["subsemiring"]]]}]}, {"timestamp": 1634140098, "sha": "577cac15", "message": "feat(algebra/order/nonneg): properties about the nonnegative cone (#9598)\n* Provide various classes on the type `{x : α // 0 ≤ x}` where `α` has some order (and algebraic) structure.\n* Use this to automatically derive the classes on `nnreal`.\n* We currently do not yet define `conditionally_complete_linear_order_bot nnreal` using nonneg, since that causes some errors (I think Lean then thinks that there are two orders that are not definitionally equal (unfolding only instances)).\n* We leave a bunch of `example` lines in `nnreal` to show that `nnreal` has all the old classes. These could also be removed, if desired.\n* We currently only give some instances and simp/norm_cast lemmas. This could be expanded in the future.", "changes": [{"oldPath": null, "newPath": "src/algebra/order/nonneg.lean", "changes": [["add", "def", "coe_add_monoid_hom", ["nonneg"]], ["add", "def", "coe_ring_hom", ["nonneg"]], ["add", "theorem", "coe_to_nonneg", ["nonneg"]], ["add", "theorem", "inv_mk", ["nonneg"]], ["add", "theorem", "mk_add_mk", ["nonneg"]], ["add", "theorem", "mk_div_mk", ["nonneg"]], ["add", "theorem", "mk_eq_one", ["nonneg"]], ["add", "theorem", "mk_eq_zero", ["nonneg"]], ["add", "theorem", "mk_mul_mk", ["nonneg"]], ["add", "theorem", "mk_sub_mk", ["nonneg"]], ["add", "theorem", "nsmul_coe", ["nonneg"]], ["add", "def", "to_nonneg", ["nonneg"]], ["add", "theorem", "to_nonneg_coe", ["nonneg"]], ["add", "theorem", "to_nonneg_le", ["nonneg"]], ["add", "theorem", "to_nonneg_lt", ["nonneg"]], ["add", "theorem", "to_nonneg_of_nonneg", ["nonneg"]]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "le_iff_exists_nonneg_add", []]]}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "nsmul_coe", ["nnreal"]]]}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": []}]}, {"timestamp": 1634131249, "sha": "aa674217", "message": "lint(tactic/lint/misc): do not lint autogenerated proofs for bad universes (#9676)", "changes": [{"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1634131248, "sha": "ea360f22", "message": "feat(group_theory/sylow): Frattini's Argument (#9662)\nFrattini's argument: If `N` is a normal subgroup of `G`, and `P` is a Sylow `p`-subgroup of `N`, then `PN=G`.\nThe proof is an application of Sylow's second theorem (all Sylow `p`-subgroups of `N` are conjugate).", "changes": [{"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": [["add", "theorem", "conj_normal_coe", ["mul_aut"]]]}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "theorem", "pointwise_smul_def", ["subgroup"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "normalizer_sup_eq_top", ["sylow"]], ["add", "theorem", "pointwise_smul_def", ["sylow"]], ["add", "theorem", "smul_def", ["sylow"]]]}]}, {"timestamp": 1634131246, "sha": "acc1d4bd", "message": "feat(analysis/normed_space/SemiNormedGroup/kernels) : add lemmas (#9654)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": [["add", "theorem", "explicit_cokernel_desc_comp_eq_desc", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_desc_comp_eq_zero", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_desc_norm_noninc", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_desc_zero", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_π_apply_dom_eq_zero", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_π_desc_apply", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_π_surjective", ["SemiNormedGroup"]]]}]}, {"timestamp": 1634131245, "sha": "6ea59e36", "message": "feat(category_theory/sites/sieves): Added functor pushforward (#9647)\nDefined `sieve.functor_pushforward`.\nProved that `sieve.functor_pushforward` and `sieve.functor_pullback` forms a Galois connection.\nProvided some lemmas about `sieve.functor_pushforward`, `sieve.functor_pullback` regarding the lattice structure.", "changes": [{"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["mod", "def", "functor_pullback", ["category_theory", "presieve"]], ["mod", "theorem", "functor_pullback_id", ["category_theory", "presieve"]], ["mod", "theorem", "functor_pullback_mem", ["category_theory", "presieve"]], ["add", "def", "functor_pushforward", ["category_theory", "presieve"]], ["add", "theorem", "functor_pushforward_comp", ["category_theory", "presieve"]], ["add", "theorem", "image_mem_functor_pushforward", ["category_theory", "presieve"]], ["add", "def", "ess_surj_full_functor_galois_insertion", ["category_theory", "sieve"]], ["add", "def", "fully_faithful_functor_galois_coinsertion", ["category_theory", "sieve"]], ["add", "theorem", "functor_galois_connection", ["category_theory", "sieve"]], ["mod", "def", "functor_pullback", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_arrows", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_bot", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_comp", ["category_theory", "sieve"]], ["mod", "theorem", "functor_pullback_id", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_inter", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_monotone", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_pushforward_le", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_top", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_union", ["category_theory", "sieve"]], ["add", "def", "functor_pushforward", ["category_theory", "sieve"]], ["add", "theorem", "functor_pushforward_bot", ["category_theory", "sieve"]], ["add", "theorem", "functor_pushforward_comp", ["category_theory", "sieve"]], ["add", "theorem", "functor_pushforward_extend_eq", ["category_theory", "sieve"]], ["add", "theorem", "functor_pushforward_id", ["category_theory", "sieve"]], ["add", "theorem", "functor_pushforward_monotone", ["category_theory", "sieve"]], ["add", "theorem", "functor_pushforward_union", ["category_theory", "sieve"]], ["add", "theorem", "image_mem_functor_pushforward", ["category_theory", "sieve"]], ["add", "theorem", "le_functor_pushforward_pullback", ["category_theory", "sieve"]]]}]}, {"timestamp": 1634131244, "sha": "17d8928b", "message": "feat(algebra/graded_monoid,algebra/direct_sum/ring): provide lemmas about powers in graded monoids (#9631)\nThe key results are `direct_sum.of_pow` and `graded_monoid.mk_pow`.", "changes": [{"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["add", "theorem", "of_eq_of_graded_monoid_eq", ["direct_sum"]], ["add", "theorem", "of_pow", ["direct_sum"]]]}, {"oldPath": "src/algebra/graded_monoid.lean", "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "def", "gnpow_rec", ["graded_monoid", "gmonoid"]], ["add", "theorem", "gnpow_rec_succ", ["graded_monoid", "gmonoid"]], ["add", "theorem", "gnpow_rec_zero", ["graded_monoid", "gmonoid"]], ["add", "theorem", "mk_pow", ["graded_monoid"]]]}]}, {"timestamp": 1634131243, "sha": "edf07cfb", "message": "feat(topology/sheaves/sheaf_condition/sites): Connect sheaves on sites to sheaves on spaces (#9609)\nShow that a sheaf on the site `opens X` is the same thing as a sheaf on the space `X`. This finally connects the theory of sheaves on sites to sheaves on spaces, which were previously independent of each other.", "changes": [{"oldPath": null, "newPath": "src/topology/sheaves/sheaf_condition/sites.lean", "changes": [["add", "def", "Sheaf_sites_to_sheaf_spaces", ["Top", "presheaf"]], ["add", "def", "Sheaf_spaces_equivelence_sheaf_sites", ["Top", "presheaf"]], ["add", "def", "Sheaf_spaces_to_sheaf_sites", ["Top", "presheaf"]], ["add", "def", "diagram_nat_iso", ["Top", "presheaf", "covering_of_presieve"]], ["add", "theorem", "first_obj_iso_comp_left_res_eq", ["Top", "presheaf", "covering_of_presieve"]], ["add", "theorem", "first_obj_iso_comp_right_res_eq", ["Top", "presheaf", "covering_of_presieve"]], ["add", "def", "first_obj_iso_pi_opens", ["Top", "presheaf", "covering_of_presieve"]], ["add", "theorem", "first_obj_iso_pi_opens_π", ["Top", "presheaf", "covering_of_presieve"]], ["add", "theorem", "fork_map_comp_first_obj_iso_pi_opens_eq", ["Top", "presheaf", "covering_of_presieve"]], ["add", "def", "postcompose_diagram_fork_hom", ["Top", "presheaf", "covering_of_presieve"]], ["add", "def", "postcompose_diagram_fork_iso", ["Top", "presheaf", "covering_of_presieve"]], ["add", "def", "second_obj_iso_pi_inters", ["Top", "presheaf", "covering_of_presieve"]], ["add", "theorem", "second_obj_iso_pi_inters_π", ["Top", "presheaf", "covering_of_presieve"]], ["add", "theorem", "supr_eq_of_mem_grothendieck", ["Top", "presheaf", "covering_of_presieve"]], ["add", "def", "covering_of_presieve", ["Top", "presheaf"]], ["add", "theorem", "covering_of_presieve_apply", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_sites_iff_is_sheaf_spaces", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_sites_of_is_sheaf_spaces", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_spaces_of_is_sheaf_sites", ["Top", "presheaf"]], ["add", "def", "first_obj_to_pi_opens", ["Top", "presheaf", "presieve_of_covering"]], ["add", "theorem", "fork_map_comp_first_map_to_pi_opens_eq", ["Top", "presheaf", "presieve_of_covering"]], ["add", "theorem", "fork_ι_comp_pi_opens_to_first_obj_to_pi_opens_eq", ["Top", "presheaf", "presieve_of_covering"]], ["add", "def", "hom_of_index", ["Top", "presheaf", "presieve_of_covering"]], ["add", "def", "index_of_hom", ["Top", "presheaf", "presieve_of_covering"]], ["add", "theorem", "index_of_hom_spec", ["Top", "presheaf", "presieve_of_covering"]], ["add", "theorem", "mem_grothendieck_topology", ["Top", "presheaf", "presieve_of_covering"]], ["add", "def", "pi_inters_to_second_obj", ["Top", "presheaf", "presieve_of_covering"]], ["add", "def", "pi_opens_to_first_obj", ["Top", "presheaf", "presieve_of_covering"]], ["add", "theorem", "pi_opens_to_first_obj_comp_fist_map_eq", ["Top", "presheaf", "presieve_of_covering"]], ["add", "theorem", "pi_opens_to_first_obj_comp_second_map_eq", ["Top", "presheaf", "presieve_of_covering"]], ["add", "theorem", "res_comp_pi_opens_to_first_obj_eq", ["Top", "presheaf", "presieve_of_covering"]], ["add", "def", "presieve_of_covering", ["Top", "presheaf"]]]}]}, {"timestamp": 1634131241, "sha": "f238733a", "message": "feat(algebra/order/smul): Monotonicity of scalar multiplication (#9558)\nAlso prove `smul_nonneg`, `smul_pos` and variants.", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": [["add", "theorem", "antitone_smul_left", []], ["add", "def", "smul_left_dual", ["order_iso"]], ["add", "theorem", "smul_nonneg_of_nonpos_of_nonpos", []], ["add", "theorem", "smul_nonpos_of_nonpos_of_nonneg", []], ["add", "theorem", "strict_anti_smul_left", []]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": [["add", "theorem", "monotone_smul_left", []], ["add", "theorem", "of_dual_smul", ["order_dual"]], ["add", "theorem", "to_dual_smul", ["order_dual"]], ["add", "def", "smul_left", ["order_iso"]], ["add", "theorem", "smul_nonneg", []], ["add", "theorem", "smul_nonpos_of_nonneg_of_nonpos", []], ["add", "theorem", "strict_mono_smul_left", []]]}]}, {"timestamp": 1634126670, "sha": "04ed867a", "message": "chore(topology/uniform_space/cauchy): add a few simple lemmas (#9685)\n* rename `cauchy_prod` to `cauchy.prod`;\n* add `cauchy_seq.tendsto_uniformity`, `cauchy_seq.nonempty`,\n `cauchy_seq.comp_tendsto`, `cauchy_seq.prod`, `cauchy_seq.prod_map`,\n `uniform_continuous.comp_cauchy_seq`, and\n `filter.tendsto.subseq_mem_entourage`;\n* drop `[nonempty _]` assumption in `cauchy_seq.mem_entourage`.", "changes": [{"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "prod", ["cauchy"]], ["del", "theorem", "cauchy_prod", []], ["add", "theorem", "comp_tendsto", ["cauchy_seq"]], ["mod", "theorem", "mem_entourage", ["cauchy_seq"]], ["add", "theorem", "nonempty", ["cauchy_seq"]], ["add", "theorem", "prod", ["cauchy_seq"]], ["add", "theorem", "prod_map", ["cauchy_seq"]], ["add", "theorem", "tendsto_uniformity", ["cauchy_seq"]], ["add", "theorem", "subseq_mem_entourage", ["filter", "tendsto"]], ["add", "theorem", "comp_cauchy_seq", ["uniform_continuous"]]]}]}, {"timestamp": 1634117828, "sha": "46a70143", "message": "feat(data/equiv/basic): psigma_congr_right (#9687)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "psigma_congr_right", ["equiv"]], ["add", "theorem", "psigma_congr_right_refl", ["equiv"]], ["add", "theorem", "psigma_congr_right_symm", ["equiv"]], ["add", "theorem", "psigma_congr_right_trans", ["equiv"]], ["mod", "def", "psigma_equiv_sigma", ["equiv"]], ["mod", "def", "sigma_congr_right", ["equiv"]], ["mod", "theorem", "sigma_congr_right_refl", ["equiv"]], ["mod", "theorem", "sigma_congr_right_symm", ["equiv"]], ["mod", "theorem", "sigma_congr_right_trans", ["equiv"]]]}]}, {"timestamp": 1634117827, "sha": "4c1a9c46", "message": "chore(order/filter): add 2 lemmas (#9682)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "frequently_and_distrib_left", ["filter"]], ["add", "theorem", "frequently_and_distrib_right", ["filter"]]]}]}, {"timestamp": 1634117820, "sha": "88863864", "message": "feat(star/basic): add a `star_monoid (units R)` instance (#9681)\nThis also moves all the `opposite R` instances to be adjacent, and add some missing `star_module` definitions.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["del", "theorem", "op_star", []], ["add", "theorem", "op_star", ["opposite"]], ["add", "theorem", "unop_star", ["opposite"]], ["add", "theorem", "coe_star", ["units"]], ["add", "theorem", "coe_star_inv", ["units"]], ["del", "theorem", "unop_star", []]]}]}, {"timestamp": 1634117819, "sha": "52d5fd47", "message": "feat(linear_algebra/{dimension,affine_space/finite_dimensional}): independent subsets of finite-dimensional spaces are finite. (#9674)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "def", "fintype_of_fintype_ne", []]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "finite_of_fin_dim_affine_independent", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "finite_of_is_noetherian_linear_independent", []]]}]}, {"timestamp": 1634111773, "sha": "2c8abe52", "message": "feat(algebra/star): `star_gpow` and `star_fpow` (#9661)\nOne unrelated proof changes as the import additions pulls in a simp lemma that was previously missing, making the call to `ring` no longer necessary.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "star_fpow", []], ["add", "theorem", "star_gpow", []]]}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}]}, {"timestamp": 1634093015, "sha": "ea70e1c0", "message": "chore(scripts): update nolints.txt (#9686)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1634079589, "sha": "c65de1e6", "message": "chore(data/sym/sym2): speed up some proofs (#9677)\nIn one test, elaboration of sym2_ext went from 46.9s to 734ms, and of elems_iff_eq from 54.3s to 514ms.", "changes": [{"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": []}]}, {"timestamp": 1634058040, "sha": "66285c9f", "message": "feat(topology/instances/ennreal): if a tsum is finite, then the tsum over the complement of a finset tends to 0 at top (#9665)\nTogether with minor tweaks of the library:\n* rename `bounded.subset` to `bounded.mono`\n* remove `bUnion_subset_bUnion_right`, which is exactly the same as `bUnion_mono`. Same for intersections.\n* add `bUnion_congr` and `bInter_congr`\n* introduce lemma `null_of_locally_null`: if a set has zero measure in a neighborhood of each of its points, then it has zero measure in a second-countable space.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "subset_set_bUnion_of_mem", ["finset"]]]}, {"oldPath": "src/data/set/accumulate.lean", "newPath": "src/data/set/accumulate.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "pairwise_on_image", ["set", "inj_on"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bInter_congr", ["set"]], ["del", "theorem", "bInter_subset_bInter_right", ["set"]], ["add", "theorem", "bUnion_congr", ["set"]], ["del", "theorem", "bUnion_subset_bUnion_right", ["set"]], ["add", "theorem", "pairwise_on_sUnion", ["set"]]]}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "null_of_locally_null", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "sigma", ["summable"]], ["add", "theorem", "tendsto_tsum_compl_at_top_zero", []], ["mod", "theorem", "tsum_comm", []], ["mod", "theorem", "tsum_prod", []], ["mod", "theorem", "tsum_sigma", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_tsum_compl_at_top_zero", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "tendsto_tsum_compl_at_top_zero", ["nnreal"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "mono", ["metric", "bounded"]], ["del", "theorem", "subset", ["metric", "bounded"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1634058039, "sha": "817c70db", "message": "feat(category_theory/*): Functors about comma categories. (#9627)\nAdded `pre` and `post` for `comma`, `structured_arrow`, `costructured_arrow`.", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["add", "def", "post", ["category_theory", "comma"]], ["add", "def", "pre_left", ["category_theory", "comma"]], ["add", "def", "pre_right", ["category_theory", "comma"]]]}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": [["add", "def", "post", ["category_theory", "costructured_arrow"]], ["add", "def", "pre", ["category_theory", "costructured_arrow"]], ["add", "def", "post", ["category_theory", "structured_arrow"]], ["add", "def", "pre", ["category_theory", "structured_arrow"]]]}]}, {"timestamp": 1634051373, "sha": "f63b8f12", "message": "feat(algebra/star/basic): add some helper lemmas about star (#9651)\nThis adds the new lemmas:\n* `star_pow`\n* `star_nsmul`\n* `star_gsmul`\n* `star_prod`\n* `star_div`\n* `star_div'`\n* `star_inv`\n* `star_inv'`\n* `star_mul'`\nand generalizes the typeclass assumptions from `star_ring` to `star_add_monoid` on:\n* `star_neg`\n* `star_sub`\n* `star_sum`", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "star_div'", []], ["add", "theorem", "star_div", []], ["add", "theorem", "star_gsmul", []], ["add", "theorem", "star_inv'", []], ["add", "theorem", "star_inv", []], ["add", "theorem", "star_mul'", []], ["mod", "theorem", "star_neg", []], ["add", "theorem", "star_nsmul", []], ["add", "theorem", "star_pow", []], ["add", "theorem", "star_prod", []], ["mod", "theorem", "star_sub", []], ["mod", "theorem", "star_sum", []]]}]}, {"timestamp": 1634038874, "sha": "b486c88f", "message": "chore(analysis): fix file name (#9673)\nThis file was moved since the docstring was written", "changes": [{"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}]}, {"timestamp": 1634038873, "sha": "bcb29439", "message": "chore(set_theory/cardinal): move defs/lemmas about `lift` up (#9669)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1634038872, "sha": "a979d15c", "message": "feat(order/filter): `∃ᶠ m in at_top, m ≡ d [MOD n]` (#9666)", "changes": [{"oldPath": null, "newPath": "src/order/filter/modeq.lean", "changes": [["add", "theorem", "frequently_even", ["nat"]], ["add", "theorem", "frequently_mod_eq", ["nat"]], ["add", "theorem", "frequently_modeq", ["nat"]], ["add", "theorem", "frequently_odd", ["nat"]]]}]}, {"timestamp": 1634029185, "sha": "fd7da4ef", "message": "refactor(combinatorics/partition): add `nat` namespace (#9672)\n`partition` is now `nat.partition`", "changes": [{"oldPath": "src/combinatorics/partition.lean", "newPath": "src/combinatorics/partition.lean", "changes": [["add", "theorem", "count_of_sums_of_ne_zero", ["nat", "partition"]], ["add", "theorem", "count_of_sums_zero", ["nat", "partition"]], ["add", "def", "distincts", ["nat", "partition"]], ["add", "def", "indiscrete_partition", ["nat", "partition"]], ["add", "def", "odd_distincts", ["nat", "partition"]], ["add", "def", "odds", ["nat", "partition"]], ["add", "def", "of_composition", ["nat", "partition"]], ["add", "theorem", "of_composition_surj", ["nat", "partition"]], ["add", "def", "of_multiset", ["nat", "partition"]], ["add", "def", "of_sums", ["nat", "partition"]], ["add", "structure", "partition", ["nat"]], ["del", "theorem", "count_of_sums_of_ne_zero", ["partition"]], ["del", "theorem", "count_of_sums_zero", ["partition"]], ["del", "def", "distincts", ["partition"]], ["del", "def", "indiscrete_partition", ["partition"]], ["del", "def", "odd_distincts", ["partition"]], ["del", "def", "odds", ["partition"]], ["del", "def", "of_composition", ["partition"]], ["del", "theorem", "of_composition_surj", ["partition"]], ["del", "def", "of_multiset", ["partition"]], ["del", "def", "of_sums", ["partition"]], ["del", "structure", "partition", []]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["mod", "def", "partition", ["equiv", "perm"]]]}]}, {"timestamp": 1634029183, "sha": "2e72f352", "message": "refactor(data/opposite): Remove the `op_induction` tactic (#9660)\nThe `induction` tactic is already powerful enough for this; we don't have `order_dual_induction` or `nat_induction` as tactics.\nThe bulk of this change is replacing `op_induction x` with `induction x using opposite.rec`.\nThis leaves behind the non-interactive `op_induction'` which is still needed as a `tidy` hook.\nThis also renames the def `opposite.op_induction` to `opposite.rec` to match `order_dual.rec` etc.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["del", "def", "op_induction", ["opposite"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1634029181, "sha": "ad4040dd", "message": "feat(algebra/opposites): provide npow and gpow explicitly, prove `op_gpow` and `unop_gpow` (#9659)\nBy populating the `npow` and `gpow` fields in the obvious way, `op_pow` and `unop_pow` are true definitionally.\nThis adds the new lemmas `op_gpow` and `unop_gpow` which works for `group`s and `division_ring`s too.\nNote that we do not provide an explicit `div` in `div_inv_monoid`, because there is no \"reversed division\" operator to define it via.\nThis also reorders the lemmas so that the definitional lemmas are available before any proof obligations might appear in stronger typeclasses.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "op_gpow", ["opposite"]], ["mod", "theorem", "op_pow", ["opposite"]], ["add", "theorem", "unop_gpow", ["opposite"]], ["mod", "theorem", "unop_pow", ["opposite"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}]}, {"timestamp": 1634029178, "sha": "34ffb154", "message": "feat(linear_algebra/affine_space/finite_dimensional): upgrade `affine_independent.affine_span_eq_top_of_card_eq_finrank_add_one` to an iff (#9657)\nAlso including some related, but strictly speaking independent, lemmas such as `affine_subspace.affine_span_eq_top_iff_vector_span_eq_top_of_nontrivial`.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "subsingleton_iff", ["add_torsor"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "affine_span_eq_top_iff_vector_span_eq_top_of_nonempty", ["affine_subspace"]], ["add", "theorem", "affine_span_eq_top_iff_vector_span_eq_top_of_nontrivial", ["affine_subspace"]], ["add", "theorem", "card_pos_of_affine_span_eq_top", ["affine_subspace"]], ["add", "theorem", "vector_span_eq_top_of_affine_span_eq_top", ["affine_subspace"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "affine_span_eq_top_iff_card_eq_finrank_add_one", ["affine_independent"]], ["del", "theorem", "affine_span_eq_top_of_card_eq_finrank_add_one", ["affine_independent"]]]}]}, {"timestamp": 1634026615, "sha": "1023d812", "message": "chore(ring_theory/tensor_product): squeeze simps in a slow proof (#9671)\nThis proof just timed out in bors. Goes from 21s to 1s on my computer just by squeezing the simps.", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1634019654, "sha": "a132d0ab", "message": "chore(analysis): move some files to `analysis/normed/group` (#9667)", "changes": [{"oldPath": "src/analysis/normed_space/SemiNormedGroup.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed/group/SemiNormedGroup/kernels.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed/group/hom.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_hom_completion.lean", "newPath": "src/analysis/normed/group/hom_completion.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed/group/quotient.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}]}, {"timestamp": 1634003613, "sha": "638dd0f8", "message": "feat(data/dfinsupp, algebra/direct_sum/module): direct sum on fintype (#9664)\nAnalogues for `dfinsupp`/`direct_sum` of definitions/lemmas such as `finsupp.equiv_fun_on_fintype`: a `dfinsupp`/`direct_sum` over a finite index set is canonically equivalent to `pi` over the same index set.", "changes": [{"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "def", "linear_equiv_fun_on_fintype", ["direct_sum"]], ["add", "theorem", "linear_equiv_fun_on_fintype_lof", ["direct_sum"]], ["add", "theorem", "linear_equiv_fun_on_fintype_symm_coe", ["direct_sum"]], ["add", "theorem", "linear_equiv_fun_on_fintype_symm_single", ["direct_sum"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "def", "equiv_fun_on_fintype", ["dfinsupp"]], ["add", "theorem", "equiv_fun_on_fintype_single", ["dfinsupp"]], ["add", "theorem", "equiv_fun_on_fintype_symm_coe", ["dfinsupp"]], ["add", "theorem", "equiv_fun_on_fintype_symm_single", ["dfinsupp"]], ["add", "theorem", "single_eq_pi_single", ["dfinsupp"]]]}]}, {"timestamp": 1633991666, "sha": "c2a30bef", "message": "feat(analysis/normed_space/normed_group_hom): add norm_noninc.neg (#9658)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "neg_iff", ["normed_group_hom", "norm_noninc"]]]}]}, {"timestamp": 1633988350, "sha": "df132fe6", "message": "feat(topology/path_connected): add `path.reparam` for reparametrising a path. (#9643)\nI've also added `simps` to some of the definitions in this file.", "changes": [{"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "coe_to_fun", ["path"]], ["add", "theorem", "range_reparam", ["path"]], ["mod", "def", "refl", ["path"]], ["add", "theorem", "refl_reparam", ["path"]], ["add", "def", "reparam", ["path"]], ["add", "theorem", "reparam_id", ["path"]], ["add", "def", "apply", ["path", "simps"]], ["mod", "def", "symm", ["path"]]]}]}, {"timestamp": 1633982684, "sha": "136d0ce9", "message": "feat(topology/homotopy/path): Add homotopy between paths (#9141)\nThere is also a lemma about `path.to_continuous_map` which I needed in a prior iteration of this PR that I missed in #9133", "changes": [{"oldPath": "src/topology/homotopy/basic.lean", "newPath": "src/topology/homotopy/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/homotopy/path.lean", "changes": [["add", "theorem", "equivalence", ["path", "homotopic"]], ["add", "theorem", "refl", ["path", "homotopic"]], ["add", "theorem", "symm", ["path", "homotopic"]], ["add", "theorem", "trans", ["path", "homotopic"]], ["add", "def", "homotopic", ["path"]], ["add", "theorem", "coe_fn_injective", ["path", "homotopy"]], ["add", "def", "eval", ["path", "homotopy"]], ["add", "theorem", "eval_one", ["path", "homotopy"]], ["add", "theorem", "eval_zero", ["path", "homotopy"]], ["add", "def", "hcomp", ["path", "homotopy"]], ["add", "theorem", "hcomp_apply", ["path", "homotopy"]], ["add", "theorem", "hcomp_half", ["path", "homotopy"]], ["add", "def", "refl", ["path", "homotopy"]], ["add", "theorem", "source", ["path", "homotopy"]], ["add", "def", "symm", ["path", "homotopy"]], ["add", "theorem", "symm_symm", ["path", "homotopy"]], ["add", "theorem", "symm_trans", ["path", "homotopy"]], ["add", "theorem", "target", ["path", "homotopy"]], ["add", "def", "trans", ["path", "homotopy"]], ["add", "theorem", "trans_apply", ["path", "homotopy"]], ["add", "def", "homotopy", ["path"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "coe_to_continuous_map", ["path"]]]}]}, {"timestamp": 1633978535, "sha": "6872dfb5", "message": "feat(analysis/normed/group/basic): add norm_le_add_norm_add (#9655)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "norm_le_add_norm_add", []]]}]}, {"timestamp": 1633966149, "sha": "fa5d9d61", "message": "feat(tactic/lint/misc): unused haves and suffices linters (#9310)\nA linter for unused term mode have and suffices statements.\nBased on initial work by @robertylewis https://leanprover.zulipchat.com/#narrow/stream/187764-Lean-for.20teaching/topic/linter.20for.20helping.20grading/near/209243601 but hopefully with less false positives now.", "changes": [{"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": null, "newPath": "test/lint_unused_haves_suffices.lean", "changes": [["add", "theorem", "test_a", []], ["add", "theorem", "test_b", []], ["add", "theorem", "test_c", []], ["add", "theorem", "test_d", []], ["add", "theorem", "test_map_reverse", []]]}]}, {"timestamp": 1633939165, "sha": "c2fde701", "message": "feat(number_theory/liouville): Liouville numbers form a dense Gδ set (#9646)", "changes": [{"oldPath": null, "newPath": "src/number_theory/liouville/residual.lean", "changes": [["add", "theorem", "dense_irrational", []], ["add", "theorem", "dense_liouville", []], ["add", "theorem", "eventually_residual_irrational", []], ["add", "theorem", "eventually_residual_liouville", []], ["add", "theorem", "is_Gδ_irrational", []], ["add", "theorem", "is_Gδ_set_of_liouville", []], ["add", "theorem", "set_of_liouville_eq_Inter_Union", []], ["add", "theorem", "set_of_liouville_eq_irrational_inter_Inter_Union", []]]}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["add", "theorem", "dense_of_mem_residual", []]]}]}, {"timestamp": 1633939164, "sha": "082aa832", "message": "feat(data/finset): add `finset.erase_none` (#9630)\n* move `option.to_finset` and `finset.insert_none` to a new file `data.finset.option`; redefine the latter in terms of `finset.cons`;\n* define `finset.erase_none`, prove lemmas about it;\n* add `finset.prod_cons`, `finset.sum_cons`, `finset.coe_cons`, `finset.cons_subset_cons`, `finset.card_cons`;\n* add `finset.subtype_mono` and `finset.bUnion_congr`;\n* add `set.insert_subset_insert_iff`;\n* add `@[simp]` to `finset.map_subset_map`;\n* upgrade `finset.map_embedding` to an `order_embedding`;\n* add `@[simps]` to `equiv.option_is_some_equiv` and `function.embedding.some`;\n* golf some proofs.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_cons", ["finset"]], ["mod", "theorem", "prod_multiset_map_count", ["finset"]], ["del", "theorem", "sum_multiset_map_count", ["finset"]]]}, {"oldPath": null, "newPath": "src/algebra/big_operators/option.lean", "changes": [["add", "theorem", "prod_erase_none", ["finset"]], ["add", "theorem", "prod_insert_none", ["finset"]]]}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "option_is_some_equiv", ["equiv"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "bUnion_congr", ["finset"]], ["add", "theorem", "card_cons", ["finset"]], ["add", "theorem", "coe_cons", ["finset"]], ["add", "theorem", "cons_subset_cons", ["finset"]], ["mod", "def", "map_embedding", ["finset"]], ["mod", "theorem", "map_inj", ["finset"]], ["mod", "theorem", "map_subset_map", ["finset"]], ["mod", "theorem", "mem_cons", ["finset"]], ["add", "theorem", "subtype_mono", ["finset"]], ["del", "theorem", "mem_to_finset", ["option"]], ["del", "def", "to_finset", ["option"]], ["del", "theorem", "to_finset_none", ["option"]], ["del", "theorem", "to_finset_some", ["option"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finset/option.lean", "changes": [["add", "theorem", "card_insert_none", ["finset"]], ["add", "theorem", "coe_erase_none", ["finset"]], ["add", "def", "erase_none", ["finset"]], ["add", "theorem", "erase_none_empty", ["finset"]], ["add", "theorem", "erase_none_eq_bUnion", ["finset"]], ["add", "theorem", "erase_none_image_some", ["finset"]], ["add", "theorem", "erase_none_insert_none", ["finset"]], ["add", "theorem", "erase_none_inter", ["finset"]], ["add", "theorem", "erase_none_map_some", ["finset"]], ["add", "theorem", "erase_none_none", ["finset"]], ["add", "theorem", "erase_none_union", ["finset"]], ["add", "theorem", "image_some_erase_none", ["finset"]], ["add", "def", "insert_none", ["finset"]], ["add", "theorem", "insert_none_erase_none", ["finset"]], ["add", "theorem", "map_some_erase_none", ["finset"]], ["add", "theorem", "mem_erase_none", ["finset"]], ["add", "theorem", "mem_insert_none", ["finset"]], ["add", "theorem", "some_mem_insert_none", ["finset"]], ["add", "theorem", "card_to_finset", ["option"]], ["add", "theorem", "mem_to_finset", ["option"]], ["add", "def", "to_finset", ["option"]], ["add", "theorem", "to_finset_none", ["option"]], ["add", "theorem", "to_finset_some", ["option"]]]}, {"oldPath": "src/data/finset/pimage.lean", "newPath": "src/data/finset/pimage.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "def", "insert_none", ["finset"]], ["del", "theorem", "mem_insert_none", ["finset"]], ["del", "theorem", "some_mem_insert_none", ["finset"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_subset_insert_iff", ["set"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}]}, {"timestamp": 1633939163, "sha": "1539ee18", "message": "refactor(topology/sheaves/*): Make sheaf condition a Prop (#9607)\nMake `sheaf_condition` into a `Prop` and redefine the type of sheaves on a topological space `X` as a subtype of `(opens X)ᵒᵖ ⥤ C`.", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "def", "restrict", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "restrict_top_iso", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": [["mod", "def", "sheaf", ["algebraic_geometry", "SheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["mod", "def", "basic_open_iso", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "exists_const", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "global_sections_iso", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "to_stalk", ["algebraic_geometry", "structure_sheaf"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": [["add", "theorem", "is_sheaf_iff_is_sheaf_comp", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_equiv_sheaf_condition_comp", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": [["add", "theorem", "is_sheaf", ["Top", "subpresheaf_to_Types"]], ["del", "def", "sheaf_condition", ["Top", "subpresheaf_to_Types"]]]}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["add", "def", "is_sheaf", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_iso_iff", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_of_iso", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_punit", ["Top", "presheaf"]], ["del", "def", "sheaf_condition", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_equiv_of_iso", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_punit", ["Top", "presheaf"]], ["mod", "def", "forget", ["Top", "sheaf"]], ["add", "def", "sheaf", ["Top"]], ["del", "structure", "sheaf", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": [["add", "theorem", "is_sheaf_iff_is_sheaf_opens_le_cover", ["Top", "presheaf"]], ["add", "def", "is_sheaf_opens_le_cover", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_opens_le_cover_iff_is_sheaf_pairwise_intersections", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_equiv_sheaf_condition_opens_le_cover", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_opens_le_cover", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_opens_le_cover_equiv_sheaf_condition_pairwise_intersections", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": [["add", "theorem", "is_sheaf_iff_is_sheaf_pairwise_intersections", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_sheaf_preserves_limit_pairwise_intersections", ["Top", "presheaf"]], ["add", "def", "is_sheaf_pairwise_intersections", ["Top", "presheaf"]], ["add", "def", "is_sheaf_preserves_limit_pairwise_intersections", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_equiv_sheaf_condition_pairwise_intersections", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_equiv_sheaf_condition_preserves_limit_pairwise_intersections", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_pairwise_intersections", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_preserves_limit_pairwise_intersections", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": [["del", "def", "gluing", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_sheaf_unique_gluing", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_sheaf_unique_gluing_types", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_of_is_sheaf_unique_gluing_types", ["Top", "presheaf"]], ["add", "def", "is_sheaf_unique_gluing", ["Top", "presheaf"]], ["add", "theorem", "is_sheaf_unique_gluing_of_is_sheaf_types", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_equiv_sheaf_condition_unique_gluing", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_equiv_sheaf_condition_unique_gluing_types", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_of_exists_unique_gluing", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_of_sheaf_condition_unique_gluing_types", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_unique_gluing", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_unique_gluing_of_sheaf_condition_types", ["Top", "presheaf"]], ["mod", "theorem", "eq_of_locally_eq", ["Top", "sheaf"]], ["mod", "theorem", "exists_unique_gluing", ["Top", "sheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": [["del", "def", "to_Type", ["Top", "presheaf"]], ["add", "theorem", "to_Type_is_sheaf", ["Top", "presheaf"]], ["del", "def", "to_Types", ["Top", "presheaf"]], ["add", "theorem", "to_Types_is_sheaf", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheafify.lean", "newPath": "src/topology/sheaves/sheafify.lean", "changes": [["mod", "def", "sheafify_stalk_iso", ["Top", "presheaf"]], ["mod", "def", "stalk_to_fiber", ["Top", "presheaf"]], ["mod", "def", "to_sheafify", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["mod", "theorem", "section_ext", ["Top", "presheaf"]]]}]}, {"timestamp": 1633939162, "sha": "4a191ad9", "message": "feat(algebra.algebra.subalgebra): add `subalgebra.gc_map_comap` (#9435)\nOther changes:\n* add `linear_map.coe_inl`/`linear_map.coe_inr` and move `@[simp]` from `inl_apply`/`inr_apply` to these lemmas;\n* fix a typo in the name (`adjoint` → `adjoin`);\n* drop `algebra.adjoin_inl_union_inr_le_prod `: we prove an equality anyway;\n* add `alg_hom.map_adjoin` (same as `(adjoin_image _ _ _).symm`) to match `monoid_hom.map_closure` etc.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "gc_map_comap", ["subalgebra"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "coe_inl", ["linear_map"]], ["add", "theorem", "coe_inr", ["linear_map"]], ["mod", "theorem", "inl_apply", ["linear_map"]], ["mod", "theorem", "inr_apply", ["linear_map"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "map_adjoin", ["alg_hom"]], ["del", "theorem", "adjoin_inl_union_inr_le_prod", ["algebra"]], ["add", "theorem", "adjoin_prod_le", ["algebra"]], ["del", "theorem", "adjoint_prod_le", ["algebra"]]]}]}, {"timestamp": 1633933032, "sha": "30cf8b77", "message": "feat(group_theory/subgroup/basic): apply_mem_map_injective (#9637)\nA translation of `function.injective.mem_set_image`.", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "mem_map_iff_mem", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "mem_map_iff_mem", ["submonoid"]]]}]}, {"timestamp": 1633933031, "sha": "957f64ee", "message": "feat(algebra/floor): When the floor is strictly positive (#9625)\n`⌊a⌋₊` and `⌊a⌋` are strictly positive iff `1 ≤ a`. We use this to slightly golf IMO 2013 P5.", "changes": [{"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "floor_pos", []], ["add", "theorem", "nat_floor_pos", []], ["add", "theorem", "sub_one_lt_nat_floor", []]]}]}, {"timestamp": 1633925032, "sha": "bcd79a1f", "message": "chore(analysis/normed/group/basic): rename vars (#9652)\n* use `E`, `F` for (semi)normed groups and greek letters for other\n types;\n* golf some proofs (`bounded_iff_forall_norm_le`, `norm_pos_iff'`);\n* use `namespace lipschitz_with` and `namespace antilipschitz_with`\n instead of manual prefixes for all lemmas;\n* generalize `antilipschitz_with.add_lipschitz_with` to\n `pseudo_emetric_space`;\n* add `antilipschitz_with.edist_lt_top` and\n `antilipschitz_with.edist_ne_top`;\n* fix a typo in `pseudo_emetric_space.to_pseudo_metric_space`.", "changes": [{"oldPath": "src/analysis/normed/group/basic.lean", "newPath": "src/analysis/normed/group/basic.lean", "changes": [["mod", "theorem", "abs_dist_sub_le_dist_add_add", []], ["mod", "theorem", "abs_norm_sub_norm_le", []], ["mod", "theorem", "add_mem_ball_iff_norm", []], ["mod", "theorem", "add_mem_closed_ball_iff_norm", []], ["mod", "theorem", "continuous_of_bound", ["add_monoid_hom"]], ["mod", "theorem", "isometry_iff_norm", ["add_monoid_hom"]], ["mod", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["mod", "theorem", "lipschitz_of_bound", ["add_monoid_hom"]], ["mod", "theorem", "lipschitz_of_bound_nnnorm", ["add_monoid_hom"]], ["mod", "theorem", "add_lipschitz_with", ["antilipschitz_with"]], ["mod", "theorem", "add_sub_lipschitz_with", ["antilipschitz_with"]], ["mod", "theorem", "ball_zero_eq", []], ["mod", "theorem", "bounded_iff_forall_norm_le", []], ["mod", "theorem", "add", ["cauchy_seq"]], ["mod", "theorem", "cauchy_seq_sum_of_eventually_eq", []], ["mod", "theorem", "coe_neg_sphere", []], ["mod", "theorem", "coe_nnnorm", []], ["mod", "theorem", "continuous_nnnorm", []], ["mod", "theorem", "continuous_norm", []], ["mod", "theorem", "controlled_sum_of_mem_closure", []], ["mod", "theorem", "controlled_sum_of_mem_closure_range", []], ["mod", "theorem", "dist_add_add_le", []], ["mod", "theorem", "dist_add_add_le_of_le", []], ["mod", "theorem", "dist_add_left", []], ["mod", "theorem", "dist_add_right", []], ["mod", "theorem", "dist_eq_norm'", []], ["mod", "theorem", "dist_eq_norm", []], ["mod", "theorem", "dist_le_norm_add_norm", []], ["mod", "theorem", "dist_neg_neg", []], ["mod", "theorem", "dist_norm_norm_le", []], ["mod", "theorem", "dist_sub_left", []], ["mod", "theorem", "dist_sub_right", []], ["mod", "theorem", "dist_sub_sub_le", []], ["mod", "theorem", "dist_sub_sub_le_of_le", []], ["mod", "theorem", "dist_sum_sum_le", []], ["mod", "theorem", "dist_sum_sum_le_of_le", []], ["mod", "theorem", "dist_zero_left", []], ["mod", "theorem", "dist_zero_right", []], ["mod", "theorem", "edist_add_add_le", []], ["mod", "theorem", "edist_eq_coe_nnnorm", []], ["mod", "theorem", "edist_eq_coe_nnnorm_sub", []], ["mod", "theorem", "eq_of_norm_sub_eq_zero", []], ["mod", "theorem", "eq_of_norm_sub_le_zero", []], ["mod", "theorem", "eventually_ne_of_tendsto_norm_at_top", []], ["mod", "theorem", "norm", ["filter", "tendsto"]], ["mod", "theorem", "is_bounded_under_of_tendsto", []], ["mod", "theorem", "exists_bound_of_continuous_on", ["is_compact"]], ["mod", "theorem", "add_left_symm", ["isometric"]], ["mod", "theorem", "add_left_to_equiv", ["isometric"]], ["mod", "theorem", "add_right_apply", ["isometric"]], ["mod", "theorem", "add_right_symm", ["isometric"]], ["mod", "theorem", "add_right_to_equiv", ["isometric"]], ["mod", "theorem", "coe_add_left", ["isometric"]], ["mod", "theorem", "coe_add_right", ["isometric"]], ["mod", "theorem", "coe_neg", ["isometric"]], ["mod", "theorem", "neg_symm", ["isometric"]], ["mod", "theorem", "neg_to_equiv", ["isometric"]], ["mod", "theorem", "norm_sub_le", ["lipschitz_on_with"]], ["mod", "theorem", "lipschitz_on_with_iff_norm_sub_le", []], ["mod", "theorem", "add", ["lipschitz_with"]], ["mod", "theorem", "neg", ["lipschitz_with"]], ["mod", "theorem", "sub", ["lipschitz_with"]], ["mod", "theorem", "lipschitz_with_iff_norm_sub_le", []], ["mod", "theorem", "lipschitz_with_one_norm", []], ["mod", "theorem", "mem_ball_iff_norm'", []], ["mod", "theorem", "mem_ball_iff_norm", []], ["mod", "theorem", "mem_ball_zero_iff", []], ["mod", "theorem", "mem_closed_ball_iff_norm'", []], ["mod", "theorem", "mem_closed_ball_iff_norm", []], ["mod", "theorem", "mem_emetric_ball_zero_iff", []], ["mod", "theorem", "mem_sphere_iff_norm", []], ["mod", "theorem", "mem_sphere_zero_iff_norm", []], ["mod", "theorem", "norm_cast_le", ["nat"]], ["mod", "theorem", "ne_zero_of_norm_pos", []], ["mod", "theorem", "nndist_add_add_le", []], ["mod", "theorem", "nndist_eq_nnnorm", []], ["mod", "theorem", "nndist_nnnorm_nnnorm_le", []], ["mod", "theorem", "nnnorm_add_le", []], ["mod", "theorem", "nnnorm_eq_zero", []], ["mod", "theorem", "nnnorm_neg", []], ["mod", "theorem", "nnnorm_sum_le", []], ["mod", "theorem", "nnnorm_zero", []], ["mod", "theorem", "nonzero_of_mem_sphere", []], ["mod", "theorem", "nonzero_of_mem_unit_sphere", []], ["mod", "theorem", "norm_add_le", []], ["mod", "theorem", "norm_add_le_of_le", []], ["mod", "theorem", "norm_eq_of_mem_sphere", []], ["mod", "theorem", "norm_eq_zero", []], ["mod", "theorem", "norm_eq_zero_iff'", []], ["mod", "theorem", "norm_fst_le", []], ["mod", "theorem", "norm_le_insert'", []], ["mod", "theorem", "norm_le_insert", []], ["mod", "theorem", "norm_le_norm_add_const_of_dist_le", []], ["mod", "theorem", "norm_le_of_mem_closed_ball", []], ["mod", "theorem", "norm_le_zero_iff'", []], ["mod", "theorem", "norm_le_zero_iff", []], ["mod", "theorem", "norm_lt_norm_add_const_of_dist_lt", []], ["mod", "theorem", "norm_lt_of_mem_ball", []], ["mod", "theorem", "norm_neg", []], ["mod", "theorem", "norm_nonneg", []], ["mod", "theorem", "norm_of_subsingleton", []], ["mod", "theorem", "norm_pos_iff'", []], ["mod", "theorem", "norm_pos_iff", []], ["mod", "theorem", "norm_prod_le_iff", []], ["mod", "theorem", "norm_snd_le", []], ["mod", "theorem", "norm_sub_eq_zero_iff", []], ["mod", "theorem", "norm_sub_le", []], ["mod", "theorem", "norm_sub_le_of_le", []], ["mod", "theorem", "norm_sub_norm_le", []], ["mod", "theorem", "norm_sub_rev", []], ["mod", "theorem", "norm_sum_le", []], ["mod", "theorem", "norm_sum_le_of_le", []], ["mod", "theorem", "norm_zero", []], ["mod", "theorem", "cauchy_seq_iff", ["normed_group"]], ["mod", "theorem", "core", ["normed_group", "core", "to_semi_normed_group"]], ["mod", "structure", "core", ["normed_group"]], ["mod", "def", "induced", ["normed_group"]], ["mod", "def", "of_add_dist", ["normed_group"]], ["mod", "theorem", "tendsto_nhds_nhds", ["normed_group"]], ["mod", "theorem", "tendsto_nhds_zero", ["normed_group"]], ["mod", "theorem", "of_real_norm_eq_coe_nnnorm", []], ["mod", "theorem", "pi_nnnorm_const", []], ["mod", "theorem", "pi_nnsemi_norm_const", []], ["mod", "theorem", "pi_norm_const", []], ["mod", "theorem", "pi_semi_norm_const", []], ["mod", "theorem", "preimage_add_ball", []], ["mod", "theorem", "preimage_add_closed_ball", []], ["mod", "theorem", "preimage_add_sphere", []], ["mod", "theorem", "nnnorm_def", ["prod"]], ["mod", "theorem", "nnsemi_norm_def", ["prod"]], ["mod", "theorem", "norm_def", ["prod"]], ["mod", "theorem", "semi_norm_def", ["prod"]], ["mod", "theorem", "semi_norm_fst_le", []], ["mod", "theorem", "semi_norm_prod_le_iff", []], ["mod", "theorem", "semi_norm_snd_le", []], ["mod", "structure", "core", ["semi_normed_group"]], ["mod", "def", "induced", ["semi_normed_group"]], ["mod", "theorem", "mem_closure_iff", ["semi_normed_group"]], ["mod", "def", "of_add_dist'", ["semi_normed_group"]], ["mod", "def", "of_add_dist", ["semi_normed_group"]], ["mod", "theorem", "squeeze_zero_norm'", []], ["mod", "theorem", "squeeze_zero_norm", []], ["mod", "theorem", "tendsto_iff_norm_tendsto_zero", []], ["mod", "theorem", "tendsto_norm", []], ["mod", "theorem", "tendsto_norm_cocompact_at_top", []], ["mod", "theorem", "tendsto_norm_nhds_within_zero", []], ["mod", "theorem", "tendsto_norm_sub_self", []], ["mod", "theorem", "tendsto_norm_zero", []], ["mod", "theorem", "tendsto_zero_iff_norm_tendsto_zero", []], ["mod", "theorem", "uniform_continuous_nnnorm", []], ["mod", "theorem", "uniform_continuous_norm", []]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "edist_lt_top", ["antilipschitz_with"]], ["add", "theorem", "edist_ne_top", ["antilipschitz_with"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "def", "to_pseudo_metric_space", ["pseudo_emetric_space"]]]}]}, {"timestamp": 1633925031, "sha": "11117ec5", "message": "feat(topology/G_delta): a finite set is a Gδ-set (#9644)", "changes": [{"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": [["add", "theorem", "is_Gδ_empty", []], ["add", "theorem", "is_Gδ_singleton", []], ["add", "theorem", "is_Gδ", ["set", "finite"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "bInter_basis_nhds", []]]}]}, {"timestamp": 1633925030, "sha": "c02a6559", "message": "feat(linear_algebra/affine_space/barycentric_coords): we can recover a point from its barycentric coordinates (#9629)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["add", "theorem", "affine_combination_barycentric_coord_eq_self", []], ["add", "theorem", "sum_barycentric_coord_apply_eq_one", []]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "eq_affine_combination_of_mem_affine_span_of_fintype", []]]}]}, {"timestamp": 1633925029, "sha": "0bd14ba9", "message": "feat(category_theory/limits/lattice): Add explicit formulas for limits in lattices (#9608)\nAdd explicit descriptions of finite limits and colimits in complete lattices. In particular, the product and the pullback is equal to the infimum, while coproduct and pushout is the supremum. Furthermore, `limit_iso_infi` can be strengthened to an equality, as preorder categories are skeletal.", "changes": [{"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": [["mod", "def", "colimit_cocone", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "colimit_eq_supr", ["category_theory", "limits", "complete_lattice"]], ["del", "def", "colimit_iso_supr", ["category_theory", "limits", "complete_lattice"]], ["del", "theorem", "colimit_iso_supr_hom", ["category_theory", "limits", "complete_lattice"]], ["del", "theorem", "colimit_iso_supr_inv", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "coprod_eq_sup", ["category_theory", "limits", "complete_lattice"]], ["add", "def", "finite_colimit_cocone", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "finite_colimit_eq_finset_univ_sup", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "finite_coproduct_eq_finset_sup", ["category_theory", "limits", "complete_lattice"]], ["add", "def", "finite_limit_cone", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "finite_limit_eq_finset_univ_inf", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "finite_product_eq_finset_inf", ["category_theory", "limits", "complete_lattice"]], ["mod", "def", "limit_cone", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "limit_eq_infi", ["category_theory", "limits", "complete_lattice"]], ["del", "def", "limit_iso_infi", ["category_theory", "limits", "complete_lattice"]], ["del", "theorem", "limit_iso_infi_hom", ["category_theory", "limits", "complete_lattice"]], ["del", "theorem", "limit_iso_infi_inv", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "prod_eq_inf", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "pullback_eq_inf", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "pushout_eq_sup", ["category_theory", "limits", "complete_lattice"]]]}]}, {"timestamp": 1633925028, "sha": "c803c8de", "message": "feat(algebra/gcd_monoid): trivial `gcd` on `comm_group_with_zero`s (#9602)\nThis PR extends the `normalization_monoid` defined on `comm_group_with_zero`s (e.g. fields) to a `normalized_gcd_monoid`. This is useful if you need to take the gcd of two polynomials in a field.", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["mod", "theorem", "coe_norm_unit", ["comm_group_with_zero"]], ["add", "theorem", "normalize_eq_one", ["comm_group_with_zero"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "ufm_of_gcd_of_wf_dvd_monoid", []]]}]}, {"timestamp": 1633925027, "sha": "ec5835d9", "message": "chore(order/*): use to_dual and of_dual in statements instead of implicit coercions between and `α` and `order_dual α` (#9593)\nPreviously the meaning of the statement was hidden away in an invisible surprising typeclass argument.\nBefore this change, the docs suggested the nonsensical statement that `monotone f` implies `antitone f`!\n![image](https://user-images.githubusercontent.com/425260/136348562-d3ecbb85-2a54-4c13-adda-806eb150b00a.png)\nMost of the proof changes in this PR are a consequence of changing the interval lemmas, not the monotonicity or convexity ones.", "changes": [{"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["mod", "theorem", "dual", ["concave_on"]], ["mod", "theorem", "dual", ["convex_on"]], ["mod", "theorem", "dual", ["strict_concave_on"]], ["mod", "theorem", "dual", ["strict_convex_on"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "dual_Icc", ["set"]], ["mod", "theorem", "dual_Ici", ["set"]], ["mod", "theorem", "dual_Ico", ["set"]], ["mod", "theorem", "dual_Iic", ["set"]], ["mod", "theorem", "dual_Iio", ["set"]], ["mod", "theorem", "dual_Ioc", ["set"]], ["mod", "theorem", "dual_Ioi", ["set"]], ["mod", "theorem", "dual_Ioo", ["set"]]]}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["mod", "theorem", "dual", ["set", "ord_connected"]], ["mod", "theorem", "ord_connected_dual", ["set"]]]}, {"oldPath": "src/data/set/intervals/surj_on.lean", "newPath": "src/data/set/intervals/surj_on.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "to_order_dual", ["is_compl"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["mod", "theorem", "is_extr_filter_dual_iff", []], ["mod", "theorem", "is_extr_on_dual_iff", []], ["mod", "theorem", "is_max_filter_dual_iff", []], ["mod", "theorem", "is_max_on_dual_iff", []], ["mod", "theorem", "is_min_filter_dual_iff", []], ["mod", "theorem", "is_min_on_dual_iff", []]]}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": []}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "def", "gi", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1633925025, "sha": "ef46da81", "message": "feat(category_theory/*): Curried yoneda lemma (#9579)\nProvided curried versions of the Yoneda lemma when the category is small.", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["add", "theorem", "curry_eq", ["category_theory", "cartesian_closed"]], ["add", "theorem", "curry_eq_iff", ["category_theory", "cartesian_closed"]], ["add", "theorem", "curry_id_eq_coev", ["category_theory", "cartesian_closed"]], ["add", "theorem", "curry_injective", ["category_theory", "cartesian_closed"]], ["add", "theorem", "curry_natural_left", ["category_theory", "cartesian_closed"]], ["add", "theorem", "curry_natural_right", ["category_theory", "cartesian_closed"]], ["add", "theorem", "curry_uncurry", ["category_theory", "cartesian_closed"]], ["add", "theorem", "eq_curry_iff", ["category_theory", "cartesian_closed"]], ["add", "theorem", "uncurry_curry", ["category_theory", "cartesian_closed"]], ["add", "theorem", "uncurry_eq", ["category_theory", "cartesian_closed"]], ["add", "theorem", "uncurry_id_eq_ev", ["category_theory", "cartesian_closed"]], ["add", "theorem", "uncurry_injective", ["category_theory", "cartesian_closed"]], ["add", "theorem", "uncurry_natural_left", ["category_theory", "cartesian_closed"]], ["add", "theorem", "uncurry_natural_right", ["category_theory", "cartesian_closed"]], ["del", "theorem", "curry_eq", ["category_theory"]], ["del", "theorem", "curry_eq_iff", ["category_theory"]], ["del", "theorem", "curry_id_eq_coev", ["category_theory"]], ["del", "theorem", "curry_injective", ["category_theory"]], ["del", "theorem", "curry_natural_left", ["category_theory"]], ["del", "theorem", "curry_natural_right", ["category_theory"]], ["del", "theorem", "curry_uncurry", ["category_theory"]], ["del", "theorem", "eq_curry_iff", ["category_theory"]], ["del", "theorem", "uncurry_curry", ["category_theory"]], ["del", "theorem", "uncurry_eq", ["category_theory"]], ["del", "theorem", "uncurry_id_eq_ev", ["category_theory"]], ["del", "theorem", "uncurry_injective", ["category_theory"]], ["del", "theorem", "uncurry_natural_left", ["category_theory"]], ["del", "theorem", "uncurry_natural_right", ["category_theory"]]]}, {"oldPath": "src/category_theory/closed/functor.lean", "newPath": "src/category_theory/closed/functor.lean", "changes": []}, {"oldPath": "src/category_theory/closed/ideal.lean", "newPath": "src/category_theory/closed/ideal.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "def", "ulift_functor_trivial", ["category_theory"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["add", "def", "curried_yoneda_lemma'", ["category_theory"]], ["add", "def", "curried_yoneda_lemma", ["category_theory"]]]}]}, {"timestamp": 1633919198, "sha": "e32154d1", "message": "feat(data/equiv/ring): add basic API lemmas for ring_equiv (#9639)\nThis PR adds the lemmas `map_inv`, `map_div`, `map_pow` and `map_fpow` for `ring_equiv`. These lemmas were already available for `ring_hom`s. I'm very open to suggestions about where they should go; `map_fpow` in particular requires a new import in `algebra/field_power.lean`.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "map_fpow", ["ring_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "map_div", ["ring_equiv"]], ["add", "theorem", "map_inv", ["ring_equiv"]], ["add", "theorem", "map_pow", ["ring_equiv"]]]}]}, {"timestamp": 1633900048, "sha": "64255e25", "message": "chore(analysis): move some code to `analysis.normed.group.basic` (#9642)", "changes": [{"oldPath": null, "newPath": "src/analysis/normed/group/basic.lean", "changes": [["add", "theorem", "abs_dist_sub_le_dist_add_add", []], ["add", "theorem", "abs_norm_sub_norm_le", []], ["add", "theorem", "add_mem_ball_iff_norm", []], ["add", "theorem", "add_mem_closed_ball_iff_norm", []], ["add", "theorem", "continuous_of_bound", ["add_monoid_hom"]], ["add", "theorem", "isometry_iff_norm", ["add_monoid_hom"]], ["add", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["add", "theorem", "lipschitz_of_bound", ["add_monoid_hom"]], ["add", "theorem", "lipschitz_of_bound_nnnorm", ["add_monoid_hom"]], ["add", "theorem", "add_lipschitz_with", ["antilipschitz_with"]], ["add", "theorem", "add_sub_lipschitz_with", ["antilipschitz_with"]], ["add", "theorem", "ball_zero_eq", []], ["add", "theorem", "bounded_iff_forall_norm_le", []], ["add", "theorem", "add", ["cauchy_seq"]], ["add", "theorem", "cauchy_seq_sum_of_eventually_eq", []], ["add", "theorem", "coe_neg_sphere", []], ["add", "theorem", "coe_nnnorm", []], ["add", "theorem", "coe_norm_subgroup", []], ["add", "theorem", "nnnorm", ["continuous"]], ["add", "theorem", "norm", ["continuous"]], ["add", "theorem", "nnnorm", ["continuous_at"]], ["add", "theorem", "norm", ["continuous_at"]], ["add", "theorem", "continuous_nnnorm", []], ["add", "theorem", "continuous_norm", []], ["add", "theorem", "nnnorm", ["continuous_on"]], ["add", "theorem", "norm", ["continuous_on"]], ["add", "theorem", "nnnorm", ["continuous_within_at"]], ["add", "theorem", "norm", ["continuous_within_at"]], ["add", "theorem", "controlled_sum_of_mem_closure", []], ["add", "theorem", "controlled_sum_of_mem_closure_range", []], ["add", "theorem", "dist_add_add_le", []], ["add", "theorem", "dist_add_add_le_of_le", []], ["add", "theorem", "dist_add_left", []], ["add", "theorem", "dist_add_right", []], ["add", "theorem", "dist_eq_norm'", []], ["add", "theorem", "dist_eq_norm", []], ["add", "theorem", "dist_le_norm_add_norm", []], ["add", "theorem", "dist_neg_neg", []], ["add", "theorem", "dist_norm_norm_le", []], ["add", "theorem", "dist_sub_left", []], ["add", "theorem", "dist_sub_right", []], ["add", "theorem", "dist_sub_sub_le", []], ["add", "theorem", "dist_sub_sub_le_of_le", []], ["add", "theorem", "dist_sum_sum_le", []], ["add", "theorem", "dist_sum_sum_le_of_le", []], ["add", "theorem", "dist_zero_left", []], ["add", "theorem", "dist_zero_right", []], ["add", "theorem", "edist_add_add_le", []], ["add", "theorem", "edist_eq_coe_nnnorm", []], ["add", "theorem", "edist_eq_coe_nnnorm_sub", []], ["add", "theorem", "eq_of_norm_sub_eq_zero", []], ["add", "theorem", "eq_of_norm_sub_le_zero", []], ["add", "theorem", "eventually_ne_of_tendsto_norm_at_top", []], ["add", "theorem", "nnnorm", ["filter", "tendsto"]], ["add", "theorem", "norm", ["filter", "tendsto"]], ["add", "theorem", "is_bounded_under_of_tendsto", []], ["add", "theorem", "exists_bound_of_continuous_on", ["is_compact"]], ["add", "theorem", "add_left_symm", ["isometric"]], ["add", "theorem", "add_left_to_equiv", ["isometric"]], ["add", "theorem", "add_right_apply", ["isometric"]], ["add", "theorem", "add_right_symm", ["isometric"]], ["add", "theorem", "add_right_to_equiv", ["isometric"]], ["add", "theorem", "coe_add_left", ["isometric"]], ["add", "theorem", "coe_add_right", ["isometric"]], ["add", "theorem", "coe_neg", ["isometric"]], ["add", "theorem", "neg_symm", ["isometric"]], ["add", "theorem", "neg_to_equiv", ["isometric"]], ["add", "theorem", "norm_sub_le", ["lipschitz_on_with"]], ["add", "theorem", "lipschitz_on_with_iff_norm_sub_le", []], ["add", "theorem", "add", ["lipschitz_with"]], ["add", "theorem", "neg", ["lipschitz_with"]], ["add", "theorem", "sub", ["lipschitz_with"]], ["add", "theorem", "lipschitz_with_iff_norm_sub_le", []], ["add", "theorem", "lipschitz_with_one_norm", []], ["add", "theorem", "mem_ball_iff_norm'", []], ["add", "theorem", "mem_ball_iff_norm", []], ["add", "theorem", "mem_ball_zero_iff", []], ["add", "theorem", "mem_closed_ball_iff_norm'", []], ["add", "theorem", "mem_closed_ball_iff_norm", []], ["add", "theorem", "mem_emetric_ball_zero_iff", []], ["add", "theorem", "mem_sphere_iff_norm", []], ["add", "theorem", "mem_sphere_zero_iff_norm", []], ["add", "theorem", "norm_cast_le", ["nat"]], ["add", "theorem", "ne_zero_of_norm_pos", []], ["add", "theorem", "nndist_add_add_le", []], ["add", "theorem", "nndist_eq_nnnorm", []], ["add", "theorem", "nndist_nnnorm_nnnorm_le", []], ["add", "theorem", "nnnorm_add_le", []], ["add", "theorem", "nnnorm_eq_zero", []], ["add", "theorem", "nnnorm_neg", []], ["add", "theorem", "nnnorm_sum_le", []], ["add", "theorem", "nnnorm_zero", []], ["add", "theorem", "nonzero_of_mem_sphere", []], ["add", "theorem", "nonzero_of_mem_unit_sphere", []], ["add", "theorem", "norm_add_le", []], ["add", "theorem", "norm_add_le_of_le", []], ["add", "theorem", "norm_eq_of_mem_sphere", []], ["add", "theorem", "norm_eq_zero", []], ["add", "theorem", "norm_eq_zero_iff'", []], ["add", "theorem", "norm_fst_le", []], ["add", "theorem", "norm_le_insert'", []], ["add", "theorem", "norm_le_insert", []], ["add", "theorem", "norm_le_norm_add_const_of_dist_le", []], ["add", "theorem", "norm_le_of_mem_closed_ball", []], ["add", "theorem", "norm_le_pi_norm", []], ["add", "theorem", "norm_le_zero_iff'", []], ["add", "theorem", "norm_le_zero_iff", []], ["add", "theorem", "norm_lt_norm_add_const_of_dist_lt", []], ["add", "theorem", "norm_lt_of_mem_ball", []], ["add", "theorem", "norm_neg", []], ["add", "theorem", "norm_nonneg", []], ["add", "theorem", "norm_of_subsingleton", []], ["add", "theorem", "norm_pos_iff'", []], ["add", "theorem", "norm_pos_iff", []], ["add", "theorem", "norm_prod_le_iff", []], ["add", "theorem", "norm_snd_le", []], ["add", "theorem", "norm_sub_eq_zero_iff", []], ["add", "theorem", "norm_sub_le", []], ["add", "theorem", "norm_sub_le_of_le", []], ["add", "theorem", "norm_sub_norm_le", []], ["add", "theorem", "norm_sub_rev", []], ["add", "theorem", "norm_sum_le", []], ["add", "theorem", "norm_sum_le_of_le", []], ["add", "theorem", "norm_zero", []], ["add", "theorem", "cauchy_seq_iff", ["normed_group"]], ["add", "theorem", "core", ["normed_group", "core", "to_semi_normed_group"]], ["add", "structure", "core", ["normed_group"]], ["add", "def", "induced", ["normed_group"]], ["add", "def", "of_add_dist", ["normed_group"]], ["add", "theorem", "tendsto_nhds_nhds", ["normed_group"]], ["add", "theorem", "tendsto_nhds_zero", ["normed_group"]], ["add", "theorem", "of_real_norm_eq_coe_nnnorm", []], ["add", "theorem", "pi_nnnorm_const", []], ["add", "theorem", "pi_nnsemi_norm_const", []], ["add", "theorem", "pi_norm_const", []], ["add", "theorem", "pi_norm_le_iff", []], ["add", "theorem", "pi_norm_lt_iff", []], ["add", "theorem", "pi_semi_norm_const", []], ["add", "theorem", "pi_semi_norm_le_iff", []], ["add", "theorem", "pi_semi_norm_lt_iff", []], ["add", "theorem", "preimage_add_ball", []], ["add", "theorem", "preimage_add_closed_ball", []], ["add", "theorem", "preimage_add_sphere", []], ["add", "theorem", "nnnorm_def", ["prod"]], ["add", "theorem", "nnsemi_norm_def", ["prod"]], ["add", "theorem", "norm_def", ["prod"]], ["add", "theorem", "semi_norm_def", ["prod"]], ["add", "theorem", "norm_eq_zero", ["punit"]], ["add", "theorem", "norm_eq_abs", ["real"]], ["add", "theorem", "semi_norm_fst_le", []], ["add", "theorem", "semi_norm_le_pi_norm", []], ["add", "theorem", "semi_norm_prod_le_iff", []], ["add", "theorem", "semi_norm_snd_le", []], ["add", "structure", "core", ["semi_normed_group"]], ["add", "def", "induced", ["semi_normed_group"]], ["add", "theorem", "mem_closure_iff", ["semi_normed_group"]], ["add", "def", "of_add_dist'", ["semi_normed_group"]], ["add", "def", "of_add_dist", ["semi_normed_group"]], ["add", "theorem", "squeeze_zero_norm'", []], ["add", "theorem", "squeeze_zero_norm", []], ["add", "theorem", "norm_coe", ["submodule"]], ["add", "theorem", "norm_mk", ["submodule"]], ["add", "theorem", "tendsto_iff_norm_tendsto_zero", []], ["add", "theorem", "tendsto_norm", []], ["add", "theorem", "tendsto_norm_cocompact_at_top", []], ["add", "theorem", "tendsto_norm_nhds_within_zero", []], ["add", "theorem", "tendsto_norm_sub_self", []], ["add", "theorem", "tendsto_norm_zero", []], ["add", "theorem", "tendsto_zero_iff_norm_tendsto_zero", []], ["add", "theorem", "uniform_continuous_nnnorm", []], ["add", "theorem", "uniform_continuous_norm", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "abs_dist_sub_le_dist_add_add", []], ["del", "theorem", "abs_norm_sub_norm_le", []], ["del", "theorem", "add_mem_ball_iff_norm", []], ["del", "theorem", "add_mem_closed_ball_iff_norm", []], ["del", "theorem", "continuous_of_bound", ["add_monoid_hom"]], ["del", "theorem", "isometry_iff_norm", ["add_monoid_hom"]], ["del", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["del", "theorem", "lipschitz_of_bound", ["add_monoid_hom"]], ["del", "theorem", "lipschitz_of_bound_nnnorm", ["add_monoid_hom"]], ["del", "theorem", "add_lipschitz_with", ["antilipschitz_with"]], ["del", "theorem", "add_sub_lipschitz_with", ["antilipschitz_with"]], ["del", "theorem", "ball_zero_eq", []], ["del", "theorem", "bounded_iff_forall_norm_le", []], ["del", "theorem", "add", ["cauchy_seq"]], ["del", "theorem", "cauchy_seq_sum_of_eventually_eq", []], ["del", "theorem", "coe_neg_sphere", []], ["del", "theorem", "coe_nnnorm", []], ["del", "theorem", "coe_norm_subgroup", []], ["del", "theorem", "nnnorm", ["continuous"]], ["del", "theorem", "norm", ["continuous"]], ["del", "theorem", "nnnorm", ["continuous_at"]], ["del", "theorem", "norm", ["continuous_at"]], ["del", "theorem", "continuous_nnnorm", []], ["del", "theorem", "continuous_norm", []], ["del", "theorem", "nnnorm", ["continuous_on"]], ["del", "theorem", "norm", ["continuous_on"]], ["del", "theorem", "nnnorm", ["continuous_within_at"]], ["del", "theorem", "norm", ["continuous_within_at"]], ["del", "theorem", "controlled_sum_of_mem_closure", []], ["del", "theorem", "controlled_sum_of_mem_closure_range", []], ["del", "theorem", "dist_add_add_le", []], ["del", "theorem", "dist_add_add_le_of_le", []], ["del", "theorem", "dist_add_left", []], ["del", "theorem", "dist_add_right", []], ["del", "theorem", "dist_eq_norm'", []], ["del", "theorem", "dist_eq_norm", []], ["del", "theorem", "dist_le_norm_add_norm", []], ["del", "theorem", "dist_neg_neg", []], ["del", "theorem", "dist_norm_norm_le", []], ["del", "theorem", "dist_sub_left", []], ["del", "theorem", "dist_sub_right", []], ["del", "theorem", "dist_sub_sub_le", []], ["del", "theorem", "dist_sub_sub_le_of_le", []], ["del", "theorem", "dist_sum_sum_le", []], ["del", "theorem", "dist_sum_sum_le_of_le", []], ["del", "theorem", "dist_zero_left", []], ["del", "theorem", "dist_zero_right", []], ["del", "theorem", "edist_add_add_le", []], ["del", "theorem", "edist_eq_coe_nnnorm", []], ["del", "theorem", "edist_eq_coe_nnnorm_sub", []], ["del", "theorem", "eq_of_norm_sub_eq_zero", []], ["del", "theorem", "eq_of_norm_sub_le_zero", []], ["del", "theorem", "eventually_ne_of_tendsto_norm_at_top", []], ["del", "theorem", "nnnorm", ["filter", "tendsto"]], ["del", "theorem", "norm", ["filter", "tendsto"]], ["del", "theorem", "is_bounded_under_of_tendsto", []], ["del", "theorem", "exists_bound_of_continuous_on", ["is_compact"]], ["del", "theorem", "add_left_symm", ["isometric"]], ["del", "theorem", "add_left_to_equiv", ["isometric"]], ["del", "theorem", "add_right_apply", ["isometric"]], ["del", "theorem", "add_right_symm", ["isometric"]], ["del", "theorem", "add_right_to_equiv", ["isometric"]], ["del", "theorem", "coe_add_left", ["isometric"]], ["del", "theorem", "coe_add_right", ["isometric"]], ["del", "theorem", "coe_neg", ["isometric"]], ["del", "theorem", "neg_symm", ["isometric"]], ["del", "theorem", "neg_to_equiv", ["isometric"]], ["del", "theorem", "norm_sub_le", ["lipschitz_on_with"]], ["del", "theorem", "lipschitz_on_with_iff_norm_sub_le", []], ["del", "theorem", "add", ["lipschitz_with"]], ["del", "theorem", "neg", ["lipschitz_with"]], ["del", "theorem", "sub", ["lipschitz_with"]], ["del", "theorem", "lipschitz_with_iff_norm_sub_le", []], ["del", "theorem", "lipschitz_with_one_norm", []], ["del", "theorem", "mem_ball_iff_norm'", []], ["del", "theorem", "mem_ball_iff_norm", []], ["del", "theorem", "mem_ball_zero_iff", []], ["del", "theorem", "mem_closed_ball_iff_norm'", []], ["del", "theorem", "mem_closed_ball_iff_norm", []], ["del", "theorem", "mem_emetric_ball_zero_iff", []], ["del", "theorem", "mem_sphere_iff_norm", []], ["del", "theorem", "mem_sphere_zero_iff_norm", []], ["del", "theorem", "norm_cast_le", ["nat"]], ["del", "theorem", "ne_zero_of_norm_pos", []], ["del", "theorem", "nndist_add_add_le", []], ["del", "theorem", "nndist_eq_nnnorm", []], ["del", "theorem", "nndist_nnnorm_nnnorm_le", []], ["del", "theorem", "nnnorm_add_le", []], ["del", "theorem", "nnnorm_eq_zero", []], ["del", "theorem", "nnnorm_neg", []], ["del", "theorem", "nnnorm_sum_le", []], ["del", "theorem", "nnnorm_zero", []], ["del", "theorem", "nonzero_of_mem_sphere", []], ["del", "theorem", "nonzero_of_mem_unit_sphere", []], ["del", "theorem", "norm_add_le", []], ["del", "theorem", "norm_add_le_of_le", []], ["del", "theorem", "norm_eq_of_mem_sphere", []], ["del", "theorem", "norm_eq_zero", []], ["del", "theorem", "norm_eq_zero_iff'", []], ["del", "theorem", "norm_fst_le", []], ["del", "theorem", "norm_le_insert'", []], ["del", "theorem", "norm_le_insert", []], ["del", "theorem", "norm_le_norm_add_const_of_dist_le", []], ["del", "theorem", "norm_le_of_mem_closed_ball", []], ["del", "theorem", "norm_le_pi_norm", []], ["del", "theorem", "norm_le_zero_iff'", []], ["del", "theorem", "norm_le_zero_iff", []], ["del", "theorem", "norm_lt_norm_add_const_of_dist_lt", []], ["del", "theorem", "norm_lt_of_mem_ball", []], ["del", "theorem", "norm_neg", []], ["del", "theorem", "norm_nonneg", []], ["del", "theorem", "norm_of_subsingleton", []], ["del", "theorem", "norm_pos_iff'", []], ["del", "theorem", "norm_pos_iff", []], ["del", "theorem", "norm_prod_le_iff", []], ["del", "theorem", "norm_snd_le", []], ["del", "theorem", "norm_sub_eq_zero_iff", []], ["del", "theorem", "norm_sub_le", []], ["del", "theorem", "norm_sub_le_of_le", []], ["del", "theorem", "norm_sub_norm_le", []], ["del", "theorem", "norm_sub_rev", []], ["del", "theorem", "norm_sum_le", []], ["del", "theorem", "norm_sum_le_of_le", []], ["del", "theorem", "norm_zero", []], ["del", "theorem", "cauchy_seq_iff", ["normed_group"]], ["del", "theorem", "core", ["normed_group", "core", "to_semi_normed_group"]], ["del", "structure", "core", ["normed_group"]], ["del", "def", "induced", ["normed_group"]], ["del", "def", "of_add_dist", ["normed_group"]], ["del", "theorem", "tendsto_nhds_nhds", ["normed_group"]], ["del", "theorem", "tendsto_nhds_zero", ["normed_group"]], ["del", "theorem", "of_real_norm_eq_coe_nnnorm", []], ["del", "theorem", "pi_nnnorm_const", []], ["del", "theorem", "pi_nnsemi_norm_const", []], ["del", "theorem", "pi_norm_const", []], ["del", "theorem", "pi_norm_le_iff", []], ["del", "theorem", "pi_norm_lt_iff", []], ["del", "theorem", "pi_semi_norm_const", []], ["del", "theorem", "pi_semi_norm_le_iff", []], ["del", "theorem", "pi_semi_norm_lt_iff", []], ["del", "theorem", "preimage_add_ball", []], ["del", "theorem", "preimage_add_closed_ball", []], ["del", "theorem", "preimage_add_sphere", []], ["del", "theorem", "nnnorm_def", ["prod"]], ["del", "theorem", "nnsemi_norm_def", ["prod"]], ["del", "theorem", "norm_def", ["prod"]], ["del", "theorem", "semi_norm_def", ["prod"]], ["del", "theorem", "norm_eq_zero", ["punit"]], ["del", "theorem", "norm_eq_abs", ["real"]], ["del", "theorem", "semi_norm_fst_le", []], ["del", "theorem", "semi_norm_le_pi_norm", []], ["del", "theorem", "semi_norm_prod_le_iff", []], ["del", "theorem", "semi_norm_snd_le", []], ["del", "structure", "core", ["semi_normed_group"]], ["del", "def", "induced", ["semi_normed_group"]], ["del", "theorem", "mem_closure_iff", ["semi_normed_group"]], ["del", "def", "of_add_dist'", ["semi_normed_group"]], ["del", "def", "of_add_dist", ["semi_normed_group"]], ["del", "theorem", "squeeze_zero_norm'", []], ["del", "theorem", "squeeze_zero_norm", []], ["del", "theorem", "norm_coe", ["submodule"]], ["del", "theorem", "norm_mk", ["submodule"]], ["del", "theorem", "tendsto_iff_norm_tendsto_zero", []], ["del", "theorem", "tendsto_norm", []], ["del", "theorem", "tendsto_norm_cocompact_at_top", []], ["del", "theorem", "tendsto_norm_nhds_within_zero", []], ["del", "theorem", "tendsto_norm_sub_self", []], ["del", "theorem", "tendsto_norm_zero", []], ["del", "theorem", "tendsto_zero_iff_norm_tendsto_zero", []], ["del", "theorem", "uniform_continuous_nnnorm", []], ["del", "theorem", "uniform_continuous_norm", []]]}]}, {"timestamp": 1633900047, "sha": "fa414364", "message": "feat(algebra/*,group_theory/*): instances/lemmas about `is_scalar_tower` and `smul_comm_class` (#9533)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "mul_def", ["prod"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["mod", "theorem", "op_smul_eq_mul", ["opposite"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "of_smul_one_mul", ["is_scalar_tower"]], ["add", "theorem", "mul_smul_one", []], ["add", "theorem", "of_mul_smul_one", ["smul_comm_class"]], ["add", "theorem", "smul_one_mul", []]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": [["add", "theorem", "smul_def", ["prod"]]]}]}, {"timestamp": 1633892319, "sha": "0bba837e", "message": "chore(data/nat/factorial): use `n + 1` instead of `n.succ` in `nat.factorial_succ` (#9645)", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": [["mod", "theorem", "factorial_succ", ["nat"]]]}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}]}, {"timestamp": 1633859658, "sha": "3d438baf", "message": "feat(probability_theory/density): add continuous uniform distribution (#9385)", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "mul_indicator_eq_one_iff", ["set"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "mul_indicator_ae_eq_one", ["set"]]]}, {"oldPath": "src/probability_theory/density.lean", "newPath": "src/probability_theory/density.lean", "changes": [["add", "theorem", "has_pdf_of_pdf_ne_zero", ["measure_theory"]], ["add", "theorem", "has_pdf", ["measure_theory", "pdf", "is_uniform"]], ["add", "theorem", "integral_eq", ["measure_theory", "pdf", "is_uniform"]], ["add", "theorem", "mul_pdf_integrable", ["measure_theory", "pdf", "is_uniform"]], ["add", "theorem", "pdf_to_real_ae_eq", ["measure_theory", "pdf", "is_uniform"]], ["add", "def", "is_uniform", ["measure_theory", "pdf"]]]}]}, {"timestamp": 1633798086, "sha": "54a4c17a", "message": "feat(group_theory/sylow): `set_like` instance for `sylow` (#9641)\nAdds a `set_like` instance for `sylow p G`.\nCoauthored by @jcommelin", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "ext", ["sylow"]], ["mod", "theorem", "ext_iff", ["sylow"]], ["mod", "theorem", "to_subgroup_eq_coe", ["sylow"]]]}]}, {"timestamp": 1633791411, "sha": "bb984447", "message": "refactor(group_theory/congruence): remove old_structure_cmd (#9622)", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["mod", "theorem", "Inf_def", ["con"]], ["mod", "theorem", "Sup_def", ["con"]], ["del", "theorem", "coe_eq", ["con"]], ["mod", "theorem", "con_gen_le", ["con"]], ["mod", "theorem", "rel_mk", ["con"]]]}]}, {"timestamp": 1633773195, "sha": "7ed091df", "message": "feat(group_theory/perm/concrete_cycle): computable cyclic perm notation (#9470)", "changes": [{"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": [["add", "theorem", "exists_unique_cycle_nontrivial_subtype", ["equiv", "perm", "is_cycle"]], ["add", "def", "iso_cycle'", ["equiv", "perm"]], ["add", "def", "iso_cycle", ["equiv", "perm"]], ["add", "theorem", "nodup_to_cycle", ["equiv", "perm"]], ["add", "theorem", "nontrivial_to_cycle", ["equiv", "perm"]], ["add", "def", "to_cycle", ["equiv", "perm"]], ["add", "theorem", "to_cycle_eq_to_list", ["equiv", "perm"]]]}]}, {"timestamp": 1633764390, "sha": "ce50450d", "message": "chore(analysis/normed_space/linear_isometry): adjust `isometry` API (#9635)\nNow that we have the `linear_isometry` definition, it is better to pass through this definition rather then using a `linear_map` satisfying the `isometry` hypothesis. To this end, convert old lemma `linear_map.norm_apply_of_isometry` to a new definition `linear_map.to_linear_isometry`, and delete old definition `continuous_linear_equiv.of_isometry`, whose use should be replaced by the pair of definitions`linear_map.to_linear_isometry`, `linear_isometry_equiv.of_surjective`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["del", "def", "of_isometry", ["continuous_linear_equiv"]], ["del", "theorem", "norm_apply_of_isometry", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "def", "to_linear_isometry", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1633764388, "sha": "a9643aa8", "message": "feat(order/min_max): min_cases and max_cases lemmata (#9632)\nThese lemmata make the following type of argument work seamlessly:\n```lean\nexample (h1 : 0 ≤ x) (h2 : x ≤ 1) : min 1 x ≤ max x 0 := by cases min_cases 1 x; cases max_cases x 0; linarith\n```\nSee similar PR #8124", "changes": [{"oldPath": "src/order/min_max.lean", "newPath": "src/order/min_max.lean", "changes": [["add", "theorem", "max_cases", []], ["add", "theorem", "min_cases", []]]}]}, {"timestamp": 1633764385, "sha": "e0f80e78", "message": "feat(analysis/convex/quasiconvex): Quasiconvexity of functions (#9561)\nA function is quasiconvex iff all its sublevels are convex. This generalizes unimodality to non-ordered spaces.", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/quasiconvex.lean", "changes": [["add", "theorem", "quasiconcave_on", ["antitone"]], ["add", "theorem", "quasiconvex_on", ["antitone"]], ["add", "theorem", "quasilinear_on", ["antitone"]], ["add", "theorem", "quasiconcave_on", ["antitone_on"]], ["add", "theorem", "quasiconvex_on", ["antitone_on"]], ["add", "theorem", "quasilinear_on", ["antitone_on"]], ["add", "theorem", "quasiconcave_on", ["concave_on"]], ["add", "theorem", "quasiconcave_on_of_convex_ge", ["convex"]], ["add", "theorem", "quasiconvex_on_of_convex_le", ["convex"]], ["add", "theorem", "quasiconvex_on", ["convex_on"]], ["add", "theorem", "quasiconcave_on", ["monotone"]], ["add", "theorem", "quasiconvex_on", ["monotone"]], ["add", "theorem", "quasilinear_on", ["monotone"]], ["add", "theorem", "quasiconcave_on", ["monotone_on"]], ["add", "theorem", "quasiconvex_on", ["monotone_on"]], ["add", "theorem", "quasilinear_on", ["monotone_on"]], ["add", "theorem", "convex", ["quasiconcave_on"]], ["add", "theorem", "convex_gt", ["quasiconcave_on"]], ["add", "theorem", "dual", ["quasiconcave_on"]], ["add", "theorem", "inf", ["quasiconcave_on"]], ["add", "def", "quasiconcave_on", []], ["add", "theorem", "quasiconcave_on_iff_min_le", []], ["add", "theorem", "convex", ["quasiconvex_on"]], ["add", "theorem", "convex_lt", ["quasiconvex_on"]], ["add", "theorem", "dual", ["quasiconvex_on"]], ["add", "theorem", "sup", ["quasiconvex_on"]], ["add", "def", "quasiconvex_on", []], ["add", "theorem", "quasiconvex_on_iff_le_max", []], ["add", "theorem", "dual", ["quasilinear_on"]], ["add", "def", "quasilinear_on", []], ["add", "theorem", "quasilinear_on_iff_mem_interval", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "sep_inter_sep", ["set"]]]}]}, {"timestamp": 1633755487, "sha": "7a7fadaf", "message": "refactor(data/nat/basic): finish removing sub lemmas (#9601)\n* Follow-up of #9544 to remove the remaining sub lemmas on `nat` that can be generalized to `has_ordered_sub`.\n* The renamings of the lemmas in mathlib that occurred at least once:\n```\nnat.sub_eq_of_eq_add -> sub_eq_of_eq_add_rev\nnat.add_sub_sub_cancel -> add_sub_sub_cancel'\nnat.sub_le_self -> sub_le_self'\n```", "changes": [{"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": []}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "sub_eq_of_eq_add_rev", []]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "add_sub_sub_cancel", ["nat"]], ["del", "theorem", "sub_le_left_iff_le_add", ["nat"]], ["del", "theorem", "sub_le_right_iff_le_add", ["nat"]]]}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}]}, {"timestamp": 1633747444, "sha": "7aaa1b43", "message": "chore(scripts): update nolints.txt (#9636)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1633730171, "sha": "7e3fa4c1", "message": "chore(*): fix typos (#9634)", "changes": [{"oldPath": "archive/miu_language/basic.lean", "newPath": "archive/miu_language/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/complex.lean", "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": [["mod", "theorem", "differentiable_at_tan", ["complex"]]]}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": []}, {"oldPath": "src/combinatorics/pigeonhole.lean", "newPath": "src/combinatorics/pigeonhole.lean", "changes": []}, {"oldPath": "src/computability/epsilon_NFA.lean", "newPath": "src/computability/epsilon_NFA.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": "src/control/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/set.lean", "newPath": "src/data/equiv/set.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": []}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/teichmuller.lean", "newPath": "src/ring_theory/witt_vector/teichmuller.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/verschiebung.lean", "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/tactic/congr.lean", "newPath": "src/tactic/congr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/urysohns_lemma.lean", "newPath": "src/topology/urysohns_lemma.lean", "changes": []}]}, {"timestamp": 1633727201, "sha": "70a9540d", "message": "refactor(group_theory/monoid_localization) remove old_structure_cmd (#9621)", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}]}, {"timestamp": 1633724654, "sha": "c37e3e79", "message": "refactor(field_theory/intermediate_field): remove old_structure_cmd (#9620)", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "def", "to_subfield", ["intermediate_field"]], ["mod", "structure", "intermediate_field", []]]}]}, {"timestamp": 1633724652, "sha": "b39feab3", "message": "refactor(algebra/lie): reduce use of old_structure_cmd (#9616)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "def", "to_linear_equiv", ["lie_equiv"]], ["del", "theorem", "coe_linear_mk", ["lie_hom"]], ["add", "def", "apply", ["lie_hom", "simps"]]]}, {"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}]}, {"timestamp": 1633715543, "sha": "91ee8f1d", "message": "chore(data/equiv/ring): add big operator lemmas for ring equivs (#9628)\nThis PR adds lemmas involving big operators (such as `map_sum`, `map_prod`, etc) for `ring_equiv`s.", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "map_list_prod", ["ring_equiv"]], ["add", "theorem", "map_list_sum", ["ring_equiv"]], ["add", "theorem", "map_multiset_prod", ["ring_equiv"]], ["add", "theorem", "map_multiset_sum", ["ring_equiv"]], ["add", "theorem", "map_prod", ["ring_equiv"]], ["add", "theorem", "map_sum", ["ring_equiv"]]]}]}, {"timestamp": 1633709632, "sha": "57cd1e9e", "message": "feat(analysis/normed_space/exponential): remove char_p assumption (#9618)\nRemove the `char_p` assumption from `exp_series_eq_exp_series_of_field_extension` as suggested by @urkud here : https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Undergraduate.20math.20list/near/256679511", "changes": [{"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}]}, {"timestamp": 1633702937, "sha": "5fd36643", "message": "feat(algebra/graded_monoid): Split out graded monoids from graded rings (#9586)\nThis cleans up the `direct_sum.gmonoid` typeclass to not contain a bundled morphism, which allows it to be used to describe graded monoids too, via the alias for `sigma` `graded_monoid`. Essentially, this:\n* Renames:\n * `direct_sum.ghas_one` to `graded_monoid.has_one`\n * `direct_sum.ghas_mul` to `direct_sum.gnon_unital_non_assoc_semiring`\n * `direct_sum.gmonoid` to `direct_sum.gsemiring`\n * `direct_sum.gcomm_monoid` to `direct_sum.gcomm_semiring`\n* Introduces new typeclasses which represent what the previous names should have been:\n * `graded_monoid.ghas_mul`\n * `graded_monoid.gmonoid`\n * `graded_monoid.gcomm_monoid` \nThis doesn't do as much deduplication as I'd like, but it at least manages some.\nThere's not much in the way of new definitions here either, and most of the names are just copied from the graded ring case.", "changes": [{"oldPath": "src/algebra/direct_sum/algebra.lean", "newPath": "src/algebra/direct_sum/algebra.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["del", "def", "of_add_subgroups", ["direct_sum", "gcomm_monoid"]], ["del", "def", "of_add_submonoids", ["direct_sum", "gcomm_monoid"]], ["del", "def", "of_submodules", ["direct_sum", "gcomm_monoid"]], ["add", "def", "of_add_subgroups", ["direct_sum", "gcomm_semiring"]], ["add", "def", "of_add_submonoids", ["direct_sum", "gcomm_semiring"]], ["add", "def", "of_submodules", ["direct_sum", "gcomm_semiring"]], ["del", "def", "of_add_subgroups", ["direct_sum", "ghas_mul"]], ["del", "theorem", "of_add_subgroups_mul", ["direct_sum", "ghas_mul"]], ["del", "def", "of_add_submonoids", ["direct_sum", "ghas_mul"]], ["del", "theorem", "of_add_submonoids_mul", ["direct_sum", "ghas_mul"]], ["del", "def", "of_submodules", ["direct_sum", "ghas_mul"]], ["del", "theorem", "of_submodules_mul", ["direct_sum", "ghas_mul"]], ["del", "def", "to_sigma_has_mul", ["direct_sum", "ghas_mul"]], ["del", "def", "of_add_subgroups", ["direct_sum", "ghas_one"]], ["del", "def", "of_add_submonoids", ["direct_sum", "ghas_one"]], ["del", "def", "of_submodules", ["direct_sum", "ghas_one"]], ["del", "def", "to_sigma_has_one", ["direct_sum", "ghas_one"]], ["del", "def", "of_add_subgroups", ["direct_sum", "gmonoid"]], ["del", "def", "of_add_submonoids", ["direct_sum", "gmonoid"]], ["del", "def", "of_submodules", ["direct_sum", "gmonoid"]], ["add", "def", "gmul_hom", ["direct_sum"]], ["del", "theorem", "smul_eq_mul", ["direct_sum", "grade_zero"]], ["add", "def", "of_add_subgroups", ["direct_sum", "gsemiring"]], ["add", "def", "of_add_submonoids", ["direct_sum", "gsemiring"]], ["add", "def", "of_submodules", ["direct_sum", "gsemiring"]], ["del", "theorem", "direct_sum_mul", ["semiring"]]]}, {"oldPath": null, "newPath": "src/algebra/graded_monoid.lean", "changes": [["add", "def", "of_subobjects", ["graded_monoid", "gcomm_monoid"]], ["add", "def", "of_subobjects", ["graded_monoid", "ghas_mul"]], ["add", "def", "of_subobjects", ["graded_monoid", "ghas_one"]], ["add", "def", "of_subobjects", ["graded_monoid", "gmonoid"]], ["add", "theorem", "smul_eq_mul", ["graded_monoid", "grade_zero"]], ["add", "def", "mk", ["graded_monoid"]], ["add", "theorem", "mk_mul_mk", ["graded_monoid"]], ["add", "def", "mk_zero_monoid_hom", ["graded_monoid"]], ["add", "theorem", "mk_zero_smul", ["graded_monoid"]], ["add", "def", "graded_monoid", []]]}, {"oldPath": "src/algebra/monoid_algebra/grading.lean", "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "newPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}]}, {"timestamp": 1633702936, "sha": "745cbfc6", "message": "feat(data/polynomial): %ₘ as a linear map (#9532)\nThis PR bundles `(%ₘ) = polynomial.mod_by_monic` into a linear map. In a follow-up PR, I'll show this map descends to a linear map `adjoin_root q → polynomial R`, thereby (computably) assigning coefficients to each element in `adjoin_root q`.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "add_mod_by_monic", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_of_dvd_sub", ["polynomial"]], ["add", "def", "mod_by_monic_hom", ["polynomial"]], ["add", "theorem", "smul_mod_by_monic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "ker_mod_by_monic_hom", ["polynomial"]], ["add", "theorem", "mem_ker_mod_by_monic", ["polynomial"]]]}]}, {"timestamp": 1633695177, "sha": "99c3e223", "message": "refactor(geometry/manifold): remove old_structure_cmd (#9617)", "changes": [{"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}]}, {"timestamp": 1633695176, "sha": "c107549d", "message": "refactor(ring_theory/valuation): remove unnecessary old_structure_cmd (#9615)", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/valued_field.lean", "newPath": "src/topology/algebra/valued_field.lean", "changes": []}]}, {"timestamp": 1633695175, "sha": "7bdd10e2", "message": "refactor(order/category): remove old_structure_cmd (#9614)", "changes": [{"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}]}, {"timestamp": 1633695174, "sha": "af09d3ff", "message": "refactor(algebra/absolute_value): remove unnecessary old_structure_cmd (#9613)", "changes": [{"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/card_pow_degree.lean", "newPath": "src/data/polynomial/degree/card_pow_degree.lean", "changes": []}]}, {"timestamp": 1633695172, "sha": "25a45ab7", "message": "refactor(order/omega_complete_partial_order): remove old_structure_cmd (#9612)\nRemoving a use of `old_structure_cmd`.", "changes": [{"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["add", "def", "apply", ["omega_complete_partial_order", "continuous_hom", "simps"]]]}]}, {"timestamp": 1633695171, "sha": "cea97d9a", "message": "feat(*): add not_mem_of_not_mem_closure for anything with subset_closure (#9595)\nThis is a goal I would expect library search to finish if I have something not in a closure and I want it not in the base set.", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", ["subfield"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", ["submonoid"]]]}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", ["first_order", "language", "substructure"]]]}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", ["lower_adjoint"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", ["subsemiring"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "not_mem_of_not_mem_closure", []]]}]}, {"timestamp": 1633687484, "sha": "6c9eee4b", "message": "refactor(data/finsupp/basic): remove sub lemmas (#9603)\n* Remove the finsupp sub lemmas that are special cases of lemmas in `algebra/order/sub`, namely:\n * `finsupp.nat_zero_sub`\n * `finsupp.nat_sub_self`\n * `finsupp.nat_add_sub_of_le`\n * `finsupp.nat_sub_add_cancel`\n * `finsupp.nat_add_sub_cancel`\n * `finsupp.nat_add_sub_cancel_left`\n * `finsupp.nat_add_sub_assoc`\n* Rename the remaining lemmas to use `tsub`:\n * `finsupp.coe_nat_sub` → `finsupp.coe_tsub`\n * `finsupp.nat_sub_apply` → `finsupp.tsub_apply`\n Lemmas in `algebra/order/sub` will soon also use `tsub` (see [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mul_lt_mul''''))", "changes": [{"oldPath": "src/data/finsupp/antidiagonal.lean", "newPath": "src/data/finsupp/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "theorem", "coe_nat_sub", ["finsupp"]], ["add", "theorem", "coe_tsub", ["finsupp"]], ["del", "theorem", "nat_add_sub_assoc", ["finsupp"]], ["del", "theorem", "nat_add_sub_cancel", ["finsupp"]], ["del", "theorem", "nat_add_sub_cancel_left", ["finsupp"]], ["del", "theorem", "nat_add_sub_of_le", ["finsupp"]], ["del", "theorem", "nat_sub_add_cancel", ["finsupp"]], ["del", "theorem", "nat_sub_apply", ["finsupp"]], ["del", "theorem", "nat_sub_self", ["finsupp"]], ["del", "theorem", "nat_zero_sub", ["finsupp"]], ["del", "theorem", "single_nat_sub", ["finsupp"]], ["add", "theorem", "single_tsub", ["finsupp"]], ["add", "theorem", "tsub_apply", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1633687483, "sha": "34145b7f", "message": "feat(group_theory/subgroup/basic): a new to_additive lemma, and remove a by hand proof (#9594)\nI needed `add_subgroup.smul_mem` which didn't seem to exist, and noticed that the `add_subgroup.gsmul_mem` version is proved by hand while to_additive generates it fine (now?)", "changes": [{"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "theorem", "gsmul_mem", ["add_subgroup"]]]}]}, {"timestamp": 1633687481, "sha": "d5146f4e", "message": "feat(ring_theory): `adjoin_root g ≃ S` if `S` has a power basis with the right minpoly (#9529)\nThis is basically `power_basis.equiv'` with slightly different hypotheses, specialised to `adjoin_root`. It guarantees that even over non-fields, a monogenic extension of `R` can be given by the polynomials over `R` modulo the relevant minimal polynomial.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "def", "equiv'", ["adjoin_root"]], ["add", "theorem", "equiv'_symm_to_alg_hom", ["adjoin_root"]], ["add", "theorem", "equiv'_to_alg_hom", ["adjoin_root"]], ["add", "theorem", "lift_hom_mk", ["adjoin_root"]], ["add", "theorem", "lift_hom_of", ["adjoin_root"]], ["add", "theorem", "lift_hom_root", ["adjoin_root"]], ["mod", "theorem", "lift_mk", ["adjoin_root"]]]}]}, {"timestamp": 1633687480, "sha": "82e2b98a", "message": "feat(ring_theory): generalize `power_basis.equiv` (#9528)\n`power_basis.equiv'` is an alternate formulation of `power_basis.equiv` that is somewhat more general when not over a field: instead of requiring the minimal polynomials are equal, we only require the generators are the roots of each other's minimal polynomials.\nThis is not quite enough to show `adjoin_root (minpoly R (pb : power_basis R S).gen)` is isomorphic to `S`, since `minpoly R (adjoin_root.root g)` is not guaranteed to have the same exact roots as `g` itself. So in a follow-up PR I will strengthen `power_basis.equiv'` to `adjoin_root.equiv'` that requires the correct hypothesis.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["del", "theorem", "equiv_aeval", ["power_basis"]], ["del", "theorem", "equiv_gen", ["power_basis"]], ["del", "theorem", "equiv_map", ["power_basis"]], ["add", "theorem", "equiv_of_minpoly_aeval", ["power_basis"]], ["add", "theorem", "equiv_of_minpoly_gen", ["power_basis"]], ["add", "theorem", "equiv_of_minpoly_map", ["power_basis"]], ["add", "theorem", "equiv_of_minpoly_symm", ["power_basis"]], ["add", "theorem", "equiv_of_root_aeval", ["power_basis"]], ["add", "theorem", "equiv_of_root_gen", ["power_basis"]], ["add", "theorem", "equiv_of_root_map", ["power_basis"]], ["add", "theorem", "equiv_of_root_symm", ["power_basis"]], ["del", "theorem", "equiv_symm", ["power_basis"]]]}]}, {"timestamp": 1633687479, "sha": "179a4952", "message": "feat(algebra/star/algebra): generalize to modules (#9484)\nThis means there is now a `star_module ℂ (ι → ℂ)` instance available.\nThis adds `star_add_monoid`, and renames `star_algebra` to `star_module` with significantly relaxed typeclass arguments.\nThis also uses `export` to cut away some unnecessary definitions, and adds the missing `pi.star_def` to match `pi.add_def` etc.", "changes": [{"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/algebra/star/algebra.lean", "newPath": null, "changes": [["del", "theorem", "star_smul", []]]}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["del", "def", "star", []], ["del", "theorem", "star_add", []], ["mod", "def", "star_add_equiv", []], ["mod", "theorem", "star_id_of_comm", []], ["del", "theorem", "star_mul", []], ["mod", "theorem", "star_zero", []]]}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/algebra/star/pi.lean", "newPath": "src/algebra/star/pi.lean", "changes": [["add", "theorem", "star_def", ["pi"]]]}]}, {"timestamp": 1633678390, "sha": "9ecdd380", "message": "chore(algebra/order/sub): generalize 2 lemmas (#9611)\n* generalize `lt_sub_iff_left` and `lt_sub_iff_right`;\n* use general lemmas in `data.real.ennreal`.", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "lt_sub_comm", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "lt_sub_comm", ["ennreal"]], ["mod", "theorem", "lt_sub_iff_add_lt", ["ennreal"]]]}]}, {"timestamp": 1633678389, "sha": "639a7ef4", "message": "feat(algebra/order/ring): variants of mul_sub' (#9604)\nAdd some variants of `mul_sub'` and `sub_mul'` and use them in `ennreal`. (Also sneaking in a tiny stylistic change in `topology/ennreal`.)", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["mod", "theorem", "mul_sub'", []], ["add", "theorem", "mul_sub_ge", []], ["mod", "theorem", "sub_mul'", []], ["add", "theorem", "sub_mul_ge", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "sub_mul_ge", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1633678388, "sha": "83a07ce0", "message": "feat(data/nat/log): add antitonicity lemmas for first argument (#9597)\n`log` and `clog` are only antitone on bases >1, so we include this as an\nassumption in `log_le_log_of_left_ge` (resp. `clog_le_...`) and as a\ndomain restriction in `log_left_gt_one_anti` (resp. `clog_left_...`).", "changes": [{"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": [["add", "theorem", "clog_antitone_left", ["nat"]], ["add", "theorem", "clog_le_clog_of_left_ge", ["nat"]], ["del", "theorem", "clog_mono", ["nat"]], ["add", "theorem", "clog_monotone", ["nat"]], ["add", "theorem", "log_antitone_left", ["nat"]], ["add", "theorem", "log_le_log_of_left_ge", ["nat"]], ["del", "theorem", "log_mono", ["nat"]], ["add", "theorem", "log_monotone", ["nat"]]]}]}, {"timestamp": 1633678386, "sha": "41dd4da3", "message": "feat(data/multiset/interval): Intervals as `multiset`s (#9588)\nThis provides API for `multiset.Ixx` (except `multiset.Ico`).", "changes": [{"oldPath": "src/data/multiset/erase_dup.lean", "newPath": "src/data/multiset/erase_dup.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/multiset/interval.lean", "changes": [["add", "theorem", "Icc_eq_zero_iff", ["multiset"]], ["add", "theorem", "Icc_eq_zero_of_lt", ["multiset"]], ["add", "theorem", "Icc_self", ["multiset"]], ["add", "theorem", "Ioc_eq_zero_iff", ["multiset"]], ["add", "theorem", "Ioc_eq_zero_of_le", ["multiset"]], ["add", "theorem", "Ioc_self", ["multiset"]], ["add", "theorem", "Ioo_eq_zero", ["multiset"]], ["add", "theorem", "Ioo_eq_zero_iff", ["multiset"]], ["add", "theorem", "Ioo_eq_zero_of_le", ["multiset"]], ["add", "theorem", "Ioo_self", ["multiset"]], ["add", "theorem", "map_add_const_Icc", ["multiset"]], ["add", "theorem", "map_add_const_Ioc", ["multiset"]], ["add", "theorem", "map_add_const_Ioo", ["multiset"]]]}]}, {"timestamp": 1633678385, "sha": "c3768cc8", "message": "refactor(data/multiset/basic): remove sub lemmas (#9578)\n* Remove the multiset sub lemmas that are special cases of lemmas in `algebra/order/sub`\n* [This](https://github.com/leanprover-community/mathlib/blob/14c3324143beef6e538f63da9c48d45f4a949604/src/data/multiset/basic.lean#L1513-L1538) gives the list of renamings.\n* Use `derive` in `pnat.factors`.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "add_sub_cancel", ["multiset"]], ["del", "theorem", "add_sub_cancel_left", ["multiset"]], ["del", "theorem", "add_sub_of_le", ["multiset"]], ["mod", "theorem", "eq_union_left", ["multiset"]], ["del", "theorem", "le_sub_add", ["multiset"]], ["mod", "theorem", "le_union_left", ["multiset"]], ["del", "theorem", "sub_add'", ["multiset"]], ["del", "theorem", "sub_add_cancel", ["multiset"]], ["del", "theorem", "sub_le_self", ["multiset"]], ["del", "theorem", "sub_le_sub_left", ["multiset"]], ["del", "theorem", "sub_le_sub_right", ["multiset"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": [["del", "theorem", "add_sub_of_le", ["prime_multiset"]]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}]}, {"timestamp": 1633678383, "sha": "c4006779", "message": "feat(algebra/module/basic): `module rat E` is a subsingleton (#9570)\n* allow different (semi)rings in `add_monoid_hom.map_int_cast_smul` and `add_monoid_hom.map_nat_cast_smul`;\n* add `add_monoid_hom.map_inv_int_cast_smul` and `add_monoid_hom.map_inv_nat_cast_smul`;\n* allow different division rings in `add_monoid_hom.map_rat_cast_smul`, drop `char_zero` assumption;\n* prove `subsingleton (module rat M)`;\n* add a few convenience lemmas.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "map_int_cast_smul", ["add_monoid_hom"]], ["add", "theorem", "map_inv_int_cast_smul", ["add_monoid_hom"]], ["add", "theorem", "map_inv_nat_cast_smul", ["add_monoid_hom"]], ["mod", "theorem", "map_nat_cast_smul", ["add_monoid_hom"]], ["mod", "theorem", "map_rat_cast_smul", ["add_monoid_hom"]], ["add", "theorem", "inv_int_cast_smul_eq", []], ["add", "theorem", "inv_nat_cast_smul_eq", []], ["add", "theorem", "rat_cast_smul_eq", []], ["add", "theorem", "subsingleton_rat_module", []]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "cast_def", ["rat"]], ["add", "theorem", "cast_inv_int", ["rat"]], ["add", "theorem", "cast_inv_nat", ["rat"]]]}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}]}, {"timestamp": 1633678382, "sha": "eb3595ed", "message": "move(order/*): move from `algebra.order.` the files that aren't about algebra (#9562)\n`algebra.order.basic` and `algebra.order.functions` never mention `+`, `-` or `*`. Thus they belong under `order`.", "changes": [{"oldPath": "archive/arithcc.lean", "newPath": "archive/arithcc.lean", "changes": []}, {"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}, {"oldPath": "src/algebra/order/basic.lean", "newPath": null, "changes": [["del", "theorem", "cmp_compares", []], ["del", "theorem", "cmp_eq_cmp_symm", []], ["del", "theorem", "cmp_eq_eq_iff", []], ["del", "theorem", "cmp_eq_gt_iff", []], ["del", "theorem", "cmp_eq_lt_iff", []], ["del", "def", "cmp_le", []], ["del", "theorem", "cmp_le_eq_cmp", []], ["del", "theorem", "cmp_le_swap", []], ["del", "theorem", "cmp_self_eq_eq", []], ["del", "theorem", "cmp_swap", []], ["del", "theorem", "not_gt", ["eq"]], ["del", "theorem", "not_lt", ["eq"]], ["del", "theorem", "trans_le", ["eq"]], ["del", "theorem", "eq_iff_le_not_lt", []], ["del", "theorem", "eq_of_forall_ge_iff", []], ["del", "theorem", "eq_of_forall_le_iff", []], ["del", "theorem", "eq_or_lt_of_le", []], ["del", "theorem", "exists_ge_of_linear", []], ["del", "theorem", "forall_lt_iff_le'", []], ["del", "theorem", "forall_lt_iff_le", []], ["del", "theorem", "ge_iff_le", []], ["del", "theorem", "ge_of_eq", []], ["del", "theorem", "gt_iff_lt", []], ["del", "theorem", "le_iff_eq", ["has_le", "le"]], ["del", "theorem", "le_or_le", ["has_le", "le"]], ["del", "theorem", "le_or_lt", ["has_le", "le"]], ["del", "theorem", "lt_iff_ne", ["has_le", "le"]], ["del", "theorem", "lt_or_le", ["has_le", "le"]], ["del", "theorem", "trans_eq", ["has_le", "le"]], ["del", "theorem", "lt_or_lt", ["has_lt", "lt"]], ["del", "theorem", "ne'", ["has_lt", "lt"]], ["del", "theorem", "le_iff_eq_or_lt", []], ["del", "theorem", "le_iff_le_iff_lt_iff_lt", []], ["del", "theorem", "le_iff_le_of_cmp_eq_cmp", []], ["del", "theorem", "le_imp_le_iff_lt_imp_lt", []], ["del", "theorem", "le_implies_le_of_le_of_le", []], ["del", "theorem", "le_of_forall_le'", []], ["del", "theorem", "le_of_forall_le", []], ["del", "theorem", "le_of_forall_lt'", []], ["del", "theorem", "le_of_forall_lt", []], ["del", "theorem", "le_rfl", []], ["del", "def", "linear_order_of_compares", []], ["del", "theorem", "lt_iff_le_and_ne", []], ["del", "theorem", "lt_iff_lt_of_cmp_eq_cmp", []], ["del", "theorem", "lt_iff_lt_of_le_iff_le'", []], ["del", "theorem", "lt_iff_lt_of_le_iff_le", []], ["del", "theorem", "lt_iff_not_ge'", []], ["del", "theorem", "lt_imp_lt_of_le_imp_le", []], ["del", "theorem", "lt_of_not_ge'", []], ["del", "theorem", "le_iff_lt", ["ne"]], ["del", "theorem", "lt_or_lt", ["ne"]], ["del", "theorem", "ne_iff_lt_iff_le", []], ["del", "theorem", "not_le_of_lt", []], ["del", "theorem", "not_lt_iff_eq_or_lt", []], ["del", "theorem", "not_lt_of_le", []], ["del", "theorem", "eq_eq", ["ordering", "compares"]], ["del", "theorem", "eq_gt", ["ordering", "compares"]], ["del", "theorem", "eq_lt", ["ordering", "compares"]], ["del", "theorem", "inj", ["ordering", "compares"]], ["del", "theorem", "le_antisymm", ["ordering", "compares"]], ["del", "theorem", "le_total", ["ordering", "compares"]], ["del", "theorem", "ne_gt", ["ordering", "compares"]], ["del", "theorem", "ne_lt", ["ordering", "compares"]], ["del", "def", "compares", ["ordering"]], ["del", "theorem", "compares_iff_of_compares_impl", ["ordering"]], ["del", "theorem", "compares_swap", ["ordering"]], ["del", "theorem", "or_else_eq_lt", ["ordering"]], ["del", "theorem", "swap_eq_iff_eq_swap", ["ordering"]], ["del", "theorem", "swap_or_else", ["ordering"]]]}, {"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "not_gt", ["eq"]], ["add", "theorem", "not_lt", ["eq"]], ["add", "theorem", "trans_le", ["eq"]], ["add", "theorem", "eq_iff_le_not_lt", []], ["add", "theorem", "eq_of_forall_ge_iff", []], ["add", "theorem", "eq_of_forall_le_iff", []], ["add", "theorem", "eq_or_lt_of_le", []], ["add", "theorem", "exists_ge_of_linear", []], ["add", "theorem", "forall_lt_iff_le'", []], ["add", "theorem", "forall_lt_iff_le", []], ["add", "theorem", "ge_iff_le", []], ["add", "theorem", "ge_of_eq", []], ["add", "theorem", "gt_iff_lt", []], ["add", "theorem", "le_iff_eq", ["has_le", "le"]], ["add", "theorem", "le_or_le", ["has_le", "le"]], ["add", "theorem", "le_or_lt", ["has_le", "le"]], ["add", "theorem", "lt_iff_ne", ["has_le", "le"]], ["add", "theorem", "lt_or_le", ["has_le", "le"]], ["add", "theorem", "trans_eq", ["has_le", "le"]], ["add", "theorem", "lt_or_lt", ["has_lt", "lt"]], ["add", "theorem", "ne'", ["has_lt", "lt"]], ["add", "theorem", "le_iff_eq_or_lt", []], ["add", "theorem", "le_iff_le_iff_lt_iff_lt", []], ["add", "theorem", "le_imp_le_iff_lt_imp_lt", []], ["add", "theorem", "le_implies_le_of_le_of_le", []], ["add", "theorem", "le_of_forall_le'", []], ["add", "theorem", "le_of_forall_le", []], ["add", "theorem", "le_of_forall_lt'", []], ["add", "theorem", "le_of_forall_lt", []], ["add", "theorem", "le_rfl", []], ["add", "theorem", "lt_iff_le_and_ne", []], ["add", "theorem", "lt_iff_lt_of_le_iff_le'", []], ["add", "theorem", "lt_iff_lt_of_le_iff_le", []], ["add", "theorem", "lt_iff_not_ge'", []], ["add", "theorem", "lt_imp_lt_of_le_imp_le", []], ["add", "theorem", "lt_of_not_ge'", []], ["mod", "theorem", "lt_self_iff_false", []], ["add", "theorem", "le_iff_lt", ["ne"]], ["add", "theorem", "lt_or_lt", ["ne"]], ["add", "theorem", "ne_iff_lt_iff_le", []], ["add", "theorem", "not_le_of_lt", []], ["add", "theorem", "not_lt_iff_eq_or_lt", []], ["add", "theorem", "not_lt_of_le", []], ["del", "theorem", "cmp_le_flip", ["order_dual"]], ["del", "theorem", "dual_compares", ["order_dual"]]]}, {"oldPath": null, "newPath": "src/order/compare.lean", "changes": [["add", "theorem", "cmp_compares", []], ["add", "theorem", "cmp_eq_cmp_symm", []], ["add", "theorem", "cmp_eq_eq_iff", []], ["add", "theorem", "cmp_eq_gt_iff", []], ["add", "theorem", "cmp_eq_lt_iff", []], ["add", "def", "cmp_le", []], ["add", "theorem", "cmp_le_eq_cmp", []], ["add", "theorem", "cmp_le_swap", []], ["add", "theorem", "cmp_self_eq_eq", []], ["add", "theorem", "cmp_swap", []], ["add", "theorem", "le_iff_le_of_cmp_eq_cmp", []], ["add", "def", "linear_order_of_compares", []], ["add", "theorem", "lt_iff_lt_of_cmp_eq_cmp", []], ["add", "theorem", "cmp_le_flip", ["order_dual"]], ["add", "theorem", "dual_compares", ["order_dual"]], ["add", "theorem", "eq_eq", ["ordering", "compares"]], ["add", "theorem", "eq_gt", ["ordering", "compares"]], ["add", "theorem", "eq_lt", ["ordering", "compares"]], ["add", "theorem", "inj", ["ordering", "compares"]], ["add", "theorem", "le_antisymm", ["ordering", "compares"]], ["add", "theorem", "le_total", ["ordering", "compares"]], ["add", "theorem", "ne_gt", ["ordering", "compares"]], ["add", "theorem", "ne_lt", ["ordering", "compares"]], ["add", "def", "compares", ["ordering"]], ["add", "theorem", "compares_iff_of_compares_impl", ["ordering"]], ["add", "theorem", "compares_swap", ["ordering"]], ["add", "theorem", "or_else_eq_lt", ["ordering"]], ["add", "theorem", "swap_eq_iff_eq_swap", ["ordering"]], ["add", "theorem", "swap_or_else", ["ordering"]]]}, {"oldPath": "src/algebra/order/functions.lean", "newPath": "src/order/min_max.lean", "changes": []}, {"oldPath": "src/order/monotone.lean", "newPath": "src/order/monotone.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}]}, {"timestamp": 1633678380, "sha": "8aa18938", "message": "feat(group_theory/subgroup/basic): Analog of `mul_aut.conj` for normal subgroups. (#9552)\nAnalog of `mul_aut.conj` for normal subgroups (pretty much just copying the code from `data/equiv/mul_add_aut.lean`).", "changes": [{"oldPath": "src/group_theory/group_action/conj_act.lean", "newPath": "src/group_theory/group_action/conj_act.lean", "changes": [["add", "theorem", "coe_conj_smul", ["conj_act", "subgroup"]], ["add", "def", "conj_normal", ["mul_aut"]], ["add", "theorem", "conj_normal_apply", ["mul_aut"]], ["add", "theorem", "conj_normal_inv_apply", ["mul_aut"]], ["add", "theorem", "conj_normal_symm_apply", ["mul_aut"]]]}]}, {"timestamp": 1633678379, "sha": "1390b447", "message": "feat(analysis/convex/function): API for strict convex functions (#9437)\nThis provides all the basic API for `strict_convex_on` and `strict_concave_on`.", "changes": [{"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["del", "theorem", "concave_on_iff_forall_pos_ne", []], ["add", "theorem", "concave_on_iff_pairwise_on_pos", []], ["del", "theorem", "convex_on_iff_forall_pos_ne", []], ["add", "theorem", "convex_on_iff_pairwise_on_pos", []], ["add", "theorem", "strict_concave_on_of_lt", ["linear_order"]], ["add", "theorem", "strict_convex_on_of_lt", ["linear_order"]], ["add", "theorem", "neg_strict_concave_on_iff", []], ["add", "theorem", "neg_strict_convex_on_iff", []], ["add", "theorem", "add", ["strict_concave_on"]], ["add", "theorem", "concave_on", ["strict_concave_on"]], ["add", "theorem", "convex_gt", ["strict_concave_on"]], ["add", "theorem", "inf", ["strict_concave_on"]], ["add", "theorem", "left_lt_of_lt_right'", ["strict_concave_on"]], ["add", "theorem", "left_lt_of_lt_right", ["strict_concave_on"]], ["add", "theorem", "lt_on_open_segment'", ["strict_concave_on"]], ["add", "theorem", "lt_on_open_segment", ["strict_concave_on"]], ["add", "theorem", "lt_right_of_left_lt'", ["strict_concave_on"]], ["add", "theorem", "lt_right_of_left_lt", ["strict_concave_on"]], ["add", "theorem", "subset", ["strict_concave_on"]], ["add", "theorem", "translate_left", ["strict_concave_on"]], ["add", "theorem", "translate_right", ["strict_concave_on"]], ["add", "theorem", "strict_concave_on_iff_div", []], ["add", "theorem", "add", ["strict_convex_on"]], ["add", "theorem", "convex_lt", ["strict_convex_on"]], ["add", "theorem", "convex_on", ["strict_convex_on"]], ["add", "theorem", "lt_left_of_right_lt'", ["strict_convex_on"]], ["add", "theorem", "lt_left_of_right_lt", ["strict_convex_on"]], ["add", "theorem", "lt_on_open_segment'", ["strict_convex_on"]], ["add", "theorem", "lt_on_open_segment", ["strict_convex_on"]], ["add", "theorem", "lt_right_of_left_lt'", ["strict_convex_on"]], ["add", "theorem", "lt_right_of_left_lt", ["strict_convex_on"]], ["add", "theorem", "subset", ["strict_convex_on"]], ["add", "theorem", "sup", ["strict_convex_on"]], ["add", "theorem", "translate_left", ["strict_convex_on"]], ["add", "theorem", "translate_right", ["strict_convex_on"]], ["add", "theorem", "strict_convex_on_iff_div", []]]}, {"oldPath": "src/analysis/convex/slope.lean", "newPath": "src/analysis/convex/slope.lean", "changes": [["add", "theorem", "slope_anti_adjacent", ["strict_concave_on"]], ["add", "theorem", "strict_concave_on_iff_slope_strict_anti_adjacent", []], ["add", "theorem", "strict_concave_on_of_slope_strict_anti_adjacent", []], ["add", "theorem", "slope_strict_mono_adjacent", ["strict_convex_on"]], ["add", "theorem", "strict_convex_on_iff_slope_strict_mono_adjacent", []], ["add", "theorem", "strict_convex_on_of_slope_strict_mono_adjacent", []]]}]}, {"timestamp": 1633678378, "sha": "a0504eb3", "message": "refactor(data/*/interval): generalize `finset.Ico` to locally finite orders (#7987)\n`finset.Ico` currently goes `ℕ → ℕ → finset ℕ`. This generalizes it to `α → α → finset α` where `locally_finite_order α`.\nThis also ports all the existing `finset.Ico` lemmas to the new API, which involves renaming and moving them to `data.finset.interval` or `data.nat.interval` depending on whether I could generalize them away from `ℕ` or not.", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/data/fin/interval.lean", "newPath": "src/data/fin/interval.lean", "changes": [["add", "theorem", "Ico_eq_finset_subtype", ["fin"]], ["add", "theorem", "card_Ico", ["fin"]], ["add", "theorem", "card_fintype_Ico", ["fin"]], ["add", "theorem", "map_subtype_embedding_Ico", ["fin"]]]}, {"oldPath": "src/data/finset/default.lean", "newPath": "src/data/finset/default.lean", "changes": []}, {"oldPath": "src/data/finset/interval.lean", "newPath": "src/data/finset/interval.lean", "changes": [["add", "theorem", "Ico_diff_Ico_left", ["finset"]], ["add", "theorem", "Ico_diff_Ico_right", ["finset"]], ["add", "theorem", "Ico_disjoint_Ico_consecutive", ["finset"]], ["add", "theorem", "Ico_eq_empty_iff", ["finset"]], ["add", "theorem", "Ico_eq_empty_of_le", ["finset"]], ["add", "theorem", "Ico_filter_le", ["finset"]], ["add", "theorem", "Ico_filter_le_left", ["finset"]], ["add", "theorem", "Ico_filter_le_of_le_left", ["finset"]], ["add", "theorem", "Ico_filter_le_of_left_le", ["finset"]], ["add", "theorem", "Ico_filter_le_of_right_le", ["finset"]], ["add", "theorem", "Ico_filter_lt", ["finset"]], ["add", "theorem", "Ico_filter_lt_of_le_left", ["finset"]], ["add", "theorem", "Ico_filter_lt_of_le_right", ["finset"]], ["add", "theorem", "Ico_filter_lt_of_right_le", ["finset"]], ["add", "theorem", "Ico_insert_right", ["finset"]], ["add", "theorem", "Ico_inter_Ico", ["finset"]], ["add", "theorem", "Ico_inter_Ico_consecutive", ["finset"]], ["add", "theorem", "Ico_self", ["finset"]], ["add", "theorem", "Ico_subset_Ico_iff", ["finset"]], ["add", "theorem", "Ico_union_Ico'", ["finset"]], ["add", "theorem", "Ico_union_Ico", ["finset"]], ["add", "theorem", "Ico_union_Ico_eq_Ico", ["finset"]], ["add", "theorem", "Ioo_insert_left", ["finset"]], ["add", "theorem", "image_add_const_Ico", ["finset"]], ["add", "theorem", "nonempty_Ico", ["finset"]], ["add", "theorem", "right_not_mem_Ico", ["finset"]]]}, {"oldPath": "src/data/finset/intervals.lean", "newPath": null, "changes": [["del", "theorem", "card", ["finset", "Ico"]], ["del", "theorem", "coe_eq_Ico", ["finset", "Ico"]], ["del", "theorem", "diff_left", ["finset", "Ico"]], ["del", "theorem", "diff_right", ["finset", "Ico"]], ["del", "theorem", "disjoint_consecutive", ["finset", "Ico"]], ["del", "theorem", "eq_empty_iff", ["finset", "Ico"]], ["del", "theorem", "eq_empty_of_le", ["finset", "Ico"]], ["del", "theorem", "filter_Ico_bot", ["finset", "Ico"]], ["del", "theorem", "filter_le", ["finset", "Ico"]], ["del", "theorem", "filter_le_of_le", ["finset", "Ico"]], ["del", "theorem", "filter_le_of_le_bot", ["finset", "Ico"]], ["del", "theorem", "filter_le_of_top_le", ["finset", "Ico"]], ["del", "theorem", "filter_lt", ["finset", "Ico"]], ["del", "theorem", "filter_lt_of_ge", ["finset", "Ico"]], ["del", "theorem", "filter_lt_of_le_bot", ["finset", "Ico"]], ["del", "theorem", "filter_lt_of_top_le", ["finset", "Ico"]], ["del", "theorem", "image_add", ["finset", "Ico"]], ["del", "theorem", "image_const_sub", ["finset", "Ico"]], ["del", "theorem", "image_sub", ["finset", "Ico"]], ["del", "theorem", "insert_succ_bot", ["finset", "Ico"]], ["del", "theorem", "inter", ["finset", "Ico"]], ["del", "theorem", "inter_consecutive", ["finset", "Ico"]], ["del", "theorem", "mem", ["finset", "Ico"]], ["del", "theorem", "not_mem_top", ["finset", "Ico"]], ["del", "theorem", "pred_singleton", ["finset", "Ico"]], ["del", "theorem", "self_eq_empty", ["finset", "Ico"]], ["del", "theorem", "subset_iff", ["finset", "Ico"]], ["del", "theorem", "succ_singleton", ["finset", "Ico"]], ["del", "theorem", "succ_top'", ["finset", "Ico"]], ["del", "theorem", "succ_top", ["finset", "Ico"]], ["del", "theorem", "to_finset", ["finset", "Ico"]], ["del", "theorem", "union'", ["finset", "Ico"]], ["del", "theorem", "union", ["finset", "Ico"]], ["del", "theorem", "union_consecutive", ["finset", "Ico"]], ["del", "theorem", "val", ["finset", "Ico"]], ["del", "theorem", "zero_bot", ["finset", "Ico"]], ["del", "def", "Ico", ["finset"]], ["del", "theorem", "card", ["finset", "Ico_ℤ"]], ["del", "theorem", "mem", ["finset", "Ico_ℤ"]], ["del", "def", "Ico_ℤ", ["finset"]], ["del", "theorem", "range_eq_Ico", ["finset"]], ["del", "theorem", "range_image_pred_top_sub", ["finset"]]]}, {"oldPath": "src/data/fintype/intervals.lean", "newPath": null, "changes": [["del", "theorem", "Icc_ℕ_card", ["set"]], ["del", "theorem", "Icc_ℕ_finite", ["set"]], ["del", "theorem", "Icc_ℤ_card", ["set"]], ["del", "theorem", "Icc_ℤ_finite", ["set"]], ["del", "theorem", "Ico_pnat_card", ["set"]], ["del", "theorem", "Ico_ℕ_card", ["set"]], ["del", "theorem", "Ico_ℕ_finite", ["set"]], ["del", "theorem", "Ico_ℤ_card", ["set"]], ["del", "theorem", "Ico_ℤ_finite", ["set"]], ["del", "theorem", "Ioc_ℕ_card", ["set"]], ["del", "theorem", "Ioc_ℕ_finite", ["set"]], ["del", "theorem", "Ioc_ℤ_card", ["set"]], ["del", "theorem", "Ioc_ℤ_finite", ["set"]], ["del", "theorem", "Ioo_ℕ_card", ["set"]], ["del", "theorem", "Ioo_ℕ_finite", ["set"]], ["del", "theorem", "Ioo_ℤ_card", ["set"]], ["del", "theorem", "Ioo_ℤ_finite", ["set"]]]}, {"oldPath": "src/data/int/interval.lean", "newPath": "src/data/int/interval.lean", "changes": [["add", "theorem", "Ico_eq_finset_map", ["int"]], ["add", "theorem", "card_Ico", ["int"]], ["add", "theorem", "card_Ico_of_le", ["int"]], ["add", "theorem", "card_fintype_Ico", ["int"]], ["add", "theorem", "card_fintype_Ico_of_le", ["int"]]]}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "range_eq_Ico", ["finset"]], ["add", "theorem", "Icc_pred_right", ["nat"]], ["add", "theorem", "Ico_eq_range'", ["nat"]], ["add", "theorem", "Ico_image_const_sub_eq_Ico", ["nat"]], ["add", "theorem", "Ico_insert_succ_left", ["nat"]], ["add", "theorem", "Ico_pred_singleton", ["nat"]], ["add", "theorem", "Ico_succ_left", ["nat"]], ["add", "theorem", "Ico_succ_right", ["nat"]], ["add", "theorem", "Ico_succ_right_eq_insert_Ico", ["nat"]], ["add", "theorem", "Ico_succ_singleton", ["nat"]], ["add", "theorem", "Ico_succ_succ", ["nat"]], ["add", "theorem", "Ico_zero_eq_range", ["nat"]], ["add", "theorem", "Iio_eq_range", ["nat"]], ["add", "theorem", "card_Ico", ["nat"]], ["add", "theorem", "card_fintype_Ico", ["nat"]], ["add", "theorem", "image_sub_const_Ico", ["nat"]], ["add", "theorem", "range_image_pred_top_sub", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/pnat/interval.lean", "newPath": "src/data/pnat/interval.lean", "changes": [["add", "theorem", "Ico_eq_finset_subtype", ["pnat"]], ["add", "theorem", "card_Ico", ["pnat"]], ["add", "theorem", "card_fintype_Ico", ["pnat"]], ["add", "theorem", "map_subtype_embedding_Ico", ["pnat"]]]}, {"oldPath": "src/data/pnat/intervals.lean", "newPath": null, "changes": [["del", "theorem", "card", ["pnat", "Ico"]], ["del", "theorem", "mem", ["pnat", "Ico"]], ["del", "def", "Ico", ["pnat"]]]}, {"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/number_theory/ADE_inequality.lean", "newPath": "src/number_theory/ADE_inequality.lean", "changes": []}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/order/locally_finite.lean", "newPath": "src/order/locally_finite.lean", "changes": [["add", "def", "Ico", ["finset"]], ["add", "theorem", "Ico_subset_Ico", ["finset"]], ["add", "def", "Iio", ["finset"]], ["add", "theorem", "Iio_eq_Ico", ["finset"]], ["add", "theorem", "coe_Ico", ["finset"]], ["add", "theorem", "coe_Iio", ["finset"]], ["add", "theorem", "map_subtype_embedding_Ico", ["finset"]], ["add", "theorem", "mem_Ico", ["finset"]], ["add", "theorem", "mem_Iio", ["finset"]], ["add", "theorem", "subtype_Ico_eq", ["finset"]], ["add", "def", "Iio", ["multiset"]], ["add", "theorem", "mem_Iio", ["multiset"]], ["add", "theorem", "finite_Ico", ["set"]], ["add", "theorem", "finite_Iio", ["set"]]]}, {"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": []}, {"oldPath": "src/ring_theory/henselian.lean", "newPath": "src/ring_theory/henselian.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}]}, {"timestamp": 1633673326, "sha": "ba2454e6", "message": "feat(ring_theory/coprime): two lemmas prereq for #8611 (#9456)\nTwo variants of the fact that `¬ is_coprime 0 0`.", "changes": [{"oldPath": "src/ring_theory/coprime/basic.lean", "newPath": "src/ring_theory/coprime/basic.lean", "changes": [["add", "theorem", "ne_zero", ["is_coprime"]], ["add", "theorem", "sq_add_sq_ne_zero", ["is_coprime"]]]}]}, {"timestamp": 1633660818, "sha": "235bfd7e", "message": "chore(scripts): update nolints.txt (#9610)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1633656729, "sha": "9ea4568b", "message": "fix(topology/path_connected): add `continuity` to `path.continuous_extend` (#9605)", "changes": [{"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1633653016, "sha": "fa3b6222", "message": "refactor(analysis/normed_space/linear_isometry): semilinear isometries (#9551)\nGeneralize the theory of linear isometries to the semilinear setting.", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["mod", "theorem", "coe_comp", ["linear_isometry"]], ["mod", "theorem", "coe_fn_injective", ["linear_isometry"]], ["mod", "def", "comp", ["linear_isometry"]], ["mod", "theorem", "comp_assoc", ["linear_isometry"]], ["mod", "theorem", "ext", ["linear_isometry"]], ["mod", "theorem", "id_comp", ["linear_isometry"]], ["mod", "theorem", "map_eq_iff", ["linear_isometry"]], ["mod", "theorem", "map_ne", ["linear_isometry"]], ["mod", "theorem", "map_smul", ["linear_isometry"]], ["add", "theorem", "map_smulₛₗ", ["linear_isometry"]], ["mod", "def", "to_continuous_linear_map", ["linear_isometry"]], ["mod", "theorem", "to_linear_map_injective", ["linear_isometry"]], ["mod", "structure", "linear_isometry", []], ["mod", "theorem", "apply_symm_apply", ["linear_isometry_equiv"]], ["mod", "theorem", "coe_coe''", ["linear_isometry_equiv"]], ["mod", "theorem", "coe_coe'", ["linear_isometry_equiv"]], ["mod", "theorem", "coe_coe", ["linear_isometry_equiv"]], ["mod", "theorem", "coe_mk", ["linear_isometry_equiv"]], ["mod", "theorem", "coe_symm_trans", ["linear_isometry_equiv"]], ["mod", "theorem", "coe_to_linear_equiv", ["linear_isometry_equiv"]], ["mod", "theorem", "coe_trans", ["linear_isometry_equiv"]], ["mod", "theorem", "ext", ["linear_isometry_equiv"]], ["mod", "theorem", "map_smul", ["linear_isometry_equiv"]], ["add", "theorem", "map_smulₛₗ", ["linear_isometry_equiv"]], ["mod", "def", "of_bounds", ["linear_isometry_equiv"]], ["mod", "theorem", "range_eq_univ", ["linear_isometry_equiv"]], ["mod", "def", "symm", ["linear_isometry_equiv"]], ["mod", "theorem", "symm_trans", ["linear_isometry_equiv"]], ["mod", "def", "to_continuous_linear_equiv", ["linear_isometry_equiv"]], ["mod", "def", "to_homeomorph", ["linear_isometry_equiv"]], ["mod", "def", "to_isometric", ["linear_isometry_equiv"]], ["mod", "theorem", "to_linear_equiv_injective", ["linear_isometry_equiv"]], ["mod", "def", "to_linear_isometry", ["linear_isometry_equiv"]], ["mod", "def", "trans", ["linear_isometry_equiv"]], ["mod", "theorem", "trans_assoc", ["linear_isometry_equiv"]], ["mod", "theorem", "trans_refl", ["linear_isometry_equiv"]], ["mod", "structure", "linear_isometry_equiv", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}]}, {"timestamp": 1633641796, "sha": "9518ce12", "message": "feat(topology/algebra): valued fields (#9589)\nThis is a modernized version of code from the perfectoid spaces project.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "eq_zero_or_unit", ["group_with_zero"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "def", "lt_add_subgroup", ["valuation"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "separated_iff_zero_closed", ["topological_add_group"]], ["add", "theorem", "separated_of_zero_sep", ["topological_add_group"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/valuation.lean", "changes": [["add", "theorem", "cauchy_iff", ["valued"]], ["add", "theorem", "loc_const", ["valued"]], ["add", "theorem", "mem_nhds", ["valued"]], ["add", "theorem", "mem_nhds_zero", ["valued"]], ["add", "theorem", "subgroups_basis", ["valued"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/valued_field.lean", "changes": [["add", "theorem", "inversion_estimate", ["valuation"]], ["add", "theorem", "continuous_extension", ["valued"]], ["add", "theorem", "continuous_valuation", ["valued"]], ["add", "theorem", "extension_extends", ["valued"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_nhds", ["dense_range"]]]}]}, {"timestamp": 1633633796, "sha": "ebccce9b", "message": "feat(measure_theory/covering/besicovitch): the measurable Besicovitch covering theorem (#9576)\nThe measurable Besicovitch theorem ensures that, in nice metric spaces, if at every point one considers a class of balls of arbitrarily small radii, called admissible balls, then one can cover almost all the space by a family of disjoint admissible balls. It is deduced from the topological Besicovitch theorem.", "changes": [{"oldPath": "src/measure_theory/covering/besicovitch.lean", "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": [["add", "theorem", "exist_finset_disjoint_balls_large_measure", ["besicovitch"]], ["add", "theorem", "exists_disjoint_closed_ball_covering", ["besicovitch"]], ["add", "theorem", "exists_disjoint_closed_ball_covering_of_finite_measure", ["besicovitch"]]]}]}, {"timestamp": 1633619374, "sha": "8a60fd75", "message": "refactor(data/ennreal/basic): prove has_ordered_sub instance (#9582)\n* Give `has_sub` and `has_ordered_sub` instances on `with_top α`.\n* This gives a new subtraction on `ennreal`. The lemma `ennreal.sub_eq_Inf` proves that it is equal to the old value.\n* Simplify many proofs about `sub` on `ennreal` \n* Proofs that are instantiations of more general lemmas will be removed in a subsequent PR\n* Many lemmas that require `add_le_cancellable` in general are reformulated using `≠ ∞`\n* Lemmas are reordered, but no lemmas are renamed, removed, or have a different type. Some `@[simp]` tags are removed if a more general simp lemma applies.\n* Minor: generalize `preorder` to `has_le` in `has_ordered_sub` (not necessary for this PR, but useful in another (abandoned) branch).", "changes": [{"oldPath": "src/algebra/order/monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": [["add", "theorem", "add_coe_eq_top_iff", ["with_top"]], ["add", "theorem", "coe_add_eq_top_iff", ["with_top"]]]}, {"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["add", "theorem", "coe_sub", ["with_top"]], ["add", "theorem", "sub_top", ["with_top"]], ["add", "theorem", "top_sub_coe", ["with_top"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "add_le_cancellable_iff_ne", ["ennreal"]], ["del", "theorem", "add_sub_cancel_of_le", ["ennreal"]], ["mod", "theorem", "add_sub_self'", ["ennreal"]], ["mod", "theorem", "add_sub_self", ["ennreal"]], ["add", "theorem", "cancel_coe", ["ennreal"]], ["add", "theorem", "cancel_of_lt'", ["ennreal"]], ["add", "theorem", "cancel_of_lt", ["ennreal"]], ["add", "theorem", "cancel_of_ne", ["ennreal"]], ["mod", "theorem", "coe_sub", ["ennreal"]], ["del", "theorem", "sub_add_cancel_of_le", ["ennreal"]], ["add", "theorem", "sub_eq_Inf", ["ennreal"]], ["mod", "theorem", "sub_eq_of_add_eq", ["ennreal"]], ["add", "theorem", "sub_eq_top_iff", ["ennreal"]], ["add", "theorem", "sub_ne_top", ["ennreal"]], ["mod", "theorem", "sub_self", ["ennreal"]], ["mod", "theorem", "sub_top", ["ennreal"]], ["mod", "theorem", "sub_zero", ["ennreal"]], ["mod", "theorem", "top_sub_coe", ["ennreal"]], ["mod", "theorem", "zero_sub", ["ennreal"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1633612163, "sha": "bf76a1f2", "message": "feat(algebra/order/with_zero): add lt_of_mul_lt_mul_of_le₀ and mul_lt_mul_of_lt_of_le₀ (#9596)", "changes": [{"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["add", "theorem", "lt_of_mul_lt_mul_of_le₀", []], ["add", "theorem", "mul_lt_mul_of_lt_of_le₀", []]]}]}, {"timestamp": 1633607828, "sha": "18a42f3f", "message": "feat(src/category_theory/*): Yoneda preserves limits. (#9580)\nShows that `yoneda` and `coyoneda` preserves and reflects limits.", "changes": [{"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["add", "def", "preserves_colimit_of_evaluation", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_evaluation", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape_of_evaluation", ["category_theory", "limits"]], ["add", "def", "preserves_limit_of_evaluation", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_evaluation", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_of_evaluation", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/yoneda.lean", "newPath": "src/category_theory/limits/yoneda.lean", "changes": []}]}, {"timestamp": 1633589711, "sha": "f8747832", "message": "feat(data/multiset/erase_dup): Alias for `multiset.erase_dup_eq_self` (#9587)\nThe new `multiset.nodup.erase_dup` allows dot notation.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/multiset/erase_dup.lean", "newPath": "src/data/multiset/erase_dup.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}]}, {"timestamp": 1633589710, "sha": "cc46f314", "message": "feat(analysis/normed_space/add_torsor_bases): the interior of the convex hull of a finite affine basis is the set of points with strictly positive barycentric coordinates (#9583)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/convex/hull.lean", "newPath": "src/analysis/convex/hull.lean", "changes": [["add", "theorem", "convex_hull_univ", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["add", "theorem", "interior_convex_hull_aff_basis", []]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "eq_univ_of_subsingleton_span_eq_top", ["affine_subspace"]]]}]}, {"timestamp": 1633587273, "sha": "a7784aad", "message": "feat(category_theory/*): Yoneda extension is Kan (#9574)\n- Proved that `(F.elements)ᵒᵖ ≌ costructured_arrow yoneda F`.\n- Verified that the yoneda extension is indeed the left Kan extension along the yoneda embedding.", "changes": [{"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": [["add", "def", "costructured_arrow_yoneda_equivalence", ["category_theory", "category_of_elements"]], ["add", "theorem", "costructured_arrow_yoneda_equivalence_naturality", ["category_theory", "category_of_elements"]], ["add", "def", "from_costructured_arrow", ["category_theory", "category_of_elements"]], ["add", "theorem", "from_costructured_arrow_obj_mk", ["category_theory", "category_of_elements"]], ["add", "theorem", "from_to_costructured_arrow_eq", ["category_theory", "category_of_elements"]], ["add", "def", "to_costructured_arrow", ["category_theory", "category_of_elements"]], ["add", "theorem", "to_from_costructured_arrow_eq", ["category_theory", "category_of_elements"]]]}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": [["add", "def", "extend_along_yoneda_iso_Kan", ["category_theory", "colimit_adj"]], ["add", "def", "extend_along_yoneda_iso_Kan_app", ["category_theory", "colimit_adj"]], ["add", "theorem", "extend_along_yoneda_map", ["category_theory", "colimit_adj"]]]}]}, {"timestamp": 1633587272, "sha": "b9097f11", "message": "feat(analysis/asymptotics): Define superpolynomial decay of a function (#9440)\nDefine superpolynomial decay of functions in terms of asymptotics.is_O.", "changes": [{"oldPath": null, "newPath": "src/analysis/asymptotics/superpolynomial_decay.lean", "changes": [["add", "theorem", "trans_superpolynomial_decay", ["asymptotics", "is_O"]], ["add", "theorem", "add", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "algebra_map_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "algebra_map_pow_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "const_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "eventually_le", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "eventually_mono", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mono", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul_const", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul_is_O", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "mul_is_O_polynomial", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "polynomial_mul", ["asymptotics", "superpolynomial_decay"]], ["add", "theorem", "tendsto_zero", ["asymptotics", "superpolynomial_decay"]], ["add", "def", "superpolynomial_decay", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_const_iff", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_const_mul_iff", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_const_mul_iff_of_ne_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_is_bounded_under", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_is_o", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_norm_tendsto_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_iff_tendsto_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_mul_const_iff", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_mul_const_iff_of_ne_zero", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_of_eventually_is_O", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_of_is_O_fpow_le", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_of_is_O_fpow_lt", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_zero'", ["asymptotics"]], ["add", "theorem", "superpolynomial_decay_zero", ["asymptotics"]]]}]}, {"timestamp": 1633580117, "sha": "0bc7c2d5", "message": "fix(algebra/group/{prod,pi}): fix non-defeq `has_scalar` diamonds (#9584)\nThis fixes diamonds in the following instances for nat- and int- actions:\n* `has_scalar ℕ (α × β)`\n* `has_scalar ℤ (α × β)`\n* `has_scalar ℤ (Π a, β a)`\nThe last one revealed a diamond caused by inconsistent use of `pi_instance_derive_field`:\n```lean\n-- fails before this change\nexample [Π a, group $ β a] : group.to_div_inv_monoid (Π a, β a) = pi.div_inv_monoid := rfl\n```", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1633580116, "sha": "cb3c8448", "message": "feat(category_theory/limits/*): Filtered colimits preserves finite limits (#9522)\nRestated `category_theory.limits.colimit_limit_to_limit_colimit_is_iso` in terms of limit preserving.", "changes": [{"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": [["mod", "theorem", "ι_colimit_limit_to_limit_colimit_π", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["add", "def", "colimit_iso_swap_comp_colim", ["category_theory", "limits"]], ["add", "def", "limit_iso_swap_comp_lim", ["category_theory", "limits"]]]}]}, {"timestamp": 1633572870, "sha": "7a2696d0", "message": "feat(category_theory/limits/preserves/*): Show that whiskering left preserves limits. (#9581)", "changes": [{"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": []}]}, {"timestamp": 1633572869, "sha": "f37aeb00", "message": "refactor(algebra/gcd_monoid): drop nontriviality assumptions (#9568)", "changes": [{"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1633554899, "sha": "f63786b9", "message": "refactor(data/finsupp/basic): has_ordered_sub on finsupp (#9577)\n* Generalize `has_sub` and `canonically_ordered_add_monoid` instances for any finsupp with codomain a `canonically_ordered_add_monoid` & `has_ordered_sub`.\n* Provide `has_ordered_sub` instance in the same situation\n* Generalize lemmas about `nat` to this situation.\n* Prove some lemmas as special cases of `has_ordered_sub` lemmas. These will be removed in a subsequent PR.\n* Simplify some lemmas about `α →₀ ℕ` using `has_ordered_sub` lemmas.\n* Prove `nat.one_le_iff_ne_zero` (it's the second time I want to use it this week)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_nat_sub", ["finsupp"]], ["mod", "theorem", "nat_add_sub_assoc", ["finsupp"]], ["mod", "theorem", "nat_add_sub_cancel", ["finsupp"]], ["mod", "theorem", "nat_add_sub_cancel_left", ["finsupp"]], ["mod", "theorem", "nat_add_sub_of_le", ["finsupp"]], ["mod", "theorem", "nat_sub_add_cancel", ["finsupp"]], ["mod", "theorem", "nat_sub_apply", ["finsupp"]], ["mod", "theorem", "nat_sub_self", ["finsupp"]], ["mod", "theorem", "nat_zero_sub", ["finsupp"]], ["mod", "theorem", "single_nat_sub", ["finsupp"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "one_le_iff_ne_zero", ["nat"]]]}]}, {"timestamp": 1633554898, "sha": "b4a97675", "message": "feat(data/multiset/basic): has_ordered_sub multiset (#9566)\n* Provide `instance : has_ordered_sub (multiset α)`\n* Prove most multiset subtraction lemmas as special cases of `has_ordered_sub` lemmas\n* In a subsequent PR I will remove the specialized multiset lemmas", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "sub_le_iff_le_add", ["multiset"]], ["del", "theorem", "sub_zero", ["multiset"]]]}]}, {"timestamp": 1633554896, "sha": "845d064a", "message": "feat(algebra/big_operators/finprod): add finprod.mem_dvd (#9549)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "dvd_prod_of_mem", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_mem_dvd", []]]}]}, {"timestamp": 1633548188, "sha": "b2ae1956", "message": "move(data/fin/*): group `fin` files under a `fin` folder (#9524)", "changes": [{"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/control/functor/multivariate.lean", "newPath": "src/control/functor/multivariate.lean", "changes": []}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin/basic.lean", "changes": []}, {"oldPath": "src/data/fin2.lean", "newPath": "src/data/fin/fin2.lean", "changes": []}, {"oldPath": "src/data/fintype/fin.lean", "newPath": "src/data/fintype/fin.lean", "changes": []}, {"oldPath": "src/data/list/duplicate.lean", "newPath": "src/data/list/duplicate.lean", "changes": []}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": []}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": []}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": []}, {"oldPath": "src/data/vector3.lean", "newPath": "src/data/vector3.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/jordan_holder.lean", "newPath": "src/order/jordan_holder.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": []}]}, {"timestamp": 1633544873, "sha": "5c3cdd21", "message": "feat(analysis/normed_space/add_torsor_bases): barycentric coordinates are open maps (in finite dimensions over a complete field) (#9543)\nUsing the open mapping theorem with a one-dimensional codomain feels a bit ridiculous but I see no reason not to do so.\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["add", "theorem", "is_open_map_barycentric_coord", []]]}, {"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["add", "theorem", "surjective_barycentric_coord", []]]}]}, {"timestamp": 1633542530, "sha": "a7b4e782", "message": "fix(computability/DFA): tighten regular pumping lemma to match standard textbooks (#9585)\nThis PR slightly tightens the regular pumping lemma: the current version applies only to words that are of length at least the number of states in the DFA plus one. Here we remove the plus one.", "changes": [{"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": [["mod", "theorem", "eval_from_split", ["DFA"]]]}, {"oldPath": "src/computability/NFA.lean", "newPath": "src/computability/NFA.lean", "changes": []}, {"oldPath": "src/computability/epsilon_NFA.lean", "newPath": "src/computability/epsilon_NFA.lean", "changes": []}]}, {"timestamp": 1633535166, "sha": "bcd13a77", "message": "refactor(data/equiv): split out `./set` from `./basic` (#9560)\nThis move all the equivalences between sets-coerced-to-types to a new file, which makes `equiv/basic` a slightly more manageable size.\nThe only non-move change in this PR is the rewriting of `equiv.of_bijective` to not go via `equiv.of_injective`, as we already have all the fields available directly and this allows the latter to move to a separate file.\nThis will allow us to import `order_dual.lean` earlier, as we no longer have to define boolean algebras before equivalences are available.\nThis relates to #4758.", "changes": [{"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "theorem", "dite_comp_equiv_update", []], ["del", "theorem", "apply_of_injective_symm", ["equiv"]], ["del", "theorem", "eq_image_iff_symm_image_eq", ["equiv"]], ["del", "theorem", "eq_preimage_iff_image_eq", ["equiv"]], ["del", "def", "image", ["equiv"]], ["del", "theorem", "image_eq_iff_eq", ["equiv"]], ["del", "theorem", "image_preimage", ["equiv"]], ["del", "theorem", "image_subset", ["equiv"]], ["del", "theorem", "image_symm_image", ["equiv"]], ["del", "theorem", "of_injective_symm_apply", ["equiv"]], ["del", "def", "of_left_inverse'", ["equiv"]], ["del", "theorem", "of_left_inverse'_eq_of_injective", ["equiv"]], ["del", "def", "of_left_inverse", ["equiv"]], ["del", "theorem", "of_left_inverse_eq_of_injective", ["equiv"]], ["del", "theorem", "preimage_eq_iff_eq_image", ["equiv"]], ["del", "theorem", "preimage_image", ["equiv"]], ["del", "theorem", "preimage_subset", ["equiv"]], ["del", "theorem", "preimage_symm_preimage", ["equiv"]], ["del", "theorem", "prod_assoc_preimage", ["equiv"]], ["del", "theorem", "range_eq_univ", ["equiv"]], ["del", "theorem", "self_comp_of_injective_symm", ["equiv"]], ["del", "theorem", "image_symm_preimage", ["equiv", "set"]], ["del", "theorem", "insert_apply_left", ["equiv", "set"]], ["del", "theorem", "insert_apply_right", ["equiv", "set"]], ["del", "theorem", "insert_symm_apply_inl", ["equiv", "set"]], ["del", "theorem", "insert_symm_apply_inr", ["equiv", "set"]], ["del", "theorem", "sum_compl_apply_inl", ["equiv", "set"]], ["del", "theorem", "sum_compl_apply_inr", ["equiv", "set"]], ["del", "theorem", "sum_compl_symm_apply", ["equiv", "set"]], ["del", "theorem", "sum_compl_symm_apply_compl", ["equiv", "set"]], ["del", "theorem", "sum_compl_symm_apply_of_mem", ["equiv", "set"]], ["del", "theorem", "sum_compl_symm_apply_of_not_mem", ["equiv", "set"]], ["del", "theorem", "sum_diff_subset_apply_inl", ["equiv", "set"]], ["del", "theorem", "sum_diff_subset_apply_inr", ["equiv", "set"]], ["del", "theorem", "sum_diff_subset_symm_apply_of_mem", ["equiv", "set"]], ["del", "theorem", "sum_diff_subset_symm_apply_of_not_mem", ["equiv", "set"]], ["del", "theorem", "union_apply_left", ["equiv", "set"]], ["del", "theorem", "union_apply_right", ["equiv", "set"]], ["del", "theorem", "union_symm_apply_left", ["equiv", "set"]], ["del", "theorem", "union_symm_apply_right", ["equiv", "set"]], ["del", "def", "set_congr", ["equiv"]], ["del", "def", "set_prod_equiv_sigma", ["equiv"]], ["del", "theorem", "symm_image_image", ["equiv"]], ["del", "theorem", "symm_preimage_preimage", ["equiv"]], ["del", "theorem", "image_equiv_eq_preimage_symm", ["set"]], ["del", "theorem", "mem_image_equiv", ["set"]], ["del", "theorem", "preimage_equiv_eq_image_symm", ["set"]]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/equiv/set.lean", "changes": [["add", "theorem", "dite_comp_equiv_update", []], ["add", "theorem", "apply_of_injective_symm", ["equiv"]], ["add", "theorem", "eq_image_iff_symm_image_eq", ["equiv"]], ["add", "theorem", "eq_preimage_iff_image_eq", ["equiv"]], ["add", "def", "image", ["equiv"]], ["add", "theorem", "image_eq_iff_eq", ["equiv"]], ["add", "theorem", "image_preimage", ["equiv"]], ["add", "theorem", "image_subset", ["equiv"]], ["add", "theorem", "image_symm_image", ["equiv"]], ["add", "theorem", "of_injective_symm_apply", ["equiv"]], ["add", "def", "of_left_inverse'", ["equiv"]], ["add", "theorem", "of_left_inverse'_eq_of_injective", ["equiv"]], ["add", "def", "of_left_inverse", ["equiv"]], ["add", "theorem", "of_left_inverse_eq_of_injective", ["equiv"]], ["add", "theorem", "preimage_eq_iff_eq_image", ["equiv"]], ["add", "theorem", "preimage_image", ["equiv"]], ["add", "theorem", "preimage_subset", ["equiv"]], ["add", "theorem", "preimage_symm_preimage", ["equiv"]], ["add", "theorem", "prod_assoc_preimage", ["equiv"]], ["add", "theorem", "range_eq_univ", ["equiv"]], ["add", "theorem", "self_comp_of_injective_symm", ["equiv"]], ["add", "theorem", "image_symm_preimage", ["equiv", "set"]], ["add", "theorem", "insert_apply_left", ["equiv", "set"]], ["add", "theorem", "insert_apply_right", ["equiv", "set"]], ["add", "theorem", "insert_symm_apply_inl", ["equiv", "set"]], ["add", "theorem", "insert_symm_apply_inr", ["equiv", "set"]], ["add", "theorem", "sum_compl_apply_inl", ["equiv", "set"]], ["add", "theorem", "sum_compl_apply_inr", ["equiv", "set"]], ["add", "theorem", "sum_compl_symm_apply", ["equiv", "set"]], ["add", "theorem", "sum_compl_symm_apply_compl", ["equiv", "set"]], ["add", "theorem", "sum_compl_symm_apply_of_mem", ["equiv", "set"]], ["add", "theorem", "sum_compl_symm_apply_of_not_mem", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_apply_inl", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_apply_inr", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_symm_apply_of_mem", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_symm_apply_of_not_mem", ["equiv", "set"]], ["add", "theorem", "union_apply_left", ["equiv", "set"]], ["add", "theorem", "union_apply_right", ["equiv", "set"]], ["add", "theorem", "union_symm_apply_left", ["equiv", "set"]], ["add", "theorem", "union_symm_apply_right", ["equiv", "set"]], ["add", "def", "set_congr", ["equiv"]], ["add", "def", "set_prod_equiv_sigma", ["equiv"]], ["add", "theorem", "symm_image_image", ["equiv"]], ["add", "theorem", "symm_preimage_preimage", ["equiv"]], ["add", "theorem", "image_equiv_eq_preimage_symm", ["set"]], ["add", "theorem", "mem_image_equiv", ["set"]], ["add", "theorem", "preimage_equiv_eq_image_symm", ["set"]]]}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1633535164, "sha": "0b356b00", "message": "feat(analysis/normed_space/banach): open mapping theorem for maps between affine spaces (#9540)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "open_mapping_affine", []]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "surjective_iff_linear_surjective", ["affine_map"]]]}]}, {"timestamp": 1633535163, "sha": "5773bc63", "message": "feat(group_theory/group_action/conj_act): conjugation action of groups (#8627)", "changes": [{"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/group_action/conj_act.lean", "changes": [["add", "theorem", "card", ["conj_act"]], ["add", "theorem", "fixed_points_eq_center", ["conj_act"]], ["add", "def", "of_conj_act", ["conj_act"]], ["add", "theorem", "of_conj_act_inv", ["conj_act"]], ["add", "theorem", "of_conj_act_mul", ["conj_act"]], ["add", "theorem", "of_conj_act_one", ["conj_act"]], ["add", "theorem", "of_conj_act_to_conj_act", ["conj_act"]], ["add", "theorem", "of_conj_act_zero", ["conj_act"]], ["add", "theorem", "of_mul_symm_eq", ["conj_act"]], ["add", "theorem", "smul_def", ["conj_act"]], ["add", "theorem", "smul_eq_mul_aut_conj", ["conj_act"]], ["add", "def", "to_conj_act", ["conj_act"]], ["add", "theorem", "to_conj_act_inv", ["conj_act"]], ["add", "theorem", "to_conj_act_mul", ["conj_act"]], ["add", "theorem", "to_conj_act_of_conj_act", ["conj_act"]], ["add", "theorem", "to_conj_act_one", ["conj_act"]], ["add", "theorem", "to_conj_act_zero", ["conj_act"]], ["add", "theorem", "to_mul_symm_eq", ["conj_act"]], ["add", "theorem", "«forall»", ["conj_act"]], ["add", "def", "conj_act", []]]}]}, {"timestamp": 1633532008, "sha": "6abd6f2d", "message": "chore(ring_theory/witt_vector): fix a docstring (#9575)", "changes": [{"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1633527843, "sha": "850d5d28", "message": "feat(analysis/convex/function): Dual lemmas (#9571)", "changes": [{"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["add", "theorem", "convex_gt", ["concave_on"]], ["del", "theorem", "convex_lt", ["concave_on"]], ["add", "theorem", "dual", ["concave_on"]], ["add", "theorem", "ge_on_segment'", ["concave_on"]], ["add", "theorem", "ge_on_segment", ["concave_on"]], ["del", "theorem", "le_on_segment'", ["concave_on"]], ["del", "theorem", "le_on_segment", ["concave_on"]], ["mod", "theorem", "smul", ["concave_on"]], ["add", "theorem", "dual", ["convex_on"]], ["mod", "theorem", "smul", ["convex_on"]], ["add", "theorem", "dual", ["strict_concave_on"]], ["add", "theorem", "dual", ["strict_convex_on"]]]}]}, {"timestamp": 1633515122, "sha": "8c657818", "message": "refactor(data/nat/basic): remove sub lemmas (#9544)\n* Remove the nat sub lemmas that are special cases of lemmas in `algebra/order/sub`\n* This PR does 90% of the work, some lemmas require a bit more work (which will be done in a future PR)\n* Protect `ordinal.add_sub_cancel_of_le`\n* Most fixes in other files were abuses of the definitional equality of `n < m` and `nat.succ n \\le m`.\n* [This](https://github.com/leanprover-community/mathlib/blob/7a5d15a955a92a90e1d398b2281916b9c41270b2/src/data/nat/basic.lean#L498-L611) gives the list of renamings.\n* The regex to find 90+% of the occurrences of removed lemmas. Some lemmas were not protected, so might not be found this way.\n```\nnat.(le_sub_add|add_sub_cancel'|sub_add_sub_cancel|sub_cancel|sub_sub_sub_cancel_right|sub_add_eq_add_sub|sub_sub_assoc|lt_of_sub_pos|lt_of_sub_lt_sub_right|lt_of_sub_lt_sub_left|sub_lt_self|le_sub_right_of_add_le|le_sub_left_of_add_le|lt_sub_right_of_add_lt|lt_sub_left_of_add_lt|add_lt_of_lt_sub_right|add_lt_of_lt_sub_left|le_add_of_sub_le_right|le_add_of_sub_le_left|lt_add_of_sub_lt_right|lt_add_of_sub_lt_left|sub_le_left_of_le_add|sub_le_right_of_le_add|sub_lt_left_iff_lt_add|le_sub_left_iff_add_le|le_sub_right_iff_add_le|lt_sub_left_iff_add_lt|lt_sub_right_iff_add_lt|sub_lt_right_iff_lt_add|sub_le_sub_left_iff|sub_lt_sub_right_iff|sub_lt_sub_left_iff|sub_le_iff|sub_lt_iff)[^_]\n```", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": []}, {"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": []}, {"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/exponential.lean", "newPath": "src/combinatorics/derangements/exponential.lean", "changes": []}, {"oldPath": "src/combinatorics/derangements/finite.lean", "newPath": "src/combinatorics/derangements/finite.lean", "changes": []}, {"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/intervals.lean", "newPath": "src/data/finset/intervals.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "sub_cancel", ["nat"]], ["del", "theorem", "sub_sub_assoc", ["nat"]], ["del", "theorem", "sub_sub_sub_cancel_right", ["nat"]]]}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/interval.lean", "newPath": "src/data/nat/interval.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/nat/upto.lean", "newPath": "src/data/nat/upto.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/set_theory/game/state.lean", "newPath": "src/set_theory/game/state.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "add_sub_cancel_of_le", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "test/general_recursion.lean", "newPath": "test/general_recursion.lean", "changes": []}]}, {"timestamp": 1633515120, "sha": "facc1d2d", "message": "feat(topology/algebra): topology on a linear_ordered_comm_group_with_zero (#9537)\nThis is a modernized version of code from the perfectoid spaces project.", "changes": [{"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["add", "theorem", "inv_mul_lt_of_lt_mul₀", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/with_zero_topology.lean", "changes": [["add", "theorem", "directed_lt", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "has_basis_nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "has_basis_nhds_units", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "has_basis_nhds_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "nhds_coe_units", ["linear_ordered_comm_group_with_zero"]], ["add", "def", "nhds_fun", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "nhds_fun_ok", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "nhds_zero_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "nhds_zero_of_units", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "pure_le_nhds_fun", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "singleton_nhds_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "singleton_nhds_of_units", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "tendsto_of_ne_zero", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "tendsto_units", ["linear_ordered_comm_group_with_zero"]], ["add", "theorem", "tendsto_zero", ["linear_ordered_comm_group_with_zero"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "compl_mem_nhds", ["is_closed"]]]}]}, {"timestamp": 1633507437, "sha": "b534feda", "message": "refactor(analysis/{normed_space, inner_product_space}/dual): redefine using `linear_isometry` (#9569)\nLinear isometric embeddings appear naturally when studying the duals of normed spaces: the map `λ y, ⟪x, y⟫` from an inner product space to its dual is a linear isometric embedding++, and so is the canonical map from a normed space to its double dual**.\nWhen these natural maps were defined last year, we didn't have the definition `linear_isometry` (notation: `X →ₗᵢ[R] Y`), so they were defined as continuous linear maps which satisfied the predicate `isometry`, and several lemmas were proven ad-hoc which are now available as general lemmas about `linear_isometry`.\nThis PR refactors to use the `linear_isometry` structure. Lemmas deleted (I have been enthusiastic here, and can scale back if desired ...):\nnormed_space.inclusion_in_double_dual_isometry\ninner_product_space.to_dual_map_isometry\ninner_product_space.to_dual_map_injective\ninner_product_space.ker_to_dual_map\ninner_product_space.to_dual_map_eq_iff_eq \ninner_product_space.range_to_dual_map\ninner_product_space.isometric.to_dual\ninner_product_space.to_dual_eq_iff_eq\ninner_product_space.to_dual_eq_iff_eq'\ninner_product_space.norm_to_dual_apply\ninner_product_space.norm_to_dual_symm_apply\n++ (over `ℝ` -- over `ℂ` it's conjugate-linear, which will be dealt with in future PRs)\n** over `ℝ` or `ℂ`", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/inner_product_space/dual.lean", "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["del", "def", "to_dual", ["inner_product_space", "isometric"]], ["del", "theorem", "ker_to_dual_map", ["inner_product_space"]], ["del", "theorem", "norm_to_dual_apply", ["inner_product_space"]], ["del", "theorem", "norm_to_dual_map_apply", ["inner_product_space"]], ["del", "theorem", "norm_to_dual_symm_apply", ["inner_product_space"]], ["del", "theorem", "range_to_dual_map", ["inner_product_space"]], ["mod", "def", "to_dual", ["inner_product_space"]], ["mod", "theorem", "to_dual_apply", ["inner_product_space"]], ["del", "theorem", "to_dual_eq_iff_eq'", ["inner_product_space"]], ["del", "theorem", "to_dual_eq_iff_eq", ["inner_product_space"]], ["mod", "def", "to_dual_map", ["inner_product_space"]], ["mod", "theorem", "to_dual_map_apply", ["inner_product_space"]], ["del", "theorem", "to_dual_map_eq_iff_eq", ["inner_product_space"]], ["del", "theorem", "to_dual_map_injective", ["inner_product_space"]], ["del", "theorem", "to_dual_map_isometry", ["inner_product_space"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["del", "theorem", "inclusion_in_double_dual_isometry", ["normed_space"]], ["add", "def", "inclusion_in_double_dual_li", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}]}, {"timestamp": 1633507436, "sha": "e52e5338", "message": "feat(order/bounds): Antitone lemmas (#9556)", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "image_lower_bounds_subset_upper_bounds_image", ["antitone"]], ["add", "theorem", "image_upper_bounds_subset_lower_bounds_image", ["antitone"]], ["add", "theorem", "is_lub_image_le", ["antitone"]], ["add", "theorem", "le_is_glb_image", ["antitone"]], ["add", "theorem", "map_bdd_above", ["antitone"]], ["add", "theorem", "map_bdd_below", ["antitone"]], ["add", "theorem", "map_is_greatest", ["antitone"]], ["add", "theorem", "map_is_least", ["antitone"]], ["add", "theorem", "mem_lower_bounds_image", ["antitone"]], ["add", "theorem", "mem_upper_bounds_image", ["antitone"]]]}]}, {"timestamp": 1633500304, "sha": "f811910b", "message": "feat(linear_algebra/affine_space/barycentric_coords): barycentric coordinates are 1 in zero dimensions (#9564)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subsingleton_of_univ_subsingleton", ["set"]], ["add", "theorem", "subsingleton_univ_iff", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "subsingleton_of_subsingleton_span_eq_top", ["affine_subspace"]]]}, {"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["add", "theorem", "coe_barycentric_coord_of_subsingleton_eq_one", []]]}]}, {"timestamp": 1633484164, "sha": "db5ee760", "message": "chore(linear_algebra/quadratic_form): squeeze simps (#9572)\n#9567 speeds up the slowest declaration in the file, but many other declarations are also slow.\nThis PR squeezes all simps.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}]}, {"timestamp": 1633471064, "sha": "fdf8a71f", "message": "feat(topology/bases): a family of nonempty disjoint open sets is countable in a separable space (#9557)\nTogether with unrelated small lemmas on balls and on `pairwise_on`.", "changes": [{"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "exists_le_of_sum_le", ["ennreal"]], ["add", "theorem", "sum_lt_sum_of_nonempty", ["ennreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "pairwise_on_disjoint_on_mono", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "pairwise_on_Union", ["set"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "countable_of_is_open_of_disjoint", ["topological_space"]], ["add", "theorem", "countable_of_nonempty_interior_of_disjoint", ["topological_space"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "disjoint_closed_ball_of_lt_inf_edist", ["emetric"]], ["add", "theorem", "Hausdorff_dist_zero_iff_eq", ["is_closed"]], ["add", "theorem", "mem_iff_inf_dist_zero", ["is_closed"]], ["add", "theorem", "not_mem_iff_inf_dist_pos", ["is_closed"]], ["del", "theorem", "Hausdorff_dist_zero_iff_eq_of_closed", ["metric"]], ["add", "theorem", "disjoint_closed_ball_of_lt_inf_dist", ["metric"]], ["del", "theorem", "mem_iff_inf_dist_zero_of_closed", ["metric"]]]}]}, {"timestamp": 1633471063, "sha": "815eaca0", "message": "feat(analysis/normed_space/affine_isometry): affine maps are open iff their underlying linear maps are (#9538)\nFormalized as part of the Sphere Eversion project.", "changes": [{"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["add", "theorem", "is_open_map_linear_iff", ["affine_map"]]]}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "comp_is_open_map_iff'", ["homeomorph"]], ["add", "theorem", "comp_is_open_map_iff", ["homeomorph"]]]}]}, {"timestamp": 1633463602, "sha": "63903f27", "message": "doc(linear_algebra/free_module/strong_rank_condition): correct a typo (#9565)", "changes": [{"oldPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "newPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "changes": []}]}, {"timestamp": 1633463601, "sha": "0b575206", "message": "feat(order/bounds): Image under an `order_iso` and `upper_bounds` commute (#9555)", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "image_lower_bounds_subset_lower_bounds_image", ["monotone"]], ["add", "theorem", "image_upper_bounds_subset_upper_bounds_image", ["monotone"]], ["mod", "theorem", "is_glb_image'", ["order_iso"]], ["mod", "theorem", "is_glb_image", ["order_iso"]], ["mod", "theorem", "is_glb_preimage'", ["order_iso"]], ["mod", "theorem", "is_glb_preimage", ["order_iso"]], ["mod", "theorem", "is_lub_image'", ["order_iso"]], ["mod", "theorem", "is_lub_image", ["order_iso"]], ["mod", "theorem", "is_lub_preimage'", ["order_iso"]], ["mod", "theorem", "is_lub_preimage", ["order_iso"]], ["add", "theorem", "lower_bounds_image", ["order_iso"]], ["add", "theorem", "upper_bounds_image", ["order_iso"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["del", "theorem", "lower_bounds_image", ["order_iso"]], ["del", "theorem", "upper_bounds_image", ["order_iso"]]]}]}, {"timestamp": 1633463600, "sha": "111d73bf", "message": "feat(data/int/interval): Finite intervals in ℤ (#9526)\nThis proves that `ℤ` is a locally finite order.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "def", "cast_embedding", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/int/interval.lean", "changes": [["add", "theorem", "Icc_eq_finset_map", ["int"]], ["add", "theorem", "Ioc_eq_finset_map", ["int"]], ["add", "theorem", "Ioo_eq_finset_map", ["int"]], ["add", "theorem", "card_Icc", ["int"]], ["add", "theorem", "card_Icc_of_le", ["int"]], ["add", "theorem", "card_Ioc", ["int"]], ["add", "theorem", "card_Ioc_of_le", ["int"]], ["add", "theorem", "card_Ioo", ["int"]], ["add", "theorem", "card_Ioo_of_lt", ["int"]], ["add", "theorem", "card_fintype_Icc", ["int"]], ["add", "theorem", "card_fintype_Icc_of_le", ["int"]], ["add", "theorem", "card_fintype_Ioc", ["int"]], ["add", "theorem", "card_fintype_Ioc_of_le", ["int"]], ["add", "theorem", "card_fintype_Ioo", ["int"]], ["add", "theorem", "card_fintype_Ioo_of_lt", ["int"]]]}]}, {"timestamp": 1633455876, "sha": "7455f47c", "message": "chore(linear_algebra/quadratic_form): speed up quadratic_form.lin_mul_lin (#9567)\nIn my single profiler run, this reduced elaboration time from 20s to 1.5s.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}]}, {"timestamp": 1633434082, "sha": "5926f103", "message": "fix(data/equiv/basic): use `subtype p` not `coe_sort (set_of p)` (#9559)\n`↥{x | p x}` is just a clumsy way to write `{x // p x}`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}]}, {"timestamp": 1633428630, "sha": "da4d5501", "message": "chore(measure_theory/*): better names and notations, add easy lemmas (#9554)\n* Localize notation for absolutely continuous in the `measure_theory` namespace, and add separate notations for the case of measures and of vector measures.\n* Standardize some names, using `measure` instead of `meas`.\n* Add two lemmas on measures with density.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "meas_closure_of_null_bdry", []], ["del", "theorem", "meas_interior_of_null_bdry", []], ["add", "theorem", "measure_closure_of_null_bdry", []], ["add", "theorem", "measure_interior_of_null_bdry", []]]}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "exists_absolutely_continuous_is_finite_measure", ["measure_theory"]], ["add", "theorem", "with_density_mul", ["measure_theory"]], ["add", "theorem", "with_density_one", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "meas_eq_meas_larger_of_between_null_diff", ["measure_theory"]], ["del", "theorem", "meas_eq_meas_of_between_null_diff", ["measure_theory"]], ["del", "theorem", "meas_eq_meas_of_null_diff", ["measure_theory"]], ["del", "theorem", "meas_eq_meas_smaller_of_between_null_diff", ["measure_theory"]], ["add", "theorem", "measure_diff_le_iff_le_add", ["measure_theory"]], ["add", "theorem", "measure_eq_measure_larger_of_between_null_diff", ["measure_theory"]], ["add", "theorem", "measure_eq_measure_of_between_null_diff", ["measure_theory"]], ["add", "theorem", "measure_eq_measure_of_null_diff", ["measure_theory"]], ["add", "theorem", "measure_eq_measure_smaller_of_between_null_diff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "measure_Union_fintype_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["mod", "theorem", "eq", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["mod", "theorem", "map", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["mod", "theorem", "mk", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["mod", "theorem", "refl", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["mod", "theorem", "trans", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["mod", "theorem", "zero", ["measure_theory", "vector_measure", "absolutely_continuous"]]]}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": []}]}, {"timestamp": 1633428629, "sha": "e7ea02fd", "message": "feat(analysis/convex/basic): Levels of a monotone/antitone function (#9547)\nThe set of points whose image under a monotone function is less than a fixed value is convex, when the space is linear.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_ge", ["antitone"]], ["add", "theorem", "convex_gt", ["antitone"]], ["add", "theorem", "convex_le", ["antitone"]], ["add", "theorem", "convex_lt", ["antitone"]], ["add", "theorem", "convex_ge", ["antitone_on"]], ["add", "theorem", "convex_gt", ["antitone_on"]], ["add", "theorem", "convex_le", ["antitone_on"]], ["add", "theorem", "convex_lt", ["antitone_on"]], ["add", "theorem", "combo_le_max", ["convex"]], ["add", "theorem", "min_le_combo", ["convex"]], ["add", "theorem", "convex_ge", ["monotone"]], ["add", "theorem", "convex_gt", ["monotone"]], ["add", "theorem", "convex_le", ["monotone"]], ["add", "theorem", "convex_lt", ["monotone"]], ["add", "theorem", "convex_ge", ["monotone_on"]], ["add", "theorem", "convex_gt", ["monotone_on"]], ["add", "theorem", "convex_le", ["monotone_on"]], ["add", "theorem", "convex_lt", ["monotone_on"]], ["add", "theorem", "segment_subset_interval", []]]}]}, {"timestamp": 1633428628, "sha": "5b793197", "message": "feat(ring_theory/polynomial/basic): add a lemma `polynomial_quotient_equiv_quotient_polynomial_map_mk` (#9542)", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "polynomial_quotient_equiv_quotient_polynomial_map_mk", ["ideal"]], ["add", "theorem", "polynomial_quotient_equiv_quotient_polynomial_symm_mk", ["ideal"]]]}]}, {"timestamp": 1633428627, "sha": "26660331", "message": "refactor(algebra/gcd_monoid): don't require normalization (#9443)\nThis will allow us to set up a gcd_monoid instance for all euclidean_domains and generalize the results in ring_theory/euclidean_domain.lean to PIDs.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "associated_mul_unit_left", []], ["add", "theorem", "associated_mul_unit_right", []], ["add", "theorem", "associated_unit_mul_left", []], ["add", "theorem", "associated_unit_mul_right", []], ["add", "theorem", "units_eq_one", []]]}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["mod", "theorem", "gcd_eq_left", ["associated"]], ["mod", "theorem", "gcd_eq_right", ["associated"]], ["mod", "theorem", "dvd_gcd_iff", []], ["mod", "theorem", "dvd_gcd_mul_of_dvd_mul", []], ["mod", "theorem", "dvd_lcm_left", []], ["mod", "theorem", "dvd_lcm_right", []], ["mod", "theorem", "dvd_mul_gcd_of_dvd_mul", []], ["mod", "theorem", "exists_associated_pow_of_mul_eq_pow", []], ["mod", "theorem", "exists_dvd_and_dvd_of_dvd_mul", []], ["add", "theorem", "gcd_assoc'", []], ["mod", "theorem", "gcd_assoc", []], ["add", "theorem", "gcd_comm'", []], ["mod", "theorem", "gcd_comm", []], ["mod", "theorem", "gcd_dvd_gcd", []], ["mod", "theorem", "gcd_dvd_gcd_mul_left", []], ["mod", "theorem", "gcd_dvd_gcd_mul_left_right", []], ["mod", "theorem", "gcd_dvd_gcd_mul_right", []], ["mod", "theorem", "gcd_dvd_gcd_mul_right_right", []], ["mod", "theorem", "gcd_eq_left_iff", []], ["mod", "theorem", "gcd_eq_normalize", []], ["mod", "theorem", "gcd_eq_right_iff", []], ["mod", "theorem", "gcd_eq_zero_iff", []], ["mod", "theorem", "irreducible_iff_prime", ["gcd_monoid"]], ["mod", "theorem", "prime_of_irreducible", ["gcd_monoid"]], ["mod", "theorem", "gcd_mul_dvd_mul_gcd", []], ["mod", "theorem", "gcd_mul_lcm", []], ["add", "theorem", "gcd_mul_left'", []], ["mod", "theorem", "gcd_mul_left", []], ["add", "theorem", "gcd_mul_right'", []], ["mod", "theorem", "gcd_mul_right", []], ["add", "theorem", "gcd_one_left'", []], ["mod", "theorem", "gcd_one_left", []], ["add", "theorem", "gcd_one_right'", []], ["mod", "theorem", "gcd_one_right", []], ["mod", "theorem", "gcd_pow_left_dvd_pow_gcd", []], ["mod", "theorem", "gcd_pow_right_dvd_pow_gcd", []], ["mod", "theorem", "gcd_same", []], ["add", "theorem", "gcd_zero_left'", []], ["mod", "theorem", "gcd_zero_left", []], ["add", "theorem", "gcd_zero_right'", []], ["mod", "theorem", "gcd_zero_right", []], ["add", "theorem", "lcm_assoc'", []], ["mod", "theorem", "lcm_assoc", []], ["add", "theorem", "lcm_comm'", []], ["mod", "theorem", "lcm_comm", []], ["mod", "theorem", "lcm_dvd", []], ["mod", "theorem", "lcm_dvd_iff", []], ["mod", "theorem", "lcm_dvd_lcm", []], ["mod", "theorem", "lcm_dvd_lcm_mul_left", []], ["mod", "theorem", "lcm_dvd_lcm_mul_left_right", []], ["mod", "theorem", "lcm_dvd_lcm_mul_right", []], ["mod", "theorem", "lcm_dvd_lcm_mul_right_right", []], ["mod", "theorem", "lcm_eq_left_iff", []], ["mod", "theorem", "lcm_eq_normalize", []], ["mod", "theorem", "lcm_eq_of_associated_left", []], ["mod", "theorem", "lcm_eq_of_associated_right", []], ["mod", "theorem", "lcm_eq_one_iff", []], ["mod", "theorem", "lcm_eq_right_iff", []], ["mod", "theorem", "lcm_eq_zero_iff", []], ["mod", "theorem", "lcm_mul_left", []], ["mod", "theorem", "lcm_mul_right", []], ["mod", "theorem", "lcm_one_left", []], ["mod", "theorem", "lcm_one_right", []], ["mod", "theorem", "lcm_same", []], ["mod", "theorem", "lcm_units_coe_left", []], ["mod", "theorem", "lcm_units_coe_right", []], ["mod", "theorem", "normalize_gcd", []], ["mod", "theorem", "normalize_lcm", []], ["mod", "theorem", "pow_dvd_of_mul_eq_pow", []], ["del", "theorem", "units_eq_one", []]]}, {"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "coprime_iff_inf_one", ["associates"]], ["mod", "theorem", "count_mul", ["associates"]], ["mod", "theorem", "count_mul_of_coprime'", ["associates"]], ["mod", "theorem", "count_mul_of_coprime", ["associates"]], ["mod", "theorem", "count_of_coprime", ["associates"]], ["mod", "theorem", "count_pow", ["associates"]], ["mod", "theorem", "dvd_count_of_dvd_count_mul", ["associates"]], ["mod", "theorem", "dvd_count_pow", ["associates"]], ["mod", "theorem", "eq_of_prod_eq_prod", ["associates"]], ["mod", "theorem", "eq_pow_of_mul_eq_pow", ["associates"]], ["mod", "theorem", "factors_le", ["associates"]], ["mod", "theorem", "factors_mono", ["associates"]], ["mod", "theorem", "factors_mul", ["associates"]], ["mod", "theorem", "factors_one", ["associates"]], ["mod", "theorem", "factors_prime_pow", ["associates"]], ["mod", "theorem", "is_pow_of_dvd_count", ["associates"]], ["mod", "theorem", "le_of_count_ne_zero", ["associates"]], ["mod", "theorem", "pow_factors", ["associates"]], ["mod", "theorem", "prime_pow_dvd_iff_le", ["associates"]], ["mod", "theorem", "prod_factors", ["associates"]], ["mod", "theorem", "prod_le", ["associates"]], ["mod", "theorem", "prod_le_prod_iff_le", ["associates"]], ["add", "theorem", "quot_out", ["associates"]], ["mod", "theorem", "sup_mul_inf", ["associates"]], ["add", "theorem", "exists_mem_factors_of_dvd", ["unique_factorization_monoid"]], ["add", "theorem", "factors_prod", ["unique_factorization_monoid"]], ["add", "theorem", "irreducible_of_factor", ["unique_factorization_monoid"]], ["mod", "theorem", "normalized_factors_zero", ["unique_factorization_monoid"]], ["add", "theorem", "prime_of_factor", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1633424335, "sha": "def4814c", "message": "refactor(topology/algebra/module): continuous semilinear maps (#9539)\nGeneralize the theory of continuous linear maps to the semilinear setting.\nWe introduce a notation `∘L` for composition of continuous linear (i.e., not semilinear) maps, used sporadically to help with unification. See #8857 for a discussion of a related problem and fix.", "changes": [{"oldPath": "src/analysis/complex/conformal.lean", "newPath": "src/analysis/complex/conformal.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "apply_symm_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "bijective", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_coe", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_comp_coe_symm", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_def_rev", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_inj", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_injective", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_prod", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_symm_comp_coe", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_to_homeomorph", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_to_linear_equiv", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_coe", ["continuous_linear_equiv"]], ["mod", "theorem", "eq_symm_apply", ["continuous_linear_equiv"]], ["mod", "def", "equiv_of_inverse", ["continuous_linear_equiv"]], ["mod", "theorem", "equiv_of_inverse_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "ext", ["continuous_linear_equiv"]], ["mod", "theorem", "ext₁", ["continuous_linear_equiv"]], ["mod", "theorem", "image_closure", ["continuous_linear_equiv"]], ["mod", "theorem", "image_symm_image", ["continuous_linear_equiv"]], ["mod", "theorem", "injective", ["continuous_linear_equiv"]], ["mod", "theorem", "is_closed_image", ["continuous_linear_equiv"]], ["mod", "theorem", "map_add", ["continuous_linear_equiv"]], ["mod", "theorem", "map_eq_zero_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "map_neg", ["continuous_linear_equiv"]], ["mod", "theorem", "map_nhds_eq", ["continuous_linear_equiv"]], ["mod", "theorem", "map_smul", ["continuous_linear_equiv"]], ["add", "theorem", "map_smulₛₗ", ["continuous_linear_equiv"]], ["mod", "theorem", "map_sub", ["continuous_linear_equiv"]], ["mod", "theorem", "map_zero", ["continuous_linear_equiv"]], ["mod", "theorem", "preimage_closure", ["continuous_linear_equiv"]], ["mod", "def", "prod", ["continuous_linear_equiv"]], ["mod", "theorem", "prod_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "self_comp_symm", ["continuous_linear_equiv"]], ["mod", "theorem", "surjective", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_apply_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_apply_eq", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_comp_self", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_equiv_of_inverse", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_image_image", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_map_nhds_eq", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_symm", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_symm_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_to_homeomorph", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_to_linear_equiv", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_trans_apply", ["continuous_linear_equiv"]], ["mod", "def", "to_continuous_linear_map", ["continuous_linear_equiv"]], ["mod", "def", "to_homeomorph", ["continuous_linear_equiv"]], ["mod", "theorem", "to_linear_equiv_injective", ["continuous_linear_equiv"]], ["mod", "theorem", "trans_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "trans_to_linear_equiv", ["continuous_linear_equiv"]], ["mod", "def", "cod_restrict", ["continuous_linear_map"]], ["mod", "theorem", "coe_add'", ["continuous_linear_map"]], ["mod", "theorem", "coe_add", ["continuous_linear_map"]], ["mod", "theorem", "coe_cod_restrict", ["continuous_linear_map"]], ["mod", "theorem", "coe_cod_restrict_apply", ["continuous_linear_map"]], ["mod", "theorem", "coe_coe", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp'", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp", ["continuous_linear_map"]], ["mod", "theorem", "coe_coprod", ["continuous_linear_map"]], ["mod", "theorem", "coe_eq_id", ["continuous_linear_map"]], ["mod", "theorem", "coe_fn_injective", ["continuous_linear_map"]], ["mod", "theorem", "coe_fst'", ["continuous_linear_map"]], ["mod", "theorem", "coe_fst", ["continuous_linear_map"]], ["mod", "theorem", "coe_id'", ["continuous_linear_map"]], ["mod", "theorem", "coe_id", ["continuous_linear_map"]], ["mod", "theorem", "coe_inj", ["continuous_linear_map"]], ["mod", "theorem", "coe_injective", ["continuous_linear_map"]], ["mod", "theorem", "coe_inl", ["continuous_linear_map"]], ["mod", "theorem", "coe_inr", ["continuous_linear_map"]], ["mod", "theorem", "coe_mk'", ["continuous_linear_map"]], ["mod", "theorem", "coe_mk", ["continuous_linear_map"]], ["mod", "theorem", "coe_mul", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg'", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg", ["continuous_linear_map"]], ["mod", "theorem", "coe_prod", ["continuous_linear_map"]], ["mod", "theorem", "coe_prod_map'", ["continuous_linear_map"]], ["mod", "theorem", "coe_prod_map", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd'", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub'", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub", ["continuous_linear_map"]], ["mod", "theorem", "coe_subtype_val", ["continuous_linear_map"]], ["mod", "theorem", "coe_sum'", ["continuous_linear_map"]], ["mod", "theorem", "coe_sum", ["continuous_linear_map"]], ["mod", "theorem", "coe_zero'", ["continuous_linear_map"]], ["mod", "theorem", "coe_zero", ["continuous_linear_map"]], ["mod", "def", "comp", ["continuous_linear_map"]], ["mod", "theorem", "comp_apply", ["continuous_linear_map"]], ["mod", "theorem", "comp_assoc", ["continuous_linear_map"]], ["mod", "theorem", "comp_id", ["continuous_linear_map"]], ["mod", "theorem", "comp_zero", ["continuous_linear_map"]], ["mod", "def", "coprod", ["continuous_linear_map"]], ["mod", "theorem", "coprod_apply", ["continuous_linear_map"]], ["mod", "theorem", "default_def", ["continuous_linear_map"]], ["mod", "theorem", "eq_on_closure_span", ["continuous_linear_map"]], ["mod", "theorem", "ext", ["continuous_linear_map"]], ["mod", "theorem", "ext_iff", ["continuous_linear_map"]], ["mod", "theorem", "ext_on", ["continuous_linear_map"]], ["mod", "theorem", "ext_ring", ["continuous_linear_map"]], ["mod", "theorem", "ext_ring_iff", ["continuous_linear_map"]], ["mod", "def", "fst", ["continuous_linear_map"]], ["mod", "theorem", "fst_comp_prod", ["continuous_linear_map"]], ["mod", "theorem", "fst_prod_snd", ["continuous_linear_map"]], ["mod", "def", "id", ["continuous_linear_map"]], ["mod", "theorem", "id_apply", ["continuous_linear_map"]], ["mod", "theorem", "id_comp", ["continuous_linear_map"]], ["mod", "def", "inl", ["continuous_linear_map"]], ["mod", "theorem", "inl_apply", ["continuous_linear_map"]], ["mod", "def", "inr", ["continuous_linear_map"]], ["mod", "theorem", "inr_apply", ["continuous_linear_map"]], ["mod", "theorem", "is_closed_ker", ["continuous_linear_map"]], ["mod", "def", "ker", ["continuous_linear_map"]], ["mod", "theorem", "ker_cod_restrict", ["continuous_linear_map"]], ["mod", "theorem", "ker_coe", ["continuous_linear_map"]], ["mod", "theorem", "ker_prod", ["continuous_linear_map"]], ["mod", "theorem", "map_smul", ["continuous_linear_map"]], ["mod", "theorem", "map_smul_of_tower", ["continuous_linear_map"]], ["add", "theorem", "map_smulₛₗ", ["continuous_linear_map"]], ["mod", "theorem", "map_sum", ["continuous_linear_map"]], ["mod", "theorem", "map_zero", ["continuous_linear_map"]], ["mod", "theorem", "mem_ker", ["continuous_linear_map"]], ["mod", "theorem", "mem_range", ["continuous_linear_map"]], ["mod", "theorem", "mem_range_self", ["continuous_linear_map"]], ["mod", "theorem", "mul_apply", ["continuous_linear_map"]], ["mod", "theorem", "mul_def", ["continuous_linear_map"]], ["mod", "theorem", "one_apply", ["continuous_linear_map"]], ["mod", "theorem", "one_def", ["continuous_linear_map"]], ["mod", "theorem", "prod_apply", ["continuous_linear_map"]], ["mod", "def", "prod_map", ["continuous_linear_map"]], ["mod", "def", "proj_ker_of_right_inverse", ["continuous_linear_map"]], ["mod", "def", "range", ["continuous_linear_map"]], ["mod", "theorem", "range_coe", ["continuous_linear_map"]], ["mod", "theorem", "range_coprod", ["continuous_linear_map"]], ["mod", "theorem", "range_prod_eq", ["continuous_linear_map"]], ["mod", "theorem", "range_prod_le", ["continuous_linear_map"]], ["mod", "def", "smul_right", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_apply", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_comp", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_one_one", ["continuous_linear_map"]], ["mod", "def", "snd", ["continuous_linear_map"]], ["mod", "theorem", "snd_comp_prod", ["continuous_linear_map"]], ["mod", "theorem", "sub_apply'", ["continuous_linear_map"]], ["mod", "def", "subtype_val", ["continuous_linear_map"]], ["mod", "theorem", "subtype_val_apply", ["continuous_linear_map"]], ["mod", "theorem", "sum_apply", ["continuous_linear_map"]], ["mod", "theorem", "to_linear_map_eq_coe", ["continuous_linear_map"]], ["mod", "theorem", "zero_apply", ["continuous_linear_map"]], ["mod", "theorem", "zero_comp", ["continuous_linear_map"]], ["mod", "theorem", "topological_closure_map_submodule", ["dense_range"]], ["mod", "theorem", "topological_closure_map", ["submodule"]]]}]}, {"timestamp": 1633421144, "sha": "fefd8a38", "message": "refactor(analysis/convex/*): prove `convex_independent_iff_finset` without full Carathéodory (#9550)\nAlso relax one `add_comm_group` to `add_comm_monoid` and two `𝕜` to `β` + `module 𝕜 β`, and simplify imports.", "changes": [{"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["mod", "theorem", "concave_on_id", []], ["mod", "theorem", "convex_on_id", []]]}, {"oldPath": "src/analysis/convex/independent.lean", "newPath": "src/analysis/convex/independent.lean", "changes": []}]}, {"timestamp": 1633421143, "sha": "c42786f5", "message": "feat(topology/algebra): adic topology (#9521)\nThis is a modernized version of code from the perfectoid spaces project.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/nonarchimedean/adic_topology.lean", "changes": [["add", "theorem", "adic_basis", ["ideal"]], ["add", "theorem", "adic_module_basis", ["ideal"]], ["add", "def", "adic_module_topology", ["ideal"]], ["add", "def", "adic_topology", ["ideal"]], ["add", "theorem", "has_basis_nhds_adic", ["ideal"]], ["add", "theorem", "has_basis_nhds_zero_adic", ["ideal"]], ["add", "theorem", "nonarchimedean", ["ideal"]], ["add", "def", "open_add_subgroup", ["ideal"]], ["add", "def", "ring_filter_basis", ["ideal"]], ["add", "def", "is_adic", []], ["add", "theorem", "is_adic_iff", []], ["add", "theorem", "is_bot_adic_iff", []], ["add", "theorem", "is_ideal_adic_pow", []], ["add", "def", "topological_space_module", ["with_ideal"]]]}]}, {"timestamp": 1633421141, "sha": "61cd266a", "message": "ci(.github/workflows): automatically remove awaiting-CI label (#9491)\nThis PR adds a job to our CI which removes the label \"awaiting-CI\" when the build finishes successfully.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/awaiting-CI.2C.20.23bors.2C.20and.20the.20PR.20.23queue/near/255754196)", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1633404686, "sha": "15364121", "message": "refactor(data/polynomial): use `monic.ne_zero` and `nontriviality` (#9530)\nThere is a pattern in `data/polynomial` to have both `(hq : q.monic) (hq0 : q ≠ 0)` as assumptions. I found this less convenient to work with than `[nontrivial R] (hq : q.monic)` and using `monic.ne_zero` to replace `hq0`.\nThe `nontriviality` tactic automates all the cases where previously `nontrivial R` (or similar) was manually derived from the hypotheses.", "changes": [{"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["mod", "theorem", "degree_mod_by_monic_lt", ["polynomial"]], ["mod", "theorem", "div_by_monic_eq_zero_iff", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_self_iff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1633400517, "sha": "fd189536", "message": "chore(scripts): update nolints.txt (#9553)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1633397185, "sha": "04916217", "message": "docs(ring_theory/adjoin_root): fix docstring (#9546)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1633397184, "sha": "74664245", "message": "feat(number_theory/padics): add padic_norm lemmas (#9527)", "changes": [{"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": [["add", "theorem", "norm_le_pow_iff_norm_lt_pow_add_one", ["padic"]], ["add", "theorem", "norm_lt_pow_iff_norm_le_pow_sub_one", ["padic"]]]}]}, {"timestamp": 1633389495, "sha": "3aac8e5f", "message": "fix(order/sub): make arguments explicit (#9541)\n* This makes some arguments of lemmas explicit.\n* These lemmas were not used in places where the implicitness/explicitness of the arguments matters\n* Providing the arguments is sometimes useful, especially in `rw ← ...`\n* This follows the explicitness of similar lemmas (like the instantiations for `nat`).", "changes": [{"oldPath": "src/algebra/order/sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": [["mod", "theorem", "add_sub_add_right_eq_sub'", []], ["mod", "theorem", "add_sub_cancel_left", []], ["mod", "theorem", "add_sub_cancel_right", []], ["mod", "theorem", "sub_self'", []], ["mod", "theorem", "sub_zero'", []], ["mod", "theorem", "zero_sub'", []]]}]}, {"timestamp": 1633376274, "sha": "10da8e67", "message": "feat(set_theory/cardinal,*): assorted lemmas (#9516)\n### New instances\n* a denumerable type is infinite;\n* `Prop` is (noncomputably) enumerable;\n* `Prop` is nontrivial;\n* `cardinal.can_lift_cardinal_Type`: lift `cardinal.{u}` to `Type u`.\n### New lemmas / attrs\n* `quotient.out_equiv_out` : `x.out ≈ y.out ↔ x = y`;\n* `quotient.out_inj` : `x.out = y.out ↔ x = y`;\n* `cardinal.lift_bit0`, `cardinal.lift_bit1`, `cardinal.lift_two`, `cardinal.lift_prod` :\n new lemmas about `cardinal.lift`;\n* `cardinal.omega_le_lift` and `cardinal.lift_le_omega` : simplify `ω ≤ lift c` and `lift c ≤ ω`;\n* `cardinal.omega_le_add_iff`, `cardinal.encodable_iff`, `cardinal.mk_le_omega`,\n `cardinal.mk_denumerable`: new lemmas about `cardinal.omega`;\n* add `@[simp]` attribute to `cardinal.mk_univ`, add `cardinal.mk_insert`;\n* generalize `cardinal.nat_power_eq` to `cardinal.power_eq_two_power` and `cardinal.prod_eq_two_power`.", "changes": [{"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "out_equiv_out", ["quotient"]], ["add", "theorem", "out_inj", ["quotient"]]]}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": [["mod", "theorem", "mk_rat", ["cardinal"]]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "encodable_iff", ["cardinal"]], ["add", "theorem", "lift_bit0", ["cardinal"]], ["add", "theorem", "lift_bit1", ["cardinal"]], ["add", "theorem", "lift_le_omega", ["cardinal"]], ["add", "theorem", "lift_prod", ["cardinal"]], ["add", "theorem", "lift_two", ["cardinal"]], ["mod", "theorem", "lift_two_power", ["cardinal"]], ["add", "theorem", "mk_denumerable", ["cardinal"]], ["add", "theorem", "mk_insert", ["cardinal"]], ["mod", "theorem", "mk_int", ["cardinal"]], ["add", "theorem", "mk_le_omega", ["cardinal"]], ["mod", "theorem", "mk_nat", ["cardinal"]], ["mod", "theorem", "mk_pnat", ["cardinal"]], ["mod", "theorem", "mk_univ", ["cardinal"]], ["add", "theorem", "omega_le_add_iff", ["cardinal"]], ["add", "theorem", "omega_le_lift", ["cardinal"]], ["add", "theorem", "omega_le_mk", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["mod", "theorem", "nat_power_eq", ["cardinal"]], ["mod", "theorem", "pow_le", ["cardinal"]], ["add", "theorem", "power_eq_two_power", ["cardinal"]], ["mod", "theorem", "power_nat_le", ["cardinal"]], ["mod", "theorem", "power_self_eq", ["cardinal"]], ["add", "theorem", "prod_eq_two_power", ["cardinal"]]]}]}, {"timestamp": 1633376272, "sha": "50b51c5e", "message": "refactor(group_theory/is_p_group): Generalize `is_p_group.comap_injective` (#9509)\n`is_p_group.comap_injective` (comap along injective preserves p-groups) can be generalized to `is_p_group.comap_ker_is_p_group` (comap with p-group kernel preserves p-groups). This also simplifies the proof of `is_p_group.to_sup_of_normal_right`", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["del", "theorem", "comap_injective", ["is_p_group"]], ["add", "theorem", "comap_of_injective", ["is_p_group"]], ["add", "theorem", "comap_of_ker_is_p_group", ["is_p_group"]]]}]}, {"timestamp": 1633360193, "sha": "7a5d15a9", "message": "feat(data/pnat/interval): Finite intervals in ℕ+ (#9534)\nThis proves that `ℕ+` is a locally finite order.", "changes": [{"oldPath": null, "newPath": "src/data/pnat/interval.lean", "changes": [["add", "theorem", "Icc_eq_finset_subtype", ["pnat"]], ["add", "theorem", "Ioc_eq_finset_subtype", ["pnat"]], ["add", "theorem", "Ioo_eq_finset_subtype", ["pnat"]], ["add", "theorem", "card_Icc", ["pnat"]], ["add", "theorem", "card_Ioc", ["pnat"]], ["add", "theorem", "card_Ioo", ["pnat"]], ["add", "theorem", "card_fintype_Icc", ["pnat"]], ["add", "theorem", "card_fintype_Ioc", ["pnat"]], ["add", "theorem", "card_fintype_Ioo", ["pnat"]], ["add", "theorem", "map_subtype_embedding_Icc", ["pnat"]], ["add", "theorem", "map_subtype_embedding_Ioc", ["pnat"]], ["add", "theorem", "map_subtype_embedding_Ioo", ["pnat"]]]}]}, {"timestamp": 1633360192, "sha": "e998e4c4", "message": "feat(order/conditionally_complete_lattice): image and cSup commute (#9510)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cinfi_set", []], ["add", "theorem", "csupr_set", []], ["add", "theorem", "l_cSup'", ["galois_connection"]], ["add", "theorem", "u_cInf'", ["galois_connection"]], ["add", "theorem", "map_cInf'", ["order_iso"]], ["add", "theorem", "map_cSup'", ["order_iso"]]]}]}, {"timestamp": 1633360191, "sha": "d8968ba7", "message": "feat(algebra/order/functions): recursors and images under monotone maps (#9505)", "changes": [{"oldPath": "src/algebra/order/functions.lean", "newPath": "src/algebra/order/functions.lean", "changes": [["add", "theorem", "map_max", ["antitone_on"]], ["add", "theorem", "map_min", ["antitone_on"]], ["add", "theorem", "max_rec'", []], ["add", "theorem", "max_rec", []], ["add", "theorem", "min_rec'", []], ["add", "theorem", "min_rec", []], ["add", "theorem", "map_max", ["monotone_on"]], ["add", "theorem", "map_min", ["monotone_on"]]]}]}, {"timestamp": 1633360190, "sha": "fa520678", "message": "refactor(order/fixed_points): rewrite using bundled `preorder_hom`s (#9497)\nThis way `fixed_points.complete_lattice` can be an instance.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "inj_on_empty", ["set"]], ["add", "theorem", "inj_on_singleton", ["set"]], ["add", "theorem", "inj_on_union", ["set"]], ["add", "theorem", "injective_piecewise_iff", ["set"]], ["add", "theorem", "inj_on", ["set", "subsingleton"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["del", "theorem", "injective", ["function", "embedding"]]]}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": [["del", "theorem", "Sup_le_f_of_fixed_points", ["fixed_points"]], ["del", "theorem", "f_le_Inf_of_fixed_points", ["fixed_points"]], ["del", "theorem", "f_le_inf_of_fixed_points", ["fixed_points"]], ["del", "theorem", "le_next", ["fixed_points"]], ["del", "def", "next", ["fixed_points"]], ["del", "theorem", "next_eq", ["fixed_points"]], ["del", "def", "next_fixed", ["fixed_points"]], ["del", "def", "prev", ["fixed_points"]], ["del", "theorem", "prev_eq", ["fixed_points"]], ["del", "def", "prev_fixed", ["fixed_points"]], ["del", "theorem", "prev_le", ["fixed_points"]], ["del", "theorem", "sup_le_f_of_fixed_points", ["fixed_points"]], ["del", "def", "gfp", []], ["del", "theorem", "gfp_comp", []], ["del", "theorem", "gfp_fixed_point", []], ["del", "theorem", "gfp_gfp", []], ["del", "theorem", "gfp_induction", []], ["del", "theorem", "gfp_le", []], ["del", "theorem", "le_gfp", []], ["del", "theorem", "le_lfp", []], ["del", "def", "lfp", []], ["del", "theorem", "lfp_comp", []], ["del", "theorem", "lfp_fixed_point", []], ["del", "theorem", "lfp_induction", []], ["del", "theorem", "lfp_le", []], ["del", "theorem", "lfp_lfp", []], ["del", "theorem", "monotone_gfp", []], ["del", "theorem", "monotone_lfp", []], ["add", "def", "gfp", ["preorder_hom"]], ["add", "theorem", "gfp_const_inf_le", ["preorder_hom"]], ["add", "theorem", "gfp_gfp", ["preorder_hom"]], ["add", "theorem", "gfp_induction", ["preorder_hom"]], ["add", "theorem", "gfp_le", ["preorder_hom"]], ["add", "theorem", "gfp_le_map", ["preorder_hom"]], ["add", "theorem", "is_fixed_pt_gfp", ["preorder_hom"]], ["add", "theorem", "is_fixed_pt_lfp", ["preorder_hom"]], ["add", "theorem", "is_greatest_gfp", ["preorder_hom"]], ["add", "theorem", "is_greatest_gfp_le", ["preorder_hom"]], ["add", "theorem", "is_least_lfp", ["preorder_hom"]], ["add", "theorem", "is_least_lfp_le", ["preorder_hom"]], ["add", "theorem", "le_gfp", ["preorder_hom"]], ["add", "theorem", "le_lfp", ["preorder_hom"]], ["add", "theorem", "le_map_Sup_subset_fixed_points", ["preorder_hom"]], ["add", "theorem", "le_map_sup_fixed_points", ["preorder_hom"]], ["add", "theorem", "le_next_fixed", ["preorder_hom"]], ["add", "theorem", "le_prev_fixed", ["preorder_hom"]], ["add", "theorem", "le_prev_fixed_iff", ["preorder_hom"]], ["add", "def", "lfp", ["preorder_hom"]], ["add", "theorem", "lfp_induction", ["preorder_hom"]], ["add", "theorem", "lfp_le", ["preorder_hom"]], ["add", "theorem", "lfp_le_fixed", ["preorder_hom"]], ["add", "theorem", "lfp_le_map", ["preorder_hom"]], ["add", "theorem", "lfp_lfp", ["preorder_hom"]], ["add", "theorem", "map_Inf_subset_fixed_points_le", ["preorder_hom"]], ["add", "theorem", "map_gfp", ["preorder_hom"]], ["add", "theorem", "map_gfp_comp", ["preorder_hom"]], ["add", "theorem", "map_inf_fixed_points_le", ["preorder_hom"]], ["add", "theorem", "map_le_gfp", ["preorder_hom"]], ["add", "theorem", "map_le_lfp", ["preorder_hom"]], ["add", "theorem", "map_lfp", ["preorder_hom"]], ["add", "theorem", "map_lfp_comp", ["preorder_hom"]], ["add", "def", "next_fixed", ["preorder_hom"]], ["add", "theorem", "next_fixed_le", ["preorder_hom"]], ["add", "theorem", "next_fixed_le_iff", ["preorder_hom"]], ["add", "def", "prev_fixed", ["preorder_hom"]], ["add", "theorem", "prev_fixed_le", ["preorder_hom"]]]}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}]}, {"timestamp": 1633360189, "sha": "387ff6e3", "message": "feat(topology/homotopy): add `homotopy_with` (#9252)\nAdded `homotopy_with` as in [`HOL-Analysis`](https://isabelle.in.tum.de/library/HOL/HOL-Analysis/Homotopy.html) extending `homotopy`. Furthermore, I've added `homotopy_rel`.\nAlso rename/moved the file. There is also some refactoring which is part of the suggestions from #9141 .", "changes": [{"oldPath": "src/topology/homotopy.lean", "newPath": null, "changes": [["del", "theorem", "apply_one", ["continuous_map", "homotopy"]], ["del", "theorem", "apply_zero", ["continuous_map", "homotopy"]], ["del", "def", "curry", ["continuous_map", "homotopy"]], ["del", "theorem", "ext", ["continuous_map", "homotopy"]], ["del", "def", "extend", ["continuous_map", "homotopy"]], ["del", "theorem", "extend_apply_one", ["continuous_map", "homotopy"]], ["del", "theorem", "extend_apply_zero", ["continuous_map", "homotopy"]], ["del", "def", "refl", ["continuous_map", "homotopy"]], ["del", "def", "symm", ["continuous_map", "homotopy"]], ["del", "theorem", "symm_apply", ["continuous_map", "homotopy"]], ["del", "theorem", "symm_symm", ["continuous_map", "homotopy"]], ["del", "theorem", "symm_trans", ["continuous_map", "homotopy"]], ["del", "theorem", "to_continuous_map_apply", ["continuous_map", "homotopy"]], ["del", "def", "trans", ["continuous_map", "homotopy"]], ["del", "theorem", "trans_apply", ["continuous_map", "homotopy"]], ["del", "structure", "homotopy", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/homotopy/basic.lean", "changes": [["add", "theorem", "apply_one", ["continuous_map", "homotopy"]], ["add", "theorem", "apply_zero", ["continuous_map", "homotopy"]], ["add", "theorem", "coe_fn_injective", ["continuous_map", "homotopy"]], ["add", "theorem", "coe_to_continuous_map", ["continuous_map", "homotopy"]], ["add", "theorem", "congr_arg", ["continuous_map", "homotopy"]], ["add", "theorem", "congr_fun", ["continuous_map", "homotopy"]], ["add", "def", "curry", ["continuous_map", "homotopy"]], ["add", "theorem", "curry_apply", ["continuous_map", "homotopy"]], ["add", "theorem", "ext", ["continuous_map", "homotopy"]], ["add", "def", "extend", ["continuous_map", "homotopy"]], ["add", "theorem", "extend_apply_coe", ["continuous_map", "homotopy"]], ["add", "theorem", "extend_apply_of_le_zero", ["continuous_map", "homotopy"]], ["add", "theorem", "extend_apply_of_mem_I", ["continuous_map", "homotopy"]], ["add", "theorem", "extend_apply_of_one_le", ["continuous_map", "homotopy"]], ["add", "def", "refl", ["continuous_map", "homotopy"]], ["add", "def", "apply", ["continuous_map", "homotopy", "simps"]], ["add", "def", "symm", ["continuous_map", "homotopy"]], ["add", "theorem", "symm_symm", ["continuous_map", "homotopy"]], ["add", "theorem", "symm_trans", ["continuous_map", "homotopy"]], ["add", "def", "trans", ["continuous_map", "homotopy"]], ["add", "theorem", "trans_apply", ["continuous_map", "homotopy"]], ["add", "structure", "homotopy", ["continuous_map"]], ["add", "theorem", "eq_fst", ["continuous_map", "homotopy_rel"]], ["add", "theorem", "eq_snd", ["continuous_map", "homotopy_rel"]], ["add", "theorem", "fst_eq_snd", ["continuous_map", "homotopy_rel"]], ["add", "def", "refl", ["continuous_map", "homotopy_rel"]], ["add", "def", "symm", ["continuous_map", "homotopy_rel"]], ["add", "theorem", "symm_symm", ["continuous_map", "homotopy_rel"]], ["add", "theorem", "symm_trans", ["continuous_map", "homotopy_rel"]], ["add", "def", "trans", ["continuous_map", "homotopy_rel"]], ["add", "theorem", "trans_apply", ["continuous_map", "homotopy_rel"]], ["add", "def", "homotopy_rel", ["continuous_map"]], ["add", "theorem", "apply_one", ["continuous_map", "homotopy_with"]], ["add", "theorem", "apply_zero", ["continuous_map", "homotopy_with"]], ["add", "theorem", "coe_fn_injective", ["continuous_map", "homotopy_with"]], ["add", "theorem", "coe_to_continuous_map", ["continuous_map", "homotopy_with"]], ["add", "theorem", "coe_to_homotopy", ["continuous_map", "homotopy_with"]], ["add", "theorem", "ext", ["continuous_map", "homotopy_with"]], ["add", "theorem", "extend_prop", ["continuous_map", "homotopy_with"]], ["add", "theorem", "prop", ["continuous_map", "homotopy_with"]], ["add", "def", "refl", ["continuous_map", "homotopy_with"]], ["add", "def", "apply", ["continuous_map", "homotopy_with", "simps"]], ["add", "def", "symm", ["continuous_map", "homotopy_with"]], ["add", "theorem", "symm_symm", ["continuous_map", "homotopy_with"]], ["add", "theorem", "symm_trans", ["continuous_map", "homotopy_with"]], ["add", "def", "trans", ["continuous_map", "homotopy_with"]], ["add", "theorem", "trans_apply", ["continuous_map", "homotopy_with"]], ["add", "structure", "homotopy_with", ["continuous_map"]]]}]}, {"timestamp": 1633357001, "sha": "f6c77be6", "message": "fix(ci): always use python3 executable (#9531)\nOn many (particularly older) systems, the `python` command can refer to `python2` instead of `python3`. Therefore we change all `python` calls to `python3` to prevent failures on some self-hosted runners.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}]}, {"timestamp": 1633357000, "sha": "a07d1de4", "message": "feat(data/fin/interval): Finite intervals in `fin n` (#9523)", "changes": [{"oldPath": null, "newPath": "src/data/fin/interval.lean", "changes": [["add", "theorem", "Icc_eq_finset_subtype", ["fin"]], ["add", "theorem", "Ioc_eq_finset_subtype", ["fin"]], ["add", "theorem", "Ioo_eq_finset_subtype", ["fin"]], ["add", "theorem", "card_Icc", ["fin"]], ["add", "theorem", "card_Ioc", ["fin"]], ["add", "theorem", "card_Ioo", ["fin"]], ["add", "theorem", "card_fintype_Icc", ["fin"]], ["add", "theorem", "card_fintype_Ioc", ["fin"]], ["add", "theorem", "card_fintype_Ioo", ["fin"]], ["add", "theorem", "map_subtype_embedding_Icc", ["fin"]], ["add", "theorem", "map_subtype_embedding_Ioc", ["fin"]], ["add", "theorem", "map_subtype_embedding_Ioo", ["fin"]]]}]}, {"timestamp": 1633353803, "sha": "15d987a3", "message": "feat(probability_theory/notation): add notations for expected value, conditional expectation (#9469)\nWhen working in probability theory, the measure on the space is most often implicit. With our current notations for measure spaces, that means writing `volume` in a lot of places. To avoid that and introduce notations closer to the usual practice, this PR defines\n- `𝔼[X]` for the expected value (integral) of a function `X` over the volume measure,\n- `P[X]` for the expected value over the measure `P`,\n- `𝔼[X | hm]` for the conditional expectation with respect to the volume,\n- `X =ₐₛ Y` for `X =ᵐ[volume] Y` and similarly for `X ≤ᵐ[volume] Y`,\n- `∂P/∂Q` for `P.rn_deriv Q`\nAll notations are localized to the `probability_theory` namespace.", "changes": [{"oldPath": null, "newPath": "src/probability_theory/notation.lean", "changes": []}]}, {"timestamp": 1633340898, "sha": "ab7d2519", "message": "feat(measure_theory/covering/besicovitch_vector_space): vector spaces satisfy the assumption of Besicovitch covering theorem (#9461)\nThe Besicovitch covering theorem works in any metric space subject to a technical condition: there should be no satellite configuration of `N+1` points, for some `N`. We prove that this condition is satisfied in finite-dimensional real vector spaces. Moreover, we get the optimal bound for `N`: it coincides with the maximal number of `1`-separated points that fit in a ball of radius `2`, by [Füredi and Loeb, On the best constant for the Besicovitch covering theorem][furedi-loeb1994]", "changes": [{"oldPath": null, "newPath": "src/measure_theory/covering/besicovitch_vector_space.lean", "changes": [["add", "theorem", "card_le_multiplicity", ["besicovitch"]], ["add", "theorem", "card_le_multiplicity_of_δ", ["besicovitch"]], ["add", "theorem", "card_le_of_separated", ["besicovitch"]], ["add", "theorem", "exists_good_δ", ["besicovitch"]], ["add", "def", "good_δ", ["besicovitch"]], ["add", "theorem", "good_δ_lt_one", ["besicovitch"]], ["add", "def", "good_τ", ["besicovitch"]], ["add", "theorem", "is_empty_satellite_config_multiplicity", ["besicovitch"]], ["add", "theorem", "le_multiplicity_of_δ_of_fin", ["besicovitch"]], ["add", "def", "multiplicity", ["besicovitch"]], ["add", "theorem", "multiplicity_le", ["besicovitch"]], ["add", "theorem", "one_lt_good_τ", ["besicovitch"]], ["add", "def", "center_and_rescale", ["besicovitch", "satellite_config"]], ["add", "theorem", "center_and_rescale_center", ["besicovitch", "satellite_config"]], ["add", "theorem", "center_and_rescale_radius", ["besicovitch", "satellite_config"]], ["add", "theorem", "exists_normalized", ["besicovitch", "satellite_config"]], ["add", "theorem", "exists_normalized_aux1", ["besicovitch", "satellite_config"]], ["add", "theorem", "exists_normalized_aux2", ["besicovitch", "satellite_config"]], ["add", "theorem", "exists_normalized_aux3", ["besicovitch", "satellite_config"]]]}]}, {"timestamp": 1633340897, "sha": "b6f94a93", "message": "feat(analysis/special_functions): real derivs of `complex.exp` and `complex.log` (#9422)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "restrict_scalars_one_smul_right'", ["complex"]], ["add", "theorem", "restrict_scalars_one_smul_right", ["complex"]]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": [["add", "theorem", "complex_to_real_fderiv'", ["has_deriv_at"]], ["add", "theorem", "complex_to_real_fderiv", ["has_deriv_at"]], ["add", "theorem", "complex_to_real_fderiv'", ["has_deriv_within_at"]], ["add", "theorem", "complex_to_real_fderiv", ["has_deriv_within_at"]], ["add", "theorem", "complex_to_real_fderiv'", ["has_strict_deriv_at"]], ["add", "theorem", "complex_to_real_fderiv", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["add", "theorem", "has_strict_fderiv_at_log_real", ["complex"]], ["add", "theorem", "clog_real", ["has_deriv_at"]], ["add", "theorem", "clog_real", ["has_deriv_within_at"]], ["add", "theorem", "clog_real", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "has_strict_fderiv_at_exp_real", ["complex"]], ["add", "theorem", "cexp_real", ["has_deriv_at"]], ["add", "theorem", "cexp_real", ["has_deriv_within_at"]], ["add", "theorem", "cexp_real", ["has_strict_deriv_at"]]]}]}, {"timestamp": 1633340896, "sha": "1faf964e", "message": "feat(ring_theory/algebraic_independent): Existence of transcendence bases and rings are algebraic over transcendence basis (#9377)", "changes": [{"oldPath": "src/ring_theory/algebraic_independent.lean", "newPath": "src/ring_theory/algebraic_independent.lean", "changes": [["add", "theorem", "aeval_comp_mv_polynomial_option_equiv_polynomial_adjoin", ["algebraic_independent"]], ["add", "theorem", "algebra_map_aeval_equiv", ["algebraic_independent"]], ["add", "def", "mv_polynomial_option_equiv_polynomial_adjoin", ["algebraic_independent"]], ["add", "theorem", "option_iff", ["algebraic_independent"]], ["add", "theorem", "exists_is_transcendence_basis", []], ["add", "theorem", "is_algebraic", ["is_transcendence_basis"]]]}]}, {"timestamp": 1633340894, "sha": "8a05dca7", "message": "feat(order/jordan_holder): Jordan Hölder theorem (#8976)\nThe Jordan Hoelder theorem proved for a Jordan Hölder lattice, instances of which include submodules of a module and subgroups of a group.", "changes": [{"oldPath": null, "newPath": "src/order/jordan_holder.lean", "changes": [["add", "def", "append", ["composition_series"]], ["add", "theorem", "append_cast_add", ["composition_series"]], ["add", "theorem", "append_cast_add_aux", ["composition_series"]], ["add", "theorem", "append_nat_add", ["composition_series"]], ["add", "theorem", "append_nat_add_aux", ["composition_series"]], ["add", "theorem", "append_succ_cast_add", ["composition_series"]], ["add", "theorem", "append_succ_cast_add_aux", ["composition_series"]], ["add", "theorem", "append_succ_nat_add", ["composition_series"]], ["add", "theorem", "append_succ_nat_add_aux", ["composition_series"]], ["add", "def", "bot", ["composition_series"]], ["add", "theorem", "bot_erase_top", ["composition_series"]], ["add", "theorem", "bot_le", ["composition_series"]], ["add", "theorem", "bot_le_of_mem", ["composition_series"]], ["add", "theorem", "bot_mem", ["composition_series"]], ["add", "theorem", "bot_snoc", ["composition_series"]], ["add", "theorem", "chain'_to_list", ["composition_series"]], ["add", "theorem", "coe_fn_mk", ["composition_series"]], ["add", "theorem", "eq_of_bot_eq_bot_of_top_eq_top_of_length_eq_zero", ["composition_series"]], ["add", "theorem", "eq_snoc_erase_top", ["composition_series"]], ["add", "theorem", "append", ["composition_series", "equivalent"]], ["add", "theorem", "length_eq", ["composition_series", "equivalent"]], ["add", "theorem", "refl", ["composition_series", "equivalent"]], ["add", "theorem", "snoc_snoc_swap", ["composition_series", "equivalent"]], ["add", "theorem", "symm", ["composition_series", "equivalent"]], ["add", "theorem", "trans", ["composition_series", "equivalent"]], ["add", "def", "equivalent", ["composition_series"]], ["add", "def", "erase_top", ["composition_series"]], ["add", "theorem", "erase_top_top_le", ["composition_series"]], ["add", "theorem", "exists_top_eq_snoc_equivalant", ["composition_series"]], ["add", "theorem", "ext", ["composition_series"]], ["add", "theorem", "ext_fun", ["composition_series"]], ["add", "theorem", "forall_mem_eq_of_length_eq_zero", ["composition_series"]], ["add", "theorem", "is_maximal_erase_top_top", ["composition_series"]], ["add", "theorem", "jordan_holder", ["composition_series"]], ["add", "theorem", "le_top", ["composition_series"]], ["add", "theorem", "le_top_of_mem", ["composition_series"]], ["add", "theorem", "length_eq_zero_of_bot_eq_bot_of_top_eq_top_of_length_eq_zero", ["composition_series"]], ["add", "theorem", "length_of_list", ["composition_series"]], ["add", "theorem", "length_pos_of_bot_eq_bot_of_top_eq_top_of_length_pos", ["composition_series"]], ["add", "theorem", "length_pos_of_mem_ne", ["composition_series"]], ["add", "theorem", "length_to_list", ["composition_series"]], ["add", "theorem", "lt_succ", ["composition_series"]], ["add", "theorem", "lt_top_of_mem_erase_top", ["composition_series"]], ["add", "theorem", "mem_def", ["composition_series"]], ["add", "theorem", "mem_erase_top", ["composition_series"]], ["add", "theorem", "mem_erase_top_of_ne_of_mem", ["composition_series"]], ["add", "theorem", "mem_snoc", ["composition_series"]], ["add", "theorem", "mem_to_list", ["composition_series"]], ["add", "def", "of_list", ["composition_series"]], ["add", "theorem", "of_list_to_list'", ["composition_series"]], ["add", "theorem", "of_list_to_list", ["composition_series"]], ["add", "def", "snoc", ["composition_series"]], ["add", "theorem", "snoc_cast_succ", ["composition_series"]], ["add", "theorem", "snoc_erase_top_top", ["composition_series"]], ["add", "theorem", "snoc_last", ["composition_series"]], ["add", "theorem", "step", ["composition_series"]], ["add", "def", "to_list", ["composition_series"]], ["add", "theorem", "to_list_injective", ["composition_series"]], ["add", "theorem", "to_list_ne_nil", ["composition_series"]], ["add", "theorem", "to_list_nodup", ["composition_series"]], ["add", "theorem", "to_list_of_list", ["composition_series"]], ["add", "theorem", "to_list_sorted", ["composition_series"]], ["add", "def", "top", ["composition_series"]], ["add", "theorem", "top_erase_top", ["composition_series"]], ["add", "theorem", "top_mem", ["composition_series"]], ["add", "theorem", "top_snoc", ["composition_series"]], ["add", "theorem", "total", ["composition_series"]], ["add", "structure", "composition_series", []], ["add", "theorem", "iso_refl", ["jordan_holder_lattice", "is_maximal"]], ["add", "theorem", "is_maximal_inf_right_of_is_maximal_sup", ["jordan_holder_lattice"]], ["add", "theorem", "is_maximal_of_eq_inf", ["jordan_holder_lattice"]], ["add", "theorem", "second_iso_of_eq", ["jordan_holder_lattice"]]]}]}, {"timestamp": 1633340893, "sha": "abe81bcb", "message": "feat(linear_algebra/matrix/general_linear_group): GL(n, R) (#8466)\nadded this file which contains definition of the general linear group as well as the subgroup of matrices with positive determinant.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/general_linear_group.lean", "changes": [["add", "def", "GL_pos", ["matrix"]], ["add", "theorem", "GL_pos_coe_neg", ["matrix"]], ["add", "theorem", "GL_pos_neg_elt", ["matrix"]], ["add", "theorem", "coe_fn_eq_coe", ["matrix", "general_linear_group"]], ["add", "theorem", "coe_inv", ["matrix", "general_linear_group"]], ["add", "theorem", "coe_mul", ["matrix", "general_linear_group"]], ["add", "theorem", "coe_one", ["matrix", "general_linear_group"]], ["add", "def", "det", ["matrix", "general_linear_group"]], ["add", "theorem", "ext", ["matrix", "general_linear_group"]], ["add", "theorem", "ext_iff", ["matrix", "general_linear_group"]], ["add", "def", "mk'", ["matrix", "general_linear_group"]], ["add", "def", "to_lin", ["matrix", "general_linear_group"]], ["add", "def", "general_linear_group", ["matrix"]], ["add", "theorem", "mem_GL_pos", ["matrix"]], ["add", "theorem", "coe_eq_to_GL_pos", ["matrix", "special_linear_group"]], ["add", "def", "to_GL_pos", ["matrix", "special_linear_group"]], ["add", "theorem", "to_GL_pos_injective", ["matrix", "special_linear_group"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "mem_pos_subgroup", ["units"]], ["add", "def", "pos_subgroup", ["units"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "mem_pos_monoid", []], ["add", "def", "pos_submonoid", []]]}]}, {"timestamp": 1633335026, "sha": "edb22fef", "message": "feat(topology/algebra): nonarchimedean filter bases (#9511)\nThis is preparatory material for adic topology. It is a modernized version of code from the perfectoid spaces project.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/nonarchimedean/bases.lean", "changes": [["add", "def", "module_filter_basis", ["ring_filter_basis"]], ["add", "structure", "submodules_basis", ["ring_filter_basis"]], ["add", "theorem", "submodules_basis_is_basis", ["ring_filter_basis"]], ["add", "theorem", "has_basis_nhds", ["ring_subgroups_basis"]], ["add", "theorem", "has_basis_nhds_zero", ["ring_subgroups_basis"]], ["add", "theorem", "mem_add_group_filter_basis", ["ring_subgroups_basis"]], ["add", "theorem", "mem_add_group_filter_basis_iff", ["ring_subgroups_basis"]], ["add", "theorem", "nonarchimedean", ["ring_subgroups_basis"]], ["add", "theorem", "of_comm", ["ring_subgroups_basis"]], ["add", "def", "open_add_subgroup", ["ring_subgroups_basis"]], ["add", "def", "to_ring_filter_basis", ["ring_subgroups_basis"]], ["add", "def", "topology", ["ring_subgroups_basis"]], ["add", "structure", "ring_subgroups_basis", []], ["add", "theorem", "nonarchimedean", ["submodules_basis"]], ["add", "def", "open_add_subgroup", ["submodules_basis"]], ["add", "def", "to_module_filter_basis", ["submodules_basis"]], ["add", "def", "topology", ["submodules_basis"]], ["add", "structure", "submodules_basis", []], ["add", "theorem", "to_ring_subgroups_basis", ["submodules_ring_basis"]], ["add", "theorem", "to_submodules_basis", ["submodules_ring_basis"]], ["add", "def", "topology", ["submodules_ring_basis"]], ["add", "structure", "submodules_ring_basis", []]]}]}, {"timestamp": 1633335024, "sha": "6bd6afaf", "message": "feat(data/nat/interval): finite intervals of naturals (#9507)\nThis proves that `ℕ` is a `locally_finite_order`.", "changes": [{"oldPath": "src/data/list/erase_dup.lean", "newPath": "src/data/list/erase_dup.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/interval.lean", "changes": [["add", "theorem", "Icc_eq_range'", ["nat"]], ["add", "theorem", "Icc_succ_left", ["nat"]], ["add", "theorem", "Ioc_eq_range'", ["nat"]], ["add", "theorem", "Ioo_eq_range'", ["nat"]], ["add", "theorem", "card_Icc", ["nat"]], ["add", "theorem", "card_Ioc", ["nat"]], ["add", "theorem", "card_Ioo", ["nat"]], ["add", "theorem", "card_fintype_Icc", ["nat"]], ["add", "theorem", "card_fintype_Ioc", ["nat"]], ["add", "theorem", "card_fintype_Ioo", ["nat"]]]}]}, {"timestamp": 1633335023, "sha": "dc1b045a", "message": "feat(linear_algebra/free_module/strong_rank_condition): add `comm_ring_strong_rank_condition` (#9486)\nWe add `comm_ring_strong_rank_condition`: any commutative ring satisfies the strong rank condition.\nBecause of a circular import, this can't be in `linear_algebra.invariant_basis_number`.", "changes": [{"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": [["del", "theorem", "charpoly_coeff_zero_of_injective", ["linear_map"]], ["add", "theorem", "minpoly_coeff_zero_of_injective", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/free_module/strong_rank_condition.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}]}, {"timestamp": 1633335022, "sha": "6a6b4d05", "message": "feat(category_theory/sites/*): Cover-lifting functors on sites (#9431)\nThis PR defines cover-liftings functors between sites, and proves that `Ran F.op` maps sheaves to sheaves for cover-lifting functors `F`. \nThis will probably be needed when we want to glue B-sheaves into sheaves.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/cover_lifting.lean", "changes": [["add", "def", "get_section", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "get_section_commute", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "get_section_is_amalgamation", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "get_section_is_unique", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "def", "glued_limit_cone", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "glued_limit_cone_π_app", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "def", "glued_section", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "glued_section_is_amalgamation", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "glued_section_is_unique", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "helper", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "def", "pulledback_family", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "pulledback_family_apply", ["category_theory", "Ran_is_sheaf_of_cover_lifting"]], ["add", "theorem", "Ran_is_sheaf_of_cover_lifting", ["category_theory"]], ["add", "def", "comp_cover_lifting", ["category_theory"]], ["add", "structure", "cover_lifting", ["category_theory"]], ["add", "def", "id_cover_lifting", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["mod", "def", "SheafOfTypes", ["category_theory"]], ["add", "def", "comp_presheaf_map", ["category_theory", "presieve", "family_of_elements"]], ["add", "theorem", "comp_presheaf_map", ["category_theory", "presieve", "family_of_elements", "compatible"]], ["add", "theorem", "functor_pullback", ["category_theory", "presieve", "family_of_elements", "compatible"]], ["add", "theorem", "pullback", ["category_theory", "presieve", "family_of_elements", "compatible"]], ["add", "def", "functor_pullback", ["category_theory", "presieve", "family_of_elements"]], ["add", "def", "pullback", ["category_theory", "presieve", "family_of_elements"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "def", "functor_pullback", ["category_theory", "presieve"]], ["add", "theorem", "functor_pullback_id", ["category_theory", "presieve"]], ["add", "theorem", "functor_pullback_mem", ["category_theory", "presieve"]], ["mod", "def", "functor", ["category_theory", "sieve"]], ["add", "def", "functor_pullback", ["category_theory", "sieve"]], ["add", "theorem", "functor_pullback_id", ["category_theory", "sieve"]], ["mod", "structure", "sieve", ["category_theory"]]]}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": [["add", "def", "hom_mk'", ["category_theory", "structured_arrow"]]]}]}, {"timestamp": 1633326882, "sha": "d677c298", "message": "feat(field_theory/algebraic_closure): versions of exists_aeval_eq_zero for rings (#9517)", "changes": [{"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["add", "theorem", "exists_aeval_eq_zero_of_injective", ["is_alg_closed"]], ["add", "theorem", "exists_eval₂_eq_zero_of_injective", ["is_alg_closed"]]]}]}, {"timestamp": 1633293230, "sha": "52495a0f", "message": "chore(data/set/lattice): fix name (#9520)\n`comp` is for composition, `compl` for complement. Fix names using `comp` instead of `compl`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "Inter_eq_comp_Union_comp", ["set"]], ["add", "theorem", "Inter_eq_compl_Union_compl", ["set"]], ["del", "theorem", "Union_eq_comp_Inter_comp", ["set"]], ["add", "theorem", "Union_eq_compl_Inter_compl", ["set"]], ["del", "theorem", "sInter_eq_comp_sUnion_compl", ["set"]], ["add", "theorem", "sInter_eq_compl_sUnion_compl", ["set"]]]}]}, {"timestamp": 1633293229, "sha": "465508fc", "message": "split(order/monotone): split off `order.basic` (#9518)", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "comp_monotone", ["antitone"]], ["del", "theorem", "comp_monotone_on", ["antitone"]], ["del", "theorem", "ne_of_lt_of_lt_int", ["antitone"]], ["del", "theorem", "ne_of_lt_of_lt_nat", ["antitone"]], ["del", "theorem", "reflect_lt", ["antitone"]], ["del", "theorem", "strict_anti_iff_injective", ["antitone"]], ["del", "theorem", "strict_anti_of_injective", ["antitone"]], ["del", "def", "antitone", []], ["del", "theorem", "antitone_app", []], ["del", "theorem", "antitone_const", []], ["del", "theorem", "antitone_lam", []], ["del", "theorem", "antitone_nat_of_succ_le", []], ["del", "def", "antitone_on", []], ["del", "theorem", "antitone_on_univ", []], ["del", "theorem", "forall_ge_le_of_forall_le_succ", []], ["del", "theorem", "monotone_eval", ["function"]], ["del", "theorem", "injective_of_le_imp_le", []], ["del", "theorem", "injective_of_lt_imp_ne", []], ["del", "theorem", "comp_antitone", ["monotone"]], ["del", "theorem", "comp_antitone_on", ["monotone"]], ["del", "theorem", "comp_le_comp_left", ["monotone"]], ["del", "theorem", "ne_of_lt_of_lt_int", ["monotone"]], ["del", "theorem", "ne_of_lt_of_lt_nat", ["monotone"]], ["del", "theorem", "reflect_lt", ["monotone"]], ["del", "theorem", "strict_mono_iff_injective", ["monotone"]], ["del", "theorem", "strict_mono_of_injective", ["monotone"]], ["del", "def", "monotone", []], ["del", "theorem", "monotone_app", []], ["del", "theorem", "monotone_const", []], ["del", "theorem", "monotone_fst", []], ["del", "theorem", "monotone_id", []], ["del", "theorem", "monotone_lam", []], ["del", "theorem", "monotone_nat_of_le_succ", []], ["del", "def", "monotone_on", []], ["del", "theorem", "monotone_on_univ", []], ["del", "theorem", "monotone_snd", []], ["del", "theorem", "comp_strict_mono", ["strict_anti"]], ["del", "theorem", "comp_strict_mono_on", ["strict_anti"]], ["del", "theorem", "injective", ["strict_anti"]], ["del", "theorem", "le_iff_le", ["strict_anti"]], ["del", "theorem", "lt_iff_lt", ["strict_anti"]], ["del", "theorem", "maximal_of_minimal_image", ["strict_anti"]], ["del", "theorem", "minimal_of_maximal_image", ["strict_anti"]], ["del", "def", "strict_anti", []], ["del", "theorem", "strict_anti_nat_of_succ_lt", []], ["del", "theorem", "le_iff_le", ["strict_anti_on"]], ["del", "theorem", "lt_iff_lt", ["strict_anti_on"]], ["del", "def", "strict_anti_on", []], ["del", "theorem", "strict_anti_on_univ", []], ["del", "theorem", "comp_strict_anti", ["strict_mono"]], ["del", "theorem", "comp_strict_anti_on", ["strict_mono"]], ["del", "theorem", "id_le", ["strict_mono"]], ["del", "theorem", "injective", ["strict_mono"]], ["del", "theorem", "le_iff_le", ["strict_mono"]], ["del", "theorem", "lt_iff_lt", ["strict_mono"]], ["del", "theorem", "maximal_of_maximal_image", ["strict_mono"]], ["del", "theorem", "minimal_of_minimal_image", ["strict_mono"]], ["del", "def", "strict_mono", []], ["del", "theorem", "strict_mono_id", []], ["del", "theorem", "strict_mono_nat_of_lt_succ", []], ["del", "theorem", "strict_mono_of_le_iff_le", []], ["del", "theorem", "le_iff_le", ["strict_mono_on"]], ["del", "theorem", "lt_iff_lt", ["strict_mono_on"]], ["del", "def", "strict_mono_on", []], ["del", "theorem", "strict_mono_on_univ", []], ["del", "theorem", "mono_coe", ["subtype"]], ["del", "theorem", "strict_mono_coe", ["subtype"]]]}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/monotone.lean", "changes": [["add", "theorem", "comp_monotone", ["antitone"]], ["add", "theorem", "comp_monotone_on", ["antitone"]], ["add", "theorem", "ne_of_lt_of_lt_int", ["antitone"]], ["add", "theorem", "ne_of_lt_of_lt_nat", ["antitone"]], ["add", "theorem", "reflect_lt", ["antitone"]], ["add", "theorem", "strict_anti_iff_injective", ["antitone"]], ["add", "theorem", "strict_anti_of_injective", ["antitone"]], ["add", "def", "antitone", []], ["add", "theorem", "antitone_app", []], ["add", "theorem", "antitone_const", []], ["add", "theorem", "antitone_lam", []], ["add", "theorem", "antitone_nat_of_succ_le", []], ["add", "def", "antitone_on", []], ["add", "theorem", "antitone_on_univ", []], ["add", "theorem", "forall_ge_le_of_forall_le_succ", []], ["add", "theorem", "monotone_eval", ["function"]], ["add", "theorem", "injective_of_le_imp_le", []], ["add", "theorem", "injective_of_lt_imp_ne", []], ["add", "theorem", "comp_antitone", ["monotone"]], ["add", "theorem", "comp_antitone_on", ["monotone"]], ["add", "theorem", "comp_le_comp_left", ["monotone"]], ["add", "theorem", "ne_of_lt_of_lt_int", ["monotone"]], ["add", "theorem", "ne_of_lt_of_lt_nat", ["monotone"]], ["add", "theorem", "reflect_lt", ["monotone"]], ["add", "theorem", "strict_mono_iff_injective", ["monotone"]], ["add", "theorem", "strict_mono_of_injective", ["monotone"]], ["add", "def", "monotone", []], ["add", "theorem", "monotone_app", []], ["add", "theorem", "monotone_const", []], ["add", "theorem", "monotone_fst", []], ["add", "theorem", "monotone_id", []], ["add", "theorem", "monotone_lam", []], ["add", "theorem", "monotone_nat_of_le_succ", []], ["add", "def", "monotone_on", []], ["add", "theorem", "monotone_on_univ", []], ["add", "theorem", "monotone_snd", []], ["add", "theorem", "comp_strict_mono", ["strict_anti"]], ["add", "theorem", "comp_strict_mono_on", ["strict_anti"]], ["add", "theorem", "injective", ["strict_anti"]], ["add", "theorem", "le_iff_le", ["strict_anti"]], ["add", "theorem", "lt_iff_lt", ["strict_anti"]], ["add", "theorem", "maximal_of_minimal_image", ["strict_anti"]], ["add", "theorem", "minimal_of_maximal_image", ["strict_anti"]], ["add", "def", "strict_anti", []], ["add", "theorem", "strict_anti_nat_of_succ_lt", []], ["add", "theorem", "le_iff_le", ["strict_anti_on"]], ["add", "theorem", "lt_iff_lt", ["strict_anti_on"]], ["add", "def", "strict_anti_on", []], ["add", "theorem", "strict_anti_on_univ", []], ["add", "theorem", "comp_strict_anti", ["strict_mono"]], ["add", "theorem", "comp_strict_anti_on", ["strict_mono"]], ["add", "theorem", "id_le", ["strict_mono"]], ["add", "theorem", "injective", ["strict_mono"]], ["add", "theorem", "le_iff_le", ["strict_mono"]], ["add", "theorem", "lt_iff_lt", ["strict_mono"]], ["add", "theorem", "maximal_of_maximal_image", ["strict_mono"]], ["add", "theorem", "minimal_of_minimal_image", ["strict_mono"]], ["add", "def", "strict_mono", []], ["add", "theorem", "strict_mono_id", []], ["add", "theorem", "strict_mono_nat_of_lt_succ", []], ["add", "theorem", "strict_mono_of_le_iff_le", []], ["add", "theorem", "le_iff_le", ["strict_mono_on"]], ["add", "theorem", "lt_iff_lt", ["strict_mono_on"]], ["add", "def", "strict_mono_on", []], ["add", "theorem", "strict_mono_on_univ", []], ["add", "theorem", "mono_coe", ["subtype"]], ["add", "theorem", "strict_mono_coe", ["subtype"]]]}, {"oldPath": "src/order/prime_ideal.lean", "newPath": "src/order/prime_ideal.lean", "changes": []}]}, {"timestamp": 1633293228, "sha": "c0f7c56e", "message": "feat(algebra/order): exists_square_le (#9513)\nThis is a modernized version of code from the perfectoid project.", "changes": [{"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["add", "theorem", "exists_square_le", []]]}]}, {"timestamp": 1633293227, "sha": "bc5a081f", "message": "feat(topology/algebra): Cauchy filters on groups (#9512)\nThis adds a tiny file but putting this lemma in `topology/algebra/filter_basis.lean` would make that file import a lot of uniform spaces theory. This is a modernized version of code from the perfectoid spaces project.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/uniform_filter_basis.lean", "changes": [["add", "theorem", "cauchy_iff", ["add_group_filter_basis"]]]}]}, {"timestamp": 1633293226, "sha": "44f4d708", "message": "chore(*): use dot-notation for is_conj.symm and is_conj.trans (#9498)\nrenames:\n* is_conj_refl -> is_conj.refl\n* is_conj_symm -> is_conj.symm\n* is_conj_trans -> is_conj.trans", "changes": [{"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["mod", "theorem", "mem_carrier_mk", ["conj_classes"]], ["add", "theorem", "refl", ["is_conj"]], ["add", "theorem", "symm", ["is_conj"]], ["add", "theorem", "trans", ["is_conj"]], ["del", "theorem", "is_conj_refl", []], ["del", "theorem", "is_conj_symm", []], ["del", "theorem", "is_conj_trans", []], ["mod", "theorem", "mem_conjugates_of_self", []]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": []}]}, {"timestamp": 1633293225, "sha": "c1936c1f", "message": "feat(order/basic): define `is_top` and `is_bot` (#9493)\nThese predicates allow us to formulate & prove some theorems\nsimultaneously for the cases `[order_top α]` and `[no_top_order α]`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "set_of_eq_eq_singleton'", ["set"]], ["mod", "theorem", "set_of_eq_eq_singleton", ["set"]], ["add", "theorem", "subsingleton_is_bot", ["set"]], ["add", "theorem", "subsingleton_is_top", ["set"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "countable_is_bot", ["set"]], ["add", "theorem", "countable_is_top", ["set"]], ["add", "theorem", "countable", ["set", "subsingleton"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_is_bot", ["set"]], ["add", "theorem", "finite_is_top", ["set"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "unique", ["is_bot"]], ["add", "def", "is_bot", []], ["add", "theorem", "unique", ["is_top"]], ["add", "def", "is_top", []], ["add", "theorem", "not_is_bot", []], ["add", "theorem", "not_is_top", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "is_bot_iff_eq_bot", []], ["add", "theorem", "is_top_iff_eq_top", []]]}]}, {"timestamp": 1633287048, "sha": "e789ad31", "message": "feat(group_theory/subgroup): mk lemmas (#9514)\nSee discussion at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/set_like.20idiom", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "coe_set_mk", ["submodule"]], ["add", "theorem", "mem_mk", ["submodule"]], ["del", "theorem", "mk_coe", ["submodule"]], ["add", "theorem", "mk_le_mk", ["submodule"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "coe_set_mk", ["subfield"]], ["mod", "theorem", "mem_mk", ["subfield"]], ["add", "theorem", "mk_le_mk", ["subfield"]]]}, {"oldPath": "src/group_theory/subgroup/basic.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["add", "theorem", "coe_set_mk", ["subgroup"]], ["add", "theorem", "mem_mk", ["subgroup"]], ["add", "theorem", "mk_le_mk", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "coe_set_mk", ["submonoid"]], ["add", "theorem", "mem_mk", ["submonoid"]], ["add", "theorem", "mk_le_mk", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "coe_set_mk", ["subring"]], ["add", "theorem", "mem_mk", ["subring"]], ["add", "theorem", "mk_le_mk", ["subring"]]]}]}, {"timestamp": 1633274563, "sha": "d2608945", "message": "feat(analysis/convex/combination): lemmas connecting convex hull with affine combinations and barycentric coordinates (#9499)", "changes": [{"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["add", "theorem", "affine_combination_mem_convex_hull", []], ["add", "theorem", "convex_hull_affine_basis_eq_nonneg_barycentric", []], ["add", "theorem", "convex_hull_range_eq_exists_affine_combination", []]]}, {"oldPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["del", "theorem", "barycentric_coord_apply_combination", []], ["add", "theorem", "barycentric_coord_apply_combination_of_mem", []], ["add", "theorem", "barycentric_coord_apply_combination_of_not_mem", []]]}]}, {"timestamp": 1633261378, "sha": "cff99277", "message": "refactor(ring_theory/unique_factorization_domain): rename unique_factorization_monoid.factors (#9503)\nThis frees up the name for the non-normalizing version.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["del", "theorem", "squarefree_iff_nodup_factors", ["unique_factorization_monoid"]], ["add", "theorem", "squarefree_iff_nodup_normalized_factors", ["unique_factorization_monoid"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["del", "theorem", "factors_prod_factors_eq_factors", []], ["add", "theorem", "normalized_factors_prod", []], ["del", "theorem", "prod_factors_eq_self", []], ["add", "theorem", "prod_normalized_factors_eq_self", []], ["mod", "theorem", "sup_eq_prod_inf_factors", []]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["mod", "theorem", "factors_eq", ["nat"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["del", "theorem", "dvd_iff_factors_le_factors", ["unique_factorization_monoid"]], ["add", "theorem", "dvd_iff_normalized_factors_le_normalized_factors", ["unique_factorization_monoid"]], ["del", "theorem", "dvd_of_mem_factors", ["unique_factorization_monoid"]], ["add", "theorem", "dvd_of_mem_normalized_factors", ["unique_factorization_monoid"]], ["del", "theorem", "exists_mem_factors_of_dvd", ["unique_factorization_monoid"]], ["add", "theorem", "exists_mem_normalized_factors_of_dvd", ["unique_factorization_monoid"]], ["del", "theorem", "factors_irreducible", ["unique_factorization_monoid"]], ["del", "theorem", "factors_mul", ["unique_factorization_monoid"]], ["del", "theorem", "factors_one", ["unique_factorization_monoid"]], ["del", "theorem", "factors_pow", ["unique_factorization_monoid"]], ["del", "theorem", "factors_prod", ["unique_factorization_monoid"]], ["del", "theorem", "factors_zero", ["unique_factorization_monoid"]], ["del", "theorem", "irreducible_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "irreducible_of_normalized_factor", ["unique_factorization_monoid"]], ["del", "theorem", "le_multiplicity_iff_repeat_le_factors", ["unique_factorization_monoid"]], ["add", "theorem", "le_multiplicity_iff_repeat_le_normalized_factors", ["unique_factorization_monoid"]], ["del", "theorem", "multiplicity_eq_count_factors", ["unique_factorization_monoid"]], ["add", "theorem", "multiplicity_eq_count_normalized_factors", ["unique_factorization_monoid"]], ["del", "theorem", "normalize_factor", ["unique_factorization_monoid"]], ["add", "theorem", "normalize_normalized_factor", ["unique_factorization_monoid"]], ["add", "theorem", "normalized_factors_irreducible", ["unique_factorization_monoid"]], ["add", "theorem", "normalized_factors_mul", ["unique_factorization_monoid"]], ["add", "theorem", "normalized_factors_one", ["unique_factorization_monoid"]], ["add", "theorem", "normalized_factors_pow", ["unique_factorization_monoid"]], ["add", "theorem", "normalized_factors_prod", ["unique_factorization_monoid"]], ["add", "theorem", "normalized_factors_zero", ["unique_factorization_monoid"]], ["del", "theorem", "prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "prime_of_normalized_factor", ["unique_factorization_monoid"]], ["del", "theorem", "zero_not_mem_factors", ["unique_factorization_monoid"]], ["add", "theorem", "zero_not_mem_normalized_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1633261377, "sha": "18e7f914", "message": "feat(group_theory/quotient_group): if a quotient is trivial then the subgroup is the whole group (#9092)", "changes": [{"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": [["add", "theorem", "subsingleton_iff", ["quot"]], ["add", "theorem", "subsingleton_iff", ["quotient"]], ["add", "theorem", "bot_def", ["setoid"]], ["add", "theorem", "eq_top_iff", ["setoid"]], ["add", "theorem", "top_def", ["setoid"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "subgroup_eq_top_of_subsingleton", ["quotient_group"]], ["add", "theorem", "subsingleton_quotient_top", ["quotient_group"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "eqv_gen_eq_of_equivalence", ["relation"]]]}]}, {"timestamp": 1633255801, "sha": "55c30c69", "message": "feat(topology/basic): interior of finite intersection is intersection of interiors (#9508)\nAnd likewise for finite unions and closures.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_Union_of_fintype", []], ["add", "theorem", "closure_Union", ["finset"]], ["add", "theorem", "interior_Inter", ["finset"]], ["add", "theorem", "interior_Inter_of_fintype", []]]}]}, {"timestamp": 1633252542, "sha": "2807d83e", "message": "feat(analysis/normed_space/add_torsor_bases): barycentric coordinates are continuous (#9515)", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor_bases.lean", "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["add", "theorem", "continuous_barycentric_coord", []]]}]}, {"timestamp": 1633244159, "sha": "7d83ff15", "message": "feat(analysis/special_functions/exp_log): prove continuity of exp without derivatives (#9501)\nThis is a first step towards making the definition of log and rpow independent of derivatives. The final goal is to avoid importing all of calculus in measure_theory/function/lp_space.lean .", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "exp_bound_sq", ["complex"]], ["add", "theorem", "locally_lipschitz_exp", ["complex"]]]}]}, {"timestamp": 1633225129, "sha": "5f803fae", "message": "feat(analysis/convex/function): helper lemmas and general cleanup (#9438)\nThis adds\n* `convex_iff_pairwise_on_pos`\n* `convex_on_iff_forall_pos`, `concave_on_iff_forall_pos`,\n* `convex_on_iff_forall_pos_ne`, `concave_on_iff_forall_pos_ne`\n* `convex_on.convex_strict_epigraph`, `concave_on.convex_strict_hypograph`\ngeneralizes some instance assumptions:\n* `convex_on.translate_` didn't need `module 𝕜 β` but `has_scalar 𝕜 β`.\n* some proofs in `analysis.convex.exposed` were vestigially using `ℝ`.\n \nand golfs proofs.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_iff_pairwise_on_pos", []]]}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": [["mod", "theorem", "exposed_points_subset_extreme_points", []], ["del", "theorem", "antisymm", ["is_exposed"]], ["del", "theorem", "inter", ["is_exposed"]], ["del", "theorem", "is_closed", ["is_exposed"]], ["del", "theorem", "is_compact", ["is_exposed"]], ["del", "theorem", "refl", ["is_exposed"]]]}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["mod", "theorem", "add", ["concave_on"]], ["del", "theorem", "concave_ge", ["concave_on"]], ["add", "theorem", "convex_ge", ["concave_on"]], ["add", "theorem", "convex_strict_hypograph", ["concave_on"]], ["mod", "theorem", "subset", ["concave_on"]], ["mod", "theorem", "translate_left", ["concave_on"]], ["mod", "theorem", "translate_right", ["concave_on"]], ["add", "theorem", "concave_on_iff_forall_pos", []], ["add", "theorem", "concave_on_iff_forall_pos_ne", []], ["mod", "theorem", "add", ["convex_on"]], ["add", "theorem", "convex_strict_epigraph", ["convex_on"]], ["mod", "theorem", "subset", ["convex_on"]], ["mod", "theorem", "translate_left", ["convex_on"]], ["mod", "theorem", "translate_right", ["convex_on"]], ["add", "theorem", "convex_on_iff_forall_pos", []], ["add", "theorem", "convex_on_iff_forall_pos_ne", []], ["mod", "theorem", "neg_convex_on_iff", []]]}]}, {"timestamp": 1633218594, "sha": "7b022774", "message": "chore(topology/*): more lemmas about `dense`/`dense_range` (#9492)", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "exists_countable_dense_subset", ["dense"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "dense_range_coe", ["dense"]], ["add", "theorem", "exists_mem_open", ["dense"]], ["add", "theorem", "exists_mem_open", ["dense_range"]]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "dense_embedding_coe", ["dense"]], ["add", "theorem", "dense_image", ["dense_embedding"]], ["mod", "def", "subtype_emb", ["dense_embedding"]], ["add", "theorem", "dense_image", ["dense_inducing"]], ["mod", "structure", "dense_inducing", []]]}]}, {"timestamp": 1633197509, "sha": "c46a04a3", "message": "chore(measure_theory): move, deduplicate (#9489)\n* move lemmas like `is_compact.measure_lt_top` from `measure_theory.constructions.borel` to `measure_theory.measure.measure_space`;\n* drop `is_compact.is_finite_measure` etc;\n* add `measure_Ixx_lt_top`.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "exists_open_superset_measure_lt_top'", ["is_compact"]], ["del", "theorem", "exists_open_superset_measure_lt_top", ["is_compact"]], ["del", "theorem", "measure_lt_top", ["is_compact"]], ["del", "theorem", "measure_lt_top_of_nhds_within", ["is_compact"]], ["del", "def", "finite_spanning_sets_in_compact", ["measure_theory", "measure"]], ["del", "def", "finite_spanning_sets_in_open", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "exists_open_superset_measure_lt_top'", ["is_compact"]], ["add", "theorem", "exists_open_superset_measure_lt_top", ["is_compact"]], ["del", "theorem", "is_finite_measure", ["is_compact"]], ["del", "theorem", "is_finite_measure_of_nhds_within", ["is_compact"]], ["add", "theorem", "measure_lt_top", ["is_compact"]], ["add", "theorem", "measure_lt_top_of_nhds_within", ["is_compact"]], ["add", "theorem", "measure_Icc_lt_top", []], ["add", "theorem", "measure_Ico_lt_top", []], ["add", "theorem", "measure_Ioc_lt_top", []], ["add", "theorem", "measure_Ioo_lt_top", []], ["add", "def", "finite_spanning_sets_in_compact", ["measure_theory", "measure"]], ["add", "def", "finite_spanning_sets_in_open", ["measure_theory", "measure"]], ["del", "theorem", "is_finite_measure", ["metric", "bounded"]], ["add", "theorem", "measure_lt_top", ["metric", "bounded"]]]}]}, {"timestamp": 1633197507, "sha": "a97e86a6", "message": "chore(ring_theory/ideal): some simp attributes (#9487)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "bot_mul", ["ideal"]], ["mod", "theorem", "mul_bot", ["ideal"]], ["mod", "theorem", "mul_top", ["ideal"]], ["mod", "theorem", "top_mul", ["ideal"]]]}]}, {"timestamp": 1633190916, "sha": "e60dc2bb", "message": "docs(measure_theory/integral/lebesgue): Add \"Markov's inequality\" to the doc string of `mul_meas_ge_le_lintegral` (#9506)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}]}, {"timestamp": 1633190914, "sha": "110c740c", "message": "refactor(linear_algebra/charpoly): split in two files (#9485)\nWe split `linear_algebra/charpoly` in `linear_algebra/charpoly/basic` and `linear_algebra/charpoly/to_matrix`.\nCurrently in `linear_algebra/charpoly/to_matrix` we only prove `linear_map.charpoly_to_matrix f` : `charpoly f` is the characteristic polynomial of the matrix of `f` in any basis. This needs to be in a separate file then the definition of `f.charpoly` since it needs the invariant basis number property for commutative rings and in a future PR I will prove this as a special case of the fact that any commutative ring satisfies the strong rank condition, but the proof of this uses the characteristic polynomial.\nWe plan to add ohter results regarding the characteristic polynomial in the future.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": [["add", "theorem", "aeval_self_charpoly", ["linear_map"]], ["add", "def", "charpoly", ["linear_map"]], ["add", "theorem", "charpoly_coeff_zero_of_injective", ["linear_map"]], ["add", "theorem", "charpoly_def", ["linear_map"]], ["add", "theorem", "charpoly_monic", ["linear_map"]], ["add", "theorem", "is_integral", ["linear_map"]], ["add", "theorem", "minpoly_dvd_charpoly", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/charpoly.lean", "newPath": "src/linear_algebra/charpoly/to_matrix.lean", "changes": [["del", "theorem", "aeval_self_charpoly", ["linear_map"]], ["del", "def", "charpoly", ["linear_map"]], ["del", "theorem", "charpoly_coeff_zero_of_injective", ["linear_map"]], ["del", "theorem", "charpoly_def", ["linear_map"]], ["del", "theorem", "charpoly_monic", ["linear_map"]], ["del", "theorem", "is_integral", ["linear_map"]], ["del", "theorem", "minpoly_dvd_charpoly", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1633190913, "sha": "1ceebca6", "message": "refactor(linear_algebra/free_module_pid): move linear_algebra/free_module_pid to linear_algebra/free_module/pid (#9482)\nWe move `linear_algebra/free_module_pid` to `linear_algebra/free_module/pid`.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module/pid.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}]}, {"timestamp": 1633190911, "sha": "fa7fdcae", "message": "feat(measure_theory/function/ae_eq_of_integral): two ennreal-valued function are a.e. equal if their integrals agree (#9372)", "changes": [{"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["add", "theorem", "ae_eq_of_forall_set_lintegral_eq", ["measure_theory", "ae_measurable"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "lt_top_iff_ne_top", ["filter", "eventually"]], ["add", "theorem", "lt_top_of_ne", ["filter", "eventually"]], ["add", "theorem", "ne_of_lt", ["filter", "eventually"]], ["add", "theorem", "ne_top_of_lt", ["filter", "eventually"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "eventually_eq_of_to_real_eventually_eq", ["ennreal"]]]}]}, {"timestamp": 1633182661, "sha": "241aad7b", "message": "feat(data/finset/interval): API for `finset.Ixx` (#9495)\nThis proves basic results about `finset.Ixx` & co. Lemma names (should) match their `set` counterparts.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "coe_eq_singleton", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/interval.lean", "changes": [["add", "theorem", "Icc_eq_empty_iff", ["finset"]], ["add", "theorem", "Icc_eq_empty_of_lt", ["finset"]], ["add", "theorem", "Icc_self", ["finset"]], ["add", "theorem", "Ioc_eq_empty_iff", ["finset"]], ["add", "theorem", "Ioc_eq_empty_of_le", ["finset"]], ["add", "theorem", "Ioc_self", ["finset"]], ["add", "theorem", "Ioo_eq_empty", ["finset"]], ["add", "theorem", "Ioo_eq_empty_iff", ["finset"]], ["add", "theorem", "Ioo_eq_empty_of_le", ["finset"]], ["add", "theorem", "Ioo_self", ["finset"]], ["add", "theorem", "image_add_const_Icc", ["finset"]], ["add", "theorem", "image_add_const_Ioc", ["finset"]], ["add", "theorem", "image_add_const_Ioo", ["finset"]], ["add", "theorem", "nonempty_Icc", ["finset"]], ["add", "theorem", "nonempty_Ioc", ["finset"]], ["add", "theorem", "nonempty_Ioo", ["finset"]]]}]}, {"timestamp": 1633176729, "sha": "f3746ea6", "message": "chore(src/analysis/special_functions/trigonometric/basic) : prove continuity of sin/cos/sinh/cosh without derivatives (#9502)\nIn a future PR, I want to split all files in the special_functions folder to avoid importing calculus when not needed (the goal is to avoid importing it in the definition of lp_space in measure_theory). This PR changes the proofs of continuity of trigonometric functions.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["mod", "theorem", "continuous_cos", ["complex"]], ["mod", "theorem", "continuous_cosh", ["complex"]], ["mod", "theorem", "continuous_sin", ["complex"]], ["mod", "theorem", "continuous_sinh", ["complex"]], ["mod", "theorem", "continuous_cos", ["real"]], ["mod", "theorem", "continuous_cosh", ["real"]], ["mod", "theorem", "continuous_sin", ["real"]], ["mod", "theorem", "continuous_sinh", ["real"]]]}]}, {"timestamp": 1633167039, "sha": "e26a9e56", "message": "feat(measure_theory/covering/besicovitch): the Besicovitch covering theorem (#9462)\nThe Besicovitch covering theorem: in a nice metric space (e.g. real vector spaces), from any family of balls one can extract `N` subfamilies made of disjoint balls, covering all the centers of the balls in the family. The number `N` only depends on the metric space.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/covering/besicovitch.lean", "changes": [["add", "structure", "ball_package", ["besicovitch"]], ["add", "theorem", "exist_disjoint_covering_families", ["besicovitch"]], ["add", "theorem", "hlast'", ["besicovitch", "satellite_config"]], ["add", "theorem", "inter'", ["besicovitch", "satellite_config"]], ["add", "structure", "satellite_config", ["besicovitch"]], ["add", "def", "R", ["besicovitch", "tau_package"]], ["add", "def", "Union_up_to", ["besicovitch", "tau_package"]], ["add", "theorem", "color_lt", ["besicovitch", "tau_package"]], ["add", "def", "last_step", ["besicovitch", "tau_package"]], ["add", "theorem", "last_step_nonempty", ["besicovitch", "tau_package"]], ["add", "theorem", "mem_Union_up_to_last_step", ["besicovitch", "tau_package"]], ["add", "theorem", "monotone_Union_up_to", ["besicovitch", "tau_package"]], ["add", "structure", "tau_package", ["besicovitch"]], ["add", "def", "unit_ball_package", ["besicovitch"]]]}]}, {"timestamp": 1633167037, "sha": "9e54ad01", "message": "feat(ring_theory/algebraic_independent): algebraic independence (#9229)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/algebraic_independent.lean", "changes": [["add", "theorem", "algebraic_independent_iff", ["alg_hom"]], ["add", "theorem", "aeval_comp_repr", ["algebraic_independent"]], ["add", "def", "aeval_equiv", ["algebraic_independent"]], ["add", "theorem", "aeval_repr", ["algebraic_independent"]], ["add", "theorem", "algebra_map_injective", ["algebraic_independent"]], ["add", "theorem", "coe_range", ["algebraic_independent"]], ["add", "theorem", "comp", ["algebraic_independent"]], ["add", "theorem", "eq_zero_of_aeval_eq_zero", ["algebraic_independent"]], ["add", "theorem", "image", ["algebraic_independent"]], ["add", "theorem", "image_of_comp", ["algebraic_independent"]], ["add", "theorem", "is_transcendence_basis_iff", ["algebraic_independent"]], ["add", "theorem", "linear_independent", ["algebraic_independent"]], ["add", "theorem", "map'", ["algebraic_independent"]], ["add", "theorem", "map", ["algebraic_independent"]], ["add", "theorem", "mono", ["algebraic_independent"]], ["add", "theorem", "ne_zero", ["algebraic_independent"]], ["add", "theorem", "of_comp", ["algebraic_independent"]], ["add", "def", "repr", ["algebraic_independent"]], ["add", "theorem", "repr_ker", ["algebraic_independent"]], ["add", "theorem", "restrict_of_comp_subtype", ["algebraic_independent"]], ["add", "theorem", "restrict_scalars", ["algebraic_independent"]], ["add", "theorem", "to_subtype_range'", ["algebraic_independent"]], ["add", "theorem", "to_subtype_range", ["algebraic_independent"]], ["add", "def", "algebraic_independent", []], ["add", "theorem", "algebraic_independent_Union_of_directed", []], ["add", "theorem", "algebraic_independent_adjoin", []], ["add", "theorem", "algebraic_independent_bounded_of_finset_algebraic_independent_bounded", []], ["add", "theorem", "algebraic_independent_comp_subtype", []], ["add", "theorem", "algebraic_independent_empty", []], ["add", "theorem", "algebraic_independent_empty_iff", []], ["add", "theorem", "algebraic_independent_empty_type", []], ["add", "theorem", "algebraic_independent_empty_type_iff", []], ["add", "theorem", "algebraic_independent_equiv'", []], ["add", "theorem", "algebraic_independent_equiv", []], ["add", "theorem", "algebraic_independent_finset_map_embedding_subtype", []], ["add", "theorem", "algebraic_independent_iff", []], ["add", "theorem", "algebraic_independent_iff_injective_aeval", []], ["add", "theorem", "algebraic_independent_iff_ker_eq_bot", []], ["add", "theorem", "algebraic_independent_image", []], ["add", "theorem", "algebraic_independent_of_finite", []], ["add", "theorem", "algebraic_independent_of_subsingleton", []], ["add", "theorem", "algebraic_independent_sUnion_of_directed", []], ["add", "theorem", "algebraic_independent_subtype", []], ["add", "theorem", "algebraic_independent_subtype_range", []], ["add", "theorem", "exists_maximal_algebraic_independent", []], ["add", "def", "is_transcendence_basis", []]]}]}, {"timestamp": 1633159999, "sha": "709b4498", "message": "chore(algebra/star/basic): provide automorphisms in commutative rings (#9483)\nThis adds `star_mul_aut` and `star_ring_aut`, which are the versions of `star_mul_equiv` and `star_ring_equiv` which avoid needing `opposite` due to commutativity.", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "def", "star_mul_aut", []], ["add", "def", "star_ring_aut", []]]}]}, {"timestamp": 1633159998, "sha": "fc7f9f3a", "message": "feat(algebra/algebra): the range of `algebra_map (S : subalgebra R A) A` (#9450)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_eq_id", ["algebra", "id"]], ["mod", "theorem", "map_eq_self", ["algebra", "id"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "algebra_map_eq", ["subalgebra"]], ["add", "theorem", "range_algebra_map", ["subalgebra"]], ["add", "theorem", "srange_algebra_map", ["subalgebra"]], ["add", "theorem", "to_subring_subtype", ["subalgebra"]], ["add", "theorem", "to_subsemiring_subtype", ["subalgebra"]]]}]}, {"timestamp": 1633159997, "sha": "a59876f1", "message": "feat(ring_theory): quotients of a noetherian ring are noetherian (#9449)", "changes": [{"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["del", "theorem", "is_noetherian_of_quotient_of_noetherian", []]]}]}, {"timestamp": 1633150730, "sha": "37f43bff", "message": "feat(linear_algebra/affine_space/barycentric_coords): define barycentric coordinates (#9472)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/affine_space/barycentric_coords.lean", "changes": [["add", "theorem", "barycentric_coord_apply", []], ["add", "theorem", "barycentric_coord_apply_combination", []], ["add", "theorem", "barycentric_coord_apply_eq", []], ["add", "theorem", "barycentric_coord_apply_neq", []], ["add", "theorem", "basis_of_aff_ind_span_eq_top_apply", []]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "coe_sum_coords", ["basis"]], ["add", "theorem", "coe_sum_coords_eq_finsum", ["basis"]], ["add", "theorem", "coe_sum_coords_of_fintype", ["basis"]], ["mod", "def", "coord", ["basis"]], ["add", "theorem", "sum_coords_self_apply", ["basis"]]]}]}, {"timestamp": 1633129734, "sha": "06b184f9", "message": "refactor(analysis/convex/caratheodory): generalize ℝ to an arbitrary linearly ordered field (#9479)\nAs a result; `convex_independent_iff_finset` also gets generalized.", "changes": [{"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": [["mod", "theorem", "eq_pos_convex_span_of_mem_convex_hull", []]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/independent.lean", "newPath": "src/analysis/convex/independent.lean", "changes": [["mod", "theorem", "convex_independent_iff_finset", []]]}]}, {"timestamp": 1633120564, "sha": "118d45ad", "message": "doc(ring_theory/subring): fix docstring of `subring.center` (#9494)", "changes": [{"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1633120562, "sha": "e6f8ad79", "message": "refactor(analysis/convex/cone): generalize ℝ to an ordered semiring (#9481)\nCurrently, `convex_cone` is only defined in ℝ-modules. This generalizes ℝ to an arbitray ordered semiring. `convex_cone E` is now spelt `convex_cone 𝕜 E`. Similarly, `positive_cone E` becomes `positive_cone 𝕜 E`.", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["mod", "theorem", "mem_to_cone'", ["convex"]], ["mod", "theorem", "mem_to_cone", ["convex"]], ["mod", "def", "to_cone", ["convex"]], ["mod", "theorem", "to_cone_eq_Inf", ["convex"]], ["mod", "theorem", "to_cone_is_least", ["convex"]], ["add", "theorem", "salient", ["convex_cone", "blunt"]], ["mod", "def", "blunt", ["convex_cone"]], ["add", "theorem", "blunt_iff_not_pointed", ["convex_cone"]], ["mod", "theorem", "coe_inf", ["convex_cone"]], ["mod", "def", "comap", ["convex_cone"]], ["mod", "theorem", "comap_comap", ["convex_cone"]], ["mod", "theorem", "comap_id", ["convex_cone"]], ["del", "theorem", "convex", ["convex_cone"]], ["mod", "theorem", "ext'", ["convex_cone"]], ["mod", "theorem", "ext", ["convex_cone"]], ["add", "theorem", "pointed", ["convex_cone", "flat"]], ["mod", "def", "flat", ["convex_cone"]], ["mod", "def", "map", ["convex_cone"]], ["mod", "theorem", "map_id", ["convex_cone"]], ["mod", "theorem", "map_map", ["convex_cone"]], ["mod", "theorem", "mem_Inf", ["convex_cone"]], ["mod", "theorem", "mem_bot", ["convex_cone"]], ["mod", "theorem", "mem_comap", ["convex_cone"]], ["mod", "theorem", "mem_mk", ["convex_cone"]], ["mod", "theorem", "mem_top", ["convex_cone"]], ["mod", "def", "pointed", ["convex_cone"]], ["mod", "theorem", "pointed_iff_not_blunt", ["convex_cone"]], ["del", "theorem", "pointed_of_positive_cone", ["convex_cone"]], ["add", "theorem", "pointed_positive_cone", ["convex_cone"]], ["mod", "def", "positive_cone", ["convex_cone"]], ["mod", "def", "salient", ["convex_cone"]], ["mod", "theorem", "salient_iff_not_flat", ["convex_cone"]], ["del", "theorem", "salient_of_blunt", ["convex_cone"]], ["del", "theorem", "salient_of_positive_cone", ["convex_cone"]], ["add", "theorem", "salient_positive_cone", ["convex_cone"]], ["mod", "theorem", "smul_mem", ["convex_cone"]], ["mod", "theorem", "smul_mem_iff", ["convex_cone"]], ["mod", "def", "to_ordered_add_comm_group", ["convex_cone"]], ["mod", "theorem", "to_ordered_smul", ["convex_cone"]], ["mod", "def", "to_partial_order", ["convex_cone"]], ["mod", "def", "to_preorder", ["convex_cone"]], ["mod", "structure", "convex_cone", []], ["mod", "theorem", "riesz_extension", []]]}]}, {"timestamp": 1633120560, "sha": "05ee42cf", "message": "feat(order/circular): define circular orders (#9413)\nA circular order is the way to formalize positions on a circle. This is very foundational, as a good lot of the order-algebra-topology hierarchy has a circular analog.", "changes": [{"oldPath": null, "newPath": "src/order/circular.lean", "changes": [["add", "theorem", "btw_cyclic", []], ["add", "theorem", "btw_cyclic_right", []], ["add", "theorem", "btw_iff_not_sbtw", []], ["add", "theorem", "btw_of_sbtw", []], ["add", "theorem", "btw_refl_left", []], ["add", "theorem", "btw_refl_left_right", []], ["add", "theorem", "btw_refl_right", []], ["add", "theorem", "btw_rfl", []], ["add", "theorem", "btw_rfl_left", []], ["add", "theorem", "btw_rfl_left_right", []], ["add", "theorem", "btw_rfl_right", []], ["add", "theorem", "antisymm", ["has_btw", "btw"]], ["add", "theorem", "cyclic_left", ["has_btw", "btw"]], ["add", "def", "to_has_btw", ["has_le"]], ["add", "def", "to_has_sbtw", ["has_lt"]], ["add", "theorem", "trans_left", ["has_sbtw", "sbtw"]], ["add", "def", "to_circular_order", ["linear_order"]], ["add", "theorem", "not_btw_of_sbtw", []], ["add", "theorem", "not_sbtw_of_btw", []], ["add", "def", "to_circular_partial_order", ["partial_order"]], ["add", "def", "to_circular_preorder", ["preorder"]], ["add", "theorem", "sbtw_asymm", []], ["add", "theorem", "sbtw_cyclic", []], ["add", "theorem", "sbtw_cyclic_left", []], ["add", "theorem", "sbtw_cyclic_right", []], ["add", "theorem", "sbtw_iff_btw_not_btw", []], ["add", "theorem", "sbtw_iff_not_btw", []], ["add", "theorem", "sbtw_irrefl", []], ["add", "theorem", "sbtw_irrefl_left", []], ["add", "theorem", "sbtw_irrefl_left_right", []], ["add", "theorem", "sbtw_irrefl_right", []], ["add", "theorem", "sbtw_of_btw_not_btw", []], ["add", "theorem", "sbtw_trans_right", []], ["add", "def", "cIcc", ["set"]], ["add", "def", "cIoo", ["set"]], ["add", "theorem", "compl_cIcc", ["set"]], ["add", "theorem", "compl_cIoo", ["set"]], ["add", "theorem", "left_mem_cIcc", ["set"]], ["add", "theorem", "mem_cIcc", ["set"]], ["add", "theorem", "mem_cIoo", ["set"]], ["add", "theorem", "right_mem_cIcc", ["set"]]]}]}, {"timestamp": 1633120559, "sha": "5c92eb0b", "message": "feat(measure_theory/function/conditional_expectation): conditional expectation on real functions equal Radon-Nikodym derivative (#9378)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "rn_deriv_ae_eq_condexp", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": [["add", "theorem", "with_densityᵥ_trim_absolutely_continuous", ["measure_theory", "integrable"]], ["add", "theorem", "with_densityᵥ_trim_eq_integral", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1633120558, "sha": "75d022bb", "message": "feat(probability_theory/density): define probability density functions (#9323)\nThis PR also proves some elementary properties about probability density function such as the law of the unconscious statistician.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "set_lintegral_lt_top_of_bdd_above", ["measure_theory"]], ["add", "theorem", "set_lintegral_lt_top_of_is_compact", ["measure_theory"]], ["add", "theorem", "set_lintegral_mono", ["measure_theory"]], ["add", "theorem", "set_lintegral_mono_ae", ["measure_theory"]], ["add", "theorem", "with_density_eq_zero", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/probability_theory/density.lean", "changes": [["add", "theorem", "measurable", ["measure_theory", "has_pdf"]], ["add", "theorem", "map_eq_set_lintegral_pdf", ["measure_theory"]], ["add", "theorem", "map_eq_with_density_pdf", ["measure_theory"]], ["add", "theorem", "measurable_of_pdf_ne_zero", ["measure_theory"]], ["add", "theorem", "measurable_pdf", ["measure_theory"]], ["add", "theorem", "ae_lt_top", ["measure_theory", "pdf"]], ["add", "theorem", "has_finite_integral_mul", ["measure_theory", "pdf"]], ["add", "theorem", "has_pdf_iff", ["measure_theory", "pdf"]], ["add", "theorem", "has_pdf_iff_of_measurable", ["measure_theory", "pdf"]], ["add", "theorem", "have_lebesgue_decomposition_of_has_pdf", ["measure_theory", "pdf"]], ["add", "theorem", "integrable_iff_integrable_mul_pdf", ["measure_theory", "pdf"]], ["add", "theorem", "integral_fun_mul_eq_integral", ["measure_theory", "pdf"]], ["add", "theorem", "integral_mul_eq_integral", ["measure_theory", "pdf"]], ["add", "theorem", "lintegral_eq_measure_univ", ["measure_theory", "pdf"]], ["add", "theorem", "map_absolutely_continuous", ["measure_theory", "pdf"]], ["add", "theorem", "of_real_to_real_ae_eq", ["measure_theory", "pdf"]], ["add", "theorem", "quasi_measure_preserving_has_pdf'", ["measure_theory", "pdf"]], ["add", "theorem", "quasi_measure_preserving_has_pdf", ["measure_theory", "pdf"]], ["add", "theorem", "has_pdf_iff", ["measure_theory", "pdf", "real"]], ["add", "theorem", "has_pdf_iff_of_measurable", ["measure_theory", "pdf", "real"]], ["add", "theorem", "to_quasi_measure_preserving", ["measure_theory", "pdf"]], ["add", "def", "pdf", ["measure_theory"]], ["add", "theorem", "pdf_eq_zero_of_not_measurable", ["measure_theory"]], ["add", "theorem", "pdf_undef", ["measure_theory"]]]}]}, {"timestamp": 1633113286, "sha": "6354fe95", "message": "feat(topology/algebra): discrete group criterion (#9488)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "discrete_topology_iff_open_singleton_one", []]]}]}, {"timestamp": 1633113285, "sha": "a5fc0a33", "message": "feat(topology/algebra): filters bases for algebra (#9480)\nThis is modernized version of code from the perfectoid spaces project.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "mem_smul_of_mem", ["set"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/filter_basis.lean", "changes": [["add", "def", "N", ["group_filter_basis"]], ["add", "theorem", "N_one", ["group_filter_basis"]], ["add", "theorem", "conj", ["group_filter_basis"]], ["add", "theorem", "inv", ["group_filter_basis"]], ["add", "theorem", "mem_nhds_one", ["group_filter_basis"]], ["add", "theorem", "mul", ["group_filter_basis"]], ["add", "theorem", "nhds_eq", ["group_filter_basis"]], ["add", "theorem", "nhds_has_basis", ["group_filter_basis"]], ["add", "theorem", "nhds_one_eq", ["group_filter_basis"]], ["add", "theorem", "nhds_one_has_basis", ["group_filter_basis"]], ["add", "theorem", "one", ["group_filter_basis"]], ["add", "theorem", "prod_subset_self", ["group_filter_basis"]], ["add", "def", "topology", ["group_filter_basis"]], ["add", "def", "group_filter_basis_of_comm", []], ["add", "def", "of_bases", ["module_filter_basis"]], ["add", "theorem", "smul", ["module_filter_basis"]], ["add", "theorem", "smul_left", ["module_filter_basis"]], ["add", "theorem", "smul_right", ["module_filter_basis"]], ["add", "def", "topology'", ["module_filter_basis"]], ["add", "def", "topology", ["module_filter_basis"]], ["add", "structure", "module_filter_basis", []], ["add", "theorem", "mul", ["ring_filter_basis"]], ["add", "theorem", "mul_left", ["ring_filter_basis"]], ["add", "theorem", "mul_right", ["ring_filter_basis"]], ["add", "def", "topology", ["ring_filter_basis"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "theorem", "of_add_group_of_nhds_zero", ["topological_ring"]], ["add", "theorem", "of_nhds_zero", ["topological_ring"]]]}]}, {"timestamp": 1633108897, "sha": "db6d8627", "message": "split(analysis/convex/basic): split off `analysis.convex.hull` (#9477)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "image_convex_hull", ["affine_map"]], ["del", "theorem", "convex_hull_eq", ["convex"]], ["del", "theorem", "convex_remove_iff_not_mem_convex_hull_remove", ["convex"]], ["del", "theorem", "convex_convex_hull", []], ["del", "def", "convex_hull", []], ["del", "theorem", "convex_hull_empty", []], ["del", "theorem", "convex_hull_empty_iff", []], ["del", "theorem", "convex_hull_min", []], ["del", "theorem", "convex_hull_mono", []], ["del", "theorem", "convex_hull_nonempty_iff", []], ["del", "theorem", "convex_hull_singleton", []], ["del", "theorem", "convex_hull_image", ["is_linear_map"]], ["del", "theorem", "image_convex_hull", ["is_linear_map"]], ["del", "theorem", "convex_hull_image", ["linear_map"]], ["del", "theorem", "image_convex_hull", ["linear_map"]], ["del", "theorem", "subset_convex_hull", []]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/convex/hull.lean", "changes": [["add", "theorem", "image_convex_hull", ["affine_map"]], ["add", "theorem", "convex_hull_eq", ["convex"]], ["add", "theorem", "convex_remove_iff_not_mem_convex_hull_remove", ["convex"]], ["add", "theorem", "convex_convex_hull", []], ["add", "def", "convex_hull", []], ["add", "theorem", "convex_hull_empty", []], ["add", "theorem", "convex_hull_empty_iff", []], ["add", "theorem", "convex_hull_min", []], ["add", "theorem", "convex_hull_mono", []], ["add", "theorem", "convex_hull_nonempty_iff", []], ["add", "theorem", "convex_hull_singleton", []], ["add", "theorem", "convex_hull_image", ["is_linear_map"]], ["add", "theorem", "image_convex_hull", ["is_linear_map"]], ["add", "theorem", "convex_hull_image", ["linear_map"]], ["add", "theorem", "image_convex_hull", ["linear_map"]], ["add", "theorem", "subset_convex_hull", []]]}]}, {"timestamp": 1633103647, "sha": "249a015c", "message": "chore(ring_theory/coprime): split out imports into a new file so that `is_coprime` can be used earlier. (#9403)\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Use.20of.20is_coprime.20in.20rat.2Ebasic/near/254942750)", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime/basic.lean", "changes": [["del", "theorem", "prod_dvd_of_coprime", ["finset"]], ["del", "theorem", "prod_dvd_of_coprime", ["fintype"]], ["del", "theorem", "of_prod_left", ["is_coprime"]], ["del", "theorem", "of_prod_right", ["is_coprime"]], ["del", "theorem", "pow", ["is_coprime"]], ["del", "theorem", "pow_iff", ["is_coprime"]], ["del", "theorem", "pow_left", ["is_coprime"]], ["del", "theorem", "pow_left_iff", ["is_coprime"]], ["del", "theorem", "pow_right", ["is_coprime"]], ["del", "theorem", "pow_right_iff", ["is_coprime"]], ["del", "theorem", "prod_left", ["is_coprime"]], ["del", "theorem", "prod_left_iff", ["is_coprime"]], ["del", "theorem", "prod_right", ["is_coprime"]], ["del", "theorem", "prod_right_iff", ["is_coprime"]], ["del", "theorem", "is_coprime_iff_coprime", ["nat"]]]}, {"oldPath": null, "newPath": "src/ring_theory/coprime/lemmas.lean", "changes": [["add", "theorem", "prod_dvd_of_coprime", ["finset"]], ["add", "theorem", "prod_dvd_of_coprime", ["fintype"]], ["add", "theorem", "of_prod_left", ["is_coprime"]], ["add", "theorem", "of_prod_right", ["is_coprime"]], ["add", "theorem", "pow", ["is_coprime"]], ["add", "theorem", "pow_iff", ["is_coprime"]], ["add", "theorem", "pow_left", ["is_coprime"]], ["add", "theorem", "pow_left_iff", ["is_coprime"]], ["add", "theorem", "pow_right", ["is_coprime"]], ["add", "theorem", "pow_right_iff", ["is_coprime"]], ["add", "theorem", "prod_left", ["is_coprime"]], ["add", "theorem", "prod_left_iff", ["is_coprime"]], ["add", "theorem", "prod_right", ["is_coprime"]], ["add", "theorem", "prod_right_iff", ["is_coprime"]], ["add", "theorem", "is_coprime_iff_coprime", ["nat"]]]}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}]}, {"timestamp": 1633103646, "sha": "102ce303", "message": "feat(linear_algebra/direct_sum): `submodule_is_internal_iff_independent_and_supr_eq_top` (#9214)\nThis shows that a grade decomposition into submodules is bijective iff and only iff the submodules are independent and span the whole module.\nThe key proofs are:\n* `complete_lattice.independent_of_dfinsupp_lsum_injective`\n* `complete_lattice.independent.dfinsupp_lsum_injective`\nEverything else is just glue.\nThis replaces parts of #8246, and uses what is probably a similar proof strategy, but without unfolding down to finsets.\nUnlike the proof there, this requires only `add_comm_monoid` for the `complete_lattice.independent_of_dfinsupp_lsum_injective` direction of the proof. I was not able to find a proof of `complete_lattice.independent.dfinsupp_lsum_injective` with the same weak assumptions, as it is not true! A counter-example is included,", "changes": [{"oldPath": null, "newPath": "counterexamples/direct_sum_is_internal.lean", "changes": [["add", "theorem", "mem_with_sign_neg_one", []], ["add", "theorem", "mem_with_sign_one", []], ["add", "theorem", "one_ne_neg_one", ["units_int"]], ["add", "def", "independent", ["with_sign"]], ["add", "theorem", "is_compl", ["with_sign"]], ["add", "theorem", "not_injective", ["with_sign"]], ["add", "theorem", "not_internal", ["with_sign"]], ["add", "theorem", "supr", ["with_sign"]], ["add", "def", "with_sign", []]]}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "theorem", "independent", ["direct_sum", "submodule_is_internal"]], ["add", "theorem", "submodule_is_internal_iff_independent_and_supr_eq_top", ["direct_sum"]], ["add", "theorem", "submodule_is_internal_of_independent_of_supr_eq_top", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "theorem", "dfinsupp_lsum_injective", ["complete_lattice", "independent"]], ["add", "theorem", "independent_iff_dfinsupp_lsum_injective", ["complete_lattice"]], ["add", "theorem", "independent_iff_forall_dfinsupp", ["complete_lattice"]], ["add", "theorem", "independent_of_dfinsupp_lsum_injective", ["complete_lattice"]], ["add", "theorem", "lsum_single", ["dfinsupp"]]]}]}, {"timestamp": 1633094652, "sha": "9be12dd5", "message": "feat(order/locally_finite): introduce locally finite orders (#9464)\nThe new typeclass `locally_finite_order` homogeneizes treatment of intervals as `finset`s and `multiset`s. `finset.Ico` is now available for all locally finite orders (instead of being ℕ-specialized), rendering `finset.Ico_ℤ` and `pnat.Ico` useless.\nThis PR also introduces the long-awaited `finset.Icc`, `finset.Ioc`, `finset.Ioo`, and `finset.Ici`, `finset.Ioi` (for `order_top`s) and `finset.Iic`, `finset.Iio` (for `order_bot`s), and the `multiset` variations thereof.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "and_and_and_comm", []]]}, {"oldPath": null, "newPath": "src/order/locally_finite.lean", "changes": [["add", "def", "Icc", ["finset"]], ["add", "def", "Ici", ["finset"]], ["add", "theorem", "Ici_eq_Icc", ["finset"]], ["add", "def", "Iic", ["finset"]], ["add", "theorem", "Iic_eq_Icc", ["finset"]], ["add", "def", "Ioc", ["finset"]], ["add", "def", "Ioi", ["finset"]], ["add", "theorem", "Ioi_eq_Ioc", ["finset"]], ["add", "def", "Ioo", ["finset"]], ["add", "theorem", "coe_Icc", ["finset"]], ["add", "theorem", "coe_Ici", ["finset"]], ["add", "theorem", "coe_Iic", ["finset"]], ["add", "theorem", "coe_Ioc", ["finset"]], ["add", "theorem", "coe_Ioi", ["finset"]], ["add", "theorem", "coe_Ioo", ["finset"]], ["add", "theorem", "map_subtype_embedding_Icc", ["finset"]], ["add", "theorem", "map_subtype_embedding_Ioc", ["finset"]], ["add", "theorem", "map_subtype_embedding_Ioo", ["finset"]], ["add", "theorem", "mem_Icc", ["finset"]], ["add", "theorem", "mem_Ici", ["finset"]], ["add", "theorem", "mem_Iic", ["finset"]], ["add", "theorem", "mem_Ioc", ["finset"]], ["add", "theorem", "mem_Ioi", ["finset"]], ["add", "theorem", "mem_Ioo", ["finset"]], ["add", "theorem", "subtype_Icc_eq", ["finset"]], ["add", "theorem", "subtype_Ioc_eq", ["finset"]], ["add", "theorem", "subtype_Ioo_eq", ["finset"]], ["add", "def", "of_Icc'", ["locally_finite_order"]], ["add", "def", "of_Icc", ["locally_finite_order"]], ["add", "def", "Icc", ["multiset"]], ["add", "def", "Ici", ["multiset"]], ["add", "def", "Iic", ["multiset"]], ["add", "def", "Ioc", ["multiset"]], ["add", "def", "Ioi", ["multiset"]], ["add", "def", "Ioo", ["multiset"]], ["add", "theorem", "mem_Icc", ["multiset"]], ["add", "theorem", "mem_Ici", ["multiset"]], ["add", "theorem", "mem_Iic", ["multiset"]], ["add", "theorem", "mem_Ioc", ["multiset"]], ["add", "theorem", "mem_Ioi", ["multiset"]], ["add", "theorem", "mem_Ioo", ["multiset"]], ["add", "theorem", "finite_Icc", ["set"]], ["add", "theorem", "finite_Ici", ["set"]], ["add", "theorem", "finite_Iic", ["set"]], ["add", "theorem", "finite_Ioc", ["set"]], ["add", "theorem", "finite_Ioi", ["set"]], ["add", "theorem", "finite_Ioo", ["set"]]]}]}, {"timestamp": 1633094650, "sha": "62b8c1fa", "message": "feat(order/basic): Antitone functions (#9119)\nDefine `antitone` and `strict_anti`. Use them where they already were used in expanded form. Rename lemmas accordingly.\nProvide a few more `order_dual` results, and rename `monotone.order_dual` to `monotone.dual`.\nRestructure `order.basic`. Now, monotone stuff can easily be singled out to go in a new file `order.monotone` if wanted. It represents 587 out of the 965 lines.", "changes": [{"oldPath": "src/algebra/order/functions.lean", "newPath": "src/algebra/order/functions.lean", "changes": [["add", "theorem", "map_max", ["antitone"]], ["add", "theorem", "map_min", ["antitone"]]]}, {"oldPath": "src/algebra/order/monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": [["mod", "theorem", "mul_strict_mono'", ["monotone"]], ["mod", "theorem", "mul'", ["strict_mono"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["mod", "theorem", "antitone_of_deriv_nonpos", []], ["del", "theorem", "concave_on_of_deriv_antitone", []], ["add", "theorem", "concave_on_of_deriv_antitone_on", []], ["add", "theorem", "antitone_on_of_deriv_nonpos", ["convex"]], ["del", "theorem", "strict_anti_of_deriv_neg", ["convex"]], ["add", "theorem", "strict_anti_on_of_deriv_neg", ["convex"]], ["del", "theorem", "strict_mono_of_deriv_pos", ["convex"]], ["add", "theorem", "strict_mono_on_of_deriv_pos", ["convex"]], ["del", "theorem", "convex_on_of_deriv_mono", []], ["add", "theorem", "convex_on_of_deriv_monotone_on", []], ["del", "theorem", "convex_on_univ_of_deriv_mono", []], ["add", "theorem", "convex_on_univ_of_deriv_monotone", []], ["add", "theorem", "monotone_of_deriv_nonneg", []], ["del", "theorem", "monotone_on_of_deriv_nonneg", []]]}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_sin_pow_antitone", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["del", "theorem", "forall_ge_le_of_forall_le_succ", []]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "comp", ["strict_anti_on"]], ["add", "theorem", "comp_strict_mono_on", ["strict_anti_on"]], ["del", "theorem", "comp_strict_mono_on", ["strict_mono"]], ["add", "theorem", "comp_strict_anti_on", ["strict_mono_on"]]]}, {"oldPath": "src/data/set/intervals/surj_on.lean", "newPath": "src/data/set/intervals/surj_on.lean", "changes": []}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["mod", "theorem", "lower_central_series_antitone", []]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["mod", "theorem", "integrable_on_compact", ["antitone"]], ["mod", "theorem", "integrable_on_compact", ["antitone_on"]], ["mod", "theorem", "integrable_on_compact", ["monotone_on"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "interval_integrable", ["antitone"]], ["mod", "theorem", "interval_integrable", ["antitone_on"]], ["mod", "theorem", "interval_integrable", ["monotone_on"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["add", "theorem", "strict_mono_x", ["pell"]], ["add", "theorem", "strict_mono_y", ["pell"]], ["del", "theorem", "x_increasing", ["pell"]], ["del", "theorem", "y_increasing", ["pell"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "comp_monotone", ["antitone"]], ["add", "theorem", "comp_monotone_on", ["antitone"]], ["add", "theorem", "ne_of_lt_of_lt_int", ["antitone"]], ["add", "theorem", "ne_of_lt_of_lt_nat", ["antitone"]], ["add", "theorem", "reflect_lt", ["antitone"]], ["add", "theorem", "strict_anti_iff_injective", ["antitone"]], ["add", "theorem", "strict_anti_of_injective", ["antitone"]], ["add", "def", "antitone", []], ["add", "theorem", "antitone_app", []], ["add", "theorem", "antitone_const", []], ["add", "theorem", "antitone_lam", []], ["add", "theorem", "antitone_nat_of_succ_le", []], ["add", "def", "antitone_on", []], ["add", "theorem", "antitone_on_univ", []], ["del", "theorem", "comp_le_comp_left_of_monotone", []], ["add", "theorem", "forall_ge_le_of_forall_le_succ", []], ["add", "theorem", "comp_antitone", ["monotone"]], ["add", "theorem", "comp_antitone_on", ["monotone"]], ["add", "theorem", "comp_le_comp_left", ["monotone"]], ["mod", "theorem", "ne_of_lt_of_lt_int", ["monotone"]], ["mod", "theorem", "ne_of_lt_of_lt_nat", ["monotone"]], ["mod", "theorem", "reflect_lt", ["monotone"]], ["mod", "theorem", "strict_mono_iff_injective", ["monotone"]], ["mod", "theorem", "strict_mono_of_injective", ["monotone"]], ["mod", "theorem", "monotone_app", []], ["mod", "theorem", "monotone_const", []], ["mod", "theorem", "monotone_id", []], ["mod", "theorem", "monotone_lam", []], ["add", "def", "monotone_on", []], ["add", "theorem", "monotone_on_univ", []], ["add", "theorem", "comp_strict_mono", ["strict_anti"]], ["add", "theorem", "comp_strict_mono_on", ["strict_anti"]], ["add", "theorem", "injective", ["strict_anti"]], ["add", "theorem", "le_iff_le", ["strict_anti"]], ["add", "theorem", "lt_iff_lt", ["strict_anti"]], ["add", "theorem", "maximal_of_minimal_image", ["strict_anti"]], ["add", "theorem", "minimal_of_maximal_image", ["strict_anti"]], ["add", "def", "strict_anti", []], ["add", "theorem", "strict_anti_nat_of_succ_lt", []], ["mod", "theorem", "le_iff_le", ["strict_anti_on"]], ["mod", "theorem", "lt_iff_lt", ["strict_anti_on"]], ["mod", "def", "strict_anti_on", []], ["add", "theorem", "strict_anti_on_univ", []], ["del", "theorem", "comp", ["strict_mono"]], ["add", "theorem", "comp_strict_anti", ["strict_mono"]], ["add", "theorem", "comp_strict_anti_on", ["strict_mono"]], ["mod", "theorem", "id_le", ["strict_mono"]], ["mod", "theorem", "injective", ["strict_mono"]], ["mod", "theorem", "le_iff_le", ["strict_mono"]], ["mod", "theorem", "lt_iff_lt", ["strict_mono"]], ["add", "theorem", "maximal_of_maximal_image", ["strict_mono"]], ["del", "theorem", "maximal_preimage_top", ["strict_mono"]], ["add", "theorem", "minimal_of_minimal_image", ["strict_mono"]], ["del", "theorem", "minimal_preimage_bot", ["strict_mono"]], ["del", "theorem", "monotone", ["strict_mono"]], ["del", "theorem", "order_dual", ["strict_mono"]], ["mod", "def", "strict_mono", []], ["mod", "theorem", "strict_mono_id", []], ["mod", "theorem", "strict_mono_nat_of_lt_succ", []], ["mod", "theorem", "le_iff_le", ["strict_mono_on"]], ["mod", "theorem", "lt_iff_lt", ["strict_mono_on"]], ["mod", "def", "strict_mono_on", []], ["add", "theorem", "strict_mono_on_univ", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["del", "theorem", "maximal_preimage_top'", ["strict_mono"]], ["add", "theorem", "maximal_preimage_top", ["strict_mono"]], ["del", "theorem", "minimal_preimage_bot'", ["strict_mono"]], ["add", "theorem", "minimal_preimage_bot", ["strict_mono"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/indicator_function.lean", "newPath": "src/order/filter/indicator_function.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["mod", "theorem", "forall_le_of_antitone", ["monotone"]]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}, {"oldPath": "src/order/ord_continuous.lean", "newPath": "src/order/ord_continuous.lean", "changes": []}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "exists_seq_strict_anti_tendsto'", []], ["add", "theorem", "exists_seq_strict_anti_tendsto", []], ["del", "theorem", "exists_seq_strict_antitone_tendsto'", []], ["del", "theorem", "exists_seq_strict_antitone_tendsto", []], ["add", "theorem", "exists_seq_antitone_tendsto'", ["is_glb"]], ["add", "theorem", "exists_seq_antitone_tendsto", ["is_glb"]], ["del", "theorem", "exists_seq_monotone_tendsto'", ["is_glb"]], ["del", "theorem", "exists_seq_monotone_tendsto", ["is_glb"]], ["add", "theorem", "exists_seq_strict_anti_tendsto_of_not_mem'", ["is_glb"]], ["add", "theorem", "exists_seq_strict_anti_tendsto_of_not_mem", ["is_glb"]], ["del", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem'", ["is_glb"]], ["del", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem", ["is_glb"]], ["mod", "theorem", "tendsto_at_bot_csupr", []], ["mod", "theorem", "tendsto_at_bot_is_lub", []], ["mod", "theorem", "tendsto_at_bot_supr", []], ["mod", "theorem", "tendsto_at_top_cinfi", []], ["mod", "theorem", "tendsto_at_top_infi", []], ["mod", "theorem", "tendsto_at_top_is_glb", []]]}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}]}, {"timestamp": 1633094648, "sha": "d6bf2dd0", "message": "refactor(*): replace `abs` with vertical bar notation (#8891)\nThe notion of an \"absolute value\" occurs both in algebra (e.g. lattice ordered groups) and analysis (e.g. GM and GL-spaces). I introduced a `has_abs` notation class in #9172, along with the conventional mathematical vertical bar notation `|.|` for `abs`.\nThe notation vertical bar notation was already in use in some files as a local notation. This PR replaces `abs` with the vertical bar notation throughout mathlib.", "changes": [{"oldPath": "archive/imo/imo2006_q3.lean", "newPath": "archive/imo/imo2006_q3.lean", "changes": []}, {"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": [["mod", "theorem", "abs_eq_one_of_pow_eq_one", []]]}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["mod", "theorem", "abs_sub_round", []]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "abs_pow", []]]}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["mod", "theorem", "abs_le_abs_of_sq_le_sq", []], ["mod", "theorem", "abs_le_of_sq_le_sq", []], ["mod", "theorem", "abs_lt_abs_of_sq_lt_sq", []], ["mod", "theorem", "abs_lt_of_sq_lt_sq", []], ["mod", "theorem", "abs_neg_one_pow", []], ["mod", "theorem", "abs_sq", []], ["mod", "theorem", "pow_abs", []], ["mod", "theorem", "sq_abs", []], ["mod", "theorem", "sq_le_sq", []], ["mod", "theorem", "sq_lt_sq", []]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["mod", "theorem", "abs_div", []], ["mod", "theorem", "abs_inv", []], ["mod", "theorem", "abs_one_div", []]]}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "theorem", "abs_abs", []], ["mod", "theorem", "abs_abs_sub_abs_le_abs_sub", []], ["mod", "theorem", "abs_add", []], ["mod", "theorem", "abs_add_three", []], ["mod", "theorem", "abs_by_cases", []], ["mod", "theorem", "abs_choice", []], ["mod", "theorem", "abs_eq", []], ["mod", "theorem", "abs_eq_abs", []], ["mod", "theorem", "abs_eq_zero", []], ["mod", "theorem", "abs_le'", []], ["mod", "theorem", "abs_le", []], ["mod", "theorem", "abs_le_abs", []], ["mod", "theorem", "abs_le_max_abs_abs", []], ["mod", "theorem", "abs_lt", []], ["mod", "theorem", "abs_max_sub_max_le_abs", []], ["mod", "theorem", "abs_neg", []], ["mod", "theorem", "abs_nonneg", []], ["mod", "theorem", "abs_nonpos_iff", []], ["mod", "theorem", "abs_of_neg", []], ["mod", "theorem", "abs_of_nonneg", []], ["mod", "theorem", "abs_of_nonpos", []], ["mod", "theorem", "abs_of_pos", []], ["mod", "theorem", "abs_pos", []], ["mod", "theorem", "abs_pos_of_neg", []], ["mod", "theorem", "abs_pos_of_pos", []], ["mod", "theorem", "abs_sub_abs_le_abs_sub", []], ["mod", "theorem", "abs_sub_comm", []], ["mod", "theorem", "abs_sub_le", []], ["mod", "theorem", "abs_sub_le_iff", []], ["mod", "theorem", "abs_sub_lt_iff", []], ["mod", "theorem", "abs_zero", []], ["mod", "theorem", "eq_of_abs_sub_eq_zero", []], ["mod", "theorem", "eq_of_abs_sub_nonpos", []], ["mod", "theorem", "eq_or_eq_neg_of_abs_eq", []], ["mod", "theorem", "le_abs", []], ["mod", "theorem", "le_abs_self", []], ["mod", "theorem", "le_of_abs_le", []], ["mod", "theorem", "lt_abs", []], ["mod", "theorem", "lt_of_abs_lt", []], ["mod", "theorem", "max_sub_min_eq_abs'", []], ["mod", "theorem", "max_sub_min_eq_abs", []], ["mod", "theorem", "neg_abs_le_self", []], ["mod", "theorem", "neg_le_abs_self", []], ["mod", "theorem", "neg_le_of_abs_le", []], ["mod", "theorem", "neg_lt_of_abs_lt", []], ["mod", "theorem", "sub_le_of_abs_sub_le_left", []], ["mod", "theorem", "sub_le_of_abs_sub_le_right", []], ["mod", "theorem", "sub_lt_of_abs_sub_lt_left", []], ["mod", "theorem", "sub_lt_of_abs_sub_lt_right", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["mod", "theorem", "abs_cases", []], ["mod", "theorem", "abs_dvd", []], ["mod", "theorem", "abs_dvd_abs", []], ["mod", "theorem", "abs_dvd_self", []], ["mod", "theorem", "abs_eq_iff_mul_self_eq", []], ["mod", "theorem", "abs_eq_neg_self", []], ["mod", "theorem", "abs_eq_self", []], ["mod", "theorem", "abs_le_iff_mul_self_le", []], ["mod", "theorem", "abs_le_one_iff_mul_self_le_one", []], ["mod", "theorem", "abs_lt_iff_mul_self_lt", []], ["mod", "theorem", "abs_mul", []], ["mod", "theorem", "abs_mul_abs_self", []], ["mod", "theorem", "abs_mul_self", []], ["mod", "theorem", "abs_one", []], ["mod", "theorem", "abs_sub_sq", []], ["mod", "theorem", "abs_two", []], ["mod", "theorem", "dvd_abs", []], ["mod", "theorem", "even_abs", []], ["mod", "theorem", "self_dvd_abs", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "theorem", "norm_int", ["complex"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "abs_norm_eq_norm", []], ["mod", "theorem", "abs_norm_sub_norm_le", []], ["mod", "theorem", "norm_eq_abs", ["int"]], ["mod", "theorem", "norm_eq_abs", ["real"]]]}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["mod", "theorem", "abs_log_sub_add_sum_range_le", ["real"]], ["mod", "theorem", "exp_log_eq_abs", ["real"]], ["mod", "theorem", "has_sum_pow_div_log_of_abs_lt_1", ["real"]], ["mod", "theorem", "log_abs", ["real"]], ["mod", "theorem", "log_of_ne_zero", ["real"]]]}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "abs_rpow_le_abs_rpow", ["real"]], ["mod", "theorem", "abs_rpow_le_exp_log_mul", ["real"]], ["mod", "theorem", "abs_rpow_of_nonneg", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "has_sum_geometric_of_abs_lt_1", []], ["mod", "theorem", "is_o_pow_pow_of_abs_lt_left", []], ["mod", "theorem", "summable_geometric_of_abs_lt_1", []], ["mod", "theorem", "tendsto_pow_at_top_nhds_0_of_abs_lt_1", []], ["mod", "theorem", "tendsto_pow_const_mul_const_pow_of_abs_lt_one", []], ["mod", "theorem", "tsum_geometric_of_abs_lt_1", []]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "abs_abs", ["complex"]], ["mod", "theorem", "abs_abs_sub_le_abs_sub", ["complex"]], ["mod", "theorem", "abs_im_div_abs_le_one", ["complex"]], ["mod", "theorem", "abs_im_le_abs", ["complex"]], ["mod", "theorem", "abs_le_abs_re_add_abs_im", ["complex"]], ["mod", "theorem", "abs_of_real", ["complex"]], ["mod", "theorem", "abs_re_div_abs_le_one", ["complex"]], ["mod", "theorem", "abs_re_le_abs", ["complex"]], ["mod", "theorem", "int_cast_abs", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "is_cau_geo_series_const", []], ["mod", "theorem", "is_cau_of_decreasing_bounded", []], ["mod", "theorem", "is_cau_of_mono_bounded", []], ["mod", "theorem", "is_cau_series_of_abv_cau", []], ["mod", "theorem", "abs_cos_le_one", ["real"]], ["mod", "theorem", "abs_exp", ["real"]], ["mod", "theorem", "abs_sin_le_one", ["real"]], ["mod", "theorem", "cos_bound", ["real"]], ["mod", "theorem", "cos_pos_of_le_one", ["real"]], ["mod", "theorem", "exp_bound", ["real"]], ["mod", "theorem", "sin_bound", ["real"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "abs_div_le_abs", ["int"]], ["mod", "theorem", "abs_eq_nat_abs", ["int"]], ["mod", "theorem", "coe_nat_abs", ["int"]], ["mod", "theorem", "div_eq_zero_of_lt_abs", ["int"]], ["mod", "theorem", "eq_zero_iff_abs_lt_one", ["int"]], ["mod", "theorem", "mod_abs", ["int"]], ["mod", "theorem", "mod_lt", ["int"]], ["mod", "theorem", "nat_abs_abs", ["int"]], ["mod", "theorem", "sign_mul_abs", ["int"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["mod", "theorem", "cast_nat_abs", ["int"]]]}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": [["mod", "theorem", "abs_def", ["rat"]]]}, {"oldPath": "src/data/rat/sqrt.lean", "newPath": "src/data/rat/sqrt.lean", "changes": [["mod", "theorem", "sqrt_eq", ["rat"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "theorem", "is_cau_seq_iff_lift", ["real"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "coe_abs", ["hyperreal"]], ["mod", "theorem", "infinite_iff_abs_lt_abs", ["hyperreal"]], ["mod", "theorem", "infinite_iff_infinite_abs", ["hyperreal"]], ["mod", "theorem", "infinite_iff_infinite_pos_abs", ["hyperreal"]], ["mod", "theorem", "infinite_pos_abs_iff_infinite_abs", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "abs_eq", ["nnreal"]], ["mod", "theorem", "coe_nnabs", ["real"]], ["mod", "theorem", "coe_to_nnreal_le", ["real"]]]}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["mod", "theorem", "abs_le_sqrt", ["real"]], ["mod", "theorem", "sqrt_mul_self_eq_abs", ["real"]], ["mod", "theorem", "sqrt_sq_eq_abs", ["real"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["mod", "theorem", "abs_sub_le_of_subinterval", ["set"]], ["mod", "theorem", "abs_sub_left_of_mem_interval", ["set"]], ["mod", "theorem", "abs_sub_right_of_mem_interval", ["set"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "norm_integral_le_abs_integral_norm", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["mod", "theorem", "volume_interval", ["real"]]]}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": [["mod", "def", "liouville", []]]}, {"oldPath": "src/number_theory/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": [["mod", "theorem", "norm_sq_le_norm_sq_of_re_le_of_im_le", ["gaussian_int"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "theorem", "abs_def", ["filter", "germ"]]]}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["mod", "theorem", "max_eq_half_add_add_abs_sub", []], ["mod", "theorem", "min_eq_half_add_sub_abs_sub", []]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/weierstrass.lean", "newPath": "src/topology/continuous_function/weierstrass.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["mod", "theorem", "dist_eq", ["int"]], ["mod", "theorem", "dist_eq", ["rat"]], ["mod", "theorem", "uniform_continuous_inv", ["real"]]]}, {"oldPath": "src/topology/metric_space/algebra.lean", "newPath": "src/topology/metric_space/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "abs_dist", []], ["mod", "theorem", "abs_dist_sub_le", []], ["mod", "theorem", "dist_eq", ["nnreal"]], ["mod", "theorem", "dist_0_eq_abs", ["real"]], ["mod", "theorem", "dist_eq", ["real"]]]}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1633091243, "sha": "c33407ae", "message": "feat(algebraic_geometry/*): Proved Spec ⋙ Γ ≅ 𝟭 (#9416)\n- Specialied `algebraic_geometry.structure_sheaf.basic_open_iso` into global sections, proving that the map `structure_sheaf.to_open R ⊤` is an isomorphism in `algebraic_geometry.is_iso_to_global`.\n- Proved that the map `R ⟶ Γ(Spec R)` is natural, and presents the fact above as an natural isomorphism `Spec.right_op ⋙ Γ ≅ 𝟭 _` in `algebraic_geometry.Spec_Γ_identity`.", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["add", "def", "Spec_Γ_identity", ["algebraic_geometry"]], ["add", "theorem", "Spec_Γ_naturality", ["algebraic_geometry"]], ["add", "def", "to_Spec_Γ", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "def", "global_sections_iso", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "global_sections_iso_hom", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_global_factors", ["algebraic_geometry", "structure_sheaf"]]]}]}, {"timestamp": 1633084733, "sha": "38395ed9", "message": "chore(bors): bors should block on label awaiting-CI (#9478)", "changes": [{"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}, {"oldPath": "docs/contribute/bors.md", "newPath": "docs/contribute/bors.md", "changes": []}]}, {"timestamp": 1633084732, "sha": "5936f530", "message": "feat(topology/maps): for a continuous open map, preimage and interior commute (#9471)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "interior_preimage_subset_preimage_interior", ["is_open_map"]], ["add", "theorem", "preimage_interior_eq_interior_preimage", ["is_open_map"]]]}]}, {"timestamp": 1633084731, "sha": "265345c2", "message": "feat(linear_algebra/{bilinear,quadratic}_form): remove non-degeneracy requirement from `exists_orthogonal_basis` and Sylvester's law of inertia (#9465)\nThis removes the `nondegenerate` hypothesis from `bilin_form.exists_orthogonal_basis`, and removes the `∀ i, B (v i) (v i) ≠ 0` statement from the goal. This property can be recovered in the case of a nondegenerate form with `is_Ortho.not_is_ortho_basis_self_of_nondegenerate`.\nThis also swaps the order of the binders in `is_Ortho` to make it expressible with `pairwise`.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "nondegenerate_iff_not_is_ortho_basis_self", ["bilin_form", "is_Ortho"]], ["add", "theorem", "not_is_ortho_basis_self_of_nondegenerate", ["bilin_form", "is_Ortho"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "exists_bilin_form_self_ne_zero", ["bilin_form"]], ["del", "theorem", "exists_bilin_form_self_neq_zero", ["bilin_form"]], ["del", "theorem", "exists_orthogonal_basis'", ["bilin_form"]], ["mod", "theorem", "exists_orthogonal_basis", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_zero", ["bilin_form"]], ["add", "theorem", "basis_repr_eq_of_is_Ortho", ["quadratic_form"]], ["add", "theorem", "equivalent_one_zero_neg_one_weighted_sum_squared", ["quadratic_form"]], ["add", "theorem", "equivalent_weighted_sum_squares", ["quadratic_form"]], ["del", "theorem", "equivalent_weighted_sum_squares_of_nondegenerate'", ["quadratic_form"]], ["add", "theorem", "equivalent_weighted_sum_squares_units_of_nondegenerate'", ["quadratic_form"]], ["add", "theorem", "exists_quadratic_form_ne_zero", ["quadratic_form"]], ["del", "theorem", "exists_quadratic_form_neq_zero", ["quadratic_form"]], ["add", "theorem", "coe_to_linear_equiv", ["quadratic_form", "isometry"]], ["add", "theorem", "to_linear_equiv_eq_coe", ["quadratic_form", "isometry"]], ["del", "theorem", "isometry_of_is_Ortho_apply", ["quadratic_form"]]]}]}, {"timestamp": 1633084729, "sha": "74457cb0", "message": "feat(data/polynomial,field_theory): `(minpoly A x).map f ≠ 1` (#9451)\nWe use this result to generalize `minpoly.not_is_unit` from integral domains to nontrivial `comm_ring`s.", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "eq_one_of_map_eq_one", ["polynomial", "monic"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "map_ne_one", ["minpoly"]], ["add", "theorem", "ne_one", ["minpoly"]], ["mod", "theorem", "not_is_unit", ["minpoly"]]]}]}, {"timestamp": 1633078556, "sha": "f7d7a91c", "message": "feat(algebraic_geometry/ringed_space): Define basic opens for ringed spaces. (#9358)\nDefines the category of ringed spaces, as an alias for `SheafedSpace CommRing`. We provide basic lemmas about sections being units in the stalk and define basic opens in this context.", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "def", "to_RingedSpace", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/ringed_space.lean", "changes": [["add", "def", "basic_open", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "is_unit_of_is_unit_germ", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "is_unit_res_basic_open", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "is_unit_res_of_is_unit_germ", ["algebraic_geometry", "RingedSpace"]], ["add", "theorem", "mem_basic_open", ["algebraic_geometry", "RingedSpace"]], ["add", "def", "RingedSpace", ["algebraic_geometry"]]]}]}, {"timestamp": 1633078555, "sha": "9235c8a3", "message": "feat(data/polynomial/basic): polynomial.update (#9020)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "coeff_update", ["polynomial"]], ["add", "theorem", "coeff_update_apply", ["polynomial"]], ["add", "theorem", "coeff_update_ne", ["polynomial"]], ["add", "theorem", "coeff_update_same", ["polynomial"]], ["add", "theorem", "support_update", ["polynomial"]], ["add", "theorem", "support_update_ne_zero", ["polynomial"]], ["add", "theorem", "support_update_zero", ["polynomial"]], ["add", "def", "update", ["polynomial"]], ["add", "theorem", "update_zero_eq_erase", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "update_eq_add_sub_coeff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_update_le", ["polynomial"]]]}]}, {"timestamp": 1633068313, "sha": "e0f7d0e8", "message": "feat(group_theory/complement): is_complement_iff_card_mul_and_disjoint (#9476)\nAdds the converse to an existing lemma `is_complement_of_disjoint` (renamed `is_complement_of_card_mul_and_disjoint`).", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "card_mul", ["subgroup", "is_complement"]], ["add", "theorem", "disjoint", ["subgroup", "is_complement"]], ["add", "theorem", "is_complement_iff_card_mul_and_disjoint", ["subgroup"]], ["add", "theorem", "is_complement_of_card_mul_and_disjoint", ["subgroup"]], ["del", "theorem", "is_complement_of_disjoint", ["subgroup"]]]}]}, {"timestamp": 1633068312, "sha": "57fa903f", "message": "refactor(group_theory/complement): Split `complement.lean` (#9474)\nSplits off Schur-Zassenhaus from `complement.lean`. In the new file, we can replace `fintype.card (quotient_group.quotient H)` with `H.index`.\nAdvantages: We can avoid importing `cardinal.lean` in `complement.lean`. Later (once full SZ is proved), we can avoid importing `sylow.lean` in `complement.lean`.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["del", "theorem", "diff_inv", ["subgroup"]], ["del", "theorem", "diff_mul_diff", ["subgroup"]], ["del", "theorem", "diff_self", ["subgroup"]], ["del", "theorem", "exists_left_complement_of_coprime", ["subgroup"]], ["del", "theorem", "exists_right_complement_of_coprime", ["subgroup"]], ["del", "theorem", "exists_smul_eq", ["subgroup"]], ["del", "theorem", "is_complement_stabilizer_of_coprime", ["subgroup"]], ["del", "def", "quotient_diff", ["subgroup"]], ["del", "theorem", "smul_diff", ["subgroup"]], ["del", "theorem", "smul_diff_smul", ["subgroup"]], ["del", "theorem", "smul_left_injective", ["subgroup"]], ["del", "theorem", "smul_symm_apply_eq_mul_symm_apply_inv_smul", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/group_theory/schur_zassenhaus.lean", "changes": [["add", "theorem", "diff_inv", ["subgroup"]], ["add", "theorem", "diff_mul_diff", ["subgroup"]], ["add", "theorem", "diff_self", ["subgroup"]], ["add", "theorem", "exists_left_complement_of_coprime", ["subgroup"]], ["add", "theorem", "exists_right_complement_of_coprime", ["subgroup"]], ["add", "theorem", "exists_smul_eq", ["subgroup"]], ["add", "theorem", "is_complement_stabilizer_of_coprime", ["subgroup"]], ["add", "def", "quotient_diff", ["subgroup"]], ["add", "theorem", "smul_diff", ["subgroup"]], ["add", "theorem", "smul_diff_smul", ["subgroup"]], ["add", "theorem", "smul_left_injective", ["subgroup"]], ["add", "theorem", "smul_symm_apply_eq_mul_symm_apply_inv_smul", ["subgroup"]]]}]}, {"timestamp": 1633068311, "sha": "76ddb2bb", "message": "feat(analysis/normed_space/lattice_ordered_group): introduce normed lattice ordered groups (#9274)\nMotivated by Banach Lattices, this PR introduces normed lattice ordered groups and proves that they are topological lattices. To support this `has_continuous_inf` and `has_continuous_sup` mixin classes are also defined.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "theorem", "abs_eq_max_neg", []], ["add", "theorem", "abs_eq_sup_neg", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/lattice_ordered_group.lean", "changes": [["add", "theorem", "dual_solid", []], ["add", "theorem", "norm_abs_eq_norm", []], ["add", "theorem", "solid", []]]}, {"oldPath": null, "newPath": "src/topology/order/lattice.lean", "changes": [["add", "theorem", "inf", ["continuous"]], ["add", "theorem", "sup", ["continuous"]], ["add", "theorem", "continuous_inf", []], ["add", "theorem", "continuous_sup", []]]}]}, {"timestamp": 1633058737, "sha": "812d6bbd", "message": "chore(scripts): update nolints.txt (#9475)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1633058736, "sha": "125dac81", "message": "feat(group_theory/sylow): The number of Sylow subgroups equals the index of the normalizer (#9455)\nThis PR adds further consequences of Sylow's theorems (still for infinite groups, more will be PRed later).", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "card_sylow_dvd_index", []], ["add", "theorem", "card_sylow_eq_card_quotient_normalizer", []], ["add", "theorem", "card_sylow_eq_index_normalizer", []], ["add", "theorem", "orbit_eq_top", ["sylow"]], ["add", "theorem", "stabilizer_eq_normalizer", ["sylow"]]]}]}, {"timestamp": 1633058735, "sha": "b7864434", "message": "chore(algebra/category/*): Added `of_hom` to all of the algebraic categories. (#9454)\nAs suggested in the comments of #9416.", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["add", "def", "of_hom", ["Algebra"]]]}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["add", "def", "of_hom", ["CommRing"]], ["add", "def", "of_hom", ["CommSemiRing"]], ["add", "def", "of_hom", ["Ring"]], ["add", "def", "of_hom", ["SemiRing"]]]}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["add", "def", "of_hom", ["CommGroup"]], ["add", "def", "of_hom", ["Group"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "def", "of_hom", ["Module"]]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["add", "def", "of_hom", ["Mon"]]]}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": [["add", "def", "of_hom", ["Magma"]], ["add", "def", "of_hom", ["Semigroup"]]]}]}, {"timestamp": 1633058734, "sha": "babca8e3", "message": "refactor(algebra/group_with_zero): rename lemmas to use ₀ instead of ' (#9424)\nWe currently have lots of lemmas for `group_with_zero` that already have a corresponding lemma for `group`. We've dealt with name collisions so far just by adding a prime.\nThis PR renames these lemmas to use a `₀` suffix instead of a `'`.\nIn part this is out of desire to reduce our overuse of primes in mathlib names (putting the burden on users to know names, rather than relying on naming conventions).\nBut it may also help with a problem Daniel Selsam ran into at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/mathport.20depending.20on.20mathlib. (Briefly, mathport is also adding primes to names when it encounters name collisions, and these particular primes were causing problems. There are are other potential fixes in the works, but everything helps.)", "changes": [{"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "src/algebra/algebra/bilinear.lean", "newPath": "src/algebra/algebra/bilinear.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "neg_div'", []], ["mod", "theorem", "map_inv", ["ring_hom"]]]}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["del", "theorem", "is_conj_iff'", []], ["add", "theorem", "is_conj_iff₀", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "inv_inv'", ["commute"]], ["add", "theorem", "inv_inv₀", ["commute"]], ["del", "theorem", "inv_left'", ["commute"]], ["del", "theorem", "inv_left_iff'", ["commute"]], ["add", "theorem", "inv_left_iff₀", ["commute"]], ["add", "theorem", "inv_left₀", ["commute"]], ["del", "theorem", "inv_right'", ["commute"]], ["del", "theorem", "inv_right_iff'", ["commute"]], ["add", "theorem", "inv_right_iff₀", ["commute"]], ["add", "theorem", "inv_right₀", ["commute"]], ["del", "theorem", "eq_inv_mul_iff_mul_eq'", []], ["add", "theorem", "eq_inv_mul_iff_mul_eq₀", []], ["del", "theorem", "eq_mul_inv_iff_mul_eq'", []], ["add", "theorem", "eq_mul_inv_iff_mul_eq₀", []], ["del", "theorem", "inv_eq_one'", []], ["add", "theorem", "inv_eq_one₀", []], ["del", "theorem", "inv_inj'", []], ["del", "theorem", "inv_injective'", []], ["add", "theorem", "inv_injective₀", []], ["add", "theorem", "inv_inj₀", []], ["del", "theorem", "inv_inv'", []], ["del", "theorem", "inv_involutive'", []], ["add", "theorem", "inv_involutive₀", []], ["add", "theorem", "inv_inv₀", []], ["del", "theorem", "inv_mul_cancel_left'", []], ["add", "theorem", "inv_mul_cancel_left₀", []], ["del", "theorem", "inv_mul_cancel_right'", []], ["add", "theorem", "inv_mul_cancel_right₀", []], ["del", "theorem", "inv_mul_eq_iff_eq_mul'", []], ["add", "theorem", "inv_mul_eq_iff_eq_mul₀", []], ["del", "theorem", "inv_mul_eq_one'", []], ["add", "theorem", "inv_mul_eq_one₀", []], ["del", "theorem", "map_inv'", ["monoid_with_zero_hom"]], ["add", "theorem", "map_inv", ["monoid_with_zero_hom"]], ["del", "theorem", "mul_eq_one_iff_eq_inv'", []], ["add", "theorem", "mul_eq_one_iff_eq_inv₀", []], ["del", "theorem", "mul_eq_one_iff_inv_eq'", []], ["add", "theorem", "mul_eq_one_iff_inv_eq₀", []], ["del", "theorem", "mul_inv'", []], ["del", "theorem", "mul_inv_cancel_left'", []], ["add", "theorem", "mul_inv_cancel_left₀", []], ["del", "theorem", "mul_inv_cancel_right'", []], ["add", "theorem", "mul_inv_cancel_right₀", []], ["del", "theorem", "mul_inv_eq_iff_eq_mul'", []], ["add", "theorem", "mul_inv_eq_iff_eq_mul₀", []], ["del", "theorem", "mul_inv_eq_one'", []], ["add", "theorem", "mul_inv_eq_one₀", []], ["del", "theorem", "mul_inv_rev'", []], ["add", "theorem", "mul_inv_rev₀", []], ["add", "theorem", "mul_inv₀", []], ["mod", "theorem", "mul_left_inj'", []], ["mod", "theorem", "mul_right_inj'", []], ["del", "theorem", "inv_right'", ["semiconj_by"]], ["del", "theorem", "inv_right_iff'", ["semiconj_by"]], ["add", "theorem", "inv_right_iff₀", ["semiconj_by"]], ["add", "theorem", "inv_right₀", ["semiconj_by"]], ["del", "theorem", "inv_symm_left'", ["semiconj_by"]], ["del", "theorem", "inv_symm_left_iff'", ["semiconj_by"]], ["add", "theorem", "inv_symm_left_iff₀", ["semiconj_by"]], ["add", "theorem", "inv_symm_left₀", ["semiconj_by"]]]}, {"oldPath": "src/algebra/group_with_zero/defs.lean", "newPath": "src/algebra/group_with_zero/defs.lean", "changes": [["del", "theorem", "mul_left_cancel'", []], ["add", "theorem", "mul_left_cancel₀", []], ["del", "theorem", "mul_left_injective'", []], ["add", "theorem", "mul_left_injective₀", []], ["del", "theorem", "mul_right_cancel'", []], ["add", "theorem", "mul_right_cancel₀", []], ["del", "theorem", "mul_right_injective'", []], ["add", "theorem", "mul_right_injective₀", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "inv_pow'", []], ["add", "theorem", "inv_pow₀", []], ["del", "theorem", "pow_inv_comm'", []], ["add", "theorem", "pow_inv_comm₀", []], ["del", "theorem", "pow_sub'", []], ["add", "theorem", "pow_sub₀", []], ["del", "theorem", "coe_gpow'", ["units"]], ["add", "theorem", "coe_gpow₀", ["units"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["del", "theorem", "single_smul''", ["pi"]], ["mod", "theorem", "single_smul'", ["pi"]], ["add", "theorem", "single_smul₀", ["pi"]]]}, {"oldPath": "src/algebra/module/pointwise_pi.lean", "newPath": "src/algebra/module/pointwise_pi.lean", "changes": [["del", "theorem", "smul_pi'", []], ["add", "theorem", "smul_pi₀", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/order/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["del", "def", "mul_left'", ["order_iso"]], ["add", "def", "mul_left₀", ["order_iso"]], ["del", "def", "mul_right'", ["order_iso"]], ["add", "def", "mul_right₀", ["order_iso"]]]}, {"oldPath": "src/algebra/order/smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}, {"oldPath": "src/algebra/order/with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": [["del", "theorem", "div_le_div'", []], ["add", "theorem", "div_le_div₀", []], ["del", "theorem", "inv_le_inv''", []], ["add", "theorem", "inv_le_inv₀", []], ["del", "theorem", "inv_lt_inv''", []], ["add", "theorem", "inv_lt_inv₀", []], ["del", "theorem", "mul_inv_lt_of_lt_mul'", []], ["add", "theorem", "mul_inv_lt_of_lt_mul₀", []], ["del", "theorem", "mul_lt_mul''''", []], ["add", "theorem", "mul_lt_mul₀", []], ["del", "theorem", "mul_lt_right'", []], ["add", "theorem", "mul_lt_right₀", []], ["del", "theorem", "pow_lt_pow'", []], ["add", "theorem", "pow_lt_pow₀", []], ["del", "theorem", "zero_lt_one''", []], ["add", "theorem", "zero_lt_one₀", []]]}, {"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["del", "theorem", "const_inv_smul'", ["function", "antiperiodic"]], ["add", "theorem", "const_inv_smul₀", ["function", "antiperiodic"]], ["del", "theorem", "const_smul'", ["function", "antiperiodic"]], ["add", "theorem", "const_smul₀", ["function", "antiperiodic"]], ["del", "theorem", "const_inv_smul'", ["function", "periodic"]], ["add", "theorem", "const_inv_smul₀", ["function", "periodic"]], ["del", "theorem", "const_smul'", ["function", "periodic"]], ["add", "theorem", "const_smul₀", ["function", "periodic"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["del", "theorem", "mem_inv_smul_set_iff'", []], ["add", "theorem", "mem_inv_smul_set_iff₀", []], ["del", "theorem", "mem_smul_set_iff_inv_smul_mem'", []], ["add", "theorem", "mem_smul_set_iff_inv_smul_mem₀", []], ["del", "theorem", "preimage_smul'", []], ["del", "theorem", "preimage_smul_inv'", []], ["add", "theorem", "preimage_smul_inv₀", []], ["add", "theorem", "preimage_smul₀", []], ["del", "theorem", "smul_set_inter'", ["set"]], ["add", "theorem", "smul_set_inter₀", ["set"]], ["del", "theorem", "set_smul_subset_iff'", []], ["add", "theorem", "set_smul_subset_iff₀", []], ["del", "theorem", "set_smul_subset_set_smul_iff'", []], ["add", "theorem", "set_smul_subset_set_smul_iff₀", []], ["del", "theorem", "smul_mem_smul_set_iff'", []], ["add", "theorem", "smul_mem_smul_set_iff₀", []], ["del", "theorem", "subset_set_smul_iff'", []], ["add", "theorem", "subset_set_smul_iff₀", []]]}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["del", "theorem", "mul_support_inv'", ["function"]], ["add", "theorem", "mul_support_inv₀", ["function"]]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/convex/jensen.lean", "newPath": "src/analysis/convex/jensen.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/factorial/basic.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "inv_epsilon_eq_omega", ["hyperreal"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["mod", "theorem", "sqrt_inv", ["nnreal"]]]}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["del", "theorem", "eq_inv_smul_iff'", []], ["add", "theorem", "eq_inv_smul_iff₀", []], ["del", "theorem", "inv_smul_eq_iff'", []], ["add", "theorem", "inv_smul_eq_iff₀", []], ["del", "theorem", "inv_smul_smul'", []], ["add", "theorem", "inv_smul_smul₀", []], ["del", "theorem", "smul_inv_smul'", []], ["add", "theorem", "smul_inv_smul₀", []]]}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["del", "theorem", "le_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "le_pointwise_smul_iff₀", ["add_subgroup"]], ["del", "theorem", "mem_inv_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "mem_inv_pointwise_smul_iff₀", ["add_subgroup"]], ["del", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["add_subgroup"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem₀", ["add_subgroup"]], ["del", "theorem", "pointwise_smul_le_iff'", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_le_iff₀", ["add_subgroup"]], ["del", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff₀", ["add_subgroup"]], ["del", "theorem", "smul_mem_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul_iff₀", ["add_subgroup"]], ["del", "theorem", "le_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "le_pointwise_smul_iff₀", ["subgroup"]], ["del", "theorem", "mem_inv_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "mem_inv_pointwise_smul_iff₀", ["subgroup"]], ["del", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["subgroup"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem₀", ["subgroup"]], ["del", "theorem", "pointwise_smul_le_iff'", ["subgroup"]], ["add", "theorem", "pointwise_smul_le_iff₀", ["subgroup"]], ["del", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff₀", ["subgroup"]], ["del", "theorem", "smul_mem_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul_iff₀", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": [["del", "theorem", "div_mem_center'", ["set"]], ["add", "theorem", "div_mem_center₀", ["set"]], ["del", "theorem", "inv_mem_center'", ["set"]], ["add", "theorem", "inv_mem_center₀", ["set"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["del", "theorem", "le_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "le_pointwise_smul_iff₀", ["add_submonoid"]], ["del", "theorem", "mem_inv_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "mem_inv_pointwise_smul_iff₀", ["add_submonoid"]], ["del", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["add_submonoid"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem₀", ["add_submonoid"]], ["del", "theorem", "pointwise_smul_le_iff'", ["add_submonoid"]], ["add", "theorem", "pointwise_smul_le_iff₀", ["add_submonoid"]], ["del", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff₀", ["add_submonoid"]], ["del", "theorem", "smul_mem_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul_iff₀", ["add_submonoid"]], ["del", "theorem", "le_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "le_pointwise_smul_iff₀", ["submonoid"]], ["del", "theorem", "mem_inv_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "mem_inv_pointwise_smul_iff₀", ["submonoid"]], ["del", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["submonoid"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem₀", ["submonoid"]], ["del", "theorem", "pointwise_smul_le_iff'", ["submonoid"]], ["add", "theorem", "pointwise_smul_le_iff₀", ["submonoid"]], ["del", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff₀", ["submonoid"]], ["del", "theorem", "smul_mem_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul_iff₀", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": [["del", "theorem", "ae_measurable_const_smul_iff'", []], ["add", "theorem", "ae_measurable_const_smul_iff₀", []], ["del", "theorem", "ae_measurable_inv_iff'", []], ["add", "theorem", "ae_measurable_inv_iff₀", []], ["del", "theorem", "measurable_const_smul_iff'", []], ["add", "theorem", "measurable_const_smul_iff₀", []], ["del", "theorem", "measurable_inv_iff'", []], ["add", "theorem", "measurable_inv_iff₀", []]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/l_series.lean", "newPath": "src/number_theory/l_series.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integers.lean", "newPath": "src/ring_theory/valuation/integers.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integral.lean", "newPath": "src/ring_theory/valuation/integral.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["del", "theorem", "inv'", ["continuous"]], ["add", "theorem", "inv₀", ["continuous"]], ["del", "theorem", "inv'", ["continuous_at"]], ["add", "theorem", "inv₀", ["continuous_at"]], ["del", "theorem", "inv'", ["continuous_on"]], ["add", "theorem", "inv₀", ["continuous_on"]], ["del", "theorem", "continuous_on_inv'", []], ["add", "theorem", "continuous_on_inv₀", []], ["del", "theorem", "inv'", ["continuous_within_at"]], ["add", "theorem", "inv₀", ["continuous_within_at"]], ["del", "theorem", "inv'", ["filter", "tendsto"]], ["add", "theorem", "inv₀", ["filter", "tendsto"]], ["del", "theorem", "coe_mul_left'", ["homeomorph"]], ["add", "theorem", "coe_mul_left₀", ["homeomorph"]], ["del", "theorem", "coe_mul_right'", ["homeomorph"]], ["add", "theorem", "coe_mul_right₀", ["homeomorph"]], ["del", "theorem", "mul_left'_symm_apply", ["homeomorph"]], ["add", "theorem", "mul_left₀_symm_apply", ["homeomorph"]], ["del", "theorem", "mul_right'_symm_apply", ["homeomorph"]], ["add", "theorem", "mul_right₀_symm_apply", ["homeomorph"]], ["del", "theorem", "tendsto_inv'", []], ["add", "theorem", "tendsto_inv₀", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["del", "theorem", "continuous_at_const_smul_iff'", []], ["add", "theorem", "continuous_at_const_smul_iff₀", []], ["del", "theorem", "continuous_const_smul_iff'", []], ["add", "theorem", "continuous_const_smul_iff₀", []], ["del", "theorem", "continuous_on_const_smul_iff'", []], ["add", "theorem", "continuous_on_const_smul_iff₀", []], ["del", "theorem", "continuous_within_at_const_smul_iff'", []], ["add", "theorem", "continuous_within_at_const_smul_iff₀", []], ["del", "theorem", "is_closed_map_smul'", []], ["add", "theorem", "is_closed_map_smul₀", []], ["del", "theorem", "is_open_map_smul'", []], ["add", "theorem", "is_open_map_smul₀", []], ["del", "theorem", "tendsto_const_smul_iff'", []], ["add", "theorem", "tendsto_const_smul_iff₀", []]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1633050843, "sha": "540fb943", "message": "feat(data/fintype/basic): bijection preserves cardinality (#9473)\nWe don't seem to have this lemma yet, so I've added it.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_of_bijective", ["fintype"]]]}]}, {"timestamp": 1633050842, "sha": "456db24a", "message": "feat(topology/algebra/module): has_continuous_smul (#9468)\nin terms of nice neighborhoods of zero", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "of_nhds_zero", ["has_continuous_smul"]]]}]}, {"timestamp": 1633050840, "sha": "2b23d2eb", "message": "chore(topology/algebra): remove dead code (#9467)\nThis code wasn't used and its historically intended use will soon be redone much better. The second file is only a dead import and a misleading comment (referring to the dead code of the *other* file).", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["del", "theorem", "add_Z", ["add_group_with_zero_nhd"]], ["del", "theorem", "exists_Z_half", ["add_group_with_zero_nhd"]], ["del", "theorem", "neg_Z", ["add_group_with_zero_nhd"]], ["del", "theorem", "nhds_eq", ["add_group_with_zero_nhd"]], ["del", "theorem", "nhds_zero_eq_Z", ["add_group_with_zero_nhd"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1633050839, "sha": "5b025712", "message": "chore(measure_theory/decomposition/lebesgue): make measurable_space implicit (#9463)\nWhenever the `measurable_space` can be inferred from a `measure` argument, it should be implicit. This PR applies that rule to the Lebesgue decomposition file.", "changes": [{"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["mod", "theorem", "eq_rn_deriv", ["measure_theory", "measure"]], ["mod", "theorem", "eq_singular_part", ["measure_theory", "measure"]], ["mod", "theorem", "have_lebesgue_decomposition_add", ["measure_theory", "measure"]], ["mod", "theorem", "have_lebesgue_decomposition_of_finite_measure", ["measure_theory", "measure"]], ["mod", "theorem", "have_lebesgue_decomposition_spec", ["measure_theory", "measure"]], ["mod", "theorem", "eq_rn_deriv", ["measure_theory", "signed_measure"]], ["mod", "theorem", "eq_singular_part", ["measure_theory", "signed_measure"]], ["mod", "theorem", "have_lebesgue_decomposition_mk", ["measure_theory", "signed_measure"]], ["mod", "theorem", "mutually_singular_singular_part", ["measure_theory", "signed_measure"]], ["mod", "theorem", "not_have_lebesgue_decomposition_iff", ["measure_theory", "signed_measure"]], ["mod", "theorem", "rn_deriv_add", ["measure_theory", "signed_measure"]], ["mod", "theorem", "rn_deriv_neg", ["measure_theory", "signed_measure"]], ["mod", "theorem", "rn_deriv_smul", ["measure_theory", "signed_measure"]], ["mod", "theorem", "rn_deriv_sub", ["measure_theory", "signed_measure"]], ["add", "def", "singular_part(s", ["measure_theory", "signed_measure"]], ["del", "def", "singular_part", ["measure_theory", "signed_measure"]], ["mod", "theorem", "singular_part_mutually_singular", ["measure_theory", "signed_measure"]], ["mod", "theorem", "singular_part_smul", ["measure_theory", "signed_measure"]], ["mod", "theorem", "singular_part_total_variation", ["measure_theory", "signed_measure"]]]}]}, {"timestamp": 1633041543, "sha": "a24b4965", "message": "feat(analysis/normed_space/add_torsor_bases): add lemma `exists_subset_affine_independent_span_eq_top_of_open` (#9418)\nAlso some supporting lemmas about affine span, affine independence.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/add_torsor_bases.lean", "changes": [["add", "theorem", "exists_subset_affine_independent_span_eq_top_of_open", []]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "sdiff_singleton_not_mem_eq_self", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "affine_span_eq_affine_span_line_map_units", []], ["add", "theorem", "weighted_vsub_of_point_eq_of_weights_eq", ["finset"]], ["mod", "theorem", "weighted_vsub_of_point_insert", ["finset"]], ["add", "theorem", "mem_affine_span_iff_eq_weighted_vsub_of_point_vadd", []]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "units_line_map", ["affine_independent"]]]}]}, {"timestamp": 1633041540, "sha": "931cd6d7", "message": "feat(data/set/equitable): Equitable functions (#8509)\nEquitable functions are functions whose maximum is at most one more than their minimum. Equivalently, in an additive successor order (`a < b ↔ a +1 ≤ b`), this means that the function takes only values `a` and `a + 1` for some `a`.\nFrom Szemerédi's regularity lemma. Co-authored by @b-mehta", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_and_le_add_one_iff", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/set/equitable.lean", "changes": [["add", "theorem", "equitable_on_iff", ["finset"]], ["add", "theorem", "equitable_on_iff_le_le_add_one", ["finset"]], ["add", "def", "equitable_on", ["set"]], ["add", "theorem", "equitable_on_empty", ["set"]], ["add", "theorem", "equitable_on_iff_exists_eq_eq_add_one", ["set"]], ["add", "theorem", "equitable_on_iff_exists_image_subset_Icc", ["set"]], ["add", "theorem", "equitable_on_iff_exists_le_le_add_one", ["set"]]]}]}, {"timestamp": 1633033520, "sha": "a52a54b6", "message": "chore(analysis/convex/basic): instance cleanup (#9466)\nSome lemmas were about `f : whatever → 𝕜`. They are now about `f : whatever → β` + a scalar instance between `𝕜` and `β`.\nSome `add_comm_monoid` assumptions are actually promotable to `add_comm_group` directly thanks to [`module.add_comm_monoid_to_add_comm_group`](https://leanprover-community.github.io/mathlib_docs/algebra/module/basic.html#module.add_comm_monoid_to_add_comm_group). [Related Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Convexity.20refactor/near/255268131).", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "add", ["convex"]], ["mod", "theorem", "affine_image", ["convex"]], ["mod", "theorem", "affine_preimage", ["convex"]], ["mod", "theorem", "combo_affine_apply", ["convex"]], ["mod", "theorem", "combo_self", ["convex"]], ["mod", "theorem", "linear_image", ["convex"]], ["mod", "def", "convex", []], ["mod", "theorem", "convex_Icc", []], ["mod", "theorem", "convex_Ici", []], ["mod", "theorem", "convex_Ico", []], ["mod", "theorem", "convex_Iic", []], ["mod", "theorem", "convex_Iio", []], ["mod", "theorem", "convex_Ioc", []], ["mod", "theorem", "convex_Ioi", []], ["mod", "theorem", "convex_Ioo", []], ["mod", "theorem", "convex_halfspace_ge", []], ["mod", "theorem", "convex_halfspace_gt", []], ["mod", "theorem", "convex_halfspace_le", []], ["mod", "theorem", "convex_halfspace_lt", []], ["mod", "theorem", "convex_hyperplane", []], ["mod", "theorem", "convex_interval", []], ["mod", "theorem", "convex_segment", []], ["mod", "theorem", "convex_std_simplex", []], ["mod", "theorem", "convex_Union", ["directed"]], ["mod", "theorem", "convex_sUnion", ["directed_on"]], ["mod", "theorem", "ite_eq_mem_std_simplex", []], ["mod", "def", "open_segment", []], ["mod", "def", "segment", []], ["mod", "theorem", "convex", ["set", "ord_connected"]], ["mod", "theorem", "convex_of_chain", ["set", "ord_connected"]], ["mod", "def", "std_simplex", []]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["mod", "theorem", "mem_Icc_of_mem_std_simplex", []]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["mod", "theorem", "bounded_std_simplex", []], ["mod", "theorem", "compact_std_simplex", []], ["mod", "theorem", "is_closed_std_simplex", []]]}]}, {"timestamp": 1633033518, "sha": "97036e7c", "message": "feat(measure_theory/constructions/pi): volume on `α × α` as a map of volume on `fin 2 → α` (#9432)", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "def", "fin_two_arrow_equiv", []], ["add", "def", "fin_two_arrow_iso", ["order_iso"]], ["add", "def", "pi_fin_two_iso", ["order_iso"]], ["add", "def", "pi_fin_two_equiv", []], ["add", "def", "prod_equiv_pi_fin_two", []]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "exists_fin_one", ["fin"]], ["add", "theorem", "exists_fin_two", ["fin"]], ["add", "theorem", "forall_fin_one", ["fin"]], ["add", "theorem", "forall_fin_two", ["fin"]], ["add", "theorem", "insert_nth_apply_above", ["fin"]], ["add", "theorem", "insert_nth_apply_below", ["fin"]], ["add", "theorem", "zero_lt_one", ["fin"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "vec_cons_const", ["matrix"]], ["add", "theorem", "vec_single_eq_const", ["matrix"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["add", "theorem", "integral_fin_two_arrow'", ["measure_theory"]], ["add", "theorem", "integral_fin_two_arrow", ["measure_theory"]], ["add", "theorem", "integral_fin_two_arrow_pi'", ["measure_theory"]], ["add", "theorem", "integral_fin_two_arrow_pi", ["measure_theory"]], ["add", "theorem", "prod_eq_map_fin_two_arrow", ["measure_theory", "measure"]], ["add", "theorem", "prod_eq_map_fin_two_arrow_same", ["measure_theory", "measure"]], ["add", "theorem", "{u}", ["measure_theory", "measure"]], ["add", "theorem", "set_integral_fin_two_arrow'", ["measure_theory"]], ["add", "theorem", "set_integral_fin_two_arrow", ["measure_theory"]], ["add", "theorem", "set_integral_fin_two_arrow_pi'", ["measure_theory"]], ["add", "theorem", "set_integral_fin_two_arrow_pi", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "def", "fin_two_arrow", ["measurable_equiv"]], ["add", "def", "pi_fin_two", ["measurable_equiv"]]]}]}, {"timestamp": 1633033517, "sha": "64bcb389", "message": "feat(order/succ_pred): define successor orders (#9397)\nA successor order is an order in which every (non maximal) element has a least greater element. A predecessor order is an order in which every (non minimal) element has a greatest smaller element. Typical examples are `ℕ`, `ℕ+`, `ℤ`, `fin n`, `ordinal`. Anytime you want to turn `a < b + 1` into `a ≤ b` or `a < b` into `a + 1 ≤ b`, you want a `succ_order`.", "changes": [{"oldPath": null, "newPath": "src/order/succ_pred.lean", "changes": [["add", "theorem", "le_pred_iff", ["pred_order"]], ["add", "theorem", "le_pred_iff_eq_bot", ["pred_order"]], ["add", "theorem", "le_pred_iff_lt_or_eq", ["pred_order"]], ["add", "theorem", "pred_bot", ["pred_order"]], ["add", "theorem", "pred_eq_pred_iff", ["pred_order"]], ["add", "theorem", "pred_eq_supr", ["pred_order"]], ["add", "theorem", "pred_injective", ["pred_order"]], ["add", "theorem", "pred_le_le_iff", ["pred_order"]], ["add", "theorem", "pred_le_pred", ["pred_order"]], ["add", "theorem", "pred_le_pred_iff", ["pred_order"]], ["add", "theorem", "pred_lt", ["pred_order"]], ["add", "theorem", "pred_lt_iff", ["pred_order"]], ["add", "theorem", "pred_lt_iff_lt_or_eq", ["pred_order"]], ["add", "theorem", "pred_lt_iff_ne_bot", ["pred_order"]], ["add", "theorem", "pred_lt_of_not_minimal", ["pred_order"]], ["add", "theorem", "pred_lt_pred_iff", ["pred_order"]], ["add", "theorem", "pred_lt_top", ["pred_order"]], ["add", "theorem", "pred_mono", ["pred_order"]], ["add", "theorem", "pred_ne_pred_iff", ["pred_order"]], ["add", "theorem", "pred_ne_top", ["pred_order"]], ["add", "def", "pred_order_of_le_pred_iff", ["pred_order"]], ["add", "def", "pred_order_of_le_pred_iff_of_pred_le_pred", ["pred_order"]], ["add", "theorem", "pred_strict_mono", ["pred_order"]], ["add", "theorem", "bot_lt_succ", ["succ_order"]], ["add", "theorem", "le_le_succ_iff", ["succ_order"]], ["add", "theorem", "le_succ_iff_lt_or_eq", ["succ_order"]], ["add", "theorem", "lt_succ", ["succ_order"]], ["add", "theorem", "lt_succ_iff", ["succ_order"]], ["add", "theorem", "lt_succ_iff_lt_or_eq", ["succ_order"]], ["add", "theorem", "lt_succ_iff_ne_top", ["succ_order"]], ["add", "theorem", "lt_succ_of_not_maximal", ["succ_order"]], ["add", "theorem", "succ_eq_infi", ["succ_order"]], ["add", "theorem", "succ_eq_succ_iff", ["succ_order"]], ["add", "theorem", "succ_injective", ["succ_order"]], ["add", "theorem", "succ_le_iff", ["succ_order"]], ["add", "theorem", "succ_le_iff_eq_top", ["succ_order"]], ["add", "theorem", "succ_le_succ", ["succ_order"]], ["add", "theorem", "succ_le_succ_iff", ["succ_order"]], ["add", "theorem", "succ_lt_succ_iff", ["succ_order"]], ["add", "theorem", "succ_mono", ["succ_order"]], ["add", "theorem", "succ_ne_bot", ["succ_order"]], ["add", "theorem", "succ_ne_succ_iff", ["succ_order"]], ["add", "def", "succ_order_of_succ_le_iff", ["succ_order"]], ["add", "def", "succ_order_of_succ_le_iff_of_le_lt_succ", ["succ_order"]], ["add", "theorem", "succ_strict_mono", ["succ_order"]], ["add", "theorem", "succ_top", ["succ_order"]]]}]}, {"timestamp": 1633033516, "sha": "f7795d1a", "message": "feat(monoid_algebra/grading): `add_monoid_algebra`s permit an internal grading (#8927)", "changes": [{"oldPath": null, "newPath": "src/algebra/monoid_algebra/grading.lean", "changes": [["add", "def", "equiv_grades", ["add_monoid_algebra"]], ["add", "theorem", "is_internal", ["add_monoid_algebra", "grade"]], ["add", "def", "grade", ["add_monoid_algebra"]], ["add", "def", "of_grades", ["add_monoid_algebra"]], ["add", "theorem", "of_grades_comp_to_grades", ["add_monoid_algebra"]], ["add", "theorem", "of_grades_of", ["add_monoid_algebra"]], ["add", "theorem", "of_grades_to_grades", ["add_monoid_algebra"]], ["add", "def", "to_grades", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_coe", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_comp_of_grades", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_of_grades", ["add_monoid_algebra"]], ["add", "theorem", "to_grades_single", ["add_monoid_algebra"]]]}]}, {"timestamp": 1633026876, "sha": "b18eedb0", "message": "feat(linear_algebra/affine_space/combination): add lemma `finset.map_affine_combination` (#9453)\nThe other included lemmas `affine_map.coe_sub`, `affine_map.coe_neg` are unrelated but are included to reduce PR overhead.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "coe_neg", ["affine_map"]], ["add", "theorem", "coe_sub", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "map_affine_combination", ["finset"]]]}]}, {"timestamp": 1633026874, "sha": "6e6fe1f2", "message": "move(category_theory/category/default): rename to `category_theory.basic` (#9412)", "changes": [{"oldPath": "src/category_theory/category/Kleisli.lean", "newPath": "src/category_theory/category/Kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/category/Rel.lean", "newPath": "src/category_theory/category/Rel.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/category/preorder.lean", "newPath": "src/category_theory/category/preorder.lean", "changes": []}, {"oldPath": "src/category_theory/category/ulift.lean", "newPath": "src/category_theory/category/ulift.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": []}, {"oldPath": "src/control/equiv_functor.lean", "newPath": "src/control/equiv_functor.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/slice.lean", "newPath": "src/tactic/slice.lean", "changes": []}]}, {"timestamp": 1633026873, "sha": "4091f72b", "message": "refactor(linear_algebra/free_module): split in two files (#9407)\nWe split `linear_algebra/free_module` in `linear_algebra/free_module/basic` and `linear_algebra/free_module/finite`, so one can work with free modules without having to import all the theory of dimension.", "changes": [{"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": []}, {"oldPath": "src/linear_algebra/charpoly.lean", "newPath": "src/linear_algebra/charpoly.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module/basic.lean", "changes": [["del", "theorem", "of_basis", ["module", "finite"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/free_module/finite.lean", "changes": [["add", "theorem", "of_basis", ["module", "finite"]]]}]}, {"timestamp": 1633026872, "sha": "6210d98a", "message": "feat(*): Clean up some misstated lemmas about analysis/manifolds (#9395)\nA few lemmas whose statement doesn't match the name / docstring about analytical things, all of these are duplicates of other lemmas, so look like copy paste errors.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["mod", "theorem", "differentiable_at_cosh", ["complex"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "div_const", ["continuous_at"]]]}]}, {"timestamp": 1633018279, "sha": "118e809b", "message": "refactor(algebra/module/linear_map): Move elementwise structure from linear_algebra/basic (#9331)\nThis helps reduce the size of linear_algebra/basic, and by virtue of being a smaller file makes it easier to spot typeclasses which can be relaxed.\nAs an example, `linear_map.endomorphism_ring` now requires only `semiring R` not `ring R`.\nHaving instances available as early as possible is generally good, as otherwise it is hard to even state things elsewhere.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "add_apply", ["linear_map"]], ["add", "theorem", "add_comp", ["linear_map"]], ["add", "theorem", "coe_mul", ["linear_map"]], ["add", "theorem", "coe_one", ["linear_map"]], ["add", "theorem", "comp_add", ["linear_map"]], ["add", "theorem", "comp_neg", ["linear_map"]], ["add", "theorem", "comp_smul", ["linear_map"]], ["add", "theorem", "comp_sub", ["linear_map"]], ["add", "theorem", "comp_zero", ["linear_map"]], ["add", "theorem", "default_def", ["linear_map"]], ["add", "theorem", "mul_apply", ["linear_map"]], ["add", "theorem", "mul_eq_comp", ["linear_map"]], ["add", "theorem", "neg_apply", ["linear_map"]], ["add", "theorem", "neg_comp", ["linear_map"]], ["add", "theorem", "one_apply", ["linear_map"]], ["add", "theorem", "one_eq_id", ["linear_map"]], ["add", "theorem", "smul_apply", ["linear_map"]], ["add", "theorem", "smul_comp", ["linear_map"]], ["add", "theorem", "sub_apply", ["linear_map"]], ["add", "theorem", "sub_comp", ["linear_map"]], ["add", "theorem", "zero_apply", ["linear_map"]], ["add", "theorem", "zero_comp", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "add_apply", ["linear_map"]], ["del", "theorem", "add_comp", ["linear_map"]], ["del", "theorem", "coe_mul", ["linear_map"]], ["del", "theorem", "coe_one", ["linear_map"]], ["del", "theorem", "comp_add", ["linear_map"]], ["del", "theorem", "comp_neg", ["linear_map"]], ["del", "theorem", "comp_smul", ["linear_map"]], ["del", "theorem", "comp_sub", ["linear_map"]], ["del", "theorem", "comp_zero", ["linear_map"]], ["del", "theorem", "default_def", ["linear_map"]], ["del", "theorem", "mul_apply", ["linear_map"]], ["del", "theorem", "mul_eq_comp", ["linear_map"]], ["del", "theorem", "neg_apply", ["linear_map"]], ["del", "theorem", "neg_comp", ["linear_map"]], ["del", "theorem", "one_apply", ["linear_map"]], ["del", "theorem", "one_eq_id", ["linear_map"]], ["del", "theorem", "smul_apply", ["linear_map"]], ["del", "theorem", "smul_comp", ["linear_map"]], ["del", "theorem", "sub_apply", ["linear_map"]], ["del", "theorem", "sub_comp", ["linear_map"]], ["del", "theorem", "zero_apply", ["linear_map"]], ["del", "theorem", "zero_comp", ["linear_map"]]]}]}, {"timestamp": 1633018278, "sha": "0dca20a2", "message": "feat(data/(d)finsupp): update_eq_sub_add_single (#9184)\nAlso with `erase_eq_sub_single`.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "update_eq_sub_add_single", ["pi"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "erase_eq_sub_single", ["dfinsupp"]], ["add", "theorem", "update_eq_erase_add_single", ["dfinsupp"]], ["add", "theorem", "update_eq_single_add_erase", ["dfinsupp"]], ["add", "theorem", "update_eq_sub_add_single", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "erase_eq_sub_single", ["finsupp"]], ["add", "theorem", "update_eq_erase_add_single", ["finsupp"]], ["add", "theorem", "update_eq_single_add_erase", ["finsupp"]], ["add", "theorem", "update_eq_sub_add_single", ["finsupp"]]]}]}, {"timestamp": 1633018276, "sha": "8ec7fcf8", "message": "feat(ring_theory/henselian): Henselian local rings (#8986)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "inverse_mul_cancel", ["ring"]], ["add", "theorem", "inverse_mul_cancel_left", ["ring"]], ["add", "theorem", "inverse_mul_cancel_right", ["ring"]], ["add", "theorem", "mul_inverse_cancel", ["ring"]], ["add", "theorem", "mul_inverse_cancel_left", ["ring"]], ["add", "theorem", "mul_inverse_cancel_right", ["ring"]]]}, {"oldPath": null, "newPath": "src/ring_theory/henselian.lean", "changes": [["add", "theorem", "tfae", ["henselian_local_ring"]], ["add", "theorem", "is_local_ring_hom_of_le_jacobson_bot", []]]}]}, {"timestamp": 1633009462, "sha": "f184dd7d", "message": "feat(group_theory/perm/concrete_cycle): perm.to_list (#9178)\nThe conceptual inverse to `list.form_perm`.", "changes": [{"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": [["add", "theorem", "form_perm_to_list", ["equiv", "perm"]], ["add", "theorem", "exists_unique_cycle", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "exists_unique_cycle_subtype", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "length_to_list", ["equiv", "perm"]], ["add", "theorem", "length_to_list_pos_of_mem_support", ["equiv", "perm"]], ["add", "theorem", "mem_to_list_iff", ["equiv", "perm"]], ["add", "theorem", "next_to_list_eq_apply", ["equiv", "perm"]], ["add", "theorem", "nodup_to_list", ["equiv", "perm"]], ["add", "theorem", "nth_le_to_list", ["equiv", "perm"]], ["add", "theorem", "pow_apply_mem_to_list_iff_mem_support", ["equiv", "perm"]], ["add", "theorem", "to_list_is_rotated", ["equiv", "perm", "same_cycle"]], ["add", "def", "to_list", ["equiv", "perm"]], ["add", "theorem", "to_list_eq_nil_iff", ["equiv", "perm"]], ["add", "theorem", "to_list_form_perm_is_rotated_self", ["equiv", "perm"]], ["add", "theorem", "to_list_form_perm_nil", ["equiv", "perm"]], ["add", "theorem", "to_list_form_perm_nontrivial", ["equiv", "perm"]], ["add", "theorem", "to_list_form_perm_singleton", ["equiv", "perm"]], ["add", "theorem", "to_list_ne_singleton", ["equiv", "perm"]], ["add", "theorem", "to_list_nth_le_zero", ["equiv", "perm"]], ["add", "theorem", "to_list_one", ["equiv", "perm"]], ["add", "theorem", "to_list_pow_apply_eq_rotate", ["equiv", "perm"]], ["add", "theorem", "two_le_length_to_list_iff_mem_support", ["equiv", "perm"]]]}]}, {"timestamp": 1633009461, "sha": "3daae2ca", "message": "refactor(algebra/abs): add has_abs class (#9172)\nThe notion of an \"absolute value\" occurs both in algebra (e.g. lattice ordered groups) and analysis (e.g. GM and GL-spaces). I introduced a `has_abs` notation class in https://github.com/leanprover-community/mathlib/pull/8673 for lattice ordered groups, along with the notation `|.|` and was asked by @eric-wieser and @jcommelin to add it in a separate PR and retro fit `has_abs` and the notation to mathlib.\nI tried to introduce both the `has_abs` class and the `|.|` notation in #8891 . However, I'm finding such a large and wide-ranging PR unwieldy to work with, so I'm now opening this PR which just replaces the previous definitions of `abs : α → α` in the following locations:\nhttps://github.com/leanprover-community/mathlib/blob/f36c98e877dd86af12606abbba5275513baa8a26/src/algebra/ordered_group.lean#L984\nhttps://github.com/leanprover-community/mathlib/blob/f36c98e877dd86af12606abbba5275513baa8a26/src/topology/continuous_function/basic.lean#L113\nOut of scope are the following `abs : α → β`:\nhttps://github.com/leanprover-community/mathlib/blob/f36c98e877dd86af12606abbba5275513baa8a26/src/data/complex/is_R_or_C.lean#L439\nhttps://github.com/leanprover-community/mathlib/blob/f36c98e877dd86af12606abbba5275513baa8a26/src/data/complex/basic.lean#L406\nhttps://github.com/leanprover-community/mathlib/blob/f36c98e877dd86af12606abbba5275513baa8a26/src/data/real/nnreal.lean#L762\nhttps://github.com/leanprover-community/mathlib/blob/f36c98e877dd86af12606abbba5275513baa8a26/src/data/num/basic.lean#L315\nReplacing the `abs` notation with `|.|` can be considered in a subsequent PR.", "changes": [{"oldPath": null, "newPath": "src/algebra/abs.lean", "changes": []}, {"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/order/group.lean", "newPath": "src/algebra/order/group.lean", "changes": [["mod", "theorem", "abs_eq_max_neg", []], ["del", "def", "mabs", []]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "theorem", "norm_int", ["complex"]], ["mod", "theorem", "norm_rat", ["complex"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/inner_product_space/projection.lean", "newPath": "src/analysis/inner_product_space/projection.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "is_cau_abs_exp", ["complex"]]]}, {"oldPath": "src/data/complex/exponential_bounds.lean", "newPath": "src/data/complex/exponential_bounds.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "theorem", "abs_to_real", ["is_R_or_C"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["mod", "theorem", "inf_eq", ["continuous_map"]], ["mod", "theorem", "sup_eq", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["mod", "theorem", "abs_apply", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}]}, {"timestamp": 1633000354, "sha": "2fd713a7", "message": "chore(order/basic): rename monotonicity concepts (#9383)\nThis:\n* Renames various mono lemmas either to enable dot notation (in some cases for types that don't exist yet) or to reflect they indicate monotonicity within a particular domain.\n* Renames `strict_mono.top_preimage_top'` to `strict_mono.maximal_preimage_top'`\n* Sorts some imports\n* Replaces some `rcases` with `obtain`", "changes": [{"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": [["mod", "theorem", "derived_series_of_ideal_le", ["lie_algebra"]]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "concave_on_univ", ["antitone"]], ["mod", "theorem", "antitone_of_deriv_nonpos", []], ["del", "theorem", "concave_on_univ_of_deriv_antitone", []], ["del", "theorem", "antitone_of_deriv_nonpos", ["convex"]], ["del", "theorem", "mono_of_deriv_nonneg", ["convex"]], ["add", "theorem", "monotone_on_of_deriv_nonneg", ["convex"]], ["add", "theorem", "strict_anti_of_deriv_neg", ["convex"]], ["del", "theorem", "strict_antitone_of_deriv_neg", ["convex"]], ["del", "theorem", "mono_of_deriv_nonneg", []], ["add", "theorem", "monotone_on_of_deriv_nonneg", []], ["add", "theorem", "strict_anti_of_deriv_neg", []], ["del", "theorem", "strict_antitone_of_deriv_neg", []]]}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["del", "theorem", "integral_sin_pow_antitone", []], ["add", "theorem", "integral_sin_pow_succ_le", []]]}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "measurable_of_antitone", []], ["del", "theorem", "measurable_of_monotone", []]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["del", "theorem", "antitone", ["measure_theory", "Lp"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_compact", ["antitone"]], ["add", "theorem", "integrable_on_compact", ["antitone_on"]], ["del", "theorem", "integrable_on_compact_of_antitone", []], ["del", "theorem", "integrable_on_compact_of_antitone_on", []], ["del", "theorem", "integrable_on_compact_of_monotone", []], ["del", "theorem", "integrable_on_compact_of_monotone_on", []], ["add", "theorem", "integrable_on_compact", ["monotone"]], ["add", "theorem", "integrable_on_compact", ["monotone_on"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "interval_integrable", ["antitone"]], ["add", "theorem", "interval_integrable", ["antitone_on"]], ["del", "theorem", "interval_integrable_of_antitone", []], ["del", "theorem", "interval_integrable_of_antitone_on", []], ["del", "theorem", "interval_integrable_of_monotone", []], ["del", "theorem", "interval_integrable_of_monotone_on", []], ["add", "theorem", "interval_integrable", ["monotone"]], ["add", "theorem", "interval_integrable", ["monotone_on"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "tendsto_set_integral", ["antitone"]], ["del", "theorem", "tendsto_set_integral_of_antitone", ["measure_theory"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "strict_mono_of_injective", ["monotone"]], ["del", "theorem", "bot_preimage_bot", ["strict_mono"]], ["add", "theorem", "maximal_preimage_top", ["strict_mono"]], ["add", "theorem", "minimal_preimage_bot", ["strict_mono"]], ["del", "theorem", "top_preimage_top", ["strict_mono"]], ["del", "theorem", "strict_mono_of_monotone_of_injective", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["del", "theorem", "antitone", ["is_compl"]], ["del", "theorem", "bot_preimage_bot'", ["strict_mono"]], ["add", "theorem", "maximal_preimage_top'", ["strict_mono"]], ["add", "theorem", "minimal_preimage_bot'", ["strict_mono"]], ["del", "theorem", "top_preimage_top'", ["strict_mono"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "csupr_mem_Inter_Icc_of_antitone_Icc_nat", []], ["del", "theorem", "csupr_mem_Inter_Icc_of_monotone_of_antitone", []], ["add", "theorem", "csupr_mem_Inter_Icc_of_antitone", ["monotone"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": []}, {"oldPath": "src/order/filter/indicator_function.lean", "newPath": "src/order/filter/indicator_function.lean", "changes": [["add", "theorem", "tendsto_indicator", ["antitone"]], ["add", "theorem", "tendsto_indicator", ["monotone"]], ["del", "theorem", "tendsto_indicator_of_antitone", []], ["del", "theorem", "tendsto_indicator_of_monotone", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["del", "theorem", "forall_le_of_monotone_of_antitone", []], ["add", "theorem", "forall_le_of_antitone", ["monotone"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1633000353, "sha": "09506e6c", "message": "feat(ring_theory/finiteness): add finiteness of restrict_scalars (#9363)\nWe add `module.finitte.of_restrict_scalars_finite` and related lemmas: if `A` is an `R`-algebra and `M` is an `A`-module that is finite as `R`-module, then it is finite as `A`-module (similarly for `finite_type`).", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "of_comp_finite", ["alg_hom", "finite"]], ["add", "theorem", "of_comp_finite_type", ["alg_hom", "finite_type"]], ["add", "theorem", "of_restrict_scalars_finite_type", ["algebra", "finite_type"]], ["add", "theorem", "of_restrict_scalars_finite", ["module", "finite"]], ["add", "theorem", "of_comp_finite", ["ring_hom", "finite"]], ["add", "theorem", "of_comp_finite_type", ["ring_hom", "finite_type"]]]}]}, {"timestamp": 1633000352, "sha": "3b48f7a5", "message": "docs(category_theory): provide missing module docs (#9352)", "changes": [{"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}]}, {"timestamp": 1632988948, "sha": "6d12b2e1", "message": "feat(group_theory/complement): Top is complement to every singleton subset (#9460)\nThe top subset of G is complement to every singleton subset of G.", "changes": [{"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "is_complement_singleton_top", ["subgroup"]], ["add", "theorem", "is_complement_top_singleton", ["subgroup"]]]}]}, {"timestamp": 1632988947, "sha": "f31758a8", "message": "chore(linear_algebra/quadratic_form): add missing lemmas, lift instance, and tweak argument implicitness (#9458)\nThis adds `{quadratic,bilin}_form.{ext_iff,congr_fun}`, and a `can_lift` instance to promote `bilin_form`s to `quadratic_form`s.\nThe `associated_*` lemmas should have `Q` and `S` explicit as they are not inferable from the arguments. In particular, with `S` implicit, rewriting any of them backwards introduces a lot of noisy subgoals.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "congr_fun", ["bilin_form"]], ["add", "theorem", "ext_iff", ["bilin_form"]], ["add", "theorem", "ne_zero", ["bilin_form", "nondegenerate"]], ["add", "theorem", "not_nondegenerate_zero", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["mod", "theorem", "associated_right_inverse", ["quadratic_form"]], ["add", "theorem", "congr_fun", ["quadratic_form"]], ["add", "theorem", "ext_iff", ["quadratic_form"]], ["add", "theorem", "to_quadratic_form_associated", ["quadratic_form"]]]}]}, {"timestamp": 1632988945, "sha": "f6d2434f", "message": "feat(set_theory/cardinal_ordinal): there is no injective function from ordinals to types in the same universe (#9452)\nContributed by @rwbarton at https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Transfinite.20recursion/near/253614140", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "not_injective_of_ordinal", []], ["add", "theorem", "not_injective_of_ordinal_of_small", []]]}]}, {"timestamp": 1632988943, "sha": "089614b1", "message": "feat(algebra/star): If `R` is a `star_monoid`/`star_ring` then so is `Rᵒᵖ` (#9446)\nThe definition is simply that `op (star r) = star (op r)`", "changes": [{"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "op_star", []], ["add", "def", "star_monoid_of_comm", []], ["add", "theorem", "unop_star", []]]}]}, {"timestamp": 1632988942, "sha": "d1f78e2e", "message": "feat(order/filter/{basic, cofinite}, topology/subset_properties): filter lemmas, prereqs for #8611 (#9419)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "of_tendsto_comp", ["filter", "tendsto"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "exists_within_forall_ge", ["filter", "tendsto"]], ["add", "theorem", "exists_within_forall_le", ["filter", "tendsto"]], ["add", "theorem", "tendsto_cofinite", ["function", "injective"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "comap_cocompact", ["filter"]]]}]}, {"timestamp": 1632988941, "sha": "f76d0198", "message": "chore({field,ring}_theory): generalize `fraction_ring` and `is_separable` to rings (#9415)\nThese used to be defined only for `integral_domain`s resp. `field`s, however the construction makes sense even for `comm_ring`s. So we can just do the generalization for free, and moreover it makes certain proof terms in their definition a lot smaller. Together with #9414, this helps against [timeouts when combining `localization` and `polynomial`](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60variables.60.20doesn't.20time.20out.20but.20inline.20params.20do), although the full test case is still quite slow (going from >40sec to approx 11 sec).", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "is_integral", ["is_separable"]], ["mod", "theorem", "separable", ["is_separable"]], ["mod", "theorem", "is_separable_iff", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "def", "fraction_ring", []]]}]}, {"timestamp": 1632988939, "sha": "92526c89", "message": "chore(ring_theory/localization): speed up `localization` a bit (#9414)\nNow `nsmul` and `gsmul` are irreducible on `localization`. This helps against [timeouts when combining `localization` and `polynomial`](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60variables.60.20doesn't.20time.20out.20but.20inline.20params.20do), although the full test case is still quite slow (going from >40sec to approx 11 sec).", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "add_mk_self", ["localization"]], ["add", "theorem", "smul_mk", ["localization"]]]}]}, {"timestamp": 1632983090, "sha": "8b238eb4", "message": "refactor(data/mv_polynomial/equiv): simplify option_equiv_left (#9427)", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["mod", "def", "option_equiv_left", ["mv_polynomial"]]]}]}, {"timestamp": 1632979949, "sha": "c7dd27d7", "message": "split(analysis/convex/jensen): split Jensen's inequalities off `analysis.convex.function` (#9445)", "changes": [{"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["del", "theorem", "exists_le_of_center_mass", ["concave_on"]], ["del", "theorem", "exists_le_of_mem_convex_hull", ["concave_on"]], ["del", "theorem", "le_map_center_mass", ["concave_on"]], ["del", "theorem", "le_map_sum", ["concave_on"]], ["del", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["del", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["del", "theorem", "map_center_mass_le", ["convex_on"]], ["del", "theorem", "map_sum_le", ["convex_on"]]]}, {"oldPath": null, "newPath": "src/analysis/convex/jensen.lean", "changes": [["add", "theorem", "exists_le_of_center_mass", ["concave_on"]], ["add", "theorem", "exists_le_of_mem_convex_hull", ["concave_on"]], ["add", "theorem", "le_map_center_mass", ["concave_on"]], ["add", "theorem", "le_map_sum", ["concave_on"]], ["add", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["add", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["add", "theorem", "map_center_mass_le", ["convex_on"]], ["add", "theorem", "map_sum_le", ["convex_on"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}]}, {"timestamp": 1632970494, "sha": "d9ed0732", "message": "chore(scripts): update nolints.txt (#9459)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1632967601, "sha": "f254c2f8", "message": "refactor(analysis/normed_space/{dual, pi_Lp}): split out inner product space parts (#9388)\nThis is just moving code, no math changes.\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/New.20folder.20analysis.2Finner_product_space", "changes": [{"oldPath": null, "newPath": "src/analysis/inner_product_space/dual.lean", "changes": [["add", "def", "to_dual", ["inner_product_space", "isometric"]], ["add", "theorem", "ker_to_dual_map", ["inner_product_space"]], ["add", "theorem", "norm_to_dual'_apply", ["inner_product_space"]], ["add", "theorem", "norm_to_dual_apply", ["inner_product_space"]], ["add", "theorem", "norm_to_dual_map_apply", ["inner_product_space"]], ["add", "theorem", "norm_to_dual_symm_apply", ["inner_product_space"]], ["add", "theorem", "range_to_dual_map", ["inner_product_space"]], ["add", "def", "to_dual'", ["inner_product_space"]], ["add", "theorem", "to_dual'_apply", ["inner_product_space"]], ["add", "theorem", "to_dual'_isometry", ["inner_product_space"]], ["add", "theorem", "to_dual'_surjective", ["inner_product_space"]], ["add", "def", "to_dual", ["inner_product_space"]], ["add", "theorem", "to_dual_apply", ["inner_product_space"]], ["add", "theorem", "to_dual_eq_iff_eq'", ["inner_product_space"]], ["add", "theorem", "to_dual_eq_iff_eq", ["inner_product_space"]], ["add", "def", "to_dual_map", ["inner_product_space"]], ["add", "theorem", "to_dual_map_apply", ["inner_product_space"]], ["add", "theorem", "to_dual_map_eq_iff_eq", ["inner_product_space"]], ["add", "theorem", "to_dual_map_injective", ["inner_product_space"]], ["add", "theorem", "to_dual_map_isometry", ["inner_product_space"]]]}, {"oldPath": "src/analysis/inner_product_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/pi_L2.lean", "changes": [["add", "def", "isometry_euclidean_of_orthonormal", ["basis"]], ["add", "def", "isometry_euclidean", ["complex"]], ["add", "theorem", "isometry_euclidean_apply_one", ["complex"]], ["add", "theorem", "isometry_euclidean_apply_zero", ["complex"]], ["add", "theorem", "isometry_euclidean_proj_eq_self", ["complex"]], ["add", "theorem", "isometry_euclidean_symm_apply", ["complex"]], ["add", "theorem", "norm_eq", ["euclidean_space"]], ["add", "def", "euclidean_space", []], ["add", "theorem", "finrank_euclidean_space", []], ["add", "theorem", "finrank_euclidean_space_fin", []], ["add", "def", "from_orthogonal_span_singleton", ["linear_isometry_equiv"]], ["add", "def", "of_inner_product_space", ["linear_isometry_equiv"]], ["add", "theorem", "inner_apply", ["pi_Lp"]], ["add", "theorem", "norm_eq_of_L2", ["pi_Lp"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["del", "def", "to_dual", ["inner_product_space", "isometric"]], ["del", "theorem", "ker_to_dual_map", ["inner_product_space"]], ["del", "theorem", "norm_to_dual'_apply", ["inner_product_space"]], ["del", "theorem", "norm_to_dual_apply", ["inner_product_space"]], ["del", "theorem", "norm_to_dual_map_apply", ["inner_product_space"]], ["del", "theorem", "norm_to_dual_symm_apply", ["inner_product_space"]], ["del", "theorem", "range_to_dual_map", ["inner_product_space"]], ["del", "def", "to_dual'", ["inner_product_space"]], ["del", "theorem", "to_dual'_apply", ["inner_product_space"]], ["del", "theorem", "to_dual'_isometry", ["inner_product_space"]], ["del", "theorem", "to_dual'_surjective", ["inner_product_space"]], ["del", "def", "to_dual", ["inner_product_space"]], ["del", "theorem", "to_dual_apply", ["inner_product_space"]], ["del", "theorem", "to_dual_eq_iff_eq'", ["inner_product_space"]], ["del", "theorem", "to_dual_eq_iff_eq", ["inner_product_space"]], ["del", "def", "to_dual_map", ["inner_product_space"]], ["del", "theorem", "to_dual_map_apply", ["inner_product_space"]], ["del", "theorem", "to_dual_map_eq_iff_eq", ["inner_product_space"]], ["del", "theorem", "to_dual_map_injective", ["inner_product_space"]], ["del", "theorem", "to_dual_map_isometry", ["inner_product_space"]]]}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["del", "def", "isometry_euclidean_of_orthonormal", ["basis"]], ["del", "def", "isometry_euclidean", ["complex"]], ["del", "theorem", "isometry_euclidean_apply_one", ["complex"]], ["del", "theorem", "isometry_euclidean_apply_zero", ["complex"]], ["del", "theorem", "isometry_euclidean_proj_eq_self", ["complex"]], ["del", "theorem", "isometry_euclidean_symm_apply", ["complex"]], ["del", "theorem", "norm_eq", ["euclidean_space"]], ["del", "def", "euclidean_space", []], ["del", "theorem", "finrank_euclidean_space", []], ["del", "theorem", "finrank_euclidean_space_fin", []], ["del", "def", "from_orthogonal_span_singleton", ["linear_isometry_equiv"]], ["del", "def", "of_inner_product_space", ["linear_isometry_equiv"]], ["del", "theorem", "inner_apply", ["pi_Lp"]], ["del", "theorem", "norm_eq_of_L2", ["pi_Lp"]]]}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}]}, {"timestamp": 1632951503, "sha": "519ab351", "message": "feat(topology/metric_space/basic): nonempty intersections of balls (#9448)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "not_disjoint_iff_nonempty_inter", ["set"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ball_subset_ball'", ["metric"]], ["add", "theorem", "closed_ball_subset_closed_ball'", ["metric"]], ["add", "theorem", "dist_le_add_of_nonempty_closed_ball_inter_closed_ball", ["metric"]], ["add", "theorem", "dist_lt_add_of_nonempty_ball_inter_ball", ["metric"]], ["add", "theorem", "dist_lt_add_of_nonempty_ball_inter_closed_ball", ["metric"]], ["add", "theorem", "dist_lt_add_of_nonempty_closed_ball_inter_ball", ["metric"]]]}]}, {"timestamp": 1632951502, "sha": "acced829", "message": "chore(*): linting (#9343)", "changes": [{"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}]}, {"timestamp": 1632947253, "sha": "3681b5a4", "message": "split(analysis/convex/slope): split slope results off `analysis.convex.function` (#9444)", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["del", "theorem", "slope_mono_adjacent", ["concave_on"]], ["del", "theorem", "concave_on_iff_slope_mono_adjacent", []], ["del", "theorem", "concave_on_of_slope_mono_adjacent", []], ["del", "theorem", "slope_mono_adjacent", ["convex_on"]], ["del", "theorem", "convex_on_iff_slope_mono_adjacent", []], ["del", "theorem", "convex_on_of_slope_mono_adjacent", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/slope.lean", "changes": [["add", "theorem", "slope_anti_adjacent", ["concave_on"]], ["add", "theorem", "concave_on_iff_slope_anti_adjacent", []], ["add", "theorem", "concave_on_of_slope_anti_adjacent", []], ["add", "theorem", "slope_mono_adjacent", ["convex_on"]], ["add", "theorem", "convex_on_iff_slope_mono_adjacent", []], ["add", "theorem", "convex_on_of_slope_mono_adjacent", []]]}]}, {"timestamp": 1632941081, "sha": "eca3fd9a", "message": "feat(data/real/ennreal): composition of coercion of natural numbers in ennreal (#9447)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_nnreal_nat", ["ennreal"]], ["add", "theorem", "to_real_nat", ["ennreal"]]]}]}, {"timestamp": 1632933299, "sha": "88e613e7", "message": "feat(data/mv_polynomial/cardinal): cardinalities of polynomial rings (#9384)", "changes": [{"oldPath": null, "newPath": "src/data/mv_polynomial/cardinal.lean", "changes": [["add", "theorem", "cardinal_mk_le_max", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/cardinal.lean", "changes": [["add", "theorem", "cardinal_mk_le_max", ["polynomial"]]]}]}, {"timestamp": 1632933297, "sha": "2cd1d046", "message": "feat(group_theory/sylow): Sylow's theorems for infinite groups (#9288)\nThis PR contains all three of Sylow's theorems for infinite groups, building off the work of @ChrisHughes24 in the `ch_sylow2` branch of mathlib.\nLater, I'll PR some consequences (e.g., index of normalizer stuff, maybe a golf of the original sylow stuff using the new results, Frattini's argument, ...).", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "card_sylow_modeq_one", []], ["add", "theorem", "exists_le_sylow", ["is_p_group"]], ["add", "theorem", "inf_normalizer_sylow", ["is_p_group"]], ["add", "theorem", "sylow_mem_fixed_points_iff", ["is_p_group"]], ["add", "theorem", "sylow_mem_fixed_points_iff", ["subgroup"]], ["add", "theorem", "coe_smul", ["sylow"]], ["add", "theorem", "coe_subgroup_smul", ["sylow"]], ["add", "theorem", "ext", ["sylow"]], ["add", "theorem", "ext_iff", ["sylow"]], ["add", "theorem", "smul_eq_iff_mem_normalizer", ["sylow"]], ["add", "theorem", "to_subgroup_eq_coe", ["sylow"]], ["add", "structure", "sylow", []]]}]}, {"timestamp": 1632925360, "sha": "9535c087", "message": "feat(linear_algebra/affine_space/combination, analysis/convex/combination): basic lemmas about affine combinations, center of mass, centroid (#9103)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_comp", ["finset"]], ["mod", "theorem", "sum_comp", ["finset"]]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["add", "theorem", "affine_combination_eq_center_mass", []], ["add", "theorem", "center_mass_id_mem_convex_hull", ["finset"]], ["add", "theorem", "centroid_eq_center_mass", ["finset"]], ["add", "theorem", "centroid_mem_convex_hull", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "attach_image_coe", ["finset"]], ["mod", "theorem", "attach_image_val", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "affine_combination_eq_linear_combination", ["finset"]], ["add", "theorem", "attach_affine_combination_coe", ["finset"]], ["add", "theorem", "attach_affine_combination_of_injective", ["finset"]], ["add", "theorem", "centroid_univ", ["finset"]]]}]}, {"timestamp": 1632921290, "sha": "9e91b706", "message": "feat(analysis/convex/function): define strictly convex/concave functions (#9439)", "changes": [{"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["mod", "def", "concave_on", []], ["mod", "def", "convex_on", []], ["add", "def", "strict_concave_on", []], ["add", "def", "strict_convex_on", []]]}]}, {"timestamp": 1632914568, "sha": "6f609baf", "message": "feat(data/mv_polynomial/basic): aeval_tower (#9429)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "def", "aeval_tower", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_C", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_X", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_algebra_map", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_comp_C", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_comp_algebra_map", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_comp_to_alg_hom", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_id", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_of_id", ["mv_polynomial"]], ["add", "theorem", "aeval_tower_to_alg_hom", ["mv_polynomial"]], ["add", "theorem", "alg_hom_ext'", ["mv_polynomial"]]]}]}, {"timestamp": 1632914567, "sha": "43c1ab27", "message": "fix(linear_algebra/basic): generalize `linear_map.add_comm_group` to semilinear maps (#9402)\nAlso generalizes `coe_mk` and golfs some proofs.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "coe_mk", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1632910815, "sha": "d2463aa3", "message": "feat(ring_theory/algebraic): is_algebraic_of_larger_base_of_injective (#9433)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_of_larger_base_of_injective", ["algebra"]], ["mod", "theorem", "is_algebraic_iff_not_injective", []]]}]}, {"timestamp": 1632908246, "sha": "e1506687", "message": "chore(topology/sheaves): fix timeout by splitting proof (#9436)\nIn #7033 we were getting a timeout in `app_surjective_of_stalk_functor_map_bijective`. Since the proof looks like it has two rather natural components, I split out the first half into its own lemma. This is a separate PR since I don't really understand the topology/sheaf library, so I might be doing something very weird.\nTimings:\n * original (master): 4.42s\n * original (master + #7033): 5.93s\n * new (master + this PR): 4.24s + 316ms\n * new (master + #7033 + this PR): 5.48s + 212ms", "changes": [{"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "app_surjective_of_injective_of_locally_surjective", ["Top", "presheaf"]]]}]}, {"timestamp": 1632908244, "sha": "0de54327", "message": "feat(data/W/cardinal): results about cardinality of W-types (#9210)", "changes": [{"oldPath": "archive/examples/prop_encodable.lean", "newPath": "archive/examples/prop_encodable.lean", "changes": []}, {"oldPath": "src/data/W.lean", "newPath": "src/data/W/basic.lean", "changes": [["add", "def", "elim", ["W_type"]], ["add", "theorem", "elim_injective", ["W_type"]], ["add", "def", "equiv_sigma", ["W_type"]], ["add", "theorem", "infinite_of_nonempty_of_is_empty", ["W_type"]], ["add", "def", "of_sigma", ["W_type"]], ["add", "theorem", "of_sigma_to_sigma", ["W_type"]], ["add", "def", "to_sigma", ["W_type"]], ["add", "theorem", "to_sigma_of_sigma", ["W_type"]]]}, {"oldPath": null, "newPath": "src/data/W/cardinal.lean", "changes": [["add", "theorem", "cardinal_mk_eq_sum", ["W_type"]], ["add", "theorem", "cardinal_mk_le_max_omega_of_fintype", ["W_type"]], ["add", "theorem", "cardinal_mk_le_of_le", ["W_type"]]]}, {"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": []}]}, {"timestamp": 1632904865, "sha": "c758cec7", "message": "chore(analysis/convex/function): change `add_comm_monoid` to `add_comm_group` when carrier type is module of scalars containing -1 (#9442)\nRelated [Zulip conversation](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Convexity.20refactor/near/255268131)", "changes": [{"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}]}, {"timestamp": 1632888187, "sha": "d7abdff7", "message": "chore(analysis/normed_space/*): prereqs for #8611 (#9379)\nThe functions `abs` and `norm_sq` on `ℂ` are proper.\nA matrix with entries in a {seminormed group, normed group, normed space} is itself a {seminormed group, normed group, normed space}.\nAn injective linear map with finite-dimensional domain is a closed embedding.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "tendsto_abs_cocompact_at_top", ["complex"]], ["add", "theorem", "tendsto_norm_sq_cocompact_at_top", ["complex"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "def", "normed_group", ["matrix"]], ["add", "def", "normed_space", ["matrix"]], ["add", "def", "semi_normed_group", ["matrix"]], ["add", "theorem", "semi_norm_matrix_le_iff", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "closed_embedding_of_injective", ["linear_equiv"]]]}]}, {"timestamp": 1632888186, "sha": "8bd75b26", "message": "feat(measure_theory/measure/haar_lebesgue): properties of Haar measure on real vector spaces (#9325)\nWe show that any additive Haar measure on a finite-dimensional real vector space is rescaled by a linear map through its determinant, and we compute the measure of balls and spheres.", "changes": [{"oldPath": "src/linear_algebra/matrix/transvection.lean", "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar_lebesgue.lean", "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "theorem", "add_haar_measure_eq_volume", ["measure_theory"]], ["add", "theorem", "add_haar_measure_eq_volume_pi", ["measure_theory"]], ["del", "theorem", "haar_measure_eq_lebesgue_measure", ["measure_theory"]], ["add", "theorem", "is_add_left_invariant_real_volume_pi", ["measure_theory"]], ["add", "theorem", "add_haar_ball", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_ball_center", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_ball_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_ball_of_pos", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_ball_pos", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_ball'", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_ball", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_ball_center", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_ball_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_ball_pos", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_closed_unit_ball_eq_add_haar_unit_ball", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_preimage_smul", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_smul", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_sphere", ["measure_theory", "measure"]], ["add", "theorem", "add_haar_sphere_of_ne_zero", ["measure_theory", "measure"]], ["add", "theorem", "haar_preimage_linear_map", ["measure_theory", "measure"]], ["add", "theorem", "map_add_haar_smul", ["measure_theory", "measure"]], ["add", "theorem", "map_linear_map_add_haar_eq_smul_add_haar", ["measure_theory", "measure"]], ["add", "theorem", "map_linear_map_add_haar_pi_eq_smul_add_haar", ["measure_theory", "measure"]], ["add", "def", "pi_Icc01", ["topological_space", "positive_compacts"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}]}, {"timestamp": 1632888184, "sha": "861d3bc4", "message": "chore(order/preorder_hom): more homs, golf a few proofs (#9256)\n### New `preorder_hom`s\n* `preorder_hom.curry`: an order isomorphism between `α × β →ₘ γ` and `α →ₘ β →ₘ γ`;\n* `preorder_hom.compₘ`: a fully bundled version of `preorder_hom.comp`;\n* `preorder_hom.prodₘ`: a fully bundled version of `preorder_hom.prod`;\n* `preorder_hom.prod_iso`: Order isomorphism between the space of\n monotone maps to `β × γ` and the product of the spaces +of monotone\n maps to `β` and `γ`;\n* `preorder_hom.pi`: construct a bundled monotone map `α →ₘ Π i, π i`\n from a family of monotone maps +`f i : α →ₘ π i`;\n* `preorder_hom.pi_iso`: same thing, as an `order_iso`;\n* `preorder_hom.dual`: interpret `f : α →ₘ β` as `order_dual α →ₘ order_dual β`;\n* `preorder_hom.dual_iso`: same as an `order_iso` (with one more\n `order_dual` to get a monotone map, not an antitone map);\n### Renamed/moved `preorder_hom`s\nThe following `preorder_hom`s were renamed and/or moved from\n`order.omega_complete_partial_order` to `order.preorder_hom`.\n* `preorder_hom.const` : moved, bundle as `β →ₘ α →ₘ β`;\n* `preorder_hom.prod.diag` : `preorder_hom.diag`;\n* `preorder_hom.prod.map` : `preorder_hom.prod_map`;\n* `preorder_hom.prod.fst` : `preorder_hom.fst`;\n* `preorder_hom.prod.snd` : `preorder_hom.snd`;\n* `preorder_hom.prod.zip` : `preorder_hom.prod`;\n* `pi.monotone_apply` : `pi.eval_preorder_hom`;\n* `preorder_hom.monotone_apply` : `preorder_hom.apply`;\n* `preorder_hom.to_fun_hom` : moved.\n### Other changes\n* add an instance `can_lift (α → β) (α →ₘ β)`;\n- rename `omega_complete_partial_order.continuous.to_monotone` to\n `omega_complete_partial_order.continuous'.to_monotone` to enable dot\n notation, same with\n `omega_complete_partial_order.continuous.to_bundled`;\n* use `order_dual` to get some proofs;\n* golf some proofs;\n* redefine `has_Inf.Inf` and `has_Sup.Sup` using `infi`/`supr`;\n* generalize some `mono` lemmas;\n* use notation `→ₘ`.", "changes": [{"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "Sup_continuous'", ["complete_lattice"]], ["add", "theorem", "supr_continuous", ["complete_lattice"]], ["add", "theorem", "to_bundled", ["omega_complete_partial_order", "continuous'"]], ["add", "theorem", "to_monotone", ["omega_complete_partial_order", "continuous'"]], ["add", "theorem", "continuous'_coe", ["omega_complete_partial_order"]], ["del", "theorem", "to_bundled", ["omega_complete_partial_order", "continuous"]], ["del", "theorem", "to_monotone", ["omega_complete_partial_order", "continuous"]], ["add", "theorem", "continuous_const", ["omega_complete_partial_order"]], ["add", "theorem", "apply_mono", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "def", "const", ["omega_complete_partial_order", "continuous_hom"]], ["del", "theorem", "monotone", ["omega_complete_partial_order", "continuous_hom"]], ["del", "def", "monotone_apply", ["omega_complete_partial_order", "preorder_hom"]], ["del", "def", "to_fun_hom", ["omega_complete_partial_order", "preorder_hom"]], ["del", "def", "monotone_apply", ["pi"]], ["del", "def", "const", ["preorder_hom"]], ["del", "def", "diag", ["preorder_hom", "prod"]], ["del", "def", "fst", ["preorder_hom", "prod"]], ["del", "def", "map", ["preorder_hom", "prod"]], ["del", "def", "snd", ["preorder_hom", "prod"]], ["del", "def", "zip", ["preorder_hom", "prod"]]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": [["add", "def", "eval_preorder_hom", ["pi"]], ["add", "theorem", "Inf_apply", ["preorder_hom"]], ["add", "theorem", "Sup_apply", ["preorder_hom"]], ["add", "def", "apply", ["preorder_hom"]], ["add", "theorem", "apply_mono", ["preorder_hom"]], ["add", "def", "coe_fn_hom", ["preorder_hom"]], ["add", "theorem", "coe_infi", ["preorder_hom"]], ["add", "theorem", "coe_le_coe", ["preorder_hom"]], ["add", "theorem", "coe_supr", ["preorder_hom"]], ["mod", "def", "comp", ["preorder_hom"]], ["add", "theorem", "comp_const", ["preorder_hom"]], ["mod", "theorem", "comp_id", ["preorder_hom"]], ["add", "theorem", "comp_mono", ["preorder_hom"]], ["add", "theorem", "comp_prod_comp_same", ["preorder_hom"]], ["add", "def", "compₘ", ["preorder_hom"]], ["add", "def", "const", ["preorder_hom"]], ["add", "theorem", "const_comp", ["preorder_hom"]], ["add", "def", "curry", ["preorder_hom"]], ["add", "theorem", "curry_apply", ["preorder_hom"]], ["add", "theorem", "curry_symm_apply", ["preorder_hom"]], ["add", "def", "diag", ["preorder_hom"]], ["add", "def", "dual_iso", ["preorder_hom"]], ["mod", "theorem", "ext", ["preorder_hom"]], ["add", "def", "fst", ["preorder_hom"]], ["add", "theorem", "fst_comp_prod", ["preorder_hom"]], ["add", "theorem", "fst_prod_snd", ["preorder_hom"]], ["mod", "def", "id", ["preorder_hom"]], ["mod", "theorem", "id_comp", ["preorder_hom"]], ["add", "theorem", "infi_apply", ["preorder_hom"]], ["add", "theorem", "le_def", ["preorder_hom"]], ["add", "theorem", "mk_le_mk", ["preorder_hom"]], ["del", "theorem", "monotone", ["preorder_hom"]], ["add", "def", "on_diag", ["preorder_hom"]], ["add", "def", "pi", ["preorder_hom"]], ["add", "def", "pi_iso", ["preorder_hom"]], ["add", "def", "prod_iso", ["preorder_hom"]], ["add", "def", "prod_map", ["preorder_hom"]], ["add", "theorem", "prod_mono", ["preorder_hom"]], ["add", "def", "prodₘ", ["preorder_hom"]], ["add", "def", "snd", ["preorder_hom"]], ["add", "theorem", "snd_comp_prod", ["preorder_hom"]], ["add", "theorem", "supr_apply", ["preorder_hom"]]]}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": [["add", "theorem", "is_ωSup_iff_is_lub", ["Scott"]]]}]}, {"timestamp": 1632884985, "sha": "49805e68", "message": "chore(scripts): update nolints.txt (#9441)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1632870817, "sha": "73afb6c7", "message": "chore(data/fintype/basic): add `fintype.card_set` (#9434)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_set", ["fintype"]]]}]}, {"timestamp": 1632859753, "sha": "e2cb9e19", "message": "feat(data/mv_polynomial/supported): subalgebra of polynomials supported by a set of variables (#9183)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "symm_trans_apply", ["alg_equiv"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/supported.lean", "changes": [["add", "theorem", "X_mem_supported", ["mv_polynomial"]], ["add", "theorem", "mem_supported", ["mv_polynomial"]], ["add", "theorem", "mem_supported_vars", ["mv_polynomial"]], ["add", "theorem", "supported_empty", ["mv_polynomial"]], ["add", "theorem", "supported_eq_adjoin_X", ["mv_polynomial"]], ["add", "theorem", "supported_eq_range_rename", ["mv_polynomial"]], ["add", "theorem", "supported_eq_vars_subset", ["mv_polynomial"]], ["add", "theorem", "supported_equiv_mv_polynomial_symm_C", ["mv_polynomial"]], ["add", "theorem", "supported_equiv_mv_polynomial_symm_X", ["mv_polynomial"]], ["add", "theorem", "supported_le_supported_iff", ["mv_polynomial"]], ["add", "theorem", "supported_mono", ["mv_polynomial"]], ["add", "theorem", "supported_strict_mono", ["mv_polynomial"]], ["add", "theorem", "supported_univ", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "exists_rename_eq_of_vars_subset_range", ["mv_polynomial"]], ["add", "theorem", "hom_congr_vars", ["mv_polynomial"]]]}]}, {"timestamp": 1632848252, "sha": "e18b9cac", "message": "feat(set_theory/continuum): define `cardinal.continuum := 2 ^ ω` (#9354)", "changes": [{"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": [["mod", "theorem", "mk_Icc_real", ["cardinal"]], ["mod", "theorem", "mk_Ici_real", ["cardinal"]], ["mod", "theorem", "mk_Ico_real", ["cardinal"]], ["mod", "theorem", "mk_Iic_real", ["cardinal"]], ["mod", "theorem", "mk_Iio_real", ["cardinal"]], ["mod", "theorem", "mk_Ioc_real", ["cardinal"]], ["mod", "theorem", "mk_Ioi_real", ["cardinal"]], ["mod", "theorem", "mk_Ioo_real", ["cardinal"]], ["mod", "theorem", "mk_real", ["cardinal"]], ["mod", "theorem", "mk_univ_real", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "mk_nat", ["cardinal"]], ["mod", "theorem", "nat_cast_inj", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["mod", "theorem", "bit0_ne_zero", ["cardinal"]], ["add", "theorem", "nat_power_eq", ["cardinal"]]]}, {"oldPath": null, "newPath": "src/set_theory/continuum.lean", "changes": [["add", "def", "continuum", ["cardinal"]], ["add", "theorem", "continuum_add_nat", ["cardinal"]], ["add", "theorem", "continuum_add_omega", ["cardinal"]], ["add", "theorem", "continuum_add_self", ["cardinal"]], ["add", "theorem", "continuum_mul_nat", ["cardinal"]], ["add", "theorem", "continuum_mul_omega", ["cardinal"]], ["add", "theorem", "continuum_mul_self", ["cardinal"]], ["add", "theorem", "continuum_ne_zero", ["cardinal"]], ["add", "theorem", "continuum_pos", ["cardinal"]], ["add", "theorem", "continuum_power_omega", ["cardinal"]], ["add", "theorem", "lift_continuum", ["cardinal"]], ["add", "theorem", "mk_set_nat", ["cardinal"]], ["add", "theorem", "nat_add_continuum", ["cardinal"]], ["add", "theorem", "nat_lt_continuum", ["cardinal"]], ["add", "theorem", "nat_mul_continuum", ["cardinal"]], ["add", "theorem", "nat_power_omega", ["cardinal"]], ["add", "theorem", "omega_add_continuum", ["cardinal"]], ["add", "theorem", "omega_le_continuum", ["cardinal"]], ["add", "theorem", "omega_lt_continuum", ["cardinal"]], ["add", "theorem", "omega_mul_continuum", ["cardinal"]], ["add", "theorem", "omega_power_omega", ["cardinal"]], ["add", "theorem", "two_power_omega", ["cardinal"]]]}]}, {"timestamp": 1632837667, "sha": "15f15a6e", "message": "chore(order/*): replace `mono_incr` and `mono_decr` in lemma names wih `monotone` and `antitone` (#9428)\nThis change was performed as a find-and-replace. No occurrences of `incr` or `decr` appear as tokens in lemma names after this change.", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "pow_antitone_exp", ["nnreal"]], ["del", "theorem", "pow_mono_decr_exp", ["nnreal"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "csupr_mem_Inter_Icc_of_antitone_Icc", []], ["add", "theorem", "csupr_mem_Inter_Icc_of_antitone_Icc_nat", []], ["del", "theorem", "csupr_mem_Inter_Icc_of_mono_decr_Icc", []], ["del", "theorem", "csupr_mem_Inter_Icc_of_mono_decr_Icc_nat", []], ["del", "theorem", "csupr_mem_Inter_Icc_of_mono_incr_of_mono_decr", []], ["add", "theorem", "csupr_mem_Inter_Icc_of_monotone_of_antitone", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "forall_le_of_monotone_of_antitone", []], ["del", "theorem", "forall_le_of_monotone_of_mono_decr", []]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "continuous_at_left_of_mono_incr_on_of_closure_image_mem_nhds_within", []], ["del", "theorem", "continuous_at_left_of_mono_incr_on_of_exists_between", []], ["del", "theorem", "continuous_at_left_of_mono_incr_on_of_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_left_of_monotone_on_of_closure_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_left_of_monotone_on_of_exists_between", []], ["add", "theorem", "continuous_at_left_of_monotone_on_of_image_mem_nhds_within", []], ["del", "theorem", "continuous_at_of_mono_incr_on_of_closure_image_mem_nhds", []], ["del", "theorem", "continuous_at_of_mono_incr_on_of_exists_between", []], ["del", "theorem", "continuous_at_of_mono_incr_on_of_image_mem_nhds", []], ["add", "theorem", "continuous_at_of_monotone_on_of_closure_image_mem_nhds", []], ["add", "theorem", "continuous_at_of_monotone_on_of_exists_between", []], ["add", "theorem", "continuous_at_of_monotone_on_of_image_mem_nhds", []], ["del", "theorem", "continuous_at_right_of_mono_incr_on_of_closure_image_mem_nhds_within", []], ["del", "theorem", "continuous_at_right_of_mono_incr_on_of_exists_between", []], ["del", "theorem", "continuous_at_right_of_mono_incr_on_of_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_right_of_monotone_on_of_closure_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_right_of_monotone_on_of_exists_between", []], ["add", "theorem", "continuous_at_right_of_monotone_on_of_image_mem_nhds_within", []]]}]}, {"timestamp": 1632837665, "sha": "2d5fd655", "message": "fix(algebra/opposites): add a missing `comm_semiring` instance (#9425)", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}]}, {"timestamp": 1632837664, "sha": "84bbb00f", "message": "feat(data/set/intervals): add `order_iso.image_Ixx` lemmas (#9404)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "image_Icc", ["order_iso"]], ["add", "theorem", "image_Ici", ["order_iso"]], ["add", "theorem", "image_Ico", ["order_iso"]], ["add", "theorem", "image_Iic", ["order_iso"]], ["add", "theorem", "image_Iio", ["order_iso"]], ["add", "theorem", "image_Ioc", ["order_iso"]], ["add", "theorem", "image_Ioi", ["order_iso"]], ["add", "theorem", "image_Ioo", ["order_iso"]]]}]}, {"timestamp": 1632828816, "sha": "4a02fd3b", "message": "refactor(algebra/order/ring,data/complex): redefine `ordered_comm_ring` and complex order (#9420)\n* `ordered_comm_ring` no longer extends `ordered_comm_semiring`.\n We add an instance `ordered_comm_ring.to_ordered_comm_semiring` instead.\n* redefine complex order in terms of `re` and `im` instead of existence of a nonnegative real number.\n* simplify `has_star.star` on `complex` to `conj`;\n* rename `complex.complex_partial_order` etc to `complex.partial_order` etc, make them protected.", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["del", "def", "complex_order", ["complex"]], ["del", "def", "complex_ordered_comm_ring", ["complex"]], ["del", "def", "complex_star_ordered_ring", ["complex"]], ["mod", "theorem", "le_def", ["complex"]], ["mod", "theorem", "lt_def", ["complex"]], ["add", "theorem", "not_le_iff", ["complex"]], ["add", "theorem", "not_le_zero_iff", ["complex"]], ["mod", "theorem", "real_le_real", ["complex"]], ["mod", "theorem", "real_lt_real", ["complex"]], ["add", "theorem", "star_def", ["complex"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["del", "theorem", "complex_ordered_smul", ["complex"]]]}]}, {"timestamp": 1632828815, "sha": "06610c70", "message": "feat(data/list/basic): lemmas about tail (#9259)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "mem_of_mem_tail", ["list"]], ["add", "theorem", "nth_le_tail", ["list"]]]}]}, {"timestamp": 1632828813, "sha": "c0dbe14d", "message": "feat(linear_algebra/matrix/fpow): integer powers of matrices (#8683)\nSince we have an inverse defined for matrices via `nonsing_inv`, we provide a `div_inv_monoid` instance for matrices.\nThe instance provides the ability to refer to integer power of matrices via the auto-generated `gpow`.\nThis is done in a new file to allow selective use.\nMany API lemmas are provided to facilitate usage of the new `gpow`, many copied in form/content from\n`algebra/group_with_zero/power.lean`, which provides a similar API.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/matrix/fpow.lean", "changes": [["add", "theorem", "det_fpow", ["is_unit"]], ["add", "theorem", "fpow_fpow", ["matrix", "commute"]], ["add", "theorem", "fpow_fpow_self", ["matrix", "commute"]], ["add", "theorem", "fpow_left", ["matrix", "commute"]], ["add", "theorem", "fpow_right", ["matrix", "commute"]], ["add", "theorem", "fpow_self", ["matrix", "commute"]], ["add", "theorem", "mul_fpow", ["matrix", "commute"]], ["add", "theorem", "self_fpow", ["matrix", "commute"]], ["add", "theorem", "fpow_add", ["matrix"]], ["add", "theorem", "fpow_add_of_nonneg", ["matrix"]], ["add", "theorem", "fpow_add_of_nonpos", ["matrix"]], ["add", "theorem", "fpow_add_one", ["matrix"]], ["add", "theorem", "fpow_add_one_of_ne_neg_one", ["matrix"]], ["add", "theorem", "fpow_bit0'", ["matrix"]], ["add", "theorem", "fpow_bit0", ["matrix"]], ["add", "theorem", "fpow_bit1'", ["matrix"]], ["add", "theorem", "fpow_bit1", ["matrix"]], ["add", "theorem", "fpow_coe_nat", ["matrix"]], ["add", "theorem", "fpow_mul'", ["matrix"]], ["add", "theorem", "fpow_mul", ["matrix"]], ["add", "theorem", "fpow_ne_zero_of_is_unit_det", ["matrix"]], ["add", "theorem", "fpow_neg", ["matrix"]], ["add", "theorem", "fpow_neg_coe_nat", ["matrix"]], ["add", "theorem", "fpow_neg_mul_fpow_self", ["matrix"]], ["add", "theorem", "fpow_neg_one", ["matrix"]], ["add", "theorem", "fpow_one_add", ["matrix"]], ["add", "theorem", "fpow_sub", ["matrix"]], ["add", "theorem", "fpow_sub_one", ["matrix"]], ["add", "theorem", "inv_fpow'", ["matrix"]], ["add", "theorem", "inv_fpow", ["matrix"]], ["add", "theorem", "inv_pow'", ["matrix"]], ["add", "theorem", "is_unit_det_fpow_iff", ["matrix"]], ["add", "theorem", "one_div_fpow", ["matrix"]], ["add", "theorem", "one_div_pow", ["matrix"]], ["add", "theorem", "one_fpow", ["matrix"]], ["add", "theorem", "pow_inv_comm'", ["matrix"]], ["add", "theorem", "pow_sub'", ["matrix"]], ["add", "theorem", "fpow_right", ["matrix", "semiconj_by"]], ["add", "theorem", "coe_fpow", ["matrix", "units"]], ["add", "theorem", "coe_inv''", ["matrix", "units"]], ["add", "theorem", "zero_fpow", ["matrix"]], ["add", "theorem", "zero_fpow_eq", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "nonsing_inv_cancel_or_zero", ["matrix"]]]}]}, {"timestamp": 1632814157, "sha": "01adfd65", "message": "chore(analysis/special_functions): add some `@[simp]` attrs (#9423)\nAdd `@[simp]` attrs to `real.sin_add_pi` and similar lemmas.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["mod", "theorem", "cos_add_int_mul_two_pi", ["real"]], ["mod", "theorem", "cos_add_nat_mul_two_pi", ["real"]], ["mod", "theorem", "cos_add_pi", ["real"]], ["mod", "theorem", "cos_add_two_pi", ["real"]], ["mod", "theorem", "cos_int_mul_two_pi", ["real"]], ["mod", "theorem", "cos_int_mul_two_pi_add_pi", ["real"]], ["mod", "theorem", "cos_int_mul_two_pi_sub", ["real"]], ["mod", "theorem", "cos_int_mul_two_pi_sub_pi", ["real"]], ["mod", "theorem", "cos_nat_mul_two_pi", ["real"]], ["mod", "theorem", "cos_nat_mul_two_pi_add_pi", ["real"]], ["mod", "theorem", "cos_nat_mul_two_pi_sub", ["real"]], ["mod", "theorem", "cos_nat_mul_two_pi_sub_pi", ["real"]], ["mod", "theorem", "cos_pi_sub", ["real"]], ["mod", "theorem", "cos_sub_int_mul_two_pi", ["real"]], ["mod", "theorem", "cos_sub_nat_mul_two_pi", ["real"]], ["mod", "theorem", "cos_sub_pi", ["real"]], ["mod", "theorem", "cos_sub_two_pi", ["real"]], ["mod", "theorem", "cos_two_pi_sub", ["real"]], ["mod", "theorem", "sin_add_int_mul_two_pi", ["real"]], ["mod", "theorem", "sin_add_nat_mul_two_pi", ["real"]], ["mod", "theorem", "sin_add_pi", ["real"]], ["mod", "theorem", "sin_add_two_pi", ["real"]], ["mod", "theorem", "sin_int_mul_pi", ["real"]], ["mod", "theorem", "sin_int_mul_two_pi_sub", ["real"]], ["mod", "theorem", "sin_nat_mul_pi", ["real"]], ["mod", "theorem", "sin_nat_mul_two_pi_sub", ["real"]], ["mod", "theorem", "sin_pi_sub", ["real"]], ["mod", "theorem", "sin_sub_int_mul_two_pi", ["real"]], ["mod", "theorem", "sin_sub_nat_mul_two_pi", ["real"]], ["mod", "theorem", "sin_sub_pi", ["real"]], ["mod", "theorem", "sin_sub_two_pi", ["real"]], ["mod", "theorem", "sin_two_pi_sub", ["real"]]]}]}, {"timestamp": 1632814156, "sha": "61086166", "message": "doc(*): remove docstrings from copyright headers (#9411)\nThis moves/removes the docs from the copyright header that are enough to make for the missing module docstring/redundant with the module docstring.", "changes": [{"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": []}, {"oldPath": "src/category_theory/category/Kleisli.lean", "newPath": "src/category_theory/category/Kleisli.lean", "changes": []}, {"oldPath": "src/data/lazy_list/basic.lean", "newPath": "src/data/lazy_list/basic.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "src/tactic/simp_rw.lean", "newPath": "src/tactic/simp_rw.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "src/topology/algebra/localization.lean", "newPath": "src/topology/algebra/localization.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "test/conv/conv.lean", "newPath": "test/conv/conv.lean", "changes": []}, {"oldPath": "test/finish1.lean", "newPath": "test/finish1.lean", "changes": []}, {"oldPath": "test/finish2.lean", "newPath": "test/finish2.lean", "changes": []}, {"oldPath": "test/finish3.lean", "newPath": "test/finish3.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num_ext.lean", "newPath": "test/norm_num_ext.lean", "changes": []}, {"oldPath": "test/simp_rw.lean", "newPath": "test/simp_rw.lean", "changes": []}]}, {"timestamp": 1632814154, "sha": "36c09f7b", "message": "doc(order/*): use \"monotone\" / \"antitone\" in place of \"monotonically increasing\" / \"monotonically decreasing\" (#9408)\nThis PR cleans up the references to monotone and antitone function in lemmas and docstrings.\nIt doesn't touch anything beyond the docstrings.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordnode.lean", "newPath": "src/data/ordmap/ordnode.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/holder.lean", "newPath": "src/topology/metric_space/holder.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1632814153, "sha": "22f24091", "message": "chore(measure_theory/integral/interval_integral): change of variables for normed-space target (#9350)\nRe-state change of variables for `interval_integral` for a function with target a real normed space `E`, rather than just `ℝ`. The proofs are exactly the same.", "changes": [{"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "integral_comp_smul_deriv''", ["interval_integral"]], ["add", "theorem", "integral_comp_smul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_comp_smul_deriv", ["interval_integral"]], ["add", "theorem", "integral_deriv_comp_smul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_deriv_comp_smul_deriv", ["interval_integral"]]]}]}, {"timestamp": 1632810803, "sha": "1db626ee", "message": "feat(analysis/normed_space/is_bounded_bilinear_map): direct proof of continuity (#9390)\nPreviously `is_bounded_bilinear_map.continuous`, the continuity of a bounded bilinear map, was deduced from its differentiability and lived in `analysis.calculus.fderiv`. This PR gives a direct proof so it can live in `analysis.normed_space.bounded_linear_maps`.\nTwo consequences of this lemma are also moved earlier in the hierarchy:\n- `continuous_linear_equiv.is_open`, the openness of the set of continuous linear equivalences in the space of continuous linear maps, moves from `analysis.calculus.fderiv` to `analysis.normed_space.bounded_linear_maps`\n- `continuous_inner`, the continuity of the inner product, moves from `analysis.inner_product_space.calculus` to `analysis.inner_product_space.basic`.\nPreviously discussed at\nhttps://github.com/leanprover-community/mathlib/pull/4407#pullrequestreview-506198222", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["del", "theorem", "continuous", ["is_bounded_bilinear_map"]], ["del", "theorem", "continuous_left", ["is_bounded_bilinear_map"]], ["del", "theorem", "continuous_right", ["is_bounded_bilinear_map"]]]}, {"oldPath": "src/analysis/inner_product_space/basic.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["add", "theorem", "inner", ["continuous"]], ["add", "theorem", "inner", ["continuous_at"]], ["add", "theorem", "continuous_inner", []], ["add", "theorem", "inner", ["continuous_on"]], ["add", "theorem", "inner", ["continuous_within_at"]], ["add", "theorem", "inner", ["filter", "tendsto"]], ["add", "theorem", "is_bounded_bilinear_map_inner", []]]}, {"oldPath": "src/analysis/inner_product_space/calculus.lean", "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": [["del", "theorem", "inner", ["continuous"]], ["del", "theorem", "inner", ["continuous_at"]], ["del", "theorem", "continuous_inner", []], ["del", "theorem", "inner", ["continuous_on"]], ["del", "theorem", "inner", ["continuous_within_at"]], ["del", "theorem", "inner", ["filter", "tendsto"]], ["del", "theorem", "is_bounded_bilinear_map_inner", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "continuous", ["is_bounded_bilinear_map"]], ["add", "theorem", "continuous_left", ["is_bounded_bilinear_map"]], ["add", "theorem", "continuous_right", ["is_bounded_bilinear_map"]]]}]}, {"timestamp": 1632799386, "sha": "4b5bf56b", "message": "feat(measure_theory/integral/interval_integral): one more FTC-2 (#9409)", "changes": [{"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "integral_eq_integral_of_support_subset", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_at_of_tendsto", ["interval_integral"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_within_at_update_same", []], ["add", "theorem", "congr_continuous_within_at", ["filter", "eventually_eq"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "continuous_on_update_iff", []], ["add", "theorem", "continuous_within_at_update_of_ne", []], ["add", "theorem", "nhds_within_compl_singleton", ["ne"]]]}]}, {"timestamp": 1632790973, "sha": "8c5d93b0", "message": "feat(analysis/special_functions/complex/log): `exp ⁻¹' s` is countable (#9410)\nAlso prove that the preimage of a countable set under an injective map\nis countable.", "changes": [{"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["add", "theorem", "countable_preimage_exp", ["complex"]], ["mod", "theorem", "range_exp", ["complex"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "preimage_of_inj_on", ["set", "countable"]], ["add", "theorem", "countable_of_inj_on", ["set", "maps_to"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "injective_cod_restrict", ["set"]]]}]}, {"timestamp": 1632790972, "sha": "b21bc971", "message": "feat(analysis/special_functions): limits of `arg` and `log` at a real negative (#9406)\nAlso add a `can_lift ℂ ℝ` instance.", "changes": [{"oldPath": "src/analysis/special_functions/complex/arg.lean", "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "continuous_within_at_arg_of_re_neg_of_im_zero", ["complex"]], ["add", "theorem", "tendsto_arg_nhds_within_im_neg_of_re_neg_of_im_zero", ["complex"]], ["add", "theorem", "tendsto_arg_nhds_within_im_nonneg_of_re_neg_of_im_zero", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/complex/log.lean", "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["add", "theorem", "continuous_within_at_log_of_re_neg_of_im_zero", ["complex"]], ["add", "theorem", "tendsto_log_nhds_within_im_neg_of_re_neg_of_im_zero", ["complex"]], ["add", "theorem", "tendsto_log_nhds_within_im_nonneg_of_re_neg_of_im_zero", ["complex"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}]}, {"timestamp": 1632782123, "sha": "82795105", "message": "feat(*): Clean up some misstated lemmas about algebra (#9417)\nSimilar to #9395 clean up a few lemmas whose statement doesn't match the name / docstring about algebraic things, all of these are duplicates of other lemmas, so look like copy paste errors.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "cancel_left", ["mul_hom"]]]}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["mod", "theorem", "is_compl_even_odd", ["int"]]]}, {"oldPath": "src/linear_algebra/matrix/symmetric.lean", "newPath": "src/linear_algebra/matrix/symmetric.lean", "changes": []}]}, {"timestamp": 1632775993, "sha": "0d37fd67", "message": "feat(data/polynomial/algebra_map): aeval_tower (#9250)", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["del", "theorem", "commutes_of_tower", ["alg_hom"]], ["add", "theorem", "map_algebra_map", ["alg_hom"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["mod", "theorem", "C_eq_algebra_map", ["polynomial"]], ["add", "def", "aeval_tower", ["polynomial"]], ["add", "theorem", "aeval_tower_C", ["polynomial"]], ["add", "theorem", "aeval_tower_X", ["polynomial"]], ["add", "theorem", "aeval_tower_algebra_map", ["polynomial"]], ["add", "theorem", "aeval_tower_comp_C", ["polynomial"]], ["add", "theorem", "aeval_tower_comp_algebra_map", ["polynomial"]], ["add", "theorem", "aeval_tower_comp_to_alg_hom", ["polynomial"]], ["add", "theorem", "aeval_tower_id", ["polynomial"]], ["add", "theorem", "aeval_tower_of_id", ["polynomial"]], ["add", "theorem", "aeval_tower_to_alg_hom", ["polynomial"]], ["add", "theorem", "alg_hom_ext'", ["polynomial"]]]}]}, {"timestamp": 1632764960, "sha": "f181d81f", "message": "chore(analysis/special_functions/exp_log): add some missing dot notation lemmas (#9405)", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "cexp", ["continuous"]], ["add", "theorem", "cexp", ["continuous_at"]], ["add", "theorem", "cexp", ["continuous_on"]], ["add", "theorem", "cexp", ["continuous_within_at"]], ["add", "theorem", "cexp", ["filter", "tendsto"]]]}]}, {"timestamp": 1632764959, "sha": "9175158f", "message": "refactor(analysis/convex/function): generalize lemmas about convexity/concavity of functions, prove concave Jensen (#9356)\n`convex_on` and `concave_on` are currently only defined for real vector spaces. This generalizes ℝ to an arbitrary `ordered_semiring`. As a result, we now have the concave Jensen inequality for free.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "combo_self", ["convex"]]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": []}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["mod", "theorem", "add", ["concave_on"]], ["mod", "theorem", "comp_affine_map", ["concave_on"]], ["mod", "theorem", "comp_linear_map", ["concave_on"]], ["add", "theorem", "concave_ge", ["concave_on"]], ["del", "theorem", "concave_le", ["concave_on"]], ["mod", "theorem", "convex_hypograph", ["concave_on"]], ["mod", "theorem", "convex_lt", ["concave_on"]], ["add", "theorem", "exists_le_of_center_mass", ["concave_on"]], ["add", "theorem", "exists_le_of_mem_convex_hull", ["concave_on"]], ["mod", "theorem", "inf", ["concave_on"]], ["add", "theorem", "le_map_center_mass", ["concave_on"]], ["add", "theorem", "le_map_sum", ["concave_on"]], ["mod", "theorem", "le_on_segment'", ["concave_on"]], ["mod", "theorem", "le_on_segment", ["concave_on"]], ["mod", "theorem", "le_right_of_left_le'", ["concave_on"]], ["mod", "theorem", "le_right_of_left_le", ["concave_on"]], ["mod", "theorem", "left_le_of_le_right'", ["concave_on"]], ["mod", "theorem", "left_le_of_le_right", ["concave_on"]], ["mod", "theorem", "slope_mono_adjacent", ["concave_on"]], ["mod", "theorem", "smul", ["concave_on"]], ["mod", "theorem", "subset", ["concave_on"]], ["mod", "theorem", "translate_left", ["concave_on"]], ["mod", "theorem", "translate_right", ["concave_on"]], ["mod", "def", "concave_on", []], ["mod", "theorem", "concave_on_const", []], ["mod", "theorem", "concave_on_id", []], ["mod", "theorem", "concave_on_iff_convex_hypograph", []], ["add", "theorem", "concave_on_iff_slope_mono_adjacent", []], ["add", "theorem", "concave_on_of_slope_mono_adjacent", []], ["del", "theorem", "concave_on_real_iff_slope_mono_adjacent", []], ["del", "theorem", "concave_on_real_of_slope_mono_adjacent", []], ["mod", "theorem", "add", ["convex_on"]], ["mod", "theorem", "comp_affine_map", ["convex_on"]], ["mod", "theorem", "comp_linear_map", ["convex_on"]], ["mod", "theorem", "convex_epigraph", ["convex_on"]], ["mod", "theorem", "convex_le", ["convex_on"]], ["mod", "theorem", "convex_lt", ["convex_on"]], ["mod", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["mod", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["mod", "theorem", "le_left_of_right_le'", ["convex_on"]], ["mod", "theorem", "le_left_of_right_le", ["convex_on"]], ["mod", "theorem", "le_on_segment'", ["convex_on"]], ["mod", "theorem", "le_on_segment", ["convex_on"]], ["mod", "theorem", "le_right_of_left_le'", ["convex_on"]], ["mod", "theorem", "le_right_of_left_le", ["convex_on"]], ["mod", "theorem", "map_center_mass_le", ["convex_on"]], ["mod", "theorem", "map_sum_le", ["convex_on"]], ["mod", "theorem", "slope_mono_adjacent", ["convex_on"]], ["mod", "theorem", "smul", ["convex_on"]], ["mod", "theorem", "subset", ["convex_on"]], ["mod", "theorem", "sup", ["convex_on"]], ["mod", "theorem", "translate_left", ["convex_on"]], ["mod", "theorem", "translate_right", ["convex_on"]], ["mod", "def", "convex_on", []], ["mod", "theorem", "convex_on_const", []], ["mod", "theorem", "convex_on_id", []], ["mod", "theorem", "convex_on_iff_convex_epigraph", []], ["add", "theorem", "convex_on_iff_slope_mono_adjacent", []], ["add", "theorem", "convex_on_of_slope_mono_adjacent", []], ["del", "theorem", "convex_on_real_iff_slope_mono_adjacent", []], ["del", "theorem", "convex_on_real_of_slope_mono_adjacent", []], ["mod", "theorem", "concave_on", ["linear_map"]], ["mod", "theorem", "convex_on", ["linear_map"]], ["mod", "theorem", "concave_on_of_lt", ["linear_order"]], ["mod", "theorem", "convex_on_of_lt", ["linear_order"]], ["mod", "theorem", "neg_concave_on_iff", []], ["mod", "theorem", "neg_convex_on_iff", []]]}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}]}, {"timestamp": 1632748040, "sha": "5dfb76f5", "message": "feat(analysis/calculus/fderiv): generalize `const_smul` lemmas (#9399)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "const_smul", ["differentiable"]], ["mod", "theorem", "const_smul", ["differentiable_at"]], ["mod", "theorem", "const_smul", ["differentiable_on"]], ["mod", "theorem", "const_smul", ["differentiable_within_at"]], ["mod", "theorem", "fderiv_const_smul", []], ["mod", "theorem", "const_smul", ["has_fderiv_at"]], ["mod", "theorem", "const_smul", ["has_fderiv_at_filter"]], ["mod", "theorem", "const_smul", ["has_fderiv_within_at"]], ["mod", "theorem", "const_smul", ["has_strict_fderiv_at"]]]}]}, {"timestamp": 1632748038, "sha": "954896a1", "message": "feat(data/nat/choose/cast): Cast of binomial coefficients equals a Pochhammer polynomial (#9394)\nThis adds some glue between `nat.factorial`/`nat.asc_factorial`/`nat.desc_factorial` and `pochhammer` to provide some API to calculate binomial coefficients in a semiring. For example, `n.choose 2` as a real is `n * (n - 1)/2`.\nI also move files as such:\n* create `data.nat.choose.cast`\n* create `data.nat.factorial.cast`\n* rename `data.nat.factorial` to `data.nat.factorial.basic`", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/choose/cast.lean", "changes": [["add", "theorem", "cast_add_choose", ["nat"]], ["add", "theorem", "cast_choose", ["nat"]], ["add", "theorem", "cast_choose_eq_pochhammer_div", ["nat"]], ["add", "theorem", "cast_choose_two", ["nat"]]]}, {"oldPath": "src/data/nat/choose/default.lean", "newPath": "src/data/nat/choose/default.lean", "changes": []}, {"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": [["del", "theorem", "cast_add_choose", ["nat"]], ["del", "theorem", "cast_choose", ["nat"]]]}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial/basic.lean", "changes": [["add", "theorem", "factorial_two", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/factorial/cast.lean", "changes": [["add", "theorem", "cast_asc_factorial", ["nat"]], ["add", "theorem", "cast_desc_factorial", ["nat"]], ["add", "theorem", "cast_desc_factorial_two", ["nat"]], ["add", "theorem", "cast_factorial", ["nat"]]]}, {"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": [["add", "theorem", "pochhammer_nat_eq_desc_factorial", []], ["add", "theorem", "pochhammer_succ_eval", []]]}]}, {"timestamp": 1632748037, "sha": "9a30f8cf", "message": "refactor(data/fin): drop `fin.cast_add_right` (#9371)\nThis was a duplicate of `fin.nat_add`. Also simplify some definitions of equivalences.", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "theorem", "fin_add_flip_apply_cast_add", []], ["del", "theorem", "fin_add_flip_apply_left", []], ["add", "theorem", "fin_add_flip_apply_mk_left", []], ["add", "theorem", "fin_add_flip_apply_mk_right", []], ["add", "theorem", "fin_add_flip_apply_nat_add", []], ["del", "theorem", "fin_add_flip_apply_right", []], ["add", "theorem", "fin_succ_equiv'_succ_above", []], ["add", "theorem", "fin_succ_equiv'_symm_some", []], ["mod", "theorem", "fin_sum_fin_equiv_symm_apply_cast_add", []], ["del", "theorem", "fin_sum_fin_equiv_symm_apply_cast_add_right", []], ["del", "theorem", "fin_sum_fin_equiv_symm_apply_left", []], ["add", "theorem", "fin_sum_fin_equiv_symm_apply_nat_add", []], ["del", "theorem", "fin_sum_fin_equiv_symm_apply_right", []]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "def", "add_cases", ["fin"]], ["add", "theorem", "add_nat_mk", ["fin"]], ["add", "theorem", "add_nat_sub_nat", ["fin"]], ["add", "theorem", "cast_add_cast_lt", ["fin"]], ["add", "theorem", "cast_add_nat", ["fin"]], ["del", "def", "cast_add_right", ["fin"]], ["add", "theorem", "cast_lt_cast_add", ["fin"]], ["add", "theorem", "cast_nat_add", ["fin"]], ["del", "theorem", "coe_cast_add_right", ["fin"]], ["del", "theorem", "le_cast_add_right", ["fin"]], ["add", "theorem", "le_coe_add_nat", ["fin"]], ["add", "theorem", "le_coe_nat_add", ["fin"]], ["add", "theorem", "nat_add_mk", ["fin"]], ["add", "theorem", "nat_add_sub_nat_cast", ["fin"]], ["add", "theorem", "sub_nat_add_nat", ["fin"]], ["add", "theorem", "sub_nat_mk", ["fin"]]]}]}, {"timestamp": 1632738559, "sha": "850784cf", "message": "chore(order/*): rename `strict_mono_{incr,decr}_on` to `strict_{mono,anti}_on` (#9401)\nThis was done as a direct find and replace", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["del", "theorem", "strict_mono_incr_on_pow", []], ["add", "theorem", "strict_mono_on_pow", []]]}, {"oldPath": "src/algebra/order/field.lean", "newPath": "src/algebra/order/field.lean", "changes": [["add", "theorem", "one_div_strict_anti_on", []], ["del", "theorem", "one_div_strict_mono_decr_on", []]]}, {"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["del", "theorem", "strict_mono_incr_on_mul_self", []], ["add", "theorem", "strict_mono_on_mul_self", []]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "strict_anti_on_log", ["real"]], ["del", "theorem", "strict_mono_decr_on_log", ["real"]], ["del", "theorem", "strict_mono_incr_on_log", ["real"]], ["add", "theorem", "strict_mono_on_log", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/arctan.lean", "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric/basic.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["mod", "theorem", "inj_on_cos", ["real"]], ["add", "theorem", "strict_anti_on_cos", ["real"]], ["del", "theorem", "strict_mono_decr_on_cos", ["real"]], ["del", "theorem", "strict_mono_incr_on_sin", ["real"]], ["del", "theorem", "strict_mono_incr_on_tan", ["real"]], ["add", "theorem", "strict_mono_on_sin", ["real"]], ["add", "theorem", "strict_mono_on_tan", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric/inverse.lean", "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": [["mod", "theorem", "arccos_inj_on", ["real"]], ["mod", "theorem", "inj_on_arcsin", ["real"]], ["add", "theorem", "strict_anti_on_arccos", ["real"]], ["del", "theorem", "strict_mono_decr_on_arccos", ["real"]], ["del", "theorem", "strict_mono_incr_on_arcsin", ["real"]], ["add", "theorem", "strict_mono_on_arcsin", ["real"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inj_on", ["strict_anti_on"]], ["del", "theorem", "comp_strict_mono_incr_on", ["strict_mono"]], ["add", "theorem", "comp_strict_mono_on", ["strict_mono"]], ["del", "theorem", "inj_on", ["strict_mono_decr_on"]], ["del", "theorem", "comp", ["strict_mono_incr_on"]], ["del", "theorem", "inj_on", ["strict_mono_incr_on"]], ["add", "theorem", "comp", ["strict_mono_on"]], ["add", "theorem", "inj_on", ["strict_mono_on"]]]}, {"oldPath": "src/data/set/intervals/proj_Icc.lean", "newPath": "src/data/set/intervals/proj_Icc.lean", "changes": [["del", "theorem", "strict_mono_incr_on_proj_Icc", ["set"]], ["add", "theorem", "strict_mono_on_proj_Icc", ["set"]], ["del", "theorem", "strict_mono_incr_on_Icc_extend", ["strict_mono"]], ["add", "theorem", "strict_mono_on_Icc_extend", ["strict_mono"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "le_iff_le", ["strict_anti_on"]], ["add", "theorem", "lt_iff_lt", ["strict_anti_on"]], ["add", "def", "strict_anti_on", []], ["del", "theorem", "le_iff_le", ["strict_mono_decr_on"]], ["del", "theorem", "lt_iff_lt", ["strict_mono_decr_on"]], ["del", "def", "strict_mono_decr_on", []], ["del", "theorem", "le_iff_le", ["strict_mono_incr_on"]], ["del", "theorem", "lt_iff_lt", ["strict_mono_incr_on"]], ["del", "def", "strict_mono_incr_on", []], ["add", "theorem", "le_iff_le", ["strict_mono_on"]], ["add", "theorem", "lt_iff_lt", ["strict_mono_on"]], ["add", "def", "strict_mono_on", []]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "continuous_at_left_of_closure_image_mem_nhds_within", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_left_of_exists_between", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_left_of_image_mem_nhds_within", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_left_of_surj_on", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_of_closure_image_mem_nhds", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_of_exists_between", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_of_image_mem_nhds", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_right_of_closure_image_mem_nhds_within", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_right_of_exists_between", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_right_of_image_mem_nhds_within", ["strict_mono_incr_on"]], ["del", "theorem", "continuous_at_right_of_surj_on", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_left_of_closure_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_left_of_exists_between", ["strict_mono_on"]], ["add", "theorem", "continuous_at_left_of_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_left_of_surj_on", ["strict_mono_on"]], ["add", "theorem", "continuous_at_of_closure_image_mem_nhds", ["strict_mono_on"]], ["add", "theorem", "continuous_at_of_exists_between", ["strict_mono_on"]], ["add", "theorem", "continuous_at_of_image_mem_nhds", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_closure_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_exists_between", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_image_mem_nhds_within", ["strict_mono_on"]], ["add", "theorem", "continuous_at_right_of_surj_on", ["strict_mono_on"]]]}]}, {"timestamp": 1632738556, "sha": "14727997", "message": "chore(order): globally replace \"antimono\" with \"antitone\" (#9400)\nThis was done with the regex `(?<=\\b|_)antimono(?=\\b|_)`", "changes": [{"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": [["del", "theorem", "derived_series_of_ideal_antimono", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_antitone", ["lie_algebra"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["del", "theorem", "antimono_of_deriv_nonpos", []], ["add", "theorem", "antitone_of_deriv_nonpos", []], ["del", "theorem", "concave_on_of_deriv_antimono", []], ["add", "theorem", "concave_on_of_deriv_antitone", []], ["del", "theorem", "concave_on_univ_of_deriv_antimono", []], ["add", "theorem", "concave_on_univ_of_deriv_antitone", []], ["del", "theorem", "antimono_of_deriv_nonpos", ["convex"]], ["add", "theorem", "antitone_of_deriv_nonpos", ["convex"]], ["del", "theorem", "strict_antimono_of_deriv_neg", ["convex"]], ["add", "theorem", "strict_antitone_of_deriv_neg", ["convex"]], ["del", "theorem", "strict_antimono_of_deriv_neg", []], ["add", "theorem", "strict_antitone_of_deriv_neg", []]]}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["del", "theorem", "integral_sin_pow_antimono", []], ["add", "theorem", "integral_sin_pow_antitone", []]]}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}, {"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["del", "theorem", "lower_central_series_antimono", []], ["add", "theorem", "lower_central_series_antitone", []]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["del", "theorem", "ae_measurable_restrict_of_antimono_on", []], ["add", "theorem", "ae_measurable_restrict_of_antitone_on", []], ["del", "theorem", "measurable_of_antimono", []], ["add", "theorem", "measurable_of_antitone", []]]}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["del", "theorem", "ess_inf_antimono_measure", []], ["add", "theorem", "ess_inf_antitone_measure", []]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["del", "theorem", "antimono", ["measure_theory", "Lp"]], ["add", "theorem", "antitone", ["measure_theory", "Lp"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["del", "theorem", "integrable_on_compact_of_antimono", []], ["del", "theorem", "integrable_on_compact_of_antimono_on", []], ["add", "theorem", "integrable_on_compact_of_antitone", []], ["add", "theorem", "integrable_on_compact_of_antitone_on", []]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["del", "theorem", "interval_integrable_of_antimono", []], ["del", "theorem", "interval_integrable_of_antimono_on", []], ["add", "theorem", "interval_integrable_of_antitone", []], ["add", "theorem", "interval_integrable_of_antitone_on", []]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["del", "theorem", "tendsto_set_integral_of_antimono", ["measure_theory"]], ["add", "theorem", "tendsto_set_integral_of_antitone", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["del", "theorem", "antimono", ["is_compl"]], ["add", "theorem", "antitone", ["is_compl"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["del", "theorem", "tendsto", ["filter", "has_antimono_basis"]], ["add", "theorem", "tendsto", ["filter", "has_antitone_basis"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["del", "theorem", "antimono_seq_of_seq", ["filter"]], ["add", "theorem", "antitone_seq_of_seq", ["filter"]], ["del", "structure", "has_antimono_basis", ["filter"]], ["add", "structure", "has_antitone_basis", ["filter"]], ["del", "structure", "is_antimono_basis", ["filter"]], ["add", "structure", "is_antitone_basis", ["filter"]], ["del", "theorem", "exists_antimono_basis", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_antimono_seq'", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_antimono_subbasis", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_antitone_basis", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_antitone_seq'", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_antitone_subbasis", ["filter", "is_countably_generated"]], ["del", "theorem", "is_countably_generated_iff_exists_antimono_basis", ["filter"]], ["add", "theorem", "is_countably_generated_iff_exists_antitone_basis", ["filter"]]]}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["del", "theorem", "comp_antimono", ["is_extr_filter"]], ["add", "theorem", "comp_antitone", ["is_extr_filter"]], ["del", "theorem", "comp_antimono", ["is_extr_on"]], ["add", "theorem", "comp_antitone", ["is_extr_on"]], ["del", "theorem", "comp_antimono", ["is_max_filter"]], ["add", "theorem", "comp_antitone", ["is_max_filter"]], ["del", "theorem", "comp_antimono", ["is_max_on"]], ["add", "theorem", "comp_antitone", ["is_max_on"]], ["del", "theorem", "comp_antimono", ["is_min_filter"]], ["add", "theorem", "comp_antitone", ["is_min_filter"]], ["del", "theorem", "comp_antimono", ["is_min_on"]], ["add", "theorem", "comp_antitone", ["is_min_on"]]]}, {"oldPath": "src/order/filter/indicator_function.lean", "newPath": "src/order/filter/indicator_function.lean", "changes": [["del", "theorem", "tendsto_indicator_of_antimono", []], ["add", "theorem", "tendsto_indicator_of_antitone", []]]}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "exists_seq_strict_antimono_tendsto'", []], ["del", "theorem", "exists_seq_strict_antimono_tendsto", []], ["add", "theorem", "exists_seq_strict_antitone_tendsto'", []], ["add", "theorem", "exists_seq_strict_antitone_tendsto", []]]}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": [["del", "theorem", "comp_antimono", ["is_local_extr"]], ["add", "theorem", "comp_antitone", ["is_local_extr"]], ["del", "theorem", "comp_antimono", ["is_local_extr_on"]], ["add", "theorem", "comp_antitone", ["is_local_extr_on"]], ["del", "theorem", "comp_antimono", ["is_local_max"]], ["add", "theorem", "comp_antitone", ["is_local_max"]], ["del", "theorem", "comp_antimono", ["is_local_max_on"]], ["add", "theorem", "comp_antitone", ["is_local_max_on"]], ["del", "theorem", "comp_antimono", ["is_local_min"]], ["add", "theorem", "comp_antitone", ["is_local_min"]], ["del", "theorem", "comp_antimono", ["is_local_min_on"]], ["add", "theorem", "comp_antitone", ["is_local_min_on"]]]}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": [["del", "theorem", "comp_lower_semicontinuous_antimono", ["continuous"]], ["add", "theorem", "comp_lower_semicontinuous_antitone", ["continuous"]], ["del", "theorem", "comp_lower_semicontinuous_on_antimono", ["continuous"]], ["add", "theorem", "comp_lower_semicontinuous_on_antitone", ["continuous"]], ["del", "theorem", "comp_upper_semicontinuous_antimono", ["continuous"]], ["add", "theorem", "comp_upper_semicontinuous_antitone", ["continuous"]], ["del", "theorem", "comp_upper_semicontinuous_on_antimono", ["continuous"]], ["add", "theorem", "comp_upper_semicontinuous_on_antitone", ["continuous"]], ["del", "theorem", "comp_lower_semicontinuous_at_antimono", ["continuous_at"]], ["add", "theorem", "comp_lower_semicontinuous_at_antitone", ["continuous_at"]], ["del", "theorem", "comp_lower_semicontinuous_within_at_antimono", ["continuous_at"]], ["add", "theorem", "comp_lower_semicontinuous_within_at_antitone", ["continuous_at"]], ["del", "theorem", "comp_upper_semicontinuous_at_antimono", ["continuous_at"]], ["add", "theorem", "comp_upper_semicontinuous_at_antitone", ["continuous_at"]], ["del", "theorem", "comp_upper_semicontinuous_within_at_antimono", ["continuous_at"]], ["add", "theorem", "comp_upper_semicontinuous_within_at_antitone", ["continuous_at"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1632738554, "sha": "d1c68ef7", "message": "docs(docker): adjust readme to reflect that the PR was merged (#9303)", "changes": [{"oldPath": ".docker/README.md", "newPath": ".docker/README.md", "changes": []}]}, {"timestamp": 1632735291, "sha": "cafd6fbc", "message": "chore(measure_theory/decomposition/lebesgue): rename `radon_nikodym_deriv` to `rn_deriv` (#9386)", "changes": [{"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["del", "theorem", "eq_radon_nikodym_deriv", ["measure_theory", "measure"]], ["add", "theorem", "eq_rn_deriv", ["measure_theory", "measure"]], ["del", "theorem", "lintegral_radon_nikodym_deriv_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "lintegral_rn_deriv_lt_top", ["measure_theory", "measure"]], ["del", "theorem", "measurable_radon_nikodym_deriv", ["measure_theory", "measure"]], ["add", "theorem", "measurable_rn_deriv", ["measure_theory", "measure"]], ["del", "def", "radon_nikodym_deriv", ["measure_theory", "measure"]], ["add", "def", "rn_deriv", ["measure_theory", "measure"]], ["del", "theorem", "with_density_radon_nikodym_deriv_le", ["measure_theory", "measure"]], ["add", "theorem", "with_density_rn_deriv_le", ["measure_theory", "measure"]], ["del", "theorem", "eq_radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "eq_rn_deriv", ["measure_theory", "signed_measure"]], ["del", "theorem", "integrable_radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "integrable_rn_deriv", ["measure_theory", "signed_measure"]], ["del", "theorem", "measurable_radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "measurable_rn_deriv", ["measure_theory", "signed_measure"]], ["del", "def", "radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["del", "theorem", "radon_nikodym_deriv_add", ["measure_theory", "signed_measure"]], ["del", "theorem", "radon_nikodym_deriv_neg", ["measure_theory", "signed_measure"]], ["del", "theorem", "radon_nikodym_deriv_smul", ["measure_theory", "signed_measure"]], ["del", "theorem", "radon_nikodym_deriv_sub", ["measure_theory", "signed_measure"]], ["add", "def", "rn_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "rn_deriv_add", ["measure_theory", "signed_measure"]], ["add", "theorem", "rn_deriv_neg", ["measure_theory", "signed_measure"]], ["add", "theorem", "rn_deriv_smul", ["measure_theory", "signed_measure"]], ["add", "theorem", "rn_deriv_sub", ["measure_theory", "signed_measure"]], ["del", "theorem", "singular_part_add_with_density_radon_nikodym_deriv_eq", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_add_with_density_rn_deriv_eq", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": [["del", "theorem", "absolutely_continuous_iff_with_density_radon_nikodym_deriv_eq", ["measure_theory", "measure"]], ["add", "theorem", "absolutely_continuous_iff_with_density_rn_deriv_eq", ["measure_theory", "measure"]], ["del", "theorem", "with_density_radon_nikodym_deriv_eq", ["measure_theory", "measure"]], ["del", "theorem", "with_density_radon_nikodym_deriv_to_real_eq", ["measure_theory", "measure"]], ["add", "theorem", "with_density_rn_deriv_eq", ["measure_theory", "measure"]], ["add", "theorem", "with_density_rn_deriv_to_real_eq", ["measure_theory", "measure"]], ["del", "theorem", "absolutely_continuous_iff_with_densityᵥ_radon_nikodym_deriv_eq", ["measure_theory", "signed_measure"]], ["add", "theorem", "absolutely_continuous_iff_with_densityᵥ_rn_deriv_eq", ["measure_theory", "signed_measure"]], ["del", "theorem", "with_densityᵥ_radon_nikodym_deriv_eq", ["measure_theory", "signed_measure"]], ["add", "theorem", "with_densityᵥ_rn_deriv_eq", ["measure_theory", "signed_measure"]]]}]}, {"timestamp": 1632716423, "sha": "a4b92a3f", "message": "refactor(analysis/special_functions/trigonometric): split file (#9340)\nAnother mammoth file, cut into several pieces.", "changes": [{"oldPath": "archive/100-theorems-list/57_herons_formula.lean", "newPath": "archive/100-theorems-list/57_herons_formula.lean", "changes": []}, {"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": []}, {"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/special_functions/complex/arg.lean", "changes": [["add", "theorem", "arg_I", ["complex"]], ["add", "theorem", "arg_cos_add_sin_mul_I", ["complex"]], ["add", "theorem", "arg_eq_arg_iff", ["complex"]], ["add", "theorem", "arg_eq_arg_neg_add_pi_of_im_nonneg_of_re_neg", ["complex"]], ["add", "theorem", "arg_eq_arg_neg_sub_pi_of_im_neg_of_re_neg", ["complex"]], ["add", "theorem", "arg_eq_pi_iff", ["complex"]], ["add", "theorem", "arg_le_pi", ["complex"]], ["add", "theorem", "arg_neg_I", ["complex"]], ["add", "theorem", "arg_neg_one", ["complex"]], ["add", "theorem", "arg_of_real_of_neg", ["complex"]], ["add", "theorem", "arg_of_real_of_nonneg", ["complex"]], ["add", "theorem", "arg_one", ["complex"]], ["add", "theorem", "arg_real_mul", ["complex"]], ["add", "theorem", "arg_zero", ["complex"]], ["add", "theorem", "cos_arg", ["complex"]], ["add", "theorem", "ext_abs_arg", ["complex"]], ["add", "theorem", "neg_pi_lt_arg", ["complex"]], ["add", "theorem", "sin_arg", ["complex"]], ["add", "theorem", "tan_arg", ["complex"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/complex/log.lean", "changes": [["add", "theorem", "exists_eq_mul_self", ["complex"]], ["add", "theorem", "exists_pow_nat_eq", ["complex"]], ["add", "theorem", "exp_eq_exp_iff_exists_int", ["complex"]], ["add", "theorem", "exp_eq_exp_iff_exp_sub_eq_one", ["complex"]], ["add", "theorem", "exp_eq_one_iff", ["complex"]], ["add", "theorem", "exp_inj_of_neg_pi_lt_of_le_pi", ["complex"]], ["add", "def", "exp_local_homeomorph", ["complex"]], ["add", "theorem", "exp_log", ["complex"]], ["add", "theorem", "has_strict_deriv_at_log", ["complex"]], ["add", "theorem", "log_I", ["complex"]], ["add", "theorem", "log_exp", ["complex"]], ["add", "theorem", "log_im", ["complex"]], ["add", "theorem", "log_im_le_pi", ["complex"]], ["add", "theorem", "log_neg_I", ["complex"]], ["add", "theorem", "log_neg_one", ["complex"]], ["add", "theorem", "log_of_real_re", ["complex"]], ["add", "theorem", "log_one", ["complex"]], ["add", "theorem", "log_re", ["complex"]], ["add", "theorem", "log_zero", ["complex"]], ["add", "theorem", "neg_pi_lt_log_im", ["complex"]], ["add", "theorem", "of_real_log", ["complex"]], ["add", "theorem", "range_exp", ["complex"]], ["add", "theorem", "times_cont_diff_at_log", ["complex"]], ["add", "theorem", "two_pi_I_ne_zero", ["complex"]], ["add", "theorem", "clog", ["continuous"]], ["add", "theorem", "clog", ["continuous_at"]], ["add", "theorem", "clog", ["continuous_on"]], ["add", "theorem", "clog", ["continuous_within_at"]], ["add", "theorem", "clog", ["differentiable"]], ["add", "theorem", "clog", ["differentiable_at"]], ["add", "theorem", "clog", ["differentiable_on"]], ["add", "theorem", "clog", ["differentiable_within_at"]], ["add", "theorem", "clog", ["filter", "tendsto"]], ["add", "theorem", "clog", ["has_deriv_at"]], ["add", "theorem", "clog", ["has_deriv_within_at"]], ["add", "theorem", "clog", ["has_fderiv_at"]], ["add", "theorem", "clog", ["has_fderiv_within_at"]], ["add", "theorem", "clog", ["has_strict_deriv_at"]], ["add", "theorem", "clog", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/arctan.lean", "changes": [["add", "theorem", "deriv_arctan", []], ["add", "theorem", "deriv_within_arctan", []], ["add", "theorem", "arctan", ["differentiable"]], ["add", "theorem", "arctan", ["differentiable_at"]], ["add", "theorem", "arctan", ["differentiable_on"]], ["add", "theorem", "arctan", ["differentiable_within_at"]], ["add", "theorem", "fderiv_arctan", []], ["add", "theorem", "fderiv_within_arctan", []], ["add", "theorem", "arctan", ["has_deriv_at"]], ["add", "theorem", "arctan", ["has_deriv_within_at"]], ["add", "theorem", "arctan", ["has_fderiv_at"]], ["add", "theorem", "arctan", ["has_fderiv_within_at"]], ["add", "theorem", "arctan", ["has_strict_deriv_at"]], ["add", "theorem", "arctan", ["has_strict_fderiv_at"]], ["add", "theorem", "arcsin_eq_arctan", ["real"]], ["add", "theorem", "arctan_eq_arcsin", ["real"]], ["add", "theorem", "arctan_eq_of_tan_eq", ["real"]], ["add", "theorem", "arctan_lt_pi_div_two", ["real"]], ["add", "theorem", "arctan_mem_Ioo", ["real"]], ["add", "theorem", "arctan_neg", ["real"]], ["add", "theorem", "arctan_one", ["real"]], ["add", "theorem", "arctan_tan", ["real"]], ["add", "theorem", "arctan_zero", ["real"]], ["add", "theorem", "coe_tan_local_homeomorph", ["real"]], ["add", "theorem", "coe_tan_local_homeomorph_symm", ["real"]], ["add", "theorem", "continuous_arctan", ["real"]], ["add", "theorem", "continuous_at_arctan", ["real"]], ["add", "theorem", "continuous_at_tan", ["real"]], ["add", "theorem", "continuous_on_tan", ["real"]], ["add", "theorem", "continuous_on_tan_Ioo", ["real"]], ["add", "theorem", "continuous_tan", ["real"]], ["add", "theorem", "cos_arctan", ["real"]], ["add", "theorem", "cos_arctan_pos", ["real"]], ["add", "theorem", "cos_sq_arctan", ["real"]], ["add", "theorem", "deriv_arctan", ["real"]], ["add", "theorem", "deriv_tan", ["real"]], ["add", "theorem", "differentiable_arctan", ["real"]], ["add", "theorem", "differentiable_at_arctan", ["real"]], ["add", "theorem", "differentiable_at_tan", ["real"]], ["add", "theorem", "differentiable_at_tan_of_mem_Ioo", ["real"]], ["add", "theorem", "has_deriv_at_arctan", ["real"]], ["add", "theorem", "has_deriv_at_tan", ["real"]], ["add", "theorem", "has_deriv_at_tan_of_mem_Ioo", ["real"]], ["add", "theorem", "has_strict_deriv_at_arctan", ["real"]], ["add", "theorem", "has_strict_deriv_at_tan", ["real"]], ["add", "theorem", "image_tan_Ioo", ["real"]], ["add", "theorem", "neg_pi_div_two_lt_arctan", ["real"]], ["add", "theorem", "sin_arctan", ["real"]], ["add", "theorem", "surj_on_tan", ["real"]], ["add", "theorem", "tan_add'", ["real"]], ["add", "theorem", "tan_add", ["real"]], ["add", "theorem", "tan_arctan", ["real"]], ["add", "theorem", "tan_eq_zero_iff", ["real"]], ["add", "theorem", "tan_int_mul_pi_div_two", ["real"]], ["add", "def", "tan_local_homeomorph", ["real"]], ["add", "theorem", "tan_ne_zero_iff", ["real"]], ["add", "def", "tan_order_iso", ["real"]], ["add", "theorem", "tan_surjective", ["real"]], ["add", "theorem", "tan_two_mul", ["real"]], ["add", "theorem", "tendsto_abs_tan_at_top", ["real"]], ["add", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["real"]], ["add", "theorem", "times_cont_diff_arctan", ["real"]], ["add", "theorem", "times_cont_diff_at_tan", ["real"]], ["add", "theorem", "arctan", ["times_cont_diff"]], ["add", "theorem", "arctan", ["times_cont_diff_at"]], ["add", "theorem", "arctan", ["times_cont_diff_on"]], ["add", "theorem", "arctan", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric/basic.lean", "changes": [["del", "theorem", "arg_I", ["complex"]], ["del", "theorem", "arg_cos_add_sin_mul_I", ["complex"]], ["del", "theorem", "arg_eq_arg_iff", ["complex"]], ["del", "theorem", "arg_eq_arg_neg_add_pi_of_im_nonneg_of_re_neg", ["complex"]], ["del", "theorem", "arg_eq_arg_neg_sub_pi_of_im_neg_of_re_neg", ["complex"]], ["del", "theorem", "arg_eq_pi_iff", ["complex"]], ["del", "theorem", "arg_le_pi", ["complex"]], ["del", "theorem", "arg_neg_I", ["complex"]], ["del", "theorem", "arg_neg_one", ["complex"]], ["del", "theorem", "arg_of_real_of_neg", ["complex"]], ["del", "theorem", "arg_of_real_of_nonneg", ["complex"]], ["del", "theorem", "arg_one", ["complex"]], ["del", "theorem", "arg_real_mul", ["complex"]], ["del", "theorem", "arg_zero", ["complex"]], ["del", "theorem", "continuous_at_tan", ["complex"]], ["del", "theorem", "continuous_on_tan", ["complex"]], ["del", "theorem", "continuous_tan", ["complex"]], ["del", "theorem", "cos_arg", ["complex"]], ["del", "theorem", "cos_eq_cos_iff", ["complex"]], ["del", "theorem", "cos_eq_iff_quadratic", ["complex"]], ["del", "theorem", "cos_eq_zero_iff", ["complex"]], ["del", "theorem", "cos_ne_zero_iff", ["complex"]], ["del", "theorem", "cos_surjective", ["complex"]], ["del", "theorem", "deriv_tan", ["complex"]], ["del", "theorem", "differentiable_at_tan", ["complex"]], ["del", "theorem", "exists_eq_mul_self", ["complex"]], ["del", "theorem", "exists_pow_nat_eq", ["complex"]], ["del", "theorem", "exp_eq_exp_iff_exists_int", ["complex"]], ["del", "theorem", "exp_eq_exp_iff_exp_sub_eq_one", ["complex"]], ["del", "theorem", "exp_eq_one_iff", ["complex"]], ["del", "theorem", "exp_inj_of_neg_pi_lt_of_le_pi", ["complex"]], ["del", "def", "exp_local_homeomorph", ["complex"]], ["del", "theorem", "exp_log", ["complex"]], ["del", "theorem", "ext_abs_arg", ["complex"]], ["del", "theorem", "has_deriv_at_tan", ["complex"]], ["del", "theorem", "has_strict_deriv_at_log", ["complex"]], ["del", "theorem", "has_strict_deriv_at_tan", ["complex"]], ["del", "theorem", "log_I", ["complex"]], ["del", "theorem", "log_exp", ["complex"]], ["del", "theorem", "log_im", ["complex"]], ["del", "theorem", "log_im_le_pi", ["complex"]], ["del", "theorem", "log_neg_I", ["complex"]], ["del", "theorem", "log_neg_one", ["complex"]], ["del", "theorem", "log_of_real_re", ["complex"]], ["del", "theorem", "log_one", ["complex"]], ["del", "theorem", "log_re", ["complex"]], ["del", "theorem", "log_zero", ["complex"]], ["del", "theorem", "neg_pi_lt_arg", ["complex"]], ["del", "theorem", "neg_pi_lt_log_im", ["complex"]], ["del", "theorem", "of_real_log", ["complex"]], ["del", "theorem", "range_cos", ["complex"]], ["del", "theorem", "range_exp", ["complex"]], ["del", "theorem", "range_sin", ["complex"]], ["del", "theorem", "sin_arg", ["complex"]], ["del", "theorem", "sin_eq_sin_iff", ["complex"]], ["del", "theorem", "sin_eq_zero_iff", ["complex"]], ["del", "theorem", "sin_ne_zero_iff", ["complex"]], ["del", "theorem", "sin_surjective", ["complex"]], ["del", "theorem", "tan_add'", ["complex"]], ["del", "theorem", "tan_add", ["complex"]], ["del", "theorem", "tan_add_mul_I", ["complex"]], ["del", "theorem", "tan_arg", ["complex"]], ["del", "theorem", "tan_eq", ["complex"]], ["del", "theorem", "tan_eq_zero_iff", ["complex"]], ["del", "theorem", "tan_int_mul_pi_div_two", ["complex"]], ["del", "theorem", "tan_ne_zero_iff", ["complex"]], ["del", "theorem", "tan_two_mul", ["complex"]], ["del", "theorem", "tendsto_abs_tan_at_top", ["complex"]], ["del", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["complex"]], ["del", "theorem", "times_cont_diff_at_log", ["complex"]], ["del", "theorem", "times_cont_diff_at_tan", ["complex"]], ["del", "theorem", "two_pi_I_ne_zero", ["complex"]], ["del", "theorem", "clog", ["continuous"]], ["del", "theorem", "clog", ["continuous_at"]], ["del", "theorem", "clog", ["continuous_on"]], ["del", "theorem", "clog", ["continuous_within_at"]], ["del", "theorem", "deriv_arctan", []], ["del", "theorem", "deriv_within_arctan", []], ["del", "theorem", "arctan", ["differentiable"]], ["del", "theorem", "clog", ["differentiable"]], ["del", "theorem", "arctan", ["differentiable_at"]], ["del", "theorem", "clog", ["differentiable_at"]], ["del", "theorem", "arctan", ["differentiable_on"]], ["del", "theorem", "clog", ["differentiable_on"]], ["del", "theorem", "arctan", ["differentiable_within_at"]], ["del", "theorem", "clog", ["differentiable_within_at"]], ["del", "theorem", "fderiv_arctan", []], ["del", "theorem", "fderiv_within_arctan", []], ["del", "theorem", "clog", ["filter", "tendsto"]], ["del", "theorem", "arctan", ["has_deriv_at"]], ["del", "theorem", "clog", ["has_deriv_at"]], ["del", "theorem", "arctan", ["has_deriv_within_at"]], ["del", "theorem", "clog", ["has_deriv_within_at"]], ["del", "theorem", "arctan", ["has_fderiv_at"]], ["del", "theorem", "clog", ["has_fderiv_at"]], ["del", "theorem", "arctan", ["has_fderiv_within_at"]], ["del", "theorem", "clog", ["has_fderiv_within_at"]], ["del", "theorem", "arctan", ["has_strict_deriv_at"]], ["del", "theorem", "clog", ["has_strict_deriv_at"]], ["del", "theorem", "arctan", ["has_strict_fderiv_at"]], ["del", "theorem", "clog", ["has_strict_fderiv_at"]], ["del", "theorem", "T_complex_cos", ["polynomial", "chebyshev"]], ["del", "theorem", "U_complex_cos", ["polynomial", "chebyshev"]], ["del", "theorem", "cos_nat_mul", ["polynomial", "chebyshev"]], ["del", "theorem", "sin_nat_succ_mul", ["polynomial", "chebyshev"]], ["del", "theorem", "arccos_cos", ["real"]], ["del", "theorem", "arccos_eq_pi", ["real"]], ["del", "theorem", "arccos_eq_pi_div_two", ["real"]], ["del", "theorem", "arccos_eq_pi_div_two_sub_arcsin", ["real"]], ["del", "theorem", "arccos_eq_zero", ["real"]], ["del", "theorem", "arccos_inj", ["real"]], ["del", "theorem", "arccos_inj_on", ["real"]], ["del", "theorem", "arccos_le_pi", ["real"]], ["del", "theorem", "arccos_neg", ["real"]], ["del", "theorem", "arccos_neg_one", ["real"]], ["del", "theorem", "arccos_nonneg", ["real"]], ["del", "theorem", "arccos_one", ["real"]], ["del", "theorem", "arccos_zero", ["real"]], ["del", "theorem", "arcsin_eq_arctan", ["real"]], ["del", "theorem", "arcsin_eq_iff_eq_sin", ["real"]], ["del", "theorem", "arcsin_eq_neg_pi_div_two", ["real"]], ["del", "theorem", "arcsin_eq_of_sin_eq", ["real"]], ["del", "theorem", "arcsin_eq_pi_div_two", ["real"]], ["del", "theorem", "arcsin_eq_pi_div_two_sub_arccos", ["real"]], ["del", "theorem", "arcsin_eq_zero_iff", ["real"]], ["del", "theorem", "arcsin_inj", ["real"]], ["del", "theorem", "arcsin_le_iff_le_sin'", ["real"]], ["del", "theorem", "arcsin_le_iff_le_sin", ["real"]], ["del", "theorem", "arcsin_le_neg_pi_div_two", ["real"]], ["del", "theorem", "arcsin_le_pi_div_two", ["real"]], ["del", "theorem", "arcsin_lt_iff_lt_sin'", ["real"]], ["del", "theorem", "arcsin_lt_iff_lt_sin", ["real"]], ["del", "theorem", "arcsin_lt_pi_div_two", ["real"]], ["del", "theorem", "arcsin_lt_zero", ["real"]], ["del", "theorem", "arcsin_mem_Icc", ["real"]], ["del", "theorem", "arcsin_neg", ["real"]], ["del", "theorem", "arcsin_neg_one", ["real"]], ["del", "theorem", "arcsin_nonneg", ["real"]], ["del", "theorem", "arcsin_nonpos", ["real"]], ["del", "theorem", "arcsin_of_le_neg_one", ["real"]], ["del", "theorem", "arcsin_of_one_le", ["real"]], ["del", "theorem", "arcsin_one", ["real"]], ["del", "theorem", "arcsin_pos", ["real"]], ["del", "theorem", "arcsin_proj_Icc", ["real"]], ["del", "theorem", "arcsin_sin'", ["real"]], ["del", "theorem", "arcsin_sin", ["real"]], ["del", "theorem", "arcsin_zero", ["real"]], ["del", "theorem", "arctan_eq_arcsin", ["real"]], ["del", "theorem", "arctan_eq_of_tan_eq", ["real"]], ["del", "theorem", "arctan_lt_pi_div_two", ["real"]], ["del", "theorem", "arctan_mem_Ioo", ["real"]], ["del", "theorem", "arctan_neg", ["real"]], ["del", "theorem", "arctan_one", ["real"]], ["del", "theorem", "arctan_tan", ["real"]], ["del", "theorem", "arctan_zero", ["real"]], ["del", "theorem", "coe_tan_local_homeomorph", ["real"]], ["del", "theorem", "coe_tan_local_homeomorph_symm", ["real"]], ["del", "theorem", "continuous_arccos", ["real"]], ["del", "theorem", "continuous_arcsin", ["real"]], ["del", "theorem", "continuous_arctan", ["real"]], ["del", "theorem", "continuous_at_arcsin", ["real"]], ["del", "theorem", "continuous_at_arctan", ["real"]], ["del", "theorem", "continuous_at_tan", ["real"]], ["del", "theorem", "continuous_on_tan", ["real"]], ["del", "theorem", "continuous_on_tan_Ioo", ["real"]], ["del", "theorem", "continuous_tan", ["real"]], ["del", "theorem", "cos_arccos", ["real"]], ["del", "theorem", "cos_arcsin", ["real"]], ["del", "theorem", "cos_arcsin_nonneg", ["real"]], ["del", "theorem", "cos_arctan", ["real"]], ["del", "theorem", "cos_arctan_pos", ["real"]], ["del", "theorem", "cos_eq_cos_iff", ["real"]], ["del", "theorem", "cos_eq_zero_iff", ["real"]], ["del", "theorem", "cos_ne_zero_iff", ["real"]], ["del", "theorem", "cos_sq_arctan", ["real"]], ["del", "theorem", "deriv_arccos", ["real"]], ["del", "theorem", "deriv_arcsin", ["real"]], ["del", "theorem", "deriv_arcsin_aux", ["real"]], ["del", "theorem", "deriv_arctan", ["real"]], ["del", "theorem", "deriv_tan", ["real"]], ["del", "theorem", "differentiable_arctan", ["real"]], ["del", "theorem", "differentiable_at_arccos", ["real"]], ["del", "theorem", "differentiable_at_arcsin", ["real"]], ["del", "theorem", "differentiable_at_arctan", ["real"]], ["del", "theorem", "differentiable_at_tan", ["real"]], ["del", "theorem", "differentiable_at_tan_of_mem_Ioo", ["real"]], ["del", "theorem", "differentiable_on_arccos", ["real"]], ["del", "theorem", "differentiable_on_arcsin", ["real"]], ["del", "theorem", "differentiable_within_at_arccos_Ici", ["real"]], ["del", "theorem", "differentiable_within_at_arccos_Iic", ["real"]], ["del", "theorem", "differentiable_within_at_arcsin_Ici", ["real"]], ["del", "theorem", "differentiable_within_at_arcsin_Iic", ["real"]], ["del", "theorem", "has_deriv_at_arccos", ["real"]], ["del", "theorem", "has_deriv_at_arcsin", ["real"]], ["del", "theorem", "has_deriv_at_arctan", ["real"]], ["del", "theorem", "has_deriv_at_tan", ["real"]], ["del", "theorem", "has_deriv_at_tan_of_mem_Ioo", ["real"]], ["del", "theorem", "has_deriv_within_at_arccos_Ici", ["real"]], ["del", "theorem", "has_deriv_within_at_arccos_Iic", ["real"]], ["del", "theorem", "has_deriv_within_at_arcsin_Ici", ["real"]], ["del", "theorem", "has_deriv_within_at_arcsin_Iic", ["real"]], ["del", "theorem", "has_strict_deriv_at_arccos", ["real"]], ["del", "theorem", "has_strict_deriv_at_arcsin", ["real"]], ["del", "theorem", "has_strict_deriv_at_arctan", ["real"]], ["del", "theorem", "has_strict_deriv_at_tan", ["real"]], ["del", "theorem", "image_tan_Ioo", ["real"]], ["del", "theorem", "inj_on_arcsin", ["real"]], ["del", "theorem", "le_arcsin_iff_sin_le'", ["real"]], ["del", "theorem", "le_arcsin_iff_sin_le", ["real"]], ["del", "theorem", "lt_arcsin_iff_sin_lt'", ["real"]], ["del", "theorem", "lt_arcsin_iff_sin_lt", ["real"]], ["del", "theorem", "maps_to_sin_Ioo", ["real"]], ["del", "theorem", "monotone_arcsin", ["real"]], ["del", "theorem", "neg_pi_div_two_eq_arcsin", ["real"]], ["del", "theorem", "neg_pi_div_two_le_arcsin", ["real"]], ["del", "theorem", "neg_pi_div_two_lt_arcsin", ["real"]], ["del", "theorem", "neg_pi_div_two_lt_arctan", ["real"]], ["del", "theorem", "pi_div_two_eq_arcsin", ["real"]], ["del", "theorem", "pi_div_two_le_arcsin", ["real"]], ["del", "theorem", "range_arcsin", ["real"]], ["del", "theorem", "sin_arccos", ["real"]], ["del", "theorem", "sin_arcsin'", ["real"]], ["del", "theorem", "sin_arcsin", ["real"]], ["del", "theorem", "sin_arctan", ["real"]], ["del", "theorem", "sin_eq_sin_iff", ["real"]], ["del", "def", "sin_local_homeomorph", ["real"]], ["del", "theorem", "strict_mono_decr_on_arccos", ["real"]], ["del", "theorem", "strict_mono_incr_on_arcsin", ["real"]], ["del", "theorem", "surj_on_tan", ["real"]], ["del", "theorem", "tan_add'", ["real"]], ["del", "theorem", "tan_add", ["real"]], ["del", "theorem", "tan_arctan", ["real"]], ["del", "theorem", "tan_eq_zero_iff", ["real"]], ["del", "theorem", "tan_int_mul_pi_div_two", ["real"]], ["del", "def", "tan_local_homeomorph", ["real"]], ["del", "theorem", "tan_ne_zero_iff", ["real"]], ["del", "def", "tan_order_iso", ["real"]], ["del", "theorem", "tan_surjective", ["real"]], ["del", "theorem", "tan_two_mul", ["real"]], ["del", "theorem", "tendsto_abs_tan_at_top", ["real"]], ["del", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["real"]], ["del", "theorem", "times_cont_diff_arctan", ["real"]], ["del", "theorem", "times_cont_diff_at_arccos", ["real"]], ["del", "theorem", "times_cont_diff_at_arccos_iff", ["real"]], ["del", "theorem", "times_cont_diff_at_arcsin", ["real"]], ["del", "theorem", "times_cont_diff_at_arcsin_iff", ["real"]], ["del", "theorem", "times_cont_diff_at_tan", ["real"]], ["del", "theorem", "times_cont_diff_on_arccos", ["real"]], ["del", "theorem", "times_cont_diff_on_arcsin", ["real"]], ["del", "theorem", "zero_eq_arcsin_iff", ["real"]], ["del", "theorem", "arctan", ["times_cont_diff"]], ["del", "theorem", "arctan", ["times_cont_diff_at"]], ["del", "theorem", "arctan", ["times_cont_diff_on"]], ["del", "theorem", "arctan", ["times_cont_diff_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/chebyshev.lean", "changes": [["add", "theorem", "T_complex_cos", ["polynomial", "chebyshev"]], ["add", "theorem", "U_complex_cos", ["polynomial", "chebyshev"]], ["add", "theorem", "cos_nat_mul", ["polynomial", "chebyshev"]], ["add", "theorem", "sin_nat_succ_mul", ["polynomial", "chebyshev"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/complex.lean", "changes": [["add", "theorem", "continuous_at_tan", ["complex"]], ["add", "theorem", "continuous_on_tan", ["complex"]], ["add", "theorem", "continuous_tan", ["complex"]], ["add", "theorem", "cos_eq_cos_iff", ["complex"]], ["add", "theorem", "cos_eq_iff_quadratic", ["complex"]], ["add", "theorem", "cos_eq_zero_iff", ["complex"]], ["add", "theorem", "cos_ne_zero_iff", ["complex"]], ["add", "theorem", "cos_surjective", ["complex"]], ["add", "theorem", "deriv_tan", ["complex"]], ["add", "theorem", "differentiable_at_tan", ["complex"]], ["add", "theorem", "has_deriv_at_tan", ["complex"]], ["add", "theorem", "has_strict_deriv_at_tan", ["complex"]], ["add", "theorem", "range_cos", ["complex"]], ["add", "theorem", "range_sin", ["complex"]], ["add", "theorem", "sin_eq_sin_iff", ["complex"]], ["add", "theorem", "sin_eq_zero_iff", ["complex"]], ["add", "theorem", "sin_ne_zero_iff", ["complex"]], ["add", "theorem", "sin_surjective", ["complex"]], ["add", "theorem", "tan_add'", ["complex"]], ["add", "theorem", "tan_add", ["complex"]], ["add", "theorem", "tan_add_mul_I", ["complex"]], ["add", "theorem", "tan_eq", ["complex"]], ["add", "theorem", "tan_eq_zero_iff", ["complex"]], ["add", "theorem", "tan_int_mul_pi_div_two", ["complex"]], ["add", "theorem", "tan_ne_zero_iff", ["complex"]], ["add", "theorem", "tan_two_mul", ["complex"]], ["add", "theorem", "tendsto_abs_tan_at_top", ["complex"]], ["add", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["complex"]], ["add", "theorem", "times_cont_diff_at_tan", ["complex"]], ["add", "theorem", "cos_eq_cos_iff", ["real"]], ["add", "theorem", "cos_eq_zero_iff", ["real"]], ["add", "theorem", "cos_ne_zero_iff", ["real"]], ["add", "theorem", "sin_eq_sin_iff", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/trigonometric/inverse.lean", "changes": [["add", "theorem", "arccos_cos", ["real"]], ["add", "theorem", "arccos_eq_pi", ["real"]], ["add", "theorem", "arccos_eq_pi_div_two", ["real"]], ["add", "theorem", "arccos_eq_pi_div_two_sub_arcsin", ["real"]], ["add", "theorem", "arccos_eq_zero", ["real"]], ["add", "theorem", "arccos_inj", ["real"]], ["add", "theorem", "arccos_inj_on", ["real"]], ["add", "theorem", "arccos_le_pi", ["real"]], ["add", "theorem", "arccos_neg", ["real"]], ["add", "theorem", "arccos_neg_one", ["real"]], ["add", "theorem", "arccos_nonneg", ["real"]], ["add", "theorem", "arccos_one", ["real"]], ["add", "theorem", "arccos_zero", ["real"]], ["add", "theorem", "arcsin_eq_iff_eq_sin", ["real"]], ["add", "theorem", "arcsin_eq_neg_pi_div_two", ["real"]], ["add", "theorem", "arcsin_eq_of_sin_eq", ["real"]], ["add", "theorem", "arcsin_eq_pi_div_two", ["real"]], ["add", "theorem", "arcsin_eq_pi_div_two_sub_arccos", ["real"]], ["add", "theorem", "arcsin_eq_zero_iff", ["real"]], ["add", "theorem", "arcsin_inj", ["real"]], ["add", "theorem", "arcsin_le_iff_le_sin'", ["real"]], ["add", "theorem", "arcsin_le_iff_le_sin", ["real"]], ["add", "theorem", "arcsin_le_neg_pi_div_two", ["real"]], ["add", "theorem", "arcsin_le_pi_div_two", ["real"]], ["add", "theorem", "arcsin_lt_iff_lt_sin'", ["real"]], ["add", "theorem", "arcsin_lt_iff_lt_sin", ["real"]], ["add", "theorem", "arcsin_lt_pi_div_two", ["real"]], ["add", "theorem", "arcsin_lt_zero", ["real"]], ["add", "theorem", "arcsin_mem_Icc", ["real"]], ["add", "theorem", "arcsin_neg", ["real"]], ["add", "theorem", "arcsin_neg_one", ["real"]], ["add", "theorem", "arcsin_nonneg", ["real"]], ["add", "theorem", "arcsin_nonpos", ["real"]], ["add", "theorem", "arcsin_of_le_neg_one", ["real"]], ["add", "theorem", "arcsin_of_one_le", ["real"]], ["add", "theorem", "arcsin_one", ["real"]], ["add", "theorem", "arcsin_pos", ["real"]], ["add", "theorem", "arcsin_proj_Icc", ["real"]], ["add", "theorem", "arcsin_sin'", ["real"]], ["add", "theorem", "arcsin_sin", ["real"]], ["add", "theorem", "arcsin_zero", ["real"]], ["add", "theorem", "continuous_arccos", ["real"]], ["add", "theorem", "continuous_arcsin", ["real"]], ["add", "theorem", "continuous_at_arcsin", ["real"]], ["add", "theorem", "cos_arccos", ["real"]], ["add", "theorem", "cos_arcsin", ["real"]], ["add", "theorem", "cos_arcsin_nonneg", ["real"]], ["add", "theorem", "deriv_arccos", ["real"]], ["add", "theorem", "deriv_arcsin", ["real"]], ["add", "theorem", "deriv_arcsin_aux", ["real"]], ["add", "theorem", "differentiable_at_arccos", ["real"]], ["add", "theorem", "differentiable_at_arcsin", ["real"]], ["add", "theorem", "differentiable_on_arccos", ["real"]], ["add", "theorem", "differentiable_on_arcsin", ["real"]], ["add", "theorem", "differentiable_within_at_arccos_Ici", ["real"]], ["add", "theorem", "differentiable_within_at_arccos_Iic", ["real"]], ["add", "theorem", "differentiable_within_at_arcsin_Ici", ["real"]], ["add", "theorem", "differentiable_within_at_arcsin_Iic", ["real"]], ["add", "theorem", "has_deriv_at_arccos", ["real"]], ["add", "theorem", "has_deriv_at_arcsin", ["real"]], ["add", "theorem", "has_deriv_within_at_arccos_Ici", ["real"]], ["add", "theorem", "has_deriv_within_at_arccos_Iic", ["real"]], ["add", "theorem", "has_deriv_within_at_arcsin_Ici", ["real"]], ["add", "theorem", "has_deriv_within_at_arcsin_Iic", ["real"]], ["add", "theorem", "has_strict_deriv_at_arccos", ["real"]], ["add", "theorem", "has_strict_deriv_at_arcsin", ["real"]], ["add", "theorem", "inj_on_arcsin", ["real"]], ["add", "theorem", "le_arcsin_iff_sin_le'", ["real"]], ["add", "theorem", "le_arcsin_iff_sin_le", ["real"]], ["add", "theorem", "lt_arcsin_iff_sin_lt'", ["real"]], ["add", "theorem", "lt_arcsin_iff_sin_lt", ["real"]], ["add", "theorem", "maps_to_sin_Ioo", ["real"]], ["add", "theorem", "monotone_arcsin", ["real"]], ["add", "theorem", "neg_pi_div_two_eq_arcsin", ["real"]], ["add", "theorem", "neg_pi_div_two_le_arcsin", ["real"]], ["add", "theorem", "neg_pi_div_two_lt_arcsin", ["real"]], ["add", "theorem", "pi_div_two_eq_arcsin", ["real"]], ["add", "theorem", "pi_div_two_le_arcsin", ["real"]], ["add", "theorem", "range_arcsin", ["real"]], ["add", "theorem", "sin_arccos", ["real"]], ["add", "theorem", "sin_arcsin'", ["real"]], ["add", "theorem", "sin_arcsin", ["real"]], ["add", "def", "sin_local_homeomorph", ["real"]], ["add", "theorem", "strict_mono_decr_on_arccos", ["real"]], ["add", "theorem", "strict_mono_incr_on_arcsin", ["real"]], ["add", "theorem", "times_cont_diff_at_arccos", ["real"]], ["add", "theorem", "times_cont_diff_at_arccos_iff", ["real"]], ["add", "theorem", "times_cont_diff_at_arcsin", ["real"]], ["add", "theorem", "times_cont_diff_at_arcsin_iff", ["real"]], ["add", "theorem", "times_cont_diff_on_arccos", ["real"]], ["add", "theorem", "times_cont_diff_on_arcsin", ["real"]], ["add", "theorem", "zero_eq_arcsin_iff", ["real"]]]}, {"oldPath": "src/data/real/pi/bounds.lean", "newPath": "src/data/real/pi/bounds.lean", "changes": []}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions.lean", "newPath": "src/measure_theory/function/special_functions.lean", "changes": []}, {"oldPath": "test/continuity.lean", "newPath": "test/continuity.lean", "changes": []}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}, {"oldPath": "test/simp_command.lean", "newPath": "test/simp_command.lean", "changes": []}]}, {"timestamp": 1632694920, "sha": "62abfe52", "message": "refactor(measure_theory/measure/hausdorff): move `dimH` to a new file, redefine (#9391)\n* move definition of the Hausdorff dimension to a new file\n `topology.metric_space.hausdorff_dimension`;\n* move `dimH` and related lemmas to the root namespace;\n* rewrite the definition so that it no longer requires\n `[measurable_space X] [borel_space X]`; use `rw dimH_def` to get a\n version using `[measurable_space X]` from the environment;\n* add `dimH_le`, `set.finite.dimH_zero` and `finset.dimH_zero`;\n* make `dimH` irreducible.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["del", "theorem", "dimH_preimage_le", ["antilipschitz_with"]], ["del", "theorem", "le_dimH_image", ["antilipschitz_with"]], ["del", "theorem", "dimH_image", ["continuous_linear_equiv"]], ["del", "theorem", "dimH_preimage", ["continuous_linear_equiv"]], ["del", "theorem", "dimH_univ", ["continuous_linear_equiv"]], ["del", "theorem", "dense_compl_of_dimH_lt_finrank", []], ["del", "theorem", "dimH_image_le_of_locally_holder_on", []], ["del", "theorem", "dimH_image_le_of_locally_lipschitz_on", []], ["del", "theorem", "dimH_range_le_of_locally_holder_on", []], ["del", "theorem", "dimH_range_le_of_locally_lipschitz_on", []], ["del", "theorem", "dimH_image_le", ["holder_on_with"]], ["del", "theorem", "dimH_image_le", ["holder_with"]], ["del", "theorem", "dimH_range_le", ["holder_with"]], ["del", "theorem", "dimH_image", ["isometric"]], ["del", "theorem", "dimH_preimage", ["isometric"]], ["del", "theorem", "dimH_univ", ["isometric"]], ["del", "theorem", "dimH_image", ["isometry"]], ["del", "theorem", "dimH_image_le", ["lipschitz_on_with"]], ["del", "theorem", "dimH_image_le", ["lipschitz_with"]], ["del", "theorem", "dimH_range_le", ["lipschitz_with"]], ["del", "def", "dimH", ["measure_theory"]], ["del", "theorem", "dimH_Union", ["measure_theory"]], ["del", "theorem", "dimH_bUnion", ["measure_theory"]], ["del", "theorem", "dimH_countable", ["measure_theory"]], ["del", "theorem", "dimH_empty", ["measure_theory"]], ["del", "theorem", "dimH_le_of_hausdorff_measure_ne_top", ["measure_theory"]], ["del", "theorem", "dimH_mono", ["measure_theory"]], ["del", "theorem", "dimH_of_hausdorff_measure_ne_zero_ne_top", ["measure_theory"]], ["del", "theorem", "dimH_sUnion", ["measure_theory"]], ["del", "theorem", "dimH_singleton", ["measure_theory"]], ["del", "theorem", "dimH_subsingleton", ["measure_theory"]], ["del", "theorem", "dimH_union", ["measure_theory"]], ["del", "theorem", "hausdorff_measure_of_dimH_lt", ["measure_theory"]], ["del", "theorem", "hausdorff_measure_of_lt_dimH", ["measure_theory"]], ["del", "theorem", "le_dimH_of_hausdorff_measure_eq_top", ["measure_theory"]], ["del", "theorem", "le_dimH_of_hausdorff_measure_ne_zero", ["measure_theory"]], ["del", "theorem", "measure_zero_of_dimH_lt", ["measure_theory"]], ["del", "theorem", "dimH_ball_pi", ["real"]], ["del", "theorem", "dimH_ball_pi_fin", ["real"]], ["del", "theorem", "dimH_of_mem_nhds", ["real"]], ["del", "theorem", "dimH_of_nonempty_interior", ["real"]], ["del", "theorem", "dimH_univ", ["real"]], ["del", "theorem", "dimH_univ_eq_finrank", ["real"]], ["del", "theorem", "dimH_univ_pi", ["real"]], ["del", "theorem", "dimH_univ_pi_fin", ["real"]], ["del", "theorem", "dense_compl_range_of_finrank_lt_finrank", ["times_cont_diff"]], ["del", "theorem", "dimH_range_le", ["times_cont_diff"]], ["del", "theorem", "dense_compl_image_of_dimH_lt_finrank", ["times_cont_diff_on"]], ["del", "theorem", "dimH_image_le", ["times_cont_diff_on"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/hausdorff_dimension.lean", "changes": [["add", "theorem", "dimH_preimage_le", ["antilipschitz_with"]], ["add", "theorem", "le_dimH_image", ["antilipschitz_with"]], ["add", "theorem", "dimH_image", ["continuous_linear_equiv"]], ["add", "theorem", "dimH_preimage", ["continuous_linear_equiv"]], ["add", "theorem", "dimH_univ", ["continuous_linear_equiv"]], ["add", "theorem", "dense_compl_of_dimH_lt_finrank", []], ["add", "theorem", "dimH_Union", []], ["add", "theorem", "dimH_bUnion", []], ["add", "theorem", "dimH_coe_finset", []], ["add", "theorem", "dimH_countable", []], ["add", "theorem", "dimH_def", []], ["add", "theorem", "dimH_empty", []], ["add", "theorem", "dimH_finite", []], ["add", "theorem", "dimH_image_le_of_locally_holder_on", []], ["add", "theorem", "dimH_image_le_of_locally_lipschitz_on", []], ["add", "theorem", "dimH_le", []], ["add", "theorem", "dimH_le_of_hausdorff_measure_ne_top", []], ["add", "theorem", "dimH_mono", []], ["add", "theorem", "dimH_of_hausdorff_measure_ne_zero_ne_top", []], ["add", "theorem", "dimH_range_le_of_locally_holder_on", []], ["add", "theorem", "dimH_range_le_of_locally_lipschitz_on", []], ["add", "theorem", "dimH_sUnion", []], ["add", "theorem", "dimH_singleton", []], ["add", "theorem", "dimH_subsingleton", []], ["add", "theorem", "dimH_union", []], ["add", "theorem", "hausdorff_measure_of_dimH_lt", []], ["add", "theorem", "hausdorff_measure_of_lt_dimH", []], ["add", "theorem", "dimH_image_le", ["holder_on_with"]], ["add", "theorem", "dimH_image_le", ["holder_with"]], ["add", "theorem", "dimH_range_le", ["holder_with"]], ["add", "theorem", "dimH_image", ["isometric"]], ["add", "theorem", "dimH_preimage", ["isometric"]], ["add", "theorem", "dimH_univ", ["isometric"]], ["add", "theorem", "dimH_image", ["isometry"]], ["add", "theorem", "le_dimH_of_hausdorff_measure_eq_top", []], ["add", "theorem", "le_dimH_of_hausdorff_measure_ne_zero", []], ["add", "theorem", "dimH_image_le", ["lipschitz_on_with"]], ["add", "theorem", "dimH_image_le", ["lipschitz_with"]], ["add", "theorem", "dimH_range_le", ["lipschitz_with"]], ["add", "theorem", "measure_zero_of_dimH_lt", []], ["add", "theorem", "dimH_ball_pi", ["real"]], ["add", "theorem", "dimH_ball_pi_fin", ["real"]], ["add", "theorem", "dimH_of_mem_nhds", ["real"]], ["add", "theorem", "dimH_of_nonempty_interior", ["real"]], ["add", "theorem", "dimH_univ", ["real"]], ["add", "theorem", "dimH_univ_eq_finrank", ["real"]], ["add", "theorem", "dimH_univ_pi", ["real"]], ["add", "theorem", "dimH_univ_pi_fin", ["real"]], ["add", "theorem", "dense_compl_range_of_finrank_lt_finrank", ["times_cont_diff"]], ["add", "theorem", "dimH_range_le", ["times_cont_diff"]], ["add", "theorem", "dense_compl_image_of_dimH_lt_finrank", ["times_cont_diff_on"]], ["add", "theorem", "dimH_image_le", ["times_cont_diff_on"]]]}]}, {"timestamp": 1632694919, "sha": "432271f9", "message": "feat(algebra/pointwise): add smul_set_inter (#9374)\nFrom #2819 .", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "smul_set_inter'", ["set"]], ["add", "theorem", "smul_set_inter", ["set"]], ["add", "theorem", "smul_set_inter_subset", ["set"]]]}]}, {"timestamp": 1632692402, "sha": "996783ce", "message": "feat(topology/sheaves/stalks): Generalize from Type to algebraic categories (#9357)\nPreviously, basic lemmas about stalks like `germ_exist` and `section_ext` were only available for `Type`-valued (pre)sheaves. This PR generalizes these to (pre)sheaves valued in any concrete category where the forgetful functor preserves filtered colimits, which includes most algebraic categories like `Group` and `CommRing`. For the statements about stalks maps, we additionally assume that the forgetful functor reflects isomorphisms and preserves limits.", "changes": [{"oldPath": "src/topology/sheaves/sheafify.lean", "newPath": "src/topology/sheaves/sheafify.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["mod", "theorem", "app_bijective_of_stalk_functor_map_bijective", ["Top", "presheaf"]], ["mod", "theorem", "app_injective_iff_stalk_functor_map_injective", ["Top", "presheaf"]], ["mod", "theorem", "app_injective_of_stalk_functor_map_injective", ["Top", "presheaf"]], ["mod", "theorem", "app_surjective_of_stalk_functor_map_bijective", ["Top", "presheaf"]], ["mod", "theorem", "germ_eq", ["Top", "presheaf"]], ["mod", "theorem", "germ_exist", ["Top", "presheaf"]], ["mod", "theorem", "germ_ext", ["Top", "presheaf"]], ["mod", "theorem", "germ_res", ["Top", "presheaf"]], ["del", "theorem", "germ_res_apply'", ["Top", "presheaf"]], ["del", "theorem", "germ_res_apply", ["Top", "presheaf"]], ["mod", "theorem", "is_iso_iff_stalk_functor_map_iso", ["Top", "presheaf"]], ["mod", "theorem", "is_iso_of_stalk_functor_map_iso", ["Top", "presheaf"]], ["mod", "theorem", "section_ext", ["Top", "presheaf"]], ["mod", "theorem", "stalk_functor_map_germ", ["Top", "presheaf"]], ["del", "theorem", "stalk_functor_map_germ_apply", ["Top", "presheaf"]], ["mod", "theorem", "stalk_functor_map_injective_of_app_injective", ["Top", "presheaf"]], ["mod", "def", "stalk_pushforward", ["Top", "presheaf"]]]}]}, {"timestamp": 1632660021, "sha": "865ad478", "message": "feat(algebra/module/pointwise_pi): add a file with lemmas on smul_pi (#9369)\nMake a new file rather than add an import to either of `algebra.pointwise` or `algebra.module.pi`.\nFrom #2819", "changes": [{"oldPath": null, "newPath": "src/algebra/module/pointwise_pi.lean", "changes": [["add", "theorem", "smul_pi'", []], ["add", "theorem", "smul_pi", []], ["add", "theorem", "smul_pi_subset", []], ["add", "theorem", "smul_univ_pi", []]]}]}, {"timestamp": 1632652794, "sha": "b3ca07f8", "message": "docs(undergrad): Add trigonometric Weierstrass (#9393)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1632652793, "sha": "4ae46db4", "message": "feat(field_theory/is_alg_closed): more isomorphisms of algebraic closures (#9376)", "changes": [{"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["add", "theorem", "equiv_of_equiv_algebra_map", ["is_alg_closure"]], ["add", "theorem", "equiv_of_equiv_comp_algebra_map", ["is_alg_closure"]], ["add", "theorem", "equiv_of_equiv_symm_algebra_map", ["is_alg_closure"]], ["add", "theorem", "equiv_of_equiv_symm_comp_algebra_map", ["is_alg_closure"]]]}]}, {"timestamp": 1632652792, "sha": "453f2183", "message": "refactor(linear_algebra/charpoly): move linear_algebra/charpoly to linear_algebra/matrix/charpoly (#9368)\nWe move `linear_algebra/charpoly`to `linear_algebra/matrix/charpoly`, since the results there are for matrices. We also rename some lemmas in `linear_algebra/matrix/charpoly/coeff` to have the namespace `matrix`.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/charpoly.lean", "newPath": "src/linear_algebra/charpoly.lean", "changes": []}, {"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/matrix/charpoly/basic.lean", "changes": [["del", "theorem", "aeval_self_charpoly", []], ["add", "theorem", "aeval_self_charpoly", ["matrix"]]]}, {"oldPath": "src/linear_algebra/charpoly/coeff.lean", "newPath": "src/linear_algebra/matrix/charpoly/coeff.lean", "changes": [["del", "theorem", "charpoly_coeff_eq_prod_coeff_of_le", []], ["del", "theorem", "charpoly_degree_eq_dim", []], ["del", "theorem", "charpoly_monic", []], ["del", "theorem", "charpoly_nat_degree_eq_dim", []], ["del", "theorem", "charpoly_sub_diagonal_degree_lt", []], ["del", "theorem", "det_eq_sign_charpoly_coeff", []], ["del", "theorem", "det_of_card_zero", []], ["del", "theorem", "eval_det", []], ["del", "theorem", "charpoly_pow_card", ["finite_field"]], ["add", "theorem", "charpoly_pow_card", ["finite_field", "matrix"]], ["del", "theorem", "mat_poly_equiv_eval", []], ["add", "theorem", "charpoly_coeff_eq_prod_coeff_of_le", ["matrix"]], ["add", "theorem", "charpoly_degree_eq_dim", ["matrix"]], ["add", "theorem", "charpoly_monic", ["matrix"]], ["add", "theorem", "charpoly_nat_degree_eq_dim", ["matrix"]], ["add", "theorem", "charpoly_sub_diagonal_degree_lt", ["matrix"]], ["add", "theorem", "det_eq_sign_charpoly_coeff", ["matrix"]], ["add", "theorem", "det_of_card_zero", ["matrix"]], ["add", "theorem", "eval_det", ["matrix"]], ["add", "theorem", "mat_poly_equiv_eval", ["matrix"]], ["add", "theorem", "trace_eq_neg_charpoly_coeff", ["matrix"]], ["del", "theorem", "trace_eq_neg_charpoly_coeff", []]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1632652791, "sha": "a2517af6", "message": "refactor(data/fin,*): redefine `insert_nth`, add lemmas (#9349)\n### `data/fin`\n* add `fin.succ_above_cast_lt`, `fin.succ_above_pred`,\n `fin.cast_lt_succ_above`, `fin.pred_succ_above`;\n* add `fin.exists_succ_above_eq` and `fin.exists_succ_above_eq_iff`,\n use the latter to prove `fin.range_succ_above`;\n* add `@[simp]` to `fin.succ_above_left_inj`;\n* add `fin.cases_succ_above` induction principle, redefine\n `fin.insert_nth` to be `fin.cases_succ_above`;\n* add lemmas about `fin.insert_nth` and some algebraic operations.\n### `data/fintype/basic`\n* add `finset.insert_compl_self`;\n* add `fin.image_succ_above_univ`, `fin.image_succ_univ`,\n `fin.image_cast_succ` and use them to prove `fin.univ_succ`,\n `fin.univ_cast_succ`, and `fin.univ_succ_above` using `by simp`;\n### `data/fintype/card`\n* slightly golf the proof of `fin.prod_univ_succ_above`;\n* use `@[to_additive]` to generate some proofs.\n### `topology/*`\n* prove continuity of `fin.insert_nth` in both arguments and add all\n the standard dot-notation `*.fin_insert_nth` lemmas (`*` is one of\n `filter.tendsto`, `continuous_at`, `continuous_within_at`,\n `continuous_on`, `continuous`).", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_lt_succ_above", ["fin"]], ["add", "theorem", "exists_succ_above_eq", ["fin"]], ["add", "theorem", "exists_succ_above_eq_iff", ["fin"]], ["del", "def", "insert_nth'", ["fin"]], ["mod", "def", "insert_nth", ["fin"]], ["add", "theorem", "insert_nth_add", ["fin"]], ["add", "theorem", "insert_nth_binop", ["fin"]], ["add", "theorem", "insert_nth_div", ["fin"]], ["add", "theorem", "insert_nth_mul", ["fin"]], ["add", "theorem", "insert_nth_sub", ["fin"]], ["add", "theorem", "insert_nth_sub_same", ["fin"]], ["add", "theorem", "insert_nth_zero_right", ["fin"]], ["add", "theorem", "pred_succ_above", ["fin"]], ["mod", "theorem", "range_succ_above", ["fin"]], ["add", "def", "succ_above_cases", ["fin"]], ["add", "theorem", "succ_above_cases_eq_insert_nth", ["fin"]], ["add", "theorem", "succ_above_cast_lt", ["fin"]], ["mod", "theorem", "succ_above_left_inj", ["fin"]], ["add", "theorem", "succ_above_pred", ["fin"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "image_cast_succ", ["fin"]], ["add", "theorem", "image_succ_above_univ", ["fin"]], ["add", "theorem", "image_succ_univ", ["fin"]], ["add", "theorem", "insert_compl_self", ["finset"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["mod", "theorem", "prod_univ_succ_above", ["fin"]], ["del", "theorem", "sum_univ_cast_succ", ["fin"]], ["del", "theorem", "sum_univ_succ", ["fin"]], ["del", "theorem", "sum_univ_succ_above", ["fin"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "fin_insert_nth", ["continuous"]], ["add", "theorem", "fin_insert_nth", ["continuous_at"]], ["add", "theorem", "fin_insert_nth", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "fin_insert_nth", ["continuous_on"]], ["add", "theorem", "fin_insert_nth", ["continuous_within_at"]]]}]}, {"timestamp": 1632645317, "sha": "83470aff", "message": "feat(algebra/order/ring): add odd_neg, odd_abs, generalize dvd/abs lemmas (#9362)", "changes": [{"oldPath": "src/algebra/order/ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": [["add", "theorem", "odd_abs", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "neg", ["odd"]], ["add", "theorem", "odd_neg", []]]}]}, {"timestamp": 1632640993, "sha": "def1c02a", "message": "refactor(analysis/convex/function): generalize definition of `convex_on`/`concave_on` to allow any (ordered) scalars (#9389)\n`convex_on` and `concave_on` are currently only defined for real vector spaces. This generalizes ℝ to an arbitrary `ordered_semiring` in the definition.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "def", "convex", []]]}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": [["mod", "theorem", "add", ["concave_on"]], ["mod", "theorem", "comp_linear_map", ["concave_on"]], ["mod", "theorem", "concave_le", ["concave_on"]], ["mod", "theorem", "inf", ["concave_on"]], ["mod", "theorem", "le_on_segment'", ["concave_on"]], ["mod", "theorem", "le_on_segment", ["concave_on"]], ["mod", "theorem", "le_right_of_left_le'", ["concave_on"]], ["mod", "theorem", "le_right_of_left_le", ["concave_on"]], ["mod", "theorem", "left_le_of_le_right'", ["concave_on"]], ["mod", "theorem", "left_le_of_le_right", ["concave_on"]], ["mod", "theorem", "slope_mono_adjacent", ["concave_on"]], ["mod", "theorem", "subset", ["concave_on"]], ["mod", "theorem", "translate_left", ["concave_on"]], ["mod", "theorem", "translate_right", ["concave_on"]], ["mod", "def", "concave_on", []], ["mod", "theorem", "concave_on_const", []], ["mod", "theorem", "concave_on_id", []], ["mod", "theorem", "add", ["convex_on"]], ["mod", "theorem", "comp_linear_map", ["convex_on"]], ["mod", "theorem", "convex_le", ["convex_on"]], ["mod", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["mod", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["mod", "theorem", "le_left_of_right_le'", ["convex_on"]], ["mod", "theorem", "le_left_of_right_le", ["convex_on"]], ["mod", "theorem", "le_on_segment'", ["convex_on"]], ["mod", "theorem", "le_on_segment", ["convex_on"]], ["mod", "theorem", "le_right_of_left_le'", ["convex_on"]], ["mod", "theorem", "le_right_of_left_le", ["convex_on"]], ["mod", "theorem", "map_center_mass_le", ["convex_on"]], ["mod", "theorem", "map_sum_le", ["convex_on"]], ["mod", "theorem", "slope_mono_adjacent", ["convex_on"]], ["mod", "theorem", "subset", ["convex_on"]], ["mod", "theorem", "sup", ["convex_on"]], ["mod", "theorem", "translate_left", ["convex_on"]], ["mod", "theorem", "translate_right", ["convex_on"]], ["mod", "def", "convex_on", []], ["mod", "theorem", "convex_on_const", []], ["mod", "theorem", "convex_on_id", []], ["mod", "theorem", "concave_on", ["linear_map"]], ["mod", "theorem", "convex_on", ["linear_map"]]]}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["mod", "theorem", "concave_on_log_Iio", []], ["mod", "theorem", "concave_on_log_Ioi", []], ["mod", "theorem", "convex_on_exp", []], ["mod", "theorem", "convex_on_fpow", []], ["mod", "theorem", "convex_on_pow", []], ["mod", "theorem", "convex_on_pow_of_even", []], ["mod", "theorem", "convex_on_rpow", []]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}]}, {"timestamp": 1632624065, "sha": "793a598b", "message": "chore(scripts): update nolints.txt (#9392)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1632589630, "sha": "98665267", "message": "feat(data/multiset/basic): add lemma that `multiset.map f` preserves `count` under certain assumptions on `f` (#9117)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_map_eq_count", ["multiset"]]]}]}, {"timestamp": 1632585840, "sha": "168806c0", "message": "feat(measure_theory/integral/lebesgue): lintegral is strictly monotone under some conditions (#9373)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_strict_mono", ["measure_theory"]], ["add", "theorem", "lintegral_strict_mono_of_ae_le_of_ae_lt_on", ["measure_theory"]], ["add", "theorem", "lintegral_sub_le", ["measure_theory"]], ["add", "theorem", "set_lintegral_strict_mono", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "ae_le_of_ae_lt", ["measure_theory"]]]}]}, {"timestamp": 1632582339, "sha": "eba2b2e6", "message": "feat(measure_theory/function/l1_space): add integrability lemma for `measure.with_density` (#9367)", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "integrable_with_density_iff", ["measure_theory"]], ["add", "theorem", "of_real_to_real_ae_eq", ["measure_theory"]]]}]}, {"timestamp": 1632560476, "sha": "6ea81683", "message": "refactor(topology/compact_open): use bundled continuous maps (#9351)", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "continuous_comp", ["continuous_map"]], ["del", "theorem", "continuous_induced", ["continuous_map"]], ["del", "def", "induced", ["continuous_map"]]]}]}, {"timestamp": 1632552489, "sha": "51ad06e5", "message": "refactor(analysis/inner_product_space/*): split big file (#9382)\nThis PR makes a new folder `analysis/inner_product_space/*` comprising several files splitting the old `analysis/normed_space/inner_product` (which had reached 2900 lines!).\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths", "changes": [{"oldPath": "src/analysis/calculus/conformal/inner_product.lean", "newPath": "src/analysis/calculus/conformal/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/inner_product_space/basic.lean", "changes": [["del", "theorem", "coe_orthonormal_basis", []], ["del", "theorem", "inner", ["continuous"]], ["del", "theorem", "inner", ["continuous_at"]], ["del", "theorem", "continuous_inner", []], ["del", "theorem", "inner", ["continuous_on"]], ["del", "theorem", "inner", ["continuous_within_at"]], ["del", "theorem", "deriv_inner_apply", []], ["del", "theorem", "dist", ["differentiable"]], ["del", "theorem", "inner", ["differentiable"]], ["del", "theorem", "norm", ["differentiable"]], ["del", "theorem", "norm_sq", ["differentiable"]], ["del", "theorem", "dist", ["differentiable_at"]], ["del", "theorem", "inner", ["differentiable_at"]], ["del", "theorem", "norm", ["differentiable_at"]], ["del", "theorem", "norm_sq", ["differentiable_at"]], ["del", "theorem", "differentiable_inner", []], ["del", "theorem", "dist", ["differentiable_on"]], ["del", "theorem", "inner", ["differentiable_on"]], ["del", "theorem", "norm", ["differentiable_on"]], ["del", "theorem", "norm_sq", ["differentiable_on"]], ["del", "theorem", "dist", ["differentiable_within_at"]], ["del", "theorem", "inner", ["differentiable_within_at"]], ["del", "theorem", "norm", ["differentiable_within_at"]], ["del", "theorem", "norm_sq", ["differentiable_within_at"]], ["del", "theorem", "eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero", []], ["del", "theorem", "eq_orthogonal_projection_of_eq_submodule", []], ["del", "theorem", "eq_orthogonal_projection_of_mem_of_inner_eq_zero", []], ["del", "theorem", "eq_orthogonal_projection_of_mem_orthogonal'", []], ["del", "theorem", "eq_orthogonal_projection_of_mem_orthogonal", []], ["del", "theorem", "eq_sum_orthogonal_projection_self_orthogonal_complement", []], ["del", "theorem", "exists_is_orthonormal_dense_span", []], ["del", "theorem", "exists_norm_eq_infi_of_complete_convex", []], ["del", "theorem", "exists_norm_eq_infi_of_complete_subspace", []], ["del", "theorem", "exists_subset_is_orthonormal_basis", []], ["del", "theorem", "exists_subset_is_orthonormal_dense_span", []], ["del", "theorem", "fderiv_inner_apply", []], ["del", "def", "fderiv_inner_clm", []], ["del", "theorem", "fderiv_inner_clm_apply", []], ["del", "theorem", "inner", ["filter", "tendsto"]], ["del", "def", "fin_orthonormal_basis", []], ["del", "theorem", "fin_orthonormal_basis_orthonormal", []], ["del", "theorem", "finrank_orthogonal_span_singleton", []], ["del", "theorem", "inner", ["has_deriv_at"]], ["del", "theorem", "inner", ["has_deriv_within_at"]], ["del", "theorem", "inner", ["has_fderiv_at"]], ["del", "theorem", "inner", ["has_fderiv_within_at"]], ["del", "theorem", "id_eq_sum_orthogonal_projection_self_orthogonal_complement", []], ["del", "theorem", "inner_orthogonal_projection_left_eq_right", []], ["del", "theorem", "is_bounded_bilinear_map_inner", []], ["del", "theorem", "maximal_orthonormal_iff_basis_of_finite_dimensional", []], ["del", "theorem", "maximal_orthonormal_iff_dense_span", []], ["del", "theorem", "maximal_orthonormal_iff_orthogonal_complement_eq_bot", []], ["del", "theorem", "norm_eq_infi_iff_inner_eq_zero", []], ["del", "theorem", "norm_eq_infi_iff_real_inner_eq_zero", []], ["del", "theorem", "norm_eq_infi_iff_real_inner_le_zero", []], ["del", "def", "orthogonal_projection", []], ["del", "theorem", "orthogonal_projection_bot", []], ["del", "theorem", "orthogonal_projection_eq_self_iff", []], ["del", "def", "orthogonal_projection_fn", []], ["del", "theorem", "orthogonal_projection_fn_eq", []], ["del", "theorem", "orthogonal_projection_fn_inner_eq_zero", []], ["del", "theorem", "orthogonal_projection_fn_mem", []], ["del", "theorem", "orthogonal_projection_fn_norm_sq", []], ["del", "theorem", "orthogonal_projection_inner_eq_zero", []], ["del", "theorem", "orthogonal_projection_map_apply", []], ["del", "theorem", "orthogonal_projection_mem_subspace_eq_self", []], ["del", "theorem", "orthogonal_projection_mem_subspace_orthogonal_complement_eq_zero", []], ["del", "theorem", "orthogonal_projection_mem_subspace_orthogonal_precomplement_eq_zero", []], ["del", "theorem", "orthogonal_projection_norm_le", []], ["del", "theorem", "orthogonal_projection_orthogonal_complement_singleton_eq_zero", []], ["del", "theorem", "orthogonal_projection_singleton", []], ["del", "theorem", "orthogonal_projection_unit_singleton", []], ["del", "def", "orthonormal_basis", []], ["del", "def", "orthonormal_basis_index", []], ["del", "theorem", "orthonormal_basis_orthonormal", []], ["del", "def", "reflection", []], ["del", "theorem", "reflection_apply", []], ["del", "theorem", "reflection_bot", []], ["del", "theorem", "reflection_eq_self_iff", []], ["del", "theorem", "reflection_involutive", []], ["del", "theorem", "reflection_map", []], ["del", "theorem", "reflection_map_apply", []], ["del", "theorem", "reflection_mem_subspace_eq_self", []], ["del", "theorem", "reflection_mem_subspace_orthogonal_complement_eq_neg", []], ["del", "theorem", "reflection_mem_subspace_orthogonal_precomplement_eq_neg", []], ["del", "theorem", "reflection_orthogonal_complement_singleton_eq_neg", []], ["del", "theorem", "reflection_reflection", []], ["del", "theorem", "reflection_symm", []], ["del", "theorem", "smul_orthogonal_projection_singleton", []], ["del", "theorem", "exists_sum_mem_mem_orthogonal", ["submodule"]], ["del", "theorem", "finrank_add_finrank_orthogonal'", ["submodule"]], ["del", "theorem", "finrank_add_finrank_orthogonal", ["submodule"]], ["del", "theorem", "finrank_add_inf_finrank_orthogonal'", ["submodule"]], ["del", "theorem", "finrank_add_inf_finrank_orthogonal", ["submodule"]], ["del", "theorem", "is_compl_orthogonal_of_is_complete", ["submodule"]], ["del", "theorem", "orthogonal_eq_bot_iff", ["submodule"]], ["del", "theorem", "orthogonal_orthogonal", ["submodule"]], ["del", "theorem", "orthogonal_orthogonal_eq_closure", ["submodule"]], ["del", "theorem", "sup_orthogonal_inf_of_is_complete", ["submodule"]], ["del", "theorem", "sup_orthogonal_of_complete_space", ["submodule"]], ["del", "theorem", "sup_orthogonal_of_is_complete", ["submodule"]], ["del", "theorem", "dist", ["times_cont_diff"]], ["del", "theorem", "inner", ["times_cont_diff"]], ["del", "theorem", "norm", ["times_cont_diff"]], ["del", "theorem", "norm_sq", ["times_cont_diff"]], ["del", "theorem", "dist", ["times_cont_diff_at"]], ["del", "theorem", "inner", ["times_cont_diff_at"]], ["del", "theorem", "norm", ["times_cont_diff_at"]], ["del", "theorem", "norm_sq", ["times_cont_diff_at"]], ["del", "theorem", "times_cont_diff_at_inner", []], ["del", "theorem", "times_cont_diff_at_norm", []], ["del", "theorem", "times_cont_diff_inner", []], ["del", "theorem", "times_cont_diff_norm_sq", []], ["del", "theorem", "dist", ["times_cont_diff_on"]], ["del", "theorem", "inner", ["times_cont_diff_on"]], ["del", "theorem", "norm", ["times_cont_diff_on"]], ["del", "theorem", "norm_sq", ["times_cont_diff_on"]], ["del", "theorem", "dist", ["times_cont_diff_within_at"]], ["del", "theorem", "inner", ["times_cont_diff_within_at"]], ["del", "theorem", "norm", ["times_cont_diff_within_at"]], ["del", "theorem", "norm_sq", ["times_cont_diff_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/calculus.lean", "changes": [["add", "theorem", "inner", ["continuous"]], ["add", "theorem", "inner", ["continuous_at"]], ["add", "theorem", "continuous_inner", []], ["add", "theorem", "inner", ["continuous_on"]], ["add", "theorem", "inner", ["continuous_within_at"]], ["add", "theorem", "deriv_inner_apply", []], ["add", "theorem", "dist", ["differentiable"]], ["add", "theorem", "inner", ["differentiable"]], ["add", "theorem", "norm", ["differentiable"]], ["add", "theorem", "norm_sq", ["differentiable"]], ["add", "theorem", "dist", ["differentiable_at"]], ["add", "theorem", "inner", ["differentiable_at"]], ["add", "theorem", "norm", ["differentiable_at"]], ["add", "theorem", "norm_sq", ["differentiable_at"]], ["add", "theorem", "differentiable_inner", []], ["add", "theorem", "dist", ["differentiable_on"]], ["add", "theorem", "inner", ["differentiable_on"]], ["add", "theorem", "norm", ["differentiable_on"]], ["add", "theorem", "norm_sq", ["differentiable_on"]], ["add", "theorem", "dist", ["differentiable_within_at"]], ["add", "theorem", "inner", ["differentiable_within_at"]], ["add", "theorem", "norm", ["differentiable_within_at"]], ["add", "theorem", "norm_sq", ["differentiable_within_at"]], ["add", "theorem", "fderiv_inner_apply", []], ["add", "def", "fderiv_inner_clm", []], ["add", "theorem", "fderiv_inner_clm_apply", []], ["add", "theorem", "inner", ["filter", "tendsto"]], ["add", "theorem", "inner", ["has_deriv_at"]], ["add", "theorem", "inner", ["has_deriv_within_at"]], ["add", "theorem", "inner", ["has_fderiv_at"]], ["add", "theorem", "inner", ["has_fderiv_within_at"]], ["add", "theorem", "is_bounded_bilinear_map_inner", []], ["add", "theorem", "dist", ["times_cont_diff"]], ["add", "theorem", "inner", ["times_cont_diff"]], ["add", "theorem", "norm", ["times_cont_diff"]], ["add", "theorem", "norm_sq", ["times_cont_diff"]], ["add", "theorem", "dist", ["times_cont_diff_at"]], ["add", "theorem", "inner", ["times_cont_diff_at"]], ["add", "theorem", "norm", ["times_cont_diff_at"]], ["add", "theorem", "norm_sq", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_at_inner", []], ["add", "theorem", "times_cont_diff_at_norm", []], ["add", "theorem", "times_cont_diff_inner", []], ["add", "theorem", "times_cont_diff_norm_sq", []], ["add", "theorem", "dist", ["times_cont_diff_on"]], ["add", "theorem", "inner", ["times_cont_diff_on"]], ["add", "theorem", "norm", ["times_cont_diff_on"]], ["add", "theorem", "norm_sq", ["times_cont_diff_on"]], ["add", "theorem", "dist", ["times_cont_diff_within_at"]], ["add", "theorem", "inner", ["times_cont_diff_within_at"]], ["add", "theorem", "norm", ["times_cont_diff_within_at"]], ["add", "theorem", "norm_sq", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/normed_space/conformal_linear_map/inner_product.lean", "newPath": "src/analysis/inner_product_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/euclidean_dist.lean", "newPath": "src/analysis/inner_product_space/euclidean_dist.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/inner_product_space/projection.lean", "changes": [["add", "theorem", "coe_orthonormal_basis", []], ["add", "theorem", "eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero", []], ["add", "theorem", "eq_orthogonal_projection_of_eq_submodule", []], ["add", "theorem", "eq_orthogonal_projection_of_mem_of_inner_eq_zero", []], ["add", "theorem", "eq_orthogonal_projection_of_mem_orthogonal'", []], ["add", "theorem", "eq_orthogonal_projection_of_mem_orthogonal", []], ["add", "theorem", "eq_sum_orthogonal_projection_self_orthogonal_complement", []], ["add", "theorem", "exists_is_orthonormal_dense_span", []], ["add", "theorem", "exists_norm_eq_infi_of_complete_convex", []], ["add", "theorem", "exists_norm_eq_infi_of_complete_subspace", []], ["add", "theorem", "exists_subset_is_orthonormal_basis", []], ["add", "theorem", "exists_subset_is_orthonormal_dense_span", []], ["add", "def", "fin_orthonormal_basis", []], ["add", "theorem", "fin_orthonormal_basis_orthonormal", []], ["add", "theorem", "finrank_orthogonal_span_singleton", []], ["add", "theorem", "id_eq_sum_orthogonal_projection_self_orthogonal_complement", []], ["add", "theorem", "inner_orthogonal_projection_left_eq_right", []], ["add", "theorem", "maximal_orthonormal_iff_basis_of_finite_dimensional", []], ["add", "theorem", "maximal_orthonormal_iff_dense_span", []], ["add", "theorem", "maximal_orthonormal_iff_orthogonal_complement_eq_bot", []], ["add", "theorem", "norm_eq_infi_iff_inner_eq_zero", []], ["add", "theorem", "norm_eq_infi_iff_real_inner_eq_zero", []], ["add", "theorem", "norm_eq_infi_iff_real_inner_le_zero", []], ["add", "def", "orthogonal_projection", []], ["add", "theorem", "orthogonal_projection_bot", []], ["add", "theorem", "orthogonal_projection_eq_self_iff", []], ["add", "def", "orthogonal_projection_fn", []], ["add", "theorem", "orthogonal_projection_fn_eq", []], ["add", "theorem", "orthogonal_projection_fn_inner_eq_zero", []], ["add", "theorem", "orthogonal_projection_fn_mem", []], ["add", "theorem", "orthogonal_projection_fn_norm_sq", []], ["add", "theorem", "orthogonal_projection_inner_eq_zero", []], ["add", "theorem", "orthogonal_projection_map_apply", []], ["add", "theorem", "orthogonal_projection_mem_subspace_eq_self", []], ["add", "theorem", "orthogonal_projection_mem_subspace_orthogonal_complement_eq_zero", []], ["add", "theorem", "orthogonal_projection_mem_subspace_orthogonal_precomplement_eq_zero", []], ["add", "theorem", "orthogonal_projection_norm_le", []], ["add", "theorem", "orthogonal_projection_orthogonal_complement_singleton_eq_zero", []], ["add", "theorem", "orthogonal_projection_singleton", []], ["add", "theorem", "orthogonal_projection_unit_singleton", []], ["add", "def", "orthonormal_basis", []], ["add", "def", "orthonormal_basis_index", []], ["add", "theorem", "orthonormal_basis_orthonormal", []], ["add", "def", "reflection", []], ["add", "theorem", "reflection_apply", []], ["add", "theorem", "reflection_bot", []], ["add", "theorem", "reflection_eq_self_iff", []], ["add", "theorem", "reflection_involutive", []], ["add", "theorem", "reflection_map", []], ["add", "theorem", "reflection_map_apply", []], ["add", "theorem", "reflection_mem_subspace_eq_self", []], ["add", "theorem", "reflection_mem_subspace_orthogonal_complement_eq_neg", []], ["add", "theorem", "reflection_mem_subspace_orthogonal_precomplement_eq_neg", []], ["add", "theorem", "reflection_orthogonal_complement_singleton_eq_neg", []], ["add", "theorem", "reflection_reflection", []], ["add", "theorem", "reflection_symm", []], ["add", "theorem", "smul_orthogonal_projection_singleton", []], ["add", "theorem", "exists_sum_mem_mem_orthogonal", ["submodule"]], ["add", "theorem", "finrank_add_finrank_orthogonal'", ["submodule"]], ["add", "theorem", "finrank_add_finrank_orthogonal", ["submodule"]], ["add", "theorem", "finrank_add_inf_finrank_orthogonal'", ["submodule"]], ["add", "theorem", "finrank_add_inf_finrank_orthogonal", ["submodule"]], ["add", "theorem", "is_compl_orthogonal_of_is_complete", ["submodule"]], ["add", "theorem", "orthogonal_eq_bot_iff", ["submodule"]], ["add", "theorem", "orthogonal_orthogonal", ["submodule"]], ["add", "theorem", "orthogonal_orthogonal_eq_closure", ["submodule"]], ["add", "theorem", "sup_orthogonal_inf_of_is_complete", ["submodule"]], ["add", "theorem", "sup_orthogonal_of_complete_space", ["submodule"]], ["add", "theorem", "sup_orthogonal_of_is_complete", ["submodule"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/special_functions.lean", "newPath": "src/measure_theory/function/special_functions.lean", "changes": []}]}, {"timestamp": 1632552488, "sha": "55d8cd0a", "message": "chore(scripts): update nolints.txt (#9381)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1632552487, "sha": "42d82435", "message": "feat(data/polynomial/eval): map_equiv (#9375)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "def", "map_equiv", ["polynomial"]]]}]}, {"timestamp": 1632543205, "sha": "59b9ebb1", "message": "feat(algebra/group/to_additive): customize the relevant argument (#9138)\n`@[to_additive]` now automatically checks for each declaration what the first argument is with a multiplicative structure on it. \nThis is now the argument that is tested when executing later occurrences of `@[to_additive]` for a fixed type to decide whether this declaration should be translated or not.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "test/to_additive.lean", "newPath": "test/to_additive.lean", "changes": [["add", "def", "foo_mul", []], ["add", "def", "nat_pi_has_one", []], ["add", "def", "pi_nat_has_one", []]]}]}, {"timestamp": 1632534206, "sha": "64b794a0", "message": "chore(analysis/complex/basic): rename `complex/normed_space` (#9366)\nThis matches `module.complex_to_real`", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}]}, {"timestamp": 1632519617, "sha": "b0cd1f9c", "message": "chore(algebra/group): move is_unit.inv lemmas (#9364)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "coe_inv_mul", ["is_unit"]], ["add", "theorem", "mul_coe_inv", ["is_unit"]]]}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": [["add", "theorem", "inv_smul", ["is_unit"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["del", "theorem", "coe_inv_mul", ["is_unit"]], ["del", "theorem", "inv_smul", ["is_unit"]], ["del", "theorem", "mul_coe_inv", ["is_unit"]]]}]}, {"timestamp": 1632519616, "sha": "c42aaa3d", "message": "chore(data/pi): add missing `pi.{inv,neg}_def` (#9361)", "changes": [{"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "inv_def", ["pi"]]]}]}, {"timestamp": 1632519615, "sha": "8ff756cb", "message": "feat(group_theory/*/pointwise): Copy set lemmas about pointwise actions to subgroups and submonoids (#9359)\nThis is pretty much just a copy-and-paste job. At least the proofs themselves don't need copying. The set lemmas being copied here are:\nhttps://github.com/leanprover-community/mathlib/blob/a9cd8c259d59b0bdbe931a6f8e6084f800bd7162/src/algebra/pointwise.lean#L607-L680\nI skipped the `preimage_smul` lemma for now because I couldn't think of a useful statement using `map`.", "changes": [{"oldPath": "src/group_theory/subgroup/pointwise.lean", "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "theorem", "le_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "le_pointwise_smul_iff", ["add_subgroup"]], ["add", "theorem", "mem_inv_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "mem_inv_pointwise_smul_iff", ["add_subgroup"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["add_subgroup"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_le_iff'", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_le_iff", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff", ["add_subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul_iff'", ["add_subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul_iff", ["add_subgroup"]], ["add", "theorem", "le_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "mem_inv_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "mem_inv_pointwise_smul_iff", ["subgroup"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["subgroup"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem", ["subgroup"]], ["add", "theorem", "pointwise_smul_le_iff'", ["subgroup"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff", ["subgroup"]], ["add", "theorem", "pointwise_smul_subset_iff", ["subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul_iff'", ["subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul_iff", ["subgroup"]], ["add", "theorem", "subset_pointwise_smul_iff", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["mod", "theorem", "coe_pointwise_smul", ["add_submonoid"]], ["add", "theorem", "le_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "le_pointwise_smul_iff", ["add_submonoid"]], ["add", "theorem", "mem_inv_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "mem_inv_pointwise_smul_iff", ["add_submonoid"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["add_submonoid"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem", ["add_submonoid"]], ["add", "theorem", "pointwise_smul_le_iff'", ["add_submonoid"]], ["add", "theorem", "pointwise_smul_le_iff", ["add_submonoid"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff", ["add_submonoid"]], ["mod", "theorem", "smul_mem_pointwise_smul", ["add_submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul_iff'", ["add_submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul_iff", ["add_submonoid"]], ["mod", "theorem", "coe_pointwise_smul", ["submonoid"]], ["add", "theorem", "le_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "mem_inv_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "mem_inv_pointwise_smul_iff", ["submonoid"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem'", ["submonoid"]], ["add", "theorem", "mem_pointwise_smul_iff_inv_smul_mem", ["submonoid"]], ["add", "theorem", "pointwise_smul_le_iff'", ["submonoid"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "pointwise_smul_le_pointwise_smul_iff", ["submonoid"]], ["add", "theorem", "pointwise_smul_subset_iff", ["submonoid"]], ["mod", "theorem", "smul_mem_pointwise_smul", ["submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul_iff'", ["submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul_iff", ["submonoid"]], ["add", "theorem", "subset_pointwise_smul_iff", ["submonoid"]]]}]}, {"timestamp": 1632512950, "sha": "18f06ecf", "message": "chore(measure_theory/integral/interval_integral): generalize `integral_smul` (#9355)\nMake sure that it works for scalar multiplication by a complex number.", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "integral_smul", ["interval_integral"]]]}]}, {"timestamp": 1632512949, "sha": "7cb72461", "message": "chore(linear_algebra/basic): add `linear_map.neg_comp`, generalize `linear_map.{sub,smul}_comp` (#9335)\n`sub_comp` had unnecessary requirements that the codomain of the right map be an additive group, while `smul_comp` did not support compatible actions.\nThis also golfs the proofs of all the `comp_*` lemmas to eliminate `simp`.\n`smul_comp` and `comp_smul` are also both promoted to instances.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "add_comp", ["linear_map"]], ["mod", "theorem", "comp_add", ["linear_map"]], ["mod", "theorem", "comp_neg", ["linear_map"]], ["mod", "theorem", "comp_smul", ["linear_map"]], ["mod", "theorem", "comp_sub", ["linear_map"]], ["mod", "theorem", "neg_apply", ["linear_map"]], ["add", "theorem", "neg_comp", ["linear_map"]], ["mod", "theorem", "sub_apply", ["linear_map"]], ["mod", "theorem", "sub_comp", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1632512947, "sha": "c794c5c8", "message": "chore(linear_algebra/basic): split out quotients and isomorphism theorems (#9332)\n`linear_algebra.basic` had become a very large file; I think too unwieldy to even be able to edit.\nFortunately there are some natural splits on content. I moved everything about quotients out to `linear_algebra.quotient`. Happily many files in `linear_algebra/` don't even need this, so we also get some significant import reductions.\nI've also moved Noether's three isomorphism theorems for submodules to their own file.", "changes": [{"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/epi_mono.lean", "newPath": "src/algebra/category/Module/epi_mono.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "coe_quotient_inf_to_sup_quotient", ["linear_map"]], ["del", "theorem", "ker_le_range_iff", ["linear_map"]], ["del", "theorem", "quot_ker_equiv_range_apply_mk", ["linear_map"]], ["del", "theorem", "quot_ker_equiv_range_symm_apply_image", ["linear_map"]], ["del", "theorem", "quotient_inf_equiv_sup_quotient_apply_mk", ["linear_map"]], ["del", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_eq_zero_iff", ["linear_map"]], ["del", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_left", ["linear_map"]], ["del", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_right", ["linear_map"]], ["del", "def", "quotient_inf_to_sup_quotient", ["linear_map"]], ["del", "theorem", "range_eq_top_of_cancel", ["linear_map"]], ["del", "theorem", "range_mkq_comp", ["linear_map"]], ["del", "theorem", "coe_quot_equiv_of_eq_bot_symm", ["submodule"]], ["del", "theorem", "comap_liftq", ["submodule"]], ["del", "theorem", "comap_map_mkq", ["submodule"]], ["del", "def", "order_embedding", ["submodule", "comap_mkq"]], ["del", "def", "rel_iso", ["submodule", "comap_mkq"]], ["del", "theorem", "comap_mkq_embedding_eq", ["submodule"]], ["del", "theorem", "ker_liftq", ["submodule"]], ["del", "theorem", "ker_liftq_eq_bot", ["submodule"]], ["del", "theorem", "ker_mkq", ["submodule"]], ["del", "theorem", "le_comap_mkq", ["submodule"]], ["del", "def", "liftq", ["submodule"]], ["del", "theorem", "liftq_apply", ["submodule"]], ["del", "theorem", "liftq_mkq", ["submodule"]], ["del", "theorem", "linear_map_qext", ["submodule"]], ["del", "theorem", "map_liftq", ["submodule"]], ["del", "theorem", "map_mkq_eq_top", ["submodule"]], ["del", "def", "mapq", ["submodule"]], ["del", "theorem", "mapq_apply", ["submodule"]], ["del", "def", "mapq_linear", ["submodule"]], ["del", "theorem", "mapq_mkq", ["submodule"]], ["del", "def", "mkq", ["submodule"]], ["del", "theorem", "mkq_apply", ["submodule"]], ["del", "theorem", "mkq_map_self", ["submodule"]], ["del", "def", "quot_equiv_of_eq", ["submodule"]], ["del", "def", "quot_equiv_of_eq_bot", ["submodule"]], ["del", "theorem", "quot_equiv_of_eq_bot_apply_mk", ["submodule"]], ["del", "theorem", "quot_equiv_of_eq_bot_symm_apply", ["submodule"]], ["del", "theorem", "quot_equiv_of_eq_mk", ["submodule"]], ["del", "theorem", "quot_hom_ext", ["submodule"]], ["del", "theorem", "mk'_eq_mk", ["submodule", "quotient"]], ["del", "def", "mk", ["submodule", "quotient"]], ["del", "theorem", "mk_add", ["submodule", "quotient"]], ["del", "theorem", "mk_eq_mk", ["submodule", "quotient"]], ["del", "theorem", "mk_eq_zero", ["submodule", "quotient"]], ["del", "theorem", "mk_neg", ["submodule", "quotient"]], ["del", "theorem", "mk_nsmul", ["submodule", "quotient"]], ["del", "theorem", "mk_smul", ["submodule", "quotient"]], ["del", "theorem", "mk_sub", ["submodule", "quotient"]], ["del", "theorem", "mk_surjective", ["submodule", "quotient"]], ["del", "theorem", "mk_zero", ["submodule", "quotient"]], ["del", "theorem", "nontrivial_of_lt_top", ["submodule", "quotient"]], ["del", "theorem", "quot_mk_eq_mk", ["submodule", "quotient"]], ["del", "def", "quotient", ["submodule"]], ["del", "def", "quotient_quotient_equiv_quotient", ["submodule"]], ["del", "def", "quotient_quotient_equiv_quotient_aux", ["submodule"]], ["del", "theorem", "quotient_quotient_equiv_quotient_aux_mk", ["submodule"]], ["del", "theorem", "quotient_quotient_equiv_quotient_aux_mk_mk", ["submodule"]], ["del", "def", "quotient_rel", ["submodule"]], ["del", "theorem", "range_liftq", ["submodule"]], ["del", "theorem", "range_mkq", ["submodule"]], ["del", "theorem", "span_preimage_eq", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/isomorphisms.lean", "changes": [["add", "theorem", "coe_quotient_inf_to_sup_quotient", ["linear_map"]], ["add", "theorem", "quot_ker_equiv_range_apply_mk", ["linear_map"]], ["add", "theorem", "quot_ker_equiv_range_symm_apply_image", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_apply_mk", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_eq_zero_iff", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_left", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_right", ["linear_map"]], ["add", "def", "quotient_inf_to_sup_quotient", ["linear_map"]], ["add", "def", "quotient_quotient_equiv_quotient", ["submodule"]], ["add", "def", "quotient_quotient_equiv_quotient_aux", ["submodule"]], ["add", "theorem", "quotient_quotient_equiv_quotient_aux_mk", ["submodule"]], ["add", "theorem", "quotient_quotient_equiv_quotient_aux_mk_mk", ["submodule"]]]}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/quotient.lean", "changes": [["add", "theorem", "ker_le_range_iff", ["linear_map"]], ["add", "theorem", "range_eq_top_of_cancel", ["linear_map"]], ["add", "theorem", "range_mkq_comp", ["linear_map"]], ["add", "theorem", "coe_quot_equiv_of_eq_bot_symm", ["submodule"]], ["add", "theorem", "comap_liftq", ["submodule"]], ["add", "theorem", "comap_map_mkq", ["submodule"]], ["add", "def", "order_embedding", ["submodule", "comap_mkq"]], ["add", "def", "rel_iso", ["submodule", "comap_mkq"]], ["add", "theorem", "comap_mkq_embedding_eq", ["submodule"]], ["add", "theorem", "ker_liftq", ["submodule"]], ["add", "theorem", "ker_liftq_eq_bot", ["submodule"]], ["add", "theorem", "ker_mkq", ["submodule"]], ["add", "theorem", "le_comap_mkq", ["submodule"]], ["add", "def", "liftq", ["submodule"]], ["add", "theorem", "liftq_apply", ["submodule"]], ["add", "theorem", "liftq_mkq", ["submodule"]], ["add", "theorem", "linear_map_qext", ["submodule"]], ["add", "theorem", "map_liftq", ["submodule"]], ["add", "theorem", "map_mkq_eq_top", ["submodule"]], ["add", "def", "mapq", ["submodule"]], ["add", "theorem", "mapq_apply", ["submodule"]], ["add", "def", "mapq_linear", ["submodule"]], ["add", "theorem", "mapq_mkq", ["submodule"]], ["add", "def", "mkq", ["submodule"]], ["add", "theorem", "mkq_apply", ["submodule"]], ["add", "theorem", "mkq_map_self", ["submodule"]], ["add", "def", "quot_equiv_of_eq", ["submodule"]], ["add", "def", "quot_equiv_of_eq_bot", ["submodule"]], ["add", "theorem", "quot_equiv_of_eq_bot_apply_mk", ["submodule"]], ["add", "theorem", "quot_equiv_of_eq_bot_symm_apply", ["submodule"]], ["add", "theorem", "quot_equiv_of_eq_mk", ["submodule"]], ["add", "theorem", "quot_hom_ext", ["submodule"]], ["add", "theorem", "mk'_eq_mk", ["submodule", "quotient"]], ["add", "def", "mk", ["submodule", "quotient"]], ["add", "theorem", "mk_add", ["submodule", "quotient"]], ["add", "theorem", "mk_eq_mk", ["submodule", "quotient"]], ["add", "theorem", "mk_eq_zero", ["submodule", "quotient"]], ["add", "theorem", "mk_neg", ["submodule", "quotient"]], ["add", "theorem", "mk_nsmul", ["submodule", "quotient"]], ["add", "theorem", "mk_smul", ["submodule", "quotient"]], ["add", "theorem", "mk_sub", ["submodule", "quotient"]], ["add", "theorem", "mk_surjective", ["submodule", "quotient"]], ["add", "theorem", "mk_zero", ["submodule", "quotient"]], ["add", "theorem", "nontrivial_of_lt_top", ["submodule", "quotient"]], ["add", "theorem", "quot_mk_eq_mk", ["submodule", "quotient"]], ["add", "def", "quotient", ["submodule"]], ["add", "def", "quotient_rel", ["submodule"]], ["add", "theorem", "range_liftq", ["submodule"]], ["add", "theorem", "range_mkq", ["submodule"]], ["add", "theorem", "span_preimage_eq", ["submodule"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}]}, {"timestamp": 1632512946, "sha": "6f2d1ba2", "message": "feat(data/dfinsupp): add submodule.bsupr_eq_range_dfinsupp_lsum (#9202)\nAlso a version for `add_submonoid`. Unfortunately the proofs are almost identical, but that's consistent with the surrounding bits of the file anyway.\nThe key result is a dfinsupp version of the lemma in #8246,\n```lean\nx ∈ (⨆ i (H : p i), f i) ↔ ∃ v : ι →₀ M, (∀ i, v i ∈ f i) ∧ ∑ i in v.support, v i = x ∧ (∀ i, ¬ p i → v i = 0) :=\n```\nas\n```lean\nx ∈ (⨆ i (h : p i), S i) ↔ ∃ f : Π₀ i, S i, dfinsupp.lsum ℕ (λ i, (S i).subtype) (f.filter p) = x\n```", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "bsupr_eq_mrange_dfinsupp_sum_add_hom", ["add_submonoid"]], ["add", "theorem", "mem_bsupr_iff_exists_dfinsupp", ["add_submonoid"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "theorem", "bsupr_eq_range_dfinsupp_lsum", ["submodule"]], ["add", "theorem", "mem_bsupr_iff_exists_dfinsupp", ["submodule"]]]}]}, {"timestamp": 1632491752, "sha": "981f8baa", "message": "chore(*): remove some `assume`s (#9365)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}]}, {"timestamp": 1632487987, "sha": "e14cf589", "message": "feat(measure_theory/function/conditional_expectation): define the conditional expectation of a function, prove the equality of integrals (#9114)\nThis PR puts together the generalized Bochner integral construction of #8939 and the set function `condexp_ind` of #8920 to define the conditional expectation of a function.\nThe equality of integrals that defines the conditional expectation is proven in `set_integral_condexp`.", "changes": [{"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "def", "Lp_meas_to_Lp_trim", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_ae_eq", ["measure_theory"]], ["add", "def", "Lp_meas_to_Lp_trim_lie", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_lie_symm_indicator", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_smul", ["measure_theory"]], ["add", "def", "Lp_trim_to_Lp_meas", ["measure_theory"]], ["add", "theorem", "Lp_trim_to_Lp_meas_ae_eq", ["measure_theory"]], ["add", "theorem", "ae_eq_condexp_of_forall_set_integral_eq", ["measure_theory"]], ["add", "theorem", "ae_measurable'_condexp_L1", ["measure_theory"]], ["add", "theorem", "ae_measurable'_condexp_L1_clm", ["measure_theory"]], ["add", "def", "condexp", ["measure_theory"]], ["add", "def", "condexp_L1", ["measure_theory"]], ["add", "theorem", "condexp_L1_add", ["measure_theory"]], ["add", "def", "condexp_L1_clm", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_Lp_meas", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_indicator_const", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_indicator_const_Lp", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_of_ae_measurable'", ["measure_theory"]], ["add", "theorem", "condexp_L1_clm_smul", ["measure_theory"]], ["add", "theorem", "condexp_L1_eq", ["measure_theory"]], ["add", "theorem", "condexp_L1_neg", ["measure_theory"]], ["add", "theorem", "condexp_L1_of_ae_measurable'", ["measure_theory"]], ["add", "theorem", "condexp_L1_smul", ["measure_theory"]], ["add", "theorem", "condexp_L1_sub", ["measure_theory"]], ["add", "theorem", "condexp_L1_undef", ["measure_theory"]], ["add", "theorem", "condexp_L1_zero", ["measure_theory"]], ["add", "theorem", "condexp_add", ["measure_theory"]], ["add", "theorem", "condexp_ae_eq_condexp_L1", ["measure_theory"]], ["add", "theorem", "condexp_ae_eq_condexp_L1_clm", ["measure_theory"]], ["add", "theorem", "condexp_const", ["measure_theory"]], ["add", "theorem", "condexp_ind_of_measurable", ["measure_theory"]], ["add", "theorem", "condexp_neg", ["measure_theory"]], ["add", "theorem", "condexp_of_measurable", ["measure_theory"]], ["add", "theorem", "condexp_smul", ["measure_theory"]], ["add", "theorem", "condexp_sub", ["measure_theory"]], ["add", "theorem", "condexp_undef", ["measure_theory"]], ["add", "theorem", "condexp_zero", ["measure_theory"]], ["add", "theorem", "dominated_fin_meas_additive_condexp_ind", ["measure_theory"]], ["add", "theorem", "integrable_condexp", ["measure_theory"]], ["add", "theorem", "integrable_condexp_L1", ["measure_theory"]], ["add", "theorem", "integral_condexp", ["measure_theory"]], ["add", "theorem", "measurable_condexp", ["measure_theory"]], ["add", "theorem", "set_integral_condexp", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L1", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L1_clm", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_L1_clm_of_measure_ne_top", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_ind", ["measure_theory"]], ["add", "theorem", "set_integral_condexp_ind_smul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_indicator_const_Lp", ["measure_theory"]], ["add", "theorem", "set_integral_indicator_const_Lp", ["measure_theory"]]]}]}, {"timestamp": 1632481481, "sha": "0db6caf8", "message": "feat(linear_algebra/affine_space/affine_map): add missing simp lemma `affine_map.homothety_apply_same` (#9360)", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "homothety_apply_same", ["affine_map"]]]}]}, {"timestamp": 1632481480, "sha": "48883dcd", "message": "chore(algebra/basic): split out facts about lmul (#9300)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "commute_lmul_left_right", ["algebra"]], ["del", "def", "lmul'", ["algebra"]], ["del", "theorem", "lmul'_apply", ["algebra"]], ["del", "def", "lmul", ["algebra"]], ["del", "theorem", "lmul_apply", ["algebra"]], ["del", "theorem", "lmul_injective", ["algebra"]], ["del", "def", "lmul_left", ["algebra"]], ["del", "theorem", "lmul_left_apply", ["algebra"]], ["del", "theorem", "lmul_left_eq_zero_iff", ["algebra"]], ["del", "theorem", "lmul_left_injective", ["algebra"]], ["del", "theorem", "lmul_left_mul", ["algebra"]], ["del", "theorem", "lmul_left_one", ["algebra"]], ["del", "def", "lmul_left_right", ["algebra"]], ["del", "theorem", "lmul_left_right_apply", ["algebra"]], ["del", "theorem", "lmul_left_zero_eq_zero", ["algebra"]], ["del", "def", "lmul_right", ["algebra"]], ["del", "theorem", "lmul_right_apply", ["algebra"]], ["del", "theorem", "lmul_right_eq_zero_iff", ["algebra"]], ["del", "theorem", "lmul_right_injective", ["algebra"]], ["del", "theorem", "lmul_right_mul", ["algebra"]], ["del", "theorem", "lmul_right_one", ["algebra"]], ["del", "theorem", "lmul_right_zero_eq_zero", ["algebra"]], ["del", "theorem", "pow_lmul_left", ["algebra"]], ["del", "theorem", "pow_lmul_right", ["algebra"]]]}, {"oldPath": null, "newPath": "src/algebra/algebra/bilinear.lean", "changes": [["add", "theorem", "commute_lmul_left_right", ["algebra"]], ["add", "def", "lmul'", ["algebra"]], ["add", "theorem", "lmul'_apply", ["algebra"]], ["add", "def", "lmul", ["algebra"]], ["add", "theorem", "lmul_apply", ["algebra"]], ["add", "theorem", "lmul_injective", ["algebra"]], ["add", "def", "lmul_left", ["algebra"]], ["add", "theorem", "lmul_left_apply", ["algebra"]], ["add", "theorem", "lmul_left_eq_zero_iff", ["algebra"]], ["add", "theorem", "lmul_left_injective", ["algebra"]], ["add", "theorem", "lmul_left_mul", ["algebra"]], ["add", "theorem", "lmul_left_one", ["algebra"]], ["add", "def", "lmul_left_right", ["algebra"]], ["add", "theorem", "lmul_left_right_apply", ["algebra"]], ["add", "theorem", "lmul_left_zero_eq_zero", ["algebra"]], ["add", "def", "lmul_right", ["algebra"]], ["add", "theorem", "lmul_right_apply", ["algebra"]], ["add", "theorem", "lmul_right_eq_zero_iff", ["algebra"]], ["add", "theorem", "lmul_right_injective", ["algebra"]], ["add", "theorem", "lmul_right_mul", ["algebra"]], ["add", "theorem", "lmul_right_one", ["algebra"]], ["add", "theorem", "lmul_right_zero_eq_zero", ["algebra"]], ["add", "theorem", "pow_lmul_left", ["algebra"]], ["add", "theorem", "pow_lmul_right", ["algebra"]]]}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear/basic.lean", "changes": [["del", "def", "dom_coprod'", ["multilinear_map"]], ["del", "theorem", "dom_coprod'_apply", ["multilinear_map"]], ["del", "def", "dom_coprod", ["multilinear_map"]], ["del", "theorem", "dom_coprod_dom_dom_congr_sum_congr", ["multilinear_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/multilinear/tensor_product.lean", "changes": [["add", "def", "dom_coprod'", ["multilinear_map"]], ["add", "theorem", "dom_coprod'_apply", ["multilinear_map"]], ["add", "def", "dom_coprod", ["multilinear_map"]], ["add", "theorem", "dom_coprod_dom_dom_congr_sum_congr", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1632481479, "sha": "854e5c6b", "message": "refactor(measure_theory/measure/regular): add `inner_regular`, `outer_regular`, generalize (#9283)\n### Regular measures\n* add a non-class predicate `inner_regular` to prove some lemmas once, not twice;\n* add TC `outer_regular`, drop primed lemmas;\n* consistently use `≠ ∞`, `≠ 0` in the assumptions;\n* drop some typeclass requirements.\n### Other changes\n* add a few lemmas about subtraction to `data.real.ennreal`;\n* add `ennreal.add_lt_add_left`, `ennreal.add_lt_add_right`, and use them;", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "add_lt_add_left", ["ennreal"]], ["add", "theorem", "add_lt_add_right", ["ennreal"]], ["add", "theorem", "half_le_self", ["ennreal"]], ["add", "theorem", "lt_div_iff_mul_lt", ["ennreal"]], ["add", "theorem", "lt_sub_comm", ["ennreal"]], ["add", "theorem", "mul_lt_of_lt_div'", ["ennreal"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "exists_open_superset_measure_lt_top'", ["is_compact"]], ["add", "theorem", "exists_open_superset_measure_lt_top", ["is_compact"]], ["add", "theorem", "induction_on_open", ["measurable_set"]], ["add", "def", "finite_spanning_sets_in_compact", ["measure_theory", "measure"]], ["add", "def", "finite_spanning_sets_in_open", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": [["del", "def", "measure", ["measure_theory", "content"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "le_measure_diff", ["measure_theory"]], ["add", "theorem", "measure_compl_le_add_iff", ["measure_theory"]], ["add", "theorem", "measure_compl_le_add_of_le_add", ["measure_theory"]], ["add", "theorem", "measure_diff_lt_of_lt_add", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": [["add", "theorem", "exists_lt_is_closed", ["is_open"]], ["del", "theorem", "exists_lt_is_closed_of_gt", ["is_open"]], ["add", "theorem", "exists_is_closed_diff_lt", ["measurable_set"]], ["add", "theorem", "exists_is_closed_lt_add", ["measurable_set"]], ["add", "theorem", "exists_is_compact_diff_lt", ["measurable_set"]], ["add", "theorem", "exists_is_compact_lt_add", ["measurable_set"]], ["add", "theorem", "exists_is_open_diff_lt", ["measurable_set"]], ["del", "theorem", "exists_is_open_lt_of_lt'", ["measurable_set"]], ["del", "theorem", "exists_is_open_lt_of_lt", ["measurable_set"]], ["del", "theorem", "exists_lt_is_closed_of_lt_top", ["measurable_set"]], ["del", "theorem", "exists_lt_is_closed_of_lt_top_of_pos", ["measurable_set"]], ["add", "theorem", "exists_lt_is_closed_of_ne_top", ["measurable_set"]], ["del", "theorem", "exists_lt_is_compact_of_lt_top", ["measurable_set"]], ["del", "theorem", "exists_lt_is_compact_of_lt_top_of_pos", ["measurable_set"]], ["add", "theorem", "exists_lt_is_compact_of_ne_top", ["measurable_set"]], ["del", "theorem", "measure_eq_infi_is_open'", ["measurable_set"]], ["del", "theorem", "measure_eq_infi_is_open", ["measurable_set"]], ["del", "theorem", "measure_eq_supr_is_closed_of_is_finite_measure", ["measurable_set"]], ["del", "theorem", "measure_eq_supr_is_closed_of_lt_top", ["measurable_set"]], ["add", "theorem", "measure_eq_supr_is_closed_of_ne_top", ["measurable_set"]], ["del", "theorem", "measure_eq_supr_is_compact_of_lt_top", ["measurable_set"]], ["add", "theorem", "measure_eq_supr_is_compact_of_ne_top", ["measurable_set"]], ["add", "theorem", "exists_subset_lt_add", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "is_compact_is_closed", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "map", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "measurable_set_of_open", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "measure_eq_supr", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "of_pseudo_emetric_space", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "smul", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "trans", ["measure_theory", "measure", "inner_regular"]], ["add", "theorem", "weakly_regular_of_finite", ["measure_theory", "measure", "inner_regular"]], ["add", "def", "inner_regular", ["measure_theory", "measure"]], ["add", "theorem", "inner_regular_measurable", ["measure_theory", "measure", "regular"]], ["del", "theorem", "exists_closed_subset_self_subset_open_of_pos", ["measure_theory", "measure", "weakly_regular"]], ["del", "theorem", "exists_subset_is_open_measure_lt_top", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "inner_regular_measurable", ["measure_theory", "measure", "weakly_regular"]], ["del", "theorem", "inner_regular_of_pseudo_emetric_space", ["measure_theory", "measure", "weakly_regular"]], ["del", "theorem", "restrict_of_is_open", ["measure_theory", "measure", "weakly_regular"]], ["mod", "theorem", "restrict_of_measurable_set", ["measure_theory", "measure", "weakly_regular"]], ["del", "theorem", "weakly_regular_of_inner_regular_of_is_finite_measure", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "exists_is_open_lt_add", ["set"]], ["add", "theorem", "exists_is_open_lt_of_lt", ["set"]], ["add", "theorem", "measure_eq_infi_is_open", ["set"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1632481478, "sha": "a512db14", "message": "feat(linear_algebra/free_modules): add instances (#9223)\nWe add the instances `module.finite` and `module.free` on `(M →+ N)`, for `M` and `N` finite and free abelian groups.\nWe already have the more general version over any ring, for `(M →ₗ[R] N)`. (They are mathematically more general, but not for Lean.)", "changes": [{"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": []}]}, {"timestamp": 1632472596, "sha": "6a9ba186", "message": "feat(measure_theory): `ι → α ≃ᵐ α` if `[unique ι]` (#9353)\n* define versions of `equiv.fun_unique` for `order_iso` and\n `measurable_equiv`;\n* use the latter to relate integrals over (sets in) `ι → α` and `α`,\n where `ι` is a type with an unique element.", "changes": [{"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["add", "theorem", "integral_fun_unique'", ["measure_theory"]], ["add", "theorem", "integral_fun_unique", ["measure_theory"]], ["add", "theorem", "integral_fun_unique_pi'", ["measure_theory"]], ["add", "theorem", "integral_fun_unique_pi", ["measure_theory"]], ["add", "theorem", "map_fun_unique", ["measure_theory", "measure"]], ["add", "theorem", "pi_unique_eq_map", ["measure_theory", "measure"]], ["add", "theorem", "set_integral_fun_unique'", ["measure_theory"]], ["add", "theorem", "set_integral_fun_unique", ["measure_theory"]], ["add", "theorem", "set_integral_fun_unique_pi'", ["measure_theory"]], ["add", "theorem", "set_integral_fun_unique_pi", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "def", "fun_unique", ["measurable_equiv"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "fun_unique", ["order_iso"]], ["add", "theorem", "fun_unique_symm_apply", ["order_iso"]]]}]}, {"timestamp": 1632472595, "sha": "9e59e291", "message": "feat(category_theory/opposites): Add is_iso_op (#9319)", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "op_inv", ["category_theory"]]]}]}, {"timestamp": 1632472594, "sha": "9618d73c", "message": "feat(algebra,group_theory): smul_(g)pow (#9311)\nRename `smul_pow` to `smul_pow'` to match `smul_mul'`. Instead provide the distributing lemma `smul_pow` where the power distributes onto the scalar as well. Provide the group action `smul_gpow` as well.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "smul_pow'", []], ["add", "theorem", "smul_pow", []]]}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["del", "theorem", "smul_pow", []]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "theorem", "smul_gpow", []]]}]}, {"timestamp": 1632463823, "sha": "a9cd8c25", "message": "feat(linear_algebra): redefine `linear_map` and `linear_equiv` to be semilinear (#9272)\nThis PR redefines `linear_map` and `linear_equiv` to be semilinear maps/equivs.\nA semilinear map `f` is a map from an `R`-module to an `S`-module with a ring homomorphism `σ` between `R` and `S`, such that `f (c • x) = (σ c) • (f x)`. If we plug in the identity into `σ`, we get regular linear maps, and if we plug in the complex conjugate, we get conjugate linear maps. There are also other examples (e.g. Frobenius-linear maps) where this is useful which are covered by this general formulation. This was discussed on Zulip [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Semilinear.20maps), and a few preliminaries for this have already been merged.\nThe main issue that we had to overcome involved composition of semilinear maps, and `symm` for linear equivalences: having things like `σ₂₃.comp σ₁₂` in the types of semilinear maps creates major problems. For example, we want the composition of two conjugate-linear maps to be a regular linear map, not a `conj.comp conj`-linear map. To solve this issue, following a discussion from back in January, we created two typeclasses to make Lean infer the right ring hom. The first one is `[ring_hom_comp_triple σ₁₂ σ₂₃ σ₁₃]` which expresses the fact that `σ₂₃.comp σ₁₂ = σ₁₃`, and the second one is `[ring_hom_inv_pair σ₁₂ σ₂₁]` which states that `σ₁₂` and `σ₂₁` are inverses of each other. There is also `[ring_hom_surjective σ]`, which is a necessary assumption to generalize some basic lemmas (such as `submodule.map`). Note that we have introduced notation to ensure that regular linear maps can still be used as before, i.e. `M →ₗ[R] N` still works as before to mean a regular linear map.\nThe main changes are in `algebra/module/linear_map.lean`, `data/equiv/module.lean` and `linear_algebra/basic.lean` (and `algebra/ring/basic.lean` for the `ring_hom` typeclasses). The changes in other files fall into the following categories:\n1. When defining a regular linear map directly using the structure (i.e. when specifying `to_fun`, `map_smul'` and so on), there is a `ring_hom.id` that shows up in `map_smul'`. This mostly involves dsimping it away.\n2. Elaboration seems slightly more brittle, and it fails a little bit more often than before. For example, when `f` is a linear map and `g` is something that can be coerced to a linear map (say a linear equiv), one has to write `↑g` to make `f.comp ↑g` work, or sometimes even to add a type annotation. This also occurs when using `trans` twice (i.e. `e₁.trans (e₂.trans e₃)`). In those places, we use the notation defined in #8857 `∘ₗ` and `≪≫ₗ`. \n3. It seems to exacerbate the bug discussed [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/odd.20repeated.20type.20class.20search) for reasons that we don't understand all that well right now. It manifests itself in very slow calls to the tactic `ext`, and the quick fix is to manually use the right ext lemma.\n4. The PR triggered a few timeouts in proofs that were already close to the edge. Those were sped up.\n5. A few random other issues that didn't arise often enough to see a pattern.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/direct_sum.lean", "newPath": "src/algebra/lie/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["mod", "theorem", "comap_coe_submodule", ["lie_ideal"]]]}, {"oldPath": "src/algebra/lie/tensor_product.lean", "newPath": "src/algebra/lie/tensor_product.lean", "changes": []}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "def", "to_linear_map", ["distrib_mul_action_hom"]], ["mod", "theorem", "coe_comp", ["linear_map"]], ["mod", "theorem", "coe_injective", ["linear_map"]], ["mod", "def", "comp", ["linear_map"]], ["mod", "theorem", "comp_apply", ["linear_map"]], ["mod", "theorem", "ext_ring", ["linear_map"]], ["mod", "theorem", "ext_ring_iff", ["linear_map"]], ["mod", "def", "inverse", ["linear_map"]], ["mod", "theorem", "is_linear", ["linear_map"]], ["mod", "theorem", "map_smul", ["linear_map"]], ["add", "theorem", "map_smul_inv", ["linear_map"]], ["add", "theorem", "map_smulₛₗ", ["linear_map"]], ["mod", "theorem", "mk_coe", ["linear_map"]], ["mod", "def", "restrict_scalars", ["linear_map"]], ["mod", "theorem", "restrict_scalars_inj", ["linear_map"]], ["mod", "def", "to_add_monoid_hom", ["linear_map"]], ["mod", "structure", "linear_map", []]]}, {"oldPath": "src/algebra/module/submodule_pointwise.lean", "newPath": "src/algebra/module/submodule_pointwise.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/ring/comp_typeclasses.lean", "changes": [["add", "theorem", "is_surjective", ["ring_hom"]], ["add", "theorem", "comp_apply", ["ring_hom_comp_triple"]], ["add", "theorem", "comp_apply_eq", ["ring_hom_inv_pair"]], ["add", "theorem", "comp_apply_eq₂", ["ring_hom_inv_pair"]], ["add", "theorem", "comp", ["ring_hom_surjective"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/data/equiv/module.lean", "newPath": "src/data/equiv/module.lean", "changes": [["mod", "theorem", "coe_coe", ["linear_equiv"]], ["mod", "theorem", "coe_of_involutive", ["linear_equiv"]], ["mod", "theorem", "map_smul", ["linear_equiv"]], ["add", "theorem", "map_smulₛₗ", ["linear_equiv"]], ["mod", "theorem", "mk_coe'", ["linear_equiv"]], ["mod", "def", "of_involutive", ["linear_equiv"]], ["mod", "def", "symm_apply", ["linear_equiv", "simps"]], ["mod", "def", "symm", ["linear_equiv"]], ["mod", "theorem", "symm_bijective", ["linear_equiv"]], ["mod", "theorem", "symm_symm", ["linear_equiv"]], ["mod", "theorem", "symm_trans_apply", ["linear_equiv"]], ["mod", "def", "to_equiv", ["linear_equiv"]], ["mod", "theorem", "to_equiv_inj", ["linear_equiv"]], ["mod", "theorem", "to_equiv_injective", ["linear_equiv"]], ["mod", "theorem", "to_linear_map_eq_coe", ["linear_equiv"]], ["mod", "theorem", "to_linear_map_inj", ["linear_equiv"]], ["mod", "theorem", "to_linear_map_injective", ["linear_equiv"]], ["mod", "def", "trans", ["linear_equiv"]], ["mod", "theorem", "trans_apply", ["linear_equiv"]], ["mod", "theorem", "trans_refl", ["linear_equiv"]], ["mod", "structure", "linear_equiv", []]]}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/taylor.lean", "newPath": "src/data/polynomial/taylor.lean", "changes": []}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "smul_sum", ["finsupp"]], ["mod", "theorem", "sum_smul_index_linear_map'", ["finsupp"]], ["mod", "theorem", "coe_zero", ["linear_equiv"]], ["mod", "theorem", "eq_bot_of_equiv", ["linear_equiv"]], ["mod", "theorem", "ker_comp", ["linear_equiv"]], ["mod", "theorem", "map_dfinsupp_sum_add_hom", ["linear_equiv"]], ["mod", "theorem", "map_eq_comap", ["linear_equiv"]], ["mod", "theorem", "map_finsupp_sum", ["linear_equiv"]], ["mod", "theorem", "of_bijective_apply", ["linear_equiv"]], ["mod", "theorem", "of_injective_apply", ["linear_equiv"]], ["mod", "def", "of_left_inverse", ["linear_equiv"]], ["mod", "theorem", "of_left_inverse_apply", ["linear_equiv"]], ["mod", "theorem", "of_left_inverse_symm_apply", ["linear_equiv"]], ["mod", "def", "of_linear", ["linear_equiv"]], ["mod", "theorem", "of_linear_symm_apply", ["linear_equiv"]], ["mod", "def", "of_submodule'", ["linear_equiv"]], ["mod", "theorem", "of_submodule'_apply", ["linear_equiv"]], ["mod", "theorem", "of_submodule'_symm_apply", ["linear_equiv"]], ["mod", "theorem", "of_submodule'_to_linear_map", ["linear_equiv"]], ["mod", "def", "of_submodule", ["linear_equiv"]], ["mod", "theorem", "of_submodule_symm_apply", ["linear_equiv"]], ["mod", "def", "of_submodules", ["linear_equiv"]], ["mod", "theorem", "of_submodules_apply", ["linear_equiv"]], ["mod", "theorem", "of_submodules_symm_apply", ["linear_equiv"]], ["mod", "theorem", "range_comp", ["linear_equiv"]], ["mod", "theorem", "zero_apply", ["linear_equiv"]], ["mod", "theorem", "zero_symm", ["linear_equiv"]], ["mod", "theorem", "add_apply", ["linear_map"]], ["mod", "theorem", "add_comp", ["linear_map"]], ["mod", "def", "cod_restrict", ["linear_map"]], ["mod", "theorem", "cod_restrict_apply", ["linear_map"]], ["mod", "theorem", "coe_dfinsupp_sum", ["linear_map"]], ["mod", "theorem", "coe_finsupp_sum", ["linear_map"]], ["mod", "theorem", "coe_fn_sum", ["linear_map"]], ["mod", "theorem", "coe_smul_right", ["linear_map"]], ["mod", "theorem", "comap_cod_restrict", ["linear_map"]], ["mod", "theorem", "comap_injective", ["linear_map"]], ["mod", "theorem", "comap_le_comap_iff", ["linear_map"]], ["mod", "theorem", "comp_add", ["linear_map"]], ["mod", "theorem", "comp_assoc", ["linear_map"]], ["mod", "theorem", "comp_cod_restrict", ["linear_map"]], ["mod", "theorem", "comp_ker_subtype", ["linear_map"]], ["mod", "theorem", "comp_neg", ["linear_map"]], ["mod", "theorem", "comp_sub", ["linear_map"]], ["mod", "theorem", "comp_zero", ["linear_map"]], ["mod", "theorem", "default_def", ["linear_map"]], ["mod", "theorem", "dfinsupp_sum_apply", ["linear_map"]], ["mod", "theorem", "disjoint_ker", ["linear_map"]], ["mod", "def", "dom_restrict", ["linear_map"]], ["mod", "theorem", "dom_restrict_apply", ["linear_map"]], ["mod", "theorem", "eq_on_span'", ["linear_map"]], ["mod", "theorem", "eq_on_span", ["linear_map"]], ["mod", "def", "eval_add_monoid_hom", ["linear_map"]], ["mod", "theorem", "ext_on", ["linear_map"]], ["mod", "theorem", "ext_on_range", ["linear_map"]], ["mod", "theorem", "finsupp_sum_apply", ["linear_map"]], ["mod", "def", "ker", ["linear_map"]], ["mod", "theorem", "ker_cod_restrict", ["linear_map"]], ["mod", "theorem", "ker_comp", ["linear_map"]], ["mod", "theorem", "ker_comp_of_ker_eq_bot", ["linear_map"]], ["mod", "theorem", "ker_eq_bot'", ["linear_map"]], ["mod", "theorem", "ker_eq_bot_of_cancel", ["linear_map"]], ["mod", "theorem", "ker_eq_bot_of_injective", ["linear_map"]], ["mod", "theorem", "ker_eq_bot_of_inverse", ["linear_map"]], ["mod", "theorem", "ker_eq_top", ["linear_map"]], ["mod", "theorem", "ker_le_iff", ["linear_map"]], ["mod", "theorem", "ker_le_ker_comp", ["linear_map"]], ["mod", "theorem", "ker_le_range_iff", ["linear_map"]], ["mod", "theorem", "ker_zero", ["linear_map"]], ["mod", "theorem", "le_ker_iff_map", ["linear_map"]], ["mod", "theorem", "map_cod_restrict", ["linear_map"]], ["mod", "theorem", "map_coe_ker", ["linear_map"]], ["mod", "theorem", "map_dfinsupp_sum", ["linear_map"]], ["mod", "theorem", "map_dfinsupp_sum_add_hom", ["linear_map"]], ["mod", "theorem", "map_eq_top_iff", ["linear_map"]], ["mod", "theorem", "map_finsupp_sum", ["linear_map"]], ["mod", "theorem", "map_injective", ["linear_map"]], ["mod", "theorem", "map_le_map_iff'", ["linear_map"]], ["mod", "theorem", "map_le_map_iff", ["linear_map"]], ["mod", "theorem", "map_le_range", ["linear_map"]], ["mod", "theorem", "mem_ker", ["linear_map"]], ["mod", "theorem", "mem_range", ["linear_map"]], ["mod", "theorem", "mem_range_self", ["linear_map"]], ["mod", "def", "range", ["linear_map"]], ["mod", "theorem", "range_cod_restrict", ["linear_map"]], ["mod", "theorem", "range_coe", ["linear_map"]], ["mod", "theorem", "range_comp", ["linear_map"]], ["mod", "theorem", "range_comp_le_range", ["linear_map"]], ["mod", "theorem", "range_comp_of_range_eq_top", ["linear_map"]], ["mod", "theorem", "range_eq_bot", ["linear_map"]], ["mod", "theorem", "range_eq_map", ["linear_map"]], ["mod", "theorem", "range_eq_top", ["linear_map"]], ["mod", "theorem", "range_eq_top_of_cancel", ["linear_map"]], ["mod", "theorem", "range_le_bot_iff", ["linear_map"]], ["mod", "theorem", "range_le_iff_comap", ["linear_map"]], ["mod", "theorem", "range_le_ker_iff", ["linear_map"]], ["mod", "theorem", "range_mkq_comp", ["linear_map"]], ["mod", "def", "range_restrict", ["linear_map"]], ["mod", "theorem", "range_zero", ["linear_map"]], ["mod", "def", "smul_right", ["linear_map"]], ["mod", "theorem", "smul_right_apply", ["linear_map"]], ["mod", "theorem", "sub_comp", ["linear_map"]], ["mod", "theorem", "subtype_comp_cod_restrict", ["linear_map"]], ["mod", "theorem", "sum_apply", ["linear_map"]], ["mod", "def", "to_add_monoid_hom'", ["linear_map"]], ["mod", "theorem", "zero_apply", ["linear_map"]], ["mod", "theorem", "zero_comp", ["linear_map"]], ["mod", "theorem", "pi_eq_sum_univ", []], ["mod", "theorem", "apply_coe_mem_map", ["submodule"]], ["mod", "theorem", "coe_equiv_map_of_injective_apply", ["submodule"]], ["mod", "def", "comap", ["submodule"]], ["mod", "theorem", "comap_bot", ["submodule"]], ["mod", "theorem", "comap_coe", ["submodule"]], ["mod", "theorem", "comap_comp", ["submodule"]], ["mod", "theorem", "comap_equiv_eq_map_symm", ["submodule"]], ["mod", "theorem", "comap_inf", ["submodule"]], ["mod", "theorem", "comap_infi", ["submodule"]], ["mod", "theorem", "comap_le_comap_iff_of_surjective", ["submodule"]], ["mod", "theorem", "comap_le_comap_smul", ["submodule"]], ["mod", "theorem", "comap_liftq", ["submodule"]], ["mod", "theorem", "comap_map_eq", ["submodule"]], ["mod", "theorem", "comap_map_eq_self", ["submodule"]], ["mod", "theorem", "comap_mono", ["submodule"]], ["mod", "theorem", "comap_top", ["submodule"]], ["mod", "theorem", "comap_zero", ["submodule"]], ["mod", "def", "compatible_maps", ["submodule"]], ["mod", "theorem", "gc_map_comap", ["submodule"]], ["mod", "theorem", "inf_comap_le_comap_add", ["submodule"]], ["mod", "theorem", "ker_liftq", ["submodule"]], ["mod", "theorem", "ker_liftq_eq_bot", ["submodule"]], ["mod", "theorem", "le_comap_map", ["submodule"]], ["mod", "def", "liftq", ["submodule"]], ["mod", "theorem", "liftq_apply", ["submodule"]], ["mod", "theorem", "liftq_mkq", ["submodule"]], ["mod", "theorem", "linear_map_qext", ["submodule"]], ["mod", "def", "map", ["submodule"]], ["mod", "theorem", "map_add_le", ["submodule"]], ["mod", "theorem", "map_bot", ["submodule"]], ["mod", "theorem", "map_coe", ["submodule"]], ["mod", "theorem", "map_comap_eq", ["submodule"]], ["mod", "theorem", "map_comap_eq_of_surjective", ["submodule"]], ["mod", "theorem", "map_comap_eq_self", ["submodule"]], ["mod", "theorem", "map_comap_le", ["submodule"]], ["mod", "theorem", "map_comp", ["submodule"]], ["mod", "theorem", "map_equiv_eq_comap_symm", ["submodule"]], ["mod", "theorem", "map_id", ["submodule"]], ["mod", "theorem", "map_inf_comap_of_surjective", ["submodule"]], ["mod", "theorem", "map_inf_eq_map_inf_comap", ["submodule"]], ["mod", "theorem", "map_infi_comap_of_surjective", ["submodule"]], ["mod", "theorem", "map_le_iff_le_comap", ["submodule"]], ["mod", "theorem", "map_liftq", ["submodule"]], ["mod", "theorem", "map_mono", ["submodule"]], ["mod", "theorem", "map_span", ["submodule"]], ["mod", "theorem", "map_sup", ["submodule"]], ["mod", "theorem", "map_sup_comap_of_surjective", ["submodule"]], ["mod", "theorem", "map_supr", ["submodule"]], ["mod", "theorem", "map_supr_comap_of_sujective", ["submodule"]], ["mod", "theorem", "map_top", ["submodule"]], ["mod", "theorem", "map_zero", ["submodule"]], ["mod", "def", "mapq", ["submodule"]], ["mod", "theorem", "mapq_apply", ["submodule"]], ["mod", "def", "mapq_linear", ["submodule"]], ["mod", "theorem", "mapq_mkq", ["submodule"]], ["mod", "theorem", "mem_comap", ["submodule"]], ["mod", "theorem", "mem_map", ["submodule"]], ["mod", "theorem", "mem_map_equiv", ["submodule"]], ["mod", "theorem", "mem_map_of_mem", ["submodule"]], ["mod", "theorem", "mem_prod", ["submodule"]], ["mod", "theorem", "mem_supr", ["submodule"]], ["mod", "theorem", "mem_supr_of_chain", ["submodule"]], ["mod", "def", "prod", ["submodule"]], ["mod", "theorem", "prod_bot", ["submodule"]], ["mod", "theorem", "prod_inf_prod", ["submodule"]], ["mod", "theorem", "prod_mono", ["submodule"]], ["mod", "theorem", "prod_sup_prod", ["submodule"]], ["mod", "theorem", "prod_top", ["submodule"]], ["mod", "theorem", "range_liftq", ["submodule"]], ["mod", "theorem", "span_image", ["submodule"]], ["mod", "theorem", "span_preimage_eq", ["submodule"]], ["mod", "theorem", "span_preimage_le", ["submodule"]], ["mod", "theorem", "span_prod_le", ["submodule"]], ["mod", "theorem", "supr_eq_span", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "def", "to_lin_hom_aux₁", ["bilin_form"]], ["add", "def", "to_lin_hom_aux₂", ["bilin_form"]], ["mod", "theorem", "to_matrix'_comp_left", ["bilin_form"]], ["mod", "theorem", "to_matrix'_comp_right", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/finite.lean", "newPath": "src/number_theory/class_number/finite.lean", "changes": []}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}]}, {"timestamp": 1632459064, "sha": "a7a9c91e", "message": "feat(ring_theory/localization): Localizing at units is isomorphic to the ring (#9324)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "at_one", ["is_localization"]], ["add", "def", "at_unit", ["is_localization"]], ["add", "def", "at_units", ["is_localization"]]]}]}, {"timestamp": 1632449432, "sha": "4a8fb6a3", "message": "chore(linear_algebra): rename endomorphism multiplicative structures for consistency (#9336)\nThis renames:\n* `module.endomorphism_semiring` → `module.End.semiring`\n* `module.endomorphism_ring` → `module.End.ring`\n* `module.endomorphism_algebra` → `module.End.algebra`\n* `linear_map.module.End.division_ring` → `module.End.division_ring`\nThis brings the name in line with the names for `add_monoid.End`.\nSince `module.End` is an abbreviation, it does not matter that the instances now use this instead of `M →ₗ[R] M`.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": []}]}, {"timestamp": 1632446966, "sha": "dd519dfa", "message": "chore(*): linting (#9342)", "changes": [{"oldPath": "src/set_theory/surreal/basic.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1632443174, "sha": "1a341fd8", "message": "feat(algebra/*): Tensor product is the fibered coproduct in CommRing (#9338)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/CommRing/pushout.lean", "changes": [["add", "def", "pushout_cocone", ["CommRing"]], ["add", "theorem", "pushout_cocone_X", ["CommRing"]], ["add", "theorem", "pushout_cocone_inl", ["CommRing"]], ["add", "theorem", "pushout_cocone_inr", ["CommRing"]], ["add", "def", "pushout_cocone_is_colimit", ["CommRing"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "def", "lmul'", ["algebra", "tensor_product"]], ["add", "theorem", "lmul'_apply_tmul", ["algebra", "tensor_product"]], ["add", "theorem", "lmul'_comp_include_left", ["algebra", "tensor_product"]], ["add", "theorem", "lmul'_comp_include_right", ["algebra", "tensor_product"]], ["add", "theorem", "lmul'_to_linear_map", ["algebra", "tensor_product"]], ["add", "theorem", "map_comp_include_left", ["algebra", "tensor_product"]], ["add", "theorem", "map_comp_include_right", ["algebra", "tensor_product"]], ["add", "def", "product_map", ["algebra", "tensor_product"]], ["add", "theorem", "product_map_apply_tmul", ["algebra", "tensor_product"]], ["add", "theorem", "product_map_left", ["algebra", "tensor_product"]], ["add", "theorem", "product_map_left_apply", ["algebra", "tensor_product"]], ["add", "theorem", "product_map_right", ["algebra", "tensor_product"]], ["add", "theorem", "product_map_right_apply", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1632443173, "sha": "2d17f521", "message": "feat(measure_theory/integral/*): integral over map (e : α ≃ᵐ β) μ (#9316)", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "integrable_map_equiv", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_map_equiv", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_map_equiv", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "set_integral_map_equiv", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_measurable_map_equiv_iff", []], ["add", "theorem", "restrict_map", ["measurable_equiv"]]]}]}, {"timestamp": 1632443172, "sha": "18f0093f", "message": "feat(measure_theory/measure/measure_space): add measure_Union_of_null_inter (#9307)\nFrom #2819", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "measure_Union_of_null_inter", ["measure_theory"]]]}]}, {"timestamp": 1632443171, "sha": "7e3256ba", "message": "feat(ring_theory/derivation): helper lemma for custom `derivation_ext` lemmas (#9255)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "theorem", "eq_on_adjoin", ["derivation"]], ["add", "theorem", "ext_of_adjoin_eq_top", ["derivation"]]]}]}, {"timestamp": 1632443170, "sha": "9b1f0bb6", "message": "feat(topology/compact_open): convergence in the compact-open topology can be checked on compact sets (#9240)", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "compact_open_le_induced", ["continuous_map"]], ["add", "theorem", "continuous_ev₁", ["continuous_map"]], ["add", "theorem", "continuous_restrict", ["continuous_map"]], ["add", "theorem", "exists_tendsto_compact_open_iff_forall", ["continuous_map"]], ["add", "theorem", "tendsto_compact_open_restrict", ["continuous_map"]]]}]}, {"timestamp": 1632435530, "sha": "d2f7b24d", "message": "feat(algebra/pointwise): more to_additive attributes for new lemmas (#9348)\nSome of these lemmas introduced in #9226 I believe.\nSpun off from #2819.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "set_smul_subset_set_smul_iff", []], ["mod", "theorem", "smul_mem_smul_set_iff", []]]}]}, {"timestamp": 1632435529, "sha": "88c79e57", "message": "feat(data/fintype/basic): embeddings of fintypes based on cardinal inequalities (#9346)\nFrom https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/mapping.20a.20fintype.20into.20a.20finset/near/254493754, based on suggestions by @kmill and @eric-wieser and @riccardobrasca.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "equiv_of_fintype_self_embedding_to_embedding", ["function", "embedding"]], ["add", "theorem", "exists_of_card_le_finset", ["function", "embedding"]], ["mod", "theorem", "is_empty_of_card_lt", ["function", "embedding"]], ["add", "theorem", "nonempty_of_card_le", ["function", "embedding"]], ["add", "def", "trunc_of_card_le", ["function", "embedding"]]]}]}, {"timestamp": 1632435528, "sha": "c950c45e", "message": "feat(analysis/calculus/[f]deriv): derivative of pointwise composition/application of continuous linear maps (#9174)\nThis introduces useful analogs to the product rule when working with derivatives in spaces of continuous linear maps.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_clm_apply", []], ["add", "theorem", "deriv_clm_comp", []], ["add", "theorem", "deriv_within_clm_apply", []], ["add", "theorem", "deriv_within_clm_comp", []], ["add", "theorem", "clm_apply", ["has_deriv_at"]], ["add", "theorem", "clm_comp", ["has_deriv_at"]], ["add", "theorem", "clm_apply", ["has_deriv_within_at"]], ["add", "theorem", "clm_comp", ["has_deriv_within_at"]], ["add", "theorem", "clm_apply", ["has_strict_deriv_at"]], ["add", "theorem", "clm_comp", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "clm_apply", ["differentiable"]], ["add", "theorem", "clm_comp", ["differentiable"]], ["add", "theorem", "clm_apply", ["differentiable_at"]], ["add", "theorem", "clm_comp", ["differentiable_at"]], ["add", "theorem", "clm_apply", ["differentiable_on"]], ["add", "theorem", "clm_comp", ["differentiable_on"]], ["add", "theorem", "clm_apply", ["differentiable_within_at"]], ["add", "theorem", "clm_comp", ["differentiable_within_at"]], ["add", "theorem", "fderiv_clm_apply", []], ["add", "theorem", "fderiv_clm_comp", []], ["add", "theorem", "fderiv_within_clm_apply", []], ["add", "theorem", "fderiv_within_clm_comp", []], ["add", "theorem", "clm_apply", ["has_fderiv_at"]], ["add", "theorem", "clm_comp", ["has_fderiv_at"]], ["add", "theorem", "clm_apply", ["has_fderiv_within_at"]], ["add", "theorem", "clm_comp", ["has_fderiv_within_at"]], ["add", "theorem", "clm_apply", ["has_strict_fderiv_at"]], ["add", "theorem", "clm_comp", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "comp_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1632431925, "sha": "54eb6037", "message": "chore(analysis/normed_space/conformal_linear_map): delay dependence on inner products (#9293)", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/conformal/inner_product.lean", "changes": [["add", "theorem", "conformal_at_iff'", []], ["add", "theorem", "conformal_at_iff", []], ["add", "def", "conformal_factor_at", []], ["add", "theorem", "conformal_factor_at_inner_eq_mul_inner'", []], ["add", "theorem", "conformal_factor_at_inner_eq_mul_inner", []], ["add", "theorem", "conformal_factor_at_pos", []]]}, {"oldPath": "src/analysis/calculus/conformal.lean", "newPath": "src/analysis/calculus/conformal/normed_space.lean", "changes": [["del", "def", "conformal_factor_at", ["conformal_at"]], ["del", "theorem", "conformal_factor_at_inner_eq_mul_inner'", ["conformal_at"]], ["del", "theorem", "conformal_factor_at_inner_eq_mul_inner", ["conformal_at"]], ["del", "theorem", "conformal_factor_at_pos", ["conformal_at"]], ["del", "theorem", "conformal_at_iff'", []], ["del", "theorem", "conformal_at_iff", []]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": [["mod", "theorem", "injective", ["is_conformal_map"]], ["mod", "theorem", "ne_zero", ["is_conformal_map"]], ["mod", "def", "is_conformal_map", []], ["del", "theorem", "is_conformal_map_iff", []], ["mod", "theorem", "is_conformal_map", ["linear_isometry"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/conformal_linear_map/inner_product.lean", "changes": [["add", "theorem", "is_conformal_map_iff", []]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/conformal_groupoid.lean", "newPath": "src/geometry/manifold/conformal_groupoid.lean", "changes": []}]}, {"timestamp": 1632424802, "sha": "14bcb2e0", "message": "feat(measure_theory/measure/measure_space_def): some simple lemmas about measures and intersection (#9306)\nFrom #2819", "changes": [{"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["del", "theorem", "measure_inter_lt_top", ["measure_theory"]], ["add", "theorem", "measure_inter_lt_top_of_left_ne_top", ["measure_theory"]], ["add", "theorem", "measure_inter_lt_top_of_right_ne_top", ["measure_theory"]], ["del", "theorem", "measure_inter_ne_top", ["measure_theory"]], ["add", "theorem", "measure_inter_null_of_null_left", ["measure_theory"]], ["add", "theorem", "measure_inter_null_of_null_right", ["measure_theory"]]]}]}, {"timestamp": 1632424801, "sha": "ea59c90e", "message": "feat(ring_theory/algebraic): is_algebraic_iff_not_injective (#9254)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_iff_not_injective", []]]}]}, {"timestamp": 1632415348, "sha": "9e367ffb", "message": "feat(linear_algebra/invariant_basis_number): strong_rank_condition_iff_succ (#9128)\nWe add `strong_rank_condition_iff_succ`: a ring satisfies the strong rank condition if and only if, for all `n : ℕ`, there are no\ninjective linear maps `(fin (n + 1) → R) →ₗ[R] (fin n → R)`. This will be used to prove that any commutative ring satisfies the strong rank condition.\nThe proof is simple and it uses the natural inclusion `R^n → R^m`, for `n ≤ m` (adding zeros at the end). We provide this in general as `extend_by_zero.linear_map : (ι → R) →ₗ[R] (η → R)` where `ι` and `η` are types endowed with a function `ι → η`.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "extend_smul", ["function"]]]}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "extend_div", ["function"]], ["add", "theorem", "extend_inv", ["function"]], ["add", "theorem", "extend_mul", ["function"]], ["add", "theorem", "extend_one", ["function"]]]}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": [["add", "theorem", "strong_rank_condition_iff_succ", []]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "extend_apply'", ["function"]], ["add", "theorem", "extend_injective", ["function"]]]}]}, {"timestamp": 1632411094, "sha": "b365367f", "message": "feat(README.md): add Oliver Nash (#9347)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1632411093, "sha": "81f6e887", "message": "chore(analysis/calculus): add 2 simple lemmas (#9334)\nAdd `differentiable_on.has_fderiv_at` and `differentiable_on.has_deriv_at`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "has_deriv_at", ["differentiable_on"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "has_fderiv_at", ["differentiable_on"]]]}]}, {"timestamp": 1632411091, "sha": "0243da30", "message": "feat(ereal): added useful lemmas (#9313)\nSome small addition to the api for ereals.", "changes": [{"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["add", "theorem", "coe_to_real_le", ["ereal"]], ["add", "theorem", "eq_bot_iff_forall_lt", ["ereal"]], ["add", "theorem", "eq_top_iff_forall_lt", ["ereal"]], ["add", "theorem", "le_coe_to_real", ["ereal"]]]}]}, {"timestamp": 1632406123, "sha": "cc0d8391", "message": "feat(measure_theory/measure/haar): cleanup, link with the is_haar_measure typeclass (#9244)\nWe show that the Haar measure constructed in `measure_theory/measure/haar` satisfies the `is_haar_measure` typeclass, and use the existence to show a few further properties of all Haar measures. Also weaken a little bit some assumptions in this file.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "pow_strict_mono", ["ennreal"]]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": [["del", "theorem", "add_haar_measure_apply", ["measure_theory", "measure"]], ["add", "def", "haar", ["measure_theory", "measure"]], ["del", "theorem", "haar_measure_pos_of_is_open", ["measure_theory", "measure"]], ["mod", "theorem", "haar_measure_self", ["measure_theory", "measure"]], ["add", "theorem", "haar_preimage_inv", ["measure_theory", "measure"]], ["add", "theorem", "is_haar_measure_eq_smul_is_haar_measure", ["measure_theory", "measure"]], ["add", "theorem", "map_haar_inv", ["measure_theory", "measure"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "locally_compact_space_of_group", ["topological_space", "positive_compacts"]]]}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": []}]}, {"timestamp": 1632384913, "sha": "602ad587", "message": "feat(measure_theory/integral): add a few lemmas (#9285)", "changes": [{"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_coe_le_of_lintegral_coe_le", ["measure_theory"]], ["add", "theorem", "lintegral_coe_le_coe_iff_integral_le", ["measure_theory"]], ["add", "theorem", "integral_const", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_piecewise_zero", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "range_const_subset", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1632384912, "sha": "145c5ca4", "message": "refactor(topology/category/Top/open_nhds): remove open_nhds.is_filtered (#9211)\nRemove instance that can be inferred automatically.", "changes": [{"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}]}, {"timestamp": 1632380243, "sha": "8a0d60ea", "message": "chore(topology): rename compact_ball to is_compact_closed_ball (#9337)\nThe old name didn't follow the naming convention at all, which made it hard to discover.", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/euclidean_dist.lean", "newPath": "src/analysis/normed_space/euclidean_dist.lean", "changes": [["del", "theorem", "compact_ball", ["euclidean"]], ["add", "theorem", "is_compact_closed_ball", ["euclidean"]]]}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1632377160, "sha": "7615f838", "message": "chore(archive/100-theorems-list/42): typo (#9341)", "changes": [{"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": []}]}, {"timestamp": 1632374025, "sha": "d238087f", "message": "chore(data/real/pi/*): correct authorship data (#9314)\n#9295 split `data.real.pi` into three files with the naive transferral of authorship and copyright data, this updates it to the actual authorship.", "changes": [{"oldPath": "src/data/real/pi/bounds.lean", "newPath": "src/data/real/pi/bounds.lean", "changes": []}, {"oldPath": "src/data/real/pi/leibniz.lean", "newPath": "src/data/real/pi/leibniz.lean", "changes": []}, {"oldPath": "src/data/real/pi/wallis.lean", "newPath": "src/data/real/pi/wallis.lean", "changes": []}]}, {"timestamp": 1632370659, "sha": "a15ae9c5", "message": "chore(measure_theory/measurable_space): add simps config for `measurable_equiv` (#9315)\nAlso add `@[ext]` lemma and some standard `equiv` lemmas.", "changes": [{"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "apply_symm_apply", ["measurable_equiv"]], ["del", "theorem", "coe_eq", ["measurable_equiv"]], ["del", "theorem", "coe_symm_mk", ["measurable_equiv"]], ["add", "theorem", "coe_to_equiv", ["measurable_equiv"]], ["add", "theorem", "coe_to_equiv_symm", ["measurable_equiv"]], ["add", "theorem", "ext", ["measurable_equiv"]], ["add", "theorem", "self_trans_symm", ["measurable_equiv"]], ["add", "def", "apply", ["measurable_equiv", "simps"]], ["add", "def", "symm_apply", ["measurable_equiv", "simps"]], ["mod", "def", "symm", ["measurable_equiv"]], ["add", "theorem", "symm_apply_apply", ["measurable_equiv"]], ["add", "theorem", "symm_mk", ["measurable_equiv"]], ["add", "theorem", "symm_refl", ["measurable_equiv"]], ["add", "theorem", "symm_trans_self", ["measurable_equiv"]], ["add", "theorem", "to_equiv_injective", ["measurable_equiv"]], ["mod", "def", "trans", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}]}, {"timestamp": 1632363763, "sha": "b563e5aa", "message": "chore(scripts): update nolints.txt (#9339)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1632357497, "sha": "671b1797", "message": "refactor(group_theory/subgroup,linear_algebra/basic): put pointwise actions in their own files to match submonoid (#9312)", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/basic.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/module/submodule_pointwise.lean", "changes": [["add", "theorem", "add_eq_sup", ["submodule"]], ["add", "theorem", "coe_pointwise_smul", ["submodule"]], ["add", "theorem", "pointwise_smul_to_add_subgroup", ["submodule"]], ["add", "theorem", "pointwise_smul_to_add_submonoid", ["submodule"]], ["add", "theorem", "smul_le_self_of_tower", ["submodule"]], ["add", "theorem", "smul_mem_pointwise_smul", ["submodule"]], ["add", "theorem", "zero_eq_bot", ["submodule"]]]}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/archimedean.lean", "newPath": "src/group_theory/archimedean.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/general_commutator.lean", "newPath": "src/group_theory/general_commutator.lean", "changes": []}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup/basic.lean", "changes": [["del", "theorem", "coe_pointwise_smul", ["add_subgroup"]], ["del", "theorem", "pointwise_smul_to_add_submonoid", ["add_subgroup"]], ["del", "theorem", "smul_mem_pointwise_smul", ["add_subgroup"]], ["del", "theorem", "coe_pointwise_smul", ["subgroup"]], ["del", "theorem", "pointwise_smul_to_submonoid", ["subgroup"]], ["del", "theorem", "smul_mem_pointwise_smul", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/group_theory/subgroup/pointwise.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_to_add_submonoid", ["add_subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul", ["add_subgroup"]], ["add", "theorem", "coe_pointwise_smul", ["subgroup"]], ["add", "theorem", "pointwise_smul_to_submonoid", ["subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/pointwise.lean", "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "add_eq_sup", ["submodule"]], ["del", "theorem", "coe_pointwise_smul", ["submodule"]], ["del", "theorem", "lt_add_iff_not_mem", ["submodule"]], ["add", "theorem", "lt_sup_iff_not_mem", ["submodule"]], ["mod", "theorem", "map_add_le", ["submodule"]], ["del", "theorem", "pointwise_smul_to_add_subgroup", ["submodule"]], ["del", "theorem", "pointwise_smul_to_add_submonoid", ["submodule"]], ["del", "theorem", "smul_le_self_of_tower", ["submodule"]], ["del", "theorem", "smul_mem_pointwise_smul", ["submodule"]], ["del", "theorem", "zero_eq_bot", ["submodule"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}]}, {"timestamp": 1632357496, "sha": "20981bee", "message": "feat(linear_algebra/charpoly): add linear_map.charpoly (#9279)\nWe add `linear_map.charpoly`, the characteristic polynomial of an endomorphism of a finite free module, and a basic API.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/charpoly.lean", "changes": [["add", "theorem", "aeval_self_charpoly", ["linear_map"]], ["add", "def", "charpoly", ["linear_map"]], ["add", "theorem", "charpoly_coeff_zero_of_injective", ["linear_map"]], ["add", "theorem", "charpoly_def", ["linear_map"]], ["add", "theorem", "charpoly_monic", ["linear_map"]], ["add", "theorem", "charpoly_to_matrix", ["linear_map"]], ["add", "theorem", "is_integral", ["linear_map"]], ["add", "theorem", "minpoly_dvd_charpoly", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/charpoly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": [["add", "theorem", "charmatrix_reindex", []], ["add", "theorem", "charpoly_reindex", ["matrix"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "def", "index_equiv", ["basis"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}]}, {"timestamp": 1632342050, "sha": "5b3b71a0", "message": "chore(data/equiv): rename `bool_to_equiv_prod` to `bool_arrow_equiv_prod` (#9333)\nOther changes:\n* use an explicit definition;\n* use `@[simps]`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "bool_arrow_equiv_prod", ["equiv"]], ["del", "def", "bool_to_equiv_prod", ["equiv"]], ["del", "theorem", "bool_to_equiv_prod_apply", ["equiv"]], ["del", "theorem", "bool_to_equiv_prod_symm_apply_ff", ["equiv"]], ["del", "theorem", "bool_to_equiv_prod_symm_apply_tt", ["equiv"]]]}]}, {"timestamp": 1632328513, "sha": "6eb8d414", "message": "chore(ring_theory/dedekind_domain): speed up `dedekind_domain.lean` (#9232)\n@eric-wieser [noticed that `dedekind_domain.lean`](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Timeouts.20in.20ring_theory.2Fdedekind_domain.2Elean.3A664.3A9) was compiling slowly and on the verge of a timeout. @kbuzzard, @sgouezel and I reworked some definitions to make everything elaborate much faster: `is_dedekind_domain_inv_iff`, `mul_inv_cancel_of_le_one` and `ideal.unique_factorization_monoid` went from over 10 seconds on my machine to less than 3 seconds. No other declaration in that file now takes over 2 seconds on my machine.\nApart from the three declarations getting new proofs, I also made the following changes:\n * The operations on `localization` (`has_add`, `has_mul`, `has_one`, `has_zero`, `has_neg`, `npow` and `localization.inv`) are now `@[irreducible]`\n * `fraction_ring.field` copies its field from `localization.comm_ring` for faster unification (less relevant after the previous change)\n * Added `fractional_ideal.map_mem_map` and `fractional_ideal.map_injective` to simplify the proof of `is_dedekind_domain_inv_iff`.\n * Split the proof of `matrix.exists_mul_vec_eq_zero_iff` into two parts to speed it up", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "def", "lift_on", ["localization"]], ["add", "theorem", "lift_on_mk'", ["localization"]], ["add", "theorem", "lift_on_mk", ["localization"]], ["add", "def", "lift_on₂", ["localization"]], ["add", "theorem", "lift_on₂_mk'", ["localization"]], ["add", "theorem", "lift_on₂_mk", ["localization"]], ["add", "theorem", "mk_eq_mk_iff", ["localization"]], ["add", "theorem", "mk_mul", ["localization"]], ["add", "theorem", "mk_one", ["localization"]], ["add", "theorem", "mk_self", ["localization"]], ["add", "def", "rec", ["localization"]], ["add", "theorem", "rec_mk", ["localization"]]]}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": [["add", "theorem", "exists_mul_vec_eq_zero_iff'", ["matrix"]]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "map_injective", ["fractional_ideal"]], ["add", "theorem", "map_mem_map", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "add_mk", ["localization"]], ["mod", "theorem", "mk_eq_mk'", ["localization"]], ["add", "theorem", "mk_zero", ["localization"]], ["add", "theorem", "neg_mk", ["localization"]], ["add", "theorem", "to_localization_map_eq_monoid_of", ["localization"]]]}, {"oldPath": "src/set_theory/surreal/dyadic.lean", "newPath": "src/set_theory/surreal/dyadic.lean", "changes": []}]}, {"timestamp": 1632325059, "sha": "dc5a3db9", "message": "feat(algebra/category): Forgetful functors preserve filtered colimits (#9101)\nShows that forgetful functors of various algebraic categories preserve filtered colimits.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/CommRing/filtered_colimits.lean", "changes": [["add", "def", "R", ["CommRing", "filtered_colimits"]], ["add", "def", "colimit", ["CommRing", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["CommRing", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["CommRing", "filtered_colimits"]], ["add", "def", "R", ["CommSemiRing", "filtered_colimits"]], ["add", "def", "colimit", ["CommSemiRing", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["CommSemiRing", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["CommSemiRing", "filtered_colimits"]], ["add", "def", "R", ["Ring", "filtered_colimits"]], ["add", "def", "colimit", ["Ring", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["Ring", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["Ring", "filtered_colimits"]], ["add", "def", "R", ["SemiRing", "filtered_colimits"]], ["add", "def", "colimit", ["SemiRing", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["SemiRing", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["SemiRing", "filtered_colimits"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Group/filtered_colimits.lean", "changes": [["add", "def", "G", ["CommGroup", "filtered_colimits"]], ["add", "def", "colimit", ["CommGroup", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["CommGroup", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["CommGroup", "filtered_colimits"]], ["add", "def", "mk", ["Group", "filtered_colimits", "G"]], ["add", "theorem", "mk_eq", ["Group", "filtered_colimits", "G"]], ["add", "def", "G", ["Group", "filtered_colimits"]], ["add", "def", "colimit", ["Group", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["Group", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["Group", "filtered_colimits"]], ["add", "def", "colimit_inv_aux", ["Group", "filtered_colimits"]], ["add", "theorem", "colimit_inv_aux_eq_of_rel", ["Group", "filtered_colimits"]], ["add", "theorem", "colimit_inv_mk_eq", ["Group", "filtered_colimits"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/filtered_colimits.lean", "changes": [["add", "def", "mk", ["Module", "filtered_colimits", "M"]], ["add", "theorem", "mk_eq", ["Module", "filtered_colimits", "M"]], ["add", "def", "M", ["Module", "filtered_colimits"]], ["add", "def", "cocone_morphism", ["Module", "filtered_colimits"]], ["add", "def", "colimit", ["Module", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["Module", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["Module", "filtered_colimits"]], ["add", "def", "colimit_desc", ["Module", "filtered_colimits"]], ["add", "def", "colimit_smul_aux", ["Module", "filtered_colimits"]], ["add", "theorem", "colimit_smul_aux_eq_of_rel", ["Module", "filtered_colimits"]], ["add", "theorem", "colimit_smul_mk_eq", ["Module", "filtered_colimits"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Mon/filtered_colimits.lean", "changes": [["add", "def", "M", ["CommMon", "filtered_colimits"]], ["add", "def", "colimit", ["CommMon", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["CommMon", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["CommMon", "filtered_colimits"]], ["add", "def", "mk", ["Mon", "filtered_colimits", "M"]], ["add", "theorem", "mk_eq", ["Mon", "filtered_colimits", "M"]], ["add", "def", "M", ["Mon", "filtered_colimits"]], ["add", "def", "cocone_morphism", ["Mon", "filtered_colimits"]], ["add", "theorem", "cocone_naturality", ["Mon", "filtered_colimits"]], ["add", "def", "colimit", ["Mon", "filtered_colimits"]], ["add", "def", "colimit_cocone", ["Mon", "filtered_colimits"]], ["add", "def", "colimit_cocone_is_colimit", ["Mon", "filtered_colimits"]], ["add", "def", "colimit_desc", ["Mon", "filtered_colimits"]], ["add", "def", "colimit_mul_aux", ["Mon", "filtered_colimits"]], ["add", "theorem", "colimit_mul_aux_eq_of_rel_left", ["Mon", "filtered_colimits"]], ["add", "theorem", "colimit_mul_aux_eq_of_rel_right", ["Mon", "filtered_colimits"]], ["add", "theorem", "colimit_mul_mk_eq", ["Mon", "filtered_colimits"]], ["add", "theorem", "colimit_one_eq", ["Mon", "filtered_colimits"]]]}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/filtered.lean", "changes": []}]}, {"timestamp": 1632321446, "sha": "41414a3a", "message": "chore(analysis/special_functions): typo in module doc (#9330)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}]}, {"timestamp": 1632321445, "sha": "2b84c4c6", "message": "feat(linear_algebra/matrix/basis): add matrix basis change formula (#9280)\nWe add `basis_to_matrix_mul_linear_map_to_matrix_mul_basis_to_matrix`, the formula for the change of basis.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "basis_to_matrix_mul_linear_map_to_matrix_mul_basis_to_matrix", []]]}]}, {"timestamp": 1632321443, "sha": "68dbf27c", "message": "feat(number_theory): the class group of an integral closure is finite (#9059)\nThis is essentially the proof that the ring of integers of a global field has a finite class group, apart from filling in each hypothesis.", "changes": [{"oldPath": null, "newPath": "src/number_theory/class_number/finite.lean", "changes": [["add", "theorem", "exists_mem_finset_approx'", ["class_group"]], ["add", "theorem", "exists_mem_finset_approx", ["class_group"]], ["add", "theorem", "exists_min", ["class_group"]], ["add", "theorem", "exists_mk0_eq_mk0", ["class_group"]], ["add", "theorem", "zero_not_mem", ["class_group", "finset_approx"]], ["add", "theorem", "mem_finset_approx", ["class_group"]], ["add", "theorem", "mk_M_mem_surjective", ["class_group"]], ["add", "theorem", "ne_bot_of_prod_finset_approx_mem", ["class_group"]], ["add", "theorem", "norm_bound_pos", ["class_group"]], ["add", "theorem", "norm_le", ["class_group"]], ["add", "theorem", "norm_lt", ["class_group"]], ["add", "theorem", "prod_finset_approx_ne_zero", ["class_group"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "exists_smul_eq_mul", ["is_integral_closure"]]]}]}, {"timestamp": 1632312706, "sha": "a5d2dbc5", "message": "chore(measure_theory/integral/set_integral): generalize, golf (#9328)\n* rename `integrable_on_finite_union` to `integrable_on_finite_Union`;\n* rename `integrable_on_finset_union` to `integrable_on_finset_Union`;\n* add `integrable_on_fintype_Union`;\n* generalize `tendsto_measure_Union` and `tendsto_measure_Inter from\n `s : ℕ → set α` to\n `[semilattice_sup ι] [encodable ι] {s : ι → set α}`;\n* add `integral_diff`;\n* generalize `integral_finset_bUnion`, `integral_fintype_Union` and\n `has_sum_integral_Union` to require appropriate `integrable_on`\n instead of `integrable`;\n* golf some proofs.", "changes": [{"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_finite_Union", ["measure_theory"]], ["del", "theorem", "integrable_on_finite_union", ["measure_theory"]], ["add", "theorem", "integrable_on_finset_Union", ["measure_theory"]], ["del", "theorem", "integrable_on_finset_union", ["measure_theory"]], ["add", "theorem", "integrable_on_fintype_Union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_diff", ["measure_theory"]], ["mod", "theorem", "integral_finset_bUnion", ["measure_theory"]], ["mod", "theorem", "tendsto_set_integral_of_monotone", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "tendsto_measure_Inter", ["measure_theory"]], ["mod", "theorem", "tendsto_measure_Union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": []}]}, {"timestamp": 1632312704, "sha": "a994071f", "message": "chore(data/complex/module): rename `complex.smul_coe` to `real_smul` (#9326)\n* the name was misleading b/c there is no `coe` in the LHS;\n* add `complex.coe_smul`: given `x : ℝ` and `y : E`, we have\n `(x : ℂ) • y = x • y`;\n* add `normed_space.complex_to_real`.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["mod", "theorem", "coe_algebra_map", ["complex"]], ["add", "theorem", "coe_smul", ["complex"]], ["add", "theorem", "real_smul", ["complex"]], ["del", "theorem", "smul_coe", ["complex"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}]}, {"timestamp": 1632312703, "sha": "7e350c24", "message": "feat(category_theory/*): Fully faithful functors induces equivalence (#9322)\nNeeded for AffineSchemes ≌ CommRingᵒᵖ.", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/essential_image.lean", "newPath": "src/category_theory/essential_image.lean", "changes": [["mod", "def", "to_ess_image_comp_essential_image_inclusion", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "def", "of_comp_faithful", ["category_theory", "full"]]]}]}, {"timestamp": 1632312702, "sha": "15730e8d", "message": "chore(analysis/convex): trivial generalizations of ℝ (#9298)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "convex_halfspace_im_ge", []], ["del", "theorem", "convex_halfspace_im_gt", []], ["del", "theorem", "convex_halfspace_im_le", []], ["del", "theorem", "convex_halfspace_im_lt", []], ["del", "theorem", "convex_halfspace_re_ge", []], ["del", "theorem", "convex_halfspace_re_gt", []], ["del", "theorem", "convex_halfspace_re_le", []], ["del", "theorem", "convex_halfspace_re_lt", []], ["mod", "theorem", "convex_std_simplex", []], ["mod", "theorem", "ite_eq_mem_std_simplex", []], ["mod", "def", "std_simplex", []]]}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["mod", "theorem", "center_mass_mem", ["convex"]], ["mod", "theorem", "sum_mem", ["convex"]], ["add", "def", "center_mass", ["finset"]], ["mod", "theorem", "center_mass_mem_convex_hull", ["finset"]], ["mod", "theorem", "mem_Icc_of_mem_std_simplex", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/complex.lean", "changes": [["add", "theorem", "convex_halfspace_im_ge", []], ["add", "theorem", "convex_halfspace_im_gt", []], ["add", "theorem", "convex_halfspace_im_le", []], ["add", "theorem", "convex_halfspace_im_lt", []], ["add", "theorem", "convex_halfspace_re_ge", []], ["add", "theorem", "convex_halfspace_re_gt", []], ["add", "theorem", "convex_halfspace_re_le", []], ["add", "theorem", "convex_halfspace_re_lt", []]]}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/function.lean", "newPath": "src/analysis/convex/function.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["mod", "theorem", "bounded_std_simplex", []], ["mod", "theorem", "compact_std_simplex", []], ["mod", "theorem", "is_closed_std_simplex", []]]}]}, {"timestamp": 1632312701, "sha": "eb3d6001", "message": "feat(data/{list,multiset}): add `can_lift` instances (#9262)\n* add `can_lift` instances for `set`, `list`, `multiset`, and `finset`;\n* use them in `submonoid.{list,multiset}_prod_mem`;\n* more `to_additive` attrs in `group_theory.submonoid.membership`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["del", "theorem", "nsmul_mem", ["add_submonoid"]], ["mod", "theorem", "coe_finset_prod", ["submonoid"]], ["mod", "theorem", "coe_list_prod", ["submonoid"]], ["mod", "theorem", "coe_multiset_prod", ["submonoid"]], ["mod", "theorem", "coe_pow", ["submonoid"]], ["mod", "theorem", "list_prod_mem", ["submonoid"]], ["mod", "theorem", "multiset_prod_mem", ["submonoid"]], ["mod", "theorem", "pow_mem", ["submonoid"]]]}]}, {"timestamp": 1632304867, "sha": "c9638b97", "message": "chore(measure_theory): add 2 lemmas (#9329)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "bounded_by_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "theorem", "bounded_by_eq_self", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1632304865, "sha": "6f2cbde0", "message": "chore(order/lattice): tidy up pi instances (#9305)\nThese were previously defined in the wrong file, and the lemmas were missing the `pi` prefix that is present on `pi.add_apply` etc.\nThis also removes the instance names as they are autogenerated correctly.\nFinally, this adds new `top_def`, `bot_def`, `sup_def`, and `inf_def` lemmas, which are useful for when wanting to rewrite under the lambda. We already have `zero_def`, `add_def`, etc.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["del", "theorem", "bot_apply", []], ["del", "theorem", "inf_apply", []], ["add", "theorem", "bot_apply", ["pi"]], ["add", "theorem", "bot_def", ["pi"]], ["add", "theorem", "top_apply", ["pi"]], ["add", "theorem", "top_def", ["pi"]], ["del", "theorem", "sup_apply", []], ["del", "theorem", "top_apply", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_apply", ["pi"]], ["add", "theorem", "inf_def", ["pi"]], ["add", "theorem", "sup_apply", ["pi"]], ["add", "theorem", "sup_def", ["pi"]]]}]}, {"timestamp": 1632304864, "sha": "f95f216f", "message": "feat(linear_algebra/std_basis): add matrix.std_basis_eq_std_basis_matrix (#9216)\nAs suggested in #9072 by @eric-wieser, we modify `matrix.std_basis` to use the more familiar `n × m` as the index of the basis and we prove that the `(i,j)`-th element of this basis is `matrix.std_basis_matrix i j 1`.", "changes": [{"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["add", "theorem", "std_basis_eq_std_basis_matrix", ["matrix"]]]}]}, {"timestamp": 1632296248, "sha": "5b55a869", "message": "chore(analysis/calculate/fderiv): move results about analytic functions to a new file (#9296)\nThese are not necessary for many of the downstream files, so we can speed up compilation a bit by parallelising these.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["del", "theorem", "differentiable_at", ["analytic_at"]], ["del", "theorem", "differentiable_within_at", ["analytic_at"]], ["del", "theorem", "differentiable_at", ["has_fpower_series_at"]], ["del", "theorem", "fderiv", ["has_fpower_series_at"]], ["del", "theorem", "has_fderiv_at", ["has_fpower_series_at"]], ["del", "theorem", "has_strict_fderiv_at", ["has_fpower_series_at"]], ["del", "theorem", "differentiable_on", ["has_fpower_series_on_ball"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv_analytic.lean", "changes": [["add", "theorem", "differentiable_at", ["analytic_at"]], ["add", "theorem", "differentiable_within_at", ["analytic_at"]], ["add", "theorem", "differentiable_at", ["has_fpower_series_at"]], ["add", "theorem", "fderiv", ["has_fpower_series_at"]], ["add", "theorem", "has_fderiv_at", ["has_fpower_series_at"]], ["add", "theorem", "has_strict_fderiv_at", ["has_fpower_series_at"]], ["add", "theorem", "differentiable_on", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/exponential.lean", "newPath": "src/analysis/normed_space/exponential.lean", "changes": []}]}, {"timestamp": 1632296247, "sha": "6d866224", "message": "chore(*): removing unneeded imports (#9278)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "def", "to_continuous_map_alg_hom", ["locally_constant"]], ["del", "def", "to_continuous_map_linear_map", ["locally_constant"]], ["del", "def", "to_continuous_map_monoid_hom", ["locally_constant"]]]}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/category_theory/sites/types.lean", "newPath": "src/category_theory/sites/types.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/factor_thru.lean", "newPath": "src/category_theory/subobject/factor_thru.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/mono_over.lean", "newPath": "src/category_theory/subobject/mono_over.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/pretriangulated.lean", "newPath": "src/category_theory/triangulated/pretriangulated.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/continuous_function/locally_constant.lean", "changes": [["add", "def", "to_continuous_map_alg_hom", ["locally_constant"]], ["add", "def", "to_continuous_map_linear_map", ["locally_constant"]], ["add", "def", "to_continuous_map_monoid_hom", ["locally_constant"]]]}]}, {"timestamp": 1632296241, "sha": "b77aa3aa", "message": "feat(linear_algebra/affine_space/affine_subspace): prove that a set whose affine span is top cannot be empty. (#9113)\nThe lemma `finset.card_sdiff_add_card` is unrelated but I've been meaning to add it\nand now seemed like a good time since I'm touching `data/finset/basic.lean` anyway.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_sdiff_add_card", ["finset"]], ["add", "theorem", "nonempty_coe_sort", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nonempty_coe_sort", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "bot_ne_top", ["affine_subspace"]], ["add", "theorem", "ext_iff", ["affine_subspace"]], ["add", "theorem", "nonempty_of_affine_span_eq_top", ["affine_subspace"]]]}]}, {"timestamp": 1632293110, "sha": "f59dbf2c", "message": "chore(data/complex/exponential): add `abs_exp`, golf (#9327)", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "abs_exp", ["complex"]]]}]}, {"timestamp": 1632278920, "sha": "7112730d", "message": "feat(set_theory/cardinal_ordinal): mul_le_max and others (#9269)", "changes": [{"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "add_le_max", ["cardinal"]], ["add", "theorem", "mul_le_max", ["cardinal"]], ["add", "theorem", "power_nat_le_max", ["cardinal"]]]}]}, {"timestamp": 1632278919, "sha": "9c34e80c", "message": "chore(linear_algebra/basic): generalize `add_monoid_hom_lequiv_{nat,int}` (#9233)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "add_monoid_hom_lequiv_int", []], ["mod", "def", "add_monoid_hom_lequiv_nat", []]]}]}, {"timestamp": 1632272512, "sha": "5625ec02", "message": "refactor(algebra/module/linear_map): Put linear equivalences in their own file (#9301)\nThis is consistent with how we have ring homs and ring equivs in separate files.\nBy having each of these files smaller than the original, we can split `linear_algebra/basic` more effectively between them.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["del", "def", "to_linear_equiv", ["distrib_mul_action"]], ["del", "def", "to_linear_map", ["distrib_mul_action"]], ["del", "theorem", "apply_symm_apply", ["linear_equiv"]], ["del", "theorem", "coe_coe", ["linear_equiv"]], ["del", "theorem", "coe_mk", ["linear_equiv"]], ["del", "theorem", "coe_of_involutive", ["linear_equiv"]], ["del", "theorem", "coe_symm_mk", ["linear_equiv"]], ["del", "theorem", "coe_to_add_equiv", ["linear_equiv"]], ["del", "theorem", "coe_to_equiv", ["linear_equiv"]], ["del", "theorem", "coe_to_linear_map", ["linear_equiv"]], ["del", "theorem", "comp_coe", ["linear_equiv"]], ["del", "theorem", "eq_symm_apply", ["linear_equiv"]], ["del", "theorem", "ext", ["linear_equiv"]], ["del", "theorem", "ext_iff", ["linear_equiv"]], ["del", "theorem", "inv_fun_eq_symm", ["linear_equiv"]], ["del", "theorem", "map_add", ["linear_equiv"]], ["del", "theorem", "map_eq_zero_iff", ["linear_equiv"]], ["del", "theorem", "map_ne_zero_iff", ["linear_equiv"]], ["del", "theorem", "map_smul", ["linear_equiv"]], ["del", "theorem", "map_sum", ["linear_equiv"]], ["del", "theorem", "map_zero", ["linear_equiv"]], ["del", "theorem", "mk_coe'", ["linear_equiv"]], ["del", "theorem", "mk_coe", ["linear_equiv"]], ["del", "def", "of_involutive", ["linear_equiv"]], ["del", "def", "refl", ["linear_equiv"]], ["del", "theorem", "refl_apply", ["linear_equiv"]], ["del", "theorem", "refl_symm", ["linear_equiv"]], ["del", "theorem", "refl_to_linear_map", ["linear_equiv"]], ["del", "theorem", "refl_trans", ["linear_equiv"]], ["del", "def", "restrict_scalars", ["linear_equiv"]], ["del", "theorem", "restrict_scalars_inj", ["linear_equiv"]], ["del", "theorem", "restrict_scalars_injective", ["linear_equiv"]], ["del", "def", "symm_apply", ["linear_equiv", "simps"]], ["del", "def", "symm", ["linear_equiv"]], ["del", "theorem", "symm_apply_apply", ["linear_equiv"]], ["del", "theorem", "symm_apply_eq", ["linear_equiv"]], ["del", "theorem", "symm_bijective", ["linear_equiv"]], ["del", "theorem", "symm_mk", ["linear_equiv"]], ["del", "theorem", "symm_symm", ["linear_equiv"]], ["del", "theorem", "symm_trans", ["linear_equiv"]], ["del", "theorem", "symm_trans_apply", ["linear_equiv"]], ["del", "theorem", "to_add_monoid_hom_commutes", ["linear_equiv"]], ["del", "def", "to_equiv", ["linear_equiv"]], ["del", "theorem", "to_equiv_inj", ["linear_equiv"]], ["del", "theorem", "to_equiv_injective", ["linear_equiv"]], ["del", "theorem", "to_fun_eq_coe", ["linear_equiv"]], ["del", "theorem", "to_linear_map_eq_coe", ["linear_equiv"]], ["del", "theorem", "to_linear_map_inj", ["linear_equiv"]], ["del", "theorem", "to_linear_map_injective", ["linear_equiv"]], ["del", "def", "trans", ["linear_equiv"]], ["del", "theorem", "trans_apply", ["linear_equiv"]], ["del", "theorem", "trans_refl", ["linear_equiv"]], ["del", "theorem", "trans_symm", ["linear_equiv"]], ["del", "structure", "linear_equiv", []], ["del", "def", "to_linear_equiv", ["module", "comp_hom"]]]}, {"oldPath": "src/algebra/module/opposites.lean", "newPath": "src/algebra/module/opposites.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/equiv/module.lean", "changes": [["add", "def", "to_linear_equiv", ["distrib_mul_action"]], ["add", "def", "to_linear_map", ["distrib_mul_action"]], ["add", "theorem", "apply_symm_apply", ["linear_equiv"]], ["add", "theorem", "coe_coe", ["linear_equiv"]], ["add", "theorem", "coe_mk", ["linear_equiv"]], ["add", "theorem", "coe_of_involutive", ["linear_equiv"]], ["add", "theorem", "coe_symm_mk", ["linear_equiv"]], ["add", "theorem", "coe_to_add_equiv", ["linear_equiv"]], ["add", "theorem", "coe_to_equiv", ["linear_equiv"]], ["add", "theorem", "coe_to_linear_map", ["linear_equiv"]], ["add", "theorem", "comp_coe", ["linear_equiv"]], ["add", "theorem", "eq_symm_apply", ["linear_equiv"]], ["add", "theorem", "ext", ["linear_equiv"]], ["add", "theorem", "ext_iff", ["linear_equiv"]], ["add", "theorem", "inv_fun_eq_symm", ["linear_equiv"]], ["add", "theorem", "map_add", ["linear_equiv"]], ["add", "theorem", "map_eq_zero_iff", ["linear_equiv"]], ["add", "theorem", "map_ne_zero_iff", ["linear_equiv"]], ["add", "theorem", "map_smul", ["linear_equiv"]], ["add", "theorem", "map_sum", ["linear_equiv"]], ["add", "theorem", "map_zero", ["linear_equiv"]], ["add", "theorem", "mk_coe'", ["linear_equiv"]], ["add", "theorem", "mk_coe", ["linear_equiv"]], ["add", "def", "of_involutive", ["linear_equiv"]], ["add", "def", "refl", ["linear_equiv"]], ["add", "theorem", "refl_apply", ["linear_equiv"]], ["add", "theorem", "refl_symm", ["linear_equiv"]], ["add", "theorem", "refl_to_linear_map", ["linear_equiv"]], ["add", "theorem", "refl_trans", ["linear_equiv"]], ["add", "def", "restrict_scalars", ["linear_equiv"]], ["add", "theorem", "restrict_scalars_inj", ["linear_equiv"]], ["add", "theorem", "restrict_scalars_injective", ["linear_equiv"]], ["add", "def", "symm_apply", ["linear_equiv", "simps"]], ["add", "def", "symm", ["linear_equiv"]], ["add", "theorem", "symm_apply_apply", ["linear_equiv"]], ["add", "theorem", "symm_apply_eq", ["linear_equiv"]], ["add", "theorem", "symm_bijective", ["linear_equiv"]], ["add", "theorem", "symm_mk", ["linear_equiv"]], ["add", "theorem", "symm_symm", ["linear_equiv"]], ["add", "theorem", "symm_trans", ["linear_equiv"]], ["add", "theorem", "symm_trans_apply", ["linear_equiv"]], ["add", "theorem", "to_add_monoid_hom_commutes", ["linear_equiv"]], ["add", "def", "to_equiv", ["linear_equiv"]], ["add", "theorem", "to_equiv_inj", ["linear_equiv"]], ["add", "theorem", "to_equiv_injective", ["linear_equiv"]], ["add", "theorem", "to_fun_eq_coe", ["linear_equiv"]], ["add", "theorem", "to_linear_map_eq_coe", ["linear_equiv"]], ["add", "theorem", "to_linear_map_inj", ["linear_equiv"]], ["add", "theorem", "to_linear_map_injective", ["linear_equiv"]], ["add", "def", "trans", ["linear_equiv"]], ["add", "theorem", "trans_apply", ["linear_equiv"]], ["add", "theorem", "trans_refl", ["linear_equiv"]], ["add", "theorem", "trans_symm", ["linear_equiv"]], ["add", "structure", "linear_equiv", []], ["add", "def", "to_linear_equiv", ["module", "comp_hom"]]]}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": []}]}, {"timestamp": 1632246060, "sha": "e0d568e5", "message": "feat(analysis/normed_space/basic): the rescaling of a ball is a ball (#9297)\nAlso rename all statements with `ball_0` to `ball_zero` for coherence.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "preimage_smul_inv'", []], ["add", "theorem", "preimage_smul_inv", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "ball_0_eq", []], ["add", "theorem", "ball_zero_eq", []], ["del", "theorem", "mem_ball_0_iff", []], ["add", "theorem", "mem_ball_zero_iff", []], ["del", "theorem", "mem_emetric_ball_0_iff", []], ["add", "theorem", "mem_emetric_ball_zero_iff", []], ["add", "theorem", "preimage_add_ball", []], ["add", "theorem", "preimage_add_closed_ball", []], ["add", "theorem", "preimage_add_sphere", []], ["add", "theorem", "smul_ball", []], ["add", "theorem", "smul_closed_ball'", []], ["add", "theorem", "smul_closed_ball", []]]}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ball_disjoint_ball", ["metric"]]]}]}, {"timestamp": 1632239646, "sha": "56a6ed6e", "message": "chore(algebra/algebra/basic): remove a duplicate instance (#9320)\n`algebra.linear_map.module'` is just a special case of `linear_map.module'`.\n`by apply_instance` finds this instance provided it's used after the definition of `is_scalar_tower.to_smul_comm_class`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}]}, {"timestamp": 1632239644, "sha": "420f11ab", "message": "feat(measure_theory/decomposition/radon_nikodym): Radon-Nikodym and Lebesgue decomposition for signed measures (#9065)\nThis PR proves the Radon-Nikodym theorem for signed measures.", "changes": [{"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": [["add", "theorem", "coe_smul", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "real_smul_def", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "real_smul_neg", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "real_smul_neg_part_neg", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "real_smul_neg_part_nonneg", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "real_smul_nonneg", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "real_smul_pos_part_neg", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "real_smul_pos_part_nonneg", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "smul_neg_part", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "smul_pos_part", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "to_signed_measure_smul", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "to_jordan_decomposition_eq", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_jordan_decomposition_smul", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_jordan_decomposition_smul_real", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_jordan_decomposition_smul_real_nonneg", ["measure_theory", "signed_measure"]], ["add", "theorem", "total_variation_mutually_singular_iff", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["add", "theorem", "lintegral_radon_nikodym_deriv_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "singular_part_add", ["measure_theory", "measure"]], ["add", "theorem", "singular_part_smul", ["measure_theory", "measure"]], ["add", "theorem", "singular_part_zero", ["measure_theory", "measure"]], ["add", "theorem", "eq_radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "eq_singular_part", ["measure_theory", "signed_measure"]], ["add", "theorem", "have_lebesgue_decomposition_mk", ["measure_theory", "signed_measure"]], ["add", "theorem", "integrable_radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "jordan_decomposition_add_with_density_mutually_singular", ["measure_theory", "signed_measure"]], ["add", "theorem", "measurable_radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "mutually_singular_singular_part", ["measure_theory", "signed_measure"]], ["add", "theorem", "not_have_lebesgue_decomposition_iff", ["measure_theory", "signed_measure"]], ["add", "def", "radon_nikodym_deriv", ["measure_theory", "signed_measure"]], ["add", "theorem", "radon_nikodym_deriv_add", ["measure_theory", "signed_measure"]], ["add", "theorem", "radon_nikodym_deriv_neg", ["measure_theory", "signed_measure"]], ["add", "theorem", "radon_nikodym_deriv_smul", ["measure_theory", "signed_measure"]], ["add", "theorem", "radon_nikodym_deriv_sub", ["measure_theory", "signed_measure"]], ["add", "def", "singular_part", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_add", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_add_with_density_radon_nikodym_deriv_eq", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_mutually_singular", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_neg", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_smul", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_smul_nnreal", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_sub", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_total_variation", ["measure_theory", "signed_measure"]], ["add", "theorem", "singular_part_zero", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_jordan_decomposition_eq_of_eq_add_with_density", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": [["add", "theorem", "with_density_radon_nikodym_deriv_to_real_eq", ["measure_theory", "measure"]], ["add", "theorem", "absolutely_continuous_iff_with_densityᵥ_radon_nikodym_deriv_eq", ["measure_theory", "signed_measure"]], ["add", "theorem", "with_densityᵥ_radon_nikodym_deriv_eq", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "with_density_of_real_mutually_singular", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "to_signed_measure_congr", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": []}]}, {"timestamp": 1632236074, "sha": "c4fbb6ff", "message": "refactor(data/real/ereal): replace `.cases` with `.rec` (#9321)\nThis provides a nicer spelling than the pile of `rfl`s we use with the old `ereal.cases`, as follows:\n```diff\n-rcases x.cases with rfl|⟨y, rfl⟩|rfl,\n+induction x using ereal.rec with y,\n```\nAs a bonus, the subgoals now end up with names matching the hypotheses.", "changes": [{"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}]}, {"timestamp": 1632224810, "sha": "30617c7b", "message": "chore(group_theory/order_of_element): bump up (#9318)\nthere may be other lemmas that can similarly be moved around here", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1632217990, "sha": "b5a6422f", "message": "feat(data/finset): add lemmas (#9209)\n* add `finset.image_id'`, a version of `finset.image_id` using `λ x, x` instead of `id`;\n* add some lemmas about `finset.bUnion`, `finset.sup`, and `finset.sup'`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "bUnion_nonempty", ["finset"]], ["add", "theorem", "image_id'", ["finset"]], ["add", "theorem", "bUnion", ["finset", "nonempty"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf'_bUnion", ["finset"]], ["add", "theorem", "inf'_congr", ["finset"]], ["add", "theorem", "inf_bUnion", ["finset"]], ["add", "theorem", "inf_const", ["finset"]], ["add", "theorem", "sup'_bUnion", ["finset"]], ["add", "theorem", "sup'_congr", ["finset"]], ["add", "theorem", "sup_bUnion", ["finset"]]]}]}, {"timestamp": 1632211431, "sha": "524ded6c", "message": "refactor(data/polynomial/{coeff,monomial}): move smul_eq_C_mul (#9287)\nThis moves `smul_eq_C_mul` from `monomial.lean` into `coeff.lean` so that the import on `monomial.lean` can be changed from `data.polynomial.coeff` to `data.polynomial.basic`. This should shave about 10 seconds off the [longest pole for parallelized mathlib compilation](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/The.20long.20pole.20in.20mathlib/near/253932389).", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "smul_eq_C_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["del", "theorem", "smul_eq_C_mul", ["polynomial"]]]}]}, {"timestamp": 1632211430, "sha": "4cee7438", "message": "feat(measure_theory/measure/vector_measure): add `mutually_singular.neg` (#9282)", "changes": [{"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "neg_left", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "neg_left_iff", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "neg_right", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "neg_right_iff", ["measure_theory", "vector_measure", "mutually_singular"]]]}]}, {"timestamp": 1632211428, "sha": "78340e39", "message": "feat(topology/continuous_function/basic): gluing lemmas (#9239)", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "lift_cover_coe'", ["continuous_map"]], ["add", "theorem", "lift_cover_coe", ["continuous_map"]], ["add", "theorem", "lift_cover_restrict'", ["continuous_map"]], ["add", "theorem", "lift_cover_restrict", ["continuous_map"]]]}]}, {"timestamp": 1632206338, "sha": "49e0bcfe", "message": "feat(topology/bases): continuous_of_basis_is_open_preimage (#9281)\nCheck continuity on a basis.", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}]}, {"timestamp": 1632191991, "sha": "13780bce", "message": "chore(scripts): update nolints.txt (#9317)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1632170580, "sha": "46ff4496", "message": "feat(data/vector/basic): lemmas, and linting (#9260)", "changes": [{"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": [["add", "theorem", "length_coe", ["vector"]], ["add", "theorem", "nth_repeat", ["vector"]], ["mod", "theorem", "nth_tail", ["vector"]], ["add", "theorem", "nth_tail_succ", ["vector"]], ["add", "theorem", "reverse_reverse", ["vector"]]]}, {"oldPath": null, "newPath": "src/data/vector/zip.lean", "changes": [["add", "def", "zip_with", ["vector"]], ["add", "theorem", "zip_with_nth", ["vector"]], ["add", "theorem", "zip_with_tail", ["vector"]], ["add", "theorem", "zip_with_to_list", ["vector"]]]}]}, {"timestamp": 1632161460, "sha": "175afa8a", "message": "refactor(analysis/convex/{extreme, exposed}): generalize `is_extreme` and `is_exposed` to semimodules (#9264)\n`is_extreme` and `is_exposed` are currently only defined in real vector spaces. This generalizes ℝ to arbitrary `ordered_semiring`s in definitions and abstracts it away to the correct generality in lemmas. It also generalizes the space from `add_comm_group` to `add_comm_monoid`.", "changes": [{"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": [["mod", "theorem", "is_exposed", ["continuous_linear_map", "to_exposed"]], ["mod", "def", "to_exposed", ["continuous_linear_map"]], ["mod", "theorem", "exposed_points_subset_extreme_points", []], ["mod", "theorem", "antisymm", ["is_exposed"]], ["mod", "theorem", "eq_inter_halfspace", ["is_exposed"]], ["mod", "theorem", "inter", ["is_exposed"]], ["mod", "theorem", "inter_left", ["is_exposed"]], ["mod", "theorem", "inter_right", ["is_exposed"]], ["mod", "theorem", "is_closed", ["is_exposed"]], ["mod", "theorem", "is_compact", ["is_exposed"]], ["mod", "theorem", "refl", ["is_exposed"]], ["mod", "theorem", "is_exposed_empty", []]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": [["add", "theorem", "mem_extreme_points_iff_convex_diff", ["convex"]], ["del", "theorem", "mem_extreme_points_iff_convex_remove", ["convex"]], ["add", "theorem", "mem_extreme_points_iff_mem_diff_convex_hull_diff", ["convex"]], ["del", "theorem", "mem_extreme_points_iff_mem_diff_convex_hull_remove", ["convex"]], ["mod", "theorem", "extreme_points_subset", []], ["del", "theorem", "Inter", ["is_extreme"]], ["del", "theorem", "antisymm", ["is_extreme"]], ["del", "theorem", "bInter", ["is_extreme"]], ["mod", "theorem", "convex_diff", ["is_extreme"]], ["mod", "theorem", "extreme_points_eq", ["is_extreme"]], ["mod", "theorem", "extreme_points_subset_extreme_points", ["is_extreme"]], ["mod", "theorem", "inter", ["is_extreme"]], ["del", "theorem", "mono", ["is_extreme"]], ["del", "theorem", "refl", ["is_extreme"]], ["del", "theorem", "sInter", ["is_extreme"]], ["del", "theorem", "trans", ["is_extreme"]], ["add", "theorem", "is_extreme_Inter", []], ["add", "theorem", "is_extreme_bInter", []], ["add", "theorem", "is_extreme_sInter", []], ["mod", "theorem", "mem_extreme_points_iff_forall_segment", []]]}, {"oldPath": "src/analysis/convex/independent.lean", "newPath": "src/analysis/convex/independent.lean", "changes": [["add", "theorem", "convex_independent_extreme_points", ["convex"]], ["del", "theorem", "extreme_points_convex_independent", ["convex"]]]}]}, {"timestamp": 1632155976, "sha": "ae726e10", "message": "chore(ring_theory/polynomial/tower): remove a duplicate instance (#9302)\n`apply_instance` already finds a much more general statement of this instance.", "changes": [{"oldPath": "src/ring_theory/polynomial/tower.lean", "newPath": "src/ring_theory/polynomial/tower.lean", "changes": []}]}, {"timestamp": 1632155975, "sha": "c2d8a58d", "message": "feat(algebra/algebra/basic): lemmas about alg_hom and scalar towers (#9249)", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "commutes_of_tower", ["alg_hom"]], ["add", "theorem", "comp_algebra_map_of_tower", ["alg_hom"]], ["mod", "theorem", "lmul_algebra_map", ["algebra"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["mod", "theorem", "to_matrix_algebra_map", ["linear_map"]]]}]}, {"timestamp": 1632149492, "sha": "866294d3", "message": "fix(data/dfinsupp): fix nat- and int- module diamonds (#9299)\nThis also defines `has_sub` separately in case it turns out to help with unification", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": []}]}, {"timestamp": 1632145334, "sha": "3703ab2a", "message": "chore(data/real/pi): split into three files (#9295)\nThis is the last file to finish compilation in mathlib, and it naturally splits into three chunks, two of which have simpler dependencies.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": null, "changes": [["del", "theorem", "integral_sin_pow_div_tendsto_one", ["real"]], ["del", "theorem", "pi_gt_3141592", ["real"]], ["del", "theorem", "pi_gt_31415", ["real"]], ["del", "theorem", "pi_gt_314", ["real"]], ["del", "theorem", "pi_gt_sqrt_two_add_series", ["real"]], ["del", "theorem", "pi_gt_three", ["real"]], ["del", "theorem", "pi_lower_bound_start", ["real"]], ["del", "theorem", "pi_lt_3141593", ["real"]], ["del", "theorem", "pi_lt_31416", ["real"]], ["del", "theorem", "pi_lt_315", ["real"]], ["del", "theorem", "pi_lt_sqrt_two_add_series", ["real"]], ["del", "theorem", "pi_upper_bound_start", ["real"]], ["del", "theorem", "sqrt_two_add_series_step_down", ["real"]], ["del", "theorem", "sqrt_two_add_series_step_up", ["real"]], ["del", "theorem", "tendsto_prod_pi_div_two", ["real"]], ["del", "theorem", "tendsto_sum_pi_div_four", ["real"]]]}, {"oldPath": null, "newPath": "src/data/real/pi/bounds.lean", "changes": [["add", "theorem", "pi_gt_3141592", ["real"]], ["add", "theorem", "pi_gt_31415", ["real"]], ["add", "theorem", "pi_gt_314", ["real"]], ["add", "theorem", "pi_gt_sqrt_two_add_series", ["real"]], ["add", "theorem", "pi_gt_three", ["real"]], ["add", "theorem", "pi_lower_bound_start", ["real"]], ["add", "theorem", "pi_lt_3141593", ["real"]], ["add", "theorem", "pi_lt_31416", ["real"]], ["add", "theorem", "pi_lt_315", ["real"]], ["add", "theorem", "pi_lt_sqrt_two_add_series", ["real"]], ["add", "theorem", "pi_upper_bound_start", ["real"]], ["add", "theorem", "sqrt_two_add_series_step_down", ["real"]], ["add", "theorem", "sqrt_two_add_series_step_up", ["real"]]]}, {"oldPath": null, "newPath": "src/data/real/pi/leibniz.lean", "changes": [["add", "theorem", "tendsto_sum_pi_div_four", ["real"]]]}, {"oldPath": null, "newPath": "src/data/real/pi/wallis.lean", "changes": [["add", "theorem", "integral_sin_pow_div_tendsto_one", ["real"]], ["add", "theorem", "tendsto_prod_pi_div_two", ["real"]]]}]}, {"timestamp": 1632145332, "sha": "8c96c549", "message": "feat(ci): Download all possible caches in gitpod (#9286)\nThis requests mathlibtools 1.1.0", "changes": [{"oldPath": ".gitpod.yml", "newPath": ".gitpod.yml", "changes": []}]}, {"timestamp": 1632145331, "sha": "72a8cd68", "message": "feat(field_theory/algebraic_closure): any two algebraic closures are isomorphic (#9231)", "changes": [{"oldPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/is_alg_closed/basic.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_of_larger_base", ["algebra"]], ["del", "theorem", "is_algebraic_of_larger_field", ["algebra"]]]}]}, {"timestamp": 1632138510, "sha": "cb33f68d", "message": "feat(docker): pin version for better reproducibility (#9304)\nAlso hopefully force docker rebuild for gitpod", "changes": [{"oldPath": ".docker/gitpod/mathlib/Dockerfile", "newPath": ".docker/gitpod/mathlib/Dockerfile", "changes": []}]}, {"timestamp": 1632138509, "sha": "4df2a1bf", "message": "feat(topology/instances/ennreal): sum of nonzero constants is infinity (#9294)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tsum_const_eq_top_of_ne_zero", ["ennreal"]]]}]}, {"timestamp": 1632138508, "sha": "e41e9bce", "message": "chore(group_theory/submonoid/operations): split a file (#9292)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["del", "theorem", "coe_pointwise_smul", ["add_submonoid"]], ["del", "theorem", "smul_mem_pointwise_smul", ["add_submonoid"]], ["del", "theorem", "coe_pointwise_smul", ["submonoid"]], ["del", "theorem", "smul_mem_pointwise_smul", ["submonoid"]]]}, {"oldPath": null, "newPath": "src/group_theory/submonoid/pointwise.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["add_submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul", ["add_submonoid"]], ["add", "theorem", "coe_pointwise_smul", ["submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul", ["submonoid"]]]}]}, {"timestamp": 1632138507, "sha": "7389a6b1", "message": "feat(linear_algebra/matrix/to_lin): simp lemmas for to_matrix and algebra (#9267)", "changes": [{"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "to_matrix'_algebra_map", ["linear_map"]], ["add", "theorem", "to_matrix_algebra_map", ["linear_map"]]]}]}, {"timestamp": 1632138506, "sha": "ba282349", "message": "feat(algebra/pointwise): more lemmas about pointwise actions (#9226)\nThis:\n* Primes the existing lemmas about `group_with_zero` and adds their group counterparts\n* Adds:\n * `smul_mem_smul_set_iff`\n * `set_smul_subset_set_smul_iff`\n * `set_smul_subset_iff`\n * `subset_set_smul_iff`\n* Generalizes `zero_smul_set` to take weaker typeclasses", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "mem_inv_smul_set_iff'", []], ["mod", "theorem", "mem_inv_smul_set_iff", []], ["add", "theorem", "mem_smul_set_iff_inv_smul_mem'", []], ["mod", "theorem", "mem_smul_set_iff_inv_smul_mem", []], ["mod", "theorem", "preimage_smul'", []], ["mod", "theorem", "preimage_smul", []], ["add", "theorem", "set_smul_subset_iff'", []], ["add", "theorem", "set_smul_subset_iff", []], ["add", "theorem", "set_smul_subset_set_smul_iff'", []], ["add", "theorem", "set_smul_subset_set_smul_iff", []], ["add", "theorem", "smul_mem_smul_set_iff'", []], ["add", "theorem", "smul_mem_smul_set_iff", []], ["add", "theorem", "subset_set_smul_iff'", []], ["add", "theorem", "subset_set_smul_iff", []], ["mod", "theorem", "zero_smul_set", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}]}, {"timestamp": 1632134261, "sha": "e29dfc19", "message": "chore(analysis/normed_space/finite_dimensional): restructure imports (#9289)\nDelays importing `linear_algebra.finite_dimensional` in the `analysis/normed_space/` directory until it is really needed.\nThis reduces the [\"long pole\"](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/The.20long.20pole.20in.20mathlib) of mathlib compilation by 3 minutes (out of 55).", "changes": [{"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["del", "theorem", "coe_to_affine_isometry_equiv", ["affine_isometry"]], ["del", "theorem", "to_affine_isometry_equiv_apply", ["affine_isometry"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "coe_to_affine_isometry_equiv", ["affine_isometry"]], ["add", "def", "to_affine_isometry_equiv", ["affine_isometry"]], ["add", "theorem", "to_affine_isometry_equiv_apply", ["affine_isometry"]], ["add", "theorem", "coe_to_linear_isometry_equiv", ["linear_isometry"]], ["add", "def", "to_linear_isometry_equiv", ["linear_isometry"]], ["add", "theorem", "to_linear_isometry_equiv_apply", ["linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["del", "theorem", "coe_to_linear_isometry_equiv", ["linear_isometry"]], ["del", "theorem", "to_linear_isometry_equiv_apply", ["linear_isometry"]]]}]}, {"timestamp": 1632125608, "sha": "d93c6a85", "message": "feat(data/vector/basic): induction principles (#9261)", "changes": [{"oldPath": "src/data/vector/basic.lean", "newPath": "src/data/vector/basic.lean", "changes": [["mod", "def", "induction_on", ["vector"]], ["add", "def", "induction_on₂", ["vector"]], ["add", "def", "induction_on₃", ["vector"]]]}]}, {"timestamp": 1632111821, "sha": "238d7927", "message": "chore(scripts): update nolints.txt (#9290)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1632111820, "sha": "035bd249", "message": "refactor(field_theory/algebraic_closure): Move construction of algebraic closure and lemmas about alg closed fields into seperate files. (#9265)", "changes": [{"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": null, "newPath": "src/field_theory/is_alg_closed/algebraic_closure.lean", "changes": [["add", "theorem", "algebra_map", ["algebraic_closure", "adjoin_monic"]], ["add", "theorem", "exists_root", ["algebraic_closure", "adjoin_monic"]], ["add", "theorem", "is_integral", ["algebraic_closure", "adjoin_monic"]], ["add", "def", "adjoin_monic", ["algebraic_closure"]], ["add", "theorem", "algebra_map_def", ["algebraic_closure"]], ["add", "theorem", "coe_to_step_of_le", ["algebraic_closure"]], ["add", "def", "eval_X_self", ["algebraic_closure"]], ["add", "theorem", "exists_of_step", ["algebraic_closure"]], ["add", "theorem", "exists_root", ["algebraic_closure"]], ["add", "theorem", "is_algebraic", ["algebraic_closure"]], ["add", "theorem", "le_max_ideal", ["algebraic_closure"]], ["add", "def", "max_ideal", ["algebraic_closure"]], ["add", "def", "monic_irreducible", ["algebraic_closure"]], ["add", "def", "of_step", ["algebraic_closure"]], ["add", "def", "of_step_hom", ["algebraic_closure"]], ["add", "theorem", "of_step_succ", ["algebraic_closure"]], ["add", "def", "span_eval", ["algebraic_closure"]], ["add", "theorem", "span_eval_ne_top", ["algebraic_closure"]], ["add", "theorem", "is_integral", ["algebraic_closure", "step"]], ["add", "def", "step", ["algebraic_closure"]], ["add", "def", "step_aux", ["algebraic_closure"]], ["add", "def", "to_adjoin_monic", ["algebraic_closure"]], ["add", "def", "to_splitting_field", ["algebraic_closure"]], ["add", "theorem", "to_splitting_field_eval_X_self", ["algebraic_closure"]], ["add", "def", "to_step_of_le", ["algebraic_closure"]], ["add", "theorem", "exists_root", ["algebraic_closure", "to_step_succ"]], ["add", "def", "to_step_succ", ["algebraic_closure"]], ["add", "def", "to_step_zero", ["algebraic_closure"]], ["add", "def", "algebraic_closure", []]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/is_alg_closed/basic.lean", "changes": [["del", "theorem", "algebra_map", ["algebraic_closure", "adjoin_monic"]], ["del", "theorem", "exists_root", ["algebraic_closure", "adjoin_monic"]], ["del", "theorem", "is_integral", ["algebraic_closure", "adjoin_monic"]], ["del", "def", "adjoin_monic", ["algebraic_closure"]], ["del", "theorem", "algebra_map_def", ["algebraic_closure"]], ["del", "theorem", "coe_to_step_of_le", ["algebraic_closure"]], ["del", "def", "eval_X_self", ["algebraic_closure"]], ["del", "theorem", "exists_of_step", ["algebraic_closure"]], ["del", "theorem", "exists_root", ["algebraic_closure"]], ["del", "theorem", "is_algebraic", ["algebraic_closure"]], ["del", "theorem", "le_max_ideal", ["algebraic_closure"]], ["del", "def", "max_ideal", ["algebraic_closure"]], ["del", "def", "monic_irreducible", ["algebraic_closure"]], ["del", "def", "of_step", ["algebraic_closure"]], ["del", "def", "of_step_hom", ["algebraic_closure"]], ["del", "theorem", "of_step_succ", ["algebraic_closure"]], ["del", "def", "span_eval", ["algebraic_closure"]], ["del", "theorem", "span_eval_ne_top", ["algebraic_closure"]], ["del", "theorem", "is_integral", ["algebraic_closure", "step"]], ["del", "def", "step", ["algebraic_closure"]], ["del", "def", "step_aux", ["algebraic_closure"]], ["del", "def", "to_adjoin_monic", ["algebraic_closure"]], ["del", "def", "to_splitting_field", ["algebraic_closure"]], ["del", "theorem", "to_splitting_field_eval_X_self", ["algebraic_closure"]], ["del", "def", "to_step_of_le", ["algebraic_closure"]], ["del", "theorem", "exists_root", ["algebraic_closure", "to_step_succ"]], ["del", "def", "to_step_succ", ["algebraic_closure"]], ["del", "def", "to_step_zero", ["algebraic_closure"]], ["del", "def", "algebraic_closure", []], ["del", "def", "lift", ["is_alg_closed"]], ["del", "def", "maximal_subfield_with_hom", ["lift", "subfield_with_hom"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1632111819, "sha": "acb10a55", "message": "feat(linear_algebra/{multilinear,alternating): add of_subsingleton (#9196)\nThis was refactored from the `koszul_cx` branch, something I mentioned doing in [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/two.20decidable_eq.20instances.20on.20.28fin.201.29.20in.20mathlib.20.3A-.28/near/225596630).\nThe original version was:\n```lean\ndef multilinear_map.of_subsingleton (ι : Type v) [subsingleton ι] [inhabited ι] {N : Type u}\n [add_comm_group N] [module R N] (f : M →ₗ[R] N) : multilinear_map R (λ (i : ι), M) N :=\n{ to_fun := λ x, f (x $ default ι),\n map_add' := λ m i x y, by rw subsingleton.elim i (default ι); simp only\n [function.update_same, f.map_add],\n map_smul' := λ m i r x, by rw subsingleton.elim i (default ι); simp only\n [function.update_same, f.map_smul], }\n```\nbut I decided to remove the `f : M →ₗ[R] N` argument as it can be added later with `(of_subsingleton R M i).comp_linear_map f`.", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "def", "of_subsingleton", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "def", "of_subsingleton", ["multilinear_map"]]]}]}, {"timestamp": 1632111818, "sha": "976b261a", "message": "feat(data/{multiset,finset}/basic): card_erase_eq_ite (#9185)\nA generic theorem about the cardinality of a `finset` or `multiset` with an element erased.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_erase_eq_ite", ["finset"]], ["mod", "theorem", "erase_empty", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "card_erase_eq_ite", ["multiset"]]]}]}, {"timestamp": 1632103180, "sha": "f37f57dc", "message": "feat(order/lattice): `sup`/`inf`/`max`/`min` of mono functions (#9284)\n* add `monotone.sup`, `monotone.inf`, `monotone.min`, and\n `monotone.max`;\n* add `prod.le_def` and `prod.mk_le_mk`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "le_def", ["prod"]], ["add", "theorem", "mk_le_mk", ["prod"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1632085381, "sha": "4887f80c", "message": "chore(measure_theory/function/simple_func_dense): distance to `approx_on` is antitone (#9271)", "changes": [{"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": [["add", "theorem", "edist_approx_on_mono", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1632082214, "sha": "f7135f17", "message": "feat(group_theory/p_group): `is_p_group` is preserved by `subgroup.comap` (#9277)\nIf `H` is a p-subgroup, then `H.comap f` is a p-subgroup, assuming that `f` is injective.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "comap_injective", ["is_p_group"]]]}]}, {"timestamp": 1632073629, "sha": "965e457f", "message": "feat(measure_theory/measure/lebesgue): a linear map rescales Lebesgue by the inverse of its determinant (#9195)\nAlso supporting material to be able to apply Fubini in `ι → ℝ` by separating some coordinates.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_subtype_mul_prod_subtype", ["fintype"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "pi_equiv_pi_subtype_prod", ["equiv"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["add", "theorem", "map_pi_equiv_pi_subtype_prod", ["measure_theory", "measure"]], ["add", "theorem", "map_pi_equiv_pi_subtype_prod_symm", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["add", "theorem", "volume_eq_prod", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_pi_equiv_pi_subtype_prod", []], ["add", "theorem", "measurable_pi_equiv_pi_subtype_prod_symm", []]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["add", "theorem", "map_linear_map_volume_pi_eq_smul_volume_pi", ["real"]], ["add", "theorem", "map_matrix_volume_pi_eq_smul_volume_pi", ["real"]], ["add", "theorem", "map_transvection_volume_pi", ["real"]], ["add", "theorem", "map_volume_pi_add_left", ["real"]], ["add", "theorem", "smul_map_diagonal_volume_pi", ["real"]], ["add", "theorem", "volume_pi_preimage_add_left", ["real"]], ["add", "theorem", "volume_preimage_add_left", ["real"]], ["add", "theorem", "volume_preimage_add_right", ["real"]], ["add", "theorem", "volume_preimage_mul_left", ["real"]], ["add", "theorem", "volume_preimage_mul_right", ["real"]]]}]}, {"timestamp": 1632067672, "sha": "180c7581", "message": "feat(group_theory/p_group): `is_p_group` is preserved by `subgroup.map` (#9276)\nIf `H` is a p-subgroup, then `H.map f` is a p-subgroup.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "map", ["is_p_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "range_restrict_surjective", ["monoid_hom"]]]}]}, {"timestamp": 1632059095, "sha": "55a2c1a4", "message": "refactor(set_theory/{cardinal,ordinal}): swap the order of universes in `lift` (#9273)\nSwap the order of universe arguments in `cardinal.lift` and `ordinal.lift`. This way (a) they match the order of arguments in `ulift`; (b) usually Lean can deduce the second universe level from the argument.", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["mod", "theorem", "{u}", ["complex"]]]}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "def", "lift", ["cardinal"]], ["mod", "theorem", "lift_eq_nat_iff", ["cardinal"]], ["mod", "theorem", "lift_mk", ["cardinal"]], ["mod", "theorem", "lift_umax", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "lift_lt_univ'", ["cardinal"]], ["mod", "theorem", "lift_lt_univ", ["cardinal"]], ["mod", "theorem", "lift_univ", ["cardinal"]], ["mod", "theorem", "lt_univ'", ["cardinal"]], ["mod", "theorem", "lt_univ", ["cardinal"]], ["mod", "def", "univ", ["cardinal"]], ["mod", "def", "lift", ["ordinal"]], ["mod", "theorem", "lift_lift", ["ordinal"]], ["mod", "theorem", "lift_umax", ["ordinal"]], ["mod", "theorem", "lift_univ", ["ordinal"]], ["mod", "theorem", "one_eq_lift_type_unit", ["ordinal"]], ["mod", "def", "univ", ["ordinal"]], ["mod", "theorem", "zero_eq_lift_type_empty", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1632059093, "sha": "8df86df8", "message": "feat(order/ideal, data/set/lattice): when order ideals are a complete lattice (#9084)\n- Added the `ideal_Inter_nonempty` property, which states that the intersection of all ideals in the lattice is nonempty.\n- Proved that when a preorder has the above property and is a `semilattice_sup`, its ideals are a complete lattice\n- Added some lemmas about empty intersections in set/lattice, akin to #9033", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_eq_empty_iff", ["set"]], ["add", "theorem", "bInter_eq_empty_iff", ["set"]], ["add", "theorem", "nonempty_Inter", ["set"]], ["add", "theorem", "nonempty_bInter", ["set"]], ["add", "theorem", "nonempty_sInter", ["set"]], ["del", "theorem", "sInter_nonempty_iff", ["set"]]]}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["add", "theorem", "Inf_le", ["order", "ideal"]], ["add", "theorem", "Inter_nonempty", ["order", "ideal"]], ["add", "theorem", "coe_Inf", ["order", "ideal"]], ["add", "theorem", "coe_top", ["order", "ideal"]], ["add", "theorem", "all_Inter_nonempty", ["order", "ideal", "ideal_Inter_nonempty"]], ["add", "theorem", "all_bInter_nonempty", ["order", "ideal", "ideal_Inter_nonempty"]], ["add", "theorem", "exists_all_mem", ["order", "ideal", "ideal_Inter_nonempty"]], ["add", "theorem", "ideal_Inter_nonempty_iff", ["order", "ideal"]], ["add", "theorem", "ideal_Inter_nonempty_of_exists_all_mem", ["order", "ideal"]], ["add", "theorem", "inter_nonempty", ["order", "ideal"]], ["add", "theorem", "is_glb_Inf", ["order", "ideal"]], ["add", "theorem", "le_Inf", ["order", "ideal"]], ["add", "theorem", "mem_Inf", ["order", "ideal"]], ["del", "theorem", "top_carrier", ["order", "ideal"]], ["del", "theorem", "top_coe", ["order", "ideal"]], ["del", "theorem", "inter_nonempty", ["order"]]]}]}, {"timestamp": 1632051253, "sha": "075ff371", "message": "refactor(algebra/order*): move files about ordered algebraic structures into subfolder (#9024)\nThere were many files named `algebra/order_*.lean`. There are also `algebra.{module,algebra}.ordered`. The latter are Prop-valued mixins. This refactor moves the data typeclasses into their own subfolder. That should help facilitate organizing further refactoring to provide the full gamut of the order x algebra hierarchy.", "changes": [{"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}, {"oldPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "newPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/lattice_ordered_group.lean", "newPath": "src/algebra/lattice_ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}, {"oldPath": "src/algebra/absolute_value.lean", "newPath": "src/algebra/order/absolute_value.lean", "changes": []}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order/basic.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_absolute_value.lean", "newPath": "src/algebra/order/euclidean_absolute_value.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/order/field.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order/functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/order/group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/order/monoid.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/order/monoid_lemmas.lean", "changes": []}, {"oldPath": "src/algebra/ordered_pi.lean", "newPath": "src/algebra/order/pi.lean", "changes": []}, {"oldPath": "src/algebra/ordered_pointwise.lean", "newPath": "src/algebra/order/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/order/ring.lean", "changes": []}, {"oldPath": "src/algebra/ordered_smul.lean", "newPath": "src/algebra/order/smul.lean", "changes": []}, {"oldPath": "src/algebra/ordered_sub.lean", "newPath": "src/algebra/order/sub.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/order/with_zero.lean", "changes": []}, {"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/int/absolute_value.lean", "newPath": "src/data/int/absolute_value.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/with_bot.lean", "newPath": "src/data/nat/with_bot.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/card_pow_degree.lean", "newPath": "src/data/polynomial/degree/card_pow_degree.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/number_theory/class_number/admissible_absolute_value.lean", "newPath": "src/number_theory/class_number/admissible_absolute_value.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/linarith/lemmas.lean", "newPath": "src/tactic/linarith/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "test/finish4.lean", "newPath": "test/finish4.lean", "changes": []}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}, {"oldPath": "test/nontriviality.lean", "newPath": "test/nontriviality.lean", "changes": []}]}, {"timestamp": 1632045974, "sha": "383e05a2", "message": "feat(measure_theory/integral/lebesgue): add set version of `lintegral_with_density_eq_lintegral_mul` (#9270)\nI also made `measurable_space α` an implicit argument whenever `μ : measure α` is explicit.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "lintegral_trim", ["measure_theory"]], ["mod", "theorem", "lintegral_trim_ae", ["measure_theory"]], ["mod", "theorem", "lintegral_with_density_eq_lintegral_mul", ["measure_theory"]], ["add", "theorem", "restrict_with_density", ["measure_theory"]], ["add", "theorem", "set_lintegral_with_density_eq_set_lintegral_mul", ["measure_theory"]]]}]}, {"timestamp": 1632037541, "sha": "25e67dd8", "message": "feat(measure_theory/function/lp_space): add mem_Lp_indicator_iff_restrict (#9221)\nWe have an equivalent lemma for `integrable`. Here it is generalized to `mem_ℒp`.", "changes": [{"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["add", "theorem", "ess_sup_indicator_eq_ess_sup_restrict", []]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "mem_ℒp_indicator_iff_restrict", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_indicator_eq_snorm_ess_sup_restrict", ["measure_theory"]], ["add", "theorem", "snorm_indicator_eq_snorm_restrict", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "map_restrict_ae_le_map_indicator_ae", []], ["add", "theorem", "mem_map_restrict_ae_iff", ["measure_theory"]], ["add", "theorem", "mem_map_indicator_ae_iff_mem_map_restrict_ae_of_zero_mem", []], ["add", "theorem", "mem_map_indicator_ae_iff_of_zero_nmem", []]]}]}, {"timestamp": 1632031954, "sha": "f2c162c1", "message": "feat(data/dfinsupp): more lemmas about erase, filter, and negation (#9248)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "erase_add", ["dfinsupp"]], ["add", "def", "erase_add_hom", ["dfinsupp"]], ["add", "theorem", "erase_neg", ["dfinsupp"]], ["add", "theorem", "erase_single", ["dfinsupp"]], ["add", "theorem", "erase_single_ne", ["dfinsupp"]], ["add", "theorem", "erase_single_same", ["dfinsupp"]], ["add", "theorem", "erase_sub", ["dfinsupp"]], ["add", "theorem", "erase_zero", ["dfinsupp"]], ["add", "theorem", "filter_single", ["dfinsupp"]], ["add", "theorem", "filter_single_neg", ["dfinsupp"]], ["add", "theorem", "filter_single_pos", ["dfinsupp"]], ["add", "theorem", "single_neg", ["dfinsupp"]], ["add", "theorem", "single_sub", ["dfinsupp"]]]}]}, {"timestamp": 1632018522, "sha": "cbf8788d", "message": "chore(scripts): update nolints.txt (#9275)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1632006468, "sha": "fbc9e5e3", "message": "feat(measure_theory/function/conditional_expectation): condexp_ind is ae_measurable' (#9263)", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "def", "Lp_meas_subgroup", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_coe", ["measure_theory"]], ["add", "def", "Lp_meas_subgroup_to_Lp_meas_iso", ["measure_theory"]], ["add", "def", "Lp_meas_subgroup_to_Lp_trim", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_add", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_ae_eq", ["measure_theory"]], ["add", "def", "Lp_meas_subgroup_to_Lp_trim_iso", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_left_inv", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_neg", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_norm_map", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_right_inv", ["measure_theory"]], ["add", "theorem", "Lp_meas_subgroup_to_Lp_trim_sub", ["measure_theory"]], ["del", "def", "Lp_meas_to_Lp_trim", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_add", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_ae_eq", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_left_inv", ["measure_theory"]], ["del", "def", "Lp_meas_to_Lp_trim_lie", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_norm_map", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_right_inv", ["measure_theory"]], ["del", "theorem", "Lp_meas_to_Lp_trim_smul", ["measure_theory"]], ["del", "def", "Lp_trim_to_Lp_meas", ["measure_theory"]], ["del", "theorem", "Lp_trim_to_Lp_meas_ae_eq", ["measure_theory"]], ["add", "def", "Lp_trim_to_Lp_meas_subgroup", ["measure_theory"]], ["add", "theorem", "Lp_trim_to_Lp_meas_subgroup_ae_eq", ["measure_theory"]], ["add", "theorem", "ae_measurable'_condexp_L2", ["measure_theory"]], ["add", "theorem", "ae_measurable'_condexp_ind", ["measure_theory"]], ["add", "theorem", "ae_measurable'_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "is_closed_ae_measurable'", ["measure_theory"]], ["add", "theorem", "is_complete_ae_measurable'", ["measure_theory"]], ["add", "theorem", "isometry_Lp_meas_subgroup_to_Lp_trim", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_subgroup_iff_ae_measurable'", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_subgroup_to_Lp_of_trim", ["measure_theory"]], ["del", "theorem", "mem_Lp_meas_to_Lp_of_trim", ["measure_theory"]], ["del", "theorem", "mem_ℒp_trim_of_mem_Lp_meas", ["measure_theory"]], ["add", "theorem", "mem_ℒp_trim_of_mem_Lp_meas_subgroup", ["measure_theory"]]]}]}, {"timestamp": 1632006467, "sha": "6b96736f", "message": "feat(measure_theory/integral/set_to_L1): image of an indicator by set_to_fun (and related functions) (#9205)\nWe show the following equality, as well as versions of it for other intermediate `set_to_*` functions:\n```\nset_to_fun (hT : dominated_fin_meas_additive μ T C) (s.indicator (λ _, x)) = T s x\n```", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "range_indicator", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["mod", "def", "set_to_L1'", ["measure_theory", "L1"]], ["mod", "def", "set_to_L1", ["measure_theory", "L1"]], ["mod", "theorem", "set_to_L1_eq_set_to_L1'", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_indicator_const_Lp", ["measure_theory", "L1"]], ["mod", "theorem", "set_to_L1_smul", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1s_indicator_const", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_fun_indicator_const", ["measure_theory"]], ["add", "theorem", "set_to_simple_func_indicator", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1632006466, "sha": "c1d7ee55", "message": "feat(measure_theory/measure/finite_measure_weak_convergence): definitions of types of finite_measures and probability_measures, to be equipped with the topologies of weak convergence (#8904)\nfeat(measure_theory/measure/finite_measure_weak_convergence): definitions of types of finite_measures and probability_measures, to be equipped with the topologies of weak convergence\nThis PR defines the types `probability_measure` and `finite_measure`. The next step is to give a topology instance on these types.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/measure/finite_measure_weak_convergence.lean", "changes": [["add", "theorem", "coe_add", ["measure_theory", "finite_measure"]], ["add", "def", "coe_add_monoid_hom", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_fn_add", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_fn_eq_to_nnreal_coe_fn_to_measure", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_fn_smul", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_fn_zero", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_injective", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_smul", ["measure_theory", "finite_measure"]], ["add", "theorem", "coe_zero", ["measure_theory", "finite_measure"]], ["add", "theorem", "ennreal_coe_fn_eq_coe_fn_to_measure", ["measure_theory", "finite_measure"]], ["add", "theorem", "ennreal_mass", ["measure_theory", "finite_measure"]], ["add", "def", "mass", ["measure_theory", "finite_measure"]], ["add", "theorem", "val_eq_to_measure", ["measure_theory", "finite_measure"]], ["add", "def", "finite_measure", ["measure_theory"]], ["add", "theorem", "coe_comp_to_finite_measure_eq_coe", ["measure_theory", "probability_measure"]], ["add", "theorem", "coe_fn_comp_to_finite_measure_eq_coe_fn", ["measure_theory", "probability_measure"]], ["add", "theorem", "coe_fn_eq_to_nnreal_coe_fn_to_measure", ["measure_theory", "probability_measure"]], ["add", "theorem", "coe_fn_univ", ["measure_theory", "probability_measure"]], ["add", "theorem", "coe_injective", ["measure_theory", "probability_measure"]], ["add", "theorem", "ennreal_coe_fn_eq_coe_fn_to_measure", ["measure_theory", "probability_measure"]], ["add", "theorem", "mass_to_finite_measure", ["measure_theory", "probability_measure"]], ["add", "def", "to_finite_measure", ["measure_theory", "probability_measure"]], ["add", "theorem", "val_eq_to_measure", ["measure_theory", "probability_measure"]], ["add", "def", "probability_measure", ["measure_theory"]]]}]}, {"timestamp": 1631997954, "sha": "429aaa30", "message": "feat(order/bounded_lattice): coe_unbot simp lemma (#9258)", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "coe_unbot", ["with_bot"]], ["add", "theorem", "coe_untop", ["with_top"]]]}]}, {"timestamp": 1631997953, "sha": "811c87ae", "message": "chore(order/galois_connection): golf (#9236)\n* add `galois_insertion.is_lub_of_u_image`,\n `galois_insertion.is_glb_of_u_image`,\n `galois_coinsertion.is_glb_of_l_image`, and\n `galois_coinsertion.is_lub_of_l_image`;\n* get some proofs in `lift_*` from `order_dual` instances;\n* this changes definitional equalities for `Inf` and `Sup` so that we can reuse the same `Inf`/`Sup` for a `conditionally_complete_lattice` later.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["mod", "theorem", "coe_Inf", ["algebra"]], ["mod", "theorem", "mem_Inf", ["algebra"]]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "is_glb_of_l_image", ["galois_coinsertion"]], ["add", "theorem", "is_lub_of_l_image", ["galois_coinsertion"]], ["add", "theorem", "is_glb_of_u_image", ["galois_insertion"]], ["add", "theorem", "is_lub_of_u_image", ["galois_insertion"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}]}, {"timestamp": 1631991864, "sha": "e4bf4960", "message": "feat(data/set/finite): simple infiniteness lemmas (#9242)", "changes": [{"oldPath": "archive/imo/imo2008_q2.lean", "newPath": "archive/imo/imo2008_q2.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "diff", ["set", "infinite"]], ["add", "theorem", "exists_nat_lt", ["set", "infinite"]], ["add", "theorem", "exists_not_mem_finset", ["set", "infinite"]], ["del", "theorem", "infinite_mono", ["set"]]]}, {"oldPath": "src/data/set/intervals/infinite.lean", "newPath": "src/data/set/intervals/infinite.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}]}, {"timestamp": 1631991863, "sha": "255862e2", "message": "refactor(linear_algebra/char_poly/basic): rename char_poly to matrix.charpoly (#9230)\nWe rename `char_matrix` to `charmatrix` and `char_poly` to `matrix.charpoly`, so `M.charpoly` becomes available (and everything is coherent with `minpoly`).", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/basic.lean", "newPath": "src/linear_algebra/charpoly/basic.lean", "changes": [["del", "theorem", "aeval_self_char_poly", []], ["add", "theorem", "aeval_self_charpoly", []], ["del", "def", "char_matrix", []], ["del", "theorem", "char_matrix_apply_eq", []], ["del", "theorem", "char_matrix_apply_ne", []], ["del", "def", "char_poly", []], ["add", "def", "charmatrix", []], ["add", "theorem", "charmatrix_apply_eq", []], ["add", "theorem", "charmatrix_apply_ne", []], ["del", "theorem", "mat_poly_equiv_char_matrix", []], ["add", "theorem", "mat_poly_equiv_charmatrix", []], ["add", "def", "charpoly", ["matrix"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/charpoly/coeff.lean", "changes": [["del", "theorem", "char_matrix_apply_nat_degree", []], ["del", "theorem", "char_matrix_apply_nat_degree_le", []], ["del", "theorem", "char_poly_coeff_eq_prod_coeff_of_le", []], ["del", "theorem", "char_poly_degree_eq_dim", []], ["del", "theorem", "char_poly_left_mul_matrix", []], ["del", "theorem", "char_poly_monic", []], ["del", "theorem", "char_poly_nat_degree_eq_dim", []], ["del", "theorem", "char_poly_sub_diagonal_degree_lt", []], ["add", "theorem", "charmatrix_apply_nat_degree", []], ["add", "theorem", "charmatrix_apply_nat_degree_le", []], ["add", "theorem", "charpoly_coeff_eq_prod_coeff_of_le", []], ["add", "theorem", "charpoly_degree_eq_dim", []], ["add", "theorem", "charpoly_left_mul_matrix", []], ["add", "theorem", "charpoly_monic", []], ["add", "theorem", "charpoly_nat_degree_eq_dim", []], ["add", "theorem", "charpoly_sub_diagonal_degree_lt", []], ["del", "theorem", "det_eq_sign_char_poly_coeff", []], ["add", "theorem", "det_eq_sign_charpoly_coeff", []], ["del", "theorem", "char_poly_pow_card", ["finite_field"]], ["add", "theorem", "charpoly_pow_card", ["finite_field"]], ["mod", "theorem", "is_integral", ["matrix"]], ["del", "theorem", "min_poly_dvd_char_poly", ["matrix"]], ["add", "theorem", "minpoly_dvd_charpoly", ["matrix"]], ["del", "theorem", "trace_eq_neg_char_poly_coeff", []], ["add", "theorem", "trace_eq_neg_charpoly_coeff", []], ["del", "theorem", "char_poly_pow_card", ["zmod"]], ["add", "theorem", "charpoly_pow_card", ["zmod"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1631983170, "sha": "e7579363", "message": "chore(data/real/ennreal, measure_theory/): use `≠ ∞` and `≠ 0` in assumptions (#9219)", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["mod", "theorem", "sum_lt_top", ["with_top"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "mul_pos", ["canonically_ordered_comm_semiring"]], ["mod", "theorem", "mul_lt_top", ["with_top"]]]}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "exists_pos_sum_of_encodable'", ["ennreal"]], ["mod", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["mod", "theorem", "exists_pos_tsum_mul_lt_of_encodable", ["ennreal"]], ["mod", "theorem", "exists_pos_sum_of_encodable", ["nnreal"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "add_left_inj", ["ennreal"]], ["mod", "theorem", "add_right_inj", ["ennreal"]], ["mod", "theorem", "add_sub_self'", ["ennreal"]], ["mod", "theorem", "add_sub_self", ["ennreal"]], ["add", "theorem", "coe_ne_zero", ["ennreal"]], ["mod", "theorem", "div_lt_top", ["ennreal"]], ["add", "theorem", "div_zero", ["ennreal"]], ["mod", "theorem", "half_pos", ["ennreal"]], ["mod", "theorem", "le_of_add_le_add_left", ["ennreal"]], ["mod", "theorem", "le_of_add_le_add_right", ["ennreal"]], ["mod", "theorem", "le_of_forall_pos_le_add", ["ennreal"]], ["add", "theorem", "le_to_real_sub", ["ennreal"]], ["mod", "theorem", "lt_add_right", ["ennreal"]], ["del", "theorem", "lt_top_of_mul_lt_top_left", ["ennreal"]], ["del", "theorem", "lt_top_of_mul_lt_top_right", ["ennreal"]], ["add", "theorem", "lt_top_of_mul_ne_top_left", ["ennreal"]], ["add", "theorem", "lt_top_of_mul_ne_top_right", ["ennreal"]], ["add", "theorem", "lt_top_of_sum_ne_top", ["ennreal"]], ["mod", "theorem", "mem_Iio_self_add", ["ennreal"]], ["mod", "theorem", "mem_Ioo_self_sub_add", ["ennreal"]], ["mod", "theorem", "mul_lt_top", ["ennreal"]], ["mod", "theorem", "mul_pos", ["ennreal"]], ["add", "theorem", "mul_pos_iff", ["ennreal"]], ["del", "theorem", "ne_top_of_mul_ne_top_left", ["ennreal"]], ["del", "theorem", "ne_top_of_mul_ne_top_right", ["ennreal"]], ["del", "theorem", "not_mem_Ioo_self_sub", ["ennreal"]], ["mod", "theorem", "pow_eq_top", ["ennreal"]], ["add", "theorem", "pow_eq_top_iff", ["ennreal"]], ["mod", "theorem", "prod_lt_top", ["ennreal"]], ["add", "theorem", "sub_lt_of_sub_lt", ["ennreal"]], ["mod", "theorem", "sub_right_inj", ["ennreal"]], ["mod", "theorem", "sub_sub_cancel", ["ennreal"]], ["mod", "theorem", "sum_lt_top", ["ennreal"]], ["mod", "theorem", "to_nnreal_add", ["ennreal"]], ["mod", "theorem", "to_nnreal_sum", ["ennreal"]], ["mod", "theorem", "to_real_eq_to_real", ["ennreal"]], ["mod", "theorem", "to_real_sum", ["ennreal"]], ["del", "theorem", "zero_lt_coe_iff", ["ennreal"]], ["del", "theorem", "zero_lt_sub_iff_lt", ["ennreal"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "smul_measure", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": [["add", "theorem", "measure_pos_iff_nonempty", ["measure_theory", "is_mul_left_invariant"]]]}, {"oldPath": "src/measure_theory/group/prod.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "theorem", "ae_lt_top'", ["measure_theory"]], ["mod", "theorem", "ae_lt_top", ["measure_theory"]], ["del", "theorem", "exists_integrable_pos_of_sigma_finite", ["measure_theory"]], ["add", "theorem", "exists_pos_lintegral_lt_of_sigma_finite", ["measure_theory"]], ["mod", "theorem", "exists_pos_set_lintegral_lt_of_measure_lt", ["measure_theory"]], ["mod", "theorem", "exists_simple_func_forall_lintegral_sub_lt_of_pos", ["measure_theory"]], ["mod", "theorem", "iff_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "of_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "of_lintegral_ne_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "lintegral_eq_of_subset'", ["measure_theory", "simple_func"]], ["mod", "theorem", "tendsto_set_lintegral_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_to_l1.lean", "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": [["mod", "theorem", "exists_le_lower_semicontinuous_lintegral_ge", ["measure_theory", "simple_func"]], ["mod", "theorem", "exists_upper_semicontinuous_le_lintegral_le", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": [["mod", "theorem", "outer_measure_exists_compact", ["measure_theory", "content"]], ["mod", "theorem", "outer_measure_exists_open", ["measure_theory", "content"]]]}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "smul_finite", ["measure_theory", "measure"]], ["mod", "theorem", "measure_compl", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "Icc_mem_nhds", ["ennreal"]], ["mod", "theorem", "nhds_of_ne_top", ["ennreal"]], ["del", "theorem", "tendsto_at_top_zero_of_tsum_lt_top", ["ennreal"]], ["add", "theorem", "tendsto_at_top_zero_of_tsum_ne_top", ["ennreal"]], ["del", "theorem", "tendsto_cofinite_zero_of_tsum_lt_top", ["ennreal"]], ["add", "theorem", "tendsto_cofinite_zero_of_tsum_ne_top", ["ennreal"]], ["mod", "theorem", "tsum_sub", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "edist_ne_top", []]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["mod", "theorem", "edist_efixed_point_le", ["contracting_with"]], ["mod", "theorem", "edist_efixed_point_lt_top", ["contracting_with"]], ["mod", "theorem", "edist_inequality", ["contracting_with"]], ["mod", "theorem", "efixed_point_eq_of_edist_lt_top", ["contracting_with"]], ["mod", "theorem", "efixed_point_is_fixed_pt", ["contracting_with"]], ["mod", "theorem", "exists_fixed_point", ["contracting_with"]], ["mod", "theorem", "one_sub_K_ne_top", ["contracting_with"]], ["mod", "theorem", "tendsto_iterate_efixed_point", ["contracting_with"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["mod", "theorem", "edist_lt_top", ["lipschitz_with"]]]}]}, {"timestamp": 1631978040, "sha": "33db1c76", "message": "chore(data/mv_polynomial/basic): add ring_hom_ext' and move ext attribute to ring_hom_ext' (#9235)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "ring_hom_ext'", ["mv_polynomial"]], ["mod", "theorem", "ring_hom_ext", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}]}, {"timestamp": 1631971325, "sha": "10a62016", "message": "feat(set_theory/ordinal): add conditionally_complete_linear_order_bot instance (#9266)\nCurrently, it is not possible to talk about `Inf s` when `s` is a set of ordinals. This is fixed by this PR.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "not_mem_of_cSup_lt", []], ["add", "theorem", "not_mem_of_lt_cInf", []]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "Inf_eq_omin", ["ordinal"]], ["add", "theorem", "Inf_mem", ["ordinal"]], ["add", "theorem", "bot_eq_zero", ["ordinal"]], ["add", "theorem", "induction", ["ordinal"]]]}]}, {"timestamp": 1631966420, "sha": "d6b4cd7b", "message": "chore(ring_theory/adjoin/basic): split (#9257)\nI want to use basic facts about `adjoin` in `polynomial.basic`.", "changes": [{"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["del", "theorem", "adjoin_eq_range", ["algebra"]], ["del", "theorem", "adjoin_range_eq_range_aeval", ["algebra"]], ["del", "theorem", "adjoin_singleton_eq_range_aeval", ["algebra"]], ["del", "theorem", "fg_trans", ["algebra"]], ["del", "theorem", "is_noetherian_ring_of_fg", []], ["del", "theorem", "is_noetherian_subring_closure", []], ["del", "def", "fg", ["subalgebra"]], ["del", "theorem", "fg_adjoin_finset", ["subalgebra"]], ["del", "theorem", "fg_bot", ["subalgebra"]], ["del", "theorem", "fg_def", ["subalgebra"]], ["del", "theorem", "fg_map", ["subalgebra"]], ["del", "theorem", "fg_of_fg_map", ["subalgebra"]], ["del", "theorem", "fg_of_fg_to_submodule", ["subalgebra"]], ["del", "theorem", "fg_of_noetherian", ["subalgebra"]], ["del", "theorem", "fg_of_submodule_fg", ["subalgebra"]], ["del", "theorem", "fg_prod", ["subalgebra"]], ["del", "theorem", "fg_top", ["subalgebra"]], ["del", "theorem", "induction_on_adjoin", ["subalgebra"]]]}, {"oldPath": null, "newPath": "src/ring_theory/adjoin/fg.lean", "changes": [["add", "theorem", "fg_trans", ["algebra"]], ["add", "theorem", "is_noetherian_ring_of_fg", []], ["add", "theorem", "is_noetherian_subring_closure", []], ["add", "def", "fg", ["subalgebra"]], ["add", "theorem", "fg_adjoin_finset", ["subalgebra"]], ["add", "theorem", "fg_bot", ["subalgebra"]], ["add", "theorem", "fg_def", ["subalgebra"]], ["add", "theorem", "fg_map", ["subalgebra"]], ["add", "theorem", "fg_of_fg_map", ["subalgebra"]], ["add", "theorem", "fg_of_fg_to_submodule", ["subalgebra"]], ["add", "theorem", "fg_of_noetherian", ["subalgebra"]], ["add", "theorem", "fg_of_submodule_fg", ["subalgebra"]], ["add", "theorem", "fg_prod", ["subalgebra"]], ["add", "theorem", "fg_top", ["subalgebra"]], ["add", "theorem", "induction_on_adjoin", ["subalgebra"]]]}, {"oldPath": null, "newPath": "src/ring_theory/adjoin/polynomial.lean", "changes": [["add", "theorem", "adjoin_eq_range", ["algebra"]], ["add", "theorem", "adjoin_range_eq_range_aeval", ["algebra"]], ["add", "theorem", "adjoin_singleton_eq_range_aeval", ["algebra"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}]}, {"timestamp": 1631959389, "sha": "0ee36a39", "message": "feat(order/conditionally_complete_lattice): add lemmas (#9237)\n* add lemmas about `conditionally_complete_linear_order_bot`; in this\n case we can drop some `nonempty` assumptions;\n* add lemmas for the case of `[is_well_order α (<)]`; in this case\n infimum of a nonempty set is the least element of this set.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "Inf_eq_argmin_on", []], ["add", "theorem", "Inf_mem", []], ["add", "theorem", "cSup_le'", []], ["add", "theorem", "cSup_le_iff'", []], ["add", "theorem", "csupr_le'", []], ["add", "theorem", "csupr_le_iff'", []], ["add", "theorem", "exists_lt_of_lt_cSup'", []], ["add", "theorem", "exists_lt_of_lt_csupr'", []], ["mod", "theorem", "cinfi_eq", ["is_glb"]], ["add", "theorem", "is_least_Inf", []], ["add", "theorem", "is_lub_cSup'", []], ["add", "theorem", "le_cInf_iff'", []]]}]}, {"timestamp": 1631948024, "sha": "36751e42", "message": "chore(algebra/algebra/tower): golf `algebra.lsmul` (#9253)", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}]}, {"timestamp": 1631948023, "sha": "41e152f3", "message": "fix(algebra/algebra/tower): remove `subalgebra.res` which duplicates `subalgebra.restrict_scalars` (#9251)\nWe use the name `restrict_scalars` everywhere else, so I kept that one instead of `res`.\n`res` was here first, but the duplicate was added by #7949 presumably because the `res` name wasn't discoverable.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["del", "theorem", "mem_res", ["subalgebra"]], ["add", "theorem", "mem_restrict_scalars", ["subalgebra"]], ["del", "def", "res", ["subalgebra"]], ["del", "theorem", "res_inj", ["subalgebra"]], ["del", "theorem", "res_top", ["subalgebra"]], ["mod", "def", "restrict_scalars", ["subalgebra"]], ["add", "theorem", "restrict_scalars_injective", ["subalgebra"]], ["add", "theorem", "restrict_scalars_to_submodule", ["subalgebra"]], ["add", "theorem", "restrict_scalars_top", ["subalgebra"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "theorem", "adjoin_res", ["algebra"]], ["add", "theorem", "adjoin_restrict_scalars", ["algebra"]]]}]}, {"timestamp": 1631948022, "sha": "5e58247c", "message": "feat(algebra/ordered_pi): ordered_comm_monoid and canonically_ordered_monoid instances (#9194)\nPresumably these instances were missing because they were not actually constructible until we fixed the definition of `ordered_monoid` in #8877!", "changes": [{"oldPath": "src/algebra/ordered_pi.lean", "newPath": "src/algebra/ordered_pi.lean", "changes": []}]}, {"timestamp": 1631932039, "sha": "0bdd47fa", "message": "feat(data/list/basic): add lemmas about list.take list.drop (#9245)\nI added these lemmas about list.take and list.drop, which are present in Coq for example. Note that they are not entirely equivalent to list.take_append and list.drop_append because they also handle the case when `n ≤ l₁.length`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "drop_append_eq_append_drop", ["list"]], ["mod", "theorem", "drop_append_of_le_length", ["list"]], ["add", "theorem", "take_append_eq_append_take", ["list"]], ["mod", "theorem", "take_append_of_le_length", ["list"]]]}]}, {"timestamp": 1631932037, "sha": "a8f2bab2", "message": "chore(set_theory/cardinal): use notation `#`, add notation `ω` (#9217)\nThe only API change: rename `cardinal.eq_congr` to `cardinal.mk_congr`.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": [["mod", "theorem", "two_le_mk_bcubes", []]]}, {"oldPath": "src/category_theory/limits/small_complete.lean", "newPath": "src/category_theory/limits/small_complete.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": [["mod", "theorem", "mk_rat", ["cardinal"]]]}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/index.lean", "newPath": "src/group_theory/index.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_span_le", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["mod", "theorem", "dim_eq", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "add_def", ["cardinal"]], ["mod", "theorem", "add_lt_omega", ["cardinal"]], ["mod", "theorem", "add_lt_omega_iff", ["cardinal"]], ["mod", "theorem", "cast_to_nat_of_lt_omega", ["cardinal"]], ["mod", "theorem", "cast_to_nat_of_omega_le", ["cardinal"]], ["mod", "theorem", "countable_iff", ["cardinal"]], ["mod", "theorem", "denumerable_iff", ["cardinal"]], ["mod", "theorem", "eq_zero_iff_is_empty", ["cardinal"]], ["mod", "theorem", "eq_zero_of_is_empty", ["cardinal"]], ["mod", "theorem", "finset_card", ["cardinal"]], ["mod", "theorem", "finset_card_lt_omega", ["cardinal"]], ["mod", "theorem", "fintype_card", ["cardinal"]], ["mod", "theorem", "infinite_iff", ["cardinal"]], ["mod", "theorem", "le_def", ["cardinal"]], ["mod", "theorem", "le_one_iff_subsingleton", ["cardinal"]], ["mod", "theorem", "lift_mk", ["cardinal"]], ["mod", "theorem", "lift_mk_fin", ["cardinal"]], ["mod", "theorem", "lift_omega", ["cardinal"]], ["mod", "theorem", "lt_omega", ["cardinal"]], ["mod", "theorem", "lt_omega_iff_finite", ["cardinal"]], ["mod", "theorem", "lt_omega_iff_fintype", ["cardinal"]], ["mod", "theorem", "mk_Prop", ["cardinal"]], ["mod", "theorem", "mk_Union_le_sum_mk", ["cardinal"]], ["mod", "theorem", "mk_bool", ["cardinal"]], ["mod", "theorem", "mk_def", ["cardinal"]], ["mod", "theorem", "mk_empty", ["cardinal"]], ["mod", "theorem", "mk_emptyc", ["cardinal"]], ["mod", "theorem", "mk_emptyc_iff", ["cardinal"]], ["mod", "theorem", "mk_fin", ["cardinal"]], ["mod", "theorem", "mk_image_le", ["cardinal"]], ["mod", "theorem", "mk_int", ["cardinal"]], ["mod", "theorem", "mk_le_mk_of_subset", ["cardinal"]], ["mod", "theorem", "mk_le_of_injective", ["cardinal"]], ["mod", "theorem", "mk_le_of_surjective", ["cardinal"]], ["mod", "theorem", "mk_list_eq_sum_pow", ["cardinal"]], ["mod", "theorem", "mk_nat", ["cardinal"]], ["mod", "theorem", "mk_option", ["cardinal"]], ["mod", "theorem", "mk_out", ["cardinal"]], ["mod", "theorem", "mk_pempty", ["cardinal"]], ["mod", "theorem", "mk_plift_of_false", ["cardinal"]], ["mod", "theorem", "mk_plift_of_true", ["cardinal"]], ["mod", "theorem", "mk_pnat", ["cardinal"]], ["mod", "theorem", "mk_punit", ["cardinal"]], ["mod", "theorem", "mk_quot_le", ["cardinal"]], ["mod", "theorem", "mk_quotient_le", ["cardinal"]], ["mod", "theorem", "mk_range_eq", ["cardinal"]], ["mod", "theorem", "mk_range_le", ["cardinal"]], ["mod", "theorem", "mk_sep", ["cardinal"]], ["mod", "theorem", "mk_set", ["cardinal"]], ["mod", "theorem", "mk_set_le", ["cardinal"]], ["mod", "theorem", "mk_singleton", ["cardinal"]], ["mod", "theorem", "mk_subtype_le", ["cardinal"]], ["mod", "theorem", "mk_subtype_mono", ["cardinal"]], ["mod", "theorem", "mk_to_enat_eq_coe_card", ["cardinal"]], ["mod", "theorem", "mk_to_enat_of_infinite", ["cardinal"]], ["mod", "theorem", "mk_to_nat_eq_card", ["cardinal"]], ["mod", "theorem", "mk_to_nat_of_infinite", ["cardinal"]], ["mod", "theorem", "mk_union_le", ["cardinal"]], ["mod", "theorem", "mk_unit", ["cardinal"]], ["mod", "theorem", "mk_univ", ["cardinal"]], ["mod", "theorem", "mul_def", ["cardinal"]], ["mod", "theorem", "mul_lt_omega", ["cardinal"]], ["mod", "theorem", "mul_lt_omega_iff", ["cardinal"]], ["mod", "theorem", "nat_lt_omega", ["cardinal"]], ["mod", "theorem", "ne_zero_iff_nonempty", ["cardinal"]], ["mod", "def", "omega", ["cardinal"]], ["mod", "theorem", "omega_le", ["cardinal"]], ["mod", "theorem", "omega_ne_zero", ["cardinal"]], ["mod", "theorem", "omega_pos", ["cardinal"]], ["mod", "theorem", "one_lt_iff_nontrivial", ["cardinal"]], ["mod", "theorem", "one_lt_omega", ["cardinal"]], ["mod", "theorem", "power_def", ["cardinal"]], ["mod", "theorem", "power_lt_omega", ["cardinal"]], ["mod", "def", "prod", ["cardinal"]], ["mod", "theorem", "prod_const", ["cardinal"]], ["mod", "theorem", "prod_mk", ["cardinal"]], ["mod", "theorem", "prop_eq_two", ["cardinal"]], ["mod", "theorem", "sum_const", ["cardinal"]], ["mod", "theorem", "sum_le_sup", ["cardinal"]], ["mod", "theorem", "sum_mk", ["cardinal"]], ["mod", "theorem", "to_enat_apply_of_lt_omega", ["cardinal"]], ["mod", "theorem", "to_enat_apply_of_omega_le", ["cardinal"]], ["mod", "theorem", "to_nat_apply_of_lt_omega", ["cardinal"]], ["mod", "theorem", "to_nat_apply_of_omega_le", ["cardinal"]], ["mod", "theorem", "two_le_iff'", ["cardinal"]], ["mod", "theorem", "two_le_iff", ["cardinal"]], ["del", "theorem", "cardinal_eq", ["equiv"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["mod", "theorem", "mk_bounded_set_le_of_omega_le", ["cardinal"]], ["mod", "theorem", "mk_cardinal", ["cardinal"]], ["mod", "theorem", "mk_finset_eq_mk", ["cardinal"]], ["mod", "theorem", "mk_list_eq_mk", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["mod", "theorem", "lt_cof_power", ["cardinal"]], ["mod", "theorem", "lt_power_cof", ["cardinal"]], ["mod", "theorem", "omega_is_regular", ["cardinal"]], ["mod", "theorem", "succ_is_regular", ["cardinal"]], ["mod", "theorem", "cof_omega", ["ordinal"]], ["mod", "theorem", "infinite_pigeonhole", ["ordinal"]], ["mod", "theorem", "infinite_pigeonhole_card", ["ordinal"]], ["mod", "theorem", "lt_cof_type", ["ordinal"]], ["mod", "theorem", "omega_le_cof", ["ordinal"]], ["mod", "theorem", "sup_lt", ["ordinal"]], ["mod", "theorem", "sup_lt_ord", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "mk_ord_out", ["cardinal"]], ["mod", "theorem", "ord_eq_min", ["cardinal"]], ["mod", "theorem", "ord_le_type", ["cardinal"]], ["mod", "def", "univ", ["cardinal"]], ["mod", "theorem", "univ_id", ["cardinal"]]]}]}, {"timestamp": 1631924246, "sha": "ec9d5204", "message": "feat(order/filter,*): lemmas about `filter.ne_bot` (#9234)\n* add `prod.range_fst`, `prod.range_snd`, `set.range_eval`;\n* add `function.surjective_eval`;\n* add `filter.*_ne_bot` and/or `filter.*_ne_bot_iff` lemmas for `sup`, `supr`,\n `comap prod.fst _`, `comap prod.snd _`, `coprod`, `Coprod`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_fst", ["prod"]], ["add", "theorem", "range_snd", ["prod"]], ["add", "theorem", "range_eval", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "surjective_eval", ["function"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "Coprod_ne_bot", ["filter"]], ["add", "theorem", "Coprod_ne_bot_iff'", ["filter"]], ["add", "theorem", "Coprod_ne_bot_iff", ["filter"]], ["add", "theorem", "comap_eval_ne_bot", ["filter"]], ["add", "theorem", "comap_eval_ne_bot_iff'", ["filter"]], ["add", "theorem", "comap_eval_ne_bot_iff", ["filter"]], ["add", "theorem", "comap_fst_ne_bot", ["filter"]], ["add", "theorem", "comap_fst_ne_bot_iff", ["filter"]], ["add", "theorem", "comap_snd_ne_bot", ["filter"]], ["add", "theorem", "comap_snd_ne_bot_iff", ["filter"]], ["add", "theorem", "coprod_ne_bot_iff", ["filter"]], ["add", "theorem", "coprod_ne_bot_left", ["filter"]], ["add", "theorem", "coprod_ne_bot_right", ["filter"]], ["add", "theorem", "Coprod", ["filter", "ne_bot"]], ["add", "theorem", "sup_ne_bot", ["filter"]], ["add", "theorem", "supr_ne_bot", ["filter"]]]}]}, {"timestamp": 1631909399, "sha": "a80e1d71", "message": "chore(topology/metric_space): split `iff` into 2 lemmas (#9238)\nOne of the implications of `compact_iff_closed_bounded` doesn't need `t2_space`. Also add `compact_space_iff_bounded_univ`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "compact_space_iff_bounded_univ", ["metric"]], ["add", "theorem", "is_compact_of_is_closed_bounded", ["metric"]]]}]}, {"timestamp": 1631909398, "sha": "c42a9ad1", "message": "chore(data/finsupp/basic): lemmas about sub and neg on filter and erase (#9228)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "erase_add_hom", ["finsupp"]], ["add", "theorem", "erase_neg", ["finsupp"]], ["add", "theorem", "erase_sub", ["finsupp"]], ["add", "theorem", "filter_neg", ["finsupp"]], ["add", "theorem", "filter_sub", ["finsupp"]]]}]}, {"timestamp": 1631909397, "sha": "54217b6a", "message": "chore(data/list): make separate lexicographic file (#9193)\nA minor effort to reduce the `data.list.basic` monolithic, today inspired by yet again being annoyed that I couldn't find something.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "ne_iff", ["decidable", "list", "lex"]], ["del", "theorem", "append_left", ["list", "lex"]], ["del", "theorem", "append_right", ["list", "lex"]], ["del", "theorem", "cons_iff", ["list", "lex"]], ["del", "theorem", "imp", ["list", "lex"]], ["del", "theorem", "ne_iff", ["list", "lex"]], ["del", "theorem", "not_nil_right", ["list", "lex"]], ["del", "theorem", "to_ne", ["list", "lex"]], ["del", "inductive", "lex", ["list"]], ["del", "theorem", "nil_lt_cons", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/lex.lean", "changes": [["add", "theorem", "ne_iff", ["decidable", "list", "lex"]], ["add", "theorem", "append_left", ["list", "lex"]], ["add", "theorem", "append_right", ["list", "lex"]], ["add", "theorem", "cons_iff", ["list", "lex"]], ["add", "theorem", "imp", ["list", "lex"]], ["add", "theorem", "ne_iff", ["list", "lex"]], ["add", "theorem", "not_nil_right", ["list", "lex"]], ["add", "theorem", "to_ne", ["list", "lex"]], ["add", "inductive", "lex", ["list"]], ["add", "theorem", "nil_lt_cons", ["list"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}]}, {"timestamp": 1631909396, "sha": "696db1ea", "message": "feat(analysis/convex/topology): add lemma `convex.subset_interior_image_homothety_of_one_lt` (#9044)", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "subset_interior_image_homothety_of_one_lt", ["convex"]]]}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": [["add", "theorem", "homothety_continuous", ["affine_map"]], ["add", "theorem", "homothety_is_open_map", ["affine_map"]]]}]}, {"timestamp": 1631895837, "sha": "58f26a02", "message": "chore(order/bounded_lattice): trivial generalizations (#9246)", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_le", ["with_bot"]], ["mod", "theorem", "coe_lt_coe", ["with_bot"]], ["mod", "theorem", "coe_le_coe", ["with_top"]], ["mod", "theorem", "coe_lt_coe", ["with_top"]], ["mod", "theorem", "coe_lt_iff", ["with_top"]], ["mod", "theorem", "coe_lt_top", ["with_top"]], ["mod", "theorem", "le_coe", ["with_top"]], ["mod", "theorem", "not_top_le_coe", ["with_top"]]]}]}, {"timestamp": 1631889548, "sha": "dfd4bf5d", "message": "split(analysis/convex/function): move `convex_on` and `concave_on` to their own file (#9247)\nConvex/concave functions now earn their own file. This cuts down `analysis.convex.basic` by 500 lines.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "add", ["concave_on"]], ["del", "theorem", "comp_affine_map", ["concave_on"]], ["del", "theorem", "comp_linear_map", ["concave_on"]], ["del", "theorem", "concave_le", ["concave_on"]], ["del", "theorem", "convex_hypograph", ["concave_on"]], ["del", "theorem", "convex_lt", ["concave_on"]], ["del", "theorem", "inf", ["concave_on"]], ["del", "theorem", "le_on_segment'", ["concave_on"]], ["del", "theorem", "le_on_segment", ["concave_on"]], ["del", "theorem", "le_right_of_left_le'", ["concave_on"]], ["del", "theorem", "le_right_of_left_le", ["concave_on"]], ["del", "theorem", "left_le_of_le_right'", ["concave_on"]], ["del", "theorem", "left_le_of_le_right", ["concave_on"]], ["del", "theorem", "slope_mono_adjacent", ["concave_on"]], ["del", "theorem", "smul", ["concave_on"]], ["del", "theorem", "subset", ["concave_on"]], ["del", "theorem", "translate_left", ["concave_on"]], ["del", "theorem", "translate_right", ["concave_on"]], ["del", "def", "concave_on", []], ["del", "theorem", "concave_on_const", []], ["del", "theorem", "concave_on_id", []], ["del", "theorem", "concave_on_iff_convex_hypograph", []], ["del", "theorem", "concave_on_iff_div", []], ["del", "theorem", "concave_on_real_iff_slope_mono_adjacent", []], ["del", "theorem", "concave_on_real_of_slope_mono_adjacent", []], ["del", "theorem", "add", ["convex_on"]], ["del", "theorem", "comp_affine_map", ["convex_on"]], ["del", "theorem", "comp_linear_map", ["convex_on"]], ["del", "theorem", "convex_epigraph", ["convex_on"]], ["del", "theorem", "convex_le", ["convex_on"]], ["del", "theorem", "convex_lt", ["convex_on"]], ["del", "theorem", "le_left_of_right_le'", ["convex_on"]], ["del", "theorem", "le_left_of_right_le", ["convex_on"]], ["del", "theorem", "le_on_segment'", ["convex_on"]], ["del", "theorem", "le_on_segment", ["convex_on"]], ["del", "theorem", "le_right_of_left_le'", ["convex_on"]], ["del", "theorem", "le_right_of_left_le", ["convex_on"]], ["del", "theorem", "slope_mono_adjacent", ["convex_on"]], ["del", "theorem", "smul", ["convex_on"]], ["del", "theorem", "subset", ["convex_on"]], ["del", "theorem", "sup", ["convex_on"]], ["del", "theorem", "translate_left", ["convex_on"]], ["del", "theorem", "translate_right", ["convex_on"]], ["del", "def", "convex_on", []], ["del", "theorem", "convex_on_const", []], ["del", "theorem", "convex_on_id", []], ["del", "theorem", "convex_on_iff_convex_epigraph", []], ["del", "theorem", "convex_on_iff_div", []], ["del", "theorem", "convex_on_real_iff_slope_mono_adjacent", []], ["del", "theorem", "convex_on_real_of_slope_mono_adjacent", []], ["del", "theorem", "concave_on", ["linear_map"]], ["del", "theorem", "convex_on", ["linear_map"]], ["del", "theorem", "concave_on_of_lt", ["linear_order"]], ["del", "theorem", "convex_on_of_lt", ["linear_order"]], ["del", "theorem", "neg_concave_on_iff", []], ["del", "theorem", "neg_convex_on_iff", []]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["del", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["del", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["del", "theorem", "map_center_mass_le", ["convex_on"]], ["del", "theorem", "map_sum_le", ["convex_on"]]]}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/convex/function.lean", "changes": [["add", "theorem", "add", ["concave_on"]], ["add", "theorem", "comp_affine_map", ["concave_on"]], ["add", "theorem", "comp_linear_map", ["concave_on"]], ["add", "theorem", "concave_le", ["concave_on"]], ["add", "theorem", "convex_hypograph", ["concave_on"]], ["add", "theorem", "convex_lt", ["concave_on"]], ["add", "theorem", "inf", ["concave_on"]], ["add", "theorem", "le_on_segment'", ["concave_on"]], ["add", "theorem", "le_on_segment", ["concave_on"]], ["add", "theorem", "le_right_of_left_le'", ["concave_on"]], ["add", "theorem", "le_right_of_left_le", ["concave_on"]], ["add", "theorem", "left_le_of_le_right'", ["concave_on"]], ["add", "theorem", "left_le_of_le_right", ["concave_on"]], ["add", "theorem", "slope_mono_adjacent", ["concave_on"]], ["add", "theorem", "smul", ["concave_on"]], ["add", "theorem", "subset", ["concave_on"]], ["add", "theorem", "translate_left", ["concave_on"]], ["add", "theorem", "translate_right", ["concave_on"]], ["add", "def", "concave_on", []], ["add", "theorem", "concave_on_const", []], ["add", "theorem", "concave_on_id", []], ["add", "theorem", "concave_on_iff_convex_hypograph", []], ["add", "theorem", "concave_on_iff_div", []], ["add", "theorem", "concave_on_real_iff_slope_mono_adjacent", []], ["add", "theorem", "concave_on_real_of_slope_mono_adjacent", []], ["add", "theorem", "add", ["convex_on"]], ["add", "theorem", "comp_affine_map", ["convex_on"]], ["add", "theorem", "comp_linear_map", ["convex_on"]], ["add", "theorem", "convex_epigraph", ["convex_on"]], ["add", "theorem", "convex_le", ["convex_on"]], ["add", "theorem", "convex_lt", ["convex_on"]], ["add", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["add", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["add", "theorem", "le_left_of_right_le'", ["convex_on"]], ["add", "theorem", "le_left_of_right_le", ["convex_on"]], ["add", "theorem", "le_on_segment'", ["convex_on"]], ["add", "theorem", "le_on_segment", ["convex_on"]], ["add", "theorem", "le_right_of_left_le'", ["convex_on"]], ["add", "theorem", "le_right_of_left_le", ["convex_on"]], ["add", "theorem", "map_center_mass_le", ["convex_on"]], ["add", "theorem", "map_sum_le", ["convex_on"]], ["add", "theorem", "slope_mono_adjacent", ["convex_on"]], ["add", "theorem", "smul", ["convex_on"]], ["add", "theorem", "subset", ["convex_on"]], ["add", "theorem", "sup", ["convex_on"]], ["add", "theorem", "translate_left", ["convex_on"]], ["add", "theorem", "translate_right", ["convex_on"]], ["add", "def", "convex_on", []], ["add", "theorem", "convex_on_const", []], ["add", "theorem", "convex_on_id", []], ["add", "theorem", "convex_on_iff_convex_epigraph", []], ["add", "theorem", "convex_on_iff_div", []], ["add", "theorem", "convex_on_real_iff_slope_mono_adjacent", []], ["add", "theorem", "convex_on_real_of_slope_mono_adjacent", []], ["add", "theorem", "concave_on", ["linear_map"]], ["add", "theorem", "convex_on", ["linear_map"]], ["add", "theorem", "concave_on_of_lt", ["linear_order"]], ["add", "theorem", "convex_on_of_lt", ["linear_order"]], ["add", "theorem", "neg_concave_on_iff", []], ["add", "theorem", "neg_convex_on_iff", []]]}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}]}, {"timestamp": 1631881089, "sha": "5f140ab4", "message": "chore(*): rename `coe_fn_inj` to `coe_fn_injective` (#9241)\nThis also removes some comments about it not being possible to use `function.injective`, since now we use it without problem.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "coe_fn_inj", ["alg_hom"]], ["add", "theorem", "coe_fn_injective", ["alg_hom"]]]}, {"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["affine_equiv"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["del", "theorem", "coe_fn_inj", ["rel_embedding"]], ["add", "theorem", "coe_fn_injective", ["rel_embedding"]], ["del", "theorem", "coe_fn_inj", ["rel_hom"]], ["add", "theorem", "coe_fn_injective", ["rel_hom"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1631872336, "sha": "5b75f5ac", "message": "chore(algebra/group/basic): add `ite_one_mul` and `ite_zero_add` (#9227)\nWe already had the versions with the arguments in the other order.\nFollows on from #3217", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "ite_one_mul", []]]}]}, {"timestamp": 1631869253, "sha": "18d031d1", "message": "fix(ring_theory/dedekind_domain): Speed up ideal.unique_factorization_monoid (#9243)\nThe old proof was causing timeouts in CI.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Timeouts.20in.20ring_theory.2Fdedekind_domain.2Elean.3A664.3A9/near/253579691)", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}]}, {"timestamp": 1631859776, "sha": "15bf0667", "message": "feat(measure_theory/function/l1_space): add integrability lemmas for composition with `to_real` (#9199)", "changes": [{"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "has_finite_integral_to_real_of_lintegral_ne_top", ["measure_theory"]], ["add", "theorem", "integrable_to_real_of_lintegral_ne_top", ["measure_theory"]], ["add", "theorem", "mem_ℒ1_to_real_of_lintegral_ne_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": [["add", "theorem", "with_densityᵥ_add'", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_neg'", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_smul'", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_sub'", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_to_real", ["measure_theory"]]]}]}, {"timestamp": 1631822385, "sha": "59cda6d0", "message": "feat(measure_theory/group/basic): introduce a class is_haar_measure, and its basic properties (#9142)\nWe have in mathlib a construction of Haar measures. But there are many measures which do not come from this construction, and are still Haar measures (Lebesgue measure on a vector space, Hausdorff measure of the right dimension, for instance). We introduce a new class `is_haar_measure` (and its additive analogue) to be able to express facts simultaneously for all these measures, and prove their basic properties.", "changes": [{"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": [["add", "theorem", "haar_lt_top", ["is_compact"]], ["add", "theorem", "haar_pos", ["is_open"]], ["add", "theorem", "measure_lt_top_of_is_compact'", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "measure_lt_top_of_is_compact", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "measure_pos_of_is_open", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "measure_preimage_mul", ["measure_theory", "is_mul_left_invariant"]], ["mod", "theorem", "null_iff_empty", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "smul", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "smul", ["measure_theory", "is_mul_right_invariant"]], ["add", "theorem", "haar_pos_of_nonempty_interior", ["measure_theory", "measure"]], ["add", "theorem", "haar_preimage_mul", ["measure_theory", "measure"]], ["add", "theorem", "haar_preimage_mul_right", ["measure_theory", "measure"]], ["add", "theorem", "haar_singleton", ["measure_theory", "measure"]], ["add", "theorem", "smul", ["measure_theory", "measure", "is_haar_measure"]], ["add", "theorem", "is_haar_measure_map", ["measure_theory", "measure"]], ["add", "theorem", "is_haar_measure_of_is_compact_nonempty_interior", ["measure_theory", "measure"]], ["add", "theorem", "is_mul_left_invariant_haar", ["measure_theory", "measure"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_closed", ["finite"]], ["add", "theorem", "infinite_of_mem_nhds", []]]}]}, {"timestamp": 1631808126, "sha": "76f87b7c", "message": "feat(group_theory/group_action/basic): Action on an orbit (#9220)\nA `mul_action` restricts to a `mul_action` on an orbit.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "coe_smul", ["mul_action", "orbit"]]]}]}, {"timestamp": 1631798792, "sha": "ca383574", "message": "feat(group_theory/group_action): add `distrib_mul_action.to_add_aut` and `mul_distrib_mul_action.to_mul_aut` (#9224)\nThese can be used to golf the existing `mul_aut_arrow`.\nThis also moves some definitions out of `algebra/group_ring_action.lean` into a more appropriate file.", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "def", "to_add_equiv", ["distrib_mul_action"]], ["del", "def", "to_mul_equiv", ["mul_distrib_mul_action"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "def", "arrow_mul_distrib_mul_action", []], ["add", "def", "to_add_aut", ["distrib_mul_action"]], ["add", "def", "to_add_equiv", ["distrib_mul_action"]], ["mod", "def", "mul_aut_arrow", []], ["add", "def", "to_mul_aut", ["mul_distrib_mul_action"]], ["add", "def", "to_mul_equiv", ["mul_distrib_mul_action"]]]}]}, {"timestamp": 1631798791, "sha": "17a473e8", "message": "feat(group_theory/p_group): Sup of p-subgroups is a p-subgroup (#9222)\nThe sup of p-subgroups is a p-subgroup, assuming normality.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["mod", "theorem", "to_inf_left", ["is_p_group"]], ["mod", "theorem", "to_inf_right", ["is_p_group"]], ["add", "theorem", "to_sup_of_normal_left'", ["is_p_group"]], ["add", "theorem", "to_sup_of_normal_left", ["is_p_group"]], ["add", "theorem", "to_sup_of_normal_right'", ["is_p_group"]], ["add", "theorem", "to_sup_of_normal_right", ["is_p_group"]]]}]}, {"timestamp": 1631798790, "sha": "b0d961b4", "message": "chore(algebra/indicator_function): add `finset.sum_indicator_eq_sum_filter` (#9208)", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "prod_mul_indicator_eq_prod_filter", ["finset"]], ["add", "theorem", "indicator_smul_apply", ["set"]]]}]}, {"timestamp": 1631798789, "sha": "fdfe782c", "message": "feat(combinatorics/derangements/*): add lemmas about counting derangements (#9089)\nThis defines `card_derangements` as the cardinality of the set of derangements of a fintype, and `num_derangements` as a function from N to N, and proves their equality, along with some other lemmas.\nContext: PR #7526 grew too large and had to be split in half. The first half retained the original PR ID, and this is the second half. This adds back the finite.lean and exponential.lean files. Also, added entries back to 100.yaml.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/derangements/exponential.lean", "changes": [["add", "theorem", "num_derangements_tendsto_inv_e", []]]}, {"oldPath": null, "newPath": "src/combinatorics/derangements/finite.lean", "changes": [["add", "theorem", "card_derangements_eq_num_derangements", []], ["add", "theorem", "card_derangements_fin_add_two", []], ["add", "theorem", "card_derangements_fin_eq_num_derangements", []], ["add", "theorem", "card_derangements_invariant", []], ["add", "def", "num_derangements", []], ["add", "theorem", "num_derangements_add_two", []], ["add", "theorem", "num_derangements_one", []], ["add", "theorem", "num_derangements_succ", []], ["add", "theorem", "num_derangements_sum", []], ["add", "theorem", "num_derangements_zero", []]]}]}, {"timestamp": 1631798787, "sha": "89b0cfbf", "message": "refactor(analysis/convex/basic): generalize convexity to vector spaces (#9058)\n`convex` and `convex_hull` are currently only defined in real vector spaces. This generalizes ℝ to arbitrary ordered_semirings in definitions and abstracts it away to the correct generality in lemmas. It also generalizes the space from `add_comm_group` to `add_comm_monoid` where possible.", "changes": [{"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": [["mod", "theorem", "convex_image_has_deriv_at", []], ["mod", "theorem", "deriv_forall_lt_or_forall_gt_of_forall_ne", []]]}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["mod", "theorem", "concave_on_of_deriv2_nonpos", []], ["mod", "theorem", "concave_on_of_deriv_antimono", []], ["mod", "theorem", "concave_on_open_of_deriv2_nonpos", []], ["mod", "theorem", "antimono_of_deriv_nonpos", ["convex"]], ["mod", "theorem", "image_sub_le_mul_sub_of_deriv_le", ["convex"]], ["mod", "theorem", "image_sub_lt_mul_sub_of_deriv_lt", ["convex"]], ["mod", "theorem", "is_const_of_fderiv_within_eq_zero", ["convex"]], ["mod", "theorem", "mono_of_deriv_nonneg", ["convex"]], ["mod", "theorem", "mul_sub_le_image_sub_of_le_deriv", ["convex"]], ["mod", "theorem", "mul_sub_lt_image_sub_of_lt_deriv", ["convex"]], ["mod", "theorem", "strict_antimono_of_deriv_neg", ["convex"]], ["mod", "theorem", "strict_mono_of_deriv_pos", ["convex"]], ["mod", "theorem", "convex_on_of_deriv2_nonneg", []], ["mod", "theorem", "convex_on_of_deriv_mono", []], ["mod", "theorem", "convex_on_open_of_deriv2_nonneg", []]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "unique_diff_on_convex", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "image_convex_hull", ["affine_map"]], ["mod", "theorem", "concave_on_const", []], ["mod", "theorem", "concave_on_id", []], ["mod", "theorem", "concave_on_real_iff_slope_mono_adjacent", []], ["mod", "theorem", "concave_on_real_of_slope_mono_adjacent", []], ["mod", "theorem", "add", ["convex"]], ["mod", "theorem", "add_smul", ["convex"]], ["mod", "theorem", "add_smul_mem", ["convex"]], ["mod", "theorem", "add_smul_sub_mem", ["convex"]], ["mod", "theorem", "affine_image", ["convex"]], ["mod", "theorem", "affine_preimage", ["convex"]], ["mod", "theorem", "affinity", ["convex"]], ["mod", "theorem", "combo_affine_apply", ["convex"]], ["add", "theorem", "combo_eq_vadd", ["convex"]], ["del", "theorem", "combo_to_vadd", ["convex"]], ["mod", "theorem", "convex_hull_eq", ["convex"]], ["mod", "theorem", "convex_remove_iff_not_mem_convex_hull_remove", ["convex"]], ["mod", "theorem", "inter", ["convex"]], ["mod", "theorem", "is_linear_image", ["convex"]], ["mod", "theorem", "is_linear_preimage", ["convex"]], ["mod", "theorem", "linear_image", ["convex"]], ["mod", "theorem", "linear_preimage", ["convex"]], ["mod", "theorem", "mem_smul_of_zero_mem", ["convex"]], ["mod", "theorem", "neg", ["convex"]], ["mod", "theorem", "neg_preimage", ["convex"]], ["mod", "theorem", "open_segment_subset", ["convex"]], ["mod", "theorem", "prod", ["convex"]], ["mod", "theorem", "segment_subset", ["convex"]], ["mod", "theorem", "smul", ["convex"]], ["mod", "theorem", "smul_mem_of_zero_mem", ["convex"]], ["mod", "theorem", "smul_preimage", ["convex"]], ["mod", "theorem", "sub", ["convex"]], ["mod", "theorem", "translate", ["convex"]], ["mod", "theorem", "translate_preimage_left", ["convex"]], ["mod", "theorem", "translate_preimage_right", ["convex"]], ["mod", "theorem", "convex_Icc", []], ["mod", "theorem", "convex_Ici", []], ["mod", "theorem", "convex_Ico", []], ["mod", "theorem", "convex_Iic", []], ["mod", "theorem", "convex_Iio", []], ["mod", "theorem", "convex_Inter", []], ["mod", "theorem", "convex_Ioc", []], ["mod", "theorem", "convex_Ioi", []], ["mod", "theorem", "convex_Ioo", []], ["mod", "theorem", "convex_convex_hull", []], ["mod", "theorem", "convex_empty", []], ["mod", "theorem", "convex_halfspace_ge", []], ["mod", "theorem", "convex_halfspace_gt", []], ["add", "theorem", "convex_halfspace_im_ge", []], ["mod", "theorem", "convex_halfspace_im_gt", []], ["mod", "theorem", "convex_halfspace_im_le", []], ["del", "theorem", "convex_halfspace_im_lge", []], ["mod", "theorem", "convex_halfspace_im_lt", []], ["mod", "theorem", "convex_halfspace_le", []], ["mod", "theorem", "convex_halfspace_lt", []], ["add", "theorem", "convex_halfspace_re_ge", []], ["mod", "theorem", "convex_halfspace_re_gt", []], ["mod", "theorem", "convex_halfspace_re_le", []], ["del", "theorem", "convex_halfspace_re_lge", []], ["mod", "theorem", "convex_halfspace_re_lt", []], ["mod", "theorem", "convex_hull_min", []], ["mod", "theorem", "convex_hull_mono", []], ["mod", "theorem", "convex_hull_singleton", []], ["mod", "theorem", "convex_hyperplane", []], ["del", "theorem", "convex_iff_div:", []], ["add", "theorem", "convex_iff_div", []], ["add", "theorem", "convex_iff_ord_connected", []], ["del", "theorem", "convex_iff_pointwise_add_subset:", []], ["add", "theorem", "convex_iff_pointwise_add_subset", []], ["mod", "theorem", "convex_interval", []], ["mod", "theorem", "convex_on_const", []], ["mod", "theorem", "convex_on_id", []], ["mod", "theorem", "convex_on_real_iff_slope_mono_adjacent", []], ["mod", "theorem", "convex_on_real_of_slope_mono_adjacent", []], ["mod", "theorem", "convex_open_segment", []], ["mod", "theorem", "convex_sInter", []], ["mod", "theorem", "convex_segment", []], ["mod", "theorem", "convex_singleton", []], ["mod", "theorem", "convex_std_simplex", []], ["mod", "theorem", "convex_univ", []], ["mod", "theorem", "convex_hull_image", ["is_linear_map"]], ["mod", "theorem", "image_convex_hull", ["is_linear_map"]], ["mod", "theorem", "concave_on", ["linear_map"]], ["mod", "theorem", "convex_hull_image", ["linear_map"]], ["mod", "theorem", "convex_on", ["linear_map"]], ["mod", "theorem", "image_convex_hull", ["linear_map"]], ["mod", "theorem", "concave_on_of_lt", ["linear_order"]], ["mod", "theorem", "convex_on_of_lt", ["linear_order"]], ["del", "theorem", "convex_iff_ord_connected", ["real"]], ["add", "theorem", "convex", ["set", "ord_connected"]], ["add", "theorem", "convex_of_chain", ["set", "ord_connected"]], ["mod", "theorem", "convex", ["submodule"]], ["mod", "theorem", "subset_convex_hull", []], ["mod", "theorem", "convex", ["subspace"]]]}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": [["mod", "theorem", "eq_pos_convex_span_of_mem_convex_hull", []]]}, {"oldPath": "src/analysis/convex/combination.lean", "newPath": "src/analysis/convex/combination.lean", "changes": [["mod", "theorem", "center_mass_mem", ["convex"]], ["mod", "theorem", "sum_mem", ["convex"]], ["mod", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["mod", "def", "to_cone", ["convex"]], ["mod", "theorem", "convex", ["convex_cone"]]]}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": [["mod", "theorem", "of_is_local_min_on_of_convex_on_Icc", ["is_min_on"]]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": [["mod", "theorem", "mem_extreme_points_iff_convex_remove", ["convex"]], ["mod", "theorem", "mem_extreme_points_iff_mem_diff_convex_hull_remove", ["convex"]], ["mod", "theorem", "convex_diff", ["is_extreme"]]]}, {"oldPath": "src/analysis/convex/independent.lean", "newPath": "src/analysis/convex/independent.lean", "changes": [["mod", "theorem", "extreme_points_convex_independent", ["convex"]], ["mod", "theorem", "convex_independent_iff_finset", []]]}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["mod", "theorem", "integral_mem", ["convex"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["mod", "theorem", "add_smul_mem_interior", ["convex"]], ["mod", "theorem", "add_smul_sub_mem_interior", ["convex"]], ["mod", "theorem", "closure", ["convex"]], ["mod", "theorem", "interior", ["convex"]], ["mod", "theorem", "is_path_connected", ["convex"]], ["mod", "theorem", "convex_ball", []], ["mod", "theorem", "convex_closed_ball", []], ["mod", "theorem", "convex_hull_exists_dist_ge", []], ["mod", "theorem", "convex_on_dist", []], ["mod", "theorem", "convex_iff_is_preconnected", ["real"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "theorem", "norm_eq_infi_iff_real_inner_le_zero", []]]}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}]}, {"timestamp": 1631792054, "sha": "f536b4f0", "message": "fix(group_theory/submonoid/operations): add missing `to_additive` tags on galois lemmas (#9225)", "changes": [{"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}]}, {"timestamp": 1631792053, "sha": "8a1fc68e", "message": "feat(measure_theory/measure/with_density_vector_measure): `with_densityᵥ` of a real function equals the density of the pos part - density of the neg part (#9215)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "of_real_le_ennnorm", ["real"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "is_finite_measure_with_density_of_real", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/with_density_vector_measure.lean", "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": [["add", "theorem", "with_densityᵥ_eq_with_density_pos_part_sub_with_density_neg_part", ["measure_theory"]]]}]}, {"timestamp": 1631792052, "sha": "232ff445", "message": "feat(measure_theory/measure/measure_space): add mutually singular lemmas (#9213)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "add_iff", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "of_absolutely_continuous", ["measure_theory", "measure", "mutually_singular"]]]}]}, {"timestamp": 1631792051, "sha": "bc7cde8e", "message": "feat(data/dfinsupp): add `filter_ne_eq_erase` (#9182)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "erase_add_single", ["dfinsupp"]], ["add", "theorem", "filter_ne_eq_erase'", ["dfinsupp"]], ["add", "theorem", "filter_ne_eq_erase", ["dfinsupp"]], ["mod", "theorem", "single_add_erase", ["dfinsupp"]]]}]}, {"timestamp": 1631792049, "sha": "86d20e51", "message": "feat(data/dfinsupp): add arithmetic lemmas about filter (#9175)\nThis adds `dfinsupp.filter_{zero,add,neg,sub,smul}` and `dfinsupp.subtype_domain_smul`, along with some bundled maps.\nThis also cleans up some variable explicitness.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "coe_smul", ["dfinsupp"]], ["add", "theorem", "filter_add", ["dfinsupp"]], ["add", "def", "filter_add_monoid_hom", ["dfinsupp"]], ["add", "def", "filter_linear_map", ["dfinsupp"]], ["add", "theorem", "filter_neg", ["dfinsupp"]], ["add", "theorem", "filter_smul", ["dfinsupp"]], ["add", "theorem", "filter_sub", ["dfinsupp"]], ["add", "theorem", "filter_zero", ["dfinsupp"]], ["mod", "theorem", "mk_smul", ["dfinsupp"]], ["mod", "theorem", "single_smul", ["dfinsupp"]], ["mod", "theorem", "smul_apply", ["dfinsupp"]], ["add", "def", "subtype_domain_linear_map", ["dfinsupp"]], ["add", "theorem", "subtype_domain_smul", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}]}, {"timestamp": 1631788623, "sha": "b7593841", "message": "feat(field_theory/algebraic_closure): map from algebraic extensions into the algebraic closure (#9110)", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "exists_aeval_eq_zero", ["is_alg_closed"]], ["add", "theorem", "exists_eval₂_eq_zero", ["is_alg_closed"]], ["mod", "theorem", "exists_root", ["is_alg_closed"]], ["add", "def", "lift", ["is_alg_closed"]], ["add", "theorem", "compat", ["lift", "subfield_with_hom"]], ["add", "theorem", "exists_maximal_subfield_with_hom", ["lift", "subfield_with_hom"]], ["add", "theorem", "le_def", ["lift", "subfield_with_hom"]], ["add", "def", "maximal_subfield_with_hom", ["lift", "subfield_with_hom"]], ["add", "theorem", "maximal_subfield_with_hom_chain_bounded", ["lift", "subfield_with_hom"]], ["add", "theorem", "maximal_subfield_with_hom_eq_top", ["lift", "subfield_with_hom"]], ["add", "theorem", "maximal_subfield_with_hom_is_maximal", ["lift", "subfield_with_hom"]], ["add", "structure", "subfield_with_hom", ["lift"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1631771406, "sha": "18dc1a18", "message": "feat(group_theory/p_group): p-groups are preserved by isomorphisms (#9203)\nAdds three lemmas about transporting `is_p_group` across injective, surjective, and bijective homomorphisms.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "of_equiv", ["is_p_group"]], ["add", "theorem", "of_injective", ["is_p_group"]], ["add", "theorem", "of_surjective", ["is_p_group"]]]}]}, {"timestamp": 1631749313, "sha": "519b4e90", "message": "chore(algebra/big_operators): move, golf (#9218)\nmove 2 lemmas up and golf the proof of `finset.prod_subset`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}]}, {"timestamp": 1631731331, "sha": "2b589cad", "message": "feat(group_theory/subgroup): Generalize `comap_sup_eq` (#9212)\nThe lemma `comap_sup_eq` can be generalized from assuming `function.surjective f` to assuming `≤ f.range`.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "comap_sup_eq", ["subgroup"]], ["add", "theorem", "comap_sup_eq_of_le_range", ["subgroup"]], ["add", "theorem", "sup_subgroup_of_eq", ["subgroup"]]]}]}, {"timestamp": 1631731330, "sha": "8185637f", "message": "refactor(data/real/nnreal): use `has_ordered_sub` (#9167)\n* provide a `has_ordered_sub` instance for `nnreal`;\n* drop most lemmas about subtraction in favor of lemmas from `algebra/ordered_sub`;\n* add `mul_sub'` and `sub_mul'`;\n* generalize some lemmas about `has_ordered_sub` to `has_add`;\n* add `add_hom.mul_left` and `add_hom.mul_right`.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_sub'", []], ["add", "theorem", "sub_mul'", []]]}, {"oldPath": "src/algebra/ordered_sub.lean", "newPath": "src/algebra/ordered_sub.lean", "changes": [["add", "theorem", "le_map_sub", ["add_hom"]], ["add", "theorem", "le_map_sub", ["add_monoid_hom"]], ["add", "theorem", "le_mul_sub", []], ["add", "theorem", "le_sub_mul", []], ["add", "theorem", "map_sub", ["order_iso"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "def", "mul_left", ["add_hom"]], ["add", "def", "mul_right", ["add_hom"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "cond_bnot", ["bool"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "add_sub_cancel'", ["nnreal"]], ["del", "theorem", "add_sub_cancel", ["nnreal"]], ["del", "theorem", "add_sub_eq_max", ["nnreal"]], ["add", "theorem", "coe_sub_def", ["nnreal"]], ["del", "theorem", "lt_sub_iff_add_lt", ["nnreal"]], ["del", "theorem", "sub_add_cancel_of_le", ["nnreal"]], ["del", "theorem", "sub_add_eq_max", ["nnreal"]], ["add", "theorem", "sub_div", ["nnreal"]], ["del", "theorem", "sub_eq_iff_eq_add", ["nnreal"]], ["del", "theorem", "sub_eq_zero", ["nnreal"]], ["del", "theorem", "sub_le_iff_le_add", ["nnreal"]], ["del", "theorem", "sub_le_self", ["nnreal"]], ["del", "theorem", "sub_lt_iff_lt_add", ["nnreal"]], ["del", "theorem", "sub_pos", ["nnreal"]], ["del", "theorem", "sub_self", ["nnreal"]], ["del", "theorem", "sub_sub_cancel_of_le", ["nnreal"]], ["del", "theorem", "sub_zero", ["nnreal"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1631731329, "sha": "a4341f91", "message": "refactor(data/set/finite): use a custom inductive type (#9164)\nCurrently Lean treats local assumptions `h : finite s` as local instances, so one needs to do something like\n```lean\n unfreezingI { lift s to finset α using hs },\n```\nI change the definition of `set.finite` to an inductive predicate that replicates the definition of `nonempty` and remove `unfreezingI` here and there. Equivalence to the old definition is given by `set.finite_def`.", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "inductive", "finite", ["set"]], ["del", "def", "finite", ["set"]], ["add", "theorem", "finite_def", ["set"]]]}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1631731327, "sha": "244285c9", "message": "feat(linear_algebra/free_module): add instances (#9087)\nWe add some `module.finite` instances. These are in the `linear_algebra/free_module.lean` files since they concern free modules.\nFrom LTE", "changes": [{"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": [["add", "theorem", "of_basis", ["module", "finite"]]]}]}, {"timestamp": 1631731326, "sha": "bab7e996", "message": "docs(data/part): add module docstring (#8966)", "changes": [{"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": [["mod", "theorem", "dom_iff_mem", ["part"]], ["mod", "theorem", "ne_none_iff", ["part"]]]}]}, {"timestamp": 1631725768, "sha": "b63c5601", "message": "feat(data/set/Union_lift): lift functions to Unions of sets (#9019)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "coe_supr_of_directed", ["subalgebra"]], ["add", "theorem", "supr_lift_comp_inclusion", ["subalgebra"]], ["add", "theorem", "supr_lift_inclusion", ["subalgebra"]], ["add", "theorem", "supr_lift_mk", ["subalgebra"]], ["add", "theorem", "supr_lift_of_mem", ["subalgebra"]]]}, {"oldPath": null, "newPath": "src/data/set/Union_lift.lean", "changes": [["add", "theorem", "Union_lift_binary", ["set"]], ["add", "theorem", "Union_lift_const", ["set"]], ["add", "theorem", "Union_lift_inclusion", ["set"]], ["add", "theorem", "Union_lift_mk", ["set"]], ["add", "theorem", "Union_lift_of_mem", ["set"]], ["add", "theorem", "Union_lift_unary", ["set"]], ["add", "theorem", "lift_cover_coe", ["set"]], ["add", "theorem", "lift_cover_of_mem", ["set"]]]}]}, {"timestamp": 1631720439, "sha": "25972642", "message": "chore(ring_theory/ideal/operations): golf a definition using new actions (#9152)\nThis action can be expressed more directly in terms of other actions, without the unfolded definition changing.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1631712160, "sha": "3a6340cc", "message": "chore(data/dfinsupp): golf using `quotient.map` instead of `quotient.lift_on` (#9176)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "def", "erase", ["dfinsupp"]], ["mod", "def", "filter", ["dfinsupp"]], ["mod", "def", "map_range", ["dfinsupp"]], ["mod", "def", "subtype_domain", ["dfinsupp"]], ["mod", "def", "zip_with", ["dfinsupp"]]]}]}, {"timestamp": 1631712159, "sha": "f8d8171d", "message": "refactor(logic/relator): turn *_unique and *_total into defs, not classes (#9135)\nWe had (almost) no instances for these classes and (almost) no lemmas taking these assumptions as TC arguments.", "changes": [{"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["del", "theorem", "bi_unique_forall₂", ["list"]], ["del", "theorem", "left_unique_forall₂", ["list"]], ["del", "theorem", "right_unique_forall₂", ["list"]], ["add", "theorem", "forall₂", ["relator", "bi_unique"]], ["add", "theorem", "forall₂", ["relator", "left_unique"]], ["add", "theorem", "forall₂", ["relator", "right_unique"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": [["add", "theorem", "rel_exists", ["relator", "bi_total"]], ["add", "theorem", "rel_forall", ["relator", "bi_total"]], ["add", "def", "bi_total", ["relator"]], ["add", "theorem", "bi_total_eq", ["relator"]], ["add", "def", "bi_unique", ["relator"]], ["add", "theorem", "rel_exists", ["relator", "left_total"]], ["add", "def", "left_total", ["relator"]], ["add", "theorem", "flip", ["relator", "left_unique"]], ["del", "theorem", "unique", ["relator", "left_unique"]], ["add", "def", "left_unique", ["relator"]], ["del", "theorem", "left_unique_flip", ["relator"]], ["del", "theorem", "rel_exists_of_left_total", ["relator"]], ["del", "theorem", "rel_exists_of_total", ["relator"]], ["del", "theorem", "rel_forall_of_right_total", ["relator"]], ["del", "theorem", "rel_forall_of_total", ["relator"]], ["add", "theorem", "rel_forall", ["relator", "right_total"]], ["add", "def", "right_total", ["relator"]], ["del", "theorem", "unique", ["relator", "right_unique"]], ["add", "def", "right_unique", ["relator"]]]}]}, {"timestamp": 1631709533, "sha": "f1bf7b87", "message": "feat(category_theory/filtered): Special support for bowtie and tulip diagrams (#9099)\nAdd special support for two kinds of diagram categories: The \"bowtie\" and the \"tulip\". These are convenient when proving that forgetful functors of algebraic categories preserve filtered colimits.", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": [["add", "theorem", "bowtie", ["category_theory", "is_filtered"]], ["add", "theorem", "coeq₃_condition₁", ["category_theory", "is_filtered"]], ["add", "theorem", "coeq₃_condition₂", ["category_theory", "is_filtered"]], ["add", "theorem", "coeq₃_condition₃", ["category_theory", "is_filtered"]], ["add", "theorem", "tulip", ["category_theory", "is_filtered"]]]}]}, {"timestamp": 1631701985, "sha": "bb38ce96", "message": "feat(ring_theory/artinian): is_nilpotent_jacobson (#9153)", "changes": [{"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": [["add", "theorem", "monotone_stabilizes", ["is_artinian"]], ["add", "theorem", "set_has_minimal", ["is_artinian"]], ["add", "theorem", "is_nilpotent_jacobson_bot", ["is_artinian_ring"]]]}]}, {"timestamp": 1631690107, "sha": "85dc9f34", "message": "refactor(measure_theory/measure): redefine `measure_theory.sigma_finite` (#9207)\n* don't require in the definition that covering sets are measurable;\n* use `to_measurable` in `sigma_finite.out` to get measurable sets.", "changes": [{"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}]}, {"timestamp": 1631686364, "sha": "7492aa60", "message": "refactor(measure_theory/integral/lebesgue): golf a proof (#9206)\n* add `exists_pos_tsum_mul_lt_of_encodable`;\n* add `measure.spanning_sets_index` and lemmas about this definition;\n* replace the proof of `exists_integrable_pos_of_sigma_finite` with a simpler one.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "exists_pos_tsum_mul_lt_of_encodable", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "measurable_spanning_sets_index", ["measure_theory"]], ["add", "theorem", "mem_disjointed_spanning_sets_index", ["measure_theory"]], ["add", "theorem", "mem_spanning_sets_index", ["measure_theory"]], ["add", "theorem", "preimage_spanning_sets_index_singleton", ["measure_theory"]], ["add", "def", "spanning_sets_index", ["measure_theory"]], ["add", "theorem", "spanning_sets_index_eq_iff", ["measure_theory"]]]}, {"oldPath": "src/order/disjointed.lean", "newPath": "src/order/disjointed.lean", "changes": [["add", "theorem", "preimage_find_eq_disjointed", []]]}]}, {"timestamp": 1631673839, "sha": "591ff3a5", "message": "feat(group_theory/subgroup): Subgroup of subgroup is isomorphic to itself (#9204)\nIf `H ≤ K`, then `H` as a subgroup of `K` is isomorphic to `H`.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "def", "comap_subtype_equiv_of_le", ["subgroup"]]]}]}, {"timestamp": 1631673838, "sha": "463089da", "message": "feat(order/rel_classes): A total relation is trichotomous (#9181)", "changes": [{"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}]}, {"timestamp": 1631673837, "sha": "23eac53f", "message": "chore(*): upgrade to Lean 3.33.0c (#9165)\nMy main goal is to fix various diamonds with `sup`/`inf`, see leanprover-community/lean#609. I use lean-master + 1 fixup commit leanprover-community/lean#615.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": []}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": []}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": [["mod", "theorem", "filter_le", ["list", "Ico"]]]}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_max", ["with_bot"]], ["mod", "theorem", "coe_min", ["with_bot"]], ["del", "theorem", "inf_eq_min", ["with_bot"]], ["del", "theorem", "lattice_eq_DLO", ["with_bot"]], ["del", "theorem", "sup_eq_max", ["with_bot"]], ["mod", "theorem", "coe_max", ["with_top"]], ["mod", "theorem", "coe_min", ["with_top"]], ["del", "theorem", "inf_eq_min", ["with_top"]], ["del", "theorem", "lattice_eq_DLO", ["with_top"]], ["del", "theorem", "sup_eq_max", ["with_top"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "def", "to_linear_order", ["lattice"]]]}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1631667195, "sha": "82dced60", "message": "feat(analysis/normed_space/finite_dimension): Riesz theorem on compact unit ball and finite dimension (#9147)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "exists_norm_le_le_norm_sub_of_finset", []], ["add", "theorem", "exists_seq_norm_le_one_le_norm_sub'", []], ["add", "theorem", "exists_seq_norm_le_one_le_norm_sub", []], ["add", "theorem", "finite_dimensional_of_is_compact_closed_ball", []]]}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": [["add", "theorem", "riesz_lemma_of_norm_lt", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "exists_seq_of_forall_finset_exists'", []], ["add", "theorem", "exists_seq_of_forall_finset_exists", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_top_iff", []]]}]}, {"timestamp": 1631653194, "sha": "27b0a763", "message": "feat(ring_theory/adjoin): adjoin_range_eq_range_aeval (#9179)", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_range_eq_range_aeval", ["algebra"]], ["del", "theorem", "adjoin_singleton_eq_range", ["algebra"]], ["add", "theorem", "adjoin_singleton_eq_range_aeval", ["algebra"]]]}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}]}, {"timestamp": 1631643386, "sha": "bf0b5df3", "message": "chore(combinatorics/simple_graph): fixup docs (#9161)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1631640352, "sha": "ec118ddc", "message": "ci(.github/workflows/*): lint PR style on GitHub runners (#9198)\nSince the style linter usually finishes in just a few seconds, we can move it off our self-hosted runners to give PR authors quicker feedback when the build queue is long.\nWe do this only for PR runs, so that `bors` won't be held up in case the GitHub runners are backed up for whatever reason.", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": ".github/workflows/build_fork.yml", "newPath": ".github/workflows/build_fork.yml", "changes": []}, {"oldPath": ".github/workflows/mk_build_yml.sh", "newPath": ".github/workflows/mk_build_yml.sh", "changes": []}]}, {"timestamp": 1631632080, "sha": "6a6b0a56", "message": "chore(order/pilex): use `*_order_of_*TO` from `order.rel_classes` (#9129)\nThis changes definitional equality for `≤` on `pilex` from\n`x < y ∨ x = y` to `x = y ∨ x < y`.", "changes": [{"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": [["add", "theorem", "le_of_forall_le", ["pilex"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["mod", "def", "partial_order_of_SO", []]]}]}, {"timestamp": 1631626673, "sha": "91f053e1", "message": "chore(*): simplify `data.real.cau_seq` import (#9197)\nSome files were still importing `data.real.cau_seq` when their dependency really was on `is_absolute_value`, which has been moved to `algebra.absolute_value`. Hopefully simplifying the dependency tree slightly reduces build complexity.", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}]}, {"timestamp": 1631621387, "sha": "e489ca1d", "message": "feat(group_theory/p_group): Intersection with p-subgroup is a p-subgroup (#9189)\nTwo lemmas stating that the intersection with a p-subgroup is a p-subgroup.\nNot sure which one should be called left and which one should be called right though :)", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "to_inf_left", ["is_p_group"]], ["add", "theorem", "to_inf_right", ["is_p_group"]]]}]}, {"timestamp": 1631621385, "sha": "eb203909", "message": "refactor(group_theory/p_group): Move lemmas to is_p_group namespace (#9188)\nMoves `card_modeq_card_fixed_points`, `nonempty_fixed_point_of_prime_not_dvd_card`, and `exists_fixed_point_of_prime_dvd_card_of_fixed_point` to the `is_p_group` namespace. I think this simplifies things, since they already had explicit `hG : is_p_group G` hypotheses anyway.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "card_modeq_card_fixed_points", ["is_p_group"]], ["mod", "theorem", "card_orbit", ["is_p_group"]], ["add", "theorem", "exists_fixed_point_of_prime_dvd_card_of_fixed_point", ["is_p_group"]], ["add", "theorem", "nonempty_fixed_point_of_prime_not_dvd_card", ["is_p_group"]], ["mod", "theorem", "of_card", ["is_p_group"]], ["del", "theorem", "card_modeq_card_fixed_points", ["mul_action"]], ["del", "theorem", "exists_fixed_point_of_prime_dvd_card_of_fixed_point", ["mul_action"]], ["del", "theorem", "nonempty_fixed_point_of_prime_not_dvd_card", ["mul_action"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1631621384, "sha": "6309c816", "message": "chore(ring_theory/adjoin) elab_as_eliminator attribute (#9168)", "changes": [{"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["mod", "theorem", "adjoin_induction", ["algebra"]]]}]}, {"timestamp": 1631621383, "sha": "251e418a", "message": "feat(ring_theory/nakayama): Alternative Statements of Nakayama's Lemma (#9150)", "changes": [{"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["add", "theorem", "exists_mul_sub_mem_of_sub_one_mem_jacobson", ["ideal"]], ["add", "theorem", "is_unit_of_sub_one_mem_jacobson_bot", ["ideal"]]]}, {"oldPath": null, "newPath": "src/ring_theory/nakayama.lean", "changes": [["add", "theorem", "eq_bot_of_le_smul_of_le_jacobson_bot", ["submodule"]], ["add", "theorem", "eq_smul_of_le_smul_of_le_jacobson", ["submodule"]], ["add", "theorem", "smul_sup_eq_smul_sup_of_le_smul_of_le_jacobson", ["submodule"]], ["add", "theorem", "smul_sup_le_of_le_smul_of_le_jacobson_bot", ["submodule"]]]}]}, {"timestamp": 1631621382, "sha": "19949a07", "message": "feat(linear_algebra/free_module): add instances (#9072)\nFrom LTE.\nWe prove that `M →ₗ[R] N` is free if both `M` and `N` are finite and free. This needs the quite long result that for a finite and free module any basis is finite.\nCo-authored with @jcommelin", "changes": [{"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/diagonal.lean", "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}]}, {"timestamp": 1631621381, "sha": "2a3cd41b", "message": "feat(group_theory/free_product): equivalence with reduced words (#7395)\nWe show that each element of the free product is represented by a unique reduced word.", "changes": [{"oldPath": "src/group_theory/free_product.lean", "newPath": "src/group_theory/free_product.lean", "changes": [["add", "theorem", "cons_eq_rcons", ["free_product", "word"]], ["add", "theorem", "cons_eq_smul", ["free_product", "word"]], ["add", "def", "empty", ["free_product", "word"]], ["add", "def", "equiv", ["free_product", "word"]], ["add", "def", "equiv_pair", ["free_product", "word"]], ["add", "theorem", "equiv_pair_eq_of_fst_idx_ne", ["free_product", "word"]], ["add", "theorem", "equiv_pair_symm", ["free_product", "word"]], ["add", "def", "fst_idx", ["free_product", "word"]], ["add", "theorem", "fst_idx_ne_iff", ["free_product", "word"]], ["add", "theorem", "of_smul_def", ["free_product", "word"]], ["add", "structure", "pair", ["free_product", "word"]], ["add", "def", "prod", ["free_product", "word"]], ["add", "theorem", "prod_nil", ["free_product", "word"]], ["add", "theorem", "prod_rcons", ["free_product", "word"]], ["add", "theorem", "prod_smul", ["free_product", "word"]], ["add", "def", "rcons", ["free_product", "word"]], ["add", "theorem", "rcons_inj", ["free_product", "word"]], ["add", "theorem", "smul_induction", ["free_product", "word"]], ["add", "structure", "word", ["free_product"]]]}]}, {"timestamp": 1631616085, "sha": "7deb32cb", "message": "chore(data/fintype/intervals): finiteness of `Ioo`, `Ioc`, and `Icc` over `ℕ` (#9096)\nWe already have the analogous lemmas and instance for `ℤ`.", "changes": [{"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": [["add", "theorem", "Icc_ℕ_card", ["set"]], ["add", "theorem", "Icc_ℕ_finite", ["set"]], ["add", "theorem", "Ico_ℕ_finite", ["set"]], ["add", "theorem", "Ioc_ℕ_card", ["set"]], ["add", "theorem", "Ioc_ℕ_finite", ["set"]], ["add", "theorem", "Ioo_ℕ_card", ["set"]], ["add", "theorem", "Ioo_ℕ_finite", ["set"]]]}]}, {"timestamp": 1631608879, "sha": "2d57545b", "message": "feat(measure_theory/measure/integral): integral over an encodable type (#9191)", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_encodable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "map_eq_sum", ["measure_theory", "measure"]], ["add", "theorem", "sum_smul_dirac", ["measure_theory", "measure"]]]}]}, {"timestamp": 1631608877, "sha": "790e98fb", "message": "feat(linear_algebra/matrix/is_diag): add a file (#9010)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/matrix/is_diag.lean", "changes": [["add", "theorem", "add", ["matrix", "is_diag"]], ["add", "theorem", "conj_transpose", ["matrix", "is_diag"]], ["add", "theorem", "exists_diagonal", ["matrix", "is_diag"]], ["add", "theorem", "from_blocks", ["matrix", "is_diag"]], ["add", "theorem", "from_blocks_of_is_symm", ["matrix", "is_diag"]], ["add", "theorem", "is_symm", ["matrix", "is_diag"]], ["add", "theorem", "kronecker", ["matrix", "is_diag"]], ["add", "theorem", "map", ["matrix", "is_diag"]], ["add", "theorem", "minor", ["matrix", "is_diag"]], ["add", "theorem", "neg", ["matrix", "is_diag"]], ["add", "theorem", "smul", ["matrix", "is_diag"]], ["add", "theorem", "sub", ["matrix", "is_diag"]], ["add", "theorem", "transpose", ["matrix", "is_diag"]], ["add", "def", "is_diag", ["matrix"]], ["add", "theorem", "is_diag_conj_transpose_iff", ["matrix"]], ["add", "theorem", "is_diag_diagonal", ["matrix"]], ["add", "theorem", "is_diag_from_blocks_iff", ["matrix"]], ["add", "theorem", "is_diag_iff_exists_diagonal", ["matrix"]], ["add", "theorem", "is_diag_neg_iff", ["matrix"]], ["add", "theorem", "is_diag_of_subsingleton", ["matrix"]], ["add", "theorem", "is_diag_one", ["matrix"]], ["add", "theorem", "is_diag_smul_one", ["matrix"]], ["add", "theorem", "is_diag_transpose_iff", ["matrix"]], ["add", "theorem", "is_diag_zero", ["matrix"]], ["add", "theorem", "mul_transpose_self_is_diag_iff_has_orthogonal_rows", ["matrix"]], ["add", "theorem", "transpose_mul_self_is_diag_iff_has_orthogonal_cols", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/orthogonal.lean", "changes": [["add", "theorem", "has_orthogonal_rows", ["matrix", "has_orthogonal_cols"]], ["add", "theorem", "transpose_has_orthogonal_rows", ["matrix", "has_orthogonal_cols"]], ["add", "def", "has_orthogonal_cols", ["matrix"]], ["add", "theorem", "has_orthogonal_cols", ["matrix", "has_orthogonal_rows"]], ["add", "theorem", "transpose_has_orthogonal_cols", ["matrix", "has_orthogonal_rows"]], ["add", "def", "has_orthogonal_rows", ["matrix"]], ["add", "theorem", "transpose_has_orthogonal_cols_iff_has_orthogonal_rows", ["matrix"]], ["add", "theorem", "transpose_has_orthogonal_rows_iff_has_orthogonal_cols", ["matrix"]]]}]}, {"timestamp": 1631601372, "sha": "9af1db3c", "message": "feat(measure_theory/measure/measure_space): The pushfoward measure of a finite measure is a finite measure (#9186)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "is_finite_measure_map", ["measure_theory", "measure"]]]}]}, {"timestamp": 1631601371, "sha": "ceab0e7f", "message": "chore(order/bounded_lattice): make `bot_lt_some` and `some_lt_none` consistent (#9180)\n`with_bot.bot_lt_some` gets renamed to `with_bot.none_lt_some` and now syntactically applies to `none : with_bot α` (`with_bot.bot_le_coe` already applies to `⊥` and `↑a`).\n`with_top.some_lt_none` now takes `a` explicit.", "changes": [{"oldPath": "src/data/nat/with_bot.lean", "newPath": "src/data/nat/with_bot.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "bot_lt_coe", ["with_bot"]], ["del", "theorem", "bot_lt_some", ["with_bot"]], ["add", "theorem", "none_lt_some", ["with_bot"]], ["mod", "theorem", "coe_lt_top", ["with_top"]], ["mod", "theorem", "some_lt_none", ["with_top"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1631601370, "sha": "ef78b322", "message": "feat(measure_theory/function/lp_space): add lemmas about snorm and mem_Lp (#9146)\nAlso move lemma `snorm_add_le` (and related others) out of the borel space section, since `opens_measurable_space` is a sufficient hypothesis.", "changes": [{"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["add", "theorem", "ess_sup_smul_measure", []]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "congr_norm", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mono'", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_congr_norm", ["measure_theory"]], ["add", "theorem", "mem_ℒp_const_iff", ["measure_theory"]], ["add", "theorem", "mem_ℒp_finset_sum", ["measure_theory"]], ["add", "theorem", "mem_ℒp_neg_iff", ["measure_theory"]], ["add", "theorem", "mem_ℒp_norm_iff", ["measure_theory"]], ["add", "theorem", "snorm'_smul_measure", ["measure_theory"]], ["add", "theorem", "snorm_const_lt_top_iff", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_smul_measure", ["measure_theory"]], ["add", "theorem", "snorm_mono", ["measure_theory"]], ["add", "theorem", "snorm_mono_ae_real", ["measure_theory"]], ["add", "theorem", "snorm_mono_real", ["measure_theory"]], ["add", "theorem", "snorm_one_smul_measure", ["measure_theory"]], ["add", "theorem", "snorm_smul_measure_of_ne_top", ["measure_theory"]], ["add", "theorem", "snorm_smul_measure_of_ne_zero", ["measure_theory"]], ["add", "theorem", "snorm_sub_le", ["measure_theory"]], ["add", "theorem", "snorm_zero'", ["measure_theory"]], ["add", "theorem", "zero_mem_ℒp'", ["measure_theory"]]]}]}, {"timestamp": 1631601369, "sha": "5aaa5faa", "message": "chore(measure_theory/integral/set_integral): update old lemmas that were in comments at the end of the file (#9111)\nThe file `set_integral` had a list of lemmas in comments at the end of the file, which were written for an old implementation of the set integral. This PR deletes the comments, and adds the corresponding results when they don't already exist.\nThe lemmas `set_integral_congr_set_ae` and `set_integral_mono_set` are also moved to relevant sections.", "changes": [{"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_union_ae", ["measure_theory"]], ["add", "theorem", "set_integral_mono_on_ae", ["measure_theory"]], ["mod", "theorem", "set_integral_mono_set", ["measure_theory"]], ["add", "theorem", "set_integral_nonneg_ae", ["measure_theory"]], ["mod", "theorem", "set_integral_nonneg_of_ae", ["measure_theory"]], ["add", "theorem", "set_integral_nonpos", ["measure_theory"]], ["add", "theorem", "set_integral_nonpos_ae", ["measure_theory"]], ["add", "theorem", "set_integral_nonpos_of_ae", ["measure_theory"]], ["add", "theorem", "set_integral_nonpos_of_ae_restrict", ["measure_theory"]], ["add", "theorem", "tendsto_set_integral_of_antimono", ["measure_theory"]], ["add", "theorem", "tendsto_set_integral_of_monotone", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}]}, {"timestamp": 1631601368, "sha": "4b7593fc", "message": "feat(data/last/basic): a lemma specifying list.split_on (#9104)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "intersperse_cons_cons", ["list"]], ["add", "theorem", "intersperse_nil", ["list"]], ["add", "theorem", "intersperse_singleton", ["list"]], ["add", "theorem", "join_nil", ["list"]], ["add", "theorem", "split_on_nil", ["list"]], ["add", "def", "split_on_p_aux'", ["list"]], ["add", "theorem", "split_on_p_aux_eq", ["list"]], ["add", "theorem", "split_on_p_aux_nil", ["list"]], ["add", "theorem", "split_on_p_spec", ["list"]]]}]}, {"timestamp": 1631593940, "sha": "d3b345df", "message": "feat(group_theory/p_group): Bottom subgroup is a p-group (#9190)\nThe bottom subgroup is a p-group.\nName is consistent with `is_p_group.of_card`", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "of_bot", ["is_p_group"]]]}]}, {"timestamp": 1631593939, "sha": "8dffafd2", "message": "feat(topology): one-point compactification of a topological space (#8579)\nDefine `alexandroff X` to be the one-point compactification of a topological space `X` and prove some basic lemmas about this definition.\nCo-authored by: Yury G. Kudryashov ", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_image_eq", ["function", "injective"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "maps_to_singleton", ["set"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "sup_principal", ["filter", "has_basis"]], ["add", "theorem", "sup_pure", ["filter", "has_basis"]], ["add", "theorem", "has_basis_pure", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "tendsto_comap_iff", ["filter"]], ["mod", "theorem", "tendsto_map'_iff", ["filter"]], ["mod", "theorem", "tendsto_sup", ["filter"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "coe_comap", ["ultrafilter"]], ["add", "theorem", "mem_comap", ["ultrafilter"]]]}, {"oldPath": null, "newPath": "src/topology/alexandroff.lean", "changes": [["add", "theorem", "coe_eq_coe", ["alexandroff"]], ["add", "theorem", "coe_injective", ["alexandroff"]], ["add", "theorem", "coe_ne_infty", ["alexandroff"]], ["add", "theorem", "coe_preimage_infty", ["alexandroff"]], ["add", "theorem", "comap_coe_nhds", ["alexandroff"]], ["add", "theorem", "comap_coe_nhds_infty", ["alexandroff"]], ["add", "theorem", "compl_image_coe", ["alexandroff"]], ["add", "theorem", "compl_infty", ["alexandroff"]], ["add", "theorem", "compl_range_coe", ["alexandroff"]], ["add", "theorem", "continuous_at_coe", ["alexandroff"]], ["add", "theorem", "continuous_at_infty'", ["alexandroff"]], ["add", "theorem", "continuous_at_infty", ["alexandroff"]], ["add", "theorem", "continuous_coe", ["alexandroff"]], ["add", "theorem", "dense_embedding_coe", ["alexandroff"]], ["add", "theorem", "dense_range_coe", ["alexandroff"]], ["add", "theorem", "has_basis_nhds_infty", ["alexandroff"]], ["add", "def", "infty", ["alexandroff"]], ["add", "theorem", "infty_mem_opens_of_compl", ["alexandroff"]], ["add", "theorem", "infty_ne_coe", ["alexandroff"]], ["add", "theorem", "infty_not_mem_image_coe", ["alexandroff"]], ["add", "theorem", "infty_not_mem_range_coe", ["alexandroff"]], ["add", "theorem", "is_closed_iff_of_mem", ["alexandroff"]], ["add", "theorem", "is_closed_iff_of_not_mem", ["alexandroff"]], ["add", "theorem", "is_closed_image_coe", ["alexandroff"]], ["add", "theorem", "is_closed_infty", ["alexandroff"]], ["add", "theorem", "is_compl_range_coe_infty", ["alexandroff"]], ["add", "theorem", "is_open_compl_image_coe", ["alexandroff"]], ["add", "theorem", "is_open_def", ["alexandroff"]], ["add", "theorem", "is_open_iff_of_mem'", ["alexandroff"]], ["add", "theorem", "is_open_iff_of_mem", ["alexandroff"]], ["add", "theorem", "is_open_iff_of_not_mem", ["alexandroff"]], ["add", "theorem", "is_open_image_coe", ["alexandroff"]], ["add", "theorem", "is_open_map_coe", ["alexandroff"]], ["add", "theorem", "is_open_range_coe", ["alexandroff"]], ["add", "theorem", "le_nhds_infty", ["alexandroff"]], ["add", "theorem", "ne_infty_iff_exists", ["alexandroff"]], ["add", "theorem", "nhds_coe_eq", ["alexandroff"]], ["add", "theorem", "nhds_infty_eq", ["alexandroff"]], ["add", "theorem", "nhds_within_coe", ["alexandroff"]], ["add", "theorem", "nhds_within_coe_image", ["alexandroff"]], ["add", "theorem", "nhds_within_compl_infty_eq", ["alexandroff"]], ["add", "theorem", "not_mem_range_coe_iff", ["alexandroff"]], ["add", "theorem", "open_embedding_coe", ["alexandroff"]], ["add", "def", "opens_of_compl", ["alexandroff"]], ["add", "theorem", "range_coe_inter_infty", ["alexandroff"]], ["add", "theorem", "range_coe_union_infty", ["alexandroff"]], ["add", "theorem", "tendsto_nhds_infty'", ["alexandroff"]], ["add", "theorem", "tendsto_nhds_infty", ["alexandroff"]], ["add", "theorem", "ultrafilter_le_nhds_infty", ["alexandroff"]], ["add", "def", "alexandroff", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "map_nhds_within_eq", ["embedding"]], ["add", "theorem", "nhds_within_eq", ["is_open"]], ["add", "theorem", "nhds_within_compl_singleton_sup_pure", []], ["del", "theorem", "nhds_within_eq_of_open", []], ["add", "theorem", "map_nhds_within_preimage_eq", ["open_embedding"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "coclosed_compact_eq_cocompact", ["filter"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "def", "coclosed_compact", ["filter"]], ["mod", "def", "cocompact", ["filter"]], ["add", "theorem", "cocompact_le_coclosed_compact", ["filter"]], ["add", "theorem", "cocompact_ne_bot_tfae", ["filter"]], ["add", "theorem", "has_basis_coclosed_compact", ["filter"]], ["mod", "theorem", "has_basis_cocompact", ["filter"]], ["add", "theorem", "mem_coclosed_compact'", ["filter"]], ["add", "theorem", "mem_coclosed_compact", ["filter"]], ["mod", "theorem", "mem_cocompact'", ["filter"]], ["mod", "theorem", "mem_cocompact", ["filter"]], ["mod", "theorem", "compl_mem_cocompact", ["is_compact"]], ["add", "theorem", "is_compact_univ_iff", []]]}]}, {"timestamp": 1631590942, "sha": "f88f3a76", "message": "chore(scripts): update nolints.txt (#9192)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1631582390, "sha": "f0a1356c", "message": "feat(linear_algebra/matrix/circulant): add a file (#9011)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/matrix/circulant.lean", "changes": [["add", "def", "circulant", ["matrix"]], ["add", "theorem", "circulant_add", ["matrix"]], ["add", "theorem", "circulant_col_zero_eq", ["matrix"]], ["add", "theorem", "circulant_inj", ["matrix"]], ["add", "theorem", "circulant_injective", ["matrix"]], ["add", "theorem", "circulant_is_symm_apply", ["matrix"]], ["add", "theorem", "circulant_is_symm_iff", ["matrix"]], ["add", "theorem", "circulant_mul", ["matrix"]], ["add", "theorem", "circulant_mul_comm", ["matrix"]], ["add", "theorem", "circulant_neg", ["matrix"]], ["add", "theorem", "circulant_single", ["matrix"]], ["add", "theorem", "circulant_single_one", ["matrix"]], ["add", "theorem", "circulant_smul", ["matrix"]], ["add", "theorem", "circulant_sub", ["matrix"]], ["add", "theorem", "circulant_zero", ["matrix"]], ["add", "theorem", "conj_transpose_circulant", ["matrix"]], ["add", "theorem", "circulant_inj", ["matrix", "fin"]], ["add", "theorem", "circulant_injective", ["matrix", "fin"]], ["add", "theorem", "circulant_is_symm_apply", ["matrix", "fin"]], ["add", "theorem", "circulant_is_symm_iff", ["matrix", "fin"]], ["add", "theorem", "circulant_ite", ["matrix", "fin"]], ["add", "theorem", "circulant_mul", ["matrix", "fin"]], ["add", "theorem", "circulant_mul_comm", ["matrix", "fin"]], ["add", "theorem", "conj_transpose_circulant", ["matrix", "fin"]], ["add", "theorem", "transpose_circulant", ["matrix", "fin"]], ["add", "theorem", "map_circulant", ["matrix"]], ["add", "theorem", "transpose_circulant", ["matrix"]]]}]}, {"timestamp": 1631576079, "sha": "103c1ffa", "message": "feat(data/(d)finsupp): (d)finsupp.update (#9015)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "coe_update", ["dfinsupp"]], ["add", "theorem", "support_update", ["dfinsupp"]], ["add", "theorem", "support_update_ne_zero", ["dfinsupp"]], ["add", "def", "update", ["dfinsupp"]], ["add", "theorem", "update_eq_erase", ["dfinsupp"]], ["add", "theorem", "update_self", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "coe_update", ["finsupp"]], ["add", "theorem", "support_update", ["finsupp"]], ["add", "theorem", "support_update_ne_zero", ["finsupp"]], ["add", "theorem", "support_update_zero", ["finsupp"]], ["add", "def", "update", ["finsupp"]], ["add", "theorem", "update_self", ["finsupp"]]]}]}, {"timestamp": 1631558151, "sha": "d9476d44", "message": "fix(tactic/rcases): Don't parameterize parsers (#9159)\nThe parser description generator only unfolds parser constants if they have no arguments, which means that parsers like `rcases_patt_parse tt` and `rcases_patt_parse ff` don't generate descriptions even though they have a `with_desc` clause. We fix this by naming the parsers separately.\nFixes #9158", "changes": [{"oldPath": "src/tactic/congr.lean", "newPath": "src/tactic/congr.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": []}]}, {"timestamp": 1631555152, "sha": "ec5f4961", "message": "feat(README.md): add Rémy Degenne (#9187)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1631549954, "sha": "40247bd5", "message": "feat(measure_theory/measure/vector_measure): add `vector_measure.trim` (#9169)", "changes": [{"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "restrict_trim", ["measure_theory", "vector_measure"]], ["add", "def", "trim", ["measure_theory", "vector_measure"]], ["add", "theorem", "trim_eq_self", ["measure_theory", "vector_measure"]], ["add", "theorem", "trim_measurable_set_eq", ["measure_theory", "vector_measure"]], ["add", "theorem", "zero_trim", ["measure_theory", "vector_measure"]]]}]}, {"timestamp": 1631549953, "sha": "3b4f4daf", "message": "feat(linear_algebra/determinant): more on the determinant of linear maps (#9139)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_conj", ["linear_map"]], ["add", "theorem", "det_smul", ["linear_map"]], ["add", "theorem", "det_to_matrix'", ["linear_map"]], ["add", "theorem", "det_zero'", ["linear_map"]], ["mod", "theorem", "det_zero", ["linear_map"]], ["add", "def", "equiv_of_det_ne_zero", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "to_matrix_eq_to_matrix'", ["linear_map"]], ["add", "theorem", "to_lin_eq_to_lin'", ["matrix"]]]}]}, {"timestamp": 1631541580, "sha": "a9e7d333", "message": "chore(analysis/calculus/[f]deriv): generalize product formula to product in normed algebras (#9163)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["del", "theorem", "deriv_const_mul'", []], ["mod", "theorem", "deriv_const_mul", []], ["add", "theorem", "deriv_const_mul_field'", []], ["add", "theorem", "deriv_const_mul_field", []], ["del", "theorem", "deriv_mul_const'", []], ["mod", "theorem", "deriv_mul_const", []], ["add", "theorem", "deriv_mul_const_field'", []], ["add", "theorem", "deriv_mul_const_field", []], ["mod", "theorem", "const_mul", ["has_deriv_at"]], ["mod", "theorem", "mul_const", ["has_deriv_at"]], ["mod", "theorem", "const_mul", ["has_deriv_within_at"]], ["mod", "theorem", "mul_const", ["has_deriv_within_at"]], ["mod", "theorem", "const_mul", ["has_strict_deriv_at"]], ["mod", "theorem", "mul_const", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "const_mul", ["differentiable"]], ["mod", "theorem", "mul", ["differentiable"]], ["mod", "theorem", "mul_const", ["differentiable"]], ["mod", "theorem", "const_mul", ["differentiable_at"]], ["mod", "theorem", "mul", ["differentiable_at"]], ["mod", "theorem", "mul_const", ["differentiable_at"]], ["mod", "theorem", "const_mul", ["differentiable_on"]], ["mod", "theorem", "mul", ["differentiable_on"]], ["mod", "theorem", "mul_const", ["differentiable_on"]], ["mod", "theorem", "fderiv_const_mul", []], ["add", "theorem", "fderiv_mul'", []], ["add", "theorem", "fderiv_mul_const'", []], ["mod", "theorem", "fderiv_mul_const", []], ["add", "theorem", "fderiv_within_mul'", []], ["add", "theorem", "fderiv_within_mul_const'", []], ["mod", "theorem", "const_mul", ["has_fderiv_at"]], ["add", "theorem", "mul'", ["has_fderiv_at"]], ["add", "theorem", "mul_const'", ["has_fderiv_at"]], ["mod", "theorem", "mul_const", ["has_fderiv_at"]], ["add", "theorem", "mul'", ["has_fderiv_within_at"]], ["add", "theorem", "mul_const'", ["has_fderiv_within_at"]], ["mod", "theorem", "mul_const", ["has_fderiv_within_at"]], ["mod", "theorem", "const_mul", ["has_strict_fderiv_at"]], ["add", "theorem", "mul'", ["has_strict_fderiv_at"]], ["add", "theorem", "mul_const'", ["has_strict_fderiv_at"]], ["mod", "theorem", "mul_const", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}]}, {"timestamp": 1631541579, "sha": "ad625833", "message": "chore(algebra/big_operators): add a lemma (#9120)\n(product over `s.filter p`) * (product over `s.filter (λ x, ¬p x)) = product over s", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_filter_mul_prod_filter_not", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "filter_inter_filter_neg_eq", ["finset"]]]}]}, {"timestamp": 1631528559, "sha": "b0e8ced1", "message": "feat(group_theory/nilpotent): add intermediate lemmas (#9016)\nAdd two new lemmas on nilpotent groups.", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_of_ker_le_center", []], ["add", "theorem", "lower_central_series_succ_eq_bot", []]]}]}, {"timestamp": 1631525659, "sha": "a8a8edcb", "message": "feat(group_theory/p_group): Generalize to infinite p-groups (#9082)\nDefines p-groups, and generalizes the results of `p_group.lean` to infinite p-groups. The eventual goal is to generalize Sylow's theorems to infinite groups.", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "card_orbit", ["is_p_group"]], ["add", "theorem", "iff_card", ["is_p_group"]], ["add", "theorem", "iff_order_of", ["is_p_group"]], ["add", "theorem", "index", ["is_p_group"]], ["add", "theorem", "of_card", ["is_p_group"]], ["add", "theorem", "to_le", ["is_p_group"]], ["add", "theorem", "to_quotient", ["is_p_group"]], ["add", "theorem", "to_subgroup", ["is_p_group"]], ["add", "def", "is_p_group", []], ["mod", "theorem", "nonempty_fixed_point_of_prime_not_dvd_card", ["mul_action"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1631525657, "sha": "d4f8b921", "message": "feat(measure_theory/measure/with_density_vector_measure): define vector measures by an integral over a function (#9008)\nThis PR defined the vector measure corresponding to mapping the set `s` to the integral `∫ x in s, f x ∂μ` given some measure `μ` and some integrable function `f`.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/measure/with_density_vector_measure.lean", "changes": [["add", "theorem", "ae_eq_of_with_densityᵥ_eq", ["measure_theory", "integrable"]], ["add", "theorem", "with_densityᵥ_eq_iff", ["measure_theory", "integrable"]], ["add", "def", "with_densityᵥ", ["measure_theory", "measure"]], ["add", "theorem", "with_densityᵥ_absolutely_continuous", ["measure_theory", "measure"]], ["add", "theorem", "with_densityᵥ_add", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_apply", ["measure_theory"]], ["add", "theorem", "congr_ae", ["measure_theory", "with_densityᵥ_eq"]], ["add", "theorem", "with_densityᵥ_neg", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_smul", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_sub", ["measure_theory"]], ["add", "theorem", "with_densityᵥ_zero", ["measure_theory"]]]}]}, {"timestamp": 1631525656, "sha": "80085fc2", "message": "feat(number_theory/padics/padic_integers): Z_p is adically complete (#8995)", "changes": [{"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}]}, {"timestamp": 1631522772, "sha": "d0820017", "message": "feat(analysis/convex/independent): convex independence (#9018)", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/independent.lean", "changes": [["add", "theorem", "extreme_points_convex_independent", ["convex"]], ["add", "theorem", "comp_embedding", ["convex_independent"]], ["add", "def", "convex_independent", []], ["add", "theorem", "convex_independent_iff_finset", []], ["add", "theorem", "convex_independent_iff_not_mem_convex_hull_diff", []], ["add", "theorem", "convex_independent_set_iff_inter_convex_hull_subset", []], ["add", "theorem", "convex_independent_set_iff_not_mem_convex_hull_diff", []], ["add", "theorem", "convex_independent_iff_set", ["function", "injective"]], ["add", "theorem", "convex_independent", ["subsingleton"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "indicator_eq_of_affine_combination_eq", ["affine_independent"]]]}]}, {"timestamp": 1631515004, "sha": "1cf17041", "message": "chore(order/filter): more readable proof (#9173)", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}]}, {"timestamp": 1631515003, "sha": "14790682", "message": "chore(ring_theory/polynomial/cyclotomic): fix namespacing (#9116)\n@riccardobrasca told me I got it wrong, so I fixed it :)", "changes": [{"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "minpoly_dvd_cyclotomic", []], ["del", "theorem", "minpoly_primitive_root_dvd_cyclotomic", ["polynomial"]], ["del", "theorem", "order_of_root_cyclotomic", ["polynomial"]], ["add", "theorem", "order_of_root_cyclotomic_eq", ["polynomial"]]]}]}, {"timestamp": 1631512830, "sha": "56511573", "message": "feat(linear_algebra/adic_completion): le_jacobson_bot (#9125)\nThis PR proves that in an `I`-adically complete commutative ring `R`, the ideal `I` is contained in the Jacobson radical of `R`.", "changes": [{"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": [["add", "theorem", "le_jacobson_bot", ["is_adic_complete"]]]}]}, {"timestamp": 1631505880, "sha": "ca23d52c", "message": "feat(set_theory/surreal): add dyadic surreals (#7843)\nWe define `surreal.dyadic` using a map from \\int localized away from 2 to surreals. As currently we do not have the ring structure on `surreal` we do this \"by hand\". \nNext steps: \n1. Prove that `dyadic_map` is injective\n2. Prove that `dyadic_map` is a group hom\n3. Show that \\int localized away from 2 is a subgroup of \\rat.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["add", "def", "half", ["pgame"]], ["add", "theorem", "half_lt_one", ["pgame"]], ["add", "theorem", "half_move_left", ["pgame"]], ["add", "theorem", "half_move_right", ["pgame"]], ["add", "theorem", "zero_lt_half", ["pgame"]], ["add", "theorem", "zero_lt_one", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal/basic.lean", "changes": [["add", "theorem", "half_add_half_equiv_one", ["pgame"]], ["add", "theorem", "numeric_half", ["pgame"]]]}, {"oldPath": null, "newPath": "src/set_theory/surreal/dyadic.lean", "changes": [["add", "theorem", "add_pow_half_succ_self_eq_pow_half", ["pgame"]], ["add", "theorem", "numeric_pow_half", ["pgame"]], ["add", "def", "pow_half", ["pgame"]], ["add", "theorem", "pow_half_left_moves", ["pgame"]], ["add", "theorem", "pow_half_move_left'", ["pgame"]], ["add", "theorem", "pow_half_move_left", ["pgame"]], ["add", "theorem", "pow_half_move_right'", ["pgame"]], ["add", "theorem", "pow_half_move_right", ["pgame"]], ["add", "theorem", "pow_half_right_moves", ["pgame"]], ["add", "theorem", "pow_half_succ_le_pow_half", ["pgame"]], ["add", "theorem", "pow_half_succ_lt_pow_half", ["pgame"]], ["add", "theorem", "zero_le_pow_half", ["pgame"]], ["add", "theorem", "zero_lt_pow_half", ["pgame"]], ["add", "theorem", "add_half_self_eq_one", ["surreal"]], ["add", "theorem", "double_pow_half_succ_eq_pow_half", ["surreal"]], ["add", "def", "dyadic", ["surreal"]], ["add", "theorem", "dyadic_aux", ["surreal"]], ["add", "def", "dyadic_map", ["surreal"]], ["add", "def", "half", ["surreal"]], ["add", "theorem", "nsmul_int_pow_two_pow_half", ["surreal"]], ["add", "theorem", "nsmul_pow_two_pow_half'", ["surreal"]], ["add", "theorem", "nsmul_pow_two_pow_half", ["surreal"]], ["add", "def", "pow_half", ["surreal"]], ["add", "theorem", "pow_half_one", ["surreal"]], ["add", "theorem", "pow_half_zero", ["surreal"]]]}]}, {"timestamp": 1631500827, "sha": "f0effbda", "message": "chore(scripts): update nolints.txt (#9177)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1631494387, "sha": "87c1820c", "message": "feat(group_theory/perm/concrete_cycle): perms from cycle data structure (#8866)", "changes": [{"oldPath": "src/group_theory/perm/concrete_cycle.lean", "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": [["add", "def", "form_perm", ["cycle"]], ["add", "theorem", "form_perm_apply_mem_eq_next", ["cycle"]], ["add", "theorem", "form_perm_coe", ["cycle"]], ["add", "theorem", "form_perm_eq_form_perm_iff", ["cycle"]], ["add", "theorem", "form_perm_eq_self_of_not_mem", ["cycle"]], ["add", "theorem", "form_perm_reverse", ["cycle"]], ["add", "theorem", "form_perm_subsingleton", ["cycle"]], ["add", "theorem", "is_cycle_form_perm", ["cycle"]], ["add", "theorem", "support_form_perm", ["cycle"]]]}]}, {"timestamp": 1631485808, "sha": "f6c8affd", "message": "feat(order/zorn) : `chain_univ` (#9162)\n`univ` is a `r`-chain iff `r` is trichotomous", "changes": [{"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["add", "theorem", "chain_of_trichotomous", ["zorn"]], ["add", "theorem", "chain_univ_iff", ["zorn"]]]}]}, {"timestamp": 1631479628, "sha": "5b702ec3", "message": "chore(linear_algebra/basic): move map_comap_eq into submodule namespace (#9160)\nWe change the following lemmas from the `linear_map` namespace into the `submodule` namespace\n- map_comap_eq\n- comap_map_eq\n- map_comap_eq_self\n- comap_map_eq_self\nThis is consistent with `subgroup.map_comap_eq`, and the lemmas are about `submodule.map` so it make sense to keep them in the submodule namespace.", "changes": [{"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "comap_map_eq", ["linear_map"]], ["del", "theorem", "comap_map_eq_self", ["linear_map"]], ["del", "theorem", "map_comap_eq", ["linear_map"]], ["del", "theorem", "map_comap_eq_self", ["linear_map"]], ["add", "theorem", "comap_map_eq", ["submodule"]], ["add", "theorem", "comap_map_eq_self", ["submodule"]], ["add", "theorem", "map_comap_eq", ["submodule"]], ["add", "theorem", "map_comap_eq_self", ["submodule"]]]}, {"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1631472061, "sha": "00d570af", "message": "doc(algebra/covariant_and_contravariant): fix parameter documentation… (#9171)\n… in covariant_class and contravariant_class\nIn the documentation of `algebra.covariant_and_contravariant.covariant_class` and `algebra.covariant_and_contravariant.contravariant_class`, the parameter `r` is described as having type `N → N`. It's actual type is `N → N → Prop`. We change the documentation to give the correct type of `r`.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}]}, {"timestamp": 1631472060, "sha": "65f8148b", "message": "chore(algebra/field_power): golf some proofs (#9170)", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}]}, {"timestamp": 1631472059, "sha": "3366a685", "message": "feat(data/fin): eq_zero_or_eq_succ (#9136)\nParticularly useful with `rcases i.eq_zero_or_eq_succ with rfl|⟨j,rfl⟩`.\nPerhaps it not worth having as a separate lemma, but it seems to avoid breaking the flow of a proof I was writing.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "eq_zero_or_eq_succ", ["fin"]]]}]}, {"timestamp": 1631469206, "sha": "a7d872fa", "message": "chore(category/abelian/pseudoelements): localize expensive typeclass (#9156)\nPer @fpvandoorn's [new linter](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/type-class.20loops.20in.20category.20theory).", "changes": [{"oldPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": [["add", "def", "has_zero", ["category_theory", "abelian", "pseudoelement"]]]}]}, {"timestamp": 1631459678, "sha": "995f4819", "message": "feat(logic/basic): a few lemmas (#9166)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "and_forall_ne", []], ["add", "theorem", "imp_iff_right_iff", ["decidable"]], ["mod", "theorem", "exists_imp_distrib", []], ["add", "theorem", "forall_exists_index", []], ["add", "theorem", "forall_imp_iff_exists_imp", []], ["add", "theorem", "imp_iff_right_iff", []]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}]}, {"timestamp": 1631440097, "sha": "04d2b12e", "message": "feat(ring_theory/ideal/operations): annihilator_smul (#9151)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "annihilator_mul", ["submodule"]], ["add", "theorem", "annihilator_smul", ["submodule"]], ["add", "theorem", "mul_annihilator", ["submodule"]]]}]}, {"timestamp": 1631429296, "sha": "f8637039", "message": "fix(category_theory/concrete_category): remove bad instance (#9154)\nPer @fpvandoorn's [new linter](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/type-class.20loops.20in.20category.20theory).", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "newPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "changes": [["add", "theorem", "reflects_isomorphisms_forget₂", ["category_theory"]]]}]}, {"timestamp": 1631429295, "sha": "858e7649", "message": "fix(ring_theory/ideal/basic): ideal.module_pi speedup (#9148)\nEric and Yael were both complaining that `ideal.module_pi` would occasionally cause random timeouts on unrelated PRs. This PR (a) makes the `smul` proof obligation much tidier (factoring out a sublemma) and (b) replaces the `all_goals` trick by 6 slightly more refined proofs (making the new proof longer, but quicker). On my machine the profiler stats are:\n```\nORIG\nparsing took 74.1ms\nelaboration of module_pi took 3.83s\ntype checking of module_pi took 424ms\ndecl post-processing of module_pi took 402ms\nNEW\nparsing took 136ms\nelaboration of module_pi took 1.19s\ntype checking of module_pi took 82.8ms\ndecl post-processing of module_pi took 82.5ms\n```", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "mul_sub_mul_mem", ["ideal"]]]}]}, {"timestamp": 1631429294, "sha": "b55483ae", "message": "feat(category_theory/monoidal): rigid (autonomous) monoidal categories (#8946)\nDefines rigid monoidal categories and creates the instance of finite dimensional vector spaces.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/FinVect.lean", "changes": [["add", "def", "FinVect_coevaluation", ["FinVect"]], ["add", "theorem", "FinVect_coevaluation_apply_one", ["FinVect"]], ["add", "def", "FinVect_dual", ["FinVect"]], ["add", "def", "FinVect_evaluation", ["FinVect"]], ["add", "theorem", "FinVect_evaluation_apply", ["FinVect"]], ["add", "def", "FinVect", []]]}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["add", "theorem", "associator_inv_apply", ["Module", "monoidal_category"]], ["add", "theorem", "left_unitor_inv_apply", ["Module", "monoidal_category"]], ["add", "theorem", "right_unitor_inv_apply", ["Module", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "associator_conjugation", ["category_theory", "monoidal_category"]], ["add", "theorem", "associator_inv_conjugation", ["category_theory", "monoidal_category"]], ["add", "def", "full_monoidal_subcategory", ["category_theory", "monoidal_category"]], ["add", "theorem", "id_tensor_right_unitor_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_inv_comp_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_inv_tensor_id", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_comp_id_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_hom_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_inv_hom", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_inv_inv_hom", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_inv_comp_tensor", ["category_theory", "monoidal_category"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/rigid.lean", "changes": [["add", "theorem", "comp_left_adjoint_mate", ["category_theory"]], ["add", "theorem", "comp_right_adjoint_mate", ["category_theory"]], ["add", "def", "left_adjoint_mate", ["category_theory"]], ["add", "theorem", "left_adjoint_mate_comp", ["category_theory"]], ["add", "theorem", "left_adjoint_mate_id", ["category_theory"]], ["add", "def", "left_dual_iso", ["category_theory"]], ["add", "theorem", "left_dual_iso_id", ["category_theory"]], ["add", "theorem", "left_dual_right_dual", ["category_theory"]], ["add", "def", "right_adjoint_mate", ["category_theory"]], ["add", "theorem", "right_adjoint_mate_comp", ["category_theory"]], ["add", "theorem", "right_adjoint_mate_id", ["category_theory"]], ["add", "def", "right_dual_iso", ["category_theory"]], ["add", "theorem", "right_dual_iso_id", ["category_theory"]], ["add", "theorem", "right_dual_left_dual", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/coevaluation.lean", "changes": [["add", "def", "coevaluation", []], ["add", "theorem", "coevaluation_apply_one", []], ["add", "theorem", "contract_left_assoc_coevaluation'", []], ["add", "theorem", "contract_left_assoc_coevaluation", []]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["del", "def", "tensor_product", ["finsupp", "basis"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/tensor_product_basis.lean", "changes": [["add", "def", "tensor_product", ["basis"]]]}]}, {"timestamp": 1631426095, "sha": "e1bed5a0", "message": "fix(category_theory/adjunction/limits): remove bad instance (#9157)\nPer @fpvandoorn's [new linter](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/type-class.20loops.20in.20category.20theory).", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["add", "theorem", "has_colimit_comp_equivalence", ["category_theory", "adjunction"]], ["add", "theorem", "has_limit_comp_equivalence", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}]}, {"timestamp": 1631426094, "sha": "059eba46", "message": "fix(category/preadditive/single_obj): remove superfluous instance (#9155)\nPer @fpvandoorn's [new linter](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/type-class.20loops.20in.20category.20theory).", "changes": [{"oldPath": "src/category_theory/preadditive/single_obj.lean", "newPath": "src/category_theory/preadditive/single_obj.lean", "changes": []}]}, {"timestamp": 1631413009, "sha": "96c1d69b", "message": "doc(data/list/*): Elaborate module docstrings (#9076)\nJust adding some elaboration that @YaelDillies requested in #8867, but which didn't get included before it was merged.", "changes": [{"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": []}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": []}]}, {"timestamp": 1631408871, "sha": "f75bee3f", "message": "chore(ring_theory/noetherian): fix URL (#9149)", "changes": [{"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1631401044, "sha": "55aaebe1", "message": "feat(data/real/ennreal): add `contravariant_class ennreal ennreal (+) (<)` (#9143)\n## `algebra/ordered_monoid`\n* use `≠ ⊤`/`≠ ⊥` instead of `< ⊤`/`⊥ <` in the assumptions of `with_top.add_lt_add_iff_left`, `with_top.add_lt_add_iff_right`, `with_bot.add_lt_add_iff_left`, and `with_bot.add_lt_add_iff_right`;\n* add instances for `contravariant_class (with_top α) (with_top α) (+) (<)` and `contravariant_class (with_bot α) (with_bot α) (+) (<)`.\n## `data/real/ennreal`\n* use `≠ ∞` instead of `< ∞` in the assumptions of `ennreal.add_lt_add_iff_left`, `ennreal.add_lt_add_iff_right`, `ennreal.lt_add_right`,\n* add an instance `contravariant_class ℝ≥0∞ ℝ≥0∞ (+) (<)`;\n* rename `ennreal.sub_infty` to `ennreal.sub_top`.\n## `measure_theory/measure/outer_measure`\n* use `≠ ∞` instead of `< ∞` in the assumptions of `induced_outer_measure_exists_set`;\n## `topology/metric_space/emetric_space`\n* use `≠ ∞` instead of `< ∞` in the assumptions of `emetric.ball_subset`.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["mod", "theorem", "add_lt_add_iff_left", ["with_bot"]], ["mod", "theorem", "add_lt_add_iff_right", ["with_bot"]], ["mod", "theorem", "add_lt_add_iff_left", ["with_top"]], ["mod", "theorem", "add_lt_add_iff_right", ["with_top"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "add_lt_add_iff_left", ["ennreal"]], ["mod", "theorem", "add_lt_add_iff_right", ["ennreal"]], ["mod", "theorem", "lt_add_right", ["ennreal"]], ["del", "theorem", "sub_infty", ["ennreal"]], ["add", "theorem", "sub_top", ["ennreal"]]]}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/stieltjes.lean", "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": []}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "ball_subset", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1631397383, "sha": "c0693ca0", "message": "chore(analysis/calculus/*): add `filter.eventually_eq.deriv` etc. (#9131)\n* add `filter.eventually_eq.deriv` and `filter.eventually_eq.fderiv`;\n* add `times_cont_diff_within_at.eventually` and `times_cont_diff_at.eventually`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}]}, {"timestamp": 1631393760, "sha": "1605b859", "message": "feat(data/real/ennreal): add ennreal.to_(nn)real_inv and ennreal.to_(nn)real_div (#9144)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_nnreal_div", ["ennreal"]], ["add", "theorem", "to_nnreal_inv", ["ennreal"]], ["add", "theorem", "to_real_div", ["ennreal"]], ["add", "theorem", "to_real_inv", ["ennreal"]]]}]}, {"timestamp": 1631381501, "sha": "b9ad7333", "message": "split(analysis/convex/combination): split off `analysis.convex.basic` (#9115)\nThis moves `finset.center_mass` into its own new file.\nAbout the copyright header, `finset.center_mass` comes from #1804, which was written by Yury in December 2019.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["del", "theorem", "center_mass_mem", ["convex"]], ["del", "theorem", "sum_mem", ["convex"]], ["del", "theorem", "convex_hull_basis_eq_std_simplex", []], ["del", "theorem", "convex_hull_eq", []], ["del", "theorem", "convex_hull_eq_union_convex_hull_finite_subsets", []], ["del", "theorem", "convex_iff_sum_mem", []], ["del", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["del", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["del", "theorem", "map_center_mass_le", ["convex_on"]], ["del", "theorem", "map_sum_le", ["convex_on"]], ["del", "theorem", "center_mass_empty", ["finset"]], ["del", "theorem", "center_mass_eq_of_sum_1", ["finset"]], ["del", "theorem", "center_mass_filter_ne_zero", ["finset"]], ["del", "theorem", "center_mass_insert", ["finset"]], ["del", "theorem", "center_mass_ite_eq", ["finset"]], ["del", "theorem", "center_mass_mem_convex_hull", ["finset"]], ["del", "theorem", "center_mass_pair", ["finset"]], ["del", "theorem", "center_mass_segment'", ["finset"]], ["del", "theorem", "center_mass_segment", ["finset"]], ["del", "theorem", "center_mass_singleton", ["finset"]], ["del", "theorem", "center_mass_smul", ["finset"]], ["del", "theorem", "center_mass_subset", ["finset"]], ["del", "theorem", "convex_hull_eq", ["finset"]], ["del", "theorem", "mem_Icc_of_mem_std_simplex", []], ["del", "theorem", "convex_hull_eq", ["set", "finite"]], ["del", "theorem", "convex_hull_eq_image", ["set", "finite"]]]}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/convex/combination.lean", "changes": [["add", "theorem", "center_mass_mem", ["convex"]], ["add", "theorem", "sum_mem", ["convex"]], ["add", "theorem", "convex_hull_basis_eq_std_simplex", []], ["add", "theorem", "convex_hull_eq", []], ["add", "theorem", "convex_hull_eq_union_convex_hull_finite_subsets", []], ["add", "theorem", "convex_iff_sum_mem", []], ["add", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["add", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["add", "theorem", "map_center_mass_le", ["convex_on"]], ["add", "theorem", "map_sum_le", ["convex_on"]], ["add", "theorem", "center_mass_empty", ["finset"]], ["add", "theorem", "center_mass_eq_of_sum_1", ["finset"]], ["add", "theorem", "center_mass_filter_ne_zero", ["finset"]], ["add", "theorem", "center_mass_insert", ["finset"]], ["add", "theorem", "center_mass_ite_eq", ["finset"]], ["add", "theorem", "center_mass_mem_convex_hull", ["finset"]], ["add", "theorem", "center_mass_pair", ["finset"]], ["add", "theorem", "center_mass_segment'", ["finset"]], ["add", "theorem", "center_mass_segment", ["finset"]], ["add", "theorem", "center_mass_singleton", ["finset"]], ["add", "theorem", "center_mass_smul", ["finset"]], ["add", "theorem", "center_mass_subset", ["finset"]], ["add", "theorem", "convex_hull_eq", ["finset"]], ["add", "theorem", "mem_Icc_of_mem_std_simplex", []], ["add", "theorem", "convex_hull_eq", ["set", "finite"]], ["add", "theorem", "convex_hull_eq_image", ["set", "finite"]]]}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}]}, {"timestamp": 1631375534, "sha": "62de5912", "message": "feat(interval_integral): generalize change of variables (#8869)\n* Generalizes `interval_integral.integral_comp_mul_deriv'`.\nIn this version:\n(1) `f` need not be differentiable at the endpoints of `[a,b]`, only continuous,\n(2) I removed the `measurable_at_filter` assumption\n(3) I assumed that `g` was continuous on `f '' [a,b]`, instead of continuous at every point of `f '' [a,b]` (which differs in the endpoints).\nThis was possible after @sgouezel's PR #7978.\nThe proof was a lot longer/messier than expected. Under these assumptions we have to be careful to sometimes take one-sided derivatives. For example, we cannot take the 2-sided derivative of `λ u, ∫ x in f a..u, g x` when `u` is the maximum/minimum of `f` on `[a, b]`.\n@urkud: I needed more `FTC_filter` classes, namely for closed intervals (to be precise: `FTC_filter x (𝓝[[a, b]] x) (𝓝[[a, b]] x)`). Was there a conscious reason to exclude these classes? (The documentation explicitly enumerates the existing instances.)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "Ioi_iff_Ioo", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_congr_set", []]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "continuous_on_primitive_interval'", ["interval_integral"]], ["add", "theorem", "integral_comp_mul_deriv''", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "measurable_at_filter_nhds_within", ["continuous_on"]]]}, {"oldPath": "src/order/filter/interval.lean", "newPath": "src/order/filter/interval.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "nhds_within_eq_nhds_within'", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "image_interval", ["real"]], ["add", "theorem", "image_interval_eq_Icc", ["real"]], ["add", "theorem", "interval_subset_image_interval", ["real"]]]}]}, {"timestamp": 1631369214, "sha": "6823886c", "message": "feat(measure_theory/function/conditional_expectation): conditional expectation of an indicator (#8920)\nThis PR builds `condexp_ind (s : set α) : E →L[ℝ] α →₁[μ] E`, which takes `x : E` to the conditional expectation of the indicator of the set `s` with value `x`, seen as an element of `α →₁[μ] E`.\nThis linear map will be used in a next PR to define the conditional expectation from L1 to L1, by using the same extension mechanism as in the Bochner integral construction.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "const_inner", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "measurable_comp", ["measure_theory", "ae_measurable'"]], ["mod", "theorem", "measurable_mk", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "condexp_L2_ae_eq_zero_of_ae_eq_zero", ["measure_theory"]], ["add", "theorem", "condexp_L2_comp_continuous_linear_map", ["measure_theory"]], ["add", "theorem", "condexp_L2_const_inner", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_ae_eq_smul", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_eq_to_span_singleton_comp", ["measure_theory"]], ["add", "def", "condexp_ind", ["measure_theory"]], ["add", "def", "condexp_ind_L1", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_add", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_disjoint_union", ["measure_theory"]], ["add", "def", "condexp_ind_L1_fin", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_add", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_ae_eq_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_disjoint_union", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_smul'", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_fin_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_of_measurable_set_of_measure_ne_top", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_of_measure_eq_top", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_of_not_measurable_set", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_smul'", ["measure_theory"]], ["add", "theorem", "condexp_ind_L1_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_ae_eq_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_disjoint_union", ["measure_theory"]], ["add", "theorem", "condexp_ind_disjoint_union_apply", ["measure_theory"]], ["add", "theorem", "condexp_ind_empty", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul'", ["measure_theory"]], ["add", "def", "condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_add", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_ae_eq_smul", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_empty", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_smul'", ["measure_theory"]], ["add", "theorem", "condexp_ind_smul_smul", ["measure_theory"]], ["add", "theorem", "continuous_condexp_ind_L1", ["measure_theory"]], ["add", "theorem", "integrable_condexp_L2_indicator", ["measure_theory"]], ["add", "theorem", "integrable_condexp_ind_smul", ["measure_theory"]], ["add", "theorem", "integral_condexp_L2_eq", ["measure_theory"]], ["add", "theorem", "integral_condexp_L2_eq_of_fin_meas_real", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_L2_indicator_le", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_L2_indicator_le_real", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_L2_le", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_condexp_ind_smul_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_L1_fin_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_L1_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_apply_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_ind_le", ["measure_theory"]], ["add", "theorem", "set_lintegral_nnnorm_condexp_L2_indicator_le", ["measure_theory"]], ["add", "theorem", "set_lintegral_nnnorm_condexp_ind_smul_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "add_comp_Lp", ["continuous_linear_map"]], ["add", "theorem", "add_comp_LpL", ["continuous_linear_map"]], ["add", "theorem", "coe_fn_comp_Lp'", ["continuous_linear_map"]], ["add", "theorem", "coe_fn_comp_LpL", ["continuous_linear_map"]], ["add", "theorem", "smul_comp_Lp", ["continuous_linear_map"]], ["add", "theorem", "smul_comp_LpL", ["continuous_linear_map"]], ["add", "theorem", "smul_comp_LpL_apply", ["continuous_linear_map"]], ["add", "theorem", "indicator_const_Lp_eq_to_span_singleton_comp_Lp", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "set_integral_comp_Lp", ["continuous_linear_map"]]]}]}, {"timestamp": 1631363018, "sha": "241ee9ee", "message": "feat(data/finsupp): more lemmas about `α →₀ ℕ` (#9137)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "le_iff'", ["finsupp"]], ["add", "theorem", "nat_add_sub_assoc", ["finsupp"]], ["add", "theorem", "nat_sub_self", ["finsupp"]], ["add", "theorem", "single_le_iff", ["finsupp"]]]}]}, {"timestamp": 1631363017, "sha": "e0093544", "message": "chore(data/mv_polynomials): golf, add a lemma (#9132)\n* add `monoid_algebra.support_mul_single`;\n* transfer a few more lemmas from `monoid_algebra` to `add_monoid_algebra`\n* add `mv_polynomial.support_mul_X`\n* reuse a proof.", "changes": [{"oldPath": "src/algebra/monoid_algebra/basic.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": [["add", "theorem", "mul_single_apply", ["add_monoid_algebra"]], ["add", "theorem", "single_mul_apply", ["add_monoid_algebra"]], ["add", "theorem", "support_mul_single", ["add_monoid_algebra"]], ["add", "theorem", "support_mul_single", ["monoid_algebra"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "support_mul_X", ["mv_polynomial"]]]}]}, {"timestamp": 1631363016, "sha": "d72119cb", "message": "feat(data/mv_polynomial/equiv): empty_equiv (#9122)", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "def", "is_empty_alg_equiv", ["mv_polynomial"]], ["add", "def", "is_empty_ring_equiv", ["mv_polynomial"]], ["del", "def", "pempty_alg_equiv", ["mv_polynomial"]], ["del", "def", "pempty_ring_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1631360890, "sha": "f318e5d6", "message": "chore(ring_theory/artinian): typo (#9140)", "changes": [{"oldPath": "src/ring_theory/artinian.lean", "newPath": "src/ring_theory/artinian.lean", "changes": [["add", "theorem", "set_has_minimal_iff_artinian", []], ["del", "theorem", "set_has_minimal_iff_artinrian", []]]}]}, {"timestamp": 1631334326, "sha": "579ca5ed", "message": "chore(combinatorics/simple_graph): rename sym to symm (#9134)\nThe naming convention for symmetry of a relation in mathlib seems to be symm, so this commit renames the axiom for the symmetry of the adjacency relation of a simple graph to this.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["mod", "theorem", "adj_comm", ["simple_graph"]], ["mod", "theorem", "adj_symm", ["simple_graph"]], ["mod", "def", "edge_set", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["mod", "theorem", "adj_symm", ["simple_graph", "subgraph"]], ["mod", "def", "edge_set", ["simple_graph", "subgraph"]]]}]}, {"timestamp": 1631334325, "sha": "919aad21", "message": "refactor(topology/path_connected): make `path` extend `C(I, X)` (#9133)", "changes": [{"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["mod", "theorem", "coe_mk", ["path"]], ["mod", "structure", "path", []]]}]}, {"timestamp": 1631334324, "sha": "84136229", "message": "chore(algebra/ordered_smul): reduce instance assumptions & delete duplicated instances (#9130)\nThese instances all assumed `semiring R` superfluously:\n* `order_dual.smul_with_zero`\n* `order_dual.mul_action`\n* `order_dual.mul_action_with_zero`\n* `order_dual.distrib_mul_action`\nand these instances were duplicates (with their `opposite.`-less counterparts):\n* `opposite.mul_zero_class.to_opposite_smul_with_zero`\n* `opposite.monoid_with_zero.to_opposite_mul_action_with_zero`\n* `opposite.semiring.to_opposite_module`", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/opposites.lean", "newPath": "src/algebra/module/opposites.lean", "changes": []}, {"oldPath": "src/algebra/ordered_smul.lean", "newPath": "src/algebra/ordered_smul.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}]}, {"timestamp": 1631334323, "sha": "2e9f708d", "message": "feat(algebra/ordered_monoid): order_embedding.mul_left (#9127)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "def", "mul_left", ["order_embedding"]], ["add", "def", "mul_right", ["order_embedding"]]]}]}, {"timestamp": 1631331980, "sha": "4c96b8a5", "message": "feat(measure_theory/measure/set_integral): new lemma integral_Union (#9093)", "changes": [{"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "has_sum_integral_Union", ["measure_theory"]], ["add", "theorem", "integral_Union", ["measure_theory"]], ["add", "theorem", "integral_finset_bUnion", ["measure_theory"]], ["add", "theorem", "integral_fintype_Union", ["measure_theory"]]]}]}, {"timestamp": 1631322502, "sha": "426227d4", "message": "chore(algebra/group/basic): add 3 `simp` attrs (#9050)", "changes": [{"oldPath": "archive/imo/imo2008_q2.lean", "newPath": "archive/imo/imo2008_q2.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "sub_add_sub_cancel", []], ["add", "theorem", "sub_sub_cancel_left", []], ["mod", "theorem", "sub_sub_sub_cancel_right", []]]}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}]}, {"timestamp": 1631305903, "sha": "e4ca1175", "message": "feat(ring_theory/algebraic): is_algebraic_of_larger_base (#9109)", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_of_larger_field", ["algebra"]]]}]}, {"timestamp": 1631299686, "sha": "7500529f", "message": "refactor(analysis/convex/basic): generalize segments to vector spaces (#9094)\n`segment` and `open_segment` are currently only defined in real vector spaces. This generalizes ℝ to arbitrary ordered_semirings in definitions and abstracts it away to the correct generality in lemmas. It also generalizes the space from `add_comm_group` to `add_comm_monoid` where possible.", "changes": [{"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": [["mod", "theorem", "mem_pos_tangent_cone_at_of_segment_subset'", []], ["mod", "theorem", "mem_pos_tangent_cone_at_of_segment_subset", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "mem_tangent_cone_of_segment_subset", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "Icc_subset_segment", []], ["add", "theorem", "Ioo_subset_open_segment", []], ["mod", "theorem", "add", ["convex"]], ["mod", "theorem", "combo_self", ["convex"]], ["mod", "theorem", "mem_Icc", ["convex"]], ["mod", "theorem", "mem_Ico", ["convex"]], ["mod", "theorem", "mem_Ioc", ["convex"]], ["mod", "theorem", "mem_Ioo", ["convex"]], ["mod", "theorem", "segment_subset", ["convex"]], ["mod", "theorem", "sub", ["convex"]], ["mod", "theorem", "convex_empty", []], ["mod", "theorem", "convex_open_segment", []], ["mod", "theorem", "convex_segment", []], ["mod", "theorem", "left_mem_open_segment_iff", []], ["mod", "theorem", "left_mem_segment", []], ["mod", "theorem", "mem_open_segment_of_ne_left_right", []], ["mod", "theorem", "mem_segment_translate", []], ["mod", "def", "open_segment", []], ["mod", "theorem", "open_segment_eq_Ioo'", []], ["mod", "theorem", "open_segment_eq_Ioo", []], ["mod", "theorem", "open_segment_image", []], ["add", "theorem", "open_segment_subset_Ioo", []], ["add", "theorem", "open_segment_subset_iff_segment_subset", []], ["mod", "theorem", "open_segment_translate_preimage", []], ["mod", "theorem", "right_mem_segment", []], ["mod", "def", "segment", []], ["mod", "theorem", "segment_eq_Icc'", []], ["mod", "theorem", "segment_eq_Icc", []], ["mod", "theorem", "segment_eq_image'", []], ["mod", "theorem", "segment_eq_image", []], ["mod", "theorem", "segment_eq_interval", []], ["mod", "theorem", "segment_image", []], ["mod", "theorem", "segment_same", []], ["add", "theorem", "segment_subset_Icc", []], ["mod", "theorem", "segment_symm", []], ["mod", "theorem", "segment_translate_image", []], ["mod", "theorem", "segment_translate_preimage", []]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}]}, {"timestamp": 1631299685, "sha": "0e014ba5", "message": "feat(combinatorics/simple_graph/adj_matrix): more lemmas (#9021)", "changes": [{"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": [["add", "def", "compl", ["matrix"]], ["add", "theorem", "compl_apply", ["matrix"]], ["add", "theorem", "compl_apply_diag", ["matrix"]], ["add", "theorem", "adj_matrix_to_graph_eq", ["matrix", "is_adj_matrix"]], ["add", "theorem", "apply_diag_ne", ["matrix", "is_adj_matrix"]], ["add", "theorem", "apply_ne_one_iff", ["matrix", "is_adj_matrix"]], ["add", "theorem", "apply_ne_zero_iff", ["matrix", "is_adj_matrix"]], ["add", "theorem", "compl", ["matrix", "is_adj_matrix"]], ["add", "def", "to_graph", ["matrix", "is_adj_matrix"]], ["add", "theorem", "to_graph_compl_eq", ["matrix", "is_adj_matrix"]], ["add", "structure", "is_adj_matrix", ["matrix"]], ["add", "theorem", "is_adj_matrix_compl", ["matrix"]], ["add", "theorem", "is_symm_compl", ["matrix"]], ["mod", "def", "adj_matrix", ["simple_graph"]], ["mod", "theorem", "adj_matrix_apply", ["simple_graph"]], ["mod", "theorem", "adj_matrix_dot_product", ["simple_graph"]], ["mod", "theorem", "adj_matrix_mul_apply", ["simple_graph"]], ["mod", "theorem", "adj_matrix_mul_self_apply_self", ["simple_graph"]], ["mod", "theorem", "adj_matrix_mul_vec_apply", ["simple_graph"]], ["mod", "theorem", "adj_matrix_mul_vec_const_apply", ["simple_graph"]], ["mod", "theorem", "adj_matrix_mul_vec_const_apply_of_regular", ["simple_graph"]], ["mod", "theorem", "adj_matrix_vec_mul_apply", ["simple_graph"]], ["mod", "theorem", "dot_product_adj_matrix", ["simple_graph"]], ["add", "theorem", "is_adj_matrix_adj_matrix", ["simple_graph"]], ["add", "theorem", "is_symm_adj_matrix", ["simple_graph"]], ["mod", "theorem", "mul_adj_matrix_apply", ["simple_graph"]], ["add", "theorem", "to_graph_adj_matrix_eq", ["simple_graph"]], ["mod", "theorem", "trace_adj_matrix", ["simple_graph"]], ["mod", "theorem", "transpose_adj_matrix", ["simple_graph"]]]}]}, {"timestamp": 1631290718, "sha": "a949b57b", "message": "feat(data/mv_polynomial): mv_polynomial.subsingleton (#9124)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1631290717, "sha": "92e7bbe9", "message": "refactor(algebra/group/units): better defeq for is_unit.unit (#9112)\nMake sure that, for `x : M` and `h : is_unit M`, then `is_unit.unit x h : M` is defeq to `x`.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}]}, {"timestamp": 1631290716, "sha": "574864d3", "message": "feat(topology/compact_open): express the compact-open topology as an Inf of topologies (#9106)\nFor `f : C(α, β)` and a set `s` in `α`, define `f.restrict s` to be the restriction of `f` as an element of `C(s, β)`. This PR then proves that the compact-open topology on `C(α, β)` is equal to the infimum of the induced compact-open topologies from the restrictions to compact sets.", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "compact_open_eq_Inf_induced", ["continuous_map"]], ["add", "theorem", "nhds_compact_open_eq_Inf_nhds_induced", ["continuous_map"]], ["add", "theorem", "tendsto_compact_open_iff_forall", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "coe_restrict", ["continuous_map"]], ["add", "def", "restrict", ["continuous_map"]]]}]}, {"timestamp": 1631290715, "sha": "d2afdc59", "message": "feat(ring_theory/dedekind_domain): add proof that `I \\sup J` is the product of `factors I \\inf factors J` for `I, J` ideals in a Dedekind Domain (#9055)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "prod_ne_zero_of_prime", ["multiset"]]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "theorem", "count_le_of_ideal_ge", []], ["add", "theorem", "factors_prod_factors_eq_factors", []], ["add", "theorem", "prod_factors_eq_self", []], ["add", "theorem", "sup_eq_prod_inf_factors", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "zero_not_mem_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1631287102, "sha": "6d2cbf9d", "message": "feat(ring_theory/artinian): Artinian modules (#9009)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/artinian.lean", "changes": [["add", "theorem", "bijective_of_injective_endomorphism", ["is_artinian"]], ["add", "theorem", "disjoint_partial_infs_eventually_top", ["is_artinian"]], ["add", "theorem", "exists_endomorphism_iterate_ker_sup_range_eq_top", ["is_artinian"]], ["add", "theorem", "finite_of_linear_independent", ["is_artinian"]], ["add", "theorem", "induction", ["is_artinian"]], ["add", "theorem", "surjective_of_injective_endomorphism", ["is_artinian"]], ["add", "theorem", "is_artinian_iff_well_founded", []], ["add", "theorem", "is_artinian_of_fg_of_artinian'", []], ["add", "theorem", "is_artinian_of_fg_of_artinian", []], ["add", "theorem", "is_artinian_of_fintype", []], ["add", "theorem", "is_artinian_of_injective", []], ["add", "theorem", "is_artinian_of_le", []], ["add", "theorem", "is_artinian_of_linear_equiv", []], ["add", "theorem", "is_artinian_of_quotient_of_artinian", []], ["add", "theorem", "is_artinian_of_range_eq_ker", []], ["add", "theorem", "is_artinian_of_submodule_of_artinian", []], ["add", "theorem", "is_artinian_of_surjective", []], ["add", "theorem", "is_artinian_of_tower", []], ["add", "theorem", "is_artinian_ring_iff", []], ["add", "theorem", "is_artinian_ring_of_ring_equiv", []], ["add", "theorem", "is_artinian_ring_of_surjective", []], ["add", "theorem", "is_artinian_span_of_finite", []], ["add", "theorem", "monotone_stabilizes_iff_artinian", []], ["add", "theorem", "is_artinian_of_zero_eq_one", ["ring"]], ["add", "theorem", "set_has_minimal_iff_artinrian", []]]}]}, {"timestamp": 1631287101, "sha": "2410c1ff", "message": "feat(topology/homotopy): Define homotopy between functions (#8947)\nMore PRs are to come, with homotopy between paths etc. So this will probably become a folder at some point, but for now I've just put it in `topology/homotopy.lean`. There's also not that much API here at the moment, more will be added later on.", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "curry_apply", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/homotopy.lean", "changes": [["add", "theorem", "apply_one", ["continuous_map", "homotopy"]], ["add", "theorem", "apply_zero", ["continuous_map", "homotopy"]], ["add", "def", "curry", ["continuous_map", "homotopy"]], ["add", "theorem", "ext", ["continuous_map", "homotopy"]], ["add", "def", "extend", ["continuous_map", "homotopy"]], ["add", "theorem", "extend_apply_one", ["continuous_map", "homotopy"]], ["add", "theorem", "extend_apply_zero", ["continuous_map", "homotopy"]], ["add", "def", "refl", ["continuous_map", "homotopy"]], ["add", "def", "symm", ["continuous_map", "homotopy"]], ["add", "theorem", "symm_apply", ["continuous_map", "homotopy"]], ["add", "theorem", "symm_symm", ["continuous_map", "homotopy"]], ["add", "theorem", "symm_trans", ["continuous_map", "homotopy"]], ["add", "theorem", "to_continuous_map_apply", ["continuous_map", "homotopy"]], ["add", "def", "trans", ["continuous_map", "homotopy"]], ["add", "theorem", "trans_apply", ["continuous_map", "homotopy"]], ["add", "structure", "homotopy", ["continuous_map"]]]}, {"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": [["add", "theorem", "coe_symm_eq", ["unit_interval"]], ["add", "theorem", "mul_pos_mem_iff", ["unit_interval"]], ["add", "theorem", "symm_symm", ["unit_interval"]], ["add", "theorem", "two_mul_sub_one_mem_iff", ["unit_interval"]]]}]}, {"timestamp": 1631279314, "sha": "5ce9280f", "message": "feat(measure_theory/integral/bochner): generalize the Bochner integral construction (#8939)\nThe construction of the Bochner integral is generalized to a process extending a set function `T : set α → (E →L[ℝ] F)` from sets to functions in L1. The integral corresponds to `T s` equal to the linear map `E →L[ℝ] E` with value `λ x, (μ s).to_real • x`.\nThe conditional expectation from L1 to L1 will be defined by taking for `T` the function `condexp_ind : set α → (E →L[ℝ] α →₁[μ] E)` defined in #8920 .", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "inv_singleton", ["set"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "to_L1_smul'", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "integral_eq_set_to_L1", ["measure_theory", "L1"]], ["add", "theorem", "integral_eq_set_to_L1s", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "dominated_fin_meas_additive_weighted_smul", ["measure_theory"]], ["add", "theorem", "integral_eq_set_to_fun", ["measure_theory"]], ["add", "theorem", "norm_weighted_smul_le", ["measure_theory"]], ["mod", "theorem", "integral_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_def", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_eq", ["measure_theory", "simple_func"]], ["mod", "theorem", "integral_sub", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_set_to_simple_func_le_integral_norm", ["measure_theory", "simple_func"]], ["mod", "def", "pos_part", ["measure_theory", "simple_func"]], ["add", "def", "weighted_smul", ["measure_theory"]], ["add", "theorem", "weighted_smul_add_measure", ["measure_theory"]], ["add", "theorem", "weighted_smul_apply", ["measure_theory"]], ["add", "theorem", "weighted_smul_congr", ["measure_theory"]], ["add", "theorem", "weighted_smul_empty", ["measure_theory"]], ["add", "theorem", "weighted_smul_null", ["measure_theory"]], ["add", "theorem", "weighted_smul_smul", ["measure_theory"]], ["add", "theorem", "weighted_smul_union", ["measure_theory"]], ["add", "theorem", "weighted_smul_zero_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "range_eq_empty_of_is_empty", ["measure_theory", "simple_func"]]]}, {"oldPath": null, "newPath": "src/measure_theory/integral/set_to_l1.lean", "changes": [["add", "def", "set_to_L1'", ["measure_theory", "L1"]], ["add", "def", "set_to_L1", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_eq_set_to_L1'", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_eq_set_to_L1s_clm", ["measure_theory", "L1"]], ["add", "theorem", "set_to_L1_smul", ["measure_theory", "L1"]], ["add", "theorem", "set_to_fun_eq_set_to_L1", ["measure_theory", "L1"]], ["add", "theorem", "norm_eq_sum_mul", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_set_to_L1s_le", ["measure_theory", "L1", "simple_func"]], ["add", "def", "set_to_L1s", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_add", ["measure_theory", "L1", "simple_func"]], ["add", "def", "set_to_L1s_clm'", ["measure_theory", "L1", "simple_func"]], ["add", "def", "set_to_L1s_clm", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_congr", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_eq_set_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_smul", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "set_to_L1s_smul_real", ["measure_theory", "L1", "simple_func"]], ["add", "def", "dominated_fin_meas_additive", ["measure_theory"]], ["add", "def", "fin_meas_additive", ["measure_theory"]], ["add", "theorem", "map_Union_fin_meas_set_eq_sum", ["measure_theory"]], ["add", "theorem", "map_empty_eq_zero_of_map_union", ["measure_theory"]], ["add", "def", "set_to_fun", ["measure_theory"]], ["add", "theorem", "set_to_fun_add", ["measure_theory"]], ["add", "theorem", "set_to_fun_congr_ae", ["measure_theory"]], ["add", "theorem", "set_to_fun_eq", ["measure_theory"]], ["add", "theorem", "set_to_fun_neg", ["measure_theory"]], ["add", "theorem", "set_to_fun_non_ae_measurable", ["measure_theory"]], ["add", "theorem", "set_to_fun_smul", ["measure_theory"]], ["add", "theorem", "set_to_fun_sub", ["measure_theory"]], ["add", "theorem", "set_to_fun_undef", ["measure_theory"]], ["add", "theorem", "set_to_fun_zero", ["measure_theory"]], ["add", "theorem", "map_set_to_simple_func", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_set_to_simple_func_le_sum_mul_norm", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_set_to_simple_func_le_sum_op_norm", ["measure_theory", "simple_func"]], ["add", "def", "set_to_simple_func", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_add", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_add_left'", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_add_left", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_congr'", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_eq_sum_filter", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_neg", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_smul", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_smul_real", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_sub", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "set_to_simple_func_zero_apply", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "measure_inter_lt_top", ["measure_theory"]], ["add", "theorem", "measure_inter_ne_top", ["measure_theory"]], ["add", "theorem", "measure_union_lt_top", ["measure_theory"]], ["add", "theorem", "measure_union_lt_top_iff", ["measure_theory"]], ["add", "theorem", "measure_union_ne_top", ["measure_theory"]]]}]}, {"timestamp": 1631279313, "sha": "56ff42bd", "message": "feat(linear_algebra/matrix/transvection): matrices are generated by transvections and diagonal matrices (#8898)\nOne version of Gauss' pivot: any matrix can be obtained starting from a diagonal matrix and doing elementary moves on rows and columns. Phrased in terms of multiplication by transvections.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": [["del", "def", "E", ["lie_algebra", "special_linear"]], ["del", "theorem", "E_apply_one", ["lie_algebra", "special_linear"]], ["del", "theorem", "E_apply_zero", ["lie_algebra", "special_linear"]], ["del", "theorem", "E_diag_zero", ["lie_algebra", "special_linear"]], ["del", "theorem", "E_trace_zero", ["lie_algebra", "special_linear"]], ["mod", "theorem", "Eb_val", ["lie_algebra", "special_linear"]]]}, {"oldPath": "src/data/matrix/basis.lean", "newPath": "src/data/matrix/basis.lean", "changes": [["add", "theorem", "apply_of_col_ne", ["matrix", "std_basis_matrix"]], ["add", "theorem", "apply_of_ne", ["matrix", "std_basis_matrix"]], ["add", "theorem", "apply_of_row_ne", ["matrix", "std_basis_matrix"]], ["add", "theorem", "apply_same", ["matrix", "std_basis_matrix"]], ["add", "theorem", "diag_zero", ["matrix", "std_basis_matrix"]], ["add", "theorem", "mul_left_apply_of_ne", ["matrix", "std_basis_matrix"]], ["add", "theorem", "mul_left_apply_same", ["matrix", "std_basis_matrix"]], ["add", "theorem", "mul_of_ne", ["matrix", "std_basis_matrix"]], ["add", "theorem", "mul_right_apply_of_ne", ["matrix", "std_basis_matrix"]], ["add", "theorem", "mul_right_apply_same", ["matrix", "std_basis_matrix"]], ["add", "theorem", "mul_same", ["matrix", "std_basis_matrix"]], ["add", "theorem", "trace_zero", ["matrix", "std_basis_matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "def", "is_two_block_diagonal", ["matrix"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "decreasing_induction'", ["nat"]], ["add", "def", "le_rec_on'", ["nat"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "to_list_none", ["option"]], ["add", "theorem", "to_list_some", ["option"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/transvection.lean", "changes": [["add", "theorem", "det_transvection_of_ne", ["matrix"]], ["add", "theorem", "diagonal_transvection_induction", ["matrix"]], ["add", "theorem", "diagonal_transvection_induction_of_det_ne_zero", ["matrix"]], ["add", "theorem", "mul_transvection_apply_of_ne", ["matrix"]], ["add", "theorem", "mul_transvection_apply_same", ["matrix"]], ["add", "theorem", "exists_is_two_block_diagonal_list_transvec_mul_mul_list_transvec", ["matrix", "pivot"]], ["add", "theorem", "exists_is_two_block_diagonal_of_ne_zero", ["matrix", "pivot"]], ["add", "theorem", "exists_list_transvec_mul_diagonal_mul_list_transvec", ["matrix", "pivot"]], ["add", "theorem", "exists_list_transvec_mul_mul_list_transvec_eq_diagonal", ["matrix", "pivot"]], ["add", "theorem", "exists_list_transvec_mul_mul_list_transvec_eq_diagonal_aux", ["matrix", "pivot"]], ["add", "theorem", "exists_list_transvec_mul_mul_list_transvec_eq_diagonal_induction", ["matrix", "pivot"]], ["add", "theorem", "is_two_block_diagonal_list_transvec_col_mul_mul_list_transvec_row", ["matrix", "pivot"]], ["add", "def", "list_transvec_col", ["matrix", "pivot"]], ["add", "theorem", "list_transvec_col_mul_last_col", ["matrix", "pivot"]], ["add", "theorem", "list_transvec_col_mul_last_row", ["matrix", "pivot"]], ["add", "theorem", "list_transvec_col_mul_last_row_drop", ["matrix", "pivot"]], ["add", "theorem", "list_transvec_col_mul_mul_list_transvec_row_last_col", ["matrix", "pivot"]], ["add", "theorem", "list_transvec_col_mul_mul_list_transvec_row_last_row", ["matrix", "pivot"]], ["add", "def", "list_transvec_row", ["matrix", "pivot"]], ["add", "theorem", "mul_list_transvec_row_last_col", ["matrix", "pivot"]], ["add", "theorem", "mul_list_transvec_row_last_col_take", ["matrix", "pivot"]], ["add", "theorem", "mul_list_transvec_row_last_row", ["matrix", "pivot"]], ["add", "theorem", "reindex_exists_list_transvec_mul_mul_list_transvec_eq_diagonal", ["matrix", "pivot"]], ["add", "def", "transvection", ["matrix"]], ["add", "theorem", "transvection_mul_apply_of_ne", ["matrix"]], ["add", "theorem", "transvection_mul_apply_same", ["matrix"]], ["add", "theorem", "transvection_mul_transvection_same", ["matrix"]], ["add", "theorem", "det_to_matrix_prod", ["matrix", "transvection_struct"]], ["add", "theorem", "inv_mul", ["matrix", "transvection_struct"]], ["add", "theorem", "mul_inv", ["matrix", "transvection_struct"]], ["add", "theorem", "mul_sum_inl_to_matrix_prod", ["matrix", "transvection_struct"]], ["add", "theorem", "prod_mul_reverse_inv_prod", ["matrix", "transvection_struct"]], ["add", "def", "reindex_equiv", ["matrix", "transvection_struct"]], ["add", "theorem", "reverse_inv_prod_mul_prod", ["matrix", "transvection_struct"]], ["add", "def", "sum_inl", ["matrix", "transvection_struct"]], ["add", "theorem", "sum_inl_to_matrix_prod_mul", ["matrix", "transvection_struct"]], ["add", "def", "to_matrix", ["matrix", "transvection_struct"]], ["add", "theorem", "to_matrix_mk", ["matrix", "transvection_struct"]], ["add", "theorem", "to_matrix_reindex_equiv", ["matrix", "transvection_struct"]], ["add", "theorem", "to_matrix_reindex_equiv_prod", ["matrix", "transvection_struct"]], ["add", "theorem", "to_matrix_sum_inl", ["matrix", "transvection_struct"]], ["add", "structure", "transvection_struct", ["matrix"]], ["add", "theorem", "transvection_zero", ["matrix"]], ["add", "theorem", "update_row_eq_transvection", ["matrix"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}]}, {"timestamp": 1631271216, "sha": "a057a8e9", "message": "feat(ring_theory/norm): `norm R x = 0 ↔ x = 0` (#9042)\nNonzero values of `S / R` have nonzero norm over `R`.", "changes": [{"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["mod", "theorem", "norm_apply", ["algebra"]], ["add", "theorem", "norm_eq_zero_iff'", ["algebra"]], ["add", "theorem", "norm_eq_zero_iff", ["algebra"]], ["add", "theorem", "norm_eq_zero_iff_of_basis", ["algebra"]], ["add", "theorem", "norm_ne_zero_iff_of_basis", ["algebra"]]]}]}, {"timestamp": 1631258303, "sha": "37e17c5d", "message": "feat(measure_theory/integral/lebesgue): add some lintegral lemmas (#9064)\nThis PR contains some lemmas useful for #9065.", "changes": [{"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_eq_top_of_measure_eq_top_pos", ["measure_theory"]], ["del", "theorem", "lintegral_in_measure_zero", ["measure_theory"]], ["add", "theorem", "set_lintegral_empty", ["measure_theory"]], ["add", "theorem", "set_lintegral_eq_const", ["measure_theory"]], ["add", "theorem", "set_lintegral_measure_zero", ["measure_theory"]], ["add", "theorem", "set_lintegral_univ", ["measure_theory"]]]}]}, {"timestamp": 1631258302, "sha": "ae86776f", "message": "feat(measure_theory/measure/vector_measure): define mutually singular for vector measures (#8896)", "changes": [{"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": [["add", "theorem", "absolutely_continuous_ennreal_iff", ["measure_theory", "signed_measure"]], ["del", "theorem", "absolutely_continuous_iff", ["measure_theory", "signed_measure"]], ["add", "theorem", "mutually_singular_ennreal_iff", ["measure_theory", "signed_measure"]], ["add", "theorem", "mutually_singular_iff", ["measure_theory", "signed_measure"]], ["add", "theorem", "null_of_total_variation_zero", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "add_left", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "add_right", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "mk", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "smul_left", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "smul_right", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "symm", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "zero_left", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "theorem", "zero_right", ["measure_theory", "vector_measure", "mutually_singular"]], ["add", "def", "mutually_singular", ["measure_theory", "vector_measure"]]]}]}, {"timestamp": 1631240207, "sha": "aec02d88", "message": "chore(scripts): update nolints.txt (#9126)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1631218355, "sha": "4d88ae8e", "message": "feat(tactic/lint): better fails_quickly linter (#8932)\nThis linter catches a lot more loops.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}, {"oldPath": "test/lint_coe_t.lean", "newPath": "test/lint_coe_t.lean", "changes": []}]}, {"timestamp": 1631210319, "sha": "138d98b1", "message": "feat(ring_theory/mv_polynomial): linear_independent_X (#9118)", "changes": [{"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": [["add", "theorem", "linear_independent_X", ["mv_polynomial"]]]}]}, {"timestamp": 1631204033, "sha": "b9fcf9b1", "message": "feat(linear_algebra/matrix/nonsingular_inverse): adjugate_mul_distrib (#8682)\nWe prove that the adjugate of a matrix distributes over the product. To do so, a separate file \n`linear_algebra.matrix.polynomial` states some general facts about the polynomial `det (t I + A)`.", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "adjugate_mul_distrib", ["matrix"]], ["add", "theorem", "adjugate_pow", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/polynomial.lean", "changes": [["add", "theorem", "coeff_det_X_add_C_card", ["polynomial"]], ["add", "theorem", "coeff_det_X_add_C_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_det_X_one_add_C", ["polynomial"]], ["add", "theorem", "nat_degree_det_X_add_C_le", ["polynomial"]]]}]}, {"timestamp": 1631196632, "sha": "2331607e", "message": "feat(group_theory/sub{monoid,group}): pointwise actions on `add_sub{monoid,group}`s and `sub{monoid,group,module,semiring,ring,algebra}`s (#8945)\nThis adds the pointwise actions characterized by `↑(m • S) = (m • ↑S : set R)` on:\n* `submonoid`\n* `subgroup`\n* `add_submonoid`\n* `add_subgroup`\n* `submodule` ([Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Lost.20instance/near/249467913))\n* `subsemiring`\n* `subring`\n* `subalgebra`\nwithin the locale `pointwise` (which must be open to state the RHS of the characterization above anyway).", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["subalgebra"]], ["add", "theorem", "map_id", ["subalgebra"]], ["add", "theorem", "map_map", ["subalgebra"]], ["add", "theorem", "pointwise_smul_to_submodule", ["subalgebra"]], ["add", "theorem", "pointwise_smul_to_subring", ["subalgebra"]], ["add", "theorem", "pointwise_smul_to_subsemiring", ["subalgebra"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subalgebra"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["subring"]], ["add", "theorem", "pointwise_smul_to_add_subgroup", ["subring"]], ["add", "theorem", "pointwise_smul_to_subsemiring", ["subring"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subring"]], ["add", "theorem", "coe_pointwise_smul", ["subsemiring"]], ["add", "theorem", "pointwise_smul_to_add_submonoid", ["subsemiring"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subsemiring"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "def", "to_monoid_End", ["mul_distrib_mul_action"]], ["del", "theorem", "to_monoid_hom_one", ["mul_distrib_mul_action"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["add_subgroup"]], ["add", "theorem", "pointwise_smul_to_add_submonoid", ["add_subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul", ["add_subgroup"]], ["add", "theorem", "coe_pointwise_smul", ["subgroup"]], ["add", "theorem", "pointwise_smul_to_submonoid", ["subgroup"]], ["add", "theorem", "smul_mem_pointwise_smul", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["add_submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul", ["add_submonoid"]], ["add", "theorem", "coe_pointwise_smul", ["submonoid"]], ["add", "theorem", "smul_mem_pointwise_smul", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_pointwise_smul", ["submodule"]], ["add", "theorem", "pointwise_smul_to_add_subgroup", ["submodule"]], ["add", "theorem", "pointwise_smul_to_add_submonoid", ["submodule"]], ["add", "theorem", "smul_le_self_of_tower", ["submodule"]], ["add", "theorem", "smul_mem_pointwise_smul", ["submodule"]]]}]}, {"timestamp": 1631192062, "sha": "18256711", "message": "feat(ring_theory/unique_factorization_domain): add lemma that a member of `factors a` divides `a` (#9108)", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "dvd_of_mem_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1631180190, "sha": "e597b75c", "message": "feat(algebra/algebra/subalgebra): mem_under (#9107)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "mem_under", ["subalgebra"]]]}]}, {"timestamp": 1631180189, "sha": "694da7e2", "message": "feat(ring_theory): the surjective image of a PID is a PID (#9069)\nIf the preimage of an ideal/submodule under a surjective map is principal, so is the original ideal. Therefore, the image of a principal ideal domain under a surjective ring hom is again a PID.", "changes": [{"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "of_comap", ["ideal", "is_principal"]], ["add", "theorem", "span_singleton_generator", ["ideal"]], ["add", "theorem", "of_surjective", ["is_principal_ideal_ring"]], ["add", "theorem", "of_comap", ["submodule", "is_principal"]]]}]}, {"timestamp": 1631180188, "sha": "13563978", "message": "refactor(linear_algebra/*): linear_equiv.of_bijective over semirings (#9061)\n`linear_equiv.of_injective` and `linear_equiv.of_bijective`\ntook as assumption `f.ker = \\bot`,\nwhich is equivalent to injectivity of `f` over rings,\nbut not over semirings.\nThis PR changes the assumption to `injective f`.\nFor reasons of symmetry,\nthe surjectivity assumption is also switched to `surjective f`.\nAs a consequence, this PR also renames:\n* `linear_equiv_of_ker_eq_bot` to `linear_equiv_of_injective`\n* `linear_equiv_of_ker_eq_bot_apply` to `linear_equiv_of_injective_apply`", "changes": [{"oldPath": "src/algebra/category/Module/subobject.lean", "newPath": "src/algebra/category/Module/subobject.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "arrow_congr", ["linear_equiv"]], ["mod", "theorem", "arrow_congr_apply", ["linear_equiv"]], ["mod", "theorem", "arrow_congr_symm_apply", ["linear_equiv"]], ["mod", "theorem", "of_injective_apply", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "ker_eq_bot", ["bilin_form", "nondegenerate"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "coe_of_injective_endo", ["linear_equiv"]], ["mod", "theorem", "of_injective_endo_left_inv", ["linear_equiv"]], ["mod", "theorem", "of_injective_endo_right_inv", ["linear_equiv"]], ["add", "theorem", "linear_equiv_of_injective_apply", ["linear_map"]], ["del", "theorem", "linear_equiv_of_ker_eq_bot_apply", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1631172729, "sha": "f6ccb6b8", "message": "chore(ring_theory/polynomial/cyclotomic): golf+remove `nontrivial` (#9090)", "changes": [{"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["del", "theorem", "irreducible", ["cyclotomic"]], ["del", "theorem", "cyclotomic_eq_minpoly", []], ["del", "theorem", "minpoly_primitive_root_dvd_cyclotomic", []], ["add", "theorem", "irreducible", ["polynomial", "cyclotomic"]], ["mod", "theorem", "cyclotomic_eq_X_pow_sub_one_div", ["polynomial"]], ["mod", "theorem", "cyclotomic_eq_geom_sum", ["polynomial"]], ["add", "theorem", "cyclotomic_eq_minpoly", ["polynomial"]], ["mod", "theorem", "eq_cyclotomic_iff", ["polynomial"]], ["add", "theorem", "int_coeff_of_cyclotomic'", ["polynomial"]], ["del", "theorem", "int_coeff_of_cyclotomic", ["polynomial"]], ["add", "theorem", "minpoly_primitive_root_dvd_cyclotomic", ["polynomial"]]]}]}, {"timestamp": 1631172728, "sha": "90475a9b", "message": "refactor(data/matrix): put std_basis_matrix in its own file (#9088)\nThe authors here are recovered from the git history.\nI've avoided the temptation to generalize typeclasses in this PR; the lemmas are copied to this file unmodified.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "theorem", "matrix_eq_sum_std_basis", ["matrix"]], ["del", "theorem", "smul_std_basis_matrix", ["matrix"]], ["del", "theorem", "std_basis_eq_basis_mul_basis", ["matrix"]], ["del", "def", "std_basis_matrix", ["matrix"]], ["del", "theorem", "std_basis_matrix_add", ["matrix"]], ["del", "theorem", "std_basis_matrix_zero", ["matrix"]]]}, {"oldPath": null, "newPath": "src/data/matrix/basis.lean", "changes": [["add", "theorem", "matrix_eq_sum_std_basis", ["matrix"]], ["add", "theorem", "smul_std_basis_matrix", ["matrix"]], ["add", "theorem", "std_basis_eq_basis_mul_basis", ["matrix"]], ["add", "def", "std_basis_matrix", ["matrix"]], ["add", "theorem", "std_basis_matrix_add", ["matrix"]], ["add", "theorem", "std_basis_matrix_zero", ["matrix"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1631172727, "sha": "95689775", "message": "fix(group_theory/group_action): generalize assumptions on `ite_smul` and `smul_ite` (#9085)", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}]}, {"timestamp": 1631172726, "sha": "3e10324f", "message": "feat(data/polynomial/taylor): Taylor expansion of polynomials (#9000)", "changes": [{"oldPath": "src/data/polynomial/hasse_deriv.lean", "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/polynomial/taylor.lean", "changes": [["add", "theorem", "eq_zero_of_hasse_deriv_eq_zero", ["polynomial"]], ["add", "def", "taylor", ["polynomial"]], ["add", "theorem", "taylor_C", ["polynomial"]], ["add", "theorem", "taylor_X", ["polynomial"]], ["add", "theorem", "taylor_apply", ["polynomial"]], ["add", "theorem", "taylor_coeff", ["polynomial"]], ["add", "theorem", "taylor_coeff_one", ["polynomial"]], ["add", "theorem", "taylor_coeff_zero", ["polynomial"]], ["add", "theorem", "taylor_eval", ["polynomial"]], ["add", "theorem", "taylor_eval_sub", ["polynomial"]], ["add", "theorem", "taylor_injective", ["polynomial"]], ["add", "theorem", "taylor_one", ["polynomial"]]]}]}, {"timestamp": 1631168353, "sha": "e336caf0", "message": "chore(algebra/floor): add a trivial lemma (#9098)\n* add `nat_ceil_eq_zero`;\n* add `@[simp]` to `nat_ceil_le`.", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "nat_ceil_eq_zero", []], ["mod", "theorem", "nat_ceil_le", []]]}]}, {"timestamp": 1631160065, "sha": "796efae2", "message": "feat(data/real/sqrt): `nnreal.coe_sqrt` and `nnreal.sqrt_eq_rpow` (#9025)\nAlso rename a few lemmas:\n* `nnreal.mul_sqrt_self` -> `nnreal.mul_self_sqrt` to follow `real.mul_self_sqrt`\n* `real.sqrt_le` -> `real.sqrt_le_sqrt_iff`\n* `real.sqrt_lt` -> `real.sqrt_lt_sqrt_iff`\nand provide a few more for commodity:\n* `nnreal.sqrt_sq`\n* `nnreal.sq_sqrt`\n* `real.sqrt_lt_sqrt`\n* `real.sqrt_lt_sqrt_iff_of_pos`\n* `nnreal.sqrt_le_sqrt_iff`\n* `nnreal.sqrt_lt_sqrt_iff`\nCloses #8016", "changes": [{"oldPath": "archive/imo/imo2008_q3.lean", "newPath": "archive/imo/imo2008_q3.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "sqrt_eq_rpow", ["nnreal"]], ["mod", "theorem", "sqrt_eq_rpow", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["add", "theorem", "mul_self_sqrt", ["nnreal"]], ["del", "theorem", "mul_sqrt_self", ["nnreal"]], ["add", "theorem", "sq_sqrt", ["nnreal"]], ["add", "theorem", "sqrt_le_sqrt_iff", ["nnreal"]], ["add", "theorem", "sqrt_lt_sqrt_iff", ["nnreal"]], ["add", "theorem", "sqrt_sq", ["nnreal"]], ["add", "theorem", "coe_sqrt", ["real"]], ["mod", "theorem", "sq_sqrt", ["real"]], ["del", "theorem", "sqrt_le", ["real"]], ["add", "theorem", "sqrt_le_sqrt_iff", ["real"]], ["del", "theorem", "sqrt_lt", ["real"]], ["add", "theorem", "sqrt_lt_sqrt", ["real"]], ["add", "theorem", "sqrt_lt_sqrt_iff", ["real"]], ["add", "theorem", "sqrt_lt_sqrt_iff_of_pos", ["real"]]]}]}, {"timestamp": 1631156359, "sha": "15b6c56a", "message": "refactor(category_theory/limits/types): Refactor filtered colimits. (#9100)\n- Rename `filtered_colimit.r` into `filtered_colimit.rel`, to match up with `quot.rel`,\n- Rename lemma `r_ge`,\n- Abstract out lemma `eqv_gen_quot_rel_of_rel` from later proof.", "changes": [{"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "eqv_gen_quot_rel_of_rel", ["category_theory", "limits", "types", "filtered_colimit"]], ["mod", "theorem", "is_colimit_eq_iff", ["category_theory", "limits", "types", "filtered_colimit"]], ["add", "theorem", "rel_of_quot_rel", ["category_theory", "limits", "types", "filtered_colimit"]]]}]}, {"timestamp": 1631153384, "sha": "cfc6b48a", "message": "chore(scripts): update nolints.txt (#9105)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1631145626, "sha": "49cf3869", "message": "feat(measure_theory/measure/vector_measure): add `absolutely_continuous.add` and `absolutely_continuous.smul` (#9086)", "changes": [{"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "add", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "neg_left", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "neg_right", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "smul", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "sub", ["measure_theory", "vector_measure", "absolutely_continuous"]]]}]}, {"timestamp": 1631137667, "sha": "87e7a0c7", "message": "feat(linear_algebra/matrix): `M` maps some `v ≠ 0` to zero iff `det M = 0` (#9041)\nA result I have wanted for a long time: the two notions of a \"singular\" matrix are equivalent over an integral domain. Namely, a matrix `M` is singular iff it maps some nonzero vector to zero, which happens iff its determinant is zero.\nHere, I find such a `v` by going through the field of fractions, where everything is a lot easier because all injective endomorphisms are automorphisms. Maybe a bit overkill (and unsatisfying constructively), but it works and is a lot nicer to write out than explicitly finding an element of the kernel.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "dot_product_mul_vec", ["matrix"]], ["add", "theorem", "dot_product_single", ["matrix"]], ["add", "theorem", "mul_vec_smul", ["matrix"]], ["add", "theorem", "single_dot_product", ["matrix"]], ["add", "theorem", "vec_mul_smul", ["matrix"]], ["add", "theorem", "map_dot_product", ["ring_hom"]], ["add", "theorem", "map_mul_vec", ["ring_hom"]], ["add", "theorem", "map_vec_mul", ["ring_hom"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "to_bilin'", ["matrix", "nondegenerate"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "det_ne_zero_of_left_inverse", ["matrix"]], ["add", "theorem", "det_ne_zero_of_right_inverse", ["matrix"]], ["add", "theorem", "eq_zero_of_mul_vec_eq_zero", ["matrix"]], ["add", "theorem", "eq_zero_of_vec_mul_eq_zero", ["matrix"]], ["add", "theorem", "eq_zero_of_ortho", ["matrix", "nondegenerate"]], ["add", "theorem", "exists_not_ortho_of_ne_zero", ["matrix", "nondegenerate"]], ["add", "def", "nondegenerate", ["matrix"]], ["mod", "theorem", "nondegenerate_of_det_ne_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "ker_to_lin'_eq_bot_iff", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": [["add", "theorem", "exists_mul_vec_eq_zero_iff", ["matrix"]], ["add", "theorem", "exists_mul_vec_eq_zero_iff_aux", ["matrix"]], ["add", "theorem", "exists_vec_mul_eq_zero_iff", ["matrix"]], ["add", "theorem", "nondegenerate_iff_det_ne_zero", ["matrix"]]]}]}, {"timestamp": 1631134922, "sha": "ab0a2959", "message": "feat(linear_algebra/matrix): some bounds on the determinant of matrices (#9029)\nThis PR shows that matrices with bounded entries also have bounded determinants.\n`matrix.det_le` is the most generic version of these results, which we specialise in two steps to `matrix.det_sum_smul_le`. In a follow-up PR we will connect this to `algebra.left_mul_matrix` to provide an upper bound on `algebra.norm`.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/matrix/absolute_value.lean", "changes": [["add", "theorem", "det_le", ["matrix"]], ["add", "theorem", "det_sum_le", ["matrix"]], ["add", "theorem", "det_sum_smul_le", ["matrix"]]]}]}, {"timestamp": 1631123443, "sha": "4222c322", "message": "lint(testing/slim_check/*): break long lines (#9091)", "changes": [{"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": [["mod", "def", "minimize", ["slim_check"]], ["mod", "def", "minimize_aux", ["slim_check"]], ["mod", "def", "check", ["slim_check", "testable"]]]}]}, {"timestamp": 1631123442, "sha": "56a59d3e", "message": "feat(data/polynomial/hasse_deriv): Hasse derivatives (#8998)", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "def", "lsum", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/hasse_deriv.lean", "changes": [["add", "theorem", "factorial_smul_hasse_deriv", ["polynomial"]], ["add", "def", "hasse_deriv", ["polynomial"]], ["add", "theorem", "hasse_deriv_C", ["polynomial"]], ["add", "theorem", "hasse_deriv_X", ["polynomial"]], ["add", "theorem", "hasse_deriv_apply", ["polynomial"]], ["add", "theorem", "hasse_deriv_apply_one", ["polynomial"]], ["add", "theorem", "hasse_deriv_coeff", ["polynomial"]], ["add", "theorem", "hasse_deriv_comp", ["polynomial"]], ["add", "theorem", "hasse_deriv_monomial", ["polynomial"]], ["add", "theorem", "hasse_deriv_mul", ["polynomial"]], ["add", "theorem", "hasse_deriv_one'", ["polynomial"]], ["add", "theorem", "hasse_deriv_one", ["polynomial"]], ["add", "theorem", "hasse_deriv_zero'", ["polynomial"]], ["add", "theorem", "hasse_deriv_zero", ["polynomial"]]]}]}, {"timestamp": 1631123441, "sha": "42dda89e", "message": "feat(ring_theory/discrete_valuation_ring): is_Hausdorff (#8994)\nDiscrete valuation rings are Hausdorff in the algebraic sense\nthat the intersection of all powers of the maximal ideal is 0.", "changes": [{"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["add", "theorem", "add_val_pow", ["irreducible"]], ["add", "theorem", "maximal_ideal_eq", ["irreducible"]]]}]}, {"timestamp": 1631117193, "sha": "f4f1cd3f", "message": "feat(algebra/module/ordered): simple `smul` lemmas (#9077)\nThese are the negative versions of the lemmas in `ordered_smul`, which suggests that both files should be merged.\nNote however that, contrary to those, they need `module k M` instead of merely `smul_with_zero k M`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "neg_smul_neg", []]]}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": [["add", "theorem", "eq_of_smul_eq_smul_of_neg_of_le", []], ["add", "theorem", "lt_of_smul_lt_smul_of_nonpos", []], ["add", "theorem", "lt_smul_iff_of_neg", []], ["mod", "theorem", "smul_le_smul_iff_of_neg", []], ["add", "theorem", "smul_le_smul_of_nonpos", []], ["add", "theorem", "smul_lt_iff_of_neg", []], ["add", "theorem", "smul_lt_smul_iff_of_neg", []], ["add", "theorem", "smul_lt_smul_of_neg", []], ["add", "theorem", "smul_neg_iff_of_neg", []], ["add", "theorem", "smul_neg_iff_of_pos", []], ["add", "theorem", "smul_pos_iff_of_neg", []]]}, {"oldPath": "src/algebra/ordered_smul.lean", "newPath": "src/algebra/ordered_smul.lean", "changes": [["add", "theorem", "lt_smul_iff_of_pos", []]]}]}, {"timestamp": 1631117191, "sha": "76ab749e", "message": "feat(analysis/normed_space/operator_norm): variants of continuous_linear_map.lsmul and their properties (#8984)", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "norm_to_span_singleton", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_add", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_apply", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_smul'", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_smul", ["continuous_linear_map"]]]}]}, {"timestamp": 1631109664, "sha": "146dddc3", "message": "feat(measure_theory/group/arithmetic): add more to_additive attributes for actions (#9032)\nIntroduce additivised versions of some more smul classes and corresponding instances and lemmas for different types of (measurable) additive actions.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["del", "theorem", "vadd_apply", ["pi"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["mod", "theorem", "smul_apply", ["pi"]]]}, {"oldPath": "src/measure_theory/group/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": [["add", "theorem", "add_haar_measure_apply", ["measure_theory", "measure"]]]}]}, {"timestamp": 1631109663, "sha": "99b70d9e", "message": "feat(data/(fin)set/basic): `image` and `mem` lemmas (#9031)\nI rename `set.mem_image_of_injective` to `function.injective.mem_set_image_iff` to allow dot notation and fit the new `function.injective.mem_finset_image_iff`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "mem_finset_image", ["function", "injective"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "mem_set_image", ["function", "injective"]], ["del", "theorem", "mem_image_of_injective", ["set"]], ["add", "theorem", "mem_iff_nonempty", ["subsingleton"]], ["add", "theorem", "coe_image_of_subset", ["subtype"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_iff_subset_compl_left", ["set"]], ["add", "theorem", "disjoint_iff_subset_compl_right", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}]}, {"timestamp": 1631109661, "sha": "3d31c2dd", "message": "chore(linear_algebra/affine_space/independent): allow dot notation on affine_independent (#8974)\nThis renames a few lemmas to make dot notation on `affine_independent` possible.", "changes": [{"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "exists_unique_dist_eq", ["affine_independent"]], ["del", "theorem", "exists_unique_dist_eq_of_affine_independent", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "affine_span_eq_of_le_of_card_eq_finrank_add_one", ["affine_independent"]], ["add", "theorem", "affine_span_eq_top_of_card_eq_finrank_add_one", ["affine_independent"]], ["add", "theorem", "affine_span_image_finset_eq_of_le_of_card_eq_finrank_add_one", ["affine_independent"]], ["add", "theorem", "finrank_vector_span", ["affine_independent"]], ["add", "theorem", "finrank_vector_span_image_finset", ["affine_independent"]], ["add", "theorem", "vector_span_eq_of_le_of_card_eq_finrank_add_one", ["affine_independent"]], ["add", "theorem", "vector_span_eq_top_of_card_eq_finrank_add_one", ["affine_independent"]], ["add", "theorem", "vector_span_image_finset_eq_of_le_of_card_eq_finrank_add_one", ["affine_independent"]], ["del", "theorem", "affine_span_eq_of_le_of_affine_independent_of_card_eq_finrank_add_one", []], ["del", "theorem", "affine_span_eq_top_of_affine_independent_of_card_eq_finrank_add_one", []], ["del", "theorem", "affine_span_image_finset_eq_of_le_of_affine_independent_of_card_eq_finrank_add_one", []], ["del", "theorem", "finrank_vector_span_image_finset_of_affine_independent", []], ["del", "theorem", "finrank_vector_span_of_affine_independent", []], ["del", "theorem", "vector_span_eq_of_le_of_affine_independent_of_card_eq_finrank_add_one", []], ["del", "theorem", "vector_span_eq_top_of_affine_independent_of_card_eq_finrank_add_one", []], ["del", "theorem", "vector_span_image_finset_eq_of_le_of_affine_independent_of_card_eq_finrank_add_one", []]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_span_disjoint_of_disjoint", ["affine_independent"]], ["add", "theorem", "comp_embedding", ["affine_independent"]], ["add", "theorem", "exists_mem_inter_of_exists_mem_inter_affine_span", ["affine_independent"]], ["add", "theorem", "not_mem_affine_span_diff", ["affine_independent"]], ["add", "theorem", "of_set_of_injective", ["affine_independent"]], ["del", "theorem", "affine_independent_embedding_of_affine_independent", []], ["del", "theorem", "affine_independent_of_affine_independent_set_of_injective", []], ["del", "theorem", "affine_independent_of_subset_affine_independent", []], ["del", "theorem", "affine_independent_set_of_affine_independent", []], ["del", "theorem", "affine_independent_subtype_of_affine_independent", []], ["del", "theorem", "affine_span_disjoint_of_disjoint_of_affine_independent", []], ["del", "theorem", "exists_mem_inter_of_exists_mem_inter_affine_span_of_affine_independent", []], ["del", "theorem", "injective_of_affine_independent", []], ["del", "theorem", "mem_affine_span_iff_mem_of_affine_independent", []], ["del", "theorem", "not_mem_affine_span_diff_of_affine_independent", []]]}]}, {"timestamp": 1631109659, "sha": "7a2ccb6a", "message": "feat(group_theory/group_action): Extract a smaller typeclass out of `mul_semiring_action` (#8918)\nThis new typeclass, `mul_distrib_mul_action`, is satisfied by conjugation actions. This PR provides instances for:\n* `mul_aut`\n* `prod` of two types with a `mul_distrib_mul_action`\n* `pi` of types with a `mul_distrib_mul_action`\n* `units` of types with a `mul_distrib_mul_action`\n* `ulift` of types with a `mul_distrib_mul_action`\n* `opposite` of types with a `mul_distrib_mul_action`\n* `sub(monoid|group|semiring|ring)`s of types with a `mul_distrib_mul_action`\n* anything already satisfying a `mul_semiring_action`", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "theorem", "smul_prod", ["list"]], ["add", "def", "to_mul_equiv", ["mul_distrib_mul_action"]], ["del", "theorem", "smul_prod", ["multiset"]], ["add", "theorem", "smul_inv''", []], ["del", "theorem", "smul_inv'", []], ["del", "theorem", "smul_mul'", []], ["del", "theorem", "smul_pow", []], ["del", "theorem", "smul_prod", []]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "smul_prod", ["finset"]], ["add", "theorem", "smul_prod", ["list"]], ["add", "theorem", "smul_prod", ["multiset"]], ["add", "theorem", "smul_pow", []]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "def", "comp_hom", ["mul_distrib_mul_action"]], ["add", "def", "to_monoid_hom", ["mul_distrib_mul_action"]], ["add", "theorem", "to_monoid_hom_apply", ["mul_distrib_mul_action"]], ["add", "theorem", "to_monoid_hom_one", ["mul_distrib_mul_action"]], ["add", "theorem", "smul_div'", []], ["add", "theorem", "smul_inv'", []], ["add", "theorem", "smul_mul'", []]]}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1631109658, "sha": "4c7d95fb", "message": "feat(analysis/normed_space/inner_product): reflections API (#8884)\nReflections, as isometries of an inner product space, were defined in #8660. In this PR, various elementary lemmas filling out the API:\n- Lemmas about reflection through a subspace K, of a point which is in (i) K itself; (ii) the orthogonal complement of K.\n- Lemmas relating the orthogonal projection/reflection on the `submodule.map` of a subspace, with the orthogonal projection/reflection on the original subspace.\n- Lemma characterizing the reflection in the trivial subspace.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "orthogonal_projection_eq_self_iff", []], ["add", "theorem", "orthogonal_projection_map_apply", []], ["add", "theorem", "reflection_bot", []], ["add", "theorem", "reflection_eq_self_iff", []], ["add", "theorem", "reflection_map", []], ["add", "theorem", "reflection_map_apply", []], ["add", "theorem", "reflection_mem_subspace_eq_self", []], ["add", "theorem", "reflection_mem_subspace_orthogonal_complement_eq_neg", []], ["add", "theorem", "reflection_mem_subspace_orthogonal_precomplement_eq_neg", []], ["add", "theorem", "reflection_orthogonal_complement_singleton_eq_neg", []]]}]}, {"timestamp": 1631103354, "sha": "71df310f", "message": "chore(*): remove instance binders in exists, for mathport (#9083)\nPer @digama0's request at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Instance.20binders.20in.20exists.\nInstance binders under an \"Exists\" aren't allowed in Lean4, so we're backport removing them. I've just turned relevant `[X]` binders into `(_ : X)` binders, and it seems to all still work. (i.e. the instance binders weren't actually doing anything).\nIt turns out two of the problem binders were in `infi` or `supr`, not `Exists`, but I treated them the same way.", "changes": [{"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}, {"oldPath": "src/category_theory/essentially_small.lean", "newPath": "src/category_theory/essentially_small.lean", "changes": []}, {"oldPath": "src/combinatorics/hales_jewett.lean", "newPath": "src/combinatorics/hales_jewett.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/order/extension.lean", "newPath": "src/order/extension.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["mod", "theorem", "iff_quotient_mv_polynomial'", ["algebra", "finite_presentation"]], ["mod", "theorem", "iff_quotient_mv_polynomial'", ["algebra", "finite_type"]]]}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1631103353, "sha": "31081533", "message": "feat(linear_algebra/affine_space/independent): homotheties preserve affine independence (#9070)", "changes": [{"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_independent_iff", ["affine_equiv"]], ["add", "theorem", "homothety_affine_independent_iff", ["affine_map"]]]}]}, {"timestamp": 1631103352, "sha": "e4e07eab", "message": "feat(ring_theory): `map f (span s) = span (f '' s)` (#9068)\nWe already had this for submodules and linear maps, here it is for ideals and ring homs.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "submodule_span_eq", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "map_span", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1631103350, "sha": "aae2b371", "message": "feat(field_theory/separable): a finite field extension in char 0 is separable (#9066)", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}]}, {"timestamp": 1631103349, "sha": "157e99d0", "message": "feat(ring_theory): PIDs are Dedekind domains (#9063)\nWe had all the ingredients ready for a while, apparently I just forgot to PR the instance itself.\nCo-Authored-By: Ashvni \nCo-Authored-By: Filippo A. E. Nuccio ", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}]}, {"timestamp": 1631103348, "sha": "c3f2c237", "message": "feat(analysis/convex/basic): the affine image of the convex hull is the convex hull of the affine image (#9057)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "image_convex_hull", ["affine_map"]]]}]}, {"timestamp": 1631103346, "sha": "57a0789b", "message": "chore(topology/order): relate Sup and Inf of topologies to `generate_from` (#9045)\nSince there is a Galois insertion between `generate_from : set (set α) → topological_space α` and the \"forgetful functor\" `topological_space α → set (set α)`, all kinds of lemmas about the interaction of `generate_from` and the ordering on topologies automatically follow. But it is hard to use the Galois insertion lemmas directly, because the Galois insertion is actually provided for the dual order on topologies, which confuses Lean. Here we re-state most of the Galois insertion API in this special case.", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "generate_from_Inter", []], ["add", "theorem", "generate_from_Inter_of_generate_from_eq_self", []], ["add", "theorem", "generate_from_Union", []], ["add", "theorem", "generate_from_Union_is_open", []], ["add", "theorem", "generate_from_inter", []], ["add", "theorem", "generate_from_sUnion", []], ["add", "theorem", "generate_from_set_of_is_open", []], ["add", "theorem", "generate_from_surjective", []], ["add", "theorem", "generate_from_union", []], ["add", "theorem", "generate_from_union_is_open", []], ["add", "theorem", "is_open_implies_is_open_iff", []], ["add", "theorem", "left_inverse_generate_from", []], ["add", "theorem", "set_of_is_open_Sup", []], ["add", "theorem", "set_of_is_open_injective", []], ["add", "theorem", "set_of_is_open_sup", []], ["add", "theorem", "set_of_is_open_supr", []]]}]}, {"timestamp": 1631103345, "sha": "a8c5c5a5", "message": "feat(algebra/module/basic): add `module.to_add_monoid_End` (#8968)\nI also removed `smul_add_hom_one` since it's a special case of the ring_hom.\nI figured I'd replace a `simp` with a `rw` when fixing `finsupp.to_free_abelian_group_comp_to_finsupp` for this removal.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "def", "to_add_monoid_End", ["module"]], ["del", "theorem", "smul_add_hom_one", []]]}, {"oldPath": "src/group_theory/free_abelian_group_finsupp.lean", "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": []}]}, {"timestamp": 1631096738, "sha": "4e8d9666", "message": "feat(algebra/subalgebra): add missing actions by and on subalgebras (#9081)\nFor `S : subalgebra R A`, this adds the instances:\n* for actions on subalgebras (generalizing the existing `algebra R S`):\n * `module R' S`\n * `algebra R' S`\n * `is_scalar_tower R' R S`\n* for actions by subalgebras (generalizing the existing `algebra S α`):\n * `mul_action S α`\n * `smul_comm_class S α β`\n * `smul_comm_class α S β`\n * `is_scalar_tower S α β`\n * `has_faithful_scalar S α`\n * `distrib_mul_action S α`\n * `module S α`\nThis also removes the commutativity requirement on `A` for the `no_zero_smul_divisors S A` instance.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["mod", "theorem", "coe_algebra_map", ["subalgebra"]], ["mod", "theorem", "coe_smul", ["subalgebra"]], ["add", "theorem", "smul_def", ["subalgebra"]]]}]}, {"timestamp": 1631096737, "sha": "585c5add", "message": "feat(data/finset): monotone maps preserve the maximum of a finset (#9035)", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "max'_image", ["finset"]], ["add", "theorem", "min'_image", ["finset"]]]}]}, {"timestamp": 1631089391, "sha": "fc75aea8", "message": "feat(topology/algebra/ordered): `{prod,pi}.order_closed_topology` (#9073)", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}]}, {"timestamp": 1631089390, "sha": "8341d165", "message": "feat(linear_algebra/finite_dimensional): make finite_dimensional_bot an instance (#9053)\nThis was previously made into a local instance in several places, but there appears to be no reason it can't be a global instance.\ncf discussion at #8884.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "finite_dimensional_bot", []], ["del", "theorem", "finite_dimensional_bot", ["subalgebra"]]]}]}, {"timestamp": 1631089388, "sha": "b4a88e2e", "message": "feat(data/equiv/derangements/basic): define derangements (#7526)\nThis proves two formulas for the number of derangements on _n_ elements, and defines some combinatorial equivalences\ninvolving derangements on α and derangements on certain subsets of α. This proves Theorem 88 on Freek's list.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/derangements/basic.lean", "changes": [["add", "def", "at_most_one_fixed_point_equiv_sum_derangements", ["derangements"]], ["add", "def", "derangements_option_equiv_sigma_at_most_one_fixed_point", ["derangements"]], ["add", "def", "derangements_recursion_equiv", ["derangements"]], ["add", "def", "fiber", ["derangements", "equiv", "remove_none"]], ["add", "theorem", "fiber_none", ["derangements", "equiv", "remove_none"]], ["add", "theorem", "fiber_some", ["derangements", "equiv", "remove_none"]], ["add", "theorem", "mem_fiber", ["derangements", "equiv", "remove_none"]], ["add", "def", "derangements", []], ["add", "def", "derangements_congr", ["equiv"]], ["add", "theorem", "mem_derangements_iff_fixed_points_eq_empty", []]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "sigma_option_equiv_of_some", ["equiv"]]]}]}, {"timestamp": 1631081842, "sha": "189fe5bd", "message": "feat(data/nat/enat): refactor coe from nat to enat (#9023)\nThe coercion from nat to enat was defined to be enat.some. But another\ncoercion could be inferred from the additive structure on enat, leading to\nconfusing goals of the form\n`↑n = ↑n` where the two sides were not defeq.\nWe now make the coercion inferred from the additive structure the default, \neven though it is not computable.\nA dedicated function `enat.some` is introduced, to be used whenever\ncomputability is important.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["del", "theorem", "coe_add", ["enat"]], ["add", "theorem", "coe_coe_hom", ["enat"]], ["mod", "def", "coe_hom", ["enat"]], ["mod", "theorem", "coe_inj", ["enat"]], ["del", "theorem", "coe_one", ["enat"]], ["del", "theorem", "coe_zero", ["enat"]], ["mod", "theorem", "dom_coe", ["enat"]], ["add", "theorem", "dom_of_le_coe", ["enat"]], ["mod", "theorem", "dom_of_le_some", ["enat"]], ["add", "theorem", "dom_some", ["enat"]], ["mod", "theorem", "get_coe'", ["enat"]], ["mod", "theorem", "get_coe", ["enat"]], ["add", "theorem", "get_eq_iff_eq_coe", ["enat"]], ["add", "theorem", "get_eq_iff_eq_some", ["enat"]], ["mod", "theorem", "ne_top_iff", ["enat"]], ["add", "def", "some", ["enat"]], ["add", "theorem", "some_eq_coe", ["enat"]], ["mod", "theorem", "to_with_top_coe", ["enat"]], ["add", "theorem", "to_with_top_some", ["enat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "eq_coe_iff", ["multiplicity"]], ["del", "theorem", "eq_some_iff", ["multiplicity"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1631081841, "sha": "cef862d7", "message": "feat(ring_theory/noetherian): is_noetherian_of_range_eq_ker (#8988)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "map_sup_comap_of_surjective", ["submodule"]]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": [["add", "theorem", "eq_of_le_of_inf_le_of_sup_le", []], ["add", "theorem", "inf_lt_inf_of_lt_of_sup_le_sup", []], ["mod", "theorem", "sup_inf_sup_assoc", ["is_modular_lattice"]], ["add", "theorem", "sup_lt_sup_of_lt_of_inf_le_inf", []], ["add", "theorem", "well_founded_gt_exact_sequence", []], ["add", "theorem", "well_founded_lt_exact_sequence", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_of_range_eq_ker", []]]}]}, {"timestamp": 1631081840, "sha": "4dc96e4a", "message": "feat(group_theory/index): define the index of a subgroup (#8971)\nDefines `subgroup.index` and proves various divisibility properties.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "theorem", "card_eq_card_quotient_mul_card_subgroup", ["subgroup"]], ["add", "def", "quotient_equiv_prod_of_le'", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/group_theory/index.lean", "changes": [["add", "theorem", "index_dvd_card", ["subgroup"]], ["add", "theorem", "index_dvd_of_le", ["subgroup"]], ["add", "theorem", "index_eq_card", ["subgroup"]], ["add", "theorem", "index_eq_mul_of_le", ["subgroup"]], ["add", "theorem", "index_mul_card", ["subgroup"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "def", "quotient_bot", ["quotient_group"]]]}]}, {"timestamp": 1631081839, "sha": "ded0d640", "message": "feat(number_theory): define \"admissible\" absolute values (#8964)\nWe say an absolute value `abv : absolute_value R ℤ` is admissible if it agrees with the Euclidean domain structure on R (see also `is_euclidean` in #8949), and large enough sets of elements in `R^n` contain two elements whose remainders are close together.\nExamples include `abs : ℤ → ℤ` and `card_pow_degree := λ (p : polynomial Fq), (q ^ p.degree : ℤ)`, where `Fq` is a finite field with `q` elements. (These two correspond to the number field and function field case respectively, in our proof that the class number of a global field is finite.) Proving these two are indeed admissible involves a lot of pushing values between `ℤ` and `ℝ`, but is otherwise not so exciting.", "changes": [{"oldPath": "src/algebra/euclidean_absolute_value.lean", "newPath": "src/algebra/euclidean_absolute_value.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "coe_lt_degree", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/number_theory/class_number/admissible_abs.lean", "changes": [["add", "theorem", "exists_partition_int", ["absolute_value"]]]}, {"oldPath": null, "newPath": "src/number_theory/class_number/admissible_absolute_value.lean", "changes": [["add", "theorem", "exists_approx", ["absolute_value", "is_admissible"]], ["add", "theorem", "exists_approx_aux", ["absolute_value", "is_admissible"]], ["add", "theorem", "exists_partition", ["absolute_value", "is_admissible"]], ["add", "structure", "is_admissible", ["absolute_value"]]]}, {"oldPath": null, "newPath": "src/number_theory/class_number/admissible_card_pow_degree.lean", "changes": [["add", "theorem", "card_pow_degree_anti_archimedean", ["polynomial"]], ["add", "theorem", "exists_approx_polynomial", ["polynomial"]], ["add", "theorem", "exists_approx_polynomial_aux", ["polynomial"]], ["add", "theorem", "exists_eq_polynomial", ["polynomial"]], ["add", "theorem", "exists_partition_polynomial", ["polynomial"]], ["add", "theorem", "exists_partition_polynomial_aux", ["polynomial"]]]}]}, {"timestamp": 1631081838, "sha": "ec514603", "message": "feat(data/finset): define `finset.pimage` (#8907)", "changes": [{"oldPath": null, "newPath": "src/data/finset/pimage.lean", "changes": [["add", "theorem", "coe_pimage", ["finset"]], ["add", "theorem", "mem_pimage", ["finset"]], ["add", "def", "pimage", ["finset"]], ["add", "theorem", "pimage_congr", ["finset"]], ["add", "theorem", "pimage_empty", ["finset"]], ["add", "theorem", "pimage_eq_image_filter", ["finset"]], ["add", "theorem", "pimage_inter", ["finset"]], ["add", "theorem", "pimage_mono", ["finset"]], ["add", "theorem", "pimage_some", ["finset"]], ["add", "theorem", "pimage_subset", ["finset"]], ["add", "theorem", "pimage_union", ["finset"]], ["add", "theorem", "coe_to_finset", ["part"]], ["add", "theorem", "mem_to_finset", ["part"]], ["add", "def", "to_finset", ["part"]], ["add", "theorem", "to_finset_none", ["part"]], ["add", "theorem", "to_finset_some", ["part"]]]}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": [["add", "theorem", "bind_of_mem", ["part"]], ["add", "theorem", "eq_get_iff_mem", ["part"]], ["add", "theorem", "get_eq_iff_mem", ["part"]], ["mod", "theorem", "get_or_else_none", ["part"]], ["mod", "theorem", "get_or_else_some", ["part"]], ["mod", "def", "map", ["part"]], ["add", "theorem", "none_ne_some", ["part"]], ["add", "theorem", "none_to_option", ["part"]], ["mod", "def", "restrict", ["part"]], ["mod", "theorem", "some_ne_none", ["part"]], ["add", "theorem", "some_to_option", ["part"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists", ["and"]]]}]}, {"timestamp": 1631076373, "sha": "628969b1", "message": "chore(linear_algebra/basic): speed up slow decl (#9060)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1631067774, "sha": "782a20a2", "message": "chore(scripts): update nolints.txt (#9079)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1631055854, "sha": "dcd87822", "message": "feat(algebra/algebra): lemmas connecting `basis ι R A`, `no_zero_smul_divisors R A` and `injective (algebra_map R A)` (#9039)\nAdditions:\n * `basis.algebra_map_injective`\n * `no_zero_smul_divisors.algebra_map_injective`\n * `no_zero_smul_divisors.iff_algebra_map_injective`\nRenamed:\n * `algebra.no_zero_smul_divisors.of_algebra_map_injective` → `no_zero_smul_divisors.of_algebra_map_injective`", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "of_algebra_map_injective", ["algebra", "no_zero_smul_divisors"]], ["add", "theorem", "algebra_map_injective", ["no_zero_smul_divisors"]], ["add", "theorem", "iff_algebra_map_injective", ["no_zero_smul_divisors"]], ["add", "theorem", "of_algebra_map_injective", ["no_zero_smul_divisors"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "algebra_map_injective", ["basis"]]]}]}, {"timestamp": 1631050473, "sha": "50f5d8be", "message": "docs(linear_algebra/bilinear_map): fix inconsistency in docstring (#9075)", "changes": [{"oldPath": "src/linear_algebra/bilinear_map.lean", "newPath": "src/linear_algebra/bilinear_map.lean", "changes": []}]}, {"timestamp": 1631050472, "sha": "b0b0a24f", "message": "feat(data/int): absolute values and integers (#9028)\nWe prove that an absolute value maps all `units ℤ` to `1`.\nI added a new file since there is no neat place in the import hierarchy where this fit (the meet of `algebra.algebra.basic` and `data.int.cast`).", "changes": [{"oldPath": null, "newPath": "src/data/int/absolute_value.lean", "changes": [["add", "theorem", "map_units_int", ["absolute_value"]], ["add", "theorem", "map_units_int_cast", ["absolute_value"]], ["add", "theorem", "map_units_int_smul", ["absolute_value"]]]}]}, {"timestamp": 1631043219, "sha": "fd453cf1", "message": "chore(data/set/basic): add some simp attrs (#9074)\nAlso add `set.pairwise_on_union`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "diff_eq_self", ["set"]], ["mod", "theorem", "diff_inter_self", ["set"]], ["mod", "theorem", "diff_inter_self_eq_diff", ["set"]], ["mod", "theorem", "diff_self_inter", ["set"]], ["add", "theorem", "pairwise_on_union", ["set"]], ["add", "theorem", "pairwise_on_union_of_symmetric", ["set"]], ["mod", "theorem", "sep_subset", ["set"]]]}]}, {"timestamp": 1631032289, "sha": "463e7534", "message": "feat(linear_algebra/finite_dimensional): generalisations to division_ring (#8822)\nI generalise a few results about finite dimensional modules from fields to division rings. Mostly this is me trying out @alexjbest's `generalisation_linter`. (review: it works really well, and is very helpful for finding the right home for lemmas, but it is slow).", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_eq_card_basis", []], ["del", "theorem", "dim_of_ring", []], ["mod", "theorem", "dim_quotient_le", []], ["add", "theorem", "dim_self", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "dim_eq_card_basis", ["finite_dimensional"]], ["mod", "theorem", "finite_dimensional_of_finrank", ["finite_dimensional"]], ["mod", "theorem", "finrank_eq_dim", ["finite_dimensional"]], ["del", "theorem", "finrank_of_field", ["finite_dimensional"]], ["mod", "theorem", "finrank_of_infinite_dimensional", ["finite_dimensional"]], ["add", "theorem", "finrank_self", ["finite_dimensional"]], ["mod", "theorem", "of_finset_basis", ["finite_dimensional"]], ["mod", "def", "finite_dimensional", []]]}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}]}, {"timestamp": 1631027844, "sha": "9c886ffb", "message": "chore(ring_theory): typo fix (#9067)\n`principal_idea_ring` -> `principal_ideal_ring`", "changes": [{"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1631027843, "sha": "f8cfed4d", "message": "feat(algebra/tropical/basic): define tropical semiring (#8864)\nJust the initial algebraic structures. Follow up PRs will provide these with a topology, prove that tropical polynomials can be interpreted as sums of affine maps, and further towards tropical geometry.", "changes": [{"oldPath": null, "newPath": "src/algebra/tropical/basic.lean", "changes": [["add", "theorem", "add_eq_iff", ["tropical"]], ["add", "theorem", "add_eq_left", ["tropical"]], ["add", "theorem", "add_eq_right", ["tropical"]], ["add", "theorem", "add_eq_zero_iff", ["tropical"]], ["add", "theorem", "add_pow", ["tropical"]], ["add", "theorem", "add_self", ["tropical"]], ["add", "theorem", "bit0", ["tropical"]], ["add", "theorem", "injective_trop", ["tropical"]], ["add", "theorem", "injective_untrop", ["tropical"]], ["add", "theorem", "le_zero", ["tropical"]], ["add", "theorem", "left_inverse_trop", ["tropical"]], ["add", "theorem", "mul_eq_zero_iff", ["tropical"]], ["add", "theorem", "right_inverse_trop", ["tropical"]], ["add", "theorem", "succ_nsmul", ["tropical"]], ["add", "theorem", "surjective_trop", ["tropical"]], ["add", "theorem", "surjective_untrop", ["tropical"]], ["add", "def", "trop", ["tropical"]], ["add", "theorem", "trop_add_def", ["tropical"]], ["add", "theorem", "trop_coe_ne_zero", ["tropical"]], ["add", "theorem", "trop_eq_iff_eq_untrop", ["tropical"]], ["add", "def", "trop_equiv", ["tropical"]], ["add", "theorem", "trop_equiv_coe_fn", ["tropical"]], ["add", "theorem", "trop_equiv_symm_coe_fn", ["tropical"]], ["add", "theorem", "trop_inj_iff", ["tropical"]], ["add", "theorem", "trop_injective", ["tropical"]], ["add", "theorem", "trop_mul_def", ["tropical"]], ["add", "theorem", "trop_nsmul", ["tropical"]], ["add", "def", "trop_order_iso", ["tropical"]], ["add", "theorem", "trop_order_iso_coe_fn", ["tropical"]], ["add", "theorem", "trop_order_iso_symm_coe_fn", ["tropical"]], ["add", "def", "trop_rec", ["tropical"]], ["add", "theorem", "trop_top", ["tropical"]], ["add", "theorem", "trop_untrop", ["tropical"]], ["add", "def", "untrop", ["tropical"]], ["add", "theorem", "untrop_add", ["tropical"]], ["add", "theorem", "untrop_div", ["tropical"]], ["add", "theorem", "untrop_eq_iff_eq_trop", ["tropical"]], ["add", "theorem", "untrop_inj_iff", ["tropical"]], ["add", "theorem", "untrop_injective", ["tropical"]], ["add", "theorem", "untrop_inv", ["tropical"]], ["add", "theorem", "untrop_le_iff", ["tropical"]], ["add", "theorem", "untrop_mul", ["tropical"]], ["add", "theorem", "untrop_one", ["tropical"]], ["add", "theorem", "untrop_pow", ["tropical"]], ["add", "theorem", "untrop_trop", ["tropical"]], ["add", "theorem", "untrop_zero", ["tropical"]], ["add", "theorem", "zero_ne_trop_coe", ["tropical"]], ["add", "def", "tropical", []]]}]}, {"timestamp": 1631022489, "sha": "eeb4bb66", "message": "feat(algebra/big_operators): absolute values and big operators (#9027)\nThis PR extends `absolute_value.add_le` and `absolute_value.map_mul` to `finset.sum` and `finset.prod` respectively.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "map_prod", ["absolute_value"]], ["add", "theorem", "sum_le", ["absolute_value"]]]}]}, {"timestamp": 1631012816, "sha": "6c8203f2", "message": "chore(linear_algebra/bilinear_map): split off new file from linear_algebra/tensor_product (#9054)\nThe first part of linear_algebra/tensor_product consisted of some basics on bilinear maps that are not directly related to the construction of the tensor product.\nThis PR moves them to a new file.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/bilinear_map.lean", "changes": [["add", "def", "compl₂", ["linear_map"]], ["add", "theorem", "compl₂_apply", ["linear_map"]], ["add", "def", "compr₂", ["linear_map"]], ["add", "theorem", "compr₂_apply", ["linear_map"]], ["add", "theorem", "ext₂", ["linear_map"]], ["add", "def", "flip", ["linear_map"]], ["add", "theorem", "flip_apply", ["linear_map"]], ["add", "theorem", "flip_inj", ["linear_map"]], ["add", "theorem", "ker_lsmul", ["linear_map"]], ["add", "def", "lcomp", ["linear_map"]], ["add", "theorem", "lcomp_apply", ["linear_map"]], ["add", "def", "lflip", ["linear_map"]], ["add", "theorem", "lflip_apply", ["linear_map"]], ["add", "def", "llcomp", ["linear_map"]], ["add", "theorem", "llcomp_apply", ["linear_map"]], ["add", "def", "lsmul", ["linear_map"]], ["add", "theorem", "lsmul_apply", ["linear_map"]], ["add", "theorem", "lsmul_injective", ["linear_map"]], ["add", "theorem", "map_add₂", ["linear_map"]], ["add", "theorem", "map_neg₂", ["linear_map"]], ["add", "theorem", "map_smul₂", ["linear_map"]], ["add", "theorem", "map_sub₂", ["linear_map"]], ["add", "theorem", "map_sum₂", ["linear_map"]], ["add", "theorem", "map_zero₂", ["linear_map"]], ["add", "def", "mk₂'", ["linear_map"]], ["add", "theorem", "mk₂'_apply", ["linear_map"]], ["add", "def", "mk₂", ["linear_map"]], ["add", "theorem", "mk₂_apply", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["del", "def", "compl₂", ["linear_map"]], ["del", "theorem", "compl₂_apply", ["linear_map"]], ["del", "def", "compr₂", ["linear_map"]], ["del", "theorem", "compr₂_apply", ["linear_map"]], ["del", "theorem", "ext₂", ["linear_map"]], ["del", "def", "flip", ["linear_map"]], ["del", "theorem", "flip_apply", ["linear_map"]], ["del", "theorem", "flip_inj", ["linear_map"]], ["del", "theorem", "ker_lsmul", ["linear_map"]], ["del", "def", "lcomp", ["linear_map"]], ["del", "theorem", "lcomp_apply", ["linear_map"]], ["del", "def", "lflip", ["linear_map"]], ["del", "theorem", "lflip_apply", ["linear_map"]], ["del", "def", "llcomp", ["linear_map"]], ["del", "theorem", "llcomp_apply", ["linear_map"]], ["del", "def", "lsmul", ["linear_map"]], ["del", "theorem", "lsmul_apply", ["linear_map"]], ["del", "theorem", "lsmul_injective", ["linear_map"]], ["del", "theorem", "map_add₂", ["linear_map"]], ["del", "theorem", "map_neg₂", ["linear_map"]], ["del", "theorem", "map_smul₂", ["linear_map"]], ["del", "theorem", "map_sub₂", ["linear_map"]], ["del", "theorem", "map_sum₂", ["linear_map"]], ["del", "theorem", "map_zero₂", ["linear_map"]], ["del", "def", "mk₂'", ["linear_map"]], ["del", "theorem", "mk₂'_apply", ["linear_map"]], ["del", "def", "mk₂", ["linear_map"]], ["del", "theorem", "mk₂_apply", ["linear_map"]]]}]}, {"timestamp": 1631012815, "sha": "0508c7b1", "message": "feat(analysis/specific_limits): add `set.countable.exists_pos_has_sum_le` (#9052)\nAdd versions of `pos_sum_of_encodable` for countable sets.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "exists_pos_forall_sum_le", ["set", "countable"]], ["add", "theorem", "exists_pos_has_sum_le", ["set", "countable"]]]}]}, {"timestamp": 1631012814, "sha": "98942ab5", "message": "feat(ring_theory): non-zero divisors are not zero (#9043)\nI'm kind of suprised we didn't have this before!", "changes": [{"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["add", "theorem", "coe_ne_zero", ["non_zero_divisors"]], ["add", "theorem", "ne_zero", ["non_zero_divisors"]]]}]}, {"timestamp": 1631012813, "sha": "812ff38b", "message": "docs(algebra/ordered_ring): add module docstring (#9030)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}]}, {"timestamp": 1631012812, "sha": "a84b538c", "message": "feat(algebra/algebra/subalgebra): inclusion map of subalgebras (#9013)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "coe_inclusion", ["subalgebra"]], ["add", "def", "inclusion", ["subalgebra"]], ["add", "theorem", "inclusion_inclusion", ["subalgebra"]], ["add", "theorem", "inclusion_injective", ["subalgebra"]], ["add", "theorem", "inclusion_right", ["subalgebra"]], ["add", "theorem", "inclusion_self", ["subalgebra"]]]}]}, {"timestamp": 1631012811, "sha": "d69c12e9", "message": "feat(ring_theory/ideal/local_ring): residue field is an algebra (#8991)\nAlso, the kernel of a surjective map to a field is equal to the unique maximal ideal.", "changes": [{"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["add", "theorem", "ker_eq_maximal_ideal", ["local_ring"]]]}]}, {"timestamp": 1631012810, "sha": "58a88539", "message": "doc(data/list/*): Add missing documentation (#8867)\nFixing the missing module docstrings in `data/list`, as well as documenting some `def`s and `theorem`s.", "changes": [{"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": []}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["mod", "theorem", "length_of_fn_aux", ["list"]], ["mod", "theorem", "nth_of_fn_aux", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}]}, {"timestamp": 1631012809, "sha": "d366eb3d", "message": "feat(ring_theory/ideal/operations): add some theorems about taking the quotient of a ring by a sum of ideals (#8668)\nThe aim of this section is to prove that if `I, J` are ideals of the ring `R`, then the quotients `R/(I+J)` and `(R/I)/J'`are isomorphic, where `J'` is the image of `J` in `R/I`.", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "def", "factor", ["ideal", "quotient"]], ["add", "theorem", "factor_comp_mk", ["ideal", "quotient"]], ["add", "theorem", "factor_mk", ["ideal", "quotient"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "ker_quot_left_to_quot_sup", ["double_quot"]], ["add", "theorem", "ker_quot_quot_mk", ["double_quot"]], ["add", "def", "lift_sup_quot_quot_mk", ["double_quot"]], ["add", "def", "quot_left_to_quot_sup", ["double_quot"]], ["add", "def", "quot_quot_equiv_quot_sup", ["double_quot"]], ["add", "def", "quot_quot_mk", ["double_quot"]], ["add", "def", "quot_quot_to_quot_sup", ["double_quot"]], ["add", "theorem", "ker_quotient_lift", ["ideal"]], ["add", "theorem", "map_eq_iff_sup_ker_eq_of_surjective", ["ideal"]], ["add", "theorem", "map_mk_eq_bot_of_le", ["ideal"]]]}]}, {"timestamp": 1631001671, "sha": "d0c02bc9", "message": "feat(order/filter/basic): add `supr_inf_principal` and `tendsto_supr` (#9051)\nAlso golf a few proofs", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "supr_inf_principal", ["filter"]]]}]}, {"timestamp": 1631001669, "sha": "6b0c73a0", "message": "chore(analysis/normed_space): add `dist_sum_sum_le` (#9049)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "dist_sum_sum_le", []], ["add", "theorem", "dist_sum_sum_le_of_le", []]]}]}, {"timestamp": 1631001668, "sha": "3fdfc8e5", "message": "chore(data/bool): add a few lemmas about inequalities and `band`/`bor` (#9048)", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "band_le_left", ["bool"]], ["add", "theorem", "band_le_right", ["bool"]], ["add", "theorem", "bor_le", ["bool"]], ["add", "theorem", "le_band", ["bool"]], ["add", "theorem", "le_iff_imp", ["bool"]], ["add", "theorem", "left_le_bor", ["bool"]], ["add", "theorem", "right_le_bor", ["bool"]]]}]}, {"timestamp": 1631001667, "sha": "c4f37076", "message": "chore(scripts): update nolints.txt (#9047)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1630994196, "sha": "77f4ed46", "message": "docs(set_theory/lists): add module docstring and def docstrings (#8967)", "changes": [{"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}]}, {"timestamp": 1630994194, "sha": "0c19d5f5", "message": "feat(topology/uniform_space/basic): add corollary of Lebesgue number lemma `lebesgue_number_of_compact_open` (#8963)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "is_open_iff_open_ball_subset", []], ["add", "theorem", "lebesgue_number_of_compact_open", []]]}]}, {"timestamp": 1630994193, "sha": "a7be93b2", "message": "feat(data/matrix/hadamard): add the Hadamard product (#8956)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "diagonal_conj_transpose", ["matrix"]]]}, {"oldPath": null, "newPath": "src/data/matrix/hadamard.lean", "changes": [["add", "theorem", "add_hadamard", ["matrix"]], ["add", "theorem", "diagonal_hadamard_diagonal", ["matrix"]], ["add", "theorem", "dot_product_vec_mul_hadamard", ["matrix"]], ["add", "def", "hadamard", ["matrix"]], ["add", "theorem", "hadamard_add", ["matrix"]], ["add", "theorem", "hadamard_assoc", ["matrix"]], ["add", "theorem", "hadamard_comm", ["matrix"]], ["add", "theorem", "hadamard_one", ["matrix"]], ["add", "theorem", "hadamard_smul", ["matrix"]], ["add", "theorem", "hadamard_zero", ["matrix"]], ["add", "theorem", "one_hadamard", ["matrix"]], ["add", "theorem", "smul_hadamard", ["matrix"]], ["add", "theorem", "sum_hadamard_eq", ["matrix"]], ["add", "theorem", "zero_hadamard", ["matrix"]]]}]}, {"timestamp": 1630994192, "sha": "91824e58", "message": "feat(group_theory/subgroup): Normal Core (#8940)\nDefines normal core, and proves lemmas analogous to those for normal closure.", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "normal_core_eq_ker", ["subgroup"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "def", "normal_core", ["subgroup"]], ["add", "theorem", "normal_core_eq_self", ["subgroup"]], ["add", "theorem", "normal_core_eq_supr", ["subgroup"]], ["add", "theorem", "normal_core_idempotent", ["subgroup"]], ["add", "theorem", "normal_core_le", ["subgroup"]], ["add", "theorem", "normal_core_mono", ["subgroup"]], ["add", "theorem", "normal_le_normal_core", ["subgroup"]]]}]}, {"timestamp": 1630994191, "sha": "298f231e", "message": "feat(*): trivial lemmas from #8903 (#8909)", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "single_smul''", ["pi"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "lsmul_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/data/part.lean", "newPath": "src/data/part.lean", "changes": []}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "symmetric_disjoint", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_supr", ["filter"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1630994190, "sha": "5b29630d", "message": "chore(linear_algebra/tensor_product): remove `@[ext]` tag from `tensor_product.mk_compr₂_inj` (#8868)\nThis PR removes the `@[ext]` tag from `tensor_product.mk_compr₂_inj` and readds it locally only where it is needed. This is a workaround for the issue discussed [in this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/odd.20repeated.20type.20class.20search): basically, when `ext` tries to apply this lemma to linear maps, it fails only after a very long typeclass search. While this problem is already present to some extent in current mathlib, it is exacerbated by the [upcoming generalization of linear maps to semilinear maps](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Semilinear.20maps).\nIn addition to this change, a few individual uses of `ext` have been replaced by a manual application of the relevant ext lemma(s) for performance reasons.\nFor discoverability, the lemma `tensor_product.mk_compr₂_inj` is renamed to `tensor_product.ext` and the former `tensor_product.ext` to `tensor_product.ext'`.", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/subobject.lean", "newPath": "src/algebra/category/Module/subobject.lean", "changes": []}, {"oldPath": "src/algebra/lie/tensor_product.lean", "newPath": "src/algebra/lie/tensor_product.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/tensor_product.lean", "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "ext'", ["tensor_product"]], ["mod", "theorem", "ext", ["tensor_product"]], ["del", "theorem", "mk_compr₂_inj", ["tensor_product"]]]}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1630986601, "sha": "ceb9da60", "message": "feat(analysis/convex/caratheodory): strengthen Caratheodory's lemma to provide affine independence (#8892)\nThe changes here are:\n- Use hypothesis `¬ affine_independent ℝ (coe : t → E)` instead of `finrank ℝ E + 1 < t.card`\n- Drop no-longer-necessary `[finite_dimensional ℝ E]` assumption\n- Do not use a shrinking argument but start by choosing an appropriate subset of minimum cardinality via `min_card_finset_of_mem_convex_hull`\n- Provide a single alternative form of Carathéodory's lemma `eq_pos_convex_span_of_mem_convex_hull`\n- In the alternate form, define the explicit linear combination using elements parameterised by a new `fintype` rather than on the entire ambient space `E` (we thus avoid the issue of junk values outside of the relevant subset)", "changes": [{"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": [["add", "theorem", "affine_independent_min_card_finset_of_mem_convex_hull", ["caratheodory"]], ["mod", "theorem", "mem_convex_hull_erase", ["caratheodory"]], ["add", "theorem", "mem_min_card_finset_of_mem_convex_hull", ["caratheodory"]], ["add", "theorem", "min_card_finset_of_mem_convex_hull_card_le_card", ["caratheodory"]], ["add", "theorem", "min_card_finset_of_mem_convex_hull_nonempty", ["caratheodory"]], ["add", "theorem", "min_card_finset_of_mem_convex_hull_subseteq", ["caratheodory"]], ["del", "theorem", "shrink'", ["caratheodory"]], ["del", "theorem", "shrink", ["caratheodory"]], ["del", "theorem", "step", ["caratheodory"]], ["mod", "theorem", "convex_hull_eq_union", []], ["del", "theorem", "convex_hull_subset_union", []], ["del", "theorem", "eq_center_mass_card_le_dim_succ_of_mem_convex_hull", []], ["del", "theorem", "eq_pos_center_mass_card_le_dim_succ_of_mem_convex_hull", []], ["add", "theorem", "eq_pos_convex_span_of_mem_convex_hull", []]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "exists_nontrivial_relation_sum_zero_of_not_affine_ind", []]]}]}, {"timestamp": 1630986599, "sha": "5eb19182", "message": "feat(group_theory/perm/concrete_cycle): is_cycle_form_perm (#8859)", "changes": [{"oldPath": null, "newPath": "src/group_theory/perm/concrete_cycle.lean", "changes": [["add", "theorem", "cycle_of_form_perm", ["list"]], ["add", "theorem", "cycle_type_form_perm", ["list"]], ["add", "theorem", "form_perm_apply_mem_eq_next", ["list"]], ["add", "theorem", "form_perm_disjoint_iff", ["list"]], ["add", "theorem", "is_cycle_form_perm", ["list"]], ["add", "theorem", "pairwise_same_cycle_form_perm", ["list"]]]}, {"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": [["del", "theorem", "form_perm_apply_not_mem", ["list"]], ["add", "theorem", "form_perm_eq_self_of_not_mem", ["list"]], ["del", "theorem", "form_perm_ne_self_imp_mem", ["list"]], ["add", "theorem", "mem_of_form_perm_ne_self", ["list"]]]}]}, {"timestamp": 1630986598, "sha": "f157b6df", "message": "feat(linear_algebra): introduce notation for `linear_map.comp` and `linear_equiv.trans` (#8857)\nThis PR introduces new notation for the composition of linear maps and linear equivalences: `∘ₗ` denotes `linear_map.comp` and `≫ₗ` denotes `linear_equiv.trans`. This will be needed by an upcoming PR generalizing linear maps to semilinear maps (see discussion [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Semilinear.20maps)): in some places, we need to help the elaborator a bit by telling it that we are composing plain linear maps/equivs as opposed to semilinear ones. We have not made the change systematically throughout the library, only in places where it is needed in our semilinear maps branch.", "changes": [{"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": []}, {"oldPath": "src/algebra/lie/base_change.lean", "newPath": "src/algebra/lie/base_change.lean", "changes": []}, {"oldPath": "src/algebra/lie/tensor_product.lean", "newPath": "src/algebra/lie/tensor_product.lean", "changes": []}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "def", "coord", ["basis"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "coe_comp", ["continuous_linear_map"]]]}]}, {"timestamp": 1630986597, "sha": "d2625006", "message": "feat(group_theory/nilpotent): add antimono and functorial lemma for lower central series (#8853)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "map", ["lower_central_series"]], ["add", "theorem", "lower_central_series_antimono", []]]}]}, {"timestamp": 1630986596, "sha": "f0f6c1cc", "message": "feat(tactic/lint): reducible non-instance linter (#8540)\n* This linter checks that if an instances uses a non-instance with as type a class, the non-instances is reducible.\n* There are many false positives to this rule, which we probably want to allow (that are unlikely to cause problems). To cut down on the many many false positives, the linter currently only consider classes that have either an `add` or a `mul` field. Maybe we want to also include order-structures, but there are (for example) a bunch of `complete_lattice` structures that are derived using Galois insertions that haven't ever caused problems (I think).", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/hierarchy_design.lean", "newPath": "src/algebra/hierarchy_design.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1630979345, "sha": "d6a1fc02", "message": "feat(algebra/ordered_monoid): correct definition (#8877)\nOur definition of `ordered_monoid` is not the usual one, and this PR corrects that.\nThe standard definition just says\n```\n(mul_le_mul_left : ∀ a b : α, a ≤ b → ∀ c : α, c * a ≤ c * b)\n```\nwhile we currently have an extra axiom\n```\n(lt_of_add_lt_add_left : ∀ a b c : α, a + b < a + c → b < c)\n```\n(This was introduced in ancient times, https://github.com/leanprover-community/mathlib/commit/7d8e3f3a6de70da504406727dbe7697b2f7a62ee, with no indication of where the definition came from. I couldn't find it in other sources.)\nAs @urkud pointed out a while ago [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/ordered_comm_monoid), these really are different.\nThe second axiom *does* automatically hold for cancellative ordered monoids, however.\nThis PR simply drops the axiom. In practice this causes no harm, because all the interesting examples are cancellative. There's a little bit of cleanup to do. In `src/algebra/ordered_sub.lean` four lemmas break, so I just added the necessary `[contravariant_class _ _ (+) (<)]` hypothesis. These lemmas aren't currently used in mathlib, but presumably where they are needed this typeclass will be available.", "changes": [{"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": [["del", "theorem", "lt_of_add_lt_add_left", ["ex_L"]]]}, {"oldPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "newPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "lt_of_mul_lt_mul_left", ["ordered_cancel_comm_monoid"]]]}, {"oldPath": "src/algebra/ordered_sub.lean", "newPath": "src/algebra/ordered_sub.lean", "changes": [["mod", "theorem", "lt_of_sub_lt_sub_left_of_le", []], ["mod", "theorem", "sub_lt_sub_iff_left_of_le_of_le", []]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1630974809, "sha": "ce31c1c6", "message": "feat(order/prime_ideal): prime ideals are maximal (#9004)\nProved that in boolean algebras:\n1. An ideal is prime iff it always contains one of x, x^c\n2. A prime ideal is maximal", "changes": [{"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["add", "theorem", "not_mem_of_compl_mem", ["order", "ideal", "is_proper"]], ["add", "theorem", "not_mem_or_compl_not_mem", ["order", "ideal", "is_proper"]], ["add", "theorem", "top_not_mem", ["order", "ideal", "is_proper"]]]}, {"oldPath": "src/order/prime_ideal.lean", "newPath": "src/order/prime_ideal.lean", "changes": [["add", "theorem", "is_prime_iff_mem_or_compl_mem", ["order", "ideal"]], ["add", "theorem", "is_prime_of_mem_or_compl_mem", ["order", "ideal"]]]}]}, {"timestamp": 1630974808, "sha": "54315218", "message": "refactor(topology/sheaves/sheaf_condition): Generalize unique gluing API (#9002)\nPreviously, the sheaf condition in terms of unique gluings has been defined only for type-valued presheaves. This PR generalizes this to arbitrary concrete categories, whose forgetful functor preserves limits and reflects isomorphisms (e.g. algebraic categories like `CommRing`). As a side effect, this solves a TODO in `structure_sheaf.lean`.", "changes": [{"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": [["mod", "theorem", "res_π", ["Top", "presheaf", "sheaf_condition_equalizer_products"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": [["mod", "def", "gluing", ["Top", "presheaf"]], ["del", "theorem", "res_π_apply", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_equiv_sheaf_condition_unique_gluing_types", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_of_sheaf_condition_unique_gluing", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_of_sheaf_condition_unique_gluing_types", ["Top", "presheaf"]], ["mod", "def", "sheaf_condition_unique_gluing", ["Top", "presheaf"]], ["del", "def", "sheaf_condition_unique_gluing_of_sheaf_condition", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_unique_gluing_of_sheaf_condition_types", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1630974807, "sha": "d472c56c", "message": "feat(linear_algebra/affine_space/affine_equiv): affine homotheties as equivalences (#8983)", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "coe_coe", ["affine_equiv"]], ["add", "theorem", "coe_homothety_units_mul_hom_apply", ["affine_equiv"]], ["add", "theorem", "coe_homothety_units_mul_hom_apply_symm", ["affine_equiv"]], ["add", "theorem", "coe_homothety_units_mul_hom_eq_homothety_hom_coe", ["affine_equiv"]], ["add", "theorem", "coe_mk", ["affine_equiv"]], ["add", "def", "homothety_units_mul_hom", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}]}, {"timestamp": 1630962560, "sha": "309674d9", "message": "feat(linear_algebra/basis): a nontrivial module has nonempty bases (#9040)\nA tiny little lemma that guarantees the dimension of a nontrivial module is nonzero. Noticeably simplifies the proof that the dimension of a power basis is positive in this case.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "index_nonempty", ["basis"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["mod", "theorem", "dim_ne_zero", ["power_basis"]]]}]}, {"timestamp": 1630962559, "sha": "3218c373", "message": "feat(linear_algebra/smodeq): sub_mem, eval (#8993)", "changes": [{"oldPath": "src/linear_algebra/smodeq.lean", "newPath": "src/linear_algebra/smodeq.lean", "changes": [["add", "theorem", "eval", ["smodeq"]], ["add", "theorem", "sub_mem", ["smodeq"]]]}]}, {"timestamp": 1630962558, "sha": "fde1fc28", "message": "feat(*): make more non-instances reducible (#8941)\n* Also add some docstrings to `cau_seq_completion`.\n* Related PR: #7835", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/skeleton.lean", "newPath": "src/category_theory/monoidal/skeleton.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1630950744, "sha": "bfcf73fa", "message": "feat(data/multiset/basic): Add a result on intersection of multiset with `repeat a n` (#9038)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "repeat_inf", ["multiset"]]]}]}, {"timestamp": 1630950743, "sha": "3148cfe1", "message": "feat(field_theory/algebraic_closure): polynomials in an algebraically closed fields have roots (#9037)", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "exists_root", ["is_alg_closed"]]]}]}, {"timestamp": 1630950741, "sha": "3a624194", "message": "chore(data/nat/mul_ind): make docgen happy (#9036)", "changes": [{"oldPath": "src/data/nat/mul_ind.lean", "newPath": "src/data/nat/mul_ind.lean", "changes": []}]}, {"timestamp": 1630950740, "sha": "11284f2f", "message": "feat(ring_theory): `y ≠ 0` in a UFD has finitely many divisors (#9034)\nThis implies ideals in a Dedekind domain are contained in only finitely many larger ideals.", "changes": [{"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1630950739, "sha": "86dd706c", "message": "feat(set/lattice): two lemmas about when sInter is empty (#9033)\n- Added sInter_eq_empty_iff\n- Added sInter_nonempty_iff", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "sInter_eq_empty_iff", ["set"]], ["add", "theorem", "sInter_nonempty_iff", ["set"]]]}]}, {"timestamp": 1630950738, "sha": "98cbad7b", "message": "chore(set_theory/pgame): add protected (#9022)\nBreaks #7843 into smaller PRs.\nThese lemmas about `pgame` conflict with the ones for `game` when used in `calc` mode proofs, which confuses Lean.\nThere is no way to use the lemmas for `game` (required for surreal numbers) without using `_root_` as `game` inherits these lemmas from its abelian group structure.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["mod", "theorem", "equiv_refl", ["pgame"]], ["del", "theorem", "le_refl", ["pgame"]], ["del", "theorem", "lt_irrefl", ["pgame"]], ["del", "theorem", "ne_of_lt", ["pgame"]]]}]}, {"timestamp": 1630950737, "sha": "c83c22dc", "message": "feat(measure_theory/measure/vector_measure): zero is absolutely continuous wrt any vector measure (#9007)", "changes": [{"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "zero", ["measure_theory", "vector_measure", "absolutely_continuous"]]]}]}, {"timestamp": 1630950736, "sha": "339c2c35", "message": "feat(linear_algebra/affine_space/independent): affine independence is preserved by affine maps (#9005)", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "injective_iff_linear_injective", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "map'", ["affine_independent"]], ["add", "theorem", "of_comp", ["affine_independent"]], ["add", "theorem", "affine_independent_iff", ["affine_map"]]]}]}, {"timestamp": 1630931164, "sha": "c2e6e62a", "message": "feat(algebra/absolute_value): generalize a few results to `linear_ordered_ring`s (#9026)\nThe proofs were copied literally from `is_absolute_value`, which was defined on fields, but we can generalize them to rings with only a few tweaks.", "changes": [{"oldPath": "src/algebra/absolute_value.lean", "newPath": "src/algebra/absolute_value.lean", "changes": []}]}, {"timestamp": 1630931162, "sha": "448f821d", "message": "feat(algebra/pointwise): enable pointwise add_action (#9017)\nJust a little to_additive declaration", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}]}, {"timestamp": 1630931161, "sha": "f0c3f9e8", "message": "feat(linear_algebra/basic): surjective_of_iterate_surjective (#9006)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "surjective_of_iterate_surjective", ["linear_map"]]]}]}, {"timestamp": 1630931160, "sha": "d16cb001", "message": "feat(linear_algebra/basic): of_le_injective (#8977)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "of_le_injective", ["submodule"]]]}]}, {"timestamp": 1630931159, "sha": "c0f01eed", "message": "feat(data/fin): pos_iff_nonempty (#8975)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "pos_iff_nonempty", ["fin"]]]}]}, {"timestamp": 1630931158, "sha": "de37a6aa", "message": "chore(field_theory/fixed): reuse existing `mul_semiring_action.to_alg_hom` by providing `smul_comm_class` (#8965)\nThis removes `fixed_points.to_alg_hom` as this is really just a bundled form of `mul_semiring_action.to_alg_hom` + `mul_semiring_action.to_alg_hom_injective`, once we provide the missing `smul_comm_class`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "to_alg_equiv_injective", ["mul_semiring_action"]], ["add", "theorem", "to_alg_hom_injective", ["mul_semiring_action"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["del", "def", "to_alg_hom", ["fixed_points"]], ["del", "theorem", "to_alg_hom_apply_apply", ["fixed_points"]]]}]}, {"timestamp": 1630931157, "sha": "2aebabca", "message": "feat(topology/continuous_function/basic): add `continuous_map.Icc_extend` (#8952)", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "def", "Icc_extend", ["continuous_map"]], ["add", "theorem", "coe_Icc_extend", ["continuous_map"]]]}]}, {"timestamp": 1630931155, "sha": "773b45f7", "message": "feat(algebra/module/ordered): redefine `ordered_module` as `ordered_smul` (#8930)\nOne would like to talk about `ordered_monoid R (with_top R)`, but the `module` constraint is too strict to allow this.\nThe definition of `ordered_monoid` works if it is loosened to `has_scalar R M`. Most of the proofs that are part of its API need at most `smul_with_zero`. So it has been loosened to `smul_with_zero`, since a lawless `ordered_monoid` wouldn't do much.\nIn the `ordered_field` portion, `module` has been loosened to `mul_action_with_zero`.\n`order_dual` instances of `smul` instances have also been generalized to better transmit. There are more generalizations possible, but seem out of scope for a single PR.\nUnfortunately, these generalizations exposed a gnarly misalignment between `prod.has_lt` and `prod.has_le`, which have incompatible definitions, when inferred through separate paths. In particular, the `lt` definition of generated by `prod.preorder` is different than the core `prod.has_lt`. Due to this, the `prod.ordered_monoid` instance has not been generalized.", "changes": [{"oldPath": "src/algebra/algebra/ordered.lean", "newPath": "src/algebra/algebra/ordered.lean", "changes": []}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": [["del", "theorem", "eq_of_smul_eq_smul_of_pos_of_le", []], ["del", "theorem", "le_smul_iff_of_pos", []], ["del", "theorem", "lt_of_smul_lt_smul_of_nonneg", []], ["del", "theorem", "mk''", ["ordered_module"]], ["del", "theorem", "mk'", ["ordered_module"]], ["del", "theorem", "smul_le_iff_of_pos", []], ["mod", "theorem", "smul_le_smul_iff_of_neg", []], ["del", "theorem", "smul_le_smul_iff_of_pos", []], ["del", "theorem", "smul_le_smul_of_nonneg", []], ["del", "theorem", "smul_lt_iff_of_pos", []], ["del", "theorem", "smul_lt_smul_iff_of_pos", []], ["del", "theorem", "smul_lt_smul_of_pos", []], ["del", "theorem", "smul_pos_iff_of_pos", []]]}, {"oldPath": null, "newPath": "src/algebra/ordered_smul.lean", "changes": [["add", "theorem", "eq_of_smul_eq_smul_of_pos_of_le", []], ["add", "theorem", "le_smul_iff_of_pos", []], ["add", "theorem", "lt_of_smul_lt_smul_of_nonneg", []], ["add", "theorem", "mk''", ["ordered_smul"]], ["add", "theorem", "mk'", ["ordered_smul"]], ["add", "theorem", "smul_le_iff_of_pos", []], ["add", "theorem", "smul_le_smul_iff_of_pos", []], ["add", "theorem", "smul_le_smul_of_nonneg", []], ["add", "theorem", "smul_lt_iff_of_pos", []], ["add", "theorem", "smul_lt_smul_iff_of_pos", []], ["add", "theorem", "smul_lt_smul_of_pos", []], ["add", "theorem", "smul_pos_iff_of_pos", []]]}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "concave_le", ["concave_on"]], ["mod", "theorem", "smul", ["concave_on"]], ["mod", "theorem", "convex_le", ["convex_on"]], ["mod", "theorem", "smul", ["convex_on"]]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["del", "theorem", "to_ordered_module", ["convex_cone"]], ["add", "theorem", "to_ordered_smul", ["convex_cone"]]]}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["del", "theorem", "complex_ordered_module", ["complex"]], ["add", "theorem", "complex_ordered_smul", ["complex"]]]}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}]}, {"timestamp": 1630931154, "sha": "e8fff266", "message": "refactor(group_theory/*): Move Cauchy's theorem (#8916)\nMoves Cauchy's theorem from `sylow.lean` to `perm/cycle_type.lean`. Now `perm/cycle_type.lean` no longer depends on `sylow.lean`, and `p_group.lean` can use Cauchy's theorem (e.g. for equivalent characterizations of p-groups).", "changes": [{"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "exists_prime_order_of_dvd_card", ["equiv", "perm"]], ["add", "theorem", "card", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "def", "equiv_vector", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "theorem", "mem_iff", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "theorem", "one_eq", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "def", "rotate", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "theorem", "rotate_length", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "theorem", "rotate_rotate", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "theorem", "rotate_zero", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "def", "vector_equiv", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "theorem", "zero_eq", ["equiv", "perm", "vectors_prod_eq_one"]], ["add", "def", "vectors_prod_eq_one", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["del", "theorem", "exists_prime_order_of_dvd_card", ["sylow"]], ["del", "theorem", "mem_vectors_prod_eq_one", ["sylow"]], ["del", "theorem", "mem_vectors_prod_eq_one_iff", ["sylow"]], ["del", "def", "mk_vector_prod_eq_one", ["sylow"]], ["del", "theorem", "mk_vector_prod_eq_one_injective", ["sylow"]], ["del", "theorem", "one_mem_fixed_points_rotate", ["sylow"]], ["del", "theorem", "one_mem_vectors_prod_eq_one", ["sylow"]], ["del", "def", "rotate_vectors_prod_eq_one", ["sylow"]], ["del", "def", "vectors_prod_eq_one", ["sylow"]]]}]}, {"timestamp": 1630931153, "sha": "893c4746", "message": "feat(group_theory/submonoid/membership): add log, exp lemmas (#8870)\nBreaking up a previous PR (#7843) into smaller ones.\nThis PR adds lemmas about injectivity of `pow` and `log` functions under appropriate conditions.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.238870)", "changes": [{"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "def", "log", ["submonoid"]], ["add", "theorem", "log_pow_eq_self", ["submonoid"]], ["add", "theorem", "log_pow_int_eq_self", ["submonoid"]], ["add", "def", "pow", ["submonoid"]], ["add", "theorem", "pow_log_eq_self", ["submonoid"]], ["add", "theorem", "pow_right_injective_iff_pow_injective", ["submonoid"]]]}]}, {"timestamp": 1630931152, "sha": "74373b81", "message": "feat(algebra/lattice_ordered_group): add basic theory of lattice ordered groups (#8673)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_mul_comm", []]]}, {"oldPath": null, "newPath": "src/algebra/lattice_ordered_group.lean", "changes": [["add", "theorem", "inf_mul_sup", []], ["add", "theorem", "inv_inf_eq_sup_inv", []], ["add", "theorem", "inv_sup_eq_inv_inf_inv", []], ["add", "theorem", "abs_div_sup_mul_abs_div_inf", ["lattice_ordered_comm_group"]], ["add", "theorem", "inf_eq_div_pos_div", ["lattice_ordered_comm_group"]], ["add", "theorem", "inv_le_abs", ["lattice_ordered_comm_group"]], ["add", "def", "lattice_ordered_comm_group_to_distrib_lattice", ["lattice_ordered_comm_group"]], ["add", "theorem", "le_mabs", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_Birkhoff_inequalities", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_le_iff_pos_le_neg_ge", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_le_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_le_pos", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_neg_pos", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_pos_pos", ["lattice_ordered_comm_group"]], ["add", "theorem", "m_pos_pos_id", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_idempotent", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_pos", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_pos_eq", ["lattice_ordered_comm_group"]], ["add", "theorem", "mabs_triangle", ["lattice_ordered_comm_group"]], ["add", "def", "mneg", ["lattice_ordered_comm_group"]], ["add", "def", "mpos", ["lattice_ordered_comm_group"]], ["add", "theorem", "mul_inf_eq_mul_inf_mul", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_eq_inv_inf_one", ["lattice_ordered_comm_group"]], ["add", "theorem", "neg_eq_pos_inv", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_div_neg'", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_eq_neg_inv", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_inf_neg_eq_one", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_inv_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "pos_mul_neg", ["lattice_ordered_comm_group"]], ["add", "theorem", "sup_div_inf_eq_abs_div", ["lattice_ordered_comm_group"]], ["add", "theorem", "sup_eq_mul_pos_div", ["lattice_ordered_comm_group"]], ["add", "theorem", "sup_sq_eq_mul_mul_abs_div", ["lattice_ordered_comm_group"]], ["add", "theorem", "two_inf_eq_mul_div_abs_div", ["lattice_ordered_comm_group"]], ["add", "theorem", "mul_sup_eq_mul_sup_mul", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "def", "abs", []], ["add", "theorem", "abs_eq_max_neg", []], ["add", "def", "mabs", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "abs_eq_neg_self", []], ["mod", "theorem", "abs_eq_self", []]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "coe_abs", ["hyperreal"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["add", "theorem", "lattice_of_linear_order_eq_filter_germ_lattice", ["filter", "germ"]]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1630926612, "sha": "c5636921", "message": "feat(data/polynomial/eval): leval, eval as linear map (#8999)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "def", "leval", ["polynomial"]]]}]}, {"timestamp": 1630906276, "sha": "1f103908", "message": "lint(tactic/*): break long lines (#8973)\nFor code lines, the fix was often simple, just break that damn line.\nFor strings, you shouldn't break a line inside one as this will be a visible change to the tactic's output. When nothing else can be done, I used the trick of breaking the string into two appended strings. \"A B\" becomes \"A\" ++ \" B\", and that's line-breakable.", "changes": [{"oldPath": "src/tactic/converter/interactive.lean", "newPath": "src/tactic/converter/interactive.lean", "changes": []}, {"oldPath": "src/tactic/converter/old_conv.lean", "newPath": "src/tactic/converter/old_conv.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/delta_instance.lean", "newPath": "src/tactic/delta_instance.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/generalizes.lean", "newPath": "src/tactic/generalizes.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}, {"oldPath": "src/tactic/linarith/elimination.lean", "newPath": "src/tactic/linarith/elimination.lean", "changes": []}, {"oldPath": "src/tactic/linarith/parsing.lean", "newPath": "src/tactic/linarith/parsing.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/tactic/transfer.lean", "newPath": "src/tactic/transfer.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}]}, {"timestamp": 1630899660, "sha": "1bc59c99", "message": "refactor(*): replace `function.swap` by `swap` (#8612)\nThis shortens some statements without decreasing legibility (IMO).", "changes": [{"oldPath": "src/algebra/bounds.lean", "newPath": "src/algebra/bounds.lean", "changes": []}, {"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "div_le_inv_mul_iff", []]]}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": [["mod", "theorem", "le_mul_of_one_le_of_le", []], ["mod", "theorem", "le_of_mul_le_mul_right'", []], ["mod", "theorem", "lt_mul_of_one_lt_left'", []], ["mod", "theorem", "lt_mul_of_one_lt_of_le", []], ["mod", "theorem", "lt_of_mul_lt_mul_right'", []], ["mod", "theorem", "mul'", ["monotone"]], ["mod", "theorem", "mul_const'", ["monotone"]], ["mod", "theorem", "mul_le_mul_right'", []], ["mod", "theorem", "mul_le_of_le_one_of_le", []], ["mod", "theorem", "mul_lt_mul_of_lt_of_le", []], ["mod", "theorem", "mul_lt_mul_right'", []], ["mod", "theorem", "mul_lt_of_le_one_of_lt", []], ["mod", "theorem", "mul_lt_of_lt_one_of_le", []], ["mod", "theorem", "mul_lt_one", ["right"]], ["mod", "theorem", "mul_lt_one_of_lt_of_lt_one", ["right"]], ["mod", "theorem", "one_le_mul", ["right"]], ["mod", "theorem", "one_lt_mul", ["right"]]]}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": [["mod", "theorem", "swap'", ["nat", "primrec"]], ["mod", "theorem", "swap", ["primrec₂"]]]}, {"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1630884690, "sha": "a3997288", "message": "feat(group_theory/coset): Interaction between quotient_group.mk and right multiplication by elements of the subgroup (#8970)\nTwo helpful lemmas regarding the interaction between `quotient_group.mk` and right multiplication by elements of the subgroup.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "mk_mul_of_mem", ["quotient_group"]], ["add", "theorem", "mk_out'_eq_mul", ["quotient_group"]]]}]}, {"timestamp": 1630879940, "sha": "0a94b29f", "message": "feat(data/nat/choose/vandermonde): Vandermonde's identity for binomial coefficients (#8992)\nI place this identity in a new file because the current proof depends on `polynomial`.", "changes": [{"oldPath": null, "newPath": "src/data/nat/choose/vandermonde.lean", "changes": [["add", "theorem", "add_choose_eq", ["nat"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_X_add_one_pow", ["polynomial"]], ["add", "theorem", "coeff_one_add_X_pow", ["polynomial"]]]}]}, {"timestamp": 1630808814, "sha": "9fc45d81", "message": "chore(scripts): update nolints.txt (#9014)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1630785975, "sha": "2ea1650d", "message": "fix(algebra/ordered_monoid): slay with_top monoid diamonds caused by irreducibility (#8926)\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Diamond.20in.20instances.20on.20.60with_top.20R.60\nInstead of copying over from `with_zero`, just work through the definitions directly.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1630779487, "sha": "fd0cdaee", "message": "feat(linear_algebra/pi): pi_option_equiv_prod (#9003)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "pi_option_equiv_prod", ["equiv"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "pi_option_equiv_prod", ["linear_equiv"]]]}]}, {"timestamp": 1630779486, "sha": "8ff139a0", "message": "feat(data/equiv/fin): fin_sum_fin_equiv simp lemmas (#9001)", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["mod", "theorem", "fin_sum_fin_equiv_apply_left", []], ["mod", "theorem", "fin_sum_fin_equiv_apply_right", []], ["add", "theorem", "fin_sum_fin_equiv_symm_apply_cast_add", []], ["add", "theorem", "fin_sum_fin_equiv_symm_apply_cast_add_right", []]]}]}, {"timestamp": 1630779485, "sha": "7729bb6d", "message": "feat(algebra): define \"Euclidean\" absolute values (#8949)\nWe say an absolute value `abv : absolute_value R S` is Euclidean if agrees with the Euclidean domain structure on `R`, namely `abv x < abv y ↔ euclidean_domain.r x y`.\nExamples include `abs : ℤ → ℤ` and `λ (p : polynomial Fq), (q ^ p.degree : ℤ)`, where `Fq` is a finite field with `q` elements. (These two correspond to the number field and function field case respectively, in our proof that the class number of a global field is finite.)", "changes": [{"oldPath": "src/algebra/absolute_value.lean", "newPath": "src/algebra/absolute_value.lean", "changes": [["add", "theorem", "map_sub_eq_zero_iff", ["absolute_value"]]]}, {"oldPath": null, "newPath": "src/algebra/euclidean_absolute_value.lean", "changes": [["add", "theorem", "map_lt_map_iff", ["absolute_value", "is_euclidean"]], ["add", "theorem", "sub_mod_lt", ["absolute_value", "is_euclidean"]], ["add", "structure", "is_euclidean", ["absolute_value"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/degree/card_pow_degree.lean", "changes": [["add", "theorem", "card_pow_degree_apply", ["polynomial"]], ["add", "theorem", "card_pow_degree_is_euclidean", ["polynomial"]], ["add", "theorem", "card_pow_degree_nonzero", ["polynomial"]], ["add", "theorem", "card_pow_degree_zero", ["polynomial"]]]}]}, {"timestamp": 1630779484, "sha": "28592d99", "message": "feat(set_theory/cardinal): cardinal.to_nat_mul (#8943)\n`cardinal.to_nat` distributes over multiplication.", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "cast_to_nat_of_omega_le", ["cardinal"]], ["add", "theorem", "nat_cast_injective", ["cardinal"]], ["add", "theorem", "to_nat_mul", ["cardinal"]]]}]}, {"timestamp": 1630775108, "sha": "9df3f0d4", "message": "feat(data/nat/prime): nat.prime.eq_pow_iff (#8917)\nIf a^k=p then a=p and k=1.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "eq_one_of_pow", ["nat", "prime"]], ["add", "theorem", "pow_eq_iff", ["nat", "prime"]], ["add", "theorem", "pow_not_prime'", ["nat", "prime"]]]}]}, {"timestamp": 1630768527, "sha": "a4df4609", "message": "feat(linear_algebra/matrix/symmetric): add a file (#8955)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "transpose_smul", ["matrix"]], ["mod", "theorem", "transpose_sub", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/symmetric.lean", "changes": [["add", "theorem", "add", ["matrix", "is_symm"]], ["add", "theorem", "apply", ["matrix", "is_symm"]], ["add", "theorem", "conj_transpose", ["matrix", "is_symm"]], ["add", "theorem", "eq", ["matrix", "is_symm"]], ["add", "theorem", "ext", ["matrix", "is_symm"]], ["add", "theorem", "ext_iff", ["matrix", "is_symm"]], ["add", "theorem", "from_blocks", ["matrix", "is_symm"]], ["add", "theorem", "map", ["matrix", "is_symm"]], ["add", "theorem", "minor", ["matrix", "is_symm"]], ["add", "theorem", "neg", ["matrix", "is_symm"]], ["add", "theorem", "smul", ["matrix", "is_symm"]], ["add", "theorem", "sub", ["matrix", "is_symm"]], ["add", "theorem", "transpose", ["matrix", "is_symm"]], ["add", "def", "is_symm", ["matrix"]], ["add", "theorem", "is_symm_add_transpose_self", ["matrix"]], ["add", "theorem", "is_symm_diagonal", ["matrix"]], ["add", "theorem", "is_symm_from_blocks_iff", ["matrix"]], ["add", "theorem", "is_symm_mul_transpose_self", ["matrix"]], ["add", "theorem", "is_symm_one", ["matrix"]], ["add", "theorem", "is_symm_transpose_add_self", ["matrix"]], ["add", "theorem", "is_symm_transpose_mul_self", ["matrix"]], ["add", "theorem", "is_symm_zero", ["matrix"]]]}]}, {"timestamp": 1630761719, "sha": "18d7b743", "message": "feat(data/nat/choose/dvd): generalize to division rings (#8997)", "changes": [{"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": [["mod", "theorem", "cast_add_choose", ["nat"]], ["mod", "theorem", "cast_choose", ["nat"]]]}]}, {"timestamp": 1630754480, "sha": "4435e909", "message": "feat(ring_theory/ideal/operations): ideal.pow_mem_pow (#8996)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "pow_mem_pow", ["ideal"]]]}]}, {"timestamp": 1630754479, "sha": "dcc45b42", "message": "feat(order/prime_ideal, order/boolean_algebra): small lemmas about prime ideals (#8980)\n- Added is_prime.mem_or_compl_mem \n- Added is_prime.mem_compl_of_not_mem \n- Added sup_inf_inf_compl", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "sup_inf_inf_compl", []]]}, {"oldPath": "src/order/prime_ideal.lean", "newPath": "src/order/prime_ideal.lean", "changes": [["add", "theorem", "mem_compl_of_not_mem", ["order", "ideal", "is_prime"]], ["add", "theorem", "mem_or_compl_mem", ["order", "ideal", "is_prime"]]]}]}, {"timestamp": 1630749861, "sha": "7f7f3d90", "message": "feat(ring_theory/ideal/operations): ring_hom.ker_is_maximal_of_surjective (#8990)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "ker_is_maximal_of_surjective", ["ring_hom"]]]}]}, {"timestamp": 1630743413, "sha": "9d86dad0", "message": "feat(linear_algebra/prod): lemmas about ker and range (#8989)", "changes": [{"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "fst_surjective", ["linear_map"]], ["add", "theorem", "ker_fst", ["linear_map"]], ["add", "theorem", "ker_snd", ["linear_map"]], ["add", "theorem", "range_inl", ["linear_map"]], ["add", "theorem", "range_inr", ["linear_map"]], ["add", "theorem", "snd_surjective", ["linear_map"]]]}]}, {"timestamp": 1630743412, "sha": "855613ee", "message": "feat(linear_algebra/basic): galois insertion lemmas for map and comap (#8978)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comap_injective_of_surjective", ["submodule"]], ["add", "theorem", "comap_le_comap_iff_of_surjective", ["submodule"]], ["add", "theorem", "comap_strict_mono_of_surjective", ["submodule"]], ["add", "def", "gi_map_comap", ["submodule"]], ["add", "theorem", "map_comap_eq_of_surjective", ["submodule"]], ["add", "theorem", "map_inf_comap_of_surjective", ["submodule"]], ["add", "theorem", "map_infi_comap_of_surjective", ["submodule"]], ["add", "theorem", "map_sup_comap_of_surjective", ["submodule"]], ["add", "theorem", "map_supr_comap_of_sujective", ["submodule"]], ["add", "theorem", "map_surjective_of_surjective", ["submodule"]]]}]}, {"timestamp": 1630737977, "sha": "b57af8a5", "message": "feat(category_theory/basic/category): Combine and improve API on preorder categories. (#8982)\nMaterial on preorders as categories was previously scattered throughout the library. This PR unites this material into a single file `category_theory/category/preorder` and also expands upon it, by relating adjoints to galois connections.", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["del", "def", "hom_of_le", ["category_theory"]], ["del", "theorem", "hom_of_le_comp", ["category_theory"]], ["del", "theorem", "hom_of_le_le_of_hom", ["category_theory"]], ["del", "theorem", "hom_of_le_refl", ["category_theory"]], ["del", "theorem", "le_of_hom", ["category_theory"]], ["del", "theorem", "le_of_hom_hom_of_le", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/category/preorder.lean", "changes": [["add", "def", "Preorder_to_Cat", ["category_theory"]], ["add", "theorem", "gc", ["category_theory", "adjunction"]], ["add", "def", "to_order_iso", ["category_theory", "equivalence"]], ["add", "theorem", "to_order_iso_apply", ["category_theory", "equivalence"]], ["add", "theorem", "to_order_iso_symm_apply", ["category_theory", "equivalence"]], ["add", "theorem", "monotone", ["category_theory", "functor"]], ["add", "def", "hom_of_le", ["category_theory"]], ["add", "theorem", "hom_of_le_comp", ["category_theory"]], ["add", "theorem", "hom_of_le_le_of_hom", ["category_theory"]], ["add", "theorem", "hom_of_le_refl", ["category_theory"]], ["add", "theorem", "to_eq", ["category_theory", "iso"]], ["add", "theorem", "le_of_hom", ["category_theory"]], ["add", "theorem", "le_of_hom_hom_of_le", ["category_theory"]], ["add", "theorem", "le_of_op_hom", ["category_theory"]], ["add", "def", "op_hom_of_le", ["category_theory"]], ["add", "def", "adjunction", ["galois_connection"]], ["add", "def", "functor", ["monotone"]], ["add", "theorem", "functor_obj", ["monotone"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["del", "def", "to_order_iso", ["category_theory", "equivalence"]], ["del", "theorem", "to_order_iso_apply", ["category_theory", "equivalence"]], ["del", "theorem", "to_order_iso_symm_apply", ["category_theory", "equivalence"]]]}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["del", "theorem", "monotone", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["del", "theorem", "to_eq", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "le_of_op_hom", ["category_theory"]], ["del", "def", "op_hom_of_le", ["category_theory"]]]}, {"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}]}, {"timestamp": 1630722364, "sha": "b9d8081e", "message": "chore(scripts): update nolints.txt (#8987)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1630715232, "sha": "464c3d73", "message": "chore(group_theory/group_action/defs): weaken assumptions of `mul_smul_comm` and `smul_mul_assoc` (#8972)", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "theorem", "mul_smul_comm", []], ["mod", "theorem", "smul_mul_assoc", []]]}]}, {"timestamp": 1630715231, "sha": "6ab66958", "message": "docs(topology/algebra/floor_ring): add module docstring (#8969)", "changes": [{"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}]}, {"timestamp": 1630709837, "sha": "66cb5e07", "message": "fix(data/setoid/partition): make def more readable (#8951)\nIf we change the statement of `partition.order_iso` from `setoid α ≃o subtype (@is_partition α)` to `setoid α ≃o {C : set (set α) // is_partition C}` then this doesn't change anything up to defeq and it's much easier for a beginner to read, as well as avoiding the `@`. I also change some variable names. Why? I want to show this part of this file to undergraduates and I want to make it look as easy and nice as possible.", "changes": [{"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}]}, {"timestamp": 1630709836, "sha": "93a15d6b", "message": "feat(ring_theory/subring): field structure on centers of a division_ring (#8472)\nI've also tidied up the subtitles. Previously there was a mix of h1 and h3s, I've made them all h2s.", "changes": [{"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": [["add", "theorem", "div_mem_center'", ["set"]], ["add", "theorem", "div_mem_center", ["set"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "coe_div", ["subring", "center"]], ["add", "theorem", "coe_inv", ["subring", "center"]]]}]}, {"timestamp": 1630702429, "sha": "3a0dddcc", "message": "feat(algebra/order_functions): (min|max)_eq_iff (#8911)", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "max_eq_iff", []], ["add", "theorem", "min_eq_iff", []]]}]}, {"timestamp": 1630702428, "sha": "39cea43a", "message": "docs(data/subtype): add module docstring (#8900)", "changes": [{"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "def", "coind", ["subtype"]], ["mod", "theorem", "coind_bijective", ["subtype"]], ["mod", "theorem", "coind_injective", ["subtype"]], ["mod", "theorem", "coind_surjective", ["subtype"]], ["mod", "def", "map", ["subtype"]], ["mod", "theorem", "map_id", ["subtype"]], ["mod", "theorem", "map_injective", ["subtype"]], ["mod", "theorem", "map_involutive", ["subtype"]], ["mod", "def", "restrict", ["subtype"]], ["mod", "theorem", "restrict_apply", ["subtype"]]]}]}, {"timestamp": 1630694905, "sha": "710a76e7", "message": "chore(algebra/divisibility): help dot notation on `dvd` (#8766)\nAdd aliases\n* `dvd_mul_of_dvd_left` -> `has_dvd.dvd.mul_right`\n* `dvd_mul_of_dvd_right` -> `has_dvd.dvd.mul_left`\nAdd, to help with a few proofs,\n* `dvd_rfl`\n* `dvd_pow_self`\nUse `has_dvd.dvd.trans` more largely.", "changes": [{"oldPath": "archive/imo/imo1959_q1.lean", "newPath": "archive/imo/imo1959_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo2011_q5.lean", "newPath": "archive/imo/imo2011_q5.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "dvd_rfl", []], ["mod", "theorem", "one_dvd", []]]}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/basic.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": [["mod", "theorem", "dvd_lcm_left", []], ["mod", "theorem", "dvd_lcm_right", []]]}, {"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "dvd_pow", []], ["add", "theorem", "dvd_pow_self", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "theorem", "asq_pos", ["pell"]], ["mod", "def", "az", ["pell"]], ["mod", "theorem", "d_pos", ["pell"]], ["mod", "theorem", "dvd_of_ysq_dvd", ["pell"]], ["mod", "theorem", "dz_val", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq'", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_le", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_lem1", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_lem2", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_lem3", ["pell"]], ["mod", "theorem", "eq_pell", ["pell"]], ["mod", "theorem", "eq_pell_lem", ["pell"]], ["mod", "theorem", "eq_pell_zd", ["pell"]], ["mod", "def", "is_pell", ["pell"]], ["mod", "theorem", "is_pell_conj", ["pell"]], ["mod", "theorem", "is_pell_mul", ["pell"]], ["mod", "theorem", "is_pell_nat", ["pell"]], ["mod", "theorem", "is_pell_norm", ["pell"]], ["mod", "theorem", "is_pell_one", ["pell"]], ["mod", "theorem", "is_pell_pell_zd", ["pell"]], ["mod", "theorem", "modeq_of_xn_modeq", ["pell"]], ["mod", "theorem", "n_lt_a_pow", ["pell"]], ["mod", "theorem", "n_lt_xn", ["pell"]], ["mod", "def", "pell", ["pell"]], ["mod", "theorem", "pell_eq", ["pell"]], ["mod", "theorem", "pell_eqz", ["pell"]], ["mod", "theorem", "pell_val", ["pell"]], ["mod", "def", "pell_zd", ["pell"]], ["mod", "theorem", "pell_zd_add", ["pell"]], ["mod", "theorem", "pell_zd_im", ["pell"]], ["mod", "theorem", "pell_zd_re", ["pell"]], ["mod", "theorem", "pell_zd_sub", ["pell"]], ["mod", "theorem", "pell_zd_succ", ["pell"]], ["mod", "theorem", "pell_zd_succ_succ", ["pell"]], ["mod", "theorem", "x_increasing", ["pell"]], ["mod", "theorem", "x_pos", ["pell"]], ["mod", "theorem", "x_sub_y_dvd_pow", ["pell"]], ["mod", "theorem", "x_sub_y_dvd_pow_lem", ["pell"]], ["mod", "def", "xn", ["pell"]], ["mod", "theorem", "xn_add", ["pell"]], ["mod", "theorem", "xn_ge_a_pow", ["pell"]], ["mod", "theorem", "xn_modeq_x2n_add", ["pell"]], ["mod", "theorem", "xn_modeq_x2n_add_lem", ["pell"]], ["mod", "theorem", "xn_modeq_x2n_sub", ["pell"]], ["mod", "theorem", "xn_modeq_x2n_sub_lem", ["pell"]], ["mod", "theorem", "xn_modeq_x4n_add", ["pell"]], ["mod", "theorem", "xn_modeq_x4n_sub", ["pell"]], ["mod", "theorem", "xn_one", ["pell"]], ["mod", "theorem", "xn_succ", ["pell"]], ["mod", "theorem", "xn_succ_succ", ["pell"]], ["mod", "theorem", "xn_zero", ["pell"]], ["mod", "theorem", "xy_coprime", ["pell"]], ["mod", "theorem", "xy_modeq_yn", ["pell"]], ["mod", "theorem", "xy_succ_succ", ["pell"]], ["mod", "def", "xz", ["pell"]], ["mod", "theorem", "xz_sub", ["pell"]], ["mod", "theorem", "xz_succ", ["pell"]], ["mod", "theorem", "xz_succ_succ", ["pell"]], ["mod", "theorem", "y_dvd_iff", ["pell"]], ["mod", "theorem", "y_increasing", ["pell"]], ["mod", "theorem", "y_mul_dvd", ["pell"]], ["mod", "def", "yn", ["pell"]], ["mod", "theorem", "yn_add", ["pell"]], ["mod", "theorem", "yn_ge_n", ["pell"]], ["mod", "theorem", "yn_modeq_a_sub_one", ["pell"]], ["mod", "theorem", "yn_modeq_two", ["pell"]], ["mod", "theorem", "yn_one", ["pell"]], ["mod", "theorem", "yn_succ", ["pell"]], ["mod", "theorem", "yn_succ_succ", ["pell"]], ["mod", "theorem", "yn_zero", ["pell"]], ["mod", "theorem", "ysq_dvd_yy", ["pell"]], ["mod", "def", "yz", ["pell"]], ["mod", "theorem", "yz_sub", ["pell"]], ["mod", "theorem", "yz_succ", ["pell"]], ["mod", "theorem", "yz_succ_succ", ["pell"]]]}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1630662984, "sha": "5e27f509", "message": "feat(analysis/complex/basic): convex_on.sup (#8958)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "inf", ["concave_on"]], ["add", "theorem", "sup", ["convex_on"]]]}]}, {"timestamp": 1630619449, "sha": "fdc24f53", "message": "feat(algebra/ordered_ring): `linear_ordered_semiring` extends `linear_ordered_add_comm_monoid` (#8961)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}]}, {"timestamp": 1630609669, "sha": "d821860f", "message": "feat(group_theory/group_action/basic): class formula, Burnside's lemma (#8801)\nThis adds class formula and Burnside's lemma for group action, both as an equiv and using cardinals.\nI also added a cardinal version of the Orbit-stabilizer theorem.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "sigma_assoc", ["equiv"]]]}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "stabilizer_vadd_eq_stabilizer_map_conj", ["add_action"]], ["add", "theorem", "card_eq_sum_card_group_div_card_stabilizer'", ["mul_action"]], ["add", "theorem", "card_eq_sum_card_group_div_card_stabilizer", ["mul_action"]], ["add", "theorem", "card_orbit_mul_card_stabilizer_eq_card_group", ["mul_action"]], ["add", "def", "self_equiv_sigma_orbits'", ["mul_action"]], ["add", "theorem", "stabilizer_smul_eq_stabilizer_map_conj", ["mul_action"]], ["add", "theorem", "sum_card_fixed_by_eq_card_orbits_mul_card_group", ["mul_action"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "def", "subgroup_equiv_map", ["mul_equiv"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "def", "submonoid_equiv_map", ["mul_equiv"]]]}]}, {"timestamp": 1630596096, "sha": "17747c09", "message": "feat(number_theory): define number fields, function fields and their rings of integers (#8701)\nCo-Authored-By: Ashvni ", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "of_algebra", ["char_zero"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": null, "newPath": "src/number_theory/function_field.lean", "changes": [["add", "def", "ring_of_integers", ["function_field"]], ["add", "def", "function_field", []]]}, {"oldPath": null, "newPath": "src/number_theory/number_field.lean", "changes": [["add", "theorem", "is_integral_coe", ["number_field", "ring_of_integers"]], ["add", "def", "ring_of_integers", ["number_field"]]]}, {"oldPath": "src/ring_theory/integrally_closed.lean", "newPath": "src/ring_theory/integrally_closed.lean", "changes": [["add", "theorem", "is_integrally_closed_of_finite_extension", ["integral_closure"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "theorem", "epic_of_localization_map", ["is_localization"]], ["add", "theorem", "monoid_hom_ext", ["is_localization"]], ["add", "theorem", "ring_hom_ext", ["is_localization"]]]}]}, {"timestamp": 1630593326, "sha": "88525a98", "message": "feat(ring_theory/ideal): generalize from `integral_closure` to `is_integral_closure` (#8944)\nThis PR restates a couple of lemmas about ideals the integral closure to use an instance of `is_integral_closure` instead. The originals are still available, but their proofs are now oneliners shelling out to `is_integral_closure`.", "changes": []}, {"timestamp": 1630585511, "sha": "55a7d385", "message": "feat(group_theory/coset): rw lemmas involving quotient_group.mk (#8957)\nWhen doing computations with quotient groups, I found these lemmas to be helpful when rewriting.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "eq'", ["quotient_group"]], ["add", "theorem", "out_eq'", ["quotient_group"]]]}]}, {"timestamp": 1630585509, "sha": "baefdf34", "message": "fix(group_theory/group_action/defs): deduplicate `const_smul_hom` and `distrib_mul_action.to_add_monoid_hom` (#8953)\nThis removes `const_smul_hom` as `distrib_mul_action.to_add_monoid_hom` fits a larger family of similarly-named definitions.\nThis also renames `distrib_mul_action.hom_add_monoid_hom` to `distrib_mul_action.to_add_monoid_End` to better match its statement.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Definition.20elimination.20contest/near/237347199)", "changes": [{"oldPath": "src/algebra/direct_sum/algebra.lean", "newPath": "src/algebra/direct_sum/algebra.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "def", "hom_add_monoid_hom", ["distrib_mul_action"]], ["del", "def", "to_add_monoid_hom", ["distrib_mul_action"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["del", "def", "const_smul_hom", []], ["del", "theorem", "const_smul_hom_apply", []], ["del", "theorem", "const_smul_hom_one", []], ["add", "def", "to_add_monoid_End", ["distrib_mul_action"]], ["add", "def", "to_add_monoid_hom", ["distrib_mul_action"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1630578852, "sha": "1dddd7f9", "message": "feat(algebra/group/hom_instance): additive endomorphisms form a ring (#8954)\nWe already have all the data to state this, this just provides the extra proofs.\nThe multiplicative version is nasty because `monoid.End` has two different multiplicative structures depending on whether `End` is unfolded; so this PR leaves that until someone actually needs it.\nWith this in place we can provide `module.to_add_monoid_End : R →+* add_monoid.End M` in a future PR.", "changes": [{"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}]}, {"timestamp": 1630575118, "sha": "2fa82513", "message": "refactor(*): rename {topological,smooth}_semiring to {topological,smooth}_ring (#8902)\nA topological semiring that is a ring, is a topological ring.\nA smooth semiring that is a ring, is a smooth ring.\nThis PR renames:\n* `topological_semiring` -> `topological_ring`\n* `smooth_semiring` -> `smooth_ring`\nIt drops the existing `topological_ring` and `smooth_ring`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": [["mod", "theorem", "topological_ring_of_smooth", []], ["del", "theorem", "topological_semiring_of_smooth", []]]}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": [["mod", "theorem", "continuous_algebra_map", []], ["mod", "theorem", "continuous_algebra_map_iff_smul", []], ["mod", "theorem", "has_continuous_smul_of_algebra_map", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/polynomial.lean", "newPath": "src/topology/continuous_function/polynomial.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1630570757, "sha": "289e6dc6", "message": "feat(category_theory/limits/kan_extension): Prove (co)reflectivity for Kan extensions (#8962)", "changes": [{"oldPath": "src/category_theory/limits/kan_extension.lean", "newPath": "src/category_theory/limits/kan_extension.lean", "changes": [["add", "theorem", "coreflective", ["category_theory", "Lan"]], ["add", "theorem", "reflective", ["category_theory", "Ran"]]]}]}, {"timestamp": 1630570756, "sha": "8da6699f", "message": "chore(analysis/convex/basic): generalize `concave_on.le_on_segment` to monoids (#8959)\nThis matches the generalization already present on `convex_on.le_on_segment`.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "le_on_segment", ["concave_on"]]]}]}, {"timestamp": 1630570754, "sha": "9d3e3e8a", "message": "feat(ring_theory/dedekind_domain): the integral closure of a DD is a DD (#8847)\nLet `L` be a finite separable extension of `K = Frac(A)`, where `A` is a Dedekind domain. Then any `is_integral_closure C A L` is also a Dedekind domain, in particular for `C := integral_closure A L`.\nIn combination with the definitions of #8701, we can conclude that rings of integers are Dedekind domains.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "theorem", "exists_integral_multiples", []], ["add", "theorem", "exists_is_basis_integral", ["finite_dimensional"]], ["add", "theorem", "is_dedekind_domain", ["integral_closure"]], ["add", "theorem", "is_noetherian_ring", ["integral_closure"]], ["add", "theorem", "integral_closure_le_span_dual_basis", []], ["add", "theorem", "is_dedekind_domain", ["is_integral_closure"]], ["add", "theorem", "is_noetherian_ring", ["is_integral_closure"]], ["add", "theorem", "range_le_span_dual_basis", ["is_integral_closure"]], ["add", "theorem", "is_integral_closure", ["ring", "dimension_le_one"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["add", "theorem", "comap_lt_comap", ["ideal", "is_integral_closure"]], ["add", "theorem", "comap_ne_bot", ["ideal", "is_integral_closure"]], ["add", "theorem", "eq_bot_of_comap_eq_bot", ["ideal", "is_integral_closure"]], ["add", "theorem", "is_maximal_of_is_maximal_comap", ["ideal", "is_integral_closure"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_fraction_ring_of_algebraic", ["is_integral_closure"]], ["add", "theorem", "is_fraction_ring_of_finite_extension", ["is_integral_closure"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["mod", "theorem", "det_trace_form_ne_zero", []], ["add", "theorem", "trace_form_nondegenerate", []]]}]}, {"timestamp": 1630563379, "sha": "6c247315", "message": "feat(order/bounded_lattice): `ne_(bot|top)_iff_exists` (#8960)\nLike `ne_zero_iff_exists`", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "ne_bot_iff_exists", ["with_bot"]], ["add", "theorem", "ne_top_iff_exists", ["with_top"]]]}]}, {"timestamp": 1630524302, "sha": "07c57b56", "message": "feat(group_theory): Add `monoid_hom.mker` and generalise the codomain for `monoid_hom.ker` (#8532)\nAdd `monoid_hom.mker` for `f : M ->* N`, where `M` and `N` are `mul_one_class`es, and `monoid_hom.ker` is now defined for `f : G ->* H`, where `H` is a `mul_one_class`", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "coe_ker", ["monoid_hom"]], ["mod", "def", "ker", ["monoid_hom"]], ["mod", "theorem", "ker_one", ["monoid_hom"]], ["mod", "theorem", "mem_ker", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "coe_mker", ["monoid_hom"]], ["add", "theorem", "comap_bot'", ["monoid_hom"]], ["add", "theorem", "comap_mker", ["monoid_hom"]], ["add", "theorem", "mem_mker", ["monoid_hom"]], ["add", "def", "mker", ["monoid_hom"]], ["add", "theorem", "mker_one", ["monoid_hom"]], ["add", "theorem", "mker_prod_map", ["monoid_hom"]], ["add", "theorem", "prod_map_comap_prod'", ["monoid_hom"]], ["add", "theorem", "range_restrict_mker", ["monoid_hom"]]]}]}, {"timestamp": 1630516773, "sha": "0b8a858f", "message": "feat(tactic/lint): minor linter improvements (#8934)\n* Change `#print foo` with `#check @foo` in the output of the linter\n* Include the number of linters in the output message\n* add `attribute [nolint syn_taut] rfl`", "changes": [{"oldPath": "scripts/lint_mathlib.lean", "newPath": "scripts/lint_mathlib.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1630510690, "sha": "9b000466", "message": "chore(algebra,group_theory,right_theory,linear_algebra): add missing lemmas (#8948)\nThis adds:\n* `sub{group,ring,semiring}.map_id`\n* `submodule.add_mem_sup`\n* `submodule.map_add_le`\nAnd moves `submodule.sum_mem_supr` and `submodule.sum_mem_bsupr` to an earlier file.", "changes": [{"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "theorem", "add_mem_sup", ["submodule"]], ["add", "theorem", "sum_mem_bsupr", ["submodule"]], ["add", "theorem", "sum_mem_supr", ["submodule"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "map_id", ["subgroup"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "map_add_le", ["submodule"]], ["del", "theorem", "sum_mem_bsupr", ["submodule"]], ["del", "theorem", "sum_mem_supr", ["submodule"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "map_id", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "map_id", ["subsemiring"]]]}]}, {"timestamp": 1630505264, "sha": "2beaa28a", "message": "fix(category_theory/adjunction/basic): Fix typo in docstring (#8950)", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}]}, {"timestamp": 1630505262, "sha": "510e65d7", "message": "feat(topology/algebra/localization): add topological localization (#8894)\nWe show that ring topologies on a ring `R` form a complete lattice.\nWe use this to define the topological localization of a topological commutative ring `R` at a submonoid `M`.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/localization.lean", "changes": [["add", "def", "ring_topology", ["localization"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "def", "coinduced", ["ring_topology"]], ["add", "theorem", "coinduced_continuous", ["ring_topology"]], ["add", "theorem", "ext'", ["ring_topology"]], ["add", "structure", "ring_topology", []]]}]}, {"timestamp": 1630498594, "sha": "d472e1bd", "message": "feat(order/basic): recursor for order_dual (#8938)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": []}]}, {"timestamp": 1630498593, "sha": "0970d07d", "message": "feat(order/well_founded): define `function.argmin`, `function.argmin_on` (#8895)\nEvidently, these are just thin wrappers around `well_founded.min` but I think\nthis use case is common enough to deserve this specialisation.", "changes": [{"oldPath": "src/order/well_founded.lean", "newPath": "src/order/well_founded.lean", "changes": [["add", "theorem", "argmin_le", ["function"]], ["add", "theorem", "argmin_on_le", ["function"]], ["add", "theorem", "argmin_on_mem", ["function"]], ["add", "theorem", "not_lt_argmin", ["function"]], ["add", "theorem", "not_lt_argmin_on", ["function"]]]}]}, {"timestamp": 1630498592, "sha": "faf5e5c9", "message": "feat(order/bounded_lattice): unbot and untop (#8885)\n`unbot` sends non-`⊥` elements of `with_bot α` to the corresponding element of `α`. `untop` does the analogous thing for `with_top`.", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "def", "unbot", ["with_bot"]], ["add", "theorem", "unbot_coe", ["with_bot"]], ["add", "def", "untop", ["with_top"]], ["add", "theorem", "untop_coe", ["with_top"]]]}]}, {"timestamp": 1630492559, "sha": "f3101e82", "message": "feat(group_theory/perm/basic): permutations of a subtype (#8691)\nThis is the same as `(equiv.refl _)^.set.compl .symm.trans (subtype_equiv_right $ by simp)` (up to a `compl`) but with better unfolding.", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "subtype_equiv_subtype_perm_apply_of_mem", ["equiv", "perm"]], ["add", "theorem", "subtype_equiv_subtype_perm_apply_of_not_mem", ["equiv", "perm"]]]}]}, {"timestamp": 1630482341, "sha": "73f50ac6", "message": "feat(algebraic_geometry): Redefine Schemes in terms of isos of locally ringed spaces (#8888)\nAddresses the project mentioned in `Scheme.lean` to redefine Schemes in terms of isomorphisms of locally ringed spaces, instead of presheafed spaces.", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": [["add", "def", "restrict_top_iso", ["algebraic_geometry", "SheafedSpace"]]]}]}, {"timestamp": 1630482339, "sha": "5b04a896", "message": "feat(measure_theory/conditional_expectation): the integral of the norm of the conditional expectation is lower (#8318)\nLet `m` be a sub-σ-algebra of `m0`, `f` a `m0`-measurable function and `g` a `m`-measurable function, such that their integrals coincide on `m`-measurable sets with finite measure. Then `∫ x in s, ∥g x∥ ∂μ ≤ ∫ x in s, ∥f x∥ ∂μ` on all `m`-measurable sets with finite measure.\nThis PR also defines a notation `measurable[m] f`, to mean that `f : α → β` is measurable with respect to the `measurable_space` `m` on `α`.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "indicator_le_indicator_nonneg", ["set"]], ["add", "theorem", "indicator_nonpos_le_indicator", ["set"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "integral_norm_le_of_forall_fin_meas_integral_eq", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_le_of_forall_fin_meas_integral_eq", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["add", "theorem", "of_real_integral_norm_eq_lintegral_nnnorm", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "lintegral_add_compl", ["measure_theory"]], ["add", "theorem", "set_lintegral_congr_fun", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": [["add", "theorem", "integral_norm_eq_pos_sub_neg", ["measure_theory"]], ["add", "theorem", "set_integral_eq_zero_of_forall_eq_zero", ["measure_theory"]], ["add", "theorem", "set_integral_le_nonneg", ["measure_theory"]], ["add", "theorem", "set_integral_neg_eq_set_integral_nonpos", ["measure_theory"]], ["add", "theorem", "set_integral_nonpos_le", ["measure_theory"]], ["add", "theorem", "set_integral_union_eq_left", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}]}, {"timestamp": 1630475821, "sha": "f0451d80", "message": "feat(algebra/group/defs): ext lemmas for (semi)groups and monoids (#8391)\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.236476.20boolean_algebra.2Eto_boolean_ring/near/242118386)", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["add", "theorem", "ext", ["cancel_comm_monoid"]], ["add", "theorem", "to_comm_monoid_injective", ["cancel_comm_monoid"]], ["add", "theorem", "ext", ["cancel_monoid"]], ["add", "theorem", "to_left_cancel_monoid_injective", ["cancel_monoid"]], ["add", "theorem", "ext", ["comm_group"]], ["add", "theorem", "to_group_injective", ["comm_group"]], ["add", "theorem", "ext", ["comm_monoid"]], ["add", "theorem", "to_monoid_injective", ["comm_monoid"]], ["add", "theorem", "ext", ["div_inv_monoid"]], ["add", "theorem", "ext", ["group"]], ["add", "theorem", "to_div_inv_monoid_injective", ["group"]], ["add", "theorem", "ext", ["left_cancel_monoid"]], ["add", "theorem", "to_monoid_injective", ["left_cancel_monoid"]], ["add", "theorem", "ext", ["monoid"]], ["add", "theorem", "ext", ["mul_one_class"]], ["add", "theorem", "ext", ["right_cancel_monoid"]], ["add", "theorem", "to_monoid_injective", ["right_cancel_monoid"]]]}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}]}, {"timestamp": 1630450850, "sha": "065a35dc", "message": "feat(algebra/{pointwise,algebra/operations}): add `supr_mul` and `mul_supr` (#8923)\nRequested by @eric-wieser on Zulip, https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/submodule.2Esupr_mul/near/250122435\nand a couple of helper lemmas.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "mul_eq_span_mul_set", ["submodule"]], ["add", "theorem", "mul_supr", ["submodule"]], ["add", "theorem", "supr_mul", ["submodule"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "Union_mul", ["set"]], ["add", "theorem", "mul_Union", ["set"]]]}]}, {"timestamp": 1630445469, "sha": "93390069", "message": "feat(algebra/{module/linear_map, algebra/basic}): Add `distrib_mul_action.to_linear_(map|equiv)` and `mul_semiring_action.to_alg_(hom|equiv)` (#8936)\nThis adds the following stronger versions of `distrib_mul_action.to_add_monoid_hom`:\n* `distrib_mul_action.to_linear_map`\n* `distrib_mul_action.to_linear_equiv`\n* `mul_semiring_action.to_alg_hom`\n* `mul_semiring_action.to_alg_equiv`\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/group.20acting.20on.20algebra/near/251372497)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "to_alg_equiv", ["mul_semiring_action"]], ["add", "def", "to_alg_hom", ["mul_semiring_action"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "def", "to_ring_equiv", ["mul_semiring_action"]], ["del", "def", "to_semiring_equiv", ["mul_semiring_action"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "to_linear_equiv", ["distrib_mul_action"]], ["add", "def", "to_linear_map", ["distrib_mul_action"]]]}]}, {"timestamp": 1630424430, "sha": "3d6a8285", "message": "chore(order/bounded_lattice): dot-notation lemmas ne.bot_lt and ne.lt_top (#8935)", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_lt'", ["ne"]], ["add", "theorem", "bot_lt", ["ne"]], ["add", "theorem", "lt_top'", ["ne"]], ["add", "theorem", "lt_top", ["ne"]]]}]}, {"timestamp": 1630424429, "sha": "12bbd533", "message": "chore(topology/metric_space/basic): add `metric.uniform_continuous_on_iff_le` (#8906)\nThis is a version of `metric.uniform_continuous_on_iff` with `≤ δ` and\n`≤ ε` instead of `< δ` and `< ε`. Also golf the proof of\n`metric.uniform_continuous_on_iff`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_on_iff_le", ["metric"]]]}]}, {"timestamp": 1630424428, "sha": "603a6066", "message": "feat(measure_theory/hausdorff_measure): dimH and Hölder/Lipschitz maps (#8361)\n* expand module docs;\n* prove that a Lipschitz continuous map does not increase Hausdorff measure and Hausdorff dimension of sets;\n* prove similar lemmas about Hölder continuous and antilipschitz maps;\n* add convenience lemmas for some bundled types and for `Cⁿ` smooth maps;\n* Hausdorff dimension of `ℝⁿ` equals `n`;\n* prove a baby version of Sard's theorem: if `f : E → F` is a `C¹` smooth map between normed vector spaces such that `finrank ℝ E < finrank ℝ F`, then `(range f)ᶜ` is dense.", "changes": [{"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["add", "theorem", "dimH_preimage_le", ["antilipschitz_with"]], ["add", "theorem", "hausdorff_measure_preimage_le", ["antilipschitz_with"]], ["add", "theorem", "le_dimH_image", ["antilipschitz_with"]], ["add", "theorem", "le_hausdorff_measure_image", ["antilipschitz_with"]], ["add", "theorem", "dimH_image", ["continuous_linear_equiv"]], ["add", "theorem", "dimH_preimage", ["continuous_linear_equiv"]], ["add", "theorem", "dimH_univ", ["continuous_linear_equiv"]], ["add", "theorem", "dense_compl_of_dimH_lt_finrank", []], ["add", "theorem", "dimH_image_le_of_locally_holder_on", []], ["add", "theorem", "dimH_image_le_of_locally_lipschitz_on", []], ["add", "theorem", "dimH_range_le_of_locally_holder_on", []], ["add", "theorem", "dimH_range_le_of_locally_lipschitz_on", []], ["add", "theorem", "dimH_image_le", ["holder_on_with"]], ["add", "theorem", "hausdorff_measure_image_le", ["holder_on_with"]], ["add", "theorem", "dimH_image_le", ["holder_with"]], ["add", "theorem", "dimH_range_le", ["holder_with"]], ["add", "theorem", "dimH_image", ["isometric"]], ["add", "theorem", "dimH_preimage", ["isometric"]], ["add", "theorem", "dimH_univ", ["isometric"]], ["add", "theorem", "hausdorff_measure_image", ["isometric"]], ["add", "theorem", "hausdorff_measure_preimage", ["isometric"]], ["add", "theorem", "dimH_image", ["isometry"]], ["add", "theorem", "hausdorff_measure_image", ["isometry"]], ["add", "theorem", "hausdorff_measure_preimage", ["isometry"]], ["add", "theorem", "map_hausdorff_measure", ["isometry"]], ["add", "theorem", "dimH_image_le", ["lipschitz_on_with"]], ["add", "theorem", "hausdorff_measure_image_le", ["lipschitz_on_with"]], ["add", "theorem", "dimH_image_le", ["lipschitz_with"]], ["add", "theorem", "dimH_range_le", ["lipschitz_with"]], ["add", "theorem", "hausdorff_measure_image_le", ["lipschitz_with"]], ["add", "theorem", "dimH_le_of_hausdorff_measure_ne_top", ["measure_theory"]], ["add", "theorem", "dimH_of_hausdorff_measure_ne_zero_ne_top", ["measure_theory"]], ["mod", "theorem", "hausdorff_measure_pi_real", ["measure_theory"]], ["add", "theorem", "le_dimH_of_hausdorff_measure_ne_zero", ["measure_theory"]], ["add", "theorem", "dimH_ball_pi", ["real"]], ["add", "theorem", "dimH_ball_pi_fin", ["real"]], ["add", "theorem", "dimH_of_mem_nhds", ["real"]], ["add", "theorem", "dimH_of_nonempty_interior", ["real"]], ["add", "theorem", "dimH_univ", ["real"]], ["add", "theorem", "dimH_univ_eq_finrank", ["real"]], ["add", "theorem", "dimH_univ_pi", ["real"]], ["add", "theorem", "dimH_univ_pi_fin", ["real"]], ["add", "theorem", "dense_compl_range_of_finrank_lt_finrank", ["times_cont_diff"]], ["add", "theorem", "dimH_range_le", ["times_cont_diff"]], ["add", "theorem", "dense_compl_image_of_dimH_lt_finrank", ["times_cont_diff_on"]], ["add", "theorem", "dimH_image_le", ["times_cont_diff_on"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "countable_cover_nhds_within", ["topological_space"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "mem_nhds_subtype_iff_nhds_within", []], ["add", "theorem", "preimage_coe_mem_nhds_subtype", []]]}]}, {"timestamp": 1630418314, "sha": "d9b2db99", "message": "chore(group_theory/submonoid/center): fix typo and extend docstring (#8937)", "changes": [{"oldPath": "src/group_theory/submonoid/center.lean", "newPath": "src/group_theory/submonoid/center.lean", "changes": []}]}, {"timestamp": 1630407255, "sha": "ab967d23", "message": "feat(group_theory/submonoid): center of a submonoid (#8921)\nThis adds `set.center`, `submonoid.center`, `subsemiring.center`, and `subring.center`, to complement the existing `subgroup.center`.\nThis ran into a timeout, so had to squeeze some `simp`s in an unrelated file.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "center_to_submonoid", ["subgroup"]], ["add", "theorem", "coe_center", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/group_theory/submonoid/center.lean", "changes": [["add", "theorem", "add_mem_center", ["set"]], ["add", "def", "center", ["set"]], ["add", "theorem", "center_eq_univ", ["set"]], ["add", "theorem", "center_units_eq", ["set"]], ["add", "theorem", "center_units_subset", ["set"]], ["add", "theorem", "inv_mem_center'", ["set"]], ["add", "theorem", "inv_mem_center", ["set"]], ["add", "theorem", "mem_center_iff", ["set"]], ["add", "theorem", "mul_mem_center", ["set"]], ["add", "theorem", "neg_mem_center", ["set"]], ["add", "theorem", "one_mem_center", ["set"]], ["add", "theorem", "subset_center_units", ["set"]], ["add", "theorem", "zero_mem_center", ["set"]], ["add", "def", "center", ["submonoid"]], ["add", "theorem", "center_eq_top", ["submonoid"]], ["add", "theorem", "coe_center", ["submonoid"]], ["add", "theorem", "mem_center_iff", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "def", "center", ["subring"]], ["add", "theorem", "center_eq_top", ["subring"]], ["add", "theorem", "center_to_subsemiring", ["subring"]], ["add", "theorem", "coe_center", ["subring"]], ["add", "theorem", "mem_center_iff", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "def", "center", ["subsemiring"]], ["add", "theorem", "center_eq_top", ["subsemiring"]], ["add", "theorem", "center_to_submonoid", ["subsemiring"]], ["add", "theorem", "coe_center", ["subsemiring"]], ["add", "theorem", "mem_center_iff", ["subsemiring"]]]}]}, {"timestamp": 1630400678, "sha": "6b63c034", "message": "fix(order/rel_classes): remove looping instance (#8931)\nThis instance causes loop with `is_total_preorder.to_is_total`, and was unused in the library.\nCaught by the new linter (#8932).", "changes": [{"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}]}, {"timestamp": 1630400677, "sha": "53f074ca", "message": "fix(data/complex/basic): better formulas for nsmul and gsmul on complex to fix a diamond (#8928)\nAs diagnosed by @eric-wieser in https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/diamond.20in.20data.2Ecomplex.2Emodule/near/250318167\nAfter the PR,\n```lean\nexample :\n (sub_neg_monoid.has_scalar_int : has_scalar ℤ ℂ) = (complex.has_scalar : has_scalar ℤ ℂ) :=\nrfl\n```\nworks fine, while it fails on current master.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "test/instance_diamonds.lean", "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1630400676, "sha": "c04e8a48", "message": "feat(logic/basic): equivalence of by_contra and choice (#8912)\nBased on an email suggestion from Freek Wiedijk: `classical.choice` is equivalent to the following Type-valued variation on `by_contradiction`:\n```lean\naxiom classical.by_contradiction' {α : Sort*} : ¬ (α → false) → α\n```", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "def", "choice_of_by_contradiction'", ["classical"]]]}]}, {"timestamp": 1630400675, "sha": "1c134548", "message": "feat(algebraic_geometry): Restriction of locally ringed spaces (#8809)\nProves that restriction of presheafed spaces doesn't change the stalks and defines the restriction of a locally ringed space along an open embedding.", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["mod", "def", "of_restrict", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["add", "def", "restrict_stalk_iso", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "restrict_stalk_iso_hom_eq_germ", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "restrict_stalk_iso_inv_eq_germ", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": [["add", "def", "adjunction_nhds", ["is_open_map"]], ["add", "def", "functor_nhds", ["is_open_map"]]]}]}, {"timestamp": 1630394574, "sha": "1dbd561f", "message": "refactor(order/atoms): reorder arguments of `is_simple_lattice.fintype` (#8933)\nPreviously, this instance would first look for `decidable_eq` instances and after that for `is_simple_lattice` instances. The latter has only 4 instances, while the former takes hundreds of steps. Reordering the arguments makes a lot of type-class searches fail a lot quicker.\nCaught by the new linter (#8932).", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}]}, {"timestamp": 1630378456, "sha": "22a297ca", "message": "feat(algebra/module/prod,pi): instances for actions with zero (#8929)", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": "src/algebra/module/prod.lean", "newPath": "src/algebra/module/prod.lean", "changes": []}]}, {"timestamp": 1630373758, "sha": "f4d72050", "message": "chore(measure_theory/*): rename `probability_measure` and `finite_measure` (#8831)\nRenamed to `is_probability_measure` and `is_finite_measure`, respectively. Also, `locally_finite_measure` becomes `is_locally_finite_measure`. See\nhttps://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.238337.20Weak.20convergence", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": [["mod", "theorem", "extension_to_bounded_functions_apply", ["phillips_1940"]], ["mod", "theorem", "to_functions_to_measure", ["phillips_1940"]]]}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["mod", "theorem", "integral_mem", ["convex"]], ["mod", "theorem", "map_integral_le", ["convex_on"]], ["mod", "theorem", "map_smul_integral_le", ["convex_on"]]]}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": [["mod", "theorem", "exists_mem_image_mem", ["measure_theory", "measure_preserving"]]]}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["mod", "def", "finite_spanning_sets_in_Ioo_rat", ["real"]], ["mod", "theorem", "measure_ext_Ioo_rat", ["real"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": [["mod", "theorem", "measurable_measure_prod_mk_left_finite", []]]}, {"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": [["mod", "theorem", "hahn_decomposition", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/ae_eq_of_integral.lean", "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["del", "theorem", "integrable_condexp_L2_of_finite_measure", ["measure_theory"]], ["add", "theorem", "integrable_condexp_L2_of_is_finite_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": [["mod", "theorem", "to_Lp_dense_range", ["bounded_continuous_function"]], ["mod", "theorem", "to_Lp_dense_range", ["continuous_map"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "has_finite_integral_const", ["measure_theory"]], ["mod", "theorem", "has_finite_integral_of_bounded", ["measure_theory"]], ["mod", "theorem", "const_mul", ["measure_theory", "integrable"]], ["mod", "theorem", "mul_const", ["measure_theory", "integrable"]], ["mod", "theorem", "integrable_const", ["measure_theory"]], ["mod", "theorem", "integrable_neg_iff", ["measure_theory"]], ["mod", "theorem", "integrable", ["measure_theory", "mem_ℒp"]]]}, {"oldPath": "src/measure_theory/function/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "antimono", ["measure_theory", "Lp"]], ["mod", "theorem", "mem_Lp_const", ["measure_theory", "Lp"]], ["mod", "theorem", "mem_Lp_of_ae_bound", ["measure_theory", "Lp"]], ["mod", "theorem", "norm_le_of_ae_bound", ["measure_theory", "Lp"]], ["mod", "theorem", "mem_ℒp_of_exponent_le", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "of_bound", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "mem_ℒp_const", ["measure_theory"]], ["mod", "theorem", "snorm'_const'", ["measure_theory"]], ["add", "theorem", "snorm'_const_of_is_probability_measure", ["measure_theory"]], ["del", "theorem", "snorm'_const_of_probability_measure", ["measure_theory"]], ["mod", "theorem", "snorm'_le_snorm_ess_sup", ["measure_theory"]], ["mod", "theorem", "snorm'_lt_top_of_snorm'_lt_top_of_exponent_le", ["measure_theory"]], ["mod", "theorem", "snorm_le_snorm_of_exponent_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": [["del", "theorem", "integrable_of_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_of_is_finite_measure", ["measure_theory", "simple_func"]], ["mod", "theorem", "measure_support_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_of_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_of_is_finite_measure", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "theorem", "norm_integral_le_of_norm_le_const", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["mod", "theorem", "integral_const_of_cdf", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["del", "theorem", "finite_measure_with_density", ["measure_theory"]], ["add", "theorem", "is_finite_measure_with_density", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["del", "theorem", "finite_measure", ["is_compact"]], ["del", "theorem", "finite_measure_of_nhds_within", ["is_compact"]], ["add", "theorem", "is_finite_measure", ["is_compact"]], ["add", "theorem", "is_finite_measure_of_nhds_within", ["is_compact"]], ["mod", "theorem", "coe_measure_univ_nnreal", ["measure_theory"]], ["mod", "theorem", "ext_of_generate_finite", ["measure_theory"]], ["del", "theorem", "finite_measure_of_le", ["measure_theory"]], ["add", "theorem", "is_finite_measure_of_le", ["measure_theory"]], ["add", "theorem", "ne_zero", ["measure_theory", "is_probability_measure"]], ["mod", "theorem", "finite_at_filter_of_finite", ["measure_theory", "measure"]], ["mod", "theorem", "le_of_add_le_add_left", ["measure_theory", "measure"]], ["mod", "theorem", "smul_finite", ["measure_theory", "measure"]], ["mod", "theorem", "sub_add_cancel_of_le", ["measure_theory", "measure"]], ["mod", "theorem", "sub_apply", ["measure_theory", "measure"]], ["mod", "theorem", "measure_lt_top", ["measure_theory"]], ["mod", "theorem", "measure_ne_top", ["measure_theory"]], ["mod", "theorem", "measure_univ_nnreal_eq_zero", ["measure_theory"]], ["mod", "theorem", "measure_univ_nnreal_pos", ["measure_theory"]], ["mod", "theorem", "prob_add_prob_compl", ["measure_theory"]], ["mod", "theorem", "prob_le_one", ["measure_theory"]], ["del", "theorem", "ne_zero", ["measure_theory", "probability_measure"]], ["mod", "theorem", "summable_measure_to_real", ["measure_theory"]], ["del", "theorem", "finite_measure", ["metric", "bounded"]], ["add", "theorem", "is_finite_measure", ["metric", "bounded"]]]}, {"oldPath": "src/measure_theory/measure/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": [["del", "theorem", "measure_eq_supr_is_closed_of_finite_measure", ["measurable_set"]], ["add", "theorem", "measure_eq_supr_is_closed_of_is_finite_measure", ["measurable_set"]], ["del", "theorem", "weakly_regular_of_inner_regular_of_finite_measure", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "weakly_regular_of_inner_regular_of_is_finite_measure", ["measure_theory", "measure", "weakly_regular"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["mod", "def", "to_signed_measure", ["measure_theory", "measure"]], ["mod", "theorem", "to_signed_measure_add", ["measure_theory", "measure"]], ["mod", "theorem", "to_signed_measure_apply_measurable", ["measure_theory", "measure"]], ["mod", "theorem", "to_signed_measure_smul", ["measure_theory", "measure"]], ["mod", "theorem", "to_signed_measure_sub_apply", ["measure_theory", "measure"]]]}, {"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": []}]}, {"timestamp": 1630347518, "sha": "6adb5e8b", "message": "feat(topology/algebra/ordered): monotone convergence in pi types (#8841)\n* add typeclasses `Sup_convergence_class` and `Inf_convergence_class`\n* reformulate theorems about monotone convergence in terms of these typeclasses;\n* provide instances for a linear order with order topology, for products, and for pi types.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["mod", "theorem", "tendsto_at_bot_cinfi", []], ["mod", "theorem", "tendsto_at_bot_csupr", []], ["mod", "theorem", "tendsto_at_bot_infi", []], ["mod", "theorem", "tendsto_at_bot_is_glb", []], ["add", "theorem", "tendsto_at_bot_is_lub", []], ["mod", "theorem", "tendsto_at_bot_supr", []], ["mod", "theorem", "tendsto_at_top_cinfi", []], ["mod", "theorem", "tendsto_at_top_csupr", []], ["mod", "theorem", "tendsto_at_top_infi", []], ["add", "theorem", "tendsto_at_top_is_glb", []], ["mod", "theorem", "tendsto_at_top_is_lub", []], ["mod", "theorem", "tendsto_at_top_supr", []]]}]}, {"timestamp": 1630340097, "sha": "4a65197a", "message": "chore(algebra/direct_sum/algebra): add missing rfl lemmas (#8924)\nI realized I was resorting to nasty unfolding to get these mid-proof", "changes": [{"oldPath": "src/algebra/direct_sum/algebra.lean", "newPath": "src/algebra/direct_sum/algebra.lean", "changes": [["add", "theorem", "algebra_map_apply", ["direct_sum"]], ["add", "theorem", "algebra_map_to_add_monoid_hom", ["direct_sum"]]]}]}, {"timestamp": 1630340096, "sha": "aa0694a1", "message": "fix(data/set/finite): drop {α : Type}, fixes universe issue (#8922)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "infinite_compl", ["set", "finite"]], ["mod", "theorem", "infinite_of_finite_compl", ["set"]]]}]}, {"timestamp": 1630340095, "sha": "ad7519a3", "message": "doc(tactic/lint): instructions on fails_quickly failure (#8910)\n* Also set `is_fast` to `tt`, since it takes ~10s on all of mathlib.", "changes": [{"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1630340094, "sha": "b3807ee3", "message": "chore(data/finset/basic): lemmas about `(range n).nonempty` (#8905)\nAdd `finset.nonempty_range_iff`, `finset.range_eq_empty_iff`, and\n`range.nonempty_range_succ`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "nonempty_range_iff", ["finset"]], ["add", "theorem", "nonempty_range_succ", ["finset"]], ["add", "theorem", "range_eq_empty_iff", ["finset"]]]}]}, {"timestamp": 1630335277, "sha": "1e89df22", "message": "chore(algebra/monoid_algebra): convert a filename prefix into a folder (#8925)\nThis moves:\n* `algebra.monoid_algebra` to `algebra.monoid_algebra.basic`\n* `algebra.monoid_algebra_to_direct_sum` to `algebra.monoid_algebra.to_direct_sum`", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra_to_direct_sum.lean", "newPath": "src/algebra/monoid_algebra/to_direct_sum.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}]}, {"timestamp": 1630329409, "sha": "98466d29", "message": "feat(algebra/direct_sum): graded algebras (#8783)\nThis provides a `direct_sum.galgebra` structure on top of the existing `direct_sum.gmonoid` structure.\nThis typeclass is used to provide an `algebra R (⨁ i, A i)` instance.\nThis also renames and improves the stateement of `direct_sum.module.ext` to `direct_sum.linear_map_ext` and adds `direect_sum.ring_hom_ext` and `direct_sum.alg_hom_ext` to match.", "changes": [{"oldPath": null, "newPath": "src/algebra/direct_sum/algebra.lean", "changes": [["add", "theorem", "alg_hom_ext", ["direct_sum"]], ["add", "def", "to_algebra", ["direct_sum"]]]}, {"oldPath": "src/algebra/direct_sum/module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": [["add", "theorem", "linear_map_ext", ["direct_sum"]], ["add", "theorem", "lof_eq_of", ["direct_sum"]], ["del", "theorem", "ext", ["direct_sum", "to_module"]]]}, {"oldPath": "src/algebra/direct_sum/ring.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": [["add", "theorem", "ring_hom_ext", ["direct_sum"]]]}, {"oldPath": "src/algebra/monoid_algebra_to_direct_sum.lean", "newPath": "src/algebra/monoid_algebra_to_direct_sum.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/tensor_product.lean", "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}]}, {"timestamp": 1630263041, "sha": "2bae06af", "message": "fix(ring_theory/polynomial/homogeneous): spelling mistake in `homogeneous` (#8914)", "changes": [{"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": [["add", "theorem", "homogeneous_submodule_eq_finsupp_supported", ["mv_polynomial"]], ["add", "theorem", "homogeneous_submodule_mul", ["mv_polynomial"]], ["del", "theorem", "homogenous_submodule_eq_finsupp_supported", ["mv_polynomial"]], ["del", "theorem", "homogenous_submodule_mul", ["mv_polynomial"]]]}]}, {"timestamp": 1630246106, "sha": "395bb6ca", "message": "feat(algebraic_geometry): Lift isomorphism of sheafed spaces to locally ringed spaces (#8887)\nAdds the fact that an isomorphism of sheafed spaces can be lifted to an isomorphism of locally ringed spaces. The main ingredient is the fact that stalk maps of isomorphisms are again isomorphisms.\nIn particular, this implies that the forgetful functor `LocallyRingedSpace ⥤ SheafedSpace CommRing` reflects isomorphisms.", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "def", "hom_of_SheafedSpace_hom_of_is_iso", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "iso_of_SheafedSpace_iso", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["add", "theorem", "congr", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["add", "theorem", "congr_hom", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["add", "theorem", "congr_point", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["add", "def", "stalk_iso", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]]]}]}, {"timestamp": 1630180777, "sha": "d75a2d96", "message": "refactor(data/set/finite): use `[fintype (plift ι)]` in `finite_Union` (#8872)\nThis way we can use `finite_Union` instead of `finite_Union_Prop`.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "finite_Union", ["set"]], ["del", "theorem", "finite_Union_Prop", ["set"]], ["mod", "theorem", "finite_range", ["set"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1630175409, "sha": "db06b5a2", "message": "feat(group_theory/perm/cycle_type): Fixed points of permutations of prime order (#8832)\nA few basic lemmas about fixed points of permutations of prime order.", "changes": [{"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "card_compl_support_modeq", ["equiv", "perm"]], ["add", "theorem", "exists_fixed_point_of_prime'", ["equiv", "perm"]], ["add", "theorem", "exists_fixed_point_of_prime", ["equiv", "perm"]]]}]}, {"timestamp": 1630175408, "sha": "e824b88d", "message": "refactor(category_theory/limits/final): Symmetric API for final and initial functors (#8808)\nDualise the API for cofinal functors to symmetrically support final and initial functors.\nThis PR renames `cofinal` functors to `final` functors.", "changes": [{"oldPath": "src/category_theory/limits/cofinal.lean", "newPath": "src/category_theory/limits/final.lean", "changes": [["del", "def", "cocones_equiv", ["category_theory", "cofinal"]], ["del", "theorem", "cofinal_of_colimit_comp_coyoneda_iso_punit", ["category_theory", "cofinal"]], ["del", "def", "colimit_cocone_comp", ["category_theory", "cofinal"]], ["del", "theorem", "colimit_cocone_comp_aux", ["category_theory", "cofinal"]], ["del", "def", "colimit_cocone_of_comp", ["category_theory", "cofinal"]], ["del", "def", "colimit_comp_coyoneda_iso", ["category_theory", "cofinal"]], ["del", "def", "colimit_iso'", ["category_theory", "cofinal"]], ["del", "def", "colimit_iso", ["category_theory", "cofinal"]], ["del", "theorem", "colimit_pre_is_iso_aux", ["category_theory", "cofinal"]], ["del", "def", "cones_equiv", ["category_theory", "cofinal"]], ["del", "def", "extend_cocone", ["category_theory", "cofinal"]], ["del", "def", "extend_cone", ["category_theory", "cofinal"]], ["del", "def", "extend_cone_cocone_to_cone", ["category_theory", "cofinal"]], ["del", "def", "extend_cone_cone_to_cocone", ["category_theory", "cofinal"]], ["del", "theorem", "has_colimit_of_comp", ["category_theory", "cofinal"]], ["del", "theorem", "has_limit_of_comp", ["category_theory", "cofinal"]], ["del", "def", "hom_to_lift", ["category_theory", "cofinal"]], ["del", "theorem", "induction", ["category_theory", "cofinal"]], ["del", "def", "is_colimit_extend_cocone_equiv", ["category_theory", "cofinal"]], ["del", "def", "is_colimit_whisker_equiv", ["category_theory", "cofinal"]], ["del", "def", "is_limit_extend_cone_equiv", ["category_theory", "cofinal"]], ["del", "def", "is_limit_whisker_equiv", ["category_theory", "cofinal"]], ["del", "def", "lift", ["category_theory", "cofinal"]], ["del", "def", "limit_cone_comp", ["category_theory", "cofinal"]], ["del", "theorem", "limit_cone_comp_aux", ["category_theory", "cofinal"]], ["del", "def", "limit_cone_of_comp", ["category_theory", "cofinal"]], ["del", "def", "limit_iso'", ["category_theory", "cofinal"]], ["del", "def", "limit_iso", ["category_theory", "cofinal"]], ["del", "theorem", "limit_pre_is_iso_aux", ["category_theory", "cofinal"]], ["del", "theorem", "zigzag_of_eqv_gen_quot_rel", ["category_theory", "cofinal"]], ["add", "def", "cocones_equiv", ["category_theory", "functor", "final"]], ["add", "theorem", "cofinal_of_colimit_comp_coyoneda_iso_punit", ["category_theory", "functor", "final"]], ["add", "def", "colimit_cocone_comp", ["category_theory", "functor", "final"]], ["add", "theorem", "colimit_cocone_comp_aux", ["category_theory", "functor", "final"]], ["add", "def", "colimit_cocone_of_comp", ["category_theory", "functor", "final"]], ["add", "def", "colimit_comp_coyoneda_iso", ["category_theory", "functor", "final"]], ["add", "def", "colimit_iso'", ["category_theory", "functor", "final"]], ["add", "def", "colimit_iso", ["category_theory", "functor", "final"]], ["add", "theorem", "colimit_pre_is_iso_aux", ["category_theory", "functor", "final"]], ["add", "def", "extend_cocone", ["category_theory", "functor", "final"]], ["add", "theorem", "has_colimit_of_comp", ["category_theory", "functor", "final"]], ["add", "def", "hom_to_lift", ["category_theory", "functor", "final"]], ["add", "def", "induction", ["category_theory", "functor", "final"]], ["add", "def", "is_colimit_extend_cocone_equiv", ["category_theory", "functor", "final"]], ["add", "def", "is_colimit_whisker_equiv", ["category_theory", "functor", "final"]], ["add", "def", "lift", ["category_theory", "functor", "final"]], ["add", "theorem", "zigzag_of_eqv_gen_quot_rel", ["category_theory", "functor", "final"]], ["add", "theorem", "final_of_adjunction", ["category_theory", "functor"]], ["add", "theorem", "final_of_initial_op", ["category_theory", "functor"]], ["add", "def", "cones_equiv", ["category_theory", "functor", "initial"]], ["add", "def", "extend_cone", ["category_theory", "functor", "initial"]], ["add", "theorem", "has_limit_of_comp", ["category_theory", "functor", "initial"]], ["add", "def", "hom_to_lift", ["category_theory", "functor", "initial"]], ["add", "def", "induction", ["category_theory", "functor", "initial"]], ["add", "def", "is_limit_extend_cone_equiv", ["category_theory", "functor", "initial"]], ["add", "def", "is_limit_whisker_equiv", ["category_theory", "functor", "initial"]], ["add", "def", "lift", ["category_theory", "functor", "initial"]], ["add", "def", "limit_cone_comp", ["category_theory", "functor", "initial"]], ["add", "theorem", "limit_cone_comp_aux", ["category_theory", "functor", "initial"]], ["add", "def", "limit_cone_of_comp", ["category_theory", "functor", "initial"]], ["add", "def", "limit_iso'", ["category_theory", "functor", "initial"]], ["add", "def", "limit_iso", ["category_theory", "functor", "initial"]], ["add", "theorem", "limit_pre_is_iso_aux", ["category_theory", "functor", "initial"]], ["add", "theorem", "initial_of_adjunction", ["category_theory", "functor"]], ["add", "theorem", "initial_of_final_op", ["category_theory", "functor"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}]}, {"timestamp": 1630175407, "sha": "14a992b3", "message": "chore(data/set_like): some additional documentation (#8765)\nGives some more explanation for `set_like` and what it does and is for.", "changes": [{"oldPath": "src/data/set_like/basic.lean", "newPath": "src/data/set_like/basic.lean", "changes": []}]}, {"timestamp": 1630173367, "sha": "0b485703", "message": "feat(group_theory/nilpotent): add subgroups of nilpotent group are nilpotent (#8854)", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "lower_central_series_map_subtype_le", []], ["add", "theorem", "lower_central_series_succ", []]]}]}, {"timestamp": 1630169325, "sha": "1aaff8da", "message": "feat(measure_theory/decomposition/lebesgue): Lebesgue decomposition for sigma-finite measures (#8875)\nThis PR shows sigma-finite measures `have_lebesgue_decomposition`. With this instance, `absolutely_continuous_iff_with_density_radon_nikodym_deriv_eq` will provide the Radon-Nikodym theorem for sigma-finite measures.", "changes": [{"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": [["add", "theorem", "ennreal_tsum'", ["measurable"]]]}, {"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["add", "theorem", "have_lebesgue_decomposition_of_finite_measure", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/decomposition/radon_nikodym.lean", "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": [["add", "theorem", "absolutely_continuous_iff_with_density_radon_nikodym_deriv_eq", ["measure_theory", "measure"]], ["del", "theorem", "absolutely_continuous_iff_with_density_radon_nikodym_derive_eq", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "with_density_indicator", ["measure_theory"]], ["add", "theorem", "with_density_tsum", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "sum_add_sum", ["measure_theory", "measure"]], ["add", "theorem", "sum_congr", ["measure_theory", "measure"]]]}]}, {"timestamp": 1630143738, "sha": "42b5e801", "message": "feat(data/polynomial/basic): monomial_eq_zero_iff (#8897)\nVia a new `monomial_injective`.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "monomial_eq_zero_iff", ["polynomial"]], ["add", "theorem", "monomial_injective", ["polynomial"]]]}]}, {"timestamp": 1630137829, "sha": "8ee05e9a", "message": "feat(data/nat/log): Ceil log (#8764)\nDefines the upper natural log, which is the least `k` such that `n ≤ b^k`.\nAlso expand greatly the docs of `data.nat.multiplicity`, in particular to underline that it proves Legendre's theorem.", "changes": [{"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": [["add", "def", "clog", ["nat"]], ["add", "theorem", "clog_eq_one", ["nat"]], ["add", "theorem", "clog_le_clog_of_le", ["nat"]], ["add", "theorem", "clog_mono", ["nat"]], ["add", "theorem", "clog_of_left_le_one", ["nat"]], ["add", "theorem", "clog_of_right_le_one", ["nat"]], ["add", "theorem", "clog_of_two_le", ["nat"]], ["add", "theorem", "clog_one_left", ["nat"]], ["add", "theorem", "clog_one_right", ["nat"]], ["add", "theorem", "clog_pos", ["nat"]], ["add", "theorem", "clog_pow", ["nat"]], ["add", "theorem", "clog_zero_left", ["nat"]], ["add", "theorem", "clog_zero_right", ["nat"]], ["add", "theorem", "le_pow_clog", ["nat"]], ["add", "theorem", "le_pow_iff_clog_le", ["nat"]], ["del", "theorem", "log_b_one_eq_zero", ["nat"]], ["del", "theorem", "log_b_zero_eq_zero", ["nat"]], ["del", "theorem", "log_eq_zero_of_le", ["nat"]], ["del", "theorem", "log_eq_zero_of_lt", ["nat"]], ["add", "theorem", "log_le_clog", ["nat"]], ["del", "theorem", "log_le_log_succ", ["nat"]], ["add", "theorem", "log_of_left_le_one", ["nat"]], ["add", "theorem", "log_of_lt", ["nat"]], ["del", "theorem", "log_one_eq_zero", ["nat"]], ["add", "theorem", "log_one_left", ["nat"]], ["add", "theorem", "log_one_right", ["nat"]], ["add", "theorem", "log_pos", ["nat"]], ["mod", "theorem", "log_pow", ["nat"]], ["del", "theorem", "log_zero_eq_zero", ["nat"]], ["add", "theorem", "log_zero_left", ["nat"]], ["add", "theorem", "log_zero_right", ["nat"]], ["add", "theorem", "lt_pow_succ_log_self", ["nat"]], ["mod", "theorem", "pow_le_iff_le_log", ["nat"]], ["mod", "theorem", "pow_log_le_self", ["nat"]], ["add", "theorem", "pow_pred_clog_lt_self", ["nat"]], ["del", "theorem", "pow_succ_log_gt_self", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": [["mod", "theorem", "multiplicity_eq_card_pow_dvd", ["nat"]]]}]}, {"timestamp": 1630116980, "sha": "d3c592f0", "message": "chore(scripts): update nolints.txt (#8899)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1630112760, "sha": "0fd51b1c", "message": "feat(data/real/irrational): exists irrational between any two distinct rationals and reals (#8753)\nDid not find these proofs in `data/real/irrational`, seemed like they belong here. Just proving the standard facts about irrationals between rats and reals. I am using these lemmas in a repo about the Thomae's function.", "changes": [{"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["add", "theorem", "exists_irrational_btwn", []]]}]}, {"timestamp": 1630084941, "sha": "2eaec057", "message": "feat(ring_theory): define integrally closed domains (#8893)\nIn this follow-up to #8882, we define the notion of an integrally closed domain `R`, which contains all integral elements of `Frac(R)`.\nWe show the equivalence to `is_integral_closure R R K` for a field of fractions `K`.\nWe provide instances for `is_dedekind_domain`s, `unique_fractorization_monoid`s, and to the integers of a valuation. In particular, the rational root theorem provides a proof that `ℤ` is integrally closed.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_eq_apply", ["alg_equiv"]], ["add", "theorem", "algebra_map_eq_apply", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["mod", "theorem", "integrally_closed", ["is_dedekind_domain_inv"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_alg_equiv", []]]}, {"oldPath": null, "newPath": "src/ring_theory/integrally_closed.lean", "changes": [["add", "theorem", "integral_closure_eq_bot", ["is_integrally_closed"]], ["add", "theorem", "integral_closure_eq_bot_iff", ["is_integrally_closed"]], ["add", "theorem", "is_integral_iff", ["is_integrally_closed"]], ["add", "theorem", "is_integrally_closed_iff", []], ["add", "theorem", "is_integrally_closed_iff_is_integral_closure", []]]}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": [["del", "theorem", "integrally_closed", ["unique_factorization_monoid"]]]}, {"oldPath": "src/ring_theory/valuation/integral.lean", "newPath": "src/ring_theory/valuation/integral.lean", "changes": [["add", "theorem", "integrally_closed", ["valuation", "integers"]]]}]}, {"timestamp": 1630078115, "sha": "c4cf4c25", "message": "feat(algebra/polynomial/big_operators): coeff of sums and prods of polynomials (#8680)\nAdditionally, provide results for degree and nat_degree over lists,\nwhich generalize away from requiring commutativity.", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["add", "theorem", "coeff_list_prod_of_nat_degree_le", ["polynomial"]], ["add", "theorem", "coeff_multiset_prod_of_nat_degree_le", ["polynomial"]], ["add", "theorem", "coeff_prod_of_nat_degree_le", ["polynomial"]], ["add", "theorem", "degree_list_sum_le", ["polynomial"]], ["mod", "theorem", "leading_coeff_multiset_prod'", ["polynomial"]], ["add", "theorem", "nat_degree_list_prod_le", ["polynomial"]], ["add", "theorem", "nat_degree_list_sum_le", ["polynomial"]], ["add", "theorem", "nat_degree_multiset_sum_le", ["polynomial"]], ["add", "theorem", "nat_degree_sum_le", ["polynomial"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "sum_le_foldr_max", ["list"]]]}]}, {"timestamp": 1630075015, "sha": "dcd60e25", "message": "feat(ring_theory/trace): the trace form is nondegenerate (#8777)\nThis PR shows the determinant of the trace form is nonzero over a finite separable field extension. This is an important ingredient in showing the integral closure of a Dedekind domain in a finite separable extension is again a Dedekind domain, i.e. that rings of integers are Dedekind domains. We extend the results of #8762 to write the trace form as a Vandermonde matrix to get a nice expression for the determinant, then use separability to show this value is nonzero.", "changes": [{"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "to_matrix_mul_to_matrix_flip", ["basis"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "det_trace_form_ne_zero'", []], ["add", "theorem", "det_trace_form_ne_zero", []]]}]}, {"timestamp": 1630075014, "sha": "7f256987", "message": "feat(analysis/complex/isometry): Show that certain complex isometries are not equal (#8646)\n1. Lemma `reflection_rotation` proves that rotation by `(a : circle)` is not equal to reflection over the x-axis (i.e, `conj_lie`). \n2. Lemma `rotation_injective` proves that rotation by different `(a b: circle)` are not the same,(i.e, `rotation` is injective).\nCo-authored by Kyle Miller", "changes": [{"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": [["add", "theorem", "congr_fun", ["linear_isometry_equiv"]], ["add", "theorem", "rotation_injective", []], ["add", "theorem", "rotation_ne_conj_lie", []], ["add", "def", "rotation_of", []], ["add", "theorem", "rotation_of_rotation", []]]}]}, {"timestamp": 1630072955, "sha": "7cfc9872", "message": "feat(measure_theory/decomposition/radon_nikodym): the Radon-Nikodym theorem (#8763)\nThe Radon-Nikodym theorem 🎉", "changes": [{"oldPath": "src/measure_theory/decomposition/lebesgue.lean", "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["del", "def", "have_lebesgue_decomposition", ["measure_theory", "measure"]], ["mod", "theorem", "have_lebesgue_decomposition_add", ["measure_theory", "measure"]], ["del", "theorem", "have_lebesgue_decomposition_of_finite_measure", ["measure_theory", "measure"]], ["mod", "theorem", "have_lebesgue_decomposition_spec", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/decomposition/radon_nikodym.lean", "changes": [["add", "theorem", "absolutely_continuous_iff_with_density_radon_nikodym_derive_eq", ["measure_theory", "measure"]], ["add", "theorem", "with_density_radon_nikodym_deriv_eq", ["measure_theory", "measure"]]]}]}, {"timestamp": 1630067145, "sha": "023a816d", "message": "feat(algebra): define a bundled type of absolute values (#8881)\nThe type `absolute_value R S` is a bundled version of the typeclass `is_absolute_value R S` defined in `data/real/cau_seq.lean` (why was it defined there?), putting both in one file `algebra/absolute_value.lean`. The lemmas from `is_abs_val` have been copied mostly literally, with weakened assumptions when possible. Maps between the bundled and unbundled versions are also available.\nWe also define `absolute_value.abs` that represents the \"standard\" absolute value `abs`.\nThe point of this PR is both to modernize absolute values into bundled structures, and to make it easier to extend absolute values to represent \"absolute values respecting the Euclidean domain structure\", and from there \"absolute values that show the class group is finite\".", "changes": [{"oldPath": null, "newPath": "src/algebra/absolute_value.lean", "changes": [["add", "theorem", "abs_abv_sub_le_abv_sub", ["absolute_value"]], ["add", "theorem", "coe_to_monoid_hom", ["absolute_value"]], ["add", "theorem", "coe_to_monoid_with_zero_hom", ["absolute_value"]], ["add", "theorem", "coe_to_mul_hom", ["absolute_value"]], ["add", "def", "to_monoid_hom", ["absolute_value"]], ["add", "def", "to_monoid_with_zero_hom", ["absolute_value"]], ["add", "structure", "absolute_value", []], ["add", "theorem", "abs_abv_sub_le_abv_sub", ["is_absolute_value"]], ["add", "theorem", "abv_div", ["is_absolute_value"]], ["add", "def", "abv_hom", ["is_absolute_value"]], ["add", "theorem", "abv_inv", ["is_absolute_value"]], ["add", "theorem", "abv_neg", ["is_absolute_value"]], ["add", "theorem", "abv_one", ["is_absolute_value"]], ["add", "theorem", "abv_pos", ["is_absolute_value"]], ["add", "theorem", "abv_pow", ["is_absolute_value"]], ["add", "theorem", "abv_sub", ["is_absolute_value"]], ["add", "theorem", "abv_sub_le", ["is_absolute_value"]], ["add", "theorem", "abv_zero", ["is_absolute_value"]], ["add", "theorem", "sub_abv_le_abv_sub", ["is_absolute_value"]], ["add", "def", "to_absolute_value", ["is_absolute_value"]]]}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["del", "theorem", "abs_abv_sub_le_abv_sub", ["is_absolute_value"]], ["del", "theorem", "abv_div", ["is_absolute_value"]], ["del", "def", "abv_hom", ["is_absolute_value"]], ["del", "theorem", "abv_inv", ["is_absolute_value"]], ["del", "theorem", "abv_neg", ["is_absolute_value"]], ["del", "theorem", "abv_one", ["is_absolute_value"]], ["del", "theorem", "abv_pos", ["is_absolute_value"]], ["del", "theorem", "abv_pow", ["is_absolute_value"]], ["del", "theorem", "abv_sub", ["is_absolute_value"]], ["del", "theorem", "abv_sub_le", ["is_absolute_value"]], ["del", "theorem", "abv_zero", ["is_absolute_value"]], ["del", "theorem", "sub_abv_le_abv_sub", ["is_absolute_value"]]]}]}, {"timestamp": 1630064878, "sha": "a3278519", "message": "feat(ring_theory): a typeclass `is_integral_closure` (#8882)\nThe typeclass `is_integral_closure A R B` states `A` is the integral closure of `R` in `B`, i.e. that an element of `B` is integral over `R` iff it is an element of (the image of) `A`.\nWe also show that any integral extension of `R` contained in `B` is contained in `A`, and the integral closure is unique up to isomorphism.\nThis was suggested in the review of #8701, in order to define a characteristic predicate for rings of integers.", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "algebra_map", ["is_integral"]], ["add", "theorem", "algebra_map_equiv", ["is_integral_closure"]], ["add", "theorem", "algebra_map_lift", ["is_integral_closure"]], ["add", "theorem", "algebra_map_mk'", ["is_integral_closure"]], ["add", "theorem", "is_integral_algebra", ["is_integral_closure"]], ["add", "theorem", "mk'_add", ["is_integral_closure"]], ["add", "theorem", "mk'_algebra_map", ["is_integral_closure"]], ["add", "theorem", "mk'_mul", ["is_integral_closure"]], ["add", "theorem", "mk'_one", ["is_integral_closure"]], ["add", "theorem", "mk'_zero", ["is_integral_closure"]]]}]}, {"timestamp": 1630058580, "sha": "88e47d7c", "message": "feat(linear_algebra/matrix/nonsingular_inverse): adjugate_mul_distrib_aux (#8681)\nWe prove towards the fact that the adjugate of a matrix distributes\nover the product. The current proof assumes regularity of the matrices.\nIn the general case, this hypothesis is not required, but this lemma\nwill be crucial in a follow-up PR\nwhich has to use polynomial matrices for the general case.\nAdditionally, we provide many API lemmas for det, cramer, \nnonsing_inv, and adjugate.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "one_eq_pi_single", ["matrix"]]]}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "single_apply", ["pi"]], ["add", "theorem", "single_comm", ["pi"]], ["add", "theorem", "single_eq_of_ne'", ["pi"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_eq_elem_of_subsingleton", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "coe_inv_mul", ["is_unit"]], ["add", "theorem", "inv_smul", ["is_unit"]], ["add", "theorem", "mul_coe_inv", ["is_unit"]], ["add", "theorem", "adjugate_mul_distrib_aux", ["matrix"]], ["add", "theorem", "adjugate_one", ["matrix"]], ["add", "theorem", "adjugate_subsingleton", ["matrix"]], ["add", "theorem", "cramer_one", ["matrix"]], ["add", "theorem", "cramer_row_self", ["matrix"]], ["add", "theorem", "cramer_subsingleton_apply", ["matrix"]], ["add", "theorem", "cramer_zero", ["matrix"]], ["add", "theorem", "inv_adjugate", ["matrix"]], ["add", "theorem", "inv_def", ["matrix"]], ["add", "theorem", "inv_inj", ["matrix"]], ["add", "theorem", "inv_inv_inv", ["matrix"]], ["add", "theorem", "inv_one", ["matrix"]], ["add", "theorem", "inv_smul'", ["matrix"]], ["add", "theorem", "inv_smul", ["matrix"]], ["add", "theorem", "inv_zero", ["matrix"]], ["add", "theorem", "is_regular_of_is_left_regular_det", ["matrix"]], ["add", "theorem", "is_unit_nonsing_inv_det_iff", ["matrix"]], ["add", "theorem", "mul_inv_rev", ["matrix"]], ["add", "theorem", "nonsing_inv_apply_not_is_unit", ["matrix"]], ["add", "theorem", "map_adjugate", ["matrix", "ring_hom"]]]}]}, {"timestamp": 1630051435, "sha": "0c503262", "message": "refactor(*): use `is_empty` instead of `not (nonempty α)` (#8858)\n`eq_empty_of_not_nonempty` gets dropped in favour of `eq_empty_of_is_empty`.", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "not_gt", ["eq"]], ["add", "theorem", "not_lt", ["eq"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "theorem", "eq_empty_of_not_nonempty", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "univ_eq_empty'", ["finset"]], ["mod", "theorem", "univ_eq_empty", ["finset"]], ["add", "theorem", "univ_eq_empty_iff", ["finset"]], ["add", "theorem", "card_eq_zero", ["fintype"]], ["del", "theorem", "not_nonempty_fintype", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "eq_empty_of_not_nonempty", ["set"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ae_measurable_sequence.lean", "newPath": "src/measure_theory/function/ae_measurable_sequence.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_const'", []], ["add", "theorem", "measurable_of_empty", []], ["add", "theorem", "measurable_of_empty_codomain", []], ["del", "theorem", "measurable_of_not_nonempty", []]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "eq_zero_of_is_empty", ["measure_theory", "measure"]], ["del", "theorem", "eq_zero_of_not_nonempty", ["measure_theory", "measure"]], ["del", "theorem", "sigma_finite_of_not_nonempty", ["measure_theory", "measure"]]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "filter_eq_bot_of_not_nonempty", ["filter"]], ["add", "theorem", "tendsto_of_is_empty", ["filter"]], ["del", "theorem", "tendsto_of_not_nonempty", ["filter"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": []}]}, {"timestamp": 1630047899, "sha": "fe13f030", "message": "feat(category_theory/structured_arrow): Duality between structured and costructured arrows (#8807)\nThis PR formally sets up the duality of structured and costructured arrows as equivalences of categories. Unfortunately, the code is a bit repetitive, as the four functors introduced all follow a similar pattern, which I wasn't able to abstract out. Suggestions are welcome!", "changes": [{"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": [["add", "def", "to_structured_arrow'", ["category_theory", "costructured_arrow"]], ["add", "def", "to_structured_arrow", ["category_theory", "costructured_arrow"]], ["add", "def", "costructured_arrow_op_equivalence", ["category_theory"]], ["add", "def", "to_costructured_arrow'", ["category_theory", "structured_arrow"]], ["add", "def", "to_costructured_arrow", ["category_theory", "structured_arrow"]], ["add", "def", "structured_arrow_op_equivalence", ["category_theory"]]]}]}, {"timestamp": 1630045877, "sha": "4705a6b5", "message": "doc(ring_theory/hahn_series): Update Hahn Series docstring (#8883)\nUpdates `ring_theory/hahn_series` docstring to remove outdated TODOs", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}]}, {"timestamp": 1630040511, "sha": "a9de1979", "message": "feat(algebra/big_operators/basic): add `prod_dite_of_false`, `prod_dite_of_true` (#8865)\nThe proofs are not mine cf [Zulip conversation](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60prod_dite_of_true.60)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_dite_of_false", ["finset"]], ["add", "theorem", "prod_dite_of_true", ["finset"]]]}]}, {"timestamp": 1630035060, "sha": "bcd5cd37", "message": "feat(algebra/pointwise): add to_additive attributes for pointwise smul (#8878)\nI wanted this to generalize some definitions in #2819 but it should be independent.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["del", "theorem", "singleton_vadd", ["set"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}]}, {"timestamp": 1630031176, "sha": "bb4026f4", "message": "chore(scripts): update nolints.txt (#8886)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1630024971, "sha": "11e30477", "message": "feat(algebra/ordered_monoid): min_top_(left|right) (#8880)", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "min_top_left", []], ["add", "theorem", "min_top_right", []]]}]}, {"timestamp": 1630006629, "sha": "e2905697", "message": "feat(data/nat/totient): add nat.totient_prime_iff (#8833)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "filter_card_eq", ["finset"]], ["add", "theorem", "not_subset", ["finset"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "prime_of_coprime", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_eq_iff_prime", ["nat"]]]}]}, {"timestamp": 1630006628, "sha": "080362d0", "message": "feat(data/finset/pi_induction): induction on `Π i, finset (α i)` (#8794)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "not_ssubset_empty", ["finset"]], ["add", "theorem", "sigma_eq_empty", ["finset"]], ["mod", "theorem", "sigma_mono", ["finset"]], ["add", "theorem", "sigma_nonempty", ["finset"]], ["mod", "def", "to_finset", ["option"]]]}, {"oldPath": null, "newPath": "src/data/finset/pi_induction.lean", "changes": [["add", "theorem", "induction_on_pi", ["finset"]], ["add", "theorem", "induction_on_pi_max", ["finset"]], ["add", "theorem", "induction_on_pi_min", ["finset"]], ["add", "theorem", "induction_on_pi_of_choice", ["finset"]]]}]}, {"timestamp": 1630006627, "sha": "83490fcd", "message": "feat(data/multiset/basic): add some lemmas (#8787)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "countp_cons", ["multiset"]], ["add", "theorem", "countp_map", ["multiset"]], ["add", "theorem", "filter_cons", ["multiset"]], ["add", "theorem", "filter_nsmul", ["multiset"]], ["mod", "theorem", "mem_nsmul", ["multiset"]], ["add", "theorem", "mem_of_mem_nsmul", ["multiset"]], ["add", "theorem", "nsmul_cons", ["multiset"]], ["add", "theorem", "nsmul_repeat", ["multiset"]], ["add", "theorem", "nsmul_singleton", ["multiset"]], ["add", "theorem", "prod_nonneg", ["multiset"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}]}, {"timestamp": 1630003745, "sha": "d9f47130", "message": "feat(ring_theory/trace): Tr(x) is the sum of embeddings σ x into an algebraically closed field (#8762)\nThe point of this PR is to provide the other formulation of \"the trace of `x` is the sum of its conjugates\", alongside `trace_eq_sum_roots`, namely `trace_eq_sum_embeddings`. We do so by exploiting the bijection between conjugate roots to `x : L` over `K` and embeddings of `K(x)`, then counting the number of embeddings of `x` to go to the whole of `L`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["add", "theorem", "card", ["alg_hom"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "sum_embeddings_eq_finrank_mul", []], ["add", "theorem", "trace_eq_sum_embeddings", []], ["add", "theorem", "trace_eq_sum_embeddings_gen", []], ["add", "theorem", "trace_eq_trace_adjoin", []]]}]}, {"timestamp": 1629996492, "sha": "5a2082d0", "message": "chore(category/grothendieck): split definition to avoid timeout (#8871)\nHelpful for #8807.", "changes": [{"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": [["add", "def", "grothendieck_Type_to_Cat_functor", ["category_theory", "grothendieck"]], ["add", "def", "grothendieck_Type_to_Cat_inverse", ["category_theory", "grothendieck"]]]}]}, {"timestamp": 1629996490, "sha": "9038709e", "message": "feat(analysis/normed_space/inner_product): multiplication by I is real-orthogonal (#8852)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "real_inner_I_smul_self", []]]}]}, {"timestamp": 1629996489, "sha": "5bd69fdf", "message": "feat(ring_theory/ideal/local_ring): Isomorphisms are local (#8850)\nAdds the fact that isomorphisms (and ring equivs) are local ring homomorphisms.", "changes": [{"oldPath": "src/ring_theory/ideal/local_ring.lean", "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["add", "theorem", "is_local_ring_hom_of_iso", []]]}]}, {"timestamp": 1629996488, "sha": "5afdaea4", "message": "feat(data/fin): reverse_induction (#8845)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "last_cases", ["fin"]], ["add", "theorem", "last_cases_cast_succ", ["fin"]], ["add", "theorem", "last_cases_last", ["fin"]], ["add", "def", "reverse_induction", ["fin"]], ["add", "theorem", "reverse_induction_cast_succ", ["fin"]], ["add", "theorem", "reverse_induction_last", ["fin"]]]}]}, {"timestamp": 1629996487, "sha": "678a2b5b", "message": "feat(data/list,multiset,finset): monotone_filter_(left|right) (#8842)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "monotone_filter_left", ["finset"]], ["add", "theorem", "monotone_filter_right", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "filter_sublist_filter", ["list"]], ["add", "theorem", "filter", ["list", "is_infix"]], ["add", "theorem", "filter", ["list", "is_prefix"]], ["add", "theorem", "filter", ["list", "is_suffix"]], ["add", "theorem", "monotone_filter_left", ["list"]], ["add", "theorem", "monotone_filter_right", ["list"]], ["add", "theorem", "filter", ["list", "sublist"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "filter", ["list", "subperm"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "monotone_filter_left", ["multiset"]], ["add", "theorem", "monotone_filter_right", ["multiset"]]]}]}, {"timestamp": 1629996486, "sha": "8e87f426", "message": "feat(tactic/lint/misc): Add syntactic tautology linter (#8821)\nAdd a linter that checks whether a lemma is a declaration that `∀ a b ... z,e₁ = e₂` where `e₁` and `e₂` are equal\nexprs, we call declarations of this form syntactic tautologies.\nSuch lemmas are (mostly) useless and sometimes introduced unintentionally when proving basic facts\nwith rfl when elaboration results in a different term than the user intended.\n@PatrickMassot suggested this at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/syntactic.20tautology.20linter/near/250267477.\nThe found problems are fixed in #8811.", "changes": [{"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1629983178, "sha": "70e1f9a6", "message": "feat(data/fin): add_cases (#8876)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "add_cases", ["fin"]], ["add", "theorem", "add_cases_left", ["fin"]], ["add", "theorem", "add_cases_right", ["fin"]]]}]}, {"timestamp": 1629983177, "sha": "976e9306", "message": "chore(archive/imo/README): whitespace breaks links (#8874)", "changes": [{"oldPath": "archive/imo/README.md", "newPath": "archive/imo/README.md", "changes": []}]}, {"timestamp": 1629983175, "sha": "0d07d04e", "message": "chore(data/set): add a few lemmas and `@[simp]` attrs (#8873)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "inter_eq_left_iff_subset", ["set"]], ["mod", "theorem", "inter_eq_right_iff_subset", ["set"]], ["mod", "theorem", "inter_univ", ["set"]], ["add", "theorem", "union_eq_left_iff_subset", ["set"]], ["add", "theorem", "union_eq_right_iff_subset", ["set"]], ["mod", "theorem", "univ_inter", ["set"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1629983174, "sha": "1f13610e", "message": "feat(*): remove the `fintype` requirement from matrices. (#8810)\nFor historical reasons, `matrix` has always had `fintype` attached to it. I remove this artificial limitation, but with a big caveat; multiplication is currently defined in terms of the dot product, which requires finiteness; therefore, any multiplicative structure on matrices currently requires fintypes. This can be removed in future contributions, however.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": [["mod", "theorem", "matrix_trace_commutator_zero", ["lie_algebra"]], ["mod", "theorem", "JD_transform", ["lie_algebra", "orthogonal"]], ["mod", "theorem", "PD_inv", ["lie_algebra", "orthogonal"]], ["mod", "theorem", "is_unit_PD", ["lie_algebra", "orthogonal"]], ["mod", "theorem", "mem_so", ["lie_algebra", "orthogonal"]], ["mod", "def", "so'", ["lie_algebra", "orthogonal"]], ["mod", "def", "so", ["lie_algebra", "orthogonal"]], ["mod", "def", "type_B", ["lie_algebra", "orthogonal"]], ["mod", "def", "type_D", ["lie_algebra", "orthogonal"]], ["mod", "def", "sl", ["lie_algebra", "special_linear"]], ["mod", "theorem", "sl_bracket", ["lie_algebra", "special_linear"]], ["mod", "theorem", "sl_non_abelian", ["lie_algebra", "special_linear"]], ["mod", "def", "sp", ["lie_algebra", "symplectic"]]]}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": [["mod", "def", "reindex_lie_equiv", ["matrix"]], ["mod", "theorem", "reindex_lie_equiv_apply", ["matrix"]], ["mod", "theorem", "reindex_lie_equiv_symm", ["matrix"]]]}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "add_monoid_hom_mul_left", ["matrix"]], ["mod", "def", "add_monoid_hom_mul_right", ["matrix"]], ["mod", "theorem", "add_mul_vec", ["matrix"]], ["mod", "theorem", "add_vec_mul", ["matrix"]], ["mod", "theorem", "col_mul_vec", ["matrix"]], ["mod", "theorem", "col_vec_mul", ["matrix"]], ["mod", "theorem", "conj_transpose_mul", ["matrix"]], ["mod", "theorem", "diagonal_mul", ["matrix"]], ["mod", "theorem", "diagonal_mul_diagonal'", ["matrix"]], ["mod", "theorem", "diagonal_mul_diagonal", ["matrix"]], ["mod", "def", "diagonal_ring_hom", ["matrix"]], ["mod", "theorem", "dot_product_assoc", ["matrix"]], ["mod", "theorem", "map_mul", ["matrix"]], ["mod", "theorem", "matrix_eq_sum_std_basis", ["matrix"]], ["mod", "theorem", "minor_minor", ["matrix"]], ["mod", "theorem", "minor_mul", ["matrix"]], ["mod", "theorem", "minor_mul_equiv", ["matrix"]], ["mod", "theorem", "mul_apply'", ["matrix"]], ["mod", "theorem", "mul_apply", ["matrix"]], ["mod", "theorem", "mul_diagonal", ["matrix"]], ["mod", "theorem", "mul_eq_mul", ["matrix"]], ["mod", "theorem", "mul_minor_one", ["matrix"]], ["mod", "theorem", "mul_mul_left", ["matrix"]], ["mod", "theorem", "mul_smul", ["matrix"]], ["mod", "def", "add_monoid_hom_left", ["matrix", "mul_vec"]], ["mod", "def", "mul_vec", ["matrix"]], ["mod", "theorem", "mul_vec_add", ["matrix"]], ["mod", "theorem", "mul_vec_diagonal", ["matrix"]], ["mod", "theorem", "mul_vec_mul_vec", ["matrix"]], ["mod", "theorem", "mul_vec_neg", ["matrix"]], ["mod", "theorem", "mul_vec_smul_assoc", ["matrix"]], ["mod", "theorem", "mul_vec_transpose", ["matrix"]], ["mod", "theorem", "mul_vec_zero", ["matrix"]], ["mod", "theorem", "neg_mul_vec", ["matrix"]], ["mod", "theorem", "neg_vec_mul", ["matrix"]], ["mod", "theorem", "one_minor_mul", ["matrix"]], ["mod", "theorem", "one_mul_vec", ["matrix"]], ["mod", "theorem", "reindex_trans", ["matrix"]], ["mod", "theorem", "row_mul_col_apply", ["matrix"]], ["mod", "theorem", "row_mul_vec", ["matrix"]], ["mod", "theorem", "row_vec_mul", ["matrix"]], ["mod", "theorem", "smul_eq_diagonal_mul", ["matrix"]], ["mod", "theorem", "smul_mul", ["matrix"]], ["mod", "theorem", "smul_mul_vec_assoc", ["matrix"]], ["mod", "theorem", "star_mul", ["matrix"]], ["mod", "theorem", "transpose_mul", ["matrix"]], ["mod", "def", "vec_mul", ["matrix"]], ["mod", "theorem", "vec_mul_add", ["matrix"]], ["mod", "theorem", "vec_mul_diagonal", ["matrix"]], ["mod", "theorem", "vec_mul_neg", ["matrix"]], ["mod", "theorem", "vec_mul_one", ["matrix"]], ["mod", "theorem", "vec_mul_transpose", ["matrix"]], ["mod", "theorem", "vec_mul_vec_mul", ["matrix"]], ["mod", "theorem", "vec_mul_zero", ["matrix"]], ["mod", "theorem", "zero_mul_vec", ["matrix"]], ["mod", "theorem", "zero_vec_mul", ["matrix"]], ["mod", "def", "matrix", []]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["mod", "theorem", "block_diagonal'_mul", ["matrix"]], ["mod", "theorem", "block_diagonal_mul", ["matrix"]], ["mod", "theorem", "from_blocks_multiply", ["matrix"]], ["mod", "def", "to_block", ["matrix"]], ["mod", "theorem", "to_block_apply", ["matrix"]], ["mod", "def", "to_square_block_prop", ["matrix"]], ["mod", "theorem", "to_square_block_prop_def", ["matrix"]]]}, {"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": [["mod", "theorem", "mul_kronecker_mul", ["matrix"]], ["mod", "theorem", "mul_kronecker_tmul_mul", ["matrix"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "cons_mul", ["matrix"]], ["mod", "theorem", "cons_mul_vec", ["matrix"]], ["mod", "theorem", "empty_mul", ["matrix"]], ["mod", "theorem", "empty_mul_vec", ["matrix"]], ["mod", "theorem", "mul_empty", ["matrix"]], ["mod", "theorem", "mul_val_succ", ["matrix"]], ["mod", "theorem", "vec_mul_empty", ["matrix"]]]}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["mod", "theorem", "matrix_mul_apply", ["pequiv"]], ["mod", "theorem", "mul_matrix_apply", ["pequiv"]], ["mod", "theorem", "single_mul_single", ["pequiv"]], ["mod", "theorem", "single_mul_single_of_ne", ["pequiv"]], ["mod", "theorem", "single_mul_single_right", ["pequiv"]], ["mod", "theorem", "to_matrix_trans", ["pequiv"]], ["mod", "theorem", "to_pequiv_mul_matrix", ["pequiv"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "def", "to_bilin'_aux", ["matrix"]], ["mod", "theorem", "to_bilin'_aux_std_basis", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["mod", "theorem", "sum_to_matrix_smul_self", ["basis"]], ["mod", "theorem", "to_lin_to_matrix", ["basis"]], ["mod", "theorem", "to_matrix_eq_to_matrix_constr", ["basis"]], ["mod", "def", "to_matrix_equiv", ["basis"]], ["mod", "theorem", "to_matrix_mul_to_matrix", ["basis"]]]}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": [["mod", "def", "block_triangular_matrix'", ["matrix"]], ["mod", "def", "block_triangular_matrix", ["matrix"]], ["mod", "theorem", "upper_two_block_triangular'", ["matrix"]], ["mod", "theorem", "upper_two_block_triangular", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": [["mod", "theorem", "det_reindex_alg_equiv", ["matrix"]], ["mod", "theorem", "det_reindex_linear_equiv_self", ["matrix"]], ["mod", "theorem", "mul_reindex_linear_equiv_one", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_mul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["mod", "def", "alg_equiv_matrix'", []], ["mod", "def", "alg_equiv_matrix", []], ["mod", "theorem", "to_matrix'_comp", ["linear_map"]], ["mod", "theorem", "to_matrix'_mul", ["linear_map"]], ["mod", "theorem", "to_matrix_comp", ["linear_map"]], ["mod", "def", "mul_vec_lin", ["matrix"]], ["mod", "theorem", "mul_vec_lin_apply", ["matrix"]], ["mod", "theorem", "rank_vec_mul_vec", ["matrix"]], ["mod", "theorem", "to_lin'_mul", ["matrix"]], ["mod", "theorem", "to_lin'_mul_apply", ["matrix"]], ["mod", "def", "to_lin'_of_inv", ["matrix"]], ["mod", "theorem", "to_lin_mul", ["matrix"]], ["mod", "theorem", "to_lin_mul_apply", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": [["mod", "def", "trace", ["matrix"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}]}, {"timestamp": 1629976646, "sha": "0861cc75", "message": "refactor(*): move code about `ulift`/`plift` (#8863)\n* move old file about `ulift`/`plift` from `data.ulift` to `control.ulift`;\n* redefine `ulift.map` etc without pattern matching;\n* create new `data.ulift`, move `ulift.subsingleton` etc from `data.equiv.basic` to this file;\n* add `ulift.is_empty` and `plift.is_empty`;\n* add `ulift.exists`, `plift.exists`, `ulift.forall`, and `plift.forall`;\n* rename `equiv.nonempty_iff_nonempty` to `equiv.nonempty_congr` to match `equiv.subsingleton_congr` etc;\n* rename `plift.fintype` to `plift.fintype_Prop`, add a new `plift.fintype`.", "changes": [{"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism_classes.lean", "newPath": "src/category_theory/isomorphism_classes.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/control/functor.lean", "newPath": "src/control/functor.lean", "changes": []}, {"oldPath": null, "newPath": "src/control/ulift.lean", "changes": [["add", "theorem", "bind_up", ["plift"]], ["add", "theorem", "map_up", ["plift"]], ["add", "theorem", "constant", ["plift", "rec"]], ["add", "theorem", "seq_up", ["plift"]], ["add", "theorem", "bind_up", ["ulift"]], ["add", "theorem", "map_up", ["ulift"]], ["add", "theorem", "constant", ["ulift", "rec"]], ["add", "theorem", "seq_up", ["ulift"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "nonempty_congr", ["equiv"]], ["del", "theorem", "nonempty_iff_nonempty", ["equiv"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_plift", ["fintype"]]]}, {"oldPath": "src/data/ulift.lean", "newPath": "src/data/ulift.lean", "changes": [["del", "theorem", "constant", ["plift", "rec"]], ["add", "theorem", "«exists»", ["plift"]], ["add", "theorem", "«forall»", ["plift"]], ["del", "theorem", "constant", ["ulift", "rec"]], ["add", "theorem", "«exists»", ["ulift"]], ["add", "theorem", "«forall»", ["ulift"]]]}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}]}, {"timestamp": 1629976645, "sha": "2a6fef39", "message": "refactor(order/filter/bases): allow `ι : Sort*` (#8856)\n* `ι` in `filter.has_basis (l : filter α) (p : ι → Prop) (s : ι → set )` now can be a `Sort *`;\n* some lemmas now have \"primed\" versions that use `pprod` instead of `prod`;\n* new lemma: `filter.has_basis_supr`.\nI also added a few missing lemmas to `data.pprod` and golfed a couple of proofs.", "changes": [{"oldPath": "src/data/pprod.lean", "newPath": "src/data/pprod.lean", "changes": [["add", "theorem", "exists'", ["pprod"]], ["add", "theorem", "forall'", ["pprod"]], ["mod", "theorem", "eta", ["pprod", "mk"]], ["add", "theorem", "«exists»", ["pprod"]], ["add", "theorem", "«forall»", ["pprod"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "structure", "has_antimono_basis", ["filter"]], ["add", "theorem", "inf'", ["filter", "has_basis"]], ["mod", "theorem", "inf", ["filter", "has_basis"]], ["add", "theorem", "prod''", ["filter", "has_basis"]], ["mod", "theorem", "prod", ["filter", "has_basis"]], ["add", "theorem", "sup'", ["filter", "has_basis"]], ["mod", "theorem", "sup", ["filter", "has_basis"]], ["mod", "theorem", "has_basis_binfi_principal'", ["filter"]], ["mod", "theorem", "has_basis_infi_principal_finite", ["filter"]], ["add", "theorem", "has_basis_supr", ["filter"]], ["mod", "structure", "is_antimono_basis", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1629976644, "sha": "3287c942", "message": "refactor(tactic/ext): simplify ext attribute (#8785)\nThis simplifies the `ext` attribute from taking a list with `*`, `(->)` and names to just `@[ext]` or `@[ext ident]`. The `(->)` option is only used once, in the file that declares the `ext` attribute itself, so it's not worth the parser complexity. The ability to remove attributes with `@[ext -foo]` is removed, but I don't think it was tested because it was never used and doesn't work anyway.\nAlso fixes an issue with ext attributes being quadratic (in the number of ext attributes applied), and also makes `ext` attributes remove themselves (the real work of ext attributes is done by two internal attributes `_ext_core` and `_ext_lemma_core`), so that they don't pollute `#print` output. Before:\n```lean\n#print funext\n@[_ext_lemma_core, ext list.cons.{0} ext_param_type (sum.inr.{0 0} (option.{0} name) (option.{0} name) (option.some.{0} name (name.mk_numeral (unsigned.of_nat' (has_zero.zero.{0} nat nat.has_zero)) name.anonymous))) (list.cons.{0} ext_param_type (sum.inr.{0 0} (option.{0} name) (option.{0} name) (option.some.{0} name (name.mk_string \"thunk\" name.anonymous))) (list.nil.{0} ext_param_type)), intro!]\ntheorem funext : ∀ {α : Sort u} {β : α → Sort v} {f₁ f₂ : Π (x : α), β x}, (∀ (x : α), f₁ x = f₂ x) → f₁ = f₂ :=\n```\nAfter:\n```lean\n#print funext\n@[_ext_lemma_core, intro!]\ntheorem funext : ∀ {α : Sort u} {β : α → Sort v} {f₁ f₂ : Π (x : α), β x}, (∀ (x : α), f₁ x = f₂ x) → f₁ = f₂ :=\n```", "changes": [{"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": [["del", "def", "ext_param_type", []]]}]}, {"timestamp": 1629976643, "sha": "a4b33d35", "message": "feat(data/matrix/kronecker): add two reindex lemmas (#8774)\nAdded two lemmas `kronecker_map_reindex_right` and `kronecker_map_reindex_left` (used in LTE) and moved the two `assoc` lemmas some lines up, before the `linear` section, because they are unrelated to any linearity business.", "changes": [{"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": [["add", "theorem", "kronecker_map_reindex", ["matrix"]], ["add", "theorem", "kronecker_map_reindex_left", ["matrix"]], ["add", "theorem", "kronecker_map_reindex_right", ["matrix"]]]}]}, {"timestamp": 1629976642, "sha": "3e5bbcae", "message": "feat(field_theory/intermediate_field): generalize `algebra` instances (#8761)\nThe `algebra` and `is_scalar_tower` instances for `intermediate_field` are (again) as general as those for `subalgebra`.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}]}, {"timestamp": 1629976641, "sha": "2c698bd1", "message": "docs(set_theory/zfc): add module docstring and missing def docstrings (#8744)", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["mod", "def", "fval", ["Class"]], ["mod", "def", "iota", ["Class"]], ["mod", "theorem", "iota_val", ["Class"]], ["mod", "def", "to_Set", ["Class"]], ["mod", "theorem", "Union_lem", ["Set"]], ["mod", "theorem", "choice_mem_aux", ["Set"]], ["mod", "theorem", "eq_empty", ["Set"]], ["mod", "theorem", "ext", ["Set"]], ["mod", "theorem", "ext_iff", ["Set"]], ["mod", "theorem", "induction_on", ["Set"]], ["mod", "theorem", "mem_empty", ["Set"]], ["mod", "theorem", "mem_image", ["Set"]], ["mod", "theorem", "mem_prod", ["Set"]], ["mod", "def", "prod", ["Set"]], ["mod", "def", "arity", []], ["mod", "def", "embed", ["pSet"]], ["add", "theorem", "rfl", ["pSet", "equiv"]], ["mod", "theorem", "equiv_iff_mem", ["pSet"]], ["mod", "theorem", "congr_left", ["pSet", "mem"]], ["mod", "theorem", "congr_right", ["pSet", "mem"]], ["mod", "theorem", "ext", ["pSet", "mem"]], ["mod", "theorem", "mem_Union", ["pSet"]], ["mod", "theorem", "mem_empty", ["pSet"]], ["mod", "theorem", "mem_image", ["pSet"]], ["mod", "def", "omega", ["pSet"]], ["mod", "def", "resp", ["pSet"]]]}]}, {"timestamp": 1629972158, "sha": "2e1e98fa", "message": "feat(linear_algebra/bilinear_form): bilinear forms with `det ≠ 0` are nonsingular (#8824)\nIn particular, the trace form is such a bilinear form (see #8777).", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "nondegenerate_of_det_ne_zero'", ["bilin_form"]], ["add", "theorem", "nondegenerate_of_det_ne_zero", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "theorem", "nondegenerate_of_det_ne_zero", ["matrix"]]]}]}, {"timestamp": 1629972157, "sha": "147af575", "message": "feat(category_theory/is_connected): The opposite of a connected category is connected (#8806)", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["add", "theorem", "is_connected_of_is_connected_op", ["category_theory"]], ["add", "theorem", "is_preconnected_of_is_preconnected_op", ["category_theory"]]]}]}, {"timestamp": 1629972156, "sha": "058f639e", "message": "feat(data/equiv/fin): fin_succ_equiv_last (#8805)\nThis commit changes the type of `fin_succ_equiv'`. `fin_succ_equiv' i` used to take an argument of type `fin n` which was \nstrange and it now takes an argument of type `fin (n + 1)` meaning it is now possible to send `fin.last n` to `none` if desired. I also defined `fin.succ_equiv_last`, the canonical equiv `fin (n + 1)` to `option (fin n)` sending `fin.last` to `none`.", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["mod", "def", "fin_succ_equiv'", []], ["mod", "theorem", "fin_succ_equiv'_above", []], ["mod", "theorem", "fin_succ_equiv'_below", []], ["add", "theorem", "fin_succ_equiv'_symm_coe_above", []], ["add", "theorem", "fin_succ_equiv'_symm_coe_below", []], ["add", "theorem", "fin_succ_equiv'_symm_some_above", []], ["add", "theorem", "fin_succ_equiv'_symm_some_below", []], ["add", "def", "fin_succ_equiv_last", []], ["add", "theorem", "fin_succ_equiv_last_cast_succ", []], ["add", "theorem", "fin_succ_equiv_last_last", []], ["add", "theorem", "fin_succ_equiv_last_symm_coe", []], ["add", "theorem", "fin_succ_equiv_last_symm_none", []], ["add", "theorem", "fin_succ_equiv_last_symm_some", []], ["del", "theorem", "fin_succ_equiv_symm'_coe_above", []], ["del", "theorem", "fin_succ_equiv_symm'_coe_below", []], ["del", "theorem", "fin_succ_equiv_symm'_some_above", []], ["del", "theorem", "fin_succ_equiv_symm'_some_below", []]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}]}, {"timestamp": 1629969502, "sha": "94d4a32c", "message": "feat(linear_algebra/bilinear_form): the dual basis for a nondegenerate bilin form (#8823)\nLet `B` be a nondegenerate (symmetric) bilinear form on a finite-dimensional vector space `V` and `b` a basis on `V`. Then there is a \"dual basis\" `d` such that `d.repr x i = B x (b i)` and `B (d i) (b j) = B (b i) (d j) = if i = j then 1 else 0`.\nIn a follow-up PR, we'll show that the trace form for `L / K` produces a dual basis consisting only of elements integral over the ring of integers of `K`.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "apply_dual_basis_left", ["bilin_form"]], ["add", "theorem", "apply_dual_basis_right", ["bilin_form"]], ["add", "theorem", "dual_basis_repr_apply", ["bilin_form"]]]}]}, {"timestamp": 1629961283, "sha": "acbe9359", "message": "chore(topology/metric_space): add 2 lemmas, golf (#8861)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "comap_dist_left_at_top_eq_cocompact", []], ["add", "theorem", "comap_dist_left_at_top_le_cocompact", []], ["add", "theorem", "comap_dist_right_at_top_eq_cocompact", []], ["add", "theorem", "comap_dist_right_at_top_le_cocompact", []], ["add", "theorem", "subset_ball", ["metric", "bounded"]], ["add", "theorem", "tendsto_cocompact_of_tendsto_dist_comp_at_top", []]]}]}, {"timestamp": 1629961282, "sha": "94385528", "message": "feat(data/fin): cast_add_lt (#8830)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_add_lt", ["fin"]]]}]}, {"timestamp": 1629961281, "sha": "6c6fc021", "message": "feat(data/fin): cast_add_right (#8829)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "cast_add_right", ["fin"]], ["add", "theorem", "coe_cast_add_right", ["fin"]], ["add", "theorem", "le_cast_add_right", ["fin"]]]}]}, {"timestamp": 1629961280, "sha": "bafeccf2", "message": "feat(data/fin): fin.succ_cast_succ (#8828)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "succ_cast_succ", ["fin"]]]}]}, {"timestamp": 1629961279, "sha": "cb1932d7", "message": "feat(data/complex/exponential): bound on exp for arbitrary arguments (#8667)\nThis PR is for a new lemma (currently called `exp_bound'`) which proves `exp x` is close to its `n`th degree taylor expansion for sufficiently large `n`. Unlike the previous bound, this lemma can be instantiated on any real `x` rather than just `x` with absolute value less than or equal to 1. I am separating this lemma out from #8002 because I think it stands on its own.\nThe last time I checked it was sorry free - but that was before I merged with master and moved it to a different branch. It may also benefit from a little golfing.\nThere are a few lemmas I proved as well to support this - one about the relative size of factorials and a few about sums of geometric sequences. The ~~geometric series ones should probably be generalized and moved to another file~~ this generalization sort of exists and is in the algebra.geom_sum file. I didn't find it initially since I was searching for \"geometric\" not \"geom\".", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_range_add_div_prod_range", ["finset"]]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_eq_of_eq_mul'", []], ["del", "theorem", "sub_eq_of_eq_add'", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_bound'", ["complex"]]]}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["add", "theorem", "factorial_mul_pow_sub_le_factorial", ["nat"]]]}]}, {"timestamp": 1629955055, "sha": "fe477776", "message": "feat(analysis/complex/upper_half_plane): new file (#8377)\nThis file defines `upper_half_plane` to be the upper half plane in `ℂ`.\nWe furthermore equip it with the structure of an `SL(2,ℝ)` action by\nfractional linear transformations.\nCo-authored by Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com>\nCo-authored by Marc Masdeu ", "changes": [{"oldPath": null, "newPath": "src/analysis/complex/upper_half_plane.lean", "changes": [["add", "theorem", "coe_im", ["upper_half_plane"]], ["add", "theorem", "coe_re", ["upper_half_plane"]], ["add", "theorem", "coe_smul", ["upper_half_plane"]], ["add", "def", "denom", ["upper_half_plane"]], ["add", "theorem", "denom_cocycle", ["upper_half_plane"]], ["add", "theorem", "denom_ne_zero", ["upper_half_plane"]], ["add", "def", "im", ["upper_half_plane"]], ["add", "theorem", "im_ne_zero", ["upper_half_plane"]], ["add", "theorem", "im_pos", ["upper_half_plane"]], ["add", "theorem", "im_smul", ["upper_half_plane"]], ["add", "theorem", "im_smul_eq_div_norm_sq", ["upper_half_plane"]], ["add", "theorem", "linear_ne_zero", ["upper_half_plane"]], ["add", "theorem", "mul_smul'", ["upper_half_plane"]], ["add", "theorem", "ne_zero", ["upper_half_plane"]], ["add", "theorem", "neg_smul", ["upper_half_plane"]], ["add", "theorem", "norm_sq_denom_ne_zero", ["upper_half_plane"]], ["add", "theorem", "norm_sq_denom_pos", ["upper_half_plane"]], ["add", "theorem", "norm_sq_ne_zero", ["upper_half_plane"]], ["add", "theorem", "norm_sq_pos", ["upper_half_plane"]], ["add", "def", "num", ["upper_half_plane"]], ["add", "def", "re", ["upper_half_plane"]], ["add", "theorem", "re_smul", ["upper_half_plane"]], ["add", "def", "smul_aux'", ["upper_half_plane"]], ["add", "theorem", "smul_aux'_im", ["upper_half_plane"]], ["add", "def", "smul_aux", ["upper_half_plane"]], ["add", "def", "upper_half_plane", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_fin_even", ["fintype"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_fin_one", ["matrix"]], ["add", "theorem", "det_fin_three", ["matrix"]], ["add", "theorem", "det_fin_two", ["matrix"]], ["add", "theorem", "det_fin_zero", ["matrix"]], ["mod", "theorem", "det_smul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["add", "theorem", "coe_neg", ["matrix", "special_linear_group"]], ["add", "theorem", "det_ne_zero", ["matrix", "special_linear_group"]], ["add", "theorem", "row_ne_zero", ["matrix", "special_linear_group"]]]}]}, {"timestamp": 1629949908, "sha": "7e781a8e", "message": "chore(*): Fix syntactic tautologies (#8811)\nFix a few lemmas that were accidentally tautological in the sense that they were equations with syntactically equal LHS and RHS.\nA linter will be added in a second PR, for now we just fix the found issues.\nIt would be great if a category expert like @semorrison would check the category ones, as its unclear to me which direction they are meant to go.\nAs pointed out by @PatrickMassot on Zulip https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/syntactic.20tautology.20linter/near/250267477.\nThanks to @eric-wieser for helping figure out the corrected versions.", "changes": [{"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["mod", "theorem", "coe_id", ["affine_isometry"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["mod", "theorem", "coe_id", ["linear_isometry"]]]}, {"oldPath": "src/category_theory/sums/basic.lean", "newPath": "src/category_theory/sums/basic.lean", "changes": [["mod", "theorem", "sum_comp_inl", ["category_theory"]], ["mod", "theorem", "sum_comp_inr", ["category_theory"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "mk_eq_mk", ["submodule", "quotient"]]]}]}, {"timestamp": 1629945773, "sha": "daf0d02f", "message": "feat(archive/imo): README.md (#8799)\nProposed text for a README file in the IMO directory. I don't think we have a particular problem with IMO submissions, but thought it could be useful to set the parameters around IMO problems, as it's never been completely clear they belong in mathlib.\nIf we merge this, or something like it, I'll link #imo on Zulip to it.", "changes": [{"oldPath": null, "newPath": "archive/imo/README.md", "changes": []}]}, {"timestamp": 1629926823, "sha": "8befa828", "message": "feat(group_theory/perm/list): lemmas on form_perm (#8848)", "changes": [{"oldPath": "src/group_theory/perm/list.lean", "newPath": "src/group_theory/perm/list.lean", "changes": [["add", "theorem", "form_perm_apply_mem_eq_self_iff", ["list"]], ["add", "theorem", "form_perm_apply_mem_ne_self_iff", ["list"]], ["add", "theorem", "form_perm_apply_not_mem", ["list"]], ["add", "theorem", "form_perm_eq_form_perm_iff", ["list"]], ["add", "theorem", "form_perm_eq_one_iff", ["list"]], ["add", "theorem", "form_perm_gpow_apply_mem_imp_mem", ["list"]], ["add", "theorem", "form_perm_ne_self_imp_mem", ["list"]], ["add", "theorem", "form_perm_pow_apply_head", ["list"]], ["add", "theorem", "form_perm_pow_length_eq_one_of_nodup", ["list"]]]}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": [["add", "theorem", "coe_support_eq_set_support", ["equiv", "perm"]], ["add", "theorem", "set_support_apply_mem", ["equiv", "perm"]], ["add", "theorem", "set_support_gpow_subset", ["equiv", "perm"]], ["add", "theorem", "set_support_inv_eq", ["equiv", "perm"]], ["add", "theorem", "set_support_mul_subset", ["equiv", "perm"]]]}]}, {"timestamp": 1629926821, "sha": "49af34d9", "message": "feat(group_theory/perm/cycles): same_cycle and cycle_of lemmas (#8835)", "changes": [{"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "card_support_cycle_of_pos_iff", ["equiv", "perm"]], ["add", "theorem", "cycle_of_self_apply", ["equiv", "perm"]], ["add", "theorem", "cycle_of_self_apply_gpow", ["equiv", "perm"]], ["add", "theorem", "cycle_of_self_apply_pow", ["equiv", "perm"]], ["add", "theorem", "pow_mod_card_support_cycle_of_self_apply", ["equiv", "perm"]], ["add", "theorem", "cycle_of_eq", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "mem_support_iff", ["equiv", "perm", "same_cycle"]], ["mod", "theorem", "symm", ["equiv", "perm", "same_cycle"]], ["mod", "theorem", "trans", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "same_cycle_gpow_left_iff", ["equiv", "perm"]], ["add", "theorem", "support_cycle_of_le", ["equiv", "perm"]], ["add", "theorem", "two_le_card_support_cycle_of_iff", ["equiv", "perm"]]]}]}, {"timestamp": 1629916375, "sha": "40bd7c69", "message": "feat(data/nat/modeq): Rotating list.repeat (#8817)\nSome consequences of `list.rotate_eq_self_iff_eq_repeat`.", "changes": [{"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "rotate_one_eq_self_iff_eq_repeat", ["list"]], ["add", "theorem", "rotate_repeat", ["list"]]]}]}, {"timestamp": 1629916374, "sha": "c544742c", "message": "feat(linear_algebra/finite_dimensional): add finrank_map_le (#8815)", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_map_eq", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_map_le", ["finite_dimensional"]], ["add", "theorem", "finrank_map_eq", ["linear_equiv"]]]}]}, {"timestamp": 1629916373, "sha": "6a418050", "message": "chore(group_theory/group_action/basic): `to_additive` attributes throughout (#8814)", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "exists_vadd_eq", ["add_action"]], ["del", "theorem", "exists_smul_eq", []], ["add", "theorem", "exists_smul_eq", ["mul_action"]], ["mod", "theorem", "fixed_eq_Inter_fixed_by", ["mul_action"]], ["mod", "theorem", "injective_of_quotient_stabilizer", ["mul_action"]], ["mod", "theorem", "mem_fixed_by", ["mul_action"]], ["mod", "theorem", "mem_fixed_points'", ["mul_action"]], ["mod", "theorem", "mem_fixed_points", ["mul_action"]], ["mod", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["mul_action"]], ["mod", "theorem", "mem_orbit", ["mul_action"]], ["mod", "theorem", "mem_orbit_iff", ["mul_action"]], ["mod", "theorem", "mem_orbit_self", ["mul_action"]], ["mod", "theorem", "mem_orbit_smul", ["mul_action"]], ["mod", "theorem", "mem_stabilizer_iff", ["mul_action"]], ["mod", "theorem", "mem_stabilizer_submonoid_iff", ["mul_action"]], ["mod", "theorem", "of_quotient_stabilizer_mem_orbit", ["mul_action"]], ["mod", "theorem", "of_quotient_stabilizer_mk", ["mul_action"]], ["mod", "theorem", "of_quotient_stabilizer_smul", ["mul_action"]], ["mod", "theorem", "orbit_eq_iff", ["mul_action"]], ["mod", "theorem", "orbit_equiv_quotient_stabilizer_symm_apply", ["mul_action"]], ["mod", "theorem", "smul_coe", ["mul_action", "quotient"]], ["mod", "theorem", "smul_mk", ["mul_action", "quotient"]], ["mod", "theorem", "smul_mem_orbit_smul", ["mul_action"]], ["mod", "theorem", "stabilizer_quotient", ["mul_action"]]]}]}, {"timestamp": 1629916372, "sha": "b6e6c84f", "message": "feat(data/finset/basic): to_list (#8797)\nProduce a list of the elements of a finite set using choice.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "coe_to_list", ["finset"]], ["add", "theorem", "length_to_list", ["finset"]], ["add", "theorem", "mem_to_list", ["finset"]], ["add", "theorem", "nodup_to_list", ["finset"]], ["add", "theorem", "to_list_empty", ["finset"]], ["add", "theorem", "to_list_to_finset", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "sort_perm_to_list", ["finset"]]]}]}, {"timestamp": 1629916370, "sha": "aca0874a", "message": "chore(algebra/direct_sum): Move all the algebraic structure on `direct_sum` into a single directory (#8771)\nThis ends up splitting one file in two, but all the contents are just moved.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/direct_sum/finsupp.lean", "changes": [["add", "def", "finsupp_lequiv_direct_sum", []], ["add", "theorem", "finsupp_lequiv_direct_sum_single", []], ["add", "theorem", "finsupp_lequiv_direct_sum_symm_lof", []]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/algebra/direct_sum/module.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum_graded.lean", "newPath": "src/algebra/direct_sum/ring.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra_to_direct_sum.lean", "newPath": "src/algebra/monoid_algebra_to_direct_sum.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": [["del", "def", "finsupp_lequiv_direct_sum", []], ["del", "theorem", "finsupp_lequiv_direct_sum_single", []], ["del", "theorem", "finsupp_lequiv_direct_sum_symm_lof", []]]}, {"oldPath": "src/linear_algebra/direct_sum/tensor_product.lean", "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}]}, {"timestamp": 1629916369, "sha": "df8818c7", "message": "feat(data/nat/multiplicity): bound on the factorial multiplicity (#8767)\nThis proves `multiplicity p n! ≤ n/(p - 1)`, for `p` prime and `n` natural.", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "geom_sum_Ico_le", ["nat"]], ["add", "theorem", "geom_sum_le", ["nat"]], ["add", "theorem", "pred_mul_geom_sum_le", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_factorial_le_div_pred", ["nat", "prime"]]]}]}, {"timestamp": 1629916368, "sha": "301eb10e", "message": "feat(data/polynomial/monic): monic.is_regular (#8679)\nThis golfs/generalizes some proofs.\nAdditionally, provide some helper API for `is_regular`,\nfor non-zeros in domains,\nand for smul of units.", "changes": [{"oldPath": "src/algebra/regular/smul.lean", "newPath": "src/algebra/regular/smul.lean", "changes": [["add", "theorem", "is_smul_regular_of_group", []], ["mod", "theorem", "is_smul_regular", ["units"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["del", "theorem", "degree_smul_of_non_zero_divisor", ["polynomial"]], ["add", "theorem", "degree_smul_of_smul_regular", ["polynomial"]], ["del", "theorem", "leading_coeff_smul_of_non_zero_divisor", ["polynomial"]], ["add", "theorem", "leading_coeff_smul_of_smul_regular", ["polynomial"]], ["add", "theorem", "is_regular", ["polynomial", "monic"]], ["del", "theorem", "nat_degree_smul_of_non_zero_divisor", ["polynomial"]], ["add", "theorem", "nat_degree_smul_of_smul_regular", ["polynomial"]]]}]}, {"timestamp": 1629911015, "sha": "b364cfc3", "message": "feat(linear_algebra/basis): if `R ≃ R'`, map a basis for `R`-module `M` to `R'`-module `M` (#8699)\nIf `R` and `R'` are isomorphic rings that act identically on a module `M`, then a basis for `M` as `R`-module is also a basis for `M` as `R'`-module.", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_of_bijective", ["ring_equiv"]], ["add", "theorem", "of_bijective_apply", ["ring_equiv"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "coe_map_coeffs", ["basis"]], ["add", "def", "map_coeffs", ["basis"]], ["add", "theorem", "map_coeffs_apply", ["basis"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "algebra_map_coeffs_apply", ["basis"]], ["add", "theorem", "coe_algebra_map_coeffs", ["basis"]]]}]}, {"timestamp": 1629905211, "sha": "0ad5abc7", "message": "chore(data/set/finite): golf 2 proofs (#8862)\nAlso add `finset.coe_emb`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "coe_coe_emb", ["finset"]], ["add", "def", "coe_emb", ["finset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "subset_to_finset_iff", ["set"]]]}]}, {"timestamp": 1629896299, "sha": "97c327cc", "message": "feat(tactic/suggest): suggest using X, to filter results (#8819)\nYou can now write `suggest using X`, to only give suggestions which make use of the local hypothesis `X`.\nSimilarly `suggest using X Y Z` for multiple hypotheses. `library_search using X` is also enabled.\nThis makes `suggest` much more useful. Previously\n```\nexample (P Q : list ℕ) : list ℕ := by suggest\n```\nwould have just said `exact P`.\nNow you can write\n```\nexample (P Q : list ℕ) : list ℕ := by suggest using P Q\n```\nand get:\n```\nTry this: exact list.diff P Q\nTry this: exact list.union P Q\nTry this: exact list.inter P Q\nTry this: exact list.append P Q\nTry this: exact list.bag_inter P Q\nTry this: exact list.remove_all P Q\nTry this: exact list.reverse_core P Q\n```", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}]}, {"timestamp": 1629873567, "sha": "26a32863", "message": "fix(data/set/lattice): lemmas about `Union`/`Inter` over `p : Prop` (#8860)\nWith recently added `@[congr]` lemmas, it suffices to deal with unions/inters over `true` and `false`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Infi_eq_dif", ["set"]], ["add", "theorem", "Inter_eq_if", ["set"]], ["add", "theorem", "Union_eq_dif", ["set"]], ["add", "theorem", "Union_eq_if", ["set"]], ["del", "theorem", "Union_prop", ["set"]], ["del", "theorem", "Union_prop_neg", ["set"]], ["del", "theorem", "Union_prop_pos", ["set"]]]}]}, {"timestamp": 1629873566, "sha": "4a0c3d71", "message": "feat(linear_algebra/finite_dimension): nontriviality lemmas (#8851)\nA vector space of `finrank` greater than zero is `nontrivial`, likewise a vector space whose `finrank` is equal to the successor of a natural number.\nAlso write the non-`fact` version of `finite_dimensional_of_finrank_eq_succ`, a lemma which previously existed under a `fact` hypothesis, and rename the `fact` version to `fact_finite_dimensional_of_finrank_eq_succ`.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "fact_finite_dimensional_of_finrank_eq_succ", ["finite_dimensional"]], ["mod", "theorem", "finite_dimensional_of_finrank_eq_succ", ["finite_dimensional"]], ["add", "theorem", "nontrivial_of_finrank_eq_succ", ["finite_dimensional"]], ["add", "theorem", "nontrivial_of_finrank_pos", ["finite_dimensional"]]]}]}, {"timestamp": 1629873565, "sha": "fd036259", "message": "chore(ring_theory/ideal): Move local rings into separate file (#8849)\nMoves the material on local rings and local ring homomorphisms into a separate file and adds a module docstring.", "changes": [{"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["del", "theorem", "is_unit_map_iff", []], ["del", "theorem", "is_unit_of_map_unit", []], ["del", "theorem", "local_of_nonunits_ideal", []], ["del", "theorem", "local_of_surjective", []], ["del", "theorem", "local_of_unique_max_ideal", []], ["del", "theorem", "local_of_unique_nonzero_prime", []], ["del", "theorem", "eq_maximal_ideal", ["local_ring"]], ["del", "theorem", "is_unit_of_mem_nonunits_one_sub_self", ["local_ring"]], ["del", "theorem", "is_unit_one_sub_self_of_mem_nonunits", ["local_ring"]], ["del", "theorem", "is_unit_or_is_unit_one_sub_self", ["local_ring"]], ["del", "theorem", "le_maximal_ideal", ["local_ring"]], ["del", "def", "maximal_ideal", ["local_ring"]], ["del", "theorem", "maximal_ideal_unique", ["local_ring"]], ["del", "theorem", "mem_maximal_ideal", ["local_ring"]], ["del", "theorem", "nonunits_add", ["local_ring"]], ["del", "def", "residue", ["local_ring"]], ["del", "def", "residue_field", ["local_ring"]], ["del", "theorem", "map_nonunit", []], ["del", "theorem", "of_irreducible_map", []]]}, {"oldPath": null, "newPath": "src/ring_theory/ideal/local_ring.lean", "changes": [["add", "theorem", "is_unit_map_iff", []], ["add", "theorem", "is_unit_of_map_unit", []], ["add", "theorem", "local_of_nonunits_ideal", []], ["add", "theorem", "local_of_surjective", []], ["add", "theorem", "local_of_unique_max_ideal", []], ["add", "theorem", "local_of_unique_nonzero_prime", []], ["add", "theorem", "eq_maximal_ideal", ["local_ring"]], ["add", "theorem", "is_unit_of_mem_nonunits_one_sub_self", ["local_ring"]], ["add", "theorem", "is_unit_one_sub_self_of_mem_nonunits", ["local_ring"]], ["add", "theorem", "is_unit_or_is_unit_one_sub_self", ["local_ring"]], ["add", "theorem", "le_maximal_ideal", ["local_ring"]], ["add", "def", "maximal_ideal", ["local_ring"]], ["add", "theorem", "maximal_ideal_unique", ["local_ring"]], ["add", "theorem", "mem_maximal_ideal", ["local_ring"]], ["add", "theorem", "nonunits_add", ["local_ring"]], ["add", "def", "residue", ["local_ring"]], ["add", "def", "residue_field", ["local_ring"]], ["add", "theorem", "map_nonunit", []], ["add", "theorem", "of_irreducible_map", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1629873564, "sha": "88db4e2c", "message": "feat(ring_theory): `M / S` is noetherian if `M / S / R` is (#8846)\nLet `M` be an `S`-module and `S` an `R`-algebra. Then to show `M` is noetherian as an `S`-module, it suffices to show it is noetherian as an `R`-module.", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "def", "restrict_scalars_embedding", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_of_tower", []]]}]}, {"timestamp": 1629873563, "sha": "00e57d32", "message": "chore(order/rel_iso): rename `order_embedding.of_map_rel_iff` to `of_map_le_iff` (#8839)\nThe old name comes from `rel_embedding`.", "changes": [{"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "coe_of_map_le_iff", ["order_embedding"]], ["del", "theorem", "coe_of_map_rel_iff", ["order_embedding"]], ["add", "def", "of_map_le_iff", ["order_embedding"]], ["del", "def", "of_map_rel_iff", ["order_embedding"]]]}]}, {"timestamp": 1629873561, "sha": "ef428c61", "message": "feat(topology/metric_space): add `uniform_embedding.comap_metric_space` (#8838)\n* add `uniform_embedding.comap_metric_space` and\n `uniform_inducing.comap_pseudo_metric_space`;\n* use the former for `int.metric_space`;\n* also add `emetric.closed_ball_mem_nhds`.", "changes": [{"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "uniform_embedding_coe_real", ["int"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "def", "comap_metric_space", ["uniform_embedding"]], ["add", "def", "comap_pseudo_metric_space", ["uniform_inducing"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "closed_ball_mem_nhds", ["emetric"]]]}]}, {"timestamp": 1629870853, "sha": "bd9622fa", "message": "chore(category_theory/Fintype): Fix universe restriction in skeleton (#8855)\nThis removes a universe restriction in the existence of a skeleton for the category `Fintype`.\nOnce merged, `Fintype.skeleton.{u}` will be a (small) skeleton for `Fintype.{u}`, with `u` any universe parameter.", "changes": [{"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": [["add", "theorem", "comp_apply", ["Fintype"]], ["add", "theorem", "id_apply", ["Fintype"]], ["add", "theorem", "ext", ["Fintype", "skeleton"]], ["mod", "def", "incl", ["Fintype", "skeleton"]], ["mod", "theorem", "incl_mk_nat_card", ["Fintype", "skeleton"]], ["mod", "theorem", "is_skeletal", ["Fintype", "skeleton"]], ["add", "def", "len", ["Fintype", "skeleton"]], ["mod", "def", "mk", ["Fintype", "skeleton"]], ["del", "def", "to_nat", ["Fintype", "skeleton"]], ["mod", "def", "skeleton", ["Fintype"]]]}]}, {"timestamp": 1629840200, "sha": "6c3dda5c", "message": "feat(measure_theory/measure/vector_measure): add absolute continuity for vector measures (#8779)\nThis PR defines absolute continuity for vector measures and shows that a signed measure is absolutely continuous wrt to a positive measure iff its total variation is absolutely continuous wrt to that measure.", "changes": [{"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": [["add", "theorem", "absolutely_continuous_iff", ["measure_theory", "signed_measure"]], ["add", "def", "total_variation", ["measure_theory", "signed_measure"]], ["add", "theorem", "total_variation_absolutely_continuous_iff", ["measure_theory", "signed_measure"]], ["add", "theorem", "total_variation_neg", ["measure_theory", "signed_measure"]], ["add", "theorem", "total_variation_zero", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "ennreal_to_measure", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "eq", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "map", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "mk", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "refl", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "theorem", "trans", ["measure_theory", "vector_measure", "absolutely_continuous"]], ["add", "def", "absolutely_continuous", ["measure_theory", "vector_measure"]], ["add", "def", "ennreal_to_measure", ["measure_theory", "vector_measure"]], ["add", "theorem", "ennreal_to_measure_apply", ["measure_theory", "vector_measure"]], ["add", "def", "equiv_measure", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_not_measurable", ["measure_theory", "vector_measure"]]]}]}, {"timestamp": 1629802223, "sha": "1dda1cd6", "message": "feat(algebra/big_operators/finprod): a few more lemmas (#8843)\n* versions of `monoid_hom.map_finprod` that assume properties of\n `f : M →* N` instead of finiteness of the support;\n* `finsum_smul`, `smul_finsum`, `finprod_inv_distrib`: missing\n analogues of lemmas from `finset.prod`/`finset.sum` API.", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_inv_distrib", []], ["add", "theorem", "finsum_smul", []], ["add", "theorem", "map_finprod_of_injective", ["monoid_hom"]], ["add", "theorem", "map_finprod_of_preimage_one", ["monoid_hom"]], ["add", "theorem", "map_finprod", ["mul_equiv"]], ["add", "theorem", "smul_finsum", []]]}]}, {"timestamp": 1629798878, "sha": "a21fcfad", "message": "feat(data/real/nnreal): upgrade `nnabs` to a `monoid_with_zero_hom` (#8844)\nOther changes:\n* add `nnreal.finset_sup_div`;\n* rename `nnreal.coe_nnabs` to `real.coe_nnabs`;\n* add `real.nndist_eq` and `real.nndist_eq'`.", "changes": [{"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "cast_nat_abs_eq_nnabs_cast", []], ["del", "theorem", "coe_nnabs", ["nnreal"]], ["add", "theorem", "finset_sup_div", ["nnreal"]], ["add", "theorem", "cast_nat_abs_eq_nnabs_cast", ["real"]], ["add", "theorem", "coe_nnabs", ["real"]], ["mod", "theorem", "coe_to_nnreal_le", ["real"]], ["mod", "def", "nnabs", ["real"]], ["mod", "theorem", "nnabs_of_nonneg", ["real"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "nndist_eq'", ["real"]], ["add", "theorem", "nndist_eq", ["real"]]]}]}, {"timestamp": 1629793658, "sha": "19ae3179", "message": "feat(measure_theory/interval_integral): strong version of FTC-2 (#7978)\nThe equality `∫ y in a..b, f' y = f b - f a` is currently proved in mathlib assuming that `f'` is continuous. We weaken the assumption, assuming only that `f'` is integrable.", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": [["mod", "theorem", "continuous_on_mul", ["measure_theory", "integrable_on"]], ["add", "theorem", "continuous_on_mul_of_subset", ["measure_theory", "integrable_on"]], ["mod", "theorem", "mul_continuous_on", ["measure_theory", "integrable_on"]], ["add", "theorem", "mul_continuous_on_of_subset", ["measure_theory", "integrable_on"]]]}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": [["add", "theorem", "interval_integral_comp_comm", ["continuous_linear_map"]], ["add", "theorem", "continuous_on_mul", ["interval_integrable"]], ["add", "theorem", "mul_continuous_on", ["interval_integrable"]], ["add", "theorem", "interval_integrable_iff_integrable_Ioc_of_le", []], ["del", "theorem", "continuous_on_integral_of_continuous", ["interval_integral"]], ["del", "theorem", "continuous_on_primitive''", ["interval_integral"]], ["del", "theorem", "continuous_on_primitive'", ["interval_integral"]], ["add", "theorem", "continuous_on_primitive_Icc", ["interval_integral"]], ["add", "theorem", "continuous_on_primitive_interval", ["interval_integral"]], ["add", "theorem", "continuous_on_primitive_interval_left", ["interval_integral"]], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc'", ["interval_integral"]], ["add", "theorem", "integrable_on_Icc_iff_integrable_on_Ioc", ["interval_integral"]], ["add", "theorem", "integral_Icc_eq_integral_Ioc'", ["interval_integral"]], ["mod", "theorem", "integral_Icc_eq_integral_Ioc", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_at'", ["interval_integral"]], ["del", "theorem", "integral_eq_sub_of_has_deriv_at'_of_le", ["interval_integral"]], ["mod", "theorem", "integral_eq_sub_of_has_deriv_at", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_at_of_le", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_right_of_le_real'", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_right_of_le_real", ["interval_integral"]], ["add", "theorem", "integral_le_sub_of_has_deriv_right_of_le", ["interval_integral"]], ["add", "theorem", "interval_integrable_iff_integrable_Icc_of_le", ["interval_integral"]], ["add", "theorem", "sub_le_integral_of_has_deriv_right_of_le", ["interval_integral"]], ["add", "theorem", "interval_integrable", ["measure_theory", "integrable_on"]]]}]}, {"timestamp": 1629777604, "sha": "737b208a", "message": "feat(linear_algebra/dimension): generalize dim_map_le to heterogeneous universes (#8800)\nPer @hrmacbeth's [request on zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Behaviour.20of.20finrank.20under.20morphisms).", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "lift_dim_map_le", []], ["add", "theorem", "lift_dim_range_le", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "lift_mk_eq'", ["cardinal"]]]}]}, {"timestamp": 1629771393, "sha": "4aa87050", "message": "chore(scripts): update nolints.txt (#8840)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1629751050, "sha": "26448a26", "message": "feat(analysis/normed_space/exponential): define exponential in a Banach algebra and prove basic results (#8576)", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["mod", "theorem", "summable_nnnorm_mul_pow", ["formal_multilinear_series"]], ["add", "theorem", "summable_norm_apply", ["formal_multilinear_series"]], ["mod", "theorem", "summable_norm_mul_pow", ["formal_multilinear_series"]], ["del", "theorem", "summable_norm_of_lt_radius", ["formal_multilinear_series"]], ["del", "theorem", "summable_of_nnnorm_lt_radius", ["formal_multilinear_series"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/exponential.lean", "changes": [["add", "theorem", "analytic_at_exp_of_mem_ball", []], ["add", "theorem", "exp_eq_exp_ℂ_ℂ", ["complex"]], ["add", "theorem", "continuous_on_exp", []], ["add", "theorem", "exp_add", []], ["add", "theorem", "exp_add_of_commute", []], ["add", "theorem", "exp_add_of_commute_of_mem_ball", []], ["add", "theorem", "exp_add_of_mem_ball", []], ["add", "theorem", "exp_analytic", []], ["add", "theorem", "exp_continuous", []], ["add", "theorem", "exp_eq_exp_of_field_extension", []], ["add", "theorem", "exp_eq_tsum", []], ["add", "theorem", "exp_eq_tsum_field", []], ["add", "theorem", "exp_has_fpower_series_at_zero", []], ["add", "theorem", "exp_has_fpower_series_on_ball", []], ["add", "def", "exp_series", []], ["add", "theorem", "exp_series_apply_eq'", []], ["add", "theorem", "exp_series_apply_eq", []], ["add", "theorem", "exp_series_apply_eq_field'", []], ["add", "theorem", "exp_series_apply_eq_field", []], ["add", "theorem", "exp_series_eq_exp_series_of_field_extension", []], ["add", "theorem", "exp_series_field_has_sum_exp", []], ["add", "theorem", "exp_series_field_has_sum_exp_of_mem_ball", []], ["add", "theorem", "exp_series_field_summable", []], ["add", "theorem", "exp_series_field_summable_of_mem_ball", []], ["add", "theorem", "exp_series_has_sum_exp'", []], ["add", "theorem", "exp_series_has_sum_exp", []], ["add", "theorem", "exp_series_has_sum_exp_of_mem_ball'", []], ["add", "theorem", "exp_series_has_sum_exp_of_mem_ball", []], ["add", "theorem", "exp_series_radius_eq_top", []], ["add", "theorem", "exp_series_radius_pos", []], ["add", "theorem", "exp_series_sum_eq", []], ["add", "theorem", "exp_series_sum_eq_field", []], ["add", "theorem", "exp_series_summable'", []], ["add", "theorem", "exp_series_summable", []], ["add", "theorem", "exp_series_summable_of_mem_ball'", []], ["add", "theorem", "exp_series_summable_of_mem_ball", []], ["add", "theorem", "exp_zero", []], ["add", "theorem", "exp_ℝ_ℂ_eq_exp_ℂ_ℂ", []], ["add", "theorem", "has_deriv_at_exp", []], ["add", "theorem", "has_deriv_at_exp_of_mem_ball", []], ["add", "theorem", "has_deriv_at_exp_zero", []], ["add", "theorem", "has_deriv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "has_fderiv_at_exp", []], ["add", "theorem", "has_fderiv_at_exp_of_mem_ball", []], ["add", "theorem", "has_fderiv_at_exp_zero", []], ["add", "theorem", "has_fderiv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "has_fpower_series_at_exp_zero_of_radius_pos", []], ["add", "theorem", "has_fpower_series_on_ball_exp_of_radius_pos", []], ["add", "theorem", "has_strict_deriv_at_exp", []], ["add", "theorem", "has_strict_deriv_at_exp_of_mem_ball", []], ["add", "theorem", "has_strict_deriv_at_exp_zero", []], ["add", "theorem", "has_strict_deriv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "has_strict_fderiv_at_exp", []], ["add", "theorem", "has_strict_fderiv_at_exp_of_mem_ball", []], ["add", "theorem", "has_strict_fderiv_at_exp_zero", []], ["add", "theorem", "has_strict_fderiv_at_exp_zero_of_radius_pos", []], ["add", "theorem", "norm_exp_series_field_summable", []], ["add", "theorem", "norm_exp_series_field_summable_of_mem_ball", []], ["add", "theorem", "norm_exp_series_summable'", []], ["add", "theorem", "norm_exp_series_summable", []], ["add", "theorem", "norm_exp_series_summable_of_mem_ball'", []], ["add", "theorem", "norm_exp_series_summable_of_mem_ball", []], ["add", "theorem", "exp_eq_exp_ℝ_ℝ", ["real"]]]}, {"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["add", "theorem", "fst_le", ["finset", "nat", "antidiagonal"]], ["add", "theorem", "snd_le", ["finset", "nat", "antidiagonal"]]]}, {"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": [["add", "theorem", "cast_add_choose", ["nat"]], ["mod", "theorem", "cast_choose", ["nat"]]]}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "congr", ["summable"]], ["add", "theorem", "summable_congr", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "eball_top_eq_univ", ["metric"]]]}]}, {"timestamp": 1629741361, "sha": "2f4dc3ab", "message": "feat(ring_theory): generalize `exists_integral_multiple` (#8827)\nNot only is `z * (y : integral_closure R A)` integral, so is `z * (y : R)`!", "changes": [{"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1629741359, "sha": "700effae", "message": "feat(ring_theory/localization): the algebraic elements over `Frac(R)` are those over `R` (#8826)\nWe had this lemma for `L / K` is algebraic iff `L / A` is, but now we also have it elementwise!", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_algebraic_iff", ["is_fraction_ring"]]]}]}, {"timestamp": 1629741358, "sha": "2a69dc24", "message": "feat(ring_theory): two little lemmas on Noetherianness (#8825)\nNo real deep thoughts behind these lemmas, just that they are needed to show the integral closure of a Dedekind domain is Noetherian.", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_noetherian_adjoin_finset", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_of_le", []]]}]}, {"timestamp": 1629741357, "sha": "8a7e4f74", "message": "feat(measure_theory): volume of a (closed) L∞-ball (#8791)\n* pi measure of a (closed or open) ball;\n* volume of a (closed or open) ball in\n - `Π i, α i`;\n - `ℝ`;\n - `ι → ℝ`;\n* volumes of `univ`, `emetric.ball`, and `emetric.closed_ball` in `ℝ`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_pow", ["ennreal"]]]}, {"oldPath": "src/measure_theory/constructions/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": [["add", "theorem", "pi_ball", ["measure_theory", "measure"]], ["add", "theorem", "pi_closed_ball", ["measure_theory", "measure"]], ["add", "theorem", "volume_pi_ball", ["measure_theory"]], ["add", "theorem", "volume_pi_closed_ball", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["add", "theorem", "volume_ball", ["real"]], ["add", "theorem", "volume_closed_ball", ["real"]], ["add", "theorem", "volume_emetric_ball", ["real"]], ["add", "theorem", "volume_emetric_closed_ball", ["real"]], ["add", "theorem", "volume_pi_ball", ["real"]], ["add", "theorem", "volume_pi_closed_ball", ["real"]], ["add", "theorem", "volume_univ", ["real"]]]}]}, {"timestamp": 1629741356, "sha": "ff85e9c6", "message": "feat(measure_theory/measure/measure_space): obtain pairwise disjoint spanning sets wrt. two measures (#8750)\nGiven two sigma finite measures, there exists a sequence of pairwise disjoint spanning sets that are finite wrt. both measures", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "exists_eq_disjoint_finite_spanning_sets_in", ["measure_theory", "measure"]], ["add", "theorem", "disjointed_set_eq", ["measure_theory", "measure", "finite_spanning_sets_in"]], ["add", "def", "of_le", ["measure_theory", "measure", "finite_spanning_sets_in"]]]}]}, {"timestamp": 1629741355, "sha": "98a63294", "message": "refactor(algebra/group_power): use `covariant_class` (#8713)\n## Main changes\n* use `covariant_class` instead of `canonically_ordered_*` or `ordered_add_*` as an assumption in many lemmas;\n* move some lemmas to the root namespace;\n* use `to_additive` for more lemmas;\n## Detailed list of API changes\n* `canonically_ordered_comm_semiring.pow_le_pow_of_le_left`:\n - rename to `pow_le_pow_of_le_left'`;\n - assume `[covariant_class M M (*) (≤)]`;\n - use `to_additive` to generate `nsmul_le_nsmul_of_le_right`;\n* `canonically_ordered_comm_semiring.one_le_pow_of_one_le`:\n - rename to `one_le_pow_of_one_le`';\n - assume `[covariant_class M M (*) (≤)]`;\n - use `to_additive` to generate `nsmul_nonneg`;\n* `canonically_ordered_comm_semiring.pow_le_one`:\n - rename to `pow_le_one'`;\n - assume `[covariant_class M M (*) (≤)]`;\n - use `to_additive` to generate `nsmul_nonpos`;\n* add `pow_le_pow'`, generate `nsmul_le_nsmul`;\n* add `pow_le_pow_of_le_one'` and `nsmul_le_nsmul_of_nonpos`;\n* add `one_lt_pow'`, generate `nsmul_pos`;\n - as a side effect, `nsmul_pos` now assumes `n ≠ 0` instead of `0 < n`.\n* add `pow_lt_one'`, generate `nsmul_neg`;\n* add `pow_lt_pow'`, generate `nsmul_lt_nsmul`;\n* generalize `one_le_pow_iff` and `pow_le_one_iff`, generate `nsmul_nonneg_iff` and `nsmul_nonpos_iff`;\n* generalize `one_lt_pow_iff`, `pow_lt_one_iff`, and `pow_eq_one_iff`, generate `nsmul_pos_iff`, `nsmul_neg_iff`, and `nsmul_eq_zero_iff`;\n* add `one_le_gpow`, generate `gsmul_nonneg`;\n* rename `eq_of_sq_eq_sq` to `sq_eq_sq`, golf;\n* drop `eq_one_of_pow_eq_one` in favor of the `iff` version `pow_eq_one_iff`;\n* add missing instance `nat.ordered_comm_semiring`;\n## Misc changes\n* replace some proofs about `nat.pow` with references to generic lemmas;\n* add `nnreal.coe_eq_one`;", "changes": [{"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["del", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_comm_semiring"]], ["del", "theorem", "pow_le_one", ["canonically_ordered_comm_semiring"]], ["del", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_comm_semiring"]], ["mod", "theorem", "pow_pos", ["canonically_ordered_comm_semiring"]], ["del", "theorem", "eq_of_sq_eq_sq", []], ["del", "theorem", "gsmul_nonneg", []], ["del", "theorem", "nsmul_le_nsmul", []], ["del", "theorem", "nsmul_le_nsmul_of_le_right", []], ["del", "theorem", "nsmul_lt_nsmul", []], ["del", "theorem", "nsmul_nonneg", []], ["del", "theorem", "nsmul_pos", []], ["add", "theorem", "one_le_gpow", []], ["add", "theorem", "one_le_pow_iff", []], ["add", "theorem", "one_le_pow_of_one_le'", []], ["add", "theorem", "one_lt_pow'", []], ["add", "theorem", "one_lt_pow_iff", []], ["add", "theorem", "pow_eq_one_iff", []], ["add", "theorem", "pow_le_one'", []], ["add", "theorem", "pow_le_one_iff", []], ["add", "theorem", "pow_le_pow'", []], ["add", "theorem", "pow_le_pow_of_le_left'", []], ["add", "theorem", "pow_le_pow_of_le_one'", []], ["mod", "theorem", "pow_left_inj", []], ["add", "theorem", "pow_lt_one'", []], ["add", "theorem", "pow_lt_one_iff", []], ["add", "theorem", "pow_lt_pow''", []], ["add", "theorem", "sq_eq_sq", []]]}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["del", "theorem", "eq_one_of_pow_eq_one", []], ["del", "theorem", "one_le_pow_iff", []], ["del", "theorem", "one_le_pow_of_one_le'", []], ["del", "theorem", "pow_eq_one_iff", []], ["del", "theorem", "pow_le_one_iff", []], ["del", "theorem", "pow_le_one_of_le_one", []]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": [["mod", "theorem", "mod_pow_succ", ["nat"]], ["mod", "theorem", "pow_le_pow_of_le_right", ["nat"]], ["mod", "theorem", "pow_lt_pow_of_lt_right", ["nat"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/integral.lean", "newPath": "src/ring_theory/valuation/integral.lean", "changes": []}]}, {"timestamp": 1629741354, "sha": "b7f03239", "message": "feat(topology): interior of a finite product of sets (#8695)\nAlso finishes the filter inf work from #8657 proving stronger lemmas for\nfilter.infi", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_dite", ["set"]], ["add", "theorem", "Inter_ite", ["set"]], ["add", "theorem", "Union_dite", ["set"]], ["add", "theorem", "Union_ite", ["set"]], ["add", "theorem", "image_projection_prod", ["set"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_dite", []], ["add", "theorem", "infi_ite", []], ["add", "theorem", "supr_dite", []], ["add", "theorem", "supr_ite", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "exists_Inter_of_mem_infi", ["filter"]], ["add", "theorem", "mem_infi_of_Inter", ["filter"]], ["add", "theorem", "mem_infi_of_fintype", ["filter"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "interior_pi_set", []], ["add", "theorem", "mem_nhds_pi", []], ["add", "theorem", "set_pi_mem_nhds_iff", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}]}, {"timestamp": 1629737134, "sha": "608faf0a", "message": "feat(measure_theory/function/conditional_expectation): uniqueness of the conditional expectation (#8802)\nThe main part of the PR is the new file `ae_eq_of_integral`, in which many different lemmas prove variants of the statement \"if two functions have same integral on all sets, then they are equal almost everywhere\".\nIn the file `conditional_expectation`, a similar lemma is written for functions which have same integral on all sets in a sub-sigma-algebra and are measurable with respect to that sigma-algebra. This proves the uniqueness of the conditional expectation.", "changes": [{"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["add", "theorem", "exists_dual_vector''", []]]}, {"oldPath": null, "newPath": "src/measure_theory/function/ae_eq_of_integral.lean", "changes": [["add", "theorem", "ae_eq_of_forall_set_integral_eq", ["measure_theory", "Lp"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero", ["measure_theory", "Lp"]], ["add", "theorem", "ae_const_le_iff_forall_lt_measure_zero", ["measure_theory"]], ["add", "theorem", "ae_eq_of_forall_set_integral_eq_of_sigma_finite", ["measure_theory"]], ["add", "theorem", "ae_eq_restrict_of_forall_set_integral_eq", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_of_forall_dual", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_of_forall_inner", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_of_fin_strongly_measurable_trim", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_of_sigma_finite", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_restrict_of_forall_set_integral_eq_zero", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_restrict_of_forall_set_integral_eq_zero_real", ["measure_theory"]], ["add", "theorem", "ae_eq_of_forall_set_integral_eq", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_finite_measure", ["measure_theory"]], ["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_finite_measure_of_measurable", ["measure_theory"]], ["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg_of_sigma_finite", ["measure_theory"]], ["add", "theorem", "ae_nonneg_restrict_of_forall_set_integral_nonneg", ["measure_theory"]], ["add", "theorem", "ae_nonneg_restrict_of_forall_set_integral_nonneg_inter", ["measure_theory"]], ["add", "theorem", "ae_eq_of_forall_set_integral_eq", ["measure_theory", "integrable"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero", ["measure_theory", "integrable"]], ["add", "theorem", "ae_nonneg_of_forall_set_integral_nonneg", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["add", "theorem", "ae_eq_of_forall_set_integral_eq'", ["measure_theory", "Lp"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero'", ["measure_theory", "Lp"]], ["add", "theorem", "ae_eq_zero_of_forall_set_integral_eq_zero", ["measure_theory", "Lp_meas"]], ["add", "theorem", "ae_fin_strongly_measurable'", ["measure_theory", "Lp_meas"]], ["add", "theorem", "ae_eq_of_forall_set_integral_eq_of_sigma_finite'", ["measure_theory"]], ["add", "theorem", "ae_eq_trim_iff_of_ae_measurable'", ["measure_theory"]], ["add", "theorem", "ae_eq_mk", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "measurable_mk", ["measure_theory", "ae_measurable'"]], ["add", "def", "mk", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "neg", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "sub", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "ae_measurable'", ["measure_theory", "measurable"]]]}, {"oldPath": "src/measure_theory/function/strongly_measurable.lean", "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "fin_strongly_measurable_iff_strongly_measurable_and_exists_set_sigma_finite", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "ae_of_ae_restrict_of_ae_restrict_compl", ["measure_theory"]], ["add", "theorem", "sub_ae_eq_zero", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "exists_seq_strict_antimono_tendsto'", []], ["add", "theorem", "exists_seq_strict_mono_tendsto'", []]]}]}, {"timestamp": 1629734570, "sha": "9a7d9a8e", "message": "feat(group_theory/nilpotent): add def lemmas, basic lemmas on central series (#8730)\nAdd to API for nilpotent groups with simp def lemmas and other basic properties of central series.", "changes": [{"oldPath": "src/group_theory/nilpotent.lean", "newPath": "src/group_theory/nilpotent.lean", "changes": [["mod", "def", "is_ascending_central_series", []], ["add", "theorem", "lower_central_series_zero", []], ["add", "theorem", "mem_lower_central_series_succ_iff", []], ["mod", "theorem", "mem_upper_central_series_succ_iff", []], ["add", "theorem", "map", ["upper_central_series"]], ["add", "theorem", "upper_central_series_mono", []], ["add", "theorem", "upper_central_series_zero", []], ["del", "theorem", "upper_central_series_zero_def", []]]}]}, {"timestamp": 1629728534, "sha": "df3e8862", "message": "feat(group_theory/group_action): generalize mul_action.function_End to other endomorphisms (#8724)\nThe main aim of this PR is to remove [`intermediate_field.subgroup_action`](https://leanprover-community.github.io/mathlib_docs/field_theory/galois.html#intermediate_field.subgroup_action) which is a weird special case of the much more general instance `f • a = f a`, added in this PR as `alg_equiv.apply_mul_semiring_action`. We add the same actions for all the other hom types for consistency.\nThese generalizations are in line with the `mul_action.function_End` (renamed to `function.End.apply_mul_action`) and `mul_action.perm` (renamed to `equiv.perm.apply_mul_action`) instances introduced by @dwarn, providing any endomorphism that has a monoid structure with a faithful `mul_action` corresponding to function application.\nNote that there is no monoid structure on `ring_equiv`, or `alg_hom`, so this PR does not bother with the corresponding action.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "smul_def", ["add_monoid", "End"]]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["del", "theorem", "smul_def", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}]}, {"timestamp": 1629722807, "sha": "3c490447", "message": "feat(data/list/nodup): nodup.nth_le_inj_iff (#8813)\nThis allows rewriting as an `inj_iff` lemma directly via proj notation.", "changes": [{"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["add", "theorem", "nth_le_inj_iff", ["list", "nodup"]]]}]}, {"timestamp": 1629722807, "sha": "f8f551af", "message": "feat(data/fintype/basic): choose_subtype_eq (#8812)\nChoosing out of a finite subtype such that the underlying value is precisely some value of the parent type works as intended.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "choose_subtype_eq", ["fintype"]]]}]}, {"timestamp": 1629720047, "sha": "a85c9f63", "message": "chore(field_theory): make `is_separable` an instance parameter (#8741)\nThere were a few places that had an explicit `is_separable` parameter. For simplicity and consistency, let's make them all instance params.", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["mod", "theorem", "card_aut_eq_finrank", ["is_galois"]], ["mod", "theorem", "is_separable_splitting_field", ["is_galois"]], ["mod", "theorem", "separable", ["is_galois"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["mod", "theorem", "exists_primitive_element", ["field"]], ["mod", "theorem", "primitive_element_inf_aux", ["field"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "is_integral", ["is_separable"]], ["mod", "theorem", "separable", ["is_separable"]], ["mod", "theorem", "is_separable_tower_top_of_is_separable", []]]}]}, {"timestamp": 1629713834, "sha": "8b9a47b6", "message": "feat(data/finset/basic): finset.exists_ne_of_one_lt_card (#8816)\nAnalog of `fintype.exists_ne_of_one_lt_card`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "exists_ne_of_one_lt_card", ["finset"]]]}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}]}, {"timestamp": 1629713833, "sha": "a52a9fe3", "message": "chore(data/multiset/basic): move abs_sum_le_sum_abs from algebra/big_operators/basic.lean. (#8804)\nThere doesn't seem to be a reason for the place it has now.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["del", "theorem", "abs_sum_le_sum_abs", ["multiset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "abs_sum_le_sum_abs", ["multiset"]]]}]}, {"timestamp": 1629713832, "sha": "f98fc005", "message": "docs(logic/relation): add module docstring (#8773)\nAlso fix whitespaces", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["mod", "def", "comp", ["relation"]], ["mod", "def", "join", ["relation"]], ["mod", "theorem", "to_refl_trans_gen", ["relation", "refl_gen"]], ["mod", "theorem", "cases_head", ["relation", "refl_trans_gen"]], ["mod", "theorem", "cases_head_iff", ["relation", "refl_trans_gen"]], ["mod", "theorem", "cases_tail", ["relation", "refl_trans_gen"]], ["mod", "theorem", "refl_trans_gen_iff_eq", ["relation"]], ["mod", "theorem", "transitive_join", ["relation"]]]}]}, {"timestamp": 1629713831, "sha": "c811dd77", "message": "feat(data/nat/mul_ind): multiplicative induction principles (#8514)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "dvd_div_iff", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/mul_ind.lean", "changes": [["add", "def", "rec_on_mul", ["nat"]], ["add", "def", "rec_on_pos_prime_coprime", ["nat"]], ["add", "def", "rec_on_prime_coprime", ["nat"]], ["add", "def", "rec_on_prime_pow", ["nat"]]]}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": [["add", "theorem", "one_lt_pow_iff", ["nat"]]]}]}, {"timestamp": 1629710174, "sha": "f949172a", "message": "feat(data/polynomial/basic): polynomial.op_ring_equiv (#8537)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "def", "op_ring_equiv", ["polynomial"]]]}]}, {"timestamp": 1629663011, "sha": "9945a162", "message": "refactor(analysis/normed_space/{add_torsor, mazur_ulam}): adjust Mazur-Ulam file to use affine isometries (#8661)", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["del", "theorem", "continuous_linear_iff", ["affine_map"]], ["del", "theorem", "coe_const_vadd", ["isometric"]], ["del", "theorem", "coe_const_vsub", ["isometric"]], ["del", "theorem", "coe_const_vsub_symm", ["isometric"]], ["del", "theorem", "coe_vadd_const", ["isometric"]], ["del", "theorem", "coe_vadd_const_symm", ["isometric"]], ["del", "def", "const_vadd", ["isometric"]], ["del", "theorem", "const_vadd_zero", ["isometric"]], ["del", "def", "const_vsub", ["isometric"]], ["del", "theorem", "dist_point_reflection_fixed", ["isometric"]], ["del", "theorem", "dist_point_reflection_self'", ["isometric"]], ["del", "theorem", "dist_point_reflection_self", ["isometric"]], ["del", "theorem", "dist_point_reflection_self_real", ["isometric"]], ["del", "def", "point_reflection", ["isometric"]], ["del", "theorem", "point_reflection_apply", ["isometric"]], ["del", "theorem", "point_reflection_fixed_iff", ["isometric"]], ["del", "theorem", "point_reflection_involutive", ["isometric"]], ["del", "theorem", "point_reflection_midpoint_left", ["isometric"]], ["del", "theorem", "point_reflection_midpoint_right", ["isometric"]], ["del", "theorem", "point_reflection_self", ["isometric"]], ["del", "theorem", "point_reflection_symm", ["isometric"]], ["del", "theorem", "point_reflection_to_equiv", ["isometric"]], ["del", "def", "vadd_const", ["isometric"]], ["del", "theorem", "vadd_const_to_equiv", ["isometric"]], ["del", "theorem", "vadd_vsub", ["isometry"]]]}, {"oldPath": "src/analysis/normed_space/affine_isometry.lean", "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["add", "theorem", "coe_const_vadd", ["affine_isometry_equiv"]], ["add", "theorem", "coe_const_vsub", ["affine_isometry_equiv"]], ["add", "theorem", "coe_vadd_const", ["affine_isometry_equiv"]], ["add", "theorem", "coe_vadd_const_symm", ["affine_isometry_equiv"]], ["add", "def", "const_vadd", ["affine_isometry_equiv"]], ["add", "theorem", "const_vadd_zero", ["affine_isometry_equiv"]], ["add", "def", "const_vsub", ["affine_isometry_equiv"]], ["add", "theorem", "dist_point_reflection_fixed", ["affine_isometry_equiv"]], ["add", "theorem", "dist_point_reflection_self'", ["affine_isometry_equiv"]], ["add", "theorem", "dist_point_reflection_self", ["affine_isometry_equiv"]], ["add", "theorem", "dist_point_reflection_self_real", ["affine_isometry_equiv"]], ["add", "def", "point_reflection", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_apply", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_fixed_iff", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_involutive", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_midpoint_left", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_midpoint_right", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_self", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_symm", ["affine_isometry_equiv"]], ["add", "theorem", "point_reflection_to_affine_equiv", ["affine_isometry_equiv"]], ["add", "theorem", "symm_const_vsub", ["affine_isometry_equiv"]], ["add", "def", "vadd_const", ["affine_isometry_equiv"]], ["add", "theorem", "vadd_const_to_affine_equiv", ["affine_isometry_equiv"]], ["add", "theorem", "vadd_vsub", ["affine_isometry_equiv"]], ["add", "theorem", "continuous_linear_iff", ["affine_map"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_neg", ["linear_isometry_equiv"]], ["add", "def", "neg", ["linear_isometry_equiv"]], ["add", "theorem", "symm_neg", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": [["add", "theorem", "coe_fn_to_real_affine_isometry_equiv", ["isometric"]], ["del", "theorem", "coe_to_affine_equiv", ["isometric"]], ["add", "theorem", "coe_to_real_affine_isometry_equiv", ["isometric"]], ["del", "def", "to_affine_equiv", ["isometric"]], ["add", "def", "to_real_affine_isometry_equiv", ["isometric"]]]}]}, {"timestamp": 1629658937, "sha": "d9113ece", "message": "doc(linear_algebra/trace): fix error in title (#8803)\nthe first two lines of this were super contradictory", "changes": [{"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": []}]}, {"timestamp": 1629651263, "sha": "87f14e30", "message": "feat(topology/basic): interior of a singleton (#8784)\n* add generic lemmas `interior_singleton`, `closure_compl_singleton`;\n* add more lemmas and instances about `ne_bot (𝓝[{x}ᶜ] x)`;\n* rename `dense_compl_singleton` to `dense_compl_singleton_iff_not_open`,\n add new `dense_compl_singleton` that assumes `[ne_bot (𝓝[{x}ᶜ] x)]`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "punctured_nhds_ne_bot", ["module"]], ["mod", "theorem", "eq_top_of_nonempty_interior'", ["submodule"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_compl_singleton", []], ["add", "theorem", "interior_compl", ["dense"]], ["mod", "theorem", "dense_compl_singleton", []], ["add", "theorem", "dense_compl_singleton_iff_not_open", []], ["add", "theorem", "interior_eq_empty_iff_dense_compl", []], ["add", "theorem", "interior_singleton", []], ["add", "theorem", "mem_closure_iff_nhds_within_ne_bot", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["del", "theorem", "mem_closure_iff_nhds_within_ne_bot", []]]}]}, {"timestamp": 1629651262, "sha": "db9d4a3a", "message": "feat(data/finset,order/conditionally_complete_lattice): lemmas about `min'/max'` (#8782)\n## `data/finset/*`\n* add `finset.nonempty.to_set`;\n* add lemmas `finset.max'_lt_iff`, `finset.lt_min'_iff`,\n `finset.max'_eq_sup'`, `finset.min'_eq_inf'`;\n* rewrite `finset.induction_on_max` without using `finset.card`,\n move one step to `finset.lt_max'_of_mem_erase_max'`;\n## `order/conditionally_complete_lattice`\n* add lemmas relating `Sup`/`Inf` of a nonempty finite set in a\n conditionally complete lattice to\n `finset.sup'`/`finset.inf'`/`finset.max'`/`finset.min'`;\n* a few more lemmas about `Sup`/`Inf` of a nonempty finite set\n in a conditionally complete lattice / linear order;\n## `order/filter/at_top_bot`\n* golf the proof of `filter.high_scores`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "lt_max'_of_mem_erase_max'", ["finset"]], ["add", "theorem", "lt_min'_iff", ["finset"]], ["add", "theorem", "max'_eq_sup'", ["finset"]], ["add", "theorem", "max'_lt_iff", ["finset"]], ["add", "theorem", "min'_eq_inf'", ["finset"]], ["add", "theorem", "min'_lt_of_mem_erase_min'", ["finset"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_eq_min'", ["finset", "nonempty"]], ["add", "theorem", "cSup_eq_max'", ["finset", "nonempty"]], ["add", "theorem", "sup'_eq_cSup_image", ["finset", "nonempty"]], ["add", "theorem", "sup'_id_eq_cSup", ["finset", "nonempty"]], ["add", "theorem", "cSup_lt_iff", ["set", "finite"]], ["add", "theorem", "lt_cInf_iff", ["set", "finite"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}]}, {"timestamp": 1629651261, "sha": "ea9cd029", "message": "refactor(geometry/euclidean/basic): adjust Euclidean geometry to use affine isometries for reflections (#8662)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "norm_sub_eq_norm_add", []], ["add", "def", "reflection", []], ["add", "theorem", "reflection_apply", []], ["add", "theorem", "reflection_involutive", []], ["add", "theorem", "reflection_reflection", []], ["add", "theorem", "reflection_symm", []]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "orthogonal_projection_mem_subspace_eq_self", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vsub_orthogonal_projection", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}]}, {"timestamp": 1629647371, "sha": "a9c13002", "message": "refactor(topology/metric_space/basic): rename `closed_ball_Icc` (#8790)\n* rename `closed_ball_Icc` to `real.closed_ball_eq`;\n* add `real.ball_eq`, `int.ball_eq`, `int.closed_ball_eq`,\n `int.preimage_ball`, `int.preimage_closed_ball`.", "changes": [{"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "ball_eq", ["int"]], ["add", "theorem", "closed_ball_eq", ["int"]], ["mod", "theorem", "dist_cast_rat", ["int"]], ["mod", "theorem", "dist_cast_real", ["int"]], ["mod", "theorem", "dist_eq", ["int"]], ["add", "theorem", "preimage_ball", ["int"]], ["add", "theorem", "preimage_closed_ball", ["int"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "closed_ball_Icc", []], ["add", "theorem", "ball_eq", ["real"]], ["add", "theorem", "closed_ball_eq", ["real"]]]}]}, {"timestamp": 1629640699, "sha": "373911d5", "message": "chore(measure_theory): make `μ` an explicit argument in `subsingleton.measure_zero` etc (#8793)", "changes": [{"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["add", "theorem", "dimH_countable", ["measure_theory"]], ["mod", "theorem", "dimH_empty", ["measure_theory"]], ["mod", "theorem", "dimH_singleton", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "measure_zero", ["finset"]], ["del", "theorem", "measure_subsingleton", ["measure_theory"]], ["mod", "theorem", "measure_zero", ["set", "countable"]], ["mod", "theorem", "measure_zero", ["set", "finite"]], ["add", "theorem", "measure_zero", ["set", "subsingleton"]]]}]}, {"timestamp": 1629601732, "sha": "8a96d00c", "message": "chore(scripts): update nolints.txt (#8798)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1629594657, "sha": "f9151066", "message": "chore(data/set/lattice): a few lemmas, golf (#8795)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_nonempty_index", ["set"]], ["add", "theorem", "Union_nonempty_self", ["set"]], ["add", "theorem", "bUnion_Union", ["set"]], ["add", "theorem", "bUnion_self", ["set"]]]}]}, {"timestamp": 1629582219, "sha": "d3e20b4a", "message": "chore(data/multiset/basic): consistently use singleton notation (#8786)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": [["mod", "theorem", "gcd_singleton", ["multiset"]], ["mod", "theorem", "lcm_singleton", ["multiset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "singleton_val", ["finset"]], ["add", "theorem", "to_finset_singleton", ["multiset"]]]}, {"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "to_finsupp_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": [["mod", "theorem", "antidiagonal_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "bind_singleton", ["multiset"]], ["mod", "theorem", "card_eq_one", ["multiset"]], ["mod", "theorem", "card_singleton", ["multiset"]], ["mod", "theorem", "count_singleton", ["multiset"]], ["add", "theorem", "count_singleton_self", ["multiset"]], ["mod", "theorem", "disjoint_singleton", ["multiset"]], ["add", "theorem", "foldr_singleton", ["multiset"]], ["mod", "theorem", "map_singleton", ["multiset"]], ["mod", "theorem", "mem_singleton", ["multiset"]], ["mod", "theorem", "mem_singleton_self", ["multiset"]], ["mod", "theorem", "prod_singleton", ["multiset"]], ["mod", "theorem", "product_singleton", ["multiset"]], ["mod", "theorem", "repeat_one", ["multiset"]], ["mod", "theorem", "repeat_subset_singleton", ["multiset"]], ["mod", "theorem", "singleton_add", ["multiset"]], ["add", "theorem", "singleton_bind", ["multiset"]], ["mod", "theorem", "singleton_disjoint", ["multiset"]], ["add", "theorem", "singleton_eq_cons", ["multiset"]], ["del", "theorem", "singleton_eq_singleton", ["multiset"]], ["mod", "theorem", "singleton_inj", ["multiset"]], ["add", "theorem", "singleton_join", ["multiset"]], ["mod", "theorem", "singleton_le", ["multiset"]], ["mod", "theorem", "singleton_ne_zero", ["multiset"]], ["mod", "theorem", "sum_map_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/erase_dup.lean", "newPath": "src/data/multiset/erase_dup.lean", "changes": [["mod", "theorem", "erase_dup_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": [["mod", "theorem", "ndinsert_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": [["mod", "theorem", "fold_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/functor.lean", "newPath": "src/data/multiset/functor.lean", "changes": [["mod", "theorem", "pure_def", ["multiset"]]]}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": [["mod", "theorem", "inf_singleton", ["multiset"]], ["mod", "theorem", "sup_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["mod", "theorem", "nodup_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": [["mod", "theorem", "pi_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": [["mod", "theorem", "powerset_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/sections.lean", "newPath": "src/data/multiset/sections.lean", "changes": [["mod", "theorem", "sections_zero", ["multiset"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": [["mod", "def", "of_prime", ["prime_multiset"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "roots_X_sub_C", ["polynomial"]]]}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}, {"oldPath": "src/number_theory/ADE_inequality.lean", "newPath": "src/number_theory/ADE_inequality.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1629582218, "sha": "252cb024", "message": "feat(linear_algebra/vandermonde): `vandermonde v` multiplied by its transpose (#8776)\nTwo not very exciting lemmas about multiplying a Vandermonde matrix by its transpose (one for each side). I don't know if they are really useful, so I could also just inline them in #8777.", "changes": [{"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": [["add", "theorem", "vandermonde_mul_vandermonde_transpose", ["matrix"]], ["add", "theorem", "vandermonde_transpose_mul_vandermonde", ["matrix"]]]}]}, {"timestamp": 1629582217, "sha": "5f517714", "message": "feat(linear_algebra/bilinear_form): basis changing `bilin_form.to_matrix` (#8775)\nA few `simp` lemmas on bilinear forms.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "comp_id_id", ["bilin_form"]], ["add", "theorem", "comp_id_left", ["bilin_form"]], ["add", "theorem", "comp_id_right", ["bilin_form"]], ["add", "theorem", "comp_left_id", ["bilin_form"]], ["add", "theorem", "comp_right_id", ["bilin_form"]], ["add", "theorem", "to_matrix_mul_basis_to_matrix", ["bilin_form"]]]}]}, {"timestamp": 1629582216, "sha": "c44f19fe", "message": "feat(algebra/associated): simple lemmas and dot notation (#8770)\nIntroduce\n* `prime.exists_mem_finset_dvd`\n* `prime.not_dvd_one`\nRename\n* `exists_mem_multiset_dvd_of_prime` -> `prime.exists_mem_multiset_dvd`\n* `left_dvd_or_dvd_right_of_dvd_prime_mul ` ->`prime.left_dvd_or_dvd_right_of_dvd_mul`", "changes": [{"oldPath": "archive/imo/imo2001_q6.lean", "newPath": "archive/imo/imo2001_q6.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "exists_mem_multiset_dvd_of_prime", []], ["del", "theorem", "left_dvd_or_dvd_right_of_dvd_prime_mul", []], ["add", "theorem", "exists_mem_finset_dvd", ["prime"]], ["add", "theorem", "exists_mem_multiset_dvd", ["prime"]], ["add", "theorem", "exists_mem_multiset_map_dvd", ["prime"]], ["add", "theorem", "left_dvd_or_dvd_right_of_dvd_mul", ["prime"]], ["mod", "theorem", "ne_one", ["prime"]], ["mod", "theorem", "ne_zero", ["prime"]], ["add", "theorem", "not_dvd_one", ["prime"]], ["mod", "theorem", "not_unit", ["prime"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1629575535, "sha": "57e127a5", "message": "refactor(order/complete_lattice): use `is_empty` (#8796)\n* change `set.univ_eq_empty_iff` to use `is_empty`;\n* rename `set.range_eq_empty` to `set.range_eq_empty_iff`;\n* add new `set.range_eq_empty`, it assumes `[is_empty α]`;\n* combine `supr_of_empty`, `supr_of_empty'`, and `supr_empty` into `supr_of_empty`, same for `infi`;\n* replace `csupr_neg` with `csupr_of_empty` and `csupr_false`;\n* adjust some proofs to use `casesI is_empty_of_nonempty α` instead of `by_cases h : nonempty α`.", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "empty_ne_univ", ["set"]], ["mod", "theorem", "range_eq_empty", ["set"]], ["add", "theorem", "range_eq_empty_iff", ["set"]], ["mod", "theorem", "univ_eq_empty_iff", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "theorem", "infi_empty", []], ["mod", "theorem", "infi_of_empty'", []], ["mod", "theorem", "infi_of_empty", []], ["del", "theorem", "supr_empty", []], ["mod", "theorem", "supr_of_empty'", []], ["mod", "theorem", "supr_of_empty", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "csupr_false", []], ["del", "theorem", "csupr_neg", []], ["add", "theorem", "csupr_of_empty", []]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1629575534, "sha": "8eba262b", "message": "feat(topology/metric_space/basic): union of balls `ball x n`, `n : ℕ` (#8792)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "Union_ball_nat", ["metric"]], ["add", "theorem", "Union_ball_nat_succ", ["metric"]], ["add", "theorem", "Union_closed_ball_nat", ["metric"]]]}]}, {"timestamp": 1629575533, "sha": "9b60e0f7", "message": "feat(data/set/basic): add `pairwise_on_pair` (#8789)\nAdd `set.pairwise_on_insert`, `set.pairwise_on_pair`, and `set.pairwise_on_pair_of_symmetric`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "pairwise_on_insert", ["set"]], ["add", "theorem", "pairwise_on_pair", ["set"]], ["add", "theorem", "pairwise_on_pair_of_symmetric", ["set"]]]}]}, {"timestamp": 1629575532, "sha": "44b81388", "message": "chore(topology/instances/ennreal): use `tactic.lift` (#8788)\n* use `tactic.lift` in two proofs;\n* use the `order_dual` trick in one proof.", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1629575531, "sha": "e00afed4", "message": "feat(topology/metric_space): turn `nonempty_ball` into an `iff` (#8747)\n* add `set.univ_pi_empty`;\n* turn `metric.nonempty_ball` into an `iff`, mark it with `@[simp]`; add `metric.ball_eq_empty`\n* do the same thing to `closed_ball`s;\n* add primed versions of `metric.ball_pi` and `metric.closed_ball_pi`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "univ_pi_empty", ["set"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ball_pi'", []], ["add", "theorem", "closed_ball_pi'", []], ["add", "theorem", "ball_eq_empty", ["metric"]], ["del", "theorem", "ball_eq_empty_iff_nonpos", ["metric"]], ["add", "theorem", "closed_ball_eq_empty", ["metric"]], ["del", "theorem", "closed_ball_eq_empty_iff_neg", ["metric"]], ["mod", "theorem", "nonempty_ball", ["metric"]], ["mod", "theorem", "nonempty_closed_ball", ["metric"]]]}]}, {"timestamp": 1629571592, "sha": "d31b85f8", "message": "feat(data/list/rotate): is_rotated_append (#8780)\n`list.append` is commutative with respect to `~r`.", "changes": [{"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["add", "theorem", "is_rotated_append", ["list"]], ["add", "theorem", "rotate_append_length_eq", ["list"]]]}]}, {"timestamp": 1629571591, "sha": "0760b201", "message": "feat(topology/metric_space): metrizable spaces (#8759)\nDefine (pseudo)-metric space constructors for metrizable topological spaces.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "is_open_singleton_iff", ["metric"]], ["add", "def", "of_metrizable", ["metric_space"]], ["add", "def", "of_metrizable", ["pseudo_metric_space"]], ["add", "def", "core_of_dist", ["uniform_space"]]]}]}, {"timestamp": 1629567109, "sha": "bafe207d", "message": "chore(linear_algebra): remove `→ₗ` notation where the ring is not specified (#8778)\nThis PR removes the notation `M →ₗ N` for linear maps, where the ring is not specified. This is not used much in the library, and is needed for an upcoming refactor that will generalize linear maps to semilinear maps. See the discussion [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Semilinear.20maps).", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "def", "to_linear_map", ["alg_hom"]], ["mod", "def", "lmul_left", ["algebra"]], ["mod", "def", "lmul_right", ["algebra"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "def", "mk'", ["is_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "congr_right", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": [["mod", "def", "dual_tensor_hom", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "rank_comp_le2", []]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "def", "restrict_dom", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["mod", "theorem", "image_subtype", ["linear_independent"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "def", "compl₂", ["linear_map"]], ["mod", "def", "compr₂", ["linear_map"]], ["mod", "theorem", "lcomp_apply", ["linear_map"]], ["mod", "def", "llcomp", ["linear_map"]], ["mod", "def", "lsmul", ["linear_map"]], ["mod", "def", "curry", ["tensor_product"]], ["mod", "def", "equiv", ["tensor_product", "lift"]], ["mod", "def", "lift", ["tensor_product"]], ["mod", "theorem", "lift_compr₂", ["tensor_product"]], ["mod", "theorem", "lift_mk_compr₂", ["tensor_product"]], ["mod", "def", "map", ["tensor_product"]], ["mod", "def", "mk", ["tensor_product"]], ["mod", "theorem", "mk_compr₂_inj", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1629561557, "sha": "897e4ed6", "message": "feat(field_theory): finite fields exist (#8692)", "changes": [{"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": [["add", "theorem", "char_p_iff", ["algebra"]]]}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["add", "theorem", "neg_one_pow_char", ["char_p"]], ["add", "theorem", "neg_one_pow_char_pow", ["char_p"]], ["mod", "theorem", "char_p_iff_char_p", ["ring_hom"]]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "cast_int_left", ["commute"]], ["add", "theorem", "cast_int_right", ["commute"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "one_lt_card", ["fintype"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "coeff_zero_eq_aeval_zero'", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/zmod/algebra.lean", "changes": [["add", "def", "algebra'", ["zmod"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["add", "theorem", "card_eq_pow_finrank", []], ["add", "theorem", "X_pow_card_pow_sub_X_nat_degree_eq", ["finite_field"]], ["add", "theorem", "X_pow_card_pow_sub_X_ne_zero", ["finite_field"]], ["add", "theorem", "X_pow_card_sub_X_nat_degree_eq", ["finite_field"]], ["add", "theorem", "X_pow_card_sub_X_ne_zero", ["finite_field"]], ["add", "theorem", "pow_card_pow", ["finite_field"]], ["add", "theorem", "roots_X_pow_card_sub_X", ["finite_field"]], ["add", "theorem", "pow_card_pow", ["zmod"]]]}, {"oldPath": null, "newPath": "src/field_theory/finite/galois_field.lean", "changes": [["add", "theorem", "card", ["galois_field"]], ["add", "def", "equiv_zmod_p", ["galois_field"]], ["add", "theorem", "finrank", ["galois_field"]], ["add", "theorem", "splits_zmod_X_pow_sub_X", ["galois_field"]], ["add", "def", "galois_field", []], ["add", "theorem", "galois_poly_separable", []]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "exists_finset_of_splits", ["polynomial"]], ["add", "theorem", "not_separable_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_univ", ["algebra"]]]}]}, {"timestamp": 1629548811, "sha": "f72126b4", "message": "chore(algebra/gcd_monoid): move `algebra.gcd_monoid` to `algebra.gcd_monoid.basic` (#8772)", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid/basic.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1629524579, "sha": "f36c98e8", "message": "chore(*): remove spurious whitespace (#8769)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/colimits.lean", "newPath": "src/algebra/category/Module/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/adjunctions.lean", "newPath": "src/algebra/category/Mon/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/center.lean", "newPath": "src/category_theory/monoidal/center.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": []}, {"oldPath": "src/control/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/control/uliftable.lean", "newPath": "src/control/uliftable.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/embedding.lean", "newPath": "src/data/equiv/embedding.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": []}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": [["mod", "inductive", "is_path", ["pfunctor", "M"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/quot.lean", "newPath": "src/data/qpf/multivariate/constructions/quot.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/data/set/accumulate.lean", "newPath": "src/data/set/accumulate.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "diagonal_eq_range", ["set"]]]}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": []}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": []}, {"oldPath": "src/dynamics/flow.lean", "newPath": "src/dynamics/flow.lean", "changes": []}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/meta/expr_lens.lean", "newPath": "src/meta/expr_lens.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/tactic/converter/apply_congr.lean", "newPath": "src/tactic/converter/apply_congr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/dependencies.lean", "newPath": "src/tactic/dependencies.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/generalizes.lean", "newPath": "src/tactic/generalizes.lean", "changes": []}, {"oldPath": "src/tactic/induction.lean", "newPath": "src/tactic/induction.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/itauto.lean", "newPath": "src/tactic/itauto.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/tactic/protected.lean", "newPath": "src/tactic/protected.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}, {"oldPath": "src/tactic/simp_command.lean", "newPath": "src/tactic/simp_command.lean", "changes": []}, {"oldPath": "src/tactic/unify_equations.lean", "newPath": "src/tactic/unify_equations.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": [["mod", "def", "positive_compacts:", ["topological_space"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/holder.lean", "newPath": "src/topology/metric_space/holder.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "test/conv/apply_congr.lean", "newPath": "test/conv/apply_congr.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}, {"oldPath": "test/generalizes.lean", "newPath": "test/generalizes.lean", "changes": []}, {"oldPath": "test/induction.lean", "newPath": "test/induction.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1629495483, "sha": "d869256e", "message": "refactor(data/nat/lattice): move code, add lemmas (#8708)\n* move `nat.conditionally_complete_linear_order_with_bot` and `enat.complete_linear_order` to a new file `data.nat.lattice`;\n* add a few lemmas (`nat.supr_lt_succ` etc), move `set.bUnion_lt_succ` to the same file;\n* use `galois_insertion.lift_complete_lattice` to define `enat.complete_linear_order`.", "changes": [{"oldPath": null, "newPath": "src/data/nat/lattice.lean", "changes": [["add", "theorem", "Inf_def", ["nat"]], ["add", "theorem", "Inf_eq_zero", ["nat"]], ["add", "theorem", "Inf_mem", ["nat"]], ["add", "theorem", "Inf_upward_closed_eq_succ_iff", ["nat"]], ["add", "theorem", "Sup_def", ["nat"]], ["add", "theorem", "eq_Ici_of_nonempty_of_upward_closed", ["nat"]], ["add", "theorem", "infi_lt_succ'", ["nat"]], ["add", "theorem", "infi_lt_succ", ["nat"]], ["add", "theorem", "nonempty_of_Inf_eq_succ", ["nat"]], ["add", "theorem", "nonempty_of_pos_Inf", ["nat"]], ["add", "theorem", "not_mem_of_lt_Inf", ["nat"]], ["add", "theorem", "supr_lt_succ'", ["nat"]], ["add", "theorem", "supr_lt_succ", ["nat"]], ["add", "theorem", "bInter_lt_succ'", ["set"]], ["add", "theorem", "bInter_lt_succ", ["set"]], ["add", "theorem", "bUnion_lt_succ'", ["set"]], ["add", "theorem", "bUnion_lt_succ", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "bInter_lt_succ", ["set"]], ["del", "theorem", "bUnion_lt_succ", ["set"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "Inf_def", ["nat"]], ["del", "theorem", "Inf_eq_zero", ["nat"]], ["del", "theorem", "Inf_mem", ["nat"]], ["del", "theorem", "Inf_upward_closed_eq_succ_iff", ["nat"]], ["del", "theorem", "Sup_def", ["nat"]], ["del", "theorem", "eq_Ici_of_nonempty_of_upward_closed", ["nat"]], ["del", "theorem", "nonempty_of_Inf_eq_succ", ["nat"]], ["del", "theorem", "nonempty_of_pos_Inf", ["nat"]], ["del", "theorem", "not_mem_of_lt_Inf", ["nat"]]]}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}]}, {"timestamp": 1629470528, "sha": "45e7eb84", "message": "feat(dynamics/fixed_points): simple lemmas (#8768)", "changes": [{"oldPath": "src/dynamics/fixed_points/basic.lean", "newPath": "src/dynamics/fixed_points/basic.lean", "changes": [["add", "theorem", "is_fixed_pt_apply_iff", ["function", "injective"]], ["add", "theorem", "mem_fixed_points_iff", ["function"]]]}]}, {"timestamp": 1629470527, "sha": "6ae37476", "message": "feat(algebra/big_operators): the product over `{x // x ∈ m}` is the product over `m.to_finset` (#8742)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_mem_multiset", ["finset"]]]}]}, {"timestamp": 1629470526, "sha": "d62a4614", "message": "feat(linear_algebra/determinant): `det (M ⬝ N) = det (N ⬝ M)` if `M` is invertible (#8720)\nIf `M` is a square or invertible matrix, then `det (M ⬝ N) = det (N ⬝ M)`. This is basically just using `mul_comm` on `det M * det N`, except for some tricky rewriting to handle the invertible case.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_comm'", ["matrix"]], ["add", "theorem", "det_comm", ["matrix"]], ["mod", "theorem", "det_conj", ["matrix"]], ["mod", "def", "index_equiv_of_inv", ["matrix"]]]}]}, {"timestamp": 1629470525, "sha": "7ccf4635", "message": "feat(algebra): is_smul_regular for `pi`, `finsupp`, `matrix`, `polynomial` (#8716)\nAlso provide same lemma for finsupp, and specialize it for matrices and polynomials\nInspired by \nhttps://github.com/leanprover-community/mathlib/pull/8681#discussion_r689320217\nhttps://github.com/leanprover-community/mathlib/pull/8679#discussion_r689545373", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "pi", ["is_smul_regular"]]]}, {"oldPath": "src/algebra/regular/smul.lean", "newPath": "src/algebra/regular/smul.lean", "changes": [["add", "theorem", "is_smul_regular", ["is_left_regular"]], ["add", "theorem", "is_left_regular_iff", []], ["add", "theorem", "is_smul_regular", ["is_right_regular"]], ["add", "theorem", "is_right_regular_iff", []], ["add", "theorem", "is_left_regular", ["is_smul_regular"]], ["del", "theorem", "is_left_regular_iff", ["is_smul_regular"]], ["add", "theorem", "is_right_regular", ["is_smul_regular"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "finsupp", ["is_smul_regular"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "matrix", ["is_left_regular"]], ["add", "theorem", "matrix", ["is_smul_regular"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "polynomial", ["is_smul_regular"]]]}]}, {"timestamp": 1629470523, "sha": "aee7bade", "message": "feat(data/list/rotate): cyclic_permutations (#8678)\nFor `l ~ l'` we have `list.permutations`. We provide the list of cyclic permutations of `l` such that all members are `l ~r l'`. This relationship is proven, as well as the induced `nodup` of the list of cyclic permutants.\nThis also simplifies the `cycle.list` definition, and removed the requirement for decidable equality in it.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "length_inits", ["list"]], ["add", "theorem", "length_tails", ["list"]], ["add", "theorem", "nth_le_inits", ["list"]], ["add", "theorem", "nth_le_tails", ["list"]]]}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["add", "def", "cyclic_permutations", ["list"]], ["add", "theorem", "cyclic_permutations_cons", ["list"]], ["add", "theorem", "cyclic_permutations_eq_nil_iff", ["list"]], ["add", "theorem", "cyclic_permutations_eq_singleton_iff", ["list"]], ["add", "theorem", "cyclic_permutations_nil", ["list"]], ["add", "theorem", "cyclic_permutations_of_ne_nil", ["list"]], ["add", "theorem", "cyclic_permutations_rotate", ["list"]], ["add", "theorem", "cyclic_permutations", ["list", "is_rotated"]], ["add", "theorem", "is_rotated_cyclic_permutations_iff", ["list"]], ["mod", "theorem", "is_rotated_nil_iff'", ["list"]], ["add", "theorem", "is_rotated_singleton_iff'", ["list"]], ["add", "theorem", "is_rotated_singleton_iff", ["list"]], ["add", "theorem", "length_cyclic_permutations_cons", ["list"]], ["add", "theorem", "length_cyclic_permutations_of_ne_nil", ["list"]], ["add", "theorem", "length_mem_cyclic_permutations", ["list"]], ["add", "theorem", "mem_cyclic_permutations_iff", ["list"]], ["add", "theorem", "mem_cyclic_permutations_self", ["list"]], ["add", "theorem", "nil_eq_rotate_iff", ["list"]], ["add", "theorem", "cyclic_permutations", ["list", "nodup"]], ["add", "theorem", "rotate_congr", ["list", "nodup"]], ["add", "theorem", "rotate_eq_self_iff", ["list", "nodup"]], ["add", "theorem", "nth_le_cyclic_permutations", ["list"]], ["add", "theorem", "rotate_eq_singleton_iff", ["list"]], ["add", "theorem", "singleton_eq_rotate_iff", ["list"]]]}]}, {"timestamp": 1629470522, "sha": "7e8432d4", "message": "chore(algebra/group_power/lemmas): Lemmas about gsmul (#8618)\nThis restates some existing lemmas as `monotone` and `strict_monotone`, and provides new lemmas about the right argument of gsmul:\n* `gsmul_le_gsmul'`\n* `gsmul_lt_gsmul'`\n* `gsmul_le_gsmul_iff'`\n* `gsmul_lt_gsmul_iff'`\nThis also removes an unnecessary `linear_order` assumption from `gsmul_le_gsmul_iff` and `gsmul_lt_gsmul_iff`.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "gsmul_eq_gsmul_iff'", []], ["add", "theorem", "gsmul_le_gsmul'", []], ["add", "theorem", "gsmul_le_gsmul_iff'", []], ["add", "theorem", "gsmul_lt_gsmul'", []], ["add", "theorem", "gsmul_lt_gsmul_iff'", []], ["add", "theorem", "gsmul_mono_left", []], ["add", "theorem", "gsmul_mono_right", []], ["add", "theorem", "gsmul_right_inj", []], ["add", "theorem", "gsmul_right_injective", []], ["add", "theorem", "gsmul_strict_mono_left", []], ["add", "theorem", "gsmul_strict_mono_right", []]]}]}, {"timestamp": 1629470520, "sha": "7265a4ee", "message": "feat(linear_algebra/dimension): generalize inequalities and invariance of dimension to arbitrary rings (#8343)\nWe implement some of the results of [_Les familles libres maximales d'un module ont-elles le meme cardinal?_](http://www.numdam.org/article/PSMIR_1973___4_A4_0.pdf).\nWe also generalize many theorems which were previously proved only for vector spaces, but are true for modules over arbitrary rings or rings satisfying the (strong) rank condition or have invariant basis number. (These typically need entire new proofs, as the original proofs e.g. used rank-nullity.)\nThe main new results are:\n* `basis_fintype_of_finite_spans`: \n Over any nontrivial ring, the existence of a finite spanning set implies that any basis is finite.\n* `union_support_maximal_linear_independent_eq_range_basis`: \n Over any ring `R`, if `b` is a basis for a module `M`,\n and `s` is a maximal linearly independent set,\n then the union of the supports of `x ∈ s` (when written out in the basis `b`) is all of `b`.\n* `infinite_basis_le_maximal_linear_independent`:\n Over any ring `R`, if `b` is an infinite basis for a module `M`,\n and `s` is a maximal linearly independent set,\n then the cardinality of `b` is bounded by the cardinality of `s`.\n* `mk_eq_mk_of_basis`:\n We generalize the invariance of dimension theorem to any ring with the invariant basis number property.\n* `basis.le_span`:\n We generalize this statement (the size of a basis is bounded by the size of any spanning set)\n to any ring satisfying the rank condition.\n* `linear_independent_le_span`:\n If `R` satisfies the strong rank condition,\n then for any linearly independent family `v : ι → M`\n and any finite spanning set `w : set M`,\n the cardinality of `ι` is bounded by the cardinality of `w`.\n* `linear_independent_le_basis`:\n Over any ring `R` satisfying the strong rank condition,\n if `b` is a basis for a module `M`,\n and `s` is a linearly independent set,\n then the cardinality of `s` is bounded by the cardinality of `b`.\n \nThere is a naming discrepancy: most of the theorem names refer to `dim`,\neven though the definition is of `module.rank`.\nThis reflects that `module.rank` was originally called `dim`, and only defined for vector spaces.\nI would prefer to address this in a separate PR (note this discrepancy wasn't introduced in this PR).", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "equiv_fun_on_fintype_symm_coe", ["finsupp"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "ne_univ_iff_exists_not_mem", ["set"]], ["add", "theorem", "not_subset_iff_exists_mem_not_mem", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "not_infinite", ["set"]]]}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "maximal", ["basis"]], ["add", "theorem", "mem_span_repr_support", ["basis"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "le_span''", ["basis"]], ["mod", "theorem", "le_span", ["basis"]], ["mod", "theorem", "mk_eq_dim''", ["basis"]], ["mod", "theorem", "mk_eq_dim", ["basis"]], ["mod", "theorem", "mk_range_eq_dim", ["basis"]], ["add", "def", "basis_fintype_of_finite_spans", []], ["add", "theorem", "basis_le_span'", []], ["mod", "theorem", "dim_bot", []], ["mod", "theorem", "dim_eq_of_injective", []], ["del", "theorem", "dim_le_of_injective", []], ["mod", "theorem", "dim_le_of_submodule", []], ["del", "theorem", "dim_le_of_surjective", []], ["mod", "theorem", "dim_map_le", []], ["del", "theorem", "dim_of_field", []], ["add", "theorem", "dim_of_ring", []], ["add", "theorem", "dim_punit", []], ["mod", "theorem", "dim_range_le", []], ["mod", "theorem", "dim_range_of_surjective", []], ["mod", "theorem", "dim_span", []], ["mod", "theorem", "dim_span_set", []], ["mod", "theorem", "dim_submodule_le", []], ["mod", "theorem", "dim_top", []], ["add", "theorem", "infinite_basis_le_maximal_linear_independent'", []], ["add", "theorem", "infinite_basis_le_maximal_linear_independent", []], ["mod", "theorem", "dim_eq", ["linear_equiv"]], ["del", "theorem", "dim_eq_lift", ["linear_equiv"]], ["mod", "theorem", "lift_dim_eq", ["linear_equiv"]], ["add", "def", "linear_independent_fintype_of_le_span_fintype", []], ["add", "theorem", "linear_independent_le_basis", []], ["del", "theorem", "linear_independent_le_dim", []], ["add", "theorem", "linear_independent_le_infinite_basis", []], ["add", "theorem", "linear_independent_le_span'", []], ["add", "theorem", "linear_independent_le_span", []], ["add", "theorem", "linear_independent_le_span_aux'", []], ["add", "theorem", "dim_le_of_injective", ["linear_map"]], ["add", "theorem", "dim_le_of_surjective", ["linear_map"]], ["add", "theorem", "lift_dim_le_of_injective", ["linear_map"]], ["add", "theorem", "maximal_linear_independent_eq_infinite_basis", []], ["mod", "theorem", "mk_eq_mk_of_basis'", []], ["mod", "theorem", "mk_eq_mk_of_basis", []], ["add", "theorem", "union_support_maximal_linear_independent_eq_range_basis", []], ["mod", "theorem", "{m}", []], ["del", "theorem", "{u₁}", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "apply_total", ["finsupp"]], ["add", "theorem", "total_option", ["finsupp"]], ["add", "theorem", "total_total", ["finsupp"]], ["mod", "def", "repr", ["span"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "def", "maximal", ["linear_independent"]], ["add", "theorem", "maximal_iff", ["linear_independent"]], ["add", "theorem", "linear_independent_bounded_of_finset_linear_independent_bounded", []], ["add", "theorem", "linear_independent_finset_map_embedding_subtype", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "lift_mk_le'", ["cardinal"]], ["add", "theorem", "lift_sup_le_lift_sup'", ["cardinal"]]]}]}, {"timestamp": 1629470518, "sha": "15b14619", "message": "feat(archive/imo): IMO 2006 Q3 (#8052)\nFormalization of IMO 2006/3", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2006_q3.lean", "changes": [["add", "theorem", "four_pow_four_pos", []], ["add", "theorem", "imo2006_q3", []], ["add", "theorem", "lhs_identity", []], ["add", "theorem", "lhs_ineq", []], ["add", "theorem", "mid_ineq", []], ["add", "theorem", "proof₁", []], ["add", "theorem", "proof₂", []], ["add", "theorem", "rhs_ineq", []], ["add", "theorem", "subst_proof₁", []], ["add", "theorem", "subst_wlog", []], ["add", "theorem", "zero_lt_32", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_nonneg_of_three", []]]}]}, {"timestamp": 1629389998, "sha": "5dc8bc16", "message": "feat(linear_algebra/clifford_algebra/equivs): the equivalences preserve conjugation (#8739)", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["add", "theorem", "conj_mk", ["quaternion_algebra"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["add", "def", "of_complex", ["clifford_algebra_complex"]], ["add", "theorem", "of_complex_I", ["clifford_algebra_complex"]], ["add", "theorem", "of_complex_comp_to_complex", ["clifford_algebra_complex"]], ["add", "theorem", "of_complex_conj", ["clifford_algebra_complex"]], ["add", "theorem", "of_complex_to_complex", ["clifford_algebra_complex"]], ["add", "theorem", "reverse_apply", ["clifford_algebra_complex"]], ["add", "theorem", "reverse_eq_id", ["clifford_algebra_complex"]], ["add", "theorem", "to_complex_comp_of_complex", ["clifford_algebra_complex"]], ["add", "theorem", "to_complex_involute", ["clifford_algebra_complex"]], ["add", "theorem", "to_complex_of_complex", ["clifford_algebra_complex"]], ["del", "theorem", "of_quaternion_apply", ["clifford_algebra_quaternion"]], ["add", "theorem", "of_quaternion_conj", ["clifford_algebra_quaternion"]], ["add", "theorem", "of_quaternion_mk", ["clifford_algebra_quaternion"]], ["add", "theorem", "of_quaternion_to_quaternion", ["clifford_algebra_quaternion"]], ["add", "theorem", "to_quaternion_involute_reverse", ["clifford_algebra_quaternion"]], ["add", "theorem", "to_quaternion_of_quaternion", ["clifford_algebra_quaternion"]], ["add", "theorem", "involute_eq_id", ["clifford_algebra_ring"]], ["add", "theorem", "reverse_apply", ["clifford_algebra_ring"]], ["add", "theorem", "reverse_eq_id", ["clifford_algebra_ring"]]]}]}, {"timestamp": 1629383476, "sha": "dd5e779e", "message": "fix(linear_algebra/basic): fix incorrect namespaces (#8757)\nPreviously there were names in the `linear_map` namespace which were about `linear_equiv`s.\nThis moves:\n* `linear_map.fun_congr_left` to `linear_equiv.fun_congr_left`\n* `linear_map.automorphism_group` to `linear_equiv.automorphism_group`\n* `linear_map.automorphism_group.to_linear_map_monoid_hom` to `linear_equiv.automorphism_group.to_linear_map_monoid_hom`", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "to_linear_map_monoid_hom", ["linear_equiv", "automorphism_group"]], ["add", "def", "fun_congr_left", ["linear_equiv"]], ["add", "theorem", "fun_congr_left_apply", ["linear_equiv"]], ["add", "theorem", "fun_congr_left_comp", ["linear_equiv"]], ["add", "theorem", "fun_congr_left_id", ["linear_equiv"]], ["add", "theorem", "fun_congr_left_symm", ["linear_equiv"]], ["del", "def", "to_linear_map_monoid_hom", ["linear_map", "automorphism_group"]], ["del", "def", "fun_congr_left", ["linear_map"]], ["del", "theorem", "fun_congr_left_apply", ["linear_map"]], ["del", "theorem", "fun_congr_left_comp", ["linear_map"]], ["del", "theorem", "fun_congr_left_id", ["linear_map"]], ["del", "theorem", "fun_congr_left_symm", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}]}, {"timestamp": 1629383474, "sha": "d1720856", "message": "docs(overview): add weak-* topology (#8755)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1629383473, "sha": "86fccaab", "message": "feat(measure_theory/strongly_measurable): define strongly measurable functions (#8623)\nA function `f` is said to be strongly measurable with respect to a measure `μ` if `f` is the sequential limit of simple functions whose support has finite measure.\nFunctions in `Lp` for `0 < p < ∞` are strongly measurable. If the measure is sigma-finite, measurable and strongly measurable are equivalent.\nThe main property of strongly measurable functions is `strongly_measurable.exists_set_sigma_finite`: there exists a measurable set `t` such that `f` is supported on `t` and `μ.restrict t` is sigma-finite. As a consequence, we can prove some results for those functions as if the measure was sigma-finite.\nI will use this to prove properties of the form `f =ᵐ[μ] g` for `Lp` functions.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subsingleton_of_subsingleton", ["set"]]]}, {"oldPath": "src/measure_theory/function/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": [["add", "theorem", "measure_support_lt_top", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_support_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_support_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]]]}, {"oldPath": null, "newPath": "src/measure_theory/function/strongly_measurable.lean", "changes": [["add", "theorem", "strongly_measurable", ["measurable"]], ["add", "theorem", "fin_strongly_measurable", ["measure_theory", "Lp"]], ["add", "theorem", "ae_eq_zero_compl", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "theorem", "exists_set_sigma_finite", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "def", "sigma_finite_set", ["measure_theory", "ae_fin_strongly_measurable"]], ["add", "def", "ae_fin_strongly_measurable", ["measure_theory"]], ["add", "theorem", "ae_fin_strongly_measurable_iff_ae_measurable", ["measure_theory"]], ["add", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "fin_strongly_measurable"]], ["add", "theorem", "exists_set_sigma_finite", ["measure_theory", "fin_strongly_measurable"]], ["add", "def", "fin_strongly_measurable", ["measure_theory"]], ["add", "theorem", "fin_strongly_measurable_iff_measurable", ["measure_theory"]], ["add", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "integrable"]], ["add", "theorem", "ae_fin_strongly_measurable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "fin_strongly_measurable_of_measurable", ["measure_theory", "mem_ℒp"]], ["add", "def", "approx", ["measure_theory", "strongly_measurable"]], ["add", "theorem", "fin_strongly_measurable_of_set_sigma_finite", ["measure_theory", "strongly_measurable"]], ["add", "def", "strongly_measurable", ["measure_theory"]], ["add", "theorem", "strongly_measurable_iff_measurable", ["measure_theory"]], ["add", "theorem", "strongly_measurable", ["measure_theory", "subsingleton"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "measurable_set_support", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1629377091, "sha": "802859f2", "message": "chore(algebra/big_operators): weaken assumption for multiset.exists_smul_of_dvd_count (#8758)\nThis is slightly more convenient than doing a case split on `a ∈ s` in the caller.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "exists_smul_of_dvd_count", ["multiset"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1629377090, "sha": "1efa3673", "message": "feat(group_action/defs): add missing comp_hom smul instances (#8707)\nThis adds missing `smul_comm_class` and `is_scalar_tower` instances about the `comp_hom` definitions.\nTo resolve unification issues in finding these instances caused by the reducibility of the `comp_hom` defs, this introduces a semireducible def `has_scalar.comp.smul`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "to_linear_equiv", ["module", "comp_hom"]], ["add", "def", "to_linear_map", ["module", "comp_hom"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "def", "smul", ["has_scalar", "comp"]], ["add", "def", "comp", ["has_scalar"]]]}]}, {"timestamp": 1629377089, "sha": "4113db58", "message": "feat(ring_theory): the trace of an integral element is integral (#8702)\nThis PR uses `trace_gen_eq_sum_roots` and `trace_trace` to show the trace of an integral element `x : L` over `K` is a multiple of the sum of all conjugates of `x`, and concludes that the trace of `x` is integral.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval₂_dvd", ["polynomial"]], ["add", "theorem", "eval₂_eq_zero_of_dvd_of_eval₂_eq_zero", ["polynomial"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "aeval_of_is_scalar_tower", ["minpoly"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "gsmul", ["is_integral"]], ["add", "theorem", "multiset_prod", ["is_integral"]], ["add", "theorem", "multiset_sum", ["is_integral"]], ["add", "theorem", "nsmul", ["is_integral"]], ["add", "theorem", "pow", ["is_integral"]], ["add", "theorem", "prod", ["is_integral"]], ["add", "theorem", "sum", ["is_integral"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "is_integral_trace", ["algebra"]], ["del", "theorem", "trace_gen_eq_sum_roots", ["algebra"]], ["add", "theorem", "trace_gen_eq_sum_roots", ["intermediate_field", "adjoin_simple"]], ["add", "theorem", "trace_gen_eq_zero", ["intermediate_field", "adjoin_simple"]], ["add", "theorem", "trace_gen_eq_sum_roots", ["power_basis"]], ["add", "theorem", "trace_eq_sum_roots", []]]}]}, {"timestamp": 1629370934, "sha": "159e34ee", "message": "Revert \"feat(field_theory/intermediate_field): generalize `algebra` instances\"\nOOPS!\nThis reverts commit 4b525bf25aa33201bd26942a938b84b2df71f175.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}]}, {"timestamp": 1629370915, "sha": "4b525bf2", "message": "feat(field_theory/intermediate_field): generalize `algebra` instances\nThe `algebra` and `is_scalar_tower` instances for `intermediate_field` are (again) as general as those for `subalgebra`.", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}]}, {"timestamp": 1629367062, "sha": "902d3ac9", "message": "chore(tactic/rewrite_search): reuse rw_rules_p parser (#8752)\nThe parser defined here is the same as `rw_rules_p`, so use it.", "changes": [{"oldPath": "src/tactic/rewrite_search/frontend.lean", "newPath": "src/tactic/rewrite_search/frontend.lean", "changes": []}]}, {"timestamp": 1629361724, "sha": "28a360a6", "message": "feat(analysis/calculus/deriv): prove `deriv_inv` at `x = 0` as well (#8748)\n* turn `differentiable_at_inv` and `differentiable_at_fpow` into `iff` lemmas;\n* slightly weaker assumptions for `differentiable_within_at_fpow` etc;\n* prove `deriv_inv` and `fderiv_inv` for all `x`;\n* prove formulas for iterated derivs of `x⁻¹` and `x ^ m`, `m : int`;\n* push `coe` in these formulas;", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": [["add", "theorem", "prod_range_cast_nat_sub", ["finset"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_fpow'", []], ["mod", "theorem", "deriv_fpow", []], ["add", "theorem", "deriv_inv''", []], ["mod", "theorem", "deriv_inv'", []], ["mod", "theorem", "deriv_inv", []], ["mod", "theorem", "deriv_within_fpow", []], ["mod", "theorem", "differentiable_at_fpow", []], ["mod", "theorem", "differentiable_at_inv", []], ["mod", "theorem", "differentiable_on_fpow", []], ["mod", "theorem", "differentiable_within_at_fpow", []], ["mod", "theorem", "fderiv_inv", []], ["mod", "theorem", "has_deriv_at_fpow", []], ["mod", "theorem", "has_deriv_within_at_fpow", []], ["mod", "theorem", "has_strict_deriv_at_fpow", []], ["add", "theorem", "iter_deriv_fpow'", []], ["mod", "theorem", "iter_deriv_fpow", []], ["add", "theorem", "iter_deriv_inv'", []], ["add", "theorem", "iter_deriv_inv", []], ["mod", "theorem", "iter_deriv_pow'", []], ["mod", "theorem", "iter_deriv_pow", []]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}]}, {"timestamp": 1629355903, "sha": "1c60e618", "message": "feat(topology/metric_space/basic): `emetric.ball x ∞ = univ` (#8745)\n* add `@[simp]` to `metric.emetric_ball`,\n `metric.emetric_ball_nnreal`, and\n `metric.emetric_closed_ball_nnreal`;\n* add `@[simp]` lemmas `metric.emetric_ball_top` and\n `emetric.closed_ball_top`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "emetric_ball", ["metric"]], ["mod", "theorem", "emetric_ball_nnreal", ["metric"]], ["add", "theorem", "emetric_ball_top", ["metric"]], ["mod", "theorem", "emetric_closed_ball_nnreal", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "closed_ball_top", ["emetric"]]]}]}, {"timestamp": 1629344787, "sha": "0e0a2404", "message": "chore(scripts): update nolints.txt (#8754)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1629337894, "sha": "ee3f8b8d", "message": "chore(order/complete_lattice): golf some proofs (#8746)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}]}, {"timestamp": 1629330824, "sha": "84554339", "message": "doc(tactic/simps): typo (#8751)\nMissed this review comment in #8729", "changes": [{"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1629330823, "sha": "6fe5b552", "message": "feat(algebra/algebra): `alg_{hom,equiv}.restrict_scalars` is injective (#8743)", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "restrict_scalars_injective", ["alg_equiv"]], ["add", "theorem", "restrict_scalars_injective", ["alg_hom"]]]}]}, {"timestamp": 1629322249, "sha": "e0bf9a16", "message": "doc({topology.algebra.weak_dual_topology, analysis.normed_space.weak_dual}): fix docstrings (#8710)\nFixing docstrings from the recently merged PR #8598 on weak-* topology.", "changes": [{"oldPath": "src/analysis/normed_space/weak_dual.lean", "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": []}, {"oldPath": "src/topology/algebra/weak_dual_topology.lean", "newPath": "src/topology/algebra/weak_dual_topology.lean", "changes": []}]}, {"timestamp": 1629322247, "sha": "23cf025c", "message": "feat(algebra/ordered_sub): define truncated subtraction in general (#8503)\n* Define and prove properties of truncated subtraction in general\n* We currently only instantiate it for `nat`. The other types (`multiset`, `finsupp`, `nnreal`, `ennreal`, ...) will be in future PRs.\nTodo in future PRs:\n* Provide `has_ordered_sub` instances for all specific cases\n* Remove the lemmas specific to each individual type", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "lt_iff_exists_mul", []], ["mod", "theorem", "min_mul_distrib'", []], ["mod", "theorem", "min_mul_distrib", []], ["add", "theorem", "min_one", []], ["add", "theorem", "one_min", []], ["mod", "theorem", "lt_of_mul_lt_mul_left", ["with_zero"]]]}, {"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": [["add", "theorem", "mul_le_cancellable", ["contravariant"]], ["add", "def", "mul_le_cancellable", []], ["add", "theorem", "mul_left_cancel''", []], ["add", "theorem", "mul_right_cancel''", []]]}, {"oldPath": null, "newPath": "src/algebra/ordered_sub.lean", "changes": [["add", "theorem", "add_le_add_add_sub", []], ["add", "theorem", "add_le_of_le_sub_left_of_le", []], ["add", "theorem", "add_le_of_le_sub_right_of_le", []], ["add", "theorem", "add_sub_add_eq_sub_left'", []], ["add", "theorem", "add_sub_add_right_eq_sub'", []], ["add", "theorem", "add_sub_assoc_of_le", []], ["add", "theorem", "add_sub_cancel_iff_le", []], ["add", "theorem", "add_sub_cancel_left", []], ["add", "theorem", "add_sub_cancel_of_le", []], ["add", "theorem", "add_sub_cancel_right", []], ["add", "theorem", "add_sub_eq_max", []], ["add", "theorem", "add_sub_le_assoc", []], ["add", "theorem", "add_sub_le_left", []], ["add", "theorem", "add_sub_le_right", []], ["add", "theorem", "add_sub_sub_cancel'", []], ["add", "theorem", "eq_sub_iff_add_eq_of_le", []], ["add", "theorem", "eq_sub_of_add_eq''", []], ["add", "theorem", "le_add_sub'", []], ["add", "theorem", "le_add_sub", []], ["add", "theorem", "le_add_sub_swap", []], ["add", "theorem", "le_sub_add", []], ["add", "theorem", "le_sub_add_add", []], ["add", "theorem", "le_sub_iff_le_sub", []], ["add", "theorem", "le_sub_iff_left", []], ["add", "theorem", "le_sub_iff_right", []], ["add", "theorem", "le_sub_of_add_le_left'", []], ["add", "theorem", "le_sub_of_add_le_right'", []], ["add", "theorem", "lt_add_of_sub_lt_left'", []], ["add", "theorem", "lt_add_of_sub_lt_right'", []], ["add", "theorem", "lt_of_sub_lt_sub_left", []], ["add", "theorem", "lt_of_sub_lt_sub_left_of_le", []], ["add", "theorem", "lt_of_sub_lt_sub_right", []], ["add", "theorem", "lt_of_sub_lt_sub_right_of_le", []], ["add", "theorem", "lt_sub_iff_left", []], ["add", "theorem", "lt_sub_iff_left_of_le", []], ["add", "theorem", "lt_sub_iff_lt_sub", []], ["add", "theorem", "lt_sub_iff_right", []], ["add", "theorem", "lt_sub_iff_right_of_le", []], ["add", "theorem", "lt_sub_of_add_lt_left", []], ["add", "theorem", "lt_sub_of_add_lt_right", []], ["add", "theorem", "sub_add_cancel_iff_le", []], ["add", "theorem", "sub_add_cancel_of_le", []], ["add", "theorem", "sub_add_eq_add_sub'", []], ["add", "theorem", "sub_add_eq_max", []], ["add", "theorem", "sub_add_eq_sub_sub'", []], ["add", "theorem", "sub_add_eq_sub_sub_swap'", []], ["add", "theorem", "sub_add_min", []], ["add", "theorem", "sub_add_sub_cancel''", []], ["add", "theorem", "sub_eq_iff_eq_add_of_le", []], ["add", "theorem", "sub_eq_of_eq_add''", []], ["add", "theorem", "sub_eq_sub_min", []], ["add", "theorem", "sub_eq_zero_iff_le", []], ["add", "theorem", "sub_inj_left", []], ["add", "theorem", "sub_inj_right", []], ["add", "theorem", "sub_le_iff_left", []], ["add", "theorem", "sub_le_iff_right", []], ["add", "theorem", "sub_le_iff_sub_le", []], ["add", "theorem", "sub_le_self'", []], ["add", "theorem", "sub_le_sub'", []], ["add", "theorem", "sub_le_sub_add_sub", []], ["add", "theorem", "sub_le_sub_iff_left'", []], ["add", "theorem", "sub_le_sub_iff_right'", []], ["add", "theorem", "sub_le_sub_left'", []], ["add", "theorem", "sub_le_sub_right'", []], ["add", "theorem", "sub_left_inj'", []], ["add", "theorem", "sub_lt_iff_left", []], ["add", "theorem", "sub_lt_iff_right", []], ["add", "theorem", "sub_lt_iff_sub_lt", []], ["add", "theorem", "sub_lt_self'", []], ["add", "theorem", "sub_lt_self_iff'", []], ["add", "theorem", "sub_lt_sub_iff_left_of_le", []], ["add", "theorem", "sub_lt_sub_iff_left_of_le_of_le", []], ["add", "theorem", "sub_lt_sub_iff_right'", []], ["add", "theorem", "sub_lt_sub_right_of_le", []], ["add", "theorem", "sub_min", []], ["add", "theorem", "sub_pos_iff_lt", []], ["add", "theorem", "sub_pos_iff_not_le", []], ["add", "theorem", "sub_pos_of_lt'", []], ["add", "theorem", "sub_right_comm'", []], ["add", "theorem", "sub_right_inj'", []], ["add", "theorem", "sub_self'", []], ["add", "theorem", "sub_self_add", []], ["add", "theorem", "sub_sub'", []], ["add", "theorem", "sub_sub_assoc", []], ["add", "theorem", "sub_sub_cancel_of_le", []], ["add", "theorem", "sub_sub_le", []], ["add", "theorem", "sub_sub_sub_cancel_right'", []], ["add", "theorem", "sub_sub_sub_le_sub", []], ["add", "theorem", "sub_zero'", []], ["add", "theorem", "zero_sub'", []]]}, {"oldPath": "src/algebra/regular/basic.lean", "newPath": "src/algebra/regular/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "add_sub_cancel_right", ["nat"]], ["del", "theorem", "add_sub_eq_max", ["nat"]], ["del", "theorem", "sub_add_eq_max", ["nat"]], ["del", "theorem", "sub_add_min", ["nat"]], ["del", "theorem", "sub_min", ["nat"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "sub_eq_zero_iff_le", ["ennreal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "sub_eq_zero_iff_le", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1629312772, "sha": "0860c415", "message": "feat(data/nat/pairing): add some `nat.pair` lemmas (#8740)", "changes": [{"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["add", "theorem", "infi_unpair", []], ["add", "theorem", "Inter_unpair", ["set"]], ["add", "theorem", "Union_unpair", ["set"]], ["add", "theorem", "supr_unpair", []]]}]}, {"timestamp": 1629312771, "sha": "e6fda2ac", "message": "fix(transform_decl): fix namespace bug (#8733)\n* The problem was that when writing `@[to_additive] def foo ...` every declaration used in `foo` in namespace `foo` would be additivized without changing the last part of the name. This behavior was intended to translate automatically generated declarations like `foo._proof_1`. However, if `foo` contains a non-internal declaration `foo.bar` and `add_foo.bar` didn't exist yet, it would also create a declaration `add_foo.bar` additivizing `foo.bar`.\n* This PR changes the behavior: if `foo.bar` has the `@[to_additive]` attribute (potentially with a custom additive name), then we won't create a second additive version of `foo.bar`, and succeed normally. However, if `foo.bar` doesn't have the `@[to_additive]` attribute, then we fail with a nice error message. We could potentially support this behavior, but it doesn't seem that worthwhile and it would require changing a couple low-level definitions that `@[to_additive]` uses (e.g. by replacing `name.map_prefix` so that it only maps prefixes if the name is `internal`).\n* So far this didn't happen in the library yet. There are currently 5 non-internal declarations `foo.bar` that are used in `foo` where `foo` has the `@[to_additive]` attribute, but all of these declarations were already had an additive version `add_foo.bar`.\n* These 5 declarations are `[Mon.has_limits.limit_cone, Mon.has_limits.limit_cone_is_limit, con_gen.rel, magma.free_semigroup.r, localization.r]`\n* This fixes the error in #8707 and resolves the Zulip thread https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.238707.20linter.20weirdness\n* I also added some documentation / comments to the function `transform_decl_with_prefix_fun_aux`, made it non-private, and rewrote some steps.", "changes": [{"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "test/to_additive.lean", "newPath": "test/to_additive.lean", "changes": [["add", "def", "in_namespace", ["some_def"]], ["add", "def", "some_def", []]]}]}, {"timestamp": 1629312770, "sha": "9a249eef", "message": "doc(tactic/simps): expand (#8729)\n* Better document custom projections that are composites of multiple projections\n* Give examples of `initialize_simps_projections`\n* Add `initialize_simps_projections` entry to commands.", "changes": [{"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1629312769, "sha": "6a83c7da", "message": "feat(topology/compact_open): the family of constant maps collectively form a continuous map (#8721)", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "coe_const'", ["continuous_map"]], ["add", "def", "const'", ["continuous_map"]], ["add", "theorem", "continuous_const'", ["continuous_map"]]]}]}, {"timestamp": 1629312768, "sha": "3ac609b9", "message": "chore(topology/continuous_function/compact): relax typeclass assumptions for metric space structure on C(X, Y) (#8717)", "changes": [{"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["mod", "def", "equiv_bounded_of_compact", ["continuous_map"]]]}]}, {"timestamp": 1629312767, "sha": "0d59511a", "message": "feat(topology/{continuous_function/bounded, metric_space/algebra}): new mixin classes (#8580)\nThis PR defines mixin classes `has_lipschitz_add` and `has_bounded_smul` which are designed to abstract algebraic properties of metric spaces shared by normed groups/fields/modules and by `ℝ≥0`.\nThis permits the bounded continuous functions `α →ᵇ ℝ≥0` to be naturally a topological (ℝ≥0)-module, by a generalization of the proof previously written for normed groups/fields/modules.\nFrankly, these typeclasses are a bit ad hoc -- but it all seems to work!", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["mod", "def", "coe_fn_add_hom", ["bounded_continuous_function"]], ["mod", "theorem", "forall_coe_zero_iff_zero", ["bounded_continuous_function"]], ["mod", "def", "forget_boundedness_add_hom", ["bounded_continuous_function"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/algebra.lean", "changes": [["add", "theorem", "dist_pair_smul", []], ["add", "theorem", "dist_smul_pair", []], ["add", "def", "C", ["has_lipschitz_mul"]], ["add", "theorem", "lipschitz_with_lipschitz_const_mul", []], ["add", "theorem", "lipschitz_with_lipschitz_const_mul_edist", []]]}]}, {"timestamp": 1629312766, "sha": "26590e97", "message": "feat(data/list/min_max): maximum is a fold, bounded prod (#8543)\nAlso provide the same lemmas for multiset.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "prod_le_of_forall_le", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_le_of_forall_le", ["list"]]]}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": [["add", "theorem", "le_min_of_le_forall", ["list"]], ["add", "theorem", "max_le_of_forall_le", ["list"]], ["add", "theorem", "max_nat_le_of_forall_le", ["list"]], ["add", "theorem", "maximum_eq_coe_foldr_max_of_ne_nil", ["list"]], ["add", "theorem", "maximum_nat_eq_coe_foldr_max_of_ne_nil", ["list"]], ["add", "theorem", "minimum_eq_coe_foldr_min_of_ne_nil", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "prod_le_of_forall_le", ["multiset"]]]}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": [["add", "theorem", "max_le_of_forall_le", ["multiset"]], ["add", "theorem", "max_nat_le_of_forall_le", ["multiset"]]]}]}, {"timestamp": 1629312765, "sha": "4e7e7df8", "message": "feat(algebra/monoid_algebra): add_monoid_algebra.op_{add,ring}_equiv (#8536)\nTransport an opposite `add_monoid_algebra` to the algebra over the opposite ring.\nOn the way, \n- provide API lemma `mul_equiv.inv_fun_eq_symm {f : M ≃* N} : f.inv_fun = f.symm` and the additive version\n- generalize simp lemmas `equiv_to_opposite_(symm_)apply` to `equiv_to_opposite_(symm_)coe`\n- tag `map_range.(add_)equiv_symm` with `[simp]", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "op_ring_equiv_single", ["add_monoid_algebra"]], ["add", "theorem", "op_ring_equiv_symm_single", ["add_monoid_algebra"]], ["add", "theorem", "op_ring_equiv_single", ["monoid_algebra"]], ["add", "theorem", "op_ring_equiv_symm_single", ["monoid_algebra"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op_ext", ["add_monoid_hom"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "inv_fun_eq_symm", ["mul_equiv"]], ["add", "theorem", "symm_trans_apply", ["mul_equiv"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "add_equiv_symm", ["finsupp", "map_range"]], ["mod", "theorem", "equiv_symm", ["finsupp", "map_range"]]]}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["del", "theorem", "equiv_to_opposite_apply", ["opposite"]], ["add", "theorem", "equiv_to_opposite_coe", ["opposite"]], ["del", "theorem", "equiv_to_opposite_symm_apply", ["opposite"]], ["add", "theorem", "equiv_to_opposite_symm_coe", ["opposite"]]]}]}, {"timestamp": 1629312763, "sha": "15444e1f", "message": "feat(model_theory/basic): more substructure API, including subtype, map, and comap (#7937)\nDefines `first_order.language.embedding.of_injective`, which bundles an injective hom in an algebraic language as an embedding\nDefines the induced `L.Structure` on an `L.substructure`\nDefines the embedding `S.subtype` from `S : L.substructure M` into `M`\nDefines `substructure.map` and `substructure.comap` and associated API including Galois insertions", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "coe_fn_of_injective", ["first_order", "language", "embedding"]], ["add", "def", "of_injective", ["first_order", "language", "embedding"]], ["add", "theorem", "of_injective_to_hom", ["first_order", "language", "embedding"]], ["add", "theorem", "apply_coe_mem_map", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_induction'", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_subtype", ["first_order", "language", "substructure"]], ["add", "def", "comap", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_id", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_inf", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_inf_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_infi", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_infi_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_injective_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_le_comap_iff_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_map_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_map_eq_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_strict_mono_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_sup_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_supr_map_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_surjective_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "comap_top", ["first_order", "language", "substructure"]], ["add", "theorem", "gc_map_comap", ["first_order", "language", "substructure"]], ["add", "def", "gci_map_comap", ["first_order", "language", "substructure"]], ["add", "def", "gi_map_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "le_comap_map", ["first_order", "language", "substructure"]], ["add", "theorem", "le_comap_of_map_le", ["first_order", "language", "substructure"]], ["add", "def", "map", ["first_order", "language", "substructure"]], ["add", "theorem", "map_bot", ["first_order", "language", "substructure"]], ["add", "theorem", "map_comap_eq_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_comap_le", ["first_order", "language", "substructure"]], ["add", "theorem", "map_comap_map", ["first_order", "language", "substructure"]], ["add", "theorem", "map_id", ["first_order", "language", "substructure"]], ["add", "theorem", "map_inf_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_infi_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_injective_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_le_iff_le_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "map_le_map_iff_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_le_of_le_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "map_map", ["first_order", "language", "substructure"]], ["add", "theorem", "map_strict_mono_of_injective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_sup", ["first_order", "language", "substructure"]], ["add", "theorem", "map_sup_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_supr", ["first_order", "language", "substructure"]], ["add", "theorem", "map_supr_comap_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "map_surjective_of_surjective", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_map", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_map_of_mem", ["first_order", "language", "substructure"]], ["add", "theorem", "monotone_comap", ["first_order", "language", "substructure"]], ["add", "theorem", "monotone_map", ["first_order", "language", "substructure"]], ["add", "def", "subtype", ["first_order", "language", "substructure"]]]}]}, {"timestamp": 1629303258, "sha": "a47d49db", "message": "chore(set/function): remove reducible on eq_on (#8738)\nThis backs out #8736, and instead removes the unnecessary `@[reducible]`. \nThis leaves the `simp` lemma available if anyone wants it (although it is not currently used in mathlib3), but should still resolve the problem that @dselsam's experimental `simp` in the binport of mathlib3 was excessively enthusiastic about using this lemma.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "def", "eq_on", ["set"]], ["mod", "theorem", "eq_on_empty", ["set"]]]}]}, {"timestamp": 1629303257, "sha": "02b90ab4", "message": "doc(tactic/monotonicity): bad ac_mono syntax doc (#8734)\nThe syntax `ac_mono h` was at some point changed to `ac_mono := h` but the documentation did not reflect the change.", "changes": [{"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}]}, {"timestamp": 1629288533, "sha": "83c78217", "message": "fix(algebra/algebra/restrict_scalars): Remove a bad instance (#8732)\nThis instance forms a non-defeq diamond with the following one\n```lean\ninstance submodule.restricted_module' [module R M] [is_scalar_tower R S M] (V : submodule S M) :\n module R V :=\nby apply_instance\n```\nThe `submodule.restricted_module_is_scalar_tower` instance is harmless, but it can't exist without the first one so we remove it too.\nBased on the CI result, this instance wasn't used anyway.", "changes": [{"oldPath": "src/algebra/algebra/restrict_scalars.lean", "newPath": "src/algebra/algebra/restrict_scalars.lean", "changes": []}]}, {"timestamp": 1629288532, "sha": "c0f16d26", "message": "feat(analysis/normed_space/affine_isometry): new file, bundled affine isometries (#8660)\nThis PR defines bundled affine isometries and affine isometry equivs, adapting the theory more or less wholesale from the linear isometry and affine map theories.\nIn follow-up PRs I re-work the Mazur-Ulam and Euclidean geometry libraries to use these objects where appropriate.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/affine_isometry.lean", "changes": [["add", "theorem", "coe_comp", ["affine_isometry"]], ["add", "theorem", "coe_fn_injective", ["affine_isometry"]], ["add", "theorem", "coe_id", ["affine_isometry"]], ["add", "theorem", "coe_mul", ["affine_isometry"]], ["add", "theorem", "coe_one", ["affine_isometry"]], ["add", "theorem", "coe_to_affine_isometry_equiv", ["affine_isometry"]], ["add", "theorem", "coe_to_affine_map", ["affine_isometry"]], ["add", "def", "comp", ["affine_isometry"]], ["add", "theorem", "comp_assoc", ["affine_isometry"]], ["add", "theorem", "comp_continuous_iff", ["affine_isometry"]], ["add", "theorem", "comp_id", ["affine_isometry"]], ["add", "theorem", "diam_image", ["affine_isometry"]], ["add", "theorem", "diam_range", ["affine_isometry"]], ["add", "theorem", "dist_map", ["affine_isometry"]], ["add", "theorem", "ediam_image", ["affine_isometry"]], ["add", "theorem", "ediam_range", ["affine_isometry"]], ["add", "theorem", "edist_map", ["affine_isometry"]], ["add", "theorem", "ext", ["affine_isometry"]], ["add", "def", "id", ["affine_isometry"]], ["add", "theorem", "id_apply", ["affine_isometry"]], ["add", "theorem", "id_comp", ["affine_isometry"]], ["add", "theorem", "id_to_affine_map", ["affine_isometry"]], ["add", "theorem", "linear_eq_linear_isometry", ["affine_isometry"]], ["add", "theorem", "map_eq_iff", ["affine_isometry"]], ["add", "theorem", "map_ne", ["affine_isometry"]], ["add", "theorem", "map_vadd", ["affine_isometry"]], ["add", "theorem", "map_vsub", ["affine_isometry"]], ["add", "theorem", "nndist_map", ["affine_isometry"]], ["add", "theorem", "to_affine_isometry_equiv_apply", ["affine_isometry"]], ["add", "theorem", "to_affine_map_injective", ["affine_isometry"]], ["add", "structure", "affine_isometry", []], ["add", "theorem", "apply_symm_apply", ["affine_isometry_equiv"]], ["add", "theorem", "coe_inv", ["affine_isometry_equiv"]], ["add", "theorem", "coe_mk'", ["affine_isometry_equiv"]], ["add", "theorem", "coe_mk", ["affine_isometry_equiv"]], ["add", "theorem", "coe_mul", ["affine_isometry_equiv"]], ["add", "theorem", "coe_one", ["affine_isometry_equiv"]], ["add", "theorem", "coe_refl", ["affine_isometry_equiv"]], ["add", "theorem", "coe_symm_trans", ["affine_isometry_equiv"]], ["add", "theorem", "coe_to_affine_equiv", ["affine_isometry_equiv"]], ["add", "theorem", "coe_to_affine_isometry", ["affine_isometry_equiv"]], ["add", "theorem", "coe_to_homeomorph", ["affine_isometry_equiv"]], ["add", "theorem", "coe_to_isometric", ["affine_isometry_equiv"]], ["add", "theorem", "coe_trans", ["affine_isometry_equiv"]], ["add", "theorem", "comp_continuous_iff", ["affine_isometry_equiv"]], ["add", "theorem", "comp_continuous_on_iff", ["affine_isometry_equiv"]], ["add", "theorem", "diam_image", ["affine_isometry_equiv"]], ["add", "theorem", "dist_map", ["affine_isometry_equiv"]], ["add", "theorem", "ediam_image", ["affine_isometry_equiv"]], ["add", "theorem", "edist_map", ["affine_isometry_equiv"]], ["add", "theorem", "ext", ["affine_isometry_equiv"]], ["add", "theorem", "linear_eq_linear_isometry", ["affine_isometry_equiv"]], ["add", "theorem", "linear_isometry_equiv_mk'", ["affine_isometry_equiv"]], ["add", "theorem", "map_eq_iff", ["affine_isometry_equiv"]], ["add", "theorem", "map_ne", ["affine_isometry_equiv"]], ["add", "theorem", "map_vadd", ["affine_isometry_equiv"]], ["add", "theorem", "map_vsub", ["affine_isometry_equiv"]], ["add", "def", "mk'", ["affine_isometry_equiv"]], ["add", "theorem", "range_eq_univ", ["affine_isometry_equiv"]], ["add", "def", "refl", ["affine_isometry_equiv"]], ["add", "theorem", "refl_trans", ["affine_isometry_equiv"]], ["add", "def", "symm", ["affine_isometry_equiv"]], ["add", "theorem", "symm_apply_apply", ["affine_isometry_equiv"]], ["add", "theorem", "symm_symm", ["affine_isometry_equiv"]], ["add", "theorem", "symm_trans", ["affine_isometry_equiv"]], ["add", "theorem", "to_affine_equiv_injective", ["affine_isometry_equiv"]], ["add", "theorem", "to_affine_equiv_refl", ["affine_isometry_equiv"]], ["add", "theorem", "to_affine_equiv_symm", ["affine_isometry_equiv"]], ["add", "def", "to_affine_isometry", ["affine_isometry_equiv"]], ["add", "def", "to_homeomorph", ["affine_isometry_equiv"]], ["add", "theorem", "to_homeomorph_refl", ["affine_isometry_equiv"]], ["add", "theorem", "to_homeomorph_symm", ["affine_isometry_equiv"]], ["add", "def", "to_isometric", ["affine_isometry_equiv"]], ["add", "theorem", "to_isometric_refl", ["affine_isometry_equiv"]], ["add", "theorem", "to_isometric_symm", ["affine_isometry_equiv"]], ["add", "def", "trans", ["affine_isometry_equiv"]], ["add", "theorem", "trans_assoc", ["affine_isometry_equiv"]], ["add", "theorem", "trans_refl", ["affine_isometry_equiv"]], ["add", "theorem", "trans_symm", ["affine_isometry_equiv"]], ["add", "structure", "affine_isometry_equiv", []], ["add", "theorem", "coe_to_affine_isometry", ["linear_isometry"]], ["add", "def", "to_affine_isometry", ["linear_isometry"]], ["add", "theorem", "to_affine_isometry_linear_isometry", ["linear_isometry"]], ["add", "theorem", "to_affine_isometry_to_affine_map", ["linear_isometry"]], ["add", "theorem", "coe_to_affine_isometry_equiv", ["linear_isometry_equiv"]], ["add", "def", "to_affine_isometry_equiv", ["linear_isometry_equiv"]], ["add", "theorem", "to_affine_isometry_equiv_linear_isometry_equiv", ["linear_isometry_equiv"]], ["add", "theorem", "to_affine_isometry_equiv_to_affine_equiv", ["linear_isometry_equiv"]], ["add", "theorem", "to_affine_isometry_equiv_to_affine_isometry", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "id_apply", ["linear_isometry"]], ["add", "theorem", "id_to_linear_map", ["linear_isometry"]], ["del", "theorem", "id_apply", ["linear_isometry_equiv", "linear_isometry"]], ["del", "theorem", "id_to_linear_map", ["linear_isometry_equiv", "linear_isometry"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["mod", "def", "mk'", ["affine_equiv"]], ["del", "theorem", "to_equiv_mk'", ["affine_equiv"]]]}]}, {"timestamp": 1629288531, "sha": "d1b34f7b", "message": "feat(ring_theory): define the ideal class group (#8626)\nThis PR defines the ideal class group of an integral domain, as the quotient of the invertible fractional ideals by the principal fractional ideals. It also shows that this corresponds to the more traditional definition in a Dedekind domain, namely the quotient of the nonzero ideals by `I ~ J ↔ ∃ xy, xI = yJ`.\nCo-Authored-By: Ashvni ashvni.n@gmail.com\nCo-Authored-By: Filippo A. E. Nuccio filippo.nuccio@univ-st-etienne.fr", "changes": [{"oldPath": null, "newPath": "src/ring_theory/class_group.lean", "changes": [["add", "theorem", "card_class_group_eq_one", []], ["add", "theorem", "card_class_group_eq_one_iff", []], ["add", "theorem", "mk0_eq_mk0_iff", ["class_group"]], ["add", "theorem", "mk0_eq_mk0_iff_exists_fraction_ring", ["class_group"]], ["add", "theorem", "mk0_eq_one_iff", ["class_group"]], ["add", "theorem", "mk0_surjective", ["class_group"]], ["add", "theorem", "mk_eq_one_iff", ["class_group"]], ["add", "def", "class_group", []], ["add", "theorem", "coe_to_principal_ideal", []], ["add", "theorem", "mk'_eq_mk'", ["quotient_group"]], ["add", "def", "to_principal_ideal", []], ["add", "theorem", "to_principal_ideal_eq_iff", []]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "div_surjective", ["is_fraction_ring"]], ["add", "theorem", "lift_algebra_map", ["is_fraction_ring"]], ["mod", "theorem", "lift_mk'", ["is_fraction_ring"]], ["mod", "theorem", "mk'_eq_div", ["is_fraction_ring"]], ["add", "theorem", "mk'_spec'_mk", ["is_localization"]], ["add", "theorem", "mk'_spec_mk", ["is_localization"]]]}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}]}, {"timestamp": 1629282767, "sha": "a0aee51a", "message": "chore({group,ring}_theory/sub{group,monoid,ring,semiring}): Add missing scalar action typeclasses (#8731)\nThis adds `has_faithful_scalar` and `mul_semiring_action` instances for simple subtypes. \nNeither typeclass associates any new actions with these types; they just provide additionally properties of the existing actions.", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1629282766, "sha": "6bd6c11b", "message": "refactor(field_theory,ring_theory): generalize adjoin_root.equiv to `power_basis` (#8726)\nWe had two proofs that `A`-preserving maps from `A[x]` or `A(x)` to `B` are in bijection with the set of conjugate roots to `x` in `B`, so by stating the result for `power_basis` we can avoid reproving it twice, and get some generalizations (to a `comm_ring` instead of an `integral_domain`) for free.\nThere's probably a bit more to generalize in `adjoin_root` or `intermediate_field.adjoin`, which I will do in follow-up PRs.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["del", "theorem", "gen_eq", ["intermediate_field", "adjoin", "power_basis"]], ["add", "theorem", "minpoly_gen", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "card_of_power_basis", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "def", "equiv", ["adjoin_root"]], ["add", "theorem", "is_algebraic_root", ["adjoin_root"]], ["add", "theorem", "is_integral_root", ["adjoin_root"]], ["add", "theorem", "minpoly_power_basis_gen", ["adjoin_root"]], ["add", "theorem", "minpoly_power_basis_gen_of_monic", ["adjoin_root"]], ["add", "theorem", "minpoly_root", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1629282765, "sha": "3de385a2", "message": "feat(ring_theory/dedekind_domain): prime elements of `ideal A` are the prime ideals (#8718)\nThis shows that Dedekind domains have unique factorization into prime *ideals*, not just prime *elements* of the monoid `ideal A`.\nAfter some thinking, I believe Dedekind domains are the most common setting in which this equality hold. If anyone has a reference showing how to generalize this, that would be much appreciated.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "theorem", "dvd_span_singleton", ["ideal"]], ["add", "theorem", "is_prime_of_prime", ["ideal"]], ["add", "theorem", "prime_iff_is_prime", ["ideal"]], ["add", "theorem", "prime_of_is_prime", ["ideal"]]]}]}, {"timestamp": 1629282764, "sha": "f1b6c8fd", "message": "feat(data/matrix/kronecker): add two lemmas (#8700)\nAdded two lemmas `kronecker_map_assoc` and `kronecker_assoc` showing associativity of the Kronecker product", "changes": [{"oldPath": "src/data/matrix/kronecker.lean", "newPath": "src/data/matrix/kronecker.lean", "changes": [["add", "theorem", "kronecker_assoc", ["matrix"]], ["add", "theorem", "kronecker_map_assoc", ["matrix"]], ["add", "theorem", "kronecker_map_assoc₁", ["matrix"]], ["add", "def", "kronecker_map_bilinear", ["matrix"]], ["add", "theorem", "kronecker_map_bilinear_mul_mul", ["matrix"]], ["del", "def", "kronecker_map_linear", ["matrix"]], ["del", "theorem", "kronecker_map_linear_mul_mul", ["matrix"]], ["add", "theorem", "kronecker_tmul_assoc", ["matrix"]]]}]}, {"timestamp": 1629275299, "sha": "5335c671", "message": "refactor(topology/algebra/ring): `topological_ring` extends `topological_add_group` (#8709)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1629275298, "sha": "11516119", "message": "feat(algebra/pointwise): instances in locale pointwise (#8689)\n@rwbarton and @bryangingechen mentioned in https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Friday.20afternoon.20puzzle.20--.2037.20.E2.88.88.2037.3F that we should put pointwise instances on sets in a locale.\nThis PR does that. You now have to write `open_locale pointwise` to get algebraic operations on sets and finsets.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/bounds.lean", "newPath": "src/algebra/bounds.lean", "changes": []}, {"oldPath": "src/algebra/ordered_pointwise.lean", "newPath": "src/algebra/ordered_pointwise.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["del", "theorem", "add_card_le", ["finset"]]]}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["mod", "theorem", "preimage_neg_interval", ["set"]]]}, {"oldPath": "src/group_theory/finiteness.lean", "newPath": "src/group_theory/finiteness.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/group/basic.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/haar.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}]}, {"timestamp": 1629275297, "sha": "efa34dc6", "message": "feat(data/list/perm): nodup_permutations (#8616)\nA simpler version of #8494\nTODO: `nodup s.permutations ↔ nodup s`\nTODO: `count s s.permutations = (zip_with count s s.tails).prod`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "count_bind", ["list"]], ["add", "theorem", "count_map_map", ["list"]], ["add", "theorem", "inj_on_insert_nth_index_of_not_mem", ["list"]], ["add", "theorem", "insert_nth_injective", ["list"]], ["add", "theorem", "insert_nth_length_self", ["list"]], ["del", "theorem", "insert_nth_nil", ["list"]], ["add", "theorem", "insert_nth_of_length_lt", ["list"]], ["add", "theorem", "insert_nth_succ_cons", ["list"]], ["add", "theorem", "insert_nth_zero", ["list"]], ["add", "theorem", "length_insert_nth_le_succ", ["list"]], ["add", "theorem", "length_le_length_insert_nth", ["list"]], ["add", "theorem", "nth_le_insert_nth_add_succ", ["list"]], ["add", "theorem", "nth_le_insert_nth_of_lt", ["list"]], ["add", "theorem", "nth_le_insert_nth_self", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "count_permutations'_aux_self", ["list"]], ["add", "theorem", "injective_permutations'_aux", ["list"]], ["add", "theorem", "length_permutations'_aux", ["list"]], ["add", "theorem", "nodup_permutations'_aux_iff", ["list"]], ["add", "theorem", "nodup_permutations'_aux_of_not_mem", ["list"]], ["add", "theorem", "nodup_permutations", ["list"]], ["add", "theorem", "nth_le_permutations'_aux", ["list"]], ["add", "theorem", "permutations'_aux_nth_le_zero", ["list"]]]}]}, {"timestamp": 1629273200, "sha": "41f7b5ba", "message": "feat(linear_algebra/clifford_algebra/equivs): there is a clifford algebra isomorphic to every quaternion algebra (#8670)\nThe proofs are not particularly fast here unfortunately.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": [["add", "theorem", "ι_mul_ι_add_swap", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/equivs.lean", "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["mod", "theorem", "to_complex_ι", ["clifford_algebra_complex"]], ["add", "def", "Q", ["clifford_algebra_quaternion"]], ["add", "theorem", "Q_apply", ["clifford_algebra_quaternion"]], ["add", "def", "of_quaternion", ["clifford_algebra_quaternion"]], ["add", "theorem", "of_quaternion_apply", ["clifford_algebra_quaternion"]], ["add", "theorem", "of_quaternion_comp_to_quaternion", ["clifford_algebra_quaternion"]], ["add", "def", "quaternion_basis", ["clifford_algebra_quaternion"]], ["add", "def", "to_quaternion", ["clifford_algebra_quaternion"]], ["add", "theorem", "to_quaternion_comp_of_quaternion", ["clifford_algebra_quaternion"]], ["add", "theorem", "to_quaternion_ι", ["clifford_algebra_quaternion"]]]}]}, {"timestamp": 1629263517, "sha": "40b7dc75", "message": "chore(data/set/function): remove useless @[simp] (#8736)\nThis lemma\n```\nlemma eq_on_empty (f₁ f₂ : α → β) : eq_on f₁ f₂ ∅ := λ x, false.elim\n```\nis currently marked `@[simp]`, but can never fire, because after noting `eq_on` is `@[reducible]`, the pattern we would be replacing looks like `?f ?x`, which Lean3's simp doesn't like.\nOn the other hand, @dselsam's experiments with discrimination trees in simp in the binport of mathlib are spending most of their time on this lemma!\nLet's get rid of it.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "eq_on_empty", ["set"]]]}]}, {"timestamp": 1629256626, "sha": "cb3d5db3", "message": "feat(algebra/ordered_monoid): generalize {min,max}_mul_mul_{left,right} (#8725)\nBefore, it has assumptions about `cancel_comm_monoid` for all the lemmas.\nIn fact, they hold under much weaker `has_mul`.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["mod", "theorem", "max_le_mul_of_one_le", []], ["mod", "theorem", "min_le_mul_of_one_le_left", []], ["mod", "theorem", "min_le_mul_of_one_le_right", []]]}]}, {"timestamp": 1629253309, "sha": "e23e6ebd", "message": "chore(scripts): update nolints.txt (#8735)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1629247267, "sha": "ce965a55", "message": "feat(measure_theory/decomposition/lebesgue): the Lebesgue decomposition theorem (#8687)\nThis PR proves the existence and uniqueness of the Lebesgue decompositions theorem which is the last step before proving the Radon-Nikodym theorem 🎉", "changes": [{"oldPath": null, "newPath": "src/measure_theory/decomposition/lebesgue.lean", "changes": [["add", "theorem", "eq_radon_nikodym_deriv", ["measure_theory", "measure"]], ["add", "theorem", "eq_singular_part", ["measure_theory", "measure"]], ["add", "theorem", "exists_positive_of_not_mutually_singular", ["measure_theory", "measure"]], ["add", "def", "have_lebesgue_decomposition", ["measure_theory", "measure"]], ["add", "theorem", "have_lebesgue_decomposition_add", ["measure_theory", "measure"]], ["add", "theorem", "have_lebesgue_decomposition_of_finite_measure", ["measure_theory", "measure"]], ["add", "theorem", "have_lebesgue_decomposition_spec", ["measure_theory", "measure"]], ["add", "theorem", "max_measurable_le", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "def", "measurable_le", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "def", "measurable_le_eval", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "sup_mem_measurable_le", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "supr_le_le", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "supr_mem_measurable_le'", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "supr_mem_measurable_le", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "supr_monotone'", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "supr_monotone", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "supr_succ_eq_sup", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "zero_mem_measurable_le", ["measure_theory", "measure", "lebesgue_decomposition"]], ["add", "theorem", "measurable_radon_nikodym_deriv", ["measure_theory", "measure"]], ["add", "theorem", "mutually_singular_singular_part", ["measure_theory", "measure"]], ["add", "def", "radon_nikodym_deriv", ["measure_theory", "measure"]], ["add", "def", "singular_part", ["measure_theory", "measure"]], ["add", "theorem", "singular_part_le", ["measure_theory", "measure"]], ["add", "theorem", "with_density_radon_nikodym_deriv_le", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["add", "theorem", "with_density_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "finite_measure_of_le", ["measure_theory"]], ["add", "theorem", "sigma_finite_of_le", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["add", "theorem", "exists_measure_pos_of_not_measure_Union_null", ["measure_theory"]]]}]}, {"timestamp": 1629238680, "sha": "67501f68", "message": "feat(algebra): generalize `ring_hom.map_dvd` (#8722)\nNow it is available for `mul_hom` and `monoid_hom`, and in a `monoid` (or `semiring` in the `ring_hom` case), not just `comm_semiring`", "changes": [{"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "map_dvd", ["monoid_hom"]], ["add", "theorem", "map_dvd", ["mul_hom"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "map_dvd", ["ring_hom"]]]}]}, {"timestamp": 1629234472, "sha": "e6e5718a", "message": "chore(lie/semisimple): tweak `lie_algebra.subsingleton_of_semisimple_lie_abelian` (#8728)", "changes": [{"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": []}]}, {"timestamp": 1629234471, "sha": "31d55491", "message": "docs(overview): nilpotent and presented groups (#8711)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1629225013, "sha": "5b5b432e", "message": "fix(tactic/tfae): remove unused arg in tfae_have (#8727)\nSince this \"discharger\" argument is not using the interactive tactic parser, you can only give names of tactics here, and in any case it's unused by the body, so there is no point in specifying the discharger in the first place.", "changes": [{"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}]}, {"timestamp": 1629225012, "sha": "e0656d12", "message": "chore(algebra/module/basic): golf a proof (#8723)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1629225011, "sha": "579ec7d3", "message": "feat(ring_theory/power_basis): `pb.minpoly_gen = minpoly pb.gen` (#8719)\nIt actually kind of surprised me that this lemma was never added!", "changes": [{"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "degree_minpoly_gen", ["power_basis"]], ["add", "theorem", "dim_le_degree_of_root", ["power_basis"]], ["add", "theorem", "minpoly_gen_eq", ["power_basis"]]]}]}, {"timestamp": 1629225010, "sha": "fefdcf52", "message": "feat(tactic/lint): add universe linter (#8685)\n* The linter checks that there are no bad `max u v` occurrences in declarations (bad means that neither `u` nor `v` occur by themselves). See documentation for more details.\n* `meta/expr` now imports `meta/rb_map` (but this doesn't give any new transitive imports, so it barely matters). I also removed a transitive import from `meta/rb_map`.", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/projective.lean", "newPath": "src/topology/category/Profinite/projective.lean", "changes": [["mod", "def", "projective_presentation", ["Profinite"]]]}]}, {"timestamp": 1629225009, "sha": "3453f7a8", "message": "docs(order/filter/partial): add module docstring (#8620)\nFix up some names:\n* `core_preimage_gc ` -> `image_core_gc`\n* `rtendsto_iff_le_comap` -> `rtendsto_iff_le_rcomap`\nAdd whitespaces around tokens", "changes": [{"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": [["del", "theorem", "core_preimage_gc", ["rel"]], ["add", "theorem", "image_core_gc", ["rel"]], ["mod", "theorem", "mem_core", ["rel"]], ["mod", "theorem", "mem_preimage", ["rel"]], ["mod", "def", "preimage", ["rel"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "Sup_sets_eq", ["filter"]], ["mod", "theorem", "comap_Sup", ["filter"]], ["mod", "theorem", "comap_infi", ["filter"]], ["mod", "theorem", "comap_ne_bot", ["filter"]], ["mod", "theorem", "exists_mem_subset_iff", ["filter"]], ["mod", "theorem", "filter_eq", ["filter"]], ["mod", "theorem", "inter_mem", ["filter"]], ["mod", "theorem", "map_supr", ["filter"]], ["mod", "theorem", "mem_comap", ["filter"]], ["mod", "theorem", "mem_infi_of_mem", ["filter"]], ["mod", "theorem", "mem_map_iff_exists_image", ["filter"]], ["mod", "theorem", "mem_of_superset", ["filter"]], ["mod", "theorem", "mem_principal_self", ["filter"]], ["mod", "theorem", "mem_top_iff_forall", ["filter"]], ["mod", "theorem", "monotone_mem", ["filter"]], ["mod", "theorem", "prod_comm", ["filter"]], ["mod", "theorem", "seq_pure", ["filter"]], ["mod", "theorem", "supr_principal", ["filter"]], ["mod", "theorem", "supr_sets_eq", ["filter"]], ["mod", "theorem", "tendsto_const_pure", ["filter"]]]}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": [["mod", "def", "rmap", ["filter"]], ["mod", "theorem", "rmap_sets", ["filter"]], ["del", "theorem", "rtendsto_iff_le_comap", ["filter"]], ["add", "theorem", "rtendsto_iff_le_rcomap", ["filter"]]]}]}, {"timestamp": 1629225008, "sha": "90fc0641", "message": "chore(algebra/associated): use more dot notation (#8556)\nI was getting annoyed that working with definitions such as `irreducible`, `prime` and `associated`, I had to write quite verbose terms like `dvd_symm_of_irreducible (irreducible_of_prime (prime_of_factor _ hp)) (irreducible_of_prime (prime_of_factor _ hq)) hdvd`, where a lot of redundancy can be eliminated with dot notation: `(prime_of_factor _ hp).irreducible.dvd_symm (prime_of_factor _ hq).irreducible hdvd`. This PR changes the spelling of many of the lemmas in `algebra/associated.lean` to make usage of dot notation easier. It also adds a few shortcut lemmas that address common patterns.\nSince this change touches a lot of files, I'll add a RFC label / [open a thread on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/RFC.3A.20adding.20dot.20notations.20.238556) to see what everyone thinks.\nRenamings:\n * `irreducible_of_prime` → `prime.irreducible`\n * `dvd_symm_of_irreducible` → `irreducible.dvd_symm`\n * `dvd_symm_iff_of_irreducible` → `irreducible.dvd_comm` (cf. `eq.symm` versus `eq_comm`)\n * `associated_mul_mul` → `associated.mul_mul`\n * `associated_pow_pow` → `associated.pow_pow`\n * `dvd_of_associated` → `associated.dvd`\n * `dvd_dvd_of_associated` → `associated.dvd_dvd`\n * `dvd_iff_dvd_of_rel_{left,right}` → `associated.dvd_iff_dvd_{left,right}`\n * `{eq,ne}_zero_iff_of_associated` → `associated.{eq,ne}_zero_iff`\n * `{irreducible,prime}_of_associated` → `associated.{irreducible,prime}`\n * `{irreducible,is_unit,prime}_iff_of_associated` → `associated.{irreducible,is_unit,prime}_iff`\n * `associated_of_{irreducible,prime}_of_dvd` → `{irreducible,prime}.associated_of_dvd`\n * `gcd_eq_of_associated_{left,right}` → `associated.gcd_eq_{left,right}`\n * `{irreducible,prime}_of_degree_eq_one_of_monic` → `monic.{irreducible,prime}_of_degree_eq_one`\n * `gcd_monoid.prime_of_irreducible` → `irreducible.prime` (since the GCD case is probably the only case we care about for this implication. And we could generalize to Schreier domains if not)\nAdditions:\n * `associated.is_unit := (associated.is_unit_iff _).mp` (to match `associated.prime` and `associated.irreducible`)\n * `associated.mul_left := associated.mul_mul (associated.refl _) _`\n * `associated.mul_right := associated.mul_mul _ (associated.refl _)`\nOther changes:\n * `associated_normalize`, `normalize_associated`, `associates.mk_normalize`, `normalize_apply`, `prime_X_sub_C`: make their final parameter explicit, since it is only inferrable when trying to apply these lemmas. This change helped to golf a few proofs from tactic mode to term mode.\n * slight golfing and style fixes", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "dvd_iff_dvd_left", ["associated"]], ["add", "theorem", "dvd_iff_dvd_right", ["associated"]], ["add", "theorem", "eq_zero_iff", ["associated"]], ["add", "theorem", "is_unit_iff", ["associated"]], ["add", "theorem", "mul_left", ["associated"]], ["add", "theorem", "mul_mul", ["associated"]], ["add", "theorem", "mul_right", ["associated"]], ["add", "theorem", "ne_zero_iff", ["associated"]], ["add", "theorem", "of_mul_left", ["associated"]], ["add", "theorem", "of_mul_right", ["associated"]], ["add", "theorem", "pow_pow", ["associated"]], ["add", "theorem", "prime_iff", ["associated"]], ["del", "theorem", "associated_mul_left_cancel", []], ["del", "theorem", "associated_mul_mul", []], ["del", "theorem", "associated_mul_right_cancel", []], ["del", "theorem", "associated_of_irreducible_of_dvd", []], ["del", "theorem", "associated_of_prime_of_dvd", []], ["del", "theorem", "associated_pow_pow", []], ["del", "theorem", "dvd_dvd_of_associated", []], ["del", "theorem", "dvd_iff_dvd_of_rel_left", []], ["del", "theorem", "dvd_iff_dvd_of_rel_right", []], ["del", "theorem", "dvd_of_associated", []], ["del", "theorem", "dvd_symm_iff_of_irreducible", []], ["del", "theorem", "dvd_symm_of_irreducible", []], ["del", "theorem", "eq_zero_iff_of_associated", []], ["add", "theorem", "associated_of_dvd", ["irreducible"]], ["add", "theorem", "dvd_comm", ["irreducible"]], ["add", "theorem", "dvd_symm", ["irreducible"]], ["del", "theorem", "irreducible_iff_of_associated", []], ["del", "theorem", "irreducible_of_associated", []], ["del", "theorem", "irreducible_of_prime", []], ["del", "theorem", "is_unit_iff_of_associated", []], ["del", "theorem", "ne_zero_iff_of_associated", []], ["add", "theorem", "associated_of_dvd", ["prime"]], ["del", "theorem", "prime_iff_of_associated", []], ["del", "theorem", "prime_of_associated", []]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "theorem", "gcd_eq_left", ["associated"]], ["add", "theorem", "gcd_eq_right", ["associated"]], ["mod", "theorem", "associated_normalize", []], ["mod", "theorem", "mk_normalize", ["associates"]], ["del", "theorem", "gcd_eq_of_associated_left", []], ["del", "theorem", "gcd_eq_of_associated_right", []], ["mod", "theorem", "normalize_apply", []], ["mod", "theorem", "normalize_associated", []]]}, {"oldPath": "src/algebra/gcd_monoid/finset.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid/multiset.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["del", "theorem", "irreducible_of_degree_eq_one_of_monic", ["polynomial"]], ["add", "theorem", "irreducible_of_degree_eq_one", ["polynomial", "monic"]], ["add", "theorem", "prime_of_degree_eq_one", ["polynomial", "monic"]], ["mod", "theorem", "prime_X_sub_C", ["polynomial"]], ["del", "theorem", "prime_of_degree_eq_one_of_monic", ["polynomial"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1629217801, "sha": "508b13ee", "message": "chore(*): flip various `subsingleton_iff`, `nontrivial_iff` lemmas and add `simp` (#8703)", "changes": [{"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["mod", "theorem", "nontrivial_iff", ["lie_submodule"]], ["mod", "theorem", "subsingleton_iff", ["lie_submodule"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "nontrivial_iff", ["subgroup"]], ["mod", "theorem", "subsingleton_iff", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["mod", "theorem", "nontrivial_iff", ["submonoid"]], ["mod", "theorem", "subsingleton_iff", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "nontrivial_iff", ["submodule"]], ["mod", "theorem", "subsingleton_iff", ["submodule"]]]}]}, {"timestamp": 1629205554, "sha": "450c2d08", "message": "refactor(algebra/algebra/basic): move restrict_scalars into more appropriate files (#8712)\nThis puts:\n* `submodule.restrict_scalars` in `submodule.lean` since the proofs are all available there, and this is consistent with how `linear_map.restrict_scalars` is placed.\n This is almost a copy-paste, but all the `R` and `S` variables are swapped to match the existing convention in that file.\n* The type alias `restrict_scalars` is now in its own file.\n The docstring at the top of the file is entirely new, but the rest is a direct copy and paste.\nThe motivation is primarily to reduce the size of `algebra/algebra/basic` a little.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "def", "alg_equiv", ["restrict_scalars"]], ["del", "def", "linear_equiv", ["restrict_scalars"]], ["del", "theorem", "linear_equiv_map_smul", ["restrict_scalars"]], ["del", "def", "restrict_scalars", []], ["del", "theorem", "restrict_scalars_smul_def", []], ["del", "def", "restrict_scalars", ["submodule"]], ["del", "theorem", "restrict_scalars_bot", ["submodule"]], ["del", "def", "restrict_scalars_equiv", ["submodule"]], ["del", "theorem", "restrict_scalars_inj", ["submodule"]], ["del", "theorem", "restrict_scalars_injective", ["submodule"]], ["del", "theorem", "restrict_scalars_mem", ["submodule"]], ["del", "theorem", "restrict_scalars_top", ["submodule"]]]}, {"oldPath": null, "newPath": "src/algebra/algebra/restrict_scalars.lean", "changes": [["add", "def", "alg_equiv", ["restrict_scalars"]], ["add", "def", "linear_equiv", ["restrict_scalars"]], ["add", "theorem", "linear_equiv_map_smul", ["restrict_scalars"]], ["add", "def", "restrict_scalars", []], ["add", "theorem", "restrict_scalars_smul_def", []]]}, {"oldPath": "src/algebra/lie/base_change.lean", "newPath": "src/algebra/lie/base_change.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "def", "restrict_scalars", ["submodule"]], ["add", "def", "restrict_scalars_equiv", ["submodule"]], ["add", "theorem", "restrict_scalars_inj", ["submodule"]], ["add", "theorem", "restrict_scalars_injective", ["submodule"]], ["add", "theorem", "restrict_scalars_mem", ["submodule"]]]}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "theorem", "restrict_scalars_bot", ["submodule"]], ["add", "theorem", "restrict_scalars_top", ["submodule"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1629202882, "sha": "0c145d82", "message": "feat(measure_theory/measure/measure_space): add formula for `(map f μ).to_outer_measure` (#8714)", "changes": [{"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["add", "theorem", "map_to_outer_measure", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": [["add", "theorem", "trim_eq_trim_iff", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_le_trim_iff", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1629197369, "sha": "4df3fb9e", "message": "chore(topology/maps): add tendsto_nhds_iff lemmas (#8693)\nThis adds lemmas of the form `something.tendsto_nhds_iff` to ease use.\nI also had to get lemmas out of a section because `α` was duplicated and that caused typechecking problems.", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "tendsto_nhds_iff", ["closed_embedding"]], ["add", "theorem", "tendsto_nhds_iff", ["open_embedding"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["mod", "theorem", "closed_embedding", ["isometry"]], ["add", "theorem", "tendsto_nhds_iff", ["isometry"]], ["mod", "theorem", "uniform_embedding", ["isometry"]]]}]}, {"timestamp": 1629193341, "sha": "edb0ba42", "message": "chore(measure_theory/measure/hausdorff): golf (#8706)\n* add a `mk_metric` version of `hausdorff_measure_le`, add `finset.sum` versions for both `mk_metric` and `hausdorff_measure`;\n* slightly golf the proof.", "changes": [{"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["del", "theorem", "hausdorff_measure_le", ["measure_theory", "measure"]], ["add", "theorem", "hausdorff_measure_le_liminf_sum", ["measure_theory", "measure"]], ["add", "theorem", "hausdorff_measure_le_liminf_tsum", ["measure_theory", "measure"]], ["add", "theorem", "mk_metric_le_liminf_sum", ["measure_theory", "measure"]], ["add", "theorem", "mk_metric_le_liminf_tsum", ["measure_theory", "measure"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "diam_Union_mem_option", ["emetric"]]]}]}, {"timestamp": 1629189486, "sha": "0591c276", "message": "feat(ring_theory/fractional_ideal): lemmas on `span_singleton _ x * I` (#8624)\nUseful in proving the basic properties of the ideal class group. See also #8622 which proves similar things for integral ideals.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "eq_span_singleton_mul", ["fractional_ideal"]], ["add", "theorem", "le_span_singleton_mul_iff", ["fractional_ideal"]], ["add", "theorem", "mk'_mul_coe_ideal_eq_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "span_singleton_mul_coe_ideal_eq_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "span_singleton_mul_le_iff", ["fractional_ideal"]]]}]}, {"timestamp": 1629165503, "sha": "b6f1214f", "message": "chore(scripts): update nolints.txt (#8715)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1629140194, "sha": "1263906f", "message": "chore(data/nat/pairing): add `pp_nodot`, fix some non-finalizing `simp`s (#8705)", "changes": [{"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["mod", "def", "mkpair", ["nat"]], ["mod", "def", "unpair", ["nat"]]]}]}, {"timestamp": 1629140193, "sha": "40d2602e", "message": "chore(analysis/calculus/deriv): weaker assumptions for `deriv_mul_const` (#8704)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_add_const'", []], ["add", "theorem", "deriv_const_add'", []], ["add", "theorem", "deriv_const_mul'", []], ["mod", "theorem", "deriv_const_mul", []], ["mod", "theorem", "deriv_div_const", []], ["mod", "theorem", "deriv_id''", []], ["mod", "theorem", "deriv_id'", []], ["add", "theorem", "deriv_mul_const'", []], ["mod", "theorem", "deriv_mul_const", []]]}]}, {"timestamp": 1629140192, "sha": "d5ce7e56", "message": "chore(data/vector): rename vector2 (#8697)\nThis file was named this way to avoid clashing with `data/vector.lean` in core.\nThis renames it to `data/vector/basic.lean` which avoids the problem.\nThere was never a `vector2` definition, this was only ever a filename.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/bitvec/core.lean", "newPath": "src/data/bitvec/core.lean", "changes": []}, {"oldPath": "src/data/sym/basic.lean", "newPath": "src/data/sym/basic.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector/basic.lean", "changes": []}]}, {"timestamp": 1629130766, "sha": "253712e1", "message": "feat(ring_theory/ideal): lemmas on `ideal.span {x} * I` (#8622)\nOriginally created for being used in the context of the ideal class group, but didn't end up being used. Hopefully they are still useful for others.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "eq_span_singleton_mul", ["ideal"]], ["add", "theorem", "le_span_singleton_mul_iff", ["ideal"]], ["add", "theorem", "mem_mul_span_singleton", ["ideal"]], ["add", "theorem", "mem_span_singleton_mul", ["ideal"]], ["add", "theorem", "span_singleton_mul_eq_span_singleton_mul", ["ideal"]], ["add", "theorem", "span_singleton_mul_le_iff", ["ideal"]], ["add", "theorem", "span_singleton_mul_le_span_singleton_mul", ["ideal"]]]}]}, {"timestamp": 1629130765, "sha": "65b0c582", "message": "feat(ring_theory/localization): some lemmas on `coe_submodule` (#8621)\nA small assortment of results on `is_localization.coe_submodule`, needed for elementary facts about the ideal class group.", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coe_submodule_injective", ["is_fraction_ring"]], ["add", "theorem", "coe_submodule_is_principal", ["is_fraction_ring"]], ["add", "theorem", "coe_submodule_injective", ["is_localization"]], ["add", "theorem", "coe_submodule_is_principal", ["is_localization"]], ["add", "theorem", "coe_submodule_span", ["is_localization"]], ["add", "theorem", "coe_submodule_span_singleton", ["is_localization"]]]}]}, {"timestamp": 1629130764, "sha": "80b699bc", "message": "chore(ring_theory): generalize `non_zero_divisors` lemmas to `monoid_with_zero` (#8607)\nNone of the results about `non_zero_divisors` needed a ring structure, just a `monoid_with_zero`. So the generalization is obvious.\nShall we move this file to the `algebra` namespace sometime soon?", "changes": [{"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["mod", "theorem", "eq_zero_of_ne_zero_of_mul_left_eq_zero", []], ["mod", "theorem", "eq_zero_of_ne_zero_of_mul_right_eq_zero", []], ["del", "theorem", "le_non_zero_divisors_of_domain", []], ["add", "theorem", "le_non_zero_divisors_of_no_zero_divisors", []], ["del", "theorem", "map_le_non_zero_divisors_of_injective", []], ["del", "theorem", "map_mem_non_zero_divisors", []], ["del", "theorem", "map_ne_zero_of_mem_non_zero_divisors", []], ["mod", "theorem", "mem_non_zero_divisors_iff_ne_zero", []], ["add", "theorem", "map_le_non_zero_divisors_of_injective", ["monoid_with_zero_hom"]], ["add", "theorem", "map_mem_non_zero_divisors", ["monoid_with_zero_hom"]], ["add", "theorem", "map_ne_zero_of_mem_non_zero_divisors", ["monoid_with_zero_hom"]], ["mod", "theorem", "mul_mem_non_zero_divisors", []], ["del", "theorem", "powers_le_non_zero_divisors_of_domain", []], ["add", "theorem", "powers_le_non_zero_divisors_of_no_zero_divisors", []], ["mod", "theorem", "prod_zero_iff_exists_zero", []], ["add", "theorem", "map_le_non_zero_divisors_of_injective", ["ring_hom"]], ["add", "theorem", "map_mem_non_zero_divisors", ["ring_hom"]], ["add", "theorem", "map_ne_zero_of_mem_non_zero_divisors", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}]}, {"timestamp": 1629130763, "sha": "106bd3be", "message": "feat(group_theory/nilpotent): add nilpotent groups (#8538)\nWe make basic definitions of nilpotent groups and prove the standard theorem that a group is nilpotent iff the upper resp. lower central series reaches top resp. bot.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "forall_coe", ["quotient_group"]]]}, {"oldPath": null, "newPath": "src/group_theory/nilpotent.lean", "changes": [["add", "theorem", "ascending_central_series_le_upper", []], ["add", "theorem", "descending_central_series_ge_lower", []], ["add", "def", "is_ascending_central_series", []], ["add", "def", "is_descending_central_series", []], ["add", "def", "lower_central_series", []], ["add", "theorem", "lower_central_series_is_descending_central_series", []], ["add", "theorem", "mem_upper_central_series_step", []], ["add", "theorem", "mem_upper_central_series_succ_iff", []], ["add", "theorem", "nilpotent_iff_finite_ascending_central_series", []], ["add", "theorem", "nilpotent_iff_finite_descending_central_series", []], ["add", "theorem", "nilpotent_iff_lower_central_series", []], ["add", "def", "upper_central_series", []], ["add", "def", "upper_central_series_aux", []], ["add", "theorem", "upper_central_series_is_ascending_central_series", []], ["add", "def", "upper_central_series_step", []], ["add", "theorem", "upper_central_series_step_eq_comap_center", []], ["add", "theorem", "upper_central_series_zero_def", []]]}]}, {"timestamp": 1629130762, "sha": "a55084f5", "message": "feat(data/fintype/basic): card_sum, card_subtype_or (#8490)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_subtype", ["fintype"]], ["add", "theorem", "card_subtype_or", ["fintype"]], ["add", "theorem", "card_subtype_or_disjoint", ["fintype"]], ["add", "theorem", "card_sum", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["del", "theorem", "card_sum", ["fintype"]]]}]}, {"timestamp": 1629130761, "sha": "f8241b74", "message": "feat(algebra/big_operators/basic): prod_subsingleton (#8423)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_unique_nonempty", ["finset"]], ["add", "theorem", "prod_subsingleton", ["fintype"]], ["add", "theorem", "prod_unique", ["fintype"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "unique_has_one", []]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["del", "theorem", "prod_unique", ["fintype"]]]}]}, {"timestamp": 1629130760, "sha": "e1953471", "message": "feat(finsupp/basic): lemmas about emb_domain (#7883)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "add_monoid_hom", ["finsupp", "emb_domain"]], ["add", "theorem", "emb_domain_add", ["finsupp"]], ["add", "theorem", "emb_domain_single", ["finsupp"]]]}]}, {"timestamp": 1629127090, "sha": "53d97e1a", "message": "puzzle(archive/oxford_invariants): Oxford Invariants Puzzle Challenges, Summer 2021, Week 3, Problem 1 (#8656)\nThis is a formalisation of a problem posed by the Oxford Invariants.\nCo-authored by @b-mehta", "changes": [{"oldPath": null, "newPath": "archive/oxford_invariants/2021summer/week3_p1.lean", "changes": [["add", "theorem", "week3_p1", []]]}]}, {"timestamp": 1629127088, "sha": "55b2e864", "message": "feat(analysis/normed_space): normed group hom completion (#8499)\nFrom LTE", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "mem_range_self", ["normed_group_hom"]], ["add", "theorem", "exists_pos", ["normed_group_hom", "surjective_on_with"]], ["add", "theorem", "mono", ["normed_group_hom", "surjective_on_with"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/normed_group_hom_completion.lean", "changes": [["add", "theorem", "dense_range_to_compl", ["normed_group"]], ["add", "theorem", "norm_to_compl", ["normed_group"]], ["add", "def", "to_compl", ["normed_group"]], ["add", "def", "completion", ["normed_group_hom"]], ["add", "theorem", "completion_add", ["normed_group_hom"]], ["add", "theorem", "completion_coe", ["normed_group_hom"]], ["add", "theorem", "completion_coe_to_fun", ["normed_group_hom"]], ["add", "theorem", "completion_comp", ["normed_group_hom"]], ["add", "theorem", "completion_def", ["normed_group_hom"]], ["add", "theorem", "completion_id", ["normed_group_hom"]], ["add", "theorem", "completion_neg", ["normed_group_hom"]], ["add", "theorem", "completion_sub", ["normed_group_hom"]], ["add", "theorem", "completion_to_compl", ["normed_group_hom"]], ["add", "theorem", "ker_completion", ["normed_group_hom"]], ["add", "theorem", "ker_le_ker_completion", ["normed_group_hom"]], ["add", "theorem", "norm_completion", ["normed_group_hom"]], ["add", "theorem", "zero_completion", ["normed_group_hom"]], ["add", "def", "normed_group_hom_completion_hom", []]]}]}, {"timestamp": 1629127087, "sha": "217308c9", "message": "feat(analysis): `x^y` is smooth as a function of `(x, y)` (#8262)", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": [["add", "theorem", "has_deriv_at_of_has_deriv_at_of_ne'", []]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "has_strict_fderiv_at_cpow'", ["complex"]], ["add", "theorem", "rpow", ["continuous"]], ["add", "theorem", "rpow_const", ["continuous"]], ["add", "theorem", "rpow", ["continuous_at"]], ["add", "theorem", "rpow_const", ["continuous_at"]], ["add", "theorem", "rpow", ["continuous_on"]], ["add", "theorem", "rpow_const", ["continuous_on"]], ["add", "theorem", "rpow", ["continuous_within_at"]], ["add", "theorem", "rpow_const", ["continuous_within_at"]], ["del", "theorem", "deriv_rpow", []], ["add", "theorem", "deriv_rpow_const", []], ["del", "theorem", "deriv_rpow_of_one_le", []], ["del", "theorem", "deriv_within_rpow", []], ["add", "theorem", "deriv_within_rpow_const", []], ["del", "theorem", "deriv_within_rpow_of_one_le", []], ["mod", "theorem", "rpow", ["differentiable"]], ["add", "theorem", "rpow_const", ["differentiable"]], ["del", "theorem", "rpow_of_one_le", ["differentiable"]], ["mod", "theorem", "rpow", ["differentiable_at"]], ["add", "theorem", "rpow_const", ["differentiable_at"]], ["del", "theorem", "rpow_of_one_le", ["differentiable_at"]], ["mod", "theorem", "rpow", ["differentiable_on"]], ["add", "theorem", "rpow_const", ["differentiable_on"]], ["del", "theorem", "rpow_of_one_le", ["differentiable_on"]], ["mod", "theorem", "rpow", ["differentiable_within_at"]], ["add", "theorem", "rpow_const", ["differentiable_within_at"]], ["del", "theorem", "rpow_of_one_le", ["differentiable_within_at"]], ["add", "theorem", "rpow", ["filter", "tendsto"]], ["add", "theorem", "rpow_const", ["filter", "tendsto"]], ["mod", "theorem", "rpow", ["has_deriv_at"]], ["add", "theorem", "rpow_const", ["has_deriv_at"]], ["del", "theorem", "rpow_of_one_le", ["has_deriv_at"]], ["mod", "theorem", "rpow", ["has_deriv_within_at"]], ["add", "theorem", "rpow_const", ["has_deriv_within_at"]], ["del", "theorem", "rpow_of_one_le", ["has_deriv_within_at"]], ["add", "theorem", "const_rpow", ["has_fderiv_at"]], ["add", "theorem", "rpow", ["has_fderiv_at"]], ["add", "theorem", "rpow_const", ["has_fderiv_at"]], ["add", "theorem", "const_rpow", ["has_fderiv_within_at"]], ["add", "theorem", "rpow", ["has_fderiv_within_at"]], ["add", "theorem", "rpow_const", ["has_fderiv_within_at"]], ["add", "theorem", "rpow", ["has_strict_deriv_at"]], ["add", "theorem", "const_rpow", ["has_strict_fderiv_at"]], ["add", "theorem", "rpow", ["has_strict_fderiv_at"]], ["add", "theorem", "rpow_const", ["has_strict_fderiv_at"]], ["add", "theorem", "abs_rpow_le_exp_log_mul", ["real"]], ["mod", "theorem", "continuous_at_rpow", ["real"]], ["add", "theorem", "continuous_at_rpow_of_ne", ["real"]], ["del", "theorem", "continuous_at_rpow_of_ne_zero", ["real"]], ["mod", "theorem", "continuous_at_rpow_of_pos", ["real"]], ["del", "theorem", "continuous_rpow", ["real"]], ["del", "theorem", "continuous_rpow_aux1", ["real"]], ["del", "theorem", "continuous_rpow_aux2", ["real"]], ["del", "theorem", "continuous_rpow_aux3", ["real"]], ["del", "theorem", "continuous_rpow_of_ne_zero", ["real"]], ["del", "theorem", "continuous_rpow_of_pos", ["real"]], ["add", "theorem", "deriv_rpow_const'", ["real"]], ["add", "theorem", "deriv_rpow_const", ["real"]], ["add", "theorem", "differentiable_at_rpow_of_ne", ["real"]], ["add", "theorem", "differentiable_rpow_const", ["real"]], ["del", "theorem", "has_deriv_at_rpow", ["real"]], ["add", "theorem", "has_deriv_at_rpow_const", ["real"]], ["del", "theorem", "has_deriv_at_rpow_of_neg", ["real"]], ["del", "theorem", "has_deriv_at_rpow_of_one_le", ["real"]], ["del", "theorem", "has_deriv_at_rpow_of_pos", ["real"]], ["del", "theorem", "has_deriv_at_rpow_zero_of_one_le", ["real"]], ["add", "theorem", "has_strict_deriv_at_const_rpow", ["real"]], ["add", "theorem", "has_strict_deriv_at_const_rpow_of_neg", ["real"]], ["add", "theorem", "has_strict_deriv_at_rpow_const", ["real"]], ["add", "theorem", "has_strict_deriv_at_rpow_const_of_ne", ["real"]], ["add", "theorem", "has_strict_fderiv_at_rpow_of_neg", ["real"]], ["add", "theorem", "has_strict_fderiv_at_rpow_of_pos", ["real"]], ["add", "theorem", "rpow_add_int", ["real"]], ["add", "theorem", "rpow_add_nat", ["real"]], ["add", "theorem", "rpow_add_one", ["real"]], ["add", "theorem", "rpow_sub_int", ["real"]], ["add", "theorem", "rpow_sub_nat", ["real"]], ["add", "theorem", "rpow_sub_one", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_const", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_const_of_le", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_const_of_ne", ["real"]], ["add", "theorem", "times_cont_diff_at_rpow_of_ne", ["real"]], ["add", "theorem", "times_cont_diff_rpow_const_of_le", ["real"]], ["add", "theorem", "rpow", ["times_cont_diff"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff"]], ["add", "theorem", "rpow", ["times_cont_diff_at"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff_at"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff_at"]], ["add", "theorem", "rpow", ["times_cont_diff_on"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff_on"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff_on"]], ["add", "theorem", "rpow", ["times_cont_diff_within_at"]], ["add", "theorem", "rpow_const_of_le", ["times_cont_diff_within_at"]], ["add", "theorem", "rpow_const_of_ne", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1629119567, "sha": "d6aae6c6", "message": "feat(tactic/abel): check for defeq of atoms instead of syntactic eq (#8628)\nI had a call to `abel` break after adding a new typeclass instance, and it turns out this was because two terms became defeq-but-not-syntactically-eq. This PR modifies the equality check in `abel` to follow the implementation in e.g. `ring`.\nBy default, `abel` now unifies atoms up to `reducible`, which should not have a huge impact on build times. Use `abel!` for trying to unify up to `semireducible`.\nI also renamed the `tactic.abel.cache` to `tactic.abel.context`, since we store more things in there than a few elaborated terms. To appease the docstring linter, I added docs for all of the renamed `def`s.", "changes": [{"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "test/abel.lean", "newPath": "test/abel.lean", "changes": [["add", "def", "id'", []]]}]}, {"timestamp": 1629114951, "sha": "deedf250", "message": "feat(algebra/lie/semisimple): adjoint action is injective for semisimple Lie algebras (#8698)", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": [["add", "theorem", "ad_ker_eq_self_module_ker", ["lie_algebra"]], ["del", "theorem", "center_eq_adjoint_kernel", ["lie_algebra"]], ["add", "theorem", "self_module_ker_eq_center", ["lie_algebra"]]]}, {"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": [["add", "theorem", "ad_ker_eq_bot_of_semisimple", ["lie_algebra"]]]}]}, {"timestamp": 1629103156, "sha": "c416a486", "message": "feat(algebra/gcd_monoid): move the `gcd_monoid nat` instance (#7180)\nmoves `gcd_monoid nat` instance, removes corresponding todos.\nremoves:\n* `nat.normalize_eq` -- use `normalize_eq` instead\nrenames:\n* `nat.gcd_eq_gcd` to `gcd_eq_nat_gcd`\n* `nat.lcm_eq_lcm` to `lcm_eq_nat_lcm`", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["del", "theorem", "gcd_eq_gcd", ["nat"]], ["del", "theorem", "lcm_eq_lcm", ["nat"]], ["del", "theorem", "normalize_eq", ["nat"]]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "gcd_eq_nat_gcd", []], ["add", "theorem", "lcm_eq_nat_lcm", []]]}]}, {"timestamp": 1629101199, "sha": "2b435875", "message": "feat(measure_theory/hausdorff_measure): Hausdorff measure and volume coincide in pi types (#8554)\nco-authored by Yury Kudryashov", "changes": [{"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": [["add", "theorem", "hausdorff_measure_pi_real", ["measure_theory"]], ["add", "theorem", "hausdorff_measure_le", ["measure_theory", "measure"]], ["add", "theorem", "le_hausdorff_measure", ["measure_theory", "measure"]], ["add", "theorem", "le_mk_metric", ["measure_theory", "measure"]], ["add", "theorem", "le_mk_metric", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1629094776, "sha": "a983f241", "message": "fix(*): fix universe levels (#8677)\nThe universe levels in the following declarations have been fixed . \nThis means that there was an argument of the form `Type (max u v)` or `Sort (max u v)`, which could be generalized to `Type u` or `Sort u`. In a few cases, I made explicit that there is a universe restriction (sometimes `max u v` is legitimately used as an arbitrary universe level higher than `u`)\nIn some files I also cleaned up some declarations around these.\n```\nalgebraic_geometry.Spec.SheafedSpace_map\nalgebraic_geometry.Spec.to_SheafedSpace\nalgebraic_geometry.Spec.to_PresheafedSpace\ncategory_theory.discrete_is_connected_equiv_punit\nwriter_t.uliftable'\nwriter_t.uliftable\nequiv.prod_equiv_of_equiv_nat\nfree_algebra.dim_eq\nlinear_equiv.alg_conj\nmodule.flat\ncardinal.add_def\nslim_check.injective_function.mk\ntopological_add_group.of_nhds_zero'\ntopological_group.of_nhds_one'\ntopological_group.of_comm_of_nhds_one\ntopological_add_group.of_comm_of_nhds_zero\nhas_continuous_mul.of_nhds_one\nhas_continuous_add.of_nhds_zero\nhas_continuous_add_of_comm_of_nhds_zero\nhas_continuous_mul_of_comm_of_nhds_one\nuniform_space_of_compact_t2\nAddCommGroup.cokernel_iso_quotient\nalgebraic_geometry.Scheme\nalgebraic_geometry.Scheme.Spec_obj\nsimplex_category.skeletal_functor\ncategory_theory.Type_to_Cat.full\nCommMon_.equiv_lax_braided_functor_punit.lax_braided_to_CommMon\nCommMon_.equiv_lax_braided_functor_punit.unit_iso\nMon_.equiv_lax_monoidal_functor_punit.lax_monoidal_to_Mon\nMon_.equiv_lax_monoidal_functor_punit.unit_iso\nuliftable.down_map\nweak_dual.has_continuous_smul\nstone_cech_equivalence\nCompactum_to_CompHaus.full\nTopCommRing.category_theory.forget₂.category_theory.reflects_isomorphisms\n```", "changes": [{"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["mod", "def", "SheafedSpace_map", ["algebraic_geometry", "Spec"]]]}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["mod", "theorem", "epi_iff_surjective", ["simplex_category"]], ["mod", "theorem", "ext", ["simplex_category"]], ["mod", "def", "is_skeleton_of", ["simplex_category"]], ["mod", "def", "len", ["simplex_category"]], ["mod", "theorem", "len_le_of_epi", ["simplex_category"]], ["mod", "theorem", "len_le_of_mono", ["simplex_category"]], ["mod", "def", "mk", ["simplex_category"]], ["mod", "theorem", "mk_len", ["simplex_category"]], ["mod", "theorem", "mono_iff_injective", ["simplex_category"]], ["mod", "theorem", "skeletal", ["simplex_category"]], ["mod", "def", "skeletal_functor", ["simplex_category"]], ["mod", "def", "inclusion", ["simplex_category", "truncated"]], ["mod", "def", "truncated", ["simplex_category"]]]}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["mod", "def", "discrete_is_connected_equiv_punit", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/CommMon_.lean", "newPath": "src/category_theory/monoidal/CommMon_.lean", "changes": [["mod", "def", "CommMon_to_lax_braided", ["CommMon_", "equiv_lax_braided_functor_punit"]], ["mod", "def", "lax_braided_to_CommMon", ["CommMon_", "equiv_lax_braided_functor_punit"]], ["mod", "def", "equiv_lax_braided_functor_punit", ["CommMon_"]]]}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": [["mod", "def", "Mon_to_lax_monoidal", ["Mon_", "equiv_lax_monoidal_functor_punit"]], ["mod", "def", "lax_monoidal_to_Mon", ["Mon_", "equiv_lax_monoidal_functor_punit"]], ["mod", "def", "equiv_lax_monoidal_functor_punit", ["Mon_"]]]}, {"oldPath": "src/control/uliftable.lean", "newPath": "src/control/uliftable.lean", "changes": [["mod", "def", "uliftable'", ["cont_t"]], ["mod", "def", "uliftable'", ["reader_t"]], ["mod", "def", "uliftable'", ["state_t"]], ["mod", "def", "down_map", ["uliftable"]], ["mod", "def", "uliftable'", ["writer_t"]]]}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": [["mod", "def", "prod_equiv_of_equiv_nat", ["equiv"]]]}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": [["mod", "theorem", "mem_pi", ["fin_enum"]], ["mod", "def", "cons", ["fin_enum", "pi"]], ["mod", "def", "enum", ["fin_enum", "pi"]], ["mod", "theorem", "mem_enum", ["fin_enum", "pi"]], ["mod", "def", "tail", ["fin_enum", "pi"]], ["mod", "def", "pi", ["fin_enum"]]]}, {"oldPath": "src/linear_algebra/free_algebra.lean", "newPath": "src/linear_algebra/free_algebra.lean", "changes": [["mod", "theorem", "dim_eq", ["free_algebra"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["mod", "def", "alg_equiv_matrix'", []], ["mod", "def", "alg_equiv_matrix", []], ["mod", "def", "alg_conj", ["linear_equiv"]]]}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/flat.lean", "newPath": "src/ring_theory/flat.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "add_def", ["cardinal"]]]}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": [["mod", "def", "apply", ["slim_check", "injective_function"]], ["mod", "theorem", "apply_id_injective", ["slim_check", "injective_function"]], ["mod", "theorem", "apply_id_mem_iff", ["slim_check", "injective_function"]], ["mod", "def", "apply_id", ["slim_check", "injective_function", "list"]], ["mod", "theorem", "apply_id_cons", ["slim_check", "injective_function", "list"]], ["mod", "theorem", "apply_id_eq_self", ["slim_check", "injective_function", "list"]], ["mod", "theorem", "apply_id_zip_eq", ["slim_check", "injective_function", "list"]], ["mod", "def", "slice", ["slim_check", "injective_function", "perm"]], ["mod", "def", "apply", ["slim_check", "total_function"]], ["mod", "def", "to_finmap'", ["slim_check", "total_function", "list"]], ["mod", "def", "repr_aux", ["slim_check", "total_function"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "of_comm_of_nhds_one", ["topological_group"]], ["mod", "theorem", "of_nhds_one'", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["mod", "theorem", "of_nhds_one", ["has_continuous_mul"]], ["mod", "theorem", "has_continuous_mul_of_comm_of_nhds_one", []]]}, {"oldPath": "src/topology/algebra/weak_dual_topology.lean", "newPath": "src/topology/algebra/weak_dual_topology.lean", "changes": [["mod", "theorem", "continuous_of_continuous_eval", ["weak_dual"]], ["mod", "theorem", "tendsto_iff_forall_eval_tendsto", ["weak_dual"]]]}, {"oldPath": "src/topology/category/CompHaus/default.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": [["mod", "theorem", "is_closed_map", ["CompHaus"]], ["mod", "theorem", "is_iso_of_bijective", ["CompHaus"]], ["mod", "def", "iso_of_bijective", ["CompHaus"]]]}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": [["mod", "def", "full", ["Compactum_to_CompHaus"]]]}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": [["mod", "def", "uniform_space_of_compact_t2", []], ["mod", "theorem", "unique_uniformity_of_compact_t2", []]]}]}, {"timestamp": 1629092576, "sha": "69785fe0", "message": "chore(scripts): update nolints.txt (#8696)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1629085963, "sha": "b97344c0", "message": "chore(algebra/module): Swap the naming of `smul_(left|right)_injective` to match the naming guide (#8659)\nThe naming conventions say:\n> An injectivity lemma that uses \"left\" or \"right\" should refer to the argument that \"changes\". For example, a lemma with the statement `a - b = a - c ↔ b = c` could be called `sub_right_inj`.\nThis corrects the name of `function.injective (λ c : R, c • x)` to be `smul_left_injective` instead of the previous `smul_right_injective`, and vice versa for `function.injective (λ x : M, r • x)`.\nThis also brings it in line with `mul_left_injective` and `mul_right_injective`.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "smul_left_injective", []], ["mod", "theorem", "smul_right_injective", []]]}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": []}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": [["del", "theorem", "smul_injective", ["subgroup"]], ["add", "theorem", "smul_left_injective", ["subgroup"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1629085962, "sha": "2e9029fe", "message": "feat(tactic/ext): add tracing option (#8633)\nAdds an option to trace all lemmas that `ext` tries to apply, along with the time each attempted application takes. This was useful in debugging a slow `ext` call.", "changes": [{"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}]}, {"timestamp": 1629080404, "sha": "59954c19", "message": "docs(data/pfun): add module docstring and def docstrings (#8629)", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["mod", "def", "core", ["pfun"]], ["mod", "theorem", "core_def", ["pfun"]], ["mod", "theorem", "core_res", ["pfun"]], ["mod", "theorem", "core_restrict", ["pfun"]], ["mod", "theorem", "dom_iff_graph", ["pfun"]], ["mod", "def", "image", ["pfun"]], ["mod", "theorem", "image_def", ["pfun"]], ["mod", "theorem", "mem_core", ["pfun"]], ["mod", "theorem", "mem_image", ["pfun"]], ["mod", "theorem", "mem_preimage", ["pfun"]], ["mod", "def", "preimage", ["pfun"]], ["mod", "theorem", "preimage_def", ["pfun"]], ["mod", "theorem", "pure_defined", ["pfun"]], ["mod", "def", "ran", ["pfun"]], ["mod", "def", "pfun", []]]}]}, {"timestamp": 1629080403, "sha": "46b3fae0", "message": "feat(topology/category/*/projective): CompHaus and Profinite have enough projectives (#8613)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus/default.lean", "changes": [["add", "theorem", "epi_iff_surjective", ["CompHaus"]], ["add", "theorem", "mono_iff_injective", ["CompHaus"]]]}, {"oldPath": null, "newPath": "src/topology/category/CompHaus/projective.lean", "changes": [["add", "def", "projective_presentation", ["CompHaus"]]]}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": [["add", "theorem", "epi_iff_surjective", ["Profinite"]], ["add", "theorem", "mono_iff_injective", ["Profinite"]]]}, {"oldPath": null, "newPath": "src/topology/category/Profinite/projective.lean", "changes": [["add", "def", "projective_presentation", ["Profinite"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "compact_space", ["homeomorph"]], ["add", "theorem", "t2_space", ["homeomorph"]]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}]}, {"timestamp": 1629080402, "sha": "4bf51778", "message": "feat(algebraic_geometry/EllipticCurve): add working definition of elliptic curve (#8558)\nThe word \"elliptic curve\" is used in the literature in many different ways. Differential geometers use it to mean a 1-dimensional complex torus. Algebraic geometers nowadays use it to mean some morphism of schemes with a section and some axioms. However classically number theorists used to use a low-brow definition of the form y^2=cubic in x; this works great when the base scheme is, for example, Spec of the rationals. \nIt occurred to me recently that the standard minor modification of the low-brow definition works for all commutative rings with trivial Picard group, and because this covers a lot of commutative rings (e.g. all fields, all PIDs, all integral domains with trivial class group) it would not be unreasonable to have it as a working definition in mathlib. The advantage of this definition is that people will be able to begin writing algorithms which compute various invariants of the curve, for example we can begin to formally verify the database of elliptic curves at LMFDB.org .", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_geometry/EllipticCurve.lean", "changes": [["add", "def", "disc", ["EllipticCurve"]], ["add", "def", "disc_aux", ["EllipticCurve"]], ["add", "theorem", "disc_is_unit", ["EllipticCurve"]], ["add", "def", "j", ["EllipticCurve"]], ["add", "structure", "EllipticCurve", []]]}]}, {"timestamp": 1629076339, "sha": "ec68c7e4", "message": "feat(set_theory/cardinal): lift_sup (#8675)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "lift_sup", ["cardinal"]], ["add", "theorem", "lift_sup_le", ["cardinal"]], ["add", "theorem", "lift_sup_le_iff", ["cardinal"]], ["add", "theorem", "lift_sup_le_lift_sup", ["cardinal"]]]}]}, {"timestamp": 1629073481, "sha": "462359db", "message": "feat(measure): prove Haar measure = Lebesgue measure on R (#8639)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/measure/haar_lebesgue.lean", "changes": [["add", "theorem", "haar_measure_eq_lebesgue_measure", ["measure_theory"]], ["add", "theorem", "is_add_left_invariant_real_volume", ["measure_theory"]], ["add", "def", "Icc01", ["topological_space", "positive_compacts"]]]}]}, {"timestamp": 1629069443, "sha": "8e508633", "message": "chore(analysis/normed_space/dual): golf some proofs (#8694)", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["mod", "theorem", "double_dual_bound", ["normed_space"]], ["mod", "theorem", "dual_def", ["normed_space"]], ["del", "def", "inclusion_in_double_dual'", ["normed_space"]], ["add", "theorem", "inclusion_in_double_dual_norm_eq", ["normed_space"]], ["add", "theorem", "inclusion_in_double_dual_norm_le", ["normed_space"]]]}]}, {"timestamp": 1629062662, "sha": "8ac0242f", "message": "feat(topology/algebra/ring): pi instances (#8686)\nAdd instances `pi.topological_ring` and `pi.topological_semiring`.", "changes": [{"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1629062661, "sha": "9af80f36", "message": "feat(algebra/opposites): more scalar action instances (#8672)\nThis adds weaker and stronger versions of `monoid.to_opposite_mul_action` for `has_mul`, `monoid_with_zero`, and `semiring`. It also adds an `smul_comm_class` instance.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["mod", "theorem", "op_smul_eq_mul", ["opposite"]]]}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}]}, {"timestamp": 1629062660, "sha": "fc7da8d9", "message": "chore(data/vector3): extract to a new file (#8669)\nThis is simply a file move, with no other changes other than a minimal docstring.\nIn it's old location this was very hard to find.", "changes": [{"oldPath": null, "newPath": "src/data/vector3.lean", "changes": [["add", "theorem", "exists_vector_succ", []], ["add", "theorem", "exists_vector_zero", []], ["add", "def", "append", ["vector3"]], ["add", "theorem", "append_add", ["vector3"]], ["add", "theorem", "append_cons", ["vector3"]], ["add", "theorem", "append_insert", ["vector3"]], ["add", "theorem", "append_left", ["vector3"]], ["add", "theorem", "append_nil", ["vector3"]], ["add", "def", "cons", ["vector3"]], ["add", "def", "cons_elim", ["vector3"]], ["add", "theorem", "cons_elim_cons", ["vector3"]], ["add", "theorem", "cons_fs", ["vector3"]], ["add", "theorem", "cons_fz", ["vector3"]], ["add", "theorem", "cons_head_tail", ["vector3"]], ["add", "theorem", "eq_nil", ["vector3"]], ["add", "def", "head", ["vector3"]], ["add", "def", "insert", ["vector3"]], ["add", "theorem", "insert_fs", ["vector3"]], ["add", "theorem", "insert_fz", ["vector3"]], ["add", "def", "nil", ["vector3"]], ["add", "def", "nil_elim", ["vector3"]], ["add", "def", "nth", ["vector3"]], ["add", "def", "of_fn", ["vector3"]], ["add", "theorem", "rec_on_cons", ["vector3"]], ["add", "theorem", "rec_on_nil", ["vector3"]], ["add", "def", "tail", ["vector3"]], ["add", "def", "vector3", []], ["add", "def", "vector_all", []], ["add", "theorem", "vector_all_iff_forall", []], ["add", "theorem", "imp", ["vector_allp"]], ["add", "def", "vector_allp", []], ["add", "theorem", "vector_allp_cons", []], ["add", "theorem", "vector_allp_iff_forall", []], ["add", "theorem", "vector_allp_nil", []], ["add", "theorem", "vector_allp_singleton", []], ["add", "def", "vector_ex", []], ["add", "theorem", "vector_ex_iff_exists", []]]}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": [["del", "theorem", "exists_vector_succ", []], ["del", "theorem", "exists_vector_zero", []], ["del", "def", "append", ["vector3"]], ["del", "theorem", "append_add", ["vector3"]], ["del", "theorem", "append_cons", ["vector3"]], ["del", "theorem", "append_insert", ["vector3"]], ["del", "theorem", "append_left", ["vector3"]], ["del", "theorem", "append_nil", ["vector3"]], ["del", "def", "cons", ["vector3"]], ["del", "def", "cons_elim", ["vector3"]], ["del", "theorem", "cons_elim_cons", ["vector3"]], ["del", "theorem", "cons_fs", ["vector3"]], ["del", "theorem", "cons_fz", ["vector3"]], ["del", "theorem", "cons_head_tail", ["vector3"]], ["del", "theorem", "eq_nil", ["vector3"]], ["del", "def", "head", ["vector3"]], ["del", "def", "insert", ["vector3"]], ["del", "theorem", "insert_fs", ["vector3"]], ["del", "theorem", "insert_fz", ["vector3"]], ["del", "def", "nil", ["vector3"]], ["del", "def", "nil_elim", ["vector3"]], ["del", "def", "nth", ["vector3"]], ["del", "def", "of_fn", ["vector3"]], ["del", "theorem", "rec_on_cons", ["vector3"]], ["del", "theorem", "rec_on_nil", ["vector3"]], ["del", "def", "tail", ["vector3"]], ["del", "def", "vector3", []], ["del", "def", "vector_all", []], ["del", "theorem", "vector_all_iff_forall", []], ["del", "theorem", "imp", ["vector_allp"]], ["del", "def", "vector_allp", []], ["del", "theorem", "vector_allp_cons", []], ["del", "theorem", "vector_allp_iff_forall", []], ["del", "theorem", "vector_allp_nil", []], ["del", "theorem", "vector_allp_singleton", []], ["del", "def", "vector_ex", []], ["del", "theorem", "vector_ex_iff_exists", []]]}]}, {"timestamp": 1629062658, "sha": "6aefa38d", "message": "chore(topology/algebra/*,analysis/specific_limits): continuity of `fpow` (#8665)\n* add more API lemmas about continuity of `x ^ n` for natural and integer `n`;\n* prove that `x⁻¹` and `x ^ n`, `n < 0`, are discontinuous at zero.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "inv_surjective", []]]}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "continuous_at_fpow", ["normed_field"]], ["add", "theorem", "continuous_at_inv", ["normed_field"]], ["add", "theorem", "tendsto_norm_fpow_nhds_within_0_at_top", ["normed_field"]], ["mod", "theorem", "tendsto_norm_inverse_nhds_within_0_at_top", ["normed_field"]]]}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "fpow", ["continuous"]], ["mod", "theorem", "fpow", ["continuous_at"]], ["mod", "theorem", "continuous_at_fpow", []], ["add", "theorem", "fpow", ["continuous_on"]], ["add", "theorem", "fpow", ["continuous_within_at"]], ["mod", "theorem", "fpow", ["filter", "tendsto"]], ["del", "theorem", "tendsto_fpow", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "pow", ["continuous_at"]], ["add", "theorem", "continuous_at_pow", []], ["add", "theorem", "pow", ["continuous_on"]], ["add", "theorem", "pow", ["continuous_within_at"]], ["add", "theorem", "pow", ["filter", "tendsto"]]]}]}, {"timestamp": 1629062658, "sha": "fddc1f43", "message": "doc(tactic/congr): improve convert_to docs (#8664)\nThe docs should explain how `convert` and `convert_to` differ.", "changes": [{"oldPath": "src/tactic/congr.lean", "newPath": "src/tactic/congr.lean", "changes": []}]}, {"timestamp": 1629055766, "sha": "ca5987fa", "message": "chore(data/set/basic): add `image_image` and `preimage_preimage` to `function.left_inverse` (#8688)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_image", ["function", "left_inverse"]], ["add", "theorem", "preimage_preimage", ["function", "left_inverse"]]]}]}, {"timestamp": 1629032732, "sha": "bf6eeb24", "message": "feat(data/list/cycle): cycle.map and has_repr (#8170)", "changes": [{"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "def", "lists", ["cycle"]], ["add", "def", "map", ["cycle"]], ["add", "theorem", "mem_lists_iff_coe_eq", ["cycle"]]]}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["add", "theorem", "map", ["list", "is_rotated"]], ["add", "theorem", "map_rotate", ["list"]]]}, {"oldPath": null, "newPath": "test/cycle.lean", "changes": []}]}, {"timestamp": 1629013418, "sha": "0bb283b8", "message": "feat(algebra/bounds): add `csupr_mul` etc (#8584)\n* add `csupr_mul`, `mul_csupr`, `csupr_div`, `csupr_add`,\n `mul_csupr`, `add_csupr`, `csupr_sub`;\n* add `is_lub_csupr`, `is_lub_csupr_set`, `is_glb_cinfi`,\n `is_glb_cinfi_set`;\n* add `is_lub.csupr_eq`, `is_lub.csupr_set_eq`, `is_glb.cinfi_eq`,\n `is_glb.cinfi_set_eq`;\n* add `is_greatest.Sup_mem`, `is_least.Inf_mem`;\n* add lemmas about `galois_connection` and `Sup`/`Inf` in\n conditionally complete lattices;\n* add lemmas about `order_iso` and `Sup`/`Inf` in conditionally\n complete lattices.", "changes": [{"oldPath": "src/algebra/bounds.lean", "newPath": "src/algebra/bounds.lean", "changes": [["add", "theorem", "csupr_div", []], ["add", "theorem", "csupr_mul", []], ["add", "theorem", "mul_csupr", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "l_cSup", ["galois_connection"]], ["add", "theorem", "l_csupr", ["galois_connection"]], ["add", "theorem", "l_csupr_set", ["galois_connection"]], ["add", "theorem", "u_cInf", ["galois_connection"]], ["add", "theorem", "u_cinfi", ["galois_connection"]], ["add", "theorem", "u_cinfi_set", ["galois_connection"]], ["add", "theorem", "cinfi_eq", ["is_glb"]], ["add", "theorem", "cinfi_set_eq", ["is_glb"]], ["add", "theorem", "is_glb_cinfi", []], ["add", "theorem", "is_glb_cinfi_set", []], ["add", "theorem", "Sup_mem", ["is_greatest"]], ["add", "theorem", "Inf_mem", ["is_least"]], ["add", "theorem", "csupr_eq", ["is_lub"]], ["add", "theorem", "csupr_set_eq", ["is_lub"]], ["add", "theorem", "is_lub_csupr", []], ["add", "theorem", "is_lub_csupr_set", []], ["add", "theorem", "map_cInf", ["order_iso"]], ["add", "theorem", "map_cSup", ["order_iso"]], ["add", "theorem", "map_cinfi", ["order_iso"]], ["add", "theorem", "map_cinfi_set", ["order_iso"]], ["add", "theorem", "map_csupr", ["order_iso"]], ["add", "theorem", "map_csupr_set", ["order_iso"]]]}]}, {"timestamp": 1628996388, "sha": "b7d980c5", "message": "feat(topology/algebra/weak_dual_topology + analysis/normed_space/weak_dual_of_normed_space): add definition and first lemmas about weak-star topology (#8598)\nAdd definition and first lemmas about weak-star topology.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/weak_dual.lean", "changes": [["add", "def", "continuous_linear_map_to_weak_dual", ["normed_space", "dual"]], ["add", "theorem", "dual_norm_topology_le_weak_dual_topology", ["normed_space", "dual"]], ["add", "def", "to_weak_dual", ["normed_space", "dual"]], ["add", "theorem", "to_weak_dual_continuous", ["normed_space", "dual"]], ["add", "theorem", "to_weak_dual_eq_iff", ["normed_space", "dual"]], ["add", "theorem", "coe_to_fun_eq_normed_coe_to_fun", ["weak_dual"]], ["add", "def", "to_normed_dual", ["weak_dual"]], ["add", "theorem", "to_normed_dual_eq_iff", ["weak_dual"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/weak_dual_topology.lean", "changes": [["add", "theorem", "coe_fn_continuous", ["weak_dual"]], ["add", "theorem", "continuous_of_continuous_eval", ["weak_dual"]], ["add", "theorem", "eval_continuous", ["weak_dual"]], ["add", "theorem", "tendsto_iff_forall_eval_tendsto", ["weak_dual"]], ["add", "def", "weak_dual", []]]}]}, {"timestamp": 1628993885, "sha": "ff721ad0", "message": "chore(scripts): update nolints.txt (#8676)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1628985706, "sha": "708d99aa", "message": "feat(data/real/ennreal): add `to_real_sub_of_le` (#8674)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_real_sub_of_le", ["ennreal"]]]}]}, {"timestamp": 1628985705, "sha": "46444478", "message": "fix(tactic/norm_cast): assumption_mod_cast should only work on one goal (#8649)\nfixes #8438", "changes": [{"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": [["add", "theorem", "b", []]]}]}, {"timestamp": 1628983745, "sha": "c4208d22", "message": "chore(measure_theory): fix namespace in docstrings for docgen (#8671)", "changes": [{"oldPath": "src/measure_theory/decomposition/jordan.lean", "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}]}, {"timestamp": 1628948306, "sha": "8f863f6b", "message": "feat(measure_theory/decomposition/jordan): the Jordan decomposition theorem for signed measures (#8645)\nThis PR proves the Jordan decomposition theorem for signed measures, that is, given a signed measure `s`, there exists a unique pair of mutually singular measures `μ` and `ν`, such that `s = μ - ν`.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/decomposition/jordan.lean", "changes": [["add", "theorem", "exists_compl_positive_negative", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "neg_neg_part", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "neg_pos_part", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "to_jordan_decomposition_to_signed_measure", ["measure_theory", "jordan_decomposition"]], ["add", "def", "to_signed_measure", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "to_signed_measure_injective", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "to_signed_measure_neg", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "to_signed_measure_zero", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "zero_neg_part", ["measure_theory", "jordan_decomposition"]], ["add", "theorem", "zero_pos_part", ["measure_theory", "jordan_decomposition"]], ["add", "structure", "jordan_decomposition", ["measure_theory"]], ["add", "theorem", "of_diff_eq_zero_of_symm_diff_eq_zero_negative", ["measure_theory", "signed_measure"]], ["add", "theorem", "of_diff_eq_zero_of_symm_diff_eq_zero_positive", ["measure_theory", "signed_measure"]], ["add", "theorem", "of_inter_eq_of_symm_diff_eq_zero_negative", ["measure_theory", "signed_measure"]], ["add", "theorem", "of_inter_eq_of_symm_diff_eq_zero_positive", ["measure_theory", "signed_measure"]], ["add", "theorem", "subset_negative_null_set", ["measure_theory", "signed_measure"]], ["add", "theorem", "subset_positive_null_set", ["measure_theory", "signed_measure"]], ["add", "def", "to_jordan_decomposition", ["measure_theory", "signed_measure"]], ["add", "def", "to_jordan_decomposition_equiv", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_jordan_decomposition_neg", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_jordan_decomposition_spec", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_jordan_decomposition_zero", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_signed_measure_to_jordan_decomposition", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["del", "def", "sub_to_signed_measure", ["measure_theory", "measure"]], ["del", "theorem", "sub_to_signed_measure_apply", ["measure_theory", "measure"]], ["add", "theorem", "to_signed_measure_eq_to_signed_measure_iff", ["measure_theory", "measure"]], ["add", "theorem", "to_signed_measure_sub_apply", ["measure_theory", "measure"]], ["add", "theorem", "of_diff_of_diff_eq_zero", ["measure_theory", "vector_measure"]]]}]}, {"timestamp": 1628942136, "sha": "ba76bf75", "message": "chore(data/option,data/set): a few lemmas, golf (#8636)\n* add `option.subsingleton_iff_is_empty` and an instance\n `option.unique`;\n* add `set.is_compl_range_some_none`, `set.compl_range_some`,\n `set.range_some_inter_none`, `set.range_some_union_none`;\n* split the proof of `set.pairwise_on_eq_iff_exists_eq` into\n `set.nonempty.pairwise_on_eq_iff_exists_eq` and\n `set.pairwise_on_eq_iff_exists_eq`.\nInspired by #8579", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_range_some", ["set"]], ["add", "theorem", "is_compl_range_some_none", ["set"]], ["add", "theorem", "pairwise_on_eq_iff_exists_eq", ["set", "nonempty"]], ["add", "theorem", "pairwise_on_iff_exists_forall", ["set", "nonempty"]], ["add", "theorem", "pairwise_on_iff_exists_forall", ["set"]], ["add", "theorem", "range_some_inter_none", ["set"]], ["add", "theorem", "range_some_union_none", ["set"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "subsingleton_iff_is_empty", ["option"]]]}]}, {"timestamp": 1628937601, "sha": "721f571a", "message": "feat(linear_algebra/basic) : add a small lemma for simplifying a map between equivalent quotient spaces (#8640)", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "equiv_quotient_of_eq_mk", ["quotient_group"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "quot_equiv_of_eq_mk", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "quot_equiv_of_eq_mk", ["ideal"]]]}]}, {"timestamp": 1628922978, "sha": "c765b044", "message": "chore(data/(int, nat)/modeq): rationalize lemma names (#8644)\nMany `modeq` lemmas were called `nat.modeq.modeq_something` or `int.modeq.modeq_something`. I'm deleting the duplicated `modeq`, so that lemmas (usually) become `nat.modeq.something` and `int.modeq.something`. Most of them must be `protected`.\nThis facilitates greatly the use of dot notation on `nat.modeq` and `int.modeq` while shortening lemma names.\nI'm adding a few lemmas:\n* `nat.modeq.rfl`, `int.modeq.rfl`\n* `nat.modeq.dvd`, `int.modeq.dvd`\n* `nat.modeq_of_dvd`, `int.modeq_of_dvd`\n* `has_dvd.dvd.modeq_zero_nat`, `has_dvd.dvd.zero_modeq_nat`, `has_dvd.dvd.modeq_zero_int`, `has_dvd.dvd.zero_modeq_int`\n* `nat.modeq.add_left`, `nat.modeq.add_right`, `int.modeq.add_left`, `int.modeq.add_right`\n* `nat.modeq.add_left_cancel'`, `nat.modeq.add_right_cancel'`, `int.modeq.add_left_cancel'`, `int.modeq.add_right_cancel'`\n* `int.modeq.sub_left`, `int.modeq.sub_right`\n* `nat.modeq_sub`, `int.modeq_sub`\n* `int.modeq_one`\n* `int.modeq_pow`\nI'm also renaming some lemmas (on top of the general renaming):\n* `add_cancel_left` -> `add_left_cancel`, `add_cancel_right` -> `add_right_cancel`\n* `modeq_zero_iff` -> `modeq_zero_iff_dvd` in prevision of an upcoming PR", "changes": [{"oldPath": "archive/imo/imo1964_q1.lean", "newPath": "archive/imo/imo1964_q1.lean", "changes": []}, {"oldPath": "archive/miu_language/decision_suf.lean", "newPath": "archive/miu_language/decision_suf.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": [["add", "theorem", "modeq_zero_int", ["has_dvd", "dvd"]], ["add", "theorem", "zero_modeq_int", ["has_dvd", "dvd"]], ["add", "theorem", "coe_nat_modeq_iff", ["int"]], ["add", "theorem", "exists_unique_equiv", ["int"]], ["add", "theorem", "exists_unique_equiv_nat", ["int"]], ["add", "theorem", "gcd_a_modeq", ["int"]], ["add", "theorem", "mod_coprime", ["int"]], ["add", "theorem", "mod_modeq", ["int"]], ["del", "theorem", "coe_nat_modeq_iff", ["int", "modeq"]], ["add", "theorem", "dvd", ["int", "modeq"]], ["del", "theorem", "exists_unique_equiv", ["int", "modeq"]], ["del", "theorem", "exists_unique_equiv_nat", ["int", "modeq"]], ["del", "theorem", "gcd_a_modeq", ["int", "modeq"]], ["del", "theorem", "mod_coprime", ["int", "modeq"]], ["del", "theorem", "mod_modeq", ["int", "modeq"]], ["del", "theorem", "modeq_add", ["int", "modeq"]], ["del", "theorem", "modeq_add_cancel_left", ["int", "modeq"]], ["del", "theorem", "modeq_add_cancel_right", ["int", "modeq"]], ["del", "theorem", "modeq_add_fac", ["int", "modeq"]], ["del", "theorem", "modeq_and_modeq_iff_modeq_mul", ["int", "modeq"]], ["del", "theorem", "modeq_iff_dvd", ["int", "modeq"]], ["del", "theorem", "modeq_mul", ["int", "modeq"]], ["del", "theorem", "modeq_mul_left'", ["int", "modeq"]], ["del", "theorem", "modeq_mul_left", ["int", "modeq"]], ["del", "theorem", "modeq_mul_right'", ["int", "modeq"]], ["del", "theorem", "modeq_mul_right", ["int", "modeq"]], ["del", "theorem", "modeq_neg", ["int", "modeq"]], ["del", "theorem", "modeq_of_dvd_of_modeq", ["int", "modeq"]], ["del", "theorem", "modeq_of_modeq_mul_left", ["int", "modeq"]], ["del", "theorem", "modeq_of_modeq_mul_right", ["int", "modeq"]], ["del", "theorem", "modeq_sub", ["int", "modeq"]], ["del", "theorem", "modeq_zero_iff", ["int", "modeq"]], ["add", "theorem", "of_modeq_mul_left", ["int", "modeq"]], ["add", "theorem", "of_modeq_mul_right", ["int", "modeq"]], ["add", "theorem", "modeq_add_fac", ["int"]], ["add", "theorem", "modeq_and_modeq_iff_modeq_mul", ["int"]], ["add", "theorem", "modeq_iff_dvd", ["int"]], ["add", "theorem", "modeq_of_dvd", ["int"]], ["add", "theorem", "modeq_one", ["int"]], ["add", "theorem", "modeq_sub", ["int"]], ["add", "theorem", "modeq_zero_iff_dvd", ["int"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "modeq_zero_nat", ["has_dvd", "dvd"]], ["add", "theorem", "zero_modeq_nat", ["has_dvd", "dvd"]], ["add", "def", "chinese_remainder'", ["nat"]], ["add", "def", "chinese_remainder", ["nat"]], ["add", "theorem", "coprime_of_mul_modeq_one", ["nat"]], ["add", "theorem", "mod_modeq", ["nat"]], ["del", "def", "chinese_remainder'", ["nat", "modeq"]], ["del", "def", "chinese_remainder", ["nat", "modeq"]], ["del", "theorem", "coprime_of_mul_modeq_one", ["nat", "modeq"]], ["del", "theorem", "dvd_of_modeq", ["nat", "modeq"]], ["del", "theorem", "mod_modeq", ["nat", "modeq"]], ["del", "theorem", "modeq_add", ["nat", "modeq"]], ["del", "theorem", "modeq_add_cancel_left", ["nat", "modeq"]], ["del", "theorem", "modeq_add_cancel_right", ["nat", "modeq"]], ["del", "theorem", "modeq_and_modeq_iff_modeq_mul", ["nat", "modeq"]], ["del", "theorem", "modeq_iff_dvd'", ["nat", "modeq"]], ["del", "theorem", "modeq_iff_dvd", ["nat", "modeq"]], ["del", "theorem", "modeq_mul", ["nat", "modeq"]], ["del", "theorem", "modeq_mul_left'", ["nat", "modeq"]], ["del", "theorem", "modeq_mul_left", ["nat", "modeq"]], ["del", "theorem", "modeq_mul_right'", ["nat", "modeq"]], ["del", "theorem", "modeq_mul_right", ["nat", "modeq"]], ["del", "theorem", "modeq_of_dvd", ["nat", "modeq"]], ["del", "theorem", "modeq_of_dvd_of_modeq", ["nat", "modeq"]], ["del", "theorem", "modeq_of_modeq_mul_left", ["nat", "modeq"]], ["del", "theorem", "modeq_of_modeq_mul_right", ["nat", "modeq"]], ["del", "theorem", "modeq_one", ["nat", "modeq"]], ["del", "theorem", "modeq_pow", ["nat", "modeq"]], ["del", "theorem", "modeq_zero_iff", ["nat", "modeq"]], ["add", "theorem", "of_modeq_mul_left", ["nat", "modeq"]], ["add", "theorem", "of_modeq_mul_right", ["nat", "modeq"]], ["add", "theorem", "modeq_and_modeq_iff_modeq_mul", ["nat"]], ["add", "theorem", "modeq_iff_dvd'", ["nat"]], ["add", "theorem", "modeq_iff_dvd", ["nat"]], ["add", "theorem", "modeq_of_dvd", ["nat"]], ["add", "theorem", "modeq_one", ["nat"]], ["add", "theorem", "modeq_sub", ["nat"]], ["add", "theorem", "modeq_zero_iff_dvd", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "val_le", ["zmod"]]]}, {"oldPath": "src/dynamics/ergodic/conservative.lean", "newPath": "src/dynamics/ergodic/conservative.lean", "changes": []}, {"oldPath": "src/group_theory/p_group.lean", "newPath": "src/group_theory/p_group.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}]}, {"timestamp": 1628916700, "sha": "679a8a7c", "message": "docs(data/int/basic): add module docstring (#8655)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1628907382, "sha": "36826cbe", "message": "chore(scripts): update nolints.txt (#8666)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1628907381, "sha": "1b1088c2", "message": "feat(linear_algeba/linear_independent): coe_range (#8341)", "changes": [{"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "coe_range", ["linear_independent"]]]}]}, {"timestamp": 1628900739, "sha": "50d3de92", "message": "feat(logic/basic): a few lemmas about `xor` (#8650)\nInspired by #8579", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "xor_comm", []], ["add", "theorem", "xor_false", []], ["add", "theorem", "xor_self", []], ["add", "theorem", "xor_true", []]]}]}, {"timestamp": 1628891037, "sha": "94e4667b", "message": "feat(order/filter): change definition of inf (#8657)\nThe current definition of `filter.inf` came directly from the Galois insertion: `u ∈ f ⊓ g` if it contains `s ∩ t` for some `s ∈ f` and `t ∈ g`, but the new one is tidier: `u ∈ f ⊓ g` if `u = s ∩ t` for some `s ∈ f` and `t ∈ g`. This gives a stronger assertion to work with when assuming a set belongs to a filter inf. On the other hand it makes it harder to prove such a statement so we keep the old version as a lemma `filter.mem_inf_of_inter : ∀ {f g : filter α} {s t u : set α}, s ∈ f → t ∈ g → s ∩ t ⊆ u → u ∈ f ⊓ g`.\nAlso renames lots of lemmas to remove the word \"sets\" that was a remnant of the very early days.\nIn passing I also changed the simp lemma `filter.mem_map` from `t ∈ map m f ↔ {x | m x ∈ t} ∈ f` to \n`t ∈ map m f ↔ m ⁻¹' t ∈ f` which seemed more normal form to me. But this led to a lot of breakage, so I also kept the old version as `mem_map'`.", "changes": [{"oldPath": "roadmap/topology/paracompact.lean", "newPath": "roadmap/topology/paracompact.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "union_distrib_bInter_left", ["set"]], ["add", "theorem", "union_distrib_bInter_right", ["set"]]]}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/hausdorff.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "Inter_mem", ["filter"]], ["del", "theorem", "Inter_mem_sets", ["filter"]], ["add", "theorem", "bInter_finset_mem", ["filter"]], ["del", "theorem", "bInter_finset_mem_sets", ["filter"]], ["add", "theorem", "bInter_mem", ["filter"]], ["del", "theorem", "bInter_mem_sets", ["filter"]], ["add", "theorem", "compl_not_mem", ["filter"]], ["del", "theorem", "compl_not_mem_sets", ["filter"]], ["del", "theorem", "empty_in_sets_eq_bot", ["filter"]], ["add", "theorem", "empty_mem_iff_bot", ["filter"]], ["del", "theorem", "empty_nmem_sets", ["filter"]], ["add", "theorem", "empty_not_mem", ["filter"]], ["add", "theorem", "eq_Inf_of_mem_iff_exists_mem", ["filter"]], ["del", "theorem", "eq_Inf_of_mem_sets_iff_exists_mem", ["filter"]], ["add", "theorem", "eq_binfi_of_mem_iff_exists_mem", ["filter"]], ["del", "theorem", "eq_binfi_of_mem_sets_iff_exists_mem", ["filter"]], ["add", "theorem", "eq_infi_of_mem_iff_exists_mem", ["filter"]], ["del", "theorem", "eq_infi_of_mem_sets_iff_exists_mem", ["filter"]], ["add", "theorem", "eventually_inf", ["filter"]], ["mod", "theorem", "eventually_true", ["filter"]], ["add", "theorem", "exists_mem_subset_iff", ["filter"]], ["del", "theorem", "exists_sets_subset_iff", ["filter"]], ["add", "theorem", "forall_mem_nonempty_iff_ne_bot", ["filter"]], ["del", "theorem", "forall_sets_nonempty_iff_ne_bot", ["filter"]], ["add", "theorem", "image_coe_mem_of_mem_comap", ["filter"]], ["del", "theorem", "image_coe_mem_sets", ["filter"]], ["add", "theorem", "image_mem_of_mem_comap", ["filter"]], ["del", "theorem", "image_mem_sets", ["filter"]], ["add", "theorem", "inter_mem", ["filter"]], ["add", "theorem", "inter_mem_iff", ["filter"]], ["add", "theorem", "inter_mem_inf", ["filter"]], ["del", "theorem", "inter_mem_inf_sets", ["filter"]], ["del", "theorem", "inter_mem_sets", ["filter"]], ["del", "theorem", "inter_mem_sets_iff", ["filter"]], ["add", "theorem", "mem_Sup", ["filter"]], ["del", "theorem", "mem_Sup_sets", ["filter"]], ["add", "theorem", "mem_bind'", ["filter"]], ["add", "theorem", "mem_bind", ["filter"]], ["del", "theorem", "mem_bind_sets'", ["filter"]], ["del", "theorem", "mem_bind_sets", ["filter"]], ["del", "theorem", "mem_binfi", ["filter"]], ["add", "theorem", "mem_binfi_of_directed", ["filter"]], ["add", "theorem", "mem_bot", ["filter"]], ["del", "theorem", "mem_bot_sets", ["filter"]], ["add", "theorem", "mem_comap", ["filter"]], ["del", "theorem", "mem_comap_sets", ["filter"]], ["add", "theorem", "mem_inf_iff", ["filter"]], ["add", "theorem", "mem_inf_iff_superset", ["filter"]], ["add", "theorem", "mem_inf_of_inter", ["filter"]], ["add", "theorem", "mem_inf_of_left", ["filter"]], ["add", "theorem", "mem_inf_of_right", ["filter"]], ["del", "theorem", "mem_inf_sets", ["filter"]], ["del", "theorem", "mem_inf_sets_of_left", ["filter"]], ["del", "theorem", "mem_inf_sets_of_right", ["filter"]], ["add", "theorem", "mem_infi'", ["filter"]], ["mod", "theorem", "mem_infi", ["filter"]], ["add", "theorem", "mem_infi_finset", ["filter"]], ["del", "theorem", "mem_infi_iff'", ["filter"]], ["del", "theorem", "mem_infi_iff", ["filter"]], ["add", "theorem", "mem_infi_of_directed", ["filter"]], ["add", "theorem", "mem_infi_of_mem", ["filter"]], ["del", "theorem", "mem_infi_sets", ["filter"]], ["del", "theorem", "mem_infi_sets_finset", ["filter"]], ["add", "theorem", "mem_join", ["filter"]], ["del", "theorem", "mem_join_sets", ["filter"]], ["add", "theorem", "mem_map'", ["filter"]], ["mod", "theorem", "mem_map", ["filter"]], ["add", "theorem", "mem_map_iff_exists_image", ["filter"]], ["del", "theorem", "mem_map_sets_iff", ["filter"]], ["add", "theorem", "mem_of_eq_bot", ["filter"]], ["add", "theorem", "mem_of_superset", ["filter"]], ["add", "theorem", "mem_principal", ["filter"]], ["del", "theorem", "mem_principal_sets", ["filter"]], ["add", "theorem", "mem_pure", ["filter"]], ["del", "theorem", "mem_pure_sets", ["filter"]], ["add", "theorem", "mem_seq_def", ["filter"]], ["add", "theorem", "mem_seq_iff", ["filter"]], ["del", "theorem", "mem_seq_sets_def", ["filter"]], ["del", "theorem", "mem_seq_sets_iff", ["filter"]], ["del", "theorem", "mem_sets_of_eq_bot", ["filter"]], ["del", "theorem", "mem_sets_of_superset", ["filter"]], ["add", "theorem", "mem_sup", ["filter"]], ["del", "theorem", "mem_sup_sets", ["filter"]], ["add", "theorem", "mem_supr", ["filter"]], ["del", "theorem", "mem_supr_sets", ["filter"]], ["add", "theorem", "mem_top", ["filter"]], ["add", "theorem", "mem_top_iff_forall", ["filter"]], ["del", "theorem", "mem_top_sets", ["filter"]], ["del", "theorem", "mem_top_sets_iff_forall", ["filter"]], ["add", "theorem", "mem_traverse", ["filter"]], ["add", "theorem", "mem_traverse_iff", ["filter"]], ["del", "theorem", "mem_traverse_sets", ["filter"]], ["del", "theorem", "mem_traverse_sets_iff", ["filter"]], ["add", "theorem", "monotone_mem", ["filter"]], ["del", "theorem", "monotone_mem_sets", ["filter"]], ["add", "theorem", "mp_mem", ["filter"]], ["del", "theorem", "mp_sets", ["filter"]], ["add", "theorem", "nonempty_of_mem", ["filter"]], ["del", "theorem", "nonempty_of_mem_sets", ["filter"]], ["add", "theorem", "sInter_mem", ["filter"]], ["del", "theorem", "sInter_mem_sets", ["filter"]], ["add", "theorem", "seq_mem_seq", ["filter"]], ["del", "theorem", "seq_mem_seq_sets", ["filter"]], ["add", "theorem", "singleton_mem_pure", ["filter"]], ["del", "theorem", "singleton_mem_pure_sets", ["filter"]], ["add", "theorem", "univ_mem'", ["filter"]], ["add", "theorem", "univ_mem", ["filter"]], ["del", "theorem", "univ_mem_sets'", ["filter"]], ["del", "theorem", "univ_mem_sets", ["filter"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": [["add", "theorem", "countable_bInter_mem", []], ["del", "theorem", "countable_bInter_mem_sets", []]]}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "empty_not_mem", ["ultrafilter"]], ["add", "theorem", "mem_pure", ["ultrafilter"]], ["del", "theorem", "mem_pure_sets", ["ultrafilter"]], ["mod", "theorem", "nonempty_of_mem", ["ultrafilter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/liminf_limsup.lean", "newPath": "src/topology/algebra/ordered/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_field.lean", "newPath": "src/topology/algebra/uniform_field.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/extend_from.lean", "newPath": "src/topology/extend_from.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/ereal.lean", "newPath": "src/topology/instances/ereal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/partition_of_unity.lean", "newPath": "src/topology/partition_of_unity.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "mem_map_iff_exists_image'", []], ["del", "theorem", "mem_map_sets_iff'", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1628885683, "sha": "fdeb0646", "message": "feat(topology/*): lemmas about `dense`/`dense_range` and `is_(pre)connected` (#8651)\n* add `dense_compl_singleton`;\n* extract new lemma `is_preconnected_range` from the proof of\n `is_connected_range`;\n* add `dense_range.preconnected_space` and\n `dense_inducing.preconnected_space`;\n* rename `self_sub_closure_image_preimage_of_open` to\n `self_subset_closure_image_preimage_of_open`.\nInspired by #8579", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "open_subset_closure_inter", ["dense"]], ["add", "theorem", "dense_compl_singleton", []], ["add", "theorem", "subset_closure_image_preimage_of_is_open", ["dense_range"]]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "preconnected_space", ["dense_range"]], ["add", "theorem", "is_preconnected_range", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "closure_image_mem_nhds", ["dense_inducing"]], ["del", "theorem", "closure_image_nhds_of_nhds", ["dense_inducing"]], ["add", "theorem", "preconnected_space", ["dense_inducing"]], ["del", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_inducing"]]]}]}, {"timestamp": 1628878813, "sha": "8b9c4cfc", "message": "fix(tactic/core): fix incorrect uses of with_ident_list (#8653)\n`with_ident_list` uses `tk \"with\" >> ident_*`, which is incorrect for some tactics, where `_` doesn't mean anything. (It is good for tactics that name hypotheses like `cases`, but not tactics that use the list to reference hypotheses like `revert_deps`.)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1628878812, "sha": "7f5d5b9a", "message": "feat(ring_theory): ideals in a Dedekind domain have unique factorization (#8530)", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["del", "theorem", "mul_inv_cancel", ["fractional_ideal"]], ["add", "theorem", "dvd_iff_le", ["ideal"]], ["add", "theorem", "dvd_not_unit_iff_lt", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "is_unit_iff", ["ideal"]], ["add", "theorem", "le_of_dvd", ["ideal"]]]}]}, {"timestamp": 1628874209, "sha": "8eca2934", "message": "feat(field_theory): more general `algebra _ (algebraic_closure k)` instance (#8658)\nFor example, now we can take a field extension `L / K` and map `x : K` into the algebraic closure of `L`.", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "algebra_map_def", ["algebraic_closure"]]]}]}, {"timestamp": 1628874208, "sha": "c711909c", "message": "feat(linear_algebra/basic, group_theory/quotient_group, algebra/lie/quotient): ext lemmas for morphisms out of quotients (#8641)\nThis allows `ext` to see through quotients by subobjects of a type `A`, and apply ext lemmas specific to `A`.", "changes": [{"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "congr_fun", ["lie_module_hom"]]]}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": [["add", "theorem", "lie_module_hom_ext", ["lie_submodule", "quotient"]], ["add", "def", "mk'", ["lie_submodule", "quotient"]]]}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "monoid_hom_ext", ["quotient_group"]], ["add", "theorem", "quotient_map_subgroup_of_of_le_coe", ["quotient_group"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "linear_map_qext", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "ring_hom_ext", ["ideal", "quotient"]]]}]}, {"timestamp": 1628868208, "sha": "9e83de22", "message": "feat(data/list/perm): subperm_ext_iff (#8504)\nA helper lemma to construct proofs of `l <+~ l'`. On the way to proving\n`l ~ l' -> l.permutations ~ l'.permutations`.", "changes": [{"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "cons_left", ["list", "subperm"]], ["add", "theorem", "cons_right", ["list", "subperm"]], ["add", "theorem", "subperm_append_diff_self_of_count_le", ["list"]], ["add", "theorem", "subperm_ext_iff", ["list"]]]}]}, {"timestamp": 1628841709, "sha": "733e6e34", "message": "chore(*): update lean to 3.32.1 (#8652)", "changes": [{"oldPath": "archive/miu_language/decision_suf.lean", "newPath": "archive/miu_language/decision_suf.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/data/bitvec/core.lean", "newPath": "src/data/bitvec/core.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "def", "cast_add", ["fin"]]]}, {"oldPath": "src/data/fin2.lean", "newPath": "src/data/fin2.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/nat_antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": []}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": []}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/psub.lean", "newPath": "src/data/nat/psub.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/logic/function/iterate.lean", "newPath": "src/logic/function/iterate.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}]}, {"timestamp": 1628836694, "sha": "03ddb8dd", "message": "feat(finsupp/basic): restrict a finitely supported function on option A to A (#8342)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "prod_option_index", ["finsupp"]], ["add", "def", "some", ["finsupp"]], ["add", "theorem", "some_add", ["finsupp"]], ["add", "theorem", "some_apply", ["finsupp"]], ["add", "theorem", "some_single_none", ["finsupp"]], ["add", "theorem", "some_single_some", ["finsupp"]], ["add", "theorem", "some_zero", ["finsupp"]], ["add", "theorem", "sum_option_index_smul", ["finsupp"]]]}]}, {"timestamp": 1628831752, "sha": "d0804bae", "message": "feat(linear_algebra/invariant_basis_number): basic API lemmas (#7882)", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "coe_symm_mk", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "linear_equiv_fun_on_fintype_single", ["finsupp"]], ["add", "theorem", "linear_equiv_fun_on_fintype_symm_coe", ["finsupp"]], ["mod", "theorem", "linear_equiv_fun_on_fintype_symm_single", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": [["add", "theorem", "card_eq_of_lequiv", []], ["add", "theorem", "card_le_of_injective'", []], ["add", "theorem", "card_le_of_injective", []], ["add", "theorem", "card_le_of_surjective'", []], ["add", "theorem", "card_le_of_surjective", []]]}]}, {"timestamp": 1628821069, "sha": "3b37614c", "message": "chore(scripts): update nolints.txt (#8654)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1628796511, "sha": "4a864ed0", "message": "fix(tactic/core): mk_simp_attribute: remove superfluous disjunct (#8648)\n`with_ident_list` already returns `[]` if `with` is not present.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1628796510, "sha": "ce26133b", "message": "feat(data/nat/(basic, modeq)): simple lemmas (#8647)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_sub_sub_cancel", ["nat"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "add_modeq_left", ["nat"]], ["add", "theorem", "add_modeq_right", ["nat"]], ["add", "theorem", "modeq_zero_iff", ["nat"]]]}]}, {"timestamp": 1628796509, "sha": "c2580ebc", "message": "refactor(tactic/*): mark internal attrs as `parser := failed` (#8635)\nI saw this trick in some of the other user attributes, and it seems like a good idea to apply generally. Any attribute that is \"internal use only\" should have its `parser` field set to `failed`, so that it is impossible for the user to write the attribute. It is still possible for meta code to set the attributes programmatically, which is generally what's happening anyway.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1628796508, "sha": "8a2a6304", "message": "feat(analysis/convex/basic): add lemma add_smul regarding linear combinations of convex sets (#8608)\nFrom #2819", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "add_smul", ["convex"]]]}]}, {"timestamp": 1628796507, "sha": "2412b97f", "message": "feat(algebra/quaternion_basis): add a quaternion version of complex.lift (#8551)\nThis is some prework to show `clifford_algebra (Q c₁ c₂) ≃ₐ[R] ℍ[R,c₁,c₂]` for an appropriate `Q`.\nFor `complex.lift : {I' // I' * I' = -1} ≃ (ℂ →ₐ[ℝ] A)`, we could just use a subtype. For quaternions, we now have two generators and three relations, so a subtype isn't particularly viable any more; so instead this commit creates a new `quaternion_algebra.basis` structure.", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["add", "theorem", "algebra_map_eq", ["quaternion_algebra"]], ["add", "def", "im_i_lm", ["quaternion_algebra"]], ["add", "def", "im_j_lm", ["quaternion_algebra"]], ["add", "def", "im_k_lm", ["quaternion_algebra"]], ["add", "def", "re_lm", ["quaternion_algebra"]]]}, {"oldPath": null, "newPath": "src/algebra/quaternion_basis.lean", "changes": [["add", "def", "comp_hom", ["quaternion_algebra", "basis"]], ["add", "theorem", "i_mul_k", ["quaternion_algebra", "basis"]], ["add", "theorem", "j_mul_k", ["quaternion_algebra", "basis"]], ["add", "theorem", "k_mul_i", ["quaternion_algebra", "basis"]], ["add", "theorem", "k_mul_j", ["quaternion_algebra", "basis"]], ["add", "theorem", "k_mul_k", ["quaternion_algebra", "basis"]], ["add", "def", "lift", ["quaternion_algebra", "basis"]], ["add", "theorem", "lift_add", ["quaternion_algebra", "basis"]], ["add", "def", "lift_hom", ["quaternion_algebra", "basis"]], ["add", "theorem", "lift_mul", ["quaternion_algebra", "basis"]], ["add", "theorem", "lift_one", ["quaternion_algebra", "basis"]], ["add", "theorem", "lift_smul", ["quaternion_algebra", "basis"]], ["add", "theorem", "lift_zero", ["quaternion_algebra", "basis"]], ["add", "structure", "basis", ["quaternion_algebra"]], ["add", "def", "lift", ["quaternion_algebra"]]]}]}, {"timestamp": 1628796506, "sha": "8914b68a", "message": "feat(ring_theory/dedekind_domain): ideals in a DD are cancellative (#8513)\nThis PR provides a `comm_cancel_monoid_with_zero` instance on integral ideals in a Dedekind domain.\nAs a bonus, it deletes an out of date TODO comment.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}]}, {"timestamp": 1628790381, "sha": "0f591415", "message": "docs(data/fintype/sort): add module docstring (#8643)\nAnd correct typo in the docstrings", "changes": [{"oldPath": "src/data/fintype/sort.lean", "newPath": "src/data/fintype/sort.lean", "changes": [["mod", "def", "mono_equiv_of_fin", []]]}]}, {"timestamp": 1628790380, "sha": "3689655d", "message": "feat(measure_theory/stieltjes_measure): Stieltjes measures associated to monotone functions (#8266)\nGiven a monotone right-continuous real function `f`, there exists a measure giving mass `f b - f a` to the interval `(a, b]`. These measures are called Stieltjes measures, and are especially important in probability theory. The real Lebesgue measure is a particular case of this construction, for `f x = x`. This PR extends the already existing construction of the Lebesgue measure to cover all Stieltjes measures.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ioc_diff_Ioi", ["set"]], ["add", "theorem", "Ioc_inter_Ioi", ["set"]], ["add", "theorem", "Ioc_subset_Ioc_iff", ["set"]]]}, {"oldPath": "src/measure_theory/measure/lebesgue.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": [["del", "theorem", "borel_le_lebesgue_measurable", ["measure_theory"]], ["del", "theorem", "is_lebesgue_measurable_Iio", ["measure_theory"]], ["del", "def", "lebesgue_length", ["measure_theory"]], ["del", "theorem", "lebesgue_length_Icc", ["measure_theory"]], ["del", "theorem", "lebesgue_length_Ico", ["measure_theory"]], ["del", "theorem", "lebesgue_length_Ioo", ["measure_theory"]], ["del", "theorem", "lebesgue_length_empty", ["measure_theory"]], ["del", "theorem", "lebesgue_length_eq_infi_Icc", ["measure_theory"]], ["del", "theorem", "lebesgue_length_eq_infi_Ioo", ["measure_theory"]], ["del", "theorem", "lebesgue_length_mono", ["measure_theory"]], ["del", "theorem", "lebesgue_length_subadditive", ["measure_theory"]], ["del", "def", "lebesgue_outer", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_Icc", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_Ico", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_Ioc", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_Ioo", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_le_length", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_singleton", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_trim", ["measure_theory"]], ["del", "theorem", "lebesgue_to_outer_measure", ["measure_theory"]], ["mod", "theorem", "volume_Icc", ["real"]], ["mod", "theorem", "volume_Ico", ["real"]], ["mod", "theorem", "volume_Ioc", ["real"]], ["mod", "theorem", "volume_Ioo", ["real"]], ["mod", "theorem", "volume_singleton", ["real"]], ["mod", "theorem", "volume_val", ["real"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure/stieltjes.lean", "changes": [["add", "theorem", "borel_le_measurable", ["stieltjes_function"]], ["add", "theorem", "id_left_lim", ["stieltjes_function"]], ["add", "theorem", "le_left_lim", ["stieltjes_function"]], ["add", "def", "left_lim", ["stieltjes_function"]], ["add", "theorem", "left_lim_le", ["stieltjes_function"]], ["add", "theorem", "left_lim_le_left_lim", ["stieltjes_function"]], ["add", "def", "length", ["stieltjes_function"]], ["add", "theorem", "length_Ioc", ["stieltjes_function"]], ["add", "theorem", "length_empty", ["stieltjes_function"]], ["add", "theorem", "length_mono", ["stieltjes_function"]], ["add", "theorem", "length_subadditive_Icc_Ioo", ["stieltjes_function"]], ["add", "theorem", "measurable_set_Ioi", ["stieltjes_function"]], ["add", "theorem", "measure_Icc", ["stieltjes_function"]], ["add", "theorem", "measure_Ico", ["stieltjes_function"]], ["add", "theorem", "measure_Ioc", ["stieltjes_function"]], ["add", "theorem", "measure_Ioo", ["stieltjes_function"]], ["add", "theorem", "measure_singleton", ["stieltjes_function"]], ["add", "theorem", "mono", ["stieltjes_function"]], ["add", "theorem", "outer_Ioc", ["stieltjes_function"]], ["add", "theorem", "outer_le_length", ["stieltjes_function"]], ["add", "theorem", "outer_trim", ["stieltjes_function"]], ["add", "theorem", "right_continuous", ["stieltjes_function"]], ["add", "theorem", "tendsto_left_lim", ["stieltjes_function"]], ["add", "structure", "stieltjes_function", []]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "tendsto_nhds_within_Iio", ["monotone"]], ["add", "theorem", "tendsto_nhds_within_Ioi", ["monotone"]]]}]}, {"timestamp": 1628787331, "sha": "7b27f461", "message": "feat(measure_theory/vector_measure): a signed measure restricted on a positive set is a unsigned measure (#8597)\nThis PR defines `signed_measure.to_measure` which is the measure corresponding to a signed measure restricted on some positive set. This definition is useful for the Jordan decomposition theorem.", "changes": [{"oldPath": "src/measure_theory/measure/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": [["add", "theorem", "to_signed_measure_to_measure_of_zero_le", ["measure_theory", "measure"]], ["add", "theorem", "zero_le_to_signed_measure", ["measure_theory", "measure"]], ["add", "def", "to_measure_of_le_zero", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_measure_of_le_zero_apply", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_measure_of_le_zero_to_signed_measure", ["measure_theory", "signed_measure"]], ["add", "def", "to_measure_of_zero_le'", ["measure_theory", "signed_measure"]], ["add", "def", "to_measure_of_zero_le", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_measure_of_zero_le_apply", ["measure_theory", "signed_measure"]], ["add", "theorem", "to_measure_of_zero_le_to_signed_measure", ["measure_theory", "signed_measure"]], ["add", "theorem", "le_restrict_univ_iff_le", ["measure_theory", "vector_measure"]], ["add", "theorem", "neg_le_neg", ["measure_theory", "vector_measure"]], ["add", "theorem", "neg_le_neg_iff", ["measure_theory", "vector_measure"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "coe_tsum_of_nonneg", ["nnreal"]], ["add", "theorem", "summable_coe_of_nonneg", ["nnreal"]]]}]}, {"timestamp": 1628780575, "sha": "ee189957", "message": "feat(algebra/group_with_zero): `units.mk0` is a \"monoid hom\" (#8625)\nThis PR shows that `units.mk0` sends `1` to `1` and `x * y` to `mk0 x * mk0 y`. So it is a monoid hom, if we ignore the proof fields.", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "mk0_mul", ["units"]], ["add", "theorem", "mk0_one", ["units"]]]}]}, {"timestamp": 1628780574, "sha": "e17e9eac", "message": "feat(measure_theory/lp_space): add mem_Lp and integrable lemmas for is_R_or_C.re/im and inner product with a constant (#8615)", "changes": [{"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "norm_im_le_norm", ["is_R_or_C"]], ["add", "theorem", "norm_re_le_norm", ["is_R_or_C"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["add", "theorem", "const_inner", ["measure_theory", "integrable"]], ["add", "theorem", "im", ["measure_theory", "integrable"]], ["add", "theorem", "inner_const", ["measure_theory", "integrable"]], ["add", "theorem", "re", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["add", "theorem", "const_inner", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "im", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "inner_const", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "re", ["measure_theory", "mem_ℒp"]]]}]}, {"timestamp": 1628774509, "sha": "f63c27b0", "message": "feat(linear_algebra): Smith normal form for submodules over a PID (#8588)\nThis PR expands on `submodule.basis_of_pid` by showing that this basis can be chosen in \"Smith normal form\". That is: if `M` is a free module over a PID `R` and `N ≤ M`, then we can choose a basis `bN` for `N` and `bM` for `M`, such that the inclusion map from `N` to `M` expressed in these bases is a diagonal matrix in Smith normal form.\nThe rather gnarly induction in the original `submodule.basis_of_pid` has been turned into an even gnarlier auxiliary lemma that does the inductive step (with the induction hypothesis broken into pieces so we can apply it part by part), followed by a re-proven `submodule.basis_of_pid` that picks out part of this inductive step. Then we feed the full induction hypothesis, along with `submodule.basis_of_pid` into the same induction again, to get `submodule.exists_smith_normal_form_of_le`, and from that we conclude our new results `submodule.exists_smith_normal_form` and `ideal.exists_smith_normal_form`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_le_succ", ["fin"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "coe_mk_fin_cons", ["basis"]], ["add", "theorem", "coe_mk_fin_cons_of_le", ["basis"]]]}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": [["add", "theorem", "card_le_card_of_le", ["basis"]], ["add", "theorem", "card_le_card_of_submodule", ["basis"]], ["add", "structure", "smith_normal_form", ["basis"]], ["add", "theorem", "dvd_generator_iff", []], ["add", "theorem", "eq_bot_of_generator_maximal_submodule_image_eq_zero", []], ["add", "theorem", "generator_maximal_submodule_image_dvd", []], ["add", "theorem", "generator_submodule_image_dvd_of_mem", []], ["add", "theorem", "exists_smith_normal_form", ["ideal"]], ["add", "theorem", "rank_eq", ["ideal"]], ["add", "theorem", "mem_submodule_image", ["linear_map"]], ["add", "theorem", "mem_submodule_image_of_le", ["linear_map"]], ["add", "def", "submodule_image", ["linear_map"]], ["add", "theorem", "submodule_image_apply_of_le", ["linear_map"]], ["add", "theorem", "basis_of_pid_aux", ["submodule"]], ["add", "theorem", "basis_of_pid_bot", ["submodule"]], ["add", "theorem", "exists_smith_normal_form_of_le", ["submodule"]], ["add", "theorem", "nonempty_basis_of_pid", ["submodule"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "eq_of_smul_apply_eq_smul_apply", ["linear_independent"]]]}]}, {"timestamp": 1628761970, "sha": "e245b24b", "message": "feat(data/nat/prime, number_theory/padics/padic_norm): list of prime_pow_factors, valuation of prime power (#8473)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_pow", ["nat", "prime"]]]}, {"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["add", "theorem", "padic_val_nat_prime_pow", []], ["add", "theorem", "padic_val_nat_self", []]]}]}, {"timestamp": 1628757146, "sha": "1b96e977", "message": "feat(data/sym2): card of `sym2 α` (#8426)\nCase `n = 2` of stars and bars", "changes": [{"oldPath": null, "newPath": "src/data/sym/card.lean", "changes": [["add", "theorem", "card_image_diag", ["sym2"]], ["add", "theorem", "card_image_off_diag", ["sym2"]], ["add", "theorem", "card_subtype_diag", ["sym2"]], ["add", "theorem", "card_subtype_not_diag", ["sym2"]], ["add", "theorem", "two_mul_card_image_off_diag", ["sym2"]]]}, {"oldPath": "src/data/sym/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": [["add", "theorem", "diag_injective", ["sym2"]], ["add", "theorem", "filter_image_quotient_mk_is_diag", ["sym2"]], ["add", "theorem", "filter_image_quotient_mk_not_is_diag", ["sym2"]]]}]}, {"timestamp": 1628751841, "sha": "c550e3a3", "message": "refactor(group_theory/sylow): make new file about actions of p groups and move lemmas there (#8595)", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["mul_action"]]]}, {"oldPath": null, "newPath": "src/group_theory/p_group.lean", "changes": [["add", "theorem", "card_modeq_card_fixed_points", ["mul_action"]], ["add", "theorem", "exists_fixed_point_of_prime_dvd_card_of_fixed_point", ["mul_action"]], ["add", "theorem", "nonempty_fixed_point_of_prime_not_dvd_card", ["mul_action"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["del", "theorem", "card_modeq_card_fixed_points", ["mul_action"]], ["del", "theorem", "exists_fixed_point_of_prime_dvd_card_of_fixed_point", ["mul_action"]], ["del", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["mul_action"]], ["del", "theorem", "nonempty_fixed_point_of_prime_not_dvd_card", ["mul_action"]]]}]}, {"timestamp": 1628751840, "sha": "0cbab378", "message": "feat(group_theory/subgroup): there are finitely many subgroups of a finite group (#8593)", "changes": [{"oldPath": "src/data/set_like.lean", "newPath": "src/data/set_like/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/set_like/fintype.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}]}, {"timestamp": 1628751839, "sha": "cd2b5495", "message": "chore(measure_theory/*): make measurable_space arguments implicit, determined by the measure argument (#8571)\nIn the measure theory library, most of the definitions that depend on a measure have that form:\n```\ndef example_def {α} [measurable_space α] (μ : measure α) : some_type := sorry\n```\nSuppose now that we have two `measurable_space` structures on `α` : `{m m0 : measurable_space α}` and we have the measures `μ : measure α` (which is a measure on `m0`) and `μm : @measure α m`. This will be common for probability theory applications. See for example the `conditional_expectation` file.\nThen we can write `example_def μ` but we cannot write `example_def μm` because the `measurable_space` inferred is `m0`, which does not match the measurable space on which `μm` is defined. We have to use `@example_def _ m μm` instead.\nThis PR implements a simple fix: change `[measurable_space α] (μ : measure α)` into `{m : measurable_space α} (μ : measure α)`.\nAdvantage: we can now use `example_def μm` since the `measurable_space` argument is deduced from the `measure` argument. This removes many `@` in all places where `measure.trim` is used.\nDownsides:\n- I have to write `(0 : measure α)` instead of `0` in some lemmas.\n- I had to add two `apply_instance` to find `borel_space` instances.\n- Whenever a lemma takes an explicit measure argument, we have to write `{m : measurable_space α} (μ : measure α)` instead of simply `(μ : measure α)`.", "changes": [{"oldPath": "src/measure_theory/function/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": [["mod", "def", "Lp_meas_to_Lp_trim", ["measure_theory"]], ["mod", "def", "Lp_trim_to_Lp_meas", ["measure_theory"]], ["mod", "theorem", "Lp_trim_to_Lp_meas_ae_eq", ["measure_theory"]], ["mod", "theorem", "mem_Lp_meas_to_Lp_of_trim", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": [["mod", "def", "ess_inf", []], ["mod", "theorem", "ess_inf_antimono_measure", []], ["mod", "theorem", "ess_inf_measure_zero", []], ["mod", "def", "ess_sup", []], ["mod", "theorem", "ess_sup_measure_zero", []], ["mod", "theorem", "ess_sup_mono_measure", []], ["mod", "theorem", "ess_inf_apply", ["order_iso"]], ["mod", "theorem", "ess_sup_apply", ["order_iso"]]]}, {"oldPath": "src/measure_theory/function/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": [["mod", "theorem", "integrable_zero_measure", []], ["mod", "def", "has_finite_integral", ["measure_theory"]], ["mod", "theorem", "has_finite_integral_zero_measure", ["measure_theory"]], ["mod", "theorem", "trim", ["measure_theory", "integrable"]], ["mod", "def", "integrable", ["measure_theory"]], ["mod", "theorem", "integrable_of_forall_fin_meas_le'", ["measure_theory"]], ["mod", "theorem", "integrable_of_integrable_trim", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/function/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": [["mod", "theorem", "mem_Lp_const", ["measure_theory", "Lp"]], ["mod", "def", "Lp", ["measure_theory"]], ["mod", "theorem", "coe_nnnorm_ae_le_snorm_ess_sup", ["measure_theory"]], ["mod", "theorem", "ess_sup_trim", ["measure_theory"]], ["mod", "theorem", "limsup_trim", ["measure_theory"]], ["mod", "theorem", "ae_measurable", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "mono_measure", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "to_Lp_zero", ["measure_theory", "mem_ℒp"]], ["mod", "def", "mem_ℒp", ["measure_theory"]], ["mod", "theorem", "mem_ℒp_of_mem_ℒp_trim", ["measure_theory"]], ["mod", "def", "snorm'", ["measure_theory"]], ["mod", "theorem", "snorm'_le_snorm'_of_exponent_le", ["measure_theory"]], ["mod", "theorem", "snorm'_measure_zero_of_exponent_zero", ["measure_theory"]], ["mod", "theorem", "snorm'_measure_zero_of_neg", ["measure_theory"]], ["mod", "theorem", "snorm'_measure_zero_of_pos", ["measure_theory"]], ["mod", "theorem", "snorm'_mono_measure", ["measure_theory"]], ["mod", "theorem", "snorm'_trim", ["measure_theory"]], ["mod", "def", "snorm", ["measure_theory"]], ["mod", "def", "snorm_ess_sup", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_measure_zero", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_mono_measure", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_trim", ["measure_theory"]], ["mod", "theorem", "snorm_measure_zero", ["measure_theory"]], ["mod", "theorem", "snorm_mono_measure", ["measure_theory"]], ["mod", "theorem", "snorm_trim", ["measure_theory"]], ["mod", "theorem", "snorm_trim_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integral/bochner.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": [["mod", "def", "integral", ["measure_theory"]], ["mod", "theorem", "integral_dirac'", ["measure_theory"]], ["mod", "theorem", "integral_dirac", ["measure_theory"]], ["mod", "theorem", "integral_trim_ae", ["measure_theory"]], ["mod", "theorem", "integral_zero_measure", ["measure_theory"]], ["mod", "def", "integral", ["measure_theory", "simple_func"]], ["mod", "theorem", "integral_eq_sum_filter", ["measure_theory", "simple_func"]], ["mod", "theorem", "integral_eq_sum_of_subset", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/lebesgue.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": [["mod", "def", "lintegral", ["measure_theory"]], ["mod", "theorem", "lintegral_add_measure", ["measure_theory"]], ["mod", "theorem", "lintegral_eq_nnreal", ["measure_theory"]], ["mod", "theorem", "lintegral_mono'", ["measure_theory"]], ["mod", "theorem", "lintegral_mono_set'", ["measure_theory"]], ["mod", "theorem", "lintegral_mono_set", ["measure_theory"]], ["mod", "theorem", "lintegral_sum_measure", ["measure_theory"]], ["mod", "theorem", "lintegral_zero_measure", ["measure_theory"]], ["mod", "def", "with_density", ["measure_theory", "measure"]], ["mod", "theorem", "monotone_lintegral", ["measure_theory"]], ["mod", "theorem", "map_iff", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "meas_preimage_singleton_ne_zero", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "of_map", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "fin_meas_supp_iff", ["measure_theory", "simple_func"]], ["mod", "theorem", "fin_meas_supp_iff_support", ["measure_theory", "simple_func"]], ["mod", "def", "lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_eq_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_map_equiv", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_mono", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_restrict", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_sum", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_zero", ["measure_theory", "simple_func"]], ["mod", "def", "lintegralₗ", ["measure_theory", "simple_func"]], ["mod", "theorem", "support_eq", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integral/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": [["mod", "theorem", "ae_measurable_zero_measure", []], ["mod", "theorem", "ae_map_mem_range", ["measure_theory"]], ["mod", "theorem", "ae_mono", ["measure_theory"]], ["mod", "theorem", "ae_zero", ["measure_theory"]], ["mod", "theorem", "exists_nonempty_inter_of_measure_univ_lt_sum_measure", ["measure_theory"]], ["mod", "theorem", "exists_nonempty_inter_of_measure_univ_lt_tsum_measure", ["measure_theory"]], ["mod", "theorem", "ext_of_generate_finite", ["measure_theory"]], ["mod", "def", "absolutely_continuous", ["measure_theory", "measure"]], ["mod", "theorem", "add_apply", ["measure_theory", "measure"]], ["mod", "theorem", "add_to_outer_measure", ["measure_theory", "measure"]], ["mod", "theorem", "coe_add", ["measure_theory", "measure"]], ["mod", "theorem", "coe_nnreal_smul", ["measure_theory", "measure"]], ["mod", "theorem", "coe_smul", ["measure_theory", "measure"]], ["mod", "theorem", "coe_zero", ["measure_theory", "measure"]], ["mod", "def", "cofinite", ["measure_theory", "measure"]], ["mod", "def", "comap", ["measure_theory", "measure"]], ["mod", "theorem", "comap_apply", ["measure_theory", "measure"]], ["mod", "theorem", "eq_zero_of_not_nonempty", ["measure_theory", "measure"]], ["mod", "theorem", "finite_at_bot", ["measure_theory", "measure"]], ["mod", "theorem", "exists_mem_basis", ["measure_theory", "measure", "finite_at_filter"]], ["mod", "def", "finite_at_filter", ["measure_theory", "measure"]], ["mod", "theorem", "finite_at_filter_of_finite", ["measure_theory", "measure"]], ["mod", "theorem", "finite_at_nhds_within", ["measure_theory", "measure"]], ["mod", "structure", "finite_spanning_sets_in", ["measure_theory", "measure"]], ["mod", "theorem", "le_of_add_le_add_left", ["measure_theory", "measure"]], ["mod", "theorem", "le_sum_apply", ["measure_theory", "measure"]], ["mod", "def", "lift_linear", ["measure_theory", "measure"]], ["mod", "def", "map", ["measure_theory", "measure"]], ["mod", "theorem", "map_comap_subtype_coe", ["measure_theory", "measure"]], ["mod", "def", "mutually_singular", ["measure_theory", "measure"]], ["mod", "structure", "quasi_measure_preserving", ["measure_theory", "measure"]], ["mod", "def", "restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Inf_eq_Inf_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_add", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_apply_self", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_mono'", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_mono", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_smul", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_zero", ["measure_theory", "measure"]], ["mod", "def", "restrictₗ", ["measure_theory", "measure"]], ["mod", "theorem", "restrictₗ_apply", ["measure_theory", "measure"]], ["mod", "theorem", "sigma_finite_of_not_nonempty", ["measure_theory", "measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "measure"]], ["mod", "theorem", "smul_finite", ["measure_theory", "measure"]], ["mod", "theorem", "smul_to_outer_measure", ["measure_theory", "measure"]], ["mod", "theorem", "sum_cond", ["measure_theory", "measure"]], ["mod", "theorem", "zero_to_outer_measure", ["measure_theory", "measure"]], ["mod", "theorem", "measure_if", ["measure_theory"]], ["mod", "theorem", "out", ["measure_theory", "sigma_finite"]], ["mod", "theorem", "sigma_finite_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": [["mod", "def", "ae_measurable", []], ["mod", "def", "ae", ["measure_theory", "measure"]]]}]}, {"timestamp": 1628745795, "sha": "9ab4d281", "message": "doc(tactic/cache): fix haveI docs (#8637)\nApplies [Bhavik's suggestion](https://github.com/leanprover-community/mathlib/pull/8631#discussion_r687260852) which missed the train for #8631.", "changes": [{"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}]}, {"timestamp": 1628738963, "sha": "036c96bf", "message": "fix(tactic/lint): _ is not a linter (#8634)\nThe `#lint` parser accepts `ident_`, but as far as I can tell, `_` doesn't mean anything in particular, it just tries and fails to resolve the `linter._` linter. This simplifies the parser to only accept `ident`.", "changes": [{"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}]}, {"timestamp": 1628734702, "sha": "89687399", "message": "chore(scripts): update nolints.txt (#8638)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1628725610, "sha": "f0ae67d0", "message": "feat(analysis/normed_space/finite_dimension): asymptotic equivalence preserves summability (#8596)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["mod", "theorem", "summable_of_is_O", []], ["mod", "theorem", "summable_of_is_O_nat", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "summable_iff", ["is_equivalent"]], ["add", "theorem", "summable_iff_nat", ["is_equivalent"]], ["add", "theorem", "summable_of_is_O'", []], ["add", "theorem", "summable_of_is_O_nat'", []], ["add", "theorem", "summable_of_is_equivalent", []], ["add", "theorem", "summable_of_is_equivalent_nat", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "trans_sub", ["summable"]], ["add", "theorem", "summable_iff_of_summable_sub", []]]}]}, {"timestamp": 1628718776, "sha": "ea7e3ff7", "message": "feat(tactic/cache): allow optional := in haveI (#8631)\nThis syntactic restriction was originally added because it was not possible to reset the instance cache only for a given goal. This limitation has since been lifted (a while ago, I think), and so the syntax can be made more like `have` now.", "changes": [{"oldPath": "archive/examples/prop_encodable.lean", "newPath": "archive/examples/prop_encodable.lean", "changes": []}, {"oldPath": "src/algebra/char_p/exp_char.lean", "newPath": "src/algebra/char_p/exp_char.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cofinal.lean", "newPath": "src/category_theory/limits/cofinal.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/measure_theory/constructions/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/function/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1628711720, "sha": "565fef65", "message": "refactor(tactic/tidy): use @[user_attribute] (#8630)\nThis is just a minor change to use the `@[user_attribute]` attribute like all other user attrs instead of calling `attribute.register`. (This came up during the census of mathlib user attrs.)", "changes": [{"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1628696936, "sha": "7b5c60db", "message": "feat(data/equiv/basic): add a small lemma for simplifying map between equivalent quotient spaces induced by equivalent relations (#8617)\nJust adding a small lemma that allows us to compute the composition of the map given by `quot.congr` with `quot.mk`", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "congr_mk", ["quot"]], ["add", "theorem", "congr_mk", ["quotient"]]]}]}, {"timestamp": 1628696935, "sha": "3ebf9f08", "message": "chore(group_theory/group_action/defs): add a missing is_scalar_tower instance (#8604)", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}]}, {"timestamp": 1628696933, "sha": "2489931e", "message": "feat(group_theory/perm/cycle_type): purge trunc references (#8176)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "map_eq_singleton", ["multiset"]]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "cycle_type_def", ["equiv", "perm"]], ["add", "theorem", "cycle_type_eq'", ["equiv", "perm"]], ["add", "theorem", "cycle_type_le_of_mem_cycle_factors_finset", ["equiv", "perm"]], ["add", "theorem", "cycle_type_mul_mem_cycle_factors_finset_eq_sub", ["equiv", "perm"]], ["add", "theorem", "order_of_cycle_of_dvd_order_of", ["equiv", "perm"]]]}]}, {"timestamp": 1628690994, "sha": "2db8c799", "message": "chore(group_theory/submonoid/membership): missing rfl lemmas (#8619)", "changes": [{"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mem_multiples_iff", ["add_submonoid"]], ["add", "theorem", "mem_powers_iff", ["submonoid"]]]}]}, {"timestamp": 1628681910, "sha": "8d0ed030", "message": "feat(data/rat/basic): Add nat num and denom inv lemmas (#8581)\nAdd `inv_coe_nat_num` and `inv_coe_nat_denom` lemmas.\nThese lemmas show that the denominator and numerator of `1/ n` given `0 < n`, are equal to `n` and `1` respectively.", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "inv_coe_int_denom", ["rat"]], ["add", "theorem", "inv_coe_int_num", ["rat"]], ["add", "theorem", "inv_coe_nat_denom", ["rat"]], ["add", "theorem", "inv_coe_nat_num", ["rat"]]]}]}, {"timestamp": 1628667287, "sha": "1d4400c1", "message": "feat(analysis/normed_space): controlled surjectivity (#8498)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "controlled_closure_of_complete", []], ["add", "theorem", "controlled_closure_range_of_complete", []], ["add", "theorem", "op_norm_eq_of_bounds", ["normed_group_hom"]], ["add", "theorem", "surj_on", ["normed_group_hom", "surjective_on_with"]], ["add", "def", "surjective_on_with", ["normed_group_hom"]]]}]}, {"timestamp": 1628663950, "sha": "9c8602b0", "message": "refactor(measure_theory): add subfolder (#8594)\n* This PR adds the subfolders `constructions` `function` `group` `integral` and `measure` to `measure_theory`\n* File renamings:\n```\ngroup -> group.basic\nprod_group -> group.prod\nbochner_integration -> integral.bochner\nintegration -> integral.lebesgue\nhaar_measure -> measure.haar\nlebesgue_measure -> measure.lebesgue\nhausdorff_measure -> measure.hausdorff\n```", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "counterexamples/phillips.lean", "newPath": "counterexamples/phillips.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/dynamics/ergodic/measure_preserving.lean", "newPath": "src/dynamics/ergodic/measure_preserving.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/constructions/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/constructions/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/constructions/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/signed_hahn.lean", "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/function/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_measurable_sequence.lean", "newPath": "src/measure_theory/function/ae_measurable_sequence.lean", "changes": []}, {"oldPath": "src/measure_theory/conditional_expectation.lean", "newPath": "src/measure_theory/function/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/continuous_map_dense.lean", "newPath": "src/measure_theory/function/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/ess_sup.lean", "newPath": "src/measure_theory/function/ess_sup.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/function/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/l2_space.lean", "newPath": "src/measure_theory/function/l2_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/function/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/function/simple_func_dense.lean", "changes": []}, {"oldPath": "src/measure_theory/special_functions.lean", "newPath": "src/measure_theory/function/special_functions.lean", "changes": []}, {"oldPath": "src/measure_theory/arithmetic.lean", "newPath": "src/measure_theory/group/arithmetic.lean", "changes": []}, {"oldPath": "src/measure_theory/group.lean", "newPath": "src/measure_theory/group/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/prod_group.lean", "newPath": "src/measure_theory/group/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/integral/bochner.lean", "changes": []}, {"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integral/integrable_on.lean", "changes": []}, {"oldPath": "src/measure_theory/integral_eq_improper.lean", "newPath": "src/measure_theory/integral/integral_eq_improper.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/integral/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integral/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/mean_inequalities.lean", "newPath": "src/measure_theory/integral/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/integral/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/vitali_caratheodory.lean", "newPath": "src/measure_theory/integral/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/measure/content.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/measure/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/measure/haar.lean", "changes": []}, {"oldPath": "src/measure_theory/hausdorff_measure.lean", "newPath": "src/measure_theory/measure/hausdorff.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/measure/lebesgue.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space_def.lean", "newPath": "src/measure_theory/measure/measure_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/measure/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/regular.lean", "newPath": "src/measure_theory/measure/regular.lean", "changes": []}, {"oldPath": "src/measure_theory/vector_measure.lean", "newPath": "src/measure_theory/measure/vector_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": []}, {"oldPath": "src/probability_theory/integration.lean", "newPath": "src/probability_theory/integration.lean", "changes": []}, {"oldPath": "test/measurability.lean", "newPath": "test/measurability.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1628649484, "sha": "6305769a", "message": "chore(scripts): update nolints.txt (#8614)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1628649483, "sha": "3c09987c", "message": "docs(data/set/lattice): add module docstring (#8250)\nThis also cleans up some whitespace and replaces some `assume`s with `λ`s", "changes": [{"oldPath": "src/data/qpf/multivariate/basic.lean", "newPath": "src/data/qpf/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_const", ["set"]], ["mod", "theorem", "Inter_set_of", ["set"]], ["mod", "theorem", "Inter_univ", ["set"]], ["mod", "theorem", "Union_const", ["set"]], ["mod", "theorem", "Union_empty", ["set"]], ["mod", "theorem", "Union_of_singleton", ["set"]], ["mod", "theorem", "Union_prop_neg", ["set"]], ["mod", "theorem", "Union_prop_pos", ["set"]], ["mod", "theorem", "Union_subset_Union2", ["set"]], ["mod", "theorem", "Union_subset_Union", ["set"]], ["mod", "theorem", "Union_subset_Union_const", ["set"]], ["mod", "theorem", "bInter_image", ["set"]], ["mod", "theorem", "bInter_range", ["set"]], ["mod", "theorem", "bUnion_range", ["set"]], ["mod", "theorem", "bind_def", ["set"]], ["mod", "theorem", "image_Union", ["set"]], ["mod", "theorem", "image_eq_Union", ["set"]], ["mod", "theorem", "mem_sUnion", ["set"]], ["mod", "theorem", "monotone_preimage", ["set"]], ["mod", "theorem", "not_disjoint_iff", ["set"]], ["mod", "theorem", "range", ["set", "pairwise_disjoint"]], ["mod", "theorem", "pi_def", ["set"]], ["mod", "theorem", "pi_diff_pi_subset", ["set"]], ["mod", "theorem", "range_eq_Union", ["set"]], ["mod", "theorem", "sInter_bUnion", ["set"]], ["mod", "theorem", "sUnion_bUnion", ["set"]], ["mod", "theorem", "sUnion_subset", ["set"]], ["mod", "theorem", "sUnion_subset_iff", ["set"]], ["mod", "def", "seq", ["set"]], ["mod", "theorem", "seq_def", ["set"]], ["mod", "theorem", "seq_singleton", ["set"]], ["mod", "def", "sigma_to_Union", ["set"]], ["mod", "theorem", "sigma_to_Union_bijective", ["set"]], ["mod", "theorem", "sigma_to_Union_injective", ["set"]], ["mod", "theorem", "subset_sInter", ["set"]], ["mod", "theorem", "univ_disjoint", ["set"]], ["mod", "theorem", "univ_subtype", ["set"]]]}]}, {"timestamp": 1628643214, "sha": "694dd117", "message": "feat(archive/imo): IMO 2001 Q6 (#8327)\nFormalization of the problem Q6 of 2001.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2001_q6.lean", "changes": [["add", "theorem", "imo2001_q6", []]]}]}, {"timestamp": 1628618908, "sha": "32735ca2", "message": "feat(measure_theory/measure_space): add mutually singular measures (#8605)\nThis PR defines `mutually_singular` for measures. This is useful for Jordan and Lebesgue decomposition.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "add", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "smul", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "symm", ["measure_theory", "measure", "mutually_singular"]], ["add", "theorem", "zero", ["measure_theory", "measure", "mutually_singular"]], ["add", "def", "mutually_singular", ["measure_theory", "measure"]]]}]}, {"timestamp": 1628618907, "sha": "3b279c17", "message": "feat(measure_theory/l2_space): generalize inner_indicator_const_Lp_one from R to is_R_or_C (#8602)", "changes": [{"oldPath": "src/measure_theory/l2_space.lean", "newPath": "src/measure_theory/l2_space.lean", "changes": [["mod", "theorem", "inner_indicator_const_Lp_one", ["measure_theory", "L2"]]]}]}, {"timestamp": 1628618906, "sha": "d1b2a548", "message": "feat(analysis/normed_space/inner_product): add norm_inner_le_norm (#8601)\nadd this:\n```\nlemma norm_inner_le_norm (x y : E) : ∥⟪x, y⟫∥ ≤ ∥x∥ * ∥y∥ :=\n(is_R_or_C.norm_eq_abs _).le.trans (abs_inner_le_norm x y)\n```", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "norm_inner_le_norm", []]]}]}, {"timestamp": 1628618904, "sha": "acab4f94", "message": "feat(algebra/pointwise): add preimage_smul and generalize a couple of assumptions (#8600)\nSome lemmas about smul spun off from #2819", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "mem_inv_smul_set_iff", []], ["mod", "theorem", "mem_smul_set_iff_inv_smul_mem", []], ["add", "theorem", "preimage_smul'", []], ["add", "theorem", "preimage_smul", []]]}]}, {"timestamp": 1628616167, "sha": "9fb53f98", "message": "chore(analysis/calculus/fderiv_symmetric): Squeeze some simps in a very slow proof (#8609)\nThis doesn't seem to help much, but is low-hanging speedup fruit that the next person stuck on a timeout here will inevitably want solved first.", "changes": [{"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}]}, {"timestamp": 1628616166, "sha": "ebe01764", "message": "feat(measure_theory/special_functions): add measurability of is_R_or_C.re and is_R_or_C.im (#8603)", "changes": [{"oldPath": "src/measure_theory/special_functions.lean", "newPath": "src/measure_theory/special_functions.lean", "changes": [["add", "theorem", "im", ["ae_measurable"]], ["add", "theorem", "re", ["ae_measurable"]], ["add", "theorem", "measurable_im", ["is_R_or_C"]], ["add", "theorem", "measurable_re", ["is_R_or_C"]], ["add", "theorem", "im", ["measurable"]], ["add", "theorem", "re", ["measurable"]]]}]}, {"timestamp": 1628613558, "sha": "57391993", "message": "chore(linear_algebra/quadratic_form): make Sylvester's law of inertia bold in the doc string (#8610)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}]}, {"timestamp": 1628604234, "sha": "e2b7f706", "message": "fix(docs/references.bib): add missing comma (#8585)\n* Adds a missing comma to docs/references.bib. Without this the file cannot be parsed by bibtool.\n* Normalises docs/references.bib as described in [Citing other works](https://leanprover-community.github.io/contribute/doc.html#citing-other-works).", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1628601742, "sha": "81a47a71", "message": "docs(topology/category/Profinite/as_limit): fix typo (#8606)", "changes": [{"oldPath": "src/topology/category/Profinite/as_limit.lean", "newPath": "src/topology/category/Profinite/as_limit.lean", "changes": []}]}, {"timestamp": 1628592851, "sha": "5890afb1", "message": "feat(data/list/perm): perm.permutations (#8587)\nThis proves the theorem from [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/perm.20of.20permutations):\n```lean\ntheorem perm.permutations {s t : list α} (h : s ~ t) : permutations s ~ permutations t := ...\n```\nIt also introduces a `permutations'` function which has simpler equations (and indeed, this function is used to prove the theorem, because it is relatively easier to prove `perm.permutations'` first).", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "bind_assoc", ["list"]], ["add", "theorem", "bind_singleton'", ["list"]], ["add", "theorem", "map_eq_bind", ["list"]], ["add", "theorem", "map_map_permutations'_aux", ["list"]], ["add", "theorem", "map_permutations'", ["list"]], ["add", "theorem", "permutations'_aux_eq_permutations_aux2", ["list"]], ["add", "theorem", "permutations_append", ["list"]], ["add", "theorem", "permutations_aux_append", ["list"]], ["add", "theorem", "permutations_nil", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "permutations'", ["list"]], ["add", "def", "permutations'_aux", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "bind_append_perm", ["list"]], ["add", "theorem", "mem_permutations'", ["list"]], ["mod", "theorem", "mem_permutations", ["list"]], ["add", "theorem", "permutations'", ["list", "perm"]], ["add", "theorem", "permutations", ["list", "perm"]], ["add", "theorem", "perm_permutations'_aux_comm", ["list"]], ["add", "theorem", "perm_permutations'_iff", ["list"]], ["add", "theorem", "perm_permutations_iff", ["list"]], ["add", "theorem", "permutations_perm_permutations'", ["list"]]]}]}, {"timestamp": 1628592850, "sha": "f967cd03", "message": "refactor(group_theory/sylow): extract a lemma from Sylow proof (#8459)", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "card_normalizer_modeq_card", ["sylow"]], ["add", "theorem", "card_quotient_normalizer_modeq_card_quotient", ["sylow"]], ["add", "theorem", "prime_dvd_card_quotient_normalizer", ["sylow"]], ["add", "theorem", "prime_pow_dvd_card_normalizer", ["sylow"]]]}]}, {"timestamp": 1628586761, "sha": "e8fc4663", "message": "feat(algebra/group/pi): Add `pi.const_(monoid|add_monoid|ring|alg)_hom` (#8518)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "const_alg_hom", ["pi"]], ["add", "theorem", "const_alg_hom_eq_algebra_of_id", ["pi"]], ["add", "theorem", "const_ring_hom_eq_algebra_map", ["pi"]]]}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "def", "const_monoid_hom", ["pi"]]]}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": [["add", "def", "const_ring_hom", ["pi"]], ["del", "theorem", "ring_hom_apply", ["pi"]], ["add", "theorem", "ring_hom_injective", ["pi"]]]}]}, {"timestamp": 1628579278, "sha": "e729ab4a", "message": "feat(analysis/specific_limits): limit of nat_floor (a * x) / x (#8549)", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "floor_lt_ceil_of_lt", []], ["add", "theorem", "nat_floor_lt_nat_ceil_of_lt_of_pos", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_nat_ceil_mul_div_at_top", []], ["add", "theorem", "tendsto_nat_floor_mul_div_at_top", []]]}]}, {"timestamp": 1628561784, "sha": "e4cdecdc", "message": "chore(scripts): update nolints.txt (#8599)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1628544862, "sha": "2ab63a02", "message": "feat(topology/algebra/infinite_sum, analysis/normed_space/basic): product of two tsums, cauchy product (#8445)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "mul_norm", ["summable"]], ["add", "theorem", "mul_of_nonneg", ["summable"]], ["add", "theorem", "summable_mul_of_summable_norm", []], ["add", "theorem", "summable_norm_sum_mul_antidiagonal_of_summable_norm", []], ["add", "theorem", "summable_norm_sum_mul_range_of_summable_norm", []], ["add", "theorem", "tsum_mul_tsum_eq_tsum_sum_antidiagonal_of_summable_norm", []], ["add", "theorem", "tsum_mul_tsum_eq_tsum_sum_range_of_summable_norm", []], ["add", "theorem", "tsum_mul_tsum_of_summable_norm", []]]}, {"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["add", "def", "sigma_antidiagonal_equiv_prod", ["finset", "nat"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "mul", ["has_sum"]], ["add", "theorem", "mul_eq", ["has_sum"]], ["add", "theorem", "summable_mul_prod_iff_summable_mul_sigma_antidiagonal", []], ["add", "theorem", "summable_sum_mul_antidiagonal_of_summable_mul", []], ["add", "theorem", "summable_sum_mul_range_of_summable_mul", []], ["add", "theorem", "tsum_mul_tsum", []], ["add", "theorem", "tsum_mul_tsum_eq_tsum_sum_antidiagonal", []], ["add", "theorem", "tsum_mul_tsum_eq_tsum_sum_range", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "summable_of_sum_le", []]]}]}, {"timestamp": 1628524049, "sha": "5e59fb48", "message": "feat(algebra/ordered_pointwise): lemmas on smul of intervals (#8591)\nSome lemmas about smul on different types of intervals, spun off from #2819", "changes": [{"oldPath": null, "newPath": "src/algebra/ordered_pointwise.lean", "changes": [["add", "theorem", "smul_Icc", ["linear_ordered_field"]], ["add", "theorem", "smul_Ici", ["linear_ordered_field"]], ["add", "theorem", "smul_Ico", ["linear_ordered_field"]], ["add", "theorem", "smul_Iic", ["linear_ordered_field"]], ["add", "theorem", "smul_Iio", ["linear_ordered_field"]], ["add", "theorem", "smul_Ioc", ["linear_ordered_field"]], ["add", "theorem", "smul_Ioi", ["linear_ordered_field"]], ["add", "theorem", "smul_Ioo", ["linear_ordered_field"]]]}]}, {"timestamp": 1628524047, "sha": "847fc12d", "message": "feat(algebra): `submodule.restrict_scalars p R` is `S`-isomorphic to `p` (#8567)\nTo be more precise, turning `p : submodule S M` into an `R`-submodule gives the same module structure as turning it into a type and adding a module structure.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "restrict_scalars_equiv", ["submodule"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1628524046, "sha": "3ec899aa", "message": "chore(topology/algebra): bundled homs in group and ring completion (#8497)\nAlso take the opportunity to remove is_Z_bilin (who was scheduled for\nremoval from the beginning).", "changes": [{"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["add", "def", "completion", ["add_monoid_hom"]], ["add", "theorem", "completion_add", ["add_monoid_hom"]], ["add", "theorem", "completion_coe", ["add_monoid_hom"]], ["add", "theorem", "completion_zero", ["add_monoid_hom"]], ["add", "theorem", "continuous_completion", ["add_monoid_hom"]], ["add", "theorem", "continuous_extension", ["add_monoid_hom"]], ["add", "def", "extension", ["add_monoid_hom"]], ["add", "theorem", "extension_coe", ["add_monoid_hom"]], ["add", "theorem", "continuous_to_compl", ["uniform_space", "completion"]], ["del", "theorem", "is_add_group_hom_coe", ["uniform_space", "completion"]], ["del", "theorem", "is_add_group_hom_extension", ["uniform_space", "completion"]], ["del", "theorem", "is_add_group_hom_map", ["uniform_space", "completion"]], ["add", "def", "to_compl", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["del", "theorem", "comp_hom", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "neg_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "neg_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "sub_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "sub_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero_right", ["add_comm_group", "is_Z_bilin"]], ["mod", "theorem", "extend_Z_bilin", ["dense_inducing"]], ["del", "theorem", "tendsto_zero_left", ["is_Z_bilin"]], ["del", "theorem", "tendsto_zero_right", ["is_Z_bilin"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["add", "theorem", "continuous_coe_ring_hom", ["uniform_space", "completion"]], ["mod", "def", "map_ring_hom", ["uniform_space", "completion"]]]}]}, {"timestamp": 1628524045, "sha": "189e90ea", "message": "feat(group_theory/subgroup): lemmas relating normalizer and map and comap (#8458)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "comap_normalizer_eq_of_surjective", ["subgroup"]], ["add", "theorem", "le_normalizer_comap", ["subgroup"]], ["add", "theorem", "le_normalizer_map", ["subgroup"]], ["add", "theorem", "map_equiv_normalizer_eq", ["subgroup"]], ["add", "theorem", "map_normalizer_eq_of_bijective", ["subgroup"]]]}]}, {"timestamp": 1628524044, "sha": "3dd83166", "message": "feat(algebra/ring/basic): mul_{left,right}_cancel_of_non_zero_divisor (#8425)\nWe also golf the proof that a domain is a cancel_monoid_with_zero.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "is_left_regular_of_non_zero_divisor", []], ["add", "theorem", "is_regular_of_ne_zero'", []], ["add", "theorem", "is_right_regular_of_non_zero_divisor", []]]}, {"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "smul_cancel_of_non_zero_divisor", []]]}]}, {"timestamp": 1628524042, "sha": "4a15eddd", "message": "feat(data/polynomial/monic): monic.not_zero_divisor_iff (#8417)\nWe prove that a monic polynomial is not a zero divisor. A helper lemma is proven that the product of a monic polynomial is of lesser degree iff it is nontrivial and the multiplicand is zero.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "degree_mul_X", ["polynomial"]], ["del", "theorem", "degree_mul_monic", ["polynomial"]], ["add", "theorem", "degree_mul", ["polynomial", "monic"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "degree_smul_of_non_zero_divisor", ["polynomial"]], ["add", "theorem", "is_unit_leading_coeff_mul_left_eq_zero_iff", ["polynomial"]], ["add", "theorem", "is_unit_leading_coeff_mul_right_eq_zero_iff", ["polynomial"]], ["add", "theorem", "leading_coeff_smul_of_non_zero_divisor", ["polynomial"]], ["del", "theorem", "degree_eq_zero_iff_eq_one", ["polynomial", "monic"]], ["add", "theorem", "degree_le_zero_iff_eq_one", ["polynomial", "monic"]], ["add", "theorem", "degree_mul_comm", ["polynomial", "monic"]], ["add", "theorem", "mul_left_eq_zero_iff", ["polynomial", "monic"]], ["add", "theorem", "mul_left_ne_zero", ["polynomial", "monic"]], ["add", "theorem", "mul_nat_degree_lt_iff", ["polynomial", "monic"]], ["add", "theorem", "mul_right_eq_zero_iff", ["polynomial", "monic"]], ["add", "theorem", "mul_right_ne_zero", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_eq_zero_iff_eq_one", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_mul'", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_mul_comm", ["polynomial", "monic"]], ["add", "theorem", "monic_C_mul_of_mul_leading_coeff_eq_one", ["polynomial"]], ["add", "theorem", "monic_of_is_unit_leading_coeff_inv_smul", ["polynomial"]], ["add", "theorem", "nat_degree_smul_of_non_zero_divisor", ["polynomial"]]]}]}, {"timestamp": 1628524041, "sha": "5e368484", "message": "feat(measure_theory/decomposition/signed_hahn): signed version of the Hahn decomposition theorem (#8388)\nThis PR defined positive and negative sets with respect to a vector measure and prove the signed version of the Hahn decomposition theorem.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/decomposition/signed_hahn.lean", "changes": [["add", "theorem", "bdd_below_measure_of_negatives", ["measure_theory", "signed_measure"]], ["add", "theorem", "exists_compl_positive_negative", ["measure_theory", "signed_measure"]], ["add", "theorem", "exists_is_compl_positive_negative", ["measure_theory", "signed_measure"]], ["add", "theorem", "exists_subset_restrict_nonpos", ["measure_theory", "signed_measure"]], ["add", "def", "measure_of_negatives", ["measure_theory", "signed_measure"]], ["add", "theorem", "of_symm_diff_compl_positive_negative", ["measure_theory", "signed_measure"]], ["add", "theorem", "zero_mem_measure_of_negatives", ["measure_theory", "signed_measure"]]]}, {"oldPath": "src/measure_theory/vector_measure.lean", "newPath": "src/measure_theory/vector_measure.lean", "changes": [["add", "theorem", "exists_pos_measure_of_not_restrict_le_zero", ["measure_theory", "vector_measure"]], ["add", "theorem", "le_restrict_empty", ["measure_theory", "vector_measure"]], ["add", "theorem", "measurable_of_not_restrict_le_zero", ["measure_theory", "vector_measure"]], ["add", "theorem", "measurable_of_not_zero_le_restrict", ["measure_theory", "vector_measure"]], ["add", "theorem", "nonneg_of_zero_le_restrict", ["measure_theory", "vector_measure"]], ["add", "theorem", "nonpos_of_restrict_le_zero", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_restrict_Union", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_restrict_encodable_Union", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_restrict_iff", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_restrict_of_subset_le", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_restrict_subset", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_restrict_union", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_zero_of_not_measurable", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_le_zero_subset", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_not_measurable", ["measure_theory", "vector_measure"]], ["add", "theorem", "subset_le_of_restrict_le_restrict", ["measure_theory", "vector_measure"]], ["add", "theorem", "zero_le_restrict_not_measurable", ["measure_theory", "vector_measure"]], ["add", "theorem", "zero_le_restrict_subset", ["measure_theory", "vector_measure"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tendsto_top_of_pos", ["summable"]]]}]}, {"timestamp": 1628524040, "sha": "f3b70e4a", "message": "feat(group_theory/subgroup): saturated subgroups (#8137)\nFrom LTE", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "ker_saturated", ["add_subgroup"]], ["add", "def", "saturated", ["subgroup"]], ["add", "theorem", "saturated_iff_gpow", ["subgroup"]], ["add", "theorem", "saturated_iff_npow", ["subgroup"]]]}]}, {"timestamp": 1628516858, "sha": "77033a00", "message": "chore(algebra/associated): rename div_or_div to dvd_or_dvd (#8589)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "div_or_div", ["prime"]], ["add", "theorem", "dvd_or_dvd", ["prime"]]]}, {"oldPath": "src/ring_theory/prime.lean", "newPath": "src/ring_theory/prime.lean", "changes": []}]}, {"timestamp": 1628516857, "sha": "65e2411a", "message": "feat(order/bounds): `is_lub`/`is_glb` in Pi types and product types (#8583)\n* Add `monotone_fst` and `monotone_snd`.\n* Add some trivial lemmas about `upper_bounds` and `lower_bounds`.\n* Turn `is_lub_pi` and `is_glb_pi` into `iff` lemmas.\n* Add `is_lub_prod` and `is_glb_prod`.\n* Fix some header levels in module docs of `order/bounds`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "monotone_fst", []], ["add", "theorem", "monotone_snd", []]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "is_glb_iff_le_iff", []], ["mod", "theorem", "is_glb_pi", []], ["add", "theorem", "is_glb_prod", []], ["add", "theorem", "is_glb_upper_bounds", []], ["add", "theorem", "is_lub_iff_le_iff", []], ["add", "theorem", "is_lub_lower_bounds", []], ["mod", "theorem", "is_lub_pi", []], ["add", "theorem", "is_lub_prod", []], ["add", "theorem", "bdd_above_lower_bounds", ["set", "nonempty"]], ["add", "theorem", "bdd_below_upper_bounds", ["set", "nonempty"]], ["add", "theorem", "subset_lower_bounds_upper_bounds", []], ["add", "theorem", "subset_upper_bounds_lower_bounds", []]]}]}, {"timestamp": 1628516856, "sha": "9ce6b9a6", "message": "feat(order/complete_lattice): add `sup_eq_supr` and `inf_eq_infi` (#8573)\n* add `bool.injective_iff`, `bool.univ_eq`, and `bool.range_eq`;\n* add `sup_eq_supr` and `inf_eq_infi`;\n* golf `filter.comap_sup`.", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "injective_iff", ["bool"]]]}, {"oldPath": null, "newPath": "src/data/set/bool.lean", "changes": [["add", "theorem", "range_eq", ["bool"]], ["add", "theorem", "univ_eq", ["bool"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "inf_eq_infi", []], ["add", "theorem", "sup_eq_supr", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1628516855, "sha": "45aed677", "message": "chore(order/filter/basic): add `filter.sup_prod` and `filter.prod_sup` (#8572)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "prod_sup", ["filter"]], ["add", "theorem", "sup_prod", ["filter"]]]}]}, {"timestamp": 1628516854, "sha": "fc694c5b", "message": "chore(linear_algebra/special_linear_group): Cleanup and golf (#8569)\nThis cleans up a number things in this file:\n* Many lemmas were duplicated between `↑A` and `⇑A`. This eliminates the latter spelling from all lemmas, and makes it simplify to the former. Unfortunately the elaborator fights us at every step of the way with `↑A`, so we introduce local notation to take the pain away.\n* Some lemma names did not match the convention established elsewhere\n* Some definitions can be bundled more heavily than they currently are. In particular, this merges together `to_lin'` and `to_linear_equiv`, as well as `to_GL` and `embedding_GL`.", "changes": [{"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["add", "theorem", "coe_fn_eq_coe", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_inv", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_mul", ["matrix", "special_linear_group"]], ["add", "theorem", "coe_one", ["matrix", "special_linear_group"]], ["mod", "theorem", "coe_to_GL", ["matrix", "special_linear_group"]], ["add", "theorem", "det_coe", ["matrix", "special_linear_group"]], ["del", "theorem", "det_coe_fun", ["matrix", "special_linear_group"]], ["del", "theorem", "det_coe_matrix", ["matrix", "special_linear_group"]], ["del", "def", "embedding_GL", ["matrix", "special_linear_group"]], ["mod", "theorem", "ext", ["matrix", "special_linear_group"]], ["mod", "theorem", "ext_iff", ["matrix", "special_linear_group"]], ["del", "theorem", "inv_apply", ["matrix", "special_linear_group"]], ["del", "theorem", "inv_val", ["matrix", "special_linear_group"]], ["del", "theorem", "mul_apply", ["matrix", "special_linear_group"]], ["del", "theorem", "mul_val", ["matrix", "special_linear_group"]], ["del", "theorem", "one_apply", ["matrix", "special_linear_group"]], ["del", "theorem", "one_val", ["matrix", "special_linear_group"]], ["mod", "def", "to_GL", ["matrix", "special_linear_group"]], ["del", "theorem", "to_GL_mul", ["matrix", "special_linear_group"]], ["del", "theorem", "to_GL_one", ["matrix", "special_linear_group"]], ["mod", "def", "to_lin'", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin'_apply", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin'_injective", ["matrix", "special_linear_group"]], ["del", "theorem", "to_lin'_mul", ["matrix", "special_linear_group"]], ["del", "theorem", "to_lin'_one", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin'_symm_apply", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin'_symm_to_linear_map", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin'_to_linear_map", ["matrix", "special_linear_group"]], ["del", "def", "to_linear_equiv", ["matrix", "special_linear_group"]]]}]}, {"timestamp": 1628516853, "sha": "8196d4a2", "message": "chore(algebra/group/units): Make coercion the simp-normal form of units (#8568)\nIt's already used as the output for `@[simps]`; this makes `↑u` the simp-normal form of `u.val` and `↑(u⁻¹)` the simp-normal form of `u.inv`.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["del", "theorem", "coe_inv''", ["units"]], ["add", "theorem", "inv_eq_coe_inv", ["units"]], ["del", "theorem", "val_coe", ["units"]], ["add", "theorem", "val_eq_coe", ["units"]]]}]}, {"timestamp": 1628516852, "sha": "8edcf906", "message": "feat(ring_theory/noetherian): add noeth ring lemma (#8566)\nI couldn't find this explicit statement in the library -- I feel like it's the way a mathematician would define a Noetherian ring though.", "changes": [{"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_def", []], ["add", "theorem", "is_noetherian_ring_iff_ideal_fg", []]]}]}, {"timestamp": 1628516851, "sha": "5f2d9548", "message": "feat(algebra/ordered_field): add `inv_le_of_inv_le` and `inv_lt_of_inv_lt` (#8565)\nThese lemmas need positivity of only one of two variables. Mathlib already had lemmas about ordered multiplicative groups with these names, I appended prime to their names.", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "inv_le_of_inv_le", []], ["add", "theorem", "inv_lt_of_inv_lt", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1628516849, "sha": "f29cc59f", "message": "feat(matrix/kronecker): Add the Kronecker product (#8560)\nLargely derived from #8152, avoiding the complexity of introducing `algebra_map`s.\nThis introduces an abstraction `kronecker_map`, which is used to support both `mul` and `tmul` without having to redo any proofs.", "changes": [{"oldPath": null, "newPath": "src/data/matrix/kronecker.lean", "changes": [["add", "theorem", "add_kronecker", ["matrix"]], ["add", "theorem", "add_kronecker_tmul", ["matrix"]], ["add", "theorem", "diagonal_kronecker_diagonal", ["matrix"]], ["add", "theorem", "diagonal_kronecker_tmul_diagonal", ["matrix"]], ["add", "def", "kronecker", ["matrix"]], ["add", "theorem", "kronecker_add", ["matrix"]], ["add", "theorem", "kronecker_apply", ["matrix"]], ["add", "def", "kronecker_bilinear", ["matrix"]], ["add", "def", "kronecker_map", ["matrix"]], ["add", "theorem", "kronecker_map_add_left", ["matrix"]], ["add", "theorem", "kronecker_map_add_right", ["matrix"]], ["add", "theorem", "kronecker_map_diagonal_diagonal", ["matrix"]], ["add", "def", "kronecker_map_linear", ["matrix"]], ["add", "theorem", "kronecker_map_linear_mul_mul", ["matrix"]], ["add", "theorem", "kronecker_map_map", ["matrix"]], ["add", "theorem", "kronecker_map_map_left", ["matrix"]], ["add", "theorem", "kronecker_map_map_right", ["matrix"]], ["add", "theorem", "kronecker_map_one_one", ["matrix"]], ["add", "theorem", "kronecker_map_smul_left", ["matrix"]], ["add", "theorem", "kronecker_map_smul_right", ["matrix"]], ["add", "theorem", "kronecker_map_transpose", ["matrix"]], ["add", "theorem", "kronecker_map_zero_left", ["matrix"]], ["add", "theorem", "kronecker_map_zero_right", ["matrix"]], ["add", "theorem", "kronecker_smul", ["matrix"]], ["add", "def", "kronecker_tmul", ["matrix"]], ["add", "theorem", "kronecker_tmul_add", ["matrix"]], ["add", "theorem", "kronecker_tmul_apply", ["matrix"]], ["add", "def", "kronecker_tmul_bilinear", ["matrix"]], ["add", "theorem", "kronecker_tmul_smul", ["matrix"]], ["add", "theorem", "kronecker_tmul_zero", ["matrix"]], ["add", "theorem", "kronecker_zero", ["matrix"]], ["add", "theorem", "mul_kronecker_mul", ["matrix"]], ["add", "theorem", "mul_kronecker_tmul_mul", ["matrix"]], ["add", "theorem", "one_kronecker_one", ["matrix"]], ["add", "theorem", "one_kronecker_tmul_one", ["matrix"]], ["add", "theorem", "smul_kronecker", ["matrix"]], ["add", "theorem", "smul_kronecker_tmul", ["matrix"]], ["add", "theorem", "zero_kronecker", ["matrix"]], ["add", "theorem", "zero_kronecker_tmul", ["matrix"]]]}]}, {"timestamp": 1628516848, "sha": "7b1ce10b", "message": "fix(analysis/normed_space/basic): add an alias instance to fix an inference issue (#8547)\nThis adds an instance from [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Typeclass.20resolution.20under.20binders/near/245176934).", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}]}, {"timestamp": 1628510368, "sha": "fb63cf3e", "message": "chore(data/pfun): rename `roption` to `part`, split `data.part` off `data.pfun` (#8544)", "changes": [{"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": [["mod", "theorem", "of_option", ["computable"]], ["del", "theorem", "part", ["computable"]], ["del", "theorem", "part", ["computable₂"]], ["mod", "theorem", "const'", ["decidable", "partrec"]], ["mod", "def", "rfind", ["nat"]], ["mod", "def", "rfind_opt", ["nat"]], ["mod", "theorem", "const'", ["partrec"]], ["mod", "theorem", "none", ["partrec"]], ["add", "theorem", "m_of_fn_part_some", ["vector"]], ["del", "theorem", "m_of_fn_roption_some", ["vector"]]]}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": [["mod", "theorem", "eval_const", ["nat", "partrec", "code"]], ["mod", "theorem", "eval_id", ["nat", "partrec", "code"]]]}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": [["mod", "def", "eval", ["turing", "TM0"]], ["mod", "def", "eval", ["turing", "TM1"]], ["mod", "def", "eval", ["turing", "TM2"]], ["mod", "def", "eval", ["turing"]]]}, {"oldPath": "src/control/fix.lean", "newPath": "src/control/fix.lean", "changes": [["add", "def", "approx", ["part", "fix"]], ["add", "def", "fix_aux", ["part"]], ["add", "theorem", "fix_def'", ["part"]], ["del", "def", "approx", ["roption", "fix"]], ["del", "def", "fix_aux", ["roption"]], ["del", "theorem", "fix_def'", ["roption"]]]}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": [["add", "def", "approx_chain", ["part", "fix"]], ["add", "theorem", "approx_le_fix", ["part", "fix"]], ["add", "theorem", "approx_mem_approx_chain", ["part", "fix"]], ["add", "theorem", "approx_mono'", ["part", "fix"]], ["add", "theorem", "approx_mono", ["part", "fix"]], ["add", "theorem", "exists_fix_le_approx", ["part", "fix"]], ["add", "theorem", "le_f_of_mem_approx", ["part", "fix"]], ["add", "theorem", "mem_iff", ["part", "fix"]], ["add", "theorem", "fix_eq", ["part"]], ["add", "theorem", "fix_eq_ωSup", ["part"]], ["add", "theorem", "fix_le", ["part"]], ["add", "theorem", "to_unit_cont", ["part"]], ["add", "def", "to_unit_mono", ["part"]], ["del", "def", "approx_chain", ["roption", "fix"]], ["del", "theorem", "approx_le_fix", ["roption", "fix"]], ["del", "theorem", "approx_mem_approx_chain", ["roption", "fix"]], ["del", "theorem", "approx_mono'", ["roption", "fix"]], ["del", "theorem", "approx_mono", ["roption", "fix"]], ["del", "theorem", "exists_fix_le_approx", ["roption", "fix"]], ["del", "theorem", "le_f_of_mem_approx", ["roption", "fix"]], ["del", "theorem", "mem_iff", ["roption", "fix"]], ["del", "theorem", "fix_eq", ["roption"]], ["del", "theorem", "fix_eq_ωSup", ["roption"]], ["del", "theorem", "fix_le", ["roption"]], ["del", "theorem", "to_unit_cont", ["roption"]], ["del", "def", "to_unit_mono", ["roption"]]]}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "coe_inj", ["enat"]], ["mod", "theorem", "ne_top_iff", ["enat"]], ["mod", "def", "enat", []]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/part.lean", "changes": [["add", "def", "assert", ["part"]], ["add", "theorem", "assert_defined", ["part"]], ["add", "theorem", "assert_neg", ["part"]], ["add", "theorem", "assert_pos", ["part"]], ["add", "theorem", "bind_assoc", ["part"]], ["add", "theorem", "bind_defined", ["part"]], ["add", "theorem", "bind_dom", ["part"]], ["add", "theorem", "bind_eq_bind", ["part"]], ["add", "theorem", "bind_le", ["part"]], ["add", "theorem", "bind_map", ["part"]], ["add", "theorem", "bind_none", ["part"]], ["add", "theorem", "bind_some", ["part"]], ["add", "theorem", "bind_some_eq_map", ["part"]], ["add", "theorem", "bind_some_right", ["part"]], ["add", "theorem", "coe_none", ["part"]], ["add", "theorem", "coe_some", ["part"]], ["add", "theorem", "dom_iff_mem", ["part"]], ["add", "theorem", "eq_none_iff'", ["part"]], ["add", "theorem", "eq_none_iff", ["part"]], ["add", "theorem", "eq_none_or_eq_some", ["part"]], ["add", "theorem", "eq_some_iff", ["part"]], ["add", "theorem", "eta", ["part"]], ["add", "theorem", "ext'", ["part"]], ["add", "theorem", "ext", ["part"]], ["add", "theorem", "get_eq_get_of_eq", ["part"]], ["add", "theorem", "get_eq_iff_eq_some", ["part"]], ["add", "theorem", "get_eq_of_mem", ["part"]], ["add", "theorem", "get_mem", ["part"]], ["add", "def", "get_or_else", ["part"]], ["add", "theorem", "get_or_else_none", ["part"]], ["add", "theorem", "get_or_else_some", ["part"]], ["add", "theorem", "get_some", ["part"]], ["add", "theorem", "le_total_of_le_of_le", ["part"]], ["add", "def", "map", ["part"]], ["add", "theorem", "map_bind", ["part"]], ["add", "theorem", "map_eq_map", ["part"]], ["add", "theorem", "map_id'", ["part"]], ["add", "theorem", "map_map", ["part"]], ["add", "theorem", "map_none", ["part"]], ["add", "theorem", "map_some", ["part"]], ["add", "theorem", "left_unique", ["part", "mem"]], ["add", "theorem", "mem_assert", ["part"]], ["add", "theorem", "mem_assert_iff", ["part"]], ["add", "theorem", "mem_bind", ["part"]], ["add", "theorem", "mem_bind_iff", ["part"]], ["add", "theorem", "mem_coe", ["part"]], ["add", "theorem", "mem_eq", ["part"]], ["add", "theorem", "mem_map", ["part"]], ["add", "theorem", "mem_map_iff", ["part"]], ["add", "theorem", "mem_of_option", ["part"]], ["add", "theorem", "mem_restrict", ["part"]], ["add", "theorem", "mem_some", ["part"]], ["add", "theorem", "mem_some_iff", ["part"]], ["add", "theorem", "mem_to_option", ["part"]], ["add", "theorem", "mem_unique", ["part"]], ["add", "theorem", "ne_none_iff", ["part"]], ["add", "def", "none", ["part"]], ["add", "theorem", "not_mem_none", ["part"]], ["add", "def", "of_option", ["part"]], ["add", "theorem", "of_option_dom", ["part"]], ["add", "theorem", "of_option_eq_get", ["part"]], ["add", "theorem", "of_to_option", ["part"]], ["add", "theorem", "pure_eq_some", ["part"]], ["add", "def", "restrict", ["part"]], ["add", "theorem", "ret_eq_some", ["part"]], ["add", "def", "some", ["part"]], ["add", "theorem", "some_get", ["part"]], ["add", "theorem", "some_inj", ["part"]], ["add", "theorem", "some_ne_none", ["part"]], ["add", "theorem", "to_of_option", ["part"]], ["add", "def", "to_option", ["part"]], ["add", "structure", "{u}", []]]}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["mod", "def", "pfun", []], ["del", "def", "assert", ["roption"]], ["del", "theorem", "assert_defined", ["roption"]], ["del", "theorem", "assert_neg", ["roption"]], ["del", "theorem", "assert_pos", ["roption"]], ["del", "theorem", "bind_assoc", ["roption"]], ["del", "theorem", "bind_defined", ["roption"]], ["del", "theorem", "bind_dom", ["roption"]], ["del", "theorem", "bind_eq_bind", ["roption"]], ["del", "theorem", "bind_le", ["roption"]], ["del", "theorem", "bind_map", ["roption"]], ["del", "theorem", "bind_none", ["roption"]], ["del", "theorem", "bind_some", ["roption"]], ["del", "theorem", "bind_some_eq_map", ["roption"]], ["del", "theorem", "bind_some_right", ["roption"]], ["del", "theorem", "coe_none", ["roption"]], ["del", "theorem", "coe_some", ["roption"]], ["del", "theorem", "dom_iff_mem", ["roption"]], ["del", "theorem", "eq_none_iff'", ["roption"]], ["del", "theorem", "eq_none_iff", ["roption"]], ["del", "theorem", "eq_none_or_eq_some", ["roption"]], ["del", "theorem", "eq_some_iff", ["roption"]], ["del", "theorem", "eta", ["roption"]], ["del", "theorem", "ext'", ["roption"]], ["del", "theorem", "ext", ["roption"]], ["del", "theorem", "get_eq_get_of_eq", ["roption"]], ["del", "theorem", "get_eq_iff_eq_some", ["roption"]], ["del", "theorem", "get_eq_of_mem", ["roption"]], ["del", "theorem", "get_mem", ["roption"]], ["del", "def", "get_or_else", ["roption"]], ["del", "theorem", "get_or_else_none", ["roption"]], ["del", "theorem", "get_or_else_some", ["roption"]], ["del", "theorem", "get_some", ["roption"]], ["del", "theorem", "le_total_of_le_of_le", ["roption"]], ["del", "def", "map", ["roption"]], ["del", "theorem", "map_bind", ["roption"]], ["del", "theorem", "map_eq_map", ["roption"]], ["del", "theorem", "map_id'", ["roption"]], ["del", "theorem", "map_map", ["roption"]], ["del", "theorem", "map_none", ["roption"]], ["del", "theorem", "map_some", ["roption"]], ["del", "theorem", "left_unique", ["roption", "mem"]], ["del", "theorem", "mem_assert", ["roption"]], ["del", "theorem", "mem_assert_iff", ["roption"]], ["del", "theorem", "mem_bind", ["roption"]], ["del", "theorem", "mem_bind_iff", ["roption"]], ["del", "theorem", "mem_coe", ["roption"]], ["del", "theorem", "mem_eq", ["roption"]], ["del", "theorem", "mem_map", ["roption"]], ["del", "theorem", "mem_map_iff", ["roption"]], ["del", "theorem", "mem_of_option", ["roption"]], ["del", "theorem", "mem_restrict", ["roption"]], ["del", "theorem", "mem_some", ["roption"]], ["del", "theorem", "mem_some_iff", ["roption"]], ["del", "theorem", "mem_to_option", ["roption"]], ["del", "theorem", "mem_unique", ["roption"]], ["del", "theorem", "ne_none_iff", ["roption"]], ["del", "def", "none", ["roption"]], ["del", "theorem", "not_mem_none", ["roption"]], ["del", "def", "of_option", ["roption"]], ["del", "theorem", "of_option_dom", ["roption"]], ["del", "theorem", "of_option_eq_get", ["roption"]], ["del", "theorem", "of_to_option", ["roption"]], ["del", "theorem", "pure_eq_some", ["roption"]], ["del", "def", "restrict", ["roption"]], ["del", "theorem", "ret_eq_some", ["roption"]], ["del", "def", "some", ["roption"]], ["del", "theorem", "some_get", ["roption"]], ["del", "theorem", "some_inj", ["roption"]], ["del", "theorem", "some_ne_none", ["roption"]], ["del", "theorem", "to_of_option", ["roption"]], ["del", "def", "to_option", ["roption"]], ["del", "structure", "{u}", []]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "bind_continuous'", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "theorem", "map_continuous'", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "theorem", "seq_continuous'", ["omega_complete_partial_order", "continuous_hom"]], ["mod", "theorem", "ωSup_bind", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "eq_of_chain", ["part"]], ["add", "theorem", "mem_chain_of_mem_ωSup", ["part"]], ["add", "theorem", "mem_ωSup", ["part"]], ["add", "theorem", "ωSup_eq_none", ["part"]], ["add", "theorem", "ωSup_eq_some", ["part"]], ["mod", "def", "bind", ["preorder_hom"]], ["del", "theorem", "eq_of_chain", ["roption"]], ["del", "theorem", "mem_chain_of_mem_ωSup", ["roption"]], ["del", "theorem", "mem_ωSup", ["roption"]], ["del", "theorem", "ωSup_eq_none", ["roption"]], ["del", "theorem", "ωSup_eq_some", ["roption"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "test/general_recursion.lean", "newPath": "test/general_recursion.lean", "changes": [["add", "theorem", "cont", ["part", "examples", "div"]], ["add", "theorem", "eqn_1", ["part", "examples", "div", "equations"]], ["add", "def", "intl", ["part", "examples", "div"]], ["add", "def", "div", ["part", "examples"]], ["add", "theorem", "cont", ["part", "examples", "easy"]], ["add", "theorem", "eqn_1", ["part", "examples", "easy", "equations"]], ["add", "def", "intl", ["part", "examples", "easy"]], ["add", "def", "easy", ["part", "examples"]], ["add", "def", "f91'", ["part", "examples"]], ["add", "theorem", "cont", ["part", "examples", "f91"]], ["add", "theorem", "eqn_1", ["part", "examples", "f91", "equations"]], ["add", "def", "intl", ["part", "examples", "f91"]], ["add", "def", "f91", ["part", "examples"]], ["add", "theorem", "f91_dom", ["part", "examples"]], ["add", "theorem", "f91_spec'", ["part", "examples"]], ["add", "theorem", "f91_spec", ["part", "examples"]], ["add", "inductive", "tree", ["part", "examples"]], ["add", "theorem", "cont", ["part", "examples", "tree_map'"]], ["add", "theorem", "eqn_1", ["part", "examples", "tree_map'", "equations"]], ["add", "theorem", "eqn_2", ["part", "examples", "tree_map'", "equations"]], ["add", "def", "intl", ["part", "examples", "tree_map'"]], ["add", "def", "tree_map'", ["part", "examples"]], ["add", "theorem", "cont", ["part", "examples", "tree_map"]], ["add", "theorem", "eqn_1", ["part", "examples", "tree_map", "equations"]], ["add", "theorem", "eqn_2", ["part", "examples", "tree_map", "equations"]], ["add", "def", "intl", ["part", "examples", "tree_map"]], ["add", "def", "tree_map", ["part", "examples"]], ["del", "theorem", "cont", ["roption", "examples", "div"]], ["del", "theorem", "eqn_1", ["roption", "examples", "div", "equations"]], ["del", "def", "intl", ["roption", "examples", "div"]], ["del", "def", "div", ["roption", "examples"]], ["del", "theorem", "cont", ["roption", "examples", "easy"]], ["del", "theorem", "eqn_1", ["roption", "examples", "easy", "equations"]], ["del", "def", "intl", ["roption", "examples", "easy"]], ["del", "def", "easy", ["roption", "examples"]], ["del", "def", "f91'", ["roption", "examples"]], ["del", "theorem", "cont", ["roption", "examples", "f91"]], ["del", "theorem", "eqn_1", ["roption", "examples", "f91", "equations"]], ["del", "def", "intl", ["roption", "examples", "f91"]], ["del", "def", "f91", ["roption", "examples"]], ["del", "theorem", "f91_dom", ["roption", "examples"]], ["del", "theorem", "f91_spec'", ["roption", "examples"]], ["del", "theorem", "f91_spec", ["roption", "examples"]], ["del", "inductive", "tree", ["roption", "examples"]], ["del", "theorem", "cont", ["roption", "examples", "tree_map'"]], ["del", "theorem", "eqn_1", ["roption", "examples", "tree_map'", "equations"]], ["del", "theorem", "eqn_2", ["roption", "examples", "tree_map'", "equations"]], ["del", "def", "intl", ["roption", "examples", "tree_map'"]], ["del", "def", "tree_map'", ["roption", "examples"]], ["del", "theorem", "cont", ["roption", "examples", "tree_map"]], ["del", "theorem", "eqn_1", ["roption", "examples", "tree_map", "equations"]], ["del", "theorem", "eqn_2", ["roption", "examples", "tree_map", "equations"]], ["del", "def", "intl", ["roption", "examples", "tree_map"]], ["del", "def", "tree_map", ["roption", "examples"]]]}]}, {"timestamp": 1628504852, "sha": "67282017", "message": "chore(data/finsupp): add missing lemmas (#8553)\nThese lemmas are needed by `[simps {simp_rhs := tt}]` when composing equivs, otherwise simp doesn't make progress on `(map_range.add_equiv f).to_equiv.symm x` which should simplify to `map_range f.to_equiv.symm x`.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "add_equiv_to_add_monoid_hom", ["finsupp", "map_range"]], ["add", "theorem", "add_equiv_to_equiv", ["finsupp", "map_range"]], ["add", "theorem", "add_monoid_hom_to_zero_hom", ["finsupp", "map_range"]], ["add", "def", "equiv", ["finsupp", "map_range"]], ["add", "theorem", "equiv_refl", ["finsupp", "map_range"]], ["add", "theorem", "equiv_symm", ["finsupp", "map_range"]], ["add", "theorem", "equiv_trans", ["finsupp", "map_range"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "linear_equiv_to_add_equiv", ["finsupp", "map_range"]], ["add", "theorem", "linear_equiv_to_linear_map", ["finsupp", "map_range"]], ["add", "theorem", "linear_map_to_add_monoid_hom", ["finsupp", "map_range"]]]}]}, {"timestamp": 1628497041, "sha": "3f5a348f", "message": "chore(galois_connection): golf some proofs (#8582)\n* golf some proofs\n* add `galois_insertion.left_inverse_l_u` and `galois_coinsertion.left_inverse_u_l`;\n* drop `galois_insertion.l_supr_of_ul_eq_self` and `galois_coinsertion.u_infi_of_lu_eq_self`: these lemmas are less general than `galois_connection.l_supr` and `galois_connection.u_infi`.", "changes": [{"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["del", "theorem", "u_infi_of_lu_eq_self", ["galois_coinsertion"]], ["add", "theorem", "u_l_left_inverse", ["galois_coinsertion"]], ["mod", "theorem", "l_bot", ["galois_connection"]], ["mod", "theorem", "u_Inf", ["galois_connection"]], ["mod", "theorem", "u_inf", ["galois_connection"]], ["mod", "theorem", "u_infi", ["galois_connection"]], ["mod", "theorem", "u_top", ["galois_connection"]], ["del", "theorem", "l_supr_of_ul_eq_self", ["galois_insertion"]], ["add", "theorem", "left_inverse_l_u", ["galois_insertion"]]]}]}, {"timestamp": 1628497040, "sha": "24bbbdce", "message": "feat(group_theory/sylow): Generalize proof of first Sylow theorem (#8383)\nGeneralize the first proof. There is now a proof that every p-subgroup is contained in a Sylow subgroup.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["del", "theorem", "card_bot", ["add_subgroup"]], ["mod", "theorem", "card_bot", ["subgroup"]], ["add", "theorem", "card_le_one_iff_eq_bot", ["subgroup"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "exists_subgroup_card_pow_prime", ["sylow"]], ["add", "theorem", "exists_subgroup_card_pow_prime_le", ["sylow"]], ["add", "theorem", "exists_subgroup_card_pow_succ", ["sylow"]]]}]}, {"timestamp": 1628497039, "sha": "4813b73a", "message": "feat(category_theory/adjunction): general adjoint functor theorem (#4885)\nA proof of the general adjoint functor theorem. This PR also adds an API for wide equalizers (essentially copied from the equalizer API), as well as results relating adjunctions to (co)structured arrow categories and weakly initial objects. I can split this into smaller PRs if necessary?", "changes": [{"oldPath": null, "newPath": "src/category_theory/adjunction/adjoint_functor_theorems.lean", "changes": [["add", "def", "solution_set_condition", ["category_theory"]], ["add", "theorem", "solution_set_condition_of_is_right_adjoint", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/adjunction/comma.lean", "changes": [["add", "def", "adjunction_of_costructured_arrow_terminals", ["category_theory"]], ["add", "def", "adjunction_of_structured_arrow_initials", ["category_theory"]], ["add", "def", "is_right_adjoint_of_costructured_arrow_terminals", ["category_theory"]], ["add", "def", "is_right_adjoint_of_structured_arrow_initials", ["category_theory"]], ["add", "def", "left_adjoint_of_structured_arrow_initials", ["category_theory"]], ["add", "def", "left_adjoint_of_structured_arrow_initials_aux", ["category_theory"]], ["add", "def", "mk_initial_of_left_adjoint", ["category_theory"]], ["add", "def", "mk_terminal_of_right_adjoint", ["category_theory"]], ["add", "def", "right_adjoint_of_costructured_arrow_terminals", ["category_theory"]], ["add", "def", "right_adjoint_of_costructured_arrow_terminals_aux", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/constructions/weakly_initial.lean", "changes": [["add", "theorem", "has_initial_of_weakly_initial_and_has_wide_equalizers", ["category_theory"]], ["add", "theorem", "has_weakly_initial_of_weakly_initial_set_and_has_products", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/wide_equalizers.lean", "changes": [["add", "def", "of_cotrident", ["category_theory", "limits", "cocone"]], ["add", "theorem", "of_cotrident_ι", ["category_theory", "limits", "cocone"]], ["add", "def", "of_trident", ["category_theory", "limits", "cone"]], ["add", "theorem", "of_trident_π", ["category_theory", "limits", "cone"]], ["add", "theorem", "app_one", ["category_theory", "limits", "cotrident"]], ["add", "theorem", "coequalizer_ext", ["category_theory", "limits", "cotrident"]], ["add", "theorem", "condition", ["category_theory", "limits", "cotrident"]], ["add", "def", "ext", ["category_theory", "limits", "cotrident"]], ["add", "def", "desc'", ["category_theory", "limits", "cotrident", "is_colimit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "cotrident", "is_colimit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "cotrident", "is_colimit"]], ["add", "theorem", "hom_iso_natural", ["category_theory", "limits", "cotrident", "is_colimit"]], ["add", "def", "mk'", ["category_theory", "limits", "cotrident", "is_colimit"]], ["add", "def", "mk", ["category_theory", "limits", "cotrident", "is_colimit"]], ["add", "def", "mk_hom", ["category_theory", "limits", "cotrident"]], ["add", "def", "of_cocone", ["category_theory", "limits", "cotrident"]], ["add", "theorem", "of_cocone_ι", ["category_theory", "limits", "cotrident"]], ["add", "def", "of_π", ["category_theory", "limits", "cotrident"]], ["add", "def", "π", ["category_theory", "limits", "cotrident"]], ["add", "theorem", "π_eq_app_one", ["category_theory", "limits", "cotrident"]], ["add", "theorem", "π_of_π", ["category_theory", "limits", "cotrident"]], ["add", "def", "cotrident", ["category_theory", "limits"]], ["add", "def", "diagram_iso_parallel_family", ["category_theory", "limits"]], ["add", "theorem", "epi_of_is_colimit_parallel_family", ["category_theory", "limits"]], ["add", "def", "has_wide_coequalizer", ["category_theory", "limits"]], ["add", "def", "has_wide_coequalizers", ["category_theory", "limits"]], ["add", "theorem", "has_wide_coequalizers_of_has_colimit_parallel_family", ["category_theory", "limits"]], ["add", "def", "has_wide_equalizer", ["category_theory", "limits"]], ["add", "def", "has_wide_equalizers", ["category_theory", "limits"]], ["add", "theorem", "has_wide_equalizers_of_has_limit_parallel_family", ["category_theory", "limits"]], ["add", "theorem", "mono_of_is_limit_parallel_family", ["category_theory", "limits"]], ["add", "def", "parallel_family", ["category_theory", "limits"]], ["add", "theorem", "parallel_family_map_left", ["category_theory", "limits"]], ["add", "theorem", "parallel_family_obj_one", ["category_theory", "limits"]], ["add", "theorem", "parallel_family_obj_zero", ["category_theory", "limits"]], ["add", "theorem", "app_zero", ["category_theory", "limits", "trident"]], ["add", "theorem", "condition", ["category_theory", "limits", "trident"]], ["add", "theorem", "equalizer_ext", ["category_theory", "limits", "trident"]], ["add", "def", "ext", ["category_theory", "limits", "trident"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "trident", "is_limit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "trident", "is_limit"]], ["add", "theorem", "hom_iso_natural", ["category_theory", "limits", "trident", "is_limit"]], ["add", "def", "lift'", ["category_theory", "limits", "trident", "is_limit"]], ["add", "def", "mk'", ["category_theory", "limits", "trident", "is_limit"]], ["add", "def", "mk", ["category_theory", "limits", "trident", "is_limit"]], ["add", "def", "mk_hom", ["category_theory", "limits", "trident"]], ["add", "def", "of_cone", ["category_theory", "limits", "trident"]], ["add", "theorem", "of_cone_π", ["category_theory", "limits", "trident"]], ["add", "def", "of_ι", ["category_theory", "limits", "trident"]], ["add", "def", "ι", ["category_theory", "limits", "trident"]], ["add", "theorem", "ι_eq_app_zero", ["category_theory", "limits", "trident"]], ["add", "theorem", "ι_of_ι", ["category_theory", "limits", "trident"]], ["add", "def", "trident", ["category_theory", "limits"]], ["add", "def", "comp", ["category_theory", "limits", "walking_parallel_family", "hom"]], ["add", "inductive", "hom", ["category_theory", "limits", "walking_parallel_family"]], ["add", "theorem", "hom_id", ["category_theory", "limits", "walking_parallel_family"]], ["add", "inductive", "walking_parallel_family", ["category_theory", "limits"]], ["add", "def", "walking_parallel_family_equiv_walking_parallel_pair", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "wide_coequalizer"]], ["add", "def", "cotrident", ["category_theory", "limits", "wide_coequalizer"]], ["add", "theorem", "cotrident_ι_app_one", ["category_theory", "limits", "wide_coequalizer"]], ["add", "theorem", "cotrident_π", ["category_theory", "limits", "wide_coequalizer"]], ["add", "def", "desc'", ["category_theory", "limits", "wide_coequalizer"]], ["add", "def", "desc", ["category_theory", "limits", "wide_coequalizer"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "wide_coequalizer"]], ["add", "def", "π", ["category_theory", "limits", "wide_coequalizer"]], ["add", "theorem", "π_desc", ["category_theory", "limits", "wide_coequalizer"]], ["add", "def", "wide_coequalizer", ["category_theory", "limits"]], ["add", "def", "wide_coequalizer_is_wide_coequalizer", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "wide_equalizer"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "wide_equalizer"]], ["add", "def", "lift'", ["category_theory", "limits", "wide_equalizer"]], ["add", "def", "lift", ["category_theory", "limits", "wide_equalizer"]], ["add", "theorem", "lift_ι", ["category_theory", "limits", "wide_equalizer"]], ["add", "def", "trident", ["category_theory", "limits", "wide_equalizer"]], ["add", "theorem", "trident_ι", ["category_theory", "limits", "wide_equalizer"]], ["add", "theorem", "trident_π_app_zero", ["category_theory", "limits", "wide_equalizer"]], ["add", "def", "ι", ["category_theory", "limits", "wide_equalizer"]], ["add", "def", "wide_equalizer", ["category_theory", "limits"]], ["add", "def", "wide_equalizer_is_wide_equalizer", ["category_theory", "limits"]]]}]}, {"timestamp": 1628491786, "sha": "7bb4b273", "message": "feat(group_theory/group_action): Cayley's theorem (#8552)", "changes": [{"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["mod", "def", "to_perm", ["mul_action"]], ["add", "theorem", "to_perm_injective", ["mul_action"]]]}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": []}]}, {"timestamp": 1628471560, "sha": "9e320a22", "message": "chore(measure_theory/special_functions): add measurability attributes (#8570)\nThat attribute makes the `measurability` tactic aware of those lemmas.", "changes": [{"oldPath": "src/measure_theory/special_functions.lean", "newPath": "src/measure_theory/special_functions.lean", "changes": [["mod", "theorem", "measurable_arg", ["complex"]], ["mod", "theorem", "measurable_cos", ["complex"]], ["mod", "theorem", "measurable_cosh", ["complex"]], ["mod", "theorem", "measurable_exp", ["complex"]], ["mod", "theorem", "measurable_im", ["complex"]], ["mod", "theorem", "measurable_log", ["complex"]], ["mod", "theorem", "measurable_of_real", ["complex"]], ["mod", "theorem", "measurable_re", ["complex"]], ["mod", "theorem", "measurable_sin", ["complex"]], ["mod", "theorem", "measurable_sinh", ["complex"]], ["mod", "theorem", "arctan", ["measurable"]], ["mod", "theorem", "carg", ["measurable"]], ["mod", "theorem", "ccos", ["measurable"]], ["mod", "theorem", "ccosh", ["measurable"]], ["mod", "theorem", "cexp", ["measurable"]], ["mod", "theorem", "clog", ["measurable"]], ["mod", "theorem", "cos", ["measurable"]], ["mod", "theorem", "cosh", ["measurable"]], ["mod", "theorem", "csin", ["measurable"]], ["mod", "theorem", "csinh", ["measurable"]], ["mod", "theorem", "exp", ["measurable"]], ["mod", "theorem", "log", ["measurable"]], ["mod", "theorem", "sin", ["measurable"]], ["mod", "theorem", "sinh", ["measurable"]], ["mod", "theorem", "sqrt", ["measurable"]], ["mod", "theorem", "measurable_arccos", ["real"]], ["mod", "theorem", "measurable_arcsin", ["real"]], ["mod", "theorem", "measurable_arctan", ["real"]], ["mod", "theorem", "measurable_cos", ["real"]], ["mod", "theorem", "measurable_cosh", ["real"]], ["mod", "theorem", "measurable_exp", ["real"]], ["mod", "theorem", "measurable_log", ["real"]], ["mod", "theorem", "measurable_sin", ["real"]], ["mod", "theorem", "measurable_sinh", ["real"]]]}]}, {"timestamp": 1628450311, "sha": "ea772710", "message": "chore(analysis/calculus/{f,}deriv): fix, add missing lemmas (#8574)\n* use `prod.fst` and `prod.snd` in lemmas like `has_fderiv_at_fst`;\n* add `has_strict_deriv_at.prod`,\n `has_strict_fderiv_at.comp_has_strict_deriv_at`;\n* use `set.maps_to` in some lemmas;\n* golf some proofs.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "comp_has_deriv_at", ["has_fderiv_at"]], ["add", "theorem", "prod", ["has_strict_deriv_at"]], ["add", "theorem", "comp_has_strict_deriv_at", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "has_fderiv_at_fst", []], ["mod", "theorem", "has_fderiv_at_snd", []], ["mod", "theorem", "has_strict_fderiv_at_fst", []], ["mod", "theorem", "has_strict_fderiv_at_snd", []]]}]}, {"timestamp": 1628443617, "sha": "3788cbfa", "message": "chore(algebra/*, data/polynomial/*): remove unnecessary imports (#8578)\nI cleaned up all of `data.polynomial`, and the files in `algebra` it imports.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/prod.lean", "newPath": "src/algebra/module/prod.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": []}, {"oldPath": "src/data/equiv/ring_aut.lean", "newPath": "src/data/equiv/ring_aut.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/data/polynomial/inductions.lean", "newPath": "src/data/polynomial/inductions.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1628423508, "sha": "87e9becc", "message": "chore(linear_algebra/matrix/trace): relax `comm_ring` to `comm_semiring` in `matrix.trace_mul_comm` (#8577)", "changes": [{"oldPath": "src/linear_algebra/matrix/trace.lean", "newPath": "src/linear_algebra/matrix/trace.lean", "changes": [["mod", "theorem", "trace_mul_comm", ["matrix"]]]}]}, {"timestamp": 1628373843, "sha": "0a79eec3", "message": "fix(order/bounds): remove double space (#8575)", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "def", "upper_bounds", []]]}]}, {"timestamp": 1628368368, "sha": "575fcc65", "message": "refactor(data/nat/choose): reduce assumptions on lemmas (#8508)\n- rename `nat.choose_eq_factorial_div_factorial'` to `nat.cast_choose`\n- change the cast from `ℚ` to any `char_zero` field\n- get rid of the cast in `nat.choose_mul`. Generalization ensues.", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "theorem", "choose_mul", ["nat"]]]}, {"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": [["add", "theorem", "cast_choose", ["nat"]], ["del", "theorem", "choose_eq_factorial_div_factorial'", ["nat"]], ["del", "theorem", "choose_mul", ["nat"]]]}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}]}, {"timestamp": 1628366022, "sha": "d7579961", "message": "feat(analysis/complex): prove that complex functions are conformal if and only if the functions are holomorphic/antiholomorphic with nonvanishing differential (#8424)\nComplex functions are conformal if and only if the functions are holomorphic/antiholomorphic with nonvanishing differential.", "changes": [{"oldPath": "src/analysis/calculus/conformal.lean", "newPath": "src/analysis/calculus/conformal.lean", "changes": [["del", "theorem", "preserves_angle", ["conformal_at"]]]}, {"oldPath": null, "newPath": "src/analysis/complex/conformal.lean", "changes": [["add", "theorem", "is_complex_or_conj_linear", ["is_conformal_map"]], ["add", "theorem", "is_conformal_map_complex_linear", []], ["add", "theorem", "is_conformal_map_complex_linear_conj", []], ["add", "theorem", "is_conformal_map_conj", []], ["add", "theorem", "is_conformal_map_iff_is_complex_or_conj_linear:", []]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": [["add", "theorem", "conformal_at_iff_differentiable_at_or_differentiable_at_comp_conj", []], ["add", "theorem", "conformal_at", ["differentiable_at"]]]}, {"oldPath": "src/analysis/normed_space/conformal_linear_map.lean", "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": [["add", "theorem", "ne_zero", ["is_conformal_map"]], ["del", "theorem", "preserves_angle", ["is_conformal_map"]], ["add", "theorem", "is_conformal_map", ["linear_isometry"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "preserves_angle", ["inner_product_geometry", "conformal_at"]], ["add", "theorem", "preserves_angle", ["inner_product_geometry", "is_conformal_map"]]]}]}, {"timestamp": 1628295410, "sha": "b3c1de6a", "message": "feat(analysis/complex/basic): add several trivial lemmas for differentiable functions. (#8418)\nThis file relates the differentiability of a function to the linearity of its `fderiv`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_restrict_scalars", ["differentiable_at"]], ["add", "theorem", "differentiable_at_iff_restrict_scalars", []], ["add", "theorem", "differentiable_within_at_iff_restrict_scalars", []], ["add", "theorem", "has_fderiv_at_of_restrict_scalars", []], ["add", "theorem", "has_fderiv_within_at_of_restrict_scalars", []]]}]}, {"timestamp": 1628284520, "sha": "2f29e090", "message": "feat(group_action/defs): generalize faithful actions (#8555)\nThis generalizes the `faithful_mul_semiring_action` typeclass to a mixin typeclass `has_faithful_scalar`, and provides instances for some simple actions:\n* `has_faithful_scalar α α` (on cancellative monoids and monoids with zero)\n* `has_faithful_scalar (opposite α) α`\n* `has_faithful_scalar α (Π i, f i)`\n* `has_faithful_scalar (units A) B`\n* `has_faithful_scalar (equiv.perm α) α`\n* `has_faithful_scalar M (α × β)`\n* `has_faithful_scalar R (α →₀ M)`\n* `has_faithful_scalar S (polynomial R)` (generalized from an existing instance)\n* `has_faithful_scalar R (mv_polynomial σ S₁)`\n* `has_faithful_scalar R (monoid_algebra k G)`\n* `has_faithful_scalar R (add_monoid_algebra k G)`\nAs well as retaining the one other existing instance\n* `faithful_mul_semiring_action ↥H E` where `H : subgroup (E ≃ₐ[F] E)`\nThe lemmas taking `faithful_mul_semiring_action` as a typeclass argument have been converted to use the new typeclass, but no attempt has been made to weaken their other hypotheses.", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "theorem", "eq_of_smul_eq_smul", []], ["mod", "theorem", "to_ring_hom_injective", []]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "has_faithful_scalar_at", ["pi"]]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "smul_left_injective'", []]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/prod.lean", "newPath": "src/group_theory/group_action/prod.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/units.lean", "newPath": "src/group_theory/group_action/units.lean", "changes": []}]}, {"timestamp": 1628271758, "sha": "1b876c7d", "message": "chore(algebra/ordered_group): fix/add `order_dual` instances, add lemmas (#8564)\n* add `order_dual.has_inv`, `order_dual.group`, `order_dual.comm_group`;\n* use new instances in `order_dual.ordered_comm_group` and\n `order_dual.linear_ordered_comm_group` (earlier we had only additive\n versions);\n* add `le_of_forall_neg_add_le`, `le_of_forall_pos_sub_le`,\n `le_iff_forall_neg_add_le` and their multiplicative versions.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "le_iff_forall_lt_one_mul_le", []], ["add", "theorem", "le_of_forall_lt_one_mul_le", []], ["add", "theorem", "le_of_forall_one_lt_div_le", []]]}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}]}, {"timestamp": 1628265235, "sha": "88f9480d", "message": "feat(logic/embedding): subtype_or_{embedding,equiv} (#8489)\nProvide explicit embedding from a subtype of a disjuction into a sum type.\nIf the disjunction is disjoint, upgrade to an equiv.\nAdditionally, provide `subtype.imp_embedding`, lowering a subtype\nalong an implication.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "imp_embedding", ["subtype"]], ["add", "def", "subtype_or_equiv", []], ["add", "theorem", "subtype_or_equiv_symm_inl", []], ["add", "theorem", "subtype_or_equiv_symm_inr", []], ["add", "def", "subtype_or_left_embedding", []], ["add", "theorem", "subtype_or_left_embedding_apply_left", []], ["add", "theorem", "subtype_or_left_embedding_apply_right", []]]}]}, {"timestamp": 1628246524, "sha": "a23c47ca", "message": "feat(topology/instances/ennreal): ediam of intervals (#8546)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "zero_eq_of_real", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_finset_prod_of_ne_top", ["ennreal"]], ["mod", "theorem", "diam_eq", ["real"]], ["add", "theorem", "ediam_Icc", ["real"]], ["add", "theorem", "ediam_Ico", ["real"]], ["add", "theorem", "ediam_Ioc", ["real"]], ["add", "theorem", "ediam_Ioo", ["real"]], ["mod", "theorem", "ediam_eq", ["real"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_pi_le_iff", []], ["add", "theorem", "diam_pi_le_of_le", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/holder.lean", "newPath": "src/topology/metric_space/holder.lean", "changes": []}]}, {"timestamp": 1628242112, "sha": "da32780c", "message": "chore(data/polynomial/*): create file `data/polynomial/inductions` and move around lemmas (#8563)\nThis PR is a precursor to #8463: it performs the move, without introducing lemmas and squeezes some `simp`s to make some proofs faster.\nI added add a doc-string to `lemma degree_pos_induction_on` with a reference to a lemma that will appear in #8463.\nThe main reason why there are more added lines than removed ones is that the creation of a new file has a copyright statement, a module documentation and a few variable declarations.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "C_mul_X_pow_eq_self", ["polynomial"]], ["add", "theorem", "monomial_nat_degree_leading_coeff_eq_self", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["del", "theorem", "C_mul_X_pow_eq_self", ["polynomial"]], ["del", "theorem", "degree_map'", ["polynomial"]], ["del", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["del", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["del", "theorem", "leading_coeff_map'", ["polynomial"]], ["del", "theorem", "leading_coeff_map_of_leading_coeff_ne_zero", ["polynomial"]], ["del", "theorem", "monomial_nat_degree_leading_coeff_eq_self", ["polynomial"]], ["del", "theorem", "nat_degree_map'", ["polynomial"]], ["del", "theorem", "nat_degree_map_of_leading_coeff_ne_zero", ["polynomial"]], ["del", "theorem", "next_coeff_map", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["del", "theorem", "coeff_div_X", ["polynomial"]], ["del", "theorem", "degree_div_X_lt", ["polynomial"]], ["del", "theorem", "degree_pos_induction_on", ["polynomial"]], ["del", "def", "div_X", ["polynomial"]], ["del", "theorem", "div_X_C", ["polynomial"]], ["del", "theorem", "div_X_add", ["polynomial"]], ["del", "theorem", "div_X_eq_zero_iff", ["polynomial"]], ["del", "theorem", "div_X_mul_X_add", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_map_of_leading_coeff_ne_zero", ["polynomial"]], ["add", "theorem", "nat_degree_map_of_leading_coeff_ne_zero", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/inductions.lean", "changes": [["add", "theorem", "coeff_div_X", ["polynomial"]], ["add", "theorem", "degree_div_X_lt", ["polynomial"]], ["add", "theorem", "degree_pos_induction_on", ["polynomial"]], ["add", "def", "div_X", ["polynomial"]], ["add", "theorem", "div_X_C", ["polynomial"]], ["add", "theorem", "div_X_add", ["polynomial"]], ["add", "theorem", "div_X_eq_zero_iff", ["polynomial"]], ["add", "theorem", "div_X_mul_X_add", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "degree_map'", ["polynomial"]], ["add", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["add", "theorem", "leading_coeff_map'", ["polynomial"]], ["add", "theorem", "nat_degree_map'", ["polynomial"]], ["add", "theorem", "next_coeff_map", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1628242111, "sha": "b9e4c084", "message": "refactor(algebra/regular): split out `is_regular` (#8561)\nOne would like to import `is_regular` for rings. However, group powers\nare too late in the algebra hierarchy,\nso the proofs of powers of regular elements are factored\nout to a separate file.", "changes": [{"oldPath": "src/algebra/regular.lean", "newPath": "src/algebra/regular/basic.lean", "changes": [["del", "theorem", "pow", ["is_left_regular"]], ["del", "theorem", "pow_iff", ["is_left_regular"]], ["del", "theorem", "pow", ["is_regular"]], ["del", "theorem", "pow_iff", ["is_regular"]], ["del", "theorem", "pow", ["is_right_regular"]], ["del", "theorem", "pow_iff", ["is_right_regular"]]]}, {"oldPath": null, "newPath": "src/algebra/regular/pow.lean", "changes": [["add", "theorem", "pow", ["is_left_regular"]], ["add", "theorem", "pow_iff", ["is_left_regular"]], ["add", "theorem", "pow", ["is_regular"]], ["add", "theorem", "pow_iff", ["is_regular"]], ["add", "theorem", "pow", ["is_right_regular"]], ["add", "theorem", "pow_iff", ["is_right_regular"]]]}, {"oldPath": "src/algebra/smul_regular.lean", "newPath": "src/algebra/regular/smul.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}]}, {"timestamp": 1628242110, "sha": "59c8befc", "message": "feat (order/liminf_limsup): frequently_lt_of_lt_limsup (#8548)", "changes": [{"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "frequently_lt_of_liminf_lt", ["filter"]], ["add", "theorem", "frequently_lt_of_lt_limsup", ["filter"]]]}]}, {"timestamp": 1628242109, "sha": "f471b899", "message": "feat(topology,geometry/manifold): continuous and smooth partition of unity (#8281)\nFixes #6392", "changes": [{"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": [["add", "theorem", "coe_to_smooth_partition_of_unity", ["bump_covering"]], ["add", "theorem", "to_smooth_partition_of_unity", ["bump_covering", "is_subordinate"]], ["add", "theorem", "smooth_to_partition_of_unity", ["bump_covering"]], ["add", "def", "to_smooth_partition_of_unity", ["bump_covering"]], ["add", "theorem", "to_smooth_partition_of_unity_to_partition_of_unity", ["bump_covering"]], ["add", "theorem", "exists_smooth_zero_one_of_closed", []], ["del", "def", "choice", ["smooth_bump_covering"]], ["del", "def", "choice_set", ["smooth_bump_covering"]], ["mod", "theorem", "coe_mk", ["smooth_bump_covering"]], ["add", "theorem", "exists_finset_to_smooth_partition_of_unity_eventually_eq", ["smooth_bump_covering"]], ["mod", "def", "ind", ["smooth_bump_covering"]], ["add", "theorem", "support_subset", ["smooth_bump_covering", "is_subordinate"]], ["add", "theorem", "to_smooth_partition_of_unity", ["smooth_bump_covering", "is_subordinate"]], ["mod", "def", "is_subordinate", ["smooth_bump_covering"]], ["add", "theorem", "is_subordinate_to_bump_covering", ["smooth_bump_covering"]], ["mod", "theorem", "mem_chart_at_source_of_eq_one", ["smooth_bump_covering"]], ["mod", "theorem", "mem_ext_chart_at_source_of_eq_one", ["smooth_bump_covering"]], ["add", "theorem", "sum_to_smooth_partition_of_unity_eq", ["smooth_bump_covering"]], ["add", "theorem", "support_to_smooth_partition_of_unity_subset", ["smooth_bump_covering"]], ["add", "def", "to_bump_covering", ["smooth_bump_covering"]], ["add", "def", "to_smooth_partition_of_unity", ["smooth_bump_covering"]], ["add", "theorem", "to_smooth_partition_of_unity_apply", ["smooth_bump_covering"]], ["add", "theorem", "to_smooth_partition_of_unity_eq_mul_prod", ["smooth_bump_covering"]], ["add", "theorem", "to_smooth_partition_of_unity_zero_of_zero", ["smooth_bump_covering"]], ["mod", "structure", "smooth_bump_covering", []], ["add", "theorem", "exists_is_subordinate", ["smooth_partition_of_unity"]], ["add", "def", "is_subordinate", ["smooth_partition_of_unity"]], ["add", "theorem", "is_subordinate_to_partition_of_unity", ["smooth_partition_of_unity"]], ["add", "theorem", "le_one", ["smooth_partition_of_unity"]], ["add", "theorem", "nonneg", ["smooth_partition_of_unity"]], ["add", "def", "single", ["smooth_partition_of_unity"]], ["add", "theorem", "smooth_sum", ["smooth_partition_of_unity"]], ["add", "theorem", "sum_eq_one", ["smooth_partition_of_unity"]], ["add", "theorem", "sum_le_one", ["smooth_partition_of_unity"]], ["add", "theorem", "sum_nonneg", ["smooth_partition_of_unity"]], ["add", "def", "to_partition_of_unity", ["smooth_partition_of_unity"]], ["add", "structure", "smooth_partition_of_unity", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "smooth_at_one", []], ["add", "theorem", "smooth_on_one", []], ["add", "theorem", "smooth_one", []], ["add", "theorem", "smooth_within_at_one", []], ["add", "theorem", "times_cont_mdiff_at_one", []], ["add", "theorem", "times_cont_mdiff_on_one", []], ["add", "theorem", "times_cont_mdiff_one", []], ["add", "theorem", "times_cont_mdiff_within_at_one", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": [["add", "theorem", "coe_fn_mk", ["times_cont_mdiff_map"]]]}, {"oldPath": "src/geometry/manifold/whitney_embedding.lean", "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": [["add", "theorem", "exists_embedding_euclidean_of_compact", []], ["del", "theorem", "exists_embedding_finrank_of_compact", []], ["mod", "def", "embedding_pi_tangent", ["smooth_bump_covering"]], ["mod", "theorem", "embedding_pi_tangent_inj_on", ["smooth_bump_covering"]], ["mod", "theorem", "embedding_pi_tangent_injective", ["smooth_bump_covering"]], ["add", "theorem", "exists_immersion_euclidean", ["smooth_bump_covering"]], ["del", "theorem", "exists_immersion_finrank", ["smooth_bump_covering"]]]}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/partition_of_unity.lean", "changes": [["add", "theorem", "coe_single", ["bump_covering"]], ["add", "theorem", "continuous_to_pou_fun", ["bump_covering"]], ["add", "theorem", "eventually_eq_one", ["bump_covering"]], ["add", "theorem", "exists_finset_to_partition_of_unity_eventually_eq", ["bump_covering"]], ["add", "theorem", "exists_finset_to_pou_fun_eventually_eq", ["bump_covering"]], ["add", "theorem", "exists_is_subordinate", ["bump_covering"]], ["add", "theorem", "exists_is_subordinate_of_locally_finite", ["bump_covering"]], ["add", "theorem", "exists_is_subordinate_of_locally_finite_of_prop", ["bump_covering"]], ["add", "theorem", "exists_is_subordinate_of_prop", ["bump_covering"]], ["add", "def", "ind", ["bump_covering"]], ["add", "theorem", "ind_apply", ["bump_covering"]], ["add", "theorem", "mono", ["bump_covering", "is_subordinate"]], ["add", "theorem", "to_partition_of_unity", ["bump_covering", "is_subordinate"]], ["add", "def", "is_subordinate", ["bump_covering"]], ["add", "theorem", "le_one", ["bump_covering"]], ["add", "theorem", "nonneg", ["bump_covering"]], ["add", "theorem", "sum_to_partition_of_unity_eq", ["bump_covering"]], ["add", "theorem", "sum_to_pou_fun_eq", ["bump_covering"]], ["add", "theorem", "support_to_partition_of_unity_subset", ["bump_covering"]], ["add", "theorem", "support_to_pou_fun_subset", ["bump_covering"]], ["add", "def", "to_partition_of_unity", ["bump_covering"]], ["add", "theorem", "to_partition_of_unity_apply", ["bump_covering"]], ["add", "theorem", "to_partition_of_unity_eq_mul_prod", ["bump_covering"]], ["add", "theorem", "to_partition_of_unity_zero_of_zero", ["bump_covering"]], ["add", "def", "to_pou_fun", ["bump_covering"]], ["add", "theorem", "to_pou_fun_eq_mul_prod", ["bump_covering"]], ["add", "theorem", "to_pou_fun_zero_of_zero", ["bump_covering"]], ["add", "structure", "bump_covering", []], ["add", "theorem", "exists_is_subordinate", ["partition_of_unity"]], ["add", "theorem", "exists_is_subordinate_of_locally_finite", ["partition_of_unity"]], ["add", "def", "is_subordinate", ["partition_of_unity"]], ["add", "theorem", "le_one", ["partition_of_unity"]], ["add", "theorem", "nonneg", ["partition_of_unity"]], ["add", "theorem", "sum_eq_one", ["partition_of_unity"]], ["add", "theorem", "sum_le_one", ["partition_of_unity"]], ["add", "theorem", "sum_nonneg", ["partition_of_unity"]], ["add", "structure", "partition_of_unity", []]]}]}, {"timestamp": 1628233168, "sha": "dc6adcc8", "message": "feat(order/bounded_lattice): define the `distrib_lattice_bot` typeclass (#8507)\nTypeclass for a distributive lattice with a least element.\nThis typeclass is used to generalize `disjoint_sup_left` and similar.\nIt inserts itself in the hierarchy between `semilattice_sup_bot, semilattice_inf_bot` and `generalized_boolean_algebra`, `bounded_distrib_lattice`. I am doing it through `extends`.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": [["mod", "theorem", "partial_sups_disjoint_of_disjoint", []]]}, {"oldPath": "src/order/symm_diff.lean", "newPath": "src/order/symm_diff.lean", "changes": [["mod", "theorem", "disjoint_symm_diff_of_disjoint", ["disjoint"]]]}]}, {"timestamp": 1628216268, "sha": "e28d9451", "message": "chore(scripts): update nolints.txt (#8562)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1628208722, "sha": "c2a0532f", "message": "feat(logic/unique,data/fintype/basic): unique and fintype of subtype of one element (#8491)\nAdditionally, a lemma proving that the cardinality of such a subtype is 1.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_subtype_eq'", ["fintype"]], ["add", "theorem", "card_subtype_eq", ["fintype"]]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}]}, {"timestamp": 1628196561, "sha": "eb73c357", "message": "docs(order/complete_boolean_algebra): add module docstring, add whitespaces (#8525)", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["mod", "theorem", "Inf_sup_Inf", []], ["mod", "theorem", "Sup_inf_Sup", []], ["mod", "theorem", "compl_Inf", []], ["mod", "theorem", "compl_Sup", []], ["mod", "theorem", "compl_infi", []], ["mod", "theorem", "compl_supr", []]]}]}, {"timestamp": 1628190184, "sha": "c2ed7dcc", "message": "feat(logic/basic): `ite p a b` is equal to `a` or `b` (#8557)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ite_eq_or_eq", []]]}]}, {"timestamp": 1628190183, "sha": "52b6516b", "message": "refactor(order/disjointed): generalize `disjointed` to generalized boolean algebras (#8409)\n- Split `data.set.disjointed` into `data.set.pairwise` and `order.disjointed`. Change imports accordingly.\n- In `order.disjointed`, change `set α` to `generalized_boolean_algebra α`. Redefine `disjointed` in terms of `partial_sups` to avoid needing completeness. Keep set notation variants of lemmas for easier unification.\n- Rename some lemmas and reorder their arguments to make dot notation functional.\n- Generalize some (where some = 2) `pairwise` lemmas.\n- Delete lemmas which are unused and are a straightforward `rw` away from a simpler one (`Union_disjointed_of_mono`).", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bInter_lt_succ", ["set"]], ["add", "theorem", "bUnion_lt_succ", ["set"]]]}, {"oldPath": "src/data/set/pairwise.lean", "newPath": "src/data/set/pairwise.lean", "changes": [["mod", "theorem", "mono", ["pairwise"]], ["add", "theorem", "pairwise_disjoint_on", []], ["del", "theorem", "pairwise_disjoint_on_nat", []], ["del", "theorem", "pairwise_on_nat", []], ["add", "theorem", "pairwise_on", ["symmetric"]]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/measure_theory/regular.lean", "newPath": "src/measure_theory/regular.lean", "changes": []}, {"oldPath": "src/order/disjointed.lean", "newPath": "src/order/disjointed.lean", "changes": [["add", "theorem", "Union_disjointed", []], ["add", "theorem", "disjoint_disjointed", []], ["add", "def", "disjointed", []], ["add", "theorem", "disjointed_eq_inf_compl", []], ["add", "theorem", "disjointed_eq_inter_compl", []], ["add", "theorem", "disjointed_le", []], ["add", "theorem", "disjointed_le_id", []], ["add", "def", "disjointed_rec", []], ["add", "theorem", "disjointed_rec_zero", []], ["add", "theorem", "disjointed_subset", []], ["add", "theorem", "disjointed_succ", []], ["add", "theorem", "disjointed_unique", []], ["add", "theorem", "disjointed_zero", []], ["add", "theorem", "disjointed_eq", ["monotone"]], ["add", "theorem", "partial_sups_disjointed", []], ["del", "theorem", "Inter_lt_succ", ["set"]], ["del", "theorem", "Union_disjointed", ["set"]], ["del", "theorem", "Union_disjointed_of_mono", ["set"]], ["del", "theorem", "Union_lt_succ", ["set"]], ["del", "theorem", "disjoint_disjointed'", ["set"]], ["del", "theorem", "disjoint_disjointed", ["set"]], ["del", "def", "disjointed", ["set"]], ["del", "theorem", "disjointed_induct", ["set"]], ["del", "theorem", "disjointed_of_mono", ["set"]], ["del", "theorem", "disjointed_subset", ["set"]], ["del", "theorem", "subset_Union_disjointed", ["set"]], ["add", "theorem", "supr_disjointed", []]]}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": []}]}, {"timestamp": 1628180889, "sha": "8e79ea53", "message": "feat(data/matrix/basic): add `alg_(hom|equiv).map_matrix` (#8527)\nThis also adds a few standalone lemmas about `algebra_map`.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "map_matrix", ["alg_equiv"]], ["add", "theorem", "map_matrix_refl", ["alg_equiv"]], ["add", "theorem", "map_matrix_symm", ["alg_equiv"]], ["add", "theorem", "map_matrix_trans", ["alg_equiv"]], ["add", "def", "map_matrix", ["alg_hom"]], ["add", "theorem", "map_matrix_comp", ["alg_hom"]], ["add", "theorem", "map_matrix_id", ["alg_hom"]], ["add", "theorem", "algebra_map_eq_diagonal", ["matrix"]], ["add", "theorem", "algebra_map_eq_diagonal_ring_hom", ["matrix"]], ["add", "theorem", "map_algebra_map", ["matrix"]]]}]}, {"timestamp": 1628166243, "sha": "a0cb45fe", "message": "feat(linear_algebra/clifford_algebra): the reals and complex numbers have isomorphic real clifford algebras (#8165)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/equivs.lean", "changes": [["add", "def", "Q", ["clifford_algebra_complex"]], ["add", "theorem", "Q_apply", ["clifford_algebra_complex"]], ["add", "def", "to_complex", ["clifford_algebra_complex"]], ["add", "theorem", "to_complex_ι", ["clifford_algebra_complex"]], ["add", "theorem", "ι_eq_zero", ["clifford_algebra_ring"]]]}]}, {"timestamp": 1628113215, "sha": "ee8e447e", "message": "chore(category_theory/whiskering): Fix docstring (#8533)", "changes": [{"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}]}, {"timestamp": 1628106369, "sha": "d24faea6", "message": "chore(data/real/basic): drop some lemmas (#8523)\nDrop `real.Sup_le`, `real.lt_Sup`, `real.le_Sup`, `real.Sup_le_ub`, `real.le_Inf`, `real.Inf_lt`, `real.Inf_le`, `real.lb_le_Inf`. Use lemmas about `conditionally_complete_lattice`s instead.\nAlso drop unneeded assumptions in `real.lt_Inf_add_pos` and `real.add_neg_lt_Sup`.", "changes": [{"oldPath": "archive/imo/imo1972_b2.lean", "newPath": "archive/imo/imo1972_b2.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "inv_empty", ["set"]], ["add", "theorem", "inv_univ", ["set"]], ["add", "theorem", "inv", ["set", "nonempty"]], ["add", "theorem", "nonempty_inv", ["set"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "theorem", "Inf_def", ["real"]], ["del", "theorem", "Inf_le", ["real"]], ["del", "theorem", "Inf_lt", ["real"]], ["del", "theorem", "Sup_le", ["real"]], ["del", "theorem", "Sup_le_ub", ["real"]], ["mod", "theorem", "add_neg_lt_Sup", ["real"]], ["del", "theorem", "lb_le_Inf", ["real"]], ["del", "theorem", "le_Inf", ["real"]], ["del", "theorem", "le_Sup", ["real"]], ["mod", "theorem", "lt_Inf_add_pos", ["real"]], ["del", "theorem", "lt_Sup", ["real"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nonempty_preimage", ["function", "surjective"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1628094015, "sha": "4e9b18b6", "message": "chore(order/basic): rename monotone_of_monotone_nat and strict_mono.nat (#8550)\nFor more coherence (and easier discoverability), rename `monotone_of_monotone_nat` to `monotone_nat_of_le_succ`, and `strict_mono.nat` to `strict_mono_nat_of_lt_succ`.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "archive/imo/imo1977_q6.lean", "newPath": "archive/imo/imo1977_q6.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/regular.lean", "newPath": "src/measure_theory/regular.lean", "changes": []}, {"oldPath": "src/number_theory/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "monotone_nat_of_le_succ", []], ["del", "theorem", "monotone_of_monotone_nat", []], ["add", "theorem", "strict_mono_nat_of_lt_succ", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/urysohns_lemma.lean", "newPath": "src/topology/urysohns_lemma.lean", "changes": []}]}, {"timestamp": 1628067517, "sha": "3a9b25dd", "message": "fix(order/lattice): make non-instances reducible (#8541)\nSome early fixes for the new linter in #8540.", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1628067516, "sha": "1691c6c2", "message": "feat(algebra/opposites): {add,mul,ring}_equiv.op (#8535)\nWe had the equivalences of homs. Now we have equivalences of isos.", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "def", "op", ["add_equiv"]], ["add", "def", "unop", ["add_equiv"]], ["add", "def", "op", ["mul_equiv"]], ["add", "def", "unop", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}]}, {"timestamp": 1628067515, "sha": "096bdb7a", "message": "refactor(group_theory/solvable): move subgroup commutators into new file (#8534)\nThe theory of nilpotent subgroups also needs a theory of general commutators (if H,K : subgroup G then so is [H,K]), but I don't really want to import solvable groups to get nilpotent groups, so I am breaking the solvable group file into two, splitting off the API for these commutators.", "changes": [{"oldPath": null, "newPath": "src/group_theory/general_commutator.lean", "changes": [["add", "theorem", "bot_general_commutator", []], ["add", "theorem", "general_commutator_bot", []], ["add", "theorem", "general_commutator_comm", []], ["add", "theorem", "general_commutator_containment", []], ["add", "theorem", "general_commutator_def'", []], ["add", "theorem", "general_commutator_def", []], ["add", "theorem", "general_commutator_le", []], ["add", "theorem", "general_commutator_le_inf", []], ["add", "theorem", "general_commutator_le_left", []], ["add", "theorem", "general_commutator_le_right", []], ["add", "theorem", "general_commutator_mono", []]]}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["del", "theorem", "bot_general_commutator", []], ["del", "theorem", "general_commutator_bot", []], ["del", "theorem", "general_commutator_comm", []], ["del", "theorem", "general_commutator_containment", []], ["del", "theorem", "general_commutator_def'", []], ["del", "theorem", "general_commutator_def", []], ["del", "theorem", "general_commutator_le", []], ["del", "theorem", "general_commutator_le_inf", []], ["del", "theorem", "general_commutator_le_left", []], ["del", "theorem", "general_commutator_le_right", []], ["del", "theorem", "general_commutator_mono", []]]}]}, {"timestamp": 1628060750, "sha": "292e3fa1", "message": "refactor(nat/basic): Move lemma about nat (#8539)", "changes": [{"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "succ_eq_one_add", ["nat"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "succ_eq_one_add", ["nat"]]]}]}, {"timestamp": 1628021943, "sha": "85025718", "message": "feat(topology/discrete_quotient): add two lemmas (#8464)\nAdd lemmas `proj_bot_injective` and `proj_bot_bijective`, the former needed for the latter, and the latter needed in LTE.", "changes": [{"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": [["add", "theorem", "proj_bot_bijective", ["discrete_quotient"]], ["add", "theorem", "proj_bot_injective", ["discrete_quotient"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_clopen_discrete", []]]}]}, {"timestamp": 1628019808, "sha": "d366672e", "message": "feat(measure_theory/integration): add some `with_density` lemmas (#8517)", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "finite_measure_with_density", ["measure_theory"]], ["add", "theorem", "lintegral_in_measure_zero", ["measure_theory"]], ["add", "theorem", "with_density_absolutely_continuous", ["measure_theory"]], ["add", "theorem", "with_density_add", ["measure_theory"]], ["add", "theorem", "with_density_smul'", ["measure_theory"]], ["add", "theorem", "with_density_smul", ["measure_theory"]]]}]}, {"timestamp": 1628013351, "sha": "9d129dc2", "message": "feat(algebra/bounds): a few lemmas like `bdd_above (-s) ↔ bdd_below s` (#8522)", "changes": [{"oldPath": null, "newPath": "src/algebra/bounds.lean", "changes": [["add", "theorem", "inv", ["bdd_above"]], ["add", "theorem", "mul", ["bdd_above"]], ["add", "theorem", "bdd_above_inv", []], ["add", "theorem", "inv", ["bdd_below"]], ["add", "theorem", "mul", ["bdd_below"]], ["add", "theorem", "bdd_below_inv", []], ["add", "theorem", "inv", ["is_glb"]], ["add", "theorem", "is_glb_inv'", []], ["add", "theorem", "is_glb_inv", []], ["add", "theorem", "inv", ["is_lub"]], ["add", "theorem", "is_lub_inv'", []], ["add", "theorem", "is_lub_inv", []], ["add", "theorem", "mul_mem_lower_bounds_mul", []], ["add", "theorem", "mul_mem_upper_bounds_mul", []], ["add", "theorem", "subset_lower_bounds_mul", []], ["add", "theorem", "subset_upper_bounds_mul", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "is_glb_image'", ["order_iso"]], ["add", "theorem", "is_glb_preimage'", ["order_iso"]], ["add", "theorem", "is_lub_image'", ["order_iso"]], ["add", "theorem", "is_lub_preimage'", ["order_iso"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "bdd_above_preimage", ["order_iso"]], ["add", "theorem", "bdd_below_preimage", ["order_iso"]]]}]}, {"timestamp": 1628009531, "sha": "c543ec9a", "message": "feat(topology/algebra/ordered/basic): sequences tending to Inf/Sup (#8524)\nWe show that there exist monotone sequences tending to the Inf/Sup of a set in a conditionally complete linear order, as well as several related lemmas expressed in terms of `is_lub` and `is_glb`.", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "exists_seq_strict_antimono_tendsto", []], ["add", "theorem", "exists_seq_strict_mono_tendsto", []], ["add", "theorem", "exists_seq_tendsto_Inf", []], ["add", "theorem", "exists_seq_tendsto_Sup", []], ["add", "theorem", "exists_seq_monotone_tendsto'", ["is_glb"]], ["add", "theorem", "exists_seq_monotone_tendsto", ["is_glb"]], ["add", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem'", ["is_glb"]], ["add", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem", ["is_glb"]], ["add", "theorem", "is_glb_of_mem_closure", []], ["add", "theorem", "exists_seq_monotone_tendsto'", ["is_lub"]], ["add", "theorem", "exists_seq_monotone_tendsto", ["is_lub"]], ["add", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem'", ["is_lub"]], ["add", "theorem", "exists_seq_strict_mono_tendsto_of_not_mem", ["is_lub"]], ["add", "theorem", "is_lub_of_mem_closure", []]]}]}, {"timestamp": 1628005269, "sha": "2b3cffd3", "message": "feat(algebra/floor): notation for nat_floor and nat_ceil (#8526)\nWe introduce the notations ` ⌊a⌋₊` for `nat_floor a` and `⌈a⌉₊` for `nat_ceil a`, mimicking the existing notations for `floor` and `ceil` (with the `+` corresponding to the recent notation for `nnnorm`).", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["mod", "theorem", "ceil_eq_on_Ioc'", []], ["mod", "theorem", "ceil_eq_on_Ioc", []], ["mod", "theorem", "floor_eq_on_Ico'", []], ["mod", "theorem", "floor_eq_on_Ico", []], ["mod", "theorem", "preimage_Ici", ["int"]], ["mod", "theorem", "preimage_Iic", ["int"]], ["mod", "theorem", "preimage_Iio", ["int"]], ["mod", "theorem", "preimage_Ioi", ["int"]], ["mod", "theorem", "le_nat_ceil", []], ["mod", "theorem", "le_nat_floor_iff", []], ["mod", "theorem", "le_nat_floor_of_le", []], ["mod", "theorem", "le_of_nat_ceil_le", []], ["mod", "theorem", "lt_nat_ceil", []], ["mod", "theorem", "lt_nat_floor_add_one", []], ["mod", "theorem", "lt_of_lt_nat_floor", []], ["mod", "theorem", "lt_of_nat_ceil_lt", []], ["mod", "theorem", "nat_ceil_add_nat", []], ["mod", "theorem", "nat_ceil_coe", []], ["mod", "theorem", "nat_ceil_le", []], ["mod", "theorem", "nat_ceil_lt_add_one", []], ["mod", "theorem", "nat_ceil_mono", []], ["mod", "theorem", "nat_ceil_zero", []], ["mod", "theorem", "nat_floor_add_nat", []], ["mod", "theorem", "nat_floor_coe", []], ["mod", "theorem", "nat_floor_eq_zero_iff", []], ["mod", "theorem", "nat_floor_le", []], ["mod", "theorem", "nat_floor_lt_iff", []], ["mod", "theorem", "nat_floor_mono", []], ["mod", "theorem", "nat_floor_of_nonpos", []], ["mod", "theorem", "nat_floor_zero", []], ["mod", "theorem", "pos_of_nat_floor_pos", []]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}]}, {"timestamp": 1627989223, "sha": "1700b3c6", "message": "chore(ring_theory/fractional_ideal): make `coe : ideal → fractional_ideal` a `coe_t` (#8529)\nThis noticeably speeds up elaboration of `dedekind_domain.lean`, since it discourages the elaborator from going down a (nearly?)-looping path.\nSee also this Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Priority.20of.20.60coe_sort_trans.60", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}]}, {"timestamp": 1627989221, "sha": "5afd09aa", "message": "chore(data/matrix/basic): move bundled versions of `matrix.map` beneath the algebra structure (#8528)\nThis will give us an obvious place to add the bundled alg_hom version in a follow-up PR.\nNone of the moved lines have been modified.\nNote that the git diff shows that instead of `matrix.map` moving down, the `algebra` structure has moved up.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1627989220, "sha": "3f4b8368", "message": "feat(order/bounds): add `is_lub_pi` and `is_glb_pi` (#8521)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "monotone_eval", ["function"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "is_glb_pi", []], ["add", "theorem", "is_lub_pi", []]]}]}, {"timestamp": 1627989219, "sha": "ad83714b", "message": "feat(fractional_ideal): `coe : ideal → fractional_ideal` as ring hom (#8511)\nThis PR bundles the coercion from integral ideals to fractional ideals as a ring hom, and proves the missing `simp` lemmas that show the map indeed preserves the ring structure.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "def", "coe_ideal_hom", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_mul", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_sup", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coe_submodule_bot", ["is_localization"]], ["add", "theorem", "coe_submodule_mul", ["is_localization"]], ["add", "theorem", "coe_submodule_sup", ["is_localization"]]]}]}, {"timestamp": 1627982869, "sha": "b681b6b9", "message": "chore(order/bounds): add `@[simp]` attrs, add `not_bdd_*_univ` (#8520)", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "theorem", "lower_bounds_univ", ["no_bot_order"]], ["mod", "theorem", "upper_bounds_univ", ["no_top_order"]], ["add", "theorem", "not_bdd_above_univ", []], ["add", "theorem", "not_bdd_below_univ", []], ["mod", "theorem", "lower_bounds_univ", ["order_bot"]], ["mod", "theorem", "upper_bounds_univ", ["order_top"]]]}]}, {"timestamp": 1627976729, "sha": "10216790", "message": "feat(algebra/ordered_monoid): a few more `order_dual` instances (#8519)\n* add `covariant.flip` and `contravariant.flip`;\n* add `[to_additive]` to `group.covariant_iff_contravariant` and\n `covconv` (renamed to `group.covconv`);\n* use `group.covconv` in\n `group.covariant_class_le.to_contravariant_class_le`;\n* add some `order_dual` instances for `covariant_class` and\n `contravariant_class`;\n* golf `order_dual.ordered_comm_monoid`.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": [["add", "theorem", "flip", ["contravariant"]], ["add", "theorem", "flip", ["covariant"]], ["del", "theorem", "covconv", []], ["add", "theorem", "covconv", ["group"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}]}, {"timestamp": 1627945595, "sha": "0bef4a0b", "message": "feat(algebra/group_with_zero): pullback a `comm_cancel_monoid_with_zero` instance across an injective hom (#8515)\nThis generalizes `function.injective.cancel_monoid_with_zero` to the commutative case.\nSee also: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/A.20submonoid.20of.20a.20.60cancel_monoid_with_zero.60.20also.20cancels", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}]}, {"timestamp": 1627938886, "sha": "2568d41b", "message": "feat(data/matrix/basic): Add bundled versions of matrix.diagonal (#8510)\nAlso shows injectivity of `diagonal`.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "diagonal", ["matrix"]], ["mod", "theorem", "diagonal_add", ["matrix"]], ["add", "def", "diagonal_add_monoid_hom", ["matrix"]], ["add", "def", "diagonal_alg_hom", ["matrix"]], ["add", "theorem", "diagonal_injective", ["matrix"]], ["add", "def", "diagonal_linear_map", ["matrix"]], ["add", "def", "diagonal_ring_hom", ["matrix"]], ["add", "theorem", "diagonal_smul", ["matrix"]]]}]}, {"timestamp": 1627938885, "sha": "77d6c8e8", "message": "feat(simps): better name for additivized simps-lemmas (#8457)\n* When using `@[to_additive foo, simps]`, the additivized simp-lemmas will have name `foo` + projection suffix (or prefix)\n* Also add an option for `@[to_additive]` to accept the attribute with the correct given name. This is only useful when adding the `@[to_additive]` attribute via metaprogramming, so this option cannot be set by the `to_additive` argument parser.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "some_test1", []]]}]}, {"timestamp": 1627935272, "sha": "17f1d28c", "message": "chore(data/matrix): delete each of the `matrix.foo_hom_map_zero` (#8512)\nThese can already be found by `simp` since `matrix.map_zero` is a `simp` lemma, and we can manually use `foo_hom.map_matrix.map_zero` introduced by #8468 instead. They also don't seem to be used anywhere in mathlib, given that deleting them with no replacement causes no build errors.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "theorem", "add_equiv_map_zero", ["matrix"]], ["del", "theorem", "add_monoid_hom_map_zero", ["matrix"]], ["del", "theorem", "alg_equiv_map_one", ["matrix"]], ["del", "theorem", "alg_equiv_map_zero", ["matrix"]], ["del", "theorem", "alg_hom_map_one", ["matrix"]], ["del", "theorem", "alg_hom_map_zero", ["matrix"]], ["del", "theorem", "linear_equiv_map_zero", ["matrix"]], ["del", "theorem", "linear_map_map_zero", ["matrix"]], ["del", "theorem", "ring_equiv_map_one", ["matrix"]], ["del", "theorem", "ring_equiv_map_zero", ["matrix"]], ["del", "theorem", "ring_hom_map_one", ["matrix"]], ["del", "theorem", "ring_hom_map_zero", ["matrix"]], ["del", "theorem", "zero_hom_map_zero", ["matrix"]]]}]}, {"timestamp": 1627923953, "sha": "17b1e7ce", "message": "feat(data/equiv/mul_add): add `equiv.(div,sub)_(left,right)` (#8385)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "div_left_eq_inv_trans_mul_left", ["equiv"]], ["add", "theorem", "div_right_eq_mul_right_inv", ["equiv"]]]}]}, {"timestamp": 1627914133, "sha": "9a251f1e", "message": "refactor(data/matrix/basic): merge duplicate algebra structures (#8486)\nBy putting the algebra instance in the same file as `scalar`, a future patch can probably remove `matrix.scalar` entirely (it's just another spelling of `algebra_map`).\nNote that we actually had two instances of `algebra R (matrix n n R)` in different files, and the second one was strictly more general than the first. This removes the less general one.\nMoving the imports around like this changes the number of simp lemmas available in downstream files, which can make `simp` slow enough to push a proof into a timeout.\nA lot of files were expecting a transitive import of `algebra.algebra.basic` to import `data.fintype.card`, which it no longer does; hence the need to add this import explicitly.\nThere are no new lemmas or generalizations in this change; the old `matrix_algebra` has been deleted, and everything else has been moved with some variables renamed.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "alg_equiv_map_one", ["matrix"]], ["del", "theorem", "alg_equiv_map_zero", ["matrix"]], ["del", "theorem", "alg_hom_map_one", ["matrix"]], ["del", "theorem", "alg_hom_map_zero", ["matrix"]], ["del", "theorem", "algebra_map_eq_smul", ["matrix"]]]}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/Mat.lean", "newPath": "src/category_theory/preadditive/Mat.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "alg_equiv_map_one", ["matrix"]], ["add", "theorem", "alg_equiv_map_zero", ["matrix"]], ["add", "theorem", "alg_hom_map_one", ["matrix"]], ["add", "theorem", "alg_hom_map_zero", ["matrix"]], ["add", "theorem", "algebra_map_eq_smul", ["matrix"]], ["add", "theorem", "algebra_map_matrix_apply", ["matrix"]]]}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/finite_dimensional.lean", "newPath": "src/linear_algebra/matrix/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": [["del", "theorem", "algebra_map_matrix_apply", []]]}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1627907480, "sha": "c8b7816d", "message": "feat(algebra/ordered_monoid): add_eq_bot_iff (#8474)\nbot addition is saturating on the bottom. On the way, typeclass arguments\nwere relaxed to just `[add_semigroup α]`, and helper simp lemmas\nadded for `bot`.\nThe iff lemma added (`add_eq_bot`) is not exactly according to the naming convention, but matches the top lemma and related ones in the naming style, so the style is kept consistent.\nThere is an API proof available, but the defeq proof (using the top equivalent) was used based on suggestions.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["mod", "theorem", "add_bot", ["with_bot"]], ["add", "theorem", "add_eq_bot", ["with_bot"]], ["mod", "theorem", "bot_add", ["with_bot"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_ne_coe", ["with_bot"]], ["add", "theorem", "coe_ne_bot", ["with_bot"]]]}]}, {"timestamp": 1627907479, "sha": "f354c1b1", "message": "feat(order/bounded_lattice): add some disjoint lemmas (#8407)\nThis adds `disjoint.inf_left` and `disjoint.inf_right` (and primed variants) to match the existing `disjoint.sup_left` and `disjoint.sup_right`.\nThis also duplicates these lemmas to use set notation with `inter` instead of `inf`, matching the existing `disjoint.union_left` and `disjoint.union_right`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "inter_left'", ["disjoint"]], ["add", "theorem", "inter_left", ["disjoint"]], ["add", "theorem", "inter_right'", ["disjoint"]], ["add", "theorem", "inter_right", ["disjoint"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "inf_left'", ["disjoint"]], ["add", "theorem", "inf_left", ["disjoint"]], ["add", "theorem", "inf_right'", ["disjoint"]], ["add", "theorem", "inf_right", ["disjoint"]]]}]}, {"timestamp": 1627904303, "sha": "af8e56af", "message": "docs(overview): add holder continuity (#8506)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1627904302, "sha": "25a42309", "message": "chore(data/real/basic): cleanup (#8501)\n* use `is_lub` etc in the statement of `real.exists_sup`, rename it to `real.exists_is_lub`;\n* move parts of the proof of `real.exists_is_lub` around;", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "exists_is_lub", ["real"]], ["del", "theorem", "exists_sup", ["real"]]]}]}, {"timestamp": 1627898858, "sha": "69c6adb5", "message": "chore(data/int): move some lemmas from `basic` to a new file (#8495)\nMove `least_of_bdd`, `exists_least_of_bdd`, `coe_least_of_bdd_eq`,\n`greatest_of_bdd`, `exists_greatest_of_bdd`, and\n`coe_greatest_of_bdd_eq` from `data.int.basic` to `data.int.least_greatest`.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["del", "theorem", "coe_greatest_of_bdd_eq", ["int"]], ["del", "theorem", "coe_least_of_bdd_eq", ["int"]], ["del", "theorem", "exists_greatest_of_bdd", ["int"]], ["del", "theorem", "exists_least_of_bdd", ["int"]], ["del", "def", "greatest_of_bdd", ["int"]], ["del", "def", "least_of_bdd", ["int"]]]}, {"oldPath": null, "newPath": "src/data/int/least_greatest.lean", "changes": [["add", "theorem", "coe_greatest_of_bdd_eq", ["int"]], ["add", "theorem", "coe_least_of_bdd_eq", ["int"]], ["add", "theorem", "exists_greatest_of_bdd", ["int"]], ["add", "theorem", "exists_least_of_bdd", ["int"]], ["add", "def", "greatest_of_bdd", ["int"]], ["add", "def", "least_of_bdd", ["int"]]]}, {"oldPath": "src/data/int/order.lean", "newPath": "src/data/int/order.lean", "changes": []}]}, {"timestamp": 1627898857, "sha": "4a9cbdb1", "message": "feat(data/matrix/basic): provide equiv versions of `matrix.map`, `linear_map.map_matrix`, and `ring_hom.map_matrix`. (#8468)\nThis moves all of these definitions to be adjacent, adds the standard family of functorial simp lemmas, and relaxes some typeclass requirements.\nThis also renames `matrix.one_map` to `matrix.map_one` to match `matrix.map_zero`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "map_matrix", ["add_equiv"]], ["add", "theorem", "map_matrix_refl", ["add_equiv"]], ["add", "theorem", "map_matrix_symm", ["add_equiv"]], ["add", "theorem", "map_matrix_trans", ["add_equiv"]], ["mod", "def", "map_matrix", ["add_monoid_hom"]], ["del", "theorem", "map_matrix_apply", ["add_monoid_hom"]], ["add", "theorem", "map_matrix_comp", ["add_monoid_hom"]], ["add", "theorem", "map_matrix_id", ["add_monoid_hom"]], ["add", "def", "map_matrix", ["equiv"]], ["add", "theorem", "map_matrix_refl", ["equiv"]], ["add", "theorem", "map_matrix_symm", ["equiv"]], ["add", "theorem", "map_matrix_trans", ["equiv"]], ["add", "def", "map_matrix", ["linear_equiv"]], ["add", "theorem", "map_matrix_refl", ["linear_equiv"]], ["add", "theorem", "map_matrix_symm", ["linear_equiv"]], ["add", "theorem", "map_matrix_trans", ["linear_equiv"]], ["mod", "def", "map_matrix", ["linear_map"]], ["add", "theorem", "map_matrix_comp", ["linear_map"]], ["add", "theorem", "map_matrix_id", ["linear_map"]], ["mod", "theorem", "map_add", ["matrix"]], ["add", "theorem", "map_id", ["matrix"]], ["add", "theorem", "map_one", ["matrix"]], ["mod", "theorem", "map_smul", ["matrix"]], ["mod", "theorem", "map_sub", ["matrix"]], ["mod", "theorem", "map_zero", ["matrix"]], ["del", "theorem", "one_map", ["matrix"]], ["add", "def", "map_matrix", ["ring_equiv"]], ["add", "theorem", "map_matrix_refl", ["ring_equiv"]], ["add", "theorem", "map_matrix_symm", ["ring_equiv"]], ["add", "theorem", "map_matrix_trans", ["ring_equiv"]], ["mod", "def", "map_matrix", ["ring_hom"]], ["add", "theorem", "map_matrix_comp", ["ring_hom"]], ["add", "theorem", "map_matrix_id", ["ring_hom"]]]}]}, {"timestamp": 1627894281, "sha": "1b771af7", "message": "feat(group_theory/coset): card_dvd_of_injective (#8485)", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "card_comap_dvd_of_injective", ["subgroup"]], ["add", "theorem", "card_dvd_of_injective", ["subgroup"]], ["add", "theorem", "card_dvd_of_le", ["subgroup"]]]}]}, {"timestamp": 1627872999, "sha": "0f168d3e", "message": "refactor(data/real/nnreal): use `ord_connected_subset_conditionally_complete_linear_order` (#8502)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "coe_Inf", ["nnreal"]], ["mod", "theorem", "coe_Sup", ["nnreal"]]]}]}, {"timestamp": 1627872998, "sha": "5994df14", "message": "feat(algebra/group_power/lemmas): is_unit_pos_pow_iff (#8420)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "is_unit_pos_pow_iff", []]]}]}, {"timestamp": 1627870539, "sha": "db0cd4db", "message": "chore(scripts): update nolints.txt (#8505)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1627858598, "sha": "bfa6bbbc", "message": "doc(algebra/algebra/basic): add a comment to make the similar definition discoverable (#8500)\nI couldn't find this def, but was able to find lmul.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}]}, {"timestamp": 1627851825, "sha": "fdb0369f", "message": "feat(algebra/group/semiconj): add `semiconj_by.reflexive` and `semiconj_by.transitive` (#8493)", "changes": [{"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": []}]}, {"timestamp": 1627851824, "sha": "60c378d0", "message": "feat(algebra/ordered_group): add `order_iso.inv` (#8492)\n* add `order_iso.inv` and `order_iso.neg`;\n* use it to golf a few proofs;\n* use `alias` to generate some `imp` lemmas from `iff` lemmas;\n* generalize some lemmas about `order_iso` from `preorder` to `has_le`.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "inv_le_of_inv_le", []], ["del", "theorem", "inv_lt_of_inv_lt", []], ["del", "theorem", "lt_inv_of_lt_inv", []], ["add", "def", "inv", ["order_iso"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1627851823, "sha": "1530d767", "message": "feat(group_theory/congruence): add `con.lift_on_units` etc (#8488)\nAdd a helper function that makes it easier to define a function on\n`units (con.quotient c)`.", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["add", "theorem", "hrec_on₂_coe", ["con"]], ["add", "theorem", "induction_on_units", ["con"]], ["add", "def", "lift_on_units", ["con"]], ["add", "theorem", "lift_on_units_mk", ["con"]], ["add", "theorem", "quot_mk_eq_coe", ["con"]], ["add", "theorem", "rel_mk", ["con"]]]}]}, {"timestamp": 1627851822, "sha": "9c4dd02d", "message": "feat(group_theory/order_of_element): order_of_dvd_iff_gpow_eq_one (#8487)\nVersion of `order_of_dvd_iff_pow_eq_one` for integer powers", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_dvd_iff_gpow_eq_one", []]]}]}, {"timestamp": 1627851821, "sha": "9194f20c", "message": "feat(data/nat/prime): pow_dvd_of_dvd_mul_right (#8483)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "pow_dvd_of_dvd_mul_left", ["nat", "prime"]], ["add", "theorem", "pow_dvd_of_dvd_mul_right", ["nat", "prime"]]]}]}, {"timestamp": 1627851820, "sha": "b0991037", "message": "feat(group_theory/subgroup): add `subgroup.forall_gpowers` etc (#8470)\n* add `subgroup.forall_gpowers`, `subgroup.exists_gpowers`,\n `subgroup.forall_mem_gpowers`, and `subgroup.exists_mem_gpowers`;\n* add their additive counterparts;\n* drop some explicit lemmas about `add_subgroup.gmultiples`:\n `to_additive` can generate them now.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "exists_subtype_range_iff", ["set"]], ["add", "theorem", "forall_subtype_range_iff", ["set"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["del", "theorem", "gmultiples_eq_closure", ["add_subgroup"]], ["del", "theorem", "mem_gmultiples", ["add_subgroup"]], ["del", "theorem", "mem_gmultiples_iff", ["add_subgroup"]], ["add", "theorem", "exists_gpowers", ["subgroup"]], ["add", "theorem", "exists_mem_gpowers", ["subgroup"]], ["add", "theorem", "forall_gpowers", ["subgroup"]], ["add", "theorem", "forall_mem_gpowers", ["subgroup"]]]}]}, {"timestamp": 1627851819, "sha": "52a2e8b9", "message": "chore(algebra/group/hom_instances): add monoid_hom versions of linear_map lemmas (#8461)\nI mainly want the additive versions, but we may as well get the multiplicative ones too.\nThis also adds the missing `monoid_hom.map_div` and some other division versions of subtraction lemmas.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "theorem", "coe_of_map_sub", ["add_monoid_hom"]], ["del", "theorem", "map_sub", ["add_monoid_hom"]], ["del", "def", "of_map_sub", ["add_monoid_hom"]], ["add", "theorem", "coe_of_map_div", ["monoid_hom"]], ["add", "theorem", "map_div", ["monoid_hom"]], ["add", "def", "of_map_div", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": [["add", "theorem", "map_div₂", ["monoid_hom"]], ["add", "theorem", "map_inv₂", ["monoid_hom"]], ["add", "theorem", "map_mul₂", ["monoid_hom"]], ["add", "theorem", "map_one₂", ["monoid_hom"]]]}]}, {"timestamp": 1627851816, "sha": "894fb0c5", "message": "feat(data/nat/totient): totient_prime_pow (#8353)", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "coprime_pow_left_iff", ["nat"]], ["add", "theorem", "coprime_pow_right_iff", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_eq_card_coprime", ["nat"]], ["add", "theorem", "totient_one", ["nat"]], ["add", "theorem", "totient_prime", ["nat"]], ["add", "theorem", "totient_prime_pow", ["nat"]], ["add", "theorem", "totient_prime_pow_succ", ["nat"]], ["add", "theorem", "totient_two", ["nat"]]]}]}, {"timestamp": 1627845086, "sha": "7249afb2", "message": "feat(measure_theory/[integrable_on, set_integral]): integrals on two ae-eq sets are equal (#8440)", "changes": [{"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integrable_on.lean", "changes": [["add", "theorem", "congr_set_ae", ["measure_theory", "integrable_on"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "indicator_ae_eq_of_ae_eq_set", []], ["add", "theorem", "piecewise_ae_eq_of_ae_eq_set", []]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "set_integral_congr_set_ae", ["measure_theory"]]]}]}, {"timestamp": 1627845085, "sha": "d3c943b7", "message": "refactor(data/set/lattice): add congr lemmas for `Prop`-indexed `Union` and `Inter` (#8260)\nThanks to new `@[congr]` lemmas `Union_congr_Prop` and `Inter_congr_Prop`, `simp` can simplify `p y` in `⋃ y (h : p y), f y`. As a result, LHS of many lemmas (e.g., `Union_image`) is no longer in `simp` normal form. E.g.,\n```lean\nlemma bUnion_range {f : ι → α} {g : α → set β} : (⋃x ∈ range f, g x) = (⋃y, g (f y)) :=\n```\ncan no longer be a `@[simp]` lemma because `simp` simplifies `⋃x ∈ range f, g x` to `⋃ (x : α) (h : ∃ i, f i = x), g x`, then to `⋃ (x : α) (i : α) (h : f i = x), g x`. So, we add\n```lean\n@[simp] lemma Union_Union_eq' {f : ι → α} {g : α → set β} :\n (⋃ x y (h : f y = x), g x) = ⋃ y, g (f y) :=\n```\nAlso, `Union` and `Inter` are semireducible, so one has to explicitly convert between these operations and `supr`/`infi`.", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "set_bInter_bUnion", ["finset"]], ["mod", "theorem", "set_bInter_coe", ["finset"]], ["mod", "theorem", "set_bInter_finset_image", ["finset"]], ["mod", "theorem", "set_bInter_insert", ["finset"]], ["mod", "theorem", "set_bInter_option_to_finset", ["finset"]], ["mod", "theorem", "set_bInter_singleton", ["finset"]], ["mod", "theorem", "set_bUnion_bUnion", ["finset"]], ["mod", "theorem", "set_bUnion_coe", ["finset"]], ["mod", "theorem", "set_bUnion_finset_image", ["finset"]], ["mod", "theorem", "set_bUnion_insert", ["finset"]], ["mod", "theorem", "set_bUnion_option_to_finset", ["finset"]], ["mod", "theorem", "set_bUnion_singleton", ["finset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inf_eq_sInter", ["set"]], ["mod", "def", "Inter", ["set"]], ["add", "theorem", "Inter_Inter_eq'", ["set"]], ["add", "theorem", "Inter_Inter_eq_left", ["set"]], ["add", "theorem", "Inter_Inter_eq_or_left", ["set"]], ["add", "theorem", "Inter_Inter_eq_right", ["set"]], ["add", "theorem", "Inter_and", ["set"]], ["add", "theorem", "Inter_comm", ["set"]], ["add", "theorem", "Inter_congr_Prop", ["set"]], ["add", "theorem", "Inter_exists", ["set"]], ["add", "theorem", "Inter_false", ["set"]], ["del", "theorem", "Inter_neg", ["set"]], ["add", "theorem", "Inter_or", ["set"]], ["del", "theorem", "Inter_pos", ["set"]], ["add", "theorem", "Inter_true", ["set"]], ["add", "theorem", "Sup_eq_sUnion", ["set"]], ["mod", "def", "Union", ["set"]], ["add", "theorem", "Union_Union_eq'", ["set"]], ["add", "theorem", "Union_Union_eq_left", ["set"]], ["add", "theorem", "Union_Union_eq_or_left", ["set"]], ["add", "theorem", "Union_Union_eq_right", ["set"]], ["add", "theorem", "Union_and", ["set"]], ["add", "theorem", "Union_comm", ["set"]], ["add", "theorem", "Union_congr_Prop", ["set"]], ["add", "theorem", "Union_exists", ["set"]], ["add", "theorem", "Union_false", ["set"]], ["del", "theorem", "Union_neg", ["set"]], ["mod", "theorem", "Union_of_singleton", ["set"]], ["add", "theorem", "Union_or", ["set"]], ["del", "theorem", "Union_pos", ["set"]], ["add", "theorem", "Union_true", ["set"]], ["add", "theorem", "bInter_and'", ["set"]], ["add", "theorem", "bInter_and", ["set"]], ["mod", "theorem", "bInter_image", ["set"]], ["mod", "theorem", "bInter_insert", ["set"]], ["mod", "theorem", "bInter_range", ["set"]], ["mod", "theorem", "bInter_singleton", ["set"]], ["add", "theorem", "bUnion_and'", ["set"]], ["add", "theorem", "bUnion_and", ["set"]], ["mod", "theorem", "bUnion_image", ["set"]], ["mod", "theorem", "bUnion_insert", ["set"]], ["mod", "theorem", "bUnion_range", ["set"]], ["mod", "theorem", "bUnion_singleton", ["set"]], ["mod", "theorem", "compl_Inter", ["set"]], ["mod", "theorem", "compl_Union", ["set"]], ["add", "theorem", "infi_eq_Inter", ["set"]], ["mod", "def", "sInter", ["set"]], ["add", "theorem", "supr_eq_Union", ["set"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "closed_under_univ", ["first_order", "language"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "supr_sup_eq", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1627838248, "sha": "f961b280", "message": "chore(deprecated/*): Make deprecated classes into structures (#8178)\nI make the deprecated classes `is_group_hom`, `is_subgroup`, ... into structures, and delete some deprecated constructions which become inconvenient or essentially unusable after these changes. I do not completely remove all deprecated imports in undeprecated files, however I push these imports much further towards the edges of the hierarchy. \nMore detailed comments about what is going on here:\nIn the `src/deprecated/` directory, classes such as `is_ring_hom` and `is_subring` are defined (and the same for groups, fields, monoids...). These are predicate classes on functions and sets respectively, formerly used to handle ring morphisms and subrings before both were bundled. Amongst other things, this PR changes all the relevant definitions from classes to structures and then picks up the pieces (I will say more about what this means later). Before I started on this refactor, my opinion was that these classes should be turned into structures, but should be left in mathlib. After this refactor, I am now moving towards the opinion that it would be no great loss if these structures were removed completely -- I do not see any time when we really need them.\nThe situation I previously had in mind where the substructures could be useful is if one is (in the middle of a long tactic proof) defining an explicit subring of a ring by first defining it as a subset, or `add_subgroup` or whatever, and then doing some mathematics to prove that this subset is closed under multiplication, and hence proving that it was a subring after all. With the old approach this just involves some `S : set R` with more and more properties being proved of it and added to the type class search as the proof progresses. With the bundled set-up, we might have `S : set R` and then later on we get `S_subring : subring R` whose underlying subset equals S, and then all our hypotheses about `S` built up during the proof can no longer be used as rewrites, we need to keep rewriting or `change`ing `x \\in S_subring` to `x \\in S` and back again. This issue showed up only once in the refactor, in `src/ring_theory/integral_closure.lean`, around line 230, where I refactored a proof to avoid the deprecated structures and it seemed to get a bit longer. I can definitely live with this.\nOne could imagine a similar situation with morphisms (define f as a map between rings, and only later on prove that it's a ring homomorphism) but actually I did not see this situation arise at all. In fact the main issue I ran into with morphism classes was the following (which showed up 10 or so times): there are many constructions in mathlib which actually turn out to be, or (even worse) turn out under some extra assumptions to be, maps which preserve some structure. For example `multiset.map (f : X -> Y) : multiset X -> multiset Y` (which was in mathlib since it was born IIRC) turns out to be an add_group_hom, once the add_group structure is defined on multisets. So here I had a big choice to make: should I actually rename `multiset.map` to be `private multiset.map_aux` and then redefine `multiset.map` to be the `add_monoid_hom`? In retrospect I think that there's a case for this. In fact `data.multiset.basic` is the biggest source of these issues -- `map` and `sum` and `countp` and `count` are all `add_monoid_hom`s. I did not feel confident about ripping out these fundamental definitions so I made four new ones, `map_add_monoid_hom`, `sum_add_monoid_hom` etc. The disadvantage with this approach is that again rewrites get a bit more painful: some lemma which involves `map` may need to be rewritten so that it involves `map_add_monoid_hom` so that one can apply `add_monoid_hom.map_add`, and then perhaps rewritten back so that one can apply other rewrites. Random example: line 43 of `linear_algebra.lagrange`, where I have to rewrite `coe_eval_ring_hom` in both directions. Let me say that I am most definitely open to the idea of renaming `multiset.map_add_monoid_hom` to `multiset.map` and just nuking our current `multiset.map` or making it private or `map_aux` or whatever but we're already at 92 files changed so it might be best to get this over with and come up with a TODO list for future tidy-ups. Another example: should the fields of `complex` be `re'` and `im'`, and `complex.re` be redefined as the R-linear map? Right now in mathlib we only use the fact that it's an `add_group_hom`, and I define `re_add_group_hom` for this. Note however one can not always get away with this renaming trick, for example there are instances when a certain fundamental construction only preserves some structure under additional conditions -- for example `has_inv.inv` on groups is only a group homomorphism when the underlying group is abelian (and the same for `pow` and `gpow`). In the past this was dealt with by a typeclass `is_group_hom` on `inv` which fired in the presence of a `comm_group` but not otherwise; now this has to be dealt with by a second definition `inv_monoid_hom` whose underlying function is `inv`. You can't just get away with applying the proof of `inv (a * b) = inv a * inv b` when you need it, because sometimes you want to apply things like `monoid_hom.map_prod` which needs a `monoid_hom` as input, so won't work with `inv`: you need to rewrite one way, apply `monoid_hom.map_prod` and then rewrite back the other way now :-/ I would say that this was ultimately the main disadvantage of this approach, but it seems minor really and only shows up a few times, and if we go ahead with the renaming plan it will happen even fewer times.\nI had initially played with the idea of just completely removing all deprecated imports in non-deprecated files, but there were times near the end when I just didn't feel like it (I just wanted it to be over, I was scared to mess around in `control` or `test`), so I removed most of them but added some deprecated imports higher up the tree (or lower down the tree, I never understand which way up this tree is, I mean nearer the leaves -- am I right in that computer scientists for some reason think the root of a tree is at the top?). It will not be too hard for an expert to remove those last few deprecated imports in src outside the `deprecated` directory in subsequent PR's, indeed I could do it myself but I might I might need some Zulip help. Note: it used to be the case that `subring` imported `deprecated.subring`; this is now the other way around, which is much more sensible (and matches with submonoid). Outside the deprecated directory, there are only a few deprecated imports: `control.fold` (which I don't really want to mess with),`group_theory.free_abelian_group` (there is a bunch of `seq` stuff which I am not sure is ever used but I just couldn't be bothered, it might be the sort of refactor which someone finds interesting or fun though), `ring_theory.free_comm_ring` (this file involves some definitional abuse which either needs to be redone \"mathematically\" or rewritten to work with bundled morphisms) and `topology.algebra.uniform_group` (which I think Patrick is refactoring?) and a test file.\nIf you look at the diffs you see that various things are deleted (lots of `is_add_monoid_hom foo` proofs), but many of these deletions come with corresponding additions (e.g. a new `foo_group_hom` definition if it was not there already, plus corresponding `simp` lemma, which is randomly either a `coe` or an `apply` depending on what mood I was in; this could all be done with `@[simps]` trickery apparently but I didn't read the thread carefully yet). Once nice achievement was that I refactored a bunch of basic ring and field theory to avoid the `is_` classes completely, which I think is a step in the right direction (people were occasionally being forced to use deprecated stuff when doing stuff like Galois theory because some fundamental things used to use them; this is no longer the case -- in particular I think Abel-Ruffini might now be deprecated-free, or very nearly so). \n`finset.sum_hom` and `finset.prod_hom` are gone. It is very funny to do a search for these files in mathlib current master as I write -- 98% of the time they're used, they're used backwards (with `.symm` or `\\l` with a rewrite). The bundled versions (`monoid_hom.map_prod` etc) are written the other way around. I could have just left them and not bothered, but it seemed easier just to get rid of them if we're moving to bundled morphisms. One funny observation was that unary `-` seemed to be a special case: we\nseem to prefer `-\\sum i, f i` to `\\sum i, -(f i)` . For almost every other function, we want it to go the other way.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "is_subring_algebra_map_apply", ["algebra"]], ["del", "theorem", "is_subring_coe_algebra_map", ["algebra"]], ["del", "theorem", "is_subring_coe_algebra_map_hom", ["algebra"]], ["del", "def", "of_is_subring", ["algebra"]], ["del", "theorem", "set_range_subset", ["algebra"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["del", "theorem", "mem_subalgebra_of_is_subring", []], ["add", "def", "to_add_submonoid", ["subalgebra"]], ["add", "def", "to_submonoid", ["subalgebra"]], ["del", "def", "subalgebra_of_is_subring", []]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "gsmul_sum", ["finset"]], ["del", "theorem", "prod_hom", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "def", "inv_monoid_hom", ["comm_group"]]]}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "def", "gpow_group_hom", []], ["del", "theorem", "map_pow", ["is_monoid_hom"]], ["add", "def", "pow_monoid_hom", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "def", "to_ring_hom", ["mul_semiring_action"]], ["del", "def", "to_semiring_hom", ["mul_semiring_action"]], ["add", "theorem", "to_ring_hom_injective", []], ["del", "theorem", "to_semiring_hom_injective", []]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["del", "theorem", "is_mul_hom", ["set", "singleton"]], ["add", "def", "singleton_mul_hom", ["set"]]]}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "injective_iff'", ["ring_hom"]]]}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": [["add", "theorem", "fold_foldl", ["traversable"]], ["add", "theorem", "fold_foldr", ["traversable"]], ["add", "theorem", "fold_mfoldl", ["traversable"]], ["add", "theorem", "fold_mfoldr", ["traversable"]], ["add", "theorem", "is_monoid_hom", ["traversable", "free", "map"]], ["mod", "def", "map_fold", ["traversable"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "coe_im_add_group_hom", ["complex"]], ["add", "theorem", "coe_re_add_group_hom", ["complex"]], ["add", "def", "im_add_group_hom", ["complex"]], ["add", "def", "re_add_group_hom", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "def", "mk_add_group_hom", ["dfinsupp"]], ["add", "def", "subtype_domain_add_monoid_hom", ["dfinsupp"]], ["mod", "theorem", "zip_with_def", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "subtype_domain_add_monoid_hom", ["finsupp"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "add_monoid_hom_mul_left", ["matrix"]], ["add", "def", "add_monoid_hom_mul_right", ["matrix"]], ["del", "theorem", "is_add_monoid_hom_mul_left", ["matrix"]], ["del", "theorem", "is_add_monoid_hom_mul_right", ["matrix"]], ["add", "def", "add_monoid_hom_left", ["matrix", "mul_vec"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "coe_count_add_monoid_hom", ["multiset"]], ["add", "theorem", "coe_countp_add_monoid_hom", ["multiset"]], ["add", "theorem", "coe_inv_monoid_hom", ["multiset"]], ["add", "theorem", "coe_map_add_monoid_hom", ["multiset"]], ["add", "theorem", "coe_sum_add_monoid_hom", ["multiset"]], ["add", "def", "count_add_monoid_hom", ["multiset"]], ["add", "def", "countp_add_monoid_hom", ["multiset"]], ["add", "def", "map_add_monoid_hom", ["multiset"]], ["add", "def", "sum_add_monoid_hom", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "coe_eval₂_hom", ["mv_polynomial"]], ["add", "def", "coeff_add_monoid_hom", ["mv_polynomial"]], ["mod", "def", "eval₂_hom", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["mod", "theorem", "C_neg", ["mv_polynomial"]], ["mod", "theorem", "C_sub", ["mv_polynomial"]], ["mod", "theorem", "hom_C", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "def", "coe_add_hom", ["pnat"]], ["add", "theorem", "coe_coe_monoid_hom", ["pnat"]], ["add", "def", "coe_monoid_hom", ["pnat"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": [["add", "theorem", "coe_coe_nat_monoid_hom", ["prime_multiset"]], ["add", "theorem", "coe_coe_pnat_monoid_hom", ["prime_multiset"]], ["add", "def", "coe_nat_monoid_hom", ["prime_multiset"]], ["add", "def", "coe_pnat_monoid_hom", ["prime_multiset"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "coe_eval_ring_hom", ["polynomial"]], ["add", "def", "comp_ring_hom", ["polynomial"]], ["add", "def", "eval_ring_hom", ["polynomial"]], ["add", "def", "eval₂_add_monoid_hom", ["polynomial"]], ["mod", "def", "eval₂_ring_hom", ["polynomial"]], ["mod", "theorem", "map_pow", ["polynomial"]], ["mod", "theorem", "mem_map_range", ["polynomial"]], ["add", "theorem", "mem_map_srange", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": [["mod", "def", "lifts", ["polynomial"]], ["add", "theorem", "lifts_iff_ring_hom_srange", ["polynomial"]], ["mod", "def", "lifts_ring", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": [["mod", "theorem", "is_add_group_hom", ["additive"]], ["mod", "theorem", "is_add_hom", ["additive"]], ["mod", "theorem", "is_add_monoid_hom", ["additive"]], ["add", "structure", "is_add_group_hom", []], ["add", "structure", "is_add_hom", []], ["add", "theorem", "is_add_monoid_hom_mul_left", ["is_add_monoid_hom"]], ["add", "theorem", "is_add_monoid_hom_mul_right", ["is_add_monoid_hom"]], ["add", "structure", "is_add_monoid_hom", []], ["mod", "theorem", "comp", ["is_group_hom"]], ["add", "theorem", "id", ["is_group_hom"]], ["mod", "theorem", "injective_iff", ["is_group_hom"]], ["mod", "theorem", "inv", ["is_group_hom"]], ["mod", "theorem", "map_inv", ["is_group_hom"]], ["add", "theorem", "map_mul", ["is_group_hom"]], ["mod", "theorem", "map_one", ["is_group_hom"]], ["add", "theorem", "to_is_monoid_hom", ["is_group_hom"]], ["add", "structure", "is_group_hom", []], ["mod", "theorem", "comp", ["is_monoid_hom"]], ["add", "theorem", "id", ["is_monoid_hom"]], ["add", "theorem", "inv", ["is_monoid_hom"]], ["del", "theorem", "of_mul", ["is_monoid_hom"]], ["add", "structure", "is_monoid_hom", []], ["mod", "theorem", "comp", ["is_mul_hom"]], ["add", "theorem", "id", ["is_mul_hom"]], ["mod", "theorem", "inv", ["is_mul_hom"]], ["add", "theorem", "to_is_monoid_hom", ["is_mul_hom"]], ["add", "structure", "is_mul_hom", []], ["mod", "theorem", "map'", ["is_unit"]], ["mod", "theorem", "coe_of", ["monoid_hom"]], ["add", "theorem", "is_group_hom", ["monoid_hom"]], ["add", "theorem", "is_monoid_hom_coe", ["monoid_hom"]], ["mod", "def", "of", ["monoid_hom"]], ["add", "theorem", "is_group_hom", ["mul_equiv"]], ["add", "theorem", "is_monoid_hom", ["mul_equiv"]], ["add", "theorem", "is_mul_hom", ["mul_equiv"]], ["mod", "theorem", "is_group_hom", ["multiplicative"]], ["mod", "theorem", "is_mul_hom", ["multiplicative"]], ["add", "theorem", "to_is_add_group_hom", ["ring_hom"]], ["add", "theorem", "to_is_add_monoid_hom", ["ring_hom"]], ["add", "theorem", "to_is_monoid_hom", ["ring_hom"]], ["add", "theorem", "coe_is_monoid_hom", ["units"]], ["mod", "theorem", "coe_map'", ["units"]], ["mod", "def", "map'", ["units"]]]}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": [["mod", "theorem", "comp", ["is_ring_hom"]], ["add", "theorem", "id", ["is_ring_hom"]], ["mod", "theorem", "map_neg", ["is_ring_hom"]], ["mod", "theorem", "map_sub", ["is_ring_hom"]], ["mod", "theorem", "map_zero", ["is_ring_hom"]], ["mod", "theorem", "of_semiring", ["is_ring_hom"]], ["add", "theorem", "to_is_add_group_hom", ["is_ring_hom"]], ["add", "theorem", "to_is_semiring_hom", ["is_ring_hom"]], ["add", "structure", "is_ring_hom", []], ["mod", "theorem", "comp", ["is_semiring_hom"]], ["add", "theorem", "id", ["is_semiring_hom"]], ["add", "theorem", "to_is_add_monoid_hom", ["is_semiring_hom"]], ["add", "theorem", "to_is_monoid_hom", ["is_semiring_hom"]], ["add", "structure", "is_semiring_hom", []], ["mod", "theorem", "coe_of", ["ring_hom"]], ["mod", "def", "of", ["ring_hom"]], ["add", "theorem", "to_is_ring_hom", ["ring_hom"]], ["add", "theorem", "to_is_semiring_hom", ["ring_hom"]]]}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": [["add", "theorem", "is_subfield", ["field", "closure"]], ["add", "theorem", "is_submonoid", ["field", "closure"]], ["mod", "theorem", "closure_subset", ["field"]], ["mod", "theorem", "closure_subset_iff", ["field"]], ["add", "theorem", "is_subfield", ["image"]], ["add", "theorem", "Inter", ["is_subfield"]], ["mod", "theorem", "div_mem", ["is_subfield"]], ["add", "theorem", "inter", ["is_subfield"]], ["mod", "theorem", "pow_mem", ["is_subfield"]], ["add", "structure", "is_subfield", []], ["add", "theorem", "is_subfield", ["preimage"]], ["add", "theorem", "is_subfield", ["range"]], ["add", "theorem", "is_subfield", ["univ"]]]}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["add", "theorem", "is_normal_add_subgroup", ["additive"]], ["add", "theorem", "is_normal_add_subgroup_iff", ["additive"]], ["del", "theorem", "normal_add_subgroup", ["additive"]], ["del", "theorem", "normal_add_subgroup_iff", ["additive"]], ["add", "theorem", "is_subgroup", ["group", "closure"]], ["mod", "theorem", "closure_subgroup", ["group"]], ["mod", "theorem", "closure_subset", ["group"]], ["mod", "theorem", "closure_subset_iff", ["group"]], ["mod", "theorem", "conjugates_of_set_subset'", ["group"]], ["mod", "theorem", "conjugates_of_subset", ["group"]], ["mod", "theorem", "image_closure", ["group"]], ["add", "theorem", "is_normal", ["group", "normal_closure"]], ["add", "theorem", "is_subgroup", ["group", "normal_closure"]], ["mod", "theorem", "normal_closure_subset", ["group"]], ["mod", "theorem", "normal_closure_subset_iff", ["group"]], ["del", "theorem", "gsmul_coe", ["is_add_subgroup"]], ["add", "structure", "is_add_subgroup", []], ["add", "theorem", "image_subgroup", ["is_group_hom"]], ["mod", "theorem", "injective_iff_trivial_ker", ["is_group_hom"]], ["mod", "theorem", "injective_of_trivial_ker", ["is_group_hom"]], ["mod", "theorem", "inv_iff_ker'", ["is_group_hom"]], ["mod", "theorem", "inv_iff_ker", ["is_group_hom"]], ["mod", "theorem", "inv_ker_one'", ["is_group_hom"]], ["mod", "theorem", "inv_ker_one", ["is_group_hom"]], ["add", "theorem", "is_normal_subgroup_ker", ["is_group_hom"]], ["mod", "theorem", "one_iff_ker_inv'", ["is_group_hom"]], ["mod", "theorem", "one_iff_ker_inv", ["is_group_hom"]], ["mod", "theorem", "one_ker_inv'", ["is_group_hom"]], ["mod", "theorem", "one_ker_inv", ["is_group_hom"]], ["add", "theorem", "preimage", ["is_group_hom"]], ["add", "theorem", "preimage_normal", ["is_group_hom"]], ["add", "theorem", "range_subgroup", ["is_group_hom"]], ["mod", "theorem", "trivial_ker_iff_eq_one", ["is_group_hom"]], ["mod", "theorem", "trivial_ker_of_injective", ["is_group_hom"]], ["add", "structure", "is_normal_add_subgroup", []], ["add", "structure", "is_normal_subgroup", []], ["add", "theorem", "is_normal_subgroup_of_comm_group", []], ["add", "theorem", "Inter", ["is_subgroup"]], ["add", "theorem", "center_normal", ["is_subgroup"]], ["del", "theorem", "coe_gpow", ["is_subgroup"]], ["del", "theorem", "coe_inv", ["is_subgroup"]], ["mod", "theorem", "div_mem", ["is_subgroup"]], ["mod", "theorem", "eq_trivial_iff", ["is_subgroup"]], ["add", "theorem", "inter", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm_iff", ["is_subgroup"]], ["add", "theorem", "normalizer_is_subgroup", ["is_subgroup"]], ["mod", "theorem", "subset_normalizer", ["is_subgroup"]], ["add", "theorem", "trivial_normal", ["is_subgroup"]], ["add", "theorem", "univ_subgroup", ["is_subgroup"]], ["add", "structure", "is_subgroup", []], ["del", "def", "range_factorization", ["monoid_hom"]], ["del", "def", "range_subtype_val", ["monoid_hom"]], ["add", "theorem", "is_normal_subgroup", ["multiplicative"]], ["add", "theorem", "is_normal_subgroup_iff", ["multiplicative"]], ["del", "theorem", "normal_subgroup", ["multiplicative"]], ["del", "theorem", "normal_subgroup_iff", ["multiplicative"]], ["del", "theorem", "normal_subgroup_of_comm_group", []], ["add", "theorem", "is_subgroup", ["subgroup"]], ["mod", "def", "of", ["subgroup"]], ["add", "theorem", "of_normal", ["subgroup"]], ["del", "def", "comm_group", ["subtype"]], ["del", "def", "group", ["subtype"]]]}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": [["del", "theorem", "is_submonoid", ["image"]], ["mod", "theorem", "multiple_subset", ["is_add_submonoid"]], ["del", "theorem", "smul_coe", ["is_add_submonoid"]], ["mod", "theorem", "smul_mem", ["is_add_submonoid"]], ["add", "structure", "is_add_submonoid", []], ["add", "theorem", "Inter", ["is_submonoid"]], ["del", "theorem", "coe_mul", ["is_submonoid"]], ["del", "theorem", "coe_one", ["is_submonoid"]], ["del", "theorem", "coe_pow", ["is_submonoid"]], ["mod", "theorem", "finset_prod_mem", ["is_submonoid"]], ["add", "theorem", "image", ["is_submonoid"]], ["add", "theorem", "inter", ["is_submonoid"]], ["mod", "theorem", "list_prod_mem", ["is_submonoid"]], ["mod", "theorem", "multiset_prod_mem", ["is_submonoid"]], ["mod", "theorem", "pow_mem", ["is_submonoid"]], ["mod", "theorem", "power_subset", ["is_submonoid"]], ["add", "theorem", "preimage", ["is_submonoid"]], ["add", "structure", "is_submonoid", []], ["add", "theorem", "is_submonoid", ["monoid", "closure"]], ["mod", "theorem", "closure_subset", ["monoid"]], ["mod", "theorem", "image_closure", ["monoid"]], ["add", "theorem", "is_submonoid", ["powers"]], ["add", "theorem", "is_submonoid", ["range"]], ["add", "theorem", "is_submonoid", ["submonoid"]], ["mod", "def", "of", ["submonoid"]], ["del", "def", "comm_monoid", ["subtype"]], ["del", "def", "monoid", ["subtype"]], ["add", "theorem", "is_submonoid", ["univ"]]]}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": [["add", "theorem", "Inter", ["is_subring"]], ["del", "theorem", "coe_subtype", ["is_subring"]], ["add", "theorem", "inter", ["is_subring"]], ["add", "def", "subring", ["is_subring"]], ["del", "def", "subtype", ["is_subring"]], ["add", "structure", "is_subring", []], ["add", "theorem", "is_subring", ["ring", "closure"]], ["mod", "theorem", "closure_subset", ["ring"]], ["mod", "theorem", "closure_subset_iff", ["ring"]], ["del", "def", "cod_restrict", ["ring_hom"]], ["add", "theorem", "is_subring_image", ["ring_hom"]], ["add", "theorem", "is_subring_preimage", ["ring_hom"]], ["add", "theorem", "is_subring_set_range", ["ring_hom"]], ["del", "def", "domain", ["subring"]], ["del", "def", "comm_ring", ["subset"]], ["del", "def", "ring", ["subset"]], ["del", "def", "comm_ring", ["subtype"]], ["del", "def", "ring", ["subtype"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["add", "def", "subfield", ["fixed_by"]], ["mod", "theorem", "dim_le_card", ["fixed_points"]], ["mod", "theorem", "finrank_le_card", ["fixed_points"]], ["mod", "theorem", "is_integral", ["fixed_points"]], ["add", "theorem", "eval₂'", ["fixed_points", "minpoly"]], ["mod", "theorem", "eval₂", ["fixed_points", "minpoly"]], ["mod", "theorem", "irreducible_aux", ["fixed_points", "minpoly"]], ["mod", "theorem", "of_eval₂", ["fixed_points", "minpoly"]], ["mod", "def", "minpoly", ["fixed_points"]], ["mod", "theorem", "smul", ["fixed_points"]], ["mod", "theorem", "smul_polynomial", ["fixed_points"]], ["add", "def", "subfield", ["fixed_points"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "subtype_eq_subtype", ["subfield", "to_subring"]]]}, {"oldPath": "src/group_theory/complement.lean", "newPath": "src/group_theory/complement.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "is_add_group_hom_lift'", ["free_abelian_group"]], ["add", "theorem", "is_add_group_hom_seq", ["free_abelian_group"]], ["add", "def", "lift_add_group_hom", ["free_abelian_group"]]]}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "to_linear_map_monoid_hom", ["linear_map", "automorphism_group"]], ["add", "def", "eval_add_monoid_hom", ["linear_map"]], ["add", "def", "to_add_monoid_hom'", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "coe_det_monoid_hom", ["matrix"]], ["add", "def", "det_monoid_hom", ["matrix"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "def", "add_monoid_hom_right", ["sesq_form"]], ["del", "theorem", "is_add_monoid_hom_left", ["sesq_form"]], ["del", "theorem", "is_add_monoid_hom_right", ["sesq_form"]], ["add", "def", "linear_map_left", ["sesq_form"]]]}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["mod", "theorem", "comap_mul_comap_le", ["filter"]], ["del", "theorem", "is_monoid_hom", ["filter", "map"]], ["add", "def", "map_monoid_hom", ["filter"]], ["mod", "theorem", "mul_mul", ["filter", "tendsto"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["mod", "theorem", "adjoin_int", ["algebra"]], ["del", "theorem", "is_noetherian_ring_closure", []], ["add", "theorem", "is_noetherian_subring_closure", []]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "def", "of", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["mod", "theorem", "map_add", ["derivation"]], ["mod", "theorem", "map_zero", ["derivation"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["add", "def", "coe_ring_hom", ["free_ring"]], ["mod", "def", "of'", ["free_ring"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "ker_eq", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["mod", "theorem", "is_integral_of_subring", []]]}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "theorem", "map_to_subring", ["polynomial"]], ["mod", "def", "restriction", ["polynomial"]], ["mod", "def", "to_subring", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["del", "def", "to_subring", ["set"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["del", "theorem", "nhds_is_mul_hom", []], ["add", "def", "nhds_mul_hom", []]]}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["add", "theorem", "is_add_group_hom_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["mod", "theorem", "comp_hom", ["add_comm_group", "is_Z_bilin"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1627818051, "sha": "9ed43801", "message": "feat(measure_theory/vector_measure): define the pullback and restriction of a vector measure (#8408)", "changes": [{"oldPath": "src/measure_theory/vector_measure.lean", "newPath": "src/measure_theory/vector_measure.lean", "changes": [["add", "def", "map", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_add", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_apply", ["measure_theory", "vector_measure"]], ["add", "def", "map_gm", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_id", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_smul", ["measure_theory", "vector_measure"]], ["add", "theorem", "map_zero", ["measure_theory", "vector_measure"]], ["add", "def", "mapₗ", ["measure_theory", "vector_measure"]], ["add", "def", "restrict", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_add", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_apply", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_empty", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_eq_self", ["measure_theory", "vector_measure"]], ["add", "def", "restrict_gm", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_smul", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_univ", ["measure_theory", "vector_measure"]], ["add", "theorem", "restrict_zero", ["measure_theory", "vector_measure"]], ["add", "def", "restrictₗ", ["measure_theory", "vector_measure"]]]}]}, {"timestamp": 1627810594, "sha": "5b9b4557", "message": "chore(order/complete_lattice): generalize `Sup_eq_supr'`, add lemmas (#8484)\n* `Sup_eq_supr'` only needs `[has_Sup α]`, add `Inf_eq_infi'`;\n* add `supr_range'`, `infi_range'`, `Sup_image'`, `Inf_image'`\n lemmas that use supremum/infimum over subtypes and only require\n `[has_Sup]`/`[has_Inf]`.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_eq_infi'", []], ["add", "theorem", "Inf_image'", []], ["mod", "theorem", "Sup_eq_supr'", []], ["add", "theorem", "Sup_image'", []], ["add", "theorem", "infi_range'", []], ["add", "theorem", "supr_range'", []]]}]}, {"timestamp": 1627810593, "sha": "de78d424", "message": "feat(order/rel_iso): add `equiv.to_order_iso` (#8482)\nSometimes it's easier to show `monotone e` and `monotone e.symm` than\n`e x ≤ e y ↔ x ≤ y`.", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "coe_to_order_iso", ["equiv"]], ["add", "def", "to_order_iso", ["equiv"]], ["add", "theorem", "to_order_iso_to_equiv", ["equiv"]], ["add", "theorem", "symm_apply_le", ["order_iso"]]]}]}, {"timestamp": 1627810593, "sha": "4f2006ed", "message": "chore(order/iterate): slightly generalize 2 lemmas (#8481)", "changes": [{"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": [["add", "theorem", "iterate_comp_le_of_le", ["monotone"]], ["add", "theorem", "le_iterate_comp_of_le", ["monotone"]]]}]}, {"timestamp": 1627806852, "sha": "2063a528", "message": "feat(order/partial_sups): complete lattice lemmas (#8480)", "changes": [{"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": [["mod", "theorem", "le_partial_sups", []], ["add", "theorem", "le_partial_sups_of_le", []], ["add", "theorem", "partial_sups_eq", ["monotone"]], ["add", "def", "gi", ["partial_sups"]], ["mod", "def", "partial_sups", []], ["del", "theorem", "partial_sups_eq", []], ["add", "theorem", "partial_sups_eq_bsupr", []], ["add", "theorem", "partial_sups_eq_sup'_range", []], ["add", "theorem", "partial_sups_eq_sup_range", []], ["mod", "theorem", "partial_sups_le", []], ["add", "theorem", "partial_sups_mono", []], ["mod", "theorem", "partial_sups_succ", []], ["mod", "theorem", "partial_sups_zero", []], ["add", "theorem", "supr_eq_supr_of_partial_sups_eq_partial_sups", []], ["add", "theorem", "supr_le_supr_of_partial_sups_le_partial_sups", []], ["add", "theorem", "supr_partial_sups_eq", []]]}]}, {"timestamp": 1627788521, "sha": "79bc7323", "message": "feat(order/galois_connection): formula for `upper_bounds (l '' s)` (#8478)\n* upgrade `galois_connection.upper_bounds_l_image_subset` and\n `galois_connection.lower_bounds_u_image` to equalities;\n* prove `bdd_above (l '' s) ↔ bdd_above s` and\n `bdd_below (u '' s) ↔ bdd_below s`;\n* move `galois_connection.dual` to the top and use it in some proofs;\n* use `order_iso.to_galois_connection` to transfer some of these\n results to `order_iso`s;\n* rename `rel_iso.to_galois_insertion` to `order_iso.to_galois_insertion`.", "changes": [{"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["del", "def", "rel_iso", ["setoid", "partition"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "bdd_above_l_image", ["galois_connection"]], ["add", "theorem", "bdd_below_u_image", ["galois_connection"]], ["add", "theorem", "lower_bounds_u_image", ["galois_connection"]], ["del", "theorem", "lower_bounds_u_image_subset", ["galois_connection"]], ["add", "theorem", "upper_bounds_l_image", ["galois_connection"]], ["del", "theorem", "upper_bounds_l_image_subset", ["galois_connection"]], ["add", "theorem", "bdd_above_image", ["order_iso"]], ["add", "theorem", "bdd_below_image", ["order_iso"]], ["add", "theorem", "lower_bounds_image", ["order_iso"]], ["add", "theorem", "upper_bounds_image", ["order_iso"]]]}]}, {"timestamp": 1627765907, "sha": "4c2edb00", "message": "feat(data/equiv/mul_add): add `units.coe_inv` (#8477)\n* rename old `units.coe_inv` to `units.coe_inv''`;\n* add new `@[simp, norm_cast, to_additive] lemma units.coe_inv` about\n coercion of units of a group;\n* add missing `coe_to_units`.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "coe_inv''", ["units"]], ["del", "theorem", "coe_inv", ["units"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "coe_to_units", []], ["mod", "def", "to_units", []], ["add", "theorem", "coe_inv", ["units"]]]}]}, {"timestamp": 1627765906, "sha": "6c6dd04a", "message": "feat(logic/relation): add `*.comap` for `reflexive`, `symmetric`, and `transitive` (#8469)", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "comap", ["reflexive"]], ["add", "theorem", "comap", ["symmetric"]], ["add", "theorem", "comap", ["transitive"]]]}]}, {"timestamp": 1627762635, "sha": "0827f3a6", "message": "feat(topology/metric_space/holder): add `holder_on_with` (#8454)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "tendsto_const_mul_rpow_nhds_zero_of_pos", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/holder.lean", "newPath": "src/topology/metric_space/holder.lean", "changes": [["add", "theorem", "comp", ["holder_on_with"]], ["add", "theorem", "comp_holder_with", ["holder_on_with"]], ["add", "theorem", "ediam_image_inter_le", ["holder_on_with"]], ["add", "theorem", "ediam_image_inter_le_of_le", ["holder_on_with"]], ["add", "theorem", "ediam_image_le", ["holder_on_with"]], ["add", "theorem", "ediam_image_le_of_le", ["holder_on_with"]], ["add", "theorem", "ediam_image_le_of_subset", ["holder_on_with"]], ["add", "theorem", "ediam_image_le_of_subset_of_le", ["holder_on_with"]], ["add", "theorem", "edist_le", ["holder_on_with"]], ["add", "theorem", "edist_le_of_le", ["holder_on_with"]], ["add", "def", "holder_on_with", []], ["add", "theorem", "holder_on_with_empty", []], ["add", "theorem", "holder_on_with_one", []], ["add", "theorem", "holder_on_with_singleton", []], ["add", "theorem", "holder_on_with_univ", []], ["add", "theorem", "comp_holder_on_with", ["holder_with"]], ["add", "theorem", "holder_on_with", ["set", "subsingleton"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_on_univ", []]]}]}, {"timestamp": 1627757707, "sha": "b3943dc0", "message": "feat(algebra/archimedean): `order_dual α` is archimedean (#8476)", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}]}, {"timestamp": 1627748944, "sha": "339a122a", "message": "chore(data/sym): move `data.sym` and `data.sym2` to `data.sym.basic` and `data.sym.sym2` (#8471)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/sym.lean", "newPath": "src/data/sym/basic.lean", "changes": []}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym/sym2.lean", "changes": []}]}, {"timestamp": 1627737304, "sha": "0a480168", "message": "doc(analysis/calculus/conformal): fix a docstring (#8479)\nFix a grammar mistake", "changes": [{"oldPath": "src/analysis/calculus/conformal.lean", "newPath": "src/analysis/calculus/conformal.lean", "changes": []}]}, {"timestamp": 1627661460, "sha": "6e400b90", "message": "feat(data/matrix/basic): update_{column,row}_subsingleton (#8422)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "update_column_subsingleton", ["matrix"]], ["add", "theorem", "update_row_subsingleton", ["matrix"]]]}]}, {"timestamp": 1627648437, "sha": "977063f6", "message": "chore(group_theory/congruence): a few `simp` lemmas (#8452)\n* add `con.comap_rel`;\n* add `@[simp]` to `con.ker_rel`;\n* replace `con.comp_mk'_apply` with `con.coe_mk'`;\n* [unrelated] add `commute.semiconj_by`.", "changes": [{"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["add", "theorem", "coe_mk'", ["con"]], ["add", "theorem", "comap_rel", ["con"]], ["del", "theorem", "comp_mk'_apply", ["con"]]]}]}, {"timestamp": 1627629629, "sha": "98b0d18a", "message": "feat(analysis/normed_space/SemiNormedGroup/kernel): Fix universes + add explicit (#8467)\nSee associated discussion from [zulip](https://leanprover.zulipchat.com/#narrow/stream/267928-condensed-mathematics/topic/for_mathlib/near/247575730)", "changes": [{"oldPath": "src/analysis/normed_space/SemiNormedGroup/kernels.lean", "newPath": "src/analysis/normed_space/SemiNormedGroup/kernels.lean", "changes": [["add", "def", "cokernel_cocone", ["SemiNormedGroup"]], ["add", "def", "cokernel_lift", ["SemiNormedGroup"]], ["add", "theorem", "comp_explicit_cokernel_π", ["SemiNormedGroup"]], ["add", "def", "explicit_cokernel", ["SemiNormedGroup"]], ["add", "def", "explicit_cokernel_desc", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_desc_norm_le", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_desc_norm_le_of_norm_le", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_desc_unique", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_hom_ext", ["SemiNormedGroup"]], ["add", "def", "explicit_cokernel_iso", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_iso_hom_desc", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_iso_hom_π", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_iso_inv_π", ["SemiNormedGroup"]], ["add", "def", "explicit_cokernel_π", ["SemiNormedGroup"]], ["add", "theorem", "explicit_cokernel_π_desc", ["SemiNormedGroup"]], ["add", "def", "is_colimit_cokernel_cocone", ["SemiNormedGroup"]], ["add", "theorem", "is_quotient_explicit_cokernel_π", ["SemiNormedGroup"]], ["add", "theorem", "norm_noninc_explicit_cokernel_π", ["SemiNormedGroup"]], ["mod", "def", "cokernel_cocone", ["SemiNormedGroup₁"]], ["mod", "def", "cokernel_lift", ["SemiNormedGroup₁"]]]}]}, {"timestamp": 1627612820, "sha": "8c89a525", "message": "feat(algebra/ordered_monoid_lemmas): add one `strict_mono` lemma and a few doc-strings (#8465)\nThe product of strictly monotone functions is strictly monotone (and some doc-strings).\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/monotonicity.20for.20sums.20and.20products.20of.20monotone.20functions)", "changes": [{"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": [["add", "theorem", "mul'", ["strict_mono"]]]}]}, {"timestamp": 1627570951, "sha": "a4f16538", "message": "feat(ring_theory): Dedekind domains have invertible fractional ideals (#8396)\nThis PR proves the other side of the equivalence `is_dedekind_domain → is_dedekind_domain_inv`, and uses this to provide a `comm_group_with_zero (fractional_ideal A⁰ K)` instance.\nCo-Authored-By: Ashvni ashvni.n@gmail.com\nCo-Authored-By: Filippo A. E. Nuccio filippo.nuccio@univ-st-etienne.fr", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "theorem", "coe_ideal_le_self_mul_inv", []], ["add", "theorem", "exists_multiset_prod_cons_le_and_prod_not_le", []], ["add", "theorem", "coe_ideal_mul_inv", ["fractional_ideal"]], ["add", "theorem", "exists_not_mem_one_of_ne_bot", ["fractional_ideal"]], ["add", "theorem", "mul_inv_cancel", ["fractional_ideal"]], ["add", "theorem", "mul_inv_cancel_of_le_one", ["fractional_ideal"]], ["add", "theorem", "one_inv", ["fractional_ideal"]], ["add", "theorem", "one_mem_inv_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "inv_anti_mono", []], ["add", "theorem", "is_dedekind_domain_iff_is_dedekind_domain_inv", []], ["add", "theorem", "le_self_mul_inv", []], ["add", "theorem", "mem_inv_iff", []]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "eq_zero_or_one", ["fractional_ideal"]], ["add", "theorem", "eq_zero_or_one_of_is_field", ["fractional_ideal"]]]}]}, {"timestamp": 1627564866, "sha": "69e3c79c", "message": "feat(logic/unique): unique_of_subsingleton (#8415)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "def", "unique_of_subsingleton", []]]}]}, {"timestamp": 1627559533, "sha": "7a891508", "message": "doc(data/nat/pairing): fix ascii table markdown (#8460)", "changes": [{"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}]}, {"timestamp": 1627541502, "sha": "cd6f2720", "message": "feat(order/*): a bunch of lemmas about `order_iso` (#8451)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "is_glb_image", ["order_iso"]], ["add", "theorem", "is_glb_preimage", ["order_iso"]], ["add", "theorem", "is_lub_image", ["order_iso"]], ["add", "theorem", "is_lub_preimage", ["order_iso"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "image_eq_preimage", ["order_iso"]], ["add", "theorem", "image_preimage", ["order_iso"]], ["add", "theorem", "image_symm_image", ["order_iso"]], ["add", "theorem", "le_symm_apply", ["order_iso"]], ["add", "theorem", "preimage_image", ["order_iso"]], ["add", "theorem", "preimage_symm_preimage", ["order_iso"]], ["add", "theorem", "symm_image_image", ["order_iso"]], ["add", "theorem", "symm_preimage_preimage", ["order_iso"]]]}, {"oldPath": "src/order/semiconj_Sup.lean", "newPath": "src/order/semiconj_Sup.lean", "changes": [["add", "theorem", "comp_order_iso", ["is_order_right_adjoint"]], ["add", "theorem", "order_iso_comp", ["is_order_right_adjoint"]], ["mod", "theorem", "right_mono", ["is_order_right_adjoint"]], ["del", "theorem", "unique", ["is_order_right_adjoint"]]]}]}, {"timestamp": 1627513121, "sha": "6d3e9362", "message": "feat(measure_theory): add @[to_additive] (#8142)\nThis PR adds `@[to_additive]` to `haar_measure` and everything that depends on. This will allow us to define the Lebesgue measure on `ℝ` and `ℝ ^ n` as the Haar measure (or just show that it is equal to it).", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/measure_theory/arithmetic.lean", "newPath": "src/measure_theory/arithmetic.lean", "changes": [["mod", "theorem", "ae_measurable_prod'", ["finset"]], ["mod", "theorem", "ae_measurable_prod", ["finset"]], ["mod", "theorem", "measurable_prod'", ["finset"]], ["mod", "theorem", "measurable_prod", ["finset"]], ["mod", "theorem", "ae_measurable_prod'", ["list"]], ["mod", "theorem", "ae_measurable_prod", ["list"]], ["mod", "theorem", "measurable_prod'", ["list"]], ["mod", "theorem", "measurable_prod", ["list"]], ["mod", "theorem", "ae_measurable_prod'", ["multiset"]], ["mod", "theorem", "ae_measurable_prod", ["multiset"]], ["mod", "theorem", "measurable_prod'", ["multiset"]], ["mod", "theorem", "measurable_prod", ["multiset"]]]}, {"oldPath": "src/measure_theory/conditional_expectation.lean", "newPath": "src/measure_theory/conditional_expectation.lean", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/group.lean", "newPath": "src/measure_theory/group.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": [["mod", "theorem", "mem_prehaar_empty", ["measure_theory", "measure", "haar"]], ["add", "theorem", "regular_of_is_mul_left_invariant", ["measure_theory", "measure"]], ["del", "theorem", "regular_of_left_invariant", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "snorm'_const_smul", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/prod_group.lean", "newPath": "src/measure_theory/prod_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1627506258, "sha": "870b9d83", "message": "ci(bors.toml): add merge-conflict to block_labels (#8455)", "changes": [{"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}]}, {"timestamp": 1627506257, "sha": "92a5be8d", "message": "feat(ring,group,monoid): map_equiv lemmas for different structures (#8453)\nThere is some inconsistency in the statements of these lemmas because there is a coercion from `ring_equiv` to `ring_hom`, but not `mul_equiv` to `monoid_hom`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "image_equiv_eq_preimage_symm", ["set"]], ["add", "theorem", "mem_image_equiv", ["set"]], ["add", "theorem", "preimage_equiv_eq_image_symm", ["set"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "comap_equiv_eq_map_symm", ["subgroup"]], ["add", "theorem", "map_equiv_eq_comap_symm", ["subgroup"]], ["add", "theorem", "mem_map_equiv", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "comap_equiv_eq_map_symm", ["submonoid"]], ["add", "theorem", "map_equiv_eq_comap_symm", ["submonoid"]], ["add", "theorem", "mem_map_equiv", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comap_equiv_eq_map_symm", ["submodule"]], ["add", "theorem", "map_equiv_eq_comap_symm", ["submodule"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "comap_equiv_eq_map_symm", ["subring"]], ["add", "theorem", "map_equiv_eq_comap_symm", ["subring"]], ["add", "theorem", "mem_map_equiv", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "comap_equiv_eq_map_symm", ["subsemiring"]], ["add", "theorem", "map_equiv_eq_comap_symm", ["subsemiring"]], ["add", "theorem", "mem_map_equiv", ["subsemiring"]]]}]}, {"timestamp": 1627501479, "sha": "7180d2f7", "message": "feat(group_theory/coset): Show that `quotient_group.left_rel` and `left_coset_equivalence` are the same thing (#8382)", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "left_coset_eq_iff", []], ["mod", "def", "left_rel", ["quotient_group"]], ["add", "theorem", "left_rel_r_eq_left_coset_equivalence", ["quotient_group"]], ["mod", "def", "quotient", ["quotient_group"]], ["mod", "def", "right_rel", ["quotient_group"]], ["add", "theorem", "right_rel_r_eq_right_coset_equivalence", ["quotient_group"]], ["add", "theorem", "right_coset_eq_iff", []]]}]}, {"timestamp": 1627492249, "sha": "32c82274", "message": "feat(analysis/normed_space/basic): define inclusion `locally_constant X G → C(X, G)` as various types of bundled morphism (#8448)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "def", "to_continuous_map_alg_hom", ["locally_constant"]], ["add", "def", "to_continuous_map_linear_map", ["locally_constant"]], ["add", "def", "to_continuous_map_monoid_hom", ["locally_constant"]]]}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": [["add", "theorem", "coe_algebra_map", ["locally_constant"]], ["add", "def", "const_monoid_hom", ["locally_constant"]], ["add", "def", "const_ring_hom", ["locally_constant"]]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "coe_const", ["locally_constant"]]]}]}, {"timestamp": 1627481297, "sha": "b71d38ce", "message": "feat(algebra/big_operators/basic): add lemmas about prod and sum of finset.erase (#8449)\nThis adds:\n* `finset.prod_erase_mul`\n* `finset.mul_prod_erase`\n* `finset.sum_erase_add`\n* `finset.add_sum_erase`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "mul_prod_erase", ["finset"]], ["add", "theorem", "prod_erase_mul", ["finset"]]]}]}, {"timestamp": 1627481296, "sha": "0ccd2f66", "message": "feat(data/dfinsupp): add simp lemma `single_eq_zero` (#8447)\nThis matches `finsupp.single_eq_zero`.\nAlso adds `dfinsupp.ext_iff`, and changes some lemma arguments to be explicit.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "ext_iff", ["dfinsupp"]], ["mod", "theorem", "single_add", ["dfinsupp"]], ["add", "theorem", "single_eq_zero", ["dfinsupp"]], ["mod", "theorem", "single_zero", ["dfinsupp"]]]}]}, {"timestamp": 1627471008, "sha": "4acfa924", "message": "chore(algebra/floor): add a few trivial `simp` lemmas about `floor` (#8450)", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "floor_add_nat", []], ["add", "theorem", "floor_int_add", []], ["mod", "theorem", "floor_mono", []], ["add", "theorem", "floor_nat_add", []], ["mod", "theorem", "floor_sub_int", []], ["add", "theorem", "floor_sub_nat", []]]}]}, {"timestamp": 1627462925, "sha": "30ff9350", "message": "feat(topology/algebra): topological fields (#8316)\nIncluding the completion of completeable topological fields.\nFrom the perfectoid spaces project.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_comm", ["filter"]], ["add", "theorem", "map_comm", ["filter"]]]}, {"oldPath": "src/topology/algebra/field.lean", "newPath": "src/topology/algebra/field.lean", "changes": [["add", "theorem", "continuous_units_inv", ["topological_division_ring"]], ["add", "theorem", "units_top_group", ["topological_division_ring"]], ["add", "theorem", "continuous_coe", ["topological_ring", "induced_units"]], ["add", "def", "topological_space_units", ["topological_ring"]], ["add", "theorem", "units_embedding", ["topological_ring"]], ["add", "theorem", "units_topology_eq", ["topological_ring"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/uniform_field.lean", "changes": [["add", "theorem", "coe_inv", []], ["add", "theorem", "continuous_hat_inv", []], ["add", "def", "hat_inv", []], ["add", "theorem", "hat_inv_extends", []], ["add", "theorem", "mul_hat_inv_cancel", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_closure_image", []], ["add", "theorem", "mem_closure_of_mem_closure_union", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod_induced_induced", []]]}]}, {"timestamp": 1627439038, "sha": "52e6e4cf", "message": "chore(scripts): update nolints.txt (#8446)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1627432818, "sha": "7c5fa729", "message": "refactor(group_theory/sylow): Extract a lemma from the proof of Cauchy's theorem (#8376)\nAlso added one other consequence of card_modeq_card_fixed_points.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "exists_fixed_point_of_prime_dvd_card_of_fixed_point", ["mul_action"]], ["add", "theorem", "nonempty_fixed_point_of_prime_not_dvd_card", ["mul_action"]]]}]}, {"timestamp": 1627432817, "sha": "37fc4cf4", "message": "feat(group_theory/subgroup): equiv_map_of_injective (#8371)\nAlso for rings and submonoids. The version for modules, `submodule.equiv_map_of_injective`, was already there.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "coe_equiv_map_of_injective_apply", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "coe_equiv_map_of_injective_apply", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_equiv_map_of_injective_apply", ["submodule"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "coe_equiv_map_of_injective_apply", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "coe_equiv_map_of_injective_apply", ["subsemiring"]]]}]}, {"timestamp": 1627426953, "sha": "cc7627a6", "message": "feat(analysis/normed_space/basic): define `normed_group` structure induced by injective group homomorphism (#8443)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "def", "induced", ["normed_group"]], ["add", "def", "induced", ["semi_normed_group"]]]}]}, {"timestamp": 1627426952, "sha": "1b0391a2", "message": "feat(data/nat/totient): totient_mul (#8441)\nAlso made `data/nat/totient` import `data/zmod/basic` instead of the other way round because I think people are more likely to want `zmod` but not `totient` than `totient` but not `zmod`.\nAlso deleted the deprecated `gpowers` because it caused a name clash in `group_theory/subgroup` when the imports were changed.", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_mul", ["nat"]], ["add", "theorem", "card_units_eq_totient", ["zmod"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["del", "theorem", "card_units_eq_totient", ["zmod"]]]}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["del", "def", "gmultiples", []], ["del", "theorem", "gmultiples_subset", []], ["del", "def", "gpowers", []], ["del", "theorem", "gpowers_subset", []], ["del", "theorem", "gpowers_eq_closure", ["group"]], ["del", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["del", "theorem", "gpow_mem", ["is_subgroup"]], ["del", "theorem", "mem_gmultiples", []], ["del", "theorem", "mem_gpowers", []]]}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}]}, {"timestamp": 1627426951, "sha": "a445c45c", "message": "feat(measure_theory/interval_integrable): a monotone function is interval integrable (#8398)", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "interval_integrable_of_antimono", []], ["add", "theorem", "interval_integrable_of_antimono_on", []], ["add", "theorem", "interval_integrable_of_monotone", []], ["add", "theorem", "interval_integrable_of_monotone_on", []]]}]}, {"timestamp": 1627414482, "sha": "9f75dc84", "message": "feat(measure_theory/lebesgue_measure): volume s ≤ diam s (#8437)\n* for `s : set real`, `volume s ≤ diam s`;\n* for `s : set (ι → real)`, `volume s ≤ ∏ i, diam (eval i '' s) ≤ diam s ^ fintype.card ι`.", "changes": [{"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["add", "theorem", "volume_le_diam", ["real"]], ["add", "theorem", "volume_pi_le_diam_pow", ["real"]], ["add", "theorem", "volume_pi_le_prod_diam", ["real"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ediam_of_unbounded", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_le_pi_edist", []]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1627414481, "sha": "5375918f", "message": "feat(topology/metric_space/antilipschitz): ediam of image/preimage (#8435)\nAlso review API", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "div_le_of_le_mul'", ["ennreal"]], ["add", "theorem", "mul_le_of_le_div'", ["ennreal"]], ["add", "theorem", "mul_le_of_le_div", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "div_le_of_le_mul'", ["nnreal"]], ["add", "theorem", "div_le_of_le_mul", ["nnreal"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "ediam_preimage_le", ["antilipschitz_with"]], ["add", "theorem", "le_mul_ediam_image", ["antilipschitz_with"]], ["mod", "theorem", "mul_le_dist", ["antilipschitz_with"]], ["add", "theorem", "mul_le_nndist", ["antilipschitz_with"]], ["mod", "theorem", "antilipschitz_with_iff_le_mul_dist", []], ["add", "theorem", "antilipschitz_with_iff_le_mul_nndist", []]]}]}, {"timestamp": 1627414480, "sha": "d57b6f9b", "message": "chore(data/dfinsupp): add yet more map_dfinsupp_sum lemmas (#8400)\nAs always, the one of quadratically many combinations of `FOO_hom.map_BAR_sum` is never there when you need it.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "map_dfinsupp_sum_add_hom", ["add_equiv"]], ["mod", "theorem", "coe_dfinsupp_sum_add_hom", ["add_monoid_hom"]], ["mod", "theorem", "dfinsupp_sum_add_hom_apply", ["add_monoid_hom"]], ["mod", "theorem", "map_dfinsupp_sum_add_hom", ["add_monoid_hom"]], ["mod", "theorem", "prod_sum_index", ["dfinsupp"]], ["add", "theorem", "map_dfinsupp_prod", ["mul_equiv"]], ["add", "theorem", "map_dfinsupp_prod", ["ring_hom"]], ["add", "theorem", "map_dfinsupp_sum", ["ring_hom"]], ["add", "theorem", "map_dfinsupp_sum_add_hom", ["ring_hom"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "map_dfinsupp_sum", ["linear_equiv"]], ["add", "theorem", "map_dfinsupp_sum_add_hom", ["linear_equiv"]], ["add", "theorem", "map_finsupp_sum", ["linear_equiv"]], ["add", "theorem", "map_dfinsupp_sum_add_hom", ["linear_map"]]]}]}, {"timestamp": 1627414479, "sha": "aea21af1", "message": "feat(ring_theory): `is_dedekind_domain_inv` implies `is_dedekind_domain` (#8315)\nCo-Authored-By: Ashvni ashvni.n@gmail.com\nCo-Authored-By: Filippo A. E. Nuccio filippo.nuccio@univ-st-etienne.fr", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "theorem", "adjoin_integral_eq_one_of_is_unit", ["fractional_ideal"]], ["add", "theorem", "dimension_le_one", ["is_dedekind_domain_inv"]], ["add", "theorem", "integrally_closed", ["is_dedekind_domain_inv"]], ["add", "theorem", "inv_mul_eq_one", ["is_dedekind_domain_inv"]], ["add", "theorem", "is_dedekind_domain", ["is_dedekind_domain_inv"]], ["add", "theorem", "is_noetherian_ring", ["is_dedekind_domain_inv"]], ["add", "theorem", "mul_inv_eq_one", ["is_dedekind_domain_inv"]], ["mod", "theorem", "is_dedekind_domain_inv_iff", []], ["add", "theorem", "mul_inv_cancel_iff_is_unit", []]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["mod", "theorem", "mem_coe", ["fractional_ideal"]], ["add", "theorem", "mem_coe_ideal_of_mem", ["fractional_ideal"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "is_principal_ideal_ring", ["is_field"]]]}]}, {"timestamp": 1627414478, "sha": "a052dd6c", "message": "doc(algebra/invertible): implementation notes about `invertible` instances (#8197)\nIn the discussion on #8195, I suggested to add these implementation notes. Creating a new PR should allow for a bit more direct discussion on the use of and plans for `invertible`.", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": []}]}, {"timestamp": 1627414477, "sha": "2ea73d1c", "message": "feat(analysis/normed_space/SemiNormedGroup): has_cokernels (#7628)\n# Cokernels in SemiNormedGroup₁ and SemiNormedGroup\nWe show that `SemiNormedGroup₁` has cokernels\n(for which of course the `cokernel.π f` maps are norm non-increasing),\nas well as the easier result that `SemiNormedGroup` has cokernels.\nSo far, I don't see a way to state nicely what we really want:\n`SemiNormedGroup` has cokernels, and `cokernel.π f` is norm non-increasing.\nThe problem is that the limits API doesn't promise you any particular model of the cokernel,\nand in `SemiNormedGroup` one can always take a cokernel and rescale its norm\n(and hence making `cokernel.π f` arbitrarily large in norm), obtaining another categorical cokernel.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/SemiNormedGroup/kernels.lean", "changes": [["add", "def", "cokernel_cocone", ["SemiNormedGroup₁"]], ["add", "def", "cokernel_lift", ["SemiNormedGroup₁"]]]}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": [["mod", "theorem", "lift_mk", ["normed_group_hom"]], ["add", "theorem", "lift_norm_le", ["normed_group_hom"]], ["add", "theorem", "lift_norm_noninc", ["normed_group_hom"]]]}]}, {"timestamp": 1627403858, "sha": "768980a9", "message": "feat(topology/locally_constant/basic): coercion of locally-constant function to continuous map (#8444)", "changes": [{"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "coe_continuous_map", ["locally_constant"]], ["add", "def", "to_continuous_map", ["locally_constant"]], ["add", "theorem", "to_continuous_map_eq_coe", ["locally_constant"]], ["add", "theorem", "to_continuous_map_injective", ["locally_constant"]]]}]}, {"timestamp": 1627403856, "sha": "3faee064", "message": "feat(algebra/order_functions): max/min commutative and other props (#8416)\nThe statements of the commutivity, associativity, and left commutativity of min and max are stated only in the rewrite lemmas, and not in their \"commutative\" synonyms.\nThis prevents them from being discoverable by suggest and related tactics. We now provide the synonyms explicitly.", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "max_associative", []], ["add", "theorem", "max_commutative", []], ["add", "theorem", "max_left_commutative", []], ["add", "theorem", "min_associative", []], ["add", "theorem", "min_commutative", []], ["add", "theorem", "min_left_commutative", []]]}]}, {"timestamp": 1627403855, "sha": "6c2f80c9", "message": "feat(category_theory/limits): disjoint coproducts (#8380)\nTowards a more detailed hierarchy of categorical properties.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/disjoint_coproduct.lean", "changes": [["add", "theorem", "initial_mono_class_of_disjoint_coproducts", ["category_theory", "limits"]], ["add", "def", "is_initial_of_is_pullback_of_is_coproduct", ["category_theory", "limits"]]]}]}, {"timestamp": 1627403854, "sha": "bb44e1a0", "message": "feat(category_theory/subobject): generalise bot of subobject lattice (#8232)", "changes": [{"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["del", "theorem", "has_initial", ["category_theory", "limits", "has_zero_object"]], ["del", "theorem", "has_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_is_initial", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_is_terminal", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "has_zero_object_of_has_initial_object", ["category_theory", "limits"]], ["add", "def", "has_zero_object_of_has_terminal_object", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/subobject/factor_thru.lean", "newPath": "src/category_theory/subobject/factor_thru.lean", "changes": [["mod", "def", "factor_thru", ["category_theory", "mono_over"]], ["mod", "def", "factors", ["category_theory", "mono_over"]]]}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": [["mod", "theorem", "bot_arrow", ["category_theory", "mono_over"]], ["add", "theorem", "bot_arrow_eq_zero", ["category_theory", "mono_over"]], ["add", "def", "bot_coe_iso_zero", ["category_theory", "mono_over"]], ["mod", "theorem", "bot_left", ["category_theory", "mono_over"]], ["add", "def", "bot_coe_iso_initial", ["category_theory", "subobject"]], ["mod", "def", "bot_coe_iso_zero", ["category_theory", "subobject"]], ["add", "theorem", "bot_eq_initial_to", ["category_theory", "subobject"]], ["mod", "theorem", "bot_eq_zero", ["category_theory", "subobject"]]]}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": [["mod", "theorem", "image_subobject_zero", ["category_theory", "limits"]], ["mod", "theorem", "image_subobject_zero_arrow", ["category_theory", "limits"]]]}]}, {"timestamp": 1627391915, "sha": "b61ce027", "message": "feat(number_theory/padics/padic_norm): add p^v(n) | n (#8442)\nAdd some API for `padic_val_nat` (a convenient function for e.g. Sylow theory).", "changes": [{"oldPath": "src/number_theory/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": [["add", "theorem", "pow_padic_val_nat_dvd", []], ["add", "theorem", "pow_succ_padic_val_nat_not_dvd", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "lt_top_iff_finite", ["multiplicity"]], ["add", "theorem", "ne_top_iff_finite", ["multiplicity"]]]}]}, {"timestamp": 1627381125, "sha": "7ae8da45", "message": "fix(algebra/big_operators/ring): `finset.sum_mul_sum` is true in a non-assoc non-unital semiring (#8436)", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}]}, {"timestamp": 1627381124, "sha": "3b590f31", "message": "feat(logic/embedding): add a coe instance from equiv to embeddings (#8323)", "changes": [{"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "def", "as_embedding", ["equiv"]], ["add", "theorem", "coe_eq_to_embedding", ["equiv"]]]}, {"oldPath": null, "newPath": "test/equiv.lean", "changes": [["add", "def", "f", []], ["add", "def", "s", []]]}]}, {"timestamp": 1627375332, "sha": "23e7c841", "message": "fix(algebra/ordered_group): add missing `to_additive`, fix `simps` (#8429)\n* Add `order_iso.add_left` and `order_iso.add_right`.\n* Use `to_equiv :=` instead of `..` to ensure\n `rfl : (order_iso.mul_right a).to_equiv = equiv.mul_right a`.\n* Simplify unapplied `(order_iso.mul_left a).symm` etc.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "mul_left_symm", ["order_iso"]], ["add", "theorem", "mul_right_symm", ["order_iso"]]]}]}, {"timestamp": 1627375331, "sha": "391746b1", "message": "feat(data/zmod/basic): chinese remainder theorem (#8356)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": [["add", "def", "prod_zero_ring", ["ring_equiv"]], ["add", "def", "zero_ring_prod", ["ring_equiv"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "left_inverse_of_right_inverse_of_card_le", ["fintype"]], ["add", "theorem", "right_inverse_of_left_inverse_of_card_le", ["fintype"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "fst_int_cast", ["prod"]], ["add", "theorem", "snd_int_cast", ["prod"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "fst_nat_cast", ["prod"]], ["add", "theorem", "snd_nat_cast", ["prod"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "eq_of_mul_eq_zero", ["nat", "coprime"]], ["add", "theorem", "lcm_dvd_iff", ["nat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "fst_zmod_cast", ["prod"]], ["add", "theorem", "snd_zmod_cast", ["prod"]], ["mod", "theorem", "card", ["zmod"]], ["add", "def", "chinese_remainder", ["zmod"]]]}]}, {"timestamp": 1627375330, "sha": "65006d27", "message": "feat(linear_algebra/linear_independent): finsupp.total is not equal to a vector outside the support of the coefficients (#8338)\n…", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "mem_supported_support", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "not_mem_span_image", ["linear_independent"]], ["add", "theorem", "total_ne_of_not_mem_support", ["linear_independent"]]]}]}, {"timestamp": 1627375329, "sha": "7e37f208", "message": "feat(group_theory/perm/cycles): more lemmas (#8175)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "nsmul_inj_mod", []], ["add", "theorem", "order_of_eq_zero_iff", []], ["add", "theorem", "pow_inj_iff_of_order_of_eq_zero", []], ["add", "theorem", "pow_inj_mod", []]]}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["mod", "theorem", "cycle_factors_finset_eq_empty_iff", ["equiv", "perm"]], ["mod", "theorem", "cycle_factors_finset_eq_singleton_iff", ["equiv", "perm"]], ["mod", "theorem", "cycle_factors_finset_eq_singleton_self_iff", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_mul_inv_mem_eq_sdiff", ["equiv", "perm"]], ["mod", "theorem", "cycle_factors_finset_noncomm_prod", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_one", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply_apply_gpow_self", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply_apply_pow_self", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply_apply_self", ["equiv", "perm"]], ["add", "theorem", "cycle_of_mem_cycle_factors_finset_iff", ["equiv", "perm"]], ["add", "theorem", "cycle_of_mul_of_apply_right_eq_self", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_mul_eq_union", ["equiv", "perm", "disjoint"]], ["add", "theorem", "cycle_of_mul_distrib", ["equiv", "perm", "disjoint"]], ["add", "theorem", "disjoint_cycle_factors_finset", ["equiv", "perm", "disjoint"]], ["add", "theorem", "disjoint_mul_inv_of_mem_cycle_factors_finset", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_eq_singleton", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "exists_pow_eq_one", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "is_cycle_pow_pos_of_lt_prime_order", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "mem_support_pos_pow_iff_of_lt_order_of", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "pow_eq_one_iff", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "pow_iff", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "support_pow_eq_iff", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "is_cycle_of_is_cycle_pow", ["equiv", "perm"]], ["add", "theorem", "mem_cycle_factors_finset_support_le", ["equiv", "perm"]], ["add", "theorem", "mem_support_cycle_of_iff", ["equiv", "perm"]], ["add", "theorem", "nodup_of_pairwise_disjoint_cycles", ["equiv", "perm"]], ["add", "theorem", "not_is_cycle_one", ["equiv", "perm"]], ["add", "theorem", "pow_apply_eq_pow_mod_order_of_cycle_of_apply", ["equiv", "perm"]], ["add", "theorem", "nat''", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "nat'", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "nat", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "nat_of_mem_support", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "same_cycle_pow_left_iff", ["equiv", "perm"]], ["add", "theorem", "support_cycle_of_eq_nil_iff", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": [["add", "theorem", "mono", ["equiv", "perm", "disjoint"]]]}]}, {"timestamp": 1627372168, "sha": "d99788a6", "message": "feat(measure_theory/borel_space): lemmas about `is_pi_system_Ioo` and `finite_spanning_sets_in` (#8434)", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "is_pi_system_Ioo", []], ["add", "theorem", "is_pi_system_Ioo_mem", []], ["add", "def", "finite_spanning_sets_in_Ioo_rat", ["real"]], ["add", "theorem", "is_pi_system_Ioo_rat", ["real"]]]}]}, {"timestamp": 1627372167, "sha": "eae3eadf", "message": "feat(topology/instances/ennreal): diameter of `s : set real` (#8433)", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "theorem", "Inf_empty", ["real"]], ["add", "theorem", "Inf_le_Sup", ["real"]], ["mod", "theorem", "Sup_empty", ["real"]], ["add", "theorem", "add_neg_lt_Sup", ["real"]], ["del", "theorem", "add_pos_lt_Sup", ["real"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "diam_closure", ["metric"]], ["add", "theorem", "diam_eq", ["real"]], ["add", "theorem", "ediam_eq", ["real"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "subset_Icc_Inf_Sup_of_bounded", ["real"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1627366466, "sha": "fb815d7b", "message": "feat(algebra/ring/basic): coercions of ring_hom.id (#8439)\nTwo basic lemmas about the identity map as a ring hom, split off from #3292 at @eric-wieser's suggestion.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "coe_add_monoid_hom_id", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom_id", ["ring_hom"]]]}]}, {"timestamp": 1627343574, "sha": "e9309e37", "message": "chore(data/equiv/list): rename `encodable.fintype.encodable` to `fintype.encodable` (#8428)", "changes": [{"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}]}, {"timestamp": 1627337139, "sha": "26528b75", "message": "chore(data/set): add a couple of lemmas (#8430)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage", ["set", "subsingleton"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "image_bUnion", ["set"]]]}]}, {"timestamp": 1627315110, "sha": "0190177e", "message": "feat(group_theory/subgroup): eq_top_of_le_card and eq_bot_of_card_le (#8414)\nSlight strengthenings of the lemmas `eq_top_of_card_eq` and `eq_bot_of_card_eq`.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "eq_bot_of_card_le", ["subgroup"]], ["add", "theorem", "eq_top_of_le_card", ["subgroup"]]]}]}, {"timestamp": 1627315109, "sha": "d8fc0817", "message": "chore(data/pnat/basic): rename `bot_eq_zero` to `bot_eq_one`, generalize from `Prop` to `Sort*` (#8412)", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "bot_eq_one", ["pnat"]], ["del", "theorem", "bot_eq_zero", ["pnat"]], ["add", "def", "case_strong_induction_on", ["pnat"]], ["del", "theorem", "case_strong_induction_on", ["pnat"]], ["mod", "theorem", "coe_le_coe", ["pnat"]], ["mod", "theorem", "coe_lt_coe", ["pnat"]], ["mod", "theorem", "exists_eq_succ_of_ne_one", ["pnat"]], ["mod", "theorem", "ne_zero", ["pnat"]], ["mod", "def", "rec_on", ["pnat"]], ["mod", "theorem", "rec_on_succ", ["pnat"]], ["add", "def", "strong_induction_on", ["pnat"]], ["del", "theorem", "strong_induction_on", ["pnat"]]]}]}, {"timestamp": 1627315108, "sha": "1dc4bef9", "message": "feat(ring_theory): shortcut lemmas for `coe : ideal R → fractional_ideal R⁰ K` (#8395)\nThese results were already available, but in a less convenient form that e.g. asked you to prove an inclusion of submonoids `S ≤ R⁰`. Specializing them to the common case where the fractional ideal is in the field of fractions should save a bit of headache in the common cases.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_ideal_eq_zero_iff", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_injective", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_le_coe_ideal'", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_le_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_ne_zero", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_ne_zero_iff", ["fractional_ideal"]]]}]}, {"timestamp": 1627315107, "sha": "708b25d2", "message": "feat(ring_theory): (fractional) ideals are finitely generated if they are invertible (#8294)\nThis is one of the three steps in showing `is_dedekind_domain_inv` implies `is_dedekind_domain`.\nCo-Authored-By: Ashvni ashvni.n@gmail.com\nCo-Authored-By: Filippo A. E. Nuccio filippo.nuccio@univ-st-etienne.fr", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_ideal_fg", ["fractional_ideal"]], ["add", "theorem", "fg_of_is_unit", ["fractional_ideal"]], ["add", "theorem", "fg_unit", ["fractional_ideal"]], ["add", "theorem", "mem_span_mul_finite_of_mem_mul", ["fractional_ideal"]], ["add", "theorem", "fg_of_is_unit", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coe_submodule_fg", ["is_localization"]]]}]}, {"timestamp": 1627309857, "sha": "4ca0a8b3", "message": "feat(data/fintype/basic): provide a `fintype` instance for `sym α n` (#8427)\nThis also provides `fintype (sym.sym' α n)` as an intermediate step.\nNote we make `vector.perm.is_setoid` reducible as `quotient.fintype _` requires either this or `local attribute [instance] vector.perm.is_setoid` to be accepted by the elaborator.\nThe referenced library note suggests making it reducible is fine.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/sym.lean", "newPath": "src/data/sym.lean", "changes": []}]}, {"timestamp": 1627285071, "sha": "740b41bd", "message": "feat(data/fintype/basic): add `finset.(sup|inf)_univ_eq_(supr|infi)` (#8397)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "inf_univ_eq_infi", ["finset"]], ["add", "theorem", "sup_univ_eq_supr", ["finset"]]]}]}, {"timestamp": 1627228293, "sha": "0c024a62", "message": "chore(*): standardize Prop/Type instance names (#8360)\nautogenerated names for these instances mention `sort.` instead of `Prop.`", "changes": [{"oldPath": "src/category_theory/preadditive/projective.lean", "newPath": "src/category_theory/preadditive/projective.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/tactic/has_variable_names.lean", "newPath": "src/tactic/has_variable_names.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}]}, {"timestamp": 1627225973, "sha": "24403303", "message": "feat(linear_algebra/matrix/determinant): det_pow (#8421)", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_pow", ["matrix"]]]}]}, {"timestamp": 1627196789, "sha": "fff96e53", "message": "feat(measure_theory/vector_measure): add partial order instance to vector measures (#8410)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/vector_measure.lean", "newPath": "src/measure_theory/vector_measure.lean", "changes": [["add", "theorem", "le_iff'", ["measure_theory", "vector_measure"]], ["add", "theorem", "le_iff", ["measure_theory", "vector_measure"]]]}]}, {"timestamp": 1627167328, "sha": "02b37b5a", "message": "feat(group_theory/subgroup): eq_bot_of_card_eq (#8413)\nCompanion lemma to `eq_top_of_card_eq`.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "eq_bot_of_card_eq", ["subgroup"]]]}]}, {"timestamp": 1627140635, "sha": "8a0d5e07", "message": "feat(group_theory/complement): define subgroup complement, prove Schur-Zassenhaus (#8008)\nDefines complements, and proves Schur-Zassenhaus for abelian normal subgroups.", "changes": [{"oldPath": null, "newPath": "src/group_theory/complement.lean", "changes": [["add", "theorem", "diff_inv", ["subgroup"]], ["add", "theorem", "diff_mul_diff", ["subgroup"]], ["add", "theorem", "diff_self", ["subgroup"]], ["add", "theorem", "exists_left_complement_of_coprime", ["subgroup"]], ["add", "theorem", "exists_right_complement_of_coprime", ["subgroup"]], ["add", "theorem", "exists_smul_eq", ["subgroup"]], ["add", "theorem", "exists_unique", ["subgroup", "is_complement"]], ["add", "theorem", "symm", ["subgroup", "is_complement"]], ["add", "def", "is_complement", ["subgroup"]], ["add", "theorem", "is_complement_comm", ["subgroup"]], ["add", "theorem", "is_complement_iff_exists_unique", ["subgroup"]], ["add", "theorem", "is_complement_of_coprime", ["subgroup"]], ["add", "theorem", "is_complement_of_disjoint", ["subgroup"]], ["add", "theorem", "is_complement_stabilizer_of_coprime", ["subgroup"]], ["add", "def", "left_transversals", ["subgroup"]], ["add", "theorem", "mem_left_transversals_iff_bijective", ["subgroup"]], ["add", "theorem", "mem_left_transversals_iff_exists_unique_inv_mul_mem", ["subgroup"]], ["add", "theorem", "mem_left_transversals_iff_exists_unique_quotient_mk'_eq", ["subgroup"]], ["add", "theorem", "mem_right_transversals_iff_bijective", ["subgroup"]], ["add", "theorem", "mem_right_transversals_iff_exists_unique_mul_inv_mem", ["subgroup"]], ["add", "theorem", "mem_right_transversals_iff_exists_unique_quotient_mk'_eq", ["subgroup"]], ["add", "def", "quotient_diff", ["subgroup"]], ["add", "def", "right_transversals", ["subgroup"]], ["add", "theorem", "smul_diff", ["subgroup"]], ["add", "theorem", "smul_diff_smul", ["subgroup"]], ["add", "theorem", "smul_injective", ["subgroup"]], ["add", "theorem", "smul_symm_apply_eq_mul_symm_apply_inv_smul", ["subgroup"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "inf_eq_bot_of_coprime", []]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "structure", "is_commutative", ["add_subgroup"]], ["add", "structure", "is_commutative", ["subgroup"]]]}]}, {"timestamp": 1627136471, "sha": "3d11f2da", "message": "refactor(data/set/disjointed): split into `data.set.pairwise` and `order.disjointed` (#8411)", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/lattice.lean", "newPath": "src/data/equiv/encodable/lattice.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/set/pairwise.lean", "changes": [["add", "theorem", "mono", ["pairwise"]], ["add", "theorem", "pairwise_on", ["pairwise"]], ["add", "def", "pairwise", []], ["add", "theorem", "pairwise_disjoint_fiber", []], ["add", "theorem", "pairwise_disjoint_on_bool", []], ["add", "theorem", "pairwise_disjoint_on_nat", []], ["add", "theorem", "pairwise_on_bool", []], ["add", "theorem", "pairwise_on_nat", []], ["add", "theorem", "on_injective", ["set", "pairwise_on"]], ["add", "theorem", "pairwise_on_univ", ["set"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/order/disjointed.lean", "changes": [["del", "theorem", "mono", ["pairwise"]], ["del", "theorem", "pairwise_on", ["pairwise"]], ["del", "def", "pairwise", []], ["del", "theorem", "pairwise_disjoint_fiber", []], ["del", "theorem", "pairwise_disjoint_on_bool", []], ["del", "theorem", "pairwise_disjoint_on_nat", []], ["del", "theorem", "pairwise_on_bool", []], ["del", "theorem", "pairwise_on_nat", []], ["del", "theorem", "on_injective", ["set", "pairwise_on"]], ["del", "theorem", "pairwise_on_univ", ["set"]]]}, {"oldPath": "src/order/partial_sups.lean", "newPath": "src/order/partial_sups.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}]}, {"timestamp": 1627060508, "sha": "dfa95abf", "message": "feat(analysis/normed_space/linear_isometry): add an upgrade from linear isometries between finite dimensional spaces of eq finrank to linear isometry equivs (#8406)", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_to_linear_isometry_equiv", ["linear_isometry"]], ["add", "theorem", "to_linear_isometry_equiv_apply", ["linear_isometry"]]]}]}, {"timestamp": 1627041534, "sha": "8062521e", "message": "feat(topology/locally_constant): Adding a module structure to locally constant functions (#8384)\nWe add an A-module structure to locally constant functions from a topological space to a semiring A.\nThis also adds the lemmas `coe_zero`, `coe_add`, `coe_neg`, `coe_sub`, `coe_one`, `coe_mul`, `coe_div`, `coe_inv` to match the new `coe_smul` lemma.", "changes": [{"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": [["add", "theorem", "coe_div", ["locally_constant"]], ["add", "def", "coe_fn_monoid_hom", ["locally_constant"]], ["add", "theorem", "coe_inv", ["locally_constant"]], ["add", "theorem", "coe_mul", ["locally_constant"]], ["add", "theorem", "coe_one", ["locally_constant"]], ["add", "theorem", "coe_smul", ["locally_constant"]], ["mod", "theorem", "inv_apply", ["locally_constant"]], ["mod", "theorem", "mul_apply", ["locally_constant"]], ["mod", "theorem", "one_apply", ["locally_constant"]], ["add", "theorem", "smul_apply", ["locally_constant"]]]}]}, {"timestamp": 1627034980, "sha": "f2f62286", "message": "feat(set/basic): range_splitting f : range f → α (#8340)\nWe use choice to provide an arbitrary injective splitting `range f → α` for any `f : α → β`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "apply_range_splitting", ["set"]], ["add", "theorem", "comp_range_splitting", ["set"]], ["add", "theorem", "left_inverse_range_splitting", ["set"]], ["add", "theorem", "range_factorization_coe", ["set"]], ["add", "theorem", "range_splitting_injective", ["set"]]]}]}, {"timestamp": 1627030973, "sha": "6efc3e91", "message": "fix(data/polynomial): Resolve a has_scalar instance diamond (#8392)\nWithout this change, the following fails to close the diamond between `units.distrib_mul_action` and`polynomial.distrib_mul_action`:\n```lean\nexample (R α : Type*) (β : α → Type*) [monoid R] [semiring α] [distrib_mul_action R α] :\n (units.distrib_mul_action : distrib_mul_action (units R) (polynomial α)) =\n polynomial.distrib_mul_action :=\nrfl\n```\nThis was because both used `polynomial.smul`, which was:\n* `@[irreducible]`, which means that typeclass search is unable to unfold it to see there is no diamond\n* Defined using a pattern match, which means that even if it were not reducible, it does not unfold as needed.\nThis adds a new test file with this diamond and some other diamonds to verify they are defeq.\nUnfortunately this means `simps` now aggressively unfolds `•` on polynomials into `finsupp`s, so we need to tell `simps` precisely what lemma we actually want. This only happens in one place though.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/units.2Ehas_scalar.20and.20polynomial.2Ehas_scalar.20diamond/near/246800881)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": null, "newPath": "test/instance_diamonds.lean", "changes": []}]}, {"timestamp": 1627030972, "sha": "ced1f120", "message": "feat(analysis/calculus): strictly differentiable (or C^1) map is locally Lipschitz (#8362)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "exists_lipschitz_on_with", ["has_strict_fderiv_at"]], ["add", "theorem", "exists_lipschitz_on_with_of_nnnorm_lt", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "exists_nhds_within_lipschitz_on_with_of_has_fderiv_within_at", ["convex"]], ["del", "theorem", "exists_nhds_within_lipschitz_on_with_of_has_fderiv_within_at_of_continuous_within_at", ["convex"]], ["add", "theorem", "exists_nhds_within_lipschitz_on_with_of_has_fderiv_within_at_of_nnnorm_lt", ["convex"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "exists_lipschitz_on_with", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "exists_lipschitz_on_with_of_nnnorm_lt", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "exists_lipschitz_on_with", ["times_cont_diff_at"]], ["add", "theorem", "exists_lipschitz_on_with_of_nnnorm_lt", ["times_cont_diff_at"]], ["add", "theorem", "exists_lipschitz_on_with", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "lipschitz_of_bound", ["add_monoid_hom"]], ["add", "theorem", "lipschitz_of_bound_nnnorm", ["add_monoid_hom"]], ["add", "theorem", "lipschitz_with_iff_norm_sub_le", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "is_O_with_comp", ["continuous_linear_map"]], ["add", "theorem", "is_O_with_id", ["continuous_linear_map"]], ["add", "theorem", "is_O_with_sub", ["continuous_linear_map"]], ["add", "theorem", "le_op_nnnorm", ["continuous_linear_map"]], ["mod", "theorem", "lipschitz", ["continuous_linear_map"]], ["add", "theorem", "lipschitz_of_bound_nnnorm", ["linear_map"]]]}]}, {"timestamp": 1627030971, "sha": "1dafd0f7", "message": "feat(measure_theory/integrable_on): a monotone function is integrable on any compact subset (#8336)", "changes": [{"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_compact_of_antimono", []], ["add", "theorem", "integrable_on_compact_of_antimono_on", []], ["add", "theorem", "integrable_on_compact_of_monotone", []], ["add", "theorem", "integrable_on_compact_of_monotone_on", []]]}]}, {"timestamp": 1627027741, "sha": "970b17bf", "message": "refactor(topology/metric_space): move lemmas about `paracompact_space` and the shrinking lemma to separate files (#8404)\nOnly a few files in `mathlib` actually depend on results about `paracompact_space`. With this refactor, only a few files depend on `topology/paracompact_space` and `topology/shrinking_lemma`. The main side effects are that `paracompact_of_emetric` and `normal_of_emetric` instances are not available without importing `topology.metric_space.emetric_paracompact` and the shrinking lemma for balls in a proper metric space is not available without `import topology.metric_space.shrinking_lemma`.", "changes": [{"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/geometry/manifold/partition_of_unity.lean", "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "exists_Union_ball_eq_radius_lt", []], ["del", "theorem", "exists_Union_ball_eq_radius_pos_lt", []], ["del", "theorem", "exists_locally_finite_Union_eq_ball_radius_lt", []], ["del", "theorem", "exists_locally_finite_subset_Union_ball_radius_lt", []], ["del", "theorem", "exists_subset_Union_ball_radius_lt", []], ["del", "theorem", "exists_subset_Union_ball_radius_pos_lt", []]]}, {"oldPath": null, "newPath": "src/topology/metric_space/emetric_paracompact.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/metric_space/shrinking_lemma.lean", "changes": [["add", "theorem", "exists_Union_ball_eq_radius_lt", []], ["add", "theorem", "exists_Union_ball_eq_radius_pos_lt", []], ["add", "theorem", "exists_locally_finite_Union_eq_ball_radius_lt", []], ["add", "theorem", "exists_locally_finite_subset_Union_ball_radius_lt", []], ["add", "theorem", "exists_subset_Union_ball_radius_lt", []], ["add", "theorem", "exists_subset_Union_ball_radius_pos_lt", []]]}]}, {"timestamp": 1627015730, "sha": "0dd81c1e", "message": "chore(topology/urysohns_lemma): use bundled `C(X, ℝ)` (#8402)", "changes": [{"oldPath": "src/measure_theory/continuous_map_dense.lean", "newPath": "src/measure_theory/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/topology/urysohns_lemma.lean", "newPath": "src/topology/urysohns_lemma.lean", "changes": []}]}, {"timestamp": 1627006317, "sha": "88de9b51", "message": "chore(scripts): update nolints.txt (#8403)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1626998566, "sha": "316d69fe", "message": "feat(measure_theory/measure_space): add measurable set lemma for symmetric differences (#8401)", "changes": [{"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "cond", ["measurable_set"]], ["add", "theorem", "symm_diff", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "theorem", "cond", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/tactic.lean", "newPath": "src/measure_theory/tactic.lean", "changes": []}]}, {"timestamp": 1626988777, "sha": "0cbc6f39", "message": "feat(linear_algebra/matrix/determinant): generalize det_fin_zero to det_eq_one_of_is_empty (#8387)\nAlso golfs a nearby proof", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_eq_one_iff_nonempty_unique", ["fintype"]], ["mod", "theorem", "univ_of_is_empty", ["fintype"]], ["add", "theorem", "univ_is_empty", []]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["del", "theorem", "det_fin_zero", ["matrix"]], ["add", "theorem", "det_is_empty", ["matrix"]]]}]}, {"timestamp": 1626975608, "sha": "468328da", "message": "chore(group_theory/subgroup): the range of a monoid/group/ring/module hom from a finite type is finite (#8293)\nWe have this fact for maps of types, but when changing `is_group_hom` etc from classes to structures one needs it for other bundled maps. The proofs use the power of the `copy` trick.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1626970521, "sha": "0bc800c2", "message": "feat(algebra/algebra/basic) new bit0/1_smul_one lemmas (#8394)\nSee https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Import.20impacts.20simp.3F/near/246713984, these lemmas should result in better behaviour with numerals", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "bit0_smul_one'", ["algebra"]], ["mod", "theorem", "bit0_smul_one", ["algebra"]], ["add", "theorem", "bit1_smul_one'", ["algebra"]], ["mod", "theorem", "bit1_smul_one", ["algebra"]]]}]}, {"timestamp": 1626970520, "sha": "7cdd7020", "message": "chore(ring_theory): `set_like` instance for fractional ideals (#8275)\nThis PR does a bit of cleanup in `fractional_ideal.lean` by using `set_like` to define `has_mem` and the coe to set.\nAs a bonus, it removes the `namespace ring` at the top of the file, that has been bugging me ever after I added it in the original fractional ideal PR.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "add_le_add_left", ["fractional_ideal"]], ["add", "def", "adjoin_integral", ["fractional_ideal"]], ["add", "theorem", "bot_eq_zero", ["fractional_ideal"]], ["add", "theorem", "canonical_equiv_flip", ["fractional_ideal"]], ["add", "theorem", "canonical_equiv_span_singleton", ["fractional_ideal"]], ["add", "theorem", "canonical_equiv_symm", ["fractional_ideal"]], ["add", "theorem", "coe_add", ["fractional_ideal"]], ["add", "theorem", "coe_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "coe_div", ["fractional_ideal"]], ["add", "theorem", "coe_fun_map_equiv", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_le_one", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_span_singleton", ["fractional_ideal"]], ["add", "theorem", "coe_ideal_top", ["fractional_ideal"]], ["add", "theorem", "coe_le_coe", ["fractional_ideal"]], ["add", "theorem", "coe_map", ["fractional_ideal"]], ["add", "theorem", "coe_mem_one", ["fractional_ideal"]], ["add", "theorem", "coe_mk", ["fractional_ideal"]], ["add", "theorem", "coe_mul", ["fractional_ideal"]], ["add", "theorem", "coe_one", ["fractional_ideal"]], ["add", "theorem", "coe_one_eq_coe_submodule_top", ["fractional_ideal"]], ["add", "theorem", "coe_span_singleton", ["fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_bot", ["fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_eq_zero", ["fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_injective", ["fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_ne_zero", ["fractional_ideal"]], ["add", "theorem", "coe_to_submodule_eq_bot", ["fractional_ideal"]], ["add", "theorem", "coe_to_submodule_injective", ["fractional_ideal"]], ["add", "theorem", "coe_to_submodule_ne_bot", ["fractional_ideal"]], ["add", "theorem", "coe_zero", ["fractional_ideal"]], ["add", "theorem", "div_nonzero", ["fractional_ideal"]], ["add", "theorem", "div_one", ["fractional_ideal"]], ["add", "theorem", "div_span_singleton", ["fractional_ideal"]], ["add", "theorem", "div_zero", ["fractional_ideal"]], ["add", "theorem", "eq_one_div_of_mul_eq_one", ["fractional_ideal"]], ["add", "theorem", "eq_span_singleton_of_principal", ["fractional_ideal"]], ["add", "theorem", "eq_zero_iff", ["fractional_ideal"]], ["add", "theorem", "exists_eq_span_singleton_mul", ["fractional_ideal"]], ["add", "theorem", "exists_mem_to_map_eq", ["fractional_ideal"]], ["add", "theorem", "exists_ne_zero_mem_is_integer", ["fractional_ideal"]], ["add", "theorem", "ext", ["fractional_ideal"]], ["add", "theorem", "fractional_div_of_nonzero", ["fractional_ideal"]], ["add", "theorem", "fractional_inf", ["fractional_ideal"]], ["add", "theorem", "fractional_map", ["fractional_ideal"]], ["add", "theorem", "fractional_mul", ["fractional_ideal"]], ["add", "theorem", "fractional_sup", ["fractional_ideal"]], ["add", "theorem", "is_fractional_adjoin_integral", ["fractional_ideal"]], ["add", "theorem", "is_fractional_of_fg", ["fractional_ideal"]], ["add", "theorem", "is_fractional_of_le", ["fractional_ideal"]], ["add", "theorem", "is_fractional_of_le_one", ["fractional_ideal"]], ["add", "theorem", "is_fractional_span_iff", ["fractional_ideal"]], ["add", "theorem", "is_fractional_span_singleton", ["fractional_ideal"]], ["add", "theorem", "is_noetherian", ["fractional_ideal"]], ["add", "theorem", "is_noetherian_coe_to_fractional_ideal", ["fractional_ideal"]], ["add", "theorem", "is_noetherian_iff", ["fractional_ideal"]], ["add", "theorem", "is_noetherian_span_singleton_inv_to_map_mul", ["fractional_ideal"]], ["add", "theorem", "is_noetherian_zero", ["fractional_ideal"]], ["add", "theorem", "is_principal_iff", ["fractional_ideal"]], ["add", "theorem", "le_div_iff_mul_le", ["fractional_ideal"]], ["add", "theorem", "le_div_iff_of_nonzero", ["fractional_ideal"]], ["add", "theorem", "le_one_iff_exists_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "le_self_mul_one_div", ["fractional_ideal"]], ["add", "theorem", "le_self_mul_self", ["fractional_ideal"]], ["add", "theorem", "le_zero_iff", ["fractional_ideal"]], ["add", "def", "map", ["fractional_ideal"]], ["add", "theorem", "map_add", ["fractional_ideal"]], ["add", "theorem", "map_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "map_comp", ["fractional_ideal"]], ["add", "theorem", "map_div", ["fractional_ideal"]], ["add", "theorem", "map_eq_zero_iff", ["fractional_ideal"]], ["add", "def", "map_equiv", ["fractional_ideal"]], ["add", "theorem", "map_equiv_apply", ["fractional_ideal"]], ["add", "theorem", "map_equiv_refl", ["fractional_ideal"]], ["add", "theorem", "map_equiv_symm", ["fractional_ideal"]], ["add", "theorem", "map_id", ["fractional_ideal"]], ["add", "theorem", "map_map_symm", ["fractional_ideal"]], ["add", "theorem", "map_mul", ["fractional_ideal"]], ["add", "theorem", "map_ne_zero", ["fractional_ideal"]], ["add", "theorem", "map_one", ["fractional_ideal"]], ["add", "theorem", "map_one_div", ["fractional_ideal"]], ["add", "theorem", "map_symm_map", ["fractional_ideal"]], ["add", "theorem", "map_zero", ["fractional_ideal"]], ["add", "theorem", "mem_adjoin_integral_self", ["fractional_ideal"]], ["add", "theorem", "mem_canonical_equiv_apply", ["fractional_ideal"]], ["add", "theorem", "mem_coe", ["fractional_ideal"]], ["add", "theorem", "mem_coe_ideal", ["fractional_ideal"]], ["add", "theorem", "mem_div_iff_of_nonzero", ["fractional_ideal"]], ["add", "theorem", "mem_map", ["fractional_ideal"]], ["add", "theorem", "mem_one_iff", ["fractional_ideal"]], ["add", "theorem", "mem_singleton_mul", ["fractional_ideal"]], ["add", "theorem", "mem_span_singleton", ["fractional_ideal"]], ["add", "theorem", "mem_span_singleton_self", ["fractional_ideal"]], ["add", "theorem", "mem_zero_iff", ["fractional_ideal"]], ["add", "def", "mul", ["fractional_ideal"]], ["add", "theorem", "mul_div_self_cancel_iff", ["fractional_ideal"]], ["add", "theorem", "mul_eq_mul", ["fractional_ideal"]], ["add", "theorem", "mul_le", ["fractional_ideal"]], ["add", "theorem", "mul_le_mul_left", ["fractional_ideal"]], ["add", "theorem", "mul_left_mono", ["fractional_ideal"]], ["add", "theorem", "mul_mem_mul", ["fractional_ideal"]], ["add", "theorem", "mul_one_div_le_one", ["fractional_ideal"]], ["add", "theorem", "mul_right_mono", ["fractional_ideal"]], ["add", "theorem", "mul_self_le_self", ["fractional_ideal"]], ["add", "theorem", "ne_zero_of_mul_eq_one", ["fractional_ideal"]], ["add", "theorem", "one_div_span_singleton", ["fractional_ideal"]], ["add", "theorem", "one_mem_one", ["fractional_ideal"]], ["add", "def", "span_singleton", ["fractional_ideal"]], ["add", "theorem", "span_singleton_eq_zero_iff", ["fractional_ideal"]], ["add", "theorem", "span_singleton_mul_span_singleton", ["fractional_ideal"]], ["add", "theorem", "span_singleton_ne_zero_iff", ["fractional_ideal"]], ["add", "theorem", "span_singleton_one", ["fractional_ideal"]], ["add", "theorem", "span_singleton_zero", ["fractional_ideal"]], ["add", "theorem", "sup_eq_add", ["fractional_ideal"]], ["add", "theorem", "val_eq_coe", ["fractional_ideal"]], ["add", "theorem", "zero_le", ["fractional_ideal"]], ["add", "def", "fractional_ideal", []], ["add", "def", "is_fractional", []], ["del", "theorem", "add_le_add_left", ["ring", "fractional_ideal"]], ["del", "def", "adjoin_integral", ["ring", "fractional_ideal"]], ["del", "theorem", "bot_eq_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "canonical_equiv_flip", ["ring", "fractional_ideal"]], ["del", "theorem", "canonical_equiv_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "canonical_equiv_symm", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_add", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_coe_ideal", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_div", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_fun_map_equiv", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_ideal_le_one", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_ideal_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_ideal_top", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_injective", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_le_coe", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_map", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_mem_one", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_mk", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_one", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_one_eq_coe_submodule_top", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_to_fractional_ideal_bot", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_to_fractional_ideal_eq_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_to_fractional_ideal_injective", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_to_fractional_ideal_ne_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_to_submodule_eq_bot", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_to_submodule_ne_bot", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "div_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "div_one", ["ring", "fractional_ideal"]], ["del", "theorem", "div_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "div_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "eq_one_div_of_mul_eq_one", ["ring", "fractional_ideal"]], ["del", "theorem", "eq_span_singleton_of_principal", ["ring", "fractional_ideal"]], ["del", "theorem", "eq_zero_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "exists_eq_span_singleton_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "exists_mem_to_map_eq", ["ring", "fractional_ideal"]], ["del", "theorem", "exists_ne_zero_mem_is_integer", ["ring", "fractional_ideal"]], ["del", "theorem", "ext", ["ring", "fractional_ideal"]], ["del", "theorem", "ext_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "fractional_div_of_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "fractional_inf", ["ring", "fractional_ideal"]], ["del", "theorem", "fractional_map", ["ring", "fractional_ideal"]], ["del", "theorem", "fractional_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "fractional_of_subset_one", ["ring", "fractional_ideal"]], ["del", "theorem", "fractional_sup", ["ring", "fractional_ideal"]], ["del", "theorem", "is_fractional_adjoin_integral", ["ring", "fractional_ideal"]], ["del", "theorem", "is_fractional_of_fg", ["ring", "fractional_ideal"]], ["del", "theorem", "is_fractional_of_le", ["ring", "fractional_ideal"]], ["del", "theorem", "is_fractional_span_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "is_fractional_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "is_noetherian", ["ring", "fractional_ideal"]], ["del", "theorem", "is_noetherian_coe_to_fractional_ideal", ["ring", "fractional_ideal"]], ["del", "theorem", "is_noetherian_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "is_noetherian_span_singleton_inv_to_map_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "is_noetherian_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "is_principal_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "le_div_iff_mul_le", ["ring", "fractional_ideal"]], ["del", "theorem", "le_div_iff_of_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "le_iff_mem", ["ring", "fractional_ideal"]], ["del", "theorem", "le_one_iff_exists_coe_ideal", ["ring", "fractional_ideal"]], ["del", "theorem", "le_self_mul_one_div", ["ring", "fractional_ideal"]], ["del", "theorem", "le_self_mul_self", ["ring", "fractional_ideal"]], ["del", "theorem", "le_zero_iff", ["ring", "fractional_ideal"]], ["del", "def", "map", ["ring", "fractional_ideal"]], ["del", "theorem", "map_add", ["ring", "fractional_ideal"]], ["del", "theorem", "map_coe_ideal", ["ring", "fractional_ideal"]], ["del", "theorem", "map_comp", ["ring", "fractional_ideal"]], ["del", "theorem", "map_div", ["ring", "fractional_ideal"]], ["del", "theorem", "map_eq_zero_iff", ["ring", "fractional_ideal"]], ["del", "def", "map_equiv", ["ring", "fractional_ideal"]], ["del", "theorem", "map_equiv_apply", ["ring", "fractional_ideal"]], ["del", "theorem", "map_equiv_refl", ["ring", "fractional_ideal"]], ["del", "theorem", "map_equiv_symm", ["ring", "fractional_ideal"]], ["del", "theorem", "map_id", ["ring", "fractional_ideal"]], ["del", "theorem", "map_map_symm", ["ring", "fractional_ideal"]], ["del", "theorem", "map_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "map_ne_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "map_one", ["ring", "fractional_ideal"]], ["del", "theorem", "map_one_div", ["ring", "fractional_ideal"]], ["del", "theorem", "map_symm_map", ["ring", "fractional_ideal"]], ["del", "theorem", "map_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_adjoin_integral_self", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_canonical_equiv_apply", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_coe_ideal", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_div_iff_of_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_map", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_one_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_singleton_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_span_singleton_self", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_zero_iff", ["ring", "fractional_ideal"]], ["del", "def", "mul", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_div_self_cancel_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_eq_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_le", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_le_mul_left", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_left_mono", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_mem_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_one_div_le_one", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_right_mono", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_self_le_self", ["ring", "fractional_ideal"]], ["del", "theorem", "ne_zero_of_mul_eq_one", ["ring", "fractional_ideal"]], ["del", "theorem", "one_div_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "one_mem_one", ["ring", "fractional_ideal"]], ["del", "def", "span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "span_singleton_eq_zero_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "span_singleton_mul_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "span_singleton_ne_zero_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "span_singleton_one", ["ring", "fractional_ideal"]], ["del", "theorem", "span_singleton_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "sup_eq_add", ["ring", "fractional_ideal"]], ["del", "theorem", "val_eq_coe", ["ring", "fractional_ideal"]], ["del", "theorem", "zero_le", ["ring", "fractional_ideal"]], ["del", "def", "fractional_ideal", ["ring"]], ["del", "def", "is_fractional", ["ring"]]]}]}, {"timestamp": 1626963178, "sha": "38ac9ba7", "message": "chore(algebra/module/submodule): add submodule.coe_sum (#8393)", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "coe_sum", ["submodule"]]]}]}, {"timestamp": 1626963177, "sha": "e2cda0bf", "message": "chore(*): Prevent lemmas about the injectivity of `coe_fn` introducing un-reduced lambda terms (#8386)\nThis follows on from #6344, and fixes every result for `function.injective (λ` that is about coe_fn.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "theorem", "coe_injective", ["lie_hom"]], ["mod", "theorem", "coe_injective", ["lie_module_hom"]]]}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["enorm"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["affine_map"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["rel_iso"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["mod", "theorem", "coe_injective", ["locally_constant"]]]}]}, {"timestamp": 1626963176, "sha": "54adb196", "message": "doc(algebra/to_additive): Add troubleshooting section (#8143)", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}]}, {"timestamp": 1626956047, "sha": "791d51c6", "message": "feat(group_theory/group_action): a monoid action determines a monoid hom (#8253)\nDefines the monoid hom `M -> category_theory.End X` (the latter is the monoid `X -> X`) corresponding to an action `mul_action M X` and vice versa.\nSplit off from #7395", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "def", "of_End_hom", ["add_action"]], ["add", "def", "to_End_hom", ["add_action"]], ["add", "theorem", "smul_def", ["function", "End"]], ["add", "def", "of_End_hom", ["mul_action"]], ["add", "def", "to_End_hom", ["mul_action"]]]}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "theorem", "smul_def", ["equiv", "perm"]]]}]}, {"timestamp": 1626954010, "sha": "6f88eeca", "message": "feat(algebra/lie/{submodule,subalgebra}): `lie_span`, `coe` form a Galois insertion (#8213)", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "span_Union", ["lie_subalgebra"]], ["add", "theorem", "span_empty", ["lie_subalgebra"]], ["add", "theorem", "span_union", ["lie_subalgebra"]], ["add", "theorem", "span_univ", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "span_Union", ["lie_submodule"]], ["add", "theorem", "span_empty", ["lie_submodule"]], ["add", "theorem", "span_union", ["lie_submodule"]], ["add", "theorem", "span_univ", ["lie_submodule"]]]}]}, {"timestamp": 1626939472, "sha": "c9593dcc", "message": "feat(algebra/lie/direct_sum): define `direct_sum.lie_of`, `direct_sum.to_lie_algebra`, `direct_sum.lie_algebra_is_internal` (#8369)\nVarious other minor improvements.", "changes": [{"oldPath": "src/algebra/lie/direct_sum.lean", "newPath": "src/algebra/lie/direct_sum.lean", "changes": [["mod", "def", "lie_algebra_component", ["direct_sum"]], ["add", "theorem", "lie_algebra_ext", ["direct_sum"]], ["add", "def", "lie_algebra_is_internal", ["direct_sum"]], ["mod", "def", "lie_algebra_of", ["direct_sum"]], ["add", "theorem", "lie_of", ["direct_sum"]], ["add", "theorem", "lie_of_of_eq", ["direct_sum"]], ["add", "theorem", "lie_of_of_ne", ["direct_sum"]], ["add", "def", "to_lie_algebra", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["add", "theorem", "coe_to_module_eq_coe_to_add_monoid", ["direct_sum"]]]}]}, {"timestamp": 1626936648, "sha": "df50b6c2", "message": "feat(category_theory/limits): strict initial objects are initial mono (#8267)\n- [x] depends on: #8094 \n- [x] depends on: #8099", "changes": [{"oldPath": "src/category_theory/limits/shapes/strict_initial.lean", "newPath": "src/category_theory/limits/shapes/strict_initial.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}]}, {"timestamp": 1626920376, "sha": "bc658188", "message": "chore(scripts): update nolints.txt (#8390)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1626906178, "sha": "9e355305", "message": "fix(order/lattice, tactic.simps): add missing `notation_class` attributes to `has_(bot,top,inf,sup,compl)` (#8381)\nFrom the docs for `simps`:\n> `@[notation_class]` should be added to all classes that define notation, like `has_mul` and\n> `has_zero`. This specifies that the projections that `@[simps]` used are the projections from\n> these notation classes instead of the projections of the superclasses.\n> Example: if `has_mul` is tagged with `@[notation_class]` then the projection used for `semigroup`\n> will be `λ α hα, @has_mul.mul α (@semigroup.to_has_mul α hα)` instead of `@semigroup.mul`.", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1626906176, "sha": "f118c146", "message": "feat(order): if `f x ≤ f y → x ≤ y`, then `f` is injective (#8373)\nI couldn't find this specific result, not assuming linear orders, anywhere and [the Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/If.20.60f.20x.20.E2.89.A4.20f.20y.20.E2.86.92.20x.20.E2.89.A4.20y.60.2C.20then.20.60f.60.20is.20injective) didn't get any responses, so I decided to PR the result.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "injective_of_le_imp_le", []]]}]}, {"timestamp": 1626903113, "sha": "3e6c3675", "message": "chore(topology/algebra/module): harmless generalization (#8389)", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1626888773, "sha": "ae1c7eef", "message": "docs(analysis/normed_space/bounded_linear_map): add module docstring (#8263)", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "theorem", "is_bounded_linear_map_comp_left", ["continuous_linear_map"]], ["mod", "theorem", "is_bounded_linear_map_comp_right", ["continuous_linear_map"]], ["mod", "def", "deriv", ["is_bounded_bilinear_map"]]]}]}, {"timestamp": 1626883131, "sha": "9fa82b05", "message": "feat(combinatorics/colex): order is decidable (#8378)\nShow that the colex ordering is decidable.", "changes": [{"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}]}, {"timestamp": 1626870077, "sha": "28b85931", "message": "feat(combinatorics/simple_graph): `boolean_algebra` for `simple_graph`s. (#8330)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["mod", "def", "complete_graph", []], ["mod", "def", "empty_graph", []], ["add", "theorem", "bot_adj", ["simple_graph"]], ["del", "def", "compl", ["simple_graph"]], ["mod", "theorem", "compl_adj", ["simple_graph"]], ["del", "theorem", "compl_compl", ["simple_graph"]], ["del", "theorem", "compl_involutive", ["simple_graph"]], ["add", "theorem", "complete_graph_eq_top", ["simple_graph"]], ["add", "theorem", "empty_graph_eq_bot", ["simple_graph"]], ["add", "theorem", "inf_adj", ["simple_graph"]], ["add", "def", "is_subgraph", ["simple_graph"]], ["add", "theorem", "is_subgraph_eq_le", ["simple_graph"]], ["add", "theorem", "sdiff_adj", ["simple_graph"]], ["add", "theorem", "sup_adj", ["simple_graph"]], ["add", "theorem", "top_adj", ["simple_graph"]]]}, {"oldPath": "src/combinatorics/simple_graph/strongly_regular.lean", "newPath": "src/combinatorics/simple_graph/strongly_regular.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/subgraph.lean", "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["mod", "def", "bot_equiv", ["simple_graph", "subgraph"]], ["mod", "def", "is_subgraph", ["simple_graph", "subgraph"]], ["add", "theorem", "is_subgraph_of_is_subgraph", ["simple_graph", "subgraph", "spanning_coe"]], ["add", "def", "spanning_coe", ["simple_graph", "subgraph"]], ["add", "theorem", "spanning_coe_adj_sub", ["simple_graph", "subgraph"]], ["add", "def", "spanning_coe_equiv_coe_of_spanning", ["simple_graph", "subgraph"]], ["add", "theorem", "is_spanning", ["simple_graph", "to_subgraph"]], ["add", "def", "to_subgraph", ["simple_graph"]]]}]}, {"timestamp": 1626865083, "sha": "fb58e059", "message": "refactor(measure_theory/decomposition): move `decomposition` into a folder (#8374)", "changes": [{"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition/unsigned_hahn.lean", "changes": []}]}, {"timestamp": 1626852627, "sha": "b45acc9c", "message": "feat(combinatorics/colex): top of the colex ordering on finite types (#8379)", "changes": [{"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}]}, {"timestamp": 1626843560, "sha": "02a56964", "message": "feat(analysis/normed_space): Define conformal maps on inner product spaces; define the groupoid of conformal maps (#8367)", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/conformal.lean", "changes": [["add", "theorem", "comp", ["conformal"]], ["add", "theorem", "conformal_at", ["conformal"]], ["add", "theorem", "const_smul", ["conformal"]], ["add", "theorem", "differentiable", ["conformal"]], ["add", "def", "conformal", []], ["add", "theorem", "comp", ["conformal_at"]], ["add", "def", "conformal_factor_at", ["conformal_at"]], ["add", "theorem", "conformal_factor_at_inner_eq_mul_inner'", ["conformal_at"]], ["add", "theorem", "conformal_factor_at_inner_eq_mul_inner", ["conformal_at"]], ["add", "theorem", "conformal_factor_at_pos", ["conformal_at"]], ["add", "theorem", "congr", ["conformal_at"]], ["add", "theorem", "const_smul", ["conformal_at"]], ["add", "theorem", "differentiable_at", ["conformal_at"]], ["add", "theorem", "preserves_angle", ["conformal_at"]], ["add", "def", "conformal_at", []], ["add", "theorem", "conformal_at_const_smul", []], ["add", "theorem", "conformal_at_id", []], ["add", "theorem", "conformal_at_iff'", []], ["add", "theorem", "conformal_at_iff", []], ["add", "theorem", "conformal_at_iff_is_conformal_map_fderiv", []], ["add", "theorem", "conformal_const_smul", []], ["add", "theorem", "conformal_id", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "has_fderiv_at_of_subsingleton", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/conformal_linear_map.lean", "changes": [["add", "theorem", "comp", ["is_conformal_map"]], ["add", "theorem", "injective", ["is_conformal_map"]], ["add", "theorem", "preserves_angle", ["is_conformal_map"]], ["add", "def", "is_conformal_map", []], ["add", "theorem", "is_conformal_map_const_smul", []], ["add", "theorem", "is_conformal_map_id", []], ["add", "theorem", "is_conformal_map_iff", []], ["add", "theorem", "is_conformal_map_of_subsingleton", []]]}, {"oldPath": null, "newPath": "src/geometry/manifold/conformal_groupoid.lean", "changes": [["add", "def", "conformal_groupoid", []], ["add", "def", "conformal_pregroupoid", []]]}]}, {"timestamp": 1626811832, "sha": "899bb5f9", "message": "feat(data/multiset): `(s.erase x).map f = (s.map f).erase (f x)` (#8375)\nA little lemma that I needed for Dedekind domains.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "map_erase", ["multiset"]]]}]}, {"timestamp": 1626804824, "sha": "4676b31f", "message": "feat(data/sym2): add the universal property, and make `sym2.is_diag ⟦(x, y)⟧ ↔ x = y` true definitionally (#8358)", "changes": [{"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": [["add", "theorem", "coe_lift_symm_apply", ["sym2"]], ["add", "theorem", "mem_range_diag", ["sym2", "is_diag"]], ["mod", "def", "is_diag", ["sym2"]], ["add", "theorem", "is_diag_iff_eq", ["sym2"]], ["add", "theorem", "is_diag_iff_mem_range_diag", ["sym2"]], ["add", "def", "lift", ["sym2"]], ["add", "theorem", "lift_mk", ["sym2"]]]}]}, {"timestamp": 1626798145, "sha": "6ac3059b", "message": "feat(combinatorics/colex): golf and generalise (#8301)\nMiscellaneous fixes about colex: Gives `le` versions of some `lt` lemmas, fixes a TODO, restores some names etc.", "changes": [{"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": [["add", "theorem", "colex_le_of_subset", ["colex"]], ["add", "theorem", "colex_lt_of_ssubset", ["colex"]], ["add", "theorem", "empty_to_colex_le", ["colex"]], ["add", "theorem", "empty_to_colex_lt", ["colex"]], ["del", "theorem", "hom", ["colex"]], ["del", "theorem", "hom_fin", ["colex"]], ["add", "theorem", "hom_fin_le_iff", ["colex"]], ["add", "theorem", "hom_fin_lt_iff", ["colex"]], ["add", "theorem", "hom_le_iff", ["colex"]], ["add", "theorem", "hom_lt_iff", ["colex"]], ["mod", "theorem", "lt_singleton_iff_mem_lt", ["colex"]], ["add", "theorem", "sdiff_le_sdiff_iff_le", ["colex"]], ["add", "theorem", "singleton_le_iff_le", ["colex"]], ["del", "theorem", "sum_sq_lt_iff_lt", ["colex"]], ["add", "theorem", "sum_two_pow_le_iff_lt", ["colex"]], ["add", "theorem", "sum_two_pow_lt_iff_lt", ["colex"]], ["add", "def", "to_colex_rel_hom", ["colex"]], ["del", "theorem", "sum_sq_lt", ["nat"]], ["add", "theorem", "sum_two_pow_lt", ["nat"]]]}]}, {"timestamp": 1626780189, "sha": "ed8d597a", "message": "fix(data/matrix/basic): remove an accidental requirement for a matrix to be square (#8372)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "mul_apply'", ["matrix"]]]}]}, {"timestamp": 1626778294, "sha": "fce38f1a", "message": "feat(ring_theory): define `fractional_ideal.adjoin_integral` (#8296)\nThis PR shows if `x` is integral over `R`, then `R[x]` is a fractional ideal, and proves some of the essential properties of this fractional ideal.\nThis is an important step towards showing `is_dedekind_domain_inv` implies that the ring is integrally closed.\nCo-Authored-By: Ashvni ashvni.n@gmail.com\nCo-Authored-By: Filippo A. E. Nuccio filippo.nuccio@univ-st-etienne.fr", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "def", "adjoin_integral", ["ring", "fractional_ideal"]], ["add", "theorem", "is_fractional_adjoin_integral", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_adjoin_integral_self", ["ring", "fractional_ideal"]]]}]}, {"timestamp": 1626774736, "sha": "c05c15fe", "message": "feat(group_theory/order_of_element): pow_eq_mod_card (#8354)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "gpow_eq_mod_card", []], ["add", "theorem", "pow_eq_mod_card", []]]}]}, {"timestamp": 1626771576, "sha": "0f9b754f", "message": "feat(measure_theory/borel_space): generalize `monotone.measurable` to monotone on set (#8365)", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "ae_measurable_restrict_of_antimono_on", []], ["add", "theorem", "ae_measurable_restrict_of_monotone_on", []], ["mod", "theorem", "measurable_of_antimono", []], ["mod", "theorem", "measurable_of_monotone", []]]}]}, {"timestamp": 1626771575, "sha": "15893184", "message": "feat(topology/continuous_function/bounded): prove `norm_eq_supr_norm` (#8288)\nMore precisely we prove both:\n * `bounded_continuous_function.norm_eq_supr_norm`\n * `continuous_map.norm_eq_supr_norm`\nWe also introduce one new definition: `bounded_continuous_function.norm_comp`.", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "bdd_above_range_norm_comp", ["bounded_continuous_function"]], ["add", "theorem", "coe_norm_comp", ["bounded_continuous_function"]], ["add", "def", "norm_comp", ["bounded_continuous_function"]], ["add", "theorem", "norm_eq_of_nonempty", ["bounded_continuous_function"]], ["add", "theorem", "norm_eq_supr_norm", ["bounded_continuous_function"]], ["add", "theorem", "norm_eq_zero_of_empty", ["bounded_continuous_function"]], ["add", "theorem", "norm_norm_comp", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "norm_forget_boundedness_eq", ["bounded_continuous_function"]], ["add", "theorem", "norm_eq_supr_norm", ["continuous_map"]]]}]}, {"timestamp": 1626771574, "sha": "f5d25b48", "message": "feat(measure_theory/vector_measure): introduce vector-valued measures (#8247)\nThis PR introduces vector-valued measures and provides a method of creating signed measures without the summability requirement.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_of_nonpos", ["real"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_smul", ["ennreal"]], ["add", "theorem", "to_real_smul", ["ennreal"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "summable_measure_to_real", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/vector_measure.lean", "changes": [["add", "def", "complex_measure", ["measure_theory"]], ["add", "def", "sub_to_signed_measure", ["measure_theory", "measure"]], ["add", "theorem", "sub_to_signed_measure_apply", ["measure_theory", "measure"]], ["add", "def", "to_ennreal_vector_measure", ["measure_theory", "measure"]], ["add", "theorem", "to_ennreal_vector_measure_add", ["measure_theory", "measure"]], ["add", "theorem", "to_ennreal_vector_measure_apply_measurable", ["measure_theory", "measure"]], ["add", "theorem", "to_ennreal_vector_measure_zero", ["measure_theory", "measure"]], ["add", "def", "to_signed_measure", ["measure_theory", "measure"]], ["add", "theorem", "to_signed_measure_add", ["measure_theory", "measure"]], ["add", "theorem", "to_signed_measure_apply_measurable", ["measure_theory", "measure"]], ["add", "theorem", "to_signed_measure_smul", ["measure_theory", "measure"]], ["add", "theorem", "to_signed_measure_zero", ["measure_theory", "measure"]], ["add", "def", "signed_measure", ["measure_theory"]], ["add", "def", "add", ["measure_theory", "vector_measure"]], ["add", "theorem", "add_apply", ["measure_theory", "vector_measure"]], ["add", "theorem", "coe_add", ["measure_theory", "vector_measure"]], ["add", "def", "coe_fn_add_monoid_hom", ["measure_theory", "vector_measure"]], ["add", "theorem", "coe_injective", ["measure_theory", "vector_measure"]], ["add", "theorem", "coe_neg", ["measure_theory", "vector_measure"]], ["add", "theorem", "coe_smul", ["measure_theory", "vector_measure"]], ["add", "theorem", "coe_sub", ["measure_theory", "vector_measure"]], ["add", "theorem", "coe_zero", ["measure_theory", "vector_measure"]], ["add", "theorem", "empty", ["measure_theory", "vector_measure"]], ["add", "theorem", "ext", ["measure_theory", "vector_measure"]], ["add", "theorem", "ext_iff'", ["measure_theory", "vector_measure"]], ["add", "theorem", "ext_iff", ["measure_theory", "vector_measure"]], ["add", "theorem", "has_sum_of_disjoint_Union", ["measure_theory", "vector_measure"]], ["add", "theorem", "m_Union", ["measure_theory", "vector_measure"]], ["add", "theorem", "measure_of_eq_coe", ["measure_theory", "vector_measure"]], ["add", "def", "neg", ["measure_theory", "vector_measure"]], ["add", "theorem", "neg_apply", ["measure_theory", "vector_measure"]], ["add", "theorem", "not_measurable", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_Union_nonneg", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_Union_nonpos", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_add_of_diff", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_diff", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_disjoint_Union", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_disjoint_Union_nat", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_nonneg_disjoint_union_eq_zero", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_nonpos_disjoint_union_eq_zero", ["measure_theory", "vector_measure"]], ["add", "theorem", "of_union", ["measure_theory", "vector_measure"]], ["add", "def", "smul", ["measure_theory", "vector_measure"]], ["add", "theorem", "smul_apply", ["measure_theory", "vector_measure"]], ["add", "def", "sub", ["measure_theory", "vector_measure"]], ["add", "theorem", "sub_apply", ["measure_theory", "vector_measure"]], ["add", "theorem", "zero_apply", ["measure_theory", "vector_measure"]], ["add", "structure", "vector_measure", ["measure_theory"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "summable_to_real", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1626767809, "sha": "0f58e131", "message": "chore(topology/continuous_function, analysis/normed_space): use `is_empty α` instead of `¬nonempty α` (#8352)\nTwo lemmas with their assumptions changed, and some proofs golfed using the new forms of these and other lemmas.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "theorem", "norm_mk_pi_algebra_of_empty", ["continuous_multilinear_map"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["mod", "theorem", "dist_zero_of_empty", ["bounded_continuous_function"]]]}]}, {"timestamp": 1626754462, "sha": "b3fbcec6", "message": "chore(.docker): add missing library (#8370)\nSomething must have changed that now needs this library. It's only installed in an intemediate build, anyway.", "changes": [{"oldPath": ".docker/debian/lean/Dockerfile", "newPath": ".docker/debian/lean/Dockerfile", "changes": []}]}, {"timestamp": 1626752256, "sha": "e0467bd0", "message": "feat(algebra.homology): homology f g w ≅ cokernel (kernel.lift g f w) (#8355)\nPer [zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Challenge.20with.20homology).\nI'm not certain this completely resolves the issue: perhaps we should really change the definition of `homology`. But at least this bridges the gap.", "changes": [{"oldPath": "src/algebra/homology/image_to_kernel.lean", "newPath": "src/algebra/homology/image_to_kernel.lean", "changes": [["add", "def", "homology_iso_cokernel_image_to_kernel'", []], ["add", "def", "homology_iso_cokernel_lift", []], ["add", "theorem", "image_subobject_iso_image_to_kernel'", []], ["add", "def", "image_to_kernel'", []], ["add", "theorem", "image_to_kernel'_kernel_subobject_iso", []]]}]}, {"timestamp": 1626733550, "sha": "11af02c3", "message": "feat(analysis/convex): convex sets with zero (#8234)\nSplit off from #7288", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "mem_smul_of_zero_mem", ["convex"]], ["add", "theorem", "smul_mem_of_zero_mem", ["convex"]]]}]}, {"timestamp": 1626733549, "sha": "0821e6ed", "message": "feat(category_theory/limits): strict initial objects (#8094)\n- [x] depends on: #8084\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/strict_initial.lean", "changes": [["add", "theorem", "has_strict_initial_objects_of_initial_is_strict", ["category_theory", "limits"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "initial"]], ["add", "theorem", "subsingleton_to", ["category_theory", "limits", "initial"]], ["add", "theorem", "initial_mul_inv", ["category_theory", "limits"]], ["add", "theorem", "is_iso_to", ["category_theory", "limits", "is_initial"]], ["add", "theorem", "strict_hom_ext", ["category_theory", "limits", "is_initial"]], ["add", "theorem", "subsingleton_to", ["category_theory", "limits", "is_initial"]], ["add", "theorem", "is_initial_mul_inv", ["category_theory", "limits"]], ["add", "theorem", "mul_initial_inv", ["category_theory", "limits"]], ["add", "theorem", "mul_is_initial_inv", ["category_theory", "limits"]]]}]}, {"timestamp": 1626722713, "sha": "afd0f92b", "message": "feat(category_theory/limits/pullbacks): generalise pullback mono lemmas (#8302)\nGeneralises results to use `is_limit` rather than the canonical limit.", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "mono_fst_of_is_pullback_of_mono", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mono_snd_of_is_pullback_of_mono", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "epi_inl_of_is_pushout_of_epi", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "epi_inr_of_is_pushout_of_epi", ["category_theory", "limits", "pushout_cocone"]]]}]}, {"timestamp": 1626710379, "sha": "739b353d", "message": "chore(.gitignore): ignore lock files (#8368)\nTwo reasons:\n1. Sometimes these accidentally make it into PRs (e.g. #8344)\n2. Some editor plugins (like the git in vscode) update very frequently causing these files to appear and disappear quickly in the sidebar whenever lean compiles which is annoying", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}]}, {"timestamp": 1626704444, "sha": "ad7ab8d8", "message": "feat(linear_algebra/finsupp): `span.repr` gives an arbitrarily representation of `x : span R w` as a linear combination over `w` (#8339)\nIt's convenient to be able to get hold of such a representation, even when it is not unique. We prove the only lemma about this, then mark the definition is irreducible.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "of_injective_symm_apply", ["equiv"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "total_emb_domain", ["finsupp"]], ["add", "theorem", "total_equiv_map_domain", ["finsupp"]], ["add", "theorem", "finsupp_total_repr", ["span"]], ["add", "def", "repr", ["span"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "span_repr_eq", ["linear_independent"]], ["mod", "def", "total_equiv", ["linear_independent"]], ["mod", "theorem", "total_repr", ["linear_independent"]]]}]}, {"timestamp": 1626700629, "sha": "02ecb62a", "message": "feat(analysis/fourier): span of monomials is dense in L^p (#8328)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": [["add", "def", "fourier_Lp", []], ["mod", "theorem", "orthonormal_fourier", []], ["add", "theorem", "span_fourier_Lp_closure_eq_top", []], ["mod", "theorem", "span_fourier_closure_eq_top", []]]}, {"oldPath": "src/measure_theory/continuous_map_dense.lean", "newPath": "src/measure_theory/continuous_map_dense.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "topological_closure_map_subgroup", ["dense_range"]], ["add", "theorem", "topological_closure_coe", ["subgroup"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "topological_closure_map_submodule", ["dense_range"]]]}]}, {"timestamp": 1626697693, "sha": "5ccf2bf2", "message": "feat(topology/metric_space/basic): an order-bounded set is metric-bounded (#8335)", "changes": [{"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "bounded", ["is_compact"]], ["add", "theorem", "bounded_Icc", ["metric"]], ["add", "theorem", "bounded_Ico", ["metric"]], ["add", "theorem", "bounded_Ioc", ["metric"]], ["add", "theorem", "bounded_Ioo", ["metric"]], ["add", "theorem", "bounded_of_bdd_above_of_bdd_below", ["metric"]], ["del", "theorem", "bounded_of_compact", ["metric"]], ["add", "theorem", "bounded", ["totally_bounded"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1626690106, "sha": "3e679326", "message": "feat(topology/algebra/ordered): an `order_closed_topology` restricted to a subset is an `order_closed_topology` (#8364)", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}]}, {"timestamp": 1626679692, "sha": "dd9f1c3b", "message": "chore(order/basic): whitespaces and caps (#8359)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "exists_between", []], ["mod", "theorem", "le_update_iff", []], ["mod", "def", "monotone", []], ["mod", "theorem", "monotone_app", []], ["mod", "theorem", "monotone_const", []], ["mod", "theorem", "monotone_id", []], ["mod", "theorem", "monotone_lam", []], ["mod", "theorem", "monotone_of_monotone_nat", []], ["mod", "theorem", "no_bot", []], ["mod", "theorem", "no_top", []], ["mod", "def", "preimage", ["order"]], ["mod", "def", "order_dual", []], ["mod", "theorem", "le_def", ["pi"]], ["mod", "theorem", "lt_def", ["pi"]], ["mod", "theorem", "update_le_iff", []], ["mod", "theorem", "update_le_update_iff", []]]}]}, {"timestamp": 1626661290, "sha": "6a20dd63", "message": "chore(scripts): update nolints.txt (#8366)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1626646947, "sha": "ee607111", "message": "feat(data/finset/basic): product, bUnion, sdiff lemmas (#8321)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "bUnion_bUnion", ["finset"]], ["add", "theorem", "bUnion_subset_iff_forall_subset", ["finset"]], ["add", "theorem", "product_bUnion", ["finset"]], ["add", "theorem", "sdiff_ssubset", ["finset"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "sdiff_lt", []]]}]}, {"timestamp": 1626627750, "sha": "c2d042c6", "message": "chore(analysis/*): remove unnecessary imports (#8344)", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": []}, {"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_symmetric.lean", "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": []}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/convex/exposed.lean", "newPath": "src/analysis/convex/exposed.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/SemiNormedGroup.lean", "newPath": "src/analysis/normed_space/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/int.lean", "newPath": "src/analysis/normed_space/int.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ordered.lean", "newPath": "src/analysis/normed_space/ordered.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/sqrt.lean", "newPath": "src/analysis/special_functions/sqrt.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/weierstrass.lean", "newPath": "src/topology/continuous_function/weierstrass.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1626627749, "sha": "b02b9197", "message": "feat(measure_theory): add lemmas of equality of measures under assumptions of null difference, in particular null frontier (#8332)\nAdding lemmas in `measure_theory/measure_space` and `measure_theory/borel_space` about equality of measures of sets under the assumption that the difference of the largest to the smallest has null measure.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "meas_closure_of_null_bdry", []], ["add", "theorem", "meas_interior_of_null_bdry", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "meas_eq_meas_larger_of_between_null_diff", ["measure_theory"]], ["add", "theorem", "meas_eq_meas_of_between_null_diff", ["measure_theory"]], ["add", "theorem", "meas_eq_meas_of_null_diff", ["measure_theory"]], ["add", "theorem", "meas_eq_meas_smaller_of_between_null_diff", ["measure_theory"]]]}]}, {"timestamp": 1626627748, "sha": "048263d9", "message": "feat(topology/basic): add two lemmas about frontier and two lemmas about preimages under continuous maps (#8329)\nAdding four lemmas: `frontier_eq_inter_compl_interior`, `compl_frontier_eq_union_interior`, `continuous.closure_preimage_subset`, `continuous.frontier_preimage_subset` to `topology/basic`.\nThese were discussed on Zulip . The formulations closely follow Patrick's suggestions.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "compl_frontier_eq_union_interior", []], ["add", "theorem", "closure_preimage_subset", ["continuous"]], ["add", "theorem", "frontier_preimage_subset", ["continuous"]], ["add", "theorem", "frontier_eq_inter_compl_interior", []]]}]}, {"timestamp": 1626621145, "sha": "865e36bd", "message": "chore(order/boolean_algebra) : `compl_involutive` (#8357)", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_bijective", []], ["add", "theorem", "compl_involutive", []]]}]}, {"timestamp": 1626557889, "sha": "f45df472", "message": "feat(measure_theory/hausdorff_measure): `dimH_{s,b,}Union`, `dimH_union` (#8351)", "changes": [{"oldPath": "src/measure_theory/hausdorff_measure.lean", "newPath": "src/measure_theory/hausdorff_measure.lean", "changes": [["add", "theorem", "dimH_Union", ["measure_theory"]], ["add", "theorem", "dimH_bUnion", ["measure_theory"]], ["add", "theorem", "dimH_mono", ["measure_theory"]], ["add", "theorem", "dimH_sUnion", ["measure_theory"]], ["add", "theorem", "dimH_union", ["measure_theory"]], ["add", "theorem", "le_dimH_of_hausdorff_measure_eq_top", ["measure_theory"]]]}]}, {"timestamp": 1626551891, "sha": "ad5afc21", "message": "feat(combinatorics/hales_jewett): Hales-Jewett and Van der Waerden (#8019)\nProves the Hales-Jewett theorem (a fundamental result in Ramsey theory on combinatorial lines) and deduces (a generalised version of) Van der Waerden's theorem on arithmetic progressions.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/hales_jewett.lean", "changes": [["add", "theorem", "exists_mono_homothetic_copy", ["combinatorics"]], ["add", "structure", "almost_mono", ["combinatorics", "line"]], ["add", "theorem", "apply", ["combinatorics", "line"]], ["add", "theorem", "apply_none", ["combinatorics", "line"]], ["add", "theorem", "apply_of_ne_none", ["combinatorics", "line"]], ["add", "structure", "color_focused", ["combinatorics", "line"]], ["add", "def", "diagonal", ["combinatorics", "line"]], ["add", "theorem", "diagonal_apply", ["combinatorics", "line"]], ["add", "theorem", "exists_mono_in_high_dimension", ["combinatorics", "line"]], ["add", "def", "horizontal", ["combinatorics", "line"]], ["add", "theorem", "horizontal_apply", ["combinatorics", "line"]], ["add", "def", "is_mono", ["combinatorics", "line"]], ["add", "def", "map", ["combinatorics", "line"]], ["add", "theorem", "map_apply", ["combinatorics", "line"]], ["add", "def", "prod", ["combinatorics", "line"]], ["add", "theorem", "prod_apply", ["combinatorics", "line"]], ["add", "def", "vertical", ["combinatorics", "line"]], ["add", "theorem", "vertical_apply", ["combinatorics", "line"]], ["add", "structure", "line", ["combinatorics"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "get_or_else_map", ["option"]], ["add", "theorem", "get_or_else_none", ["option"]]]}]}, {"timestamp": 1626544032, "sha": "398027d5", "message": "feat(topology/subset_properties): add `countable_cover_nhds_within_of_sigma_compact` (#8350)\nThis is a version of `countable_cover_nhds_of_sigma_compact` for a\ncovering of a closed set instead of the whole space.", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "countable_cover_nhds_within_of_sigma_compact", []], ["add", "theorem", "exists_mem_compact_covering", []]]}]}, {"timestamp": 1626544031, "sha": "7d754e06", "message": "chore(analysis/calculus/mean_value): use `nnnorm` in a few lemmas (#8348)\nUse `nnnorm` instead of `norm` and `C : nnreal` in lemmas about `lipschitz_on_with`. This way we can use them to prove any statement of the form `lipschitz_on_with C f s`, not only something of the form `lipschitz_on_with (real.to_nnreal C) f s`.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "exists_nhds_within_lipschitz_on_with_of_has_fderiv_within_at_of_continuous_within_at", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_nnnorm_deriv_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_nnnorm_deriv_within_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_nnnorm_fderiv_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_nnnorm_fderiv_within_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_nnnorm_has_deriv_within_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_nnnorm_has_fderiv_within_le", ["convex"]], ["del", "theorem", "lipschitz_on_with_of_norm_deriv_le", ["convex"]], ["del", "theorem", "lipschitz_on_with_of_norm_deriv_within_le", ["convex"]], ["del", "theorem", "lipschitz_on_with_of_norm_fderiv_le", ["convex"]], ["del", "theorem", "lipschitz_on_with_of_norm_fderiv_within_le", ["convex"]], ["del", "theorem", "lipschitz_on_with_of_norm_has_deriv_within_le", ["convex"]], ["del", "theorem", "lipschitz_on_with_of_norm_has_fderiv_within_le", ["convex"]]]}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "nnnorm_smul_right_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1626540913, "sha": "3782c193", "message": "feat(topology/algebra/ordered): add `nhds_top_basis_Ici` and `nhds_bot_basis_Iic` (#8349)\nAlso add `ennreal.nhds_zero_basis_Iic` and `ennreal.supr_div`.", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "nhds_bot_basis_Iic", []], ["add", "theorem", "nhds_top_basis_Ici", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "nhds_zero_basis_Iic", ["ennreal"]], ["add", "theorem", "supr_div", ["ennreal"]]]}]}, {"timestamp": 1626538816, "sha": "8139d7eb", "message": "feat(measure_theory/hausdorff_measure): μH and dimH of a `subsingleton` (#8347)", "changes": [{"oldPath": "src/measure_theory/hausdorff_measure.lean", "newPath": "src/measure_theory/hausdorff_measure.lean", "changes": [["add", "theorem", "dimH_empty", ["measure_theory"]], ["add", "theorem", "dimH_singleton", ["measure_theory"]], ["add", "theorem", "dimH_subsingleton", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "measure_subsingleton", ["measure_theory"]]]}]}, {"timestamp": 1626530400, "sha": "fcde3f0e", "message": "chore(data/real/ennreal): move `x ≠ 0` case of `mul_infi` to `mul_infi_of_ne` (#8345)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "infi_mul_of_ne", ["ennreal"]], ["add", "theorem", "mul_infi_of_ne", ["ennreal"]]]}]}, {"timestamp": 1626527650, "sha": "bd56531b", "message": "chore(analysis/normed_space/operator_norm): use `norm_one_class` (#8346)\n* turn `continuous_linear_map.norm_id` into a `simp` lemma;\n* drop its particular case `continuous_linear_map.norm_id_field`;\n* replace `continuous_linear_map.norm_id_field'` with a\n `norm_one_class` instance.", "changes": [{"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "norm_id", ["continuous_linear_map"]], ["del", "theorem", "norm_id_field'", ["continuous_linear_map"]], ["del", "theorem", "norm_id_field", ["continuous_linear_map"]], ["mod", "theorem", "norm_id_of_nontrivial_seminorm", ["continuous_linear_map"]]]}]}, {"timestamp": 1626521207, "sha": "93a37647", "message": "chore(algebra/ring/basic): drop commutativity assumptions from some division lemmas (#8334)\n* Removes `dvd_neg_iff_dvd`, `neg_dvd_iff_dvd` which duplicated `dvd_neg`, `neg_dvd`.\n* Generalizes `two_dvd_bit0` to non-commutative semirings.\n* Generalizes a bunch of lemmas from `comm_ring` to `ring`.\n* Adds `even_neg` for `ring` to replace `int.even_neg`.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "dvd_neg_iff_dvd", []], ["add", "theorem", "even_neg", []], ["del", "theorem", "neg_dvd_iff_dvd", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["del", "theorem", "even_neg", ["int"]]]}]}, {"timestamp": 1626514736, "sha": "d4c0a118", "message": "refactor(analysis/analytic/basic): refactor `change_origin` (#8282)\nNow each term of `change_origin` is defined as a sum of a formal power series, so it is clear that each term is an analytic function.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["mod", "theorem", "change_origin_eval", ["formal_multilinear_series"]], ["del", "theorem", "change_origin_has_sum", ["formal_multilinear_series"]], ["add", "def", "change_origin_index_equiv", ["formal_multilinear_series"]], ["mod", "theorem", "change_origin_radius", ["formal_multilinear_series"]], ["add", "def", "change_origin_series", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_series_summable_aux₁", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_series_summable_aux₂", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_series_summable_aux₃", ["formal_multilinear_series"]], ["add", "def", "change_origin_series_term", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_series_term_apply", ["formal_multilinear_series"]], ["del", "theorem", "change_origin_summable_aux1", ["formal_multilinear_series"]], ["del", "theorem", "change_origin_summable_aux2", ["formal_multilinear_series"]], ["del", "theorem", "change_origin_summable_aux3", ["formal_multilinear_series"]], ["del", "def", "change_origin_summable_aux_j", ["formal_multilinear_series"]], ["del", "theorem", "change_origin_summable_aux_j_injective", ["formal_multilinear_series"]], ["del", "theorem", "continuous_on", ["formal_multilinear_series"]], ["del", "theorem", "has_fpower_series_on_ball", ["formal_multilinear_series"]], ["add", "theorem", "has_fpower_series_on_ball_change_origin", ["formal_multilinear_series"]], ["add", "theorem", "le_change_origin_series_radius", ["formal_multilinear_series"]], ["mod", "theorem", "le_radius_of_bound", ["formal_multilinear_series"]], ["mod", "theorem", "le_radius_of_bound_nnreal", ["formal_multilinear_series"]], ["add", "theorem", "le_radius_of_eventually_le", ["formal_multilinear_series"]], ["add", "theorem", "le_radius_of_summable", ["formal_multilinear_series"]], ["add", "theorem", "le_radius_of_summable_nnnorm", ["formal_multilinear_series"]], ["add", "theorem", "nnnorm_change_origin_le", ["formal_multilinear_series"]], ["add", "theorem", "nnnorm_change_origin_series_apply_le_tsum", ["formal_multilinear_series"]], ["add", "theorem", "nnnorm_change_origin_series_le_tsum", ["formal_multilinear_series"]], ["add", "theorem", "nnnorm_change_origin_series_term", ["formal_multilinear_series"]], ["add", "theorem", "nnnorm_change_origin_series_term_apply_le", ["formal_multilinear_series"]], ["add", "theorem", "norm_change_origin_series_term", ["formal_multilinear_series"]], ["add", "theorem", "summable_nnnorm_mul_pow", ["formal_multilinear_series"]], ["add", "theorem", "summable_norm_mul_pow", ["formal_multilinear_series"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "le_of_forall_pos_nnreal_lt", ["ennreal"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "heq_iff_coe_heq", ["subtype"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "div_const", ["summable"]]]}]}, {"timestamp": 1626495575, "sha": "0cb634fb", "message": "feat(category_theory/subobject): subobject category equivalent to mono over category (#8304)", "changes": [{"oldPath": "src/category_theory/essentially_small.lean", "newPath": "src/category_theory/essentially_small.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/skeleton.lean", "newPath": "src/category_theory/monoidal/skeleton.lean", "changes": []}, {"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/mono_over.lean", "newPath": "src/category_theory/subobject/mono_over.lean", "changes": []}]}, {"timestamp": 1626487297, "sha": "e67e50f5", "message": "feat(algebra/group_theory/lemmas): add int.pow_right_injective (#8278)\nSuggested here: https://github.com/leanprover-community/mathlib/pull/7843#discussion_r668167163", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "pow_right_injective", ["int"]]]}]}, {"timestamp": 1626475665, "sha": "10975e6d", "message": "docs(measure_theory/integral_eq_improper): fix lemma names in docs (#8333)", "changes": [{"oldPath": "src/measure_theory/integral_eq_improper.lean", "newPath": "src/measure_theory/integral_eq_improper.lean", "changes": []}]}, {"timestamp": 1626458283, "sha": "8e3d9cee", "message": "feat(measure_theory/continuous_map_dense): continuous functions are dense in Lp (#8306)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "subgroup_of_range_eq_of_le", ["monoid_hom"]]]}, {"oldPath": null, "newPath": "src/measure_theory/continuous_map_dense.lean", "changes": [["add", "theorem", "to_Lp_dense_range", ["bounded_continuous_function"]], ["add", "theorem", "to_Lp_dense_range", ["continuous_map"]], ["add", "theorem", "bounded_continuous_function_dense", ["measure_theory", "Lp"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "range_to_Lp", ["bounded_continuous_function"]], ["add", "theorem", "range_to_Lp_hom", ["bounded_continuous_function"]], ["add", "theorem", "range_to_Lp", ["continuous_map"]], ["add", "def", "bounded_continuous_function", ["measure_theory", "Lp"]], ["add", "theorem", "mem_bounded_continuous_function_iff", ["measure_theory", "Lp"]]]}, {"oldPath": "src/measure_theory/vitali_caratheodory.lean", "newPath": "src/measure_theory/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "is_closed_topological_closure", ["subgroup"]], ["mod", "theorem", "subgroup_topological_closure", ["subgroup"]], ["mod", "theorem", "topological_closure_minimal", ["subgroup"]]]}]}, {"timestamp": 1626458280, "sha": "a895300a", "message": "chore(ring_theory/fractional_ideal): prefer `(⊤ : ideal R)` over `1` (#8298)\n`fractional_ideal.lean` sometimes used `1` to denote the ideal of `R` containing each element of `R`. This PR should replace all remaining usages with `⊤ : ideal R`, following the convention in the rest of mathlib.\nAlso a little `simp` lemma `coe_ideal_top` which was the motivation, since the proof should have been, and is now `by refl`.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_ideal_top", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_one_eq_coe_submodule_one", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_one_eq_coe_submodule_top", ["ring", "fractional_ideal"]]]}]}, {"timestamp": 1626455004, "sha": "42f7ca0f", "message": "chore(linear_algebra/linear_independent): use `is_empty ι` instead of `¬nonempty ι` (#8331)", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["mod", "theorem", "linear_independent_empty_type", []]]}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}]}, {"timestamp": 1626451391, "sha": "9061ecc1", "message": "feat(topology/metric_space/holder): define Hölder continuity (#8309)\nAdd definitions and some basic facts about Hölder continuous functions.", "changes": [{"oldPath": null, "newPath": "src/topology/metric_space/holder.lean", "changes": [["add", "theorem", "comp", ["holder_with"]], ["add", "theorem", "dist_le", ["holder_with"]], ["add", "theorem", "dist_le_of_le", ["holder_with"]], ["add", "theorem", "ediam_image_le", ["holder_with"]], ["add", "theorem", "edist_le", ["holder_with"]], ["add", "theorem", "edist_le_of_le", ["holder_with"]], ["add", "theorem", "nndist_le", ["holder_with"]], ["add", "theorem", "nndist_le_of_le", ["holder_with"]], ["add", "def", "holder_with", []], ["add", "theorem", "holder_with_id", []], ["add", "theorem", "holder_with_one", []]]}]}, {"timestamp": 1626448462, "sha": "35a8d935", "message": "chore(topology/algebra/infinite_sum): relax the requirements on `has_sum.smul` (#8312)", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1626440991, "sha": "162221fd", "message": "chore(set_theory/*): use `is_empty α` instead of `¬nonempty α` (#8276)\nSplit from #7826", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "sup_eq_zero", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "type_eq_zero_iff_empty", ["ordinal"]], ["add", "theorem", "type_eq_zero_iff_is_empty", ["ordinal"]], ["add", "theorem", "type_eq_zero_of_empty", ["ordinal"]]]}]}, {"timestamp": 1626435329, "sha": "9a801ef6", "message": "docs(order/rel_iso): add module docstring (#8249)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "apply_symm_apply", ["rel_iso"]]]}]}, {"timestamp": 1626426990, "sha": "e35d9760", "message": "chore(algebra/quaternion): add `smul_mk` (#8126)\nThis follows the pattern set by `mk_mul_mk` and `mk_add_mk`.", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["add", "theorem", "smul_mk", ["quaternion_algebra"]]]}]}, {"timestamp": 1626426989, "sha": "610fab7a", "message": "feat(set_theory/cofinality): more infinite pigeonhole principles (#7879)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "union_finset_finite_of_range_finite", ["set"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "exists_infinite_fiber", ["cardinal"]], ["add", "theorem", "infinite_pigeonhole_card_lt", ["cardinal"]], ["add", "theorem", "le_range_of_union_finset_eq_top", ["cardinal"]]]}]}, {"timestamp": 1626420858, "sha": "e6ff367d", "message": "feat(logic/embedding): simp lemma for injectivity for embeddings (#7881)", "changes": [{"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "apply_eq_iff_eq", ["function", "embedding"]]]}]}, {"timestamp": 1626412937, "sha": "728eefec", "message": "docs(data/fintype/basic): add module docstring (#8081)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "piecewise_univ", ["finset"]], ["mod", "theorem", "card_of_subtype", ["fintype"]], ["mod", "theorem", "exists_max", ["fintype"]], ["mod", "theorem", "mem_pi_finset", ["fintype"]], ["mod", "def", "of_list", ["fintype"]], ["mod", "def", "of_multiset", ["fintype"]], ["mod", "def", "pi_finset", ["fintype"]], ["mod", "theorem", "pi_finset_subset", ["fintype"]], ["mod", "theorem", "subtype_card", ["fintype"]], ["mod", "theorem", "mem_perms_of_list_of_mem", []]]}]}, {"timestamp": 1626395225, "sha": "4ae97924", "message": "chore(data/matrix/basic): add lemmas about dot_product and mul_vec (#8325)\nThis renames:\n* `mul_vec_one` to `one_mul_vec`\n* `mul_vec_zero` to `zero_mul_vec`\nand adds the new lemmas:\n* `sub_mul_vec`\n* `mul_vec_sub`\n* `zero_mul_vec`\n* `mul_vec_zero`\n* `sub_dot_product`\n* `dot_product_sub`\nSome existing lemmas have had their variables extracted to sections.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "add_dot_product", ["matrix"]], ["mod", "theorem", "diagonal_dot_product", ["matrix"]], ["mod", "theorem", "dot_product_add", ["matrix"]], ["mod", "theorem", "dot_product_diagonal'", ["matrix"]], ["mod", "theorem", "dot_product_diagonal", ["matrix"]], ["mod", "theorem", "dot_product_neg", ["matrix"]], ["mod", "theorem", "dot_product_smul", ["matrix"]], ["mod", "theorem", "dot_product_star", ["matrix"]], ["add", "theorem", "dot_product_sub", ["matrix"]], ["mod", "theorem", "dot_product_zero'", ["matrix"]], ["mod", "theorem", "dot_product_zero", ["matrix"]], ["del", "theorem", "mul_vec_one", ["matrix"]], ["mod", "theorem", "neg_dot_product", ["matrix"]], ["add", "theorem", "one_mul_vec", ["matrix"]], ["mod", "theorem", "smul_dot_product", ["matrix"]], ["mod", "theorem", "star_dot_product", ["matrix"]], ["mod", "theorem", "star_dot_product_star", ["matrix"]], ["add", "theorem", "sub_dot_product", ["matrix"]], ["mod", "theorem", "vec_mul_zero", ["matrix"]], ["mod", "theorem", "zero_dot_product'", ["matrix"]], ["mod", "theorem", "zero_dot_product", ["matrix"]], ["add", "theorem", "zero_mul_vec", ["matrix"]], ["add", "theorem", "zero_vec_mul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}]}, {"timestamp": 1626384207, "sha": "b577bb2c", "message": "feat(measure_theory/conditional_expectation): define condexp_L2, conditional expectation of L2 functions (#8324)", "changes": [{"oldPath": "src/measure_theory/conditional_expectation.lean", "newPath": "src/measure_theory/conditional_expectation.lean", "changes": [["add", "def", "condexp_L2", ["measure_theory"]], ["add", "theorem", "condexp_L2_indicator_of_measurable", ["measure_theory"]], ["add", "theorem", "inner_condexp_L2_eq_inner_fun", ["measure_theory"]], ["add", "theorem", "inner_condexp_L2_left_eq_right", ["measure_theory"]], ["add", "theorem", "integrable_condexp_L2_of_finite_measure", ["measure_theory"]], ["add", "theorem", "integrable_on_condexp_L2_of_measure_ne_top", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_indicator_const_Lp", ["measure_theory"]], ["add", "theorem", "norm_condexp_L2_coe_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_L2_le", ["measure_theory"]], ["add", "theorem", "norm_condexp_L2_le_one", ["measure_theory"]], ["add", "theorem", "snorm_condexp_L2_le", ["measure_theory"]]]}]}, {"timestamp": 1626370701, "sha": "79fbd465", "message": "feat(ring_theory/ideal): generalize two results from finset to multiset (#8320)\nNothing exciting going on here, just copied two proofs, replaced all `finset.insert` with `multiset.cons` and `finset.prod` with `(multiset.map _).prod`, and used those to show the original results.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "multiset_prod_le", ["ideal", "is_prime"]], ["add", "theorem", "multiset_prod_map_le", ["ideal", "is_prime"]], ["add", "theorem", "multiset_prod_le_inf", ["ideal"]]]}]}, {"timestamp": 1626366729, "sha": "a783a47c", "message": "feat(data/matrix/{basic, block}): missing lemmas on conj_transpose (#8303)\nThis also moves some imports around to make the star operator on vectors available in matrix/basic.lean\nThis is a follow up to #8291", "changes": [{"oldPath": "src/algebra/star/algebra.lean", "newPath": "src/algebra/star/algebra.lean", "changes": []}, {"oldPath": "src/algebra/star/pi.lean", "newPath": "src/algebra/star/pi.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "conj_transpose_col", ["matrix"]], ["add", "theorem", "conj_transpose_row", ["matrix"]], ["add", "theorem", "dot_product_star", ["matrix"]], ["add", "theorem", "map_update_column", ["matrix"]], ["add", "theorem", "map_update_row", ["matrix"]], ["add", "theorem", "star_dot_product", ["matrix"]], ["add", "theorem", "star_dot_product_star", ["matrix"]], ["mod", "theorem", "transpose_col", ["matrix"]], ["mod", "theorem", "transpose_row", ["matrix"]], ["add", "theorem", "update_column_conj_transpose", ["matrix"]], ["add", "theorem", "update_row_conj_transpose", ["matrix"]]]}, {"oldPath": "src/data/matrix/block.lean", "newPath": "src/data/matrix/block.lean", "changes": [["add", "theorem", "block_diagonal'_conj_transpose", ["matrix"]], ["add", "theorem", "block_diagonal'_map", ["matrix"]], ["add", "theorem", "block_diagonal_conj_transpose", ["matrix"]], ["add", "theorem", "block_diagonal_map", ["matrix"]], ["add", "theorem", "from_blocks_conj_transpose", ["matrix"]], ["add", "theorem", "from_blocks_map", ["matrix"]]]}]}, {"timestamp": 1626366728, "sha": "66055ddf", "message": "feat(algebra/lie/cartan_matrix): define the exceptional Lie algebras (#8299)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/lie/cartan_matrix.lean", "newPath": "src/algebra/lie/cartan_matrix.lean", "changes": [["add", "def", "E₆", ["cartan_matrix"]], ["add", "def", "E₇", ["cartan_matrix"]], ["add", "def", "E₈", ["cartan_matrix"]], ["add", "def", "F₄", ["cartan_matrix"]], ["add", "def", "G₂", ["cartan_matrix"]], ["add", "def", "e₆", ["lie_algebra"]], ["add", "def", "e₇", ["lie_algebra"]], ["add", "def", "e₈", ["lie_algebra"]], ["add", "def", "f₄", ["lie_algebra"]], ["add", "def", "g₂", ["lie_algebra"]]]}]}, {"timestamp": 1626361529, "sha": "bc1f1459", "message": "feat(data/multiset): `<` on multisets is well-founded (#8319)\nThis is vaguely related to #5783, in that it tries to solve a similar goal of finding a minimal multiset with some property.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "well_founded_lt", ["multiset"]]]}]}, {"timestamp": 1626354959, "sha": "0597b1dd", "message": "feat(analysis/normed_space/normed_group_hom): add equalizer (#8228)\nFrom LTE.\nWe add equalizer of `normed_group_homs`.", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "comm_sq₂", ["normed_group_hom", "equalizer"]], ["add", "theorem", "comp_ι_eq", ["normed_group_hom", "equalizer"]], ["add", "def", "lift", ["normed_group_hom", "equalizer"]], ["add", "def", "lift_equiv", ["normed_group_hom", "equalizer"]], ["add", "theorem", "lift_norm_noninc", ["normed_group_hom", "equalizer"]], ["add", "def", "map", ["normed_group_hom", "equalizer"]], ["add", "theorem", "map_comp_map", ["normed_group_hom", "equalizer"]], ["add", "theorem", "map_id", ["normed_group_hom", "equalizer"]], ["add", "theorem", "map_norm_noninc", ["normed_group_hom", "equalizer"]], ["add", "theorem", "norm_lift_le", ["normed_group_hom", "equalizer"]], ["add", "theorem", "norm_map_le", ["normed_group_hom", "equalizer"]], ["add", "def", "ι", ["normed_group_hom", "equalizer"]], ["add", "theorem", "ι_comp_lift", ["normed_group_hom", "equalizer"]], ["add", "theorem", "ι_comp_map", ["normed_group_hom", "equalizer"]], ["add", "theorem", "ι_norm_noninc", ["normed_group_hom", "equalizer"]], ["add", "def", "equalizer", ["normed_group_hom"]]]}]}, {"timestamp": 1626340851, "sha": "7e5be024", "message": "chore(algebra/*): make non-instance typeclasses reducible. (#8322)\nA follow up to #7835", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "def", "comp_hom", ["module"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "def", "comp_hom", ["distrib_mul_action"]], ["mod", "def", "comp_hom", ["mul_action"]]]}]}, {"timestamp": 1626327799, "sha": "e42af8da", "message": "refactor(topology/category/Profinite): define Profinite as a subcategory of CompHaus (#8314)\nThis adjusts the definition of Profinite to explicitly be a subcategory of CompHaus rather than a subcategory of Top which embeds into CompHaus. Essentially this means it's easier to construct an element of Profinite from an element of CompHaus.", "changes": [{"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": [["add", "theorem", "coe_to_CompHaus", ["Profinite"]], ["del", "theorem", "coe_to_Top", ["Profinite"]], ["del", "def", "to_CompHaus", ["Profinite"]], ["mod", "def", "to_Profinite_adj_to_CompHaus", ["Profinite"]], ["add", "def", "to_Top", ["Profinite"]], ["add", "def", "Profinite_to_CompHaus", []], ["del", "def", "Profinite_to_Top", []]]}]}, {"timestamp": 1626300652, "sha": "e343609b", "message": "feat(measure_theory/simple_func_dense): induction lemmas for Lp.simple_func and Lp (#8300)\nThe new lemmas, `Lp.simple_func.induction`, `Lp.induction`, allow one to prove a predicate for all elements of `Lp.simple_func` / `Lp` (here p < ∞), by proving it for characteristic functions and then checking it behaves appropriately under addition, and, in the second case, taking limits. They are modelled on existing lemmas such as `simple_func.induction`, `mem_ℒp.induction`, `integrable.induction`.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "mul_indicator_empty'", ["set"]]]}, {"oldPath": "src/algebra/support.lean", "newPath": "src/algebra/support.lean", "changes": [["add", "theorem", "mul_support_const", ["function"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "support_indicator", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "indicator_const_empty", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["add", "theorem", "induction", ["measure_theory", "Lp"]], ["add", "theorem", "coe_indicator_const", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "indicator_const", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_simple_func_indicator_const", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "measure_lt_top_of_mem_ℒp_indicator", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1626286937, "sha": "19a156ae", "message": "refactor(algebra/ordered_ring): use `mul_le_mul'` for `canonically_ordered_comm_semiring` (#8284)\n* use `canonically_ordered_comm_semiring`, not `canonically_ordered_semiring` as a namespace;\n* add an instance `canonically_ordered_comm_semiring.to_covariant_mul_le`;\n* drop `canonically_ordered_semiring.mul_le_mul` etc in favor of `mul_le_mul'` etc.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/algebra/group_power/order.lean", "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_comm_semiring"]], ["add", "theorem", "pow_le_one", ["canonically_ordered_comm_semiring"]], ["add", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_comm_semiring"]], ["add", "theorem", "pow_pos", ["canonically_ordered_comm_semiring"]], ["del", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_le_one", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_pos", ["canonically_ordered_semiring"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_pos", ["canonically_ordered_comm_semiring"]], ["add", "theorem", "zero_lt_one", ["canonically_ordered_comm_semiring"]], ["del", "theorem", "mul_le_mul", ["canonically_ordered_semiring"]], ["del", "theorem", "mul_le_mul_left'", ["canonically_ordered_semiring"]], ["del", "theorem", "mul_le_mul_right'", ["canonically_ordered_semiring"]], ["del", "theorem", "mul_pos", ["canonically_ordered_semiring"]], ["del", "theorem", "zero_lt_one", ["canonically_ordered_semiring"]]]}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1626284516, "sha": "e9b1fbd0", "message": "feat(combinatorics/simple_graph): add maps and subgraphs (#8223)\nAdd graph homomorphisms, isomorphisms, and embeddings. Define subgraphs and supporting lemmas and definitions. Also renamed `edge_symm` to `adj_comm`.", "changes": [{"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "def", "empty_graph", []], ["add", "theorem", "adj_comm", ["simple_graph"]], ["add", "theorem", "adj_symm", ["simple_graph"]], ["del", "theorem", "edge_symm'", ["simple_graph"]], ["del", "theorem", "edge_symm", ["simple_graph"]], ["add", "theorem", "apply_mem_neighbor_set_iff", ["simple_graph", "embedding"]], ["add", "theorem", "coe_comp", ["simple_graph", "embedding"]], ["add", "def", "comp", ["simple_graph", "embedding"]], ["add", "theorem", "map_adj_iff", ["simple_graph", "embedding"]], ["add", "def", "map_edge_set", ["simple_graph", "embedding"]], ["add", "theorem", "map_mem_edge_set_iff", ["simple_graph", "embedding"]], ["add", "def", "map_neighbor_set", ["simple_graph", "embedding"]], ["add", "def", "refl", ["simple_graph", "embedding"]], ["add", "def", "to_hom", ["simple_graph", "embedding"]], ["add", "def", "embedding", ["simple_graph"]], ["add", "theorem", "apply_mem_neighbor_set", ["simple_graph", "hom"]], ["add", "theorem", "coe_comp", ["simple_graph", "hom"]], ["add", "def", "comp", ["simple_graph", "hom"]], ["add", "def", "id", ["simple_graph", "hom"]], ["add", "theorem", "map_adj", ["simple_graph", "hom"]], ["add", "theorem", "injective", ["simple_graph", "hom", "map_edge_set"]], ["add", "def", "map_edge_set", ["simple_graph", "hom"]], ["add", "theorem", "map_mem_edge_set", ["simple_graph", "hom"]], ["add", "def", "map_neighbor_set", ["simple_graph", "hom"]], ["add", "def", "hom", ["simple_graph"]], ["add", "theorem", "apply_mem_neighbor_set_iff", ["simple_graph", "iso"]], ["add", "theorem", "card_eq_of_iso", ["simple_graph", "iso"]], ["add", "theorem", "coe_comp", ["simple_graph", "iso"]], ["add", "def", "comp", ["simple_graph", "iso"]], ["add", "theorem", "map_adj_iff", ["simple_graph", "iso"]], ["add", "def", "map_edge_set", ["simple_graph", "iso"]], ["add", "theorem", "map_mem_edge_set_iff", ["simple_graph", "iso"]], ["add", "def", "map_neighbor_set", ["simple_graph", "iso"]], ["add", "def", "refl", ["simple_graph", "iso"]], ["add", "def", "symm", ["simple_graph", "iso"]], ["add", "def", "to_embedding", ["simple_graph", "iso"]], ["add", "def", "to_hom", ["simple_graph", "iso"]], ["add", "def", "iso", ["simple_graph"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/subgraph.lean", "changes": [["add", "theorem", "adj_comm", ["simple_graph", "subgraph"]], ["add", "theorem", "adj_symm", ["simple_graph", "subgraph"]], ["add", "def", "bot", ["simple_graph", "subgraph"]], ["add", "def", "bot_equiv", ["simple_graph", "subgraph"]], ["add", "def", "coe", ["simple_graph", "subgraph"]], ["add", "theorem", "coe_adj_sub", ["simple_graph", "subgraph"]], ["add", "theorem", "coe_degree", ["simple_graph", "subgraph"]], ["add", "def", "coe_neighbor_set_equiv", ["simple_graph", "subgraph"]], ["add", "def", "copy", ["simple_graph", "subgraph"]], ["add", "theorem", "copy_eq", ["simple_graph", "subgraph"]], ["add", "def", "degree", ["simple_graph", "subgraph"]], ["add", "theorem", "degree_le'", ["simple_graph", "subgraph"]], ["add", "theorem", "degree_le", ["simple_graph", "subgraph"]], ["add", "def", "edge_set", ["simple_graph", "subgraph"]], ["add", "theorem", "edge_set_subset", ["simple_graph", "subgraph"]], ["add", "def", "finite_at_of_subgraph", ["simple_graph", "subgraph"]], ["add", "def", "incidence_set", ["simple_graph", "subgraph"]], ["add", "theorem", "incidence_set_subset", ["simple_graph", "subgraph"]], ["add", "theorem", "incidence_set_subset_incidence_set", ["simple_graph", "subgraph"]], ["add", "def", "inter", ["simple_graph", "subgraph"]], ["add", "def", "is_induced", ["simple_graph", "subgraph"]], ["add", "def", "is_spanning", ["simple_graph", "subgraph"]], ["add", "def", "is_subgraph", ["simple_graph", "subgraph"]], ["add", "theorem", "injective", ["simple_graph", "subgraph", "map"]], ["add", "def", "map", ["simple_graph", "subgraph"]], ["add", "theorem", "injective", ["simple_graph", "subgraph", "map_top"]], ["add", "def", "map_top", ["simple_graph", "subgraph"]], ["add", "theorem", "map_top_to_fun", ["simple_graph", "subgraph"]], ["add", "theorem", "mem_edge_set", ["simple_graph", "subgraph"]], ["add", "theorem", "mem_neighbor_set", ["simple_graph", "subgraph"]], ["add", "theorem", "mem_verts_if_mem_edge", ["simple_graph", "subgraph"]], ["add", "def", "neighbor_set", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_subset", ["simple_graph", "subgraph"]], ["add", "theorem", "neighbor_set_subset_of_subgraph", ["simple_graph", "subgraph"]], ["add", "def", "top", ["simple_graph", "subgraph"]], ["add", "def", "top_equiv", ["simple_graph", "subgraph"]], ["add", "def", "union", ["simple_graph", "subgraph"]], ["add", "def", "vert", ["simple_graph", "subgraph"]], ["add", "structure", "subgraph", ["simple_graph"]]]}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": [["add", "theorem", "injective", ["sym2", "map"]], ["add", "theorem", "map_map", ["sym2"]], ["mod", "theorem", "map_pair_eq", ["sym2"]]]}]}, {"timestamp": 1626276089, "sha": "bcc35c75", "message": "feat(group_theory/submonoid/operations): `add_equiv.of_left_inverse` to match `linear_equiv.of_left_inverse` (#8279)", "changes": [{"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "def", "of_left_inverse'", ["mul_equiv"]]]}]}, {"timestamp": 1626271079, "sha": "375dd53e", "message": "refactor(geometry/manifold): split `bump_function` into 3 files (#8313)\nThis is the a part of #8309. Both code and comments were moved with\nalmost no modifications: added/removed `variables`/`section`s,\nslightly adjusted comments to glue them together.", "changes": [{"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": [["del", "theorem", "exists_embedding_finrank_of_compact", []], ["del", "theorem", "apply_ind", ["smooth_bump_covering"]], ["del", "def", "choice", ["smooth_bump_covering"]], ["del", "def", "choice_set", ["smooth_bump_covering"]], ["del", "theorem", "coe_mk", ["smooth_bump_covering"]], ["del", "theorem", "comp_embedding_pi_tangent_mfderiv", ["smooth_bump_covering"]], ["del", "def", "embedding_pi_tangent", ["smooth_bump_covering"]], ["del", "theorem", "embedding_pi_tangent_inj_on", ["smooth_bump_covering"]], ["del", "theorem", "embedding_pi_tangent_injective", ["smooth_bump_covering"]], ["del", "theorem", "embedding_pi_tangent_injective_mfderiv", ["smooth_bump_covering"]], ["del", "theorem", "embedding_pi_tangent_ker_mfderiv", ["smooth_bump_covering"]], ["del", "theorem", "eventually_eq_one", ["smooth_bump_covering"]], ["del", "theorem", "exists_immersion_finrank", ["smooth_bump_covering"]], ["del", "theorem", "exists_is_subordinate", ["smooth_bump_covering"]], ["del", "def", "ind", ["smooth_bump_covering"]], ["del", "def", "is_subordinate", ["smooth_bump_covering"]], ["del", "theorem", "mem_chart_at_ind_source", ["smooth_bump_covering"]], ["del", "theorem", "mem_chart_at_source_of_eq_one", ["smooth_bump_covering"]], ["del", "theorem", "mem_ext_chart_at_ind_source", ["smooth_bump_covering"]], ["del", "theorem", "mem_ext_chart_at_source_of_eq_one", ["smooth_bump_covering"]], ["del", "theorem", "mem_support_ind", ["smooth_bump_covering"]], ["del", "structure", "smooth_bump_covering", []]]}, {"oldPath": null, "newPath": "src/geometry/manifold/partition_of_unity.lean", "changes": [["add", "theorem", "apply_ind", ["smooth_bump_covering"]], ["add", "def", "choice", ["smooth_bump_covering"]], ["add", "def", "choice_set", ["smooth_bump_covering"]], ["add", "theorem", "coe_mk", ["smooth_bump_covering"]], ["add", "theorem", "eventually_eq_one", ["smooth_bump_covering"]], ["add", "theorem", "exists_is_subordinate", ["smooth_bump_covering"]], ["add", "def", "ind", ["smooth_bump_covering"]], ["add", "def", "is_subordinate", ["smooth_bump_covering"]], ["add", "theorem", "mem_chart_at_ind_source", ["smooth_bump_covering"]], ["add", "theorem", "mem_chart_at_source_of_eq_one", ["smooth_bump_covering"]], ["add", "theorem", "mem_ext_chart_at_ind_source", ["smooth_bump_covering"]], ["add", "theorem", "mem_ext_chart_at_source_of_eq_one", ["smooth_bump_covering"]], ["add", "theorem", "mem_support_ind", ["smooth_bump_covering"]], ["add", "structure", "smooth_bump_covering", []]]}, {"oldPath": null, "newPath": "src/geometry/manifold/whitney_embedding.lean", "changes": [["add", "theorem", "exists_embedding_finrank_of_compact", []], ["add", "theorem", "comp_embedding_pi_tangent_mfderiv", ["smooth_bump_covering"]], ["add", "def", "embedding_pi_tangent", ["smooth_bump_covering"]], ["add", "theorem", "embedding_pi_tangent_inj_on", ["smooth_bump_covering"]], ["add", "theorem", "embedding_pi_tangent_injective", ["smooth_bump_covering"]], ["add", "theorem", "embedding_pi_tangent_injective_mfderiv", ["smooth_bump_covering"]], ["add", "theorem", "embedding_pi_tangent_ker_mfderiv", ["smooth_bump_covering"]], ["add", "theorem", "exists_immersion_finrank", ["smooth_bump_covering"]]]}]}, {"timestamp": 1626271078, "sha": "5bac21a1", "message": "chore(algebra/module/pi): add `pi.smul_def` (#8311)\nSometimes it is useful to rewrite unapplied `s • x` (I need it in a branch that is not yet ready for review).\nWe already have `pi.zero_def`, `pi.add_def`, etc.", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "smul_def", ["pi"]]]}]}, {"timestamp": 1626271077, "sha": "7fccf40a", "message": "feat(algebraic_topology/topological_simplex): This defines the natural functor from Top to sSet. (#8305)\nThis PR also provides the geometric realization functor and the associated adjunction.", "changes": [{"oldPath": "src/algebraic_topology/simplicial_set.lean", "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_topology/topological_simplex.lean", "changes": [["add", "theorem", "coe_to_Top_map", ["simplex_category"]], ["add", "theorem", "continuous_to_Top_map", ["simplex_category"]], ["add", "def", "to_Top", ["simplex_category"]], ["add", "def", "to_Top_map", ["simplex_category"]], ["add", "theorem", "ext", ["simplex_category", "to_Top_obj"]], ["add", "def", "to_Top_obj", ["simplex_category"]]]}]}, {"timestamp": 1626271076, "sha": "7d53431e", "message": "feat(measure_theory/integration): if a function has bounded integral on all sets of finite measure, then it is integrable (#8297)\nIf the measure is sigma-finite and a function has integral bounded by some C for all measurable sets with finite measure, then its integral over the whole space is bounded by that same C. This can be used to show that a function is integrable.", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_le_of_forall_fin_meas_le'", ["measure_theory"]], ["add", "theorem", "lintegral_le_of_forall_fin_meas_le", ["measure_theory"]], ["add", "theorem", "lintegral_le_of_forall_fin_meas_le_of_measurable", ["measure_theory"]], ["add", "theorem", "univ_le_of_forall_fin_meas_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "integrable_of_forall_fin_meas_le'", ["measure_theory"]], ["add", "theorem", "integrable_of_forall_fin_meas_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space_def.lean", "newPath": "src/measure_theory/measurable_space_def.lean", "changes": []}]}, {"timestamp": 1626267412, "sha": "3b7e7bd6", "message": "feat(normed_space): controlled_sum_of_mem_closure (#8310)\nFrom LTE", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "controlled_sum_of_mem_closure", []], ["add", "theorem", "controlled_sum_of_mem_closure_range", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["del", "theorem", "strict_mono_tendsto_at_top", ["filter"]], ["add", "theorem", "tendsto_at_top", ["strict_mono"]]]}]}, {"timestamp": 1626263745, "sha": "2e9aa839", "message": "chore(analysis/special_functions/pow): golf a few proofs (#8308)\n* add `ennreal.zero_rpow_mul_self` and `ennreal.mul_rpow_eq_ite`;\n* use the latter lemma to golf other proofs about `(x * y) ^ z`;\n* drop unneeded argument in `ennreal.inv_rpow_of_pos`, rename it to\n `ennreal.inv_rpow`;\n* add `ennreal.strict_mono_rpow_of_pos` and\n `ennreal.monotone_rpow_of_nonneg`, use themm to golf some proofs.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "inv_rpow", ["ennreal"]], ["del", "theorem", "inv_rpow_of_pos", ["ennreal"]], ["add", "theorem", "monotone_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "mul_rpow_eq_ite", ["ennreal"]], ["add", "theorem", "strict_mono_rpow_of_pos", ["ennreal"]], ["add", "theorem", "zero_rpow_mul_self", ["ennreal"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "eq_inv_of_mul_eq_one", ["ennreal"]]]}, {"oldPath": "src/measure_theory/mean_inequalities.lean", "newPath": "src/measure_theory/mean_inequalities.lean", "changes": []}]}, {"timestamp": 1626257663, "sha": "743209ca", "message": "chore(algebra/big_operators/basic): spaces around binders (#8307)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "exists_ne_one_of_prod_ne_one", ["finset"]], ["mod", "theorem", "prod_congr", ["finset"]], ["mod", "theorem", "prod_eq_one", ["finset"]], ["mod", "theorem", "prod_eq_zero_iff", ["finset"]], ["mod", "theorem", "sum_const_nat", ["finset"]]]}]}, {"timestamp": 1626257662, "sha": "e6731de1", "message": "feat(algebra/pointwise): `smul_comm_class` instances for `set` (#8292)\nI'm not very familiar with `smul_comm_class`, so these instances might need to be tweaked slightly.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}]}, {"timestamp": 1626257661, "sha": "656722c5", "message": "refactor(measure_theory/measure_space): use `covariant_class` instead of `add_le_add` (#8285)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}]}, {"timestamp": 1626257658, "sha": "51cc43ef", "message": "feat(measure_theory/borel_space): a monotone function is measurable (#8045)", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_of_antimono", []], ["add", "theorem", "measurable_of_monotone", []]]}]}, {"timestamp": 1626251844, "sha": "8e5af430", "message": "chore(algebra/big_operators/basic): rename sum_(nat/int)_cast and (nat/int).coe_prod (#8264)\nThe current names aren't great because\n1. For `sum_nat_cast` and `sum_int_cast`, the LHS isn't a sum of casts but a cast of sums, and it doesn't follow any other naming convention (`nat.cast_...` or `....coe_sum`).\n2. For `.coe_prod`, the coercion from `ℕ` or `ℤ` should be called `cast`.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["del", "theorem", "sum_int_cast", ["finset"]], ["del", "theorem", "sum_nat_cast", ["finset"]], ["add", "theorem", "cast_prod", ["int"]], ["add", "theorem", "cast_sum", ["int"]], ["del", "theorem", "coe_prod", ["int"]], ["add", "theorem", "cast_prod", ["nat"]], ["add", "theorem", "cast_sum", ["nat"]], ["del", "theorem", "coe_prod", ["nat"]], ["mod", "theorem", "coe_prod", ["units"]]]}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}]}, {"timestamp": 1626245646, "sha": "4709e615", "message": "doc(*): bold a few more named theorems (#8252)", "changes": [{"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/vitali_caratheodory.lean", "newPath": "src/measure_theory/vitali_caratheodory.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/weierstrass.lean", "newPath": "src/topology/continuous_function/weierstrass.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1626212935, "sha": "5021c1f9", "message": "feat(data/int): conditionally complete linear order (#8149)\nProve that the integers form a conditionally complete linear order.\nI do not have a specific goal in mind for this, but it would have been helpful to formulate one of the Proof Ground problems using this.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "coe_greatest_of_bdd_eq", ["int"]], ["add", "theorem", "coe_least_of_bdd_eq", ["int"]]]}, {"oldPath": null, "newPath": "src/data/int/order.lean", "changes": [["add", "theorem", "cInf_empty", ["int"]], ["add", "theorem", "cInf_eq_least_of_bdd", ["int"]], ["add", "theorem", "cInf_mem", ["int"]], ["add", "theorem", "cInf_of_not_bdd_below", ["int"]], ["add", "theorem", "cSup_empty", ["int"]], ["add", "theorem", "cSup_eq_greatest_of_bdd", ["int"]], ["add", "theorem", "cSup_mem", ["int"]], ["add", "theorem", "cSup_of_not_bdd_above", ["int"]]]}]}, {"timestamp": 1626207284, "sha": "29b63a7e", "message": "feat(data/matrix/basic): add conj_transpose (#8291)\nAs requested by Eric Wieser, I pulled one single change of #8289 out into a new PR. As such, this PR will not block anything in #8289.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "conj_transpose", ["matrix"]], ["add", "theorem", "conj_transpose_add", ["matrix"]], ["add", "theorem", "conj_transpose_apply", ["matrix"]], ["add", "theorem", "conj_transpose_conj_transpose", ["matrix"]], ["add", "theorem", "conj_transpose_minor", ["matrix"]], ["add", "theorem", "conj_transpose_mul", ["matrix"]], ["add", "theorem", "conj_transpose_neg", ["matrix"]], ["add", "theorem", "conj_transpose_one", ["matrix"]], ["add", "theorem", "conj_transpose_reindex", ["matrix"]], ["add", "theorem", "conj_transpose_smul", ["matrix"]], ["add", "theorem", "conj_transpose_sub", ["matrix"]], ["add", "theorem", "conj_transpose_zero", ["matrix"]], ["mod", "theorem", "star_apply", ["matrix"]], ["add", "theorem", "star_eq_conj_transpose", ["matrix"]], ["mod", "theorem", "star_mul", ["matrix"]]]}]}, {"timestamp": 1626207283, "sha": "63266ff4", "message": "feat(group_theory/free_product): the free product of an indexed family of monoids (#8256)\nDefines the free product (categorical coproduct) of an indexed family of monoids. Proves its universal property. The free product of groups is a group.\nSplit off from #7395", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/free_product.lean", "changes": [["add", "theorem", "ext_hom", ["free_product"]], ["add", "theorem", "induction_on", ["free_product"]], ["add", "theorem", "inv_def", ["free_product"]], ["add", "def", "lift", ["free_product"]], ["add", "theorem", "lift_of", ["free_product"]], ["add", "def", "of", ["free_product"]], ["add", "theorem", "of_apply", ["free_product"]], ["add", "theorem", "of_injective", ["free_product"]], ["add", "theorem", "of_left_inverse", ["free_product"]], ["add", "inductive", "rel", ["free_product"]], ["add", "def", "free_product", []]]}]}, {"timestamp": 1626202314, "sha": "905b875e", "message": "chore(data/matrix/block): move block matrices into their own file (#8290)\nThis is a straight cut-and-paste, with no reordering or renaming.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/import.20fails/near/245802618)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "def", "block_diagonal'", ["matrix"]], ["del", "theorem", "block_diagonal'_add", ["matrix"]], ["del", "theorem", "block_diagonal'_apply", ["matrix"]], ["del", "theorem", "block_diagonal'_apply_eq", ["matrix"]], ["del", "theorem", "block_diagonal'_apply_ne", ["matrix"]], ["del", "theorem", "block_diagonal'_diagonal", ["matrix"]], ["del", "theorem", "block_diagonal'_eq_block_diagonal", ["matrix"]], ["del", "theorem", "block_diagonal'_minor_eq_block_diagonal", ["matrix"]], ["del", "theorem", "block_diagonal'_mul", ["matrix"]], ["del", "theorem", "block_diagonal'_neg", ["matrix"]], ["del", "theorem", "block_diagonal'_one", ["matrix"]], ["del", "theorem", "block_diagonal'_smul", ["matrix"]], ["del", "theorem", "block_diagonal'_sub", ["matrix"]], ["del", "theorem", "block_diagonal'_transpose", ["matrix"]], ["del", "theorem", "block_diagonal'_zero", ["matrix"]], ["del", "def", "block_diagonal", ["matrix"]], ["del", "theorem", "block_diagonal_add", ["matrix"]], ["del", "theorem", "block_diagonal_apply", ["matrix"]], ["del", "theorem", "block_diagonal_apply_eq", ["matrix"]], ["del", "theorem", "block_diagonal_apply_ne", ["matrix"]], ["del", "theorem", "block_diagonal_diagonal", ["matrix"]], ["del", "theorem", "block_diagonal_mul", ["matrix"]], ["del", "theorem", "block_diagonal_neg", ["matrix"]], ["del", "theorem", "block_diagonal_one", ["matrix"]], ["del", "theorem", "block_diagonal_smul", ["matrix"]], ["del", "theorem", "block_diagonal_sub", ["matrix"]], ["del", "theorem", "block_diagonal_transpose", ["matrix"]], ["del", "theorem", "block_diagonal_zero", ["matrix"]], ["del", "def", "from_blocks", ["matrix"]], ["del", "theorem", "from_blocks_add", ["matrix"]], ["del", "theorem", "from_blocks_apply₁₁", ["matrix"]], ["del", "theorem", "from_blocks_apply₁₂", ["matrix"]], ["del", "theorem", "from_blocks_apply₂₁", ["matrix"]], ["del", "theorem", "from_blocks_apply₂₂", ["matrix"]], ["del", "theorem", "from_blocks_diagonal", ["matrix"]], ["del", "theorem", "from_blocks_multiply", ["matrix"]], ["del", "theorem", "from_blocks_one", ["matrix"]], ["del", "theorem", "from_blocks_smul", ["matrix"]], ["del", "theorem", "from_blocks_to_blocks", ["matrix"]], ["del", "theorem", "from_blocks_transpose", ["matrix"]], ["del", "def", "to_block", ["matrix"]], ["del", "theorem", "to_block_apply", ["matrix"]], ["del", "theorem", "to_blocks_from_blocks₁₁", ["matrix"]], ["del", "theorem", "to_blocks_from_blocks₁₂", ["matrix"]], ["del", "theorem", "to_blocks_from_blocks₂₁", ["matrix"]], ["del", "theorem", "to_blocks_from_blocks₂₂", ["matrix"]], ["del", "def", "to_blocks₁₁", ["matrix"]], ["del", "def", "to_blocks₁₂", ["matrix"]], ["del", "def", "to_blocks₂₁", ["matrix"]], ["del", "def", "to_blocks₂₂", ["matrix"]], ["del", "def", "to_square_block'", ["matrix"]], ["del", "def", "to_square_block", ["matrix"]], ["del", "theorem", "to_square_block_def'", ["matrix"]], ["del", "theorem", "to_square_block_def", ["matrix"]], ["del", "def", "to_square_block_prop", ["matrix"]], ["del", "theorem", "to_square_block_prop_def", ["matrix"]]]}, {"oldPath": null, "newPath": "src/data/matrix/block.lean", "changes": [["add", "def", "block_diagonal'", ["matrix"]], ["add", "theorem", "block_diagonal'_add", ["matrix"]], ["add", "theorem", "block_diagonal'_apply", ["matrix"]], ["add", "theorem", "block_diagonal'_apply_eq", ["matrix"]], ["add", "theorem", "block_diagonal'_apply_ne", ["matrix"]], ["add", "theorem", "block_diagonal'_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal'_eq_block_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal'_minor_eq_block_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal'_mul", ["matrix"]], ["add", "theorem", "block_diagonal'_neg", ["matrix"]], ["add", "theorem", "block_diagonal'_one", ["matrix"]], ["add", "theorem", "block_diagonal'_smul", ["matrix"]], ["add", "theorem", "block_diagonal'_sub", ["matrix"]], ["add", "theorem", "block_diagonal'_transpose", ["matrix"]], ["add", "theorem", "block_diagonal'_zero", ["matrix"]], ["add", "def", "block_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal_add", ["matrix"]], ["add", "theorem", "block_diagonal_apply", ["matrix"]], ["add", "theorem", "block_diagonal_apply_eq", ["matrix"]], ["add", "theorem", "block_diagonal_apply_ne", ["matrix"]], ["add", "theorem", "block_diagonal_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal_mul", ["matrix"]], ["add", "theorem", "block_diagonal_neg", ["matrix"]], ["add", "theorem", "block_diagonal_one", ["matrix"]], ["add", "theorem", "block_diagonal_smul", ["matrix"]], ["add", "theorem", "block_diagonal_sub", ["matrix"]], ["add", "theorem", "block_diagonal_transpose", ["matrix"]], ["add", "theorem", "block_diagonal_zero", ["matrix"]], ["add", "def", "from_blocks", ["matrix"]], ["add", "theorem", "from_blocks_add", ["matrix"]], ["add", "theorem", "from_blocks_apply₁₁", ["matrix"]], ["add", "theorem", "from_blocks_apply₁₂", ["matrix"]], ["add", "theorem", "from_blocks_apply₂₁", ["matrix"]], ["add", "theorem", "from_blocks_apply₂₂", ["matrix"]], ["add", "theorem", "from_blocks_diagonal", ["matrix"]], ["add", "theorem", "from_blocks_multiply", ["matrix"]], ["add", "theorem", "from_blocks_one", ["matrix"]], ["add", "theorem", "from_blocks_smul", ["matrix"]], ["add", "theorem", "from_blocks_to_blocks", ["matrix"]], ["add", "theorem", "from_blocks_transpose", ["matrix"]], ["add", "def", "to_block", ["matrix"]], ["add", "theorem", "to_block_apply", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₁₁", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₁₂", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₂₁", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₂₂", ["matrix"]], ["add", "def", "to_blocks₁₁", ["matrix"]], ["add", "def", "to_blocks₁₂", ["matrix"]], ["add", "def", "to_blocks₂₁", ["matrix"]], ["add", "def", "to_blocks₂₂", ["matrix"]], ["add", "def", "to_square_block'", ["matrix"]], ["add", "def", "to_square_block", ["matrix"]], ["add", "theorem", "to_square_block_def'", ["matrix"]], ["add", "theorem", "to_square_block_def", ["matrix"]], ["add", "def", "to_square_block_prop", ["matrix"]], ["add", "theorem", "to_square_block_prop_def", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": []}]}, {"timestamp": 1626202313, "sha": "461130bc", "message": "feat(category_theory/monoidal): the definition of Tor (#7512)\n# Tor, the left-derived functor of tensor product\nWe define `tor C n : C ⥤ C ⥤ C`, by left-deriving in the second factor of `(X, Y) ↦ X ⊗ Y`.\nFor now we have almost nothing to say about it!\nIt would be good to show that this is naturally isomorphic to the functor obtained\nby left-deriving in the first factor, instead.", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "def", "tensoring_left", ["category_theory", "monoidal_category"]], ["mod", "def", "tensoring_right", ["category_theory", "monoidal_category"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/preadditive.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monoidal/tor.lean", "changes": [["add", "def", "Tor'", ["category_theory"]], ["add", "def", "Tor'_succ_of_projective", ["category_theory"]], ["add", "def", "Tor", ["category_theory"]], ["add", "def", "Tor_succ_of_projective", ["category_theory"]]]}]}, {"timestamp": 1626197567, "sha": "b091c3fb", "message": "feat(algebra/direct_sum): the submodules of an internal direct sum satisfy `supr A = ⊤` (#8274)\nThe main results here are:\n* `direct_sum.add_submonoid_is_internal.supr_eq_top`\n* `direct_sum.submodule_is_internal.supr_eq_top`\nWhich we prove using the new lemmas\n* `add_submonoid.supr_eq_mrange_dfinsupp_sum_add_hom`\n* `submodule.supr_eq_range_dfinsupp_lsum`\nThere's no obvious way to reuse the proofs between the two, but thankfully all four proofs are quite short anyway.\nThese should aid in shortening #8246.", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["add", "theorem", "supr_eq_top", ["direct_sum", "add_submonoid_is_internal"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "mem_supr_iff_exists_dfinsupp'", ["add_submonoid"]], ["add", "theorem", "mem_supr_iff_exists_dfinsupp", ["add_submonoid"]], ["add", "theorem", "supr_eq_mrange_dfinsupp_sum_add_hom", ["add_submonoid"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["mod", "theorem", "dfinsupp_sum_add_hom_mem", ["submodule"]], ["mod", "theorem", "dfinsupp_sum_mem", ["submodule"]], ["add", "theorem", "mem_supr_iff_exists_dfinsupp'", ["submodule"]], ["add", "theorem", "mem_supr_iff_exists_dfinsupp", ["submodule"]], ["add", "theorem", "supr_eq_range_dfinsupp_lsum", ["submodule"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["add", "theorem", "supr_eq_top", ["direct_sum", "submodule_is_internal"]]]}]}, {"timestamp": 1626194884, "sha": "3a0ef3c2", "message": "feat(ring_theory): (strict) monotonicity of `coe_submodule` (#8273)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coe_submodule_le_coe_submodule", ["is_fraction_ring"]], ["add", "theorem", "coe_submodule_strict_mono", ["is_fraction_ring"]], ["add", "theorem", "coe_submodule_le_coe_submodule", ["is_localization"]], ["add", "theorem", "coe_submodule_mono", ["is_localization"]], ["add", "theorem", "coe_submodule_strict_mono", ["is_localization"]]]}]}, {"timestamp": 1626194882, "sha": "8be0eda2", "message": "chore(ring_theory): allow Dedekind domains to be fields (#8271)\nDuring the Dedekind domain project, we found that the `¬ is_field R` condition is almost never needed, and it gets in the way when proving rings of integers are Dedekind domains. This PR removes this assumption from the three definitions.\nCo-Authored-By: Ashvni \nCo-Authored-By: Filippo A. E. Nuccio ", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "def", "is_dedekind_domain_inv", []], ["del", "structure", "is_dedekind_domain_inv", []]]}]}, {"timestamp": 1626190459, "sha": "815e91f3", "message": "chore(data/nat/prime): fix + add missing lemmas (#8066)\nI fixed up some indents as well, as they were bothering me quite a bit. The only \"new\" content is 597 - 617.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_subset_of_dvd", ["nat"]], ["add", "theorem", "factors_subset_right", ["nat"]], ["mod", "theorem", "le_min_fac'", ["nat"]], ["mod", "theorem", "le_min_fac", ["nat"]], ["mod", "def", "min_fac", ["nat"]], ["mod", "def", "min_fac_aux", ["nat"]], ["mod", "theorem", "min_fac_aux_has_prop", ["nat"]], ["mod", "theorem", "min_fac_dvd", ["nat"]], ["mod", "theorem", "min_fac_eq", ["nat"]], ["mod", "theorem", "min_fac_eq_one_iff", ["nat"]], ["mod", "theorem", "min_fac_eq_two_iff", ["nat"]], ["mod", "theorem", "min_fac_has_prop", ["nat"]], ["mod", "theorem", "min_fac_le", ["nat"]], ["mod", "theorem", "min_fac_le_div", ["nat"]], ["mod", "theorem", "min_fac_le_of_dvd", ["nat"]], ["mod", "theorem", "min_fac_one", ["nat"]], ["mod", "theorem", "min_fac_pos", ["nat"]], ["mod", "theorem", "min_fac_prime", ["nat"]], ["mod", "theorem", "min_fac_sq_le_self", ["nat"]], ["mod", "theorem", "min_fac_zero", ["nat"]], ["mod", "theorem", "not_prime_iff_min_fac_lt", ["nat"]], ["mod", "theorem", "prime_def_min_fac", ["nat"]]]}]}, {"timestamp": 1626179323, "sha": "bf868344", "message": "chore(probability_theory/integration): style changes. Make arguments implicit, remove spaces, etc. (#8286)\n- make the measurable_space arguments of indep_fun implicit again. They were made explicit to accommodate the way `lintegral_mul_eq_lintegral_mul_lintegral_of_indep_fun` was written, with explicit `(borel ennreal)` arguments. Those arguments are not needed and are removed.\n- use `measurable_set T` instead of `M.measurable_set' T`.\n- write the type of several `have` explicitly.\n- remove some spaces\n- ensure there is only one tactic per line\n- use `exact` instead of `apply` when the tactic is finishing", "changes": [{"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": [["mod", "def", "indep_fun", ["probability_theory"]]]}, {"oldPath": "src/probability_theory/integration.lean", "newPath": "src/probability_theory/integration.lean", "changes": [["mod", "theorem", "lintegral_mul_eq_lintegral_mul_lintegral_of_indep_fun", ["probability_theory"]]]}]}, {"timestamp": 1626179322, "sha": "f1e27d29", "message": "feat(linear_algebra/finsupp): mem_supr_iff_exists_finset (#8268)\nThis is an `iff` version of `exists_finset_of_mem_supr`", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "mem_supr_iff_exists_finset", ["submodule"]]]}]}, {"timestamp": 1626179320, "sha": "3e56439d", "message": "chore(data/set/intervals): relax linear_order to preorder in the proofs of `Ixx_eq_empty_iff` (#8071)\nThe previous formulations of `Ixx_eq_empty(_iff)` are basically a chaining of this formulation plus `not_lt` or `not_le`. But `not_lt` and `not_le` require `linear_order`. Removing them allows relaxing the typeclasses assumptions on `Ixx_eq_empty_iff` and slightly generalising `Ixx_eq_empty`.", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Icc_eq_empty", ["set"]], ["mod", "theorem", "Icc_eq_empty_iff", ["set"]], ["add", "theorem", "Icc_eq_empty_of_lt", ["set"]], ["mod", "theorem", "Ico_eq_empty", ["set"]], ["mod", "theorem", "Ico_eq_empty_iff", ["set"]], ["add", "theorem", "Ico_eq_empty_of_le", ["set"]], ["mod", "theorem", "Ico_self", ["set"]], ["mod", "theorem", "Ioc_eq_empty", ["set"]], ["add", "theorem", "Ioc_eq_empty_iff", ["set"]], ["add", "theorem", "Ioc_eq_empty_of_le", ["set"]], ["mod", "theorem", "Ioc_self", ["set"]], ["mod", "theorem", "Ioo_eq_empty", ["set"]], ["mod", "theorem", "Ioo_eq_empty_iff", ["set"]], ["add", "theorem", "Ioo_eq_empty_of_le", ["set"]], ["mod", "theorem", "Ioo_self", ["set"]]]}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/data/set/intervals/surj_on.lean", "newPath": "src/data/set/intervals/surj_on.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}]}, {"timestamp": 1626175416, "sha": "bb53a922", "message": "chore(data/mv_polynomial/basic): use `is_empty σ` instead of `¬nonempty σ` (#8277)\nSplit from #7826", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "C_surjective", ["mv_polynomial"]], ["del", "theorem", "C_surjective_fin_0", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}]}, {"timestamp": 1626170894, "sha": "dd9a0ea2", "message": "feat(geometry/manifold): add `charted_space` and `model_with_corners` for pi types (#6578)\nAlso use `set.image2` in the `charted_space` instance for `model_prod`.", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "def", "model_pi", []], ["add", "theorem", "pi_charted_space_chart_at", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "def", "pi", ["model_with_corners"]]]}]}, {"timestamp": 1626168495, "sha": "7bed785b", "message": "refactor(topology/metric/gromov_hausdorff_realized): speed up a proof (#8287)", "changes": [{"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1626162048, "sha": "f1f40840", "message": "feat(topology/algebra/ordered/basic): basis for the neighbourhoods of `top`/`bot` (#8283)", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "nhds_bot_basis", []], ["add", "theorem", "nhds_top_basis", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "nhds_top_basis", ["ennreal"]], ["add", "theorem", "nhds_zero_basis", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "nhds_zero", ["nnreal"]], ["add", "theorem", "nhds_zero_basis", ["nnreal"]]]}]}, {"timestamp": 1626160150, "sha": "f302c979", "message": "feat(measure_theory/l2_space): the inner product of indicator_const_Lp and a function is the set_integral (#8229)", "changes": [{"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_Lp_of_measure_ne_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l2_space.lean", "newPath": "src/measure_theory/l2_space.lean", "changes": [["add", "theorem", "inner_indicator_const_Lp_eq_inner_set_integral", ["measure_theory", "L2"]], ["add", "theorem", "inner_indicator_const_Lp_eq_set_integral_inner", ["measure_theory", "L2"]], ["add", "theorem", "inner_indicator_const_Lp_one", ["measure_theory", "L2"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "integral_eq_zero_of_forall_integral_inner_eq_zero", []], ["add", "theorem", "integral_inner", []]]}]}, {"timestamp": 1626129975, "sha": "9dfb9a6e", "message": "chore(topology/topological_fiber_bundle): renaming (#8270)\nIn this PR I changed\n- `prebundle_trivialization` to `topological_fiber_bundle.pretrivialization`\n- `bundle_trivialization` to `topological_fiber_bundle.trivialization`\nso to make names consistent with `vector_bundle`. I also changed the name of the file for consistency.", "changes": [{"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/fiber_bundle.lean", "changes": [["del", "theorem", "apply_symm_apply'", ["bundle_trivialization"]], ["del", "theorem", "apply_symm_apply", ["bundle_trivialization"]], ["del", "theorem", "coe_coe", ["bundle_trivialization"]], ["del", "theorem", "coe_fst'", ["bundle_trivialization"]], ["del", "theorem", "coe_fst", ["bundle_trivialization"]], ["del", "theorem", "coe_fst_eventually_eq_proj'", ["bundle_trivialization"]], ["del", "theorem", "coe_fst_eventually_eq_proj", ["bundle_trivialization"]], ["del", "theorem", "coe_mk", ["bundle_trivialization"]], ["del", "def", "comp_homeomorph", ["bundle_trivialization"]], ["del", "theorem", "continuous_at_proj", ["bundle_trivialization"]], ["del", "theorem", "continuous_coord_change", ["bundle_trivialization"]], ["del", "def", "coord_change", ["bundle_trivialization"]], ["del", "theorem", "coord_change_apply_snd", ["bundle_trivialization"]], ["del", "theorem", "coord_change_coord_change", ["bundle_trivialization"]], ["del", "def", "coord_change_homeomorph", ["bundle_trivialization"]], ["del", "theorem", "coord_change_homeomorph_coe", ["bundle_trivialization"]], ["del", "theorem", "coord_change_same", ["bundle_trivialization"]], ["del", "theorem", "coord_change_same_apply", ["bundle_trivialization"]], ["del", "theorem", "frontier_preimage", ["bundle_trivialization"]], ["del", "theorem", "is_image_preimage_prod", ["bundle_trivialization"]], ["del", "theorem", "map_proj_nhds", ["bundle_trivialization"]], ["del", "theorem", "map_target", ["bundle_trivialization"]], ["del", "theorem", "mem_source", ["bundle_trivialization"]], ["del", "theorem", "mem_target", ["bundle_trivialization"]], ["del", "theorem", "mk_coord_change", ["bundle_trivialization"]], ["del", "theorem", "mk_proj_snd'", ["bundle_trivialization"]], ["del", "theorem", "mk_proj_snd", ["bundle_trivialization"]], ["del", "theorem", "proj_symm_apply'", ["bundle_trivialization"]], ["del", "theorem", "proj_symm_apply", ["bundle_trivialization"]], ["del", "def", "restr_open", ["bundle_trivialization"]], ["del", "theorem", "source_inter_preimage_target_inter", ["bundle_trivialization"]], ["del", "theorem", "symm_apply_mk_proj", ["bundle_trivialization"]], ["del", "def", "to_prebundle_trivialization", ["bundle_trivialization"]], ["del", "def", "trans_fiber_homeomorph", ["bundle_trivialization"]], ["del", "theorem", "trans_fiber_homeomorph_apply", ["bundle_trivialization"]], ["del", "structure", "bundle_trivialization", []], ["mod", "theorem", "exists_trivialization_Icc_subset", ["is_topological_fiber_bundle"]], ["del", "theorem", "apply_symm_apply'", ["prebundle_trivialization"]], ["del", "theorem", "apply_symm_apply", ["prebundle_trivialization"]], ["del", "theorem", "coe_coe", ["prebundle_trivialization"]], ["del", "theorem", "coe_fst'", ["prebundle_trivialization"]], ["del", "theorem", "coe_fst", ["prebundle_trivialization"]], ["del", "theorem", "mem_source", ["prebundle_trivialization"]], ["del", "theorem", "mem_target", ["prebundle_trivialization"]], ["del", "theorem", "mk_proj_snd'", ["prebundle_trivialization"]], ["del", "theorem", "mk_proj_snd", ["prebundle_trivialization"]], ["del", "theorem", "preimage_symm_proj_base_set", ["prebundle_trivialization"]], ["del", "theorem", "preimage_symm_proj_inter", ["prebundle_trivialization"]], ["del", "theorem", "proj_symm_apply'", ["prebundle_trivialization"]], ["del", "theorem", "proj_symm_apply", ["prebundle_trivialization"]], ["del", "def", "set_symm", ["prebundle_trivialization"]], ["del", "theorem", "symm_apply_mk_proj", ["prebundle_trivialization"]], ["del", "structure", "prebundle_trivialization", []], ["add", "theorem", "apply_symm_apply'", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "apply_symm_apply", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "coe_coe", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "coe_fst'", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "coe_fst", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "mem_source", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "mem_target", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "mk_proj_snd'", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "mk_proj_snd", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "preimage_symm_proj_base_set", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "preimage_symm_proj_inter", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "proj_symm_apply'", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "proj_symm_apply", ["topological_fiber_bundle", "pretrivialization"]], ["add", "def", "set_symm", ["topological_fiber_bundle", "pretrivialization"]], ["add", "theorem", "symm_apply_mk_proj", ["topological_fiber_bundle", "pretrivialization"]], ["add", "structure", "pretrivialization", ["topological_fiber_bundle"]], ["add", "theorem", "apply_symm_apply'", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "apply_symm_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coe_coe", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coe_fst'", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coe_fst", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coe_fst_eventually_eq_proj'", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coe_fst_eventually_eq_proj", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coe_mk", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "comp_homeomorph", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "continuous_at_proj", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "continuous_coord_change", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "coord_change", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coord_change_apply_snd", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coord_change_coord_change", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "coord_change_homeomorph", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coord_change_homeomorph_coe", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coord_change_same", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "coord_change_same_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "frontier_preimage", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "is_image_preimage_prod", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "map_proj_nhds", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "map_target", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "mem_source", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "mem_target", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "mk_coord_change", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "mk_proj_snd'", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "mk_proj_snd", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "proj_symm_apply'", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "proj_symm_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "restr_open", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "source_inter_preimage_target_inter", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "symm_apply_mk_proj", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "to_pretrivialization", ["topological_fiber_bundle", "trivialization"]], ["add", "def", "trans_fiber_homeomorph", ["topological_fiber_bundle", "trivialization"]], ["add", "theorem", "trans_fiber_homeomorph_apply", ["topological_fiber_bundle", "trivialization"]], ["add", "structure", "trivialization", ["topological_fiber_bundle"]], ["mod", "def", "local_triv", ["topological_fiber_bundle_core"]], ["mod", "def", "local_triv_at", ["topological_fiber_bundle_core"]], ["del", "def", "bundle_trivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "continuous_symm_pretrivialization_at", ["topological_fiber_prebundle"]], ["del", "theorem", "continuous_symm_trivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "is_open_source_pretrivialization_at", ["topological_fiber_prebundle"]], ["del", "theorem", "is_open_source_trivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "is_open_target_pretrivialization_at_inter", ["topological_fiber_prebundle"]], ["del", "theorem", "is_open_target_trivialization_at_inter", ["topological_fiber_prebundle"]], ["add", "def", "trivialization_at", ["topological_fiber_prebundle"]]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["del", "def", "trivial_bundle_trivialization", ["topological_vector_bundle"]], ["add", "def", "trivialization", ["topological_vector_bundle", "trivial_topological_vector_bundle"]], ["mod", "theorem", "coe_fst", ["topological_vector_bundle", "trivialization"]], ["mod", "def", "continuous_linear_equiv_at", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "continuous_linear_equiv_at_apply'", ["topological_vector_bundle", "trivialization"]], ["mod", "theorem", "continuous_linear_equiv_at_apply", ["topological_vector_bundle", "trivialization"]], ["mod", "structure", "trivialization", ["topological_vector_bundle"]]]}]}, {"timestamp": 1626129974, "sha": "cde57482", "message": "feat(measure_theory/measure_space): add `finite_measure_sub` instance (#8239)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "sub_le", ["measure_theory", "measure"]]]}]}, {"timestamp": 1626124234, "sha": "5ea9a073", "message": "feat(measure_theory/integration): add `lintegral_union` (#8238)", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_union", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "cond", ["measurable_set"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_bool", []]]}]}, {"timestamp": 1626124233, "sha": "4cd6179c", "message": "refactor(measure_theory/simple_func_dense): generalize L1.simple_func.dense_embedding to Lp (#8209)\nThis PR generalizes all the more abstract results about approximation by simple functions, from L1 to Lp (`p ≠ ∞`). Notably, this includes \n* the definition `Lp.simple_func`, the `add_subgroup` of `Lp` of classes containing a simple representative\n* the coercion `Lp.simple_func.coe_to_Lp` from this subgroup to `Lp`, as a continuous linear map\n* `Lp.simple_func.dense_embedding`, this subgroup is dense in `Lp`\n* `mem_ℒp.induction`, to prove a predicate holds for `mem_ℒp` functions it suffices to prove that it behaves appropriately on `mem_ℒp` simple functions\nMany lemmas get renamed from `L1.simple_func.*` to `Lp.simple_func.*`, and have hypotheses or conclusions changed from `integrable` to `mem_ℒp`.\nI take the opportunity to streamline the construction by deleting some instances which typeclass inference can find, and some lemmas which are re-statements of more general results about `add_subgroup`s in normed groups. In my opinion, this extra material obscures the structure of the construction. Here is a list of the definitions deleted:\n- `instance : has_coe (α →₁ₛ[μ] E) (α →₁[μ] E)`\n- `instance : has_coe_to_fun (α →₁ₛ[μ] E)`\n- `instance : inhabited (α →₁ₛ[μ] E)`\n- `protected def normed_group : normed_group (α →₁ₛ[μ] E)`\nand lemmas deleted (in the `L1.simple_func` namespace unless specified):\n- `simple_func.tendsto_approx_on_univ_L1`\n- `eq`\n- `eq_iff`\n- `eq_iff'`\n- `coe_zero`\n- `coe_add`\n- `coe_neg`\n- `coe_sub`\n- `edist_eq`\n- `dist_eq`\n- `norm_eq`\n- `lintegral_edist_to_simple_func_lt_top`\n- `dist_to_simple_func`", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "coe_div", ["subgroup"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integrable_on.lean", "changes": [["del", "theorem", "integrable_add", ["measure_theory"]], ["add", "theorem", "integrable_add_of_disjoint", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "indicator", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_add_of_disjoint", ["measure_theory"]], ["add", "theorem", "snorm_indicator_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["del", "theorem", "add_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_add", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_coe", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_neg", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_smul", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_sub", ["measure_theory", "L1", "simple_func"]], ["del", "def", "coe_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_zero", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "dist_eq", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "dist_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "edist_eq", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "lintegral_edist_to_simple_func_lt_top", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "neg_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "norm_eq", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "norm_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "norm_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "smul_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "sub_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "def", "to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_add", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_eq_mk", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_eq_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_neg", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_smul", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_sub", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_zero", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_Lp_one_eq_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "def", "to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_simple_func_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "zero_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "def", "simple_func", ["measure_theory", "L1"]], ["add", "theorem", "add_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_coe", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "coe_smul", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "coe_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "neg_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "norm_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "norm_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "smul_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "sub_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_add", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_eq_mk", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_eq_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_neg", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_smul", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_sub", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_Lp_zero", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "to_simple_func_to_Lp", ["measure_theory", "Lp", "simple_func"]], ["add", "theorem", "zero_to_simple_func", ["measure_theory", "Lp", "simple_func"]], ["add", "def", "simple_func", ["measure_theory", "Lp"]], ["add", "theorem", "induction", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "tendsto_approx_on_univ_L1", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1626116079, "sha": "a9cb722c", "message": "docs(data/rel): add module docstring (#8248)", "changes": [{"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": [["mod", "def", "rel", []]]}]}, {"timestamp": 1626110166, "sha": "a2b00f3c", "message": "feat(algebra/opposites): functoriality of the opposite monoid (#8254)\nA hom `α →* β` can equivalently be viewed as a hom `αᵒᵖ →* βᵒᵖ`.\nSplit off from #7395", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "def", "op", ["add_monoid_hom"]], ["add", "def", "unop", ["add_monoid_hom"]], ["add", "def", "op", ["monoid_hom"]], ["add", "def", "unop", ["monoid_hom"]], ["add", "def", "op", ["ring_hom"]], ["add", "def", "unop", ["ring_hom"]]]}]}, {"timestamp": 1626105829, "sha": "6fa678fb", "message": "feat(ring_theory): `coe_submodule S (⊤ : ideal R) = 1` (#8272)\nA little `simp` lemma and its dependencies. As I was implementing it, I saw the definition of `has_one (submodule R A)` can be cleaned up a bit.", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "algebra_map_mem", ["submodule"]], ["add", "theorem", "mem_one", ["submodule"]], ["del", "theorem", "one_eq_map_top", ["submodule"]], ["add", "theorem", "one_eq_range", ["submodule"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coe_submodule_top", ["is_localization"]]]}]}, {"timestamp": 1626099734, "sha": "0a8e3eda", "message": "feat(data/equiv/fin): fin_order_iso_subtype (#8258)\nPromote a `fin n` into a larger `fin m`, as a subtype where the underlying\nvalues are retained. This is the `order_iso` version of `fin.cast_le`.", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "def", "cast_le_order_iso", ["fin"]]]}]}, {"timestamp": 1626099733, "sha": "66cc624c", "message": "feat(data/list/basic): more lemmas about permutations_aux2 (#8198)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "map_map_permutations_aux2", ["list"]], ["mod", "theorem", "map_permutations_aux2", ["list"]], ["add", "theorem", "permutations_aux2_comp_append", ["list"]], ["add", "theorem", "permutations_aux2_snd_eq", ["list"]]]}]}, {"timestamp": 1626094766, "sha": "695cb07b", "message": "feat({data,linear_algebra}/{finsupp,dfinsupp}): add `{add_submonoid,submodule}.[d]finsupp_sum_mem` (#8269)\nThese lemmas are trivial consequences of the finset lemmas, but having them avoids having to unfold `[d]finsupp.sum`.\n`dfinsupp_sum_add_hom_mem` is particularly useful because this one has some messy decidability arguments to eliminate.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "dfinsupp_sum_add_hom_mem", ["add_submonoid"]], ["add", "theorem", "dfinsupp_prod_mem", ["submonoid"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "finsupp_prod_mem", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "theorem", "dfinsupp_sum_add_hom_mem", ["submodule"]], ["add", "theorem", "dfinsupp_sum_mem", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "finsupp_sum_mem", ["submodule"]]]}]}, {"timestamp": 1626087272, "sha": "40ffaa5a", "message": "feat(linear_algebra/free_module): add module.free.resolution (#8231)\nAny module is a quotient of a free module. This is stated as surjectivity of `finsupp.total M M R id : (M →₀ R) →ₗ[R] M`.", "changes": [{"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "total_id_surjective", ["finsupp"]], ["add", "theorem", "total_range", ["finsupp"]], ["add", "theorem", "total_surjective", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": []}]}, {"timestamp": 1626073228, "sha": "e1c649d5", "message": "feat(category_theory/abelian): the five lemma (#8265)", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "theorem", "comp_coimage_π_eq_zero", ["category_theory", "abelian", "coimages"]], ["add", "theorem", "epi_fst_of_factor_thru_epi_mono_factorization", ["category_theory", "abelian"]], ["add", "theorem", "epi_fst_of_is_limit", ["category_theory", "abelian"]], ["add", "theorem", "epi_snd_of_is_limit", ["category_theory", "abelian"]], ["add", "theorem", "mono_inl_of_factor_thru_epi_mono_factorization", ["category_theory", "abelian"]], ["add", "theorem", "mono_inl_of_is_colimit", ["category_theory", "abelian"]], ["add", "theorem", "mono_inr_of_is_colimit", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": [["add", "theorem", "epi_of_epi_of_epi_of_mono", ["category_theory", "abelian"]], ["add", "theorem", "is_iso_of_is_iso_of_is_iso_of_is_iso_of_is_iso", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "def", "is_colimit_coimage", ["category_theory", "abelian"]], ["add", "def", "is_colimit_image", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "is_limit_of_factors", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "is_colimit_of_factors", ["category_theory", "limits", "pushout_cocone"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "comp_factor_thru_image_eq_zero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": [["add", "theorem", "factor_thru_kernel_subobject_comp_kernel_subobject_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1626070532, "sha": "92d0dd89", "message": "feat(category_theory/limits): monomorphisms from initial (#8099)\nDefines a class for categories where every morphism from initial is a monomorphism. If the category has a terminal object, this is equivalent to saying the unique morphism from initial to terminal is a monomorphism, so this is essentially a \"zero_le_one\" for categories. I'm happy to change the name of this class!\nThis axiom does not appear to have a common name, though it is (equivalent to) the second of Freyd's AT axioms: specifically it is a property shared by abelian categories and pretoposes. The main advantage to this class is that it is the precise condition required for the subobject lattice to have a bottom element, resolving the discussion here: https://github.com/leanprover-community/mathlib/pull/6278#discussion_r577702542\nI've also made some minor changes to later parts of this file, essentially de-duplicating arguments, and moving the `comparison` section up so that all the results about terminal objects in index categories of limits are together rather than split in two.", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["mod", "def", "cocone_of_diagram_terminal", ["category_theory", "limits"]], ["mod", "def", "colimit_of_diagram_terminal", ["category_theory", "limits"]], ["mod", "def", "colimit_of_terminal", ["category_theory", "limits"]], ["mod", "def", "cone_of_diagram_initial", ["category_theory", "limits"]], ["add", "theorem", "of_initial", ["category_theory", "limits", "initial_mono_class"]], ["add", "theorem", "of_is_initial", ["category_theory", "limits", "initial_mono_class"]], ["add", "theorem", "of_is_terminal", ["category_theory", "limits", "initial_mono_class"]], ["add", "theorem", "of_terminal", ["category_theory", "limits", "initial_mono_class"]], ["add", "theorem", "mono_from", ["category_theory", "limits", "is_initial"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "is_initial"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "is_terminal"]], ["mod", "def", "limit_of_diagram_initial", ["category_theory", "limits"]], ["mod", "def", "limit_of_initial", ["category_theory", "limits"]]]}]}, {"timestamp": 1626062506, "sha": "e22789ef", "message": "feat(algebra/big_operators/finprod): add a few lemmas (#8261)\n* add `finprod_eq_single` and `finsum_eq_single`;\n* add `finprod_induction` and `finsum_induction`;\n* add `single_le_finprod` and `single_le_finsum`;\n* add `one_le_finprod'` and `finsum_nonneg`.", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_eq_single", []], ["add", "theorem", "finprod_induction", []], ["add", "theorem", "one_le_finprod'", []], ["add", "theorem", "single_le_finprod", []]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "eq_up_iff_down_eq", ["plift"]]]}]}, {"timestamp": 1626054428, "sha": "d5c6f614", "message": "feat(algebra/group/hom): monoid_hom.injective_iff in iff form (#8259)\nInterpret the injectivity of a group hom as triviality of the kernel,\nin iff form. This helps make explicit simp lemmas about\nthe application of such homs,\nas in the added `extend_domain_eq_one_iff` lemma.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "injective_iff'", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "extend_domain_eq_one_iff", ["equiv", "perm"]]]}]}, {"timestamp": 1626036372, "sha": "24d7a8c3", "message": "feat(group_theory/quotient_group): lemmas for quotients involving `subgroup_of` (#8111)", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "def", "equiv_quotient_subgroup_of_of_eq", ["quotient_group"]], ["add", "def", "quotient_map_subgroup_of_of_le", ["quotient_group"]]]}]}, {"timestamp": 1626034403, "sha": "19beb127", "message": "feat(measure_theory/{lp_space,set_integral}): extend linear map lemmas from R to is_R_or_C (#8210)", "changes": [{"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "coe_fn_comp_Lp", ["continuous_linear_map"]], ["mod", "def", "comp_Lp", ["continuous_linear_map"]], ["mod", "def", "comp_LpL", ["continuous_linear_map"]], ["mod", "def", "comp_Lpₗ", ["continuous_linear_map"]], ["mod", "theorem", "norm_compLpL_le", ["continuous_linear_map"]], ["mod", "theorem", "norm_comp_Lp_le", ["continuous_linear_map"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "theorem", "continuous_integral_comp_L1", ["continuous_linear_map"]], ["mod", "theorem", "integral_comp_L1_comm", ["continuous_linear_map"]], ["mod", "theorem", "integral_comp_Lp", ["continuous_linear_map"]], ["mod", "theorem", "integral_comp_comm'", ["continuous_linear_map"]], ["mod", "theorem", "integral_comp_comm", ["continuous_linear_map"]], ["mod", "theorem", "integral_conj", []], ["add", "theorem", "integral_im", []], ["mod", "theorem", "integral_of_real", []], ["add", "theorem", "integral_re", []], ["mod", "theorem", "integral_comp_comm", ["linear_isometry"]]]}]}, {"timestamp": 1626031707, "sha": "6d200cb1", "message": "feat(analysis/normed_space/inner_product): Bessel's inequality (#8251)\nA proof both of Bessel's inequality and that the infinite sum defined by Bessel's inequality converges.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "inner_left_right_finset", ["orthonormal"]], ["add", "theorem", "inner_products_summable", ["orthonormal"]], ["add", "theorem", "sum_inner_products_le", ["orthonormal"]], ["add", "theorem", "tsum_inner_products_le", ["orthonormal"]]]}]}, {"timestamp": 1626014222, "sha": "bee165ab", "message": "feat(category_theory/abelian/opposite): Adds some op-related isomorphism for (co)kernels. (#8255)", "changes": [{"oldPath": "src/category_theory/abelian/opposite.lean", "newPath": "src/category_theory/abelian/opposite.lean", "changes": [["add", "def", "cokernel_op_op", ["category_theory"]], ["add", "def", "cokernel_op_unop", ["category_theory"]], ["add", "def", "cokernel_unop_op", ["category_theory"]], ["add", "def", "cokernel_unop_unop", ["category_theory"]], ["add", "def", "kernel_op_op", ["category_theory"]], ["add", "def", "kernel_op_unop", ["category_theory"]], ["add", "def", "kernel_unop_op", ["category_theory"]], ["add", "def", "kernel_unop_unop", ["category_theory"]]]}]}, {"timestamp": 1626009023, "sha": "1e62218f", "message": "feat(data/int/gcd): norm_num extension for gcd (#8053)\nImplements a `norm_num` plugin to evaluate terms like `nat.gcd 6 8 = 2`, `nat.coprime 127 128`, and so on for `{nat, int}.{gcd, lcm, coprime}`.", "changes": [{"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "int_gcd_helper'", ["tactic", "norm_num"]], ["add", "theorem", "int_gcd_helper", ["tactic", "norm_num"]], ["add", "theorem", "int_gcd_helper_neg_left", ["tactic", "norm_num"]], ["add", "theorem", "int_gcd_helper_neg_right", ["tactic", "norm_num"]], ["add", "theorem", "int_lcm_helper", ["tactic", "norm_num"]], ["add", "theorem", "int_lcm_helper_neg_left", ["tactic", "norm_num"]], ["add", "theorem", "int_lcm_helper_neg_right", ["tactic", "norm_num"]], ["add", "theorem", "nat_coprime_helper_1", ["tactic", "norm_num"]], ["add", "theorem", "nat_coprime_helper_2", ["tactic", "norm_num"]], ["add", "theorem", "nat_coprime_helper_zero_left", ["tactic", "norm_num"]], ["add", "theorem", "nat_coprime_helper_zero_right", ["tactic", "norm_num"]], ["add", "theorem", "nat_gcd_helper_1", ["tactic", "norm_num"]], ["add", "theorem", "nat_gcd_helper_2", ["tactic", "norm_num"]], ["add", "theorem", "nat_gcd_helper_dvd_left", ["tactic", "norm_num"]], ["add", "theorem", "nat_gcd_helper_dvd_right", ["tactic", "norm_num"]], ["add", "theorem", "nat_lcm_helper", ["tactic", "norm_num"]], ["add", "theorem", "nat_not_coprime_helper", ["tactic", "norm_num"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "not_coprime_zero_zero", ["nat"]]]}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": null, "newPath": "test/norm_num_ext.lean", "changes": []}]}, {"timestamp": 1626000249, "sha": "14f324be", "message": "chore(data/set/basic): remove set.decidable_mem (#8240)\nThe only purpose of this instance was to enable the spelling `[decidable_pred s]` when what is actually needed is `decidable_pred (∈ s)`, which is a bad idea.\nThis is a follow-up to #8211.\nOnly two proofs needed this instance, and both were using completely the wrong lemmas anyway.", "changes": [{"oldPath": "src/data/equiv/fintype.lean", "newPath": "src/data/equiv/fintype.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}]}, {"timestamp": 1625969780, "sha": "850928d4", "message": "chore(scripts): update nolints.txt (#8257)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625967633, "sha": "e627394d", "message": "feat(analysis/special_functions): limit of (1+1/x)^x (#8243)\nResolves https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/e.20as.20limit.20of.20.281.2B1.2Fn.29.5En.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "tendsto_mul_log_one_plus_div_at_top", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "tendsto_one_plus_div_pow_exp", []], ["add", "theorem", "tendsto_one_plus_div_rpow_exp", []]]}]}, {"timestamp": 1625949614, "sha": "90d8d468", "message": "feat(category_theory/monad): monad forget is monadic (#8161)\ncc @adamtopaz \nwip since I need to dualise", "changes": [{"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/lifting.lean", "newPath": "src/category_theory/adjunction/lifting.lean", "changes": []}, {"oldPath": "src/category_theory/connected_components.lean", "newPath": "src/category_theory/connected_components.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": [["add", "def", "adj_to_comonad_iso", ["category_theory", "adjunction"]], ["add", "def", "adj_to_monad_iso", ["category_theory", "adjunction"]], ["mod", "def", "to_comonad", ["category_theory", "adjunction"]], ["mod", "def", "to_monad", ["category_theory", "adjunction"]], ["mod", "def", "comparison", ["category_theory", "comonad"]], ["add", "def", "comparison_forget", ["category_theory", "comonad"]], ["add", "theorem", "left_comparison", ["category_theory", "comonad"]], ["del", "def", "comparison_forget", ["category_theory"]], ["mod", "def", "comparison", ["category_theory", "monad"]], ["mod", "def", "comparison_forget", ["category_theory", "monad"]], ["add", "theorem", "left_comparison", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["mod", "def", "adj", ["category_theory", "comonad"]], ["add", "theorem", "of_left_adjoint_forget", ["category_theory", "comonad"]], ["add", "theorem", "right_adjoint_forget", ["category_theory", "comonad"]], ["add", "theorem", "left_adjoint_forget", ["category_theory", "monad"]], ["add", "theorem", "of_right_adjoint_forget", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": [["add", "def", "mk", ["category_theory", "comonad_iso"]], ["add", "theorem", "comonad_to_functor_map_iso_comonad_iso_mk", ["category_theory"]], ["add", "def", "mk", ["category_theory", "monad_iso"]], ["add", "theorem", "monad_to_functor_map_iso_monad_iso_mk", ["category_theory"]]]}, {"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}]}, {"timestamp": 1625942290, "sha": "8b4628e4", "message": "feat(data/fintype/basic): induction principle for finite types (#8158)\nThis lets us prove things about finite types by induction, analogously to proving things about natural numbers by induction. Here `pempty` plays the role of `0` and `option` plays the role of `nat.succ`. We need an extra hypothesis that our statement is invariant under equivalence of types. Used in #8019.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "induction_empty_option", ["fintype"]], ["add", "def", "trunc_rec_empty_option", ["fintype"]]]}]}, {"timestamp": 1625904100, "sha": "aa78feba", "message": "feat(category_theory/is_connected): constant functor is full (#8233)\nShows the constant functor on a connected category is full.\nAlso golfs a later proof slightly.", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}]}, {"timestamp": 1625904099, "sha": "b1806d19", "message": "chore(analysis/normed_space/banach): speed up the proof (#8230)\nThis proof has timed out in multiple refactor PRs I've made. This splits out an auxiliary definition.\nThe new definition takes about 3.5s to elaborate, and the two lemmas are <500ms each.\nThe old lemma took 45s.", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "coe_of_bijective", ["continuous_linear_equiv"]], ["add", "theorem", "range_eq_map_coprod_subtypeL_equiv_of_is_compl", ["continuous_linear_map"]]]}]}, {"timestamp": 1625901269, "sha": "9e0462c0", "message": "feat(topology/algebra/infinite_sum): summable_empty (#8241)\nEvery function over an empty type is summable.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_empty", []], ["add", "theorem", "summable_empty", []], ["add", "theorem", "tsum_empty", []]]}]}, {"timestamp": 1625890049, "sha": "e18b3a89", "message": "feat(category_theory/limits): transfer limit creation along diagram iso (#8237)", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "def", "creates_colimit_of_iso_diagram", ["category_theory"]], ["add", "def", "creates_limit_of_iso_diagram", ["category_theory"]]]}]}, {"timestamp": 1625887933, "sha": "d0e09dde", "message": "feat(linear_algebra/matrix/nonsingular_inverse): more lemmas (#8216)\nadd more defs and lemmas", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["mod", "def", "det_invertible_of_left_inverse", ["matrix"]], ["mod", "def", "det_invertible_of_right_inverse", ["matrix"]], ["add", "theorem", "inv_eq_left_inv", ["matrix"]], ["add", "theorem", "inv_eq_nonsing_inv_of_invertible", ["matrix"]], ["add", "theorem", "inv_eq_right_inv", ["matrix"]], ["add", "theorem", "inv_mul_of_invertible", ["matrix"]], ["add", "def", "invertible_of_left_inverse", ["matrix"]], ["add", "def", "invertible_of_right_inverse", ["matrix"]], ["add", "theorem", "is_unit_det_of_invertible", ["matrix"]], ["mod", "theorem", "is_unit_det_of_left_inverse", ["matrix"]], ["mod", "theorem", "is_unit_det_of_right_inverse", ["matrix"]], ["add", "theorem", "left_inv_eq_left_inv", ["matrix"]], ["add", "theorem", "mul_inv_of_invertible", ["matrix"]], ["mod", "theorem", "nonsing_inv_left_right", ["matrix"]], ["mod", "theorem", "nonsing_inv_right_left", ["matrix"]], ["add", "theorem", "right_inv_eq_left_inv", ["matrix"]], ["add", "theorem", "right_inv_eq_right_inv", ["matrix"]]]}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": []}]}, {"timestamp": 1625883222, "sha": "b52c1f0c", "message": "chore(scripts): update nolints.txt (#8245)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625868696, "sha": "70320f74", "message": "feat(category_theory/category/Kleisli): Fix lint errors (#8244)\nFixes some lint errors for this file: unused arguments, module doc, inhabited instances", "changes": [{"oldPath": "src/category_theory/category/Kleisli.lean", "newPath": "src/category_theory/category/Kleisli.lean", "changes": [["mod", "theorem", "comp_def", ["category_theory", "Kleisli"]], ["mod", "theorem", "id_def", ["category_theory", "Kleisli"]], ["mod", "def", "mk", ["category_theory", "Kleisli"]], ["mod", "def", "Kleisli", ["category_theory"]]]}]}, {"timestamp": 1625857253, "sha": "a444e81f", "message": "feat(measure_theory/borel_space): a preconnected set is measurable (#8044)\nIn a conditionally complete linear order equipped with the order topology and the corresponding borel σ-algebra, any preconnected set is measurable.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_of_forall_between_eq_endpoints", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_set", ["is_preconnected"]], ["mod", "theorem", "measurable_set_lt'", []], ["mod", "theorem", "measurable_set_lt", []], ["add", "theorem", "measurable_set", ["set", "ord_connected"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "ord_connected", ["is_preconnected"]], ["add", "theorem", "is_preconnected", ["set", "ord_connected"]]]}]}, {"timestamp": 1625843946, "sha": "bcd61b1d", "message": "feat(algebra/category): provide right adjoint instances for forget (#8235)\nAlso adds some universe variables since they weren't inferred sensibly.", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["mod", "def", "adj", ["Algebra"]], ["mod", "def", "free", ["Algebra"]], ["mod", "def", "of", ["Algebra"]], ["mod", "def", "of_self_iso", ["Algebra"]]]}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": [["mod", "def", "adj", ["CommRing"]], ["mod", "def", "free", ["CommRing"]]]}, {"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/adjunctions.lean", "newPath": "src/algebra/category/Mon/adjunctions.lean", "changes": [["add", "def", "adj", []], ["add", "def", "free", []]]}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}]}, {"timestamp": 1625837811, "sha": "ee018175", "message": "chore(data/set/basic): use `decidable_pred (∈ s)` instead of `decidable_pred s`. (#8211)\nThe latter exploits the fact that sets are functions to Prop, and is an annoying form as lemmas are never stated about it.\nIn future we should consider removing the `set.decidable_mem` instance which encourages this misuse.\nMaking this change reveals a collection of pointless decidable arguments requiring that finset membership be decidable; something which is always true anyway.\nTwo proofs in `data/pequiv` caused a crash inside the C++ portion of the `finish` tactic; it was easier to just write the simple proofs manually than to debug the C++ code.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "def", "curry_fin_finset", ["continuous_multilinear_map"]]]}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "insert_apply_left", ["equiv", "set"]], ["mod", "theorem", "insert_apply_right", ["equiv", "set"]], ["mod", "theorem", "insert_symm_apply_inl", ["equiv", "set"]], ["mod", "theorem", "insert_symm_apply_inr", ["equiv", "set"]], ["mod", "theorem", "sum_compl_apply_inl", ["equiv", "set"]], ["mod", "theorem", "sum_compl_apply_inr", ["equiv", "set"]], ["mod", "theorem", "sum_compl_symm_apply", ["equiv", "set"]], ["mod", "theorem", "sum_compl_symm_apply_of_mem", ["equiv", "set"]], ["mod", "theorem", "sum_compl_symm_apply_of_not_mem", ["equiv", "set"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": [["mod", "def", "denumerable", ["nat", "subtype"]], ["mod", "def", "of_nat", ["nat", "subtype"]]]}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": [["mod", "def", "decidable_range_encode", ["encodable"]]]}, {"oldPath": "src/data/fintype/sort.lean", "newPath": "src/data/fintype/sort.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["mod", "theorem", "mem_of_set_iff", ["pequiv"]], ["mod", "theorem", "mem_of_set_self_iff", ["pequiv"]], ["mod", "def", "of_set", ["pequiv"]], ["mod", "theorem", "of_set_eq_refl", ["pequiv"]], ["mod", "theorem", "of_set_eq_some_iff", ["pequiv"]], ["mod", "theorem", "of_set_eq_some_self_iff", ["pequiv"]]]}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["mod", "def", "eval_opt", ["pfun"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "def", "fintype_subset", ["set"]]]}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["mod", "def", "curry_fin_finset", ["multilinear_map"]], ["mod", "theorem", "curry_fin_finset_apply", ["multilinear_map"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "piecewise", ["measurable"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["mod", "theorem", "map_subtype_val_restriction", ["free_comm_ring"]], ["mod", "def", "restriction", ["free_comm_ring"]]]}]}, {"timestamp": 1625837809, "sha": "a312e7e2", "message": "chore(topology/topological_fiber_bundle): reorganizing the code (#7938)\nWhat I do here:\n - Get rid of `local_triv`: it is not needed.\n - Change `local_triv_ext` to `local_triv`\n - Rename `local_triv'` as `local_triv_as_local_equiv` (name suggested by @sgouezel)\n - Improve type class inference by getting rid of `dsimp` in instances\n - Move results about `bundle` that do not need the topology in an appropriate file\n - Update docs accordingly.\nNothing else.", "changes": [{"oldPath": null, "newPath": "src/data/bundle.lean", "changes": [["add", "theorem", "coe_fst", ["bundle"]], ["add", "theorem", "coe_snd_map_apply", ["bundle"]], ["add", "theorem", "coe_snd_map_smul", ["bundle"]], ["add", "def", "proj", ["bundle"]], ["add", "theorem", "to_total_space_coe", ["bundle"]], ["add", "def", "total_space", ["bundle"]], ["add", "def", "total_space_mk", ["bundle"]], ["add", "def", "proj_snd", ["bundle", "trivial"]], ["add", "def", "trivial", ["bundle"]]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "comp_continuous_within_at", ["continuous_at"]], ["add", "theorem", "fst", ["continuous_within_at"]], ["add", "theorem", "snd", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_prod_iff", []]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["del", "theorem", "coe_fst", ["bundle"]], ["del", "theorem", "coe_snd_map_apply", ["bundle"]], ["del", "theorem", "coe_snd_map_smul", ["bundle"]], ["del", "def", "proj", ["bundle"]], ["del", "theorem", "to_total_space_coe", ["bundle"]], ["del", "def", "total_space", ["bundle"]], ["del", "def", "total_space_mk", ["bundle"]], ["del", "def", "proj_snd", ["bundle", "trivial"]], ["del", "def", "trivial", ["bundle"]], ["add", "theorem", "source_inter_preimage_target_inter", ["bundle_trivialization"]], ["mod", "theorem", "base_set_at", ["topological_fiber_bundle_core"]], ["del", "def", "local_triv'", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_apply", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_coe", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_source", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_symm_apply", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_target", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_trans", ["topological_fiber_bundle_core"]], ["mod", "def", "local_triv", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_apply", ["topological_fiber_bundle_core"]], ["add", "def", "local_triv_as_local_equiv", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_as_local_equiv_apply", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_as_local_equiv_coe", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_as_local_equiv_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_as_local_equiv_symm", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_as_local_equiv_target", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_as_local_equiv_trans", ["topological_fiber_bundle_core"]], ["add", "def", "local_triv_at", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_at_def", ["topological_fiber_bundle_core"]], ["del", "def", "local_triv_at_ext", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_at_ext_def", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_coe", ["topological_fiber_bundle_core"]], ["del", "def", "local_triv_ext", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_ext_apply", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_ext_symm_apply", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_ext_symm_fst", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_source", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_symm", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_symm_fst", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_target", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_trans", ["topological_fiber_bundle_core"]], ["del", "theorem", "mem_local_triv'_source", ["topological_fiber_bundle_core"]], ["del", "theorem", "mem_local_triv'_target", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_as_local_equiv_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_as_local_equiv_target", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_at_base_set", ["topological_fiber_bundle_core"]], ["del", "theorem", "mem_local_triv_at_ext_base_set", ["topological_fiber_bundle_core"]], ["del", "theorem", "mem_local_triv_ext_source", ["topological_fiber_bundle_core"]], ["del", "theorem", "mem_local_triv_ext_target", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_source", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_target", ["topological_fiber_bundle_core"]], ["mod", "theorem", "open_source'", ["topological_fiber_bundle_core"]], ["del", "theorem", "open_target'", ["topological_fiber_bundle_core"]]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": []}]}, {"timestamp": 1625835166, "sha": "abde2102", "message": "feat(analysis/complex/isometry): restate result more abstractly (#7908)\nDefine `rotation` as a group homomorphism from the circle to the isometry group of `ℂ`. State the classification of isometries of `ℂ` more abstractly, using this construction. Also golf some proofs.", "changes": [{"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": [["del", "theorem", "abs_apply_sub_one_eq_abs_sub_one", ["linear_isometry"]], ["mod", "theorem", "linear_isometry_complex", []], ["mod", "theorem", "linear_isometry_complex_aux", []], ["add", "def", "rotation", []], ["add", "theorem", "rotation_apply", []], ["add", "def", "rotation_aux", []]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_to_continuous_linear_equiv", ["linear_isometry_equiv"]], ["add", "def", "to_continuous_linear_equiv", ["linear_isometry_equiv"]]]}]}, {"timestamp": 1625823767, "sha": "11348653", "message": "feat(category_theory/limits): finite products from finite limits (#8236)\nAdds instances for finite products from finite limits.", "changes": [{"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": [["del", "theorem", "has_finite_coproducts_of_has_finite_colimits", ["category_theory", "limits"]], ["del", "theorem", "has_finite_products_of_has_finite_limits", ["category_theory", "limits"]]]}]}, {"timestamp": 1625785526, "sha": "e46447be", "message": "feat(measure_theory/measure_space): prob_le_one (#7913)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "prob_add_prob_compl", ["measure_theory"]], ["add", "theorem", "prob_le_one", ["measure_theory"]]]}]}, {"timestamp": 1625770638, "sha": "9d40a598", "message": "feat(group_theory,linear_algebra): third isomorphism theorem for groups and modules (#8203)\nThis PR proves the third isomorphism theorem for (additive) groups and modules, and also adds a few `simp` lemmas that I needed.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "map_coe", ["quotient_group"]], ["add", "theorem", "map_mk'", ["quotient_group"]], ["add", "def", "quotient_quotient_equiv_quotient", ["quotient_group"]], ["add", "def", "quotient_quotient_equiv_quotient_aux", ["quotient_group"]], ["add", "theorem", "quotient_quotient_equiv_quotient_aux_coe", ["quotient_group"]], ["add", "theorem", "quotient_quotient_equiv_quotient_aux_coe_coe", ["quotient_group"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "quotient_quotient_equiv_quotient", ["submodule"]], ["add", "def", "quotient_quotient_equiv_quotient_aux", ["submodule"]], ["add", "theorem", "quotient_quotient_equiv_quotient_aux_mk", ["submodule"]], ["add", "theorem", "quotient_quotient_equiv_quotient_aux_mk_mk", ["submodule"]]]}]}, {"timestamp": 1625764442, "sha": "a7b660e4", "message": "feat(linear_algebra/prod): add coprod_map_prod (#8220)\nThis also adds `submodule.coe_sup` and `set.mem_finset_prod`. The latter was intended to be used to show `submodule.coe_supr`, but I didn't really need that and it was hard to prove.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "finset_prod_mem_finset_prod", ["set"]], ["add", "theorem", "finset_prod_subset_finset_prod", ["set"]], ["add", "theorem", "mem_finset_prod", ["set"]], ["add", "theorem", "mem_fintype_prod", ["set"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_sup", ["submodule"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "coprod_map_prod", ["linear_map"]]]}]}, {"timestamp": 1625762472, "sha": "13486fe5", "message": "chore(measure_theory/measure_space): untangle `probability_measure`, `finite_measure`, and `has_no_atoms` (#8222)\nThis only moves existing lemmas around. Putting all the instance together up front seems to result in lemmas being added in adhoc places - by adding `section`s, this should guide future contributions.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "restrict_singleton'", ["measure_theory", "measure"]]]}]}, {"timestamp": 1625755604, "sha": "b10062e7", "message": "feat(data/finset/noncomm_prod): noncomm_prod_union_of_disjoint (#8169)", "changes": [{"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": [["add", "theorem", "noncomm_prod_union_of_disjoint", ["finset"]]]}]}, {"timestamp": 1625749614, "sha": "a4b0b48b", "message": "feat(data/nat/basic): lt_one_iff (#8224)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "lt_one_iff", ["nat"]]]}]}, {"timestamp": 1625743363, "sha": "fb22ae33", "message": "refactor(order/rel_iso): move statements about intervals to data/set/intervals (#8150)\nThis means that we can talk about `rel_iso` without needing to transitively import `ordered_group`s\nThis PR takes advantage of this to define `order_iso.mul_(left|right)[']` to mirror `equiv.mul_(left|right)[']`.", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "def", "mul_left'", ["order_iso"]], ["add", "def", "mul_right'", ["order_iso"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "def", "mul_left", ["order_iso"]], ["add", "def", "mul_right", ["order_iso"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "def", "Ici_bot", ["order_iso"]], ["add", "def", "Iic_top", ["order_iso"]], ["add", "theorem", "preimage_Icc", ["order_iso"]], ["add", "theorem", "preimage_Ici", ["order_iso"]], ["add", "theorem", "preimage_Ico", ["order_iso"]], ["add", "theorem", "preimage_Iic", ["order_iso"]], ["add", "theorem", "preimage_Iio", ["order_iso"]], ["add", "theorem", "preimage_Ioc", ["order_iso"]], ["add", "theorem", "preimage_Ioi", ["order_iso"]], ["add", "theorem", "preimage_Ioo", ["order_iso"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["del", "def", "Ici_bot", ["order_iso"]], ["del", "def", "Iic_top", ["order_iso"]], ["del", "theorem", "preimage_Icc", ["order_iso"]], ["del", "theorem", "preimage_Ici", ["order_iso"]], ["del", "theorem", "preimage_Ico", ["order_iso"]], ["del", "theorem", "preimage_Iic", ["order_iso"]], ["del", "theorem", "preimage_Iio", ["order_iso"]], ["del", "theorem", "preimage_Ioc", ["order_iso"]], ["del", "theorem", "preimage_Ioi", ["order_iso"]], ["del", "theorem", "preimage_Ioo", ["order_iso"]]]}]}, {"timestamp": 1625736474, "sha": "03e2cbd0", "message": "chore(group_theory/perm/support): support_pow_le over nat (#8225)\nPreviously, both `support_pow_le` and `support_gpow_le` had the\npower as an `int`. Now we properly differentiate the two and avoid\nslow defeq checks.", "changes": [{"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "is_cycle_of_is_cycle_gpow", ["equiv", "perm"]], ["del", "theorem", "is_cycle_of_is_cycle_pow", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": [["mod", "theorem", "support_pow_le", ["equiv", "perm"]]]}]}, {"timestamp": 1625709730, "sha": "0ee238cf", "message": "chore(scripts): update nolints.txt (#8227)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625691025, "sha": "70aef28e", "message": "feat(group_theory/perm/list): concrete permutations from a list (#7451)", "changes": [{"oldPath": null, "newPath": "src/group_theory/perm/list.lean", "changes": [["add", "def", "form_perm", ["list"]], ["add", "theorem", "form_perm_apply_head", ["list"]], ["add", "theorem", "form_perm_apply_last", ["list"]], ["add", "theorem", "form_perm_apply_lt", ["list"]], ["add", "theorem", "form_perm_apply_mem_of_mem", ["list"]], ["add", "theorem", "form_perm_apply_nth_le", ["list"]], ["add", "theorem", "form_perm_apply_nth_le_length", ["list"]], ["add", "theorem", "form_perm_apply_nth_le_zero", ["list"]], ["add", "theorem", "form_perm_apply_of_not_mem", ["list"]], ["add", "theorem", "form_perm_cons_concat_apply_last", ["list"]], ["add", "theorem", "form_perm_cons_cons", ["list"]], ["add", "theorem", "form_perm_eq_head_iff_eq_last", ["list"]], ["add", "theorem", "form_perm_eq_of_is_rotated", ["list"]], ["add", "theorem", "form_perm_ext_iff", ["list"]], ["add", "theorem", "form_perm_nil", ["list"]], ["add", "theorem", "form_perm_pair", ["list"]], ["add", "theorem", "form_perm_pow_apply_nth_le", ["list"]], ["add", "theorem", "form_perm_reverse", ["list"]], ["add", "theorem", "form_perm_rotate", ["list"]], ["add", "theorem", "form_perm_rotate_one", ["list"]], ["add", "theorem", "form_perm_singleton", ["list"]], ["add", "theorem", "support_form_perm_le'", ["list"]], ["add", "theorem", "support_form_perm_le", ["list"]], ["add", "theorem", "support_form_perm_of_nodup'", ["list"]], ["add", "theorem", "support_form_perm_of_nodup", ["list"]], ["add", "theorem", "zip_with_swap_prod_support'", ["list"]], ["add", "theorem", "zip_with_swap_prod_support", ["list"]]]}]}, {"timestamp": 1625679970, "sha": "5f2358c4", "message": "fix(data/complex/basic): ensure `algebra ℝ ℂ` is computable (#8166)\nWithout this `complex.ring` instance, `ring ℂ` is found via `division_ring.to_ring` and `field.to_division_ring`, and `complex.field` is non-computable.\nThe non-computable-ness previously contaminated `distrib_mul_action R ℂ` and even some properties of `finset.sum` on complex numbers! To avoid this type of mistake again, we remove `noncomputable theory` and manually flag the parts we actually expect to be computable.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["del", "def", "basis_one_I", ["complex"]], ["add", "def", "lift", ["complex"]]]}]}, {"timestamp": 1625673285, "sha": "e0ca8534", "message": "feat(algebra/group/units): teach `simps` about `units` (#8204)\nThis also introduces `units.copy` to match `invertible.copy`, and uses it to make some lemmas in normed_space/units true by `rfl` (and generated by `simps`).", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "def", "copy", ["units"]], ["add", "theorem", "copy_eq", ["units"]], ["add", "def", "coe", ["units", "simps"]], ["add", "def", "coe_inv", ["units", "simps"]]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["del", "theorem", "unit_of_invertible_inv", []], ["del", "theorem", "unit_of_invertible_val", []]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": [["del", "theorem", "add_coe", ["units"]], ["del", "theorem", "one_sub_coe", ["units"]], ["del", "theorem", "unit_of_nearby_coe", ["units"]]]}]}, {"timestamp": 1625673284, "sha": "ce3d53b0", "message": "fix(data/real/basic): provide a computable `module` instance (#8164)\nWithout this instance, `normed_field.to_normed_space` and `normed_space.to_module` is tried first, but this results in a noncomputable instance.", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}]}, {"timestamp": 1625670669, "sha": "05e8ed24", "message": "chore(feat/algebra/lie/from_cartan_matrix): rename file (#8219)", "changes": [{"oldPath": "src/algebra/lie/from_cartan_matrix.lean", "newPath": "src/algebra/lie/cartan_matrix.lean", "changes": []}]}, {"timestamp": 1625670668, "sha": "836c5491", "message": "docs(category_theory/limits/shapes/products): add module docstring (#8212)\nAlso resolves some TODOs.", "changes": [{"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}]}, {"timestamp": 1625668242, "sha": "51452619", "message": "feat(data/fintype/list): induced fintype on nodup lists (#8171)", "changes": [{"oldPath": null, "newPath": "src/data/fintype/list.lean", "changes": [["add", "def", "lists", ["multiset"]], ["add", "theorem", "lists_coe", ["multiset"]], ["add", "theorem", "mem_lists_iff", ["multiset"]]]}, {"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "def", "decidable_nontrivial_coe", ["cycle"]], ["add", "theorem", "nontrivial_iff", ["cycle", "nodup"]], ["add", "theorem", "nontrivial_coe_nodup_iff", ["cycle"]]]}]}, {"timestamp": 1625664919, "sha": "5796783b", "message": "chore(category_theory): homogenise usage of notation for terminal objects (#8106)\nI went with the option that is used more frequently, but I'm also happy to switch to the space-less option if people prefer it.", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["mod", "def", "exp_terminal_iso_self", ["category_theory"]], ["mod", "def", "internalize_hom", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}]}, {"timestamp": 1625659327, "sha": "bb5ab1e7", "message": "chore(measure_theory/measure_space): add missing `finite_measure` instances (#8214)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "coe_nnreal_smul", ["measure_theory", "measure"]]]}]}, {"timestamp": 1625659325, "sha": "41ec92ea", "message": "feat(algebra/lie/from_cartan_matrix): construction of a Lie algebra from a Cartan matrix (#8206)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebra/lie/from_cartan_matrix.lean", "changes": [["add", "inductive", "generators", ["cartan_matrix"]], ["add", "def", "EF", ["cartan_matrix", "relations"]], ["add", "def", "HE", ["cartan_matrix", "relations"]], ["add", "def", "HF", ["cartan_matrix", "relations"]], ["add", "def", "HH", ["cartan_matrix", "relations"]], ["add", "def", "ad_E", ["cartan_matrix", "relations"]], ["add", "def", "ad_F", ["cartan_matrix", "relations"]], ["add", "def", "to_ideal", ["cartan_matrix", "relations"]], ["add", "def", "to_set", ["cartan_matrix", "relations"]], ["add", "def", "to_lie_algebra", ["matrix"]]]}]}, {"timestamp": 1625659322, "sha": "126a7b6e", "message": "feat(data/multiset/basic): add_eq_union_iff_disjoint (#8173)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "add_eq_union_iff_disjoint", ["multiset"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_eq_max_iff", ["nat"]], ["add", "theorem", "add_eq_min_iff", ["nat"]], ["add", "theorem", "max_eq_zero_iff", ["nat"]], ["add", "theorem", "min_eq_zero_iff", ["nat"]]]}]}, {"timestamp": 1625653497, "sha": "29beb1f3", "message": "feat(analysis/normed_space/int): norms of (units of) integers (#8136)\nFrom LTE", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/int.lean", "changes": [["add", "theorem", "nnnorm_coe_nat", ["int"]], ["add", "theorem", "nnnorm_coe_units", ["int"]], ["add", "theorem", "norm_coe_nat", ["int"]], ["add", "theorem", "norm_coe_units", ["int"]], ["add", "theorem", "to_nat_add_to_nat_neg_eq_nnnorm", ["int"]], ["add", "theorem", "to_nat_add_to_nat_neg_eq_norm", ["int"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ", ["units_int"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "to_nat_add_to_nat_neg_eq_nat_abs", ["int"]], ["add", "theorem", "to_nat_sub_to_nat_neg", ["int"]]]}]}, {"timestamp": 1625653496, "sha": "89e18376", "message": "fix(tactic/core): add subst' (#8129)\n`tactic.subst'` gives a better error message when the substituted variable is a local definition.\nIt is hard to fix this in core (without touching C++ code), since `tactic.is_local_def` is in mathlib", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/lift.lean", "newPath": "test/lift.lean", "changes": []}]}, {"timestamp": 1625653494, "sha": "47c7c016", "message": "feat(measure_theory/measure_space): if `f` restricted to `s` is measurable, then `f` is `ae_measurable` wrt `μ.restrict s` (#8098)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_measurable_restrict_of_measurable_subtype", []]]}]}, {"timestamp": 1625647675, "sha": "06f0d517", "message": "refactor(algebra/ordered_group): another step in the `order` refactor -- ordered groups (#8060)\nThis PR represents another wave of generalization of proofs, following from the `order` refactor. It is another step towards #7645.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "def", "abs", []], ["mod", "theorem", "abs_eq_abs", []], ["add", "theorem", "div_le''", []], ["add", "theorem", "div_le_div''", []], ["add", "theorem", "div_le_div_flip", []], ["add", "theorem", "div_le_div_iff'", []], ["add", "theorem", "div_le_div_iff_left", []], ["add", "theorem", "div_le_div_iff_right", []], ["add", "theorem", "div_le_div_left'", []], ["add", "theorem", "div_le_div_right'", []], ["add", "theorem", "div_le_iff_le_mul'", []], ["add", "theorem", "div_le_iff_le_mul", []], ["add", "theorem", "div_le_inv_mul_iff", []], ["add", "theorem", "div_le_one'", []], ["add", "theorem", "div_lt''", []], ["add", "theorem", "div_lt_div''", []], ["add", "theorem", "div_lt_div_iff'", []], ["add", "theorem", "div_lt_div_iff_left", []], ["add", "theorem", "div_lt_div_iff_right", []], ["add", "theorem", "div_lt_div_left'", []], ["add", "theorem", "div_lt_div_right'", []], ["add", "theorem", "div_lt_iff_lt_mul'", []], ["add", "theorem", "div_lt_iff_lt_mul", []], ["add", "theorem", "div_lt_one'", []], ["mod", "theorem", "eq_or_eq_neg_of_abs_eq", []], ["mod", "def", "ordered_comm_group", ["function", "injective"]], ["del", "theorem", "inv_inv_of_one_lt", []], ["add", "theorem", "inv_le_div_iff_le_mul'", []], ["add", "theorem", "inv_le_div_iff_le_mul", []], ["mod", "theorem", "inv_le_inv'", []], ["del", "theorem", "inv_le_one'", []], ["mod", "theorem", "inv_le_one_of_one_le", []], ["del", "theorem", "inv_le_self", []], ["add", "theorem", "inv_lt_div_iff_lt_mul'", []], ["add", "theorem", "inv_lt_div_iff_lt_mul", []], ["mod", "theorem", "inv_lt_inv'", []], ["del", "theorem", "inv_lt_one'", []], ["del", "theorem", "inv_lt_one_iff_one_lt", []], ["add", "theorem", "inv_lt_one_of_one_lt", []], ["del", "theorem", "inv_lt_self", []], ["del", "theorem", "inv_mul_le_left_of_le_mul", []], ["del", "theorem", "inv_mul_le_of_le_mul", []], ["add", "theorem", "inv_mul_le_one_iff", []], ["del", "theorem", "inv_mul_le_right_of_le_mul", []], ["add", "theorem", "inv_mul_lt_iff_lt_mul'", []], ["del", "theorem", "inv_mul_lt_iff_lt_mul_right", []], ["del", "theorem", "inv_mul_lt_left_of_lt_mul", []], ["del", "theorem", "inv_mul_lt_of_lt_mul", []], ["add", "theorem", "inv_mul_lt_one_iff", []], ["add", "theorem", "inv_mul_lt_one_iff_lt", []], ["del", "theorem", "inv_mul_lt_right_of_lt_mul", []], ["del", "theorem", "inv_of_one_lt_inv", []], ["add", "theorem", "le_div''", []], ["add", "theorem", "le_div_iff_mul_le'", []], ["add", "theorem", "le_div_iff_mul_le", []], ["add", "theorem", "le_iff_forall_one_lt_le_mul", []], ["add", "theorem", "le_iff_forall_one_lt_lt_mul", []], ["del", "theorem", "le_iff_forall_pos_le_add", []], ["del", "theorem", "le_iff_forall_pos_lt_add", []], ["del", "theorem", "le_inv_iff_mul_le_one'", []], ["del", "theorem", "le_inv_iff_mul_le_one", []], ["add", "theorem", "le_inv_iff_mul_le_one_left", []], ["add", "theorem", "le_inv_iff_mul_le_one_right", []], ["add", "theorem", "le_inv_mul_iff_le", []], ["del", "theorem", "le_inv_mul_of_mul_le", []], ["del", "theorem", "le_inv_of_le_inv", []], ["add", "theorem", "le_mul_inv_iff_le", []], ["add", "theorem", "le_mul_inv_iff_mul_le", []], ["del", "theorem", "le_mul_of_inv_mul_le", []], ["del", "theorem", "le_mul_of_inv_mul_le_left", []], ["del", "theorem", "le_mul_of_inv_mul_le_right", []], ["add", "theorem", "le_of_forall_one_lt_le_mul", []], ["add", "theorem", "le_of_forall_one_lt_lt_mul", []], ["del", "theorem", "le_of_forall_pos_le_add", []], ["del", "theorem", "le_of_forall_pos_lt_add", []], ["del", "theorem", "le_of_inv_le_inv", []], ["del", "theorem", "le_one_of_one_le_inv", []], ["del", "theorem", "le_sub", []], ["del", "theorem", "le_sub_iff_add_le'", []], ["del", "theorem", "le_sub_iff_add_le", []], ["add", "theorem", "inv_le_one_iff", ["left"]], ["add", "theorem", "inv_le_self", ["left"]], ["add", "theorem", "inv_lt_one_iff", ["left"]], ["add", "theorem", "inv_lt_self", ["left"]], ["add", "theorem", "one_le_inv_iff", ["left"]], ["add", "theorem", "one_lt_inv_iff", ["left"]], ["add", "theorem", "self_le_inv", ["left"]], ["add", "theorem", "self_lt_inv", ["left"]], ["add", "theorem", "lt_div''", []], ["add", "theorem", "lt_div_iff_mul_lt'", []], ["add", "theorem", "lt_div_iff_mul_lt", []], ["add", "theorem", "lt_inv_mul_iff_lt", []], ["del", "theorem", "lt_inv_mul_of_mul_lt", []], ["add", "theorem", "lt_mul_inv_iff_lt", []], ["add", "theorem", "lt_mul_inv_iff_mul_lt", []], ["del", "theorem", "lt_mul_of_inv_mul_lt", []], ["del", "theorem", "lt_mul_of_inv_mul_lt_left", []], ["del", "theorem", "lt_mul_of_inv_mul_lt_right", []], ["del", "theorem", "lt_of_inv_lt_inv", []], ["del", "theorem", "lt_sub", []], ["del", "theorem", "lt_sub_iff_add_lt'", []], ["del", "theorem", "lt_sub_iff_add_lt", []], ["del", "theorem", "max_one_div_eq_self'", []], ["add", "theorem", "max_one_div_max_inv_one_eq_self", []], ["del", "theorem", "max_zero_sub_max_neg_zero_eq_self", []], ["mod", "theorem", "mul_inv_le_iff_le_mul", []], ["add", "theorem", "mul_inv_le_inv_mul_iff", []], ["add", "theorem", "mul_inv_le_one_iff", []], ["add", "theorem", "mul_inv_le_one_iff_le", []], ["add", "theorem", "mul_inv_lt_iff_le_mul'", []], ["add", "theorem", "mul_inv_lt_iff_lt_mul", []], ["add", "theorem", "mul_inv_lt_inv_mul_iff", []], ["add", "theorem", "mul_inv_lt_mul_inv_iff'", []], ["add", "theorem", "mul_inv_lt_one_iff", []], ["del", "theorem", "mul_le_of_le_inv_mul", []], ["del", "theorem", "mul_lt_of_lt_inv_mul", []], ["del", "theorem", "neg_le_sub_iff_le_add'", []], ["del", "theorem", "neg_le_sub_iff_le_add", []], ["del", "theorem", "neg_lt_sub_iff_lt_add'", []], ["del", "theorem", "neg_lt_sub_iff_lt_add", []], ["add", "theorem", "one_le_div'", []], ["del", "theorem", "one_le_inv'", []], ["mod", "theorem", "one_le_inv_of_le_one", []], ["del", "theorem", "one_le_of_inv_le_one", []], ["add", "theorem", "one_lt_div'", []], ["del", "theorem", "one_lt_inv'", []], ["del", "theorem", "one_lt_inv_of_inv", []], ["del", "theorem", "one_lt_of_inv_inv", []], ["add", "theorem", "inv_le_one_iff", ["right"]], ["add", "theorem", "inv_le_self", ["right"]], ["add", "theorem", "inv_lt_one_iff", ["right"]], ["add", "theorem", "inv_lt_self", ["right"]], ["add", "theorem", "one_le_inv_iff", ["right"]], ["add", "theorem", "one_lt_inv_iff", ["right"]], ["add", "theorem", "self_le_inv", ["right"]], ["add", "theorem", "self_lt_inv", ["right"]], ["del", "theorem", "self_le_inv", []], ["del", "theorem", "sub_le", []], ["del", "theorem", "sub_le_iff_le_add'", []], ["del", "theorem", "sub_le_iff_le_add", []], ["del", "theorem", "sub_le_sub", []], ["del", "theorem", "sub_le_sub_flip", []], ["del", "theorem", "sub_le_sub_iff", []], ["del", "theorem", "sub_le_sub_iff_left", []], ["del", "theorem", "sub_le_sub_iff_right", []], ["del", "theorem", "sub_le_sub_left", []], ["del", "theorem", "sub_le_sub_right", []], ["del", "theorem", "sub_lt", []], ["del", "theorem", "sub_lt_iff_lt_add'", []], ["del", "theorem", "sub_lt_iff_lt_add", []], ["del", "theorem", "sub_lt_sub", []], ["del", "theorem", "sub_lt_sub_iff_left", []], ["del", "theorem", "sub_lt_sub_iff_right", []], ["del", "theorem", "sub_lt_sub_left", []], ["del", "theorem", "sub_lt_sub_right", []], ["del", "theorem", "sub_lt_zero", []], ["del", "theorem", "sub_nonneg", []], ["del", "theorem", "sub_nonpos", []], ["del", "theorem", "sub_pos", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}]}, {"timestamp": 1625624439, "sha": "20d8e837", "message": "chore(scripts): update nolints.txt (#8217)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625596005, "sha": "d7653b8d", "message": "chore(category_theory/monad/algebra): lint and golf (#8160)\nAdds a module docstring and golfs some proofs, including removing `erw`.", "changes": [{"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["mod", "def", "iso_mk", ["category_theory", "comonad", "coalgebra"]], ["mod", "def", "iso_mk", ["category_theory", "monad", "algebra"]]]}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["mod", "def", "new_cone", ["category_theory", "monad", "forget_creates_limits"]], ["mod", "def", "γ", ["category_theory", "monad", "forget_creates_limits"]]]}]}, {"timestamp": 1625588128, "sha": "03c8904a", "message": "doc(data/set/function): add set. prefixes for doc-gen (#8215)\nThis means these names will be linked.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}]}, {"timestamp": 1625581587, "sha": "ec07293a", "message": "doc(*): add bold in doc strings for named theorems i.e. **mean value theorem** (#8182)", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/57_herons_formula.lean", "newPath": "archive/100-theorems-list/57_herons_formula.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/93_birthday_problem.lean", "newPath": "archive/100-theorems-list/93_birthday_problem.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "archive/arithcc.lean", "newPath": "archive/arithcc.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "counterexamples/girard.lean", "newPath": "counterexamples/girard.lean", "changes": []}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lhopital.lean", "newPath": "src/analysis/calculus/lhopital.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}, {"oldPath": "src/combinatorics/hall.lean", "newPath": "src/combinatorics/hall.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/choose/sum.lean", "newPath": "src/data/nat/choose/sum.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/basic.lean", "newPath": "src/linear_algebra/char_poly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}]}, {"timestamp": 1625579232, "sha": "13999970", "message": "feat(category_theory/closed): Exponential ideals (#4930)\nDefine exponential ideals.", "changes": [{"oldPath": null, "newPath": "src/category_theory/closed/ideal.lean", "changes": [["add", "theorem", "bijection_natural", ["category_theory"]], ["add", "theorem", "bijection_symm_apply_id", ["category_theory"]], ["add", "def", "cartesian_closed_of_reflective", ["category_theory"]], ["add", "theorem", "mk'", ["category_theory", "exponential_ideal"]], ["add", "theorem", "mk_of_iso", ["category_theory", "exponential_ideal"]], ["add", "def", "exponential_ideal_reflective", ["category_theory"]], ["add", "theorem", "prod_comparison_iso", ["category_theory"]], ["add", "theorem", "reflective_products", ["category_theory"]]]}]}, {"timestamp": 1625571170, "sha": "98e8408a", "message": "feat(geometry/manifold/algebra): `left_invariant_derivation` (#8108)\nIn this PR we prove that left-invariant derivations are a Lie algebra.", "changes": [{"oldPath": null, "newPath": "src/geometry/manifold/algebra/left_invariant_derivation.lean", "changes": [["add", "theorem", "coe_add", ["left_invariant_derivation"]], ["add", "theorem", "coe_derivation", ["left_invariant_derivation"]], ["add", "theorem", "coe_derivation_injective", ["left_invariant_derivation"]], ["add", "def", "coe_fn_add_monoid_hom", ["left_invariant_derivation"]], ["add", "theorem", "coe_injective", ["left_invariant_derivation"]], ["add", "theorem", "coe_neg", ["left_invariant_derivation"]], ["add", "theorem", "coe_smul", ["left_invariant_derivation"]], ["add", "theorem", "coe_sub", ["left_invariant_derivation"]], ["add", "theorem", "coe_to_linear_map", ["left_invariant_derivation"]], ["add", "theorem", "coe_zero", ["left_invariant_derivation"]], ["add", "theorem", "commutator_apply", ["left_invariant_derivation"]], ["add", "theorem", "commutator_coe_derivation", ["left_invariant_derivation"]], ["add", "theorem", "comp_L", ["left_invariant_derivation"]], ["add", "def", "eval_at", ["left_invariant_derivation"]], ["add", "theorem", "eval_at_apply", ["left_invariant_derivation"]], ["add", "theorem", "eval_at_coe", ["left_invariant_derivation"]], ["add", "theorem", "eval_at_mul", ["left_invariant_derivation"]], ["add", "theorem", "ext", ["left_invariant_derivation"]], ["add", "theorem", "left_invariant'", ["left_invariant_derivation"]], ["add", "theorem", "left_invariant", ["left_invariant_derivation"]], ["add", "theorem", "leibniz", ["left_invariant_derivation"]], ["add", "theorem", "lift_add", ["left_invariant_derivation"]], ["add", "theorem", "lift_smul", ["left_invariant_derivation"]], ["add", "theorem", "lift_zero", ["left_invariant_derivation"]], ["add", "theorem", "map_add", ["left_invariant_derivation"]], ["add", "theorem", "map_neg", ["left_invariant_derivation"]], ["add", "theorem", "map_smul", ["left_invariant_derivation"]], ["add", "theorem", "map_sub", ["left_invariant_derivation"]], ["add", "theorem", "map_zero", ["left_invariant_derivation"]], ["add", "theorem", "to_derivation_eq_coe", ["left_invariant_derivation"]], ["add", "theorem", "to_fun_eq_coe", ["left_invariant_derivation"]], ["add", "structure", "left_invariant_derivation", []]]}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": [["add", "theorem", "smooth_left_mul_one", []], ["add", "theorem", "smooth_right_mul_one", []]]}, {"oldPath": "src/geometry/manifold/derivation_bundle.lean", "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": [["mod", "theorem", "apply_fdifferential", []], ["add", "theorem", "apply_hfdifferential", []], ["del", "def", "fdifferential_map", []], ["add", "def", "hfdifferential", []]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "theorem", "congr_fun", ["derivation"]]]}]}, {"timestamp": 1625569083, "sha": "23d22e4a", "message": "feat(category_theory/abelian/ext): Defines Ext functors. (#8186)\nSee my comment from #7525", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/ext.lean", "changes": [["add", "def", "Ext", []], ["add", "def", "Ext_succ_of_projective", []]]}]}, {"timestamp": 1625559713, "sha": "2f720232", "message": "chore(measure_theory/decomposition): change statement to use the `finite_measure` instance (#8207)", "changes": [{"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": [["mod", "theorem", "hahn_decomposition", ["measure_theory"]]]}]}, {"timestamp": 1625547933, "sha": "6365c6c1", "message": "feat(algebra/invertible): construction from is_unit (#8205)", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "nonempty_invertible", ["is_unit"]], ["add", "theorem", "nonempty_invertible_iff_is_unit", []]]}]}, {"timestamp": 1625537444, "sha": "27841bbb", "message": "chore(scripts): update nolints.txt (#8208)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625505886, "sha": "77e1e3b2", "message": "feat(linear_algebra/nonsingular_inverse): add lemmas about `invertible` (#8201)", "changes": [{"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": [["add", "def", "det_invertible_of_invertible", ["matrix"]], ["add", "def", "det_invertible_of_left_inverse", ["matrix"]], ["add", "def", "det_invertible_of_right_inverse", ["matrix"]], ["add", "def", "invertible_of_det_invertible", ["matrix"]], ["add", "def", "unit_of_det_invertible", ["matrix"]], ["add", "theorem", "unit_of_det_invertible_eq_nonsing_inv_unit", ["matrix"]]]}]}, {"timestamp": 1625505885, "sha": "9d998338", "message": "feat(category_theory/linear/yoneda): A linear version of Yoneda. (#8199)", "changes": [{"oldPath": null, "newPath": "src/category_theory/linear/yoneda.lean", "changes": [["add", "def", "linear_yoneda", ["category_theory"]]]}]}, {"timestamp": 1625505884, "sha": "b6bf7a30", "message": "feat(measure_theory/lp_space): define the Lp function corresponding to the indicator of a set (#8193)\nI also moved some measurability lemmas from the integrable_on file to measure_space. I needed them and lp_space is before integrable_on in the import graph.", "changes": [{"oldPath": "src/algebra/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": [["add", "theorem", "comp_mul_indicator_const", ["set"]]]}, {"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integrable_on.lean", "changes": [["del", "theorem", "indicator", ["ae_measurable"]], ["del", "theorem", "restrict", ["ae_measurable"]], ["del", "theorem", "ae_measurable_indicator_iff", []], ["del", "theorem", "indicator_ae_eq_restrict", []], ["del", "theorem", "indicator_ae_eq_restrict_compl", []], ["add", "theorem", "integrable_indicator_const_Lp", ["measure_theory"]], ["del", "theorem", "piecewise_ae_eq_restrict", []], ["del", "theorem", "piecewise_ae_eq_restrict_compl", []]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "def", "indicator_const_Lp", ["measure_theory"]], ["add", "theorem", "indicator_const_Lp_coe_fn", ["measure_theory"]], ["add", "theorem", "indicator_const_Lp_coe_fn_mem", ["measure_theory"]], ["add", "theorem", "indicator_const_Lp_coe_fn_nmem", ["measure_theory"]], ["add", "theorem", "indicator_const_Lp_disjoint_union", ["measure_theory"]], ["add", "theorem", "mem_ℒp_indicator_const", ["measure_theory"]], ["add", "theorem", "norm_indicator_const_Lp'", ["measure_theory"]], ["add", "theorem", "norm_indicator_const_Lp", ["measure_theory"]], ["add", "theorem", "norm_indicator_const_Lp_top", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_indicator_const_eq", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_indicator_const_le", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_indicator_le", ["measure_theory"]], ["add", "theorem", "snorm_indicator_const'", ["measure_theory"]], ["add", "theorem", "snorm_indicator_const", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "indicator", ["ae_measurable"]], ["add", "theorem", "restrict", ["ae_measurable"]], ["add", "theorem", "ae_measurable_indicator_iff", []], ["add", "theorem", "indicator_ae_eq_restrict", []], ["add", "theorem", "indicator_ae_eq_restrict_compl", []], ["add", "theorem", "piecewise_ae_eq_restrict", []], ["add", "theorem", "piecewise_ae_eq_restrict_compl", []]]}]}, {"timestamp": 1625505883, "sha": "7eab080b", "message": "feat(topology/instances/ennreal): add tsum lemmas for ennreal.to_real (#8184)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tsum_coe_eq_top_iff_not_summable_coe", ["ennreal"]], ["add", "theorem", "tsum_coe_ne_top_iff_summable_coe", ["ennreal"]], ["add", "theorem", "tsum_to_real_eq", ["ennreal"]]]}]}, {"timestamp": 1625500036, "sha": "38a6f265", "message": "feat(algebra/to_additive): map pow to smul (#7888)\n* Allows `@[to_additive]` to reorder consecutive arguments of specified identifiers.\n* This can be specified with the attribute `@[to_additive_reorder n m ...]` to swap arguments `n` and `n+1`, arguments `m` and `m+1` etc. (start counting from 1).\n* The only two attributes currently in use are:\n```lean\nattribute [to_additive_reorder 1] has_pow\nattribute [to_additive_reorder 1 4] has_pow.pow\n```\n* It will eta-expand all expressions that have as head a declaration with attribute `to_additive_reorder` until they have the required number of arguments. This is required to correctly deal with partially applied terms.\n* Hack: if the first two arguments are reordered, then the first two universe variables are also reordered (this happens to be the correct behavior for `has_pow` and `has_pow.pow`). It might be cleaner to have a separate attribute for that, but that given the low amount of times that I expect that we use `to_additive_reorder`, this seems unnecessary.\n* This PR also allows the user to write `@[to_additive?]` to trace the generated declaration.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_const_one", ["finset"]], ["del", "theorem", "sum_const_zero", ["finset"]], ["del", "theorem", "sum_multiset_count", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": [["del", "theorem", "sum_powerset", ["finset"]]]}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": [["mod", "structure", "value_type", ["to_additive"]]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "map_nsmul", ["add_monoid_hom"]], ["del", "theorem", "add_nsmul", []], ["del", "theorem", "bit0_nsmul'", []], ["del", "theorem", "bit0_nsmul", []], ["del", "theorem", "bit1_nsmul'", []], ["del", "theorem", "bit1_nsmul", []], ["mod", "theorem", "pow_left", ["commute"]], ["mod", "theorem", "pow_pow", ["commute"]], ["mod", "theorem", "pow_pow_self", ["commute"]], ["mod", "theorem", "pow_right", ["commute"]], ["mod", "theorem", "pow_self", ["commute"]], ["mod", "theorem", "self_pow", ["commute"]], ["add", "theorem", "div_gpow", []], ["mod", "theorem", "gpow_coe_nat", []], ["mod", "theorem", "gpow_eq_pow", []], ["mod", "theorem", "gpow_neg", []], ["mod", "theorem", "gpow_neg_succ_of_nat", []], ["mod", "theorem", "gpow_one", []], ["mod", "theorem", "gpow_zero", []], ["del", "theorem", "gsmul_add", []], ["del", "theorem", "gsmul_coe_nat", []], ["del", "theorem", "gsmul_eq_smul", []], ["del", "theorem", "gsmul_neg", []], ["del", "theorem", "gsmul_neg_succ_of_nat", []], ["del", "theorem", "gsmul_of_nat", []], ["del", "theorem", "gsmul_sub", []], ["del", "theorem", "gsmul_zero", []], ["mod", "theorem", "inv_pow", []], ["del", "theorem", "map_nsmul", ["is_add_monoid_hom"]], ["mod", "theorem", "map_pow", ["monoid_hom"]], ["del", "theorem", "mul_nsmul'", []], ["del", "theorem", "mul_nsmul", []], ["del", "theorem", "neg_gsmul", []], ["del", "theorem", "neg_nsmul", []], ["del", "theorem", "neg_one_gsmul", []], ["mod", "theorem", "npow_eq_pow", []], ["del", "theorem", "nsmul_add", []], ["del", "theorem", "nsmul_add_comm'", []], ["del", "theorem", "nsmul_add_comm", []], ["del", "theorem", "nsmul_add_sub_nsmul", []], ["del", "theorem", "nsmul_eq_smul", []], ["del", "theorem", "nsmul_neg_comm", []], ["del", "theorem", "nsmul_sub", []], ["del", "theorem", "nsmul_zero", []], ["mod", "theorem", "one_gpow", []], ["del", "theorem", "one_gsmul", []], ["del", "theorem", "one_nsmul", []], ["mod", "theorem", "one_pow", []], ["mod", "theorem", "pow_one", []], ["mod", "theorem", "pow_zero", []], ["mod", "theorem", "pow_right", ["semiconj_by"]], ["del", "theorem", "sub_nsmul_nsmul_add", []], ["del", "theorem", "succ_nsmul'", []], ["del", "theorem", "succ_nsmul", []], ["del", "theorem", "two_nsmul", []], ["del", "theorem", "zero_gsmul", []], ["del", "theorem", "zero_nsmul", []]]}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "sum_repeat", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "prod_repeat", ["multiset"]], ["del", "theorem", "sum_map_sum_map", ["multiset"]], ["del", "theorem", "sum_map_zero", ["multiset"]], ["del", "theorem", "sum_repeat", ["multiset"]]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": null, "newPath": "test/to_additive.lean", "changes": [["add", "def", "foo0", []], ["add", "def", "foo1", []], ["add", "def", "foo2", []], ["add", "def", "foo3", []], ["add", "theorem", "foo4_test", []], ["add", "def", "foo5", []], ["add", "def", "foo6", []], ["add", "def", "foo7", []], ["add", "def", "{a", []]]}]}, {"timestamp": 1625497070, "sha": "f2edc5a3", "message": "feat(category_theory/preadditive/opposite): Adds some instances and lemmas (#8202)\nThis PR adds some instances and lemmas related to opposites and additivity of functors.", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "left_op_comp", ["category_theory", "nat_trans"]], ["add", "theorem", "left_op_id", ["category_theory", "nat_trans"]], ["add", "theorem", "right_op_comp", ["category_theory", "nat_trans"]], ["add", "theorem", "right_op_id", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/preadditive/opposite.lean", "newPath": "src/category_theory/preadditive/opposite.lean", "changes": [["add", "theorem", "op_add", ["category_theory"]], ["add", "theorem", "op_zero", ["category_theory"]]]}]}, {"timestamp": 1625494441, "sha": "0b0d8e7e", "message": "refactor(ring_theory): turn `localization_map` into a typeclass (#8119)\nThis PR replaces the previous `localization_map (M : submodule R) Rₘ` definition (a ring hom `R →+* Rₘ` that presents `Rₘ` as the localization of `R` at `M`) with a new `is_localization M Rₘ` typeclass that puts these requirements on `algebra_map R Rₘ` instead. An important benefit is that we no longer need to mess with `localization_map.codomain` to put an `R`-algebra structure on `Rₘ`, we can just work with `Rₘ` directly.\nThe important API changes are in commit 0de78dc, all other commits are simply fixes to the dependent files.\nMain changes:\n * `localization_map` has been replaced with `is_localization`, similarly `away_map` -> `is_localization.away`, `localization_map.at_prime` -> `is_localization.at_prime` and `fraction_map` -> `is_fraction_ring`\n * many declarations taking the `localization_map` as a parameter now take `R` and/or `M` and/or `Rₘ`, depending on what can be inferred easily\n * `localization_map.to_map` has been replaced with `algebra_map R Rₘ`\n * `localization_map.codomain` and its instances have been removed (you can now directly use `Rₘ`)\n * `is_localization.alg_equiv` generalizes `fraction_map.alg_equiv_of_quotient` (which has been renamed to `is_fraction_ring.alg_equiv`)\n * `is_localization.sec` has been introduced to replace `(to_localization_map _ _).sec`\n * `localization.of` have been replaced with `algebra` and `is_localization` instances on `localization`, similarly for `localization.away.of`, `localization.at_prime.of` and `fraction_ring.of`.\n * `int.fraction_map` is now an instance `rat.is_fraction_ring`\n * All files depending on the above definitions have had fixes. These were mostly straightforward, except:\n * [Some category-theory arrows in `algebraic_geometry/structure.sheaf` are now plain `ring_hom`s. This change was suggested by @justus-springer in order to help the elaborator figure out the arguments to `is_localization`.](https://github.com/leanprover-community/mathlib/commit/cf3acc925467cc06237a13dbe4264529f9a58850)\n * Deleted `minpoly.over_int_eq_over_rat` and `minpoly.integer_dvd`, now you can just use `gcd_domain_eq_field_fractions` or `gcd_domain_dvd` respectively. [This removes code duplication in `minpoly.lean`](https://github.com/leanprover-community/mathlib/commit/5695924d85710f98ac60a7df91d7dbf27408ca26)\n * `fractional_ideal` does not need to assume `is_localization` everywhere, only for certain specific definitions\nThings that stay the same:\n * `localization`, `localization.away`, `localization.at_prime` and `fraction_ring` are still a construction of localizations (although see above for `{localization,localization.away,localization.at_prime,fraction_ring}.of`)\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Refactoring.20.60localization_map.60", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/char_p/algebra.lean", "newPath": "src/algebra/char_p/algebra.lean", "changes": [["add", "theorem", "char_p_of_is_fraction_ring", ["is_fraction_ring"]], ["add", "theorem", "char_zero_of_is_fraction_ring", ["is_fraction_ring"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["mod", "def", "to_basic_open", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "to_basic_open_to_map", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "to_open", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_open_apply", ["algebraic_geometry", "structure_sheaf"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "gcd_domain_dvd", ["minpoly"]], ["mod", "theorem", "gcd_domain_eq_field_fractions", ["minpoly"]], ["del", "theorem", "integer_dvd", ["minpoly"]], ["del", "theorem", "over_int_eq_over_rat", ["minpoly"]]]}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["mod", "theorem", "coe_inv_of_nonzero", []], ["mod", "theorem", "inv_nonzero", []], ["mod", "theorem", "inv_zero'", []], ["mod", "theorem", "invertible_iff_generator_nonzero", []], ["mod", "theorem", "invertible_of_principal", []], ["mod", "theorem", "is_dedekind_domain_iff", []], ["mod", "theorem", "is_dedekind_domain_inv_iff", []], ["mod", "theorem", "is_principal_inv", []], ["mod", "theorem", "map_inv", []], ["mod", "theorem", "mul_generator_self_inv", []], ["mod", "theorem", "mul_inv_cancel_iff", []], ["mod", "theorem", "right_inverse_eq", []], ["mod", "theorem", "span_singleton_inv", []]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["mod", "theorem", "add_le_add_left", ["ring", "fractional_ideal"]], ["mod", "theorem", "bot_eq_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "canonical_equiv_flip", ["ring", "fractional_ideal"]], ["mod", "theorem", "canonical_equiv_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "canonical_equiv_symm", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_add", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_div", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_fun_map_equiv", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_ideal_le_one", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_injective", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_le_coe", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_map", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_mem_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_mk", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_to_fractional_ideal_bot", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_to_submodule_eq_bot", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_to_submodule_ne_bot", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "div_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "div_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "div_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "div_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "eq_one_div_of_mul_eq_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "eq_span_singleton_of_principal", ["ring", "fractional_ideal"]], ["mod", "theorem", "eq_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "exists_eq_span_singleton_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "ext", ["ring", "fractional_ideal"]], ["mod", "theorem", "ext_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_div_of_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_inf", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_map", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_of_subset_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_sup", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_fractional_of_fg", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_fractional_of_le", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_fractional_span_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_fractional_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_noetherian", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_noetherian_coe_to_fractional_ideal", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_noetherian_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_noetherian_span_singleton_inv_to_map_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_noetherian_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_principal_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_div_iff_mul_le", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_div_iff_of_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_iff_mem", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_one_iff_exists_coe_ideal", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_self_mul_one_div", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_self_mul_self", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_zero_iff", ["ring", "fractional_ideal"]], ["mod", "def", "map", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_comp", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_div", ["ring", "fractional_ideal"]], ["mod", "def", "map_equiv", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_equiv_apply", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_equiv_symm", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_map_symm", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_one_div", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_symm_map", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_canonical_equiv_apply", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_coe_ideal", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_div_iff_of_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_map", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_one_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_singleton_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_span_singleton_self", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_zero_iff", ["ring", "fractional_ideal"]], ["mod", "def", "mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_div_self_cancel_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_eq_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_le", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_le_mul_left", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_left_mono", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_mem_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_one_div_le_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_right_mono", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_self_le_self", ["ring", "fractional_ideal"]], ["mod", "theorem", "ne_zero_of_mul_eq_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "one_div_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "one_mem_one", ["ring", "fractional_ideal"]], ["mod", "def", "span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_eq_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_mul_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_ne_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "sup_eq_add", ["ring", "fractional_ideal"]], ["mod", "theorem", "val_eq_coe", ["ring", "fractional_ideal"]], ["mod", "theorem", "zero_le", ["ring", "fractional_ideal"]], ["mod", "def", "is_fractional", ["ring"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["mod", "theorem", "is_jacobson_localization", ["ideal"]], ["add", "theorem", "is_integral_is_localization_polynomial_quotient", ["ideal", "polynomial"]], ["del", "theorem", "is_integral_localization_map_polynomial_quotient", ["ideal", "polynomial"]]]}, {"oldPath": "src/ring_theory/laurent_series.lean", "newPath": "src/ring_theory/laurent_series.lean", "changes": [["add", "theorem", "coe_algebra_map", ["laurent_series"]], ["del", "def", "of_power_series_localization", ["laurent_series"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "theorem", "comap_is_algebraic_iff", ["fraction_map"]], ["del", "theorem", "eq_zero_of_num_eq_zero", ["fraction_map"]], ["del", "theorem", "exists_reduced_fraction", ["fraction_map"]], ["del", "def", "fraction_map", ["fraction_map", "int"]], ["del", "theorem", "integer_normalization_eq_zero_iff", ["fraction_map"]], ["del", "theorem", "is_integer_of_is_unit_denom", ["fraction_map"]], ["del", "theorem", "is_unit_denom_of_num_eq_zero", ["fraction_map"]], ["del", "theorem", "is_unit_map_of_injective", ["fraction_map"]], ["del", "theorem", "lift_mk'", ["fraction_map"]], ["del", "theorem", "mk'_eq_div", ["fraction_map"]], ["del", "theorem", "mk'_num_denom", ["fraction_map"]], ["del", "theorem", "num_denom_reduced", ["fraction_map"]], ["del", "theorem", "num_mul_denom_eq_num_iff_eq'", ["fraction_map"]], ["del", "theorem", "num_mul_denom_eq_num_iff_eq", ["fraction_map"]], ["del", "theorem", "num_mul_denom_eq_num_mul_denom_iff_eq", ["fraction_map"]], ["del", "def", "to_integral_domain", ["fraction_map"]], ["del", "theorem", "to_map_eq_zero_iff", ["fraction_map"]], ["del", "def", "fraction_map", []], ["del", "def", "of", ["fraction_ring"]], ["del", "def", "fraction_map_of_algebraic", ["integral_closure"]], ["del", "def", "fraction_map_of_finite_extension", ["integral_closure"]], ["add", "theorem", "is_fraction_ring_of_algebraic", ["integral_closure"]], ["add", "theorem", "is_fraction_ring_of_finite_extension", ["integral_closure"]], ["add", "theorem", "comap_is_algebraic_iff", ["is_fraction_ring"]], ["add", "theorem", "eq_zero_of_num_eq_zero", ["is_fraction_ring"]], ["add", "theorem", "exists_reduced_fraction", ["is_fraction_ring"]], ["add", "theorem", "integer_normalization_eq_zero_iff", ["is_fraction_ring"]], ["add", "theorem", "is_integer_of_is_unit_denom", ["is_fraction_ring"]], ["add", "theorem", "is_unit_denom_of_num_eq_zero", ["is_fraction_ring"]], ["add", "theorem", "is_unit_map_of_injective", ["is_fraction_ring"]], ["add", "theorem", "lift_mk'", ["is_fraction_ring"]], ["add", "theorem", "mk'_eq_div", ["is_fraction_ring"]], ["add", "theorem", "mk'_mk_eq_div", ["is_fraction_ring"]], ["add", "theorem", "mk'_num_denom", ["is_fraction_ring"]], ["add", "theorem", "num_denom_reduced", ["is_fraction_ring"]], ["add", "theorem", "num_mul_denom_eq_num_iff_eq'", ["is_fraction_ring"]], ["add", "theorem", "num_mul_denom_eq_num_iff_eq", ["is_fraction_ring"]], ["add", "theorem", "num_mul_denom_eq_num_mul_denom_iff_eq", ["is_fraction_ring"]], ["add", "def", "to_integral_domain", ["is_fraction_ring"]], ["add", "theorem", "to_map_eq_zero_iff", ["is_fraction_ring"]], ["add", "def", "is_fraction_ring", []], ["add", "theorem", "alg_equiv_mk'", ["is_localization"]], ["add", "theorem", "alg_equiv_symm_mk'", ["is_localization"]], ["add", "theorem", "is_unit_mk'_iff", ["is_localization", "at_prime"]], ["add", "theorem", "is_unit_to_map_iff", ["is_localization", "at_prime"]], ["add", "theorem", "local_ring", ["is_localization", "at_prime"]], ["add", "theorem", "mk'_mem_maximal_iff", ["is_localization", "at_prime"]], ["add", "theorem", "to_map_mem_maximal_iff", ["is_localization", "at_prime"]], ["add", "theorem", "lift_comp", ["is_localization", "away", "away_map"]], ["add", "theorem", "lift_eq", ["is_localization", "away", "away_map"]], ["add", "def", "away", ["is_localization"]], ["add", "def", "coe_submodule", ["is_localization"]], ["add", "theorem", "coeff_integer_normalization_mem_support", ["is_localization"]], ["add", "theorem", "coeff_integer_normalization_of_not_mem_support", ["is_localization"]], ["add", "theorem", "comap_map_of_is_prime_disjoint", ["is_localization"]], ["add", "theorem", "epic_of_localization_map", ["is_localization"]], ["add", "theorem", "eq_iff_eq", ["is_localization"]], ["add", "theorem", "eq_mk'_iff_mul_eq", ["is_localization"]], ["add", "theorem", "eq_of_eq", ["is_localization"]], ["add", "theorem", "eq_zero_of_fst_eq_zero", ["is_localization"]], ["add", "theorem", "exist_integer_multiples_of_finset", ["is_localization"]], ["add", "theorem", "exists_integer_multiple'", ["is_localization"]], ["add", "theorem", "exists_integer_multiple", ["is_localization"]], ["add", "theorem", "integer_normalization_aeval_eq_zero", ["is_localization"]], ["add", "theorem", "integer_normalization_coeff", ["is_localization"]], ["add", "theorem", "integer_normalization_eval₂_eq_zero", ["is_localization"]], ["add", "theorem", "integer_normalization_map_to_map", ["is_localization"]], ["add", "theorem", "integer_normalization_spec", ["is_localization"]], ["add", "def", "integral_domain_localization", ["is_localization"]], ["add", "def", "integral_domain_of_le_non_zero_divisors", ["is_localization"]], ["add", "def", "is_integer", ["is_localization"]], ["add", "theorem", "is_integer_add", ["is_localization"]], ["add", "theorem", "is_integer_mul", ["is_localization"]], ["add", "theorem", "is_integer_one", ["is_localization"]], ["add", "theorem", "is_integer_smul", ["is_localization"]], ["add", "theorem", "is_integer_zero", ["is_localization"]], ["add", "theorem", "is_noetherian_ring", ["is_localization"]], ["add", "theorem", "is_prime_iff_is_prime_disjoint", ["is_localization"]], ["add", "theorem", "is_prime_of_is_prime_disjoint", ["is_localization"]], ["add", "theorem", "is_unit_comp", ["is_localization"]], ["add", "theorem", "lift_comp", ["is_localization"]], ["add", "theorem", "lift_eq", ["is_localization"]], ["add", "theorem", "lift_eq_iff", ["is_localization"]], ["add", "theorem", "lift_id", ["is_localization"]], ["add", "theorem", "lift_injective_iff", ["is_localization"]], ["add", "theorem", "lift_mk'", ["is_localization"]], ["add", "theorem", "lift_mk'_spec", ["is_localization"]], ["add", "theorem", "lift_of_comp", ["is_localization"]], ["add", "theorem", "lift_surjective_iff", ["is_localization"]], ["add", "theorem", "lift_unique", ["is_localization"]], ["add", "theorem", "map_comap", ["is_localization"]], ["add", "theorem", "map_comp", ["is_localization"]], ["add", "theorem", "map_comp_map", ["is_localization"]], ["add", "theorem", "map_eq", ["is_localization"]], ["add", "theorem", "map_id", ["is_localization"]], ["add", "theorem", "map_injective_of_injective", ["is_localization"]], ["add", "theorem", "map_left_cancel", ["is_localization"]], ["add", "theorem", "map_map", ["is_localization"]], ["add", "theorem", "map_mk'", ["is_localization"]], ["add", "theorem", "map_right_cancel", ["is_localization"]], ["add", "theorem", "map_smul", ["is_localization"]], ["add", "theorem", "map_unique", ["is_localization"]], ["add", "theorem", "mem_coe_submodule", ["is_localization"]], ["add", "theorem", "mem_map_algebra_map_iff", ["is_localization"]], ["add", "theorem", "mk'_add", ["is_localization"]], ["add", "theorem", "mk'_eq_iff_eq", ["is_localization"]], ["add", "theorem", "mk'_eq_iff_eq_mul", ["is_localization"]], ["add", "theorem", "mk'_eq_iff_mk'_eq", ["is_localization"]], ["add", "theorem", "mk'_eq_mul_mk'_one", ["is_localization"]], ["add", "theorem", "mk'_eq_of_eq", ["is_localization"]], ["add", "theorem", "mk'_mem_iff", ["is_localization"]], ["add", "theorem", "mk'_mul", ["is_localization"]], ["add", "theorem", "mk'_mul_cancel_left", ["is_localization"]], ["add", "theorem", "mk'_mul_cancel_right", ["is_localization"]], ["add", "theorem", "mk'_mul_mk'_eq_one'", ["is_localization"]], ["add", "theorem", "mk'_mul_mk'_eq_one", ["is_localization"]], ["add", "theorem", "mk'_one", ["is_localization"]], ["add", "theorem", "mk'_sec", ["is_localization"]], ["add", "theorem", "mk'_self''", ["is_localization"]], ["add", "theorem", "mk'_self'", ["is_localization"]], ["add", "theorem", "mk'_self", ["is_localization"]], ["add", "theorem", "mk'_spec'", ["is_localization"]], ["add", "theorem", "mk'_spec", ["is_localization"]], ["add", "theorem", "mk'_surjective", ["is_localization"]], ["add", "theorem", "mul_mk'_eq_mk'_of_mul", ["is_localization"]], ["add", "def", "order_embedding", ["is_localization"]], ["add", "def", "order_iso_of_prime", ["is_localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq", ["is_localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq_map", ["is_localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_mk'", ["is_localization"]], ["add", "theorem", "sec_spec'", ["is_localization"]], ["add", "theorem", "sec_spec", ["is_localization"]], ["add", "theorem", "surjective_quotient_map_of_maximal_of_localization", ["is_localization"]], ["add", "def", "to_localization_map", ["is_localization"]], ["add", "theorem", "to_localization_map_sec", ["is_localization"]], ["add", "theorem", "to_localization_map_to_map", ["is_localization"]], ["add", "theorem", "to_localization_map_to_map_apply", ["is_localization"]], ["add", "theorem", "to_map_eq_zero_iff", ["is_localization"]], ["add", "theorem", "alg_equiv_mk'", ["localization"]], ["add", "theorem", "alg_equiv_mk", ["localization"]], ["del", "theorem", "alg_equiv_of_quotient_apply", ["localization"]], ["del", "theorem", "alg_equiv_of_quotient_symm_apply", ["localization"]], ["add", "theorem", "alg_equiv_symm_mk'", ["localization"]], ["add", "theorem", "alg_equiv_symm_mk", ["localization"]], ["del", "def", "at_prime", ["localization"]], ["del", "theorem", "mk_eq_mk'", ["localization", "away"]], ["del", "def", "of", ["localization", "away"]], ["add", "theorem", "le_comap_prime_compl_iff", ["localization"]], ["mod", "theorem", "local_ring_hom_comp", ["localization"]], ["mod", "theorem", "local_ring_hom_mk'", ["localization"]], ["mod", "theorem", "local_ring_hom_to_map", ["localization"]], ["mod", "theorem", "local_ring_hom_unique", ["localization"]], ["mod", "theorem", "mk_eq_mk'", ["localization"]], ["mod", "theorem", "mk_eq_mk'_apply", ["localization"]], ["add", "theorem", "mk_one_eq_algebra_map", ["localization"]], ["del", "theorem", "mk_one_eq_of", ["localization"]], ["add", "theorem", "monoid_of_eq_algebra_map", ["localization"]], ["del", "theorem", "monoid_of_eq_of", ["localization"]], ["del", "def", "of", ["localization"]], ["del", "theorem", "ring_equiv_of_quotient_apply", ["localization"]], ["del", "theorem", "ring_equiv_of_quotient_mk'", ["localization"]], ["del", "theorem", "ring_equiv_of_quotient_mk", ["localization"]], ["del", "theorem", "ring_equiv_of_quotient_of", ["localization"]], ["del", "theorem", "ring_equiv_of_quotient_symm_mk'", ["localization"]], ["del", "theorem", "ring_equiv_of_quotient_symm_mk", ["localization"]], ["del", "theorem", "ring_equiv_of_quotient_symm_of", ["localization"]], ["del", "theorem", "algebra_map_eq", ["localization_map"]], ["del", "theorem", "is_unit_mk'_iff", ["localization_map", "at_prime"]], ["del", "theorem", "is_unit_to_map_iff", ["localization_map", "at_prime"]], ["del", "theorem", "mk'_mem_maximal_iff", ["localization_map", "at_prime"]], ["del", "theorem", "to_map_mem_maximal_iff", ["localization_map", "at_prime"]], ["del", "def", "at_prime", ["localization_map"]], ["del", "theorem", "lift_comp", ["localization_map", "away_map"]], ["del", "theorem", "lift_eq", ["localization_map", "away_map"]], ["del", "def", "away_map", ["localization_map"]], ["del", "def", "codomain", ["localization_map"]], ["del", "def", "coe_submodule", ["localization_map"]], ["del", "theorem", "coeff_integer_normalization_mem_support", ["localization_map"]], ["del", "theorem", "coeff_integer_normalization_of_not_mem_support", ["localization_map"]], ["del", "theorem", "comap_map_of_is_prime_disjoint", ["localization_map"]], ["del", "theorem", "epic_of_localization_map", ["localization_map"]], ["del", "theorem", "eq_iff_eq", ["localization_map"]], ["del", "theorem", "eq_iff_exists", ["localization_map"]], ["del", "theorem", "eq_mk'_iff_mul_eq", ["localization_map"]], ["del", "theorem", "eq_of_eq", ["localization_map"]], ["del", "theorem", "eq_zero_of_fst_eq_zero", ["localization_map"]], ["del", "theorem", "exist_integer_multiples_of_finset", ["localization_map"]], ["del", "theorem", "exists_integer_multiple'", ["localization_map"]], ["del", "theorem", "exists_integer_multiple", ["localization_map"]], ["del", "theorem", "ext", ["localization_map"]], ["del", "theorem", "ext_iff", ["localization_map"]], ["del", "theorem", "injective", ["localization_map"]], ["del", "theorem", "integer_normalization_aeval_eq_zero", ["localization_map"]], ["del", "theorem", "integer_normalization_coeff", ["localization_map"]], ["del", "theorem", "integer_normalization_eval₂_eq_zero", ["localization_map"]], ["del", "theorem", "integer_normalization_map_to_map", ["localization_map"]], ["del", "theorem", "integer_normalization_spec", ["localization_map"]], ["del", "def", "integral_domain_localization", ["localization_map"]], ["del", "def", "integral_domain_of_le_non_zero_divisors", ["localization_map"]], ["del", "def", "is_integer", ["localization_map"]], ["del", "theorem", "is_integer_add", ["localization_map"]], ["del", "theorem", "is_integer_mul", ["localization_map"]], ["del", "theorem", "is_integer_one", ["localization_map"]], ["del", "theorem", "is_integer_smul", ["localization_map"]], ["del", "theorem", "is_integer_zero", ["localization_map"]], ["del", "theorem", "is_noetherian_ring", ["localization_map"]], ["del", "theorem", "is_prime_iff_is_prime_disjoint", ["localization_map"]], ["del", "theorem", "is_prime_of_is_prime_disjoint", ["localization_map"]], ["del", "theorem", "is_unit_comp", ["localization_map"]], ["del", "theorem", "lift_comp", ["localization_map"]], ["del", "theorem", "lift_eq", ["localization_map"]], ["del", "theorem", "lift_eq_iff", ["localization_map"]], ["del", "theorem", "lift_id", ["localization_map"]], ["del", "theorem", "lift_injective_iff", ["localization_map"]], ["del", "theorem", "lift_left_inverse", ["localization_map"]], ["del", "theorem", "lift_mk'", ["localization_map"]], ["del", "theorem", "lift_mk'_spec", ["localization_map"]], ["del", "theorem", "lift_of_comp", ["localization_map"]], ["del", "theorem", "lift_surjective_iff", ["localization_map"]], ["del", "theorem", "lift_unique", ["localization_map"]], ["del", "def", "lin_coe", ["localization_map"]], ["del", "theorem", "lin_coe_apply", ["localization_map"]], ["del", "theorem", "map_comap", ["localization_map"]], ["del", "theorem", "map_comp", ["localization_map"]], ["del", "theorem", "map_comp_map", ["localization_map"]], ["del", "theorem", "map_eq", ["localization_map"]], ["del", "theorem", "map_id", ["localization_map"]], ["del", "theorem", "map_left_cancel", ["localization_map"]], ["del", "theorem", "map_map", ["localization_map"]], ["del", "theorem", "map_mk'", ["localization_map"]], ["del", "theorem", "map_right_cancel", ["localization_map"]], ["del", "theorem", "map_smul", ["localization_map"]], ["del", "theorem", "map_unique", ["localization_map"]], ["del", "theorem", "map_units", ["localization_map"]], ["del", "theorem", "mem_coe_submodule", ["localization_map"]], ["del", "theorem", "mem_map_to_map_iff", ["localization_map"]], ["del", "theorem", "mk'_add", ["localization_map"]], ["del", "theorem", "mk'_eq_iff_eq", ["localization_map"]], ["del", "theorem", "mk'_eq_iff_eq_mul", ["localization_map"]], ["del", "theorem", "mk'_eq_iff_mk'_eq", ["localization_map"]], ["del", "theorem", "mk'_eq_mul_mk'_one", ["localization_map"]], ["del", "theorem", "mk'_eq_of_eq", ["localization_map"]], ["del", "theorem", "mk'_mem_iff", ["localization_map"]], ["del", "theorem", "mk'_mul", ["localization_map"]], ["del", "theorem", "mk'_mul_cancel_left", ["localization_map"]], ["del", "theorem", "mk'_mul_cancel_right", ["localization_map"]], ["del", "theorem", "mk'_mul_mk'_eq_one'", ["localization_map"]], ["del", "theorem", "mk'_mul_mk'_eq_one", ["localization_map"]], ["del", "theorem", "mk'_one", ["localization_map"]], ["del", "theorem", "mk'_sec", ["localization_map"]], ["del", "theorem", "mk'_self''", ["localization_map"]], ["del", "theorem", "mk'_self'", ["localization_map"]], ["del", "theorem", "mk'_self", ["localization_map"]], ["del", "theorem", "mk'_spec'", ["localization_map"]], ["del", "theorem", "mk'_spec", ["localization_map"]], ["del", "theorem", "mk'_surjective", ["localization_map"]], ["del", "theorem", "mul_mk'_eq_mk'_of_mul", ["localization_map"]], ["del", "theorem", "of_id", ["localization_map"]], ["del", "def", "order_embedding", ["localization_map"]], ["del", "def", "order_iso_of_prime", ["localization_map"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq", ["localization_map"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq_map", ["localization_map"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq_map_apply", ["localization_map"]], ["del", "theorem", "ring_equiv_of_ring_equiv_mk'", ["localization_map"]], ["del", "theorem", "sec_spec'", ["localization_map"]], ["del", "theorem", "sec_spec", ["localization_map"]], ["del", "theorem", "surj", ["localization_map"]], ["del", "theorem", "surjective_quotient_map_of_maximal_of_localization", ["localization_map"]], ["del", "def", "to_map", ["localization_map"]], ["del", "theorem", "to_map_eq_zero_iff", ["localization_map"]], ["del", "theorem", "to_map_injective", ["localization_map"]], ["del", "structure", "localization_map", []], ["del", "theorem", "map_injective_of_injective", []], ["del", "def", "to_localization_map", ["ring_hom"]], ["del", "def", "to_ring_localization", ["submonoid", "localization_map"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["mod", "theorem", "cyclotomic_eq_prod_X_pow_sub_one_pow_moebius", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": [["mod", "theorem", "denom_dvd_of_is_root", []], ["mod", "theorem", "is_integer_of_is_root_of_monic", []], ["mod", "theorem", "num_dvd_of_is_root", []], ["mod", "theorem", "integer_of_integral", ["unique_factorization_monoid"]], ["mod", "theorem", "integrally_closed", ["unique_factorization_monoid"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1625491674, "sha": "6bad4c61", "message": "feat(ring_theory/trace): the composition of `trace`s is `trace` (#8078)\nA little group of lemmas from the Dedekind domain project.", "changes": [{"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "trace_apply", ["algebra"]], ["add", "theorem", "trace_comp_trace", ["algebra"]], ["add", "theorem", "trace_comp_trace_of_basis", ["algebra"]], ["add", "theorem", "trace_trace", ["algebra"]], ["add", "theorem", "trace_trace_of_basis", ["algebra"]]]}]}, {"timestamp": 1625486091, "sha": "8ba94ab7", "message": "chore(algebra/invertible): units coerced to their monoid are invertible (#8195)", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "inv_of_units", []], ["add", "def", "invertible", ["units"]]]}]}, {"timestamp": 1625480954, "sha": "63c8d333", "message": "feat(linear_algebra/matrix/reindex): generalize reindex_linear_equiv to operate on an arbitrary ring (#8159)\nThis changes `reindex_linear_equiv eₘ eₙ : matrix m m R ≃ₗ[R] matrix n n R` to `reindex_linear_equiv R A eₘ eₙ : matrix m m A ≃ₗ[R] matrix n n A`, which both works for a larger range of types, and eliminates the need for type ascriptions that was previously caused by the implicitness of `R`.\nWe cannot yet make the same generalization for `reindex_alg_equiv` as the `algebra R (matrix m m A)` structure implied by `algebra R A` is not in mathlib yet.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": [["mod", "theorem", "det_reindex_alg_equiv", ["matrix"]], ["mod", "theorem", "det_reindex_linear_equiv_self", ["matrix"]], ["mod", "theorem", "mul_reindex_linear_equiv_one", ["matrix"]], ["mod", "def", "reindex_alg_equiv", ["matrix"]], ["mod", "theorem", "reindex_alg_equiv_apply", ["matrix"]], ["mod", "theorem", "reindex_alg_equiv_mul", ["matrix"]], ["mod", "theorem", "reindex_alg_equiv_refl", ["matrix"]], ["mod", "theorem", "reindex_alg_equiv_symm", ["matrix"]], ["mod", "def", "reindex_linear_equiv", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_apply", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_comp", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_comp_apply", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_mul", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_one", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_refl_refl", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_symm", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_trans", ["matrix"]]]}]}, {"timestamp": 1625478992, "sha": "a8f60ebc", "message": "feat(algebra/lie/free): the universal enveloping algebra of the free Lie algebra is the free associative algebra (#8183)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "coe_id", ["lie_hom"]], ["add", "theorem", "coe_one", ["lie_hom"]], ["add", "theorem", "comp_id", ["lie_hom"]], ["add", "theorem", "congr_fun", ["lie_hom"]], ["add", "def", "id", ["lie_hom"]], ["add", "theorem", "id_apply", ["lie_hom"]], ["add", "theorem", "id_comp", ["lie_hom"]], ["add", "theorem", "one_apply", ["lie_hom"]], ["add", "theorem", "to_fun_eq_coe", ["lie_hom"]]]}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": [["add", "def", "universal_enveloping_equiv_free_algebra", ["free_lie_algebra"]]]}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "theorem", "coe_to_lie_hom", ["alg_hom"]], ["add", "def", "to_lie_hom", ["alg_hom"]], ["add", "theorem", "to_lie_hom_apply", ["alg_hom"]], ["add", "theorem", "to_lie_hom_coe", ["alg_hom"]], ["add", "theorem", "to_lie_hom_comp", ["alg_hom"]], ["add", "theorem", "to_lie_hom_id", ["alg_hom"]], ["add", "theorem", "to_lie_hom_injective", ["alg_hom"]], ["del", "def", "of_associative_algebra_hom", ["lie_algebra"]], ["del", "theorem", "of_associative_algebra_hom_apply", ["lie_algebra"]], ["del", "theorem", "of_associative_algebra_hom_comp", ["lie_algebra"]], ["del", "theorem", "of_associative_algebra_hom_id", ["lie_algebra"]]]}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}]}, {"timestamp": 1625416154, "sha": "4ace3b73", "message": "feat(measure_theory/conditional_expectation): define the Lp subspace of functions measurable wrt a sigma-algebra, prove completeness (#7945)\nThis is the first step towards defining the conditional expectation:\n- in this PR a subspace of L^p is shown to be complete, which is necessary to define an orthogonal projection on that subspace;\n- the conditional expectation of functions in L^2 will be the orthogonal projection;\n- the definition will be extended to L^1 through simple functions (as is done for the integral definition).", "changes": [{"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "range_eq_univ", ["linear_isometry_equiv"]]]}, {"oldPath": "src/measure_theory/arithmetic.lean", "newPath": "src/measure_theory/arithmetic.lean", "changes": [["add", "theorem", "ae_eq_trim_of_measurable", []]]}, {"oldPath": null, "newPath": "src/measure_theory/conditional_expectation.lean", "changes": [["add", "theorem", "ae_measurable'", ["measure_theory", "Lp_meas"]], ["add", "def", "Lp_meas", ["measure_theory"]], ["add", "theorem", "Lp_meas_coe", ["measure_theory"]], ["add", "def", "Lp_meas_to_Lp_trim", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_add", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_ae_eq", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_left_inv", ["measure_theory"]], ["add", "def", "Lp_meas_to_Lp_trim_lie", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_norm_map", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_right_inv", ["measure_theory"]], ["add", "theorem", "Lp_meas_to_Lp_trim_smul", ["measure_theory"]], ["add", "def", "Lp_trim_to_Lp_meas", ["measure_theory"]], ["add", "theorem", "Lp_trim_to_Lp_meas_ae_eq", ["measure_theory"]], ["add", "theorem", "add", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "congr", ["measure_theory", "ae_measurable'"]], ["add", "theorem", "const_smul", ["measure_theory", "ae_measurable'"]], ["add", "def", "ae_measurable'", ["measure_theory"]], ["add", "theorem", "ae_measurable'_of_ae_measurable'_trim", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_iff_ae_measurable'", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_self", ["measure_theory"]], ["add", "theorem", "mem_Lp_meas_to_Lp_of_trim", ["measure_theory"]], ["add", "theorem", "mem_ℒp_trim_of_mem_Lp_meas", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "ess_sup_trim", ["measure_theory"]], ["mod", "theorem", "limsup_trim", ["measure_theory"]], ["add", "theorem", "mem_ℒp_of_mem_ℒp_trim", ["measure_theory"]], ["mod", "theorem", "snorm'_trim", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_trim", ["measure_theory"]], ["mod", "theorem", "snorm_trim", ["measure_theory"]], ["add", "theorem", "snorm_trim_ae", ["measure_theory"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "complete_space_iff", ["isometric"]]]}]}, {"timestamp": 1625411945, "sha": "01b062a1", "message": "chore(category_theory/abelian/diagram_lemmas/four): Make the diagram into a code block (#8192)\nCurrently on mathlib docs, it looks like this\n![image](https://user-images.githubusercontent.com/15098580/124386872-4c869d00-dcd4-11eb-9c5c-ce6a29e4e607.png)\nMaking it into a code block should mean that it will render correctly on mathlib docs", "changes": [{"oldPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": []}]}, {"timestamp": 1625406861, "sha": "d819e364", "message": "feat(data/finset/basic): sdiff_val, disjoint_to_finset_iff_disjoint (#8168)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "sdiff_val", ["finset"]], ["add", "theorem", "disjoint_to_finset_iff_disjoint", ["list"]], ["mod", "theorem", "disjoint_to_finset", ["multiset"]]]}]}, {"timestamp": 1625404809, "sha": "2ebd96c2", "message": "doc(measure_theory/measurable_space): correct tiny misprints in two doc-strings (#8187)\nModifying doc-strings of `measurable_space.comap` and `measurable_space.map`: changing \"measure space\" to \"measurable space\" in both.", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}]}, {"timestamp": 1625399370, "sha": "7135c96f", "message": "chore(data/list/perm): make `perm_nil` a simp lemma (#8191)", "changes": [{"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "nil_perm", ["list"]]]}]}, {"timestamp": 1625391033, "sha": "a9db7ced", "message": "chore(measure_theory/{bochner_integration, simple_func_dense}): Move construction of embedding of L1 simple funcs (#8185)\nAt the moment, there is a low-level construction in `measure_theory/simple_func_dense` for the approximation of an element of L1 by simple functions, and this is generalized to a more abstract version (with a normed space `L1.simple_func` and a dense linear embedding of this into `L1`) in `measure_theory/bochner_integration`. #8114 generalized the low-level construction, and I am thinking of rewriting the more abstract version to apply to `Lp`, too.\nBut since this will all be more generally useful than in the construction of the Bochner integral, and since the Bochner integral file is very long, I propose moving all this material into `measure_theory/simple_func_dense`. This PR shows what it would look like. There are no mathematical changes.", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["del", "theorem", "add_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_add", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_coe", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_neg", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_smul", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_sub", ["measure_theory", "L1", "simple_func"]], ["del", "def", "coe_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "coe_zero", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "dist_eq", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "dist_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "edist_eq", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "lintegral_edist_to_simple_func_lt_top", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "neg_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "norm_eq", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "norm_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "norm_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "smul_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "sub_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "def", "to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_add", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_eq_mk", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_eq_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_neg", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_smul", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_sub", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_L1_zero", ["measure_theory", "L1", "simple_func"]], ["del", "def", "to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "to_simple_func_to_L1", ["measure_theory", "L1", "simple_func"]], ["del", "theorem", "zero_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["del", "def", "simple_func", ["measure_theory", "L1"]], ["del", "theorem", "exists_forall_norm_le", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "integrable_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_of_finite_measure", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_preimage_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["del", "theorem", "measure_preimage_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_iff_integrable", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_of_finite_measure", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_of_finite_measure_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_top", ["measure_theory", "simple_func"]], ["del", "theorem", "mem_ℒp_zero", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["del", "theorem", "induction", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["add", "theorem", "add_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_add", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_coe", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_neg", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_smul", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_sub", ["measure_theory", "L1", "simple_func"]], ["add", "def", "coe_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_zero", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "dist_eq", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "dist_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "edist_eq", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "lintegral_edist_to_simple_func_lt_top", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "neg_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_eq", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "smul_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "sub_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "def", "to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_add", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_eq_mk", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_eq_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_neg", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_smul", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_sub", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_zero", ["measure_theory", "L1", "simple_func"]], ["add", "def", "to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_simple_func_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "zero_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "def", "simple_func", ["measure_theory", "L1"]], ["add", "theorem", "induction", ["measure_theory", "integrable"]], ["add", "theorem", "exists_forall_norm_le", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "integrable_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_of_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_preimage_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_preimage_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_of_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_of_finite_measure_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_top", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_zero", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1625391032, "sha": "180d004c", "message": "ci(.github/workflows/*): switch to self-hosted runners (#8177)\nWith this PR, mathlib builds on all branches will use the self-hosted runners that have the \"pr\" tag. One self-hosted runner is reserved for bors staging branch builds and does not have that tag.\nThe `build_fork` workflow has been added for use by external forks (and other Lean projects which might want to copy mathlib's CI).", "changes": [{"oldPath": ".github/workflows/bors.yml", "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml.in", "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/build_fork.yml", "changes": []}, {"oldPath": ".github/workflows/mk_build_yml.sh", "newPath": ".github/workflows/mk_build_yml.sh", "changes": []}, {"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}]}, {"timestamp": 1625385513, "sha": "863f0075", "message": "feat(data/list/basic): map_permutations (#8188)\nAs [requested on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/perm.20of.20permutations/near/244821779).", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "foldr_permutations_aux2", ["list"]], ["add", "theorem", "length_foldr_permutations_aux2'", ["list"]], ["add", "theorem", "length_foldr_permutations_aux2", ["list"]], ["add", "theorem", "length_permutations_aux2", ["list"]], ["add", "theorem", "map_bind", ["list"]], ["add", "theorem", "map_permutations", ["list"]], ["add", "theorem", "map_permutations_aux2'", ["list"]], ["add", "theorem", "map_permutations_aux2", ["list"]], ["add", "theorem", "map_permutations_aux", ["list"]], ["add", "theorem", "mem_foldr_permutations_aux2", ["list"]], ["add", "theorem", "mem_permutations_aux2'", ["list"]], ["add", "theorem", "mem_permutations_aux2", ["list"]], ["add", "theorem", "permutations_aux2_append", ["list"]], ["add", "theorem", "permutations_aux2_fst", ["list"]], ["add", "theorem", "permutations_aux2_snd_cons", ["list"]], ["add", "theorem", "permutations_aux2_snd_nil", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["del", "theorem", "foldr_permutations_aux2", ["list"]], ["del", "theorem", "length_foldr_permutations_aux2'", ["list"]], ["del", "theorem", "length_foldr_permutations_aux2", ["list"]], ["del", "theorem", "length_permutations_aux2", ["list"]], ["del", "theorem", "mem_foldr_permutations_aux2", ["list"]], ["del", "theorem", "mem_permutations_aux2'", ["list"]], ["del", "theorem", "mem_permutations_aux2", ["list"]], ["del", "theorem", "permutations_aux2_append", ["list"]], ["del", "theorem", "permutations_aux2_fst", ["list"]], ["del", "theorem", "permutations_aux2_snd_cons", ["list"]], ["del", "theorem", "permutations_aux2_snd_nil", ["list"]]]}]}, {"timestamp": 1625365605, "sha": "cdb44dfa", "message": "chore(scripts): update nolints.txt (#8189)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625330011, "sha": "531d8504", "message": "feat(category_theory): left-derived functors (#7487)\n# Left-derived functors\nWe define the left-derived functors `F.left_derived n : C ⥤ D` for any additive functor `F`\nout of a category with projective resolutions.\nThe definition is\n```\nprojective_resolutions C ⋙ F.map_homotopy_category _ ⋙ homotopy_category.homology_functor D _ n\n```\nthat is, we pick a projective resolution (thought of as an object of the homotopy category),\nwe apply `F` objectwise, and compute `n`-th homology.\nWe show that these left-derived functors can be calculated\non objects using any choice of projective resolution,\nand on morphisms by any choice of lift to a chain map between chosen projective resolutions.\nSimilarly we define natural transformations between left-derived functors coming from\nnatural transformations between the original additive functors,\nand show how to compute the components.\n## Implementation\nWe don't assume the categories involved are abelian\n(just preadditive, and have equalizers, cokernels, and image maps),\nor that the functors are right exact.\nNone of these assumptions are needed yet.\nIt is often convenient, of course, to work with `[abelian C] [enough_projectives C] [abelian D]`\nwhich (assuming the results from `category_theory.abelian.projective`) are enough to\nprovide all the typeclass hypotheses assumed here.", "changes": [{"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["mod", "def", "homology_functor", []]]}, {"oldPath": null, "newPath": "src/category_theory/derived.lean", "changes": [["add", "def", "left_derived", ["category_theory", "functor"]], ["add", "theorem", "left_derived_map_eq", ["category_theory", "functor"]], ["add", "def", "left_derived_obj_iso", ["category_theory", "functor"]], ["add", "def", "left_derived_obj_projective_succ", ["category_theory", "functor"]], ["add", "def", "left_derived_obj_projective_zero", ["category_theory", "functor"]], ["add", "def", "left_derived", ["category_theory", "nat_trans"]], ["add", "theorem", "left_derived_comp", ["category_theory", "nat_trans"]], ["add", "theorem", "left_derived_eq", ["category_theory", "nat_trans"]], ["add", "theorem", "left_derived_id", ["category_theory", "nat_trans"]]]}]}, {"timestamp": 1625317716, "sha": "74a0f67b", "message": "refactor(measure_theory/simple_func_dense): generalize approximation results from L^1 to L^p (#8114)\nSimple functions are dense in L^p. The argument for `1 ≤ p < ∞` is exactly the same as for `p = 1`, which was already in mathlib: construct a suitable sequence of pointwise approximations and apply the Dominated Convergence Theorem. This PR refactors to provide the general-`p` result.\nThe argument for `p = ∞` requires finite-dimensionality of `E` and a different approximating sequence, so is left for another PR.", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "tendsto_Lp_iff_tendsto_ℒp''", ["measure_theory", "Lp"]], ["mod", "theorem", "tendsto_Lp_iff_tendsto_ℒp'", ["measure_theory", "Lp"]], ["mod", "theorem", "tendsto_Lp_iff_tendsto_ℒp", ["measure_theory", "Lp"]], ["add", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm_lt_top", ["measure_theory"]], ["add", "theorem", "snorm_lt_top_iff_lintegral_rpow_nnnorm_lt_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["add", "theorem", "mem_ℒp_approx_on", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_approx_on_univ", ["measure_theory", "simple_func"]], ["add", "theorem", "nnnorm_approx_on_le", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_approx_on_y₀_le", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_L1_edist", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_L1_nnnorm", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_Lp_snorm", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_L1_edist", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_L1_nnnorm", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_Lp", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_Lp_snorm", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1625309209, "sha": "a022bb75", "message": "feat(algebra/invertible): add a missing lemma `inv_of_eq_left_inv` (#8179)\nadd \"inv_of_eq_left_inv\"", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "inv_of_eq_left_inv", []]]}]}, {"timestamp": 1625309208, "sha": "111ac5ca", "message": "feat(group_theory/perm/basic): of_subtype_apply_of_mem (#8174)", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["mod", "theorem", "of_subtype_apply_coe", ["equiv", "perm"]], ["add", "theorem", "of_subtype_apply_of_mem", ["equiv", "perm"]]]}]}, {"timestamp": 1625309207, "sha": "25d042c1", "message": "feat(algebra/periodic): a few more periodicity lemmas (#8062)\nA few more lemmas about periodic functions that I realized are useful.", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "funext'", ["function", "antiperiodic"]], ["add", "theorem", "funext", ["function", "antiperiodic"]], ["add", "theorem", "funext", ["function", "periodic"]]]}]}, {"timestamp": 1625306285, "sha": "915902e6", "message": "feat(topology/algebra/multilinear): add a linear_equiv version of pi (#8064)\nThis is a weaker version of `continuous_multilinear_map.piₗᵢ` that requires weaker typeclasses.\nUnfortunately I don't understand why the typeclass system continues not to cooperate here, but I suspect it's the same class of problem that plagues `dfinsupp`.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["mod", "def", "comp_continuous_multilinear_map", ["continuous_linear_map"]], ["mod", "theorem", "comp_continuous_multilinear_map_coe", ["continuous_linear_map"]], ["mod", "theorem", "coe_pi", ["continuous_multilinear_map"]], ["mod", "def", "pi", ["continuous_multilinear_map"]], ["mod", "theorem", "pi_apply", ["continuous_multilinear_map"]], ["add", "def", "pi_equiv", ["continuous_multilinear_map"]], ["add", "def", "pi_linear_equiv", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1625281364, "sha": "edb72b44", "message": "docs(data/real/*): add module docstrings (#8145)", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}]}, {"timestamp": 1625263447, "sha": "10f6c2c4", "message": "feat(data/real/nnreal): cast_nat_abs_eq_nnabs_cast (#8121)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "cast_nat_abs_eq_nnabs_cast", []]]}]}, {"timestamp": 1625259513, "sha": "f8ca7902", "message": "chore(group_theory/congruence): fix docstring (#8162)\nThis fixes a docstring which didn't match the code.", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}]}, {"timestamp": 1625257284, "sha": "f5a8b8a6", "message": "fix(topology/continuous_function/basic): fix `continuous_map.id_coe` (#8180)", "changes": [{"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["mod", "theorem", "id_coe", ["continuous_map"]]]}]}, {"timestamp": 1625255160, "sha": "9e9dfc26", "message": "feat(category_theory/adjunction/fully_faithful): Converses to `unit_is_iso_of_L_fully_faithful` and `counit_is_iso_of_R_fully_faithful` (#8181)\nAdd a converse to `unit_is_iso_of_L_fully_faithful` and to `counit_is_iso_of_R_fully_faithful`", "changes": [{"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": [["add", "theorem", "L_faithful_of_unit_is_iso", ["category_theory"]], ["add", "def", "L_full_of_unit_is_iso", ["category_theory"]], ["add", "theorem", "R_faithful_of_counit_is_iso", ["category_theory"]], ["add", "def", "R_full_of_counit_is_iso", ["category_theory"]], ["add", "theorem", "inv_counit_map", ["category_theory"]], ["add", "theorem", "inv_map_unit", ["category_theory"]]]}]}, {"timestamp": 1625250576, "sha": "ea924e57", "message": "feat(data/nat/choose/bounds): exponential bounds on binomial coefficients (#8095)", "changes": [{"oldPath": null, "newPath": "src/combinatorics/choose/bounds.lean", "changes": [["add", "theorem", "choose_le_pow", []], ["add", "theorem", "pow_le_choose", []]]}]}, {"timestamp": 1625243854, "sha": "67c72b42", "message": "feat(data/list/cycle): lift next_prev to cycle (#8172)", "changes": [{"oldPath": "src/data/list/cycle.lean", "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "next_prev", ["cycle"]], ["add", "theorem", "prev_next", ["cycle"]]]}]}, {"timestamp": 1625223324, "sha": "d6a7c3bc", "message": "chore(algebra/algebra/basic): add `alg_hom.of_linear_map` and lemmas (#8151)\nThis lets me golf `complex.lift` a little", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "of_linear_map", ["alg_hom"]], ["add", "theorem", "of_linear_map_id", ["alg_hom"]], ["add", "theorem", "of_linear_map_to_linear_map", ["alg_hom"]], ["add", "theorem", "to_linear_map_id", ["alg_hom"]], ["add", "theorem", "to_linear_map_of_linear_map", ["alg_hom"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}]}, {"timestamp": 1625213975, "sha": "dfc42f96", "message": "feat(data/equiv/basic): swap_apply_ne_self_iff (#8167)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "swap_apply_ne_self_iff", ["equiv"]]]}]}, {"timestamp": 1625205387, "sha": "f5f8a20f", "message": "feat(analysis/calculus/fderiv_symmetric): prove that the second derivative is symmetric (#8104)\nWe show that, if a function is differentiable over the reals around a point `x`, and is second-differentiable at `x`, then the second derivative is symmetric. In fact, we even prove a stronger statement for functions differentiable within a convex set, to be able to apply it for functions on the half-plane or the quadrant.", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_o_const_const_iff", ["asymptotics"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv_symmetric.lean", "changes": [["add", "theorem", "is_o_alternate_sum_square", ["convex"]], ["add", "theorem", "second_derivative_within_at_symmetric", ["convex"]], ["add", "theorem", "second_derivative_within_at_symmetric_of_mem_interior", ["convex"]], ["add", "theorem", "taylor_approx_two_segment", ["convex"]], ["add", "theorem", "second_derivative_symmetric", []], ["add", "theorem", "second_derivative_symmetric_of_eventually", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "add_smul_mem", ["convex"]], ["add", "theorem", "add_smul_sub_mem", ["convex"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "add_smul_mem_interior", ["convex"]], ["add", "theorem", "add_smul_sub_mem_interior", ["convex"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "add_mem_ball_iff_norm", []], ["add", "theorem", "add_mem_closed_ball_iff_norm", []]]}]}, {"timestamp": 1625173828, "sha": "92b64a0d", "message": "feat(data/list/duplicate): prop that element is a duplicate (#7824)\nAs discussed in https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/nodup.20and.20decidability and #7587", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "sublist_nil_iff_eq_nil", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/duplicate.lean", "changes": [["add", "theorem", "duplicate_cons", ["list", "duplicate"]], ["add", "theorem", "elim_nil", ["list", "duplicate"]], ["add", "theorem", "elim_singleton", ["list", "duplicate"]], ["add", "theorem", "mem", ["list", "duplicate"]], ["add", "theorem", "mem_cons_self", ["list", "duplicate"]], ["add", "theorem", "mono_sublist", ["list", "duplicate"]], ["add", "theorem", "ne_nil", ["list", "duplicate"]], ["add", "theorem", "ne_singleton", ["list", "duplicate"]], ["add", "theorem", "not_nodup", ["list", "duplicate"]], ["add", "theorem", "of_duplicate_cons", ["list", "duplicate"]], ["add", "inductive", "duplicate", ["list"]], ["add", "theorem", "duplicate_cons_iff", ["list"]], ["add", "theorem", "duplicate_cons_iff_of_ne", ["list"]], ["add", "theorem", "duplicate_cons_self_iff", ["list"]], ["add", "theorem", "duplicate_iff_sublist", ["list"]], ["add", "theorem", "duplicate_iff_two_le_count", ["list"]], ["add", "theorem", "exists_duplicate_iff_not_nodup", ["list"]], ["add", "theorem", "duplicate_cons_self", ["list", "mem"]], ["add", "theorem", "nodup_iff_forall_not_duplicate", ["list"]], ["add", "theorem", "not_duplicate_nil", ["list"]], ["add", "theorem", "not_duplicate_singleton", ["list"]]]}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": [["add", "theorem", "duplicate_iff_exists_distinct_nth_le", ["list"]], ["add", "theorem", "sublist_iff_exists_fin_order_embedding_nth_le_eq", ["list"]], ["add", "theorem", "sublist_iff_exists_order_embedding_nth_eq", ["list"]], ["add", "theorem", "sublist_of_order_embedding_nth_eq", ["list"]]]}]}, {"timestamp": 1625168063, "sha": "5945ca39", "message": "chore(*): update to lean 3.31.0c (#8122)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/lazy_list.lean", "changes": [["add", "def", "append", ["lazy_list"]], ["add", "def", "approx", ["lazy_list"]], ["add", "def", "filter", ["lazy_list"]], ["add", "def", "for", ["lazy_list"]], ["add", "def", "head", ["lazy_list"]], ["add", "def", "join", ["lazy_list"]], ["add", "def", "map", ["lazy_list"]], ["add", "def", "map₂", ["lazy_list"]], ["add", "def", "nth", ["lazy_list"]], ["add", "def", "of_list", ["lazy_list"]], ["add", "def", "singleton", ["lazy_list"]], ["add", "def", "tail", ["lazy_list"]], ["add", "def", "to_list", ["lazy_list"]], ["add", "def", "zip", ["lazy_list"]], ["add", "inductive", "lazy_list", []]]}, {"oldPath": "src/data/lazy_list/basic.lean", "newPath": "src/data/lazy_list/basic.lean", "changes": []}]}, {"timestamp": 1625163323, "sha": "395d8716", "message": "chore(algebra/lie/free): tidy up after #8153 (#8163)\n@eric-wieser had some further comments and suggestions which didn't make it into #8153", "changes": [{"oldPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/free.lean", "newPath": "src/algebra/lie/free.lean", "changes": [["mod", "theorem", "hom_ext", ["free_lie_algebra"]], ["add", "theorem", "neg", ["free_lie_algebra", "rel"]]]}, {"oldPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "newPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "changes": [["mod", "def", "to_non_unital_alg_hom", ["lie_hom"]], ["add", "theorem", "to_non_unital_alg_hom_injective", ["lie_hom"]]]}]}, {"timestamp": 1625157426, "sha": "15712902", "message": "feat(logic/is_empty): add some simp lemmas and unique instances (#7832)\nThere are a handful of lemmas about `(h : ¬nonempty a)` that if restated in terms of `[is_empty a]` become suitable for `simp` or as `instance`s. This adjusts some of those lemmas.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "eq_empty_of_is_empty", ["finset"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "subsingleton_of_empty_left", ["matrix"]], ["mod", "theorem", "subsingleton_of_empty_right", ["matrix"]]]}, {"oldPath": "src/data/matrix/dmatrix.lean", "newPath": "src/data/matrix/dmatrix.lean", "changes": [["mod", "theorem", "subsingleton_of_empty_left", ["dmatrix"]], ["mod", "theorem", "subsingleton_of_empty_right", ["dmatrix"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_empty_of_is_empty", ["set"]], ["add", "def", "unique_empty", ["set"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": [["add", "theorem", "is_empty_of_false", ["subtype"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "filter_eq_bot_of_is_empty", ["filter"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "eq_zero_of_is_empty", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1625149164, "sha": "3d2e5ac2", "message": "chore(linear_algebra/matrix/determinant): golf a proof (#8157)", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}]}, {"timestamp": 1625149163, "sha": "ca30bd22", "message": "feat(analysis/fourier): span of monomials is dense in C^0 (#8035)\nProve that the span of the monomials `λ z, z ^ n` is dense in `C(circle, ℂ)`, i.e. that its `submodule.topological_closure` is `⊤`. This follows from the Stone-Weierstrass theorem after checking that it is a subalgebra, closed under conjugation, and\nseparates points.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "to_ring_hom_eq_coe", ["alg_hom"]]]}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": [["add", "def", "fourier_subalgebra", []], ["add", "theorem", "fourier_subalgebra_closure_eq_top", []], ["add", "theorem", "fourier_subalgebra_coe", []], ["add", "theorem", "fourier_subalgebra_conj_invariant", []], ["add", "theorem", "fourier_subalgebra_separates_points", []], ["add", "theorem", "span_fourier_closure_eq_top", []]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "mkₐ_ker", ["ideal", "quotient"]]]}]}, {"timestamp": 1625144310, "sha": "3fa61ea4", "message": "feat(algebra/lie/free): construction of free Lie algebras (#8153)", "changes": [{"oldPath": null, "newPath": "src/algebra/lie/free.lean", "changes": [["add", "theorem", "hom_ext", ["free_lie_algebra"]], ["add", "def", "lift", ["free_lie_algebra"]], ["add", "def", "lift_aux", ["free_lie_algebra"]], ["add", "theorem", "lift_aux_map_add", ["free_lie_algebra"]], ["add", "theorem", "lift_aux_map_mul", ["free_lie_algebra"]], ["add", "theorem", "lift_aux_map_smul", ["free_lie_algebra"]], ["add", "theorem", "lift_aux_spec", ["free_lie_algebra"]], ["add", "theorem", "lift_comp_of", ["free_lie_algebra"]], ["add", "theorem", "lift_of_apply", ["free_lie_algebra"]], ["add", "theorem", "lift_symm_apply", ["free_lie_algebra"]], ["add", "theorem", "lift_unique", ["free_lie_algebra"]], ["add", "def", "mk", ["free_lie_algebra"]], ["add", "def", "of", ["free_lie_algebra"]], ["add", "theorem", "of_comp_lift", ["free_lie_algebra"]], ["add", "theorem", "add_left", ["free_lie_algebra", "rel"]], ["add", "inductive", "rel", ["free_lie_algebra"]], ["add", "def", "free_lie_algebra", []]]}, {"oldPath": null, "newPath": "src/algebra/lie/non_unital_non_assoc_algebra.lean", "changes": [["add", "def", "to_non_unital_alg_hom", ["lie_hom"]], ["add", "def", "to_non_unital_non_assoc_semiring", ["lie_ring"]]]}, {"oldPath": "src/algebra/non_unital_alg_hom.lean", "newPath": "src/algebra/non_unital_alg_hom.lean", "changes": [["add", "theorem", "congr_fun", ["non_unital_alg_hom"]]]}]}, {"timestamp": 1625144309, "sha": "4d241724", "message": "docs(order/zorn): explain how to use Zorn's lemma (#8125)", "changes": [{"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}]}, {"timestamp": 1625144307, "sha": "7cbca35f", "message": "feat(data/fintype/intervals): fintype instances for set.{Icc,Ioc,Ioo} (#8123)", "changes": [{"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": [["add", "theorem", "Icc_ℤ_card", ["set"]], ["mod", "theorem", "Icc_ℤ_finite", ["set"]], ["add", "theorem", "Ioc_ℤ_card", ["set"]], ["mod", "theorem", "Ioc_ℤ_finite", ["set"]], ["add", "theorem", "Ioo_ℤ_card", ["set"]], ["mod", "theorem", "Ioo_ℤ_finite", ["set"]]]}]}, {"timestamp": 1625137836, "sha": "6e0d2d3b", "message": "feat(logic/basic): add two simp lemmas (#8148)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "iff_and_self", []], ["add", "theorem", "iff_self_and", []]]}]}, {"timestamp": 1625125715, "sha": "8986c4fd", "message": "chore(linear_algebra/matrix/determinant): squeeze some simps for speed up (#8156)\nI simply squeezed some simps in `linear_algebra/matrix/determinant` to obtain two much faster proofs.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews)", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}]}, {"timestamp": 1625125714, "sha": "582ee9ee", "message": "feat(logic/basic): subtype.subsingleton (#8138)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "subsingleton", ["subtype"]]]}]}, {"timestamp": 1625125713, "sha": "aabb900b", "message": "feat(order/preorder_hom): preorder_hom_eq_id (#8135)\nFrom LTE", "changes": [{"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": [["add", "theorem", "preorder_hom_eq_id", ["preorder_hom"]], ["add", "def", "unique", ["preorder_hom"]]]}]}, {"timestamp": 1625125712, "sha": "4a758765", "message": "feat(category_theory/limits/concrete_category): Some lemmas about limits in concrete categories (#8130)\nGeneralizes some lemmas from LTE. \nSee zulip discussion [here](https://leanprover.zulipchat.com/#narrow/stream/267928-condensed-mathematics/topic/for_mathlib.2Fwide_pullback/near/244298079).", "changes": [{"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["add", "theorem", "colimit_exists_rep", ["category_theory", "limits", "concrete"]], ["add", "theorem", "from_union_surjective_of_is_colimit", ["category_theory", "limits", "concrete"]], ["add", "theorem", "is_colimit_exists_rep", ["category_theory", "limits", "concrete"]], ["add", "theorem", "is_limit_ext", ["category_theory", "limits", "concrete"]], ["add", "theorem", "limit_ext", ["category_theory", "limits", "concrete"]], ["add", "theorem", "to_product_injective_of_is_limit", ["category_theory", "limits", "concrete"]], ["add", "theorem", "wide_pullback_ext'", ["category_theory", "limits", "concrete"]], ["add", "theorem", "wide_pullback_ext", ["category_theory", "limits", "concrete"]], ["add", "theorem", "wide_pushout_exists_rep'", ["category_theory", "limits", "concrete"]], ["add", "theorem", "wide_pushout_exists_rep", ["category_theory", "limits", "concrete"]]]}, {"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": []}]}, {"timestamp": 1625119932, "sha": "2df573a5", "message": "feat(data/int/basic): int.eq_zero_of_div_eq_zero (#8134)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1625106040, "sha": "b9722807", "message": "chore(scripts): update nolints.txt (#8155)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625088067, "sha": "0faf0864", "message": "feat(data/int/cast): cast_nat_abs (#8120)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "cast_nat_abs", ["int"]]]}]}, {"timestamp": 1625088066, "sha": "ad00a021", "message": "feat(topology/vector_bundle): `topological_vector_bundle_core` (#8089)\nAnalogous construction to `topological_fiber_bundle_core`. This construction gives a way to construct vector bundles from a structure registering how trivialization changes act on fibers.", "changes": [{"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "def", "base", ["topological_vector_bundle_core"]], ["add", "theorem", "coe_cord_change", ["topological_vector_bundle_core"]], ["add", "theorem", "continuous_proj", ["topological_vector_bundle_core"]], ["add", "theorem", "coord_change_linear_comp", ["topological_vector_bundle_core"]], ["add", "def", "fiber", ["topological_vector_bundle_core"]], ["add", "def", "index", ["topological_vector_bundle_core"]], ["add", "theorem", "is_open_map_proj", ["topological_vector_bundle_core"]], ["add", "def", "local_triv", ["topological_vector_bundle_core"]], ["add", "def", "local_triv_at", ["topological_vector_bundle_core"]], ["add", "theorem", "local_triv_at_apply", ["topological_vector_bundle_core"]], ["add", "theorem", "mem_local_triv_source", ["topological_vector_bundle_core"]], ["add", "theorem", "mem_source_at", ["topological_vector_bundle_core"]], ["add", "theorem", "mem_triv_change_source", ["topological_vector_bundle_core"]], ["add", "def", "proj", ["topological_vector_bundle_core"]], ["add", "def", "to_topological_vector_bundle_core", ["topological_vector_bundle_core"]], ["add", "def", "triv_change", ["topological_vector_bundle_core"]], ["add", "structure", "topological_vector_bundle_core", []]]}]}, {"timestamp": 1625085581, "sha": "e70093ff", "message": "feat(algebra/free_non_unital_non_assoc_algebra): construction of the free non-unital, non-associative algebra on a type `X` with coefficients in a semiring `R` (#8141)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/free_non_unital_non_assoc_algebra.lean", "changes": [["add", "theorem", "hom_ext", ["free_non_unital_non_assoc_algebra"]], ["add", "def", "lift", ["free_non_unital_non_assoc_algebra"]], ["add", "theorem", "lift_comp_of", ["free_non_unital_non_assoc_algebra"]], ["add", "theorem", "lift_of_apply", ["free_non_unital_non_assoc_algebra"]], ["add", "theorem", "lift_symm_apply", ["free_non_unital_non_assoc_algebra"]], ["add", "theorem", "lift_unique", ["free_non_unital_non_assoc_algebra"]], ["add", "def", "of", ["free_non_unital_non_assoc_algebra"]], ["add", "theorem", "of_comp_lift", ["free_non_unital_non_assoc_algebra"]], ["add", "def", "free_non_unital_non_assoc_algebra", []]]}]}, {"timestamp": 1625079210, "sha": "e7131068", "message": "docs(data/string/*): add module docstrings (#8144)", "changes": [{"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": []}]}, {"timestamp": 1625079209, "sha": "8ee29671", "message": "feat(algebra/big_operators/basic): nat_abs_sum_le (#8132)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "nat_abs_sum_le", []]]}]}, {"timestamp": 1625076201, "sha": "3a5851f0", "message": "feat(data/complex/module): add complex.lift to match zsqrtd.lift (#8107)\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/The.20unique.20.60.E2.84.82.20.E2.86.92.E2.82.90.5B.E2.84.9D.5D.20A.60.20given.20a.20square.20root.20of.20-1/near/244135262)", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "def", "lift_aux", ["complex"]], ["add", "theorem", "lift_aux_I", ["complex"]], ["add", "theorem", "lift_aux_apply", ["complex"]], ["add", "theorem", "lift_aux_apply_I", ["complex"]], ["add", "theorem", "lift_aux_neg_I", ["complex"]]]}]}, {"timestamp": 1625071753, "sha": "36c90d5e", "message": "fix(algebra/algebra/subalgebra): fix incorrect namespaces and remove duplicate instance (#8140)\nWe already had a `subsingleton` instance on `alg_hom`s added in #5672, but we didn't find it #8110 because\n* gh-6025 means we can't ask `apply_instance` to find it\n* it had an incorrect name in the wrong namespace\nCode opting into this instance will need to change from\n```lean\nlocal attribute [instance] alg_hom.subsingleton\n```\nto\n```lean\nlocal attribute [instance] alg_hom.subsingleton subalgebra.subsingleton_of_subsingleton\n```", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "subsingleton", ["alg_hom"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "subsingleton_left", ["alg_equiv"]], ["add", "theorem", "subsingleton_right", ["alg_equiv"]], ["add", "theorem", "subsingleton", ["alg_hom"]], ["del", "theorem", "subsingleton_left", ["subalgebra", "alg_equiv"]], ["del", "theorem", "subsingleton_right", ["subalgebra", "alg_equiv"]], ["del", "theorem", "subsingleton", ["subalgebra", "alg_hom"]]]}]}, {"timestamp": 1625071752, "sha": "d420db54", "message": "chore(algebra/algebra): trivial lemmas for alg_equiv (#8139)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_alg_hom_injective", ["alg_equiv"]], ["add", "theorem", "coe_alg_hom_of_alg_hom", ["alg_equiv"]], ["mod", "theorem", "coe_ring_equiv_injective", ["alg_equiv"]], ["add", "theorem", "of_alg_hom_coe_alg_hom", ["alg_equiv"]], ["add", "theorem", "of_alg_hom_symm", ["alg_equiv"]], ["del", "theorem", "of_linear_equiv_apply", ["alg_equiv"]], ["add", "theorem", "of_linear_equiv_symm", ["alg_equiv"]], ["del", "theorem", "to_linear_equiv_inj", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_injective", ["alg_equiv"]], ["del", "theorem", "to_linear_map_inj", ["alg_equiv"]], ["add", "theorem", "to_linear_map_injective", ["alg_equiv"]], ["del", "theorem", "to_linear_map_inj", ["alg_hom"]], ["add", "theorem", "to_linear_map_injective", ["alg_hom"]]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1625061066, "sha": "9c03c035", "message": "feat(data/set/basic): range_pair_subset (#8133)\nFrom LTE.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_pair_subset", ["set"]]]}]}, {"timestamp": 1625054800, "sha": "1de192f4", "message": "feat(algebra/ordered_ring): abs_cases lemma (#8124)\nThis lemma makes the following type of argument work seamlessly:\n```lean\nexample (h : x<-1/2) : |x + 1| < |x| := by cases abs_cases (x + 1); cases abs_cases x; linarith\n```", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "abs_cases", []]]}]}, {"timestamp": 1625052391, "sha": "db059004", "message": "feat(linear_algebra/clifford_algebra): two algebras are isomorphic if their quadratic forms are equivalent (#8128)", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": [["add", "def", "equiv_of_isometry", ["clifford_algebra"]], ["add", "theorem", "equiv_of_isometry_refl", ["clifford_algebra"]], ["add", "theorem", "equiv_of_isometry_symm", ["clifford_algebra"]], ["add", "theorem", "equiv_of_isometry_trans", ["clifford_algebra"]], ["add", "def", "map", ["clifford_algebra"]], ["add", "theorem", "map_apply_ι", ["clifford_algebra"]], ["add", "theorem", "map_comp_map", ["clifford_algebra"]], ["add", "theorem", "map_comp_ι", ["clifford_algebra"]], ["add", "theorem", "map_id", ["clifford_algebra"]]]}]}, {"timestamp": 1625043080, "sha": "9a8dcb9b", "message": "docs(data/dlist/basic): add module docstring (#8079)", "changes": [{"oldPath": "src/data/dlist/basic.lean", "newPath": "src/data/dlist/basic.lean", "changes": []}]}, {"timestamp": 1625027304, "sha": "eeeb2238", "message": "feat(data/int/basic): int.nat_abs_sub_le (#8118)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_sub_le", ["int"]]]}]}, {"timestamp": 1625027303, "sha": "af8a38fd", "message": "feat(algebra/{covariant_and_contravariant + ordered_monoid): add instance, golf, docs (#8067)\nIntroduce a missing instance for `comm_semigroup`s.\nAlso, golf a couple of proofs and add a relevant, explicit PR to a comment.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}]}, {"timestamp": 1625022814, "sha": "3ee436d2", "message": "docs(data/char): add module docstring (#8043)", "changes": [{"oldPath": "src/data/char.lean", "newPath": "src/data/char.lean", "changes": []}]}, {"timestamp": 1625018855, "sha": "8cacd99e", "message": "chore(scripts): update nolints.txt (#8131)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1625008900, "sha": "917bcd44", "message": "doc(topology/separation): module + lemma docs (#8091)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "compact_t2_tot_disc_iff_tot_sep", []]]}]}, {"timestamp": 1625008899, "sha": "2600baf0", "message": "docs(data/list/sections): add module docstring (#8033)", "changes": [{"oldPath": "src/data/list/sections.lean", "newPath": "src/data/list/sections.lean", "changes": []}]}, {"timestamp": 1625002587, "sha": "2c749b12", "message": "feat(algebra/to_additive): do not additivize operations on constant types (#7792)\n* Fixes #4210\n* Adds a heuristic to `@[to_additive]` that decides which multiplicative identifiers to replace with their additive counterparts. \n* See [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/to_additive.20and.20fixed.20types) thread or documentation for the precise heuristic.\n* We tag some types with `@[to_additive]`, so that they are handled correctly by the heurstic. These types `pempty`, `empty`, `unit` and `punit`.\n* We make the following change to enable to above bullet point: you are allowed to translate a declaration to itself, only if you write its name again as argument of the attribute (if you don't specify an argument we want to raise an error, since that likely is a mistake).\n* Because of this heuristic, all declarations with the `@[to_additive]` attribute should have a type with a multiplicative structure on it as its first argument. The first argument should not be an arbitrary indexing type. This means that in `finset.prod` and `finprod` we reorder the first two (implicit) arguments, so that the first argument is the codomain of the function.\n* This will eliminate many (but not all) type mismatches generated by `@[to_additive]`.\n* This heuristic doesn't catch all cases: for example, the declaration could have two type arguments with multiplicative structure, and the second one is `ℕ`, but the first one is a variable.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["del", "theorem", "eq_of_card_le_one_of_sum_eq", ["finset"]], ["del", "theorem", "eventually_constant_sum", ["finset"]], ["mod", "theorem", "prod_empty", ["finset"]], ["mod", "theorem", "prod_mk", ["finset"]], ["mod", "theorem", "sum_const_zero", ["finset"]], ["del", "theorem", "sum_flip", ["finset"]], ["del", "theorem", "sum_range_add", ["finset"]], ["del", "theorem", "sum_range_one", ["finset"]], ["del", "theorem", "sum_range_succ'", ["finset"]], ["del", "theorem", "sum_range_succ", ["finset"]], ["del", "theorem", "sum_range_succ_comm", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": [["mod", "structure", "value_type", ["to_additive"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}]}, {"timestamp": 1624998109, "sha": "e6ec9016", "message": "feat(ring_theory/power_basis): extensionality for algebra homs (#8110)\nThis PR shows two `alg_hom`s out of an algebra with a power basis are equal if the generator has the same image for both maps. It uses this result to bundle `power_basis.lift` into an equiv.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "subsingleton", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "alg_hom_ext", ["power_basis"]], ["mod", "theorem", "constr_pow_mul", ["power_basis"]], ["mod", "theorem", "equiv_aeval", ["power_basis"]], ["mod", "theorem", "equiv_gen", ["power_basis"]], ["mod", "theorem", "equiv_map", ["power_basis"]], ["mod", "theorem", "equiv_symm", ["power_basis"]], ["add", "theorem", "exists_eq_aeval'", ["power_basis"]], ["mod", "theorem", "lift_aeval", ["power_basis"]], ["mod", "theorem", "lift_gen", ["power_basis"]]]}]}, {"timestamp": 1624995474, "sha": "505c32f5", "message": "feat(analysis/normed_space/inner_product): the orthogonal projection is self adjoint (#8116)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "inner_orthogonal_projection_left_eq_right", []]]}]}, {"timestamp": 1624989299, "sha": "5ecd078d", "message": "feat(data/ordmap/ordset): Implement some more `ordset` functions (#8127)\nImplement (with proofs) `erase`, `map`, and `mem` for `ordset` in `src/data/ordmap` along with a few useful related proofs.", "changes": [{"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": [["add", "theorem", "valid", ["ordnode", "erase"]], ["add", "theorem", "valid", ["ordnode", "map"]], ["add", "theorem", "pos_size_of_mem", ["ordnode"]], ["add", "theorem", "size_erase_of_mem", ["ordnode"]], ["add", "theorem", "erase_aux", ["ordnode", "valid'"]], ["add", "theorem", "map_aux", ["ordnode", "valid'"]], ["add", "def", "erase", ["ordset"]], ["add", "def", "find", ["ordset"]], ["add", "def", "map", ["ordset"]], ["add", "def", "mem", ["ordset"]], ["add", "theorem", "pos_size_of_mem", ["ordset"]]]}]}, {"timestamp": 1624989298, "sha": "d558350f", "message": "feat(algebra/ordered_group): add a few instances, prune unneeded code (#8075)\nThis PR aims at shortening the subsequent `order` refactor.\nThe removed lemmas can now by proven as follows:\n```lean\n@[to_additive ordered_add_comm_group.add_lt_add_left]\nlemma ordered_comm_group.mul_lt_mul_left' (a b : α) (h : a < b) (c : α) : c * a < c * b :=\nmul_lt_mul_left' h c\n@[to_additive ordered_add_comm_group.le_of_add_le_add_left]\nlemma ordered_comm_group.le_of_mul_le_mul_left (h : a * b ≤ a * c) : b ≤ c :=\nle_of_mul_le_mul_left' h\n@[to_additive]\nlemma ordered_comm_group.lt_of_mul_lt_mul_left (h : a * b < a * c) : b < c :=\nlt_of_mul_lt_mul_left' h\n```\nThey were only used in this file and I replaced their appearances by the available proofs.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "le_of_mul_le_mul_left", ["ordered_comm_group"]], ["del", "theorem", "lt_of_mul_lt_mul_left", ["ordered_comm_group"]], ["del", "theorem", "mul_lt_mul_left'", ["ordered_comm_group"]]]}]}, {"timestamp": 1624989297, "sha": "bdf2d81e", "message": "feat(topology/continuous_function/stone_weierstrass): complex Stone-Weierstrass (#8012)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "continuous_abs", ["complex"]], ["add", "theorem", "continuous_norm_sq", ["complex"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "topological_closure_map", ["submodule"]], ["add", "theorem", "topological_closure_mono", ["submodule"]]]}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "comp_left_continuous_bounded_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "comp_left_continuous_compact_apply", ["continuous_linear_map"]], ["add", "theorem", "to_linear_comp_left_continuous_compact", ["continuous_linear_map"]], ["add", "theorem", "linear_isometry_bounded_of_compact_apply_apply", ["continuous_map"]], ["add", "theorem", "linear_isometry_bounded_of_compact_symm_apply", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": [["add", "def", "conj_invariant_subalgebra", ["continuous_map"]], ["add", "theorem", "mem_conj_invariant_subalgebra", ["continuous_map"]], ["add", "theorem", "subalgebra_complex_topological_closure_eq_top_of_separates_points", ["continuous_map"]], ["add", "theorem", "complex_to_real", ["subalgebra", "separates_points"]]]}]}, {"timestamp": 1624983094, "sha": "4cdfbd25", "message": "feat(data/setoid/partition): indexed partition (#7910)\nfrom LTE\nNote that data/setoid/partition.lean, which already existed before this\nPR, is currently not imported anywhere in mathlib. But it is used in LTE\nand will be used in the next PR, in relation to locally constant\nfunctions.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "eq_mk_iff_out", ["quotient"]], ["add", "theorem", "mk_eq_iff_out", ["quotient"]]]}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": [["mod", "theorem", "eq_rel", ["quotient"]], ["add", "theorem", "comap_rel", ["setoid"]], ["add", "theorem", "comm'", ["setoid"]], ["add", "theorem", "ker_apply_mk_out'", ["setoid"]], ["add", "theorem", "ker_apply_mk_out", ["setoid"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["add", "theorem", "Union", ["indexed_partition"]], ["add", "theorem", "class_of", ["indexed_partition"]], ["add", "theorem", "disjoint", ["indexed_partition"]], ["add", "theorem", "eq", ["indexed_partition"]], ["add", "def", "equiv_quotient", ["indexed_partition"]], ["add", "theorem", "equiv_quotient_index", ["indexed_partition"]], ["add", "theorem", "equiv_quotient_index_apply", ["indexed_partition"]], ["add", "theorem", "equiv_quotient_symm_proj_apply", ["indexed_partition"]], ["add", "theorem", "exists_mem", ["indexed_partition"]], ["add", "theorem", "index_out'", ["indexed_partition"]], ["add", "theorem", "index_some", ["indexed_partition"]], ["add", "theorem", "mem_iff_index_eq", ["indexed_partition"]], ["add", "def", "mk'", ["indexed_partition"]], ["add", "def", "out", ["indexed_partition"]], ["add", "theorem", "out_proj", ["indexed_partition"]], ["add", "def", "proj", ["indexed_partition"]], ["add", "theorem", "proj_eq_iff", ["indexed_partition"]], ["add", "theorem", "proj_fiber", ["indexed_partition"]], ["add", "theorem", "proj_out", ["indexed_partition"]], ["add", "theorem", "proj_some_index", ["indexed_partition"]], ["add", "theorem", "some_index", ["indexed_partition"]], ["add", "structure", "indexed_partition", []], ["add", "theorem", "eqv_class_mem'", ["setoid"]]]}]}, {"timestamp": 1624976905, "sha": "23ee7ea7", "message": "feat(analysis/normed_space/basic): int.norm_eq_abs (#8117)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_eq_abs", ["int"]]]}]}, {"timestamp": 1624976904, "sha": "d249e533", "message": "feat(algebra/ordered_group): add instances mixing `group` and `co(ntra)variant` (#8072)\nIn an attempt to break off small parts of PR #8060, I extracted some of the instances proven there to this PR.\nThis is part of the `order` refactor.\n~~I tried to get rid of the `@`, but failed. If you have a trick to avoid them, I would be very happy to learn it!~~ `@`s removed!", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1624976903, "sha": "70fcf999", "message": "feat(group_theory/free_abelian_group_finsupp): isomorphism between `free_abelian_group` and `finsupp` (#8046)\nFrom LTE", "changes": [{"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["mod", "theorem", "map_of_apply", ["free_abelian_group"]]]}, {"oldPath": null, "newPath": "src/group_theory/free_abelian_group_finsupp.lean", "changes": [["add", "def", "to_free_abelian_group", ["finsupp"]], ["add", "theorem", "to_free_abelian_group_comp_single_add_hom", ["finsupp"]], ["add", "theorem", "to_free_abelian_group_comp_to_finsupp", ["finsupp"]], ["add", "theorem", "to_free_abelian_group_to_finsupp", ["finsupp"]], ["add", "def", "coeff", ["free_abelian_group"]], ["add", "def", "equiv_finsupp", ["free_abelian_group"]], ["add", "theorem", "mem_support_iff", ["free_abelian_group"]], ["add", "theorem", "not_mem_support_iff", ["free_abelian_group"]], ["add", "def", "support", ["free_abelian_group"]], ["add", "theorem", "support_add", ["free_abelian_group"]], ["add", "theorem", "support_gsmul", ["free_abelian_group"]], ["add", "theorem", "support_neg", ["free_abelian_group"]], ["add", "theorem", "support_nsmul", ["free_abelian_group"]], ["add", "theorem", "support_of", ["free_abelian_group"]], ["add", "theorem", "support_zero", ["free_abelian_group"]], ["add", "def", "to_finsupp", ["free_abelian_group"]], ["add", "theorem", "to_finsupp_comp_to_free_abelian_group", ["free_abelian_group"]], ["add", "theorem", "to_finsupp_of", ["free_abelian_group"]], ["add", "theorem", "to_finsupp_to_free_abelian_group", ["free_abelian_group"]]]}]}, {"timestamp": 1624973581, "sha": "68d7d001", "message": "chore(analysis/special_functions/pow): versions of tendsto/continuous_at lemmas for (e)nnreal (#8113)\nWe have the full suite of lemmas about `tendsto` and `continuous` for real powers of `real`, but apparently not for `nnreal` or `ennreal`. I have provided a few, rather painfully -- if there is a better way, golfing is welcome!", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "continuous_rpow_const", ["ennreal"]], ["add", "theorem", "tendsto_rpow_at_top", ["ennreal"]], ["add", "theorem", "tendsto_rpow_at_top", ["nnreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "continuous_at_coe_iff", ["ennreal"]], ["add", "theorem", "tendsto_nhds_coe_iff", ["ennreal"]]]}]}, {"timestamp": 1624971005, "sha": "54eccb0e", "message": "feat(measure_theory/lp_space): add snorm_eq_lintegral_rpow_nnnorm (#8115)\nAdd two lemmas to go from `snorm` to integrals (through `snorm'`). The idea is that `snorm'` should then generally not be used, except in the construction of `snorm`.", "changes": [{"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "snorm_eq_lintegral_rpow_nnnorm", ["measure_theory"]], ["add", "theorem", "snorm_one_eq_lintegral_nnnorm", ["measure_theory"]]]}]}, {"timestamp": 1624966149, "sha": "90d2046b", "message": "feat(algebra/monoid_algebra): adjointness for the functor `G ↦ monoid_algebra k G` when `G` carries only `has_mul` (#7932)", "changes": [{"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": [["add", "theorem", "ext_ring", ["distrib_mul_action_hom"]], ["add", "theorem", "ext_ring_iff", ["distrib_mul_action_hom"]], ["add", "theorem", "to_add_monoid_hom_injective", ["distrib_mul_action_hom"]], ["add", "theorem", "to_mul_action_hom_injective", ["distrib_mul_action_hom"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "coe_to_linear_map", ["distrib_mul_action_hom"]], ["add", "def", "to_linear_map", ["distrib_mul_action_hom"]], ["add", "theorem", "to_linear_map_eq_coe", ["distrib_mul_action_hom"]], ["add", "theorem", "to_linear_map_injective", ["distrib_mul_action_hom"]]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "def", "lift_magma", ["add_monoid_algebra"]], ["add", "theorem", "non_unital_alg_hom_ext'", ["add_monoid_algebra"]], ["add", "theorem", "non_unital_alg_hom_ext", ["add_monoid_algebra"]], ["add", "def", "of_magma", ["add_monoid_algebra"]], ["add", "def", "lift_magma", ["monoid_algebra"]], ["add", "theorem", "non_unital_alg_hom_ext'", ["monoid_algebra"]], ["add", "theorem", "non_unital_alg_hom_ext", ["monoid_algebra"]], ["mod", "def", "of", ["monoid_algebra"]], ["del", "theorem", "of_apply", ["monoid_algebra"]], ["add", "def", "of_magma", ["monoid_algebra"]]]}, {"oldPath": "src/algebra/non_unital_alg_hom.lean", "newPath": "src/algebra/non_unital_alg_hom.lean", "changes": [["add", "theorem", "to_distrib_mul_action_hom_injective", ["non_unital_alg_hom"]], ["add", "theorem", "to_mul_hom_injective", ["non_unital_alg_hom"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "single", ["finsupp", "distrib_mul_action_hom"]], ["add", "theorem", "distrib_mul_action_hom_ext'", ["finsupp"]], ["add", "theorem", "distrib_mul_action_hom_ext", ["finsupp"]]]}]}, {"timestamp": 1624963572, "sha": "d521b2bc", "message": "feat(algebraic_topology/simplex_category): epi and monos in the simplex category (#8101)\nCharacterize epimorphisms and monomorphisms in `simplex_category` in terms of the function they represent. Add lemmas about their behavior on length of objects.", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["add", "theorem", "epi_iff_surjective", ["simplex_category"]], ["add", "theorem", "le_of_epi", ["simplex_category"]], ["add", "theorem", "le_of_mono", ["simplex_category"]], ["add", "theorem", "len_le_of_epi", ["simplex_category"]], ["add", "theorem", "len_le_of_mono", ["simplex_category"]], ["add", "theorem", "mono_iff_injective", ["simplex_category"]]]}]}, {"timestamp": 1624949739, "sha": "07f1235d", "message": "chore(category_theory/opposites): make hom explicit in lemmas (#8088)", "changes": [{"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["mod", "theorem", "op_unop", ["quiver", "hom"]], ["mod", "theorem", "unop_op", ["quiver", "hom"]]]}]}, {"timestamp": 1624911186, "sha": "ac156c15", "message": "chore(algebra/algebra/basic): add algebra.right_comm to match left_comm (#8109)\nThis also reorders the arguments to `right_comm` to match the order they appear in the LHS of the lemma.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "left_comm", ["algebra"]], ["add", "theorem", "right_comm", ["algebra"]]]}]}, {"timestamp": 1624898409, "sha": "a79df550", "message": "chore(algebra/ordered_group): remove linear_ordered_comm_group.to_comm_group (#7861)\nThis instance shortcut bypassed `ordered_comm_group`, and could easily result in computability problems since many `linear_order` instances are noncomputable due to their embedded decidable instances. This would happen when:\n* Lean needs an `add_comm_group A`\n* We have:\n * `noncomputable instance : linear_ordered_comm_group A`\n * `instance : ordered_comm_group A`\n* Lean tries `linear_ordered_comm_group.to_comm_group` before `ordered_comm_group.to_comm_group`, and hands us back a noncomputable one, even though there is a computable one available.\nThere're no comments explaining why things were done this way, suggesting it was accidental, or perhaps that `ordered_comm_group` came later.\nThis broke one proof which somehow `simponly`ed associativity the wrong way, so I just golfed that proof and the one next to it for good measure.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}]}, {"timestamp": 1624894702, "sha": "1ffb5be5", "message": "feat(data/complex/module): add complex.alg_hom_ext (#8105)", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "theorem", "map_coe_real_complex", ["alg_hom"]], ["add", "theorem", "alg_hom_ext", ["complex"]]]}]}, {"timestamp": 1624888442, "sha": "b160ac8d", "message": "chore(topology/topological_fiber_bundle): reorganizing the code (#7989)\nMainly redesigning the `simp` strategy.", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["add", "theorem", "source_inter_preimage_target_inter", ["local_equiv"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "preimage_const_of_mem", ["set"]], ["mod", "theorem", "preimage_const_of_not_mem", ["set"]]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "mk", ["continuous", "prod"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "is_open_preimage", ["continuous_on"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "source_inter_preimage_target_inter", ["local_homeomorph"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "is_open_induced_iff'", []], ["add", "theorem", "le_induced_generate_from", []]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["add", "theorem", "coe_fst", ["bundle"]], ["add", "theorem", "coe_snd_map_apply", ["bundle"]], ["add", "theorem", "coe_snd_map_smul", ["bundle"]], ["add", "def", "total_space_mk", ["bundle"]], ["add", "theorem", "base_set_at", ["topological_fiber_bundle_core"]], ["add", "theorem", "continuous_total_space_mk", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv'_apply", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_coe", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_source", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv'_symm_apply", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_target", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_apply", ["topological_fiber_bundle_core"]], ["del", "def", "local_triv_at", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_at_apply", ["topological_fiber_bundle_core"]], ["mod", "def", "local_triv_at_ext", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_at_ext_def", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_at_ext_to_local_homeomorph", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_at_fst", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_at_symm_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_coe", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_ext_apply", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_ext_symm_apply", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_ext_symm_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_symm", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_symm_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_target", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv'_source", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv'_target", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_at_ext_base_set", ["topological_fiber_bundle_core"]], ["del", "theorem", "mem_local_triv_at_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_ext_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_ext_target", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_source", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_target", ["topological_fiber_bundle_core"]]]}, {"oldPath": "src/topology/vector_bundle.lean", "newPath": "src/topology/vector_bundle.lean", "changes": [["add", "theorem", "coe_coe", ["topological_vector_bundle", "trivialization"]], ["add", "theorem", "coe_fst", ["topological_vector_bundle", "trivialization"]]]}]}, {"timestamp": 1624883768, "sha": "f7c1e5f2", "message": "feat(algebra/lie/nilpotent): basic lemmas about nilpotency for Lie subalgebras of associative algebras (#8090)\nThe main lemma is: `lie_algebra.is_nilpotent_ad_of_is_nilpotent` which is the first step in proving Engel's theorem.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "commute_lmul_left_right", ["algebra"]], ["add", "theorem", "lmul_left_eq_zero_iff", ["algebra"]], ["add", "theorem", "lmul_left_zero_eq_zero", ["algebra"]], ["add", "theorem", "lmul_right_eq_zero_iff", ["algebra"]], ["add", "theorem", "lmul_right_zero_eq_zero", ["algebra"]], ["add", "theorem", "pow_lmul_left", ["algebra"]], ["add", "theorem", "pow_lmul_right", ["algebra"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "ad_nilpotent_of_nilpotent", ["lie_algebra"]], ["add", "theorem", "is_nilpotent_ad_of_is_nilpotent", ["lie_algebra"]], ["add", "theorem", "is_nilpotent_ad_of_is_nilpotent_ad", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "theorem", "ad_eq_lmul_left_sub_lmul_right", ["lie_algebra"]], ["add", "theorem", "ad_comp_incl_eq", ["lie_subalgebra"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "submodule_pow_eq_zero_of_pow_eq_zero", ["linear_map"]]]}, {"oldPath": "src/ring_theory/nilpotent.lean", "newPath": "src/ring_theory/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_lmul_left_iff", ["algebra"]], ["add", "theorem", "is_nilpotent_lmul_right_iff", ["algebra"]]]}]}, {"timestamp": 1624881269, "sha": "81183ea4", "message": "feat(geometry/manifold): `derivation_bundle` (#7708)\nIn this PR we define the `derivation_bundle`. Note that this definition is purely algebraic and that the whole geometry/analysis is contained in the algebra structure of smooth global functions on the manifold.\nI believe everything runs smoothly and elegantly and that most proofs can be naturally done by `rfl`. To anticipate some discussions that already arose on Zulip about 9 months ago, note that the content of these files is purely algebraic and that there is no intention whatsoever to replace the current tangent bundle. I prefer this definition to the one given through the adjoint representation, because algebra is more easily formalized and simp can solve most proofs with this definition. However, in the future, there will be also the adjoint representation for sure.", "changes": [{"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "theorem", "lie_apply", ["lie_ring"]]]}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": [["add", "def", "eval_ring_hom", ["smooth_map"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/derivation_bundle.lean", "changes": [["add", "theorem", "apply_fdifferential", []], ["add", "def", "eval_at", ["derivation"]], ["add", "theorem", "eval_at_apply", ["derivation"]], ["add", "def", "fdifferential", []], ["add", "theorem", "fdifferential_comp", []], ["add", "def", "fdifferential_map", []], ["add", "def", "point_derivation", []], ["add", "def", "eval", ["pointed_smooth_map"]], ["add", "theorem", "smul_def", ["pointed_smooth_map"]], ["add", "def", "pointed_smooth_map", []], ["add", "def", "eval_at", ["smooth_function"]]]}]}, {"timestamp": 1624876579, "sha": "bfd06851", "message": "fix(algebra/module/linear_map): do not introduce `show` (#8102)\nWithout this change, `apply linear_map.coe_injective` on a goal of `f = g` introduces some unpleasant `show` terms, giving a goal of\n```lean\n(λ (f : M →ₗ[R] M₂), show M → M₂, from ⇑f) f = (λ (f : M →ₗ[R] M₂), show M → M₂, from ⇑f) g\n```\nwhich is then frustrating to `rw` at, instead of\n```lean\n⇑f = ⇑g\n```", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "coe_injective", ["linear_map"]]]}]}, {"timestamp": 1624870287, "sha": "3cb247c3", "message": "chore(algebra/ordered_monoid_lemmas): change additive name `left.add_nonneg` to `right.add_nonneg` (#8065)\nA copy-paste error in the name of a lemma that has not been used yet.\nChange `pos_add` to `add_pos`.\nI also added some paragraph breaks in the documentation.\nCo-authored by Eric Wieser.", "changes": [{"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": []}]}, {"timestamp": 1624860813, "sha": "80d02347", "message": "fix(algebra/group_power): put opposite lemmas in the right namespace (#8100)", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "op_pow", ["opposite"]], ["add", "theorem", "unop_pow", ["opposite"]], ["del", "theorem", "op_pow", ["units"]], ["del", "theorem", "unop_pow", ["units"]]]}]}, {"timestamp": 1624856002, "sha": "7b253dd5", "message": "feat(group_theory/subgroup): lemmas for normal subgroups of subgroups (#7271)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "comap_bot", ["monoid_hom"]], ["mod", "theorem", "range_restrict_ker", ["monoid_hom"]], ["add", "theorem", "coe_subgroup_of", ["subgroup"]], ["mod", "theorem", "comap_injective", ["subgroup"]], ["mod", "theorem", "comap_map_eq", ["subgroup"]], ["mod", "theorem", "comap_map_eq_self", ["subgroup"]], ["mod", "theorem", "comap_map_eq_self_of_injective", ["subgroup"]], ["add", "theorem", "comap_sup_comap_le", ["subgroup"]], ["add", "theorem", "comap_sup_eq", ["subgroup"]], ["add", "theorem", "inf_mul_assoc", ["subgroup"]], ["add", "theorem", "inf_subgroup_of_inf_normal_of_left", ["subgroup"]], ["add", "theorem", "inf_subgroup_of_inf_normal_of_right", ["subgroup"]], ["mod", "theorem", "ker_le_comap", ["subgroup"]], ["mod", "theorem", "le_comap_map", ["subgroup"]], ["mod", "theorem", "map_comap_eq", ["subgroup"]], ["mod", "theorem", "map_comap_eq_self", ["subgroup"]], ["mod", "theorem", "map_comap_eq_self_of_surjective", ["subgroup"]], ["mod", "theorem", "map_comap_le", ["subgroup"]], ["mod", "theorem", "map_eq_comap_of_inverse", ["subgroup"]], ["add", "theorem", "map_inf_eq", ["subgroup"]], ["add", "theorem", "map_inf_le", ["subgroup"]], ["mod", "theorem", "map_injective", ["subgroup"]], ["add", "theorem", "map_injective_of_ker_le", ["subgroup"]], ["mod", "theorem", "map_le_range", ["subgroup"]], ["add", "theorem", "mem_subgroup_of", ["subgroup"]], ["add", "theorem", "mul_inf_assoc", ["subgroup"]], ["add", "theorem", "normal_subgroup_of_iff", ["subgroup"]], ["add", "theorem", "mem_comm", ["subgroup", "subgroup_normal"]], ["add", "def", "subgroup_of", ["subgroup"]], ["add", "theorem", "subgroup_of_map_subtype", ["subgroup"]], ["add", "theorem", "subgroup_of_sup", ["subgroup"]], ["add", "theorem", "supr_comap_le", ["subgroup"]]]}]}, {"timestamp": 1624808705, "sha": "f8e9c179", "message": "feat(data/nat/factorial): descending factorial (#7759)\n- rename `desc_fac` to `asc_factorial`\n- define `desc_factorial`\n- update `data.fintype.card_embedding` to use `desc_factorial`", "changes": [{"oldPath": "archive/100-theorems-list/93_birthday_problem.lean", "newPath": "archive/100-theorems-list/93_birthday_problem.lean", "changes": []}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card_embedding.lean", "newPath": "src/data/fintype/card_embedding.lean", "changes": [["del", "theorem", "card_embedding", ["fintype"]], ["add", "theorem", "card_embedding_eq", ["fintype"]], ["del", "theorem", "card_embedding_eq_if", ["fintype"]], ["del", "theorem", "card_embedding_eq_infinite", ["fintype"]], ["add", "theorem", "card_embedding_eq_of_infinite", ["fintype"]], ["add", "theorem", "card_embedding_eq_of_unique", ["fintype"]], ["del", "theorem", "card_embedding_eq_zero", ["fintype"]], ["del", "theorem", "card_embedding_of_unique", ["fintype"]]]}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "theorem", "asc_factorial_eq_factorial_mul_choose", ["nat"]], ["add", "theorem", "choose_eq_asc_factorial_div_factorial", ["nat"]], ["del", "theorem", "choose_eq_desc_fac_div_factorial", ["nat"]], ["add", "theorem", "choose_eq_desc_factorial_div_factorial", ["nat"]], ["del", "theorem", "desc_fac_eq_factorial_mul_choose", ["nat"]], ["add", "theorem", "desc_factorial_eq_factorial_mul_choose", ["nat"]], ["add", "theorem", "factorial_dvd_asc_factorial", ["nat"]], ["del", "theorem", "factorial_dvd_desc_fac", ["nat"]], ["add", "theorem", "factorial_dvd_desc_factorial", ["nat"]]]}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["add", "theorem", "add_desc_factorial_eq_asc_factorial", ["nat"]], ["add", "def", "asc_factorial", ["nat"]], ["add", "theorem", "asc_factorial_eq_div", ["nat"]], ["add", "theorem", "asc_factorial_le_pow_add", ["nat"]], ["add", "theorem", "asc_factorial_lt_pow_add", ["nat"]], ["add", "theorem", "asc_factorial_of_sub", ["nat"]], ["add", "theorem", "asc_factorial_pos", ["nat"]], ["add", "theorem", "asc_factorial_succ", ["nat"]], ["add", "theorem", "asc_factorial_zero", ["nat"]], ["del", "def", "desc_fac", ["nat"]], ["del", "theorem", "desc_fac_eq_div", ["nat"]], ["del", "theorem", "desc_fac_of_sub", ["nat"]], ["del", "theorem", "desc_fac_succ", ["nat"]], ["del", "theorem", "desc_fac_zero", ["nat"]], ["add", "def", "desc_factorial", ["nat"]], ["add", "theorem", "desc_factorial_eq_div", ["nat"]], ["add", "theorem", "desc_factorial_eq_zero_iff_lt", ["nat"]], ["add", "theorem", "desc_factorial_le_pow", ["nat"]], ["add", "theorem", "desc_factorial_lt_pow", ["nat"]], ["add", "theorem", "desc_factorial_one", ["nat"]], ["add", "theorem", "desc_factorial_self", ["nat"]], ["add", "theorem", "desc_factorial_succ", ["nat"]], ["add", "theorem", "desc_factorial_zero", ["nat"]], ["mod", "def", "factorial", ["nat"]], ["mod", "theorem", "factorial_inj", ["nat"]], ["mod", "theorem", "factorial_lt", ["nat"]], ["add", "theorem", "factorial_mul_asc_factorial", ["nat"]], ["del", "theorem", "factorial_mul_desc_fac", ["nat"]], ["add", "theorem", "factorial_mul_desc_factorial", ["nat"]], ["add", "theorem", "pow_lt_asc_factorial'", ["nat"]], ["add", "theorem", "pow_lt_asc_factorial", ["nat"]], ["add", "theorem", "pow_sub_le_desc_factorial", ["nat"]], ["add", "theorem", "pow_sub_lt_desc_factorial'", ["nat"]], ["add", "theorem", "pow_sub_lt_desc_factorial", ["nat"]], ["add", "theorem", "pow_succ_le_asc_factorial", ["nat"]], ["add", "theorem", "succ_asc_factorial", ["nat"]], ["del", "theorem", "succ_desc_fac", ["nat"]], ["add", "theorem", "succ_desc_factorial", ["nat"]], ["add", "theorem", "succ_desc_factorial_succ", ["nat"]], ["add", "theorem", "zero_asc_factorial", ["nat"]], ["del", "theorem", "zero_desc_fac", ["nat"]], ["add", "theorem", "zero_desc_factorial_succ", ["nat"]]]}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": [["add", "theorem", "pochhammer_nat_eq_asc_factorial", []], ["del", "theorem", "pochhammer_nat_eq_desc_fac", []]]}]}, {"timestamp": 1624798873, "sha": "2dcc307e", "message": "feat(category_theory/limits): morphism to terminal is split mono (#8084)\nA generalisation of existing results: we already have an instance `split_mono` to `mono` so this is strictly more general.", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "split_epi_to", ["category_theory", "limits", "is_initial"]], ["add", "def", "split_mono_from", ["category_theory", "limits", "is_terminal"]]]}]}, {"timestamp": 1624760139, "sha": "c5d17ae1", "message": "chore(scripts): update nolints.txt (#8093)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1624746811, "sha": "c7a35b41", "message": "doc(topology/homeomorph): fixup glaring error (#8092)\nthanks to @kbuzzard for spotting this error in #8086", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}]}, {"timestamp": 1624739705, "sha": "0817020b", "message": "doc(topology/homeomorph): module docs (#8086)\nI really wanted to write more, but there's really not much to say about something that is a stronger bijection :b", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}]}, {"timestamp": 1624733828, "sha": "b874abc7", "message": "feat(field_theory): state primitive element theorem using `power_basis` (#8073)\nThis PR adds an alternative formulation to the primitive element theorem: the original formulation was `∃ α : E, F⟮α⟯ = (⊤ : intermediate_field F E)`, which means a lot of pushing things across the equality/equiv from `F⟮α⟯` to `E` itself. I claim that working with a field `E` that has a power basis over `F` is nicer since you don't need to do a lot of transporting.", "changes": [{"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}]}, {"timestamp": 1624731306, "sha": "598722a2", "message": "feat(algebraic_topology/simplicial_object): Add augment construction (#8085)\nAdds the augmentation construction for (co)simplicial objects.\nFrom LTE.", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["add", "theorem", "hom_zero_zero", ["simplex_category"]]]}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "augment", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "augment_hom_zero", ["category_theory", "cosimplicial_object"]], ["add", "def", "augment", ["category_theory", "simplicial_object"]], ["add", "theorem", "augment_hom_zero", ["category_theory", "simplicial_object"]]]}]}, {"timestamp": 1624699511, "sha": "4630067c", "message": "chore(data/set/intervals): syntax clean up (#8087)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Iio_subset_Iic_self", ["set"]], ["mod", "theorem", "Ioi_subset_Ici_self", ["set"]]]}]}, {"timestamp": 1624655433, "sha": "68ec06cf", "message": "chore(analysis/analytic/composition): remove one `have` (#8083)\nA `have` in a proof is not necessary.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}]}, {"timestamp": 1624653101, "sha": "92a71712", "message": "feat(measure_theory/interval_integral): generalize `add_adjacent_intervals` to n-ary sum (#8050)", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "trans_iterate", ["interval_integrable"]], ["add", "theorem", "sum_integral_adjacent_intervals", ["interval_integral"]]]}]}, {"timestamp": 1624646934, "sha": "6666ba2f", "message": "fix(real/sign): make `real.sign 0 = 0` to match `int.sign 0` (#8080)\nPreviously `sign 0 = 1` which is quite an unusual definition. This definition brings things in line with `int.sign`, and include a proof of this fact.\nA future refactor could probably introduce a sign for all rings with a partial order", "changes": [{"oldPath": "src/data/real/sign.lean", "newPath": "src/data/real/sign.lean", "changes": [["mod", "def", "sign", ["real"]], ["mod", "theorem", "sign_apply_eq", ["real"]], ["add", "theorem", "sign_apply_eq_of_ne_zero", ["real"]], ["add", "theorem", "sign_eq_zero_iff", ["real"]], ["add", "theorem", "sign_int_cast", ["real"]], ["mod", "theorem", "sign_neg", ["real"]], ["del", "theorem", "sign_of_not_neg", ["real"]], ["add", "theorem", "sign_of_pos", ["real"]], ["del", "theorem", "sign_of_zero_le", ["real"]], ["mod", "theorem", "sign_zero", ["real"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}]}, {"timestamp": 1624646933, "sha": "a7faaf53", "message": "docs(data/list/chain): add module docstring (#8041)", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["mod", "theorem", "chain'_split", ["list"]], ["mod", "theorem", "chain_of_pairwise", ["list"]], ["mod", "theorem", "chain_split", ["list"]]]}]}, {"timestamp": 1624646932, "sha": "cf4a2df2", "message": "docs(data/list/range): add module docstring (#8026)", "changes": [{"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}]}, {"timestamp": 1624640941, "sha": "9cc44ba2", "message": "feat(ring_theory/nilpotent): basic results about nilpotency in associative rings (#8055)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_eq_zero_of_le", []]]}, {"oldPath": null, "newPath": "src/ring_theory/nilpotent.lean", "changes": [["add", "theorem", "is_nilpotent_add", ["commute"]], ["add", "theorem", "is_nilpotent_mul_left", ["commute"]], ["add", "theorem", "is_nilpotent_mul_right", ["commute"]], ["add", "theorem", "is_nilpotent_sub", ["commute"]], ["add", "theorem", "eq_zero", ["is_nilpotent"]], ["add", "theorem", "neg", ["is_nilpotent"]], ["add", "theorem", "zero", ["is_nilpotent"]], ["add", "def", "is_nilpotent", []], ["add", "theorem", "is_nilpotent_iff_eq_zero", []], ["add", "theorem", "is_nilpotent_neg_iff", []]]}]}, {"timestamp": 1624617336, "sha": "1774cf95", "message": "chore(data/complex/{module, is_R_or_C}, analysis/complex/basic): rationalize the structure provided for `conj` and `of_real` (#8014)\nWe have many bundled versions of the four operations associated with the complex-real interaction (real & imaginary parts, real-to-complex coercion `of_real`, complex conjugation `conj`).\nThis PR adjusts the versions provided, according to the following principles:\n- `conj` is always an equivalence, there is never a need for the map version\n- Both `of_real` and `conj` are `ℝ`-algebra homomorphisms, and since this in typical applications requires no more imports than `ℝ`-linear maps, they can entirely supersede the `ℝ`-linear map versions.\n- Name according to the base map name together with an acronym for the bundled map type, for example `conj_ae` for `conj` as an algebra-equivalence (this principle had been largely, but not entirely, followed previously).\nThe following specific changes result:\n- `quaternion.conj_alg_equiv` renamed to `quaternion.conj_ae`, likewise for `quaternion_algebra.conj_alg_equiv`\n- `complex.conj_li` upgraded from a map to an equivalence\n- `complex.conj_clm` (continuous linear map) upgraded to `complex.conj_cle` (continuous linear equivalence)\n- `complex.conj_alg_equiv` renamed to `complex.conj_ae`\n- `complex.conj_lm` gone, use `complex.conj_ae` instead\n- `complex.of_real_lm` (linear map) upgraded to `complex.of_real_am` (algebra homomorphism)\n- all the same changes for `is_R_or_C.*` as for `complex.*`\nAssociated lemmas are also renamed.", "changes": [{"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": [["add", "theorem", "coe_conj_ae", ["quaternion"]], ["del", "theorem", "coe_conj_alg_equiv", ["quaternion"]], ["add", "def", "conj_ae", ["quaternion"]], ["del", "def", "conj_alg_equiv", ["quaternion"]], ["add", "theorem", "coe_conj_ae", ["quaternion_algebra"]], ["del", "theorem", "coe_conj_alg_equiv", ["quaternion_algebra"]], ["add", "def", "conj_ae", ["quaternion_algebra"]], ["del", "def", "conj_alg_equiv", ["quaternion_algebra"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "def", "conj_cle", ["complex"]], ["add", "theorem", "conj_cle_apply", ["complex"]], ["add", "theorem", "conj_cle_coe", ["complex"]], ["add", "theorem", "conj_cle_norm", ["complex"]], ["del", "def", "conj_clm", ["complex"]], ["del", "theorem", "conj_clm_apply", ["complex"]], ["del", "theorem", "conj_clm_coe", ["complex"]], ["del", "theorem", "conj_clm_norm", ["complex"]], ["del", "def", "conj_li", ["complex"]], ["del", "theorem", "conj_li_apply", ["complex"]], ["add", "def", "conj_lie", ["complex"]], ["add", "theorem", "conj_lie_apply", ["complex"]], ["mod", "theorem", "continuous_conj", ["complex"]], ["mod", "theorem", "continuous_of_real", ["complex"]], ["mod", "theorem", "isometry_conj", ["complex"]], ["mod", "theorem", "of_real_clm_apply", ["complex"]], ["mod", "theorem", "of_real_clm_coe", ["complex"]], ["mod", "def", "of_real_li", ["complex"]]]}, {"oldPath": "src/analysis/complex/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": []}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "conj_ae_coe", ["is_R_or_C"]], ["add", "theorem", "conj_cle_apply", ["is_R_or_C"]], ["add", "theorem", "conj_cle_coe", ["is_R_or_C"]], ["add", "theorem", "conj_cle_norm", ["is_R_or_C"]], ["del", "theorem", "conj_clm_apply", ["is_R_or_C"]], ["del", "theorem", "conj_clm_coe", ["is_R_or_C"]], ["del", "theorem", "conj_clm_norm", ["is_R_or_C"]], ["del", "theorem", "conj_li_apply", ["is_R_or_C"]], ["add", "theorem", "conj_lie_apply", ["is_R_or_C"]], ["del", "theorem", "conj_lm_coe", ["is_R_or_C"]], ["mod", "theorem", "continuous_conj", ["is_R_or_C"]], ["add", "theorem", "of_real_am_coe", ["is_R_or_C"]], ["mod", "theorem", "of_real_clm_coe", ["is_R_or_C"]], ["mod", "theorem", "of_real_li_apply", ["is_R_or_C"]], ["del", "theorem", "of_real_lm_coe", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "def", "conj_ae", ["complex"]], ["add", "theorem", "conj_ae_coe", ["complex"]], ["del", "def", "conj_alg_equiv", ["complex"]], ["del", "def", "conj_lm", ["complex"]], ["del", "theorem", "conj_lm_coe", ["complex"]], ["add", "def", "of_real_am", ["complex"]], ["add", "theorem", "of_real_am_coe", ["complex"]], ["del", "def", "of_real_lm", ["complex"]], ["del", "theorem", "of_real_lm_coe", ["complex"]]]}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "to_linear_map_eq_coe", ["continuous_linear_map"]]]}]}, {"timestamp": 1624612861, "sha": "c5153466", "message": "feat(ring_theory/power_basis): map a power basis through an alg_equiv (#8039)\nIf `A` is equivalent to `A'` as an `R`-algebra and `A` has a power basis, then `A'` also has a power basis. Included are the relevant `simp` lemmas.\nThis needs a bit of tweaking to `basis.map` and `alg_equiv.to_linear_equiv` for getting more useful `simp` lemmas.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "def", "to_linear_equiv", ["alg_equiv"]], ["del", "theorem", "to_linear_equiv_apply", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_refl", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_symm", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_trans", ["alg_equiv"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "equiv_map", ["power_basis"]], ["add", "theorem", "minpoly_gen_map", ["power_basis"]]]}]}, {"timestamp": 1624605521, "sha": "10cd252f", "message": "docs(overview, undergrad): add Liouville's Theorem on existence of transcendental numbers (#8068)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/liouville/basic.lean", "newPath": "src/number_theory/liouville/basic.lean", "changes": []}, {"oldPath": "src/analysis/liouville/liouville_constant.lean", "newPath": "src/number_theory/liouville/liouville_constant.lean", "changes": []}]}, {"timestamp": 1624571867, "sha": "26082445", "message": "feat(data/matrix/basic): add lemma minor_map (#8074)\nAdd lemma `minor_map` proving that the operations of taking a minor and applying a map to the coefficients of a matrix commute.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "minor_map", ["matrix"]]]}]}, {"timestamp": 1624569320, "sha": "e137523a", "message": "chore(algebraic_topology/simplex_category): golf proof (#8076)\nThe \"special case of the first simplicial identity\" is a trivial consequence of the \"generic case\". This makes me wonder whether the special case should be there at all but I do not know the standard references for this stuff.", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}]}, {"timestamp": 1624563546, "sha": "e605b21f", "message": "feat(linear_algebra/pi): add linear_equiv.Pi_congr_left (#8070)\nThis definition was hiding inside the proof for `is_noetherian_pi`", "changes": [{"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "Pi_congr_left'", ["linear_equiv"]], ["add", "def", "Pi_congr_left", ["linear_equiv"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1624553400, "sha": "25d8aac6", "message": "chore(field_theory): turn `intermediate_field.subalgebra.equiv_of_eq` into `intermediate_field.equiv_of_eq` (#8069)\nI was looking for `intermediate_field.equiv_of_eq`. There was a definition of `subalgebra.equiv_of_eq` in the `intermediate_field` namespace which is equal to the original `subalgebra.equiv_of_eq` definition. Meanwhile, there was no `intermediate_field.equiv_of_eq`. So I decided to turn the duplicate into what I think was intended. (As a bonus, I added the `simp` lemmas from `subalgebra.equiv_of_eq`.)", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "def", "equiv_of_eq", ["intermediate_field"]], ["add", "theorem", "equiv_of_eq_rfl", ["intermediate_field"]], ["add", "theorem", "equiv_of_eq_symm", ["intermediate_field"]], ["add", "theorem", "equiv_of_eq_trans", ["intermediate_field"]], ["del", "def", "equiv_of_eq", ["intermediate_field", "subalgebra"]]]}]}, {"timestamp": 1624547670, "sha": "db84f2b6", "message": "feat(data/polynomial): `aeval_alg_equiv`, like `aeval_alg_hom` (#8038)\nThis PR copies `polynomial.aeval_alg_hom` and `aeval_alg_hom_apply` to `aeval_alg_equiv(_apply)`.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_alg_equiv", ["polynomial"]], ["add", "theorem", "aeval_alg_equiv_apply", ["polynomial"]]]}]}, {"timestamp": 1624547669, "sha": "2a155208", "message": "chore(data/polynomial): generalize `aeval_eq_sum_range` to `comm_semiring` (#8037)\nThis pair of lemmas did not need any `comm_ring` assumptions, so I put them in a new section with weaker typeclass assumptions.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}]}, {"timestamp": 1624547668, "sha": "3937c1b2", "message": "docs(data/list/pairwise): add module docstring (#8025)", "changes": [{"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}]}, {"timestamp": 1624547667, "sha": "520e79d9", "message": "feat(analysis/convex/exposed): introduce exposed sets (#7928)\nintroduce exposed sets", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/exposed.lean", "changes": [["add", "theorem", "is_exposed", ["continuous_linear_map", "to_exposed"]], ["add", "def", "to_exposed", ["continuous_linear_map"]], ["add", "theorem", "exposed_point_def", []], ["add", "theorem", "exposed_points_empty", []], ["add", "theorem", "exposed_points_subset", []], ["add", "theorem", "exposed_points_subset_extreme_points", []], ["add", "theorem", "antisymm", ["is_exposed"]], ["add", "theorem", "eq_inter_halfspace", ["is_exposed"]], ["add", "theorem", "inter", ["is_exposed"]], ["add", "theorem", "inter_left", ["is_exposed"]], ["add", "theorem", "inter_right", ["is_exposed"]], ["add", "theorem", "is_closed", ["is_exposed"]], ["add", "theorem", "is_compact", ["is_exposed"]], ["add", "theorem", "refl", ["is_exposed"]], ["add", "theorem", "sInter", ["is_exposed"]], ["add", "def", "is_exposed", []], ["add", "theorem", "is_exposed_empty", []], ["add", "theorem", "mem_exposed_points_iff_exposed_singleton", []], ["add", "def", "exposed_points", ["set"]]]}, {"oldPath": "src/analysis/convex/extreme.lean", "newPath": "src/analysis/convex/extreme.lean", "changes": []}]}, {"timestamp": 1624547666, "sha": "4801fa66", "message": "feat(measure_theory): the Vitali-Caratheodory theorem (#7766)\nThis PR proves the Vitali-Carathéodory theorem, asserting that a measurable function can be closely approximated from above by a lower semicontinuous function, and from below by an upper semicontinuous function. \nThis is the main ingredient in the proof of the general version of the fundamental theorem of calculus (when `f'` is just integrable, but not continuous).", "changes": [{"oldPath": null, "newPath": "src/measure_theory/vitali_caratheodory.lean", "changes": [["add", "theorem", "exists_le_lower_semicontinuous_lintegral_ge", ["measure_theory"]], ["add", "theorem", "exists_lt_lower_semicontinuous_integral_gt_nnreal", ["measure_theory"]], ["add", "theorem", "exists_lt_lower_semicontinuous_integral_lt", ["measure_theory"]], ["add", "theorem", "exists_lt_lower_semicontinuous_lintegral_ge", ["measure_theory"]], ["add", "theorem", "exists_lt_lower_semicontinuous_lintegral_ge_of_ae_measurable", ["measure_theory"]], ["add", "theorem", "exists_upper_semicontinuous_le_integral_le", ["measure_theory"]], ["add", "theorem", "exists_upper_semicontinuous_le_lintegral_le", ["measure_theory"]], ["add", "theorem", "exists_upper_semicontinuous_lt_integral_gt", ["measure_theory"]], ["add", "theorem", "exists_le_lower_semicontinuous_lintegral_ge", ["measure_theory", "simple_func"]], ["add", "theorem", "exists_upper_semicontinuous_le_lintegral_le", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1624542929, "sha": "b9bf921c", "message": "chore(linear_algebra): switch to named constructors for linear_map (#8059)\nThis makes some ideas I have for future refactors easier, and generally makes things less fragile to changes such as additional fields or reordering of fields.\nThe extra verbosity is not really significant.\nThis conversion is not exhaustive, there may be anonymous constructors elsewhere that I've missed.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "def", "mk'", ["is_linear_map"]], ["mod", "theorem", "apply_symm_apply", ["linear_equiv"]], ["mod", "theorem", "symm_apply_apply", ["linear_equiv"]], ["mod", "def", "comp", ["linear_map"]], ["mod", "theorem", "is_linear", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "mkq", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["mod", "def", "fst", ["linear_map"]], ["mod", "def", "snd", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "apply_symm_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_apply_apply", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "continuous_one", []]]}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}]}, {"timestamp": 1624538896, "sha": "2a1cabea", "message": "chore(data/polynomial/eval, ring_theory/polynomial_algebra): golfs (#8058)\nThis golfs:\n* `polynomial.map_nat_cast` to use `ring_hom.map_nat_cast`\n* `polynomial.map.is_semiring_hom` to use `ring_hom.is_semiring_hom`\n* `poly_equiv_tensor.to_fun` and `poly_equiv_tensor.to_fun_linear_right` out of existence\nAnd adds a new (unused) lemma `polynomial.map_smul`.\nAll the other changes in `polynomial/eval` are just reorderings of lemmas to allow the golfing.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "map_smul", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": [["del", "def", "to_fun", ["poly_equiv_tensor"]], ["mod", "def", "to_fun_bilinear", ["poly_equiv_tensor"]], ["add", "theorem", "to_fun_bilinear_apply_eq_sum", ["poly_equiv_tensor"]], ["del", "def", "to_fun_linear_right", ["poly_equiv_tensor"]], ["add", "theorem", "to_fun_linear_tmul_apply", ["poly_equiv_tensor"]]]}]}, {"timestamp": 1624534366, "sha": "5352639d", "message": "feat(data/matrix/basic.lean) : added map_scalar and linear_map.map_matrix (#8061)\nAdded two lemmas (`map_scalar` and `linear_map.map_matrix_apply`) and a definition (`linear_map.map_matrix`) showing that a map between coefficients induces the same type of map between matrices with those coefficients.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "map_matrix", ["linear_map"]], ["add", "theorem", "map_smul", ["matrix"]]]}]}, {"timestamp": 1624528652, "sha": "5bd649fb", "message": "feat(analysis/liouville/liouville_constant): transcendental Liouville numbers exist! (#8020)\nThe final (hopefully!) PR in the Liouville series: there are a couple of results and the proof that Liouville numbers are transcendental.", "changes": [{"oldPath": "src/analysis/liouville/liouville_constant.lean", "newPath": "src/analysis/liouville/liouville_constant.lean", "changes": [["mod", "theorem", "aux_calc", ["liouville"]], ["add", "theorem", "is_liouville", ["liouville"]], ["add", "theorem", "is_transcendental", ["liouville"]], ["mod", "theorem", "liouville_number_eq_initial_terms_add_tail", ["liouville"]], ["add", "theorem", "liouville_number_rat_initial_terms", ["liouville"]], ["mod", "theorem", "liouville_number_tail_pos", ["liouville"]], ["mod", "theorem", "tsum_one_div_pow_factorial_lt", ["liouville"]]]}]}, {"timestamp": 1624528651, "sha": "f7f12bc6", "message": "feat(data/nat/prime): norm_num plugin for factors (#8009)\nImplements a `norm_num` plugin to evaluate terms like `nat.factors 231 = [3, 7, 11]`.", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_chain'", ["nat"]], ["add", "theorem", "factors_chain", ["nat"]], ["add", "theorem", "factors_chain_2", ["nat"]], ["add", "theorem", "factors_sorted", ["nat"]], ["add", "theorem", "le_min_fac'", ["nat"]], ["add", "theorem", "le_min_fac", ["nat"]], ["add", "def", "factors_helper", ["tactic", "norm_num"]], ["add", "theorem", "factors_helper_cons'", ["tactic", "norm_num"]], ["add", "theorem", "factors_helper_cons", ["tactic", "norm_num"]], ["add", "theorem", "factors_helper_end", ["tactic", "norm_num"]], ["add", "theorem", "factors_helper_nil", ["tactic", "norm_num"]], ["add", "theorem", "factors_helper_same", ["tactic", "norm_num"]], ["add", "theorem", "factors_helper_same_sn", ["tactic", "norm_num"]], ["add", "theorem", "factors_helper_sn", ["tactic", "norm_num"]]]}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1624528650, "sha": "d9dcf699", "message": "feat(topology/topological_fiber_bundle): a new standard construction for topological fiber bundles (#7935)\nIn this PR we implement a new standard construction for topological fiber bundles: namely a structure that permits to define a fiber bundle when trivializations are given as local equivalences but there is not yet a topology on the total space. The total space is hence given a topology in such a way that there is a fiber bundle structure for which the local equivalences\nare also local homeomorphism and hence local trivializations.", "changes": [{"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "preimage_nhds_within_coinduced'", []], ["add", "theorem", "preimage_nhds_within_coinduced", []]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["mod", "theorem", "apply_symm_apply'", ["bundle_trivialization"]], ["mod", "theorem", "apply_symm_apply", ["bundle_trivialization"]], ["mod", "theorem", "coe_coe", ["bundle_trivialization"]], ["mod", "theorem", "coe_fst'", ["bundle_trivialization"]], ["mod", "theorem", "coe_fst", ["bundle_trivialization"]], ["mod", "theorem", "coe_fst_eventually_eq_proj'", ["bundle_trivialization"]], ["mod", "theorem", "coe_fst_eventually_eq_proj", ["bundle_trivialization"]], ["mod", "theorem", "coe_mk", ["bundle_trivialization"]], ["mod", "def", "comp_homeomorph", ["bundle_trivialization"]], ["mod", "theorem", "continuous_at_proj", ["bundle_trivialization"]], ["mod", "theorem", "map_proj_nhds", ["bundle_trivialization"]], ["add", "theorem", "map_target", ["bundle_trivialization"]], ["mod", "theorem", "mem_source", ["bundle_trivialization"]], ["mod", "theorem", "mem_target", ["bundle_trivialization"]], ["mod", "theorem", "mk_proj_snd'", ["bundle_trivialization"]], ["mod", "theorem", "mk_proj_snd", ["bundle_trivialization"]], ["mod", "theorem", "proj_symm_apply'", ["bundle_trivialization"]], ["mod", "theorem", "proj_symm_apply", ["bundle_trivialization"]], ["mod", "theorem", "symm_apply_mk_proj", ["bundle_trivialization"]], ["add", "def", "to_prebundle_trivialization", ["bundle_trivialization"]], ["add", "theorem", "apply_symm_apply'", ["prebundle_trivialization"]], ["add", "theorem", "apply_symm_apply", ["prebundle_trivialization"]], ["add", "theorem", "coe_coe", ["prebundle_trivialization"]], ["add", "theorem", "coe_fst'", ["prebundle_trivialization"]], ["add", "theorem", "coe_fst", ["prebundle_trivialization"]], ["add", "theorem", "mem_source", ["prebundle_trivialization"]], ["add", "theorem", "mem_target", ["prebundle_trivialization"]], ["add", "theorem", "mk_proj_snd'", ["prebundle_trivialization"]], ["add", "theorem", "mk_proj_snd", ["prebundle_trivialization"]], ["add", "theorem", "preimage_symm_proj_base_set", ["prebundle_trivialization"]], ["add", "theorem", "preimage_symm_proj_inter", ["prebundle_trivialization"]], ["add", "theorem", "proj_symm_apply'", ["prebundle_trivialization"]], ["add", "theorem", "proj_symm_apply", ["prebundle_trivialization"]], ["add", "def", "set_symm", ["prebundle_trivialization"]], ["add", "theorem", "symm_apply_mk_proj", ["prebundle_trivialization"]], ["add", "structure", "prebundle_trivialization", []], ["add", "def", "bundle_trivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "continuous_proj", ["topological_fiber_prebundle"]], ["add", "theorem", "continuous_symm_trivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "is_open_source_trivialization_at", ["topological_fiber_prebundle"]], ["add", "theorem", "is_open_target_trivialization_at_inter", ["topological_fiber_prebundle"]], ["add", "theorem", "is_topological_fiber_bundle", ["topological_fiber_prebundle"]], ["add", "def", "total_space_topology", ["topological_fiber_prebundle"]], ["add", "structure", "topological_fiber_prebundle", []]]}]}, {"timestamp": 1624522425, "sha": "2f27046f", "message": "refactor(algebra/ordered_monoid): use `covariant + contravariant` typeclasses in `algebra/ordered_monoid` (#7999)\nAnother stepping stone toward #7645.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["mod", "theorem", "one_le", []]]}]}, {"timestamp": 1624511552, "sha": "56535164", "message": "feat(data/fin): some lemmas about casts (#8049)\nFrom [LTE](https://github.com/leanprover-community/lean-liquid/blob/master/src/for_mathlib/fin.lean).", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_succ_eq_zero_iff", ["fin"]], ["add", "theorem", "cast_succ_ne_zero_iff", ["fin"]], ["add", "theorem", "cast_succ_pred_eq_pred_cast_succ", ["fin"]], ["add", "theorem", "pred_succ_above_pred", ["fin"]], ["add", "theorem", "succ_above_eq_zero_iff", ["fin"]], ["add", "theorem", "succ_above_ne_zero", ["fin"]], ["add", "theorem", "succ_above_ne_zero_zero", ["fin"]]]}]}, {"timestamp": 1624509232, "sha": "e07a24a1", "message": "chore(data/real/hyperreal): remove @ in a proof (#8063)\nRemove @ in a proof. Besides its clear aesthetic value, this prevents having to touch this file when the number typeclass arguments in the intervening lemmas changes.\nSee PR #7645 and #8060.", "changes": [{"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}]}, {"timestamp": 1624490891, "sha": "b9ef710e", "message": "chore(linear_algebra): deduplicate `linear_equiv.{Pi_congr_right,pi}` (#8056)\nPRs #6415 and #7489 both added the same linear equiv between Pi types. I propose to unify them, using the name of `Pi_congr_right` (more specific, matches `equiv.Pi_congr_right`), the location of `pi` (more specific) and the implementation of `Pi_congr_right` (shorter).", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "Pi_congr_right", ["linear_equiv"]], ["del", "theorem", "Pi_congr_right_refl", ["linear_equiv"]], ["del", "theorem", "Pi_congr_right_symm", ["linear_equiv"]], ["del", "theorem", "Pi_congr_right_trans", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "Pi_congr_right", ["linear_equiv"]], ["add", "theorem", "Pi_congr_right_refl", ["linear_equiv"]], ["add", "theorem", "Pi_congr_right_symm", ["linear_equiv"]], ["add", "theorem", "Pi_congr_right_trans", ["linear_equiv"]], ["del", "def", "pi", ["linear_equiv"]]]}]}, {"timestamp": 1624482083, "sha": "3cf80395", "message": "feat(measure_theory/set_integral): the set integral is continuous (#7931)\nMost of the code is dedicated to building a continuous linear map from Lp to the Lp space corresponding to the restriction of the measure to a set. The set integral is then continuous as composition of the integral and that map.", "changes": [{"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "Lp_to_Lp_restrict_add", ["measure_theory"]], ["add", "def", "Lp_to_Lp_restrict_clm", ["measure_theory"]], ["add", "theorem", "Lp_to_Lp_restrict_clm_coe_fn", ["measure_theory"]], ["add", "theorem", "Lp_to_Lp_restrict_smul", ["measure_theory"]], ["add", "theorem", "continuous_set_integral", ["measure_theory"]], ["add", "theorem", "norm_Lp_to_Lp_restrict_le", ["measure_theory"]]]}]}, {"timestamp": 1624476440, "sha": "a31e3c3c", "message": "feat(category_theory/arrow/limit): limit cones in arrow categories (#7457)", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": []}]}, {"timestamp": 1624469368, "sha": "204ca5f9", "message": "docs(data/fin2): add module docstring (#8047)", "changes": [{"oldPath": "src/data/fin2.lean", "newPath": "src/data/fin2.lean", "changes": []}]}, {"timestamp": 1624469367, "sha": "89b8e0b2", "message": "docs(data/option/defs): add module and def docstrings (#8042)", "changes": [{"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}]}, {"timestamp": 1624469366, "sha": "431207ae", "message": "docs(data/list/bag_inter): add module docstring (#8034)", "changes": [{"oldPath": "src/data/list/bag_inter.lean", "newPath": "src/data/list/bag_inter.lean", "changes": []}]}, {"timestamp": 1624469365, "sha": "dd5074c4", "message": "feat(analysis/normed_space/basic): add has_nnnorm (#7986)\nWe create here classes `has_nndist` and `has_nnnorm` that are variants of `has_dist` and `has_norm` taking values in `ℝ≥0`. Obvious instances are `pseudo_metric_space` and `semi_normed_group`.\nThese are not used that much in mathlib, but for example `has_nnnorm` is quite convenient for LTE.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "coe_nnnorm", []], ["mod", "theorem", "nnnorm", ["continuous"]], ["mod", "theorem", "nnnorm", ["continuous_at"]], ["mod", "theorem", "continuous_nnnorm", []], ["mod", "theorem", "nnnorm", ["continuous_on"]], ["mod", "theorem", "edist_eq_coe_nnnorm", []], ["mod", "theorem", "edist_eq_coe_nnnorm_sub", []], ["mod", "theorem", "mem_emetric_ball_0_iff", []], ["mod", "theorem", "nndist_eq_nnnorm", []], ["mod", "theorem", "nndist_nnnorm_nnnorm_le", []], ["del", "def", "nnnorm", []], ["mod", "theorem", "nnnorm_add_le", []], ["mod", "theorem", "nnnorm_eq_zero", []], ["mod", "theorem", "nnnorm_gsmul_le", []], ["mod", "theorem", "nnnorm_neg", []], ["mod", "theorem", "nnnorm_norm", []], ["mod", "theorem", "nnnorm_nsmul_le", []], ["mod", "theorem", "nnnorm_one", []], ["mod", "theorem", "nnnorm_smul", []], ["mod", "theorem", "nnnorm_zero", []], ["mod", "theorem", "coe_nat_abs", ["nnreal"]], ["mod", "theorem", "nnnorm_eq", ["nnreal"]], ["mod", "theorem", "nnnorm_div", ["normed_field"]], ["mod", "theorem", "nnnorm_fpow", ["normed_field"]], ["mod", "theorem", "nnnorm_inv", ["normed_field"]], ["mod", "theorem", "nnnorm_mul", ["normed_field"]], ["mod", "theorem", "nnnorm_pow", ["normed_field"]], ["mod", "theorem", "of_real_norm_eq_coe_nnnorm", []], ["mod", "theorem", "nnnorm_def", ["prod"]], ["mod", "theorem", "nnsemi_norm_def", ["prod"]], ["mod", "theorem", "ennnorm_eq_of_real", ["real"]], ["mod", "theorem", "nnnorm_coe_nat", ["real"]], ["mod", "theorem", "nnnorm_of_nonneg", ["real"]], ["mod", "theorem", "nnnorm_two", ["real"]], ["mod", "theorem", "norm_two", ["real"]], ["mod", "theorem", "summable_of_summable_nnnorm", []], ["mod", "theorem", "uniform_continuous_nnnorm", []]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "def", "nndist", []]]}]}, {"timestamp": 1624463619, "sha": "a7b5237d", "message": "feat(category_theory/arrow): arrow.iso_mk (#8057)", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "def", "iso_mk", ["category_theory", "arrow"]]]}]}, {"timestamp": 1624463618, "sha": "c841b09a", "message": "docs(data/list/tfae): add module docstring (#8040)", "changes": [{"oldPath": "src/data/list/tfae.lean", "newPath": "src/data/list/tfae.lean", "changes": []}]}, {"timestamp": 1624463617, "sha": "5787d64b", "message": "docs(data/list/zip): add module docstring (#8036)", "changes": [{"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}]}, {"timestamp": 1624457512, "sha": "97529b4c", "message": "docs(data/list/forall2): add module docstring (#8029)", "changes": [{"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["mod", "theorem", "flip", ["list", "forall₂"]], ["mod", "theorem", "mp", ["list", "forall₂"]], ["mod", "theorem", "forall₂_same", ["list"]], ["mod", "theorem", "right_unique_forall₂'", ["list"]]]}]}, {"timestamp": 1624449023, "sha": "d9eed422", "message": "feat(analysis/liouville/inequalities_and_series): two useful inequalities for Liouville (#8001)\nThis PR ~~creates a file with~~ proves two very specific inequalities. They will be useful for the Liouville PR, showing that transcendental Liouville numbers exist.\nAfter the initial code review, I scattered an initial segment of this PR into mathlib. What is left might only be useful in the context of proving the transcendence of Liouville's constants.\n~~Given the shortness of this file, I may move it into the main `liouville_constant`, after PR #8020 is merged.~~", "changes": [{"oldPath": "src/analysis/liouville/liouville_constant.lean", "newPath": "src/analysis/liouville/liouville_constant.lean", "changes": [["add", "theorem", "aux_calc", ["liouville"]], ["add", "theorem", "tsum_one_div_pow_factorial_lt", ["liouville"]]]}]}, {"timestamp": 1624440309, "sha": "47ed97f3", "message": "feat(algebra/ordered_monoid_lemmas + fixes): consistent use of `covariant` and `contravariant` in `ordered_monoid_lemmas` (#7876)\nThis PR breaks off a part of PR #7645. Here, I start using more consistently `covariant_class` and `contravariant_class` in the file `algebra/ordered_monoid_lemmas`.\nThis PR is simply intended as a stepping stone to merging the bigger one (#7645) and receiving \"personalized comments on it!\nSummary of changes:\n--\nNew lemmas\n* `@[to_additive add_nonneg] lemma one_le_mul_right`\n* `@[to_additive] lemma le_mul_of_le_of_le_one`\n* `@[to_additive] lemma mul_lt_mul_of_lt_of_lt`\n* `@[to_additive] lemma left.mul_lt_one_of_lt_of_lt_one`\n* `@[to_additive] lemma right.mul_lt_one_of_lt_of_lt_one`\n* `@[to_additive] lemma left.mul_lt_one_of_lt_of_lt_one`\n* `@[to_additive] lemma right.mul_lt_one_of_lt_of_lt_one`\n* `@[to_additive right.add_nonneg] lemma right.one_le_mul`\n* `@[to_additive right.pos_add] lemma right.one_lt_mul`\n--\nLemmas that have merged with their unprimed versions due to diminished typeclass assumptions\n* `@[to_additive] lemma lt_mul_of_one_le_of_lt'`\n* `@[to_additive] lemma lt_mul_of_one_lt_of_lt'`\n* `@[to_additive] lemma mul_le_of_le_of_le_one'`\n* `@[to_additive] lemma mul_le_of_le_one_of_le'`\n* `@[to_additive] lemma mul_lt_of_lt_of_le_one'`\n* `@[to_additive] lemma mul_lt_of_lt_of_lt_one'`\n* `@[to_additive] lemma mul_lt_of_lt_one_of_lt'`\n* the three lemmas\n* * `@[to_additive] lemma mul_lt_of_le_one_of_lt'`,\n* * `mul_lt_one_of_le_one_of_lt_one`,\n* * `mul_lt_one_of_le_one_of_lt_one'`\nall merged into `mul_lt_of_le_one_of_lt`\n--\nLemma `@[to_additive] lemma mul_lt_one` broke into\n* `@[to_additive] lemma left.mul_lt_one`\n* `@[to_additive] lemma right.mul_lt_one`\ndepending on typeclass assumptions\n--\nLemmas that became a direct application of another lemma\n* `@[to_additive] lemma mul_lt_one_of_lt_one_of_le_one` and `mul_lt_one_of_lt_one_of_le_one'` are applications of `mul_lt_of_lt_of_le_one`\n* `@[to_additive] lemma mul_lt_one'` is an application of `mul_lt_of_lt_of_lt_one`\n--\nLemma `@[to_additive] lemma mul_eq_one_iff_eq_one_of_one_le` changed name to `mul_eq_one_iff_eq_one_of_one_le`.\nThe multiplicative version is never used.\nThe additive version, `add_eq_zero_iff_eq_zero_of_nonneg` is used: I changed the occurrences in favour of the shorter name.\n--\nLemma `@[to_additive add_nonpos] lemma mul_le_one'` continues as\n```lean\nalias mul_le_of_le_of_le_one ← mul_le_one'\nattribute [to_additive add_nonpos] mul_le_one'\n```\n", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": [["add", "def", "to_left_cancel_semigroup", ["contravariant"]], ["add", "def", "to_right_cancel_semigroup", ["contravariant"]], ["mod", "theorem", "le_mul_iff_one_le_left'", []], ["mod", "theorem", "le_mul_iff_one_le_right'", []], ["add", "theorem", "le_mul_of_le_of_le_one", []], ["mod", "theorem", "le_mul_of_one_le_of_le", []], ["mod", "theorem", "le_mul_of_one_le_right'", []], ["mod", "theorem", "le_of_mul_le_mul_left'", []], ["mod", "theorem", "le_of_mul_le_mul_right'", []], ["add", "theorem", "mul_lt_one", ["left"]], ["add", "theorem", "mul_lt_one_of_lt_of_lt_one", ["left"]], ["mod", "theorem", "lt_mul_iff_one_lt_left'", []], ["mod", "theorem", "lt_mul_iff_one_lt_right'", []], ["mod", "theorem", "lt_mul_of_le_of_one_lt", []], ["mod", "theorem", "lt_mul_of_lt_of_one_le", []], ["mod", "theorem", "lt_mul_of_lt_of_one_lt", []], ["del", "theorem", "lt_mul_of_one_le_of_lt'", []], ["mod", "theorem", "lt_mul_of_one_lt_left'", []], ["mod", "theorem", "lt_mul_of_one_lt_of_le", []], ["del", "theorem", "lt_mul_of_one_lt_of_lt'", []], ["mod", "theorem", "lt_mul_of_one_lt_right'", []], ["mod", "theorem", "lt_of_mul_lt_mul_left'", []], ["mod", "theorem", "const_mul'", ["monotone"]], ["mod", "theorem", "mul'", ["monotone"]], ["mod", "theorem", "mul_const'", ["monotone"]], ["mod", "theorem", "mul_strict_mono'", ["monotone"]], ["del", "theorem", "mul_eq_one_iff_eq_one_of_one_le", []], ["mod", "theorem", "mul_le_iff_le_one_left'", []], ["mod", "theorem", "mul_le_iff_le_one_right'", []], ["mod", "theorem", "mul_le_mul_iff_left", []], ["mod", "theorem", "mul_le_mul_iff_right", []], ["mod", "theorem", "mul_le_mul_left'", []], ["mod", "theorem", "mul_le_mul_right'", []], ["mod", "theorem", "mul_le_mul_three", []], ["del", "theorem", "mul_le_of_le_of_le_one'", []], ["mod", "theorem", "mul_le_of_le_of_le_one", []], ["del", "theorem", "mul_le_of_le_one_of_le'", []], ["mod", "theorem", "mul_le_of_le_one_of_le", []], ["mod", "theorem", "mul_le_of_le_one_right'", []], ["del", "theorem", "mul_le_one'", []], ["mod", "theorem", "mul_lt_iff_lt_one_left'", []], ["mod", "theorem", "mul_lt_iff_lt_one_right'", []], ["mod", "theorem", "mul_lt_mul_iff_left", []], ["mod", "theorem", "mul_lt_mul_iff_right", []], ["mod", "theorem", "mul_lt_mul_left'", []], ["mod", "theorem", "mul_lt_mul_of_le_of_lt", []], ["mod", "theorem", "mul_lt_mul_of_lt_of_le", []], ["add", "theorem", "mul_lt_mul_of_lt_of_lt", []], ["mod", "theorem", "mul_lt_mul_right'", []], ["mod", "theorem", "mul_lt_of_le_of_lt_one", []], ["del", "theorem", "mul_lt_of_le_one_of_lt'", []], ["mod", "theorem", "mul_lt_of_le_one_of_lt", []], ["del", "theorem", "mul_lt_of_lt_of_le_one'", []], ["mod", "theorem", "mul_lt_of_lt_of_le_one", []], ["del", "theorem", "mul_lt_of_lt_of_lt_one'", []], ["mod", "theorem", "mul_lt_of_lt_of_lt_one", []], ["mod", "theorem", "mul_lt_of_lt_one_of_le", []], ["del", "theorem", "mul_lt_of_lt_one_of_lt'", []], ["mod", "theorem", "mul_lt_of_lt_one_of_lt", []], ["del", "theorem", "mul_lt_one'", []], ["del", "theorem", "mul_lt_one", []], ["del", "theorem", "mul_lt_one_of_le_one_of_lt_one'", []], ["del", "theorem", "mul_lt_one_of_le_one_of_lt_one", []], ["del", "theorem", "mul_lt_one_of_lt_one_of_le_one'", []], ["del", "theorem", "mul_lt_one_of_lt_one_of_le_one", []], ["mod", "theorem", "one_le_mul", []], ["add", "theorem", "one_le_mul_right", []], ["add", "theorem", "mul_lt_one", ["right"]], ["add", "theorem", "mul_lt_one_of_lt_of_lt_one", ["right"]], ["add", "theorem", "one_le_mul", ["right"]], ["add", "theorem", "one_lt_mul", ["right"]]]}, {"oldPath": "src/algebra/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/pow.lean", "newPath": "src/data/nat/pow.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/tactic/linarith/verification.lean", "newPath": "src/tactic/linarith/verification.lean", "changes": []}]}, {"timestamp": 1624424310, "sha": "168678ed", "message": "feat(analysis/liouville/liouville_constant): develop some API for Liouville (#8005)\nProof of some inequalities for Liouville numbers.", "changes": [{"oldPath": "src/analysis/liouville/liouville_constant.lean", "newPath": "src/analysis/liouville/liouville_constant.lean", "changes": [["add", "theorem", "liouville_number_eq_initial_terms_add_tail", ["liouville"]], ["add", "theorem", "liouville_number_tail_pos", ["liouville"]]]}]}, {"timestamp": 1624416994, "sha": "ac2142c0", "message": "chore(scripts): update nolints.txt (#8051)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1624411297, "sha": "0bc09d9a", "message": "feat(algebra/ordered_field): a few monotonicity results for powers (#8022)\nThis PR proves the monotonicity (strict and non-strict) of `n → 1 / a ^ n`, for a fixed `a < 1` in a linearly ordered field. These are lemmas extracted from PR #8001: I moved them to a separate PR after the discussion there.", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "one_div_pow_le_one_div_pow_of_le", []], ["add", "theorem", "one_div_pow_lt_one_div_pow_of_lt", []], ["add", "theorem", "one_div_pow_mono", []], ["add", "theorem", "one_div_pow_strict_mono", []], ["add", "theorem", "one_div_strict_mono_decr_on", []]]}]}, {"timestamp": 1624399598, "sha": "949e98e6", "message": "chore(topology/basic): add missing lemma (#8048)\nAdds `is_closed.sdiff`. From LTE.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "sdiff", ["is_closed"]]]}]}, {"timestamp": 1624394150, "sha": "de4a4ce1", "message": "feat(ring_theory/adjoin/basic): lemmas relating adjoin and submodule.span (#8031)", "changes": [{"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_eq_span_of_subset", ["algebra"]], ["add", "theorem", "adjoin_to_submodule_le", ["algebra"]], ["add", "theorem", "span_le_adjoin", ["algebra"]]]}]}, {"timestamp": 1624391564, "sha": "c594196f", "message": "chore(topology/continuous_function/algebra): delete old instances, use bundled sub[monoid, group, ring]s (#8004)\nWe remove the `monoid`, `group`, ... instances on `{ f : α → β | continuous f }` since `C(α, β)` should be used instead, and we replacce the `sub[monoid, group, ...]` instances on `{ f : α → β | continuous f }` by definitions of bundled subobjects with carrier `{ f : α → β | continuous f }`. We keep the `set_of` for subobjects since we need a subset to be the carrier.\nZulip : https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/instances.20on.20continuous.20subtype", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["del", "def", "C", ["continuous"]], ["del", "theorem", "coe_smul", ["continuous_functions"]], ["add", "def", "continuous_subalgebra", []], ["add", "def", "continuous_subgroup", []], ["add", "def", "continuous_submodule", []], ["add", "def", "continuous_submonoid", []], ["add", "def", "continuous_subring", []], ["add", "def", "continuous_subsemiring", []]]}]}, {"timestamp": 1624379218, "sha": "83bd2e68", "message": "feat(analysis/normed_space/multilinear): add a few inequalities (#8018)\nAlso add a few lemmas about `tsum` and `nnnorm`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_tsum_le", []], ["add", "theorem", "tsum_of_nnnorm_bounded", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "le_of_op_nnnorm_le", ["continuous_multilinear_map"]], ["add", "theorem", "le_op_nnnorm", ["continuous_multilinear_map"]], ["add", "theorem", "le_op_norm_mul_pow_card_of_le", ["continuous_multilinear_map"]], ["add", "theorem", "le_op_norm_mul_pow_of_le", ["continuous_multilinear_map"]], ["add", "theorem", "le_op_norm_mul_prod_of_le", ["continuous_multilinear_map"]], ["add", "theorem", "tsum_eval", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1624379217, "sha": "9c4afb11", "message": "feat(data/zmod): equivalence between the quotient type ℤ / aℤ and `zmod a` (#7976)\nThis PR defines the equivalence between `zmod a` and ℤ / aℤ, where `a : ℕ` or `a : ℤ`, and the quotient is a quotient group or quotient ring.\nIt also defines `zmod.lift n f hf : zmod n →+ A` induced by an additive hom `f : ℤ →+ A` such that `f n = 0`. (The latter map could be, but is no longer, defined as the composition of the equivalence with `quotient.lift f`.)\nZulip threads:\n - [`(ideal.span {d}).quotient` is `zmod d`](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60.28ideal.2Espan.20.7Bd.7D.29.2Equotient.60.20is.20.60zmod.20d.60)\n - [Homomorphism from the integers descends to $$\\mathbb{Z}/n$$](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Homomorphism.20from.20the.20integers.20descends.20to.20.24.24.5Cmathbb.7BZ.7D.2Fn.24.24)\n - [ `∈ gmultiples` iff divides](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60.E2.88.88.20gmultiples.60.20iff.20divides)", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "ker_int_cast_add_hom", ["zmod"]], ["add", "theorem", "ker_int_cast_ring_hom", ["zmod"]], ["add", "def", "lift", ["zmod"]], ["add", "theorem", "lift_cast_add_hom", ["zmod"]], ["add", "theorem", "lift_coe", ["zmod"]], ["add", "theorem", "lift_comp_cast_add_hom", ["zmod"]], ["add", "theorem", "lift_comp_coe", ["zmod"]]]}, {"oldPath": null, "newPath": "src/data/zmod/quotient.lean", "changes": [["add", "def", "quotient_gmultiples_equiv_zmod", ["int"]], ["add", "def", "quotient_gmultiples_nat_equiv_zmod", ["int"]], ["add", "def", "quotient_span_equiv_zmod", ["int"]], ["add", "def", "quotient_span_nat_equiv_zmod", ["int"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "mem_gmultiples_iff", ["add_subgroup"]], ["add", "theorem", "mem_gmultiples_iff", ["int"]], ["add", "theorem", "mem_gpowers_iff", ["subgroup"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "def", "quot_equiv_of_eq", ["ideal"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "gmultiples_nat_abs", ["int"]], ["add", "theorem", "span_nat_abs", ["int"]]]}]}, {"timestamp": 1624373493, "sha": "f477e03a", "message": "docs(data/list/erasedup): add module docstring (#8030)", "changes": [{"oldPath": "src/data/list/erase_dup.lean", "newPath": "src/data/list/erase_dup.lean", "changes": []}]}, {"timestamp": 1624373492, "sha": "7e20058e", "message": "feat(topology/Profinite/cofiltered_limit): Locally constant functions from cofiltered limits (#7992)\nThis generalizes one of the main technical theorems from LTE about cofiltered limits of profinite sets.\nThis theorem should be useful for a future proof of Stone duality.", "changes": [{"oldPath": "src/topology/category/Profinite/cofiltered_limit.lean", "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": [["add", "theorem", "exists_locally_constant", ["Profinite"]], ["add", "theorem", "exists_locally_constant_fin_two", ["Profinite"]], ["add", "theorem", "exists_locally_constant_fintype_aux", ["Profinite"]], ["add", "theorem", "exists_locally_constant_fintype_nonempty", ["Profinite"]]]}, {"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": [["add", "def", "discrete_quotient", ["locally_constant"]], ["add", "theorem", "factors", ["locally_constant"]], ["add", "def", "lift", ["locally_constant"]], ["add", "theorem", "lift_eq_coe", ["locally_constant"]], ["add", "theorem", "lift_is_locally_constant", ["locally_constant"]], ["add", "def", "locally_constant_lift", ["locally_constant"]]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "is_clopen_fiber", ["is_locally_constant"]], ["add", "theorem", "is_closed_fiber", ["is_locally_constant"]]]}]}, {"timestamp": 1624369921, "sha": "6e5de190", "message": "feat(linear_algebra/free_module): add lemmas (#7950)\nEasy results about free modules.", "changes": [{"oldPath": "src/algebra/category/Module/projective.lean", "newPath": "src/algebra/category/Module/projective.lean", "changes": []}, {"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": [["add", "theorem", "projective_of_basis", ["module"]], ["del", "theorem", "projective_of_free", ["module"]]]}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["mod", "theorem", "linear_independent_std_basis", ["pi"]]]}]}, {"timestamp": 1624365940, "sha": "cb7b6cb3", "message": "docs(data/list/rotate): add module docstring (#8027)", "changes": [{"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": []}]}, {"timestamp": 1624365939, "sha": "94a80738", "message": "feat(analysis/specific_limits): summability of `(λ i, 1 / m ^ f i)` (#8023)\nThis PR shows the summability of the series whose `i`th term is `1 / m ^ f i`, where `1 < m` is a fixed real number and `f : ℕ → ℕ` is a function bounded below by the identity function. While a function eventually bounded below by a constant at least equal to 2 would have been enough, this specific shape is convenient for the Liouville application.\nI extracted this lemma, following the discussion in PR #8001.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "summable_one_div_pow_of_le", []]]}]}, {"timestamp": 1624365938, "sha": "a3699b98", "message": "refactor(topology/sheaves/stalks): Refactor proofs about stalk map (#8000)\nRefactoring and speeding up some of my code on stalk maps from #7092.", "changes": [{"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "app_surjective_of_stalk_functor_map_bijective", ["Top", "presheaf"]], ["mod", "theorem", "section_ext", ["Top", "presheaf"]]]}]}, {"timestamp": 1624365937, "sha": "208d4fed", "message": "docs(data/pnat): add module docstrings (#7960)", "changes": [{"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": [["del", "def", "xgcd:", ["pnat"]], ["add", "def", "xgcd", ["pnat"]]]}]}, {"timestamp": 1624361802, "sha": "4cbe7d62", "message": "feat(group_theory/specific_groups/cyclic): A group is commutative if the quotient by the center is cyclic (#7952)", "changes": [{"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": [["add", "def", "comm_group_of_cycle_center_quotient", []], ["add", "theorem", "commutative_of_cyclic_center_quotient", []]]}]}, {"timestamp": 1624361800, "sha": "a1a0940c", "message": "chore(ring_theory/ideal): mark `ideal.quotient` as reducible (#7892)\nI had an ideal and wanted to apply a theorem about submodule quotients to the ideal quotient. The API around ideals is designed to have most things defeq to the corresponding submodule definition. Marking this definition as reducible informs the typeclass system that it can use this defeq.\nTest case:\n````lean\nimport ring_theory.ideal.basic\n/-- Typeclass instances on ideal quotients transfer to submodule quotients.\nThis is useful if you want to apply results that hold for general submodules\nto ideals specifically.\nThe instance will not be found if `ideal.quotient` is not reducible,\ne.g. after you uncomment the following line:\n```\nlocal attribute [semireducible] ideal.quotient\n```\n-/\nexample {R : Type*} [comm_ring R] (I : ideal R)\n [fintype (ideal.quotient I)] : fintype (submodule.quotient I) :=\ninfer_instance\n````\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Making.20.60ideal.2Equotient.60.20reducible.20.28or.20deleted.20altogether.3F.29", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}]}, {"timestamp": 1624361800, "sha": "96f09a67", "message": "feat(group_theory/perm/cycles): cycle_factors_finset (#7540)", "changes": [{"oldPath": "src/data/finset/noncomm_prod.lean", "newPath": "src/data/finset/noncomm_prod.lean", "changes": [["add", "theorem", "noncomm_prod_singleton", ["finset"]]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["del", "theorem", "list_cycles_perm_list_cycles", ["equiv", "perm"]], ["del", "theorem", "mem_list_cycles_iff", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "def", "cycle_factors_finset", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_eq_empty_iff", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_eq_finset", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_eq_list_to_finset", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_eq_singleton_iff", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_eq_singleton_self_iff", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_injective", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_mem_commute", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_noncomm_prod", ["equiv", "perm"]], ["add", "theorem", "cycle_factors_finset_pairwise_disjoint", ["equiv", "perm"]], ["add", "theorem", "eq_on_support_inter_nonempty_congr", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "support_congr", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "list_cycles_perm_list_cycles", ["equiv", "perm"]], ["add", "theorem", "mem_cycle_factors_finset_iff", ["equiv", "perm"]], ["add", "theorem", "mem_list_cycles_iff", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": [["add", "theorem", "commute", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mem_imp", ["equiv", "perm", "disjoint"]], ["del", "theorem", "mul_comm", ["equiv", "perm", "disjoint"]], ["add", "theorem", "symmetric", ["equiv", "perm", "disjoint"]], ["add", "theorem", "eq_on_support_mem_disjoint", ["equiv", "perm"]], ["add", "theorem", "pow_eq_on_of_mem_support", ["equiv", "perm"]], ["mod", "theorem", "support_congr", ["equiv", "perm"]], ["add", "theorem", "support_le_prod_of_mem", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": []}]}, {"timestamp": 1624357352, "sha": "9ca85977", "message": "feat(linear_algebra/matrix/reindex): add some lemmas (#7963)\nFrom LTE\nAdded lemmas `reindex_linear_equiv_trans`, `reindex_linear_equiv_comp`, `reindex_linear_equiv_comp_apply`, `reindex_linear_equiv_one` and `mul_reindex_linear_equiv_mul_one` needed in LTE.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "minor", ["matrix"]], ["mod", "theorem", "minor_apply", ["matrix"]], ["add", "theorem", "mul_minor_one", ["matrix"]], ["add", "theorem", "one_minor_mul", ["matrix"]], ["mod", "theorem", "transpose_minor", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": [["add", "theorem", "mul_reindex_linear_equiv_one", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_comp", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_comp_apply", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_mul", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_one", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_trans", ["matrix"]]]}]}, {"timestamp": 1624351343, "sha": "faaa0bcb", "message": "feat(algebra/ordered_field): `(1 - 1 / a)⁻¹ ≤ 2` (#8021)\nA lemma from the Liouville PR #8001. I extracted this lemma, after the discussion there.", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "sub_one_div_inv_le_two", []]]}]}, {"timestamp": 1624331201, "sha": "3b4d1d8f", "message": "chore(scripts): update nolints.txt (#8032)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1624331200, "sha": "6796beeb", "message": "chore(algebra/char_p/basic): generalize to non_assoc_semiring (#7985)", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "congr", ["char_p"]], ["mod", "theorem", "exists", ["char_p"]], ["mod", "theorem", "exists_unique", ["char_p"]]]}]}, {"timestamp": 1624331199, "sha": "4416eacb", "message": "feat(topology/instances/real): a continuous periodic function has compact range (and is hence bounded) (#7968)\nA few more facts about periodic functions, namely:\n- If a function `f` is `periodic` with positive period `p`,\n then for all `x` there exists `y` such that `y` is an element of `[0, p)` and `f x = f y`\n- A continuous, periodic function has compact range\n- A continuous, periodic function is bounded", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "exists_mem_Ico", ["function", "periodic"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "image_subset_range", ["set"]], ["mod", "theorem", "image_univ", ["set"]], ["add", "theorem", "mem_range_of_mem_image", ["set"]], ["mod", "theorem", "range_subset_iff", ["set"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "bounded_of_continuous", ["function", "periodic"]], ["add", "theorem", "compact_of_continuous'", ["function", "periodic"]], ["add", "theorem", "compact_of_continuous", ["function", "periodic"]]]}]}, {"timestamp": 1624326724, "sha": "e4b9561e", "message": "feat(linear_algebra/basic): weaken typeclasses (#8028)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1624307071, "sha": "80daef48", "message": "chore(category_theory/limits): shorten some long lines (#8007)", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}]}, {"timestamp": 1624304594, "sha": "520bbe69", "message": "feat(algebra/non_unital_alg_hom): define non_unital_alg_hom (#7863)\nThe motivation is to be able to state the universal property for a magma algebra using bundled morphisms.", "changes": [{"oldPath": null, "newPath": "src/algebra/non_unital_alg_hom.lean", "changes": [["add", "theorem", "coe_to_non_unital_alg_hom", ["alg_hom"]], ["add", "def", "to_non_unital_alg_hom", ["alg_hom"]], ["add", "theorem", "to_non_unital_alg_hom_eq_coe", ["alg_hom"]], ["add", "theorem", "coe_comp", ["non_unital_alg_hom"]], ["add", "theorem", "coe_distrib_mul_action_hom_mk", ["non_unital_alg_hom"]], ["add", "theorem", "coe_injective", ["non_unital_alg_hom"]], ["add", "theorem", "coe_inverse", ["non_unital_alg_hom"]], ["add", "theorem", "coe_mk", ["non_unital_alg_hom"]], ["add", "theorem", "coe_mul_hom_mk", ["non_unital_alg_hom"]], ["add", "theorem", "coe_one", ["non_unital_alg_hom"]], ["add", "theorem", "coe_to_distrib_mul_action_hom", ["non_unital_alg_hom"]], ["add", "theorem", "coe_to_mul_hom", ["non_unital_alg_hom"]], ["add", "theorem", "coe_zero", ["non_unital_alg_hom"]], ["add", "def", "comp", ["non_unital_alg_hom"]], ["add", "theorem", "comp_apply", ["non_unital_alg_hom"]], ["add", "theorem", "ext", ["non_unital_alg_hom"]], ["add", "theorem", "ext_iff", ["non_unital_alg_hom"]], ["add", "def", "inverse", ["non_unital_alg_hom"]], ["add", "theorem", "map_add", ["non_unital_alg_hom"]], ["add", "theorem", "map_mul", ["non_unital_alg_hom"]], ["add", "theorem", "map_smul", ["non_unital_alg_hom"]], ["add", "theorem", "map_zero", ["non_unital_alg_hom"]], ["add", "theorem", "mk_coe", ["non_unital_alg_hom"]], ["add", "theorem", "one_apply", ["non_unital_alg_hom"]], ["add", "theorem", "to_distrib_mul_action_hom_eq_coe", ["non_unital_alg_hom"]], ["add", "theorem", "to_fun_eq_coe", ["non_unital_alg_hom"]], ["add", "theorem", "to_mul_hom_eq_coe", ["non_unital_alg_hom"]], ["add", "theorem", "zero_apply", ["non_unital_alg_hom"]], ["add", "structure", "non_unital_alg_hom", []]]}]}, {"timestamp": 1624304593, "sha": "2b80d2f6", "message": "feat(geometry/euclidean/sphere): proof of Freek thm 95 - Ptolemy’s Theorem (#7329)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere.lean", "changes": [["add", "theorem", "mul_dist_add_mul_dist_eq_mul_dist_of_cospherical", ["euclidean_geometry"]]]}]}, {"timestamp": 1624302232, "sha": "2fb08428", "message": "perf(ci): use self-hosted runner for bors (#8024)\nRun CI builds for the `staging` branch used by bors on a self-hosted github actions runner. This runner has been graciously provided by Johan Commelin's DFG grant and is hosted at the Albert-Ludwigs-Universität Freiburg.\nWe need to use two github actions workflow files to use a separate runner for the `staging` branch: `build.yml` and `bors.yml`. These are almost identical, except for the `runs-on:` property indicating which runner should be used. The shell script `mk_build_yml.sh` is therefore used to generate both files from the common template `build.yml.in`.", "changes": [{"oldPath": null, "newPath": ".github/workflows/bors.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/build.yml.in", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/lint_self_test.yml", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/mk_build_yml.sh", "changes": []}]}, {"timestamp": 1624285531, "sha": "eb13f6b7", "message": "feat(ring_theory/derivation): add missing dsimp lemmas, use old_structure_command, golf structure proofs (#8013)\nThis adds a pile of missing coercion lemmas proved by refl, and uses them to construct the `add_comm_monoid`, `add_comm_group`, and `module` instances.\nThis also changes `derivation` to be an old-style structure, which is more in line with the other bundled homomorphisms.\nThis also removes `derivation.commutator` to avoid having two ways to spell the same thing, as this leads to lemmas being harder to apply", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["mod", "theorem", "Rsmul_apply", ["derivation"]], ["mod", "theorem", "add_apply", ["derivation"]], ["add", "theorem", "coe_Rsmul", ["derivation"]], ["add", "theorem", "coe_Rsmul_linear_map", ["derivation"]], ["add", "theorem", "coe_add", ["derivation"]], ["add", "theorem", "coe_add_linear_map", ["derivation"]], ["add", "def", "coe_fn_add_monoid_hom", ["derivation"]], ["mod", "theorem", "coe_fn_coe", ["derivation"]], ["mod", "theorem", "coe_injective", ["derivation"]], ["add", "theorem", "coe_neg", ["derivation"]], ["add", "theorem", "coe_neg_linear_map", ["derivation"]], ["add", "theorem", "coe_smul", ["derivation"]], ["add", "theorem", "coe_smul_linear_map", ["derivation"]], ["add", "theorem", "coe_sub", ["derivation"]], ["add", "theorem", "coe_sub_linear_map", ["derivation"]], ["add", "theorem", "coe_zero", ["derivation"]], ["add", "theorem", "coe_zero_linear_map", ["derivation"]], ["del", "def", "commutator", ["derivation"]], ["mod", "theorem", "mk_coe", ["derivation"]], ["add", "theorem", "neg_apply", ["derivation"]], ["mod", "theorem", "smul_apply", ["derivation"]], ["del", "theorem", "smul_to_linear_map_coe", ["derivation"]], ["mod", "theorem", "sub_apply", ["derivation"]], ["add", "theorem", "to_linear_map_eq_coe", ["derivation"]], ["add", "theorem", "zero_apply", ["derivation"]]]}]}, {"timestamp": 1624285528, "sha": "92263c0b", "message": "refactor(algebraic_geometry/structure_sheaf): Enclose definitions in structure_sheaf namespace (#8010)\nMoves some pretty generic names like `const` and `to_open` to the `structure_sheaf` namespace.", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["del", "def", "basic_open_iso", ["algebraic_geometry"]], ["del", "theorem", "coe_open_to_localization", ["algebraic_geometry"]], ["del", "def", "const", ["algebraic_geometry"]], ["del", "theorem", "const_add", ["algebraic_geometry"]], ["del", "theorem", "const_apply'", ["algebraic_geometry"]], ["del", "theorem", "const_apply", ["algebraic_geometry"]], ["del", "theorem", "const_congr", ["algebraic_geometry"]], ["del", "theorem", "const_ext", ["algebraic_geometry"]], ["del", "theorem", "const_mul", ["algebraic_geometry"]], ["del", "theorem", "const_mul_cancel'", ["algebraic_geometry"]], ["del", "theorem", "const_mul_cancel", ["algebraic_geometry"]], ["del", "theorem", "const_mul_rev", ["algebraic_geometry"]], ["del", "theorem", "const_one", ["algebraic_geometry"]], ["del", "theorem", "const_self", ["algebraic_geometry"]], ["del", "theorem", "const_zero", ["algebraic_geometry"]], ["del", "theorem", "exists_const", ["algebraic_geometry"]], ["del", "theorem", "germ_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["del", "theorem", "germ_to_open", ["algebraic_geometry"]], ["del", "theorem", "germ_to_top", ["algebraic_geometry"]], ["del", "theorem", "is_unit_to_basic_open_self", ["algebraic_geometry"]], ["del", "theorem", "is_unit_to_stalk", ["algebraic_geometry"]], ["del", "theorem", "localization_to_basic_open", ["algebraic_geometry"]], ["del", "def", "localization_to_stalk", ["algebraic_geometry"]], ["del", "theorem", "localization_to_stalk_mk'", ["algebraic_geometry"]], ["del", "theorem", "localization_to_stalk_of", ["algebraic_geometry"]], ["del", "theorem", "locally_const_basic_open", ["algebraic_geometry"]], ["del", "theorem", "normalize_finite_fraction_representation", ["algebraic_geometry"]], ["del", "def", "open_to_localization", ["algebraic_geometry"]], ["del", "theorem", "open_to_localization_apply", ["algebraic_geometry"]], ["del", "theorem", "res_apply", ["algebraic_geometry"]], ["del", "theorem", "res_const'", ["algebraic_geometry"]], ["del", "theorem", "res_const", ["algebraic_geometry"]], ["del", "def", "stalk_iso", ["algebraic_geometry"]], ["del", "def", "stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["del", "theorem", "stalk_to_fiber_ring_hom_germ'", ["algebraic_geometry"]], ["del", "theorem", "stalk_to_fiber_ring_hom_germ", ["algebraic_geometry"]], ["del", "theorem", "stalk_to_fiber_ring_hom_to_stalk", ["algebraic_geometry"]], ["add", "def", "basic_open_iso", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "coe_open_to_localization", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "comap", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "comap_apply", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "comap_comp", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "comap_const", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "comap_fun", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "comap_fun_is_locally_fraction", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "comap_id'", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "comap_id", ["algebraic_geometry", "structure_sheaf"]], ["mod", "theorem", "comap_id_eq_map", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "const", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_add", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_apply'", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_apply", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_congr", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_ext", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_mul", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_mul_cancel'", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_mul_cancel", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_mul_rev", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_one", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_self", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "const_zero", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "exists_const", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "germ_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "germ_to_open", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "germ_to_top", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "is_unit_to_basic_open_self", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "is_unit_to_stalk", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "localization_to_basic_open", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "localization_to_stalk", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "localization_to_stalk_mk'", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "localization_to_stalk_of", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "locally_const_basic_open", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "normalize_finite_fraction_representation", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "open_to_localization", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "open_to_localization_apply", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "res_apply", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "res_const'", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "res_const", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "stalk_iso", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "stalk_to_fiber_ring_hom", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "stalk_to_fiber_ring_hom_germ'", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "stalk_to_fiber_ring_hom_germ", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "stalk_to_fiber_ring_hom_to_stalk", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "to_basic_open", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_basic_open_injective", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_basic_open_mk'", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_basic_open_surjective", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_basic_open_to_map", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "to_open", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_open_comp_comap", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_open_eq_const", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_open_germ", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_open_res", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "to_stalk", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "to_stalk_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry", "structure_sheaf"]], ["del", "def", "to_basic_open", ["algebraic_geometry"]], ["del", "theorem", "to_basic_open_injective", ["algebraic_geometry"]], ["del", "theorem", "to_basic_open_mk'", ["algebraic_geometry"]], ["del", "theorem", "to_basic_open_surjective", ["algebraic_geometry"]], ["del", "theorem", "to_basic_open_to_map", ["algebraic_geometry"]], ["del", "def", "to_open", ["algebraic_geometry"]], ["del", "theorem", "to_open_comp_comap", ["algebraic_geometry"]], ["del", "theorem", "to_open_eq_const", ["algebraic_geometry"]], ["del", "theorem", "to_open_germ", ["algebraic_geometry"]], ["del", "theorem", "to_open_res", ["algebraic_geometry"]], ["del", "def", "to_stalk", ["algebraic_geometry"]], ["del", "theorem", "to_stalk_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry"]]]}]}, {"timestamp": 1624285527, "sha": "5bc18a9e", "message": "feat(topology/category/limits): Generalize Topological Kőnig's lemma (#7982)\nThis PR generalizes the Topological Kőnig's lemma to work with limits over cofiltered categories (as opposed to just directed orders). Along the way, we also prove some more API for the category instance on `ulift C`, and provide an `as_small C` construction for a category `C`. \nCoauthored with @kmill", "changes": [{"oldPath": "src/category_theory/category/ulift.lean", "newPath": "src/category_theory/category/ulift.lean", "changes": [["add", "def", "down", ["category_theory", "as_small"]], ["add", "def", "equiv", ["category_theory", "as_small"]], ["add", "def", "up", ["category_theory", "as_small"]], ["add", "theorem", "obj_down_obj_up", ["category_theory"]], ["add", "theorem", "obj_up_obj_down", ["category_theory"]], ["mod", "def", "down", ["category_theory", "ulift"]], ["mod", "def", "equivalence", ["category_theory", "ulift"]], ["mod", "def", "up", ["category_theory", "ulift"]], ["add", "def", "down", ["category_theory", "ulift_hom"]], ["add", "def", "equiv", ["category_theory", "ulift_hom"]], ["add", "def", "obj_down", ["category_theory", "ulift_hom"]], ["add", "def", "obj_up", ["category_theory", "ulift_hom"]], ["add", "def", "up", ["category_theory", "ulift_hom"]], ["add", "def", "{w", ["category_theory"]]]}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["add", "theorem", "nonempty_limit_cone_of_compact_t2_cofiltered_system", ["Top"]], ["del", "theorem", "nonempty_limit_cone_of_compact_t2_inverse_system", ["Top"]], ["mod", "theorem", "closed", ["Top", "partial_sections"]], ["mod", "theorem", "directed", ["Top", "partial_sections"]], ["mod", "theorem", "nonempty", ["Top", "partial_sections"]], ["mod", "def", "partial_sections", ["Top"]], ["add", "theorem", "init", ["nonempty_sections_of_fintype_cofiltered_system"]], ["add", "theorem", "nonempty_sections_of_fintype_cofiltered_system", []], ["del", "theorem", "init", ["nonempty_sections_of_fintype_inverse_system"]], ["del", "def", "directed_order", ["ulift"]]]}]}, {"timestamp": 1624285526, "sha": "9ce032c3", "message": "feat(data/matrix/basic): generalize to non_assoc_semiring (#7974)\nMatrices with whose coefficients form a non-unital and/or non-associative ring themselves form a non-unital and non-associative ring.\nThis isn't a full generalization of the file, the main aim was to generalize the typeclass instances available.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "sum_boole", ["finset"]], ["mod", "theorem", "map_list_sum", ["ring_hom"]], ["mod", "theorem", "map_multiset_sum", ["ring_hom"]], ["mod", "theorem", "map_sum", ["ring_hom"]]]}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "add_dot_product", ["matrix"]], ["mod", "theorem", "col_add", ["matrix"]], ["mod", "theorem", "col_smul", ["matrix"]], ["mod", "theorem", "diagonal_dot_product", ["matrix"]], ["mod", "theorem", "dot_product_add", ["matrix"]], ["mod", "theorem", "dot_product_assoc", ["matrix"]], ["mod", "theorem", "dot_product_diagonal'", ["matrix"]], ["mod", "theorem", "dot_product_diagonal", ["matrix"]], ["mod", "theorem", "dot_product_smul", ["matrix"]], ["mod", "theorem", "dot_product_zero'", ["matrix"]], ["mod", "theorem", "dot_product_zero", ["matrix"]], ["mod", "theorem", "map_mul", ["matrix"]], ["mod", "theorem", "row_add", ["matrix"]], ["mod", "theorem", "row_mul_col_apply", ["matrix"]], ["mod", "theorem", "row_smul", ["matrix"]], ["mod", "theorem", "smul_dot_product", ["matrix"]], ["mod", "theorem", "smul_mul_vec_assoc", ["matrix"]], ["add", "theorem", "sum_apply", ["matrix"]], ["mod", "def", "vec_mul_vec", ["matrix"]], ["mod", "theorem", "zero_dot_product'", ["matrix"]], ["mod", "theorem", "zero_dot_product", ["matrix"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}]}, {"timestamp": 1624264758, "sha": "3ef52f37", "message": "chore(logic/basic): actually fixup `eq_or_ne` (#8015)\nthis lemma loves being broken...", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1624264757, "sha": "abdc3164", "message": "feat(analysis/normed_space/normed_group_hom): add lemmas (#7875)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed_space/SemiNormedGroup.lean", "newPath": "src/analysis/normed_space/SemiNormedGroup.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "coe_comp", ["normed_group_hom"]], ["add", "theorem", "coe_id", ["normed_group_hom"]], ["add", "theorem", "comp_assoc", ["normed_group_hom"]], ["mod", "theorem", "isometry_id", ["normed_group_hom"]], ["add", "theorem", "norm_comp_le_of_le'", ["normed_group_hom"]], ["add", "theorem", "norm_comp_le_of_le", ["normed_group_hom"]], ["mod", "theorem", "norm_id", ["normed_group_hom"]], ["mod", "theorem", "norm_id_le", ["normed_group_hom"]], ["mod", "theorem", "id", ["normed_group_hom", "norm_noninc"]]]}]}, {"timestamp": 1624246661, "sha": "c7d094da", "message": "chore(scripts): update nolints.txt (#8017)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1624246660, "sha": "3925fc0f", "message": "feat(analysis/liouville/liouville_constant.lean): create a file and introduce Liouville's constant (#7996)\nIntroduce a new file and the definition of Liouville's number. This is on the way to PR #4301.", "changes": [{"oldPath": "src/analysis/liouville/basic.lean", "newPath": "src/analysis/liouville/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/liouville/liouville_constant.lean", "changes": [["add", "def", "liouville_number", ["liouville"]], ["add", "def", "liouville_number_initial_terms", ["liouville"]], ["add", "def", "liouville_number_tail", ["liouville"]]]}]}, {"timestamp": 1624246659, "sha": "4d69b0f4", "message": "chore(topology/algebra/infinite_sum): small todo (#7994)\nGeneralize a lemma from `f : ℕ → ℝ` to `f : β → α`, with \n```lean\n[add_comm_group α] [topological_space α] [topological_add_group α] [t2_space α] [decidable_eq β] \n```\nThis was marked as TODO after #6017/#6096.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_ite_eq_extract", []], ["mod", "theorem", "tsum_ite_eq_extract", []]]}]}, {"timestamp": 1624246658, "sha": "5cdbb4c0", "message": "feat(algebra/*/pi, topology/continuous_function/algebra): homomorphism induced by left-composition (#7984)\nGiven a monoid homomorphism from `α` to `β`, there is an induced monoid homomorphism from `I → α` to `I → β`, by left-composition.\nSame result for semirings, modules, algebras.\nSame result for topological monoids, topological semirings, etc, and the function spaces `C(I, α)`, `C(I, β)`, if the homomorphism is continuous.\nOf these eight constructions, the only one I particularly want is the last one (topological algebras). If reviewers feel it is better not to clog mathlib up with unused constructions, I am happy to cut the other seven from this PR.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": [["mod", "def", "eval_ring_hom", ["pi"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": []}]}, {"timestamp": 1624246657, "sha": "18c1c4a8", "message": "fix(tactic/linarith/preprocessing): capture result of zify_proof (#7901)\nthis fixes the error encountered in the MWE in this Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F.20tactics/topic/delayed_abstraction.20meta-variables/near/242376874\nthe `simplify` call inside of `zify_proof` does something bad to the tactic state when called in the scope of an `io.run_tactic`, not entirely sure why ¯\\_(ツ)_/¯", "changes": [{"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}]}, {"timestamp": 1624224972, "sha": "767901ab", "message": "feat(algebra/ordered_ring): `a + 1 ≤ 2 * a` (#7995)\nProve one lemma, useful for the Liouville PR #4301. The placement of the lemma will change, once the `ordered` refactor will get to `ordered_ring`.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "add_one_le_two_mul", []]]}]}, {"timestamp": 1624209675, "sha": "fae00c7c", "message": "chore(analysis/special_functions): move measurability statements to measure_theory folder (#8006)\nMake sure that measure theory is not imported in basic files defining trigonometric functions and real powers. The measurability of these functions is postponed to a new file `measure_theory.special_functions`.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["del", "theorem", "inner", ["ae_measurable"]], ["del", "theorem", "inner", ["measurable"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["del", "theorem", "measurable_exp", ["complex"]], ["del", "theorem", "measurable_im", ["complex"]], ["del", "theorem", "measurable_of_real", ["complex"]], ["del", "theorem", "measurable_re", ["complex"]], ["del", "theorem", "cexp", ["measurable"]], ["del", "theorem", "exp", ["measurable"]], ["del", "theorem", "log", ["measurable"]], ["del", "theorem", "measurable_exp", ["real"]], ["del", "theorem", "measurable_log", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/sqrt.lean", "newPath": "src/analysis/special_functions/sqrt.lean", "changes": [["del", "theorem", "sqrt", ["measurable"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["del", "theorem", "measurable_arg", ["complex"]], ["del", "theorem", "measurable_cos", ["complex"]], ["del", "theorem", "measurable_cosh", ["complex"]], ["del", "theorem", "measurable_log", ["complex"]], ["del", "theorem", "measurable_sin", ["complex"]], ["del", "theorem", "measurable_sinh", ["complex"]], ["del", "theorem", "arctan", ["measurable"]], ["del", "theorem", "carg", ["measurable"]], ["del", "theorem", "ccos", ["measurable"]], ["del", "theorem", "ccosh", ["measurable"]], ["del", "theorem", "clog", ["measurable"]], ["del", "theorem", "cos", ["measurable"]], ["del", "theorem", "cosh", ["measurable"]], ["del", "theorem", "csin", ["measurable"]], ["del", "theorem", "csinh", ["measurable"]], ["del", "theorem", "sin", ["measurable"]], ["del", "theorem", "sinh", ["measurable"]], ["del", "theorem", "measurable_arccos", ["real"]], ["del", "theorem", "measurable_arcsin", ["real"]], ["del", "theorem", "measurable_arctan", ["real"]], ["del", "theorem", "measurable_cos", ["real"]], ["del", "theorem", "measurable_cosh", ["real"]], ["del", "theorem", "measurable_sin", ["real"]], ["del", "theorem", "measurable_sinh", ["real"]]]}, {"oldPath": "src/measure_theory/mean_inequalities.lean", "newPath": "src/measure_theory/mean_inequalities.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/special_functions.lean", "changes": [["add", "theorem", "inner", ["ae_measurable"]], ["add", "theorem", "measurable_arg", ["complex"]], ["add", "theorem", "measurable_cos", ["complex"]], ["add", "theorem", "measurable_cosh", ["complex"]], ["add", "theorem", "measurable_exp", ["complex"]], ["add", "theorem", "measurable_im", ["complex"]], ["add", "theorem", "measurable_log", ["complex"]], ["add", "theorem", "measurable_of_real", ["complex"]], ["add", "theorem", "measurable_re", ["complex"]], ["add", "theorem", "measurable_sin", ["complex"]], ["add", "theorem", "measurable_sinh", ["complex"]], ["add", "theorem", "arctan", ["measurable"]], ["add", "theorem", "carg", ["measurable"]], ["add", "theorem", "ccos", ["measurable"]], ["add", "theorem", "ccosh", ["measurable"]], ["add", "theorem", "cexp", ["measurable"]], ["add", "theorem", "clog", ["measurable"]], ["add", "theorem", "cos", ["measurable"]], ["add", "theorem", "cosh", ["measurable"]], ["add", "theorem", "csin", ["measurable"]], ["add", "theorem", "csinh", ["measurable"]], ["add", "theorem", "exp", ["measurable"]], ["add", "theorem", "inner", ["measurable"]], ["add", "theorem", "log", ["measurable"]], ["add", "theorem", "sin", ["measurable"]], ["add", "theorem", "sinh", ["measurable"]], ["add", "theorem", "sqrt", ["measurable"]], ["add", "theorem", "measurable_arccos", ["real"]], ["add", "theorem", "measurable_arcsin", ["real"]], ["add", "theorem", "measurable_arctan", ["real"]], ["add", "theorem", "measurable_cos", ["real"]], ["add", "theorem", "measurable_cosh", ["real"]], ["add", "theorem", "measurable_exp", ["real"]], ["add", "theorem", "measurable_log", ["real"]], ["add", "theorem", "measurable_sin", ["real"]], ["add", "theorem", "measurable_sinh", ["real"]]]}]}, {"timestamp": 1624196408, "sha": "547df12b", "message": "chore(analysis/liouville/liouville + data/real/liouville): create folder `analysis/liouville/`, move `data/real/liouville` into new folder (#7998)\nThis PR simply creates a new folder `analysis/liouville` and moves `data/real/liouville` into the new folder. In PR #7996 I create a new Liouville-related file in the same folder.", "changes": [{"oldPath": "src/data/real/liouville.lean", "newPath": "src/analysis/liouville/basic.lean", "changes": []}]}, {"timestamp": 1624190749, "sha": "3a0f2822", "message": "feat(measure_theory/interval_integral): integral of a non-integrable function (#8011)\nThe `interval_integral` of a non-`interval_integrable` function is `0`.", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "integral_non_ae_measurable", ["interval_integral"]], ["mod", "theorem", "integral_non_ae_measurable_of_le", ["interval_integral"]], ["add", "theorem", "integral_undef", ["interval_integral"]]]}]}, {"timestamp": 1624145931, "sha": "7d155d95", "message": "refactor(topology/metric_space/isometry): move material about isometries of normed spaces (#8003)\nSee https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/topology.20and.20analysis", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "isometry_iff_norm", ["add_monoid_hom"]], ["add", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["add", "theorem", "algebra_map_isometry", []], ["add", "theorem", "add_left_symm", ["isometric"]], ["add", "theorem", "add_left_to_equiv", ["isometric"]], ["add", "theorem", "add_right_apply", ["isometric"]], ["add", "theorem", "add_right_symm", ["isometric"]], ["add", "theorem", "add_right_to_equiv", ["isometric"]], ["add", "theorem", "coe_add_left", ["isometric"]], ["add", "theorem", "coe_add_right", ["isometric"]], ["add", "theorem", "coe_neg", ["isometric"]], ["add", "theorem", "neg_symm", ["isometric"]], ["add", "theorem", "neg_to_equiv", ["isometric"]], ["add", "theorem", "norm_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/normed_group.lean", "newPath": null, "changes": [["del", "theorem", "norm_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["del", "theorem", "isometry_iff_norm", ["add_monoid_hom"]], ["del", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["del", "theorem", "algebra_map_isometry", []], ["del", "theorem", "add_left_symm", ["isometric"]], ["del", "theorem", "add_left_to_equiv", ["isometric"]], ["del", "theorem", "add_right_apply", ["isometric"]], ["del", "theorem", "add_right_symm", ["isometric"]], ["del", "theorem", "add_right_to_equiv", ["isometric"]], ["del", "theorem", "coe_add_left", ["isometric"]], ["del", "theorem", "coe_add_right", ["isometric"]], ["del", "theorem", "coe_neg", ["isometric"]], ["del", "theorem", "neg_symm", ["isometric"]], ["del", "theorem", "neg_to_equiv", ["isometric"]]]}]}, {"timestamp": 1624145931, "sha": "7d5b50a7", "message": "feat(algebra/homology/homotopy): flesh out the api a bit, add some simps (#7941)", "changes": [{"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": [["add", "theorem", "d_next_nat", []], ["add", "def", "comp", ["homotopy"]], ["add", "def", "of_eq", ["homotopy"]], ["add", "theorem", "prev_d_nat", []]]}]}, {"timestamp": 1624126748, "sha": "63c3ab56", "message": "chore(data/int/basic): rationalize the arguments implicitness (mostly to_nat_sub_of_le) (#7997)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "coe_pred_of_pos", ["int"]], ["mod", "theorem", "mod_mod_of_dvd", ["int"]], ["mod", "theorem", "mul_div_mul_of_pos_left", ["int"]], ["mod", "theorem", "mul_mod_mul_of_pos", ["int"]], ["mod", "theorem", "of_nat_add_neg_succ_of_nat_of_lt", ["int"]], ["mod", "theorem", "sub_div_of_dvd", ["int"]], ["mod", "theorem", "to_nat_sub_of_le", ["int"]]]}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}]}, {"timestamp": 1624116675, "sha": "cd8f7b5c", "message": "chore(topology/metric_space/pi_Lp): move to analysis folder, import inner_product_space (#7991)\nCurrently, the file `pi_Lp` (on finite products of metric spaces, with the `L^p` norm) is in the topology folder, but it imports a lot of analysis (to have real powers) and it defines a normed space structure, so it makes more sense to have it in analysis. Also, it is currently imported by `inner_product_space`, to give an explicit construction of an inner product space on `pi_Lp 2`, which means that all files importing general purposes lemmas on inner product spaces also import real powers, trigonometry, and so on. We swap the imports, letting `pi_Lp` import `inner_product_space` and moving the relevant bits from the latter file to the former. This gives a more reasonable import graph.", "changes": [{"oldPath": "src/analysis/normed_space/euclidean_dist.lean", "newPath": "src/analysis/normed_space/euclidean_dist.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["del", "def", "isometry_euclidean_of_orthonormal", ["basis"]], ["del", "def", "isometry_euclidean", ["complex"]], ["del", "theorem", "isometry_euclidean_apply_one", ["complex"]], ["del", "theorem", "isometry_euclidean_apply_zero", ["complex"]], ["del", "theorem", "isometry_euclidean_proj_eq_self", ["complex"]], ["del", "theorem", "isometry_euclidean_symm_apply", ["complex"]], ["del", "theorem", "norm_eq", ["euclidean_space"]], ["del", "def", "euclidean_space", []], ["del", "theorem", "finrank_euclidean_space", []], ["del", "theorem", "finrank_euclidean_space_fin", []], ["del", "def", "from_orthogonal_span_singleton", ["linear_isometry_equiv"]], ["del", "def", "of_inner_product_space", ["linear_isometry_equiv"]], ["del", "theorem", "inner_apply", ["pi_Lp"]], ["del", "theorem", "norm_eq_of_L2", ["pi_Lp"]]]}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/analysis/normed_space/pi_Lp.lean", "changes": [["add", "def", "isometry_euclidean_of_orthonormal", ["basis"]], ["add", "def", "isometry_euclidean", ["complex"]], ["add", "theorem", "isometry_euclidean_apply_one", ["complex"]], ["add", "theorem", "isometry_euclidean_apply_zero", ["complex"]], ["add", "theorem", "isometry_euclidean_proj_eq_self", ["complex"]], ["add", "theorem", "isometry_euclidean_symm_apply", ["complex"]], ["add", "theorem", "norm_eq", ["euclidean_space"]], ["add", "def", "euclidean_space", []], ["add", "theorem", "finrank_euclidean_space", []], ["add", "theorem", "finrank_euclidean_space_fin", []], ["add", "def", "from_orthogonal_span_singleton", ["linear_isometry_equiv"]], ["add", "def", "of_inner_product_space", ["linear_isometry_equiv"]], ["add", "theorem", "inner_apply", ["pi_Lp"]], ["add", "theorem", "norm_eq_of_L2", ["pi_Lp"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}]}, {"timestamp": 1624116674, "sha": "497b84d2", "message": "chore(analysis/mean_inequalities): split integral mean inequalities to a new file (#7990)\nCurrently, `normed_space.dual` imports a bunch of integration theory for no reason other than the file `mean_inequalities` contains both inequalities for finite sums and integrals. Splitting the file into two (and moving the integral versions to `measure_theory`) gives a more reasonable import graph.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["del", "theorem", "ae_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["del", "theorem", "fun_eq_fun_mul_inv_snorm_mul_snorm", ["ennreal"]], ["del", "def", "fun_mul_inv_snorm", ["ennreal"]], ["del", "theorem", "fun_mul_inv_snorm_rpow", ["ennreal"]], ["del", "theorem", "lintegral_Lp_add_le", ["ennreal"]], ["del", "theorem", "lintegral_Lp_mul_le_Lq_mul_Lr", ["ennreal"]], ["del", "theorem", "lintegral_mul_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["del", "theorem", "lintegral_mul_le_Lp_mul_Lq", ["ennreal"]], ["del", "theorem", "lintegral_mul_le_Lp_mul_Lq_of_ne_zero_of_eq_top", ["ennreal"]], ["del", "theorem", "lintegral_mul_le_Lp_mul_Lq_of_ne_zero_of_ne_top", ["ennreal"]], ["del", "theorem", "lintegral_mul_le_one_of_lintegral_rpow_eq_one", ["ennreal"]], ["del", "theorem", "lintegral_mul_rpow_le_lintegral_rpow_mul_lintegral_rpow", ["ennreal"]], ["del", "theorem", "lintegral_rpow_add_le_add_snorm_mul_lintegral_rpow_add", ["ennreal"]], ["del", "theorem", "lintegral_rpow_add_lt_top_of_lintegral_rpow_lt_top", ["ennreal"]], ["del", "theorem", "lintegral_rpow_fun_mul_inv_snorm_eq_one", ["ennreal"]], ["del", "theorem", "lintegral_mul_le_Lp_mul_Lq", ["nnreal"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/mean_inequalities.lean", "changes": [["add", "theorem", "ae_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["add", "theorem", "fun_eq_fun_mul_inv_snorm_mul_snorm", ["ennreal"]], ["add", "def", "fun_mul_inv_snorm", ["ennreal"]], ["add", "theorem", "fun_mul_inv_snorm_rpow", ["ennreal"]], ["add", "theorem", "lintegral_Lp_add_le", ["ennreal"]], ["add", "theorem", "lintegral_Lp_mul_le_Lq_mul_Lr", ["ennreal"]], ["add", "theorem", "lintegral_mul_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq_of_ne_zero_of_eq_top", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq_of_ne_zero_of_ne_top", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_one_of_lintegral_rpow_eq_one", ["ennreal"]], ["add", "theorem", "lintegral_mul_rpow_le_lintegral_rpow_mul_lintegral_rpow", ["ennreal"]], ["add", "theorem", "lintegral_rpow_add_le_add_snorm_mul_lintegral_rpow_add", ["ennreal"]], ["add", "theorem", "lintegral_rpow_add_lt_top_of_lintegral_rpow_lt_top", ["ennreal"]], ["add", "theorem", "lintegral_rpow_fun_mul_inv_snorm_eq_one", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq", ["nnreal"]]]}]}, {"timestamp": 1624116673, "sha": "1846a1f3", "message": "feat(measure_theory/interval_integral): `abs_integral_le_integral_abs` (#7959)\nThe absolute value of the integral of an integrable function is less than or equal to the integral of the absolute value that function.", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "abs", ["interval_integrable"]], ["mod", "theorem", "norm", ["interval_integrable"]], ["add", "theorem", "abs_integral_le_integral_abs", ["interval_integral"]], ["add", "theorem", "integral_nonneg_of_forall", ["interval_integral"]], ["add", "theorem", "norm_integral_le_integral_norm", ["interval_integral"]]]}]}, {"timestamp": 1624090970, "sha": "2ca04524", "message": "feat(data/{fin,nat,zmod}): prove `zmod.coe_add_eq_ite` (#7975)\nThis PR adds a couple of lemmas relating addition modulo `n` (in `ℕ`, `fin n` or `zmod n`) and addition in `ℕ` or `ℤ`.\n[Based on this Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Homomorphism.20from.20the.20integers.20descends.20to.20.24.24.5Cmathbb.7BZ.7D.2Fn.24.24)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_add_eq_ite", ["fin"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_mod_eq_ite", ["nat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "coe_add_eq_ite", ["zmod"]]]}]}, {"timestamp": 1624071856, "sha": "28aee951", "message": "chore(scripts): update nolints.txt (#7993)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1624071855, "sha": "2a48c690", "message": "feat(category_theory/yoneda): develop API for representable functors (#7962)\nDualises and extends API for representable functors which was previously pretty minimal", "changes": [{"oldPath": "src/category_theory/sites/canonical.lean", "newPath": "src/category_theory/sites/canonical.lean", "changes": [["mod", "theorem", "is_sheaf_of_representable", ["category_theory", "sheaf"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["add", "theorem", "corepresentable_of_nat_iso", ["category_theory"]], ["del", "def", "iso_comp_punit", ["category_theory", "coyoneda"]], ["add", "def", "punit_iso", ["category_theory", "coyoneda"]], ["add", "theorem", "corepr_w_app_hom", ["category_theory", "functor"]], ["add", "theorem", "repr_w_app_hom", ["category_theory", "functor"]], ["add", "theorem", "repr_w_hom", ["category_theory", "functor"]], ["add", "theorem", "representable_of_nat_iso", ["category_theory"]], ["mod", "def", "yoneda_sections", ["category_theory"]]]}]}, {"timestamp": 1624059148, "sha": "42ab44c2", "message": "feat(group_theory): computable 1st isomorphism theorem (#7988)\nThis PR defines a computable version of the first isomorphism theorem for groups and monoids that takes a right inverse of the map, `quotient_ker_equiv_of_right_inverse`.", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["add", "def", "quotient_ker_equiv_of_right_inverse", ["con"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "def", "quotient_ker_equiv_of_right_inverse", ["quotient_group"]]]}]}, {"timestamp": 1624059147, "sha": "3ee6248c", "message": "feat(measure_theory): links between an integral and its improper version (#7164)\nThis PR introduces ways of studying and computing `∫ x, f x ∂μ` by studying the limit of the sequence `∫ x in φ n, f x ∂μ` for an appropriate sequence `φ` of subsets of the domain of `f`.", "changes": [{"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integrable_on.lean", "changes": [["add", "theorem", "indicator", ["ae_measurable"]], ["add", "theorem", "restrict", ["ae_measurable"]], ["add", "theorem", "ae_measurable_indicator_iff", []], ["del", "theorem", "ae_measurable_indicator_iff", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/integral_eq_improper.lean", "changes": [["add", "theorem", "ae_tendsto_indicator", ["measure_theory", "ae_cover"]], ["add", "theorem", "bInter_Ici_ae_cover", ["measure_theory", "ae_cover"]], ["add", "theorem", "bUnion_Iic_ae_cover", ["measure_theory", "ae_cover"]], ["add", "theorem", "comp_tendsto", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_integral_norm_tendsto", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_integral_tendsto_of_nonneg_ae", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_lintegral_nnnorm_tendsto'", ["measure_theory", "ae_cover"]], ["add", "theorem", "integrable_of_lintegral_nnnorm_tendsto", ["measure_theory", "ae_cover"]], ["add", "theorem", "integral_eq_of_tendsto", ["measure_theory", "ae_cover"]], ["add", "theorem", "integral_eq_of_tendsto_of_nonneg_ae", ["measure_theory", "ae_cover"]], ["add", "theorem", "integral_tendsto_of_countably_generated", ["measure_theory", "ae_cover"]], ["add", "theorem", "inter_restrict", ["measure_theory", "ae_cover"]], ["add", "theorem", "lintegral_eq_of_tendsto", ["measure_theory", "ae_cover"]], ["add", "theorem", "lintegral_tendsto_of_countably_generated", ["measure_theory", "ae_cover"]], ["add", "theorem", "lintegral_tendsto_of_nat", ["measure_theory", "ae_cover"]], ["add", "theorem", "restrict", ["measure_theory", "ae_cover"]], ["add", "theorem", "supr_lintegral_eq_of_countably_generated", ["measure_theory", "ae_cover"]], ["add", "structure", "ae_cover", ["measure_theory"]], ["add", "theorem", "ae_cover_Icc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ici", ["measure_theory"]], ["add", "theorem", "ae_cover_Ico", ["measure_theory"]], ["add", "theorem", "ae_cover_Iic", ["measure_theory"]], ["add", "theorem", "ae_cover_Iio", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioc", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioi", ["measure_theory"]], ["add", "theorem", "ae_cover_Ioo", ["measure_theory"]], ["add", "theorem", "ae_cover_restrict_of_ae_imp", ["measure_theory"]], ["add", "theorem", "integrable_of_interval_integral_norm_tendsto", ["measure_theory"]], ["add", "theorem", "integrable_on_Iic_of_interval_integral_norm_tendsto", ["measure_theory"]], ["add", "theorem", "integrable_on_Ioi_of_interval_integral_norm_tendsto", ["measure_theory"]], ["add", "theorem", "interval_integral_tendsto_integral", ["measure_theory"]], ["add", "theorem", "interval_integral_tendsto_integral_Iic", ["measure_theory"]], ["add", "theorem", "interval_integral_tendsto_integral_Ioi", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}]}, {"timestamp": 1624049327, "sha": "f2f10cce", "message": "docs(data/set/enumerate): add module and definition docstrings (#7967)", "changes": [{"oldPath": "src/data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": [["mod", "theorem", "enumerate_eq_none", ["set"]], ["mod", "theorem", "enumerate_eq_none_of_sel", ["set"]], ["mod", "theorem", "enumerate_inj", ["set"]], ["mod", "theorem", "enumerate_mem", ["set"]]]}]}, {"timestamp": 1624049326, "sha": "3a0653c7", "message": "feat(data/real/ennreal): add a `algebra ℝ≥0 ℝ≥0∞` instance (#7846)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "smul_def", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "smul_def", ["nnreal"]]]}]}, {"timestamp": 1624040329, "sha": "52dbff0f", "message": "chore(topology/basic): rename compact_Icc to is_compact_Icc (#7979)\nAlso rename `compact_interval` to `is_compact_interval`. And a bunch of random additions, all minor, as prerequisistes to #7978", "changes": [{"oldPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": []}, {"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "bounded_iff_forall_norm_le", []], ["add", "theorem", "exists_bound_of_continuous_on", ["is_compact"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["add", "theorem", "eq_iff_forall_dual_eq", ["normed_space"]], ["add", "theorem", "eq_zero_iff_forall_dual_eq_zero", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["add", "theorem", "norm'_eq_zero_iff", []]]}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["add", "theorem", "coe_to_real", ["ereal"]], ["add", "theorem", "lt_iff_exists_real_btwn", ["ereal"]]]}, {"oldPath": "src/data/real/liouville.lean", "newPath": "src/data/real/liouville.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integrable_on.lean", "newPath": "src/measure_theory/integrable_on.lean", "changes": [["add", "theorem", "integrable_on_Icc", ["continuous"]], ["add", "theorem", "integrable_on_interval", ["continuous"]], ["del", "theorem", "integrable_comp", ["continuous_linear_map"]], ["add", "theorem", "integrable_on_Icc", ["continuous_on"]], ["add", "theorem", "integrable_on_interval", ["continuous_on"]], ["add", "theorem", "continuous_on_mul", ["measure_theory", "integrable_on"]], ["add", "theorem", "mul_continuous_on", ["measure_theory", "integrable_on"]], ["add", "theorem", "integrable_on_singleton_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "integrable_comp", ["continuous_linear_map"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "ae_restrict_iff'", ["measure_theory"]], ["add", "theorem", "ae_restrict_mem", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "compact_Icc", []], ["del", "theorem", "compact_interval", []], ["del", "theorem", "compact_pi_Icc", []], ["add", "theorem", "is_compact_Icc", []], ["add", "theorem", "is_compact_interval", []], ["add", "theorem", "is_compact_pi_Icc", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1624030381, "sha": "29e7a8d5", "message": "feat(topology/algebra/ordered, topology/algebra/infinite_sum): bounded monotone sequences converge (variant versions) (#7983)\nA bounded monotone sequence converges to a value `a`, if and only if `a` is a least upper bound for its range.\nMathlib had several variants of this fact previously (phrased in terms of, eg, `csupr`), but not quite this version (phrased in terms of `has_lub`). This version has a couple of advantages:\n- it applies to more general typeclasses (eg, `linear_order`) where the existence of suprema is not in general known\n- it applies to algebraic typeclasses (`linear_ordered_add_comm_monoid`, etc) where, since completeness of orders is not a mix-in, it is not possible to simultaneously assume `(conditionally_)complete_linear_order`\nThe latter point makes these lemmas useful when dealing with `tsum`. We get: a nonnegative function `f` satisfies `has_sum f a`, if and only if `a` is a least upper bound for its partial sums.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_le_of_sum_le", []], ["add", "theorem", "has_sum_of_is_lub", []], ["add", "theorem", "has_sum_of_is_lub_of_nonneg", []], ["add", "theorem", "is_lub_has_sum'", []], ["add", "theorem", "is_lub_has_sum", []], ["add", "theorem", "le_has_sum_of_le_sum", []], ["mod", "theorem", "sum_le_has_sum", []], ["add", "theorem", "tsum_le_of_sum_le'", []], ["add", "theorem", "tsum_le_of_sum_le", []]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "is_glb_of_tendsto", []], ["add", "theorem", "is_lub_of_tendsto", []], ["add", "theorem", "ge_of_tendsto", ["monotone"]], ["add", "theorem", "le_of_tendsto", ["monotone"]], ["add", "theorem", "tendsto_at_bot_is_glb", []], ["add", "theorem", "tendsto_at_top_is_lub", []]]}]}, {"timestamp": 1624023611, "sha": "7c9a8113", "message": "feat(analysis/convex/basic): missing lemmas (#7946)\n- the union of a set/indexed family of convex sets is convex\n- `open_segment a b` is convex\n- a set is nonempty iff its convex hull is", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "convex_Inter", []], ["add", "theorem", "convex_hull_nonempty_iff", []], ["add", "theorem", "convex_open_segment", []], ["add", "theorem", "convex_Union", ["directed"]], ["add", "theorem", "convex_sUnion", ["directed_on"]]]}]}, {"timestamp": 1623981487, "sha": "e168bf7a", "message": "chore(scripts): update nolints.txt (#7981)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623949860, "sha": "49bf1fde", "message": "chore(order/iterate): fix up the namespace (#7977)", "changes": [{"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": [["del", "theorem", "id_le_iterate_of_id_le", ["function", "commute"]], ["del", "theorem", "iterate_le_id_of_le_id", ["function", "commute"]], ["del", "theorem", "iterate_le_iterate_of_id_le", ["function", "commute"]], ["del", "theorem", "iterate_le_iterate_of_le_id", ["function", "commute"]], ["add", "theorem", "id_le_iterate_of_id_le", ["function"]], ["add", "theorem", "iterate_le_id_of_le_id", ["function"]], ["add", "theorem", "iterate_le_iterate_of_id_le", ["function"]], ["add", "theorem", "iterate_le_iterate_of_le_id", ["function"]]]}]}, {"timestamp": 1623949859, "sha": "dc73d1bd", "message": "docs(data/*/sqrt): add one module docstring and expand the other (#7973)", "changes": [{"oldPath": "src/data/int/sqrt.lean", "newPath": "src/data/int/sqrt.lean", "changes": [["mod", "def", "sqrt", ["int"]]]}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}]}, {"timestamp": 1623949858, "sha": "3824a43e", "message": "docs(data/list/intervals): add module docstring (#7972)", "changes": [{"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}]}, {"timestamp": 1623949857, "sha": "93d7812a", "message": "docs(data/int/range): add module docstring (#7971)", "changes": [{"oldPath": "src/data/int/range.lean", "newPath": "src/data/int/range.lean", "changes": []}]}, {"timestamp": 1623949856, "sha": "da1a32c2", "message": "docs(data/int/cast): add module docstring (#7969)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": []}]}, {"timestamp": 1623949850, "sha": "de6d739d", "message": "docs(data/nat/dist): add module docstring (#7966)", "changes": [{"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": []}]}, {"timestamp": 1623949849, "sha": "ce23f373", "message": "feat(topology/locally_constant): Adds a few useful constructions (#7954)\nThis PR adds a few useful constructions around locallly constant functions:\n1. A locally constant function to `fin 2` associated to a clopen set.\n2. Flipping a locally constant function taking values in a function type.\n3. Unflipping a finite family of locally constant function.\n4. Descending locally constant functions along an injective map.", "changes": [{"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "desc", ["is_locally_constant"]], ["add", "theorem", "coe_desc", ["locally_constant"]], ["add", "def", "desc", ["locally_constant"]], ["add", "def", "flip", ["locally_constant"]], ["add", "theorem", "flip_unflip", ["locally_constant"]], ["add", "theorem", "locally_constant_eq_of_fiber_zero_eq", ["locally_constant"]], ["add", "def", "of_clopen", ["locally_constant"]], ["add", "theorem", "of_clopen_fiber_one", ["locally_constant"]], ["add", "theorem", "of_clopen_fiber_zero", ["locally_constant"]], ["add", "def", "unflip", ["locally_constant"]], ["add", "theorem", "unflip_flip", ["locally_constant"]]]}]}, {"timestamp": 1623949848, "sha": "e9f9f3f3", "message": "docs(data/nat/cast): add module docstring (#7947)", "changes": [{"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}]}, {"timestamp": 1623949847, "sha": "97843966", "message": "refactor(order/preorder_hom): golf and simp lemmas (#7429)\nThe main change here is to adjust `simps` to generate coercion lemmas rather than `.to_fun` for `preorder_hom`, which allows us to auto-generate some simp lemmas.", "changes": [{"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "def", "map", ["omega_complete_partial_order", "chain"]]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": [["del", "theorem", "to_preorder_hom_coe", ["order_embedding"]], ["mod", "theorem", "coe_fun_mk", ["preorder_hom"]], ["del", "theorem", "coe_id", ["preorder_hom"]], ["del", "theorem", "coe_inj", ["preorder_hom"]], ["mod", "theorem", "ext", ["preorder_hom"]], ["add", "theorem", "to_fun_eq_coe", ["preorder_hom"]], ["del", "theorem", "to_preorder_hom_coe_fn", ["rel_hom"]]]}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1623929467, "sha": "cbb8f019", "message": "feat(algebra/group/basic): prove `a / 1 = a` and remove `sub_zero` (#7956)\nAdd a proof that, in a group, `a / 1 = a`. As a consequence, `sub_zero` is the `to_additive version of this lemma and I removed it.\nThe name of the lemma is `div_one'`, since the unprimed version is taken by `group_with_zero`.\nZulip:\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60div_one'.60", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_one'", []], ["del", "theorem", "sub_zero", []]]}]}, {"timestamp": 1623929466, "sha": "6578f1ce", "message": "feat(data/setoid/basic): add a computable version of quotient_ker_equiv_of_surjective (#7930)\nPerhaps more usefully, this also allows definitional control of the inverse mapping", "changes": [{"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": [["add", "def", "quotient_ker_equiv_of_right_inverse", ["setoid"]]]}]}, {"timestamp": 1623918705, "sha": "1e43208e", "message": "refactor(ring_theory): use `x ∈ non_zero_divisors` over `x : non_zero_divisors` (#7961)\n`map_ne_zero_of_mem_non_zero_divisors` and `map_mem_non_zero_divisors` used to take `x : non_zero_divisors A` as an (implicit) argument. This is awkward if you only have `hx : x ∈ non_zero_divisors A`, requiring you to write out `@map_ne_zero_of_mem_non_zero_divisors _ _ _ _ _ _ hf ⟨x, hx⟩`. By making `x ∈ non_zero_divisors A` the explicit argument, we can avoid this annoyance.\nSee e.g. `ring_theory/polynomial/scale_roots.lean` for the improvement.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}]}, {"timestamp": 1623898091, "sha": "1a6c871a", "message": "chore(scripts): update nolints.txt (#7965)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623889405, "sha": "dc5d0c10", "message": "feat(data/matrix): `has_repr` instances for `fin` vectors and matrices (#7953)\nThis PR provides `has_repr` instances for the types `fin n → α` and `matrix (fin m) (fin n) α`, displaying in the `![...]` matrix notation. This is especially useful if you want to `#eval` a calculation involving matrices.\n[Based on this Zulip post.](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Matrix.20operations/near/242766110)", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}]}, {"timestamp": 1623889404, "sha": "641a9d30", "message": "feat(model_theory/basic): Substructures (#7762)\nDefines substructures of first-order structures", "changes": [{"oldPath": "src/model_theory/basic.lean", "newPath": "src/model_theory/basic.lean", "changes": [["add", "theorem", "Inf", ["first_order", "language", "closed_under"]], ["add", "theorem", "inf", ["first_order", "language", "closed_under"]], ["add", "theorem", "inter", ["first_order", "language", "closed_under"]], ["add", "def", "closed_under", ["first_order", "language"]], ["add", "theorem", "map_const", ["first_order", "language", "embedding"]], ["add", "theorem", "map_const", ["first_order", "language", "equiv"]], ["add", "theorem", "fun_map_eq_coe_const", ["first_order", "language"]], ["add", "def", "eq_locus", ["first_order", "language", "hom"]], ["add", "theorem", "eq_of_eq_on_dense", ["first_order", "language", "hom"]], ["add", "theorem", "eq_of_eq_on_top", ["first_order", "language", "hom"]], ["add", "theorem", "eq_on_closure", ["first_order", "language", "hom"]], ["add", "theorem", "map_const", ["first_order", "language", "hom"]], ["add", "theorem", "closed", ["first_order", "language", "substructure"]], ["add", "def", "closure", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_Union", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_empty", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_eq", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_eq_of_le", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_induction", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_le", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_mono", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_union", ["first_order", "language", "substructure"]], ["add", "theorem", "closure_univ", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_Inf", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_copy", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_inf", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_infi", ["first_order", "language", "substructure"]], ["add", "theorem", "coe_top", ["first_order", "language", "substructure"]], ["add", "theorem", "const_mem", ["first_order", "language", "substructure"]], ["add", "theorem", "copy_eq", ["first_order", "language", "substructure"]], ["add", "theorem", "dense_induction", ["first_order", "language", "substructure"]], ["add", "theorem", "ext", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_Inf", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_carrier", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_closure", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_inf", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_infi", ["first_order", "language", "substructure"]], ["add", "theorem", "mem_top", ["first_order", "language", "substructure"]], ["add", "def", "coe", ["first_order", "language", "substructure", "simps"]], ["add", "theorem", "subset_closure", ["first_order", "language", "substructure"]], ["add", "structure", "substructure", ["first_order", "language"]]]}]}, {"timestamp": 1623869066, "sha": "456a6d51", "message": "docs(data/option/basic): add module docstring (#7958)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}]}, {"timestamp": 1623869065, "sha": "08dfaab8", "message": "docs(data/set/disjointed): add module docstring and some whitespaces (#7957)", "changes": [{"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["mod", "def", "pairwise", []], ["mod", "theorem", "Inter_lt_succ", ["set"]], ["mod", "theorem", "Union_disjointed", ["set"]], ["mod", "theorem", "Union_disjointed_of_mono", ["set"]], ["mod", "theorem", "Union_lt_succ", ["set"]], ["mod", "theorem", "disjoint_disjointed'", ["set"]], ["mod", "theorem", "disjoint_disjointed", ["set"]], ["mod", "def", "disjointed", ["set"]], ["mod", "theorem", "disjointed_induct", ["set"]], ["mod", "theorem", "disjointed_of_mono", ["set"]], ["mod", "theorem", "disjointed_subset", ["set"]], ["mod", "theorem", "subset_Union_disjointed", ["set"]]]}]}, {"timestamp": 1623869064, "sha": "49aa1064", "message": "docs(data/*/nat_antidiagonal): add one module docstring and harmonise others (#7919)", "changes": [{"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/list/nat_antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/multiset/nat_antidiagonal.lean", "newPath": "src/data/multiset/nat_antidiagonal.lean", "changes": []}]}, {"timestamp": 1623869063, "sha": "366a4496", "message": "doc(topology/algebra/ring): add module docs + tidy (#7893)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "quotient_ring_saturate", ["ideal", "quotient"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["mod", "theorem", "coe_closure", ["ideal"]], ["del", "theorem", "quotient_ring_saturate", []]]}]}, {"timestamp": 1623857494, "sha": "a564bf1e", "message": "feat(data/list/cycle): cycles as quotients of lists (#7504)\nCycles are common structures, and we define them as a quotient of lists. This is on the route to defining concrete cyclic permutations, and could also be used for encoding properties of cycles in graphs.", "changes": [{"oldPath": null, "newPath": "src/data/list/cycle.lean", "changes": [["add", "theorem", "coe_eq_coe", ["cycle"]], ["add", "def", "length", ["cycle"]], ["add", "theorem", "length_coe", ["cycle"]], ["add", "theorem", "length_nontrivial", ["cycle"]], ["add", "theorem", "length_reverse", ["cycle"]], ["add", "theorem", "length_subsingleton_iff", ["cycle"]], ["add", "def", "mem", ["cycle"]], ["add", "theorem", "mem_coe_iff", ["cycle"]], ["add", "theorem", "mem_reverse_iff", ["cycle"]], ["add", "theorem", "mk'_eq_coe", ["cycle"]], ["add", "theorem", "mk_eq_coe", ["cycle"]], ["add", "def", "next", ["cycle"]], ["add", "theorem", "next_mem", ["cycle"]], ["add", "theorem", "next_reverse_eq_prev", ["cycle"]], ["add", "def", "nodup", ["cycle"]], ["add", "theorem", "nodup_coe_iff", ["cycle"]], ["add", "theorem", "nodup_reverse_iff", ["cycle"]], ["add", "def", "nontrivial", ["cycle"]], ["add", "theorem", "nontrivial_reverse_iff", ["cycle"]], ["add", "def", "prev", ["cycle"]], ["add", "theorem", "prev_mem", ["cycle"]], ["add", "theorem", "prev_reverse_eq_next", ["cycle"]], ["add", "def", "reverse", ["cycle"]], ["add", "theorem", "reverse_coe", ["cycle"]], ["add", "theorem", "reverse_reverse", ["cycle"]], ["add", "theorem", "congr", ["cycle", "subsingleton"]], ["add", "theorem", "nodup", ["cycle", "subsingleton"]], ["add", "def", "subsingleton", ["cycle"]], ["add", "theorem", "subsingleton_reverse_iff", ["cycle"]], ["add", "def", "to_finset", ["cycle"]], ["add", "def", "to_multiset", ["cycle"]], ["add", "def", "cycle", []], ["add", "theorem", "is_rotated_next_eq", ["list"]], ["add", "theorem", "is_rotated_prev_eq", ["list"]], ["add", "theorem", "mem_of_next_or_ne", ["list"]], ["add", "def", "next", ["list"]], ["add", "theorem", "next_cons_concat", ["list"]], ["add", "theorem", "next_cons_cons_eq'", ["list"]], ["add", "theorem", "next_cons_cons_eq", ["list"]], ["add", "theorem", "next_last_cons", ["list"]], ["add", "theorem", "next_mem", ["list"]], ["add", "theorem", "next_ne_head_ne_last", ["list"]], ["add", "theorem", "next_nth_le", ["list"]], ["add", "def", "next_or", ["list"]], ["add", "theorem", "next_or_concat", ["list"]], ["add", "theorem", "next_or_cons_of_ne", ["list"]], ["add", "theorem", "next_or_eq_next_or_of_mem_of_ne", ["list"]], ["add", "theorem", "next_or_mem", ["list"]], ["add", "theorem", "next_or_nil", ["list"]], ["add", "theorem", "next_or_self_cons_cons", ["list"]], ["add", "theorem", "next_or_singleton", ["list"]], ["add", "theorem", "next_prev", ["list"]], ["add", "theorem", "next_reverse_eq_prev", ["list"]], ["add", "theorem", "next_singleton", ["list"]], ["add", "theorem", "pmap_next_eq_rotate_one", ["list"]], ["add", "theorem", "pmap_prev_eq_rotate_length_sub_one", ["list"]], ["add", "def", "prev", ["list"]], ["add", "theorem", "prev_cons_cons_eq'", ["list"]], ["add", "theorem", "prev_cons_cons_eq", ["list"]], ["add", "theorem", "prev_cons_cons_of_ne'", ["list"]], ["add", "theorem", "prev_cons_cons_of_ne", ["list"]], ["add", "theorem", "prev_last_cons'", ["list"]], ["add", "theorem", "prev_last_cons", ["list"]], ["add", "theorem", "prev_mem", ["list"]], ["add", "theorem", "prev_ne_cons_cons", ["list"]], ["add", "theorem", "prev_next", ["list"]], ["add", "theorem", "prev_nth_le", ["list"]], ["add", "theorem", "prev_reverse_eq_next", ["list"]], ["add", "theorem", "prev_singleton", ["list"]]]}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["add", "theorem", "nth_le_rotate'", ["list"]], ["add", "theorem", "rotate_reverse", ["list"]]]}]}, {"timestamp": 1623846345, "sha": "0490b432", "message": "refactor(geometry/manifold/instances/circle): split out (topological) group facts (#7951)\nMove the group and topological group facts about the unit circle in `ℂ` from `geometry.manifold.instances.circle` to a new file `analysis.complex.circle`. Delete `geometry.manifold.instances.circle`, moving the remaining material to a section in `geometry.manifold.instances.sphere`.", "changes": [{"oldPath": "src/geometry/manifold/instances/circle.lean", "newPath": "src/analysis/complex/circle.lean", "changes": [["del", "theorem", "times_cont_mdiff_exp_map_circle", []]]}, {"oldPath": "src/analysis/fourier.lean", "newPath": "src/analysis/fourier.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": [["add", "theorem", "times_cont_mdiff_exp_map_circle", []]]}]}, {"timestamp": 1623837507, "sha": "95a116a1", "message": "chore(measure_theory/lp_space): simplify tendsto_Lp_iff_tendsto_\\McLp by using tendsto_iff_dist_tendsto_zero (#7942)", "changes": [{"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "cauchy_seq_Lp_iff_cauchy_seq_ℒp", ["measure_theory", "Lp"]], ["add", "theorem", "tendsto_Lp_iff_tendsto_ℒp'", ["measure_theory", "Lp"]], ["add", "theorem", "tendsto_Lp_iff_tendsto_ℒp", ["measure_theory", "Lp"]], ["mod", "theorem", "tendsto_Lp_of_tendsto_ℒp", ["measure_theory", "Lp"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_to_real_iff", ["ennreal"]]]}]}, {"timestamp": 1623823328, "sha": "690ab173", "message": "refactor(algebra/algebra/basic): replace `algebra.comap` with `restrict_scalars` (#7949)\nThe constructions `algebra.comap` and `restrict_scalars` are essentially the same thing -- a type synonym to allow one to switch to a smaller scalar field. Previously `restrict_scalars` was for modules and `algebra.comap` for algebras; I am unifying them so that `restrict_scalars` works for both.\nDeclaration changes:\n- `algebra.comap`, `algebra.comap.inhabited`, `is_scalar_tower.comap`\nUse the pre-existing (for modules) `restrict_scalars`, `restrict_scalars.inhabited`, `restrict_scalars.is_scalar_tower`\n- `algebra.comap.X` for `X` in `semiring`, `ring`, `comm_semiring`, `comm_ring`, `algebra`\nReplaced with `restrict_scalars.X`\n- `algebra.comap.algebra'`\nReplaced with `restrict_scalars.algebra_orig` (to be consistent with `restrict_scalars.module_orig`)\n- `algebra.comap.to_comap` and `algebra.comap.of_comap`\nCombined into an `alg_equiv` and renamed `restrict_scalars.alg_equiv` (to be consistent with `restrict_scalars.linear_equiv`)\n- `subalgebra.comap`\nReplaced with a generalized version, `subalgebra.restrict_scalars`, which (to be consistent with `submodule.restrict_scalars`) applies to an `is_scalar_tower`, not just to the type synonym\nDeleted altogether:\n- `algebra.to_comap`, `algebra.to_comap_apply`\nThis construction is now \n`(algebra.of_id S (restrict_scalars R S A)).restrict_scalars R`\nIt was only used once in mathlib, where I have replaced it by its definition\n- `alg_hom.comap`, `alg_equiv.comap`\nThese are not currently used in mathlib but if needed one can instead use `alg_hom.restrict_scalars` and `alg_equiv.restrict_scalars`\n- `is_scalar_tower.algebra_comap_eq`\nThe proof is now `rfl` and it was never used in mathlib.\nIt would then be possible, in a follow-up PR, to rename `subalgebra.comap'` to `subalgebra.comap`, although I have no immediate plans to do this.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "def", "comap", ["alg_equiv"]], ["del", "def", "comap", ["alg_hom"]], ["del", "def", "of_comap", ["algebra", "comap"]], ["del", "def", "to_comap", ["algebra", "comap"]], ["del", "def", "comap", ["algebra"]], ["del", "def", "to_comap", ["algebra"]], ["del", "theorem", "to_comap_apply", ["algebra"]], ["add", "def", "alg_equiv", ["restrict_scalars"]], ["mod", "def", "linear_equiv", ["restrict_scalars"]], ["mod", "theorem", "linear_equiv_map_smul", ["restrict_scalars"]], ["mod", "def", "restrict_scalars", []], ["mod", "theorem", "restrict_scalars_smul_def", []]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["del", "def", "comap", ["subalgebra"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["del", "theorem", "algebra_comap_eq", ["is_scalar_tower"]], ["add", "def", "restrict_scalars", ["subalgebra"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1623819122, "sha": "b8658928", "message": "feat(algebraic_geometry/Spec): Make Spec a functor. (#7790)", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["mod", "def", "Spec", ["algebraic_geometry", "Scheme"]], ["add", "def", "Spec_map", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Spec_map_comp", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Spec_map_id", ["algebraic_geometry", "Scheme"]], ["add", "def", "Spec_obj", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Spec_obj_to_LocallyRingedSpace", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["del", "def", "LocallyRingedSpace", ["algebraic_geometry", "Spec"]], ["add", "def", "LocallyRingedSpace_map", ["algebraic_geometry", "Spec"]], ["add", "theorem", "LocallyRingedSpace_map_comp", ["algebraic_geometry", "Spec"]], ["add", "theorem", "LocallyRingedSpace_map_id", ["algebraic_geometry", "Spec"]], ["add", "def", "LocallyRingedSpace_obj", ["algebraic_geometry", "Spec"]], ["del", "def", "PresheafedSpace", ["algebraic_geometry", "Spec"]], ["del", "def", "SheafedSpace", ["algebraic_geometry", "Spec"]], ["add", "def", "SheafedSpace_map", ["algebraic_geometry", "Spec"]], ["add", "theorem", "SheafedSpace_map_comp", ["algebraic_geometry", "Spec"]], ["add", "theorem", "SheafedSpace_map_id", ["algebraic_geometry", "Spec"]], ["add", "def", "SheafedSpace_obj", ["algebraic_geometry", "Spec"]], ["add", "def", "Top_map", ["algebraic_geometry", "Spec"]], ["add", "theorem", "Top_map_comp", ["algebraic_geometry", "Spec"]], ["add", "theorem", "Top_map_id", ["algebraic_geometry", "Spec"]], ["add", "def", "Top_obj", ["algebraic_geometry", "Spec"]], ["add", "def", "to_LocallyRingedSpace", ["algebraic_geometry", "Spec"]], ["add", "def", "to_PresheafedSpace", ["algebraic_geometry", "Spec"]], ["add", "theorem", "to_PresheafedSpace_map", ["algebraic_geometry", "Spec"]], ["add", "theorem", "to_PresheafedSpace_map_op", ["algebraic_geometry", "Spec"]], ["add", "theorem", "to_PresheafedSpace_obj", ["algebraic_geometry", "Spec"]], ["add", "theorem", "to_PresheafedSpace_obj_op", ["algebraic_geometry", "Spec"]], ["add", "def", "to_SheafedSpace", ["algebraic_geometry", "Spec"]], ["add", "def", "to_Top", ["algebraic_geometry", "Spec"]], ["add", "theorem", "local_ring_hom_comp_stalk_iso", ["algebraic_geometry"]], ["add", "theorem", "stalk_map_to_stalk", ["algebraic_geometry"]]]}]}, {"timestamp": 1623809501, "sha": "ba3a4b7a", "message": "chore(scripts): update nolints.txt (#7955)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623800155, "sha": "30314c22", "message": "fix(measure_theory/interval_integral): generalize some lemmas (#7944)\nThe proofs of some lemmas about the integral of a function `f : ℝ → ℝ` also hold for `f : α → ℝ` (with `α` under the usual conditions).", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["mod", "theorem", "integral_sin_pow_antimono", []]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "integral_eq_zero_iff_of_le_of_nonneg_ae", ["interval_integral"]], ["mod", "theorem", "integral_eq_zero_iff_of_nonneg_ae", ["interval_integral"]], ["mod", "theorem", "integral_mono_ae_restrict", ["interval_integral"]], ["mod", "theorem", "integral_mono_on", ["interval_integral"]], ["mod", "theorem", "integral_nonneg", ["interval_integral"]], ["mod", "theorem", "integral_nonneg_of_ae", ["interval_integral"]], ["mod", "theorem", "integral_nonneg_of_ae_restrict", ["interval_integral"]], ["mod", "theorem", "integral_pos_iff_support_of_nonneg_ae'", ["interval_integral"]], ["mod", "theorem", "integral_pos_iff_support_of_nonneg_ae", ["interval_integral"]]]}]}, {"timestamp": 1623800154, "sha": "45619c73", "message": "feat(order/iterate): id_le lemmas (#7943)", "changes": [{"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": [["add", "theorem", "id_le_iterate_of_id_le", ["function", "commute"]], ["add", "theorem", "iterate_le_id_of_le_id", ["function", "commute"]], ["add", "theorem", "iterate_le_iterate_of_id_le", ["function", "commute"]], ["add", "theorem", "iterate_le_iterate_of_le_id", ["function", "commute"]]]}]}, {"timestamp": 1623800152, "sha": "e5c97e10", "message": "feat(analysis/convex/basic): a linear map is convex and concave (#7934)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "concave_on", ["linear_map"]], ["add", "theorem", "convex_on", ["linear_map"]]]}]}, {"timestamp": 1623787001, "sha": "f1f4c23f", "message": "feat(analysis/convex/basic): convex_on lemmas (#7933)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "le_on_segment'", ["concave_on"]], ["add", "theorem", "le_right_of_left_le'", ["concave_on"]], ["add", "theorem", "le_right_of_left_le", ["concave_on"]], ["add", "theorem", "left_le_of_le_right'", ["concave_on"]], ["add", "theorem", "left_le_of_le_right", ["concave_on"]], ["add", "theorem", "le_left_of_right_le'", ["convex_on"]], ["add", "theorem", "le_left_of_right_le", ["convex_on"]], ["mod", "theorem", "le_on_segment'", ["convex_on"]], ["mod", "theorem", "le_on_segment", ["convex_on"]], ["add", "theorem", "le_right_of_left_le'", ["convex_on"]], ["add", "theorem", "le_right_of_left_le", ["convex_on"]]]}]}, {"timestamp": 1623787000, "sha": "5d03dcd4", "message": "feat(analysis/normed_space/dual): add eq_zero_of_forall_dual_eq_zero (#7929)\nThe variable `𝕜` is made explicit in `norm_le_dual_bound` because lean can otherwise not guess it in the proof of `eq_zero_of_forall_dual_eq_zero`.", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["add", "theorem", "eq_zero_of_forall_dual_eq_zero", ["normed_space"]]]}]}, {"timestamp": 1623786999, "sha": "e5ff5fb4", "message": "feat(data/finsupp/basic): equiv_congr_left (#7755)\nAs [requested on Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Group.20cohomology/near/240737546).", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "equiv_congr_left", ["finsupp"]], ["add", "theorem", "equiv_congr_left_apply", ["finsupp"]], ["add", "theorem", "equiv_congr_left_symm", ["finsupp"]], ["add", "def", "equiv_map_domain", ["finsupp"]], ["add", "theorem", "equiv_map_domain_apply", ["finsupp"]], ["add", "theorem", "equiv_map_domain_eq_map_domain", ["finsupp"]], ["add", "theorem", "equiv_map_domain_refl'", ["finsupp"]], ["add", "theorem", "equiv_map_domain_refl", ["finsupp"]], ["add", "theorem", "equiv_map_domain_single", ["finsupp"]], ["add", "theorem", "equiv_map_domain_symm_apply", ["finsupp"]], ["add", "theorem", "equiv_map_domain_trans'", ["finsupp"]], ["add", "theorem", "equiv_map_domain_trans", ["finsupp"]], ["add", "theorem", "equiv_map_domain_zero", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}]}, {"timestamp": 1623768887, "sha": "2f1f34a9", "message": "feat(measure_theory/lp_space): add `mem_Lp.mono_measure` (#7927)\nalso add monotonicity lemmas wrt the measure for `snorm'`, `snorm_ess_sup` and `snorm`.", "changes": [{"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "mono_measure", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "restrict", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm'_mono_measure", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_mono_measure", ["measure_theory"]], ["add", "theorem", "snorm_mono_measure", ["measure_theory"]]]}]}, {"timestamp": 1623768886, "sha": "5f8cc8eb", "message": "docs(undergrad): mark convex, convex hull, and extreme points as done (#7924)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1623768884, "sha": "e4ceee66", "message": "feat(group_theory/order_of_element): Raising to a coprime power is a bijection (#7923)\nIf `gcd(|G|,k)=1` then the `k`th power map is a bijection", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "def", "pow_coprime", []], ["add", "theorem", "pow_coprime_inv", []], ["add", "theorem", "pow_coprime_one", []]]}]}, {"timestamp": 1623768881, "sha": "f4991b97", "message": "feat(measure_theory/bochner_integration): properties of simple functions (mem_Lp, integrable, fin_meas_supp) (#7918)", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "exists_forall_norm_le", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_iff", ["measure_theory", "simple_func"]], ["mod", "theorem", "integrable_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_of_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_preimage_lt_top_of_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "measure_preimage_lt_top_of_mem_ℒp", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_iff_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_of_finite_measure", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_of_finite_measure_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_top", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_ℒp_zero", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "mem_ℒp_top_of_bound", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_le_of_ae_bound", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_lt_top_of_ae_bound", ["measure_theory"]]]}]}, {"timestamp": 1623768880, "sha": "b19c491a", "message": "chore(order/lattice): rename le_sup_left_of_le (#7856)\nrename `le_sup_left_of_le` to `le_sup_of_le_left`, and variants", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["del", "theorem", "le_max_left_of_le", []], ["add", "theorem", "le_max_of_le_left", []], ["add", "theorem", "le_max_of_le_right", []], ["del", "theorem", "le_max_right_of_le", []], ["del", "theorem", "min_le_left_of_le", []], ["add", "theorem", "min_le_of_left_le", []], ["add", "theorem", "min_le_of_right_le", []], ["del", "theorem", "min_le_right_of_le", []]]}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/number_theory/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["del", "theorem", "inf_le_left_of_le", []], ["add", "theorem", "inf_le_of_left_le", []], ["add", "theorem", "inf_le_of_right_le", []], ["del", "theorem", "inf_le_right_of_le", []], ["del", "theorem", "le_sup_left_of_le", []], ["add", "theorem", "le_sup_of_le_left", []], ["add", "theorem", "le_sup_of_le_right", []], ["del", "theorem", "le_sup_right_of_le", []]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1623768879, "sha": "8e281044", "message": "feat(algebra/algebra/basic): define `restrict_scalars.linear_equiv` (#7807)\nAlso updating some doc-strings.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "linear_equiv", ["restrict_scalars"]], ["add", "theorem", "linear_equiv_map_smul", ["restrict_scalars"]]]}]}, {"timestamp": 1623768878, "sha": "a16650c4", "message": "feat(geometry/manifold/algebra/smooth_functions): add `coe_fn_(linear_map|ring_hom|alg_hom)` (#7749)\nChanged names to be consistent with the topology library and proven that some coercions are morphisms.", "changes": [{"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": [["mod", "def", "C", ["smooth_map"]], ["mod", "theorem", "coe_div", ["smooth_map"]], ["add", "def", "coe_fn_alg_hom", ["smooth_map"]], ["add", "def", "coe_fn_linear_map", ["smooth_map"]], ["add", "def", "coe_fn_monoid_hom", ["smooth_map"]], ["add", "def", "coe_fn_ring_hom", ["smooth_map"]], ["mod", "theorem", "coe_inv", ["smooth_map"]], ["mod", "theorem", "coe_smul", ["smooth_map"]], ["mod", "theorem", "smul_comp'", ["smooth_map"]], ["mod", "theorem", "smul_comp", ["smooth_map"]]]}]}, {"timestamp": 1623737033, "sha": "bf83c301", "message": "chore(algebra/{ordered_monoid_lemmas, ordered_monoid}): move two sections close together (#7921)\nThis PR aims at shortening the diff between `master` and PR #7645 of the order refactor.\nI moved the `mono` section of `algebra/ordered_monoid_lemmas` to the end of the file and appended the `strict_mono` section of `algebra/ordered_monoid` after that.\nNote: the hypotheses are not optimal, but, with the current `instances` in this version, I did not know how to improve this. It will get better by the time PR #7645 is merged. In fact, the next PR in the sequence, #7876, already removes the unnecessary assumptions.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["del", "theorem", "mul_strict_mono'", ["monotone"]], ["del", "theorem", "const_mul'", ["strict_mono"]], ["del", "theorem", "mul_const'", ["strict_mono"]], ["del", "theorem", "mul_monotone'", ["strict_mono"]]]}, {"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": [["add", "theorem", "mul_strict_mono'", ["monotone"]], ["add", "theorem", "const_mul'", ["strict_mono"]], ["add", "theorem", "mul_const'", ["strict_mono"]], ["add", "theorem", "mul_monotone'", ["strict_mono"]]]}]}, {"timestamp": 1623737032, "sha": "d74a8989", "message": "fix(meta/expr): fix mreplace (#7912)\nPreviously the function would not recurse into macros (like `have`).\nAlso add warning to docstring.", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1623727329, "sha": "d960b2d8", "message": "chore(scripts): update nolints.txt (#7939)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623727328, "sha": "81f29f90", "message": "chore(topology/metric_space): cleanup Gromov-Hausdorff files (#7936)\nRename greek type variables to meaningful uppercase letters. Lint the files. Add a header where needed. Add spaces after forall or exist to conform to current style guide. Absolutely no new mathematical content.", "changes": [{"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": [["mod", "def", "glue_dist", ["metric"]], ["mod", "theorem", "glue_dist_glued_points", ["metric"]], ["mod", "def", "glue_metric_approx", ["metric"]], ["mod", "def", "glue_premetric", ["metric"]], ["mod", "def", "inductive_limit", ["metric"]], ["mod", "def", "inductive_limit_dist", ["metric"]], ["mod", "theorem", "inductive_limit_dist_eq_dist", ["metric"]], ["mod", "def", "inductive_premetric", ["metric"]], ["mod", "theorem", "isometry_on_inl", ["metric"]], ["mod", "theorem", "isometry_on_inr", ["metric"]], ["mod", "def", "metric_space_sum", ["metric"]], ["mod", "def", "dist", ["metric", "sum"]], ["mod", "theorem", "dist_eq", ["metric", "sum"]], ["mod", "theorem", "dist_eq_glue_dist", ["metric", "sum"]], ["mod", "theorem", "one_dist_le'", ["metric", "sum"]], ["mod", "theorem", "one_dist_le", ["metric", "sum"]], ["mod", "def", "to_glue_l", ["metric"]], ["mod", "def", "to_glue_r", ["metric"]], ["mod", "def", "to_inductive_limit", ["metric"]], ["mod", "theorem", "to_inductive_limit_commute", ["metric"]], ["mod", "theorem", "to_inductive_limit_isometry", ["metric"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": [["mod", "def", "GH_dist", ["Gromov_Hausdorff"]], ["mod", "theorem", "GH_dist_eq_Hausdorff_dist", ["Gromov_Hausdorff"]], ["mod", "theorem", "GH_dist_le_Hausdorff_dist", ["Gromov_Hausdorff"]], ["mod", "theorem", "GH_dist_le_nonempty_compacts_dist", ["Gromov_Hausdorff"]], ["mod", "theorem", "GH_dist_le_of_approx_subsets", ["Gromov_Hausdorff"]], ["mod", "theorem", "Hausdorff_dist_optimal", ["Gromov_Hausdorff"]], ["mod", "theorem", "eq_to_GH_space_iff", ["Gromov_Hausdorff"]], ["mod", "theorem", "to_GH_space_eq_to_GH_space_iff_isometric", ["Gromov_Hausdorff"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": [["mod", "def", "HD", ["Gromov_Hausdorff"]], ["mod", "theorem", "HD_below_aux1", ["Gromov_Hausdorff"]], ["mod", "theorem", "HD_below_aux2", ["Gromov_Hausdorff"]], ["mod", "theorem", "Hausdorff_dist_optimal_le_HD", ["Gromov_Hausdorff"]], ["mod", "def", "candidates", ["Gromov_Hausdorff"]], ["mod", "def", "candidates_b_dist", ["Gromov_Hausdorff"]], ["mod", "theorem", "candidates_b_dist_mem_candidates_b", ["Gromov_Hausdorff"]], ["mod", "def", "candidates_b_of_candidates", ["Gromov_Hausdorff"]], ["mod", "theorem", "candidates_b_of_candidates_mem", ["Gromov_Hausdorff"]], ["mod", "theorem", "isometry_optimal_GH_injl", ["Gromov_Hausdorff"]], ["mod", "theorem", "isometry_optimal_GH_injr", ["Gromov_Hausdorff"]], ["mod", "def", "optimal_GH_injl", ["Gromov_Hausdorff"]], ["mod", "def", "optimal_GH_injr", ["Gromov_Hausdorff"]], ["mod", "def", "premetric_optimal_GH_dist", ["Gromov_Hausdorff"]]]}]}, {"timestamp": 1623727327, "sha": "a83f2c26", "message": "feat(group_theory/order_of_element): Power of subset is subgroup (#7915)\nIf `S` is a nonempty subset of `G`, then `S ^ |G|` is a subgroup of `G`.", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "def", "pow_card_subgroup", []], ["add", "def", "subgroup_of_idempotent", []], ["add", "def", "submonoid_of_idempotent", []]]}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}]}, {"timestamp": 1623727326, "sha": "ba25bb8a", "message": "feat(measure_theory): define `measure.trim`, restriction of a measure to a sub-sigma algebra (#7906)\nIt is common to see a measure `μ` on a measurable space structure `m0` as being also a measure on any `m ≤ m0`. Since measures in mathlib have to be trimmed to the measurable space, `μ` itself is not a measure on `m`. For `hm : m ≤ m0`, we define the measure `μ.trim hm` on `m`.\nWe add lemmas relating a measure and its trimmed version, mostly about integrals of `m`-measurable functions.", "changes": [{"oldPath": "src/measure_theory/arithmetic.lean", "newPath": "src/measure_theory/arithmetic.lean", "changes": [["add", "theorem", "measurable_set_eq_fun", []]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "ae_eq_trim_iff", ["measure_theory"]], ["add", "theorem", "ae_eq_trim_of_measurable", ["measure_theory"]], ["add", "theorem", "integral_simple_func_larger_space", ["measure_theory"]], ["add", "theorem", "integral_trim", ["measure_theory"]], ["add", "theorem", "integral_trim_ae", ["measure_theory"]], ["add", "theorem", "integral_trim_simple_func", ["measure_theory"]], ["add", "theorem", "coe_to_larger_space_eq", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_eq_sum", ["measure_theory", "simple_func"]], ["add", "def", "to_larger_space", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_trim", ["measure_theory"]], ["add", "theorem", "lintegral_trim_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "trim", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_of_integrable_trim", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "ess_sup_trim", ["measure_theory"]], ["add", "theorem", "limsup_trim", ["measure_theory"]], ["add", "theorem", "snorm'_trim", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_trim", ["measure_theory"]], ["add", "theorem", "snorm_trim", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_measurable_of_ae_measurable_trim", []], ["add", "theorem", "ae_eq_of_ae_eq_trim", ["measure_theory"]], ["add", "theorem", "le_trim", ["measure_theory"]], ["add", "def", "trim", ["measure_theory", "measure"]], ["add", "theorem", "measure_eq_zero_of_trim_eq_zero", ["measure_theory"]], ["add", "theorem", "measure_trim_to_measurable_eq_zero", ["measure_theory"]], ["add", "theorem", "to_measure_zero", ["measure_theory", "outer_measure"]], ["add", "theorem", "restrict_trim", ["measure_theory"]], ["add", "theorem", "to_outer_measure_trim_eq_trim_to_outer_measure", ["measure_theory"]], ["add", "theorem", "trim_eq_self", ["measure_theory"]], ["add", "theorem", "trim_measurable_set_eq", ["measure_theory"]], ["add", "theorem", "zero_trim", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "set_integral_trim", ["measure_theory"]]]}]}, {"timestamp": 1623707417, "sha": "8377a1fc", "message": "feat(measure_theory/lp_space): add snorm_le_snorm_mul_rpow_measure_univ (#7926)\nThere were already versions of this lemma for `snorm'` and `snorm_ess_sup`. The new lemma collates these into a statement about `snorm`.", "changes": [{"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "snorm_le_snorm_mul_rpow_measure_univ", ["measure_theory"]]]}]}, {"timestamp": 1623707416, "sha": "e041dbe3", "message": "chore(algebra/covariant_and_contravariant): fix typos in module doc-strings (#7925)\nThis PR changes slightly the doc-strings to make the autogenerated documentation more consistent. I also removed some unstylish double spaces.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": []}]}, {"timestamp": 1623707415, "sha": "4a8ce41e", "message": "feat(analysis/special_functions/trigonometric): facts about periodic trigonometric functions (#7841)\nI use the periodicity API that I added in #7572 to write lemmas about sine (real and complex), cosine (real and complex), tangent (real and complex), and the exponential function (complex only).", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "cos_add_int_mul_two_pi", ["complex"]], ["add", "theorem", "cos_add_nat_mul_two_pi", ["complex"]], ["add", "theorem", "cos_antiperiodic", ["complex"]], ["add", "theorem", "cos_int_mul_two_pi_sub", ["complex"]], ["add", "theorem", "cos_int_mul_two_pi_sub_pi", ["complex"]], ["add", "theorem", "cos_nat_mul_two_pi_add_pi", ["complex"]], ["add", "theorem", "cos_nat_mul_two_pi_sub", ["complex"]], ["add", "theorem", "cos_nat_mul_two_pi_sub_pi", ["complex"]], ["add", "theorem", "cos_periodic", ["complex"]], ["add", "theorem", "cos_sub_int_mul_two_pi", ["complex"]], ["add", "theorem", "cos_sub_nat_mul_two_pi", ["complex"]], ["add", "theorem", "cos_sub_pi", ["complex"]], ["add", "theorem", "cos_sub_two_pi", ["complex"]], ["add", "theorem", "cos_two_pi_sub", ["complex"]], ["add", "theorem", "exp_antiperiodic", ["complex"]], ["add", "theorem", "exp_int_mul_two_pi_mul_I", ["complex"]], ["add", "theorem", "exp_mul_I_antiperiodic", ["complex"]], ["add", "theorem", "exp_mul_I_periodic", ["complex"]], ["add", "theorem", "exp_nat_mul_two_pi_mul_I", ["complex"]], ["add", "theorem", "exp_periodic", ["complex"]], ["add", "theorem", "exp_two_pi_mul_I", ["complex"]], ["add", "theorem", "sin_add_int_mul_two_pi", ["complex"]], ["add", "theorem", "sin_add_nat_mul_two_pi", ["complex"]], ["add", "theorem", "sin_antiperiodic", ["complex"]], ["add", "theorem", "sin_int_mul_two_pi_sub", ["complex"]], ["add", "theorem", "sin_nat_mul_two_pi_sub", ["complex"]], ["add", "theorem", "sin_periodic", ["complex"]], ["add", "theorem", "sin_sub_int_mul_two_pi", ["complex"]], ["add", "theorem", "sin_sub_nat_mul_two_pi", ["complex"]], ["add", "theorem", "sin_sub_pi", ["complex"]], ["add", "theorem", "sin_sub_two_pi", ["complex"]], ["add", "theorem", "sin_two_pi_sub", ["complex"]], ["add", "theorem", "tan_add_int_mul_pi", ["complex"]], ["add", "theorem", "tan_add_nat_mul_pi", ["complex"]], ["add", "theorem", "tan_add_pi", ["complex"]], ["add", "theorem", "tan_int_mul_pi_sub", ["complex"]], ["add", "theorem", "tan_nat_mul_pi", ["complex"]], ["add", "theorem", "tan_nat_mul_pi_sub", ["complex"]], ["add", "theorem", "tan_periodic", ["complex"]], ["add", "theorem", "tan_pi_sub", ["complex"]], ["add", "theorem", "tan_sub_int_mul_pi", ["complex"]], ["add", "theorem", "tan_sub_nat_mul_pi", ["complex"]], ["add", "theorem", "tan_sub_pi", ["complex"]], ["add", "theorem", "cos_antiperiodic", ["real"]], ["add", "theorem", "cos_int_mul_two_pi_sub", ["real"]], ["add", "theorem", "cos_nat_mul_two_pi_sub", ["real"]], ["add", "theorem", "cos_periodic", ["real"]], ["add", "theorem", "cos_two_pi_sub", ["real"]], ["add", "theorem", "sin_antiperiodic", ["real"]], ["add", "theorem", "sin_int_mul_two_pi_sub", ["real"]], ["add", "theorem", "sin_nat_mul_two_pi_sub", ["real"]], ["add", "theorem", "sin_periodic", ["real"]], ["add", "theorem", "sin_sub_pi", ["real"]], ["add", "theorem", "sin_two_pi_sub", ["real"]], ["add", "theorem", "tan_add_int_mul_pi", ["real"]], ["add", "theorem", "tan_add_nat_mul_pi", ["real"]], ["add", "theorem", "tan_add_pi", ["real"]], ["add", "theorem", "tan_int_mul_pi_sub", ["real"]], ["add", "theorem", "tan_nat_mul_pi", ["real"]], ["add", "theorem", "tan_nat_mul_pi_sub", ["real"]], ["add", "theorem", "tan_periodic", ["real"]], ["add", "theorem", "tan_pi_sub", ["real"]], ["add", "theorem", "tan_sub_int_mul_pi", ["real"]], ["add", "theorem", "tan_sub_nat_mul_pi", ["real"]], ["add", "theorem", "tan_sub_pi", ["real"]]]}]}, {"timestamp": 1623707414, "sha": "fed7cf07", "message": "fix(tactic/induction): fix multiple cases'/induction' bugs (#7717)\n* Fix generalisation in the presence of frozen local instances.\n Any time we revert a potentially frozen hypothesis, we now unfreeze local\n hypotheses during the operation. This makes sure that generalisation works\n uniformly whether or not any local instances are frozen.\n* Treat local defs as fixed during auto-generalisation\n induction' gets confused if we generalise over local definitions since they\n turn into lets when reverted. Ideally, we would handle local defs\n transparently, but that would require a lot of new code. So instead, we at\n least stop auto-generalisation from generalising them (and their\n dependencies).\n* Handle infinitely branching types\n induction' and cases' previously did not acknowledge the existence of\n infinitely branching types at all, leading to various internal errors.\nNew test cases for all these bugs, due to Patrick Massot, were added to the test\nsuite.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/induction.lean", "newPath": "src/tactic/induction.lean", "changes": []}, {"oldPath": "test/induction.lean", "newPath": "test/induction.lean", "changes": [["add", "inductive", "all", ["inf_tree"]], ["add", "inductive", "inf_tree", []], ["add", "def", "generate_from", ["topological_space_tests"]], ["add", "inductive", "generated_filter", ["topological_space_tests"]], ["add", "inductive", "generated_open", ["topological_space_tests"]], ["add", "def", "neighbourhood", ["topological_space_tests"]]]}]}, {"timestamp": 1623707413, "sha": "f781c47e", "message": "feat(linear_algebra/determinant): specialize `linear_equiv.is_unit_det` to automorphisms (#7667)\n`linear_equiv.is_unit_det` is defined for all equivs between equal-dimensional spaces, using `det (linear_map.to_matrix _ _ _)`, but I needed this result for `linear_map.det _` (which only exists between the exact same space). So I added the specialization `linear_equiv.is_unit_det'`.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "is_unit_det'", ["linear_equiv"]], ["add", "theorem", "det_cases", ["linear_map"]]]}]}, {"timestamp": 1623707412, "sha": "615af755", "message": "feat(measure_theory/interval_integral): `integral_deriv_comp_mul_deriv` (#7141)\n`∫ x in a..b, (g ∘ f) x * f' x`, where `f'` is derivative of `f` and `g` is the derivative of some function (the latter qualification allowing us to compute the integral directly by FTC-2)", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_deriv_comp_mul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_deriv_comp_mul_deriv", ["interval_integral"]], ["mod", "theorem", "integral_deriv_mul_eq_sub", ["interval_integral"]]]}, {"oldPath": "test/integration.lean", "newPath": "test/integration.lean", "changes": []}]}, {"timestamp": 1623674422, "sha": "386962c2", "message": "feat(algebra/char_zero): `neg_eq_self_iff` (#7916)\n`-a = a ↔ a = 0` and `a = -a ↔ a = 0`.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "eq_neg_self_iff", []], ["add", "theorem", "neg_eq_self_iff", []]]}]}, {"timestamp": 1623655395, "sha": "461b444d", "message": "docs(data/rat/denumerable): add module docstring (#7920)", "changes": [{"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}]}, {"timestamp": 1623655394, "sha": "a853a6ae", "message": "feat(analysis/normed_space): nnreal.coe_nat_abs (#7911)\nfrom LTE", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "coe_nat_abs", ["nnreal"]]]}]}, {"timestamp": 1623650857, "sha": "6aed9a77", "message": "feat(analysis/convex): add dual cone (#7738)\nAdd definition of the dual cone of a set in a real inner product space", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "inner_dual_cone_empty", []], ["add", "theorem", "inner_dual_cone_le_inner_dual_cone", []], ["add", "theorem", "mem_inner_dual_cone", []], ["add", "theorem", "pointed_inner_dual_cone", []]]}]}, {"timestamp": 1623642970, "sha": "fec6c8a4", "message": "chore(scripts): update nolints.txt (#7922)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623623532, "sha": "30045133", "message": "feat(measure_theory/ess_sup): monotonicity of ess_sup/ess_inf w.r.t. the measure (#7917)", "changes": [{"oldPath": "src/measure_theory/ess_sup.lean", "newPath": "src/measure_theory/ess_sup.lean", "changes": [["mod", "theorem", "ess_sup_const_mul", ["ennreal"]], ["mod", "theorem", "ess_sup_eq_zero_iff", ["ennreal"]], ["add", "theorem", "ess_inf_antimono_measure", []], ["add", "theorem", "ess_sup_le_of_ae_le", []], ["add", "theorem", "ess_sup_mono_measure", []], ["add", "theorem", "le_ess_inf_of_ae_le", []]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "liminf_le_liminf_of_le", ["filter"]], ["add", "theorem", "limsup_le_limsup_of_le", ["filter"]]]}]}, {"timestamp": 1623623531, "sha": "4fe77812", "message": "chore(algebra/lie/basic + classical): golf some proofs (#7903)\nAnother PR with some golfing, to get acquainted with the files! Oliver, I really like how you set this up!\nAlso, feel free to say that you do not like the golfing: there is a subtle tension between proving stuff fast and making it accessible!", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}]}, {"timestamp": 1623623530, "sha": "b3244884", "message": "docs(set_theory/schroeder_bernstein): add module docstring (#7900)", "changes": [{"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}]}, {"timestamp": 1623623529, "sha": "e971eae6", "message": "docs(data/nat/totient): add module docstring (#7899)", "changes": [{"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}]}, {"timestamp": 1623623528, "sha": "a359bd98", "message": "chore(measure_theory): measurability statements for coercions, coherent naming (#7854)\nAlso add a few lemmas on measure theory", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "max_zero_sub_max_neg_zero_eq_self", []]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_eq_integral_pos_part_sub_integral_neg_part", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "coe_ereal_ennreal", ["ae_measurable"]], ["add", "theorem", "coe_nnreal_ennreal", ["ae_measurable"]], ["add", "theorem", "coe_nnreal_real", ["ae_measurable"]], ["add", "theorem", "coe_real_ereal", ["ae_measurable"]], ["del", "theorem", "ennreal_coe", ["ae_measurable"]], ["add", "theorem", "ennreal_to_nnreal", ["ae_measurable"]], ["add", "theorem", "ennreal_to_real", ["ae_measurable"]], ["add", "theorem", "ereal_to_real", ["ae_measurable"]], ["del", "theorem", "nnreal_coe", ["ae_measurable"]], ["del", "theorem", "to_real", ["ae_measurable"]], ["del", "theorem", "measurable_coe", ["ennreal"]], ["add", "theorem", "measurable_of_measurable_real", ["ereal"]], ["add", "theorem", "measurable", ["lower_semicontinuous"]], ["add", "theorem", "coe_ereal_ennreal", ["measurable"]], ["add", "theorem", "coe_nnreal_ennreal", ["measurable"]], ["add", "theorem", "coe_nnreal_real", ["measurable"]], ["add", "theorem", "coe_real_ereal", ["measurable"]], ["del", "theorem", "ennreal_coe", ["measurable"]], ["add", "theorem", "ennreal_to_nnreal", ["measurable"]], ["add", "theorem", "ennreal_to_real", ["measurable"]], ["add", "theorem", "ereal_to_real", ["measurable"]], ["del", "theorem", "nnreal_coe", ["measurable"]], ["del", "theorem", "to_nnreal", ["measurable"]], ["del", "theorem", "to_real", ["measurable"]], ["add", "theorem", "measurable_coe_ennreal_ereal", []], ["add", "theorem", "measurable_coe_nnreal_ennreal", []], ["add", "theorem", "measurable_coe_nnreal_ennreal_iff", []], ["add", "theorem", "measurable_coe_nnreal_real", []], ["add", "theorem", "measurable_coe_real_ereal", []], ["del", "theorem", "measurable_ennreal_coe_iff", []], ["add", "def", "ereal_equiv_real", ["measurable_equiv"]], ["add", "theorem", "measurable_ereal_to_real", []], ["add", "theorem", "measurable_real_to_nnreal", []], ["del", "theorem", "measurable_coe", ["nnreal"]], ["add", "theorem", "measurable", ["upper_semicontinuous"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "real_to_nnreal", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_of_fintype", []], ["add", "theorem", "measurable_of_measurable_on_compl_finite", []]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "coe_nnreal_ennreal_nndist", []], ["del", "theorem", "ennreal_coe_nndist", []]]}]}, {"timestamp": 1623605036, "sha": "5c114586", "message": "chore(analysis/normed_space/normed_group_hom): golf proof of normed_group_hom.bounded (#7896)", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": []}]}, {"timestamp": 1623605035, "sha": "2f40f351", "message": "feat(measure_theory): continuity of primitives (#7864)\nFrom the sphere eversion project\nThis proves some continuity of interval integrals with respect to parameters and continuity of primitives of measurable functions. The statements are a bit abstract, but they allow to have:\n```lean\nexample {f : ℝ → E} (h_int : integrable f) (a : ℝ) : \n continuous (λ b, ∫ x in a .. b, f x ∂ volume) :=\nh_int.continuous_primitive a\n```\nunder the usual assumptions on `E`: `normed_group E`, `second_countable_topology E`, `normed_space ℝ E`\n`complete_space E`, `measurable_space E`, `borel_space E`, say `E = ℝ` for instance. Of course global integrability is not needed, assuming integrability on all finite length intervals is enough:\n```lean\nexample {f : ℝ → E} (h_int : ∀ a b : ℝ, interval_integrable f volume a b) (a : ℝ) : \n continuous (λ b, ∫ x in a .. b, f x ∂ volume) :=\ncontinuous_primitive h_int a\n```", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Iic_inter_Ioc_of_le", ["set"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "forall_interval_oc_iff", ["set"]], ["add", "def", "interval_oc", ["set"]], ["add", "theorem", "interval_oc_of_le", ["set"]], ["add", "theorem", "interval_oc_of_lt", ["set"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "ae_interval_oc_iff'", []], ["add", "theorem", "ae_interval_oc_iff", []], ["add", "theorem", "ae_measurable_interval_oc_iff", []], ["add", "theorem", "norm", ["interval_integrable"]], ["add", "theorem", "continuous_at_of_dominated_interval", ["interval_integral"]], ["add", "theorem", "continuous_of_dominated_interval", ["interval_integral"]], ["add", "theorem", "continuous_on_primitive''", ["interval_integral"]], ["add", "theorem", "continuous_on_primitive'", ["interval_integral"]], ["add", "theorem", "continuous_on_primitive", ["interval_integral"]], ["add", "theorem", "continuous_primitive", ["interval_integral"]], ["add", "theorem", "continuous_within_at_of_dominated_interval", ["interval_integral"]], ["add", "theorem", "continuous_within_at_primitive", ["interval_integral"]], ["add", "theorem", "integral_Icc_eq_integral_Ioc", ["interval_integral"]], ["add", "theorem", "integral_congr_ae'", ["interval_integral"]], ["add", "theorem", "integral_congr_ae", ["interval_integral"]], ["add", "theorem", "integral_indicator", ["interval_integral"]], ["add", "theorem", "integral_zero_ae", ["interval_integral"]], ["add", "theorem", "continuous_primitive", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "restrict_singleton'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_zero_set", ["measure_theory", "measure"]]]}]}, {"timestamp": 1623584704, "sha": "6d2a0512", "message": "feat(algebra/covariant_and_contravariant): API for covariant_and_contravariant (#7889)\nThis PR introduces more API for `covariant` and `contravariant` stuff .\nBesides the API, I have not actually made further use of the typeclasses or of the API. This happens in subsequent PRs.\nThis is a step towards PR #7645.", "changes": [{"oldPath": "src/algebra/covariant_and_contravariant.lean", "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": [["add", "theorem", "act_rel_act_of_rel", []], ["add", "theorem", "act_rel_act_of_rel_of_rel", []], ["add", "theorem", "act_rel_of_act_rel_of_rel_act_rel", []], ["add", "theorem", "act_rel_of_rel_of_act_rel", []], ["mod", "def", "contravariant", []], ["add", "theorem", "contravariant_flip_mul_iff", []], ["add", "theorem", "contravariant_lt_of_contravariant_le", []], ["add", "theorem", "covariant_flip_mul_iff", []], ["add", "theorem", "covariant_le_iff_contravariant_lt", []], ["add", "theorem", "covariant_le_of_covariant_lt", []], ["add", "theorem", "covariant_lt_iff_contravariant_le", []], ["add", "theorem", "covconv", []], ["add", "theorem", "covariant_iff_contravariant", ["group"]], ["add", "theorem", "rel_act_of_act_rel_act_of_rel_act", []], ["add", "theorem", "rel_act_of_rel_of_rel_act", []], ["add", "theorem", "rel_iff_cov", []], ["add", "theorem", "rel_of_act_rel_act", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": []}]}, {"timestamp": 1623564293, "sha": "7c9643de", "message": "chore(scripts): update nolints.txt (#7914)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623564292, "sha": "e13fd486", "message": "docs(data/nat/pairing): add module docstring (#7897)", "changes": [{"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["del", "theorem", "le_mkpair_left", ["nat"]], ["del", "theorem", "le_mkpair_right", ["nat"]], ["add", "theorem", "left_le_mkpair", ["nat"]], ["add", "theorem", "right_le_mkpair", ["nat"]], ["del", "theorem", "unpair_le_left", ["nat"]], ["del", "theorem", "unpair_le_right", ["nat"]], ["add", "theorem", "unpair_left_le", ["nat"]], ["add", "theorem", "unpair_right_le", ["nat"]]]}]}, {"timestamp": 1623564291, "sha": "2c919b08", "message": "chore(algebra/{ordered_group, linear_ordered_comm_group_with_zero.lean}): rename one lemma, remove more @s (#7895)\nThe more substantial part of this PR is changing the name of a lemma from `div_lt_div_iff'` to `mul_inv_lt_mul_inv_iff'`: the lemma proves `a * b⁻¹ ≤ c * d⁻¹ ↔ a * d ≤ c * b`.\nFurthermore, in the same spirit as a couple of my recent short PRs, I am removing a few more `@`, in order to sweep under the rug, later on, a change in typeclass assumptions. This PR only changes a name, which was used only once, and a few proofs, but no statement.\nOn the path towards PR #7645.", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "div_le_div_iff'", []], ["add", "theorem", "mul_inv_le_mul_inv_iff'", []]]}]}, {"timestamp": 1623564290, "sha": "add577d7", "message": "feat(group_theory/group_action/defs): add `has_mul.to_has_scalar` and relax typeclass in `smul_mul_smul` (#7885)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["mod", "theorem", "mul_smul_comm", []], ["mod", "theorem", "smul_eq_mul", []], ["mod", "theorem", "smul_mul_assoc", []], ["mod", "theorem", "smul_mul_smul", []]]}]}, {"timestamp": 1623541564, "sha": "e0a3303f", "message": "chore(category_theory/filtered): Adds missing instances (#7909)", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1623541563, "sha": "9ad8ea3b", "message": "chore(linear_algebra/quadratic_form): fix typo (#7907)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}]}, {"timestamp": 1623541562, "sha": "7b7cd0a1", "message": "fix(tactic/lint): punctuation of messages (#7869)\nPreviously, the linter framework would append punctuation (`.` or `:`) to the message provided by the linter, but this was confusing and lead to some double punctuation. Now all linters specify their own punctuation.", "changes": [{"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1623541561, "sha": "39073fa2", "message": "feat(algebra/pointwise): Dynamics of powers of a subset (#7836)\nIf `S` is a subset of a group `G`, then the powers of `S` eventually stabilize in size.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "card_pow_eq_card_pow_card_univ", ["group"]], ["add", "theorem", "card_pow_eq_card_pow_card_univ_aux", ["group"]], ["add", "theorem", "empty_pow", ["set"]]]}]}, {"timestamp": 1623513302, "sha": "ee4fe743", "message": "feat(topology/category/Profinite/cofiltered_clopen): Theorem about clopen sets in cofiltered limits of profinite sets (#7837)\nThis PR proves the theorem that any clopen set in a cofiltered limit of profinite sets arises from a clopen set in one of the factors of the limit.\nThis generalizes a theorem used in LTE.", "changes": [{"oldPath": null, "newPath": "src/topology/category/Profinite/cofiltered_limit.lean", "changes": [["add", "theorem", "exists_clopen_of_cofiltered", ["Profinite"]]]}]}, {"timestamp": 1623513300, "sha": "06094d56", "message": "feat(linear_algebra/free_module): add class module.free (#7801)\nWe introduce here a new class `module.free`.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/free_module.lean", "changes": [["add", "def", "choose_basis_index", ["module", "free"]], ["add", "theorem", "of_basis", ["module", "free"]], ["add", "theorem", "of_equiv'", ["module", "free"]], ["add", "theorem", "of_equiv", ["module", "free"]], ["add", "theorem", "free_def", ["module"]], ["add", "theorem", "free_iff_set", ["module"]]]}]}, {"timestamp": 1623513299, "sha": "f9935ede", "message": "feat(geometry/manifold): Some lemmas for smooth functions (#7752)", "changes": [{"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": [["add", "theorem", "L_apply", []], ["add", "theorem", "L_mul", []], ["add", "theorem", "R_apply", []], ["add", "theorem", "R_mul", []], ["add", "def", "smooth_left_mul", []], ["add", "def", "smooth_right_mul", []]]}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": [["add", "theorem", "mul_comp", ["smooth_map"]], ["add", "theorem", "smul_comp'", ["smooth_map"]], ["add", "theorem", "smul_comp", ["smooth_map"]]]}]}, {"timestamp": 1623496211, "sha": "b7d4996e", "message": "chore(ring_theory/adjoin_root): speedup (#7905)\nSpeedup a lemma that has just timed out in bors, by removing a heavy `change`.", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1623496210, "sha": "15b24348", "message": "chore(data/nat/sqrt): Alternative phrasings of data.nat.sqrt lemmas (#7748)\nAdd versions of the `data.nat.sqrt` lemmas to talk about `n^2` where the current versions talk about `n * n`.", "changes": [{"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": [["add", "theorem", "eq_sqrt'", ["nat"]], ["add", "theorem", "exists_mul_self'", ["nat"]], ["add", "theorem", "le_sqrt'", ["nat"]], ["add", "theorem", "lt_succ_sqrt'", ["nat"]], ["add", "theorem", "not_exists_sq'", ["nat"]], ["add", "theorem", "sqrt_add_eq'", ["nat"]], ["add", "theorem", "sqrt_eq'", ["nat"]], ["add", "theorem", "sqrt_le'", ["nat"]], ["add", "theorem", "sqrt_lt'", ["nat"]], ["add", "theorem", "sqrt_mul_sqrt_lt_succ'", ["nat"]], ["add", "theorem", "succ_le_succ_sqrt'", ["nat"]]]}]}, {"timestamp": 1623496209, "sha": "841dce13", "message": "feat(data/polynomial): generalize `polynomial.has_scalar` to require only `distrib_mul_action` instead of `semimodule` (#7664)\nNote that by generalizing this instance, we introduce a diamond with `polynomial.mul_semiring_action`, which has a definitionally different `smul`. To resolve this, we add a proof that the definitions are equivalent, and switch `polynomial.mul_semiring_action` to use the same implementation as `polynomial.has_scalar`. This allows us to generalize `smul_C` to apply to all types of action, and remove `coeff_smul'` which then duplicates the statement of `coeff_smul`.", "changes": [{"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": [["del", "theorem", "coeff_smul'", ["polynomial"]], ["del", "theorem", "smul_C", ["polynomial"]], ["add", "theorem", "smul_eq_map", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "smul_C", ["polynomial"]], ["mod", "theorem", "smul_monomial", ["polynomial"]], ["mod", "theorem", "smul_to_finsupp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["mod", "theorem", "coeff_smul", ["polynomial"]], ["mod", "theorem", "support_smul", ["polynomial"]]]}]}, {"timestamp": 1623485166, "sha": "2016a93a", "message": "feat(linear_algebra): use `finset`s to define `det` and `trace` (#7778)\nThis PR replaces `∃ (s : set M) (b : basis s R M), s.finite` with `∃ (s : finset M), nonempty (basis s R M)` in the definitions in `linear_map.det` and `linear_map.trace`. This should make it much easier to unfold those definitions without having to modify the instance cache or supply implicit params.\nIn particular, it should help a lot with #7667.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "def", "reindex_finset_range", ["basis"]], ["add", "theorem", "reindex_finset_range_apply", ["basis"]], ["add", "theorem", "reindex_finset_range_repr", ["basis"]], ["add", "theorem", "reindex_finset_range_repr_self", ["basis"]], ["add", "theorem", "reindex_finset_range_self", ["basis"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["del", "theorem", "det_eq_det_to_matrix_of_finite_set", ["linear_map"]], ["add", "theorem", "det_eq_det_to_matrix_of_finset", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_eq_zero_of_not_exists_basis_finset", []]]}, {"oldPath": "src/linear_algebra/trace.lean", "newPath": "src/linear_algebra/trace.lean", "changes": [["del", "theorem", "trace_aux_reindex_range", ["linear_map"]], ["del", "theorem", "trace_eq_matrix_trace_of_finite_set", ["linear_map"]], ["add", "theorem", "trace_eq_matrix_trace_of_finset", ["linear_map"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}]}, {"timestamp": 1623485164, "sha": "dabb41f2", "message": "feat(tactic/{induction,fresh_names}): improve `induction' with` (#7726)\nThis commit introduces two improvements to the `with` clauses of the `cases'`\nand `induction'` tactics:\n- Users can now write a hyphen instead of a name in the `with` clause. This\n clears the corresponding hypothesis (and any hypotheses depending on it).\n- When users give an explicit name in the `with` clause, that name is now used\n verbatim, even if it shadows an existing hypothesis.", "changes": [{"oldPath": "src/tactic/fresh_names.lean", "newPath": "src/tactic/fresh_names.lean", "changes": []}, {"oldPath": "src/tactic/induction.lean", "newPath": "src/tactic/induction.lean", "changes": []}, {"oldPath": "test/fresh_names.lean", "newPath": "test/fresh_names.lean", "changes": []}, {"oldPath": "test/induction.lean", "newPath": "test/induction.lean", "changes": [["add", "inductive", "test", ["with_tests"]]]}]}, {"timestamp": 1623465483, "sha": "55c96623", "message": "chore(scripts): update nolints.txt (#7902)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623465482, "sha": "2974a9f9", "message": "feat(ring_theory): every division_ring is_noetherian (#7661)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "bot_is_maximal", ["ideal"]], ["mod", "theorem", "eq_bot_of_prime", ["ideal"]], ["mod", "theorem", "eq_bot_or_top", ["ideal"]], ["add", "theorem", "span_one", ["ideal"]], ["mod", "theorem", "span_singleton_one", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["mod", "theorem", "is_maximal_of_irreducible", ["principal_ideal_ring"]]]}]}, {"timestamp": 1623465481, "sha": "5948cde7", "message": "feat(ring_theory): the field trace resp. norm is the sum resp. product of the conjugates (#7640)\nMore precise statement of the main result: the field trace (resp. norm) of `x` in `K(x) / K`, mapped to a field `F` that contains all the conjugate roots over `K` of `x`, is equal to the sum (resp. product) of all of these conjugate roots.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "is_integral_gen", ["intermediate_field", "adjoin_simple"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "total_fin_zero", ["finsupp"]]]}, {"oldPath": "src/ring_theory/norm.lean", "newPath": "src/ring_theory/norm.lean", "changes": [["add", "theorem", "norm_gen_eq_prod_roots", ["algebra"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["add", "theorem", "trace_gen_eq_sum_roots", ["algebra"]]]}]}, {"timestamp": 1623465480, "sha": "43379184", "message": "feat(analysis/special_functions/integrals): integral of `sin x ^ m * cos x ^ n` (#7418)\nThe simplification of integrals of the form `∫ x in a..b, sin x ^ m * cos x ^ n` where (i) `n` is odd, (ii) `m` is odd, and (iii) `m` and `n` are both even.\nThe computation of the integrals of the following functions are then provided outright:\n- `sin x * cos x`, given both in terms of sine and cosine\n- `sin x ^ 2 * cos x ^ 2`\n- `sin x ^ 2 * cos x` and `sin x * cos x ^ 2`\n- `sin x ^ 3` and `cos x ^ 3`", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_cos_pow_three", []], ["add", "theorem", "integral_sin_mul_cos_sq", []], ["add", "theorem", "integral_sin_mul_cos₁", []], ["add", "theorem", "integral_sin_mul_cos₂", []], ["add", "theorem", "integral_sin_pow_even_mul_cos_pow_even", []], ["add", "theorem", "integral_sin_pow_mul_cos_pow_odd", []], ["add", "theorem", "integral_sin_pow_odd_mul_cos_pow", []], ["add", "theorem", "integral_sin_pow_three", []], ["add", "theorem", "integral_sin_sq_mul_cos", []], ["add", "theorem", "integral_sin_sq_mul_cos_sq", []]]}, {"oldPath": "test/integration.lean", "newPath": "test/integration.lean", "changes": []}]}, {"timestamp": 1623465479, "sha": "2d175ae6", "message": "feat(topology/category/Top/limits): Kőnig's lemma for fintypes (#6288)\nSpecializes `Top.nonempty_limit_cone_of_compact_t2_inverse_system` to an inverse system of nonempty fintypes.", "changes": [{"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["add", "theorem", "init", ["nonempty_sections_of_fintype_inverse_system"]], ["add", "theorem", "nonempty_sections_of_fintype_inverse_system", []], ["add", "def", "directed_order", ["ulift"]]]}]}, {"timestamp": 1623446329, "sha": "b3606111", "message": "chore(src/algebra/lie/abelian): golf (#7898)\nI golfed some of the proofs of the file `algebra/lie/abelian`. My main motivation was to get familiar with the file.", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}]}, {"timestamp": 1623446328, "sha": "dd600354", "message": "chore(algebra/{covariant_and_contravariant + ordered_monoid_lemmas}): new file covariant_and_contravariant (#7890)\nThis PR creates a new file `algebra/covariant_and_contravariant` and moves the part of `algebra/ordered_monoid_lemmas` dealing exclusively with `covariant` and `contravariant` into it.\nIt also rearranges the documentation, with a view to the later PRs, building up to #7645.\nThe discrepancy between the added and removed lines is entirely due to longer documentation: no actual Lean code has changed, except, of course, for the `import` in `algebra/ordered_monoid_lemmas` that now uses `covariant_and_contravariant`.", "changes": [{"oldPath": null, "newPath": "src/algebra/covariant_and_contravariant.lean", "changes": [["add", "def", "contravariant", []], ["add", "def", "covariant", []]]}, {"oldPath": "src/algebra/ordered_monoid_lemmas.lean", "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": [["del", "def", "contravariant", []], ["del", "def", "covariant", []]]}]}, {"timestamp": 1623446327, "sha": "538f015c", "message": "feat(data/finset/basic): `empty_product` and `product_empty` (#7886)\nadd `product_empty_`", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "empty_product", ["finset"]], ["add", "theorem", "product_empty", ["finset"]]]}]}, {"timestamp": 1623446326, "sha": "97a7a246", "message": "doc(data/pequiv): add module docs (#7877)", "changes": [{"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}]}, {"timestamp": 1623446325, "sha": "ff44ed50", "message": "feat({algebra/group_action_hom, data/equiv/mul_add}): add missing `inverse` defs (#7847)", "changes": [{"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": [["add", "theorem", "coe_one", ["distrib_mul_action_hom"]], ["add", "theorem", "coe_zero", ["distrib_mul_action_hom"]], ["add", "def", "inverse", ["distrib_mul_action_hom"]], ["add", "theorem", "one_apply", ["distrib_mul_action_hom"]], ["add", "theorem", "to_fun_eq_coe", ["distrib_mul_action_hom"]], ["add", "theorem", "zero_apply", ["distrib_mul_action_hom"]], ["add", "def", "inverse", ["mul_action_hom"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "inverse", ["monoid_hom"]]]}]}, {"timestamp": 1623446324, "sha": "a008b33f", "message": "feat(data/finsupp/to_dfinsupp): add sigma_finsupp_lequiv_dfinsupp (#7818)\nEquivalences between `(Σ i, η i) →₀ N` and `Π₀ i, (η i →₀ N)`.\n- [x] depends on: #7819", "changes": [{"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": [["add", "def", "sigma_finsupp_add_equiv_dfinsupp", []], ["add", "def", "sigma_finsupp_equiv_dfinsupp", []], ["add", "theorem", "sigma_finsupp_equiv_dfinsupp_add", []], ["add", "theorem", "sigma_finsupp_equiv_dfinsupp_apply", []], ["add", "theorem", "sigma_finsupp_equiv_dfinsupp_smul", []], ["add", "theorem", "sigma_finsupp_equiv_dfinsupp_support", []], ["add", "theorem", "sigma_finsupp_equiv_dfinsupp_symm_apply", []], ["add", "def", "sigma_finsupp_lequiv_dfinsupp", []]]}]}, {"timestamp": 1623446323, "sha": "64d453ee", "message": "feat(ring_theory/adjoin/basic): add subalgebra.fg_prod (#7811)\nWe add `subalgebra.fg_prod`: the product of two finitely generated subalgebras is finitely generated.\nA mathematical remark: the result is not difficult, but one needs to be careful. For example, `algebra.adjoin_eq_prod` is false without adding `(1,0)` and `(0,1)` by hand to the set of generators. Moreover, `linear_map.inl` and `linear_map.inr` are not ring homomorphisms, so it seems difficult to mimic the proof for modules. A better mathematical proof is to take surjections from two polynomial rings (in finitely many variables) and considering the tensor product of these polynomial rings, that is again a polynomial ring in finitely many variables, and build a surjection to the product of the subalgebras (using the universal property of the tensor product). The problem with this approach is that one needs to know that the tensor product of polynomial rings is again a polynomial ring, and I don't know well enough the API fort the tensor product to prove this.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "fst", ["alg_hom"]], ["add", "def", "snd", ["alg_hom"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "inl_map_mul", ["linear_map"]], ["add", "theorem", "inr_map_mul", ["linear_map"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_induction", ["algebra"]], ["add", "theorem", "adjoin_inl_union_inr_eq_prod", ["algebra"]], ["add", "theorem", "adjoin_inl_union_inr_le_prod", ["algebra"]], ["mod", "theorem", "adjoin_union", ["algebra"]], ["add", "theorem", "adjoin_union_eq_under", ["algebra"]], ["add", "theorem", "mem_adjoin_of_map_mul", ["algebra"]], ["add", "theorem", "fg_prod", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1623446322, "sha": "61a04c51", "message": "feat(algebraic_geometry/structure_sheaf): Define comap on structure sheaf (#7788)\nDefines the comap of a ring homomorphism on the structure sheaves of the prime spectra.", "changes": [{"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["mod", "def", "stalk_iso", ["algebraic_geometry"]], ["add", "def", "comap", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "comap_apply", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "comap_comp", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "comap_const", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "comap_fun", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "comap_fun_is_locally_fraction", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "comap_id'", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "comap_id", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "comap_id_eq_map", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "eq_mk'", ["algebraic_geometry", "structure_sheaf", "is_fraction"]], ["mod", "def", "to_open", ["algebraic_geometry"]], ["del", "theorem", "to_open_apply", ["algebraic_geometry"]], ["add", "theorem", "to_open_comp_comap", ["algebraic_geometry"]]]}]}, {"timestamp": 1623446320, "sha": "eb9bd55f", "message": "feat(linear_algebra/quadratic_form): Real version of Sylvester's law of inertia (#7427)\nWe prove that every nondegenerate real quadratic form is equivalent to a weighted sum of squares with the weights being ±1.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/data/real/sign.lean", "changes": [["add", "theorem", "inv_sign", ["real"]], ["add", "def", "sign", ["real"]], ["add", "theorem", "sign_apply_eq", ["real"]], ["add", "theorem", "sign_inv", ["real"]], ["add", "theorem", "sign_mul_nonneg", ["real"]], ["add", "theorem", "sign_mul_pos_of_ne_zero", ["real"]], ["add", "theorem", "sign_neg", ["real"]], ["add", "theorem", "sign_of_neg", ["real"]], ["add", "theorem", "sign_of_not_neg", ["real"]], ["add", "theorem", "sign_of_zero_le", ["real"]], ["add", "theorem", "sign_one", ["real"]], ["add", "theorem", "sign_zero", ["real"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "equivalent_one_neg_one_weighted_sum_squared", ["quadratic_form"]]]}]}, {"timestamp": 1623417979, "sha": "e8add823", "message": "chore(algebra/{ordered_monoid,linear_ordered_comm_group_with_zero}): remove some uses of @ (#7884)\nThis PR replaces a couple of uses of `@` with slightly more verbose proofs that only use the given explicit arguments.\nThe `by apply mul_lt_mul''' hab0 hcd0` line also works with `mul_lt_mul''' hab0 hcd0` alone (at least on my machine). The reason for the slightly more elaborate proof is that once the typeclass assumptions will change, the direct term-mode proof will break, while the `by apply` version is more stable.\nBesides its aesthetic value, this is useful in PR #7645, as the typeclass arguments of the involved lemmas will change and this will keep the diff (slightly) shorter.", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}]}, {"timestamp": 1623417978, "sha": "9500d951", "message": "feat(number_theory/l_series): The L-series of an arithmetic function (#7862)\nDefines the L-series of an arithmetic function\nProves a few basic facts about convergence of L-series", "changes": [{"oldPath": null, "newPath": "src/number_theory/l_series.lean", "changes": [["add", "def", "l_series", ["nat", "arithmetic_function"]], ["add", "theorem", "l_series_add", ["nat", "arithmetic_function"]], ["add", "theorem", "l_series_eq_zero_of_not_l_series_summable", ["nat", "arithmetic_function"]], ["add", "def", "l_series_summable", ["nat", "arithmetic_function"]], ["add", "theorem", "l_series_summable_iff_of_re_eq_re", ["nat", "arithmetic_function"]], ["add", "theorem", "l_series_summable_of_bounded_of_one_lt_re", ["nat", "arithmetic_function"]], ["add", "theorem", "l_series_summable_of_bounded_of_one_lt_real", ["nat", "arithmetic_function"]], ["add", "theorem", "l_series_summable_zero", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_l_series_summable_iff_one_lt_re", ["nat", "arithmetic_function"]]]}]}, {"timestamp": 1623417977, "sha": "e35438bb", "message": "feat(analysis): Cauchy sequence and series lemmas (#7858)\nfrom LTE. Mostly relaxing assumptions from metric to\npseudo-metric and proving some obvious lemmas.\neventually_constant_prod and eventually_constant_sum are duplicated by hand because `to_additive` gets confused by the appearance of `1`.\nIn `norm_le_zero_iff' {G : Type*} [semi_normed_group G] [separated_space G]` and the following two lemmas the type classes assumptions look silly, but those lemmas are indeed useful in some specific situation in LTE.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "eventually_constant_prod", ["finset"]], ["add", "theorem", "eventually_constant_sum", ["finset"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "add", ["cauchy_seq"]], ["add", "theorem", "cauchy_seq_sum_of_eventually_eq", []], ["add", "theorem", "norm_eq_zero_iff'", []], ["add", "theorem", "norm_le_insert'", []], ["add", "theorem", "norm_le_zero_iff'", []], ["add", "theorem", "norm_pos_iff'", []], ["add", "theorem", "cauchy_seq_iff", ["normed_group"]], ["add", "theorem", "mem_closure_iff", ["semi_normed_group"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "cauchy_series_of_le_geometric", []], ["add", "theorem", "dist_partial_sum'", []], ["add", "theorem", "dist_partial_sum", []], ["add", "theorem", "cauchy_series_of_le_geometric''", ["normed_group"]], ["add", "theorem", "cauchy_series_of_le_geometric'", ["normed_group"]], ["add", "theorem", "cauchy_seq_of_le_geometric", ["semi_normed_group"]], ["mod", "theorem", "uniformity_basis_dist_pow_of_lt_1", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "tendsto_at_bot_of_eventually_const", []], ["add", "theorem", "tendsto_at_top_of_eventually_const", []]]}]}, {"timestamp": 1623417976, "sha": "a4211857", "message": "feat(algebra/periodic): more periodicity lemmas (#7853)", "changes": [{"oldPath": "src/algebra/periodic.lean", "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "sub_eq'", ["function", "antiperiodic"]], ["add", "theorem", "gsmul_sub_eq", ["function", "periodic"]], ["add", "theorem", "int_mul_sub_eq", ["function", "periodic"]], ["add", "theorem", "nat_mul_sub_eq", ["function", "periodic"]], ["add", "theorem", "nsmul_sub_eq", ["function", "periodic"]], ["add", "theorem", "sub_eq'", ["function", "periodic"]]]}]}, {"timestamp": 1623417975, "sha": "9228ff9c", "message": "feat(algebra/ordered_group): abs_sub (#7850)\n- rename `abs_sub` to `abs_sub_comm`\n- prove `abs_sub`", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "abs_sub", []], ["add", "theorem", "abs_sub_comm", []]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["del", "theorem", "abs_sub", ["complex"]], ["add", "theorem", "abs_sub_comm", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/exponential_bounds.lean", "newPath": "src/data/complex/exponential_bounds.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/sphere.lean", "newPath": "src/geometry/euclidean/sphere.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}]}, {"timestamp": 1623417974, "sha": "4bfe8e8a", "message": "feat(algebra/order_functions): lt_max_of_lt_ (#7849)", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "lt_max_of_lt_left", []], ["add", "theorem", "lt_max_of_lt_right", []], ["add", "theorem", "min_lt_of_left_lt", []], ["add", "theorem", "min_lt_of_right_lt", []]]}]}, {"timestamp": 1623417972, "sha": "915a0a21", "message": "feat(topology/algebra/ordered/basic): add a few subseq-related lemmas (#7828)\nThese are lemmas I proved while working on #7164. Some of them are actually not used anymore in that PR because I'm refactoring it, but I thought they would be useful anyway, so here there are.", "changes": [{"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "infi_eq_infi_subseq_of_monotone", []], ["add", "theorem", "supr_eq_supr_subseq_of_monotone", []], ["add", "theorem", "tendsto_iff_tendsto_subseq_of_monotone", []]]}]}, {"timestamp": 1623413275, "sha": "51cd821b", "message": "chore(algebra/lie/classical): speed up slow proof (#7894)\nSqueeze a simp in a proof that has just timed out on bors", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}]}, {"timestamp": 1623377774, "sha": "6eb3d971", "message": "chore(scripts): update nolints.txt (#7887)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623377773, "sha": "6f6dbad6", "message": "feat(set_theory/cardinal): missing lemma (#7880)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_range_le_lift", ["cardinal"]]]}]}, {"timestamp": 1623377772, "sha": "e8aa9849", "message": "doc(int/modeq): add module doc and tidy (#7878)", "changes": [{"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": [["mod", "theorem", "mod_coprime", ["int", "modeq"]]]}]}, {"timestamp": 1623377771, "sha": "1b0e5ee5", "message": "chore(data/real/nnreal): avoid abusing inequalities in nnreals (#7872)\nI removed the use of `@`, so that all implicit arguments stay implicit.\nThe main motivation is to reduce the diff in the bigger PR #7645: by only having the explicit arguments, the same proof works, without having to fiddle around with underscores.", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1623377770, "sha": "d5705960", "message": "feat(logic/function/basic): a lemma on symmetric operations and flip (#7871)\nThis lemma is used to show that if multiplication is commutative, then `flip`ping the arguments returns the same function.\nThis is used in PR #7645 .", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "flip_eq", ["is_symm_op"]]]}]}, {"timestamp": 1623377769, "sha": "9a4881d4", "message": "chore(data/real/pi, analysis/special_functions/trigonometric.lean): speed up/simplify proofs (#7868)\nThese are mostly cosmetic changes, simplifying a couple of proofs. I tried to remove the calls to `linarith` or `norm_num`, when the alternatives were either single lemmas or faster than automation.\nThe main motivation is to reduce the diff in the bigger PR #7645.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}]}, {"timestamp": 1623377768, "sha": "f157a372", "message": "chore(logic/basic): fixup `eq_or_ne` (#7865)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "eq_or_ne", ["decidable"]], ["mod", "theorem", "ne_or_eq", ["decidable"]], ["mod", "theorem", "eq_or_ne", []], ["mod", "theorem", "ne_or_eq", []]]}]}, {"timestamp": 1623377767, "sha": "0a80efb3", "message": "chore(analysis/normed_space/normed_group_hom): remove bound_by (#7860)\n`bound_by f C` is the same as `∥f∥ ≤ C` and it is therefore useless now that we have `∥f∥`.", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["del", "theorem", "antilipschitz_of_bound_by", ["normed_group_hom"]], ["add", "theorem", "antilipschitz_of_norm_ge", ["normed_group_hom"]], ["mod", "theorem", "bound", ["normed_group_hom"]], ["del", "def", "bound_by", ["normed_group_hom"]], ["del", "theorem", "bound_by_one_of_isometry", ["normed_group_hom"]], ["del", "theorem", "lipschitz_of_bound_by", ["normed_group_hom"]], ["del", "theorem", "mk_normed_group_hom'_bound_by", ["normed_group_hom"]], ["del", "theorem", "bound_by_one", ["normed_group_hom", "norm_noninc"]], ["add", "theorem", "norm_noninc_iff_norm_le_one", ["normed_group_hom", "norm_noninc"]]]}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": []}]}, {"timestamp": 1623341019, "sha": "0f8e79ea", "message": "feat(algebra/big_operators/finsupp): relax assumptions `semiring` to `non_unital_non_assoc_semiring` (#7874)", "changes": [{"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": []}]}, {"timestamp": 1623341018, "sha": "3b5a44b8", "message": "chore(src/testing/slim_check/sampleable): simply add explicit namespace `nat.` (#7873)\nThis PR only introduces the explicit namespace `nat.` when calling `le_div_iff_mul_le`. The reason for doing this is that PR #7645 introduces a lemma `le_div_iff_mul_le` in the root namespace and this one then becomes ambiguous. Note that CI *does build* on this branch even without the explicit namespace. The change would only become necessary once/if PR #7645 gets merged.\nI isolated this change to a separate PR to reduce the diff of #7645 and also to bring attention to this issue, in case someone has some comment about it.", "changes": [{"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}]}, {"timestamp": 1623341017, "sha": "2e8ef55f", "message": "feat(algebra/floor): nat_floor (#7855)\nintroduce `nat_floor`\nRelated Zulip discussion: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/nat_floor", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "le_nat_floor_iff", []], ["add", "theorem", "le_nat_floor_of_le", []], ["mod", "theorem", "lt_nat_ceil", []], ["add", "theorem", "lt_nat_floor_add_one", []], ["add", "theorem", "lt_of_lt_nat_floor", []], ["mod", "def", "nat_ceil", []], ["mod", "theorem", "nat_ceil_le", []], ["add", "def", "nat_floor", []], ["add", "theorem", "nat_floor_add_nat", []], ["add", "theorem", "nat_floor_coe", []], ["add", "theorem", "nat_floor_eq_zero_iff", []], ["add", "theorem", "nat_floor_le", []], ["add", "theorem", "nat_floor_lt_iff", []], ["add", "theorem", "nat_floor_mono", []], ["add", "theorem", "nat_floor_of_nonpos", []], ["add", "theorem", "nat_floor_zero", []], ["add", "theorem", "pos_of_nat_floor_pos", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "to_nat_add_nat", ["int"]], ["del", "theorem", "to_nat_add_one", ["int"]], ["add", "theorem", "to_nat_of_nonpos", ["int"]], ["del", "theorem", "to_nat_zero_of_neg", ["int"]]]}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1623341016, "sha": "021c8590", "message": "feat(analysis/special_functions/pow): rpow-log inequalities (#7848)\nInequalities relating rpow and log", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "le_rpow_iff_log_le", ["real"]], ["add", "theorem", "le_rpow_of_log_le", ["real"]], ["add", "theorem", "lt_rpow_iff_log_lt", ["real"]], ["add", "theorem", "lt_rpow_of_log_lt", ["real"]]]}]}, {"timestamp": 1623341015, "sha": "49f5a159", "message": "feat(algebra/ordered_ring): more granular typeclasses for `with_top α` and `with_bot α` (#7845)\n`with_top α` and `with_bot α` now inherit the following typeclasses from `α` with suitable assumptions:\n* `mul_zero_one_class`\n* `semigroup_with_zero`\n* `monoid_with_zero`\n* `comm_monoid_with_zero`\nThese were all split out of the existing `canonically_ordered_comm_semiring`, with their proofs unchanged.\nThe same instances are added for `with_bot`.\nIt is not possible to split further, as `distrib'` requires `add_eq_zero_iff`, and `canonically_ordered_comm_semiring` is the smallest typeclass that provides both this lemma and `mul_zero_class`.\nWith these instances in place, we can now show `comm_monoid_with_zero ereal`.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "bot_lt_mul", ["with_bot"]], ["add", "theorem", "bot_mul", ["with_bot"]], ["add", "theorem", "bot_mul_bot", ["with_bot"]], ["add", "theorem", "coe_mul", ["with_bot"]], ["add", "theorem", "mul_bot", ["with_bot"]], ["add", "theorem", "mul_coe", ["with_bot"]], ["add", "theorem", "mul_def", ["with_bot"]], ["add", "theorem", "mul_eq_bot_iff", ["with_bot"]], ["mod", "theorem", "mul_lt_top", ["with_top"]]]}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["del", "theorem", "ad_eq_top_iff", ["ereal"]], ["add", "theorem", "add_eq_top_iff", ["ereal"]], ["add", "theorem", "bot_mul_bot", ["ereal"]], ["add", "theorem", "bot_mul_coe", ["ereal"]], ["add", "theorem", "bot_sub_coe", ["ereal"]], ["add", "theorem", "bot_sub_top", ["ereal"]], ["add", "theorem", "coe_mul", ["ereal"]], ["add", "theorem", "coe_mul_bot", ["ereal"]], ["add", "theorem", "coe_one", ["ereal"]], ["add", "theorem", "coe_sub_bot", ["ereal"]], ["add", "theorem", "mul_top", ["ereal"]], ["add", "theorem", "sub_bot", ["ereal"]], ["add", "theorem", "to_real_mul", ["ereal"]], ["add", "theorem", "to_real_one", ["ereal"]], ["add", "theorem", "top_mul", ["ereal"]], ["add", "theorem", "top_sub", ["ereal"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1623369440, "sha": "079b8a11", "message": "Revert \"feat(set_theory/cofinality): more infinite pigeonhole principles\"\nThis reverts commit c7ba50f41813718472478983370db66b06c2d33e.", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["del", "theorem", "infinite_pigeonhole''", ["cardinal"]], ["del", "theorem", "infinite_pigeonhole'", ["cardinal"]], ["del", "theorem", "le_range_of_union_finset_eq_top", ["cardinal"]]]}]}, {"timestamp": 1623369373, "sha": "c7ba50f4", "message": "feat(set_theory/cofinality): more infinite pigeonhole principles", "changes": [{"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "infinite_pigeonhole''", ["cardinal"]], ["add", "theorem", "infinite_pigeonhole'", ["cardinal"]], ["add", "theorem", "le_range_of_union_finset_eq_top", ["cardinal"]]]}]}, {"timestamp": 1623308162, "sha": "f7e93d9e", "message": "chore(algebra/linear_ordered_comm_group_with_zero.lean): extend calc proofs (#7870)\nThese are mostly cosmetic changes, simplifying a couple of calc proofs.\nThe main motivation is to reduce the diff in the bigger PR #7645.", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}]}, {"timestamp": 1623308161, "sha": "05b7b0b0", "message": "chore(scripts): update nolints.txt (#7867)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623308160, "sha": "4da899c0", "message": "chore(number_theory/{fermat4, sum_four_squares, zsqrtd/basic}): simplify/rearrange proofs (#7866)\nThese are mostly cosmetic changes, simplifying a couple of proofs. I would have tagged it `easy`, but since there are three files changed, it may take just over 20'' to review!\nThe main motivation is to reduce the diff in the bigger PR #7645.", "changes": [{"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/number_theory/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}]}, {"timestamp": 1623289889, "sha": "2fc66c92", "message": "feat(algebra/group_with_zero): add units.can_lift (#7857)\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/projective.20space/near/242041169)", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}]}, {"timestamp": 1623289888, "sha": "0a348784", "message": "chore(topology/algebra/continuous_functions): making names consistent with the smooth library (#7844)", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["add", "theorem", "coe_smul", ["continuous_functions"]], ["del", "theorem", "smul_coe", ["continuous_functions"]], ["add", "theorem", "coe_div", ["continuous_map"]], ["add", "theorem", "coe_inv", ["continuous_map"]], ["add", "theorem", "coe_mul", ["continuous_map"]], ["add", "theorem", "coe_one", ["continuous_map"]], ["add", "theorem", "coe_pow", ["continuous_map"]], ["add", "theorem", "coe_smul", ["continuous_map"]], ["del", "theorem", "div_coe", ["continuous_map"]], ["del", "theorem", "inv_coe", ["continuous_map"]], ["del", "theorem", "mul_coe", ["continuous_map"]], ["del", "theorem", "one_coe", ["continuous_map"]], ["del", "theorem", "pow_coe", ["continuous_map"]], ["del", "theorem", "smul_coe", ["continuous_map"]]]}]}, {"timestamp": 1623289886, "sha": "06200c84", "message": "feat(ring_theory/ideal): generalize to noncommutative rings (#7654)\nThis is a minimalist generalization of existing material on ideals to the setting of noncommutative rings.\nI have not attempted to decide how things should be named in the long run. For now `ideal` specifically means a left-ideal (i.e. I didn't change the definition). We can either in future add `two_sided_ideal` (or `biideal` or `ideal₂` or ...), or potentially rename `ideal` to `left_ideal` or `lideal`, etc. Future bikeshedding opportunities!\nIn this PR I've just left definitions alone, and relaxed `comm_ring` hypotheses to `ring` as far as I could see possible. No new theorems or mathematics, just rearranging to get things in the right order.\n(As a side note, both `ring_theory.ideal.basic` and `ring_theory.ideal.operations` should be split into smaller files; I can try this after this PR.)", "changes": [{"oldPath": "src/algebra/category/Module/projective.lean", "newPath": "src/algebra/category/Module/projective.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "exists_left_inv", ["is_unit"]], ["add", "theorem", "exists_right_inv", ["is_unit"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "coe_subset_nonunits", []], ["mod", "def", "ideal", []], ["mod", "theorem", "mem_nonunits_iff", []]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "comap_comap", ["ideal"]], ["mod", "theorem", "map_map", ["ideal"]], ["mod", "theorem", "ker_is_prime", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideal/prod.lean", "newPath": "src/ring_theory/ideal/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1623271370, "sha": "3870896a", "message": "doc(data/semiquot): reformat module doc properly, and add missing doc strings (#7773)", "changes": [{"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": [["mod", "def", "is_pure", ["semiquot"]]]}]}, {"timestamp": 1623271368, "sha": "abe25e96", "message": "docs(data/mllist): fix module doc, and add all doc strings (#7772)", "changes": [{"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}]}, {"timestamp": 1623271367, "sha": "d9b91f3b", "message": "feat(measure_theory/tactic): add measurability tactic (#7756)\nAdd a measurability tactic defined in the file `measure_theory/tactic.lean`, which is heavily inspired from the continuity tactic. It proves goals of the form `measurable f`, `ae_measurable f µ` and `measurable_set s`. Some tests are provided in `tests/measurability.lean` and the tactic was used to replace a few lines in `integration.lean` and `mean_inequalities.lean`.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/arithmetic.lean", "newPath": "src/measure_theory/arithmetic.lean", "changes": [["add", "theorem", "div'", ["ae_measurable"]], ["mod", "theorem", "inv", ["ae_measurable"]], ["add", "theorem", "mul'", ["ae_measurable"]], ["add", "theorem", "div'", ["measurable"]], ["mod", "theorem", "inv", ["measurable"]], ["add", "theorem", "mul'", ["measurable"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "measurable_set_Icc", []], ["mod", "theorem", "measurable_set_Ici", []], ["mod", "theorem", "measurable_set_Ico", []], ["mod", "theorem", "measurable_set_Iic", []], ["mod", "theorem", "measurable_set_Iio", []], ["mod", "theorem", "measurable_set_Ioc", []], ["mod", "theorem", "measurable_set_Ioi", []], ["mod", "theorem", "measurable_set_Ioo", []]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "measurable_set_bInter", ["finset"]], ["del", "theorem", "measurable_set_bUnion", ["finset"]], ["del", "theorem", "comp", ["measurable"]], ["mod", "theorem", "fst", ["measurable"]], ["mod", "theorem", "iterate", ["measurable"]], ["mod", "theorem", "prod", ["measurable"]], ["mod", "theorem", "snd", ["measurable"]], ["mod", "theorem", "subtype_coe", ["measurable"]], ["del", "def", "measurable", []], ["del", "theorem", "measurable_const", []], ["mod", "theorem", "measurable_from_nat", []], ["mod", "theorem", "measurable_fst", []], ["del", "theorem", "measurable_id", []], ["mod", "theorem", "measurable_inl", []], ["mod", "theorem", "measurable_inr", []], ["del", "theorem", "Inter", ["measurable_set"]], ["del", "theorem", "Inter_Prop", ["measurable_set"]], ["del", "theorem", "Inter_fintype", ["measurable_set"]], ["del", "theorem", "Union", ["measurable_set"]], ["del", "theorem", "Union_Prop", ["measurable_set"]], ["del", "theorem", "Union_fintype", ["measurable_set"]], ["del", "theorem", "bInter", ["measurable_set"]], ["del", "theorem", "bUnion", ["measurable_set"]], ["del", "theorem", "bUnion_decode₂", ["measurable_set"]], ["del", "theorem", "compl", ["measurable_set"]], ["del", "theorem", "compl_iff", ["measurable_set"]], ["del", "theorem", "congr", ["measurable_set"]], ["del", "theorem", "const", ["measurable_set"]], ["del", "theorem", "diff", ["measurable_set"]], ["del", "theorem", "disjointed", ["measurable_set"]], ["del", "theorem", "empty", ["measurable_set"]], ["del", "theorem", "insert", ["measurable_set"]], ["del", "theorem", "inter", ["measurable_set"]], ["del", "theorem", "ite", ["measurable_set"]], ["del", "theorem", "of_compl", ["measurable_set"]], ["del", "theorem", "sInter", ["measurable_set"]], ["del", "theorem", "sUnion", ["measurable_set"]], ["del", "theorem", "union", ["measurable_set"]], ["del", "theorem", "univ", ["measurable_set"]], ["del", "def", "measurable_set", []], ["del", "theorem", "measurable_set_eq", []], ["del", "theorem", "measurable_set_insert", []], ["mod", "theorem", "measurable_set_mul_support", []], ["add", "theorem", "measurable_set_preimage", []], ["mod", "theorem", "measurable_snd", []], ["del", "theorem", "ext", ["measurable_space"]], ["del", "theorem", "ext_iff", ["measurable_space"]], ["del", "def", "generate_from", ["measurable_space"]], ["del", "theorem", "generate_from_le", ["measurable_space"]], ["del", "theorem", "generate_from_le_iff", ["measurable_space"]], ["del", "theorem", "generate_from_measurable_set", ["measurable_space"]], ["del", "inductive", "generate_measurable", ["measurable_space"]], ["del", "def", "gi_generate_from", ["measurable_space"]], ["del", "theorem", "measurable_set_Inf", ["measurable_space"]], ["del", "theorem", "measurable_set_Sup", ["measurable_space"]], ["del", "theorem", "measurable_set_bot_iff", ["measurable_space"]], ["del", "theorem", "measurable_set_generate_from", ["measurable_space"]], ["del", "theorem", "measurable_set_inf", ["measurable_space"]], ["del", "theorem", "measurable_set_infi", ["measurable_space"]], ["del", "theorem", "measurable_set_sup", ["measurable_space"]], ["del", "theorem", "measurable_set_supr", ["measurable_space"]], ["del", "theorem", "measurable_set_top", ["measurable_space"]], ["del", "theorem", "mk_of_closure_sets", ["measurable_space"]], ["del", "structure", "measurable_space", []], ["mod", "theorem", "measurable_subtype_coe", []], ["mod", "theorem", "measurable_swap", []], ["mod", "theorem", "measurable_unit", []], ["del", "theorem", "nonempty_measurable_superset", []], ["del", "theorem", "measurable_set", ["set", "countable"]], ["del", "theorem", "measurable_set", ["set", "finite"]], ["del", "theorem", "measurable_set_bInter", ["set", "finite"]], ["del", "theorem", "measurable_set_bUnion", ["set", "finite"]], ["del", "theorem", "measurable_set_sInter", ["set", "finite"]], ["del", "theorem", "measurable_set_sUnion", ["set", "finite"]], ["mod", "theorem", "measurable", ["subsingleton"]], ["del", "theorem", "measurable_set", ["subsingleton"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measurable_space_def.lean", "changes": [["add", "theorem", "measurable_set_bInter", ["finset"]], ["add", "theorem", "measurable_set_bUnion", ["finset"]], ["add", "theorem", "comp", ["measurable"]], ["add", "def", "measurable", []], ["add", "theorem", "measurable_const", []], ["add", "theorem", "measurable_id'", []], ["add", "theorem", "measurable_id", []], ["add", "theorem", "Inter", ["measurable_set"]], ["add", "theorem", "Inter_Prop", ["measurable_set"]], ["add", "theorem", "Inter_fintype", ["measurable_set"]], ["add", "theorem", "Union", ["measurable_set"]], ["add", "theorem", "Union_Prop", ["measurable_set"]], ["add", "theorem", "Union_fintype", ["measurable_set"]], ["add", "theorem", "bInter", ["measurable_set"]], ["add", "theorem", "bUnion", ["measurable_set"]], ["add", "theorem", "bUnion_decode₂", ["measurable_set"]], ["add", "theorem", "compl", ["measurable_set"]], ["add", "theorem", "compl_iff", ["measurable_set"]], ["add", "theorem", "congr", ["measurable_set"]], ["add", "theorem", "const", ["measurable_set"]], ["add", "theorem", "diff", ["measurable_set"]], ["add", "theorem", "disjointed", ["measurable_set"]], ["add", "theorem", "empty", ["measurable_set"]], ["add", "theorem", "insert", ["measurable_set"]], ["add", "theorem", "inter", ["measurable_set"]], ["add", "theorem", "ite", ["measurable_set"]], ["add", "theorem", "of_compl", ["measurable_set"]], ["add", "theorem", "sInter", ["measurable_set"]], ["add", "theorem", "sUnion", ["measurable_set"]], ["add", "theorem", "union", ["measurable_set"]], ["add", "theorem", "univ", ["measurable_set"]], ["add", "def", "measurable_set", []], ["add", "theorem", "measurable_set_eq", []], ["add", "theorem", "measurable_set_insert", []], ["add", "theorem", "ext", ["measurable_space"]], ["add", "theorem", "ext_iff", ["measurable_space"]], ["add", "def", "generate_from", ["measurable_space"]], ["add", "theorem", "generate_from_le", ["measurable_space"]], ["add", "theorem", "generate_from_le_iff", ["measurable_space"]], ["add", "theorem", "generate_from_measurable_set", ["measurable_space"]], ["add", "inductive", "generate_measurable", ["measurable_space"]], ["add", "def", "gi_generate_from", ["measurable_space"]], ["add", "theorem", "measurable_set_Inf", ["measurable_space"]], ["add", "theorem", "measurable_set_Sup", ["measurable_space"]], ["add", "theorem", "measurable_set_bot_iff", ["measurable_space"]], ["add", "theorem", "measurable_set_generate_from", ["measurable_space"]], ["add", "theorem", "measurable_set_inf", ["measurable_space"]], ["add", "theorem", "measurable_set_infi", ["measurable_space"]], ["add", "theorem", "measurable_set_sup", ["measurable_space"]], ["add", "theorem", "measurable_set_supr", ["measurable_space"]], ["add", "theorem", "measurable_set_top", ["measurable_space"]], ["add", "theorem", "mk_of_closure_sets", ["measurable_space"]], ["add", "structure", "measurable_space", []], ["add", "theorem", "nonempty_measurable_superset", []], ["add", "theorem", "measurable_set", ["set", "countable"]], ["add", "theorem", "measurable_set", ["set", "finite"]], ["add", "theorem", "measurable_set_bInter", ["set", "finite"]], ["add", "theorem", "measurable_set_bUnion", ["set", "finite"]], ["add", "theorem", "measurable_set_sInter", ["set", "finite"]], ["add", "theorem", "measurable_set_sUnion", ["set", "finite"]], ["add", "theorem", "measurable_set", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "theorem", "ae_eq_mk", ["ae_measurable"]], ["del", "theorem", "congr", ["ae_measurable"]], ["del", "theorem", "measurable_mk", ["ae_measurable"]], ["del", "def", "mk", ["ae_measurable"]], ["del", "def", "ae_measurable", []], ["del", "theorem", "ae_measurable_congr", []], ["del", "theorem", "ae_measurable_const", []], ["mod", "theorem", "ae_measurable_zero_measure", []], ["del", "theorem", "ae_measurable", ["measurable"]], ["del", "theorem", "comp_ae_measurable", ["measurable"]], ["del", "theorem", "ae_all_iff", ["measure_theory"]], ["del", "theorem", "ae_ball_iff", ["measure_theory"]], ["del", "theorem", "ae_eq_empty", ["measure_theory"]], ["del", "theorem", "ae_eq_refl", ["measure_theory"]], ["del", "theorem", "ae_eq_set", ["measure_theory"]], ["del", "theorem", "ae_eq_symm", ["measure_theory"]], ["del", "theorem", "ae_eq_trans", ["measure_theory"]], ["del", "theorem", "ae_iff", ["measure_theory"]], ["del", "theorem", "ae_imp_iff", ["measure_theory"]], ["del", "theorem", "ae_le_set", ["measure_theory"]], ["del", "theorem", "ae_of_all", ["measure_theory"]], ["del", "theorem", "coe_to_outer_measure", ["measure_theory"]], ["del", "theorem", "compl_mem_ae_iff", ["measure_theory"]], ["del", "theorem", "diff_ae_eq_self", ["measure_theory"]], ["del", "theorem", "exists_measurable_superset", ["measure_theory"]], ["del", "theorem", "exists_measurable_superset_forall_eq", ["measure_theory"]], ["del", "theorem", "exists_measurable_superset_iff_measure_eq_zero", ["measure_theory"]], ["del", "theorem", "exists_measurable_superset_of_null", ["measure_theory"]], ["del", "theorem", "frequently_ae_iff", ["measure_theory"]], ["del", "theorem", "frequently_ae_mem_iff", ["measure_theory"]], ["del", "theorem", "measurable_set_to_measurable", ["measure_theory"]], ["del", "def", "ae", ["measure_theory", "measure"]], ["del", "theorem", "ext", ["measure_theory", "measure"]], ["del", "theorem", "ext_iff", ["measure_theory", "measure"]], ["del", "def", "of_measurable", ["measure_theory", "measure"]], ["del", "theorem", "of_measurable_apply", ["measure_theory", "measure"]], ["del", "theorem", "to_outer_measure_injective", ["measure_theory", "measure"]], ["del", "structure", "measure", ["measure_theory"]], ["del", "theorem", "measure_Union_le", ["measure_theory"]], ["del", "theorem", "measure_Union_null", ["measure_theory"]], ["del", "theorem", "measure_Union_null_iff", ["measure_theory"]], ["del", "theorem", "measure_bUnion_finset_le", ["measure_theory"]], ["del", "theorem", "measure_bUnion_le", ["measure_theory"]], ["del", "theorem", "measure_bUnion_lt_top", ["measure_theory"]], ["del", "theorem", "measure_bUnion_null_iff", ["measure_theory"]], ["del", "theorem", "measure_congr", ["measure_theory"]], ["del", "theorem", "measure_empty", ["measure_theory"]], ["del", "theorem", "measure_eq_extend", ["measure_theory"]], ["del", "theorem", "measure_eq_induced_outer_measure", ["measure_theory"]], ["del", "theorem", "measure_eq_infi'", ["measure_theory"]], ["del", "theorem", "measure_eq_infi", ["measure_theory"]], ["del", "theorem", "measure_eq_trim", ["measure_theory"]], ["del", "theorem", "measure_mono", ["measure_theory"]], ["del", "theorem", "measure_mono_ae", ["measure_theory"]], ["del", "theorem", "measure_mono_null", ["measure_theory"]], ["del", "theorem", "measure_mono_top", ["measure_theory"]], ["del", "theorem", "measure_to_measurable", ["measure_theory"]], ["del", "theorem", "measure_union_le", ["measure_theory"]], ["del", "theorem", "measure_union_null", ["measure_theory"]], ["del", "theorem", "measure_union_null_iff", ["measure_theory"]], ["del", "theorem", "measure_zero_iff_ae_nmem", ["measure_theory"]], ["del", "theorem", "mem_ae_iff", ["measure_theory"]], ["del", "theorem", "nonempty_of_measure_ne_zero", ["measure_theory"]], ["del", "theorem", "subset_to_measurable", ["measure_theory"]], ["del", "def", "to_measurable", ["measure_theory"]], ["del", "theorem", "to_outer_measure_apply", ["measure_theory"]], ["del", "theorem", "to_outer_measure_eq_induced_outer_measure", ["measure_theory"]], ["del", "theorem", "union_ae_eq_right", ["measure_theory"]], ["mod", "theorem", "ae_measurable", ["subsingleton"]]]}, {"oldPath": null, "newPath": "src/measure_theory/measure_space_def.lean", "changes": [["add", "theorem", "ae_eq_mk", ["ae_measurable"]], ["add", "theorem", "congr", ["ae_measurable"]], ["add", "theorem", "measurable_mk", ["ae_measurable"]], ["add", "def", "mk", ["ae_measurable"]], ["add", "def", "ae_measurable", []], ["add", "theorem", "ae_measurable_congr", []], ["add", "theorem", "ae_measurable_const", []], ["add", "theorem", "ae_measurable_id'", []], ["add", "theorem", "ae_measurable_id", []], ["add", "theorem", "ae_measurable", ["measurable"]], ["add", "theorem", "comp_ae_measurable", ["measurable"]], ["add", "theorem", "ae_all_iff", ["measure_theory"]], ["add", "theorem", "ae_ball_iff", ["measure_theory"]], ["add", "theorem", "ae_eq_empty", ["measure_theory"]], ["add", "theorem", "ae_eq_refl", ["measure_theory"]], ["add", "theorem", "ae_eq_set", ["measure_theory"]], ["add", "theorem", "ae_eq_symm", ["measure_theory"]], ["add", "theorem", "ae_eq_trans", ["measure_theory"]], ["add", "theorem", "ae_iff", ["measure_theory"]], ["add", "theorem", "ae_imp_iff", ["measure_theory"]], ["add", "theorem", "ae_le_set", ["measure_theory"]], ["add", "theorem", "ae_of_all", ["measure_theory"]], ["add", "theorem", "coe_to_outer_measure", ["measure_theory"]], ["add", "theorem", "compl_mem_ae_iff", ["measure_theory"]], ["add", "theorem", "diff_ae_eq_self", ["measure_theory"]], ["add", "theorem", "exists_measurable_superset", ["measure_theory"]], ["add", "theorem", "exists_measurable_superset_forall_eq", ["measure_theory"]], ["add", "theorem", "exists_measurable_superset_iff_measure_eq_zero", ["measure_theory"]], ["add", "theorem", "exists_measurable_superset_of_null", ["measure_theory"]], ["add", "theorem", "frequently_ae_iff", ["measure_theory"]], ["add", "theorem", "frequently_ae_mem_iff", ["measure_theory"]], ["add", "theorem", "measurable_set_to_measurable", ["measure_theory"]], ["add", "def", "ae", ["measure_theory", "measure"]], ["add", "theorem", "ext", ["measure_theory", "measure"]], ["add", "theorem", "ext_iff", ["measure_theory", "measure"]], ["add", "def", "of_measurable", ["measure_theory", "measure"]], ["add", "theorem", "of_measurable_apply", ["measure_theory", "measure"]], ["add", "theorem", "to_outer_measure_injective", ["measure_theory", "measure"]], ["add", "structure", "measure", ["measure_theory"]], ["add", "theorem", "measure_Union_le", ["measure_theory"]], ["add", "theorem", "measure_Union_null", ["measure_theory"]], ["add", "theorem", "measure_Union_null_iff", ["measure_theory"]], ["add", "theorem", "measure_bUnion_finset_le", ["measure_theory"]], ["add", "theorem", "measure_bUnion_le", ["measure_theory"]], ["add", "theorem", "measure_bUnion_lt_top", ["measure_theory"]], ["add", "theorem", "measure_bUnion_null_iff", ["measure_theory"]], ["add", "theorem", "measure_congr", ["measure_theory"]], ["add", "theorem", "measure_empty", ["measure_theory"]], ["add", "theorem", "measure_eq_extend", ["measure_theory"]], ["add", "theorem", "measure_eq_induced_outer_measure", ["measure_theory"]], ["add", "theorem", "measure_eq_infi'", ["measure_theory"]], ["add", "theorem", "measure_eq_infi", ["measure_theory"]], ["add", "theorem", "measure_eq_trim", ["measure_theory"]], ["add", "theorem", "measure_mono", ["measure_theory"]], ["add", "theorem", "measure_mono_ae", ["measure_theory"]], ["add", "theorem", "measure_mono_null", ["measure_theory"]], ["add", "theorem", "measure_mono_top", ["measure_theory"]], ["add", "theorem", "measure_to_measurable", ["measure_theory"]], ["add", "theorem", "measure_union_le", ["measure_theory"]], ["add", "theorem", "measure_union_null", ["measure_theory"]], ["add", "theorem", "measure_union_null_iff", ["measure_theory"]], ["add", "theorem", "measure_zero_iff_ae_nmem", ["measure_theory"]], ["add", "theorem", "mem_ae_iff", ["measure_theory"]], ["add", "theorem", "nonempty_of_measure_ne_zero", ["measure_theory"]], ["add", "theorem", "subset_to_measurable", ["measure_theory"]], ["add", "def", "to_measurable", ["measure_theory"]], ["add", "theorem", "to_outer_measure_apply", ["measure_theory"]], ["add", "theorem", "to_outer_measure_eq_induced_outer_measure", ["measure_theory"]], ["add", "theorem", "union_ae_eq_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/tactic.lean", "changes": []}, {"oldPath": null, "newPath": "test/measurability.lean", "changes": []}]}, {"timestamp": 1623253205, "sha": "8e25717f", "message": "chore(geometry/euclidean/circumcenter): remove two `have`s in a proof (#7852)\nZulip:\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/circumcenter", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}]}, {"timestamp": 1623253204, "sha": "d0ed2a42", "message": "chore(measure_theory/set_integral): put the definition of integrable_on into a new file (#7842)\nThe file `measure_theory.set_integral` is split into two: the `integrable_on` predicate is put into its own file, which does not import `measure_theory.bochner_integration` (this puts the definition of that integrability property before the definition of the actual integral). The file `measure_theory.set_integral` retains all facts about `set_integral`.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/integrable_on.lean", "changes": [["add", "theorem", "measurable_at_filter_of_mem", ["ae_measurable"]], ["add", "theorem", "integrable_of_compact_closure_support", ["continuous"]], ["add", "theorem", "integrable_on_compact", ["continuous"]], ["add", "theorem", "integrable_comp", ["continuous_linear_map"]], ["add", "theorem", "ae_measurable", ["continuous_on"]], ["add", "theorem", "integrable_at_nhds_within", ["continuous_on"]], ["add", "theorem", "integrable_on_compact", ["continuous_on"]], ["add", "theorem", "indicator_ae_eq_restrict", []], ["add", "theorem", "indicator_ae_eq_restrict_compl", []], ["add", "theorem", "integrable_on_of_nhds_within", ["is_compact"]], ["add", "theorem", "measurable_at_bot", []], ["add", "def", "measurable_at_filter", []], ["add", "theorem", "ae_measurable_indicator_iff", ["measure_theory"]], ["add", "theorem", "has_finite_integral_restrict_of_bounded", ["measure_theory"]], ["add", "theorem", "indicator", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_on'", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_on", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_add", ["measure_theory"]], ["add", "theorem", "filter_mono", ["measure_theory", "integrable_at_filter"]], ["add", "theorem", "inf_ae_iff", ["measure_theory", "integrable_at_filter"]], ["add", "theorem", "inf_of_left", ["measure_theory", "integrable_at_filter"]], ["add", "theorem", "inf_of_right", ["measure_theory", "integrable_at_filter"]], ["add", "def", "integrable_at_filter", ["measure_theory"]], ["add", "theorem", "integrable_indicator_iff", ["measure_theory"]], ["add", "theorem", "add_measure", ["measure_theory", "integrable_on"]], ["add", "theorem", "indicator", ["measure_theory", "integrable_on"]], ["add", "theorem", "integrable", ["measure_theory", "integrable_on"]], ["add", "theorem", "left_of_union", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono_measure", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono_set", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono_set_ae", ["measure_theory", "integrable_on"]], ["add", "theorem", "restrict", ["measure_theory", "integrable_on"]], ["add", "theorem", "right_of_union", ["measure_theory", "integrable_on"]], ["add", "theorem", "union", ["measure_theory", "integrable_on"]], ["add", "def", "integrable_on", ["measure_theory"]], ["add", "theorem", "integrable_on_add_measure", ["measure_theory"]], ["add", "theorem", "integrable_on_const", ["measure_theory"]], ["add", "theorem", "integrable_on_empty", ["measure_theory"]], ["add", "theorem", "integrable_on_finite_union", ["measure_theory"]], ["add", "theorem", "integrable_on_finset_union", ["measure_theory"]], ["add", "theorem", "integrable_on_union", ["measure_theory"]], ["add", "theorem", "integrable_on_univ", ["measure_theory"]], ["add", "theorem", "integrable_on_zero", ["measure_theory"]], ["add", "theorem", "integrable_at_filter", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "integrable_at_filter_of_tendsto", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "integrable_at_filter_of_tendsto_ae", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "piecewise_ae_eq_restrict", []], ["add", "theorem", "piecewise_ae_eq_restrict_compl", []]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["del", "theorem", "measurable_at_filter_of_mem", ["ae_measurable"]], ["del", "theorem", "integrable_of_compact_closure_support", ["continuous"]], ["del", "theorem", "integrable_on_compact", ["continuous"]], ["del", "theorem", "integrable_comp", ["continuous_linear_map"]], ["del", "theorem", "ae_measurable", ["continuous_on"]], ["del", "theorem", "integrable_at_nhds_within", ["continuous_on"]], ["del", "theorem", "integrable_on_compact", ["continuous_on"]], ["del", "theorem", "indicator_ae_eq_restrict", []], ["del", "theorem", "indicator_ae_eq_restrict_compl", []], ["del", "theorem", "integrable_on_of_nhds_within", ["is_compact"]], ["del", "theorem", "measurable_at_bot", []], ["del", "def", "measurable_at_filter", []], ["del", "theorem", "ae_measurable_indicator_iff", ["measure_theory"]], ["del", "theorem", "has_finite_integral_restrict_of_bounded", ["measure_theory"]], ["del", "theorem", "indicator", ["measure_theory", "integrable"]], ["del", "theorem", "integrable_on'", ["measure_theory", "integrable"]], ["del", "theorem", "integrable_on", ["measure_theory", "integrable"]], ["del", "theorem", "integrable_add", ["measure_theory"]], ["del", "theorem", "filter_mono", ["measure_theory", "integrable_at_filter"]], ["del", "theorem", "inf_ae_iff", ["measure_theory", "integrable_at_filter"]], ["del", "theorem", "inf_of_left", ["measure_theory", "integrable_at_filter"]], ["del", "theorem", "inf_of_right", ["measure_theory", "integrable_at_filter"]], ["del", "def", "integrable_at_filter", ["measure_theory"]], ["del", "theorem", "integrable_indicator_iff", ["measure_theory"]], ["del", "theorem", "add_measure", ["measure_theory", "integrable_on"]], ["del", "theorem", "indicator", ["measure_theory", "integrable_on"]], ["del", "theorem", "integrable", ["measure_theory", "integrable_on"]], ["del", "theorem", "left_of_union", ["measure_theory", "integrable_on"]], ["del", "theorem", "mono", ["measure_theory", "integrable_on"]], ["del", "theorem", "mono_measure", ["measure_theory", "integrable_on"]], ["del", "theorem", "mono_set", ["measure_theory", "integrable_on"]], ["del", "theorem", "mono_set_ae", ["measure_theory", "integrable_on"]], ["del", "theorem", "restrict", ["measure_theory", "integrable_on"]], ["del", "theorem", "right_of_union", ["measure_theory", "integrable_on"]], ["del", "theorem", "union", ["measure_theory", "integrable_on"]], ["del", "def", "integrable_on", ["measure_theory"]], ["del", "theorem", "integrable_on_add_measure", ["measure_theory"]], ["del", "theorem", "integrable_on_const", ["measure_theory"]], ["del", "theorem", "integrable_on_empty", ["measure_theory"]], ["del", "theorem", "integrable_on_finite_union", ["measure_theory"]], ["del", "theorem", "integrable_on_finset_union", ["measure_theory"]], ["del", "theorem", "integrable_on_union", ["measure_theory"]], ["del", "theorem", "integrable_on_univ", ["measure_theory"]], ["del", "theorem", "integrable_on_zero", ["measure_theory"]], ["del", "theorem", "integrable_at_filter", ["measure_theory", "measure", "finite_at_filter"]], ["del", "theorem", "integrable_at_filter_of_tendsto", ["measure_theory", "measure", "finite_at_filter"]], ["del", "theorem", "integrable_at_filter_of_tendsto_ae", ["measure_theory", "measure", "finite_at_filter"]], ["del", "theorem", "piecewise_ae_eq_restrict", []], ["del", "theorem", "piecewise_ae_eq_restrict_compl", []]]}]}, {"timestamp": 1623253202, "sha": "764e878e", "message": "feat(algebra/ordered_group): `-abs a ≤ a` (#7839)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "neg_abs_le_self", []]]}]}, {"timestamp": 1623253201, "sha": "a9d4f3d4", "message": "fix(*): make some non-instances reducible (#7835)\n* Definitions that involve in instances might need to be reducible, see added library note. \n* This involves the definitions `*order.lift` / `function.injective.*` and `function.surjective.*` \n* This came up in #7645.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/hierarchy_design.lean", "newPath": "src/algebra/hierarchy_design.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/algebra/smul_with_zero.lean", "newPath": "src/algebra/smul_with_zero.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "def", "lift", ["linear_order"]], ["mod", "def", "lift", ["partial_order"]], ["mod", "def", "lift", ["preorder"]]]}]}, {"timestamp": 1623253200, "sha": "20efef78", "message": "chore(algebra/field_power, data/set/intervals/basic): simpler proofs in the first file, fewer parentheses in the second one (#7831)\nThis is mostly a cosmetic PR: I removed two calls to `linarith`, where a term-mode proof was very simple.\nI also removed some unnecessary parentheses in a different file.", "changes": [{"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "cos_one_pos", ["real"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}]}, {"timestamp": 1623253199, "sha": "02d5370a", "message": "chore(measure_theory/outer_measure): add extend_eq_top (#7827)", "changes": [{"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "extend_eq_top", ["measure_theory"]]]}]}, {"timestamp": 1623253198, "sha": "fa7c6da2", "message": "docs(order/bounded_lattice): add module docstring (#7799)\nadd module docstring and some sectioning", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1623233567, "sha": "55abf1a4", "message": "chore(scripts): update nolints.txt (#7851)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623233566, "sha": "86766851", "message": "feat(ring_theory): every left-noetherian ring satisfies the strong rank condition (#7711)\nThis PR also discards the proof that every left-noetherian ring satisfies the rank condition, because we already have in #7683 that this implies that.", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule_lattice.lean", "newPath": "src/algebra/module/submodule_lattice.lean", "changes": [["add", "def", "bot_equiv_punit", ["submodule"]], ["add", "def", "top_equiv_self", ["submodule"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "sum_arrow_equiv_prod_arrow_apply_fst", ["equiv"]], ["add", "theorem", "sum_arrow_equiv_prod_arrow_apply_snd", ["equiv"]], ["add", "theorem", "sum_arrow_equiv_prod_arrow_symm_apply_inl", ["equiv"]], ["add", "theorem", "sum_arrow_equiv_prod_arrow_symm_apply_inr", ["equiv"]]]}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["add", "theorem", "pairwise_disjoint_on_nat", []], ["add", "theorem", "pairwise_on_nat", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comap_inf_map_of_injective", ["submodule"]], ["add", "theorem", "comap_infi_map_of_injective", ["submodule"]], ["add", "theorem", "comap_map_eq_of_injective", ["submodule"]], ["add", "theorem", "comap_sup_map_of_injective", ["submodule"]], ["add", "theorem", "comap_supr_map_of_injective", ["submodule"]], ["add", "theorem", "comap_surjective_of_injective", ["submodule"]], ["add", "def", "gci_map_comap", ["submodule"]], ["add", "theorem", "map_injective_of_injective", ["submodule"]], ["add", "theorem", "map_le_map_iff_of_injective", ["submodule"]], ["add", "theorem", "map_strict_mono_of_injective", ["submodule"]]]}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "sum_arrow_lequiv_prod_arrow", ["linear_equiv"]], ["add", "theorem", "sum_arrow_lequiv_prod_arrow_apply_fst", ["linear_equiv"]], ["add", "theorem", "sum_arrow_lequiv_prod_arrow_apply_snd", ["linear_equiv"]], ["add", "theorem", "sum_arrow_lequiv_prod_arrow_symm_apply_inl", ["linear_equiv"]], ["add", "theorem", "sum_arrow_lequiv_prod_arrow_symm_apply_inr", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "def", "tailing", ["linear_map"]], ["add", "theorem", "tailing_disjoint_tunnel_succ", ["linear_map"]], ["add", "theorem", "tailing_le_tunnel", ["linear_map"]], ["add", "def", "tailing_linear_equiv", ["linear_map"]], ["add", "theorem", "tailing_sup_tunnel_succ_le_tunnel", ["linear_map"]], ["add", "def", "tailings", ["linear_map"]], ["add", "theorem", "tailings_disjoint_tailing", ["linear_map"]], ["add", "theorem", "tailings_disjoint_tunnel", ["linear_map"]], ["add", "theorem", "tailings_succ", ["linear_map"]], ["add", "theorem", "tailings_zero", ["linear_map"]], ["add", "def", "tunnel", ["linear_map"]], ["add", "def", "tunnel_aux", ["linear_map"]], ["add", "theorem", "tunnel_aux_injective", ["linear_map"]], ["add", "def", "fst", ["submodule"]], ["add", "def", "fst_equiv", ["submodule"]], ["add", "theorem", "fst_inf_snd", ["submodule"]], ["add", "theorem", "fst_map_fst", ["submodule"]], ["add", "theorem", "fst_map_snd", ["submodule"]], ["add", "theorem", "fst_sup_snd", ["submodule"]], ["add", "def", "snd", ["submodule"]], ["add", "def", "snd_equiv", ["submodule"]], ["add", "theorem", "snd_map_fst", ["submodule"]], ["add", "theorem", "snd_map_snd", ["submodule"]]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "eq_bot_of_disjoint_absorbs", []]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": [["add", "theorem", "disjoint_sup_left_of_disjoint_sup_right", ["disjoint"]]]}, {"oldPath": null, "newPath": "src/order/partial_sups.lean", "changes": [["add", "theorem", "le_partial_sups", []], ["add", "def", "partial_sups", []], ["add", "theorem", "partial_sups_disjoint_of_disjoint", []], ["add", "theorem", "partial_sups_eq", []], ["add", "theorem", "partial_sups_le", []], ["add", "theorem", "partial_sups_succ", []], ["add", "theorem", "partial_sups_zero", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "finite_of_linear_independent", []], ["mod", "theorem", "bijective_of_surjective_endomorphism", ["is_noetherian"]], ["add", "theorem", "disjoint_partial_sups_eventually_bot", ["is_noetherian"]], ["mod", "theorem", "induction", ["is_noetherian"]], ["mod", "theorem", "injective_of_surjective_endomorphism", ["is_noetherian"]], ["mod", "theorem", "is_noetherian_iff_well_founded", []], ["mod", "theorem", "monotone_stabilizes_iff_noetherian", []], ["mod", "theorem", "set_has_maximal_iff_noetherian", []]]}]}, {"timestamp": 1623233565, "sha": "47ad6800", "message": "feat(measure_theory/interval_integral): integration by substitution / change of variables (#7273)\nGiven that `f` has a derivative at `f'` everywhere on `interval a b`,\n`∫ x in a..b, (g ∘ f) x * f' x = ∫ x in f a..f b, g x`.\nCo-authored by @ADedecker", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_comp_mul_deriv'", ["interval_integral"]], ["add", "theorem", "integral_comp_mul_deriv", ["interval_integral"]]]}, {"oldPath": "test/integration.lean", "newPath": "test/integration.lean", "changes": []}]}, {"timestamp": 1623219101, "sha": "faa58e51", "message": "refactor(algebra/module/projective) make is_projective a class (#7830)\nMake `is_projective` a class.", "changes": [{"oldPath": "src/algebra/category/Module/projective.lean", "newPath": "src/algebra/category/Module/projective.lean", "changes": []}, {"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": [["del", "theorem", "lifting_property", ["is_projective"]], ["del", "theorem", "of_free", ["is_projective"]], ["del", "theorem", "of_lifting_property'", ["is_projective"]], ["del", "theorem", "of_lifting_property", ["is_projective"]], ["del", "def", "is_projective", []], ["add", "theorem", "projective_def", ["module"]], ["add", "theorem", "projective_lifting_property", ["module"]], ["add", "theorem", "projective_of_free", ["module"]], ["add", "theorem", "projective_of_lifting_property'", ["module"]], ["add", "theorem", "projective_of_lifting_property", ["module"]]]}]}, {"timestamp": 1623219099, "sha": "c210d0fd", "message": "feat(topology/category/limits): Topological bases in cofiltered limits (#7820)\nThis PR proves a theorem which provides a simple characterization of certain topological bases in a cofiltered limit of topological spaces.\nEventually I will specialize this assertion to the case where the topological spaces are profinite, and the `T i` are the topological bases given by clopen sets.\nThis generalizes a lemma from LTE.", "changes": [{"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": [["add", "def", "homeo_of_iso", ["Top"]], ["add", "def", "iso_of_homeo", ["Top"]], ["add", "theorem", "of_homeo_of_iso", ["Top"]], ["add", "theorem", "of_iso_of_homeo", ["Top"]]]}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["add", "theorem", "is_topological_basis_cofiltered_limit", ["Top"]], ["add", "def", "limit_cone_infi", ["Top"]], ["add", "def", "limit_cone_infi_is_limit", ["Top"]]]}]}, {"timestamp": 1623219098, "sha": "34c433d9", "message": "feat(data/finsupp): generalize finsupp.has_scalar to require only distrib_mul_action instead of semimodule (#7819)\nThis propagates the generalization to (add_)monoid_algebra and mv_polynomial.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_smul", ["finsupp"]], ["mod", "theorem", "filter_smul", ["finsupp"]], ["mod", "theorem", "map_domain_smul", ["finsupp"]], ["mod", "theorem", "map_range_smul", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]], ["mod", "theorem", "smul_single", ["finsupp"]], ["mod", "theorem", "sum_smul_index'", ["finsupp"]], ["mod", "theorem", "support_smul", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/to_dfinsupp.lean", "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": [["mod", "theorem", "to_finsupp_smul", ["dfinsupp"]], ["mod", "theorem", "to_dfinsupp_smul", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "coeff_smul", ["mv_polynomial"]]]}]}, {"timestamp": 1623219097, "sha": "393f6389", "message": "feat(ring_theory/localization): Make local_ring_hom more flexible (#7787)\nMake `localization.local_ring_hom` more flexible, by allowing two ideals `I` and `J` as arguments, with the assumption that `I` equals `ideal.comap f J`. Also add lemmas about identity and composition.", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "local_ring_hom_comp", ["localization"]], ["add", "theorem", "local_ring_hom_id", ["localization"]], ["mod", "theorem", "local_ring_hom_mk'", ["localization"]], ["mod", "theorem", "local_ring_hom_to_map", ["localization"]], ["mod", "theorem", "local_ring_hom_unique", ["localization"]]]}]}, {"timestamp": 1623179604, "sha": "5c6d3bce", "message": "feat(topology/instances/ereal): more on ereal, notably its topology (#7765)", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": [["add", "def", "to_ereal", ["ennreal"]], ["add", "theorem", "ad_eq_top_iff", ["ereal"]], ["add", "theorem", "add_lt_add", ["ereal"]], ["add", "theorem", "add_lt_add_left_coe", ["ereal"]], ["add", "theorem", "add_lt_add_of_lt_of_le", ["ereal"]], ["add", "theorem", "add_lt_add_right_coe", ["ereal"]], ["add", "theorem", "add_lt_top_iff", ["ereal"]], ["add", "theorem", "add_top", ["ereal"]], ["add", "theorem", "bot_add_bot", ["ereal"]], ["add", "theorem", "bot_add_coe", ["ereal"]], ["add", "theorem", "bot_lt_coe", ["ereal"]], ["add", "theorem", "bot_lt_coe_ennreal", ["ereal"]], ["add", "theorem", "bot_lt_top", ["ereal"]], ["add", "theorem", "bot_lt_zero", ["ereal"]], ["add", "theorem", "bot_ne_coe", ["ereal"]], ["add", "theorem", "bot_ne_top", ["ereal"]], ["add", "theorem", "bot_ne_zero", ["ereal"]], ["add", "theorem", "coe_add", ["ereal"]], ["add", "theorem", "coe_add_bot", ["ereal"]], ["add", "theorem", "coe_ennreal_add", ["ereal"]], ["add", "theorem", "coe_ennreal_eq_coe_ennreal_iff", ["ereal"]], ["add", "theorem", "coe_ennreal_eq_top_iff", ["ereal"]], ["add", "theorem", "coe_ennreal_le_coe_ennreal_iff", ["ereal"]], ["add", "theorem", "coe_ennreal_lt_coe_ennreal_iff", ["ereal"]], ["add", "theorem", "coe_ennreal_ne_bot", ["ereal"]], ["add", "theorem", "coe_ennreal_nonneg", ["ereal"]], ["add", "theorem", "coe_ennreal_top", ["ereal"]], ["add", "theorem", "coe_ennreal_zero", ["ereal"]], ["add", "theorem", "coe_lt_top", ["ereal"]], ["add", "theorem", "coe_ne_bot", ["ereal"]], ["add", "theorem", "coe_ne_top", ["ereal"]], ["add", "theorem", "coe_neg", ["ereal"]], ["add", "theorem", "coe_nnreal_eq_coe_real", ["ereal"]], ["add", "theorem", "coe_nnreal_lt_top", ["ereal"]], ["add", "theorem", "coe_nnreal_ne_top", ["ereal"]], ["add", "theorem", "coe_real_ereal_eq_coe_to_nnreal_sub_coe_to_nnreal", ["ereal"]], ["add", "theorem", "coe_zero", ["ereal"]], ["add", "theorem", "exists_rat_btwn_of_lt", ["ereal"]], ["add", "theorem", "lt_iff_exists_rat_btwn", ["ereal"]], ["add", "def", "ne_top_bot_equiv_real", ["ereal"]], ["add", "theorem", "neg_bot", ["ereal"]], ["add", "theorem", "neg_eg_bot_iff", ["ereal"]], ["add", "theorem", "neg_eg_top_iff", ["ereal"]], ["add", "theorem", "neg_eg_zero_iff", ["ereal"]], ["add", "theorem", "neg_eq_neg_iff", ["ereal"]], ["mod", "theorem", "neg_inj", ["ereal"]], ["add", "theorem", "neg_le_neg_iff", ["ereal"]], ["add", "theorem", "neg_lt_iff_neg_lt", ["ereal"]], ["add", "theorem", "neg_lt_of_neg_lt", ["ereal"]], ["add", "def", "neg_order_iso", ["ereal"]], ["add", "theorem", "neg_top", ["ereal"]], ["add", "theorem", "neg_zero", ["ereal"]], ["add", "theorem", "sub_eq_add_neg", ["ereal"]], ["add", "theorem", "sub_le_sub", ["ereal"]], ["add", "theorem", "sub_lt_sub_of_lt_of_le", ["ereal"]], ["add", "theorem", "sub_zero", ["ereal"]], ["add", "def", "to_real", ["ereal"]], ["add", "theorem", "to_real_add", ["ereal"]], ["add", "theorem", "to_real_bot", ["ereal"]], ["add", "theorem", "to_real_coe", ["ereal"]], ["add", "theorem", "to_real_coe_ennreal", ["ereal"]], ["add", "theorem", "to_real_le_to_real", ["ereal"]], ["add", "theorem", "to_real_neg", ["ereal"]], ["add", "theorem", "to_real_sub", ["ereal"]], ["add", "theorem", "to_real_top", ["ereal"]], ["add", "theorem", "to_real_zero", ["ereal"]], ["add", "theorem", "top_add", ["ereal"]], ["add", "theorem", "top_ne_coe", ["ereal"]], ["add", "theorem", "top_ne_zero", ["ereal"]], ["add", "theorem", "zero_lt_top", ["ereal"]], ["add", "theorem", "zero_ne_bot", ["ereal"]], ["add", "theorem", "zero_ne_top", ["ereal"]], ["add", "theorem", "zero_sub", ["ereal"]], ["add", "def", "to_ereal", ["real"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/instances/ereal.lean", "changes": [["add", "theorem", "continuous_coe_ennreal_ereal", []], ["add", "theorem", "continuous_coe_real_ereal", []], ["add", "theorem", "continuous_at_add", ["ereal"]], ["add", "theorem", "continuous_at_add_bot_bot", ["ereal"]], ["add", "theorem", "continuous_at_add_bot_coe", ["ereal"]], ["add", "theorem", "continuous_at_add_coe_bot", ["ereal"]], ["add", "theorem", "continuous_at_add_coe_coe", ["ereal"]], ["add", "theorem", "continuous_at_add_coe_top", ["ereal"]], ["add", "theorem", "continuous_at_add_top_coe", ["ereal"]], ["add", "theorem", "continuous_at_add_top_top", ["ereal"]], ["add", "theorem", "continuous_coe_ennreal_iff", ["ereal"]], ["add", "theorem", "continuous_coe_iff", ["ereal"]], ["add", "theorem", "continuous_neg", ["ereal"]], ["add", "theorem", "continuous_on_to_real", ["ereal"]], ["add", "theorem", "embedding_coe", ["ereal"]], ["add", "theorem", "embedding_coe_ennreal", ["ereal"]], ["add", "theorem", "mem_nhds_bot_iff", ["ereal"]], ["add", "theorem", "mem_nhds_top_iff", ["ereal"]], ["add", "def", "ne_bot_top_homeomorph_real", ["ereal"]], ["add", "def", "neg_homeo", ["ereal"]], ["add", "theorem", "nhds_bot'", ["ereal"]], ["add", "theorem", "nhds_bot", ["ereal"]], ["add", "theorem", "nhds_coe", ["ereal"]], ["add", "theorem", "nhds_coe_coe", ["ereal"]], ["add", "theorem", "nhds_top'", ["ereal"]], ["add", "theorem", "nhds_top", ["ereal"]], ["add", "theorem", "open_embedding_coe", ["ereal"]], ["add", "theorem", "tendsto_coe", ["ereal"]], ["add", "theorem", "tendsto_coe_ennreal", ["ereal"]], ["add", "theorem", "tendsto_nhds_bot_iff_real", ["ereal"]], ["add", "theorem", "tendsto_nhds_top_iff_real", ["ereal"]], ["add", "theorem", "tendsto_to_real", ["ereal"]]]}]}, {"timestamp": 1623179603, "sha": "75c81dee", "message": "feat(measure_theory/integration): a measurable function is a series of simple functions (#7764)", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "def", "eapprox_diff", ["measure_theory", "simple_func"]], ["add", "theorem", "eapprox_lt_top", ["measure_theory", "simple_func"]], ["add", "theorem", "sum_eapprox_diff", ["measure_theory", "simple_func"]], ["add", "theorem", "tsum_eapprox_diff", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1623179602, "sha": "39406bb9", "message": "feat(model_theory/basic): First-order languages, structures, homomorphisms, embeddings, and equivs (#7754)\nDefines the following notions from first-order logic:\n- languages\n- structures\n- homomorphisms\n- embeddings\n- equivalences (isomorphisms)\nThe definitions of languages and structures take inspiration from the Flypitch project.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/model_theory/basic.lean", "changes": [["add", "def", "const", ["first_order", "language"]], ["add", "theorem", "coe_injective", ["first_order", "language", "embedding"]], ["add", "theorem", "coe_to_hom", ["first_order", "language", "embedding"]], ["add", "def", "comp", ["first_order", "language", "embedding"]], ["add", "theorem", "comp_apply", ["first_order", "language", "embedding"]], ["add", "theorem", "comp_assoc", ["first_order", "language", "embedding"]], ["add", "theorem", "ext", ["first_order", "language", "embedding"]], ["add", "theorem", "ext_iff", ["first_order", "language", "embedding"]], ["add", "theorem", "injective", ["first_order", "language", "embedding"]], ["add", "theorem", "map_fun", ["first_order", "language", "embedding"]], ["add", "theorem", "map_rel", ["first_order", "language", "embedding"]], ["add", "def", "refl", ["first_order", "language", "embedding"]], ["add", "theorem", "refl_apply", ["first_order", "language", "embedding"]], ["add", "def", "to_hom", ["first_order", "language", "embedding"]], ["add", "def", "empty", ["first_order", "language"]], ["add", "theorem", "coe_injective", ["first_order", "language", "equiv"]], ["add", "theorem", "coe_to_embedding", ["first_order", "language", "equiv"]], ["add", "theorem", "coe_to_hom", ["first_order", "language", "equiv"]], ["add", "def", "comp", ["first_order", "language", "equiv"]], ["add", "theorem", "comp_apply", ["first_order", "language", "equiv"]], ["add", "theorem", "comp_assoc", ["first_order", "language", "equiv"]], ["add", "theorem", "ext", ["first_order", "language", "equiv"]], ["add", "theorem", "ext_iff", ["first_order", "language", "equiv"]], ["add", "theorem", "injective", ["first_order", "language", "equiv"]], ["add", "theorem", "map_fun", ["first_order", "language", "equiv"]], ["add", "theorem", "map_rel", ["first_order", "language", "equiv"]], ["add", "def", "refl", ["first_order", "language", "equiv"]], ["add", "theorem", "refl_apply", ["first_order", "language", "equiv"]], ["add", "def", "symm", ["first_order", "language", "equiv"]], ["add", "def", "to_embedding", ["first_order", "language", "equiv"]], ["add", "theorem", "to_embedding_to_hom", ["first_order", "language", "equiv"]], ["add", "def", "to_hom", ["first_order", "language", "equiv"]], ["add", "theorem", "coe_injective", ["first_order", "language", "hom"]], ["add", "def", "comp", ["first_order", "language", "hom"]], ["add", "theorem", "comp_apply", ["first_order", "language", "hom"]], ["add", "theorem", "comp_assoc", ["first_order", "language", "hom"]], ["add", "theorem", "ext", ["first_order", "language", "hom"]], ["add", "theorem", "ext_iff", ["first_order", "language", "hom"]], ["add", "def", "id", ["first_order", "language", "hom"]], ["add", "theorem", "id_apply", ["first_order", "language", "hom"]], ["add", "theorem", "map_fun", ["first_order", "language", "hom"]], ["add", "theorem", "map_rel", ["first_order", "language", "hom"]], ["add", "theorem", "to_fun_eq_coe", ["first_order", "language", "hom"]], ["add", "structure", "language", ["first_order"]]]}]}, {"timestamp": 1623134133, "sha": "42c42370", "message": "chore(mv_polynomial/equiv): speed up elaboration by adjusting priorities (#7840)\n`option_equiv_left` timed out several times in bors, since the introduction of non-unital rings. We fix this by adjusting the priority to make sure that the problematic instance is found right away.\nAlso speed up circumcenter file (which also just timed out in bors) by squeezing simps.", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}]}, {"timestamp": 1623080425, "sha": "320da57a", "message": "chore(data/fintype/basic): add fintype instance for `is_empty` (#7692)", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_eq_empty'", ["finset"]], ["add", "theorem", "card_of_is_empty", ["fintype"]], ["add", "theorem", "univ_of_is_empty", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1623080424, "sha": "6e675366", "message": "feat(category/limits): kernel.map (#7623)\nA generalization of a lemma from LTE, stated for a category with (co)kernels.", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "parallel_pair_hom", ["category_theory", "limits"]], ["add", "theorem", "parallel_pair_hom_app_one", ["category_theory", "limits"]], ["add", "theorem", "parallel_pair_hom_app_zero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "map", ["category_theory", "limits", "cokernel"]], ["add", "theorem", "map_desc", ["category_theory", "limits", "cokernel"]], ["add", "theorem", "lift_map", ["category_theory", "limits", "kernel"]], ["add", "def", "map", ["category_theory", "limits", "kernel"]]]}]}, {"timestamp": 1623080423, "sha": "fb72599b", "message": "feat(algebra/periodic): define periodicity (#7572)\nThis PR introduces a general notion of periodicity. It also includes proofs of the \"usual\" properties of periodic (and antiperiodic) functions.", "changes": [{"oldPath": null, "newPath": "src/algebra/periodic.lean", "changes": [["add", "theorem", "add", ["function", "antiperiodic"]], ["add", "theorem", "const_inv_mul", ["function", "antiperiodic"]], ["add", "theorem", "const_inv_smul'", ["function", "antiperiodic"]], ["add", "theorem", "const_inv_smul", ["function", "antiperiodic"]], ["add", "theorem", "const_mul", ["function", "antiperiodic"]], ["add", "theorem", "const_smul'", ["function", "antiperiodic"]], ["add", "theorem", "const_smul", ["function", "antiperiodic"]], ["add", "theorem", "div", ["function", "antiperiodic"]], ["add", "theorem", "div_inv", ["function", "antiperiodic"]], ["add", "theorem", "eq", ["function", "antiperiodic"]], ["add", "theorem", "int_even_mul_periodic", ["function", "antiperiodic"]], ["add", "theorem", "int_mul_eq_of_eq_zero", ["function", "antiperiodic"]], ["add", "theorem", "int_odd_mul_antiperiodic", ["function", "antiperiodic"]], ["add", "theorem", "mul", ["function", "antiperiodic"]], ["add", "theorem", "mul_const'", ["function", "antiperiodic"]], ["add", "theorem", "mul_const", ["function", "antiperiodic"]], ["add", "theorem", "mul_const_inv", ["function", "antiperiodic"]], ["add", "theorem", "nat_even_mul_periodic", ["function", "antiperiodic"]], ["add", "theorem", "nat_mul_eq_of_eq_zero", ["function", "antiperiodic"]], ["add", "theorem", "nat_odd_mul_antiperiodic", ["function", "antiperiodic"]], ["add", "theorem", "neg", ["function", "antiperiodic"]], ["add", "theorem", "neg_eq", ["function", "antiperiodic"]], ["add", "theorem", "periodic", ["function", "antiperiodic"]], ["add", "theorem", "sub", ["function", "antiperiodic"]], ["add", "theorem", "sub_eq", ["function", "antiperiodic"]], ["add", "def", "antiperiodic", ["function"]], ["add", "theorem", "add_antiperiod", ["function", "periodic"]], ["add", "theorem", "add_antiperiod_eq", ["function", "periodic"]], ["add", "theorem", "add_period", ["function", "periodic"]], ["add", "theorem", "comp", ["function", "periodic"]], ["add", "theorem", "comp_add_hom", ["function", "periodic"]], ["add", "theorem", "const_inv_mul", ["function", "periodic"]], ["add", "theorem", "const_inv_smul'", ["function", "periodic"]], ["add", "theorem", "const_inv_smul", ["function", "periodic"]], ["add", "theorem", "const_mul", ["function", "periodic"]], ["add", "theorem", "const_smul'", ["function", "periodic"]], ["add", "theorem", "const_smul", ["function", "periodic"]], ["add", "theorem", "div", ["function", "periodic"]], ["add", "theorem", "div_const", ["function", "periodic"]], ["add", "theorem", "eq", ["function", "periodic"]], ["add", "theorem", "gsmul", ["function", "periodic"]], ["add", "theorem", "gsmul_eq", ["function", "periodic"]], ["add", "theorem", "int_mul", ["function", "periodic"]], ["add", "theorem", "int_mul_eq", ["function", "periodic"]], ["add", "theorem", "mul", ["function", "periodic"]], ["add", "theorem", "mul_const'", ["function", "periodic"]], ["add", "theorem", "mul_const", ["function", "periodic"]], ["add", "theorem", "mul_const_inv", ["function", "periodic"]], ["add", "theorem", "nat_mul", ["function", "periodic"]], ["add", "theorem", "nat_mul_eq", ["function", "periodic"]], ["add", "theorem", "neg", ["function", "periodic"]], ["add", "theorem", "neg_eq", ["function", "periodic"]], ["add", "theorem", "neg_nat_mul", ["function", "periodic"]], ["add", "theorem", "neg_nsmul", ["function", "periodic"]], ["add", "theorem", "nsmul", ["function", "periodic"]], ["add", "theorem", "nsmul_eq", ["function", "periodic"]], ["add", "theorem", "sub_antiperiod", ["function", "periodic"]], ["add", "theorem", "sub_antiperiod_eq", ["function", "periodic"]], ["add", "theorem", "sub_eq", ["function", "periodic"]], ["add", "theorem", "sub_gsmul_eq", ["function", "periodic"]], ["add", "theorem", "sub_int_mul_eq", ["function", "periodic"]], ["add", "theorem", "sub_nat_mul_eq", ["function", "periodic"]], ["add", "theorem", "sub_nsmul_eq", ["function", "periodic"]], ["add", "theorem", "sub_period", ["function", "periodic"]], ["add", "def", "periodic", ["function"]], ["add", "theorem", "periodic_with_period_zero", ["function"]]]}]}, {"timestamp": 1623080422, "sha": "e55d470c", "message": "feat(specific_groups/alternating_group): The alternating group on 5 elements is simple (#7502)\nShows that `is_simple_group (alternating_group (fin 5))`", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "le_sum_of_mem", ["multiset"]]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "cycle_type_of_card_le_mem_cycle_type_add_two", ["equiv", "perm"]], ["add", "theorem", "is_three_cycle_sq", ["equiv", "perm", "is_three_cycle"]], ["add", "theorem", "order_of", ["equiv", "perm", "is_three_cycle"]], ["add", "theorem", "le_card_support_of_mem_cycle_type", ["equiv", "perm"]], ["add", "theorem", "mem_cycle_type_iff", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": [["add", "theorem", "is_conj_swap_mul_swap_of_cycle_type_two", ["alternating_group"]], ["add", "theorem", "nontrivial_of_three_le_card", ["alternating_group"]], ["add", "theorem", "normal_closure_swap_mul_swap_five", ["alternating_group"]], ["add", "theorem", "is_three_cycle_sq_of_three_mem_cycle_type_five", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "normal_closure_eq_top_of", ["is_conj"]], ["add", "theorem", "cod_restrict_apply", ["monoid_hom"]]]}]}, {"timestamp": 1623080420, "sha": "fa7b5f20", "message": "feat(linear_algebra/quadratic_form): Complex version of Sylvester's law of inertia (#7416)\nEvery nondegenerate complex quadratic form is equivalent to a quadratic form corresponding to the sum of squares.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "def", "group_smul", ["basis"]], ["add", "theorem", "group_smul_apply", ["basis"]], ["add", "theorem", "group_smul_span_eq_top", ["basis"]], ["add", "def", "is_unit_smul", ["basis"]], ["add", "theorem", "is_unit_smul_apply", ["basis"]], ["add", "def", "units_smul", ["basis"]], ["add", "theorem", "units_smul_apply", ["basis"]], ["add", "theorem", "units_smul_span_eq_top", ["basis"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "group_smul", ["linear_independent"]], ["add", "theorem", "units_smul", ["linear_independent"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "basis_repr_apply", ["quadratic_form"]], ["add", "theorem", "equivalent_sum_squares", ["quadratic_form"]], ["add", "theorem", "equivalent_weighted_sum_squares_of_nondegenerate'", ["quadratic_form"]], ["add", "def", "isometry_of_comp_linear_equiv", ["quadratic_form"]], ["add", "theorem", "isometry_of_is_Ortho_apply", ["quadratic_form"]], ["add", "def", "weighted_sum_squares", ["quadratic_form"]], ["add", "theorem", "weighted_sum_squares_apply", ["quadratic_form"]]]}]}, {"timestamp": 1623080419, "sha": "ef7aa94e", "message": "feat(algebra/ring/basic): define non-unital, non-associative rings (#6786)\nThis introduces the following typeclasses beneath `semiring`:\n * `non_unital_non_assoc_semiring`\n * `non_unital_semiring`\n * `non_assoc_semiring`\nThe goal is to use these to support a non-unital, non-associative\nalgebras.\nThe typeclass requirements of `subring`, `subsemiring`, and `ring_hom` are relaxed from `semiring` to `non_assoc_semiring`.\nInstances of these new typeclasses are added for:\n* alias types:\n * `opposite`\n * `ulift`\n* convolutive types:\n * `(add_)monoid_algebra`\n * `direct_sum`\n * `set_semiring`\n * `hahn_series`\n* elementwise types: \n * `locally_constant`\n * `pi`\n * `prod`\n * `finsupp`", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["add", "def", "assoc_ring_hom", ["SemiRing"]]]}, {"oldPath": "src/algebra/char_p/pi.lean", "newPath": "src/algebra/char_p/pi.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum_graded.lean", "newPath": "src/algebra/direct_sum_graded.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "coe_mul_left", ["add_monoid_hom"]], ["mod", "theorem", "coe_mul_right", ["add_monoid_hom"]], ["mod", "def", "mul_left", ["add_monoid_hom"]], ["mod", "def", "mul_right", ["add_monoid_hom"]], ["mod", "theorem", "mul_right_apply", ["add_monoid_hom"]], ["mod", "theorem", "boole_mul", []], ["mod", "theorem", "mul_boole", []], ["mod", "theorem", "comp_assoc", ["ring_hom"]], ["mod", "def", "id", ["ring_hom"]], ["mod", "theorem", "injective_iff", ["ring_hom"]], ["mod", "theorem", "is_unit_map", ["ring_hom"]], ["mod", "def", "mk'", ["ring_hom"]], ["mod", "structure", "ring_hom", []]]}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": [["mod", "def", "ring_equiv", ["ulift"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["mod", "theorem", "coe_ring_hom_inj_iff", ["ring_equiv"]]]}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "cast_comm", ["nat"]], ["mod", "theorem", "cast_commute", ["nat"]], ["mod", "theorem", "cast_mul", ["nat"]], ["mod", "def", "cast_ring_hom", ["nat"]], ["mod", "theorem", "coe_cast_ring_hom", ["nat"]]]}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": []}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["mod", "theorem", "emb_domain_mul", ["hahn_series"]], ["mod", "theorem", "emb_domain_one", ["hahn_series"]], ["mod", "def", "emb_domain_ring_hom", ["hahn_series"]], ["mod", "theorem", "emb_domain_ring_hom_C", ["hahn_series"]], ["mod", "theorem", "mul_coeff", ["hahn_series"]], ["mod", "theorem", "mul_coeff_left'", ["hahn_series"]], ["mod", "theorem", "mul_coeff_order_add_order", ["hahn_series"]], ["mod", "theorem", "mul_coeff_right'", ["hahn_series"]], ["mod", "theorem", "mul_single_coeff_add", ["hahn_series"]], ["mod", "theorem", "mul_single_zero_coeff", ["hahn_series"]], ["mod", "theorem", "order_one", ["hahn_series"]], ["mod", "theorem", "single_mul_coeff_add", ["hahn_series"]], ["mod", "theorem", "single_zero_mul_coeff", ["hahn_series"]], ["mod", "theorem", "support_mul_subset_add_support", ["hahn_series"]], ["mod", "theorem", "support_one", ["hahn_series"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["mod", "theorem", "coe_pow", ["subsemiring"]], ["mod", "theorem", "list_prod_mem", ["subsemiring"]], ["mod", "theorem", "mem_closure_iff_exists_list", ["subsemiring"]], ["mod", "theorem", "multiset_sum_mem", ["subsemiring"]], ["mod", "theorem", "pow_mem", ["subsemiring"]], ["mod", "theorem", "smul_def", ["subsemiring"]], ["mod", "theorem", "sum_mem", ["subsemiring"]], ["mod", "structure", "subsemiring", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/algebra.lean", "newPath": "src/topology/locally_constant/algebra.lean", "changes": []}]}, {"timestamp": 1623080418, "sha": "1eb3ae42", "message": "feat(order/symm_diff): symmetric difference operator (#6469)", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "compl_eq_iff_is_compl", []], ["add", "theorem", "disjoint_sdiff_left", ["disjoint"]], ["add", "theorem", "disjoint_sdiff_right", ["disjoint"]], ["del", "theorem", "disjoint_sdiff", []], ["add", "theorem", "disjoint_sdiff_self_left", []], ["add", "theorem", "disjoint_sdiff_self_right", []], ["add", "theorem", "eq_compl_iff_is_compl", []], ["add", "theorem", "sdiff_sdiff_self", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "eq_bot_of_le", ["disjoint"]], ["add", "theorem", "of_disjoint_inf_of_le'", ["disjoint"]], ["add", "theorem", "of_disjoint_inf_of_le", ["disjoint"]]]}, {"oldPath": null, "newPath": "src/order/symm_diff.lean", "changes": [["add", "theorem", "bot_symm_diff", []], ["add", "theorem", "compl_symm_diff", []], ["add", "theorem", "compl_symm_diff_self", []], ["add", "theorem", "disjoint_symm_diff_of_disjoint", ["disjoint"]], ["add", "theorem", "symm_diff_eq_sup", ["disjoint"]], ["add", "theorem", "disjoint_symm_diff_inf", []], ["add", "theorem", "symm_diff_eq_top", ["is_compl"]], ["add", "theorem", "sdiff_symm_diff'", []], ["add", "theorem", "sdiff_symm_diff", []], ["add", "theorem", "sdiff_symm_diff_self", []], ["add", "def", "symm_diff", []], ["add", "theorem", "symm_diff_assoc", []], ["add", "theorem", "symm_diff_bot", []], ["add", "theorem", "symm_diff_comm", []], ["add", "theorem", "symm_diff_compl_self", []], ["add", "theorem", "symm_diff_def", []], ["add", "theorem", "symm_diff_eq", []], ["add", "theorem", "symm_diff_eq_bot", []], ["add", "theorem", "symm_diff_eq_iff_sdiff_eq", []], ["add", "theorem", "symm_diff_eq_left", []], ["add", "theorem", "symm_diff_eq_right", []], ["add", "theorem", "symm_diff_eq_sup", []], ["add", "theorem", "symm_diff_eq_sup_sdiff_inf", []], ["add", "theorem", "symm_diff_eq_top_iff", []], ["add", "theorem", "symm_diff_eq_xor", []], ["add", "theorem", "symm_diff_le_sup", []], ["add", "theorem", "symm_diff_left_inj", []], ["add", "theorem", "symm_diff_right_inj", []], ["add", "theorem", "symm_diff_sdiff", []], ["add", "theorem", "symm_diff_sdiff_left", []], ["add", "theorem", "symm_diff_sdiff_right", []], ["add", "theorem", "symm_diff_self", []], ["add", "theorem", "symm_diff_symm_diff_left", []], ["add", "theorem", "symm_diff_symm_diff_right'", []], ["add", "theorem", "symm_diff_symm_diff_right", []], ["add", "theorem", "symm_diff_symm_diff_self'", []], ["add", "theorem", "symm_diff_symm_diff_self", []], ["add", "theorem", "symm_diff_top", []], ["add", "theorem", "top_symm_diff", []]]}]}, {"timestamp": 1623051842, "sha": "136e0d68", "message": "feat(data/fintype/basic): The cardinality of a set is at most the cardinality of the universe (#7823)\nI think that the hypothesis `[fintype ↥s]` can be avoided with the use of classical logic. E.g.,\n`noncomputable instance set_fintype' {α : Type*} [fintype α] (s : set α) : fintype s :=by { classical, exact set_fintype s }`\nWould it make sense to add this?", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "def", "set_fintype", []], ["add", "theorem", "set_fintype_card_le_univ", []]]}]}, {"timestamp": 1623051841, "sha": "4f38062c", "message": "feat(algebra/lie/base_change): define extension and restriction of scalars for Lie algebras (#7808)", "changes": [{"oldPath": null, "newPath": "src/algebra/lie/base_change.lean", "changes": [["add", "theorem", "bracket_tmul", ["lie_algebra", "extend_scalars"]]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}]}, {"timestamp": 1623051840, "sha": "f57f9c8b", "message": "feat(ring_theory): define the field/algebra norm (#7636)\nThis PR defines the field norm `algebra.norm K L : L →* K`, where `L` is a finite field extension of `K`. In fact, it defines this for any `algebra R S` instance, where `R` and `S` are integral domains. (With a default value of `1` if `S` does not have a finite `R`-basis.)\nThe approach is to basically copy `ring_theory/trace.lean` and replace `trace` with `det` or `norm` as appropriate.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/norm.lean", "changes": [["add", "theorem", "norm_algebra_map", ["algebra"]], ["add", "theorem", "norm_algebra_map_of_basis", ["algebra"]], ["add", "theorem", "norm_apply", ["algebra"]], ["add", "theorem", "norm_eq_matrix_det", ["algebra"]], ["add", "theorem", "norm_eq_one_of_not_exists_basis", ["algebra"]]]}]}, {"timestamp": 1623041569, "sha": "61ca31a9", "message": "chore(scripts): update nolints.txt (#7829)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1623041569, "sha": "7a21ae17", "message": "chore(algebra/algebra/subalgebra): make inf and top definitionally convenient (#7812)\nThis adjusts the galois insertion such that `lemma coe_inf (S T : subalgebra R A) : (↑(S ⊓ T) : set A) = S ∩ T := rfl`.\nIt also adds lots of trivial `simp` lemmas that were missing about the interactions of various coercions and lattice operations.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "Inf_to_submodule", ["algebra"]], ["add", "theorem", "Inf_to_subsemiring", ["algebra"]], ["add", "theorem", "coe_Inf", ["algebra"]], ["add", "theorem", "coe_inf", ["algebra"]], ["add", "theorem", "coe_infi", ["algebra"]], ["add", "theorem", "coe_top", ["algebra"]], ["add", "theorem", "inf_to_submodule", ["algebra"]], ["add", "theorem", "inf_to_subsemiring", ["algebra"]], ["add", "theorem", "infi_to_submodule", ["algebra"]], ["add", "theorem", "mem_Inf", ["algebra"]], ["add", "theorem", "mem_inf", ["algebra"]], ["add", "theorem", "mem_infi", ["algebra"]], ["mod", "theorem", "mem_top", ["algebra"]], ["mod", "theorem", "top_to_submodule", ["algebra"]], ["mod", "theorem", "top_to_subsemiring", ["algebra"]], ["add", "theorem", "coe_to_submodule", ["subalgebra"]], ["add", "theorem", "coe_to_subring", ["subalgebra"]], ["add", "theorem", "coe_to_subsemiring", ["subalgebra"]], ["add", "theorem", "mem_to_subring", ["subalgebra"]], ["add", "theorem", "mem_to_subsemiring", ["subalgebra"]], ["add", "theorem", "prod_inf_prod", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["del", "theorem", "coe_inf", ["algebra"]], ["del", "theorem", "prod_inf_prod", ["algebra"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}]}, {"timestamp": 1623028358, "sha": "685289c6", "message": "feat(algebra/pointwise): pow_mem_pow (#7822)\nIf `a ∈ s` then `a ^ n ∈ s ^ n`.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "pow_mem_pow", ["set"]], ["add", "theorem", "pow_subset_pow", ["set"]]]}]}, {"timestamp": 1623028357, "sha": "29d0c63d", "message": "feat(measure_theory): add a few integration-related lemmas (#7821)\nThese are lemmas I proved while working on #7164. Some of them are actually not used anymore in that PR because I'm refactoring it, but I thought they would be useful anyway, so here there are.", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_mono_set'", ["measure_theory"]], ["add", "theorem", "lintegral_mono_set", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "restrict_comm", ["measure_theory", "measure"]], ["add", "theorem", "restrict_mono'", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "restrict", ["measure_theory", "integrable_on"]], ["add", "theorem", "set_integral_mono_set", ["measure_theory"]]]}]}, {"timestamp": 1623028356, "sha": "ef7c3350", "message": "fix(data/mv_polynomial): add missing decidable arguments (#7817)\nThis:\n* fixes a doubled instance name, `finsupp.finsupp.decidable_eq`. Note the linter deliberate ignores instances, as they are often autogenerated\n* generalizes `finsupp.decidable_le` to all canonically_ordered_monoids\n* adds missing `decidable_eq` arguments to `mv_polynomial` and `mv_power_series` lemmas whose statement contains an `if`. These might in future be lintable.\n* adds some missing lemmas about `mv_polynomial` to clean up a few proofs.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "coeff_C", ["mv_polynomial"]], ["mod", "theorem", "coeff_X'", ["mv_polynomial"]], ["mod", "theorem", "coeff_X_pow", ["mv_polynomial"]], ["mod", "theorem", "coeff_monomial", ["mv_polynomial"]], ["mod", "theorem", "coeff_mul_X'", ["mv_polynomial"]], ["add", "theorem", "coeff_one", ["mv_polynomial"]], ["add", "theorem", "coeff_zero_C", ["mv_polynomial"]], ["add", "theorem", "coeff_zero_one", ["mv_polynomial"]], ["mod", "theorem", "constant_coeff_monomial", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": [["mod", "theorem", "pderiv_X", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["mod", "theorem", "coeff_C", ["mv_power_series"]], ["mod", "theorem", "coeff_X", ["mv_power_series"]], ["mod", "theorem", "coeff_X_pow", ["mv_power_series"]], ["mod", "theorem", "coeff_index_single_X", ["mv_power_series"]], ["mod", "theorem", "coeff_inv", ["mv_power_series"]], ["mod", "theorem", "coeff_inv_aux", ["mv_power_series"]], ["mod", "theorem", "coeff_inv_of_unit", ["mv_power_series"]], ["mod", "theorem", "coeff_monomial", ["mv_power_series"]], ["mod", "theorem", "coeff_one", ["mv_power_series"]], ["add", "theorem", "monomial_def", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_C", ["power_series"]], ["mod", "theorem", "coeff_zero_X", ["power_series"]], ["mod", "theorem", "order_monomial", ["power_series"]]]}]}, {"timestamp": 1623028355, "sha": "90ae36ea", "message": "docs(order/order_iso_nat): add module docstring (#7804)\nadd module docstring", "changes": [{"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": [["mod", "def", "nat_gt", ["rel_embedding"]], ["mod", "def", "nat_lt", ["rel_embedding"]], ["mod", "theorem", "nat_lt_apply", ["rel_embedding"]]]}]}, {"timestamp": 1623007818, "sha": "4c8a627b", "message": "docs(order/directed): add module docstring (#7779)\nadd module docstring", "changes": [{"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["mod", "def", "directed", []], ["mod", "def", "directed_on", []]]}]}, {"timestamp": 1622950087, "sha": "e3f897c2", "message": "feat(algebra/char_p): characteristic of fraction_ring (#7703)\nAdding the characteristics of a `fraction_ring` for an integral domain.", "changes": [{"oldPath": null, "newPath": "src/algebra/char_p/algebra.lean", "changes": [["add", "theorem", "char_p_of_injective_algebra_map", []], ["add", "theorem", "char_zero_of_injective_algebra_map", []]]}, {"oldPath": "src/algebra/char_p/default.lean", "newPath": "src/algebra/char_p/default.lean", "changes": []}]}, {"timestamp": 1622950086, "sha": "ba2c0563", "message": "feat(data/list/nodup): nodup.pairwise_of_forall_ne (#7587)", "changes": [{"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["add", "theorem", "pairwise_of_forall_ne", ["list", "nodup"]], ["add", "theorem", "pairwise_of_set_pairwise_on", ["list", "nodup"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "set_pairwise_on", ["list", "pairwise"]], ["add", "theorem", "pairwise_of_reflexive_of_forall_ne", ["list"]], ["add", "theorem", "pairwise_of_reflexive_on_dupl_of_forall_ne", ["list"]]]}]}, {"timestamp": 1622884155, "sha": "7021ff9b", "message": "feat(linear_algebra/basis): use is_empty instead of ¬nonempty (#7815)\nThis removes the need for `basis.of_dim_eq_zero'` and `basis_of_finrank_zero'`, as these special cases are now covered by the unprimed versions and typeclass search.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["del", "theorem", "empty_unique", ["basis"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "def", "of_dim_eq_zero'", ["basis"]], ["del", "theorem", "of_dim_eq_zero'_apply", ["basis"]], ["mod", "def", "of_dim_eq_zero", ["basis"]], ["mod", "theorem", "of_dim_eq_zero_apply", ["basis"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module_pid.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}]}, {"timestamp": 1622834976, "sha": "a4ae4adb", "message": "chore(order/(bounded,modular)_lattice): avoid classical.some in `is_complemented` instances (#7814)\nThere's no reason to use it here.", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}]}, {"timestamp": 1622834975, "sha": "8b5ff9ce", "message": "feat(analysis/special_functions/integrals): `integral_log` (#7732)\nThe integral of the (real) logarithmic function over the interval `[a, b]`, provided that `0 ∉ interval a b`.", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_log", []], ["add", "theorem", "integral_log_of_neg", []], ["add", "theorem", "integral_log_of_pos", []]]}, {"oldPath": "test/integration.lean", "newPath": "test/integration.lean", "changes": []}]}, {"timestamp": 1622822916, "sha": "0b098585", "message": "feat(linear_algebra/basic): add a unique instance for linear_equiv (#7816)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_zero", ["linear_equiv"]], ["add", "theorem", "zero_apply", ["linear_equiv"]], ["add", "theorem", "zero_symm", ["linear_equiv"]]]}]}, {"timestamp": 1622813142, "sha": "65e3b049", "message": "feat(linear_algebra/determinant): various `basis.det` lemmas (#7669)\nA selection of results that I needed for computing the value of `basis.det`.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "constr_comp", ["basis"]], ["add", "theorem", "map_equiv", ["basis"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_comp", ["basis"]], ["add", "theorem", "det_map", ["basis"]], ["add", "theorem", "det_reindex", ["basis"]], ["add", "theorem", "det_reindex_symm", ["basis"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "to_matrix_map", ["basis"]], ["add", "theorem", "to_matrix_reindex'", ["basis"]], ["add", "theorem", "to_matrix_reindex", ["basis"]]]}]}, {"timestamp": 1622800382, "sha": "1a62bb4c", "message": "feat(linear_algebra): strong rank condition implies rank condition (#7683)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "congr_fun", ["finsupp"]], ["add", "theorem", "equiv_fun_on_fintype_single", ["finsupp"]], ["add", "theorem", "equiv_fun_on_fintype_symm_single", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "linear_equiv_fun_on_fintype_single", ["finsupp"]], ["add", "theorem", "linear_equiv_fun_on_fintype_symm_single", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "left_inverse_splitting_of_finsupp_surjective", ["linear_map"]], ["add", "theorem", "left_inverse_splitting_of_fun_on_fintype_surjective", ["linear_map"]], ["add", "def", "splitting_of_finsupp_surjective", ["linear_map"]], ["add", "theorem", "splitting_of_finsupp_surjective_injective", ["linear_map"]], ["add", "theorem", "splitting_of_finsupp_surjective_splits", ["linear_map"]], ["add", "def", "splitting_of_fun_on_fintype_surjective", ["linear_map"]], ["add", "theorem", "splitting_of_fun_on_fintype_surjective_injective", ["linear_map"]], ["add", "theorem", "splitting_of_fun_on_fintype_surjective_splits", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}]}, {"timestamp": 1622778975, "sha": "be183e26", "message": "chore(data/finset|multiset|finsupp): reduce algebra/ imports (#7797)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "abs_sum_le_sum_abs", ["multiset"]]]}, {"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": [["add", "theorem", "mul_sum", ["finsupp"]], ["add", "theorem", "sum_mul", ["finsupp"]]]}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "prod_repeat", ["list"]], ["del", "theorem", "sum_repeat", ["list"]], ["del", "theorem", "nsmul_eq_mul", ["nat"]]]}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "theorem", "mul_sum", ["finsupp"]], ["del", "theorem", "sum_mul", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_repeat", ["list"]], ["add", "theorem", "sum_repeat", ["list"]]]}, {"oldPath": "src/data/list/indexes.lean", "newPath": "src/data/list/indexes.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "abs_sum_le_sum_abs", ["multiset"]]]}, {"oldPath": "src/data/multiset/range.lean", "newPath": "src/data/multiset/range.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "nsmul_eq_mul", ["nat"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1622762589, "sha": "89928bc0", "message": "feat(topology): A locally compact Hausdorff space is totally disconnected if and only if it is totally separated (#7649)\nWe prove that a locally compact Hausdorff space is totally disconnected if and only if it is totally separated.", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "exists_clopen_of_totally_separated", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "compact_exists_clopen_in_open", []], ["add", "theorem", "compact_t2_tot_disc_iff_tot_sep", []], ["add", "theorem", "loc_compact_Haus_tot_disc_of_zero_dim", []], ["add", "theorem", "loc_compact_t2_tot_disc_iff_tot_sep", []], ["add", "theorem", "tot_sep_of_zero_dim", []]]}]}, {"timestamp": 1622736932, "sha": "685adb01", "message": "fix(tactic/lint): allow pattern def (#7785)\n`Prop` sorted declarations are allowed to be `def` if they have the `@[pattern]` attribute", "changes": [{"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": [["add", "def", "my_exists_intro", []]]}]}, {"timestamp": 1622736931, "sha": "fa514687", "message": "feat(tactic/lift): elaborate proof with the expected type (#7739)\n* also slightly refactor the corresponding function a bit\n* add some tests\n* move all tests to `tests/lift.lean`", "changes": [{"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "test/lift.lean", "newPath": "test/lift.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1622736930, "sha": "05f7e8dc", "message": "feat(linear_algebra/tensor_product): define `tensor_tensor_tensor_comm` (#7724)\nThe intended application is defining the bracket structure when extending the scalars of a Lie algebra.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "def", "left_comm", ["tensor_product"]], ["add", "theorem", "left_comm_symm_tmul", ["tensor_product"]], ["add", "theorem", "left_comm_tmul", ["tensor_product"]], ["add", "def", "tensor_tensor_tensor_comm", ["tensor_product"]], ["add", "theorem", "tensor_tensor_tensor_comm_symm_tmul", ["tensor_product"]], ["add", "theorem", "tensor_tensor_tensor_comm_tmul", ["tensor_product"]]]}]}, {"timestamp": 1622718446, "sha": "62655a23", "message": "chore(data/dfinsupp): add the simp lemma coe_pre_mk (#7806)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "coe_pre_mk", ["dfinsupp"]]]}]}, {"timestamp": 1622718445, "sha": "2a93644a", "message": "chore(src/linear_algebra/free_module): rename file to free_module_pid (#7805)\nIn preparation for #7801", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module_pid.lean", "changes": []}]}, {"timestamp": 1622718444, "sha": "fc6f9673", "message": "chore(ring_theory/hahn_series): emb_domain_add needs only add_monoid, not semiring (#7802)\nThis is my fault, the lemma ended up in the wrong place in #7737", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}]}, {"timestamp": 1622718443, "sha": "54d8b94e", "message": "chore(logic/basic): add simp lemmas about exist_unique to match those about exists (#7784)\nAdds:\n* `exists_unique_const` to match `exists_const` (provable by simp)\n* `exists_unique_prop` to match `exists_prop` (provable by simp)\n* `exists_unique_prop_of_true` to match `exists_prop_of_true`", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_unique_const", []], ["add", "theorem", "exists_unique_prop", []], ["add", "theorem", "exists_unique_prop_of_true", []]]}]}, {"timestamp": 1622718441, "sha": "ef139383", "message": "feat(ring_theory/tensor_product): the base change of a linear map along an algebra (#4773)", "changes": [{"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "ltensor_mul", ["linear_map"]], ["add", "theorem", "rtensor_mul", ["linear_map"]], ["add", "theorem", "curry_injective", ["tensor_product"]], ["mod", "theorem", "smul_tmul'", ["tensor_product"]], ["mod", "theorem", "smul_tmul", ["tensor_product"]], ["mod", "theorem", "tmul_smul", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "def", "base_change", ["linear_map"]], ["add", "theorem", "base_change_add", ["linear_map"]], ["add", "theorem", "base_change_eq_ltensor", ["linear_map"]], ["add", "def", "base_change_hom", ["linear_map"]], ["add", "theorem", "base_change_neg", ["linear_map"]], ["add", "theorem", "base_change_smul", ["linear_map"]], ["add", "theorem", "base_change_sub", ["linear_map"]], ["add", "theorem", "base_change_tmul", ["linear_map"]], ["add", "theorem", "base_change_zero", ["linear_map"]], ["add", "def", "assoc", ["tensor_product", "algebra_tensor_module"]], ["add", "def", "curry", ["tensor_product", "algebra_tensor_module"]], ["add", "theorem", "curry_injective", ["tensor_product", "algebra_tensor_module"]], ["add", "theorem", "ext", ["tensor_product", "algebra_tensor_module"]], ["add", "def", "lcurry", ["tensor_product", "algebra_tensor_module"]], ["add", "def", "equiv", ["tensor_product", "algebra_tensor_module", "lift"]], ["add", "def", "lift", ["tensor_product", "algebra_tensor_module"]], ["add", "theorem", "lift_tmul", ["tensor_product", "algebra_tensor_module"]], ["add", "def", "mk", ["tensor_product", "algebra_tensor_module"]], ["add", "theorem", "restrict_scalars_curry", ["tensor_product", "algebra_tensor_module"]], ["add", "theorem", "smul_eq_lsmul_rtensor", ["tensor_product", "algebra_tensor_module"]], ["add", "def", "uncurry", ["tensor_product", "algebra_tensor_module"]]]}]}, {"timestamp": 1622705919, "sha": "b806fd43", "message": "chore(scripts): update nolints.txt (#7810)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1622705918, "sha": "36decf5a", "message": "chore(topology/bases): Rename + unprotect some lemmas (#7809)\n@PatrickMassot Unfortunately I saw your comments after #7753 was already merged, so here is a followup PR with the changes you requested. I also unprotected and renamed `is_topological_basis_pi` and `is_topological_basis_infi` since dot notation will also not work for those.", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "is_topological_basis_infi", []], ["add", "theorem", "is_topological_basis_pi", []], ["add", "theorem", "is_topological_basis_opens", ["topological_space"]]]}]}, {"timestamp": 1622705917, "sha": "8422d8c7", "message": "chore(data/padics): move padics to number_theory/ (#7771)\nPer [zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/move.20p-adics).", "changes": [{"oldPath": "src/data/padics/default.lean", "newPath": null, "changes": []}, {"oldPath": null, "newPath": "src/number_theory/padics/default.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/number_theory/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/number_theory/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/number_theory/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/number_theory/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/number_theory/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/compare.lean", "newPath": "src/ring_theory/witt_vector/compare.lean", "changes": []}]}, {"timestamp": 1622705916, "sha": "adae1adf", "message": "feat(order/filter/archimedean): in an archimedean linear ordered ring, `at_top` and `at_bot` are countably generated (#7751)", "changes": [{"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": [["add", "theorem", "at_bot_countable_basis_of_archimedean", []], ["add", "theorem", "at_bot_countably_generated", []], ["add", "theorem", "at_top_countable_basis_of_archimedean", []], ["add", "theorem", "at_top_countably_generated_of_archimedean", []]]}]}, {"timestamp": 1622705915, "sha": "6d85ff23", "message": "refactor(linear_algebra/finsupp): replace mem_span_iff_total (#7735)\nThis PR renames the existing `mem_span_iff_total` to `mem_span_image_iff_total` and the existing `span_eq_map_total` to `span_image_eq_map_total`, and replaces them with slightly simpler lemmas about sets in the module, rather than indexed families.\nAs usual in the linear algebra library, there is tension between using sets and using indexed families, but as `span` is defined in terms of sets I think the new lemmas merit taking the simpler names.", "changes": [{"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "mem_span_iff_total", ["finsupp"]], ["add", "theorem", "mem_span_image_iff_total", ["finsupp"]], ["del", "theorem", "span_eq_map_total", ["finsupp"]], ["add", "theorem", "span_eq_range_total", ["finsupp"]], ["add", "theorem", "span_image_eq_map_total", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}]}, {"timestamp": 1622705913, "sha": "6d90d35f", "message": "feat(analysis/fourier): monomials on the circle are orthonormal (#6952)\nMake the circle into a measure space, using Haar measure, and prove that the monomials `z ^ n` are orthonormal when considered as elements of L^2 on the circle.", "changes": [{"oldPath": null, "newPath": "src/analysis/fourier.lean", "changes": [["add", "def", "fourier", []], ["add", "theorem", "fourier_add", []], ["add", "theorem", "fourier_add_half_inv_index", []], ["add", "theorem", "fourier_neg", []], ["add", "theorem", "fourier_zero", []], ["add", "def", "haar_circle", []], ["add", "theorem", "orthonormal_fourier", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_int_mul", ["complex"]]]}, {"oldPath": "src/geometry/manifold/instances/circle.lean", "newPath": "src/geometry/manifold/instances/circle.lean", "changes": [["mod", "theorem", "coe_div_circle", []], ["mod", "theorem", "coe_inv_circle", []], ["add", "theorem", "coe_inv_circle_eq_conj", []], ["add", "theorem", "exp_map_circle_apply", []], ["add", "theorem", "nonzero_of_mem_circle", []], ["add", "theorem", "norm_sq_eq_of_mem_circle", []]]}, {"oldPath": "src/measure_theory/l2_space.lean", "newPath": "src/measure_theory/l2_space.lean", "changes": [["add", "theorem", "inner_to_Lp", ["measure_theory", "bounded_continuous_function"]], ["add", "theorem", "inner_to_Lp", ["measure_theory", "continuous_map"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "coe_fn_to_Lp", ["bounded_continuous_function"]], ["add", "theorem", "coe_fn_to_Lp", ["continuous_map"]], ["mod", "theorem", "to_Lp_norm_le", ["continuous_map"]]]}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": [["add", "def", "positive_compacts_univ", ["topological_space"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "is_compact_sphere", []]]}]}, {"timestamp": 1622696301, "sha": "4b312472", "message": "chore(data/*/gcd): move data/*set/gcd to algebra/gcd_monoid/ (#7800)\nSee discussion of migrating content from `data/` to `algebra/` at [https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/move.20p-adics](zulip).", "changes": [{"oldPath": "src/data/finset/gcd.lean", "newPath": "src/algebra/gcd_monoid/finset.lean", "changes": []}, {"oldPath": "src/data/multiset/gcd.lean", "newPath": "src/algebra/gcd_monoid/multiset.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}]}, {"timestamp": 1622696300, "sha": "e5915436", "message": "chore(data/zsqrtd): move to number_theory/ (#7796)\nSee discussion of migrating content from `data/` to `algebra/` at [https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/move.20p-adics](zulip).", "changes": [{"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/number_theory/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/number_theory/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/to_real.lean", "newPath": "src/number_theory/zsqrtd/to_real.lean", "changes": []}]}, {"timestamp": 1622696299, "sha": "ce3ca596", "message": "chore(data/fincard): move to set_theory/ (#7795)\nThis is about cardinals, so probably belongs in `set_theory/` not `data/`. (It's also a leaf node for now, so easy to move.)", "changes": [{"oldPath": "src/data/fincard.lean", "newPath": "src/set_theory/fincard.lean", "changes": []}]}, {"timestamp": 1622678020, "sha": "d5a635be", "message": "chore(data/hash_map): remove duplicate imports (#7794)", "changes": [{"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}]}, {"timestamp": 1622678019, "sha": "a36560c2", "message": "chore(data/quaternion): move to algebra/ (#7793)\nSee discussion of migrating content from `data/` to `algebra/` at [https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/move.20p-adics](zulip).", "changes": [{"oldPath": "src/data/quaternion.lean", "newPath": "src/algebra/quaternion.lean", "changes": []}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}]}, {"timestamp": 1622678018, "sha": "7e3e8834", "message": "chore(data/equiv): add docstrings (#7704)\n- add module docstrings\n- add def docstrings\n- rename `decode2` to `decode₂`\n- squash some simps", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": [["del", "theorem", "bind_decode2_iff", ["partrec"]], ["add", "theorem", "bind_decode₂_iff", ["partrec"]]]}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": [["mod", "def", "choose_x", ["encodable"]], ["del", "def", "decode2", ["encodable"]], ["del", "theorem", "decode2_inj", ["encodable"]], ["del", "theorem", "decode2_is_partial_inv", ["encodable"]], ["mod", "def", "decode_subtype", ["encodable"]], ["mod", "def", "decode_sum", ["encodable"]], ["add", "def", "decode₂", ["encodable"]], ["add", "theorem", "decode₂_inj", ["encodable"]], ["add", "theorem", "decode₂_is_partial_inv", ["encodable"]], ["add", "theorem", "decode₂_ne_none_iff", ["encodable"]], ["mod", "def", "encode'", ["encodable"]], ["mod", "def", "encode_subtype", ["encodable"]], ["mod", "def", "encode_sum", ["encodable"]], ["del", "theorem", "encodek2", ["encodable"]], ["add", "theorem", "encodek₂", ["encodable"]], ["del", "theorem", "mem_decode2'", ["encodable"]], ["del", "theorem", "mem_decode2", ["encodable"]], ["add", "theorem", "mem_decode₂'", ["encodable"]], ["add", "theorem", "mem_decode₂", ["encodable"]]]}, {"oldPath": "src/data/equiv/encodable/lattice.lean", "newPath": "src/data/equiv/encodable/lattice.lean", "changes": [["del", "theorem", "Union_decode2", ["encodable"]], ["del", "theorem", "Union_decode2_cases", ["encodable"]], ["del", "theorem", "Union_decode2_disjoint_on", ["encodable"]], ["add", "theorem", "Union_decode₂", ["encodable"]], ["add", "theorem", "Union_decode₂_cases", ["encodable"]], ["add", "theorem", "Union_decode₂_disjoint_on", ["encodable"]], ["del", "theorem", "supr_decode2", ["encodable"]], ["add", "theorem", "supr_decode₂", ["encodable"]]]}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": [["mod", "def", "fintype_pi", ["encodable"]]]}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "bUnion_decode2", ["measurable_set"]], ["add", "theorem", "bUnion_decode₂", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/pi_system.lean", "newPath": "src/measure_theory/pi_system.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["del", "theorem", "tsum_Union_decode2", []], ["add", "theorem", "tsum_Union_decode₂", []], ["del", "theorem", "tsum_supr_decode2", []], ["add", "theorem", "tsum_supr_decode₂", []]]}]}, {"timestamp": 1622678017, "sha": "29d0a4e6", "message": "feat(tactic/lint): add linter that type-checks statements (#7694)\n* Add linter that type-checks the statements of all declarations with the default reducibility settings. A statement might not type-check if locally a declaration was made not `@[irreducible]` while globally it is.\n* Fix an issue where `with_one.monoid.to_mul_one_class` did not unify with `with_one.mul_one_class`.\n* Fix some proofs in `category_theory.opposites` so that they work while keeping `quiver.opposite` irreducible.", "changes": [{"oldPath": "src/algebra/category/Mon/adjunctions.lean", "newPath": "src/algebra/category/Mon/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}]}, {"timestamp": 1622658200, "sha": "6e5899dd", "message": "feat(measure_theory/integration): add a version of the monotone convergence theorem using `tendsto` (#7791)", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_tendsto_of_tendsto_of_monotone", ["measure_theory"]]]}]}, {"timestamp": 1622658199, "sha": "82bc3ca6", "message": "chore(logic/small): reduce imports (#7777)\nBy delaying the `fintype` and `encodable` instances for `small`, I think we can now avoid importing `algebra` at all into `logic`.\n~~Since some of the `is_empty` lemmas haven't been used yet,~~ I took the liberty of making some arguments explicit, as one was painful to use as is.", "changes": [{"oldPath": null, "newPath": "src/data/equiv/encodable/small.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/fintype/small.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/logic/is_empty.lean", "newPath": "src/logic/is_empty.lean", "changes": []}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}]}, {"timestamp": 1622658198, "sha": "47dbdaca", "message": "chore(data/support): move data/(support|indicator_function) to algebra/ (#7774)\nThese don't define any new structures, have not much to do with programming, and are just about basic features of algebraic gadgets, so belong better in `algebra/` than `data/`. \nSee discussion of migrating content from `data/` to `algebra/` at [https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/move.20p-adics](zulip).", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/algebra/indicator_function.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/algebra/support.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/indicator_function.lean", "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/order/filter/indicator_function.lean", "newPath": "src/order/filter/indicator_function.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": []}]}, {"timestamp": 1622640468, "sha": "173bc4c2", "message": "feat(algebra/algebra/subalgebra): add subalgebra.prod (#7782)\nWe add a basic API for product of subalgebras.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "coe_prod", ["subalgebra"]], ["add", "theorem", "mem_prod", ["subalgebra"]], ["add", "def", "prod", ["subalgebra"]], ["add", "theorem", "prod_mono", ["subalgebra"]], ["add", "theorem", "prod_to_submodule", ["subalgebra"]], ["add", "theorem", "prod_top", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoint_prod_le", ["algebra"]], ["add", "theorem", "coe_inf", ["algebra"]], ["add", "theorem", "prod_inf_prod", ["algebra"]]]}]}, {"timestamp": 1622629985, "sha": "b231c923", "message": "doc(data/finsupp/pointwise): update old module doc (#7770)", "changes": [{"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}]}, {"timestamp": 1622629984, "sha": "b91cdb91", "message": "refactor(data/nnreal): rename nnreal.of_real to real.to_nnreal (#7750)\nI am in the middle of a project involving reals, nnreals, ennreals and ereals. There is a maze of coercions and maps between the 4 of them, with completely incoherent naming scheme (do you think that `measurable.nnreal_coe` is speaking of the coercion from `nnreal` to `real` or to `ennreal`, or of a coercion into `nnreal`? currently, it's for the coercion from `nnreal` to `real`, and the analogous lemma for the coercion from `nnreal` to `ennreal` is called `measurable.ennreal_coe`!). I'd like to normalize all this to have something coherent:\n* maps are defined from a type to another one, to be able to use dot notation.\n* when there are coercions, all lemmas should be formulated in terms of the coercion, and not of the explicit map\n* when there is an ambiguity, lemmas on coercions should mention both the source and the target (like in `measurable.coe_nnreal_real`, say). \nThe PR is one first step in this direction, renaming `nnreal.of_real` to `real.to_nnreal` (which makes it possible to use dot notation).", "changes": [{"oldPath": "archive/imo/imo2008_q4.lean", "newPath": "archive/imo/imo2008_q4.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/parametric_integral.lean", "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["del", "theorem", "of_real_rpow_of_nonneg", ["nnreal"]], ["add", "theorem", "to_nnreal_rpow_of_nonneg", ["real"]]]}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": [["mod", "theorem", "inv_add_inv_conj_nnreal", ["real", "is_conjugate_exponent"]], ["mod", "theorem", "one_lt_nnreal", ["real", "is_conjugate_exponent"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_real_mono", ["ennreal"]], ["add", "theorem", "to_real_strict_mono", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "coe_of_real", ["nnreal"]], ["del", "theorem", "coe_of_real_le", ["nnreal"]], ["del", "theorem", "le_coe_of_real", ["nnreal"]], ["del", "theorem", "le_of_real_iff_coe_le'", ["nnreal"]], ["del", "theorem", "le_of_real_iff_coe_le", ["nnreal"]], ["del", "theorem", "lt_of_real_iff_coe_lt", ["nnreal"]], ["del", "theorem", "of_real_add", ["nnreal"]], ["del", "theorem", "of_real_add_le", ["nnreal"]], ["del", "theorem", "of_real_add_of_real", ["nnreal"]], ["del", "theorem", "of_real_bit0", ["nnreal"]], ["del", "theorem", "of_real_bit1", ["nnreal"]], ["del", "theorem", "of_real_coe", ["nnreal"]], ["del", "theorem", "of_real_coe_nat", ["nnreal"]], ["del", "theorem", "of_real_div'", ["nnreal"]], ["del", "theorem", "of_real_div", ["nnreal"]], ["del", "theorem", "of_real_eq_zero", ["nnreal"]], ["del", "theorem", "of_real_inv", ["nnreal"]], ["del", "theorem", "of_real_le_iff_le_coe", ["nnreal"]], ["del", "theorem", "of_real_le_of_real", ["nnreal"]], ["del", "theorem", "of_real_le_of_real_iff", ["nnreal"]], ["del", "theorem", "of_real_lt_iff_lt_coe", ["nnreal"]], ["del", "theorem", "of_real_lt_of_real_iff'", ["nnreal"]], ["del", "theorem", "of_real_lt_of_real_iff", ["nnreal"]], ["del", "theorem", "of_real_lt_of_real_iff_of_nonneg", ["nnreal"]], ["del", "theorem", "of_real_mul", ["nnreal"]], ["del", "theorem", "of_real_of_nonpos", ["nnreal"]], ["del", "theorem", "of_real_one", ["nnreal"]], ["del", "theorem", "of_real_pos", ["nnreal"]], ["del", "theorem", "of_real_prod_of_nonneg", ["nnreal"]], ["del", "theorem", "of_real_sum_of_nonneg", ["nnreal"]], ["del", "theorem", "of_real_zero", ["nnreal"]], ["mod", "theorem", "sub_def", ["nnreal"]], ["add", "theorem", "to_nnreal_coe_nat", ["nnreal"]], ["add", "theorem", "coe_to_nnreal'", ["real"]], ["add", "theorem", "coe_to_nnreal", ["real"]], ["add", "theorem", "coe_to_nnreal_le", ["real"]], ["add", "theorem", "le_coe_to_nnreal", ["real"]], ["add", "theorem", "le_to_nnreal_iff_coe_le'", ["real"]], ["add", "theorem", "le_to_nnreal_iff_coe_le", ["real"]], ["add", "theorem", "lt_to_nnreal_iff_coe_lt", ["real"]], ["mod", "theorem", "nnabs_of_nonneg", ["real"]], ["add", "def", "to_nnreal", ["real"]], ["add", "theorem", "to_nnreal_add", ["real"]], ["add", "theorem", "to_nnreal_add_le", ["real"]], ["add", "theorem", "to_nnreal_add_to_nnreal", ["real"]], ["add", "theorem", "to_nnreal_bit0", ["real"]], ["add", "theorem", "to_nnreal_bit1", ["real"]], ["add", "theorem", "to_nnreal_coe", ["real"]], ["add", "theorem", "to_nnreal_div'", ["real"]], ["add", "theorem", "to_nnreal_div", ["real"]], ["add", "theorem", "to_nnreal_eq_zero", ["real"]], ["add", "theorem", "to_nnreal_inv", ["real"]], ["add", "theorem", "to_nnreal_le_iff_le_coe", ["real"]], ["add", "theorem", "to_nnreal_le_to_nnreal", ["real"]], ["add", "theorem", "to_nnreal_le_to_nnreal_iff", ["real"]], ["add", "theorem", "to_nnreal_lt_iff_lt_coe", ["real"]], ["add", "theorem", "to_nnreal_lt_to_nnreal_iff'", ["real"]], ["add", "theorem", "to_nnreal_lt_to_nnreal_iff", ["real"]], ["add", "theorem", "to_nnreal_lt_to_nnreal_iff_of_nonneg", ["real"]], ["add", "theorem", "to_nnreal_mul", ["real"]], ["add", "theorem", "to_nnreal_of_nonpos", ["real"]], ["add", "theorem", "to_nnreal_one", ["real"]], ["add", "theorem", "to_nnreal_pos", ["real"]], ["add", "theorem", "to_nnreal_prod_of_nonneg", ["real"]], ["add", "theorem", "to_nnreal_sum_of_nonneg", ["real"]], ["add", "theorem", "to_nnreal_zero", ["real"]]]}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["del", "theorem", "integral_eq_lintegral_max_sub_lintegral_min", ["measure_theory"]], ["add", "theorem", "integral_eq_lintegral_pos_part_sub_lintegral_neg_part", ["measure_theory"]], ["mod", "theorem", "lintegral_coe_eq_integral", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "nnreal_coe", ["ae_measurable"]], ["add", "theorem", "real_to_nnreal", ["ae_measurable"]], ["del", "theorem", "nnreal_of_real", ["measurable"]], ["add", "theorem", "real_to_nnreal", ["measurable"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "has_finite_integral_iff_of_nnreal", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "continuous_of_real", ["nnreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "nndist_dist", []]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1622609828, "sha": "832aff84", "message": "chore(scripts): update nolints.txt (#7798)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1622609826, "sha": "cdf6cf0f", "message": "feat(topology/sheaves/stalks): Small lemmas about stalk pushforward and stalk map (#7789)\n`Top.presheaf.stalk_pushforward` and `PresheafedSpace.stalk_map` commute with `Top.presheaf.germ`.", "changes": [{"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["add", "theorem", "stalk_map_germ", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "stalk_pushforward_germ", ["Top", "presheaf"]]]}]}, {"timestamp": 1622609825, "sha": "21641075", "message": "refactor(algebraic_geometry/structure_sheaf): Rename Spec.Top to prime_spectrum.Top (#7786)\nRenames `Spec.Top` to `prime_specturm.Top` to free up the namespace for the Spec functor.", "changes": [{"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["del", "def", "Top", ["algebraic_geometry", "Spec"]], ["mod", "theorem", "coe_open_to_localization", ["algebraic_geometry"]], ["mod", "def", "const", ["algebraic_geometry"]], ["mod", "theorem", "const_apply'", ["algebraic_geometry"]], ["mod", "theorem", "const_apply", ["algebraic_geometry"]], ["mod", "theorem", "exists_const", ["algebraic_geometry"]], ["mod", "theorem", "germ_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["mod", "theorem", "germ_to_open", ["algebraic_geometry"]], ["mod", "theorem", "germ_to_top", ["algebraic_geometry"]], ["mod", "theorem", "is_unit_to_stalk", ["algebraic_geometry"]], ["mod", "def", "localization_to_stalk", ["algebraic_geometry"]], ["mod", "theorem", "localization_to_stalk_mk'", ["algebraic_geometry"]], ["mod", "theorem", "localization_to_stalk_of", ["algebraic_geometry"]], ["mod", "theorem", "locally_const_basic_open", ["algebraic_geometry"]], ["mod", "theorem", "normalize_finite_fraction_representation", ["algebraic_geometry"]], ["mod", "def", "open_to_localization", ["algebraic_geometry"]], ["mod", "theorem", "open_to_localization_apply", ["algebraic_geometry"]], ["add", "def", "Top", ["algebraic_geometry", "prime_spectrum"]], ["mod", "theorem", "res_apply", ["algebraic_geometry"]], ["mod", "def", "stalk_iso", ["algebraic_geometry"]], ["mod", "def", "stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["mod", "theorem", "stalk_to_fiber_ring_hom_germ'", ["algebraic_geometry"]], ["mod", "theorem", "stalk_to_fiber_ring_hom_germ", ["algebraic_geometry"]], ["mod", "theorem", "stalk_to_fiber_ring_hom_to_stalk", ["algebraic_geometry"]], ["mod", "def", "structure_presheaf_in_CommRing", ["algebraic_geometry"]], ["mod", "def", "is_fraction", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "localizations", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "sections_subring", ["algebraic_geometry", "structure_sheaf"]], ["mod", "def", "structure_sheaf", ["algebraic_geometry"]], ["mod", "def", "structure_sheaf_in_Type", ["algebraic_geometry"]], ["mod", "def", "to_basic_open", ["algebraic_geometry"]], ["mod", "def", "to_open", ["algebraic_geometry"]], ["mod", "theorem", "to_open_apply", ["algebraic_geometry"]], ["mod", "theorem", "to_open_eq_const", ["algebraic_geometry"]], ["mod", "theorem", "to_open_germ", ["algebraic_geometry"]], ["mod", "theorem", "to_open_res", ["algebraic_geometry"]], ["mod", "def", "to_stalk", ["algebraic_geometry"]], ["mod", "theorem", "to_stalk_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry"]]]}]}, {"timestamp": 1622609824, "sha": "2fd0ff48", "message": "chore(order/omega_complete_partial_order): clean up references (#7781)\nfix the references rendering by adding them to the .bib", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1622609823, "sha": "5a42f808", "message": "chore(logic/embedding): move some algebra content (#7776)\nThis moves a lemma about multiplication by an element in a left/right cancellative semigroup being an embedding out of `logic.embedding`. I didn't find a great home for it, but put it with some content about regular elements, which is at least talking about similar mathematics.\nThis removes the only direct import from the `logic/` directory to the `algebra/` directory. There are still indirect imports from `logic.small`, which currently brings in `fintype` and hence the whole algebra hierarchy. I'll look at that separately.", "changes": [{"oldPath": "src/algebra/regular.lean", "newPath": "src/algebra/regular.lean", "changes": [["add", "def", "mul_left_embedding", []], ["add", "def", "mul_right_embedding", []]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["del", "def", "mul_left_embedding", []], ["del", "def", "mul_right_embedding", []]]}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}]}, {"timestamp": 1622609822, "sha": "6c912dec", "message": "feat(topology/bases): Topological basis of a product. (#7753)\nGiven a family of topological spaces `X_i` with topological bases `T_i`, this constructs the associated basis of the product topology. \nThis also includes a construction of the tautological topological basis consisting of all open sets.\nThis generalizes a lemma from LTE.", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "inducing_infi_to_pi", []]]}]}, {"timestamp": 1622609820, "sha": "4884ea53", "message": "feat(order/[conditionally_]complete_lattice): add more intro lemmas for [c][Sup, Inf] and [c][supr, infi] (#7730)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["add", "theorem", "Sup_eq_of_forall_le_of_forall_lt_exists_gt", []], ["add", "theorem", "infi_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["add", "theorem", "supr_eq_of_forall_le_of_forall_lt_exists_gt", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["del", "theorem", "cInf_intro", []], ["add", "theorem", "cSup_eq_of_forall_le_of_forall_lt_exists_gt", []], ["add", "theorem", "cSup_eq_of_is_forall_le_of_forall_le_imp_ge", []], ["del", "theorem", "cSup_intro'", []], ["del", "theorem", "cSup_intro", []], ["add", "theorem", "cinfi_eq_of_forall_ge_of_forall_gt_exists_lt", []], ["add", "theorem", "csupr_eq_of_forall_le_of_forall_lt_exists_gt", []]]}, {"oldPath": "src/topology/algebra/ordered/liminf_limsup.lean", "newPath": "src/topology/algebra/ordered/liminf_limsup.lean", "changes": []}]}, {"timestamp": 1622609819, "sha": "6b2c7a75", "message": "feat(data/finset/noncomm_prod): finset products over monoid (#7567)\nThe regular `finset.prod` and `multiset.prod` require `[comm_monoid α]`.\nOften, there are collections `s : finset α` where `[monoid α]` and we know,\nin a dependent fashion, that for all the terms `∀ (x ∈ s) (y ∈ s), commute x y`.\nThis allows to still have a well-defined product over `s`.", "changes": [{"oldPath": null, "newPath": "src/data/finset/noncomm_prod.lean", "changes": [["add", "def", "noncomm_prod", ["finset"]], ["add", "theorem", "noncomm_prod_empty", ["finset"]], ["add", "theorem", "noncomm_prod_eq_prod", ["finset"]], ["add", "theorem", "noncomm_prod_insert_of_not_mem'", ["finset"]], ["add", "theorem", "noncomm_prod_insert_of_not_mem", ["finset"]], ["add", "theorem", "noncomm_prod_to_finset", ["finset"]], ["add", "def", "noncomm_fold", ["multiset"]], ["add", "theorem", "noncomm_fold_coe", ["multiset"]], ["add", "theorem", "noncomm_fold_cons", ["multiset"]], ["add", "theorem", "noncomm_fold_empty", ["multiset"]], ["add", "theorem", "noncomm_fold_eq_fold", ["multiset"]], ["add", "def", "noncomm_foldr", ["multiset"]], ["add", "theorem", "noncomm_foldr_coe", ["multiset"]], ["add", "theorem", "noncomm_foldr_cons", ["multiset"]], ["add", "theorem", "noncomm_foldr_empty", ["multiset"]], ["add", "theorem", "noncomm_foldr_eq_foldr", ["multiset"]], ["add", "def", "noncomm_prod", ["multiset"]], ["add", "theorem", "noncomm_prod_coe", ["multiset"]], ["add", "theorem", "noncomm_prod_cons'", ["multiset"]], ["add", "theorem", "noncomm_prod_cons", ["multiset"]], ["add", "theorem", "noncomm_prod_empty", ["multiset"]], ["add", "theorem", "noncomm_prod_eq_prod", ["multiset"]]]}]}, {"timestamp": 1622589516, "sha": "681b9c29", "message": "feat(ring_theory/adjoin/basic): add missing lemmas (#7780)\nTwo missing lemmas about `adjoin`.\nThese are the `subalgebra` versions of `submodule.span_eq_of_le` and `submodule.span_eq`.", "changes": [{"oldPath": "src/ring_theory/adjoin/basic.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": [["add", "theorem", "adjoin_eq", ["algebra"]], ["add", "theorem", "adjoin_eq_of_le", ["algebra"]]]}]}, {"timestamp": 1622589515, "sha": "76f41e7e", "message": "chore(data/nat): split out data/nat/pow (#7758)\nSplit lemmas about the power operation on natural numbers into its own file; slightly reduces imports.", "changes": [{"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": [["del", "theorem", "succ_eq_one_add", ["nat"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "succ_eq_one_add", ["nat"]]]}, {"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "dvd_of_pow_dvd", ["nat"]], ["del", "theorem", "lt_pow_self", ["nat"]], ["del", "theorem", "lt_size", ["nat"]], ["del", "theorem", "lt_size_self", ["nat"]], ["del", "theorem", "lt_two_pow", ["nat"]], ["del", "theorem", "mod_pow_succ", ["nat"]], ["del", "theorem", "mul_lt_mul_pow_succ", ["nat"]], ["del", "theorem", "not_pos_pow_dvd", ["nat"]], ["del", "theorem", "one_le_pow'", ["nat"]], ["del", "theorem", "one_le_pow", ["nat"]], ["del", "theorem", "one_le_two_pow", ["nat"]], ["del", "theorem", "one_lt_pow'", ["nat"]], ["del", "theorem", "one_lt_pow", ["nat"]], ["del", "theorem", "one_lt_two_pow'", ["nat"]], ["del", "theorem", "one_lt_two_pow", ["nat"]], ["del", "theorem", "one_shiftl", ["nat"]], ["del", "theorem", "pow_div", ["nat"]], ["del", "theorem", "pow_dvd_of_le_of_pow_dvd", ["nat"]], ["del", "theorem", "pow_dvd_pow_iff_le_right'", ["nat"]], ["del", "theorem", "pow_dvd_pow_iff_le_right", ["nat"]], ["del", "theorem", "pow_dvd_pow_iff_pow_le_pow", ["nat"]], ["del", "theorem", "pow_le_iff_le_left", ["nat"]], ["del", "theorem", "pow_le_iff_le_right", ["nat"]], ["del", "theorem", "pow_le_pow_of_le_right", ["nat"]], ["del", "theorem", "pow_left_injective", ["nat"]], ["del", "theorem", "pow_left_strict_mono", ["nat"]], ["del", "theorem", "pow_lt_iff_lt_left", ["nat"]], ["del", "theorem", "pow_lt_iff_lt_right", ["nat"]], ["del", "theorem", "pow_lt_pow_of_lt_left", ["nat"]], ["del", "theorem", "pow_lt_pow_of_lt_right", ["nat"]], ["del", "theorem", "pow_lt_pow_succ", ["nat"]], ["del", "theorem", "pow_right_injective", ["nat"]], ["del", "theorem", "pow_right_strict_mono", ["nat"]], ["del", "theorem", "shiftl'_ne_zero_left", ["nat"]], ["del", "theorem", "shiftl'_tt_eq_mul_pow", ["nat"]], ["del", "theorem", "shiftl'_tt_ne_zero", ["nat"]], ["del", "theorem", "shiftl_eq_mul_pow", ["nat"]], ["del", "theorem", "shiftr_eq_div_pow", ["nat"]], ["del", "theorem", "size_bit0", ["nat"]], ["del", "theorem", "size_bit1", ["nat"]], ["del", "theorem", "size_bit", ["nat"]], ["del", "theorem", "size_eq_zero", ["nat"]], ["del", "theorem", "size_le", ["nat"]], ["del", "theorem", "size_le_size", ["nat"]], ["del", "theorem", "size_one", ["nat"]], ["del", "theorem", "size_pos", ["nat"]], ["del", "theorem", "size_pow", ["nat"]], ["del", "theorem", "size_shiftl'", ["nat"]], ["del", "theorem", "size_shiftl", ["nat"]], ["del", "theorem", "size_zero", ["nat"]], ["del", "theorem", "sq_sub_sq", ["nat"]], ["del", "theorem", "zero_shiftl", ["nat"]], ["del", "theorem", "zero_shiftr", ["nat"]], ["del", "theorem", "nat_pow", ["strict_mono"]]]}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/pow.lean", "changes": [["add", "theorem", "dvd_of_pow_dvd", ["nat"]], ["add", "theorem", "lt_pow_self", ["nat"]], ["add", "theorem", "lt_size", ["nat"]], ["add", "theorem", "lt_size_self", ["nat"]], ["add", "theorem", "lt_two_pow", ["nat"]], ["add", "theorem", "mod_pow_succ", ["nat"]], ["add", "theorem", "mul_lt_mul_pow_succ", ["nat"]], ["add", "theorem", "not_pos_pow_dvd", ["nat"]], ["add", "theorem", "one_le_pow'", ["nat"]], ["add", "theorem", "one_le_pow", ["nat"]], ["add", "theorem", "one_le_two_pow", ["nat"]], ["add", "theorem", "one_lt_pow'", ["nat"]], ["add", "theorem", "one_lt_pow", ["nat"]], ["add", "theorem", "one_lt_two_pow'", ["nat"]], ["add", "theorem", "one_lt_two_pow", ["nat"]], ["add", "theorem", "one_shiftl", ["nat"]], ["add", "theorem", "pow_div", ["nat"]], ["add", "theorem", "pow_dvd_of_le_of_pow_dvd", ["nat"]], ["add", "theorem", "pow_dvd_pow_iff_le_right'", ["nat"]], ["add", "theorem", "pow_dvd_pow_iff_le_right", ["nat"]], ["add", "theorem", "pow_dvd_pow_iff_pow_le_pow", ["nat"]], ["add", "theorem", "pow_le_iff_le_left", ["nat"]], ["add", "theorem", "pow_le_iff_le_right", ["nat"]], ["add", "theorem", "pow_le_pow_of_le_right", ["nat"]], ["add", "theorem", "pow_left_injective", ["nat"]], ["add", "theorem", "pow_left_strict_mono", ["nat"]], ["add", "theorem", "pow_lt_iff_lt_left", ["nat"]], ["add", "theorem", "pow_lt_iff_lt_right", ["nat"]], ["add", "theorem", "pow_lt_pow_of_lt_left", ["nat"]], ["add", "theorem", "pow_lt_pow_of_lt_right", ["nat"]], ["add", "theorem", "pow_lt_pow_succ", ["nat"]], ["add", "theorem", "pow_right_injective", ["nat"]], ["add", "theorem", "pow_right_strict_mono", ["nat"]], ["add", "theorem", "shiftl'_ne_zero_left", ["nat"]], ["add", "theorem", "shiftl'_tt_eq_mul_pow", ["nat"]], ["add", "theorem", "shiftl'_tt_ne_zero", ["nat"]], ["add", "theorem", "shiftl_eq_mul_pow", ["nat"]], ["add", "theorem", "shiftr_eq_div_pow", ["nat"]], ["add", "theorem", "size_bit0", ["nat"]], ["add", "theorem", "size_bit1", ["nat"]], ["add", "theorem", "size_bit", ["nat"]], ["add", "theorem", "size_eq_zero", ["nat"]], ["add", "theorem", "size_le", ["nat"]], ["add", "theorem", "size_le_size", ["nat"]], ["add", "theorem", "size_one", ["nat"]], ["add", "theorem", "size_pos", ["nat"]], ["add", "theorem", "size_pow", ["nat"]], ["add", "theorem", "size_shiftl'", ["nat"]], ["add", "theorem", "size_shiftl", ["nat"]], ["add", "theorem", "size_zero", ["nat"]], ["add", "theorem", "sq_sub_sq", ["nat"]], ["add", "theorem", "zero_shiftl", ["nat"]], ["add", "theorem", "zero_shiftr", ["nat"]], ["add", "theorem", "nat_pow", ["strict_mono"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}]}, {"timestamp": 1622589515, "sha": "2689c517", "message": "feat(category_theory/abelian): abelian categories with enough projectives have projective resolutions (#7488)", "changes": [{"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": [["add", "def", "of", ["category_theory", "ProjectiveResolution"]], ["add", "def", "of_complex", ["category_theory", "ProjectiveResolution"]]]}]}, {"timestamp": 1622578640, "sha": "4e7c6b27", "message": "chore(algebra/associated): weaken some typeclass assumptions (#7760)\nAlso golf ne_zero_iff_of_associated a little.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "associated_of_irreducible_of_dvd", []], ["mod", "theorem", "dvd_iff_dvd_of_rel_left", []], ["mod", "theorem", "dvd_iff_dvd_of_rel_right", []], ["mod", "theorem", "eq_zero_iff_of_associated", []], ["mod", "theorem", "irreducible_iff_of_associated", []], ["mod", "theorem", "irreducible_of_associated", []], ["mod", "theorem", "ne_zero_iff_of_associated", []]]}]}, {"timestamp": 1622562008, "sha": "8527efd1", "message": "feat(topology/connected): prod.totally_disconnected_space (#7747)\nFrom LTE.", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}]}, {"timestamp": 1622562007, "sha": "abe146f7", "message": "feat(linear_map): to_*_linear_map_injective (#7746)\nFrom LTE.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "to_int_linear_map_injective", ["add_monoid_hom"]], ["add", "theorem", "to_nat_linear_map_injective", ["add_monoid_hom"]], ["add", "theorem", "to_rat_linear_map_injective", ["add_monoid_hom"]]]}]}, {"timestamp": 1622550538, "sha": "88685b03", "message": "feat(linear_algebra/tensor_product): Add is_scalar_tower instances (#6741)\nIf either the left- or right-hand type of a tensor product forms a scalar tower, then the tensor product forms the same tower.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1622524812, "sha": "31ba155f", "message": "feat(algebraic_topology/cech_nerve): The Cech nerve is a right adjoint. (#7716)\nAlso fixes the namespace in the file `algebraic_topology/cech_nerve.lean`.\nThis is needed for LTE", "changes": [{"oldPath": "src/algebraic_topology/cech_nerve.lean", "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": [["add", "def", "augmented_cech_conerve", ["category_theory", "arrow"]], ["add", "def", "cech_conerve", ["category_theory", "arrow"]], ["add", "def", "augmented_cech_conerve", ["category_theory", "cosimplicial_object"]], ["add", "def", "cech_conerve", ["category_theory", "cosimplicial_object"]], ["add", "def", "cech_conerve_adjunction", ["category_theory", "cosimplicial_object"]], ["add", "def", "cech_conerve_equiv", ["category_theory", "cosimplicial_object"]], ["add", "def", "equivalence_left_to_right", ["category_theory", "cosimplicial_object"]], ["add", "def", "equivalence_right_to_left", ["category_theory", "cosimplicial_object"]], ["add", "def", "augmented_cech_nerve", ["category_theory", "simplicial_object"]], ["add", "def", "cech_nerve", ["category_theory", "simplicial_object"]], ["add", "def", "cech_nerve_adjunction", ["category_theory", "simplicial_object"]], ["add", "def", "cech_nerve_equiv", ["category_theory", "simplicial_object"]], ["add", "def", "equivalence_left_to_right", ["category_theory", "simplicial_object"]], ["add", "def", "equivalence_right_to_left", ["category_theory", "simplicial_object"]], ["del", "def", "augmented_cech_nerve", ["simplicial_object"]], ["del", "def", "cech_nerve", ["simplicial_object"]]]}, {"oldPath": "src/algebraic_topology/simplex_category.lean", "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["add", "def", "const", ["simplex_category"]], ["add", "theorem", "const_comp", ["simplex_category"]]]}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "to_arrow", ["category_theory", "cosimplicial_object", "augmented"]], ["add", "def", "to_arrow", ["category_theory", "simplicial_object", "augmented"]]]}]}, {"timestamp": 1622517951, "sha": "272a930a", "message": "chore(scripts): update nolints.txt (#7775)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1622512344, "sha": "4c2bfdeb", "message": "chore(order/pilex): add docstring (#7769)\n- add module docstring\n- extend `ordered_add_comm_group (pilex ι β)` using `to_additive`", "changes": [{"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}]}, {"timestamp": 1622512343, "sha": "a8f5cc19", "message": "feat(algebra/homology): i-th component of a chain map as a →+ (#7743)\nFrom LTE.", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": [["add", "def", "f_add_monoid_hom", ["homological_complex", "hom"]]]}]}, {"timestamp": 1622495286, "sha": "bec3e595", "message": "feat(data/finset): provide the coercion `finset α → Type*` (#7575)\nThere doesn't seem to be a good reason that `finset` doesn't have a `coe_to_sort` like `set` does. Before the change in this PR, we had to suffer the inconvenience of writing `(↑s : set _)` whenever we want the subtype of all elements of `s`. Now you can just write `s`.\nI removed the obvious instances of the `((↑s : set _) : Type*)` pattern, although it definitely remains in some places. I'd rather do those in separate PRs since it does not really do any harm except for being annoying to type. There are also some parts of the API (`polynomial.root_set` stands out to me) that could be designed around the use of `finset`s rather than `set`s that are later proved to be finite, which I again would like to declare out of scope.", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/combinatorics/hall.lean", "newPath": "src/combinatorics/hall.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "apply_coe_mem_map", ["finset"]], ["add", "theorem", "coe_sort_coe", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["mod", "def", "order_iso_of_fin", ["finset"]], ["mod", "theorem", "order_iso_of_fin_symm_apply", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_eq_attach", ["finset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "coe_sort_to_finset", ["set", "finite"]]]}, {"oldPath": "src/field_theory/finiteness.lean", "newPath": "src/field_theory/finiteness.lean", "changes": [["add", "theorem", "coe_sort_finset_basis_index", ["is_noetherian"]]]}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "vector_span_eq_span_vsub_finset_right_ne", []]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "of_finset_basis", ["finite_dimensional"]], ["add", "theorem", "finrank_span_finset_eq_card", []], ["add", "theorem", "finrank_span_finset_le_card", []]]}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": [["mod", "def", "fun_equiv_degree_lt", ["lagrange"]], ["mod", "def", "linterpolate", ["lagrange"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "finset_card", ["cardinal"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1622495285, "sha": "ca740b64", "message": "feat(data/finset/powerset): ssubsets and decidability (#7543)\nA few more little additions to finset-world that I found useful.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "ssubset_iff_subset_ne", ["finset"]]]}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["add", "def", "decidable_exists_of_decidable_ssubsets'", ["finset"]], ["add", "def", "decidable_exists_of_decidable_subsets'", ["finset"]], ["add", "def", "decidable_forall_of_decidable_ssubsets'", ["finset"]], ["add", "def", "decidable_forall_of_decidable_subsets'", ["finset"]], ["add", "theorem", "empty_mem_ssubsets", ["finset"]], ["add", "theorem", "mem_ssubsets", ["finset"]], ["add", "def", "ssubsets", ["finset"]]]}]}, {"timestamp": 1622481615, "sha": "d2723432", "message": "chore(order/lexicographic): add module docstring (#7768)\nadd module docstring", "changes": [{"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}]}, {"timestamp": 1622481614, "sha": "033a131a", "message": "chore(order/zorn): add module docstring (#7767)\nadd module docstring, tidy up notation a bit", "changes": [{"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["mod", "theorem", "directed_of_chain", []], ["mod", "theorem", "directed_on", ["zorn", "chain"]], ["mod", "theorem", "image", ["zorn", "chain"]], ["mod", "theorem", "mono", ["zorn", "chain"]], ["mod", "theorem", "symm", ["zorn", "chain"]], ["mod", "theorem", "total", ["zorn", "chain"]], ["mod", "theorem", "total_of_refl", ["zorn", "chain"]], ["mod", "theorem", "chain_chain_closure", ["zorn"]], ["mod", "inductive", "chain_closure", ["zorn"]], ["mod", "theorem", "chain_closure_closure", ["zorn"]], ["mod", "theorem", "chain_closure_empty", ["zorn"]], ["mod", "theorem", "chain_closure_succ_fixpoint", ["zorn"]], ["mod", "theorem", "chain_closure_succ_fixpoint_iff", ["zorn"]], ["mod", "theorem", "chain_closure_total", ["zorn"]], ["mod", "theorem", "chain_insert", ["zorn"]], ["mod", "theorem", "chain_succ", ["zorn"]], ["mod", "theorem", "succ_increasing", ["zorn"]], ["mod", "theorem", "succ_spec", ["zorn"]], ["mod", "theorem", "super_of_not_max", ["zorn"]]]}]}, {"timestamp": 1622476163, "sha": "d0ebc8ef", "message": "feat(ring_theory/laurent_series): Defines Laurent series and their localization map (#7604)\nDefines `laurent_series` as an abbreviation of `hahn_series Z`\nDefines `laurent_series.power_series_part`\nShows that the map from power series to Laurent series is a `localization_map`.", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["mod", "def", "of_power_series", ["hahn_series"]], ["add", "theorem", "of_power_series_apply", ["hahn_series"]], ["add", "theorem", "of_power_series_apply_coeff", ["hahn_series"]], ["add", "theorem", "of_power_series_injective", ["hahn_series"]]]}, {"oldPath": null, "newPath": "src/ring_theory/laurent_series.lean", "changes": [["add", "theorem", "coe_power_series", ["laurent_series"]], ["add", "theorem", "coeff_coe_power_series", ["laurent_series"]], ["add", "theorem", "of_power_series_X", ["laurent_series"]], ["add", "theorem", "of_power_series_X_pow", ["laurent_series"]], ["add", "def", "of_power_series_localization", ["laurent_series"]], ["add", "theorem", "of_power_series_power_series_part", ["laurent_series"]], ["add", "def", "power_series_part", ["laurent_series"]], ["add", "theorem", "power_series_part_coeff", ["laurent_series"]], ["add", "theorem", "power_series_part_eq_zero", ["laurent_series"]], ["add", "theorem", "power_series_part_zero", ["laurent_series"]], ["add", "theorem", "single_order_mul_power_series_part", ["laurent_series"]], ["add", "def", "laurent_series", []]]}]}, {"timestamp": 1622471707, "sha": "4555798c", "message": "feat(topology/semicontinuous): semicontinuity of compositions (#7763)", "changes": [{"oldPath": "src/topology/semicontinuous.lean", "newPath": "src/topology/semicontinuous.lean", "changes": [["add", "theorem", "comp_lower_semicontinuous", ["continuous"]], ["add", "theorem", "comp_lower_semicontinuous_antimono", ["continuous"]], ["add", "theorem", "comp_lower_semicontinuous_on", ["continuous"]], ["add", "theorem", "comp_lower_semicontinuous_on_antimono", ["continuous"]], ["add", "theorem", "comp_upper_semicontinuous", ["continuous"]], ["add", "theorem", "comp_upper_semicontinuous_antimono", ["continuous"]], ["add", "theorem", "comp_upper_semicontinuous_on", ["continuous"]], ["add", "theorem", "comp_upper_semicontinuous_on_antimono", ["continuous"]], ["add", "theorem", "comp_lower_semicontinuous_at", ["continuous_at"]], ["add", "theorem", "comp_lower_semicontinuous_at_antimono", ["continuous_at"]], ["add", "theorem", "comp_lower_semicontinuous_within_at", ["continuous_at"]], ["add", "theorem", "comp_lower_semicontinuous_within_at_antimono", ["continuous_at"]], ["add", "theorem", "comp_upper_semicontinuous_at", ["continuous_at"]], ["add", "theorem", "comp_upper_semicontinuous_at_antimono", ["continuous_at"]], ["add", "theorem", "comp_upper_semicontinuous_within_at", ["continuous_at"]], ["add", "theorem", "comp_upper_semicontinuous_within_at_antimono", ["continuous_at"]]]}]}, {"timestamp": 1622467094, "sha": "2af69127", "message": "feat(linear_algebra): the determinant of an endomorphism (#7635)\n `linear_map.det` is the determinant of an endomorphism, which is defined independent of a basis. If there is no finite basis, the determinant is defined to be equal to `1`.\nThis approach is inspired by `linear_map.trace`.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "coe_det", ["linear_map"]], ["add", "def", "det_aux", ["linear_map"]], ["add", "theorem", "det_aux_comp", ["linear_map"]], ["add", "theorem", "det_aux_def'", ["linear_map"]], ["add", "theorem", "det_aux_def", ["linear_map"]], ["add", "theorem", "det_aux_id", ["linear_map"]], ["add", "theorem", "det_comp", ["linear_map"]], ["add", "theorem", "det_eq_det_to_matrix_of_finite_set", ["linear_map"]], ["add", "theorem", "det_id", ["linear_map"]], ["add", "theorem", "det_to_matrix", ["linear_map"]], ["add", "theorem", "det_to_matrix_eq_det_to_matrix", ["linear_map"]], ["add", "theorem", "det_zero", ["linear_map"]]]}]}, {"timestamp": 1622467093, "sha": "7fe456d8", "message": "feat(algebra/homology): projective resolutions (#7486)\n# Projective resolutions\nA projective resolution `P : ProjectiveResolution Z` of an object `Z : C` consists of\na `ℕ`-indexed chain complex `P.complex` of projective objects,\nalong with a chain map `P.π` from `C` to the chain complex consisting just of `Z` in degree zero,\nso that the augmented chain complex is exact.\nWhen `C` is abelian, this exactness condition is equivalent to `π` being a quasi-isomorphism.\nIt turns out that this formulation allows us to set up the basic theory derived functors\nwithout even assuming `C` is abelian.\n(Typically, however, to show `has_projective_resolutions C`\none will assume `enough_projectives C` and `abelian C`.\nThis construction appears in `category_theory.abelian.projectives`.)\nWe show that give `P : ProjectiveResolution X` and `Q : ProjectiveResolution Y`,\nany morphism `X ⟶ Y` admits a lift to a chain map `P.complex ⟶ Q.complex`.\n(It is a lift in the sense that\nthe projection maps `P.π` and `Q.π` intertwine the lift and the original morphism.)\nMoreover, we show that any two such lifts are homotopic.\nAs a consequence, if every object admits a projective resolution,\nwe can construct a functor `projective_resolutions C : C ⥤ homotopy_category C`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/preadditive/projective_resolution.lean", "changes": [["add", "def", "homotopy_equiv", ["category_theory", "ProjectiveResolution"]], ["add", "theorem", "homotopy_equiv_hom_π", ["category_theory", "ProjectiveResolution"]], ["add", "theorem", "homotopy_equiv_inv_π", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift", ["category_theory", "ProjectiveResolution"]], ["add", "theorem", "lift_commutes", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_comp_homotopy", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_f_one", ["category_theory", "ProjectiveResolution"]], ["add", "theorem", "lift_f_one_zero_comm", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_f_succ", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_f_zero", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_homotopy", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_homotopy_zero", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_homotopy_zero_one", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_homotopy_zero_succ", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_homotopy_zero_zero", ["category_theory", "ProjectiveResolution"]], ["add", "def", "lift_id_homotopy", ["category_theory", "ProjectiveResolution"]], ["add", "def", "self", ["category_theory", "ProjectiveResolution"]], ["add", "theorem", "π_f_succ", ["category_theory", "ProjectiveResolution"]], ["add", "structure", "ProjectiveResolution", ["category_theory"]], ["add", "def", "lift", ["category_theory", "projective_resolution"]], ["add", "def", "π", ["category_theory", "projective_resolution"]], ["add", "def", "projective_resolution", ["category_theory"]], ["add", "def", "projective_resolutions", ["category_theory"]]]}]}, {"timestamp": 1622443522, "sha": "1a92c0de", "message": "feat(order/basic): add simp attribute on le_refl, zero_le_one and zero_lt_one (#7733)\nThese ones show up so often that they would have deserved a simp attribute long ago.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "zero_le_one", []], ["mod", "theorem", "zero_lt_one", []]]}, {"oldPath": "src/analysis/complex/isometry.lean", "newPath": "src/analysis/complex/isometry.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["mod", "theorem", "extend_one", ["path"]], ["mod", "theorem", "extend_zero", ["path"]]]}, {"oldPath": "src/topology/unit_interval.lean", "newPath": "src/topology/unit_interval.lean", "changes": [["add", "theorem", "mk_one", ["unit_interval"]], ["add", "theorem", "mk_zero", ["unit_interval"]]]}, {"oldPath": "test/nontriviality.lean", "newPath": "test/nontriviality.lean", "changes": []}]}, {"timestamp": 1622408998, "sha": "fd48ac55", "message": "chore(data/list): extract sublists to a separate file (#7757)\nMinor splitting in `data/list/basic`, splitting out `sublists` to its own file, thereby delaying importing `data.nat.choose` in the `list` development.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "length_of_sublists_len", ["list"]], ["del", "theorem", "length_sublists'", ["list"]], ["del", "theorem", "length_sublists", ["list"]], ["del", "theorem", "length_sublists_len", ["list"]], ["del", "theorem", "map_ret_sublist_sublists", ["list"]], ["del", "theorem", "map_sublists'_aux", ["list"]], ["del", "theorem", "mem_sublists'", ["list"]], ["del", "theorem", "mem_sublists", ["list"]], ["del", "theorem", "mem_sublists_len", ["list"]], ["del", "theorem", "mem_sublists_len_self", ["list"]], ["del", "theorem", "sublists'_aux_append", ["list"]], ["del", "theorem", "sublists'_aux_eq_sublists'", ["list"]], ["del", "theorem", "sublists'_cons", ["list"]], ["del", "theorem", "sublists'_eq_sublists", ["list"]], ["del", "theorem", "sublists'_nil", ["list"]], ["del", "theorem", "sublists'_reverse", ["list"]], ["del", "theorem", "sublists'_singleton", ["list"]], ["del", "theorem", "sublists_append", ["list"]], ["del", "theorem", "sublists_aux_cons_append", ["list"]], ["del", "theorem", "sublists_aux_cons_cons", ["list"]], ["del", "theorem", "sublists_aux_cons_eq_sublists_aux₁", ["list"]], ["del", "theorem", "aux", ["list", "sublists_aux_eq_foldr"]], ["del", "theorem", "sublists_aux_eq_foldr", ["list"]], ["del", "theorem", "sublists_aux_ne_nil", ["list"]], ["del", "theorem", "sublists_aux₁_append", ["list"]], ["del", "theorem", "sublists_aux₁_bind", ["list"]], ["del", "theorem", "sublists_aux₁_concat", ["list"]], ["del", "theorem", "sublists_aux₁_eq_sublists_aux", ["list"]], ["del", "theorem", "sublists_concat", ["list"]], ["del", "theorem", "sublists_eq_sublists'", ["list"]], ["del", "def", "sublists_len", ["list"]], ["del", "def", "sublists_len_aux", ["list"]], ["del", "theorem", "sublists_len_aux_append", ["list"]], ["del", "theorem", "sublists_len_aux_eq", ["list"]], ["del", "theorem", "sublists_len_aux_zero", ["list"]], ["del", "theorem", "sublists_len_sublist_of_sublist", ["list"]], ["del", "theorem", "sublists_len_sublist_sublists'", ["list"]], ["del", "theorem", "sublists_len_succ_cons", ["list"]], ["del", "theorem", "sublists_len_succ_nil", ["list"]], ["del", "theorem", "sublists_len_zero", ["list"]], ["del", "theorem", "sublists_nil", ["list"]], ["del", "theorem", "sublists_reverse", ["list"]], ["del", "theorem", "sublists_singleton", ["list"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/sublists.lean", "changes": [["add", "theorem", "length_of_sublists_len", ["list"]], ["add", "theorem", "length_sublists'", ["list"]], ["add", "theorem", "length_sublists", ["list"]], ["add", "theorem", "length_sublists_len", ["list"]], ["add", "theorem", "map_ret_sublist_sublists", ["list"]], ["add", "theorem", "map_sublists'_aux", ["list"]], ["add", "theorem", "mem_sublists'", ["list"]], ["add", "theorem", "mem_sublists", ["list"]], ["add", "theorem", "mem_sublists_len", ["list"]], ["add", "theorem", "mem_sublists_len_self", ["list"]], ["add", "theorem", "sublists'_aux_append", ["list"]], ["add", "theorem", "sublists'_aux_eq_sublists'", ["list"]], ["add", "theorem", "sublists'_cons", ["list"]], ["add", "theorem", "sublists'_eq_sublists", ["list"]], ["add", "theorem", "sublists'_nil", ["list"]], ["add", "theorem", "sublists'_reverse", ["list"]], ["add", "theorem", "sublists'_singleton", ["list"]], ["add", "theorem", "sublists_append", ["list"]], ["add", "theorem", "sublists_aux_cons_append", ["list"]], ["add", "theorem", "sublists_aux_cons_cons", ["list"]], ["add", "theorem", "sublists_aux_cons_eq_sublists_aux₁", ["list"]], ["add", "theorem", "aux", ["list", "sublists_aux_eq_foldr"]], ["add", "theorem", "sublists_aux_eq_foldr", ["list"]], ["add", "theorem", "sublists_aux_ne_nil", ["list"]], ["add", "theorem", "sublists_aux₁_append", ["list"]], ["add", "theorem", "sublists_aux₁_bind", ["list"]], ["add", "theorem", "sublists_aux₁_concat", ["list"]], ["add", "theorem", "sublists_aux₁_eq_sublists_aux", ["list"]], ["add", "theorem", "sublists_concat", ["list"]], ["add", "theorem", "sublists_eq_sublists'", ["list"]], ["add", "def", "sublists_len", ["list"]], ["add", "def", "sublists_len_aux", ["list"]], ["add", "theorem", "sublists_len_aux_append", ["list"]], ["add", "theorem", "sublists_len_aux_eq", ["list"]], ["add", "theorem", "sublists_len_aux_zero", ["list"]], ["add", "theorem", "sublists_len_sublist_of_sublist", ["list"]], ["add", "theorem", "sublists_len_sublist_sublists'", ["list"]], ["add", "theorem", "sublists_len_succ_cons", ["list"]], ["add", "theorem", "sublists_len_succ_nil", ["list"]], ["add", "theorem", "sublists_len_zero", ["list"]], ["add", "theorem", "sublists_nil", ["list"]], ["add", "theorem", "sublists_reverse", ["list"]], ["add", "theorem", "sublists_singleton", ["list"]]]}]}, {"timestamp": 1622408997, "sha": "14b597c3", "message": "feat(analysis/normed_space): ∥n • a∥ ≤ n * ∥a∥ (#7745)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_gsmul_le", []], ["add", "theorem", "nnnorm_nsmul_le", []], ["add", "theorem", "norm_gsmul_le", []], ["add", "theorem", "norm_nsmul_le", []]]}]}, {"timestamp": 1622402146, "sha": "0d842f08", "message": "fix(order/closure): unincorporated reviewer comments from #7446 (#7761)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}]}, {"timestamp": 1622388393, "sha": "33d803aa", "message": "refactor(convex/basic): make convex_hull into a closure operator (#7446)\nBundle convex_hull as a closure operator, simplify duplicate proofs", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "def", "convex_hull", []]]}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}]}, {"timestamp": 1622368490, "sha": "25e36bea", "message": "chore(data/fintype/basic): `fintype α/β` from `fintype α ⊕ β` (#7736)\nAlso renaming the equivalent `α × β` versions, for consistency.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "def", "fintype_prod_left", ["fintype"]], ["del", "def", "fintype_prod_right", ["fintype"]], ["add", "def", "prod_left", ["fintype"]], ["add", "def", "prod_right", ["fintype"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1622368490, "sha": "4ea253b7", "message": "feat(measure_theory/integration): in a sigma finite space, there exists an integrable positive function (#7721)", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "nnreal_tsum", ["measurable"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "exists_integrable_pos_of_sigma_finite", ["measure_theory"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_pos", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "has_sum_lt", ["nnreal"]], ["add", "theorem", "has_sum_strict_mono", ["nnreal"]], ["add", "theorem", "tsum_eq_to_nnreal_tsum", ["nnreal"]], ["add", "theorem", "tsum_lt_tsum", ["nnreal"]], ["add", "theorem", "tsum_pos", ["nnreal"]], ["add", "theorem", "tsum_strict_mono", ["nnreal"]]]}]}, {"timestamp": 1622363380, "sha": "8e25bb6c", "message": "feat(algebra/homology): complexes in functor categories (#7744)\nFrom LTE.", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/functor.lean", "changes": [["add", "def", "as_functor", ["homological_complex"]], ["add", "def", "complex_of_functors_to_functor_to_complex", ["homological_complex"]]]}]}, {"timestamp": 1622363379, "sha": "f4d145ee", "message": "feat(algebra/homology): construct isomorphisms of complexes (#7741)\nFrom LTE.", "changes": [{"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "def", "iso_app", ["homological_complex", "hom"]], ["add", "def", "iso_of_components", ["homological_complex", "hom"]], ["add", "theorem", "iso_of_components_app", ["homological_complex", "hom"]]]}]}, {"timestamp": 1622363378, "sha": "08bb1125", "message": "chore(ring_theory/hahn_series): extract lemmas from slow definitions (#7737)\nThis doesn't make them much faster, but it makes it easier to tell which bits are slow", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "emb_domain_add", ["hahn_series"]], ["add", "theorem", "emb_domain_mul", ["hahn_series"]], ["add", "theorem", "emb_domain_one", ["hahn_series"]], ["add", "theorem", "emb_domain_smul", ["hahn_series"]]]}]}, {"timestamp": 1622349213, "sha": "e2168e55", "message": "feat(src/ring_theory/derivation): merge duplicates `derivation.comp` and `linear_map.comp_der` (#7727)\nI propose keeping the version introduced in #7715 since it also contains\nthe statement that the push forward is linear, but moving it to the `linear_map`\nnamespace to enable dot notation.\nThanks to @Nicknamen for alerting me to the duplication: https://github.com/leanprover-community/mathlib/pull/7715#issuecomment-849192370", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["del", "def", "comp", ["derivation"]], ["mod", "def", "comp_der", ["linear_map"]], ["del", "theorem", "comp_der_apply", ["linear_map"]]]}]}, {"timestamp": 1622349212, "sha": "9d63c388", "message": "feat(topology/continuous_function/algebra): add `coe_fn_(linear_map|ring_hom|alg_hom)` (#7720)", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["add", "def", "coe_fn_alg_hom", ["continuous_map"]], ["add", "def", "coe_fn_linear_map", ["continuous_map"]], ["add", "def", "coe_fn_ring_hom", ["continuous_map"]]]}]}, {"timestamp": 1622337412, "sha": "a3ba4d47", "message": "feat(algebra/homology): eval and forget functors (#7742)\nFrom LTE.", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebra/homology/differential_object.lean", "newPath": "src/algebra/homology/differential_object.lean", "changes": []}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "def", "eval", ["homological_complex"]], ["del", "def", "eval_at", ["homological_complex"]], ["add", "def", "forget", ["homological_complex"]], ["add", "def", "forget_eval", ["homological_complex"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["add", "def", "eval", ["category_theory", "graded_object"]]]}]}, {"timestamp": 1622312117, "sha": "035aa60b", "message": "feat(analysis/normed_space): SemiNormedGroup.has_zero_object (#7740)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed_space/SemiNormedGroup.lean", "newPath": "src/analysis/normed_space/SemiNormedGroup.lean", "changes": [["add", "theorem", "coe_comp", ["SemiNormedGroup"]], ["add", "theorem", "zero_apply", ["SemiNormedGroup"]]]}]}, {"timestamp": 1622255563, "sha": "1ac49b0e", "message": "chore(category_theory): dualize filtered categories to cofiltered categories (#7731)\nPer request on [zulip](https://leanprover.zulipchat.com/#narrow/stream/267928-condensed-mathematics/topic/status.20update/near/240548989).\nI have not attempted to dualize \"filtered colimits commute with finite limits\", as I've never heard of that being used.", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": [["add", "theorem", "cone_nonempty", ["category_theory", "is_cofiltered"]], ["add", "theorem", "eq_condition", ["category_theory", "is_cofiltered"]], ["add", "def", "inf", ["category_theory", "is_cofiltered"]], ["add", "theorem", "inf_exists", ["category_theory", "is_cofiltered"]], ["add", "theorem", "inf_objs_exists", ["category_theory", "is_cofiltered"]], ["add", "def", "inf_to", ["category_theory", "is_cofiltered"]], ["add", "theorem", "inf_to_commutes", ["category_theory", "is_cofiltered"]], ["add", "theorem", "of_equivalence", ["category_theory", "is_cofiltered"]], ["add", "theorem", "of_is_left_adjoint", ["category_theory", "is_cofiltered"]], ["add", "theorem", "of_left_adjoint", ["category_theory", "is_cofiltered"]]]}]}, {"timestamp": 1622229167, "sha": "f74a3753", "message": "chore(linear_algebra/finsupp): remove useless lemma (#7734)\nThe lemma is not used in mathlib, it's mathematically useless (you'd never have a surjective function from an indexing set to a module), and it's badly named, so I propose removing it entirely.", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["del", "theorem", "total_range", ["finsupp"]]]}]}, {"timestamp": 1622215287, "sha": "13746fe0", "message": "feat(group_theory/subgroup linear_algebra/prod): add ker_prod_map (#7729)\nThe kernel of the product of two `group_hom` is the product of the kernels (and similarly for monoids).", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "ker_prod_map", ["monoid_hom"]], ["add", "theorem", "prod_map_comap_prod", ["monoid_hom"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "ker_prod_map", ["linear_map"]], ["add", "theorem", "prod_map_comap_prod", ["linear_map"]]]}]}, {"timestamp": 1622202901, "sha": "5fff3b19", "message": "feat(ring_theory/mv_polynomial/basic): add polynomial.basis_monomials (#7728)\nWe add `polynomial.basis_monomials` : the monomials form a basis on `polynomial R`.\nBecause of the structure of the import, it seems to me a little complicated to do it directly, so I use `mv_polynomial.punit_alg_equiv`", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "def", "equiv_fun_on_fintype", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["mod", "theorem", "C_eq_algebra_map", ["polynomial"]], ["add", "def", "to_finsupp_iso_alg", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "theorem", "monomial_one_right_eq_X_pow", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": [["add", "theorem", "coe_basis_monomials", ["polynomial"]]]}]}, {"timestamp": 1622106077, "sha": "5360e476", "message": "feat(algebra/module/linear_map): `linear_(map|equiv).restrict_scalars` is injective (#7725)\nSo as not to repeat them for the lemmas, I moved the typeclasses into a `variables` statement.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "def", "restrict_scalars", ["linear_equiv"]], ["add", "theorem", "restrict_scalars_inj", ["linear_equiv"]], ["add", "theorem", "restrict_scalars_injective", ["linear_equiv"]], ["mod", "def", "restrict_scalars", ["linear_map"]], ["add", "theorem", "restrict_scalars_inj", ["linear_map"]], ["add", "theorem", "restrict_scalars_injective", ["linear_map"]]]}]}, {"timestamp": 1622094467, "sha": "61095582", "message": "chore(category_theory/*): provide aliases quiver.hom.le and has_le.le.hom (#7677)", "changes": [{"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["mod", "theorem", "hom_of_le_le_of_hom", ["category_theory"]], ["mod", "theorem", "hom_of_le_refl", ["category_theory"]], ["mod", "theorem", "le_of_hom_hom_of_le", ["category_theory"]]]}, {"oldPath": "src/category_theory/category/pairwise.lean", "newPath": "src/category_theory/category/pairwise.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "theorem", "to_eq", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["mod", "theorem", "le_of_op_hom", ["category_theory"]], ["mod", "def", "op_hom_of_le", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/spaces.lean", "newPath": "src/category_theory/sites/spaces.lean", "changes": []}, {"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/types.lean", "newPath": "src/category_theory/subobject/types.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite/as_limit.lean", "newPath": "src/topology/category/Profinite/as_limit.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["mod", "def", "bot_le", ["topological_space", "opens"]], ["mod", "def", "inf_le_left", ["topological_space", "opens"]], ["mod", "def", "inf_le_right", ["topological_space", "opens"]], ["mod", "def", "le_supr", ["topological_space", "opens"]], ["mod", "def", "le_top", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "newPath": "src/topology/sheaves/sheaf_condition/unique_gluing.lean", "changes": []}]}, {"timestamp": 1622076389, "sha": "a85fbdae", "message": "feat(algebra/opposites): add units.op_equiv (#7723)", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "coe_op_equiv_symm", ["units"]], ["add", "theorem", "coe_unop_op_equiv", ["units"]], ["add", "def", "op_equiv", ["units"]]]}]}, {"timestamp": 1622076388, "sha": "20291d00", "message": "feat(topology/semicontinuous): basics on lower and upper semicontinuous functions (#7693)\nWe mimick the interface for continuity, by introducing predicates `lower_semicontinuous_within_at`, `lower_semicontinuous_at`, `lower_semicontinuous_on` and `lower_semicontinuous` (and similarly for upper semicontinuity).", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "mem_nhds_prod_iff'", []]]}, {"oldPath": null, "newPath": "src/topology/semicontinuous.lean", "changes": [["add", "theorem", "lower_semicontinuous", ["continuous"]], ["add", "theorem", "upper_semicontinuous", ["continuous"]], ["add", "theorem", "lower_semicontinuous_at", ["continuous_at"]], ["add", "theorem", "upper_semicontinuous_at", ["continuous_at"]], ["add", "theorem", "continuous_at_iff_lower_upper_semicontinuous_at", []], ["add", "theorem", "continuous_iff_lower_upper_semicontinuous", []], ["add", "theorem", "lower_semicontinuous_on", ["continuous_on"]], ["add", "theorem", "upper_semicontinuous_on", ["continuous_on"]], ["add", "theorem", "continuous_on_iff_lower_upper_semicontinuous_on", []], ["add", "theorem", "lower_semicontinuous_within_at", ["continuous_within_at"]], ["add", "theorem", "upper_semicontinuous_within_at", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_iff_lower_upper_semicontinuous_within_at", []], ["add", "theorem", "lower_semicontinuous_at_indicator", ["is_closed"]], ["add", "theorem", "lower_semicontinuous_indicator", ["is_closed"]], ["add", "theorem", "lower_semicontinuous_on_indicator", ["is_closed"]], ["add", "theorem", "lower_semicontinuous_within_at_indicator", ["is_closed"]], ["add", "theorem", "upper_semicontinuous_at_indicator", ["is_closed"]], ["add", "theorem", "upper_semicontinuous_indicator", ["is_closed"]], ["add", "theorem", "upper_semicontinuous_on_indicator", ["is_closed"]], ["add", "theorem", "upper_semicontinuous_within_at_indicator", ["is_closed"]], ["add", "theorem", "lower_semicontinuous_at_indicator", ["is_open"]], ["add", "theorem", "lower_semicontinuous_indicator", ["is_open"]], ["add", "theorem", "lower_semicontinuous_on_indicator", ["is_open"]], ["add", "theorem", "lower_semicontinuous_within_at_indicator", ["is_open"]], ["add", "theorem", "upper_semicontinuous_at_indicator", ["is_open"]], ["add", "theorem", "upper_semicontinuous_indicator", ["is_open"]], ["add", "theorem", "upper_semicontinuous_on_indicator", ["is_open"]], ["add", "theorem", "upper_semicontinuous_within_at_indicator", ["is_open"]], ["add", "theorem", "add'", ["lower_semicontinuous"]], ["add", "theorem", "add", ["lower_semicontinuous"]], ["add", "theorem", "is_open_preimage", ["lower_semicontinuous"]], ["add", "theorem", "lower_semicontinuous_at", ["lower_semicontinuous"]], ["add", "theorem", "lower_semicontinuous_on", ["lower_semicontinuous"]], ["add", "theorem", "lower_semicontinuous_within_at", ["lower_semicontinuous"]], ["add", "def", "lower_semicontinuous", []], ["add", "theorem", "add'", ["lower_semicontinuous_at"]], ["add", "theorem", "add", ["lower_semicontinuous_at"]], ["add", "theorem", "lower_semicontinuous_within_at", ["lower_semicontinuous_at"]], ["add", "def", "lower_semicontinuous_at", []], ["add", "theorem", "lower_semicontinuous_at_bsupr", []], ["add", "theorem", "lower_semicontinuous_at_const", []], ["add", "theorem", "lower_semicontinuous_at_sum", []], ["add", "theorem", "lower_semicontinuous_at_supr", []], ["add", "theorem", "lower_semicontinuous_at_tsum", []], ["add", "theorem", "lower_semicontinuous_bsupr", []], ["add", "theorem", "lower_semicontinuous_const", []], ["add", "theorem", "lower_semicontinuous_iff_is_open", []], ["add", "theorem", "add'", ["lower_semicontinuous_on"]], ["add", "theorem", "add", ["lower_semicontinuous_on"]], ["add", "theorem", "lower_semicontinuous_within_at", ["lower_semicontinuous_on"]], ["add", "theorem", "mono", ["lower_semicontinuous_on"]], ["add", "def", "lower_semicontinuous_on", []], ["add", "theorem", "lower_semicontinuous_on_bsupr", []], ["add", "theorem", "lower_semicontinuous_on_const", []], ["add", "theorem", "lower_semicontinuous_on_sum", []], ["add", "theorem", "lower_semicontinuous_on_supr", []], ["add", "theorem", "lower_semicontinuous_on_tsum", []], ["add", "theorem", "lower_semicontinuous_on_univ_iff", []], ["add", "theorem", "lower_semicontinuous_sum", []], ["add", "theorem", "lower_semicontinuous_supr", []], ["add", "theorem", "lower_semicontinuous_tsum", []], ["add", "theorem", "add'", ["lower_semicontinuous_within_at"]], ["add", "theorem", "add", ["lower_semicontinuous_within_at"]], ["add", "theorem", "mono", ["lower_semicontinuous_within_at"]], ["add", "def", "lower_semicontinuous_within_at", []], ["add", "theorem", "lower_semicontinuous_within_at_bsupr", []], ["add", "theorem", "lower_semicontinuous_within_at_const", []], ["add", "theorem", "lower_semicontinuous_within_at_sum", []], ["add", "theorem", "lower_semicontinuous_within_at_supr", []], ["add", "theorem", "lower_semicontinuous_within_at_tsum", []], ["add", "theorem", "lower_semicontinuous_within_at_univ_iff", []], ["add", "theorem", "add'", ["upper_semicontinuous"]], ["add", "theorem", "add", ["upper_semicontinuous"]], ["add", "theorem", "is_open_preimage", ["upper_semicontinuous"]], ["add", "theorem", "upper_semicontinuous_at", ["upper_semicontinuous"]], ["add", "theorem", "upper_semicontinuous_on", ["upper_semicontinuous"]], ["add", "theorem", "upper_semicontinuous_within_at", ["upper_semicontinuous"]], ["add", "def", "upper_semicontinuous", []], ["add", "theorem", "add'", ["upper_semicontinuous_at"]], ["add", "theorem", "add", ["upper_semicontinuous_at"]], ["add", "theorem", "upper_semicontinuous_within_at", ["upper_semicontinuous_at"]], ["add", "def", "upper_semicontinuous_at", []], ["add", "theorem", "upper_semicontinuous_at_binfi", []], ["add", "theorem", "upper_semicontinuous_at_const", []], ["add", "theorem", "upper_semicontinuous_at_infi", []], ["add", "theorem", "upper_semicontinuous_at_sum", []], ["add", "theorem", "upper_semicontinuous_binfi", []], ["add", "theorem", "upper_semicontinuous_const", []], ["add", "theorem", "upper_semicontinuous_iff_is_open", []], ["add", "theorem", "upper_semicontinuous_infi", []], ["add", "theorem", "add'", ["upper_semicontinuous_on"]], ["add", "theorem", "add", ["upper_semicontinuous_on"]], ["add", "theorem", "mono", ["upper_semicontinuous_on"]], ["add", "theorem", "upper_semicontinuous_within_at", ["upper_semicontinuous_on"]], ["add", "def", "upper_semicontinuous_on", []], ["add", "theorem", "upper_semicontinuous_on_binfi", []], ["add", "theorem", "upper_semicontinuous_on_const", []], ["add", "theorem", "upper_semicontinuous_on_infi", []], ["add", "theorem", "upper_semicontinuous_on_sum", []], ["add", "theorem", "upper_semicontinuous_on_univ_iff", []], ["add", "theorem", "upper_semicontinuous_sum", []], ["add", "theorem", "add'", ["upper_semicontinuous_within_at"]], ["add", "theorem", "add", ["upper_semicontinuous_within_at"]], ["add", "theorem", "mono", ["upper_semicontinuous_within_at"]], ["add", "def", "upper_semicontinuous_within_at", []], ["add", "theorem", "upper_semicontinuous_within_at_binfi", []], ["add", "theorem", "upper_semicontinuous_within_at_const", []], ["add", "theorem", "upper_semicontinuous_within_at_infi", []], ["add", "theorem", "upper_semicontinuous_within_at_sum", []], ["add", "theorem", "upper_semicontinuous_within_at_univ_iff", []]]}]}, {"timestamp": 1622065817, "sha": "0970fda6", "message": "feat(measure_theory/regular): more material on regular measures (#7680)\nThis PR:\n* defines weakly regular measures\n* shows that for weakly regular measures any finite measure set can be approximated from inside by closed sets\n* shows that for regular measures any finite measure set can be approximated from inside by compact sets\n* shows that any finite measure on a metric space is weakly regular\n* shows that any locally finite measure on a sigma compact locally compact metric space is regular", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "exists_pos_sum_of_encodable'", ["ennreal"]]]}, {"oldPath": "src/measure_theory/regular.lean", "newPath": "src/measure_theory/regular.lean", "changes": [["add", "theorem", "exists_lt_is_closed_of_gt", ["is_open"]], ["add", "theorem", "exists_lt_is_compact", ["is_open"]], ["add", "theorem", "measure_eq_supr_is_closed", ["is_open"]], ["add", "theorem", "measure_eq_supr_is_compact", ["is_open"]], ["add", "theorem", "exists_is_open_lt_of_lt'", ["measurable_set"]], ["add", "theorem", "exists_is_open_lt_of_lt", ["measurable_set"]], ["add", "theorem", "exists_lt_is_closed_of_lt_top", ["measurable_set"]], ["add", "theorem", "exists_lt_is_closed_of_lt_top_of_pos", ["measurable_set"]], ["add", "theorem", "exists_lt_is_compact_of_lt_top", ["measurable_set"]], ["add", "theorem", "exists_lt_is_compact_of_lt_top_of_pos", ["measurable_set"]], ["add", "theorem", "measure_eq_infi_is_open'", ["measurable_set"]], ["add", "theorem", "measure_eq_infi_is_open", ["measurable_set"]], ["add", "theorem", "measure_eq_supr_is_closed_of_finite_measure", ["measurable_set"]], ["add", "theorem", "measure_eq_supr_is_closed_of_lt_top", ["measurable_set"]], ["add", "theorem", "measure_eq_supr_is_compact_of_lt_top", ["measurable_set"]], ["del", "theorem", "inner_regular_eq", ["measure_theory", "measure", "regular"]], ["del", "theorem", "outer_regular_eq", ["measure_theory", "measure", "regular"]], ["add", "theorem", "exists_closed_subset_self_subset_open_of_pos", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "exists_subset_is_open_measure_lt_top", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "inner_regular_of_pseudo_emetric_space", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "restrict_of_is_open", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "restrict_of_measurable_set", ["measure_theory", "measure", "weakly_regular"]], ["add", "theorem", "weakly_regular_of_inner_regular_of_finite_measure", ["measure_theory", "measure", "weakly_regular"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "exists_Union_is_closed", ["is_open"]]]}]}, {"timestamp": 1622065816, "sha": "a2e8b3c5", "message": "feat(special_functions/polynomials): Generalize some polynomial asymptotics to iff statements. (#7545)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": [["add", "theorem", "is_equivalent_zero_iff_is_O_zero", ["asymptotics"]]]}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": [["add", "theorem", "abs_div_tendsto_at_top_of_degree_gt", ["polynomial"]], ["add", "theorem", "abs_is_bounded_under_iff", ["polynomial"]], ["add", "theorem", "abs_tendsto_at_top_iff", ["polynomial"]], ["add", "theorem", "div_tendsto_zero_iff_degree_lt", ["polynomial"]], ["del", "theorem", "eval_div_tendsto_at_top_of_degree_gt", ["polynomial"]], ["add", "theorem", "tendsto_at_bot_iff_leading_coeff_nonpos", ["polynomial"]], ["add", "theorem", "tendsto_at_top_iff_leading_coeff_nonneg", ["polynomial"]], ["add", "theorem", "tendsto_nhds_iff", ["polynomial"]]]}, {"oldPath": "src/data/nat/with_bot.lean", "newPath": "src/data/nat/with_bot.lean", "changes": [["add", "theorem", "one_le_iff_zero_lt", ["nat", "with_bot"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "tendsto_const_mul_pow_at_top_iff", ["filter"]], ["add", "theorem", "tendsto_neg_const_mul_pow_at_top_iff", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "not_is_bounded_under_of_tendsto_at_bot", ["filter"]], ["add", "theorem", "not_is_bounded_under_of_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["add", "theorem", "mul_tendsto_nhds_one_nhds_one", []], ["add", "theorem", "mul_tendsto_nhds_zero_left", []], ["add", "theorem", "mul_tendsto_nhds_zero_right", []], ["mod", "theorem", "nhds_basis_Ioo'", []], ["mod", "theorem", "nhds_basis_Ioo", []], ["add", "theorem", "nhds_basis_Ioo_pos", []], ["add", "theorem", "nhds_basis_Ioo_pos_of_pos", []], ["add", "theorem", "nhds_basis_abs_sub_lt", []], ["add", "theorem", "nhds_basis_zero_abs_sub_lt", []], ["add", "theorem", "nhds_eq_map_mul_left_nhds_one", []], ["add", "theorem", "nhds_eq_map_mul_right_nhds_one", []], ["add", "theorem", "tendsto_const_mul_fpow_at_top_zero", []], ["add", "theorem", "tendsto_const_mul_fpow_at_top_zero_iff", []], ["add", "theorem", "tendsto_const_mul_pow_nhds_iff", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "tendsto_const_nhds_iff", []]]}]}, {"timestamp": 1622056665, "sha": "fd43ce0b", "message": "feat(linear_algebra/matrix): generalize `basis.to_matrix_mul_to_matrix` (#7670)\nNow the second family of vectors does not have to form a basis.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "sum_repr_mul_repr", ["basis"]]]}, {"oldPath": "src/linear_algebra/matrix/basis.lean", "newPath": "src/linear_algebra/matrix/basis.lean", "changes": []}]}, {"timestamp": 1622036068, "sha": "fa27c0c0", "message": "feat(ring_theory/derivation): define push forward of derivations (#7715)", "changes": [{"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "theorem", "coe_comp", ["derivation"]], ["add", "theorem", "coe_to_linear_map_comp", ["derivation"]], ["add", "def", "comp", ["derivation"]], ["add", "theorem", "mk_coe", ["derivation"]]]}]}, {"timestamp": 1622036067, "sha": "b059708f", "message": "feat(data/nnreal): filling out some lemmas (#7710)\nFrom LTE.", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "div_le_iff'", ["nnreal"]], ["add", "theorem", "div_lt_iff'", ["nnreal"]], ["mod", "theorem", "div_lt_iff", ["nnreal"]], ["add", "theorem", "le_div_iff'", ["nnreal"]], ["add", "theorem", "le_div_iff", ["nnreal"]], ["add", "theorem", "lt_div_iff'", ["nnreal"]]]}]}, {"timestamp": 1622036066, "sha": "273546ec", "message": "feat(group_theory/sub{group,monoid,semiring,ring}): subobjects inherit the actions of their carrier type (#7665)\nThis acts as a generalization of `algebra.of_subsemiring` and `algebra.of_subring`, and transfers the weaker action structures too.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "smul_def", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "smul_def", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "smul_def", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "smul_def", ["subsemiring"]]]}]}, {"timestamp": 1622036065, "sha": "66ec15cc", "message": "feat(analysis/complex/isometry): add linear_isometry_complex (#6923)\nadd proof about the isometries in the complex plane", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "conj_li_apply", ["complex"]]]}, {"oldPath": null, "newPath": "src/analysis/complex/isometry.lean", "changes": [["add", "theorem", "abs_apply_sub_one_eq_abs_sub_one", ["linear_isometry"]], ["add", "theorem", "im_apply_eq_im", ["linear_isometry"]], ["add", "theorem", "im_apply_eq_im_or_neg_of_re_apply_eq_re", ["linear_isometry"]], ["add", "theorem", "re_apply_eq_re", ["linear_isometry"]], ["add", "theorem", "re_apply_eq_re_of_add_conj_eq", ["linear_isometry"]], ["add", "theorem", "linear_isometry_complex", []], ["add", "theorem", "linear_isometry_complex_aux", []]]}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "id_apply", ["linear_isometry_equiv", "linear_isometry"]], ["add", "theorem", "id_to_linear_map", ["linear_isometry_equiv", "linear_isometry"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "conj_one", ["complex"]], ["add", "theorem", "conj_sub", ["complex"]]]}]}, {"timestamp": 1622017518, "sha": "a741f646", "message": "docs(*): spelling (#7719)", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_topology/Moore_complex.lean", "newPath": "src/algebraic_topology/Moore_complex.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": []}, {"oldPath": "src/category_theory/category/pairwise.lean", "newPath": "src/category_theory/category/pairwise.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cofinal.lean", "newPath": "src/category_theory/limits/cofinal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1622017517, "sha": "58c57ca2", "message": "fix(linear_algebra/tensor_product): relax from module to distrib_mul_action (#7709)\nThis was an accident in #7516 where the wrong variable was used. `R'` is the base of a distrib_mul_action, `R''`, is the base of a module.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1622017516, "sha": "71dcb642", "message": "feat(order/conditionally_complete_lattice): add lemmas (#7689)\nThese lemmas names match the version that already exist without the `c` prefix.\nThis also renames `finset.sup_eq_Sup` to `finset.sup_id_eq_Sup`, and introduces a new `finset.sup_eq_Sup_image`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["del", "theorem", "inf_eq_Inf", ["finset"]], ["add", "theorem", "inf_eq_Inf_image", ["finset"]], ["add", "theorem", "inf_id_eq_Inf", ["finset"]], ["del", "theorem", "sup_eq_Sup", ["finset"]], ["add", "theorem", "sup_eq_Sup_image", ["finset"]], ["add", "theorem", "sup_id_eq_Sup", ["finset"]]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "infi_true", []], ["mod", "theorem", "supr_true", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cSup_empty", []], ["add", "theorem", "cinfi_le_of_le", []], ["add", "theorem", "cinfi_pos", []], ["add", "theorem", "csupr_neg", []], ["add", "theorem", "csupr_pos", []], ["add", "theorem", "inf'_eq_cInf_image", ["finset"]], ["add", "theorem", "inf'_id_eq_cInf", ["finset"]], ["add", "theorem", "sup'_eq_cSup_image", ["finset"]], ["add", "theorem", "sup'_id_eq_cSup", ["finset"]], ["add", "theorem", "le_csupr_of_le", []], ["mod", "theorem", "cSup_empty", ["with_bot"]], ["add", "theorem", "cInf_empty", ["with_top"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1622017515, "sha": "00394b75", "message": "feat(tactic/simps): implement prefix names (#7596)\n* You can now write `initialize_simps_projections equiv (to_fun → coe as_prefix)` to add the projection name as a prefix to the simp lemmas: if you then write `@[simps coe] def foo ...` you get a lemma named `coe_foo`.\n* Remove the `short_name` option from `simps_cfg`. This was unused and not that useful. \n* Refactor some tuples used in the functions into structures.\n* Implements one item of #5489.", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "zip_with3", ["list"]], ["add", "def", "zip_with4", ["list"]], ["add", "def", "zip_with5", ["list"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": [["add", "def", "append_to_last", ["name"]], ["add", "def", "update_last", ["name"]]]}, {"oldPath": "src/tactic/reserved_notation.lean", "newPath": "src/tactic/reserved_notation.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": [["add", "def", "projection_rule", []]]}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "symm_apply", ["prefix_projection_names", "equiv", "simps"]], ["add", "def", "symm", ["prefix_projection_names", "equiv"]], ["add", "structure", "equiv", ["prefix_projection_names"]], ["add", "def", "foo", ["prefix_projection_names"]], ["del", "def", "short_name1", []]]}]}, {"timestamp": 1622011715, "sha": "1f566bcf", "message": "chore(scripts): update nolints.txt (#7718)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1622011714, "sha": "f7f0a302", "message": "feat(scripts/lint-style.py): add linter that disables importing omega (#7646)\n* Files in mathlib are not allowed to `import tactic` or `import tactic.omega`. This adds a style linter to enforce this.\n* `tactic.default` is allowed to import `tactic.omega` (other files that only import other files are excluded from these checks, so a malicious user still could get around this linter, but it's hard to imagine this happening accidentally)\n* Remove `import tactic` from 3 files (in `archive/` and `test/`)", "changes": [{"oldPath": "archive/imo/imo1964_q1.lean", "newPath": "archive/imo/imo1964_q1.lean", "changes": []}, {"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}, {"oldPath": "test/traversable.lean", "newPath": "test/traversable.lean", "changes": []}]}, {"timestamp": 1621990546, "sha": "fd1c8e7f", "message": "feat(data/list/forall2): add two lemmas about forall₂ and reverse (#7714)\nrel_reverse shows that forall₂ is preserved across reversed lists,\nforall₂_iff_reverse uses rel_reverse to show that it is preserved in\nboth directions.", "changes": [{"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["add", "theorem", "forall₂_reverse_iff", ["list"]], ["add", "theorem", "rel_reverse", ["list"]]]}]}, {"timestamp": 1621984887, "sha": "360ca9cc", "message": "feat(analysis/special_functions/integrals): `interval_integrable_log` (#7713)", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "log", ["interval_integral", "interval_integrable"]], ["add", "theorem", "interval_integrable_log", ["interval_integral"]]]}]}, {"timestamp": 1621984886, "sha": "f1425b69", "message": "feat(measure_theory/interval_integral): `integral_comp_add_left` (#7712)", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_comp_add_left", ["interval_integral"]]]}]}, {"timestamp": 1621972116, "sha": "82e78ce8", "message": "feat(algebra/big_operators/finprod): add lemma `finprod_mem_finset_of_product` (#7439)", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_curry", []], ["add", "theorem", "finprod_curry₃", []], ["add", "theorem", "finprod_mem_finset_product'", []], ["add", "theorem", "finprod_mem_finset_product", []], ["add", "theorem", "finprod_mem_finset_product₃", []], ["add", "theorem", "finprod_mem_mul_support", []], ["add", "theorem", "mul_support_of_fiberwise_prod_subset_image", ["finset"]]]}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["add", "theorem", "mul_support_along_fiber_finite_of_finite", ["function"]], ["add", "theorem", "mul_support_along_fiber_subset", ["function"]]]}]}, {"timestamp": 1621963149, "sha": "8078ecad", "message": "feat(linear_algebra): `det (M ⬝ N ⬝ M') = det N`, where `M'` is an inverse of `M` (#7633)\nThis is an important step towards showing the determinant of `linear_map.to_matrix` does not depend on the choice of basis.\n \nThe main difficulty is allowing the two indexing types of `M` to be (a priori) different. They are in bijection though (using `basis.index_equiv` from #7631), so using `reindex_linear_equiv` we can turn everything into square matrices and apply the \"usual\" proof.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "def", "equiv_of_pi_lequiv_pi", []], ["add", "theorem", "det_conj", ["matrix"]], ["add", "def", "index_equiv_of_inv", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/reindex.lean", "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": [["add", "theorem", "reindex_alg_equiv_mul", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_mul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "theorem", "to_lin'_mul_apply", ["matrix"]], ["add", "def", "to_lin'_of_inv", ["matrix"]], ["add", "theorem", "to_lin_mul_apply", ["matrix"]], ["add", "def", "to_lin_of_inv", ["matrix"]]]}]}, {"timestamp": 1621958338, "sha": "c17c738e", "message": "feat(logic/girard): move file to counterexamples (#7706)\nSince the file feels like a counterexample, I suggest putting it in that folder.", "changes": [{"oldPath": "src/logic/girard.lean", "newPath": "counterexamples/girard.lean", "changes": []}]}, {"timestamp": 1621958337, "sha": "a617d0a6", "message": "feat(algebra/category/Module): R-mod has enough projectives (#7113)\nAnother piece of @TwoFX's `projective` branch, lightly edited.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Module/projective.lean", "changes": [["add", "theorem", "projective_of_free", ["Module"]], ["add", "theorem", "iff_projective", ["is_projective"]]]}, {"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": [["add", "theorem", "of_lifting_property'", ["is_projective"]], ["mod", "theorem", "of_lifting_property", ["is_projective"]]]}]}, {"timestamp": 1621941538, "sha": "bbf61500", "message": "feat(measure_theory/measurable_space): add instances for subtypes (#7702)", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "coe_bot", ["measurable_set"]], ["add", "theorem", "coe_compl", ["measurable_set"]], ["add", "theorem", "coe_empty", ["measurable_set"]], ["add", "theorem", "coe_insert", ["measurable_set"]], ["add", "theorem", "coe_inter", ["measurable_set"]], ["add", "theorem", "coe_sdiff", ["measurable_set"]], ["add", "theorem", "coe_top", ["measurable_set"]], ["add", "theorem", "coe_union", ["measurable_set"]], ["add", "theorem", "mem_coe", ["measurable_set"]]]}]}, {"timestamp": 1621941537, "sha": "75e07d1c", "message": "feat(linear_algebra/matrix/determinant): lemmas about commutativity under det (#7685)", "changes": [{"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "det_mul_comm", ["matrix"]], ["add", "theorem", "det_mul_left_comm", ["matrix"]], ["add", "theorem", "det_mul_right_comm", ["matrix"]], ["add", "theorem", "det_units_conj'", ["matrix"]], ["add", "theorem", "det_units_conj", ["matrix"]]]}]}, {"timestamp": 1621941536, "sha": "4abbe10d", "message": "feat(group_theory/group_action/units): group actions on and by units (#7438)\nThis removes all the lemmas about `(u : α) • x` and `(↑u⁻¹ : α) • x` in favor of granting `units α` its very own `has_scalar` structure, along with providing the stronger variants to make it usable elsewhere.\nThis means that downstream code need only reason about `[group G] [mul_action G M]` instead of needing to handle groups and `units` separately.\nThe (multiplicative versions of the) removed and moved lemmas are:\n* `units.inv_smul_smul` → `inv_smul_smul`\n* `units.smul_inv_smul` → `smul_inv_smul`\n* `units.smul_perm_hom`, `mul_action.to_perm` → `mul_action.to_perm_hom`\n* `units.smul_perm` → `mul_action.to_perm`\n* `units.smul_left_cancel` → `smul_left_cancel`\n* `units.smul_eq_iff_eq_inv_smul` → `smul_eq_iff_eq_inv_smul`\n* `units.smul_eq_zero` → `smul_eq_zero_iff_eq` (to avoid clashing with `smul_eq_zero`)\n* `units.smul_ne_zero` → `smul_ne_zero_iff_ne`\n* `homeomorph.smul_of_unit` → `homeomorph.smul` (the latter already existed, and the former was a special case)\n* `units.measurable_const_smul_iff` → `measurable_const_smul_iff`\n* `units.ae_measurable_const_smul_iff` → `ae_measurable_const_smul_iff`\nThe new lemmas are:\n* `smul_eq_zero_iff_eq'`, a `group_with_zero` version of `smul_eq_zero_iff_eq`\n* `smul_ne_zero_iff_ne'`, a `group_with_zero` version of `smul_ne_zero_iff_ne`\n* `units.neg_smul`, a version of `neg_smul` for units. We don't currently have typeclasses about `neg` on objects without `+`.\nWe also end up needing some new typeclass instances downstream\n* `units.measurable_space`\n* `units.has_measurable_smul`\n* `units.has_continuous_smul`\nThis goes on to remove lots of coercions from `alternating_map`, `matrix.det`, and some lie algebra stuff.\nThis makes the theorem statement cleaner, but occasionally requires rewriting through `units.smul_def` to add or remove the coercion.", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "neg_smul", ["units"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "def", "to_perm_hom", ["add_action"]], ["del", "def", "vadd_perm_hom", ["add_units"]], ["mod", "theorem", "smul_eq_zero", ["is_unit"]], ["mod", "theorem", "smul_left_cancel", ["is_unit"]], ["mod", "def", "to_perm", ["mul_action"]], ["add", "def", "to_perm_hom", ["mul_action"]], ["add", "theorem", "smul_eq_iff_eq_inv_smul", []], ["add", "theorem", "smul_eq_zero_iff_eq'", []], ["add", "theorem", "smul_eq_zero_iff_eq", []], ["add", "theorem", "smul_ne_zero_iff_ne'", []], ["add", "theorem", "smul_ne_zero_iff_ne", []], ["del", "theorem", "inv_smul_smul", ["units"]], ["del", "theorem", "smul_eq_iff_eq_inv_smul", ["units"]], ["del", "theorem", "smul_eq_zero", ["units"]], ["del", "theorem", "smul_inv_smul", ["units"]], ["del", "theorem", "smul_left_cancel", ["units"]], ["del", "theorem", "smul_ne_zero", ["units"]], ["del", "def", "smul_perm", ["units"]], ["del", "def", "smul_perm_hom", ["units"]]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/units.lean", "changes": [["add", "theorem", "coe_smul", ["units"]], ["add", "theorem", "smul_def", ["units"]], ["add", "theorem", "smul_inv", ["units"]]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/determinant.lean", "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/arithmetic.lean", "newPath": "src/measure_theory/arithmetic.lean", "changes": [["del", "theorem", "ae_measurable_const_smul_iff", ["units"]], ["del", "theorem", "measurable_const_smul_iff", ["units"]]]}, {"oldPath": "src/topology/algebra/mul_action.lean", "newPath": "src/topology/algebra/mul_action.lean", "changes": [["mod", "theorem", "continuous_at_const_smul_iff", ["is_unit"]], ["mod", "theorem", "continuous_const_smul_iff", ["is_unit"]], ["mod", "theorem", "continuous_on_const_smul_iff", ["is_unit"]], ["mod", "theorem", "continuous_within_at_const_smul_iff", ["is_unit"]], ["mod", "theorem", "is_closed_map_smul", ["is_unit"]], ["mod", "theorem", "is_open_map_smul", ["is_unit"]], ["mod", "theorem", "tendsto_const_smul_iff", ["is_unit"]], ["del", "theorem", "tendsto_const_smul_iff", ["units"]]]}]}, {"timestamp": 1621921314, "sha": "d81fcdac", "message": "feat(algebra/group_with_zero): add some equational lemmas (#7705)\nAdd some equations for `group_with_zero` that are direct analogues of lemmas for `group`.\nUseful for #6923.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "eq_inv_iff", []], ["add", "theorem", "eq_inv_mul_iff_mul_eq'", []], ["mod", "theorem", "eq_inv_of_mul_left_eq_one", []], ["mod", "theorem", "eq_inv_of_mul_right_eq_one", []], ["add", "theorem", "eq_mul_inv_iff_mul_eq'", []], ["mod", "theorem", "mul_left_injective", ["group_with_zero"]], ["mod", "theorem", "mul_right_injective", ["group_with_zero"]], ["mod", "theorem", "inv_eq_iff", []], ["mod", "theorem", "inv_eq_one'", []], ["mod", "theorem", "inv_inj'", []], ["mod", "theorem", "inv_mul_cancel", []], ["mod", "theorem", "inv_mul_cancel_left'", []], ["mod", "theorem", "inv_mul_cancel_right'", []], ["add", "theorem", "inv_mul_eq_iff_eq_mul'", []], ["add", "theorem", "inv_mul_eq_one'", []], ["mod", "theorem", "inv_ne_zero", []], ["add", "theorem", "mul_eq_one_iff_eq_inv'", []], ["add", "theorem", "mul_eq_one_iff_inv_eq'", []], ["mod", "theorem", "mul_inv_cancel_left'", []], ["mod", "theorem", "mul_inv_cancel_right'", []], ["add", "theorem", "mul_inv_eq_iff_eq_mul'", []], ["add", "theorem", "mul_inv_eq_one'", []]]}]}, {"timestamp": 1621903591, "sha": "a880ea4a", "message": "feat(ring_theory/coprime): add some lemmas (#7650)", "changes": [{"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime.lean", "changes": [["add", "theorem", "is_unit_of_dvd'", ["is_coprime"]], ["add", "theorem", "neg_left", ["is_coprime"]], ["add", "theorem", "neg_left_iff", ["is_coprime"]], ["add", "theorem", "neg_neg", ["is_coprime"]], ["add", "theorem", "neg_neg_iff", ["is_coprime"]], ["add", "theorem", "neg_right", ["is_coprime"]], ["add", "theorem", "neg_right_iff", ["is_coprime"]], ["add", "theorem", "of_coprime_of_dvd_left", ["is_coprime"]], ["add", "theorem", "of_coprime_of_dvd_right", ["is_coprime"]], ["add", "theorem", "pow_iff", ["is_coprime"]], ["add", "theorem", "pow_left_iff", ["is_coprime"]], ["add", "theorem", "pow_right_iff", ["is_coprime"]], ["add", "theorem", "not_coprime_zero_zero", []]]}]}, {"timestamp": 1621903590, "sha": "c3dcb7d4", "message": "feat(category_theory/limits): comma category colimit construction (#7535)\nAs well as the duals. Also adds some autoparams for consistency with `has_limit` and some missing instances which are basically just versions of existing things", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "def", "left_func", ["category_theory", "arrow"]], ["add", "def", "left_to_right", ["category_theory", "arrow"]], ["add", "def", "right_func", ["category_theory", "arrow"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/comma.lean", "changes": [["add", "def", "cocone_of_preserves", ["category_theory", "comma"]], ["add", "def", "cocone_of_preserves_is_colimit", ["category_theory", "comma"]], ["add", "def", "colimit_auxiliary_cocone", ["category_theory", "comma"]], ["add", "def", "cone_of_preserves", ["category_theory", "comma"]], ["add", "def", "cone_of_preserves_is_limit", ["category_theory", "comma"]], ["add", "def", "limit_auxiliary_cone", ["category_theory", "comma"]]]}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/kan_extension.lean", "newPath": "src/category_theory/limits/kan_extension.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["del", "def", "to_cocone", ["category_theory", "functor"]], ["del", "def", "to_cone", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/punit.lean", "newPath": "src/category_theory/limits/punit.lean", "changes": [["add", "def", "punit_cocone", ["category_theory", "limits"]], ["add", "def", "punit_cone", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/structured_arrow.lean", "newPath": "src/category_theory/structured_arrow.lean", "changes": [["mod", "theorem", "eq_mk", ["category_theory", "costructured_arrow"]], ["mod", "def", "proj", ["category_theory", "costructured_arrow"]], ["add", "theorem", "w", ["category_theory", "costructured_arrow"]], ["mod", "def", "proj", ["category_theory", "structured_arrow"]], ["add", "theorem", "w", ["category_theory", "structured_arrow"]]]}]}, {"timestamp": 1621884556, "sha": "17f3b801", "message": "feat(100-theorems-list/16_abel_ruffini): some simplifications (#7699)", "changes": [{"oldPath": "archive/100-theorems-list/16_abel_ruffini.lean", "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": [["mod", "theorem", "irreducible_Phi", ["abel_ruffini"]]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1621884555, "sha": "51526aef", "message": "chore(topology): rename mem_nhds_sets and mem_of_nhds and mem_nhds_sets_iff (#7690)\nRename `mem_nhds_sets` to `is_open.mem_nhds`, and `mem_nhds_sets_iff` to `mem_nhds_iff`, and `mem_of_nhds` to `mem_of_mem_nhds`.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": [["mod", "theorem", "c_mem_support", ["smooth_bump_function"]]]}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/liminf_limsup.lean", "newPath": "src/topology/algebra/ordered/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_nhds", ["is_open"]], ["add", "theorem", "mem_nhds_iff", []], ["del", "theorem", "mem_nhds_sets", []], ["del", "theorem", "mem_nhds_sets_iff", []], ["add", "theorem", "mem_of_mem_nhds", []], ["del", "theorem", "mem_of_nhds", []]]}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "mem_nhds", ["prod_is_open"]], ["del", "theorem", "prod_mem_nhds_sets", []]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "nhds_within_le_nhds", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/extend_from.lean", "newPath": "src/topology/extend_from.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}, {"oldPath": "src/topology/urysohns_lemma.lean", "newPath": "src/topology/urysohns_lemma.lean", "changes": []}]}, {"timestamp": 1621865253, "sha": "91a547ee", "message": "feat(algebra/opposites): `(un)op_ne_zero_iff` (#7698)", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op_ne_zero_iff", ["opposite"]], ["add", "theorem", "unop_ne_zero_iff", ["opposite"]]]}]}, {"timestamp": 1621865252, "sha": "a09ddc7f", "message": "feat(measure_theory/interval_integral): `interval_integrable.mono` (#7679)\n`interval_integrable f ν a b → interval c d ⊆ interval a b → μ ≤ ν → interval_integrable f μ c d`", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "def", ["interval_integrable"]], ["add", "theorem", "mono", ["interval_integrable"]], ["add", "theorem", "mono_measure", ["interval_integrable"]], ["add", "theorem", "mono_set", ["interval_integrable"]], ["add", "theorem", "mono_set_ae", ["interval_integrable"]], ["mod", "theorem", "trans", ["interval_integrable"]], ["add", "theorem", "interval_integrable_iff", []], ["mod", "theorem", "interval_integrable", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1621854073, "sha": "0b51a72c", "message": "feat(linear_algebra/determinant): specialize `is_basis.iff_det` (#7668)\nAfter the bundled basis refactor, applying `is_basis.iff_det` in the forward direction is slightly more involved (since defining the `iff` requires an unbundled basis), so I added a lemma that does the necessary translation between \"unbundled basis\" and \"bundled basis\" for you.", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "is_unit_det", ["basis"]], ["del", "theorem", "iff_det", ["is_basis"]], ["add", "theorem", "is_basis_iff_det", []]]}]}, {"timestamp": 1621854072, "sha": "8ff2783f", "message": "feat(counterexamples/cyclotomic_105): add coeff_cyclotomic_105 (#7648)\nWe show that `coeff (cyclotomic 105 ℤ) 7 = -2`, proving that not all coefficients of cyclotomic polynomials are `0`, `-1` or `1`.", "changes": [{"oldPath": null, "newPath": "counterexamples/cyclotomic_105.lean", "changes": [["add", "theorem", "coeff_cyclotomic_105", []], ["add", "theorem", "cyclotomic_105", []], ["add", "theorem", "cyclotomic_15", []], ["add", "theorem", "cyclotomic_21", []], ["add", "theorem", "cyclotomic_35", []], ["add", "theorem", "cyclotomic_3", []], ["add", "theorem", "cyclotomic_5", []], ["add", "theorem", "cyclotomic_7", []], ["add", "theorem", "not_forall_coeff_cyclotomic_neg_one_zero_one", []], ["add", "theorem", "prime_3", []], ["add", "theorem", "prime_5", []], ["add", "theorem", "prime_7", []], ["add", "theorem", "proper_divisors_105", []], ["add", "theorem", "proper_divisors_15", []], ["add", "theorem", "proper_divisors_21", []], ["add", "theorem", "proper_divisors_35", []]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_bit0_mul", ["polynomial"]], ["add", "theorem", "coeff_bit1_mul", ["polynomial"]]]}]}, {"timestamp": 1621833188, "sha": "16733c8f", "message": "chore(data/nat/basic): move unique {units/add_units} instances (#7701)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}]}, {"timestamp": 1621812301, "sha": "2734d912", "message": "fix(data/nat/factorial): fix factorial_zero (#7697)", "changes": [{"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["mod", "theorem", "factorial_zero", ["nat"]]]}]}, {"timestamp": 1621787617, "sha": "6cffc9fe", "message": "chore(logic/unique): a true prop is unique (#7688)\nI found myself needing to construct this instance by hand somewhere; since we already need it to construct `unique true`, we may as well make a def.", "changes": [{"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "def", "unique_prop", []]]}]}, {"timestamp": 1621777813, "sha": "57cd5ef1", "message": "refactor(*): remove some uses of omega in the library (#7700)", "changes": [{"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": []}, {"oldPath": "src/algebra/homology/single.lean", "newPath": "src/algebra/homology/single.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1621720415, "sha": "97a5276c", "message": "doc(number_theory/bernoulli): write statements in math mode (#7696)\n* It took me some work to see the difference between the two statements, so I added the statements in math mode.\n* Change name `sum_range_pow'` -> `sum_Ico_pow`", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["add", "theorem", "sum_Ico_pow", []], ["del", "theorem", "sum_range_pow'", []]]}]}, {"timestamp": 1621700234, "sha": "fb95362d", "message": "fix(algebra/homology): imports (#7655)", "changes": [{"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/algebra/homology/image_to_kernel.lean", "newPath": "src/algebra/homology/image_to_kernel.lean", "changes": []}]}, {"timestamp": 1621685737, "sha": "0e216ce0", "message": "feat(order): if s is finite then Sup s ∈ s (#7682)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_mem", ["finset", "nonempty"]], ["add", "theorem", "cSup_mem", ["finset", "nonempty"]], ["add", "theorem", "cInf_mem", ["set", "nonempty"]], ["add", "theorem", "cSup_mem", ["set", "nonempty"]]]}]}, {"timestamp": 1621685736, "sha": "418dc044", "message": "feat(100-theorems-list/16_abel_ruffini): The Abel-Ruffini Theorem (#7562)\nIt's done!", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/16_abel_ruffini.lean", "changes": [["add", "theorem", "coeff_five_Phi", ["abel_ruffini"]], ["add", "theorem", "coeff_zero_Phi", ["abel_ruffini"]], ["add", "theorem", "complex_roots_Phi", ["abel_ruffini"]], ["add", "theorem", "degree_Phi", ["abel_ruffini"]], ["add", "theorem", "exists_not_solvable_by_rad", ["abel_ruffini"]], ["add", "theorem", "gal_Phi", ["abel_ruffini"]], ["add", "theorem", "irreducible_Phi", ["abel_ruffini"]], ["add", "theorem", "leading_coeff_Phi", ["abel_ruffini"]], ["add", "theorem", "map_Phi", ["abel_ruffini"]], ["add", "theorem", "monic_Phi", ["abel_ruffini"]], ["add", "theorem", "nat_degree_Phi", ["abel_ruffini"]], ["add", "theorem", "not_solvable_by_rad'", ["abel_ruffini"]], ["add", "theorem", "not_solvable_by_rad", ["abel_ruffini"]], ["add", "theorem", "real_roots_Phi_ge", ["abel_ruffini"]], ["add", "theorem", "real_roots_Phi_ge_aux", ["abel_ruffini"]], ["add", "theorem", "real_roots_Phi_le", ["abel_ruffini"]]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "card_root_set_eq_nat_degree", ["polynomial"]]]}]}, {"timestamp": 1621666213, "sha": "b29d40c6", "message": "fix(algebra): change local transparency to semireducible (#7687)\n* When a type is `[irreducible]` it should locally be made `[semireducible]` and (almost) never `[reducible]`. \n* If it is made `[reducible]`, type-class inference will unfold this definition, and will apply instances that would not type-check when the definition is `[irreducible]`", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["mod", "theorem", "op_eq_one_iff", ["opposite"]], ["mod", "theorem", "op_eq_zero_iff", ["opposite"]], ["mod", "theorem", "unop_eq_one_iff", ["opposite"]], ["mod", "theorem", "unop_eq_zero_iff", ["opposite"]]]}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}]}, {"timestamp": 1621632913, "sha": "f8530d53", "message": "feat(ring_theory/ideal/operations): `ideal.span_singleton_pow` (#7660)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "span_singleton_pow", ["ideal"]]]}]}, {"timestamp": 1621615139, "sha": "f70e1606", "message": "chore(order/conditionally_complete_lattice): golf proofs with `order_dual` (#7684)\nEven in the places where this doesn't result in a shorter proof, it makes it obvious that the `inf` lemmas have a matching `sup` lemma.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1621596481, "sha": "233eff0d", "message": "feat(data/fintype/card_embedding): the birthday problem (#7363)", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/93_birthday_problem.lean", "changes": [["add", "theorem", "birthday", []]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subtype_prod_equiv_sigma_subtype", ["equiv"]]]}, {"oldPath": null, "newPath": "src/data/equiv/embedding.lean", "changes": [["add", "def", "cod_restrict", ["equiv"]], ["add", "def", "prod_embedding_disjoint_equiv_sigma_embedding_restricted", ["equiv"]], ["add", "def", "sum_embedding_equiv_prod_embedding_disjoint", ["equiv"]], ["add", "def", "sum_embedding_equiv_sigma_embedding_restricted", ["equiv"]], ["add", "def", "unique_embedding_equiv_result", ["equiv"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "is_empty_of_card_lt", ["function", "embedding"]]]}, {"oldPath": null, "newPath": "src/data/fintype/card_embedding.lean", "changes": [["add", "theorem", "card_embedding", ["fintype"]], ["add", "theorem", "card_embedding_eq_if", ["fintype"]], ["add", "theorem", "card_embedding_eq_infinite", ["fintype"]], ["add", "theorem", "card_embedding_eq_zero", ["fintype"]], ["add", "theorem", "card_embedding_of_unique", ["fintype"]]]}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["add", "theorem", "desc_fac_of_sub", ["nat"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "embedding_congr", ["equiv"]], ["add", "theorem", "embedding_congr_apply_trans", ["equiv"]], ["add", "theorem", "embedding_congr_refl", ["equiv"]], ["add", "theorem", "embedding_congr_symm", ["equiv"]], ["add", "theorem", "embedding_congr_trans", ["equiv"]], ["add", "def", "subtype_injective_equiv_embedding", ["equiv"]], ["add", "theorem", "mk_coe", ["function", "embedding"]]]}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": []}]}, {"timestamp": 1621557233, "sha": "19247422", "message": "feat(data/set/basic): allow dot notation for trans and antisymm (#7681)\nAllow to write\n```lean\nexample {α : Type*} {a b c : set α} (h : a ⊆ b) (h': b ⊆ c) : a ⊆ c :=\nh.trans h'\nexample {α : Type*} {a b : set α} (h : a ⊆ b) (h': b ⊆ a) : \n a = b := h.antisymm h'\nexample {α : Type*} {a b c : finset α} (h : a ⊆ b) (h': b ⊆ c) : a ⊆ c :=\nh.trans h'\nexample {α : Type*} {a b : finset α} (h : a ⊆ b) (h': b ⊆ a) : a = b :=\nh.antisymm h'\n```", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "asymm", ["has_ssubset", "ssubset"]], ["add", "theorem", "trans", ["has_ssubset", "ssubset"]], ["add", "theorem", "antisymm", ["has_subset", "subset"]], ["add", "theorem", "trans", ["has_subset", "subset"]]]}]}, {"timestamp": 1621557232, "sha": "53e2307a", "message": "feat(ring_theory): every left-noetherian ring has invariant basis number (#7678)\nThis is a lovely case where we get more for less.\nBy directly proving that every left-noetherian ring has invariant basis number, we don't need to import `linear_algebra.finite_dimensional` in order to do the `field` case. This means that in a future PR we can instead import `ring_theory.invariant_basis_number` in `linear_algebra.finite_dimensional`, and set up the theory of bases in greater generality.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "map_eq_zero_iff", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "fun_left_injective_of_surjective", ["linear_map"]], ["add", "theorem", "fun_left_surjective_of_injective", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": [["del", "theorem", "invariant_basis_number_field", []], ["add", "theorem", "le_of_fin_injective", []], ["add", "theorem", "le_of_fin_surjective", []]]}]}, {"timestamp": 1621557231, "sha": "c63c6d10", "message": "feat(order/closure): make closure operators implementable (#7608)\nintroduce `lower_adjoint` as a way to talk about closure operators whose input and output types do not match", "changes": [{"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": [["mod", "theorem", "closure_bsupr_closure", ["closure_operator"]], ["mod", "theorem", "closure_inf_le", ["closure_operator"]], ["mod", "theorem", "closure_sup_closure", ["closure_operator"]], ["mod", "theorem", "closure_sup_closure_le", ["closure_operator"]], ["mod", "theorem", "closure_sup_closure_left", ["closure_operator"]], ["mod", "theorem", "closure_sup_closure_right", ["closure_operator"]], ["mod", "theorem", "closure_supr_closure", ["closure_operator"]], ["mod", "theorem", "closure_top", ["closure_operator"]], ["mod", "def", "gi", ["closure_operator"]], ["mod", "def", "apply", ["closure_operator", "simps"]], ["mod", "theorem", "top_mem_closed", ["closure_operator"]], ["mod", "structure", "closure_operator", []], ["mod", "theorem", "closure_operator_gi_self", []], ["mod", "def", "closure_operator", ["galois_connection"]], ["add", "def", "lower_adjoint", ["galois_connection"]], ["add", "def", "closed", ["lower_adjoint"]], ["add", "theorem", "closed_eq_range_close", ["lower_adjoint"]], ["add", "theorem", "closure_Union_closure", ["lower_adjoint"]], ["add", "theorem", "closure_bUnion_closure", ["lower_adjoint"]], ["add", "theorem", "closure_bsupr_closure", ["lower_adjoint"]], ["add", "theorem", "closure_eq_self_of_mem_closed", ["lower_adjoint"]], ["add", "theorem", "closure_inf_le", ["lower_adjoint"]], ["add", "theorem", "closure_is_closed", ["lower_adjoint"]], ["add", "theorem", "closure_le_closed_iff_le", ["lower_adjoint"]], ["add", "def", "closure_operator", ["lower_adjoint"]], ["add", "theorem", "closure_sup_closure", ["lower_adjoint"]], ["add", "theorem", "closure_sup_closure_le", ["lower_adjoint"]], ["add", "theorem", "closure_sup_closure_left", ["lower_adjoint"]], ["add", "theorem", "closure_sup_closure_right", ["lower_adjoint"]], ["add", "theorem", "closure_supr_closure", ["lower_adjoint"]], ["add", "theorem", "closure_top", ["lower_adjoint"]], ["add", "theorem", "closure_union_closure", ["lower_adjoint"]], ["add", "theorem", "closure_union_closure_left", ["lower_adjoint"]], ["add", "theorem", "closure_union_closure_right", ["lower_adjoint"]], ["add", "theorem", "closure_union_closure_subset", ["lower_adjoint"]], ["add", "theorem", "eq_of_le", ["lower_adjoint"]], ["add", "theorem", "ext", ["lower_adjoint"]], ["add", "theorem", "gc", ["lower_adjoint"]], ["add", "theorem", "idempotent", ["lower_adjoint"]], ["add", "theorem", "le_closure", ["lower_adjoint"]], ["add", "theorem", "le_closure_iff", ["lower_adjoint"]], ["add", "theorem", "le_iff_subset", ["lower_adjoint"]], ["add", "theorem", "mem_closed_iff", ["lower_adjoint"]], ["add", "theorem", "mem_closed_iff_closure_le", ["lower_adjoint"]], ["add", "theorem", "mem_iff", ["lower_adjoint"]], ["add", "theorem", "monotone", ["lower_adjoint"]], ["add", "def", "apply", ["lower_adjoint", "simps"]], ["add", "theorem", "subset_closure", ["lower_adjoint"]], ["add", "def", "to_closed", ["lower_adjoint"]], ["add", "structure", "lower_adjoint", []]]}]}, {"timestamp": 1621537837, "sha": "32b433df", "message": "refactor(*): remove some uses of omega in the library (#7620)\nIn #6129, we stopped using `omega` to avoid porting it to lean4.\nSome new uses were added since then.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": []}, {"oldPath": "src/algebra/homology/single.lean", "newPath": "src/algebra/homology/single.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "pos_of_gt", []]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1621524292, "sha": "d47a6e33", "message": "feat(topology): clopens form a topology basis for profinite sets (#7671)\nfrom LTE", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "exists_open_set_nhds'", []], ["add", "theorem", "exists_open_set_nhds", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "exists_subset_nhd_of_compact", []], ["add", "theorem", "is_topological_basis_clopen", []], ["add", "theorem", "nhds_basis_clopen", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "exists_subset_nhd_of_compact'", []], ["add", "theorem", "exists_subset_nhd_of_compact_space", []], ["add", "theorem", "is_clopen_Union", []], ["add", "theorem", "is_clopen_bUnion", []]]}]}, {"timestamp": 1621517658, "sha": "d3ec77c2", "message": "feat(category_theory/limits): reflecting limits of isomorphic diagram (#7674)", "changes": [{"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "reflects_colimit_of_iso_diagram", ["category_theory", "limits"]], ["add", "def", "reflects_limit_of_iso_diagram", ["category_theory", "limits"]]]}]}, {"timestamp": 1621498002, "sha": "c5951f32", "message": "feat(ring_theory/noetherian): a surjective endomorphism of a noetherian module is injective (#7676)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "iterate_ker", ["linear_map"]], ["add", "def", "iterate_range", ["linear_map"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "bijective_of_surjective_endomorphism", ["is_noetherian"]], ["add", "theorem", "exists_endomorphism_iterate_ker_inf_range_eq_bot", ["is_noetherian"]], ["add", "theorem", "injective_of_surjective_endomorphism", ["is_noetherian"]], ["add", "theorem", "monotone_stabilizes_iff_noetherian", []]]}]}, {"timestamp": 1621498001, "sha": "ff511590", "message": "feat(algebra/homology/*): add hypotheses to the d_comp_d' axiom (#7673)", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": []}, {"oldPath": "src/algebra/homology/differential_object.lean", "newPath": "src/algebra/homology/differential_object.lean", "changes": []}, {"oldPath": "src/algebra/homology/flip.lean", "newPath": "src/algebra/homology/flip.lean", "changes": []}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "theorem", "d_comp_d", ["homological_complex"]]]}]}, {"timestamp": 1621498000, "sha": "2d414d00", "message": "feat(algebra/homology/homological_complex): add condition to hom.comm' (#7666)", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": "src/algebra/homology/differential_object.lean", "newPath": "src/algebra/homology/differential_object.lean", "changes": []}, {"oldPath": "src/algebra/homology/flip.lean", "newPath": "src/algebra/homology/flip.lean", "changes": []}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "theorem", "comm", ["homological_complex", "hom"]]]}, {"oldPath": "src/algebra/homology/single.lean", "newPath": "src/algebra/homology/single.lean", "changes": []}]}, {"timestamp": 1621497999, "sha": "0cb7ecc5", "message": "fix(category_theory/limits/shapes/zero): use fully qualified names in locale (#7619)", "changes": [{"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}]}, {"timestamp": 1621476039, "sha": "5a67f2c6", "message": "chore(topology): rename compact to is_compact in theorem names (#7672)\nSome time ago, we switched from `compact` to `is_compact`, for coherence with `is_open`, `is_closed` and so on. However, several lemma names were not changed at the time. This PR fixes some of them. Plus a few minor stuff (notably, introduce `le_self_add` to replace the dozen of uses of `le_add_right (le_refl _)` in the library -- and weaken some `metric` assumptions to `pseudo_metric`, without touching the proofs).", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "le_mul_self", []], ["add", "theorem", "le_self_mul", []]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "tsum_geometric", ["ennreal"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "one_sub_inv_two", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/hausdorff_measure.lean", "newPath": "src/measure_theory/hausdorff_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "measure_add_measure_compl", ["measure_theory"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "cauchy_seq_of_dist_le_of_summable", []], ["mod", "theorem", "cauchy_seq_of_edist_le_of_summable", []], ["mod", "theorem", "cauchy_seq_of_summable_dist", []], ["mod", "theorem", "dist_le_tsum_dist_of_tendsto", []], ["mod", "theorem", "dist_le_tsum_dist_of_tendsto₀", []], ["mod", "theorem", "dist_le_tsum_of_dist_le_of_tendsto", []], ["mod", "theorem", "dist_le_tsum_of_dist_le_of_tendsto₀", []]]}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": []}, {"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_nat_tsum", ["ennreal"]]]}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "def", "Hausdorff_edist", ["emetric"]], ["mod", "theorem", "Hausdorff_edist_def", ["emetric"]], ["del", "theorem", "mem_iff_ind_edist_zero_of_closed", ["emetric"]], ["add", "theorem", "mem_iff_inf_edist_zero_of_closed", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/kuratowski.lean", "newPath": "src/topology/metric_space/kuratowski.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "theorem", "compact_diff", []], ["del", "theorem", "compact_empty", []], ["del", "theorem", "compact_iff_compact_space", []], ["del", "theorem", "compact_iff_compact_univ", []], ["del", "theorem", "compact_iff_finite_subcover", []], ["del", "theorem", "compact_iff_finite_subfamily_closed", []], ["del", "theorem", "compact_iff_ultrafilter_le_nhds", []], ["del", "theorem", "compact_of_finite_subcover", []], ["del", "theorem", "compact_of_finite_subfamily_closed", []], ["del", "theorem", "compact_pi_infinite", []], ["del", "theorem", "compact_range", []], ["del", "theorem", "compact_singleton", []], ["del", "theorem", "compact_univ_pi", []], ["del", "theorem", "compact_iff_compact_image", ["embedding"]], ["add", "theorem", "is_compact_iff_is_compact_image", ["embedding"]], ["del", "theorem", "compact", ["is_closed"]], ["add", "theorem", "is_compact", ["is_closed"]], ["del", "theorem", "is_closed_proj_of_compact", []], ["add", "theorem", "is_closed_proj_of_is_compact", []], ["add", "theorem", "diff", ["is_compact"]], ["add", "theorem", "is_compact_empty", []], ["add", "theorem", "is_compact_iff_compact_space", []], ["add", "theorem", "is_compact_iff_finite_subcover", []], ["add", "theorem", "is_compact_iff_finite_subfamily_closed", []], ["add", "theorem", "is_compact_iff_is_compact_univ", []], ["add", "theorem", "is_compact_iff_ultrafilter_le_nhds", []], ["add", "theorem", "is_compact_of_finite_subcover", []], ["add", "theorem", "is_compact_of_finite_subfamily_closed", []], ["add", "theorem", "is_compact_pi_infinite", []], ["add", "theorem", "is_compact_range", []], ["add", "theorem", "is_compact_singleton", []], ["add", "theorem", "is_compact_univ_pi", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1621476037, "sha": "1016a140", "message": "refactor(linear_algebra/finite_dimensional): generalize finite_dimensional.iff_fg to division rings (#7644)\nReplace `finite_dimensional.iff_fg` (working over a field) with `is_noetherian.iff_fg` (working over a division ring). Also, use the `module.finite` predicate.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": null, "newPath": "src/field_theory/finiteness.lean", "changes": [["add", "theorem", "coe_finset_basis_index", ["is_noetherian"]], ["add", "theorem", "dim_lt_omega", ["is_noetherian"]], ["add", "theorem", "finite_basis_index", ["is_noetherian"]], ["add", "theorem", "iff_dim_lt_omega", ["is_noetherian"]], ["add", "theorem", "iff_fg", ["is_noetherian"]], ["add", "theorem", "range_finset_basis", ["is_noetherian"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "coe_finset_basis_index", ["finite_dimensional"]], ["del", "theorem", "dim_lt_omega", ["finite_dimensional"]], ["del", "theorem", "finite_basis_index", ["finite_dimensional"]], ["del", "theorem", "finite_dimensional_iff_dim_lt_omega", ["finite_dimensional"]], ["del", "theorem", "iff_fg", ["finite_dimensional"]], ["del", "theorem", "range_finset_basis", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["mod", "theorem", "finite_def", ["module"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "finite_of_linear_independent", []]]}]}, {"timestamp": 1621476036, "sha": "641cece5", "message": "feat(algebra/homology): the homotopy category (#7484)", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/homotopy_category.lean", "changes": [["add", "def", "map_homotopy_category", ["category_theory", "functor"]], ["add", "def", "map_homotopy_category", ["category_theory", "nat_trans"]], ["add", "theorem", "map_homotopy_category_comp", ["category_theory", "nat_trans"]], ["add", "theorem", "map_homotopy_category_id", ["category_theory", "nat_trans"]], ["add", "def", "homotopic", []], ["add", "theorem", "eq_of_homotopy", ["homotopy_category"]], ["add", "def", "homology_factors", ["homotopy_category"]], ["add", "theorem", "homology_factors_hom_app", ["homotopy_category"]], ["add", "theorem", "homology_factors_inv_app", ["homotopy_category"]], ["add", "def", "homology_functor", ["homotopy_category"]], ["add", "theorem", "homology_functor_map_factors", ["homotopy_category"]], ["add", "def", "homotopy_equiv_of_iso", ["homotopy_category"]], ["add", "def", "homotopy_of_eq", ["homotopy_category"]], ["add", "def", "homotopy_out_map", ["homotopy_category"]], ["add", "def", "iso_of_homotopy_equiv", ["homotopy_category"]], ["add", "def", "quotient", ["homotopy_category"]], ["add", "theorem", "quotient_map_out", ["homotopy_category"]], ["add", "theorem", "quotient_map_out_comp_out", ["homotopy_category"]], ["add", "theorem", "quotient_obj_as", ["homotopy_category"]], ["add", "def", "homotopy_category", []]]}]}, {"timestamp": 1621452507, "sha": "116c162f", "message": "feat(algebra/opposites): `opposite` of a `group_with_zero` (#7662)\nCo-authored by @eric-wieser", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}]}, {"timestamp": 1621439340, "sha": "ed4161c5", "message": "feat(data/polynomial/coeff): generalize polynomial.coeff_smul to match mv_polynomial.coeff_smul (#7663)\nNotably this means these lemmas cover `nat` and `int` actions.", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["mod", "theorem", "coeff_smul", ["polynomial"]], ["mod", "theorem", "support_smul", ["polynomial"]]]}]}, {"timestamp": 1621439338, "sha": "599712ff", "message": "feat(data/int/parity, data/nat/parity): add some lemmas (#7624)", "changes": [{"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["mod", "theorem", "even_coe_nat", ["int"]], ["add", "theorem", "even_pow'", ["int"]], ["mod", "theorem", "even_pow", ["int"]], ["add", "theorem", "nat_abs_even", ["int"]], ["add", "theorem", "nat_abs_odd", ["int"]], ["add", "theorem", "odd_coe_nat", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "even_pow'", ["nat"]], ["mod", "theorem", "even_pow", ["nat"]]]}]}, {"timestamp": 1621428073, "sha": "697c8dd9", "message": "refactor(topology/basic): use dot notation in `is_open.union` and friends (#7647)\nThe fact that the union of two open sets is open is called `is_open_union`. We rename it to `is_open.union` to enable dot notation. Same with `is_open_inter`, `is_closed_union` and `is_closed_inter` and `is_clopen_union` and `is_clopen_inter` and `is_clopen_diff`.", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/geometry/manifold/bump_function.lean", "newPath": "src/geometry/manifold/bump_function.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/topology/G_delta.lean", "newPath": "src/topology/G_delta.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered/basic.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "inter", ["is_closed"]], ["add", "theorem", "not", ["is_closed"]], ["add", "theorem", "union", ["is_closed"]], ["del", "theorem", "is_closed_inter", []], ["del", "theorem", "is_closed_union", []], ["add", "theorem", "and", ["is_open"]], ["add", "theorem", "inter", ["is_open"]], ["add", "theorem", "sdiff", ["is_open"]], ["add", "theorem", "union", ["is_open"]], ["del", "theorem", "is_open_and", []], ["del", "theorem", "is_open_diff", []], ["del", "theorem", "is_open_inter", []], ["del", "theorem", "is_open_neg", []], ["del", "theorem", "is_open_union", []]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": [["add", "theorem", "inter", ["Scott", "is_open"]], ["del", "theorem", "is_open_inter", ["Scott"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/shrinking_lemma.lean", "newPath": "src/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "compl", ["is_clopen"]], ["add", "theorem", "diff", ["is_clopen"]], ["add", "theorem", "inter", ["is_clopen"]], ["add", "theorem", "union", ["is_clopen"]], ["del", "theorem", "is_clopen_compl", []], ["del", "theorem", "is_clopen_diff", []], ["del", "theorem", "is_clopen_inter", []], ["del", "theorem", "is_clopen_union", []]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1621418254, "sha": "c7a51977", "message": "feat(data/polynomial/degree/definitions): `polynomial.degree_C_mul_X_le` (#7659)", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_C_mul_X_le", ["polynomial"]]]}]}, {"timestamp": 1621418253, "sha": "040ebea0", "message": "fix(analysis/normed_space/normed_group_quotient): put lemmas inside namespace (#7653)", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_quotient.lean", "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": [["del", "theorem", "norm_le", ["add_subgroup", "is_quotient"]], ["del", "theorem", "norm_lift", ["add_subgroup", "is_quotient"]], ["del", "structure", "is_quotient", ["add_subgroup"]], ["del", "theorem", "is_quotient_quotient", ["add_subgroup"]], ["del", "def", "lift", ["add_subgroup"]], ["del", "theorem", "lift_mk", ["add_subgroup"]], ["del", "theorem", "lift_unique", ["add_subgroup"]], ["add", "theorem", "norm_le", ["normed_group_hom", "is_quotient"]], ["add", "theorem", "norm_lift", ["normed_group_hom", "is_quotient"]], ["add", "structure", "is_quotient", ["normed_group_hom"]], ["add", "theorem", "is_quotient_quotient", ["normed_group_hom"]], ["add", "def", "lift", ["normed_group_hom"]], ["add", "theorem", "lift_mk", ["normed_group_hom"]], ["add", "theorem", "lift_unique", ["normed_group_hom"]]]}]}, {"timestamp": 1621413891, "sha": "c1e9f942", "message": "docs(field_theory/polynomial_galois_group): improve existing docs (#7586)", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "card_complex_roots_eq_card_real_add_card_not_gal_inv", ["polynomial", "gal"]], ["del", "theorem", "gal_action_hom_bijective_of_prime_degree_aux", ["polynomial", "gal"]]]}]}, {"timestamp": 1621391804, "sha": "1d4990e2", "message": "chore(scripts): update nolints.txt (#7658)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1621391803, "sha": "918dcc0a", "message": "chore(algebra/homology): further dualization (#7657)", "changes": [{"oldPath": "src/algebra/homology/augment.lean", "newPath": "src/algebra/homology/augment.lean", "changes": [["add", "theorem", "chain_complex_d_succ_succ_zero", ["chain_complex"]], ["del", "theorem", "cochain_complex_d_succ_succ_zero", ["chain_complex"]], ["add", "def", "augment", ["cochain_complex"]], ["add", "theorem", "augment_X_succ", ["cochain_complex"]], ["add", "theorem", "augment_X_zero", ["cochain_complex"]], ["add", "theorem", "augment_d_succ_succ", ["cochain_complex"]], ["add", "theorem", "augment_d_zero_one", ["cochain_complex"]], ["add", "def", "augment_truncate", ["cochain_complex"]], ["add", "theorem", "augment_truncate_hom_f_succ", ["cochain_complex"]], ["add", "theorem", "augment_truncate_hom_f_zero", ["cochain_complex"]], ["add", "theorem", "augment_truncate_inv_f_succ", ["cochain_complex"]], ["add", "theorem", "augment_truncate_inv_f_zero", ["cochain_complex"]], ["add", "theorem", "cochain_complex_d_succ_succ_zero", ["cochain_complex"]], ["add", "def", "from_single₀_as_complex", ["cochain_complex"]], ["add", "def", "to_truncate", ["cochain_complex"]], ["add", "def", "truncate", ["cochain_complex"]], ["add", "def", "truncate_augment", ["cochain_complex"]], ["add", "theorem", "truncate_augment_hom_f", ["cochain_complex"]], ["add", "theorem", "truncate_augment_inv_f", ["cochain_complex"]]]}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "def", "mk'", ["cochain_complex"]], ["add", "theorem", "mk'_X_0", ["cochain_complex"]], ["add", "theorem", "mk'_X_1", ["cochain_complex"]], ["add", "theorem", "mk'_d_1_0", ["cochain_complex"]], ["add", "def", "mk", ["cochain_complex"]], ["add", "theorem", "mk_X_0", ["cochain_complex"]], ["add", "theorem", "mk_X_1", ["cochain_complex"]], ["add", "theorem", "mk_X_2", ["cochain_complex"]], ["add", "def", "mk_aux", ["cochain_complex"]], ["add", "theorem", "mk_d_1_0", ["cochain_complex"]], ["add", "theorem", "mk_d_2_0", ["cochain_complex"]], ["add", "def", "mk_hom", ["cochain_complex"]], ["add", "def", "mk_hom_aux", ["cochain_complex"]], ["add", "theorem", "mk_hom_f_0", ["cochain_complex"]], ["add", "theorem", "mk_hom_f_1", ["cochain_complex"]], ["add", "theorem", "mk_hom_f_succ_succ", ["cochain_complex"]], ["add", "def", "flat", ["cochain_complex", "mk_struct"]], ["add", "structure", "mk_struct", ["cochain_complex"]]]}, {"oldPath": "src/algebra/homology/single.lean", "newPath": "src/algebra/homology/single.lean", "changes": [["add", "def", "from_single₀_equiv", ["cochain_complex"]], ["add", "def", "homology_functor_0_single₀", ["cochain_complex"]], ["add", "def", "homology_functor_succ_single₀", ["cochain_complex"]], ["add", "def", "single₀", ["cochain_complex"]], ["add", "def", "single₀_iso_single", ["cochain_complex"]], ["add", "theorem", "single₀_map_f_0", ["cochain_complex"]], ["add", "theorem", "single₀_map_f_succ", ["cochain_complex"]], ["add", "theorem", "single₀_obj_X_0", ["cochain_complex"]], ["add", "theorem", "single₀_obj_X_d", ["cochain_complex"]], ["add", "theorem", "single₀_obj_X_d_from", ["cochain_complex"]], ["add", "theorem", "single₀_obj_X_d_to", ["cochain_complex"]], ["add", "theorem", "single₀_obj_X_succ", ["cochain_complex"]]]}]}, {"timestamp": 1621391802, "sha": "aee918b8", "message": "feat(algebraic_topology/simplicial_object): Some API for converting between simplicial and cosimplicial (#7656)\nThis adds some code which is helpful to convert back and forth between simplicial and cosimplicial object.\nFor augmented objects, this doesn't follow directly from the existing API in `category_theory/opposite`.", "changes": [{"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "left_op", ["category_theory", "cosimplicial_object", "augmented"]], ["add", "def", "left_op_right_op_iso", ["category_theory", "cosimplicial_object", "augmented"]], ["add", "def", "cosimplicial_to_simplicial_augmented", ["category_theory"]], ["add", "def", "simplicial_cosimplicial_augmented_equiv", ["category_theory"]], ["add", "def", "simplicial_cosimplicial_equiv", ["category_theory"]], ["add", "def", "right_op", ["category_theory", "simplicial_object", "augmented"]], ["add", "def", "right_op_left_op_iso", ["category_theory", "simplicial_object", "augmented"]], ["add", "def", "simplicial_to_cosimplicial_augmented", ["category_theory"]]]}]}, {"timestamp": 1621387007, "sha": "24d2713d", "message": "feat(algebraic_topology/simplicial_object): Whiskering of simplicial objects. (#7651)\nThis adds whiskering constructions for (truncated, augmented) (co)simplicial objects.", "changes": [{"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "whiskering", ["category_theory", "cosimplicial_object", "augmented"]], ["add", "def", "whiskering_obj", ["category_theory", "cosimplicial_object", "augmented"]], ["add", "def", "whiskering", ["category_theory", "cosimplicial_object", "truncated"]], ["add", "def", "whiskering", ["category_theory", "cosimplicial_object"]], ["add", "def", "whiskering", ["category_theory", "simplicial_object", "augmented"]], ["add", "def", "whiskering_obj", ["category_theory", "simplicial_object", "augmented"]], ["add", "def", "whiskering", ["category_theory", "simplicial_object", "truncated"]], ["add", "def", "whiskering", ["category_theory", "simplicial_object"]]]}]}, {"timestamp": 1621376827, "sha": "0bcfff99", "message": "feat(linear_algebra/basis) remove several [nontrivial R] (#7642)\nWe remove some unnecessary `nontrivial R`.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "def", "reindex_range", ["basis"]], ["mod", "theorem", "reindex_range_apply", ["basis"]], ["mod", "theorem", "reindex_range_repr'", ["basis"]], ["mod", "theorem", "reindex_range_repr", ["basis"]], ["mod", "theorem", "reindex_range_repr_self", ["basis"]], ["mod", "theorem", "reindex_range_self", ["basis"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "def", "subsingleton_equiv", ["module"]]]}, {"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["mod", "theorem", "to_matrix_alg_equiv_reindex_range", ["linear_map"]], ["mod", "theorem", "to_matrix_reindex_range", ["linear_map"]]]}]}, {"timestamp": 1621353765, "sha": "a51d1e0e", "message": "feat(algebra/homology/homological_complex): Dualizes some constructions (#7643)\nThis PR adds `cochain_complex.of` and `cochain_complex.of_hom`. \nStill not done: `cochain_complex.mk`.", "changes": [{"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "def", "of", ["cochain_complex"]], ["add", "theorem", "of_X", ["cochain_complex"]], ["add", "theorem", "of_d", ["cochain_complex"]], ["add", "theorem", "of_d_ne", ["cochain_complex"]], ["add", "def", "of_hom", ["cochain_complex"]]]}]}, {"timestamp": 1621353764, "sha": "e2756041", "message": "chore(data/set/basic): add `set.compl_eq_compl` (#7641)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_eq_compl", ["set"]]]}]}, {"timestamp": 1621334844, "sha": "c2114d45", "message": "refactor(linear_algebra/dimension): generalize definition of `module.rank` (#7634)\nThe main change is to generalize the definition of `module.rank`. It used to be the infimum over cardinalities of bases, and is now the supremum over cardinalities of linearly independent sets.\nI have not attempted to systematically generalize theorems about the rank; there is lots more work to be done. For now I've just made a few easy generalizations (either replacing `field` with `division_ring`, or `division_ring` with `ring`+`nontrivial`).", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "reindex_range_apply", ["basis"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["mod", "theorem", "linear_independent_singleton", []], ["mod", "theorem", "linear_independent_unique_iff", []]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1621334843, "sha": "e6c787fe", "message": "feat(algebra/opposites): add `has_scalar (opposite α) α` instances (#7630)\nThe action is defined as:\n```lean\nlemma op_smul_eq_mul [monoid α] {a a' : α} : op a • a' = a' * a := rfl\n```\nWe have a few of places in the library where we prove things about `r • b`, and then extract a proof of `a * b = a • b` for free. However, we have no way to do this for `b * a` right now unless multiplication is commutative.\nBy adding this action, we have `b * a = op a • b` so in many cases could reuse the smul lemma.\nThis instance does not create a diamond:\n```lean\n-- the two paths to `mul_action (opposite α) (opposite α)` are defeq\nexample [monoid α] : monoid.to_mul_action (opposite α) = opposite.mul_action α (opposite α) := rfl\n```\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Right.20multiplication.20as.20a.20mul_action/near/239012917)", "changes": [{"oldPath": "src/algebra/module/opposites.lean", "newPath": "src/algebra/module/opposites.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op_smul_eq_mul", ["opposite"]]]}]}, {"timestamp": 1621313402, "sha": "1a2781a7", "message": "feat(analysis/normed_space): the category of seminormed groups (#7617)\nFrom LTE, along with adding `SemiNormedGroup₁`, the subcategory of norm non-increasing maps.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/SemiNormedGroup.lean", "changes": [["add", "theorem", "coe_id", ["SemiNormedGroup"]], ["add", "theorem", "coe_of", ["SemiNormedGroup"]], ["add", "def", "of", ["SemiNormedGroup"]], ["add", "def", "SemiNormedGroup", []], ["add", "theorem", "coe_comp", ["SemiNormedGroup₁"]], ["add", "theorem", "coe_id", ["SemiNormedGroup₁"]], ["add", "theorem", "coe_of", ["SemiNormedGroup₁"]], ["add", "theorem", "hom_ext", ["SemiNormedGroup₁"]], ["add", "theorem", "iso_isometry", ["SemiNormedGroup₁"]], ["add", "def", "mk_hom", ["SemiNormedGroup₁"]], ["add", "theorem", "mk_hom_apply", ["SemiNormedGroup₁"]], ["add", "def", "mk_iso", ["SemiNormedGroup₁"]], ["add", "def", "of", ["SemiNormedGroup₁"]], ["add", "theorem", "zero_apply", ["SemiNormedGroup₁"]], ["add", "def", "SemiNormedGroup₁", []]]}, {"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "zero", ["normed_group_hom", "norm_noninc"]]]}]}, {"timestamp": 1621313401, "sha": "3694945d", "message": "feat(logic/is_empty): Add is_empty typeclass (#7606)\n* Refactor some equivalences that use `empty` or `pempty`.\n* Replace `α → false` with `is_empty α` in various places (but not everywhere, we can do that in follow-up PRs).\n* `infinite` is proven equivalent to `is_empty (fintype α)`. The old `not_fintype` is renamed to `fintype.false` (to allow projection notation), and there are two useful variants `infinite.false` and `not_fintype` added with different arguments explicit.\n* add instance `unique true`.\n* Changed the type of `fin_one_equiv` from `fin 1 ≃ punit` to `fin 1 ≃ unit` (it was used only once, where the former formulation required giving an explicit universe level).\n* renamings:\n`equiv.subsingleton_iff` -> `equiv.subsingleton_congr`\n`finprod_of_empty` -> `finprod_of_is_empty`", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["del", "theorem", "finprod_of_empty", []], ["add", "theorem", "finprod_of_is_empty", []]]}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["mod", "def", "chain_complex", []], ["mod", "def", "cochain_complex", []]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/combinatorics/hall.lean", "newPath": "src/combinatorics/hall.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "arrow_punit_of_is_empty", ["equiv"]], ["del", "def", "empty_of_not_nonempty", ["equiv"]], ["mod", "def", "empty_sum", ["equiv"]], ["mod", "theorem", "empty_sum_apply_inr", ["equiv"]], ["mod", "def", "equiv_empty", ["equiv"]], ["add", "def", "equiv_empty_equiv", ["equiv"]], ["mod", "def", "fun_unique", ["equiv"]], ["add", "theorem", "is_empty_congr", ["equiv"]], ["del", "def", "pempty_of_not_nonempty", ["equiv"]], ["del", "def", "pempty_sum", ["equiv"]], ["del", "theorem", "pempty_sum_apply_inr", ["equiv"]], ["add", "theorem", "subsingleton_congr", ["equiv"]], ["del", "theorem", "subsingleton_iff", ["equiv"]], ["mod", "def", "sum_empty", ["equiv"]], ["mod", "theorem", "sum_empty_apply_inl", ["equiv"]], ["del", "def", "sum_pempty", ["equiv"]], ["del", "theorem", "sum_pempty_apply_inl", ["equiv"]], ["mod", "def", "{u'", ["equiv"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["mod", "def", "fin_one_equiv", []]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "def", "card_eq_zero_equiv_equiv_empty", ["fintype"]], ["del", "def", "card_eq_zero_equiv_equiv_pempty", ["fintype"]], ["mod", "theorem", "card_eq_zero_iff", ["fintype"]], ["add", "theorem", "is_empty_fintype", []], ["add", "theorem", "not_fintype", []], ["mod", "theorem", "not_nonempty_fintype", []]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["mod", "theorem", "choice_eq_none", ["option"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/cyclic.lean", "newPath": "src/group_theory/specific_groups/cyclic.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix/block.lean", "newPath": "src/linear_algebra/matrix/block.lean", "changes": []}, {"oldPath": null, "newPath": "src/logic/is_empty.lean", "changes": [["add", "theorem", "exists_iff", ["is_empty"]], ["add", "theorem", "forall_iff", ["is_empty"]], ["add", "def", "is_empty_elim", []], ["add", "theorem", "is_empty_iff", []], ["add", "theorem", "is_empty_or_nonempty", []], ["add", "theorem", "not_is_empty_iff", []], ["add", "theorem", "not_is_empty_of_nonempty", []], ["add", "theorem", "not_nonempty_iff", []]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["del", "def", "unique_of_empty", ["pi"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["del", "theorem", "eq_one_iff_subsingleton_and_nonempty", ["cardinal"]], ["add", "theorem", "eq_one_iff_unique", ["cardinal"]], ["add", "theorem", "eq_zero_iff_is_empty", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}]}, {"timestamp": 1621313399, "sha": "1b864c0d", "message": "feat(analysis/normed_group): quotients (#7603)\nFrom LTE.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "mem_ball_0_iff", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/normed_group_quotient.lean", "changes": [["add", "theorem", "norm_le", ["add_subgroup", "is_quotient"]], ["add", "theorem", "norm_lift", ["add_subgroup", "is_quotient"]], ["add", "structure", "is_quotient", ["add_subgroup"]], ["add", "theorem", "is_quotient_quotient", ["add_subgroup"]], ["add", "theorem", "ker_normed_mk", ["add_subgroup"]], ["add", "def", "lift", ["add_subgroup"]], ["add", "theorem", "lift_mk", ["add_subgroup"]], ["add", "theorem", "lift_unique", ["add_subgroup"]], ["add", "theorem", "norm_normed_mk", ["add_subgroup"]], ["add", "theorem", "norm_normed_mk_le", ["add_subgroup"]], ["add", "theorem", "norm_trivial_quotient_mk", ["add_subgroup"]], ["add", "theorem", "apply", ["add_subgroup", "normed_mk"]], ["add", "def", "normed_mk", ["add_subgroup"]], ["add", "theorem", "surjective_normed_mk", ["add_subgroup"]], ["add", "theorem", "bdd_below_image_norm", []], ["add", "theorem", "image_norm_nonempty", []], ["add", "theorem", "norm_mk_lt'", []], ["add", "theorem", "norm_mk_lt", []], ["add", "theorem", "norm_mk_nonneg", []], ["add", "theorem", "norm_mk_zero", []], ["add", "theorem", "norm_zero_eq_zero", []], ["add", "theorem", "quotient_nhd_basis", []], ["add", "theorem", "quotient_norm_add_le", []], ["add", "theorem", "quotient_norm_eq_zero_iff", []], ["add", "theorem", "quotient_norm_mk_eq", []], ["add", "theorem", "quotient_norm_mk_le", []], ["add", "theorem", "quotient_norm_neg", []], ["add", "theorem", "quotient_norm_nonneg", []], ["add", "theorem", "quotient_norm_sub_rev", []]]}]}, {"timestamp": 1621306707, "sha": "f900513a", "message": "feat(linear_algebra/matrix): slightly generalize `smul_left_mul_matrix` (#7632)\nTwo minor changes that make `smul_left_mul_matrix` slightly easier to apply:\n * the bases `b` and `c` can now be indexed by different types\n * replace `(i, k)` on the LHS with `ik.1 ik.2` on the RHS (so you don't have to introduce the constructor with `rw ← prod.mk.eta` somewhere deep in your expression)", "changes": [{"oldPath": "src/linear_algebra/matrix/to_lin.lean", "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["mod", "theorem", "smul_left_mul_matrix", ["algebra"]]]}]}, {"timestamp": 1621292707, "sha": "b8a69951", "message": "feat(data/polynomial): the `d-1`th coefficient of `polynomial.map` (#7639)\nWe prove `polynomial.next_coeff_map` just like `polynomial.leading_coeff_map'`.", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "next_coeff_map", ["polynomial"]]]}]}, {"timestamp": 1621292706, "sha": "ccf5188f", "message": "feat(ring_theory/power_basis): the dimension of a power basis is positive (#7638)\nWe already have `pb.dim_ne_zero : pb.dim ≠ 0` (assuming nontriviality), but it's also useful to also have it in the form `0 < pb.dim`.", "changes": [{"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "dim_pos", ["power_basis"]]]}]}, {"timestamp": 1621275036, "sha": "4ab0e350", "message": "feat(data/multiset): the product of inverses is the inverse of the product (#7637)\nEntirely analogous to `prod_map_mul` defined above.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "prod_map_inv", ["multiset"]]]}]}, {"timestamp": 1621255131, "sha": "818dffa0", "message": "feat(linear_algebra): a finite free module has a unique findim (#7631)\nI needed this easy corollary, so I PR'd it, even though it should be generalizable once we have a better theory of e.g. Gaussian elimination. (I also tried to generalize `mk_eq_mk_of_basis`, but the current proof really requires the existence of multiplicative inverses for the coefficients.)", "changes": [{"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": []}]}, {"timestamp": 1621255130, "sha": "36e01274", "message": "feat(linear_algebra/basic): add_monoid_hom_lequiv_int (#7629)\nFrom LTE.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "map_nat_module_smul", ["add_monoid_hom"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "to_nat_linear_map", ["add_monoid_hom"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "add_monoid_hom_lequiv_int", []], ["add", "def", "add_monoid_hom_lequiv_nat", []]]}]}, {"timestamp": 1621255129, "sha": "d201a182", "message": "refactor(algebra/homology/homotopy): avoid needing has_zero_object (#7621)\nA refactor of the definition of `homotopy`, so we don't need `has_zero_object`.", "changes": [{"oldPath": "src/algebra/homology/homotopy.lean", "newPath": "src/algebra/homology/homotopy.lean", "changes": [["add", "def", "d_next", []], ["add", "theorem", "d_next_comp_left", []], ["add", "theorem", "d_next_comp_right", []], ["add", "theorem", "d_next_eq", []], ["add", "theorem", "d_next_eq_d_from_from_next", []], ["del", "def", "from_next'", []], ["del", "theorem", "from_next'_add", []], ["del", "theorem", "from_next'_comp_left", []], ["del", "theorem", "from_next'_comp_right", []], ["del", "theorem", "from_next'_eq", []], ["del", "theorem", "from_next'_neg", []], ["del", "theorem", "from_next'_zero", []], ["add", "def", "from_next", []], ["del", "theorem", "comm", ["homotopy"]], ["add", "theorem", "d_next_succ_chain_complex", ["homotopy"]], ["add", "theorem", "d_next_zero_chain_complex", ["homotopy"]], ["del", "theorem", "from_next'_succ_chain_complex", ["homotopy"]], ["del", "theorem", "from_next'_zero_chain_complex", ["homotopy"]], ["del", "def", "from_next", ["homotopy"]], ["add", "theorem", "prev_d_chain_complex", ["homotopy"]], ["del", "theorem", "to_prev'_chain_complex", ["homotopy"]], ["del", "def", "to_prev", ["homotopy"]], ["add", "def", "prev_d", []], ["add", "theorem", "prev_d_comp_left", []], ["add", "theorem", "prev_d_eq", []], ["add", "theorem", "prev_d_eq_to_prev_d_to", []], ["del", "def", "to_prev'", []], ["del", "theorem", "to_prev'_add", []], ["del", "theorem", "to_prev'_comp_left", []], ["del", "theorem", "to_prev'_eq", []], ["del", "theorem", "to_prev'_neg", []], ["del", "theorem", "to_prev'_zero", []], ["add", "def", "to_prev", []]]}]}, {"timestamp": 1621255129, "sha": "07fb3d7e", "message": "refactor(data/finsupp/antidiagonal): Make antidiagonal a finset (#7595)\nPursuant to discussion [here](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/antidiagonals.20having.20multiplicity) \nRefactoring so that `finsupp.antidiagonal` and `multiset.antidiagonal` are finsets.\n~~Still TO DO: `multiset.antidiagonal`~~", "changes": [{"oldPath": "src/data/finsupp/antidiagonal.lean", "newPath": "src/data/finsupp/antidiagonal.lean", "changes": [["add", "def", "antidiagonal'", ["finsupp"]], ["mod", "def", "antidiagonal", ["finsupp"]], ["add", "theorem", "antidiagonal_filter_fst_eq", ["finsupp"]], ["add", "theorem", "antidiagonal_filter_snd_eq", ["finsupp"]], ["del", "theorem", "antidiagonal_support_filter_fst_eq", ["finsupp"]], ["del", "theorem", "antidiagonal_support_filter_snd_eq", ["finsupp"]], ["mod", "theorem", "antidiagonal_zero", ["finsupp"]], ["add", "theorem", "mem_antidiagonal", ["finsupp"]], ["del", "theorem", "mem_antidiagonal_support", ["finsupp"]], ["del", "theorem", "prod_antidiagonal_support_swap", ["finsupp"]], ["add", "theorem", "prod_antidiagonal_swap", ["finsupp"]], ["add", "theorem", "swap_mem_antidiagonal", ["finsupp"]], ["del", "theorem", "swap_mem_antidiagonal_support", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1621238730, "sha": "8394e594", "message": "feat(data/finset/basic): perm_of_nodup_nodup_to_finset_eq (#7588)\nAlso `finset.exists_list_nodup_eq`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "exists_list_nodup_eq", ["finset"]], ["add", "theorem", "perm_of_nodup_nodup_to_finset_eq", ["list"]], ["add", "theorem", "to_finset_inj", ["multiset", "nodup"]]]}]}, {"timestamp": 1621231304, "sha": "739d93c6", "message": "feat(algebra/lie/weights): the zero root subalgebra is self-normalizing (#7622)", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "mem_mk_iff", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": [["add", "theorem", "mem_zero_root_subalgebra", ["lie_algebra"]], ["add", "theorem", "zero_root_subalgebra_is_cartan_of_eq", ["lie_algebra"]], ["add", "theorem", "zero_root_subalgebra_normalizer_eq_self", ["lie_algebra"]], ["add", "theorem", "coe_weight_space'", ["lie_module"]], ["add", "def", "weight_space'", ["lie_module"]]]}]}, {"timestamp": 1621223848, "sha": "2077c90c", "message": "doc(counterexamples/canonically_ordered_comm_semiring_two_mul): fix url (#7625)", "changes": [{"oldPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}]}, {"timestamp": 1621219240, "sha": "d40e40c2", "message": "chore(scripts): update nolints.txt (#7627)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1621214539, "sha": "72e4cca4", "message": "ci(.github/workflows/build.yml): check counterexamples (#7618)\nI meant to add this to #7553 but I forgot before it got merged.\nThis also moves the contents of `src/counterexamples` to `counterexamples/`.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "src/counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "newPath": "counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": []}, {"oldPath": "src/counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "newPath": "counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "changes": []}, {"oldPath": "scripts/lint-style.sh", "newPath": "scripts/lint-style.sh", "changes": []}, {"oldPath": "scripts/lint_style_sanity_test.py", "newPath": "scripts/lint_style_sanity_test.py", "changes": []}]}, {"timestamp": 1621209732, "sha": "84a27d60", "message": "feat(set_theory/game): add mul_one and mul_assoc for pgames (#7610)\nand several `simp` lemmas. I also simplified some of the existing proofs using `rw` and `simp` and made them easier to read.\nThis is the final PR for multiplication of pgames (hopefully)!\nNext step: prove `numeric_mul` and define multiplication for `surreal`.", "changes": [{"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": [["del", "theorem", "quot_add", ["game"]], ["del", "theorem", "quot_neg", ["game"]], ["del", "theorem", "quot_sub", ["game"]], ["mod", "theorem", "left_distrib_equiv", ["pgame"]], ["del", "theorem", "left_distrib_equiv_aux'", ["pgame"]], ["del", "theorem", "left_distrib_equiv_aux", ["pgame"]], ["add", "theorem", "mul_assoc_equiv", ["pgame"]], ["del", "def", "mul_comm_relabelling", ["pgame"]], ["add", "theorem", "mul_one_equiv", ["pgame"]], ["add", "theorem", "one_mul_equiv", ["pgame"]], ["add", "theorem", "quot_add", ["pgame"]], ["add", "theorem", "quot_eq_of_mk_quot_eq", ["pgame"]], ["add", "theorem", "quot_left_distrib", ["pgame"]], ["add", "theorem", "quot_left_distrib_sub", ["pgame"]], ["add", "theorem", "quot_mul_assoc", ["pgame"]], ["add", "theorem", "quot_mul_comm", ["pgame"]], ["add", "theorem", "quot_mul_neg", ["pgame"]], ["add", "theorem", "quot_mul_one", ["pgame"]], ["add", "theorem", "quot_mul_zero", ["pgame"]], ["add", "theorem", "quot_neg", ["pgame"]], ["add", "theorem", "quot_neg_mul", ["pgame"]], ["add", "theorem", "quot_one_mul", ["pgame"]], ["add", "theorem", "quot_right_distrib", ["pgame"]], ["add", "theorem", "quot_right_distrib_sub", ["pgame"]], ["add", "theorem", "quot_sub", ["pgame"]], ["add", "theorem", "quot_zero_mul", ["pgame"]]]}]}, {"timestamp": 1621191533, "sha": "aedd12da", "message": "refactor(measure_theory/haar_measure): move general material to content.lean, make content a structure (#7615)\nSeveral facts that are proved only for the Haar measure (including for instance regularity) are true for any measure constructed from a content. We move these facts to the `content.lean` file (and make `content` a structure for easier management). Also, move the notion of regular measure to its own file, and make it a class.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["del", "theorem", "exists_compact_not_null", ["measure_theory", "measure", "regular"]], ["del", "theorem", "inner_regular_eq", ["measure_theory", "measure", "regular"]], ["del", "theorem", "outer_regular_eq", ["measure_theory", "measure", "regular"]], ["del", "structure", "regular", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": [["add", "theorem", "apply_eq_coe_to_fun", ["measure_theory", "content"]], ["add", "theorem", "borel_le_caratheodory", ["measure_theory", "content"]], ["add", "theorem", "empty", ["measure_theory", "content"]], ["add", "def", "inner_content", ["measure_theory", "content"]], ["add", "theorem", "inner_content_Sup_nat", ["measure_theory", "content"]], ["add", "theorem", "inner_content_Union_nat", ["measure_theory", "content"]], ["add", "theorem", "inner_content_comap", ["measure_theory", "content"]], ["add", "theorem", "inner_content_empty", ["measure_theory", "content"]], ["add", "theorem", "inner_content_exists_compact", ["measure_theory", "content"]], ["add", "theorem", "inner_content_le", ["measure_theory", "content"]], ["add", "theorem", "inner_content_mono'", ["measure_theory", "content"]], ["add", "theorem", "inner_content_mono", ["measure_theory", "content"]], ["add", "theorem", "inner_content_of_is_compact", ["measure_theory", "content"]], ["add", "theorem", "inner_content_pos_of_is_mul_left_invariant", ["measure_theory", "content"]], ["add", "theorem", "is_mul_left_invariant_inner_content", ["measure_theory", "content"]], ["add", "theorem", "is_mul_left_invariant_outer_measure", ["measure_theory", "content"]], ["add", "theorem", "le_inner_content", ["measure_theory", "content"]], ["add", "theorem", "le_outer_measure_compacts", ["measure_theory", "content"]], ["add", "theorem", "lt_top", ["measure_theory", "content"]], ["add", "def", "measure", ["measure_theory", "content"]], ["add", "theorem", "measure_apply", ["measure_theory", "content"]], ["add", "theorem", "mono", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_caratheodory", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_eq_infi", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_exists_compact", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_exists_open", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_interior_compacts", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_le", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_lt_top_of_is_compact", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_of_is_open", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_opens", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_pos_of_is_mul_left_invariant", ["measure_theory", "content"]], ["add", "theorem", "outer_measure_preimage", ["measure_theory", "content"]], ["add", "theorem", "sup_disjoint", ["measure_theory", "content"]], ["add", "theorem", "sup_le", ["measure_theory", "content"]], ["add", "structure", "content", ["measure_theory"]], ["del", "def", "inner_content", ["measure_theory"]], ["del", "theorem", "inner_content_Sup_nat", ["measure_theory"]], ["del", "theorem", "inner_content_Union_nat", ["measure_theory"]], ["del", "theorem", "inner_content_comap", ["measure_theory"]], ["del", "theorem", "inner_content_empty", ["measure_theory"]], ["del", "theorem", "inner_content_exists_compact", ["measure_theory"]], ["del", "theorem", "inner_content_le", ["measure_theory"]], ["del", "theorem", "inner_content_mono'", ["measure_theory"]], ["del", "theorem", "inner_content_mono", ["measure_theory"]], ["del", "theorem", "inner_content_of_is_compact", ["measure_theory"]], ["del", "theorem", "inner_content_pos_of_is_mul_left_invariant", ["measure_theory"]], ["del", "theorem", "is_mul_left_invariant_inner_content", ["measure_theory"]], ["del", "theorem", "le_inner_content", ["measure_theory"]], ["del", "theorem", "is_mul_left_invariant_of_content", ["measure_theory", "outer_measure"]], ["del", "theorem", "le_of_content_compacts", ["measure_theory", "outer_measure"]], ["del", "def", "of_content", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_caratheodory", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_eq_infi", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_exists_compact", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_exists_open", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_interior_compacts", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_le", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_opens", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_pos_of_is_mul_left_invariant", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_preimage", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/group.lean", "newPath": "src/measure_theory/group.lean", "changes": [["mod", "theorem", "measure_ne_zero_iff_nonempty", ["measure_theory", "is_mul_left_invariant"]], ["mod", "theorem", "null_iff", ["measure_theory", "is_mul_left_invariant"]], ["mod", "theorem", "null_iff_empty", ["measure_theory", "is_mul_left_invariant"]], ["mod", "theorem", "lintegral_eq_zero_of_is_mul_left_invariant", ["measure_theory"]], ["del", "theorem", "inv", ["measure_theory", "measure", "regular"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": [["del", "theorem", "echaar_le_haar_outer_measure", ["measure_theory", "measure"]], ["del", "def", "echaar", ["measure_theory", "measure", "haar"]], ["del", "theorem", "echaar_mono", ["measure_theory", "measure", "haar"]], ["del", "theorem", "echaar_self", ["measure_theory", "measure", "haar"]], ["del", "theorem", "echaar_sup_le", ["measure_theory", "measure", "haar"]], ["add", "def", "haar_content", ["measure_theory", "measure", "haar"]], ["add", "theorem", "haar_content_apply", ["measure_theory", "measure", "haar"]], ["add", "theorem", "haar_content_outer_measure_self_pos", ["measure_theory", "measure", "haar"]], ["add", "theorem", "haar_content_self", ["measure_theory", "measure", "haar"]], ["del", "theorem", "is_left_invariant_echaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "is_left_invariant_haar_content", ["measure_theory", "measure", "haar"]], ["del", "theorem", "haar_caratheodory_measurable", ["measure_theory", "measure"]], ["del", "def", "haar_outer_measure", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_caratheodory", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_eq_infi", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_exists_compact", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_exists_open", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_le_echaar", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_lt_top_of_is_compact", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_of_is_open", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_pos_of_is_open", ["measure_theory", "measure"]], ["del", "theorem", "haar_outer_measure_self_pos", ["measure_theory", "measure"]], ["del", "theorem", "one_le_haar_outer_measure_self", ["measure_theory", "measure"]], ["del", "theorem", "regular_haar_measure", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/prod_group.lean", "newPath": "src/measure_theory/prod_group.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/regular.lean", "changes": [["add", "theorem", "exists_compact_not_null", ["measure_theory", "measure", "regular"]], ["add", "theorem", "inner_regular_eq", ["measure_theory", "measure", "regular"]], ["add", "theorem", "outer_regular_eq", ["measure_theory", "measure", "regular"]]]}]}, {"timestamp": 1621191532, "sha": "1b098c06", "message": "feat(algebra/ordered_group, algebra/ordered_ring): add some lemmas about abs (#7612)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "abs_choice", []], ["add", "theorem", "abs_eq_abs", []], ["add", "theorem", "eq_or_eq_neg_of_abs_eq", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "abs_dvd", []], ["add", "theorem", "abs_dvd_abs", []], ["add", "theorem", "abs_dvd_self", []], ["add", "theorem", "dvd_abs", []], ["add", "theorem", "even_abs", []], ["add", "theorem", "self_dvd_abs", []]]}]}, {"timestamp": 1621191531, "sha": "b98d8408", "message": "feat(category_theory/category): initialize simps (#7605)\nInitialize `@[simps]` so that it works better for `category`. It just makes the names of the generated lemmas shorter.\nAdd `@[simps]` to product categories.", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["del", "theorem", "prod_comp_fst", ["category_theory"]], ["del", "theorem", "prod_comp_snd", ["category_theory"]], ["del", "theorem", "prod_id_fst", ["category_theory"]], ["del", "theorem", "prod_id_snd", ["category_theory"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1621191530, "sha": "9084a3c7", "message": "chore(order/fixed_point): add docstring for Knaster-Tarski theorem (#7589)\nclarify that the def provided constitutes the Knaster-Tarski theorem", "changes": [{"oldPath": "src/order/countable_dense_linear_order.lean", "newPath": "src/order/countable_dense_linear_order.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": [["mod", "theorem", "Sup_le_f_of_fixed_points", ["fixed_points"]], ["mod", "theorem", "f_le_Inf_of_fixed_points", ["fixed_points"]], ["mod", "theorem", "f_le_inf_of_fixed_points", ["fixed_points"]], ["add", "theorem", "le_next", ["fixed_points"]], ["mod", "theorem", "next_eq", ["fixed_points"]], ["del", "theorem", "next_le", ["fixed_points"]], ["mod", "theorem", "prev_eq", ["fixed_points"]], ["mod", "theorem", "prev_le", ["fixed_points"]], ["mod", "theorem", "sup_le_f_of_fixed_points", ["fixed_points"]], ["mod", "theorem", "gfp_comp", []], ["del", "theorem", "gfp_eq", []], ["add", "theorem", "gfp_fixed_point", []], ["mod", "theorem", "gfp_gfp", []], ["del", "theorem", "gfp_induct", []], ["add", "theorem", "gfp_induction", []], ["mod", "theorem", "gfp_le", []], ["mod", "theorem", "le_gfp", []], ["mod", "theorem", "le_lfp", []], ["mod", "theorem", "lfp_comp", []], ["del", "theorem", "lfp_eq", []], ["add", "theorem", "lfp_fixed_point", []], ["del", "theorem", "lfp_induct", []], ["add", "theorem", "lfp_induction", []], ["mod", "theorem", "lfp_le", []], ["mod", "theorem", "lfp_lfp", []], ["mod", "theorem", "monotone_gfp", []], ["mod", "theorem", "monotone_lfp", []]]}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}]}, {"timestamp": 1621171093, "sha": "c8a2fd7f", "message": "feat(analysis/normed_space): normed_group punit (#7616)\nMinor content from LTE.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_eq_zero", ["punit"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1621171092, "sha": "2bd4bb69", "message": "fix(tactic/lift): elaborate the type better (#7598)\n* When writing `lift x to t` it will now elaborating `t` using that `t` must be a sort (inserting a coercion if needed).\n* Generalize `Type*` to `Sort*` in the tactic", "changes": [{"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": null, "newPath": "test/lift.lean", "changes": []}]}, {"timestamp": 1621171091, "sha": "632783df", "message": "feat(algebra/subalgebra): two equal subalgebras are equivalent (#7590)\nThis extends `linear_equiv.of_eq` to an `alg_equiv` between two `subalgebra`s.\n[Zulip discussion starts around here](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/towers.20of.20algebras/near/238452076)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "def", "equiv_of_eq", ["subalgebra"]], ["add", "theorem", "equiv_of_eq_rfl", ["subalgebra"]], ["add", "theorem", "equiv_of_eq_symm", ["subalgebra"]], ["add", "theorem", "equiv_of_eq_trans", ["subalgebra"]]]}]}, {"timestamp": 1621171090, "sha": "4d909f41", "message": "feat(analysis/calculus/local_extr): A polynomial's roots are bounded by its derivative (#7571)\nAn application of Rolle's theorem to polynomials.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "char_zero", ["ring_hom"]], ["add", "theorem", "char_zero_iff", ["ring_hom"]]]}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": [["add", "theorem", "card_root_set_le_derivative", ["polynomial"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "card_le_of_interleaved", ["finset"]]]}]}, {"timestamp": 1621171089, "sha": "ee6a9fa7", "message": "fix(tactic/simps): fix bug (#7433)\n* Custom projections that were compositions of multiple projections failed when the projection has additional arguments.\n* Also adds an error when two projections are given the same simps-name", "changes": [{"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "another_term", []], ["add", "def", "apply", ["something", "simps"]], ["add", "def", "mul", ["something2", "simps"]], ["add", "def", "thing", []]]}]}, {"timestamp": 1621171088, "sha": "f1bcb903", "message": "fix(tactic/simps): remove occurrence of mk_mapp (#7432)\nFixes the slowdown reported on Zulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/simps.20is.20very.20slow\nOn my laptop, the minimized example in that topic now takes 33ms instead of ~5000ms", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "foo_sum", []], ["add", "structure", "my_functor", []]]}]}, {"timestamp": 1621113658, "sha": "65e76465", "message": "feat(algebraic_topology): cosimplicial objects (#7614)\nDualize the existing API for `simplicial_object` to provide `cosimplicial_object`, and move the contents of LTE's `for_mathlib/simplicial/augmented.lean` to mathlib.", "changes": [{"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "drop", ["category_theory", "cosimplicial_object", "augmented"]], ["add", "def", "point", ["category_theory", "cosimplicial_object", "augmented"]], ["add", "def", "augmented", ["category_theory", "cosimplicial_object"]], ["add", "def", "const", ["category_theory", "cosimplicial_object"]], ["add", "def", "eq_to_iso", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "eq_to_iso_refl", ["category_theory", "cosimplicial_object"]], ["add", "def", "sk", ["category_theory", "cosimplicial_object"]], ["add", "def", "truncated", ["category_theory", "cosimplicial_object"]], ["add", "def", "δ", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "δ_comp_δ", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "δ_comp_δ_self", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "δ_comp_σ_of_gt", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "δ_comp_σ_of_le", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "δ_comp_σ_self", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "δ_comp_σ_succ", ["category_theory", "cosimplicial_object"]], ["add", "def", "σ", ["category_theory", "cosimplicial_object"]], ["add", "theorem", "σ_comp_σ", ["category_theory", "cosimplicial_object"]], ["add", "def", "cosimplicial_object", ["category_theory"]], ["add", "def", "drop", ["category_theory", "simplicial_object", "augmented"]], ["add", "def", "point", ["category_theory", "simplicial_object", "augmented"]]]}]}, {"timestamp": 1621113657, "sha": "14802d6c", "message": "chore(ring_theory/int/basic): remove duplicate lemma nat.prime_iff_prime (#7611)", "changes": [{"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["del", "theorem", "prime_iff_prime", ["nat"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1621113656, "sha": "07dcff7d", "message": "feat(logic/relation): reflexive.ne_iff_imp (#7579)\nAs suggested in #7567", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "reflexive", ["is_refl"]], ["add", "theorem", "ne_imp_iff", ["reflexive"]], ["add", "theorem", "rel_of_ne_imp", ["reflexive"]], ["add", "theorem", "reflexive_ne_imp_iff", []]]}]}, {"timestamp": 1621113655, "sha": "82ac80f1", "message": "feat(data/set/basic): pairwise_on.imp_on (#7578)\nProvide more helper lemmas for transferring `pairwise_on` between different relations. Provide a rephrase of `pairwise_on.mono'` as `pairwise_on.imp`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "imp", ["set", "pairwise_on"]], ["add", "theorem", "imp_on", ["set", "pairwise_on"]], ["add", "theorem", "pairwise_on_of_forall", ["set"]], ["add", "theorem", "pairwise_on_top", ["set"]]]}]}, {"timestamp": 1621113654, "sha": "4c2567ff", "message": "chore(group_theory/group_action/group): add `smul_inv` (#7568)\nThis renames the existing `smul_inv` to `smul_inv'`, which is consistent with the name of the other lemma about `mul_semiring_action`, `smul_mul'`.", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "theorem", "smul_inv'", []], ["del", "theorem", "smul_inv", []]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "theorem", "smul_inv", []]]}]}, {"timestamp": 1621113653, "sha": "467d2b27", "message": "feat(data/logic/basic): `em.swap` and `eq_or_ne` (#7561)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "dec_em'", []], ["add", "theorem", "eq_or_ne", ["decidable"]], ["add", "theorem", "ne_or_eq", ["decidable"]], ["add", "theorem", "em'", []], ["mod", "theorem", "em", []], ["add", "theorem", "eq_or_ne", []], ["add", "theorem", "ne_or_eq", []], ["mod", "theorem", "or_not", []]]}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1621113652, "sha": "d338ebd4", "message": "feat(counterexamples/*): add counterexamples folder (#7558)\nSeveral times, there has been a discussion on Zulip about the appropriateness of having counterexamples in mathlib. This PR introduces a `counterexamples` folder, together with the first couple of counterexamples.\nFor the most recent discussion, see\nhttps://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.237553", "changes": [{"oldPath": null, "newPath": "src/counterexamples/canonically_ordered_comm_semiring_two_mul.lean", "changes": [["add", "theorem", "add_le_add_left", ["Nxzmod_2"]], ["add", "theorem", "add_left_cancel", ["Nxzmod_2"]], ["add", "theorem", "le_of_add_le_add_left", ["Nxzmod_2"]], ["add", "theorem", "lt_def", ["Nxzmod_2"]], ["add", "theorem", "mul_lt_mul_of_pos_left", ["Nxzmod_2"]], ["add", "theorem", "mul_lt_mul_of_pos_right", ["Nxzmod_2"]], ["add", "theorem", "zero_le_one", ["Nxzmod_2"]], ["add", "theorem", "add_self_zmod_2", []], ["add", "def", "L", ["ex_L"]], ["add", "theorem", "add_L", ["ex_L"]], ["add", "theorem", "bot_le", ["ex_L"]], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["ex_L"]], ["add", "theorem", "le_iff_exists_add", ["ex_L"]], ["add", "theorem", "lt_of_add_lt_add_left", ["ex_L"]], ["add", "theorem", "mul_L", ["ex_L"]], ["add", "def", "K", ["from_Bhavik"]], ["add", "theorem", "mem_zmod_2", []]]}, {"oldPath": null, "newPath": "src/counterexamples/linear_order_with_pos_mul_pos_eq_zero.lean", "changes": [["add", "def", "aux1", ["foo"]], ["add", "theorem", "aux1_inj", ["foo"]], ["add", "def", "mul", ["foo"]], ["add", "theorem", "not_mul_pos", ["foo"]], ["add", "inductive", "foo", []]]}]}, {"timestamp": 1621113651, "sha": "56442cf2", "message": "feat(data/nnreal): div and pow lemmas (#7471)\nfrom the liquid tensor experiment", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "div_le_div_left", ["nnreal"]], ["add", "theorem", "div_le_div_left_of_le", ["nnreal"]], ["add", "theorem", "pow_mono_decr_exp", ["nnreal"]]]}]}, {"timestamp": 1621113650, "sha": "57b0e68f", "message": "chore(*/pi): rename *_hom.apply to pi.eval_*_hom (#5851)\nThese definitions state the fact that fixing an `i` and applying a function `(Π i, f i)` maintains the algebraic structure of the function. We already have a name for this operation, `function.eval`.\nThese isn't a statement about `monoid_hom` or `ring_hom` at all - that just happens to be their type.\nFor this reason, this commit moves all the definitions of this type into the `pi` namespace:\n* `add_monoid_hom.apply` → `pi.eval_add_monoid_hom`\n* `monoid_hom.apply` → `pi.eval_monoid_hom`\n* `ring_hom.apply` → `pi.eval_ring_hom`\n* `pi.alg_hom.apply` [sic] → `pi.eval_alg_hom`\nThis scales better, because we might want to say that applying a `linear_map` over a non-commutative ring is an `add_monoid_hom`. Using the naming convention established by this commit, that's easy; it's `linear_map.eval_add_monoid_hom` to mirror `pi.apply_add_monoid_hom`.\nThis partially addresses [this zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Naming.3A.20eval.20vs.20apply/near/223813950)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "def", "apply", ["pi", "alg_hom"]], ["add", "def", "eval_alg_hom", ["pi"]]]}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/char_p/pi.lean", "newPath": "src/algebra/char_p/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["del", "def", "apply", ["monoid_hom"]], ["del", "theorem", "apply_apply", ["monoid_hom"]], ["add", "def", "eval_monoid_hom", ["pi"]]]}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": [["add", "def", "eval_ring_hom", ["pi"]], ["del", "def", "apply", ["ring_hom"]], ["del", "theorem", "apply_apply", ["ring_hom"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": [["mod", "def", "ghost_component", ["witt_vector"]]]}]}, {"timestamp": 1621096086, "sha": "172195bb", "message": "feat(algebra/{ordered_monoid, ordered_monoid_lemmas}): split the `ordered_[...]` typeclasses (#7371)\nThis PR tries to split the ordering assumptions from the algebraic assumptions on the operations in the `ordered_[...]` hierarchy.\nThe strategy is to introduce two more flexible typeclasses, `covariant_class` and `contravariant_class`.\n* `covariant_class` models the implication `a ≤ b → c * a ≤ c * b` (multiplication is monotone),\n* `contravariant_class` models the implication `a * b < a * c → b < c`.\nSince `co(ntra)variant_class` takes as input the operation (typically `(+)` or `(*)`) and the order relation (typically `(≤)` or `(<)`), these are the only two typeclasses that I have used.\nThe general approach is to formulate the lemma that you are interested in and prove it, with the `ordered_[...]` typeclass of your liking. After that, you convert the single typeclass, say `[ordered_cancel_monoid M]`, to three typeclasses, e.g. `[partial_order M] [left_cancel_semigroup M] [covariant_class M M (function.swap (*)) (≤)]` and have a go at seeing if the proof still works!\nNote that it is possible (or even expected) to combine several `co(ntra)variant_class` assumptions together. Indeed, the usual `ordered` typeclasses arise from assuming the pair `[covariant_class M M (*) (≤)] [contravariant_class M M (*) (<)]` on top of order/algebraic assumptions.\nA formal remark is that *normally* `covariant_class` uses the `(≤)`-relation, while `contravariant_class` uses the `(<)`-relation. This need not be the case in general, but seems to be the most common usage. In the opposite direction, the implication\n`[semigroup α] [partial_order α] [contravariant_class α α (*) (≤)] => left_cancel_semigroup α`\nholds (note the `co*ntra*` assumption and the `(≤)`-relation).\nZulip:\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/ordered.20stuff", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["mod", "def", "ordered_comm_monoid", ["function", "injective"]], ["del", "theorem", "le_mul_iff_one_le_left'", []], ["del", "theorem", "le_mul_iff_one_le_right'", []], ["del", "theorem", "le_mul_of_le_mul_left", []], ["del", "theorem", "le_mul_of_le_mul_right", []], ["del", "theorem", "le_mul_of_le_of_one_le", []], ["del", "theorem", "le_mul_of_one_le_left'", []], ["del", "theorem", "le_mul_of_one_le_of_le", []], ["del", "theorem", "le_mul_of_one_le_right'", []], ["del", "theorem", "le_of_le_mul_of_le_one_left", []], ["del", "theorem", "le_of_le_mul_of_le_one_right", []], ["del", "theorem", "le_of_mul_le_mul_left'", []], ["del", "theorem", "le_of_mul_le_mul_right'", []], ["del", "theorem", "le_of_mul_le_of_one_le_left", []], ["del", "theorem", "le_of_mul_le_of_one_le_right", []], ["del", "theorem", "lt_mul_iff_one_lt_left'", []], ["del", "theorem", "lt_mul_iff_one_lt_right'", []], ["del", "theorem", "lt_mul_of_le_of_one_lt", []], ["del", "theorem", "lt_mul_of_lt_mul_left", []], ["del", "theorem", "lt_mul_of_lt_mul_right", []], ["del", "theorem", "lt_mul_of_lt_of_one_le'", []], ["del", "theorem", "lt_mul_of_lt_of_one_le", []], ["del", "theorem", "lt_mul_of_lt_of_one_lt'", []], ["del", "theorem", "lt_mul_of_lt_of_one_lt", []], ["del", "theorem", "lt_mul_of_one_le_of_lt'", []], ["del", "theorem", "lt_mul_of_one_le_of_lt", []], ["del", "theorem", "lt_mul_of_one_lt_left'", []], ["del", "theorem", "lt_mul_of_one_lt_of_le", []], ["del", "theorem", "lt_mul_of_one_lt_of_lt'", []], ["del", "theorem", "lt_mul_of_one_lt_of_lt", []], ["del", "theorem", "lt_mul_of_one_lt_right'", []], ["del", "theorem", "lt_of_lt_mul_of_le_one_left", []], ["del", "theorem", "lt_of_lt_mul_of_le_one_right", []], ["del", "theorem", "lt_of_mul_lt_mul_left'", []], ["del", "theorem", "lt_of_mul_lt_mul_right'", []], ["del", "theorem", "lt_of_mul_lt_of_one_le_left", []], ["del", "theorem", "lt_of_mul_lt_of_one_le_right", []], ["del", "theorem", "const_mul'", ["monotone"]], ["del", "theorem", "mul'", ["monotone"]], ["del", "theorem", "mul_const'", ["monotone"]], ["del", "theorem", "mul_eq_one_iff'", []], ["del", "theorem", "mul_eq_one_iff_eq_one_of_one_le", []], ["del", "theorem", "mul_le_iff_le_one_left'", []], ["del", "theorem", "mul_le_iff_le_one_right'", []], ["del", "theorem", "mul_le_mul'", []], ["del", "theorem", "mul_le_mul_iff_left", []], ["del", "theorem", "mul_le_mul_iff_right", []], ["del", "theorem", "mul_le_mul_left'", []], ["del", "theorem", "mul_le_mul_right'", []], ["del", "theorem", "mul_le_mul_three", []], ["del", "theorem", "mul_le_of_le_of_le_one'", []], ["del", "theorem", "mul_le_of_le_of_le_one", []], ["del", "theorem", "mul_le_of_le_one_left'", []], ["del", "theorem", "mul_le_of_le_one_of_le'", []], ["del", "theorem", "mul_le_of_le_one_of_le", []], ["del", "theorem", "mul_le_of_le_one_right'", []], ["del", "theorem", "mul_le_of_mul_le_left", []], ["del", "theorem", "mul_le_of_mul_le_right", []], ["del", "theorem", "mul_le_one'", []], ["del", "theorem", "mul_lt_iff_lt_one_left'", []], ["del", "theorem", "mul_lt_iff_lt_one_right'", []], ["del", "theorem", "mul_lt_mul'''", []], ["del", "theorem", "mul_lt_mul_iff_left", []], ["del", "theorem", "mul_lt_mul_iff_right", []], ["del", "theorem", "mul_lt_mul_left'", []], ["del", "theorem", "mul_lt_mul_of_le_of_lt", []], ["del", "theorem", "mul_lt_mul_of_lt_of_le", []], ["del", "theorem", "mul_lt_mul_right'", []], ["del", "theorem", "mul_lt_of_le_of_lt_one", []], ["del", "theorem", "mul_lt_of_le_one_of_lt'", []], ["del", "theorem", "mul_lt_of_le_one_of_lt", []], ["del", "theorem", "mul_lt_of_lt_of_le_one'", []], ["del", "theorem", "mul_lt_of_lt_of_le_one", []], ["del", "theorem", "mul_lt_of_lt_of_lt_one'", []], ["del", "theorem", "mul_lt_of_lt_of_lt_one", []], ["del", "theorem", "mul_lt_of_lt_one_of_le", []], ["del", "theorem", "mul_lt_of_lt_one_of_lt'", []], ["del", "theorem", "mul_lt_of_lt_one_of_lt", []], ["del", "theorem", "mul_lt_of_mul_lt_left", []], ["del", "theorem", "mul_lt_of_mul_lt_right", []], ["del", "theorem", "mul_lt_one'", []], ["del", "theorem", "mul_lt_one", []], ["del", "theorem", "mul_lt_one_of_le_one_of_lt_one'", []], ["del", "theorem", "mul_lt_one_of_le_one_of_lt_one", []], ["del", "theorem", "mul_lt_one_of_lt_one_of_le_one'", []], ["del", "theorem", "mul_lt_one_of_lt_one_of_le_one", []], ["del", "theorem", "one_le_mul", []], ["del", "theorem", "one_lt_mul'", []], ["del", "theorem", "one_lt_mul_of_le_of_lt'", []], ["del", "theorem", "one_lt_mul_of_lt_of_le'", []], ["del", "theorem", "pos_of_gt", []], ["mod", "theorem", "lt_of_mul_lt_mul_left", ["with_zero"]], ["mod", "theorem", "mul_le_mul_left", ["with_zero"]], ["mod", "theorem", "zero_lt_coe", ["with_zero"]]]}, {"oldPath": null, "newPath": "src/algebra/ordered_monoid_lemmas.lean", "changes": [["add", "def", "contravariant", []], ["add", "def", "covariant", []], ["add", "theorem", "le_mul_iff_one_le_left'", []], ["add", "theorem", "le_mul_iff_one_le_right'", []], ["add", "theorem", "le_mul_of_le_mul_left", []], ["add", "theorem", "le_mul_of_le_mul_right", []], ["add", "theorem", "le_mul_of_le_of_one_le", []], ["add", "theorem", "le_mul_of_one_le_left'", []], ["add", "theorem", "le_mul_of_one_le_of_le", []], ["add", "theorem", "le_mul_of_one_le_right'", []], ["add", "theorem", "le_of_le_mul_of_le_one_left", []], ["add", "theorem", "le_of_le_mul_of_le_one_right", []], ["add", "theorem", "le_of_mul_le_mul_left'", []], ["add", "theorem", "le_of_mul_le_mul_right'", []], ["add", "theorem", "le_of_mul_le_of_one_le_left", []], ["add", "theorem", "le_of_mul_le_of_one_le_right", []], ["add", "theorem", "lt_mul_iff_one_lt_left'", []], ["add", "theorem", "lt_mul_iff_one_lt_right'", []], ["add", "theorem", "lt_mul_of_le_of_one_lt", []], ["add", "theorem", "lt_mul_of_lt_mul_left", []], ["add", "theorem", "lt_mul_of_lt_mul_right", []], ["add", "theorem", "lt_mul_of_lt_of_one_le'", []], ["add", "theorem", "lt_mul_of_lt_of_one_le", []], ["add", "theorem", "lt_mul_of_lt_of_one_lt'", []], ["add", "theorem", "lt_mul_of_lt_of_one_lt", []], ["add", "theorem", "lt_mul_of_one_le_of_lt'", []], ["add", "theorem", "lt_mul_of_one_le_of_lt", []], ["add", "theorem", "lt_mul_of_one_lt_left'", []], ["add", "theorem", "lt_mul_of_one_lt_of_le", []], ["add", "theorem", "lt_mul_of_one_lt_of_lt'", []], ["add", "theorem", "lt_mul_of_one_lt_of_lt", []], ["add", "theorem", "lt_mul_of_one_lt_right'", []], ["add", "theorem", "lt_of_lt_mul_of_le_one_left", []], ["add", "theorem", "lt_of_lt_mul_of_le_one_right", []], ["add", "theorem", "lt_of_mul_lt_mul_left'", []], ["add", "theorem", "lt_of_mul_lt_mul_right'", []], ["add", "theorem", "lt_of_mul_lt_of_one_le_left", []], ["add", "theorem", "lt_of_mul_lt_of_one_le_right", []], ["add", "theorem", "const_mul'", ["monotone"]], ["add", "theorem", "mul'", ["monotone"]], ["add", "theorem", "mul_const'", ["monotone"]], ["add", "theorem", "mul_eq_one_iff'", []], ["add", "theorem", "mul_eq_one_iff_eq_one_of_one_le", []], ["add", "theorem", "mul_le_iff_le_one_left'", []], ["add", "theorem", "mul_le_iff_le_one_right'", []], ["add", "theorem", "mul_le_mul'", []], ["add", "theorem", "mul_le_mul_iff_left", []], ["add", "theorem", "mul_le_mul_iff_right", []], ["add", "theorem", "mul_le_mul_left'", []], ["add", "theorem", "mul_le_mul_right'", []], ["add", "theorem", "mul_le_mul_three", []], ["add", "theorem", "mul_le_of_le_of_le_one'", []], ["add", "theorem", "mul_le_of_le_of_le_one", []], ["add", "theorem", "mul_le_of_le_one_left'", []], ["add", "theorem", "mul_le_of_le_one_of_le'", []], ["add", "theorem", "mul_le_of_le_one_of_le", []], ["add", "theorem", "mul_le_of_le_one_right'", []], ["add", "theorem", "mul_le_of_mul_le_left", []], ["add", "theorem", "mul_le_of_mul_le_right", []], ["add", "theorem", "mul_le_one'", []], ["add", "theorem", "mul_lt_iff_lt_one_left'", []], ["add", "theorem", "mul_lt_iff_lt_one_right'", []], ["add", "theorem", "mul_lt_mul'''", []], ["add", "theorem", "mul_lt_mul_iff_left", []], ["add", "theorem", "mul_lt_mul_iff_right", []], ["add", "theorem", "mul_lt_mul_left'", []], ["add", "theorem", "mul_lt_mul_of_le_of_lt", []], ["add", "theorem", "mul_lt_mul_of_lt_of_le", []], ["add", "theorem", "mul_lt_mul_right'", []], ["add", "theorem", "mul_lt_of_le_of_lt_one", []], ["add", "theorem", "mul_lt_of_le_one_of_lt'", []], ["add", "theorem", "mul_lt_of_le_one_of_lt", []], ["add", "theorem", "mul_lt_of_lt_of_le_one'", []], ["add", "theorem", "mul_lt_of_lt_of_le_one", []], ["add", "theorem", "mul_lt_of_lt_of_lt_one'", []], ["add", "theorem", "mul_lt_of_lt_of_lt_one", []], ["add", "theorem", "mul_lt_of_lt_one_of_le", []], ["add", "theorem", "mul_lt_of_lt_one_of_lt'", []], ["add", "theorem", "mul_lt_of_lt_one_of_lt", []], ["add", "theorem", "mul_lt_of_mul_lt_left", []], ["add", "theorem", "mul_lt_of_mul_lt_right", []], ["add", "theorem", "mul_lt_one'", []], ["add", "theorem", "mul_lt_one", []], ["add", "theorem", "mul_lt_one_of_le_one_of_lt_one'", []], ["add", "theorem", "mul_lt_one_of_le_one_of_lt_one", []], ["add", "theorem", "mul_lt_one_of_lt_one_of_le_one'", []], ["add", "theorem", "mul_lt_one_of_lt_one_of_le_one", []], ["add", "theorem", "one_le_mul", []], ["add", "theorem", "one_lt_mul'", []], ["add", "theorem", "one_lt_mul_of_le_of_lt'", []], ["add", "theorem", "one_lt_mul_of_lt_of_le'", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1621088475, "sha": "738c19f5", "message": "refactor(linear_algebra/matrix): split matrix.lean into multiple files (#7593)\nThe file `linear_algebra/matrix.lean` used to be very big and contain a lot of parts that did not depend on each other, so I split each of those parts into its own little file. Most of the new files ended up in `linear_algebra/matrix/`, except for `linear_algebra/trace.lean` and `linear_algebra/determinant.lean` which did not contain anything matrix-specific.\nApart from the local improvement in `matrix.lean` itself, the import graph is now also a bit cleaner.\nRenames:\n * `linear_algebra/determinant.lean` -> `linear_algebra/matrix/determinant.lean`\n * `linear_algebra/nonsingular_inverse.lean` -> `linear_algebra/matrix/nonsingular_inverse.lean`\nSplit off from `linear_algebra/matrix.lean`:\n * `linear_algebra/matrix/basis.lean`\n * `linear_algebra/matrix/block.lean`\n * `linear_algebra/matrix/diagonal.lean`\n * `linear_algebra/matrix/dot_product.lean`\n * `linear_algebra/matrix/dual.lean`\n * `linear_algebra/matrix/finite_dimensional.lean`\n * `linear_algebra/matrix/reindex.lean`\n * `linear_algebra/matrix/to_lin.lean`\n * `linear_algebra/matrix/to_linear_equiv.lean`\n * `linear_algebra/matrix/trace.lean`\n * `linear_algebra/determinant.lean` (Unfortunately, I could not persuade `git` to remember that I moved the original `determinant.lean` to `matrix/determinant.lean`)\n * `linear_algebra/trace.lean`", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/basic.lean", "newPath": "src/linear_algebra/char_poly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "def", "det", ["basis"]], ["add", "theorem", "det_apply", ["basis"]], ["add", "theorem", "det_self", ["basis"]], ["add", "theorem", "iff_det", ["is_basis"]], ["add", "theorem", "is_unit_det", ["linear_equiv"]], ["add", "def", "of_is_unit_det", ["linear_equiv"]], ["del", "theorem", "map_det", ["matrix", "alg_hom"]], ["del", "def", "det", ["matrix"]], ["del", "theorem", "det_apply'", ["matrix"]], ["del", "theorem", "det_apply", ["matrix"]], ["del", "theorem", "det_block_diagonal", ["matrix"]], ["del", "theorem", "det_diagonal", ["matrix"]], ["del", "theorem", "det_eq_elem_of_card_eq_one", ["matrix"]], ["del", "theorem", "det_eq_of_eq_det_one_mul", ["matrix"]], ["del", "theorem", "det_eq_of_eq_mul_det_one", ["matrix"]], ["del", "theorem", "det_eq_of_forall_col_eq_smul_add_pred", ["matrix"]], ["del", "theorem", "det_eq_of_forall_row_eq_smul_add_const", ["matrix"]], ["del", "theorem", "det_eq_of_forall_row_eq_smul_add_const_aux", ["matrix"]], ["del", "theorem", "det_eq_of_forall_row_eq_smul_add_pred", ["matrix"]], ["del", "theorem", "det_eq_of_forall_row_eq_smul_add_pred_aux", ["matrix"]], ["del", "theorem", "det_eq_one_of_card_eq_zero", ["matrix"]], ["del", "theorem", "det_eq_zero_of_column_eq_zero", ["matrix"]], ["del", "theorem", "det_eq_zero_of_row_eq_zero", ["matrix"]], ["del", "theorem", "det_fin_zero", ["matrix"]], ["del", "theorem", "det_minor_equiv_self", ["matrix"]], ["del", "theorem", "det_mul", ["matrix"]], ["del", "theorem", "det_mul_aux", ["matrix"]], ["del", "theorem", "det_mul_column", ["matrix"]], ["del", "theorem", "det_mul_row", ["matrix"]], ["del", "theorem", "det_one", ["matrix"]], ["del", "theorem", "det_permutation", ["matrix"]], ["del", "theorem", "det_permute", ["matrix"]], ["del", "theorem", "det_reindex_self", ["matrix"]], ["del", "def", "det_row_multilinear", ["matrix"]], ["del", "theorem", "det_smul", ["matrix"]], ["del", "theorem", "det_succ_column", ["matrix"]], ["del", "theorem", "det_succ_column_zero", ["matrix"]], ["del", "theorem", "det_succ_row", ["matrix"]], ["del", "theorem", "det_succ_row_zero", ["matrix"]], ["del", "theorem", "det_transpose", ["matrix"]], ["del", "theorem", "det_unique", ["matrix"]], ["del", "theorem", "det_update_column_add", ["matrix"]], ["del", "theorem", "det_update_column_add_self", ["matrix"]], ["del", "theorem", "det_update_column_add_smul_self", ["matrix"]], ["del", "theorem", "det_update_column_smul", ["matrix"]], ["del", "theorem", "det_update_row_add", ["matrix"]], ["del", "theorem", "det_update_row_add_self", ["matrix"]], ["del", "theorem", "det_update_row_add_smul_self", ["matrix"]], ["del", "theorem", "det_update_row_smul", ["matrix"]], ["del", "theorem", "det_zero", ["matrix"]], ["del", "theorem", "det_zero_of_column_eq", ["matrix"]], ["del", "theorem", "det_zero_of_row_eq", ["matrix"]], ["del", "theorem", "map_det", ["matrix", "ring_hom"]], ["del", "theorem", "upper_two_block_triangular_det", ["matrix"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": null, "changes": [["del", "def", "alg_equiv_matrix'", []], ["del", "def", "alg_equiv_matrix", []], ["del", "theorem", "left_mul_matrix_apply", ["algebra"]], ["del", "theorem", "left_mul_matrix_eq_repr_mul", ["algebra"]], ["del", "theorem", "left_mul_matrix_injective", ["algebra"]], ["del", "theorem", "left_mul_matrix_mul_vec_repr", ["algebra"]], ["del", "theorem", "smul_left_mul_matrix", ["algebra"]], ["del", "theorem", "smul_left_mul_matrix_algebra_map", ["algebra"]], ["del", "theorem", "smul_left_mul_matrix_algebra_map_eq", ["algebra"]], ["del", "theorem", "smul_left_mul_matrix_algebra_map_ne", ["algebra"]], ["del", "theorem", "to_matrix_lmul'", ["algebra"]], ["del", "theorem", "to_matrix_lmul_eq", ["algebra"]], ["del", "theorem", "to_matrix_lsmul", ["algebra"]], ["del", "def", "det", ["basis"]], ["del", "theorem", "det_apply", ["basis"]], ["del", "theorem", "det_self", ["basis"]], ["del", "theorem", "sum_to_matrix_smul_self", ["basis"]], ["del", "theorem", "to_lin_to_matrix", ["basis"]], ["del", "def", "to_matrix", ["basis"]], ["del", "theorem", "to_matrix_apply", ["basis"]], ["del", "theorem", "to_matrix_eq_to_matrix_constr", ["basis"]], ["del", "def", "to_matrix_equiv", ["basis"]], ["del", "theorem", "to_matrix_mul_to_matrix", ["basis"]], ["del", "theorem", "to_matrix_self", ["basis"]], ["del", "theorem", "to_matrix_transpose_apply", ["basis"]], ["del", "theorem", "to_matrix_update", ["basis"]], ["del", "theorem", "basis_to_matrix_mul_linear_map_to_matrix", []], ["del", "theorem", "iff_det", ["is_basis"]], ["del", "def", "alg_conj", ["linear_equiv"]], ["del", "theorem", "is_unit_det", ["linear_equiv"]], ["del", "def", "of_is_unit_det", ["linear_equiv"]], ["del", "theorem", "finrank_linear_map", ["linear_map"]], ["del", "def", "to_matrix'", ["linear_map"]], ["del", "theorem", "to_matrix'_apply", ["linear_map"]], ["del", "theorem", "to_matrix'_comp", ["linear_map"]], ["del", "theorem", "to_matrix'_id", ["linear_map"]], ["del", "theorem", "to_matrix'_mul", ["linear_map"]], ["del", "theorem", "to_matrix'_symm", ["linear_map"]], ["del", "theorem", "to_matrix'_to_lin'", ["linear_map"]], ["del", "def", "to_matrix", ["linear_map"]], ["del", "def", "to_matrix_alg_equiv'", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv'_apply", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv'_comp", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv'_id", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv'_mul", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv'_symm", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv'_to_lin_alg_equiv'", ["linear_map"]], ["del", "def", "to_matrix_alg_equiv", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_apply'", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_apply", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_comp", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_id", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_mul", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_reindex_range", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_symm", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_to_lin_alg_equiv", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_transpose_apply'", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_transpose_apply", ["linear_map"]], ["del", "theorem", "to_matrix_apply'", ["linear_map"]], ["del", "theorem", "to_matrix_apply", ["linear_map"]], ["del", "theorem", "to_matrix_comp", ["linear_map"]], ["del", "theorem", "to_matrix_id", ["linear_map"]], ["del", "theorem", "to_matrix_id_eq_basis_to_matrix", ["linear_map"]], ["del", "theorem", "to_matrix_mul", ["linear_map"]], ["del", "theorem", "to_matrix_mul_vec_repr", ["linear_map"]], ["del", "theorem", "to_matrix_one", ["linear_map"]], ["del", "theorem", "to_matrix_reindex_range", ["linear_map"]], ["del", "theorem", "to_matrix_symm", ["linear_map"]], ["del", "theorem", "to_matrix_to_lin", ["linear_map"]], ["del", "theorem", "to_matrix_transpose", ["linear_map"]], ["del", "theorem", "to_matrix_transpose_apply'", ["linear_map"]], ["del", "theorem", "to_matrix_transpose_apply", ["linear_map"]], ["del", "def", "trace", ["linear_map"]], ["del", "def", "trace_aux", ["linear_map"]], ["del", "theorem", "trace_aux_def", ["linear_map"]], ["del", "theorem", "trace_aux_eq", ["linear_map"]], ["del", "theorem", "trace_aux_reindex_range", ["linear_map"]], ["del", "theorem", "trace_eq_matrix_trace", ["linear_map"]], ["del", "theorem", "trace_eq_matrix_trace_of_finite_set", ["linear_map"]], ["del", "theorem", "trace_mul_comm", ["linear_map"]], ["del", "theorem", "linear_map_to_matrix_mul_basis_to_matrix", []], ["del", "def", "block_triangular_matrix'", ["matrix"]], ["del", "def", "block_triangular_matrix", ["matrix"]], ["del", "theorem", "det_of_block_triangular_matrix''", ["matrix"]], ["del", "theorem", "det_of_block_triangular_matrix'", ["matrix"]], ["del", "theorem", "det_of_block_triangular_matrix", ["matrix"]], ["del", "theorem", "det_of_lower_triangular", ["matrix"]], ["del", "theorem", "det_of_upper_triangular", ["matrix"]], ["del", "theorem", "det_reindex_alg_equiv", ["matrix"]], ["del", "theorem", "det_reindex_linear_equiv_self", ["matrix"]], ["del", "theorem", "det_to_block", ["matrix"]], ["del", "theorem", "det_to_square_block'", ["matrix"]], ["del", "theorem", "det_to_square_block", ["matrix"]], ["del", "def", "diag", ["matrix"]], ["del", "theorem", "diag_apply", ["matrix"]], ["del", "theorem", "diag_one", ["matrix"]], ["del", "theorem", "diag_transpose", ["matrix"]], ["del", "theorem", "diagonal_comp_std_basis", ["matrix"]], ["del", "theorem", "diagonal_to_lin'", ["matrix"]], ["del", "theorem", "dot_product_eq", ["matrix"]], ["del", "theorem", "dot_product_eq_iff", ["matrix"]], ["del", "theorem", "dot_product_eq_zero", ["matrix"]], ["del", "theorem", "dot_product_eq_zero_iff", ["matrix"]], ["del", "theorem", "dot_product_std_basis_eq_mul", ["matrix"]], ["del", "theorem", "dot_product_std_basis_one", ["matrix"]], ["del", "theorem", "equiv_block_det", ["matrix"]], ["del", "theorem", "finrank_matrix", ["matrix"]], ["del", "theorem", "ker_diagonal_to_lin'", ["matrix"]], ["del", "theorem", "ker_to_lin_eq_bot", ["matrix"]], ["del", "def", "mul_vec_lin", ["matrix"]], ["del", "theorem", "mul_vec_lin_apply", ["matrix"]], ["del", "theorem", "mul_vec_std_basis", ["matrix"]], ["del", "theorem", "proj_diagonal", ["matrix"]], ["del", "theorem", "range_diagonal", ["matrix"]], ["del", "theorem", "range_to_lin_eq_top", ["matrix"]], ["del", "theorem", "rank_diagonal", ["matrix"]], ["del", "theorem", "rank_vec_mul_vec", ["matrix"]], ["del", "def", "reindex_alg_equiv", ["matrix"]], ["del", "theorem", "reindex_alg_equiv_apply", ["matrix"]], ["del", "theorem", "reindex_alg_equiv_refl", ["matrix"]], ["del", "theorem", "reindex_alg_equiv_symm", ["matrix"]], ["del", "def", "reindex_linear_equiv", ["matrix"]], ["del", "theorem", "reindex_linear_equiv_apply", ["matrix"]], ["del", "theorem", "reindex_linear_equiv_refl_refl", ["matrix"]], ["del", "theorem", "reindex_linear_equiv_symm", ["matrix"]], ["del", "def", "to_lin'", ["matrix"]], ["del", "theorem", "to_lin'_apply", ["matrix"]], ["del", "theorem", "to_lin'_mul", ["matrix"]], ["del", "theorem", "to_lin'_one", ["matrix"]], ["del", "theorem", "to_lin'_symm", ["matrix"]], ["del", "theorem", "to_lin'_to_matrix'", ["matrix"]], ["del", "def", "to_lin", ["matrix"]], ["del", "def", "to_lin_alg_equiv'", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv'_apply", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv'_mul", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv'_one", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv'_symm", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv'_to_matrix_alg_equiv'", ["matrix"]], ["del", "def", "to_lin_alg_equiv", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv_apply", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv_mul", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv_one", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv_self", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv_symm", ["matrix"]], ["del", "theorem", "to_lin_alg_equiv_to_matrix_alg_equiv", ["matrix"]], ["del", "theorem", "to_lin_apply", ["matrix"]], ["del", "theorem", "to_lin_mul", ["matrix"]], ["del", "theorem", "to_lin_one", ["matrix"]], ["del", "theorem", "to_lin_self", ["matrix"]], ["del", "theorem", "to_lin_symm", ["matrix"]], ["del", "theorem", "to_lin_to_matrix", ["matrix"]], ["del", "theorem", "to_lin_transpose", ["matrix"]], ["del", "def", "to_linear_equiv'", ["matrix"]], ["del", "theorem", "to_linear_equiv'_apply", ["matrix"]], ["del", "theorem", "to_linear_equiv'_symm_apply", ["matrix"]], ["del", "def", "to_linear_equiv", ["matrix"]], ["del", "theorem", "to_square_block_det''", ["matrix"]], ["del", "def", "trace", ["matrix"]], ["del", "theorem", "trace_apply", ["matrix"]], ["del", "theorem", "trace_diag", ["matrix"]], ["del", "theorem", "trace_mul_comm", ["matrix"]], ["del", "theorem", "trace_one", ["matrix"]], ["del", "theorem", "trace_transpose", ["matrix"]], ["del", "theorem", "trace_transpose_mul", ["matrix"]], ["del", "theorem", "two_block_triangular_det", ["matrix"]], ["del", "theorem", "upper_two_block_triangular'", ["matrix"]], ["del", "theorem", "upper_two_block_triangular", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/basis.lean", "changes": [["add", "theorem", "sum_to_matrix_smul_self", ["basis"]], ["add", "theorem", "to_lin_to_matrix", ["basis"]], ["add", "def", "to_matrix", ["basis"]], ["add", "theorem", "to_matrix_apply", ["basis"]], ["add", "theorem", "to_matrix_eq_to_matrix_constr", ["basis"]], ["add", "def", "to_matrix_equiv", ["basis"]], ["add", "theorem", "to_matrix_mul_to_matrix", ["basis"]], ["add", "theorem", "to_matrix_self", ["basis"]], ["add", "theorem", "to_matrix_transpose_apply", ["basis"]], ["add", "theorem", "to_matrix_update", ["basis"]], ["add", "theorem", "basis_to_matrix_mul_linear_map_to_matrix", []], ["add", "theorem", "to_matrix_id_eq_basis_to_matrix", ["linear_map"]], ["add", "theorem", "linear_map_to_matrix_mul_basis_to_matrix", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/block.lean", "changes": [["add", "def", "block_triangular_matrix'", ["matrix"]], ["add", "def", "block_triangular_matrix", ["matrix"]], ["add", "theorem", "det_of_block_triangular_matrix''", ["matrix"]], ["add", "theorem", "det_of_block_triangular_matrix'", ["matrix"]], ["add", "theorem", "det_of_block_triangular_matrix", ["matrix"]], ["add", "theorem", "det_of_lower_triangular", ["matrix"]], ["add", "theorem", "det_of_upper_triangular", ["matrix"]], ["add", "theorem", "det_to_block", ["matrix"]], ["add", "theorem", "det_to_square_block'", ["matrix"]], ["add", "theorem", "det_to_square_block", ["matrix"]], ["add", "theorem", "equiv_block_det", ["matrix"]], ["add", "theorem", "to_square_block_det''", ["matrix"]], ["add", "theorem", "two_block_triangular_det", ["matrix"]], ["add", "theorem", "upper_two_block_triangular'", ["matrix"]], ["add", "theorem", "upper_two_block_triangular", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/determinant.lean", "changes": [["add", "theorem", "map_det", ["matrix", "alg_hom"]], ["add", "def", "det", ["matrix"]], ["add", "theorem", "det_apply'", ["matrix"]], ["add", "theorem", "det_apply", ["matrix"]], ["add", "theorem", "det_block_diagonal", ["matrix"]], ["add", "theorem", "det_diagonal", ["matrix"]], ["add", "theorem", "det_eq_elem_of_card_eq_one", ["matrix"]], ["add", "theorem", "det_eq_of_eq_det_one_mul", ["matrix"]], ["add", "theorem", "det_eq_of_eq_mul_det_one", ["matrix"]], ["add", "theorem", "det_eq_of_forall_col_eq_smul_add_pred", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_const", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_const_aux", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_pred", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_pred_aux", ["matrix"]], ["add", "theorem", "det_eq_one_of_card_eq_zero", ["matrix"]], ["add", "theorem", "det_eq_zero_of_column_eq_zero", ["matrix"]], ["add", "theorem", "det_eq_zero_of_row_eq_zero", ["matrix"]], ["add", "theorem", "det_fin_zero", ["matrix"]], ["add", "theorem", "det_minor_equiv_self", ["matrix"]], ["add", "theorem", "det_mul", ["matrix"]], ["add", "theorem", "det_mul_aux", ["matrix"]], ["add", "theorem", "det_mul_column", ["matrix"]], ["add", "theorem", "det_mul_row", ["matrix"]], ["add", "theorem", "det_one", ["matrix"]], ["add", "theorem", "det_permutation", ["matrix"]], ["add", "theorem", "det_permute", ["matrix"]], ["add", "theorem", "det_reindex_self", ["matrix"]], ["add", "def", "det_row_multilinear", ["matrix"]], ["add", "theorem", "det_smul", ["matrix"]], ["add", "theorem", "det_succ_column", ["matrix"]], ["add", "theorem", "det_succ_column_zero", ["matrix"]], ["add", "theorem", "det_succ_row", ["matrix"]], ["add", "theorem", "det_succ_row_zero", ["matrix"]], ["add", "theorem", "det_transpose", ["matrix"]], ["add", "theorem", "det_unique", ["matrix"]], ["add", "theorem", "det_update_column_add", ["matrix"]], ["add", "theorem", "det_update_column_add_self", ["matrix"]], ["add", "theorem", "det_update_column_add_smul_self", ["matrix"]], ["add", "theorem", "det_update_column_smul", ["matrix"]], ["add", "theorem", "det_update_row_add", ["matrix"]], ["add", "theorem", "det_update_row_add_self", ["matrix"]], ["add", "theorem", "det_update_row_add_smul_self", ["matrix"]], ["add", "theorem", "det_update_row_smul", ["matrix"]], ["add", "theorem", "det_zero", ["matrix"]], ["add", "theorem", "det_zero_of_column_eq", ["matrix"]], ["add", "theorem", "det_zero_of_row_eq", ["matrix"]], ["add", "theorem", "map_det", ["matrix", "ring_hom"]], ["add", "theorem", "upper_two_block_triangular_det", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/diagonal.lean", "changes": [["add", "theorem", "diagonal_comp_std_basis", ["matrix"]], ["add", "theorem", "diagonal_to_lin'", ["matrix"]], ["add", "theorem", "ker_diagonal_to_lin'", ["matrix"]], ["add", "theorem", "proj_diagonal", ["matrix"]], ["add", "theorem", "range_diagonal", ["matrix"]], ["add", "theorem", "rank_diagonal", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/dot_product.lean", "changes": [["add", "theorem", "dot_product_eq", ["matrix"]], ["add", "theorem", "dot_product_eq_iff", ["matrix"]], ["add", "theorem", "dot_product_eq_zero", ["matrix"]], ["add", "theorem", "dot_product_eq_zero_iff", ["matrix"]], ["add", "theorem", "dot_product_std_basis_eq_mul", ["matrix"]], ["add", "theorem", "dot_product_std_basis_one", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/dual.lean", "changes": [["add", "theorem", "to_matrix_transpose", ["linear_map"]], ["add", "theorem", "to_lin_transpose", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_matrix", ["matrix"]]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/matrix/nonsingular_inverse.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/reindex.lean", "changes": [["add", "theorem", "det_reindex_alg_equiv", ["matrix"]], ["add", "theorem", "det_reindex_linear_equiv_self", ["matrix"]], ["add", "def", "reindex_alg_equiv", ["matrix"]], ["add", "theorem", "reindex_alg_equiv_apply", ["matrix"]], ["add", "theorem", "reindex_alg_equiv_refl", ["matrix"]], ["add", "theorem", "reindex_alg_equiv_symm", ["matrix"]], ["add", "def", "reindex_linear_equiv", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_apply", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_refl_refl", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_symm", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/to_lin.lean", "changes": [["add", "def", "alg_equiv_matrix'", []], ["add", "def", "alg_equiv_matrix", []], ["add", "theorem", "left_mul_matrix_apply", ["algebra"]], ["add", "theorem", "left_mul_matrix_eq_repr_mul", ["algebra"]], ["add", "theorem", "left_mul_matrix_injective", ["algebra"]], ["add", "theorem", "left_mul_matrix_mul_vec_repr", ["algebra"]], ["add", "theorem", "smul_left_mul_matrix", ["algebra"]], ["add", "theorem", "smul_left_mul_matrix_algebra_map", ["algebra"]], ["add", "theorem", "smul_left_mul_matrix_algebra_map_eq", ["algebra"]], ["add", "theorem", "smul_left_mul_matrix_algebra_map_ne", ["algebra"]], ["add", "theorem", "to_matrix_lmul'", ["algebra"]], ["add", "theorem", "to_matrix_lmul_eq", ["algebra"]], ["add", "theorem", "to_matrix_lsmul", ["algebra"]], ["add", "def", "alg_conj", ["linear_equiv"]], ["add", "theorem", "finrank_linear_map", ["linear_map"]], ["add", "def", "to_matrix'", ["linear_map"]], ["add", "theorem", "to_matrix'_apply", ["linear_map"]], ["add", "theorem", "to_matrix'_comp", ["linear_map"]], ["add", "theorem", "to_matrix'_id", ["linear_map"]], ["add", "theorem", "to_matrix'_mul", ["linear_map"]], ["add", "theorem", "to_matrix'_symm", ["linear_map"]], ["add", "theorem", "to_matrix'_to_lin'", ["linear_map"]], ["add", "def", "to_matrix", ["linear_map"]], ["add", "def", "to_matrix_alg_equiv'", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_apply", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_comp", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_id", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_mul", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_symm", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_to_lin_alg_equiv'", ["linear_map"]], ["add", "def", "to_matrix_alg_equiv", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_apply", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_comp", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_id", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_mul", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_reindex_range", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_symm", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_to_lin_alg_equiv", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_transpose_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_transpose_apply", ["linear_map"]], ["add", "theorem", "to_matrix_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_apply", ["linear_map"]], ["add", "theorem", "to_matrix_comp", ["linear_map"]], ["add", "theorem", "to_matrix_id", ["linear_map"]], ["add", "theorem", "to_matrix_mul", ["linear_map"]], ["add", "theorem", "to_matrix_mul_vec_repr", ["linear_map"]], ["add", "theorem", "to_matrix_one", ["linear_map"]], ["add", "theorem", "to_matrix_reindex_range", ["linear_map"]], ["add", "theorem", "to_matrix_symm", ["linear_map"]], ["add", "theorem", "to_matrix_to_lin", ["linear_map"]], ["add", "theorem", "to_matrix_transpose_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_transpose_apply", ["linear_map"]], ["add", "def", "mul_vec_lin", ["matrix"]], ["add", "theorem", "mul_vec_lin_apply", ["matrix"]], ["add", "theorem", "mul_vec_std_basis", ["matrix"]], ["add", "theorem", "rank_vec_mul_vec", ["matrix"]], ["add", "def", "to_lin'", ["matrix"]], ["add", "theorem", "to_lin'_apply", ["matrix"]], ["add", "theorem", "to_lin'_mul", ["matrix"]], ["add", "theorem", "to_lin'_one", ["matrix"]], ["add", "theorem", "to_lin'_symm", ["matrix"]], ["add", "theorem", "to_lin'_to_matrix'", ["matrix"]], ["add", "def", "to_lin", ["matrix"]], ["add", "def", "to_lin_alg_equiv'", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_apply", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_mul", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_one", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_symm", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_to_matrix_alg_equiv'", ["matrix"]], ["add", "def", "to_lin_alg_equiv", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_apply", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_mul", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_one", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_self", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_symm", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_to_matrix_alg_equiv", ["matrix"]], ["add", "theorem", "to_lin_apply", ["matrix"]], ["add", "theorem", "to_lin_mul", ["matrix"]], ["add", "theorem", "to_lin_one", ["matrix"]], ["add", "theorem", "to_lin_self", ["matrix"]], ["add", "theorem", "to_lin_symm", ["matrix"]], ["add", "theorem", "to_lin_to_matrix", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/to_linear_equiv.lean", "changes": [["add", "theorem", "ker_to_lin_eq_bot", ["matrix"]], ["add", "theorem", "range_to_lin_eq_top", ["matrix"]], ["add", "theorem", "to_linear_equiv'_apply", ["matrix"]], ["add", "theorem", "to_linear_equiv'_symm_apply", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix/trace.lean", "changes": [["add", "def", "diag", ["matrix"]], ["add", "theorem", "diag_apply", ["matrix"]], ["add", "theorem", "diag_one", ["matrix"]], ["add", "theorem", "diag_transpose", ["matrix"]], ["add", "def", "trace", ["matrix"]], ["add", "theorem", "trace_apply", ["matrix"]], ["add", "theorem", "trace_diag", ["matrix"]], ["add", "theorem", "trace_mul_comm", ["matrix"]], ["add", "theorem", "trace_one", ["matrix"]], ["add", "theorem", "trace_transpose", ["matrix"]], ["add", "theorem", "trace_transpose_mul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/trace.lean", "changes": [["add", "def", "trace", ["linear_map"]], ["add", "def", "trace_aux", ["linear_map"]], ["add", "theorem", "trace_aux_def", ["linear_map"]], ["add", "theorem", "trace_aux_eq", ["linear_map"]], ["add", "theorem", "trace_aux_reindex_range", ["linear_map"]], ["add", "theorem", "trace_eq_matrix_trace", ["linear_map"]], ["add", "theorem", "trace_eq_matrix_trace_of_finite_set", ["linear_map"]], ["add", "theorem", "trace_mul_comm", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/vandermonde.lean", "newPath": "src/linear_algebra/vandermonde.lean", "changes": []}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": []}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1621088474, "sha": "3c27e2ef", "message": "feat(algebra/lie/weights): define product of root vectors and weight vectors (#7591)\nAlso some related results, most notably that the zero root space is a subalgebra.", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "coe_restrict_lie", ["lie_module_hom"]], ["add", "def", "restrict_lie", ["lie_module_hom"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "coe_to_lie_submodule", ["lie_subalgebra"]], ["mod", "theorem", "exists_lie_ideal_coe_eq_iff", ["lie_subalgebra"]], ["add", "theorem", "mem_to_lie_submodule", ["lie_subalgebra"]], ["add", "def", "to_lie_submodule", ["lie_subalgebra"]], ["add", "theorem", "coe_add", ["lie_submodule"]], ["add", "theorem", "coe_bracket", ["lie_submodule"]], ["add", "theorem", "coe_neg", ["lie_submodule"]], ["add", "theorem", "coe_smul", ["lie_submodule"]], ["add", "theorem", "coe_sub", ["lie_submodule"]], ["add", "theorem", "coe_zero", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": [["add", "theorem", "coe_root_space_weight_space_product_tmul", ["lie_algebra"]], ["add", "theorem", "coe_zero_root_subalgebra", ["lie_algebra"]], ["mod", "def", "is_root", ["lie_algebra"]], ["add", "theorem", "le_zero_root_subalgebra", ["lie_algebra"]], ["add", "theorem", "lie_mem_weight_space_of_mem_weight_space", ["lie_algebra"]], ["mod", "def", "root_space", ["lie_algebra"]], ["add", "def", "root_space_product", ["lie_algebra"]], ["add", "theorem", "root_space_product_def", ["lie_algebra"]], ["add", "theorem", "root_space_product_tmul", ["lie_algebra"]], ["add", "def", "root_space_weight_space_product", ["lie_algebra"]], ["add", "theorem", "to_lie_submodule_le_root_space_zero", ["lie_algebra"]], ["add", "def", "zero_root_subalgebra", ["lie_algebra"]]]}]}, {"timestamp": 1621088473, "sha": "515762aa", "message": "feat(category_theory/quotient): congruence relations (#7501)\nDefine congruence relations and show that when you quotient a category by a congruence relation, two morphism become equal iff they are related.", "changes": [{"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": [["add", "theorem", "functor_map_eq_iff", ["category_theory", "quotient"]], ["add", "def", "hom_rel", []]]}]}, {"timestamp": 1621066595, "sha": "fc94b47f", "message": "feat(counterexamples): a counterexample on the Pettis integral (#7553)\nPhillips (1940) has exhibited under the continuum hypothesis a bounded weakly measurable function which is not Pettis-integrable. We formalize this counterexample.", "changes": [{"oldPath": null, "newPath": "counterexamples/phillips.lean", "changes": [["add", "def", "to_bounded_additive_measure", ["continuous_linear_map"]], ["add", "def", "discrete_copy", []], ["add", "def", "extension_to_bounded_functions", ["measure_theory", "measure"]], ["add", "theorem", "apply_f_eq_continuous_part", ["phillips_1940"]], ["add", "def", "C", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "abs_le_bound", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "additive", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "apply_countable", ["phillips_1940", "bounded_additive_measure"]], ["add", "def", "continuous_part", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "continuous_part_apply_diff", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "continuous_part_apply_eq_zero_of_countable", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "countable_discrete_support", ["phillips_1940", "bounded_additive_measure"]], ["add", "def", "discrete_part", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "discrete_part_apply", ["phillips_1940", "bounded_additive_measure"]], ["add", "def", "discrete_support", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "empty", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "eq_add_parts", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "exists_discrete_support", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "exists_discrete_support_nonpos", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "le_bound", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "neg_apply", ["phillips_1940", "bounded_additive_measure"]], ["add", "def", "restrict", ["phillips_1940", "bounded_additive_measure"]], ["add", "theorem", "restrict_apply", ["phillips_1940", "bounded_additive_measure"]], ["add", "structure", "bounded_additive_measure", ["phillips_1940"]], ["add", "def", "bounded_integrable_functions", ["phillips_1940"]], ["add", "def", "bounded_integrable_functions_integral_clm", ["phillips_1940"]], ["add", "theorem", "comp_ae_eq_const", ["phillips_1940"]], ["add", "theorem", "continuous_part_eval_clm_eq_zero", ["phillips_1940"]], ["add", "theorem", "countable_compl_spf", ["phillips_1940"]], ["add", "theorem", "countable_ne", ["phillips_1940"]], ["add", "theorem", "countable_spf_mem", ["phillips_1940"]], ["add", "theorem", "exists_linear_extension_to_bounded_functions", ["phillips_1940"]], ["add", "theorem", "extension_to_bounded_functions_apply", ["phillips_1940"]], ["add", "def", "f", ["phillips_1940"]], ["add", "theorem", "integrable_comp", ["phillips_1940"]], ["add", "theorem", "integral_comp", ["phillips_1940"]], ["add", "theorem", "measurable_comp", ["phillips_1940"]], ["add", "theorem", "no_pettis_integral", ["phillips_1940"]], ["add", "theorem", "norm_bound", ["phillips_1940"]], ["add", "theorem", "norm_indicator_le_one", ["phillips_1940"]], ["add", "theorem", "sierpinski_pathological_family", ["phillips_1940"]], ["add", "def", "spf", ["phillips_1940"]], ["add", "theorem", "to_functions_to_measure", ["phillips_1940"]], ["add", "theorem", "to_functions_to_measure_continuous_part", ["phillips_1940"]]]}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_union_inter", ["set"]], ["add", "theorem", "union_eq_diff_union_diff_union_inter", ["set"]], ["del", "theorem", "union_eq_sdiff_union_sdiff_union_inter", ["set"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_of_countable_ne", ["measurable"]], ["add", "theorem", "measurable_set", ["set", "countable"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "measure_zero", ["finset"]], ["del", "theorem", "measure_countable", ["measure_theory"]], ["del", "theorem", "measure_finite", ["measure_theory"]], ["del", "theorem", "measure_finset", ["measure_theory"]], ["add", "theorem", "measure_zero", ["set", "countable"]], ["add", "theorem", "measure_zero", ["set", "finite"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "countable_iff_lt_aleph_one", ["cardinal"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "coe_of_normed_group", ["bounded_continuous_function"]], ["add", "theorem", "coe_of_normed_group_discrete", ["bounded_continuous_function"]], ["mod", "theorem", "continuous_eval", ["bounded_continuous_function"]], ["mod", "theorem", "continuous_evalx", ["bounded_continuous_function"]], ["add", "def", "eval_clm", ["bounded_continuous_function"]], ["add", "theorem", "eval_clm_apply", ["bounded_continuous_function"]]]}]}, {"timestamp": 1621066594, "sha": "b4b38da8", "message": "feat(category_theory/*/projective): refactor treatment of projective objects (#7485)", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": []}, {"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": []}, {"oldPath": "src/algebra/homology/image_to_kernel.lean", "newPath": "src/algebra/homology/image_to_kernel.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/projective.lean", "newPath": "src/category_theory/abelian/projective.lean", "changes": [["add", "theorem", "exact_d_f", ["category_theory"]], ["del", "def", "d", ["category_theory", "projective"]], ["del", "theorem", "exact_d_f", ["category_theory", "projective"]], ["del", "def", "factor_thru", ["category_theory", "projective"]], ["del", "theorem", "factor_thru_comp", ["category_theory", "projective"]], ["del", "theorem", "iso_iff", ["category_theory", "projective"]], ["del", "def", "left", ["category_theory", "projective"]], ["del", "theorem", "of_iso", ["category_theory", "projective"]], ["del", "def", "over", ["category_theory", "projective"]], ["del", "def", "π", ["category_theory", "projective"]], ["del", "structure", "projective_presentation", ["category_theory"]]]}, {"oldPath": "src/category_theory/closed/zero.lean", "newPath": "src/category_theory/closed/zero.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/preadditive/projective.lean", "changes": [["add", "def", "lift", ["category_theory", "exact"]], ["add", "theorem", "lift_comp", ["category_theory", "exact"]], ["add", "def", "d", ["category_theory", "projective"]], ["add", "def", "factor_thru", ["category_theory", "projective"]], ["add", "theorem", "factor_thru_comp", ["category_theory", "projective"]], ["add", "theorem", "iso_iff", ["category_theory", "projective"]], ["add", "theorem", "of_iso", ["category_theory", "projective"]], ["add", "def", "over", ["category_theory", "projective"]], ["add", "def", "syzygies", ["category_theory", "projective"]], ["add", "def", "π", ["category_theory", "projective"]], ["add", "structure", "projective_presentation", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/triangulated/basic.lean", "newPath": "src/category_theory/triangulated/basic.lean", "changes": []}]}, {"timestamp": 1621066592, "sha": "c63caebb", "message": "feat(algebra/homology): homotopies between chain maps (#7483)", "changes": [{"oldPath": "src/algebra/homology/additive.lean", "newPath": "src/algebra/homology/additive.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/homology/homotopy.lean", "changes": [["add", "def", "map_homotopy", ["category_theory", "functor"]], ["add", "def", "map_homotopy_equiv", ["category_theory", "functor"]], ["add", "def", "from_next'", []], ["add", "theorem", "from_next'_add", []], ["add", "theorem", "from_next'_comp_left", []], ["add", "theorem", "from_next'_comp_right", []], ["add", "theorem", "from_next'_eq", []], ["add", "theorem", "from_next'_neg", []], ["add", "theorem", "from_next'_zero", []], ["add", "theorem", "homology_map_eq_of_homotopy", []], ["add", "def", "homology_obj_iso_of_homotopy_equiv", []], ["add", "theorem", "comm", ["homotopy"]], ["add", "def", "comp_left", ["homotopy"]], ["add", "def", "comp_left_id", ["homotopy"]], ["add", "def", "comp_right", ["homotopy"]], ["add", "def", "comp_right_id", ["homotopy"]], ["add", "def", "equiv_sub_zero", ["homotopy"]], ["add", "theorem", "from_next'_succ_chain_complex", ["homotopy"]], ["add", "theorem", "from_next'_zero_chain_complex", ["homotopy"]], ["add", "def", "from_next", ["homotopy"]], ["add", "def", "mk_inductive", ["homotopy"]], ["add", "def", "mk_inductive_aux₁", ["homotopy"]], ["add", "def", "mk_inductive_aux₂", ["homotopy"]], ["add", "theorem", "mk_inductive_aux₃", ["homotopy"]], ["add", "def", "refl", ["homotopy"]], ["add", "def", "symm", ["homotopy"]], ["add", "theorem", "to_prev'_chain_complex", ["homotopy"]], ["add", "def", "to_prev", ["homotopy"]], ["add", "def", "trans", ["homotopy"]], ["add", "structure", "homotopy", []], ["add", "def", "refl", ["homotopy_equiv"]], ["add", "def", "symm", ["homotopy_equiv"]], ["add", "def", "trans", ["homotopy_equiv"]], ["add", "structure", "homotopy_equiv", []], ["add", "def", "to_prev'", []], ["add", "theorem", "to_prev'_add", []], ["add", "theorem", "to_prev'_comp_left", []], ["add", "theorem", "to_prev'_comp_right", []], ["add", "theorem", "to_prev'_eq", []], ["add", "theorem", "to_prev'_neg", []], ["add", "theorem", "to_prev'_zero", []]]}]}, {"timestamp": 1621066591, "sha": "cc47aff4", "message": "feat(algebra/homology): truncation and augmentation of chain complexes (#7480)", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/augment.lean", "changes": [["add", "def", "augment", ["chain_complex"]], ["add", "theorem", "augment_X_succ", ["chain_complex"]], ["add", "theorem", "augment_X_zero", ["chain_complex"]], ["add", "theorem", "augment_d_one_zero", ["chain_complex"]], ["add", "theorem", "augment_d_succ_succ", ["chain_complex"]], ["add", "def", "augment_truncate", ["chain_complex"]], ["add", "theorem", "augment_truncate_hom_f_succ", ["chain_complex"]], ["add", "theorem", "augment_truncate_hom_f_zero", ["chain_complex"]], ["add", "theorem", "augment_truncate_inv_f_succ", ["chain_complex"]], ["add", "theorem", "augment_truncate_inv_f_zero", ["chain_complex"]], ["add", "theorem", "cochain_complex_d_succ_succ_zero", ["chain_complex"]], ["add", "def", "to_single₀_as_complex", ["chain_complex"]], ["add", "def", "truncate", ["chain_complex"]], ["add", "def", "truncate_augment", ["chain_complex"]], ["add", "theorem", "truncate_augment_hom_f", ["chain_complex"]], ["add", "theorem", "truncate_augment_inv_f", ["chain_complex"]], ["add", "def", "truncate_to", ["chain_complex"]]]}]}, {"timestamp": 1621066590, "sha": "5da114c4", "message": "feat(algebraic_topology): the Moore complex of a simplicial object (#6308)\n## Moore complex\nWe construct the normalized Moore complex, as a functor\n`simplicial_object C ⥤ chain_complex C ℕ`,\nfor any abelian category `C`.\nThe `n`-th object is intersection of\nthe kernels of `X.δ i : X.obj n ⟶ X.obj (n-1)`, for `i = 1, ..., n`.\nThe differentials are induced from `X.δ 0`,\nwhich maps each of these intersections of kernels to the next.\nThis functor is one direction of the Dold-Kan equivalence, which we're still working towards.", "changes": [{"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "theorem", "of_d_ne", ["chain_complex"]], ["add", "def", "of_hom", ["chain_complex"]]]}, {"oldPath": null, "newPath": "src/algebraic_topology/Moore_complex.lean", "changes": [["add", "theorem", "d_squared", ["algebraic_topology", "normalized_Moore_complex"]], ["add", "def", "map", ["algebraic_topology", "normalized_Moore_complex"]], ["add", "def", "obj", ["algebraic_topology", "normalized_Moore_complex"]], ["add", "def", "obj_X", ["algebraic_topology", "normalized_Moore_complex"]], ["add", "def", "obj_d", ["algebraic_topology", "normalized_Moore_complex"]], ["add", "def", "normalized_Moore_complex", ["algebraic_topology"]]]}]}, {"timestamp": 1621051197, "sha": "94aae73d", "message": "feat(data/nat/factorial) : descending factorial (#7527)", "changes": [{"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "theorem", "choose_eq_desc_fac_div_factorial", ["nat"]], ["add", "theorem", "desc_fac_eq_factorial_mul_choose", ["nat"]], ["add", "theorem", "factorial_dvd_desc_fac", ["nat"]]]}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["add", "def", "desc_fac", ["nat"]], ["add", "theorem", "desc_fac_eq_div", ["nat"]], ["add", "theorem", "desc_fac_succ", ["nat"]], ["add", "theorem", "desc_fac_zero", ["nat"]], ["add", "theorem", "factorial_mul_desc_fac", ["nat"]], ["add", "theorem", "succ_desc_fac", ["nat"]], ["add", "theorem", "zero_desc_fac", ["nat"]]]}, {"oldPath": "src/ring_theory/polynomial/bernstein.lean", "newPath": "src/ring_theory/polynomial/bernstein.lean", "changes": [["del", "theorem", "iterate_derivative_at_0_aux₁", ["bernstein_polynomial"]], ["del", "theorem", "iterate_derivative_at_0_aux₂", ["bernstein_polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/pochhammer.lean", "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": [["del", "theorem", "choose_eq_pochhammer_eval_div_factorial", []], ["del", "theorem", "factorial_mul_pochhammer'", []], ["del", "theorem", "pochhammer_eval_eq_choose_mul_factorial", []], ["del", "theorem", "pochhammer_eval_eq_factorial_div_factorial", []], ["del", "theorem", "pochhammer_eval_one'", []], ["add", "theorem", "pochhammer_eval_succ", []], ["add", "theorem", "pochhammer_nat_eq_desc_fac", []], ["add", "theorem", "pochhammer_nat_eval_succ", []]]}]}, {"timestamp": 1621046605, "sha": "a648af4c", "message": "chore(scripts): update nolints.txt (#7613)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1621032177, "sha": "bd923f7b", "message": "chore(geometry/euclidean/triangle): minor style fixes (#7585)", "changes": [{"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}]}, {"timestamp": 1621019981, "sha": "fd3d1178", "message": "feat(data/mv_polynomial/basic): Add ring section (#7507)\nA few lemmas about `monomial` analogous to those for the single-variate polynomials over rings.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "single_nat_sub", ["finsupp"]], ["add", "theorem", "single_neg", ["finsupp"]], ["mod", "theorem", "single_sub", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["add", "theorem", "monomial_neg", ["mv_polynomial"]], ["add", "theorem", "monomial_sub", ["mv_polynomial"]]]}]}, {"timestamp": 1621013312, "sha": "a52f471f", "message": "feat(algebra/homology): chain complexes are an additive category (#7478)", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/additive.lean", "changes": [["add", "def", "map_homological_complex", ["category_theory", "functor"]], ["add", "def", "map_homological_complex", ["category_theory", "nat_trans"]], ["add", "theorem", "map_homological_complex_comp", ["category_theory", "nat_trans"]], ["add", "theorem", "map_homological_complex_id", ["category_theory", "nat_trans"]], ["add", "theorem", "map_homological_complex_naturality", ["category_theory", "nat_trans"]], ["add", "def", "single₀_map_homological_complex", ["chain_complex"]], ["add", "theorem", "single₀_map_homological_complex_hom_app_succ", ["chain_complex"]], ["add", "theorem", "single₀_map_homological_complex_hom_app_zero", ["chain_complex"]], ["add", "theorem", "single₀_map_homological_complex_inv_app_succ", ["chain_complex"]], ["add", "theorem", "single₀_map_homological_complex_inv_app_zero", ["chain_complex"]], ["add", "theorem", "add_f_apply", ["homological_complex"]], ["add", "theorem", "neg_f_apply", ["homological_complex"]], ["add", "def", "single_map_homological_complex", ["homological_complex"]], ["add", "theorem", "single_map_homological_complex_hom_app_ne", ["homological_complex"]], ["add", "theorem", "single_map_homological_complex_hom_app_self", ["homological_complex"]], ["add", "theorem", "single_map_homological_complex_inv_app_ne", ["homological_complex"]], ["add", "theorem", "single_map_homological_complex_inv_app_self", ["homological_complex"]], ["add", "theorem", "sub_f_apply", ["homological_complex"]], ["add", "theorem", "zero_f_apply", ["homological_complex"]]]}, {"oldPath": "src/algebra/homology/single.lean", "newPath": "src/algebra/homology/single.lean", "changes": []}]}, {"timestamp": 1621002323, "sha": "f8dc7224", "message": "refactor(topology/algebra/ordered): reduce imports (#7601)\nRenames `topology.algebra.ordered` to `topology.algebra.order`, and moves the material about `liminf/limsup` and about `extend_from` to separate files, in order to delay imports.", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered/basic.lean", "changes": [["del", "theorem", "Liminf_eq_of_le_nhds", []], ["del", "theorem", "Liminf_nhds", []], ["del", "theorem", "Limsup_eq_of_le_nhds", []], ["del", "theorem", "Limsup_nhds", []], ["del", "theorem", "continuous_on_Icc_extend_from_Ioo", []], ["del", "theorem", "continuous_on_Ico_extend_from_Ioo", []], ["del", "theorem", "continuous_on_Ioc_extend_from_Ioo", []], ["del", "theorem", "eq_lim_at_left_extend_from_Ioo", []], ["del", "theorem", "eq_lim_at_right_extend_from_Ioo", []], ["del", "theorem", "is_bounded_under_ge", ["filter", "tendsto"]], ["del", "theorem", "is_bounded_under_le", ["filter", "tendsto"]], ["del", "theorem", "is_cobounded_under_ge", ["filter", "tendsto"]], ["del", "theorem", "is_cobounded_under_le", ["filter", "tendsto"]], ["del", "theorem", "liminf_eq", ["filter", "tendsto"]], ["del", "theorem", "limsup_eq", ["filter", "tendsto"]], ["del", "theorem", "gt_mem_sets_of_Liminf_gt", []], ["del", "theorem", "is_bounded_ge_nhds", []], ["del", "theorem", "is_bounded_le_nhds", []], ["del", "theorem", "is_cobounded_ge_nhds", []], ["del", "theorem", "is_cobounded_le_nhds", []], ["del", "theorem", "le_nhds_of_Limsup_eq_Liminf", []], ["del", "theorem", "lt_mem_sets_of_Limsup_lt", []], ["del", "theorem", "tendsto_of_le_liminf_of_limsup_le", []], ["del", "theorem", "tendsto_of_liminf_eq_limsup", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/extend_from.lean", "changes": [["add", "theorem", "continuous_on_Icc_extend_from_Ioo", []], ["add", "theorem", "continuous_on_Ico_extend_from_Ioo", []], ["add", "theorem", "continuous_on_Ioc_extend_from_Ioo", []], ["add", "theorem", "eq_lim_at_left_extend_from_Ioo", []], ["add", "theorem", "eq_lim_at_right_extend_from_Ioo", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/liminf_limsup.lean", "changes": [["add", "theorem", "Liminf_eq_of_le_nhds", []], ["add", "theorem", "Liminf_nhds", []], ["add", "theorem", "Limsup_eq_of_le_nhds", []], ["add", "theorem", "Limsup_nhds", []], ["add", "theorem", "is_bounded_under_ge", ["filter", "tendsto"]], ["add", "theorem", "is_bounded_under_le", ["filter", "tendsto"]], ["add", "theorem", "is_cobounded_under_ge", ["filter", "tendsto"]], ["add", "theorem", "is_cobounded_under_le", ["filter", "tendsto"]], ["add", "theorem", "liminf_eq", ["filter", "tendsto"]], ["add", "theorem", "limsup_eq", ["filter", "tendsto"]], ["add", "theorem", "gt_mem_sets_of_Liminf_gt", []], ["add", "theorem", "is_bounded_ge_nhds", []], ["add", "theorem", "is_bounded_le_nhds", []], ["add", "theorem", "is_cobounded_ge_nhds", []], ["add", "theorem", "is_cobounded_le_nhds", []], ["add", "theorem", "le_nhds_of_Limsup_eq_Liminf", []], ["add", "theorem", "lt_mem_sets_of_Limsup_lt", []], ["add", "theorem", "tendsto_of_le_liminf_of_limsup_le", []], ["add", "theorem", "tendsto_of_liminf_eq_limsup", []]]}, {"oldPath": "src/topology/algebra/ordered/proj_Icc.lean", "newPath": "src/topology/algebra/ordered/proj_Icc.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": []}, {"oldPath": "src/topology/extend_from_subset.lean", "newPath": "src/topology/extend_from.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}]}, {"timestamp": 1621002322, "sha": "2373ee62", "message": "refactor(set_theory/{surreal, game}): move `mul` from surreal to game (#7580)\nThe next step is to provide several `simp` lemmas for multiplication of pgames in terms of games.\nNone of these statements involve surreal numbers.", "changes": [{"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": [["add", "def", "inv'", ["pgame"]], ["add", "inductive", "inv_ty", ["pgame"]], ["add", "def", "inv_val", ["pgame"]], ["add", "theorem", "left_distrib_equiv", ["pgame"]], ["add", "theorem", "left_distrib_equiv_aux'", ["pgame"]], ["add", "theorem", "left_distrib_equiv_aux", ["pgame"]], ["add", "def", "left_moves_mul", ["pgame"]], ["add", "theorem", "mk_mul_move_left_inl", ["pgame"]], ["add", "theorem", "mk_mul_move_left_inr", ["pgame"]], ["add", "theorem", "mk_mul_move_right_inl", ["pgame"]], ["add", "theorem", "mk_mul_move_right_inr", ["pgame"]], ["add", "def", "mul", ["pgame"]], ["add", "theorem", "mul_comm_equiv", ["pgame"]], ["add", "def", "mul_comm_relabelling", ["pgame"]], ["add", "theorem", "mul_move_left_inl", ["pgame"]], ["add", "theorem", "mul_move_left_inr", ["pgame"]], ["add", "theorem", "mul_move_right_inl", ["pgame"]], ["add", "theorem", "mul_move_right_inr", ["pgame"]], ["add", "theorem", "mul_zero_equiv", ["pgame"]], ["add", "def", "mul_zero_relabelling", ["pgame"]], ["add", "theorem", "right_distrib_equiv", ["pgame"]], ["add", "def", "right_moves_mul", ["pgame"]], ["add", "theorem", "zero_mul_equiv", ["pgame"]], ["add", "def", "zero_mul_relabelling", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": [["del", "def", "inv'", ["pgame"]], ["del", "inductive", "inv_ty", ["pgame"]], ["del", "def", "inv_val", ["pgame"]], ["del", "theorem", "left_distrib_equiv", ["pgame"]], ["del", "theorem", "left_distrib_equiv_aux'", ["pgame"]], ["del", "theorem", "left_distrib_equiv_aux", ["pgame"]], ["del", "def", "left_moves_mul", ["pgame"]], ["del", "theorem", "mk_mul_move_left_inl", ["pgame"]], ["del", "theorem", "mk_mul_move_left_inr", ["pgame"]], ["del", "theorem", "mk_mul_move_right_inl", ["pgame"]], ["del", "theorem", "mk_mul_move_right_inr", ["pgame"]], ["del", "def", "mul", ["pgame"]], ["del", "theorem", "mul_comm_equiv", ["pgame"]], ["del", "def", "mul_comm_relabelling", ["pgame"]], ["del", "theorem", "mul_move_left_inl", ["pgame"]], ["del", "theorem", "mul_move_left_inr", ["pgame"]], ["del", "theorem", "mul_move_right_inl", ["pgame"]], ["del", "theorem", "mul_move_right_inr", ["pgame"]], ["del", "theorem", "mul_zero_equiv", ["pgame"]], ["del", "def", "mul_zero_relabelling", ["pgame"]], ["del", "theorem", "right_distrib_equiv", ["pgame"]], ["del", "def", "right_moves_mul", ["pgame"]], ["del", "theorem", "zero_mul_equiv", ["pgame"]], ["del", "def", "zero_mul_relabelling", ["pgame"]]]}]}, {"timestamp": 1620993751, "sha": "87adde49", "message": "feat(category_theory/monoidal): the monoidal opposite (#7602)", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/opposite.lean", "changes": [["add", "def", "mop", ["category_theory", "iso"]], ["add", "def", "mop", ["category_theory", "monoidal_opposite"]], ["add", "theorem", "mop_unmop", ["category_theory", "monoidal_opposite"]], ["add", "theorem", "op_inj_iff", ["category_theory", "monoidal_opposite"]], ["add", "theorem", "op_injective", ["category_theory", "monoidal_opposite"]], ["add", "def", "unmop", ["category_theory", "monoidal_opposite"]], ["add", "theorem", "unmop_mop", ["category_theory", "monoidal_opposite"]], ["add", "theorem", "unop_inj_iff", ["category_theory", "monoidal_opposite"]], ["add", "theorem", "unop_injective", ["category_theory", "monoidal_opposite"]], ["add", "def", "monoidal_opposite", ["category_theory"]], ["add", "theorem", "mop_comp", ["category_theory"]], ["add", "theorem", "mop_id", ["category_theory"]], ["add", "theorem", "mop_id_unmop", ["category_theory"]], ["add", "theorem", "mop_inj", ["category_theory"]], ["add", "theorem", "mop_tensor_obj", ["category_theory"]], ["add", "theorem", "mop_tensor_unit", ["category_theory"]], ["add", "theorem", "mop_unmop", ["category_theory"]], ["add", "theorem", "op_tensor_obj", ["category_theory"]], ["add", "theorem", "op_tensor_unit", ["category_theory"]], ["add", "theorem", "unmop_comp", ["category_theory"]], ["add", "theorem", "unmop_id", ["category_theory"]], ["add", "theorem", "unmop_id_mop", ["category_theory"]], ["add", "theorem", "unmop_inj", ["category_theory"]], ["add", "theorem", "unmop_mop", ["category_theory"]], ["add", "def", "mop", ["quiver", "hom"]], ["add", "def", "unmop", ["quiver", "hom"]]]}]}, {"timestamp": 1620993750, "sha": "cc1690e3", "message": "feat(analysis/calculus/parametric_integral): derivative of parametric integrals (#7437)\nfrom the sphere eversion project", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/parametric_integral.lean", "changes": [["add", "theorem", "has_deriv_at_of_dominated_loc_of_deriv_le", []], ["add", "theorem", "has_deriv_at_of_dominated_loc_of_lip", []], ["add", "theorem", "has_fderiv_at_of_dominated_loc_of_lip'", []], ["add", "theorem", "has_fderiv_at_of_dominated_loc_of_lip", []], ["add", "theorem", "has_fderiv_at_of_dominated_of_fderiv_le", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_of_real_le", ["nnreal"]], ["add", "theorem", "nnabs_of_nonneg", ["real"]]]}]}, {"timestamp": 1620985710, "sha": "1199a3de", "message": "feat(analysis/special_functions/exp_log): strengthen statement of `continuous_log'` (#7607)\nThe proof of `continuous (λ x : {x : ℝ // 0 < x}, log x)` also works for `continuous (λ x : {x : ℝ // x ≠ 0}, log x)`.\nI keep the preexisting lemma as well since it is used in a number of places and seems generally useful.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "continuous_log", ["real"]]]}]}, {"timestamp": 1620985709, "sha": "3c771674", "message": "feat(linear_algebra/dual): generalize from field to ring (#7599)", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "theorem", "coe_to_dual_self", ["basis"]], ["mod", "def", "dual_basis", ["basis"]], ["mod", "theorem", "dual_basis_apply", ["basis"]], ["mod", "theorem", "dual_basis_equiv_fun", ["basis"]], ["mod", "theorem", "dual_basis_repr", ["basis"]], ["mod", "theorem", "dual_dim_eq", ["basis"]], ["add", "def", "eval_equiv", ["basis"]], ["add", "theorem", "eval_equiv_to_linear_map", ["basis"]], ["add", "theorem", "eval_ker", ["basis"]], ["add", "theorem", "eval_range", ["basis"]], ["mod", "def", "to_dual", ["basis"]], ["mod", "theorem", "to_dual_apply_left", ["basis"]], ["mod", "theorem", "to_dual_apply_right", ["basis"]], ["mod", "theorem", "to_dual_eq_equiv_fun", ["basis"]], ["mod", "theorem", "to_dual_eq_repr", ["basis"]], ["mod", "def", "to_dual_equiv", ["basis"]], ["mod", "def", "to_dual_flip", ["basis"]], ["mod", "theorem", "to_dual_flip_apply", ["basis"]], ["mod", "theorem", "to_dual_inj", ["basis"]], ["mod", "theorem", "to_dual_ker", ["basis"]], ["mod", "theorem", "to_dual_range", ["basis"]], ["mod", "theorem", "to_dual_total_left", ["basis"]], ["mod", "theorem", "to_dual_total_right", ["basis"]], ["mod", "theorem", "total_coord", ["basis"]], ["mod", "theorem", "total_dual_basis", ["basis"]], ["mod", "def", "basis", ["dual_pair"]], ["mod", "def", "coeffs", ["dual_pair"]], ["mod", "theorem", "coeffs_apply", ["dual_pair"]], ["mod", "theorem", "coeffs_lc", ["dual_pair"]], ["mod", "theorem", "dual_lc", ["dual_pair"]], ["mod", "def", "lc", ["dual_pair"]], ["mod", "theorem", "lc_coeffs", ["dual_pair"]], ["mod", "theorem", "lc_def", ["dual_pair"]], ["mod", "theorem", "mem_of_mem_span", ["dual_pair"]], ["mod", "structure", "dual_pair", []]]}]}, {"timestamp": 1620967799, "sha": "840db09b", "message": "chore(category_theory/groupoid): remove unnecessary imports (#7600)", "changes": [{"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["add", "def", "of_trunc_split_mono", ["category_theory", "groupoid"]]]}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["del", "def", "of_trunc_split_mono", ["category_theory", "groupoid"]]]}]}, {"timestamp": 1620967798, "sha": "3124e1d1", "message": "feat(data/finset/lattice): choice-free le_sup_iff and lt_sup_iff (#7584)\nPropagate to `finset` the change to `le_sup_iff [is_total α (≤)]` and `lt_sup_iff [is_total α (≤)]` made in #7455.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "le_sup_iff", ["finset"]], ["mod", "theorem", "lt_sup_iff", ["finset"]]]}]}, {"timestamp": 1620967797, "sha": "bf2750e5", "message": "chore(order/atoms): ask for the correct instances (#7582)\nreplace bounded_lattice by order_bot/order_top where it can", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["mod", "theorem", "is_atom_dual_iff_is_coatom", []], ["mod", "theorem", "is_atomic_dual_iff_is_coatomic", []], ["mod", "theorem", "is_atomic_iff_forall_is_atomic_Iic", []], ["mod", "theorem", "is_coatom_dual_iff_is_atom", []], ["mod", "theorem", "is_coatomic_dual_iff_is_atomic", []], ["mod", "theorem", "is_coatomic_iff_forall_is_coatomic_Ici", []], ["mod", "theorem", "is_atom_iff", ["order_iso"]], ["mod", "theorem", "is_atomic_iff", ["order_iso"]], ["mod", "theorem", "is_coatom_iff", ["order_iso"]], ["mod", "theorem", "is_coatomic_iff", ["order_iso"]], ["mod", "theorem", "is_simple_lattice", ["order_iso"]], ["mod", "theorem", "is_simple_lattice_iff", ["order_iso"]]]}]}, {"timestamp": 1620967796, "sha": "8829c0d3", "message": "feat(algebra/homology): flipping double complexes (#7482)", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/flip.lean", "changes": [["add", "def", "flip", ["homological_complex"]], ["add", "def", "flip_equivalence", ["homological_complex"]], ["add", "def", "flip_equivalence_counit_iso", ["homological_complex"]], ["add", "def", "flip_equivalence_unit_iso", ["homological_complex"]], ["add", "def", "flip_obj", ["homological_complex"]]]}]}, {"timestamp": 1620967795, "sha": "722b5fc1", "message": "feat(algebra/homology): homological complexes are the same as differential objects (#7481)", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/differential_object.lean", "changes": [["add", "def", "dgo_equiv_homological_complex", ["homological_complex"]], ["add", "def", "dgo_equiv_homological_complex_counit_iso", ["homological_complex"]], ["add", "def", "dgo_equiv_homological_complex_unit_iso", ["homological_complex"]], ["add", "def", "dgo_to_homological_complex", ["homological_complex"]], ["add", "def", "homological_complex_to_dgo", ["homological_complex"]]]}]}, {"timestamp": 1620967794, "sha": "f5327c90", "message": "feat(algebra/homology): definition of quasi_iso (#7479)", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/quasi_iso.lean", "changes": []}]}, {"timestamp": 1620954810, "sha": "239908ee", "message": "feat(ring_theory/ideal/operations): add apply_coe_mem_map (#7566)\nThis is a continuation of #7459. In this PR:\n- We modify `ideal.mem_map_of_mem` in order to be consistent with `submonoid.mem_map_of_mem`.\n- We modify `submonoid.apply_coe_mem_map` (and friends) to have the submonoid as an explicit variable. This was the case before #7459 (but with a different, and not consistent, name). It seems to me that this version makes the code more readable.\n- We add `ideal.apply_coe_mem_map` (similar to `submonoid.apply_coe_mem_map`).\nNote that `mem_map_of_mem` is used in other places, for example we have `multiset.mem_map_of_mem`, but since a multiset is not a type there is no `apply_coe_mem_map` to add there.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "apply_coe_mem_map", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "apply_coe_mem_map", ["submonoid"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "apply_coe_mem_map", ["ideal"]], ["mod", "theorem", "mem_map_of_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1620919104, "sha": "090c9acc", "message": "chore(scripts): update nolints.txt (#7597)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1620919104, "sha": "f7923564", "message": "chore(order/galois_connection): ask for the correct instances (#7594)\nreplace partial_order by preorder where it can and general tidy up of this old style file", "changes": [{"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["mod", "theorem", "l_Sup", ["galois_connection"]], ["mod", "theorem", "u_Inf", ["galois_connection"]], ["mod", "def", "galois_connection", []], ["mod", "theorem", "strict_mono_u", ["galois_insertion"]], ["mod", "theorem", "galois_connection_mul_div", ["nat"]]]}]}, {"timestamp": 1620919103, "sha": "ce455949", "message": "feat(algebra/homology/single): chain complexes supported in a single degree (#7477)", "changes": [{"oldPath": "src/algebra/homology/homological_complex.lean", "newPath": "src/algebra/homology/homological_complex.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/homology/single.lean", "changes": [["add", "def", "homology_functor_0_single₀", ["chain_complex"]], ["add", "def", "homology_functor_succ_single₀", ["chain_complex"]], ["add", "def", "single₀", ["chain_complex"]], ["add", "def", "single₀_iso_single", ["chain_complex"]], ["add", "theorem", "single₀_map_f_0", ["chain_complex"]], ["add", "theorem", "single₀_map_f_succ", ["chain_complex"]], ["add", "theorem", "single₀_obj_X_0", ["chain_complex"]], ["add", "theorem", "single₀_obj_X_d", ["chain_complex"]], ["add", "theorem", "single₀_obj_X_d_from", ["chain_complex"]], ["add", "theorem", "single₀_obj_X_d_to", ["chain_complex"]], ["add", "theorem", "single₀_obj_X_succ", ["chain_complex"]], ["add", "def", "to_single₀_equiv", ["chain_complex"]], ["add", "def", "single", ["homological_complex"]], ["add", "theorem", "single_map_f_self", ["homological_complex"]], ["add", "def", "single_obj_X_self", ["homological_complex"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "def", "of_iso", ["category_theory", "full"]]]}]}, {"timestamp": 1620913479, "sha": "c5faeade", "message": "feat(category_theory/preadditive/functor_category): preadditive instance for C \\func D (#7533)", "changes": [{"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["mod", "theorem", "comp_gsmul", ["category_theory", "preadditive"]], ["add", "def", "comp_hom", ["category_theory", "preadditive"]], ["mod", "theorem", "comp_neg", ["category_theory", "preadditive"]], ["add", "theorem", "comp_nsmul", ["category_theory", "preadditive"]], ["mod", "theorem", "comp_sub", ["category_theory", "preadditive"]], ["mod", "theorem", "comp_sum", ["category_theory", "preadditive"]], ["mod", "theorem", "gsmul_comp", ["category_theory", "preadditive"]], ["mod", "theorem", "neg_comp", ["category_theory", "preadditive"]], ["mod", "theorem", "neg_comp_neg", ["category_theory", "preadditive"]], ["add", "theorem", "nsmul_comp", ["category_theory", "preadditive"]], ["mod", "theorem", "sub_comp", ["category_theory", "preadditive"]], ["mod", "theorem", "sum_comp", ["category_theory", "preadditive"]]]}, {"oldPath": null, "newPath": "src/category_theory/preadditive/functor_category.lean", "changes": [["add", "theorem", "app_add", ["category_theory", "nat_trans"]], ["add", "theorem", "app_gsmul", ["category_theory", "nat_trans"]], ["add", "def", "app_hom", ["category_theory", "nat_trans"]], ["add", "theorem", "app_neg", ["category_theory", "nat_trans"]], ["add", "theorem", "app_nsmul", ["category_theory", "nat_trans"]], ["add", "theorem", "app_sub", ["category_theory", "nat_trans"]], ["add", "theorem", "app_sum", ["category_theory", "nat_trans"]], ["add", "theorem", "app_zero", ["category_theory", "nat_trans"]]]}]}, {"timestamp": 1620837466, "sha": "43bd924d", "message": "feat(topology/category/Profinite): iso_equiv_homeo (#7529)\nFrom LTE", "changes": [{"oldPath": "src/topology/category/Profinite/default.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": [["mod", "def", "to_Profinite", ["Fintype"]], ["add", "def", "homeo_of_iso", ["Profinite"]], ["mod", "theorem", "is_closed_map", ["Profinite"]], ["mod", "theorem", "is_iso_of_bijective", ["Profinite"]], ["add", "def", "iso_equiv_homeo", ["Profinite"]], ["add", "def", "iso_of_homeo", ["Profinite"]]]}]}, {"timestamp": 1620832258, "sha": "08f44043", "message": "refactor(ring_theory/perfection): remove coercion in the definition of the type (#7583)\nDefining the type `ring.perfection R p` as a plain subtype (but inheriting the semiring or ring instances from a `subsemiring` structure) removes several coercions and helps Lean a lot when elaborating or unifying.", "changes": [{"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": [["mod", "def", "perfection", ["ring"]], ["add", "def", "perfection_subring", ["ring"]], ["add", "def", "perfection_subsemiring", ["ring"]]]}]}, {"timestamp": 1620813776, "sha": "6b62b9f7", "message": "refactor(algebra/module): rename `smul_injective hx` to `smul_left_injective M hx` (#7577)\nThis is a follow-up PR to #7548.\n * Now that there is also a `smul_right_injective`, we should disambiguate the previous `smul_injective` to `smul_left_injective`.\n * The `M` parameter can't be inferred from arguments before the colon, so we make it explicit in `smul_left_injective` and `smul_right_injective`.", "changes": [{"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "smul_injective", []], ["add", "theorem", "smul_left_injective", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1620785958, "sha": "6ee8f0e2", "message": "doc(tactic/interactive): link swap and rotate to each other (#7550)\nThey both do 'make a different goal the current one'.", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1620773951, "sha": "a7e1696f", "message": "fix(tactic/derive_fintype): use correct universes (#7581)\nReported on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/type.20class.20error.20with.20mk_fintype_instance/near/238209823).", "changes": [{"oldPath": "src/tactic/derive_fintype.lean", "newPath": "src/tactic/derive_fintype.lean", "changes": []}, {"oldPath": "test/derive_fintype.lean", "newPath": "test/derive_fintype.lean", "changes": []}]}, {"timestamp": 1620773950, "sha": "0538d2cc", "message": "chore(*): reducing imports (#7573)", "changes": [{"oldPath": "src/analysis/special_functions/bernstein.lean", "newPath": "src/analysis/special_functions/bernstein.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finsupp/antidiagonal.lean", "changes": [["add", "def", "Iic_finset", ["finsupp"]], ["add", "def", "antidiagonal", ["finsupp"]], ["add", "theorem", "antidiagonal_support_filter_fst_eq", ["finsupp"]], ["add", "theorem", "antidiagonal_support_filter_snd_eq", ["finsupp"]], ["add", "theorem", "antidiagonal_zero", ["finsupp"]], ["add", "theorem", "coe_Iic_finset", ["finsupp"]], ["add", "theorem", "finite_le_nat", ["finsupp"]], ["add", "theorem", "finite_lt_nat", ["finsupp"]], ["add", "theorem", "mem_Iic_finset", ["finsupp"]], ["add", "theorem", "mem_antidiagonal_support", ["finsupp"]], ["add", "theorem", "prod_antidiagonal_support_swap", ["finsupp"]], ["add", "theorem", "swap_mem_antidiagonal_support", ["finsupp"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "def", "Iic_finset", ["finsupp"]], ["del", "def", "antidiagonal", ["finsupp"]], ["del", "theorem", "antidiagonal_support_filter_fst_eq", ["finsupp"]], ["del", "theorem", "antidiagonal_support_filter_snd_eq", ["finsupp"]], ["del", "theorem", "antidiagonal_zero", ["finsupp"]], ["del", "theorem", "coe_Iic_finset", ["finsupp"]], ["del", "theorem", "finite_le_nat", ["finsupp"]], ["del", "theorem", "finite_lt_nat", ["finsupp"]], ["del", "theorem", "mem_Iic_finset", ["finsupp"]], ["del", "theorem", "mem_antidiagonal_support", ["finsupp"]], ["del", "theorem", "prod_antidiagonal_support_swap", ["finsupp"]], ["del", "theorem", "swap_mem_antidiagonal_support", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": []}, {"oldPath": "src/topology/continuous_function/weierstrass.lean", "newPath": "src/topology/continuous_function/weierstrass.lean", "changes": []}]}, {"timestamp": 1620756040, "sha": "9cf732c2", "message": "chore(logic/nontrivial): adjust priority of `nonempty` instances (#7563)\nThis makes `nontrivial.to_nonempty` and `nonempty_of_inhabited` higher priority so they are tried before things like `add_torsor.nonempty` which starts traversing the algebra heirarchy.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/char_zero/near/238103102)", "changes": [{"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}]}, {"timestamp": 1620756039, "sha": "3048d6bc", "message": "feat(ring_theory/localization): Define local ring hom on localization at prime ideal (#7522)\nDefines the induced ring homomorphism on the localizations at a prime ideal and proves that it is local and uniquely determined.", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "local_ring_hom_mk'", ["localization"]], ["add", "theorem", "local_ring_hom_to_map", ["localization"]], ["add", "theorem", "local_ring_hom_unique", ["localization"]], ["add", "theorem", "map_unique", ["localization_map"]]]}]}, {"timestamp": 1620745026, "sha": "b746e82c", "message": "feat(linear_algebra/finsupp): adjust apply lemma for `finsupp.dom_lcongr` (#7549)\nThis is a split-off dependency from #7496.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "dom_lcongr_apply", ["finsupp"]]]}]}, {"timestamp": 1620730616, "sha": "9191a670", "message": "perf(ci): skip linting and tests on master branch (#7576)\nDo not run lints and tests on the master branch. These checks have already passed on the staging branch, so there should be no need to repeat them on master.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1620718913, "sha": "b4c7654b", "message": "feat(algebra/homology): redesign of homological complexes (#7473)\nThis is a complete redesign of our library on homological complexes and homology.\nThis PR replaces the current definition of `chain_complex` which had proved cumbersome to work with.\nThe fundamental change is that chain complexes are now indexed by a type equipped with a `complex_shape`, rather than by a monoid. A `complex_shape ι` contains a relation `r`, with the intent that we will only allow a differential `X i ⟶ X j` when `r i j`. This allows, for example, complexes indexed either by `nat` or `int`, with differentials going either up or down.\nWe set up the initial theory without referring to \"successors\" and \"predecessors\" in the type `ι`, to ensure we can avoid dependent type theory hell issues involving arithmetic in the index of a chain group. We achieve this by having a chain complex consist of morphisms `d i j : X i ⟶ X j` for all `i j`, but with an additional axiom saying this map is zero unless `r i j`. This means we can easily talk about, e.g., morphisms from `X (i - 1 + 1)` to `X (i + 1)` when we need to.\nHowever after not too long we also set up `option` valued `next` and `prev` functions which make an arbitrary choice of such successors and predecessors if they exist. Using these, we define morphisms `d_to j`, which lands in `X j`, and has source either `X i` for some `r i j`, or the zero object if these isn't such an `i`. These morphisms are very convenient when working \"at the edge of a complex\", e.g. when indexing by `nat`.", "changes": [{"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": null, "changes": [["del", "def", "map_homological_complex", ["category_theory", "functor"]], ["del", "def", "pushforward_homological_complex", ["category_theory", "functor"]], ["del", "def", "chain_complex", []], ["del", "def", "cochain_complex", []], ["del", "theorem", "comm", ["homological_complex"]], ["del", "theorem", "comm_at", ["homological_complex"]], ["del", "theorem", "d_squared", ["homological_complex"]], ["del", "theorem", "eq_to_hom_d", ["homological_complex"]], ["del", "theorem", "eq_to_hom_f", ["homological_complex"]], ["del", "def", "forget", ["homological_complex"]], ["del", "def", "homological_complex", []]]}, {"oldPath": null, "newPath": "src/algebra/homology/complex_shape.lean", "changes": [["add", "def", "down'", ["complex_shape"]], ["add", "def", "down", ["complex_shape"]], ["add", "def", "next", ["complex_shape"]], ["add", "theorem", "next_eq_some", ["complex_shape"]], ["add", "def", "prev", ["complex_shape"]], ["add", "theorem", "prev_eq_some", ["complex_shape"]], ["add", "def", "refl", ["complex_shape"]], ["add", "def", "symm", ["complex_shape"]], ["add", "theorem", "symm_symm", ["complex_shape"]], ["add", "def", "trans", ["complex_shape"]], ["add", "def", "up'", ["complex_shape"]], ["add", "def", "up", ["complex_shape"]], ["add", "structure", "complex_shape", []]]}, {"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["add", "theorem", "comp_eq_zero_of_image_eq_kernel", ["category_theory"]], ["add", "theorem", "epi_iff_exact_zero_right", ["category_theory"]], ["del", "theorem", "exact_comp_hom_inv_comp", ["category_theory"]], ["add", "theorem", "exact_comp_iso", ["category_theory"]], ["add", "theorem", "exact_iso_comp", ["category_theory"]], ["del", "theorem", "exact_kernel", ["category_theory"]], ["add", "theorem", "exact_kernel_subobject_arrow", ["category_theory"]], ["add", "theorem", "exact_kernel_ι", ["category_theory"]], ["add", "theorem", "exact_of_image_eq_kernel", ["category_theory"]], ["del", "theorem", "exact_of_zero", ["category_theory"]], ["add", "theorem", "image_to_kernel_is_iso_of_image_eq_kernel", ["category_theory"]], ["add", "theorem", "kernel_subobject_arrow_eq_zero_of_exact_zero_left", ["category_theory"]], ["mod", "theorem", "kernel_ι_eq_zero_of_exact_zero_left", ["category_theory"]], ["add", "theorem", "mono_iff_exact_zero_left", ["category_theory"]], ["add", "theorem", "exact_iff_homology_zero", ["category_theory", "preadditive"]]]}, {"oldPath": null, "newPath": "src/algebra/homology/homological_complex.lean", "changes": [["add", "def", "mk'", ["chain_complex"]], ["add", "theorem", "mk'_X_0", ["chain_complex"]], ["add", "theorem", "mk'_X_1", ["chain_complex"]], ["add", "theorem", "mk'_d_1_0", ["chain_complex"]], ["add", "def", "mk", ["chain_complex"]], ["add", "theorem", "mk_X_0", ["chain_complex"]], ["add", "theorem", "mk_X_1", ["chain_complex"]], ["add", "theorem", "mk_X_2", ["chain_complex"]], ["add", "def", "mk_aux", ["chain_complex"]], ["add", "theorem", "mk_d_1_0", ["chain_complex"]], ["add", "theorem", "mk_d_2_0", ["chain_complex"]], ["add", "def", "mk_hom", ["chain_complex"]], ["add", "def", "mk_hom_aux", ["chain_complex"]], ["add", "theorem", "mk_hom_f_0", ["chain_complex"]], ["add", "theorem", "mk_hom_f_1", ["chain_complex"]], ["add", "theorem", "mk_hom_f_succ_succ", ["chain_complex"]], ["add", "def", "flat", ["chain_complex", "mk_struct"]], ["add", "structure", "mk_struct", ["chain_complex"]], ["add", "theorem", "next", ["chain_complex"]], ["add", "theorem", "next_nat_succ", ["chain_complex"]], ["add", "theorem", "next_nat_zero", ["chain_complex"]], ["add", "def", "of", ["chain_complex"]], ["add", "theorem", "of_X", ["chain_complex"]], ["add", "theorem", "of_d", ["chain_complex"]], ["add", "theorem", "prev", ["chain_complex"]], ["add", "def", "chain_complex", []], ["add", "theorem", "next", ["cochain_complex"]], ["add", "theorem", "prev", ["cochain_complex"]], ["add", "theorem", "prev_nat_succ", ["cochain_complex"]], ["add", "theorem", "prev_nat_zero", ["cochain_complex"]], ["add", "def", "cochain_complex", []], ["add", "def", "X_next", ["homological_complex"]], ["add", "def", "X_next_iso", ["homological_complex"]], ["add", "def", "X_next_iso_zero", ["homological_complex"]], ["add", "def", "X_prev", ["homological_complex"]], ["add", "def", "X_prev_iso", ["homological_complex"]], ["add", "theorem", "X_prev_iso_comp_d_to", ["homological_complex"]], ["add", "def", "X_prev_iso_zero", ["homological_complex"]], ["add", "theorem", "X_prev_iso_zero_comp_d_to", ["homological_complex"]], ["add", "def", "comp", ["homological_complex"]], ["add", "theorem", "comp_f", ["homological_complex"]], ["add", "theorem", "congr_hom", ["homological_complex"]], ["add", "theorem", "d_comp_eq_to_hom", ["homological_complex"]], ["add", "def", "d_from", ["homological_complex"]], ["add", "theorem", "d_from_comp_X_next_iso", ["homological_complex"]], ["add", "theorem", "d_from_comp_X_next_iso_zero", ["homological_complex"]], ["add", "theorem", "d_from_eq", ["homological_complex"]], ["add", "theorem", "d_from_eq_zero", ["homological_complex"]], ["add", "def", "d_to", ["homological_complex"]], ["add", "theorem", "d_to_comp_d_from", ["homological_complex"]], ["add", "theorem", "d_to_eq", ["homological_complex"]], ["add", "theorem", "d_to_eq_zero", ["homological_complex"]], ["add", "theorem", "eq_to_hom_comp_d", ["homological_complex"]], ["add", "def", "eval_at", ["homological_complex"]], ["add", "theorem", "comm_from", ["homological_complex", "hom"]], ["add", "theorem", "comm_to", ["homological_complex", "hom"]], ["add", "def", "next", ["homological_complex", "hom"]], ["add", "theorem", "next_eq", ["homological_complex", "hom"]], ["add", "def", "prev", ["homological_complex", "hom"]], ["add", "theorem", "prev_eq", ["homological_complex", "hom"]], ["add", "def", "sq_from", ["homological_complex", "hom"]], ["add", "theorem", "sq_from_comp", ["homological_complex", "hom"]], ["add", "theorem", "sq_from_id", ["homological_complex", "hom"]], ["add", "theorem", "sq_from_left", ["homological_complex", "hom"]], ["add", "theorem", "sq_from_right", ["homological_complex", "hom"]], ["add", "def", "sq_to", ["homological_complex", "hom"]], ["add", "theorem", "sq_to_left", ["homological_complex", "hom"]], ["add", "theorem", "sq_to_right", ["homological_complex", "hom"]], ["add", "structure", "hom", ["homological_complex"]], ["add", "theorem", "hom_f_injective", ["homological_complex"]], ["add", "def", "id", ["homological_complex"]], ["add", "theorem", "id_f", ["homological_complex"]], ["add", "theorem", "image_eq_image", ["homological_complex"]], ["add", "theorem", "image_to_eq_image", ["homological_complex"]], ["add", "theorem", "kernel_eq_kernel", ["homological_complex"]], ["add", "theorem", "kernel_from_eq_kernel", ["homological_complex"]], ["add", "theorem", "zero_apply", ["homological_complex"]], ["add", "structure", "homological_complex", []]]}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["add", "def", "boundaries_functor", []], ["add", "def", "boundaries_map", []], ["add", "def", "boundaries_to_cycles_nat_trans", []], ["add", "theorem", "boundaries_to_cycles_naturality", []], ["del", "def", "cohomology", ["cochain_complex"]], ["del", "def", "cohomology_group", ["cochain_complex"]], ["del", "def", "cohomology_map", ["cochain_complex"]], ["del", "def", "graded_cohomology", ["cochain_complex"]], ["add", "def", "cycles_functor", []], ["add", "def", "cycles_map", []], ["add", "theorem", "cycles_map_arrow", []], ["add", "theorem", "cycles_map_comp", []], ["add", "theorem", "cycles_map_id", []], ["add", "def", "graded_homology_functor", []], ["add", "def", "boundaries", ["homological_complex"]], ["add", "theorem", "boundaries_eq_bot", ["homological_complex"]], ["add", "theorem", "boundaries_eq_image_subobject", ["homological_complex"]], ["add", "def", "boundaries_iso_image", ["homological_complex"]], ["add", "theorem", "boundaries_le_cycles", ["homological_complex"]], ["add", "def", "boundaries_to_cycles", ["homological_complex"]], ["add", "theorem", "boundaries_to_cycles_arrow", ["homological_complex"]], ["add", "def", "cycles", ["homological_complex"]], ["add", "theorem", "cycles_arrow_d_from", ["homological_complex"]], ["add", "theorem", "cycles_eq_kernel_subobject", ["homological_complex"]], ["add", "theorem", "cycles_eq_top", ["homological_complex"]], ["add", "def", "cycles_iso_kernel", ["homological_complex"]], ["del", "def", "graded_homology", ["homological_complex"]], ["mod", "def", "homology", ["homological_complex"]], ["del", "def", "homology_group", ["homological_complex"]], ["del", "def", "homology_map", ["homological_complex"]], ["del", "theorem", "homology_map_comp", ["homological_complex"]], ["del", "theorem", "homology_map_condition", ["homological_complex"]], ["del", "theorem", "homology_map_id", ["homological_complex"]], ["del", "def", "image_map", ["homological_complex"]], ["del", "theorem", "image_map_ι", ["homological_complex"]], ["add", "theorem", "image_to_kernel_as_boundaries_to_cycles", ["homological_complex"]], ["del", "def", "image_to_kernel_map", ["homological_complex"]], ["del", "theorem", "image_to_kernel_map_comp_kernel_map", ["homological_complex"]], ["del", "theorem", "image_to_kernel_map_condition", ["homological_complex"]], ["del", "def", "kernel_functor", ["homological_complex"]], ["del", "def", "kernel_map", ["homological_complex"]], ["del", "theorem", "kernel_map_comp", ["homological_complex"]], ["del", "theorem", "kernel_map_condition", ["homological_complex"]], ["del", "theorem", "kernel_map_id", ["homological_complex"]], ["add", "def", "homology_functor", []]]}, {"oldPath": null, "newPath": "src/algebra/homology/image_to_kernel.lean", "changes": [["add", "theorem", "factor_thru_image_subobject_comp_image_to_kernel", []], ["add", "theorem", "condition", ["homology"]], ["add", "def", "congr", ["homology"]], ["add", "def", "desc", ["homology"]], ["add", "theorem", "ext", ["homology"]], ["add", "def", "map", ["homology"]], ["add", "theorem", "map_desc", ["homology"]], ["add", "def", "π", ["homology"]], ["add", "theorem", "π_desc", ["homology"]], ["add", "theorem", "π_map", ["homology"]], ["add", "def", "homology", []], ["add", "def", "homology_zero_zero", []], ["add", "theorem", "image_le_kernel", []], ["add", "theorem", "image_subobject_map_comp_image_to_kernel", []], ["add", "def", "image_to_kernel", []], ["add", "theorem", "image_to_kernel_arrow", []], ["add", "theorem", "image_to_kernel_comp_hom_inv_comp", []], ["add", "theorem", "image_to_kernel_comp_left", []], ["add", "theorem", "image_to_kernel_comp_mono", []], ["add", "theorem", "image_to_kernel_comp_right", []], ["add", "theorem", "image_to_kernel_epi_comp", []], ["add", "theorem", "image_to_kernel_zero_left", []], ["add", "theorem", "image_to_kernel_zero_right", []], ["add", "theorem", "subobject_of_le_as_image_to_kernel", []]]}, {"oldPath": "src/algebra/homology/image_to_kernel_map.lean", "newPath": null, "changes": [["del", "def", "image_to_kernel_map", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_comp_hom_inv_comp", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_comp_iso", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_comp_left", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_comp_right", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_epi_of_epi_of_zero", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_epi_of_zero_of_mono", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_iso_comp", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_zero_left", ["category_theory"]], ["del", "theorem", "image_to_kernel_map_zero_right", ["category_theory"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["del", "theorem", "epi_iff_exact_zero_right", ["category_theory", "abelian"]], ["add", "theorem", "exact_iff''", ["category_theory", "abelian"]], ["add", "theorem", "exact_tfae", ["category_theory", "abelian"]], ["del", "theorem", "mono_iff_exact_zero_left", ["category_theory", "abelian"]]]}]}, {"timestamp": 1620718912, "sha": "12c9ddf1", "message": "feat(set_theory/{pgame, surreal}): add `left_distrib_equiv` and `right_distrib_equiv` for pgames (#7440)\nand several other auxiliary lemmas.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Surreal.20numbers)", "changes": [{"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": [["mod", "theorem", "le_refl", ["game"]], ["mod", "theorem", "le_trans", ["game"]], ["add", "theorem", "quot_add", ["game"]], ["add", "theorem", "quot_neg", ["game"]], ["add", "theorem", "quot_sub", ["game"]], ["mod", "def", "game", []]]}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["add", "theorem", "add_right_neg_equiv", ["pgame"]], ["add", "theorem", "equiv_of_mk_equiv", ["pgame"]], ["add", "theorem", "sub_congr", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": [["del", "def", "add_comm_sub_relabelling", ["pgame"]], ["del", "def", "add_sub_relabelling", ["pgame"]], ["add", "theorem", "left_distrib_equiv", ["pgame"]], ["add", "theorem", "left_distrib_equiv_aux'", ["pgame"]], ["add", "theorem", "left_distrib_equiv_aux", ["pgame"]], ["mod", "theorem", "mul_comm_equiv", ["pgame"]], ["mod", "theorem", "mul_zero_equiv", ["pgame"]], ["add", "theorem", "right_distrib_equiv", ["pgame"]], ["mod", "theorem", "zero_mul_equiv", ["pgame"]]]}]}, {"timestamp": 1620712539, "sha": "ca4024b3", "message": "feat(algebraic_topology/cech_nerve): Adds a definition of the Cech nerve associated to an arrow. (#7547)\nAlso adds a definition of augmented simplicial objects as a comma category.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/cech_nerve.lean", "changes": [["add", "def", "augmented_cech_nerve", ["category_theory", "arrow"]], ["add", "def", "cech_nerve", ["category_theory", "arrow"]], ["add", "def", "augmented_cech_nerve", ["simplicial_object"]], ["add", "def", "cech_nerve", ["simplicial_object"]]]}, {"oldPath": "src/algebraic_topology/simplicial_object.lean", "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "augmented", ["category_theory", "simplicial_object"]], ["add", "def", "const", ["category_theory", "simplicial_object"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}]}, {"timestamp": 1620707977, "sha": "8dc848c5", "message": "feat(ring_theory/finiteness): add finite_type_iff_group_fg (#7569)\nWe add here a simple modification of `monoid_algebra.fg_of_finite_type`: a group algebra is of finite type if and only if the group is finitely generated (as group opposed to as monoid).", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "finite_type_iff_group_fg", ["add_monoid_algebra"]], ["add", "theorem", "finite_type_iff_group_fg", ["monoid_algebra"]]]}]}, {"timestamp": 1620697783, "sha": "fab41978", "message": "chore(scripts): update nolints.txt (#7570)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1620686744, "sha": "3fd7cc36", "message": "feat(ring_theory/hahn_series): extend the domain of a Hahn series by an `order_embedding` (#7551)\nDefines `hahn_series.emb_domain`, which extends the domain of a Hahn series by embedding it into a larger domain in an order-preserving way.\nBundles `hahn_series.emb_domain` with additional properties as `emb_domain_linear_map`, `emb_domain_ring_hom`, and `emb_domain_alg_hom` under additional conditions.\nDefines the ring homomorphism `hahn_series.of_power_series` and the algebra homomorphism `hahn_series.of_power_series_alg`, which map power series to Hahn series over an ordered semiring using `hahn_series.emb_domain` with `nat.cast` as the embedding.", "changes": [{"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "def", "emb_domain", ["hahn_series"]], ["add", "def", "emb_domain_alg_hom", ["hahn_series"]], ["add", "theorem", "emb_domain_coeff", ["hahn_series"]], ["add", "theorem", "emb_domain_injective", ["hahn_series"]], ["add", "def", "emb_domain_linear_map", ["hahn_series"]], ["add", "theorem", "emb_domain_mk_coeff", ["hahn_series"]], ["add", "theorem", "emb_domain_notin_image_support", ["hahn_series"]], ["add", "theorem", "emb_domain_notin_range", ["hahn_series"]], ["add", "def", "emb_domain_ring_hom", ["hahn_series"]], ["add", "theorem", "emb_domain_ring_hom_C", ["hahn_series"]], ["add", "theorem", "emb_domain_single", ["hahn_series"]], ["add", "theorem", "emb_domain_zero", ["hahn_series"]], ["add", "def", "of_power_series", ["hahn_series"]], ["add", "def", "of_power_series_alg", ["hahn_series"]], ["add", "theorem", "support_emb_domain_subset", ["hahn_series"]]]}]}, {"timestamp": 1620686743, "sha": "81c98d5b", "message": "feat(ring_theory/hahn_series): Hahn series form a field (#7495)\nUses Higman's Lemma to define `summable_family.powers`, a summable family consisting of the powers of a Hahn series of positive valuation\nUses `summable_family.powers` to define inversion on Hahn series over a field and linear-ordered value group, making the type of Hahn series a field.\nShows that a Hahn series over an integral domain and linear-ordered value group `is_unit` if and only if its lowest coefficient is.", "changes": [{"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "submonoid_closure", ["set", "is_pwo"]], ["del", "theorem", "image_of_monotone", ["set", "partially_well_ordered_on"]], ["add", "theorem", "image_of_monotone_on", ["set", "partially_well_ordered_on"]], ["add", "theorem", "induction", ["set", "well_founded_on"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "is_pwo_Union_support_powers", ["hahn_series"]], ["add", "theorem", "is_unit_iff", ["hahn_series"]], ["add", "theorem", "coe_powers", ["hahn_series", "summable_family"]], ["add", "theorem", "emb_domain_succ_smul_powers", ["hahn_series", "summable_family"]], ["add", "theorem", "one_sub_self_mul_hsum_powers", ["hahn_series", "summable_family"]], ["add", "def", "powers", ["hahn_series", "summable_family"]], ["add", "theorem", "unit_aux", ["hahn_series"]]]}]}, {"timestamp": 1620686742, "sha": "1cbb31de", "message": "feat(analysis/normed_space/normed_group_hom): add lemmas (#7474)\nFrom LTE.\nWritten by @PatrickMassot \n- [x] depends on: #7459", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "comp_range", ["normed_group_hom"]], ["add", "theorem", "incl_range", ["normed_group_hom"]], ["add", "theorem", "norm_incl", ["normed_group_hom"]], ["add", "theorem", "range_comp_incl_top", ["normed_group_hom"]]]}]}, {"timestamp": 1620665064, "sha": "b7ab74ab", "message": "feat(algebra/lie/weights): add lemma `root_space_comap_eq_weight_space` (#7565)", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "coe_incl'", ["lie_subalgebra"]], ["add", "theorem", "coe_incl", ["lie_subalgebra"]], ["add", "def", "incl'", ["lie_subalgebra"]], ["mod", "def", "incl", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "mem_comap", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/weights.lean", "newPath": "src/algebra/lie/weights.lean", "changes": [["add", "theorem", "root_space_comap_eq_weight_space", ["lie_algebra"]], ["mod", "theorem", "coe_weight_space_of_top", ["lie_module"]]]}]}, {"timestamp": 1620665063, "sha": "ac1f3df4", "message": "chore(*): remove unnecessary `import tactic` (#7560)", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "src/category_theory/limits/kan_extension.lean", "newPath": "src/category_theory/limits/kan_extension.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/set/constructions.lean", "newPath": "src/data/set/constructions.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1620665062, "sha": "17cba543", "message": "feat(data/int/basic): sign raised to an odd power (#7559)\nSince sign is either -1, 0, or 1, it is unchanged when raised to an odd power.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "sign_pow_bit1", ["int"]]]}]}, {"timestamp": 1620665061, "sha": "3417ee07", "message": "chore(deprecated/group): relax monoid to mul_one_class (#7556)\nThis fixes an annoyance where `monoid_hom.is_monoid_hom` didn't work on non-associative monoids.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": [["mod", "theorem", "is_add_monoid_hom", ["additive"]], ["mod", "theorem", "comp", ["is_monoid_hom"]], ["mod", "theorem", "of_mul", ["is_monoid_hom"]], ["mod", "theorem", "is_monoid_hom", ["multiplicative"]]]}]}, {"timestamp": 1620665060, "sha": "477af65c", "message": "feat(category_theory/limits/shapes/wide_pullbacks): Adds some wrappers around the (co)limit api for wide pullbacks/pushouts (#7546)\nThis PR adds some wrappers (mostly abbreviations) around the (co)limit api specifically for wide pullbacks and wide pushouts.", "changes": [{"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["add", "def", "has_wide_pullback", ["category_theory", "limits"]], ["add", "def", "has_wide_pushout", ["category_theory", "limits"]], ["add", "def", "base", ["category_theory", "limits", "wide_pullback"]], ["add", "theorem", "eq_lift_of_comp_eq", ["category_theory", "limits", "wide_pullback"]], ["add", "theorem", "hom_eq_lift", ["category_theory", "limits", "wide_pullback"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "wide_pullback"]], ["add", "def", "lift", ["category_theory", "limits", "wide_pullback"]], ["add", "theorem", "lift_base", ["category_theory", "limits", "wide_pullback"]], ["add", "theorem", "lift_π", ["category_theory", "limits", "wide_pullback"]], ["add", "def", "π", ["category_theory", "limits", "wide_pullback"]], ["add", "theorem", "π_arrow", ["category_theory", "limits", "wide_pullback"]], ["add", "def", "wide_pullback", ["category_theory", "limits"]], ["add", "theorem", "arrow_ι", ["category_theory", "limits", "wide_pushout"]], ["add", "def", "desc", ["category_theory", "limits", "wide_pushout"]], ["add", "theorem", "eq_desc_of_comp_eq", ["category_theory", "limits", "wide_pushout"]], ["add", "def", "head", ["category_theory", "limits", "wide_pushout"]], ["add", "theorem", "head_desc", ["category_theory", "limits", "wide_pushout"]], ["add", "theorem", "hom_eq_desc", ["category_theory", "limits", "wide_pushout"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "wide_pushout"]], ["add", "def", "ι", ["category_theory", "limits", "wide_pushout"]], ["add", "theorem", "ι_desc", ["category_theory", "limits", "wide_pushout"]], ["add", "def", "wide_pushout", ["category_theory", "limits"]]]}]}, {"timestamp": 1620665059, "sha": "92395fdf", "message": "feat(data/list/rotate): is_rotated (#7299)\n`is_rotated l₁ l₂` or `l₁ ~r l₂` asserts that `l₁` and `l₂` are cyclic permutations\n of each other. This is defined by claiming that `∃ n, l.rotate n = l'`.", "changes": [{"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["add", "theorem", "eqv", ["list", "is_rotated"]], ["add", "theorem", "mem_iff", ["list", "is_rotated"]], ["add", "theorem", "nodup_iff", ["list", "is_rotated"]], ["add", "theorem", "perm", ["list", "is_rotated"]], ["add", "theorem", "refl", ["list", "is_rotated"]], ["add", "theorem", "reverse", ["list", "is_rotated"]], ["add", "def", "setoid", ["list", "is_rotated"]], ["add", "theorem", "symm", ["list", "is_rotated"]], ["add", "theorem", "trans", ["list", "is_rotated"]], ["add", "def", "is_rotated", ["list"]], ["add", "theorem", "is_rotated_comm", ["list"]], ["add", "theorem", "is_rotated_concat", ["list"]], ["add", "theorem", "is_rotated_iff_mem_map_range", ["list"]], ["add", "theorem", "is_rotated_iff_mod", ["list"]], ["add", "theorem", "is_rotated_nil_iff'", ["list"]], ["add", "theorem", "is_rotated_nil_iff", ["list"]], ["add", "theorem", "is_rotated_reverse_comm_iff", ["list"]], ["add", "theorem", "is_rotated_reverse_iff", ["list"]], ["add", "theorem", "nodup_rotate", ["list"]], ["add", "theorem", "nth_le_rotate", ["list"]], ["add", "theorem", "nth_le_rotate_one", ["list"]], ["add", "theorem", "reverse_rotate", ["list"]], ["add", "theorem", "rotate'_eq_drop_append_take", ["list"]], ["del", "theorem", "rotate'_eq_take_append_drop", ["list"]], ["add", "theorem", "rotate_eq_drop_append_take", ["list"]], ["add", "theorem", "rotate_eq_drop_append_take_mod", ["list"]], ["add", "theorem", "rotate_eq_iff", ["list"]], ["add", "theorem", "rotate_eq_nil_iff", ["list"]], ["add", "theorem", "rotate_eq_rotate", ["list"]], ["del", "theorem", "rotate_eq_take_append_drop", ["list"]], ["add", "theorem", "rotate_injective", ["list"]], ["add", "theorem", "rotate_perm", ["list"]], ["add", "theorem", "rotate_singleton", ["list"]], ["add", "theorem", "zip_with_rotate_distrib", ["list"]], ["add", "theorem", "zip_with_rotate_one", ["list"]]]}]}, {"timestamp": 1620652531, "sha": "41c7b1e3", "message": "chore(category_theory/Fintype): remove redundant lemmas (#7531)\nThese lemmas exist for arbitrary concrete categories.\n- [x] depends on: #7530", "changes": [{"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": [["del", "theorem", "coe_comp", ["Fintype"]], ["del", "theorem", "coe_id", ["Fintype"]], ["del", "theorem", "comp_apply", ["Fintype"]], ["del", "theorem", "id_apply", ["Fintype"]]]}]}, {"timestamp": 1620652530, "sha": "b9f4420c", "message": "feat(geometry/euclidean/triangle): add Stewart's Theorem + one similarity lemma (#7327)", "changes": [{"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": [["add", "theorem", "dist_mul_of_eq_angle_of_dist_mul", ["euclidean_geometry"]], ["add", "theorem", "dist_sq_add_dist_sq_eq_two_mul_dist_midpoint_sq_add_half_dist_sq", ["euclidean_geometry"]], ["add", "theorem", "dist_sq_mul_dist_add_dist_sq_mul_dist", ["euclidean_geometry"]]]}]}, {"timestamp": 1620652528, "sha": "03b88c14", "message": "feat(algebra/category/Module): Free R C, the free R-linear completion of a category (#7177)\nThe free R-linear completion of a category.", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": [["add", "def", "embedding", ["category_theory", "Free"]], ["add", "def", "embedding_lift_iso", ["category_theory", "Free"]], ["add", "def", "ext", ["category_theory", "Free"]], ["add", "def", "lift", ["category_theory", "Free"]], ["add", "theorem", "lift_map_single", ["category_theory", "Free"]], ["add", "def", "lift_unique", ["category_theory", "Free"]], ["add", "def", "of", ["category_theory", "Free"]], ["add", "theorem", "single_comp_single", ["category_theory", "Free"]], ["add", "def", "Free", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["add", "theorem", "map_gsmul", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "theorem", "comp_gsmul", ["category_theory", "preadditive"]], ["add", "theorem", "gsmul_comp", ["category_theory", "preadditive"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1620632177, "sha": "48104c3a", "message": "feat(data/set/lattice): (b)Union and (b)Inter lemmas (#7557)\nfrom LTE", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_prop", ["set"]], ["add", "theorem", "Union_prop_neg", ["set"]], ["add", "theorem", "Union_prop_pos", ["set"]], ["add", "theorem", "bInter_inter", ["set"]], ["add", "theorem", "inter_bInter", ["set"]], ["add", "theorem", "mem_bUnion_iff'", ["set"]]]}]}, {"timestamp": 1620632176, "sha": "b5776971", "message": "feat(data/matrix/basic): add missing smul instances, generalize lemmas to work on scalar towers (#7544)\nThis also fixes the `add_monoid_hom.map_zero` etc lemmas to not require overly strong typeclasses on `α`\nThis removes the `matrix.smul_apply` lemma since `pi.smul_apply` and `smul_eq_mul` together replace it.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "map_matrix", ["add_monoid_hom"]], ["mod", "theorem", "map_matrix_apply", ["add_monoid_hom"]], ["mod", "theorem", "add_equiv_map_zero", ["matrix"]], ["mod", "theorem", "add_monoid_hom_map_zero", ["matrix"]], ["mod", "theorem", "diagonal_map", ["matrix"]], ["mod", "theorem", "dot_product_smul", ["matrix"]], ["mod", "theorem", "linear_equiv_map_zero", ["matrix"]], ["mod", "theorem", "linear_map_map_zero", ["matrix"]], ["mod", "def", "map", ["matrix"]], ["mod", "theorem", "map_add", ["matrix"]], ["mod", "theorem", "map_apply", ["matrix"]], ["mod", "theorem", "map_mul", ["matrix"]], ["mod", "theorem", "map_sub", ["matrix"]], ["mod", "theorem", "map_zero", ["matrix"]], ["mod", "theorem", "mul_smul", ["matrix"]], ["mod", "theorem", "one_map", ["matrix"]], ["mod", "theorem", "ring_equiv_map_one", ["matrix"]], ["mod", "theorem", "ring_equiv_map_zero", ["matrix"]], ["mod", "theorem", "ring_hom_map_one", ["matrix"]], ["mod", "theorem", "ring_hom_map_zero", ["matrix"]], ["del", "theorem", "smul_apply", ["matrix"]], ["mod", "theorem", "smul_dot_product", ["matrix"]], ["mod", "theorem", "smul_mul", ["matrix"]], ["mod", "theorem", "star_apply", ["matrix"]], ["mod", "theorem", "star_mul", ["matrix"]], ["mod", "theorem", "transpose_map", ["matrix"]], ["mod", "theorem", "zero_hom_map_zero", ["matrix"]], ["mod", "def", "map_matrix", ["ring_hom"]], ["del", "theorem", "map_matrix_apply", ["ring_hom"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1620632175, "sha": "38bf2abd", "message": "feat(field_theory/abel_ruffini): Version of solvable_by_rad.is_solvable (#7509)\nThis is a version of `solvable_by_rad.is_solvable`, which will be the final step of the abel-ruffini theorem.", "changes": [{"oldPath": "src/field_theory/abel_ruffini.lean", "newPath": "src/field_theory/abel_ruffini.lean", "changes": [["add", "theorem", "is_solvable'", ["solvable_by_rad"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "unique''", ["minpoly"]]]}]}, {"timestamp": 1620632174, "sha": "ef90a7ab", "message": "refactor(*): bundle `is_basis` (#7496)\nThis PR replaces the definition of a basis used in mathlib and fixes the usages throughout.\nRationale: Previously, `is_basis` was a predicate on a family of vectors, saying this family is linear independent and spans the whole space. We encountered many small annoyances when working with these unbundled definitions, for example complicated `is_basis` arguments being hidden in the goal view or slow elaboration when mapping a basis to a slightly different set of basis vectors. The idea to turn `basis` into a bundled structure originated in the discussion on #4949. @digama0 suggested on Zulip to identify these \"bundled bases\" with their map `repr : M ≃ₗ[R] (ι →₀ R)` that sends a vector to its coordinates. (In fact, that specific map used to be only a `linear_map` rather than an equiv.)\nOverview of the changes:\n - The `is_basis` predicate has been replaced with the `basis` structure. \n - Parameters of the form `{b : ι → M} (hb : is_basis R b)` become a single parameter `(b : basis ι R M)`.\n - Constructing a basis from a linear independent family spanning the whole space is now spelled `basis.mk hli hspan`, instead of `and.intro hli hspan`.\n - You can also use `basis.of_repr` to construct a basis from an equivalence `e : M ≃ₗ[R] (ι →₀ R)`. If `ι` is a `fintype`, you can use `basis.of_equiv_fun (e : M ≃ₗ[R] (ι → R))` instead, saving you from having to work with `finsupp`s.\n - Most declaration names that used to contain `is_basis` are now spelled with `basis`, e.g. `pi.is_basis_fun` is now `pi.basis_fun`.\n - Theorems of the form `exists_is_basis K V : ∃ (s : set V) (b : s -> V), is_basis K b` and `finite_dimensional.exists_is_basis_finset K V : [finite_dimensional K V] -> ∃ (s : finset V) (b : s -> V), is_basis K b` have been replaced with (noncomputable) defs such as `basis.of_vector_space K V : basis (basis.of_vector_space_index K V) K V` and `finite_dimensional.finset_basis : basis (finite_dimensional.finset_basis_index K V) K V`; the indexing sets being a separate definition means we can declare a `fintype (basis.of_vector_space_index K V)` instance on finite dimensional spaces, rather than having to use `cases exists_is_basis_fintype K V with ...` each time.\n - Definitions of a `basis` are now, wherever practical, accompanied by `simp` lemmas giving the values of `coe_fn` and `repr` for that basis.\n - Some auxiliary results like `pi.is_basis_fun₀` have been removed since they are no longer needed.\nBasic API overview:\n* `basis ι R M` is the type of `ι`-indexed `R`-bases for a module `M`, represented by a linear equiv `M ≃ₗ[R] ι →₀ R`.\n* the basis vectors of a basis `b` are given by `b i` for `i : ι`\n* `basis.repr` is the isomorphism sending `x : M` to its coordinates `basis.repr b x : ι →₀ R`. The inverse of `b.repr` is `finsupp.total _ _ _ b`. The converse, turning this isomorphism into a basis, is called `basis.of_repr`.\n* If `ι` is finite, there is a variant of `repr` called `basis.equiv_fun b : M ≃ₗ[R] ι → R`. The converse, turning this isomorphism into a basis, is called `basis.of_equiv_fun`.\n* `basis.constr hv f` constructs a linear map `M₁ →ₗ[R] M₂` given the values `f : ι → M₂` at the\n basis elements `⇑b : ι → M₁`.\n* `basis.mk`: a linear independent set of vectors spanning the whole module determines a basis (the converse consists of `basis.linear_independent` and `basis.span_eq`\n* `basis.ext` states that two linear maps are equal if they coincide on a basis; similar results are available for linear equivs (if they coincide on the basis vectors), elements (if their coordinates coincide) and the functions `b.repr` and `⇑b`.\n* `basis.of_vector_space` states that every vector space has a basis.\n* `basis.reindex` uses an equiv to map a basis to a different indexing set, `basis.map` uses a linear equiv to map a basis to a different module\nZulip discussions:\n * https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Bundled.20basis\n * https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.234949", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "smul_right_injective", []]]}, {"oldPath": "src/algebra/module/projective.lean", "newPath": "src/algebra/module/projective.lean", "changes": [["mod", "theorem", "of_free", ["is_projective"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "coe_constrL", ["basis"]], ["add", "def", "constrL", ["basis"]], ["add", "theorem", "constrL_apply", ["basis"]], ["add", "theorem", "constrL_basis", ["basis"]], ["add", "def", "equiv_funL", ["basis"]], ["add", "theorem", "op_norm_le", ["basis"]], ["add", "theorem", "sup_norm_le_norm", ["basis"]], ["mod", "theorem", "continuous_equiv_fun_basis", []], ["del", "theorem", "coe_constrL", ["is_basis"]], ["del", "def", "constrL", ["is_basis"]], ["del", "theorem", "constrL_apply", ["is_basis"]], ["del", "theorem", "constrL_basis", ["is_basis"]], ["del", "def", "equiv_funL", ["is_basis"]], ["del", "theorem", "op_norm_le", ["is_basis"]], ["del", "theorem", "sup_norm_le_norm", ["is_basis"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "def", "isometry_euclidean_of_orthonormal", ["basis"]], ["add", "def", "basis_of_orthonormal_of_card_eq_finrank", []], ["add", "theorem", "coe_basis_of_orthonormal_of_card_eq_finrank", []], ["add", "theorem", "coe_orthonormal_basis", []], ["del", "theorem", "exists_is_orthonormal_basis'", []], ["del", "theorem", "exists_is_orthonormal_basis", []], ["add", "def", "fin_orthonormal_basis", []], ["add", "theorem", "fin_orthonormal_basis_orthonormal", []], ["del", "def", "isometry_euclidean_of_orthonormal", ["is_basis"]], ["del", "theorem", "is_basis_of_orthonormal_of_card_eq_finrank", []], ["add", "theorem", "maximal_orthonormal_iff_basis_of_finite_dimensional", []], ["del", "theorem", "maximal_orthonormal_iff_is_basis_of_finite_dimensional", []], ["add", "def", "orthonormal_basis", []], ["add", "def", "orthonormal_basis_index", []], ["add", "theorem", "orthonormal_basis_orthonormal", []]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "def", "basis_one_I", ["complex"]], ["add", "theorem", "coe_basis_one_I", ["complex"]], ["add", "theorem", "coe_basis_one_I_repr", ["complex"]], ["del", "theorem", "is_basis_one_I", ["complex"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["del", "theorem", "power_basis_is_basis", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "apply_eq_iff", ["basis"]], ["add", "theorem", "basis_singleton_iff", ["basis"]], ["add", "theorem", "coe_extend", ["basis"]], ["add", "theorem", "coe_mk", ["basis"]], ["add", "theorem", "coe_of_equiv_fun", ["basis"]], ["add", "theorem", "coe_of_repr", ["basis"]], ["add", "theorem", "coe_of_vector_space", ["basis"]], ["add", "theorem", "coe_reindex", ["basis"]], ["add", "theorem", "coe_reindex_repr", ["basis"]], ["add", "theorem", "coe_repr_symm", ["basis"]], ["add", "def", "constr", ["basis"]], ["add", "theorem", "constr_apply", ["basis"]], ["add", "theorem", "constr_apply_fintype", ["basis"]], ["add", "theorem", "constr_basis", ["basis"]], ["add", "theorem", "constr_def", ["basis"]], ["add", "theorem", "constr_eq", ["basis"]], ["add", "theorem", "constr_range", ["basis"]], ["add", "theorem", "constr_self", ["basis"]], ["add", "def", "coord", ["basis"]], ["add", "theorem", "empty_unique", ["basis"]], ["add", "theorem", "eq_of_apply_eq", ["basis"]], ["add", "theorem", "eq_of_repr_eq_repr", ["basis"]], ["add", "def", "equiv'", ["basis"]], ["add", "theorem", "equiv'_apply", ["basis"]], ["add", "theorem", "equiv'_symm_apply", ["basis"]], ["add", "theorem", "equiv_apply", ["basis"]], ["add", "def", "equiv_fun", ["basis"]], ["add", "theorem", "equiv_fun_apply", ["basis"]], ["add", "theorem", "equiv_fun_self", ["basis"]], ["add", "theorem", "equiv_fun_symm_apply", ["basis"]], ["add", "theorem", "equiv_refl", ["basis"]], ["add", "theorem", "equiv_symm", ["basis"]], ["add", "theorem", "equiv_trans", ["basis"]], ["add", "theorem", "exists_basis", ["basis"]], ["add", "theorem", "ext'", ["basis"]], ["add", "theorem", "ext", ["basis"]], ["add", "theorem", "ext_elem", ["basis"]], ["add", "theorem", "extend_apply_self", ["basis"]], ["add", "theorem", "single_apply_left", ["basis", "finsupp"]], ["add", "theorem", "forall_coord_eq_zero_iff", ["basis"]], ["add", "theorem", "map_apply", ["basis"]], ["add", "theorem", "mk_apply", ["basis"]], ["add", "theorem", "mk_repr", ["basis"]], ["add", "def", "of_equiv_fun", ["basis"]], ["add", "theorem", "of_equiv_fun_repr_apply", ["basis"]], ["add", "theorem", "of_vector_space_apply_self", ["basis"]], ["add", "theorem", "linear_independent", ["basis", "of_vector_space_index"]], ["add", "theorem", "prod_apply", ["basis"]], ["add", "theorem", "prod_apply_inl_fst", ["basis"]], ["add", "theorem", "prod_apply_inl_snd", ["basis"]], ["add", "theorem", "prod_apply_inr_fst", ["basis"]], ["add", "theorem", "prod_apply_inr_snd", ["basis"]], ["add", "theorem", "prod_repr_inl", ["basis"]], ["add", "theorem", "prod_repr_inr", ["basis"]], ["add", "theorem", "range_extend", ["basis"]], ["add", "theorem", "range_of_vector_space", ["basis"]], ["add", "theorem", "range_reindex'", ["basis"]], ["add", "theorem", "range_reindex", ["basis"]], ["add", "def", "reindex", ["basis"]], ["add", "theorem", "reindex_apply", ["basis"]], ["add", "def", "reindex_range", ["basis"]], ["add", "theorem", "reindex_range_apply", ["basis"]], ["add", "theorem", "reindex_range_repr'", ["basis"]], ["add", "theorem", "reindex_range_repr", ["basis"]], ["add", "theorem", "reindex_range_repr_self", ["basis"]], ["add", "theorem", "reindex_range_self", ["basis"]], ["add", "theorem", "reindex_repr", ["basis"]], ["add", "theorem", "repr_apply_eq", ["basis"]], ["add", "theorem", "repr_eq_iff'", ["basis"]], ["add", "theorem", "repr_eq_iff", ["basis"]], ["add", "theorem", "repr_range", ["basis"]], ["add", "theorem", "repr_self", ["basis"]], ["add", "theorem", "repr_self_apply", ["basis"]], ["add", "theorem", "repr_symm_apply", ["basis"]], ["add", "theorem", "repr_symm_single", ["basis"]], ["add", "theorem", "repr_symm_single_one", ["basis"]], ["add", "theorem", "repr_total", ["basis"]], ["add", "theorem", "singleton_apply", ["basis"]], ["add", "theorem", "singleton_repr", ["basis"]], ["add", "theorem", "subset_extend", ["basis"]], ["add", "theorem", "sum_equiv_fun", ["basis"]], ["add", "theorem", "sum_repr", ["basis"]], ["add", "theorem", "total_repr", ["basis"]], ["add", "structure", "basis", []], ["del", "theorem", "constr_add", []], ["del", "theorem", "constr_basis", []], ["del", "theorem", "constr_eq", []], ["del", "theorem", "constr_neg", []], ["del", "theorem", "constr_range", []], ["del", "theorem", "constr_self", []], ["del", "theorem", "constr_smul", []], ["del", "theorem", "constr_sub", []], ["del", "theorem", "constr_zero", []], ["del", "theorem", "exists_is_basis", []], ["del", "theorem", "exists_subset_is_basis", []], ["del", "theorem", "exists_sum_is_basis", []], ["del", "theorem", "comp", ["is_basis"]], ["del", "def", "constr", ["is_basis"]], ["del", "theorem", "constr_apply", ["is_basis"]], ["del", "theorem", "constr_apply_fintype", ["is_basis"]], ["del", "def", "equiv_fun", ["is_basis"]], ["del", "theorem", "equiv_fun_apply", ["is_basis"]], ["del", "theorem", "equiv_fun_self", ["is_basis"]], ["del", "theorem", "equiv_fun_symm_apply", ["is_basis"]], ["del", "theorem", "equiv_fun_total", ["is_basis"]], ["del", "theorem", "ext", ["is_basis"]], ["del", "theorem", "ext_elem", ["is_basis"]], ["del", "theorem", "injective", ["is_basis"]], ["del", "theorem", "mem_span", ["is_basis"]], ["del", "theorem", "no_zero_smul_divisors", ["is_basis"]], ["del", "theorem", "range", ["is_basis"]], ["del", "theorem", "range_repr", ["is_basis"]], ["del", "theorem", "range_repr_self", ["is_basis"]], ["del", "def", "repr", ["is_basis"]], ["del", "theorem", "repr_apply_eq", ["is_basis"]], ["del", "theorem", "repr_eq_iff", ["is_basis"]], ["del", "theorem", "repr_eq_single", ["is_basis"]], ["del", "theorem", "repr_eq_zero", ["is_basis"]], ["del", "theorem", "repr_ker", ["is_basis"]], ["del", "theorem", "repr_range", ["is_basis"]], ["del", "theorem", "repr_self_apply", ["is_basis"]], ["del", "theorem", "repr_total", ["is_basis"]], ["del", "theorem", "smul_eq_zero", ["is_basis"]], ["del", "theorem", "total_comp_repr", ["is_basis"]], ["del", "theorem", "total_repr", ["is_basis"]], ["del", "def", "is_basis", []], ["del", "theorem", "is_basis_empty", []], ["del", "theorem", "is_basis_inl_union_inr", []], ["del", "theorem", "is_basis_singleton_iff", []], ["del", "theorem", "is_basis_singleton_one", []], ["del", "theorem", "is_basis_span", []], ["del", "def", "linear_equiv_of_is_basis'", []], ["del", "def", "linear_equiv_of_is_basis", []], ["del", "theorem", "linear_equiv_of_is_basis_comp", []], ["del", "theorem", "linear_equiv_of_is_basis_refl", []], ["del", "theorem", "linear_equiv_of_is_basis_symm_trans", []], ["del", "theorem", "linear_equiv_of_is_basis_trans_symm", []], ["del", "def", "module_equiv_finsupp", []], ["del", "theorem", "module_equiv_finsupp_apply_basis", []]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "equiv_fun_symm_std_basis", ["basis"]], ["mod", "theorem", "comp_left_injective", ["bilin_form"]], ["mod", "theorem", "is_adjoint_pair_unique_of_nondegenerate", ["bilin_form"]], ["mod", "theorem", "le_orthogonal_orthogonal", ["bilin_form"]], ["mod", "theorem", "restrict_sym", ["bilin_form"]], ["mod", "theorem", "to_dual_def", ["bilin_form"]], ["add", "theorem", "to_matrix_basis_fun", ["bilin_form"]], ["del", "theorem", "to_matrix_is_basis_fun", ["bilin_form"]], ["del", "theorem", "equiv_fun_symm_std_basis", ["is_basis"]], ["add", "theorem", "to_bilin_basis_fun", ["matrix"]], ["del", "theorem", "to_bilin_is_basis_fun", ["matrix"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "finite_index_of_dim_lt_omega", ["basis"]], ["add", "theorem", "finite_of_vector_space_index_of_dim_lt_omega", ["basis"]], ["add", "theorem", "le_span", ["basis"]], ["add", "theorem", "mk_eq_dim''", ["basis"]], ["add", "theorem", "mk_eq_dim", ["basis"]], ["add", "theorem", "mk_range_eq_dim", ["basis"]], ["add", "theorem", "nonempty_fintype_index_of_dim_lt_omega", ["basis"]], ["add", "def", "of_dim_eq_zero'", ["basis"]], ["add", "theorem", "of_dim_eq_zero'_apply", ["basis"]], ["add", "def", "of_dim_eq_zero", ["basis"]], ["add", "theorem", "of_dim_eq_zero_apply", ["basis"]], ["del", "theorem", "exists_is_basis_fintype", []], ["del", "theorem", "le_span", ["is_basis"]], ["del", "theorem", "mk_eq_dim''", ["is_basis"]], ["del", "theorem", "mk_eq_dim", ["is_basis"]], ["del", "theorem", "mk_range_eq_dim", ["is_basis"]], ["del", "theorem", "is_basis_of_dim_eq_zero'", []], ["del", "theorem", "is_basis_of_dim_eq_zero", []], ["mod", "theorem", "mk_eq_mk_of_basis'", []], ["mod", "theorem", "mk_eq_mk_of_basis", []], ["mod", "theorem", "{m}", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "theorem", "coe_dual_basis", ["basis"]], ["add", "theorem", "coe_to_dual_self", ["basis"]], ["add", "def", "dual_basis", ["basis"]], ["add", "theorem", "dual_basis_apply", ["basis"]], ["add", "theorem", "dual_basis_apply_self", ["basis"]], ["add", "theorem", "dual_basis_equiv_fun", ["basis"]], ["add", "theorem", "dual_basis_repr", ["basis"]], ["add", "theorem", "dual_dim_eq", ["basis"]], ["add", "def", "to_dual", ["basis"]], ["add", "theorem", "to_dual_apply", ["basis"]], ["add", "theorem", "to_dual_apply_left", ["basis"]], ["add", "theorem", "to_dual_apply_right", ["basis"]], ["add", "theorem", "to_dual_eq_equiv_fun", ["basis"]], ["add", "theorem", "to_dual_eq_repr", ["basis"]], ["add", "def", "to_dual_equiv", ["basis"]], ["add", "def", "to_dual_flip", ["basis"]], ["add", "theorem", "to_dual_flip_apply", ["basis"]], ["add", "theorem", "to_dual_inj", ["basis"]], ["add", "theorem", "to_dual_ker", ["basis"]], ["add", "theorem", "to_dual_range", ["basis"]], ["add", "theorem", "to_dual_to_dual", ["basis"]], ["add", "theorem", "to_dual_total_left", ["basis"]], ["add", "theorem", "to_dual_total_right", ["basis"]], ["add", "theorem", "total_coord", ["basis"]], ["add", "theorem", "total_dual_basis", ["basis"]], ["add", "def", "basis", ["dual_pair"]], ["add", "theorem", "coe_basis", ["dual_pair"]], ["add", "theorem", "coe_dual_basis", ["dual_pair"]], ["del", "theorem", "decomposition", ["dual_pair"]], ["del", "theorem", "eq_dual", ["dual_pair"]], ["del", "theorem", "is_basis", ["dual_pair"]], ["add", "theorem", "lc_coeffs", ["dual_pair"]], ["add", "theorem", "lc_def", ["dual_pair"]], ["del", "def", "coord_fun", ["is_basis"]], ["del", "theorem", "coord_fun_eq_repr", ["is_basis"]], ["del", "def", "dual_basis", ["is_basis"]], ["del", "theorem", "dual_basis_apply", ["is_basis"]], ["del", "theorem", "dual_basis_apply_self", ["is_basis"]], ["del", "theorem", "dual_basis_equiv_fun", ["is_basis"]], ["del", "theorem", "dual_basis_is_basis", ["is_basis"]], ["del", "theorem", "dual_basis_repr", ["is_basis"]], ["del", "theorem", "dual_dim_eq", ["is_basis"]], ["del", "theorem", "dual_lin_independent", ["is_basis"]], ["del", "def", "to_dual", ["is_basis"]], ["del", "theorem", "to_dual_apply", ["is_basis"]], ["del", "theorem", "to_dual_apply_left", ["is_basis"]], ["del", "theorem", "to_dual_apply_right", ["is_basis"]], ["del", "theorem", "to_dual_eq_equiv_fun", ["is_basis"]], ["del", "theorem", "to_dual_eq_repr", ["is_basis"]], ["del", "def", "to_dual_equiv", ["is_basis"]], ["del", "def", "to_dual_flip", ["is_basis"]], ["del", "theorem", "to_dual_inj", ["is_basis"]], ["del", "theorem", "to_dual_ker", ["is_basis"]], ["del", "theorem", "to_dual_range", ["is_basis"]], ["del", "theorem", "to_dual_swap_eq_to_dual", ["is_basis"]], ["del", "theorem", "to_dual_to_dual", ["is_basis"]], ["del", "theorem", "to_dual_total_left", ["is_basis"]], ["del", "theorem", "to_dual_total_right", ["is_basis"]], ["del", "theorem", "total_dual_basis", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "coe_basis_of_linear_independent_of_card_eq_finrank", []], ["add", "theorem", "coe_basis_of_span_eq_top_of_card_eq_finrank", []], ["add", "theorem", "coe_finset_basis_of_linear_independent_of_card_eq_finrank", []], ["add", "theorem", "coe_set_basis_of_linear_independent_of_card_eq_finrank", []], ["add", "theorem", "subset_extend", ["finite_dimensional", "basis"]], ["add", "theorem", "basis_singleton_apply", ["finite_dimensional"]], ["add", "theorem", "repr_eq_zero_iff", ["finite_dimensional", "basis_unique"]], ["add", "theorem", "coe_finset_basis_index", ["finite_dimensional"]], ["mod", "theorem", "dim_eq_card_basis", ["finite_dimensional"]], ["del", "theorem", "equiv_fin", ["finite_dimensional"]], ["del", "theorem", "equiv_fin_of_dim_eq", ["finite_dimensional"]], ["del", "theorem", "exists_is_basis_finite", ["finite_dimensional"]], ["del", "theorem", "exists_is_basis_finset", ["finite_dimensional"]], ["del", "theorem", "exists_is_basis_singleton", ["finite_dimensional"]], ["del", "theorem", "fin_basis", ["finite_dimensional"]], ["add", "theorem", "finite_basis_index", ["finite_dimensional"]], ["mod", "theorem", "finrank_eq_card_basis'", ["finite_dimensional"]], ["mod", "theorem", "finrank_eq_card_basis", ["finite_dimensional"]], ["mod", "theorem", "finrank_eq_card_finset_basis", ["finite_dimensional"]], ["mod", "theorem", "of_finite_basis", ["finite_dimensional"]], ["mod", "theorem", "of_finset_basis", ["finite_dimensional"]], ["mod", "theorem", "of_fintype_basis", ["finite_dimensional"]], ["add", "theorem", "range_basis_singleton", ["finite_dimensional"]], ["add", "theorem", "range_finset_basis", ["finite_dimensional"]], ["mod", "theorem", "finrank_eq_one_iff", []], ["add", "theorem", "finrank_eq_zero_of_basis_imp_false", []], ["add", "theorem", "finrank_eq_zero_of_basis_imp_not_finite", []], ["add", "theorem", "finrank_eq_zero_of_not_exists_basis_finite", []], ["del", "theorem", "finset_is_basis_of_linear_independent_of_card_eq_finrank", []], ["del", "theorem", "finset_is_basis_of_span_eq_top_of_card_eq_finrank", []], ["del", "theorem", "is_basis_of_finrank_zero'", []], ["del", "theorem", "is_basis_of_finrank_zero", []], ["del", "theorem", "is_basis_of_linear_independent_of_card_eq_finrank", []], ["del", "theorem", "is_basis_of_span_eq_top_of_card_eq_finrank", []], ["del", "theorem", "set_is_basis_of_linear_independent_of_card_eq_finrank", []], ["del", "theorem", "set_is_basis_of_span_eq_top_of_card_eq_finrank", []], ["del", "theorem", "singleton_is_basis", []]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "dom_lcongr_apply", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["add", "def", "tensor_product", ["finsupp", "basis"]], ["add", "theorem", "basis_repr", ["finsupp"]], ["add", "theorem", "coe_basis", ["finsupp"]], ["add", "theorem", "coe_basis_single_one", ["finsupp"]], ["del", "theorem", "tensor_product", ["finsupp", "is_basis"]], ["del", "theorem", "is_basis_single", ["finsupp"]], ["del", "theorem", "is_basis_single_one", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/free_algebra.lean", "newPath": "src/linear_algebra/free_algebra.lean", "changes": [["del", "theorem", "is_basis_free_monoid", ["free_algebra"]]]}, {"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": [["add", "theorem", "card_le_card_of_linear_independent", ["basis"]], ["add", "theorem", "card_le_card_of_linear_independent_aux", ["basis"]], ["mod", "theorem", "eq_bot_of_generator_maximal_map_eq_zero", []], ["mod", "theorem", "eq_bot_of_rank_eq_zero", []], ["del", "theorem", "card_le_card_of_linear_independent", ["is_basis"]], ["del", "theorem", "card_le_card_of_linear_independent_aux", ["is_basis"]], ["del", "theorem", "free_of_finite_type_torsion_free'", ["module"]], ["del", "theorem", "free_of_finite_type_torsion_free", ["module"]], ["del", "theorem", "exists_is_basis", ["submodule"]], ["del", "theorem", "exists_is_basis_of_le", ["submodule"]], ["del", "theorem", "exists_is_basis_of_le_span", ["submodule"]], ["mod", "def", "induction_on_rank", ["submodule"]], ["mod", "def", "induction_on_rank_aux", ["submodule"]]]}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "extend_subset", ["linear_independent"]], ["add", "theorem", "linear_independent_extend", ["linear_independent"]], ["add", "theorem", "subset_extend", ["linear_independent"]], ["add", "theorem", "subset_span_extend", ["linear_independent"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "left_mul_matrix_injective", ["algebra"]], ["add", "def", "det", ["basis"]], ["add", "theorem", "det_apply", ["basis"]], ["add", "theorem", "det_self", ["basis"]], ["add", "theorem", "sum_to_matrix_smul_self", ["basis"]], ["add", "theorem", "to_lin_to_matrix", ["basis"]], ["add", "def", "to_matrix", ["basis"]], ["add", "theorem", "to_matrix_apply", ["basis"]], ["add", "theorem", "to_matrix_eq_to_matrix_constr", ["basis"]], ["add", "def", "to_matrix_equiv", ["basis"]], ["add", "theorem", "to_matrix_mul_to_matrix", ["basis"]], ["add", "theorem", "to_matrix_self", ["basis"]], ["add", "theorem", "to_matrix_transpose_apply", ["basis"]], ["add", "theorem", "to_matrix_update", ["basis"]], ["add", "theorem", "basis_to_matrix_mul_linear_map_to_matrix", []], ["del", "def", "det", ["is_basis"]], ["del", "theorem", "det_apply", ["is_basis"]], ["del", "theorem", "det_self", ["is_basis"]], ["mod", "theorem", "iff_det", ["is_basis"]], ["del", "theorem", "sum_to_matrix_smul_self", ["is_basis"]], ["del", "theorem", "to_lin_to_matrix", ["is_basis"]], ["del", "def", "to_matrix", ["is_basis"]], ["del", "theorem", "to_matrix_apply", ["is_basis"]], ["del", "theorem", "to_matrix_eq_to_matrix_constr", ["is_basis"]], ["del", "def", "to_matrix_equiv", ["is_basis"]], ["del", "theorem", "to_matrix_mul_to_matrix", ["is_basis"]], ["del", "theorem", "to_matrix_self", ["is_basis"]], ["del", "theorem", "to_matrix_transpose_apply", ["is_basis"]], ["del", "theorem", "to_matrix_update", ["is_basis"]], ["del", "theorem", "is_basis_to_matrix_mul_linear_map_to_matrix", []], ["mod", "theorem", "is_unit_det", ["linear_equiv"]], ["mod", "def", "of_is_unit_det", ["linear_equiv"]], ["mod", "theorem", "to_matrix_alg_equiv_id", ["linear_map"]], ["del", "theorem", "to_matrix_alg_equiv_range", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_reindex_range", ["linear_map"]], ["mod", "theorem", "to_matrix_id", ["linear_map"]], ["mod", "theorem", "to_matrix_one", ["linear_map"]], ["del", "theorem", "to_matrix_range", ["linear_map"]], ["add", "theorem", "to_matrix_reindex_range", ["linear_map"]], ["del", "theorem", "to_matrix_symm_transpose", ["linear_map"]], ["mod", "def", "trace", ["linear_map"]], ["mod", "def", "trace_aux", ["linear_map"]], ["mod", "theorem", "trace_aux_def", ["linear_map"]], ["del", "theorem", "trace_aux_eq'", ["linear_map"]], ["mod", "theorem", "trace_aux_eq", ["linear_map"]], ["del", "theorem", "trace_aux_range", ["linear_map"]], ["add", "theorem", "trace_aux_reindex_range", ["linear_map"]], ["mod", "theorem", "trace_eq_matrix_trace", ["linear_map"]], ["add", "theorem", "trace_eq_matrix_trace_of_finite_set", ["linear_map"]], ["mod", "theorem", "trace_mul_comm", ["linear_map"]], ["add", "theorem", "linear_map_to_matrix_mul_basis_to_matrix", []], ["del", "theorem", "linear_map_to_matrix_mul_is_basis_to_matrix", []], ["mod", "theorem", "to_lin_alg_equiv_one", ["matrix"]], ["mod", "theorem", "to_lin_one", ["matrix"]], ["add", "theorem", "to_lin_transpose", ["matrix"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["add", "theorem", "basis_apply", ["pi"]], ["add", "theorem", "basis_fun_apply", ["pi"]], ["add", "theorem", "basis_fun_repr", ["pi"]], ["add", "theorem", "basis_repr", ["pi"]], ["add", "theorem", "basis_repr_std_basis", ["pi"]], ["del", "theorem", "is_basis_fun", ["pi"]], ["del", "theorem", "is_basis_fun_repr", ["pi"]], ["del", "theorem", "is_basis_fun₀", ["pi"]], ["del", "theorem", "is_basis_std_basis", ["pi"]]]}, {"oldPath": "src/ring_theory/adjoin/power_basis.lean", "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": [["del", "theorem", "power_basis_is_basis", ["algebra"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "def", "power_basis", ["adjoin_root"]], ["add", "def", "power_basis_aux", ["adjoin_root"]], ["del", "theorem", "power_basis_is_basis", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "smul_apply", ["basis"]], ["add", "theorem", "smul_repr", ["basis"]], ["add", "theorem", "smul_repr_mk", ["basis"]], ["del", "theorem", "smul", ["is_basis"]], ["del", "theorem", "smul_repr", ["is_basis"]], ["del", "theorem", "smul_repr_mk", ["is_basis"]]]}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": [["add", "def", "basis_monomials", ["mv_polynomial"]], ["add", "theorem", "coe_basis_monomials", ["mv_polynomial"]], ["del", "theorem", "is_basis_monomials", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "coe_basis", ["power_basis"]]]}, {"oldPath": "src/ring_theory/trace.lean", "newPath": "src/ring_theory/trace.lean", "changes": [["mod", "theorem", "trace_eq_matrix_trace", ["algebra"]]]}]}, {"timestamp": 1620632173, "sha": "f985e364", "message": "feat(group_theory/subgroup): add mem_map_of_mem (#7459)\nFrom LTE.\nWritten by @PatrickMassot", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "apply_coe_mem_map", ["subgroup"]], ["add", "theorem", "mem_map_of_mem", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "apply_coe_mem_map", ["submonoid"]], ["mod", "theorem", "mem_map_of_mem", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "apply_coe_mem_map", ["submodule"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1620632172, "sha": "4a8467a4", "message": "feat(data/equiv/basic): equiv.curry (#7458)\nThis renames `equiv.arrow_arrow_equiv_prod_arrow` to `(equiv.curry _ _ _).symm` to make it easier to find and match `function.curry`.\n* `cardinal.power_mul` is swapped, so that its name makes sense.\n* renames `linear_equiv.uncurry` to `linear_equiv.curry` and swaps sides\nAlso add `@[simps]` to two equivs.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "def", "arrow_arrow_equiv_prod_arrow", ["equiv"]], ["add", "def", "curry", ["equiv"]], ["mod", "def", "prod_punit", ["equiv"]], ["mod", "def", "punit_prod", ["equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_curry", ["linear_equiv"]], ["add", "theorem", "coe_curry_symm", ["linear_equiv"]], ["del", "theorem", "coe_uncurry", ["linear_equiv"]], ["del", "theorem", "coe_uncurry_symm", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "power_mul", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1620626519, "sha": "7150c90f", "message": "refactor(ring_theory/localization): Golf two proofs (#7520)\nGolfing two proofs and changing their order.", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "comap_maximal_ideal", ["localization", "at_prime"]], ["mod", "theorem", "map_eq_maximal_ideal", ["localization", "at_prime"]]]}]}, {"timestamp": 1620598728, "sha": "ea0043ca", "message": "feat(topology): tiny new lemmas (#7554)\nfrom LTE", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "eq_of_same_basis", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "preimage_mem_nhds", ["quotient"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "preimage_nhds_coinduced", []]]}]}, {"timestamp": 1620562812, "sha": "735a26e5", "message": "chore(group_theory): some new convenience lemmas (#7555)\nfrom LTE", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "coe_mk'", ["quotient_group"]], ["add", "theorem", "mk'_apply", ["quotient_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "eq_iff", ["monoid_hom"]], ["add", "theorem", "div_mem_comm_iff", ["subgroup"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1620562810, "sha": "581064fd", "message": "feat(uniform_space/cauchy): cauchy_seq lemmas (#7528)\nfrom the Liquid Tensor Experiment", "changes": [{"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "subseq_mem", ["cauchy_seq"]], ["add", "theorem", "subseq_subseq_mem", ["cauchy_seq"]], ["add", "theorem", "cauchy_seq_const", []], ["add", "theorem", "cauchy_seq_iff'", []], ["add", "theorem", "cauchy_seq_iff", []]]}]}, {"timestamp": 1620554457, "sha": "bf229dd5", "message": "feat(topology/metric_space/basic): dist_ne_zero (#7552)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_ne_zero", []]]}]}, {"timestamp": 1620480389, "sha": "132328c4", "message": "feat(algebra/lie/weights): define weight spaces of Lie modules (#7537)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/lie/cartan_subalgebra.lean", "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/lie/character.lean", "changes": [["add", "def", "lie_character", ["lie_algebra"]], ["add", "theorem", "lie_character_apply_lie", ["lie_algebra"]], ["add", "theorem", "lie_character_apply_of_mem_derived", ["lie_algebra"]], ["add", "def", "lie_character_equiv_linear_dual", ["lie_algebra"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["del", "theorem", "nilpotent_iff_equiv_nilpotent", ["lie_algebra"]], ["add", "theorem", "nilpotent_iff_equiv_nilpotent", ["lie_equiv"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "mem_mk_iff", ["lie_submodule"]], ["add", "theorem", "nontrivial_iff", ["lie_submodule"]], ["add", "theorem", "subsingleton_iff", ["lie_submodule"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/weights.lean", "changes": [["add", "def", "is_root", ["lie_algebra"]], ["add", "def", "root_space", ["lie_algebra"]], ["add", "theorem", "zero_root_space_eq_top_of_nilpotent", ["lie_algebra"]], ["add", "theorem", "coe_weight_space_of_top", ["lie_module"]], ["add", "def", "is_weight", ["lie_module"]], ["add", "theorem", "is_weight_zero_of_nilpotent", ["lie_module"]], ["add", "theorem", "lie_mem_pre_weight_space_of_mem_pre_weight_space", ["lie_module"]], ["add", "theorem", "mem_pre_weight_space", ["lie_module"]], ["add", "theorem", "mem_weight_space", ["lie_module"]], ["add", "def", "pre_weight_space", ["lie_module"]], ["add", "def", "weight_space", ["lie_module"]], ["add", "theorem", "zero_weight_space_eq_top_of_nilpotent'", ["lie_module"]], ["add", "theorem", "zero_weight_space_eq_top_of_nilpotent", ["lie_module"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_or_le_of_add_eq_add_pred", ["nat"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "commute_pow_left_of_commute", ["linear_map"]], ["add", "theorem", "pow_map_zero_of_le", ["linear_map"]]]}]}, {"timestamp": 1620461639, "sha": "4a8a5950", "message": "feat(topology/subset_properties, homeomorph): lemmata about embeddings (#7431)\nTwo lemmata: (i) embedding to homeomorphism (ii) a closed embedding is proper\nCoauthored with @hrmacbeth", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "self_comp_of_injective_symm", ["equiv"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "tendsto_cocompact", ["closed_embedding"]]]}]}, {"timestamp": 1620453162, "sha": "583ad823", "message": "feat(algebraic_geometry/structure_sheaf): Structure sheaf on basic opens (#7405)\nProves that `to_basic_open` is an isomorphism of commutative rings. Also adds Hartshorne as a reference.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "def", "basic_open_iso", ["algebraic_geometry"]], ["add", "theorem", "locally_const_basic_open", ["algebraic_geometry"]], ["add", "theorem", "normalize_finite_fraction_representation", ["algebraic_geometry"]], ["add", "theorem", "to_basic_open_injective", ["algebraic_geometry"]], ["add", "theorem", "to_basic_open_surjective", ["algebraic_geometry"]]]}]}, {"timestamp": 1620428066, "sha": "dbcd4546", "message": "feat(topology/category/*): Add alternative explicit limit cones for `Top`, etc. and shows `X : Profinite` is a limit of finite sets. (#7448)\nThis PR redefines `Top.limit_cone`, and defines similar explicit limit cones for `CompHaus` and `Profinite`.\nUsing the definition with the subspace topology makes the proofs that the limit is compact, t2 and/or totally disconnected much easier.\nThis also expresses any `X : Profinite` as a limit of its discrete quotients, which are all finite.", "changes": [{"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": [["add", "def", "limit_cone", ["CompHaus"]], ["add", "def", "limit_cone_is_limit", ["CompHaus"]]]}, {"oldPath": null, "newPath": "src/topology/category/Profinite/as_limit.lean", "changes": [["add", "def", "as_limit", ["Profinite"]], ["add", "def", "as_limit_cone", ["Profinite"]], ["add", "def", "as_limit_cone_iso", ["Profinite"]], ["add", "def", "diagram", ["Profinite"]], ["add", "def", "fintype_diagram", ["Profinite"]], ["add", "def", "iso_as_limit_cone_lift", ["Profinite"]], ["add", "def", "lim", ["Profinite"]]]}, {"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite/default.lean", "changes": [["add", "def", "limit_cone", ["Profinite"]], ["add", "def", "limit_cone_is_limit", ["Profinite"]]]}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}]}, {"timestamp": 1620428065, "sha": "515fb2f0", "message": "feat(group_theory/perm/*): lemmas about `extend_domain`, `fin_rotate`, and `fin.cycle_type` (#7447)\nShows how `disjoint`, `support`, `is_cycle`, and `cycle_type` behave under `extend_domain`\nCalculates `support` and `cycle_type` for `fin_rotate` and `fin.cycle_type`\nShows that the normal closure of `fin_rotate 5` in `alternating_group (fin 5)` is the whole alternating group.", "changes": [{"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "cycle_type_extend_domain", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "extend_domain", ["equiv", "perm", "is_cycle"]]]}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": [["add", "theorem", "cycle_type_fin_rotate", []], ["add", "theorem", "cycle_type_fin_rotate_of_le", []], ["add", "theorem", "cycle_type_cycle_range", ["fin"]], ["add", "theorem", "is_cycle_cycle_range", ["fin"]], ["add", "theorem", "is_three_cycle_cycle_range_two", ["fin"]], ["add", "theorem", "is_cycle_fin_rotate", []], ["add", "theorem", "is_cycle_fin_rotate_of_le", []], ["add", "theorem", "support_fin_rotate", []], ["add", "theorem", "support_fin_rotate_of_le", []]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "extend_domain", ["equiv", "perm", "disjoint"]]]}, {"oldPath": "src/group_theory/perm/support.lean", "newPath": "src/group_theory/perm/support.lean", "changes": [["add", "theorem", "card_support_extend_domain", ["equiv", "perm"]], ["add", "theorem", "support_extend_domain", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/specific_groups/alternating.lean", "newPath": "src/group_theory/specific_groups/alternating.lean", "changes": [["add", "theorem", "is_conj_of", ["alternating_group"]], ["add", "theorem", "is_three_cycle_is_conj", ["alternating_group"]], ["add", "theorem", "normal_closure_fin_rotate_five", ["alternating_group"]], ["add", "theorem", "fin_rotate_bit1_mem_alternating_group", ["equiv", "perm"]], ["add", "theorem", "alternating_normal_closure", ["equiv", "perm", "is_three_cycle"]], ["add", "theorem", "mem_alternating_group", ["equiv", "perm", "is_three_cycle"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "subtype_range", ["subgroup"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}]}, {"timestamp": 1620419193, "sha": "5cfcb6a0", "message": "feat(ring_theory/hahn_series): order of a nonzero Hahn series, reindexing summable families (#7444)\nDefines `hahn_series.order`, the order of a nonzero Hahn series\nRestates `add_val` in terms of `hahn_series.order`\nDefines `hahn_series.summable_family.emb_domain`, reindexing a summable family using an embedding", "changes": [{"oldPath": "src/algebra/big_operators/finprod.lean", "newPath": "src/algebra/big_operators/finprod.lean", "changes": [["add", "theorem", "finprod_dmem", []], ["add", "theorem", "finprod_emb_domain'", []], ["add", "theorem", "finprod_emb_domain", []]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "C_injective", ["hahn_series"]], ["add", "theorem", "C_ne_zero", ["hahn_series"]], ["add", "theorem", "add_val_le_of_coeff_ne_zero", ["hahn_series"]], ["del", "theorem", "coeff_min_ne_zero", ["hahn_series"]], ["add", "theorem", "coeff_order_ne_zero", ["hahn_series"]], ["add", "theorem", "min_order_le_order_add", ["hahn_series"]], ["del", "theorem", "mul_coeff_min_add_min", ["hahn_series"]], ["add", "theorem", "mul_coeff_order_add_order", ["hahn_series"]], ["add", "theorem", "ne_zero_of_coeff_ne_zero", ["hahn_series"]], ["add", "def", "order", ["hahn_series"]], ["add", "theorem", "order_C", ["hahn_series"]], ["add", "theorem", "order_le_of_coeff_ne_zero", ["hahn_series"]], ["add", "theorem", "order_mul", ["hahn_series"]], ["add", "theorem", "order_of_ne", ["hahn_series"]], ["add", "theorem", "order_one", ["hahn_series"]], ["add", "theorem", "order_single", ["hahn_series"]], ["add", "theorem", "order_zero", ["hahn_series"]], ["add", "theorem", "single_injective", ["hahn_series"]], ["add", "theorem", "single_ne_zero", ["hahn_series"]], ["add", "def", "emb_domain", ["hahn_series", "summable_family"]], ["add", "theorem", "emb_domain_apply", ["hahn_series", "summable_family"]], ["add", "theorem", "emb_domain_image", ["hahn_series", "summable_family"]], ["add", "theorem", "emb_domain_notin_range", ["hahn_series", "summable_family"]], ["add", "theorem", "hsum_emb_domain", ["hahn_series", "summable_family"]], ["add", "theorem", "hsum_sub", ["hahn_series", "summable_family"]]]}]}, {"timestamp": 1620379847, "sha": "72e151d8", "message": "feat(topology/uniform_space): is_closed_of_spread_out (#7538)\nSee [Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/integers.20are.20closed.20in.20reals)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "ball_inter_left", []], ["add", "theorem", "ball_inter_right", []], ["add", "theorem", "mem_closure_iff_ball", ["uniform_space"]], ["add", "theorem", "mem_closure_iff_symm_ball", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["add", "theorem", "eq_of_forall_symmetric", []], ["add", "theorem", "eq_of_uniformity", []], ["add", "theorem", "eq_of_uniformity_basis", []], ["add", "theorem", "is_closed_of_spaced_out", []]]}]}, {"timestamp": 1620379846, "sha": "301542a4", "message": "feat(group_theory.quotient_group): add eq_iff_div_mem (#7523)\nFrom LTE.\nWritten by @PatrickMassot", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "eq_iff_div_mem", ["quotient_group"]], ["add", "theorem", "eq_one_iff", ["quotient_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "exists_inv_mem_iff_exists_mem", ["subgroup"]]]}]}, {"timestamp": 1620379845, "sha": "63a17823", "message": "feat(field_theory/polynomial_galois_group): More flexible version of gal_action_hom_bijective_of_prime_degree (#7508)\nSince the number of non-real roots is even, we can make a more flexible version of `gal_action_hom_bijective_of_prime_degree`. This flexibility will be helpful when working with a specific polynomial.", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "gal_action_hom_bijective_of_prime_degree'", ["polynomial", "gal"]], ["mod", "theorem", "gal_action_hom_bijective_of_prime_degree_aux", ["polynomial", "gal"]]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "two_dvd_card_support", ["equiv", "perm"]]]}]}, {"timestamp": 1620379844, "sha": "565310f1", "message": "feat(data/nat/cast): pi.coe_nat and pi.nat_apply (#7492)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "coe_int", ["pi"]], ["add", "theorem", "int_apply", ["pi"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "coe_nat", ["pi"]], ["add", "theorem", "nat_apply", ["pi"]]]}]}, {"timestamp": 1620379843, "sha": "190d4e28", "message": "feat(algebra/module/basic): smul_add_hom_one (#7461)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "smul_add_hom_one", []]]}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "const_smul_hom_one", []]]}]}, {"timestamp": 1620379842, "sha": "91d5aa6b", "message": "feat(category_theory/arrow): arrow.mk_inj (#7456)\nFrom LTE", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "theorem", "mk_inj", ["category_theory", "arrow"]], ["add", "theorem", "mk_injective", ["category_theory", "arrow"]]]}]}, {"timestamp": 1620379840, "sha": "6fc8b2a9", "message": "refactor(*): more choice-free proofs (#7455)\nNow that lean v3.30 has landed (and specifically leanprover-community/lean#560), we can finally make some progress on making a significant fraction of mathlib foundations choice-free. This PR does the following:\n* No existing theorem statements have changed (except `linear_nonneg_ring` as noted below).\n* A number of new theorems have been added to the `decidable` namespace, proving choice-free versions of lemmas under the assumption that something is decidable. These are primarily concentrated in partial orders and ordered rings, because total orders are already decidable, but there are some interesting lemmas about partial orders that require decidability of `le`.\n* `linear_nonneg_ring` was changed to include decidability of `nonneg`, for consistency with linear ordered rings. No one is using this anyway so there shouldn't be any fallout.\n* A lot of the `ordered_semiring` lemmas need `decidable` versions now because one of the core axioms, `mul_le_mul_of_nonneg_left`, is derived by LEM from an equivalent statement about lt instead of being an actual axiom. If this is refactored, these theorems can be removed again.\n* The main files which were scoured of choicy proofs are: `algebra.ordered_group`, `algebra.ordered_ring`, `data.nat.basic`, `data.int.basic`, `data.list.basic`, and `computability.halting`.\n* The end goal of this was to prove `computable_pred.halting_problem` without assuming choice, finally validating a claim I made more than two years ago in my [paper](https://arxiv.org/abs/1810.08380) on the formalization.\nI have not yet investigated a linter for making sure that these proofs stay choice-free; this can be done in a follow-up PR.", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["del", "theorem", "le_iff_le_iff_lt_iff_lt", ["decidable"]], ["del", "theorem", "le_imp_le_iff_lt_imp_lt", ["decidable"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "add_le_mul_two_add", []], ["del", "theorem", "mul_le_mul_left", ["decidable"]], ["del", "theorem", "mul_le_mul_right", ["decidable"]], ["mod", "theorem", "le_mul_of_one_le_left", []], ["mod", "theorem", "le_mul_of_one_le_right", []], ["mod", "theorem", "le_of_mul_le_of_one_le", []], ["mod", "theorem", "lt_mul_of_one_lt_left", []], ["mod", "theorem", "lt_mul_of_one_lt_right", []], ["mod", "theorem", "mul_le_mul", []], ["mod", "theorem", "mul_le_mul_of_nonneg_left", []], ["mod", "theorem", "mul_le_mul_of_nonneg_right", []], ["mod", "theorem", "mul_le_mul_of_nonpos_left", []], ["mod", "theorem", "mul_le_mul_of_nonpos_right", []], ["mod", "theorem", "mul_le_of_le_one_left", []], ["mod", "theorem", "mul_le_of_le_one_right", []], ["mod", "theorem", "mul_le_one", []], ["mod", "theorem", "mul_lt_mul''", []], ["mod", "theorem", "mul_lt_mul'", []], ["mod", "theorem", "mul_lt_mul", []], ["mod", "theorem", "mul_lt_one_of_nonneg_of_lt_one_left", []], ["mod", "theorem", "mul_lt_one_of_nonneg_of_lt_one_right", []], ["mod", "theorem", "mul_nonneg", []], ["mod", "theorem", "mul_nonneg_iff_right_nonneg_of_pos", []], ["mod", "theorem", "mul_nonneg_le_one_le", []], ["mod", "theorem", "mul_nonneg_of_nonpos_of_nonpos", []], ["mod", "theorem", "mul_nonpos_of_nonneg_of_nonpos", []], ["mod", "theorem", "mul_nonpos_of_nonpos_of_nonneg", []], ["mod", "def", "to_linear_nonneg_ring", ["nonneg_ring"]], ["mod", "theorem", "one_le_mul_of_one_le_of_one_le", []], ["mod", "theorem", "one_lt_mul", []], ["mod", "theorem", "one_lt_mul_of_le_of_lt", []], ["mod", "theorem", "one_lt_mul_of_lt_of_le", []], ["mod", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_ring"]], ["mod", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_ring"]], ["mod", "theorem", "mul_nonneg", ["ordered_ring"]]]}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": [["add", "theorem", "const'", ["decidable", "partrec"]], ["mod", "theorem", "fix", ["partrec"]], ["add", "theorem", "fix_aux", ["partrec"]], ["mod", "theorem", "sum_cases_left", ["partrec"]], ["mod", "theorem", "sum_cases_right", ["partrec"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "def", "greatest_of_bdd", ["int"]], ["add", "def", "least_of_bdd", ["int"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "eq_or_ne_mem_of_mem", ["decidable", "list"]], ["add", "theorem", "ne_iff", ["decidable", "list", "lex"]], ["mod", "theorem", "eq_or_ne_mem_of_mem", ["list"]], ["mod", "theorem", "ne_iff", ["list", "lex"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "lt_of_div_lt_div", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "lt_top_iff_ne_top", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1620379839, "sha": "dec29aa3", "message": "feat(group_theory/solvable): S_5 is not solvable (#7453)\nThis is a rather hacky proof that S_5 is not solvable. The proper proof via the simplicity of A_5 will eventually replace this. But until then, this result is needed for abel-ruffini.\nMost of the work done by Jordan Brown", "changes": [{"oldPath": "src/data/equiv/fintype.lean", "newPath": "src/data/equiv/fintype.lean", "changes": [["del", "def", "via_embedding", ["equiv", "perm"]], ["del", "theorem", "via_embedding_apply_image", ["equiv", "perm"]], ["del", "theorem", "via_embedding_apply_mem_range", ["equiv", "perm"]], ["del", "theorem", "via_embedding_apply_not_mem_range", ["equiv", "perm"]], ["del", "theorem", "via_embedding_sign", ["equiv", "perm"]], ["add", "def", "via_fintype_embedding", ["equiv", "perm"]], ["add", "theorem", "via_fintype_embedding_apply_image", ["equiv", "perm"]], ["add", "theorem", "via_fintype_embedding_apply_mem_range", ["equiv", "perm"]], ["add", "theorem", "via_fintype_embedding_apply_not_mem_range", ["equiv", "perm"]], ["add", "theorem", "via_fintype_embedding_sign", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "def", "extend_domain_hom", ["equiv", "perm"]], ["add", "theorem", "extend_domain_hom_injective", ["equiv", "perm"]], ["add", "theorem", "of_subtype_apply_coe", ["equiv", "perm"]], ["add", "theorem", "via_embedding_apply", ["equiv", "perm"]], ["add", "theorem", "via_embedding_apply_of_not_mem", ["equiv", "perm"]], ["add", "theorem", "via_embedding_hom_apply", ["equiv", "perm"]], ["add", "theorem", "via_embedding_hom_injective", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["add", "theorem", "fin_5_not_solvable", ["equiv", "perm"]], ["add", "theorem", "not_solvable", ["equiv", "perm"]], ["add", "theorem", "general_commutator_containment", []], ["add", "theorem", "not_solvable_of_mem_derived_series", []]]}]}, {"timestamp": 1620379838, "sha": "95b91b38", "message": "refactor(group_theory/perm/*): disjoint and support in own file (#7450)\nThe group_theory/perm/sign file was getting large and too broad in scope. This refactor pulls out `perm.support`, `perm.is_swap`, and `perm.disjoint` into a separate file.\nA simpler version of #7118.", "changes": [{"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["del", "theorem", "apply_mem_support", ["equiv", "perm"]], ["del", "theorem", "card_support_eq_two", ["equiv", "perm"]], ["del", "theorem", "card_support_eq_zero", ["equiv", "perm"]], ["del", "theorem", "card_support_le_one", ["equiv", "perm"]], ["del", "theorem", "card_support_ne_one", ["equiv", "perm"]], ["del", "theorem", "card_support_prod_list_of_pairwise_disjoint", ["equiv", "perm"]], ["del", "theorem", "card_support_swap", ["equiv", "perm"]], ["del", "theorem", "card_support_swap_mul", ["equiv", "perm"]], ["del", "theorem", "card_support_mul", ["equiv", "perm", "disjoint"]], ["del", "theorem", "disjoint_support", ["equiv", "perm", "disjoint"]], ["del", "theorem", "gpow_disjoint_gpow", ["equiv", "perm", "disjoint"]], ["del", "theorem", "mul_apply_eq_iff", ["equiv", "perm", "disjoint"]], ["del", "theorem", "mul_comm", ["equiv", "perm", "disjoint"]], ["del", "theorem", "mul_eq_one_iff", ["equiv", "perm", "disjoint"]], ["del", "theorem", "mul_left", ["equiv", "perm", "disjoint"]], ["del", "theorem", "mul_right", ["equiv", "perm", "disjoint"]], ["del", "theorem", "pow_disjoint_pow", ["equiv", "perm", "disjoint"]], ["del", "theorem", "support_mul", ["equiv", "perm", "disjoint"]], ["del", "theorem", "symm", ["equiv", "perm", "disjoint"]], ["del", "def", "disjoint", ["equiv", "perm"]], ["del", "theorem", "disjoint_comm", ["equiv", "perm"]], ["del", "theorem", "disjoint_iff_disjoint_support", ["equiv", "perm"]], ["del", "theorem", "disjoint_one_left", ["equiv", "perm"]], ["del", "theorem", "disjoint_one_right", ["equiv", "perm"]], ["del", "theorem", "disjoint_prod_list_of_disjoint", ["equiv", "perm"]], ["del", "theorem", "disjoint_prod_perm", ["equiv", "perm"]], ["del", "theorem", "disjoint_prod_right", ["equiv", "perm"]], ["del", "theorem", "exists_mem_support_of_mem_support_prod", ["equiv", "perm"]], ["del", "theorem", "gpow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "gpow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "gpow_apply_mem_support", ["equiv", "perm"]], ["del", "theorem", "of_subtype_is_swap", ["equiv", "perm", "is_swap"]], ["del", "def", "is_swap", ["equiv", "perm"]], ["del", "theorem", "mem_support", ["equiv", "perm"]], ["del", "theorem", "ne_and_ne_of_swap_mul_apply_ne_self", ["equiv", "perm"]], ["del", "theorem", "nodup_of_pairwise_disjoint", ["equiv", "perm"]], ["del", "theorem", "one_lt_card_support_of_ne_one", ["equiv", "perm"]], ["del", "theorem", "pow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "pow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "pow_apply_mem_support", ["equiv", "perm"]], ["del", "def", "support", ["equiv", "perm"]], ["del", "theorem", "support_eq_empty_iff", ["equiv", "perm"]], ["del", "theorem", "support_inv", ["equiv", "perm"]], ["del", "theorem", "support_mul_le", ["equiv", "perm"]], ["del", "theorem", "support_one", ["equiv", "perm"]], ["del", "theorem", "support_pow_le", ["equiv", "perm"]], ["del", "theorem", "support_swap", ["equiv", "perm"]], ["del", "theorem", "support_swap_mul_eq", ["equiv", "perm"]], ["del", "theorem", "two_le_card_support_of_ne_one", ["equiv", "perm"]]]}, {"oldPath": null, "newPath": "src/group_theory/perm/support.lean", "changes": [["add", "theorem", "apply_mem_support", ["equiv", "perm"]], ["add", "theorem", "card_support_eq_two", ["equiv", "perm"]], ["add", "theorem", "card_support_eq_zero", ["equiv", "perm"]], ["add", "theorem", "card_support_le_one", ["equiv", "perm"]], ["add", "theorem", "card_support_ne_one", ["equiv", "perm"]], ["add", "theorem", "card_support_prod_list_of_pairwise_disjoint", ["equiv", "perm"]], ["add", "theorem", "card_support_swap", ["equiv", "perm"]], ["add", "theorem", "card_support_swap_mul", ["equiv", "perm"]], ["add", "theorem", "card_support_mul", ["equiv", "perm", "disjoint"]], ["add", "theorem", "disjoint_support", ["equiv", "perm", "disjoint"]], ["add", "theorem", "gpow_disjoint_gpow", ["equiv", "perm", "disjoint"]], ["add", "theorem", "inv_left", ["equiv", "perm", "disjoint"]], ["add", "theorem", "inv_right", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mul_apply_eq_iff", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mul_comm", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mul_eq_one_iff", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mul_left", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mul_right", ["equiv", "perm", "disjoint"]], ["add", "theorem", "pow_disjoint_pow", ["equiv", "perm", "disjoint"]], ["add", "theorem", "support_mul", ["equiv", "perm", "disjoint"]], ["add", "theorem", "symm", ["equiv", "perm", "disjoint"]], ["add", "def", "disjoint", ["equiv", "perm"]], ["add", "theorem", "disjoint_comm", ["equiv", "perm"]], ["add", "theorem", "disjoint_iff_disjoint_support", ["equiv", "perm"]], ["add", "theorem", "disjoint_iff_eq_or_eq", ["equiv", "perm"]], ["add", "theorem", "disjoint_inv_left_iff", ["equiv", "perm"]], ["add", "theorem", "disjoint_inv_right_iff", ["equiv", "perm"]], ["add", "theorem", "disjoint_one_left", ["equiv", "perm"]], ["add", "theorem", "disjoint_one_right", ["equiv", "perm"]], ["add", "theorem", "disjoint_prod_perm", ["equiv", "perm"]], ["add", "theorem", "disjoint_prod_right", ["equiv", "perm"]], ["add", "theorem", "disjoint_refl_iff", ["equiv", "perm"]], ["add", "theorem", "exists_mem_support_of_mem_support_prod", ["equiv", "perm"]], ["add", "theorem", "gpow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "gpow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "gpow_apply_mem_support", ["equiv", "perm"]], ["add", "theorem", "of_subtype_is_swap", ["equiv", "perm", "is_swap"]], ["add", "def", "is_swap", ["equiv", "perm"]], ["add", "theorem", "mem_support", ["equiv", "perm"]], ["add", "theorem", "mem_support_swap_mul_imp_mem_support_ne", ["equiv", "perm"]], ["add", "theorem", "ne_and_ne_of_swap_mul_apply_ne_self", ["equiv", "perm"]], ["add", "theorem", "nodup_of_pairwise_disjoint", ["equiv", "perm"]], ["add", "theorem", "not_mem_support", ["equiv", "perm"]], ["add", "theorem", "one_lt_card_support_of_ne_one", ["equiv", "perm"]], ["add", "theorem", "pow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "pow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "pow_apply_mem_support", ["equiv", "perm"]], ["add", "def", "support", ["equiv", "perm"]], ["add", "theorem", "support_congr", ["equiv", "perm"]], ["add", "theorem", "support_eq_empty_iff", ["equiv", "perm"]], ["add", "theorem", "support_gpow_le", ["equiv", "perm"]], ["add", "theorem", "support_inv", ["equiv", "perm"]], ["add", "theorem", "support_mul_le", ["equiv", "perm"]], ["add", "theorem", "support_one", ["equiv", "perm"]], ["add", "theorem", "support_pow_le", ["equiv", "perm"]], ["add", "theorem", "support_prod_le", ["equiv", "perm"]], ["add", "theorem", "support_prod_of_pairwise_disjoint", ["equiv", "perm"]], ["add", "theorem", "support_refl", ["equiv", "perm"]], ["add", "theorem", "support_swap", ["equiv", "perm"]], ["add", "theorem", "support_swap_iff", ["equiv", "perm"]], ["add", "theorem", "support_swap_mul_eq", ["equiv", "perm"]], ["add", "theorem", "support_swap_mul_ge_support_diff", ["equiv", "perm"]], ["add", "theorem", "support_swap_mul_swap", ["equiv", "perm"]], ["add", "theorem", "two_le_card_support_of_ne_one", ["equiv", "perm"]]]}]}, {"timestamp": 1620379837, "sha": "251a42b5", "message": "feat(ring_theory/finiteness): add monoid_algebra.ft_iff_fg (#7445)\nWe prove here `add monoid_algebra.ft_iff_fg`: the monoid algebra is of finite type if and only if the monoid is finitely generated.\n- [x] depends on: #7409", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "of'_eq_of", ["add_monoid_algebra"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "exists_finset_adjoin_eq_top", ["add_monoid_algebra"]], ["add", "theorem", "fg_of_finite_type", ["add_monoid_algebra"]], ["add", "theorem", "finite_type_iff_fg", ["add_monoid_algebra"]], ["add", "theorem", "mem_adjoin_support", ["add_monoid_algebra"]], ["del", "theorem", "mem_adjoint_support", ["add_monoid_algebra"]], ["add", "theorem", "mem_closure_of_mem_span_closure", ["add_monoid_algebra"]], ["add", "theorem", "of'_mem_span", ["add_monoid_algebra"]], ["add", "theorem", "exists_finset_adjoin_eq_top", ["monoid_algebra"]], ["add", "theorem", "fg_of_finite_type", ["monoid_algebra"]], ["add", "theorem", "finite_type_iff_fg", ["monoid_algebra"]], ["mod", "theorem", "mem_adjoint_support", ["monoid_algebra"]], ["add", "theorem", "mem_closure_of_mem_span_closure", ["monoid_algebra"]], ["add", "theorem", "of_mem_span_of_iff", ["monoid_algebra"]]]}]}, {"timestamp": 1620379836, "sha": "be1af7ce", "message": "feat(linear_algebra/quadratic_form): provide `distrib_mul_action S (quadratic_form M R)` when `S` has no addition. (#7443)\nThe end goal here is to provide `has_scalar (units R) (quadratic_form M R)` for possible use in #7427", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}]}, {"timestamp": 1620379835, "sha": "5d873a65", "message": "feat(algebra/monoid_algebra): add add_monoid_algebra_ring_equiv_direct_sum (#7422)\nThe only interesting result here is:\n add_monoid_algebra_ring_equiv_direct_sum : add_monoid_algebra M ι ≃+* ⨁ i : ι, M\nThe rest of the new file is just boilerplate to translate `dfinsupp.single` into `direct_sum.of`.", "changes": [{"oldPath": null, "newPath": "src/algebra/monoid_algebra_to_direct_sum.lean", "changes": [["add", "def", "to_direct_sum", ["add_monoid_algebra"]], ["add", "theorem", "to_direct_sum_add", ["add_monoid_algebra"]], ["add", "theorem", "to_direct_sum_mul", ["add_monoid_algebra"]], ["add", "theorem", "to_direct_sum_single", ["add_monoid_algebra"]], ["add", "theorem", "to_direct_sum_to_add_monoid_algebra", ["add_monoid_algebra"]], ["add", "theorem", "to_direct_sum_zero", ["add_monoid_algebra"]], ["add", "def", "add_monoid_algebra_equiv_direct_sum", []], ["add", "def", "to_add_monoid_algebra", ["direct_sum"]], ["add", "theorem", "to_add_monoid_algebra_add", ["direct_sum"]], ["add", "theorem", "to_add_monoid_algebra_mul", ["direct_sum"]], ["add", "theorem", "to_add_monoid_algebra_of", ["direct_sum"]], ["add", "theorem", "to_add_monoid_algebra_to_direct_sum", ["direct_sum"]], ["add", "theorem", "to_add_monoid_algebra_zero", ["direct_sum"]]]}]}, {"timestamp": 1620379834, "sha": "3a5c8711", "message": "refactor(polynomial/*): make polynomials irreducible (#7421)\nPolynomials are the most basic objects in field theory. Making them irreducible helps Lean, because it can not try to unfold things too far, and it helps the user because it forces him to use a sane API instead of mixing randomly stuff from finsupp and from polynomials, as used to be the case in mathlib before this PR.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "monomial_eq_C_mul_X", ["mv_polynomial"]], ["del", "theorem", "single_eq_C_mul_X", ["mv_polynomial"]], ["del", "theorem", "sum_monomial", ["mv_polynomial"]], ["add", "theorem", "sum_monomial_eq", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "def", "C", ["polynomial"]], ["mod", "theorem", "C_0", ["polynomial"]], ["add", "theorem", "C_mul_monomial", ["polynomial"]], ["add", "theorem", "add_to_finsupp", ["polynomial"]], ["mod", "def", "coeff", ["polynomial"]], ["add", "theorem", "coeff_erase", ["polynomial"]], ["del", "theorem", "coeff_mk", ["polynomial"]], ["mod", "theorem", "coeff_neg", ["polynomial"]], ["mod", "theorem", "coeff_one_zero", ["polynomial"]], ["mod", "theorem", "coeff_sub", ["polynomial"]], ["add", "theorem", "erase_monomial", ["polynomial"]], ["add", "theorem", "erase_ne", ["polynomial"]], ["add", "theorem", "erase_same", ["polynomial"]], ["add", "theorem", "erase_zero", ["polynomial"]], ["add", "theorem", "exists_iff_exists_finsupp", ["polynomial"]], ["add", "theorem", "forall_iff_forall_finsupp", ["polynomial"]], ["add", "theorem", "mem_support_iff", ["polynomial"]], ["mod", "def", "monomial", ["polynomial"]], ["add", "theorem", "monomial_add_erase", ["polynomial"]], ["del", "theorem", "monomial_def", ["polynomial"]], ["add", "theorem", "monomial_eq_C_mul_X", ["polynomial"]], ["add", "def", "monomial_fun", ["polynomial"]], ["add", "theorem", "monomial_mul_C", ["polynomial"]], ["add", "theorem", "mul_eq_sum_sum", ["polynomial"]], ["add", "theorem", "mul_to_finsupp", ["polynomial"]], ["add", "theorem", "neg_to_finsupp", ["polynomial"]], ["add", "theorem", "not_mem_support_iff", ["polynomial"]], ["add", "theorem", "one_to_finsupp", ["polynomial"]], ["del", "theorem", "single_eq_C_mul_X", ["polynomial"]], ["add", "theorem", "smul_to_finsupp", ["polynomial"]], ["add", "def", "sum", ["polynomial"]], ["mod", "theorem", "sum_C_index", ["polynomial"]], ["add", "theorem", "sum_X_index", ["polynomial"]], ["add", "theorem", "sum_add'", ["polynomial"]], ["add", "theorem", "sum_add", ["polynomial"]], ["add", "theorem", "sum_add_index", ["polynomial"]], ["add", "theorem", "sum_def", ["polynomial"]], ["add", "theorem", "sum_eq_of_subset", ["polynomial"]], ["add", "theorem", "sum_monomial_index", ["polynomial"]], ["add", "theorem", "sum_smul_index", ["polynomial"]], ["add", "theorem", "sum_to_finsupp", ["polynomial"]], ["add", "theorem", "sum_zero_index", ["polynomial"]], ["mod", "def", "support", ["polynomial"]], ["mod", "theorem", "support_add", ["polynomial"]], ["add", "theorem", "support_erase", ["polynomial"]], ["mod", "theorem", "support_zero", ["polynomial"]], ["add", "def", "to_finsupp_iso", ["polynomial"]], ["add", "theorem", "to_finsupp_iso_monomial", ["polynomial"]], ["add", "theorem", "to_finsupp_iso_symm_single", ["polynomial"]], ["add", "theorem", "zero_to_finsupp", ["polynomial"]], ["add", "structure", "polynomial", []], ["del", "def", "polynomial", []]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["mod", "theorem", "coeff_add", ["polynomial"]], ["del", "theorem", "exists_coeff_not_mem_C_inverse", ["polynomial"]], ["del", "theorem", "mem_span_C_coeff", ["polynomial"]], ["del", "theorem", "mem_support_iff", ["polynomial"]], ["del", "theorem", "not_mem_support_iff", ["polynomial"]], ["del", "theorem", "span_le_of_coeff_mem_C_inverse", ["polynomial"]], ["del", "theorem", "sum_def", ["polynomial"]], ["add", "theorem", "support_smul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "degree_C_le", ["polynomial"]], ["add", "theorem", "degree_smul_le", ["polynomial"]], ["add", "theorem", "nat_degree_add_le", ["polynomial"]], ["mod", "theorem", "nat_degree_le_nat_degree", ["polynomial"]], ["add", "theorem", "nat_degree_smul_le", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["del", "theorem", "degree_map_le", ["polynomial"]], ["del", "theorem", "nat_degree_map_le", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "trailing_coeff_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "degree_map_le", ["polynomial"]], ["mod", "theorem", "eval_eq_finset_sum", ["polynomial"]], ["mod", "theorem", "eval_eq_sum", ["polynomial"]], ["del", "theorem", "eval₂_eq_lift_nc", ["polynomial"]], ["add", "theorem", "eval₂_to_finsupp_eq_lift_nc", ["polynomial"]], ["add", "theorem", "nat_degree_map_le", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/data/polynomial/induction.lean", "newPath": "src/data/polynomial/induction.lean", "changes": [["add", "theorem", "exists_coeff_not_mem_C_inverse", ["polynomial"]], ["add", "theorem", "mem_span_C_coeff", ["polynomial"]], ["add", "theorem", "span_le_of_coeff_mem_C_inverse", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/data/polynomial/mirror.lean", "newPath": "src/data/polynomial/mirror.lean", "changes": [["mod", "theorem", "mirror_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["del", "theorem", "C_mul_monomial", ["polynomial"]], ["add", "theorem", "card_support_le_one_iff_monomial", ["polynomial"]], ["del", "theorem", "monomial_mul_C", ["polynomial"]], ["add", "theorem", "monomial_one_eq_iff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "coeff_contract", ["polynomial"]], ["del", "theorem", "expand_eq_map_domain", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coeff_integer_normalization_of_not_mem_support", ["localization_map"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "coeff_mem_frange", ["polynomial"]], ["add", "theorem", "coeff_of_subring", ["polynomial"]], ["mod", "theorem", "coeff_to_subring'", ["polynomial"]], ["mod", "theorem", "coeff_to_subring", ["polynomial"]], ["mod", "theorem", "degree_restriction", ["polynomial"]], ["mod", "theorem", "degree_to_subring", ["polynomial"]], ["add", "def", "frange", ["polynomial"]], ["add", "theorem", "frange_one", ["polynomial"]], ["add", "theorem", "frange_zero", ["polynomial"]], ["add", "theorem", "linear_independent_powers_iff_aeval", ["polynomial"]], ["del", "theorem", "linear_independent_powers_iff_eval₂", ["polynomial"]], ["add", "theorem", "mem_frange_iff", ["polynomial"]], ["mod", "theorem", "nat_degree_to_subring", ["polynomial"]], ["mod", "theorem", "restriction_zero", ["polynomial"]], ["add", "theorem", "support_restriction", ["polynomial"]], ["add", "theorem", "support_to_subring", ["polynomial"]], ["mod", "theorem", "to_subring_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": [["add", "theorem", "support_subset_support_mat_poly_equiv", []]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["del", "theorem", "mem_supported_range", ["power_basis", "polynomial"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1620379833, "sha": "322ccc54", "message": "feat(finset/basic): downward induction for finsets (#7379)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "def", "strong_downward_induction", ["finset"]], ["add", "theorem", "strong_downward_induction_eq", ["finset"]], ["add", "def", "strong_downward_induction_on", ["finset"]], ["add", "theorem", "strong_downward_induction_on_eq", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "def", "strong_downward_induction", ["multiset"]], ["add", "theorem", "strong_downward_induction_eq", ["multiset"]], ["add", "def", "strong_downward_induction_on", ["multiset"]], ["add", "theorem", "strong_downward_induction_on_eq", ["multiset"]]]}]}, {"timestamp": 1620379831, "sha": "11a06de1", "message": "feat(order/closure): closure of unions and bUnions (#7361)\nprove closure_closure_union and similar", "changes": [{"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": [["add", "theorem", "closure_bsupr_closure", ["closure_operator"]], ["add", "theorem", "closure_inf_le", ["closure_operator"]], ["del", "theorem", "closure_inter_le", ["closure_operator"]], ["mod", "theorem", "closure_le_closed_iff_le", ["closure_operator"]], ["add", "theorem", "closure_le_mk₃_iff", ["closure_operator"]], ["add", "theorem", "closure_mem_mk₃", ["closure_operator"]], ["add", "theorem", "closure_sup_closure", ["closure_operator"]], ["add", "theorem", "closure_sup_closure_le", ["closure_operator"]], ["add", "theorem", "closure_sup_closure_left", ["closure_operator"]], ["add", "theorem", "closure_sup_closure_right", ["closure_operator"]], ["add", "theorem", "closure_supr_closure", ["closure_operator"]], ["mod", "theorem", "closure_top", ["closure_operator"]], ["del", "theorem", "closure_union_closure_le", ["closure_operator"]], ["add", "theorem", "eq_mk₃_closed", ["closure_operator"]], ["add", "theorem", "mem_mk₃_closed", ["closure_operator"]], ["add", "def", "mk₂", ["closure_operator"]], ["add", "def", "mk₃", ["closure_operator"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Sup_le_Sup_of_subset_insert_bot", []], ["del", "theorem", "Sup_le_Sup_of_subset_instert_bot", []]]}]}, {"timestamp": 1620379830, "sha": "b20e6647", "message": "feat(order/well_founded_set): Higman's Lemma (#7212)\nProves Higman's Lemma: if `r` is partially well-ordered on `s`, then `list.sublist_forall2` is partially well-ordered on the set of lists whose elements are in `s`.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["mod", "theorem", "is_pwo", ["finset"]], ["mod", "theorem", "is_wf", ["finset"]], ["mod", "theorem", "partially_well_ordered_on", ["finset"]], ["mod", "theorem", "well_founded_on", ["finset"]], ["add", "theorem", "exists_min_bad_of_exists_bad", ["set", "partially_well_ordered_on"]], ["add", "theorem", "iff_forall_not_is_bad_seq", ["set", "partially_well_ordered_on"]], ["add", "theorem", "iff_not_exists_is_min_bad_seq", ["set", "partially_well_ordered_on"]], ["add", "def", "is_bad_seq", ["set", "partially_well_ordered_on"]], ["add", "def", "is_min_bad_seq", ["set", "partially_well_ordered_on"]], ["add", "theorem", "partially_well_ordered_on_sublist_forall₂", ["set", "partially_well_ordered_on"]]]}]}, {"timestamp": 1620363603, "sha": "cd5864f3", "message": "chore(scripts): update nolints.txt (#7541)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1620363602, "sha": "6a7ddcc2", "message": "ci(.github/workflows/{build,dependent-issues}.yml): auto-cancel workflows on previous commits (#7536)\nAfter this is merged, pushing a new commit to a branch in this repo should cancel the \"continuous integration\" and \"dependent issues\" workflows running on any older commits on that branch.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".github/workflows/dependent-issues.yml", "newPath": ".github/workflows/dependent-issues.yml", "changes": []}]}, {"timestamp": 1620363601, "sha": "93f9b3de", "message": "ci(.github/workflows/build.yml): switch to trepplein (#7532)\nReduces the leanchecker time from 6+57 minutes to 6+16 minutes.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1620363599, "sha": "f44a5eb1", "message": "feat(category_theory/concrete_category): id_apply, comp_apply (#7530)\nThis PR renames\n* `category_theory.coe_id` to `category_theory.id_apply`\n* `category_theory.coe_comp` to `category_theory.comp_apply`\nThe names that are hence free up\nare then redefined for \"unapplied\" versions of the same lemmas.\nThe `elementwise` tactic uses the old lemmas (with their new names).\nWe need minor fixes in the rest of the library because of the name changes.", "changes": [{"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["mod", "theorem", "coe_comp", ["category_theory"]], ["mod", "theorem", "coe_id", ["category_theory"]], ["add", "theorem", "comp_apply", ["category_theory"]], ["add", "theorem", "id_apply", ["category_theory"]]]}, {"oldPath": "src/tactic/elementwise.lean", "newPath": "src/tactic/elementwise.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1620363599, "sha": "0ead8ee9", "message": "feat(ring_theory/localization): Characterize units in localization at prime ideal (#7519)\nAdds a few lemmas characterizing units and nonunits (elements of the maximal ideal) in the localization at a prime ideal.", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_unit_mk'_iff", ["localization_map", "at_prime"]], ["add", "theorem", "is_unit_to_map_iff", ["localization_map", "at_prime"]], ["add", "theorem", "mk'_mem_maximal_iff", ["localization_map", "at_prime"]], ["add", "theorem", "to_map_mem_maximal_iff", ["localization_map", "at_prime"]]]}]}, {"timestamp": 1620363597, "sha": "755cb75f", "message": "feat(data/list/basic): non-meta to_chunks (#7517)\nA non-meta definition of the `list.to_chunks` method, plus some basic theorems about it.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "to_chunks_aux_eq", ["list"]], ["add", "theorem", "to_chunks_aux_join", ["list"]], ["add", "theorem", "to_chunks_eq_cons'", ["list"]], ["add", "theorem", "to_chunks_eq_cons", ["list"]], ["add", "theorem", "to_chunks_join", ["list"]], ["add", "theorem", "to_chunks_length_le", ["list"]], ["add", "theorem", "to_chunks_nil", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "to_chunks", ["list"]], ["add", "def", "to_chunks_aux", ["list"]]]}]}, {"timestamp": 1620363596, "sha": "930485c1", "message": "feat(linear_algebra/tensor_product): distrib_mul_actions are inherited (#7516)\nIt turns out that `tensor_product.has_scalar` requires only `distrib_mul_action` and not `semimodule` on its components.\nAs a result, a tensor product can inherit the `distrib_mul_action` structure of its components too.\nNotably, this would enable `has_scalar (units R) (M ⊗[R] N)` in future.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1620363595, "sha": "b903ea28", "message": "chore(algebra/module/linear_map): add missing rfl lemmas (#7515)\nI've found these most useful for writing along in reverse so that I can use `linear_map.map_smul_of_tower`.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "coe_to_int_linear_map", ["add_monoid_hom"]], ["add", "theorem", "coe_to_rat_linear_map", ["add_monoid_hom"]]]}]}, {"timestamp": 1620363594, "sha": "6d25f3ae", "message": "feat(category_theory/opposites): Adds equivalences for functor categories. (#7505)\nThis PR adds the following equivalences for categories `C` and `D`:\n1. `(C ⥤ D)ᵒᵖ ≌ Cᵒᵖ ⥤ Dᵒᵖ` induced by `op` and `unop`.\n2. `(Cᵒᵖ ⥤ D)ᵒᵖ ≌ (C ⥤ Dᵒᵖ)` induced by `left_op` and `right_op`.", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "def", "left_op_right_op_equiv", ["category_theory", "functor"]], ["add", "def", "left_op_right_op_iso", ["category_theory", "functor"]], ["add", "def", "op_unop_equiv", ["category_theory", "functor"]], ["mod", "def", "op_unop_iso", ["category_theory", "functor"]], ["add", "def", "right_op_left_op_iso", ["category_theory", "functor"]], ["mod", "def", "unop_op_iso", ["category_theory", "functor"]]]}]}, {"timestamp": 1620363593, "sha": "efb283ca", "message": "feat(data/dfinsupp): add `finset_sum_apply` and `coe_finset_sum` (#7499)\nThe names of the new`add_monoid_hom`s parallel the names in my recent `quadratic_form` PR, #7417.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "coe_finset_sum", ["dfinsupp"]], ["add", "def", "coe_fn_add_monoid_hom", ["dfinsupp"]], ["add", "def", "eval_add_monoid_hom", ["dfinsupp"]], ["add", "theorem", "finset_sum_apply", ["dfinsupp"]]]}]}, {"timestamp": 1620363591, "sha": "9acbe588", "message": "feat(normed_space/normed_group_hom): add lemmas (#7468)\nFrom LTE.\nWritten by @PatrickMassot", "changes": [{"oldPath": "src/analysis/normed_space/normed_group_hom.lean", "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "theorem", "coe_ker", ["normed_group_hom"]], ["add", "theorem", "is_closed_ker", ["normed_group_hom"]], ["add", "theorem", "ker_zero", ["normed_group_hom"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "coe_ker", ["monoid_hom"]], ["add", "theorem", "ker_one", ["monoid_hom"]]]}]}, {"timestamp": 1620363590, "sha": "154fda29", "message": "feat(category_theory/subobjects): more about kernel and image subobjects (#7467)\nLemmas about factoring through kernel subobjects, and functoriality of kernel subobjects.", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/subobject/limits.lean", "newPath": "src/category_theory/subobject/limits.lean", "changes": [["add", "def", "factor_thru_kernel_subobject", ["category_theory", "limits"]], ["add", "theorem", "factor_thru_kernel_subobject_comp_arrow", ["category_theory", "limits"]], ["add", "theorem", "image_subobject_arrow_comp_eq_zero", ["category_theory", "limits"]], ["add", "def", "kernel_subobject_map", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_map_arrow", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_map_comp", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_map_id", ["category_theory", "limits"]]]}]}, {"timestamp": 1620341183, "sha": "bb1fb897", "message": "feat(data/real/basic): add real.Inf_le_iff (#7524)\nFrom LTE.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "le_iff_forall_pos_le_add", []], ["add", "theorem", "le_iff_forall_pos_lt_add", []]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "Inf_le_iff", ["real"]], ["add", "theorem", "add_pos_lt_Sup", ["real"]], ["add", "theorem", "le_Sup_iff", ["real"]], ["add", "theorem", "lt_Inf_add_pos", ["real"]]]}]}, {"timestamp": 1620341182, "sha": "e00d6e08", "message": "feat(data/polynomial/*): Specific root sets (#7510)\nAdds lemmas for the root sets of a couple specific polynomials.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "root_set_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "root_set_X_pow", ["polynomial"]], ["add", "theorem", "root_set_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "root_set_C", ["polynomial"]]]}]}, {"timestamp": 1620341181, "sha": "6f27ef7c", "message": "chore(data/equiv/basic): Show that `Pi_curry` is really just `sigma.curry` (#7497)\nExtracts some proofs to their own lemmas, and replaces definitions with existing ones.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "curry_uncurry", ["sigma"]], ["add", "theorem", "uncurry_curry", ["sigma"]]]}]}, {"timestamp": 1620341180, "sha": "9aed6c94", "message": "feat(data/finsupp,linear_algebra): `finsupp.split` is an equivalence (#7490)\nThis PR shows that for finite types `η`, `finsupp.split` is an equivalence between `(Σ (j : η), ιs j) →₀ α` and `Π j, (ιs j →₀ α)`.\nTo be used in the `bundled-basis` refactor", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "sigma_finsupp_add_equiv_pi_finsupp_apply", ["finsupp"]], ["add", "theorem", "sigma_finsupp_equiv_pi_finsupp_apply", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "sigma_finsupp_lequiv_pi_finsupp_apply", ["finsupp"]], ["add", "theorem", "sigma_finsupp_lequiv_pi_finsupp_symm_apply", ["finsupp"]]]}]}, {"timestamp": 1620341179, "sha": "48bdd1e3", "message": "feat(data/equiv,linear_algebra): `Pi_congr_right` for `mul_equiv` and `linear_equiv` (#7489)\nThis PR generalizes `equiv.Pi_congr_right` to linear equivs, adding the `mul_equiv`/`add_equiv` version as well.\nTo be used in the `bundled-basis` refactor", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "Pi_congr_right", ["mul_equiv"]], ["add", "theorem", "Pi_congr_right_refl", ["mul_equiv"]], ["add", "theorem", "Pi_congr_right_symm", ["mul_equiv"]], ["add", "theorem", "Pi_congr_right_trans", ["mul_equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "Pi_congr_right", ["linear_equiv"]], ["add", "theorem", "Pi_congr_right_refl", ["linear_equiv"]], ["add", "theorem", "Pi_congr_right_symm", ["linear_equiv"]], ["add", "theorem", "Pi_congr_right_trans", ["linear_equiv"]]]}]}, {"timestamp": 1620341178, "sha": "652357ac", "message": "feat(data/nat/choose/sum): alternate forms of the binomial theorem (#7415)", "changes": [{"oldPath": "src/data/nat/choose/sum.lean", "newPath": "src/data/nat/choose/sum.lean", "changes": [["add", "theorem", "add_pow'", ["commute"]], ["mod", "theorem", "add_pow", ["commute"]]]}]}, {"timestamp": 1620298584, "sha": "9c86e381", "message": "refactor(ring_theory/ideal/operations.lean): make is_prime.comap an instance (#7518)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "theorem", "comap", ["ideal", "is_prime"]]]}]}, {"timestamp": 1620298583, "sha": "13c41e1f", "message": "feat(category_theory/linear): linear functors (#7369)", "changes": [{"oldPath": "src/category_theory/linear/default.lean", "newPath": "src/category_theory/linear/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/linear/linear_functor.lean", "changes": [["add", "theorem", "coe_map_linear_map", ["category_theory", "functor"]], ["add", "def", "map_linear_map", ["category_theory", "functor"]], ["add", "theorem", "map_smul", ["category_theory", "functor"]]]}]}, {"timestamp": 1620281901, "sha": "7040c50c", "message": "feat(category_theory): the opposite of an abelian category is abelian (#7514)", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/opposite.lean", "changes": []}, {"oldPath": "src/category_theory/fin_category.lean", "newPath": "src/category_theory/fin_category.lean", "changes": [["add", "def", "fin_category_opposite", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "theorem", "has_finite_colimits_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_finite_coproducts_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_finite_limits_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_finite_products_opposite", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/normal_mono.lean", "newPath": "src/category_theory/limits/shapes/normal_mono.lean", "changes": [["add", "def", "normal_epi_of_normal_mono_unop", ["category_theory"]], ["add", "def", "normal_mono_of_normal_epi_unop", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/preadditive/opposite.lean", "changes": [["add", "theorem", "unop_add", ["category_theory"]], ["add", "theorem", "unop_zero", ["category_theory"]]]}]}, {"timestamp": 1620281900, "sha": "c4c6cd81", "message": "feat(linear_algebra/finsupp): linear equivalence between `α × β →₀ M` and `α →₀ β →₀ M` (#7472)\nThis PR extends the equivalence `finsupp.finsupp_prod_equiv` to a linear equivalence (to be used in the `bundled-basis` refactor).", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "finsupp_prod_lequiv_apply", ["finsupp"]], ["add", "theorem", "finsupp_prod_lequiv_symm_apply", ["finsupp"]]]}]}, {"timestamp": 1620281899, "sha": "9154a830", "message": "feat(algebra/*, ring_theory/valuation/basic): `linear_ordered_add_comm_group_with_top`, `add_valuation.map_sub` (#7452)\nDefines `linear_ordered_add_comm_group_with_top`\nUses that to port a few more facts about `valuation`s to `add_valuation`s.", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "theorem", "map_add_of_distinct_val", ["add_valuation"]], ["add", "theorem", "map_eq_of_lt_sub", ["add_valuation"]], ["add", "theorem", "map_inv", ["add_valuation"]], ["add", "theorem", "map_le_sub", ["add_valuation"]], ["add", "theorem", "map_neg", ["add_valuation"]], ["add", "theorem", "map_sub", ["add_valuation"]], ["add", "theorem", "map_sub_swap", ["add_valuation"]], ["add", "theorem", "map_units_inv", ["add_valuation"]], ["add", "theorem", "map_sub", ["valuation"]], ["add", "theorem", "map_sub_le", ["valuation"]], ["del", "theorem", "map_sub_le_max", ["valuation"]]]}]}, {"timestamp": 1620275512, "sha": "6af5fbd2", "message": "feat(category_theory/.../zero): if a zero morphism is a mono, the source is zero (#7462)\nSome simple lemmas about zero morphisms.", "changes": [{"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "zero_map", ["category_theory", "limits", "has_zero_object", "functor"]], ["add", "theorem", "zero_obj", ["category_theory", "limits", "has_zero_object", "functor"]], ["add", "theorem", "is_iso_of_source_target_iso_zero", ["category_theory", "limits"]], ["add", "def", "iso_zero_of_epi_zero", ["category_theory", "limits"]], ["add", "def", "iso_zero_of_mono_zero", ["category_theory", "limits"]]]}]}, {"timestamp": 1620258475, "sha": "009be861", "message": "feat(measure_theory/set_integral): continuous_on.measurable_at_filter (#7511)", "changes": [{"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "measurable_at_filter", ["continuous_at"]], ["add", "theorem", "measurable_at_filter", ["continuous_on"]]]}]}, {"timestamp": 1620258474, "sha": "709c73b2", "message": "feat(category_theory/Fintype): some lemmas and `Fintype_to_Profinite`. (#7491)\nAdding some lemmas for morphisms on `Fintype` as functions, as well as `Fintype_to_Profinite`.\nPart of the LTE.", "changes": [{"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": [["add", "theorem", "coe_comp", ["Fintype"]], ["add", "theorem", "coe_id", ["Fintype"]], ["add", "theorem", "comp_apply", ["Fintype"]], ["add", "theorem", "id_apply", ["Fintype"]]]}, {"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": [["add", "def", "discrete_topology", ["Fintype"]], ["add", "def", "to_Profinite", ["Fintype"]], ["add", "def", "of", ["Profinite"]]]}]}, {"timestamp": 1620258473, "sha": "1ef04bde", "message": "feat(data/finsupp): prove `f.curry x y = f (x, y)` (#7475)\nThis was surprisingly hard to prove actually!\nTo be used in the `bundled-basis` refactor", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "curry_apply", ["finsupp"]]]}]}, {"timestamp": 1620258472, "sha": "d3a46a7f", "message": "feat(algebra/big_operators): telescopic sums (#7470)\nThis is restating things we already have in a form which is\nslightly more convenient for the liquid tensor experiment", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "eq_sum_range_sub'", ["finset"]], ["add", "theorem", "eq_sum_range_sub", ["finset"]]]}]}, {"timestamp": 1620258471, "sha": "18ada66c", "message": "feat(order/filter_at_top_bot): extraction lemmas (#7469)\nfrom the liquid tensor experiment", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "eventually_at_bot_prod_self'", ["filter"]], ["add", "theorem", "eventually_at_bot_prod_self", ["filter"]], ["add", "theorem", "eventually_at_top_prod_self'", ["filter"]], ["add", "theorem", "eventually_at_top_prod_self", ["filter"]], ["add", "theorem", "extraction_forall_of_eventually'", ["filter"]], ["add", "theorem", "extraction_forall_of_eventually", ["filter"]], ["add", "theorem", "extraction_forall_of_frequently", ["filter"]], ["add", "theorem", "prod_at_bot", ["filter", "tendsto"]], ["add", "theorem", "prod_at_top", ["filter", "tendsto"]], ["add", "theorem", "prod_map_prod_at_bot", ["filter", "tendsto"]], ["add", "theorem", "prod_map_prod_at_top", ["filter", "tendsto"]], ["add", "theorem", "subseq_mem", ["filter", "tendsto"]], ["add", "theorem", "tendsto_at_bot_diagonal", ["filter"]], ["add", "theorem", "tendsto_at_top_diagonal", ["filter"]]]}]}, {"timestamp": 1620258470, "sha": "7cc367b7", "message": "feat(category_theory/subobject): minor tweaks (#7466)\nA few minor tweaks to the `subobject` API that I wanted while working on homology.", "changes": [{"oldPath": "src/category_theory/subobject/basic.lean", "newPath": "src/category_theory/subobject/basic.lean", "changes": [["add", "theorem", "of_le_mk_le_mk_of_comm", ["category_theory", "subobject"]]]}, {"oldPath": "src/category_theory/subobject/factor_thru.lean", "newPath": "src/category_theory/subobject/factor_thru.lean", "changes": [["del", "theorem", "factor_thru_comp_of_le", ["category_theory", "subobject"]], ["add", "theorem", "factor_thru_of_le", ["category_theory", "subobject"]]]}, {"oldPath": "src/category_theory/subobject/lattice.lean", "newPath": "src/category_theory/subobject/lattice.lean", "changes": [["del", "def", "top_coe_iso_self", ["category_theory", "subobject"]], ["del", "theorem", "underlying_iso_id_eq_top_coe_iso_self", ["category_theory", "subobject"]], ["add", "theorem", "underlying_iso_top_hom", ["category_theory", "subobject"]]]}]}, {"timestamp": 1620258469, "sha": "e25cbe0d", "message": "feat(category_theory/quotient): the quotient functor is full and essentially surjective (#7465)", "changes": [{"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": [["add", "theorem", "lift_map_functor_map", ["category_theory", "quotient"]]]}]}, {"timestamp": 1620258468, "sha": "19b752c4", "message": "feat(category_theory/preadditive): reformulation of mono_of_kernel_zero (#7464)", "changes": [{"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "theorem", "epi_of_cokernel_iso_zero", ["category_theory", "preadditive"]], ["mod", "theorem", "epi_of_cokernel_zero", ["category_theory", "preadditive"]], ["add", "theorem", "mono_of_kernel_iso_zero", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1620258467, "sha": "77949694", "message": "feat(category_theory/.../additive_functor): additive functors preserve zero objects (#7463)", "changes": [{"oldPath": "src/category_theory/preadditive/additive_functor.lean", "newPath": "src/category_theory/preadditive/additive_functor.lean", "changes": [["add", "def", "map_zero_object", ["category_theory", "functor"]]]}]}, {"timestamp": 1620258466, "sha": "25387b69", "message": "docs(overview): Add Stone-Weierstrass (#7449)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1620258465, "sha": "f6f810cf", "message": "doc(algebraic_hierarchy): advice for adding new typeclasses (#6854)\nThis is not intended as document describing all the design decisions behind our algebraic hierarchy, but rather some advice for contributors adding new typeclasses.\nIt can hopefully serve as a checklist for instances and definitions that should be made for any new algebraic structure being added to mathlib.\nPlease edit as you see fit, contribute new sections, etc. I haven't written anything yet about interactions with topology or order structures. Please consider this an invitation, or otherwise we can delete those headings later.\nThanks to @eric-wieser for providing the list of instances needed for each typeclass!", "changes": [{"oldPath": null, "newPath": "src/algebra/hierarchy_design.lean", "changes": []}]}, {"timestamp": 1620240621, "sha": "6d2869ce", "message": "feat(category_theory/.../images): image.pre_comp_epi_of_epi (#7460)\nThe induced map from `image (f ≫ g)` to `image g` is an epimorphism when `f` is an epimorphism.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}]}, {"timestamp": 1620240620, "sha": "79edde24", "message": "feat(topology/discrete_quotient): Add a few lemmas about discrete quotients (#7454)\nThis PR adds the `discrete_quotient.map` construction and generally improves on the `discrete_quotient` API.", "changes": [{"oldPath": "src/topology/discrete_quotient.lean", "newPath": "src/topology/discrete_quotient.lean", "changes": [["mod", "def", "comap", ["discrete_quotient"]], ["add", "theorem", "comap_comp", ["discrete_quotient"]], ["add", "theorem", "comap_id", ["discrete_quotient"]], ["add", "theorem", "comap_mono", ["discrete_quotient"]], ["add", "def", "le_comap", ["discrete_quotient"]], ["add", "theorem", "le_comap_comp", ["discrete_quotient"]], ["add", "theorem", "le_comap_id", ["discrete_quotient"]], ["add", "theorem", "le_comap_trans", ["discrete_quotient"]], ["add", "def", "map", ["discrete_quotient"]], ["add", "theorem", "map_comp", ["discrete_quotient"]], ["add", "theorem", "map_continuous", ["discrete_quotient"]], ["add", "theorem", "map_id", ["discrete_quotient"]], ["add", "theorem", "map_of_le", ["discrete_quotient"]], ["add", "theorem", "map_of_le_apply", ["discrete_quotient"]], ["add", "theorem", "map_proj", ["discrete_quotient"]], ["add", "theorem", "map_proj_apply", ["discrete_quotient"]], ["add", "theorem", "of_le_comp", ["discrete_quotient"]], ["add", "theorem", "of_le_comp_apply", ["discrete_quotient"]], ["add", "theorem", "of_le_map", ["discrete_quotient"]], ["add", "theorem", "of_le_map_apply", ["discrete_quotient"]], ["add", "theorem", "of_le_refl", ["discrete_quotient"]], ["add", "theorem", "of_le_refl_apply", ["discrete_quotient"]]]}]}, {"timestamp": 1620240619, "sha": "84d27b45", "message": "refactor(group_theory/group_action/defs): generalize smul_mul_assoc and mul_smul_comm (#7441)\nThese lemmas did not need a full algebra structure; written this way, it permits usage on `has_scalar (units R) A` given `algebra R A` (in some future PR).\nFor now, the old algebra lemmas are left behind, to minimize the scope of this patch.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "mul_smul_comm", ["algebra"]], ["del", "theorem", "smul_mul_assoc", ["algebra"]], ["del", "theorem", "smul_mul_smul", ["algebra"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "theorem", "mul_smul_comm", []], ["add", "theorem", "smul_mul_assoc", []], ["add", "theorem", "smul_mul_smul", []]]}]}, {"timestamp": 1620240618, "sha": "140e17b8", "message": "feat(algebra/direct_sum_graded): a direct_sum of copies of a ring is itself a ring (#7420)\nOnce this is in, it's straightforward to show `add_monoid_algebra R ι ≃+* ⨁ i : ι, R`", "changes": [{"oldPath": "src/algebra/direct_sum_graded.lean", "newPath": "src/algebra/direct_sum_graded.lean", "changes": [["add", "theorem", "direct_sum_mul", ["semiring"]]]}]}, {"timestamp": 1620240617, "sha": "51bc1ca4", "message": "feat(algebra/direct_sum_graded): add direct_sum.to_semiring (#7380)\nThis provides a convenient way to construct ring_homs out of `direct_sum`, and is a stronger version of `direct_sum.to_add_monoid` which applies in the presence of a `direct_sum.gmonoid` typeclass.\nThe new `direct_sum.lift_ring_hom` can be thought of as a universal property akin to `finsupp.lift_add_hom`.", "changes": [{"oldPath": "src/algebra/direct_sum_graded.lean", "newPath": "src/algebra/direct_sum_graded.lean", "changes": [["add", "def", "lift_ring_hom", ["direct_sum"]], ["add", "theorem", "ring_hom_ext'", ["direct_sum"]], ["add", "def", "to_semiring", ["direct_sum"]], ["add", "theorem", "to_semiring_coe_add_monoid_hom", ["direct_sum"]], ["add", "theorem", "to_semiring_of", ["direct_sum"]]]}]}, {"timestamp": 1620240616, "sha": "93bc7e05", "message": "feat(order): add some missing `pi` and `Prop` instances (#7268)", "changes": [{"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "inf_Prop_eq", []], ["add", "theorem", "le_Prop_eq", []], ["del", "theorem", "le_iff_imp", []], ["add", "theorem", "sup_Prop_eq", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_Prop_eq", []], ["mod", "theorem", "Sup_Prop_eq", []], ["mod", "theorem", "infi_Prop_eq", []], ["mod", "theorem", "infi_apply", []], ["mod", "theorem", "supr_Prop_eq", []], ["mod", "theorem", "supr_apply", []], ["add", "theorem", "supr_subtype''", []]]}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1620240615, "sha": "52268b89", "message": "feat(linear_algebra): Vandermonde matrices and their determinant (#7116)\nThis PR defines the `vandermonde` matrix and gives a formula for its determinant.\n@paulvanwamelen: if you would like to have `det_vandermonde` in a different form (e.g. swap the order of the variables that are being summed), please let me know!", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/vandermonde.lean", "changes": [["add", "theorem", "det_vandermonde", ["matrix"]], ["add", "def", "vandermonde", ["matrix"]], ["add", "theorem", "vandermonde_apply", ["matrix"]], ["add", "theorem", "vandermonde_cons", ["matrix"]], ["add", "theorem", "vandermonde_succ", ["matrix"]]]}]}, {"timestamp": 1620223013, "sha": "a4d5ccb6", "message": "chore(order/complete_boolean_algebra): speed up Inf_sup_Inf (#7506)\nOn my machine, avoiding `finish` takes the proof from 13s to 0.3s.", "changes": [{"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}]}, {"timestamp": 1620223012, "sha": "94150f3a", "message": "chore(group_theory/nielsen_schreier): typos in module doc-string (#7500)\nThis fixes a discrepancy between the doc-string and the rest of the file.", "changes": [{"oldPath": "src/group_theory/nielsen_schreier.lean", "newPath": "src/group_theory/nielsen_schreier.lean", "changes": []}]}, {"timestamp": 1620223011, "sha": "3a8796dd", "message": "feat(category_theory/path_category): extensionality for functors out of path category (#7494)\nThis adds an extensionality lemma for functors out of a path category, which simplifies some proofs in the free-forgetful adjunction.", "changes": [{"oldPath": "src/category_theory/category/Quiv.lean", "newPath": "src/category_theory/category/Quiv.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "eq_conj_eq_to_hom", ["category_theory"]]]}, {"oldPath": "src/category_theory/path_category.lean", "newPath": "src/category_theory/path_category.lean", "changes": [["add", "theorem", "ext_functor", ["category_theory", "paths"]]]}]}, {"timestamp": 1620223010, "sha": "18af6b57", "message": "feat(algebra/module): `linear_equiv.refl.symm = refl` (#7493)\nTo be part of the `bundled_basis` refactor", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "refl_symm", ["linear_equiv"]]]}]}, {"timestamp": 1620223009, "sha": "1823aeef", "message": "feat(algebra/module): `S`-linear equivs are also `R`-linear equivs (#7476)\nThis PR extends `linear_map.restrict_scalars` to `linear_equiv`s.\nTo be used in the `bundled-basis` refactor.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "restrict_scalars", ["linear_equiv"]]]}]}, {"timestamp": 1620223008, "sha": "9b1b8543", "message": "feat(data/fintype/basic): add set.to_finset_range (#7426)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "to_finset_range", ["set"]]]}]}, {"timestamp": 1620223007, "sha": "bb9216c0", "message": "feat(category_theory/opposites): iso.unop (#7400)", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "op_unop", ["category_theory", "iso"]], ["add", "def", "unop", ["category_theory", "iso"]], ["add", "theorem", "unop_op", ["category_theory", "iso"]]]}]}, {"timestamp": 1620223005, "sha": "78e36a71", "message": "feat(analysis/convex/extreme): extreme sets (#7357)\ndefine extreme sets", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_remove_iff_not_mem_convex_hull_remove", ["convex"]], ["add", "theorem", "open_segment_subset", ["convex"]], ["mod", "theorem", "segment_subset", ["convex"]], ["add", "theorem", "convex_iff_open_segment_subset", []], ["mod", "theorem", "convex_iff_segment_subset", []], ["add", "theorem", "left_mem_open_segment_iff", []], ["add", "theorem", "mem_open_segment_of_ne_left_right", []], ["add", "theorem", "mem_open_segment_translate", []], ["add", "def", "open_segment", []], ["add", "theorem", "open_segment_eq_Ioo'", []], ["add", "theorem", "open_segment_eq_Ioo", []], ["add", "theorem", "open_segment_eq_image'", []], ["add", "theorem", "open_segment_eq_image", []], ["add", "theorem", "open_segment_eq_image₂", []], ["add", "theorem", "open_segment_image", []], ["add", "theorem", "open_segment_same", []], ["add", "theorem", "open_segment_subset_segment", []], ["add", "theorem", "open_segment_symm", []], ["add", "theorem", "open_segment_translate_image", []], ["add", "theorem", "open_segment_translate_preimage", []], ["add", "theorem", "right_mem_open_segment_iff", []], ["mod", "theorem", "segment_eq_image'", []], ["mod", "theorem", "segment_eq_image", []], ["mod", "theorem", "segment_translate_image", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/extreme.lean", "changes": [["add", "theorem", "mem_extreme_points_iff_convex_remove", ["convex"]], ["add", "theorem", "mem_extreme_points_iff_mem_diff_convex_hull_remove", ["convex"]], ["add", "theorem", "extreme_points_convex_hull_subset", []], ["add", "theorem", "extreme_points_def", []], ["add", "theorem", "extreme_points_empty", []], ["add", "theorem", "extreme_points_singleton", []], ["add", "theorem", "extreme_points_subset", []], ["add", "theorem", "inter_extreme_points_subset_extreme_points_of_subset", []], ["add", "theorem", "Inter", ["is_extreme"]], ["add", "theorem", "antisymm", ["is_extreme"]], ["add", "theorem", "bInter", ["is_extreme"]], ["add", "theorem", "convex_diff", ["is_extreme"]], ["add", "theorem", "extreme_points_eq", ["is_extreme"]], ["add", "theorem", "extreme_points_subset_extreme_points", ["is_extreme"]], ["add", "theorem", "inter", ["is_extreme"]], ["add", "theorem", "mono", ["is_extreme"]], ["add", "theorem", "refl", ["is_extreme"]], ["add", "theorem", "sInter", ["is_extreme"]], ["add", "theorem", "trans", ["is_extreme"]], ["add", "def", "is_extreme", []], ["add", "theorem", "mem_extreme_points_iff_extreme_singleton", []], ["add", "theorem", "mem_extreme_points_iff_forall_segment", []], ["add", "def", "extreme_points", ["set"]]]}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": [["add", "theorem", "image_mul_left_Ioo", ["set"]], ["add", "theorem", "image_mul_right_Ioo", ["set"]]]}]}, {"timestamp": 1620217210, "sha": "b765d4e7", "message": "Change the bors timeout to 8 hours (#7513)\nWe've hit a 6 hour timeout repeatedly in the last few days, resulting in nothing getting built.", "changes": [{"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}]}, {"timestamp": 1620095358, "sha": "5a91d05e", "message": "feat(data/finset/lattice): add sup_image (#7428)\nThis also renames `finset.map_sup` to `finset.sup_map` to match `finset.sup_insert` and `finset.sup_singleton`.\nThe `inf` versions are added too.", "changes": [{"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": [["add", "theorem", "fold_image_idem", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_image", ["finset"]], ["add", "theorem", "inf_map", ["finset"]], ["del", "theorem", "map_inf", ["finset"]], ["del", "theorem", "map_sup", ["finset"]], ["add", "theorem", "sup_image", ["finset"]], ["add", "theorem", "sup_map", ["finset"]]]}]}, {"timestamp": 1620077502, "sha": "37735250", "message": "feat(ring_theory/finiteness): add lemmas (#7409)\nI add here some preliminary lemmas to prove that a monoid is finitely generated iff the monoid algebra is.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "mem_span_support'", ["add_monoid_algebra"]], ["mod", "theorem", "mem_span_support", ["add_monoid_algebra"]], ["add", "def", "of'", ["add_monoid_algebra"]], ["add", "theorem", "of'_apply", ["add_monoid_algebra"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "mem_adjoint_support", ["add_monoid_algebra"]], ["add", "theorem", "support_gen_of_gen'", ["add_monoid_algebra"]], ["add", "theorem", "support_gen_of_gen", ["add_monoid_algebra"]], ["add", "theorem", "mem_adjoint_support", ["monoid_algebra"]], ["add", "theorem", "support_gen_of_gen'", ["monoid_algebra"]], ["add", "theorem", "support_gen_of_gen", ["monoid_algebra"]]]}]}, {"timestamp": 1620077501, "sha": "67dad976", "message": "chore(data/fintype): rework `fintype.equiv_fin` and dependencies (#7136)\nThese changes should make the declarations `fintype.equiv_fin`, `fintype.card_eq`\nand `fintype.equiv_of_card_eq` more convenient to use.\nRenamed:\n * `fintype.equiv_fin` -> `fintype.trunc_equiv_fin`\nDeleted:\n * `fintype.nonempty_equiv_of_card_eq` (use `fintype.equiv_of_card_eq` instead)\n * `fintype.exists_equiv_fin` (use `fintype.card` and `fintype.(trunc_)equiv_fin` instead)\nAdded:\n * `fintype.equiv_fin`: noncomputable, non-`trunc` version of `fintype.equiv_fin`\n * `fintype.equiv_of_card_eq`: noncomputable, non-`trunc` version of `fintype.trunc_equiv_of_card_eq`\n * `fintype.(trunc_)equiv_fin_of_card_eq` (intermediate result/specialization of `fintype.(trunc_)equiv_of_card_eq`\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60fintype.2Eequiv_fin.60.20.2B.20.60fin.2Ecast.60)", "changes": [{"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "def", "equiv_fin", ["fintype"]], ["del", "theorem", "exists_equiv_fin", ["fintype"]], ["del", "theorem", "nonempty_equiv_of_card_eq", ["fintype"]], ["add", "def", "trunc_equiv_fin", ["fintype"]], ["add", "def", "trunc_equiv_fin_of_card_eq", ["fintype"]], ["add", "def", "trunc_equiv_of_card_eq", ["fintype"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": []}, {"oldPath": "src/logic/small.lean", "newPath": "src/logic/small.lean", "changes": []}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1620061575, "sha": "048240e8", "message": "chore(*): update to lean 3.30.0c (#7264)\nThere's quite a bit of breakage from no longer reducing `acc.rec` so aggressively. That is, a well-founded definition like `nat.factors` will no longer reduce definitionally. Where you could write `rfl` before, you might now need to write `by rw nat.factors` or `by simp [nat.factors]`.\nA more inconvenient side-effect of this change is that `dec_trivial` becomes less powerful, since it also relies on the definitional reduction. For example `nat.factors 1 = []` is no longer true by `dec_trivial` (or `rfl`). Often you can replace `dec_trivial` by `simp` or `norm_num`.\nFor extremely simple definitions that only use well-founded relations of rank ω, you could consider rewriting them to use structural recursion on a fuel parameter instead. The functions `nat.mod` and `nat.div` in core have been rewritten in this way, please consult the [corresponding Lean PR](https://github.com/leanprover-community/lean/pull/570/files) for details on the implementation.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "round_one", []], ["add", "theorem", "round_zero", []]]}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["del", "theorem", "le_imp_le_of_lt_imp_lt", []], ["del", "theorem", "le_of_not_lt", []], ["del", "theorem", "le_or_lt", []], ["del", "theorem", "lt_or_le", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "to_monoid_with_zero_hom_eq_coe", ["ring_hom"]]]}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "def", "pow_nat", ["category_theory", "equivalence"]]]}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": [["mod", "theorem", "list_of_nat_zero", ["denumerable"]], ["mod", "theorem", "decode_list_zero", ["encodable"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_bit0", ["fin"]], ["add", "theorem", "coe_bit1", ["fin"]], ["add", "theorem", "succ_one_eq_two", ["fin"]], ["add", "theorem", "zero_succ_above", ["fin"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "zero_mod", ["int"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/list/rotate.lean", "newPath": "src/data/list/rotate.lean", "changes": [["mod", "theorem", "rotate_nil", ["list"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "size_one", ["nat"]], ["mod", "theorem", "size_zero", ["nat"]]]}, {"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": [["mod", "theorem", "land_zero", ["nat"]], ["mod", "theorem", "lor_zero", ["nat"]], ["mod", "theorem", "lxor_zero", ["nat"]], ["mod", "theorem", "zero_land", ["nat"]], ["mod", "theorem", "zero_lor", ["nat"]], ["mod", "theorem", "zero_lxor", ["nat"]]]}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["mod", "theorem", "digits_aux_zero", ["nat"]]]}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["mod", "theorem", "odd_mul_odd", ["nat"]], ["mod", "theorem", "odd_of_mod_four_eq_one", ["nat"]], ["mod", "theorem", "odd_of_mod_four_eq_three", ["nat"]]]}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["add", "theorem", "unpair_zero", ["nat"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "factors_one", ["nat"]], ["mod", "theorem", "factors_zero", ["nat"]], ["mod", "theorem", "not_prime_one", ["nat"]], ["mod", "theorem", "not_prime_zero", ["nat"]], ["mod", "theorem", "prime_three", ["nat"]]]}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": [["add", "theorem", "sqrt_zero", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["mod", "theorem", "of_nat'_eq", ["num"]], ["add", "theorem", "of_nat'_zero", ["num"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "coe_one", ["padic"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": [["mod", "theorem", "factor_multiset_one", ["pnat"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "mk_neg_one_one", ["rat"]], ["add", "theorem", "mk_one_one", ["rat"]], ["add", "theorem", "mk_zero_one", ["rat"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "int_coe_eq_int_coe_iff'", ["zmod"]], ["mod", "theorem", "neg_eq_self_mod_two", ["zmod"]], ["add", "theorem", "val_mul'", ["zmod"]], ["add", "theorem", "val_neg'", ["zmod"]], ["add", "theorem", "val_one'", ["zmod"]]]}, {"oldPath": "src/data/zmod/parity.lean", "newPath": "src/data/zmod/parity.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "univ_fin2", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/number_theory/ADE_inequality.lean", "newPath": "src/number_theory/ADE_inequality.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["mod", "theorem", "card_distinct_factors_zero", ["nat", "arithmetic_function"]], ["mod", "theorem", "card_factors_one", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["mod", "theorem", "bernoulli'_zero", []], ["mod", "theorem", "bernoulli_zero", []]]}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": [["add", "theorem", "sq_ne_two_mod_four", ["int"]], ["add", "theorem", "sq_ne_two_fin_zmod_four", []]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["mod", "theorem", "constant_coeff_exp", ["power_series"]]]}, {"oldPath": "src/set_theory/game/domineering.lean", "newPath": "src/set_theory/game/domineering.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["mod", "theorem", "equiv_refl", ["pgame"]]]}, {"oldPath": "src/tactic/norm_fin.lean", "newPath": "src/tactic/norm_fin.lean", "changes": [["mod", "theorem", "zero", ["tactic", "norm_fin", "normalize_fin"]]]}, {"oldPath": "src/topology/continuous_function/stone_weierstrass.lean", "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": []}]}, {"timestamp": 1620051072, "sha": "7da83031", "message": "feat(category_theory/preadditive): Schur's lemma (#7366)\nWe prove Schur's lemma for `𝕜`-linear categories with finite dimensional hom spaces,\nover an algebraically closed field `𝕜`:\nthe hom space `X ⟶ Y` between simple objects `X` and `Y` is at most one dimensional,\nand is 1-dimensional iff `X` and `Y` are isomorphic.", "changes": [{"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["add", "def", "as_hom", ["category_theory", "End"]], ["add", "def", "of", ["category_theory", "End"]], ["add", "theorem", "is_unit_iff_is_iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/linear/default.lean", "newPath": "src/category_theory/linear/default.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": [["add", "theorem", "endomorphism_simple_eq_smul_id", ["category_theory"]], ["add", "theorem", "finrank_endomorphism_eq_one", ["category_theory"]], ["add", "theorem", "finrank_endomorphism_simple_eq_one", ["category_theory"]], ["add", "theorem", "finrank_hom_simple_simple_eq_one_iff", ["category_theory"]], ["add", "theorem", "finrank_hom_simple_simple_eq_zero_iff", ["category_theory"]], ["add", "theorem", "finrank_hom_simple_simple_eq_zero_of_not_iso", ["category_theory"]], ["add", "theorem", "finrank_hom_simple_simple_le_one", ["category_theory"]], ["del", "def", "is_iso_equiv_nonzero", ["category_theory"]], ["add", "theorem", "is_iso_iff_nonzero", ["category_theory"]], ["mod", "theorem", "is_iso_of_hom_simple", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finrank_eq_one_iff_of_nonzero'", []]]}]}, {"timestamp": 1620027718, "sha": "62c06a55", "message": "feat(data/finset/basic): a finset has card at most one iff it is contained in a singleton (#7404)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_le_one_iff", ["finset"]], ["add", "theorem", "card_le_one_iff_subset_singleton", ["finset"]], ["add", "theorem", "card_le_one_of_subsingleton", ["finset"]], ["add", "theorem", "one_lt_card_iff", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "card_le_one_iff", ["finset"]], ["del", "theorem", "card_le_one_of_subsingleton", ["finset"]], ["del", "theorem", "one_lt_card_iff", ["finset"]]]}]}, {"timestamp": 1619981988, "sha": "0cc3cd54", "message": "feat(topology/category): Profinite has colimits (#7434)\nShow that a reflective subcategory of a cocomplete category is cocomplete, and derive that `CompHaus` and `Profinite` have colimits.", "changes": [{"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["add", "theorem", "has_colimits_of_reflective", ["category_theory"]], ["add", "theorem", "has_colimits_of_shape_of_reflective", ["category_theory"]]]}, {"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": []}]}, {"timestamp": 1619965146, "sha": "c7ba3dd0", "message": "refactor(linear_algebra/eigenspace): refactor exists_eigenvalue (#7345)\nWe replace the proof of `exists_eigenvalue` with the more general fact:\n```\n/--\nEvery element `f` in a nontrivial finite-dimensional algebra `A`\nover an algebraically closed field `K`\nhas non-empty spectrum:\nthat is, there is some `c : K` so `f - c • 1` is not invertible.\n-/\nlemma exists_spectrum_of_is_alg_closed_of_finite_dimensional (𝕜 : Type*) [field 𝕜] [is_alg_closed 𝕜]\n {A : Type*} [nontrivial A] [ring A] [algebra 𝕜 A] [I : finite_dimensional 𝕜 A] (f : A) :\n ∃ c : 𝕜, ¬ is_unit (f - algebra_map 𝕜 A c) := ...\n```\nWe can then use this fact to prove Schur's lemma.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_list_prod", ["alg_hom"]], ["add", "theorem", "map_multiset_prod", ["alg_hom"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "mul_iff", ["is_unit"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_is_unit", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "prod_to_list", ["multiset"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "exists_spectrum_of_is_alg_closed_of_finite_dimensional", []]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "eq_prod_roots_of_monic_of_splits_id", ["polynomial"]], ["add", "theorem", "eq_prod_roots_of_splits_id", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "has_eigenvalue_of_has_eigenvector", ["module", "End"]]]}]}, {"timestamp": 1619952155, "sha": "58e990d9", "message": "chore(dynamics/periodic_pts): remove duplicate of nat.dvd_right_iff_eq (#7435)", "changes": [{"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["del", "theorem", "nat_dvd_iff_right", ["function"]]]}]}, {"timestamp": 1619947737, "sha": "4bd1c836", "message": "feat(topology/category/Profinite): Any continuous bijection of profinite spaces is an isomorphism. (#7430)", "changes": [{"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": [["add", "theorem", "is_closed_map", ["CompHaus"]], ["add", "theorem", "is_iso_of_bijective", ["CompHaus"]], ["add", "def", "iso_of_bijective", ["CompHaus"]]]}, {"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": [["add", "theorem", "is_closed_map", ["Profinite"]], ["add", "theorem", "is_iso_of_bijective", ["Profinite"]], ["mod", "def", "to_Profinite_adj_to_CompHaus", ["Profinite"]]]}]}, {"timestamp": 1619929639, "sha": "30f3788c", "message": "feat(topology/discrete_quotient): Discrete quotients of topological spaces (#7425)\nThis PR defines the type of discrete quotients of a topological space and provides a basic API.\nIn a subsequent PR, this will be used to show that a profinite space is the limit of its finite quotients, which will be needed for the liquid tensor experiment.", "changes": [{"oldPath": null, "newPath": "src/topology/discrete_quotient.lean", "changes": [["add", "def", "comap", ["discrete_quotient"]], ["add", "theorem", "eq_of_proj_eq", ["discrete_quotient"]], ["add", "theorem", "exists_of_compat", ["discrete_quotient"]], ["add", "theorem", "fiber_clopen", ["discrete_quotient"]], ["add", "theorem", "fiber_closed", ["discrete_quotient"]], ["add", "theorem", "fiber_eq", ["discrete_quotient"]], ["add", "theorem", "fiber_le_of_le", ["discrete_quotient"]], ["add", "theorem", "fiber_open", ["discrete_quotient"]], ["add", "def", "of_clopen", ["discrete_quotient"]], ["add", "def", "of_le", ["discrete_quotient"]], ["add", "theorem", "of_le_continuous", ["discrete_quotient"]], ["add", "theorem", "of_le_proj", ["discrete_quotient"]], ["add", "theorem", "of_le_proj_apply", ["discrete_quotient"]], ["add", "def", "proj", ["discrete_quotient"]], ["add", "theorem", "proj_continuous", ["discrete_quotient"]], ["add", "theorem", "proj_is_locally_constant", ["discrete_quotient"]], ["add", "theorem", "proj_surjective", ["discrete_quotient"]], ["add", "theorem", "refl", ["discrete_quotient"]], ["add", "def", "setoid", ["discrete_quotient"]], ["add", "theorem", "symm", ["discrete_quotient"]], ["add", "theorem", "trans", ["discrete_quotient"]], ["add", "structure", "discrete_quotient", []]]}]}, {"timestamp": 1619929638, "sha": "6d7e7563", "message": "feat(linear_algebra/char_poly): charpoly of `left_mul_matrix` (#7397)\nThis is an important ingredient for showing the field norm resp. trace of `x` is the product resp. sum of `x`'s conjugates.", "changes": [{"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": [["add", "theorem", "char_poly_left_mul_matrix", []]]}]}, {"timestamp": 1619929637, "sha": "cfc74155", "message": "feat(field_theory/polynomial_galois_group): Galois group is S_p (#7352)\nProves that a Galois group is isomorphic to S_p, under certain conditions.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "eq_conj_iff_im", ["complex"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "def", "conj_alg_equiv", ["complex"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "to_finset_empty", ["set"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "root_set_finite", ["polynomial"]]]}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "gal_action_hom_bijective_of_prime_degree", ["polynomial", "gal"]], ["add", "theorem", "gal_action_hom_bijective_of_prime_degree_aux", ["polynomial", "gal"]], ["add", "theorem", "gal_action_hom_restrict", ["polynomial", "gal"]], ["add", "theorem", "splits_ℚ_ℂ", ["polynomial", "gal"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "of_injective_apply", ["monoid_hom"]], ["add", "def", "of_left_inverse", ["monoid_hom"]], ["add", "theorem", "of_left_inverse_apply", ["monoid_hom"]], ["add", "theorem", "of_left_inverse_symm_apply", ["monoid_hom"]]]}]}, {"timestamp": 1619914661, "sha": "6624bbe7", "message": "feat(category_theory/limits): dualizing some results (#7391)\nRequested on [zulip](https://leanprover.zulipchat.com/#narrow/stream/267928-condensed-mathematics/topic/LocallyConstant.20preserves.20colimits/near/236442281).", "changes": [{"oldPath": "src/category_theory/limits/shapes/constructions/finite_products_of_binary_products.lean", "newPath": "src/category_theory/limits/constructions/finite_products_of_binary_products.lean", "changes": [["add", "def", "extend_cofan", ["category_theory"]], ["add", "def", "extend_cofan_is_colimit", ["category_theory"]], ["add", "theorem", "has_finite_coproducts_of_has_binary_and_terminal", ["category_theory"]], ["add", "def", "preserves_finite_coproducts_of_preserves_binary_and_initial", ["category_theory"]], ["add", "def", "preserves_ulift_fin_of_preserves_binary_and_initial", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": [["add", "theorem", "colimits_from_coequalizers_and_coproducts", ["category_theory", "limits"]], ["add", "theorem", "finite_colimits_from_coequalizers_and_finite_coproducts", ["category_theory", "limits"]], ["add", "theorem", "has_colimit_of_coequalizer_and_coproduct", ["category_theory", "limits"]], ["add", "def", "build_colimit", ["category_theory", "limits", "has_colimit_of_has_coproducts_of_has_coequalizers"]], ["add", "def", "build_is_colimit", ["category_theory", "limits", "has_colimit_of_has_coproducts_of_has_coequalizers"]], ["add", "def", "preserves_colimit_of_preserves_coequalizers_and_coproduct", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_preserves_coequalizers_and_coproducts", ["category_theory", "limits"]], ["add", "def", "preserves_finite_colimits_of_preserves_coequalizers_and_finite_coproducts", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "newPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "changes": [["add", "def", "is_colimit_map_cocone_binary_cofan_equiv", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_has_binary_coproduct_of_preserves_colimit", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_reflects_of_map_is_colimit", ["category_theory", "limits"]], ["add", "def", "map_is_colimit_of_preserves_of_is_colimit", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_colimit_pair"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_colimit_pair"]], ["add", "def", "of_iso_coprod_comparison", ["category_theory", "limits", "preserves_colimit_pair"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_limit_pair"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_limit_pair"]], ["add", "def", "of_iso_prod_comparison", ["category_theory", "limits", "preserves_limit_pair"]], ["del", "def", "iso", ["category_theory", "limits", "preserves_pair"]], ["del", "theorem", "iso_hom", ["category_theory", "limits", "preserves_pair"]], ["del", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_pair"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes/products.lean", "newPath": "src/category_theory/limits/preserves/shapes/products.lean", "changes": [["add", "def", "is_colimit_cofan_mk_obj_of_is_colimit", ["category_theory", "limits"]], ["add", "def", "is_colimit_map_cocone_cofan_mk_equiv", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_has_coproduct_of_preserves_colimit", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_is_colimit_cofan_mk_obj", ["category_theory", "limits"]], ["add", "theorem", "inv_hom", ["category_theory", "limits", "preserves_coproduct"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_coproduct"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_coproduct"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "coprod_comparison", ["category_theory", "limits"]], ["add", "theorem", "coprod_comparison_inl", ["category_theory", "limits"]], ["add", "theorem", "coprod_comparison_inr", ["category_theory", "limits"]], ["add", "theorem", "coprod_comparison_inv_natural", ["category_theory", "limits"]], ["add", "def", "coprod_comparison_nat_iso", ["category_theory", "limits"]], ["add", "def", "coprod_comparison_nat_trans", ["category_theory", "limits"]], ["add", "theorem", "coprod_comparison_natural", ["category_theory", "limits"]], ["mod", "def", "coprod_is_coprod", ["category_theory", "limits"]], ["add", "theorem", "map_inl_inv_coprod_comparison", ["category_theory", "limits"]], ["add", "theorem", "map_inr_inv_coprod_comparison", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "coproduct_is_coproduct", ["category_theory", "limits"]]]}]}, {"timestamp": 1619914659, "sha": "6e836c43", "message": "feat(group_theory/perm/{cycles, cycle_type}): permutations are conjugate iff they have the same cycle type (#7335)\nSlightly strengthens the induction principle `equiv.perm.cycle_induction_on`\nProves that two permutations are conjugate iff they have the same cycle type: `equiv.perm.is_conj_iff_cycle_type_eq`", "changes": [{"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["add", "theorem", "conj_gpow", []], ["add", "theorem", "conj_pow", []]]}, {"oldPath": "src/group_theory/perm/cycle_type.lean", "newPath": "src/group_theory/perm/cycle_type.lean", "changes": [["add", "theorem", "cycle_type_conj", ["equiv", "perm"]], ["add", "theorem", "filter_parts_partition_eq_cycle_type", ["equiv", "perm"]], ["add", "theorem", "is_conj_iff_cycle_type_eq", ["equiv", "perm"]], ["add", "theorem", "is_conj_of_cycle_type_eq", ["equiv", "perm"]], ["add", "theorem", "partition_eq_of_is_conj", ["equiv", "perm"]], ["add", "theorem", "parts_partition", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "card_support_conj", ["equiv", "perm"]], ["add", "theorem", "is_conj_mul", ["equiv", "perm", "disjoint"]], ["add", "theorem", "is_cycle_conj", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "support_conj", ["equiv", "perm"]]]}]}, {"timestamp": 1619914658, "sha": "106ac8e0", "message": "feat(category_theory): definition of R-linear category (#7321)", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/linear/default.lean", "changes": [["add", "def", "comp", ["category_theory", "linear"]], ["add", "def", "left_comp", ["category_theory", "linear"]], ["add", "def", "right_comp", ["category_theory", "linear"]]]}]}, {"timestamp": 1619914657, "sha": "decb556e", "message": "feat(geometry/euclidean/basic): lemmas about angles and distances (#7140)", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "angle_eq_angle_of_angle_eq_pi_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_left_midpoint_eq_pi_div_two_of_dist_eq", ["euclidean_geometry"]], ["add", "theorem", "angle_midpoint_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_right_midpoint_eq_pi_div_two_of_dist_eq", ["euclidean_geometry"]], ["add", "theorem", "dist_eq_abs_sub_dist_iff_angle_eq_zero", ["euclidean_geometry"]], ["add", "theorem", "dist_eq_abs_sub_dist_of_angle_eq_zero", ["euclidean_geometry"]], ["add", "theorem", "dist_eq_add_dist_iff_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "dist_eq_add_dist_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "dist_left_midpoint_eq_dist_right_midpoint", ["euclidean_geometry"]], ["add", "theorem", "left_dist_ne_zero_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "right_dist_ne_zero_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "inner_eq_mul_norm_iff_angle_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "inner_eq_mul_norm_of_angle_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "inner_eq_neg_mul_norm_iff_angle_eq_pi", ["inner_product_geometry"]], ["add", "theorem", "inner_eq_neg_mul_norm_of_angle_eq_pi", ["inner_product_geometry"]], ["add", "theorem", "norm_add_eq_add_norm_iff_angle_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "norm_add_eq_add_norm_of_angle_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "norm_add_eq_norm_sub_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_eq_abs_sub_norm_iff_angle_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_eq_abs_sub_norm_of_angle_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_eq_add_norm_iff_angle_eq_pi", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_eq_add_norm_of_angle_eq_pi", ["inner_product_geometry"]]]}]}, {"timestamp": 1619899678, "sha": "ea379b09", "message": "feat(topology/continuous_function): the Stone-Weierstrass theorem (#7305)\n# The Stone-Weierstrass theorem\nIf a subalgebra `A` of `C(X, ℝ)`, where `X` is a compact Hausdorff space,\nseparates points, then it is dense.\nWe argue as follows.\n* In any subalgebra `A` of `C(X, ℝ)`, if `f ∈ A`, then `abs f ∈ A.topological_closure`.\n This follows from the Weierstrass approximation theorem on `[-∥f∥, ∥f∥]` by\n approximating `abs` uniformly thereon by polynomials.\n* This ensures that `A.topological_closure` is actually a sublattice:\n if it contains `f` and `g`, then it contains the pointwise supremum `f ⊔ g`\n and the pointwise infimum `f ⊓ g`.\n* Any nonempty sublattice `L` of `C(X, ℝ)` which separates points is dense,\n by a nice argument approximating a given `f` above and below using separating functions.\n For each `x y : X`, we pick a function `g x y ∈ L` so `g x y x = f x` and `g x y y = f y`.\n By continuity these functions remain close to `f` on small patches around `x` and `y`.\n We use compactness to identify a certain finitely indexed infimum of finitely indexed supremums\n which is then close to `f` everywhere, obtaining the desired approximation.\n* Finally we put these pieces together. `L = A.topological_closure` is a nonempty sublattice\n which separates points since `A` does, and so is dense (in fact equal to `⊤`).\n## Future work\nProve the complex version for self-adjoint subalgebras `A`, by separately approximating\nthe real and imaginary parts using the real subalgebra of real-valued functions in `A`\n(which still separates points, by taking the norm-square of a separating function).\nExtend to cover the case of subalgebras of the continuous functions vanishing at infinity,\non non-compact Hausdorff spaces.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf'_const", ["finset"]], ["add", "theorem", "sup'_const", ["finset"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "frequently_map", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/algebra.lean", "newPath": "src/topology/algebra/algebra.lean", "changes": [["add", "theorem", "subalgebra_topological_closure", ["subalgebra"]], ["del", "theorem", "subring_topological_closure", ["subalgebra"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "topological_closure_coe", ["submodule"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "theorem", "topological_closure_coe", ["subsemiring"]]]}, {"oldPath": "src/topology/continuous_function/basic.lean", "newPath": "src/topology/continuous_function/basic.lean", "changes": [["add", "theorem", "continuous_set_coe", ["continuous_map"]]]}, {"oldPath": "src/topology/continuous_function/bounded.lean", "newPath": "src/topology/continuous_function/bounded.lean", "changes": [["add", "theorem", "algebra_map_apply", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/continuous_function/compact.lean", "newPath": "src/topology/continuous_function/compact.lean", "changes": [["add", "theorem", "apply_le_norm", ["continuous_map"]], ["add", "theorem", "neg_norm_le_apply", ["continuous_map"]]]}, {"oldPath": null, "newPath": "src/topology/continuous_function/stone_weierstrass.lean", "changes": [["add", "theorem", "abs_mem_subalgebra_closure", ["continuous_map"]], ["add", "def", "attach_bound", ["continuous_map"]], ["add", "theorem", "attach_bound_apply_coe", ["continuous_map"]], ["add", "theorem", "comp_attach_bound_mem_closure", ["continuous_map"]], ["add", "theorem", "continuous_map_mem_subalgebra_closure_of_separates_points", ["continuous_map"]], ["add", "theorem", "exists_mem_subalgebra_near_continuous_map_of_separates_points", ["continuous_map"]], ["add", "theorem", "exists_mem_subalgebra_near_continuous_of_separates_points", ["continuous_map"]], ["add", "theorem", "inf_mem_closed_subalgebra", ["continuous_map"]], ["add", "theorem", "inf_mem_subalgebra_closure", ["continuous_map"]], ["add", "theorem", "polynomial_comp_attach_bound", ["continuous_map"]], ["add", "theorem", "polynomial_comp_attach_bound_mem", ["continuous_map"]], ["add", "theorem", "subalgebra_topological_closure_eq_top_of_separates_points", ["continuous_map"]], ["add", "theorem", "sublattice_closure_eq_top", ["continuous_map"]], ["add", "theorem", "sup_mem_closed_subalgebra", ["continuous_map"]], ["add", "theorem", "sup_mem_subalgebra_closure", ["continuous_map"]]]}]}, {"timestamp": 1619892202, "sha": "d3c565d4", "message": "feat(category_theory/monoidal): the monoidal coherence theorem (#7324)\nThis PR contains a proof of the monoidal coherence theorem, stated in the following way: if `C` is any type, then the free monoidal category over `C` is a preorder.\nThis should immediately imply the statement needed in the `coherence` branch.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["mod", "theorem", "triangle_assoc_comp_left_inv", ["category_theory", "monoidal_category"]], ["mod", "theorem", "triangle_assoc_comp_right", ["category_theory", "monoidal_category"]], ["mod", "theorem", "triangle_assoc_comp_right_inv", ["category_theory", "monoidal_category"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/free/basic.lean", "changes": [["add", "inductive", "hom", ["category_theory", "free_monoidal_category"]], ["add", "inductive", "hom_equiv", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_comp", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_id", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_l_hom", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_l_inv", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_tensor", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_α_hom", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_α_inv", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_ρ_hom", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "mk_ρ_inv", ["category_theory", "free_monoidal_category"]], ["add", "def", "project", ["category_theory", "free_monoidal_category"]], ["add", "def", "project_map", ["category_theory", "free_monoidal_category"]], ["add", "def", "project_map_aux", ["category_theory", "free_monoidal_category"]], ["add", "def", "project_obj", ["category_theory", "free_monoidal_category"]], ["add", "def", "setoid_hom", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "tensor_eq_tensor", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "unit_eq_unit", ["category_theory", "free_monoidal_category"]], ["add", "inductive", "free_monoidal_category", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/free/coherence.lean", "changes": [["add", "def", "full_normalize", ["category_theory", "free_monoidal_category"]], ["add", "def", "full_normalize_iso", ["category_theory", "free_monoidal_category"]], ["add", "def", "inclusion", ["category_theory", "free_monoidal_category"]], ["add", "def", "inclusion_obj", ["category_theory", "free_monoidal_category"]], ["add", "def", "inverse_aux", ["category_theory", "free_monoidal_category"]], ["add", "inductive", "normal_monoidal_object", ["category_theory", "free_monoidal_category"]], ["add", "def", "normalize'", ["category_theory", "free_monoidal_category"]], ["add", "def", "normalize", ["category_theory", "free_monoidal_category"]], ["add", "def", "normalize_iso", ["category_theory", "free_monoidal_category"]], ["add", "def", "normalize_iso_app", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "normalize_iso_app_tensor", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "normalize_iso_app_unitor", ["category_theory", "free_monoidal_category"]], ["add", "def", "normalize_iso_aux", ["category_theory", "free_monoidal_category"]], ["add", "def", "normalize_map_aux", ["category_theory", "free_monoidal_category"]], ["add", "def", "normalize_obj", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "normalize_obj_tensor", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "normalize_obj_unitor", ["category_theory", "free_monoidal_category"]], ["add", "def", "tensor_func", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "tensor_func_map_app", ["category_theory", "free_monoidal_category"]], ["add", "theorem", "tensor_func_obj_map", ["category_theory", "free_monoidal_category"]]]}]}, {"timestamp": 1619882163, "sha": "790ec6b1", "message": "feat(algebra/archimedean): rat.cast_round for non-archimedean fields (#7424)\nThe theorem still applies to the non-canonical archimedean instance (at least if you use simp). I've also added `rat.cast_ceil` because it seems to fit here.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["mod", "theorem", "abs_sub_round", []], ["add", "theorem", "cast_ceil", ["rat"]], ["mod", "theorem", "cast_floor", ["rat"]], ["mod", "theorem", "cast_round", ["rat"]], ["mod", "def", "round", []]]}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": [["mod", "theorem", "terminates_iff_rat", ["generalized_continued_fraction"]]]}]}, {"timestamp": 1619882162, "sha": "92b90480", "message": "chore(topology/continuous_function/algebra): put `coe_fn_monoid_hom `into the `continuous_map` namespace (#7423)\nRather than adding `continuous_map.` to the definition, this wraps everything in a namespace to make this type of mistake unlikely to happen again.\nThis also adds `comp_monoid_hom'` to golf a proof.", "changes": [{"oldPath": "src/topology/continuous_function/algebra.lean", "newPath": "src/topology/continuous_function/algebra.lean", "changes": [["del", "def", "coe_fn_monoid_hom", []], ["add", "def", "coe_fn_monoid_hom", ["continuous_map"]], ["mod", "theorem", "coe_prod", ["continuous_map"]], ["add", "def", "comp_monoid_hom'", ["continuous_map"]], ["mod", "theorem", "div_coe", ["continuous_map"]], ["mod", "theorem", "div_comp", ["continuous_map"]], ["mod", "theorem", "inv_coe", ["continuous_map"]], ["mod", "theorem", "inv_comp", ["continuous_map"]], ["add", "theorem", "one_comp", ["continuous_map"]], ["mod", "theorem", "pow_coe", ["continuous_map"]], ["mod", "theorem", "pow_comp", ["continuous_map"]], ["mod", "theorem", "prod_apply", ["continuous_map"]], ["mod", "theorem", "smul_apply", ["continuous_map"]], ["mod", "theorem", "smul_coe", ["continuous_map"]], ["mod", "theorem", "smul_comp", ["continuous_map"]]]}]}, {"timestamp": 1619860194, "sha": "55112757", "message": "chore(measure_theory/ae_eq_fun_metric): remove useless file (#7419)\nThe file `measure_theory/ae_eq_fun_metric.lean` used to contain an edistance on the space of equivalence classes of functions. It has been replaced by the use of the `L^1` space in #5510, so this file is now useless and should be removed.", "changes": [{"oldPath": "src/measure_theory/ae_eq_fun_metric.lean", "newPath": null, "changes": [["del", "theorem", "coe_fn_edist", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_add_right", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_eq_coe'", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_eq_coe", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_mk_mk'", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_mk_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_smul", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_zero_eq_coe", ["measure_theory", "ae_eq_fun"]]]}]}, {"timestamp": 1619860193, "sha": "d04af204", "message": "feat(linear_algebra/quadratic_form): add lemmas about sums of quadratic forms (#7417)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "def", "coe_fn_add_monoid_hom", ["quadratic_form"]], ["add", "theorem", "coe_fn_sum", ["quadratic_form"]], ["add", "theorem", "coe_fn_zero", ["quadratic_form"]], ["add", "def", "eval_add_monoid_hom", ["quadratic_form"]], ["add", "theorem", "sum_apply", ["quadratic_form"]]]}]}, {"timestamp": 1619860192, "sha": "bf0f15ab", "message": "chore(algebra/algebra/basic): add missing lemmas (#7412)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "coe_refl", ["alg_equiv"]], ["add", "theorem", "coe_trans", ["alg_equiv"]], ["add", "theorem", "left_inverse_symm", ["alg_equiv"]], ["add", "theorem", "refl_to_alg_hom", ["alg_equiv"]], ["add", "theorem", "right_inverse_symm", ["alg_equiv"]], ["mod", "theorem", "trans_apply", ["alg_equiv"]], ["add", "theorem", "coe_comp", ["alg_hom"]], ["add", "theorem", "coe_id", ["alg_hom"]], ["mod", "theorem", "comp_apply", ["alg_hom"]], ["add", "theorem", "comp_to_ring_hom", ["alg_hom"]], ["mod", "theorem", "id_apply", ["alg_hom"]], ["add", "theorem", "id_to_ring_hom", ["alg_hom"]]]}]}, {"timestamp": 1619851270, "sha": "e3de4e30", "message": "fix(algebra/direct_sum_graded): replace badly-stated and slow `simps` lemmas with manual ones (#7403)\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/simps.20is.20very.20slow/near/236636962). The `simps mul` attribute on `direct_sum.ghas_mul.of_add_subgroups` was taking 44s, only to produce a lemma that wasn't very useful anyway.", "changes": [{"oldPath": "src/algebra/direct_sum_graded.lean", "newPath": "src/algebra/direct_sum_graded.lean", "changes": [["add", "theorem", "of_add_subgroups_mul", ["direct_sum", "ghas_mul"]], ["add", "theorem", "of_add_submonoids_mul", ["direct_sum", "ghas_mul"]], ["add", "theorem", "of_submodules_mul", ["direct_sum", "ghas_mul"]]]}]}, {"timestamp": 1619851269, "sha": "aa37eeea", "message": "feat(analysis/special_functions/integrals): integral of `cos x ^ n` (#7402)\nThe reduction of `∫ x in a..b, cos x ^ n`, ∀ n ∈ ℕ, 2 ≤ n, as well as the integral of `cos x ^ 2` as a special case.", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_cos_pow", []], ["add", "theorem", "integral_cos_pow_aux", []], ["add", "theorem", "integral_cos_sq", []]]}, {"oldPath": "test/integration.lean", "newPath": "test/integration.lean", "changes": []}]}, {"timestamp": 1619851268, "sha": "2cc8128f", "message": "feat(algebra/polynomial): generalize to `multiset` products (#7399)\nThis PR generalizes the results in `algebra.polynomial.big_operators` to sums and products of multisets.\nThe new multiset results are stated for `multiset.prod t`, not `(multiset.map t f).prod`. To get the latter, you can simply rewrite with `multiset.map_map`.", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["add", "theorem", "coeff_zero_multiset_prod", ["polynomial"]], ["add", "theorem", "degree_multiset_prod", ["polynomial"]], ["add", "theorem", "leading_coeff_multiset_prod'", ["polynomial"]], ["add", "theorem", "leading_coeff_multiset_prod", ["polynomial"]], ["add", "theorem", "multiset_prod_X_sub_C_coeff_card_pred", ["polynomial"]], ["add", "theorem", "multiset_prod_X_sub_C_next_coeff", ["polynomial"]], ["add", "theorem", "nat_degree_multiset_prod'", ["polynomial"]], ["add", "theorem", "nat_degree_multiset_prod_le", ["polynomial"]], ["add", "theorem", "nat_degree_multiset_prod_of_monic", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "next_coeff_multiset_prod", ["polynomial", "monic"]], ["add", "theorem", "monic_multiset_prod_of_monic", ["polynomial"]]]}]}, {"timestamp": 1619828362, "sha": "d5d22c5d", "message": "feat(algebra/squarefree): add sq_mul_squarefree lemmas (#7282)\nEvery positive natural number can be expressed as m^2 * n where n is square free. Used in #7274", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "sq_mul_squarefree", ["nat"]], ["add", "theorem", "sq_mul_squarefree_of_pos'", ["nat"]], ["add", "theorem", "sq_mul_squarefree_of_pos", ["nat"]]]}]}, {"timestamp": 1619828361, "sha": "b51cee2b", "message": "feat(data/polynomial/coeff): Add smul_eq_C_mul (#7240)\nAdding a lemma `polynomial.smul_eq_C_mul` for single variate polynomials analogous to `mv_polynomial.smul_eq_C_mul` for multivariate.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "def", "C", ["polynomial"]], ["add", "theorem", "C_0", ["polynomial"]], ["add", "theorem", "C_1", ["polynomial"]], ["add", "theorem", "C_add", ["polynomial"]], ["add", "theorem", "C_bit0", ["polynomial"]], ["add", "theorem", "C_bit1", ["polynomial"]], ["add", "theorem", "C_eq_nat_cast", ["polynomial"]], ["add", "theorem", "C_eq_zero", ["polynomial"]], ["add", "theorem", "C_inj", ["polynomial"]], ["add", "theorem", "C_mul", ["polynomial"]], ["add", "theorem", "C_pow", ["polynomial"]], ["add", "theorem", "coeff_C", ["polynomial"]], ["add", "theorem", "coeff_C_ne_zero", ["polynomial"]], ["add", "theorem", "coeff_C_zero", ["polynomial"]], ["add", "theorem", "monomial_eq_smul_X", ["polynomial"]], ["add", "theorem", "monomial_zero_left", ["polynomial"]], ["add", "theorem", "of_polynomial_ne", ["polynomial", "nontrivial"]], ["add", "theorem", "single_eq_C_mul_X", ["polynomial"]], ["add", "theorem", "sum_C_index", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["del", "def", "C", ["polynomial"]], ["del", "theorem", "C_0", ["polynomial"]], ["del", "theorem", "C_1", ["polynomial"]], ["del", "theorem", "C_add", ["polynomial"]], ["del", "theorem", "C_bit0", ["polynomial"]], ["del", "theorem", "C_bit1", ["polynomial"]], ["del", "theorem", "C_eq_nat_cast", ["polynomial"]], ["del", "theorem", "C_eq_zero", ["polynomial"]], ["del", "theorem", "C_inj", ["polynomial"]], ["del", "theorem", "C_mul", ["polynomial"]], ["del", "theorem", "C_pow", ["polynomial"]], ["del", "theorem", "coeff_C", ["polynomial"]], ["del", "theorem", "coeff_C_ne_zero", ["polynomial"]], ["del", "theorem", "coeff_C_zero", ["polynomial"]], ["del", "theorem", "monomial_eq_smul_X", ["polynomial"]], ["del", "theorem", "monomial_zero_left", ["polynomial"]], ["del", "theorem", "of_polynomial_ne", ["polynomial", "nontrivial"]], ["del", "theorem", "single_eq_C_mul_X", ["polynomial"]], ["add", "theorem", "smul_eq_C_mul", ["polynomial"]], ["del", "theorem", "sum_C_index", ["polynomial"]]]}]}, {"timestamp": 1619828360, "sha": "b88a9d14", "message": "feat(category_theory/enriched): abstract enriched categories (#7175)\n# Enriched categories\nWe set up the basic theory of `V`-enriched categories,\nfor `V` an arbitrary monoidal category.\nWe do not assume here that `V` is a concrete category,\nso there does not need to be a \"honest\" underlying category!\nUse `X ⟶[V] Y` to obtain the `V` object of morphisms from `X` to `Y`.\nThis file contains the definitions of `V`-enriched categories and\n`V`-functors.\nWe don't yet define the `V`-object of natural transformations\nbetween a pair of `V`-functors (this requires limits in `V`),\nbut we do provide a presheaf isomorphic to the Yoneda embedding of this object.\nWe verify that when `V = Type v`, all these notion reduce to the usual ones.", "changes": [{"oldPath": "src/algebra/category/Module/adjunctions.lean", "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/enriched/basic.lean", "changes": [["add", "def", "category_of_enriched_category_Type", ["category_theory"]], ["add", "theorem", "e_assoc", ["category_theory"]], ["add", "def", "e_comp", ["category_theory"]], ["add", "theorem", "e_comp_id", ["category_theory"]], ["add", "def", "e_id", ["category_theory"]], ["add", "theorem", "e_id_comp", ["category_theory"]], ["add", "def", "enriched_category_Type_equiv_category", ["category_theory"]], ["add", "def", "enriched_category_Type_of_category", ["category_theory"]], ["add", "def", "comp", ["category_theory", "enriched_functor"]], ["add", "def", "forget", ["category_theory", "enriched_functor"]], ["add", "def", "id", ["category_theory", "enriched_functor"]], ["add", "structure", "enriched_functor", ["category_theory"]], ["add", "def", "enriched_functor_Type_equiv_functor", ["category_theory"]], ["add", "def", "enriched_nat_trans_yoneda", ["category_theory"]], ["add", "def", "enriched_nat_trans_yoneda_Type_iso_yoneda_nat_trans", ["category_theory"]], ["add", "def", "hom_of", ["category_theory", "forget_enrichment"]], ["add", "theorem", "hom_of_hom_to", ["category_theory", "forget_enrichment"]], ["add", "def", "hom_to", ["category_theory", "forget_enrichment"]], ["add", "theorem", "hom_to_hom_of", ["category_theory", "forget_enrichment"]], ["add", "def", "of", ["category_theory", "forget_enrichment"]], ["add", "theorem", "of_to", ["category_theory", "forget_enrichment"]], ["add", "def", "to", ["category_theory", "forget_enrichment"]], ["add", "theorem", "to_of", ["category_theory", "forget_enrichment"]], ["add", "def", "forget_enrichment", ["category_theory"]], ["add", "theorem", "forget_enrichment_comp", ["category_theory"]], ["add", "theorem", "forget_enrichment_id'", ["category_theory"]], ["add", "theorem", "forget_enrichment_id", ["category_theory"]], ["add", "structure", "graded_nat_trans", ["category_theory"]], ["add", "def", "transport_enrichment", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "unitors_inv_equal", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/center.lean", "newPath": "src/category_theory/monoidal/center.lean", "changes": [["add", "theorem", "ext", ["category_theory", "center"]], ["add", "def", "of_braided", ["category_theory", "center"]], ["add", "def", "of_braided_obj", ["category_theory", "center"]], ["add", "theorem", "tensor_unit_β", ["category_theory", "center"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["add", "theorem", "associativity_inv", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "left_unitality_inv", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "right_unitality_inv", ["category_theory", "lax_monoidal_functor"]]]}, {"oldPath": "src/category_theory/monoidal/internal/types.lean", "newPath": "src/category_theory/monoidal/internal/types.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": [["add", "theorem", "associator_hom_apply", ["category_theory"]], ["add", "theorem", "associator_inv_apply", ["category_theory"]], ["add", "theorem", "braiding_hom_apply", ["category_theory"]], ["add", "theorem", "braiding_inv_apply", ["category_theory"]], ["add", "def", "coyoneda_tensor_unit", ["category_theory"]], ["add", "theorem", "left_unitor_hom_apply", ["category_theory"]], ["add", "theorem", "left_unitor_inv_apply", ["category_theory"]], ["del", "theorem", "associator_hom_apply", ["category_theory", "monoidal"]], ["del", "theorem", "associator_inv_apply", ["category_theory", "monoidal"]], ["del", "theorem", "braiding_hom_apply", ["category_theory", "monoidal"]], ["del", "theorem", "braiding_inv_apply", ["category_theory", "monoidal"]], ["del", "theorem", "left_unitor_hom_apply", ["category_theory", "monoidal"]], ["del", "theorem", "left_unitor_inv_apply", ["category_theory", "monoidal"]], ["del", "theorem", "right_unitor_hom_apply", ["category_theory", "monoidal"]], ["del", "theorem", "right_unitor_inv_apply", ["category_theory", "monoidal"]], ["del", "theorem", "tensor_apply", ["category_theory", "monoidal"]], ["add", "theorem", "right_unitor_hom_apply", ["category_theory"]], ["add", "theorem", "right_unitor_inv_apply", ["category_theory"]], ["add", "theorem", "tensor_apply", ["category_theory"]]]}]}, {"timestamp": 1619828359, "sha": "802c5b5a", "message": "feat(linear_algebra/determinant): various operations preserve the determinant (#7115)\nThese are a couple of helper lemmas for computing the determinant of a Vandermonde matrix.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "update_column_eq_self", ["matrix"]], ["add", "theorem", "update_row_eq_self", ["matrix"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_eq_of_eq_det_one_mul", ["matrix"]], ["add", "theorem", "det_eq_of_eq_mul_det_one", ["matrix"]], ["add", "theorem", "det_eq_of_forall_col_eq_smul_add_pred", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_const", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_const_aux", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_pred", ["matrix"]], ["add", "theorem", "det_eq_of_forall_row_eq_smul_add_pred_aux", ["matrix"]], ["add", "theorem", "det_mul_column", ["matrix"]], ["add", "theorem", "det_mul_row", ["matrix"]], ["add", "theorem", "det_update_column_add_self", ["matrix"]], ["add", "theorem", "det_update_column_add_smul_self", ["matrix"]], ["add", "theorem", "det_update_row_add_self", ["matrix"]], ["add", "theorem", "det_update_row_add_smul_self", ["matrix"]], ["add", "theorem", "det_zero_of_column_eq", ["matrix"]]]}]}, {"timestamp": 1619828358, "sha": "6c617793", "message": "refactor(group_theory/order_of_element): use minimal_period for the definition (#7082)\nThis PR redefines `order_of_element` in terms of `function.minimal_period`. It furthermore introduces a predicate on elements of a finite group to be of finite order.\nCo-authored by: Damiano Testa adomani@gmail.com", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "mul_one_eq_id", []], ["add", "theorem", "one_mul_eq_id", []]]}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": [["mod", "theorem", "add_left_iterate", []], ["mod", "theorem", "add_right_iterate", []], ["add", "theorem", "add_right_iterate_apply_zero", []], ["add", "theorem", "function_commute_mul_left", ["commute"]], ["add", "theorem", "function_commute_mul_right", ["commute"]], ["mod", "theorem", "mul_left_iterate", []], ["mod", "theorem", "mul_right_iterate", []], ["add", "theorem", "mul_right_iterate_apply_one", []], ["add", "theorem", "function_semiconj_mul_left", ["semiconj_by"]], ["add", "theorem", "function_semiconj_mul_right_swap", ["semiconj_by"]]]}, {"oldPath": "src/algebra/regular.lean", "newPath": "src/algebra/regular.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "minimal_period_of_comp_dvd_lcm", ["function", "commute"]], ["add", "theorem", "is_fixed_point_iff_minimal_period_eq_one", ["function"]], ["add", "theorem", "iterate_eq_mod_minimal_period", ["function"]], ["add", "theorem", "minimal_period_eq_minimal_period_iff", ["function"]], ["add", "theorem", "minimal_period_eq_prime", ["function"]], ["add", "theorem", "minimal_period_eq_prime_pow", ["function"]], ["add", "theorem", "minimal_period_id", ["function"]], ["add", "theorem", "minimal_period_iterate_eq_div_gcd'", ["function"]], ["add", "theorem", "minimal_period_iterate_eq_div_gcd", ["function"]], ["add", "theorem", "nat_dvd_iff_right", ["function"]], ["add", "theorem", "not_is_periodic_pt_of_pos_of_lt_minimal_period", ["function"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "add_order_eq_card_gmultiples", []], ["mod", "theorem", "add_order_of_dvd_card_univ", []], ["mod", "theorem", "add_order_of_dvd_iff_nsmul_eq_zero", []], ["mod", "theorem", "add_order_of_dvd_of_nsmul_eq_zero", []], ["mod", "theorem", "add_order_of_eq_add_order_of_iff", []], ["mod", "theorem", "add_order_of_eq_card_multiples", []], ["mod", "theorem", "add_order_of_eq_one_iff", []], ["mod", "theorem", "add_order_of_eq_prime", []], ["mod", "theorem", "add_order_of_eq_prime_pow", []], ["del", "theorem", "add_order_of_eq_zero", []], ["mod", "theorem", "add_order_of_injective", []], ["mod", "theorem", "add_order_of_le_card_univ", []], ["del", "theorem", "add_order_of_le_of_nsmul_eq_zero'", []], ["mod", "theorem", "add_order_of_le_of_nsmul_eq_zero", []], ["mod", "theorem", "add_order_of_nsmul''", []], ["mod", "theorem", "add_order_of_nsmul", []], ["mod", "theorem", "add_order_of_nsmul_eq_zero", []], ["mod", "theorem", "add_order_of_of_mul_eq_order_of", []], ["del", "theorem", "add_order_of_pos'", []], ["mod", "theorem", "add_order_of_pos", []], ["mod", "theorem", "add_order_of_zero", []], ["mod", "theorem", "card_nsmul_eq_zero", []], ["mod", "theorem", "order_of_mul_dvd_lcm", ["commute"]], ["mod", "theorem", "exists_gpow_eq_one", []], ["mod", "theorem", "exists_gsmul_eq_zero", []], ["mod", "theorem", "exists_nsmul_eq_self_of_coprime", []], ["mod", "theorem", "exists_nsmul_eq_zero", []], ["mod", "theorem", "exists_pow_eq_one", []], ["mod", "theorem", "exists_pow_eq_self_of_coprime", []], ["mod", "theorem", "fin_equiv_gmultiples_apply", []], ["mod", "theorem", "fin_equiv_gmultiples_symm_apply", []], ["mod", "theorem", "fin_equiv_gpowers_apply", []], ["mod", "theorem", "fin_equiv_gpowers_symm_apply", []], ["mod", "theorem", "fin_equiv_multiples_apply", []], ["mod", "theorem", "fin_equiv_multiples_symm_apply", []], ["mod", "theorem", "fin_equiv_powers_apply", []], ["mod", "theorem", "fin_equiv_powers_symm_apply", []], ["mod", "theorem", "gcd_nsmul_card_eq_zero_iff", []], ["mod", "theorem", "gmultiples_equiv_gmultiples_apply", []], ["mod", "theorem", "gpow_eq_mod_order_of", []], ["mod", "theorem", "gpowers_equiv_gpowers_apply", []], ["mod", "theorem", "gsmul_eq_mod_add_order_of", []], ["mod", "theorem", "image_range_add_order_of", []], ["mod", "theorem", "image_range_order_of", []], ["add", "def", "is_of_fin_add_order", []], ["add", "theorem", "is_of_fin_add_order_iff_nsmul_eq_zero", []], ["add", "theorem", "is_of_fin_add_order_of_mul_iff", []], ["add", "def", "is_of_fin_order", []], ["add", "theorem", "is_of_fin_order_iff_pow_eq_one", []], ["add", "theorem", "is_of_fin_order_of_add_iff", []], ["add", "theorem", "is_periodic_pt_add_iff_nsmul_eq_zero", []], ["add", "theorem", "is_periodic_pt_mul_iff_pow_eq_one", []], ["mod", "theorem", "mem_gmultiples_iff_mem_range_add_order_of", []], ["mod", "theorem", "mem_gpowers_iff_mem_range_order_of", []], ["mod", "theorem", "mem_multiples_iff_mem_gmultiples", []], ["mod", "theorem", "mem_multiples_iff_mem_range_add_order_of", []], ["mod", "theorem", "mem_powers_iff_mem_gpowers", []], ["mod", "theorem", "mem_powers_iff_mem_range_order_of", []], ["mod", "theorem", "multiples_eq_gmultiples", []], ["mod", "theorem", "multiples_equiv_multiples_apply", []], ["mod", "theorem", "nsmul_eq_mod_add_order_of", []], ["add", "theorem", "nsmul_ne_zero_of_lt_add_order_of'", []], ["mod", "theorem", "order_eq_card_gpowers", []], ["mod", "theorem", "order_eq_card_powers", []], ["mod", "theorem", "order_of_dvd_card_univ", []], ["mod", "theorem", "order_of_dvd_iff_pow_eq_one", []], ["mod", "theorem", "order_of_dvd_of_pow_eq_one", []], ["mod", "theorem", "order_of_eq_one_iff", []], ["mod", "theorem", "order_of_eq_order_of_iff", []], ["mod", "theorem", "order_of_eq_prime", []], ["mod", "theorem", "order_of_eq_prime_pow", []], ["mod", "theorem", "order_of_eq_zero", []], ["mod", "theorem", "order_of_injective", []], ["mod", "theorem", "order_of_le_card_univ", []], ["del", "theorem", "order_of_le_of_pow_eq_one'", []], ["mod", "theorem", "order_of_le_of_pow_eq_one", []], ["mod", "theorem", "order_of_of_add_eq_add_order_of", []], ["mod", "theorem", "order_of_one", []], ["mod", "theorem", "order_of_pos'", []], ["mod", "theorem", "order_of_pos", []], ["mod", "theorem", "order_of_pow''", []], ["mod", "theorem", "order_of_pow", []], ["mod", "theorem", "order_of_subgroup", []], ["mod", "theorem", "order_of_submonoid", []], ["mod", "theorem", "pow_card_eq_one", []], ["mod", "theorem", "pow_eq_mod_order_of", []], ["add", "theorem", "pow_eq_one_of_lt_order_of'", []], ["mod", "theorem", "pow_gcd_card_eq_one_iff", []], ["mod", "theorem", "pow_injective_aux", []], ["mod", "theorem", "pow_injective_of_lt_order_of", []], ["mod", "theorem", "pow_order_of_eq_one", []], ["mod", "theorem", "powers_eq_gpowers", []], ["mod", "theorem", "powers_equiv_powers_apply", []], ["mod", "theorem", "sum_card_add_order_of_eq_card_nsmul_eq_zero", []], ["mod", "theorem", "sum_card_order_of_eq_card_pow_eq_one", []]]}, {"oldPath": "src/group_theory/specific_groups/dihedral.lean", "newPath": "src/group_theory/specific_groups/dihedral.lean", "changes": []}, {"oldPath": "src/group_theory/specific_groups/quaternion.lean", "newPath": "src/group_theory/specific_groups/quaternion.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1619813482, "sha": "16c8f7f3", "message": "feat(algebraic_geometry/prime_spectrum): Basic opens are compact (#7411)\nThis proves that basic opens are compact in the zariski topology. Compactness of the whole space is then realized as a special case. Also adds a few lemmas about zero loci.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["add", "theorem", "basic_open_le_basic_open_iff", ["prime_spectrum"]], ["add", "theorem", "basic_open_mul_le_left", ["prime_spectrum"]], ["add", "theorem", "basic_open_mul_le_right", ["prime_spectrum"]], ["add", "theorem", "is_compact_basic_open", ["prime_spectrum"]], ["add", "theorem", "zero_locus_subset_zero_locus_iff", ["prime_spectrum"]], ["add", "theorem", "zero_locus_subset_zero_locus_singleton_iff", ["prime_spectrum"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "radical_le_radical_iff", ["ideal"]]]}]}, {"timestamp": 1619813481, "sha": "aebe7552", "message": "refactor(algebra/group_power): put lemmas about order and power in their own file (#7398)\nThis means `group_power/basic` has fewer dependencies, making it accessible earlier in the import graph.\nThe first two lemmas in this `basic` were moved to the end of `order`, but otherwise lemmas have been moved without modification and kept in the same order.\nThe new imports added in other files are the ones needed to make this build.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "abs_le_abs_of_sq_le_sq", []], ["del", "theorem", "abs_le_of_sq_le_sq'", []], ["del", "theorem", "abs_le_of_sq_le_sq", []], ["del", "theorem", "abs_lt_abs_of_sq_lt_sq", []], ["del", "theorem", "abs_lt_of_sq_lt_sq'", []], ["del", "theorem", "abs_lt_of_sq_lt_sq", []], ["del", "theorem", "abs_neg_one_pow", []], ["del", "theorem", "abs_sq", []], ["del", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_le_one", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_pos", ["canonically_ordered_semiring"]], ["del", "theorem", "eq_of_sq_eq_sq", []], ["del", "theorem", "gsmul_nonneg", []], ["del", "theorem", "le_of_pow_le_pow", []], ["del", "theorem", "lt_of_pow_lt_pow", []], ["del", "theorem", "nsmul_le_nsmul", []], ["del", "theorem", "nsmul_le_nsmul_of_le_right", []], ["del", "theorem", "nsmul_lt_nsmul", []], ["del", "theorem", "nsmul_nonneg", []], ["del", "theorem", "nsmul_pos", []], ["del", "theorem", "one_le_pow_of_one_le", []], ["del", "theorem", "pow_abs", []], ["del", "theorem", "pow_add_pow_le", []], ["del", "theorem", "pow_bit0_nonneg", []], ["del", "theorem", "pow_bit0_pos", []], ["del", "theorem", "pow_le_pow", []], ["del", "theorem", "pow_le_pow_of_le_left", []], ["del", "theorem", "pow_left_inj", []], ["del", "theorem", "pow_lt_pow", []], ["del", "theorem", "pow_lt_pow_iff", []], ["del", "theorem", "pow_lt_pow_of_lt_left", []], ["del", "theorem", "pow_mono", []], ["del", "theorem", "pow_nonneg", []], ["del", "theorem", "pow_pos", []], ["del", "theorem", "sq_abs", []], ["del", "theorem", "sq_le_sq'", []], ["del", "theorem", "sq_le_sq", []], ["del", "theorem", "sq_lt_sq'", []], ["del", "theorem", "sq_lt_sq", []], ["del", "theorem", "sq_nonneg", []], ["del", "theorem", "sq_pos_of_ne_zero", []], ["del", "theorem", "strict_mono_incr_on_pow", []], ["del", "theorem", "strict_mono_pow", []], ["del", "theorem", "two_mul_le_add_sq", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group_power/order.lean", "changes": [["add", "theorem", "abs_le_abs_of_sq_le_sq", []], ["add", "theorem", "abs_le_of_sq_le_sq'", []], ["add", "theorem", "abs_le_of_sq_le_sq", []], ["add", "theorem", "abs_lt_abs_of_sq_lt_sq", []], ["add", "theorem", "abs_lt_of_sq_lt_sq'", []], ["add", "theorem", "abs_lt_of_sq_lt_sq", []], ["add", "theorem", "abs_neg_one_pow", []], ["add", "theorem", "abs_sq", []], ["add", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_le_one", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_pos", ["canonically_ordered_semiring"]], ["add", "theorem", "eq_of_sq_eq_sq", []], ["add", "theorem", "gsmul_nonneg", []], ["add", "theorem", "le_of_pow_le_pow", []], ["add", "theorem", "lt_of_pow_lt_pow", []], ["add", "theorem", "nsmul_le_nsmul", []], ["add", "theorem", "nsmul_le_nsmul_of_le_right", []], ["add", "theorem", "nsmul_lt_nsmul", []], ["add", "theorem", "nsmul_nonneg", []], ["add", "theorem", "nsmul_pos", []], ["add", "theorem", "one_le_pow_of_one_le", []], ["add", "theorem", "pow_abs", []], ["add", "theorem", "pow_add_pow_le", []], ["add", "theorem", "pow_bit0_nonneg", []], ["add", "theorem", "pow_bit0_pos", []], ["add", "theorem", "pow_le_pow", []], ["add", "theorem", "pow_le_pow_of_le_left", []], ["add", "theorem", "pow_left_inj", []], ["add", "theorem", "pow_lt_pow", []], ["add", "theorem", "pow_lt_pow_iff", []], ["add", "theorem", "pow_lt_pow_of_lt_left", []], ["add", "theorem", "pow_mono", []], ["add", "theorem", "pow_nonneg", []], ["add", "theorem", "pow_pos", []], ["add", "theorem", "sq_abs", []], ["add", "theorem", "sq_le_sq'", []], ["add", "theorem", "sq_le_sq", []], ["add", "theorem", "sq_lt_sq'", []], ["add", "theorem", "sq_lt_sq", []], ["add", "theorem", "sq_nonneg", []], ["add", "theorem", "sq_pos_of_ne_zero", []], ["add", "theorem", "strict_mono_incr_on_pow", []], ["add", "theorem", "strict_mono_pow", []], ["add", "theorem", "two_mul_le_add_sq", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1619813479, "sha": "6d5a120f", "message": "refactor(linear_algebra/eigenspace): cleanup proof (#7337)\nAt some point we changed the proof of `exists_eigenvalue` so that it used the fact that any endomorphism of a vector space is integral. This means we don't actually need to pick a nonzero vector at any point, but the proof had been left in a hybrid state, which I've now cleaned up.\nIn a later PR I'll generalise this proof so it proves Schur's lemma.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1619813478, "sha": "5800f69a", "message": "feat(category_theory/Quiv): the free/forgetful adjunction between Cat and Quiv (#7158)", "changes": [{"oldPath": null, "newPath": "src/category_theory/category/Quiv.lean", "changes": [["add", "def", "free", ["category_theory", "Cat"]], ["add", "def", "adj", ["category_theory", "Quiv"]], ["add", "def", "forget", ["category_theory", "Quiv"]], ["add", "def", "lift", ["category_theory", "Quiv"]], ["add", "def", "of", ["category_theory", "Quiv"]], ["add", "def", "Quiv", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["mod", "structure", "functor", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/path_category.lean", "changes": [["add", "def", "compose_path", ["category_theory"]], ["add", "theorem", "compose_path_comp", ["category_theory"]], ["add", "def", "of", ["category_theory", "paths"]], ["add", "def", "paths", ["category_theory"]], ["add", "theorem", "map_path_comp'", ["category_theory", "prefunctor"]]]}, {"oldPath": "src/combinatorics/quiver.lean", "newPath": "src/combinatorics/quiver.lean", "changes": [["add", "def", "comp", ["prefunctor"]], ["add", "def", "id", ["prefunctor"]], ["add", "def", "map_path", ["prefunctor"]], ["add", "theorem", "map_path_comp", ["prefunctor"]], ["add", "theorem", "map_path_cons", ["prefunctor"]], ["add", "theorem", "map_path_nil", ["prefunctor"]], ["add", "structure", "prefunctor", []], ["mod", "inductive", "path", ["quiver"]]]}]}, {"timestamp": 1619794500, "sha": "64fdfc74", "message": "feat(category_theory/sites): construct a presieve from an indexed family of arrows (#7413)\nFor the LTE: alternate constructors for presieves which can be more convenient.", "changes": [{"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": [["del", "inductive", "pullback_arrows", ["category_theory"]], ["del", "theorem", "pullback_arrows_comm", ["category_theory"]], ["del", "theorem", "pullback_singleton", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "inductive", "of_arrows", ["category_theory", "presieve"]], ["add", "theorem", "of_arrows_bind", ["category_theory", "presieve"]], ["add", "theorem", "of_arrows_pullback", ["category_theory", "presieve"]], ["add", "theorem", "of_arrows_punit", ["category_theory", "presieve"]], ["add", "inductive", "pullback_arrows", ["category_theory", "presieve"]], ["add", "theorem", "pullback_singleton", ["category_theory", "presieve"]], ["add", "theorem", "pullback_arrows_comm", ["category_theory", "sieve"]]]}, {"oldPath": "src/category_theory/sites/spaces.lean", "newPath": "src/category_theory/sites/spaces.lean", "changes": []}]}, {"timestamp": 1619777647, "sha": "4722dd46", "message": "feat(ring_theory/finiteness): add add_monoid_algebra.ft_of_fg (#7265)\nThis is from `lean_liquid`. We prove `add_monoid_algebra.ft_of_fg`: if `M` is a finitely generated monoid then `add_monoid_algebra R M` if finitely generated as `R-alg`.\nThe converse is also true, but the proof is longer and I wanted to keep the PR small.\n- [x] depends on: #7279", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "mem_to_add_submonoid", ["submodule"]]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "induction_on", ["add_monoid_algebra"]], ["add", "def", "to_multiplicative_alg_equiv", ["add_monoid_algebra"]], ["add", "theorem", "induction_on", ["monoid_algebra"]], ["add", "def", "to_additive_alg_equiv", ["monoid_algebra"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "mv_polynomial_aeval_of_surjective_of_closure", ["add_monoid_algebra"]], ["add", "theorem", "mv_polynomial_aeval_of_surjective_of_closure", ["monoid_algebra"]]]}]}, {"timestamp": 1619777646, "sha": "4a94b28f", "message": "feat(category_theory/sites): Sheaves of structures (#5927)\nDefine sheaves on a site taking values in an arbitrary category.\nJoint with @kbuzzard. cc: @jcommelin, this is a step towards condensed abelian groups.\nI don't love the names here, design advice (particularly from those who'll use this) more than appreciated.\nThe main points are:\n- An `A`-valued presheaf `P : C^op => A` is defined to be a sheaf (for the topology J) iff for every `X : A`, the type-valued presheaves of sets given by sending `U : C^op` to `Hom_{A}(X, P U)` are all sheaves of sets.\n- When `A = Type`, this recovers the basic definition of sheaves of sets.\n- An alternate definition when `C` is small, has pullbacks and `A` has products is given by an equalizer condition `is_sheaf'`.\n- This is equivalent to the earlier definition.\n- When `A = Type`, this is definitionally equal to the equalizer condition for presieves in sheaf_of_types.lean\n- When `A` has limits and there is a functor `s : A => Type` which is faithful, reflects isomorphisms and preserves limits, then `P : C^op => A` is a sheaf iff the underlying presheaf of types `P >>> s : C^op => Type` is a sheaf. (cf https://stacks.math.columbia.edu/tag/0073, which is a weaker version of this statement (it's only over spaces, not sites) and https://stacks.math.columbia.edu/tag/00YR (a), which additionally assumes filtered colimits).\nA couple of questions for reviewers:\n- We've now got a ton of equivalent ways of showing something's a sheaf, and it's not the easiest to navigate between them. Is there a nice way around this? I think it's still valuable to have all the ways, since each can be helpful in different contexts but it makes the API a bit opaque. There's also a bit of inconsistency - there's a definition `yoneda_sheaf_condition` which is the same as `is_sheaf_for` but the equalizer conditions at the bottom of sheaf_of_types aren't named, they're just some `nonempty (is_limit (fork.of_ι _ (w P R)))` even though they're also equivalent.\n- The name `presieve.is_sheaf` is stupid, I think I was just lazy with namespaces. I think `presieve.family_of_elements` and `presieve.is_sheaf_for` are still sensible, since they are relative to a presieve, but `is_sheaf` doesn't have any reference to presieves in its type. \n- The equalizer condition of sheaves of types is definitionally the same as the equalizer condition for sheaves of structures, so is there any point in having the former version in the library - the latter is just more general (the same doesn't apply to the actual def of sheaves of structures since that's defined in terms of sheaves of types). The main downside I can see is that it might make the proofs of `equalizer_sheaf_condition` a bit trickier, but that's about it", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "def", "Sheaf", ["category_theory"]], ["add", "def", "Sheaf_equiv_SheafOfTypes", ["category_theory"]], ["add", "def", "Sheaf_to_presheaf", ["category_theory"]], ["add", "theorem", "is_sheaf_iff_is_sheaf_of_type", ["category_theory"]], ["add", "def", "first_map", ["category_theory", "presheaf"]], ["add", "def", "first_obj", ["category_theory", "presheaf"]], ["add", "def", "fork_map", ["category_theory", "presheaf"]], ["add", "def", "is_sheaf'", ["category_theory", "presheaf"]], ["add", "def", "is_sheaf", ["category_theory", "presheaf"]], ["add", "def", "is_sheaf_for_is_sheaf_for'", ["category_theory", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_sheaf'", ["category_theory", "presheaf"]], ["add", "theorem", "is_sheaf_iff_is_sheaf_forget", ["category_theory", "presheaf"]], ["add", "def", "second_map", ["category_theory", "presheaf"]], ["add", "def", "second_obj", ["category_theory", "presheaf"]], ["add", "theorem", "w", ["category_theory", "presheaf"]]]}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "theorem", "generate_sieve", ["category_theory", "sieve"]]]}]}, {"timestamp": 1619761443, "sha": "f36cc164", "message": "chore(topology/category): some lemmas for Profinite functions (#7414)\nAdds `concrete_category` and `has_forget₂` instances for Profinite, and `id_app` and `comp_app` lemmas.", "changes": [{"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": [["add", "theorem", "coe_comp", ["Profinite"]], ["add", "theorem", "coe_id", ["Profinite"]], ["mod", "def", "Profinite_to_Top", []]]}]}, {"timestamp": 1619761442, "sha": "c914e8f5", "message": "refactor(data/fin): define neg like sub (#7408)\nDefine negation on fin in the same way as subtraction, i.e., using nat.mod (instead of computing it in the integers).", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "cast_pred_one", ["fin"]]]}]}, {"timestamp": 1619761441, "sha": "39a1cf0b", "message": "feat(group/hom_instances): add composition operators (#7407)\nThis adds the analogous definitions to those we have for `linear_map`, namely:\n* `monoid_hom.comp_hom'` (c.f. `linear_map.lcomp`, `l` = `linear`)\n* `monoid_hom.compl₂` (c.f. `linear_map.compl₂`, `l` = `left`)\n* `monoid_hom.compr₂` (c.f. `linear_map.compr₂`, `r` = `right`)\nWe already have `monoid_hom.comp_hom` (c.f. `linear_map.llcomp`, `ll` = `linear linear`)\nIt also adds an `ext_iff₂` lemma, which is occasionally useful (but not present for any other time at the moment).\nThe order of definitions in the file has been shuffled slightly to permit addition of a subheading to group things in doc-gen", "changes": [{"oldPath": "src/algebra/group/hom_instances.lean", "newPath": "src/algebra/group/hom_instances.lean", "changes": [["add", "theorem", "map_mul_iff", ["add_monoid_hom"]], ["add", "def", "comp_hom'", ["monoid_hom"]], ["add", "def", "compl₂", ["monoid_hom"]], ["add", "theorem", "compl₂_apply", ["monoid_hom"]], ["add", "def", "compr₂", ["monoid_hom"]], ["add", "theorem", "compr₂_apply", ["monoid_hom"]], ["add", "theorem", "ext_iff₂", ["monoid_hom"]]]}]}, {"timestamp": 1619741660, "sha": "413b4263", "message": "feat(finset/basic): fill in holes in the finset API (#7386)\nadd basic lemmas about finsets", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "attach_eq_empty_iff", ["finset"]], ["add", "theorem", "attach_nonempty_iff", ["finset"]], ["add", "theorem", "eq_empty_of_ssubset_singleton", ["finset"]], ["add", "theorem", "exists_of_ssubset", ["finset"]], ["add", "theorem", "ssubset_of_ssubset_of_subset", ["finset"]], ["add", "theorem", "ssubset_of_subset_of_ssubset", ["finset"]], ["add", "theorem", "ssubset_singleton_iff", ["finset"]], ["add", "theorem", "subset_inter_iff", ["finset"]], ["add", "theorem", "subset_singleton_iff", ["finset"]], ["add", "theorem", "union_subset_iff", ["finset"]], ["mod", "theorem", "union_subset_union", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_union_of_subset", ["set"]], ["add", "theorem", "eq_empty_of_ssubset_singleton", ["set"]], ["add", "theorem", "ssubset_of_ssubset_of_subset", ["set"]], ["add", "theorem", "ssubset_of_subset_of_ssubset", ["set"]], ["add", "theorem", "ssubset_singleton_iff", ["set"]], ["add", "theorem", "subset_singleton_iff_eq", ["set"]]]}]}, {"timestamp": 1619737213, "sha": "6a796d08", "message": "refactor(algebraic_geometry/structure_sheaf): Remove redundant isomorphism (#7410)\nRemoves `stalk_iso_Type`, which is redundant since we also have `structure_sheaf.stalk_iso`, which is the same isomorphism in `CommRing`", "changes": [{"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["del", "def", "stalk_iso_Type", ["algebraic_geometry"]], ["del", "theorem", "structure_sheaf_stalk_to_fiber_injective", ["algebraic_geometry"]], ["del", "theorem", "structure_sheaf_stalk_to_fiber_surjective", ["algebraic_geometry"]]]}]}, {"timestamp": 1619707419, "sha": "ca5176c3", "message": "feat(linear_algebra/tensor_product): add definition `tensor_product.map_incl` and `simp` lemmas related to powers of `tensor_product.map` (#7406)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "id_pow", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "theorem", "ltensor_id", ["linear_map"]], ["add", "theorem", "ltensor_pow", ["linear_map"]], ["mod", "theorem", "rtensor_id", ["linear_map"]], ["add", "theorem", "rtensor_pow", ["linear_map"]], ["add", "theorem", "map_id", ["tensor_product"]], ["add", "def", "map_incl", ["tensor_product"]], ["add", "theorem", "map_mul", ["tensor_product"]], ["add", "theorem", "map_one", ["tensor_product"]], ["add", "theorem", "map_pow", ["tensor_product"]]]}]}, {"timestamp": 1619707418, "sha": "966b3b18", "message": "feat(set_theory/{surreal, pgame}): `mul_comm` for surreal numbers (#7376)\nThis PR adds a proof of commutativity of multiplication for surreal numbers. \nWe also add `mul_zero` and `zero_mul` along with several useful lemmas.\nFinally, this renames a handful of lemmas about `relabelling` in order to enable dot notation.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Surreal.20numbers)", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["del", "theorem", "equiv_of_relabelling", ["pgame"]], ["del", "theorem", "le_of_relabelling", ["pgame"]], ["del", "theorem", "le_of_restricted", ["pgame"]], ["add", "def", "add_congr", ["pgame", "relabelling"]], ["add", "theorem", "equiv", ["pgame", "relabelling"]], ["add", "theorem", "le", ["pgame", "relabelling"]], ["add", "def", "neg_congr", ["pgame", "relabelling"]], ["add", "def", "restricted:", ["pgame", "relabelling"]], ["add", "def", "sub_congr", ["pgame", "relabelling"]], ["add", "theorem", "le", ["pgame", "restricted"]], ["del", "def", "restricted_of_relabelling", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": [["add", "def", "add_comm_sub_relabelling", ["pgame"]], ["add", "def", "add_sub_relabelling", ["pgame"]], ["add", "def", "left_moves_mul", ["pgame"]], ["add", "theorem", "mk_mul_move_left_inl", ["pgame"]], ["add", "theorem", "mk_mul_move_left_inr", ["pgame"]], ["add", "theorem", "mk_mul_move_right_inl", ["pgame"]], ["add", "theorem", "mk_mul_move_right_inr", ["pgame"]], ["add", "theorem", "mul_comm_equiv", ["pgame"]], ["add", "def", "mul_comm_relabelling", ["pgame"]], ["add", "theorem", "mul_move_left_inl", ["pgame"]], ["add", "theorem", "mul_move_left_inr", ["pgame"]], ["add", "theorem", "mul_move_right_inl", ["pgame"]], ["add", "theorem", "mul_move_right_inr", ["pgame"]], ["add", "theorem", "mul_zero_equiv", ["pgame"]], ["add", "def", "mul_zero_relabelling", ["pgame"]], ["add", "def", "right_moves_mul", ["pgame"]], ["add", "theorem", "zero_mul_equiv", ["pgame"]], ["add", "def", "zero_mul_relabelling", ["pgame"]]]}]}, {"timestamp": 1619700646, "sha": "c9563537", "message": "chore(.docker): remove alpine build, too fragile (#7401)\nIf this is approved I'll remove the automatic builds of the `alpine` based images over on `hub.docker.com`.", "changes": [{"oldPath": ".docker/README.md", "newPath": ".docker/README.md", "changes": []}, {"oldPath": ".docker/alpine/lean/.profile", "newPath": null, "changes": []}, {"oldPath": ".docker/alpine/lean/Dockerfile", "newPath": null, "changes": []}, {"oldPath": ".docker/alpine/mathlib/Dockerfile", "newPath": null, "changes": []}, {"oldPath": "scripts/docker_build.sh", "newPath": "scripts/docker_build.sh", "changes": []}, {"oldPath": "scripts/docker_push.sh", "newPath": "scripts/docker_push.sh", "changes": []}]}, {"timestamp": 1619700645, "sha": "91604cbe", "message": "feat(data/finsupp/to_dfinsupp): add equivalences between finsupp and dfinsupp (#7311)\nA rework of #7217, that adds a more elementary equivalence.", "changes": [{"oldPath": null, "newPath": "src/data/finsupp/to_dfinsupp.lean", "changes": [["add", "def", "to_finsupp", ["dfinsupp"]], ["add", "theorem", "to_finsupp_add", ["dfinsupp"]], ["add", "theorem", "to_finsupp_coe", ["dfinsupp"]], ["add", "theorem", "to_finsupp_neg", ["dfinsupp"]], ["add", "theorem", "to_finsupp_single", ["dfinsupp"]], ["add", "theorem", "to_finsupp_smul", ["dfinsupp"]], ["add", "theorem", "to_finsupp_sub", ["dfinsupp"]], ["add", "theorem", "to_finsupp_support", ["dfinsupp"]], ["add", "theorem", "to_finsupp_to_dfinsupp", ["dfinsupp"]], ["add", "theorem", "to_finsupp_zero", ["dfinsupp"]], ["add", "def", "to_dfinsupp", ["finsupp"]], ["add", "theorem", "to_dfinsupp_add", ["finsupp"]], ["add", "theorem", "to_dfinsupp_coe", ["finsupp"]], ["add", "theorem", "to_dfinsupp_neg", ["finsupp"]], ["add", "theorem", "to_dfinsupp_single", ["finsupp"]], ["add", "theorem", "to_dfinsupp_smul", ["finsupp"]], ["add", "theorem", "to_dfinsupp_sub", ["finsupp"]], ["add", "theorem", "to_dfinsupp_to_finsupp", ["finsupp"]], ["add", "theorem", "to_dfinsupp_zero", ["finsupp"]], ["add", "def", "finsupp_equiv_dfinsupp", []], ["add", "theorem", "to_dfinsupp_support", []]]}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}]}, {"timestamp": 1619684607, "sha": "fda4d3d5", "message": "feat(data/rat): add `@[simp]` to `rat.num_div_denom` (#7393)\nI have an equation in rational numbers that I want to turn into an equation in integers, and everything `simp`s away nicely except the equation `x.num / x.denom = x`. Marking `rat.num_div_denom` as `simp` should fix that, and I don't expect it will break anything. (`rat.num_denom : rat.mk x.num x.denom = x` is already a `simp` lemma.)\nZulip discussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60x.2Enum.20.2F.20x.2Edenom.20.3D.20x.60", "changes": [{"oldPath": "archive/imo/imo2013_q5.lean", "newPath": "archive/imo/imo2013_q5.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}]}, {"timestamp": 1619638668, "sha": "c50cb7a7", "message": "feat(data/fintype/basic): add decidable_eq_(bundled-hom)_fintype (#7394)\nUsing the proof of `decidable_eq_equiv_fintype` for guidance, this adds equivalent statements about:\n* `function.embedding`\n* `zero_hom`\n* `one_hom`\n* `add_hom`\n* `mul_hom`\n* `add_monoid_hom`\n* `monoid_hom`\n* `monoid_with_zero_hom`\n* `ring_hom`\nIt also fixes a typo that swaps `left` and `right` between two definition names.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1619638667, "sha": "abf1c205", "message": "feat(linear_algebra/free_module): free of finite torsion free (#7381)\nThis is a reformulation of module.free_of_finite_type_torsion_free in terms of `ring_theory.finiteness` (combining my recent algebra PRs). Note this adds an import but it seems ok to me.", "changes": [{"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": [["add", "theorem", "free_of_finite_type_torsion_free'", ["module"]]]}]}, {"timestamp": 1619638666, "sha": "b9c80c92", "message": "chore(*): use `sq` as convention for \"squared\" (#7368)\nThis PR establishes `sq x` as the notation for `x ^ 2`. See [this Zulip conversation](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/sqr.20vs.20sq.20vs.20pow_two/near/224972795).\nA breakdown of the refactor:\n- All instances of `square` and `sqr` are changed to `sq` (except where `square` means something other than \"to the second power\")\n- All instances of `pow_two` are changed to `sq`, though many are kept are aliases\n- All instances of `sum_of_two_squares` are changed to `sq_add_sq`\nn.b. I did NOT alter any instances of:\n- `squarefree`\n- `sum_of_four_squares`\n- `fpow_two` or `rpow_two`\n semiring+ (#6753)\nTaking advantage of the `no_zero_divisors` typeclass, the assumptions on some of the results can be weakened.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "char_is_prime", ["char_p"]], ["mod", "theorem", "char_is_prime_of_pos", ["char_p"]], ["mod", "theorem", "char_is_prime_of_two_le", ["char_p"]], ["mod", "theorem", "char_is_prime_or_zero", ["char_p"]], ["mod", "theorem", "char_ne_one", ["char_p"]]]}]}, {"timestamp": 1616095656, "sha": "a10bc3d3", "message": "feat(normed_space/inner_product): euclidean_space.norm_eq (#6744)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "norm_eq", ["euclidean_space"]], ["add", "theorem", "norm_eq_of_L2", ["pi_Lp"]]]}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": [["add", "theorem", "norm_eq_of_nat", ["pi_Lp"]]]}]}, {"timestamp": 1616095655, "sha": "e1ff2dff", "message": "chore(*): update `injective` lemma names to match the naming guide (#6740)\nIn `src/algebra/group_ring_action.lean`:\n- `injective_to_semiring_hom` -> `to_semiring_hom_injective`\nIn `src/algebra/module/linear_map.lean`:\n- `linear_equiv.injective_to_equiv` -> `linear_equiv.to_equiv_injective`\n- `linear_equiv.injective_to_linear_map` -> `linear_equiv.to_linear_map_injective`\nIn `src/analysis/normed_space/enorm.lean`:\n- `enorm.injective_coe_fn` -> `enorm.coe_fn_injective`\nIn `src/data/equiv/basic.lean`:\n- `equiv.injective_coe_fn` -> `equiv.coe_fn_injective`\nIn `src/data/real/nnreal.lean`:\n- `nnreal.injective_coe` -> `nnreal.coe_injective`\nIn `src/data/sum.lean`:\n- `sum.injective_inl` -> `sum.inl_injective`\n- `sum.injective_inr` -> `sum.inr_injective`\nIn `src/linear_algebra/affine_space/affine_equiv.lean`:\n- `affine_equiv.injective_to_affine_map` -> `affine_equiv.to_affine_map_injective`\n- `affine_equiv.injective_coe_fn` -> `affine_equiv.coe_fn_injective`\n- `affine_equiv.injective_to_equiv` -> `affine_equiv.to_equiv_injective`\nIn `src/linear_algebra/affine_space/affine_map.lean`:\n- `affine_map.injective_coe_fn` -> `affine_map.coe_fn_injective`\nIn `src/measure_theory/outer_measure.lean`:\n- `measure_theory.outer_measure.injective_coe_fn` -> `measure_theory.outer_measure.coe_fn_injective`\nIn `src/order/rel_iso.lean`:\n- `rel_iso.injective_to_equiv` -> `rel_iso.to_equiv_injective`\n- `rel_iso.injective_coe_fn` -> `rel_iso.coe_fn_injective`\nIn `src/topology/algebra/module.lean`:\n- `continuous_linear_map.injective_coe_fn` -> `continuous_linear_map.coe_fn_injective`", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "theorem", "injective_to_semiring_hom", []], ["add", "theorem", "to_semiring_hom_injective", []]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["del", "theorem", "injective_to_equiv", ["linear_equiv"]], ["del", "theorem", "injective_to_linear_map", ["linear_equiv"]], ["mod", "theorem", "refl_trans", ["linear_equiv"]], ["add", "theorem", "to_equiv_injective", ["linear_equiv"]], ["add", "theorem", "to_linear_map_injective", ["linear_equiv"]], ["mod", "theorem", "trans_refl", ["linear_equiv"]]]}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": [["add", "theorem", "coe_fn_injective", ["enorm"]], ["del", "theorem", "injective_coe_fn", ["enorm"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "coe_fn_injective", ["equiv"]], ["del", "theorem", "injective_coe_fn", ["equiv"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["del", "theorem", "injective_inl", ["sum"]], ["del", "theorem", "injective_inr", ["sum"]], ["add", "theorem", "inl_injective", ["sum"]], ["add", "theorem", "inr_injective", ["sum"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "coe_fn_injective", ["affine_equiv"]], ["del", "theorem", "injective_coe_fn", ["affine_equiv"]], ["del", "theorem", "injective_to_affine_map", ["affine_equiv"]], ["del", "theorem", "injective_to_equiv", ["affine_equiv"]], ["add", "theorem", "to_affine_map_injective", ["affine_equiv"]], ["add", "theorem", "to_equiv_injective", ["affine_equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "coe_fn_injective", ["affine_map"]], ["del", "theorem", "injective_coe_fn", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "coe_fn_injective", ["measure_theory", "outer_measure"]], ["del", "theorem", "injective_coe_fn", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "coe_fn_injective", ["rel_iso"]], ["del", "theorem", "injective_coe_fn", ["rel_iso"]], ["del", "theorem", "injective_to_equiv", ["rel_iso"]], ["add", "theorem", "to_equiv_injective", ["rel_iso"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_fn_injective", ["continuous_linear_map"]], ["del", "theorem", "injective_coe_fn", ["continuous_linear_map"]]]}]}, {"timestamp": 1616095653, "sha": "83b0981b", "message": "feat(ring_theory/polynomial): the symmetric and homogenous polynomials form a subalgebra and submodules, respectively (#6666)\nThis adds:\n* the new definitions:\n * `mv_polynomial.homogeneous_submodule σ R n`, defined as the `{ x | x.is_homogeneous n }`\n * `mv_polynomial.symmetric_subalgebra σ R`, defined as the `{ x | x.is_symmetric }`\n* simp lemmas to reduce membership of the above to the `.is_*` form\n* `mv_polynomial.homogenous_submodule_mul` a statement about the product of homogenous submodules\n* `mv_polynomial.homogenous_submodule_eq_finsupp_supported` a statement that we already have a different definition of homogenous submodules elsewhere\nAll the other proofs have just been moved around the files.", "changes": [{"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": [["add", "theorem", "homogenous_submodule_eq_finsupp_supported", ["mv_polynomial"]], ["add", "theorem", "homogenous_submodule_mul", ["mv_polynomial"]], ["add", "theorem", "mem_homogeneous_submodule", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": [["add", "theorem", "mem_symmetric_subalgebra", ["mv_polynomial"]], ["add", "def", "symmetric_subalgebra", ["mv_polynomial"]]]}]}, {"timestamp": 1616075315, "sha": "744d59af", "message": "refactor(category_theory/limits): split file (#6751)\nThis splits `category_theory.limits.limits` into\n`category_theory.limits.is_limit` and `category_theory.limits.has_limits`.\nIt doesn't meaningfully reduce imports, as everything imports `has_limits`, but in principle it could, and hopefully it makes the content slightly easier to understand when separated.\nIn any case, the file was certainly too large.", "changes": [{"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/has_limits.lean", "changes": [["del", "def", "cocone_point_unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "cocone_point_unique_up_to_iso_hom_desc", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "cocone_point_unique_up_to_iso_inv_desc", ["category_theory", "limits", "is_colimit"]], ["del", "def", "cocone_points_iso_of_equivalence", ["category_theory", "limits", "is_colimit"]], ["del", "def", "cocone_points_iso_of_nat_iso", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "cocone_points_iso_of_nat_iso_hom_desc", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "comp_cocone_point_unique_up_to_iso_hom", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "comp_cocone_point_unique_up_to_iso_inv", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "comp_cocone_points_iso_of_nat_iso_hom", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "comp_cocone_points_iso_of_nat_iso_inv", ["category_theory", "limits", "is_colimit"]], ["del", "def", "desc_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "desc_self", ["category_theory", "limits", "is_colimit"]], ["del", "def", "equiv_iso_colimit", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "equiv_iso_colimit_apply", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "equiv_iso_colimit_symm_apply", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "hom_desc", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "hom_ext", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "hom_is_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "hom_iso'", ["category_theory", "limits", "is_colimit"]], ["del", "def", "hom_iso", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_colimit"]], ["del", "def", "iso_unique_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["del", "def", "map", ["category_theory", "limits", "is_colimit"]], ["del", "def", "map_cocone_equiv", ["category_theory", "limits", "is_colimit"]], ["del", "def", "mk_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["del", "def", "nat_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "of_cocone_equiv", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "of_cocone_equiv_apply_desc", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "of_cocone_equiv_symm_apply_desc", ["category_theory", "limits", "is_colimit"]], ["del", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["del", "def", "of_iso_colimit", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "of_iso_colimit_desc", ["category_theory", "limits", "is_colimit"]], ["del", "def", "of_left_adjoint", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "cocone_fac", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["del", "def", "cocone_of_hom", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["del", "theorem", "cocone_of_hom_fac", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["del", "theorem", "cocone_of_hom_of_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["del", "def", "colimit_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["del", "def", "hom_of_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["del", "theorem", "hom_of_cocone_of_hom", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["del", "def", "of_nat_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "of_point_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "precompose_hom_equiv", ["category_theory", "limits", "is_colimit"]], ["del", "def", "precompose_inv_equiv", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "uniq_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["del", "def", "unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "whisker_equivalence", ["category_theory", "limits", "is_colimit"]], ["del", "theorem", "ι_map", ["category_theory", "limits", "is_colimit"]], ["del", "structure", "is_colimit", ["category_theory", "limits"]], ["del", "def", "cone_point_unique_up_to_iso", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "cone_point_unique_up_to_iso_hom_comp", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "cone_point_unique_up_to_iso_inv_comp", ["category_theory", "limits", "is_limit"]], ["del", "def", "cone_points_iso_of_equivalence", ["category_theory", "limits", "is_limit"]], ["del", "def", "cone_points_iso_of_nat_iso", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "cone_points_iso_of_nat_iso_hom_comp", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "cone_points_iso_of_nat_iso_inv_comp", ["category_theory", "limits", "is_limit"]], ["del", "def", "equiv_iso_limit", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "equiv_iso_limit_apply", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "equiv_iso_limit_symm_apply", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "hom_ext", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "hom_is_iso", ["category_theory", "limits", "is_limit"]], ["del", "def", "hom_iso'", ["category_theory", "limits", "is_limit"]], ["del", "def", "hom_iso", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "hom_lift", ["category_theory", "limits", "is_limit"]], ["del", "def", "iso_unique_cone_morphism", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "lift_comp_cone_point_unique_up_to_iso_hom", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "lift_comp_cone_point_unique_up_to_iso_inv", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "lift_comp_cone_points_iso_of_nat_iso_hom", ["category_theory", "limits", "is_limit"]], ["del", "def", "lift_cone_morphism", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "lift_self", ["category_theory", "limits", "is_limit"]], ["del", "def", "map", ["category_theory", "limits", "is_limit"]], ["del", "def", "map_cone_equiv", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "map_π", ["category_theory", "limits", "is_limit"]], ["del", "def", "mk_cone_morphism", ["category_theory", "limits", "is_limit"]], ["del", "def", "nat_iso", ["category_theory", "limits", "is_limit"]], ["del", "def", "of_cone_equiv", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "of_cone_equiv_apply_desc", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "of_cone_equiv_symm_apply_desc", ["category_theory", "limits", "is_limit"]], ["del", "def", "of_faithful", ["category_theory", "limits", "is_limit"]], ["del", "def", "of_iso_limit", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "of_iso_limit_lift", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "cone_fac", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["del", "def", "cone_of_hom", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["del", "theorem", "cone_of_hom_fac", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["del", "theorem", "cone_of_hom_of_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["del", "def", "hom_of_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["del", "theorem", "hom_of_cone_of_hom", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["del", "def", "limit_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["del", "def", "of_nat_iso", ["category_theory", "limits", "is_limit"]], ["del", "def", "of_point_iso", ["category_theory", "limits", "is_limit"]], ["del", "def", "of_right_adjoint", ["category_theory", "limits", "is_limit"]], ["del", "def", "postcompose_hom_equiv", ["category_theory", "limits", "is_limit"]], ["del", "def", "postcompose_inv_equiv", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "uniq_cone_morphism", ["category_theory", "limits", "is_limit"]], ["del", "def", "unique_up_to_iso", ["category_theory", "limits", "is_limit"]], ["del", "def", "whisker_equivalence", ["category_theory", "limits", "is_limit"]], ["del", "structure", "is_limit", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/is_limit.lean", "changes": [["add", "def", "cocone_point_unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cocone_point_unique_up_to_iso_hom_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cocone_point_unique_up_to_iso_inv_desc", ["category_theory", "limits", "is_colimit"]], ["add", "def", "cocone_points_iso_of_equivalence", ["category_theory", "limits", "is_colimit"]], ["add", "def", "cocone_points_iso_of_nat_iso", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cocone_points_iso_of_nat_iso_hom_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "comp_cocone_point_unique_up_to_iso_hom", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "comp_cocone_point_unique_up_to_iso_inv", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "comp_cocone_points_iso_of_nat_iso_hom", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "comp_cocone_points_iso_of_nat_iso_inv", ["category_theory", "limits", "is_colimit"]], ["add", "def", "desc_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "desc_self", ["category_theory", "limits", "is_colimit"]], ["add", "def", "equiv_iso_colimit", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "equiv_iso_colimit_apply", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "equiv_iso_colimit_symm_apply", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "hom_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "hom_is_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "hom_iso'", ["category_theory", "limits", "is_colimit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_colimit"]], ["add", "def", "iso_unique_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "def", "map", ["category_theory", "limits", "is_colimit"]], ["add", "def", "map_cocone_equiv", ["category_theory", "limits", "is_colimit"]], ["add", "def", "mk_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "def", "nat_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_cocone_equiv", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "of_cocone_equiv_apply_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "of_cocone_equiv_symm_apply_desc", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_iso_colimit", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "of_iso_colimit_desc", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_left_adjoint", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cocone_fac", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "cocone_of_hom", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "theorem", "cocone_of_hom_fac", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "theorem", "cocone_of_hom_of_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "colimit_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "hom_of_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "theorem", "hom_of_cocone_of_hom", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "of_nat_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_point_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "precompose_hom_equiv", ["category_theory", "limits", "is_colimit"]], ["add", "def", "precompose_inv_equiv", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "uniq_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "whisker_equivalence", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "ι_map", ["category_theory", "limits", "is_colimit"]], ["add", "structure", "is_colimit", ["category_theory", "limits"]], ["add", "def", "cone_point_unique_up_to_iso", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_point_unique_up_to_iso_hom_comp", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_point_unique_up_to_iso_inv_comp", ["category_theory", "limits", "is_limit"]], ["add", "def", "cone_points_iso_of_equivalence", ["category_theory", "limits", "is_limit"]], ["add", "def", "cone_points_iso_of_nat_iso", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_points_iso_of_nat_iso_hom_comp", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_points_iso_of_nat_iso_inv_comp", ["category_theory", "limits", "is_limit"]], ["add", "def", "equiv_iso_limit", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "equiv_iso_limit_apply", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "equiv_iso_limit_symm_apply", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "hom_is_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "hom_iso'", ["category_theory", "limits", "is_limit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "hom_lift", ["category_theory", "limits", "is_limit"]], ["add", "def", "iso_unique_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "lift_comp_cone_point_unique_up_to_iso_hom", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "lift_comp_cone_point_unique_up_to_iso_inv", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "lift_comp_cone_points_iso_of_nat_iso_hom", ["category_theory", "limits", "is_limit"]], ["add", "def", "lift_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "lift_self", ["category_theory", "limits", "is_limit"]], ["add", "def", "map", ["category_theory", "limits", "is_limit"]], ["add", "def", "map_cone_equiv", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "map_π", ["category_theory", "limits", "is_limit"]], ["add", "def", "mk_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "def", "nat_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_cone_equiv", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "of_cone_equiv_apply_desc", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "of_cone_equiv_symm_apply_desc", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_faithful", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_iso_limit", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "of_iso_limit_lift", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_fac", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "cone_of_hom", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "theorem", "cone_of_hom_fac", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "theorem", "cone_of_hom_of_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "hom_of_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "theorem", "hom_of_cone_of_hom", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "limit_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "of_nat_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_point_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_right_adjoint", ["category_theory", "limits", "is_limit"]], ["add", "def", "postcompose_hom_equiv", ["category_theory", "limits", "is_limit"]], ["add", "def", "postcompose_inv_equiv", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "uniq_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "whisker_equivalence", ["category_theory", "limits", "is_limit"]], ["add", "structure", "is_limit", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/pi.lean", "newPath": "src/category_theory/limits/pi.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/punit.lean", "newPath": "src/category_theory/limits/punit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/yoneda.lean", "newPath": "src/category_theory/limits/yoneda.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/limits.lean", "newPath": "src/category_theory/monoidal/limits.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1616075314, "sha": "58581d0f", "message": "chore(*): normalize Authors: line (#6749)", "changes": [{"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "archive/arithcc.lean", "newPath": "archive/arithcc.lean", "changes": []}, {"oldPath": "archive/examples/mersenne_primes.lean", "newPath": "archive/examples/mersenne_primes.lean", "changes": []}, {"oldPath": "archive/examples/prop_encodable.lean", "newPath": "archive/examples/prop_encodable.lean", "changes": []}, {"oldPath": "archive/imo/imo1987_q1.lean", "newPath": "archive/imo/imo1987_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo2020_q2.lean", "newPath": "archive/imo/imo2020_q2.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "scripts/lint_mathlib.lean", "newPath": "scripts/lint_mathlib.lean", "changes": []}, {"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_p/invertible.lean", "newPath": "src/algebra/char_p/invertible.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": []}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/star/algebra.lean", "newPath": "src/algebra/star/algebra.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": "src/algebra/star/chsh.lean", "newPath": "src/algebra/star/chsh.lean", "changes": []}, {"oldPath": "src/analysis/analytic/linear.lean", "newPath": "src/analysis/analytic/linear.lean", "changes": []}, {"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": []}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/sqrt.lean", "newPath": "src/analysis/special_functions/sqrt.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/mates.lean", "newPath": "src/category_theory/adjunction/mates.lean", "changes": []}, {"oldPath": "src/category_theory/category/Kleisli.lean", "newPath": "src/category_theory/category/Kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/small_complete.lean", "newPath": "src/category_theory/limits/small_complete.lean", "changes": []}, {"oldPath": "src/category_theory/monad/kleisli.lean", "newPath": "src/category_theory/monad/kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/combinatorics/hall.lean", "newPath": "src/combinatorics/hall.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": []}, {"oldPath": "src/computability/encoding.lean", "newPath": "src/computability/encoding.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": []}, {"oldPath": "src/computability/tm_computable.lean", "newPath": "src/computability/tm_computable.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/control/applicative.lean", "newPath": "src/control/applicative.lean", "changes": []}, {"oldPath": "src/control/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": []}, {"oldPath": "src/control/bitraversable/basic.lean", "newPath": "src/control/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/control/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/control/bitraversable/lemmas.lean", "newPath": "src/control/bitraversable/lemmas.lean", "changes": []}, {"oldPath": "src/control/equiv_functor.lean", "newPath": "src/control/equiv_functor.lean", "changes": []}, {"oldPath": "src/control/equiv_functor/instances.lean", "newPath": "src/control/equiv_functor/instances.lean", "changes": []}, {"oldPath": "src/control/fix.lean", "newPath": "src/control/fix.lean", "changes": []}, {"oldPath": "src/control/functor.lean", "newPath": "src/control/functor.lean", "changes": []}, {"oldPath": "src/control/functor/multivariate.lean", "newPath": "src/control/functor/multivariate.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/control/monad/basic.lean", "newPath": "src/control/monad/basic.lean", "changes": []}, {"oldPath": "src/control/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/control/traversable/lemmas.lean", "newPath": "src/control/traversable/lemmas.lean", "changes": []}, {"oldPath": "src/control/uliftable.lean", "newPath": "src/control/uliftable.lean", "changes": []}, {"oldPath": "src/data/W.lean", "newPath": "src/data/W.lean", "changes": []}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": []}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": []}, {"oldPath": "src/data/bracket.lean", "newPath": "src/data/bracket.lean", "changes": []}, {"oldPath": "src/data/char.lean", "newPath": "src/data/char.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/lattice.lean", "newPath": "src/data/equiv/encodable/lattice.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": []}, {"oldPath": "src/data/equiv/option.lean", "newPath": "src/data/equiv/option.lean", "changes": []}, {"oldPath": "src/data/erased.lean", "newPath": "src/data/erased.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}, {"oldPath": "src/data/finset/gcd.lean", "newPath": "src/data/finset/gcd.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/fintype/sort.lean", "newPath": "src/data/fintype/sort.lean", "changes": []}, {"oldPath": "src/data/int/range.lean", "newPath": "src/data/int/range.lean", "changes": []}, {"oldPath": "src/data/list/default.lean", "newPath": "src/data/list/default.lean", "changes": []}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/erase_dup.lean", "newPath": "src/data/multiset/erase_dup.lean", "changes": []}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": []}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": []}, {"oldPath": "src/data/multiset/functor.lean", "newPath": "src/data/multiset/functor.lean", "changes": []}, {"oldPath": "src/data/multiset/gcd.lean", "newPath": "src/data/multiset/gcd.lean", "changes": []}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": []}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": []}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": []}, {"oldPath": "src/data/multiset/range.lean", "newPath": "src/data/multiset/range.lean", "changes": []}, {"oldPath": "src/data/multiset/sections.lean", "newPath": "src/data/multiset/sections.lean", "changes": []}, {"oldPath": "src/data/multiset/sort.lean", "newPath": "src/data/multiset/sort.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/invertible.lean", "newPath": "src/data/mv_polynomial/invertible.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}, {"oldPath": "src/data/nat/psub.lean", "newPath": "src/data/nat/psub.lean", "changes": []}, {"oldPath": "src/data/nat/upto.lean", "newPath": "src/data/nat/upto.lean", "changes": []}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/num/prime.lean", "newPath": "src/data/num/prime.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/M.lean", "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/W.lean", "newPath": "src/data/pfunctor/multivariate/W.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/basic.lean", "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/pnat/intervals.lean", "newPath": "src/data/pnat/intervals.lean", "changes": []}, {"oldPath": "src/data/pnat/prime.lean", "newPath": "src/data/pnat/prime.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/basic.lean", "newPath": "src/data/qpf/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/comp.lean", "newPath": "src/data/qpf/multivariate/constructions/comp.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/const.lean", "newPath": "src/data/qpf/multivariate/constructions/const.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/fix.lean", "newPath": "src/data/qpf/multivariate/constructions/fix.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/prj.lean", "newPath": "src/data/qpf/multivariate/constructions/prj.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/quot.lean", "newPath": "src/data/qpf/multivariate/constructions/quot.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/sigma.lean", "newPath": "src/data/qpf/multivariate/constructions/sigma.lean", "changes": []}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/parallel.lean", "newPath": "src/data/seq/parallel.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/data/set/intervals/pi.lean", "newPath": "src/data/set/intervals/pi.lean", "changes": []}, {"oldPath": "src/data/set/intervals/surj_on.lean", "newPath": "src/data/set/intervals/surj_on.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": []}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}, {"oldPath": "src/data/sym.lean", "newPath": "src/data/sym.lean", "changes": []}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": []}, {"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/parity.lean", "newPath": "src/data/zmod/parity.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": []}, {"oldPath": "src/group_theory/perm/fin.lean", "newPath": "src/group_theory/perm/fin.lean", "changes": []}, {"oldPath": "src/group_theory/perm/option.lean", "newPath": "src/group_theory/perm/option.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra/basic.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/free_module.lean", "newPath": "src/linear_algebra/free_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/unitary_group.lean", "newPath": "src/linear_algebra/unitary_group.lean", "changes": []}, {"oldPath": "src/logic/function/conjugate.lean", "newPath": "src/logic/function/conjugate.lean", "changes": []}, {"oldPath": "src/logic/function/iterate.lean", "newPath": "src/logic/function/iterate.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": []}, {"oldPath": "src/number_theory/fermat4.lean", "newPath": "src/number_theory/fermat4.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/primes_congruent_one.lean", "newPath": "src/number_theory/primes_congruent_one.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": []}, {"oldPath": "src/order/filter/interval.lean", "newPath": "src/order/filter/interval.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": []}, {"oldPath": "src/order/lattice_intervals.lean", "newPath": "src/order/lattice_intervals.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/semiconj_Sup.lean", "newPath": "src/order/semiconj_Sup.lean", "changes": []}, {"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/vieta.lean", "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/init_tail.lean", "newPath": "src/ring_theory/witt_vector/init_tail.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": []}, {"oldPath": "src/tactic/apply.lean", "newPath": "src/tactic/apply.lean", "changes": []}, {"oldPath": "src/tactic/clear.lean", "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/explode_widget.lean", "newPath": "src/tactic/explode_widget.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/fresh_names.lean", "newPath": "src/tactic/fresh_names.lean", "changes": []}, {"oldPath": "src/tactic/generalizes.lean", "newPath": "src/tactic/generalizes.lean", "changes": []}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "src/tactic/has_variable_names.lean", "newPath": "src/tactic/has_variable_names.lean", "changes": []}, {"oldPath": "src/tactic/induction.lean", "newPath": "src/tactic/induction.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/default.lean", "newPath": "src/tactic/monotonicity/default.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/omega/clause.lean", "newPath": "src/tactic/omega/clause.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_ees.lean", "newPath": "src/tactic/omega/find_ees.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_scalars.lean", "newPath": "src/tactic/omega/find_scalars.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/lin_comb.lean", "newPath": "src/tactic/omega/lin_comb.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/prove_unsats.lean", "newPath": "src/tactic/omega/prove_unsats.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/tactic/pretty_cases.lean", "newPath": "src/tactic/pretty_cases.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/transfer.lean", "newPath": "src/tactic/transfer.lean", "changes": []}, {"oldPath": "src/tactic/unify_equations.lean", "newPath": "src/tactic/unify_equations.lean", "changes": []}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/topology/algebra/nonarchimedean/basic.lean", "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/continuous_map.lean", "newPath": "src/topology/continuous_map.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/metric_separated.lean", "newPath": "src/topology/metric_space/metric_separated.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "test/fresh_names.lean", "newPath": "test/fresh_names.lean", "changes": []}, {"oldPath": "test/general_recursion.lean", "newPath": "test/general_recursion.lean", "changes": []}, {"oldPath": "test/generalizes.lean", "newPath": "test/generalizes.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}, {"oldPath": "test/monotonicity/test_cases.lean", "newPath": "test/monotonicity/test_cases.lean", "changes": []}, {"oldPath": "test/pi_simp.lean", "newPath": "test/pi_simp.lean", "changes": []}, {"oldPath": "test/unify_equations.lean", "newPath": "test/unify_equations.lean", "changes": []}]}, {"timestamp": 1616075313, "sha": "542ff6af", "message": "refactor(algebra/algebra/basic): change submodule.restrict_scalars to use is_scalar_tower (#6745)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "ker_restrict_scalars", ["linear_map"]], ["mod", "def", "restrict_scalars", ["submodule"]], ["mod", "theorem", "restrict_scalars_bot", ["submodule"]], ["mod", "theorem", "restrict_scalars_inj", ["submodule"]], ["mod", "theorem", "restrict_scalars_mem", ["submodule"]], ["mod", "theorem", "restrict_scalars_top", ["submodule"]], ["mod", "theorem", "span_le_restrict_scalars", ["submodule"]]]}]}, {"timestamp": 1616075312, "sha": "59cda3bb", "message": "feat(algebra/associated): Primes that divide each other are associated (#6732)\nPrimes that divide each other are associated", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "associated_of_irreducible_of_dvd", []], ["add", "theorem", "associated_of_prime_of_dvd", []]]}]}, {"timestamp": 1616075311, "sha": "db2a972d", "message": "feat(ring_theory/principal_ideal_domain): The generator of a principal prime ideal is a prime (#6731)\nThe generator of a principal prime ideal is a prime", "changes": [{"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "prime_generator_of_is_prime", ["submodule", "is_principal"]]]}]}, {"timestamp": 1616075310, "sha": "b4afd642", "message": "feat(data/padics/padic_norm): p-adic norm of primes other than p (#6730)\nThe p-adic norm of `q` is `1` if `q` is another prime than `p`.", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["add", "theorem", "padic_norm_of_prime_of_ne", ["padic_norm"]]]}]}, {"timestamp": 1616060486, "sha": "216aecd7", "message": "feat(group_theory/quaternion_group): define the (generalised) quaternion groups (#6683)\nThis PR introduces the generalised quaternion groups and determines the orders of its elements.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "succ_mul_pos", ["nat"]]]}, {"oldPath": "src/group_theory/dihedral.lean", "newPath": "src/group_theory/dihedral_group.lean", "changes": [["del", "theorem", "card", ["dihedral"]], ["del", "theorem", "one_def", ["dihedral"]], ["del", "theorem", "order_of_r", ["dihedral"]], ["del", "theorem", "order_of_r_one", ["dihedral"]], ["del", "theorem", "order_of_sr", ["dihedral"]], ["del", "theorem", "r_mul_r", ["dihedral"]], ["del", "theorem", "r_mul_sr", ["dihedral"]], ["del", "theorem", "r_one_pow", ["dihedral"]], ["del", "theorem", "r_one_pow_n", ["dihedral"]], ["del", "theorem", "sr_mul_r", ["dihedral"]], ["del", "theorem", "sr_mul_self", ["dihedral"]], ["del", "theorem", "sr_mul_sr", ["dihedral"]], ["del", "inductive", "dihedral", []], ["add", "theorem", "card", ["dihedral_group"]], ["add", "theorem", "one_def", ["dihedral_group"]], ["add", "theorem", "order_of_r", ["dihedral_group"]], ["add", "theorem", "order_of_r_one", ["dihedral_group"]], ["add", "theorem", "order_of_sr", ["dihedral_group"]], ["add", "theorem", "r_mul_r", ["dihedral_group"]], ["add", "theorem", "r_mul_sr", ["dihedral_group"]], ["add", "theorem", "r_one_pow", ["dihedral_group"]], ["add", "theorem", "r_one_pow_n", ["dihedral_group"]], ["add", "theorem", "sr_mul_r", ["dihedral_group"]], ["add", "theorem", "sr_mul_self", ["dihedral_group"]], ["add", "theorem", "sr_mul_sr", ["dihedral_group"]], ["add", "inductive", "dihedral_group", []]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_eq_prime_pow", []]]}, {"oldPath": null, "newPath": "src/group_theory/quaternion_group.lean", "changes": [["add", "theorem", "a_mul_a", ["quaternion_group"]], ["add", "theorem", "a_mul_xa", ["quaternion_group"]], ["add", "theorem", "a_one_pow", ["quaternion_group"]], ["add", "theorem", "a_one_pow_n", ["quaternion_group"]], ["add", "theorem", "card", ["quaternion_group"]], ["add", "theorem", "one_def", ["quaternion_group"]], ["add", "theorem", "order_of_a", ["quaternion_group"]], ["add", "theorem", "order_of_a_one", ["quaternion_group"]], ["add", "theorem", "order_of_xa", ["quaternion_group"]], ["add", "theorem", "quaternion_group_one_is_cyclic", ["quaternion_group"]], ["add", "def", "quaternion_group_zero_equiv_dihedral_group_zero", ["quaternion_group"]], ["add", "theorem", "xa_mul_a", ["quaternion_group"]], ["add", "theorem", "xa_mul_xa", ["quaternion_group"]], ["add", "theorem", "xa_pow_four", ["quaternion_group"]], ["add", "theorem", "xa_pow_two", ["quaternion_group"]], ["add", "inductive", "quaternion_group", []]]}]}, {"timestamp": 1616047625, "sha": "8116851f", "message": "doc(category_theory): convert comments about universes to library note (#6748)", "changes": [{"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": []}, {"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/connected.lean", "newPath": "src/category_theory/limits/constructions/over/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/default.lean", "newPath": "src/category_theory/limits/constructions/over/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/constructions/over/products.lean", "newPath": "src/category_theory/limits/constructions/over/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monad/bundled.lean", "newPath": "src/category_theory/monad/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": []}, {"oldPath": "src/category_theory/monad/kleisli.lean", "newPath": "src/category_theory/monad/kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monad/products.lean", "newPath": "src/category_theory/monad/products.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/sums/basic.lean", "newPath": "src/category_theory/sums/basic.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1616042713, "sha": "e955a6bd", "message": "chore(scripts): update nolints.txt (#6747)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1616036514, "sha": "9b8d41a3", "message": "feat(ring_theory/finiteness): add transitivity of finite presentation (#6640)\nThis adds transitivity of finite presentation (for rings). I think we now have a basic API for finitely presented algebras.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "comp", ["alg_hom", "finite_presentation"]], ["add", "theorem", "trans", ["algebra", "finite_presentation"]], ["add", "theorem", "comp", ["ring_hom", "finite_presentation"]]]}]}, {"timestamp": 1616025167, "sha": "804b0ede", "message": "chore(data/mv_polynomial/basic): add coeff_smul to match coeff_add etc (#6742)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "coeff_smul", ["mv_polynomial"]]]}]}, {"timestamp": 1616021348, "sha": "30b34552", "message": "feat(ring_theory/roots_of_unity): Restrict ring homomorphism to roots of unity (#6646)\nRestrict a ring homomorphism to roots of unity.", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "def", "restrict_roots_of_unity", ["ring_equiv"]], ["add", "theorem", "restrict_roots_of_unity_coe_apply", ["ring_equiv"]], ["add", "theorem", "restrict_roots_of_unity_symm", ["ring_equiv"]], ["add", "theorem", "map_root_of_unity_eq_pow_self", ["ring_hom"]], ["add", "def", "restrict_roots_of_unity", ["ring_hom"]], ["add", "theorem", "restrict_roots_of_unity_coe_apply", ["ring_hom"]], ["add", "theorem", "coe_pow", ["roots_of_unity"]]]}]}, {"timestamp": 1616008714, "sha": "9507a34f", "message": "chore(category_theory/limits/creates): fix typo in docstring (#6738)", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}]}, {"timestamp": 1616008713, "sha": "6e1143ab", "message": "chore(combinatorics/simple_graph): remove bad simp attribute (#6736)\nAs in https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/symmetry.20fails.20if.20simple.20graph.20is.20imported.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "edge_symm'", ["simple_graph"]], ["mod", "theorem", "edge_symm", ["simple_graph"]]]}]}, {"timestamp": 1616008712, "sha": "ce8a6ca0", "message": "refactor(data/multiset/basic): consistently use 'nsmul' in names (#6735)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "to_finset_sum_count_nsmul_eq", ["multiset"]], ["del", "theorem", "to_finset_sum_count_smul_eq", ["multiset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "card_nsmul", ["multiset"]], ["del", "theorem", "card_smul", ["multiset"]], ["add", "theorem", "count_nsmul", ["multiset"]], ["del", "theorem", "count_smul", ["multiset"]], ["add", "theorem", "prod_nsmul", ["multiset"]], ["del", "theorem", "prod_smul", ["multiset"]]]}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}]}, {"timestamp": 1616008711, "sha": "7e82bba0", "message": "feat(algebra/module/submodule): add `smul_of_tower_mem` (#6712)\nThis adds the lemmas:\n* `sub_mul_action.smul_of_tower_mem`\n* `submodule.smul_of_tower_mem`\nAnd uses them to construct the new scalar actions:\n* `sub_mul_action.mul_action'`\n* `sub_mul_action.is_scalar_tower`\n* `submodule.semimodule'`\n* `submodule.is_scalar_tower`\nWith associated lemmas\n* `sub_mul_action.coe_smul_of_tower`\n* `submodule.coe_smul_of_tower`\nThe unprimed instance continue to hold their old values, and exist to speed up typeclass search; the same pattern we use for `tensor_product.semimodule` vs `tensor_product.semimodule`.", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["mod", "theorem", "coe_smul", ["submodule"]], ["add", "theorem", "coe_smul_of_tower", ["submodule"]], ["mod", "theorem", "smul_mem_iff'", ["submodule"]], ["mod", "theorem", "smul_mem_iff", ["submodule"]], ["add", "theorem", "smul_of_tower_mem", ["submodule"]]]}, {"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": [["add", "theorem", "coe_smul_of_tower", ["sub_mul_action"]], ["mod", "theorem", "smul_mem_iff'", ["sub_mul_action"]], ["mod", "theorem", "smul_mem_iff", ["sub_mul_action"]], ["add", "theorem", "smul_of_tower_mem", ["sub_mul_action"]]]}]}, {"timestamp": 1616008709, "sha": "4ae81c2f", "message": "feat(bounded_continuous_function): transport structure to C(α, β) when α compact (#6701)", "changes": [{"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": [["add", "theorem", "mul_coe", ["continuous_map"]], ["add", "theorem", "one_coe", ["continuous_map"]], ["add", "theorem", "smul_apply", ["continuous_map"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["add", "def", "add_equiv_continuous_map_of_compact", ["bounded_continuous_function"]], ["add", "theorem", "add_equiv_continuous_map_of_compact_to_equiv", ["bounded_continuous_function"]], ["add", "def", "equiv_continuous_map_of_compact", ["bounded_continuous_function"]], ["add", "def", "forget_boundedness", ["bounded_continuous_function"]], ["add", "def", "forget_boundedness_add_hom", ["bounded_continuous_function"]], ["add", "theorem", "forget_boundedness_coe", ["bounded_continuous_function"]], ["add", "def", "isometric_continuous_map_of_compact", ["bounded_continuous_function"]], ["add", "theorem", "isometric_continuous_map_of_compact_to_isometric", ["bounded_continuous_function"]], ["add", "def", "linear_isometry_continuous_map_of_compact", ["bounded_continuous_function"]], ["add", "theorem", "linear_isometry_continuous_map_of_compact_to_add_equiv", ["bounded_continuous_function"]], ["add", "theorem", "linear_isometry_continuous_map_of_compact_to_equiv", ["bounded_continuous_function"]]]}]}, {"timestamp": 1616008705, "sha": "0b0fd528", "message": "chore(analysis/normed_space/extend): provide a version without restrict_scalars (#6693)\nThis is some pre-work to try and speed up the proof in `hahn_banach`, which as I understand it is super slow because it has to work very hard to unify typeclass which keep switching back and forth between `F` and `restrict_scalars ℝ 𝕜 F`. \nThis PR is unlikely to have changed the speed of that proof, but I suspect these definitions might help in a future PR - and it pushes `restrict_scalars` out of the interesting bit of the proof.", "changes": [{"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": [["add", "theorem", "extend_to_𝕜'_apply", ["continuous_linear_map"]], ["add", "theorem", "extend_to_𝕜_apply", ["continuous_linear_map"]], ["add", "theorem", "extend_to_𝕜'_apply", ["linear_map"]], ["add", "theorem", "extend_to_𝕜_apply", ["linear_map"]], ["mod", "theorem", "norm_bound", []]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}]}, {"timestamp": 1616008702, "sha": "6db70c98", "message": "refactor(linear_algebra/determinant): refactor proof of upper_two_block_triangular_det (#6690)\nRefactored the proof of upper_two_block_triangular_det (to use sum_congr_hom.range) following a suggestion from Eric Wieser (during PR review of #6050).", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "mem_sum_congr_hom_range_of_perm_maps_to_inl", ["equiv", "perm"]], ["del", "theorem", "perm_on_inl_iff_perm_on_inr", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "upper_two_block_triangular_det", ["matrix"]]]}]}, {"timestamp": 1616008699, "sha": "41191815", "message": "feat(measure_theory/l2_space): L2 is an inner product space (#6596)\nIf `E` is an inner product space, then so is `Lp E 2 µ`, with inner product being the integral of the inner products between function values.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "sub_pow_two", []], ["add", "theorem", "two_mul_le_add_pow_two", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "half_le_self", []]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "inner", ["ae_measurable"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "integrable_comp_iff_of_antilipschitz", ["measure_theory", "lipschitz_with"]]]}, {"oldPath": null, "newPath": "src/measure_theory/l2_space.lean", "changes": [["add", "theorem", "inner_def", ["measure_theory", "L2"]], ["add", "theorem", "integrable_inner", ["measure_theory", "L2"]], ["add", "theorem", "integral_inner_eq_sq_snorm", ["measure_theory", "L2"]], ["add", "theorem", "mem_L1_inner", ["measure_theory", "L2"]], ["add", "theorem", "snorm_inner_lt_top", ["measure_theory", "L2"]], ["add", "theorem", "snorm_rpow_two_norm_lt_top", ["measure_theory", "L2"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "mem_ℒp_comp_iff_of_antilipschitz", ["lipschitz_with"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "integral_comp_comm'", ["continuous_linear_map"]], ["add", "theorem", "integral_conj", []], ["add", "theorem", "integral_of_real", []], ["add", "theorem", "integral_comp_comm", ["linear_isometry"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "closed_embedding", ["antilipschitz_with"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "closed_embedding", ["isometry"]]]}]}, {"timestamp": 1616008697, "sha": "fb28eac0", "message": "feat(number_theory/bernoulli): Faulhaber's theorem (#6409)\nCo-authored-by Fabian Kruse", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["mod", "theorem", "bernoulli'_four", []], ["mod", "theorem", "bernoulli'_one", []], ["mod", "theorem", "bernoulli'_three", []], ["mod", "theorem", "bernoulli'_two", []], ["mod", "theorem", "bernoulli'_zero", []], ["mod", "theorem", "bernoulli_one", []], ["mod", "theorem", "bernoulli_zero", []], ["add", "theorem", "sum_range_pow", []]]}]}, {"timestamp": 1615998031, "sha": "83a4b8b9", "message": "chore(group_theory/subgroup): fix typo in docstring (#6722)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1615998030, "sha": "73922b54", "message": "feat(data/zsqrtd/basic): add some lemmas about conj, norm (#6715)", "changes": [{"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": [["add", "theorem", "conj_add", ["zsqrtd"]], ["add", "theorem", "conj_conj", ["zsqrtd"]], ["add", "def", "conj_hom", ["zsqrtd"]], ["add", "theorem", "conj_neg", ["zsqrtd"]], ["add", "theorem", "conj_one", ["zsqrtd"]], ["add", "theorem", "conj_sub", ["zsqrtd"]], ["add", "theorem", "conj_zero", ["zsqrtd"]], ["add", "theorem", "norm_conj", ["zsqrtd"]], ["add", "theorem", "norm_neg", ["zsqrtd"]]]}]}, {"timestamp": 1615984890, "sha": "1f50530a", "message": "feat(data/set/intervals/image_preimage, algebra/ordered_monoid): new typeclass for interval bijection lemmas (#6629)\nThis commit introduces a ``has_exists_add_of_le`` typeclass extending ``ordered_add_comm_monoid``; is the assumption needed so that additively translating an interval gives a bijection. We then prove this fact for all flavours of interval. \nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Correct.20setting.20for.20positive.20shifts.20of.20intervals", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": [["add", "theorem", "Icc_add_bij", ["set"]], ["add", "theorem", "Ici_add_bij", ["set"]], ["add", "theorem", "Ico_add_bij", ["set"]], ["add", "theorem", "Iic_add_bij", ["set"]], ["add", "theorem", "Iio_add_bij", ["set"]], ["add", "theorem", "Ioc_add_bij", ["set"]], ["add", "theorem", "Ioi_add_bij", ["set"]], ["add", "theorem", "Ioo_add_bij", ["set"]]]}]}, {"timestamp": 1615976243, "sha": "13453191", "message": "feat(ring_theory/algebraic data/real/irrational): add a proof that a transcendental real number is irrational (#6721)\nZulip:\nhttps://leanprover.zulipchat.com/#narrow/stream/263328-triage", "changes": [{"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["add", "theorem", "irrational", ["transcendental"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_algebra_map", []]]}]}, {"timestamp": 1615976242, "sha": "4b1d5886", "message": "chore(linear_algebra/determinant): redefine det using multilinear_map.alternatization (#6708)\nThis slightly changes the definitional unfolding of `matrix.det` (moving a function application outside a sum and adjusting the version of int-multiplication used).\nBy doing this, a large number of proofs become a trivial application of a more general statement about alternating maps.\n`det_row_multilinear` already existed prior to this commit, but now `det` is defined in terms of it instead of the other way around.\nWe still need both, as otherwise we would break `M.det` dot notation, as `det_row_multilinear` does not have its argument expressed as a matrix.", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "map_coord_zero", ["alternating_map"]], ["add", "theorem", "map_update_zero", ["alternating_map"]], ["add", "theorem", "map_zero", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "def", "det", ["matrix"]], ["add", "theorem", "det_apply'", ["matrix"]], ["add", "theorem", "det_apply", ["matrix"]], ["mod", "def", "det_row_multilinear", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1615976241, "sha": "84933f12", "message": "feat(ring_theory/polynomial): Pochhammer polynomials (#6598)\n# The Pochhammer polynomials\nWe define and prove some basic relations about\n`pochhammer S n : polynomial S = X * (X+1) * ... * (X + n - 1)`\nwhich is also known as the rising factorial.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/polynomial/pochhammer.lean", "changes": [["add", "theorem", "choose_eq_pochhammer_eval_div_factorial", []], ["add", "theorem", "factorial_mul_pochhammer'", []], ["add", "theorem", "factorial_mul_pochhammer", []], ["add", "theorem", "pochhammer_eval_cast", []], ["add", "theorem", "pochhammer_eval_eq_choose_mul_factorial", []], ["add", "theorem", "pochhammer_eval_eq_factorial_div_factorial", []], ["add", "theorem", "pochhammer_eval_one'", []], ["add", "theorem", "pochhammer_eval_one", []], ["add", "theorem", "pochhammer_eval_zero", []], ["add", "theorem", "pochhammer_map", []], ["add", "theorem", "pochhammer_mul", []], ["add", "theorem", "pochhammer_ne_zero_eval_zero", []], ["add", "theorem", "pochhammer_one", []], ["add", "theorem", "pochhammer_pos", []], ["add", "theorem", "pochhammer_succ_left", []], ["add", "theorem", "pochhammer_succ_right", []], ["add", "theorem", "pochhammer_zero", []], ["add", "theorem", "pochhammer_zero_eval_zero", []], ["add", "theorem", "mul_X_add_nat_cast_comp", ["polynomial"]]]}]}, {"timestamp": 1615969854, "sha": "861f5946", "message": "feat(field_theory/normal): Tower of solvable extensions is solvable (#6643)\nThis is the key lemma that makes Abel-Ruffini work.", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "is_solvable_of_is_scalar_tower", []]]}]}, {"timestamp": 1615969853, "sha": "6f6b548b", "message": "refactor(group_theory/order_of_element): now makes sense for infinite monoids (#6587)\nThis PR generalises `order_of` from finite groups to (potentially infinite) monoids. By convention, the value of `order_of` for an element of infinite order is `0`. This is non-standard for the order of an element, but agrees with the convention that the characteristic of a field is `0` if `1` has infinite additive order. It also enables to remove the assumption `0 G is a power map.", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "map_cyclic", ["monoid_hom"]]]}]}, {"timestamp": 1615692130, "sha": "b23e14de", "message": "feat(data/polynomial/eval): prod_comp (#6644)\nExtend `mul_comp` to `multiset.prod`", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "prod_comp", ["polynomial"]]]}]}, {"timestamp": 1615692129, "sha": "d5563aea", "message": "feat(group_theory/solvable): Solvability preserved by short exact sequences (#6632)\nProves that if 0 -> A -> B -> C -> 0 is a short exact sequence of groups, and if A and C are both solvable, then so is B.", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["add", "theorem", "solvable_of_ker_le_range", []]]}]}, {"timestamp": 1615692128, "sha": "ade8889a", "message": "feat(algebra/algebra/basic): An algebra isomorphism induces a group isomorphism between automorphism groups (#6622)\nConstructs the group isomorphism induced from an algebra isomorphism.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "aut_congr", ["alg_equiv"]], ["add", "theorem", "aut_congr_refl", ["alg_equiv"]], ["add", "theorem", "aut_congr_symm", ["alg_equiv"]], ["add", "theorem", "aut_congr_trans", ["alg_equiv"]], ["add", "theorem", "mul_apply", ["alg_equiv"]]]}]}, {"timestamp": 1615682577, "sha": "552ebeb0", "message": "feat(algebra/continued_fractions): add convergence theorem (#6607)\n1. Add convergence theorem for continued fractions, i.e. `(gcf.of v).convergents` converges to `v`. \n2. Add some simple corollaries following from the already existing approximation lemmas for continued fractions, e.g. the equivalence of the convergent computations for continued fractions computed by `gcf.of` (`(gcf.of v).convergents` and `(gcf.of v).convergents'`).", "changes": [{"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": [["add", "def", "is_continued_fraction", ["simple_continued_fraction"]], ["del", "def", "is_regular_continued_fraction", ["simple_continued_fraction"]]]}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/computation/approximation_corollaries.lean", "changes": [["add", "def", "of", ["continued_fraction"]], ["add", "theorem", "of_convergence", ["generalized_continued_fraction"]], ["add", "theorem", "of_convergence_epsilon", ["generalized_continued_fraction"]], ["add", "theorem", "of_convergents_eq_convergents'", ["generalized_continued_fraction"]], ["add", "theorem", "of_is_simple_continued_fraction", ["generalized_continued_fraction"]], ["add", "def", "of", ["simple_continued_fraction"]], ["add", "theorem", "of_is_continued_fraction", ["simple_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/default.lean", "newPath": "src/algebra/continued_fractions/computation/default.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/default.lean", "newPath": "src/algebra/continued_fractions/default.lean", "changes": []}]}, {"timestamp": 1615682575, "sha": "a7410df0", "message": "feat(analysis/calculus/tangent_cone): add `unique_diff_on.pi` (#6577)", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "maps_to_tangent_cone_pi", []], ["add", "theorem", "pi", ["unique_diff_on"]], ["add", "theorem", "univ_pi", ["unique_diff_on"]], ["add", "theorem", "pi", ["unique_diff_within_at"]], ["add", "theorem", "univ_pi", ["unique_diff_within_at"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "eventually_nhds_norm_smul_sub_lt", []]]}]}, {"timestamp": 1615682574, "sha": "1b0db8e3", "message": "feat(order/well_founded_set, ring_theory/hahn_series): `hahn_series.add_val` (#6564)\nDefines `set.is_wf.min` in terms of `well_founded.min`\nPlaces an `add_valuation`, `hahn_series.add_val`, on `hahn_series`", "changes": [{"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "mul_antidiagonal_min_mul_min", ["finset"]], ["add", "theorem", "le_min_iff", ["set", "is_wf"]], ["add", "theorem", "min_le", ["set", "is_wf"]], ["add", "theorem", "min_le_min_of_subset", ["set", "is_wf"]], ["add", "theorem", "min_mem", ["set", "is_wf"]], ["add", "theorem", "min_mul", ["set", "is_wf"]], ["add", "theorem", "min_union", ["set", "is_wf"]], ["add", "theorem", "not_lt_min", ["set", "is_wf"]], ["add", "theorem", "is_wf_min_singleton", ["set"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "def", "add_val", ["hahn_series"]], ["add", "theorem", "add_val_apply", ["hahn_series"]], ["add", "theorem", "add_val_apply_of_ne", ["hahn_series"]], ["add", "theorem", "coeff_min_ne_zero", ["hahn_series"]], ["add", "theorem", "mul_coeff_min_add_min", ["hahn_series"]], ["mod", "theorem", "single_coeff_same", ["hahn_series"]], ["add", "theorem", "support_add_subset", ["hahn_series"]], ["add", "theorem", "support_nonempty_iff", ["hahn_series"]], ["add", "theorem", "support_one", ["hahn_series"]]]}]}, {"timestamp": 1615682573, "sha": "0c26cea2", "message": "feat(order/filter/cofinite): a growing function has a minimum (#6556)\nIf `tendsto f cofinite at_top`, then `f` has a minimal element.", "changes": [{"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "exists_forall_ge", ["filter", "tendsto"]], ["add", "theorem", "exists_forall_le", ["filter", "tendsto"]]]}]}, {"timestamp": 1615682572, "sha": "19ecff8b", "message": "feat(topology/algebra/nonarchimedean): added nonarchimedean groups and rings (#6551)\nAdding nonarchimedean topological groups and rings.", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/nonarchimedean/basic.lean", "changes": [["add", "theorem", "nonarchimedean_of_emb", ["nonarchimedean_group"]], ["add", "theorem", "prod_self_subset", ["nonarchimedean_group"]], ["add", "theorem", "prod_subset", ["nonarchimedean_group"]], ["add", "theorem", "left_mul_subset", ["nonarchimedean_ring"]], ["add", "theorem", "mul_subset", ["nonarchimedean_ring"]]]}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["add", "theorem", "coe_comap", ["open_subgroup"]], ["add", "def", "comap", ["open_subgroup"]], ["add", "theorem", "comap_comap", ["open_subgroup"]], ["add", "theorem", "mem_comap", ["open_subgroup"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1615682571, "sha": "ae33fb09", "message": "feat(group_theory/submonoid/operations): add eq_top_iff' (#6536)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "eq_top_iff'", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "eq_top_iff'", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "eq_top_iff'", ["subring"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "eq_top_iff'", ["subsemiring"]]]}]}, {"timestamp": 1615682570, "sha": "f4c4d107", "message": "feat(probability_theory/independence): prove equivalences for indep_set (#6242)\nProve the following equivalences on `indep_set`, for measurable sets `s,t` and a probability measure `µ` :\n* `indep_set s t μ ↔ μ (s ∩ t) = μ s * μ t`,\n* `indep_set s t μ ↔ indep_sets {s} {t} μ`.\nIn `indep_sets.indep_set_of_mem`, we use those equivalences to obtain `indep_set s t µ` from `indep_sets S T µ` and `s ∈ S`, `t ∈ T`.", "changes": [{"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": [["add", "theorem", "indep_set_iff_indep_sets_singleton", ["probability_theory"]], ["add", "theorem", "indep_set_iff_measure_inter_eq_mul", ["probability_theory"]], ["add", "theorem", "indep_set_of_mem", ["probability_theory", "indep_sets"]], ["add", "theorem", "indep_sets_singleton_iff", ["probability_theory"]]]}]}, {"timestamp": 1615670311, "sha": "c2777528", "message": "feat(algebra/group/defs, data/nat/basic): some `ne` lemmas (#6637)\n`≠` versions of `mul_left_inj`, `mul_right_inj`, and `succ_inj`, as well as the lemma `succ_succ_ne_one`.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["add", "theorem", "mul_ne_mul_left", []], ["add", "theorem", "mul_ne_mul_right", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "mul_ne_mul_left", ["nat"]], ["add", "theorem", "mul_ne_mul_right", ["nat"]], ["add", "theorem", "one_lt_succ_succ", ["nat"]], ["add", "theorem", "succ_ne_succ", ["nat"]], ["add", "theorem", "succ_succ_ne_one", ["nat"]]]}]}, {"timestamp": 1615670310, "sha": "468b8ffd", "message": "feat(field_theory/polynomial_galois_group): instances of trivial Galois group (#6634)\nThis PR adds a bunch of instances where the Galois group of a polynomial is trivial.", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "def", "unique_gal_of_splits", ["polynomial", "gal"]]]}]}, {"timestamp": 1615670309, "sha": "ba6b6899", "message": "feat(field_theory/intermediate_field): coe_pow (#6626)", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "coe_pow", ["intermediate_field"]]]}]}, {"timestamp": 1615648097, "sha": "e6819d3a", "message": "feat(algebra/group_power/lemmas): add invertible_of_pow_eq_one (#6658)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "pow", ["is_unit"]]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "def", "invertible_of_pow_eq_one", []], ["add", "def", "invertible_of_pow_succ_eq_one", []], ["add", "theorem", "pow", ["is_unit"]]]}]}, {"timestamp": 1615598333, "sha": "ff8c8f58", "message": "fix(tactic/norm_num): perform cleanup even if norm_num fails (#6655)\n[As reported on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/norm_num.20fails.20when.20simp.20is.20too.20effective/near/230004826).", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1615560278, "sha": "f54f81c0", "message": "refactor(algebra/invertible): push deeper into the import graph (#6650)\nI want to be able to import this in files where we use `is_unit`, to remove a few unecessary non-computables.\nThis moves all the lemmas about `char_p` and `char_zero` from `algebra.invertible` to `algebra.char_p.invertible`. This means that we can talk about `invertible` elements without having to build up the theory in `order_of_element` first.\nThis doesn't change any lemma statements or proofs, but it does move some type arguments into `variables` statements.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/char_p/invertible.lean", "changes": [["add", "def", "invertible_of_char_p_not_dvd", []], ["add", "def", "invertible_of_ring_char_not_dvd", []]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["del", "def", "invertible_of_char_p_not_dvd", []], ["del", "def", "invertible_of_ring_char_not_dvd", []]]}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}]}, {"timestamp": 1615537151, "sha": "85c6a799", "message": "feat(measure_theory/lp_space): Lp is complete (#6563)\nProve the completeness of `Lp` by showing that Cauchy sequences of `ℒp` have a limit.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/measure_theory/ess_sup.lean", "newPath": "src/measure_theory/ess_sup.lean", "changes": [["add", "theorem", "ess_sup_liminf_le", ["ennreal"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "ae_tendsto_of_cauchy_snorm'", ["measure_theory", "Lp"]], ["add", "theorem", "ae_tendsto_of_cauchy_snorm", ["measure_theory", "Lp"]], ["add", "theorem", "cauchy_complete_ℒp", ["measure_theory", "Lp"]], ["add", "theorem", "cauchy_tendsto_of_tendsto", ["measure_theory", "Lp"]], ["add", "theorem", "complete_space_Lp_of_cauchy_complete_ℒp", ["measure_theory", "Lp"]], ["add", "theorem", "mem_ℒp_of_cauchy_tendsto", ["measure_theory", "Lp"]], ["add", "theorem", "snorm'_lim_eq_lintegral_liminf", ["measure_theory", "Lp"]], ["add", "theorem", "snorm'_lim_le_liminf_snorm'", ["measure_theory", "Lp"]], ["add", "theorem", "snorm_exponent_top_lim_eq_ess_sup_liminf", ["measure_theory", "Lp"]], ["add", "theorem", "snorm_exponent_top_lim_le_liminf_snorm_exponent_top", ["measure_theory", "Lp"]], ["add", "theorem", "snorm_lim_le_liminf_snorm", ["measure_theory", "Lp"]], ["add", "theorem", "tendsto_Lp_of_tendsto_ℒp", ["measure_theory", "Lp"]], ["add", "theorem", "snorm'_norm", ["measure_theory"]]]}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": [["add", "theorem", "limsup_liminf_le_liminf_limsup", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1615524309, "sha": "dae047ed", "message": "feat(data/polynomial/*): more lemmas, especially for noncommutative rings (#6599)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "zero_pow_eq", []]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "single_pow", ["add_monoid_algebra"]]]}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "cast_comm", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_comm", ["nat"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["del", "theorem", "eval_comp", ["polynomial"]], ["del", "theorem", "eval₂_comp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "X_mul_monomial", ["polynomial"]], ["add", "theorem", "X_pow_mul_monomial", ["polynomial"]], ["add", "theorem", "monomial_mul_X", ["polynomial"]], ["add", "theorem", "monomial_mul_X_pow", ["polynomial"]], ["add", "theorem", "monomial_one_one_eq_X", ["polynomial"]], ["add", "theorem", "monomial_one_right_eq_X_pow", ["polynomial"]], ["add", "theorem", "monomial_pow", ["polynomial"]], ["add", "theorem", "monomial_zero_one", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "C_mul_comp", ["polynomial"]], ["add", "theorem", "X_pow_comp", ["polynomial"]], ["del", "theorem", "cast_nat_comp", ["polynomial"]], ["add", "theorem", "eval_C_mul", ["polynomial"]], ["add", "theorem", "eval_comp", ["polynomial"]], ["add", "theorem", "eval_mul_X", ["polynomial"]], ["add", "theorem", "eval_mul_X_pow", ["polynomial"]], ["add", "theorem", "eval_nat_cast_mul", ["polynomial"]], ["add", "theorem", "eval₂_at_apply", ["polynomial"]], ["add", "theorem", "eval₂_at_nat_cast", ["polynomial"]], ["add", "theorem", "eval₂_at_one", ["polynomial"]], ["add", "theorem", "eval₂_at_zero", ["polynomial"]], ["add", "theorem", "eval₂_comp", ["polynomial"]], ["add", "theorem", "mul_X_comp", ["polynomial"]], ["add", "theorem", "mul_X_pow_comp", ["polynomial"]], ["add", "theorem", "nat_cast_comp", ["polynomial"]], ["add", "theorem", "nat_cast_mul_comp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "theorem", "C_mul_monomial", ["polynomial"]], ["add", "theorem", "monomial_mul_C", ["polynomial"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "cast_comm", ["rat"]]]}]}, {"timestamp": 1615512070, "sha": "b8526489", "message": "chore(scripts): update nolints.txt (#6651)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1615508281, "sha": "2dabe5af", "message": "feat(.docker): Docker containers for debian, alpine, and gitpod (#6515)\n# Docker containers\nThe `.docker` directory contains instructions for building Docker containers\nwith Lean and mathlib.\n## Build\nYou can build these containers using `scripts/docker_build.sh`.\nThis will result in the creation of two containers:\n* `leanprovercommunity/lean` - contains elan, lean, and leanproject\n* `leanprovercommunity/mathlib` - additionally contains a copy of mathlib, with oleans\nIn fact, for each container you'll get three different tags, `:debian`, `:alpine` and `:latest`.\n`:debian` and `:alpine` use those respective distributions, and `:latest` just points at `:debian`.\nFinally, there is also a `leanprovercommunity/mathlib:gitpod` for use at\n[https://gitpod.io/](https://gitpod.io/).\n## Usage\n### gitpod.io\nThere is a container based on `gitpod/workspace-base`\nenabling [https://gitpod.io/](https://gitpod.io/) to create in-browser VSCode sessions\nwith elan/lean/leanproject/mathlib already set up.\nEither prepend `https://gitpod.io/#` to basically any URL at github, e.g.\n[https://gitpod.io/#https://github.com/leanprover-community/mathlib/tree/docker](https://gitpod.io/#https://github.com/leanprover-community/mathlib/tree/docker),\nor install a [gitpod browser extension](https://www.gitpod.io/docs/browser-extension/)\nwhich will add buttons directly on github.\n### Command line\nYou can use these containers as virtual machines:\n```sh\ndocker run -it leanprovercommunity/mathlib\n```\n### Docker registry\nThese containers are deployed to the Docker registry, so anyone can just\n`docker run -it leanprovercommunity/mathlib` to get a local lean+mathlib environment.\nThere is a local script in `scripts/docker_push.sh` for deployment,\nbut I have also set up `hub.docker.com` to watch the `docker` branch for updates\nand automatically rebuild.\nIf this PR is merged to master we should change that to watch `master`.\n### Remote containers for VSCode\nInstalling the `Remote - Containers` VSCode extension\nwill allow you to open a project inside the `leanprovercommunity/mathlib` container\n(meaning you don't even need a local copy of lean installed).\nThe file `/.devcontainer/devcontainer.json` sets this up:\nif you have the extension installed, you'll be prompted to ask if you'd like to run inside the\ncontainer, no configuration necessary.", "changes": [{"oldPath": null, "newPath": ".devcontainer/README.md", "changes": []}, {"oldPath": null, "newPath": ".devcontainer/devcontainer.json", "changes": []}, {"oldPath": null, "newPath": ".docker/README.md", "changes": []}, {"oldPath": null, "newPath": ".docker/alpine/lean/.profile", "changes": []}, {"oldPath": null, "newPath": ".docker/alpine/lean/Dockerfile", "changes": []}, {"oldPath": null, "newPath": ".docker/alpine/mathlib/Dockerfile", "changes": []}, {"oldPath": null, "newPath": ".docker/debian/lean/Dockerfile", "changes": []}, {"oldPath": null, "newPath": ".docker/debian/mathlib/Dockerfile", "changes": []}, {"oldPath": null, "newPath": ".docker/gitpod/mathlib/Dockerfile", "changes": []}, {"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": null, "newPath": ".gitpod.yml", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "scripts/docker_build.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/docker_push.sh", "changes": []}]}, {"timestamp": 1615501951, "sha": "b1aafb20", "message": "fix (topology/algebra/basic): fix universe issue with of_nhds_one (#6647)\nEverything had type max{u v} before.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "of_nhds_one", ["topological_group"]]]}]}, {"timestamp": 1615482578, "sha": "4d8d344c", "message": "feat(data/multiset/basic): Multiset induction lemma (#6623)\nThis is the multiset analog of `finset.induction_on'`", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "induction_on'", ["multiset"]]]}]}, {"timestamp": 1615482576, "sha": "bd3695ac", "message": "feat(data/complex/is_R_or_C): add linear maps for is_R_or_C.re, im, conj and of_real (#6621)\nAdd continuous linear maps and linear isometries (when applicable) for the following `is_R_or_C` functions: `re`, `im`, `conj` and `of_real`.\nRename the existing continuous linear maps defined in complex.basic to adopt the naming convention of is_R_or_C.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "def", "conj_clm", ["complex"]], ["add", "theorem", "conj_clm_apply", ["complex"]], ["add", "theorem", "conj_clm_coe", ["complex"]], ["add", "theorem", "conj_clm_norm", ["complex"]], ["add", "def", "conj_li", ["complex"]], ["mod", "theorem", "continuous_conj", ["complex"]], ["mod", "theorem", "continuous_im", ["complex"]], ["del", "def", "conj", ["complex", "continuous_linear_map"]], ["del", "theorem", "conj_apply", ["complex", "continuous_linear_map"]], ["del", "theorem", "conj_coe", ["complex", "continuous_linear_map"]], ["del", "theorem", "conj_norm", ["complex", "continuous_linear_map"]], ["del", "def", "im", ["complex", "continuous_linear_map"]], ["del", "theorem", "im_apply", ["complex", "continuous_linear_map"]], ["del", "theorem", "im_coe", ["complex", "continuous_linear_map"]], ["del", "theorem", "im_norm", ["complex", "continuous_linear_map"]], ["del", "def", "of_real", ["complex", "continuous_linear_map"]], ["del", "theorem", "of_real_apply", ["complex", "continuous_linear_map"]], ["del", "theorem", "of_real_coe", ["complex", "continuous_linear_map"]], ["del", "theorem", "of_real_norm", ["complex", "continuous_linear_map"]], ["del", "def", "re", ["complex", "continuous_linear_map"]], ["del", "theorem", "re_apply", ["complex", "continuous_linear_map"]], ["del", "theorem", "re_coe", ["complex", "continuous_linear_map"]], ["del", "theorem", "re_norm", ["complex", "continuous_linear_map"]], ["mod", "theorem", "continuous_re", ["complex"]], ["add", "def", "im_clm", ["complex"]], ["add", "theorem", "im_clm_apply", ["complex"]], ["add", "theorem", "im_clm_coe", ["complex"]], ["add", "theorem", "im_clm_norm", ["complex"]], ["mod", "theorem", "isometry_conj", ["complex"]], ["mod", "theorem", "isometry_of_real", ["complex"]], ["del", "def", "conj", ["complex", "linear_isometry"]], ["del", "def", "of_real", ["complex", "linear_isometry"]], ["add", "def", "of_real_clm", ["complex"]], ["add", "theorem", "of_real_clm_apply", ["complex"]], ["add", "theorem", "of_real_clm_coe", ["complex"]], ["add", "theorem", "of_real_clm_norm", ["complex"]], ["add", "def", "of_real_li", ["complex"]], ["add", "def", "re_clm", ["complex"]], ["add", "theorem", "re_clm_apply", ["complex"]], ["add", "theorem", "re_clm_coe", ["complex"]], ["add", "theorem", "re_clm_norm", ["complex"]]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "conj_clm_apply", ["is_R_or_C"]], ["add", "theorem", "conj_clm_coe", ["is_R_or_C"]], ["add", "theorem", "conj_clm_norm", ["is_R_or_C"]], ["add", "theorem", "conj_eq_re_sub_im", ["is_R_or_C"]], ["add", "theorem", "conj_li_apply", ["is_R_or_C"]], ["add", "theorem", "conj_lm_coe", ["is_R_or_C"]], ["add", "theorem", "conj_smul", ["is_R_or_C"]], ["add", "theorem", "continuous_conj", ["is_R_or_C"]], ["add", "theorem", "continuous_im", ["is_R_or_C"]], ["add", "theorem", "continuous_of_real", ["is_R_or_C"]], ["add", "theorem", "continuous_re", ["is_R_or_C"]], ["add", "theorem", "im_clm_apply", ["is_R_or_C"]], ["add", "theorem", "im_clm_coe", ["is_R_or_C"]], ["add", "theorem", "im_lm_coe", ["is_R_or_C"]], ["del", "theorem", "norm_re_clm", ["is_R_or_C"]], ["add", "theorem", "of_real_clm_apply", ["is_R_or_C"]], ["add", "theorem", "of_real_clm_coe", ["is_R_or_C"]], ["add", "theorem", "of_real_clm_norm", ["is_R_or_C"]], ["add", "theorem", "of_real_li_apply", ["is_R_or_C"]], ["add", "theorem", "of_real_lm_coe", ["is_R_or_C"]], ["add", "theorem", "of_real_smul", ["is_R_or_C"]], ["add", "theorem", "re_clm_norm", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "def", "conj_lm", ["complex"]], ["add", "theorem", "conj_lm_coe", ["complex"]], ["add", "def", "im_lm", ["complex"]], ["add", "theorem", "im_lm_coe", ["complex"]], ["del", "theorem", "coe_conj", ["complex", "linear_map"]], ["del", "theorem", "coe_im", ["complex", "linear_map"]], ["del", "theorem", "coe_of_real", ["complex", "linear_map"]], ["del", "theorem", "coe_re", ["complex", "linear_map"]], ["del", "def", "conj", ["complex", "linear_map"]], ["del", "def", "im", ["complex", "linear_map"]], ["del", "def", "of_real", ["complex", "linear_map"]], ["del", "def", "re", ["complex", "linear_map"]], ["add", "def", "of_real_lm", ["complex"]], ["add", "theorem", "of_real_lm_coe", ["complex"]], ["add", "def", "re_lm", ["complex"]], ["add", "theorem", "re_lm_coe", ["complex"]]]}]}, {"timestamp": 1615482575, "sha": "998a3827", "message": "feat(topology/algebra/infinite_sum): add `tsum_even_add_odd` (#6620)\nProve `∑' i, f (2 * i) + ∑' i, f (2 * i + 1) = ∑' i, f i` and some\nsupporting lemmas.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "range_two_mul", []], ["add", "theorem", "range_two_mul_add_one", []]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "is_compl_even_odd", ["nat"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_range_iff", ["function", "injective"]], ["add", "theorem", "add_disjoint", ["has_sum"]], ["add", "theorem", "add_is_compl", ["has_sum"]], ["add", "theorem", "even_add_odd", ["has_sum"]], ["add", "theorem", "even_add_odd", ["summable"]], ["add", "theorem", "tsum_even_add_odd", []], ["add", "theorem", "tsum_union_disjoint", []]]}]}, {"timestamp": 1615482574, "sha": "95a8e958", "message": "refactor(data/{,mv_}polynomial): support function (#6615)\nWith polynomials, we try to avoid the function coercion in favor of the `coeff` functions. However the coercion easily leaks through the abstraction because of the `finsupp.mem_support_iff` lemma.\nThis PR adds the `polynomial.support` and `mv_polynomial.support` functions. This allows us to define the `polynomial.mem_support_iff` and `mv_polynomial.mem_support_iff` lemmas that are stated in terms of `coeff`.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "C_0", ["mv_polynomial"]], ["add", "theorem", "C_apply", ["mv_polynomial"]], ["mod", "def", "coeff", ["mv_polynomial"]], ["mod", "theorem", "coeff_C_mul", ["mv_polynomial"]], ["del", "def", "coeff_coe_to_fun", ["mv_polynomial"]], ["add", "theorem", "mem_support_iff", ["mv_polynomial"]], ["add", "theorem", "mul_def", ["mv_polynomial"]], ["add", "theorem", "not_mem_support_iff", ["mv_polynomial"]], ["add", "theorem", "sum_C", ["mv_polynomial"]], ["add", "theorem", "sum_def", ["mv_polynomial"]], ["add", "def", "support", ["mv_polynomial"]], ["add", "theorem", "support_X", ["mv_polynomial"]], ["add", "theorem", "support_add", ["mv_polynomial"]], ["add", "theorem", "support_monomial", ["mv_polynomial"]], ["add", "theorem", "support_monomial_subset", ["mv_polynomial"]], ["add", "theorem", "support_mul", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["add", "theorem", "support_neg", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "card_support_eq_zero", ["polynomial"]], ["add", "def", "support", ["polynomial"]], ["add", "theorem", "support_add", ["polynomial"]], ["add", "theorem", "support_eq_empty", ["polynomial"]], ["add", "theorem", "support_neg", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "mem_support_iff", ["polynomial"]], ["del", "theorem", "mem_support_iff_coeff_ne_zero", ["polynomial"]], ["add", "theorem", "not_mem_support_iff", ["polynomial"]], ["del", "theorem", "not_mem_support_iff_coeff_zero", ["polynomial"]], ["add", "theorem", "sum_def", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["del", "theorem", "apply_eq_coeff", ["polynomial"]], ["del", "def", "coeff_coe_to_fun", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/ring_theory/mv_polynomial/basic.lean", "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}]}, {"timestamp": 1615482573, "sha": "f5c9d0f4", "message": "feat(topology/algebra/ordered): generalize `real.compact_Icc` (#6602)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_bot_top", ["set"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "diff_mem_iff", ["ultrafilter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "compact_Icc", []], ["add", "theorem", "compact_interval", []], ["add", "theorem", "compact_pi_Icc", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "compact_Icc", []], ["del", "theorem", "compact_pi_Icc", []], ["del", "theorem", "totally_bounded_Icc", ["real"]], ["del", "theorem", "totally_bounded_Ico", ["real"]], ["del", "theorem", "totally_bounded_Ioo", ["real"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "totally_bounded_Icc", []], ["add", "theorem", "totally_bounded_Ico", []], ["add", "theorem", "totally_bounded_Ioc", []], ["add", "theorem", "totally_bounded_Ioo", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "is_complete", ["is_compact"]], ["add", "theorem", "totally_bounded", ["is_compact"]]]}]}, {"timestamp": 1615469318, "sha": "3b3a8b55", "message": "fix(normed_space/multilinear): speed up slow proof (#6639)\nThis proof seems to be right on the edge of timing out and has been causing CI issues.\nI'm not sure if this is the only culprit. This whole file is very slow. Is this because of recent changes, or has it always been like this?", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}]}, {"timestamp": 1615469316, "sha": "3d451c70", "message": "chore(tactic/interactive): propagate tags in `substs` (#6638)\nBefore this change, the `case left` tactic here did not work:\n```lean\nexample {α : Type*} (a b c : α) (h : a = b) : (a = b ∨ a = c) ∧ true :=\nbegin\n with_cases {apply and.intro},\n substs' h,\n case left : { exact or.inl rfl },\n case right : { trivial }\nend\n```", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1615469315, "sha": "9beec03c", "message": "feat(group_theory/subgroup): le_ker_iff (#6630)\nA subgroup is contained in the kernel iff it is mapped to the trivial subgroup.", "changes": [{"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": []}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["del", "theorem", "map_bot_iff", ["lie_hom"]], ["add", "theorem", "map_eq_bot_iff", ["lie_ideal"]]]}, {"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "ker_eq_bot_iff", ["monoid_hom"]], ["mod", "theorem", "map_eq_bot_iff", ["subgroup"]], ["add", "theorem", "map_eq_bot_iff_of_injective", ["subgroup"]]]}]}, {"timestamp": 1615469313, "sha": "57fda28f", "message": "refactor(data/polynomial/degree/definitions): Remove hypothesis of nat_degree_X_pow_sub_C (#6628)\nThe lemma `nat_degree_X_pow_sub_C ` had an unnecessary hypothesis.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "nat_degree_X_pow_sub_C", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}]}, {"timestamp": 1615469312, "sha": "41f11966", "message": "feat(field_theory/polynomial_galois_group): ext lemma (#6627)\nTwo elements of `gal p` are equal if they agree on all roots of `p`", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "ext", ["polynomial", "gal"]]]}]}, {"timestamp": 1615469311, "sha": "3dd12573", "message": "feat(group_theory/solvable): Commutative groups are solvable (#6625)\nIn practice, `is_solvable_of_comm` is hard to use, since you often aren't working with a `comm_group`. Instead, it is much nicer to be able to write:\n`apply is_solvable_of_comm'`\n`intros g h`", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["add", "theorem", "is_solvable_of_comm", []]]}]}, {"timestamp": 1615469310, "sha": "2c4a9855", "message": "feat(field_theory/splitting_field): splits_pow (#6624)\nIf a polynomial splits then so do its powers.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "splits_X_pow", ["polynomial"]], ["add", "theorem", "splits_pow", ["polynomial"]]]}]}, {"timestamp": 1615469309, "sha": "653fd292", "message": "refactor(topology): make is_closed a class (#6552)\nIn `lean-liquid`, it would be useful that `is_closed` would be a class, to be able to infer a normed space structure on `E/F` when `F` is a closed subspace of a normed space `E`. This is implemented in this PR. This is mostly straightforward: the only proofs that need fixing are those abusing defeqness, so the new version makes them clearer IMHO.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "def", "is_closed", []], ["add", "theorem", "is_closed_compl", ["is_open"]], ["mod", "theorem", "is_open_compl_iff", []]]}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1615461558, "sha": "56065f7e", "message": "feat(measure_theory/pi_system) lemmas for pi_system, useful for independence. (#6353)\nThe goal here is to prove that the expectation of a product of an finite number of independent random variables equals the production of the expectations.\nSee https://github.com/leanprover-community/mathlib/tree/mzinkevi_independent_finite_alt", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "def", "is_pi_system", []], ["del", "theorem", "ext", ["measurable_space", "dynkin_system"]], ["del", "def", "generate", ["measurable_space", "dynkin_system"]], ["del", "theorem", "generate_from_eq", ["measurable_space", "dynkin_system"]], ["del", "inductive", "generate_has", ["measurable_space", "dynkin_system"]], ["del", "theorem", "generate_has_compl", ["measurable_space", "dynkin_system"]], ["del", "theorem", "generate_has_def", ["measurable_space", "dynkin_system"]], ["del", "theorem", "generate_has_subset_generate_measurable", ["measurable_space", "dynkin_system"]], ["del", "theorem", "generate_inter", ["measurable_space", "dynkin_system"]], ["del", "theorem", "generate_le", ["measurable_space", "dynkin_system"]], ["del", "theorem", "has_Union", ["measurable_space", "dynkin_system"]], ["del", "theorem", "has_compl_iff", ["measurable_space", "dynkin_system"]], ["del", "theorem", "has_diff", ["measurable_space", "dynkin_system"]], ["del", "theorem", "has_union", ["measurable_space", "dynkin_system"]], ["del", "theorem", "has_univ", ["measurable_space", "dynkin_system"]], ["del", "def", "of_measurable_space", ["measurable_space", "dynkin_system"]], ["del", "theorem", "of_measurable_space_le_of_measurable_space_iff", ["measurable_space", "dynkin_system"]], ["del", "theorem", "of_measurable_space_to_measurable_space", ["measurable_space", "dynkin_system"]], ["del", "def", "restrict_on", ["measurable_space", "dynkin_system"]], ["del", "def", "to_measurable_space", ["measurable_space", "dynkin_system"]], ["del", "structure", "dynkin_system", ["measurable_space"]], ["del", "theorem", "induction_on_inter", ["measurable_space"]], ["del", "theorem", "is_pi_system_measurable_set", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/pi_system.lean", "changes": [["add", "theorem", "generate_from_generate_pi_system_eq", []], ["add", "theorem", "generate_from_measurable_set_of_generate_pi_system", []], ["add", "inductive", "generate_pi_system", []], ["add", "theorem", "generate_pi_system_eq", []], ["add", "theorem", "generate_pi_system_measurable_set", []], ["add", "theorem", "generate_pi_system_mono", []], ["add", "theorem", "generate_pi_system_subset_self", []], ["add", "theorem", "singleton", ["is_pi_system"]], ["add", "def", "is_pi_system", []], ["add", "theorem", "is_pi_system_generate_pi_system", []], ["add", "theorem", "ext", ["measurable_space", "dynkin_system"]], ["add", "def", "generate", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_from_eq", ["measurable_space", "dynkin_system"]], ["add", "inductive", "generate_has", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_has_compl", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_has_def", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_has_subset_generate_measurable", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_inter", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_le", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_Union", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_compl_iff", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_diff", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_union", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_univ", ["measurable_space", "dynkin_system"]], ["add", "def", "of_measurable_space", ["measurable_space", "dynkin_system"]], ["add", "theorem", "of_measurable_space_le_of_measurable_space_iff", ["measurable_space", "dynkin_system"]], ["add", "theorem", "of_measurable_space_to_measurable_space", ["measurable_space", "dynkin_system"]], ["add", "def", "restrict_on", ["measurable_space", "dynkin_system"]], ["add", "def", "to_measurable_space", ["measurable_space", "dynkin_system"]], ["add", "structure", "dynkin_system", ["measurable_space"]], ["add", "theorem", "induction_on_inter", ["measurable_space"]], ["add", "theorem", "is_pi_system_measurable_set", ["measurable_space"]], ["add", "theorem", "mem_generate_pi_system_Union_elim'", []], ["add", "theorem", "mem_generate_pi_system_Union_elim", []], ["add", "theorem", "subset_generate_pi_system_self", []]]}]}, {"timestamp": 1615442743, "sha": "925ea07d", "message": "feat(linear_algebra/basic): add missing lemma finsupp.sum_smul_index_linear_map' (#6565)\nSee also [this Zulip conversation](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Sum.20is.20linear/near/229021943). cc @eric-wieser", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "sum_smul_index_add_monoid_hom", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "sum_smul_index_linear_map'", ["finsupp"]]]}]}, {"timestamp": 1615439201, "sha": "b7c5709d", "message": "chore(geometry/manifold): use notation `𝓘(𝕜, E)` (#6636)", "changes": [{"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}]}, {"timestamp": 1615430931, "sha": "514973a9", "message": "chore(scripts): update nolints.txt (#6635)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1615430929, "sha": "0e321167", "message": "feat(data/dfinsupp): add is_scalar_tower and smul_comm_class (#6614)\nThis also weakens the requirements for the `has_scalar` instance", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "coe_smul", ["dfinsupp"]], ["mod", "theorem", "smul_apply", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1615430927, "sha": "a814e189", "message": "ci(.github/workflows/build.yml): do not install azcopy, change upload logic (#6613)\nThe \"install azcopy\" step has been [failing](https://github.com/leanprover-community/mathlib/runs/2070026978) from time to time, probably due to failed downloads. As it turns out, the GitHub-hosted actions runner [comes with it installed](https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md#tools), so I've removed that step entirely.\nI also made two other changes:\n- The \"push release to azure\" step now only runs if the build actually started. The idea is that if the build never even starts due to e.g. `elan` temporarily failing to install, then we should be able to restart the build on GitHub and get `.olean`s for that commit without having to push another dummy commit. Currently we can't do this because we push an empty archive to Azure no matter what.\n- We now upload artifacts if the build fails. This gives us an alternative way to get `.olean`s in case something goes wrong with Azure, and might make working with forks of mathlib slightly easier.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1615423669, "sha": "c5c97f27", "message": "chore(ring_theory/polynomial/basic): remove a use of comap (#6612)\nThis merges together `quotient_equiv_quotient_mv_polynomial` and `quotient_alg_equiv_quotient_mv_polynomial`, since the two now have the same domain and codomain.\n`comap` was previously needed here to provide a wrapper type with an R-algebra structure on `mv_polynomial σ (I.quotient)`.\nThe updated `mv_polynomial.algebra` in #6533 transfers the `algebra R I.quotient` structure directly to `mv_polynomial σ I.quotient`, eliminating the need for this wrapper type.", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["del", "def", "quotient_alg_equiv_quotient_mv_polynomial", ["mv_polynomial"]]]}]}, {"timestamp": 1615423668, "sha": "590444c4", "message": "chore(topology/metric/hausdorff_distance): use `infi`/`supr` (#6611)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "sup_eq_zero", ["ennreal"]], ["add", "theorem", "supr_eq_zero", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["del", "theorem", "supr_eq_zero", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "def", "inf_edist", ["emetric"]], ["mod", "theorem", "inf_edist_empty", ["emetric"]], ["add", "theorem", "le_inf_edist", ["emetric"]]]}]}, {"timestamp": 1615408986, "sha": "5be9ceae", "message": "chore(linear_algebra/quadratic_form): clean up universe collisions, generalize smul lemmas (#6609)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["mod", "theorem", "coe_fn_smul", ["quadratic_form"]], ["mod", "theorem", "polar_comm", ["quadratic_form"]], ["mod", "theorem", "polar_smul", ["quadratic_form"]], ["add", "theorem", "polar_smul_left_of_tower", ["quadratic_form"]], ["add", "theorem", "polar_smul_right_of_tower", ["quadratic_form"]], ["mod", "theorem", "smul_apply", ["quadratic_form"]]]}]}, {"timestamp": 1615408985, "sha": "547bf551", "message": "feat(data/complex/module): transfer all `has_scalar ℝ` structures to `ℂ` (#6562)\nThis provides (for an `R` with the same instance on `ℝ`) the instances:\n* `has_scalar R ℂ`\n* `is_scalar_tower R S ℂ`\n* `smul_comm_class R S ℂ`\n* `mul_action R ℂ`\n* `distrib_mul_action R ℂ`\n* `semimodule R ℂ`\n* `algebra R ℂ`\n* `normed_algebra R ℂ`\nThis has the downside that `smul_coe` is no longer a `rfl` lemma, but means that `ℂ` is automatically an algebra over `ℝ≥0`.\nIt renames `smul_re` and `smul_im` to `of_real_mul_re` and `of_real_mul_im`, since the previous statements did not use `smul` at all, and renaming frees up these names for lemmas which _do_ use `smul`.\nThis removes `normed_space.restrict_scalars_real E` (implemented as `normed_space.restrict_scalars ℝ ℂ E`) as:\n* As an instance, it now causes unwanted diamonds\n* After downgrading to a def, it is never used\n* The docs for `normed_space.restrict_scalars` suggest judicious use, and that if you want this instance you should use the type synonym `semimodule.restrict_scalars ℝ ℂ E` which will have this instance for free.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "of_real_mul'", ["complex"]], ["add", "theorem", "of_real_mul_im", ["complex"]], ["add", "theorem", "of_real_mul_re", ["complex"]], ["del", "theorem", "of_real_smul", ["complex"]], ["del", "theorem", "smul_im", ["complex"]], ["del", "theorem", "smul_re", ["complex"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "of_real_mul_im", ["is_R_or_C"]], ["del", "theorem", "smul_im'", ["is_R_or_C"]], ["mod", "theorem", "smul_im", ["is_R_or_C"]], ["del", "theorem", "smul_re'", ["is_R_or_C"]], ["mod", "theorem", "smul_re", ["is_R_or_C"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["mod", "theorem", "smul_coe", ["complex"]], ["add", "theorem", "smul_im", ["complex"]], ["add", "theorem", "smul_re", ["complex"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}]}, {"timestamp": 1615408984, "sha": "60e25799", "message": "feat(ring_theory/valuation/basic): additive valuations (#6559)\nIntroduces `add_valuation`, a version of `valuation` that takes values in a `linear_ordered_add_comm_monoid_with_top`.\nAs an example, defines `multiplicity.add_valuation`", "changes": [{"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "add_valuation_apply", ["multiplicity"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "def", "comap", ["add_valuation"]], ["add", "theorem", "comap_comp", ["add_valuation"]], ["add", "theorem", "comap_id", ["add_valuation"]], ["add", "theorem", "comap_on_quot_eq", ["add_valuation"]], ["add", "theorem", "comap_supp", ["add_valuation"]], ["add", "theorem", "ext", ["add_valuation"]], ["add", "theorem", "ext_iff", ["add_valuation"]], ["add", "theorem", "comap", ["add_valuation", "is_equiv"]], ["add", "theorem", "map", ["add_valuation", "is_equiv"]], ["add", "theorem", "ne_top", ["add_valuation", "is_equiv"]], ["add", "theorem", "of_eq", ["add_valuation", "is_equiv"]], ["add", "theorem", "refl", ["add_valuation", "is_equiv"]], ["add", "theorem", "symm", ["add_valuation", "is_equiv"]], ["add", "theorem", "trans", ["add_valuation", "is_equiv"]], ["add", "theorem", "val_eq", ["add_valuation", "is_equiv"]], ["add", "def", "is_equiv", ["add_valuation"]], ["add", "def", "map", ["add_valuation"]], ["add", "theorem", "map_add", ["add_valuation"]], ["add", "theorem", "map_add_supp", ["add_valuation"]], ["add", "theorem", "map_le_add", ["add_valuation"]], ["add", "theorem", "map_le_sum", ["add_valuation"]], ["add", "theorem", "map_lt_add", ["add_valuation"]], ["add", "theorem", "map_lt_sum'", ["add_valuation"]], ["add", "theorem", "map_lt_sum", ["add_valuation"]], ["add", "theorem", "map_mul", ["add_valuation"]], ["add", "theorem", "map_one", ["add_valuation"]], ["add", "theorem", "map_pow", ["add_valuation"]], ["add", "theorem", "map_zero", ["add_valuation"]], ["add", "theorem", "mem_supp_iff", ["add_valuation"]], ["add", "theorem", "ne_top_iff", ["add_valuation"]], ["add", "def", "of", ["add_valuation"]], ["add", "theorem", "of_apply", ["add_valuation"]], ["add", "def", "on_quot", ["add_valuation"]], ["add", "theorem", "on_quot_comap_eq", ["add_valuation"]], ["add", "def", "on_quot_val", ["add_valuation"]], ["add", "theorem", "self_le_supp_comap", ["add_valuation"]], ["add", "def", "supp", ["add_valuation"]], ["add", "theorem", "supp_quot", ["add_valuation"]], ["add", "theorem", "supp_quot_supp", ["add_valuation"]], ["add", "def", "to_preorder", ["add_valuation"]], ["add", "theorem", "top_iff", ["add_valuation"]], ["add", "def", "add_valuation", []]]}]}, {"timestamp": 1615408982, "sha": "e62a406b", "message": "feat(linear_algebra/determinant): determinant of a block triangular matrix (#6050)\nAdd lemmas for determinants of block triangular matrices.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "subtype_subtype_equiv_subtype_apply", ["equiv"]], ["add", "theorem", "subtype_subtype_equiv_subtype_exists_apply", ["equiv"]], ["add", "theorem", "subtype_subtype_equiv_subtype_inter_apply", ["equiv"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "to_block", ["matrix"]], ["add", "theorem", "to_block_apply", ["matrix"]], ["add", "def", "to_square_block'", ["matrix"]], ["add", "def", "to_square_block", ["matrix"]], ["add", "theorem", "to_square_block_def'", ["matrix"]], ["add", "theorem", "to_square_block_def", ["matrix"]], ["add", "def", "to_square_block_prop", ["matrix"]], ["add", "theorem", "to_square_block_prop_def", ["matrix"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "default_perm", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "perm_maps_to_inl_iff_maps_to_inr", ["equiv", "perm"]], ["add", "theorem", "perm_on_inl_iff_perm_on_inr", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_eq_elem_of_card_eq_one", ["matrix"]], ["add", "theorem", "det_unique", ["matrix"]], ["add", "theorem", "upper_two_block_triangular_det", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "def", "block_triangular_matrix'", ["matrix"]], ["add", "def", "block_triangular_matrix", ["matrix"]], ["add", "theorem", "det_of_block_triangular_matrix''", ["matrix"]], ["add", "theorem", "det_of_block_triangular_matrix'", ["matrix"]], ["add", "theorem", "det_of_block_triangular_matrix", ["matrix"]], ["add", "theorem", "det_of_lower_triangular", ["matrix"]], ["add", "theorem", "det_of_upper_triangular", ["matrix"]], ["add", "theorem", "det_to_block", ["matrix"]], ["add", "theorem", "det_to_square_block'", ["matrix"]], ["add", "theorem", "det_to_square_block", ["matrix"]], ["add", "theorem", "equiv_block_det", ["matrix"]], ["add", "theorem", "to_square_block_det''", ["matrix"]], ["add", "theorem", "two_block_triangular_det", ["matrix"]], ["add", "theorem", "upper_two_block_triangular'", ["matrix"]], ["add", "theorem", "upper_two_block_triangular", ["matrix"]]]}]}, {"timestamp": 1615395928, "sha": "664feede", "message": "chore(topology/algebra/ordered): add some `at_bot` versions of lemmas (#6618)", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_at_bot_cinfi", []], ["add", "theorem", "tendsto_at_bot_csupr", []], ["add", "theorem", "tendsto_at_bot_infi", []], ["add", "theorem", "tendsto_at_bot_supr", []]]}]}, {"timestamp": 1615395927, "sha": "f675a864", "message": "feat(data/real/{nnreal,ennreal}): add (e)nnreal.of_real_bit0/bit1 (#6617)\nAdd bit0/bit1 lemmas for `nnreal.of_real`, `ennreal.of_real` and `ennreal.to_nnreal`.\nWith these additions, it is for example possible to prove `h : ennreal.of_real (2 : ℝ) = 2 := by simp`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_bit0", ["ennreal"]], ["add", "theorem", "of_real_bit1", ["ennreal"]], ["add", "theorem", "to_nnreal_bit0", ["ennreal"]], ["add", "theorem", "to_nnreal_bit1", ["ennreal"]], ["add", "theorem", "to_real_bit0", ["ennreal"]], ["add", "theorem", "to_real_bit1", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "of_real_bit0", ["nnreal"]], ["add", "theorem", "of_real_bit1", ["nnreal"]]]}]}, {"timestamp": 1615395926, "sha": "df1337ef", "message": "feat(data/local_equiv,topology/local_homeomorph): add `local_equiv.pi` and `local_homeomorph.pi` (#6574)", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["add", "theorem", "pi_coe", ["local_equiv"]], ["add", "theorem", "pi_symm", ["local_equiv"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_dcomp", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_at_pi", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_on_pi", []], ["add", "theorem", "continuous_within_at_pi", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "def", "pi", ["local_homeomorph"]]]}]}, {"timestamp": 1615377433, "sha": "e221dc9a", "message": "feat(ring_theory/hahn_series): algebra structure, equivalences with power series (#6540)\nPlaces an `algebra` structure on `hahn_series`\nDefines a `ring_equiv` and when relevant an `alg_equiv` between `hahn_series nat R` and `power_series R`.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "is_wf_univ_iff", ["set"]], ["add", "theorem", "is_wf", ["well_founded"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "def", "C", ["hahn_series"]], ["add", "theorem", "C_apply", ["hahn_series"]], ["add", "theorem", "C_eq_algebra_map", ["hahn_series"]], ["add", "theorem", "C_mul_eq_smul", ["hahn_series"]], ["add", "theorem", "C_one", ["hahn_series"]], ["add", "theorem", "C_zero", ["hahn_series"]], ["mod", "theorem", "add_coeff'", ["hahn_series"]], ["mod", "theorem", "add_coeff", ["hahn_series"]], ["add", "theorem", "algebra_map_apply", ["hahn_series"]], ["add", "theorem", "coeff_to_power_series", ["hahn_series"]], ["add", "theorem", "coeff_to_power_series_symm", ["hahn_series"]], ["add", "theorem", "eq_of_mem_support_single", ["hahn_series"]], ["add", "theorem", "mul_single_coeff_add", ["hahn_series"]], ["add", "def", "add_monoid_hom", ["hahn_series", "single"]], ["add", "theorem", "add_monoid_hom_apply", ["hahn_series", "single"]], ["add", "def", "linear_map", ["hahn_series", "single"]], ["add", "theorem", "linear_map_apply", ["hahn_series", "single"]], ["mod", "def", "single", ["hahn_series"]], ["mod", "theorem", "single_eq_zero", ["hahn_series"]], ["add", "theorem", "single_mul_coeff_add", ["hahn_series"]], ["add", "theorem", "single_mul_single", ["hahn_series"]], ["add", "theorem", "single_zero_mul_coeff", ["hahn_series"]], ["add", "theorem", "support_single_subset", ["hahn_series"]], ["add", "def", "to_power_series", ["hahn_series"]], ["add", "def", "to_power_series_alg", ["hahn_series"]], ["add", "theorem", "to_power_series_alg_apply", ["hahn_series"]], ["add", "theorem", "to_power_series_alg_symm_apply", ["hahn_series"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "C_eq_algebra_map", ["mv_power_series"]], ["add", "theorem", "algebra_map_apply", ["mv_power_series"]], ["add", "theorem", "C_eq_algebra_map", ["power_series"]], ["add", "theorem", "algebra_map_apply", ["power_series"]]]}]}, {"timestamp": 1615377432, "sha": "eaa02185", "message": "feat(category_theory/triangulated/basic): add definitions of additive category and triangle (#6539)\nThis PR adds the definition of an additive category and the definition of a triangle in an additive category with an additive shift.", "changes": [{"oldPath": null, "newPath": "src/category_theory/additive/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/triangulated/basic.lean", "changes": [["add", "structure", "triangle", ["category_theory", "triangulated"]], ["add", "def", "comp", ["category_theory", "triangulated", "triangle_morphism"]], ["add", "theorem", "comp_assoc", ["category_theory", "triangulated", "triangle_morphism"]], ["add", "theorem", "comp_id", ["category_theory", "triangulated", "triangle_morphism"]], ["add", "theorem", "id_comp", ["category_theory", "triangulated", "triangle_morphism"]], ["add", "structure", "triangle_morphism", ["category_theory", "triangulated"]], ["add", "def", "triangle_morphism_id", ["category_theory", "triangulated"]]]}]}, {"timestamp": 1615377430, "sha": "a7f1e3c6", "message": "feat(normed_group): tendsto_at_top (#6525)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "tendsto_at_top'", ["normed_group"]], ["add", "theorem", "tendsto_at_top", ["normed_group"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "tendsto_at_top'", ["metric"]]]}]}, {"timestamp": 1615377429, "sha": "ccd35db8", "message": "feat(linear_algebra/matrix): to_matrix and to_lin as alg_equiv (#6496)\nThe existing `linear_map.to_matrix` and `matrix.to_lin` can be upgraded to an `alg_equiv` if working on linear endomorphisms or square matrices. The API is copied over in rote fashion.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_eq_smul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "def", "to_matrix_alg_equiv'", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_apply", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_comp", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_id", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_mul", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_symm", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv'_to_lin_alg_equiv'", ["linear_map"]], ["add", "def", "to_matrix_alg_equiv", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_apply", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_comp", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_id", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_mul", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_range", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_symm", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_to_lin_alg_equiv", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_transpose_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_alg_equiv_transpose_apply", ["linear_map"]], ["add", "def", "to_lin_alg_equiv'", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_apply", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_mul", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_one", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_symm", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv'_to_matrix_alg_equiv'", ["matrix"]], ["add", "def", "to_lin_alg_equiv", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_apply", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_mul", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_one", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_self", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_symm", ["matrix"]], ["add", "theorem", "to_lin_alg_equiv_to_matrix_alg_equiv", ["matrix"]]]}]}, {"timestamp": 1615366315, "sha": "b1ecc987", "message": "feat(nat/digits): natural basis representation using list sum and map (#5975)", "changes": [{"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "sum_zip_with_distrib_left", ["list"]]]}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "of_digits_eq_sum_map_with_index", ["nat"]], ["add", "theorem", "of_digits_eq_sum_map_with_index_aux", ["nat"]]]}]}, {"timestamp": 1615343014, "sha": "fad44b9f", "message": "feat(ring_theory/ideal/operations): add quotient_equiv (#6492)\nThe ring equiv `R/I ≃+* S/J` induced by a ring equiv `f : R ≃+* S`, where `J = f(I)`, and similarly for algebras.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "comap_of_equiv", ["ideal"]], ["add", "theorem", "map_comap_of_equiv", ["ideal"]], ["add", "theorem", "map_of_equiv", ["ideal"]], ["add", "def", "quotient_equiv", ["ideal"]], ["add", "def", "quotient_equiv_alg", ["ideal"]], ["add", "theorem", "quotient_map_comp_mkₐ", ["ideal"]], ["add", "theorem", "quotient_map_mkₐ", ["ideal"]], ["add", "def", "quotient_mapₐ", ["ideal"]]]}]}, {"timestamp": 1615343013, "sha": "4e370b5d", "message": "feat(topology): shrinking lemma (#6478)\n### Add a few versions of the shrinking lemma:\n* `exists_subset_Union_closure_subset` and `exists_Union_eq_closure_subset`: shrinking lemma for general normal spaces;\n* `exists_subset_Union_ball_radius_lt`, `exists_Union_ball_eq_radius_lt`, `exists_subset_Union_ball_radius_pos_lt`, `exists_Union_ball_eq_radius_pos_lt`: shrinking lemma for coverings by open balls in a proper metric space;\n* `exists_locally_finite_subset_Union_ball_radius_lt`, `exists_locally_finite_Union_eq_ball_radius_lt`: given a positive function `R : X → ℝ`, finds a locally finite covering by open balls `ball (c i) (r' i)`, `r' i < R` and a subcovering by balls of strictly smaller radius `ball (c i) (r i)`, `0 < r i < r' i`.\n### Other API changes\n* add `@[simp]` to `set.compl_subset_compl`;\n* add `is_closed_bInter` and `locally_finite.point_finite`;\n* add `metric.closed_ball_subset_closed_ball`, `metric.uniformity_basis_dist_lt`, `exists_pos_lt_subset_ball`, and `exists_lt_subset_ball`;\n* generalize `refinement_of_locally_compact_sigma_compact_of_nhds_basis` to `refinement_of_locally_compact_sigma_compact_of_nhds_basis_set`, replace arguments `(s : X → set X) (hs : ∀ x, s x ∈ 𝓝 x)` with a hint to use `filter.has_basis.restrict_subset` if needed.\n* make `s` and `t` arguments of `normal_separation` implicit;\n* add `normal_exists_closure_subset`;\n* turn `sigma_compact_space_of_locally_compact_second_countable` into an `instance`.", "changes": [{"oldPath": "roadmap/topology/shrinking_lemma.lean", "newPath": "roadmap/topology/shrinking_lemma.lean", "changes": [["add", "theorem", "shrinking_lemma", ["roadmap"]], ["del", "theorem", "shrinking_lemma", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "compl_subset_compl", ["set"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "is_closed_bInter", []], ["add", "theorem", "point_finite", ["locally_finite"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "exists_Union_ball_eq_radius_lt", []], ["add", "theorem", "exists_Union_ball_eq_radius_pos_lt", []], ["add", "theorem", "exists_locally_finite_Union_eq_ball_radius_lt", []], ["add", "theorem", "exists_locally_finite_subset_Union_ball_radius_lt", []], ["add", "theorem", "exists_lt_subset_ball", []], ["add", "theorem", "exists_pos_lt_subset_ball", []], ["add", "theorem", "exists_subset_Union_ball_radius_lt", []], ["add", "theorem", "exists_subset_Union_ball_radius_pos_lt", []], ["add", "theorem", "closed_ball_subset_ball", ["metric"]], ["add", "theorem", "uniformity_basis_dist_lt", ["metric"]]]}, {"oldPath": "src/topology/paracompact.lean", "newPath": "src/topology/paracompact.lean", "changes": [["add", "theorem", "refinement_of_locally_compact_sigma_compact_of_nhds_basis_set", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "normal_exists_closure_subset", []], ["mod", "theorem", "normal_separation", []]]}, {"oldPath": null, "newPath": "src/topology/shrinking_lemma.lean", "changes": [["add", "theorem", "exists_Union_eq_closure_subset", []], ["add", "theorem", "exists_subset_Union_closure_subset", []], ["add", "theorem", "apply_eq", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "apply_eq_of_chain", ["shrinking_lemma", "partial_refinement"]], ["add", "def", "chain_Sup", ["shrinking_lemma", "partial_refinement"]], ["add", "def", "chain_Sup_carrier", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "closure_subset", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "exists_gt", ["shrinking_lemma", "partial_refinement"]], ["add", "def", "find", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "find_apply_of_mem", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "find_mem", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "le_chain_Sup", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "mem_find_carrier_iff", ["shrinking_lemma", "partial_refinement"]], ["add", "theorem", "subset_Union", ["shrinking_lemma", "partial_refinement"]], ["add", "structure", "partial_refinement", ["shrinking_lemma"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "theorem", "sigma_compact_space_of_locally_compact_second_countable", []]]}]}, {"timestamp": 1615343012, "sha": "05d3955a", "message": "feat(number_theory/bernoulli): bernoulli_power_series (#6456)\nCo-authored-by Ashvni Narayanan", "changes": [{"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_congr", ["finset", "nat"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["add", "theorem", "bernoulli'_eq_bernoulli", []], ["add", "def", "bernoulli'_power_series", []], ["del", "theorem", "bernoulli'_power_series", []], ["add", "theorem", "bernoulli'_power_series_mul_exp_sub_one", []], ["add", "def", "bernoulli_power_series", []], ["add", "theorem", "bernoulli_power_series_mul_exp_sub_one", []], ["add", "theorem", "bernoulli_spec'", []]]}]}, {"timestamp": 1615343011, "sha": "c9628717", "message": "feat(linear_algebra): linear_independent_fin_snoc (#6455)\nA slight variation on the existing `linear_independent_fin_cons`.", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["mod", "theorem", "fin_add_flip_apply_left", []]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "linear_independent_fin_snoc", []], ["add", "theorem", "linear_independent_fin_succ'", []]]}]}, {"timestamp": 1615326236, "sha": "b697e523", "message": "refactor(ring_theory/power_series/basic): simplify truncation (#6605)\nI'm trying to reduce how much finsupp leaks through the polynomial API, in this case it works quite nicely.", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "coeff_trunc_fun", ["mv_power_series"]]]}]}, {"timestamp": 1615326235, "sha": "09a505a7", "message": "feat(ring_theory/witt_vector): use structure instead of irreducible (#6604)", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "cons_fin_one", ["matrix"]]]}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": [["mod", "def", "map_fun", ["witt_vector"]], ["add", "theorem", "matrix_vec_empty_coeff", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": [["del", "def", "coeff", ["witt_vector"]], ["mod", "theorem", "coeff_mk", ["witt_vector"]], ["del", "def", "mk", ["witt_vector"]], ["add", "theorem", "v2_coeff", ["witt_vector"]], ["add", "structure", "witt_vector", []], ["del", "def", "witt_vector", []]]}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/init_tail.lean", "newPath": "src/ring_theory/witt_vector/init_tail.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/teichmuller.lean", "newPath": "src/ring_theory/witt_vector/teichmuller.lean", "changes": [["mod", "def", "teichmuller_fun", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/verschiebung.lean", "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": []}]}, {"timestamp": 1615326233, "sha": "18d4e519", "message": "chore(algebra/ring/basic): weaken ring.inverse to only require monoid_with_zero (#6603)\nSplit from #5539 because I actually want to use this, and the PR is large and stalled.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "inverse_non_unit", ["ring"]], ["mod", "theorem", "inverse_unit", ["ring"]]]}]}, {"timestamp": 1615326232, "sha": "fb674e1e", "message": "feat(data/finset/lattice): map_sup, map_inf (#6601)", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "map_inf", ["finset"]], ["add", "theorem", "map_sup", ["finset"]]]}]}, {"timestamp": 1615326231, "sha": "be6753ca", "message": "feat(data/{list,multiset,finset}): map_filter (#6600)\nThis renames `list.filter_of_map` to `list.map_filter`, which unifies the name of the `map_filter` lemmas for lists and finsets, and adds a corresponding lemma for multisets.\nUnfortunately, the name `list.filter_map` is already used for a definition.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "filter_of_map", ["list"]], ["add", "theorem", "map_filter", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "map_filter", ["multiset"]]]}]}, {"timestamp": 1615326230, "sha": "366a23fb", "message": "feat(topology/constructions): frontier/interior/closure in `X × Y` (#6594)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "prod_diff_prod", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "prod_mem_prod_iff", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "frontier_Ici_subset", []], ["add", "theorem", "frontier_Iic_subset", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "frontier_empty", []], ["add", "theorem", "frontier_univ", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "frontier_prod_eq", []], ["add", "theorem", "frontier_prod_univ_eq", []], ["add", "theorem", "frontier_univ_prod_eq", []], ["add", "theorem", "interior_prod_eq", []], ["add", "theorem", "prod_mem_nhds_iff", []]]}]}, {"timestamp": 1615326229, "sha": "9ff74582", "message": "feat(algebra/group_power/basic): add abs_add_eq_add_abs_iff (#6593)\nI've added\n```\nlemma abs_add_eq_add_abs_iff {α : Type*} [linear_ordered_add_comm_group α] (a b : α) :\n abs (a + b) = abs a + abs b ↔ (0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0)\n```\nfrom `lean-liquid`. For some reasons I am not able to use `wlog hle : a ≤ b using [a b, b a]` at the beginning of the proof, Lean says `unknown identifier 'wlog'` and if I try to import `tactic.wlog` I have tons of errors.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "abs_add_eq_add_abs_iff", []], ["add", "theorem", "abs_add_eq_add_abs_le", []], ["add", "theorem", "abs_gsmul", []], ["add", "theorem", "abs_nsmul", []]]}]}, {"timestamp": 1615326227, "sha": "8e246cbb", "message": "refactor(data/mv_polynomial): cleanup equivs (#6589)\nThis:\n* Replaces `alg_equiv_congr_left` with `rename_equiv` (to match `rename`)\n* Removes `ring_equiv_congr_left` (it's now `rename_equiv.to_ring_equiv`)\n* Renames `alg_equiv_congr_right` to `map_alg_equiv` (to match `map`) and removes the `comap` from the definition\n* Renames `ring_equiv_congr_right` to `map_equiv` (to match `map`)\n* Removes `alg_equiv_congr` (it's now `(map_alg_equiv R e).trans $ (rename_equiv e_var).restrict_scalars _`, which while longer is never used anyway)\n* Removes `ring_equiv_congr` (it's now `(map_equiv R e).trans $ (rename_equiv e_var).to_ring_equiv`, which while longer is never used anyway)\n* Replaces `punit_ring_equiv` with `punit_alg_equiv`\n* Removes `comap` from the definition of `sum_alg_equiv`\n* Promotes `option_equiv_left`, `option_equiv_right`, and `fin_succ_equiv` to `alg_equiv`s\nThis is a follow-up to #6420", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["del", "def", "alg_equiv_congr", ["mv_polynomial"]], ["del", "def", "alg_equiv_congr_left", ["mv_polynomial"]], ["del", "theorem", "alg_equiv_congr_left_apply", ["mv_polynomial"]], ["del", "theorem", "alg_equiv_congr_left_symm_apply", ["mv_polynomial"]], ["del", "def", "alg_equiv_congr_right", ["mv_polynomial"]], ["del", "theorem", "alg_equiv_congr_right_apply", ["mv_polynomial"]], ["del", "theorem", "alg_equiv_congr_right_symm_apply", ["mv_polynomial"]], ["add", "def", "map_alg_equiv", ["mv_polynomial"]], ["add", "theorem", "map_alg_equiv_apply", ["mv_polynomial"]], ["add", "theorem", "map_alg_equiv_refl", ["mv_polynomial"]], ["add", "theorem", "map_alg_equiv_symm", ["mv_polynomial"]], ["add", "theorem", "map_alg_equiv_trans", ["mv_polynomial"]], ["add", "def", "map_equiv", ["mv_polynomial"]], ["add", "theorem", "map_equiv_refl", ["mv_polynomial"]], ["add", "theorem", "map_equiv_symm", ["mv_polynomial"]], ["add", "theorem", "map_equiv_trans", ["mv_polynomial"]], ["mod", "def", "option_equiv_left", ["mv_polynomial"]], ["mod", "def", "option_equiv_right", ["mv_polynomial"]], ["add", "def", "punit_alg_equiv", ["mv_polynomial"]], ["del", "def", "punit_ring_equiv", ["mv_polynomial"]], ["del", "def", "ring_equiv_congr", ["mv_polynomial"]], ["del", "def", "ring_equiv_congr_left", ["mv_polynomial"]], ["del", "theorem", "ring_equiv_congr_left_apply", ["mv_polynomial"]], ["del", "theorem", "ring_equiv_congr_left_symm_apply", ["mv_polynomial"]], ["del", "def", "ring_equiv_congr_right", ["mv_polynomial"]], ["del", "theorem", "ring_equiv_congr_right_apply", ["mv_polynomial"]], ["del", "theorem", "ring_equiv_congr_right_symm_apply", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["add", "def", "rename_equiv", ["mv_polynomial"]], ["add", "theorem", "rename_equiv_refl", ["mv_polynomial"]], ["add", "theorem", "rename_equiv_symm", ["mv_polynomial"]], ["add", "theorem", "rename_equiv_trans", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1615326226, "sha": "5d82d1d4", "message": "feat(algebra,linear_algebra): `{smul,lmul,lsmul}_injective` (#6588)\nThis PR proves a few injectivity results for (scalar) multiplication in the setting of modules and algebras over a ring.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "lmul_injective", ["algebra"]], ["add", "theorem", "lmul_left_injective", ["algebra"]], ["add", "theorem", "lmul_right_injective", ["algebra"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "lsmul_injective", ["algebra"]]]}, {"oldPath": "src/algebra/group_with_zero/defs.lean", "newPath": "src/algebra/group_with_zero/defs.lean", "changes": [["add", "theorem", "mul_left_injective'", []], ["add", "theorem", "mul_right_injective'", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "smul_injective", []]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "lsmul_injective", ["linear_map"]]]}]}, {"timestamp": 1615326225, "sha": "3d752421", "message": "chore(data/equiv/local_equiv,topology/local_homeomorph): put `source`/`target` to the left in `∩` (#6583)", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["del", "theorem", "image_inter_source_eq'", ["local_equiv"]], ["del", "theorem", "image_inter_source_eq", ["local_equiv"]], ["add", "theorem", "image_source_inter_eq'", ["local_equiv"]], ["add", "theorem", "image_source_inter_eq", ["local_equiv"]], ["del", "theorem", "symm_image_inter_target_eq'", ["local_equiv"]], ["del", "theorem", "symm_image_inter_target_eq", ["local_equiv"]], ["add", "theorem", "symm_image_target_inter_eq'", ["local_equiv"]], ["add", "theorem", "symm_image_target_inter_eq", ["local_equiv"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inter_preimage_eq", ["set", "eq_on"]]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["mod", "theorem", "continuous_at_iff_continuous_at_comp_left", ["local_homeomorph"]], ["del", "theorem", "image_inter_source_eq'", ["local_homeomorph"]], ["del", "theorem", "image_inter_source_eq", ["local_homeomorph"]], ["mod", "theorem", "image_open_of_open'", ["local_homeomorph"]], ["add", "theorem", "image_source_inter_eq'", ["local_homeomorph"]], ["add", "theorem", "image_source_inter_eq", ["local_homeomorph"]], ["add", "theorem", "map_nhds_within_preimage_eq", ["local_homeomorph"]], ["add", "theorem", "nhds_within_source_inter", ["local_homeomorph"]], ["add", "theorem", "nhds_within_target_inter", ["local_homeomorph"]], ["add", "theorem", "source_inter_preimage_inv_preimage", ["local_homeomorph"]], ["del", "theorem", "symm_image_inter_target_eq", ["local_homeomorph"]], ["add", "theorem", "symm_image_target_inter_eq", ["local_homeomorph"]], ["add", "theorem", "target_inter_inv_preimage_preimage", ["local_homeomorph"]]]}]}, {"timestamp": 1615326224, "sha": "78af5b16", "message": "feat(topology): closure in a `pi` space (#6575)\nAlso add `can_lift` instances that lift `f : subtype p → β` to `f : α → β` and a version of `filter.mem_infi_iff` that uses a globally defined function.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "pi_piecewise", ["set"]], ["add", "theorem", "univ_pi_piecewise", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "inf_principal_eq_bot", ["filter"]], ["add", "theorem", "infi_principal_finite", ["filter"]], ["add", "theorem", "mem_infi_iff'", ["filter"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_right_comm", []], ["add", "theorem", "sup_right_comm", []]]}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "is_closed_set_pi", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "closure_pi_set", []], ["add", "theorem", "dense_pi", []], ["add", "theorem", "mem_closure_pi", []], ["add", "theorem", "nhds_within_pi_eq'", []], ["add", "theorem", "nhds_within_pi_eq", []], ["add", "theorem", "nhds_within_pi_eq_bot", []], ["add", "theorem", "nhds_within_pi_ne_bot", []], ["add", "theorem", "nhds_within_pi_univ_eq", []], ["add", "theorem", "nhds_within_pi_univ_eq_bot", []]]}]}, {"timestamp": 1615326223, "sha": "792e4921", "message": "feat(topology/separation): add API for interaction between discrete topology and subsets (#6570)\nThe final result:\nLet `s, t ⊆ X` be two subsets of a topological space `X`. If `t ⊆ s` and the topology induced\nby `X`on `s` is discrete, then also the topology induces on `t` is discrete.\nThe proofs are by Patrick Massot.", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "of_subset", ["discrete_topology"]], ["add", "theorem", "discrete_topology_iff_nhds", []], ["add", "theorem", "discrete_topology_induced", []], ["add", "theorem", "induced_bot", []], ["add", "theorem", "subset_trans", ["topological_space"]]]}]}, {"timestamp": 1615306940, "sha": "8713c0bd", "message": "feat(measure/pi): prove extensionality for `measure.pi` (#6304)\n* If two measures in a finitary product are equal on cubes with measurable sides (or with sides in a set generating the corresponding sigma-algebra), then the measures are equal.\n* Add `sigma_finite` instance for `measure.pi`\n* Some basic lemmas about sets (more specifically `Union` and `set.pi`)\n* rename `measurable_set.pi_univ` -> `measurable_set.univ_pi` (`pi univ t` is called `univ_pi` consistently in `set/basic`, but it's not always consistent elsewhere)\n* rename `[bs]?Union_prod` -> `[bs]?Union_prod_const`", "changes": [{"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": [["add", "theorem", "surjective_decode_iget", ["encodable"]]]}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["add", "theorem", "surjective_unpair", ["nat"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eval_preimage'", ["set"]], ["add", "theorem", "eval_preimage", ["set"]], ["add", "theorem", "univ_pi_ite", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_comp", ["function", "surjective"]], ["add", "theorem", "Union_comp", ["function", "surjective"]], ["add", "theorem", "Inter_congr", ["set"]], ["add", "theorem", "Union_congr", ["set"]], ["mod", "theorem", "Union_of_singleton", ["set"]], ["mod", "theorem", "Union_prod", ["set"]], ["add", "theorem", "Union_prod_const", ["set"]], ["mod", "theorem", "Union_subset_Union2", ["set"]], ["mod", "theorem", "Union_subset_Union_const", ["set"]], ["add", "theorem", "Union_univ_pi", ["set"]], ["del", "theorem", "bUnion_prod", ["set"]], ["add", "theorem", "bUnion_prod_const", ["set"]], ["mod", "theorem", "directed_on_Union", ["set"]], ["mod", "theorem", "preimage_Union", ["set"]], ["del", "theorem", "sUnion_prod", ["set"]], ["add", "theorem", "sUnion_prod_const", ["set"]], ["add", "theorem", "univ_pi_eq_Inter", ["set"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "pi_univ", ["measurable_set"]], ["add", "theorem", "univ_pi", ["measurable_set"]], ["add", "theorem", "univ_pi_fintype", ["measurable_set"]]]}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": [["add", "theorem", "generate_from_eq_pi", []], ["add", "theorem", "generate_from_pi", []], ["add", "theorem", "generate_from_pi_eq", []], ["add", "theorem", "pi", ["is_countably_spanning"]], ["add", "theorem", "pi", ["is_pi_system"]], ["add", "theorem", "is_pi_system_pi", []], ["add", "def", "pi", ["measure_theory", "measure", "finite_spanning_sets_in"]], ["add", "theorem", "pi_eq", ["measure_theory", "measure"]], ["add", "theorem", "pi_eq_generate_from", ["measure_theory", "measure"]], ["mod", "theorem", "pi_pi", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}]}, {"timestamp": 1615288792, "sha": "c1a7c195", "message": "chore(data/polynomial/basic): add missing is_scalar_tower and smul_comm_class instances (#6592)\nThese already exist for `mv_polynomial`, but the PR that I added them in forgot to add them for `polynomial`.\nNotably, this provides the instance `is_scalar_tower R (mv_polynomial S₁ R) (polynomial (mv_polynomial S₁ R))`.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1615288791, "sha": "fa28a8c5", "message": "feat(data/nat/parity): even/odd.mul_even/odd (#6584)\nLemmas pertaining to the multiplication of even and odd natural numbers.", "changes": [{"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "mul_left", ["nat", "even"]], ["add", "theorem", "mul_right", ["nat", "even"]], ["mod", "theorem", "even_div", ["nat"]], ["add", "theorem", "mul", ["nat", "odd"]], ["add", "theorem", "of_mul_left", ["nat", "odd"]], ["add", "theorem", "of_mul_right", ["nat", "odd"]], ["add", "theorem", "odd_mul", ["nat"]], ["mod", "theorem", "two_not_dvd_two_mul_sub_one", ["nat"]]]}]}, {"timestamp": 1615288790, "sha": "49afae5a", "message": "feat(number_theory/bernoulli): bernoulli_poly_eval_one (#6581)", "changes": [{"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["del", "theorem", "bernoulli_eq_bernoulli'", []], ["add", "theorem", "bernoulli_eq_bernoulli'_of_ne_one", []], ["mod", "theorem", "sum_bernoulli", []]]}, {"oldPath": "src/number_theory/bernoulli_polynomials.lean", "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": [["add", "theorem", "bernoulli_poly_eval_one", ["bernoulli_poly"]]]}]}, {"timestamp": 1615288789, "sha": "98895022", "message": "feat(linear_algebra/pi): add `submodule.pi` (#6576)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_subset_coe", ["submodule"]], ["add", "theorem", "sum_mem_bsupr", ["submodule"]], ["add", "theorem", "sum_mem_supr", ["submodule"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "theorem", "binfi_comap_proj", ["submodule"]], ["add", "theorem", "coe_pi", ["submodule"]], ["add", "theorem", "infi_comap_proj", ["submodule"]], ["add", "theorem", "mem_pi", ["submodule"]], ["add", "def", "pi", ["submodule"]], ["add", "theorem", "supr_map_single", ["submodule"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}]}, {"timestamp": 1615288787, "sha": "a3311136", "message": "feat(analysis/normed_space/normed_group_hom): bounded homs between normed groups (#6375)\nFrom `lean-liquid`", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/normed_group_hom.lean", "changes": [["add", "def", "mk_normed_group_hom'", ["add_monoid_hom"]], ["add", "def", "mk_normed_group_hom", ["add_monoid_hom"]], ["add", "theorem", "exists_pos_bound_of_bound", []], ["add", "theorem", "add_apply", ["normed_group_hom"]], ["add", "theorem", "antilipschitz_of_bound_by", ["normed_group_hom"]], ["add", "theorem", "bound", ["normed_group_hom"]], ["add", "def", "bound_by", ["normed_group_hom"]], ["add", "theorem", "bound_by_one_of_isometry", ["normed_group_hom"]], ["add", "theorem", "bounds_bdd_below", ["normed_group_hom"]], ["add", "theorem", "bounds_nonempty", ["normed_group_hom"]], ["add", "theorem", "coe_add", ["normed_group_hom"]], ["add", "def", "coe_fn_add_hom", ["normed_group_hom"]], ["add", "theorem", "coe_inj", ["normed_group_hom"]], ["add", "theorem", "coe_inj_iff", ["normed_group_hom"]], ["add", "theorem", "coe_injective", ["normed_group_hom"]], ["add", "theorem", "coe_mk", ["normed_group_hom"]], ["add", "theorem", "coe_mk_normed_group_hom'", ["normed_group_hom"]], ["add", "theorem", "coe_mk_normed_group_hom", ["normed_group_hom"]], ["add", "theorem", "coe_neg", ["normed_group_hom"]], ["add", "theorem", "coe_sub", ["normed_group_hom"]], ["add", "theorem", "coe_sum", ["normed_group_hom"]], ["add", "theorem", "coe_to_add_monoid_hom", ["normed_group_hom"]], ["add", "theorem", "coe_zero", ["normed_group_hom"]], ["add", "def", "comp_hom", ["normed_group_hom"]], ["add", "theorem", "comp_zero", ["normed_group_hom"]], ["add", "theorem", "ext", ["normed_group_hom"]], ["add", "theorem", "ext_iff", ["normed_group_hom"]], ["add", "def", "id", ["normed_group_hom"]], ["add", "def", "incl", ["normed_group_hom"]], ["add", "theorem", "isometry_comp", ["normed_group_hom"]], ["add", "theorem", "isometry_id", ["normed_group_hom"]], ["add", "theorem", "isometry_iff_norm", ["normed_group_hom"]], ["add", "theorem", "isometry_of_norm", ["normed_group_hom"]], ["add", "theorem", "incl_comp_lift", ["normed_group_hom", "ker"]], ["add", "def", "lift", ["normed_group_hom", "ker"]], ["add", "def", "ker", ["normed_group_hom"]], ["add", "theorem", "le_of_op_norm_le", ["normed_group_hom"]], ["add", "theorem", "le_op_norm", ["normed_group_hom"]], ["add", "theorem", "le_op_norm_of_le", ["normed_group_hom"]], ["add", "theorem", "lipschitz", ["normed_group_hom"]], ["add", "theorem", "lipschitz_of_bound_by", ["normed_group_hom"]], ["add", "theorem", "map_add", ["normed_group_hom"]], ["add", "theorem", "map_neg", ["normed_group_hom"]], ["add", "theorem", "map_sub", ["normed_group_hom"]], ["add", "theorem", "map_sum", ["normed_group_hom"]], ["add", "theorem", "map_zero", ["normed_group_hom"]], ["add", "theorem", "mem_ker", ["normed_group_hom"]], ["add", "theorem", "mem_range", ["normed_group_hom"]], ["add", "theorem", "mk_normed_group_hom'_bound_by", ["normed_group_hom"]], ["add", "theorem", "mk_normed_group_hom_norm_le'", ["normed_group_hom"]], ["add", "theorem", "mk_normed_group_hom_norm_le", ["normed_group_hom"]], ["add", "theorem", "mk_to_add_monoid_hom", ["normed_group_hom"]], ["add", "theorem", "neg_apply", ["normed_group_hom"]], ["add", "theorem", "norm_comp_le", ["normed_group_hom"]], ["add", "theorem", "norm_def", ["normed_group_hom"]], ["add", "theorem", "norm_eq_of_isometry", ["normed_group_hom"]], ["add", "theorem", "norm_id", ["normed_group_hom"]], ["add", "theorem", "norm_id_le", ["normed_group_hom"]], ["add", "theorem", "bound_by_one", ["normed_group_hom", "norm_noninc"]], ["add", "theorem", "comp", ["normed_group_hom", "norm_noninc"]], ["add", "theorem", "id", ["normed_group_hom", "norm_noninc"]], ["add", "def", "norm_noninc", ["normed_group_hom"]], ["add", "theorem", "norm_noninc_of_isometry", ["normed_group_hom"]], ["add", "def", "op_norm", ["normed_group_hom"]], ["add", "theorem", "op_norm_add_le", ["normed_group_hom"]], ["add", "theorem", "op_norm_le_bound", ["normed_group_hom"]], ["add", "theorem", "op_norm_le_of_lipschitz", ["normed_group_hom"]], ["add", "theorem", "op_norm_neg", ["normed_group_hom"]], ["add", "theorem", "op_norm_nonneg", ["normed_group_hom"]], ["add", "theorem", "op_norm_zero_iff", ["normed_group_hom"]], ["add", "def", "range", ["normed_group_hom"]], ["add", "theorem", "ratio_le_op_norm", ["normed_group_hom"]], ["add", "theorem", "sub_apply", ["normed_group_hom"]], ["add", "theorem", "sum_apply", ["normed_group_hom"]], ["add", "def", "to_add_monoid_hom", ["normed_group_hom"]], ["add", "theorem", "to_add_monoid_hom_injective", ["normed_group_hom"]], ["add", "theorem", "to_fun_eq_coe", ["normed_group_hom"]], ["add", "theorem", "zero_apply", ["normed_group_hom"]], ["add", "theorem", "zero_comp", ["normed_group_hom"]], ["add", "structure", "normed_group_hom", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "exists_pos_bound_of_bound", []]]}]}, {"timestamp": 1615277551, "sha": "6dec23b2", "message": "chore(topology/algebra/ordered): use dot notation, golf some proofs (#6595)\nUse more precise typeclass arguments here and there, golf some proofs, use dot notation.\n### Renamed lemmas\n* `is_lub_of_is_lub_of_tendsto` → `is_lub.is_lub_of_tendsto`;\n* `is_glb_of_is_glb_of_tendsto` → `is_glb.is_glb_of_tendsto`;\n* `is_glb_of_is_lub_of_tendsto` → `is_lub.is_glb_of_tendsto`;\n* `is_lub_of_is_glb_of_tendsto` → `is_glb.is_lub_of_tendsto`;\n* `mem_closure_of_is_lub` → `is_lub.mem_closure`;\n* `mem_of_is_lub_of_is_closed` → `is_lub.mem_of_is_closed`, `is_closed.is_lub_mem`;\n* `mem_closure_of_is_glb` → `is_glb.mem_closure`;\n* `mem_of_is_glb_of_is_closed` → `is_glb.mem_of_is_closed`, `is_closed.is_glb_mem`;\n### New lemmas\n* `is_lub.inter_Ici_of_mem`\n* `is_glb.inter_Iic_of_mem`\n* `frequently.filter_mono`\n* `is_lub.frequently_mem`\n* `is_lub.frequently_nhds_mem`\n* `is_glb.frequently_mem`\n* `is_glb.frequently_nhds_mem`\n* `is_lub.mem_upper_bounds_of_tendsto`\n* `is_glb.mem_lower_bounds_of_tendsto`\n* `is_lub.mem_lower_bounds_of_tendsto`\n* `is_glb.mem_upper_bounds_of_tendsto`\n* `diff_subset_closure_iff`", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "inter_Iic_of_mem", ["is_glb"]], ["add", "theorem", "inter_Ici_of_mem", ["is_lub"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "filter_mono", ["filter", "frequently"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "frequently_mem", ["is_glb"]], ["add", "theorem", "frequently_nhds_mem", ["is_glb"]], ["add", "theorem", "is_glb_of_tendsto", ["is_glb"]], ["add", "theorem", "is_lub_of_tendsto", ["is_glb"]], ["add", "theorem", "mem_closure", ["is_glb"]], ["add", "theorem", "mem_lower_bounds_of_tendsto", ["is_glb"]], ["add", "theorem", "mem_of_is_closed", ["is_glb"]], ["add", "theorem", "mem_upper_bounds_of_tendsto", ["is_glb"]], ["del", "theorem", "is_glb_of_is_glb_of_tendsto", []], ["del", "theorem", "is_glb_of_is_lub_of_tendsto", []], ["add", "theorem", "frequently_mem", ["is_lub"]], ["add", "theorem", "frequently_nhds_mem", ["is_lub"]], ["add", "theorem", "is_glb_of_tendsto", ["is_lub"]], ["add", "theorem", "is_lub_of_tendsto", ["is_lub"]], ["add", "theorem", "mem_closure", ["is_lub"]], ["add", "theorem", "mem_lower_bounds_of_tendsto", ["is_lub"]], ["add", "theorem", "mem_of_is_closed", ["is_lub"]], ["add", "theorem", "mem_upper_bounds_of_tendsto", ["is_lub"]], ["del", "theorem", "is_lub_of_is_glb_of_tendsto", []], ["del", "theorem", "is_lub_of_is_lub_of_tendsto", []], ["del", "theorem", "mem_closure_of_is_glb", []], ["del", "theorem", "mem_closure_of_is_lub", []], ["del", "theorem", "mem_of_is_glb_of_is_closed", []], ["del", "theorem", "mem_of_is_lub_of_is_closed", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "diff_subset_closure_iff", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "sub_supr", ["ennreal"]]]}]}, {"timestamp": 1615256111, "sha": "32bd00f1", "message": "refactor(topology/bounded_continuous_function): structure extending continuous_map (#6521)\nConvert `bounded_continuous_function` from a subtype to a structure extending `continuous_map`, and some minor improvements to `@[simp]` lemmas.", "changes": [{"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["mod", "def", "const", ["bounded_continuous_function"]], ["del", "theorem", "continuous_evalf", ["bounded_continuous_function"]], ["add", "def", "mk_of_bound", ["bounded_continuous_function"]], ["add", "theorem", "mk_of_bound_coe", ["bounded_continuous_function"]], ["mod", "def", "mk_of_compact", ["bounded_continuous_function"]], ["add", "theorem", "mk_of_compact_apply", ["bounded_continuous_function"]], ["mod", "def", "mk_of_discrete", ["bounded_continuous_function"]], ["add", "theorem", "mk_of_discrete_apply", ["bounded_continuous_function"]], ["add", "structure", "bounded_continuous_function", []], ["del", "def", "bounded_continuous_function", []]]}, {"oldPath": "src/topology/continuous_map.lean", "newPath": "src/topology/continuous_map.lean", "changes": [["add", "theorem", "comp_apply", ["continuous_map"]], ["add", "theorem", "comp_coe", ["continuous_map"]], ["add", "theorem", "const_apply", ["continuous_map"]], ["add", "theorem", "const_coe", ["continuous_map"]], ["add", "theorem", "id_apply", ["continuous_map"]], ["add", "theorem", "id_coe", ["continuous_map"]], ["add", "theorem", "to_fun_eq_coe", ["continuous_map"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1615232543, "sha": "3e5d90d9", "message": "feat(algebra/continued_fractions) add determinant formula and approximations for error term (#6461)", "changes": [{"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": [["add", "theorem", "abs_sub_convergents_le'", ["generalized_continued_fraction"]], ["add", "theorem", "abs_sub_convergents_le", ["generalized_continued_fraction"]], ["add", "theorem", "determinant", ["generalized_continued_fraction"]], ["add", "theorem", "determinant_aux", ["generalized_continued_fraction"]], ["add", "theorem", "sub_convergents_eq", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": []}]}, {"timestamp": 1615232542, "sha": "0afdaab2", "message": "feat(linear_algebra): submodules of f.g. free modules are free (#6178)\nThis PR proves the first half of the structure theorem for modules over a PID: if `R` is a principal ideal domain and `M` an `R`-module which is free and finitely generated (expressed by `is_basis R (b : ι → M)`, for a `[fintype ι]`), then all submodules of `M` are also free and finitely generated.\nThis result requires some lemmas about the rank of (free) modules (which in that case is basically the same as `fintype.card ι`). If `M` were a vector space, this could just be expressed as `findim R M`, but it isn't necessarily, so it can't be.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "range_cons", ["fin"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "range_map_nonempty", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "ext_elem", ["is_basis"]], ["add", "theorem", "no_zero_smul_divisors", ["is_basis"]], ["add", "theorem", "repr_eq_zero", ["is_basis"]], ["add", "theorem", "smul_eq_zero", ["is_basis"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/free_module.lean", "changes": [["add", "theorem", "eq_bot_of_generator_maximal_map_eq_zero", []], ["add", "theorem", "eq_bot_of_rank_eq_zero", []], ["add", "theorem", "generator_map_dvd_of_mem", []], ["add", "theorem", "card_le_card_of_linear_independent", ["is_basis"]], ["add", "theorem", "card_le_card_of_linear_independent_aux", ["is_basis"]], ["add", "theorem", "ne_zero_of_ortho", []], ["add", "theorem", "not_mem_of_ortho", []], ["add", "theorem", "exists_is_basis", ["submodule"]], ["add", "theorem", "exists_is_basis_of_le", ["submodule"]], ["add", "theorem", "exists_is_basis_of_le_span", ["submodule"]], ["add", "def", "induction_on_rank", ["submodule"]], ["add", "def", "induction_on_rank_aux", ["submodule"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "fin_cons'", ["linear_independent"]]]}]}, {"timestamp": 1615222948, "sha": "cdc222da", "message": "chore(topology): add a few simple lemmas (#6580)", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "image_closure", ["continuous_on"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "compact_closure_of_subset_compact", []], ["add", "theorem", "image_closure_of_compact", []]]}]}, {"timestamp": 1615222947, "sha": "87eec0b6", "message": "feat(linear_algebra/bilinear_form): Existence of orthogonal basis with respect to a bilinear form (#5814)\nWe state and prove the result that there exists an orthogonal basis with respect to a symmetric nondegenerate.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_singleton_sup_ker_eq_top", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "def", "is_Ortho", ["bilin_form"]], ["add", "theorem", "is_Ortho_def", ["bilin_form"]], ["add", "theorem", "is_compl_span_singleton_orthogonal", ["bilin_form"]], ["add", "theorem", "is_ortho_def", ["bilin_form"]], ["add", "theorem", "is_ortho_zero_left", ["bilin_form"]], ["add", "theorem", "is_ortho_zero_right", ["bilin_form"]], ["add", "theorem", "le_orthogonal_orthogonal", ["bilin_form"]], ["add", "theorem", "linear_independent_of_is_Ortho", ["bilin_form"]], ["add", "theorem", "mem_orthogonal_iff", ["bilin_form"]], ["add", "theorem", "ne_zero_of_not_is_ortho_self", ["bilin_form"]], ["add", "def", "nondegenerate", ["bilin_form"]], ["add", "theorem", "nondegenerate_iff_ker_eq_bot", ["bilin_form"]], ["del", "theorem", "ortho_zero", ["bilin_form"]], ["add", "def", "orthogonal", ["bilin_form"]], ["add", "theorem", "orthogonal_le", ["bilin_form"]], ["add", "theorem", "orthogonal_span_singleton_eq_to_lin_ker", ["bilin_form"]], ["add", "def", "restrict", ["bilin_form"]], ["add", "theorem", "restrict_orthogonal_span_singleton_nondegenerate", ["bilin_form"]], ["add", "theorem", "restrict_sym", ["bilin_form"]], ["add", "theorem", "span_singleton_inf_orthogonal_eq_bot", ["bilin_form"]], ["add", "theorem", "span_singleton_sup_orthogonal_eq_top", ["bilin_form"]], ["add", "theorem", "to_dual_def", ["bilin_form"]], ["add", "theorem", "to_bilin'_apply'", ["matrix"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "theorem", "dual_findim_eq", ["subspace"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "linear_equiv_of_ker_eq_bot_apply", ["linear_map"]], ["add", "theorem", "findim_add_eq_of_is_compl", ["submodule"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "exists_bilin_form_self_neq_zero", ["bilin_form"]], ["add", "theorem", "exists_orthogonal_basis'", ["bilin_form"]], ["add", "theorem", "exists_orthogonal_basis", ["bilin_form"]], ["add", "theorem", "exists_quadratic_form_neq_zero", ["quadratic_form"]]]}]}, {"timestamp": 1615214304, "sha": "6791ed9b", "message": "chore(algebra/module/linear_map): add linear_map.to_distrib_mul_action_hom (#6573)\nMy aim in adding this is primarily to give the reader a hint that `distrib_mul_action_hom` exists.\nThe only difference between the two is that `linear_map` can infer `map_zero'` from its typeclass arguments.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "to_distrib_mul_action_hom", ["linear_map"]]]}]}, {"timestamp": 1615214303, "sha": "13d86df6", "message": "chore(algebra/monoid_algebra): provide finer-grained levels of structure for less-structured `G`. (#6572)\nThis provides `distrib` and `mul_zero_class` for when `G` is just `has_mul`, and `semigroup` for when `G` is just `semigroup`.\nIt also weakens the typeclass assumptions on some correspondings lemmas.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["mod", "theorem", "lift_nc_smul", ["add_monoid_algebra"]], ["mod", "theorem", "mul_apply", ["add_monoid_algebra"]], ["mod", "theorem", "mul_apply_antidiagonal", ["add_monoid_algebra"]], ["mod", "theorem", "mul_single_apply_aux", ["add_monoid_algebra"]], ["mod", "theorem", "mul_single_zero_apply", ["add_monoid_algebra"]], ["mod", "def", "of", ["add_monoid_algebra"]], ["mod", "theorem", "of_apply", ["add_monoid_algebra"]], ["mod", "theorem", "of_injective", ["add_monoid_algebra"]], ["mod", "theorem", "single_mul_apply_aux", ["add_monoid_algebra"]], ["mod", "theorem", "single_mul_single", ["add_monoid_algebra"]], ["mod", "theorem", "single_zero_mul_apply", ["add_monoid_algebra"]], ["mod", "theorem", "support_mul", ["add_monoid_algebra"]], ["mod", "theorem", "lift_nc_smul", ["monoid_algebra"]], ["mod", "theorem", "map_domain_mul", ["monoid_algebra"]], ["mod", "theorem", "mul_apply", ["monoid_algebra"]], ["mod", "theorem", "mul_apply_antidiagonal", ["monoid_algebra"]], ["mod", "theorem", "mul_single_apply_aux", ["monoid_algebra"]], ["mod", "theorem", "mul_single_one_apply", ["monoid_algebra"]], ["mod", "theorem", "of_apply", ["monoid_algebra"]], ["mod", "theorem", "of_injective", ["monoid_algebra"]], ["mod", "theorem", "single_mul_apply_aux", ["monoid_algebra"]], ["mod", "theorem", "single_mul_single", ["monoid_algebra"]], ["mod", "theorem", "single_one_mul_apply", ["monoid_algebra"]], ["mod", "theorem", "single_pow", ["monoid_algebra"]], ["mod", "theorem", "support_mul", ["monoid_algebra"]]]}]}, {"timestamp": 1615206757, "sha": "7058fa61", "message": "feat(linear_algebra/{bilinear,quadratic}_form): inherit scalar actions from algebras (#6586)\nFor example, this means a quadratic form over the quaternions inherits an `ℝ` action.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "smul_apply", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["mod", "theorem", "coe_fn_smul", ["quadratic_form"]], ["mod", "theorem", "smul_apply", ["quadratic_form"]]]}]}, {"timestamp": 1615206755, "sha": "5d0a40f1", "message": "feat(algebra/algebra/{basic,tower}): add alg_equiv.comap and alg_equiv.restrict_scalars (#6548)\nThis also renames `is_scalar_tower.restrict_base` to `alg_hom.restrict_scalars`, to enable dot notation and match `linear_map.restrict_scalars`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "comap", ["alg_equiv"]], ["mod", "def", "comap", ["alg_hom"]]]}, {"oldPath": "src/algebra/algebra/tower.lean", "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "theorem", "coe_restrict_scalars'", ["alg_equiv"]], ["add", "theorem", "coe_restrict_scalars", ["alg_equiv"]], ["add", "def", "restrict_scalars", ["alg_equiv"]], ["add", "theorem", "restrict_scalars_apply", ["alg_equiv"]], ["add", "theorem", "coe_restrict_scalars'", ["alg_hom"]], ["add", "theorem", "coe_restrict_scalars", ["alg_hom"]], ["add", "def", "restrict_scalars", ["alg_hom"]], ["add", "theorem", "restrict_scalars_apply", ["alg_hom"]], ["del", "theorem", "coe_restrict_base'", ["is_scalar_tower"]], ["del", "theorem", "coe_restrict_base", ["is_scalar_tower"]], ["del", "def", "restrict_base", ["is_scalar_tower"]], ["del", "theorem", "restrict_base_apply", ["is_scalar_tower"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1615203306, "sha": "b6ed62ca", "message": "feat(algebraic_topology): simplicial objects and simplicial types (#6195)", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/simplicial_object.lean", "changes": [["add", "def", "eq_to_iso", ["category_theory", "simplicial_object"]], ["add", "theorem", "eq_to_iso_refl", ["category_theory", "simplicial_object"]], ["add", "def", "δ", ["category_theory", "simplicial_object"]], ["add", "theorem", "δ_comp_δ", ["category_theory", "simplicial_object"]], ["add", "theorem", "δ_comp_δ_self", ["category_theory", "simplicial_object"]], ["add", "theorem", "δ_comp_σ_of_gt", ["category_theory", "simplicial_object"]], ["add", "theorem", "δ_comp_σ_of_le", ["category_theory", "simplicial_object"]], ["add", "theorem", "δ_comp_σ_self", ["category_theory", "simplicial_object"]], ["add", "theorem", "δ_comp_σ_succ", ["category_theory", "simplicial_object"]], ["add", "def", "σ", ["category_theory", "simplicial_object"]], ["add", "theorem", "σ_comp_σ", ["category_theory", "simplicial_object"]], ["add", "def", "simplicial_object", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/algebraic_topology/simplicial_set.lean", "changes": [["add", "def", "as_preorder_hom", ["sSet"]], ["add", "def", "boundary", ["sSet"]], ["add", "def", "boundary_inclusion", ["sSet"]], ["add", "def", "horn", ["sSet"]], ["add", "def", "horn_inclusion", ["sSet"]], ["add", "def", "standard_simplex", ["sSet"]], ["add", "def", "sSet", []]]}]}, {"timestamp": 1615198872, "sha": "f3dbe9f0", "message": "feat(bounded_continuous_function): coe_sum (#6522)", "changes": [{"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["add", "def", "coe_fn_add_hom", ["bounded_continuous_function"]], ["add", "theorem", "coe_sum", ["bounded_continuous_function"]], ["mod", "theorem", "coe_zero", ["bounded_continuous_function"]], ["add", "theorem", "sum_apply", ["bounded_continuous_function"]]]}]}, {"timestamp": 1615169474, "sha": "98c6bbc9", "message": "feat(data/set/function): three lemmas about maps_to (#6518)", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "maps_image_to", ["set"]], ["add", "theorem", "maps_range_to", ["set"]], ["add", "theorem", "maps_univ_to", ["set"]]]}]}, {"timestamp": 1615166333, "sha": "5b61f07f", "message": "chore(scripts): update nolints.txt (#6582)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1615154630, "sha": "2d3c522b", "message": "feat(order/ideal): added proper ideal typeclass and lemmas to order_top (#6566)\nDefined `proper` and proved basic lemmas about proper ideals.\nAlso turned `order_top` into a section.", "changes": [{"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["add", "theorem", "proper_of_ne_top", ["order", "ideal"]], ["add", "theorem", "proper_of_not_mem", ["order", "ideal"]], ["add", "theorem", "top_carrier", ["order", "ideal"]], ["add", "theorem", "top_of_mem_top", ["order", "ideal"]]]}]}, {"timestamp": 1615151666, "sha": "79be90a7", "message": "feat(algebra/regular): add lemmas about regularity of non-zero elements (#6579)\nMore API, to deal with cases in which a regular element is non-zero.", "changes": [{"oldPath": "src/algebra/regular.lean", "newPath": "src/algebra/regular.lean", "changes": [["add", "theorem", "ne_zero", ["is_left_regular"]], ["add", "theorem", "ne_zero", ["is_regular"]], ["add", "theorem", "is_regular_iff_ne_zero", []], ["add", "theorem", "ne_zero", ["is_right_regular"]]]}]}, {"timestamp": 1615137558, "sha": "b25994d5", "message": "feat(number_theory/bernoulli): definition and properties of Bernoulli polynomials (#6309)\nThe Bernoulli polynomials and its properties are defined.", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "mem_range_le", ["finset"]], ["add", "theorem", "mem_range_sub_ne_zero", ["finset"]]]}, {"oldPath": null, "newPath": "src/number_theory/bernoulli_polynomials.lean", "changes": [["add", "theorem", "bernoulli_poly_eval_zero", ["bernoulli_poly"]], ["add", "theorem", "bernoulli_poly_zero", ["bernoulli_poly"]], ["add", "theorem", "exp_bernoulli_poly'", ["bernoulli_poly"]], ["add", "theorem", "sum_bernoulli_poly", ["bernoulli_poly"]], ["add", "def", "bernoulli_poly", []], ["add", "theorem", "bernoulli_poly_def", []]]}]}, {"timestamp": 1615127835, "sha": "d9370e03", "message": "fead(data/support): add `support_smul` (#6569)\n* add `smul_ne_zero`;\n* rename `support_smul_subset` to `support_smul_subset_right`;\n* add `support_smul_subset_left` and `support_smul`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "smul_ne_zero", []]]}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["add", "theorem", "support_smul", ["function"]], ["del", "theorem", "support_smul_subset", ["function"]], ["add", "theorem", "support_smul_subset_left", ["function"]], ["add", "theorem", "support_smul_subset_right", ["function"]]]}, {"oldPath": "src/ring_theory/hahn_series.lean", "newPath": "src/ring_theory/hahn_series.lean", "changes": []}]}, {"timestamp": 1615112316, "sha": "02251b1e", "message": "refactor(geometry/manifold): drop some unused arguments (#6545)\nAPI changes:\n* add lemmas about `map (ext_chart_at I x) (𝓝[s] x')`;\n* prove `times_cont_mdiff_within_at.comp` directly without using other charts; the new proof does not need a `smooth_manifold_with_corners` instance;\n* add aliases `times_cont_mdiff.times_cont_diff` etc;\n* `times_cont_mdiff_map` no longer needs a `smooth_manifold_with_corners` instance;\n* `has_smooth_mul` no longer extends `smooth_manifold_with_corners` and no longer takes `has_continuous_mul` as an argument;\n* `has_smooth_mul_core` is gone in favor of `has_continuous_mul_of_smooth`;\n* `smooth_monoid_morphism` now works with any model space (needed, e.g., to define `smooth_monoid_morphism.prod`);\n* `lie_group_morphism` is gone: we use `M →* N` both for monoids and groups, no reason to have two structures in this case;\n* `lie_group` no longer extends `smooth_manifold_with_corners` and no longer takes `topological_group` as an argument;\n* `lie_group_core` is gone in favor of `topological_group_of_lie_group`;\n* the `I : model_with_corners 𝕜 E H` argument of `smooth_mul` and `smooth_inv` is now explicit.", "changes": [{"oldPath": "src/geometry/manifold/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": [["del", "structure", "lie_add_group_core", []], ["del", "structure", "lie_add_group_morphism", []], ["del", "structure", "lie_group_core", []], ["del", "structure", "lie_group_morphism", []], ["del", "theorem", "smooth_pow", []], ["add", "theorem", "topological_group_of_lie_group", []]]}, {"oldPath": "src/geometry/manifold/algebra/monoid.lean", "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": [["add", "theorem", "has_continuous_mul_of_smooth", []], ["del", "structure", "has_smooth_add_core", []], ["del", "structure", "has_smooth_mul_core", []], ["mod", "structure", "smooth_add_monoid_morphism", []], ["mod", "structure", "smooth_monoid_morphism", []], ["add", "theorem", "smooth_pow", []]]}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/geometry/manifold/algebra/structures.lean", "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": [["add", "theorem", "topological_ring_of_smooth", []], ["add", "theorem", "topological_semiring_of_smooth", []]]}, {"oldPath": "src/geometry/manifold/diffeomorph.lean", "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "ext_chart_at_map_nhds_within'", []], ["add", "theorem", "ext_chart_at_map_nhds_within", []], ["add", "theorem", "ext_chart_at_map_nhds_within_eq_image'", []], ["add", "theorem", "ext_chart_at_map_nhds_within_eq_image", []], ["add", "theorem", "ext_chart_at_source_mem_nhds_within'", []], ["add", "theorem", "ext_chart_at_source_mem_nhds_within", []], ["add", "theorem", "ext_chart_at_symm_map_nhds_within'", []], ["add", "theorem", "ext_chart_at_symm_map_nhds_within", []], ["add", "theorem", "ext_chart_at_symm_map_nhds_within_range'", []], ["add", "theorem", "ext_chart_at_symm_map_nhds_within_range", []], ["add", "theorem", "ext_chart_at_target_mem_nhds_within'", []], ["add", "theorem", "nhds_within_ext_chart_target_eq'", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["del", "theorem", "times_cont_mdiff", ["times_cont_diff"]], ["del", "theorem", "times_cont_mdiff_at", ["times_cont_diff_at"]], ["del", "theorem", "times_cont_mdiff_on", ["times_cont_diff_on"]], ["del", "theorem", "times_cont_mdiff_within_at", ["times_cont_diff_within_at"]], ["add", "theorem", "times_cont_mdiff_within_at_iff''", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": []}]}, {"timestamp": 1615091118, "sha": "ebe2c616", "message": "feat(analysis/normed_space/multilinear): a few more bundled (bi)linear maps (#6546)", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "def", "comp_continuous_multilinear_mapL", ["continuous_linear_map"]], ["add", "def", "flip_multilinear", ["continuous_linear_map"]], ["mod", "theorem", "norm_comp_continuous_multilinear_map_le", ["continuous_linear_map"]], ["add", "def", "comp_continuous_linear_mapL", ["continuous_multilinear_map"]], ["add", "theorem", "comp_continuous_linear_mapL_apply", ["continuous_multilinear_map"]], ["add", "theorem", "norm_comp_continuous_linear_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_comp_continuous_linear_mapL_le", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_mk_pi_algebra_fin", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_prod", ["continuous_multilinear_map"]], ["add", "def", "prodL", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1615087579, "sha": "9f17db51", "message": "feat(analysis/special_functions/integrals): mul/div by a const (#6357)\nThis PR, together with #6216, makes the following possible:\n```\nimport analysis.special_functions.integrals\nopen real interval_integral\nopen_locale real\nexample : ∫ x in 0..π, 2 * sin x = 4 := by norm_num\nexample : ∫ x:ℝ in 4..5, x * 2 = 9 := by norm_num\nexample : ∫ x in 0..π/2, cos x / 2 = 1 / 2 := by simp\n```", "changes": [{"oldPath": "src/analysis/special_functions/integrals.lean", "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_const_mul", ["interval_integral"]], ["add", "theorem", "integral_div", ["interval_integral"]], ["add", "theorem", "integral_mul_const", ["interval_integral"]]]}]}, {"timestamp": 1615079746, "sha": "07fc9821", "message": "chore(scripts): update nolints.txt (#6567)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1615065379, "sha": "df1e6f92", "message": "refactor(data/{finset,multiset}): move inductions proofs on sum/prod from finset to multiset, add more induction lemmas (#6561)\nThe starting point is `finset.le_sum_of_subadditive`, which is extended in several ways:\n* It is written in multiplicative form, and a `[to_additive]` attribute generates the additive version,\n* It is proven for multiset, which is then used for the proof of the finset case.\n* For multiset, some lemmas are written for foldr/foldl (and prod is a foldr).\n* Versions of these lemmas specialized to nonempty sets are provided. These don't need the initial hypothesis `f 1 = 1`/`f 0 = 0`.\n* The new `..._on_pred` lemmas like `finset.le_sum_of_subadditive_on_pred` apply to functions that are only sub-additive for arguments that verify some property. I included an application of this with `snorm_sum_le`, which uses that the Lp seminorm is subadditive on a.e.-measurable functions. Those `on_pred` lemmas could be avoided by constructing the submonoid given by the predicate, then using the standard subadditive result, but I find convenient to be able to use them directly.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_induction_nonempty", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "le_prod_nonempty_of_submultiplicative", ["finset"]], ["add", "theorem", "le_prod_nonempty_of_submultiplicative_on_pred", ["finset"]], ["add", "theorem", "le_prod_of_submultiplicative", ["finset"]], ["add", "theorem", "le_prod_of_submultiplicative_on_pred", ["finset"]], ["del", "theorem", "le_sum_of_subadditive", ["finset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "foldl_induction'", ["multiset"]], ["add", "theorem", "foldl_induction", ["multiset"]], ["add", "theorem", "foldr_induction'", ["multiset"]], ["add", "theorem", "foldr_induction", ["multiset"]], ["add", "theorem", "le_prod_nonempty_of_submultiplicative", ["multiset"]], ["add", "theorem", "le_prod_nonempty_of_submultiplicative_on_pred", ["multiset"]], ["add", "theorem", "le_prod_of_submultiplicative", ["multiset"]], ["add", "theorem", "le_prod_of_submultiplicative_on_pred", ["multiset"]], ["del", "theorem", "le_sum_of_subadditive", ["multiset"]], ["add", "theorem", "prod_induction", ["multiset"]], ["add", "theorem", "prod_induction_nonempty", ["multiset"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "snorm'_sum_le", ["measure_theory"]], ["add", "theorem", "snorm_sum_le", ["measure_theory"]]]}]}, {"timestamp": 1615065378, "sha": "b280b005", "message": "feat(data/set/basic): add `set.set_ite` (#6557)\nI'm going to use it as `source` and `target` in\n`local_equiv.piecewise` and `local_homeomorph.piecewise`. There are\nmany non-defeq ways to define this set and I think that it's better to\nhave a name than to ensure that we always use the same formula.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_univ", ["set"]], ["add", "theorem", "inter_subset_ite", ["set"]], ["add", "theorem", "ite_compl", ["set"]], ["add", "theorem", "ite_diff_self", ["set"]], ["add", "theorem", "ite_empty", ["set"]], ["add", "theorem", "ite_inter", ["set"]], ["add", "theorem", "ite_inter_compl_self", ["set"]], ["add", "theorem", "ite_inter_inter", ["set"]], ["add", "theorem", "ite_inter_self", ["set"]], ["add", "theorem", "ite_mono", ["set"]], ["add", "theorem", "ite_same", ["set"]], ["add", "theorem", "ite_subset_union", ["set"]], ["add", "theorem", "ite_univ", ["set"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "ite'", ["is_open"]], ["add", "theorem", "ite", ["is_open"]], ["del", "theorem", "is_open_inter_union_inter_compl'", []], ["del", "theorem", "is_open_inter_union_inter_compl", []]]}]}, {"timestamp": 1615058121, "sha": "ac8a1196", "message": "chore(geometry/manifold): use `namespace`, rename `image` to `image_eq` (#6517)\n* use `namespace` command in\n `geometry/manifold/smooth_manifold_with_corners`;\n* rename `model_with_corners.image` to `model_with_corners.image_eq`\n to match `source_eq` etc;\n* replace `homeomorph.coe_eq_to_equiv` with\n `@[simp] lemma coe_to_equiv`;\n* add `continuous_linear_map.symm_image_image` and\n `continuous_linear_map.image_symm_image`;\n* add `unique_diff_on.image`,\n `continuous_linear_equiv.unique_diff_on_image_iff`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "unique_diff_on_image", ["continuous_linear_equiv"]], ["add", "theorem", "unique_diff_on_image_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "unique_diff_on_preimage_iff", ["continuous_linear_equiv"]], ["add", "theorem", "image", ["unique_diff_on"]]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "theorem", "closed_range", ["model_with_corners"]], ["mod", "theorem", "continuous_symm", ["model_with_corners"]], ["del", "theorem", "image", ["model_with_corners"]], ["mod", "theorem", "image_mem_nhds_within", ["model_with_corners"]], ["del", "theorem", "left_inv", ["model_with_corners"]], ["del", "theorem", "locally_compact", ["model_with_corners"]], ["mod", "theorem", "map_nhds_eq", ["model_with_corners"]], ["mod", "theorem", "mk_coe", ["model_with_corners"]], ["del", "theorem", "mk_coe_symm", ["model_with_corners"]], ["add", "theorem", "mk_symm", ["model_with_corners"]], ["del", "theorem", "right_inv", ["model_with_corners"]], ["mod", "theorem", "symm_comp_self", ["model_with_corners"]], ["mod", "theorem", "symm_map_nhds_within_range", ["model_with_corners"]], ["mod", "theorem", "target_eq", ["model_with_corners"]], ["mod", "theorem", "to_local_equiv_coe", ["model_with_corners"]], ["mod", "theorem", "to_local_equiv_coe_symm", ["model_with_corners"]], ["del", "theorem", "unique_diff", ["model_with_corners"]], ["mod", "theorem", "unique_diff_at_image", ["model_with_corners"]], ["mod", "theorem", "unique_diff_preimage", ["model_with_corners"]], ["mod", "theorem", "unique_diff_preimage_source", ["model_with_corners"]]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "image_symm_image", ["continuous_linear_equiv"]], ["add", "theorem", "symm_image_image", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["del", "theorem", "coe_eq_to_equiv", ["homeomorph"]], ["add", "theorem", "coe_to_equiv", ["homeomorph"]]]}]}, {"timestamp": 1615050377, "sha": "16ef2913", "message": "feat(order/filter/*, topology/subset_properties): define \"coproduct\" of two filters (#6372)\nDefine the \"coproduct\" of two filters (unclear if this is really a categorical coproduct) as\n```lean\nprotected def coprod (f : filter α) (g : filter β) : filter (α × β) :=\nf.comap prod.fst ⊔ g.comap prod.snd\n```\nand prove the three lemmas which motivated this construction ([Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Filter.20golf)): coproduct of cofinite filters is the cofinite filter, coproduct of cocompact filters is the cocompact filter, and\n```lean\n(tendsto f a c) → (tendsto g b d) → (tendsto (prod.map f g) (a.coprod b) (c.coprod d))\n```\nCo-authored by: Kevin Buzzard \nCo-authored by: Patrick Massot ", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "coprod_mono", ["filter"]], ["add", "theorem", "map_const_principal_coprod_map_id_principal", ["filter"]], ["add", "theorem", "map_prod_map_const_id_principal_coprod_principal", ["filter"]], ["add", "theorem", "map_prod_map_coprod_le", ["filter"]], ["add", "theorem", "mem_coprod_iff", ["filter"]], ["add", "theorem", "principal_coprod_principal", ["filter"]], ["add", "theorem", "prod_map_coprod", ["filter", "tendsto"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "coprod_cofinite", ["filter"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "coprod_cocompact", ["filter"]]]}]}, {"timestamp": 1615030309, "sha": "0fa0d61e", "message": "feat(topology/paracompact): define paracompact spaces (#6395)\nFixes #6391", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "roadmap/topology/paracompact.lean", "newPath": "roadmap/topology/paracompact.lean", "changes": [["del", "theorem", "normal_of_paracompact_t2", []], ["del", "theorem", "paracompact_of_compact", []], ["del", "theorem", "paracompact_of_metric", []], ["del", "theorem", "precise_refinement", ["paracompact_space"]], ["add", "theorem", "normal_of_paracompact_t2", ["roadmap"]], ["add", "theorem", "paracompact_of_compact", ["roadmap"]], ["add", "theorem", "paracompact_of_metric", ["roadmap"]], ["add", "theorem", "precise_refinement", ["roadmap", "paracompact_space"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "exists_inv_two_pow_lt", ["ennreal"]], ["add", "theorem", "inv_le_one", ["ennreal"]], ["add", "theorem", "one_le_inv", ["ennreal"]], ["add", "theorem", "pow_le_pow_of_le_one", ["ennreal"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_inter_open'", []], ["add", "theorem", "closure_nonempty_iff", []], ["del", "theorem", "is_closed_Union_of_locally_finite", []], ["add", "theorem", "closure", ["locally_finite"]], ["add", "theorem", "closure_Union", ["locally_finite"]], ["add", "theorem", "comp_injective", ["locally_finite"]], ["add", "theorem", "is_closed_Union", ["locally_finite"]], ["add", "theorem", "subset", ["locally_finite"]], ["del", "theorem", "locally_finite_subset", []], ["del", "theorem", "closure", ["set", "nonempty"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "uniformity_basis_edist_inv_two_pow", []]]}, {"oldPath": null, "newPath": "src/topology/paracompact.lean", "changes": [["add", "theorem", "normal_of_paracompact_t2", []], ["add", "theorem", "precise_refinement", []], ["add", "theorem", "precise_refinement_set", []], ["add", "theorem", "refinement_of_locally_compact_sigma_compact_of_nhds_basis", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_closed", ["compact_exhaustion"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "elim_nhds_subcover'", ["is_compact"]], ["add", "theorem", "elim_nhds_subcover", ["is_compact"]]]}]}, {"timestamp": 1615016575, "sha": "126cebca", "message": "feat(data/real/nnreal): ℝ is an ℝ≥0-algebra (#6560)\nZulip discussion:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/rings.20from.20subtype", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1615016574, "sha": "a05b35ca", "message": "doc(*): wrap raw URLs containing parentheses with angle brackets (#6554)\nRaw URLs with parentheses in them are tricky for `doc-gen` to parse, so this commit wraps them in angle brackets.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/order/pfilter.lean", "newPath": "src/order/pfilter.lean", "changes": []}]}, {"timestamp": 1615016573, "sha": "3e5643e8", "message": "feat(category_theory/opposites): use simps everywhere (#6553)\nThis is possible after leanprover-community/lean#538", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "op_hom", ["category_theory", "iso"]], ["del", "theorem", "op_inv", ["category_theory", "iso"]], ["del", "theorem", "op_hom", ["category_theory", "nat_iso"]], ["del", "theorem", "op_inv", ["category_theory", "nat_iso"]], ["del", "theorem", "remove_op_hom", ["category_theory", "nat_iso"]], ["del", "theorem", "remove_op_inv", ["category_theory", "nat_iso"]], ["del", "theorem", "unop_hom", ["category_theory", "nat_iso"]], ["del", "theorem", "unop_inv", ["category_theory", "nat_iso"]], ["del", "theorem", "left_op_app", ["category_theory", "nat_trans"]], ["del", "theorem", "remove_left_op_app", ["category_theory", "nat_trans"]], ["mod", "def", "op_equiv", ["category_theory"]], ["del", "theorem", "op_equiv_apply", ["category_theory"]], ["del", "theorem", "op_equiv_symm_apply", ["category_theory"]]]}]}, {"timestamp": 1615016572, "sha": "5962c76f", "message": "feat(algebra/ring/boolean_ring): Boolean rings (#6464)\n`boolean_ring.to_boolean_algebra` is the Boolean algebra structure on a Boolean ring.", "changes": [{"oldPath": null, "newPath": "src/algebra/ring/boolean_ring.lean", "changes": [["add", "theorem", "add_eq_zero", []], ["add", "theorem", "add_self", []], ["add", "def", "has_inf", ["boolean_ring"]], ["add", "def", "has_sup", ["boolean_ring"]], ["add", "theorem", "inf_assoc", ["boolean_ring"]], ["add", "theorem", "inf_comm", ["boolean_ring"]], ["add", "theorem", "inf_sup_self", ["boolean_ring"]], ["add", "theorem", "le_sup_inf", ["boolean_ring"]], ["add", "theorem", "le_sup_inf_aux", ["boolean_ring"]], ["add", "theorem", "sup_assoc", ["boolean_ring"]], ["add", "theorem", "sup_comm", ["boolean_ring"]], ["add", "theorem", "sup_inf_self", ["boolean_ring"]], ["add", "def", "to_boolean_algebra", ["boolean_ring"]], ["add", "theorem", "mul_add_mul", []], ["add", "theorem", "mul_self", []], ["add", "theorem", "neg_eq", []], ["add", "theorem", "sub_eq_add", []]]}]}, {"timestamp": 1614996885, "sha": "32547fc8", "message": "chore(scripts): update nolints.txt (#6558)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614992926, "sha": "44282437", "message": "chore(polynomial/chebyshev): changes names of chebyshev₁ to chebyshev.T and chebyshev₂ to chebyshev.U (#6519)\nStill have to write here what was changed (will be a long list). More or less this is just search and replace `chebyshev₁` for `chebyshev.T` and `chebyshev₂` for `chebyshev.U`.\n* `polynomial.chebyshev₁` is now `polynomial.chebyshev.T`\n* `polynomial.chebyshev₁_zero` is now `polynomial.chebyshev.T_zero`\n* `polynomial.chebyshev₁_one` is now `polynomial.chebyshev.T_one`\n* `polynomial.chebyshev₁_two` is now `polynomial.chebyshev.T_two`\n* `polynomial.chebyshev₁_add_two` is now `polynomial.chebyshev.T_add_two`\n* `polynomial.chebyshev₁_of_two_le` is now `polynomial.chebyshev.T_of_two_le`\n* `polynomial.map_chebyshev₁` is now `polynomial.chebyshev.map_T`\n* `polynomial.chebyshev₂` is now `polynomial.chebyshev.U`\n* `polynomial.chebyshev₂_zero` is now `polynomial.chebyshev.U_zero`\n* `polynomial.chebyshev₂_one` is now `polynomial.chebyshev.U_one`\n* `polynomial.chebyshev₂_two` is now `polynomial.chebyshev.U_two`\n* `polynomial.chebyshev₂_add_two` is now `polynomial.chebyshev.U_add_two`\n* `polynomial.chebyshev₂_of_two_le` is now `polynomial.chebyshev.U_of_two_le`\n* `polynomial.chebyshev₂_eq_X_mul_chebyshev₂_add_chebyshev₁` is now `polynomial.chebyshev.U_eq_X_mul_U_add_T`\n* `polynomial.chebyshev₁_eq_chebyshev₂_sub_X_mul_chebyshev₂` is now `polynomial.chebyshev.T_eq_U_sub_X_mul_U`\n* `polynomial.chebyshev₁_eq_X_mul_chebyshev₁_sub_pol_chebyshev₂` is now `polynomial.chebyshev.T_eq_X_mul_T_sub_pol_U`\n* `polynomial.one_sub_X_pow_two_mul_chebyshev₂_eq_pol_in_chebyshev₁` is now `polynomial.chebyshev.one_sub_X_pow_two_mul_U_eq_pol_in_T`\n* `polynomial.map_chebyshev₂` is now `polynomial.chebyshev.map_U`\n* `polynomial.chebyshev₁_derivative_eq_chebyshev₂` is now `polynomial.chebyshev.T_derivative_eq_U`\n* `polynomial.one_sub_X_pow_two_mul_derivative_chebyshev₁_eq_poly_in_chebyshev₁` is now `polynomial.chebyshev.one_sub_X_pow_two_mul_derivative_T_eq_poly_in_T`\n* `polynomial.add_one_mul_chebyshev₁_eq_poly_in_chebyshev₂` is now `polynomial.chebyshev.add_one_mul_T_eq_poly_in_U`\n* `polynomial.mul_chebyshev₁` is now `polynomial.chebyshev.mul_T`\n* `polynomial.chebyshev₁_mul` is now `polynomial.chebyshev.T_mul`\n* `polynomial.dickson_one_one_eq_chebyshev₁` is now `polynomial.dickson_one_one_eq_chebyshev_T`\n* `polynomial.chebyshev₁_eq_dickson_one_one` is now `polynomial.chebyshev_T_eq_dickson_one_one`\n* `chebyshev₁_complex_cos` is now `polynomial.chebyshev.T_complex_cos`\n* `cos_nat_mul` is now `polynomial.chebyshev.cos_nat_mul`\n* `chebyshev₂_complex_cos` is now `polynomial.chebyshev.U_complex_cos`\n* `sin_nat_succ_mul` is now `polynomial.chebyshev.sin_nat_succ_mul`", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["del", "theorem", "chebyshev₁_complex_cos", []], ["del", "theorem", "chebyshev₂_complex_cos", []], ["del", "theorem", "cos_nat_mul", []], ["add", "theorem", "T_complex_cos", ["polynomial", "chebyshev"]], ["add", "theorem", "U_complex_cos", ["polynomial", "chebyshev"]], ["add", "theorem", "cos_nat_mul", ["polynomial", "chebyshev"]], ["add", "theorem", "sin_nat_succ_mul", ["polynomial", "chebyshev"]], ["del", "theorem", "sin_nat_succ_mul", []]]}, {"oldPath": "src/ring_theory/polynomial/chebyshev.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": [["del", "theorem", "add_one_mul_chebyshev₁_eq_poly_in_chebyshev₂", ["polynomial"]], ["add", "theorem", "T_add_two", ["polynomial", "chebyshev"]], ["add", "theorem", "T_derivative_eq_U", ["polynomial", "chebyshev"]], ["add", "theorem", "T_eq_U_sub_X_mul_U", ["polynomial", "chebyshev"]], ["add", "theorem", "T_eq_X_mul_T_sub_pol_U", ["polynomial", "chebyshev"]], ["add", "theorem", "T_mul", ["polynomial", "chebyshev"]], ["add", "theorem", "T_of_two_le", ["polynomial", "chebyshev"]], ["add", "theorem", "T_one", ["polynomial", "chebyshev"]], ["add", "theorem", "T_two", ["polynomial", "chebyshev"]], ["add", "theorem", "T_zero", ["polynomial", "chebyshev"]], ["add", "theorem", "U_add_two", ["polynomial", "chebyshev"]], ["add", "theorem", "U_eq_X_mul_U_add_T", ["polynomial", "chebyshev"]], ["add", "theorem", "U_of_two_le", ["polynomial", "chebyshev"]], ["add", "theorem", "U_one", ["polynomial", "chebyshev"]], ["add", "theorem", "U_two", ["polynomial", "chebyshev"]], ["add", "theorem", "U_zero", ["polynomial", "chebyshev"]], ["add", "theorem", "add_one_mul_T_eq_poly_in_U", ["polynomial", "chebyshev"]], ["add", "theorem", "map_T", ["polynomial", "chebyshev"]], ["add", "theorem", "map_U", ["polynomial", "chebyshev"]], ["add", "theorem", "mul_T", ["polynomial", "chebyshev"]], ["add", "theorem", "one_sub_X_pow_two_mul_U_eq_pol_in_T", ["polynomial", "chebyshev"]], ["add", "theorem", "one_sub_X_pow_two_mul_derivative_T_eq_poly_in_T", ["polynomial", "chebyshev"]], ["del", "theorem", "chebyshev₁_add_two", ["polynomial"]], ["del", "theorem", "chebyshev₁_derivative_eq_chebyshev₂", ["polynomial"]], ["del", "theorem", "chebyshev₁_eq_X_mul_chebyshev₁_sub_pol_chebyshev₂", ["polynomial"]], ["del", "theorem", "chebyshev₁_eq_chebyshev₂_sub_X_mul_chebyshev₂", ["polynomial"]], ["del", "theorem", "chebyshev₁_mul", ["polynomial"]], ["del", "theorem", "chebyshev₁_of_two_le", ["polynomial"]], ["del", "theorem", "chebyshev₁_one", ["polynomial"]], ["del", "theorem", "chebyshev₁_two", ["polynomial"]], ["del", "theorem", "chebyshev₁_zero", ["polynomial"]], ["del", "theorem", "chebyshev₂_add_two", ["polynomial"]], ["del", "theorem", "chebyshev₂_eq_X_mul_chebyshev₂_add_chebyshev₁", ["polynomial"]], ["del", "theorem", "chebyshev₂_of_two_le", ["polynomial"]], ["del", "theorem", "chebyshev₂_one", ["polynomial"]], ["del", "theorem", "chebyshev₂_two", ["polynomial"]], ["del", "theorem", "chebyshev₂_zero", ["polynomial"]], ["del", "theorem", "map_chebyshev₁", ["polynomial"]], ["del", "theorem", "map_chebyshev₂", ["polynomial"]], ["del", "theorem", "mul_chebyshev₁", ["polynomial"]], ["del", "theorem", "one_sub_X_pow_two_mul_chebyshev₂_eq_pol_in_chebyshev₁", ["polynomial"]], ["del", "theorem", "one_sub_X_pow_two_mul_derivative_chebyshev₁_eq_poly_in_chebyshev₁", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/dickson.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": [["add", "theorem", "chebyshev_T_eq_dickson_one_one", ["polynomial"]], ["del", "theorem", "chebyshev₁_eq_dickson_one_one", ["polynomial"]], ["add", "theorem", "dickson_one_one_eq_chebyshev_T", ["polynomial"]], ["del", "theorem", "dickson_one_one_eq_chebyshev₁", ["polynomial"]]]}]}, {"timestamp": 1614980736, "sha": "4bc67070", "message": "feat(topology/local_homeomorph): preimage of `closure` and `frontier` (#6547)", "changes": [{"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "image_inter_source_eq'", ["local_homeomorph"]], ["add", "theorem", "map_nhds_within_eq", ["local_homeomorph"]], ["add", "theorem", "preimage_closure", ["local_homeomorph"]], ["add", "theorem", "preimage_frontier", ["local_homeomorph"]]]}]}, {"timestamp": 1614980735, "sha": "cbcbe24d", "message": "feat(algebra/ordered_monoid): linear_ordered_add_comm_monoid(_with_top) (#6520)\nSeparates out classes for `linear_ordered_(add_)comm_monoid`\nCreates `linear_ordered_add_comm_monoid_with_top`, an additive and order-reversed version of `linear_ordered_comm_monoid_with_zero`.\nPuts an instance of `linear_ordered_add_comm_monoid_with_top` on `with_top` of any `linear_ordered_add_comm_monoid` and also on `enat`", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "add_top", []], ["add", "def", "linear_ordered_comm_monoid", ["function", "injective"]], ["add", "theorem", "top_add", []]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}]}, {"timestamp": 1614977555, "sha": "626cb422", "message": "feat(data/polynomial/mirror): new file (#6426)\nThis files defines an alternate version of `polynomial.reverse`. This version is often nicer to work with since it preserves `nat_degree` and `nat_trailing_degree` and is always an involution.\n(this PR is part of the irreducibility saga)", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/mirror.lean", "changes": [["add", "theorem", "coeff_mirror", ["polynomial"]], ["add", "theorem", "irreducible_of_mirror", ["polynomial"]], ["add", "theorem", "mirror_C", ["polynomial"]], ["add", "theorem", "mirror_X", ["polynomial"]], ["add", "theorem", "mirror_eq_zero", ["polynomial"]], ["add", "theorem", "mirror_eval_one", ["polynomial"]], ["add", "theorem", "mirror_leading_coeff", ["polynomial"]], ["add", "theorem", "mirror_mirror", ["polynomial"]], ["add", "theorem", "mirror_monomial", ["polynomial"]], ["add", "theorem", "mirror_mul_of_domain", ["polynomial"]], ["add", "theorem", "mirror_nat_degree", ["polynomial"]], ["add", "theorem", "mirror_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "mirror_neg", ["polynomial"]], ["add", "theorem", "mirror_smul", ["polynomial"]], ["add", "theorem", "mirror_trailing_coeff", ["polynomial"]], ["add", "theorem", "mirror_zero", ["polynomial"]]]}]}, {"timestamp": 1614960984, "sha": "913950ed", "message": "feat(group_theory/subgroup): add monoid_hom.restrict (#6537)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "def", "restrict", ["monoid_hom"]], ["add", "theorem", "restrict_apply", ["monoid_hom"]]]}]}, {"timestamp": 1614956725, "sha": "d40487b5", "message": "feat(measure_theory/[set_integral, interval_integral]): mono and nonneg lemmas (#6292)\nSee https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/.60integral_restrict.60/near/226274072", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_mono", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_mono", ["interval_integral"]], ["add", "theorem", "integral_mono_ae", ["interval_integral"]], ["add", "theorem", "integral_mono_ae_restrict", ["interval_integral"]], ["add", "theorem", "integral_mono_on", ["interval_integral"]], ["add", "theorem", "integral_nonneg", ["interval_integral"]], ["add", "theorem", "integral_nonneg_of_ae", ["interval_integral"]], ["add", "theorem", "integral_nonneg_of_ae_restrict", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_restrict_of_ae", ["measure_theory"]], ["add", "theorem", "ae_restrict_of_ae_restrict_of_subset", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "set_integral_mono", ["measure_theory"]], ["add", "theorem", "set_integral_mono_ae", ["measure_theory"]], ["add", "theorem", "set_integral_mono_ae_restrict", ["measure_theory"]], ["add", "theorem", "set_integral_mono_on", ["measure_theory"]], ["add", "theorem", "set_integral_nonneg", ["measure_theory"]], ["add", "theorem", "set_integral_nonneg_of_ae", ["measure_theory"]], ["add", "theorem", "set_integral_nonneg_of_ae_restrict", ["measure_theory"]]]}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1614949487, "sha": "97d13d75", "message": "feat(algebra/lie/subalgebra): define the Lie subalgebra generated by a subset (#6549)\nThe work here is a lightly-edited copy-paste of the corresponding results for Lie submodules", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "coe_lie_span_submodule_eq_iff", ["lie_subalgebra"]], ["add", "def", "lie_span", ["lie_subalgebra"]], ["add", "theorem", "lie_span_eq", ["lie_subalgebra"]], ["add", "theorem", "lie_span_le", ["lie_subalgebra"]], ["add", "theorem", "lie_span_mono", ["lie_subalgebra"]], ["add", "theorem", "mem_lie_span", ["lie_subalgebra"]], ["add", "theorem", "submodule_span_le_lie_span", ["lie_subalgebra"]], ["add", "theorem", "subset_lie_span", ["lie_subalgebra"]], ["add", "theorem", "exists_lie_subalgebra_coe_eq_iff", ["submodule"]]]}]}, {"timestamp": 1614943679, "sha": "d90448c6", "message": "chore(linear_algebra/*): changes to finsupp_vectorspaces and move module doc dual (#6516)\nThis PR does the following:\n- move the module doc of `linear_algebra.dual` so that it is recognised by the linter.\n- add `ker_eq_bot_iff_range_eq_top_of_findim_eq_findim` to `linear_algebra.finite_dimensional`, this replaces `injective_of_surjective` in `linear_algebra.finsupp_vectorspaces`\n- remove `eq_bot_iff_dim_eq_zero` from `linear_algebra.finsupp_vectorspaces`, this already exists as `dim_eq_zero` in `linear_algebra.finite_dimensional`\n- changed `cardinal_mk_eq_cardinal_mk_field_pow_dim` and `cardinal_lt_omega_of_dim_lt_omega` to assume `finite_dimensional K V` instead of `dim < omega`.\n- renamed `cardinal_lt_omega_of_dim_lt_omega` to `cardinal_lt_omega_of_finite_dimensional` since the assumption changed.\n- provided a module doc for `linear_algebra.finsupp_vectorspaces` which should remove `linear_algebra.*` from the style exceptions file.\nThis file should probably be looked at again by someone more experienced in the linear_algebra part of the library. It seems to me that most of the statements in this file in fact would better fit in other files.", "changes": [{"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": [["add", "theorem", "findim_R", ["mv_polynomial"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "findim_eq_of_dim_eq", ["finite_dimensional"]], ["add", "theorem", "ker_eq_bot_iff_range_eq_top_of_findim_eq_findim", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["del", "theorem", "cardinal_lt_omega_of_dim_lt_omega", []], ["add", "theorem", "cardinal_lt_omega_of_finite_dimensional", []], ["mod", "theorem", "cardinal_mk_eq_cardinal_mk_field_pow_dim", []], ["del", "theorem", "eq_bot_iff_dim_eq_zero", []], ["del", "theorem", "injective_of_surjective", []]]}]}, {"timestamp": 1614933755, "sha": "c782e282", "message": "chore(analysis/normed_space/units): add `protected`, minor review (#6544)", "changes": [{"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": [["del", "theorem", "is_open", ["units"]], ["del", "theorem", "nhds", ["units"]]]}]}, {"timestamp": 1614933754, "sha": "f158f25d", "message": "feat(data/mv_polynomial/basic): add is_scalar_tower and smul_comm_class instances (#6542)\nThis also fixes the `semimodule` instance to not require `comm_semiring R`", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1614922652, "sha": "340dd69f", "message": "fix(*): remove some simp lemmas (#6541)\nAll of these simp lemmas are also declared in core. \nMaybe one of the copies can be removed in a future PR, but this PR is just to remove the duplicate simp attributes.\nThis is part of fixing linting problems in core, done in leanprover-community/lean#545. \nMost of the duplicate simp lemmas are fixed in `core`, but I prefer to remove the simp attribute here in mathlib if the simp lemmas were already used in core.", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["mod", "theorem", "coe_sort_ff", ["bool"]], ["mod", "theorem", "coe_sort_tt", ["bool"]], ["mod", "theorem", "to_bool_false", ["bool"]], ["mod", "theorem", "to_bool_true", ["bool"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "bind_append", ["list"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "forall_true_iff", []]]}]}, {"timestamp": 1614918860, "sha": "990a5bbd", "message": "chore(analysis/normed_space/extend): remove unnecessary imports (#6538)\nRemove two imports. `import analysis.complex.basic` is actually unnecessary, `import analysis.normed_space.operator_norm` is indirectly imported via `data.complex.is_R_or_C`.", "changes": [{"oldPath": "src/analysis/normed_space/extend.lean", "newPath": "src/analysis/normed_space/extend.lean", "changes": []}]}, {"timestamp": 1614911175, "sha": "10aadddf", "message": "chore(scripts): update nolints.txt (#6543)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614903837, "sha": "d2cc044f", "message": "chore(algebra/algebra/basic): add a missing coe lemma (#6535)\nThis is just to stop the terrible pain of having to work with `⇑(e.to_ring_equiv) x` in goals.\nIn the long run, we should sort out the simp normal form, but for now I just want to stop the pain.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_ring_equiv'", ["alg_equiv"]]]}]}, {"timestamp": 1614892685, "sha": "ef1a00b6", "message": "feat(data/finsupp, algebra/monoid_algebra): add is_scalar_tower and smul_comm_class (#6534)\nThis stops just short of transferring these instances to `polynomial` and `mv_polynomial`.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}]}, {"timestamp": 1614892684, "sha": "0dfba50d", "message": "feat(algebra/algebra/basic): alg_equiv.of_linear_equiv (#6495)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "of_linear_equiv", ["alg_equiv"]], ["add", "theorem", "of_linear_equiv_apply", ["alg_equiv"]], ["add", "theorem", "of_linear_equiv_to_linear_equiv", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_of_linear_equiv", ["alg_equiv"]]]}]}, {"timestamp": 1614892682, "sha": "744e79c1", "message": "feat(algebra/ordered_*, */sub{monoid,group,ring,semiring,field,algebra}): pullback of ordered algebraic structures under an injective map (#6489)\nProve that the following 14 order typeclasses can be pulled back via an injective map (`function.injective.*`), and use them to attach 30 new instances to sub-objects:\n* `ordered_comm_monoid` (and the implied `ordered_add_comm_monoid`)\n * `submonoid.to_ordered_comm_monoid`\n * `submodule.to_ordered_add_comm_monoid`\n* `ordered_comm_group` (and the implied `ordered_add_comm_group`)\n * `subgroup.to_ordered_comm_group`\n * `submodule.to_ordered_add_comm_group`\n* `ordered_cancel_comm_monoid` (and the implied `ordered_cancel_add_comm_monoid`)\n * `submonoid.to_ordered_cancel_comm_monoid`\n * `submodule.to_ordered_cancel_add_comm_monoid`\n* `linear_ordered_cancel_comm_monoid` (and the implied `linear_ordered_cancel_add_comm_monoid`)\n * `submonoid.to_linear_ordered_cancel_comm_monoid`\n * `submodule.to_linear_ordered_cancel_add_comm_monoid`\n* `linear_ordered_comm_monoid_with_zero`\n * (no suitable subobject exists for monoid_with_zero)\n* `linear_ordered_comm_group` (and the implied `linear_ordered_add_comm_group`)\n * `subgroup.to_linear_ordered_comm_group`\n * `submodule.to_linear_ordered_add_comm_group`\n* `ordered_semiring`\n * `subsemiring.to_ordered_semiring`\n * `subalgebra.to_ordered_semiring`\n* `ordered_comm_semiring`\n * `subsemiring.to_ordered_comm_semiring`\n * `subalgebra.to_ordered_comm_semiring`\n* `ordered_ring`\n * `subring.to_ordered_ring`\n * `subalgebra.to_ordered_ring`\n* `ordered_comm_ring`\n * `subring.to_ordered_comm_ring`\n * `subalgebra.to_ordered_comm_ring`\n* `linear_ordered_semiring`\n * `subring.to_linear_ordered_semiring`\n * `subalgebra.to_linear_ordered_semiring`\n* `linear_ordered_ring`\n * `subring.to_linear_ordered_ring`\n * `subalgebra.to_linear_ordered_ring`\n* `linear_ordered_comm_ring`\n * `subring.to_linear_ordered_comm_ring`\n * `subalgebra.to_linear_ordered_comm_ring`\n* `linear_ordered_field`\n * `subfield.to_linear_ordered_field`\nZulip:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/rings.20from.20subtype", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["add", "def", "linear_ordered_comm_monoid_with_zero", ["function", "injective"]]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "def", "linear_ordered_field", ["function", "injective"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "def", "linear_ordered_comm_group", ["function", "injective"]], ["add", "def", "ordered_comm_group", ["function", "injective"]]]}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "def", "linear_ordered_cancel_comm_monoid", ["function", "injective"]], ["add", "def", "ordered_cancel_comm_monoid", ["function", "injective"]], ["add", "def", "ordered_comm_monoid", ["function", "injective"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "def", "linear_ordered_comm_ring", ["function", "injective"]], ["add", "def", "linear_ordered_ring", ["function", "injective"]], ["add", "def", "linear_ordered_semiring", ["function", "injective"]], ["add", "def", "ordered_comm_ring", ["function", "injective"]], ["add", "def", "ordered_comm_semiring", ["function", "injective"]], ["add", "def", "ordered_ring", ["function", "injective"]], ["add", "def", "ordered_semiring", ["function", "injective"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1614892680, "sha": "09273ae0", "message": "feat(measure_theory/probability_mass_function): Generalize bind on pmfs to binding on the support (#6210)", "changes": [{"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["add", "def", "bind_on_support", ["pmf"]], ["add", "theorem", "bind_on_support_apply", ["pmf"]], ["add", "theorem", "bind_on_support_bind_on_support", ["pmf"]], ["add", "theorem", "bind_on_support_comm", ["pmf"]], ["add", "theorem", "bind_on_support_eq_bind", ["pmf"]], ["add", "theorem", "bind_on_support_eq_zero_iff", ["pmf"]], ["add", "theorem", "bind_on_support_pure", ["pmf"]], ["add", "theorem", "coe_bind_on_support_apply", ["pmf"]], ["add", "theorem", "mem_support_bind_on_support_iff", ["pmf"]], ["add", "theorem", "mem_support_pure_iff", ["pmf"]], ["add", "theorem", "pure_bind_on_support", ["pmf"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "tsum_congr", []], ["add", "theorem", "tsum_dite_left", []], ["add", "theorem", "tsum_dite_right", []], ["add", "theorem", "tsum_ne_zero_iff", []]]}]}, {"timestamp": 1614880152, "sha": "8c72ca3f", "message": "feat(data/mv_polynomial/basic): a polynomial ring over an R-algebra is also an R-algebra (#6533)", "changes": [{"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}]}, {"timestamp": 1614880151, "sha": "84f4d5cc", "message": "feat(order/zorn): nonempty formulation of Zorn's lemma (#6532)\nIn practice it's often helpful to have this alternate formulation of Zorn's lemma", "changes": [{"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["add", "theorem", "exists_maximal_of_nonempty_chains_bounded", ["zorn"]], ["add", "theorem", "zorn_nonempty_partial_order", ["zorn"]]]}]}, {"timestamp": 1614880150, "sha": "dbddee69", "message": "feat(topology/continuous_on): add `set.left_inv_on.map_nhds_within_eq` (#6529)\nAlso add some trivial lemmas to `data/set/function` and\n`order/filter/basic`.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "left_inv_on", ["function", "left_inverse"]], ["add", "theorem", "right_inv_on", ["function", "right_inverse"]], ["add", "theorem", "right_inv_on_image", ["set", "left_inv_on"]], ["add", "theorem", "surj_on_image", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto", ["set", "maps_to"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "map_nhds_eq", ["function", "left_inverse"]], ["add", "theorem", "nhds_within_inter_of_mem", []], ["add", "theorem", "map_nhds_within_eq", ["set", "left_inv_on"]]]}]}, {"timestamp": 1614880149, "sha": "0690d970", "message": "feat(bounded_continuous_function): norm_lt_of_compact (#6524)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["add", "theorem", "norm_le_of_nonempty", ["bounded_continuous_function"]], ["add", "theorem", "norm_lt_of_compact", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1614880148, "sha": "10d2e70d", "message": "feat(order/lattice): \"algebraic\" constructors for (semi-)lattices (#6460)\nI also added a module doc string for `order/lattice.lean`.", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "def", "mk'", ["lattice"]], ["add", "theorem", "dual_dual", ["semilattice_inf"]], ["add", "def", "mk'", ["semilattice_inf"]], ["add", "theorem", "dual_dual", ["semilattice_sup"]], ["add", "def", "mk'", ["semilattice_sup"]], ["add", "theorem", "semilattice_sup_mk'_partial_order_eq_semilattice_inf_mk'_partial_order", []], ["add", "theorem", "sup_eq_iff_inf_eq", []]]}]}, {"timestamp": 1614873715, "sha": "1cc59b9d", "message": "feat(set_theory/cardinal, data/nat/fincard): Define `nat`- and `enat`-valued cardinalities (#6494)\nDefines `cardinal.to_nat` and `cardinal.to_enat`\nUses those to define `nat.card` and `enat.card`", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "cast_to_nat_of_lt_omega", ["cardinal"]], ["add", "theorem", "mk_to_enat_eq_coe_card", ["cardinal"]], ["add", "theorem", "mk_to_enat_of_infinite", ["cardinal"]], ["add", "theorem", "mk_to_nat_eq_card", ["cardinal"]], ["add", "theorem", "mk_to_nat_of_infinite", ["cardinal"]], ["add", "theorem", "one_to_nat", ["cardinal"]], ["add", "theorem", "to_enat_apply_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_enat_apply_of_omega_le", ["cardinal"]], ["add", "theorem", "to_enat_cast", ["cardinal"]], ["add", "theorem", "to_enat_surjective", ["cardinal"]], ["add", "theorem", "to_nat_apply_of_lt_omega", ["cardinal"]], ["add", "theorem", "to_nat_apply_of_omega_le", ["cardinal"]], ["add", "theorem", "to_nat_cast", ["cardinal"]], ["add", "theorem", "to_nat_right_inverse", ["cardinal"]], ["add", "theorem", "to_nat_surjective", ["cardinal"]], ["add", "theorem", "zero_to_nat", ["cardinal"]]]}]}, {"timestamp": 1614869028, "sha": "9607dbdd", "message": "feat(analysis/convex): linear image of segment (#6531)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "segment_image", []]]}]}, {"timestamp": 1614869027, "sha": "a8d285cc", "message": "feat(algebra/direct_sum_graded): endow `direct_sum` with a ring structure (#6053)\nTo quote the module docstring\n> This module provides a set of heterogenous typeclasses for defining a multiplicative structure\n> over `⨁ i, A i` such that `(*) : A i → A j → A (i + j)`; that is to say, `A` forms an\n> additively-graded ring. The typeclasses are:\n> \n> * `direct_sum.ghas_one A`\n> * `direct_sum.ghas_mul A`\n> * `direct_sum.gmonoid A`\n> * `direct_sum.gcomm_monoid A`\n> \n> Respectively, these imbue the direct sum `⨁ i, A i` with:\n> \n> * `has_one`\n> * `mul_zero_class`, `distrib`\n> * `semiring`, `ring`\n> * `comm_semiring`, `comm_ring`\n>\n> Additionally, this module provides helper functions to construct `gmonoid` and `gcomm_monoid`\n> instances for:\n> \n> * `A : ι → submonoid S`: `direct_sum.ghas_one.of_submonoids`, `direct_sum.ghas_mul.of_submonoids`,\n> `direct_sum.gmonoid.of_submonoids`, `direct_sum.gcomm_monoid.of_submonoids`\n> * `A : ι → submonoid S`: `direct_sum.ghas_one.of_subgroups`, `direct_sum.ghas_mul.of_subgroups`,\n> `direct_sum.gmonoid.of_subgroups`, `direct_sum.gcomm_monoid.of_subgroups`\n> \n> If the `A i` are disjoint, these provide a gradation of `⨆ i, A i`, and the mapping\n> `⨁ i, A i →+ ⨆ i, A i` can be obtained as\n> `direct_sum.to_monoid (λ i, add_submonoid.inclusion $ le_supr A i)`.", "changes": [{"oldPath": null, "newPath": "src/algebra/direct_sum_graded.lean", "changes": [["add", "def", "of_add_subgroups", ["direct_sum", "gcomm_monoid"]], ["add", "def", "of_add_submonoids", ["direct_sum", "gcomm_monoid"]], ["add", "def", "of_submodules", ["direct_sum", "gcomm_monoid"]], ["add", "def", "of_add_subgroups", ["direct_sum", "ghas_mul"]], ["add", "def", "of_add_submonoids", ["direct_sum", "ghas_mul"]], ["add", "def", "of_submodules", ["direct_sum", "ghas_mul"]], ["add", "def", "to_sigma_has_mul", ["direct_sum", "ghas_mul"]], ["add", "def", "of_add_subgroups", ["direct_sum", "ghas_one"]], ["add", "def", "of_add_submonoids", ["direct_sum", "ghas_one"]], ["add", "def", "of_submodules", ["direct_sum", "ghas_one"]], ["add", "def", "to_sigma_has_one", ["direct_sum", "ghas_one"]], ["add", "def", "of_add_subgroups", ["direct_sum", "gmonoid"]], ["add", "def", "of_add_submonoids", ["direct_sum", "gmonoid"]], ["add", "def", "of_submodules", ["direct_sum", "gmonoid"]], ["add", "theorem", "of_mul_of", ["direct_sum"]]]}]}, {"timestamp": 1614866336, "sha": "edbbecbe", "message": "doc(group_theory/sylow): module doc (#6477)\nThis PR provides the last module doc which was missing from `group_theory`, namely that for `sylow`.", "changes": [{"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "exists_subgroup_card_pow_prime", ["sylow"]]]}]}, {"timestamp": 1614857603, "sha": "d32bb6ed", "message": "feat(data/finsupp/basic): add support_nonempty_iff and nonzero_iff_exists (#6530)\nAdd two lemmas to work with `finsupp`s with non-empty support.\nZulip:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/finsupp.2Enonzero_iff_exists", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "nonzero_iff_exists", ["finsupp"]], ["add", "theorem", "support_nonempty_iff", ["finsupp"]]]}]}, {"timestamp": 1614857602, "sha": "ca96bfbe", "message": "feat(linear_algebra/clifford_algebra): add definitions of the conjugation operators and some API (#6491)\nThis also replaces the file with a directory, to avoid monstrous files from developing.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra.lean", "newPath": "src/linear_algebra/clifford_algebra/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/conjugation.lean", "changes": [["add", "def", "involute", ["clifford_algebra"]], ["add", "theorem", "involute_comp_involute", ["clifford_algebra"]], ["add", "theorem", "involute_involute", ["clifford_algebra"]], ["add", "theorem", "involute_involutive", ["clifford_algebra"]], ["add", "theorem", "involute_prod_map_ι", ["clifford_algebra"]], ["add", "theorem", "involute_ι", ["clifford_algebra"]], ["add", "theorem", "commutes", ["clifford_algebra", "reverse"]], ["add", "theorem", "map_mul", ["clifford_algebra", "reverse"]], ["add", "theorem", "map_one", ["clifford_algebra", "reverse"]], ["add", "def", "reverse", ["clifford_algebra"]], ["add", "theorem", "reverse_comp_involute", ["clifford_algebra"]], ["add", "theorem", "reverse_comp_reverse", ["clifford_algebra"]], ["add", "theorem", "reverse_involute", ["clifford_algebra"]], ["add", "theorem", "reverse_involute_commute", ["clifford_algebra"]], ["add", "theorem", "reverse_involutive", ["clifford_algebra"]], ["add", "theorem", "reverse_prod_map_ι", ["clifford_algebra"]], ["add", "theorem", "reverse_reverse", ["clifford_algebra"]], ["add", "theorem", "reverse_ι", ["clifford_algebra"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra/default.lean", "changes": []}]}, {"timestamp": 1614857601, "sha": "deb3d452", "message": "feat(data/mv_polynomial/equiv): generalize ring_equiv_congr (#6420)\nFollowing the discussion in #6324, I have modified `mv_polynomial.ring_equiv_of_equiv` and `mv_polynomial.ring_equiv_congr`, that are now called `ring_equiv_congr_left` and `ring_equiv_congr_left`: both are proved as special cases of `ring_equiv_congr` (the situation for algebras is exactly the same).\nThis has the side effect that the lemmas automatically generated by `@[simps]` are not in a good form (see for example the lemma `mv_polynomial.alg_equiv_congr_left_apply ` in the current mathlib, where there is an unwanted `alg_equiv.refl.to_ring_equiv`). To avoid this I deleted the `@[simps]` and I wrote the lemmas by hand (also correcting the problem with `mv_polynomial.alg_equiv_congr_left_apply`). I probably don't understand completely `@[simps]`, since I had to manually modified some other proofs that no longer worked (I mean, I had to do something more that just using the new names).\nIf there is some `simp` lemma I forgot I would be happy to write it.", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "theorem", "alg_equiv_congr_left_apply", ["mv_polynomial"]], ["add", "theorem", "alg_equiv_congr_left_symm_apply", ["mv_polynomial"]], ["add", "theorem", "alg_equiv_congr_right_apply", ["mv_polynomial"]], ["add", "theorem", "alg_equiv_congr_right_symm_apply", ["mv_polynomial"]], ["mod", "def", "ring_equiv_congr", ["mv_polynomial"]], ["add", "def", "ring_equiv_congr_left", ["mv_polynomial"]], ["add", "theorem", "ring_equiv_congr_left_apply", ["mv_polynomial"]], ["add", "theorem", "ring_equiv_congr_left_symm_apply", ["mv_polynomial"]], ["add", "def", "ring_equiv_congr_right", ["mv_polynomial"]], ["add", "theorem", "ring_equiv_congr_right_apply", ["mv_polynomial"]], ["add", "theorem", "ring_equiv_congr_right_symm_apply", ["mv_polynomial"]], ["del", "def", "ring_equiv_of_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/funext.lean", "newPath": "src/data/mv_polynomial/funext.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1614847410, "sha": "3329ec4e", "message": "chore(topology/algebra/*): tendsto namespacing (#6528)\nCorrect a few lemmas which I noticed were namespaced as `tendsto.***` rather than `filter.tendsto.***`, and thus couldn't be used with projection notation.\nAlso use the projection notation, where now permitted.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Search.20for.20all.20declarations.20in.20a.20namespace)", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/polynomials.lean", "newPath": "src/analysis/special_functions/polynomials.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "const_mul", ["filter", "tendsto"]], ["add", "theorem", "mul_const", ["filter", "tendsto"]], ["del", "theorem", "const_mul", ["tendsto"]], ["del", "theorem", "mul_const", ["tendsto"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "inv_tendsto_at_top", ["filter", "tendsto"]], ["add", "theorem", "inv_tendsto_zero", ["filter", "tendsto"]], ["add", "theorem", "max", ["filter", "tendsto"]], ["add", "theorem", "min", ["filter", "tendsto"]], ["del", "theorem", "inv_tendsto_at_top", ["tendsto"]], ["del", "theorem", "inv_tendsto_zero", ["tendsto"]], ["del", "theorem", "max", ["tendsto"]], ["del", "theorem", "min", ["tendsto"]]]}]}, {"timestamp": 1614847409, "sha": "76aee25d", "message": "refactor(big_operators/basic): move prod_mul_prod_compl (#6526)\nSeveral lemmas were unnecessarily in `src/data/fintype/card.lean`, and I've relocated them to `src/algebra/big_operators/basic.lean`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_compl_mul_prod", ["finset"]], ["add", "theorem", "prod_mul_prod_compl", ["finset"]], ["add", "theorem", "prod_mul_prod", ["is_compl"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "union_compl", ["finset"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["del", "theorem", "prod_compl_mul_prod", ["finset"]], ["del", "theorem", "prod_mul_prod_compl", ["finset"]], ["del", "theorem", "prod_mul_prod", ["is_compl"]]]}]}, {"timestamp": 1614847408, "sha": "d7fa1bc8", "message": "feat(topology/instances/real): generalize 'compact_space I' to 'compact_space (Icc a b)' (#6523)", "changes": [{"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1614847407, "sha": "2f357794", "message": "chore(*/sub*): tidy up inherited algebraic structures from parent objects (#6509)\nThis changes `subfield.to_field` to ensure that division is defeq.\nIt also removes `subring.subset_comm_ring` which was identical to `subring.to_comm_ring`, renames some `subalgebra` instances to match those of `subring`s, and cleans up a few related proofs that relied on the old names.\nThese are cleanups split from #6489, which failed CI but was otherwise approved", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "coe_div", ["subfield"]], ["add", "theorem", "coe_sub", ["subfield"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1614844174, "sha": "f4db322f", "message": "feat(category_theory/subobject): factoring morphisms through subobjects (#6302)\nThe predicate `h : P.factors f`, for `P : subobject Y` and `f : X ⟶ Y`\nasserts the existence of some `P.factor_thru f : X ⟶ (P : C)` making the obvious diagram commute.\nWe provide conditions for `P.factors f`, when `P` is a kernel/equalizer/image/inf/sup subobject.", "changes": [{"oldPath": "src/category_theory/subobject.lean", "newPath": "src/category_theory/subobject.lean", "changes": [["add", "theorem", "equalizer_subobject_factors", ["category_theory", "limits"]], ["add", "theorem", "equalizer_subobject_factors_iff", ["category_theory", "limits"]], ["add", "theorem", "image_subobject_factors", ["category_theory", "limits"]], ["add", "theorem", "image_subobject_le", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_factors", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_factors_iff", ["category_theory", "limits"]], ["add", "def", "factor_thru", ["category_theory", "mono_over"]], ["add", "def", "factors", ["category_theory", "mono_over"]], ["add", "theorem", "image_mono_over_arrow", ["category_theory", "mono_over"]], ["add", "theorem", "bot_arrow", ["category_theory", "subobject"]], ["add", "def", "bot_coe_iso_zero", ["category_theory", "subobject"]], ["add", "theorem", "bot_factors_iff_zero", ["category_theory", "subobject"]], ["add", "theorem", "eq_of_comp_arrow_eq", ["category_theory", "subobject"]], ["add", "def", "factor_thru", ["category_theory", "subobject"]], ["add", "theorem", "factor_thru_arrow", ["category_theory", "subobject"]], ["add", "theorem", "factor_thru_eq_zero", ["category_theory", "subobject"]], ["add", "theorem", "factor_thru_right", ["category_theory", "subobject"]], ["add", "def", "factors", ["category_theory", "subobject"]], ["add", "theorem", "factors_comp_arrow", ["category_theory", "subobject"]], ["add", "theorem", "factors_iff", ["category_theory", "subobject"]], ["add", "theorem", "factors_left_of_inf_factors", ["category_theory", "subobject"]], ["add", "theorem", "factors_of_factors_right", ["category_theory", "subobject"]], ["add", "theorem", "factors_of_le", ["category_theory", "subobject"]], ["add", "theorem", "factors_right_of_inf_factors", ["category_theory", "subobject"]], ["add", "theorem", "finset_inf_arrow_factors", ["category_theory", "subobject"]], ["add", "theorem", "finset_inf_factors", ["category_theory", "subobject"]], ["add", "theorem", "finset_sup_factors", ["category_theory", "subobject"]], ["add", "theorem", "inf_arrow_factors_left", ["category_theory", "subobject"]], ["add", "theorem", "inf_arrow_factors_right", ["category_theory", "subobject"]], ["add", "theorem", "inf_factors", ["category_theory", "subobject"]], ["add", "theorem", "le_of_comm", ["category_theory", "subobject"]], ["add", "theorem", "representative_arrow", ["category_theory", "subobject"]], ["add", "theorem", "representative_coe", ["category_theory", "subobject"]], ["add", "theorem", "sup_factors_of_factors_left", ["category_theory", "subobject"]], ["add", "theorem", "sup_factors_of_factors_right", ["category_theory", "subobject"]], ["add", "def", "top_coe_iso_self", ["category_theory", "subobject"]], ["add", "theorem", "top_factors", ["category_theory", "subobject"]], ["add", "theorem", "underlying_iso_arrow", ["category_theory", "subobject"]], ["add", "theorem", "underlying_iso_id_eq_top_coe_iso_self", ["category_theory", "subobject"]], ["add", "theorem", "underlying_iso_inv_top_arrow", ["category_theory", "subobject"]]]}]}, {"timestamp": 1614823885, "sha": "8289518d", "message": "feat(algebra/star): the Bell/CHSH/Tsirelson inequalities (#4687)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/star/chsh.lean", "changes": [["add", "theorem", "CHSH_inequality_of_comm", []], ["add", "structure", "is_CHSH_tuple", []], ["add", "theorem", "neg_two_gsmul_half_smul", ["tsirelson_inequality"]], ["add", "theorem", "smul_four", ["tsirelson_inequality"]], ["add", "theorem", "smul_two", ["tsirelson_inequality"]], ["add", "theorem", "sqrt_two_inv_mul_self", ["tsirelson_inequality"]], ["add", "theorem", "tsirelson_inequality_aux", ["tsirelson_inequality"]], ["add", "theorem", "two_gsmul_half_smul", ["tsirelson_inequality"]], ["add", "theorem", "tsirelson_inequality", []]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1614820555, "sha": "28378076", "message": "chore(scripts): update nolints.txt (#6527)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614778897, "sha": "3c9399d1", "message": "chore(algebra/ordered_group): put to_additive on lemmas about linear_ordered_comm_group (#6506)\nNo lemmas are added or renamed for the additive version, this just adds lemmas (and more importantly instances) for the multiplicative version.\nThis:\n* Adds missing `ancestor` attributes to `linear_ordered_add_comm_group` and `linear_ordered_comm_group`, which are needed to make `to_additive` work correctly on `to_add_comm_group` and `to_comm_group`\n* Adds multiplicative versions of:\n * `sub_le_self_iff` (`div_le_self_iff`)\n * `sub_lt_self_iff` (`div_lt_self_iff `)\n * `linear_ordered_add_comm_group.to_linear_ordered_cancel_add_comm_monoid` (`linear_ordered_comm_group.to_linear_ordered_cancel_comm_monoid`)\n * `linear_ordered_add_comm_group.add_lt_add_left` (`linear_ordered_comm_group.mul_lt_mul_left'`)\n * `min_neg_neg` (`min_inv_inv'`)\n * `max_neg_neg` (`max_inv_inv'`)\n * `min_sub_sub_right` (`min_div_div_right'`)\n * `min_sub_sub_left` (`min_div_div_left'`)\n * `max_sub_sub_right` (`max_div_div_right'`)\n * `max_sub_sub_left` (`max_div_div_left'`)\n * `max_zero_sub_eq_self` (`max_one_div_eq_self'`)\n * `eq_zero_of_neg_eq` (`eq_one_of_inv_eq'`)\n * `exists_zero_lt` (`exists_one_lt'`)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "div_le_self_iff", []], ["add", "theorem", "div_lt_self_iff", []], ["add", "theorem", "eq_one_of_inv_eq'", []], ["del", "theorem", "eq_zero_of_neg_eq", []], ["add", "theorem", "exists_one_lt'", []], ["del", "theorem", "exists_zero_lt", []], ["del", "theorem", "add_lt_add_left", ["linear_ordered_add_comm_group"]], ["add", "theorem", "mul_lt_mul_left'", ["linear_ordered_comm_group"]], ["add", "theorem", "max_div_div_left'", []], ["add", "theorem", "max_div_div_right'", []], ["add", "theorem", "max_inv_inv'", []], ["del", "theorem", "max_neg_neg", []], ["add", "theorem", "max_one_div_eq_self'", []], ["del", "theorem", "max_sub_sub_left", []], ["del", "theorem", "max_sub_sub_right", []], ["del", "theorem", "max_zero_sub_eq_self", []], ["add", "theorem", "min_div_div_left'", []], ["add", "theorem", "min_div_div_right'", []], ["add", "theorem", "min_inv_inv'", []], ["del", "theorem", "min_neg_neg", []], ["del", "theorem", "min_sub_sub_left", []], ["del", "theorem", "min_sub_sub_right", []], ["del", "theorem", "sub_le_self_iff", []], ["del", "theorem", "sub_lt_self_iff", []]]}]}, {"timestamp": 1614778897, "sha": "d4ac4c3e", "message": "feat(data/list/basic): add `list.prod_eq_zero(_iff)` (#6504)\nAPI changes:\n* add `list.prod_eq_zero`, `list.prod_eq_zero_iff`, ;\n* lemmas `list.prod_ne_zero`, `multiset.prod_ne_zero`, `polynomial.root_list_prod`, `polynomial.roots_multiset_prod`, `polynomial.nat_degree_multiset_prod`, now assume `0 ∉ L` (or `0 ∉ m`/`0 ∉ s`) instead of `∀ x ∈ L, x ≠ 0`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_eq_zero", ["list"]], ["add", "theorem", "prod_eq_zero_iff", ["list"]], ["mod", "theorem", "prod_ne_zero", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "prod_eq_zero", ["multiset"]], ["mod", "theorem", "prod_eq_zero_iff", ["multiset"]], ["mod", "theorem", "prod_ne_zero", ["multiset"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "zero_nmem_multiset_map_X_sub_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}]}, {"timestamp": 1614778896, "sha": "a852bf40", "message": "feat(data/equiv/fin): fin_add_flip and fin_rotate (#6454)\nAdd\n* `fin_add_flip : fin (m + n) ≃ fin (n + m)`\n* `fin_rotate : Π n, fin n ≃ fin n` (acts by +1 mod n)\nand simp lemmas, and shows `fin.snoc` is a rotation of `fin.cons`.", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "theorem", "snoc_eq_cons_rotate", ["fin"]], ["add", "def", "fin_add_flip", []], ["add", "theorem", "fin_add_flip_apply_left", []], ["add", "theorem", "fin_add_flip_apply_right", []], ["add", "def", "fin_congr", []], ["add", "theorem", "fin_congr_apply_coe", []], ["add", "theorem", "fin_congr_apply_mk", []], ["add", "theorem", "fin_congr_symm", []], ["add", "theorem", "fin_congr_symm_apply_coe", []], ["add", "def", "fin_rotate", []], ["add", "theorem", "fin_rotate_last'", []], ["add", "theorem", "fin_rotate_last", []], ["add", "theorem", "fin_rotate_of_lt", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "eq_of_le_of_lt_succ", ["nat"]]]}]}, {"timestamp": 1614767814, "sha": "9c48eb18", "message": "chore(ring_theory/{subring,integral_closure}): simplify a proof, remove redundant instances (#6513)", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["del", "def", "subset_comm_ring", ["subring"]]]}]}, {"timestamp": 1614767813, "sha": "eec54d05", "message": "feat(algebra/field): add function.injective.field (#6511)\nWe already have defs of this style for all sorts of algebraic constructions, why not one more.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}]}, {"timestamp": 1614767812, "sha": "3309ce27", "message": "refactor(ring_theory/polynomial/chebyshev): move lemmas around (#6510)\nAs discussed in #6501, split up the old file `ring_theory.polynomial.chebyshev.basic`, moving half its contents to `ring_theory.polynomial.chebyshev.defs` and the other half to `ring_theory.polynomial.chebyshev.dickson`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev/defs.lean", "newPath": "src/ring_theory/polynomial/chebyshev.lean", "changes": [["add", "theorem", "chebyshev₁_mul", ["polynomial"]], ["add", "theorem", "mul_chebyshev₁", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/chebyshev/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev/dickson.lean", "newPath": null, "changes": [["del", "theorem", "dickson_add_two", ["polynomial"]], ["del", "theorem", "dickson_of_two_le", ["polynomial"]], ["del", "theorem", "dickson_one", ["polynomial"]], ["del", "theorem", "dickson_two", ["polynomial"]], ["del", "theorem", "dickson_two_zero", ["polynomial"]], ["del", "theorem", "dickson_zero", ["polynomial"]], ["del", "theorem", "map_dickson", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "newPath": "src/ring_theory/polynomial/dickson.lean", "changes": [["del", "theorem", "chebyshev₁_mul", ["polynomial"]], ["add", "theorem", "dickson_add_two", ["polynomial"]], ["add", "theorem", "dickson_of_two_le", ["polynomial"]], ["add", "theorem", "dickson_one", ["polynomial"]], ["add", "theorem", "dickson_two", ["polynomial"]], ["add", "theorem", "dickson_two_zero", ["polynomial"]], ["add", "theorem", "dickson_zero", ["polynomial"]], ["add", "theorem", "map_dickson", ["polynomial"]], ["del", "theorem", "mul_chebyshev₁", ["polynomial"]]]}]}, {"timestamp": 1614756946, "sha": "383dd2bd", "message": "chore(data/equiv): add missing simp lemmas about mk (#6505)\nThis adds missing `mk_coe` lemmas, and new `symm_mk`, `symm_bijective`, and `mk_coe'` lemmas.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_mk", ["alg_equiv"]], ["del", "theorem", "mk_apply", ["alg_equiv"]], ["add", "theorem", "mk_coe'", ["alg_equiv"]], ["add", "theorem", "mk_coe", ["alg_equiv"]], ["add", "theorem", "symm_bijective", ["alg_equiv"]], ["add", "theorem", "symm_mk", ["alg_equiv"]], ["mod", "theorem", "symm_symm", ["alg_equiv"]], ["del", "theorem", "to_fun_apply", ["alg_equiv"]], ["add", "theorem", "to_fun_eq_coe", ["alg_equiv"]], ["add", "theorem", "to_fun_eq_coe", ["alg_hom"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "mk_coe'", ["linear_equiv"]], ["add", "theorem", "mk_coe", ["linear_equiv"]], ["add", "theorem", "symm_bijective", ["linear_equiv"]], ["add", "theorem", "symm_mk", ["linear_equiv"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["del", "theorem", "coe_symm_mk", ["mul_equiv"]], ["add", "theorem", "mk_coe'", ["mul_equiv"]], ["add", "theorem", "mk_coe", ["mul_equiv"]], ["add", "theorem", "symm_bijective", ["mul_equiv"]], ["add", "theorem", "symm_mk", ["mul_equiv"]], ["add", "theorem", "symm_symm", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_mk", ["ring_equiv"]], ["del", "theorem", "coe_symm_mk", ["ring_equiv"]], ["add", "theorem", "mk_coe'", ["ring_equiv"]], ["add", "theorem", "mk_coe", ["ring_equiv"]], ["add", "theorem", "symm_bijective", ["ring_equiv"]], ["add", "theorem", "symm_mk", ["ring_equiv"]]]}]}, {"timestamp": 1614727450, "sha": "22e34370", "message": "feat(algebra/big_operators/basic): lemmas prod_range_add, sum_range_add (#6484)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_range_add", ["finset"]], ["add", "theorem", "sum_range_add", ["finset"]]]}]}, {"timestamp": 1614723931, "sha": "19ed0f8e", "message": "refactor(ring_theory/valuation): valuations in `linear_ordered_comm_monoid_with_zero` (#6500)\nGeneralizes the value group in a `valuation` to a `linear_ordered_comm_monoid_with_zero`", "changes": [{"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "is_equiv_of_map_strict_mono", ["valuation"]], ["mod", "theorem", "is_equiv_of_val_le_one", ["valuation"]], ["mod", "theorem", "ne_zero_iff", ["valuation"]], ["mod", "theorem", "zero_iff", ["valuation"]]]}]}, {"timestamp": 1614713232, "sha": "0c5b5172", "message": "feat(ring_theory/polynomial/chebyshev/basic): multiplication of Chebyshev polynomials (#6501)\nAdd the identity for multiplication of Chebyshev polynomials,\n```lean\n2 * chebyshev₁ R m * chebyshev₁ R (m + k) = chebyshev₁ R (2 * m + k) + chebyshev₁ R k\n```\nUse this to give a direct proof of the identity `chebyshev₁_mul` for composition of Chebyshev polynomials, replacing the current proof using trig functions. This means that the import `import analysis.special_functions.trigonometric` to the Chebyshev file can be removed.", "changes": [{"oldPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "newPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "changes": [["mod", "theorem", "chebyshev₁_mul", ["polynomial"]], ["add", "theorem", "mul_chebyshev₁", ["polynomial"]]]}]}, {"timestamp": 1614713231, "sha": "0c863e98", "message": "refactor(data/set/finite): change type of `set.finite.dependent_image` (#6475)\nThe old lemma combined a statement similar to `set.finite.image` with\n`set.finite.subset`. The new statement is a direct generalization of\n`set.finite.image`.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "dependent_image", ["set", "finite"]]]}]}, {"timestamp": 1614702978, "sha": "c0870115", "message": "refactor(data/set/finite): make `finite` argument of `set.finite.mem_to_finset` explicit (#6508)\nThis way we can use dot notation.", "changes": [{"oldPath": "src/data/finset/preimage.lean", "newPath": "src/data/finset/preimage.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "mem_to_finset", ["set", "finite"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}]}, {"timestamp": 1614698794, "sha": "9f0f05ee", "message": "feat(data/{nat,int}/parity): even_mul_succ_self (#6507)", "changes": [{"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "theorem", "even_mul_succ_self", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "even_mul_succ_self", ["nat"]]]}]}, {"timestamp": 1614673427, "sha": "6b5e48d7", "message": "feat(data/finset/lattice): +2 induction principles for `finset`s (#6502)", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "induction_on_max", ["finset"]], ["add", "theorem", "induction_on_min", ["finset"]]]}]}, {"timestamp": 1614665212, "sha": "572f7274", "message": "chore(algebra/big_operators): use weaker typeclass assumptions (#6503)", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["mod", "theorem", "prod_pos", ["finset"]]]}]}, {"timestamp": 1614658801, "sha": "c69c8a9e", "message": "chore(scripts): update nolints.txt (#6499)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614651767, "sha": "f63069f3", "message": "feat(linear_algebra/basic): simp lemmas about endomorphisms (#6452)\nAlso renames some lemmas:\n* `linear_map.one_app` has been renamed to `linear_map.one_apply`\n* `linear_map.mul_app` has been removed in favour of the existing `linear_map.mul_app`.", "changes": [{"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}, {"oldPath": "src/analysis/calculus/lagrange_multipliers.lean", "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_mul", ["linear_map"]], ["add", "theorem", "coe_one", ["linear_map"]], ["add", "theorem", "coe_pow", ["linear_map"]], ["del", "theorem", "mul_app", ["linear_map"]], ["mod", "theorem", "mul_apply", ["linear_map"]], ["del", "theorem", "one_app", ["linear_map"]], ["add", "theorem", "one_apply", ["linear_map"]], ["add", "theorem", "pow_apply", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": []}]}, {"timestamp": 1614651765, "sha": "5c016137", "message": "feat(analysis/special_functions/integrals): some simple integration lemmas (#6216)\nIntegration of some simple functions, including `sin`, `cos`, `pow`, and `inv`. @ADedecker and I are working on the integrals of some more intricate functions, which we hope to add in a subsequent (series of) PR(s).\nWith this PR, simple integrals are now computable by `norm_num`. Here are some examples:\n```\nimport analysis.special_functions.integrals\nopen real interval_integral\nopen_locale real\nexample : ∫ x in 0..π, sin x = 2 := by norm_num\nexample : ∫ x in 0..π/4, cos x = sqrt 2 / 2 := by simp\nexample : ∫ x:ℝ in 2..4, x^(3:ℕ) = 60 := by norm_num\nexample : ∫ x in 0..2, -exp x = 1 - exp 2 := by simp\nexample : ∫ x:ℝ in (-1)..4, x = 15/2 := by norm_num\nexample : ∫ x:ℝ in 8..11, (1:ℝ) = 3 := by norm_num\nexample : ∫ x:ℝ in 2..3, x⁻¹ = log (3/2) := by norm_num\nexample : ∫ x:ℝ in 0..1, 1 / (1 + x^2) = π/4 := by simp\n```\n`integral_deriv_eq_sub'` courtesy of @gebner.", "changes": [{"oldPath": null, "newPath": "src/analysis/special_functions/integrals.lean", "changes": [["add", "theorem", "integral_cos", []], ["add", "theorem", "integral_exp", []], ["add", "theorem", "integral_id", []], ["add", "theorem", "integral_inv", []], ["add", "theorem", "integral_inv_of_neg", []], ["add", "theorem", "integral_inv_of_pos", []], ["add", "theorem", "integral_inv_one_add_sq", []], ["add", "theorem", "integral_one", []], ["add", "theorem", "integral_one_div", []], ["add", "theorem", "integral_one_div_of_neg", []], ["add", "theorem", "integral_one_div_of_pos", []], ["add", "theorem", "integral_one_div_one_add_sq", []], ["add", "theorem", "integral_pow", []], ["add", "theorem", "integral_sin", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "continuous_on_sin", ["real"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_deriv_eq_sub'", ["interval_integral"]]]}]}, {"timestamp": 1614644691, "sha": "5eb7ebbb", "message": "feat(data/polynomial): lemmas about polynomial derivative (#6433)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["del", "theorem", "pow_comp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "derivative_C_mul", ["polynomial"]], ["add", "theorem", "derivative_cast_nat", ["polynomial"]], ["add", "theorem", "derivative_comp", ["polynomial"]], ["add", "def", "derivative_lhom", ["polynomial"]], ["add", "theorem", "derivative_lhom_coe", ["polynomial"]], ["mod", "theorem", "derivative_sub", ["polynomial"]], ["add", "theorem", "iterate_derivative_C_mul", ["polynomial"]], ["add", "theorem", "iterate_derivative_add", ["polynomial"]], ["add", "theorem", "iterate_derivative_cast_nat_mul", ["polynomial"]], ["add", "theorem", "iterate_derivative_map", ["polynomial"]], ["add", "theorem", "iterate_derivative_neg", ["polynomial"]], ["add", "theorem", "iterate_derivative_smul", ["polynomial"]], ["add", "theorem", "iterate_derivative_sub", ["polynomial"]], ["add", "theorem", "iterate_derivative_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "cast_int_comp", ["polynomial"]], ["add", "theorem", "cast_nat_comp", ["polynomial"]], ["add", "theorem", "monomial_comp", ["polynomial"]], ["add", "theorem", "pow_comp", ["polynomial"]]]}]}, {"timestamp": 1614634303, "sha": "03344754", "message": "ci(scripts/detect_errors): try to show info messages in a way github understands (#6493)\nI don't actually know if this works, but I know that the previous code was not working:\nhttps://github.com/leanprover-community/mathlib/pull/6485/checks?check_run_id=2006396264#step:7:7", "changes": [{"oldPath": "scripts/detect_errors.py", "newPath": "scripts/detect_errors.py", "changes": []}]}, {"timestamp": 1614634302, "sha": "0a5f69cc", "message": "feat(src/order/basic): show injectivity of order conversions, and tag lemmas with ext (#6490)\nStating these as `function.injective` provides slightly more API, especially since before only the composition was proven as injective.\nFor convenience, this leaves behind `preorder.ext`, `partial_order.ext`, and `linear_order.ext`, although these are now provable with trivial applications of `ext`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "to_partial_order_injective", ["linear_order"]], ["add", "theorem", "to_preorder_injective", ["partial_order"]], ["add", "theorem", "to_has_le_injective", ["preorder"]]]}]}, {"timestamp": 1614634301, "sha": "cc579154", "message": "chore(data/equiv/basic): add simp lemmas about subtype_equiv (#6479)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "cast_refl", ["equiv"]], ["add", "theorem", "subtype_equiv_refl", ["equiv"]], ["add", "theorem", "subtype_equiv_symm", ["equiv"]], ["del", "theorem", "subtype_equiv_symm_apply", ["equiv"]], ["add", "theorem", "subtype_equiv_trans", ["equiv"]]]}]}, {"timestamp": 1614634300, "sha": "354fda08", "message": "feat(linear_algebra/finsupp): add mem_span_set (#6457)\nFrom the doc-string:\nIf `m ∈ M` is contained in the `R`-submodule spanned by a set `s ⊆ M`, then we can write\n`m` as a finite `R`-linear combination of elements of `s`.\nThe implementation uses `finsupp.sum`.\nThe initial proof was a substantial simplification of mine, due to Kevin Buzzard. The final one is due to Eric Wieser.\nZulip discussion for the proof:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/submodule.2Espan.20as_sum\nZulip discussion for the universe issue:\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/universe.20issue.20with.20.60Type*.60", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "mem_span_set", []]]}]}, {"timestamp": 1614634299, "sha": "e0a4dd88", "message": "feat(ring_theory/finiteness): improve API for finite presentation (#6382)\nImprove the API for finitely presented morphism. I changed the name from `algebra.finitely_presented` to `algebra.finite_presentation` that seems more coherent with the other names.\nComing soon: transitivity of finite presentation.", "changes": [{"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "comp_surjective", ["alg_hom", "finite_presentation"]], ["add", "theorem", "id", ["alg_hom", "finite_presentation"]], ["add", "theorem", "of_finite_type", ["alg_hom", "finite_presentation"]], ["add", "theorem", "of_surjective", ["alg_hom", "finite_presentation"]], ["add", "def", "finite_presentation", ["alg_hom"]], ["add", "theorem", "of_finite_presentation", ["alg_hom", "finite_type"]], ["add", "theorem", "equiv", ["algebra", "finite_presentation"]], ["add", "theorem", "iff_quotient_mv_polynomial'", ["algebra", "finite_presentation"]], ["add", "theorem", "mv_polynomial", ["algebra", "finite_presentation"]], ["add", "theorem", "of_finite_type", ["algebra", "finite_presentation"]], ["add", "theorem", "of_surjective", ["algebra", "finite_presentation"]], ["add", "theorem", "quotient", ["algebra", "finite_presentation"]], ["add", "theorem", "self", ["algebra", "finite_presentation"]], ["add", "def", "finite_presentation", ["algebra"]], ["add", "theorem", "of_finite_presentation", ["algebra", "finite_type"]], ["del", "theorem", "of_finitely_presented", ["algebra", "finite_type"]], ["del", "theorem", "equiv", ["algebra", "finitely_presented"]], ["del", "theorem", "mv_polynomial", ["algebra", "finitely_presented"]], ["del", "theorem", "of_surjective", ["algebra", "finitely_presented"]], ["del", "theorem", "quotient", ["algebra", "finitely_presented"]], ["del", "theorem", "self", ["algebra", "finitely_presented"]], ["del", "def", "finitely_presented", ["algebra"]], ["add", "theorem", "comp_surjective", ["ring_hom", "finite_presentation"]], ["add", "theorem", "id", ["ring_hom", "finite_presentation"]], ["add", "theorem", "of_finite_type", ["ring_hom", "finite_presentation"]], ["add", "theorem", "of_surjective", ["ring_hom", "finite_presentation"]], ["add", "def", "finite_presentation", ["ring_hom"]], ["add", "theorem", "of_finite_presentation", ["ring_hom", "finite_type"]]]}]}, {"timestamp": 1614625091, "sha": "0faa7880", "message": "feat(ring_theory/hahn_series): introduce ring of Hahn series (#6237)\nDefines Hahn series\nProvides basic algebraic structure on Hahn series, up to `comm_ring`.", "changes": [{"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["add", "theorem", "support_smul_subset", ["function"]], ["add", "theorem", "support_single", ["pi"]], ["add", "theorem", "support_single_of_ne", ["pi"]], ["add", "theorem", "support_single_subset", ["pi"]], ["add", "theorem", "support_single_zero", ["pi"]]]}, {"oldPath": null, "newPath": "src/ring_theory/hahn_series.lean", "changes": [["add", "theorem", "add_coeff'", ["hahn_series"]], ["add", "theorem", "add_coeff", ["hahn_series"]], ["add", "theorem", "is_wf_support", ["hahn_series"]], ["add", "theorem", "mem_support", ["hahn_series"]], ["add", "theorem", "mul_coeff", ["hahn_series"]], ["add", "theorem", "mul_coeff_left'", ["hahn_series"]], ["add", "theorem", "mul_coeff_right'", ["hahn_series"]], ["add", "theorem", "mul_single_zero_coeff", ["hahn_series"]], ["add", "theorem", "neg_coeff'", ["hahn_series"]], ["add", "theorem", "neg_coeff", ["hahn_series"]], ["add", "theorem", "one_coeff", ["hahn_series"]], ["add", "def", "single", ["hahn_series"]], ["add", "theorem", "single_coeff", ["hahn_series"]], ["add", "theorem", "single_coeff_of_ne", ["hahn_series"]], ["add", "theorem", "single_coeff_same", ["hahn_series"]], ["add", "theorem", "single_eq_zero", ["hahn_series"]], ["add", "theorem", "single_zero_mul_eq_smul", ["hahn_series"]], ["add", "theorem", "single_zero_one", ["hahn_series"]], ["add", "theorem", "smul_coeff", ["hahn_series"]], ["add", "theorem", "sub_coeff'", ["hahn_series"]], ["add", "theorem", "sub_coeff", ["hahn_series"]], ["add", "def", "support", ["hahn_series"]], ["add", "theorem", "support_mul_subset_add_support", ["hahn_series"]], ["add", "theorem", "support_single_of_ne", ["hahn_series"]], ["add", "theorem", "support_zero", ["hahn_series"]], ["add", "theorem", "zero_coeff", ["hahn_series"]], ["add", "structure", "hahn_series", []]]}]}, {"timestamp": 1614613236, "sha": "e77f071c", "message": "feat(linear_algebra/{clifford,exterior,tensor}_algebra): add induction principles (#6416)\nThese are closely derived from the induction principle for the free algebra.\nI can't think of a good way to deduplicate them, so for now I've added comments making it clear to the reader that the code is largely copied.", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra.lean", "newPath": "src/linear_algebra/clifford_algebra.lean", "changes": [["add", "theorem", "induction", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["add", "theorem", "induction", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["add", "theorem", "induction", ["tensor_algebra"]]]}]}, {"timestamp": 1614594911, "sha": "aff6bd1b", "message": "fix(group_action/defs): make mul_action.regular an instance (#6241)\nThis is essentially already an instance via `semiring.to_semimodule.to_distrib_mul_action.to_mul_action`, but with an unecessary `semiring R` constraint.\nI can't remember the details, but I've run into multiple instance resolution issues in the past that were resolved with `local attribute [instance] mul_action.regular`.\nThis also renames the instance to `monoid.to_mul_action` for consistency with `semiring.to_semimodule`.", "changes": [{"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "smul_eq_mul", []]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": [["del", "def", "regular", ["mul_action"]], ["add", "theorem", "smul_eq_mul", []]]}]}, {"timestamp": 1614573112, "sha": "6ac19b46", "message": "doc(algebra/ring/basic): change pullback and injective to pushforward and surjective (#6487)\nZulip reference:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/pullback.20vs.20pushforward", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}]}, {"timestamp": 1614561266, "sha": "9ad469d8", "message": "chore(scripts): update nolints.txt (#6486)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614552898, "sha": "13f30e53", "message": "feat(geometry/manifold): `ext_chart_at` is smooth on its source (#6473)", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "congr'", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "theorem", "ext_chart_at_coe", []], ["mod", "theorem", "ext_chart_at_coe_symm", []], ["add", "theorem", "ext_chart_at_continuous_at'", []], ["mod", "theorem", "ext_chart_at_continuous_at", []], ["add", "theorem", "ext_chart_at_map_nhds'", []], ["add", "theorem", "ext_chart_at_map_nhds", []], ["add", "theorem", "ext_chart_at_source_mem_nhds'", []], ["add", "theorem", "ext_chart_at_target_subset_range", []], ["add", "theorem", "ext_chart_continuous_at_symm''", []], ["add", "theorem", "ext_chart_continuous_on_symm", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "times_cont_mdiff_at_ext_chart_at'", []], ["add", "theorem", "times_cont_mdiff_at_ext_chart_at", []], ["add", "theorem", "times_cont_mdiff_within_at_iff'", []]]}]}, {"timestamp": 1614552897, "sha": "83bc6634", "message": "feat(category_theory/monoidal): skeleton of a monoidal category is a monoid (#6444)", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/skeleton.lean", "changes": [["add", "def", "comm_monoid_of_skeletal_braided", ["category_theory"]], ["add", "def", "monoid_of_skeletal_monoidal", ["category_theory"]]]}]}, {"timestamp": 1614552896, "sha": "1e45472a", "message": "feat(analysis/calculus): Lagrange multipliers (#6431)", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "to_add_monoid_hom_coe", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/lagrange_multipliers.lean", "changes": [["add", "theorem", "exists_linear_map_of_has_strict_fderiv_at", ["is_local_extr_on"]], ["add", "theorem", "exists_multipliers_of_has_strict_fderiv_at", ["is_local_extr_on"]], ["add", "theorem", "linear_dependent_of_has_strict_fderiv_at", ["is_local_extr_on"]], ["add", "theorem", "range_ne_top_of_has_strict_fderiv_at", ["is_local_extr_on"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_option", ["fintype"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "pi_ring", ["linear_equiv"]], ["add", "theorem", "pi_ring_apply", ["linear_equiv"]], ["add", "theorem", "pi_ring_symm_apply", ["linear_equiv"]]]}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["add", "theorem", "tendsto_principal_Iic", ["is_max_filter"]], ["add", "theorem", "tendsto_principal_Ici", ["is_min_filter"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_sum'", ["continuous_linear_map"]], ["add", "theorem", "coe_sum", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}]}, {"timestamp": 1614545780, "sha": "18804b20", "message": "chore(category/equivalence): remove functor.fun_inv_id (#6450)\n`F.fun_inv_id` was just a confusing alternative way to write `F.as_equivalence.unit_iso.symm`, and meant that many lemmas couldn't fire.\nDeletes the definitions `functor.fun_inv_id` and `functor.inv_hom_id`, and the lemmas `is_equivalence.functor_unit_comp` and `is_equivalence.inv_fun_id_inv_comp`.", "changes": [{"oldPath": "src/category_theory/adjunction/lifting.lean", "newPath": "src/category_theory/adjunction/lifting.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["del", "def", "fun_inv_id", ["category_theory", "functor"]], ["del", "def", "inv_fun_id", ["category_theory", "functor"]], ["del", "theorem", "functor_unit_comp", ["category_theory", "is_equivalence"]], ["del", "theorem", "inv_fun_id_inv_comp", ["category_theory", "is_equivalence"]]]}]}, {"timestamp": 1614545779, "sha": "ac3c4787", "message": "feat(archive/100-theorems-list/9_area_of_a_circle): area of a disc (#6374)\nFreek № 9: The area of a disc with radius _r_ is _πr²_.\nAlso included are an `of_le` version of [FTC-2 for the open set](https://leanprover-community.github.io/mathlib_docs/find/interval_integral.integral_eq_sub_of_has_deriv_at') and the definition `nnreal.pi`.\nCo-authored by @asouther4 and @jamesa9283.", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": null, "newPath": "archive/100-theorems-list/9_area_of_a_circle.lean", "changes": [["add", "theorem", "area_disc", []], ["add", "def", "disc", []], ["add", "theorem", "disc_eq_region_between", []], ["add", "theorem", "measurable_set_disc", []]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "coe_real_pi", ["nnreal"]], ["add", "theorem", "pi_ne_zero", ["nnreal"]], ["add", "theorem", "pi_pos", ["nnreal"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_eq_sub_of_has_deriv_at'_of_le", ["interval_integral"]]]}]}, {"timestamp": 1614534043, "sha": "b1818660", "message": "feat(data/set): more lemmas (#6474)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_option", ["set"]], ["add", "theorem", "finite", ["set", "subsingleton"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_const", ["set"]], ["add", "theorem", "Inter_option", ["set"]], ["mod", "theorem", "Union_const", ["set"]], ["add", "theorem", "Union_option", ["set"]], ["add", "theorem", "disjoint_Union_left", ["set"]], ["add", "theorem", "disjoint_Union_right", ["set"]]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "disjoint_supr_iff", []], ["add", "theorem", "inf_supr_eq", []], ["add", "theorem", "infi_sup_eq", []], ["add", "theorem", "sup_infi_eq", []], ["add", "theorem", "supr_disjoint_iff", []], ["add", "theorem", "supr_inf_eq", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_option", []], ["add", "theorem", "supr_option", []]]}]}, {"timestamp": 1614509388, "sha": "ef5c1d50", "message": "feat(analysis/special_functions/pow): smoothness of `complex.cpow` (#6447)\n* `x ^ y` is smooth in both variables at `(x, y)`, if `0 < re x` or\n `im x ≠ 0`;\n* `x ^ y` is smooth in `y` if `x ≠ 0` or `y ≠ 0`.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "cpow_def_of_ne_zero", ["complex"]], ["add", "theorem", "cpow_sub", ["complex"]], ["add", "theorem", "has_fderiv_at_cpow", ["complex"]], ["add", "theorem", "has_strict_deriv_at_const_cpow", ["complex"]], ["add", "theorem", "has_strict_deriv_at_cpow_const", ["complex"]], ["add", "theorem", "has_strict_fderiv_at_cpow", ["complex"]], ["add", "theorem", "const_cpow", ["continuous"]], ["add", "theorem", "cpow", ["continuous"]], ["add", "theorem", "const_cpow", ["continuous_at"]], ["add", "theorem", "cpow", ["continuous_at"]], ["add", "theorem", "const_cpow", ["continuous_on"]], ["add", "theorem", "cpow", ["continuous_on"]], ["add", "theorem", "const_cpow", ["continuous_within_at"]], ["add", "theorem", "cpow", ["continuous_within_at"]], ["add", "theorem", "const_cpow", ["differentiable_at"]], ["add", "theorem", "cpow", ["differentiable_at"]], ["add", "theorem", "const_cpow", ["differentiable_within_at"]], ["add", "theorem", "cpow", ["differentiable_within_at"]], ["add", "theorem", "const_cpow", ["filter", "tendsto"]], ["add", "theorem", "cpow", ["filter", "tendsto"]], ["add", "theorem", "const_cpow", ["has_deriv_at"]], ["add", "theorem", "cpow", ["has_deriv_at"]], ["add", "theorem", "cpow_const", ["has_deriv_at"]], ["add", "theorem", "const_cpow", ["has_deriv_within_at"]], ["add", "theorem", "cpow", ["has_deriv_within_at"]], ["add", "theorem", "cpow_const", ["has_deriv_within_at"]], ["add", "theorem", "const_cpow", ["has_fderiv_at"]], ["add", "theorem", "cpow", ["has_fderiv_at"]], ["add", "theorem", "const_cpow", ["has_fderiv_within_at"]], ["add", "theorem", "cpow", ["has_fderiv_within_at"]], ["add", "theorem", "const_cpow", ["has_strict_deriv_at"]], ["add", "theorem", "cpow", ["has_strict_deriv_at"]], ["add", "theorem", "cpow_const", ["has_strict_deriv_at"]], ["add", "theorem", "const_cpow", ["has_strict_fderiv_at"]], ["add", "theorem", "cpow", ["has_strict_fderiv_at"]], ["mod", "theorem", "cpow", ["measurable"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "log_im_le_pi", ["complex"]], ["add", "theorem", "neg_pi_lt_log_im", ["complex"]], ["add", "theorem", "cos_sub_pi", ["real"]]]}]}, {"timestamp": 1614498615, "sha": "abb3121f", "message": "chore(*): more line lengths (#6472)", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "theorem", "is_bounded_linear_map_right", ["is_bounded_bilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "bilinear_comp", ["continuous_linear_map"]], ["mod", "theorem", "to_span_singleton_homothety", ["continuous_linear_map"]], ["mod", "theorem", "mk_continuous_of_exists_bound_coe", ["linear_map"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": [["mod", "theorem", "refl", ["turing", "blank_extends"]]]}, {"oldPath": "src/control/basic.lean", "newPath": "src/control/basic.lean", "changes": []}, {"oldPath": "src/control/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/control/equiv_functor.lean", "newPath": "src/control/equiv_functor.lean", "changes": []}, {"oldPath": "src/control/fix.lean", "newPath": "src/control/fix.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": [["mod", "theorem", "uncurry_curry_continuous", ["pi"]]]}, {"oldPath": "src/control/monad/basic.lean", "newPath": "src/control/monad/basic.lean", "changes": [["mod", "theorem", "map_eq_bind_pure_comp", []]]}, {"oldPath": "src/control/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": [["mod", "def", "call_cc", ["except_t"]]]}, {"oldPath": "src/control/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/data/bitvec/core.lean", "newPath": "src/data/bitvec/core.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "of_real_smul", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/finset/gcd.lean", "newPath": "src/data/finset/gcd.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["mod", "theorem", "indicator_finset_sum", ["set"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["mod", "theorem", "nodup_add_of_nodup", ["multiset"]], ["mod", "theorem", "nodup_map", ["multiset"]], ["mod", "theorem", "nodup_union", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["mod", "theorem", "eval₂_sub", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/counit.lean", "newPath": "src/data/mv_polynomial/counit.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/invertible.lean", "newPath": "src/data/mv_polynomial/invertible.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["mod", "theorem", "degrees_add_of_disjoint", ["mv_polynomial"]], ["mod", "theorem", "mem_support_not_mem_vars_zero", ["mv_polynomial"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "to_with_top_coe'", ["enat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["mod", "theorem", "coprime_div_left", ["nat", "coprime"]], ["mod", "theorem", "coprime_div_right", ["nat", "coprime"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["mod", "theorem", "one_le_padic_val_nat_of_dvd", []], ["mod", "theorem", "padic_val_nat_primes", []], ["mod", "theorem", "padic_val_rat_of_nat", []]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/W.lean", "newPath": "src/data/pfunctor/multivariate/W.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": [["mod", "theorem", "cases_on_mk'", ["pfunctor", "M"]], ["mod", "theorem", "default_consistent", ["pfunctor", "M"]], ["mod", "theorem", "isubtree_cons", ["pfunctor", "M"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["mod", "theorem", "nat_degree_eq_zero_of_derivative_eq_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": [["mod", "theorem", "integral_normalization_coeff_ne_nat_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": [["mod", "theorem", "iterated_deriv_add", ["polynomial"]], ["mod", "theorem", "iterated_deriv_sub", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "nat_degree_le_of_dvd", ["polynomial"]]]}, {"oldPath": "src/data/qpf/multivariate/basic.lean", "newPath": "src/data/qpf/multivariate/basic.lean", "changes": [["mod", "theorem", "supp_eq", ["mvqpf"]]]}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": [["mod", "def", "corec'", ["mvqpf", "cofix"]]]}, {"oldPath": "src/data/qpf/multivariate/constructions/fix.lean", "newPath": "src/data/qpf/multivariate/constructions/fix.lean", "changes": [["mod", "def", "drec", ["mvqpf", "fix"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/sqrt.lean", "newPath": "src/data/rat/sqrt.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "bUnion", ["set", "countable"]], ["mod", "theorem", "union", ["set", "countable"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "comp", ["set", "left_inv_on"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "sInter_insert", ["set"]], ["mod", "theorem", "sUnion_insert", ["set"]]]}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["mod", "theorem", "lex_acc_inr", ["sum"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["mod", "theorem", "remove_nth_insert_nth", ["vector"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}]}, {"timestamp": 1614488292, "sha": "f153a85a", "message": "chore(category_theory/*): fix long lines (#6471)", "changes": [{"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["mod", "def", "functoriality_unit", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/unbundled_hom.lean", "newPath": "src/category_theory/concrete_category/unbundled_hom.lean", "changes": []}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/functorial.lean", "newPath": "src/category_theory/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["mod", "theorem", "comap_eq_symm", ["category_theory", "graded_object"]]]}, {"oldPath": "src/category_theory/limits/cofinal.lean", "newPath": "src/category_theory/limits/cofinal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["mod", "def", "evaluate_combined_cocones", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/pi.lean", "newPath": "src/category_theory/limits/pi.lean", "changes": [["mod", "def", "cocone_of_cocone_eval_is_colimit", ["category_theory", "pi"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": [["mod", "theorem", "has_finite_coproducts_of_has_finite_colimits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["mod", "def", "regular_of_is_pushout_fst_of_regular", ["category_theory"]], ["mod", "def", "regular_of_is_pushout_snd_of_regular", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["mod", "theorem", "pi_lift_π_apply", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["mod", "def", "wide_cospan", ["category_theory", "limits", "wide_pullback_shape"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["mod", "theorem", "is_limit_equiv_sections_apply", ["category_theory", "limits", "types"]], ["mod", "theorem", "is_limit_equiv_sections_symm_apply", ["category_theory", "limits", "types"]], ["mod", "theorem", "π_mk", ["category_theory", "limits", "types", "limit"]]]}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["mod", "theorem", "has_limit_of_comp_forget_has_limit", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monoidal/CommMon_.lean", "newPath": "src/category_theory/monoidal/CommMon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functorial.lean", "newPath": "src/category_theory/monoidal/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/functor_category.lean", "newPath": "src/category_theory/monoidal/internal/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/natural_transformation.lean", "newPath": "src/category_theory/monoidal/natural_transformation.lean", "changes": [["mod", "theorem", "hom_app", ["category_theory", "monoidal_nat_iso", "of_components"]], ["mod", "theorem", "inv_app", ["category_theory", "monoidal_nat_iso", "of_components"]]]}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["mod", "def", "monoidal_of_has_finite_coproducts", ["category_theory"]], ["mod", "def", "monoidal_of_has_finite_products", ["category_theory"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["mod", "def", "iso_mk", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/sums/associator.lean", "newPath": "src/category_theory/sums/associator.lean", "changes": [["mod", "theorem", "inverse_associator_obj_inl", ["category_theory", "sum"]], ["mod", "theorem", "inverse_associator_obj_inr_inl", ["category_theory", "sum"]], ["mod", "theorem", "inverse_associator_obj_inr_inr", ["category_theory", "sum"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}]}, {"timestamp": 1614488291, "sha": "c7a2d670", "message": "refactor(analysis/calculus/specific_functions): add params to `smooth_bump_function` (#6467)\nIn the construction of a partition of unity we need a smooth bump\nfunction that vanishes outside of `ball x R` and equals one on\n`closed_ball x r` with arbitrary `0 < r < R`.", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["mod", "theorem", "eventually_eq_one", ["smooth_bump_function"]], ["add", "theorem", "eventually_eq_one_of_mem_ball", ["smooth_bump_function"]], ["del", "theorem", "eventually_eq_one_of_norm_lt_one", ["smooth_bump_function"]], ["mod", "theorem", "le_one", ["smooth_bump_function"]], ["add", "theorem", "lt_one_of_lt_dist", ["smooth_bump_function"]], ["del", "theorem", "lt_one_of_one_lt_norm", ["smooth_bump_function"]], ["mod", "theorem", "nonneg", ["smooth_bump_function"]], ["add", "theorem", "one_of_mem_closed_ball", ["smooth_bump_function"]], ["del", "theorem", "one_of_norm_le_one", ["smooth_bump_function"]], ["add", "theorem", "pos_of_mem_ball", ["smooth_bump_function"]], ["del", "theorem", "pos_of_norm_lt_two", ["smooth_bump_function"]], ["mod", "theorem", "support_eq", ["smooth_bump_function"]], ["add", "theorem", "zero_of_le_dist", ["smooth_bump_function"]], ["del", "theorem", "zero_of_two_le_norm", ["smooth_bump_function"]], ["mod", "def", "smooth_bump_function", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "map_nhds_eq", ["continuous_linear_equiv"]], ["add", "theorem", "symm_map_nhds_eq", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "symm_map_nhds_eq", ["homeomorph"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1614488290, "sha": "cc3e2c77", "message": "feat(linear_algebra/basic): f x ∈ submodule.span R (f '' s) (#6453)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "apply_mem_span_image_of_mem_span", ["submodule"]], ["add", "theorem", "not_mem_span_of_apply_not_mem_span_image", ["submodule"]]]}]}, {"timestamp": 1614477522, "sha": "ee1947d7", "message": "chore(scripts): update nolints.txt (#6468)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614477522, "sha": "5b18369a", "message": "feat(ring_theory/power_series): coeff multiplication lemmas (#6462)\nSome lemmas used in combinatorics, from #4259.", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "coeff_mul_of_lt_order", ["power_series"]], ["add", "theorem", "coeff_mul_one_sub_of_lt_order", ["power_series"]], ["add", "theorem", "coeff_mul_prod_one_sub_of_lt_order", ["power_series"]]]}]}, {"timestamp": 1614477521, "sha": "11f18015", "message": "feat(linear_algebra/quadratic_form): add associated_eq_self_apply (#6458)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "associated_eq_self_apply", ["quadratic_form"]]]}]}, {"timestamp": 1614477520, "sha": "9668bdd5", "message": "feat(algebra/category/Mon/adjunctions): adjoin_unit adjunction from Semigroup (#6440)\nThis PR provides the adjoin_unit-forgetful adjunction between `Semigroup` and `Mon` and additionally the second to last module doc in algebra, namely `algebra.group.with_one`.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Mon/adjunctions.lean", "changes": [["add", "def", "adjoin_one", []], ["add", "def", "adjoin_one_adj", []]]}, {"oldPath": "src/algebra/category/Semigroup/basic.lean", "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "theorem", "map_comp", ["with_one"]], ["add", "theorem", "map_id", ["with_one"]]]}]}, {"timestamp": 1614468066, "sha": "09d572d7", "message": "feat(algebra/big_operators): additive versions of multiset lemmas (#6463)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "sum_multiset_count", ["finset"]], ["add", "theorem", "sum_multiset_map_count", ["finset"]]]}]}, {"timestamp": 1614453676, "sha": "aa0b274b", "message": "chore(*): split lines and move module doc `measure_theory/category/Meas` (#6459)", "changes": [{"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["mod", "theorem", "card_image_polynomial_eval", ["finite_field"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "factor_dvd_of_nat_degree_ne_zero", ["polynomial"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1614453675, "sha": "d1b7a676", "message": "feat(ring_theory/power_series/basic): coeff_zero_X_mul (#6445)", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "coeff_zero_X_mul", ["mv_power_series"]], ["add", "theorem", "coeff_zero_X_mul", ["power_series"]]]}]}, {"timestamp": 1614441978, "sha": "a19af600", "message": "feat(data/option): add `option.forall` and `option.exists` (#6419)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}]}, {"timestamp": 1614430692, "sha": "4b02853b", "message": "feat(tactic/apply_fun): work on the goal as well (#6439)\nExtend the functionality of `apply_fun`, to \"apply\" functions to inequalities in the goal, as well.\n```\nApply a function to an equality or inequality in either a local hypothesis or the goal.\n* If we have `h : a = b`, then `apply_fun f at h` will replace this with `h : f a = f b`.\n* If we have `h : a ≤ b`, then `apply_fun f at h` will replace this with `h : f a ≤ f b`,\n and create a subsidiary goal `monotone f`.\n `apply_fun` will automatically attempt to discharge this subsidiary goal using `mono`,\n or an explicit solution can be provided with `apply_fun f at h using P`, where `P : monotone f`.\n* If the goal is `a ≠ b`, `apply_fun f` will replace this with `f a ≠ f b`.\n* If the goal is `a = b`, `apply_fun f` will replace this with `f a = f b`,\n and create a subsidiary goal `injective f`.\n `apply_fun` will automatically attempt to discharge this subsidiary goal using local hypotheses,\n or if `f` is actually an `equiv`,\n or an explicit solution can be provided with `apply_fun f using P`, where `P : injective f`.\n* If the goal is `a ≤ b` (or similarly for `a < b`), and `f` is actually an `order_iso`,\n `apply_fun f` will replace the goal with `f a ≤ f b`.\n If `f` is anything else (e.g. just a function, or an `equiv`), `apply_fun` will fail.\n```", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ne_of_apply_ne", []]]}, {"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "test/apply_fun.lean", "newPath": "test/apply_fun.lean", "changes": []}]}, {"timestamp": 1614417193, "sha": "7256361a", "message": "chore(data/nat/choose): fix namespace of theorems (#6451)", "changes": [{"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": [["add", "theorem", "choose_eq_factorial_div_factorial'", ["nat"]], ["add", "theorem", "choose_mul", ["nat"]], ["del", "theorem", "choose_eq_factorial_div_factorial'", ["nat", "prime"]], ["del", "theorem", "choose_mul", ["nat", "prime"]]]}]}, {"timestamp": 1614417192, "sha": "5f68d0e5", "message": "feat(ring_theory/power_series/basic): rescale_inj (#6446)\nAuthored-by Ashvni Narayanan", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "rescale_injective", ["power_series"]]]}]}, {"timestamp": 1614417191, "sha": "f33418a9", "message": "feat(algebra/homology/chain_complex): pushforward of complex w.r.t. additive functor (#6403)\nThis PR adds a definition for the pushforward of a homological complex with respect to an additive functor.", "changes": [{"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": "src/algebra/homology/chain_complex.lean", "changes": [["add", "def", "map_homological_complex", ["category_theory", "functor"]], ["add", "def", "pushforward_homological_complex", ["category_theory", "functor"]]]}]}, {"timestamp": 1614406812, "sha": "7ce01bbc", "message": "feat(category_theory/skeletal): skeleton of a general category (#6443)\nConstruct the skeleton of a category using choice.", "changes": [{"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": [["add", "def", "skeleton", ["category_theory"]]]}]}, {"timestamp": 1614388538, "sha": "1af882b4", "message": "chore(scripts): update nolints.txt (#6449)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614382703, "sha": "d38b5a50", "message": "feat(category_theory/monoidal): construct the monoidal inverse to a functor (#6442)\nI worked out what was mentioned here: https://github.com/leanprover-community/mathlib/blob/20b49fbd453fc42c91c36ee30ecb512d70f48172/src/category_theory/monoidal/transport.lean#L283-L287\nexcept for uniqueness, not sure how important that is", "changes": [{"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["add", "def", "monoidal_adjoint", ["category_theory"]], ["add", "def", "monoidal_inverse", ["category_theory"]], ["add", "theorem", "monoidal_inverse_to_functor", ["category_theory"]]]}]}, {"timestamp": 1614374944, "sha": "a225e12c", "message": "feat(linear_algebra/basic): add is_scalar_tower instance for hom type (#6331)\nThis instance tells Lean that if R is an S-algebra with R and S both commutative semirings, then the R-action on Hom_R(M,N) is compatible with the S-action.\n`linear_map.is_scalar_tower_extend_scalars` is just a special case of this new instance with the `smul_comm_class` arguments populated with `is_scalar_tower.to_smul_comm_class` and `smul_comm_class_self`, so has been removed.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1614371563, "sha": "407615e0", "message": "feat(algebra/lie/solvable): images of solvable Lie algebras are solvable (#6413)\nSummary of changes:\nNew definition:\n - `lie_hom.range_restrict`\nNew lemmas:\n - `lie_ideal.derived_series_map_eq`\n - `function.surjective.lie_algebra_is_solvable`\n - `lie_algebra.solvable_iff_equiv_solvable`\n - `lie_hom.is_solvable_range`\n - `lie_hom.mem_range_self`\n - `lie_hom.range_restrict_apply`\n - `lie_hom.surjective_range_restrict`\nRenamed lemmas:\n - `lie_algebra.is_solvable_of_injective` → `function.injective.lie_algebra_is_solvable`\n - `lie_ideal.derived_series_map_le_derived_series` → `lie_ideal.derived_series_map_le`", "changes": [{"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": [["add", "theorem", "lie_algebra_is_solvable", ["function", "injective"]], ["add", "theorem", "lie_algebra_is_solvable", ["function", "surjective"]], ["del", "theorem", "is_solvable_of_injective", ["lie_algebra"]], ["add", "theorem", "solvable_iff_equiv_solvable", ["lie_algebra"]], ["add", "theorem", "is_solvable_range", ["lie_hom"]], ["add", "theorem", "derived_series_map_eq", ["lie_ideal"]], ["add", "theorem", "derived_series_map_le", ["lie_ideal"]], ["del", "theorem", "derived_series_map_le_derived_series", ["lie_ideal"]]]}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "mem_range_self", ["lie_hom"]], ["add", "def", "range_restrict", ["lie_hom"]], ["add", "theorem", "range_restrict_apply", ["lie_hom"]], ["add", "theorem", "surjective_range_restrict", ["lie_hom"]]]}]}, {"timestamp": 1614368864, "sha": "ddefd965", "message": "feat(category_theory/subobject): kernels and images as subobjects (#6301)\nFurther work on subobjects, building on the initial definition in #6278.\n* Add noncomputable functions to obtain representatives of subobjects.\n* Realise kernel/equalizer/image as subobjects.", "changes": [{"oldPath": "src/category_theory/subobject.lean", "newPath": "src/category_theory/subobject.lean", "changes": [["add", "def", "equalizer_subobject", ["category_theory", "limits"]], ["add", "theorem", "equalizer_subobject_arrow'", ["category_theory", "limits"]], ["add", "theorem", "equalizer_subobject_arrow", ["category_theory", "limits"]], ["add", "theorem", "equalizer_subobject_arrow_comp", ["category_theory", "limits"]], ["add", "def", "equalizer_subobject_iso", ["category_theory", "limits"]], ["add", "def", "factor_thru_image_subobject", ["category_theory", "limits"]], ["add", "def", "image_subobject", ["category_theory", "limits"]], ["add", "theorem", "image_subobject_arrow'", ["category_theory", "limits"]], ["add", "theorem", "image_subobject_arrow", ["category_theory", "limits"]], ["add", "theorem", "image_subobject_arrow_comp", ["category_theory", "limits"]], ["add", "def", "image_subobject_iso", ["category_theory", "limits"]], ["add", "def", "kernel_subobject", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_arrow'", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_arrow", ["category_theory", "limits"]], ["add", "theorem", "kernel_subobject_arrow_comp", ["category_theory", "limits"]], ["add", "def", "kernel_subobject_iso", ["category_theory", "limits"]], ["mod", "theorem", "bot_left", ["category_theory", "mono_over"]], ["mod", "theorem", "forget_obj_left", ["category_theory", "mono_over"]], ["add", "def", "image_mono_over", ["category_theory", "mono_over"]], ["mod", "theorem", "top_left", ["category_theory", "mono_over"]], ["add", "def", "arrow", ["category_theory", "subobject"]], ["add", "def", "representative", ["category_theory", "subobject"]], ["add", "def", "representative_iso", ["category_theory", "subobject"]], ["add", "def", "underlying", ["category_theory", "subobject"]], ["add", "theorem", "underlying_arrow", ["category_theory", "subobject"]], ["add", "theorem", "underlying_as_coe", ["category_theory", "subobject"]], ["add", "def", "underlying_iso", ["category_theory", "subobject"]]]}]}, {"timestamp": 1614354995, "sha": "11e1cc36", "message": "feat(data/equiv/basic): Add `fin_succ_above_equiv` (#5145)", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "def", "fin_succ_equiv'", []], ["add", "theorem", "fin_succ_equiv'_above", []], ["add", "theorem", "fin_succ_equiv'_at", []], ["add", "theorem", "fin_succ_equiv'_below", []], ["add", "theorem", "fin_succ_equiv'_symm_none", []], ["add", "theorem", "fin_succ_equiv'_zero", []], ["mod", "def", "fin_succ_equiv", []], ["add", "theorem", "fin_succ_equiv_symm'_coe_above", []], ["add", "theorem", "fin_succ_equiv_symm'_coe_below", []], ["add", "theorem", "fin_succ_equiv_symm'_some_above", []], ["add", "theorem", "fin_succ_equiv_symm'_some_below", []], ["add", "theorem", "fin_succ_equiv_symm_coe", []]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "cast_succ_pos", ["fin"]], ["add", "theorem", "pred_above_above", ["fin"]], ["add", "theorem", "pred_above_below", ["fin"]], ["add", "theorem", "pred_above_last", ["fin"]], ["add", "theorem", "pred_above_last_apply", ["fin"]], ["add", "theorem", "pred_cast_succ_succ", ["fin"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}]}, {"timestamp": 1614345216, "sha": "20b49fbd", "message": "feat(linear_algebra/tensor_product): allow different semirings in linear_map.flip (#6414)\nThis also means the `map_*₂` lemmas are more generally applicable to linear_maps over different rings, such as `linear_map.prod_equiv.to_linear_map`.\nTo avoid breakage, this leaves `mk₂ R` for when R is commutative, and introduces `mk₂' R S` for when two different rings are wanted.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "theorem", "ext₂", ["linear_map"]], ["mod", "def", "flip", ["linear_map"]], ["mod", "theorem", "flip_apply", ["linear_map"]], ["mod", "theorem", "flip_inj", ["linear_map"]], ["mod", "def", "lflip", ["linear_map"]], ["mod", "theorem", "map_add₂", ["linear_map"]], ["mod", "theorem", "map_neg₂", ["linear_map"]], ["mod", "theorem", "map_smul₂", ["linear_map"]], ["mod", "theorem", "map_sub₂", ["linear_map"]], ["mod", "theorem", "map_zero₂", ["linear_map"]], ["add", "def", "mk₂'", ["linear_map"]], ["add", "theorem", "mk₂'_apply", ["linear_map"]]]}]}, {"timestamp": 1614345215, "sha": "47b62ea4", "message": "feat(algebra/big_operators): add lemmas about `sum` and `pi.single` (#6390)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "sum_pi_single'", ["finset"]], ["add", "theorem", "sum_pi_single", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["mod", "theorem", "functions_ext", ["ring_hom"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "ext_ring_iff", ["linear_map"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["mod", "theorem", "single_smul'", ["pi"]], ["mod", "theorem", "single_smul", ["pi"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_pi'", ["continuous_linear_map"]], ["mod", "theorem", "coe_pi", ["continuous_linear_map"]]]}]}, {"timestamp": 1614333990, "sha": "aeda3fb7", "message": "feat(topology/instances/real, topology/metric_space/basic, algebra/floor): integers are a proper space (#6437)\nThe metric space `ℤ` is a proper space. Also, under the coercion from `ℤ` to `ℝ`, inverse images of compact sets are finite.\nThe key point for both facts is to express the inverse image of an `ℝ`-interval under the coercion as an appropriate `ℤ`-interval, using floor or ceiling of the endpoints -- I provide these facts as simp-lemmas.\nIndirectly related discussion:\nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Finiteness.20of.20balls.20in.20the.20integers", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "preimage_Icc", ["int"]], ["add", "theorem", "preimage_Ici", ["int"]], ["add", "theorem", "preimage_Ico", ["int"]], ["add", "theorem", "preimage_Iic", ["int"]], ["add", "theorem", "preimage_Iio", ["int"]], ["add", "theorem", "preimage_Ioc", ["int"]], ["add", "theorem", "preimage_Ioi", ["int"]], ["add", "theorem", "preimage_Ioo", ["int"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "tendsto_coe_cofinite", ["int"]]]}]}, {"timestamp": 1614333989, "sha": "ff5fa529", "message": "chore(data/finsupp/basic): add coe_{neg,sub,smul} lemmas to match coe_{zero,add,fn_sum} (#6350)\nThis also:\n* merges together `smul_apply'` and `smul_apply`, since the latter is just a special case of the former.\n* changes the implicitness of arguments to all of the `finsupp.*_apply` lemmas so that all the variables and none of the types are explicit\nThe whitespace style here matches how `coe_add` is spaced.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "add_apply", ["finsupp"]], ["mod", "def", "apply_add_hom", ["finsupp"]], ["add", "theorem", "coe_nat_sub", ["finsupp"]], ["add", "theorem", "coe_neg", ["finsupp"]], ["add", "theorem", "coe_smul", ["finsupp"]], ["add", "theorem", "coe_sub", ["finsupp"]], ["mod", "theorem", "nat_sub_apply", ["finsupp"]], ["mod", "theorem", "neg_apply", ["finsupp"]], ["del", "theorem", "smul_apply'", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]], ["mod", "theorem", "sub_apply", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "def", "coord_fun", ["is_basis"]], ["del", "def", "eval_finsupp_at", ["is_basis"]]]}]}, {"timestamp": 1614333988, "sha": "dd5363b5", "message": "feat(algebraic_topology): introduce the simplex category (#6173)\n* introduce `simplex_category`, with objects `nat` and morphisms `n ⟶ m` order-preserving maps from `fin (n+1)` to `fin (m+1)`.\n* prove the simplicial identities\n* show the category is equivalent to `NonemptyFinLinOrd`\nThis is the start of simplicial sets, moving and completing some of the material from @jcommelin's `sset` branch. Dold-Kan is the obvious objective; apparently we're going to need it for `lean-liquid` at some point.\nThe proofs of the simplicial identities are bad and slow. They involve extravagant use of nonterminal simp (`simp?` doesn't seem to give good answers) and lots of `linarith` bashing. Help welcome, especially if you love playing with inequalities in `nat` involving lots of `-1`s.", "changes": [{"oldPath": null, "newPath": "src/algebraic_topology/simplex_category.lean", "changes": [["add", "theorem", "comp_apply", ["simplex_category"]], ["add", "theorem", "id_apply", ["simplex_category"]], ["add", "def", "is_skeleton_of", ["simplex_category"]], ["add", "def", "mk", ["simplex_category"]], ["add", "theorem", "skeletal", ["simplex_category"]], ["add", "def", "skeletal_functor", ["simplex_category"]], ["add", "def", "δ", ["simplex_category"]], ["add", "theorem", "δ_comp_δ", ["simplex_category"]], ["add", "theorem", "δ_comp_δ_self", ["simplex_category"]], ["add", "theorem", "δ_comp_σ_of_gt", ["simplex_category"]], ["add", "theorem", "δ_comp_σ_of_le", ["simplex_category"]], ["add", "theorem", "δ_comp_σ_self", ["simplex_category"]], ["add", "theorem", "δ_comp_σ_succ", ["simplex_category"]], ["add", "def", "σ", ["simplex_category"]], ["add", "theorem", "σ_comp_σ", ["simplex_category"]], ["add", "def", "simplex_category", []]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "pred_mk", ["fin"]]]}]}, {"timestamp": 1614323605, "sha": "2f1de3f7", "message": "feat(polynomial/eval): lemmas relating eval/map on numerals (#6438)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_int_cast_map", ["polynomial"]], ["add", "theorem", "eval_nat_cast_map", ["polynomial"]], ["add", "theorem", "eval_one_map", ["polynomial"]], ["add", "theorem", "eval_zero_map", ["polynomial"]]]}]}, {"timestamp": 1614323604, "sha": "300e81de", "message": "feat(analysis/complex/basic): complex conjugation is a linear isometry (#6436)\nComplex conjugation is a linear isometry (and various corollaries, eg it is a continuous linear map).\nAlso rewrite the results that `re` and `im` are continuous linear maps, to deduce from explicit bounds rather than passing through `linear_map.continuous_of_finite_dimensional`.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "continuous_conj", ["complex"]], ["add", "def", "conj", ["complex", "continuous_linear_map"]], ["add", "theorem", "conj_apply", ["complex", "continuous_linear_map"]], ["add", "theorem", "conj_coe", ["complex", "continuous_linear_map"]], ["add", "theorem", "conj_norm", ["complex", "continuous_linear_map"]], ["mod", "def", "im", ["complex", "continuous_linear_map"]], ["mod", "def", "re", ["complex", "continuous_linear_map"]], ["add", "theorem", "isometry_conj", ["complex"]], ["add", "def", "conj", ["complex", "linear_isometry"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "theorem", "coe_conj", ["complex", "linear_map"]], ["add", "def", "conj", ["complex", "linear_map"]]]}]}, {"timestamp": 1614323603, "sha": "274042d5", "message": "feat(data/polynomial): basic lemmas (#6434)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "coeff_monomial_succ", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "int_cast_coeff_zero", ["polynomial"]], ["add", "theorem", "int_cast_inj", ["polynomial"]], ["add", "theorem", "nat_cast_coeff_zero", ["polynomial"]], ["add", "theorem", "nat_cast_inj", ["polynomial"]]]}]}, {"timestamp": 1614323602, "sha": "cca22d7b", "message": "feat(data/polynomial/degree/trailing_degree): Trailing degree of multiplication by X^n (#6425)\nA lemma about the trailing degree of a shifted polynomial.\n(this PR is part of the irreducibility saga)", "changes": [{"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "nat_trailing_degree_mul_X_pow", ["polynomial"]]]}]}, {"timestamp": 1614323601, "sha": "24ed74a2", "message": "feat(algebra/category/Semigroup/basic): categories of magmas and semigroups (#6387)\nThis PR introduces the category of magmas and the category of semigroups, together with their additive versions.", "changes": [{"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["del", "theorem", "to_CommMon_iso_hom", ["mul_equiv"]], ["del", "theorem", "to_CommMon_iso_inv", ["mul_equiv"]], ["del", "theorem", "to_Mon_iso_hom", ["mul_equiv"]], ["del", "theorem", "to_Mon_iso_inv", ["mul_equiv"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Semigroup/basic.lean", "changes": [["add", "theorem", "coe_of", ["Magma"]], ["add", "def", "of", ["Magma"]], ["add", "def", "Magma", []], ["add", "theorem", "coe_of", ["Semigroup"]], ["add", "def", "of", ["Semigroup"]], ["add", "def", "Semigroup", []], ["add", "def", "Magma_iso_to_mul_equiv", ["category_theory", "iso"]], ["add", "def", "Semigroup_iso_to_mul_equiv", ["category_theory", "iso"]], ["add", "def", "to_Magma_iso", ["mul_equiv"]], ["add", "def", "to_Semigroup_iso", ["mul_equiv"]], ["add", "def", "mul_equiv_iso_Magma_iso", []], ["add", "def", "mul_equiv_iso_Semigroup_iso", []]]}, {"oldPath": null, "newPath": "src/algebra/pempty_instances.lean", "changes": []}]}, {"timestamp": 1614323600, "sha": "aafa5fe4", "message": "feat(ring_theory/flat): definition of flat module (#6284)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/flat.lean", "changes": [["add", "def", "flat", ["module"]]]}]}, {"timestamp": 1614323599, "sha": "d451876b", "message": "doc(data/finset/basic): rewrite finset module doc (#5893)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}]}, {"timestamp": 1614312452, "sha": "07d6d3f1", "message": "feat(algebra/algebra/basic): smul_mul_smul (#6423)\nAn identity for algebras.\n(this PR is part of the irreducibility saga)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "smul_mul_smul", ["algebra"]]]}]}, {"timestamp": 1614312451, "sha": "0035e2dd", "message": "chore(*): upgrade to Lean 3.27.0c (#6411)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": []}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": []}, {"oldPath": "src/computability/tm_computable.lean", "newPath": "src/computability/tm_computable.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/unfold_cases.lean", "newPath": "src/tactic/unfold_cases.lean", "changes": []}, {"oldPath": "src/topology/locally_constant/basic.lean", "newPath": "src/topology/locally_constant/basic.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "test/qpf.lean", "newPath": "test/qpf.lean", "changes": []}]}, {"timestamp": 1614312451, "sha": "5fbebf67", "message": "fix(logic/{function}/basic): remove simp lemmas `function.injective.eq_iff` and `imp_iff_right` (#6402)\n* `imp_iff_right` is a conditional simp lemma that matches a lot and should never successfully rewrite.\n* `function.injective.eq_iff` is a conditional simp lemma that matches a lot and is rarely used. Since you almost always need to give the proof `hf : function.injective f` as an argument to `simp`, you can replace it with `hf.eq_iff`.", "changes": [{"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/combinatorics/colex.lean", "newPath": "src/combinatorics/colex.lean", "changes": []}, {"oldPath": "src/combinatorics/hall.lean", "newPath": "src/combinatorics/hall.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "imp_iff_right", []]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "eq_iff", ["function", "injective"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1614309697, "sha": "09388808", "message": "chore(scripts): update nolints.txt (#6432)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614300172, "sha": "521b8211", "message": "feat(data/polynomial/basic): monomial_left_inj (#6430)\nA version of `finsupp.single_left_inj` for monomials, so that it works with `rw.`\n(this PR is part of the irreducibility saga)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "monomial_left_inj", ["polynomial"]]]}]}, {"timestamp": 1614300171, "sha": "84ca016d", "message": "feat(data/polynomial/coeff): Alternate form of coeff_mul_X_pow (#6424)\nAn `ite`-version of `coeff_mul_X_pow` that sometimes works better with `rw`.\n(this PR is part of the irreducibility saga)", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_mul_X_pow'", ["polynomial"]]]}]}, {"timestamp": 1614300170, "sha": "49d2191b", "message": "feat(data/polynomial/basic): monomial_neg (#6422)\nThe monomial of a negation is the negation of the monomial.\n(this PR is part of the irreducibility saga)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "monomial_neg", ["polynomial"]]]}]}, {"timestamp": 1614300169, "sha": "f34fa5fc", "message": "feat(algebra/algebra/subalgebra): use opt_param for redundant axioms (#6417)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}]}, {"timestamp": 1614300168, "sha": "9d5088a2", "message": "feat(linear_algebra/pi): add `linear_equiv.pi` (#6415)", "changes": [{"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "pi", ["linear_equiv"]]]}]}, {"timestamp": 1614300167, "sha": "61028ed1", "message": "chore(number_theory/bernoulli): use factorial notation (#6412)", "changes": [{"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}]}, {"timestamp": 1614300166, "sha": "27559398", "message": "feat(data/pnat/basic): add induction principle (#6410)\nAn induction principle for `pnat`. The proof is by Mario Carneiro. If there are mistakes, I introduced them!\nZulip discussion:\nhttps://leanprover.zulipchat.com/#narrow/stream/267928-condensed-mathematics/topic/torsion.20free/near/227748865", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "def", "rec_on", ["pnat"]], ["add", "theorem", "rec_on_one", ["pnat"]], ["add", "theorem", "rec_on_succ", ["pnat"]]]}]}, {"timestamp": 1614300165, "sha": "6ed8b4b0", "message": "feat(linear_algebra/finite_dimensional): lemmas for zero dimensional vector spaces (#6397)", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_zero_iff", []], ["add", "theorem", "is_basis_of_dim_eq_zero'", []], ["add", "theorem", "is_basis_of_dim_eq_zero", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "findim_zero_iff_forall_zero", []], ["add", "theorem", "findim_zero_iff", ["finite_dimensional"]], ["add", "theorem", "findim_zero_of_subsingleton", ["finite_dimensional"]], ["add", "theorem", "is_basis_of_findim_zero'", []], ["add", "theorem", "is_basis_of_findim_zero", []]]}]}, {"timestamp": 1614289114, "sha": "d4966769", "message": "feat(geometry/manifold): manifold modelled on locally compact vector space is locally compact (#6394)\nAlso connect `locally_compact_space` to `filter.has_basis`.", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "theorem", "locally_compact", ["charted_space"]], ["del", "def", "local_homeomorph", ["charted_space_core"]], ["add", "theorem", "mem_chart_target", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "locally_compact", ["model_with_corners"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod_nhds'", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "symm_map_nhds_eq", ["local_homeomorph"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "compact_basis_nhds", []], ["add", "theorem", "locally_compact_space_of_has_basis", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1614289113, "sha": "8770f5c7", "message": "refactor(topology/subset_properties): more properties of `compact_covering` (#6328)\nModify the definition of `compact_covering α n` to ensure that it is monotone in `n`.\nAlso, in a locally compact space, prove the existence of a compact exhaustion, i.e. a sequence which satisfies the properties for `compact_covering` and in which, moreover, the interior of the next set includes the previous set.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "find_comp_succ", ["nat"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "compact_accumulate", []], ["add", "theorem", "compact_covering_subset", []], ["add", "theorem", "Union_eq", ["compact_exhaustion"]], ["add", "theorem", "exists_mem", ["compact_exhaustion"]], ["add", "theorem", "find_shiftr", ["compact_exhaustion"]], ["add", "theorem", "mem_diff_shiftr_find", ["compact_exhaustion"]], ["add", "theorem", "mem_find", ["compact_exhaustion"]], ["add", "theorem", "mem_iff_find_le", ["compact_exhaustion"]], ["add", "def", "shiftr", ["compact_exhaustion"]], ["add", "theorem", "subset_interior", ["compact_exhaustion"]], ["add", "theorem", "subset_interior_succ", ["compact_exhaustion"]], ["add", "theorem", "subset_succ", ["compact_exhaustion"]], ["add", "structure", "compact_exhaustion", []], ["add", "theorem", "elim_directed_cover", ["is_compact"]]]}]}, {"timestamp": 1614267814, "sha": "85b5d5cb", "message": "refactor(logic/basic): turn *_prop_of_* into congr lemma (#6406)\nAlternative solution to the exists part of #6404.", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_false_left", []], ["add", "theorem", "exists_prop_congr'", []], ["add", "theorem", "exists_prop_congr", []], ["mod", "theorem", "exists_prop_of_false", []], ["mod", "theorem", "exists_prop_of_true", []], ["add", "theorem", "exists_true_left", []], ["add", "theorem", "forall_false_left", []], ["add", "theorem", "forall_prop_congr'", []], ["add", "theorem", "forall_prop_congr", []], ["mod", "theorem", "forall_prop_of_false", []], ["mod", "theorem", "forall_prop_of_true", []], ["add", "theorem", "forall_true_left", []]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": []}]}, {"timestamp": 1614246619, "sha": "e3ae6cd6", "message": "feat(data/equiv/basic): lemmas about images and preimages (#6398)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "eq_preimage_iff_image_eq", ["equiv"]], ["add", "theorem", "image_eq_iff_eq", ["equiv"]], ["add", "theorem", "image_subset", ["equiv"]], ["add", "theorem", "preimage_eq_iff_eq_image", ["equiv"]], ["add", "theorem", "preimage_subset", ["equiv"]], ["add", "theorem", "preimage_symm_preimage", ["equiv"]], ["add", "theorem", "symm_preimage_preimage", ["equiv"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_preimage_iff_image_eq", ["set"]], ["add", "theorem", "preimage_eq_iff_eq_image", ["set"]]]}]}, {"timestamp": 1614238170, "sha": "56f2c05e", "message": "chore(algebra/regular): rename lemma is_regular_of_cancel_monoid_with_zero to is_regular_of_ne_zero (#6408)\nChange the name of lemma is_regular_of_cancel_monoid_with_zero to the shorter is_regular_of_ne_zero.\nZulip reference:\nhttps://leanprover.zulipchat.com/#narrow/stream/267928-condensed-mathematics", "changes": [{"oldPath": "src/algebra/regular.lean", "newPath": "src/algebra/regular.lean", "changes": [["del", "theorem", "is_regular_of_cancel_monoid_with_zero", []], ["add", "theorem", "is_regular_of_ne_zero", []]]}]}, {"timestamp": 1614226242, "sha": "4b6680a3", "message": "chore(scripts): update nolints.txt (#6407)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614226241, "sha": "caed8413", "message": "feat(order/complete_lattice): add complete_lattice.independent.disjoint{_Sup,} (#6405)", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_sup_le_infi_sup", []], ["add", "theorem", "disjoint", ["complete_lattice", "independent"]], ["add", "theorem", "disjoint_Sup", ["complete_lattice", "independent"]], ["mod", "theorem", "mono", ["complete_lattice", "independent"]], ["mod", "def", "independent", ["complete_lattice"]], ["mod", "theorem", "independent_empty", ["complete_lattice"]], ["add", "theorem", "disjoint_Sup_left", []], ["add", "theorem", "disjoint_Sup_right", []], ["add", "theorem", "supr_inf_le_Sup_inf", []]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1614226240, "sha": "9d748f0b", "message": "feat(data/finset/basic): mem_map_equiv (#6399)\nThis adds a version of `mem_map` specialized to equivs, which has a better simp-nf.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "finset_congr_refl", ["equiv"]], ["add", "theorem", "finset_congr_symm", ["equiv"]], ["del", "theorem", "finset_congr_symm_apply", ["equiv"]], ["add", "theorem", "finset_congr_trans", ["equiv"]], ["add", "theorem", "mem_map_equiv", ["finset"]]]}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1614226239, "sha": "eba9be51", "message": "feat(ring_theory/power_series/basic): remove const coeff (#6383)\nThis shows that we can factor out X when the constant coefficient is removed from a power series.", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "eq_X_mul_shift_add_const", ["power_series"]], ["add", "theorem", "eq_shift_mul_X_add_const", ["power_series"]], ["add", "theorem", "sub_const_eq_X_mul_shift", ["power_series"]], ["add", "theorem", "sub_const_eq_shift_mul_X", ["power_series"]]]}]}, {"timestamp": 1614226238, "sha": "a31d06a7", "message": "feat(data/zmod/basic): Explicitly state computable right_inverses instead of just surjectivity (#5797)", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "int_cast_right_inverse", ["zmod"]], ["add", "theorem", "nat_cast_right_inverse", ["zmod"]], ["add", "theorem", "ring_hom_right_inverse", ["zmod"]], ["mod", "theorem", "ring_hom_surjective", ["zmod"]]]}]}, {"timestamp": 1614213010, "sha": "a518fb86", "message": "feat(data/list/basic): take_init, take_eq_nil (#6380)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "init_eq_take", ["list"]], ["add", "theorem", "init_take", ["list"]], ["add", "theorem", "take_eq_nil_iff", ["list"]]]}]}, {"timestamp": 1614204401, "sha": "e66e136f", "message": "feat(data/mv_polynomial/basic): add two equivs (#6324)\nTwo small lemma about `mv_polynomial` as `R`-algebra.", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "def", "alg_equiv_congr", ["mv_polynomial"]], ["add", "def", "alg_equiv_congr_left", ["mv_polynomial"]], ["add", "def", "alg_equiv_congr_right", ["mv_polynomial"]], ["del", "def", "alg_equiv_of_equiv", ["mv_polynomial"]], ["add", "def", "sum_alg_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": []}]}, {"timestamp": 1614200883, "sha": "ead4731a", "message": "feat(geometry/manifold): `model_with_corners` is a `closed_embedding` (#6393)", "changes": [{"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "closed_range", ["model_with_corners"]], ["add", "theorem", "image_mem_nhds_within", ["model_with_corners"]], ["del", "theorem", "left_inv'", ["model_with_corners"]], ["add", "theorem", "map_nhds_eq", ["model_with_corners"]], ["add", "theorem", "symm_comp_self", ["model_with_corners"]], ["add", "theorem", "symm_map_nhds_within_range", ["model_with_corners"]], ["del", "theorem", "target", ["model_with_corners"]], ["add", "theorem", "target_eq", ["model_with_corners"]]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}]}, {"timestamp": 1614200882, "sha": "27b6110e", "message": "feat(algebra/lie/cartan_subalgebra): define Cartan subalgebras (#6385)\nWe do this via the normalizer of a Lie subalgebra, which is also defined here.", "changes": [{"oldPath": null, "newPath": "src/algebra/lie/cartan_subalgebra.lean", "changes": [["add", "theorem", "normalizer_eq_top", ["lie_ideal"]], ["add", "theorem", "ideal_in_normalizer", ["lie_subalgebra"]], ["add", "theorem", "le_normalizer", ["lie_subalgebra"]], ["add", "theorem", "le_normalizer_of_ideal", ["lie_subalgebra"]], ["add", "theorem", "mem_normalizer_iff", ["lie_subalgebra"]], ["add", "def", "normalizer", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": []}, {"oldPath": "src/algebra/lie/solvable.lean", "newPath": "src/algebra/lie/solvable.lean", "changes": []}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["del", "def", "top_equiv_self", ["lie_algebra"]], ["del", "theorem", "top_equiv_self_apply", ["lie_algebra"]], ["add", "def", "top_equiv_self", ["lie_ideal"]], ["add", "theorem", "top_equiv_self_apply", ["lie_ideal"]], ["add", "def", "top_equiv_self", ["lie_subalgebra"]], ["add", "theorem", "top_equiv_self_apply", ["lie_subalgebra"]]]}]}, {"timestamp": 1614189122, "sha": "25ea4998", "message": "feat(data/multiset/basic): subsingleton_equiv_apply' (#6400)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "coe_subsingleton_equiv", ["multiset"]]]}]}, {"timestamp": 1614189120, "sha": "6271fe5b", "message": "fix(tactic/delta_instance): beta reduce type of instance (#6396)\nThe delta derive handler was creating instances that weren't beta reduced, which isn't a problem for type class inference but can be unexpected. @gebner fixed the line in doc-gen that assumed beta reduction, but we should also produce the expected instance in the first place.\nZulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/doc-gen.20is.20failing", "changes": [{"oldPath": "src/tactic/delta_instance.lean", "newPath": "src/tactic/delta_instance.lean", "changes": []}]}, {"timestamp": 1614180215, "sha": "3d9e7907", "message": "fix(topology/metric_space/cau_seq_filter): remove non-terminal simp (#6401)", "changes": [{"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1614166280, "sha": "12afc981", "message": "chore(data/matrix/basic): instances for unique, subsing, nontriv, coe (#6296)\nThis adds a coercion to the underlying scalar if the matrix is 1 x 1.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1614160382, "sha": "85636f9a", "message": "feat(data/complex|matrix): instances of star_ordered_ring and star_ordered_algebra (#4686)", "changes": [{"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": [["del", "theorem", "coe_complex_smul", ["quaternion"]], ["add", "theorem", "coe_real_complex_mul", ["quaternion"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "def", "complex_star_ordered_ring", ["complex"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "theorem", "complex_ordered_semimodule", ["complex"]], ["del", "theorem", "im_smul", ["complex"]], ["del", "theorem", "re_smul", ["complex"]], ["add", "theorem", "smul_coe", ["complex"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1614149055, "sha": "196c2a8a", "message": "feat(topology/separation): a cont. function with a cont. left inverse is a closed embedding (#6329)", "changes": [{"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "tendsto_nhds_within_of_tendsto_nhds_of_eventually_within", []], ["add", "theorem", "tendsto_nhds_within_range", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "image_mem_nhds", ["local_homeomorph"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "closed_embedding", ["function", "left_inverse"]], ["add", "theorem", "closed_range", ["function", "left_inverse"]]]}]}, {"timestamp": 1614137937, "sha": "9bad59cf", "message": "chore(scripts): update nolints.txt (#6389)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614137936, "sha": "4a391c9d", "message": "fix(data/int/basic,category_theory/equivalence): use neg not minus in lemma names (#6384)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["del", "theorem", "pow_minus_one", ["category_theory", "equivalence"]], ["add", "theorem", "pow_neg_one", ["category_theory", "equivalence"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["del", "theorem", "add_minus_one", ["int"]], ["add", "theorem", "add_neg_one", ["int"]]]}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}]}, {"timestamp": 1614137935, "sha": "358fdf23", "message": "feat(category_theory/abelian/additive_functor): Adds definition of additive functors (#6367)\nThis PR adds the basic definition of an additive functor.\nSee associated [zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Additive.20functors/near/227295322).", "changes": [{"oldPath": null, "newPath": "src/category_theory/abelian/additive_functor.lean", "changes": [["add", "theorem", "map_neg", ["category_theory", "functor", "additive"]], ["add", "theorem", "map_sub", ["category_theory", "functor", "additive"]], ["add", "theorem", "coe_map_add_hom", ["category_theory", "functor"]], ["add", "def", "map_add_hom", ["category_theory", "functor"]]]}]}, {"timestamp": 1614127128, "sha": "b4d2ce45", "message": "chore(data/equiv/local_equiv,topology/local_homeomorph,data/set/function): review (#6306)\n## `data/equiv/local_equiv`:\n* move `local_equiv.inj_on` lemmas closer to each other, add missing lemmas;\n* rename `local_equiv.bij_on_source` to `local_equiv.bij_on`;\n* rename `local_equiv.inv_image_target_eq_souce` to `local_equiv.symm_image_target_eq_souce`;\n## `data/set/function`\n* add `set.inj_on.mem_of_mem_image`, `set.inj_on.mem_image_iff`, `set.inj_on.preimage_image_inter`;\n* add `set.left_inv_on.image_image'` and `set.left_inv_on.image_image`;\n* add `function.left_inverse.right_inv_on_range`;\n* move `set.inj_on.inv_fun_on_image` to golf the proof;\n## `topology/local_homeomorph`\n* add lemmas like `local_homeomorph.inj_on`;\n* golf the definition of `open_embedding.to_local_homeomorph`, make `f` explicit.", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["del", "theorem", "bij_on_source", ["local_equiv"]], ["mod", "theorem", "image_source_eq_target", ["local_equiv"]], ["del", "theorem", "inv_image_target_eq_source", ["local_equiv"]], ["add", "theorem", "symm_image_target_eq_source", ["local_equiv"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "right_inv_on_range", ["function", "left_inverse"]], ["add", "theorem", "mem_image_iff", ["set", "inj_on"]], ["add", "theorem", "mem_of_mem_image", ["set", "inj_on"]], ["add", "theorem", "preimage_image_inter", ["set", "inj_on"]], ["add", "theorem", "image_image'", ["set", "left_inv_on"]], ["add", "theorem", "image_image", ["set", "left_inv_on"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["mod", "theorem", "to_open_embedding", ["local_homeomorph"]], ["del", "theorem", "continuous_inv_fun", ["open_embedding"]], ["del", "theorem", "open_target", ["open_embedding"]], ["mod", "theorem", "source", ["open_embedding"]], ["mod", "theorem", "target", ["open_embedding"]], ["del", "theorem", "to_local_equiv_coe", ["open_embedding"]], ["del", "theorem", "to_local_equiv_source", ["open_embedding"]], ["del", "theorem", "to_local_equiv_target", ["open_embedding"]], ["mod", "theorem", "to_local_homeomorph_coe", ["open_embedding"]]]}]}, {"timestamp": 1614114714, "sha": "387db0d9", "message": "feat(data/real/sqrt): add continuity attributes (#6388)\nI add continuity attributes to `continuous_sqrt` and `continuous.sqrt`.", "changes": [{"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}]}, {"timestamp": 1614114713, "sha": "8cfada11", "message": "doc(measure_theory/interval_integral): move comment (#6386)", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}]}, {"timestamp": 1614114712, "sha": "2d51a449", "message": "feat(data/list/basic): nth_drop (#6381)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_drop", ["list"]]]}]}, {"timestamp": 1614114710, "sha": "63e75351", "message": "chore(group_theory/coset): right_coset additions and module doc (#6371)\nThis PR dualises two results from left_coset to right_coset and adds a module doc.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["del", "def", "left_coset_equiv", []], ["del", "theorem", "left_coset_equiv_rel", []], ["add", "def", "left_coset_equivalence", []], ["add", "theorem", "left_coset_equivalence_rel", []], ["add", "def", "right_rel", ["quotient_group"]], ["add", "def", "right_coset_equivalence", []], ["add", "theorem", "right_coset_equivalence_rel", []], ["add", "def", "right_coset_equiv_subgroup", ["subgroup"]]]}]}, {"timestamp": 1614100481, "sha": "750d117d", "message": "feat(logic/basic): subsingleton_iff_forall_eq (#6379)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "subsingleton_iff_forall_eq", []]]}]}, {"timestamp": 1614100480, "sha": "59bf982e", "message": "feat(algebra/lie/nilpotent): basic facts about nilpotent Lie algebras (#6378)", "changes": [{"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": [["add", "theorem", "map_bracket_eq", ["lie_ideal"]]]}, {"oldPath": "src/algebra/lie/nilpotent.lean", "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "lie_algebra_is_nilpotent", ["function", "injective"]], ["add", "theorem", "lie_algebra_is_nilpotent", ["function", "surjective"]], ["add", "def", "is_nilpotent", ["lie_algebra"]], ["add", "theorem", "nilpotent_iff_equiv_nilpotent", ["lie_algebra"]], ["add", "theorem", "lower_central_series_map_eq", ["lie_ideal"]], ["add", "theorem", "lower_central_series_map_le", ["lie_ideal"]]]}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "sub_mem", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "ideal_range_eq_top_of_surjective", ["lie_hom"]], ["add", "theorem", "is_ideal_morphism_of_surjective", ["lie_hom"]], ["add", "theorem", "range_coe_submodule", ["lie_hom"]], ["add", "theorem", "range_eq_top", ["lie_hom"]], ["add", "theorem", "coe_map_of_surjective", ["lie_ideal"]], ["mod", "theorem", "map_sup_ker_eq_map", ["lie_ideal"]], ["add", "theorem", "mem_map_of_surjective", ["lie_ideal"]], ["add", "theorem", "top_coe_lie_subalgebra", ["lie_ideal"]]]}]}, {"timestamp": 1614100479, "sha": "4b22c39d", "message": "feat(ring_theory/power_series/well_known): sum of power of exponentials (#6368)", "changes": [{"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["add", "theorem", "exp_pow_sum", ["power_series"]]]}]}, {"timestamp": 1614100478, "sha": "e3d6cf82", "message": "feat(measure_theory/integration): add theorems about the product of independent random variables (#6106)\nConsider the integral of the product of two random variables. Two random variables are independent if the preimage of all measurable sets are independent variables. Alternatively, if there is a pair of independent measurable spaces (as sigma algebras are independent), then two random variables are independent if they are measurable with respect to them.", "changes": [{"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "inter_indicator_mul", ["set"]]]}, {"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": [["mod", "def", "indep_set", ["probability_theory"]]]}, {"oldPath": null, "newPath": "src/probability_theory/integration.lean", "changes": [["add", "theorem", "lintegral_mul_eq_lintegral_mul_lintegral_of_indep_fun", ["probability_theory"]], ["add", "theorem", "lintegral_mul_eq_lintegral_mul_lintegral_of_independent_measurable_space", ["probability_theory"]], ["add", "theorem", "lintegral_mul_indicator_eq_lintegral_mul_lintegral_indicator", ["probability_theory"]]]}]}, {"timestamp": 1614089385, "sha": "f84f5b2e", "message": "feat(category_theory/subobject): the semilattice_inf/sup of subobjects (#6278)\n# The lattice of subobjects\nWe define `subobject X` as the quotient (by isomorphisms) of\n`mono_over X := {f : over X // mono f.hom}`.\nHere `mono_over X` is a thin category (a pair of objects has at most one morphism between them),\nso we can think of it as a preorder. However as it is not skeletal, it is not a partial order.\nWe provide\n* `def pullback [has_pullbacks C] (f : X ⟶ Y) : subobject Y ⥤ subobject X`\n* `def map (f : X ⟶ Y) [mono f] : subobject X ⥤ subobject Y`\n* `def «exists» [has_images C] (f : X ⟶ Y) : subobject X ⥤ subobject Y`\n(each first at the level of `mono_over`), and prove their basic properties and relationships.\nWe also provide the `semilattice_inf_top (subobject X)` instance when `[has_pullback C]`,\nand the `semilattice_inf (subobject X)` instance when `[has_images C] [has_finite_coproducts C]`.\n## Notes\nThis development originally appeared in Bhavik Mehta's \"Topos theory for Lean\" repository,\nand was ported to mathlib by Scott Morrison.", "changes": [{"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["add", "theorem", "monotone", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["add", "def", "map_pullback_adj", ["category_theory", "over"]], ["add", "def", "pullback", ["category_theory", "over"]], ["add", "def", "pullback_comp", ["category_theory", "over"]], ["add", "def", "pullback_id", ["category_theory", "over"]], ["add", "def", "pushout", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "coprod", ["category_theory", "over"]], ["add", "def", "coprod_obj", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "theorem", "mono_of_is_limit_mk_id_id", ["category_theory", "limits", "pullback_cone"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["mod", "theorem", "w", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": [["mod", "theorem", "comp_to_thin_skeleton", ["category_theory", "thin_skeleton"]], ["add", "def", "lower_adjunction", ["category_theory", "thin_skeleton"]]]}, {"oldPath": null, "newPath": "src/category_theory/subobject.lean", "changes": [["add", "def", "arrow", ["category_theory", "mono_over"]], ["add", "theorem", "bot_arrow", ["category_theory", "mono_over"]], ["add", "def", "bot_le", ["category_theory", "mono_over"]], ["add", "theorem", "bot_left", ["category_theory", "mono_over"]], ["add", "def", "exists_iso_map", ["category_theory", "mono_over"]], ["add", "def", "exists_pullback_adj", ["category_theory", "mono_over"]], ["add", "def", "forget", ["category_theory", "mono_over"]], ["add", "def", "forget_image", ["category_theory", "mono_over"]], ["add", "theorem", "forget_obj_hom", ["category_theory", "mono_over"]], ["add", "theorem", "forget_obj_left", ["category_theory", "mono_over"]], ["add", "def", "hom_mk", ["category_theory", "mono_over"]], ["add", "def", "image", ["category_theory", "mono_over"]], ["add", "def", "image_forget_adj", ["category_theory", "mono_over"]], ["add", "def", "inf", ["category_theory", "mono_over"]], ["add", "def", "inf_le_left", ["category_theory", "mono_over"]], ["add", "def", "inf_le_right", ["category_theory", "mono_over"]], ["add", "def", "iso_mk", ["category_theory", "mono_over"]], ["add", "def", "le_inf", ["category_theory", "mono_over"]], ["add", "def", "le_sup_left", ["category_theory", "mono_over"]], ["add", "def", "le_sup_right", ["category_theory", "mono_over"]], ["add", "def", "le_top", ["category_theory", "mono_over"]], ["add", "def", "lift", ["category_theory", "mono_over"]], ["add", "theorem", "lift_comm", ["category_theory", "mono_over"]], ["add", "def", "lift_comp", ["category_theory", "mono_over"]], ["add", "def", "lift_id", ["category_theory", "mono_over"]], ["add", "def", "lift_iso", ["category_theory", "mono_over"]], ["add", "def", "map", ["category_theory", "mono_over"]], ["add", "def", "map_bot", ["category_theory", "mono_over"]], ["add", "def", "map_comp", ["category_theory", "mono_over"]], ["add", "def", "map_id", ["category_theory", "mono_over"]], ["add", "def", "map_iso", ["category_theory", "mono_over"]], ["add", "theorem", "map_obj_arrow", ["category_theory", "mono_over"]], ["add", "theorem", "map_obj_left", ["category_theory", "mono_over"]], ["add", "def", "map_pullback_adj", ["category_theory", "mono_over"]], ["add", "def", "map_top", ["category_theory", "mono_over"]], ["add", "def", "mk'", ["category_theory", "mono_over"]], ["add", "theorem", "mk'_arrow", ["category_theory", "mono_over"]], ["add", "def", "pullback", ["category_theory", "mono_over"]], ["add", "def", "pullback_comp", ["category_theory", "mono_over"]], ["add", "def", "pullback_id", ["category_theory", "mono_over"]], ["add", "def", "pullback_map_self", ["category_theory", "mono_over"]], ["add", "theorem", "pullback_obj_arrow", ["category_theory", "mono_over"]], ["add", "theorem", "pullback_obj_left", ["category_theory", "mono_over"]], ["add", "def", "pullback_self", ["category_theory", "mono_over"]], ["add", "def", "pullback_top", ["category_theory", "mono_over"]], ["add", "def", "slice", ["category_theory", "mono_over"]], ["add", "def", "sup", ["category_theory", "mono_over"]], ["add", "def", "sup_le", ["category_theory", "mono_over"]], ["add", "theorem", "top_arrow", ["category_theory", "mono_over"]], ["add", "def", "top_le_pullback_self", ["category_theory", "mono_over"]], ["add", "theorem", "top_left", ["category_theory", "mono_over"]], ["add", "theorem", "w", ["category_theory", "mono_over"]], ["add", "def", "«exists»", ["category_theory", "mono_over"]], ["add", "def", "mono_over", ["category_theory"]], ["add", "theorem", "bot_eq_zero", ["category_theory", "subobject"]], ["add", "theorem", "exists_iso_map", ["category_theory", "subobject"]], ["add", "def", "exists_pullback_adj", ["category_theory", "subobject"]], ["add", "def", "functor", ["category_theory", "subobject"]], ["add", "def", "inf", ["category_theory", "subobject"]], ["add", "theorem", "inf_def", ["category_theory", "subobject"]], ["add", "theorem", "inf_eq_map_pullback'", ["category_theory", "subobject"]], ["add", "theorem", "inf_eq_map_pullback", ["category_theory", "subobject"]], ["add", "theorem", "inf_le_left", ["category_theory", "subobject"]], ["add", "theorem", "inf_le_right", ["category_theory", "subobject"]], ["add", "theorem", "inf_map", ["category_theory", "subobject"]], ["add", "theorem", "inf_pullback", ["category_theory", "subobject"]], ["add", "theorem", "le_inf", ["category_theory", "subobject"]], ["add", "def", "lower", ["category_theory", "subobject"]], ["add", "def", "lower_adjunction", ["category_theory", "subobject"]], ["add", "theorem", "lower_comm", ["category_theory", "subobject"]], ["add", "def", "lower_equivalence", ["category_theory", "subobject"]], ["add", "theorem", "lower_iso", ["category_theory", "subobject"]], ["add", "def", "lower₂", ["category_theory", "subobject"]], ["add", "def", "map", ["category_theory", "subobject"]], ["add", "theorem", "map_bot", ["category_theory", "subobject"]], ["add", "theorem", "map_comp", ["category_theory", "subobject"]], ["add", "theorem", "map_id", ["category_theory", "subobject"]], ["add", "def", "map_iso", ["category_theory", "subobject"]], ["add", "def", "map_iso_to_order_iso", ["category_theory", "subobject"]], ["add", "theorem", "map_iso_to_order_iso_apply", ["category_theory", "subobject"]], ["add", "theorem", "map_iso_to_order_iso_symm_apply", ["category_theory", "subobject"]], ["add", "theorem", "map_pullback", ["category_theory", "subobject"]], ["add", "def", "map_pullback_adj", ["category_theory", "subobject"]], ["add", "theorem", "map_top", ["category_theory", "subobject"]], ["add", "def", "mk", ["category_theory", "subobject"]], ["add", "theorem", "prod_eq_inf", ["category_theory", "subobject"]], ["add", "def", "pullback", ["category_theory", "subobject"]], ["add", "theorem", "pullback_comp", ["category_theory", "subobject"]], ["add", "theorem", "pullback_id", ["category_theory", "subobject"]], ["add", "theorem", "pullback_map_self", ["category_theory", "subobject"]], ["add", "theorem", "pullback_self", ["category_theory", "subobject"]], ["add", "theorem", "pullback_top", ["category_theory", "subobject"]], ["add", "def", "sup", ["category_theory", "subobject"]], ["add", "theorem", "top_eq_id", ["category_theory", "subobject"]], ["add", "def", "«exists»", ["category_theory", "subobject"]], ["add", "def", "subobject", ["category_theory"]]]}]}, {"timestamp": 1614089384, "sha": "7f46c811", "message": "feat(chain_complex): lemmas about eq_to_hom (#6250)\nAdds two lemmas relating `eq_to_hom` to differentials and chain maps. Useful in the ubiquitous circumstance of having to apply identities in the index of a chain complex.\nAlso add some `@[reassoc]` tags for convenience.", "changes": [{"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": "src/algebra/homology/chain_complex.lean", "changes": [["add", "theorem", "eq_to_hom_d", ["homological_complex"]], ["add", "theorem", "eq_to_hom_f", ["homological_complex"]]]}]}, {"timestamp": 1614089383, "sha": "8d3efb71", "message": "feat(data/buffer/basic): read and to_buffer lemmas (#6048)", "changes": [{"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": [["add", "theorem", "read_push_back_left", ["array"]], ["add", "theorem", "read_push_back_right", ["array"]]]}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": [["add", "theorem", "append_list_nil", ["buffer"]], ["add", "theorem", "length_to_list", ["buffer"]], ["add", "theorem", "read_append_list_left'", ["buffer"]], ["add", "theorem", "read_append_list_left", ["buffer"]], ["add", "theorem", "read_append_list_right", ["buffer"]], ["add", "theorem", "read_push_back_left", ["buffer"]], ["add", "theorem", "read_push_back_right", ["buffer"]], ["add", "theorem", "read_singleton", ["buffer"]], ["add", "theorem", "read_to_buffer'", ["buffer"]], ["add", "theorem", "read_to_buffer", ["buffer"]], ["add", "theorem", "size_append_list", ["buffer"]], ["add", "theorem", "size_push_back", ["buffer"]], ["add", "theorem", "size_singleton", ["buffer"]], ["add", "theorem", "size_to_buffer", ["buffer"]], ["add", "theorem", "to_buffer_cons", ["buffer"]], ["add", "theorem", "to_buffer_to_list", ["buffer"]], ["add", "theorem", "to_list_to_buffer", ["buffer"]]]}]}, {"timestamp": 1614077560, "sha": "391c90a3", "message": "feat(logic/basic): subsingleton_of_forall_eq (#6376)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "subsingleton_of_forall_eq", []]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}]}, {"timestamp": 1614077559, "sha": "e6d23d23", "message": "feat(ring_theory/power_series/basic): coeff_succ_X_mul (#6370)", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "coeff_succ_X_mul", ["power_series"]]]}]}, {"timestamp": 1614073618, "sha": "3ff92489", "message": "feat({group,ring}_theory/free_*): make free_ring.lift and free_comm_ring.lift equivs (#6364)\nThis also adds `free_ring.hom_ext` and `free_comm_ring.hom_ext`, and deduplicates the definitions of the two lifts by introducing `abelian_group.lift_monoid`.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "def", "lift_monoid", ["free_abelian_group"]], ["add", "theorem", "lift_monoid_coe", ["free_abelian_group"]], ["add", "theorem", "lift_monoid_coe_add_monoid_hom", ["free_abelian_group"]], ["add", "theorem", "lift_monoid_symm_coe", ["free_abelian_group"]], ["mod", "theorem", "mul_def", ["free_abelian_group"]], ["mod", "theorem", "of_mul", ["free_abelian_group"]], ["add", "def", "of_mul_hom", ["free_abelian_group"]], ["add", "theorem", "of_mul_hom_coe", ["free_abelian_group"]], ["mod", "theorem", "of_mul_of", ["free_abelian_group"]], ["mod", "theorem", "of_one", ["free_abelian_group"]], ["mod", "theorem", "one_def", ["free_abelian_group"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["add", "theorem", "hom_ext", ["free_comm_ring"]], ["mod", "def", "lift", ["free_comm_ring"]]]}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": [["add", "theorem", "hom_ext", ["free_ring"]], ["mod", "def", "lift", ["free_ring"]]]}]}, {"timestamp": 1614062895, "sha": "b7a7b3d9", "message": "feat(algebra/regular): lemmas for powers of regular elements (#6356)\nProve that an element is (left/right-)regular iff a power of it is (left/right-)regular.", "changes": [{"oldPath": "src/algebra/regular.lean", "newPath": "src/algebra/regular.lean", "changes": [["add", "theorem", "pow", ["is_left_regular"]], ["add", "theorem", "pow_iff", ["is_left_regular"]], ["add", "theorem", "pow", ["is_regular"]], ["add", "theorem", "pow_iff", ["is_regular"]], ["add", "theorem", "pow", ["is_right_regular"]], ["add", "theorem", "pow_iff", ["is_right_regular"]]]}]}, {"timestamp": 1614062895, "sha": "ec36fc06", "message": "fix(data/set/finite): add decidable assumptions (#6264)\nYury's rule of thumb https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/classicalize/near/224871122 says that we should have decidable instances here, because the statements of the lemmas need them (rather than the proofs). I'm making this PR to see if anything breaks.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "card_ne_eq", ["set"]], ["mod", "theorem", "to_finset_compl", ["set"]], ["mod", "theorem", "to_finset_inter", ["set"]], ["mod", "theorem", "to_finset_ne_eq_erase", ["set"]], ["mod", "theorem", "to_finset_union", ["set"]]]}]}, {"timestamp": 1614062894, "sha": "680e8eda", "message": "feat(order/well_founded_set): defining `is_partially_well_ordered` to prove `is_wf.add` (#6226)\nDefines `set.is_partially_well_ordered s`, equivalent to any infinite sequence to `s` contains an infinite monotone subsequence\nProvides a basic API for `set.is_partially_well_ordered`\nProves `is_wf.add` and `is_wf.mul`", "changes": [{"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "is_wf_support_mul_antidiagonal", ["finset"]], ["add", "theorem", "mul_antidiagonal_mono_left", ["finset"]], ["add", "theorem", "mul_antidiagonal_mono_right", ["finset"]], ["add", "theorem", "support_mul_antidiagonal_subset_mul", ["finset"]], ["add", "theorem", "exists_monotone_subseq", ["set", "is_partially_well_ordered"]], ["add", "theorem", "image_of_monotone", ["set", "is_partially_well_ordered"]], ["add", "theorem", "is_wf", ["set", "is_partially_well_ordered"]], ["add", "theorem", "mul", ["set", "is_partially_well_ordered"]], ["add", "theorem", "prod", ["set", "is_partially_well_ordered"]], ["add", "def", "is_partially_well_ordered", ["set"]], ["add", "theorem", "is_partially_well_ordered_iff_exists_monotone_subseq", ["set"]], ["mod", "theorem", "insert", ["set", "is_wf"]], ["add", "theorem", "is_partially_well_ordered", ["set", "is_wf"]], ["add", "theorem", "mul", ["set", "is_wf"]], ["add", "theorem", "is_wf_empty", ["set"]], ["mod", "theorem", "is_wf_singleton", ["set"]]]}]}, {"timestamp": 1614057711, "sha": "5931c5cb", "message": "lint(set_theory/ordinal): fix def/lemma (#6369)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "ord_eq_min", ["cardinal"]], ["del", "def", "ord_eq_min", ["cardinal"]]]}]}, {"timestamp": 1614042850, "sha": "3c66fd1c", "message": "chore(scripts): update nolints.txt (#6373)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1614029521, "sha": "7a918225", "message": "feat(data/fintype/intervals): Add set.finite lemmas for integer intervals (#6365)", "changes": [{"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": [["add", "theorem", "Icc_ℤ_finite", ["set"]], ["add", "theorem", "Ico_ℤ_finite", ["set"]], ["add", "theorem", "Ioc_ℤ_finite", ["set"]], ["add", "theorem", "Ioo_ℤ_finite", ["set"]]]}]}, {"timestamp": 1614029520, "sha": "c0389845", "message": "chore(data/equiv/*): add missing coercion lemmas for equivs (#6268)\nThis does not affect the simp-normal form.\nThis tries to make a lot of lemma names and statements more consistent:\n* restates `linear_map.mk_apply` to be `linear_map.coe_mk` to match `monoid_hom.coe_mk`\n* adds `linear_map.to_linear_map_eq_coe`\n* adds the simp lemma `linear_map.coe_to_equiv`\n* adds the simp lemma `linear_map.linear_map.coe_to_linear_map`\n* adds the simp lemma `linear_map.to_fun_eq_coe`\n* adds the missing `ancestor` attributes required to make `to_additive` work for things like `add_equiv.to_add_hom`\n* restates `add_equiv.to_fun_apply` to be `add_equiv.to_fun_eq_coe`\n* restates `add_equiv.to_equiv_apply` to be `add_equiv.coe_to_equiv`\n* adds the simp lemma `add_equiv.coe_to_mul_hom`\n* removes `add_equiv.to_add_monoid_hom_apply` since `add_equiv.coe_to_add_monoid_hom` is a shorter and more general statement\n* restates `ring_equiv.to_fun_apply` to be `ring_equiv.to_fun_eq_coe`\n* restates `ring_equiv.coe_mul_equiv` to be `ring_equiv.coe_to_mul_equiv`\n* restates `ring_equiv.coe_add_equiv` to be `ring_equiv.coe_to_add_equiv`\n* restates `ring_equiv.coe_ring_hom` to be `ring_equiv.coe_to_ring_hom`\n* adds `ring_equiv.to_ring_hom_eq_coe`\n* adds `ring_equiv.to_add_equiv_eq_coe`\n* adds `ring_equiv.to_mul_equiv_eq_coe`", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "coe_coe", ["linear_equiv"]], ["add", "theorem", "coe_mk", ["linear_equiv"]], ["mod", "theorem", "coe_to_equiv", ["linear_equiv"]], ["add", "theorem", "coe_to_linear_map", ["linear_equiv"]], ["del", "theorem", "mk_apply", ["linear_equiv"]], ["del", "theorem", "to_fun_apply", ["linear_equiv"]], ["add", "theorem", "to_fun_eq_coe", ["linear_equiv"]], ["add", "theorem", "to_linear_map_eq_coe", ["linear_equiv"]]]}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "coe_to_equiv", ["mul_equiv"]], ["add", "theorem", "coe_to_mul_hom", ["mul_equiv"]], ["del", "theorem", "to_equiv_apply", ["mul_equiv"]], ["del", "theorem", "to_fun_apply", ["mul_equiv"]], ["add", "theorem", "to_fun_eq_coe", ["mul_equiv"]], ["del", "theorem", "to_monoid_hom_apply", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["del", "theorem", "coe_add_equiv", ["ring_equiv"]], ["del", "theorem", "coe_mul_equiv", ["ring_equiv"]], ["del", "theorem", "coe_ring_hom", ["ring_equiv"]], ["add", "theorem", "coe_to_add_equiv", ["ring_equiv"]], ["add", "theorem", "coe_to_mul_equiv", ["ring_equiv"]], ["add", "theorem", "coe_to_ring_hom", ["ring_equiv"]], ["add", "theorem", "to_add_equiv_eq_coe", ["ring_equiv"]], ["add", "theorem", "to_fun_eq_coe", ["ring_equiv"]], ["del", "theorem", "to_fun_eq_coe_fun", ["ring_equiv"]], ["add", "theorem", "to_mul_equiv_eq_coe", ["ring_equiv"]], ["add", "theorem", "to_ring_hom_eq_coe", ["ring_equiv"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}]}, {"timestamp": 1614019735, "sha": "283aafff", "message": "feat(ring_theory/power_series/well_known): power of exponential (#6330)\nCo-authored by Fabian Kruse", "changes": [{"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["add", "theorem", "exp_pow_eq_rescale_exp", ["power_series"]]]}]}, {"timestamp": 1614019734, "sha": "0fb6adae", "message": "chore(topology): move `exists_compact_superset`, drop assumption `t2_space` (#6327)\nAlso golf the proof of `is_compact.elim_finite_subcover_image`", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "exists_compact_superset", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "exists_compact_superset", []], ["add", "theorem", "compact_bUnion", ["finset"]]]}]}, {"timestamp": 1614019733, "sha": "db00ee42", "message": "feat(ring_theory/polynomial/basic): add quotient_equiv_quotient_mv_polynomial (#6287)\nI've added `quotient_equiv_quotient_mv_polynomial` that says that `(R/I)[x_i] ≃+* (R[x_i])/I` where `I` is an ideal of `R`. I've included also a version for `R`-algebras. The proof is very similar to the case of (one variable) polynomials.", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "eval₂_C_mk_eq_zero", ["mv_polynomial"]], ["add", "theorem", "mem_ideal_of_coeff_mem_ideal", ["mv_polynomial"]], ["add", "theorem", "mem_map_C_iff", ["mv_polynomial"]], ["add", "def", "quotient_alg_equiv_quotient_mv_polynomial", ["mv_polynomial"]], ["add", "def", "quotient_equiv_quotient_mv_polynomial", ["mv_polynomial"]], ["add", "theorem", "quotient_map_C_eq_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1614019732, "sha": "cc9d3ab1", "message": "feat(algebra/module,linear_algebra): generalize `smul_eq_zero` (#6199)\nMoves the theorem on division rings `smul_eq_zero` to a typeclass `no_zero_smul_divisors` with instances for the previously existing cases. The motivation for this change is that #6178 added another `smul_eq_zero`, which could be captured neatly as an instance of the typeclass.\nI didn't spend a lot of time yet on figuring out all the necessary instances, first let's see whether this compiles.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "of_algebra_map_injective", ["algebra", "no_zero_smul_divisors"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "eq_zero_of_eq_neg", []], ["mod", "theorem", "eq_zero_of_smul_two_eq_zero", []], ["add", "theorem", "no_zero_smul_divisors", ["nat"]], ["mod", "theorem", "ne_neg_of_ne_zero", []], ["mod", "theorem", "smul_eq_zero", []], ["del", "theorem", "smul_nat_eq_zero", []]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": "src/algebra/module/prod.lean", "newPath": "src/algebra/module/prod.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}]}, {"timestamp": 1614014054, "sha": "7abfbc92", "message": "doc(references.bib): add witt vector references and normalize (#6366)\nNow that we're actually displaying these bib links we should pay more attention to them.\nTwo commits: one adds references for the Witt vector files, the other normalizes the bib file. We can drop the second if people don't care.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/compare.lean", "newPath": "src/ring_theory/witt_vector/compare.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/identities.lean", "newPath": "src/ring_theory/witt_vector/identities.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/init_tail.lean", "newPath": "src/ring_theory/witt_vector/init_tail.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/mul_p.lean", "newPath": "src/ring_theory/witt_vector/mul_p.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/teichmuller.lean", "newPath": "src/ring_theory/witt_vector/teichmuller.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/verschiebung.lean", "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}]}, {"timestamp": 1614014053, "sha": "70d71149", "message": "feat(nat/choose): lemmas regarding binomial coefficients (#6362)", "changes": [{"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": [["add", "theorem", "choose_eq_factorial_div_factorial'", ["nat", "prime"]], ["add", "theorem", "choose_mul", ["nat", "prime"]]]}]}, {"timestamp": 1614014050, "sha": "4daac664", "message": "chore(field_theory/mv_polynomial): generalised to comm_ring and module doc (#6341)\nThis PR generalises most of `field_theory/mv_polynomial` from polynomial rings over fields to polynomial rings over commutative rings. This is put into a separate file. \nAlso renamed the field to K and did one tiny golf.", "changes": [{"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["mod", "theorem", "dim_mv_polynomial", ["mv_polynomial"]], ["del", "theorem", "is_basis_monomials", ["mv_polynomial"]], ["del", "theorem", "map_range_eq_map", ["mv_polynomial"]], ["del", "theorem", "mem_restrict_degree", ["mv_polynomial"]], ["del", "theorem", "mem_restrict_degree_iff_sup", ["mv_polynomial"]], ["del", "theorem", "mem_restrict_total_degree", ["mv_polynomial"]], ["mod", "theorem", "quotient_mk_comp_C_injective", ["mv_polynomial"]], ["del", "def", "restrict_degree", ["mv_polynomial"]], ["del", "def", "restrict_total_degree", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/mv_polynomial/basic.lean", "changes": [["add", "theorem", "is_basis_monomials", ["mv_polynomial"]], ["add", "theorem", "map_range_eq_map", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_degree", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_degree_iff_sup", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_total_degree", ["mv_polynomial"]], ["add", "def", "restrict_degree", ["mv_polynomial"]], ["add", "def", "restrict_total_degree", ["mv_polynomial"]]]}]}, {"timestamp": 1614003162, "sha": "6d2726c6", "message": "feat(number_theory/bernoulli): definition and properties of Bernoulli numbers (#6363)", "changes": [{"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["add", "def", "bernoulli'", []], ["add", "theorem", "bernoulli'_def'", []], ["add", "theorem", "bernoulli'_def", []], ["add", "theorem", "bernoulli'_four", []], ["add", "theorem", "bernoulli'_odd_eq_zero", []], ["add", "theorem", "bernoulli'_one", []], ["add", "theorem", "bernoulli'_power_series", []], ["add", "theorem", "bernoulli'_spec'", []], ["add", "theorem", "bernoulli'_spec", []], ["add", "theorem", "bernoulli'_three", []], ["add", "theorem", "bernoulli'_two", []], ["add", "theorem", "bernoulli'_zero", []], ["mod", "def", "bernoulli", []], ["del", "theorem", "bernoulli_def'", []], ["del", "theorem", "bernoulli_def", []], ["add", "theorem", "bernoulli_eq_bernoulli'", []], ["del", "theorem", "bernoulli_four", []], ["del", "theorem", "bernoulli_odd_eq_zero", []], ["mod", "theorem", "bernoulli_one", []], ["del", "theorem", "bernoulli_power_series", []], ["del", "theorem", "bernoulli_spec'", []], ["del", "theorem", "bernoulli_spec", []], ["del", "theorem", "bernoulli_three", []], ["del", "theorem", "bernoulli_two", []], ["mod", "theorem", "bernoulli_zero", []], ["add", "theorem", "sum_bernoulli'", []], ["mod", "theorem", "sum_bernoulli", []]]}]}, {"timestamp": 1614003161, "sha": "46fb0d8b", "message": "feat(big_operators/intervals): lemma on dependent double sum (#6361)", "changes": [{"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["add", "theorem", "sum_Ico_Ico_comm", ["finset"]]]}]}, {"timestamp": 1614003160, "sha": "12bb9aee", "message": "chore(linear_algebra/*): split lines and doc `direct_sum/tensor_product` (#6360)\nThis PR provides a short module doc to `direct_sum/tensor_product` (the file contains only one result). Furthermore, it splits lines in the `linear_algebra` folder.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": [["mod", "theorem", "trace_pow_card", ["finite_field"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/tensor_product.lean", "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "trace_eq_matrix_trace", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}]}, {"timestamp": 1614003159, "sha": "a10c19d0", "message": "doc(group_theory/*): module docs for `quotient_group` and `presented_group` (#6358)", "changes": [{"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": [["mod", "theorem", "unique", ["presented_group", "to_group"]], ["mod", "def", "to_group", ["presented_group"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1614003158, "sha": "590442ad", "message": "feat(topology/subset_properties): locally finite family on a compact space is finite (#6352)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "def", "fintype_of_univ_finite", ["set"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "locally_finite_of_finite", []], ["add", "theorem", "locally_finite_of_fintype", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "finite_cover_nhds", []], ["add", "theorem", "finite_cover_nhds_interior", []], ["add", "theorem", "finite_nonempty_of_compact", ["locally_finite"]], ["add", "theorem", "finite_of_compact", ["locally_finite"]]]}]}, {"timestamp": 1614003157, "sha": "120feb11", "message": "refactor(order/filter,topology): review API (#6347)\n### Filters\n* move old `filter.map_comap` to `filter.map_comap_of_mem`;\n* add a new `filter.map_comap` that doesn't assume `range m ∈ f` but\n gives `map m (comap m f) = f ⊓ 𝓟 (range m)` instead of\n `map m (comap m f) = f`;\n* add `filter.comap_le_comap_iff`, use it to golf a couple of proofs;\n* move some lemmas using `filter.map_comap`/`filter.map_comap_of_mem`\n closure to these lemmas;\n* use `function.injective m` instead of `∀ x y, m x = m y → x = y` in\n some lemmas;\n* drop `filter.le_map_comap_of_surjective'`,\n `filter.map_comap_of_surjective'`, and\n `filter.le_map_comap_of_surjective`: the inequalities easily follow\n from equalities, and `filter.map_comap_of_surjective'` is just\n `filter.map_comap_of_mem`+`filter.mem_sets_of_superset`;\n### Topology\n* add `closed_embedding_subtype_coe`, `ennreal.open_embedding_coe`;\n* drop `inducing_open`, `inducing_is_closed`, `embedding_open`, and\n `embedding_is_closed` replace them with `inducing.is_open_map` and\n `inducing.is_closed_map`;\n* move old `inducing.map_nhds_eq` to `inducing.map_nhds_of_mem`, the\n new `inducing.map_nhds_eq` says `map f (𝓝 a) = 𝓝[range f] (f a)`;\n* add `inducing.is_closed_iff`;\n* move old `embedding.map_nhds_eq` to `embedding.map_nhds_of_mem`, the\n new `embedding.map_nhds_eq` says `map f (𝓝 a) = 𝓝[range f] (f a)`;\n* add `open_embedding.map_nhds_eq`;\n* change signature of `is_closed_induced_iff` to match other similar\n lemmas;\n* move old `map_nhds_induced_eq` to `map_nhds_induced_of_mem`, the new\n `map_nhds_induced_eq` give `𝓝[range f] (f a)` instead of `𝓝 (f a)`.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_le_comap_iff", ["filter"]], ["del", "theorem", "le_map_comap_of_surjective'", ["filter"]], ["del", "theorem", "le_map_comap_of_surjective", ["filter"]], ["mod", "theorem", "map_comap", ["filter"]], ["add", "theorem", "map_comap_of_mem", ["filter"]], ["del", "theorem", "map_comap_of_surjective'", ["filter"]], ["mod", "theorem", "map_inj", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "closed_embedding_subtype_coe", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "nhds_coe_coe", ["ennreal"]], ["add", "theorem", "open_embedding_coe", ["ennreal"]], ["mod", "theorem", "tendsto_to_nnreal", ["ennreal"]], ["mod", "theorem", "tendsto_to_real", ["ennreal"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "theorem", "map_nhds_eq", ["embedding"]], ["add", "theorem", "map_nhds_of_mem", ["embedding"]], ["del", "theorem", "embedding_is_closed", []], ["del", "theorem", "embedding_open", []], ["add", "theorem", "is_closed_iff", ["inducing"]], ["add", "theorem", "is_closed_map", ["inducing"]], ["add", "theorem", "is_open_map", ["inducing"]], ["mod", "theorem", "map_nhds_eq", ["inducing"]], ["add", "theorem", "map_nhds_of_mem", ["inducing"]], ["del", "theorem", "inducing_is_closed", []], ["del", "theorem", "inducing_open", []], ["add", "theorem", "map_nhds_eq", ["open_embedding"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "map_nhds_induced_eq", []], ["add", "theorem", "map_nhds_induced_of_mem", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1614003156, "sha": "26e6d4cb", "message": "feat(algebra/lie/{subalgebra,submodule}): grab bag of new lemmas (#6342)\nI'm splitting these off from other work to simplify subsequent reviews.\nCosmetic changes aside, the following summarises what I am proposing:\nNew definitions:\n - `lie_subalgebra.of_le`\nDefinition tweaks:\n - `lie_hom.range` [use coercion instead of `lie_hom.to_linear_map`]\n - `lie_ideal.map` [factor through `submodule.map` to avoid dropping all the way down to `set.image`]\nNew lemmas:\n - `lie_ideal.coe_to_lie_subalgebra_to_submodule`\n - `lie_ideal.incl_range`\n - `lie_hom.ideal_range_eq_lie_span_range`\n - `lie_hom.is_ideal_morphism_iff`\n - `lie_subalgebra.mem_range`\n - `lie_subalgebra.mem_map`\n - `lie_subalgebra.mem_of_le`\n - `lie_subalgebra.of_le_eq_comap_incl`\n - `lie_subalgebra.exists_lie_ideal_coe_eq_iff`\n - `lie_subalgebra.exists_nested_lie_ideal_coe_eq_iff`\n - `submodule.exists_lie_submodule_coe_eq_iff`\n - `lie_submodule.coe_lie_span_submodule_eq_iff`\nDeleted lemma:\n - `lie_hom.range_bracket`\nNew simp attributes:\n - `lie_subalgebra.mem_top`\n - `lie_submodule.mem_top`", "changes": [{"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "mem_range", ["lie_hom"]], ["mod", "def", "range", ["lie_hom"]], ["del", "theorem", "range_bracket", ["lie_hom"]], ["mod", "theorem", "range_coe", ["lie_hom"]], ["mod", "def", "comap", ["lie_subalgebra"]], ["add", "theorem", "incl_range", ["lie_subalgebra"]], ["mod", "def", "map", ["lie_subalgebra"]], ["add", "theorem", "mem_map", ["lie_subalgebra"]], ["mod", "theorem", "mem_map_submodule", ["lie_subalgebra"]], ["add", "theorem", "mem_of_le", ["lie_subalgebra"]], ["mod", "theorem", "mem_top", ["lie_subalgebra"]], ["add", "def", "of_le", ["lie_subalgebra"]], ["add", "theorem", "of_le_eq_comap_incl", ["lie_subalgebra"]], ["del", "theorem", "range_incl", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "theorem", "ideal_range_eq_lie_span_range", ["lie_hom"]], ["add", "theorem", "is_ideal_morphism_iff", ["lie_hom"]], ["add", "theorem", "coe_to_lie_subalgebra_to_submodule", ["lie_ideal"]], ["add", "theorem", "incl_range", ["lie_ideal"]], ["mod", "def", "map", ["lie_ideal"]], ["add", "theorem", "exists_lie_ideal_coe_eq_iff", ["lie_subalgebra"]], ["add", "theorem", "exists_nested_lie_ideal_coe_eq_iff", ["lie_subalgebra"]], ["add", "theorem", "coe_lie_span_submodule_eq_iff", ["lie_submodule"]], ["mod", "theorem", "mem_top", ["lie_submodule"]], ["add", "theorem", "exists_lie_submodule_coe_eq_iff", ["submodule"]]]}]}, {"timestamp": 1614003155, "sha": "78eb83a3", "message": "feat(linear_algebra/pi): add `pi.lsum` (#6335)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "coe_fn_sum", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "theorem", "apply_single", ["linear_map"]], ["add", "theorem", "coe_single", ["linear_map"]], ["add", "def", "lsum", ["linear_map"]], ["add", "theorem", "pi_ext'", ["linear_map"]], ["add", "theorem", "pi_ext'_iff", ["linear_map"]], ["add", "theorem", "pi_ext", ["linear_map"]], ["add", "theorem", "pi_ext_iff", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "coprod_comp_prod", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["del", "theorem", "pi_ext'", ["linear_map"]], ["del", "theorem", "pi_ext'_iff", ["linear_map"]], ["del", "theorem", "pi_ext", ["linear_map"]], ["del", "theorem", "pi_ext_iff", ["linear_map"]]]}]}, {"timestamp": 1614003154, "sha": "aa730c63", "message": "feat(linear_algebra): a module has a unique submodule iff it has a unique element (#6281)\nAlso strengthens the related lemmas about subgroup and submonoid", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "bot_ne_top", ["submodule"]], ["add", "theorem", "bot_to_add_submonoid", ["submodule"]], ["del", "theorem", "eq_bot_of_zero_eq_one", ["submodule"]], ["add", "theorem", "nontrivial_iff", ["submodule"]], ["add", "theorem", "subsingleton_iff", ["submodule"]], ["add", "theorem", "top_to_add_submonoid", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "is_basis_empty", []], ["del", "theorem", "is_basis_empty_bot", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}]}, {"timestamp": 1614003153, "sha": "ffb6a582", "message": "feat(data/sigma/basic): add a more convenient ext lemma for equality of sigma types over subtypes (#6257)", "changes": [{"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "subtype_ext", ["psigma"]], ["add", "theorem", "subtype_ext_iff", ["psigma"]], ["add", "theorem", "subtype_ext", ["sigma"]], ["add", "theorem", "subtype_ext_iff", ["sigma"]]]}]}, {"timestamp": 1614003152, "sha": "9d54837a", "message": "feat(data/polynomial/degree): lemmas on nat_degree and behaviour under multiplication by constants (#6224)\nThese lemmas extend the API for nat_degree\nI intend to use them to work with integrality statements", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "eq_C_of_nat_degree_eq_zero", ["polynomial"]], ["mod", "theorem", "eq_C_of_nat_degree_le_zero", ["polynomial"]], ["mod", "theorem", "le_nat_degree_of_coe_le_degree", ["polynomial"]], ["add", "theorem", "leading_coeff_ne_zero", ["polynomial"]], ["mod", "theorem", "nat_degree_pos_iff_degree_pos", ["polynomial"]], ["mod", "theorem", "ne_zero_of_coe_le_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "eq_nat_degree_of_le_mem_support", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_eq_of_mul_eq_one", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_eq_of_mul_ne_zero", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_eq_of_no_zero_divisors", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_le", ["polynomial"]], ["add", "theorem", "nat_degree_add_coeff_mul", ["polynomial"]], ["add", "theorem", "nat_degree_le_iff_coeff_eq_zero", ["polynomial"]], ["add", "theorem", "nat_degree_lt_coeff_mul", ["polynomial"]], ["add", "theorem", "nat_degree_mul_C_eq_of_mul_eq_one", ["polynomial"]], ["add", "theorem", "nat_degree_mul_C_eq_of_mul_ne_zero", ["polynomial"]], ["add", "theorem", "nat_degree_mul_C_eq_of_no_zero_divisors", ["polynomial"]], ["add", "theorem", "nat_degree_mul_C_le", ["polynomial"]]]}]}, {"timestamp": 1613990544, "sha": "87a021cd", "message": "feat(data/quot): `quotient.rec_on_subsingleton` with implicit setoid (#6346)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}]}, {"timestamp": 1613990543, "sha": "69b93fcb", "message": "fix(data/finsupp/basic): delta-reduce the definition of coe_fn_injective (#6344)\nWithout this, `apply coe_fn_injective` leaves a messy goal that usually has to be `dsimp`ed in order to make progress with `rw`.\nWith this change, `dsimp` now fails as the goal is already fully delta-reduced.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "coe_fn_injective", ["finsupp"]]]}]}, {"timestamp": 1613982685, "sha": "0e519766", "message": "feat(data/polynomial/reverse): Trailing degree is multiplicative (#6351)\nUses `polynomial.reverse` to prove that `nat_trailing_degree` behaves well under multiplication.", "changes": [{"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "nat_trailing_degree_le_nat_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["add", "theorem", "coeff_reverse", ["polynomial"]], ["add", "theorem", "nat_degree_eq_reverse_nat_degree_add_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "reflect_neg", ["polynomial"]], ["add", "theorem", "reflect_sub", ["polynomial"]], ["add", "theorem", "reverse_eq_zero", ["polynomial"]], ["add", "theorem", "reverse_leading_coeff", ["polynomial"]], ["add", "theorem", "reverse_nat_degree", ["polynomial"]], ["add", "theorem", "reverse_nat_degree_le", ["polynomial"]], ["add", "theorem", "reverse_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "reverse_neg", ["polynomial"]], ["add", "theorem", "reverse_trailing_coeff", ["polynomial"]], ["add", "theorem", "trailing_coeff_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "nat_trailing_degree_mul", ["polynomial"]]]}]}, {"timestamp": 1613977113, "sha": "a3d951bc", "message": "feat(data/nat/digits): digits injective at fixed base (#6338)", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "injective", ["nat", "digits"]], ["add", "theorem", "digits_inj_iff", ["nat"]]]}]}, {"timestamp": 1613977112, "sha": "2b6dec0b", "message": "feat(algebraic_geometry/prime_spectrum): specialization order (#6286)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["add", "theorem", "as_ideal_le_as_ideal", ["prime_spectrum"]], ["add", "theorem", "as_ideal_lt_as_ideal", ["prime_spectrum"]], ["add", "theorem", "le_iff_mem_closure", ["prime_spectrum"]], ["add", "theorem", "vanishing_ideal_singleton", ["prime_spectrum"]]]}]}, {"timestamp": 1613963615, "sha": "dc781774", "message": "chore(scripts): update nolints.txt (#6354)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613963614, "sha": "2134d0c1", "message": "feat(algebra/group_power/basic): `abs_lt_abs_of_sqr_lt_sqr` (#6277)\nThese lemmas are (almost) the converses of some of the lemmas I added in #5933.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "abs_le_abs_of_sqr_le_sqr", []], ["add", "theorem", "abs_le_of_sqr_le_sqr'", []], ["add", "theorem", "abs_le_of_sqr_le_sqr", []], ["add", "theorem", "abs_lt_abs_of_sqr_lt_sqr", []], ["add", "theorem", "abs_lt_of_sqr_lt_sqr'", []], ["add", "theorem", "abs_lt_of_sqr_lt_sqr", []], ["mod", "theorem", "abs_sqr", []], ["mod", "theorem", "sqr_abs", []]]}]}, {"timestamp": 1613952075, "sha": "b8b87559", "message": "feat(data/list/basic): repeat injectivity (#6337)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "eq_of_mem_repeat", ["list"]], ["add", "theorem", "mem_repeat", ["list"]], ["add", "theorem", "repeat_left_inj'", ["list"]], ["add", "theorem", "repeat_left_inj", ["list"]], ["add", "theorem", "repeat_left_injective", ["list"]], ["add", "theorem", "repeat_right_inj", ["list"]], ["add", "theorem", "repeat_right_injective", ["list"]]]}]}, {"timestamp": 1613943683, "sha": "87f8db2e", "message": "feat(data/dfinsupp): add coe lemmas (#6343)\nThese lemmas already exist for `finsupp`, let's add them for `dfinsupp` too.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "add_apply", ["dfinsupp"]], ["add", "theorem", "coe_add", ["dfinsupp"]], ["add", "theorem", "coe_fn_injective", ["dfinsupp"]], ["add", "theorem", "coe_neg", ["dfinsupp"]], ["add", "theorem", "coe_smul", ["dfinsupp"]], ["add", "theorem", "coe_sub", ["dfinsupp"]], ["mod", "theorem", "neg_apply", ["dfinsupp"]], ["mod", "theorem", "smul_apply", ["dfinsupp"]], ["mod", "theorem", "sub_apply", ["dfinsupp"]]]}]}, {"timestamp": 1613943682, "sha": "96ae2ad1", "message": "docs(undergrad.yaml): recent changes (#6313)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1613933111, "sha": "4355d171", "message": "chore(topology/order): drop an unneeded argument (#6345)\n`closure_induced` doesn't need `f` to be injective.", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "closure_eq_preimage_closure_image", ["inducing"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "closure_induced", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1613933110, "sha": "ab03ebe7", "message": "feat(data/list/basic): drop_eq_nil_iff_le (#6336)\nThe iff version of a recently added lemma.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "drop_eq_nil_iff_le", ["list"]]]}]}, {"timestamp": 1613920942, "sha": "473bb7d4", "message": "feat(topology/locally_constant): basics on locally constant functions (#6192)\nFrom `lean-liquid`", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "not_nonempty_empty", ["set"]]]}, {"oldPath": null, "newPath": "src/topology/locally_constant/algebra.lean", "changes": [["add", "theorem", "div_apply", ["locally_constant"]], ["add", "theorem", "inv_apply", ["locally_constant"]], ["add", "theorem", "mul_apply", ["locally_constant"]], ["add", "theorem", "one_apply", ["locally_constant"]]]}, {"oldPath": null, "newPath": "src/topology/locally_constant/basic.lean", "changes": [["add", "theorem", "apply_eq_of_is_preconnected", ["is_locally_constant"]], ["add", "theorem", "comp", ["is_locally_constant"]], ["add", "theorem", "comp_continuous", ["is_locally_constant"]], ["add", "theorem", "comp₂", ["is_locally_constant"]], ["add", "theorem", "const", ["is_locally_constant"]], ["add", "theorem", "div", ["is_locally_constant"]], ["add", "theorem", "exists_open", ["is_locally_constant"]], ["add", "theorem", "iff_continuous", ["is_locally_constant"]], ["add", "theorem", "iff_continuous_bot", ["is_locally_constant"]], ["add", "theorem", "iff_eventually_eq", ["is_locally_constant"]], ["add", "theorem", "iff_exists_open", ["is_locally_constant"]], ["add", "theorem", "iff_is_const", ["is_locally_constant"]], ["add", "theorem", "inv", ["is_locally_constant"]], ["add", "theorem", "is_open_fiber", ["is_locally_constant"]], ["add", "theorem", "mul", ["is_locally_constant"]], ["add", "theorem", "of_constant", ["is_locally_constant"]], ["add", "theorem", "of_discrete", ["is_locally_constant"]], ["add", "theorem", "one", ["is_locally_constant"]], ["add", "theorem", "prod_mk", ["is_locally_constant"]], ["add", "theorem", "range_finite", ["is_locally_constant"]], ["add", "def", "is_locally_constant", []], ["add", "theorem", "apply_eq_of_is_preconnected", ["locally_constant"]], ["add", "theorem", "apply_eq_of_preconnected_space", ["locally_constant"]], ["add", "theorem", "coe_comap", ["locally_constant"]], ["add", "theorem", "coe_inj", ["locally_constant"]], ["add", "theorem", "coe_injective", ["locally_constant"]], ["add", "theorem", "coe_mk", ["locally_constant"]], ["add", "def", "comap", ["locally_constant"]], ["add", "theorem", "comap_comp", ["locally_constant"]], ["add", "theorem", "comap_const", ["locally_constant"]], ["add", "theorem", "comap_id", ["locally_constant"]], ["add", "theorem", "congr_arg", ["locally_constant"]], ["add", "theorem", "congr_fun", ["locally_constant"]], ["add", "def", "const", ["locally_constant"]], ["add", "theorem", "eq_const", ["locally_constant"]], ["add", "theorem", "exists_eq_const", ["locally_constant"]], ["add", "theorem", "ext", ["locally_constant"]], ["add", "theorem", "ext_iff", ["locally_constant"]], ["add", "def", "map", ["locally_constant"]], ["add", "theorem", "map_apply", ["locally_constant"]], ["add", "theorem", "map_comp", ["locally_constant"]], ["add", "theorem", "map_id", ["locally_constant"]], ["add", "theorem", "range_finite", ["locally_constant"]], ["add", "theorem", "to_fun_eq_coe", ["locally_constant"]], ["add", "structure", "locally_constant", []]]}]}, {"timestamp": 1613887598, "sha": "f470cc62", "message": "feat(measure_theory/interval_integral): add simp attribute to `integral_const` (#6334)\nBy adding a `simp` attribute to `interval_integral.integral_const`, the likes of the following become possible:\n```\nimport measure_theory.interval_integral\nexample : ∫ x:ℝ in 5..19, (12:ℝ) = 168 := by norm_num\n```", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "integral_const", ["interval_integral"]]]}]}, {"timestamp": 1613870137, "sha": "4d4c7bb9", "message": "chore(scripts): update nolints.txt (#6332)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613855400, "sha": "93d17601", "message": "chore(topology/bases): golf a proof (#6326)\nAlso add some supporting lemmas", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "dense_iff", ["topological_space", "is_topological_basis"]], ["add", "theorem", "mem_closure_iff", ["topological_space", "is_topological_basis"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "cluster_pt_iff", ["filter", "has_basis"]], ["add", "theorem", "mem_closure_iff_nhds_basis'", []]]}]}, {"timestamp": 1613855399, "sha": "08ea23b2", "message": "refactor(group_theory/free_*): remove API duplicated by lift, promote lift functions to equivs (#6311)\nThis removes:\n* `free_group.to_group.to_fun` and `free_group.to_group`, as these are both subsumed by the stronger `lift`.\n* `abelianization.hom_equiv` as this is now `abelianization.lift.symm`\n* `free_abelian_group.hom_equiv` as this is now `free_abelian_group.lift.symm`", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["del", "def", "hom_equiv", ["abelianization"]], ["mod", "def", "lift", ["abelianization"]]]}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["del", "def", "hom_equiv", ["free_abelian_group"]], ["del", "theorem", "hom_equiv_apply", ["free_abelian_group"]], ["del", "theorem", "hom_equiv_symm_apply", ["free_abelian_group"]], ["mod", "def", "lift", ["free_abelian_group"]]]}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["add", "def", "aux", ["free_group", "lift"]], ["add", "theorem", "mk", ["free_group", "lift"]], ["add", "theorem", "of", ["free_group", "lift"]], ["add", "theorem", "of_eq", ["free_group", "lift"]], ["add", "theorem", "range_eq_closure", ["free_group", "lift"]], ["add", "theorem", "range_subset", ["free_group", "lift"]], ["add", "theorem", "unique", ["free_group", "lift"]], ["mod", "def", "lift", ["free_group"]], ["add", "theorem", "lift_eq_prod_map", ["free_group"]], ["add", "theorem", "map_eq_lift", ["free_group"]], ["del", "theorem", "map_eq_to_group", ["free_group"]], ["mod", "def", "prod", ["free_group"]], ["add", "theorem", "lift", ["free_group", "red", "step"]], ["del", "theorem", "to_group", ["free_group", "red", "step"]], ["del", "def", "aux", ["free_group", "to_group"]], ["del", "theorem", "mk", ["free_group", "to_group"]], ["del", "theorem", "of", ["free_group", "to_group"]], ["del", "theorem", "of_eq", ["free_group", "to_group"]], ["del", "theorem", "range_eq_closure", ["free_group", "to_group"]], ["del", "theorem", "range_subset", ["free_group", "to_group"]], ["del", "def", "to_fun", ["free_group", "to_group"]], ["del", "theorem", "unique", ["free_group", "to_group"]], ["del", "def", "to_group", ["free_group"]], ["del", "theorem", "to_group_eq_prod_map", ["free_group"]]]}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": [["mod", "theorem", "of", ["presented_group", "to_group"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}]}, {"timestamp": 1613842932, "sha": "dccc5421", "message": "fix(algebra/group/pi): remove unnecessary add_monoid requirement from pi.single_zero (#6325)\nFollows on from #6317", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["mod", "theorem", "single_zero", ["pi"]], ["add", "def", "single", ["zero_hom"]]]}]}, {"timestamp": 1613842931, "sha": "f0aad503", "message": "feat(data/equiv/basic): injective iff injective after composing with equiv (#6283)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "bijective_comp", ["equiv"]], ["add", "theorem", "comp_bijective", ["equiv"]], ["add", "theorem", "comp_injective", ["equiv"]], ["add", "theorem", "comp_surjective", ["equiv"]], ["add", "theorem", "injective_comp", ["equiv"]], ["add", "theorem", "surjective_comp", ["equiv"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "of_comp_iff'", ["function", "bijective"]], ["add", "theorem", "of_comp_iff", ["function", "bijective"]], ["add", "theorem", "of_comp_iff'", ["function", "injective"]], ["add", "theorem", "of_comp_iff", ["function", "injective"]], ["add", "theorem", "of_comp_iff'", ["function", "surjective"]], ["add", "theorem", "of_comp_iff", ["function", "surjective"]]]}]}, {"timestamp": 1613842930, "sha": "ee8708e4", "message": "feat(algebra/regular): define regular elements (#6282)\nThe goal of this PR is to start the API for regular elements. The final goal is to talk about non-zero-divisors.\nZulip discussion:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/is_regular", "changes": [{"oldPath": null, "newPath": "src/algebra/regular.lean", "changes": [["add", "theorem", "mul", ["is_left_regular"]], ["add", "theorem", "of_mul", ["is_left_regular"]], ["add", "theorem", "subsingleton", ["is_left_regular"]], ["add", "def", "is_left_regular", []], ["add", "theorem", "is_left_regular_of_left_cancel_semigroup", []], ["add", "theorem", "is_left_regular_of_mul_eq_one", []], ["add", "theorem", "is_left_regular_zero_iff_subsingleton", []], ["add", "theorem", "and_of_mul_of_mul", ["is_regular"]], ["add", "theorem", "subsingleton", ["is_regular"]], ["add", "structure", "is_regular", []], ["add", "theorem", "is_regular_iff_subsingleton", []], ["add", "theorem", "is_regular_mul_and_mul_iff", []], ["add", "theorem", "is_regular_mul_iff", []], ["add", "theorem", "is_regular_of_cancel_monoid", []], ["add", "theorem", "is_regular_of_cancel_monoid_with_zero", []], ["add", "theorem", "is_regular_one", []], ["add", "theorem", "mul", ["is_right_regular"]], ["add", "theorem", "of_mul", ["is_right_regular"]], ["add", "theorem", "subsingleton", ["is_right_regular"]], ["add", "def", "is_right_regular", []], ["add", "theorem", "is_right_regular_of_mul_eq_one", []], ["add", "theorem", "is_right_regular_of_right_cancel_semigroup", []], ["add", "theorem", "is_right_regular_zero_iff_subsingleton", []], ["add", "theorem", "is_regular", ["is_unit"]], ["add", "theorem", "mul_is_left_regular_iff", []], ["add", "theorem", "mul_is_right_regular_iff", []], ["add", "theorem", "not_is_left_regular_zero_iff", []], ["add", "theorem", "not_is_right_regular_zero_iff", []], ["add", "theorem", "is_regular", ["units"]]]}]}, {"timestamp": 1613833259, "sha": "1855bd59", "message": "chore(*): split lines (#6323)", "changes": [{"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": [["mod", "def", "comm_group", ["eckmann_hilton"]]]}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "nontrivial_iff_exists_ne_one", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "nontrivial_iff_exists_ne_one", ["submonoid"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "exists_prime_spectrum_prod_le_and_ne_bot_of_domain", []], ["mod", "theorem", "finite_of_linear_independent", []]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["mod", "theorem", "Inf_to_submonoid", ["subring"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}]}, {"timestamp": 1613821941, "sha": "ed55502f", "message": "doc(algebraic_geometry/is_open_comap_C): add reference to Stacks project (#6322)\nUpdated the doc-strings to reference the Stacks project.\nZulip chat:\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/stacks.20tags", "changes": [{"oldPath": "src/algebraic_geometry/is_open_comap_C.lean", "newPath": "src/algebraic_geometry/is_open_comap_C.lean", "changes": []}]}, {"timestamp": 1613821940, "sha": "52e29379", "message": "feat(topology): the currying homeomorphism (#6319)", "changes": [{"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["add", "theorem", "continuous_curry'", ["continuous_map"]], ["add", "theorem", "continuous_curry", ["continuous_map"]], ["add", "theorem", "continuous_of_continuous_uncurry", ["continuous_map"]], ["add", "theorem", "continuous_uncurry", ["continuous_map"]], ["add", "theorem", "continuous_uncurry_of_continuous", ["continuous_map"]], ["add", "def", "curry'", ["continuous_map"]], ["add", "def", "curry", ["continuous_map"]], ["add", "def", "uncurry", ["continuous_map"]], ["add", "def", "curry", ["homeomorph"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1613821939, "sha": "26d287cc", "message": "doc(ring_theory/*): two module docs (#6318)\nThis PR provides module docs for `ring_theory.polynomial.scale_roots` as well as `ring_theory.multiplicity`. Furthermore, some lines are split in those two files.", "changes": [{"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}]}, {"timestamp": 1613821939, "sha": "c7c40a7d", "message": "feat(*/pi): add lemmas about how `single` interacts with operators (#6317)\nThis also adds a missing pi instances for `monoid_with_zero`.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["mod", "def", "single", ["add_monoid_hom"]], ["add", "def", "single", ["mul_hom"]], ["add", "theorem", "single_add", ["pi"]], ["add", "theorem", "single_mul", ["pi"]], ["add", "theorem", "single_neg", ["pi"]], ["add", "theorem", "single_sub", ["pi"]], ["add", "theorem", "single_zero", ["pi"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "single_smul'", ["pi"]], ["add", "theorem", "single_smul", ["pi"]]]}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "apply_single", ["pi"]], ["add", "theorem", "apply_single₂", ["pi"]]]}, {"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": []}]}, {"timestamp": 1613811734, "sha": "4d2dcdb5", "message": "chore(*): fix broken Zulip archive links (#6321)", "changes": [{"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1613785475, "sha": "3e381ad0", "message": "chore(ring_theory/*): split lines (#6316)", "changes": [{"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["mod", "theorem", "exists_finite_support", ["free_comm_ring"]], ["mod", "theorem", "restriction_of", ["free_comm_ring"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "mem_radical_of_pow_mem", ["ideal"]], ["mod", "theorem", "span_singleton_mul_span_singleton", ["ideal"]], ["mod", "theorem", "lift_of_surjective_comp", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["mod", "theorem", "le_jacobson", ["ideal", "is_local"]], ["mod", "theorem", "is_primary_of_is_maximal_radical", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1613785474, "sha": "32b9b214", "message": "refactor(linear_algebra/pi): add `linear_map.single` to match `add_monoid_hom.single` (#6315)\nThis changes the definition of `std_basis` to be exactly `linear_map.single`, but proves equality with the old definition.\nIn future, it might make sense to remove `std_basis` entirely.", "changes": [{"oldPath": "src/linear_algebra/pi.lean", "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "single", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["mod", "def", "std_basis", ["linear_map"]], ["add", "theorem", "std_basis_eq_pi_diag", ["linear_map"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1613785473, "sha": "d483bc2c", "message": "chore(data/indicator_function): add a formula for the support of `indicator` (#6314)\n* rename `set.support_indicator` to `set.support_indicator_subset`;\n* add a new `set.support_indicator`;\n* add `function.support_comp_eq_preimage`.", "changes": [{"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["mod", "theorem", "support_indicator", ["set"]], ["add", "theorem", "support_indicator_subset", ["set"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1613782886, "sha": "3ab9818f", "message": "chore(scripts): update nolints.txt (#6320)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613744059, "sha": "845654a1", "message": "feat(analysis/calculus): define a smooth bump function (#4458)\nDefine an infinitely smooth function which is `1` on the closed ball of radius `1` and is `0` outside of the open ball of radius `2`.", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["add", "theorem", "exists_times_cont_diff_bump_function_of_mem_nhds", []], ["del", "theorem", "smooth", ["exp_neg_inv_glue"]], ["add", "theorem", "eventually_eq_one", ["smooth_bump_function"]], ["add", "theorem", "eventually_eq_one_of_norm_lt_one", ["smooth_bump_function"]], ["add", "theorem", "le_one", ["smooth_bump_function"]], ["add", "theorem", "lt_one_of_one_lt_norm", ["smooth_bump_function"]], ["add", "theorem", "nonneg", ["smooth_bump_function"]], ["add", "theorem", "one_of_norm_le_one", ["smooth_bump_function"]], ["add", "theorem", "pos_of_norm_lt_two", ["smooth_bump_function"]], ["add", "theorem", "support_eq", ["smooth_bump_function"]], ["add", "theorem", "zero_of_two_le_norm", ["smooth_bump_function"]], ["add", "def", "smooth_bump_function", []], ["add", "theorem", "le_one", ["smooth_transition"]], ["add", "theorem", "lt_one_of_lt_one", ["smooth_transition"]], ["add", "theorem", "nonneg", ["smooth_transition"]], ["add", "theorem", "one_of_one_le", ["smooth_transition"]], ["add", "theorem", "pos_denom", ["smooth_transition"]], ["add", "theorem", "pos_of_pos", ["smooth_transition"]], ["add", "theorem", "zero_of_nonpos", ["smooth_transition"]], ["add", "def", "smooth_transition", []]]}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["add", "theorem", "support_comp_eq_preimage", ["function"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "image_closure", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1613737384, "sha": "f6eef43c", "message": "doc(ring_theory): move some module docstring to correct place (#6312)", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1613737383, "sha": "aaab8375", "message": "doc(ring_theory/witt_vector/witt_polynomial): move module docstring up (#6310)", "changes": [{"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}]}, {"timestamp": 1613737382, "sha": "0df19987", "message": "doc(set_theory/*): more documentation about cardinals and ordinals (#6247)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "le_def", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1613737381, "sha": "114f8ef8", "message": "chore(data/buffer/parser/numeral): derive mono for numeral (#5463)\nThanks to Rob Lewis, using classes, instances, and the `delta_instance_handler`, transferring over instances becomes very easy.", "changes": [{"oldPath": "src/data/buffer/parser/numeral.lean", "newPath": "src/data/buffer/parser/numeral.lean", "changes": [["mod", "def", "of_fintype", ["parser", "numeral", "char"]], ["mod", "def", "char", ["parser", "numeral"]], ["mod", "def", "of_fintype", ["parser", "numeral", "from_one"]], ["mod", "def", "from_one", ["parser", "numeral"]], ["mod", "def", "of_fintype", ["parser", "numeral"]], ["mod", "def", "numeral", ["parser"]]]}]}, {"timestamp": 1613725478, "sha": "e5c77892", "message": "fix(lint/type_classes): fix instance_priority bug (#6305)\nThe linter now doesn't fail if the type is a beta redex", "changes": [{"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1613718249, "sha": "a0e2b3c4", "message": "chore(topology/Profinite): reduce universe variables (#6300)\nSee https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/universe.20issue", "changes": [{"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": [["mod", "def", "to_Profinite_obj", ["CompHaus"]], ["mod", "def", "to_CompHaus_equivalence", ["Profinite"]]]}]}, {"timestamp": 1613718248, "sha": "64d86f7a", "message": "feat(topology/{subset_properties,separation}): closed subsets of compact t0 spaces contain a closed point (#6273)\nThis adds two statements. The first is that nonempty closed subsets of a compact space have a minimal nonempty closed subset, and the second is that when the space is additionally T0 then that minimal subset is a singleton.\n(This PR does not do this, but one can go on to show that there is functor from compact T0 spaces to T1 spaces by taking the set of closed points, and it preserves nonemptiness.)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "exists_closed_singleton", ["is_closed"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "exists_minimal_nonempty_closed_subset", ["is_closed"]]]}]}, {"timestamp": 1613708070, "sha": "626a4b57", "message": "chore(scripts): update nolints.txt (#6303)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613708069, "sha": "75149c39", "message": "feat(data/list/basic): tail_drop, cons_nth_le_drop_succ (#6265)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "cons_nth_le_drop_succ", ["list"]], ["add", "theorem", "tail_drop", ["list"]]]}]}, {"timestamp": 1613695422, "sha": "1fecd52f", "message": "fix(tactic/push_neg): fully simplify expressions not named `h` (#6297)\nA final pass of `push_neg` is intended to turn `¬ a = b` into `a ≠ b`.\nUnfortunately, when you use `push_neg at ...`, this is applied to the hypothesis literally named `h`.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60push_neg.60.20behaviour.20depends.20on.20variable.20name)", "changes": [{"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1613692216, "sha": "3a8d9769", "message": "fix(archive/100/82): remove nonterminal simps (#6299)", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}]}, {"timestamp": 1613692215, "sha": "86969906", "message": "feat(category_theory/adjunction/reflective): show compositions of reflective are reflective (#6298)\nShow compositions of reflective are reflective.", "changes": [{"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": []}]}, {"timestamp": 1613679791, "sha": "96f89335", "message": "perf(tactic/lint/frontend): run linters in parallel (#6293)\nWith this change it takes 5 minutes instead of 33 minutes to lint mathlib (on my machine...).\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/linting.20time", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}]}, {"timestamp": 1613666090, "sha": "619c1b0d", "message": "chore({algebra, algebraic_geometry}/*): move 1 module doc and split lines (#6294)\nThis moves the module doc for `algebra/ordered_group` so that it gets recognised by the linter. Furthermore, several lines are split in the algebra and algebraic_geometry folder.", "changes": [{"oldPath": "archive/miu_language/basic.lean", "newPath": "archive/miu_language/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/terminated_stable.lean", "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}]}, {"timestamp": 1613646579, "sha": "5b579a2c", "message": "feat(topology/category/profinite): show Profinite is reflective in CompHaus (#6219)\nShow Profinite is reflective in CompHaus.", "changes": [{"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": [["add", "def", "to_Profinite", ["CompHaus"]], ["add", "theorem", "to_Profinite_obj'", ["CompHaus"]], ["add", "def", "to_Profinite_obj", ["CompHaus"]], ["add", "def", "to_CompHaus", ["Profinite"]], ["add", "def", "to_CompHaus_equivalence", ["Profinite"]], ["add", "theorem", "to_CompHaus_to_Top", ["Profinite"]], ["add", "def", "to_Profinite_adj_to_CompHaus", ["Profinite"]], ["del", "def", "Profinite_to_CompHaus", []], ["del", "theorem", "Profinite_to_CompHaus_to_Top", []]]}, {"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "connected_component_nrel_iff", []], ["add", "def", "connected_components", []], ["add", "theorem", "connected_components_lift_unique'", []], ["add", "theorem", "connected_components_preimage_image", []], ["add", "theorem", "connected_components_preimage_singleton", []], ["add", "def", "connected_components_lift", ["continuous"]], ["add", "theorem", "connected_components_lift_continuous", ["continuous"]], ["add", "theorem", "connected_components_lift_factors", ["continuous"]], ["add", "theorem", "connected_components_lift_unique", ["continuous"]], ["add", "def", "connected_components_map", ["continuous"]], ["add", "theorem", "connected_components_map_continuous", ["continuous"]], ["del", "def", "pi0_lift", ["continuous"]], ["del", "theorem", "pi0_lift_continuous", ["continuous"]], ["del", "theorem", "pi0_lift_factors", ["continuous"]], ["del", "theorem", "pi0_lift_unique", ["continuous"]], ["del", "def", "pi0_map", ["continuous"]], ["add", "theorem", "eq_union_connected_components", ["is_clopen"]], ["del", "def", "pi0", []], ["del", "theorem", "pi0_lift_unique'", []], ["del", "theorem", "pi0_preimage_image", []], ["del", "theorem", "pi0_preimage_singleton", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1613640981, "sha": "5a597819", "message": "fix(doc/references.bib): fix syntax (#6290)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1613635551, "sha": "2a7eafa5", "message": "feat(order/pfilter): add preorder filters, dual to preorder ideals (#5928)\nNamed `pfilter` to not conflict with the existing `order/filter`,\nwhich is a much more developed theory of a special case of this.", "changes": [{"oldPath": null, "newPath": "src/order/pfilter.lean", "changes": [["add", "theorem", "directed", ["pfilter"]], ["add", "theorem", "ext", ["pfilter"]], ["add", "theorem", "inf_mem", ["pfilter"]], ["add", "theorem", "inf_mem_iff", ["pfilter"]], ["add", "theorem", "mem_of_le", ["pfilter"]], ["add", "theorem", "mem_of_mem_of_le", ["pfilter"]], ["add", "theorem", "nonempty", ["pfilter"]], ["add", "def", "principal", ["pfilter"]], ["add", "theorem", "principal_le_iff", ["pfilter"]], ["add", "theorem", "top_mem", ["pfilter"]], ["add", "structure", "pfilter", []]]}]}, {"timestamp": 1613626287, "sha": "017acaee", "message": "feat(linear_algebra/dual): adds dual annihilators (#6078)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "dom_restrict'", ["linear_map"]], ["add", "theorem", "dom_restrict'_apply", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "def", "dual_annihilator", ["submodule"]], ["add", "def", "dual_restrict", ["submodule"]], ["add", "theorem", "dual_restrict_apply", ["submodule"]], ["add", "theorem", "dual_restrict_ker_eq_dual_annihilator", ["submodule"]], ["add", "theorem", "mem_dual_annihilator", ["submodule"]], ["add", "theorem", "dual_equiv_dual_apply", ["subspace"]], ["add", "theorem", "dual_equiv_dual_def", ["subspace"]], ["add", "theorem", "dual_lift_injective", ["subspace"]], ["add", "theorem", "dual_lift_of_mem", ["subspace"]], ["add", "theorem", "dual_lift_of_subtype", ["subspace"]], ["add", "theorem", "dual_lift_right_inverse", ["subspace"]], ["add", "theorem", "dual_restrict_comp_dual_lift", ["subspace"]], ["add", "theorem", "dual_restrict_left_inverse", ["subspace"]], ["add", "theorem", "dual_restrict_surjective", ["subspace"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1613614707, "sha": "7c267dfa", "message": "chore(scripts): update nolints.txt (#6289)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613606013, "sha": "7592a8f4", "message": "chore(analysis/normed_space/finite_dimension,topology/metric_space): golf (#6285)\n* golf two proofs about `finite_dimension`;\n* move `proper_image_of_proper` to `antilipschitz`, rename to\n `antilipschitz_with.proper_space`, golf.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "bounded_preimage", ["antilipschitz_with"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "proper_image_of_proper", ["metric"]]]}]}, {"timestamp": 1613606012, "sha": "bc1c4f24", "message": "feat(data/zmod/basic): add simp lemmas about coercions, tidy lemma names (#6280)\nSplit from #5797. This takes the new proofs without introducing the objectionable names.\nThis also renames a bunch of lemmas from `zmod.cast_*` to `zmod.nat_cast_*` and `zmod.int_cast_*`, in order to distinguish lemmas about `zmod.cast` from lemmas about `nat.cast` and `int.cast` applied with a zmod argument.\nAs an example, `zmod.cast_val` has been renamed to `zmod.nat_cast_zmod_val`, as the lemma statement is defeq to `(nat.cast : ℕ → zmod n) (zmod.val x) = x`, and `zmod.nat_cast_val` is already taken by `nat.cast (zmod.val x) = (x : R)`.\nThe full list of renames:\n* `zmod.cast_val` → `zmod.nat_cast_zmod_val`\n* `zmod.cast_self` → `zmod.nat_cast_self`\n* `zmod.cast_self'` → `zmod.nat_cast_self'`\n* `zmod.cast_mod_nat` → `zmod.nat_cast_mod`\n* `zmod.cast_mod_int` → `zmod.int_cast_mod`\n* `zmod.val_cast_nat` → `zmod.val_nat_cast`\n* `zmod.coe_to_nat` → `zmod.nat_cast_to_nat`\n* `zmod.cast_unit_of_coprime` → `coe_unit_of_coprime`\n* `zmod.cast_nat_abs_val_min_abs` → `zmod.nat_cast_nat_abs_val_min_abs`", "changes": [{"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_id'", ["zmod"]], ["del", "theorem", "cast_mod_int", ["zmod"]], ["del", "theorem", "cast_mod_nat", ["zmod"]], ["del", "theorem", "cast_nat_abs_val_min_abs", ["zmod"]], ["del", "theorem", "cast_self'", ["zmod"]], ["del", "theorem", "cast_self", ["zmod"]], ["del", "theorem", "cast_unit_of_coprime", ["zmod"]], ["del", "theorem", "cast_val", ["zmod"]], ["del", "theorem", "coe_to_nat", ["zmod"]], ["add", "theorem", "coe_unit_of_coprime", ["zmod"]], ["add", "theorem", "int_cast_cast", ["zmod"]], ["add", "theorem", "int_cast_comp_cast", ["zmod"]], ["add", "theorem", "int_cast_mod", ["zmod"]], ["mod", "theorem", "int_cast_surjective", ["zmod"]], ["add", "theorem", "int_cast_zmod_cast", ["zmod"]], ["add", "theorem", "nat_cast_comp_val", ["zmod"]], ["add", "theorem", "nat_cast_mod", ["zmod"]], ["add", "theorem", "nat_cast_nat_abs_val_min_abs", ["zmod"]], ["add", "theorem", "nat_cast_self'", ["zmod"]], ["add", "theorem", "nat_cast_self", ["zmod"]], ["del", "theorem", "nat_cast_surjective", ["zmod"]], ["add", "theorem", "nat_cast_to_nat", ["zmod"]], ["mod", "theorem", "nat_cast_val", ["zmod"]], ["add", "theorem", "nat_cast_zmod_surjective", ["zmod"]], ["add", "theorem", "nat_cast_zmod_val", ["zmod"]], ["add", "theorem", "ring_hom_map_cast", ["zmod"]], ["del", "theorem", "val_cast_nat", ["zmod"]], ["add", "theorem", "val_nat_cast", ["zmod"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/group_theory/dihedral.lean", "newPath": "src/group_theory/dihedral.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}]}, {"timestamp": 1613593785, "sha": "75f33464", "message": "feat(analysis/normed_space/multilinear): generalized `curry` (#6270)", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "def", "curry_fin_finset", ["continuous_multilinear_map"]], ["add", "theorem", "curry_fin_finset_apply", ["continuous_multilinear_map"]], ["add", "theorem", "curry_fin_finset_apply_const", ["continuous_multilinear_map"]], ["add", "theorem", "curry_fin_finset_symm_apply", ["continuous_multilinear_map"]], ["add", "theorem", "curry_fin_finset_symm_apply_const", ["continuous_multilinear_map"]], ["add", "theorem", "curry_fin_finset_symm_apply_piecewise_const", ["continuous_multilinear_map"]], ["add", "def", "curry_sum", ["continuous_multilinear_map"]], ["add", "theorem", "curry_sum_apply", ["continuous_multilinear_map"]], ["add", "def", "curry_sum_equiv", ["continuous_multilinear_map"]], ["add", "def", "dom_dom_congr", ["continuous_multilinear_map"]], ["add", "theorem", "le_of_op_norm_le", ["continuous_multilinear_map"]], ["add", "def", "uncurry_sum", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry_sum_apply", ["continuous_multilinear_map"]], ["add", "def", "mk_continuous_linear", ["multilinear_map"]], ["add", "theorem", "mk_continuous_linear_norm_le'", ["multilinear_map"]], ["add", "theorem", "mk_continuous_linear_norm_le", ["multilinear_map"]], ["add", "def", "mk_continuous_multilinear", ["multilinear_map"]], ["add", "theorem", "mk_continuous_multilinear_apply", ["multilinear_map"]], ["add", "theorem", "mk_continuous_multilinear_norm_le'", ["multilinear_map"]], ["add", "theorem", "mk_continuous_multilinear_norm_le", ["multilinear_map"]], ["add", "theorem", "mk_continuous_norm_le'", ["multilinear_map"]]]}]}, {"timestamp": 1613593784, "sha": "152bf15a", "message": "feat(data/fin): pred_above_monotone (#6170)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_pred_monotone", ["fin"]], ["add", "theorem", "cast_succ_lt_cast_succ_iff", ["fin"]], ["add", "theorem", "pred_above_left_monotone", ["fin"]], ["add", "theorem", "pred_above_right_monotone", ["fin"]]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": [["add", "def", "to_preorder_hom", ["order_embedding"]], ["add", "theorem", "to_preorder_hom_coe", ["order_embedding"]]]}]}, {"timestamp": 1613576997, "sha": "4bae1c47", "message": "doc(tactic/algebra): document @[ancestor] (#6272)", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}]}, {"timestamp": 1613576995, "sha": "07a1b8db", "message": "feat(ring_theory/simple_module): introduce `is_semisimple_module` (#6215)\nDefines `is_semisimple_module` to mean that the lattice of submodules is complemented\nShows that this is equivalent to the module being the `Sup` of its simple submodules", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "is_complemented_of_Sup_atoms_eq_top", []]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "is_compl", ["order_iso"]], ["add", "theorem", "is_compl_iff", ["order_iso"]], ["add", "theorem", "is_complemented", ["order_iso"]], ["add", "theorem", "is_complemented_iff", ["order_iso"]]]}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": [["add", "theorem", "is_semisimple_module", ["monoid_algebra"]]]}, {"oldPath": "src/ring_theory/simple_module.lean", "newPath": "src/ring_theory/simple_module.lean", "changes": [["add", "theorem", "is_semisimple_iff_top_eq_Sup_simples", []], ["add", "theorem", "Sup_simples_eq_top", ["is_semisimple_module"]], ["add", "def", "is_semisimple_module", []], ["add", "theorem", "is_semisimple_of_Sup_simples_eq_top", []], ["add", "theorem", "is_atom", ["is_simple_module"]], ["add", "theorem", "is_simple_module_iff_is_atom", []]]}]}, {"timestamp": 1613561922, "sha": "f066eb1a", "message": "feat(algebra/lie/subalgebra): define lattice structure for Lie subalgebras (#6279)\nWe already have the lattice structure for Lie submodules but not for subalgebras.\nThis is mostly a lightly-edited copy-paste of the corresponding subset of results\nfor Lie submodules that remain true for subalgebras.\nThe results which hold for Lie submodules but not for Lie subalgebras are:\n - `sup_coe_to_submodule` and `mem_sup`\n - `is_modular_lattice`\nI have also made a few tweaks to bring the structure and naming of Lie\nsubalgebras a little closer to that of Lie submodules.", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "theorem", "Inf_coe", ["lie_subalgebra"]], ["add", "theorem", "Inf_coe_to_submodule", ["lie_subalgebra"]], ["add", "theorem", "Inf_glb", ["lie_subalgebra"]], ["add", "theorem", "add_eq_sup", ["lie_subalgebra"]], ["add", "theorem", "bot_coe", ["lie_subalgebra"]], ["add", "theorem", "bot_coe_submodule", ["lie_subalgebra"]], ["add", "theorem", "coe_hom_of_le", ["lie_subalgebra"]], ["mod", "theorem", "coe_set_eq", ["lie_subalgebra"]], ["add", "theorem", "coe_submodule_le_coe_submodule", ["lie_subalgebra"]], ["add", "theorem", "coe_to_submodule", ["lie_subalgebra"]], ["del", "theorem", "coe_to_submodule_eq", ["lie_subalgebra"]], ["add", "theorem", "coe_to_submodule_eq_iff", ["lie_subalgebra"]], ["add", "theorem", "coe_to_submodule_mk", ["lie_subalgebra"]], ["add", "def", "comap", ["lie_subalgebra"]], ["add", "theorem", "eq_bot_iff", ["lie_subalgebra"]], ["add", "theorem", "gc_map_comap", ["lie_subalgebra"]], ["add", "def", "hom_of_le", ["lie_subalgebra"]], ["add", "theorem", "hom_of_le_apply", ["lie_subalgebra"]], ["add", "theorem", "hom_of_le_injective", ["lie_subalgebra"]], ["add", "theorem", "inf_coe", ["lie_subalgebra"]], ["add", "theorem", "inf_coe_to_submodule", ["lie_subalgebra"]], ["add", "theorem", "le_def", ["lie_subalgebra"]], ["mod", "def", "map", ["lie_subalgebra"]], ["add", "theorem", "map_le_iff_le_comap", ["lie_subalgebra"]], ["add", "theorem", "mem_bot", ["lie_subalgebra"]], ["add", "theorem", "mem_carrier", ["lie_subalgebra"]], ["del", "theorem", "mem_coe'", ["lie_subalgebra"]], ["mod", "theorem", "mem_coe", ["lie_subalgebra"]], ["add", "theorem", "mem_coe_submodule", ["lie_subalgebra"]], ["add", "theorem", "mem_inf", ["lie_subalgebra"]], ["mod", "theorem", "mem_map_submodule", ["lie_subalgebra"]], ["add", "theorem", "mem_top", ["lie_subalgebra"]], ["mod", "theorem", "range_incl", ["lie_subalgebra"]], ["add", "theorem", "subsingleton_of_bot", ["lie_subalgebra"]], ["add", "theorem", "top_coe", ["lie_subalgebra"]], ["add", "theorem", "top_coe_submodule", ["lie_subalgebra"]], ["add", "theorem", "well_founded_of_noetherian", ["lie_subalgebra"]]]}]}, {"timestamp": 1613561921, "sha": "d43a3bae", "message": "feat(analysis/normed_space/inner_product): norm is smooth at `x ≠ 0` (#6275)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "dist", ["differentiable"]], ["add", "theorem", "norm", ["differentiable"]], ["add", "theorem", "dist", ["differentiable_at"]], ["add", "theorem", "norm", ["differentiable_at"]], ["add", "theorem", "dist", ["differentiable_on"]], ["add", "theorem", "norm", ["differentiable_on"]], ["add", "theorem", "dist", ["differentiable_within_at"]], ["add", "theorem", "norm", ["differentiable_within_at"]], ["add", "theorem", "dist", ["times_cont_diff"]], ["add", "theorem", "norm", ["times_cont_diff"]], ["add", "theorem", "dist", ["times_cont_diff_at"]], ["add", "theorem", "norm", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_at_norm", []], ["add", "theorem", "dist", ["times_cont_diff_on"]], ["add", "theorem", "norm", ["times_cont_diff_on"]], ["add", "theorem", "dist", ["times_cont_diff_within_at"]], ["add", "theorem", "norm", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1613561920, "sha": "b190131f", "message": "feat(data/int/basic): lemmas about int and int.to_nat (#6253)\nGolfing welcome.\nThis adds a `@[simp]` lemma `int.add_minus_one : i + -1 = i - 1`, which I think is mostly helpful, but needs to be turned off in `data/num/lemmas.lean`, which is perhaps an argument against it.\nI've also added a lemma\n```\n@[simp] lemma lt_self_iff_false [preorder α] (a : α) : a < a ↔ false :=\n```\n(not just for `int`), which I've often found useful (e.g. `simpa` works well when it can reduce a hypothesis to `false`). This lemma seems harmless, but I'm happy to hear objections if it is too general.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "add_minus_one", ["int"]], ["add", "theorem", "coe_pred_of_pos", ["int"]], ["add", "theorem", "neg_succ_not_nonneg", ["int"]], ["add", "theorem", "neg_succ_not_pos", ["int"]], ["add", "theorem", "neg_succ_sub_one", ["int"]], ["add", "theorem", "pred_to_nat", ["int"]], ["add", "theorem", "succ_coe_nat_pos", ["int"]], ["add", "theorem", "to_nat_pred_coe_of_pos", ["int"]]]}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "lt_self_iff_false", []]]}]}, {"timestamp": 1613561919, "sha": "8b8a5a27", "message": "feat(category/eq_to_hom): lemmas to replace rewriting in objects with eq_to_hom (#6252)\nThis adds two lemmas which replace expressions in which we've used `eq.mpr` to rewrite the source or target of a morphism, replacing the `eq.mpr` by composition with an `eq_to_hom`.\nPossibly we just shouldn't add these", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "congr_arg_mpr_hom_left", ["category_theory"]], ["add", "theorem", "congr_arg_mpr_hom_right", ["category_theory"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "congr_arg_refl", []], ["add", "theorem", "congr_fun_congr_arg", []], ["add", "theorem", "congr_fun_rfl", []], ["add", "theorem", "congr_refl_left", []], ["add", "theorem", "congr_refl_right", []]]}]}, {"timestamp": 1613561918, "sha": "ea1cff4a", "message": "feat(linear_algebra/pi): ext lemma for `f : (Π i, M i) →ₗ[R] N` (#6233)", "changes": [{"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["add", "theorem", "functions_ext'", ["add_monoid_hom"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["add", "theorem", "coe_std_basis", ["linear_map"]], ["add", "theorem", "pi_ext'", ["linear_map"]], ["add", "theorem", "pi_ext'_iff", ["linear_map"]], ["add", "theorem", "pi_ext", ["linear_map"]], ["add", "theorem", "pi_ext_iff", ["linear_map"]]]}]}, {"timestamp": 1613561917, "sha": "0c61fc46", "message": "feat(group_theory): prove the 2nd isomorphism theorem for groups (#6187)\nDefine an `inclusion` homomorphism from a subgroup `H` contained in `K` to `K`. Add instance of `subgroup.normal` to `H ∩ N` in `H` whenever `N` is normal and use it to prove the 2nd isomorphism theorem for groups.", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "def", "equiv_quotient_of_eq", ["quotient_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "coe_inclusion", ["subgroup"]], ["add", "theorem", "comap_subtype_inf_left", ["subgroup"]], ["add", "theorem", "comap_subtype_inf_right", ["subgroup"]], ["add", "def", "inclusion", ["subgroup"]], ["add", "theorem", "subtype_comp_inclusion", ["subgroup"]]]}]}, {"timestamp": 1613561916, "sha": "9b3008eb", "message": "feat(algebra/ordered_monoid): inequalities involving mul/add (#6171)\nI couldn't find some statements about inequalities, so I'm adding them. I included all the useful variants I could think of.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "le_mul_of_le_mul_left", []], ["add", "theorem", "le_mul_of_le_mul_right", []], ["add", "theorem", "le_of_le_mul_of_le_one_left", []], ["add", "theorem", "le_of_le_mul_of_le_one_right", []], ["add", "theorem", "le_of_mul_le_of_one_le_left", []], ["add", "theorem", "le_of_mul_le_of_one_le_right", []], ["add", "theorem", "lt_mul_of_lt_mul_left", []], ["add", "theorem", "lt_mul_of_lt_mul_right", []], ["add", "theorem", "lt_of_lt_mul_of_le_one_left", []], ["add", "theorem", "lt_of_lt_mul_of_le_one_right", []], ["add", "theorem", "lt_of_mul_lt_of_one_le_left", []], ["add", "theorem", "lt_of_mul_lt_of_one_le_right", []], ["add", "theorem", "mul_le_of_le_one_left'", []], ["add", "theorem", "mul_le_of_le_one_right'", []], ["add", "theorem", "mul_le_of_mul_le_left", []], ["add", "theorem", "mul_le_of_mul_le_right", []], ["add", "theorem", "mul_lt_of_mul_lt_left", []], ["add", "theorem", "mul_lt_of_mul_lt_right", []]]}]}, {"timestamp": 1613561915, "sha": "3c157512", "message": "feat(ring_theory/ideal/operations) : add lemma prod_eq_bot (#5795)\nAdd lemma `prod_eq_bot` showing that a product of ideals in an integral domain is zero if and only if one of the terms\nis zero.", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "prod_eq_bot", ["ideal"]]]}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["add", "theorem", "prod_zero_iff_exists_zero", []]]}]}, {"timestamp": 1613548499, "sha": "11f054bb", "message": "chore(topology/sheaves): speed up slow proofs by tidy (#6274)\nNo changes, just making some proofs by tidy explicit, so the file is not quite as slow as previously. Now compiles with `-T40000`.", "changes": [{"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1613548498, "sha": "5258de08", "message": "feat(data/fin): refactor `pred_above` (#6125)\nCurrently the signature of `pred_above` is\n```lean\ndef pred_above (p : fin (n+1)) (i : fin (n+1)) (hi : i ≠ p) : fin n := ...\n```\nand its behaviour is \"subtract one from `i` if it is greater than `p`\".\nThere are two reasons I don't like this much:\n1. It's not a total function.\n2. Since `succ_above` is exactly a simplicial face map, I'd like `pred_above` to be a simplicial degeneracy map.\nIn this PR I propose replacing this with\n```lean\ndef pred_above (p : fin n) (i : fin (n+1)) : fin n :=\n```\nagain with the behaviour \"subtract one from `i` if it is greater than `p`\".\n~~Unfortunately, it seems the current `pred_above` really is needed for the sake of `fin.insert_nth`, so this PR has ended up as a half-hearted attempt to replace `pred_above`", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "cast_pred", ["fin"]], ["add", "theorem", "cast_pred_cast_succ", ["fin"]], ["add", "theorem", "cast_pred_last", ["fin"]], ["add", "theorem", "cast_pred_mk", ["fin"]], ["add", "theorem", "cast_pred_zero", ["fin"]], ["add", "theorem", "cast_succ_cast_pred", ["fin"]], ["mod", "theorem", "cast_succ_mk", ["fin"]], ["add", "theorem", "coe_cast_pred_le_self", ["fin"]], ["add", "theorem", "coe_cast_pred_lt_iff", ["fin"]], ["add", "def", "insert_nth'", ["fin"]], ["mod", "def", "insert_nth", ["fin"]], ["add", "theorem", "is_le", ["fin"]], ["add", "theorem", "le_cast_succ_iff", ["fin"]], ["add", "theorem", "lt_last_iff_coe_cast_pred", ["fin"]], ["add", "theorem", "pos_iff_ne_zero", ["fin"]], ["mod", "def", "pred_above", ["fin"]], ["mod", "theorem", "pred_above_succ_above", ["fin"]], ["mod", "theorem", "pred_above_zero", ["fin"]], ["add", "theorem", "range_succ_above", ["fin"]], ["mod", "theorem", "succ_above_pred_above", ["fin"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_ne_eq_singleton", ["set"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["add", "theorem", "remove_nth_insert_nth'", ["vector"]], ["del", "theorem", "remove_nth_insert_nth_ne", ["vector"]]]}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1613534084, "sha": "b2dbfd6f", "message": "chore(scripts): update nolints.txt (#6276)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613534083, "sha": "d4ef2e85", "message": "feat(topology/category/Top): nonempty inverse limit of compact Hausdorff spaces (#6271)\nThe limit of an inverse system of nonempty compact Hausdorff spaces is nonempty, and this can be seen as a generalization of Kőnig's lemma. A future PR will address the weaker generalization that the limit of an inverse system of nonempty finite types is nonempty.\nThis result could be generalized more, to the inverse limit of nonempty compact T0 spaces where all the maps are closed, but I think it involves an essentially different method.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["add", "theorem", "hom_of_le_comp", ["category_theory"]], ["add", "theorem", "hom_of_le_le_of_hom", ["category_theory"]], ["add", "theorem", "hom_of_le_refl", ["category_theory"]], ["add", "theorem", "le_of_hom_hom_of_le", ["category_theory"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "iff_mpr_iff_true_intro", []]]}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["add", "theorem", "nonempty_limit_cone_of_compact_t2_inverse_system", ["Top"]], ["add", "theorem", "closed", ["Top", "partial_sections"]], ["add", "theorem", "directed", ["Top", "partial_sections"]], ["add", "theorem", "nonempty", ["Top", "partial_sections"]], ["add", "def", "partial_sections", ["Top"]]]}]}, {"timestamp": 1613534082, "sha": "bf9ca8b5", "message": "feat(data/set/finite): complement of finite set is infinite (#6266)\nAdd two missing lemmas. One-line proofs due to Yakov Pechersky.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "infinite_compl", ["set", "finite"]], ["add", "theorem", "infinite_of_finite_compl", ["set"]]]}]}, {"timestamp": 1613519946, "sha": "7a7a5591", "message": "feat(option/basic): add join_eq_none (#6269)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "join_eq_none", ["option"]]]}]}, {"timestamp": 1613519945, "sha": "781cc63f", "message": "feat(data/real/liouville, ring_theory/algebraic): a Liouville number is transcendental! (#6204)\nThis is an annotated proof. It finishes the first half of the Liouville PR.\nA taste of what is to come in a future PR: a proof that Liouville numbers actually exist!", "changes": [{"oldPath": "src/data/real/liouville.lean", "newPath": "src/data/real/liouville.lean", "changes": [["del", "theorem", "exists_one_le_pow_mul_dist", []], ["del", "theorem", "exists_pos_real_of_irrational_root", []], ["add", "theorem", "exists_one_le_pow_mul_dist", ["liouville"]], ["add", "theorem", "exists_pos_real_of_irrational_root", ["liouville"]], ["mod", "theorem", "irrational", ["liouville"]], ["add", "theorem", "transcendental", ["liouville"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "def", "transcendental", []]]}]}, {"timestamp": 1613519944, "sha": "efa6877b", "message": "feat(algebra/category/Module): the free/forgetful adjunction for R-modules (#6168)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Module/adjunctions.lean", "changes": [["add", "def", "adj", ["Module"]], ["add", "def", "free", ["Module"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "arrow_congr", ["mul_equiv"]], ["add", "def", "monoid_hom_congr", ["mul_equiv"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "induction_linear", ["finsupp"]], ["add", "theorem", "sum_map_domain_index_add_monoid_hom", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "ring_lmap_equiv_self", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "lift_apply", ["finsupp"]], ["add", "theorem", "lift_symm_apply", ["finsupp"]]]}]}, {"timestamp": 1613519943, "sha": "3bf72416", "message": "feat(algebra/algebra,linear_algebra): add *_equiv.of_left_inverse (#6167)\nThe main purpose of this change is to add equivalences onto the range of a function with a left-inverse:\n* `algebra_equiv.of_left_inverse`\n* `linear_equiv.of_left_inverse`\n* `ring_equiv.of_left_inverse`\n* `ring_equiv.sof_left_inverse` (the sub***S***emiring version)\nThis also:\n* Renames `alg_hom.alg_equiv.of_injective` to `alg_equiv.of_injective`\n* Adds `subalgebra.mem_range_self` and `subsemiring.mem_srange_self` for consistency with `subring.mem_range_self`\n* Replaces `subring.surjective_onto_range` with `subring.range_restrict_surjective`, which have defeq statements\nThese are computable versions of `*_equiv.of_injective`, with the benefit of having a known inverse, and in the case of `linear_equiv` working for `semiring` and not just `ring`.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "of_injective_apply", ["alg_equiv"]], ["add", "def", "of_left_inverse", ["alg_equiv"]], ["add", "theorem", "of_left_inverse_apply", ["alg_equiv"]], ["add", "theorem", "of_left_inverse_symm_apply", ["alg_equiv"]], ["del", "theorem", "of_injective_apply", ["alg_hom", "alg_equiv"]], ["add", "theorem", "coe_cod_restrict", ["alg_hom"]], ["add", "theorem", "mem_range_self", ["alg_hom"]], ["add", "def", "range_restrict", ["alg_hom"]], ["add", "theorem", "val_comp_cod_restrict", ["alg_hom"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "of_left_inverse", ["linear_equiv"]], ["add", "theorem", "of_left_inverse_apply", ["linear_equiv"]], ["add", "theorem", "of_left_inverse_symm_apply", ["linear_equiv"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "def", "of_left_inverse", ["ring_equiv"]], ["add", "theorem", "of_left_inverse_apply", ["ring_equiv"]], ["add", "theorem", "of_left_inverse_symm_apply", ["ring_equiv"]], ["add", "theorem", "range_restrict_surjective", ["ring_hom"]], ["del", "theorem", "surjective_onto_range", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "def", "sof_left_inverse", ["ring_equiv"]], ["add", "theorem", "sof_left_inverse_apply", ["ring_equiv"]], ["add", "theorem", "sof_left_inverse_symm_apply", ["ring_equiv"]], ["add", "theorem", "mem_srange_self", ["ring_hom"]], ["add", "theorem", "srange_restrict_surjective", ["ring_hom"]]]}]}, {"timestamp": 1613510564, "sha": "2289b185", "message": "chore(topology/basic): add `continuous_at_congr` and `continuous_at.congr` (#6267)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "congr", ["continuous_at"]], ["add", "theorem", "continuous_at_congr", []]]}]}, {"timestamp": 1613500610, "sha": "0b4823cc", "message": "doc(*): remove `\\\\` hack for latex backslashes in markdown (#6263)\nWith leanprover-community/doc-gen#110, these should no longer be needed.", "changes": [{"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1613500609, "sha": "16eb4af7", "message": "doc(algebraic_geometry/structure_sheaf): fix latex (#6262)\nThis is broken regardless of the markdown processor: ", "changes": [{"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}]}, {"timestamp": 1613500608, "sha": "7459c21c", "message": "feat(analysis/special_functions): strict differentiability of `real.exp` and `real.log` (#6256)", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "exp", ["has_strict_deriv_at"]], ["add", "theorem", "log", ["has_strict_deriv_at"]], ["add", "theorem", "exp", ["has_strict_fderiv_at"]], ["add", "theorem", "log", ["has_strict_fderiv_at"]], ["del", "theorem", "has_deriv_at_log_of_pos", ["real"]], ["add", "theorem", "has_strict_deriv_at_exp", ["real"]], ["add", "theorem", "has_strict_deriv_at_log", ["real"]], ["add", "theorem", "has_strict_deriv_at_log_of_pos", ["real"]], ["mod", "theorem", "times_cont_diff_at_log", ["real"]], ["add", "theorem", "log", ["times_cont_diff"]], ["add", "theorem", "log", ["times_cont_diff_at"]], ["add", "theorem", "log", ["times_cont_diff_on"]], ["add", "theorem", "log", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1613500607, "sha": "b0071f3f", "message": "feat(analysis/special_functions): `sqrt` is infinitely smooth at `x ≠ 0` (#6255)\nAlso move lemmas about differentiability of `sqrt` out from `special_functions/pow` to a new file.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "pow", ["times_cont_diff_at"]], ["add", "theorem", "pow", ["times_cont_diff_on"]], ["add", "theorem", "pow", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["del", "theorem", "deriv_sqrt", []], ["del", "theorem", "deriv_within_sqrt", []], ["del", "theorem", "sqrt", ["differentiable"]], ["del", "theorem", "sqrt", ["differentiable_at"]], ["del", "theorem", "sqrt", ["differentiable_on"]], ["del", "theorem", "sqrt", ["differentiable_within_at"]], ["del", "theorem", "sqrt", ["has_deriv_at"]], ["del", "theorem", "sqrt", ["has_deriv_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/sqrt.lean", "changes": [["add", "theorem", "deriv_sqrt", []], ["add", "theorem", "deriv_within_sqrt", []], ["add", "theorem", "sqrt", ["differentiable"]], ["add", "theorem", "sqrt", ["differentiable_at"]], ["add", "theorem", "sqrt", ["differentiable_on"]], ["add", "theorem", "sqrt", ["differentiable_within_at"]], ["add", "theorem", "fderiv_sqrt", []], ["add", "theorem", "fderiv_within_sqrt", []], ["add", "theorem", "sqrt", ["has_deriv_at"]], ["add", "theorem", "sqrt", ["has_deriv_within_at"]], ["add", "theorem", "sqrt", ["has_fderiv_at"]], ["add", "theorem", "sqrt", ["has_fderiv_within_at"]], ["add", "theorem", "sqrt", ["has_strict_deriv_at"]], ["add", "theorem", "sqrt", ["has_strict_fderiv_at"]], ["add", "theorem", "sqrt", ["measurable"]], ["add", "theorem", "deriv_sqrt_aux", ["real"]], ["add", "theorem", "has_deriv_at_sqrt", ["real"]], ["add", "theorem", "has_strict_deriv_at_sqrt", ["real"]], ["add", "theorem", "times_cont_diff_at_sqrt", ["real"]], ["add", "theorem", "sqrt", ["times_cont_diff"]], ["add", "theorem", "sqrt", ["times_cont_diff_at"]], ["add", "theorem", "sqrt", ["times_cont_diff_on"]], ["add", "theorem", "sqrt", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1613500606, "sha": "8a431630", "message": "feat(topology/algebra/normed_group): completion of normed groups (#6189)\nFrom `lean-liquid`", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/normed_group.lean", "changes": [["add", "theorem", "norm_coe", ["uniform_space", "completion"]]]}]}, {"timestamp": 1613500605, "sha": "35c070fa", "message": "chore(linear_algebra/dfinsupp): make lsum a linear_equiv (#6185)\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Typeclass.20inference.20can't.20fill.20in.20parameters/near/226019081) with a summary of the problem which required the nasty `semimodule_of_linear_map` present here.", "changes": [{"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["mod", "def", "lsum", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1613490057, "sha": "2411d681", "message": "doc(algebra/big_operators): fix formatting of library note (#6261)\nThe name of a library note is already used as its title: ", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}]}, {"timestamp": 1613477122, "sha": "362619eb", "message": "chore(data/equiv/basic): add lemmas about `equiv.cast` (#6246)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "cast_eq_iff_heq", ["equiv"]], ["add", "theorem", "cast_refl", ["equiv"]], ["add", "theorem", "cast_symm", ["equiv"]], ["add", "theorem", "cast_trans", ["equiv"]]]}]}, {"timestamp": 1613477121, "sha": "841b0074", "message": "doc(control/fold): fix bad markdown (#6245)", "changes": [{"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}]}, {"timestamp": 1613477120, "sha": "beee5d86", "message": "doc(topology/category/*): 5 module docs (#6240)\nThis PR provides module docs to `Top.basic`, `Top.limits`, `Top.adjuntions`, `Top.epi_mono` , `TopCommRing`.\nFurthermore, a few lines are split to please the line length linter.", "changes": [{"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/epi_mono.lean", "newPath": "src/topology/category/Top/epi_mono.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": [["mod", "def", "of", ["CpltSepUniformSpace"]]]}]}, {"timestamp": 1613477119, "sha": "0716fa44", "message": "feat(data/set/intervals/basic): not_mem of various intervals (#6238)\n`c` is not in a given open/closed/unordered interval if it is outside the bounds of that interval (or if it is not in a superset of that interval).", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "not_mem_subset", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Icc_union_Ici'", ["set"]], ["mod", "theorem", "Icc_union_Ici", ["set"]], ["mod", "theorem", "Ico_union_Ici'", ["set"]], ["mod", "theorem", "Ico_union_Ici", ["set"]], ["mod", "theorem", "Iic_union_Icc'", ["set"]], ["mod", "theorem", "Iic_union_Icc", ["set"]], ["mod", "theorem", "Iic_union_Ioc'", ["set"]], ["mod", "theorem", "Iic_union_Ioc", ["set"]], ["mod", "theorem", "Iio_union_Ico'", ["set"]], ["mod", "theorem", "Iio_union_Ico", ["set"]], ["mod", "theorem", "Iio_union_Ioo'", ["set"]], ["mod", "theorem", "Iio_union_Ioo", ["set"]], ["mod", "theorem", "Ioc_union_Ioi'", ["set"]], ["mod", "theorem", "Ioc_union_Ioi", ["set"]], ["mod", "theorem", "Ioo_union_Ioi'", ["set"]], ["mod", "theorem", "Ioo_union_Ioi", ["set"]], ["add", "theorem", "not_mem_Icc_of_gt", ["set"]], ["add", "theorem", "not_mem_Icc_of_lt", ["set"]], ["add", "theorem", "not_mem_Ici", ["set"]], ["add", "theorem", "not_mem_Ico_of_ge", ["set"]], ["add", "theorem", "not_mem_Ico_of_lt", ["set"]], ["add", "theorem", "not_mem_Iic", ["set"]], ["add", "theorem", "not_mem_Iio", ["set"]], ["add", "theorem", "not_mem_Ioc_of_gt", ["set"]], ["add", "theorem", "not_mem_Ioc_of_le", ["set"]], ["add", "theorem", "not_mem_Ioi", ["set"]], ["add", "theorem", "not_mem_Ioo_of_ge", ["set"]], ["add", "theorem", "not_mem_Ioo_of_le", ["set"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "not_mem_interval_of_gt", ["set"]], ["add", "theorem", "not_mem_interval_of_lt", ["set"]]]}]}, {"timestamp": 1613477117, "sha": "914517b5", "message": "feat(order/well_founded_set): finite antidiagonal of well-founded sets (#6208)\nDefines `set.add_antidiagonal s t a`, the set of pairs of an element from `s` and an element from `t` that add to `a`\nIf `s` and `t` are well-founded, then constructs a finset version, `finset.add_antidiagonal_of_is_wf`", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "nonempty", ["set", "infinite"]]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": [["add", "theorem", "exists_increasing_or_nonincreasing_subseq'", []], ["add", "theorem", "exists_increasing_or_nonincreasing_subseq", []]]}, {"oldPath": "src/order/well_founded_set.lean", "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "mem_mul_antidiagonal", ["finset"]], ["add", "theorem", "not_well_founded_swap_of_infinite_of_well_order", []], ["add", "theorem", "eq_of_fst_eq_fst", ["set", "mul_antidiagonal"]], ["add", "theorem", "eq_of_snd_eq_snd", ["set", "mul_antidiagonal"]], ["add", "theorem", "finite_of_is_wf", ["set", "mul_antidiagonal"]], ["add", "theorem", "fst_eq_fst_iff_snd_eq_snd", ["set", "mul_antidiagonal"]], ["add", "def", "fst_rel_embedding", ["set", "mul_antidiagonal"]], ["add", "def", "lt_left", ["set", "mul_antidiagonal"]], ["add", "theorem", "mem_mul_antidiagonal", ["set", "mul_antidiagonal"]], ["add", "def", "snd_rel_embedding", ["set", "mul_antidiagonal"]], ["add", "def", "mul_antidiagonal", ["set"]]]}]}, {"timestamp": 1613477116, "sha": "1a438889", "message": "feat(analysis/normed_space/operator_norm): bundle more arguments (#6207)\n* Drop `lmul_left` in favor of a partially applied `lmul`.\n* Use `lmul_left_right` in `has_fderiv_at_ring_inverse` and related lemmas.\n* Add bundled `compL`, `lmulₗᵢ`, `lsmul`.\n* Make `𝕜` argument in `of_homothety` implicit.\n* Add `deriv₂` and `bilinear_comp`.", "changes": [{"oldPath": "src/analysis/analytic/linear.lean", "newPath": "src/analysis/analytic/linear.lean", "changes": [["add", "def", "fpower_series_bilinear", ["continuous_linear_map"]], ["add", "theorem", "fpower_series_bilinear_radius", ["continuous_linear_map"]], ["add", "def", "uncurry_bilinear", ["continuous_linear_map"]], ["add", "theorem", "uncurry_bilinear_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bounded_bilinear_map", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "bilinear_comp", ["continuous_linear_map"]], ["add", "theorem", "bilinear_comp_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_deriv₂", ["continuous_linear_map"]], ["add", "theorem", "coe_lmul_rightₗᵢ", ["continuous_linear_map"]], ["add", "theorem", "coe_lmulₗᵢ", ["continuous_linear_map"]], ["add", "def", "compL", ["continuous_linear_map"]], ["add", "theorem", "compL_apply", ["continuous_linear_map"]], ["add", "def", "deriv₂", ["continuous_linear_map"]], ["add", "theorem", "flip_apply", ["continuous_linear_map"]], ["add", "def", "lmul", ["continuous_linear_map"]], ["add", "theorem", "lmul_apply", ["continuous_linear_map"]], ["del", "def", "lmul_left", ["continuous_linear_map"]], ["del", "theorem", "lmul_left_apply", ["continuous_linear_map"]], ["del", "theorem", "lmul_left_norm", ["continuous_linear_map"]], ["mod", "def", "lmul_left_right", ["continuous_linear_map"]], ["mod", "theorem", "lmul_left_right_apply", ["continuous_linear_map"]], ["del", "theorem", "lmul_left_right_norm_le", ["continuous_linear_map"]], ["mod", "def", "lmul_right", ["continuous_linear_map"]], ["del", "theorem", "lmul_right_norm", ["continuous_linear_map"]], ["add", "def", "lmul_rightₗᵢ", ["continuous_linear_map"]], ["add", "def", "lmulₗᵢ", ["continuous_linear_map"]], ["add", "def", "lsmul", ["continuous_linear_map"]], ["add", "theorem", "map_add₂", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_apply", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_left_right_apply_apply_le", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_left_right_apply_le", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_left_right_le", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_right", ["continuous_linear_map"]], ["add", "theorem", "op_norm_lmul_right_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1613477115, "sha": "8d9eb266", "message": "chore(linear_algebra/finsupp): make lsum a linear_equiv (#6183)", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "coe_lsum", ["finsupp"]], ["mod", "def", "lsum", ["finsupp"]], ["mod", "theorem", "lsum_symm_apply", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": []}]}, {"timestamp": 1613477114, "sha": "314f5ad7", "message": "feat(ring_theory/finiteness): add quotient of finitely presented (#6098)\nI've added `algebra.finitely_presented.quotient`: the quotient of a finitely presented algebra by a finitely generated ideal is finitely presented. To do so I had to prove some preliminary results about finitely generated modules.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "span_eq_restrict_scalars", ["submodule"]], ["add", "theorem", "span_le_restrict_scalars", ["submodule"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "of_surjective", ["algebra", "finitely_presented"]], ["add", "theorem", "quotient", ["algebra", "finitely_presented"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_ker_comp", ["submodule"]], ["add", "theorem", "fg_ker_ring_hom_comp", ["submodule"]], ["add", "theorem", "fg_restrict_scalars", ["submodule"]]]}]}, {"timestamp": 1613477112, "sha": "3cec1cf6", "message": "feat(apply_fun): handle implicit arguments (#6091)\nI've modified the way `apply_fun` handles inequalities, by building an intermediate expression before calling `mono` to discharge the `monotone f` subgoal. This has the effect of sometimes filling in implicit arguments successfully, so that `mono` works.\nIn `tests/apply_fun.lean` I've added an example showing this in action", "changes": [{"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "test/apply_fun.lean", "newPath": "test/apply_fun.lean", "changes": []}]}, {"timestamp": 1613477111, "sha": "d3c56678", "message": "feat(number_theory/bernoulli): the odd Bernoulli numbers (greater than 1) are zero (#6056)\nThe proof requires a ring homomorphism between power series to be defined, `eval_mul_hom` . This PR defines it and states some of its properties, along with the result that `e^(ax) * e^(bx) = e^((a + b) x)`, which is needed for the final result, `bernoulli_odd_eq_zero`.", "changes": [{"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["add", "theorem", "bernoulli_odd_eq_zero", []]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["add", "theorem", "coeff_rescale", ["power_series"]], ["add", "theorem", "eval_neg_hom_X", ["power_series"]], ["add", "theorem", "rescale_neg_one_X", ["power_series"]], ["add", "theorem", "rescale_one", ["power_series"]], ["add", "theorem", "rescale_zero", ["power_series"]], ["add", "theorem", "rescale_zero_apply", ["power_series"]]]}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["add", "theorem", "exp_mul_exp_eq_exp_add", ["power_series"]], ["add", "theorem", "exp_mul_exp_neg_eq_one", ["power_series"]]]}]}, {"timestamp": 1613477110, "sha": "2da1ab41", "message": "feat(data/equiv): Add lemmas to reduce `@finset.univ (perm (fin n.succ)) _` (#5593)\nThe culmination of these lemmas is that `matrix.det` can now be reduced by a minimally steered simp:\n```lean\nimport data.matrix.notation\nimport group_theory.perm.fin\nimport linear_algebra.determinant\nopen finset\nexample {α : Type} [comm_ring α] {a b c d : α} :\n matrix.det ![![a, b], ![c, d]] = a * d - b * c :=\nbegin\n simp [matrix.det, univ_perm_fin_succ, ←univ_product_univ, sum_product, fin.sum_univ_succ, fin.prod_univ_succ],\n ring\nend\n```", "changes": [{"oldPath": null, "newPath": "src/data/equiv/option.lean", "changes": [["add", "theorem", "option_symm_apply_none_iff", ["equiv"]], ["add", "def", "remove_none", ["equiv"]], ["add", "theorem", "remove_none_map_equiv", ["equiv"]], ["add", "theorem", "remove_none_none", ["equiv"]], ["add", "theorem", "remove_none_some", ["equiv"]], ["add", "theorem", "remove_none_symm", ["equiv"]], ["add", "theorem", "some_remove_none_iff", ["equiv"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/perm/fin.lean", "changes": [["add", "theorem", "symm_sign", ["equiv", "perm", "decompose_fin"]], ["add", "def", "decompose_fin", ["equiv", "perm"]], ["add", "theorem", "decompose_fin_symm_apply_one", ["equiv", "perm"]], ["add", "theorem", "decompose_fin_symm_apply_succ", ["equiv", "perm"]], ["add", "theorem", "decompose_fin_symm_apply_zero", ["equiv", "perm"]], ["add", "theorem", "decompose_fin_symm_of_one", ["equiv", "perm"]], ["add", "theorem", "decompose_fin_symm_of_refl", ["equiv", "perm"]], ["add", "theorem", "univ_perm_fin_succ", ["finset"]]]}, {"oldPath": null, "newPath": "src/group_theory/perm/option.lean", "changes": [["add", "def", "decompose_option", ["equiv", "perm"]], ["add", "theorem", "decompose_option_symm_of_none_apply", ["equiv", "perm"]], ["add", "theorem", "decompose_option_symm_sign", ["equiv", "perm"]], ["add", "theorem", "map_equiv_option_injective", ["equiv_functor"]], ["add", "theorem", "map_none", ["equiv_functor", "option"]], ["add", "theorem", "sign", ["equiv_functor", "option"]], ["add", "theorem", "univ_perm_option", ["finset"]], ["add", "theorem", "map_equiv_option_one", []], ["add", "theorem", "map_equiv_option_refl", []], ["add", "theorem", "map_equiv_option_swap", []], ["add", "theorem", "map_equiv_remove_none", []]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1613467821, "sha": "dc917df7", "message": "feat(category/limits/shapes/zero): lemmas about is_isomorphic 0 (#6251)", "changes": [{"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "def", "iso_of_is_isomorphic_zero", ["category_theory", "limits"]], ["add", "theorem", "zero_of_source_iso_zero'", ["category_theory", "limits"]], ["add", "theorem", "zero_of_target_iso_zero'", ["category_theory", "limits"]]]}]}, {"timestamp": 1613467820, "sha": "d7003c1d", "message": "feat(algebra/category/Module): allow writing (0 : Module R) (#6249)", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}]}, {"timestamp": 1613467819, "sha": "2961e79c", "message": "feat(topology/connected.lean): define pi_0 and prove basic properties (#6188)\nDefine and prove basic properties of pi_0, the functor quotienting a space by its connected components. \nFor dot notation convenience, this PR renames `subset_connected_component` to `is_preconnected.subset_connected_component` and also defines the weaker version `is_connected.subset_connected_component`.", "changes": [{"oldPath": "src/topology/connected.lean", "newPath": "src/topology/connected.lean", "changes": [["add", "theorem", "connected_component_disjoint", []], ["add", "theorem", "connected_component_eq", []], ["add", "theorem", "connected_component_rel_iff", []], ["add", "def", "connected_component_setoid", []], ["add", "theorem", "image_connected_component_eq_singleton", ["continuous"]], ["add", "theorem", "image_connected_component_subset", ["continuous"]], ["add", "theorem", "image_eq_of_equiv", ["continuous"]], ["add", "def", "pi0_lift", ["continuous"]], ["add", "theorem", "pi0_lift_continuous", ["continuous"]], ["add", "theorem", "pi0_lift_factors", ["continuous"]], ["add", "theorem", "pi0_lift_unique", ["continuous"]], ["add", "def", "pi0_map", ["continuous"]], ["add", "theorem", "subset_connected_component", ["is_connected"]], ["add", "theorem", "subset_connected_component", ["is_preconnected"]], ["add", "theorem", "is_preconnected_connected_component", []], ["add", "def", "pi0", []], ["add", "theorem", "pi0_lift_unique'", []], ["add", "theorem", "pi0_preimage_image", []], ["add", "theorem", "pi0_preimage_singleton", []], ["add", "theorem", "preimage_connected_component_connected", []], ["del", "theorem", "subset_connected_component", []], ["add", "theorem", "totally_disconnected_space_iff_connected_component_singleton", []], ["add", "theorem", "totally_disconnected_space_iff_connected_component_subsingleton", []]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1613462988, "sha": "acf2b6d8", "message": "docs(algebraic_geometry/Scheme): fix typo in module docstring (#6254)", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}]}, {"timestamp": 1613457760, "sha": "dbe586c1", "message": "chore(scripts): update nolints.txt (#6248)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613434831, "sha": "97f7b523", "message": "chore(data/logic/unique): there is a unique function with domain pempty (#6243)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}]}, {"timestamp": 1613423065, "sha": "65fe78ae", "message": "feat(analysis/special_functions/trigonometric): add missing continuity attributes (#6236)\nI added continuity attributes to lemmas about the continuity of trigonometric functions, e.g. `continuous_sin`, `continuous_cos`, `continuous_tan`, etc. This came up in [this Zulip conversation](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/What's.20new.20in.20Lean.20maths.3F/near/221511451)\nI also added `real.continuous_tan`.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "continuous_tan", ["real"]]]}]}, {"timestamp": 1613409321, "sha": "0ed6f7c0", "message": "feat(data/real/liouville, topology/metric_space/basic): further preparations for Liouville (#6201)\nThese lemmas are used to show that a Liouville number is transcendental.\nThe statement that Liouville numbers are transcendental is the next PR in this sequence!", "changes": [{"oldPath": "src/data/real/liouville.lean", "newPath": "src/data/real/liouville.lean", "changes": [["add", "theorem", "exists_one_le_pow_mul_dist", []], ["add", "theorem", "exists_pos_real_of_irrational_root", []], ["del", "theorem", "irrational", ["is_liouville"]], ["del", "def", "is_liouville", []], ["add", "theorem", "irrational", ["liouville"]], ["add", "def", "liouville", []]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "mem_Icc_iff_abs_le", ["set"]]]}]}, {"timestamp": 1613395577, "sha": "26c6fb5b", "message": "chore(data/set/basic): set.union_univ and set.univ_union (#6239)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "union_univ", ["set"]], ["add", "theorem", "univ_union", ["set"]]]}]}, {"timestamp": 1613395576, "sha": "d6db0386", "message": "refactor(analysis/normed_space/multilinear): use `≃ₗᵢ` for `curry` equivs (#6232)\nAlso copy some `continuous_linear_equiv` API to `linear_isometry_equiv` (e.g., all API in `analysis.calculus.fderiv`).", "changes": [{"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}, {"oldPath": "src/analysis/analytic/linear.lean", "newPath": "src/analysis/analytic/linear.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "comp_differentiable_at_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_differentiable_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_differentiable_on_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_differentiable_within_at_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_fderiv", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_fderiv_within", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_has_fderiv_at_iff'", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_has_fderiv_at_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_has_fderiv_within_at_iff'", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_has_fderiv_within_at_iff", ["continuous_linear_equiv"]], ["mod", "theorem", "comp_has_strict_fderiv_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_differentiable_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_differentiable_on_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_differentiable_within_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_fderiv", ["linear_isometry_equiv"]], ["add", "theorem", "comp_fderiv_within", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff'", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff'", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_has_strict_fderiv_at_iff", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff", ["continuous_linear_equiv"]], ["add", "theorem", "times_cont_diff", ["linear_isometry_equiv"]], ["add", "theorem", "times_cont_diff", ["linear_isometry_map"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "coe_norm", []], ["add", "theorem", "norm_coe", ["submodule"]], ["add", "theorem", "norm_mk", ["submodule"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_coe''", ["linear_isometry_equiv"]], ["add", "theorem", "coe_coe'", ["linear_isometry_equiv"]], ["add", "theorem", "coe_coe", ["linear_isometry_equiv"]], ["del", "theorem", "coe_symm_to_linear_equiv", ["linear_isometry_equiv"]], ["add", "theorem", "coe_to_homeomorph", ["linear_isometry_equiv"]], ["add", "theorem", "coe_to_isometric", ["linear_isometry_equiv"]], ["add", "theorem", "comp_continuous_iff", ["linear_isometry_equiv"]], ["add", "theorem", "comp_continuous_on_iff", ["linear_isometry_equiv"]], ["mod", "theorem", "diam_image", ["linear_isometry_equiv"]], ["mod", "theorem", "ediam_image", ["linear_isometry_equiv"]], ["mod", "theorem", "map_eq_iff", ["linear_isometry_equiv"]], ["del", "def", "to_continuous_linear_equiv", ["linear_isometry_equiv"]], ["add", "def", "to_homeomorph", ["linear_isometry_equiv"]], ["add", "theorem", "to_homeomorph_symm", ["linear_isometry_equiv"]], ["add", "theorem", "to_isometric_symm", ["linear_isometry_equiv"]], ["add", "theorem", "to_linear_equiv_symm", ["linear_isometry_equiv"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "def", "continuous_multilinear_curry_fin0", []], ["del", "theorem", "continuous_multilinear_curry_fin0_apply_norm", []], ["del", "def", "continuous_multilinear_curry_fin0_aux", []], ["del", "theorem", "continuous_multilinear_curry_fin0_symm_apply_norm", []], ["mod", "def", "continuous_multilinear_curry_fin1", []], ["del", "theorem", "continuous_multilinear_curry_fin1_apply_norm", []], ["del", "theorem", "continuous_multilinear_curry_fin1_symm_apply_norm", []], ["del", "def", "continuous_multilinear_curry_left_equiv_aux", []], ["del", "theorem", "continuous_multilinear_curry_right_equiv_apply_norm", []], ["del", "def", "continuous_multilinear_curry_right_equiv_aux", []], ["del", "theorem", "continuous_multilinear_curry_right_equiv_symm_apply_norm", []], ["mod", "theorem", "curry0_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "uncurry0_norm", ["continuous_multilinear_map"]]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "def", "to_homeomorph", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "comp_continuous_iff", ["isometry"]], ["add", "theorem", "comp_continuous_on_iff", ["isometry"]]]}]}, {"timestamp": 1613395575, "sha": "f5c55aea", "message": "feat(analysis/normed_space/basic): uniform_continuous_norm (#6162)\nFrom `lean-liquid`", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "dist_zero_left", []], ["add", "theorem", "lipschitz_with_one_norm", []], ["mod", "theorem", "norm_eq_abs", ["real"]], ["add", "theorem", "uniform_continuous_nnnorm", []], ["add", "theorem", "uniform_continuous_norm", []]]}]}, {"timestamp": 1613395574, "sha": "0fa13128", "message": "feat(linear_algebra/unitary_group): add unitary/orthogonal groups (#5702)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "star_mul", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/unitary_group.lean", "changes": [["add", "def", "orthogonal_group", ["matrix"]], ["add", "theorem", "coe_to_GL", ["matrix", "unitary_group"]], ["add", "def", "embedding_GL", ["matrix", "unitary_group"]], ["add", "theorem", "ext", ["matrix", "unitary_group"]], ["add", "theorem", "ext_iff", ["matrix", "unitary_group"]], ["add", "theorem", "inv_apply", ["matrix", "unitary_group"]], ["add", "theorem", "inv_val", ["matrix", "unitary_group"]], ["add", "theorem", "mul_apply", ["matrix", "unitary_group"]], ["add", "theorem", "mul_val", ["matrix", "unitary_group"]], ["add", "theorem", "one_apply", ["matrix", "unitary_group"]], ["add", "theorem", "one_val", ["matrix", "unitary_group"]], ["add", "theorem", "star_mul_self", ["matrix", "unitary_group"]], ["add", "def", "to_GL", ["matrix", "unitary_group"]], ["add", "theorem", "to_GL_mul", ["matrix", "unitary_group"]], ["add", "theorem", "to_GL_one", ["matrix", "unitary_group"]], ["add", "def", "to_lin'", ["matrix", "unitary_group"]], ["add", "theorem", "to_lin'_mul", ["matrix", "unitary_group"]], ["add", "theorem", "to_lin'_one", ["matrix", "unitary_group"]], ["add", "def", "to_linear_equiv", ["matrix", "unitary_group"]], ["add", "def", "unitary_group", ["matrix"]], ["add", "theorem", "star_mem", ["matrix", "unitary_submonoid"]], ["add", "theorem", "star_mem_iff", ["matrix", "unitary_submonoid"]], ["add", "def", "unitary_submonoid", []]]}]}, {"timestamp": 1613383304, "sha": "9f0687c7", "message": "feat(order/liminf_limsup): liminf_nat_add and liminf_le_of_frequently_le' (#6220)\nAdd `liminf_nat_add (f : ℕ → α) (k : ℕ) : at_top.liminf f = at_top.liminf (λ i, f (i + k))`. Same for `limsup`.\nAdd `liminf_le_of_frequently_le'`, variant of `liminf_le_of_frequently_le` in which the lattice is complete but there is no linear order. Same for `limsup`.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "supr_nat_add", ["monotone"]], ["add", "theorem", "supr_infi_ge_nat_add", []]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "le_limsup_of_frequently_le'", ["filter"]], ["add", "theorem", "liminf_le_of_frequently_le'", ["filter"]], ["add", "theorem", "liminf_nat_add", ["filter"]], ["add", "theorem", "limsup_nat_add", ["filter"]]]}]}, {"timestamp": 1613358076, "sha": "1f0bf337", "message": "chore(scripts): update nolints.txt (#6234)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613358075, "sha": "04692680", "message": "doc(topology/subset_properties): minor change to docstring of `is_compact` (#6231)\nI'm learning (for the first time) about how to do topology with filters, and this docstring confused me for a second. If there are linguistic reasons for leaving it as it is then fair enough, but it wasn't clear to me on first reading that `a` was independent of the set in the filter.", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1613358074, "sha": "5a6c8934", "message": "feat(topology/algebra/module): 2 new ext lemmas (#6211)\nAdd ext lemmas for maps `f : M × M₂ →L[R] M₃` and `f : R →L[R] M`.", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["mod", "def", "inl", ["linear_map"]], ["mod", "def", "inr", ["linear_map"]], ["add", "theorem", "prod_ext_iff", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_inl", ["continuous_linear_map"]], ["add", "theorem", "coe_inr", ["continuous_linear_map"]], ["add", "theorem", "ext_ring", ["continuous_linear_map"]], ["add", "theorem", "ext_ring_iff", ["continuous_linear_map"]], ["add", "def", "inl", ["continuous_linear_map"]], ["add", "theorem", "inl_apply", ["continuous_linear_map"]], ["add", "def", "inr", ["continuous_linear_map"]], ["add", "theorem", "inr_apply", ["continuous_linear_map"]], ["add", "def", "prod_equiv", ["continuous_linear_map"]], ["add", "theorem", "prod_ext", ["continuous_linear_map"]], ["add", "theorem", "prod_ext_iff", ["continuous_linear_map"]], ["mod", "def", "prodₗ", ["continuous_linear_map"]]]}]}, {"timestamp": 1613358073, "sha": "c94577a6", "message": "feat(group_theory/free_abelian_group): add module doc and some equivs (#6062)\nAlso add some API for `free_abelian_group.map`.", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "def", "equiv_of_equiv", ["free_abelian_group"]], ["add", "theorem", "map_comp", ["free_abelian_group"]], ["add", "theorem", "map_comp_apply", ["free_abelian_group"]], ["add", "theorem", "map_id", ["free_abelian_group"]], ["add", "theorem", "map_id_apply", ["free_abelian_group"]], ["add", "theorem", "map_of_apply", ["free_abelian_group"]], ["add", "def", "punit_equiv", ["free_abelian_group"]]]}]}, {"timestamp": 1613344678, "sha": "6f99407e", "message": "feat(analysis/calculus/inverse): a function with onto strict derivative is locally onto (#6229)\nRemoves a useless assumption in `map_nhds_eq_of_complemented` (no need to have a completemented subspace).\nThe proof of the local inverse theorem breaks into two parts, local injectivity and local surjectivity. We refactor the local surjectivity part, assuming in the proof only that the derivative is onto. The result is stronger, but the proof is less streamlined since there is no contracting map any more: we give a naive proof from first principles instead of reducing to the fixed point theorem for contracting maps.", "changes": [{"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": [["del", "theorem", "map_nhds_eq", ["has_strict_fderiv_at"]], ["del", "theorem", "map_nhds_eq_of_complemented", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "image_mem_nhds", ["approximates_linear_on"]], ["del", "def", "inverse_approx_map", ["approximates_linear_on"]], ["del", "theorem", "inverse_approx_map_contracts_on", ["approximates_linear_on"]], ["del", "theorem", "inverse_approx_map_dist_self", ["approximates_linear_on"]], ["del", "theorem", "inverse_approx_map_dist_self_le", ["approximates_linear_on"]], ["del", "theorem", "inverse_approx_map_fixed_iff", ["approximates_linear_on"]], ["del", "theorem", "inverse_approx_map_maps_to", ["approximates_linear_on"]], ["del", "theorem", "inverse_approx_map_sub", ["approximates_linear_on"]], ["add", "theorem", "map_nhds_eq", ["approximates_linear_on"]], ["add", "theorem", "open_image", ["approximates_linear_on"]], ["del", "theorem", "surj_on_closed_ball", ["approximates_linear_on"]], ["add", "theorem", "surj_on_closed_ball_of_nonlinear_right_inverse", ["approximates_linear_on"]], ["add", "theorem", "map_nhds_eq_of_surj", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "exists_nonlinear_right_inverse_of_surjective", ["continuous_linear_map"]], ["add", "theorem", "bound", ["continuous_linear_map", "nonlinear_right_inverse"]], ["add", "theorem", "right_inv", ["continuous_linear_map", "nonlinear_right_inverse"]], ["add", "structure", "nonlinear_right_inverse", ["continuous_linear_map"]], ["add", "theorem", "nonlinear_right_inverse_of_surjective_nnnorm_pos", ["continuous_linear_map"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "subsingleton_iff", ["equiv"]]]}]}, {"timestamp": 1613331677, "sha": "22b26d3c", "message": "chore(algebra/group/basic): remove three redundant lemmas (#6197)\nThe following lemmas are changed in this PR (long list because of the additive versions:\n* `mul_eq_left_iff` for `left_cancel_monoid` is renamed to `mul_right_eq_self` which previously was stated for `group`\n* `add_eq_left_iff` the additive version is automatically renamed to `add_right_eq_self`\n* `mul_eq_right_iff` for `right_cancel_monoid` is renamed to `mul_left_eq_self` which previously was stated for `group`\n* `add_eq_right_iff` the additive version is automatically renamed to `add_left_eq_self`\n* `left_eq_mul_iff` is renamed to `self_eq_mul_right` to fit the convention above\n* `left_eq_add_iff` is renamed to `self_eq_add_right` to fit the convention above\n* `right_eq_mul_iff` is renamed to `self_eq_mul_left` to fit the convention above\n* `right_eq_add_iff` is renamed to `self_eq_add_left` to fit the convention above\n* the duplicate `mul_left_eq_self` and `add_left_eq_self` for groups are removed\n* the duplicate `mul_right_eq_self` and `add_right_eq_self` for groups are removed\n* `mul_self_iff_eq_one` and `add_self_iff_eq_zero` deal only with the special case `a=b` of the other lemmas. It is therefore removed and the few instances in the library are replaced by one of the above. \nWhile I was at it, I provided a module doc for this file.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "left_eq_mul_iff", []], ["del", "theorem", "mul_eq_left_iff", []], ["del", "theorem", "mul_eq_right_iff", []], ["mod", "theorem", "mul_left_eq_self", []], ["mod", "theorem", "mul_right_eq_self", []], ["del", "theorem", "mul_self_iff_eq_one", []], ["del", "theorem", "right_eq_mul_iff", []], ["add", "theorem", "self_eq_mul_left", []], ["add", "theorem", "self_eq_mul_right", []]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1613318760, "sha": "c35672bb", "message": "feat(analysis/special_functions): strict differentiability of some functions (#6228)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "const_mul", ["has_strict_deriv_at"]], ["add", "theorem", "const_sub", ["has_strict_deriv_at"]], ["add", "theorem", "div", ["has_strict_deriv_at"]], ["add", "theorem", "mul_const", ["has_strict_deriv_at"]], ["add", "theorem", "has_strict_deriv_at_iff_has_strict_fderiv_at", []]]}, {"oldPath": "src/analysis/complex/real_deriv.lean", "newPath": "src/analysis/complex/real_deriv.lean", "changes": [["add", "theorem", "real_of_complex", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "cexp", ["has_strict_deriv_at"]], ["add", "theorem", "cexp", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "has_strict_deriv_at_cos", ["complex"]], ["add", "theorem", "has_strict_deriv_at_cosh", ["complex"]], ["add", "theorem", "has_strict_deriv_at_sin", ["complex"]], ["add", "theorem", "has_strict_deriv_at_sinh", ["complex"]], ["add", "theorem", "has_strict_deriv_at_tan", ["complex"]], ["add", "theorem", "arctan", ["has_strict_deriv_at"]], ["add", "theorem", "ccos", ["has_strict_deriv_at"]], ["add", "theorem", "ccosh", ["has_strict_deriv_at"]], ["add", "theorem", "cos", ["has_strict_deriv_at"]], ["add", "theorem", "cosh", ["has_strict_deriv_at"]], ["add", "theorem", "csin", ["has_strict_deriv_at"]], ["add", "theorem", "csinh", ["has_strict_deriv_at"]], ["add", "theorem", "sin", ["has_strict_deriv_at"]], ["add", "theorem", "sinh", ["has_strict_deriv_at"]], ["add", "theorem", "arctan", ["has_strict_fderiv_at"]], ["add", "theorem", "ccos", ["has_strict_fderiv_at"]], ["add", "theorem", "ccosh", ["has_strict_fderiv_at"]], ["add", "theorem", "cos", ["has_strict_fderiv_at"]], ["add", "theorem", "cosh", ["has_strict_fderiv_at"]], ["add", "theorem", "csin", ["has_strict_fderiv_at"]], ["add", "theorem", "csinh", ["has_strict_fderiv_at"]], ["add", "theorem", "sin", ["has_strict_fderiv_at"]], ["add", "theorem", "sinh", ["has_strict_fderiv_at"]], ["add", "theorem", "has_strict_deriv_at_arccos", ["real"]], ["add", "theorem", "has_strict_deriv_at_arcsin", ["real"]], ["add", "theorem", "has_strict_deriv_at_arctan", ["real"]], ["add", "theorem", "has_strict_deriv_at_cos", ["real"]], ["add", "theorem", "has_strict_deriv_at_cosh", ["real"]], ["add", "theorem", "has_strict_deriv_at_sin", ["real"]], ["add", "theorem", "has_strict_deriv_at_sinh", ["real"]], ["add", "theorem", "has_strict_deriv_at_tan", ["real"]]]}]}, {"timestamp": 1613318759, "sha": "713432fa", "message": "chore(.github/PULL_REQUEST_TEMPLATE.md): clarify instructions (#6222)", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}]}, {"timestamp": 1613312211, "sha": "b9af22d0", "message": "fix(*): arsinh and complex.basic had module docs at the wrong position (#6230)\nThis is fixed and the module doc for `complex.basic` is expanded slightly.", "changes": [{"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}]}, {"timestamp": 1613274068, "sha": "c54a8d09", "message": "chore(scripts): update nolints.txt (#6227)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613266125, "sha": "86e8a5d2", "message": "fix(data/real/basic): remove `decidable_le` field in `real.conditionally_complete_linear_order` (#6223)\nBecause of this field, `@conditionally_complete_linear_order.to_linear_order ℝ real.conditionally_complete_linear_order` and `real.linear_order` were not defeq\nSee : https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Different.20linear.20orders.20on.20reals/near/226257434\nCo-authored by @urkud", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1613255747, "sha": "b0aae273", "message": "feat(algebra/category/Group/adjunctions): free_group-forgetful adjunction (#6190)\nFurthermore, a module doc for `group_theory/free_group` is provided and a few lines in this file are split.", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": [["add", "def", "adj", ["Group"]], ["add", "def", "free", ["Group"]]]}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["mod", "def", "free_group_unit_equiv_int", ["free_group"]], ["add", "def", "lift", ["free_group"]], ["mod", "theorem", "mul_bind", ["free_group"]], ["mod", "theorem", "not", ["free_group", "reduce"]]]}]}, {"timestamp": 1613255746, "sha": "07600ee4", "message": "feat(computability/epsilon_nfa): epsilon-NFA definition (#6108)", "changes": [{"oldPath": null, "newPath": "src/computability/epsilon_NFA.lean", "changes": [["add", "def", "to_ε_NFA", ["NFA"]], ["add", "theorem", "to_ε_NFA_correct", ["NFA"]], ["add", "theorem", "to_ε_NFA_eval_from_match", ["NFA"]], ["add", "theorem", "to_ε_NFA_ε_closure", ["NFA"]], ["add", "def", "accepts", ["ε_NFA"]], ["add", "def", "eval", ["ε_NFA"]], ["add", "def", "eval_from", ["ε_NFA"]], ["add", "theorem", "pumping_lemma", ["ε_NFA"]], ["add", "def", "step_set", ["ε_NFA"]], ["add", "def", "to_NFA", ["ε_NFA"]], ["add", "theorem", "to_NFA_correct", ["ε_NFA"]], ["add", "theorem", "to_NFA_eval_from_match", ["ε_NFA"]], ["add", "inductive", "ε_closure", ["ε_NFA"]], ["add", "structure", "ε_NFA", []]]}]}, {"timestamp": 1613244778, "sha": "ac19b4a9", "message": "refactor(measure_theory/l1_space): remove one of the two definitions of L1 space (#6058)\nCurrently, we have two independent versions of the `L^1` space in mathlib: one coming from the general family of `L^p` spaces, the other one is an ad hoc construction based on the `integrable` predicate used in the construction of the Bochner integral.\nWe remove the second construction, and use instead the `L^1` space coming from the family of `L^p` spaces to construct the Bochner integral. Still, we keep the `integrable` predicate as it is generally useful, and show that it coincides with the `mem_Lp 1` predicate.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "coe_norm_subgroup", []]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["add", "theorem", "ext_iff", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "continuous_integral", ["measure_theory", "L1"]], ["add", "def", "integral", ["measure_theory", "L1"]], ["add", "theorem", "integral_add", ["measure_theory", "L1"]], ["add", "def", "integral_clm", ["measure_theory", "L1"]], ["add", "theorem", "integral_eq", ["measure_theory", "L1"]], ["add", "theorem", "integral_eq_integral", ["measure_theory", "L1"]], ["add", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "L1"]], ["add", "theorem", "integral_neg", ["measure_theory", "L1"]], ["add", "theorem", "integral_of_fun_eq_integral", ["measure_theory", "L1"]], ["add", "theorem", "integral_smul", ["measure_theory", "L1"]], ["add", "theorem", "integral_sub", ["measure_theory", "L1"]], ["add", "theorem", "integral_zero", ["measure_theory", "L1"]], ["add", "theorem", "norm_Integral_le_one", ["measure_theory", "L1"]], ["add", "theorem", "norm_eq_integral_norm", ["measure_theory", "L1"]], ["add", "theorem", "norm_integral_le", ["measure_theory", "L1"]], ["add", "theorem", "norm_of_fun_eq_integral_norm", ["measure_theory", "L1"]], ["add", "theorem", "add_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_add", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_coe", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_neg", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_neg_part", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_pos_part", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_smul", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_sub", ["measure_theory", "L1", "simple_func"]], ["add", "def", "coe_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "coe_zero", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "dist_eq", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "dist_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "edist_eq", ["measure_theory", "L1", "simple_func"]], ["add", "def", "integral", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "integral_L1_eq_integral", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "integral_add", ["measure_theory", "L1", "simple_func"]], ["add", "def", "integral_clm", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "integral_congr", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "integral_eq_integral", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "integral_eq_lintegral", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "integral_smul", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "lintegral_edist_to_simple_func_lt_top", ["measure_theory", "L1", "simple_func"]], ["add", "def", "neg_part", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "neg_part_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "neg_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_Integral_le_one", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_eq", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_eq_integral", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_integral_le_norm", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "norm_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "def", "pos_part", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "pos_part_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "smul_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "sub_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "def", "to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_add", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_eq_mk", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_eq_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_neg", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_smul", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_sub", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_L1_zero", ["measure_theory", "L1", "simple_func"]], ["add", "def", "to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "to_simple_func_to_L1", ["measure_theory", "L1", "simple_func"]], ["add", "theorem", "zero_to_simple_func", ["measure_theory", "L1", "simple_func"]], ["add", "def", "simple_func", ["measure_theory", "L1"]], ["del", "theorem", "continuous_integral", ["measure_theory", "l1"]], ["del", "def", "integral", ["measure_theory", "l1"]], ["del", "theorem", "integral_add", ["measure_theory", "l1"]], ["del", "def", "integral_clm", ["measure_theory", "l1"]], ["del", "theorem", "integral_eq", ["measure_theory", "l1"]], ["del", "theorem", "integral_eq_integral", ["measure_theory", "l1"]], ["del", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "l1"]], ["del", "theorem", "integral_neg", ["measure_theory", "l1"]], ["del", "theorem", "integral_of_fun_eq_integral", ["measure_theory", "l1"]], ["del", "theorem", "integral_smul", ["measure_theory", "l1"]], ["del", "theorem", "integral_sub", ["measure_theory", "l1"]], ["del", "theorem", "integral_zero", ["measure_theory", "l1"]], ["del", "theorem", "norm_Integral_le_one", ["measure_theory", "l1"]], ["del", "theorem", "norm_eq_integral_norm", ["measure_theory", "l1"]], ["del", "theorem", "norm_integral_le", ["measure_theory", "l1"]], ["del", "theorem", "norm_of_fun_eq_integral_norm", ["measure_theory", "l1"]], ["del", "theorem", "add_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_add", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_coe", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_neg", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_neg_part", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_pos_part", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_smul", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_sub", ["measure_theory", "l1", "simple_func"]], ["del", "def", "coe_to_l1", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "coe_zero", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "dist_eq", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "dist_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "edist_eq", ["measure_theory", "l1", "simple_func"]], ["del", "def", "integral", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_add", ["measure_theory", "l1", "simple_func"]], ["del", "def", "integral_clm", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_congr", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_eq_integral", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_eq_lintegral", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_l1_eq_integral", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_smul", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "lintegral_edist_to_simple_func_lt_top", ["measure_theory", "l1", "simple_func"]], ["del", "def", "neg_part", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "neg_part_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "neg_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_Integral_le_one", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_eq'", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_eq", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_eq_integral", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_integral_le_norm", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "def", "of_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_add", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_eq_mk", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_eq_of_fun", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_neg", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_smul", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_sub", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "of_simple_func_zero", ["measure_theory", "l1", "simple_func"]], ["del", "def", "pos_part", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "pos_part_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "smul_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "sub_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "def", "to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "to_simple_func_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "zero_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "def", "simple_func", ["measure_theory", "l1"]], ["add", "theorem", "tendsto_integral_of_L1", ["measure_theory"]], ["del", "theorem", "tendsto_integral_of_l1", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "ae_measurable_coe_fn", ["measure_theory", "L1"]], ["add", "theorem", "dist_def", ["measure_theory", "L1"]], ["add", "theorem", "edist_def", ["measure_theory", "L1"]], ["add", "theorem", "has_finite_integral_coe_fn", ["measure_theory", "L1"]], ["add", "theorem", "integrable_coe_fn", ["measure_theory", "L1"]], ["add", "theorem", "measurable_coe_fn", ["measure_theory", "L1"]], ["add", "theorem", "norm_def", ["measure_theory", "L1"]], ["add", "theorem", "norm_sub_eq_lintegral", ["measure_theory", "L1"]], ["add", "theorem", "of_real_norm_eq_lintegral", ["measure_theory", "L1"]], ["add", "theorem", "of_real_norm_sub_eq_lintegral", ["measure_theory", "L1"]], ["mod", "def", "integrable", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_iff_mem_L1", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_zero", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_to_L1", ["measure_theory", "integrable"]], ["add", "theorem", "edist_to_L1_to_L1", ["measure_theory", "integrable"]], ["add", "theorem", "edist_to_L1_zero", ["measure_theory", "integrable"]], ["add", "theorem", "norm_to_L1", ["measure_theory", "integrable"]], ["add", "theorem", "norm_to_L1_eq_lintegral_norm", ["measure_theory", "integrable"]], ["add", "def", "to_L1", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_add", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_coe_fn", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_eq_mk", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_eq_to_L1_iff", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_neg", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_smul", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_sub", ["measure_theory", "integrable"]], ["add", "theorem", "to_L1_zero", ["measure_theory", "integrable"]], ["del", "theorem", "add_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "coe_add", ["measure_theory", "l1"]], ["del", "theorem", "coe_coe", ["measure_theory", "l1"]], ["del", "theorem", "coe_neg", ["measure_theory", "l1"]], ["del", "theorem", "coe_pos_part", ["measure_theory", "l1"]], ["del", "theorem", "coe_smul", ["measure_theory", "l1"]], ["del", "theorem", "coe_sub", ["measure_theory", "l1"]], ["del", "theorem", "coe_zero", ["measure_theory", "l1"]], ["del", "theorem", "continuous_neg_part", ["measure_theory", "l1"]], ["del", "theorem", "continuous_pos_part", ["measure_theory", "l1"]], ["del", "theorem", "dist_eq", ["measure_theory", "l1"]], ["del", "theorem", "dist_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "edist_eq", ["measure_theory", "l1"]], ["del", "theorem", "integrable_norm", ["measure_theory", "l1"]], ["del", "theorem", "lintegral_edist_to_fun_lt_top", ["measure_theory", "l1"]], ["del", "theorem", "measurable_norm", ["measure_theory", "l1"]], ["del", "theorem", "mk_to_fun", ["measure_theory", "l1"]], ["del", "def", "neg_part", ["measure_theory", "l1"]], ["del", "theorem", "neg_part_to_fun_eq_max", ["measure_theory", "l1"]], ["del", "theorem", "neg_part_to_fun_eq_min", ["measure_theory", "l1"]], ["del", "theorem", "neg_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "norm_eq", ["measure_theory", "l1"]], ["del", "theorem", "norm_eq_lintegral", ["measure_theory", "l1"]], ["del", "theorem", "norm_eq_nnnorm_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "norm_eq_norm_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "norm_le_norm_of_ae_le", ["measure_theory", "l1"]], ["del", "theorem", "norm_of_fun", ["measure_theory", "l1"]], ["del", "theorem", "norm_of_fun_eq_lintegral_norm", ["measure_theory", "l1"]], ["del", "theorem", "norm_sub_eq_lintegral", ["measure_theory", "l1"]], ["del", "def", "of_fun", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_add", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_eq_mk", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_eq_of_fun", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_neg", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_smul", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_sub", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "of_fun_zero", ["measure_theory", "l1"]], ["del", "theorem", "of_real_norm_eq_lintegral", ["measure_theory", "l1"]], ["del", "theorem", "of_real_norm_sub_eq_lintegral", ["measure_theory", "l1"]], ["del", "def", "pos_part", ["measure_theory", "l1"]], ["del", "theorem", "pos_part_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "smul_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "sub_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "to_fun_of_fun", ["measure_theory", "l1"]], ["del", "theorem", "zero_to_fun", ["measure_theory", "l1"]], ["del", "def", "l1", ["measure_theory"]], ["add", "theorem", "integrable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_one_iff_integrable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["del", "def", "comp_l1", ["continuous_linear_map"]], ["del", "def", "comp_l1L", ["continuous_linear_map"]], ["del", "theorem", "comp_l1_apply", ["continuous_linear_map"]], ["del", "def", "comp_l1ₗ", ["continuous_linear_map"]], ["add", "theorem", "continuous_integral_comp_L1", ["continuous_linear_map"]], ["del", "theorem", "continuous_integral_comp_l1", ["continuous_linear_map"]], ["del", "theorem", "integrable_comp_l1", ["continuous_linear_map"]], ["add", "theorem", "integral_comp_L1_comm", ["continuous_linear_map"]], ["add", "theorem", "integral_comp_Lp", ["continuous_linear_map"]], ["del", "theorem", "integral_comp_l1", ["continuous_linear_map"]], ["del", "theorem", "integral_comp_l1_comm", ["continuous_linear_map"]], ["del", "theorem", "measurable_comp_l1", ["continuous_linear_map"]], ["del", "theorem", "norm_comp_l1_apply_le", ["continuous_linear_map"]], ["del", "theorem", "norm_comp_l1_le", ["continuous_linear_map"]], ["del", "theorem", "norm_compl1L_le", ["continuous_linear_map"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["add", "theorem", "tendsto_approx_on_L1_edist", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_l1_edist", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_L1", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_L1_edist", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_l1", ["measure_theory", "simple_func"]], ["del", "theorem", "tendsto_approx_on_univ_l1_edist", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}]}, {"timestamp": 1613237007, "sha": "ad5a81d3", "message": "chore(measure_theory/measure_space): add some `simp`/`mono` tags (#6221)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "ae_eq_empty", ["measure_theory"]], ["mod", "theorem", "measure_mono_ae", ["measure_theory"]], ["mod", "theorem", "union_ae_eq_right", ["measure_theory"]]]}]}, {"timestamp": 1613226856, "sha": "3cfaa0bf", "message": "feat(measure_theory/measure_space): add ae_imp_iff (#6218)\nThis is `filter.eventually_imp_distrib_left` specialized to the measure.ae filter.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_imp_iff", ["measure_theory"]], ["mod", "theorem", "sub_apply_eq_zero_of_restrict_le_restrict", ["measure_theory", "measure"]]]}]}, {"timestamp": 1613218692, "sha": "d0456d3b", "message": "feat(measure_theory/borel_space): add ae_measurable versions of finset.measurable_prod and measurable.ennreal_tsum (#6217)\nAlso add an ae_measurable version of `ae_lt_top`.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "ennreal_tsum", ["ae_measurable"]], ["add", "theorem", "ae_measurable_prod", ["finset"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "ae_lt_top'", ["measure_theory"]]]}]}, {"timestamp": 1613218691, "sha": "42bb0c4b", "message": "feat(ring_theory/ideal/operations): add first isomorphism theorem for rings and algebras (#6166)\nThe first isomorphism theorem for commutative rings `quotient_ker_equiv_of_surjective` and algebras `quotient_ker_alg_equiv_of_surjective`.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "map_smul", ["ideal", "ker_lift"]], ["add", "def", "ker_lift_alg", ["ideal"]], ["add", "theorem", "ker_lift_alg_injective", ["ideal"]], ["add", "theorem", "ker_lift_alg_mk", ["ideal"]], ["add", "theorem", "ker_lift_alg_to_ring_hom", ["ideal"]], ["add", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse"]], ["add", "def", "quotient_ker_alg_equiv_of_right_inverse", ["ideal"]], ["add", "theorem", "apply", ["ideal", "quotient_ker_alg_equiv_of_right_inverse_symm"]], ["add", "def", "ker_lift", ["ring_hom"]], ["add", "theorem", "ker_lift_injective", ["ring_hom"]], ["add", "theorem", "ker_lift_mk", ["ring_hom"]], ["add", "theorem", "apply", ["ring_hom", "quotient_ker_equiv_of_right_inverse"]], ["add", "theorem", "apply", ["ring_hom", "quotient_ker_equiv_of_right_inverse", "symm"]], ["add", "def", "quotient_ker_equiv_of_right_inverse", ["ring_hom"]]]}]}, {"timestamp": 1613218690, "sha": "8b59d97d", "message": "feat(linear_algebra/pi_tensor_product): tmul distributes over tprod (#6126)\nThis adds the equivalence `(⨂[R] i : ι, M) ⊗[R] (⨂[R] i : ι₂, M) ≃ₗ[R] ⨂[R] i : ι ⊕ ι₂, M`.\nWorking with dependently-typed `M` here is more trouble than it's worth, as we don't have any typeclass structures on `sum.elim M N` right now,\nThis is one of the pieces needed to provide a ring structure on `⨁ n, ⨂[R] i : fin n, M`, but that's left for another time.", "changes": [{"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": [["add", "def", "tmul_equiv", ["pi_tensor_product"]], ["add", "theorem", "tmul_equiv_apply", ["pi_tensor_product"]], ["add", "theorem", "tmul_equiv_symm_apply", ["pi_tensor_product"]]]}]}, {"timestamp": 1613209677, "sha": "445e6fc0", "message": "refactor(topology/{basic,continuous_on}): review `continuous_if` etc (#6182)\n* move `continuous_if` to `topology/continuous_on`, use weaker assumptions;\n* add `piecewise` versions of various `if` lemmas;\n* add a specialized `continuous_if_le` version;\n* use dot notation for `continuous_on.if` and `continuous_on.if'`;\n* minor golfing here and there.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "if", ["filter", "tendsto"]], ["add", "theorem", "piecewise", ["filter", "tendsto"]], ["del", "theorem", "tendsto_if", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "if_le", ["continuous"]], ["add", "theorem", "continuous_if_le", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "continuous_if", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "if", ["continuous"]], ["add", "theorem", "piecewise", ["continuous"]], ["mod", "theorem", "continuous_if'", []], ["add", "theorem", "continuous_if", []], ["add", "theorem", "if'", ["continuous_on"]], ["add", "theorem", "if", ["continuous_on"]], ["add", "theorem", "piecewise'", ["continuous_on"]], ["add", "theorem", "piecewise", ["continuous_on"]], ["del", "theorem", "continuous_on_if'", []], ["del", "theorem", "continuous_on_if", []], ["add", "theorem", "continuous_piecewise", []], ["add", "theorem", "if_nhds_within", ["filter", "tendsto"]], ["add", "theorem", "piecewise_nhds_within", ["filter", "tendsto"]], ["add", "theorem", "is_open_inter_union_inter_compl'", []], ["add", "theorem", "is_open_inter_union_inter_compl", []], ["del", "theorem", "tendsto_if_nhds_within", []]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "is_open_iff_continuous_mem", []]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1613209676, "sha": "5c22531b", "message": "doc(data/polynomial/denoms_clearable): fix typo in the doc-string (#6174)", "changes": [{"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": []}]}, {"timestamp": 1613200677, "sha": "5bee8262", "message": "feat(data/int/gcd): some missing lemmas about int.gcd (#6212)\nAs requested [on zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/different.20gcd's.3F/near/226203698).", "changes": [{"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "def", "gcd_a", ["int"]], ["add", "def", "gcd_b", ["int"]], ["add", "theorem", "gcd_eq_gcd_ab", ["int"]]]}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "nat_abs_euclidean_domain_gcd", ["int"]]]}]}, {"timestamp": 1613200676, "sha": "0544641d", "message": "chore(analysis/special_functions/pow): review lemmas about measurability of `cpow`/`rpow` (#6209)\n* prove that `complex.cpow` is measurable;\n* deduce measurability of `real.rpow` from definition, not continuity.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "cpow", ["measurable"]], ["mod", "theorem", "ennreal_rpow", ["measurable"]], ["mod", "theorem", "ennreal_rpow_const", ["measurable"]], ["mod", "theorem", "nnreal_rpow", ["measurable"]], ["mod", "theorem", "nnreal_rpow_const", ["measurable"]], ["del", "theorem", "measurable_rpow", ["nnreal"]], ["del", "theorem", "measurable_rpow_const", ["nnreal"]], ["del", "theorem", "measurable_rpow", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}]}, {"timestamp": 1613200675, "sha": "ee9197a1", "message": "chore(topology/algebra/module): review `coe` lemmas (#6206)\n* add `@[simp]` to `continuous_linear_equiv.coe_coe`, remove from `continuous_linear_equiv.coe_apply`;\n* golf `continuous_linear_equiv.ext`;\n* given `(e e' : M ≃L[R] M₂)`, simplify `(e : M →L[R] M₂) = e'` to `e = e'`;\n* add `@[simp]` to `continuous_linear_equiv.symm_comp_self` and `continuous_linear_equiv.self_comp_symm`;\n* drop `symm_comp_self'` and `self_comp_symm'`: now `coe_coe` simplifies LHS to `symm_comp_self`/`self_comp_symm`;\n* `continuous_linear_equiv.coord` is no longer an `abbreviation`: without this change `coe_coe` prevents us from using lemmas about `coord`;", "changes": [{"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "coe_to_span_nonzero_singleton_symm", ["continuous_linear_equiv"]], ["mod", "def", "coord", ["continuous_linear_equiv"]], ["mod", "theorem", "coord_norm", ["continuous_linear_equiv"]], ["mod", "theorem", "coord_self", ["continuous_linear_equiv"]], ["add", "theorem", "coord_to_span_nonzero_singleton", ["continuous_linear_equiv"]], ["add", "theorem", "to_span_nonzero_singleton_coord", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "coe_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_coe", ["continuous_linear_equiv"]], ["add", "theorem", "coe_inj", ["continuous_linear_equiv"]], ["add", "theorem", "coe_injective", ["continuous_linear_equiv"]], ["del", "theorem", "self_comp_symm'", ["continuous_linear_equiv"]], ["mod", "theorem", "self_comp_symm", ["continuous_linear_equiv"]], ["del", "theorem", "symm_comp_self'", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_comp_self", ["continuous_linear_equiv"]], ["add", "theorem", "to_linear_equiv_injective", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1613200674, "sha": "43bfd903", "message": "chore(group_theory/free_group): clean up unnecessary lemmas (#6200)\nThis removes:\n* `free_abelian_group.lift.{add,sub,neg,zero}` as these exist already as `(free_abelian_group.lift _).map_{add,sub,neg,zero}` \n* `free_group.to_group.{mul,one,inv}` as these exist already as `(free_group.to_group _).map_{mul,one,inv}`\n* `free_group.map.{mul,one,inv}` as these exist already as `(free_group.map _).map_{mul,one,inv}`\n* `free_group.prod.{mul,one,inv}` as these exist already as `free_group.prod.map_{mul,one,inv}`\n* `to_group.is_group_hom` as this is provided automatically for `monoid_hom`s\nand renames\n* `free_group.sum.{mul,one,inv}` to `free_group.sum.map_{mul,one,inv}`\nThese lemmas are already simp lemmas thanks to the functions they relate to being bundled homs.\nWhile the new spelling is slightly longer, it makes it clear that the entire set of `monoid_hom` lemmas apply, not just the three that were copied across.\nThis also wraps some lines to make the linter happier about these files.", "changes": [{"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["del", "theorem", "inv", ["free_group", "map"]], ["del", "theorem", "mul", ["free_group", "map"]], ["del", "theorem", "one", ["free_group", "map"]], ["mod", "theorem", "unique", ["free_group", "map"]], ["del", "theorem", "inv", ["free_group", "prod"]], ["del", "theorem", "mul", ["free_group", "prod"]], ["del", "theorem", "one", ["free_group", "prod"]], ["del", "theorem", "inv", ["free_group", "sum"]], ["add", "theorem", "map_inv", ["free_group", "sum"]], ["add", "theorem", "map_mul", ["free_group", "sum"]], ["add", "theorem", "map_one", ["free_group", "sum"]], ["del", "theorem", "mul", ["free_group", "sum"]], ["del", "theorem", "one", ["free_group", "sum"]], ["del", "theorem", "inv", ["free_group", "to_group"]], ["del", "theorem", "mul", ["free_group", "to_group"]], ["del", "theorem", "one", ["free_group", "to_group"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}]}, {"timestamp": 1613193713, "sha": "759ebc0b", "message": "chore(analysis/calculus/local_extr): minor golfing (#6214)", "changes": [{"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}]}, {"timestamp": 1613188567, "sha": "5869039e", "message": "chore(scripts): update nolints.txt (#6213)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613177382, "sha": "37459eee", "message": "doc(docs/overview.yaml): Added Hall's theorem (#6205)\nAlso fixed module documentation to use inline math mode (and removed the dreaded \"any\").", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/combinatorics/hall.lean", "newPath": "src/combinatorics/hall.lean", "changes": []}]}, {"timestamp": 1613177381, "sha": "06fdc087", "message": "chore(algebra/group/pi): replace a lemma with @[simps] (#6203)", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["mod", "def", "single", ["add_monoid_hom"]], ["del", "theorem", "single_apply", ["add_monoid_hom"]]]}]}, {"timestamp": 1613177380, "sha": "e79bf053", "message": "feat(number_theory/ADE_inequality): the inequality 1/p + 1/q + 1/r > 1 (#6156)", "changes": [{"oldPath": null, "newPath": "src/number_theory/ADE_inequality.lean", "changes": [["add", "def", "A'", ["ADE_inequality"]], ["add", "def", "A", ["ADE_inequality"]], ["add", "def", "D'", ["ADE_inequality"]], ["add", "def", "E'", ["ADE_inequality"]], ["add", "def", "E6", ["ADE_inequality"]], ["add", "def", "E7", ["ADE_inequality"]], ["add", "def", "E8", ["ADE_inequality"]], ["add", "theorem", "one_lt_sum_inv", ["ADE_inequality", "admissible"]], ["add", "def", "admissible", ["ADE_inequality"]], ["add", "theorem", "admissible_A'", ["ADE_inequality"]], ["add", "theorem", "admissible_D'", ["ADE_inequality"]], ["add", "theorem", "admissible_E'3", ["ADE_inequality"]], ["add", "theorem", "admissible_E'4", ["ADE_inequality"]], ["add", "theorem", "admissible_E'5", ["ADE_inequality"]], ["add", "theorem", "admissible_E6", ["ADE_inequality"]], ["add", "theorem", "admissible_E7", ["ADE_inequality"]], ["add", "theorem", "admissible_E8", ["ADE_inequality"]], ["add", "theorem", "admissible_of_one_lt_sum_inv", ["ADE_inequality"]], ["add", "theorem", "admissible_of_one_lt_sum_inv_aux'", ["ADE_inequality"]], ["add", "theorem", "admissible_of_one_lt_sum_inv_aux", ["ADE_inequality"]], ["add", "theorem", "classification", ["ADE_inequality"]], ["add", "theorem", "lt_four", ["ADE_inequality"]], ["add", "theorem", "lt_six", ["ADE_inequality"]], ["add", "theorem", "lt_three", ["ADE_inequality"]], ["add", "def", "sum_inv", ["ADE_inequality"]], ["add", "theorem", "sum_inv_pqr", ["ADE_inequality"]]]}]}, {"timestamp": 1613177378, "sha": "30c2c5bf", "message": "feat(data/fin): cast_succ_mk and other lemmas (#6094)\n* add lemmas for all the `fin.cast_*` functions which describe what happens to an \"explicitly presented\" term of `fin n`, built from the constructor\n* fixes some errors in doc-strings", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_add_mk", ["fin"]], ["add", "theorem", "cast_le_mk", ["fin"]], ["add", "theorem", "cast_lt_mk", ["fin"]], ["add", "theorem", "cast_mk", ["fin"]], ["add", "theorem", "cast_succ_mk", ["fin"]], ["add", "theorem", "succ_mk", ["fin"]]]}]}, {"timestamp": 1613177376, "sha": "152ad1fc", "message": "feat(measure_theory/measure_space): add theorems about restrict and subtraction (#5000)\nThis is the next tranche of theorems toward Lebesgue-Radon-Nikodym.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "restrict_apply_self", ["measure_theory", "measure"]], ["add", "theorem", "restrict_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "restrict_sub_eq_restrict_sub_restrict", ["measure_theory", "measure"]], ["add", "theorem", "sub_apply_eq_zero_of_restrict_le_restrict", ["measure_theory", "measure"]]]}]}, {"timestamp": 1613164477, "sha": "dd13f00a", "message": "feat(data/set/intervals/basic): 24 lemmas about membership of arithmetic operations (#6202)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "add_mem_Icc_iff_left", ["set"]], ["add", "theorem", "add_mem_Icc_iff_right", ["set"]], ["add", "theorem", "add_mem_Ico_iff_left", ["set"]], ["add", "theorem", "add_mem_Ico_iff_right", ["set"]], ["add", "theorem", "add_mem_Ioc_iff_left", ["set"]], ["add", "theorem", "add_mem_Ioc_iff_right", ["set"]], ["add", "theorem", "add_mem_Ioo_iff_left", ["set"]], ["add", "theorem", "add_mem_Ioo_iff_right", ["set"]], ["add", "theorem", "inv_mem_Icc_iff", ["set"]], ["add", "theorem", "inv_mem_Ico_iff", ["set"]], ["add", "theorem", "inv_mem_Ioc_iff", ["set"]], ["add", "theorem", "inv_mem_Ioo_iff", ["set"]], ["add", "theorem", "sub_mem_Icc_iff_left", ["set"]], ["add", "theorem", "sub_mem_Icc_iff_right", ["set"]], ["add", "theorem", "sub_mem_Ico_iff_left", ["set"]], ["add", "theorem", "sub_mem_Ico_iff_right", ["set"]], ["add", "theorem", "sub_mem_Ioc_iff_left", ["set"]], ["add", "theorem", "sub_mem_Ioc_iff_right", ["set"]], ["add", "theorem", "sub_mem_Ioo_iff_left", ["set"]], ["add", "theorem", "sub_mem_Ioo_iff_right", ["set"]]]}]}, {"timestamp": 1613139357, "sha": "254c3ee1", "message": "feat(analysis/special_functions/exp_log): added `log_div` (#6196)\n`∀ x y : ℝ, x ≠ 0 → y ≠ 0 → log (x / y) = log x - log y`", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "log_div", ["real"]]]}]}, {"timestamp": 1613139356, "sha": "a5ccba6b", "message": "feat(analysis/calculus): generalize `has_strict_fderiv_at.map_nhds_eq` (#6193)\nGeneralize `has_strict_fderiv_at.map_nhds_eq` to a function that satisfies assumptions of the implicit function theorem.", "changes": [{"oldPath": "src/analysis/calculus/implicit.lean", "newPath": "src/analysis/calculus/implicit.lean", "changes": [["add", "theorem", "implicit_function_apply_image", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_function_of_complemented_apply_image", ["has_strict_fderiv_at"]], ["add", "theorem", "map_nhds_eq", ["has_strict_fderiv_at"]], ["add", "theorem", "map_nhds_eq_of_complemented", ["has_strict_fderiv_at"]], ["add", "theorem", "tendsto_implicit_function", ["has_strict_fderiv_at"]], ["add", "theorem", "map_nhds_eq", ["implicit_function_data"]]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["del", "theorem", "map_nhds_eq", ["has_strict_fderiv_at"]], ["add", "theorem", "map_nhds_eq_of_equiv", ["has_strict_fderiv_at"]], ["del", "theorem", "open_map_of_strict_fderiv", []], ["add", "theorem", "open_map_of_strict_fderiv_equiv", []]]}]}, {"timestamp": 1613133847, "sha": "74d3270e", "message": "fix(topology/topological_fiber_bundle): fix definition, review (#6184)\n* fix definition of `is_topological_fiber_bundle`;\n* add `is_trivial_topological_fiber_bundle`;\n* more lemmas, golf here and there;\n* define induced fiber bundle.", "changes": [{"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["add", "theorem", "apply_symm_apply'", ["bundle_trivialization"]], ["add", "theorem", "apply_symm_apply", ["bundle_trivialization"]], ["mod", "theorem", "coe_coe", ["bundle_trivialization"]], ["add", "theorem", "coe_fst'", ["bundle_trivialization"]], ["add", "theorem", "coe_fst_eventually_eq_proj'", ["bundle_trivialization"]], ["add", "theorem", "coe_fst_eventually_eq_proj", ["bundle_trivialization"]], ["mod", "theorem", "coe_mk", ["bundle_trivialization"]], ["add", "def", "comp_homeomorph", ["bundle_trivialization"]], ["add", "theorem", "map_proj_nhds", ["bundle_trivialization"]], ["add", "theorem", "mem_source", ["bundle_trivialization"]], ["add", "theorem", "mem_target", ["bundle_trivialization"]], ["add", "theorem", "proj_symm_apply'", ["bundle_trivialization"]], ["add", "theorem", "proj_symm_apply", ["bundle_trivialization"]], ["add", "theorem", "symm_apply_mk_proj", ["bundle_trivialization"]], ["mod", "structure", "bundle_trivialization", []], ["add", "theorem", "comap", ["is_topological_fiber_bundle"]], ["add", "theorem", "comp_homeomorph", ["is_topological_fiber_bundle"]], ["mod", "def", "is_topological_fiber_bundle", []], ["add", "theorem", "is_topological_fiber_bundle", ["is_trivial_topological_fiber_bundle"]], ["add", "def", "is_trivial_topological_fiber_bundle", []], ["add", "theorem", "is_trivial_topological_fiber_bundle_fst", []], ["add", "theorem", "is_trivial_topological_fiber_bundle_snd", []], ["del", "theorem", "is_topological_fiber_bundle", ["topological_fiber_bundle_core"]]]}]}, {"timestamp": 1613124554, "sha": "2d708803", "message": "feat(topology/subset_properties): compact discrete spaces are finite (#6191)\nFrom `lean-liquid`", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "finite_of_is_compact_of_discrete", []], ["add", "def", "fintype_of_compact_of_discrete", []]]}]}, {"timestamp": 1613098293, "sha": "159e807b", "message": "chore(scripts): update nolints.txt (#6194)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613098292, "sha": "72141fdc", "message": "feat(combinatorics/hall): Hall's marriage theorem (#5695)\nWe state and prove Hall's marriage theorem with respect to fintypes and relations. \nCoauthor: @b-mehta @kmill", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/hall.lean", "changes": [["add", "theorem", "all_card_le_bUnion_card_iff_exists_injective", ["finset"]], ["add", "theorem", "all_card_le_filter_rel_iff_exists_injective", ["fintype"]], ["add", "theorem", "all_card_le_rel_image_card_iff_exists_injective", ["fintype"]], ["add", "theorem", "hall_cond_of_compl", ["hall_marriage_theorem"]], ["add", "theorem", "hall_cond_of_erase", ["hall_marriage_theorem"]], ["add", "theorem", "hall_cond_of_restrict", ["hall_marriage_theorem"]], ["add", "theorem", "hall_hard_inductive", ["hall_marriage_theorem"]], ["add", "theorem", "hall_hard_inductive_step", ["hall_marriage_theorem"]], ["add", "theorem", "hall_hard_inductive_step_A", ["hall_marriage_theorem"]], ["add", "theorem", "hall_hard_inductive_step_B", ["hall_marriage_theorem"]], ["add", "theorem", "hall_hard_inductive_zero", ["hall_marriage_theorem"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "card_ne_eq", ["set"]], ["add", "theorem", "to_finset_ne_eq_erase", ["set"]]]}]}, {"timestamp": 1613086383, "sha": "db305fb5", "message": "feat(data/set/finite): fintype_of_univ_finite (#6164)\nFrom `lean-liquid`", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "def", "fintype_of_univ_finite", ["set"]], ["add", "theorem", "univ_finite_iff_nonempty_fintype", ["set"]]]}]}, {"timestamp": 1613086382, "sha": "2f566202", "message": "feat(data/real/irrational): define Liouville numbers (#6158)\nProve that a Liouville number is irrational", "changes": [{"oldPath": null, "newPath": "src/data/real/liouville.lean", "changes": [["add", "theorem", "irrational", ["is_liouville"]], ["add", "def", "is_liouville", []]]}]}, {"timestamp": 1613074867, "sha": "64914d36", "message": "chore(group_theory/perm, linear_algebra/alternating): add some helper lemmas for gh-5269 (#6186)", "changes": [{"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "alternatization_coe", ["multilinear_map"]]]}]}, {"timestamp": 1613074866, "sha": "cee5ddf3", "message": "chore(topology/homeomorph): review, add `prod_punit`/`punit_prod` (#6180)\n* use `to_equiv := e` instead of `.. e` to have definitional equality\n `h.to_equiv = e`;\n* add some `@[simp]` lemmas;\n* add `homeomorph.prod_punit` and `homeomorph.punit_prod`;\n* generalize `unit.topological_space` to `punit.topological_space`.", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "coe_prod_comm", ["homeomorph"]], ["add", "theorem", "coe_prod_congr", ["homeomorph"]], ["add", "theorem", "coe_prod_punit", ["homeomorph"]], ["add", "theorem", "coe_punit_prod", ["homeomorph"]], ["add", "theorem", "coe_refl", ["homeomorph"]], ["add", "theorem", "prod_comm_symm", ["homeomorph"]], ["add", "theorem", "prod_congr_symm", ["homeomorph"]], ["add", "def", "prod_punit", ["homeomorph"]], ["add", "def", "punit_prod", ["homeomorph"]], ["add", "theorem", "refl_symm", ["homeomorph"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}]}, {"timestamp": 1613074865, "sha": "6c602c7e", "message": "feat(data/nat/bitwise): test bits of powers of two (#6070)", "changes": [{"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": [["add", "theorem", "test_bit_two_pow", ["nat"]], ["add", "theorem", "test_bit_two_pow_of_ne", ["nat"]], ["add", "theorem", "test_bit_two_pow_self", ["nat"]]]}]}, {"timestamp": 1613060469, "sha": "1ad29d69", "message": "refactor(algebra/lie/of_associative): remove `ring_commutator` namespace; use `ring` instead (#6181)\nThe `old_structure_cmd` change to `lie_algebra.is_simple` is unrelated and is\nincluded here only for convenience.\n`ring_commutator.commutator` -> `ring.lie_def`", "changes": [{"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "theorem", "lie_def", ["ring"]], ["del", "theorem", "commutator", ["ring_commutator"]]]}, {"oldPath": "src/algebra/lie/semisimple.lean", "newPath": "src/algebra/lie/semisimple.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}]}, {"timestamp": 1613060466, "sha": "abf72e6d", "message": "refactor(algebra/lie/*): rename `lie_algebra.morphism` --> `lie_hom`, `lie_algebra.equiv` --> `lie_equiv` (#6179)\nAlso renaming the field `map_lie` to `map_lie'` in both `lie_algebra.morphism` and `lie_module_hom`\nfor consistency with the pattern elsewhere in Mathlib.", "changes": [{"oldPath": "src/algebra/lie/abelian.lean", "newPath": "src/algebra/lie/abelian.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "theorem", "coe_mk", ["lie_algebra"]], ["del", "theorem", "coe_to_linear_map", ["lie_algebra"]], ["del", "theorem", "apply_symm_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "bijective", ["lie_algebra", "equiv"]], ["del", "theorem", "coe_to_lie_equiv", ["lie_algebra", "equiv"]], ["del", "theorem", "coe_to_linear_equiv", ["lie_algebra", "equiv"]], ["del", "theorem", "injective", ["lie_algebra", "equiv"]], ["del", "theorem", "one_apply", ["lie_algebra", "equiv"]], ["del", "def", "refl", ["lie_algebra", "equiv"]], ["del", "theorem", "refl_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "surjective", ["lie_algebra", "equiv"]], ["del", "def", "symm", ["lie_algebra", "equiv"]], ["del", "theorem", "symm_apply_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "symm_symm", ["lie_algebra", "equiv"]], ["del", "theorem", "symm_trans_apply", ["lie_algebra", "equiv"]], ["del", "def", "trans", ["lie_algebra", "equiv"]], ["del", "theorem", "trans_apply", ["lie_algebra", "equiv"]], ["del", "structure", "equiv", ["lie_algebra"]], ["del", "theorem", "map_lie", ["lie_algebra"]], ["del", "theorem", "map_zero", ["lie_algebra"]], ["del", "theorem", "coe_injective", ["lie_algebra", "morphism"]], ["del", "def", "comp", ["lie_algebra", "morphism"]], ["del", "theorem", "comp_apply", ["lie_algebra", "morphism"]], ["del", "theorem", "comp_coe", ["lie_algebra", "morphism"]], ["del", "theorem", "ext", ["lie_algebra", "morphism"]], ["del", "theorem", "ext_iff", ["lie_algebra", "morphism"]], ["del", "def", "inverse", ["lie_algebra", "morphism"]], ["del", "theorem", "map_add", ["lie_algebra", "morphism"]], ["del", "theorem", "map_smul", ["lie_algebra", "morphism"]], ["del", "structure", "morphism", ["lie_algebra"]], ["add", "theorem", "apply_symm_apply", ["lie_equiv"]], ["add", "theorem", "bijective", ["lie_equiv"]], ["add", "theorem", "coe_to_lie_equiv", ["lie_equiv"]], ["add", "theorem", "coe_to_linear_equiv", ["lie_equiv"]], ["add", "theorem", "injective", ["lie_equiv"]], ["add", "theorem", "one_apply", ["lie_equiv"]], ["add", "def", "refl", ["lie_equiv"]], ["add", "theorem", "refl_apply", ["lie_equiv"]], ["add", "theorem", "surjective", ["lie_equiv"]], ["add", "def", "symm", ["lie_equiv"]], ["add", "theorem", "symm_apply_apply", ["lie_equiv"]], ["add", "theorem", "symm_symm", ["lie_equiv"]], ["add", "theorem", "symm_trans_apply", ["lie_equiv"]], ["add", "def", "trans", ["lie_equiv"]], ["add", "theorem", "trans_apply", ["lie_equiv"]], ["add", "structure", "lie_equiv", []], ["add", "theorem", "coe_injective", ["lie_hom"]], ["add", "theorem", "coe_mk", ["lie_hom"]], ["add", "theorem", "coe_to_linear_map", ["lie_hom"]], ["add", "def", "comp", ["lie_hom"]], ["add", "theorem", "comp_apply", ["lie_hom"]], ["add", "theorem", "comp_coe", ["lie_hom"]], ["add", "theorem", "ext", ["lie_hom"]], ["add", "theorem", "ext_iff", ["lie_hom"]], ["add", "def", "inverse", ["lie_hom"]], ["add", "theorem", "map_add", ["lie_hom"]], ["add", "theorem", "map_lie", ["lie_hom"]], ["add", "theorem", "map_smul", ["lie_hom"]], ["add", "theorem", "map_zero", ["lie_hom"]], ["add", "structure", "lie_hom", []], ["del", "theorem", "map_lie'", ["lie_module_hom"]], ["add", "theorem", "map_lie", ["lie_module_hom"]]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/lie/direct_sum.lean", "newPath": "src/algebra/lie/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/lie/ideal_operations.lean", "newPath": "src/algebra/lie/ideal_operations.lean", "changes": []}, {"oldPath": "src/algebra/lie/matrix.lean", "newPath": "src/algebra/lie/matrix.lean", "changes": []}, {"oldPath": "src/algebra/lie/of_associative.lean", "newPath": "src/algebra/lie/of_associative.lean", "changes": []}, {"oldPath": "src/algebra/lie/quotient.lean", "newPath": "src/algebra/lie/quotient.lean", "changes": []}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": []}, {"oldPath": "src/algebra/lie/subalgebra.lean", "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["del", "def", "of_eq", ["lie_algebra", "equiv"]], ["del", "theorem", "of_eq_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "of_injective_apply", ["lie_algebra", "equiv"]], ["del", "def", "of_subalgebra", ["lie_algebra", "equiv"]], ["del", "theorem", "of_subalgebra_apply", ["lie_algebra", "equiv"]], ["del", "def", "of_subalgebras", ["lie_algebra", "equiv"]], ["del", "theorem", "of_subalgebras_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "of_subalgebras_symm_apply", ["lie_algebra", "equiv"]], ["del", "def", "range", ["lie_algebra", "morphism"]], ["del", "theorem", "range_bracket", ["lie_algebra", "morphism"]], ["del", "theorem", "range_coe", ["lie_algebra", "morphism"]], ["add", "def", "of_eq", ["lie_equiv"]], ["add", "theorem", "of_eq_apply", ["lie_equiv"]], ["add", "theorem", "of_injective_apply", ["lie_equiv"]], ["add", "def", "of_subalgebra", ["lie_equiv"]], ["add", "theorem", "of_subalgebra_apply", ["lie_equiv"]], ["add", "def", "of_subalgebras", ["lie_equiv"]], ["add", "theorem", "of_subalgebras_apply", ["lie_equiv"]], ["add", "theorem", "of_subalgebras_symm_apply", ["lie_equiv"]], ["add", "def", "range", ["lie_hom"]], ["add", "theorem", "range_bracket", ["lie_hom"]], ["add", "theorem", "range_coe", ["lie_hom"]]]}, {"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": [["del", "def", "ideal_range", ["lie_algebra", "morphism"]], ["del", "def", "is_ideal_morphism", ["lie_algebra", "morphism"]], ["del", "theorem", "is_ideal_morphism_def", ["lie_algebra", "morphism"]], ["del", "def", "ker", ["lie_algebra", "morphism"]], ["del", "theorem", "ker_coe_submodule", ["lie_algebra", "morphism"]], ["del", "theorem", "ker_eq_bot", ["lie_algebra", "morphism"]], ["del", "theorem", "ker_le_comap", ["lie_algebra", "morphism"]], ["del", "theorem", "le_ker_iff", ["lie_algebra", "morphism"]], ["del", "theorem", "map_bot_iff", ["lie_algebra", "morphism"]], ["del", "theorem", "map_le_ideal_range", ["lie_algebra", "morphism"]], ["del", "theorem", "mem_ideal_range", ["lie_algebra", "morphism"]], ["del", "theorem", "mem_ideal_range_iff", ["lie_algebra", "morphism"]], ["del", "theorem", "mem_ker", ["lie_algebra", "morphism"]], ["del", "theorem", "range_subset_ideal_range", ["lie_algebra", "morphism"]], ["add", "def", "ideal_range", ["lie_hom"]], ["add", "def", "is_ideal_morphism", ["lie_hom"]], ["add", "theorem", "is_ideal_morphism_def", ["lie_hom"]], ["add", "def", "ker", ["lie_hom"]], ["add", "theorem", "ker_coe_submodule", ["lie_hom"]], ["add", "theorem", "ker_eq_bot", ["lie_hom"]], ["add", "theorem", "ker_le_comap", ["lie_hom"]], ["add", "theorem", "le_ker_iff", ["lie_hom"]], ["add", "theorem", "map_bot_iff", ["lie_hom"]], ["add", "theorem", "map_le_ideal_range", ["lie_hom"]], ["add", "theorem", "mem_ideal_range", ["lie_hom"]], ["add", "theorem", "mem_ideal_range_iff", ["lie_hom"]], ["add", "theorem", "mem_ker", ["lie_hom"]], ["add", "theorem", "range_subset_ideal_range", ["lie_hom"]]]}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}]}, {"timestamp": 1613060464, "sha": "b3347e56", "message": "doc(algebra/field): added module doc (#6177)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}]}, {"timestamp": 1613060460, "sha": "af8b60b8", "message": "feat(algebra/lie/submodule): Lie submodules form a modular lattice (#6176)", "changes": [{"oldPath": "src/algebra/lie/submodule.lean", "newPath": "src/algebra/lie/submodule.lean", "changes": []}]}, {"timestamp": 1613060458, "sha": "b9354dda", "message": "feat(algebra/ordered_ring): a product is at least one if both factors are (#6172)\nAdd single lemma one_le_mul_of_one_le_of_one_le\nThe lemma is stated for an `ordered_semiring`, but only multiplication is used. There does not seem to be an `ordered_monoid` class where this lemma would fit.\nRelevant Zulip chat:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/ordered_monoid.3F", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "one_le_mul_of_one_le_of_one_le", []]]}]}, {"timestamp": 1613060456, "sha": "194ec667", "message": "feat(group_theory/subgroup): prove relation between pointwise product of submonoids/subgroups and their join (#6165)\nIf `H` and `K` are subgroups/submonoids then `H ⊔ K = closure (H * K)`, where `H * K` is the pointwise set product. When `H` or `K` is a normal subgroup, it is proved that `(↑(H ⊔ K) : set G) = H * K`.\n", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "closure_mul_le", ["submonoid"]], ["add", "theorem", "sup_eq_closure", ["submonoid"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "closure_mul_le", ["subgroup"]], ["add", "theorem", "mul_normal", ["subgroup"]], ["add", "theorem", "normal_mul", ["subgroup"]], ["add", "theorem", "sup_eq_closure", ["subgroup"]]]}]}, {"timestamp": 1613060455, "sha": "f151da2a", "message": "feat(field_theory/polynomial_galois_group): Restriction from splitting field of composition (#6148)\nDefines the surjective restriction map from the splitting field of a composition", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "mul_splits_in_splitting_field_of_mul", ["polynomial", "gal"]], ["add", "def", "restrict_comp", ["polynomial", "gal"]], ["add", "theorem", "restrict_comp_surjective", ["polynomial", "gal"]], ["add", "theorem", "splits_in_splitting_field_of_comp", ["polynomial", "gal"]]]}]}, {"timestamp": 1613060452, "sha": "7b4a9e5f", "message": "feat(order/well_founded_set) : Define when a set is well-founded with `set.is_wf` (#6113)\nDefines a predicate for when a set within an ordered type is well-founded (`set.is_wf`)\nProves basic lemmas about well-founded sets", "changes": [{"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": [["add", "def", "order_embedding_of_set", ["nat"]], ["add", "theorem", "order_embedding_of_set_apply", ["nat"]], ["add", "theorem", "order_embedding_of_set_range", ["nat"]], ["add", "theorem", "order_iso_of_nat_apply", ["nat", "subtype"]], ["mod", "def", "nat_gt", ["rel_embedding"]], ["mod", "def", "nat_lt", ["rel_embedding"]], ["add", "theorem", "nat_lt_apply", ["rel_embedding"]], ["mod", "theorem", "well_founded_iff_no_descending_seq", ["rel_embedding"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "order_embedding_of_lt_embedding_apply", ["rel_embedding"]]]}, {"oldPath": null, "newPath": "src/order/well_founded_set.lean", "changes": [["add", "theorem", "is_wf", ["finset"]], ["add", "theorem", "is_wf", ["set", "finite"]], ["add", "theorem", "is_wf", ["set", "fintype"]], ["add", "theorem", "insert", ["set", "is_wf"]], ["add", "theorem", "mono", ["set", "is_wf"]], ["add", "theorem", "union", ["set", "is_wf"]], ["add", "def", "is_wf", ["set"]], ["add", "theorem", "is_wf_iff_no_descending_seq", ["set"]], ["add", "theorem", "is_wf_singleton", ["set"]], ["add", "def", "well_founded_on", ["set"]], ["add", "theorem", "well_founded_on_iff", ["set"]]]}]}, {"timestamp": 1613060448, "sha": "a557f8bd", "message": "feat(data/complex): order structure (#4684)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "def", "complex_order", ["complex"]], ["add", "def", "complex_ordered_comm_ring", ["complex"]], ["add", "theorem", "le_def", ["complex"]], ["add", "theorem", "lt_def", ["complex"]], ["add", "theorem", "norm_sq_eq_conj_mul_self", ["complex"]], ["mod", "theorem", "norm_sq_one", ["complex"]], ["mod", "theorem", "norm_sq_zero", ["complex"]], ["add", "theorem", "real_le_real", ["complex"]], ["add", "theorem", "real_lt_real", ["complex"]], ["add", "theorem", "zero_le_real", ["complex"]], ["add", "theorem", "zero_lt_real", ["complex"]]]}]}, {"timestamp": 1613053626, "sha": "39090c8c", "message": "doc(analysis/analytic/inverse): fix mathjax output (#6175)\n`\\\\` in source code is converted to `\\` in the generated html file, so one should have `\\\\\\\\` to generate proper line break for mathjax.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": []}]}, {"timestamp": 1613044262, "sha": "58632ac6", "message": "feat(topology/order): discrete_topology_bot (#6163)\nFrom `lean-liquid`", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1613044259, "sha": "fdace951", "message": "feat(linear_algebra/matrix): generalize some `is_basis.to_matrix` results (#6127)\nThis PR contains some changes to the lemmas involving `is_basis.to_matrix`, allowing the bases involved to differ in their index type. Although you can prove there exists an `equiv` between those types, it's easier to not have to transport along that equiv.\nThe PR also generalizes `linear_map.to_matrix_id` to a form with two different bases, `linear_map.to_matrix_id_eq_basis_to_matrix`. Marking the second as `simp` means the first can be proved automatically, hence the removal of `simp` on that one.", "changes": [{"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "to_matrix_mul_to_matrix", ["is_basis"]], ["add", "theorem", "to_matrix_id_eq_basis_to_matrix", ["linear_map"]]]}]}, {"timestamp": 1613035318, "sha": "d405c5e9", "message": "chore(scripts): update nolints.txt (#6169)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1613035317, "sha": "59daf530", "message": "refactor(topology/subset_properties.lean): split the subset_properties.lean file (#6161)\nsplit the file subset_properties.lean into another file called connected.lean which contains the properties that relate to connectivity. This is in preparation for a future PR proving properties about the quotient of a space by its connected components and it would add roughly 300 lines.", "changes": [{"oldPath": null, "newPath": "src/topology/connected.lean", "changes": [["add", "def", "connected_component", []], ["add", "def", "connected_component_in", []], ["add", "theorem", "connected_component_subset_Inter_clopen", []], ["add", "theorem", "connected_space_iff_connected_component", []], ["add", "theorem", "eq_univ_of_nonempty_clopen", []], ["add", "theorem", "irreducible_component_subset_connected_component", []], ["add", "theorem", "is_clopen_iff", []], ["add", "theorem", "is_closed_connected_component", []], ["add", "theorem", "closure", ["is_connected"]], ["add", "theorem", "image", ["is_connected"]], ["add", "theorem", "is_preconnected", ["is_connected"]], ["add", "theorem", "nonempty", ["is_connected"]], ["add", "theorem", "union", ["is_connected"]], ["add", "def", "is_connected", []], ["add", "theorem", "is_connected_connected_component", []], ["add", "theorem", "is_connected_iff_connected_space", []], ["add", "theorem", "is_connected_iff_sUnion_disjoint_open", []], ["add", "theorem", "is_connected_range", []], ["add", "theorem", "is_connected_singleton", []], ["add", "theorem", "is_connected", ["is_irreducible"]], ["add", "theorem", "closure", ["is_preconnected"]], ["add", "theorem", "image", ["is_preconnected"]], ["add", "theorem", "union", ["is_preconnected"]], ["add", "def", "is_preconnected", []], ["add", "theorem", "is_preconnected_closed_iff", []], ["add", "theorem", "is_preconnected_empty", []], ["add", "theorem", "is_preconnected_iff_preconnected_space", []], ["add", "theorem", "is_preconnected_iff_subset_of_disjoint", []], ["add", "theorem", "is_preconnected_iff_subset_of_disjoint_closed", []], ["add", "theorem", "is_preconnected_iff_subset_of_fully_disjoint_closed", []], ["add", "theorem", "is_preconnected_of_forall", []], ["add", "theorem", "is_preconnected_of_forall_pair", []], ["add", "theorem", "is_preconnected_sUnion", []], ["add", "theorem", "is_preconnected", ["is_preirreducible"]], ["add", "def", "is_totally_disconnected", []], ["add", "theorem", "is_totally_disconnected_empty", []], ["add", "theorem", "is_totally_disconnected_of_is_totally_separated", []], ["add", "theorem", "is_totally_disconnected_singleton", []], ["add", "def", "is_totally_separated", []], ["add", "theorem", "is_totally_separated_empty", []], ["add", "theorem", "is_totally_separated_singleton", []], ["add", "theorem", "mem_connected_component", []], ["add", "theorem", "nonempty_inter", []], ["add", "theorem", "subset_connected_component", []], ["add", "theorem", "subset_or_disjoint_of_clopen", []], ["add", "theorem", "connected_space", ["subtype"]], ["add", "theorem", "preconnected_space", ["subtype"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "def", "connected_component", []], ["del", "def", "connected_component_in", []], ["del", "theorem", "connected_component_subset_Inter_clopen", []], ["del", "theorem", "connected_space_iff_connected_component", []], ["del", "theorem", "eq_univ_of_nonempty_clopen", []], ["del", "theorem", "irreducible_component_subset_connected_component", []], ["del", "theorem", "is_clopen_iff", []], ["del", "theorem", "is_closed_connected_component", []], ["del", "theorem", "closure", ["is_connected"]], ["del", "theorem", "image", ["is_connected"]], ["del", "theorem", "is_preconnected", ["is_connected"]], ["del", "theorem", "nonempty", ["is_connected"]], ["del", "theorem", "union", ["is_connected"]], ["del", "def", "is_connected", []], ["del", "theorem", "is_connected_connected_component", []], ["del", "theorem", "is_connected_iff_connected_space", []], ["del", "theorem", "is_connected_iff_sUnion_disjoint_open", []], ["del", "theorem", "is_connected_range", []], ["del", "theorem", "is_connected_singleton", []], ["del", "theorem", "is_connected", ["is_irreducible"]], ["del", "theorem", "closure", ["is_preconnected"]], ["del", "theorem", "image", ["is_preconnected"]], ["del", "theorem", "union", ["is_preconnected"]], ["del", "def", "is_preconnected", []], ["del", "theorem", "is_preconnected_closed_iff", []], ["del", "theorem", "is_preconnected_empty", []], ["del", "theorem", "is_preconnected_iff_preconnected_space", []], ["del", "theorem", "is_preconnected_iff_subset_of_disjoint", []], ["del", "theorem", "is_preconnected_iff_subset_of_disjoint_closed", []], ["del", "theorem", "is_preconnected_iff_subset_of_fully_disjoint_closed", []], ["del", "theorem", "is_preconnected_of_forall", []], ["del", "theorem", "is_preconnected_of_forall_pair", []], ["del", "theorem", "is_preconnected_sUnion", []], ["del", "theorem", "is_preconnected", ["is_preirreducible"]], ["del", "def", "is_totally_disconnected", []], ["del", "theorem", "is_totally_disconnected_empty", []], ["del", "theorem", "is_totally_disconnected_of_is_totally_separated", []], ["del", "theorem", "is_totally_disconnected_singleton", []], ["del", "def", "is_totally_separated", []], ["del", "theorem", "is_totally_separated_empty", []], ["del", "theorem", "is_totally_separated_singleton", []], ["del", "theorem", "mem_connected_component", []], ["del", "theorem", "nonempty_inter", []], ["del", "theorem", "subset_connected_component", []], ["del", "theorem", "subset_or_disjoint_of_clopen", []], ["del", "theorem", "connected_space", ["subtype"]], ["del", "theorem", "preconnected_space", ["subtype"]]]}]}, {"timestamp": 1613035315, "sha": "97a56e63", "message": "refactor(algebra/lie/basic): split giant file into pieces (#6141)", "changes": [{"oldPath": null, "newPath": "src/algebra/lie/abelian.lean", "changes": [["add", "theorem", "commutative_ring_iff_abelian_lie_ring", []], ["add", "theorem", "is_lie_abelian", ["function", "injective"]], ["add", "theorem", "is_lie_abelian", ["function", "surjective"]], ["add", "def", "is_lie_abelian", []], ["add", "theorem", "lie_abelian_iff_equiv_lie_abelian", []], ["add", "theorem", "abelian_of_le_center", ["lie_algebra"]], ["add", "def", "center", ["lie_algebra"]], ["add", "theorem", "center_eq_adjoint_kernel", ["lie_algebra"]], ["add", "theorem", "is_lie_abelian_bot", ["lie_algebra"]], ["add", "theorem", "is_lie_abelian_iff_center_eq_top", ["lie_algebra"]], ["add", "theorem", "is_trivial_iff_maximal_trivial_eq_top", ["lie_module"]], ["add", "def", "maximal_trivial_submodule", ["lie_module"]], ["add", "theorem", "mem_maximal_trivial_submodule", ["lie_module"]], ["add", "theorem", "trivial_iff_le_maximal_trivial", ["lie_module"]], ["add", "theorem", "lie_abelian_iff_lie_self_eq_bot", ["lie_submodule"]], ["add", "theorem", "trivial_lie_oper_zero", ["lie_submodule"]], ["add", "theorem", "trivial_lie_zero", []]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "def", "to_lie_equiv", ["alg_equiv"]], ["del", "theorem", "to_lie_equiv_apply", ["alg_equiv"]], ["del", "theorem", "to_lie_equiv_symm_apply", ["alg_equiv"]], ["del", "theorem", "commutative_ring_iff_abelian_lie_ring", []], ["del", "theorem", "is_lie_abelian", ["function", "injective"]], ["del", "theorem", "is_lie_abelian", ["function", "surjective"]], ["del", "def", "is_lie_abelian", []], ["del", "theorem", "lie_abelian_iff_equiv_lie_abelian", []], ["del", "theorem", "abelian_derived_abelian_of_ideal", ["lie_algebra"]], ["del", "theorem", "abelian_iff_derived_one_eq_bot", ["lie_algebra"]], ["del", "theorem", "abelian_iff_derived_succ_eq_bot", ["lie_algebra"]], ["del", "theorem", "abelian_of_le_center", ["lie_algebra"]], ["del", "theorem", "abelian_of_solvable_ideal_eq_bot_iff", ["lie_algebra"]], ["del", "theorem", "abelian_radical_iff_solvable_is_abelian", ["lie_algebra"]], ["del", "theorem", "abelian_radical_of_semisimple", ["lie_algebra"]], ["del", "def", "ad", ["lie_algebra"]], ["del", "theorem", "ad_apply", ["lie_algebra"]], ["del", "def", "center", ["lie_algebra"]], ["del", "theorem", "center_eq_adjoint_kernel", ["lie_algebra"]], ["del", "theorem", "center_eq_bot_of_semisimple", ["lie_algebra"]], ["del", "theorem", "center_le_radical", ["lie_algebra"]], ["del", "theorem", "derived_length_eq_derived_length_of_ideal", ["lie_algebra"]], ["del", "theorem", "derived_length_zero", ["lie_algebra"]], ["del", "def", "derived_series", ["lie_algebra"]], ["del", "theorem", "derived_series_def", ["lie_algebra"]], ["del", "theorem", "derived_series_of_bot_eq_bot", ["lie_algebra"]], ["del", "theorem", "derived_series_of_derived_length_succ", ["lie_algebra"]], ["del", "def", "derived_series_of_ideal", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_add", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_add_le_add", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_antimono", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_le", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_le_self", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_mono", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_succ", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_succ_le", ["lie_algebra"]], ["del", "theorem", "derived_series_of_ideal_zero", ["lie_algebra"]], ["del", "def", "of_eq", ["lie_algebra", "equiv"]], ["del", "theorem", "of_eq_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "of_injective_apply", ["lie_algebra", "equiv"]], ["del", "def", "of_subalgebra", ["lie_algebra", "equiv"]], ["del", "theorem", "of_subalgebra_apply", ["lie_algebra", "equiv"]], ["del", "def", "of_subalgebras", ["lie_algebra", "equiv"]], ["del", "theorem", "of_subalgebras_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "of_subalgebras_symm_apply", ["lie_algebra", "equiv"]], ["del", "theorem", "is_lie_abelian_bot", ["lie_algebra"]], ["del", "theorem", "is_lie_abelian_iff_center_eq_top", ["lie_algebra"]], ["del", "theorem", "is_semisimple_iff_no_abelian_ideals", ["lie_algebra"]], ["del", "theorem", "is_semisimple_iff_no_solvable_ideals", ["lie_algebra"]], ["del", "theorem", "is_solvable_of_injective", ["lie_algebra"]], ["del", "theorem", "le_solvable_ideal_solvable", ["lie_algebra"]], ["del", "theorem", "solvable_iff_le_radical", ["lie_algebra", "lie_ideal"]], ["del", "def", "ideal_range", ["lie_algebra", "morphism"]], ["del", "def", "is_ideal_morphism", ["lie_algebra", "morphism"]], ["del", "theorem", "is_ideal_morphism_def", ["lie_algebra", "morphism"]], ["del", "def", "ker", ["lie_algebra", "morphism"]], ["del", "theorem", "ker_coe_submodule", ["lie_algebra", "morphism"]], ["del", "theorem", "ker_eq_bot", ["lie_algebra", "morphism"]], ["del", "theorem", "ker_le_comap", ["lie_algebra", "morphism"]], ["del", "theorem", "le_ker_iff", ["lie_algebra", "morphism"]], ["del", "theorem", "map_bot_iff", ["lie_algebra", "morphism"]], ["del", "theorem", "map_le_ideal_range", ["lie_algebra", "morphism"]], ["del", "theorem", "mem_ideal_range", ["lie_algebra", "morphism"]], ["del", "theorem", "mem_ideal_range_iff", ["lie_algebra", "morphism"]], ["del", "theorem", "mem_ker", ["lie_algebra", "morphism"]], ["del", "def", "range", ["lie_algebra", "morphism"]], ["del", "theorem", "range_bracket", ["lie_algebra", "morphism"]], ["del", "theorem", "range_coe", ["lie_algebra", "morphism"]], ["del", "theorem", "range_subset_ideal_range", ["lie_algebra", "morphism"]], ["del", "def", "of_associative_algebra_hom", ["lie_algebra"]], ["del", "theorem", "of_associative_algebra_hom_apply", ["lie_algebra"]], ["del", "theorem", "of_associative_algebra_hom_comp", ["lie_algebra"]], ["del", "theorem", "of_associative_algebra_hom_id", ["lie_algebra"]], ["del", "def", "radical", ["lie_algebra"]], ["del", "theorem", "subsingleton_of_semisimple_lie_abelian", ["lie_algebra"]], ["del", "def", "top_equiv_self", ["lie_algebra"]], ["del", "theorem", "top_equiv_self_apply", ["lie_algebra"]], ["del", "def", "lie_equiv_matrix'", []], ["del", "theorem", "lie_equiv_matrix'_apply", []], ["del", "theorem", "lie_equiv_matrix'_symm_apply", []], ["del", "theorem", "bot_of_map_eq_bot", ["lie_ideal"]], ["del", "theorem", "coe_hom_of_le", ["lie_ideal"]], ["del", "theorem", "coe_to_subalgebra", ["lie_ideal"]], ["del", "def", "comap", ["lie_ideal"]], ["del", "theorem", "comap_bracket_eq", ["lie_ideal"]], ["del", "theorem", "comap_bracket_incl", ["lie_ideal"]], ["del", "theorem", "comap_bracket_incl_of_le", ["lie_ideal"]], ["del", "theorem", "comap_bracket_le", ["lie_ideal"]], ["del", "theorem", "comap_coe_submodule", ["lie_ideal"]], ["del", "theorem", "comap_incl_self", ["lie_ideal"]], ["del", "theorem", "comap_map_eq", ["lie_ideal"]], ["del", "theorem", "comap_map_le", ["lie_ideal"]], ["del", "theorem", "comap_mono", ["lie_ideal"]], ["del", "theorem", "derived_series_add_eq_bot", ["lie_ideal"]], ["del", "theorem", "derived_series_eq_bot_iff", ["lie_ideal"]], ["del", "theorem", "derived_series_eq_derived_series_of_ideal_comap", ["lie_ideal"]], ["del", "theorem", "derived_series_eq_derived_series_of_ideal_map", ["lie_ideal"]], ["del", "theorem", "derived_series_map_le_derived_series", ["lie_ideal"]], ["del", "theorem", "gc_map_comap", ["lie_ideal"]], ["del", "def", "hom_of_le", ["lie_ideal"]], ["del", "theorem", "hom_of_le_apply", ["lie_ideal"]], ["del", "theorem", "hom_of_le_injective", ["lie_ideal"]], ["del", "def", "incl", ["lie_ideal"]], ["del", "theorem", "incl_apply", ["lie_ideal"]], ["del", "theorem", "incl_coe", ["lie_ideal"]], ["del", "theorem", "incl_ideal_range", ["lie_ideal"]], ["del", "theorem", "incl_is_ideal_morphism", ["lie_ideal"]], ["del", "theorem", "ker_incl", ["lie_ideal"]], ["del", "def", "map", ["lie_ideal"]], ["del", "theorem", "map_bracket_le", ["lie_ideal"]], ["del", "theorem", "map_coe_submodule", ["lie_ideal"]], ["del", "theorem", "map_comap_bracket_eq", ["lie_ideal"]], ["del", "theorem", "map_comap_eq", ["lie_ideal"]], ["del", "theorem", "map_comap_incl", ["lie_ideal"]], ["del", "theorem", "map_comap_le", ["lie_ideal"]], ["del", "theorem", "map_le", ["lie_ideal"]], ["del", "theorem", "map_le_iff_le_comap", ["lie_ideal"]], ["del", "theorem", "map_mono", ["lie_ideal"]], ["del", "theorem", "map_of_image", ["lie_ideal"]], ["del", "theorem", "map_sup_ker_eq_map", ["lie_ideal"]], ["del", "theorem", "mem_comap", ["lie_ideal"]], ["del", "theorem", "mem_map", ["lie_ideal"]], ["del", "theorem", "subsingleton_of_bot", ["lie_ideal"]], ["del", "def", "lie_ideal", []], ["del", "def", "lie_ideal_subalgebra", []], ["del", "theorem", "lie_mem_left", []], ["del", "theorem", "lie_mem_right", []], ["del", "theorem", "derived_series_le_lower_central_series", ["lie_module"]], ["del", "theorem", "is_trivial_iff_maximal_trivial_eq_top", ["lie_module"]], ["del", "def", "lower_central_series", ["lie_module"]], ["del", "theorem", "lower_central_series_succ", ["lie_module"]], ["del", "theorem", "lower_central_series_zero", ["lie_module"]], ["del", "def", "maximal_trivial_submodule", ["lie_module"]], ["del", "theorem", "mem_maximal_trivial_submodule", ["lie_module"]], ["del", "def", "to_endomorphism", ["lie_module"]], ["del", "theorem", "trivial_iff_le_maximal_trivial", ["lie_module"]], ["del", "theorem", "trivial_iff_lower_central_eq_bot", ["lie_module"]], ["del", "theorem", "of_associative_ring_bracket", ["lie_ring"]], ["del", "theorem", "add_mem", ["lie_subalgebra"]], ["del", "theorem", "coe_bracket", ["lie_subalgebra"]], ["del", "theorem", "coe_injective", ["lie_subalgebra"]], ["del", "theorem", "coe_set_eq", ["lie_subalgebra"]], ["del", "theorem", "coe_to_submodule_eq", ["lie_subalgebra"]], ["del", "theorem", "coe_zero_iff_zero", ["lie_subalgebra"]], ["del", "theorem", "ext", ["lie_subalgebra"]], ["del", "theorem", "ext_iff'", ["lie_subalgebra"]], ["del", "theorem", "ext_iff", ["lie_subalgebra"]], ["del", "def", "incl", ["lie_subalgebra"]], ["del", "theorem", "lie_mem", ["lie_subalgebra"]], ["del", "def", "map", ["lie_subalgebra"]], ["del", "theorem", "mem_coe'", ["lie_subalgebra"]], ["del", "theorem", "mem_coe", ["lie_subalgebra"]], ["del", "theorem", "mem_map_submodule", ["lie_subalgebra"]], ["del", "theorem", "mk_coe", ["lie_subalgebra"]], ["del", "theorem", "range_incl", ["lie_subalgebra"]], ["del", "theorem", "smul_mem", ["lie_subalgebra"]], ["del", "theorem", "to_submodule_injective", ["lie_subalgebra"]], ["del", "theorem", "zero_mem", ["lie_subalgebra"]], ["del", "structure", "lie_subalgebra", []], ["del", "def", "lie_subalgebra_of_subalgebra", []], ["del", "theorem", "Inf_coe", ["lie_submodule"]], ["del", "theorem", "Inf_coe_to_submodule", ["lie_submodule"]], ["del", "theorem", "Inf_glb", ["lie_submodule"]], ["del", "theorem", "add_eq_sup", ["lie_submodule"]], ["del", "theorem", "bot_coe", ["lie_submodule"]], ["del", "theorem", "bot_coe_submodule", ["lie_submodule"]], ["del", "theorem", "bot_lie", ["lie_submodule"]], ["del", "theorem", "coe_hom_of_le", ["lie_submodule"]], ["del", "theorem", "coe_injective", ["lie_submodule"]], ["del", "theorem", "coe_submodule_injective", ["lie_submodule"]], ["del", "theorem", "coe_submodule_le_coe_submodule", ["lie_submodule"]], ["del", "theorem", "coe_to_set_mk", ["lie_submodule"]], ["del", "theorem", "coe_to_submodule", ["lie_submodule"]], ["del", "theorem", "coe_to_submodule_eq_iff", ["lie_submodule"]], ["del", "theorem", "coe_to_submodule_mk", ["lie_submodule"]], ["del", "def", "comap", ["lie_submodule"]], ["del", "theorem", "eq_bot_iff", ["lie_submodule"]], ["del", "theorem", "ext", ["lie_submodule"]], ["del", "theorem", "gc_map_comap", ["lie_submodule"]], ["del", "def", "hom_of_le", ["lie_submodule"]], ["del", "theorem", "hom_of_le_apply", ["lie_submodule"]], ["del", "theorem", "hom_of_le_injective", ["lie_submodule"]], ["del", "def", "incl", ["lie_submodule"]], ["del", "theorem", "incl_apply", ["lie_submodule"]], ["del", "theorem", "incl_eq_val", ["lie_submodule"]], ["del", "theorem", "inf_coe", ["lie_submodule"]], ["del", "theorem", "inf_coe_to_submodule", ["lie_submodule"]], ["del", "theorem", "inf_lie", ["lie_submodule"]], ["del", "theorem", "le_def", ["lie_submodule"]], ["del", "theorem", "lie_abelian_iff_lie_self_eq_bot", ["lie_submodule"]], ["del", "theorem", "lie_bot", ["lie_submodule"]], ["del", "theorem", "lie_comm", ["lie_submodule"]], ["del", "theorem", "lie_ideal_oper_eq_linear_span", ["lie_submodule"]], ["del", "theorem", "lie_ideal_oper_eq_span", ["lie_submodule"]], ["del", "theorem", "lie_inf", ["lie_submodule"]], ["del", "theorem", "lie_le_inf", ["lie_submodule"]], ["del", "theorem", "lie_le_left", ["lie_submodule"]], ["del", "theorem", "lie_le_right", ["lie_submodule"]], ["del", "theorem", "lie_mem_lie", ["lie_submodule"]], ["del", "def", "lie_span", ["lie_submodule"]], ["del", "theorem", "lie_span_eq", ["lie_submodule"]], ["del", "theorem", "lie_span_le", ["lie_submodule"]], ["del", "theorem", "lie_span_mono", ["lie_submodule"]], ["del", "theorem", "lie_sup", ["lie_submodule"]], ["del", "def", "map", ["lie_submodule"]], ["del", "theorem", "map_le_iff_le_comap", ["lie_submodule"]], ["del", "theorem", "mem_bot", ["lie_submodule"]], ["del", "theorem", "mem_carrier", ["lie_submodule"]], ["del", "theorem", "mem_coe", ["lie_submodule"]], ["del", "theorem", "mem_coe_submodule", ["lie_submodule"]], ["del", "theorem", "mem_inf", ["lie_submodule"]], ["del", "theorem", "mem_lie_span", ["lie_submodule"]], ["del", "theorem", "mem_sup", ["lie_submodule"]], ["del", "theorem", "mem_top", ["lie_submodule"]], ["del", "theorem", "mono_lie", ["lie_submodule"]], ["del", "theorem", "mono_lie_left", ["lie_submodule"]], ["del", "theorem", "mono_lie_right", ["lie_submodule"]], ["del", "def", "action_as_endo_map", ["lie_submodule", "quotient"]], ["del", "def", "action_as_endo_map_bracket", ["lie_submodule", "quotient"]], ["del", "theorem", "is_quotient_mk", ["lie_submodule", "quotient"]], ["del", "def", "lie_submodule_invariant", ["lie_submodule", "quotient"]], ["del", "def", "mk", ["lie_submodule", "quotient"]], ["del", "theorem", "mk_bracket", ["lie_submodule", "quotient"]], ["del", "def", "quotient", ["lie_submodule"]], ["del", "theorem", "submodule_span_le_lie_span", ["lie_submodule"]], ["del", "theorem", "subset_lie_span", ["lie_submodule"]], ["del", "theorem", "subsingleton_of_bot", ["lie_submodule"]], ["del", "theorem", "sup_coe_to_submodule", ["lie_submodule"]], ["del", "theorem", "sup_lie", ["lie_submodule"]], ["del", "theorem", "top_coe", ["lie_submodule"]], ["del", "theorem", "top_coe_submodule", ["lie_submodule"]], ["del", "theorem", "trivial_lie_oper_zero", ["lie_submodule"]], ["del", "theorem", "well_founded_of_noetherian", ["lie_submodule"]], ["del", "theorem", "zero_mem", ["lie_submodule"]], ["del", "structure", "lie_submodule", []], ["del", "def", "lie_conj", ["linear_equiv"]], ["del", "theorem", "lie_conj_apply", ["linear_equiv"]], ["del", "theorem", "lie_conj_symm", ["linear_equiv"]], ["del", "theorem", "lie_conj_apply", ["matrix"]], ["del", "theorem", "lie_conj_symm_apply", ["matrix"]], ["del", "def", "reindex_lie_equiv", ["matrix"]], ["del", "theorem", "reindex_lie_equiv_apply", ["matrix"]], ["del", "theorem", "reindex_lie_equiv_symm_apply", ["matrix"]], ["del", "theorem", "commutator", ["ring_commutator"]], ["del", "theorem", "trivial_lie_zero", []]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/lie/ideal_operations.lean", "changes": [["add", "theorem", "comap_bracket_eq", ["lie_ideal"]], ["add", "theorem", "comap_bracket_incl", ["lie_ideal"]], ["add", "theorem", "comap_bracket_incl_of_le", ["lie_ideal"]], ["add", "theorem", "comap_bracket_le", ["lie_ideal"]], ["add", "theorem", "map_bracket_le", ["lie_ideal"]], ["add", "theorem", "map_comap_bracket_eq", ["lie_ideal"]], ["add", "theorem", "map_comap_incl", ["lie_ideal"]], ["add", "theorem", "bot_lie", ["lie_submodule"]], ["add", "theorem", "inf_lie", ["lie_submodule"]], ["add", "theorem", "lie_bot", ["lie_submodule"]], ["add", "theorem", "lie_comm", ["lie_submodule"]], ["add", "theorem", "lie_ideal_oper_eq_linear_span", ["lie_submodule"]], ["add", "theorem", "lie_ideal_oper_eq_span", ["lie_submodule"]], ["add", "theorem", "lie_inf", ["lie_submodule"]], ["add", "theorem", "lie_le_inf", ["lie_submodule"]], ["add", "theorem", "lie_le_left", ["lie_submodule"]], ["add", "theorem", "lie_le_right", ["lie_submodule"]], ["add", "theorem", "lie_mem_lie", ["lie_submodule"]], ["add", "theorem", "lie_sup", ["lie_submodule"]], ["add", "theorem", "mono_lie", ["lie_submodule"]], ["add", "theorem", "mono_lie_left", ["lie_submodule"]], ["add", "theorem", "mono_lie_right", ["lie_submodule"]], ["add", "theorem", "sup_lie", ["lie_submodule"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/matrix.lean", "changes": [["add", "def", "lie_equiv_matrix'", []], ["add", "theorem", "lie_equiv_matrix'_apply", []], ["add", "theorem", "lie_equiv_matrix'_symm_apply", []], ["add", "theorem", "lie_conj_apply", ["matrix"]], ["add", "theorem", "lie_conj_symm_apply", ["matrix"]], ["add", "def", "reindex_lie_equiv", ["matrix"]], ["add", "theorem", "reindex_lie_equiv_apply", ["matrix"]], ["add", "theorem", "reindex_lie_equiv_symm_apply", ["matrix"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/nilpotent.lean", "changes": [["add", "theorem", "derived_series_le_lower_central_series", ["lie_module"]], ["add", "def", "lower_central_series", ["lie_module"]], ["add", "theorem", "lower_central_series_succ", ["lie_module"]], ["add", "theorem", "lower_central_series_zero", ["lie_module"]], ["add", "theorem", "trivial_iff_lower_central_eq_bot", ["lie_module"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/of_associative.lean", "changes": [["add", "def", "to_lie_equiv", ["alg_equiv"]], ["add", "theorem", "to_lie_equiv_apply", ["alg_equiv"]], ["add", "theorem", "to_lie_equiv_symm_apply", ["alg_equiv"]], ["add", "def", "ad", ["lie_algebra"]], ["add", "theorem", "ad_apply", ["lie_algebra"]], ["add", "def", "of_associative_algebra_hom", ["lie_algebra"]], ["add", "theorem", "of_associative_algebra_hom_apply", ["lie_algebra"]], ["add", "theorem", "of_associative_algebra_hom_comp", ["lie_algebra"]], ["add", "theorem", "of_associative_algebra_hom_id", ["lie_algebra"]], ["add", "def", "to_endomorphism", ["lie_module"]], ["add", "theorem", "of_associative_ring_bracket", ["lie_ring"]], ["add", "def", "lie_subalgebra_of_subalgebra", []], ["add", "def", "lie_conj", ["linear_equiv"]], ["add", "theorem", "lie_conj_apply", ["linear_equiv"]], ["add", "theorem", "lie_conj_symm", ["linear_equiv"]], ["add", "theorem", "commutator", ["ring_commutator"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/quotient.lean", "changes": [["add", "def", "action_as_endo_map", ["lie_submodule", "quotient"]], ["add", "def", "action_as_endo_map_bracket", ["lie_submodule", "quotient"]], ["add", "theorem", "is_quotient_mk", ["lie_submodule", "quotient"]], ["add", "def", "lie_submodule_invariant", ["lie_submodule", "quotient"]], ["add", "def", "mk", ["lie_submodule", "quotient"]], ["add", "theorem", "mk_bracket", ["lie_submodule", "quotient"]], ["add", "def", "quotient", ["lie_submodule"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/semisimple.lean", "changes": [["add", "theorem", "abelian_radical_iff_solvable_is_abelian", ["lie_algebra"]], ["add", "theorem", "abelian_radical_of_semisimple", ["lie_algebra"]], ["add", "theorem", "center_eq_bot_of_semisimple", ["lie_algebra"]], ["add", "theorem", "is_semisimple_iff_no_abelian_ideals", ["lie_algebra"]], ["add", "theorem", "is_semisimple_iff_no_solvable_ideals", ["lie_algebra"]], ["add", "theorem", "subsingleton_of_semisimple_lie_abelian", ["lie_algebra"]]]}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/lie/solvable.lean", "changes": [["add", "theorem", "abelian_derived_abelian_of_ideal", ["lie_algebra"]], ["add", "theorem", "abelian_iff_derived_one_eq_bot", ["lie_algebra"]], ["add", "theorem", "abelian_iff_derived_succ_eq_bot", ["lie_algebra"]], ["add", "theorem", "abelian_of_solvable_ideal_eq_bot_iff", ["lie_algebra"]], ["add", "theorem", "center_le_radical", ["lie_algebra"]], ["add", "theorem", "derived_length_eq_derived_length_of_ideal", ["lie_algebra"]], ["add", "theorem", "derived_length_zero", ["lie_algebra"]], ["add", "def", "derived_series", ["lie_algebra"]], ["add", "theorem", "derived_series_def", ["lie_algebra"]], ["add", "theorem", "derived_series_of_bot_eq_bot", ["lie_algebra"]], ["add", "theorem", "derived_series_of_derived_length_succ", ["lie_algebra"]], ["add", "def", "derived_series_of_ideal", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_add", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_add_le_add", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_antimono", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_le", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_le_self", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_mono", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_succ", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_succ_le", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_zero", ["lie_algebra"]], ["add", "theorem", "is_solvable_of_injective", ["lie_algebra"]], ["add", "theorem", "le_solvable_ideal_solvable", ["lie_algebra"]], ["add", "theorem", "solvable_iff_le_radical", ["lie_algebra", "lie_ideal"]], ["add", "def", "radical", ["lie_algebra"]], ["add", "theorem", "derived_series_add_eq_bot", ["lie_ideal"]], ["add", "theorem", "derived_series_eq_bot_iff", ["lie_ideal"]], ["add", "theorem", "derived_series_eq_derived_series_of_ideal_comap", ["lie_ideal"]], ["add", "theorem", "derived_series_eq_derived_series_of_ideal_map", ["lie_ideal"]], ["add", "theorem", "derived_series_map_le_derived_series", ["lie_ideal"]]]}, {"oldPath": null, "newPath": "src/algebra/lie/subalgebra.lean", "changes": [["add", "def", "of_eq", ["lie_algebra", "equiv"]], ["add", "theorem", "of_eq_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "of_injective_apply", ["lie_algebra", "equiv"]], ["add", "def", "of_subalgebra", ["lie_algebra", "equiv"]], ["add", "theorem", "of_subalgebra_apply", ["lie_algebra", "equiv"]], ["add", "def", "of_subalgebras", ["lie_algebra", "equiv"]], ["add", "theorem", "of_subalgebras_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "of_subalgebras_symm_apply", ["lie_algebra", "equiv"]], ["add", "def", "range", ["lie_algebra", "morphism"]], ["add", "theorem", "range_bracket", ["lie_algebra", "morphism"]], ["add", "theorem", "range_coe", ["lie_algebra", "morphism"]], ["add", "theorem", "add_mem", ["lie_subalgebra"]], ["add", "theorem", "coe_bracket", ["lie_subalgebra"]], ["add", "theorem", "coe_injective", ["lie_subalgebra"]], ["add", "theorem", "coe_set_eq", ["lie_subalgebra"]], ["add", "theorem", "coe_to_submodule_eq", ["lie_subalgebra"]], ["add", "theorem", "coe_zero_iff_zero", ["lie_subalgebra"]], ["add", "theorem", "ext", ["lie_subalgebra"]], ["add", "theorem", "ext_iff'", ["lie_subalgebra"]], ["add", "theorem", "ext_iff", ["lie_subalgebra"]], ["add", "def", "incl", ["lie_subalgebra"]], ["add", "theorem", "lie_mem", ["lie_subalgebra"]], ["add", "def", "map", ["lie_subalgebra"]], ["add", "theorem", "mem_coe'", ["lie_subalgebra"]], ["add", "theorem", "mem_coe", ["lie_subalgebra"]], ["add", "theorem", "mem_map_submodule", ["lie_subalgebra"]], ["add", "theorem", "mk_coe", ["lie_subalgebra"]], ["add", "theorem", "range_incl", ["lie_subalgebra"]], ["add", "theorem", "smul_mem", ["lie_subalgebra"]], ["add", "theorem", "to_submodule_injective", ["lie_subalgebra"]], ["add", "theorem", "zero_mem", ["lie_subalgebra"]], ["add", "structure", "lie_subalgebra", []]]}, {"oldPath": null, "newPath": "src/algebra/lie/submodule.lean", "changes": [["add", "def", "ideal_range", ["lie_algebra", "morphism"]], ["add", "def", "is_ideal_morphism", ["lie_algebra", "morphism"]], ["add", "theorem", "is_ideal_morphism_def", ["lie_algebra", "morphism"]], ["add", "def", "ker", ["lie_algebra", "morphism"]], ["add", "theorem", "ker_coe_submodule", ["lie_algebra", "morphism"]], ["add", "theorem", "ker_eq_bot", ["lie_algebra", "morphism"]], ["add", "theorem", "ker_le_comap", ["lie_algebra", "morphism"]], ["add", "theorem", "le_ker_iff", ["lie_algebra", "morphism"]], ["add", "theorem", "map_bot_iff", ["lie_algebra", "morphism"]], ["add", "theorem", "map_le_ideal_range", ["lie_algebra", "morphism"]], ["add", "theorem", "mem_ideal_range", ["lie_algebra", "morphism"]], ["add", "theorem", "mem_ideal_range_iff", ["lie_algebra", "morphism"]], ["add", "theorem", "mem_ker", ["lie_algebra", "morphism"]], ["add", "theorem", "range_subset_ideal_range", ["lie_algebra", "morphism"]], ["add", "def", "top_equiv_self", ["lie_algebra"]], ["add", "theorem", "top_equiv_self_apply", ["lie_algebra"]], ["add", "theorem", "bot_of_map_eq_bot", ["lie_ideal"]], ["add", "theorem", "coe_hom_of_le", ["lie_ideal"]], ["add", "theorem", "coe_to_subalgebra", ["lie_ideal"]], ["add", "def", "comap", ["lie_ideal"]], ["add", "theorem", "comap_coe_submodule", ["lie_ideal"]], ["add", "theorem", "comap_incl_self", ["lie_ideal"]], ["add", "theorem", "comap_map_eq", ["lie_ideal"]], ["add", "theorem", "comap_map_le", ["lie_ideal"]], ["add", "theorem", "comap_mono", ["lie_ideal"]], ["add", "theorem", "gc_map_comap", ["lie_ideal"]], ["add", "def", "hom_of_le", ["lie_ideal"]], ["add", "theorem", "hom_of_le_apply", ["lie_ideal"]], ["add", "theorem", "hom_of_le_injective", ["lie_ideal"]], ["add", "def", "incl", ["lie_ideal"]], ["add", "theorem", "incl_apply", ["lie_ideal"]], ["add", "theorem", "incl_coe", ["lie_ideal"]], ["add", "theorem", "incl_ideal_range", ["lie_ideal"]], ["add", "theorem", "incl_is_ideal_morphism", ["lie_ideal"]], ["add", "theorem", "ker_incl", ["lie_ideal"]], ["add", "def", "map", ["lie_ideal"]], ["add", "theorem", "map_coe_submodule", ["lie_ideal"]], ["add", "theorem", "map_comap_eq", ["lie_ideal"]], ["add", "theorem", "map_comap_le", ["lie_ideal"]], ["add", "theorem", "map_le", ["lie_ideal"]], ["add", "theorem", "map_le_iff_le_comap", ["lie_ideal"]], ["add", "theorem", "map_mono", ["lie_ideal"]], ["add", "theorem", "map_of_image", ["lie_ideal"]], ["add", "theorem", "map_sup_ker_eq_map", ["lie_ideal"]], ["add", "theorem", "mem_comap", ["lie_ideal"]], ["add", "theorem", "mem_map", ["lie_ideal"]], ["add", "theorem", "subsingleton_of_bot", ["lie_ideal"]], ["add", "def", "lie_ideal", []], ["add", "def", "lie_ideal_subalgebra", []], ["add", "theorem", "lie_mem_left", []], ["add", "theorem", "lie_mem_right", []], ["add", "theorem", "Inf_coe", ["lie_submodule"]], ["add", "theorem", "Inf_coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "Inf_glb", ["lie_submodule"]], ["add", "theorem", "add_eq_sup", ["lie_submodule"]], ["add", "theorem", "bot_coe", ["lie_submodule"]], ["add", "theorem", "bot_coe_submodule", ["lie_submodule"]], ["add", "theorem", "coe_hom_of_le", ["lie_submodule"]], ["add", "theorem", "coe_injective", ["lie_submodule"]], ["add", "theorem", "coe_submodule_injective", ["lie_submodule"]], ["add", "theorem", "coe_submodule_le_coe_submodule", ["lie_submodule"]], ["add", "theorem", "coe_to_set_mk", ["lie_submodule"]], ["add", "theorem", "coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "coe_to_submodule_eq_iff", ["lie_submodule"]], ["add", "theorem", "coe_to_submodule_mk", ["lie_submodule"]], ["add", "def", "comap", ["lie_submodule"]], ["add", "theorem", "eq_bot_iff", ["lie_submodule"]], ["add", "theorem", "ext", ["lie_submodule"]], ["add", "theorem", "gc_map_comap", ["lie_submodule"]], ["add", "def", "hom_of_le", ["lie_submodule"]], ["add", "theorem", "hom_of_le_apply", ["lie_submodule"]], ["add", "theorem", "hom_of_le_injective", ["lie_submodule"]], ["add", "def", "incl", ["lie_submodule"]], ["add", "theorem", "incl_apply", ["lie_submodule"]], ["add", "theorem", "incl_eq_val", ["lie_submodule"]], ["add", "theorem", "inf_coe", ["lie_submodule"]], ["add", "theorem", "inf_coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "le_def", ["lie_submodule"]], ["add", "def", "lie_span", ["lie_submodule"]], ["add", "theorem", "lie_span_eq", ["lie_submodule"]], ["add", "theorem", "lie_span_le", ["lie_submodule"]], ["add", "theorem", "lie_span_mono", ["lie_submodule"]], ["add", "def", "map", ["lie_submodule"]], ["add", "theorem", "map_le_iff_le_comap", ["lie_submodule"]], ["add", "theorem", "mem_bot", ["lie_submodule"]], ["add", "theorem", "mem_carrier", ["lie_submodule"]], ["add", "theorem", "mem_coe", ["lie_submodule"]], ["add", "theorem", "mem_coe_submodule", ["lie_submodule"]], ["add", "theorem", "mem_inf", ["lie_submodule"]], ["add", "theorem", "mem_lie_span", ["lie_submodule"]], ["add", "theorem", "mem_sup", ["lie_submodule"]], ["add", "theorem", "mem_top", ["lie_submodule"]], ["add", "theorem", "submodule_span_le_lie_span", ["lie_submodule"]], ["add", "theorem", "subset_lie_span", ["lie_submodule"]], ["add", "theorem", "subsingleton_of_bot", ["lie_submodule"]], ["add", "theorem", "sup_coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "top_coe", ["lie_submodule"]], ["add", "theorem", "top_coe_submodule", ["lie_submodule"]], ["add", "theorem", "well_founded_of_noetherian", ["lie_submodule"]], ["add", "theorem", "zero_mem", ["lie_submodule"]], ["add", "structure", "lie_submodule", []]]}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}]}, {"timestamp": 1613023365, "sha": "97f89af6", "message": "doc(algebra/euclidean_domain): module doc (#6107)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}]}, {"timestamp": 1613023363, "sha": "906e03de", "message": "chore(field_theory,ring_theory): reduce dependencies of `power_basis.lean` (#6104)\nI was having trouble with circular imports related to `power_basis.lean`, so I decided to reshuffle some definitions to make `power_basis.lean` have less dependencies. That way, something depending on `power_basis` doesn't also need to depend on `intermediate_field.adjoin`.\nThe following (main) declarations are moved:\n - `algebra.adjoin`: from `ring_theory/adjoin.lean` to `ring_theory/adjoin/basic.lean` (renamed file)\n - `algebra.adjoin.power_basis`: from `ring_theory/power_basis.lean` to `ring_theory/adjoin/power_basis.lean` (new file)\n - `adjoin_root.power_basis`: from `ring_theory/power_basis.lean` to `ring_theory/adjoin_root.lean`\n - `intermediate_field.adjoin.power_basis`: from `ring_theory/power_basis.lean` to `field_theory/adjoin.lean`\n - `is_scalar_tower.polynomial`: from `ring_theory/algebra_tower.lean` to `ring_theory/polynomial/tower.lean` (new file)\nThe following results are new:\n - `is_integral.linear_independent_pow` and `is_integral.mem_span_pow`: generalize `algebra.adjoin.linear_independent_power_basis` and `algebra.adjoin.mem_span_power_basis`.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "findim", ["intermediate_field", "adjoin"]], ["add", "theorem", "finite_dimensional", ["intermediate_field", "adjoin"]], ["add", "theorem", "gen_eq", ["intermediate_field", "adjoin", "power_basis"]], ["add", "theorem", "power_basis_is_basis", ["intermediate_field"]], ["add", "theorem", "equiv_adjoin_simple_aeval", ["power_basis"]], ["add", "theorem", "equiv_adjoin_simple_gen", ["power_basis"]], ["add", "theorem", "equiv_adjoin_simple_symm_aeval", ["power_basis"]], ["add", "theorem", "equiv_adjoin_simple_symm_gen", ["power_basis"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/adjoin/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/adjoin/power_basis.lean", "changes": [["add", "theorem", "power_basis_is_basis", ["algebra"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "power_basis_is_basis", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "theorem", "aeval_apply", ["is_scalar_tower"]], ["del", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero", ["is_scalar_tower"]], ["del", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero_field", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_aeval", ["is_scalar_tower"]], ["del", "theorem", "aeval_coe", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/tower.lean", "changes": [["add", "theorem", "aeval_apply", ["is_scalar_tower"]], ["add", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero", ["is_scalar_tower"]], ["add", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero_field", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_aeval", ["is_scalar_tower"]], ["add", "theorem", "aeval_coe", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["del", "theorem", "power_basis_is_basis", ["adjoin_root"]], ["del", "theorem", "linear_independent_power_basis", ["algebra"]], ["del", "theorem", "mem_span_power_basis", ["algebra"]], ["del", "theorem", "power_basis_is_basis", ["algebra"]], ["del", "theorem", "findim", ["intermediate_field", "adjoin"]], ["del", "theorem", "finite_dimensional", ["intermediate_field", "adjoin"]], ["del", "theorem", "gen_eq", ["intermediate_field", "adjoin", "power_basis"]], ["del", "theorem", "power_basis_is_basis", ["intermediate_field"]], ["add", "theorem", "linear_independent_pow", ["is_integral"]], ["add", "theorem", "mem_span_pow", ["is_integral"]], ["del", "theorem", "equiv_adjoin_simple_aeval", ["power_basis"]], ["del", "theorem", "equiv_adjoin_simple_gen", ["power_basis"]], ["del", "theorem", "equiv_adjoin_simple_symm_aeval", ["power_basis"]], ["del", "theorem", "equiv_adjoin_simple_symm_gen", ["power_basis"]]]}]}, {"timestamp": 1613023361, "sha": "330129d4", "message": "feat(data/finset/lattice): `inf` and `sup` on complete_linear_orders produce an element of the set (#6103)", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "exists_mem_eq_inf", ["finset"]], ["add", "theorem", "exists_mem_eq_sup", ["finset"]]]}]}, {"timestamp": 1613023359, "sha": "3959a8bb", "message": "perf(ring_theory/{noetherian,ideal/basic}): Simplify proofs of Krull's theorem and related theorems (#6082)\nMove `submodule.singleton_span_is_compact_element` and `submodule.is_compactly_generated` to more appropriate locations. Add trivial order isomorphisms and order-iso lemmas. Show that `is_atomic` and `is_coatomic` are respected by order isomorphisms. Greatly simplify `is_noetherian_iff_well_founded`. Provide an `is_coatomic` instance on the ideal lattice of a ring and simplify `ideal.exists_le_maximal`.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "singleton_span_is_compact_element", ["submodule"]]]}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "is_atomic_iff", ["order_iso"]], ["add", "theorem", "is_coatomic_iff", ["order_iso"]]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "coatomic_of_top_compact", ["complete_lattice"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "Ici_bot", ["order_iso"]], ["add", "def", "Iic_top", ["order_iso"]], ["add", "theorem", "apply_eq_iff_eq_symm_apply", ["order_iso"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["del", "theorem", "singleton_span_is_compact_element", ["submodule"]]]}]}, {"timestamp": 1613003826, "sha": "030107f6", "message": "feat(order/compactly_generated): A compactly-generated modular lattice is complemented iff atomistic (#6071)\nShows that a compactly-generated modular lattice is complemented iff it is atomistic\nProves extra lemmas about atomistic or compactly-generated lattices\nProves extra lemmas about `complete_lattice.independent`\nFix the name of `is_modular_lattice.sup_inf_sup_assoc`", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "Sup_atoms_eq_top", []], ["add", "theorem", "Sup_atoms_le_eq", []], ["add", "theorem", "le_iff_atom_le_imp", []]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "Sup_compact_eq_top", []], ["add", "theorem", "independent_Union_of_directed", ["complete_lattice"]], ["add", "theorem", "independent_sUnion_of_directed", ["complete_lattice"]], ["add", "theorem", "is_complemented_iff_is_atomistic", []], ["add", "theorem", "is_complemented_of_is_atomistic", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Sup_sUnion", []], ["add", "theorem", "independent_empty", ["complete_lattice"]]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": [["add", "theorem", "disjoint_sup_right_of_disjoint_sup_left", ["disjoint"]], ["add", "theorem", "inf_sup_inf_assoc", ["is_modular_lattice"]], ["add", "theorem", "is_modular_lattice_iff_inf_sup_inf_assoc", []], ["del", "theorem", "is_modular_lattice_iff_sup_inf_sup_assoc", []]]}]}, {"timestamp": 1613003824, "sha": "7fb7fb36", "message": "feat(ring_theory/polynomial/chebyshev/dickson): Introduce generalised Dickson polynomials (#5869)\nand replace lambdashev with dickson 1 1.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "newPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "changes": [["add", "theorem", "chebyshev₁_eq_dickson_one_one", ["polynomial"]], ["del", "theorem", "chebyshev₁_eq_lambdashev", ["polynomial"]], ["add", "theorem", "dickson_one_one_char_p", ["polynomial"]], ["add", "theorem", "dickson_one_one_comp_comm", ["polynomial"]], ["add", "theorem", "dickson_one_one_eq_chebyshev₁", ["polynomial"]], ["add", "theorem", "dickson_one_one_eval_add_inv", ["polynomial"]], ["add", "theorem", "dickson_one_one_mul", ["polynomial"]], ["add", "theorem", "dickson_one_one_zmod_p", ["polynomial"]], ["del", "theorem", "lambdashev_char_p", ["polynomial"]], ["del", "theorem", "lambdashev_comp_comm", ["polynomial"]], ["del", "theorem", "lambdashev_eq_chebyshev₁", ["polynomial"]], ["del", "theorem", "lambdashev_eval_add_inv", ["polynomial"]], ["del", "theorem", "lambdashev_mul", ["polynomial"]], ["del", "theorem", "lambdashev_zmod_p", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/chebyshev/defs.lean", "newPath": "src/ring_theory/polynomial/chebyshev/defs.lean", "changes": [["del", "theorem", "lambdashev_add_two", ["polynomial"]], ["del", "theorem", "lambdashev_eq_two_le", ["polynomial"]], ["del", "theorem", "lambdashev_one", ["polynomial"]], ["del", "theorem", "lambdashev_two", ["polynomial"]], ["del", "theorem", "lambdashev_zero", ["polynomial"]], ["del", "theorem", "map_lambdashev", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/chebyshev/dickson.lean", "changes": [["add", "theorem", "dickson_add_two", ["polynomial"]], ["add", "theorem", "dickson_of_two_le", ["polynomial"]], ["add", "theorem", "dickson_one", ["polynomial"]], ["add", "theorem", "dickson_two", ["polynomial"]], ["add", "theorem", "dickson_two_zero", ["polynomial"]], ["add", "theorem", "dickson_zero", ["polynomial"]], ["add", "theorem", "map_dickson", ["polynomial"]]]}]}, {"timestamp": 1613003822, "sha": "c70feebd", "message": "feat(analysis/analytic/inverse): convergence of the inverse of a power series (#5854)\nIf a formal multilinear series has a positive radius of convergence, then its inverse also does.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "geom_sum_Ico'", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "le_mul_pow_of_radius_pos", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/inverse.lean", "newPath": "src/analysis/analytic/inverse.lean", "changes": [["add", "theorem", "radius_right_inv_pos_of_radius_pos", ["formal_multilinear_series"]], ["add", "theorem", "radius_right_inv_pos_of_radius_pos_aux1", ["formal_multilinear_series"]], ["add", "theorem", "radius_right_inv_pos_of_radius_pos_aux2", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "norm_comp_continuous_multilinear_map_le", ["continuous_linear_map"]], ["add", "theorem", "continuous_multilinear_curry_fin0_apply_norm", []], ["add", "theorem", "continuous_multilinear_curry_fin0_symm_apply_norm", []], ["add", "theorem", "continuous_multilinear_curry_fin1_apply_norm", []], ["add", "theorem", "continuous_multilinear_curry_fin1_symm_apply_norm", []], ["add", "theorem", "continuous_multilinear_curry_right_equiv_apply_norm", []], ["add", "theorem", "continuous_multilinear_curry_right_equiv_symm_apply_norm", []]]}]}, {"timestamp": 1613003820, "sha": "19f24ced", "message": "feat(algebra/subalgebra): Trivial subalgebra has trivial automorphism group (#5672)\nAdds a lemma stating that if top=bot in the subalgebra type then top=bot in the subgroup type.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "subsingleton_left", ["subalgebra", "alg_equiv"]], ["add", "theorem", "subsingleton_right", ["subalgebra", "alg_equiv"]], ["add", "theorem", "subsingleton", ["subalgebra", "alg_hom"]], ["add", "theorem", "subsingleton_of_subsingleton", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": []}]}, {"timestamp": 1613003818, "sha": "983cb905", "message": "feat(archive/imo): formalize 1987Q1 (#4731)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1987_q1.lean", "changes": [["add", "theorem", "card_fixed_points", ["imo_1987_q1"]], ["add", "def", "fiber", ["imo_1987_q1"]], ["add", "def", "fixed_points_equiv'", ["imo_1987_q1"]], ["add", "def", "fixed_points_equiv", ["imo_1987_q1"]], ["add", "theorem", "main", ["imo_1987_q1"]], ["add", "theorem", "main_fintype", ["imo_1987_q1"]], ["add", "theorem", "main₀", ["imo_1987_q1"]], ["add", "theorem", "mem_fiber", ["imo_1987_q1"]], ["add", "def", "p", ["imo_1987_q1"]]]}]}, {"timestamp": 1612990902, "sha": "13c9ed34", "message": "refactor(data/finset/basic): simplify proof (#6160)\n... of `bUnion_filter_eq_of_maps_to`\nlooks nicer, slightly faster elaboration, 13% smaller proof term\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}]}, {"timestamp": 1612990900, "sha": "0bc7fc1b", "message": "refactor(ring_theory/perfection): faster proof of `coeff_frobenius` (#6159)\n4X smaller proof term, elaboration 800ms -> 50ms\nCo-authors: `lean-gptf`, Stanislas Polu\nNote: supplying `coeff_pow_p f n` also works but takes 500ms to\nelaborate", "changes": [{"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}]}, {"timestamp": 1612990898, "sha": "6e52dfe3", "message": "feat(algebra/category/Group/adjunctions): adjunction of abelianization and forgetful functor (#6154)\nAbelianization has been defined in `group_theory/abelianization` without realising it in category theory. This PR adds this feature. Furthermore, a module doc for abelianization is added and the one for adjunctions is expanded.", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": [["add", "def", "abelianize", []], ["add", "def", "abelianize_adj", []]]}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["add", "def", "hom_equiv", ["abelianization"]]]}]}, {"timestamp": 1612990896, "sha": "bce1cb3e", "message": "feat(linear_algebra/matrix): lemmas for `reindex({_linear,_alg}_equiv)?` (#6153)\nThis PR contains a couple of `simp` lemmas for `reindex` and its bundled equivs. Namely, it adds `reindex_refl` (reindexing along the identity map is the identity), and `reindex_apply` (the same as `coe_reindex`, but no `λ i j` on the RHS, which makes it more useful for `rw`'ing.) The previous `reindex_apply` is renamed `coe_reindex` for disambiguation.", "changes": [{"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "coe_reindex_alg_equiv", ["matrix"]], ["add", "theorem", "coe_reindex_alg_equiv_symm", ["matrix"]], ["add", "theorem", "coe_reindex_linear_equiv", ["matrix"]], ["add", "theorem", "coe_reindex_linear_equiv_symm", ["matrix"]], ["add", "theorem", "reindex_alg_equiv_refl", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_apply", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_refl_refl", ["matrix"]], ["mod", "theorem", "reindex_linear_equiv_symm_apply", ["matrix"]], ["add", "theorem", "reindex_refl_refl", ["matrix"]]]}]}, {"timestamp": 1612990895, "sha": "eca4f38f", "message": "feat(data/int/basic): an integer of absolute value less than one is zero (#6151)\nlemma eq_zero_iff_abs_lt_one", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "eq_zero_iff_abs_lt_one", ["int"]]]}]}, {"timestamp": 1612990893, "sha": "14a1fd7b", "message": "feat(data/nat/basic): le_of_add_le_* (#6145)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_of_add_le_left", ["nat"]], ["add", "theorem", "le_of_add_le_right", ["nat"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "le_of_add_le_left", ["nnreal"]], ["add", "theorem", "le_of_add_le_right", ["nnreal"]]]}]}, {"timestamp": 1612990891, "sha": "dbbac3b3", "message": "chore(algebra/module/pi): add missing smul_comm_class instances (#6139)\nThere are three families of these for consistency with how we have three families of `is_scalar_tower` instances.", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}]}, {"timestamp": 1612990890, "sha": "56fde49b", "message": "feat(data/polynomial/denoms_clearable): add lemma about clearing denominators in evaluating a polynomial (#6122)\nEvaluating a polynomial with integer coefficients at a rational number and clearing denominators, yields a number greater than or equal to one. The target can be any `linear_ordered_field K`.\nThe assumption on `K` could be weakened to `linear_ordered_comm_ring` assuming that the\nimage of the denominator is invertible in `K`.\nReference: Liouville PR #4301.", "changes": [{"oldPath": "src/data/polynomial/denoms_clearable.lean", "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": [["add", "theorem", "one_le_pow_mul_abs_eval_div", []]]}]}, {"timestamp": 1612990888, "sha": "db0fa613", "message": "feat(category_theory/differential_object): the shift functor (#6111)\nRequested by @jcommelin.", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["add", "def", "shift_counit", ["category_theory", "differential_object"]], ["add", "def", "shift_counit_inv", ["category_theory", "differential_object"]], ["add", "def", "shift_counit_iso", ["category_theory", "differential_object"]], ["add", "def", "shift_functor", ["category_theory", "differential_object"]], ["add", "def", "shift_inverse", ["category_theory", "differential_object"]], ["add", "def", "shift_inverse_obj", ["category_theory", "differential_object"]], ["add", "def", "shift_unit", ["category_theory", "differential_object"]], ["add", "def", "shift_unit_inv", ["category_theory", "differential_object"]], ["add", "def", "shift_unit_iso", ["category_theory", "differential_object"]]]}]}, {"timestamp": 1612979405, "sha": "f0413daf", "message": "refactor(combinatorics/simple_graph/basic): change statement of mem_decidable to more general version (#6157)\nChange statement of `mem_decidable` to more general version.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1612979403, "sha": "83118da7", "message": "feat(data/nat/basic): prove an inequality of natural numbers (#6155)\nAdd lemma mul_lt_mul_pow_succ, proving the inequality `n * q < a * q ^ (n + 1)`.\nReference: Liouville PR #4301.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "mul_lt_mul_pow_succ", ["nat"]]]}]}, {"timestamp": 1612979401, "sha": "ca8e0093", "message": "feat(data/polynomial/ring_division): comp_eq_zero_iff (#6147)\nCondition for a composition of polynomials to be zero (assuming that the ring is an integral domain).", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "comp_eq_zero_iff", ["polynomial"]]]}]}, {"timestamp": 1612979399, "sha": "41530ae3", "message": "feat(field_theory/splitting_field): splits_of_nat_degree_le_one (#6146)\nAdds the analogs of `splits_of_degree_eq_one` and `splits_of_degree_le_one` for `nat_degree`", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "splits_of_nat_degree_eq_one", ["polynomial"]], ["add", "theorem", "splits_of_nat_degree_le_one", ["polynomial"]]]}]}, {"timestamp": 1612979397, "sha": "3fae96c9", "message": "feat(algebra/ordered_monoid): min_*_distrib (#6144)\nAlso provide a `canonically_linear_ordered_add_monoid` instances for `nat`, `nnreal`, `cardinal` and `with_top`.", "changes": [{"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["add", "theorem", "min_mul_distrib'", []], ["add", "theorem", "min_mul_distrib", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1612979395, "sha": "3cc398b2", "message": "feat(linear_algebra/prod): add an ext lemma that recurses into products (#6124)\nCombined with #6105, this means that applying `ext` when faced with an equality between `A × (B ⊗[R] C) →ₗ[R] D`s now expands to two goals, the first taking `a : A` and the second taking `b : B` and `c : C`.\nAgain, this comes at the expense of sometimes needing to `simp [prod.mk_fst, linear_map.inr_apply]` after using `ext`, but those are all covered by `dsimp` anyway.", "changes": [{"oldPath": "src/linear_algebra/prod.lean", "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "prod_ext", ["linear_map"]]]}]}, {"timestamp": 1612970261, "sha": "08545369", "message": "feat(topology/constructions): add `map_fst_nhds` and `map_snd_nhds` (#6142)\n* Move the definition of `nhds_within` to `topology/basic`. The theory is still in `continuous_on`.\n* Add `filter.map_inf_principal_preimage`.\n* Add `map_fst_nhds_within`, `map_fst_nhds`, `map_snd_nhds_within`, and `map_snd_nhds`.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "map_inf_principal_preimage", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "def", "nhds_within", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "map_fst_nhds", []], ["add", "theorem", "map_fst_nhds_within", []], ["add", "theorem", "map_snd_nhds", []], ["add", "theorem", "map_snd_nhds_within", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["del", "def", "nhds_within", []]]}]}, {"timestamp": 1612970259, "sha": "7fd4dcf1", "message": "feat(analysis/normed_space/operator_norm): bundle more arguments (#6140)\n* bundle the first argument of `continuous_linear_map.smul_rightL`;\n* add `continuous_linear_map.flip` and `continuous_linear_map.flipₗᵢ`;\n* use `flip` to redefine `apply`.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "apply", ["continuous_linear_map"]], ["add", "theorem", "coe_flipₗᵢ", ["continuous_linear_map"]], ["add", "def", "flip", ["continuous_linear_map"]], ["add", "theorem", "flip_add", ["continuous_linear_map"]], ["add", "theorem", "flip_flip", ["continuous_linear_map"]], ["add", "theorem", "flip_smul", ["continuous_linear_map"]], ["add", "def", "flipₗᵢ", ["continuous_linear_map"]], ["add", "theorem", "flipₗᵢ_symm", ["continuous_linear_map"]], ["add", "theorem", "op_norm_flip", ["continuous_linear_map"]], ["mod", "def", "smul_rightL", ["continuous_linear_map"]]]}]}, {"timestamp": 1612970257, "sha": "d5e2029d", "message": "refactor(linear_algebra/basic): extract definitions about pi types to a new file (#6130)\nThis makes it consistent with how the `prod` definitions are in their own file.\nWith each in its own file, it should be easier to unify the APIs between them.\nThis does not do anything other than copy across the definitions.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "diag", ["linear_map"]], ["del", "theorem", "infi_ker_proj", ["linear_map"]], ["del", "def", "infi_ker_proj_equiv", ["linear_map"]], ["del", "theorem", "ker_pi", ["linear_map"]], ["del", "def", "pi", ["linear_map"]], ["del", "theorem", "pi_apply", ["linear_map"]], ["del", "theorem", "pi_comp", ["linear_map"]], ["del", "theorem", "pi_eq_zero", ["linear_map"]], ["del", "theorem", "pi_zero", ["linear_map"]], ["del", "def", "proj", ["linear_map"]], ["del", "theorem", "proj_apply", ["linear_map"]], ["del", "theorem", "proj_pi", ["linear_map"]], ["del", "theorem", "update_apply", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/pi.lean", "changes": [["add", "def", "diag", ["linear_map"]], ["add", "theorem", "infi_ker_proj", ["linear_map"]], ["add", "def", "infi_ker_proj_equiv", ["linear_map"]], ["add", "theorem", "ker_pi", ["linear_map"]], ["add", "def", "pi", ["linear_map"]], ["add", "theorem", "pi_apply", ["linear_map"]], ["add", "theorem", "pi_comp", ["linear_map"]], ["add", "theorem", "pi_eq_zero", ["linear_map"]], ["add", "theorem", "pi_zero", ["linear_map"]], ["add", "def", "proj", ["linear_map"]], ["add", "theorem", "proj_apply", ["linear_map"]], ["add", "theorem", "proj_pi", ["linear_map"]], ["add", "theorem", "update_apply", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1612955643, "sha": "7a51c0f6", "message": "refactor(data/set/intervals/basic): simpler proof of `Iio_union_Ioo'` (#6132)\nproof term 2577 -> 1587 chars\nelaboration time 130ms -> 75ms\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}]}, {"timestamp": 1612933371, "sha": "5a2eac67", "message": "refactor(order/closure): golf `closure_inter_le` (#6138)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": []}]}, {"timestamp": 1612928244, "sha": "0731a700", "message": "chore(scripts): update nolints.txt (#6143)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612915416, "sha": "922ecb07", "message": "chore(group_theory/perm/sign): speed up sign_aux_swap_zero_one proof (#6128)", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}]}, {"timestamp": 1612915414, "sha": "18b378d8", "message": "chore(data/fin): reorder file to group declarations (#6109)\nThe `data/fin` file has a lot of definitions and lemmas. This reordering groups declarations and places ones that do not rely on `fin` operations first, like order. No definitions or lemma statements have been changed. A minimal amount of proofs have been rephrased. No reformatting of style has been done. Section titles have been added.\nThis is useful in preparation for redefining `fin` operations (lean#527). Additionally, it allows for better organization for other refactors like making `pred` and `pred_above` total.", "changes": [{"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "mk_coe", ["fin"]]]}]}, {"timestamp": 1612915412, "sha": "4c1c11ce", "message": "feat(data/equiv/mul_add): monoids/rings with one element are isomorphic (#6079)\nMonoids (resp. add_monoids, semirings) with one element are isomorphic.", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "mul_equiv_of_unique_of_unique", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "def", "ring_equiv_of_unique_of_unique", ["ring_equiv"]]]}]}, {"timestamp": 1612915410, "sha": "b34da002", "message": "feat(algebra/geom_sum): adds further variants (#6077)\nThis adds further variants for the value of `geom_series\\2`. Additionally, a docstring is provided.\nThanks to Patrick Massot for help with the reindexing of sums.", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "mul_geom_sum₂", ["commute"]], ["add", "theorem", "mul_neg_geom_sum₂", ["commute"]], ["add", "theorem", "geom_sum₂_Ico", []], ["del", "theorem", "geom_sum₂_mul_comm", []], ["add", "theorem", "geom₂_sum", []], ["add", "theorem", "mul_geom_sum₂_Ico", []], ["add", "theorem", "op_geom_series₂", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op", ["opposite", "commute"]], ["add", "theorem", "unop", ["opposite", "commute"]], ["add", "theorem", "commute_op", ["opposite"]], ["add", "theorem", "commute_unop", ["opposite"]], ["add", "theorem", "op", ["opposite", "semiconj_by"]], ["add", "theorem", "unop", ["opposite", "semiconj_by"]], ["add", "theorem", "semiconj_by_op", ["opposite"]], ["add", "theorem", "semiconj_by_unop", ["opposite"]]]}]}, {"timestamp": 1612915408, "sha": "49e50ee5", "message": "feat(measure_theory/lp_space): add more API on Lp spaces (#6042)\nFlesh out the file on `L^p` spaces, notably adding facts on the composition with Lipschitz functions. This makes it possible to define in one go the positive part of an `L^p` function, and its image under a continuous linear map.\nThe file `ae_eq_fun.lean` is split into two, to solve a temporary issue: this file defines a global emetric space instance (of `L^1` type) on the space of function classes. This passes to subtypes, and clashes with the topology on `L^p` coming from the distance. This did not show up before as there were not enough topological statements on `L^p`, but I have been bitten by this when adding new results. For now, we move this part of `ae_eq_fun.lean` to another file which is not imported by `lp_space.lean`, to avoid the clash. This will be solved in a subsequent PR in which I will remove the global instance, and construct the integral based on the specialization of `L^p` to `p = 1` instead of the ad hoc construction we have now (note that, currently, we have two different `L^1` spaces in mathlib, denoted `Lp E 1 μ` and `α →₁[μ] E` -- I will remove the second one in a later PR).", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_eq", ["nnreal"]], ["add", "theorem", "norm_eq", ["nnreal"]], ["del", "theorem", "nnnorm_coe_eq_self", ["real"]], ["del", "theorem", "norm_eq", ["real", "nnreal"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/ess_sup.lean", "newPath": "src/measure_theory/ess_sup.lean", "changes": [["mod", "theorem", "ess_sup_eq_zero_iff", ["ennreal"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "coe_fn_comp_Lp", ["continuous_linear_map"]], ["add", "def", "comp_Lp", ["continuous_linear_map"]], ["add", "def", "comp_LpL", ["continuous_linear_map"]], ["add", "def", "comp_Lpₗ", ["continuous_linear_map"]], ["add", "theorem", "norm_compLpL_le", ["continuous_linear_map"]], ["add", "theorem", "norm_comp_Lp_le", ["continuous_linear_map"]], ["add", "theorem", "fact_one_le_one_ennreal", []], ["add", "theorem", "fact_one_le_top_ennreal", []], ["add", "theorem", "fact_one_le_two_ennreal", []], ["add", "theorem", "coe_fn_comp_Lp", ["lipschitz_with"]], ["add", "def", "comp_Lp", ["lipschitz_with"]], ["add", "theorem", "comp_Lp_zero", ["lipschitz_with"]], ["add", "theorem", "continuous_comp_Lp", ["lipschitz_with"]], ["add", "theorem", "lipschitz_with_comp_Lp", ["lipschitz_with"]], ["add", "theorem", "norm_comp_Lp_le", ["lipschitz_with"]], ["add", "theorem", "norm_comp_Lp_sub_le", ["lipschitz_with"]], ["del", "theorem", "ae_measurable", ["measure_theory", "Lp"]], ["mod", "theorem", "coe_fn_add", ["measure_theory", "Lp"]], ["mod", "theorem", "coe_fn_mk", ["measure_theory", "Lp"]], ["mod", "theorem", "coe_fn_neg", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_neg_part", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_neg_part_eq_max", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_pos_part", ["measure_theory", "Lp"]], ["mod", "theorem", "coe_fn_smul", ["measure_theory", "Lp"]], ["mod", "theorem", "coe_fn_sub", ["measure_theory", "Lp"]], ["add", "theorem", "coe_mk", ["measure_theory", "Lp"]], ["add", "theorem", "coe_pos_part", ["measure_theory", "Lp"]], ["add", "theorem", "continuous_neg_part", ["measure_theory", "Lp"]], ["add", "theorem", "continuous_pos_part", ["measure_theory", "Lp"]], ["add", "theorem", "dist_def", ["measure_theory", "Lp"]], ["add", "theorem", "edist_def", ["measure_theory", "Lp"]], ["add", "theorem", "edist_to_Lp_to_Lp", ["measure_theory", "Lp"]], ["add", "theorem", "edist_to_Lp_zero", ["measure_theory", "Lp"]], ["add", "theorem", "eq_zero_iff_ae_eq_zero", ["measure_theory", "Lp"]], ["add", "theorem", "ext", ["measure_theory", "Lp"]], ["add", "theorem", "ext_iff", ["measure_theory", "Lp"]], ["add", "theorem", "lipschitz_with_pos_part", ["measure_theory", "Lp"]], ["del", "theorem", "measurable", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_iff_mem_ℒp", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_of_ae_le", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_of_ae_le_mul", ["measure_theory", "Lp"]], ["del", "theorem", "mem_ℒp", ["measure_theory", "Lp"]], ["add", "def", "neg_part", ["measure_theory", "Lp"]], ["add", "theorem", "norm_le_mul_norm_of_ae_le_mul", ["measure_theory", "Lp"]], ["add", "theorem", "norm_le_norm_of_ae_le", ["measure_theory", "Lp"]], ["add", "theorem", "norm_to_Lp", ["measure_theory", "Lp"]], ["add", "def", "pos_part", ["measure_theory", "Lp"]], ["add", "theorem", "to_Lp_coe_fn", ["measure_theory", "Lp"]], ["mod", "theorem", "ae_eq_zero_of_snorm'_eq_zero", ["measure_theory"]], ["mod", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm'", ["measure_theory"]], ["mod", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm'_lt_top", ["measure_theory"]], ["mod", "theorem", "add", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "ae_eq", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "ae_measurable", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "coe_fn_to_Lp", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "const_mul", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "const_smul", ["measure_theory", "mem_ℒp"]], ["del", "theorem", "integrable", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "neg", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "norm", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "of_le_mul", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "snorm_lt_top", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "snorm_ne_top", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "sub", ["measure_theory", "mem_ℒp"]], ["mod", "def", "to_Lp", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "to_Lp_add", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "to_Lp_const_smul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "to_Lp_eq_to_Lp_iff", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "to_Lp_neg", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "to_Lp_sub", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "to_Lp_zero", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "mem_ℒp_congr_ae", ["measure_theory"]], ["mod", "theorem", "mem_ℒp_const", ["measure_theory"]], ["del", "theorem", "mem_ℒp_one_iff_integrable", ["measure_theory"]], ["mod", "def", "snorm'", ["measure_theory"]], ["mod", "theorem", "snorm'_add_le", ["measure_theory"]], ["mod", "theorem", "snorm'_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm'_congr_norm_ae", ["measure_theory"]], ["mod", "theorem", "snorm'_const'", ["measure_theory"]], ["mod", "theorem", "snorm'_const", ["measure_theory"]], ["mod", "theorem", "snorm'_const_of_probability_measure", ["measure_theory"]], ["mod", "theorem", "snorm'_const_smul", ["measure_theory"]], ["mod", "theorem", "snorm'_eq_zero_iff", ["measure_theory"]], ["mod", "theorem", "snorm'_eq_zero_of_ae_zero'", ["measure_theory"]], ["mod", "theorem", "snorm'_eq_zero_of_ae_zero", ["measure_theory"]], ["mod", "theorem", "snorm'_le_snorm_ess_sup", ["measure_theory"]], ["mod", "theorem", "snorm'_le_snorm_ess_sup_mul_rpow_measure_univ", ["measure_theory"]], ["mod", "theorem", "snorm'_measure_zero_of_neg", ["measure_theory"]], ["mod", "theorem", "snorm'_measure_zero_of_pos", ["measure_theory"]], ["add", "theorem", "snorm'_mono_ae", ["measure_theory"]], ["mod", "theorem", "snorm'_neg", ["measure_theory"]], ["mod", "theorem", "snorm'_zero'", ["measure_theory"]], ["mod", "theorem", "snorm'_zero", ["measure_theory"]], ["mod", "def", "snorm", ["measure_theory"]], ["mod", "theorem", "snorm_add_le", ["measure_theory"]], ["mod", "theorem", "snorm_add_lt_top", ["measure_theory"]], ["mod", "theorem", "snorm_add_lt_top_of_one_le", ["measure_theory"]], ["mod", "theorem", "snorm_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm_congr_norm_ae", ["measure_theory"]], ["mod", "theorem", "snorm_const'", ["measure_theory"]], ["mod", "theorem", "snorm_const", ["measure_theory"]], ["mod", "theorem", "snorm_eq_snorm'", ["measure_theory"]], ["mod", "theorem", "snorm_eq_zero_iff", ["measure_theory"]], ["mod", "theorem", "snorm_ess_sup_eq_zero_iff", ["measure_theory"]], ["add", "theorem", "snorm_le_mul_snorm_aux_of_neg", ["measure_theory"]], ["add", "theorem", "snorm_le_mul_snorm_aux_of_nonneg", ["measure_theory"]], ["add", "theorem", "snorm_le_mul_snorm_of_ae_le_mul", ["measure_theory"]], ["mod", "theorem", "snorm_measure_zero", ["measure_theory"]], ["add", "theorem", "snorm_mono_ae", ["measure_theory"]], ["mod", "theorem", "snorm_neg", ["measure_theory"]], ["add", "theorem", "snorm_norm", ["measure_theory"]], ["mod", "theorem", "snorm_zero", ["measure_theory"]], ["mod", "theorem", "zero_mem_ℒp", ["measure_theory"]]]}]}, {"timestamp": 1612915406, "sha": "7c77279e", "message": "feat(category_theory/monad): use bundled monads everywhere (#5889)\nThis PR makes bundled monads the default (adapting definitions by @adamtopaz). The main motivation for this is that the category of algebras for a monad is currently not \"hygienic\" in that isomorphic monads don't have equivalent Eilenberg-Moore categories, but further that the notion of monad isomorphism is tricky to express, in particular this makes the definition of a monadic functor not preserved by isos either despite not explicitly having monads or algebras in the type.\nWe can now say:\n```\n@[simps]\ndef algebra_equiv_of_iso_monads {T₁ T₂ : monad C} (h : T₁ ≅ T₂) :\n algebra T₁ ≌ algebra T₂ :=\n```\nOther than this new data, virtually everything in this PR is just refactoring - in particular there's quite a bit of golfing and generalisation possible, but to keep the diff here minimal I'll do those in later PRs", "changes": [{"oldPath": "src/category_theory/adjunction/lifting.lean", "newPath": "src/category_theory/adjunction/lifting.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": [["add", "def", "to_comonad", ["category_theory", "adjunction"]], ["add", "def", "to_monad", ["category_theory", "adjunction"]], ["mod", "def", "comparison", ["category_theory", "comonad"]], ["del", "def", "comparison_forget", ["category_theory", "comonad"]], ["add", "def", "comparison_forget", ["category_theory"]], ["mod", "def", "comparison", ["category_theory", "monad"]], ["mod", "def", "comparison_forget", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["mod", "structure", "coalgebra", ["category_theory", "comonad"]], ["mod", "def", "adj", ["category_theory", "monad"]], ["mod", "structure", "algebra", ["category_theory", "monad"]], ["add", "def", "algebra_equiv_of_iso_monads", ["category_theory", "monad"]], ["add", "theorem", "algebra_equiv_of_iso_monads_comp_forget", ["category_theory", "monad"]], ["add", "def", "algebra_functor_of_monad_hom", ["category_theory", "monad"]], ["add", "def", "algebra_functor_of_monad_hom_comp", ["category_theory", "monad"]], ["add", "def", "algebra_functor_of_monad_hom_eq", ["category_theory", "monad"]], ["add", "def", "algebra_functor_of_monad_hom_id", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": [["add", "theorem", "coassoc", ["category_theory", "comonad"]], ["add", "def", "id", ["category_theory", "comonad"]], ["add", "theorem", "left_counit", ["category_theory", "comonad"]], ["add", "theorem", "right_counit", ["category_theory", "comonad"]], ["add", "def", "to_functor", ["category_theory", "comonad", "simps"]], ["add", "def", "δ'", ["category_theory", "comonad", "simps"]], ["add", "def", "ε'", ["category_theory", "comonad", "simps"]], ["add", "def", "δ", ["category_theory", "comonad"]], ["add", "def", "ε", ["category_theory", "comonad"]], ["add", "structure", "comonad", ["category_theory"]], ["del", "theorem", "assoc", ["category_theory", "comonad_hom"]], ["del", "def", "comp", ["category_theory", "comonad_hom"]], ["del", "theorem", "comp_id", ["category_theory", "comonad_hom"]], ["del", "theorem", "ext", ["category_theory", "comonad_hom"]], ["del", "def", "id", ["category_theory", "comonad_hom"]], ["del", "theorem", "id_comp", ["category_theory", "comonad_hom"]], ["add", "theorem", "id_to_nat_trans", ["category_theory", "comonad_hom"]], ["mod", "structure", "comonad_hom", ["category_theory"]], ["add", "def", "to_nat_iso", ["category_theory", "comonad_iso"]], ["add", "def", "comonad_to_functor", ["category_theory"]], ["add", "theorem", "comonad_to_functor_eq_coe", ["category_theory"]], ["add", "theorem", "comp_to_nat_trans", ["category_theory"]], ["add", "theorem", "assoc", ["category_theory", "monad"]], ["add", "def", "id", ["category_theory", "monad"]], ["add", "theorem", "left_unit", ["category_theory", "monad"]], ["add", "theorem", "right_unit", ["category_theory", "monad"]], ["add", "def", "to_functor", ["category_theory", "monad", "simps"]], ["add", "def", "η'", ["category_theory", "monad", "simps"]], ["add", "def", "μ'", ["category_theory", "monad", "simps"]], ["add", "def", "η", ["category_theory", "monad"]], ["add", "def", "μ", ["category_theory", "monad"]], ["add", "structure", "monad", ["category_theory"]], ["del", "theorem", "assoc", ["category_theory", "monad_hom"]], ["del", "def", "comp", ["category_theory", "monad_hom"]], ["del", "theorem", "comp_id", ["category_theory", "monad_hom"]], ["add", "theorem", "comp_to_nat_trans", ["category_theory", "monad_hom"]], ["del", "theorem", "ext", ["category_theory", "monad_hom"]], ["del", "def", "id", ["category_theory", "monad_hom"]], ["del", "theorem", "id_comp", ["category_theory", "monad_hom"]], ["add", "theorem", "id_to_nat_trans", ["category_theory", "monad_hom"]], ["mod", "structure", "monad_hom", ["category_theory"]], ["add", "def", "to_nat_iso", ["category_theory", "monad_iso"]], ["add", "def", "monad_to_functor", ["category_theory"]], ["add", "theorem", "monad_to_functor_eq_coe", ["category_theory"]]]}, {"oldPath": "src/category_theory/monad/bundled.lean", "newPath": "src/category_theory/monad/bundled.lean", "changes": [["del", "theorem", "coassoc_func_app", ["category_theory", "Comonad"]], ["del", "theorem", "comp_to_nat_trans", ["category_theory", "Comonad"]], ["del", "def", "forget", ["category_theory", "Comonad"]], ["del", "def", "hom", ["category_theory", "Comonad"]], ["del", "def", "terminal", ["category_theory", "Comonad"]], ["del", "structure", "Comonad", ["category_theory"]], ["del", "theorem", "assoc_func_app", ["category_theory", "Monad"]], ["del", "theorem", "comp_to_nat_trans", ["category_theory", "Monad"]], ["del", "def", "forget", ["category_theory", "Monad"]], ["del", "def", "hom", ["category_theory", "Monad"]], ["del", "def", "initial", ["category_theory", "Monad"]], ["del", "structure", "Monad", ["category_theory"]]]}, {"oldPath": "src/category_theory/monad/coequalizer.lean", "newPath": "src/category_theory/monad/coequalizer.lean", "changes": [["mod", "def", "beck_cofork", ["category_theory", "monad"]], ["mod", "def", "beck_split_coequalizer", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": [["mod", "def", "Mon_to_Monad", ["category_theory", "Monad"]], ["mod", "def", "Monad_Mon_equiv", ["category_theory", "Monad"]], ["mod", "def", "Monad_to_Mon", ["category_theory", "Monad"]], ["mod", "def", "of_Mon", ["category_theory", "Monad"]], ["mod", "def", "to_Mon", ["category_theory", "Monad"]]]}, {"oldPath": "src/category_theory/monad/kleisli.lean", "newPath": "src/category_theory/monad/kleisli.lean", "changes": [["mod", "def", "kleisli", ["category_theory"]]]}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["mod", "def", "lambda", ["category_theory", "monad", "forget_creates_colimits"]], ["mod", "def", "new_cocone", ["category_theory", "monad", "forget_creates_colimits"]], ["mod", "def", "γ", ["category_theory", "monad", "forget_creates_colimits"]], ["mod", "def", "γ", ["category_theory", "monad", "forget_creates_limits"]]]}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": [["mod", "def", "comparison_left_adjoint_hom_equiv", ["category_theory", "monad", "monadicity_internal"]], ["mod", "def", "unit_cofork", ["category_theory", "monad", "monadicity_internal"]]]}, {"oldPath": "src/category_theory/monad/products.lean", "newPath": "src/category_theory/monad/products.lean", "changes": [["add", "def", "coprod_monad", ["category_theory"]], ["add", "def", "prod_comonad", ["category_theory"]]]}, {"oldPath": "src/category_theory/monad/types.lean", "newPath": "src/category_theory/monad/types.lean", "changes": [["mod", "def", "eq", ["category_theory"]], ["add", "def", "of_type_monad", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/End.lean", "newPath": "src/category_theory/monoidal/End.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": [["add", "def", "Giry", ["Meas"]], ["mod", "def", "Integral", ["Meas"]]]}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": [["mod", "def", "incl", ["Compactum"]], ["mod", "def", "join", ["Compactum"]]]}]}, {"timestamp": 1612901820, "sha": "ba9e06ec", "message": "refactor(algebra/lie/basic): rm extraneous rewrite hypothesis (#6137)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}]}, {"timestamp": 1612901818, "sha": "456bdb73", "message": "refactor(measure_theory/measure_space): simplify proof (#6136)\n2X smaller proof term\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}]}, {"timestamp": 1612901816, "sha": "c377e68e", "message": "refactor(ring_theory/polynomial/symmetric): simplify proof (#6135)\n... of `mv_polynomial.is_symmetric.sub`\n2X smaller proof term\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1612901815, "sha": "eb2dcba5", "message": "refactor(*): remove uses of omega in the library (#6129)\nThe transition to Lean 4 will be easier if we don't have to port omega.", "changes": [{"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": []}, {"oldPath": "src/computability/regular_expressions.lean", "newPath": "src/computability/regular_expressions.lean", "changes": []}, {"oldPath": "src/data/nat/choose/sum.lean", "newPath": "src/data/nat/choose/sum.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}]}, {"timestamp": 1612901812, "sha": "296899eb", "message": "refactor(data/string/basic): simplify proof of `to_list_nonempty` (#6117)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": [["mod", "theorem", "to_list_nonempty", ["string"]]]}]}, {"timestamp": 1612901809, "sha": "d9d56eb3", "message": "feat(analysis/special_functions/trigonometric): `complex.log` is smooth away from `(-∞, 0]` (#6041)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "comp_has_strict_fderiv_at", ["has_strict_deriv_at"]], ["add", "theorem", "has_strict_deriv_at_symm", ["local_homeomorph"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "continuous_im", ["complex"]], ["mod", "theorem", "continuous_of_real", ["complex"]], ["add", "theorem", "continuous_re", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "measurable_im", ["complex"]], ["add", "theorem", "measurable_of_real", ["complex"]], ["add", "theorem", "measurable_re", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "arg_eq_pi_iff", ["complex"]], ["add", "def", "exp_local_homeomorph", ["complex"]], ["add", "theorem", "has_strict_deriv_at_log", ["complex"]], ["add", "theorem", "measurable_arg", ["complex"]], ["add", "theorem", "measurable_log", ["complex"]], ["add", "theorem", "times_cont_diff_at_log", ["complex"]], ["add", "theorem", "clog", ["continuous"]], ["add", "theorem", "clog", ["continuous_at"]], ["add", "theorem", "clog", ["continuous_on"]], ["add", "theorem", "clog", ["continuous_within_at"]], ["add", "theorem", "clog", ["differentiable"]], ["add", "theorem", "clog", ["differentiable_at"]], ["add", "theorem", "clog", ["differentiable_on"]], ["add", "theorem", "clog", ["differentiable_within_at"]], ["add", "theorem", "clog", ["filter", "tendsto"]], ["add", "theorem", "clog", ["has_deriv_at"]], ["add", "theorem", "clog", ["has_deriv_within_at"]], ["add", "theorem", "clog", ["has_fderiv_at"]], ["add", "theorem", "clog", ["has_fderiv_within_at"]], ["add", "theorem", "clog", ["has_strict_deriv_at"]], ["add", "theorem", "clog", ["has_strict_fderiv_at"]], ["add", "theorem", "carg", ["measurable"]], ["add", "theorem", "clog", ["measurable"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "of_real_def", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_im", ["complex"]], ["add", "theorem", "exp_re", ["complex"]]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "image_restrict", ["set"]], ["add", "theorem", "image_inter'", ["set", "left_inv_on"]], ["add", "theorem", "image_inter", ["set", "left_inv_on"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "const_mul", ["measurable"]], ["add", "theorem", "div", ["measurable"]], ["mod", "theorem", "mul_const", ["measurable"]], ["add", "theorem", "sub_const", ["measurable"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["mod", "def", "to_local_homeomorph", ["homeomorph"]], ["add", "def", "of_continuous_open", ["local_homeomorph"]], ["add", "def", "of_continuous_open_restrict", ["local_homeomorph"]]]}]}, {"timestamp": 1612889259, "sha": "e8f383c0", "message": "refactor(analysis/special_functions/trigonometric): simpler proof (#6133)\n... of `complex.tan_int_mul_pi`\n3X faster elaboration, 2X smaller proof term\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}]}, {"timestamp": 1612889257, "sha": "bf1465c2", "message": "refactor(data/fintype/basic): golf `card_eq_one_of_forall_eq` (#6131)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1612889254, "sha": "fdbd4bff", "message": "feat(archive/imo): formalize solution to IMO 2013 problem Q1 (#6110)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2013_q1.lean", "changes": [["add", "theorem", "arith_lemma", []], ["add", "theorem", "imo2013_q1", []], ["add", "theorem", "prod_lemma", []]]}]}, {"timestamp": 1612881684, "sha": "aa9e2b8f", "message": "feat(analysis/normed_space/operator_norm): lemmas about `E →L[𝕜] F →L[𝕜] G` (#6102)", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "le_op_norm₂", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_bound₂", ["continuous_linear_map"]], ["mod", "theorem", "norm_to_continuous_linear_map", ["linear_isometry"]], ["mod", "theorem", "norm_to_continuous_linear_map_le", ["linear_isometry"]], ["add", "theorem", "mk_continuous_norm_le'", ["linear_map"]], ["mod", "theorem", "mk_continuous_norm_le", ["linear_map"]], ["add", "def", "mk_continuous₂", ["linear_map"]], ["add", "theorem", "mk_continuous₂_apply", ["linear_map"]], ["add", "theorem", "mk_continuous₂_norm_le'", ["linear_map"]], ["add", "theorem", "mk_continuous₂_norm_le", ["linear_map"]]]}]}, {"timestamp": 1612881682, "sha": "766146b9", "message": "fix(topology/algebra/infinite_sum): remove hard-coding of ℕ and ℝ (#6096)\nIt may be possible to make these assumptions stricter, but they're weak enough to still cover the original use case.\nHopefully that can be handled by @alexjbest's upcoming linter to relax assumptions.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "update", ["has_sum"]], ["add", "theorem", "has_sum_lt", []], ["add", "theorem", "has_sum_mono", []], ["add", "theorem", "has_sum_strict_mono", []], ["add", "theorem", "update", ["summable"]], ["mod", "theorem", "tsum_lt_tsum", []], ["add", "theorem", "tsum_mono", []], ["add", "theorem", "tsum_strict_mono", []]]}]}, {"timestamp": 1612869296, "sha": "2d50cce3", "message": "refactor(geometry/euclidean): shorten proof (#6121)\n... of `eq_reflection_of_eq_subspace`\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1612869294, "sha": "aaab1139", "message": "refactor(linear_algebra/prod): split out prod and coprod defs and lemmas (#6059)\nLemmas are moved without modification.\nI expect this will take a few builds of adding missing imports.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "coe_prod", ["linear_equiv"]], ["del", "theorem", "prod_apply", ["linear_equiv"]], ["del", "theorem", "prod_symm", ["linear_equiv"]], ["del", "theorem", "skew_prod_apply", ["linear_equiv"]], ["del", "theorem", "skew_prod_symm_apply", ["linear_equiv"]], ["del", "theorem", "comap_prod_prod", ["linear_map"]], ["del", "theorem", "comp_coprod", ["linear_map"]], ["del", "def", "coprod", ["linear_map"]], ["del", "theorem", "coprod_apply", ["linear_map"]], ["del", "def", "coprod_equiv", ["linear_map"]], ["del", "theorem", "coprod_inl", ["linear_map"]], ["del", "theorem", "coprod_inl_inr", ["linear_map"]], ["del", "theorem", "coprod_inr", ["linear_map"]], ["del", "theorem", "disjoint_inl_inr", ["linear_map"]], ["del", "def", "fst", ["linear_map"]], ["del", "theorem", "fst_apply", ["linear_map"]], ["del", "theorem", "fst_eq_coprod", ["linear_map"]], ["del", "theorem", "fst_prod", ["linear_map"]], ["del", "def", "inl", ["linear_map"]], ["del", "theorem", "inl_apply", ["linear_map"]], ["del", "theorem", "inl_eq_prod", ["linear_map"]], ["del", "theorem", "inl_injective", ["linear_map"]], ["del", "def", "inr", ["linear_map"]], ["del", "theorem", "inr_apply", ["linear_map"]], ["del", "theorem", "inr_eq_prod", ["linear_map"]], ["del", "theorem", "inr_injective", ["linear_map"]], ["del", "theorem", "is_compl_range_inl_inr", ["linear_map"]], ["del", "theorem", "ker_prod", ["linear_map"]], ["del", "theorem", "map_coprod_prod", ["linear_map"]], ["del", "theorem", "pair_fst_snd", ["linear_map"]], ["del", "def", "prod", ["linear_map"]], ["del", "theorem", "prod_eq_inf_comap", ["linear_map"]], ["del", "theorem", "prod_eq_sup_map", ["linear_map"]], ["del", "def", "prod_equiv", ["linear_map"]], ["del", "def", "prod_map", ["linear_map"]], ["del", "theorem", "prod_map_apply", ["linear_map"]], ["del", "theorem", "range_coprod", ["linear_map"]], ["del", "theorem", "range_prod_eq", ["linear_map"]], ["del", "theorem", "range_prod_le", ["linear_map"]], ["del", "def", "snd", ["linear_map"]], ["del", "theorem", "snd_apply", ["linear_map"]], ["del", "theorem", "snd_eq_coprod", ["linear_map"]], ["del", "theorem", "snd_prod", ["linear_map"]], ["del", "theorem", "span_inl_union_inr", ["linear_map"]], ["del", "theorem", "sup_range_inl_inr", ["linear_map"]], ["del", "theorem", "comap_fst", ["submodule"]], ["del", "theorem", "comap_snd", ["submodule"]], ["del", "theorem", "ker_inl", ["submodule"]], ["del", "theorem", "ker_inr", ["submodule"]], ["del", "theorem", "map_inl", ["submodule"]], ["del", "theorem", "map_inr", ["submodule"]], ["del", "theorem", "prod_comap_inl", ["submodule"]], ["del", "theorem", "prod_comap_inr", ["submodule"]], ["del", "theorem", "prod_map_fst", ["submodule"]], ["del", "theorem", "prod_map_snd", ["submodule"]], ["del", "theorem", "range_fst", ["submodule"]], ["del", "theorem", "range_snd", ["submodule"]], ["del", "theorem", "sup_eq_range", ["submodule"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/prod.lean", "changes": [["add", "theorem", "coe_prod", ["linear_equiv"]], ["add", "theorem", "prod_apply", ["linear_equiv"]], ["add", "theorem", "prod_symm", ["linear_equiv"]], ["add", "theorem", "skew_prod_apply", ["linear_equiv"]], ["add", "theorem", "skew_prod_symm_apply", ["linear_equiv"]], ["add", "theorem", "comap_prod_prod", ["linear_map"]], ["add", "theorem", "comp_coprod", ["linear_map"]], ["add", "def", "coprod", ["linear_map"]], ["add", "theorem", "coprod_apply", ["linear_map"]], ["add", "def", "coprod_equiv", ["linear_map"]], ["add", "theorem", "coprod_inl", ["linear_map"]], ["add", "theorem", "coprod_inl_inr", ["linear_map"]], ["add", "theorem", "coprod_inr", ["linear_map"]], ["add", "theorem", "disjoint_inl_inr", ["linear_map"]], ["add", "def", "fst", ["linear_map"]], ["add", "theorem", "fst_apply", ["linear_map"]], ["add", "theorem", "fst_eq_coprod", ["linear_map"]], ["add", "theorem", "fst_prod", ["linear_map"]], ["add", "def", "inl", ["linear_map"]], ["add", "theorem", "inl_apply", ["linear_map"]], ["add", "theorem", "inl_eq_prod", ["linear_map"]], ["add", "theorem", "inl_injective", ["linear_map"]], ["add", "def", "inr", ["linear_map"]], ["add", "theorem", "inr_apply", ["linear_map"]], ["add", "theorem", "inr_eq_prod", ["linear_map"]], ["add", "theorem", "inr_injective", ["linear_map"]], ["add", "theorem", "is_compl_range_inl_inr", ["linear_map"]], ["add", "theorem", "ker_prod", ["linear_map"]], ["add", "theorem", "map_coprod_prod", ["linear_map"]], ["add", "theorem", "pair_fst_snd", ["linear_map"]], ["add", "def", "prod", ["linear_map"]], ["add", "theorem", "prod_eq_inf_comap", ["linear_map"]], ["add", "theorem", "prod_eq_sup_map", ["linear_map"]], ["add", "def", "prod_equiv", ["linear_map"]], ["add", "def", "prod_map", ["linear_map"]], ["add", "theorem", "prod_map_apply", ["linear_map"]], ["add", "theorem", "range_coprod", ["linear_map"]], ["add", "theorem", "range_prod_eq", ["linear_map"]], ["add", "theorem", "range_prod_le", ["linear_map"]], ["add", "def", "snd", ["linear_map"]], ["add", "theorem", "snd_apply", ["linear_map"]], ["add", "theorem", "snd_eq_coprod", ["linear_map"]], ["add", "theorem", "snd_prod", ["linear_map"]], ["add", "theorem", "span_inl_union_inr", ["linear_map"]], ["add", "theorem", "sup_range_inl_inr", ["linear_map"]], ["add", "theorem", "comap_fst", ["submodule"]], ["add", "theorem", "comap_snd", ["submodule"]], ["add", "theorem", "ker_inl", ["submodule"]], ["add", "theorem", "ker_inr", ["submodule"]], ["add", "theorem", "map_inl", ["submodule"]], ["add", "theorem", "map_inr", ["submodule"]], ["add", "theorem", "prod_comap_inl", ["submodule"]], ["add", "theorem", "prod_comap_inr", ["submodule"]], ["add", "theorem", "prod_map_fst", ["submodule"]], ["add", "theorem", "prod_map_snd", ["submodule"]], ["add", "theorem", "range_fst", ["submodule"]], ["add", "theorem", "range_snd", ["submodule"]], ["add", "theorem", "sup_eq_range", ["submodule"]]]}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}]}, {"timestamp": 1612869292, "sha": "17448c64", "message": "feat(group_theory/perm/sign): induced permutation on a subtype that is a fintype (#5706)\nIf a permutation on a type maps a subtype into itself and the subtype is a fintype, then we get a permutation on the subtype. Similar to the subtype_perm definition in the same file.", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "subtype_perm_apply", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "perm_inv_maps_to_iff_maps_to", ["equiv", "perm"]], ["add", "theorem", "perm_inv_maps_to_of_maps_to", ["equiv", "perm"]], ["add", "theorem", "perm_inv_on_of_perm_on_finset", ["equiv", "perm"]], ["add", "theorem", "perm_inv_on_of_perm_on_fintype", ["equiv", "perm"]], ["add", "def", "subtype_perm_of_fintype", ["equiv", "perm"]], ["add", "theorem", "subtype_perm_of_fintype_apply", ["equiv", "perm"]], ["add", "theorem", "subtype_perm_of_fintype_one", ["equiv", "perm"]]]}]}, {"timestamp": 1612855579, "sha": "342bccf6", "message": "refactor(group_theory/solvable): `simp` -> assumption (#6120)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": []}]}, {"timestamp": 1612855577, "sha": "ec8f2ac8", "message": "refactor(data/ordmap/ordset): simpler proof of `not_le_delta` (#6119)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}]}, {"timestamp": 1612855575, "sha": "7e5ff2f1", "message": "refactor(computability/partrec): simpler proof of `subtype_mk` (#6118)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}]}, {"timestamp": 1612855573, "sha": "183f4fce", "message": "refactor(category_theory/adjunction/mates): faster proof (#6116)\nCo-authors: `lean-gptf`, Stanislas Polu\nelaboration 750ms -> 350ms\n5X smaller proof term\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/category_theory/adjunction/mates.lean", "newPath": "src/category_theory/adjunction/mates.lean", "changes": []}]}, {"timestamp": 1612855571, "sha": "1611b30c", "message": "refactor(combinatorics/simple_graph): simplify proofs (#6115)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1612855570, "sha": "d06b11a5", "message": "refactor(algebra/lie/basic): golf `lie_algebra.morphism.map_bot_iff` (#6114)\nCo-authors: `lean-gptf`, Stanislas Polu\nThis was found by `formal-lean-wm-to-tt-m1-m2-v4-c4` when we evaluated it on theorems added to `mathlib` after we last extracted training data.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}]}, {"timestamp": 1612855566, "sha": "6b65c375", "message": "refactor(linear_algebra/tensor_product): Use a more powerful lemma for ext (#6105)\nThis means that the `ext` tactic can recurse into both the left and the right of the tensor product.\nThe downside is that `compr₂_apply, mk_apply` needs to be added to some `simp only`s.\nNotably this makes `ext` able to prove `tensor_product.ext_fourfold` (which is still needed to cut down elaboration time for the `pentagon` proof), and enables `ext` to be used on things like tensor products of a tensor_algebra and a free_algebra.", "changes": [{"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1612855564, "sha": "7b1945e9", "message": "feat(logic/basic): dite_eq_ite (#6095)\nSimplify `dite` to `ite` when possible.", "changes": [{"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "dite_eq_ite", []]]}]}, {"timestamp": 1612850326, "sha": "8fd86366", "message": "feat(field_theory/minpoly): add `minpoly.nat_degree_pos` (#6100)\nI needed this lemma and noticed that `minpoly.lean` actually uses this result more than `minpoly.degree_pos` (including in the proof of `degree_pos` itself). So I took the opportunity to golf a couple of proofs.", "changes": [{"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "degree_pos", ["minpoly"]], ["add", "theorem", "nat_degree_pos", ["minpoly"]]]}]}, {"timestamp": 1612841454, "sha": "69bf4840", "message": "chore(scripts): update nolints.txt (#6112)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612832064, "sha": "117e7290", "message": "chore(linear_algebra/basic, analysis/normed_space/operator_norm): bundle another argument into the homs (#5899)", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "apply", ["continuous_linear_map"]], ["del", "def", "applyₗ", ["continuous_linear_map"]], ["del", "theorem", "continuous_applyₗ", ["continuous_linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "applyₗ'", ["linear_map"]], ["mod", "def", "applyₗ", ["linear_map"]]]}]}, {"timestamp": 1612820501, "sha": "7f11d721", "message": "feat(analysis/normed_space): `continuous_linear_map.prod` as a `linear_isometry_equiv` (#6099)\n* add lemma `continuous_linear_map.op_norm_prod`;\n* add `continuous_linear_map.prodₗ` and `continuous_linear_map.prodₗᵢ`;\n* add `prod.topological_semimodule`;\n* drop unused `is_bounded_linear_map_prod_iso`.", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["del", "theorem", "is_bounded_linear_map_prod_iso", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_prod", ["continuous_linear_map"]], ["add", "def", "prodₗᵢ", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "prodₗ", ["continuous_linear_map"]]]}]}, {"timestamp": 1612820499, "sha": "03074b12", "message": "doc(algebra/{field_power, punit_instances}): module docs (#6097)\nAdditionally `ordered_field` is aligned with the style guidelines.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}]}, {"timestamp": 1612812623, "sha": "d62d7937", "message": "feat(differential_object/iso_app): extract the isomorphism of underlying objects (#6083)\nFrom `lean-liquid`.", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["add", "def", "iso_app", ["category_theory", "differential_object"]], ["add", "theorem", "iso_app_refl", ["category_theory", "differential_object"]], ["add", "theorem", "iso_app_symm", ["category_theory", "differential_object"]], ["add", "theorem", "iso_app_trans", ["category_theory", "differential_object"]]]}]}, {"timestamp": 1612812620, "sha": "0c6fa288", "message": "feat(linear_algebra/basis): if `(p : submodule K V) < ⊤`, then there exists `f : V →ₗ[K] K`, `p ≤ ker f` (#6074)", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "exists_extend", ["linear_map"]], ["add", "theorem", "exists_le_ker_of_lt_top", ["submodule"]]]}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "theorem", "domain_sup_span_singleton", ["linear_pmap"]], ["add", "theorem", "sup_span_singleton_apply_mk", ["linear_pmap"]]]}]}, {"timestamp": 1612812618, "sha": "4e9fbb94", "message": "feat(measure_theory/probability_mass_function): Add definitions for filtering pmfs on a predicate (#6033)", "changes": [{"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["add", "def", "filter", ["pmf"]], ["add", "theorem", "filter_apply", ["pmf"]], ["add", "theorem", "filter_apply_eq_zero_iff", ["pmf"]], ["add", "theorem", "filter_apply_eq_zero_of_not_mem", ["pmf"]], ["add", "theorem", "filter_apply_ne_zero_iff", ["pmf"]], ["add", "theorem", "mem_support_iff", ["pmf"]], ["add", "def", "normalize", ["pmf"]], ["add", "theorem", "normalize_apply", ["pmf"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "indicator_summable", ["nnreal"]], ["add", "theorem", "tsum_indicator_ne_zero", ["nnreal"]]]}]}, {"timestamp": 1612812616, "sha": "f6504f1a", "message": "feat(computability/DFA): the pumping lemma (#5925)", "changes": [{"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": [["add", "theorem", "eval_from_of_append", ["DFA"]], ["add", "theorem", "eval_from_of_pow", ["DFA"]], ["add", "theorem", "eval_from_split", ["DFA"]], ["add", "theorem", "mem_accepts", ["DFA"]], ["add", "theorem", "pumping_lemma", ["DFA"]]]}, {"oldPath": "src/computability/NFA.lean", "newPath": "src/computability/NFA.lean", "changes": [["add", "theorem", "pumping_lemma", ["NFA"]]]}]}, {"timestamp": 1612801064, "sha": "1d49f87e", "message": "chore(data/finset): golf some proofs (#6101)\n* prove that `finset.min'` and `finset.max'` are `is_least` and\n `is_greatest` elements of the corresponding sets;\n* use this fact to golf some proofs;\n generalize `min'_lt_max'` to `is_glb_lt_is_lub_of_ne`;\n* add `finset.card_le_one` and `finset.one_lt_card`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_le_one", ["finset"]], ["add", "theorem", "one_lt_card", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "is_greatest_max'", ["finset"]], ["add", "theorem", "is_least_min'", ["finset"]], ["add", "theorem", "le_min'_iff", ["finset"]], ["add", "theorem", "max'_le_iff", ["finset"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "is_glb_lt_is_lub_of_ne", []], ["add", "theorem", "le_of_is_lub_le_is_glb", []], ["add", "theorem", "subsingleton_of_is_lub_le_is_glb", ["set"]]]}]}, {"timestamp": 1612801063, "sha": "1a0f84c7", "message": "feat(linear_algebra/basic): bundle prod and coprod into linear_equivs (#5992)\nIn order to do this, this has to reorder some definitions to make the semimodule structure on linear maps available earlier.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comp_coprod", ["linear_map"]], ["mod", "theorem", "coprod_apply", ["linear_map"]], ["add", "def", "coprod_equiv", ["linear_map"]], ["mod", "theorem", "fst_eq_coprod", ["linear_map"]], ["del", "theorem", "is_linear_map_prod_iso", ["linear_map"]], ["mod", "def", "prod", ["linear_map"]], ["del", "theorem", "prod_apply", ["linear_map"]], ["add", "def", "prod_equiv", ["linear_map"]], ["mod", "theorem", "snd_eq_coprod", ["linear_map"]]]}]}, {"timestamp": 1612793750, "sha": "8a23aa3b", "message": "feat(topology/instances/{nnreal,ennreal}): add tendsto_cofinite_zero_of_summable (#6093)\nFor `f : a -> nnreal`, `summable f` implies `tendsto f cofinite (nhds 0)`.\nFor `f : a -> ennreal`, `tsum f < \\top` implies `tendsto f cofinite (nhds 0)`.\nAdd versions of these lemmas with `at_top` instead of `cofinite` when `a = N`.\nAlso add `ennreal.tendsto_at_top_zero`, a simpler statement for a particular case of `ennreal.tendsto_at_top`.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tendsto_at_top_zero", ["summable"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_at_top_zero_of_tsum_lt_top", ["ennreal"]], ["add", "theorem", "tendsto_cofinite_zero_of_tsum_lt_top", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "tendsto_at_top_zero_of_summable", ["nnreal"]], ["add", "theorem", "tendsto_cofinite_zero_of_summable", ["nnreal"]]]}]}, {"timestamp": 1612793749, "sha": "8e3e79a2", "message": "feat(category_theory/pi): extract components of isomorphisms of indexed objects (#6086)\nFrom `lean-liquid`.", "changes": [{"oldPath": "src/category_theory/pi/basic.lean", "newPath": "src/category_theory/pi/basic.lean", "changes": [["add", "def", "iso_app", ["category_theory", "pi"]], ["add", "theorem", "iso_app_refl", ["category_theory", "pi"]], ["add", "theorem", "iso_app_symm", ["category_theory", "pi"]], ["add", "theorem", "iso_app_trans", ["category_theory", "pi"]]]}]}, {"timestamp": 1612793747, "sha": "f075a698", "message": "feat(category_theory/differential_object): lifting a functor (#6084)\nFrom `lean-liquid`.", "changes": [{"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["add", "def", "map_differential_object", ["category_theory", "functor"]]]}]}, {"timestamp": 1612793744, "sha": "65616390", "message": "feat(topology/local_extr): not locally surjective at a local extr (#6076)", "changes": [{"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": [["add", "theorem", "not_nhds_le_map", ["is_local_extr_on"]], ["add", "theorem", "not_nhds_le_map", ["is_local_max_on"]], ["add", "theorem", "not_nhds_le_map", ["is_local_min_on"]]]}]}, {"timestamp": 1612793742, "sha": "054b4676", "message": "feat(analysis/calculus): derivatives of `f : E → Π i, F i` (#6075)", "changes": [{"oldPath": "src/analysis/asymptotics/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "is_O_iff_eventually", ["asymptotics"]], ["add", "theorem", "is_O_iff_eventually_is_O_with", ["asymptotics"]], ["add", "theorem", "is_O_pi", ["asymptotics"]], ["add", "theorem", "is_O_with_pi", ["asymptotics"]], ["add", "theorem", "is_o_pi", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_pi", []], ["add", "theorem", "deriv_within_pi", []], ["add", "theorem", "has_deriv_at_filter_pi", []], ["add", "theorem", "has_deriv_at_pi", []], ["add", "theorem", "has_deriv_within_at_pi", []], ["add", "theorem", "has_strict_deriv_at_pi", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "differentiable_at_pi", []], ["add", "theorem", "differentiable_on_pi", []], ["add", "theorem", "differentiable_pi", []], ["add", "theorem", "differentiable_within_at_pi", []], ["add", "theorem", "fderiv_pi", []], ["add", "theorem", "fderiv_within_pi", []], ["add", "theorem", "has_fderiv_at_filter_pi'", []], ["add", "theorem", "has_fderiv_at_filter_pi", []], ["add", "theorem", "has_fderiv_at_pi'", []], ["add", "theorem", "has_fderiv_at_pi", []], ["add", "theorem", "has_fderiv_within_at_pi'", []], ["add", "theorem", "has_fderiv_within_at_pi", []], ["add", "theorem", "has_strict_fderiv_at_pi'", []], ["add", "theorem", "has_strict_fderiv_at_pi", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_pi", ["continuous_linear_map"]], ["mod", "theorem", "pi_apply", ["continuous_linear_map"]], ["mod", "theorem", "pi_zero", ["continuous_linear_map"]]]}]}, {"timestamp": 1612793740, "sha": "dc48a849", "message": "feat(linear_algebra/pi_tensor_product): add reindex and pempty_equiv (#6069)", "changes": [{"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": [["add", "theorem", "lift_comp_reindex", ["pi_tensor_product"]], ["add", "theorem", "lift_reindex", ["pi_tensor_product"]], ["add", "theorem", "lift_symm", ["pi_tensor_product"]], ["add", "def", "pempty_equiv", ["pi_tensor_product"]], ["add", "def", "reindex", ["pi_tensor_product"]], ["add", "theorem", "reindex_comp_tprod", ["pi_tensor_product"]], ["add", "theorem", "reindex_refl", ["pi_tensor_product"]], ["add", "theorem", "reindex_symm", ["pi_tensor_product"]], ["add", "theorem", "reindex_tprod", ["pi_tensor_product"]], ["add", "theorem", "reindex_trans", ["pi_tensor_product"]]]}]}, {"timestamp": 1612779718, "sha": "d7a4f727", "message": "feat(norm_cast): dite_cast to match ite_cast (#6092)\nThere's already an `ite_cast` lemma, for pushing a cast inside an `ite`. This adds the analogous `dite_cast`.", "changes": [{"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": [["add", "theorem", "dite_cast", []]]}]}, {"timestamp": 1612779716, "sha": "b338240e", "message": "feat(topology/constructions): a finite product of discrete spaces is discrete (#6088)\nFrom `lean-liquid`.", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1612779715, "sha": "e4369fe3", "message": "chore(algebra/module/prod): add missing instances (#6055)\nThis adds the following instances for `prod`:\n* `is_scalar_tower`\n* `smul_comm_class`\n* `mul_action`\n* `distrib_mul_action`\nIt also renames the type variables to match the usual convention for modules", "changes": [{"oldPath": "src/algebra/module/prod.lean", "newPath": "src/algebra/module/prod.lean", "changes": [["mod", "theorem", "smul_fst", ["prod"]], ["mod", "theorem", "smul_mk", ["prod"]], ["mod", "theorem", "smul_snd", ["prod"]]]}]}, {"timestamp": 1612771717, "sha": "90702a04", "message": "feat(topology/continuous_map): missing coe_mk lemma (#6087)", "changes": [{"oldPath": "src/topology/continuous_map.lean", "newPath": "src/topology/continuous_map.lean", "changes": [["add", "theorem", "coe_mk", ["continuous_map"]]]}]}, {"timestamp": 1612760899, "sha": "a6fc6bdc", "message": "feat(finset/lattice): max'_insert (#6089)\nFrom `lean-liquid`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "max'_insert", ["finset"]], ["add", "theorem", "max'_subset", ["finset"]], ["add", "theorem", "min'_insert", ["finset"]], ["add", "theorem", "min'_subset", ["finset"]]]}]}, {"timestamp": 1612750610, "sha": "6b83e728", "message": "chore(scripts): update nolints.txt (#6090)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612750608, "sha": "5bf92e1d", "message": "chore(analysis/calculus/local_extr): review (#6085)\n* golf 2 proofs;\n* don't use explicit section `variables`;\n* add 2 docstrings.", "changes": [{"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": [["mod", "theorem", "exists_Ioo_extr_on_Icc", []], ["mod", "theorem", "exists_deriv_eq_zero'", []], ["mod", "theorem", "exists_deriv_eq_zero", []], ["mod", "theorem", "exists_has_deriv_at_eq_zero'", []], ["mod", "theorem", "exists_has_deriv_at_eq_zero", []], ["mod", "theorem", "exists_local_extr_Ioo", []], ["add", "theorem", "mem_pos_tangent_cone_at_of_segment_subset'", []]]}]}, {"timestamp": 1612741313, "sha": "45f95448", "message": "feat(topology/separation): an injective map on a compact space is an embedding (#6057)", "changes": [{"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "closed_embedding", ["continuous"]], ["add", "theorem", "is_closed_map", ["continuous"]]]}]}, {"timestamp": 1612741309, "sha": "9411b00e", "message": "feat(algebra/lie/basic): define the center of a Lie algebra and prove some related results (#6013)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "abelian_of_le_center", ["lie_algebra"]], ["add", "theorem", "abelian_radical_iff_solvable_is_abelian", ["lie_algebra"]], ["add", "theorem", "abelian_radical_of_semisimple", ["lie_algebra"]], ["mod", "def", "ad", ["lie_algebra"]], ["add", "def", "center", ["lie_algebra"]], ["add", "theorem", "center_eq_adjoint_kernel", ["lie_algebra"]], ["add", "theorem", "center_eq_bot_of_semisimple", ["lie_algebra"]], ["add", "theorem", "center_le_radical", ["lie_algebra"]], ["add", "theorem", "is_lie_abelian_iff_center_eq_top", ["lie_algebra"]], ["del", "theorem", "of_abelian_is_solvable", ["lie_algebra"]], ["add", "theorem", "subsingleton_of_semisimple_lie_abelian", ["lie_algebra"]], ["del", "theorem", "of_bot_eq_bot", ["lie_ideal"]], ["add", "theorem", "subsingleton_of_bot", ["lie_ideal"]], ["del", "theorem", "unique_of_bot", ["lie_ideal"]], ["add", "theorem", "is_trivial_iff_maximal_trivial_eq_top", ["lie_module"]], ["add", "def", "maximal_trivial_submodule", ["lie_module"]], ["add", "theorem", "mem_maximal_trivial_submodule", ["lie_module"]], ["del", "def", "to_endo_morphism", ["lie_module"]], ["add", "def", "to_endomorphism", ["lie_module"]], ["add", "theorem", "trivial_iff_le_maximal_trivial", ["lie_module"]], ["del", "theorem", "of_bot_eq_bot", ["lie_submodule"]], ["add", "theorem", "subsingleton_of_bot", ["lie_submodule"]], ["del", "theorem", "unique_of_bot", ["lie_submodule"]]]}]}, {"timestamp": 1612741308, "sha": "d989ff47", "message": "feat(measure_theory/lebesgue_measure): integral as volume between graphs (#5932)\nI show that the integral can compute the volume between two real-valued functions. I start with the definition `region_between`, I prove that the region between two functions is a `measurable_set`, and then I prove two integral theorems. \nHelp from @hrmacbeth and @benjamindavidson.", "changes": [{"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["add", "theorem", "measurable_set_region_between", []], ["add", "def", "region_between", []], ["add", "theorem", "region_between_subset", []], ["add", "theorem", "volume_region_between_eq_integral'", []], ["add", "theorem", "volume_region_between_eq_integral", []], ["add", "theorem", "volume_region_between_eq_lintegral'", []], ["add", "theorem", "volume_region_between_eq_lintegral", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "restrict_apply'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_eq_self_of_measurable_subset", ["measure_theory", "measure"]], ["add", "theorem", "restrict_eq_self_of_subset_of_measurable", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["add", "theorem", "restrict_prod_eq_prod_univ", ["measure_theory", "measure"]]]}]}, {"timestamp": 1612732383, "sha": "f3b0295a", "message": "chore(measure_theory): use `∞` notation for `(⊤ : ℝ≥0∞)` (#6080)", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_to_real", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "def", "ennreal_equiv_nnreal", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": [["mod", "theorem", "of_content_exists_compact", ["measure_theory", "outer_measure"]], ["mod", "theorem", "of_content_exists_open", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": [["mod", "theorem", "hahn_decomposition", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "ae_lt_top", ["measure_theory"]], ["mod", "theorem", "exists_pos_set_lintegral_lt_of_measure_lt", ["measure_theory"]], ["mod", "theorem", "exists_simple_func_forall_lintegral_sub_lt_of_pos", ["measure_theory"]], ["mod", "theorem", "lintegral_const_mul'", ["measure_theory"]], ["mod", "theorem", "lintegral_mul_const'", ["measure_theory"]], ["mod", "theorem", "iff_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "of_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "tendsto_set_lintegral_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "def", "integrable", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "smul_measure", ["measure_theory", "integrable"]], ["mod", "theorem", "integrable_const_iff", ["measure_theory"]], ["mod", "theorem", "lintegral_edist_to_fun_lt_top", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "coe_fn_mk", ["measure_theory", "Lp"]], ["mod", "theorem", "mem_Lp_iff_snorm_lt_top", ["measure_theory", "Lp"]], ["mod", "theorem", "snorm_lt_top", ["measure_theory", "Lp"]], ["mod", "theorem", "snorm_ne_top", ["measure_theory", "Lp"]], ["mod", "theorem", "snorm_lt_top", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "snorm_ne_top", ["measure_theory", "mem_ℒp"]], ["mod", "theorem", "snorm'_measure_zero_of_neg", ["measure_theory"]], ["mod", "theorem", "snorm_const'", ["measure_theory"]], ["mod", "theorem", "snorm_eq_snorm'", ["measure_theory"]], ["mod", "theorem", "snorm_exponent_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "finite_measure", ["is_compact"]], ["mod", "theorem", "compl_mem_cofinite", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply_eq_top", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply_infinite", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply_lt_top", ["measure_theory", "measure"]], ["mod", "theorem", "eventually_cofinite", ["measure_theory", "measure"]], ["mod", "def", "finite_at_filter", ["measure_theory", "measure"]], ["mod", "theorem", "finite_at_principal", ["measure_theory", "measure"]], ["mod", "theorem", "mem_cofinite", ["measure_theory", "measure"]], ["mod", "theorem", "measure_compl", ["measure_theory"]], ["mod", "theorem", "measure_lt_top", ["measure_theory"]], ["mod", "theorem", "measure_mono_top", ["measure_theory"]], ["mod", "theorem", "measure_ne_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["mod", "theorem", "top_apply", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/measure_theory/prod_group.lean", "newPath": "src/measure_theory/prod_group.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "theorem", "integrable_on_const", ["measure_theory"]], ["mod", "theorem", "norm_set_integral_le_of_norm_le_const'", ["measure_theory"]], ["mod", "theorem", "norm_set_integral_le_of_norm_le_const", ["measure_theory"]], ["mod", "theorem", "norm_set_integral_le_of_norm_le_const_ae''", ["measure_theory"]], ["mod", "theorem", "norm_set_integral_le_of_norm_le_const_ae'", ["measure_theory"]], ["mod", "theorem", "norm_set_integral_le_of_norm_le_const_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1612732380, "sha": "5d4d8158", "message": "feat(analysis): prove that a polynomial function is equivalent to its leading term along at_top, and consequences (#5354)\nThe main result is `eval_is_equivalent_at_top_eval_lead`, which states that for\nany polynomial `P` of degree `n` with leading coeff `a`, the corresponding polynomial\nfunction is equivalent to `a * x^n` as `x` goes to +∞.\nWe can then use this result to prove various limits for polynomial and rational\nfunctions, depending on the degrees and leading coeffs of the considered polynomials.", "changes": [{"oldPath": "src/analysis/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotics/asymptotic_equivalent.lean", "changes": [["add", "theorem", "add_is_o", ["asymptotics", "is_equivalent"]], ["add", "theorem", "congr_left", ["asymptotics", "is_equivalent"]], ["add", "theorem", "congr_right", ["asymptotics", "is_equivalent"]], ["add", "theorem", "neg", ["asymptotics", "is_equivalent"]], ["add", "theorem", "tendsto_at_bot", ["asymptotics", "is_equivalent"]], ["add", "theorem", "tendsto_at_bot_iff", ["asymptotics", "is_equivalent"]], ["add", "theorem", "is_equivalent", ["asymptotics", "is_o"]], ["add", "theorem", "is_equivalent", ["filter", "eventually_eq"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics/asymptotics.lean", "changes": [["add", "theorem", "tendsto_zero_of_tendsto", ["asymptotics", "is_o"]]]}, {"oldPath": null, "newPath": "src/analysis/asymptotics/specific_asymptotics.lean", "changes": [["add", "theorem", "trans_tendsto_norm_at_top", ["asymptotics", "is_O"]], ["add", "theorem", "is_o_pow_pow_at_top_of_lt", ["asymptotics"]], ["add", "theorem", "pow_div_pow_eventually_eq_at_bot", []], ["add", "theorem", "pow_div_pow_eventually_eq_at_top", []], ["add", "theorem", "tendsto_fpow_at_top_at_top", []], ["add", "theorem", "tendsto_pow_div_pow_at_top_at_top", []], ["add", "theorem", "tendsto_pow_div_pow_at_top_zero", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/ordered.lean", "newPath": "src/analysis/normed_space/ordered.lean", "changes": [["del", "theorem", "is_o_pow_pow_at_top_of_lt", []], ["del", "theorem", "tendsto_pow_div_pow_at_top_of_lt", []]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/special_functions/polynomials.lean", "changes": [["add", "theorem", "abs_tendsto_at_top", ["polynomial"]], ["add", "theorem", "div_tendsto_at_bot_of_degree_gt'", ["polynomial"]], ["add", "theorem", "div_tendsto_at_bot_of_degree_gt", ["polynomial"]], ["add", "theorem", "div_tendsto_at_top_of_degree_gt'", ["polynomial"]], ["add", "theorem", "div_tendsto_at_top_of_degree_gt", ["polynomial"]], ["add", "theorem", "div_tendsto_leading_coeff_div_of_degree_eq", ["polynomial"]], ["add", "theorem", "div_tendsto_zero_of_degree_lt", ["polynomial"]], ["add", "theorem", "eval_div_tendsto_at_top_of_degree_gt", ["polynomial"]], ["add", "theorem", "is_equivalent_at_top_div", ["polynomial"]], ["add", "theorem", "is_equivalent_at_top_lead", ["polynomial"]], ["add", "theorem", "tendsto_at_bot_of_leading_coeff_nonpos", ["polynomial"]], ["add", "theorem", "tendsto_at_top_of_leading_coeff_nonneg", ["polynomial"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_lt_degree", ["polynomial"]], ["add", "theorem", "le_nat_degree_of_coe_le_degree", ["polynomial"]], ["add", "theorem", "nat_degree_lt_nat_degree_iff", ["polynomial"]], ["add", "theorem", "ne_zero_of_coe_le_degree", ["polynomial"]], ["add", "theorem", "ne_zero_of_nat_degree_gt", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_eq_finset_sum'", ["polynomial"]], ["add", "theorem", "eval_eq_finset_sum", ["polynomial"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "tendsto_const_mul_pow_at_top", ["filter"]], ["add", "theorem", "tendsto_neg_const_mul_pow_at_top", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "div'", ["filter", "eventually_eq"]], ["add", "theorem", "sub_eq", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_eq_iff_sub", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_fpow_at_top_zero", []]]}]}, {"timestamp": 1612726543, "sha": "99fe12af", "message": "refactor(measure_theory/ae_eq_fun): move emetric to `ae_eq_fun_metric` (#6081)\nCherry-picked from #6042", "changes": [{"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["del", "theorem", "coe_fn_edist", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_add_right", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_eq_coe'", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_eq_coe", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_mk_mk'", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_mk_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_smul", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_zero_eq_coe", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": null, "newPath": "src/measure_theory/ae_eq_fun_metric.lean", "changes": [["add", "theorem", "coe_fn_edist", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_add_right", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_eq_coe'", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_eq_coe", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_mk_mk'", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_mk_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_smul", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_zero_eq_coe", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}]}, {"timestamp": 1612726541, "sha": "5a25827e", "message": "chore(measure_theory/measure_space): move definition of `measure.ae` up (#6051)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "def", "ae", ["measure_theory", "measure"]]]}]}, {"timestamp": 1612726539, "sha": "132b0fe9", "message": "fix(scripts): make lint-style.* work on macos and windows (#6047)\nMake lint-style.sh use a POSIX-portable way of checking for executable bits, and make it always open files as UTF-8.\nAlso makes CI run the sanity checks across all 3 OSes to ensure this stays working.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": "scripts/lint-style.sh", "newPath": "scripts/lint-style.sh", "changes": []}, {"oldPath": "scripts/lint_style_sanity_test.py", "newPath": "scripts/lint_style_sanity_test.py", "changes": []}]}, {"timestamp": 1612713384, "sha": "288cc2e4", "message": "feat(logic/function/basic): add lemma stating that dite of two injective functions is injective if images are disjoint (#5866)\nAdd lemma stating that dite of two injective functions is injective if their images are disjoint. Part of #5695 in order to prove Hall's Marriage Theorem.", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "dite", ["function", "injective"]]]}]}, {"timestamp": 1612704838, "sha": "c25dad98", "message": "refactor(analysis/calculus/mean_value): use `is_R_or_C` in more lemmas (#6022)\n* use `is_R_or_C` in `convex.norm_image_sub_le*` lemmas;\n* replace `strict_fderiv_of_cont_diff` with\n `has_strict_fderiv_at_of_has_fderiv_at_of_continuous_at` and\n `has_strict_deriv_at_of_has_deriv_at_of_continuous_at`, slightly change assumptions;\n* add `has_ftaylor_series_up_to_on.has_fderiv_at`,\n `has_ftaylor_series_up_to_on.eventually_has_fderiv_at`,\n `has_ftaylor_series_up_to_on.differentiable_at`;\n* add `times_cont_diff_at.has_strict_deriv_at` and\n `times_cont_diff_at.has_strict_deriv_at'`;\n* prove that `complex.exp` is strictly differentiable and is an open map;\n* add `simp` lemma `interior_mem_nhds`.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["mod", "theorem", "is_const_of_fderiv_within_eq_zero", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_norm_fderiv_le", ["convex"]], ["mod", "theorem", "lipschitz_on_with_of_norm_fderiv_within_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_le'", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_le", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_within_le'", ["convex"]], ["mod", "theorem", "norm_image_sub_le_of_norm_fderiv_within_le", ["convex"]], ["add", "theorem", "has_strict_deriv_at_of_has_deriv_at_of_continuous_at", []], ["add", "theorem", "has_strict_fderiv_at_of_has_fderiv_at_of_continuous_at", []], ["del", "theorem", "norm_image_sub_le_of_norm_has_fderiv_within_le'", ["is_R_or_C"]], ["mod", "theorem", "is_const_of_fderiv_eq_zero", []], ["del", "theorem", "strict_fderiv_of_cont_diff", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "differentiable_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "eventually_has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "has_strict_deriv_at", ["times_cont_diff"]], ["add", "theorem", "has_strict_deriv_at'", ["times_cont_diff_at"]], ["add", "theorem", "has_strict_deriv_at", ["times_cont_diff_at"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "has_strict_deriv_at_exp", ["complex"]], ["add", "theorem", "is_open_map_exp", ["complex"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "interior_mem_nhds", []]]}]}, {"timestamp": 1612680891, "sha": "8b1f3237", "message": "feat(ring_theory/polynomial): Almost Vieta's formula on products of (X + r) (#5696)\nThe main result is `prod_X_add_C_eq_sum_esymm`, which proves that a product of linear terms is equal to a linear combination of symmetric polynomials. Evaluating the variables of the symmetric polynomials gives Vieta's Formula.", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": [["add", "theorem", "prod_powerset", ["finset"]], ["add", "theorem", "sum_powerset", ["finset"]]]}, {"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["add", "theorem", "powerset_card_bUnion", ["finset"]], ["add", "theorem", "powerset_len_empty", ["finset"]], ["mod", "theorem", "powerset_len_zero", ["finset"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_X_add_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "theorem", "coeff_C_ne_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/vieta.lean", "changes": [["add", "theorem", "esymm_to_sum", ["mv_polynomial"]], ["add", "theorem", "prod_X_add_C_coeff", ["mv_polynomial"]], ["add", "theorem", "prod_X_add_C_eq_sum_esymm", ["mv_polynomial"]], ["add", "theorem", "prod_X_add_C_eval", ["mv_polynomial"]]]}]}, {"timestamp": 1612670556, "sha": "4b035fcd", "message": "refactor(analysis/normed_space): upgrade `linear_map.to_continuous_linear_map` to `linear_equiv` (#6072)\nThis way Lean will simplify, e.g., `f.to_continuous_linear_map = 0` to\n`f = 0`.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "coe_to_continuous_linear_map'", ["linear_map"]], ["add", "theorem", "coe_to_continuous_linear_map", ["linear_map"]], ["add", "theorem", "coe_to_continuous_linear_map_symm", ["linear_map"]], ["mod", "def", "to_continuous_linear_map", ["linear_map"]]]}]}, {"timestamp": 1612664057, "sha": "736929e5", "message": "chore(scripts): update nolints.txt (#6073)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612652097, "sha": "7f467fad", "message": "feat(algebra/group/hom): add inv_comp and comp_inv (#6046)\nTwo missing lemmas. Used in the Liquid Tensor Experiment.\nInversion for monoid hom is (correctly) only defined when the target is a comm_group; this explains the choice of typeclasses. I follow `inv_apply` and use `{}` rather than `[]`, but this is certainly not my area of expertise.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "comp_inv", ["monoid_hom"]], ["add", "theorem", "inv_comp", ["monoid_hom"]]]}]}, {"timestamp": 1612652096, "sha": "7c53a168", "message": "feat(algebra/ordered_ring): add lemma (#6031)\nAdd a lemma in algebra.ordered_ring proving the inequality `a + (2 + b) ≤ a * (2 + b)`.\nThis is again part of the Liouville PR.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "add_le_mul_two_add", []]]}]}, {"timestamp": 1612647085, "sha": "7ec4fcc3", "message": "feat(category_theory): connected components of a category (#5425)", "changes": [{"oldPath": null, "newPath": "src/category_theory/connected_components.lean", "changes": [["add", "def", "ι", ["category_theory", "component"]], ["add", "def", "component", ["category_theory"]], ["add", "def", "connected_components", ["category_theory"]], ["add", "def", "decomposed", ["category_theory"]], ["add", "def", "decomposed_equiv", ["category_theory"]], ["add", "def", "decomposed_to", ["category_theory"]], ["add", "def", "inclusion", ["category_theory"]], ["add", "theorem", "inclusion_comp_decomposed_to", ["category_theory"]]]}]}, {"timestamp": 1612642192, "sha": "a1ebf540", "message": "refactor(data/buffer/parser/basic): make valid a class and rename to mono (#6015)", "changes": [{"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": [["add", "theorem", "foldl_eq_fail_iff_mono_at_end", ["parser"]], ["add", "theorem", "foldr_eq_fail_iff_mono_at_end", ["parser"]], ["del", "theorem", "foldr_eq_fail_of_valid_at_end", ["parser"]], ["add", "theorem", "fix", ["parser", "mono"]], ["add", "theorem", "fix_core", ["parser", "mono"]], ["add", "theorem", "le", ["parser", "mono"]], ["add", "theorem", "of_done", ["parser", "mono"]], ["add", "theorem", "of_fail", ["parser", "mono"]], ["del", "theorem", "orelse_eq_fail_invalid_lt", ["parser"]], ["add", "theorem", "orelse_eq_fail_not_mono_lt", ["parser"]], ["add", "theorem", "orelse_eq_fail_of_mono_ne", ["parser"]], ["del", "theorem", "orelse_eq_fail_of_valid_ne", ["parser"]], ["del", "theorem", "and_then", ["parser", "valid"]], ["del", "theorem", "any_char", ["parser", "valid"]], ["del", "theorem", "bind", ["parser", "valid"]], ["del", "theorem", "ch", ["parser", "valid"]], ["del", "theorem", "char_buf", ["parser", "valid"]], ["del", "theorem", "decorate_error", ["parser", "valid"]], ["del", "theorem", "decorate_errors", ["parser", "valid"]], ["del", "theorem", "digit", ["parser", "valid"]], ["del", "theorem", "eof", ["parser", "valid"]], ["del", "theorem", "eps", ["parser", "valid"]], ["del", "theorem", "failure", ["parser", "valid"]], ["del", "theorem", "fix", ["parser", "valid"]], ["del", "theorem", "fix_core", ["parser", "valid"]], ["del", "theorem", "foldl", ["parser", "valid"]], ["del", "theorem", "foldl_core", ["parser", "valid"]], ["del", "theorem", "foldl_core_zero", ["parser", "valid"]], ["del", "theorem", "foldr", ["parser", "valid"]], ["del", "theorem", "foldr_core", ["parser", "valid"]], ["del", "theorem", "foldr_core_zero", ["parser", "valid"]], ["del", "theorem", "guard", ["parser", "valid"]], ["del", "theorem", "many'", ["parser", "valid"]], ["del", "theorem", "many1", ["parser", "valid"]], ["del", "theorem", "many", ["parser", "valid"]], ["del", "theorem", "many_char1", ["parser", "valid"]], ["del", "theorem", "many_char", ["parser", "valid"]], ["del", "theorem", "map", ["parser", "valid"]], ["del", "theorem", "mmap'", ["parser", "valid"]], ["del", "theorem", "mmap", ["parser", "valid"]], ["del", "theorem", "mono_done", ["parser", "valid"]], ["del", "theorem", "mono_fail", ["parser", "valid"]], ["del", "theorem", "nat", ["parser", "valid"]], ["del", "theorem", "one_of'", ["parser", "valid"]], ["del", "theorem", "one_of", ["parser", "valid"]], ["del", "theorem", "orelse", ["parser", "valid"]], ["del", "theorem", "pure", ["parser", "valid"]], ["del", "theorem", "remaining", ["parser", "valid"]], ["del", "theorem", "sat", ["parser", "valid"]], ["del", "theorem", "sep_by1", ["parser", "valid"]], ["del", "theorem", "sep_by", ["parser", "valid"]], ["del", "theorem", "seq", ["parser", "valid"]], ["del", "theorem", "str", ["parser", "valid"]], ["del", "def", "valid", ["parser"]]]}]}, {"timestamp": 1612623978, "sha": "dbf038d6", "message": "feat(topology/category): constructor for compact hausdorff spaces (#6068)\n`CompHaus.of` constructor. From the lean-liquid project.", "changes": [{"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": [["add", "theorem", "coe_of", ["CompHaus"]], ["add", "def", "of", ["CompHaus"]], ["mod", "def", "StoneCech_obj", []]]}]}, {"timestamp": 1612613621, "sha": "767e6ae0", "message": "refactor(topology): make two definitions irreducible from the start (#6060)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "def", "nhds", []], ["mod", "theorem", "nhds_def", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "def", "Hausdorff_edist", ["emetric"]]]}]}, {"timestamp": 1612600646, "sha": "2bdeda9c", "message": "doc(number_theory/*): provide docstrings for basic and dioph (#6063)\nThe main purpose of this PR is to provide docstrings for the two remaining files without docstring in number_theory, basic and dioph. Furthermore, lines are split in other files, so that there should be no number_theory entries in the style_exceptions file.", "changes": [{"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "theorem", "eq_of_xn_modeq'", ["pell"]]]}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": [["mod", "theorem", "is_classified_of_normalize_is_primitive_classified", ["pythagorean_triple"]]]}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}]}, {"timestamp": 1612587608, "sha": "d951b2b4", "message": "feat(data/nat): division of powers (#6067)\nA small missing lemma.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "pow_div", ["nat"]]]}]}, {"timestamp": 1612576101, "sha": "b8a6f811", "message": "chore(scripts): update nolints.txt (#6066)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612576099, "sha": "b6b90e28", "message": "fix(ring_theory/power_series/basic): fix algebra arguments (#6065)\n`power_series` is just an alias for `mv_power_series` over `unit`, yet it did not correctly inherit the algebra instance", "changes": [{"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1612576097, "sha": "94033d8e", "message": "feat(data/list/basic): simp iffs about *fix nil (#6064)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "eq_nil_iff_infix_nil", ["list"]], ["add", "theorem", "eq_nil_iff_prefix_nil", ["list"]], ["add", "theorem", "eq_nil_iff_suffix_nil", ["list"]]]}]}, {"timestamp": 1612563621, "sha": "0926e674", "message": "feat(algebra/star): star_ordered_ring (#4685)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/star/basic.lean", "newPath": "src/algebra/star/basic.lean", "changes": [["add", "theorem", "star_mul_self_nonneg", []]]}]}, {"timestamp": 1612539997, "sha": "bd38c5ff", "message": "chore(linear_algebra): move `is_basis_std_basis` to `std_basis.lean` (#6054)\nThis is a follow-up to #6020 which moved `std_basis` to a new file: now move results from `basis.lean` to that same file.\nCC @eric-wieser", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["del", "theorem", "is_basis_fun", ["pi"]], ["del", "theorem", "is_basis_fun_repr", ["pi"]], ["del", "theorem", "is_basis_fun₀", ["pi"]], ["del", "theorem", "is_basis_std_basis", ["pi"]], ["del", "theorem", "linear_independent_std_basis", ["pi"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/std_basis.lean", "newPath": "src/linear_algebra/std_basis.lean", "changes": [["add", "theorem", "is_basis_fun", ["pi"]], ["add", "theorem", "is_basis_fun_repr", ["pi"]], ["add", "theorem", "is_basis_fun₀", ["pi"]], ["add", "theorem", "is_basis_std_basis", ["pi"]], ["add", "theorem", "linear_independent_std_basis", ["pi"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1612539995, "sha": "b5c23cea", "message": "feat(data/nat/factorial): non-strict inequality on factorial (#6052)\nAdd lemmas add_factorial_le_factorial_add and add_factorial_le_factorial_add'. These are still used in the Liouville PR.\nI should have added them to the previous PR on factorials, but they got lost on the way!", "changes": [{"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["add", "theorem", "add_factorial_le_factorial_add", ["nat"]], ["del", "theorem", "add_factorial_lt_factorial_add'", ["nat"]], ["mod", "theorem", "add_factorial_lt_factorial_add", ["nat"]], ["add", "theorem", "add_factorial_succ_le_factorial_add_succ", ["nat"]], ["add", "theorem", "add_factorial_succ_lt_factorial_add_succ", ["nat"]]]}]}, {"timestamp": 1612539993, "sha": "1ab7cf67", "message": "feat(algebra/ordered_ring): proof that `a + b ≤ a * b` (#6043)\nThis is Johan's proof of the fact above. If you are curious about the assumptions, there is an extensive discussion on\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/canonically_ordered.20pathology", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "add_le_mul'", []], ["add", "theorem", "add_le_mul", []], ["add", "theorem", "add_le_mul_of_left_le_right", []], ["add", "theorem", "add_le_mul_of_right_le_left", []]]}]}, {"timestamp": 1612539991, "sha": "fa9bf621", "message": "feat(algebra/char_zero): add char_zero lemma for ordered_semirings (#6038)\nRelevant Zulip chat:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "to_char_zero", ["ordered_semiring"]]]}]}, {"timestamp": 1612539988, "sha": "c2c686e4", "message": "feat(linear_algebra/multilinear): add more `curry` equivs (#6012)\n* `multilinear_map (λ i : ι ⊕ ι', E) F` is equivalent to\n `multilinear_map (λ i : ι, E) (multilinear_map (λ i : ι', E) F)`;\n* given `s : finset (fin n)`, `s.card = k`, and `sᶜ.card = l`,\n `multilinear_map (λ i : fin n, E) F` is equivalent to\n `multilinear_map (λ i : fin k, E) (multilinear_map (λ i : fin l, E) F)`.", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "coe_curr_sum_equiv_symm", ["multilinear_map"]], ["add", "theorem", "coe_curry_sum_equiv", ["multilinear_map"]], ["add", "def", "curry_fin_finset", ["multilinear_map"]], ["add", "theorem", "curry_fin_finset_apply", ["multilinear_map"]], ["add", "theorem", "curry_fin_finset_apply_const", ["multilinear_map"]], ["add", "theorem", "curry_fin_finset_symm_apply", ["multilinear_map"]], ["add", "theorem", "curry_fin_finset_symm_apply_const", ["multilinear_map"]], ["add", "theorem", "curry_fin_finset_symm_apply_piecewise_const", ["multilinear_map"]], ["add", "def", "curry_sum", ["multilinear_map"]], ["add", "theorem", "curry_sum_apply", ["multilinear_map"]], ["add", "def", "curry_sum_equiv", ["multilinear_map"]], ["add", "def", "dom_dom_congr_linear_equiv", ["multilinear_map"]], ["add", "def", "uncurry_sum", ["multilinear_map"]], ["add", "theorem", "uncurry_sum_aux_apply", ["multilinear_map"]]]}]}, {"timestamp": 1612539986, "sha": "dc985478", "message": "feat(linear_algebra/projection): Extending maps from complement submodules to the entire module (#5981)\nGiven two linear maps from complement submodules, `of_is_comp` is the linear map extended to the entire module. \nThis is useful whenever we would like to extend a linear map from a submodule to a map on the entire module.", "changes": [{"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["add", "def", "of_is_compl", ["linear_map"]], ["add", "theorem", "of_is_compl_add", ["linear_map"]], ["add", "theorem", "of_is_compl_eq'", ["linear_map"]], ["add", "theorem", "of_is_compl_eq", ["linear_map"]], ["add", "theorem", "of_is_compl_left_apply", ["linear_map"]], ["add", "def", "of_is_compl_prod", ["linear_map"]], ["add", "theorem", "of_is_compl_prod_apply", ["linear_map"]], ["add", "def", "of_is_compl_prod_equiv", ["linear_map"]], ["add", "theorem", "of_is_compl_right_apply", ["linear_map"]], ["add", "theorem", "of_is_compl_smul", ["linear_map"]], ["add", "theorem", "of_is_compl_zero", ["linear_map"]], ["add", "theorem", "exists_unique_add_of_is_compl", ["submodule"]], ["add", "theorem", "exists_unique_add_of_is_compl_prod", ["submodule"]]]}]}, {"timestamp": 1612527095, "sha": "34e366c6", "message": "refactor(*): remove uses of @[class] def (#6028)\nPreparation for lean 4, which does not support this idiom.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "def", "irreducible", []], ["add", "theorem", "irreducible_iff", []]]}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["add", "theorem", "left_unique_forall₂'", ["list"]], ["mod", "theorem", "left_unique_forall₂", ["list"]], ["add", "theorem", "right_unique_forall₂'", ["list"]], ["mod", "theorem", "right_unique_forall₂", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "left_unique", ["option", "mem"]]]}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "left_unique", ["roption", "mem"]], ["mod", "theorem", "mem_unique", ["roption"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": [["add", "theorem", "left_unique", ["computation", "mem"]], ["mod", "theorem", "mem_unique", ["computation"]], ["del", "def", "terminates", ["computation"]], ["add", "theorem", "terminates_iff", ["computation"]], ["mod", "theorem", "terminates_of_mem", ["computation"]]]}, {"oldPath": "src/data/seq/parallel.lean", "newPath": "src/data/seq/parallel.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": [["del", "def", "is_finite", ["wseq"]], ["del", "def", "productive", ["wseq"]], ["add", "theorem", "productive_iff", ["wseq"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["del", "def", "is_alg_closure", []], ["add", "theorem", "is_alg_closure_iff", []]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["mod", "theorem", "integral", ["is_galois"]], ["del", "theorem", "normal", ["is_galois"]], ["mod", "theorem", "separable", ["is_galois"]], ["add", "theorem", "splits", ["is_galois"]], ["del", "def", "is_galois", []], ["add", "theorem", "is_galois_iff", []]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["mod", "theorem", "exists_is_splitting_field", ["normal"]], ["mod", "theorem", "is_integral", ["normal"]], ["add", "theorem", "out", ["normal"]], ["mod", "theorem", "splits", ["normal"]], ["del", "def", "normal", []], ["add", "theorem", "normal_iff", []]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "is_integral", ["is_separable"]], ["add", "theorem", "separable", ["is_separable"]], ["del", "def", "is_separable", []], ["add", "theorem", "is_separable_iff", []]]}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": [["add", "theorem", "haus", ["is_Hausdorff"]], ["del", "def", "is_Hausdorff", []], ["add", "theorem", "is_Hausdorff_iff", []], ["del", "def", "is_adic_complete", []], ["add", "theorem", "prec", ["is_precomplete"]], ["del", "def", "is_precomplete", []], ["add", "theorem", "is_precomplete_iff", []]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": [["del", "def", "bi_total", ["relator"]], ["del", "def", "bi_unique", ["relator"]], ["del", "def", "left_total", ["relator"]], ["add", "theorem", "unique", ["relator", "left_unique"]], ["del", "def", "left_unique", ["relator"]], ["mod", "theorem", "left_unique_flip", ["relator"]], ["mod", "theorem", "left_unique_of_rel_eq", ["relator"]], ["mod", "theorem", "rel_exists_of_left_total", ["relator"]], ["mod", "theorem", "rel_exists_of_total", ["relator"]], ["mod", "theorem", "rel_forall_of_right_total", ["relator"]], ["mod", "theorem", "rel_forall_of_total", ["relator"]], ["del", "def", "right_total", ["relator"]], ["add", "theorem", "unique", ["relator", "right_unique"]], ["del", "def", "right_unique", ["relator"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/ess_sup.lean", "newPath": "src/measure_theory/ess_sup.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "out", ["measure_theory", "measure", "is_complete"]], ["del", "def", "is_complete", ["measure_theory", "measure"]], ["add", "theorem", "is_complete_iff", ["measure_theory", "measure"]], ["add", "theorem", "out", ["measure_theory", "sigma_finite"]], ["del", "def", "sigma_finite", ["measure_theory"]], ["add", "theorem", "sigma_finite_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "not_mem_iff_inf_principal_compl", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "eventually_const", ["filter"]], ["mod", "theorem", "ne", ["filter", "ne_bot"]], ["del", "def", "ne_bot", ["filter"]], ["add", "theorem", "ne_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "ne_top", ["ideal", "is_maximal"]], ["del", "def", "is_maximal", ["ideal"]], ["add", "theorem", "is_maximal_def", ["ideal"]], ["add", "theorem", "ne_top", ["ideal", "is_prime"]], ["del", "def", "is_prime", ["ideal"]], ["add", "theorem", "is_prime_iff", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/prod.lean", "newPath": "src/ring_theory/ideal/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["add", "theorem", "out", ["ideal", "is_jacobson"]], ["del", "def", "is_jacobson", ["ideal"]], ["add", "theorem", "is_jacobson_iff", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["del", "def", "is_local", ["ideal"]], ["add", "theorem", "is_local_iff", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["del", "def", "is_noetherian_ring", []], ["add", "theorem", "is_noetherian_ring_iff", []]]}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/frobenius.lean", "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": [["del", "def", "is_poly", ["witt_vector"]], ["del", "def", "is_poly₂", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/mul_p.lean", "newPath": "src/ring_theory/witt_vector/mul_p.lean", "changes": []}, {"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": [["del", "def", "impartial", ["pgame"]], ["add", "def", "impartial_aux", ["pgame"]], ["add", "theorem", "impartial_aux_def", ["pgame"]], ["mod", "theorem", "impartial_def", ["pgame"]], ["add", "theorem", "impartial_iff_aux", ["pgame"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_closure_iff_nhds_ne_bot", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["del", "def", "separated_space", []], ["add", "theorem", "separated_space_iff", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1612527093, "sha": "c6c7eaf3", "message": "refactor(topology/algebra/module,analysis/*): merge some `smul` lemmas and defs (#5987)\nGeneralize some definitions and lemmas about `smul` and `f : E →L[k] F` so that now they allow scalars from an algebra over `k`. This way we can get rid of `smul_algebra` definitions and lemmas.\nIn particular, now `continuous_linear_map.smul_right` accepts functions with values in an algebra over `k`, so `smul_right 1 f` now needs a type annotation on `1`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["del", "theorem", "const_smul_algebra", ["differentiable"]], ["del", "theorem", "smul_algebra", ["differentiable"]], ["del", "theorem", "smul_algebra_const", ["differentiable"]], ["del", "theorem", "const_smul_algebra", ["differentiable_at"]], ["del", "theorem", "smul_algebra", ["differentiable_at"]], ["del", "theorem", "smul_algebra_const", ["differentiable_at"]], ["del", "theorem", "const_smul_algebra", ["differentiable_on"]], ["del", "theorem", "smul_algebra", ["differentiable_on"]], ["del", "theorem", "smul_algebra_const", ["differentiable_on"]], ["del", "theorem", "const_smul_algebra", ["differentiable_within_at"]], ["del", "theorem", "smul_algebra", ["differentiable_within_at"]], ["del", "theorem", "smul_algebra_const", ["differentiable_within_at"]], ["del", "theorem", "fderiv_const_smul_algebra", []], ["del", "theorem", "fderiv_smul_algebra", []], ["del", "theorem", "fderiv_smul_algebra_const", []], ["del", "theorem", "fderiv_within_const_smul_algebra", []], ["del", "theorem", "fderiv_within_smul_algebra", []], ["del", "theorem", "fderiv_within_smul_algebra_const", []], ["del", "theorem", "const_smul_algebra", ["has_fderiv_at"]], ["del", "theorem", "smul_algebra", ["has_fderiv_at"]], ["del", "theorem", "smul_algebra_const", ["has_fderiv_at"]], ["del", "theorem", "const_smul_algebra", ["has_fderiv_at_filter"]], ["del", "theorem", "const_smul_algebra", ["has_fderiv_within_at"]], ["del", "theorem", "smul_algebra", ["has_fderiv_within_at"]], ["del", "theorem", "smul_algebra_const", ["has_fderiv_within_at"]], ["del", "theorem", "const_smul_algebra", ["has_strict_fderiv_at"]], ["del", "theorem", "smul_algebra", ["has_strict_fderiv_at"]], ["del", "theorem", "smul_algebra_const", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "theorem", "is_bounded_bilinear_map_smul", []], ["del", "theorem", "is_bounded_bilinear_map_smul_algebra", []]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/linear_isometry.lean", "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_subtypeL'", ["submodule"]], ["add", "theorem", "coe_subtypeL", ["submodule"]], ["add", "theorem", "coe_subtypeₗᵢ", ["submodule"]], ["add", "def", "subtypeL", ["submodule"]], ["add", "def", "subtypeₗᵢ", ["submodule"]], ["add", "theorem", "subtypeₗᵢ_to_linear_map", ["submodule"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "coe_restrict_scalarsL'", ["continuous_linear_map"]], ["add", "theorem", "coe_restrict_scalarsL", ["continuous_linear_map"]], ["add", "theorem", "coe_restrict_scalars_isometry", ["continuous_linear_map"]], ["add", "theorem", "norm_restrict_scalars", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_neg", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_smul_le", ["continuous_linear_map"]], ["del", "def", "restrict_scalars", ["continuous_linear_map"]], ["add", "def", "restrict_scalarsL", ["continuous_linear_map"]], ["del", "theorem", "restrict_scalars_coe_eq_coe'", ["continuous_linear_map"]], ["del", "theorem", "restrict_scalars_coe_eq_coe", ["continuous_linear_map"]], ["add", "def", "restrict_scalars_isometry", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars_isometry_to_linear_map", ["continuous_linear_map"]], ["del", "def", "smul_algebra_right", ["continuous_linear_map"]], ["del", "theorem", "smul_algebra_right_apply", ["continuous_linear_map"]], ["mod", "theorem", "norm_to_continuous_linear_map", ["linear_isometry"]], ["add", "theorem", "norm_to_continuous_linear_map_le", ["linear_isometry"]], ["add", "theorem", "norm_subtypeL", ["submodule"]], ["add", "theorem", "norm_subtypeL_le", ["submodule"]], ["del", "def", "subtype_continuous", ["submodule"]], ["del", "theorem", "subtype_continuous_apply", ["submodule"]]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["del", "theorem", "coe_apply'", ["continuous_linear_map"]], ["del", "theorem", "coe_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_eq_id", ["continuous_linear_map"]], ["add", "theorem", "coe_inj", ["continuous_linear_map"]], ["add", "theorem", "coe_restrict_scalars'", ["continuous_linear_map"]], ["add", "theorem", "coe_restrict_scalars", ["continuous_linear_map"]], ["add", "theorem", "coe_restrict_scalarsₗ", ["continuous_linear_map"]], ["add", "theorem", "coe_smul'", ["continuous_linear_map"]], ["add", "theorem", "coe_smul", ["continuous_linear_map"]], ["add", "theorem", "coe_smul_rightₗ", ["continuous_linear_map"]], ["mod", "theorem", "comp_smul", ["continuous_linear_map"]], ["add", "theorem", "fst_comp_prod", ["continuous_linear_map"]], ["add", "theorem", "map_smul_of_tower", ["continuous_linear_map"]], ["add", "def", "restrict_scalars", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars_add", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars_neg", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars_smul", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars_zero", ["continuous_linear_map"]], ["add", "def", "restrict_scalarsₗ", ["continuous_linear_map"]], ["mod", "theorem", "smul_apply", ["continuous_linear_map"]], ["mod", "def", "smul_right", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_apply", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_one_one", ["continuous_linear_map"]], ["mod", "def", "smul_rightₗ", ["continuous_linear_map"]], ["add", "theorem", "snd_comp_prod", ["continuous_linear_map"]]]}]}, {"timestamp": 1612527092, "sha": "392ebecd", "message": "chore(algebra/algebra/basic): show that the ℚ-algebra structure is unique (#5980)\nNote that we already have similar lemmas showing that ℕ and ℤ modules are unique.\nThe name is based on `rat.algebra_rat`, which provides a canonical instance.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_rat_subsingleton", ["rat"]]]}]}, {"timestamp": 1612527089, "sha": "915bff47", "message": "feat(field_theory/polynomial_galois_group): Restriction is surjective (#5961)\nProves surjectivity of `restrict` and `restrict_dvd`.", "changes": [{"oldPath": "src/field_theory/polynomial_galois_group.lean", "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "restrict_dvd_surjective", ["polynomial", "gal"]], ["add", "theorem", "restrict_surjective", ["polynomial", "gal"]]]}]}, {"timestamp": 1612527087, "sha": "e1db9093", "message": "feat(order/filter): add lattice instance to order.ideal (#5937)\nAdd lattice instance to `order.ideal P` when the preorder `P` is\nactually a `semilattice_sup_bot` (that is, when `P` is a partial\norder with all finite suprema).", "changes": [{"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["add", "def", "inf", ["order", "ideal"]], ["add", "theorem", "mem_inf", ["order", "ideal"]], ["add", "theorem", "mem_sup", ["order", "ideal"]], ["add", "def", "sup", ["order", "ideal"]], ["add", "theorem", "sup_le", ["order", "ideal"]]]}]}, {"timestamp": 1612527085, "sha": "70269f3c", "message": "feat(order/*): introduces complemented lattices (#5747)\nDefines `is_complemented` on bounded lattices\nProves facts about complemented modular lattices\nProvides two instances of `is_complemented` on submodule lattices", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "is_atomic_iff_is_coatomic", []], ["add", "theorem", "is_atomic_of_is_coatomic_of_is_complemented_of_is_modular", []], ["add", "theorem", "is_coatomic_of_is_atomic_of_is_complemented_of_is_modular", []]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "eq_bot_of_is_compl_top", []], ["add", "theorem", "eq_bot_of_top_is_compl", []], ["add", "theorem", "eq_top_of_bot_is_compl", []], ["add", "theorem", "eq_top_of_is_compl_bot", []]]}, {"oldPath": "src/order/modular_lattice.lean", "newPath": "src/order/modular_lattice.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": [["mod", "theorem", "exists_left_inverse_of_injective", ["monoid_algebra"]], ["mod", "theorem", "exists_is_compl", ["monoid_algebra", "submodule"]], ["add", "theorem", "is_complemented", ["monoid_algebra", "submodule"]]]}]}, {"timestamp": 1612514851, "sha": "53914334", "message": "feat(algebra/group_power/basic): `pow_add_pow_le` (#6037)\nFor natural `n ≠ 0` and nonnegative `x, y` in an `ordered_semiring`, `x ^ n + y ^ n ≤ (x + y) ^ n`.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_add_pow_le", []]]}]}, {"timestamp": 1612498955, "sha": "5cb2865e", "message": "chore(scripts): update nolints.txt (#6049)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612486287, "sha": "80c7ac1c", "message": "feat(algebra/big_operators/order): add fintype.sum_mono and fintype.sum_strict_mono (#6040)", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "sum_mono", ["fintype"]], ["add", "theorem", "sum_strict_mono", ["fintype"]]]}]}, {"timestamp": 1612486285, "sha": "a101788b", "message": "fix(tactic/congr): fix trivial congr/convert (#6011)\nNow `convert` will prove reflexivity goals even at the top level, before\napplying any congruence rules. Under the interpretation of the depth\nargument as the number of nested congruence rules applied, we allow\nproofs by assumption or reflexivity to work even at depth 0.\nAlso fixes a bug where\n```lean\nexample {α} (a b : α) : a = b := by congr'\n```\nwould succeed, because `apply proof_irrel` will unify the universe\nmetavariable in the type of `α` to `Prop`, causing surprising behavior.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "archive/imo/imo2019_q4.lean", "newPath": "archive/imo/imo2019_q4.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/tactic/congr.lean", "newPath": "src/tactic/congr.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "test/congr.lean", "newPath": "test/congr.lean", "changes": []}, {"oldPath": "test/convert.lean", "newPath": "test/convert.lean", "changes": []}]}, {"timestamp": 1612486283, "sha": "59cfa02f", "message": "chore(data/quot): rename `lift_on_beta` to `lift_on_mk` (#5921)\nThis also renames some other `lift_*_beta` lemmas to match their statement.\nThe [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/quotient.20.22on_beta.22.20vs.20.22on_mk.22) was unanimously in favor of this rename.", "changes": [{"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/multiset/functor.lean", "newPath": "src/data/multiset/functor.lean", "changes": [["del", "theorem", "lift_beta", ["multiset"]], ["add", "theorem", "lift_coe", ["multiset"]]]}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "lift_mk", ["quot"]], ["add", "theorem", "lift_on_mk", ["quot"]], ["mod", "theorem", "lift_on₂_mk", ["quot"]], ["mod", "theorem", "lift₂_mk", ["quot"]], ["del", "theorem", "lift_beta", ["quotient"]], ["add", "theorem", "lift_mk", ["quotient"]], ["del", "theorem", "lift_on_beta", ["quotient"]], ["del", "theorem", "lift_on_beta₂", ["quotient"]], ["add", "theorem", "lift_on_mk", ["quotient"]], ["add", "theorem", "lift_on₂_mk", ["quotient"]]]}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/ring_theory/nullstellensatz.lean", "newPath": "src/ring_theory/nullstellensatz.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1612474418, "sha": "b9e559b7", "message": "feat(data/real/ennreal): use notation for ennreal (#6044)\nThe notation for `ennreal` is `ℝ≥0∞` and it is localized to `ennreal` (though I guess it doesn't have to be?).\nZulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Notation.20for.20ennreal", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["mod", "theorem", "change_origin_eval", ["formal_multilinear_series"]], ["mod", "theorem", "change_origin_has_sum", ["formal_multilinear_series"]], ["mod", "theorem", "change_origin_summable_aux1", ["formal_multilinear_series"]], ["mod", "theorem", "change_origin_summable_aux2", ["formal_multilinear_series"]], ["mod", "theorem", "change_origin_summable_aux3", ["formal_multilinear_series"]], ["mod", "def", "radius", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["mod", "theorem", "add_rpow_le_rpow_add", ["ennreal"]], ["mod", "theorem", "ae_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["mod", "theorem", "fun_eq_fun_mul_inv_snorm_mul_snorm", ["ennreal"]], ["mod", "def", "fun_mul_inv_snorm", ["ennreal"]], ["mod", "theorem", "fun_mul_inv_snorm_rpow", ["ennreal"]], ["mod", "theorem", "lintegral_Lp_add_le", ["ennreal"]], ["mod", "theorem", "lintegral_rpow_fun_mul_inv_snorm_eq_one", ["ennreal"]], ["mod", "theorem", "rpow_add_le_add_rpow", ["ennreal"]], ["mod", "theorem", "rpow_add_rpow_le", ["ennreal"]], ["mod", "theorem", "rpow_add_rpow_le_add", ["ennreal"]], ["mod", "theorem", "rpow_arith_mean_le_arith_mean2_rpow", ["ennreal"]], ["mod", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["ennreal"]], ["mod", "theorem", "young_inequality", ["ennreal"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "edist_eq_coe_nnnorm", []], ["mod", "theorem", "edist_eq_coe_nnnorm_sub", []], ["mod", "theorem", "mem_emetric_ball_0_iff", []], ["mod", "theorem", "of_real_norm_eq_coe_nnnorm", []], ["mod", "theorem", "ennnorm_eq_of_real", ["real"]]]}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "ennreal_rpow_const", ["ae_measurable"]], ["mod", "theorem", "div_rpow_of_nonneg", ["ennreal"]], ["mod", "theorem", "inv_rpow_of_pos", ["ennreal"]], ["mod", "theorem", "le_rpow_one_div_iff", ["ennreal"]], ["mod", "theorem", "le_rpow_self_of_one_le", ["ennreal"]], ["mod", "theorem", "lt_rpow_one_div_iff", ["ennreal"]], ["mod", "theorem", "measurable_rpow", ["ennreal"]], ["mod", "theorem", "measurable_rpow_const", ["ennreal"]], ["mod", "theorem", "mul_rpow_of_ne_top", ["ennreal"]], ["mod", "theorem", "mul_rpow_of_ne_zero", ["ennreal"]], ["mod", "theorem", "mul_rpow_of_nonneg", ["ennreal"]], ["mod", "theorem", "one_le_rpow", ["ennreal"]], ["mod", "theorem", "one_le_rpow_of_pos_of_le_one_of_neg", ["ennreal"]], ["mod", "theorem", "one_lt_rpow", ["ennreal"]], ["mod", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["ennreal"]], ["mod", "theorem", "one_rpow", ["ennreal"]], ["mod", "theorem", "rpow_add", ["ennreal"]], ["mod", "theorem", "rpow_eq_pow", ["ennreal"]], ["mod", "theorem", "rpow_eq_top_iff", ["ennreal"]], ["mod", "theorem", "rpow_eq_top_iff_of_pos", ["ennreal"]], ["mod", "theorem", "rpow_eq_top_of_nonneg", ["ennreal"]], ["mod", "theorem", "rpow_eq_zero_iff", ["ennreal"]], ["mod", "theorem", "rpow_le_one", ["ennreal"]], ["mod", "theorem", "rpow_le_one_of_one_le_of_neg", ["ennreal"]], ["mod", "theorem", "rpow_le_rpow", ["ennreal"]], ["mod", "theorem", "rpow_le_rpow_iff", ["ennreal"]], ["mod", "theorem", "rpow_le_rpow_of_exponent_ge", ["ennreal"]], ["mod", "theorem", "rpow_le_rpow_of_exponent_le", ["ennreal"]], ["mod", "theorem", "rpow_le_self_of_le_one", ["ennreal"]], ["mod", "theorem", "rpow_left_monotone_of_nonneg", ["ennreal"]], ["mod", "theorem", "rpow_left_strict_mono_of_pos", ["ennreal"]], ["mod", "theorem", "rpow_lt_one", ["ennreal"]], ["mod", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["ennreal"]], ["mod", "theorem", "rpow_lt_rpow", ["ennreal"]], ["mod", "theorem", "rpow_lt_rpow_iff", ["ennreal"]], ["mod", "theorem", "rpow_lt_rpow_of_exponent_gt", ["ennreal"]], ["mod", "theorem", "rpow_lt_rpow_of_exponent_lt", ["ennreal"]], ["mod", "theorem", "rpow_lt_top_of_nonneg", ["ennreal"]], ["mod", "theorem", "rpow_mul", ["ennreal"]], ["mod", "theorem", "rpow_nat_cast", ["ennreal"]], ["mod", "theorem", "rpow_ne_top_of_nonneg", ["ennreal"]], ["mod", "theorem", "rpow_neg", ["ennreal"]], ["mod", "theorem", "rpow_neg_one", ["ennreal"]], ["mod", "theorem", "rpow_one", ["ennreal"]], ["mod", "theorem", "rpow_pos", ["ennreal"]], ["mod", "theorem", "rpow_pos_of_nonneg", ["ennreal"]], ["mod", "theorem", "rpow_zero", ["ennreal"]], ["mod", "theorem", "to_nnreal_rpow", ["ennreal"]], ["mod", "theorem", "to_real_rpow", ["ennreal"]], ["mod", "theorem", "top_rpow_def", ["ennreal"]], ["mod", "theorem", "top_rpow_of_neg", ["ennreal"]], ["mod", "theorem", "top_rpow_of_pos", ["ennreal"]], ["mod", "theorem", "zero_rpow_def", ["ennreal"]], ["mod", "theorem", "zero_rpow_of_neg", ["ennreal"]], ["mod", "theorem", "zero_rpow_of_pos", ["ennreal"]], ["mod", "theorem", "ennreal_rpow", ["measurable"]], ["mod", "theorem", "ennreal_rpow_const", ["measurable"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["mod", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["ennreal"]], ["mod", "theorem", "tsum_geometric", ["ennreal"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "Inf_add", ["ennreal"]], ["mod", "theorem", "add_halves", ["ennreal"]], ["mod", "theorem", "add_infi", ["ennreal"]], ["mod", "theorem", "add_sub_self", ["ennreal"]], ["mod", "theorem", "bot_eq_zero", ["ennreal"]], ["mod", "theorem", "cinfi_ne_top", ["ennreal"]], ["mod", "theorem", "coe_Inf", ["ennreal"]], ["mod", "theorem", "coe_Sup", ["ennreal"]], ["mod", "theorem", "coe_add", ["ennreal"]], ["mod", "theorem", "coe_bit0", ["ennreal"]], ["mod", "theorem", "coe_bit1", ["ennreal"]], ["mod", "theorem", "coe_div", ["ennreal"]], ["mod", "theorem", "coe_eq_coe", ["ennreal"]], ["mod", "theorem", "coe_eq_one", ["ennreal"]], ["mod", "theorem", "coe_eq_zero", ["ennreal"]], ["mod", "theorem", "coe_inv", ["ennreal"]], ["mod", "theorem", "coe_inv_le", ["ennreal"]], ["mod", "theorem", "coe_inv_two", ["ennreal"]], ["mod", "theorem", "coe_le_coe", ["ennreal"]], ["mod", "theorem", "coe_le_one_iff", ["ennreal"]], ["mod", "theorem", "coe_lt_coe", ["ennreal"]], ["mod", "theorem", "coe_lt_coe_nat", ["ennreal"]], ["mod", "theorem", "coe_lt_one_iff", ["ennreal"]], ["mod", "theorem", "coe_max", ["ennreal"]], ["mod", "theorem", "coe_min", ["ennreal"]], ["mod", "theorem", "coe_mono", ["ennreal"]], ["mod", "theorem", "coe_mul", ["ennreal"]], ["mod", "theorem", "coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nat_le_coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nat_lt_coe", ["ennreal"]], ["mod", "theorem", "coe_nat_lt_coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nat_mono", ["ennreal"]], ["mod", "theorem", "coe_nat_ne_top", ["ennreal"]], ["mod", "theorem", "coe_ne_top", ["ennreal"]], ["mod", "theorem", "coe_nnreal_eq", ["ennreal"]], ["mod", "theorem", "coe_nonneg", ["ennreal"]], ["mod", "theorem", "coe_one", ["ennreal"]], ["mod", "theorem", "coe_pos", ["ennreal"]], ["mod", "theorem", "coe_pow", ["ennreal"]], ["mod", "theorem", "coe_sub", ["ennreal"]], ["mod", "theorem", "coe_to_nnreal", ["ennreal"]], ["mod", "theorem", "coe_to_nnreal_le_self", ["ennreal"]], ["mod", "theorem", "coe_to_real", ["ennreal"]], ["mod", "theorem", "coe_two", ["ennreal"]], ["mod", "theorem", "coe_zero", ["ennreal"]], ["mod", "theorem", "csupr_ne_top", ["ennreal"]], ["mod", "theorem", "div_add_div_same", ["ennreal"]], ["mod", "theorem", "div_lt_top", ["ennreal"]], ["mod", "theorem", "div_one", ["ennreal"]], ["mod", "theorem", "eq_top_of_forall_nnreal_le", ["ennreal"]], ["mod", "theorem", "exists_inv_nat_lt", ["ennreal"]], ["mod", "theorem", "exists_ne_top", ["ennreal"]], ["mod", "theorem", "forall_ennreal", ["ennreal"]], ["mod", "theorem", "forall_ne_top", ["ennreal"]], ["mod", "theorem", "half_lt_self", ["ennreal"]], ["mod", "theorem", "half_pos", ["ennreal"]], ["mod", "theorem", "infi_ennreal", ["ennreal"]], ["mod", "theorem", "infi_mul", ["ennreal"]], ["mod", "theorem", "infi_ne_top", ["ennreal"]], ["mod", "theorem", "infi_sum", ["ennreal"]], ["mod", "theorem", "inv_bijective", ["ennreal"]], ["mod", "theorem", "inv_involutive", ["ennreal"]], ["mod", "theorem", "inv_lt_top", ["ennreal"]], ["mod", "theorem", "inv_one", ["ennreal"]], ["mod", "theorem", "inv_two_add_inv_two", ["ennreal"]], ["mod", "theorem", "inv_zero", ["ennreal"]], ["mod", "theorem", "le_of_add_le_add_left", ["ennreal"]], ["mod", "theorem", "le_of_forall_nnreal_lt", ["ennreal"]], ["mod", "theorem", "le_of_forall_pos_le_add", ["ennreal"]], ["mod", "theorem", "le_of_real_iff_to_real_le", ["ennreal"]], ["mod", "theorem", "le_of_top_imp_top_of_to_nnreal_le", ["ennreal"]], ["mod", "theorem", "lt_of_real_iff_to_real_lt", ["ennreal"]], ["mod", "theorem", "mul_infi", ["ennreal"]], ["mod", "theorem", "mul_le_iff_le_inv", ["ennreal"]], ["mod", "theorem", "mul_lt_top_iff", ["ennreal"]], ["add", "theorem", "mul_self_lt_top_iff", ["ennreal"]], ["mod", "theorem", "nat_ne_top", ["ennreal"]], ["mod", "theorem", "none_eq_top", ["ennreal"]], ["mod", "theorem", "not_lt_top", ["ennreal"]], ["mod", "def", "of_nnreal_hom", ["ennreal"]], ["mod", "theorem", "of_real_le_iff_le_to_real", ["ennreal"]], ["mod", "theorem", "of_real_le_of_le_to_real", ["ennreal"]], ["mod", "theorem", "of_real_lt_iff_lt_to_real", ["ennreal"]], ["mod", "theorem", "of_real_one", ["ennreal"]], ["mod", "theorem", "of_real_to_real", ["ennreal"]], ["mod", "theorem", "of_real_to_real_le", ["ennreal"]], ["mod", "theorem", "one_eq_coe", ["ennreal"]], ["mod", "theorem", "one_half_lt_one", ["ennreal"]], ["mod", "theorem", "one_le_coe_iff", ["ennreal"]], ["mod", "theorem", "one_lt_coe_iff", ["ennreal"]], ["mod", "theorem", "one_lt_two", ["ennreal"]], ["mod", "theorem", "one_sub_inv_two", ["ennreal"]], ["mod", "theorem", "one_to_nnreal", ["ennreal"]], ["mod", "theorem", "one_to_real", ["ennreal"]], ["mod", "theorem", "prod_lt_top", ["ennreal"]], ["mod", "theorem", "some_eq_coe", ["ennreal"]], ["mod", "theorem", "sub_add_cancel_of_le", ["ennreal"]], ["mod", "theorem", "sub_le_self", ["ennreal"]], ["mod", "theorem", "sub_right_inj", ["ennreal"]], ["mod", "theorem", "sum_eq_top_iff", ["ennreal"]], ["mod", "theorem", "sum_lt_top", ["ennreal"]], ["mod", "theorem", "sum_lt_top_iff", ["ennreal"]], ["mod", "theorem", "supr_coe_nat", ["ennreal"]], ["mod", "theorem", "supr_ennreal", ["ennreal"]], ["mod", "theorem", "supr_ne_top", ["ennreal"]], ["mod", "theorem", "to_nnreal_add", ["ennreal"]], ["mod", "theorem", "to_nnreal_coe", ["ennreal"]], ["mod", "theorem", "to_nnreal_eq_zero_iff", ["ennreal"]], ["mod", "def", "to_nnreal_hom", ["ennreal"]], ["mod", "theorem", "to_nnreal_mul", ["ennreal"]], ["mod", "theorem", "to_nnreal_mul_top", ["ennreal"]], ["mod", "theorem", "to_nnreal_pow", ["ennreal"]], ["mod", "theorem", "to_nnreal_prod", ["ennreal"]], ["mod", "theorem", "to_nnreal_sum", ["ennreal"]], ["mod", "theorem", "to_nnreal_top_mul", ["ennreal"]], ["mod", "theorem", "to_real_eq_zero_iff", ["ennreal"]], ["mod", "def", "to_real_hom", ["ennreal"]], ["mod", "theorem", "to_real_le_of_le_of_real", ["ennreal"]], ["mod", "theorem", "to_real_mul_top", ["ennreal"]], ["mod", "theorem", "to_real_nonneg", ["ennreal"]], ["mod", "theorem", "to_real_of_real_mul", ["ennreal"]], ["mod", "theorem", "to_real_pow", ["ennreal"]], ["mod", "theorem", "to_real_prod", ["ennreal"]], ["mod", "theorem", "to_real_sum", ["ennreal"]], ["mod", "theorem", "to_real_top_mul", ["ennreal"]], ["mod", "theorem", "top_mem_upper_bounds", ["ennreal"]], ["mod", "theorem", "top_ne_coe", ["ennreal"]], ["mod", "theorem", "two_ne_top", ["ennreal"]], ["mod", "theorem", "two_ne_zero", ["ennreal"]], ["mod", "theorem", "zero_eq_coe", ["ennreal"]], ["mod", "theorem", "zero_lt_coe_iff", ["ennreal"]], ["mod", "theorem", "zero_lt_two", ["ennreal"]], ["mod", "theorem", "zero_to_nnreal", ["ennreal"]], ["mod", "theorem", "zero_to_real", ["ennreal"]]]}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "def", "lintegral", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "lintegral_add", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "lintegral_coe_fn", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "lintegral_eq_zero_iff", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "lintegral_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "lintegral_mono", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "lintegral_zero", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_smul_measure", ["measure_theory"]], ["mod", "theorem", "integral_to_real", ["measure_theory"]], ["mod", "theorem", "integral_eq_lintegral'", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "ennreal_mul", ["ae_measurable"]], ["mod", "theorem", "to_real", ["ae_measurable"]], ["mod", "def", "ennreal_equiv_sum", ["ennreal"]], ["mod", "theorem", "measurable_coe", ["ennreal"]], ["mod", "theorem", "measurable_div", ["ennreal"]], ["mod", "theorem", "measurable_inv", ["ennreal"]], ["mod", "theorem", "measurable_mul", ["ennreal"]], ["mod", "theorem", "measurable_of_measurable_nnreal", ["ennreal"]], ["mod", "theorem", "measurable_sub", ["ennreal"]], ["mod", "theorem", "ennreal_div", ["measurable"]], ["mod", "theorem", "ennreal_inv", ["measurable"]], ["mod", "theorem", "ennreal_mul", ["measurable"]], ["mod", "theorem", "ennreal_sub", ["measurable"]], ["mod", "theorem", "ennreal_tsum", ["measurable"]], ["mod", "theorem", "to_nnreal", ["measurable"]], ["mod", "theorem", "to_real", ["measurable"]], ["mod", "theorem", "measurable_ennnorm", []], ["mod", "def", "ennreal_equiv_nnreal", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": [["mod", "def", "inner_content", ["measure_theory"]], ["mod", "theorem", "inner_content_Sup_nat", ["measure_theory"]], ["mod", "theorem", "inner_content_Union_nat", ["measure_theory"]], ["mod", "theorem", "inner_content_comap", ["measure_theory"]], ["mod", "theorem", "inner_content_empty", ["measure_theory"]], ["mod", "theorem", "inner_content_exists_compact", ["measure_theory"]], ["mod", "theorem", "inner_content_le", ["measure_theory"]], ["mod", "theorem", "inner_content_mono'", ["measure_theory"]], ["mod", "theorem", "inner_content_mono", ["measure_theory"]], ["mod", "theorem", "inner_content_of_is_compact", ["measure_theory"]], ["mod", "theorem", "is_mul_left_invariant_inner_content", ["measure_theory"]], ["mod", "theorem", "le_inner_content", ["measure_theory"]], ["mod", "def", "of_content", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/ess_sup.lean", "newPath": "src/measure_theory/ess_sup.lean", "changes": [["mod", "theorem", "ae_le_ess_sup", ["ennreal"]], ["mod", "theorem", "ess_sup_add_le", ["ennreal"]], ["mod", "theorem", "ess_sup_const_mul", ["ennreal"]], ["mod", "theorem", "ess_sup_eq_zero_iff", ["ennreal"]]]}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": [["mod", "theorem", "lintegral_bind", ["measure_theory", "measure"]], ["mod", "theorem", "lintegral_join", ["measure_theory", "measure"]], ["mod", "theorem", "measurable_lintegral", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/group.lean", "newPath": "src/measure_theory/group.lean", "changes": [["mod", "def", "is_mul_left_invariant", ["measure_theory"]], ["mod", "def", "is_mul_right_invariant", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": [["mod", "def", "echaar", ["measure_theory", "measure", "haar"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "ennreal_induction", ["measurable"]], ["mod", "theorem", "ae_lt_top", ["measure_theory"]], ["mod", "theorem", "exists_pos_set_lintegral_lt_of_measure_lt", ["measure_theory"]], ["mod", "theorem", "exists_simple_func_forall_lintegral_sub_lt_of_pos", ["measure_theory"]], ["mod", "theorem", "le_infi2_lintegral", ["measure_theory"]], ["mod", "theorem", "le_infi_lintegral", ["measure_theory"]], ["mod", "theorem", "limsup_lintegral_le", ["measure_theory"]], ["mod", "def", "lintegral", ["measure_theory"]], ["mod", "theorem", "lintegral_Union_le", ["measure_theory"]], ["mod", "theorem", "lintegral_add'", ["measure_theory"]], ["mod", "theorem", "lintegral_add", ["measure_theory"]], ["mod", "theorem", "lintegral_add_measure", ["measure_theory"]], ["mod", "theorem", "lintegral_comp", ["measure_theory"]], ["mod", "theorem", "lintegral_congr", ["measure_theory"]], ["mod", "theorem", "lintegral_congr_ae", ["measure_theory"]], ["mod", "theorem", "lintegral_const", ["measure_theory"]], ["mod", "theorem", "lintegral_const_mul''", ["measure_theory"]], ["mod", "theorem", "lintegral_const_mul'", ["measure_theory"]], ["mod", "theorem", "lintegral_const_mul", ["measure_theory"]], ["mod", "theorem", "lintegral_const_mul_le", ["measure_theory"]], ["mod", "theorem", "lintegral_count'", ["measure_theory"]], ["mod", "theorem", "lintegral_count", ["measure_theory"]], ["mod", "theorem", "lintegral_dirac'", ["measure_theory"]], ["mod", "theorem", "lintegral_dirac", ["measure_theory"]], ["mod", "theorem", "lintegral_eq_nnreal", ["measure_theory"]], ["mod", "theorem", "lintegral_eq_supr_eapprox_lintegral", ["measure_theory"]], ["mod", "theorem", "lintegral_eq_zero_iff'", ["measure_theory"]], ["mod", "theorem", "lintegral_eq_zero_iff", ["measure_theory"]], ["mod", "theorem", "lintegral_finset_sum", ["measure_theory"]], ["mod", "theorem", "lintegral_indicator", ["measure_theory"]], ["mod", "theorem", "lintegral_liminf_le'", ["measure_theory"]], ["mod", "theorem", "lintegral_liminf_le", ["measure_theory"]], ["mod", "theorem", "lintegral_map'", ["measure_theory"]], ["mod", "theorem", "lintegral_map", ["measure_theory"]], ["mod", "theorem", "lintegral_mono'", ["measure_theory"]], ["mod", "theorem", "lintegral_mono", ["measure_theory"]], ["mod", "theorem", "lintegral_mono_ae", ["measure_theory"]], ["mod", "theorem", "lintegral_mul_const''", ["measure_theory"]], ["mod", "theorem", "lintegral_mul_const'", ["measure_theory"]], ["mod", "theorem", "lintegral_mul_const", ["measure_theory"]], ["mod", "theorem", "lintegral_mul_const_le", ["measure_theory"]], ["mod", "theorem", "lintegral_one", ["measure_theory"]], ["mod", "theorem", "lintegral_pos_iff_support", ["measure_theory"]], ["mod", "theorem", "lintegral_rw₁", ["measure_theory"]], ["mod", "theorem", "lintegral_smul_measure", ["measure_theory"]], ["mod", "theorem", "lintegral_sub", ["measure_theory"]], ["mod", "theorem", "lintegral_sum_measure", ["measure_theory"]], ["mod", "theorem", "lintegral_supr'", ["measure_theory"]], ["mod", "theorem", "lintegral_supr_ae", ["measure_theory"]], ["mod", "theorem", "lintegral_supr_directed", ["measure_theory"]], ["mod", "theorem", "lintegral_tsum", ["measure_theory"]], ["mod", "theorem", "lintegral_zero_fun", ["measure_theory"]], ["mod", "theorem", "lintegral_zero_measure", ["measure_theory"]], ["mod", "theorem", "meas_ge_le_lintegral_div", ["measure_theory"]], ["mod", "def", "with_density", ["measure_theory", "measure"]], ["mod", "theorem", "mul_meas_ge_le_lintegral", ["measure_theory"]], ["mod", "theorem", "set_lintegral_congr", ["measure_theory"]], ["mod", "theorem", "set_lintegral_const", ["measure_theory"]], ["mod", "theorem", "set_lintegral_map", ["measure_theory"]], ["mod", "theorem", "add_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "const_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "const_lintegral_restrict", ["measure_theory", "simple_func"]], ["mod", "theorem", "const_mul_lintegral", ["measure_theory", "simple_func"]], ["mod", "def", "eapprox", ["measure_theory", "simple_func"]], ["mod", "theorem", "eapprox_comp", ["measure_theory", "simple_func"]], ["mod", "def", "ennreal_rat_embed", ["measure_theory", "simple_func"]], ["mod", "theorem", "iff_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "of_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["mod", "theorem", "le_sup_lintegral", ["measure_theory", "simple_func"]], ["mod", "def", "lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_add", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_congr", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_eq_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_eq_of_measure_preimage", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_eq_of_subset", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_map", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_mono", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_restrict", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_smul", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_sum", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_zero", ["measure_theory", "simple_func"]], ["mod", "def", "lintegralₗ", ["measure_theory", "simple_func"]], ["mod", "theorem", "map_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "monotone_eapprox", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_const_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_lintegral_eq_lintegral_restrict", ["measure_theory", "simple_func"]], ["mod", "theorem", "supr_eapprox_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "zero_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "supr2_lintegral_le", ["measure_theory"]], ["mod", "theorem", "supr_lintegral_le", ["measure_theory"]], ["mod", "theorem", "tendsto_set_lintegral_zero", ["measure_theory"]], ["mod", "theorem", "with_density_apply", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "integral_smul_measure", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "smul_measure", ["measure_theory", "has_finite_integral"]], ["mod", "theorem", "smul_measure", ["measure_theory", "integrable"]], ["mod", "theorem", "norm_eq_lintegral", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["mod", "def", "lebesgue_length", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "antimono", ["measure_theory", "Lp"]], ["mod", "theorem", "mem_ℒp_of_exponent_le", ["measure_theory", "mem_ℒp"]], ["mod", "def", "mem_ℒp", ["measure_theory"]], ["mod", "def", "snorm'", ["measure_theory"]], ["mod", "def", "snorm", ["measure_theory"]], ["mod", "def", "snorm_ess_sup", ["measure_theory"]], ["mod", "theorem", "snorm_le_snorm_of_exponent_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "smul_measure", ["ae_measurable"]], ["mod", "theorem", "ae_measurable_smul_measure_iff", []], ["mod", "theorem", "ae_smul_measure", ["measure_theory"]], ["mod", "theorem", "ae_smul_measure_iff", ["measure_theory"]], ["mod", "theorem", "coe_smul", ["measure_theory", "measure"]], ["mod", "def", "comap", ["measure_theory", "measure"]], ["mod", "theorem", "le_count_apply", ["measure_theory", "measure"]], ["mod", "theorem", "le_lift_linear_apply", ["measure_theory", "measure"]], ["mod", "def", "lift_linear", ["measure_theory", "measure"]], ["mod", "theorem", "lift_linear_apply", ["measure_theory", "measure"]], ["mod", "def", "map", ["measure_theory", "measure"]], ["mod", "def", "of_measurable", ["measure_theory", "measure"]], ["mod", "theorem", "of_measurable_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_smul", ["measure_theory", "measure"]], ["mod", "def", "restrictₗ", ["measure_theory", "measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "measure"]], ["mod", "theorem", "smul_to_outer_measure", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["mod", "def", "extend", ["measure_theory"]], ["mod", "def", "Inf_gen", ["measure_theory", "outer_measure"]], ["mod", "theorem", "bounded_by_caratheodory", ["measure_theory", "outer_measure"]], ["mod", "theorem", "coe_smul", ["measure_theory", "outer_measure"]], ["mod", "def", "comap", ["measure_theory", "outer_measure"]], ["mod", "theorem", "le_smul_caratheodory", ["measure_theory", "outer_measure"]], ["mod", "def", "map", ["measure_theory", "outer_measure"]], ["mod", "theorem", "of_function_caratheodory", ["measure_theory", "outer_measure"]], ["mod", "def", "restrict", ["measure_theory", "outer_measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "outer_measure"]], ["mod", "theorem", "smul_dirac_apply", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_smul", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": [["mod", "def", "pi_premeasure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["mod", "theorem", "lintegral_prod_left'", ["measurable"]], ["mod", "theorem", "lintegral_prod_left", ["measurable"]], ["mod", "theorem", "lintegral_prod_right", ["measurable"]], ["mod", "theorem", "lintegral_lintegral", ["measure_theory"]], ["mod", "theorem", "lintegral_lintegral_swap", ["measure_theory"]], ["mod", "theorem", "lintegral_lintegral_symm", ["measure_theory"]], ["mod", "theorem", "lintegral_prod", ["measure_theory"]], ["mod", "theorem", "lintegral_prod_mul", ["measure_theory"]], ["mod", "theorem", "lintegral_prod_swap", ["measure_theory"]], ["mod", "theorem", "lintegral_prod_symm'", ["measure_theory"]], ["mod", "theorem", "lintegral_prod_symm", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/prod_group.lean", "newPath": "src/measure_theory/prod_group.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/order/filter/ennreal.lean", "newPath": "src/order/filter/ennreal.lean", "changes": [["mod", "theorem", "eventually_le_limsup", ["ennreal"]], ["mod", "theorem", "limsup_add_le", ["ennreal"]], ["mod", "theorem", "limsup_const_mul", ["ennreal"]], ["mod", "theorem", "limsup_const_mul_of_ne_top", ["ennreal"]], ["mod", "theorem", "limsup_eq_zero_iff", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "cauchy_seq_of_edist_le_of_tsum_ne_top", []], ["mod", "theorem", "continuous_of_le_add_edist", []], ["mod", "theorem", "edist_le_tsum_of_edist_le_of_tendsto", []], ["mod", "theorem", "edist_le_tsum_of_edist_le_of_tendsto₀", []], ["mod", "theorem", "edist_ne_top_of_mem_ball", []], ["mod", "theorem", "is_closed_ball", ["emetric"]], ["mod", "theorem", "Sup_add", ["ennreal"]], ["mod", "theorem", "add_supr", ["ennreal"]], ["mod", "theorem", "bsupr_add", ["ennreal"]], ["mod", "theorem", "coe_range_mem_nhds", ["ennreal"]], ["mod", "theorem", "continuous_coe", ["ennreal"]], ["mod", "theorem", "embedding_coe", ["ennreal"]], ["mod", "theorem", "finset_sum_supr_nat", ["ennreal"]], ["mod", "theorem", "has_sum_iff_tendsto_nat", ["ennreal"]], ["mod", "theorem", "infi_mul_left", ["ennreal"]], ["mod", "theorem", "infi_mul_right", ["ennreal"]], ["mod", "theorem", "is_open_ne_top", ["ennreal"]], ["mod", "theorem", "le_of_forall_lt_one_mul_le", ["ennreal"]], ["mod", "theorem", "mul_Sup", ["ennreal"]], ["mod", "theorem", "mul_supr", ["ennreal"]], ["mod", "theorem", "nhds_coe", ["ennreal"]], ["mod", "theorem", "nhds_coe_coe", ["ennreal"]], ["mod", "theorem", "nhds_within_Ioi_coe_ne_bot", ["ennreal"]], ["mod", "theorem", "nhds_within_Ioi_zero_ne_bot", ["ennreal"]], ["mod", "theorem", "nhds_zero", ["ennreal"]], ["mod", "theorem", "sub_supr", ["ennreal"]], ["mod", "theorem", "summable_to_nnreal_of_tsum_ne_top", ["ennreal"]], ["mod", "theorem", "supr_add", ["ennreal"]], ["mod", "theorem", "supr_add_supr", ["ennreal"]], ["mod", "theorem", "supr_eq_zero", ["ennreal"]], ["mod", "theorem", "supr_mul", ["ennreal"]], ["mod", "theorem", "tendsto_nhds_top", ["ennreal"]], ["mod", "theorem", "tendsto_nhds_top_iff_nat", ["ennreal"]], ["mod", "theorem", "tendsto_nhds_top_iff_nnreal", ["ennreal"]], ["mod", "theorem", "tendsto_sum_nat_add", ["ennreal"]], ["mod", "theorem", "tendsto_to_nnreal", ["ennreal"]], ["mod", "theorem", "tendsto_to_real", ["ennreal"]], ["mod", "theorem", "to_nnreal_apply_of_tsum_ne_top", ["ennreal"]], ["mod", "theorem", "tsum_sub", ["ennreal"]], ["mod", "theorem", "tsum_supr_eq", ["ennreal"]], ["mod", "def", "metric_space_emetric_ball", []], ["mod", "theorem", "nhds_eq_nhds_emetric_ball", []]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["mod", "theorem", "one_sub_K_ne_top", ["contracting_with"]], ["mod", "theorem", "one_sub_K_ne_zero", ["contracting_with"]], ["mod", "theorem", "one_sub_K_pos'", ["contracting_with"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "edist_mem_uniformity", []], ["mod", "def", "ball", ["emetric"]], ["mod", "theorem", "ball_mem_nhds", ["emetric"]], ["mod", "theorem", "ball_prod_same", ["emetric"]], ["mod", "def", "closed_ball", ["emetric"]], ["mod", "theorem", "closed_ball_prod_same", ["emetric"]], ["mod", "theorem", "complete_of_convergent_controlled_sequences", ["emetric"]], ["mod", "theorem", "diam_ball", ["emetric"]], ["mod", "theorem", "diam_closed_ball", ["emetric"]], ["mod", "theorem", "diam_le_iff_forall_edist_le", ["emetric"]], ["mod", "theorem", "diam_le_of_forall_edist_le", ["emetric"]], ["mod", "theorem", "nhds_basis_closed_eball", ["emetric"]], ["mod", "theorem", "nhds_basis_eball", ["emetric"]], ["mod", "theorem", "uniformity_basis_edist'", []], ["mod", "theorem", "uniformity_basis_edist_le'", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "def", "Hausdorff_edist", ["emetric"]], ["mod", "theorem", "Hausdorff_edist_le_of_inf_edist", ["emetric"]], ["mod", "theorem", "Hausdorff_edist_le_of_mem_edist", ["emetric"]], ["mod", "theorem", "exists_edist_lt_of_Hausdorff_edist_lt", ["emetric"]], ["mod", "theorem", "exists_edist_lt_of_inf_edist_lt", ["emetric"]], ["mod", "def", "inf_edist", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": [["mod", "theorem", "half_lt_self_bis", ["ennreal"]]]}]}, {"timestamp": 1612474416, "sha": "7734d386", "message": "refactor(data/real/basic): make ℝ a structure (#6024)\nPreparation for :four_leaf_clover:, which doesn't have irreducible.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "add_cauchy", ["real"]], ["del", "def", "comm_ring_aux", ["real"]], ["add", "def", "equiv_Cauchy", ["real"]], ["add", "theorem", "ext_cauchy", ["real"]], ["add", "theorem", "ext_cauchy_iff", ["real"]], ["add", "theorem", "inv_cauchy", ["real"]], ["add", "theorem", "lt_cauchy", ["real"]], ["mod", "def", "mk", ["real"]], ["add", "theorem", "mk_add", ["real"]], ["mod", "theorem", "mk_eq", ["real"]], ["del", "theorem", "mk_eq_mk", ["real"]], ["mod", "theorem", "mk_le_of_forall_le", ["real"]], ["mod", "theorem", "mk_lt", ["real"]], ["add", "theorem", "mk_mul", ["real"]], ["add", "theorem", "mk_neg", ["real"]], ["add", "theorem", "mk_one", ["real"]], ["add", "theorem", "mk_zero", ["real"]], ["add", "theorem", "mul_cauchy", ["real"]], ["add", "theorem", "neg_cauchy", ["real"]], ["mod", "def", "of_rat", ["real"]], ["add", "theorem", "of_rat_apply", ["real"]], ["mod", "theorem", "of_rat_lt", ["real"]], ["del", "theorem", "of_rat_sub", ["real"]], ["add", "theorem", "one_cauchy", ["real"]], ["del", "theorem", "quotient_mk_eq_mk", ["real"]], ["add", "theorem", "zero_cauchy", ["real"]], ["add", "structure", "real", []], ["del", "def", "real", []]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "cardinal_eq", ["equiv"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1612474414, "sha": "d2938225", "message": "feat(topology/algebra/infinite_sum, topology/instances/ennreal): extend tsum API (#6017)\nLemma `tsum_lt_of_nonneg` shows that if a sequence `f` with non-negative terms is dominated by a sequence `g` with summable series and at least one term of `f` is strictly smaller than the corresponding term in `g`, then the series of `f` is strictly smaller than the series of `g`.\nBesides this lemma, I also added the relevant API in topology.algebra.infinite_sum.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_congr", []], ["add", "theorem", "tsum_ite_eq_extract", []], ["add", "theorem", "tsum_lt_tsum", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tsum_lt_tsum_of_nonneg", []]]}]}, {"timestamp": 1612474412, "sha": "1ee00c89", "message": "feat(number_theory/bernoulli): Results regarding Bernoulli numbers as a generating function (#5957)\nWe prove that the Bernoulli numbers are generating functions for t/(e^t - 1). Most of the results are proved by @kbuzzard.", "changes": [{"oldPath": "src/algebra/big_operators/nat_antidiagonal.lean", "newPath": "src/algebra/big_operators/nat_antidiagonal.lean", "changes": [["add", "theorem", "prod_antidiagonal_eq_prod_range_succ_mk", ["finset", "nat"]]]}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "theorem", "add_choose", ["nat"]], ["add", "theorem", "factorial_mul_factorial_dvd_factorial_add", ["nat"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": [["add", "theorem", "bernoulli_power_series", []], ["add", "theorem", "bernoulli_spec'", []], ["add", "theorem", "bernoulli_spec", []]]}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["add", "theorem", "constant_coeff_exp", ["power_series"]]]}]}, {"timestamp": 1612461839, "sha": "49cf0be5", "message": "refactor(real): protect real.pi (#6039)\nCurrently, `real.pi` is not protected. This can conflict with `set.pi`. Since it is most often used as `π` through the `real` locale, let's protect it.", "changes": [{"oldPath": "src/analysis/complex/roots_of_unity.lean", "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": [["mod", "theorem", "is_primitive_root_exp", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "cos_pi_div_eight", ["real"]], ["mod", "theorem", "cos_pi_div_four", ["real"]], ["mod", "theorem", "cos_pi_div_sixteen", ["real"]], ["mod", "theorem", "cos_pi_div_thirty_two", ["real"]], ["mod", "theorem", "cos_pi_over_two_pow", ["real"]], ["mod", "theorem", "sin_pi_div_eight", ["real"]], ["mod", "theorem", "sin_pi_div_four", ["real"]], ["mod", "theorem", "sin_pi_div_sixteen", ["real"]], ["mod", "theorem", "sin_pi_div_thirty_two", ["real"]]]}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": [["mod", "theorem", "pi_gt_3141592", ["real"]], ["mod", "theorem", "pi_gt_31415", ["real"]], ["mod", "theorem", "pi_gt_314", ["real"]], ["mod", "theorem", "pi_gt_sqrt_two_add_series", ["real"]], ["mod", "theorem", "pi_gt_three", ["real"]], ["mod", "theorem", "pi_lt_3141593", ["real"]], ["mod", "theorem", "pi_lt_31416", ["real"]], ["mod", "theorem", "pi_lt_315", ["real"]]]}]}, {"timestamp": 1612461838, "sha": "1a7fb7e4", "message": "feat(data/list/sort): add sorted.rel_of_mem_take_of_mem_drop (#6027)\nAlso renames the existing lemmas to enable dot notation", "changes": [{"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["del", "theorem", "nth_le_of_sorted_of_le", ["list"]], ["add", "theorem", "rel_nth_le_of_le", ["list", "sorted"]], ["add", "theorem", "rel_nth_le_of_lt", ["list", "sorted"]], ["add", "theorem", "rel_of_mem_take_of_mem_drop", ["list", "sorted"]]]}]}, {"timestamp": 1612461836, "sha": "b98b5f6b", "message": "chore(data/dfinsupp): add simp lemmas about sum_add_hom, remove commutativity requirement (#5939)\nNote that `dfinsupp.sum_add_hom` and `dfinsupp.sum` are not defeq, so its valuable to repeat these lemmas.\nThe former is often easier to work with because there are no decidability requirements to juggle on equality with zero.\n`dfinsupp.single_eq_of_sigma_eq` was a handy lemma for constructing a term-mode proof of `dfinsupp.single` equality.\nA lot of the lemmas about `lift_add_hom` have to be repeated for `sum_add_hom` because the former simplifies to the latter before its lemmas get a chance to apply. At least the proofs can be reused.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "coe_dfinsupp_sum_add_hom", ["add_monoid_hom"]], ["add", "theorem", "dfinsupp_sum_add_hom_apply", ["add_monoid_hom"]], ["add", "theorem", "map_dfinsupp_sum_add_hom", ["add_monoid_hom"]], ["mod", "theorem", "comp_lift_add_hom", ["dfinsupp"]], ["add", "theorem", "comp_sum_add_hom", ["dfinsupp"]], ["mod", "theorem", "lift_add_hom_apply_single", ["dfinsupp"]], ["mod", "theorem", "lift_add_hom_comp_single", ["dfinsupp"]], ["add", "theorem", "single_eq_of_sigma_eq", ["dfinsupp"]], ["add", "theorem", "sum_add_hom_add", ["dfinsupp"]], ["add", "theorem", "sum_add_hom_comm", ["dfinsupp"]], ["mod", "theorem", "sum_add_hom_comp_single", ["dfinsupp"]], ["add", "theorem", "sum_add_hom_single_add_hom", ["dfinsupp"]], ["add", "theorem", "sum_add_hom_zero", ["dfinsupp"]], ["mod", "theorem", "sum_sub_index", ["dfinsupp"]]]}]}, {"timestamp": 1612461834, "sha": "6d153f1b", "message": "feat(data/equiv/basic): perm.subtype_congr (#5875)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "apply", ["equiv", "perm", "subtype_congr"]], ["add", "theorem", "left_apply", ["equiv", "perm", "subtype_congr"]], ["add", "theorem", "left_apply_subtype", ["equiv", "perm", "subtype_congr"]], ["add", "theorem", "refl", ["equiv", "perm", "subtype_congr"]], ["add", "theorem", "right_apply", ["equiv", "perm", "subtype_congr"]], ["add", "theorem", "right_apply_subtype", ["equiv", "perm", "subtype_congr"]], ["add", "theorem", "symm", ["equiv", "perm", "subtype_congr"]], ["add", "theorem", "trans", ["equiv", "perm", "subtype_congr"]], ["add", "def", "subtype_congr", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "def", "subtype_congr_hom", ["equiv", "perm"]], ["add", "theorem", "subtype_congr_hom_injective", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "sign_subtype_congr", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": [["add", "theorem", "card_range", ["equiv", "perm", "subtype_congr_hom"]]]}]}, {"timestamp": 1612461831, "sha": "bbf97744", "message": "feat(data/fintype/basic): inv of inj on deceq (#5872)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "inv_fun_restrict", ["function", "embedding"]], ["add", "def", "inv_of_mem_range", ["function", "embedding"]], ["add", "theorem", "inv_of_mem_range_surjective", ["function", "embedding"]], ["add", "theorem", "left_inv_of_inv_of_mem_range", ["function", "embedding"]], ["add", "theorem", "right_inv_of_inv_of_mem_range", ["function", "embedding"]], ["add", "theorem", "inv_fun_restrict", ["function", "injective"]], ["add", "def", "inv_of_mem_range", ["function", "injective"]], ["add", "theorem", "inv_of_mem_range_surjective", ["function", "injective"]], ["add", "theorem", "left_inv_of_inv_of_mem_range", ["function", "injective"]], ["add", "theorem", "right_inv_of_inv_of_mem_range", ["function", "injective"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "exists_unique_of_mem_range", ["function", "injective"]], ["add", "theorem", "mem_range_iff_exists_unique", ["function", "injective"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}]}, {"timestamp": 1612461829, "sha": "9993a504", "message": "feat(tactic/norm_swap): simplify numeral swaps (#5637)\nExplicitly applied swap equalities over `nat` can be proven to be true using `dec_trivial`. However, if occurring in the middle of a larger expression, a separate specialized hypothesis would be necessary to reduce them down. This is an initial attempt at a `norm_num` extension which seeks to reduce down expressions of the `swap X Y Z` form. Handles `nat`, `int`, `rat`, and `fin` swaps.", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/norm_swap.lean", "changes": []}, {"oldPath": null, "newPath": "test/norm_swap.lean", "changes": []}]}, {"timestamp": 1612448892, "sha": "4d26028e", "message": "chore(order/basic): add a lemma expanding `le` on pi types (#6023)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "lt_def", ["pi"]], ["add", "theorem", "update_le_update_iff", []]]}]}, {"timestamp": 1612448890, "sha": "e61db52e", "message": "chore(linear_algebra/quadratic_form): add polar_self, polar_zero_left, and polar_zero_right simp lemmas (#6003)\nThis also reorders the existing lemmas to keep the polar ones separate from the non-polar ones", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "polar_self", ["quadratic_form"]], ["add", "theorem", "polar_zero_left", ["quadratic_form"]], ["add", "theorem", "polar_zero_right", ["quadratic_form"]]]}]}, {"timestamp": 1612440337, "sha": "1a2eb0b5", "message": "feat(analysis/special_functions/trigonometric): add mistakenly omitted lemma (#6036)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "arcsin_eq_arctan", ["real"]]]}]}, {"timestamp": 1612440335, "sha": "16be8e39", "message": "refactor(analysis/normed_space): simpler proof of `norm_sub_pow_two` (#6035)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}]}, {"timestamp": 1612440334, "sha": "894ff7ad", "message": "doc(number_theory/{pell, sum_of_four_squares}): docstring to pell (#6030)\nand additionally fixing the syntax for the docstring of sum_of_four_squares.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1612440332, "sha": "0aed8b1e", "message": "refactor(analysis/asymptotics): make definitions immediately irreducible (#6021)", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["mod", "theorem", "add", ["asymptotics", "is_O"]], ["add", "theorem", "bound", ["asymptotics", "is_O"]], ["add", "theorem", "is_O_with", ["asymptotics", "is_O"]], ["mod", "theorem", "is_O_top", ["asymptotics"]], ["mod", "theorem", "is_O", ["asymptotics", "is_O_with"]], ["del", "theorem", "of_bound", ["asymptotics", "is_O_with"]], ["mod", "theorem", "is_O_with_bot", ["asymptotics"]], ["mod", "theorem", "is_O_with_top", ["asymptotics"]], ["mod", "theorem", "is_O_zero", ["asymptotics"]], ["mod", "theorem", "is_O_with", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_bot", ["asymptotics"]]]}]}, {"timestamp": 1612440330, "sha": "97781b9a", "message": "chore(linear_algebra/std_basis): move std_basis to a new file (#6020)\nlinear_algebra/basic is _very_ long. This reduces its length by about 5%.\nAuthorship of the std_basis stuff seems to come almost entirely from 10a586b1d82098af32e13c8d8448696022132f17.\nNone of the lemmas have changed, and the variables are kept in exactly the same order as before.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "disjoint_std_basis_std_basis", ["linear_map"]], ["del", "theorem", "infi_ker_proj_le_supr_range_std_basis", ["linear_map"]], ["del", "theorem", "ker_std_basis", ["linear_map"]], ["del", "theorem", "proj_comp_std_basis", ["linear_map"]], ["del", "theorem", "proj_std_basis_ne", ["linear_map"]], ["del", "theorem", "proj_std_basis_same", ["linear_map"]], ["del", "def", "std_basis", ["linear_map"]], ["del", "theorem", "std_basis_apply", ["linear_map"]], ["del", "theorem", "std_basis_eq_single", ["linear_map"]], ["del", "theorem", "std_basis_ne", ["linear_map"]], ["del", "theorem", "std_basis_same", ["linear_map"]], ["del", "theorem", "supr_range_std_basis", ["linear_map"]], ["del", "theorem", "supr_range_std_basis_eq_infi_ker_proj", ["linear_map"]], ["del", "theorem", "supr_range_std_basis_le_infi_ker_proj", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/std_basis.lean", "changes": [["add", "theorem", "disjoint_std_basis_std_basis", ["linear_map"]], ["add", "theorem", "infi_ker_proj_le_supr_range_std_basis", ["linear_map"]], ["add", "theorem", "ker_std_basis", ["linear_map"]], ["add", "theorem", "proj_comp_std_basis", ["linear_map"]], ["add", "theorem", "proj_std_basis_ne", ["linear_map"]], ["add", "theorem", "proj_std_basis_same", ["linear_map"]], ["add", "def", "std_basis", ["linear_map"]], ["add", "theorem", "std_basis_apply", ["linear_map"]], ["add", "theorem", "std_basis_eq_single", ["linear_map"]], ["add", "theorem", "std_basis_ne", ["linear_map"]], ["add", "theorem", "std_basis_same", ["linear_map"]], ["add", "theorem", "supr_range_std_basis", ["linear_map"]], ["add", "theorem", "supr_range_std_basis_eq_infi_ker_proj", ["linear_map"]], ["add", "theorem", "supr_range_std_basis_le_infi_ker_proj", ["linear_map"]]]}]}, {"timestamp": 1612424931, "sha": "6df15017", "message": "feat(algebra/ordered_ring): weaken hypotheses for one_le_two (#6034)\nAdjust `one_le_two` to not require nontriviality.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "one_le_two", []]]}]}, {"timestamp": 1612409409, "sha": "3309490a", "message": "chore(scripts): update nolints.txt (#6032)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612409408, "sha": "7812afa3", "message": "feat(data/list/basic): drop_eq_nil_of_le (#6029)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "drop_eq_nil_of_le", ["list"]], ["mod", "theorem", "drop_nil", ["list"]]]}]}, {"timestamp": 1612409406, "sha": "cbd67cf4", "message": "feat(order/(complete_lattice, compactly_generated)): independent sets in a complete lattice (#5971)\nDefines `complete_lattice.independent`\nShows that this notion of independence is finitary in compactly generated lattices", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "Sup_compact_le_eq", []], ["add", "theorem", "independent_iff_finite", ["complete_lattice"]], ["add", "theorem", "inf_Sup_eq_of_directed_on", []], ["add", "theorem", "inf_Sup_eq_supr_inf_sup_finset", []], ["add", "theorem", "le_iff_compact_le_imp", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "mono", ["complete_lattice", "independent"]], ["add", "def", "independent", ["complete_lattice"]], ["add", "theorem", "sup_Inf_le_infi_sup", []], ["add", "theorem", "supr_inf_le_inf_Sup", []]]}]}, {"timestamp": 1612409404, "sha": "5f328b6e", "message": "feat(linear_algebra/free_algebra): Show that free_monoid forms a basis over free_algebra (#5868)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/free_algebra.lean", "changes": [["add", "theorem", "dim_eq", ["free_algebra"]], ["add", "theorem", "is_basis_free_monoid", ["free_algebra"]]]}]}, {"timestamp": 1612394971, "sha": "36b35107", "message": "feat(data/nat/factorial): additional inequalities (#6026)\nI added two lemmas about factorials. I use them in the Liouville PR #4301.", "changes": [{"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["add", "theorem", "add_factorial_lt_factorial_add'", ["nat"]], ["add", "theorem", "add_factorial_lt_factorial_add", ["nat"]], ["add", "theorem", "lt_factorial_self", ["nat"]]]}]}, {"timestamp": 1612374284, "sha": "360fa07e", "message": "feat(data/real/sqrt): added some missing sqrt lemmas (#5933)\nI noticed that some facts about `sqrt` and `abs` are missing, so I am adding them.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["del", "theorem", "abs_sq_eq", []], ["add", "theorem", "abs_sqr", []], ["add", "theorem", "sqr_abs", []], ["add", "theorem", "sqr_le_sqr'", []], ["add", "theorem", "sqr_le_sqr", []], ["add", "theorem", "sqr_lt_sqr'", []], ["add", "theorem", "sqr_lt_sqr", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "abs_le'", []], ["mod", "theorem", "abs_le", []], ["mod", "theorem", "abs_lt", []], ["add", "theorem", "le_abs", []], ["add", "theorem", "le_of_abs_le", []], ["mod", "theorem", "lt_abs", []], ["add", "theorem", "lt_of_abs_lt", []], ["add", "theorem", "neg_le_of_abs_le", []], ["add", "theorem", "neg_lt_of_abs_lt", []]]}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": [["add", "theorem", "abs_le_sqrt", ["real"]], ["add", "theorem", "div_sqrt", ["real"]], ["mod", "theorem", "le_sqrt'", ["real"]], ["mod", "theorem", "le_sqrt", ["real"]], ["mod", "theorem", "le_sqrt_of_sqr_le", ["real"]], ["add", "theorem", "lt_sqrt", ["real"]], ["add", "theorem", "lt_sqrt_of_sqr_lt", ["real"]], ["add", "theorem", "neg_sqrt_le_of_sqr_le", ["real"]], ["add", "theorem", "neg_sqrt_lt_of_sqr_lt", ["real"]], ["add", "theorem", "sqr_le", ["real"]], ["add", "theorem", "sqr_lt", ["real"]], ["mod", "theorem", "sqrt_le_iff", ["real"]], ["mod", "theorem", "sqrt_le_left", ["real"]], ["mod", "theorem", "sqrt_le_sqrt", ["real"]], ["add", "theorem", "sqrt_ne_zero'", ["real"]], ["add", "theorem", "sqrt_ne_zero", ["real"]]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": []}]}, {"timestamp": 1612368157, "sha": "bb15b1ce", "message": "chore(analysis/calculus): rename `has_f?deriv_at_unique` to `has_f?deriv_at.unique` (#6019)\nAlso make some lemmas `protected`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["del", "theorem", "deriv", ["continuous_linear_map"]], ["del", "theorem", "deriv_within", ["continuous_linear_map"]], ["del", "theorem", "has_deriv_at", ["continuous_linear_map"]], ["del", "theorem", "has_deriv_at_filter", ["continuous_linear_map"]], ["del", "theorem", "has_deriv_within_at", ["continuous_linear_map"]], ["del", "theorem", "has_strict_deriv_at", ["continuous_linear_map"]], ["add", "theorem", "unique", ["has_deriv_at"]], ["del", "theorem", "has_deriv_at_unique", []], ["del", "theorem", "deriv", ["has_fpower_series_at"]], ["del", "theorem", "has_deriv_at", ["has_fpower_series_at"]], ["del", "theorem", "has_strict_deriv_at", ["has_fpower_series_at"]], ["del", "theorem", "deriv", ["linear_map"]], ["del", "theorem", "deriv_within", ["linear_map"]], ["del", "theorem", "has_deriv_at", ["linear_map"]], ["del", "theorem", "has_deriv_at_filter", ["linear_map"]], ["del", "theorem", "has_deriv_within_at", ["linear_map"]], ["del", "theorem", "has_strict_deriv_at", ["linear_map"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "unique", ["has_fderiv_at"]], ["del", "theorem", "has_fderiv_at_unique", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}]}, {"timestamp": 1612355199, "sha": "235a7c46", "message": "doc(lint/simp): typesetting issues in simp_nf library note (#6018)", "changes": [{"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}]}, {"timestamp": 1612355198, "sha": "9a0d2b23", "message": "chore(data/nat/parity): rename type variable (#6016)", "changes": [{"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["mod", "theorem", "add_even", ["nat", "even"]], ["mod", "theorem", "add_odd", ["nat", "even"]], ["mod", "theorem", "sub_even", ["nat", "even"]], ["mod", "theorem", "sub_odd", ["nat", "even"]], ["mod", "theorem", "even_add'", ["nat"]], ["mod", "theorem", "even_add", ["nat"]], ["mod", "theorem", "even_div", ["nat"]], ["mod", "theorem", "even_iff", ["nat"]], ["mod", "theorem", "even_iff_not_odd", ["nat"]], ["mod", "theorem", "even_mul", ["nat"]], ["mod", "theorem", "even_pow", ["nat"]], ["mod", "theorem", "even_sub'", ["nat"]], ["mod", "theorem", "even_sub", ["nat"]], ["mod", "theorem", "even_succ", ["nat"]], ["mod", "theorem", "mod_two_ne_one", ["nat"]], ["mod", "theorem", "mod_two_ne_zero", ["nat"]], ["mod", "theorem", "neg_one_pow_eq_one_iff_even", ["nat"]], ["mod", "theorem", "neg_one_pow_of_even", ["nat"]], ["mod", "theorem", "neg_one_pow_of_odd", ["nat"]], ["mod", "theorem", "neg_one_pow_two", ["nat"]], ["mod", "theorem", "not_even_iff", ["nat"]], ["mod", "theorem", "not_odd_iff", ["nat"]], ["mod", "theorem", "add_even", ["nat", "odd"]], ["mod", "theorem", "add_odd", ["nat", "odd"]], ["mod", "theorem", "sub_even", ["nat", "odd"]], ["mod", "theorem", "sub_odd", ["nat", "odd"]], ["mod", "theorem", "odd_add'", ["nat"]], ["mod", "theorem", "odd_add", ["nat"]], ["mod", "theorem", "odd_gt_zero", ["nat"]], ["mod", "theorem", "odd_iff", ["nat"]], ["mod", "theorem", "odd_iff_not_even", ["nat"]], ["mod", "theorem", "odd_sub'", ["nat"]], ["mod", "theorem", "odd_sub", ["nat"]], ["mod", "theorem", "two_not_dvd_two_mul_sub_one", ["nat"]]]}]}, {"timestamp": 1612355196, "sha": "fa8df59b", "message": "feat(algebra/polynomial/big_operators): add degree_prod lemma (#5979)\nThis PR adds a degree_prod lemma next to the nat_degree_prod lemma. This version of the lemma works for the interpretation of 'degree' which says the degree of the zero polynomial is \\bot", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["add", "theorem", "degree_prod", ["polynomial"]]]}]}, {"timestamp": 1612355194, "sha": "5a9ca8d3", "message": "feat(linear_algebra/sesquilinear_form): add composition between sesquilinear forms and linear maps (#5729)\nAdd composition lemmas for sesquilinear forms, that is, given a sesquilinear form and linear maps, a new sesquilinear form is induced by applying the arguments with the linear map.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "comp_injective", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "def", "comp", ["sesq_form"]], ["add", "theorem", "comp_apply", ["sesq_form"]], ["add", "theorem", "comp_comp", ["sesq_form"]], ["add", "theorem", "comp_injective", ["sesq_form"]], ["add", "def", "comp_left", ["sesq_form"]], ["add", "theorem", "comp_left_apply", ["sesq_form"]], ["add", "theorem", "comp_left_comp_right", ["sesq_form"]], ["add", "def", "comp_right", ["sesq_form"]], ["add", "theorem", "comp_right_apply", ["sesq_form"]], ["add", "theorem", "comp_right_comp_left", ["sesq_form"]]]}]}, {"timestamp": 1612345538, "sha": "e1ca806c", "message": "doc(algebra/{archimedean, char_zero}): provide docstrings (#6010)", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}]}, {"timestamp": 1612327163, "sha": "e66ad5f5", "message": "chore(scripts): update nolints.txt (#6014)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612327161, "sha": "79ca6e23", "message": "feat(order/compactly_generated): Show that the sublattice below a compact element is coatomic (#5942)\nShow that the sublattice below a compact element is coatomic. Introduce a lemma stating that any set lying strictly below a compact element has Sup strictly below that element.\n", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "Iic_coatomic_of_compact_element", ["complete_lattice"]], ["add", "theorem", "directed_Sup_lt_of_lt", ["complete_lattice", "is_compact_element"]]]}]}, {"timestamp": 1612314351, "sha": "fcad25f2", "message": "feat(algebra/ring): add mk_mul_self_of_two_ne_zero (#5862)\nWhich allows us to make a ring homomorphism from an additive hom which maps squares to squares assuming a couple of things, this is especially useful in ordered fields where it allows us to think only of positive elements.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "coe_add_monoid_hom_mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["add", "theorem", "coe_fn_mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]], ["add", "def", "mk_ring_hom_of_mul_self_of_two_ne_zero", ["add_monoid_hom"]]]}]}, {"timestamp": 1612307489, "sha": "2153dc34", "message": "feat(data/fintype/sort): add `fin_sum_equiv_of_finset` (#6008)", "changes": [{"oldPath": "src/data/fintype/sort.lean", "newPath": "src/data/fintype/sort.lean", "changes": [["add", "def", "fin_sum_equiv_of_finset", []], ["add", "theorem", "fin_sum_equiv_of_finset_inl", []], ["add", "theorem", "fin_sum_equiv_of_finset_inr", []]]}]}, {"timestamp": 1612301911, "sha": "1b1ad15c", "message": "refactor(measure_theory/*): rename `is_(null_)?measurable` to `(null_)?measurable_set` (#6001)\nSearch & replace:\n* `is_null_measurable` → `null_measurable`;\n* `is_measurable` → `measurable_set'`;\n* `measurable_set_set` → `measurable_set`;\n* `measurable_set_spanning_sets` → `measurable_spanning_sets`;\n* `measurable_set_superset` → `measurable_superset`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv_measurable.lean", "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": [["del", "theorem", "is_measurable_set_of_differentiable_at", []], ["del", "theorem", "is_measurable_set_of_differentiable_at_of_is_complete", []], ["add", "theorem", "measurable_set_of_differentiable_at", []], ["add", "theorem", "measurable_set_of_differentiable_at_of_is_complete", []]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_measurable_sequence.lean", "newPath": "src/measure_theory/ae_measurable_sequence.lean", "changes": [["del", "theorem", "ae_seq_set_is_measurable", ["ae_seq"]], ["add", "theorem", "ae_seq_set_measurable_set", ["ae_seq"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["del", "theorem", "is_measurable", ["is_Gδ"]], ["add", "theorem", "measurable_set", ["is_Gδ"]], ["del", "theorem", "is_measurable", ["is_closed"]], ["add", "theorem", "measurable_set", ["is_closed"]], ["del", "theorem", "is_measurable", ["is_compact"]], ["add", "theorem", "measurable_set", ["is_compact"]], ["del", "theorem", "nhds_within_is_measurably_generated", ["is_measurable"]], ["del", "theorem", "is_measurable_Icc", []], ["del", "theorem", "is_measurable_Ici", []], ["del", "theorem", "is_measurable_Ico", []], ["del", "theorem", "is_measurable_Iic", []], ["del", "theorem", "is_measurable_Iio", []], ["del", "theorem", "is_measurable_Ioc", []], ["del", "theorem", "is_measurable_Ioi", []], ["del", "theorem", "is_measurable_Ioo", []], ["del", "theorem", "is_measurable_ball", []], ["del", "theorem", "is_measurable_closed_ball", []], ["del", "theorem", "is_measurable_closure", []], ["del", "theorem", "is_measurable_eball", []], ["del", "theorem", "is_measurable_interior", []], ["del", "theorem", "is_measurable_interval", []], ["del", "theorem", "is_measurable_le'", []], ["del", "theorem", "is_measurable_le", []], ["del", "theorem", "is_measurable_lt'", []], ["del", "theorem", "is_measurable_lt", []], ["del", "theorem", "is_measurable_set_of_continuous_at", []], ["del", "theorem", "is_measurable", ["is_open"]], ["add", "theorem", "measurable_set", ["is_open"]], ["mod", "theorem", "measurable_of_Ici", []], ["mod", "theorem", "measurable_of_Iic", []], ["mod", "theorem", "measurable_of_Iio", []], ["mod", "theorem", "measurable_of_Ioi", []], ["mod", "theorem", "measurable_of_is_closed", []], ["mod", "theorem", "measurable_of_is_open", []], ["add", "theorem", "nhds_within_is_measurably_generated", ["measurable_set"]], ["add", "theorem", "measurable_set_Icc", []], ["add", "theorem", "measurable_set_Ici", []], ["add", "theorem", "measurable_set_Ico", []], ["add", "theorem", "measurable_set_Iic", []], ["add", "theorem", "measurable_set_Iio", []], ["add", "theorem", "measurable_set_Ioc", []], ["add", "theorem", "measurable_set_Ioi", []], ["add", "theorem", "measurable_set_Ioo", []], ["add", "theorem", "measurable_set_ball", []], ["add", "theorem", "measurable_set_closed_ball", []], ["add", "theorem", "measurable_set_closure", []], ["add", "theorem", "measurable_set_eball", []], ["add", "theorem", "measurable_set_interior", []], ["add", "theorem", "measurable_set_interval", []], ["add", "theorem", "measurable_set_le'", []], ["add", "theorem", "measurable_set_le", []], ["add", "theorem", "measurable_set_lt'", []], ["add", "theorem", "measurable_set_lt", []], ["add", "theorem", "measurable_set_of_continuous_at", []]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": [["mod", "theorem", "measurable_coe", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/group.lean", "newPath": "src/measure_theory/group.lean", "changes": [["mod", "theorem", "inv_apply", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": [["mod", "theorem", "haar_measure_apply", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "lintegral_Union", ["measure_theory"]], ["mod", "theorem", "lintegral_indicator", ["measure_theory"]], ["mod", "theorem", "coe_piecewise", ["measure_theory", "simple_func"]], ["mod", "theorem", "coe_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "is_measurable_cut", ["measure_theory", "simple_func"]], ["del", "theorem", "is_measurable_fiber", ["measure_theory", "simple_func"]], ["del", "theorem", "is_measurable_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_set_cut", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_set_fiber", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable_set_preimage", ["measure_theory", "simple_func"]], ["mod", "theorem", "mem_restrict_range", ["measure_theory", "simple_func"]], ["mod", "def", "piecewise", ["measure_theory", "simple_func"]], ["mod", "theorem", "piecewise_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "piecewise_compl", ["measure_theory", "simple_func"]], ["mod", "theorem", "piecewise_empty", ["measure_theory", "simple_func"]], ["mod", "theorem", "piecewise_univ", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_const_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_lintegral", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_preimage", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_preimage_singleton", ["measure_theory", "simple_func"]], ["mod", "theorem", "with_density_apply", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "is_measurable_bInter", ["finset"]], ["del", "theorem", "is_measurable_bUnion", ["finset"]], ["add", "theorem", "measurable_set_bInter", ["finset"]], ["add", "theorem", "measurable_set_bUnion", ["finset"]], ["del", "theorem", "is_countably_spanning_is_measurable", []], ["add", "theorem", "is_countably_spanning_measurable_set", []], ["del", "theorem", "Inter", ["is_measurable"]], ["del", "theorem", "Inter_Prop", ["is_measurable"]], ["del", "theorem", "Inter_fintype", ["is_measurable"]], ["del", "theorem", "Union", ["is_measurable"]], ["del", "theorem", "Union_Prop", ["is_measurable"]], ["del", "theorem", "Union_fintype", ["is_measurable"]], ["del", "theorem", "bInter", ["is_measurable"]], ["del", "theorem", "bUnion", ["is_measurable"]], ["del", "theorem", "bUnion_decode2", ["is_measurable"]], ["del", "theorem", "compl", ["is_measurable"]], ["del", "theorem", "compl_iff", ["is_measurable"]], ["del", "theorem", "congr", ["is_measurable"]], ["del", "theorem", "const", ["is_measurable"]], ["del", "theorem", "diff", ["is_measurable"]], ["del", "theorem", "disjointed", ["is_measurable"]], ["del", "theorem", "empty", ["is_measurable"]], ["del", "theorem", "inl_image", ["is_measurable"]], ["del", "theorem", "insert", ["is_measurable"]], ["del", "theorem", "inter", ["is_measurable"]], ["del", "theorem", "of_compl", ["is_measurable"]], ["del", "theorem", "pi", ["is_measurable"]], ["del", "theorem", "pi_fintype", ["is_measurable"]], ["del", "theorem", "pi_univ", ["is_measurable"]], ["del", "theorem", "prod", ["is_measurable"]], ["del", "theorem", "sInter", ["is_measurable"]], ["del", "theorem", "sUnion", ["is_measurable"]], ["del", "theorem", "subtype_image", ["is_measurable"]], ["del", "theorem", "tprod", ["is_measurable"]], ["del", "theorem", "union", ["is_measurable"]], ["del", "theorem", "univ", ["is_measurable"]], ["del", "def", "is_measurable", []], ["del", "theorem", "is_measurable_eq", []], ["del", "theorem", "is_measurable_inr_image", []], ["del", "theorem", "is_measurable_insert", []], ["del", "theorem", "is_measurable_pi", []], ["del", "theorem", "is_measurable_pi_of_nonempty", []], ["del", "theorem", "is_measurable_prod", []], ["del", "theorem", "is_measurable_prod_of_nonempty", []], ["del", "theorem", "is_measurable_range_inl", []], ["del", "theorem", "is_measurable_range_inr", []], ["del", "theorem", "is_measurable_swap_iff", []], ["mod", "theorem", "measurable_find_greatest", []], ["add", "theorem", "Inter", ["measurable_set"]], ["add", "theorem", "Inter_Prop", ["measurable_set"]], ["add", "theorem", "Inter_fintype", ["measurable_set"]], ["add", "theorem", "Union", ["measurable_set"]], ["add", "theorem", "Union_Prop", ["measurable_set"]], ["add", "theorem", "Union_fintype", ["measurable_set"]], ["add", "theorem", "bInter", ["measurable_set"]], ["add", "theorem", "bUnion", ["measurable_set"]], ["add", "theorem", "bUnion_decode2", ["measurable_set"]], ["add", "theorem", "compl", ["measurable_set"]], ["add", "theorem", "compl_iff", ["measurable_set"]], ["add", "theorem", "congr", ["measurable_set"]], ["add", "theorem", "const", ["measurable_set"]], ["add", "theorem", "diff", ["measurable_set"]], ["add", "theorem", "disjointed", ["measurable_set"]], ["add", "theorem", "empty", ["measurable_set"]], ["add", "theorem", "inl_image", ["measurable_set"]], ["add", "theorem", "insert", ["measurable_set"]], ["add", "theorem", "inter", ["measurable_set"]], ["add", "theorem", "of_compl", ["measurable_set"]], ["add", "theorem", "pi", ["measurable_set"]], ["add", "theorem", "pi_fintype", ["measurable_set"]], ["add", "theorem", "pi_univ", ["measurable_set"]], ["add", "theorem", "prod", ["measurable_set"]], ["add", "theorem", "sInter", ["measurable_set"]], ["add", "theorem", "sUnion", ["measurable_set"]], ["add", "theorem", "subtype_image", ["measurable_set"]], ["add", "theorem", "tprod", ["measurable_set"]], ["add", "theorem", "union", ["measurable_set"]], ["add", "theorem", "univ", ["measurable_set"]], ["add", "def", "measurable_set", []], ["add", "theorem", "measurable_set_eq", []], ["add", "theorem", "measurable_set_inr_image", []], ["add", "theorem", "measurable_set_insert", []], ["add", "theorem", "measurable_set_pi", []], ["add", "theorem", "measurable_set_pi_of_nonempty", []], ["add", "theorem", "measurable_set_prod", []], ["add", "theorem", "measurable_set_prod_of_nonempty", []], ["add", "theorem", "measurable_set_range_inl", []], ["add", "theorem", "measurable_set_range_inr", []], ["add", "theorem", "measurable_set_swap_iff", []], ["del", "theorem", "generate_from_is_measurable", ["measurable_space"]], ["add", "theorem", "generate_from_measurable_set", ["measurable_space"]], ["mod", "def", "gi_generate_from", ["measurable_space"]], ["del", "theorem", "is_measurable_Inf", ["measurable_space"]], ["del", "theorem", "is_measurable_Sup", ["measurable_space"]], ["del", "theorem", "is_measurable_bot_iff", ["measurable_space"]], ["del", "theorem", "is_measurable_generate_from", ["measurable_space"]], ["del", "theorem", "is_measurable_inf", ["measurable_space"]], ["del", "theorem", "is_measurable_infi", ["measurable_space"]], ["del", "theorem", "is_measurable_sup", ["measurable_space"]], ["del", "theorem", "is_measurable_supr", ["measurable_space"]], ["del", "theorem", "is_measurable_top", ["measurable_space"]], ["del", "theorem", "is_pi_system_is_measurable", ["measurable_space"]], ["add", "theorem", "is_pi_system_measurable_set", ["measurable_space"]], ["add", "theorem", "measurable_set_Inf", ["measurable_space"]], ["add", "theorem", "measurable_set_Sup", ["measurable_space"]], ["add", "theorem", "measurable_set_bot_iff", ["measurable_space"]], ["add", "theorem", "measurable_set_generate_from", ["measurable_space"]], ["add", "theorem", "measurable_set_inf", ["measurable_space"]], ["add", "theorem", "measurable_set_infi", ["measurable_space"]], ["add", "theorem", "measurable_set_sup", ["measurable_space"]], ["add", "theorem", "measurable_set_supr", ["measurable_space"]], ["add", "theorem", "measurable_set_top", ["measurable_space"]], ["mod", "theorem", "measurable_to_encodable", []], ["mod", "theorem", "measurable_to_nat", []], ["mod", "theorem", "nonempty_measurable_superset", []], ["del", "theorem", "is_measurable", ["set", "finite"]], ["del", "theorem", "is_measurable_bInter", ["set", "finite"]], ["del", "theorem", "is_measurable_bUnion", ["set", "finite"]], ["del", "theorem", "is_measurable_sInter", ["set", "finite"]], ["del", "theorem", "is_measurable_sUnion", ["set", "finite"]], ["add", "theorem", "measurable_set", ["set", "finite"]], ["add", "theorem", "measurable_set_bInter", ["set", "finite"]], ["add", "theorem", "measurable_set_bUnion", ["set", "finite"]], ["add", "theorem", "measurable_set_sInter", ["set", "finite"]], ["add", "theorem", "measurable_set_sUnion", ["set", "finite"]], ["del", "theorem", "is_measurable", ["subsingleton"]], ["add", "theorem", "measurable_set", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "theorem", "is_null_measurable", ["ae_measurable"]], ["add", "theorem", "null_measurable_set", ["ae_measurable"]], ["del", "theorem", "diff_null", ["is_measurable"]], ["del", "theorem", "is_null_measurable", ["is_measurable"]], ["del", "theorem", "Union_nat", ["is_null_measurable"]], ["del", "theorem", "compl", ["is_null_measurable"]], ["del", "theorem", "diff_null", ["is_null_measurable"]], ["del", "theorem", "union_null", ["is_null_measurable"]], ["del", "def", "is_null_measurable", []], ["del", "theorem", "is_null_measurable_iff", []], ["del", "theorem", "is_null_measurable_iff_ae", []], ["del", "theorem", "is_null_measurable_iff_sandwich", []], ["del", "theorem", "is_null_measurable_measure_eq", []], ["del", "theorem", "is_null_measurable_of_complete", []], ["add", "theorem", "diff_null", ["measurable_set"]], ["add", "theorem", "null_measurable_set", ["measurable_set"]], ["mod", "theorem", "ae_dirac_iff", ["measure_theory"]], ["mod", "theorem", "ae_eventually_not_mem", ["measure_theory"]], ["mod", "theorem", "ae_map_iff", ["measure_theory"]], ["mod", "theorem", "ae_restrict_eq", ["measure_theory"]], ["mod", "theorem", "ae_restrict_iff'", ["measure_theory"]], ["mod", "theorem", "ae_restrict_iff", ["measure_theory"]], ["del", "theorem", "exists_is_measurable_superset", ["measure_theory"]], ["del", "theorem", "exists_is_measurable_superset_iff_measure_eq_zero", ["measure_theory"]], ["del", "theorem", "exists_is_measurable_superset_of_null", ["measure_theory"]], ["add", "theorem", "exists_measurable_superset", ["measure_theory"]], ["add", "theorem", "exists_measurable_superset_iff_measure_eq_zero", ["measure_theory"]], ["add", "theorem", "exists_measurable_superset_of_null", ["measure_theory"]], ["del", "theorem", "is_measurable_spanning_sets", ["measure_theory"]], ["del", "theorem", "is_measurable_to_measurable", ["measure_theory"]], ["add", "theorem", "measurable_set_to_measurable", ["measure_theory"]], ["add", "theorem", "measurable_spanning_sets", ["measure_theory"]], ["mod", "theorem", "Inf_apply", ["measure_theory", "measure"]], ["mod", "theorem", "Inf_caratheodory", ["measure_theory", "measure"]], ["mod", "theorem", "mk", ["measure_theory", "measure", "absolutely_continuous"]], ["mod", "theorem", "count_apply", ["measure_theory", "measure"]], ["mod", "theorem", "dirac_apply'", ["measure_theory", "measure"]], ["mod", "theorem", "ext", ["measure_theory", "measure"]], ["mod", "theorem", "ext_iff", ["measure_theory", "measure"]], ["mod", "theorem", "le_iff", ["measure_theory", "measure"]], ["mod", "theorem", "lt_iff", ["measure_theory", "measure"]], ["mod", "theorem", "map_apply", ["measure_theory", "measure"]], ["mod", "theorem", "map_comap_subtype_coe", ["measure_theory", "measure"]], ["mod", "def", "of_measurable", ["measure_theory", "measure"]], ["mod", "theorem", "of_measurable_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Inf_eq_Inf_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_add_restrict_compl", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_apply_eq_zero'", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_apply_eq_zero", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_compl_add_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_congr_meas", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_congr_mono", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_map", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_sUnion_congr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_sum", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_to_outer_measure_eq_to_outer_measure_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_add_inter", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_congr", ["measure_theory", "measure"]], ["mod", "theorem", "sub_apply", ["measure_theory", "measure"]], ["mod", "theorem", "sum_apply", ["measure_theory", "measure"]], ["mod", "theorem", "supr_restrict_spanning_sets", ["measure_theory", "measure"]], ["mod", "theorem", "measure_Union_eq_supr", ["measure_theory"]], ["mod", "theorem", "measure_compl", ["measure_theory"]], ["mod", "theorem", "measure_diff", ["measure_theory"]], ["mod", "theorem", "measure_eq_extend", ["measure_theory"]], ["mod", "theorem", "measure_eq_infi", ["measure_theory"]], ["mod", "theorem", "measure_eq_inter_diff", ["measure_theory"]], ["mod", "theorem", "measure_limsup_eq_zero", ["measure_theory"]], ["mod", "theorem", "measure_union", ["measure_theory"]], ["mod", "theorem", "measure_union_add_inter", ["measure_theory"]], ["mod", "theorem", "mem_ae_dirac_iff", ["measure_theory"]], ["mod", "theorem", "mem_ae_map_iff", ["measure_theory"]], ["mod", "theorem", "self_mem_ae_restrict", ["measure_theory"]], ["mod", "theorem", "sum_measure_le_measure_univ", ["measure_theory"]], ["mod", "theorem", "tendsto_measure_Union", ["measure_theory"]], ["mod", "theorem", "tsum_measure_le_measure_univ", ["measure_theory"]], ["del", "theorem", "null_is_null_measurable", []], ["add", "theorem", "Union_nat", ["null_measurable_set"]], ["add", "theorem", "compl", ["null_measurable_set"]], ["add", "theorem", "diff_null", ["null_measurable_set"]], ["add", "theorem", "union_null", ["null_measurable_set"]], ["add", "def", "null_measurable_set", []], ["add", "theorem", "null_measurable_set_iff", []], ["add", "theorem", "null_measurable_set_iff_ae", []], ["add", "theorem", "null_measurable_set_iff_sandwich", []], ["add", "theorem", "null_measurable_set_measure_eq", []], ["add", "theorem", "null_measurable_set_of_complete", []], ["add", "theorem", "null_null_measurable_set", []], ["del", "theorem", "restrict_apply_of_is_null_measurable", []], ["add", "theorem", "restrict_apply_of_null_measurable_set", []]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["mod", "theorem", "extend_mono", ["measure_theory"]], ["mod", "theorem", "induced_outer_measure_eq", ["measure_theory"]], ["mod", "theorem", "induced_outer_measure_eq_extend", ["measure_theory"]], ["del", "theorem", "exists_is_measurable_superset_eq_trim", ["measure_theory", "outer_measure"]], ["del", "theorem", "exists_is_measurable_superset_of_trim_eq_zero", ["measure_theory", "outer_measure"]], ["add", "theorem", "exists_measurable_superset_eq_trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "exists_measurable_superset_of_trim_eq_zero", ["measure_theory", "outer_measure"]], ["mod", "theorem", "le_trim_iff", ["measure_theory", "outer_measure"]], ["mod", "theorem", "restrict_trim", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_eq", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_eq_infi'", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_eq_infi", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": [["mod", "theorem", "pi_pi", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["del", "theorem", "is_measurable_integrable", []], ["add", "theorem", "measurable_set_integrable", []], ["mod", "theorem", "ae_measure_lt_top", ["measure_theory", "measure"]], ["mod", "theorem", "prod_apply", ["measure_theory", "measure"]], ["mod", "theorem", "prod_apply_symm", ["measure_theory", "measure"]], ["mod", "theorem", "prod_restrict", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/prod_group.lean", "newPath": "src/measure_theory/prod_group.lean", "changes": [["mod", "theorem", "measurable_measure_mul_right", ["measure_theory"]], ["mod", "theorem", "measure_inv_null", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_ne_zero", ["measure_theory"]], ["mod", "theorem", "measure_mul_right_null", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "theorem", "indicator_ae_eq_restrict", []], ["mod", "theorem", "indicator_ae_eq_restrict_compl", []], ["mod", "theorem", "ae_measurable_indicator_iff", ["measure_theory"]], ["mod", "theorem", "integrable_indicator_iff", ["measure_theory"]], ["mod", "theorem", "indicator", ["measure_theory", "integrable_on"]], ["mod", "theorem", "integral_add_compl", ["measure_theory"]], ["mod", "theorem", "integral_indicator", ["measure_theory"]], ["mod", "theorem", "integral_indicator_const", ["measure_theory"]], ["mod", "theorem", "integral_union", ["measure_theory"]], ["mod", "theorem", "norm_set_integral_le_of_norm_le_const'", ["measure_theory"]], ["mod", "theorem", "norm_set_integral_le_of_norm_le_const_ae''", ["measure_theory"]], ["mod", "theorem", "set_integral_congr", ["measure_theory"]], ["mod", "theorem", "set_integral_congr_ae", ["measure_theory"]], ["mod", "theorem", "piecewise_ae_eq_restrict", []], ["mod", "theorem", "piecewise_ae_eq_restrict_compl", []]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/probability_theory/independence.lean", "newPath": "src/probability_theory/independence.lean", "changes": []}]}, {"timestamp": 1612290552, "sha": "2b2edc97", "message": "chore(analysis/normed_space/basic): use explicit arg `𝕜'` in lemmas about `normed_algebra` (#6009)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_one", ["normed_algebra"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1612290550, "sha": "4e786548", "message": "fix(tactic/delta_instance): improve naming of instances with multiple arguments (#6007)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/tactic/delta_instance.lean", "newPath": "src/tactic/delta_instance.lean", "changes": []}, {"oldPath": "test/delta_instance.lean", "newPath": "test/delta_instance.lean", "changes": []}]}, {"timestamp": 1612290548, "sha": "fe9c021d", "message": "feat(geometry/manifold/instances): sphere is a smooth manifold (#5607)\nPut a smooth manifold structure on the sphere, and provide tools for constructing smooth maps to and from the sphere.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "theorem", "findim_orthogonal_span_singleton", []]]}, {"oldPath": "src/geometry/manifold/instances/sphere.lean", "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": [["mod", "def", "stereographic'", []], ["mod", "theorem", "stereographic'_source", []], ["mod", "theorem", "stereographic'_target", []], ["add", "theorem", "cod_restrict_sphere", ["times_cont_mdiff"]], ["add", "theorem", "times_cont_mdiff_coe_sphere", []], ["add", "theorem", "times_cont_mdiff_neg_sphere", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finite_dimensional_of_findim", ["finite_dimensional"]], ["add", "theorem", "finite_dimensional_of_findim_eq_succ", ["finite_dimensional"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_to_homeomorph", ["continuous_linear_equiv"]], ["add", "theorem", "symm_to_homeomorph", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1612277040, "sha": "dbb5ca1e", "message": "refactor(group_theory/perm): move perm.subtype_perm to basic (#6005)\nBoth `perm.subtype_perm` and `perm.of_subtype` can be moved up the import hierarchy out of `group_theory/perm/sign` since they do not rely on any finiteness assumption.", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "mem_iff_of_subtype_apply_mem", ["equiv", "perm"]], ["add", "def", "of_subtype", ["equiv", "perm"]], ["add", "theorem", "of_subtype_apply_of_not_mem", ["equiv", "perm"]], ["add", "theorem", "of_subtype_subtype_perm", ["equiv", "perm"]], ["add", "def", "subtype_perm", ["equiv", "perm"]], ["add", "theorem", "subtype_perm_of_subtype", ["equiv", "perm"]], ["add", "theorem", "subtype_perm_one", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["del", "theorem", "mem_iff_of_subtype_apply_mem", ["equiv", "perm"]], ["del", "def", "of_subtype", ["equiv", "perm"]], ["del", "theorem", "of_subtype_apply_of_not_mem", ["equiv", "perm"]], ["del", "theorem", "of_subtype_subtype_perm", ["equiv", "perm"]], ["del", "def", "subtype_perm", ["equiv", "perm"]], ["del", "theorem", "subtype_perm_of_subtype", ["equiv", "perm"]], ["del", "theorem", "subtype_perm_one", ["equiv", "perm"]]]}]}, {"timestamp": 1612277038, "sha": "9b3dc417", "message": "feat(nat/basic): more nat.find lemmas (#6002)\nalso merge two sections on nat.find", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "find_eq_iff", ["nat"]], ["mod", "theorem", "find_eq_zero", ["nat"]], ["mod", "theorem", "find_le", ["nat"]], ["add", "theorem", "find_le_iff", ["nat"]], ["add", "theorem", "find_lt_iff", ["nat"]], ["mod", "theorem", "find_pos", ["nat"]], ["add", "theorem", "le_find_iff", ["nat"]], ["add", "theorem", "lt_find_iff", ["nat"]]]}]}, {"timestamp": 1612277036, "sha": "6633a70e", "message": "feat(analysis/normed_space/inner_product): remove unnecessary `nonneg_im` field (#5999)\nThe `nonneg_im` property already follows from `conj_sym`.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "theorem", "inner_conj_sym", []], ["mod", "theorem", "inner_self_im_zero", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_self_nonneg_im", ["inner_product_space", "of_core"]], ["mod", "theorem", "inner_self_im_zero", []], ["mod", "theorem", "inner_self_nonneg_im", []]]}, {"oldPath": "src/analysis/quaternion.lean", "newPath": "src/analysis/quaternion.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "conj_I", ["is_R_or_C"]], ["add", "theorem", "im_eq_conj_sub", ["is_R_or_C"]]]}]}, {"timestamp": 1612277034, "sha": "508c2650", "message": "feat(logic/function/basic): add bijective.iff_exists_unique and projections (#5995)", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "exists_unique", ["function", "bijective"]], ["add", "theorem", "bijective_iff_exists_unique", ["function"]]]}]}, {"timestamp": 1612277031, "sha": "3732fb9d", "message": "refactor(data/polynomial/eval): change eval_smul lemmas to use * instead of 2nd smul (#5991)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1612277029, "sha": "ff05d3af", "message": "feat(algebra/group_power/lemmas): sign of even/odd powers (#5990)\nAdded theorems about the sign of even and odd natural powers.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "one_add_mul_le_pow", []], ["mod", "theorem", "one_add_mul_sub_le_pow", []], ["mod", "theorem", "pow_bit1_neg_iff", []], ["mod", "theorem", "pow_bit1_nonneg_iff", []], ["mod", "theorem", "pow_bit1_nonpos_iff", []], ["mod", "theorem", "pow_bit1_pos_iff", []], ["add", "theorem", "pow_even_nonneg", []], ["add", "theorem", "pow_even_pos", []], ["add", "theorem", "pow_odd_neg", []], ["add", "theorem", "pow_odd_nonneg", []], ["add", "theorem", "pow_odd_nonpos", []], ["add", "theorem", "pow_odd_pos", []]]}]}, {"timestamp": 1612277026, "sha": "25c34e04", "message": "refactor(linear_algebra,algebra/algebra): generalize `linear_map.smul_right` (#5967)\n* the new `linear_map.smul_right` generalizes both the old\n `linear_map.smul_right` and the old `linear_map.smul_algebra_right`;\n* add `smul_comm_class` for `linear_map`s.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "def", "smul_algebra_right", ["linear_map"]], ["del", "theorem", "smul_algebra_right_apply", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "smul_right", ["linear_map"]], ["mod", "theorem", "smul_right_apply", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}]}, {"timestamp": 1612277024, "sha": "fc7daa36", "message": "feat(data/nat/parity): addition/subtraction of even/odd nats (#5934)\n Added various theorems pertaining to the addition and subtraction of even and odd natural numbers.", "changes": [{"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["del", "theorem", "add", ["nat", "even"]], ["add", "theorem", "add_even", ["nat", "even"]], ["add", "theorem", "add_odd", ["nat", "even"]], ["del", "theorem", "sub", ["nat", "even"]], ["add", "theorem", "sub_even", ["nat", "even"]], ["add", "theorem", "sub_odd", ["nat", "even"]], ["add", "theorem", "even_add'", ["nat"]], ["mod", "theorem", "even_div", ["nat"]], ["add", "theorem", "even_sub'", ["nat"]], ["mod", "theorem", "neg_one_pow_eq_one_iff_even", ["nat"]], ["add", "theorem", "add_even", ["nat", "odd"]], ["add", "theorem", "add_odd", ["nat", "odd"]], ["add", "theorem", "sub_even", ["nat", "odd"]], ["add", "theorem", "sub_odd", ["nat", "odd"]], ["add", "theorem", "odd_add'", ["nat"]], ["add", "theorem", "odd_add", ["nat"]], ["add", "theorem", "odd_sub'", ["nat"]], ["add", "theorem", "odd_sub", ["nat"]], ["mod", "theorem", "two_not_dvd_two_mul_add_one", ["nat"]], ["mod", "theorem", "two_not_dvd_two_mul_sub_one", ["nat"]]]}]}, {"timestamp": 1612277022, "sha": "893ce8b6", "message": "feat(tactic/norm_fin): tactic for normalizing `fin n` expressions (#5820)\nThis is based on #5791, with a new implementation using the\n`normalize_fin` function.", "changes": [{"oldPath": null, "newPath": "src/tactic/norm_fin.lean", "changes": [["add", "theorem", "add", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "bit0", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "bit1", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "cast", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "eq", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "le", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "lt", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "mul", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "one", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "reduce", ["tactic", "norm_fin", "normalize_fin"]], ["add", "theorem", "zero", ["tactic", "norm_fin", "normalize_fin"]], ["add", "def", "normalize_fin", ["tactic", "norm_fin"]], ["add", "theorem", "normalize_fin_iff", ["tactic", "norm_fin"]], ["add", "theorem", "add_nat", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "cast", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "cast_add", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "cast_le", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "cast_lt", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "cast_succ", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "coe", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "lt", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "mk", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "nat_add", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "of", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "reduce", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "succ", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "theorem", "zero", ["tactic", "norm_fin", "normalize_fin_lt"]], ["add", "def", "normalize_fin_lt", ["tactic", "norm_fin"]]]}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": null, "newPath": "test/norm_fin.lean", "changes": []}]}, {"timestamp": 1612266378, "sha": "75a7ce9f", "message": "refactor(*): rename subtype_congr to subtype_equiv (#6004)\nThis definition is closely related to `perm.subtype_perm`, so renaming will bring them closer in use. Also releavnt is #5875 which defines a separate `perm.subtype_congr`.", "changes": [{"oldPath": "src/category_theory/adjunction/lifting.lean", "newPath": "src/category_theory/adjunction/lifting.lean", "changes": []}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "def", "subtype_congr", ["equiv"]], ["del", "theorem", "subtype_congr_apply", ["equiv"]], ["del", "def", "subtype_congr_prop", ["equiv"]], ["del", "def", "subtype_congr_right", ["equiv"]], ["del", "theorem", "subtype_congr_symm_apply", ["equiv"]], ["add", "def", "subtype_equiv", ["equiv"]], ["add", "theorem", "subtype_equiv_apply", ["equiv"]], ["add", "def", "subtype_equiv_prop", ["equiv"]], ["add", "def", "subtype_equiv_right", ["equiv"]], ["add", "theorem", "subtype_equiv_symm_apply", ["equiv"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/symmetric.lean", "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": []}]}, {"timestamp": 1612250055, "sha": "fec8ee4e", "message": "chore(topology/bases): rewrite 2 proofs using tactic mode (#5996)\nIMHO they're more readable that way", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["mod", "theorem", "tendsto_subseq", ["topological_space", "first_countable_topology"]]]}]}, {"timestamp": 1612239246, "sha": "0c26bb09", "message": "feat(data/finset/basic): add lemmas about bUnion and images of functions on finsets (#5887)\nAdd lemmas about bUnion and images of functions on finsets. Part of #5695 in order to prove Hall's marriage theorem.\nCoauthors: @kmill @b-mehta", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "erase_bUnion", ["finset"]], ["add", "theorem", "image_iff", ["finset", "nonempty"]]]}]}, {"timestamp": 1612231584, "sha": "2c62c0bd", "message": "chore(scripts): update nolints.txt (#6006)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612231581, "sha": "a301ef7e", "message": "feat(order/compactly_generated, ring_theory/noetherian): the lattice of submodules is compactly generated (#5944)\nRedefines `is_compactly_generated` as a class\nProvides an instance of `is_compactly_generated` on `submodule R M`", "changes": [{"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["del", "def", "is_compactly_generated", ["complete_lattice"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1612220152, "sha": "4d3b26f8", "message": "feat(combinatorics/simple_graph/basic): add decidable instance for adjacency of complement (#6000)\nAdd instance that states that, if the adjacency relation for a simple graph is decidable, the adjacency relation for its complement is also decidable.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1612220150, "sha": "1706e552", "message": "feat(data/list/basic) add update_nth_comm (#5989)\nAs requested on Zulip at https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/list.2Eupdate_nth_comm/near/223007424", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "update_nth_comm", ["list"]], ["add", "theorem", "update_nth_nil", ["list"]], ["add", "theorem", "update_nth_succ", ["list"]]]}]}, {"timestamp": 1612220148, "sha": "9b779f40", "message": "refactor(ring_theory/ideal/*, ring_theory/jacobson): use `comm_semiring` instead of `comm_ring` for ideals (#5954)\nThis is the second pass at refactoring the definition of `ideal`. I have changed a `comm_ring` assumption to a `comm_semiring` assumption on many of the lemmas in `ring_theory/ideal/basic`. Most implied changes were very simple, with the usual exception of `jacobson`.\nI also moved out of `jacobson` the lemmas that were left-over from the previous refactor in this sequence.\nBesides changing such assumptions on other files, many of the lemmas in `ring_theory/ideal/basic` still using `comm_ring` and without explicit subtractions, deal with quotients.", "changes": [{"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "coe_subset_nonunits", []], ["mod", "theorem", "exists_max_ideal_of_mem_nonunits", []], ["del", "theorem", "exists_mem_ne_zero_iff_ne_bot", ["ideal"]], ["del", "theorem", "exists_mem_ne_zero_of_ne_bot", ["ideal"]], ["mod", "theorem", "maximal_of_no_maximal", ["ideal"]], ["del", "theorem", "lift_comp_mk", ["ideal", "quotient"]], ["del", "theorem", "lift_surjective", ["ideal", "quotient"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["add", "theorem", "exists_nonzero_mem_of_ne_bot", ["ideal"]], ["add", "theorem", "injective_quotient_le_comap_map", ["ideal"]], ["add", "theorem", "quotient_mk_maps_eq", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["del", "theorem", "injective_quotient_le_comap_map", ["ideal"]], ["del", "theorem", "quotient_mk_maps_eq", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}]}, {"timestamp": 1612206919, "sha": "829c1a50", "message": "chore(group_theory/coset): rename lemmas to follow naming conventions (#5998)\nRename `normal_of_eq_cosets` and `eq_cosets_of_normal` to follow naming conventions. Conclusion should be stated before the `of`.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "theorem", "eq_cosets_of_normal", []], ["mod", "theorem", "normal_of_eq_cosets", []]]}]}, {"timestamp": 1612206916, "sha": "684f4f50", "message": "chore(*): split some long lines (#5997)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "cast_le_pow_sub_div_sub", ["nat"]], ["mod", "theorem", "cast_nat_mul_right", ["semiconj_by"]]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["mod", "theorem", "fpow_fpow_self", ["commute"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["mod", "def", "functoriality_counit'", ["category_theory", "adjunction"]], ["mod", "def", "functoriality_counit", ["category_theory", "adjunction"]], ["mod", "def", "functoriality_unit'", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "cast_dvd", ["nat"]]]}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": [["mod", "theorem", "ext_mk", ["mvqpf", "cofix"]]]}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["mod", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["mod", "theorem", "coe_gpow", ["is_subgroup"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["mod", "theorem", "degree_eq_one_of_irreducible", ["is_alg_closed"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "findim_eq_zero", []], ["mod", "theorem", "span_of_finite", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "theorem", "eq_of_xn_modeq", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_le", ["pell"]]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "theorem", "comp_assoc", ["omega_complete_partial_order", "continuous_hom"]]]}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1612206914, "sha": "acabfa68", "message": "fix(archive/imo/*): fixed syntax for docstrings (#5994)", "changes": [{"oldPath": "archive/imo/imo1959_q1.lean", "newPath": "archive/imo/imo1959_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1972_b2.lean", "newPath": "archive/imo/imo1972_b2.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}]}, {"timestamp": 1612206911, "sha": "a84a80d5", "message": "fix(topology/algebra/infinite_sum): add missing decidable arguments (#5993)\nThese decidable instances were being inferred as classical instances, which meant these lemmas would not match other instances.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "has_sum_ite_eq", []], ["mod", "theorem", "tsum_ite_eq", []]]}]}, {"timestamp": 1612206909, "sha": "64283ce9", "message": "feat(list/{zip,indexes}): Add `zip_with` and `map_with_index` lemmas (#5974)\nAll proofs are due to @pechersky.", "changes": [{"oldPath": "src/data/list/indexes.lean", "newPath": "src/data/list/indexes.lean", "changes": [["add", "theorem", "map_with_index_core_eq", ["list"]], ["add", "theorem", "map_with_index_eq_enum_map", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "map_uncurry_zip_eq_zip_with", ["list"]], ["add", "theorem", "zip_with_map", ["list"]], ["add", "theorem", "zip_with_map_left", ["list"]], ["add", "theorem", "zip_with_map_right", ["list"]]]}]}, {"timestamp": 1612194379, "sha": "cbd88d63", "message": "chore(*) add mod_add_div' and div_add_mod' and golf proofs (#5962)\nResolves issue #1534.\nName of nat.mod_add_div shouldn't be changed as this is in core. Better name suggestions for mod_add_div' and div_add_mod' welcome.", "changes": [{"oldPath": "archive/imo/imo1962_q1.lean", "newPath": "archive/imo/imo1962_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1964_q1.lean", "newPath": "archive/imo/imo1964_q1.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "div_add_mod'", ["euclidean_domain"]], ["add", "theorem", "mod_add_div'", ["euclidean_domain"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "div_add_mod'", ["int"]], ["add", "theorem", "mod_add_div'", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_add_mod'", ["nat"]], ["add", "theorem", "div_add_mod", ["nat"]], ["add", "theorem", "mod_add_div'", ["nat"]]]}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "div_add_mod'", ["pnat"]], ["add", "theorem", "mod_add_div'", ["pnat"]]]}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1612182703, "sha": "866e4fda", "message": "chore(linear_algebra/quadratic_form): add two missing simp lemmas about subtraction (#5985)\nThis also reorders the instance definitions to keep the lemmas about subtraction near the ones about negation, and uses the `add := (+)` pattern to make definitions unfold more nicely, even though it probably doesn't make any difference.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "coe_fn_sub", ["quadratic_form"]], ["add", "theorem", "sub_apply", ["quadratic_form"]]]}]}, {"timestamp": 1612182701, "sha": "f2c84aa0", "message": "doc(algebra/category/*): provide two short docstrings and shorten lines (#5984)\nalso fixed one minor typo.", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["mod", "def", "tensor_hom", ["Module", "monoidal_category"]]]}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": [["mod", "theorem", "quot_mul", ["Mon", "colimits"]]]}]}, {"timestamp": 1612182699, "sha": "b1ab3107", "message": "chore(analysis/normed_space/inner_product): add {bilin,sesq}_form_of_inner_apply simp lemmas (#5982)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}]}, {"timestamp": 1612182697, "sha": "398e7ad5", "message": "feat(data/pnat/basic) pnat can_lift instances (#5977)\nAdd can_lift instances for pnat from nat and int", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}]}, {"timestamp": 1612182695, "sha": "89c79633", "message": "feat(category_theory/nat_iso): dsimp lemma for natural isomorphisms (#5973)\na little simp lemma", "changes": [{"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "is_iso_inv_app", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1612182693, "sha": "82735883", "message": "chore(category_theory/monad): generate simp lemmas (#5972)\nAdds a missing simps command to generate simp lemmas for the functor.", "changes": [{"oldPath": "src/category_theory/monad/products.lean", "newPath": "src/category_theory/monad/products.lean", "changes": []}]}, {"timestamp": 1612182691, "sha": "3f9b0355", "message": "chore(category_theory/adjunction): reflective lemmas (#5968)\nImproves the docstring and changes the name to be more appropriate (the lemma has nothing to do with essential images).", "changes": [{"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": []}]}, {"timestamp": 1612170642, "sha": "c5e0d103", "message": "chore(*): split some long lines (#5988)", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["mod", "theorem", "bijective_algebra_map_iff", ["algebra"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "theorem", "coe_prod_comm", ["mul_equiv"]]]}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": [["mod", "inductive", "pre_envel_group_rel'", ["rack"]]]}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": [["mod", "theorem", "lift_alg_hom_mk_alg_hom_apply", ["ring_quot"]], ["mod", "theorem", "neg", ["ring_quot", "rel"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/category_theory/hom_functor.lean", "newPath": "src/category_theory/hom_functor.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["mod", "def", "lift_colimit", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "ι_map", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "ι_post", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "ι_pre", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "iso_of_nat_iso_hom_desc", ["category_theory", "limits", "has_colimit"]], ["mod", "theorem", "of_cocones_iso", ["category_theory", "limits", "has_colimit"]], ["mod", "theorem", "of_cones_iso", ["category_theory", "limits", "has_limit"]], ["mod", "def", "cocone_point_unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "pre_π", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "theorem", "associator_naturality", ["category_theory", "limits", "coprod"]], ["mod", "def", "desc", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "desc_comp", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "map_codiag", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "map_inl_inr_codiag", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "map_swap", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "diag_map_fst_snd", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_fst_comp_snd_comp", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_map", ["category_theory", "limits", "prod"]], ["mod", "theorem", "map_swap", ["category_theory", "limits", "prod"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "def", "is_colimit", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "mk", ["category_theory", "limits", "has_binary_biproduct"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["mod", "theorem", "has_finite_wide_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["mod", "theorem", "has_finite_wide_pushouts_of_has_finite_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["mod", "def", "iso_strong_epi_mono", ["category_theory", "limits", "image"]], ["mod", "theorem", "iso_strong_epi_mono_hom_comp_ι", ["category_theory", "limits", "image"]], ["mod", "theorem", "iso_strong_epi_mono_inv_comp_mono", ["category_theory", "limits", "image"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernel_pair.lean", "newPath": "src/category_theory/limits/shapes/kernel_pair.lean", "changes": [["mod", "def", "cancel_right", ["category_theory", "is_kernel_pair"]], ["mod", "def", "cancel_right_of_mono", ["category_theory", "is_kernel_pair"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["mod", "def", "regular_of_is_pullback_fst_of_regular", ["category_theory"]], ["mod", "def", "regular_of_is_pullback_snd_of_regular", ["category_theory"]]]}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "newPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/skeletal.lean", "newPath": "src/category_theory/skeletal.lean", "changes": []}, {"oldPath": "src/data/lazy_list/basic.lean", "newPath": "src/data/lazy_list/basic.lean", "changes": [["mod", "theorem", "append_assoc", ["lazy_list"]], ["mod", "theorem", "mem_cons", ["lazy_list"]], ["mod", "def", "pmap", ["lazy_list"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "mul_vec_cons", ["matrix"]]]}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": [["mod", "theorem", "fold_add", ["multiset"]], ["mod", "theorem", "fold_eq_foldl", ["multiset"]], ["mod", "theorem", "fold_eq_foldr", ["multiset"]], ["mod", "theorem", "fold_erase_dup_idem", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["mod", "def", "ring_equiv_congr", ["mv_polynomial"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "generate_eq_generate_inter", ["filter"]], ["mod", "structure", "has_countable_basis", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/tactic/linarith/datatypes.lean", "newPath": "src/tactic/linarith/datatypes.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "def", "apply_add_hom", ["continuous_multilinear_map"]]]}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": [["mod", "theorem", "comp_continuous_on", ["is_local_extr_on"]], ["mod", "theorem", "is_local_extr", ["is_local_extr_on"]], ["mod", "theorem", "comp_continuous_on", ["is_local_max_on"]], ["mod", "theorem", "comp_continuous_on", ["is_local_min_on"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "test/finish2.lean", "newPath": "test/finish2.lean", "changes": []}, {"oldPath": "test/finish4.lean", "newPath": "test/finish4.lean", "changes": []}]}, {"timestamp": 1612149105, "sha": "f060e09c", "message": "chore(*): golf some proofs (#5983)\nAPI changes:\n* new lemmas `finset.card_filter_le`, `finset.compl_filter`, `finset.card_lt_univ_of_not_mem`, `fintype.card_le_of_embedding`, `fintype.card_lt_of_injective_not_surjective`;\n* rename `finset.card_le_of_inj_on` → `finset.le_card_of_inj_on_range`;\n* rename `card_lt_of_injective_of_not_mem` to `fintype.card_lt_of_injective_of_not_mem`;\n* generalize `card_units_lt` to a `monoid_with_zero`.", "changes": [{"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_filter_le", ["finset"]], ["del", "theorem", "card_le_of_inj_on", ["finset"]], ["add", "theorem", "le_card_of_inj_on_range", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "card_lt_card_of_injective_of_not_mem", []], ["add", "theorem", "card_lt_univ_of_not_mem", ["finset"]], ["add", "theorem", "compl_filter", ["finset"]], ["add", "theorem", "card_le_of_embedding", ["fintype"]], ["add", "theorem", "card_lt_of_injective_not_surjective", ["fintype"]], ["add", "theorem", "card_lt_of_injective_of_not_mem", ["fintype"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "range_inclusion", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/ring_theory/fintype.lean", "newPath": "src/ring_theory/fintype.lean", "changes": [["mod", "theorem", "card_units_lt", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1612144240, "sha": "609f5f74", "message": "chore(scripts): update nolints.txt (#5986)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612116722, "sha": "a15e64af", "message": "refactor(data/polynomial/degree/definitions): rw -> exact, use term mode proof (#5946)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}]}, {"timestamp": 1612076368, "sha": "4f4a9b58", "message": "feat(analysis/analytic/inverse): inverse of a formal multilinear series (#5852)\nWe construct the left inverse and a right inverse of a formal multilinear series with invertible first term, and we show that they coincide.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/analytic/inverse.lean", "changes": [["add", "theorem", "comp_right_inv", ["formal_multilinear_series"]], ["add", "theorem", "comp_right_inv_aux1", ["formal_multilinear_series"]], ["add", "theorem", "comp_right_inv_aux2", ["formal_multilinear_series"]], ["add", "theorem", "left_inv_coeff_one", ["formal_multilinear_series"]], ["add", "theorem", "left_inv_coeff_zero", ["formal_multilinear_series"]], ["add", "theorem", "left_inv_comp", ["formal_multilinear_series"]], ["add", "theorem", "left_inv_eq_right_inv", ["formal_multilinear_series"]], ["add", "theorem", "left_inv_remove_zero", ["formal_multilinear_series"]], ["add", "theorem", "right_inv_coeff", ["formal_multilinear_series"]], ["add", "theorem", "right_inv_coeff_one", ["formal_multilinear_series"]], ["add", "theorem", "right_inv_coeff_zero", ["formal_multilinear_series"]], ["add", "theorem", "right_inv_remove_zero", ["formal_multilinear_series"]]]}]}, {"timestamp": 1612057598, "sha": "1ea538b3", "message": "chore(scripts): update nolints.txt (#5976)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1612046692, "sha": "ae1b5302", "message": "chore(algebra/algebra/basic): add simp lemma about `algebra_map ℚ` (#5970)\nSince there is a subsingleton instance over ring_homs, we may as well let the simplifier replace `algebra_map` with `id`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_rat_rat", ["rat"]]]}]}, {"timestamp": 1612046690, "sha": "f596077f", "message": "feat(geometry/manifold/instances): sphere is a topological manifold (#5591)\nConstruct stereographic projection, as a local homeomorphism from the unit sphere in an inner product space `E` to a hyperplane in `E`. Make a charted space instance for the sphere, with these stereographic projections as the atlas.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "abs_sq_eq", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "inv", ["times_cont_diff"]], ["add", "theorem", "div", ["times_cont_diff_on"]], ["add", "theorem", "inv", ["times_cont_diff_on"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "coe_norm", []]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "theorem", "findim_orthogonal_span_singleton", []], ["add", "def", "from_orthogonal_span_singleton", ["linear_isometry_equiv"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/instances/sphere.lean", "changes": [["add", "theorem", "continuous_on_stereo_to_fun", []], ["add", "theorem", "continuous_stereo_inv_fun", []], ["add", "def", "stereo_inv_fun", []], ["add", "theorem", "stereo_inv_fun_apply", []], ["add", "def", "stereo_inv_fun_aux", []], ["add", "theorem", "stereo_inv_fun_aux_apply", []], ["add", "theorem", "stereo_inv_fun_aux_mem", []], ["add", "theorem", "stereo_inv_fun_ne_north_pole", []], ["add", "theorem", "stereo_left_inv", []], ["add", "theorem", "stereo_right_inv", []], ["add", "def", "stereo_to_fun", []], ["add", "theorem", "stereo_to_fun_apply", []], ["add", "def", "stereographic'", []], ["add", "theorem", "stereographic'_source", []], ["add", "theorem", "stereographic'_target", []], ["add", "def", "stereographic", []], ["add", "theorem", "stereographic_source", []], ["add", "theorem", "stereographic_target", []], ["add", "theorem", "times_cont_diff_on_stereo_to_fun", []], ["add", "theorem", "times_cont_diff_stereo_inv_fun_aux", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "smul", ["continuous_on"]]]}]}, {"timestamp": 1612037399, "sha": "a6c0442b", "message": "feat(field_theory/normal): Restriction is surjective (#5960)\nProves surjectivity of `alg_equiv.restrict_normal_hom`.\nAlso proves a bijectivity lemma which gives a cleaner construction of `alg_equiv.restrict_normal`.", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "lift_normal_commutes", ["alg_equiv"]], ["add", "theorem", "restrict_lift_normal", ["alg_equiv"]], ["mod", "theorem", "restrict_normal_commutes", ["alg_equiv"]], ["add", "theorem", "restrict_normal_hom_surjective", ["alg_equiv"]], ["add", "theorem", "lift_normal_commutes", ["alg_hom"]], ["add", "theorem", "normal_bijective", ["alg_hom"]], ["add", "theorem", "restrict_lift_normal", ["alg_hom"]], ["mod", "theorem", "restrict_normal_commutes", ["alg_hom"]]]}]}, {"timestamp": 1612037397, "sha": "48d05924", "message": "feat(algebra/lie/basic): define derived length and semisimple Lie algebras (#5930)\nWe also provide proofs of some basic characterisations", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "is_lie_abelian", ["function", "injective"]], ["add", "theorem", "is_lie_abelian", ["function", "surjective"]], ["add", "theorem", "lie_abelian_iff_equiv_lie_abelian", []], ["add", "theorem", "abelian_derived_abelian_of_ideal", ["lie_algebra"]], ["add", "theorem", "abelian_iff_derived_one_eq_bot", ["lie_algebra"]], ["add", "theorem", "abelian_iff_derived_succ_eq_bot", ["lie_algebra"]], ["add", "theorem", "abelian_of_solvable_ideal_eq_bot_iff", ["lie_algebra"]], ["add", "theorem", "derived_length_eq_derived_length_of_ideal", ["lie_algebra"]], ["add", "theorem", "derived_length_zero", ["lie_algebra"]], ["add", "theorem", "derived_series_of_bot_eq_bot", ["lie_algebra"]], ["add", "theorem", "derived_series_of_derived_length_succ", ["lie_algebra"]], ["add", "theorem", "bijective", ["lie_algebra", "equiv"]], ["add", "theorem", "injective", ["lie_algebra", "equiv"]], ["add", "theorem", "surjective", ["lie_algebra", "equiv"]], ["add", "theorem", "is_lie_abelian_bot", ["lie_algebra"]], ["add", "theorem", "is_semisimple_iff_no_abelian_ideals", ["lie_algebra"]], ["add", "theorem", "is_semisimple_iff_no_solvable_ideals", ["lie_algebra"]], ["add", "theorem", "is_solvable_of_injective", ["lie_algebra"]], ["add", "theorem", "le_solvable_ideal_solvable", ["lie_algebra"]], ["add", "theorem", "solvable_iff_le_radical", ["lie_algebra", "lie_ideal"]], ["add", "theorem", "ker_eq_bot", ["lie_algebra", "morphism"]], ["add", "theorem", "of_abelian_is_solvable", ["lie_algebra"]], ["add", "def", "top_equiv_self", ["lie_algebra"]], ["add", "theorem", "top_equiv_self_apply", ["lie_algebra"]], ["add", "theorem", "bot_of_map_eq_bot", ["lie_ideal"]], ["add", "theorem", "coe_hom_of_le", ["lie_ideal"]], ["add", "theorem", "derived_series_map_le_derived_series", ["lie_ideal"]], ["add", "def", "hom_of_le", ["lie_ideal"]], ["add", "theorem", "hom_of_le_apply", ["lie_ideal"]], ["add", "theorem", "hom_of_le_injective", ["lie_ideal"]], ["del", "theorem", "trivial_iff_derived_eq_bot", ["lie_module"]], ["add", "theorem", "trivial_iff_lower_central_eq_bot", ["lie_module"]], ["add", "theorem", "coe_zero_iff_zero", ["lie_subalgebra"]], ["add", "theorem", "ext_iff'", ["lie_subalgebra"]], ["mod", "theorem", "ext_iff", ["lie_subalgebra"]], ["add", "theorem", "hom_of_le_injective", ["lie_submodule"]], ["add", "theorem", "lie_abelian_iff_lie_self_eq_bot", ["lie_submodule"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "Inf_upward_closed_eq_succ_iff", ["nat"]], ["add", "theorem", "eq_Ici_of_nonempty_of_upward_closed", ["nat"]], ["add", "theorem", "nonempty_of_Inf_eq_succ", ["nat"]], ["add", "theorem", "nonempty_of_pos_Inf", ["nat"]]]}]}, {"timestamp": 1612030877, "sha": "539550d0", "message": "feat(topology/instances/nnreal): add has_sum_nat_add_iff and module docstring (#5716)", "changes": [{"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "has_sum_nat_add_iff", ["nnreal"]]]}]}, {"timestamp": 1612018234, "sha": "d6fe605f", "message": "chore(*): split some long lines (#5959)", "changes": [{"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["mod", "theorem", "of_induct", ["category_theory", "is_connected"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "cos_add_sin_mul_I_pow", ["complex"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["mod", "theorem", "equiv_to_pequiv_to_matrix", ["pequiv"]], ["mod", "theorem", "single_mul_single_right", ["pequiv"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "bind_congr", ["multiset"]], ["mod", "theorem", "card_product", ["multiset"]], ["mod", "theorem", "count_erase_of_ne", ["multiset"]], ["mod", "theorem", "count_erase_self", ["multiset"]], ["mod", "theorem", "count_inter", ["multiset"]], ["mod", "theorem", "count_union", ["multiset"]], ["mod", "theorem", "eq_of_mem_map_const", ["multiset"]], ["mod", "theorem", "erase_cons_tail", ["multiset"]], ["mod", "theorem", "exists_mem_of_rel_of_mem", ["multiset"]], ["mod", "theorem", "foldl_add", ["multiset"]], ["mod", "theorem", "foldl_cons", ["multiset"]], ["mod", "theorem", "foldr_add", ["multiset"]], ["mod", "theorem", "foldr_cons", ["multiset"]], ["mod", "theorem", "map_congr", ["multiset"]], ["mod", "theorem", "map_map", ["multiset"]], ["mod", "theorem", "map_union", ["multiset"]]]}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["mod", "theorem", "add_bind", ["free_abelian_group"]], ["mod", "theorem", "add_seq", ["free_abelian_group"]], ["mod", "theorem", "map_add", ["free_abelian_group"]], ["mod", "theorem", "map_sub", ["free_abelian_group"]], ["mod", "theorem", "neg_bind", ["free_abelian_group"]], ["mod", "theorem", "neg_seq", ["free_abelian_group"]], ["mod", "theorem", "seq_add", ["free_abelian_group"]], ["mod", "theorem", "seq_neg", ["free_abelian_group"]], ["mod", "theorem", "seq_sub", ["free_abelian_group"]], ["mod", "theorem", "sub_bind", ["free_abelian_group"]], ["mod", "theorem", "sub_seq", ["free_abelian_group"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "theorem", "coeff_restriction'", ["polynomial"]], ["mod", "theorem", "coeff_restriction", ["polynomial"]], ["mod", "theorem", "nat_degree_restriction", ["polynomial"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "coe_add", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "diam_union", ["emetric"]], ["mod", "theorem", "uniformity_dist_of_mem_uniformity", []]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "test/general_recursion.lean", "newPath": "test/general_recursion.lean", "changes": [["mod", "theorem", "cont", ["roption", "examples", "tree_map'"]], ["mod", "def", "intl", ["roption", "examples", "tree_map'"]], ["mod", "theorem", "cont", ["roption", "examples", "tree_map"]], ["mod", "theorem", "eqn_1", ["roption", "examples", "tree_map", "equations"]], ["mod", "theorem", "eqn_2", ["roption", "examples", "tree_map", "equations"]], ["mod", "def", "intl", ["roption", "examples", "tree_map"]]]}]}, {"timestamp": 1612001258, "sha": "8069521e", "message": "feat(measure_theory): Absolute continuity (#5948)\n* Define absolute continuity between measures (@mzinkevi)\n* State monotonicity of `ae_measurable` w.r.t. absolute continuity\n* Weaken some `measurable` assumptions in `prod.lean` to `ae_measurable`\n* Some docstring fixes\n* Some cleanup", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/group.lean", "newPath": "src/measure_theory/group.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "comp_measurable'", ["ae_measurable"]], ["add", "theorem", "ae_eq_comp'", ["measure_theory"]], ["add", "theorem", "mk", ["measure_theory", "measure", "absolutely_continuous"]], ["add", "theorem", "refl", ["measure_theory", "measure", "absolutely_continuous"]], ["add", "theorem", "rfl", ["measure_theory", "measure", "absolutely_continuous"]], ["add", "theorem", "trans", ["measure_theory", "measure", "absolutely_continuous"]], ["add", "def", "absolutely_continuous", ["measure_theory", "measure"]], ["add", "theorem", "absolutely_continuous_of_eq", ["measure_theory", "measure"]], ["add", "theorem", "preimage_null_of_map_null", ["measure_theory", "measure"]], ["mod", "def", "to_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["add", "theorem", "fst", ["ae_measurable"]], ["mod", "theorem", "prod_swap", ["ae_measurable"]], ["add", "theorem", "snd", ["ae_measurable"]], ["del", "theorem", "lintegral_prod'", ["measure_theory"]], ["mod", "theorem", "lintegral_prod", ["measure_theory"]], ["mod", "theorem", "lintegral_prod_mul", ["measure_theory"]], ["add", "theorem", "lintegral_prod_of_measurable", ["measure_theory"]], ["add", "theorem", "prod_fst_absolutely_continuous", ["measure_theory", "measure"]], ["add", "theorem", "prod_snd_absolutely_continuous", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/prod_group.lean", "newPath": "src/measure_theory/prod_group.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "compact_pi_infinite", []], ["mod", "theorem", "compact_univ_pi", []]]}]}, {"timestamp": 1611993904, "sha": "cf218639", "message": "doc(group_theory/order_of_element): Adding doc string (#5936)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1611989248, "sha": "cbcbaa06", "message": "feat(topology/category): compact hausdorff spaces are reflective in Top (#5955)\nShow explicitly that `CompHaus_to_Top` is a reflective functor via the Stone-Cech compactification.", "changes": [{"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": [["add", "def", "StoneCech_obj", []], ["add", "theorem", "Top_to_CompHaus_obj", []]]}]}, {"timestamp": 1611971332, "sha": "b44e9dd8", "message": "chore(scripts): update nolints.txt (#5965)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611954964, "sha": "686d005a", "message": "chore(*): fix some \"line too long\" lint errors by rewriting proofs/statements (#5958)", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1611947411, "sha": "e8e05265", "message": "feat(field_theory/polynomial_galois_group): New file (#5861)\nThis PR adds the file `polynomial_galois_group`. It contains some of the groundwork needed for proving the Abel-Ruffini theorem.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "mem_root_set", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "def", "root_set", ["polynomial"]], ["add", "theorem", "root_set_def", ["polynomial"]], ["add", "theorem", "root_set_zero", ["polynomial"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["mod", "theorem", "of_is_splitting_field", ["normal"]]]}, {"oldPath": null, "newPath": "src/field_theory/polynomial_galois_group.lean", "changes": [["add", "theorem", "card_of_separable", ["polynomial", "gal"]], ["add", "def", "gal_action_hom", ["polynomial", "gal"]], ["add", "theorem", "gal_action_hom_injective", ["polynomial", "gal"]], ["add", "def", "map_roots", ["polynomial", "gal"]], ["add", "theorem", "map_roots_bijective", ["polynomial", "gal"]], ["add", "theorem", "prime_degree_dvd_card", ["polynomial", "gal"]], ["add", "def", "restrict", ["polynomial", "gal"]], ["add", "def", "restrict_dvd", ["polynomial", "gal"]], ["add", "def", "restrict_prod", ["polynomial", "gal"]], ["add", "theorem", "restrict_prod_injective", ["polynomial", "gal"]], ["add", "theorem", "restrict_smul", ["polynomial", "gal"]], ["add", "def", "roots_equiv_roots", ["polynomial", "gal"]], ["add", "def", "gal", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "adjoin_root_set", ["polynomial", "splitting_field"]]]}]}, {"timestamp": 1611940880, "sha": "62cf420b", "message": "ci(lint-style): adjust output to integrate with github (#5952)", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": "scripts/lint_style_sanity_test.py", "newPath": "scripts/lint_style_sanity_test.py", "changes": []}]}, {"timestamp": 1611940878, "sha": "657cfeb6", "message": "doc(algebra/polynomial/big_operators): add / fix docstrings and lint (#5950)", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}]}, {"timestamp": 1611940876, "sha": "aabb8436", "message": "feat(analysis/normed_space/inner_product): existence of isometry to Euclidean space (#5949)\nA finite-dimensional inner product space admits an isometry (expressed using the new `linear_isometry_equiv` structure of #5867, cc @urkud) to Euclidean space.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "exists_is_orthonormal_basis'", []], ["add", "theorem", "inner_apply", ["is_R_or_C"]], ["del", "def", "equiv_fun_euclidean", ["is_basis"]], ["add", "def", "isometry_euclidean_of_orthonormal", ["is_basis"]], ["add", "def", "of_inner_product_space", ["linear_isometry_equiv"]], ["add", "theorem", "comp", ["orthonormal"]], ["add", "theorem", "inner_left_fintype", ["orthonormal"]], ["add", "theorem", "inner_right_fintype", ["orthonormal"]], ["add", "theorem", "inner_apply", ["pi_Lp"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "equiv_fin_of_dim_eq", ["finite_dimensional"]]]}]}, {"timestamp": 1611940874, "sha": "0d18179a", "message": "chore(analysis/normed_space/multilinear): rename variables (#5929)\nUse `E` and `E'` for indexed types and `G` and `G'` for `Type*`s.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "def", "continuous_multilinear_curry_fin0", []], ["mod", "theorem", "continuous_multilinear_curry_fin0_apply", []], ["mod", "def", "continuous_multilinear_curry_fin0_aux", []], ["mod", "theorem", "continuous_multilinear_curry_fin0_symm_apply", []], ["mod", "def", "continuous_multilinear_curry_fin1", []], ["mod", "theorem", "continuous_multilinear_curry_fin1_apply", []], ["mod", "theorem", "apply_zero_curry0", ["continuous_multilinear_map"]], ["mod", "theorem", "bounds_bdd_below", ["continuous_multilinear_map"]], ["mod", "theorem", "bounds_nonempty", ["continuous_multilinear_map"]], ["mod", "theorem", "continuous_eval_left", ["continuous_multilinear_map"]], ["mod", "def", "curry0", ["continuous_multilinear_map"]], ["mod", "theorem", "curry0_apply", ["continuous_multilinear_map"]], ["mod", "theorem", "curry0_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "curry0_uncurry0", ["continuous_multilinear_map"]], ["mod", "theorem", "fin0_apply_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "mk_pi_field_apply", ["continuous_multilinear_map"]], ["mod", "theorem", "mk_pi_field_apply_one_eq_self", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_image_sub_le'", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_image_sub_le", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_restr", ["continuous_multilinear_map"]], ["mod", "def", "restr", ["continuous_multilinear_map"]], ["mod", "theorem", "uncurry0_apply", ["continuous_multilinear_map"]], ["mod", "theorem", "uncurry0_curry0", ["continuous_multilinear_map"]], ["mod", "theorem", "uncurry0_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "mk_continuous_norm_le", ["multilinear_map"]], ["mod", "theorem", "restr_norm_le", ["multilinear_map"]]]}]}, {"timestamp": 1611934087, "sha": "9c5064cc", "message": "chore(linear_algebra/linear_independent): relax requirements to semiring and division_ring (#5953)\nNo lemma names or proofs were changed, this just reordered some lemmas so that they could be put into sections with weaker requirements.", "changes": [{"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}]}, {"timestamp": 1611929949, "sha": "783e11a5", "message": "fix(scripts): fix mixing absolute and relative paths to the linter (#5810)\nFix providing either relative or absolute paths to the linter.\nMake the linter emit outputted paths corresponding to the ones passed on the command line -- relative if relative, absolute if absolute.\nAlso adds a short set of tests.\nReported in: https://leanprover.zulipchat.com/#narrow/stream/208328-IMO-grand-challenge/topic/2013.20Q5 (and introduced in #5721).", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": null, "newPath": "scripts/lint_style_sanity_test.py", "changes": []}]}, {"timestamp": 1611919818, "sha": "41decdb1", "message": "chore(combinatorics/simple_graph/basic): remove classical locale (#5951)\nThis completes the simple graph part of the refactor that removed classical fintype instances.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["mod", "theorem", "card_common_neighbors_lt_degree", ["simple_graph", "adj"]], ["mod", "theorem", "card_common_neighbors_le_degree_left", ["simple_graph"]], ["mod", "theorem", "card_common_neighbors_le_degree_right", ["simple_graph"]], ["mod", "theorem", "card_common_neighbors_lt_card_verts", ["simple_graph"]], ["mod", "theorem", "degree_lt_card_verts", ["simple_graph"]]]}]}, {"timestamp": 1611919816, "sha": "15217c2c", "message": "refactor(topology/local_homeomorph): simplify `prod_trans` (#5915)\n10X faster elaboration\n(pretty-printed) proof term length 14637 -> 2046\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}]}, {"timestamp": 1611913329, "sha": "bbec0991", "message": "refactor(data/real/nnreal): shorter proof of `div_lt_iff` (#5945)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1611902961, "sha": "145f1270", "message": "feat(ring_theory/polynomial/chebyshev/defs): Chebyshev polynomials of the second kind (#5793)\nThis will define Chebyshev polynomials of the second kind and introduce some basic properties:\n- [x] Define Chebyshev polynomials of the second kind.\n- [x] Relate Chebyshev polynomials of the first and second kind through recursive formulae\n- [x] Prove trigonometric identity regarding Chebyshev polynomials of the second kind\n- [x] Compute the derivative of the Chebyshev polynomials of the first kind in terms of the Chebyshev polynomials of the second kind. \n- [x] Compute the derivative of the Chebyshev polynomials of the second kind in terms of the Chebyshev polynomials of the first kind.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "chebyshev₂_complex_cos", []], ["add", "theorem", "sin_nat_succ_mul", []]]}, {"oldPath": "src/ring_theory/polynomial/chebyshev/defs.lean", "newPath": "src/ring_theory/polynomial/chebyshev/defs.lean", "changes": [["add", "theorem", "add_one_mul_chebyshev₁_eq_poly_in_chebyshev₂", ["polynomial"]], ["add", "theorem", "chebyshev₁_derivative_eq_chebyshev₂", ["polynomial"]], ["add", "theorem", "chebyshev₁_eq_X_mul_chebyshev₁_sub_pol_chebyshev₂", ["polynomial"]], ["add", "theorem", "chebyshev₁_eq_chebyshev₂_sub_X_mul_chebyshev₂", ["polynomial"]], ["add", "theorem", "chebyshev₂_add_two", ["polynomial"]], ["add", "theorem", "chebyshev₂_eq_X_mul_chebyshev₂_add_chebyshev₁", ["polynomial"]], ["add", "theorem", "chebyshev₂_of_two_le", ["polynomial"]], ["add", "theorem", "chebyshev₂_one", ["polynomial"]], ["add", "theorem", "chebyshev₂_two", ["polynomial"]], ["add", "theorem", "chebyshev₂_zero", ["polynomial"]], ["add", "theorem", "map_chebyshev₂", ["polynomial"]], ["add", "theorem", "one_sub_X_pow_two_mul_chebyshev₂_eq_pol_in_chebyshev₁", ["polynomial"]], ["add", "theorem", "one_sub_X_pow_two_mul_derivative_chebyshev₁_eq_poly_in_chebyshev₁", ["polynomial"]]]}]}, {"timestamp": 1611895000, "sha": "1edd85c3", "message": "chore(scripts): update nolints.txt (#5947)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611884053, "sha": "4dca6e1a", "message": "chore(data/fintype/basic): Remove duplicate instance (#5943)\nWe already have `subtype.fintype`, there is no need for `fintype.subtype_of_fintype` which does the same thing", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1611878393, "sha": "69e7f143", "message": "chore(combinatorics/simple_graph): generalise decidability proofs (#5938)\nThis generalises the decidable instances so they're more applicable, and also golfs the proofs.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1611866203, "sha": "2cbaa9cc", "message": "feat(data/list/basic): add diff_erase (#5941)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "diff_cons_right", ["list"]], ["add", "theorem", "diff_erase", ["list"]]]}]}, {"timestamp": 1611861338, "sha": "28702123", "message": "chore(data/sym2): golf decidability proofs (#5940)\nThis golfs the decidable instances, and removes a redundant one (`from_rel.decidable_as_set` is automatically inferred from `from_rel.decidable_pred`)", "changes": [{"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": []}]}, {"timestamp": 1611851765, "sha": "645dc60f", "message": "refactor(analysis/calculus/inverse): inverse of C^k functions over R or C (#5926)\nSome results on the local inverse of smooth functions are currently formulated only for real functions, but they work as well for complex functions. We formulate them uniformly, assuming `is_R_or_C`.", "changes": [{"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "norm_image_sub_le_of_norm_has_fderiv_within_le'", ["is_R_or_C"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["del", "theorem", "real_of_complex", ["has_deriv_at"]], ["add", "theorem", "I_to_complex", ["is_R_or_C"]], ["add", "theorem", "abs_to_complex", ["is_R_or_C"]], ["add", "theorem", "conj_to_complex", ["is_R_or_C"]], ["add", "theorem", "im_to_complex", ["is_R_or_C"]], ["add", "theorem", "norm_sq_to_complex", ["is_R_or_C"]], ["add", "theorem", "re_to_complex", ["is_R_or_C"]], ["del", "theorem", "real_of_complex", ["times_cont_diff"]], ["del", "theorem", "real_of_complex", ["times_cont_diff_at"]]]}, {"oldPath": null, "newPath": "src/analysis/complex/real_deriv.lean", "changes": [["add", "theorem", "real_of_complex", ["has_deriv_at"]], ["add", "theorem", "real_of_complex", ["times_cont_diff"]], ["add", "theorem", "real_of_complex", ["times_cont_diff_at"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["del", "theorem", "I_to_complex", ["is_R_or_C"]], ["del", "theorem", "abs_to_complex", ["is_R_or_C"]], ["del", "theorem", "conj_to_complex", ["is_R_or_C"]], ["del", "theorem", "im_to_complex", ["is_R_or_C"]], ["del", "theorem", "norm_sq_to_complex", ["is_R_or_C"]], ["del", "theorem", "re_to_complex", ["is_R_or_C"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1611839820, "sha": "c43c709f", "message": "fix(data/dfinsupp): fix overly strict type-class arguments (#5935)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "coe_dfinsupp_prod", ["monoid_hom"]], ["mod", "theorem", "dfinsupp_prod_apply", ["monoid_hom"]], ["mod", "theorem", "map_dfinsupp_prod", ["monoid_hom"]]]}]}, {"timestamp": 1611821528, "sha": "82481e30", "message": "feat(analysis/normed_space/inner_product): existence of orthonormal basis (#5734)\nDefine `orthonormal` sets (indexed) of vectors in an inner product space `E`. Show that a finite-dimensional inner product space has an orthonormal basis.\nCo-authored by: Busiso Chisala", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "eq_of_pow_two_eq_pow_two", []]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "exists_is_orthonormal_basis", []], ["add", "theorem", "exists_is_orthonormal_dense_span", []], ["add", "theorem", "exists_maximal_orthonormal", []], ["add", "theorem", "exists_subset_is_orthonormal_basis", []], ["add", "theorem", "exists_subset_is_orthonormal_dense_span", []], ["add", "theorem", "inner_sum", ["finsupp"]], ["add", "theorem", "sum_inner", ["finsupp"]], ["add", "theorem", "inner_self_eq_norm_sq_to_K", []], ["add", "def", "equiv_fun_euclidean", ["is_basis"]], ["add", "theorem", "is_basis_of_orthonormal_of_card_eq_findim", []], ["add", "theorem", "maximal_orthonormal_iff_dense_span", []], ["add", "theorem", "maximal_orthonormal_iff_is_basis_of_finite_dimensional", []], ["add", "theorem", "maximal_orthonormal_iff_orthogonal_complement_eq_bot", []], ["add", "theorem", "inner_finsupp_eq_zero", ["orthonormal"]], ["add", "theorem", "inner_left_finsupp", ["orthonormal"]], ["add", "theorem", "inner_right_finsupp", ["orthonormal"]], ["add", "theorem", "linear_independent", ["orthonormal"]], ["add", "theorem", "ne_zero", ["orthonormal"]], ["add", "def", "orthonormal", []], ["add", "theorem", "orthonormal_Union_of_directed", []], ["add", "theorem", "orthonormal_empty", []], ["add", "theorem", "orthonormal_iff_ite", []], ["add", "theorem", "orthonormal_sUnion_of_directed", []], ["add", "theorem", "orthonormal_subtype_iff_ite", []], ["add", "theorem", "coe_inner", ["submodule"]], ["add", "theorem", "inf_orthogonal_eq_bot", ["submodule"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "norm_smul_inv_norm", []]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "prod_ite_eq'", ["finsupp"]], ["mod", "theorem", "prod_ite_eq", ["finsupp"]], ["add", "theorem", "sum_ite_self_eq'", ["finsupp"]], ["add", "theorem", "sum_ite_self_eq", ["finsupp"]]]}]}, {"timestamp": 1611797994, "sha": "95454452", "message": "chore(scripts): update nolints.txt (#5931)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611789548, "sha": "6585eff9", "message": "feat(archive/imo): formalize IMO 2013 problem Q5 (#5787)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2013_q5.lean", "changes": [["add", "theorem", "f_pos_of_pos", []], ["add", "theorem", "fixed_point_of_gt_1", []], ["add", "theorem", "fixed_point_of_pos_nat_pow", []], ["add", "theorem", "fx_gt_xm1", []], ["add", "theorem", "imo2013_q5", []], ["add", "theorem", "le_of_all_pow_lt_succ'", []], ["add", "theorem", "le_of_all_pow_lt_succ", []], ["add", "theorem", "pow_f_le_f_pow", []]]}]}, {"timestamp": 1611784774, "sha": "3e599600", "message": "feat(ring_theory/nullstellensatz): Classical Nullstellensatz (#5760)\nThis file states and proves Hilbert's classical nullstellensatz for multi-variate polynomials over an algebraically closed field.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "algebra_map_surjective_of_is_integral'", ["is_alg_closed"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/nullstellensatz.lean", "changes": [["add", "theorem", "is_maximal_iff_eq_vanishing_ideal_singleton", ["mv_polynomial"]], ["add", "theorem", "vanishing_ideal_zero_locus", ["mv_polynomial", "is_prime"]], ["add", "theorem", "le_vanishing_ideal_zero_locus", ["mv_polynomial"]], ["add", "theorem", "mem_vanishing_ideal_iff", ["mv_polynomial"]], ["add", "theorem", "mem_vanishing_ideal_singleton_iff", ["mv_polynomial"]], ["add", "theorem", "mem_zero_locus_iff", ["mv_polynomial"]], ["add", "def", "point_to_point", ["mv_polynomial"]], ["add", "theorem", "point_to_point_zero_locus_le", ["mv_polynomial"]], ["add", "theorem", "radical_le_vanishing_ideal_zero_locus", ["mv_polynomial"]], ["add", "def", "vanishing_ideal", ["mv_polynomial"]], ["add", "theorem", "vanishing_ideal_anti_mono", ["mv_polynomial"]], ["add", "theorem", "vanishing_ideal_empty", ["mv_polynomial"]], ["add", "theorem", "vanishing_ideal_point_to_point", ["mv_polynomial"]], ["add", "theorem", "vanishing_ideal_zero_locus_eq_radical", ["mv_polynomial"]], ["add", "def", "zero_locus", ["mv_polynomial"]], ["add", "theorem", "zero_locus_anti_mono", ["mv_polynomial"]], ["add", "theorem", "zero_locus_bot", ["mv_polynomial"]], ["add", "theorem", "zero_locus_top", ["mv_polynomial"]], ["add", "theorem", "zero_locus_vanishing_ideal_galois_connection", ["mv_polynomial"]], ["add", "theorem", "zero_locus_vanishing_ideal_le", ["mv_polynomial"]]]}]}, {"timestamp": 1611771585, "sha": "4cc0d525", "message": "refactor(data/set/basic): simpler proofs (#5920)\nThis replaces many uses of `simp` and `finish` with direct term proofs\nto speed up the overall compilation of the file.\nThis PR is WIP in the sense that not all of `set.basic` is converted,\nbut there are no dependencies between the changes so this can be merged\nat any point.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "ball_empty_iff", ["set"]], ["mod", "theorem", "compl_comp_compl", ["set"]], ["mod", "theorem", "compl_subset_comm", ["set"]], ["mod", "theorem", "compl_subset_compl", ["set"]], ["mod", "theorem", "compl_union_self", ["set"]], ["mod", "theorem", "diff_subset", ["set"]], ["mod", "theorem", "empty_inter", ["set"]], ["mod", "theorem", "empty_not_nonempty", ["set"]], ["mod", "theorem", "empty_subset", ["set"]], ["mod", "theorem", "empty_union", ["set"]], ["mod", "theorem", "eq_empty_iff_forall_not_mem", ["set"]], ["mod", "theorem", "eq_empty_of_subset_empty", ["set"]], ["mod", "theorem", "eq_of_mem_singleton", ["set"]], ["mod", "theorem", "eq_of_subset_of_subset", ["set"]], ["mod", "theorem", "eq_sep_of_subset", ["set"]], ["mod", "theorem", "eq_singleton_iff_unique_mem", ["set"]], ["mod", "theorem", "eq_univ_of_univ_subset", ["set"]], ["mod", "theorem", "forall_insert_of_forall", ["set"]], ["mod", "theorem", "forall_not_of_sep_empty", ["set"]], ["mod", "theorem", "forall_of_forall_insert", ["set"]], ["mod", "theorem", "insert_eq", ["set"]], ["mod", "theorem", "insert_nonempty", ["set"]], ["mod", "theorem", "insert_subset_insert", ["set"]], ["mod", "theorem", "insert_union", ["set"]], ["mod", "theorem", "inter_assoc", ["set"]], ["mod", "theorem", "inter_comm", ["set"]], ["mod", "theorem", "inter_empty", ["set"]], ["mod", "theorem", "inter_eq_self_of_subset_left", ["set"]], ["mod", "theorem", "inter_eq_self_of_subset_right", ["set"]], ["mod", "theorem", "inter_self", ["set"]], ["mod", "theorem", "inter_subset_inter", ["set"]], ["mod", "theorem", "inter_subset_left", ["set"]], ["mod", "theorem", "inter_subset_right", ["set"]], ["mod", "theorem", "mem_insert", ["set"]], ["mod", "theorem", "mem_insert_iff", ["set"]], ["mod", "theorem", "mem_inter", ["set"]], ["mod", "theorem", "mem_of_mem_insert_of_ne", ["set"]], ["mod", "theorem", "mem_of_mem_inter_left", ["set"]], ["mod", "theorem", "mem_of_mem_inter_right", ["set"]], ["mod", "theorem", "mem_of_mem_of_subset", ["set"]], ["mod", "theorem", "mem_of_subset_of_mem", ["set"]], ["mod", "theorem", "mem_sep_eq", ["set"]], ["mod", "theorem", "mem_singleton", ["set"]], ["mod", "theorem", "mem_singleton_iff", ["set"]], ["mod", "theorem", "mem_singleton_of_eq", ["set"]], ["mod", "theorem", "ne_empty_iff_nonempty", ["set"]], ["mod", "theorem", "ne_insert_of_not_mem", ["set"]], ["mod", "theorem", "ne_empty", ["set", "nonempty"]], ["mod", "theorem", "not_subset_empty", ["set", "nonempty"]], ["mod", "theorem", "nonempty_diff", ["set"]], ["mod", "theorem", "not_mem_empty", ["set"]], ["mod", "theorem", "not_not_mem", ["set"]], ["mod", "theorem", "not_subset", ["set"]], ["mod", "theorem", "pair_comm", ["set"]], ["mod", "theorem", "pair_eq_singleton", ["set"]], ["mod", "theorem", "sep_subset", ["set"]], ["mod", "theorem", "sep_univ", ["set"]], ["mod", "theorem", "set_compr_eq_eq_singleton", ["set"]], ["mod", "theorem", "singleton_def", ["set"]], ["mod", "theorem", "singleton_subset_iff", ["set"]], ["mod", "theorem", "singleton_union", ["set"]], ["add", "theorem", "subset_iff_inter_eq_left", ["set"]], ["add", "theorem", "subset_iff_inter_eq_right", ["set"]], ["del", "theorem", "subset_iff_inter_eq_self", ["set"]], ["mod", "theorem", "subset_insert", ["set"]], ["mod", "theorem", "subset_inter", ["set"]], ["mod", "theorem", "union_assoc", ["set"]], ["mod", "theorem", "union_comm", ["set"]], ["mod", "theorem", "union_compl_self", ["set"]], ["mod", "theorem", "union_empty", ["set"]], ["mod", "theorem", "union_insert", ["set"]], ["mod", "theorem", "union_self", ["set"]], ["mod", "theorem", "union_singleton", ["set"]], ["mod", "theorem", "union_subset_union", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "and_congr_left'", []], ["add", "theorem", "and_congr_left", []], ["add", "theorem", "and_congr_right'", []], ["add", "theorem", "ball_or_left_distrib", []], ["add", "theorem", "bex_eq_left", []], ["add", "theorem", "bex_or_left_distrib", []], ["add", "theorem", "or_congr_left", []], ["add", "theorem", "or_congr_right", []]]}]}, {"timestamp": 1611771583, "sha": "8af7e08e", "message": "feat(data/fintype/basic): make subtype_of_fintype computable (#5919)\nThis smokes out a few places downstream that are missing decidability hypotheses needed for the fintype instance to exist.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph/degree_sum.lean", "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": [["mod", "theorem", "even_card_odd_degree_vertices", ["simple_graph"]], ["mod", "theorem", "exists_ne_odd_degree_of_exists_odd_degree", ["simple_graph"]], ["mod", "theorem", "odd_card_odd_degree_vertices_ne", ["simple_graph"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "eq_top_of_card_eq", ["subgroup"]]]}]}, {"timestamp": 1611771581, "sha": "f45dee43", "message": "feat(algebra/*,linear_algebra/basic,ring_theory/ideal): lemmas about span of finite subsets and nontrivial maximal ideals (#5641)", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "mem_span_mul_finite_of_mem_mul", ["submodule"]], ["add", "theorem", "mem_span_mul_finite_of_mem_span_mul", ["submodule"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "subset_mul", ["finset"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mem_span_finite_of_mem_span", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "ne_bot_of_is_maximal_of_not_is_field", ["ring"]]]}]}, {"timestamp": 1611771580, "sha": "32fdb81b", "message": "feat(data/zsqrtd/to_real): Add `to_real` (#5640)\nAlso adds `norm_eq_zero`, and replaces some calls to simp with direct lemma applications", "changes": [{"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": [["add", "theorem", "dmuld", ["zsqrtd"]], ["add", "theorem", "hom_ext", ["zsqrtd"]], ["add", "def", "lift", ["zsqrtd"]], ["add", "theorem", "lift_injective", ["zsqrtd"]], ["add", "theorem", "norm_eq_zero", ["zsqrtd"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/zsqrtd/to_real.lean", "changes": [["add", "theorem", "to_real_injective", ["zsqrtd"]]]}]}, {"timestamp": 1611764392, "sha": "1011601d", "message": "feat(algebra/continued_fractions): add termination iff rat lemmas (#4867)\n### What\nShow that the computation of a continued fraction terminates if and only if we compute the continued fraction of a rational number.\n### How\n1. Show that every intermediate operation involved in the computation of a continued fraction returns a value that has a rational counterpart. This then shows that a terminating continued fraction corresponds to a rational value.\n2. Show that the operations involved in the computation of a continued fraction for rational numbers only return results that can be lifted to the result of the same operations done on an equal value in a suitable linear ordered, archimedean field with a floor function.\n3. Show that the continued fraction of a rational number terminates.\n4. Set up the needed coercions to express the results above starting from [here](https://github.com/leanprover-community/mathlib/compare/kappelmann_termination_iff_rat?expand=1#diff-1dbcf8473152b2d8fca024352bd899af37669b8af18792262c2d5d6f31148971R129). I did not know where to put these lemmas. Please let me know your opinion.\n4. Extract 4 auxiliary lemmas that are not specific to continued fraction but more generally about rational numbers, integers, and natural numbers starting from [here](https://github.com/leanprover-community/mathlib/compare/kappelmann_termination_iff_rat?expand=1#diff-1dbcf8473152b2d8fca024352bd899af37669b8af18792262c2d5d6f31148971R28). Again, I did not know where to put these. Please let me know your opinion.", "changes": [{"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": [["add", "def", "map", ["generalized_continued_fraction", "pair"]], ["del", "def", "coe_to_seq", ["generalized_continued_fraction", "seq"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": [["add", "def", "mapFr", ["generalized_continued_fraction", "int_fract_pair"]]]}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/computation/terminates_iff_rat.lean", "changes": [["add", "theorem", "coe_of_h_rat_eq", ["generalized_continued_fraction"]], ["add", "theorem", "coe_of_rat_eq", ["generalized_continued_fraction"]], ["add", "theorem", "coe_of_s_nth_rat_eq", ["generalized_continued_fraction"]], ["add", "theorem", "coe_of_s_rat_eq", ["generalized_continued_fraction"]], ["add", "theorem", "exists_gcf_pair_rat_eq_nth_conts", ["generalized_continued_fraction"]], ["add", "theorem", "exists_gcf_pair_rat_eq_of_nth_conts_aux", ["generalized_continued_fraction"]], ["add", "theorem", "exists_rat_eq_nth_convergent", ["generalized_continued_fraction"]], ["add", "theorem", "exists_rat_eq_nth_denominator", ["generalized_continued_fraction"]], ["add", "theorem", "exists_rat_eq_nth_numerator", ["generalized_continued_fraction"]], ["add", "theorem", "exists_rat_eq_of_terminates", ["generalized_continued_fraction"]], ["add", "theorem", "coe_of_rat_eq", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "coe_stream_nth_rat_eq", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "coe_stream_rat_eq", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "exists_nth_stream_eq_none_of_rat", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "of_inv_fr_num_lt_num_of_pos", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "stream_nth_fr_num_le_fr_num_sub_n_rat", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "stream_succ_nth_fr_num_lt_nth_fr_num_rat", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "of_terminates_iff_of_rat_terminates", ["generalized_continued_fraction"]], ["add", "theorem", "terminates_iff_rat", ["generalized_continued_fraction"]], ["add", "theorem", "terminates_of_rat", ["generalized_continued_fraction"]]]}]}, {"timestamp": 1611749678, "sha": "9adf9bb6", "message": "feat(order/ideal): add partial_order instance to order.ideal (#5909)\nAdd some instances for `order.ideal`, some of them conditional on\nhaving extra structure on the carrier preorder `P`:\n* In all cases, `ideal P` is a partial order.\n* If `P` has a bottom element, so does `ideal P`.\n* If `P` has a top element, so does `ideal P`.\n (Although this could be weekened to `P` being directed.)\nAlso, add some `@[ext]`, `@[simp]`, `@[trans]` lemmas.", "changes": [{"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": [["add", "theorem", "bot_mem", ["order", "ideal"]], ["add", "theorem", "ext", ["order", "ideal"]], ["add", "theorem", "mem_of_mem_of_le", ["order", "ideal"]], ["add", "theorem", "principal_le_iff", ["order", "ideal"]], ["add", "theorem", "sup_mem", ["order", "ideal"]], ["add", "theorem", "sup_mem_iff", ["order", "ideal"]]]}]}, {"timestamp": 1611749676, "sha": "7244b43c", "message": "refactor(topology/local_homeomorph): simpler proof of `prod_symm` (#5906)\n17X smaller proof\nco-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}]}, {"timestamp": 1611749674, "sha": "a859f10d", "message": "refactor(computability/primrec): simpler proof of `primrec.of_equiv` (#5905)\n12X smaller proof term\nco-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}]}, {"timestamp": 1611749672, "sha": "35638edb", "message": "refactor(data/set/basic): simpler proof of `union_subset_iff` (#5904)\n12X smaller proof term\nco-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}]}, {"timestamp": 1611749670, "sha": "c64aa132", "message": "chore(*): bump to lean-3.26.0 (#5895)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/choose.lean", "newPath": "src/tactic/choose.lean", "changes": []}, {"oldPath": "src/tactic/field_simp.lean", "newPath": "src/tactic/field_simp.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/simp_rw.lean", "newPath": "src/tactic/simp_rw.lean", "changes": []}, {"oldPath": "src/tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/zify.lean", "newPath": "src/tactic/zify.lean", "changes": []}, {"oldPath": "test/squeeze.lean", "newPath": "test/squeeze.lean", "changes": []}]}, {"timestamp": 1611749668, "sha": "78a518a3", "message": "feat(measure_theory/independence): define independence of sets of sets, measurable spaces, sets, functions (#5848)\nThis first PR about independence contains definitions, a few lemmas about independence of unions/intersections of sets of sets, and a proof that two measurable spaces are independent iff generating pi-systems are independent (included in this PR to demonstrate usability of the definitions).", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ext_on_measurable_space_of_generate_finite", ["measure_theory"]], ["add", "theorem", "smul_finite", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/probability_theory/independence.lean", "changes": [["add", "theorem", "Indep_sets", ["probability_theory", "Indep"]], ["add", "theorem", "indep", ["probability_theory", "Indep"]], ["add", "def", "Indep", ["probability_theory"]], ["add", "def", "Indep_fun", ["probability_theory"]], ["add", "def", "Indep_set", ["probability_theory"]], ["add", "theorem", "indep_sets", ["probability_theory", "Indep_sets"]], ["add", "def", "Indep_sets", ["probability_theory"]], ["add", "theorem", "indep_sets", ["probability_theory", "indep"]], ["add", "theorem", "symm", ["probability_theory", "indep"]], ["add", "def", "indep", ["probability_theory"]], ["add", "def", "indep_fun", ["probability_theory"]], ["add", "theorem", "indep_of_indep_of_le_left", ["probability_theory"]], ["add", "theorem", "indep_of_indep_of_le_right", ["probability_theory"]], ["add", "def", "indep_set", ["probability_theory"]], ["add", "theorem", "Inter", ["probability_theory", "indep_sets"]], ["add", "theorem", "Union", ["probability_theory", "indep_sets"]], ["add", "theorem", "indep", ["probability_theory", "indep_sets"]], ["add", "theorem", "inter", ["probability_theory", "indep_sets"]], ["add", "theorem", "symm", ["probability_theory", "indep_sets"]], ["add", "theorem", "union", ["probability_theory", "indep_sets"]], ["add", "theorem", "union_iff", ["probability_theory", "indep_sets"]], ["add", "def", "indep_sets", ["probability_theory"]], ["add", "theorem", "indep_sets_of_indep_sets_of_le_left", ["probability_theory"]], ["add", "theorem", "indep_sets_of_indep_sets_of_le_right", ["probability_theory"]]]}]}, {"timestamp": 1611736924, "sha": "e5f9409c", "message": "refactor(category_theory/abelian): golf `mono_of_kernel_ι_eq_zero` (#5914)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}]}, {"timestamp": 1611736919, "sha": "1688b3e8", "message": "refactor(data/complex/exponential): simplify proof of `tan_eq_sin_div_cos` (#5913)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}]}, {"timestamp": 1611736917, "sha": "e927930c", "message": "refactor(data/holor): simp -> refl (#5912)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}]}, {"timestamp": 1611736915, "sha": "38f6e050", "message": "refactor(algebra/category/Group/limits): simp -> refl (#5911)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}]}, {"timestamp": 1611736913, "sha": "6eae6303", "message": "refactor(data/real/golden_ratio): simpler proof of `gold_pos` (#5910)\n13X smaller (pretty-printed) proof term\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}]}, {"timestamp": 1611736911, "sha": "e9a1e2b3", "message": "refactor(data/pequiv): simpler proof of `pequiv.of_set_univ` (#5907)\n17X smaller proof\nco-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["mod", "theorem", "of_set_univ", ["pequiv"]]]}]}, {"timestamp": 1611736910, "sha": "fd55e57f", "message": "refactor(algebra/group/basic): simp -> rw in `sub_eq_sub_iff_sub_eq_sub` (#5903)\nco-authors: `lean-gptf`, Yuhuai Wu", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}]}, {"timestamp": 1611736908, "sha": "1cd22862", "message": "chore(data/finset/preimage): add missing simp lemmas (#5902)", "changes": [{"oldPath": "src/data/finset/preimage.lean", "newPath": "src/data/finset/preimage.lean", "changes": [["add", "theorem", "preimage_compl", ["finset"]], ["add", "theorem", "preimage_empty", ["finset"]], ["add", "theorem", "preimage_inter", ["finset"]], ["add", "theorem", "preimage_union", ["finset"]], ["add", "theorem", "preimage_univ", ["finset"]]]}]}, {"timestamp": 1611736906, "sha": "20d6b6a7", "message": "chore(*): add more simp lemmas, refactor theorems about `fintype.sum` (#5888)\n* `finset.prod_sum_elim`, `finset.sum_sum_elim`: use `finset.map`\n instead of `finset.image`;\n* add `multilinear_map.coe_mk_continuous`,\n `finset.order_emb_of_fin_mem`, `fintype.univ_sum_type`,\n `fintype.prod_sum_elim`, `sum.update_elim_inl`,\n `sum.update_elim_inr`, `sum.update_inl_comp_inl`,\n `sum.update_inl_comp_inr`, `sum.update_inr_comp_inl`,\n `sum.update_inr_comp_inr` and `apply` versions of `sum.*_comp_*` lemmas,\n* move some lemmas about `function.update` from `data.set.function` to `logic.function.basic`;\n* rename `sum.elim_injective` to `function.injective.sum_elim`\n* `simps` lemmas for `function.embedding.inl` and\n `function.embedding.inr`;\n* for `e : α ≃o β`, simplify `e.to_equiv.symm` to `e.symm_to_equiv`;\n* add `continuous_multilinear_map.to_multilinear_map_add`,\n `continuous_multilinear_map.to_multilinear_map_smul`, and `simps`\n for `continuous_multilinear_map.to_multilinear_map_linear`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "coe_mk_continuous", ["multilinear_map"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "order_emb_of_fin_mem", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_sum_type", []]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_sum_elim", ["fintype"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["del", "theorem", "update_comp_eq_of_injective'", ["function"]], ["del", "theorem", "update_comp_eq_of_injective", ["function"]]]}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["add", "theorem", "sum_elim", ["function", "injective"]], ["del", "theorem", "elim_injective", ["sum"]], ["add", "theorem", "update_elim_inl", ["sum"]], ["add", "theorem", "update_elim_inr", ["sum"]], ["add", "theorem", "update_inl_apply_inl", ["sum"]], ["add", "theorem", "update_inl_apply_inr", ["sum"]], ["add", "theorem", "update_inl_comp_inl", ["sum"]], ["add", "theorem", "update_inl_comp_inr", ["sum"]], ["add", "theorem", "update_inr_apply_inl", ["sum"]], ["add", "theorem", "update_inr_apply_inr", ["sum"]], ["add", "theorem", "update_inr_comp_inl", ["sum"]], ["add", "theorem", "update_inr_comp_inr", ["sum"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "def", "inl", ["function", "embedding"]], ["mod", "def", "inr", ["function", "embedding"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["del", "theorem", "update_comp", ["function"]], ["add", "theorem", "update_comp_eq_of_forall_ne'", ["function"]], ["add", "theorem", "update_comp_eq_of_forall_ne", ["function"]], ["add", "theorem", "update_comp_eq_of_injective'", ["function"]], ["add", "theorem", "update_comp_eq_of_injective", ["function"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "to_equiv_symm", ["order_iso"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "theorem", "to_multilinear_map_add", ["continuous_multilinear_map"]], ["mod", "def", "to_multilinear_map_linear", ["continuous_multilinear_map"]], ["add", "theorem", "to_multilinear_map_smul", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1611736904, "sha": "21e9d424", "message": "feat(algebra/euclidean_domain): Unify occurences of div_add_mod and mod_add_div (#5884)\nAdding the corresponding commutative version at several places (euclidean domain, nat, pnat, int) whenever there is the other version. \nIn subsequent PRs other proofs in the library which now use some version of `add_comm, exact div_add_mod` or `add_comm, exact mod_add_div` should be golfed.\nTrying to address issue #1534", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "mod_add_div", ["euclidean_domain"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "div_add_mod", ["int"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "div_add_mod", ["pnat"]], ["mod", "theorem", "mod_add_div", ["pnat"]]]}]}, {"timestamp": 1611736902, "sha": "688772e9", "message": "refactor(ring_theory/ideal ring_theory/jacobson): allow `ideal` in a `comm_semiring` (#5879)\nAt the moment, `ideal` requires the underlying ring to be a `comm_ring`. This changes in this PR and the underlying ring can now be a `comm_semiring`. There is a discussion about merits and issues in this Zulip chat:\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/(comm_)semiring.3A.20examples.3F\nAt the moment, this PR changes the definition and adapts, mostly `ring_theory/jacobson`, to avoid deterministic timeouts. In future PRs, I will start changing hypotheses on lemmas involving `ideal` to use the more general framework.\nA note: the file `ring_theory/jacobson` might require further improvements. If possible, I would like this change to push through without cluttering it with changes to that file. If there is a way of accepting this change and then proceeding to the changes in `jacobson`, that would be ideal! If it needs to be done at the same time, then so be it!", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "def", "ideal", []]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "quotient_map_comp_mk", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/prod.lean", "newPath": "src/ring_theory/ideal/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["mod", "theorem", "disjoint_powers_iff_not_mem", ["ideal"]], ["add", "theorem", "injective_quotient_le_comap_map", ["ideal"]], ["mod", "def", "is_jacobson", ["ideal"]], ["mod", "theorem", "is_jacobson_mv_polynomial_fin", ["ideal", "mv_polynomial"]], ["mod", "theorem", "quotient_mk_comp_C_is_integral_of_jacobson", ["ideal", "mv_polynomial"]], ["mod", "theorem", "comp_C_integral_of_surjective_of_jacobson", ["ideal", "polynomial"]], ["mod", "theorem", "is_integral_localization_map_polynomial_quotient", ["ideal", "polynomial"]], ["mod", "theorem", "is_jacobson_polynomial_iff_is_jacobson", ["ideal", "polynomial"]], ["add", "theorem", "is_jacobson_polynomial_of_is_jacobson", ["ideal", "polynomial"]], ["mod", "theorem", "is_maximal_comap_C_of_is_jacobson", ["ideal", "polynomial"]], ["add", "theorem", "is_maximal_comap_C_of_is_maximal", ["ideal", "polynomial"]], ["mod", "theorem", "jacobson_bot_of_integral_localization", ["ideal", "polynomial"]], ["mod", "theorem", "quotient_mk_comp_C_is_integral_of_jacobson", ["ideal", "polynomial"]], ["add", "theorem", "quotient_mk_maps_eq", ["ideal"]]]}]}, {"timestamp": 1611736900, "sha": "b2c5d9b2", "message": "feat(ring_theory/noetherian, linear_algebra/basic): Show that finitely generated submodules are the compact elements in the submodule lattice (#5871)\nShow that a submodule is finitely generated if and only if it is a compact lattice element. Add lemma showing that any submodule is the supremum of the spans of its elements.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "sup_finset_image", ["finset"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_eq_supr_of_singleton_spans", ["submodule"]]]}, {"oldPath": "src/order/compactly_generated.lean", "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "finset_sup_compact_of_compact", ["complete_lattice"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_iff_compact", ["submodule"]], ["add", "theorem", "singleton_span_is_compact_element", ["submodule"]]]}]}, {"timestamp": 1611736899, "sha": "7f04253c", "message": "feat(field_theory/adjoin): Generalize alg_hom_mk_adjoin_splits to infinite sets (#5860)\nThis PR uses Zorn's lemma to generalize `alg_hom_mk_adjoin_splits` to infinite sets.\nThe proof is rather long, but I think that the result is worth it. It should allow me to prove that if E/F is any normal extension then any automorphism of F lifts to an automorphism of E.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["mod", "theorem", "alg_hom_mk_adjoin_splits'", ["intermediate_field"]], ["add", "theorem", "eq_of_le", ["intermediate_field", "lifts"]], ["add", "theorem", "exists_lift_of_splits", ["intermediate_field", "lifts"]], ["add", "theorem", "exists_max_three", ["intermediate_field", "lifts"]], ["add", "theorem", "exists_max_two", ["intermediate_field", "lifts"]], ["add", "theorem", "exists_upper_bound", ["intermediate_field", "lifts"]], ["add", "theorem", "le_lifts_of_splits", ["intermediate_field", "lifts"]], ["add", "theorem", "mem_lifts_of_splits", ["intermediate_field", "lifts"]], ["add", "def", "upper_bound_intermediate_field", ["intermediate_field", "lifts"]], ["add", "def", "lifts", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}]}, {"timestamp": 1611736896, "sha": "e95928c0", "message": "feat(field_theory/normal): Restrict to normal subfield (#5845)\nNow that we know that splitting fields are normal, it makes sense to move the results of #5562 to `normal.lean`.", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "def", "restrict_normal", ["alg_equiv"]], ["add", "theorem", "restrict_normal_commutes", ["alg_equiv"]], ["add", "def", "restrict_normal_hom", ["alg_equiv"]], ["add", "theorem", "restrict_normal_trans", ["alg_equiv"]], ["add", "def", "restrict_normal", ["alg_hom"]], ["add", "def", "restrict_normal_aux", ["alg_hom"]], ["add", "theorem", "restrict_normal_commutes", ["alg_hom"]], ["add", "theorem", "restrict_normal_comp", ["alg_hom"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["del", "def", "restict_is_splitting_field_hom", ["alg_equiv"]], ["del", "def", "restrict_is_splitting_field", ["alg_equiv"]], ["del", "theorem", "restrict_is_splitting_field_commutes", ["alg_equiv"]], ["del", "theorem", "restrict_is_splitting_field_trans", ["alg_equiv"]], ["del", "def", "restrict_is_splitting_field", ["alg_hom"]], ["del", "def", "restrict_is_splitting_field_aux", ["alg_hom"]], ["del", "theorem", "restrict_is_splitting_field_commutes", ["alg_hom"]], ["del", "theorem", "restrict_is_splitting_field_comp", ["alg_hom"]], ["del", "theorem", "range_to_alg_hom", ["is_splitting_field"]]]}]}, {"timestamp": 1611736895, "sha": "61491ca3", "message": "feat(linear_algebra/matrix): A vector is zero iff its dot product with every vector is zero (#5837)", "changes": [{"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "dot_product_eq", ["matrix"]], ["add", "theorem", "dot_product_eq_iff", ["matrix"]], ["add", "theorem", "dot_product_eq_zero", ["matrix"]], ["add", "theorem", "dot_product_eq_zero_iff", ["matrix"]], ["add", "theorem", "dot_product_std_basis_eq_mul", ["matrix"]], ["add", "theorem", "dot_product_std_basis_one", ["matrix"]]]}]}, {"timestamp": 1611736893, "sha": "31edca86", "message": "chore(data/finsupp,data/dfinsupp,algebra/big_operators): add missing lemmas about sums of bundled functions (#5834)\nThis adds missing lemmas about how `{finset,finsupp,dfinsupp}.{prod,sum}` acts on {coercion,application,evaluation} of `{add_monoid_hom,monoid_hom,linear_map}`. Specifically, it:\n* adds the lemmas:\n * `monoid_hom.coe_prod`\n * `monoid_hom.map_dfinsupp_prod`\n * `monoid_hom.dfinsupp_prod_apply`\n * `monoid_hom.finsupp_prod_apply`\n * `monoid_hom.coe_dfinsupp_prod`\n * `monoid_hom.coe_finsupp_prod`\n * that are the additive versions of the above for `add_monoid_hom`.\n * `linear_map.map_dfinsupp_sum`\n * `linear_map.dfinsupp_sum_apply`\n * `linear_map.finsupp_sum_apply`\n * `linear_map.coe_dfinsupp_sum`\n * `linear_map.coe_finsupp_sum`\n* Renames `linear_map.finsupp_sum` to `linear_map.map_finsupp_sum` for consistency with `linear_map.map_sum`.\n* Adds a new `monoid_hom.coe_fn` definition", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "coe_prod", ["monoid_hom"]], ["add", "theorem", "finset_prod_apply", ["monoid_hom"]]]}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["del", "theorem", "finset_prod_apply", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "def", "coe_fn", ["monoid_hom"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "coe_dfinsupp_prod", ["monoid_hom"]], ["add", "theorem", "dfinsupp_prod_apply", ["monoid_hom"]], ["add", "theorem", "map_dfinsupp_prod", ["monoid_hom"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "coe_finsupp_prod", ["monoid_hom"]], ["add", "theorem", "finsupp_prod_apply", ["monoid_hom"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_dfinsupp_sum", ["linear_map"]], ["add", "theorem", "coe_finsupp_sum", ["linear_map"]], ["add", "theorem", "dfinsupp_sum_apply", ["linear_map"]], ["del", "theorem", "finsupp_sum", ["linear_map"]], ["add", "theorem", "finsupp_sum_apply", ["linear_map"]], ["add", "theorem", "map_dfinsupp_sum", ["linear_map"]], ["add", "theorem", "map_finsupp_sum", ["linear_map"]]]}]}, {"timestamp": 1611736890, "sha": "aa8980d9", "message": "chore(category_theory/monad): comonadic adjunction (#5770)\nDefines comonadic adjunctions dual to what's already there", "changes": [{"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": [["add", "def", "comparison", ["category_theory", "comonad"]], ["add", "def", "comparison_forget", ["category_theory", "comonad"]]]}]}, {"timestamp": 1611736888, "sha": "3b6d6d74", "message": "chore(data/fintype/basic): Add simp lemma about finset.univ (#5708)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_filter_exists", ["finset"]], ["add", "theorem", "univ_filter_mem_range", ["finset"]]]}]}, {"timestamp": 1611736886, "sha": "00b88eb1", "message": "feat(data/polynomial/denominators): add file denominators (#5587)\nThe main goal of this PR is to establish that `b^deg(f)*f(a/b)` is an expression not involving denominators.\nThe first lemma, `induction_with_nat_degree_le` is an induction principle for polynomials, where the inductive hypothesis has a bound on the degree of the polynomial. This allows to build the proof by tearing apart a polynomial into its monomials, while remembering the overall degree of the polynomial itself. This lemma might be a better fit for the file `data.polynomial.induction`.", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/denoms_clearable.lean", "changes": [["add", "theorem", "add", ["denoms_clearable"]], ["add", "def", "denoms_clearable", []], ["add", "theorem", "denoms_clearable_C_mul_X_pow", []], ["add", "theorem", "denoms_clearable_nat_degree", []], ["add", "theorem", "denoms_clearable_of_nat_degree_le", []], ["add", "theorem", "denoms_clearable_zero", []]]}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "induction_with_nat_degree_le", ["polynomial"]]]}]}, {"timestamp": 1611724361, "sha": "394d3574", "message": "refactor(data/nat/factorial): simpler proof of `mul_factorial_pred` (#5917)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": []}]}, {"timestamp": 1611724359, "sha": "d41781cf", "message": "refactor(topology/metric_space): simplify `dist_triangle` proofs (#5916)\nCo-authors: `lean-gptf`, Stanislas Polu", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1611724357, "sha": "4e4298e2", "message": "chore(*): split long lines (#5908)", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["mod", "theorem", "hcomp", ["category_theory", "functor_to_types"]], ["mod", "theorem", "map_comp_apply", ["category_theory", "functor_to_types"]], ["mod", "theorem", "equiv_equiv_iso_hom", []], ["mod", "theorem", "equiv_equiv_iso_inv", []]]}, {"oldPath": "src/computability/tm_computable.lean", "newPath": "src/computability/tm_computable.lean", "changes": [["mod", "def", "refl", ["turing", "evals_to_in_time"]], ["mod", "structure", "evals_to_in_time", ["turing"]], ["mod", "def", "id_computable_in_poly_time", ["turing"]], ["mod", "structure", "tm2_computable_in_poly_time", ["turing"]], ["mod", "def", "to_tm2_computable", ["turing", "tm2_computable_in_time"]], ["mod", "structure", "tm2_computable_in_time", ["turing"]], ["mod", "def", "tm2_outputs_in_time", ["turing"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["mod", "theorem", "sum_univ_succ_above", ["fin"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["mod", "theorem", "pw_filter_map", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["mod", "theorem", "inter_append", ["list", "perm"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/list/sections.lean", "newPath": "src/data/list/sections.lean", "changes": [["mod", "theorem", "rel_sections", ["list"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["mod", "theorem", "sizeof_erase_dupkeys", ["list"]], ["mod", "theorem", "sizeof_kerase", ["list"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "col_smul", ["matrix"]], ["mod", "theorem", "row_smul", ["matrix"]], ["mod", "theorem", "smul_apply", ["matrix"]], ["mod", "theorem", "update_column_apply", ["matrix"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "support_sum_monomial_coeff", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": [["mod", "theorem", "bind₂_bind₂", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_bind₁", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_bind₂", ["mv_polynomial"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["mod", "theorem", "has_mfderiv_at", ["has_mfderiv_within_at"]], ["mod", "def", "mfderiv_within", []], ["mod", "theorem", "inter", ["unique_mdiff_on"]]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "theorem", "to_local_equiv_coe", ["model_with_corners"]]]}, {"oldPath": "src/group_theory/archimedean.lean", "newPath": "src/group_theory/archimedean.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["mod", "theorem", "is_add_group_hom_extension", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "continuous_within_at_Ico_iff_Iio", []], ["mod", "theorem", "continuous_within_at_Ioo_iff_Iio", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["mod", "theorem", "to_uniform_space_eq", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "prod_generate_from_generate_from_eq", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "tendsto", ["continuous_within_at"]], ["mod", "theorem", "continuous_within_at_iff_continuous_at_restrict", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["mod", "theorem", "tendsto_comap_nhds_nhds", ["dense_inducing"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "closed_ball_subset_closed_ball", ["metric"]], ["mod", "theorem", "diam_union", ["metric"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "coinduced_le_iff_le_induced", []]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["mod", "theorem", "mem_path_component", ["joined"]], ["mod", "theorem", "truncate_one_one", ["path"]], ["mod", "theorem", "truncate_zero_zero", ["path"]]]}]}, {"timestamp": 1611724355, "sha": "47e2f804", "message": "chore(*): Replace integral_domain assumptions with no_zero_divisors (#5877)\nThis removes unnecessary `nontrivial` assumptions, and reduces some `comm_ring` requirements to `comm_semiring`.\nThis also adds some missing `nontrivial` and `no_zero_divisors` instances.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "frobenius_inj", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["mod", "theorem", "nat_degree_prod", ["polynomial"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "prod_ne_zero", ["multiset"]]]}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["mod", "theorem", "degree_pow", ["polynomial"]], ["mod", "theorem", "leading_coeff_X_add_C", ["polynomial"]]]}, {"oldPath": "src/data/quaternion.lean", "newPath": "src/data/quaternion.lean", "changes": [["mod", "theorem", "conj_fixed", ["quaternion"]], ["mod", "theorem", "conj_fixed", ["quaternion_algebra"]]]}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["mod", "theorem", "linear_independent_monoid_hom", []]]}, {"oldPath": "src/ring_theory/prime.lean", "newPath": "src/ring_theory/prime.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1611712118, "sha": "19bb4709", "message": "chore(scripts): update nolints.txt (#5918)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611712114, "sha": "91730057", "message": "chore(tactic/finish): Remove broken ifinish (#5897)\nSee https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/intuitionistic.20logic/near/224013270", "changes": [{"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "test/finish1.lean", "newPath": "test/finish1.lean", "changes": []}]}, {"timestamp": 1611712112, "sha": "1ddb93a9", "message": "feat(analysis/normed_space): define linear isometries (#5867)\n* define `linear_isometry` and `linear_isometry_equiv`;\n* add `linear_map.ker_eq_bot_of_inverse`;\n* replace `inv_fun_apply` lemmas with `inv_fun_eq_symm`;\n* golf some proofs in `linear_algebra/finite_dimensional`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "inv_fun_apply", ["alg_equiv"]], ["add", "theorem", "inv_fun_eq_symm", ["alg_equiv"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["del", "theorem", "inv_fun_apply", ["linear_equiv"]], ["add", "theorem", "inv_fun_eq_symm", ["linear_equiv"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "def", "of_real", ["complex", "continuous_linear_map"]], ["del", "theorem", "of_real_isometry", ["complex", "continuous_linear_map"]], ["mod", "theorem", "continuous_of_real", ["complex"]], ["add", "theorem", "isometry_of_real", ["complex"]], ["add", "def", "of_real", ["complex", "linear_isometry"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "im_inner_eq_norm_sub_I_smul_mul_self_sub_norm_add_I_smul_mul_self_div_four", []], ["add", "theorem", "inner_eq_sum_norm_sq_div_four", []], ["add", "theorem", "coe_isometry_of_inner", ["linear_equiv"]], ["add", "def", "isometry_of_inner", ["linear_equiv"]], ["add", "theorem", "isometry_of_inner_to_linear_equiv", ["linear_equiv"]], ["add", "theorem", "inner_map_map", ["linear_isometry"]], ["add", "theorem", "inner_map_map", ["linear_isometry_equiv"]], ["add", "theorem", "coe_isometry_of_inner", ["linear_map"]], ["add", "def", "isometry_of_inner", ["linear_map"]], ["add", "theorem", "isometry_of_inner_to_linear_map", ["linear_map"]], ["add", "theorem", "re_inner_eq_norm_add_mul_self_sub_norm_mul_self_sub_norm_mul_self_div_two", []], ["add", "theorem", "re_inner_eq_norm_add_mul_self_sub_norm_sub_mul_self_div_four", []], ["add", "theorem", "re_inner_eq_norm_mul_self_add_norm_mul_self_sub_norm_sub_mul_self_div_two", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/linear_isometry.lean", "changes": [["add", "theorem", "coe_comp", ["linear_isometry"]], ["add", "theorem", "coe_fn_injective", ["linear_isometry"]], ["add", "theorem", "coe_id", ["linear_isometry"]], ["add", "theorem", "coe_mul", ["linear_isometry"]], ["add", "theorem", "coe_one", ["linear_isometry"]], ["add", "theorem", "coe_to_continuous_linear_map", ["linear_isometry"]], ["add", "theorem", "coe_to_linear_map", ["linear_isometry"]], ["add", "def", "comp", ["linear_isometry"]], ["add", "theorem", "comp_assoc", ["linear_isometry"]], ["add", "theorem", "comp_continuous_iff", ["linear_isometry"]], ["add", "theorem", "comp_id", ["linear_isometry"]], ["add", "theorem", "diam_image", ["linear_isometry"]], ["add", "theorem", "diam_range", ["linear_isometry"]], ["add", "theorem", "dist_map", ["linear_isometry"]], ["add", "theorem", "ediam_image", ["linear_isometry"]], ["add", "theorem", "ediam_range", ["linear_isometry"]], ["add", "theorem", "edist_map", ["linear_isometry"]], ["add", "theorem", "ext", ["linear_isometry"]], ["add", "def", "id", ["linear_isometry"]], ["add", "theorem", "id_comp", ["linear_isometry"]], ["add", "theorem", "map_add", ["linear_isometry"]], ["add", "theorem", "map_eq_iff", ["linear_isometry"]], ["add", "theorem", "map_ne", ["linear_isometry"]], ["add", "theorem", "map_smul", ["linear_isometry"]], ["add", "theorem", "map_sub", ["linear_isometry"]], ["add", "theorem", "map_zero", ["linear_isometry"]], ["add", "theorem", "nnnorm_map", ["linear_isometry"]], ["add", "theorem", "norm_map", ["linear_isometry"]], ["add", "def", "to_continuous_linear_map", ["linear_isometry"]], ["add", "theorem", "to_linear_map_injective", ["linear_isometry"]], ["add", "structure", "linear_isometry", []], ["add", "theorem", "apply_symm_apply", ["linear_isometry_equiv"]], ["add", "theorem", "coe_inv", ["linear_isometry_equiv"]], ["add", "theorem", "coe_mk", ["linear_isometry_equiv"]], ["add", "theorem", "coe_mul", ["linear_isometry_equiv"]], ["add", "theorem", "coe_one", ["linear_isometry_equiv"]], ["add", "theorem", "coe_refl", ["linear_isometry_equiv"]], ["add", "theorem", "coe_symm_to_linear_equiv", ["linear_isometry_equiv"]], ["add", "theorem", "coe_symm_trans", ["linear_isometry_equiv"]], ["add", "theorem", "coe_to_linear_equiv", ["linear_isometry_equiv"]], ["add", "theorem", "coe_trans", ["linear_isometry_equiv"]], ["add", "theorem", "diam_image", ["linear_isometry_equiv"]], ["add", "theorem", "dist_map", ["linear_isometry_equiv"]], ["add", "theorem", "ediam_image", ["linear_isometry_equiv"]], ["add", "theorem", "edist_map", ["linear_isometry_equiv"]], ["add", "theorem", "ext", ["linear_isometry_equiv"]], ["add", "theorem", "map_add", ["linear_isometry_equiv"]], ["add", "theorem", "map_eq_iff", ["linear_isometry_equiv"]], ["add", "theorem", "map_eq_zero_iff", ["linear_isometry_equiv"]], ["add", "theorem", "map_ne", ["linear_isometry_equiv"]], ["add", "theorem", "map_smul", ["linear_isometry_equiv"]], ["add", "theorem", "map_sub", ["linear_isometry_equiv"]], ["add", "theorem", "map_zero", ["linear_isometry_equiv"]], ["add", "theorem", "nnnorm_map", ["linear_isometry_equiv"]], ["add", "theorem", "norm_map", ["linear_isometry_equiv"]], ["add", "def", "of_bounds", ["linear_isometry_equiv"]], ["add", "def", "refl", ["linear_isometry_equiv"]], ["add", "theorem", "refl_trans", ["linear_isometry_equiv"]], ["add", "def", "symm", ["linear_isometry_equiv"]], ["add", "theorem", "symm_apply_apply", ["linear_isometry_equiv"]], ["add", "theorem", "symm_symm", ["linear_isometry_equiv"]], ["add", "theorem", "symm_trans", ["linear_isometry_equiv"]], ["add", "def", "to_continuous_linear_equiv", ["linear_isometry_equiv"]], ["add", "def", "to_isometric", ["linear_isometry_equiv"]], ["add", "theorem", "to_linear_equiv_injective", ["linear_isometry_equiv"]], ["add", "def", "to_linear_isometry", ["linear_isometry_equiv"]], ["add", "def", "trans", ["linear_isometry_equiv"]], ["add", "theorem", "trans_assoc", ["linear_isometry_equiv"]], ["add", "theorem", "trans_refl", ["linear_isometry_equiv"]], ["add", "theorem", "trans_symm", ["linear_isometry_equiv"]], ["add", "structure", "linear_isometry_equiv", []]]}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": [["del", "def", "to_real_linear_equiv", ["isometric"]], ["del", "def", "to_real_linear_equiv_of_map_zero", ["isometric"]], ["del", "theorem", "to_real_linear_equiv_symm_apply", ["isometric"]], ["add", "def", "to_real_linear_isometry_equiv", ["isometric"]], ["add", "def", "to_real_linear_isometry_equiv_of_map_zero", ["isometric"]], ["add", "theorem", "to_real_linear_isometry_equiv_symm_apply", ["isometric"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["add", "theorem", "isometry_iff_norm", ["continuous_linear_map"]], ["del", "theorem", "isometry_iff_norm_image_eq_norm", ["continuous_linear_map"]], ["add", "theorem", "norm_to_continuous_linear_map", ["linear_isometry"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "I_mul_re", ["is_R_or_C"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ker_eq_bot_of_inverse", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "coe_of_injective_endo", ["linear_equiv"]], ["mod", "theorem", "of_injective_endo_left_inv", ["linear_equiv"]], ["mod", "theorem", "of_injective_endo_right_inv", ["linear_equiv"]], ["del", "theorem", "of_injective_endo_to_fun", ["linear_equiv"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "isometry_iff_norm", ["add_monoid_hom"]], ["add", "theorem", "isometry_of_norm", ["add_monoid_hom"]], ["mod", "theorem", "coe_mul", ["isometric"]], ["mod", "theorem", "mul_apply", ["isometric"]]]}]}, {"timestamp": 1611712110, "sha": "1eb12937", "message": "feat(archive/imo): formalize IMO 2011 problem Q3 (#5842)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2011_q3.lean", "changes": [["add", "theorem", "imo2011_q3", []]]}]}, {"timestamp": 1611701027, "sha": "531bcd8d", "message": "feat(data/real/{nnreal,ennreal}, topology/instances/ennreal): add of_real_(sum/prod/tsum) for nnreal and ennreal (#5896)\nWe remark that if all terms of a real sum are nonnegative, `nnreal.of_real` of the sum is equal to the sum of the `nnreal.of_real`. Idem for `ennreal.of_real`, for products and `tsum`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_prod_of_nonneg", ["ennreal"]], ["add", "theorem", "of_real_sum_of_nonneg", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "of_real_prod_of_nonneg", ["nnreal"]], ["add", "theorem", "of_real_sum_of_nonneg", ["nnreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "of_real_tsum_of_nonneg", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "has_sum_of_real_of_nonneg", ["nnreal"]]]}]}, {"timestamp": 1611701025, "sha": "8c732b2c", "message": "feat(data/finset/basic): card_subtype simp lemma (#5894)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_subtype", ["finset"]]]}]}, {"timestamp": 1611679045, "sha": "547d67fc", "message": "feat(analysis/{analytic,calculus}): an analytic function is strictly differentiable (#5878)", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "norm_le_div_pow_of_pos_of_lt_radius", ["formal_multilinear_series"]], ["add", "theorem", "is_O_image_sub_norm_mul_norm_sub", ["has_fpower_series_at"]], ["add", "theorem", "has_sum_sub", ["has_fpower_series_on_ball"]], ["add", "theorem", "image_sub_sub_deriv_le", ["has_fpower_series_on_ball"]], ["add", "theorem", "is_O_image_sub_image_sub_deriv_principal", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_O_principal", ["asymptotics"]], ["add", "theorem", "is_O_with_principal", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv", ["has_fpower_series_at"]], ["add", "theorem", "has_deriv_at", ["has_fpower_series_at"]], ["add", "theorem", "has_strict_deriv_at", ["has_fpower_series_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "differentiable_at", ["analytic_at"]], ["add", "theorem", "differentiable_within_at", ["analytic_at"]], ["add", "theorem", "differentiable_at", ["has_fpower_series_at"]], ["add", "theorem", "fderiv", ["has_fpower_series_at"]], ["add", "theorem", "has_fderiv_at", ["has_fpower_series_at"]], ["add", "theorem", "has_strict_fderiv_at", ["has_fpower_series_at"]], ["add", "theorem", "differentiable_on", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "div_def", ["pi"]], ["add", "theorem", "pi_single_eq", ["subsingleton"]]]}]}, {"timestamp": 1611634887, "sha": "44fd23d1", "message": "chore(data/finset): Rename bind to bUnion (#5813)\nThis commit renames `finset.bind` to `finset.bUnion`. While this is the monadic bind operation, conceptually it's doing a bounded union of an indexed family of finite sets. This will help with discoverability of this function.\nThere was a name conflict in `data.finset.lattice` due to this, since there are a number of theorems about the `set` version of `bUnion`, and for these I prefixed the lemmas with `set_`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "card_bUnion", ["finset"]], ["add", "theorem", "card_bUnion_le", ["finset"]], ["del", "theorem", "card_bind", ["finset"]], ["del", "theorem", "card_bind_le", ["finset"]], ["add", "theorem", "prod_bUnion", ["finset"]], ["del", "theorem", "prod_bind", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "bUnion_empty", ["finset"]], ["add", "theorem", "bUnion_filter_eq_of_maps_to", ["finset"]], ["add", "theorem", "bUnion_image", ["finset"]], ["add", "theorem", "bUnion_insert", ["finset"]], ["add", "theorem", "bUnion_inter", ["finset"]], ["add", "theorem", "bUnion_mono", ["finset"]], ["add", "theorem", "bUnion_singleton", ["finset"]], ["add", "theorem", "bUnion_singleton_eq_self", ["finset"]], ["add", "theorem", "bUnion_subset_bUnion_of_subset_left", ["finset"]], ["add", "theorem", "bUnion_val", ["finset"]], ["del", "theorem", "bind_empty", ["finset"]], ["del", "theorem", "bind_filter_eq_of_maps_to", ["finset"]], ["del", "theorem", "bind_image", ["finset"]], ["del", "theorem", "bind_insert", ["finset"]], ["del", "theorem", "bind_inter", ["finset"]], ["del", "theorem", "bind_mono", ["finset"]], ["del", "theorem", "bind_singleton", ["finset"]], ["del", "theorem", "bind_singleton_eq_self", ["finset"]], ["del", "theorem", "bind_subset_bind_of_subset_left", ["finset"]], ["del", "theorem", "bind_val", ["finset"]], ["add", "theorem", "disjoint_bUnion_left", ["finset"]], ["add", "theorem", "disjoint_bUnion_right", ["finset"]], ["del", "theorem", "disjoint_bind_left", ["finset"]], ["del", "theorem", "disjoint_bind_right", ["finset"]], ["add", "theorem", "image_bUnion", ["finset"]], ["add", "theorem", "image_bUnion_filter_eq", ["finset"]], ["del", "theorem", "image_bind", ["finset"]], ["del", "theorem", "image_bind_filter_eq", ["finset"]], ["add", "theorem", "inter_bUnion", ["finset"]], ["del", "theorem", "inter_bind", ["finset"]], ["add", "theorem", "mem_bUnion", ["finset"]], ["del", "theorem", "mem_bind", ["finset"]], ["add", "theorem", "product_eq_bUnion", ["finset"]], ["del", "theorem", "product_eq_bind", ["finset"]], ["add", "theorem", "sigma_eq_bUnion", ["finset"]], ["del", "theorem", "sigma_eq_bind", ["finset"]], ["add", "theorem", "singleton_bUnion", ["finset"]], ["del", "theorem", "singleton_bind", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["del", "theorem", "bInter_bind", ["finset"]], ["del", "theorem", "bInter_coe", ["finset"]], ["del", "theorem", "bInter_finset_image", ["finset"]], ["del", "theorem", "bInter_insert", ["finset"]], ["del", "theorem", "bInter_insert_update", ["finset"]], ["del", "theorem", "bInter_inter", ["finset"]], ["del", "theorem", "bInter_option_to_finset", ["finset"]], ["del", "theorem", "bInter_singleton", ["finset"]], ["del", "theorem", "bUnion_bind", ["finset"]], ["del", "theorem", "bUnion_coe", ["finset"]], ["del", "theorem", "bUnion_finset_image", ["finset"]], ["del", "theorem", "bUnion_insert", ["finset"]], ["del", "theorem", "bUnion_insert_update", ["finset"]], ["del", "theorem", "bUnion_option_to_finset", ["finset"]], ["del", "theorem", "bUnion_preimage_singleton", ["finset"]], ["del", "theorem", "bUnion_singleton", ["finset"]], ["del", "theorem", "bUnion_union", ["finset"]], ["add", "theorem", "infi_bUnion", ["finset"]], ["del", "theorem", "infi_bind", ["finset"]], ["add", "theorem", "set_bInter_bUnion", ["finset"]], ["add", "theorem", "set_bInter_coe", ["finset"]], ["add", "theorem", "set_bInter_finset_image", ["finset"]], ["add", "theorem", "set_bInter_insert", ["finset"]], ["add", "theorem", "set_bInter_insert_update", ["finset"]], ["add", "theorem", "set_bInter_inter", ["finset"]], ["add", "theorem", "set_bInter_option_to_finset", ["finset"]], ["add", "theorem", "set_bInter_singleton", ["finset"]], ["add", "theorem", "set_bUnion_bUnion", ["finset"]], ["add", "theorem", "set_bUnion_coe", ["finset"]], ["add", "theorem", "set_bUnion_finset_image", ["finset"]], ["add", "theorem", "set_bUnion_insert", ["finset"]], ["add", "theorem", "set_bUnion_insert_update", ["finset"]], ["add", "theorem", "set_bUnion_option_to_finset", ["finset"]], ["add", "theorem", "set_bUnion_preimage_singleton", ["finset"]], ["add", "theorem", "set_bUnion_singleton", ["finset"]], ["add", "theorem", "set_bUnion_union", ["finset"]], ["add", "theorem", "sup_eq_bUnion", ["finset"]], ["del", "theorem", "sup_eq_bind", ["finset"]], ["add", "theorem", "supr_bUnion", ["finset"]], ["del", "theorem", "supr_bind", ["finset"]]]}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "vars_eq_support_bUnion_support", ["mv_polynomial"]], ["del", "theorem", "vars_eq_support_bind_support", ["mv_polynomial"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "coe_bUnion", ["finset"]], ["del", "theorem", "coe_bind", ["finset"]], ["add", "theorem", "finite_bUnion", ["set"]], ["del", "theorem", "finite_bind", ["set"]], ["mod", "def", "fintype_bUnion", ["set"]], ["del", "def", "fintype_bind", ["set"]], ["add", "def", "fintype_set_bUnion", ["set"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "newPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "nth_roots_one_eq_bUnion_primitive_roots'", ["is_primitive_root"]], ["add", "theorem", "nth_roots_one_eq_bUnion_primitive_roots", ["is_primitive_root"]], ["del", "theorem", "nth_roots_one_eq_bind_primitive_roots'", ["is_primitive_root"]], ["del", "theorem", "nth_roots_one_eq_bind_primitive_roots", ["is_primitive_root"]]]}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1611625739, "sha": "01a7cde6", "message": "chore(scripts): update nolints.txt (#5892)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611596974, "sha": "5491c592", "message": "feat(data/fintype/basic): add lemmas about finsets and cardinality (#5886)\nAdd lemmas about finsets and cardinality. Part of #5695 in order to prove Hall's marriage theorem.\nCoauthors: @kmill @b-mehta", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_compl_lt_iff_nonempty", ["finset"]], ["add", "theorem", "card_eq_iff_eq_univ", ["finset"]], ["add", "theorem", "card_lt_iff_ne_univ", ["finset"]], ["add", "theorem", "compl_ne_univ_iff_nonempty", ["finset"]]]}]}, {"timestamp": 1611596972, "sha": "7f25aa76", "message": "chore(algebra/group_with_zero): correct instance name (#5885)\nThe argument for this definition is `cancel_monoid_with_zero`, not `comm_cancel_monoid_with_zero`.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}]}, {"timestamp": 1611596970, "sha": "3a16e9f8", "message": "feat(data/set/finite): add to_finset lemma (#5883)\nAdd lemma stating that taking to_finset of the union of two sets is the same as taking the union of to_finset of the sets.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "to_finset_union", ["set"]]]}]}, {"timestamp": 1611596968, "sha": "ba876475", "message": "feat(data/set/finite): add lemma about to_finset of complement of set (#5881)\nAdd lemma stating that taking to_finset of the complement of a set is the same thing as taking the complement of to_finset of the set.", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "to_finset_compl", ["set"]]]}]}, {"timestamp": 1611596965, "sha": "7188d806", "message": "chore(algebra/pi_tensor_product): Replace use of classical with decidable_eq (#5880)\nThis makes it consistent with `multilinear_map`, which also uses explicit decidability assumptions", "changes": [{"oldPath": "src/linear_algebra/pi_tensor_product.lean", "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": []}]}, {"timestamp": 1611596963, "sha": "1dfa81a1", "message": "feat(analysis/normed_space/inner_product): double orthogonal complement is closure (#5876)\nPut a submodule structure on the closure (as a set in a topological space) of a submodule of a topological module. Show that in a complete inner product space, the double orthogonal complement of a submodule is its closure.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "coe_mul_self_eq", ["submonoid"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "orthogonal_orthogonal_eq_closure", ["submodule"]], ["add", "theorem", "orthogonal_orthogonal_monotone", ["submodule"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "closure_smul_self_eq", ["submodule"]], ["add", "theorem", "closure_smul_self_subset", ["submodule"]], ["add", "theorem", "is_closed_topological_closure", ["submodule"]], ["add", "theorem", "submodule_topological_closure", ["submodule"]], ["add", "def", "topological_closure", ["submodule"]], ["add", "theorem", "topological_closure_minimal", ["submodule"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "is_closed_topological_closure", ["submonoid"]], ["add", "theorem", "submonoid_topological_closure", ["submonoid"]], ["add", "theorem", "top_closure_mul_self_eq", ["submonoid"]], ["add", "theorem", "top_closure_mul_self_subset", ["submonoid"]], ["add", "def", "topological_closure", ["submonoid"]], ["add", "theorem", "topological_closure_minimal", ["submonoid"]]]}]}, {"timestamp": 1611596961, "sha": "ee750e33", "message": "chore(algebra): a few more `@[mono]` tags (#5874)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["mod", "theorem", "pow_le_pow_of_le_left", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["mod", "theorem", "div_le_div", []], ["mod", "theorem", "div_le_div_of_le", []], ["mod", "theorem", "div_le_div_of_le_left", []]]}]}, {"timestamp": 1611590814, "sha": "6d806348", "message": "feat(measure_theory/{measure_space, borel_space, integration}): prove ae_measurable for various limits (#5849)\nFor a sequence of `ae_measurable` functions verifying some pointwise property almost everywhere, introduce a sequence of measurable functions verifying the same property and use it to prove ae-measurability of `is_lub`, `is_glb`, `supr`, `infi`, and almost everywhere pointwise limit.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/ae_measurable_sequence.lean", "changes": [["add", "theorem", "ae_seq_eq_fun_ae", ["ae_seq"]], ["add", "theorem", "ae_seq_eq_fun_of_mem_ae_seq_set", ["ae_seq"]], ["add", "theorem", "ae_seq_eq_mk_ae", ["ae_seq"]], ["add", "theorem", "ae_seq_eq_mk_of_mem_ae_seq_set", ["ae_seq"]], ["add", "theorem", "ae_seq_n_eq_fun_n_ae", ["ae_seq"]], ["add", "theorem", "ae_seq_set_is_measurable", ["ae_seq"]], ["add", "theorem", "fun_prop_of_mem_ae_seq_set", ["ae_seq"]], ["add", "theorem", "measurable", ["ae_seq"]], ["add", "theorem", "measure_compl_ae_seq_set_eq_zero", ["ae_seq"]], ["add", "theorem", "mk_eq_fun_of_mem_ae_seq_set", ["ae_seq"]], ["add", "theorem", "prop_of_mem_ae_seq_set", ["ae_seq"]], ["add", "theorem", "supr", ["ae_seq"]], ["add", "def", "ae_seq", []], ["add", "def", "ae_seq_set", []]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "is_glb", ["ae_measurable"]], ["add", "theorem", "is_lub", ["ae_measurable"]], ["add", "theorem", "ae_measurable_binfi", []], ["add", "theorem", "ae_measurable_bsupr", []], ["add", "theorem", "ae_measurable_infi", []], ["add", "theorem", "ae_measurable_of_tendsto_metric_ae", []], ["add", "theorem", "ae_measurable_supr", []], ["add", "theorem", "measurable_limit_of_tendsto_metric_ae", []], ["add", "theorem", "measurable_of_tendsto_metric_ae", []]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_liminf_le'", ["measure_theory"]], ["add", "theorem", "lintegral_supr'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_measurable_of_zero_measure", []], ["add", "theorem", "ite_ae_eq_of_measure_compl_zero", ["measure_theory"]], ["add", "theorem", "ite_ae_eq_of_measure_zero", ["measure_theory"]]]}]}, {"timestamp": 1611586606, "sha": "d6d4435e", "message": "chore(archive/sensitivity): split long lines (#5882)", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}]}, {"timestamp": 1611552405, "sha": "9117ad71", "message": "feat(order/atoms): define (co)atomic, (co)atomistic lattices (#5588)\nDefine (co)atomic, (co)atomistic lattices\nRelate these lattice definitions\nProvide basic subtype instances", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "Iic", ["is_atom"]], ["add", "theorem", "of_is_atom_coe_Iic", ["is_atom"]], ["add", "theorem", "is_atom_dual_iff_is_coatom", []], ["del", "theorem", "is_atom_iff_is_coatom_dual", []], ["add", "theorem", "is_atomic_dual_iff_is_coatomic", []], ["add", "theorem", "is_atomic_iff_forall_is_atomic_Iic", []], ["add", "theorem", "is_atomistic_dual_iff_is_coatomistic", []], ["add", "theorem", "Ici", ["is_coatom"]], ["add", "theorem", "of_is_coatom_coe_Ici", ["is_coatom"]], ["mod", "theorem", "is_coatom_bot", []], ["add", "theorem", "is_coatom_dual_iff_is_atom", []], ["del", "theorem", "is_coatom_iff_is_atom_dual", []], ["add", "theorem", "is_coatomic_dual_iff_is_atomic", []], ["add", "theorem", "is_coatomic_iff_forall_is_coatomic_Ici", []], ["add", "theorem", "is_coatomistic_dual_iff_is_atomistic", []]]}]}, {"timestamp": 1611548028, "sha": "87202fe9", "message": "chore(scripts): update nolints.txt (#5873)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611536917, "sha": "507c7ffc", "message": "feat(analysis/specific_limits): formula for `∑' n, n * r ^ n` (#5835)\nAlso prove that `∑' n, n ^ k * r ^ n` is summable for any `k : ℕ`,\n`∥r∥ < 1`.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "pow", ["asymptotics", "is_O"]], ["mod", "theorem", "is_O_bot", ["asymptotics"]], ["add", "theorem", "pow'", ["asymptotics", "is_O_with"]], ["add", "theorem", "pow", ["asymptotics", "is_O_with"]], ["mod", "theorem", "is_O_with_bot", ["asymptotics"]], ["add", "theorem", "pow", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_bot", ["asymptotics"]], ["add", "theorem", "summable_of_is_O", []], ["add", "theorem", "summable_of_is_O_nat", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_cast_le", ["nat"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "has_sum_coe_mul_geometric_of_norm_lt_1", []], ["add", "theorem", "is_o_coe_const_pow_of_one_lt", []], ["add", "theorem", "is_o_pow_const_const_pow_of_one_lt", []], ["add", "theorem", "is_o_pow_const_mul_const_pow_const_pow_of_norm_lt", []], ["add", "theorem", "summable_norm_pow_mul_geometric_of_norm_lt_1", []], ["add", "theorem", "summable_pow_mul_geometric_of_norm_lt_1", []], ["add", "theorem", "tendsto_pow_const_div_const_pow_of_one_lt", []], ["add", "theorem", "tendsto_pow_const_mul_const_pow_of_abs_lt_one", []], ["add", "theorem", "tsum_coe_mul_geometric_of_norm_lt_1", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "rec_add_one", ["nat"]], ["add", "theorem", "rec_zero", ["nat"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "nhds_within_Ioi_coe_ne_bot", ["ennreal"]], ["add", "theorem", "nhds_within_Ioi_zero_ne_bot", ["ennreal"]]]}]}, {"timestamp": 1611530483, "sha": "5222db01", "message": "chore(linear_algebra/multilinear): Relax ring to semiring, add_comm_group to add_comm_monoid (#5870)", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1611519901, "sha": "fbabe427", "message": "feat(order/complete_well_founded, data/finset/lattice): introduce compact elements of a complete lattice and characterize compact lattices as those with all elements compact (#5825)\nProvide a definition of compact elements. Prove the equivalence of two characterizations of compact elements. Add \"all elements are compact\" to the equivalent characterizations of compact lattices. Introduce an auxiliary lemma about finite sups and directed sets.\n", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "sup_le_of_le_directed", ["finset"]]]}, {"oldPath": null, "newPath": "src/order/compactly_generated.lean", "changes": [["add", "theorem", "compactly_generated_of_well_founded", ["complete_lattice"]], ["add", "theorem", "is_sup_closed_compact", ["complete_lattice", "is_Sup_finite_compact"]], ["add", "def", "is_Sup_finite_compact", ["complete_lattice"]], ["add", "theorem", "is_Sup_finite_compact_iff_all_elements_compact", ["complete_lattice"]], ["add", "theorem", "is_Sup_finite_compact_iff_is_sup_closed_compact", ["complete_lattice"]], ["add", "def", "is_compact_element", ["complete_lattice"]], ["add", "theorem", "is_compact_element_iff_le_of_directed_Sup_le", ["complete_lattice"]], ["add", "def", "is_compactly_generated", ["complete_lattice"]], ["add", "theorem", "well_founded", ["complete_lattice", "is_sup_closed_compact"]], ["add", "def", "is_sup_closed_compact", ["complete_lattice"]], ["add", "theorem", "is_sup_closed_compact_iff_well_founded", ["complete_lattice"]], ["add", "theorem", "is_Sup_finite_compact", ["complete_lattice", "well_founded"]], ["add", "theorem", "well_founded_characterisations", ["complete_lattice"]], ["add", "theorem", "well_founded_iff_is_Sup_finite_compact", ["complete_lattice"]]]}, {"oldPath": "src/order/complete_well_founded.lean", "newPath": null, "changes": [["del", "theorem", "is_sup_closed_compact", ["complete_lattice", "is_Sup_finite_compact"]], ["del", "def", "is_Sup_finite_compact", ["complete_lattice"]], ["del", "theorem", "is_Sup_finite_compact_iff_is_sup_closed_compact", ["complete_lattice"]], ["del", "theorem", "well_founded", ["complete_lattice", "is_sup_closed_compact"]], ["del", "def", "is_sup_closed_compact", ["complete_lattice"]], ["del", "theorem", "is_sup_closed_compact_iff_well_founded", ["complete_lattice"]], ["del", "theorem", "is_Sup_finite_compact", ["complete_lattice", "well_founded"]], ["del", "theorem", "well_founded_characterisations", ["complete_lattice"]], ["del", "theorem", "well_founded_iff_is_Sup_finite_compact", ["complete_lattice"]]]}]}, {"timestamp": 1611495690, "sha": "5db7a188", "message": "feat(data/nat/basic): add decidable_exists_lt deciding existence of a natural below a bound satisfying a predicate (#5864)\nGiven a decidable predicate `P` on naturals it is decidable if there is a natural below any bound satisying the `P`.\ncloses #5755", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1611485405, "sha": "49c53d4f", "message": "feat(measure_theory/lp_space): define Lp, subtype of ae_eq_fun with finite norm (#5853)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "ae_measurable", ["measure_theory", "Lp"]], ["add", "theorem", "antimono", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_add", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_mk", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_neg", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_smul", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_sub", ["measure_theory", "Lp"]], ["add", "theorem", "coe_fn_zero", ["measure_theory", "Lp"]], ["add", "theorem", "measurable", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_const", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_const_smul", ["measure_theory", "Lp"]], ["add", "theorem", "mem_Lp_iff_snorm_lt_top", ["measure_theory", "Lp"]], ["add", "theorem", "mem_ℒp", ["measure_theory", "Lp"]], ["add", "theorem", "norm_const_smul", ["measure_theory", "Lp"]], ["add", "theorem", "norm_def", ["measure_theory", "Lp"]], ["add", "theorem", "norm_eq_zero_iff", ["measure_theory", "Lp"]], ["add", "theorem", "norm_neg", ["measure_theory", "Lp"]], ["add", "theorem", "norm_zero", ["measure_theory", "Lp"]], ["add", "theorem", "snorm_lt_top", ["measure_theory", "Lp"]], ["add", "theorem", "snorm_ne_top", ["measure_theory", "Lp"]], ["add", "def", "Lp", ["measure_theory"]], ["add", "theorem", "ae_eq_zero_of_snorm'_eq_zero", ["measure_theory"]], ["add", "theorem", "coe_nnnorm_ae_le_snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm'", ["measure_theory"]], ["add", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm'_lt_top", ["measure_theory"]], ["add", "theorem", "add", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "ae_eq", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "coe_fn_to_Lp", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "const_smul", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "integrable", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_of_exponent_le", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "neg", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_lt_top", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_mk_lt_top", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "snorm_ne_top", ["measure_theory", "mem_ℒp"]], ["add", "theorem", "sub", ["measure_theory", "mem_ℒp"]], ["add", "def", "to_Lp", ["measure_theory", "mem_ℒp"]], ["add", "def", "mem_ℒp", ["measure_theory"]], ["add", "theorem", "mem_ℒp_congr_ae", ["measure_theory"]], ["add", "theorem", "mem_ℒp_const", ["measure_theory"]], ["add", "theorem", "mem_ℒp_one_iff_integrable", ["measure_theory"]], ["add", "theorem", "mem_ℒp_zero_iff_ae_measurable", ["measure_theory"]], ["add", "def", "snorm'", ["measure_theory"]], ["add", "theorem", "snorm'_add_le", ["measure_theory"]], ["add", "theorem", "snorm'_add_lt_top_of_le_one", ["measure_theory"]], ["add", "theorem", "snorm'_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm'_const'", ["measure_theory"]], ["add", "theorem", "snorm'_const", ["measure_theory"]], ["add", "theorem", "snorm'_const_of_probability_measure", ["measure_theory"]], ["add", "theorem", "snorm'_const_smul", ["measure_theory"]], ["add", "theorem", "snorm'_eq_zero_iff", ["measure_theory"]], ["add", "theorem", "snorm'_eq_zero_of_ae_zero'", ["measure_theory"]], ["add", "theorem", "snorm'_eq_zero_of_ae_zero", ["measure_theory"]], ["add", "theorem", "snorm'_exponent_zero", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm'_mul_rpow_measure_univ", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm'_of_exponent_le", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "snorm'_le_snorm_ess_sup_mul_rpow_measure_univ", ["measure_theory"]], ["add", "theorem", "snorm'_lt_top_of_snorm'_lt_top_of_exponent_le", ["measure_theory"]], ["add", "theorem", "snorm'_measure_zero_of_exponent_zero", ["measure_theory"]], ["add", "theorem", "snorm'_measure_zero_of_neg", ["measure_theory"]], ["add", "theorem", "snorm'_measure_zero_of_pos", ["measure_theory"]], ["add", "theorem", "snorm'_neg", ["measure_theory"]], ["add", "theorem", "snorm'_smul_le_mul_snorm'", ["measure_theory"]], ["add", "theorem", "snorm'_zero'", ["measure_theory"]], ["add", "theorem", "snorm'_zero", ["measure_theory"]], ["add", "def", "snorm", ["measure_theory"]], ["add", "theorem", "snorm_add_le", ["measure_theory"]], ["add", "theorem", "snorm_add_lt_top", ["measure_theory"]], ["add", "theorem", "snorm_add_lt_top_of_one_le", ["measure_theory"]], ["add", "theorem", "snorm_ae_eq_fun", ["measure_theory"]], ["add", "theorem", "snorm_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm_const'", ["measure_theory"]], ["add", "theorem", "snorm_const", ["measure_theory"]], ["add", "theorem", "snorm_const_smul", ["measure_theory"]], ["add", "theorem", "snorm_eq_snorm'", ["measure_theory"]], ["add", "theorem", "snorm_eq_zero_iff", ["measure_theory"]], ["add", "def", "snorm_ess_sup", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_add_le", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_congr_ae", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_const", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_const_smul", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_eq_zero_iff", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_measure_zero", ["measure_theory"]], ["add", "theorem", "snorm_ess_sup_zero", ["measure_theory"]], ["add", "theorem", "snorm_exponent_top", ["measure_theory"]], ["add", "theorem", "snorm_exponent_zero", ["measure_theory"]], ["add", "theorem", "snorm_le_snorm_of_exponent_le", ["measure_theory"]], ["add", "theorem", "snorm_measure_zero", ["measure_theory"]], ["add", "theorem", "snorm_neg", ["measure_theory"]], ["add", "theorem", "snorm_zero", ["measure_theory"]], ["add", "theorem", "zero_mem_ℒp", ["measure_theory"]], ["del", "theorem", "ae_eq_zero_of_snorm'_eq_zero", ["ℒp_space"]], ["del", "theorem", "coe_nnnorm_ae_le_snorm_ess_sup", ["ℒp_space"]], ["del", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm'", ["ℒp_space"]], ["del", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm'_lt_top", ["ℒp_space"]], ["del", "theorem", "add", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "ae_eq", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "const_smul", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "integrable", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "mem_ℒp_of_exponent_le", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "neg", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "snorm_lt_top", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "snorm_ne_top", ["ℒp_space", "mem_ℒp"]], ["del", "theorem", "sub", ["ℒp_space", "mem_ℒp"]], ["del", "def", "mem_ℒp", ["ℒp_space"]], ["del", "theorem", "mem_ℒp_congr_ae", ["ℒp_space"]], ["del", "theorem", "mem_ℒp_const", ["ℒp_space"]], ["del", "theorem", "mem_ℒp_one_iff_integrable", ["ℒp_space"]], ["del", "theorem", "mem_ℒp_zero_iff_ae_measurable", ["ℒp_space"]], ["del", "def", "snorm'", ["ℒp_space"]], ["del", "theorem", "snorm'_add_le", ["ℒp_space"]], ["del", "theorem", "snorm'_add_lt_top_of_le_one", ["ℒp_space"]], ["del", "theorem", "snorm'_congr_ae", ["ℒp_space"]], ["del", "theorem", "snorm'_const'", ["ℒp_space"]], ["del", "theorem", "snorm'_const", ["ℒp_space"]], ["del", "theorem", "snorm'_const_of_probability_measure", ["ℒp_space"]], ["del", "theorem", "snorm'_const_smul", ["ℒp_space"]], ["del", "theorem", "snorm'_eq_zero_iff", ["ℒp_space"]], ["del", "theorem", "snorm'_eq_zero_of_ae_zero'", ["ℒp_space"]], ["del", "theorem", "snorm'_eq_zero_of_ae_zero", ["ℒp_space"]], ["del", "theorem", "snorm'_exponent_zero", ["ℒp_space"]], ["del", "theorem", "snorm'_le_snorm'_mul_rpow_measure_univ", ["ℒp_space"]], ["del", "theorem", "snorm'_le_snorm'_of_exponent_le", ["ℒp_space"]], ["del", "theorem", "snorm'_le_snorm_ess_sup", ["ℒp_space"]], ["del", "theorem", "snorm'_le_snorm_ess_sup_mul_rpow_measure_univ", ["ℒp_space"]], ["del", "theorem", "snorm'_lt_top_of_snorm'_lt_top_of_exponent_le", ["ℒp_space"]], ["del", "theorem", "snorm'_measure_zero_of_exponent_zero", ["ℒp_space"]], ["del", "theorem", "snorm'_measure_zero_of_neg", ["ℒp_space"]], ["del", "theorem", "snorm'_measure_zero_of_pos", ["ℒp_space"]], ["del", "theorem", "snorm'_neg", ["ℒp_space"]], ["del", "theorem", "snorm'_smul_le_mul_snorm'", ["ℒp_space"]], ["del", "theorem", "snorm'_zero'", ["ℒp_space"]], ["del", "theorem", "snorm'_zero", ["ℒp_space"]], ["del", "def", "snorm", ["ℒp_space"]], ["del", "theorem", "snorm_add_le", ["ℒp_space"]], ["del", "theorem", "snorm_add_lt_top", ["ℒp_space"]], ["del", "theorem", "snorm_add_lt_top_of_one_le", ["ℒp_space"]], ["del", "theorem", "snorm_congr_ae", ["ℒp_space"]], ["del", "theorem", "snorm_const'", ["ℒp_space"]], ["del", "theorem", "snorm_const", ["ℒp_space"]], ["del", "theorem", "snorm_const_smul", ["ℒp_space"]], ["del", "theorem", "snorm_eq_snorm'", ["ℒp_space"]], ["del", "theorem", "snorm_eq_zero_iff", ["ℒp_space"]], ["del", "def", "snorm_ess_sup", ["ℒp_space"]], ["del", "theorem", "snorm_ess_sup_add_le", ["ℒp_space"]], ["del", "theorem", "snorm_ess_sup_congr_ae", ["ℒp_space"]], ["del", "theorem", "snorm_ess_sup_const", ["ℒp_space"]], ["del", "theorem", "snorm_ess_sup_const_smul", ["ℒp_space"]], ["del", "theorem", "snorm_ess_sup_eq_zero_iff", ["ℒp_space"]], ["del", "theorem", "snorm_ess_sup_measure_zero", ["ℒp_space"]], ["del", "theorem", "snorm_ess_sup_zero", ["ℒp_space"]], ["del", "theorem", "snorm_exponent_top", ["ℒp_space"]], ["del", "theorem", "snorm_exponent_zero", ["ℒp_space"]], ["del", "theorem", "snorm_le_snorm_of_exponent_le", ["ℒp_space"]], ["del", "theorem", "snorm_measure_zero", ["ℒp_space"]], ["del", "theorem", "snorm_neg", ["ℒp_space"]], ["del", "theorem", "snorm_zero", ["ℒp_space"]], ["del", "theorem", "zero_mem_ℒp", ["ℒp_space"]]]}]}, {"timestamp": 1611471040, "sha": "aa744dba", "message": "feat(topology/subset_properties): a locally compact space with second countable topology is sigma compact (#5689)\n* add `set.subsingleton.induction_on`, `set.Union_eq_univ_iff`, and `set.bUnion_eq_univ_iff`;\n* make `tactic.interactive.nontrivial` try `apply_instance` before\n `simp`;\n* add `dense.inter_nhds_nonempty`;\n* a subsingleton is compact (lemma for sets, instance for spaces);\n* in a locally compact space, every point has a compact neighborhood;\n* a compact space is sigma compact;\n* a locally compact space with second countable topology is sigma\n compact;\n* add `dense.bUnion_uniformity_ball`: the uniform neighborhoods of all\n points of a dense set cover the whole space\nSome of these changes are leftovers from a failed attempt to prove a\nwrong statement.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "induction_on", ["set", "subsingleton"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_eq_univ_iff", ["set"]], ["add", "theorem", "bUnion_eq_univ_iff", ["set"]]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "inter_nhds_nonempty", ["dense"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "exists_compact_mem_nhds", []], ["add", "theorem", "is_compact", ["set", "subsingleton"]], ["add", "theorem", "of_countable", ["sigma_compact_space"]], ["add", "theorem", "sigma_compact_space_of_locally_compact_second_countable", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "bUnion_uniformity_ball", ["dense"]]]}]}, {"timestamp": 1611459938, "sha": "f414fcaa", "message": "feat(analysis/analytic/composition): filling small holes in existing API (#5822)\nThis PR expands the existing API around the composition of formal multilinear series.\nAlso makes the `finset` argument to `finset.prod_subtype` and `finset.add_subtype` explicit instead of implicit.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": [["add", "def", "comp_along_composition", ["continuous_multilinear_map"]], ["add", "theorem", "comp_along_composition_apply", ["continuous_multilinear_map"]], ["add", "def", "comp_along_composition_aux", ["continuous_multilinear_map"]], ["add", "theorem", "comp_along_composition_aux_bound", ["continuous_multilinear_map"]], ["add", "theorem", "apply_composition_single", ["formal_multilinear_series"]], ["del", "def", "comp_along_composition_multilinear", ["formal_multilinear_series"]], ["del", "theorem", "comp_along_composition_multilinear_bound", ["formal_multilinear_series"]], ["add", "theorem", "comp_coeff_one", ["formal_multilinear_series"]], ["add", "theorem", "comp_continuous_linear_map_apply_composition", ["formal_multilinear_series"]], ["add", "theorem", "comp_remove_zero", ["formal_multilinear_series"]], ["mod", "theorem", "id_comp", ["formal_multilinear_series"]], ["add", "theorem", "remove_zero_apply_composition", ["formal_multilinear_series"]], ["add", "theorem", "remove_zero_comp_of_pos", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": [["add", "def", "comp_continuous_linear_map", ["formal_multilinear_series"]], ["add", "theorem", "comp_continuous_linear_map_apply", ["formal_multilinear_series"]], ["add", "def", "remove_zero", ["formal_multilinear_series"]], ["add", "theorem", "remove_zero_coeff_succ", ["formal_multilinear_series"]], ["add", "theorem", "remove_zero_coeff_zero", ["formal_multilinear_series"]], ["add", "theorem", "remove_zero_of_pos", ["formal_multilinear_series"]]]}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["mod", "def", "blocks_fun", ["composition"]], ["add", "theorem", "blocks_fun_mem_blocks", ["composition"]], ["add", "theorem", "eq_ones_iff_le_length", ["composition"]], ["add", "theorem", "eq_ones_iff_length", ["composition"]], ["del", "theorem", "eq_single_iff", ["composition"]], ["add", "theorem", "eq_single_iff_length", ["composition"]], ["add", "theorem", "ne_single_iff", ["composition"]], ["add", "theorem", "one_le_blocks_fun", ["composition"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_eq_one_of_forall_eq", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_to_finset_eq_subtype", ["finset"]]]}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}]}, {"timestamp": 1611454804, "sha": "160d243d", "message": "chore(scripts): update nolints.txt (#5865)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611406938, "sha": "8da574f5", "message": "feat(algebra/pointwise): a lemma about pointwise addition/multiplication of bdd_above sets (#5859)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "bdd_above_mul", ["set"]]]}]}, {"timestamp": 1611406936, "sha": "3a136f81", "message": "refactor(analysis/analytic/composition): extend definition, extract a lemma from a proof (#5850)\nExtract a standalone lemma of the proof that the composition of two analytic functions is well-behaved, and extend a little bit the definition of the sets which are involved in the corresponding change of variables.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": [["mod", "def", "comp_change_of_variables", ["formal_multilinear_series"]], ["add", "theorem", "comp_change_of_variables_sum", ["formal_multilinear_series"]], ["mod", "def", "comp_partial_sum_source", ["formal_multilinear_series"]], ["mod", "def", "comp_partial_sum_target", ["formal_multilinear_series"]], ["mod", "def", "comp_partial_sum_target_set", ["formal_multilinear_series"]], ["mod", "theorem", "mem_comp_partial_sum_source_iff", ["formal_multilinear_series"]], ["mod", "theorem", "mem_comp_partial_sum_target_iff", ["formal_multilinear_series"]]]}]}, {"timestamp": 1611399984, "sha": "74760f22", "message": "chore(set_theory/ordinal): use rel_iso notation in ordinal (#5857)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "def", "rel_iso_out", ["ordinal"]]]}]}, {"timestamp": 1611387600, "sha": "013b902d", "message": "feat(order/rel_iso): generalise several lemmas to assume only has_le not preorder (#5858)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "theorem", "coe_to_order_embedding", ["order_iso"]], ["mod", "def", "to_order_embedding", ["order_iso"]]]}]}, {"timestamp": 1611368267, "sha": "b0e874e0", "message": "chore(scripts): update nolints.txt (#5856)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611352200, "sha": "04972f69", "message": "docs(undergrad.yaml): update with #5724 and #5788 (#5855)\nAdd results from a couple of recent PRs. Also correct an apparent oversight from the translation of the file.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1611336038, "sha": "3250fc30", "message": "feat(analysis/mean_inequalities, measure_theory/lp_space): extend mem_Lp.add to all p in ennreal (#5828)\nShow `(a ^ q + b ^ q) ^ (1/q) ≤ (a ^ p + b ^ p) ^ (1/p)` for `a,b : ennreal` and `0 < p <= q`.\nUse it to show that for `p <= 1`, if measurable functions `f` and `g` are in Lp, `f+g` is also in Lp (the case `1 <= p` is already done).", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "add_rpow_le_rpow_add", ["ennreal"]], ["add", "theorem", "rpow_add_le_add_rpow", ["ennreal"]], ["add", "theorem", "rpow_add_rpow_le", ["ennreal"]], ["add", "theorem", "rpow_add_rpow_le_add", ["ennreal"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "div_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "le_rpow_self_of_one_le", ["ennreal"]], ["add", "theorem", "rpow_le_self_of_le_one", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_count'", ["measure_theory"]], ["add", "theorem", "lintegral_count", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "add", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "sub", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "snorm'_add_lt_top_of_le_one", ["ℒp_space"]], ["add", "theorem", "snorm_add_lt_top", ["ℒp_space"]], ["add", "theorem", "snorm_add_lt_top_of_one_le", ["ℒp_space"]]]}]}, {"timestamp": 1611331314, "sha": "f48ce7ec", "message": "feat(algebra/lie/basic): define the radical of a Lie algebra and prove it is solvable (#5833)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "def", "radical", ["lie_algebra"]], ["mod", "theorem", "derived_series_add_eq_bot", ["lie_ideal"]], ["add", "theorem", "of_bot_eq_bot", ["lie_ideal"]], ["add", "theorem", "unique_of_bot", ["lie_ideal"]], ["mod", "theorem", "coe_to_submodule", ["lie_submodule"]], ["mod", "theorem", "coe_to_submodule_eq_iff", ["lie_submodule"]], ["mod", "theorem", "ext", ["lie_submodule"]], ["mod", "theorem", "mem_carrier", ["lie_submodule"]], ["mod", "theorem", "mem_coe", ["lie_submodule"]], ["mod", "theorem", "mem_coe_submodule", ["lie_submodule"]], ["add", "theorem", "of_bot_eq_bot", ["lie_submodule"]], ["add", "theorem", "unique_of_bot", ["lie_submodule"]], ["add", "theorem", "zero_mem", ["lie_submodule"]]]}]}, {"timestamp": 1611319951, "sha": "cb618e01", "message": "feat(analysis/analytic): a continuous linear map defines an analytic function (#5840)\nAlso add convenience lemmas with conclusion `radius = ⊤`.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "radius_eq_top_of_eventually_eq_zero", ["formal_multilinear_series"]], ["add", "theorem", "radius_eq_top_of_forall_image_add_eq_zero", ["formal_multilinear_series"]], ["add", "theorem", "radius_eq_top_of_forall_nnreal_is_O", ["formal_multilinear_series"]]]}, {"oldPath": null, "newPath": "src/analysis/analytic/linear.lean", "changes": [["add", "def", "fpower_series", ["continuous_linear_map"]], ["add", "theorem", "fpower_series_apply_add_two", ["continuous_linear_map"]], ["add", "theorem", "fpower_series_radius", ["continuous_linear_map"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "eq_top_of_forall_nnreal_le", ["ennreal"]]]}]}, {"timestamp": 1611319950, "sha": "faba9cea", "message": "chore(algebra/group_power): generalize `semiring` version of Bernoulli's inequality (#5831)\nNow `one_add_mul_le_pow'` assumes `0 ≤ a * a`, `0 ≤ (1 + a) * (1 +\na)`, and `0 ≤ 2 + a`.\nAlso add a couple of convenience lemmas.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "cast_le_pow_div_sub", ["nat"]], ["add", "theorem", "cast_le_pow_sub_div_sub", ["nat"]], ["mod", "theorem", "one_add_mul_le_pow'", []], ["mod", "theorem", "one_add_mul_le_pow", []], ["add", "theorem", "one_add_mul_sub_le_pow", []], ["del", "theorem", "one_add_sub_mul_le_pow", []]]}]}, {"timestamp": 1611319948, "sha": "0feb1d20", "message": "feat(measure_theory/interval_integral) : add integration by parts (#5724)\nA direct application of FTC-2 for interval_integral.", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_congr", ["interval_integral"]], ["add", "theorem", "integral_deriv_mul_eq_sub", ["interval_integral"]], ["add", "theorem", "integral_mul_deriv_eq_deriv_mul", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "self_mem_ae_restrict", ["measure_theory"]]]}]}, {"timestamp": 1611319946, "sha": "de10203f", "message": "feat(order/modular_lattice): define modular lattices (#5564)\nDefines modular lattices\nDefines the diamond isomorphisms in a modular lattice\nPlaces `is_modular_lattice` instances on a `distrib_lattice`, the lattice of `subgroup`s of a `comm_group`, and the lattice of `submodule`s of a `module`.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "mem_sup'", ["subgroup"]], ["add", "theorem", "mem_sup", ["subgroup"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "is_atom_iff_is_coatom", ["is_compl"]], ["add", "theorem", "is_coatom_iff_is_atom", ["is_compl"]]]}, {"oldPath": null, "newPath": "src/order/modular_lattice.lean", "changes": [["add", "def", "inf_Icc_order_iso_Icc_sup", []], ["add", "theorem", "inf_sup_assoc_of_le", []], ["add", "def", "Iic_order_iso_Ici", ["is_compl"]], ["add", "theorem", "sup_inf_sup_assoc", ["is_modular_lattice"]], ["add", "theorem", "is_modular_lattice_iff_sup_inf_sup_assoc", []], ["add", "theorem", "sup_inf_assoc_of_le", []]]}]}, {"timestamp": 1611308449, "sha": "38ae9b37", "message": "chore(data/nat/basic): reuse a proof, drop a duplicate (#5836)\nDrop `nat.div_mul_le_self'`, use `nat.div_mul_le_self` instead.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "div_mul_le_self'", ["nat"]]]}]}, {"timestamp": 1611301191, "sha": "8b4c455b", "message": "feat(data/polynomial/algebra_map): aeval_map (#5843)\nProves `aeval_map`, which relates `aeval` within an `is_scalar_tower`.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_map", ["polynomial"]]]}]}, {"timestamp": 1611296176, "sha": "bef50a4d", "message": "feat(field_theory/minpoly): Minimal polynomials of degree one (#5844)\nIf the minimal polynomial has degree one then the element in question lies in the base ring.", "changes": [{"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["add", "theorem", "eq_zero", ["minpoly"]], ["add", "theorem", "mem_range_of_degree_eq_one", ["minpoly"]]]}]}, {"timestamp": 1611289197, "sha": "6958d8cd", "message": "feat(topology/metric_space/{basic,emetric_space}): product of balls of the same size (#5846)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ball_prod_same", []], ["add", "theorem", "closed_ball_prod_same", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "ball_prod_same", ["emetric"]], ["add", "theorem", "closed_ball_prod_same", ["emetric"]]]}]}, {"timestamp": 1611284127, "sha": "244b3ed0", "message": "chore(scripts): update nolints.txt (#5841)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611272857, "sha": "c681f48c", "message": "chore(analysis/analytic/composition): minor golfing (#5839)", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}]}, {"timestamp": 1611272852, "sha": "228c00ba", "message": "feat(computability/language): le on languages (#5704)", "changes": [{"oldPath": "src/computability/language.lean", "newPath": "src/computability/language.lean", "changes": [["mod", "theorem", "add_self", ["language"]], ["add", "theorem", "add_supr", ["language"]], ["add", "theorem", "le_add_congr", ["language"]], ["add", "theorem", "le_iff", ["language"]], ["add", "theorem", "le_mul_congr", ["language"]], ["add", "theorem", "mem_add", ["language"]], ["add", "theorem", "mem_mul", ["language"]], ["add", "theorem", "mem_one", ["language"]], ["add", "theorem", "mem_star", ["language"]], ["add", "theorem", "mul_self_star_comm", ["language"]], ["add", "theorem", "mul_supr", ["language"]], ["add", "theorem", "one_add_self_mul_star_eq_star", ["language"]], ["add", "theorem", "one_add_star_mul_self_eq_star", ["language"]], ["add", "theorem", "star_eq_supr_pow", ["language"]], ["add", "theorem", "star_mul_le_left_of_mul_le_left", ["language"]], ["add", "theorem", "star_mul_le_right_of_mul_le_right", ["language"]], ["add", "theorem", "supr_add", ["language"]], ["add", "theorem", "supr_mul", ["language"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "sup_supr", []], ["add", "theorem", "supr_sup", []]]}]}, {"timestamp": 1611262024, "sha": "b2ca7614", "message": "chore(algebra/group_power): add `(a+b)^2=a^2+2ab+b^2` (#5838)\nAlso generalize 2 lemmas from `comm_semiring` to `semiring`.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "add_pow_two", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "dvd_add", []]]}]}, {"timestamp": 1611255557, "sha": "fac0f253", "message": "fix(tactic/default): make field_simp work with import tactic (#5832)", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}]}, {"timestamp": 1611237680, "sha": "b52b3041", "message": "feat(algebra/lie/basic): show `I + J` is solvable if Lie ideals `I`, `J` are solvable (#5819)\nThe key result is `lie_algebra.is_solvable_add`", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "def", "derived_series", ["lie_algebra"]], ["mod", "def", "derived_series_of_ideal", ["lie_algebra"]], ["mod", "theorem", "derived_series_of_ideal_add", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_add_le_add", ["lie_algebra"]], ["mod", "theorem", "derived_series_of_ideal_antimono", ["lie_algebra"]], ["mod", "theorem", "derived_series_of_ideal_le_self", ["lie_algebra"]], ["mod", "theorem", "derived_series_of_ideal_mono", ["lie_algebra"]], ["mod", "theorem", "derived_series_of_ideal_succ_le", ["lie_algebra"]], ["add", "theorem", "derived_series_add_eq_bot", ["lie_ideal"]], ["mod", "def", "lower_central_series", ["lie_module"]], ["add", "theorem", "lower_central_series_succ", ["lie_module"]], ["add", "theorem", "lower_central_series_zero", ["lie_module"]]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": [["add", "theorem", "iterate_sup_le_sup_iff", ["preorder_hom"]]]}]}, {"timestamp": 1611227882, "sha": "3ef82811", "message": "fix(group_theory/group_action/defs): fix minor typo (#5827)\nheirarchy -> hierarchy", "changes": [{"oldPath": "src/group_theory/group_action/defs.lean", "newPath": "src/group_theory/group_action/defs.lean", "changes": []}]}, {"timestamp": 1611227879, "sha": "b3a21123", "message": "chore(algebra/group/conj): move `conj_injective` and use existing proofs (#5798)", "changes": [{"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": [["add", "theorem", "conj_injective", []]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "conj_injective", []]]}]}, {"timestamp": 1611227878, "sha": "d66d5639", "message": "feat(measure_theory/interval_integral): FTC-2 for the open set (#5733)\nA follow-up to #4945. I replaced `integral_eq_sub_of_has_deriv_at'` with a stronger version that holds for functions that have a derivative on an `Ioo` (as opposed to an `Ico`). Inspired by [this](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/FTC-2.20on.20open.20set/near/222177308) conversation on Zulip.\nI also emended docstrings to reflect changes made in #5647.", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}]}, {"timestamp": 1611216925, "sha": "ce9bc688", "message": "feat(ring_theory/polynomial): symmetric polynomials and elementary symmetric polynomials (#5788)\nDefine symmetric polynomials and elementary symmetric polynomials, and prove some basic facts about them.", "changes": [{"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["add", "theorem", "powerset_len_zero", ["finset"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/symmetric.lean", "changes": [["add", "def", "esymm", ["mv_polynomial"]], ["add", "theorem", "esymm_eq_sum_monomial", ["mv_polynomial"]], ["add", "theorem", "esymm_eq_sum_subtype", ["mv_polynomial"]], ["add", "theorem", "esymm_is_symmetric", ["mv_polynomial"]], ["add", "theorem", "esymm_zero", ["mv_polynomial"]], ["add", "theorem", "C", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "add", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "map", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "mul", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "neg", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "one", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "smul", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "sub", ["mv_polynomial", "is_symmetric"]], ["add", "theorem", "zero", ["mv_polynomial", "is_symmetric"]], ["add", "def", "is_symmetric", ["mv_polynomial"]], ["add", "theorem", "map_esymm", ["mv_polynomial"]], ["add", "theorem", "rename_esymm", ["mv_polynomial"]]]}]}, {"timestamp": 1611195523, "sha": "a19e48b1", "message": "chore(scripts): update nolints.txt (#5826)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611181990, "sha": "b2d95c0c", "message": "feat(data/nat/modeq): Generalised version of the Chinese remainder theorem (#5683)\nThat allows the moduli to not be coprime, assuming the necessary condition. Old crt is now in terms of this one", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "gcd_a_zero_left", ["euclidean_domain"]], ["add", "theorem", "gcd_b_zero_left", ["euclidean_domain"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "sub_div_of_dvd", ["int"]], ["add", "theorem", "sub_div_of_dvd_sub", ["int"]]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "gcd_a_zero_left", ["nat"]], ["add", "theorem", "gcd_a_zero_right", ["nat"]], ["add", "theorem", "gcd_b_zero_left", ["nat"]], ["add", "theorem", "gcd_b_zero_right", ["nat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "gcd_eq_zero_iff", ["nat"]], ["add", "theorem", "lcm_ne_zero", ["nat"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "def", "chinese_remainder'", ["nat", "modeq"]], ["add", "theorem", "modeq_one", ["nat", "modeq"]]]}]}, {"timestamp": 1611170737, "sha": "8b6f541e", "message": "feat(field_theory/normal): Splitting field is normal (#5768)\nProves that splitting fields are normal.", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "of_is_splitting_field", ["normal"]]]}]}, {"timestamp": 1611159162, "sha": "7c892653", "message": "chore(data/list/range): Add range_zero and rename range_concat to range_succ (#5821)\nThe name `range_concat` was derived from `range'_concat`, where there are multiple possible expansions for `range' s n.succ`.\nFor `range` there is only one choice, and naming the lemma after the result rather than the statement makes it harder to find.", "changes": [{"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["del", "theorem", "range_concat", ["list"]], ["add", "theorem", "range_succ", ["list"]], ["add", "theorem", "range_zero", ["list"]]]}, {"oldPath": "src/data/multiset/range.lean", "newPath": "src/data/multiset/range.lean", "changes": []}]}, {"timestamp": 1611153622, "sha": "2ec396a7", "message": "chore(data/dfinsupp): add `dfinsupp.prod_comm` (#5817)\nThis is the same lemma as `finsupp.prod_comm` but for dfinsupp", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "prod_comm", ["dfinsupp"]]]}]}, {"timestamp": 1611143460, "sha": "9cdffe9c", "message": "refactor(data/fin): shorter proof of `mk.inj_iff` (#5811)\nCo-authors: `lean-gptf`, Yuhuai Wu", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}]}, {"timestamp": 1611143458, "sha": "c700791b", "message": "feat(data/list/range): nth_le_fin_range (#5456)", "changes": [{"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "nth_le_fin_range", ["list"]], ["add", "theorem", "nth_le_range'", ["list"]]]}]}, {"timestamp": 1611143456, "sha": "9ae33174", "message": "feat(data/fin): add_comm_monoid and simp lemmas (#5010)\nProvide `add_comm_monoid` for `fin (n + 1)`, which makes proofs that have to do with `bit0`, `bit1`, and `nat.cast` and related happy. Provide the specialized lemmas as simp lemmas. Also provide various simp lemmas about multiplication, but without the associated `comm_monoid`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["del", "def", "add_comm_semigroup", ["fin"]]]}]}, {"timestamp": 1611136268, "sha": "a7a4f34c", "message": "feat(algebraic_geometry/is_open_comap_C): add file is_open_comap_C, prove that Spec R[x] \\to Spec R is an open map (#5693)\nThis file is the first part of a proof of Chevalley's Theorem. It contains a proof that the morphism Spec R[x] \\to Spec R is open. In a later PR, I hope to prove that, under the same morphism, the image of a closed set is constructible.", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/is_open_comap_C.lean", "changes": [["add", "theorem", "comap_C_mem_image_of_Df", ["algebraic_geometry", "polynomial"]], ["add", "def", "image_of_Df", ["algebraic_geometry", "polynomial"]], ["add", "theorem", "image_of_Df_eq_comap_C_compl_zero_locus", ["algebraic_geometry", "polynomial"]], ["add", "theorem", "is_open_image_of_Df", ["algebraic_geometry", "polynomial"]], ["add", "theorem", "is_open_map_comap_C", ["algebraic_geometry", "polynomial"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["add", "theorem", "is_open_basic_open", ["prime_spectrum"]], ["add", "theorem", "mem_compl_zero_locus_iff_not_mem", ["prime_spectrum"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "exists_coeff_not_mem_C_inverse", ["polynomial"]], ["add", "theorem", "mem_span_C_coeff", ["polynomial"]], ["add", "theorem", "span_le_of_coeff_mem_C_inverse", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "is_integral_domain_map_C_quotient", ["ideal"]], ["add", "theorem", "is_prime_map_C_of_is_prime", ["ideal"]]]}]}, {"timestamp": 1611131577, "sha": "0c57d1e7", "message": "feat(category_theory/monad): algebras for the coproduct monad (#5679)\nWIP, I'll fix it up when the dependent PRs merge\n\n- [x] depends on: #5674\n- [x] depends on: #5677 \n- [x] depends on: #5678", "changes": [{"oldPath": null, "newPath": "src/category_theory/monad/products.lean", "changes": [["add", "def", "algebra_equiv_under", ["category_theory"]], ["add", "def", "algebra_to_under", ["category_theory"]], ["add", "def", "coalgebra_equiv_over", ["category_theory"]], ["add", "def", "coalgebra_to_over", ["category_theory"]], ["add", "def", "over_to_coalgebra", ["category_theory"]], ["add", "def", "under_to_algebra", ["category_theory"]]]}]}, {"timestamp": 1611124859, "sha": "e41b917c", "message": "feat(char_p/quotient): Add a lemma to inherit char_p from the underlying ring (#5809)", "changes": [{"oldPath": "src/algebra/char_p/quotient.lean", "newPath": "src/algebra/char_p/quotient.lean", "changes": [["add", "theorem", "quotient'", ["char_p"]]]}]}, {"timestamp": 1611124857, "sha": "385173df", "message": "feat(ring_theory/ideal/operations): generalize quotient of algebras (#5802)\nI generalize #5703 (that was merged earlier today... sorry for that, I should have thought more carefully about it) to be able to work with `S/I` as an `R`-algebra, where `S` is an `R`-algebra. (In #5703 only `R/I` was considered.) The proofs are the same.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "alg_map_eq", ["ideal", "quotient"]], ["mod", "def", "mkₐ", ["ideal", "quotient"]], ["mod", "theorem", "mkₐ_eq_mk", ["ideal", "quotient"]], ["mod", "theorem", "mkₐ_ker", ["ideal", "quotient"]], ["mod", "theorem", "mkₐ_surjective", ["ideal", "quotient"]], ["mod", "theorem", "mkₐ_to_ring_hom", ["ideal", "quotient"]]]}]}, {"timestamp": 1611124855, "sha": "31fd5b58", "message": "feat(category_theory/limits): preserve monomorphisms (#5801)\nA functor which preserves pullbacks also preserves monomorphisms.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/constructions/epi_mono.lean", "changes": [["add", "theorem", "reflects_mono", ["category_theory"]]]}]}, {"timestamp": 1611117731, "sha": "a3ef65da", "message": "feat(algebra/lie/basic): additional lemmas concerning `lie_algebra.derived_series_of_ideal` (#5815)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "derived_series_of_ideal_add", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_antimono", ["lie_algebra"]], ["mod", "theorem", "derived_series_of_ideal_le", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_le_self", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_mono", ["lie_algebra"]], ["mod", "theorem", "derived_series_of_ideal_succ_le", ["lie_algebra"]]]}]}, {"timestamp": 1611112826, "sha": "b1d56736", "message": "chore(scripts): update nolints.txt (#5816)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611101229, "sha": "d7a8709e", "message": "chore(algebra/group/hom): Add `mk_coe` lemmas (#5812)\nThese are the counterparts to the `coe_mk` lemmas.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "mk_coe", ["alg_hom"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "mk_coe", ["monoid_hom"]], ["add", "theorem", "mk_coe", ["monoid_with_zero_hom"]], ["add", "theorem", "mk_coe", ["mul_hom"]], ["add", "theorem", "mk_coe", ["one_hom"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "mk_coe", ["linear_map"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "mk_coe", ["ring_hom"]]]}]}, {"timestamp": 1611093556, "sha": "b1214293", "message": "feat(measure_theory/lp_space): extend the definition of Lp seminorm to p ennreal (#5808)\nRename the seminorm with real exponent to `snorm'`, introduce `snorm_ess_sup` for `L\\infty`, equal to the essential supremum of the norm.", "changes": [{"oldPath": "src/measure_theory/ess_sup.lean", "newPath": "src/measure_theory/ess_sup.lean", "changes": [["mod", "theorem", "ae_le_ess_sup", ["ennreal"]], ["mod", "theorem", "ess_sup_add_le", ["ennreal"]], ["mod", "theorem", "ess_sup_const_mul", ["ennreal"]], ["add", "theorem", "ess_sup_eq_zero_iff", ["ennreal"]], ["del", "theorem", "ess_sup_eq_zero_iff", []]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "ae_eq_zero_of_snorm'_eq_zero", ["ℒp_space"]], ["del", "theorem", "ae_eq_zero_of_snorm_eq_zero", ["ℒp_space"]], ["add", "theorem", "coe_nnnorm_ae_le_snorm_ess_sup", ["ℒp_space"]], ["add", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm'", ["ℒp_space"]], ["del", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm", ["ℒp_space"]], ["add", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm'_lt_top", ["ℒp_space"]], ["del", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm_lt_top", ["ℒp_space"]], ["mod", "theorem", "add", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "ae_eq", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "const_smul", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "integrable", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "mem_ℒp_of_exponent_le", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "neg", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "snorm_lt_top", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "snorm_ne_top", ["ℒp_space", "mem_ℒp"]], ["mod", "theorem", "sub", ["ℒp_space", "mem_ℒp"]], ["mod", "def", "mem_ℒp", ["ℒp_space"]], ["mod", "theorem", "mem_ℒp_congr_ae", ["ℒp_space"]], ["mod", "theorem", "mem_ℒp_const", ["ℒp_space"]], ["del", "theorem", "mem_ℒp_const_of_ne_zero", ["ℒp_space"]], ["del", "theorem", "mem_ℒp_const_of_nonneg", ["ℒp_space"]], ["del", "theorem", "mem_ℒp_of_snorm_lt_top", ["ℒp_space"]], ["add", "theorem", "mem_ℒp_zero_iff_ae_measurable", ["ℒp_space"]], ["add", "def", "snorm'", ["ℒp_space"]], ["add", "theorem", "snorm'_add_le", ["ℒp_space"]], ["add", "theorem", "snorm'_congr_ae", ["ℒp_space"]], ["add", "theorem", "snorm'_const'", ["ℒp_space"]], ["add", "theorem", "snorm'_const", ["ℒp_space"]], ["add", "theorem", "snorm'_const_of_probability_measure", ["ℒp_space"]], ["add", "theorem", "snorm'_const_smul", ["ℒp_space"]], ["add", "theorem", "snorm'_eq_zero_iff", ["ℒp_space"]], ["add", "theorem", "snorm'_eq_zero_of_ae_zero'", ["ℒp_space"]], ["add", "theorem", "snorm'_eq_zero_of_ae_zero", ["ℒp_space"]], ["add", "theorem", "snorm'_exponent_zero", ["ℒp_space"]], ["add", "theorem", "snorm'_le_snorm'_mul_rpow_measure_univ", ["ℒp_space"]], ["add", "theorem", "snorm'_le_snorm'_of_exponent_le", ["ℒp_space"]], ["add", "theorem", "snorm'_le_snorm_ess_sup", ["ℒp_space"]], ["add", "theorem", "snorm'_le_snorm_ess_sup_mul_rpow_measure_univ", ["ℒp_space"]], ["add", "theorem", "snorm'_lt_top_of_snorm'_lt_top_of_exponent_le", ["ℒp_space"]], ["add", "theorem", "snorm'_measure_zero_of_exponent_zero", ["ℒp_space"]], ["add", "theorem", "snorm'_measure_zero_of_neg", ["ℒp_space"]], ["add", "theorem", "snorm'_measure_zero_of_pos", ["ℒp_space"]], ["add", "theorem", "snorm'_neg", ["ℒp_space"]], ["add", "theorem", "snorm'_smul_le_mul_snorm'", ["ℒp_space"]], ["add", "theorem", "snorm'_zero'", ["ℒp_space"]], ["add", "theorem", "snorm'_zero", ["ℒp_space"]], ["mod", "def", "snorm", ["ℒp_space"]], ["mod", "theorem", "snorm_add_le", ["ℒp_space"]], ["mod", "theorem", "snorm_congr_ae", ["ℒp_space"]], ["mod", "theorem", "snorm_const'", ["ℒp_space"]], ["mod", "theorem", "snorm_const", ["ℒp_space"]], ["del", "theorem", "snorm_const_of_probability_measure", ["ℒp_space"]], ["mod", "theorem", "snorm_const_smul", ["ℒp_space"]], ["add", "theorem", "snorm_eq_snorm'", ["ℒp_space"]], ["mod", "theorem", "snorm_eq_zero_iff", ["ℒp_space"]], ["del", "theorem", "snorm_eq_zero_of_ae_zero'", ["ℒp_space"]], ["del", "theorem", "snorm_eq_zero_of_ae_zero", ["ℒp_space"]], ["add", "def", "snorm_ess_sup", ["ℒp_space"]], ["add", "theorem", "snorm_ess_sup_add_le", ["ℒp_space"]], ["add", "theorem", "snorm_ess_sup_congr_ae", ["ℒp_space"]], ["add", "theorem", "snorm_ess_sup_const", ["ℒp_space"]], ["add", "theorem", "snorm_ess_sup_const_smul", ["ℒp_space"]], ["add", "theorem", "snorm_ess_sup_eq_zero_iff", ["ℒp_space"]], ["add", "theorem", "snorm_ess_sup_measure_zero", ["ℒp_space"]], ["add", "theorem", "snorm_ess_sup_zero", ["ℒp_space"]], ["add", "theorem", "snorm_exponent_top", ["ℒp_space"]], ["mod", "theorem", "snorm_exponent_zero", ["ℒp_space"]], ["del", "theorem", "snorm_le_snorm_mul_rpow_measure_univ", ["ℒp_space"]], ["mod", "theorem", "snorm_le_snorm_of_exponent_le", ["ℒp_space"]], ["add", "theorem", "snorm_measure_zero", ["ℒp_space"]], ["del", "theorem", "snorm_measure_zero_of_exponent_zero", ["ℒp_space"]], ["del", "theorem", "snorm_measure_zero_of_neg", ["ℒp_space"]], ["del", "theorem", "snorm_measure_zero_of_pos", ["ℒp_space"]], ["mod", "theorem", "snorm_neg", ["ℒp_space"]], ["del", "theorem", "snorm_smul_le_mul_snorm", ["ℒp_space"]], ["del", "theorem", "snorm_zero'", ["ℒp_space"]], ["mod", "theorem", "snorm_zero", ["ℒp_space"]], ["add", "theorem", "zero_mem_ℒp", ["ℒp_space"]], ["del", "theorem", "zero_mem_ℒp_of_nonneg", ["ℒp_space"]], ["del", "theorem", "zero_mem_ℒp_of_pos", ["ℒp_space"]]]}]}, {"timestamp": 1611081763, "sha": "9d14a5f3", "message": "chore(order/filter/basic): add `eventually_eq.rfl` and `eventually_le.rfl` (#5805)", "changes": [{"oldPath": "src/analysis/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "ae_eq_refl", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "rfl", ["filter", "eventually_eq"]], ["add", "theorem", "rfl", ["filter", "eventually_le"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}]}, {"timestamp": 1611081761, "sha": "21b0b012", "message": "feat(analysis/normed_space,topology/metric_space): distance between diagonal vectors (#5803)\nAdd formulas for (e|nn|)dist between `λ _, a` and `λ _, b` as well\nas `∥(λ _, a)∥` and `nnnorm (λ _, a)`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "pi_nnnorm_const", []], ["add", "theorem", "pi_norm_const", []]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "forall_const", ["finset", "nonempty"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "sup_const", ["finset"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_pi_const", []], ["add", "theorem", "nndist_pi_const", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_pi_const", []]]}]}, {"timestamp": 1611076925, "sha": "da6e3c36", "message": "feat(data/buffer/parser/numeral): numeral parser defs (#5462)", "changes": [{"oldPath": null, "newPath": "src/data/buffer/parser/numeral.lean", "changes": [["add", "def", "of_fintype", ["parser", "numeral", "char"]], ["add", "def", "char", ["parser", "numeral"]], ["add", "def", "of_fintype", ["parser", "numeral", "from_one"]], ["add", "def", "from_one", ["parser", "numeral"]], ["add", "def", "of_fintype", ["parser", "numeral"]], ["add", "def", "numeral", ["parser"]]]}]}, {"timestamp": 1611061908, "sha": "8b47563e", "message": "chore(category_theory/adjunction): move reflective functor lemmas (#5800)\nMoves a lemma and describes a generalisation.", "changes": [{"oldPath": "src/category_theory/adjunction/reflective.lean", "newPath": "src/category_theory/adjunction/reflective.lean", "changes": [["add", "theorem", "unit_obj_eq_map_unit", ["category_theory"]]]}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": [["del", "theorem", "comparison_ess_surj_aux", ["category_theory", "reflective"]]]}]}, {"timestamp": 1611061906, "sha": "90763c46", "message": "feat(algebra/lie/basic): generalise the definition of `lie_algebra.derived_series` (#5794)\nThis generalisation will make it easier to relate properties of the derived\nseries of a Lie algebra and the derived series of its ideals (regarded as Lie\nalgebras in their own right).\nThe key definition is `lie_algebra.derived_series_of_ideal` and the key result is `lie_ideal.derived_series_eq_bot_iff`.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "def", "derived_series", ["lie_algebra"]], ["add", "theorem", "derived_series_def", ["lie_algebra"]], ["add", "def", "derived_series_of_ideal", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_le", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_succ", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_succ_le", ["lie_algebra"]], ["add", "theorem", "derived_series_of_ideal_zero", ["lie_algebra"]], ["add", "theorem", "map_zero", ["lie_algebra"]], ["add", "theorem", "le_ker_iff", ["lie_algebra", "morphism"]], ["add", "theorem", "map_bot_iff", ["lie_algebra", "morphism"]], ["mod", "theorem", "mem_ker", ["lie_algebra", "morphism"]], ["mod", "theorem", "comap_mono", ["lie_ideal"]], ["add", "theorem", "derived_series_eq_bot_iff", ["lie_ideal"]], ["add", "theorem", "derived_series_eq_derived_series_of_ideal_comap", ["lie_ideal"]], ["add", "theorem", "derived_series_eq_derived_series_of_ideal_map", ["lie_ideal"]], ["mod", "theorem", "map_mono", ["lie_ideal"]], ["add", "theorem", "add_mem", ["lie_subalgebra"]], ["mod", "theorem", "coe_bracket", ["lie_subalgebra"]], ["add", "theorem", "coe_injective", ["lie_subalgebra"]], ["add", "theorem", "coe_set_eq", ["lie_subalgebra"]], ["del", "theorem", "coe_set_eq_iff", ["lie_subalgebra"]], ["del", "theorem", "coe_to_set_mk", ["lie_subalgebra"]], ["add", "theorem", "coe_to_submodule_eq", ["lie_subalgebra"]], ["del", "theorem", "coe_to_submodule_eq_iff", ["lie_subalgebra"]], ["add", "theorem", "lie_mem", ["lie_subalgebra"]], ["mod", "theorem", "mem_coe'", ["lie_subalgebra"]], ["mod", "theorem", "mem_coe", ["lie_subalgebra"]], ["add", "theorem", "mk_coe", ["lie_subalgebra"]], ["add", "theorem", "smul_mem", ["lie_subalgebra"]], ["add", "theorem", "to_submodule_injective", ["lie_subalgebra"]], ["add", "theorem", "zero_mem", ["lie_subalgebra"]]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/lie/skew_adjoint.lean", "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": []}]}, {"timestamp": 1611061904, "sha": "18841a9e", "message": "feat(data/list/basic): nth and nth_le for pmap (#5451)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_le_pmap", ["list"]], ["add", "theorem", "nth_pmap", ["list"]]]}]}, {"timestamp": 1611061902, "sha": "9777d1e7", "message": "feat(data/option/basic): map_bind and join_pmap lemmas (#5445)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "join_pmap_eq_pmap_join", ["option"]], ["add", "theorem", "map_bind'", ["option"]]]}]}, {"timestamp": 1611056425, "sha": "c37c64fb", "message": "chore(data/matrix/notation): Add some missing simp lemmas for sub, head, and tail (#5807)", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "cons_sub", ["matrix"]], ["add", "theorem", "empty_sub_empty", ["matrix"]], ["add", "theorem", "head_add", ["matrix"]], ["add", "theorem", "head_neg", ["matrix"]], ["add", "theorem", "head_sub", ["matrix"]], ["add", "theorem", "sub_cons", ["matrix"]], ["add", "theorem", "tail_add", ["matrix"]], ["add", "theorem", "tail_neg", ["matrix"]], ["add", "theorem", "tail_sub", ["matrix"]]]}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1611027562, "sha": "190dd106", "message": "chore(analysis/normed_space): golf some proofs (#5804)\n* add `pi_norm_lt_iff`;\n* add `has_sum.norm_le_of_bounded`;\n* add `multilinear_map.bound_of_shell`;\n* rename `continuous_multilinear_map.norm_image_sub_le_of_bound` to\n `continuous_multilinear_map.norm_image_sub_le`, same with prime\n version;\n* golf some proofs.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_le_of_bounded", ["has_sum"]], ["add", "theorem", "pi_norm_lt_iff", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "norm_image_sub_le'", ["continuous_multilinear_map"]], ["add", "theorem", "norm_image_sub_le", ["continuous_multilinear_map"]], ["del", "theorem", "norm_image_sub_le_of_bound'", ["continuous_multilinear_map"]], ["del", "theorem", "norm_image_sub_le_of_bound", ["continuous_multilinear_map"]], ["add", "theorem", "bound_of_shell", ["multilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1611022771, "sha": "c9c3b6f5", "message": "chore(scripts): update nolints.txt (#5806)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1611010952, "sha": "541688b5", "message": "feat(combinatorics/simple_graph/basic): add lemmas about cardinality of common neighbor set (#5789)\nAdd lemmas about the cardinality of the set of common neighbors between two vertices. Add note in module docstring about naming convention. Part of #5698 in order to prove facts about strongly regular graphs.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "card_common_neighbors_lt_degree", ["simple_graph", "adj"]], ["add", "theorem", "card_common_neighbors_le_degree_left", ["simple_graph"]], ["add", "theorem", "card_common_neighbors_le_degree_right", ["simple_graph"]], ["add", "theorem", "card_common_neighbors_lt_card_verts", ["simple_graph"]]]}]}, {"timestamp": 1611010950, "sha": "77003ce2", "message": "refactor(field_theory|ring_theory|linear_algebra): minpoly A x (#5774)\nThis PR refactors the definition of `minpoly` to\n```\nnoncomputable def minpoly (x : B) : polynomial A := if hx : is_integral\nA x then well_founded.min degree_lt_wf _ hx else 0\n```\nThe benefit is that we can write `minpoly A x` instead of\n`minpoly hx` for `hx : is_integral A x`. The resulting code is more\nreadable, and some lemmas are true without the `hx` assumption.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["mod", "theorem", "aeval_gen_minpoly", ["intermediate_field"]], ["mod", "theorem", "card_alg_hom_adjoin_integral", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["mod", "theorem", "integral", ["is_galois"]], ["mod", "theorem", "normal", ["is_galois"]], ["mod", "theorem", "separable", ["is_galois"]], ["mod", "theorem", "tower_top_of_is_galois", ["is_galois"]]]}, {"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "aeval", ["minpoly"]], ["mod", "theorem", "aeval_ne_zero_of_dvd_not_unit_minpoly", ["minpoly"]], ["mod", "theorem", "coeff_zero_eq_zero", ["minpoly"]], ["mod", "theorem", "coeff_zero_ne_zero", ["minpoly"]], ["mod", "theorem", "degree_pos", ["minpoly"]], ["mod", "theorem", "dvd", ["minpoly"]], ["mod", "theorem", "dvd_map_of_is_scalar_tower", ["minpoly"]], ["add", "theorem", "eq_X_sub_C'", ["minpoly"]], ["mod", "theorem", "eq_X_sub_C", ["minpoly"]], ["mod", "theorem", "eq_X_sub_C_of_algebra_map_inj", ["minpoly"]], ["add", "theorem", "eq_of_algebra_map_eq", ["minpoly"]], ["mod", "theorem", "irreducible", ["minpoly"]], ["mod", "theorem", "monic", ["minpoly"]], ["mod", "theorem", "ne_zero", ["minpoly"]], ["mod", "theorem", "not_is_unit", ["minpoly"]], ["mod", "theorem", "one", ["minpoly"]], ["mod", "theorem", "over_int_eq_over_rat", ["minpoly"]], ["mod", "theorem", "prime", ["minpoly"]], ["mod", "theorem", "root", ["minpoly"]], ["mod", "theorem", "unique'", ["minpoly"]], ["mod", "theorem", "unique", ["minpoly"]], ["mod", "theorem", "zero", ["minpoly"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["mod", "theorem", "is_integral", ["normal"]], ["mod", "theorem", "splits", ["normal"]], ["mod", "theorem", "tower_top_of_normal", ["normal"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["mod", "theorem", "of_alg_hom", ["is_separable"]], ["mod", "theorem", "is_separable_tower_bot_of_is_separable", []], ["mod", "theorem", "is_separable_tower_top_of_is_separable", []]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["mod", "theorem", "has_eigenvalue_of_is_root", ["module", "End"]], ["mod", "theorem", "is_root_of_has_eigenvalue", ["module", "End"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_algebra_map_iff", []]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "cyclotomic_eq_minpoly", []], ["del", "theorem", "minpoly_primitive_root_eq_cyclotomic", []]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["del", "theorem", "is_integral_algebra_map_iff", []], ["del", "theorem", "eq_of_algebra_map_eq", ["minpoly"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "minpoly_dvd_X_pow_sub_one", ["is_primitive_root"]], ["mod", "theorem", "totient_le_degree_minpoly", ["is_primitive_root"]]]}]}, {"timestamp": 1610998382, "sha": "725efb18", "message": "doc(tactic/rewrite): Add an example for assoc_rw (#5799)", "changes": [{"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}]}, {"timestamp": 1610992443, "sha": "b5e832e2", "message": "refactor(algebraic_geometry/prime_spectrum): simplify `comap_id`, `comap_comp` (#5796)\nfaster proofs and smaller proof terms\nCo-authors: `lean-gptf`, Yuhuai Wu", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}]}, {"timestamp": 1610985463, "sha": "57bc1dab", "message": "feat(order/limsup_liminf, order/filter/ennreal): add properties of limsup for ennreal-valued functions (#5746)", "changes": [{"oldPath": null, "newPath": "src/measure_theory/ess_sup.lean", "changes": [["add", "theorem", "ae_lt_of_ess_sup_lt", []], ["add", "theorem", "ae_lt_of_lt_ess_inf", []], ["add", "theorem", "ae_le_ess_sup", ["ennreal"]], ["add", "theorem", "ess_sup_add_le", ["ennreal"]], ["add", "theorem", "ess_sup_const_mul", ["ennreal"]], ["add", "def", "ess_inf", []], ["add", "theorem", "ess_inf_congr_ae", []], ["add", "theorem", "ess_inf_const", []], ["add", "theorem", "ess_inf_const_top", []], ["add", "theorem", "ess_inf_measure_zero", []], ["add", "theorem", "ess_inf_mono_ae", []], ["add", "def", "ess_sup", []], ["add", "theorem", "ess_sup_congr_ae", []], ["add", "theorem", "ess_sup_const", []], ["add", "theorem", "ess_sup_const_bot", []], ["add", "theorem", "ess_sup_eq_zero_iff", []], ["add", "theorem", "ess_sup_measure_zero", []], ["add", "theorem", "ess_sup_mono_ae", []], ["add", "theorem", "ess_inf_apply", ["order_iso"]], ["add", "theorem", "ess_sup_apply", ["order_iso"]]]}, {"oldPath": null, "newPath": "src/order/filter/ennreal.lean", "changes": [["add", "theorem", "eventually_le_limsup", ["ennreal"]], ["add", "theorem", "limsup_add_le", ["ennreal"]], ["add", "theorem", "limsup_const_mul", ["ennreal"]], ["add", "theorem", "limsup_const_mul_of_ne_top", ["ennreal"]], ["add", "theorem", "limsup_eq_zero_iff", ["ennreal"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "le_limsup_of_frequently_le", ["filter"]], ["add", "theorem", "liminf_const_top", ["filter"]], ["add", "theorem", "liminf_le_of_frequently_le", ["filter"]], ["add", "theorem", "limsup_const_bot", ["filter"]], ["add", "theorem", "l_limsup_le", ["galois_connection"]], ["add", "theorem", "liminf_apply", ["order_iso"]], ["add", "theorem", "limsup_apply", ["order_iso"]]]}]}, {"timestamp": 1610965256, "sha": "66e955e4", "message": "feat(algebra/lie/basic): results relating Lie algebra morphisms and ideal operations (#5778)\nThe key results are `lie_ideal.comap_bracket_eq` and its corollary `lie_ideal.comap_bracket_incl`", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "theorem", "coe_to_subalgebra", []], ["add", "def", "ideal_range", ["lie_algebra", "morphism"]], ["add", "def", "is_ideal_morphism", ["lie_algebra", "morphism"]], ["add", "theorem", "is_ideal_morphism_def", ["lie_algebra", "morphism"]], ["add", "def", "ker", ["lie_algebra", "morphism"]], ["add", "theorem", "ker_coe_submodule", ["lie_algebra", "morphism"]], ["add", "theorem", "ker_le_comap", ["lie_algebra", "morphism"]], ["add", "theorem", "map_le_ideal_range", ["lie_algebra", "morphism"]], ["add", "theorem", "mem_ideal_range", ["lie_algebra", "morphism"]], ["add", "theorem", "mem_ideal_range_iff", ["lie_algebra", "morphism"]], ["add", "theorem", "mem_ker", ["lie_algebra", "morphism"]], ["add", "theorem", "range_subset_ideal_range", ["lie_algebra", "morphism"]], ["add", "theorem", "coe_to_subalgebra", ["lie_ideal"]], ["mod", "def", "comap", ["lie_ideal"]], ["add", "theorem", "comap_bracket_eq", ["lie_ideal"]], ["add", "theorem", "comap_bracket_incl", ["lie_ideal"]], ["add", "theorem", "comap_bracket_incl_of_le", ["lie_ideal"]], ["add", "theorem", "comap_bracket_le", ["lie_ideal"]], ["add", "theorem", "comap_coe_submodule", ["lie_ideal"]], ["add", "theorem", "comap_incl_self", ["lie_ideal"]], ["add", "theorem", "comap_map_eq", ["lie_ideal"]], ["add", "theorem", "comap_map_le", ["lie_ideal"]], ["add", "theorem", "comap_mono", ["lie_ideal"]], ["mod", "theorem", "gc_map_comap", ["lie_ideal"]], ["mod", "def", "incl", ["lie_ideal"]], ["mod", "theorem", "incl_apply", ["lie_ideal"]], ["add", "theorem", "incl_coe", ["lie_ideal"]], ["add", "theorem", "incl_ideal_range", ["lie_ideal"]], ["add", "theorem", "incl_is_ideal_morphism", ["lie_ideal"]], ["add", "theorem", "ker_incl", ["lie_ideal"]], ["mod", "def", "map", ["lie_ideal"]], ["add", "theorem", "map_bracket_le", ["lie_ideal"]], ["add", "theorem", "map_coe_submodule", ["lie_ideal"]], ["add", "theorem", "map_comap_bracket_eq", ["lie_ideal"]], ["add", "theorem", "map_comap_eq", ["lie_ideal"]], ["add", "theorem", "map_comap_incl", ["lie_ideal"]], ["add", "theorem", "map_comap_le", ["lie_ideal"]], ["add", "theorem", "map_le", ["lie_ideal"]], ["mod", "theorem", "map_le_iff_le_comap", ["lie_ideal"]], ["add", "theorem", "map_mono", ["lie_ideal"]], ["add", "theorem", "map_of_image", ["lie_ideal"]], ["add", "theorem", "map_sup_ker_eq_map", ["lie_ideal"]], ["add", "theorem", "mem_comap", ["lie_ideal"]], ["add", "theorem", "mem_map", ["lie_ideal"]], ["mod", "theorem", "coe_bracket", ["lie_subalgebra"]], ["add", "theorem", "coe_set_eq_iff", ["lie_subalgebra"]], ["add", "theorem", "coe_to_set_mk", ["lie_subalgebra"]], ["add", "theorem", "coe_to_submodule_eq_iff", ["lie_subalgebra"]], ["mod", "theorem", "ext", ["lie_subalgebra"]], ["mod", "theorem", "ext_iff", ["lie_subalgebra"]], ["mod", "theorem", "mem_coe'", ["lie_subalgebra"]], ["mod", "theorem", "mem_coe", ["lie_subalgebra"]], ["add", "theorem", "range_incl", ["lie_subalgebra"]]]}]}, {"timestamp": 1610960319, "sha": "9381e37d", "message": "doc(data/buffer/parser/basic): fix typo (#5792)", "changes": [{"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": []}]}, {"timestamp": 1610953428, "sha": "8ab1a39d", "message": "chore(field_theory/minpoly): meaningful variable names (#5773)", "changes": [{"oldPath": "src/field_theory/minpoly.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["mod", "theorem", "aeval_ne_zero_of_dvd_not_unit_minpoly", ["minpoly"]], ["mod", "theorem", "degree_pos", ["minpoly"]], ["mod", "theorem", "dvd", ["minpoly"]], ["mod", "theorem", "dvd_map_of_is_scalar_tower", ["minpoly"]], ["mod", "theorem", "eq_X_sub_C", ["minpoly"]], ["mod", "theorem", "eq_X_sub_C_of_algebra_map_inj", ["minpoly"]], ["mod", "theorem", "gcd_domain_dvd", ["minpoly"]], ["mod", "theorem", "gcd_domain_eq_field_fractions", ["minpoly"]], ["mod", "theorem", "integer_dvd", ["minpoly"]], ["mod", "theorem", "min", ["minpoly"]], ["mod", "theorem", "ne_zero", ["minpoly"]], ["mod", "theorem", "one", ["minpoly"]], ["mod", "theorem", "over_int_eq_over_rat", ["minpoly"]], ["mod", "theorem", "root", ["minpoly"]], ["mod", "theorem", "unique'", ["minpoly"]], ["mod", "theorem", "unique", ["minpoly"]], ["mod", "theorem", "zero", ["minpoly"]]]}]}, {"timestamp": 1610953425, "sha": "db617b3c", "message": "feat(ring_theory/ideal/operations): add algebra structure on quotient (#5703)\nI added very basic stuff about `R/I` as an `R`-algebra that are missing in mathlib.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "def", "mkₐ", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_eq_mk", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_ker", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_surjective", ["ideal", "quotient"]], ["add", "theorem", "mkₐ_to_ring_hom", ["ideal", "quotient"]]]}]}, {"timestamp": 1610948666, "sha": "f3d3d046", "message": "chore(category_theory/monad): golf and lint monadic adjunctions (#5769)\nSome lintfixes and proof golfing using newer API", "changes": [{"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": [["del", "theorem", "monad_η_app", ["category_theory", "adjunction"]], ["del", "theorem", "monad_μ_app", ["category_theory", "adjunction"]], ["mod", "def", "comparison", ["category_theory", "monad"]], ["mod", "def", "comparison_forget", ["category_theory", "monad"]], ["del", "theorem", "comparison_map_f", ["category_theory", "monad"]], ["del", "theorem", "comparison_obj_a", ["category_theory", "monad"]], ["mod", "theorem", "comparison_ess_surj_aux", ["category_theory", "reflective"]]]}]}, {"timestamp": 1610940361, "sha": "3089b161", "message": "chore(scripts): update nolints.txt (#5790)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610928226, "sha": "2f824aa1", "message": "feat(data/option/*): pmap and pbind defs and lemmas (#5442)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "bind_pmap", ["option"]], ["add", "theorem", "map_bind", ["option"]], ["add", "theorem", "map_pbind", ["option"]], ["add", "theorem", "map_pmap", ["option"]], ["add", "theorem", "mem_map_of_mem", ["option"]], ["add", "theorem", "mem_pmem", ["option"]], ["add", "theorem", "pbind_eq_bind", ["option"]], ["add", "theorem", "pbind_eq_none", ["option"]], ["add", "theorem", "pbind_eq_some", ["option"]], ["add", "theorem", "pbind_map", ["option"]], ["add", "theorem", "pmap_bind", ["option"]], ["add", "theorem", "pmap_eq_map", ["option"]], ["add", "theorem", "pmap_eq_none_iff", ["option"]], ["add", "theorem", "pmap_eq_some_iff", ["option"]], ["add", "theorem", "pmap_map", ["option"]], ["add", "theorem", "pmap_none", ["option"]], ["add", "theorem", "pmap_some", ["option"]]]}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": [["add", "def", "pbind", ["option"]], ["add", "def", "pmap", ["option"]]]}]}, {"timestamp": 1610920009, "sha": "c3639e94", "message": "refactor(algebra/monoid_algebra) generalize from group to monoid algebras (#5785)\nThere was a TODO in the monoid algebra file to generalize three statements from group to monoid algebras. It seemed to be solvable by just changing the assumptions, not the proofs.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["mod", "def", "linear_map", ["monoid_algebra", "group_smul"]], ["mod", "theorem", "linear_map_apply", ["monoid_algebra", "group_smul"]]]}]}, {"timestamp": 1610894638, "sha": "f29d1c30", "message": "refactor(analysis/calculus/deriv): simpler proof of `differentiable_at.div_const` (#5782)\nCo-authors: `lean-gptf`, Yuhuai Wu", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}]}, {"timestamp": 1610894636, "sha": "83d44a3d", "message": "hack(manifold): disable subsingleton instances to speed up simp (#5779)\nSimp takes an enormous amount of time in manifold code looking for subsingleton instances (and in fact probably in the whole library, but manifolds are particularly simp-heavy). We disable two such instances in the `manifold` locale, to get serious speedups (for instance, `times_cont_mdiff_on.times_cont_mdiff_on_tangent_map_within` goes down from 27s to 10s on my computer).\nThis is *not* a proper fix. But it already makes a serious difference in this part of the library..\nZulip discussion at https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.235672.20breaks.20timeout/near/223001979", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": []}]}, {"timestamp": 1610883447, "sha": "bf46986e", "message": "doc(tactic/auto_cases): fix typo (#5784)", "changes": [{"oldPath": "src/tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}]}, {"timestamp": 1610872431, "sha": "289df3a7", "message": "feat(data/set/lattice): add lemmas set.Union_subtype and set.Union_of_singleton_coe (#5691)\nAdd one simp lemma, following a suggestion on the Zulip chat:\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/image_bUnion", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_of_singleton_coe", ["set"]], ["add", "theorem", "Union_subtype", ["set"]]]}]}, {"timestamp": 1610855239, "sha": "2c4a5161", "message": "chore(topology/metric_space/isometry): a few more lemmas (#5780)\nAlso reuse more proofs about `inducing` and `quotient_map` in\n`topology/homeomorph`.\nNon-bc change: rename `isometric.range_coe` to\n`isometric.range_eq_univ` to match `equiv.range_eq_univ`.", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "comp_continuous_iff'", ["isometric"]], ["add", "theorem", "comp_continuous_iff", ["isometric"]], ["add", "theorem", "comp_continuous_on_iff", ["isometric"]], ["add", "theorem", "diam_image", ["isometric"]], ["add", "theorem", "diam_preimage", ["isometric"]], ["add", "theorem", "diam_univ", ["isometric"]], ["add", "theorem", "ediam_image", ["isometric"]], ["add", "theorem", "ediam_preimage", ["isometric"]], ["add", "theorem", "ediam_univ", ["isometric"]], ["del", "theorem", "range_coe", ["isometric"]], ["add", "theorem", "range_eq_univ", ["isometric"]]]}]}, {"timestamp": 1610850075, "sha": "00e1f4c8", "message": "chore(scripts): update nolints.txt (#5781)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610843637, "sha": "dec44fe7", "message": "chore(group_theory/perm/{sign,cycles}): renaming for dot notation, linting, formatting (#5777)\nDeclarations renamed in `group_theory/perm/sign.lean` (all of these are under `equiv.perm`):\n- `disjoint_mul_comm` -> `disjoint.mul_comm`\n- `disjoint_mul_left` -> `disjoint.mul_left`\n- `disjoint_mul_right` -> `disjoint.mul_right`\n- `is_swap_of_subtype` -> `is_swap.of_subtype_is_swap`\n- `sign_eq_of_is_swap` -> `is_swap.sign_eq`\nDeclarations renamed in `group_theory/perm/cycles.lean` (all of these are under `equiv.perm`):\n- `is_cycle_swap` -> `is_cycle.swap`\n- `is_cycle_inv` -> `is_cycle.inv`\n- `exists_gpow_eq_of_is_cycle` -> `is_cycle.exists_gpow_eq`\n- `exists_pow_eq_of_is_cycle` -> `is_cycle.exists_pow_eq`\n- `eq_swap_of_is_cycle_of_apply_apply_eq_self` -> `eq_swap_of_apply_apply_eq_self`\n- `is_cycle_swap_mul` -> `is_cycle.swap_mul`\n- `sign_cycle` -> `is_cycle.sign`\n- `apply_eq_self_iff_of_same_cycle` -> `same_cycle.apply_eq_self_iff`\n- `same_cycle_of_is_cycle` -> `is_cycle.same_cycle`\n- `cycle_of_apply_of_same_cycle` -> `same_cycle.cycle_of_apply`\n- `cycle_of_cycle` -> `is_cycle.cycle_of_eq`\nI also added a basic module doc string to `group_theory/perm/cycles.lean`.", "changes": [{"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["del", "theorem", "apply_eq_self_iff_of_same_cycle", ["equiv", "perm"]], ["del", "theorem", "cycle_of_apply_of_same_cycle", ["equiv", "perm"]], ["del", "theorem", "cycle_of_cycle", ["equiv", "perm"]], ["del", "theorem", "eq_swap_of_is_cycle_of_apply_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "exists_gpow_eq_of_is_cycle", ["equiv", "perm"]], ["del", "theorem", "exists_pow_eq_of_is_cycle", ["equiv", "perm"]], ["add", "theorem", "cycle_of_eq", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "eq_swap_of_apply_apply_eq_self", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "exists_gpow_eq", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "exists_pow_eq", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "inv", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "same_cycle", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "sign", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "swap", ["equiv", "perm", "is_cycle"]], ["add", "theorem", "swap_mul", ["equiv", "perm", "is_cycle"]], ["mod", "def", "is_cycle", ["equiv", "perm"]], ["del", "theorem", "is_cycle_inv", ["equiv", "perm"]], ["del", "theorem", "is_cycle_swap", ["equiv", "perm"]], ["del", "theorem", "is_cycle_swap_mul", ["equiv", "perm"]], ["mod", "theorem", "is_cycle_swap_mul_aux₂", ["equiv", "perm"]], ["add", "theorem", "apply_eq_self_iff", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "cycle_of_apply", ["equiv", "perm", "same_cycle"]], ["mod", "def", "same_cycle", ["equiv", "perm"]], ["del", "theorem", "same_cycle_of_is_cycle", ["equiv", "perm"]], ["del", "theorem", "sign_cycle", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "mul_comm", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mul_left", ["equiv", "perm", "disjoint"]], ["add", "theorem", "mul_right", ["equiv", "perm", "disjoint"]], ["del", "theorem", "disjoint_mul_comm", ["equiv", "perm"]], ["del", "theorem", "disjoint_mul_left", ["equiv", "perm"]], ["del", "theorem", "disjoint_mul_right", ["equiv", "perm"]], ["add", "theorem", "of_subtype_is_swap", ["equiv", "perm", "is_swap"]], ["add", "theorem", "sign_eq", ["equiv", "perm", "is_swap"]], ["mod", "def", "is_swap", ["equiv", "perm"]], ["del", "theorem", "is_swap_of_subtype", ["equiv", "perm"]], ["mod", "theorem", "mem_iff_of_subtype_apply_mem", ["equiv", "perm"]], ["mod", "theorem", "of_subtype_apply_of_not_mem", ["equiv", "perm"]], ["mod", "theorem", "of_subtype_subtype_perm", ["equiv", "perm"]], ["mod", "theorem", "sign_bij_aux_mem", ["equiv", "perm"]], ["del", "theorem", "sign_eq_of_is_swap", ["equiv", "perm"]], ["mod", "theorem", "subtype_perm_one", ["equiv", "perm"]], ["mod", "def", "support", ["equiv", "perm"]]]}]}, {"timestamp": 1610843635, "sha": "a2630fc3", "message": "chore(field_theory|ring_theory|linear_algebra): rename minimal_polynomial to minpoly (#5771)\nThis PR renames:\n* `minimal_polynomial` -> `minpoly`\n* a similar substitution throughout the library for all names containing the substring `minimal_polynomial`\n* `fixed_points.minpoly.minimal_polynomial` -> `fixed_points.minpoly_eq_minpoly`\nThis PR moves a file:\n src/field_theory/minimal_polynomial.lean -> src/field_theory/minpoly.lean", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["del", "theorem", "aeval_gen_minimal_polynomial", ["intermediate_field"]], ["add", "theorem", "aeval_gen_minpoly", ["intermediate_field"]], ["mod", "theorem", "card_alg_hom_adjoin_integral", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["del", "theorem", "minimal_polynomial", ["fixed_points", "minpoly"]], ["add", "theorem", "minpoly_eq_minpoly", ["fixed_points"]]]}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minpoly.lean", "changes": [["del", "theorem", "aeval", ["minimal_polynomial"]], ["del", "theorem", "aeval_ne_zero_of_dvd_not_unit_minimal_polynomial", ["minimal_polynomial"]], ["del", "theorem", "coeff_zero_eq_zero", ["minimal_polynomial"]], ["del", "theorem", "coeff_zero_ne_zero", ["minimal_polynomial"]], ["del", "theorem", "degree_le_of_monic", ["minimal_polynomial"]], ["del", "theorem", "degree_le_of_ne_zero", ["minimal_polynomial"]], ["del", "theorem", "degree_pos", ["minimal_polynomial"]], ["del", "theorem", "dvd", ["minimal_polynomial"]], ["del", "theorem", "dvd_map_of_is_scalar_tower", ["minimal_polynomial"]], ["del", "theorem", "eq_X_sub_C", ["minimal_polynomial"]], ["del", "theorem", "eq_X_sub_C_of_algebra_map_inj", ["minimal_polynomial"]], ["del", "theorem", "gcd_domain_dvd", ["minimal_polynomial"]], ["del", "theorem", "gcd_domain_eq_field_fractions", ["minimal_polynomial"]], ["del", "theorem", "integer_dvd", ["minimal_polynomial"]], ["del", "theorem", "irreducible", ["minimal_polynomial"]], ["del", "theorem", "min", ["minimal_polynomial"]], ["del", "theorem", "monic", ["minimal_polynomial"]], ["del", "theorem", "ne_zero", ["minimal_polynomial"]], ["del", "theorem", "not_is_unit", ["minimal_polynomial"]], ["del", "theorem", "one", ["minimal_polynomial"]], ["del", "theorem", "over_int_eq_over_rat", ["minimal_polynomial"]], ["del", "theorem", "prime", ["minimal_polynomial"]], ["del", "theorem", "root", ["minimal_polynomial"]], ["del", "theorem", "unique'", ["minimal_polynomial"]], ["del", "theorem", "unique", ["minimal_polynomial"]], ["del", "theorem", "zero", ["minimal_polynomial"]], ["add", "theorem", "aeval", ["minpoly"]], ["add", "theorem", "aeval_ne_zero_of_dvd_not_unit_minpoly", ["minpoly"]], ["add", "theorem", "coeff_zero_eq_zero", ["minpoly"]], ["add", "theorem", "coeff_zero_ne_zero", ["minpoly"]], ["add", "theorem", "degree_le_of_monic", ["minpoly"]], ["add", "theorem", "degree_le_of_ne_zero", ["minpoly"]], ["add", "theorem", "degree_pos", ["minpoly"]], ["add", "theorem", "dvd", ["minpoly"]], ["add", "theorem", "dvd_map_of_is_scalar_tower", ["minpoly"]], ["add", "theorem", "eq_X_sub_C", ["minpoly"]], ["add", "theorem", "eq_X_sub_C_of_algebra_map_inj", ["minpoly"]], ["add", "theorem", "gcd_domain_dvd", ["minpoly"]], ["add", "theorem", "gcd_domain_eq_field_fractions", ["minpoly"]], ["add", "theorem", "integer_dvd", ["minpoly"]], ["add", "theorem", "irreducible", ["minpoly"]], ["add", "theorem", "min", ["minpoly"]], ["add", "theorem", "monic", ["minpoly"]], ["add", "theorem", "ne_zero", ["minpoly"]], ["add", "theorem", "not_is_unit", ["minpoly"]], ["add", "theorem", "one", ["minpoly"]], ["add", "theorem", "over_int_eq_over_rat", ["minpoly"]], ["add", "theorem", "prime", ["minpoly"]], ["add", "theorem", "root", ["minpoly"]], ["add", "theorem", "unique'", ["minpoly"]], ["add", "theorem", "unique", ["minpoly"]], ["add", "theorem", "zero", ["minpoly"]]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["del", "def", "adjoin_singleton_equiv_adjoin_root_minimal_polynomial", ["alg_equiv"]], ["add", "def", "adjoin_singleton_equiv_adjoin_root_minpoly", ["alg_equiv"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["mod", "theorem", "has_eigenvalue_of_is_root", ["module", "End"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["del", "theorem", "minimal_polynomial_primitive_root_dvd_cyclotomic", []], ["del", "theorem", "minimal_polynomial_primitive_root_eq_cyclotomic", []], ["add", "theorem", "minpoly_primitive_root_dvd_cyclotomic", []], ["add", "theorem", "minpoly_primitive_root_eq_cyclotomic", []]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["del", "theorem", "eq_of_algebra_map_eq", ["minimal_polynomial"]], ["add", "theorem", "eq_of_algebra_map_eq", ["minpoly"]], ["del", "theorem", "nat_degree_minimal_polynomial", ["power_basis"]], ["add", "theorem", "nat_degree_minpoly", ["power_basis"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["del", "theorem", "is_roots_of_minimal_polynomial", ["is_primitive_root"]], ["add", "theorem", "is_roots_of_minpoly", ["is_primitive_root"]], ["del", "theorem", "minimal_polynomial_dvd_X_pow_sub_one", ["is_primitive_root"]], ["del", "theorem", "minimal_polynomial_dvd_expand", ["is_primitive_root"]], ["del", "theorem", "minimal_polynomial_dvd_mod_p", ["is_primitive_root"]], ["del", "theorem", "minimal_polynomial_dvd_pow_mod", ["is_primitive_root"]], ["del", "theorem", "minimal_polynomial_eq_pow", ["is_primitive_root"]], ["del", "theorem", "minimal_polynomial_eq_pow_coprime", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_X_pow_sub_one", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_expand", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_mod_p", ["is_primitive_root"]], ["add", "theorem", "minpoly_dvd_pow_mod", ["is_primitive_root"]], ["add", "theorem", "minpoly_eq_pow", ["is_primitive_root"]], ["add", "theorem", "minpoly_eq_pow_coprime", ["is_primitive_root"]], ["del", "theorem", "pow_is_root_minimal_polynomial", ["is_primitive_root"]], ["add", "theorem", "pow_is_root_minpoly", ["is_primitive_root"]], ["del", "theorem", "separable_minimal_polynomial_mod", ["is_primitive_root"]], ["add", "theorem", "separable_minpoly_mod", ["is_primitive_root"]], ["del", "theorem", "squarefree_minimal_polynomial_mod", ["is_primitive_root"]], ["add", "theorem", "squarefree_minpoly_mod", ["is_primitive_root"]], ["del", "theorem", "totient_le_degree_minimal_polynomial", ["is_primitive_root"]], ["add", "theorem", "totient_le_degree_minpoly", ["is_primitive_root"]]]}]}, {"timestamp": 1610838688, "sha": "0cc93a13", "message": "feat(category_theory/is_filtered): is_filtered_of_equiv (#5485)\nIf `C` is filtered and there is a right adjoint functor `C => D`, then `D` is filtered. Also a category equivalent to a filtered category is filtered.", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": [["add", "theorem", "of_equivalence", ["category_theory", "is_filtered"]], ["add", "theorem", "of_is_right_adjoint", ["category_theory", "is_filtered"]], ["add", "theorem", "of_right_adjoint", ["category_theory", "is_filtered"]]]}]}, {"timestamp": 1610833078, "sha": "787e6b30", "message": "feat(measure_theory/haar_measure): Prove uniqueness (#5663)\nProve the uniqueness of Haar measure (up to a scalar) following *Measure Theory* by Paul Halmos. This proof seems to contain an omission which we fix by adding an extra hypothesis to an intermediate lemma.\nAdd some lemmas about left invariant regular measures.\nWe add the file `measure_theory.prod_group` which contain various measure-theoretic properties of products of topological groups, needed for the uniqueness.\nWe add `@[to_additive]` to some declarations in `measure_theory`, but leave it out for many because of #4210. This causes some renamings in concepts, like `is_left_invariant` -> `is_mul_left_invariant` and `measure.conj` -> `measure.inv` (though a better naming suggestion for this one is welcome).", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "exists_compact_not_null", ["measure_theory", "measure", "regular"]], ["mod", "theorem", "inner_regular_eq", ["measure_theory", "measure", "regular"]], ["mod", "theorem", "outer_regular_eq", ["measure_theory", "measure", "regular"]]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": [["del", "theorem", "inner_content_pos", ["measure_theory"]], ["add", "theorem", "inner_content_pos_of_is_mul_left_invariant", ["measure_theory"]], ["del", "theorem", "is_left_invariant_inner_content", ["measure_theory"]], ["add", "theorem", "is_mul_left_invariant_inner_content", ["measure_theory"]], ["del", "theorem", "is_left_invariant_of_content", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_mul_left_invariant_of_content", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_pos_of_is_mul_left_invariant", ["measure_theory", "outer_measure"]], ["del", "theorem", "of_content_pos_of_is_open", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/group.lean", "newPath": "src/measure_theory/group.lean", "changes": [["del", "def", "is_left_invariant", ["measure_theory"]], ["del", "theorem", "is_left_invariant_conj'", ["measure_theory"]], ["del", "theorem", "is_left_invariant_conj", ["measure_theory"]], ["add", "theorem", "inv", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "measure_ne_zero_iff_nonempty", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "null_iff", ["measure_theory", "is_mul_left_invariant"]], ["add", "theorem", "null_iff_empty", ["measure_theory", "is_mul_left_invariant"]], ["add", "def", "is_mul_left_invariant", ["measure_theory"]], ["add", "theorem", "is_mul_left_invariant_inv", ["measure_theory"]], ["add", "theorem", "inv", ["measure_theory", "is_mul_right_invariant"]], ["add", "def", "is_mul_right_invariant", ["measure_theory"]], ["add", "theorem", "is_mul_right_invariant_inv", ["measure_theory"]], ["del", "def", "is_right_invariant", ["measure_theory"]], ["del", "theorem", "is_right_invariant_conj'", ["measure_theory"]], ["del", "theorem", "is_right_invariant_conj", ["measure_theory"]], ["add", "theorem", "lintegral_eq_zero_of_is_mul_left_invariant", ["measure_theory"]], ["del", "theorem", "conj_apply", ["measure_theory", "measure"]], ["del", "theorem", "conj_conj", ["measure_theory", "measure"]], ["add", "theorem", "inv_apply", ["measure_theory", "measure"]], ["del", "theorem", "conj", ["measure_theory", "measure", "regular"]], ["add", "theorem", "inv", ["measure_theory", "measure", "regular"]], ["del", "theorem", "regular_conj_iff", ["measure_theory"]], ["add", "theorem", "regular_inv_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": [["add", "theorem", "haar_measure_unique", ["measure_theory", "measure"]], ["del", "theorem", "is_left_invariant_haar_measure", ["measure_theory", "measure"]], ["add", "theorem", "is_mul_left_invariant_haar_measure", ["measure_theory", "measure"]], ["add", "theorem", "regular_of_left_invariant", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "map_apply_eq_iff_map_symm_apply_eq", ["measurable_equiv"]], ["add", "theorem", "map_map_symm", ["measurable_equiv"]], ["add", "theorem", "map_measurable_equiv_injective", ["measurable_equiv"]], ["add", "theorem", "map_symm_map", ["measurable_equiv"]]]}, {"oldPath": null, "newPath": "src/measure_theory/prod_group.lean", "changes": [["add", "theorem", "lintegral_lintegral_mul_inv", ["measure_theory"]], ["add", "theorem", "map_prod_inv_mul_eq", ["measure_theory"]], ["add", "theorem", "map_prod_inv_mul_eq_swap", ["measure_theory"]], ["add", "theorem", "map_prod_mul_eq", ["measure_theory"]], ["add", "theorem", "map_prod_mul_eq_swap", ["measure_theory"]], ["add", "theorem", "map_prod_mul_inv_eq", ["measure_theory"]], ["add", "theorem", "measurable_measure_mul_right", ["measure_theory"]], ["add", "theorem", "measure_inv_null", ["measure_theory"]], ["add", "theorem", "measure_lintegral_div_measure", ["measure_theory"]], ["add", "theorem", "measure_mul_measure_eq", ["measure_theory"]], ["add", "theorem", "measure_mul_right_ne_zero", ["measure_theory"]], ["add", "theorem", "measure_mul_right_null", ["measure_theory"]], ["add", "theorem", "measure_null_of_measure_inv_null", ["measure_theory"]]]}]}, {"timestamp": 1610825550, "sha": "23373d15", "message": "chore(category_theory/limits): coproduct functor (#5677)\nDualises a def already there.", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "functor", ["category_theory", "limits", "coprod"]], ["add", "def", "functor_left_comp", ["category_theory", "limits", "coprod"]]]}]}, {"timestamp": 1610818935, "sha": "e0f4142e", "message": "refactor(data/nat/fib): explicitly state fibonacci sequence is monotone (#5776)\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/fib_mono", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["mod", "theorem", "fib_mono", ["nat"]]]}]}, {"timestamp": 1610818932, "sha": "41556652", "message": "refactor(linear_algebra/dual): replace dim K to an embedding F(S) -> K.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "alg_hom_mk_adjoin_splits'", ["intermediate_field"]], ["add", "theorem", "alg_hom_mk_adjoin_splits", ["intermediate_field"]]]}]}, {"timestamp": 1610788296, "sha": "9acd3496", "message": "feat(order/closure): closure operator from galois connection (#5764)\nConstruct a closure operator from a galois connection", "changes": [{"oldPath": "src/order/closure.lean", "newPath": "src/order/closure.lean", "changes": [["add", "theorem", "closure_operator_gi_self", []], ["add", "def", "closure_operator", ["galois_connection"]]]}]}, {"timestamp": 1610788294, "sha": "51ffdd03", "message": "refactor(ring_theory): change field instance on adjoin_root (#5759)\nThis makes some things faster.\n[Discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Slow.20instance/near/222839607)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1610788292, "sha": "dffb09ad", "message": "feat(linear_algebra/{clifford,exterior,tensor,free}_algebra): provide canonical images from larger algebras into smaller ones (#5745)\nThis adds:\n* `free_algebra.to_tensor`\n* `tensor_algebra.to_exterior`\n* `tensor_algebra.to_clifford`\nProviding the injection in the other direction is more challenging, so is left as future work.", "changes": [{"oldPath": "src/linear_algebra/clifford_algebra.lean", "newPath": "src/linear_algebra/clifford_algebra.lean", "changes": [["add", "def", "to_clifford", ["tensor_algebra"]], ["add", "theorem", "to_clifford_ι", ["tensor_algebra"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["add", "def", "to_exterior", ["tensor_algebra"]], ["add", "theorem", "to_exterior_ι", ["tensor_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["add", "def", "to_tensor", ["free_algebra"]], ["add", "theorem", "to_tensor_ι", ["free_algebra"]]]}]}, {"timestamp": 1610788290, "sha": "bea76514", "message": "feat(category_theory/monad): construct isomorphisms of algebras (#5678)", "changes": [{"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["add", "def", "iso_mk", ["category_theory", "comonad", "coalgebra"]], ["add", "def", "coalgebra_iso_of_iso", ["category_theory", "comonad"]], ["add", "def", "iso_mk", ["category_theory", "monad", "algebra"]], ["mod", "def", "algebra_iso_of_iso", ["category_theory", "monad"]]]}]}, {"timestamp": 1610769428, "sha": "592edb6b", "message": "chore(scripts): update nolints.txt (#5763)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610769422, "sha": "6351f01d", "message": "chore(algebra/group_with_zero): cleanup (#5762)\n* remove `classical,` from proofs: we have `open_locale classical` anyway;\n* add a lemma `a / (a * a) = a⁻¹`, use it to golf some proofs in other files.", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["add", "theorem", "div_self_mul_self'", []]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1610769420, "sha": "798024a9", "message": "chore(data/real/*): rename `le_of_forall_epsilon_le` to `le_of_forall_pos_le_add` (#5761)\n* generalize the `real` version to a `linear_ordered_add_comm_group`;\n* rename `nnreal` and `ennreal` versions.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "le_of_forall_pos_le_add", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["del", "theorem", "le_of_forall_epsilon_le", ["real"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["add", "theorem", "le_of_forall_pos_le_add", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "le_of_forall_epsilon_le", ["nnreal"]], ["add", "theorem", "le_of_forall_pos_le_add", ["nnreal"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1610758074, "sha": "78493c9d", "message": "feat(data/nat/modeq): add missing lemmas for int and nat regarding dvd (#5752)\nAdding lemmas `(a+b)/c=a/c+b/c` if `c` divides `a` for `a b c : nat` and `a b c : int` after discussion on Zulip https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/nat_add_div", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["del", "theorem", "add_div_of_dvd", ["int"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": []}]}, {"timestamp": 1610758072, "sha": "e4da493c", "message": "feat(group_theory/perm/sign): exists_pow_eq_of_is_cycle (#5665)\nSlight generalization of `exists_gpow_eq_of_is_cycle` in the case of a cycle on a finite set.\nAlso move the following from `group_theory/perm/sign.lean` to `group_theory/perm/cycles.lean`:\n- is_cycle\n- is_cycle_swap\n- is_cycle_inv\n- exists_gpow_eq_of_is_cycle\n- is_cycle_swap_mul_aux₁\n- is_cycle_swap_mul_aux₂\n- eq_swap_of_is_cycle_of_apply_apply_eq_self\n- is_cycle_swap_mul\n- sign_cycle", "changes": [{"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "eq_swap_of_is_cycle_of_apply_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "exists_gpow_eq_of_is_cycle", ["equiv", "perm"]], ["add", "theorem", "exists_pow_eq_of_is_cycle", ["equiv", "perm"]], ["add", "def", "is_cycle", ["equiv", "perm"]], ["add", "theorem", "is_cycle_inv", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap_mul", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap_mul_aux₁", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap_mul_aux₂", ["equiv", "perm"]], ["add", "theorem", "sign_cycle", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["del", "theorem", "eq_swap_of_is_cycle_of_apply_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "exists_gpow_eq_of_is_cycle", ["equiv", "perm"]], ["del", "def", "is_cycle", ["equiv", "perm"]], ["del", "theorem", "is_cycle_inv", ["equiv", "perm"]], ["del", "theorem", "is_cycle_swap", ["equiv", "perm"]], ["del", "theorem", "is_cycle_swap_mul", ["equiv", "perm"]], ["del", "theorem", "is_cycle_swap_mul_aux₁", ["equiv", "perm"]], ["del", "theorem", "is_cycle_swap_mul_aux₂", ["equiv", "perm"]], ["del", "theorem", "sign_cycle", ["equiv", "perm"]]]}]}, {"timestamp": 1610744736, "sha": "d43f202f", "message": "feat(analysis/analytic/basic): `f (x + y) - p.partial_sum n y = O(∥y∥ⁿ)` (#5756)\n### Lemmas about analytic functions\n* add `has_fpower_series_on_ball.uniform_geometric_approx'`, a more\n precise version of `has_fpower_series_on_ball.uniform_geometric_approx`;\n* add `has_fpower_series_at.is_O_sub_partial_sum_pow`, a version of\n the Taylor formula for an analytic function;\n### Lemmas about `homeomorph` and topological groups\n* add `simp` lemmas `homeomorph.coe_mul_left` and\n `homeomorph.mul_left_symm`;\n* add `map_mul_left_nhds` and `map_mul_left_nhds_one`;\n* add `homeomorph.to_equiv_injective` and `homeomorph.ext`;\n### Lemmas about `is_O`/`is_o`\n* add `simp` lemmas `asymptotics.is_O_with_map`,\n `asymptotics.is_O_map`, and `asymptotics.is_o_map`;\n* add `asymptotics.is_o_norm_pow_norm_pow` and\n `asymptotics.is_o_norm_pow_id`;\n### Misc changes\n* rename `div_le_iff_of_nonneg_of_le` to `div_le_of_nonneg_of_le_mul`;\n* add `continuous_linear_map.op_norm_le_of_nhds_zero`;\n* golf some proofs.", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["del", "theorem", "div_le_iff_of_nonneg_of_le", []], ["add", "theorem", "div_le_of_nonneg_of_le_mul", []], ["add", "theorem", "div_le_one_of_le", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "is_O_sub_partial_sum_pow", ["has_fpower_series_at"]], ["add", "theorem", "uniform_geometric_approx'", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_O_map", ["asymptotics"]], ["add", "theorem", "is_O_with_map", ["asymptotics"]], ["add", "theorem", "is_o_map", ["asymptotics"]], ["add", "theorem", "is_o_norm_pow_id", ["asymptotics"]], ["add", "theorem", "is_o_norm_pow_norm_pow", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_le_of_nhds_zero", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "coe_mul_left", ["homeomorph"]], ["add", "theorem", "mul_left_symm", ["homeomorph"]], ["add", "theorem", "map_mul_left_nhds", []], ["add", "theorem", "map_mul_left_nhds_one", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "ext", ["homeomorph"]], ["add", "theorem", "to_equiv_injective", ["homeomorph"]]]}]}, {"timestamp": 1610744734, "sha": "bc5d5c9d", "message": "feat(data/matrix/notation,data/fin): head and append simp (#5741)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "fin_append_apply_zero", ["fin"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "head_fin_const", ["matrix"]], ["add", "theorem", "vec_head_vec_alt0", ["matrix"]], ["add", "theorem", "vec_head_vec_alt1", ["matrix"]]]}]}, {"timestamp": 1610744730, "sha": "0104948e", "message": "feat(order/atoms): further facts about atoms, coatoms, and simple lattices (#5493)\nProvides possible instances of `bounded_distrib_lattice`, `boolean_algebra`, `complete_lattice`, and `complete_boolean_algebra` on a simple lattice\nRelates the `is_atom` and `is_coatom` conditions to `is_simple_lattice` structures on intervals\nShows that all three conditions are preserved by `order_iso`s\nAdds more instances on `bool`, including `is_simple_lattice`", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "ff_le", ["bool"]], ["add", "theorem", "ff_lt_tt", ["bool"]], ["add", "theorem", "le_tt", ["bool"]]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "card", ["fintype", "is_simple_lattice"]], ["add", "theorem", "univ", ["fintype", "is_simple_lattice"]], ["add", "def", "order_iso_bool", ["is_simple_lattice"]], ["add", "theorem", "is_atom_iff", ["order_iso"]], ["add", "theorem", "is_coatom_iff", ["order_iso"]], ["add", "theorem", "is_simple_lattice", ["order_iso"]], ["add", "theorem", "is_simple_lattice_iff", ["order_iso"]], ["add", "theorem", "is_simple_lattice_Ici_iff_is_coatom", ["set"]], ["add", "theorem", "is_simple_lattice_Iic_iff_is_atom", ["set"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_eq_ff", []], ["add", "theorem", "top_eq_tt", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1610732925, "sha": "bc94d052", "message": "fix(algebra/ordered_monoid): Ensure that `ordered_cancel_comm_monoid` can provide a `cancel_comm_monoid` instance (#5713)", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}]}, {"timestamp": 1610726607, "sha": "8b4b9413", "message": "feat(data/mv_polynomial): stronger `degrees_X` for `nontrivial R` (#5758)\nAlso rename `degrees_X` to `degrees_X'` and mark `degrees_{zero,one}` with `simp`.", "changes": [{"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "degrees_X'", ["mv_polynomial"]], ["mod", "theorem", "degrees_X", ["mv_polynomial"]], ["mod", "theorem", "degrees_one", ["mv_polynomial"]], ["mod", "theorem", "degrees_zero", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/finite/polynomial.lean", "newPath": "src/field_theory/finite/polynomial.lean", "changes": []}]}, {"timestamp": 1610721609, "sha": "c347c75d", "message": "feat(algebra/lie/basic): add a few `simp` lemmas (#5757)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "coe_to_subalgebra", []], ["add", "theorem", "map_add", ["lie_algebra", "morphism"]], ["add", "theorem", "map_smul", ["lie_algebra", "morphism"]], ["mod", "def", "range", ["lie_algebra", "morphism"]], ["mod", "theorem", "range_bracket", ["lie_algebra", "morphism"]], ["add", "theorem", "range_coe", ["lie_algebra", "morphism"]], ["mod", "def", "map", ["lie_subalgebra"]], ["add", "theorem", "bot_coe_submodule", ["lie_submodule"]], ["del", "theorem", "coe_sup", ["lie_submodule"]], ["add", "theorem", "coe_to_submodule_eq_iff", ["lie_submodule"]], ["add", "theorem", "inf_coe", ["lie_submodule"]], ["add", "theorem", "inf_coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "inf_lie", ["lie_submodule"]], ["add", "theorem", "lie_inf", ["lie_submodule"]], ["add", "theorem", "lie_span_eq", ["lie_submodule"]], ["add", "theorem", "mem_inf", ["lie_submodule"]], ["add", "theorem", "sup_coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "top_coe_submodule", ["lie_submodule"]]]}]}, {"timestamp": 1610708283, "sha": "ed0ae3e7", "message": "feat(analysis/calculus/inverse): a map that has an invertible strict derivative at every point is an open map (#5753)\nMore generally, the same is true for a map that is a local homeomorphism near every point.", "changes": [{"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "map_nhds_eq", ["has_strict_deriv_at"]], ["add", "theorem", "map_nhds_eq", ["has_strict_fderiv_at"]], ["add", "theorem", "open_map_of_strict_deriv", []], ["add", "theorem", "open_map_of_strict_fderiv", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "le_map", ["filter"]], ["add", "theorem", "le_map_of_right_inverse", ["filter"]], ["add", "theorem", "map_id'", ["filter"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "map_nhds_eq", ["local_homeomorph"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "theorem", "image_mem_nhds", ["is_open_map"]], ["mod", "theorem", "is_open_range", ["is_open_map"]], ["mod", "theorem", "nhds_le", ["is_open_map"]], ["add", "theorem", "of_nhds_le", ["is_open_map"]]]}]}, {"timestamp": 1610708281, "sha": "4c1d12f5", "message": "feat(data/complex/basic): Adding `im_eq_sub_conj` (#5750)\nAdds `im_eq_sub_conj`, which I couldn't find in the library.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "im_eq_sub_conj", ["complex"]]]}]}, {"timestamp": 1610704674, "sha": "94f45c74", "message": "chore(linear_algebra/quadratic_form): Add missing simp lemmas about quadratic_form.polar (#5748)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["mod", "theorem", "map_neg", ["quadratic_form"]], ["mod", "theorem", "map_zero", ["quadratic_form"]], ["add", "theorem", "polar_neg_left", ["quadratic_form"]], ["add", "theorem", "polar_neg_right", ["quadratic_form"]], ["add", "theorem", "polar_sub_left", ["quadratic_form"]], ["add", "theorem", "polar_sub_right", ["quadratic_form"]]]}]}, {"timestamp": 1610699759, "sha": "09c23456", "message": "feat(category_theory/over): epis and monos in the over category (#5684)", "changes": [{"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["add", "theorem", "epi_of_epi_left", ["category_theory", "over"]], ["add", "theorem", "mono_of_mono_left", ["category_theory", "over"]]]}]}, {"timestamp": 1610699756, "sha": "395eb2ba", "message": "feat(category_theory): subterminal objects (#5669)", "changes": [{"oldPath": null, "newPath": "src/category_theory/subterminal.lean", "changes": [["add", "theorem", "def", ["category_theory", "is_subterminal"]], ["add", "def", "is_iso_diag", ["category_theory", "is_subterminal"]], ["add", "def", "iso_diag", ["category_theory", "is_subterminal"]], ["add", "theorem", "mono_is_terminal_from", ["category_theory", "is_subterminal"]], ["add", "theorem", "mono_terminal_from", ["category_theory", "is_subterminal"]], ["add", "def", "is_subterminal", ["category_theory"]], ["add", "theorem", "is_subterminal_of_is_iso_diag", ["category_theory"]], ["add", "theorem", "is_subterminal_of_is_terminal", ["category_theory"]], ["add", "theorem", "is_subterminal_of_mono_is_terminal_from", ["category_theory"]], ["add", "theorem", "is_subterminal_of_mono_terminal_from", ["category_theory"]], ["add", "theorem", "is_subterminal_of_terminal", ["category_theory"]], ["add", "def", "subterminal_inclusion", ["category_theory"]], ["add", "def", "subterminals", ["category_theory"]]]}]}, {"timestamp": 1610699754, "sha": "f8db86a2", "message": "feat(category_theory/limits): finite products from binary products (#5516)\nAdds constructions for finite products from binary products and terminal object, and a preserves version", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/finite_products_of_binary_products.lean", "changes": [["add", "def", "extend_fan", ["category_theory"]], ["add", "def", "extend_fan_is_limit", ["category_theory"]], ["add", "theorem", "has_finite_products_of_has_binary_and_terminal", ["category_theory"]], ["add", "def", "preserves_finite_products_of_preserves_binary_and_terminal", ["category_theory"]], ["add", "def", "preserves_ulift_fin_of_preserves_binary_and_terminal", ["category_theory"]]]}]}, {"timestamp": 1610689286, "sha": "faf106a3", "message": "refactor(data/real/{e,}nnreal): reuse generic lemmas (#5751)\n* reuse `div_eq_mul_inv` and `one_div` from `div_inv_monoid`;\n* reuse lemmas about `group_with_zero` instead of repeating them in the `nnreal` namespace;\n* add `has_sum.div_const`.", "changes": [{"oldPath": "src/analysis/analytic/radius_liminf.lean", "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "div_def", ["ennreal"]], ["mod", "theorem", "div_top", ["ennreal"]], ["del", "theorem", "mul_div_assoc", ["ennreal"]], ["mod", "theorem", "top_div_coe", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "div_def", ["nnreal"]], ["del", "theorem", "div_div_eq_div_mul", ["nnreal"]], ["del", "theorem", "div_div_eq_mul_div", ["nnreal"]], ["del", "theorem", "div_eq_div_iff", ["nnreal"]], ["del", "theorem", "div_eq_iff", ["nnreal"]], ["del", "theorem", "div_eq_mul_one_div", ["nnreal"]], ["del", "theorem", "div_mul_eq_mul_div", ["nnreal"]], ["del", "theorem", "div_one", ["nnreal"]], ["mod", "theorem", "div_pos", ["nnreal"]], ["del", "theorem", "div_pow", ["nnreal"]], ["del", "theorem", "div_self", ["nnreal"]], ["del", "theorem", "eq_div_iff", ["nnreal"]], ["del", "theorem", "inv_eq_one_div", ["nnreal"]], ["del", "theorem", "inv_eq_zero", ["nnreal"]], ["del", "theorem", "inv_inv", ["nnreal"]], ["del", "theorem", "inv_mul_cancel", ["nnreal"]], ["del", "theorem", "inv_one", ["nnreal"]], ["del", "theorem", "inv_zero", ["nnreal"]], ["del", "theorem", "mul_div_assoc'", ["nnreal"]], ["del", "theorem", "mul_div_cancel'", ["nnreal"]], ["del", "theorem", "mul_div_cancel", ["nnreal"]], ["del", "theorem", "mul_inv_cancel", ["nnreal"]], ["del", "theorem", "one_div", ["nnreal"]], ["del", "theorem", "one_div_div", ["nnreal"]], ["del", "theorem", "pow_eq_zero", ["nnreal"]], ["del", "theorem", "pow_ne_zero", ["nnreal"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "div_const", ["has_sum"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1610689284, "sha": "931182ee", "message": "chore(algebra/ordered_ring): add a few simp lemmas (#5749)\n* fix misleading names `neg_lt_iff_add_nonneg` → `neg_lt_iff_pos_add`,\n `neg_lt_iff_add_nonneg'` → `neg_lt_iff_pos_add'`;\n* add `@[simp]` to `abs_mul_abs_self` and `abs_mul_self`;\n* add lemmas `neg_le_self_iff`, `neg_lt_self_iff`, `le_neg_self_iff`,\n `lt_neg_self_iff`, `abs_eq_self`, `abs_eq_neg_self`.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "abs_eq_neg_self", []], ["add", "theorem", "abs_eq_self", []], ["mod", "theorem", "abs_mul_abs_self", []], ["mod", "theorem", "abs_mul_self", []], ["add", "theorem", "le_neg_self_iff", []], ["add", "theorem", "lt_neg_self_iff", []], ["add", "theorem", "neg_le_self_iff", []], ["add", "theorem", "neg_lt_self_iff", []], ["mod", "theorem", "neg_one_lt_zero", []]]}]}, {"timestamp": 1610677173, "sha": "5d003d85", "message": "chore(scripts): update nolints.txt (#5754)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610677171, "sha": "7151fb70", "message": "chore(data/equiv/basic): equiv/perm_congr simp lemmas (#5737)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "equiv_congr_refl_left", ["equiv"]], ["add", "theorem", "equiv_congr_refl_right", ["equiv"]], ["add", "theorem", "perm_congr_def", ["equiv"]], ["add", "theorem", "perm_congr_symm", ["equiv"]], ["add", "theorem", "perm_congr_symm_apply", ["equiv"]]]}]}, {"timestamp": 1610662257, "sha": "64a1b197", "message": "feat(data/equiv/basic): subsingleton equiv and perm (#5736)", "changes": [{"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "coe_subsingleton", ["equiv", "perm"]], ["add", "theorem", "subsingleton_eq_refl", ["equiv", "perm"]]]}]}, {"timestamp": 1610662254, "sha": "975f41a4", "message": "feat(order): closure operators (#5524)\nAdds closure operators on a partial order, as in [wikipedia](https://en.wikipedia.org/wiki/Closure_operator#Closure_operators_on_partially_ordered_sets). I made them bundled for no particular reason, I don't mind unbundling.", "changes": [{"oldPath": null, "newPath": "src/order/closure.lean", "changes": [["add", "def", "closed", ["closure_operator"]], ["add", "theorem", "closed_eq_range_close", ["closure_operator"]], ["add", "theorem", "closure_eq_self_of_mem_closed", ["closure_operator"]], ["add", "theorem", "closure_inter_le", ["closure_operator"]], ["add", "theorem", "closure_is_closed", ["closure_operator"]], ["add", "theorem", "closure_le_closed_iff_le", ["closure_operator"]], ["add", "theorem", "closure_top", ["closure_operator"]], ["add", "theorem", "closure_union_closure_le", ["closure_operator"]], ["add", "theorem", "ext", ["closure_operator"]], ["add", "def", "gi", ["closure_operator"]], ["add", "def", "id", ["closure_operator"]], ["add", "theorem", "idempotent", ["closure_operator"]], ["add", "theorem", "le_closure", ["closure_operator"]], ["add", "theorem", "le_closure_iff", ["closure_operator"]], ["add", "theorem", "mem_closed_iff", ["closure_operator"]], ["add", "theorem", "mem_closed_iff_closure_le", ["closure_operator"]], ["add", "theorem", "monotone", ["closure_operator"]], ["add", "def", "to_closed", ["closure_operator"]], ["add", "theorem", "top_mem_closed", ["closure_operator"]], ["add", "structure", "closure_operator", []]]}]}, {"timestamp": 1610651178, "sha": "0817e7fe", "message": "feat(measure_theory): absolute continuity of the integral (#5743)\n### API changes:\n#### `ennreal`s and `nnreal`s:\n* `ennreal.mul_le_mul` and `ennreal.mul_lt_mul` are now `mono` lemmas;\n* rename `ennreal.sub_lt_sub_self` to `ennreal.sub_lt_self`: there is no `-` in the RHS;\n* new lemmas `enrneal.mul_div_le`, `nnreal.sub_add_eq_max`, and `nnreal.add_sub_eq_max`;\n* add new lemma `ennreal.bsupr_add`, use in in the proof of `ennreal.Sup_add`;\n#### Complete lattice\n* new lemma `supr_lt_iff`;\n#### Simple functions\n* new lemmas `simple_func.exists_forall_le`, `simple_func.map_add`,\n `simple_func.sub_apply`;\n* weaker typeclass assumptions in `simple_func.coe_sub`;\n* `monotone_eapprox` is now a `mono` lemma;\n#### Integration\n* new lemmas `exists_simple_func_forall_lintegral_sub_lt_of_pos`,\n `exists_pos_set_lintegral_lt_of_measure_lt`,\n `tendsto_set_lintegral_zero`, and\n `has_finite_integral.tendsto_set_integral_nhds_zero`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "mul_div_le", ["ennreal"]], ["mod", "theorem", "mul_le_mul", ["ennreal"]], ["mod", "theorem", "mul_lt_mul", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "add_sub_eq_max", ["nnreal"]], ["add", "theorem", "sub_add_eq_max", ["nnreal"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "tendsto_set_integral_nhds_zero", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "tendsto_set_integral_nhds_zero", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "exists_pos_set_lintegral_lt_of_measure_lt", ["measure_theory"]], ["add", "theorem", "exists_simple_func_forall_lintegral_sub_lt_of_pos", ["measure_theory"]], ["mod", "theorem", "coe_sub", ["measure_theory", "simple_func"]], ["add", "theorem", "exists_forall_le", ["measure_theory", "simple_func"]], ["add", "theorem", "map_add", ["measure_theory", "simple_func"]], ["mod", "theorem", "monotone_eapprox", ["measure_theory", "simple_func"]], ["add", "theorem", "sub_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_set_lintegral_zero", ["measure_theory"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "supr_lt_iff", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "bsupr_add", ["ennreal"]]]}]}, {"timestamp": 1610651176, "sha": "3b8cfdc9", "message": "feat(linear_algebra/{exterior,tensor,free}_algebra): provide left-inverses for `algebra_map` and `ι` (#5722)\nThe strategy used for `algebra_map` here can't be used on `clifford_algebra` as the zero map does not satisfy `f m * f m = Q m`.", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["add", "def", "algebra_map_inv", ["free_algebra"]], ["add", "theorem", "algebra_map_left_inverse", ["free_algebra"]]]}, {"oldPath": "src/algebra/triv_sq_zero_ext.lean", "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": [["add", "def", "snd_hom", ["triv_sq_zero_ext"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["add", "def", "algebra_map_inv", ["exterior_algebra"]], ["add", "theorem", "algebra_map_left_inverse", ["exterior_algebra"]], ["del", "theorem", "ι_injective", ["exterior_algebra"]], ["add", "def", "ι_inv", ["exterior_algebra"]], ["add", "theorem", "ι_left_inverse", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["add", "def", "algebra_map_inv", ["tensor_algebra"]], ["add", "theorem", "algebra_map_left_inverse", ["tensor_algebra"]], ["del", "theorem", "ι_injective", ["tensor_algebra"]], ["add", "def", "ι_inv", ["tensor_algebra"]], ["add", "theorem", "ι_left_inverse", ["tensor_algebra"]]]}]}, {"timestamp": 1610637947, "sha": "91b099eb", "message": "chore(data/equiv/fin): simp definitional lemmas (#5740)", "changes": [{"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "theorem", "fin_succ_equiv_succ", []], ["add", "theorem", "fin_succ_equiv_symm_none", []], ["add", "theorem", "fin_succ_equiv_symm_some", []], ["add", "theorem", "fin_succ_equiv_zero", []]]}]}, {"timestamp": 1610637944, "sha": "7e9094b1", "message": "feat(control/equiv_functor): simp defn lemmas and injectivity (#5739)", "changes": [{"oldPath": "src/control/equiv_functor.lean", "newPath": "src/control/equiv_functor.lean", "changes": [["add", "theorem", "injective", ["equiv_functor", "map_equiv"]], ["add", "theorem", "map_equiv_refl", ["equiv_functor"]], ["add", "theorem", "map_equiv_symm", ["equiv_functor"]], ["mod", "theorem", "map_equiv_symm_apply", ["equiv_functor"]], ["add", "theorem", "map_equiv_trans", ["equiv_functor"]]]}]}, {"timestamp": 1610637942, "sha": "e3cc92e1", "message": "chore(data/equiv/basic): swap symm and trans simp lemmas (#5738)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "swap_self", ["equiv"]], ["mod", "theorem", "symm_trans_swap_trans", ["equiv"]], ["add", "theorem", "trans_swap_trans_symm", ["equiv"]]]}]}, {"timestamp": 1610637940, "sha": "de8b88f1", "message": "chore(group_theory/perm/sign): trans and symm simp (#5735)", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "sign_symm", ["equiv", "perm"]], ["mod", "theorem", "sign_symm_trans_trans", ["equiv", "perm"]], ["add", "theorem", "sign_trans", ["equiv", "perm"]], ["add", "theorem", "sign_trans_trans_symm", ["equiv", "perm"]]]}]}, {"timestamp": 1610637937, "sha": "82532c19", "message": "chore(data/set/basic): reuse some proofs about `boolean_algebra` (#5728)\nAPI changes:\n* merge `set.compl_compl` with `compl_compl'`;\n* add `is_compl.compl_eq_iff`, `compl_eq_top`, and `compl_eq_bot`;\n* add `simp` attribute to `compl_le_compl_iff_le`;\n* fix misleading name in `compl_le_iff_compl_le`, add a missing\n variant;\n* add `simp` attribute to `compl_empty_iff` and `compl_univ_iff`;\n* add `set.subset.eventually_le`.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "compl_compl", ["set"]], ["mod", "theorem", "compl_empty", ["set"]], ["mod", "theorem", "compl_empty_iff", ["set"]], ["mod", "theorem", "compl_inter", ["set"]], ["mod", "theorem", "compl_inter_self", ["set"]], ["mod", "theorem", "compl_union", ["set"]], ["mod", "theorem", "compl_univ", ["set"]], ["mod", "theorem", "compl_univ_iff", ["set"]], ["mod", "theorem", "inter_compl_self", ["set"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["del", "theorem", "compl_compl'", []], ["add", "theorem", "compl_compl", []], ["add", "theorem", "compl_eq_bot", []], ["add", "theorem", "compl_eq_top", []], ["mod", "theorem", "compl_le_compl_iff_le", []], ["mod", "theorem", "compl_le_iff_compl_le", []], ["add", "theorem", "compl_eq_iff", ["is_compl"]], ["add", "theorem", "le_compl_iff_le_compl", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually_le", ["set", "subset"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1610625568, "sha": "3b3f9a21", "message": "refactor(measure_theory): review def&API of the `dirac` measure (#5732)\n* use `set.indicator` instead of `⨆ a ∈ s, 1` in the definition.\n* rename some theorems to `thm'`, add a version assuming\n `[measurable_singleton_class α]` but not\n `is_measurable s`/`measurable f` under the old name.\n* rename some lemmas from `eventually` to `ae`.", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_dirac'", ["measure_theory"]], ["mod", "theorem", "integral_dirac", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": [["del", "theorem", "map_dirac", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_dirac'", ["measure_theory"]], ["mod", "theorem", "lintegral_dirac", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_dirac_eq", ["measure_theory"]], ["add", "theorem", "ae_dirac_iff", ["measure_theory"]], ["add", "theorem", "ae_eq_dirac'", ["measure_theory"]], ["add", "theorem", "ae_eq_dirac", ["measure_theory"]], ["del", "theorem", "dirac_ae_eq", ["measure_theory"]], ["del", "theorem", "eventually_dirac", ["measure_theory"]], ["del", "theorem", "eventually_eq_dirac'", ["measure_theory"]], ["del", "theorem", "eventually_eq_dirac", ["measure_theory"]], ["mod", "theorem", "count_apply_infinite", ["measure_theory", "measure"]], ["mod", "theorem", "dirac_apply'", ["measure_theory", "measure"]], ["mod", "theorem", "dirac_apply", ["measure_theory", "measure"]], ["mod", "theorem", "dirac_apply_of_mem", ["measure_theory", "measure"]], ["add", "theorem", "le_count_apply", ["measure_theory", "measure"]], ["add", "theorem", "le_dirac_apply", ["measure_theory", "measure"]], ["add", "theorem", "le_sum_apply", ["measure_theory", "measure"]], ["add", "theorem", "map_dirac", ["measure_theory", "measure"]], ["add", "theorem", "mem_ae_dirac_iff", ["measure_theory"]], ["del", "theorem", "mem_dirac_ae_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_subtype'", ["finset"]]]}]}, {"timestamp": 1610625566, "sha": "8bc26d13", "message": "feat(algebra/order): ne_iff_lt_iff_le\n \n (#5731)", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "ne_iff_lt_iff_le", []]]}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": [["del", "theorem", "le_of_sub_eq_pos", ["nat"]], ["del", "theorem", "ne_iff_lt_iff_le", []]]}]}, {"timestamp": 1610613553, "sha": "159542ad", "message": "chore(*): split some long lines (#5742)", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["mod", "def", "to_CommRing_iso", ["ring_equiv"]]]}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["mod", "def", "linear_equiv_iso_Module_iso", []]]}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "theorem", "zero_exact", ["add_comm_group", "direct_limit", "of"]], ["mod", "theorem", "zero_exact", ["ring", "direct_limit", "of"]]]}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": [["mod", "theorem", "coe_subtype_hom", ["is_invariant_subring"]]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "min_pow_dvd_add", []], ["mod", "theorem", "pow_eq_zero", []]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["mod", "def", "map", ["invertible"]], ["mod", "theorem", "invertible_unique", []]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "theorem", "coe_to_linear_equiv", ["lie_algebra", "equiv"]], ["mod", "theorem", "coe_to_lie_module_hom", ["lie_module_equiv"]]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["mod", "def", "lift_nc_alg_hom", ["add_monoid_algebra"]], ["mod", "theorem", "lift_nc_one", ["add_monoid_algebra"]]]}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": [["mod", "theorem", "length_sigma_composition_aux", ["composition"]], ["mod", "theorem", "comp_coeff_zero''", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "union", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "union", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "nnnorm_sum_le", []], ["mod", "theorem", "tsum_of_norm_bounded", []]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "deriv_within_arctan", []], ["mod", "theorem", "sin_eq_iff_eq_or_add_eq_pi", ["real", "angle"]], ["mod", "theorem", "cos_lt_cos_of_nonneg_of_le_pi_div_two", ["real"]]]}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["mod", "def", "right_adjoint_of_nat_iso", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["mod", "theorem", "epi_of_surjective", ["category_theory", "concrete_category"]], ["mod", "def", "has_coe_to_sort", ["category_theory", "concrete_category"]], ["mod", "theorem", "mono_of_injective", ["category_theory", "concrete_category"]], ["mod", "def", "forget₂", ["category_theory"]], ["mod", "def", "mk'", ["category_theory", "has_forget₂"]]]}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["mod", "theorem", "eq_to_hom_op", ["category_theory"]], ["mod", "theorem", "eq_to_hom_unop", ["category_theory"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["mod", "def", "graded_object_with_shift", ["category_theory"]]]}, {"oldPath": "src/combinatorics/pigeonhole.lean", "newPath": "src/combinatorics/pigeonhole.lean", "changes": []}, {"oldPath": "src/control/uliftable.lean", "newPath": "src/control/uliftable.lean", "changes": [["mod", "def", "down_map", ["uliftable"]], ["mod", "def", "up_map", ["uliftable"]]]}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": [["mod", "theorem", "of_equiv_σ", ["filter", "realizer"]], ["mod", "theorem", "tendsto_iff", ["filter", "realizer"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["mod", "theorem", "refl_to_local_equiv", ["equiv"]], ["mod", "theorem", "of_set_symm", ["local_equiv"]], ["mod", "theorem", "refl_restr_source", ["local_equiv"]], ["mod", "theorem", "refl_restr_target", ["local_equiv"]], ["mod", "theorem", "restr_target", ["local_equiv"]], ["mod", "theorem", "trans_target", ["local_equiv"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "def", "of_surjective", ["fintype"]], ["mod", "theorem", "mem_of_mem_perms_of_list", []], ["mod", "theorem", "mem_perms_of_list_iff", []], ["mod", "theorem", "to_finset_inj", ["set"]]]}, {"oldPath": "src/data/qpf/multivariate/basic.lean", "newPath": "src/data/qpf/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/sym.lean", "newPath": "src/data/sym.lean", "changes": [["mod", "theorem", "cons_equiv_eq_equiv_cons", ["sym"]]]}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": [["mod", "theorem", "const_append1", ["typevec"]], ["mod", "def", "of_subtype", ["typevec"]], ["mod", "def", "rel_last'", ["typevec"]], ["mod", "theorem", "repeat_eq_append1", ["typevec"]], ["mod", "theorem", "repeat_eq_iff_eq", ["typevec"]], ["mod", "theorem", "subtype_val_nil", ["typevec"]], ["mod", "def", "to_subtype", ["typevec"]], ["mod", "def", "typevec_cases_cons₂", ["typevec"]], ["mod", "theorem", "typevec_cases_cons₂_append_fun", ["typevec"]], ["mod", "def", "typevec_cases_nil₃", ["typevec"]]]}, {"oldPath": "src/testing/slim_check/functions.lean", "newPath": "src/testing/slim_check/functions.lean", "changes": [["mod", "theorem", "apply_id_injective", ["slim_check", "injective_function"]], ["mod", "def", "slice", ["slim_check", "injective_function", "perm"]]]}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": [["mod", "def", "shrink", ["slim_check", "sum"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "interior_union_is_closed_of_interior_empty", []]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": [["mod", "theorem", "eq_to_GH_space_iff", ["Gromov_Hausdorff"]], ["mod", "theorem", "to_GH_space_eq_to_GH_space_iff_isometric", ["Gromov_Hausdorff"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "theorem", "Hausdorff_edist_closure", ["emetric"]], ["mod", "theorem", "Hausdorff_edist_le_ediam", ["emetric"]], ["mod", "theorem", "Hausdorff_edist_zero_iff_closure_eq_closure", ["emetric"]], ["mod", "theorem", "exists_edist_lt_of_Hausdorff_edist_lt", ["emetric"]], ["mod", "theorem", "Hausdorff_dist_closure", ["metric"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["mod", "theorem", "comp", ["isometry"]], ["mod", "def", "Kuratowski_embedding", ["nonempty_compacts"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "finite_compact_cover", ["is_compact"]], ["mod", "theorem", "nhds_inter_eq_singleton_of_mem_discrete", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["mod", "theorem", "tendsto_subseq'", ["is_compact"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "is_preconnected_iff_subset_of_disjoint_closed", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["mod", "theorem", "eq_of_uniformity_inf_nhds", []], ["mod", "theorem", "separation_rel_comap", []]]}]}, {"timestamp": 1610608546, "sha": "1509c295", "message": "chore(archive/100-theorems-list): 83_friendship_graphs (#5727)\nCleaned up some lint and put it in terms of the new `simple_graph.common_neighbors`.", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": [["del", "def", "common_friends", []], ["mod", "theorem", "adj_matrix_pow_mod_p_of_regular", ["friendship"]], ["mod", "theorem", "false_of_three_le_degree", ["friendship"]], ["mod", "def", "friendship", []], ["mod", "theorem", "friendship_theorem", []], ["del", "theorem", "mem_common_friends", []]]}, {"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "mem_common_neighbors", ["simple_graph"]]]}]}, {"timestamp": 1610595521, "sha": "c8c6d2e7", "message": "feat(ci): Emit error messages in a way understood by github (#5726)\nThis uses the commands described [here](https://github.com/actions/toolkit/blob/master/docs/commands.md#log-level), for which [the implementation](https://github.com/actions/toolkit/blob/af821474235d3c5e1f49cee7c6cf636abb0874c4/packages/core/src/command.ts#L36-L94) provides a slightly clearer spec.\nThis means github now annotates broken lines, and highlights the error in red.\nOriginally I tried to implement this using \"problem matchers\", but these do not support multi-line error messages.\nSupporting this in the linter is something that I'll leave for a follow-up PR.", "changes": [{"oldPath": "scripts/detect_errors.py", "newPath": "scripts/detect_errors.py", "changes": []}]}, {"timestamp": 1610595519, "sha": "d11d83ad", "message": "feat(measure_theory/lebesgue_measure): volume of a box in `ℝⁿ` (#5635)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_nat", ["ennreal"]], ["mod", "theorem", "nat_ne_top", ["ennreal"]], ["add", "theorem", "of_real_coe_nat", ["ennreal"]], ["mod", "theorem", "top_ne_nat", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "mk_coe_nat", ["nnreal"]], ["add", "theorem", "of_real_coe_nat", ["nnreal"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["add", "theorem", "volume_Icc_pi", ["real"]], ["add", "theorem", "volume_Icc_pi_to_real", ["real"]], ["add", "theorem", "volume_Ici", ["real"]], ["add", "theorem", "volume_Iic", ["real"]], ["add", "theorem", "volume_Iio", ["real"]], ["add", "theorem", "volume_Ioi", ["real"]], ["add", "theorem", "volume_pi_Ico", ["real"]], ["add", "theorem", "volume_pi_Ico_to_real", ["real"]], ["add", "theorem", "volume_pi_Ioc", ["real"]], ["add", "theorem", "volume_pi_Ioc_to_real", ["real"]], ["add", "theorem", "volume_pi_Ioo", ["real"]], ["add", "theorem", "volume_pi_Ioo_to_real", ["real"]]]}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": [["del", "theorem", "pi_def", ["measure_theory", "measure_space"]], ["mod", "theorem", "volume_pi", ["measure_theory"]], ["add", "theorem", "volume_pi_pi", ["measure_theory"]]]}]}, {"timestamp": 1610590882, "sha": "c050452a", "message": "chore(scripts): update nolints.txt (#5730)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610573790, "sha": "71a3261c", "message": "feat(logic/basic): exists_eq simp lemmas without and.comm (#5694)", "changes": [{"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/data/buffer/parser/basic.lean", "newPath": "src/data/buffer/parser/basic.lean", "changes": [["del", "theorem", "exists_eq_right_right'", []], ["del", "theorem", "exists_eq_right_right", []]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_eq_right_right'", []], ["add", "theorem", "exists_eq_right_right", []]]}]}, {"timestamp": 1610573788, "sha": "6397e144", "message": "feat(data/nat/cast): add nat.bin_cast for faster casting (#5664)\n[As suggested](https://github.com/leanprover-community/mathlib/pull/5462#discussion_r553226279) by @gebner.", "changes": [{"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "bin_cast_eq", ["nat"]]]}]}, {"timestamp": 1610563973, "sha": "69e9344c", "message": "feat(data/set/finite): add lemma with iff statement about when finite sets can be subsets (#5725)\nPart of #5698 in order to prove statements about strongly regular graphs.\nCo-author: @shingtaklam1324", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "subset_iff_to_finset_subset", ["set"]]]}]}, {"timestamp": 1610563971, "sha": "0b9fbc48", "message": "feat(combinatorics/simple_graph/basic): add definition of common neighbors and lemmas (#5718)\nPart of #5698 in order to prove facts about strongly regular graphs", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "def", "common_neighbors", ["simple_graph"]], ["add", "theorem", "common_neighbors_eq", ["simple_graph"]], ["add", "theorem", "common_neighbors_subset_neighbor_set", ["simple_graph"]], ["add", "theorem", "common_neighbors_symm", ["simple_graph"]], ["add", "theorem", "degree_lt_card_verts", ["simple_graph"]], ["add", "theorem", "is_regular_of_degree_eq", ["simple_graph"]], ["add", "theorem", "not_mem_common_neighbors_left", ["simple_graph"]], ["add", "theorem", "not_mem_common_neighbors_right", ["simple_graph"]]]}]}, {"timestamp": 1610563969, "sha": "7ce47174", "message": "refactor(computability/reduce): define many-one degrees without parameter (#2630)\nThe file `reduce.lean` defines many-one degrees for computable reductions. At the moment every primcodable type `α` has a separate type of degrees `many_one_degree α`. This is completely antithetical to the notion of degrees, which are introduced to classify problems up to many-one equivalence.\nThis PR defines a single `many_one_degree` type that lives in `Type 0`. We use the `ulower` infrastructure from #2574 which shows that every type is computably equivalent to a subset of natural numbers. The function `many_one_degree.of` which assigns to every set of a primcodable type a degree is still universe polymorphic. In particular, we show that `of p = of q ↔ many_one_equiv p q`, etc. in maximal generality, where `p` and `q` are subsets of different types in different universes.\nSee previous discussion at #1203.", "changes": [{"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": [["add", "theorem", "option_get_or_else", ["computable"]], ["add", "theorem", "subtype_mk", ["computable"]]]}, {"oldPath": "src/computability/reduce.lean", "newPath": "src/computability/reduce.lean", "changes": [["mod", "def", "computable", ["equiv"]], ["mod", "theorem", "equivalence_of_many_one_equiv", []], ["del", "def", "add", ["many_one_degree"]], ["del", "theorem", "add_le'", ["many_one_degree"]], ["del", "theorem", "add_le", ["many_one_degree"]], ["add", "theorem", "add_of", ["many_one_degree"]], ["del", "def", "comap", ["many_one_degree"]], ["del", "def", "le", ["many_one_degree"]], ["del", "theorem", "le_add_left'", ["many_one_degree"]], ["del", "theorem", "le_add_left", ["many_one_degree"]], ["del", "theorem", "le_add_right'", ["many_one_degree"]], ["del", "theorem", "le_add_right", ["many_one_degree"]], ["del", "theorem", "le_antisymm", ["many_one_degree"]], ["del", "theorem", "le_comap_left", ["many_one_degree"]], ["del", "theorem", "le_comap_right", ["many_one_degree"]], ["del", "theorem", "le_refl", ["many_one_degree"]], ["del", "theorem", "le_trans", ["many_one_degree"]], ["mod", "def", "of", ["many_one_degree"]], ["add", "theorem", "of_eq_of", ["many_one_degree"]], ["del", "theorem", "of_le_of'", ["many_one_degree"]], ["mod", "theorem", "of_le_of", ["many_one_degree"]], ["mod", "def", "many_one_degree", []], ["del", "def", "many_one_equiv_setoid", []], ["add", "theorem", "many_one_equiv_to_nat", []], ["add", "theorem", "many_one_equiv_up", []], ["add", "theorem", "many_one_reducible_to_nat", []], ["add", "theorem", "many_one_reducible_to_nat_to_nat", []], ["mod", "theorem", "of_equiv", ["one_one_reducible"]], ["mod", "theorem", "of_equiv_symm", ["one_one_reducible"]], ["mod", "theorem", "reflexive_many_one_reducible", []], ["mod", "theorem", "reflexive_one_one_reducible", []], ["add", "def", "to_nat", []], ["add", "theorem", "to_nat_many_one_equiv", []], ["add", "theorem", "to_nat_many_one_reducible", []], ["mod", "theorem", "transitive_many_one_reducible", []], ["mod", "theorem", "transitive_one_one_reducible", []], ["add", "theorem", "down_computable", ["ulower"]]]}]}, {"timestamp": 1610554090, "sha": "d533fbb5", "message": "fix(finsupp/pointwise): Relax the ring requirement to semiring (#5723)", "changes": [{"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}]}, {"timestamp": 1610554087, "sha": "340ddf83", "message": "chore(scripts): don't assume cwd when running lint-style. (#5721)\nAllows running the linter from any ol' directory.", "changes": [{"oldPath": "scripts/lint-style.py", "newPath": "scripts/lint-style.py", "changes": []}]}, {"timestamp": 1610554084, "sha": "d351cfe0", "message": "feat(data/finset): sup_eq_bind (#5717)\n`finset.sup s f` is equal to `finset.bind s f` when `f : α → finset β` is an indexed family of finite sets. This is a proof of that with a couple supporting lemmas. (There might be a more direct proof through the definitions of `sup` and `bind`, which are eventually in terms of `multiset.foldr`.)\nI also moved `finset.mem_sup` to `multiset.mem_sup` and gave a new `finset.mem_sup` for indexed families of `finset`, where the old one was for indexed families of `multiset`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "val_to_finset", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "mem_sup", ["finset"]], ["add", "theorem", "sup_eq_bind", ["finset"]], ["add", "theorem", "sup_to_finset", ["finset"]], ["add", "theorem", "mem_sup", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}]}, {"timestamp": 1610554082, "sha": "3ac4bb24", "message": "feat(combinatorics/simple_graph/basic): add definition of complement of simple graph (#5697)\nAdd definition of the complement of a simple graph. Part of branch [strongly_regular_graph](https://github.com/leanprover-community/mathlib/tree/strongly_regular_graph), with the goal of proving facts about strongly regular graphs.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "def", "compl", ["simple_graph"]], ["add", "theorem", "compl_adj", ["simple_graph"]], ["add", "theorem", "compl_compl", ["simple_graph"]], ["add", "theorem", "compl_involutive", ["simple_graph"]], ["add", "theorem", "compl_neighbor_set_disjoint", ["simple_graph"]], ["add", "theorem", "neighbor_set_union_compl_neighbor_set_eq", ["simple_graph"]]]}]}, {"timestamp": 1610549669, "sha": "c8574c89", "message": "feat(analysis/special_functions/pow): add various lemmas about ennreal.rpow (#5701)", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "le_rpow_one_div_iff", ["ennreal"]], ["add", "theorem", "lt_rpow_one_div_iff", ["ennreal"]], ["add", "theorem", "rpow_eq_top_iff_of_pos", ["ennreal"]], ["add", "theorem", "rpow_le_rpow_iff", ["ennreal"]], ["add", "theorem", "rpow_left_bijective", ["ennreal"]], ["add", "theorem", "rpow_left_injective", ["ennreal"]], ["add", "theorem", "rpow_left_monotone_of_nonneg", ["ennreal"]], ["add", "theorem", "rpow_left_strict_mono_of_pos", ["ennreal"]], ["add", "theorem", "rpow_left_surjective", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow_iff", ["ennreal"]], ["add", "theorem", "rpow_pos", ["ennreal"]], ["add", "theorem", "rpow_pos_of_nonneg", ["ennreal"]]]}]}, {"timestamp": 1610533152, "sha": "b6cca97e", "message": "feat(linear_algebra/{exterior,tensor}_algebra): Prove that `ι` is injective (#5712)\nThis strategy can't be used on `clifford_algebra`, and the obvious guess of trying to define a `less_triv_sq_quadratic_form_ext` leads to a non-associative multiplication; so for now, we just handle these two cases.", "changes": [{"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["add", "theorem", "ι_injective", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["add", "theorem", "ι_injective", ["tensor_algebra"]]]}]}, {"timestamp": 1610506311, "sha": "b9b6b16c", "message": "chore(scripts): update nolints.txt (#5720)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610506308, "sha": "5a532cab", "message": "fix(tactic/ring): fix loop in ring (#5711)\nThis occurs because when we name the atoms in `A * B = 2`, `A` is the\nfirst and `B` is the second, and once we put it in horner form it ends up\nas `B * A = 2`; but then when we go to rewrite it again `B` is named atom\nnumber 1 and `A` is atom number 2, so we write it the other way around\nand end up back at `A * B = 2`. The solution implemented here is to\nretain the atom map across calls to `ring.eval` while simp is driving\nit, so we end up rewriting it to `B * A = 2` in the first place but in the\nsecond pass we still think `B` is the second atom so we stick with the\n`B * A` order.\nFixes #2672", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1610491755, "sha": "fe5ec00e", "message": "doc(tactic/generalize_proofs): docs and test for generalize_proofs (#5715)\nAs requested on Zulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Extracting.20un-named.20proofs.20from.20the.20goal.20state/near/222472426", "changes": [{"oldPath": "src/tactic/generalize_proofs.lean", "newPath": "src/tactic/generalize_proofs.lean", "changes": []}, {"oldPath": null, "newPath": "test/generalize_proofs.lean", "changes": []}]}, {"timestamp": 1610491753, "sha": "a7b800ec", "message": "doc(overview): small reorganization of algebra/number theory (#5707)\n- adds Witt vectors\n- adds perfection of a ring\n- deduplicates Zariski topology\n- moves some items to a new subsection \"Number theory\"", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1610479907, "sha": "c1894c88", "message": "chore(analysis|measure_theory|topology): give tsum notation precedence 67 (#5709)\nThis saves us a lot of `()`\nIn particular, lean no longer thinks that `∑' i, f i = 37` is a tsum of propositions.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "tsum_geometric", ["ennreal"]], ["mod", "theorem", "tsum_geometric_nnreal", []], ["mod", "theorem", "tsum_geometric_of_abs_lt_1", []], ["mod", "theorem", "tsum_geometric_of_lt_1", []], ["mod", "theorem", "tsum_geometric_of_norm_lt_1", []], ["mod", "theorem", "tsum_geometric_two'", []], ["mod", "theorem", "tsum_geometric_two", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "measure_Union_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["mod", "theorem", "extend_Union_le_tsum_nat", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "theorem", "bind_apply", ["pmf"]], ["mod", "theorem", "tsum_coe", ["pmf"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "tsum_eq", ["equiv"]], ["mod", "theorem", "tsum_eq", ["has_sum"]], ["mod", "theorem", "has_sum_iff", ["summable"]], ["mod", "theorem", "tsum_mul_left", ["summable"]], ["mod", "theorem", "tsum_add", []], ["mod", "theorem", "tsum_eq_zero_iff", []], ["mod", "theorem", "tsum_eq_zero_of_not_summable", []], ["mod", "theorem", "tsum_fintype", []], ["mod", "theorem", "tsum_ite_eq", []], ["mod", "theorem", "tsum_le_tsum", []], ["mod", "theorem", "tsum_neg", []], ["mod", "theorem", "tsum_nonneg", []], ["mod", "theorem", "tsum_nonpos", []], ["mod", "theorem", "tsum_smul", []], ["mod", "theorem", "tsum_sub", []], ["mod", "theorem", "tsum_zero", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "summable_to_nnreal_of_tsum_ne_top", ["ennreal"]], ["mod", "theorem", "tendsto_sum_nat_add", ["ennreal"]], ["mod", "theorem", "to_nnreal_apply_of_tsum_ne_top", ["ennreal"]], ["mod", "theorem", "tsum_sub", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "coe_tsum", ["nnreal"]], ["mod", "theorem", "tsum_mul_left", ["nnreal"]]]}]}, {"timestamp": 1610479904, "sha": "0e7a9214", "message": "feat(data/buffer/parser/basic): lemmas describing parsers (#5460)", "changes": [{"oldPath": null, "newPath": "src/data/buffer/parser/basic.lean", "changes": [["add", "theorem", "exists_eq_right_right'", []], ["add", "theorem", "exists_eq_right_right", []], ["add", "theorem", "le_of_sub_eq_pos", ["nat"]], ["add", "theorem", "ne_iff_lt_iff_le", []], ["add", "def", "pos", ["parse_result"]], ["add", "theorem", "and_then_eq_bind", ["parser"]], ["add", "theorem", "and_then_fail", ["parser"]], ["add", "theorem", "and_then_success", ["parser"]], ["add", "theorem", "any_char_eq_done", ["parser"]], ["add", "theorem", "bind_eq_bind", ["parser"]], ["add", "theorem", "bind_eq_done", ["parser"]], ["add", "theorem", "bind_eq_fail", ["parser"]], ["add", "theorem", "ch_eq_done", ["parser"]], ["add", "theorem", "decorate_error_eq_done", ["parser"]], ["add", "theorem", "decorate_error_eq_fail", ["parser"]], ["add", "theorem", "decorate_error_fail", ["parser"]], ["add", "theorem", "decorate_error_success", ["parser"]], ["add", "theorem", "decorate_errors_eq_done", ["parser"]], ["add", "theorem", "decorate_errors_eq_fail", ["parser"]], ["add", "theorem", "decorate_errors_fail", ["parser"]], ["add", "theorem", "decorate_errors_success", ["parser"]], ["add", "theorem", "digit_eq_done", ["parser"]], ["add", "theorem", "eof_eq_done", ["parser"]], ["add", "theorem", "eps_eq_done", ["parser"]], ["add", "theorem", "fail_iff", ["parser"]], ["add", "theorem", "failure_def", ["parser"]], ["add", "theorem", "failure_eq_fail", ["parser"]], ["add", "theorem", "failure_eq_failure", ["parser"]], ["add", "theorem", "fix_core_eq_done", ["parser"]], ["add", "theorem", "fix_core_ne_done_zero", ["parser"]], ["add", "theorem", "foldl_core_eq_done", ["parser"]], ["add", "theorem", "foldl_core_succ_eq_fail", ["parser"]], ["add", "theorem", "foldl_core_zero_eq_done", ["parser"]], ["add", "theorem", "foldl_core_zero_eq_fail", ["parser"]], ["add", "theorem", "foldl_eq_done", ["parser"]], ["add", "theorem", "foldl_eq_fail", ["parser"]], ["add", "theorem", "foldr_core_eq_done", ["parser"]], ["add", "theorem", "foldr_core_succ_eq_fail", ["parser"]], ["add", "theorem", "foldr_core_zero_eq_done", ["parser"]], ["add", "theorem", "foldr_core_zero_eq_fail", ["parser"]], ["add", "theorem", "foldr_eq_done", ["parser"]], ["add", "theorem", "foldr_eq_fail", ["parser"]], ["add", "theorem", "foldr_eq_fail_of_valid_at_end", ["parser"]], ["add", "theorem", "guard_eq_done", ["parser"]], ["add", "theorem", "guard_eq_fail", ["parser"]], ["add", "theorem", "many'_eq_done", ["parser"]], ["add", "theorem", "many1_eq_done", ["parser"]], ["add", "theorem", "many1_eq_fail", ["parser"]], ["add", "theorem", "many1_ne_done_nil", ["parser"]], ["add", "theorem", "many_char1_eq_done", ["parser"]], ["add", "theorem", "many_char1_ne_empty", ["parser"]], ["add", "theorem", "many_char_eq_done_empty", ["parser"]], ["add", "theorem", "many_char_eq_done_not_empty", ["parser"]], ["add", "theorem", "many_char_eq_many_of_to_list", ["parser"]], ["add", "theorem", "many_eq_done", ["parser"]], ["add", "theorem", "many_eq_done_nil", ["parser"]], ["add", "theorem", "many_eq_fail", ["parser"]], ["add", "theorem", "map_const_eq_done", ["parser"]], ["add", "theorem", "map_const_eq_fail", ["parser"]], ["add", "theorem", "map_const_rev_eq_done", ["parser"]], ["add", "theorem", "map_eq_done", ["parser"]], ["add", "theorem", "map_eq_fail", ["parser"]], ["add", "theorem", "map_rev_const_eq_fail", ["parser"]], ["add", "theorem", "mmap'_eq_done", ["parser"]], ["add", "theorem", "mmap_eq_done", ["parser"]], ["add", "theorem", "not_failure_eq_done", ["parser"]], ["add", "theorem", "one_of'_eq_done", ["parser"]], ["add", "theorem", "one_of_eq_done", ["parser"]], ["add", "theorem", "orelse_eq_done", ["parser"]], ["add", "theorem", "orelse_eq_fail_eq", ["parser"]], ["add", "theorem", "orelse_eq_fail_invalid_lt", ["parser"]], ["add", "theorem", "orelse_eq_fail_of_valid_ne", ["parser"]], ["add", "theorem", "orelse_eq_orelse", ["parser"]], ["add", "theorem", "orelse_pure_eq_fail", ["parser"]], ["add", "theorem", "pure_eq_done", ["parser"]], ["add", "theorem", "pure_ne_fail", ["parser"]], ["add", "theorem", "remaining_eq_done", ["parser"]], ["add", "theorem", "return_eq_pure", ["parser"]], ["add", "theorem", "sat_eq_done", ["parser"]], ["add", "theorem", "sep_by1_eq_done", ["parser"]], ["add", "theorem", "sep_by1_ne_done_nil", ["parser"]], ["add", "theorem", "sep_by_eq_done_nil", ["parser"]], ["add", "theorem", "seq_eq_done", ["parser"]], ["add", "theorem", "seq_eq_fail", ["parser"]], ["add", "theorem", "seq_left_eq_done", ["parser"]], ["add", "theorem", "seq_left_eq_fail", ["parser"]], ["add", "theorem", "seq_right_eq_done", ["parser"]], ["add", "theorem", "seq_right_eq_fail", ["parser"]], ["add", "theorem", "success_iff", ["parser"]], ["add", "theorem", "and_then", ["parser", "valid"]], ["add", "theorem", "any_char", ["parser", "valid"]], ["add", "theorem", "bind", ["parser", "valid"]], ["add", "theorem", "ch", ["parser", "valid"]], ["add", "theorem", "char_buf", ["parser", "valid"]], ["add", "theorem", "decorate_error", ["parser", "valid"]], ["add", "theorem", "decorate_errors", ["parser", "valid"]], ["add", "theorem", "digit", ["parser", "valid"]], ["add", "theorem", "eof", ["parser", "valid"]], ["add", "theorem", "eps", ["parser", "valid"]], ["add", "theorem", "failure", ["parser", "valid"]], ["add", "theorem", "fix", ["parser", "valid"]], ["add", "theorem", "fix_core", ["parser", "valid"]], ["add", "theorem", "foldl", ["parser", "valid"]], ["add", "theorem", "foldl_core", ["parser", "valid"]], ["add", "theorem", "foldl_core_zero", ["parser", "valid"]], ["add", "theorem", "foldr", ["parser", "valid"]], ["add", "theorem", "foldr_core", ["parser", "valid"]], ["add", "theorem", "foldr_core_zero", ["parser", "valid"]], ["add", "theorem", "guard", ["parser", "valid"]], ["add", "theorem", "many'", ["parser", "valid"]], ["add", "theorem", "many1", ["parser", "valid"]], ["add", "theorem", "many", ["parser", "valid"]], ["add", "theorem", "many_char1", ["parser", "valid"]], ["add", "theorem", "many_char", ["parser", "valid"]], ["add", "theorem", "map", ["parser", "valid"]], ["add", "theorem", "mmap'", ["parser", "valid"]], ["add", "theorem", "mmap", ["parser", "valid"]], ["add", "theorem", "mono_done", ["parser", "valid"]], ["add", "theorem", "mono_fail", ["parser", "valid"]], ["add", "theorem", "nat", ["parser", "valid"]], ["add", "theorem", "one_of'", ["parser", "valid"]], ["add", "theorem", "one_of", ["parser", "valid"]], ["add", "theorem", "orelse", ["parser", "valid"]], ["add", "theorem", "pure", ["parser", "valid"]], ["add", "theorem", "remaining", ["parser", "valid"]], ["add", "theorem", "sat", ["parser", "valid"]], ["add", "theorem", "sep_by1", ["parser", "valid"]], ["add", "theorem", "sep_by", ["parser", "valid"]], ["add", "theorem", "seq", ["parser", "valid"]], ["add", "theorem", "str", ["parser", "valid"]], ["add", "def", "valid", ["parser"]]]}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": [["add", "theorem", "as_string_eq", ["list"]], ["add", "theorem", "as_string_inj", ["list"]], ["add", "theorem", "to_list_inv_as_string", ["list"]], ["add", "theorem", "as_string_inv_to_list", ["string"]], ["add", "theorem", "head_empty", ["string"]], ["add", "theorem", "nil_as_string_eq_empty", ["string"]], ["add", "theorem", "popn_empty", ["string"]], ["add", "theorem", "to_list_empty", ["string"]], ["add", "theorem", "to_list_nonempty", ["string"]], ["add", "theorem", "to_list_singleton", ["string"]]]}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "head", ["string"]]]}]}, {"timestamp": 1610467851, "sha": "10259082", "message": "chore(topology/algebra/infinite_sum): speedup has_sum_sum (#5710)\nthis lemma was pretty slow, now it is pretty fast", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1610467848, "sha": "73ba4602", "message": "feat(submonoid/basic): subsingleton and nontrivial instances for {add_,}submonoid (#5690)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "nontrivial_iff", ["subgroup"]], ["add", "theorem", "subsingleton_iff", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "nontrivial_iff", ["submonoid"]], ["add", "theorem", "subsingleton_iff", ["submonoid"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "subsingleton_iff_bot_eq_top", []]]}]}, {"timestamp": 1610467846, "sha": "e76fdb9e", "message": "docs(undergrad.yaml): analysis updates (#5675)\nUpdates to `undergrad.yaml` (including reverting some changes from #5638, after further discussion), and fix a docstring typo in `measure_theory.interval_integral`.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}]}, {"timestamp": 1610467844, "sha": "ce6a7eba", "message": "feat(linear_algebra/multilinear_map): Add `range` and `map` (#5658)\nNote that unlike `linear_map`, `range` cannot return a submodule, only a `sub_mul_action`.\nWe also can't guarantee closure under `smul` unless the map has at least one argument, as there is nothing requiring the multilinear map of no arguments to be zero.", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "def", "map", ["multilinear_map"]], ["add", "theorem", "map_nonempty", ["multilinear_map"]], ["add", "def", "range", ["multilinear_map"]]]}]}, {"timestamp": 1610456925, "sha": "3a3ec6c3", "message": "feat(measure_theory): each set has a measurable superset of the same measure (#5688)\n* generalize `outer_measure.exists_is_measurable_superset_of_trim_eq_zero`\n to `outer_measure.exists_is_measurable_superset_eq_trim`;\n* generalize `exists_is_measurable_superset_of_null` to\n `exists_is_measurable_superset`;\n* define `to_measurable mu s` to be a measurable superset `t ⊇ s`\n\twith `μ t = μ s`;\n* prove `countable_cover_nhds`: in a `second_countable_topology`, if\n `f` sends each point `x` to a neighborhood of `x`, then some\n countable subfamily of neighborhoods `f x` cover the whole space.\n* `sigma_finite_of_countable` no longer assumes that all sets `s ∈ S`\n are measurable.", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "exists_seq_cover_iff_countable", ["set"]], ["add", "theorem", "exists_seq_supr_eq_top_iff_countable", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "exists_is_measurable_superset", ["measure_theory"]], ["add", "theorem", "is_measurable_to_measurable", ["measure_theory"]], ["add", "theorem", "measure_to_measurable", ["measure_theory"]], ["add", "theorem", "subset_to_measurable", ["measure_theory"]], ["add", "def", "to_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "exists_is_measurable_superset_eq_trim", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "countable_cover_nhds", ["topological_space"]]]}]}, {"timestamp": 1610456921, "sha": "26710686", "message": "feat(data/set/intervals): add 2 Icc ssubset lemmas (#5617)\nAdd two strict subset lemmas for Icc, discussed in https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Icc_ssubset_Icc.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_ssubset_Icc_left", ["set"]], ["add", "theorem", "Icc_ssubset_Icc_right", ["set"]]]}]}, {"timestamp": 1610440005, "sha": "cd7a8a18", "message": "chore(category_theory/limits): move constructions folder (#5681)\nAs mentioned here: https://github.com/leanprover-community/mathlib/pull/5516#issuecomment-753450199\nThe linter is giving new errors, so I might as well fix them in this PR.", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "newPath": "src/category_theory/limits/constructions/over/connected.lean", "changes": [["mod", "def", "raised_cone_is_limit", ["category_theory", "over", "creates_connected"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/default.lean", "newPath": "src/category_theory/limits/constructions/over/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "newPath": "src/category_theory/limits/constructions/over/products.lean", "changes": [["mod", "def", "cones_equiv", ["category_theory", "over", "construct_products"]], ["mod", "def", "cones_equiv_counit_iso", ["category_theory", "over", "construct_products"]], ["mod", "def", "cones_equiv_unit_iso", ["category_theory", "over", "construct_products"]], ["mod", "theorem", "has_over_limit_discrete_of_wide_pullback_limit", ["category_theory", "over", "construct_products"]], ["mod", "theorem", "over_product_of_wide_pullback", ["category_theory", "over", "construct_products"]], ["mod", "def", "wide_pullback_diagram_of_diagram_over", ["category_theory", "over", "construct_products"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1610440003, "sha": "be75005c", "message": "fix(linear_algebra/tensor_product): Remove the priorities from the module structure (#5667)\nThese were added originally so that `semimodule'` was lower priority than `semimodule`, as the `semimodule'` instance took too long to resolve.\nHowever, this happens automatically anyway, since the former appears before the latter - the simple existence of the `semimodule` shortcut instances was enough to solve the long typeclass-resolution paths, their priority was a red herring.\nThe only effect of these attributes was to cause these instances to not take priority over `add_comm_monoid.nat_semimodule`, which was neither intended nor desirable.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1610436213, "sha": "cd0d8c02", "message": "chore(category_theory/limits/over): generalise, golf and document over limits (#5674)\n- Show that the forgetful functor `over X => C` creates colimits, generalising what was already there\n- Golf the proofs using this new instance\n- Add module doc\nand duals of the above", "changes": [{"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["del", "def", "colimit", ["category_theory", "over"]], ["del", "def", "forget_colimit_is_colimit", ["category_theory", "over"]], ["del", "def", "forget_limit_is_limit", ["category_theory", "under"]], ["del", "def", "limit", ["category_theory", "under"]]]}]}, {"timestamp": 1610417002, "sha": "9f9f85e8", "message": "chore(scripts): update nolints.txt (#5705)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610400136, "sha": "049f16a8", "message": "feat(measure_theory/pi): `ae_eq` lemmas about intervals in `Π i, α i` (#5633)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "pi_inter_distrib", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "pi_def", ["set"]], ["add", "theorem", "pi_diff_pi_subset", ["set"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": [["add", "theorem", "ae_eq_pi", ["measure_theory", "measure"]], ["add", "theorem", "ae_eq_set_pi", ["measure_theory", "measure"]], ["add", "theorem", "ae_eval_ne", ["measure_theory", "measure"]], ["add", "theorem", "ae_le_pi", ["measure_theory", "measure"]], ["add", "theorem", "ae_le_set_pi", ["measure_theory", "measure"]], ["add", "theorem", "ae_pi_le_infi_comap", ["measure_theory", "measure"]], ["add", "theorem", "pi_Ico_ae_eq_pi_Icc", ["measure_theory", "measure"]], ["add", "theorem", "pi_Iio_ae_eq_pi_Iic", ["measure_theory", "measure"]], ["add", "theorem", "pi_Ioc_ae_eq_pi_Icc", ["measure_theory", "measure"]], ["add", "theorem", "pi_Ioi_ae_eq_pi_Ici", ["measure_theory", "measure"]], ["add", "theorem", "pi_Ioo_ae_eq_pi_Icc", ["measure_theory", "measure"]], ["mod", "theorem", "pi_eval_preimage_null", ["measure_theory", "measure"]], ["add", "theorem", "pi_has_no_atoms", ["measure_theory", "measure"]], ["mod", "theorem", "pi_hyperplane", ["measure_theory", "measure"]], ["mod", "theorem", "pi_pi", ["measure_theory", "measure"]], ["add", "theorem", "tendsto_eval_ae_ae", ["measure_theory", "measure"]], ["add", "theorem", "univ_pi_Ico_ae_eq_Icc", ["measure_theory", "measure"]], ["add", "theorem", "univ_pi_Iio_ae_eq_Iic", ["measure_theory", "measure"]], ["add", "theorem", "univ_pi_Ioc_ae_eq_Icc", ["measure_theory", "measure"]], ["add", "theorem", "univ_pi_Ioi_ae_eq_Ici", ["measure_theory", "measure"]], ["add", "theorem", "univ_pi_Ioo_ae_eq_Icc", ["measure_theory", "measure"]]]}]}, {"timestamp": 1610359845, "sha": "b537cc08", "message": "feat(algebra/splitting_field): Restrict to splitting field (#5562)\nRestrict an alg_hom or alg_equiv to an is_splitting_field.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "def", "restict_is_splitting_field_hom", ["alg_equiv"]], ["add", "def", "restrict_is_splitting_field", ["alg_equiv"]], ["add", "theorem", "restrict_is_splitting_field_commutes", ["alg_equiv"]], ["add", "theorem", "restrict_is_splitting_field_trans", ["alg_equiv"]], ["add", "def", "restrict_is_splitting_field", ["alg_hom"]], ["add", "def", "restrict_is_splitting_field_aux", ["alg_hom"]], ["add", "theorem", "restrict_is_splitting_field_commutes", ["alg_hom"]], ["add", "theorem", "restrict_is_splitting_field_comp", ["alg_hom"]], ["add", "theorem", "range_to_alg_hom", ["is_splitting_field"]]]}]}, {"timestamp": 1610330391, "sha": "c112ad03", "message": "chore(scripts): update nolints.txt (#5699)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610318287, "sha": "08800bb7", "message": "feat(analysis/special/functions/trigonometric): complex trig and some even/odd lemmas (#5404)\nComplex (and some real) trigonometry lemmas, parity propositions, and some field algebra.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "div_add_one", []], ["add", "theorem", "div_add_same", []], ["add", "theorem", "div_sub_one", []], ["add", "theorem", "div_sub_same", []], ["add", "theorem", "one_add_div", []], ["add", "theorem", "one_sub_div", []], ["add", "theorem", "same_add_div", []], ["add", "theorem", "same_sub_div", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "eq_of_norm_sub_le_zero", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "exp_pi_mul_I", ["complex"]], ["add", "theorem", "sin_eq_zero_iff_cos_eq", ["complex"]], ["add", "theorem", "tan_add'", ["complex"]], ["add", "theorem", "tan_add", ["complex"]], ["add", "theorem", "tan_add_mul_I", ["complex"]], ["add", "theorem", "tan_eq", ["complex"]], ["add", "theorem", "tan_eq_zero_iff", ["complex"]], ["add", "theorem", "tan_int_mul_pi", ["complex"]], ["add", "theorem", "tan_int_mul_pi_div_two", ["complex"]], ["add", "theorem", "tan_ne_zero_iff", ["complex"]], ["add", "theorem", "tan_two_mul", ["complex"]], ["mod", "theorem", "pi_ne_zero", ["real"]], ["add", "theorem", "sin_ne_zero_iff", ["real"]], ["add", "theorem", "tan_add'", ["real"]], ["add", "theorem", "tan_add", ["real"]], ["add", "theorem", "tan_eq_zero_iff", ["real"]], ["add", "theorem", "tan_int_mul_pi", ["real"]], ["add", "theorem", "tan_int_mul_pi_div_two", ["real"]], ["add", "theorem", "tan_ne_zero_iff", ["real"]], ["add", "theorem", "tan_two_mul", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_add_mul_I", ["complex"]], ["add", "theorem", "cos_eq", ["complex"]], ["add", "theorem", "cos_mul_I", ["complex"]], ["add", "theorem", "sin_add_mul_I", ["complex"]], ["add", "theorem", "sin_eq", ["complex"]], ["add", "theorem", "sin_mul_I", ["complex"]], ["add", "theorem", "tan_mul_I", ["complex"]], ["add", "theorem", "tanh_mul_I", ["complex"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "theorem", "even_iff_not_odd", ["int"]], ["add", "theorem", "even_or_odd'", ["int"]], ["add", "theorem", "even_or_odd", ["int"]], ["add", "theorem", "even_xor_odd'", ["int"]], ["add", "theorem", "even_xor_odd", ["int"]], ["add", "theorem", "not_odd_iff", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "even_iff_not_odd", ["nat"]], ["add", "theorem", "even_or_odd'", ["nat"]], ["add", "theorem", "even_xor_odd'", ["nat"]], ["add", "theorem", "even_xor_odd", ["nat"]], ["add", "theorem", "not_odd_iff", ["nat"]]]}]}, {"timestamp": 1610305923, "sha": "cc6f039f", "message": "feat(equiv|set|topology): various additions (#5656)\ndefine sigma_compact_space\nupdate module doc for topology/subset_properties\ndefine shearing\nsome lemmas in set.basic, equiv.mul_add and topology.instances.ennreal", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "prod_shear", ["equiv"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "mul_left_symm_apply", ["equiv"]], ["add", "theorem", "mul_right_symm_apply", ["equiv"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "mk_preimage_prod", ["set"]], ["add", "theorem", "mk_preimage_prod_left_fn_eq_if", ["set"]], ["add", "theorem", "mk_preimage_prod_right_fn_eq_if", ["set"]], ["add", "theorem", "prod_preimage_left", ["set"]], ["add", "theorem", "prod_preimage_right", ["set"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "shear_mul_right_coe", ["homeomorph"]], ["add", "theorem", "shear_mul_right_symm_coe", ["homeomorph"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "supr_eq_zero", ["ennreal"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "Union_compact_covering", []], ["add", "def", "compact_covering", []], ["add", "theorem", "is_compact_compact_covering", []]]}]}, {"timestamp": 1610305921, "sha": "62c1912e", "message": "chore(measure_theory/set_integral): use weaker assumptions here and there (#5647)\n* use `ae_measurable f (μ.restrict s)` in more lemmas;\n* introduce `measurable_at_filter` and use it.", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "fderiv_integral", ["interval_integral"]], ["mod", "theorem", "fderiv_integral_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_at", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "exists_measurable_mem_of_lift'", ["filter", "eventually"]], ["mod", "theorem", "is_measurable", ["subsingleton"]], ["mod", "theorem", "measurable", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_inf_principal_eq_mk", ["ae_measurable"]], ["add", "theorem", "ae_mem_imp_eq_mk", ["ae_measurable"]], ["add", "theorem", "mono_set", ["ae_measurable"]], ["add", "theorem", "ae_measurable_zero", []], ["add", "theorem", "ae_imp_of_ae_restrict", ["measure_theory"]], ["add", "theorem", "ae_zero", ["measure_theory"]], ["add", "theorem", "le_ae_restrict", ["measure_theory"]], ["add", "theorem", "measure_inter_eq_zero_of_restrict", ["measure_theory", "measure"]], ["add", "theorem", "ae_measurable", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "measurable_at_filter_of_mem", ["ae_measurable"]], ["add", "theorem", "integrable_at_nhds_within", ["continuous_on"]], ["add", "theorem", "integral_sub_linear_is_o_ae", ["continuous_on"]], ["add", "theorem", "integral_sub_linear_is_o_ae", ["continuous_within_at"]], ["add", "theorem", "measurable_at_bot", []], ["add", "def", "measurable_at_filter", []], ["mod", "theorem", "integrable_at_filter", ["measure_theory", "measure", "finite_at_filter"]], ["mod", "theorem", "integrable_at_filter_of_tendsto", ["measure_theory", "measure", "finite_at_filter"]], ["mod", "theorem", "integrable_at_filter_of_tendsto_ae", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "set_integral_congr", ["measure_theory"]], ["add", "theorem", "set_integral_congr_ae", ["measure_theory"]]]}]}, {"timestamp": 1610301556, "sha": "3e7efd4e", "message": "feat(field_theory/separable): Remove hypothesis in irreducible.separable (#5687)\nAn irreducible polynomial is nonzero, so this hypothesis is unnecessary.", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}]}, {"timestamp": 1610301554, "sha": "b72811f2", "message": "feat(order/complete_well_founded): characterise well-foundedness for complete lattices (#5575)", "changes": [{"oldPath": null, "newPath": "src/order/complete_well_founded.lean", "changes": [["add", "theorem", "is_sup_closed_compact", ["complete_lattice", "is_Sup_finite_compact"]], ["add", "def", "is_Sup_finite_compact", ["complete_lattice"]], ["add", "theorem", "is_Sup_finite_compact_iff_is_sup_closed_compact", ["complete_lattice"]], ["add", "theorem", "well_founded", ["complete_lattice", "is_sup_closed_compact"]], ["add", "def", "is_sup_closed_compact", ["complete_lattice"]], ["add", "theorem", "is_sup_closed_compact_iff_well_founded", ["complete_lattice"]], ["add", "theorem", "is_Sup_finite_compact", ["complete_lattice", "well_founded"]], ["add", "theorem", "well_founded_characterisations", ["complete_lattice"]], ["add", "theorem", "well_founded_iff_is_Sup_finite_compact", ["complete_lattice"]]]}]}, {"timestamp": 1610290031, "sha": "0d9cb85e", "message": "chore(order/filter): a few more lemmas about `eventually` and set operations (#5686)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "inter_diff_self", ["set"]], ["mod", "theorem", "inter_union_compl", ["set"]], ["mod", "theorem", "inter_union_diff", ["set"]], ["mod", "theorem", "union_diff_left", ["set"]], ["mod", "theorem", "union_diff_right", ["set"]]]}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["add", "theorem", "mono", ["pairwise"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "compl", ["filter", "eventually_le"]], ["add", "theorem", "diff", ["filter", "eventually_le"]], ["add", "theorem", "inter", ["filter", "eventually_le"]], ["add", "theorem", "union", ["filter", "eventually_le"]]]}, {"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": [["add", "theorem", "countable_Inter", ["eventually_eq"]], ["add", "theorem", "countable_Union", ["eventually_eq"]], ["add", "theorem", "countable_bInter", ["eventually_eq"]], ["add", "theorem", "countable_bUnion", ["eventually_eq"]], ["add", "theorem", "countable_Inter", ["eventually_le"]], ["add", "theorem", "countable_Union", ["eventually_le"]], ["add", "theorem", "countable_bInter", ["eventually_le"]], ["add", "theorem", "countable_bUnion", ["eventually_le"]]]}]}, {"timestamp": 1610290029, "sha": "b0c35d12", "message": "chore(order/filter/basic): a few `simp` lemmas (#5685)\n### Changes in `order/filter/basic`\n* add `filter.inter_mem_sets_iff`;\n* rename `filter.Inter_mem_sets` to `filter.bInter_mem_sets`, make it\n an `iff` `[simp]` lemma;\n* add a version `filter.bInter_finset_mem_sets` with a protected alias\n `finset.Inter_mem_sets`;\n* rename `filter.sInter_mem_sets_of_finite` to\n `filter.sInter_mem_sets`, make it an `iff` `[simp]` lemma;\n* rename `filter.Inter_mem_sets_of_fintype` to\n `filter.Inter_mem_sets`, make it an `iff` `[simp]` lemma\n* add `eventually` versions of the `*Inter_mem_sets` lemmas.\n### New `@[mono]` attributes\n* `set.union_subset_union` and `set.inter_subset_inter` instead of\n `monotone_union` and `monotone_inter`; `mono*` failed to make a\n progress with `s ∩ t ⊆ s' ∩ t'` goal.\n* `set.image2_subset`\n* `closure_mono`", "changes": [{"oldPath": "src/dynamics/omega_limit.lean", "newPath": "src/dynamics/omega_limit.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "Inter_mem_sets", ["filter"]], ["del", "theorem", "Inter_mem_sets_of_fintype", ["filter"]], ["add", "theorem", "bInter_finset_mem_sets", ["filter"]], ["add", "theorem", "bInter_mem_sets", ["filter"]], ["add", "theorem", "eventually_all", ["filter"]], ["add", "theorem", "eventually_all_finite", ["filter"]], ["add", "theorem", "eventually_all_finset", ["filter"]], ["add", "theorem", "inter_mem_sets_iff", ["filter"]], ["add", "theorem", "sInter_mem_sets", ["filter"]], ["del", "theorem", "sInter_mem_sets_of_finite", ["filter"]]]}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "closure_mono", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1610269336, "sha": "1c4f2aec", "message": "feat(data/equiv/basic, logic/embedding): swap commutes with injective functions (#5636)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "swap_apply", ["function", "injective"]], ["add", "theorem", "swap_comp", ["function", "injective"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "swap_apply", ["function", "embedding"]], ["add", "theorem", "swap_comp", ["function", "embedding"]]]}]}, {"timestamp": 1610243873, "sha": "a28602a7", "message": "chore(scripts): update nolints.txt (#5682)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610211050, "sha": "f60c184e", "message": "feat(algebra/lie/basic): Lie ideal operations are linear spans (#5676)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "lie_ideal_oper_eq_linear_span", ["lie_submodule"]], ["add", "theorem", "lie_span_mono", ["lie_submodule"]], ["add", "theorem", "mem_coe", ["lie_submodule"]], ["add", "theorem", "submodule_span_le_lie_span", ["lie_submodule"]]]}]}, {"timestamp": 1610204766, "sha": "5faf34cc", "message": "feat(measure_theory/lp_space): add more lemmas about snorm (#5644)", "changes": [{"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "ae_eq_zero_of_snorm_eq_zero", ["ℒp_space"]], ["add", "theorem", "ae_eq", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "sub", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_congr_ae", ["ℒp_space"]], ["add", "theorem", "mem_ℒp_const", ["ℒp_space"]], ["add", "theorem", "mem_ℒp_const_of_ne_zero", ["ℒp_space"]], ["add", "theorem", "mem_ℒp_const_of_nonneg", ["ℒp_space"]], ["add", "theorem", "snorm_congr_ae", ["ℒp_space"]], ["add", "theorem", "snorm_const'", ["ℒp_space"]], ["add", "theorem", "snorm_const", ["ℒp_space"]], ["add", "theorem", "snorm_const_of_probability_measure", ["ℒp_space"]], ["add", "theorem", "snorm_const_smul", ["ℒp_space"]], ["mod", "theorem", "snorm_eq_zero_iff", ["ℒp_space"]], ["mod", "theorem", "snorm_eq_zero_of_ae_zero'", ["ℒp_space"]], ["mod", "theorem", "snorm_eq_zero_of_ae_zero", ["ℒp_space"]], ["add", "theorem", "snorm_exponent_zero", ["ℒp_space"]], ["add", "theorem", "snorm_zero'", ["ℒp_space"]], ["del", "theorem", "zero_mem_ℒp", ["ℒp_space"]], ["add", "theorem", "zero_mem_ℒp_of_nonneg", ["ℒp_space"]], ["add", "theorem", "zero_mem_ℒp_of_pos", ["ℒp_space"]]]}]}, {"timestamp": 1610195024, "sha": "fdec90ad", "message": "chore(data/set/lattice): add a few simp lemmas (#5671)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_eq_univ", ["set"]], ["mod", "theorem", "Inter_univ", ["set"]], ["mod", "theorem", "Union_empty", ["set"]], ["add", "theorem", "Union_eq_empty", ["set"]], ["add", "theorem", "of_sUnion", ["set", "nonempty"]], ["add", "theorem", "of_sUnion_eq_univ", ["set", "nonempty"]], ["add", "theorem", "nonempty_Union", ["set"]], ["add", "theorem", "nonempty_sUnion", ["set"]], ["add", "theorem", "sInter_eq_univ", ["set"]], ["add", "theorem", "sUnion_eq_empty", ["set"]]]}]}, {"timestamp": 1610195022, "sha": "3166f4ef", "message": "feat(topology/separation, topology/metric_space/basic): add lemmas on discrete subsets of a topological space (#5523)\nThese lemmas form part of a simplification of the proofs of #5361.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "exists_ball_inter_eq_singleton_of_mem_discrete", ["metric"]], ["add", "theorem", "exists_closed_ball_inter_eq_singleton_of_discrete", ["metric"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "disjoint_nhds_within_of_mem_discrete", []], ["add", "theorem", "exists_inter_eq_singleton_of_mem_discrete", ["filter", "has_basis"]], ["add", "theorem", "nhds_inter_eq_singleton_of_mem_discrete", []], ["add", "theorem", "nhds_within_of_mem_discrete", []], ["add", "theorem", "singleton_mem_nhds_within_of_mem_discrete", []]]}]}, {"timestamp": 1610188875, "sha": "a161256c", "message": "feat(topology/algebra/ordered): prove `tendsto.Icc` for pi-types (#5639)", "changes": [{"oldPath": "src/order/filter/interval.lean", "newPath": "src/order/filter/interval.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "lift'_infi_powerset", ["filter"]], ["add", "theorem", "tendsto_lift'", ["filter"]], ["add", "theorem", "tendsto_lift", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1610164482, "sha": "faf1a983", "message": "chore(scripts): update nolints.txt (#5673)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610152864, "sha": "12945004", "message": "feat(category_theory/limits): preserving pullbacks (#5668)\nThis touches multiple files but it's essentially the same thing as all my other PRs for preserving limits of special shapes - I can split it up if you'd like but hopefully this is alright?", "changes": [{"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/pullbacks.lean", "changes": [["add", "def", "is_limit_map_cone_pullback_cone_equiv", ["category_theory", "limits"]], ["add", "def", "is_limit_of_has_pullback_of_preserves_limit", ["category_theory", "limits"]], ["add", "def", "is_limit_of_is_limit_pullback_cone_map", ["category_theory", "limits"]], ["add", "def", "is_limit_pullback_cone_map_of_is_limit", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_pullback"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_pullback"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_pullback"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "map_lift_pullback_comparison", ["category_theory", "limits"]], ["add", "def", "pullback_comparison", ["category_theory", "limits"]], ["add", "theorem", "pullback_comparison_comp_fst", ["category_theory", "limits"]], ["add", "theorem", "pullback_comparison_comp_snd", ["category_theory", "limits"]], ["mod", "def", "mk", ["category_theory", "limits", "pullback_cone", "is_limit"]], ["add", "def", "pullback_is_pullback", ["category_theory", "limits"]], ["mod", "def", "mk", ["category_theory", "limits", "pushout_cocone", "is_colimit"]]]}]}, {"timestamp": 1610152861, "sha": "ce34ae6a", "message": "chore(linear_algebra/alternating): golf a proof (#5666)\n`sign_mul` seems to have been marked `simp` recently, making it not necessary to include in `simp` calls.", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1610152859, "sha": "0cd70d09", "message": "chore(algebra/group/hom): fix additive version of docstring (#5660)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}]}, {"timestamp": 1610141446, "sha": "2b5344f5", "message": "chore(analysis/special_functions/trigonometric): adding `@[pp_nodot]` to complex.log (#5670)\nAdded `@[pp_nodot]` to complex.log", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}]}, {"timestamp": 1610141444, "sha": "aab5994e", "message": "feat(data/finset/intervals, data/set/intervals/basic): intersection of finset.Ico, union of intervals for sets and finsets (#5410)", "changes": [{"oldPath": "src/data/finset/intervals.lean", "newPath": "src/data/finset/intervals.lean", "changes": [["add", "theorem", "coe_eq_Ico", ["finset", "Ico"]], ["add", "theorem", "inter", ["finset", "Ico"]], ["add", "theorem", "union'", ["finset", "Ico"]], ["add", "theorem", "union", ["finset", "Ico"]]]}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_union_Icc'", ["set"]], ["add", "theorem", "Icc_union_Icc", ["set"]], ["add", "theorem", "Icc_union_Ici'", ["set"]], ["add", "theorem", "Icc_union_Ici", ["set"]], ["add", "theorem", "Ico_union_Ici'", ["set"]], ["add", "theorem", "Ico_union_Ici", ["set"]], ["add", "theorem", "Ico_union_Ico'", ["set"]], ["add", "theorem", "Ico_union_Ico", ["set"]], ["add", "theorem", "Iic_union_Icc'", ["set"]], ["add", "theorem", "Iic_union_Icc", ["set"]], ["add", "theorem", "Iic_union_Ioc'", ["set"]], ["add", "theorem", "Iic_union_Ioc", ["set"]], ["add", "theorem", "Iio_union_Ico'", ["set"]], ["add", "theorem", "Iio_union_Ico", ["set"]], ["add", "theorem", "Iio_union_Ioo'", ["set"]], ["add", "theorem", "Iio_union_Ioo", ["set"]], ["add", "theorem", "Ioc_union_Ioc'", ["set"]], ["add", "theorem", "Ioc_union_Ioi'", ["set"]], ["add", "theorem", "Ioc_union_Ioi", ["set"]], ["add", "theorem", "Ioo_union_Ioi'", ["set"]], ["add", "theorem", "Ioo_union_Ioi", ["set"]], ["add", "theorem", "Ioo_union_Ioo'", ["set"]], ["add", "theorem", "Ioo_union_Ioo", ["set"]]]}]}, {"timestamp": 1610126588, "sha": "d935760d", "message": "feat(algebra/linear_ordered_comm_group_with_zero): Add linear_ordered_comm_monoid_with_zero and an instance for nat (#5645)\nThis generalizes a lot of statements about `linear_ordered_comm_group_with_zero` to `linear_ordered_comm_monoid_with_zero`.", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1610126586, "sha": "2bde21d1", "message": "feat(geometry/manifold/times_cont_mdiff): API for checking `times_cont_mdiff` (#5631)\nTwo families of lemmas:\n- to be `times_cont_mdiff`, it suffices to be `times_cont_mdiff` after postcomposition with any chart of the target\n- projection notation to go from `times_cont_diff` (in a vector space) to `times_cont_mdiff`", "changes": [{"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "smooth_iff_target", []], ["add", "theorem", "smooth_on_iff_target", []], ["add", "theorem", "smooth_within_at_iff_target", []], ["add", "theorem", "times_cont_mdiff", ["times_cont_diff"]], ["add", "theorem", "times_cont_mdiff_at", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_mdiff_on", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_mdiff_within_at", ["times_cont_diff_within_at"]], ["add", "theorem", "times_cont_mdiff_iff_target", []], ["add", "theorem", "times_cont_mdiff_on_iff_target", []], ["add", "theorem", "times_cont_mdiff_within_at_iff_target", []]]}]}, {"timestamp": 1610126583, "sha": "bd9b03f6", "message": "feat(category_theory/closed): Frobenius reciprocity of cartesian closed categories (#5624)\nA re-do of #4929. \nRe-defines the exponential comparison morphism (now as a natural transformation rather than a morphism with a naturality prop), and defines the Frobenius reciprocity morphism for an adjoint. In the case where the functor has a left adjoint, gives a sufficient condition for it to be cartesian closed, and a sufficient condition for a functor whose left adjoint preserves binary products to be cartesian closed (but doesn't show the necessity of this).\n- [x] depends on: #5623", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["del", "def", "exp_comparison", ["category_theory"]], ["del", "theorem", "exp_comparison_natural_left", ["category_theory"]], ["del", "theorem", "exp_comparison_natural_right", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/closed/functor.lean", "changes": [["add", "def", "cartesian_closed_functor_of_left_adjoint_preserves_binary_products", ["category_theory"]], ["add", "theorem", "coev_exp_comparison", ["category_theory"]], ["add", "def", "exp_comparison", ["category_theory"]], ["add", "theorem", "exp_comparison_ev", ["category_theory"]], ["add", "def", "exp_comparison_iso_of_frobenius_morphism_iso", ["category_theory"]], ["add", "theorem", "exp_comparison_whisker_left", ["category_theory"]], ["add", "def", "frobenius_morphism", ["category_theory"]], ["add", "def", "frobenius_morphism_iso_of_exp_comparison_iso", ["category_theory"]], ["add", "theorem", "frobenius_morphism_mate", ["category_theory"]], ["add", "theorem", "uncurry_exp_comparison", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}]}, {"timestamp": 1610122003, "sha": "0d7ca986", "message": "feat(measure_theory/measure_space): ae_measurable and measurable are equivalent for complete measures (#5643)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_measurable_iff_measurable", []], ["add", "theorem", "ae_eq", ["measurable"]]]}]}, {"timestamp": 1610115637, "sha": "9f066f1f", "message": "refactor(linear_algebra/alternating): Use unapplied maps when possible (#5648)\nNotably, this removes the need for a proof of `map_add` and `map_smul` in `def alternatization`, as the result is now already bundled with these proofs.\nThis also:\n* Replaces `equiv.perm.sign p` with `p.sign` for brevity\n* Makes `linear_map.comp_alternating_map` an `add_monoid_hom`", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "coe_dom_dom_congr", ["alternating_map"]], ["mod", "def", "comp_alternating_map", ["linear_map"]], ["add", "theorem", "alternatization_def", ["multilinear_map"]]]}]}, {"timestamp": 1610099241, "sha": "795d5ab6", "message": "chore(algebra/ordered_monoid): rename lemmas (#5657)\nI wanted to add the alias `pos_iff_ne_zero` for `zero_lt_iff_ne_zero`, but then I saw a note already in the library to do this renaming. So I went ahead.\n`le_zero_iff_eq` -> `nonpos_iff_eq_zero`\n`zero_lt_iff_ne_zero` -> `pos_iff_ne_zero`\n`le_one_iff_eq` -> `le_one_iff_eq_one`\n`measure.le_zero_iff_eq_zero'` -> `measure.nonpos_iff_eq_zero'`\nThere were various specific types that had their own custom `pos_iff_ne_zero`-lemma, which caused nameclashes. Therefore:\n* remove `nat.pos_iff_ne_zero`\n* Prove that `cardinal` forms a `canonically_ordered_semiring`, remove various special case lemmas\n* There were lemmas `cardinal.le_add_[left|right]`. Generalized them to arbitrary canonically_ordered_monoids and renamed them to `self_le_add_[left|right]` (to avoid name clashes)\n* I did not provide a canonically_ordered_monoid class for ordinal, since that requires quite some work (it's true, right?)\n* `protect` various lemmas in `cardinal` and `ordinal` to avoid name clashes.", "changes": [{"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/char_p/basic.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["del", "theorem", "le_one_iff_eq", []], ["add", "theorem", "le_one_iff_eq_one", []], ["mod", "theorem", "one_lt_iff_ne_one", []], ["add", "theorem", "self_le_mul_left", []], ["add", "theorem", "self_le_mul_right", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": []}, {"oldPath": "src/analysis/p_series.lean", "newPath": "src/analysis/p_series.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "pos_iff_ne_zero", ["nat"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": []}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/rat/sqrt.lean", "newPath": "src/data/rat/sqrt.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "theorem", "le_zero_iff_eq'", ["measure_theory", "measure"]], ["add", "theorem", "nonpos_iff_eq_zero'", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["del", "theorem", "add_le_add", ["cardinal"]], ["del", "theorem", "add_le_add_left", ["cardinal"]], ["del", "theorem", "add_le_add_right", ["cardinal"]], ["del", "theorem", "le_add_left", ["cardinal"]], ["del", "theorem", "le_add_right", ["cardinal"]], ["del", "theorem", "le_iff_exists_add", ["cardinal"]], ["del", "theorem", "le_zero", ["cardinal"]], ["del", "theorem", "mul_le_mul", ["cardinal"]], ["del", "theorem", "mul_le_mul_left", ["cardinal"]], ["del", "theorem", "mul_le_mul_right", ["cardinal"]], ["del", "theorem", "pos_iff_ne_zero", ["cardinal"]], ["del", "theorem", "zero_le", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/game/state.lean", "newPath": "src/set_theory/game/state.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "le_zero", ["ordinal"]], ["del", "theorem", "pos_iff_ne_zero", ["ordinal"]], ["del", "theorem", "zero_le", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "test/library_search/nat.lean", "newPath": "test/library_search/nat.lean", "changes": []}]}, {"timestamp": 1610092014, "sha": "611bc865", "message": "feat(measure_theory/borel_space): locally finite measure is sigma finite (#5634)\nI forgot to add this to #5604", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}]}, {"timestamp": 1610082817, "sha": "efdcab1a", "message": "refactor(algebra/module/basic): Clean up all the nat/int semimodule definitions (#5654)\nThese were named inconsistently, and lots of proof was duplicated.\nThe name changes are largely making the API for `nsmul` consistent with the one for `gsmul`:\n* For `ℕ`:\n * Replaces `nat.smul_def : n • x = n •ℕ x` with `nsmul_def : n •ℕ x = n • x`\n * Renames `semimodule.nsmul_eq_smul : n •ℕ b = (n : R) • b` to `nsmul_eq_smul_cast`\n * Removes `semimodule.smul_eq_smul : n • b = (n : R) • b`\n * Adds `nsmul_eq_smul : n •ℕ b = n • b` (this is different from `nsmul_def` as described in the docstring)\n * Renames the instances to be named more consistently and all live under `add_comm_monoid.nat_*`\n* For `ℤ`:\n * Renames `gsmul_eq_smul : n •ℤ x = n • x` to `gsmul_def`\n * Renames `module.gsmul_eq_smul : n •ℤ x = n • x` to `gsmul_eq_smul`\n * Renames `module.gsmul_eq_smul_cast` to `gsmul_eq_smul_cast`\n * Renames the instances to be named more consistently and all live under `add_comm_group.int_*`", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "def", "int_module", ["add_comm_group"]], ["mod", "def", "nat_semimodule", ["add_comm_monoid"]], ["mod", "theorem", "eq_zero_of_smul_two_eq_zero", []], ["add", "theorem", "gsmul_def", []], ["mod", "theorem", "gsmul_eq_smul", []], ["add", "theorem", "gsmul_eq_smul_cast", []], ["del", "theorem", "gsmul_eq_smul", ["module"]], ["del", "theorem", "gsmul_eq_smul_cast", ["module"]], ["del", "theorem", "smul_def", ["nat"]], ["add", "theorem", "nsmul_def", []], ["add", "theorem", "nsmul_eq_smul", []], ["add", "theorem", "nsmul_eq_smul_cast", []], ["del", "theorem", "nsmul_eq_smul", ["semimodule"]], ["del", "theorem", "smul_eq_smul", ["semimodule"]], ["mod", "theorem", "smul_nat_eq_zero", []]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}]}, {"timestamp": 1610076968, "sha": "d89464d2", "message": "feat(topology/algebra): add additive/multiplicative instances (#5662)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1610071516, "sha": "7500b242", "message": "chore(scripts): update nolints.txt (#5661)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1610071514, "sha": "4c3c8d78", "message": "feat(measure_theory): some additions (#5653)\nrename `exists_is_measurable_superset_of_measure_eq_zero` -> `exists_is_measurable_superset_of_null`\nmake `measure.prod` and `measure.pi` irreducible", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_div", ["ennreal"]], ["add", "theorem", "measurable_inv", ["ennreal"]], ["mod", "def", "to_measurable_equiv", ["homeomorph"]], ["add", "theorem", "to_measurable_equiv_coe", ["homeomorph"]], ["add", "theorem", "to_measurable_equiv_symm_coe", ["homeomorph"]], ["add", "theorem", "ennreal_div", ["measurable"]], ["add", "theorem", "ennreal_inv", ["measurable"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_lintegral_mul", ["measure_theory"]], ["add", "theorem", "lintegral_one", ["measure_theory"]], ["add", "theorem", "set_lintegral_const", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "self_comp_symm", ["measurable_equiv"]], ["add", "theorem", "symm_comp_self", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "theorem", "exists_is_measurable_superset_of_measure_eq_zero", ["measure_theory"]], ["add", "theorem", "exists_is_measurable_superset_of_null", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["add", "theorem", "lintegral_prod_mul", ["measure_theory"]]]}]}, {"timestamp": 1610061127, "sha": "33a86cff", "message": "chore(data/list/basic): tag mmap(') with simp (#5443)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}]}, {"timestamp": 1610055828, "sha": "18ba69b7", "message": "feat(category_theory/sites): category of sheaves on the trivial topology (#5651)\nShows that the category of sheaves on the trivial topology is just the category of presheaves.", "changes": [{"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["add", "def", "SheafOfTypes_bot_equiv", ["category_theory"]], ["add", "theorem", "is_sheaf_bot", ["category_theory", "presieve"]]]}]}, {"timestamp": 1610055826, "sha": "3c5d5c51", "message": "feat(category_theory/monad): reflector preserves terminal object (#5649)", "changes": [{"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}]}, {"timestamp": 1610055824, "sha": "a30c39e0", "message": "feat(measure_theory/borel_space): a compact set has finite measure (#5628)", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measure_lt_top", ["is_compact"]], ["add", "theorem", "measure_lt_top_of_nhds_within", ["is_compact"]]]}]}, {"timestamp": 1610055821, "sha": "4da83134", "message": "feat(category_theory/closed): golf definition and proofs (#5623)\nUsing the new mates framework, simplify the definition of `pre` and shorten proofs about it. \nTo be more specific,\n- `pre` is now explicitly a natural transformation, rather than indexed morphisms with a naturality property\n- The new definition of `pre` means things like `pre_map` which I complained about before are easier to prove, and `pre_post_comm` is automatic\n- There are now more lemmas relating `pre` to `coev`, `ev` and `uncurry`: `uncurry_pre` in particular was a hole in the API.\n- `internal_hom` has a shorter construction. In particular I changed the type to `Cᵒᵖ ⥤ C ⥤ C`, which I think is better since the usual external hom functor is given as `Cᵒᵖ ⥤ C ⥤ Type*`, so this is consistent with that. \nIn a subsequent PR I'll do the same for `exp_comparison`, but that's a bigger change with improved API so they're separate for now.", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["add", "theorem", "coev_app_comp_pre_app", ["category_theory"]], ["add", "theorem", "exp_adjunction_counit", ["category_theory"]], ["add", "theorem", "exp_adjunction_unit", ["category_theory"]], ["mod", "def", "internal_hom", ["category_theory"]], ["mod", "def", "pre", ["category_theory"]], ["mod", "theorem", "pre_id", ["category_theory"]], ["mod", "theorem", "pre_map", ["category_theory"]], ["del", "theorem", "pre_post_comm", ["category_theory"]], ["add", "theorem", "prod_map_pre_app_comp_ev", ["category_theory"]], ["add", "theorem", "uncurry_pre", ["category_theory"]]]}]}, {"timestamp": 1610055819, "sha": "fdbcab6a", "message": "feat(category_theory/limits): the product comparison natural transformation (#5621)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "prod_comparison_nat_iso", ["category_theory", "limits"]], ["add", "def", "prod_comparison_nat_trans", ["category_theory", "limits"]]]}]}, {"timestamp": 1610046732, "sha": "2894260b", "message": "feat(group_theory): add lemmas on solvability (#5646)\nProves some basic lemmas about solvable groups: the subgroup of a solvable group is solvable, a quotient of a solvable group is solvable.", "changes": [{"oldPath": "src/group_theory/solvable.lean", "newPath": "src/group_theory/solvable.lean", "changes": [["add", "theorem", "commutator_le_map_commutator", []], ["add", "theorem", "derived_series_le_map_derived_series", []], ["add", "theorem", "is_solvable_def", []], ["add", "theorem", "is_solvable_of_top_eq_bot", []], ["add", "theorem", "map_commutator_eq_commutator_map", []], ["add", "theorem", "map_derived_series_eq", []], ["add", "theorem", "map_derived_series_le_derived_series", []], ["add", "theorem", "solvable_of_solvable_injective", []], ["add", "theorem", "solvable_of_surjective", []]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "map_eq_bot_iff", ["subgroup"]]]}]}, {"timestamp": 1610024967, "sha": "66e02b35", "message": "feat(docs/100): Add Masdeu's formalisation of Euler's Summation to 100.yaml (#5655)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1610024965, "sha": "7bc2e9ef", "message": "feat(ring_theory/polynomial/cyclotomic): add cyclotomic.irreducible (#5642)\nI proved irreducibility of cyclotomic polynomials, showing that `cyclotomic n Z` is the minimal polynomial of any primitive root of unity.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "eq_of_monic_of_dvd_of_nat_degree_le", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "irreducible", ["cyclotomic"]], ["add", "theorem", "minimal_polynomial_primitive_root_dvd_cyclotomic", []], ["add", "theorem", "minimal_polynomial_primitive_root_eq_cyclotomic", []], ["add", "theorem", "is_root_cyclotomic", ["polynomial"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1610024963, "sha": "b9da50ad", "message": "feat(ring_theory/*): Various lemmas used to prove classical nullstellensatz (#5632)", "changes": [{"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["add", "theorem", "quotient_mk_comp_C_injective", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["mod", "theorem", "radical_idem", ["ideal"]], ["add", "theorem", "bot_maximal_iff", ["ideal", "ring_equiv"]]]}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["mod", "theorem", "eq_jacobson_iff_Inf_maximal'", ["ideal"]], ["mod", "theorem", "eq_jacobson_iff_Inf_maximal", ["ideal"]], ["mod", "theorem", "eq_jacobson_iff_not_mem", ["ideal"]], ["mod", "theorem", "eq_radical_of_eq_jacobson", ["ideal"]], ["mod", "theorem", "jacobson_eq_bot", ["ideal"]], ["mod", "theorem", "jacobson_eq_iff_jacobson_quotient_eq_bot", ["ideal"]], ["mod", "theorem", "jacobson_eq_self_of_is_maximal", ["ideal"]], ["mod", "theorem", "jacobson_eq_top_iff", ["ideal"]], ["add", "theorem", "jacobson_idem", ["ideal"]], ["add", "theorem", "jacobson_radical_eq_jacobson", ["ideal"]], ["mod", "theorem", "le_jacobson", ["ideal"]], ["mod", "theorem", "map_jacobson_of_bijective", ["ideal"]], ["mod", "theorem", "map_jacobson_of_surjective", ["ideal"]], ["mod", "theorem", "mem_jacobson_iff", ["ideal"]], ["mod", "theorem", "radical_eq_jacobson_iff_radical_quotient_eq_jacobson_bot", ["ideal"]], ["mod", "theorem", "radical_le_jacobson", ["ideal"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "map_mv_polynomial_eq_eval₂", ["mv_polynomial"]]]}]}, {"timestamp": 1610024961, "sha": "3aea2845", "message": "feat(analysis/normed_space): affine map with findim domain is continuous (#5627)", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "continuous_linear_iff", ["affine_map"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "dist_eq_norm'", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "continuous_of_finite_dimensional", ["affine_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "apply_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1610024958, "sha": "833e9a04", "message": "chore(analysis/calculus): add `of_mem_nhds` versions of 2 lemmas (#5626)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_within_of_mem_nhds", []]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "unique_diff_within_at_of_mem_nhds", []]]}]}, {"timestamp": 1610024956, "sha": "e14d5eba", "message": "feat(category_theory/limits): prod map is iso if components are (#5620)\nShow that if `f` and `g` are iso, then `prod.map f g` is an iso, and the dual.", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}]}, {"timestamp": 1610024954, "sha": "87ef7aff", "message": "feat(linear_algebra/pi_tensor_product): define the tensor product of an indexed family of semimodules (#5311)\nThis PR defines the tensor product of an indexed family `s : ι → Type*` of semimodules over commutative semirings. We denote this space by `⨂[R] i, s i` and define it as `free_add_monoid (R × Π i, s i)` quotiented by the appropriate equivalence relation. The treatment follows very closely that of the binary tensor product in `linear_algebra/tensor_product.lean`.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/pi_tensor_product.lean", "changes": [["add", "theorem", "add_tprod_coeff'", ["pi_tensor_product"]], ["add", "theorem", "add_tprod_coeff", ["pi_tensor_product"]], ["add", "inductive", "eqv", ["pi_tensor_product"]], ["add", "theorem", "ext", ["pi_tensor_product"]], ["add", "theorem", "tprod", ["pi_tensor_product", "lift"]], ["add", "theorem", "unique'", ["pi_tensor_product", "lift"]], ["add", "theorem", "unique", ["pi_tensor_product", "lift"]], ["add", "def", "lift", ["pi_tensor_product"]], ["add", "def", "lift_add_hom", ["pi_tensor_product"]], ["add", "theorem", "smul", ["pi_tensor_product", "lift_aux"]], ["add", "def", "lift_aux", ["pi_tensor_product"]], ["add", "theorem", "lift_aux_tprod", ["pi_tensor_product"]], ["add", "theorem", "lift_aux_tprod_coeff", ["pi_tensor_product"]], ["add", "theorem", "lift_tprod", ["pi_tensor_product"]], ["add", "theorem", "smul_tprod_coeff'", ["pi_tensor_product"]], ["add", "theorem", "smul_tprod_coeff", ["pi_tensor_product"]], ["add", "theorem", "smul_tprod_coeff_aux", ["pi_tensor_product"]], ["add", "def", "tprod", ["pi_tensor_product"]], ["add", "def", "tprod_coeff", ["pi_tensor_product"]], ["add", "theorem", "tprod_coeff_eq_smul_tprod", ["pi_tensor_product"]], ["add", "theorem", "zero_tprod_coeff'", ["pi_tensor_product"]], ["add", "theorem", "zero_tprod_coeff", ["pi_tensor_product"]], ["add", "def", "pi_tensor_product", []]]}]}, {"timestamp": 1610013938, "sha": "47c60812", "message": "chore(group_theory/perm/sign): remove classical for sign congr simp lemmas (#5622)\nPreviously, some lemmas about how `perm.sign` simplifies across various congrs of permutations assumed `classical`, which prevented them from being applied by the simplifier. This makes the `decidable_eq` assumptions explicit.", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["mod", "theorem", "sign_perm_congr", ["equiv", "perm"]], ["mod", "theorem", "sign_prod_congr_left", ["equiv", "perm"]], ["mod", "theorem", "sign_prod_congr_right", ["equiv", "perm"]], ["mod", "theorem", "sign_prod_extend_right", ["equiv", "perm"]], ["mod", "theorem", "sign_sum_congr", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1610013935, "sha": "9dd1496a", "message": "chore(group_theory/perm/basic): Add some missing simp lemmas (#5614)\n`simp` can't find the appropriate `equiv` lemmas as they are about `refl` not `1`, even though those are defeq.", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "inv_trans", ["equiv", "perm"]], ["add", "theorem", "mul_refl", ["equiv", "perm"]], ["add", "theorem", "mul_symm", ["equiv", "perm"]], ["add", "theorem", "one_symm", ["equiv", "perm"]], ["add", "theorem", "one_trans", ["equiv", "perm"]], ["add", "theorem", "refl_inv", ["equiv", "perm"]], ["add", "theorem", "refl_mul", ["equiv", "perm"]], ["add", "theorem", "symm_mul", ["equiv", "perm"]], ["add", "theorem", "trans_inv", ["equiv", "perm"]], ["add", "theorem", "trans_one", ["equiv", "perm"]]]}]}, {"timestamp": 1610013933, "sha": "24572870", "message": "feat(algebra/subalgebra): Restrict injective algebra homomorphism to algebra isomorphism (#5560)\nThe domain of an injective algebra homomorphism is isomorphic to its range.", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "of_injective_apply", ["alg_hom", "alg_equiv"]]]}]}, {"timestamp": 1610013931, "sha": "2c8175fa", "message": "feat(algebra/algebra/ordered): ordered algebras (#4683)\nAn ordered algebra is an ordered semiring, which is an algebra over an ordered commutative semiring,\nfor which scalar multiplication is \"compatible\" with the two orders.", "changes": [{"oldPath": null, "newPath": "src/algebra/algebra/ordered.lean", "changes": [["add", "theorem", "algebra_map_monotone", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "subset", ["concave_on"]], ["mod", "theorem", "mem_Icc", ["convex"]]]}]}, {"timestamp": 1610009514, "sha": "95c70870", "message": "chore(docs/100.yaml): Freek No. 15 (#5638)\nI've updated docs/100.yaml to reflect the fact that both FTC-1 and FTC-2 have been added to mathlib.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}]}, {"timestamp": 1609998439, "sha": "a32e2236", "message": "refactor(analysis/special_functions/trigonometric): redefine arcsin and arctan (#5300)\nRedefine `arcsin` and `arctan` using `order_iso`, and prove that both of them are infinitely smooth.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff_at_symm_deriv", ["local_homeomorph"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "times_cont_diff_at_tan", ["complex"]], ["add", "theorem", "fderiv_arctan", []], ["add", "theorem", "fderiv_within_arctan", []], ["add", "theorem", "arctan", ["has_fderiv_at"]], ["add", "theorem", "arctan", ["has_fderiv_within_at"]], ["add", "theorem", "arctan", ["measurable"]], ["del", "theorem", "abs_div_sqrt_one_add_lt", ["real"]], ["add", "theorem", "arccos_eq_pi", ["real"]], ["add", "theorem", "arccos_eq_pi_div_two", ["real"]], ["add", "theorem", "arccos_eq_zero", ["real"]], ["mod", "theorem", "arccos_inj", ["real"]], ["add", "theorem", "arccos_inj_on", ["real"]], ["add", "theorem", "arcsin_eq_iff_eq_sin", ["real"]], ["add", "theorem", "arcsin_eq_neg_pi_div_two", ["real"]], ["add", "theorem", "arcsin_eq_of_sin_eq", ["real"]], ["add", "theorem", "arcsin_eq_pi_div_two", ["real"]], ["mod", "theorem", "arcsin_eq_zero_iff", ["real"]], ["mod", "theorem", "arcsin_inj", ["real"]], ["add", "theorem", "arcsin_le_iff_le_sin'", ["real"]], ["add", "theorem", "arcsin_le_iff_le_sin", ["real"]], ["add", "theorem", "arcsin_le_neg_pi_div_two", ["real"]], ["mod", "theorem", "arcsin_le_pi_div_two", ["real"]], ["add", "theorem", "arcsin_lt_iff_lt_sin'", ["real"]], ["add", "theorem", "arcsin_lt_iff_lt_sin", ["real"]], ["add", "theorem", "arcsin_lt_pi_div_two", ["real"]], ["add", "theorem", "arcsin_lt_zero", ["real"]], ["add", "theorem", "arcsin_mem_Icc", ["real"]], ["mod", "theorem", "arcsin_neg_one", ["real"]], ["mod", "theorem", "arcsin_nonneg", ["real"]], ["mod", "theorem", "arcsin_nonpos", ["real"]], ["add", "theorem", "arcsin_of_le_neg_one", ["real"]], ["add", "theorem", "arcsin_of_one_le", ["real"]], ["mod", "theorem", "arcsin_pos", ["real"]], ["add", "theorem", "arcsin_proj_Icc", ["real"]], ["add", "theorem", "arcsin_sin'", ["real"]], ["add", "theorem", "arctan_eq_arcsin", ["real"]], ["add", "theorem", "arctan_eq_of_tan_eq", ["real"]], ["add", "theorem", "coe_sin_order_iso_apply", ["real"]], ["add", "theorem", "coe_tan_local_homeomorph", ["real"]], ["add", "theorem", "coe_tan_local_homeomorph_symm", ["real"]], ["add", "theorem", "continuous_arccos", ["real"]], ["add", "theorem", "continuous_arcsin", ["real"]], ["add", "theorem", "continuous_at_arcsin", ["real"]], ["add", "theorem", "continuous_at_arctan", ["real"]], ["add", "theorem", "cos_arctan_pos", ["real"]], ["add", "theorem", "cos_sq_arctan", ["real"]], ["add", "theorem", "deriv_arccos", ["real"]], ["add", "theorem", "deriv_arcsin", ["real"]], ["add", "theorem", "deriv_arcsin_aux", ["real"]], ["add", "theorem", "differentiable_arctan", ["real"]], ["add", "theorem", "differentiable_at_arccos", ["real"]], ["add", "theorem", "differentiable_at_arcsin", ["real"]], ["add", "theorem", "differentiable_on_arccos", ["real"]], ["add", "theorem", "differentiable_on_arcsin", ["real"]], ["add", "theorem", "differentiable_within_at_arccos_Ici", ["real"]], ["add", "theorem", "differentiable_within_at_arccos_Iic", ["real"]], ["add", "theorem", "differentiable_within_at_arcsin_Ici", ["real"]], ["add", "theorem", "differentiable_within_at_arcsin_Iic", ["real"]], ["del", "theorem", "div_sqrt_one_add_lt_one", ["real"]], ["add", "theorem", "has_deriv_at_arccos", ["real"]], ["add", "theorem", "has_deriv_at_arcsin", ["real"]], ["add", "theorem", "has_deriv_within_at_arccos_Ici", ["real"]], ["add", "theorem", "has_deriv_within_at_arccos_Iic", ["real"]], ["add", "theorem", "has_deriv_within_at_arcsin_Ici", ["real"]], ["add", "theorem", "has_deriv_within_at_arcsin_Iic", ["real"]], ["add", "theorem", "image_tan_Ioo", ["real"]], ["add", "theorem", "inj_on_arcsin", ["real"]], ["add", "theorem", "inj_on_tan", ["real"]], ["add", "theorem", "le_arcsin_iff_sin_le'", ["real"]], ["add", "theorem", "le_arcsin_iff_sin_le", ["real"]], ["add", "theorem", "lt_arcsin_iff_sin_lt'", ["real"]], ["add", "theorem", "lt_arcsin_iff_sin_lt", ["real"]], ["add", "theorem", "maps_to_sin_Ioo", ["real"]], ["add", "theorem", "measurable_arccos", ["real"]], ["add", "theorem", "measurable_arcsin", ["real"]], ["add", "theorem", "measurable_arctan", ["real"]], ["add", "theorem", "monotone_arcsin", ["real"]], ["del", "theorem", "neg_one_lt_div_sqrt_one_add", ["real"]], ["add", "theorem", "neg_pi_div_two_eq_arcsin", ["real"]], ["mod", "theorem", "neg_pi_div_two_le_arcsin", ["real"]], ["add", "theorem", "neg_pi_div_two_lt_arcsin", ["real"]], ["add", "theorem", "pi_div_two_eq_arcsin", ["real"]], ["add", "theorem", "pi_div_two_le_arcsin", ["real"]], ["add", "theorem", "range_arcsin", ["real"]], ["add", "theorem", "sin_arcsin'", ["real"]], ["add", "def", "sin_local_homeomorph", ["real"]], ["add", "def", "sin_order_iso", ["real"]], ["add", "theorem", "sin_order_iso_apply", ["real"]], ["add", "theorem", "strict_mono_decr_on_arccos", ["real"]], ["add", "theorem", "strict_mono_incr_on_arcsin", ["real"]], ["add", "theorem", "strict_mono_incr_on_tan", ["real"]], ["add", "theorem", "surj_on_tan", ["real"]], ["mod", "theorem", "tan_arctan", ["real"]], ["del", "def", "tan_homeomorph", ["real"]], ["del", "theorem", "tan_homeomorph_inv_fun_eq_arctan", ["real"]], ["add", "def", "tan_local_homeomorph", ["real"]], ["mod", "theorem", "tan_lt_tan_of_nonneg_of_lt_pi_div_two", ["real"]], ["mod", "theorem", "tan_nonpos_of_nonpos_of_neg_pi_div_two_le", ["real"]], ["add", "def", "tan_order_iso", ["real"]], ["add", "theorem", "times_cont_diff_arctan", ["real"]], ["add", "theorem", "times_cont_diff_at_arccos", ["real"]], ["add", "theorem", "times_cont_diff_at_arccos_iff", ["real"]], ["add", "theorem", "times_cont_diff_at_arcsin", ["real"]], ["add", "theorem", "times_cont_diff_at_arcsin_iff", ["real"]], ["add", "theorem", "times_cont_diff_at_tan", ["real"]], ["add", "theorem", "times_cont_diff_on_arccos", ["real"]], ["add", "theorem", "times_cont_diff_on_arcsin", ["real"]], ["add", "theorem", "zero_eq_arcsin_iff", ["real"]], ["add", "theorem", "arctan", ["times_cont_diff"]], ["add", "theorem", "arctan", ["times_cont_diff_at"]], ["add", "theorem", "arctan", ["times_cont_diff_on"]], ["add", "theorem", "arctan", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "coe_eq_iff", ["subtype"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["mod", "theorem", "angle_eq_pi_iff", ["inner_product_geometry"]], ["mod", "theorem", "angle_eq_zero_iff", ["inner_product_geometry"]]]}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["del", "theorem", "coe_homeomorph_of_strict_mono_continuous", []], ["del", "theorem", "coe_homeomorph_of_strict_mono_continuous_Ioo", []]]}]}, {"timestamp": 1609986523, "sha": "3f359612", "message": "chore(scripts): update nolints.txt (#5652)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1609975424, "sha": "f668be05", "message": "feat(data/list/zip): parameterize zip_append more generally (#5650)\nzip_append should only require that each pair of lists is of the same type", "changes": [{"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["mod", "theorem", "zip_append", ["list"]]]}]}, {"timestamp": 1609950062, "sha": "f4128dc4", "message": "chore(ring_theory/ideal/basic): Make an argument to mul_mem_{left,right} explicit (#5611)\nBefore this change, the lemmas with result `a * b ∈ I` did not have enough explicit arguments to determine both `a` and `b`, such as `I.mul_mem_left hb`.\nThis resulted in callers using `show`, `@`, or sometimes ignoring the API and using `smul_mem` which does have appropriate argument explicitness. These callers have been cleaned up accordingly.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "theorem", "mul_mem_left", ["ideal"]], ["mod", "theorem", "mul_mem_right", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/prod.lean", "newPath": "src/ring_theory/ideal/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1609950060, "sha": "91fcb480", "message": "feat(linear_algebra/tensor_product,algebra/module/linear_map): Made tmul_smul and map_smul_of_tower work for int over semirings (#5430)\nWith this change, ` ∀ (f : M →ₗ[S] M₂) (z : int) (x : M), f (z • x) = z • f x` can be proved with `linear_map.map_smul_of_tower` even when `S` is a semiring, and `z • (m ⊗ₜ n : M ⊗[S] N) = (r • m) ⊗ₜ n` can be proved with `tmul_smul`.", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["mod", "theorem", "map_smul_of_tower", ["linear_map"]], ["mod", "def", "restrict_scalars", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "theorem", "smul_tmul'", ["tensor_product"]], ["mod", "theorem", "smul_tmul", ["tensor_product"]], ["mod", "theorem", "tmul_smul", ["tensor_product"]]]}]}, {"timestamp": 1609941266, "sha": "eeb194dc", "message": "feat(analysis/normed_space/inner_product): facts about the span of a single vector, mostly in inner product spaces (#5589)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "findim_orthogonal_span_singleton", []], ["add", "theorem", "inner_left_of_mem_orthogonal_singleton", []], ["add", "theorem", "inner_right_of_mem_orthogonal_singleton", []], ["add", "theorem", "orthogonal_projection_bot", []], ["add", "theorem", "orthogonal_projection_orthogonal_complement_singleton_eq_zero", []], ["add", "theorem", "orthogonal_projection_singleton", []], ["add", "theorem", "orthogonal_projection_unit_singleton", []], ["add", "theorem", "smul_orthogonal_projection_singleton", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_zero_singleton", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "findim_span_singleton", []]]}]}, {"timestamp": 1609931054, "sha": "186ad763", "message": "feat(ring_theory/finiteness): add finitely presented algebra (#5407)\nThis PR contains the definition of a finitely presented algebra and some very basic results. A lot of other fundamental results are missing (stability under composition, equivalence with finite type for noetherian rings ecc): I am ready to work on them, but I wanted some feedback. Feel free to convert to WIP if you think it's better to wait.", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "def", "pempty_alg_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "of_finitely_presented", ["algebra", "finite_type"]], ["add", "theorem", "equiv", ["algebra", "finitely_presented"]], ["add", "theorem", "mv_polynomial", ["algebra", "finitely_presented"]], ["add", "theorem", "self", ["algebra", "finitely_presented"]], ["add", "def", "finitely_presented", ["algebra"]]]}]}, {"timestamp": 1609931052, "sha": "35ff0434", "message": "feat(ring_theory/fractional_ideal): move inv to dedekind_domain (#5053)\nRemove all instances of `inv` and I^{-1}. The notation (1 / I) is the one used for the old I^{-1}.", "changes": [{"oldPath": "src/ring_theory/dedekind_domain.lean", "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "theorem", "coe_inv_of_nonzero", []], ["add", "theorem", "inv_eq", []], ["add", "theorem", "inv_nonzero", []], ["add", "theorem", "inv_zero'", []], ["add", "theorem", "invertible_iff_generator_nonzero", []], ["add", "theorem", "invertible_of_principal", []], ["add", "theorem", "is_principal_inv", []], ["add", "theorem", "map_inv", []], ["add", "theorem", "mul_generator_self_inv", []], ["add", "theorem", "mul_inv_cancel_iff", []], ["add", "theorem", "right_inverse_eq", []], ["add", "theorem", "span_singleton_inv", []]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["del", "theorem", "coe_inv_of_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "div_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "eq_one_div_of_mul_eq_one", ["ring", "fractional_ideal"]], ["del", "theorem", "inv_eq", ["ring", "fractional_ideal"]], ["del", "theorem", "inv_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "inv_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "invertible_iff_generator_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "invertible_of_principal", ["ring", "fractional_ideal"]], ["mod", "theorem", "is_noetherian", ["ring", "fractional_ideal"]], ["add", "theorem", "is_noetherian_span_singleton_inv_to_map_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "is_noetherian_span_singleton_to_map_inv_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "is_principal_inv", ["ring", "fractional_ideal"]], ["del", "theorem", "map_inv", ["ring", "fractional_ideal"]], ["add", "theorem", "map_one_div", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_div_self_cancel_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_generator_self_inv", ["ring", "fractional_ideal"]], ["del", "theorem", "mul_inv_cancel_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "right_inverse_eq", ["ring", "fractional_ideal"]], ["del", "theorem", "span_singleton_inv", ["ring", "fractional_ideal"]]]}]}, {"timestamp": 1609931048, "sha": "1db70a89", "message": "feat(computability/regular_expressions): define regular expressions (#5036)\nVery basic definitions for regular expressions", "changes": [{"oldPath": null, "newPath": "src/computability/regular_expressions.lean", "changes": [["add", "theorem", "add_rmatch_iff", ["regular_expression"]], ["add", "theorem", "char_rmatch_iff", ["regular_expression"]], ["add", "theorem", "comp_def", ["regular_expression"]], ["add", "def", "deriv", ["regular_expression"]], ["add", "def", "match_epsilon", ["regular_expression"]], ["add", "def", "matches", ["regular_expression"]], ["add", "theorem", "matches_add_def", ["regular_expression"]], ["add", "theorem", "matches_epsilon_def", ["regular_expression"]], ["add", "theorem", "matches_mul_def", ["regular_expression"]], ["add", "theorem", "matches_star_def", ["regular_expression"]], ["add", "theorem", "matches_zero_def", ["regular_expression"]], ["add", "theorem", "mul_rmatch_iff", ["regular_expression"]], ["add", "theorem", "one_def", ["regular_expression"]], ["add", "theorem", "one_rmatch_iff", ["regular_expression"]], ["add", "theorem", "plus_def", ["regular_expression"]], ["add", "def", "rmatch", ["regular_expression"]], ["add", "theorem", "rmatch_iff_matches", ["regular_expression"]], ["add", "theorem", "star_rmatch_iff", ["regular_expression"]], ["add", "theorem", "zero_def", ["regular_expression"]], ["add", "theorem", "zero_rmatch", ["regular_expression"]], ["add", "inductive", "regular_expression", []]]}]}, {"timestamp": 1609931044, "sha": "137a6e0f", "message": "feat(tactic/rewrite_search): Automatically searching for chains of rewrites (#4841)\nThis pull request is based on a branch originally developed by @semorrison , @khoek , and @jcommelin . The idea of rewrite_search is a tactic that will search through chains of potential rewrites to prove the goal, when the goal is an equality or iff statement. There are three key components: `discovery.lean` finds a bunch of rules that can be used to generate rewrites, `search.lean` runs a breadth-first-search algorithm on the two sides of the quality to find a path that connects them, and `explain.lean` generates Lean code from the resulting proof, so that you can replace the call to `rewrite_search` with the explicit steps for it.\nI removed some functionality from the rewrite_search branch and simplified the data structures somewhat in order to get this pull request small enough to be reviewed. If there is functionality from that branch that people particularly wanted, let me know and I can either include it in this PR or in a subsequent one. In particular, most of the configuration options are omitted.\nFor data structures, the whole `table` data structure is gone, replaced by a `buffer` and `rb_map` for efficient lookup. Write access to the buffer is also append-only for efficiency. This seems to be a lot faster, although I haven't created specific performance benchmarks.", "changes": [{"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/meta/expr_lens.lean", "newPath": "src/meta/expr_lens.lean", "changes": []}, {"oldPath": "src/tactic/nth_rewrite/congr.lean", "newPath": "src/tactic/nth_rewrite/congr.lean", "changes": []}, {"oldPath": "src/tactic/nth_rewrite/default.lean", "newPath": "src/tactic/nth_rewrite/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rewrite_search/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rewrite_search/discovery.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rewrite_search/explain.lean", "changes": [["add", "def", "get", ["tactic", "rewrite_search", "dir_pair"]], ["add", "def", "set", ["tactic", "rewrite_search", "dir_pair"]], ["add", "def", "to_list", ["tactic", "rewrite_search", "dir_pair"]], ["add", "def", "to_string", ["tactic", "rewrite_search", "dir_pair"]], ["add", "structure", "dir_pair", ["tactic", "rewrite_search"]], ["add", "inductive", "app_addr", ["tactic", "rewrite_search", "using_conv"]], ["add", "inductive", "splice_result", ["tactic", "rewrite_search", "using_conv"]]]}, {"oldPath": null, "newPath": "src/tactic/rewrite_search/frontend.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rewrite_search/search.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rewrite_search/types.lean", "changes": [["add", "def", "to_xhs", ["tactic", "rewrite_search", "side"]], ["add", "inductive", "side", ["tactic", "rewrite_search"]]]}, {"oldPath": null, "newPath": "test/rewrite_search/rewrite_search.lean", "changes": [["add", "def", "idf", ["tactic", "rewrite_search", "testing"]], ["add", "theorem", "test_algebra", ["tactic", "rewrite_search", "testing"]], ["add", "theorem", "test_linear_path", ["tactic", "rewrite_search", "testing"]], ["add", "theorem", "test_pathfinding", ["tactic", "rewrite_search", "testing"]], ["add", "theorem", "test_pp_1", ["tactic", "rewrite_search", "testing"]], ["add", "theorem", "test_pp_2", ["tactic", "rewrite_search", "testing"]], ["add", "theorem", "test_simpler_algebra", ["tactic", "rewrite_search", "testing"]]]}]}, {"timestamp": 1609921832, "sha": "062f2443", "message": "feat(category_theory/monad): generalise limits lemma (#5630)\nA slight generalisation of a lemma already there.", "changes": [{"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["add", "theorem", "has_limit_of_reflective", ["category_theory"]], ["add", "theorem", "has_limits_of_shape_of_reflective", ["category_theory"]]]}]}, {"timestamp": 1609921830, "sha": "56ed5d78", "message": "feat(category_theory/adjunction): mates (#5599)\nAdds some results on the calculus of mates.", "changes": [{"oldPath": null, "newPath": "src/category_theory/adjunction/mates.lean", "changes": [["add", "def", "transfer_nat_trans", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_counit", ["category_theory"]], ["add", "def", "transfer_nat_trans_self", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_comm", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_comp", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_counit", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_id", ["category_theory"]], ["add", "def", "transfer_nat_trans_self_of_iso", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_symm_comm", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_symm_comp", ["category_theory"]], ["add", "theorem", "transfer_nat_trans_self_symm_id", ["category_theory"]], ["add", "def", "transfer_nat_trans_self_symm_of_iso", ["category_theory"]], ["add", "theorem", "unit_transfer_nat_trans", ["category_theory"]], ["add", "theorem", "unit_transfer_nat_trans_self", ["category_theory"]]]}]}, {"timestamp": 1609921828, "sha": "5f98a961", "message": "feat(group_theory): add definition of solvable group (#5565)\nDefines solvable groups using the definition that a group is solvable if its nth commutator is eventually trivial. Defines the nth commutator of a group and provides some lemmas for working with it. More facts about solvable groups will come in future PRs.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/bracket.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/solvable.lean", "changes": [["add", "theorem", "bot_general_commutator", []], ["add", "theorem", "commutator_def'", []], ["add", "def", "derived_series", []], ["add", "theorem", "derived_series_normal", []], ["add", "theorem", "derived_series_one", []], ["add", "theorem", "derived_series_succ", []], ["add", "theorem", "derived_series_zero", []], ["add", "theorem", "general_commutator_bot", []], ["add", "theorem", "general_commutator_comm", []], ["add", "theorem", "general_commutator_def'", []], ["add", "theorem", "general_commutator_def", []], ["add", "theorem", "general_commutator_eq_commutator", []], ["add", "theorem", "general_commutator_le", []], ["add", "theorem", "general_commutator_le_inf", []], ["add", "theorem", "general_commutator_le_left", []], ["add", "theorem", "general_commutator_le_right", []], ["add", "theorem", "general_commutator_mono", []]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "closure_le_normal_closure", ["subgroup"]], ["add", "theorem", "le_normal_closure", ["subgroup"]], ["add", "theorem", "normal_closure_closure_eq_normal_closure", ["subgroup"]], ["add", "theorem", "normal_closure_eq_self", ["subgroup"]], ["add", "theorem", "normal_closure_idempotent", ["subgroup"]]]}]}, {"timestamp": 1609921825, "sha": "648ff216", "message": "feat(algebra/lie/basic): the lattice of Lie submodules of a Noetherian Lie module is well-founded (#5557)\nThe key result is: `well_founded_of_noetherian`", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "coe_submodule_injective", ["lie_submodule"]], ["add", "theorem", "mem_coe_submodule", ["lie_submodule"]], ["add", "theorem", "well_founded_of_noetherian", ["lie_submodule"]]]}]}, {"timestamp": 1609911376, "sha": "38921554", "message": "fix(algebra/group/pi): use correct `div`/`sub` (#5625)\nWithout an explicit `div := has_div.div`, `rw [pi.sub_apply]` fails sometimes.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}]}, {"timestamp": 1609911373, "sha": "3d6ba9a7", "message": "feat(data/list/chain): chain pmap (#5438)\nTwo chain pmap lemmas", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "chain_of_chain_pmap", ["list"]], ["add", "theorem", "chain_pmap_of_chain", ["list"]]]}]}, {"timestamp": 1609900213, "sha": "de739122", "message": "chore(scripts): update nolints.txt (#5629)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/style-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}]}, {"timestamp": 1609900210, "sha": "19d2ea76", "message": "feat(order/atoms): Pairwise coprime (#5596)\nDon't really know what to call it, but it's the atom-level version of the statement that maximal ideals are pairwise coprime.", "changes": [{"oldPath": "src/order/atoms.lean", "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "disjoint_of_ne", ["is_atom"]], ["add", "theorem", "inf_eq_bot_of_ne", ["is_atom"]], ["add", "theorem", "sup_eq_top_of_ne", ["is_coatom"]]]}]}, {"timestamp": 1609900208, "sha": "9fdd703b", "message": "feat(linear_algebra/affine_space/midpoint): a few more lemmas (#5571)\n* simplify expressions like `midpoint R p₁ p₂ -ᵥ p₁` and\n `p₂ - midpoint R p₁ p₂`;\n* fix a typo in `data/set/intervals/surj_on`.", "changes": [{"oldPath": "src/data/set/intervals/surj_on.lean", "newPath": "src/data/set/intervals/surj_on.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": [["add", "theorem", "left_sub_midpoint", []], ["add", "theorem", "left_vsub_midpoint", []], ["add", "theorem", "midpoint_sub_left", []], ["add", "theorem", "midpoint_sub_right", []], ["add", "theorem", "midpoint_vsub_left", []], ["add", "theorem", "midpoint_vsub_right", []], ["add", "theorem", "right_sub_midpoint", []], ["add", "theorem", "right_vsub_midpoint", []]]}]}, {"timestamp": 1609900206, "sha": "731c26f2", "message": "refactor(*): swap sides of `iff` in `{rel_embedding,order_embedding}.map_rel_iff` (#5556)\nThis way RHS is \"simpler\" than LHS.\nOther API changes (in `rel_embedding` and/or `ord_embedding` and/or `rel_iso` and/or `ord_iso` namespaces):\n* drop `map_le_iff`, rename `apply_le_apply` to `le_iff_le`;\n* drop `map_lt_iff`, rename `apply_lt_apply` to `lt_iff_lt`;\n* rename `apply_eq_apply` to `eq_iff_eq`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": []}, {"oldPath": "src/data/list/nodup_equiv_fin.lean", "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/ord_continuous.lean", "newPath": "src/order/ord_continuous.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["del", "theorem", "apply_eq_apply", ["order_embedding"]], ["del", "theorem", "apply_le_apply", ["order_embedding"]], ["del", "theorem", "apply_lt_apply", ["order_embedding"]], ["add", "theorem", "eq_iff_eq", ["order_embedding"]], ["add", "theorem", "le_iff_le", ["order_embedding"]], ["add", "theorem", "lt_iff_lt", ["order_embedding"]], ["del", "theorem", "map_le_iff", ["order_embedding"]], ["del", "theorem", "map_lt_iff", ["order_embedding"]], ["del", "theorem", "apply_le_apply", ["order_iso"]], ["del", "theorem", "apply_lt_apply", ["order_iso"]], ["add", "theorem", "le_iff_le", ["order_iso"]], ["add", "theorem", "lt_iff_lt", ["order_iso"]], ["mod", "theorem", "map_rel_iff", ["rel_embedding"]], ["mod", "theorem", "coe_fn_mk", ["rel_iso"]], ["add", "theorem", "eq_iff_eq", ["rel_iso"]], ["del", "theorem", "map_rel_iff''", ["rel_iso"]], ["mod", "theorem", "map_rel_iff", ["rel_iso"]]]}, {"oldPath": "src/order/semiconj_Sup.lean", "newPath": "src/order/semiconj_Sup.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "def", "order_embedding", ["localization_map"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1609891329, "sha": "8f424fca", "message": "chore(measure_theory/pi): a few more lemmas (#5604)\nAlso prove that a locally finite measure in a `second_countable_topology` is `sigma_finite`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "exists_is_open_measure_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "exists_mem_basis", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "sigma_finite_of_countable", ["measure_theory", "measure"]], ["add", "theorem", "sigma_finite_of_not_nonempty", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/pi.lean", "newPath": "src/measure_theory/pi.lean", "changes": [["add", "theorem", "pi_eval_preimage_null", ["measure_theory", "measure"]], ["add", "theorem", "pi_hyperplane", ["measure_theory", "measure"]], ["add", "theorem", "pi_def", ["measure_theory", "measure_space"]], ["add", "theorem", "volume_pi", ["measure_theory"]]]}]}, {"timestamp": 1609878833, "sha": "00d86176", "message": "feat(analysis/normed_space/inner_product): inner product is continuous, norm squared is smooth (#5600)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "inner", ["continuous"]], ["add", "theorem", "inner", ["continuous_at"]], ["add", "theorem", "inner", ["continuous_on"]], ["add", "theorem", "inner", ["continuous_within_at"]], ["add", "theorem", "deriv_inner_apply", []], ["add", "theorem", "norm_square", ["differentiable"]], ["add", "theorem", "norm_square", ["differentiable_at"]], ["add", "theorem", "norm_square", ["differentiable_on"]], ["add", "theorem", "norm_square", ["differentiable_within_at"]], ["add", "theorem", "fderiv_inner_apply", []], ["add", "def", "fderiv_inner_clm", []], ["add", "theorem", "fderiv_inner_clm_apply", []], ["add", "theorem", "inner", ["filter", "tendsto"]], ["add", "theorem", "inner", ["has_deriv_at"]], ["add", "theorem", "inner", ["has_deriv_within_at"]], ["add", "theorem", "inner", ["has_fderiv_at"]], ["add", "theorem", "inner", ["has_fderiv_within_at"]], ["add", "theorem", "inner", ["measurable"]], ["add", "theorem", "norm_square", ["times_cont_diff"]], ["add", "theorem", "norm_square", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_norm_square", []], ["add", "theorem", "norm_square", ["times_cont_diff_on"]], ["add", "theorem", "norm_square", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1609878831, "sha": "0c8fffe9", "message": "fix(algebra/group/prod): fixes for #5563 (#5577)\n* rename `prod.units` to `mul_equiv.prod_units`;\n* rewrite it with better definitional equalities;\n* now `@[to_additive]` works: fixes #5566;\n* make `M` and `N` implicit in `mul_equiv.prod_comm`", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "theorem", "coe_prod_comm", ["mul_equiv"]], ["add", "def", "prod_units", ["mul_equiv"]], ["del", "def", "units", ["prod"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "inv_mk", ["units"]], ["add", "theorem", "mk_coe", ["units"]]]}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": [["del", "theorem", "coe_coe_prod_comm", ["ring_equiv"]], ["del", "theorem", "coe_coe_prod_comm_symm", ["ring_equiv"]], ["mod", "theorem", "coe_prod_comm", ["ring_equiv"]], ["mod", "theorem", "coe_prod_comm_symm", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/ideal/prod.lean", "newPath": "src/ring_theory/ideal/prod.lean", "changes": []}]}, {"timestamp": 1609878829, "sha": "7cf0a29d", "message": "feat(analysis/normed_space/inner_product): consequences of characterization of orthogonal projection (#5558)\nReverse order of equality in the lemma `eq_orthogonal_projection_of_mem_of_inner_eq_zero`. Add some variants. Also add three consequences:\n- the orthogonal projection onto `K` of an element of `K` is itself\n- the orthogonal projection onto `K` of an element of `Kᗮ` is zero\n- for a submodule `K` of an inner product space, the sum of the orthogonal projections onto `K` and `Kᗮ` is the identity.\nReverse order of `iff` in the lemma `submodule.eq_top_iff_orthogonal_eq_bot`, and rename to `submodule.orthogonal_eq_bot_iff`.", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "theorem", "eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero", []], ["mod", "theorem", "eq_orthogonal_projection_of_eq_submodule", []], ["mod", "theorem", "eq_orthogonal_projection_of_mem_of_inner_eq_zero", []], ["add", "theorem", "eq_orthogonal_projection_of_mem_orthogonal'", []], ["add", "theorem", "eq_orthogonal_projection_of_mem_orthogonal", []], ["add", "theorem", "eq_sum_orthogonal_projection_self_orthogonal_complement", []], ["mod", "theorem", "exists_norm_eq_infi_of_complete_subspace", []], ["add", "theorem", "id_eq_sum_orthogonal_projection_self_orthogonal_complement", []], ["mod", "theorem", "norm_eq_infi_iff_inner_eq_zero", []], ["mod", "theorem", "norm_eq_infi_iff_real_inner_eq_zero", []], ["mod", "theorem", "orthogonal_eq_inter", []], ["mod", "def", "orthogonal_projection", []], ["mod", "def", "orthogonal_projection_fn", []], ["mod", "theorem", "orthogonal_projection_fn_eq", []], ["mod", "theorem", "orthogonal_projection_fn_inner_eq_zero", []], ["mod", "theorem", "orthogonal_projection_fn_mem", []], ["mod", "theorem", "orthogonal_projection_fn_norm_sq", []], ["mod", "theorem", "orthogonal_projection_inner_eq_zero", []], ["add", "theorem", "orthogonal_projection_mem_subspace_eq_self", []], ["add", "theorem", "orthogonal_projection_mem_subspace_orthogonal_complement_eq_zero", []], ["add", "theorem", "orthogonal_projection_mem_subspace_orthogonal_precomplement_eq_zero", []], ["mod", "theorem", "orthogonal_projection_norm_le", []], ["del", "theorem", "eq_top_iff_orthogonal_eq_bot", ["submodule"]], ["mod", "theorem", "exists_sum_mem_mem_orthogonal", ["submodule"]], ["mod", "theorem", "inner_left_of_mem_orthogonal", ["submodule"]], ["mod", "theorem", "inner_right_of_mem_orthogonal", ["submodule"]], ["mod", "theorem", "is_closed_orthogonal", ["submodule"]], ["mod", "theorem", "is_compl_orthogonal_of_is_complete", ["submodule"]], ["mod", "theorem", "le_orthogonal_orthogonal", ["submodule"]], ["mod", "theorem", "mem_orthogonal'", ["submodule"]], ["mod", "theorem", "mem_orthogonal", ["submodule"]], ["mod", "def", "orthogonal", ["submodule"]], ["mod", "theorem", "orthogonal_disjoint", ["submodule"]], ["add", "theorem", "orthogonal_eq_bot_iff", ["submodule"]], ["add", "theorem", "orthogonal_eq_top_iff", ["submodule"]], ["mod", "theorem", "orthogonal_orthogonal", ["submodule"]], ["mod", "theorem", "sup_orthogonal_of_complete_space", ["submodule"]], ["mod", "theorem", "sup_orthogonal_of_is_complete", ["submodule"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "subtype_continuous", ["submodule"]], ["add", "theorem", "subtype_continuous_apply", ["submodule"]]]}]}, {"timestamp": 1609878826, "sha": "82ec0ccb", "message": "feat(ring_theory/roots_of_unity): degree of minimal polynomial (#5475)\nThis is the penultimate PR about roots of unity and cyclotomic polynomials: I prove that the degree of the minimal polynomial of a primitive `n`th root of unity is at least `nat.totient n`.\nIt's easy to prove now that it is actually `nat.totient n`, and indeed that the minimal polynomial is the cyclotomic polynomial (that it is hence irreducible). I decided to split the PR like this because I feel that it's better to put the remaining results in `ring_theory/polynomials/cyclotomic`.", "changes": [{"oldPath": "src/data/polynomial/degree/lemmas.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": [["add", "theorem", "nat_degree_map_le", ["polynomial"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "is_roots_of_minimal_polynomial", ["is_primitive_root"]], ["add", "theorem", "minimal_polynomial_eq_pow_coprime", ["is_primitive_root"]], ["add", "theorem", "pow_is_root_minimal_polynomial", ["is_primitive_root"]], ["add", "theorem", "totient_le_degree_minimal_polynomial", ["is_primitive_root"]]]}]}, {"timestamp": 1609869893, "sha": "d1b2d6eb", "message": "fix(linear_algebra/tensor_algebra): Correct the precedence of `⊗ₜ[R]` (#5619)\nPreviously, `a ⊗ₜ[R] b = c` was interpreted as `a ⊗ₜ[R] (b = c)` which was nonsense because `eq` is not in `Type`.\nI'm not sure whether `:0` is necessary, but it seems harmless.\nThe `:100` is the crucial bugfix here.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "theorem", "tmul_zero", ["tensor_product"]], ["mod", "theorem", "zero_tmul", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1609869891, "sha": "01e17a9d", "message": "feat(scripts/lint-style.sh): check that Lean files don't have executable bit (#5606)", "changes": [{"oldPath": "scripts/lint-style.sh", "newPath": "scripts/lint-style.sh", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1609863517, "sha": "a6633e5b", "message": "feat(analysis/normed_space/inner_product): new versions of Cauchy-Schwarz equality case (#5586)\nThe existing version of the Cauchy-Schwarz equality case characterizes the pairs `x`, `y` with `abs ⟪x, y⟫ = ∥x∥ * ∥y∥`. This PR provides a characterization, with converse, of pairs satisfying `⟪x, y⟫ = ∥x∥ * ∥y∥`, and some consequences.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_sub_eq_zero_iff", []]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "inner_eq_norm_mul_iff", []], ["add", "theorem", "inner_eq_norm_mul_iff_of_norm_one", []], ["add", "theorem", "inner_eq_norm_mul_iff_real", []], ["add", "theorem", "inner_lt_norm_mul_iff_real", []], ["add", "theorem", "inner_lt_one_iff_real_of_norm_one", []], ["add", "theorem", "real_inner_le_norm", []]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "im_eq_zero_of_le", ["is_R_or_C"]], ["add", "theorem", "re_eq_self_of_le", ["is_R_or_C"]]]}]}, {"timestamp": 1609858235, "sha": "1de608d8", "message": "refactor(measure_theory): integrate almost everywhere measurable functions (#5510)\nCurrently, the Bochner integral is only defined for measurable functions. This means that, if `f` is continuous on an interval `[a, b]`, to be able to make sense of `∫ x in a..b, f`, one has to add a global measurability assumption, which is very much unnatural.\nThis PR redefines the Bochner integral so that it makes sense for functions that are almost everywhere measurable, i.e., they coincide almost everywhere with a measurable function (This is equivalent to measurability for the completed measure, but we don't state or prove this as it is not needed to develop the theory).", "changes": [{"oldPath": "src/analysis/convex/integral.lean", "newPath": "src/analysis/convex/integral.lean", "changes": [["mod", "theorem", "smul_integral_mem", ["convex"]]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "def", "const", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "mk_coe_fn", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "one_def", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "quotient_out'_eq_coe_fn", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "ae_eq_setoid", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["del", "theorem", "integral_add_measure'", ["measure_theory"]], ["mod", "theorem", "integral_congr_ae", ["measure_theory"]], ["mod", "theorem", "integral_eq_lintegral_of_nonneg_ae", ["measure_theory"]], ["add", "theorem", "integral_map_of_measurable", ["measure_theory"]], ["add", "theorem", "integral_non_ae_measurable", ["measure_theory"]], ["del", "theorem", "integral_non_measurable", ["measure_theory"]], ["mod", "theorem", "integral_to_real", ["measure_theory"]], ["del", "theorem", "tendsto_integral_approx_on_univ", ["measure_theory"]], ["add", "theorem", "tendsto_integral_approx_on_univ_of_measurable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_add'", ["measure_theory"]], ["add", "theorem", "lintegral_const_mul''", ["measure_theory"]], ["add", "theorem", "lintegral_eq_zero_iff'", ["measure_theory"]], ["add", "theorem", "lintegral_map'", ["measure_theory"]], ["add", "theorem", "lintegral_mul_const''", ["measure_theory"]], ["add", "theorem", "tendsto_lintegral_of_dominated_convergence'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "interval_integrable", ["continuous_on"]], ["mod", "theorem", "interval_integrable_of_Icc", ["continuous_on"]], ["mod", "theorem", "eventually_interval_integrable", ["filter", "tendsto"]], ["mod", "theorem", "eventually_interval_integrable_ae", ["filter", "tendsto"]], ["mod", "theorem", "refl", ["interval_integrable"]], ["mod", "theorem", "trans", ["interval_integrable"]], ["mod", "theorem", "deriv_integral_left", ["interval_integral"]], ["mod", "theorem", "deriv_integral_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "deriv_integral_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "deriv_integral_right", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_left", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_right", ["interval_integral"]], ["mod", "theorem", "fderiv_integral", ["interval_integral"]], ["mod", "theorem", "fderiv_integral_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "fderiv_within_integral_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_comp_add_right", ["interval_integral"]], ["mod", "theorem", "integral_comp_mul_right", ["interval_integral"]], ["mod", "theorem", "integral_comp_neg", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_right", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_right", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_at", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_within_at", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_within_at_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_left", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_right", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_fderiv_at", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_non_ae_measurable", ["interval_integral"]], ["del", "theorem", "integral_non_measurable", ["interval_integral"]], ["mod", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "integrable_zero_measure", []], ["del", "theorem", "integrable_zero", ["measurable"]], ["mod", "theorem", "integrable_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "ae_measurable", ["measure_theory", "integrable"]], ["mod", "theorem", "congr'", ["measure_theory", "integrable"]], ["mod", "theorem", "congr", ["measure_theory", "integrable"]], ["del", "theorem", "measurable", ["measure_theory", "integrable"]], ["mod", "theorem", "mono'", ["measure_theory", "integrable"]], ["mod", "theorem", "mono", ["measure_theory", "integrable"]], ["mod", "theorem", "integrable_congr'", ["measure_theory"]], ["mod", "theorem", "integrable_congr", ["measure_theory"]], ["mod", "theorem", "integrable_norm_iff", ["measure_theory"]], ["mod", "theorem", "mk_to_fun", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["mod", "theorem", "mem_ℒp_of_snorm_lt_top", ["ℒp_space"]], ["mod", "theorem", "snorm_add_le", ["ℒp_space"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["add", "theorem", "integral_prod_right'", ["ae_measurable"]], ["add", "theorem", "prod_mk_left", ["ae_measurable"]], ["add", "theorem", "prod_swap", ["ae_measurable"]], ["add", "theorem", "has_finite_integral_prod_iff'", ["measure_theory"]], ["mod", "theorem", "integrable_prod_iff'", ["measure_theory"]], ["mod", "theorem", "integrable_prod_iff", ["measure_theory"]], ["mod", "theorem", "integral_fn_integral_add", ["measure_theory"]], ["mod", "theorem", "integral_fn_integral_sub", ["measure_theory"]], ["add", "theorem", "lintegral_prod'", ["measure_theory"]], ["add", "theorem", "lintegral_prod_symm'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "ae_measurable", ["continuous_on"]], ["mod", "theorem", "integrable_on_compact", ["continuous_on"]], ["add", "theorem", "ae_measurable_indicator_iff", ["measure_theory"]], ["mod", "theorem", "integrable_indicator_iff", ["measure_theory"]], ["mod", "theorem", "integrable_on_empty", ["measure_theory"]], ["mod", "theorem", "integrable_on_finite_union", ["measure_theory"]], ["mod", "theorem", "integrable_on_finset_union", ["measure_theory"]], ["mod", "theorem", "integral_indicator", ["measure_theory"]], ["mod", "theorem", "integrable_at_filter", ["measure_theory", "measure", "finite_at_filter"]], ["mod", "theorem", "integrable_at_filter_of_tendsto", ["measure_theory", "measure", "finite_at_filter"]], ["mod", "theorem", "integrable_at_filter_of_tendsto_ae", ["measure_theory", "measure", "finite_at_filter"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1609842899, "sha": "8f9f5ca0", "message": "chore(linear_algebra/alternating): Use `have` instead of `simp only` (#5618)\nThis makes the proof easier to read and less fragile to lemma changes.", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}]}, {"timestamp": 1609826933, "sha": "78dc23ff", "message": "chore(scripts/*): rename files of the style linter (#5605)\nThe style linter has been doing a bit more than just checking for\ncopyright headers, module docstrings, or line lengths.\nSo I thought it made sense to reflect that in the filenames.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/lint-copy-mod-doc.sh", "newPath": null, "changes": []}, {"oldPath": "scripts/lint-copy-mod-doc.py", "newPath": "scripts/lint-style.py", "changes": []}, {"oldPath": null, "newPath": "scripts/lint-style.sh", "changes": []}, {"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/style-exceptions.txt", "changes": []}, {"oldPath": "scripts/update-copy-mod-doc-exceptions.sh", "newPath": "scripts/update-style-exceptions.sh", "changes": []}, {"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}]}, {"timestamp": 1609816772, "sha": "6dcfa5c2", "message": "chore(scripts): update nolints.txt (#5615)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1609804591, "sha": "12921e9e", "message": "feat(tactic/simps): some improvements (#5541)\n* `@[simps]` would previously fail if the definition is not a constructor application (with the suggestion to add option `{rhs_md := semireducible}` and maybe `simp_rhs := tt`). Now it automatically adds `{rhs_md := semireducible, simp_rhs := tt}` whenever it reaches this situation. \n* Remove all (now) unnecessary occurrences of `{rhs_md := semireducible}` from the library. There are still a couple left where the `simp_rhs := tt` is undesirable.\n* `@[simps {simp_rhs := tt}]` now also applies `dsimp, simp` to the right-hand side of the lemmas it generates.\n* Add some `@[simps]` in `category_theory/limits/cones.lean`\n* `@[simps]` would not recursively apply projections of `prod` or `pprod`. This is now customizable with the `not_recursive` option.\n* Add an option `trace.simps.debug` with some debugging information.", "changes": [{"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/essential_image.lean", "newPath": "src/category_theory/essential_image.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["del", "theorem", "cocones_map_app", ["category_theory", "functor"]], ["del", "theorem", "cocones_obj", ["category_theory", "functor"]], ["del", "theorem", "cones_map_app", ["category_theory", "functor"]], ["del", "theorem", "cones_obj", ["category_theory", "functor"]], ["del", "theorem", "map_cocone_X", ["category_theory", "functor"]], ["del", "theorem", "map_cocone_ι", ["category_theory", "functor"]], ["del", "theorem", "map_cone_X", ["category_theory", "functor"]], ["del", "theorem", "map_cone_π", ["category_theory", "functor"]], ["mod", "theorem", "extend_ι", ["category_theory", "limits", "cocone"]], ["mod", "def", "cocone_left_op_of_cone", ["category_theory", "limits"]], ["del", "theorem", "cocone_left_op_of_cone_ι_app", ["category_theory", "limits"]], ["mod", "def", "cocone_of_cone_left_op", ["category_theory", "limits"]], ["del", "theorem", "equivalence_of_reindexing_functor_obj", ["category_theory", "limits", "cocones"]], ["mod", "def", "cone_left_op_of_cocone", ["category_theory", "limits"]], ["del", "theorem", "cone_left_op_of_cocone_π_app", ["category_theory", "limits"]], ["mod", "def", "cone_of_cocone_left_op", ["category_theory", "limits"]], ["del", "theorem", "cone_of_cocone_left_op_π_app", ["category_theory", "limits"]], ["del", "theorem", "equivalence_of_reindexing_functor_obj", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": []}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "newPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/coequalizer.lean", "newPath": "src/category_theory/monad/coequalizer.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monad/monadicity.lean", "newPath": "src/category_theory/monad/monadicity.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/CommMon_.lean", "newPath": "src/category_theory/monoidal/CommMon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/Mon_.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/functor_category.lean", "newPath": "src/category_theory/monoidal/internal/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/limits.lean", "newPath": "src/category_theory/monoidal/internal/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/transport.lean", "newPath": "src/category_theory/monoidal/transport.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/pi/basic.lean", "newPath": "src/category_theory/pi/basic.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/sigma/basic.lean", "newPath": "src/category_theory/sigma/basic.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf_of_types.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": []}, {"oldPath": "src/category_theory/sites/types.lean", "newPath": "src/category_theory/sites/types.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["mod", "def", "map", ["omega_complete_partial_order", "chain"]]]}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": []}, {"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["del", "def", "bar2", ["foo"]], ["mod", "def", "rfl2", ["foo"]], ["add", "structure", "my_type", []], ["add", "def", "my_type_def", []], ["del", "def", "specify5", ["specify"]]]}]}, {"timestamp": 1609798237, "sha": "78d5bd37", "message": "feat(analysis/normed_space/{finite_dimension, inner_product}): assorted finite-dimensionality lemmas (#5580)\nTwo groups of lemmas about finite-dimensional normed spaces:\n- normed spaces of the same finite dimension are continuously linearly equivalent (this is a continuation of #5559)\n- variations on the existing lemma `submodule.findim_add_inf_findim_orthogonal`, that the dimensions of a subspace and its orthogonal complement sum to the dimension of the full space.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "def", "of_findim_eq", ["continuous_linear_equiv"]], ["add", "theorem", "nonempty_continuous_linear_equiv_iff_findim_eq", ["finite_dimensional"]], ["add", "theorem", "nonempty_continuous_linear_equiv_of_findim_eq", ["finite_dimensional"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "findim_add_findim_orthogonal'", ["submodule"]], ["add", "theorem", "findim_add_findim_orthogonal", ["submodule"]], ["add", "theorem", "findim_add_inf_findim_orthogonal'", ["submodule"]]]}]}, {"timestamp": 1609791602, "sha": "7b825f2a", "message": "feat(linear_algebra/alternating): Add comp_alternating_map and lemmas (#5476)\nThis is just `comp_multilinear_map` with the extra bundled proof", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "coe_comp_alternating_map", ["linear_map"]], ["add", "def", "comp_alternating_map", ["linear_map"]], ["add", "theorem", "comp_alternating_map_apply", ["linear_map"]], ["add", "theorem", "comp_multilinear_map_alternatization", ["linear_map"]]]}]}, {"timestamp": 1609778865, "sha": "2300b477", "message": "chore(computability/*FA): remove unnecessary type variables (#5613)", "changes": [{"oldPath": "src/computability/DFA.lean", "newPath": "src/computability/DFA.lean", "changes": []}, {"oldPath": "src/computability/NFA.lean", "newPath": "src/computability/NFA.lean", "changes": []}]}, {"timestamp": 1609778864, "sha": "9535f914", "message": "feat(*): switch to lean 3.24 (#5612)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1609778862, "sha": "7d0b9882", "message": "chore(data/equiv/basic): Add refl / symm / trans lemmas for equiv_congr (#5609)\nWe already have this triplet of lemmas for `sum_congr` and `sigma_congr`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "equiv_congr_refl", ["equiv"]], ["add", "theorem", "equiv_congr_symm", ["equiv"]], ["add", "theorem", "equiv_congr_trans", ["equiv"]]]}]}, {"timestamp": 1609778860, "sha": "50beef25", "message": "feat(data/set/basic): more lemmas about `set.pi` (#5603)", "changes": [{"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "one_def", ["pi"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "pi_congr", ["set"]], ["add", "theorem", "pi_inter_compl", ["set"]], ["add", "theorem", "pi_univ", ["set"]], ["add", "theorem", "pi_update_of_mem", ["set"]], ["add", "theorem", "pi_update_of_not_mem", ["set"]], ["add", "theorem", "singleton_pi'", ["set"]], ["add", "theorem", "union_pi", ["set"]], ["add", "theorem", "univ_pi_update", ["set"]], ["add", "theorem", "univ_pi_update_univ", ["set"]]]}, {"oldPath": "src/data/set/intervals/pi.lean", "newPath": "src/data/set/intervals/pi.lean", "changes": [["add", "theorem", "disjoint_pi_univ_Ioc_update_left_right", ["set"]], ["add", "theorem", "pi_univ_Ioc_update_left", ["set"]], ["add", "theorem", "pi_univ_Ioc_update_right", ["set"]], ["add", "theorem", "pi_univ_Ioc_update_union", ["set"]]]}]}, {"timestamp": 1609761876, "sha": "3669cb35", "message": "feat(data/real/ennreal): add `ennreal.prod_lt_top` (#5602)\nAlso add `with_top.can_lift`, `with_top.mul_lt_top`, and `with_top.prod_lt_top`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "prod_lt_top", ["with_top"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_lt_top", ["with_top"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "prod_lt_top", ["ennreal"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1609750241, "sha": "41501369", "message": "chore(logic/function): generalize `rel_update_iff` to `forall_update_iff` (#5601)", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "forall_update_iff", ["function"]], ["del", "theorem", "rel_update_iff", ["function"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}]}, {"timestamp": 1609750239, "sha": "6acf99e8", "message": "fix(data/nat/basic): fix typos in docstrings (#5592)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1609738582, "sha": "afbf47d5", "message": "feat(data/*, order/*) supporting lemmas for characterising well-founded complete lattices (#5446)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "eq_singleton_iff_nonempty_unique_mem", ["finset"]], ["add", "theorem", "not_nonempty_iff_eq_empty", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_eq_Inf", ["finset"]], ["add", "theorem", "sup_closed_of_sup_closed", ["finset"]], ["add", "theorem", "sup_eq_Sup", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_singleton_iff_nonempty_unique_mem", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "preimage_embedding", ["set", "finite"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "eq_singleton_bot_of_Sup_eq_bot_of_nonempty", []], ["add", "theorem", "eq_singleton_top_of_Inf_eq_top_of_nonempty", []]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "map_inf", ["rel_hom"]], ["add", "theorem", "map_sup", ["rel_hom"]]]}]}, {"timestamp": 1609727500, "sha": "24340238", "message": "chore(scripts): update nolints.txt (#5598)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1609715941, "sha": "1503cf89", "message": "doc(overview): add dynamics and `measure.pi` (#5597)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1609715939, "sha": "4fcf65c0", "message": "fix(tactic/rcases): fix rcases? goal alignment (#5576)\nThis fixes a bug in which `rcases?` will not align the goals correctly\nin the same manner as `rcases`, leading to a situation where the hint\nproduced by `rcases?` does not work in `rcases`.\nAlso fixes a bug where missing names will be printed as `[anonymous]`\ninstead of `_`.\nFixes #2794", "changes": [{"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": [["add", "inductive", "foo", []]]}]}, {"timestamp": 1609715937, "sha": "96948e45", "message": "feat(measure_theory): almost everywhere measurable functions (#5568)\nThis PR introduces a notion of almost everywhere measurable function, i.e., a function which coincides almost everywhere with a measurable function, and builds a basic API around the notion. It will then be used in #5510 to extend the Bochner integral. The main new definition in the PR is `h : ae_measurable f μ`. It comes with `h.mk f` building a measurable function that coincides almost everywhere with `f` (these assertions are respectively `h.measurable_mk` and `h.ae_eq_mk`).", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "ennreal_rpow_const", ["ae_measurable"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "const_smul", ["ae_measurable"]], ["add", "theorem", "edist", ["ae_measurable"]], ["add", "theorem", "ennnorm", ["ae_measurable"]], ["add", "theorem", "ennreal_coe", ["ae_measurable"]], ["add", "theorem", "ennreal_mul", ["ae_measurable"]], ["add", "theorem", "inv", ["ae_measurable"]], ["add", "theorem", "max", ["ae_measurable"]], ["add", "theorem", "min", ["ae_measurable"]], ["add", "theorem", "mul", ["ae_measurable"]], ["add", "theorem", "nnnorm", ["ae_measurable"]], ["add", "theorem", "norm", ["ae_measurable"]], ["add", "theorem", "smul", ["ae_measurable"]], ["add", "theorem", "sub", ["ae_measurable"]], ["add", "theorem", "to_real", ["ae_measurable"]], ["add", "theorem", "ae_measurable_comp_iff_of_closed_embedding", []], ["add", "theorem", "ae_measurable_const_smul_iff", []], ["add", "theorem", "ae_measurable_smul_const", []], ["add", "theorem", "ae_measurable2", ["continuous"]], ["del", "theorem", "ennreal_add", ["measurable"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_of_not_nonempty", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "add_measure", ["ae_measurable"]], ["add", "theorem", "ae_eq_mk", ["ae_measurable"]], ["add", "theorem", "comp_measurable", ["ae_measurable"]], ["add", "theorem", "congr", ["ae_measurable"]], ["add", "theorem", "is_null_measurable", ["ae_measurable"]], ["add", "theorem", "measurable_mk", ["ae_measurable"]], ["add", "def", "mk", ["ae_measurable"]], ["add", "theorem", "mono_measure", ["ae_measurable"]], ["add", "theorem", "prod_mk", ["ae_measurable"]], ["add", "theorem", "smul_measure", ["ae_measurable"]], ["add", "def", "ae_measurable", []], ["add", "theorem", "ae_measurable_add_measure_iff", []], ["add", "theorem", "ae_measurable_congr", []], ["add", "theorem", "ae_measurable_const", []], ["add", "theorem", "ae_measurable_smul_measure_iff", []], ["add", "theorem", "is_null_measurable_iff_ae", []], ["add", "theorem", "is_null_measurable_iff_sandwich", []], ["add", "theorem", "ae_measurable", ["measurable"]], ["add", "theorem", "comp_ae_measurable", ["measurable"]], ["add", "theorem", "ae_eq_comp", ["measure_theory"]], ["add", "theorem", "ae_eq_set", ["measure_theory"]], ["add", "theorem", "ae_restrict_iff'", ["measure_theory"]], ["add", "theorem", "ae_smul_measure_iff", ["measure_theory"]], ["add", "theorem", "map_mono", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply_of_is_null_measurable", []]]}]}, {"timestamp": 1609715933, "sha": "2967793e", "message": "feat(data/option/basic): join and associated lemmas (#5426)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "bind_eq_bind", ["option"]], ["add", "theorem", "bind_id_eq_join", ["option"]], ["add", "theorem", "bind_map_comm", ["option"]], ["add", "theorem", "join_eq_join", ["option"]], ["add", "theorem", "join_eq_some", ["option"]], ["add", "theorem", "join_join", ["option"]], ["add", "theorem", "join_map_eq_map_join", ["option"]], ["add", "theorem", "join_ne_none'", ["option"]], ["add", "theorem", "join_ne_none", ["option"]], ["add", "theorem", "mem_of_mem_join", ["option"]]]}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": [["add", "def", "join", ["option"]]]}]}, {"timestamp": 1609715931, "sha": "d04e034a", "message": "feat(measure_theory/interval_integral): FTC-2 (#4945)\nThe second fundamental theorem of calculus and supporting lemmas", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "constant_of_deriv_within_zero", []], ["add", "theorem", "constant_of_has_deriv_right_zero", []], ["add", "theorem", "eq_of_deriv_within_eq", []], ["add", "theorem", "eq_of_has_deriv_right_eq", []]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "interval_integrable_of_Icc", ["continuous_on"]], ["add", "theorem", "continuous_on_integral_of_continuous", ["interval_integral"]], ["add", "theorem", "differentiable_on_integral_of_continuous", ["interval_integral"]], ["add", "theorem", "integral_deriv_eq_sub", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_at'", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_at", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_right", ["interval_integral"]], ["add", "theorem", "integral_eq_sub_of_has_deriv_right_of_le", ["interval_integral"]]]}]}, {"timestamp": 1609706421, "sha": "46c35cc1", "message": "fix(algebra/module/basic): Do not attach the ℕ and ℤ `is_scalar_tower` and `smul_comm_class` instances to a specific definition of smul (#5509)\nThese instances are in `Prop`, so the more the merrier.\nWithout this change, these instances are not available for alternative ℤ-module definitions.\nAn example of one of these alternate definitions is `linear_map.semimodule`, which provide a second non-defeq ℤ-module structure alongside `add_comm_group.int_module`.\nWith this PR, both semimodule structures are shown to satisfy `smul_comm_class` and `is_scalar_tower`; while before it, only `add_comm_group.int_module` was shown to satisfy these.\nThis PR makes the following work:\n```lean\nexample {R : Type*} {M₁ M₂ M₃ : Type*}\n [comm_semiring R]\n [add_comm_monoid M₁] [semimodule R M₁]\n [add_comm_monoid M₂] [semimodule R M₂]\n [add_comm_monoid M₃] [semimodule R M₃]\n(f : M₁ →ₗ[R] M₂ →ₗ[R] M₃) (x : M₁) (n : ℕ) : f (n • x) = n • f x :=\nby simp\n```", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1609698971, "sha": "e1138b00", "message": "feat(measure_theory/lp_space): snorm is zero iff the function is zero ae (#5595)\nAdds three lemmas, one for both directions of the iff, `snorm_zero_ae` and `snorm_eq_zero`, and the iff lemma `snorm_eq_zero_iff`.", "changes": [{"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "ae_eq_zero_of_snorm_eq_zero", ["ℒp_space"]], ["add", "theorem", "snorm_eq_zero_iff", ["ℒp_space"]], ["add", "theorem", "snorm_eq_zero_of_ae_zero'", ["ℒp_space"]], ["add", "theorem", "snorm_eq_zero_of_ae_zero", ["ℒp_space"]], ["add", "theorem", "snorm_measure_zero_of_exponent_zero", ["ℒp_space"]], ["add", "theorem", "snorm_measure_zero_of_neg", ["ℒp_space"]], ["add", "theorem", "snorm_measure_zero_of_pos", ["ℒp_space"]]]}]}, {"timestamp": 1609693087, "sha": "ae2c8572", "message": "feat(measure_theory/lp_space): add triangle inequality for the Lp seminorm (#5594)", "changes": [{"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "snorm_add_le", ["ℒp_space"]]]}]}, {"timestamp": 1609693085, "sha": "384ba88b", "message": "feat(computability/*FA): Deterministic and Nondeterministic Finite Automata (#5038)\nDefinition and equivalence of NFA's and DFA's", "changes": [{"oldPath": null, "newPath": "src/computability/DFA.lean", "changes": [["add", "def", "accepts", ["DFA"]], ["add", "def", "eval", ["DFA"]], ["add", "def", "eval_from", ["DFA"]], ["add", "structure", "DFA", []]]}, {"oldPath": null, "newPath": "src/computability/NFA.lean", "changes": [["add", "def", "to_NFA", ["DFA"]], ["add", "theorem", "to_NFA_correct", ["DFA"]], ["add", "theorem", "to_NFA_eval_from_match", ["DFA"]], ["add", "def", "accepts", ["NFA"]], ["add", "def", "eval", ["NFA"]], ["add", "def", "eval_from", ["NFA"]], ["add", "theorem", "mem_step_set", ["NFA"]], ["add", "def", "step_set", ["NFA"]], ["add", "def", "to_DFA", ["NFA"]], ["add", "theorem", "to_DFA_correct", ["NFA"]], ["add", "structure", "NFA", []]]}]}, {"timestamp": 1609682807, "sha": "eb6d5f15", "message": "feat(analysis/normed_space/basic): basic facts about the sphere (#5590)\nBasic lemmas about the sphere in a normed group or normed space.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "eq_zero_of_eq_neg", []], ["add", "theorem", "eq_zero_of_smul_two_eq_zero", []], ["add", "theorem", "ne_neg_of_ne_zero", []], ["add", "theorem", "smul_nat_eq_zero", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "coe_neg_sphere", []], ["add", "theorem", "mem_sphere_iff_norm", []], ["add", "theorem", "mem_sphere_zero_iff_norm", []], ["add", "theorem", "ne_neg_of_mem_sphere", []], ["add", "theorem", "ne_neg_of_mem_unit_sphere", []], ["add", "theorem", "nonzero_of_mem_sphere", []], ["add", "theorem", "nonzero_of_mem_unit_sphere", []], ["add", "theorem", "norm_eq_of_mem_sphere", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "mem_sphere", ["metric"]]]}]}, {"timestamp": 1609675180, "sha": "0837fc30", "message": "feat(measure_theory/pi): finite products of measures (#5414)\nSee module doc of `measure_theory/pi.lean`", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "tprod", ["is_measurable"]], ["add", "theorem", "measurable_tprod_elim'", []], ["add", "theorem", "measurable_tprod_elim", []], ["add", "theorem", "measurable_tprod_mk", []]]}, {"oldPath": null, "newPath": "src/measure_theory/pi.lean", "changes": [["add", "def", "pi'", ["measure_theory", "measure"]], ["add", "theorem", "pi'_pi", ["measure_theory", "measure"]], ["add", "theorem", "pi'_pi_le", ["measure_theory", "measure"]], ["add", "theorem", "pi_caratheodory", ["measure_theory", "measure"]], ["add", "theorem", "pi_pi", ["measure_theory", "measure"]], ["add", "theorem", "tprod_cons", ["measure_theory", "measure"]], ["add", "theorem", "tprod_nil", ["measure_theory", "measure"]], ["add", "theorem", "tprod_tprod", ["measure_theory", "measure"]], ["add", "theorem", "tprod_tprod_le", ["measure_theory", "measure"]], ["add", "theorem", "le_pi", ["measure_theory", "outer_measure"]], ["add", "theorem", "pi_pi_le", ["measure_theory", "outer_measure"]], ["add", "def", "pi_premeasure", ["measure_theory"]], ["add", "theorem", "pi_premeasure_pi'", ["measure_theory"]], ["add", "theorem", "pi_premeasure_pi", ["measure_theory"]], ["add", "theorem", "pi_premeasure_pi_eval", ["measure_theory"]], ["add", "theorem", "pi_premeasure_pi_mono", ["measure_theory"]]]}]}, {"timestamp": 1609664215, "sha": "e3501142", "message": "feat(data/equiv/basic): rfl lemma for equiv_congr (#5585)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "equiv_congr_apply_apply", ["equiv"]]]}]}, {"timestamp": 1609653573, "sha": "57c6d191", "message": "feat(combinatorics/simple_graph): finitely many simple graphs on a finite type (#5584)\nAdds an `ext` lemma for simple graphs and an instance that there are finitely many if the vertex set is finite.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1609653571, "sha": "9fc7aa56", "message": "feat(data/finset/basic): add `finset.piecewise_le_piecewise` (#5572)\n* add `finset.piecewise_le_piecewise` and `finset.piecewise_le_piecewise'`;\n* add `finset.piecewise_compl`.", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "piecewise_le_piecewise'", ["finset"]], ["add", "theorem", "piecewise_le_piecewise", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "piecewise_compl", ["finset"]]]}]}, {"timestamp": 1609640686, "sha": "0a4fbd8c", "message": "chore(data/prod): add `prod.forall'` and `prod.exists'` (#5570)\nThey work a bit better with curried functions.", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "exists'", ["prod"]], ["del", "theorem", "exists", ["prod"]], ["add", "theorem", "forall'", ["prod"]], ["del", "theorem", "forall", ["prod"]], ["add", "theorem", "«exists»", ["prod"]], ["add", "theorem", "«forall»", ["prod"]]]}]}, {"timestamp": 1609640683, "sha": "0dc7a27c", "message": "feat(data/nat/fib): fib n is a strong divisibility sequence (#5555)", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["add", "theorem", "fib_add", ["nat"]], ["add", "theorem", "fib_coprime_fib_succ", ["nat"]], ["add", "theorem", "fib_dvd", ["nat"]], ["add", "theorem", "fib_gcd", ["nat"]], ["add", "theorem", "gcd_fib_add_mul_self", ["nat"]], ["add", "theorem", "gcd_fib_add_self", ["nat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "gcd_add_mul_self", ["nat"]]]}]}, {"timestamp": 1609640681, "sha": "9f252442", "message": "chore(data/finset/sort): upgrade `finset.mono_of_fin` to an `order_iso` (#5495)\n* Upgrade `finset.mono_of_fin` to an `order_embedding`.\n* Drop some lemmas that now immediately follow from `order_embedding.*`.\n* Upgrade `finset.mono_equiv_of_fin` to `order_iso`.\n* Define `list.nodup.nth_le_equiv` and `list.sorted.nth_le_iso`.\n* Upgrade `mono_equiv_of_fin` to an `order_iso`, make it `computable`.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["del", "theorem", "mono_of_fin_boundaries", ["composition"]], ["add", "theorem", "order_emb_of_fin_boundaries", ["composition"]], ["mod", "def", "boundary", ["composition_as_set"]], ["mod", "theorem", "boundary_zero", ["composition_as_set"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "coe_fin_range", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "coe_order_iso_of_fin_apply", ["finset"]], ["del", "def", "mono_of_fin", ["finset"]], ["del", "theorem", "mono_of_fin_bij_on", ["finset"]], ["del", "theorem", "mono_of_fin_eq_mono_of_fin_iff", ["finset"]], ["del", "theorem", "mono_of_fin_injective", ["finset"]], ["del", "theorem", "mono_of_fin_last", ["finset"]], ["del", "theorem", "mono_of_fin_singleton", ["finset"]], ["del", "theorem", "mono_of_fin_strict_mono", ["finset"]], ["del", "theorem", "mono_of_fin_unique'", ["finset"]], ["del", "theorem", "mono_of_fin_unique", ["finset"]], ["del", "theorem", "mono_of_fin_zero", ["finset"]], ["add", "def", "order_emb_of_fin", ["finset"]], ["add", "theorem", "order_emb_of_fin_apply", ["finset"]], ["add", "theorem", "order_emb_of_fin_eq_order_emb_of_fin_iff", ["finset"]], ["add", "theorem", "order_emb_of_fin_last", ["finset"]], ["add", "theorem", "order_emb_of_fin_singleton", ["finset"]], ["add", "theorem", "order_emb_of_fin_unique'", ["finset"]], ["add", "theorem", "order_emb_of_fin_unique", ["finset"]], ["add", "theorem", "order_emb_of_fin_zero", ["finset"]], ["add", "def", "order_iso_of_fin", ["finset"]], ["add", "theorem", "order_iso_of_fin_symm_apply", ["finset"]], ["del", "theorem", "range_mono_of_fin", ["finset"]], ["add", "theorem", "range_order_emb_of_fin", ["finset"]], ["mod", "theorem", "sort_sorted_lt", ["finset"]]]}, {"oldPath": "src/data/fintype/sort.lean", "newPath": "src/data/fintype/sort.lean", "changes": [["add", "def", "mono_equiv_of_fin", []]]}, {"oldPath": null, "newPath": "src/data/list/nodup_equiv_fin.lean", "changes": [["add", "theorem", "coe_nth_le_equiv_apply", ["list", "nodup"]], ["add", "theorem", "coe_nth_le_equiv_symm_apply", ["list", "nodup"]], ["add", "def", "nth_le_equiv", ["list", "nodup"]], ["add", "theorem", "coe_nth_le_iso_apply", ["list", "sorted"]], ["add", "theorem", "coe_nth_le_iso_symm_apply", ["list", "sorted"]], ["add", "def", "nth_le_iso", ["list", "sorted"]], ["add", "theorem", "nth_le_mono", ["list", "sorted"]], ["add", "theorem", "nth_le_strict_mono", ["list", "sorted"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "face_points'", ["affine", "simplex"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "def", "restr", ["multilinear_map"]]]}]}, {"timestamp": 1609640679, "sha": "9ea7e462", "message": "feat(linear_algebra/alternating): Show the link to linear_independent (#5477)", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "map_linear_dependent", ["alternating_map"]], ["add", "theorem", "map_update_sum", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["mod", "theorem", "map_sum", ["multilinear_map"]], ["mod", "theorem", "map_sum_finset", ["multilinear_map"]], ["mod", "theorem", "map_sum_finset_aux", ["multilinear_map"]], ["add", "theorem", "map_update_sum", ["multilinear_map"]]]}]}, {"timestamp": 1609640676, "sha": "04f8fd74", "message": "feat(group_theory/dihedral): add dihedral groups (#5171)\nContains a subset of the content of #1076 , but implemented slightly differently.\nIn #1076, finite and infinite dihedral groups are implemented separately, but a side effect of what I did was that `dihedral 0` corresponds to the infinite dihedral group.", "changes": [{"oldPath": null, "newPath": "src/group_theory/dihedral.lean", "changes": [["add", "theorem", "card", ["dihedral"]], ["add", "theorem", "one_def", ["dihedral"]], ["add", "theorem", "order_of_r", ["dihedral"]], ["add", "theorem", "order_of_r_one", ["dihedral"]], ["add", "theorem", "order_of_sr", ["dihedral"]], ["add", "theorem", "r_mul_r", ["dihedral"]], ["add", "theorem", "r_mul_sr", ["dihedral"]], ["add", "theorem", "r_one_pow", ["dihedral"]], ["add", "theorem", "r_one_pow_n", ["dihedral"]], ["add", "theorem", "sr_mul_r", ["dihedral"]], ["add", "theorem", "sr_mul_self", ["dihedral"]], ["add", "theorem", "sr_mul_sr", ["dihedral"]], ["add", "inductive", "dihedral", []]]}]}, {"timestamp": 1609634174, "sha": "ee2c963e", "message": "doc(overview): pluralization convention (#5583)\nNormalized pluralizations, according to the convention @PatrickMassot described", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1609634172, "sha": "e6982901", "message": "doc(overview): Add alternating_map (#5582)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1609634170, "sha": "1a39825b", "message": "doc(overview): combinatorics section (#5581)\nAdded overview entries for simple graphs and some pigeonhole principles", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1609634168, "sha": "5bff8872", "message": "doc(overview): add missing algebras to overview (#5579)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1609634166, "sha": "e0946065", "message": "chore(topology/algebra/ordered,analysis/specific_limits): two more limits (#5573)", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_pow_at_top_nhds_within_0_of_lt_1", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "div_at_top", ["filter", "tendsto"]]]}]}, {"timestamp": 1609621191, "sha": "aa88bb81", "message": "feat(measure_theory/borel_space): the inverse of a closed embedding is measurable (#5567)", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "preimage_inv_fun_of_mem", ["set"]], ["add", "theorem", "preimage_inv_fun_of_not_mem", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_inv_fun", ["closed_embedding"]]]}]}, {"timestamp": 1609621189, "sha": "a7d05c45", "message": "chore(number_theory/bernoulli): refactor definition of bernoulli (#5534)\nA minor refactor of the definition of Bernoulli number, and I expanded the docstring.", "changes": [{"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}]}, {"timestamp": 1609621188, "sha": "12b5024b", "message": "feat(data/polynomial/erase_lead): add lemma erase_lead_card_support_eq (#5529)\nOne further lemma to increase the API of `erase_lead`. I use it to simplify the proof of the Liouville PR. In particular, it is used in a step of the proof that you can \"clear denominators\" when evaluating a polynomial with integer coefficients at a rational number.", "changes": [{"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "erase_lead_card_support'", ["polynomial"]], ["add", "theorem", "erase_lead_card_support", ["polynomial"]]]}]}, {"timestamp": 1609610015, "sha": "fceb7c1a", "message": "chore(algebra/group,algebra/group_with_zero): a few more injective/surjective constructors (#5547)", "changes": [{"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}]}, {"timestamp": 1609599958, "sha": "e142c825", "message": "feat(algebra/group/prod) Units of a product monoid (#5563)\nJust a simple seemingly missing def", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "def", "units", ["prod"]]]}]}, {"timestamp": 1609582706, "sha": "e35a703f", "message": "feat(algebra/ordered_{group,field}): more lemmas relating inv and mul inequalities (#5561)\nI also renamed `inv_le_iff_one_le_mul` to `inv_le_iff_one_le_mul'` for consistency with `div_le_iff` and `div_le_iff'` (unprimed lemmas involve multiplication on the right and primed lemmas involve multiplication on the left).", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "inv_pos_le_iff_one_le_mul'", []], ["add", "theorem", "inv_pos_le_iff_one_le_mul", []], ["add", "theorem", "inv_pos_lt_iff_one_lt_mul'", []], ["add", "theorem", "inv_pos_lt_iff_one_lt_mul", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "inv_le_iff_one_le_mul'", []], ["mod", "theorem", "inv_le_iff_one_le_mul", []], ["add", "theorem", "inv_lt_iff_one_lt_mul'", []], ["add", "theorem", "inv_lt_iff_one_lt_mul", []], ["add", "theorem", "le_inv_iff_mul_le_one'", []], ["add", "theorem", "lt_inv_iff_mul_lt_one'", []], ["add", "theorem", "lt_inv_iff_mul_lt_one", []]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}]}, {"timestamp": 1609582705, "sha": "f5f879e2", "message": "feat(linear_algebra/dimension): linear equiv iff eq dim (#5559)\nSee related zulip discussion\nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Classification.20of.20finite-dimensional.20vector.20spaces/near/221357275", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["del", "def", "equiv_of_is_basis'", []], ["del", "def", "equiv_of_is_basis", []], ["del", "theorem", "equiv_of_is_basis_comp", []], ["del", "theorem", "equiv_of_is_basis_refl", []], ["del", "theorem", "equiv_of_is_basis_symm_trans", []], ["del", "theorem", "equiv_of_is_basis_trans_symm", []], ["add", "def", "linear_equiv_of_is_basis'", []], ["add", "def", "linear_equiv_of_is_basis", []], ["add", "theorem", "linear_equiv_of_is_basis_comp", []], ["add", "theorem", "linear_equiv_of_is_basis_refl", []], ["add", "theorem", "linear_equiv_of_is_basis_symm_trans", []], ["add", "theorem", "linear_equiv_of_is_basis_trans_symm", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "lift_dim_eq", ["linear_equiv"]], ["add", "theorem", "nonempty_equiv_iff_dim_eq", ["linear_equiv"]], ["add", "theorem", "nonempty_equiv_iff_lift_dim_eq", ["linear_equiv"]], ["add", "def", "of_dim_eq", ["linear_equiv"]], ["add", "def", "of_lift_dim_eq", ["linear_equiv"]], ["add", "theorem", "nonempty_linear_equiv_of_dim_eq", []], ["add", "theorem", "nonempty_linear_equiv_of_lift_dim_eq", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "nonempty_linear_equiv_iff_findim_eq", ["finite_dimensional"]], ["add", "theorem", "nonempty_linear_equiv_of_findim_eq", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}]}, {"timestamp": 1609582702, "sha": "9f6300e9", "message": "chore(data/complex/basic): upgrade `complex.norm_sq` to a `monoid_with_zero_hom` (#5553)", "changes": [{"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "map_div", ["monoid_with_zero_hom"]], ["mod", "theorem", "map_eq_zero", ["monoid_with_zero_hom"]], ["mod", "theorem", "map_inv'", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "def", "norm_sq", ["complex"]], ["add", "theorem", "norm_sq_apply", ["complex"]], ["mod", "theorem", "norm_sq_eq_zero", ["complex"]], ["mod", "theorem", "norm_sq_mul", ["complex"]], ["mod", "theorem", "norm_sq_one", ["complex"]], ["mod", "theorem", "norm_sq_zero", ["complex"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "def", "norm_sq", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_eq_def'", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_one", ["is_R_or_C"]], ["mod", "theorem", "norm_sq_zero", ["is_R_or_C"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1609582700, "sha": "9d3c05ad", "message": "feat(ring_theory/simple_module): simple modules and Schur's Lemma (#5473)\nDefines `is_simple_module` in terms of `is_simple_lattice`\nProves Schur's Lemma\nDefines `division ring` structure on the endomorphism ring of a simple module", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "range_eq_bot", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/ring_theory/simple_module.lean", "changes": [["add", "theorem", "nontrivial", ["is_simple_module"]], ["add", "def", "is_simple_module", []], ["add", "theorem", "bijective_of_ne_zero", ["linear_map"]], ["add", "theorem", "bijective_or_eq_zero", ["linear_map"]], ["add", "theorem", "injective_of_ne_zero", ["linear_map"]], ["add", "theorem", "injective_or_eq_zero", ["linear_map"]], ["add", "theorem", "surjective_of_ne_zero", ["linear_map"]], ["add", "theorem", "surjective_or_eq_zero", ["linear_map"]]]}]}, {"timestamp": 1609582698, "sha": "afc3f03a", "message": "feat(algebra/ordered_group): add linear_ordered_comm_group and linear_ordered_cancel_comm_monoid (#5286)\nWe have `linear_ordered_add_comm_group` but we didn't have `linear_ordered_comm_group`. This PR adds it, as well as multiplicative versions of `canonically_ordered_add_monoid`, `canonically_linear_ordered_add_monoid` and `linear_ordered_cancel_add_comm_monoid`. I added multiplicative versions of the lemmas about these structures too. The motivation is that I want to slightly generalise the notion of a valuation.\n[ also random other bits of tidying which I noticed along the way (docstring fixes, adding `norm_cast` attributes) ].", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": [["del", "theorem", "add_eq_zero_iff", []], ["add", "theorem", "bot_eq_one", []], ["del", "theorem", "bot_eq_zero", []], ["del", "theorem", "exists_pos_add_of_lt", []], ["add", "theorem", "exists_pos_mul_of_lt", []], ["del", "theorem", "le_add_left", []], ["del", "theorem", "le_add_right", []], ["del", "theorem", "le_iff_exists_add", []], ["add", "theorem", "le_iff_exists_mul", []], ["add", "theorem", "le_mul_left", []], ["add", "theorem", "le_mul_right", []], ["add", "theorem", "le_one_iff_eq", []], ["del", "theorem", "le_zero_iff_eq", []], ["del", "theorem", "max_add_add_left", []], ["del", "theorem", "max_add_add_right", []], ["del", "theorem", "max_le_add_of_nonneg", []], ["add", "theorem", "max_le_mul_of_one_le", []], ["add", "theorem", "max_mul_mul_left", []], ["add", "theorem", "max_mul_mul_right", []], ["del", "theorem", "min_add_add_left", []], ["del", "theorem", "min_add_add_right", []], ["del", "theorem", "min_le_add_of_nonneg_left", []], ["del", "theorem", "min_le_add_of_nonneg_right", []], ["add", "theorem", "min_le_mul_of_one_le_left", []], ["add", "theorem", "min_le_mul_of_one_le_right", []], ["add", "theorem", "min_mul_mul_left", []], ["add", "theorem", "min_mul_mul_right", []], ["add", "theorem", "mul_eq_one_iff", []], ["add", "theorem", "one_le", []], ["add", "theorem", "one_lt_iff_ne_one", []], ["del", "theorem", "zero_le", []], ["del", "theorem", "zero_lt_iff_ne_zero", []]]}]}, {"timestamp": 1609571453, "sha": "d94f0a27", "message": "chore(data/list): a list sorted w.r.t. `(<)` has no duplicates (#5550)", "changes": [{"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "ne_of_irrefl", []]]}]}, {"timestamp": 1609547818, "sha": "409ea425", "message": "chore(algebra/*): move some lemmas to `div_inv_monoid` (#5552)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "mul_div_assoc'", []]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "mul_div_assoc'", []], ["add", "theorem", "mul_div_assoc", []], ["add", "theorem", "one_div", []], ["del", "theorem", "zero_sub", []]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "mul_div_assoc", []], ["del", "theorem", "one_div", []]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}]}, {"timestamp": 1609547816, "sha": "06a11fd5", "message": "chore(data/fintype/card): generalize `equiv.prod_comp` to `function.bijective.prod_comp` (#5551)\nThis way we can apply it to `add_equiv`, `mul_equiv`, `order_iso`, etc\nwithout using `to_equiv`.", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_comp", ["function", "bijective"]]]}]}, {"timestamp": 1609547814, "sha": "ea3815fb", "message": "feat(analysis/normed_space/inner_product): upgrade orthogonal projection to a continuous linear map (#5543)\nUpgrade the orthogonal projection, from a linear map `E →ₗ[𝕜] K` to a continuous linear map `E →L[𝕜] K`.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "def", "orthogonal_projection", []], ["add", "theorem", "orthogonal_projection_fn_norm_sq", []], ["add", "theorem", "orthogonal_projection_norm_le", []]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1609547813, "sha": "b57d562c", "message": "feat(algebra/big_operators/nat_antidiagonal): add prod_antidiagonal_eq_prod_range_succ (#5528)\nSometimes summing over nat.antidiagonal is nicer than summing over range(n+1).", "changes": [{"oldPath": "src/algebra/big_operators/nat_antidiagonal.lean", "newPath": "src/algebra/big_operators/nat_antidiagonal.lean", "changes": [["add", "theorem", "prod_antidiagonal_eq_prod_range_succ", ["finset", "nat"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "mem_range_succ_iff", ["finset"]]]}]}, {"timestamp": 1609547809, "sha": "c32efeae", "message": "feat(data/fin): there is at most one `order_iso` from `fin n` to `α` (#5499)\n* Define a `bounded_lattice` instance on `fin (n + 1)`.\n* Prove that there is at most one `order_iso` from `fin n` to `α`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "coe_cast", ["fin"]], ["add", "theorem", "coe_order_iso_apply", ["fin"]], ["add", "theorem", "mk_le_of_le_coe", ["fin"]], ["add", "theorem", "mk_lt_of_lt_coe", ["fin"]], ["add", "theorem", "order_embedding_eq", ["fin"]], ["add", "theorem", "strict_mono_unique", ["fin"]]]}]}, {"timestamp": 1609536360, "sha": "8aa23326", "message": "chore(*): golf some proofs (#5548)\nParts of #5539", "changes": [{"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "add_eq_top", ["ennreal"]], ["mod", "theorem", "add_lt_top", ["ennreal"]], ["add", "theorem", "mul_lt_mul", ["ennreal"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1609536358, "sha": "e0030ffe", "message": "chore(data/real/cau_seq): golf some proofs (#5545)", "changes": [{"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["add", "def", "abv_hom", ["is_absolute_value"]], ["del", "theorem", "abv_one'", ["is_absolute_value"]], ["mod", "theorem", "abv_one", ["is_absolute_value"]], ["mod", "theorem", "abv_pow", ["is_absolute_value"]]]}]}, {"timestamp": 1609527730, "sha": "b542cfbc", "message": "chore(linear_algebra/basic): notation for span of a singleton (#5538)\nNotation `∙` (`\\.`) for the span of a single element of a module, so one can write `R ∙ x` instead of `span R {x}`. This in itself does not save so many keystrokes, but it also seems to be a bit more robust: it works in settings where previously one had to type `span R ({x} : set M)` because the type of the singleton was not recognised.\n[Zulip 1](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/New.20linear.20algebra.20notation), [Zulip 2](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Notation.20for.20span)", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["mod", "theorem", "one_eq_span", ["submodule"]]]}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["mod", "theorem", "to_submodule_bot", ["algebra"]]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "coord", ["continuous_linear_equiv"]], ["mod", "def", "to_span_nonzero_singleton", ["continuous_linear_equiv"]]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "coord", ["linear_equiv"]], ["mod", "theorem", "coord_self", ["linear_equiv"]], ["mod", "def", "to_span_nonzero_singleton", ["linear_equiv"]], ["mod", "theorem", "span_singleton_eq_range", ["linear_map"]], ["mod", "theorem", "lt_add_iff_not_mem", ["submodule"]], ["mod", "theorem", "mem_span_singleton", ["submodule"]], ["mod", "theorem", "mem_span_singleton_self", ["submodule"]], ["mod", "theorem", "nontrivial_span_singleton", ["submodule"]], ["mod", "theorem", "span_singleton_eq_bot", ["submodule"]], ["mod", "theorem", "span_singleton_eq_range", ["submodule"]], ["mod", "theorem", "span_singleton_le_iff_mem", ["submodule"]], ["mod", "theorem", "span_singleton_smul_le", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_submodule_le_one_iff'", []], ["mod", "theorem", "dim_submodule_le_one_iff", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}]}, {"timestamp": 1609514656, "sha": "fcbaf625", "message": "doc(lint/type_classes): add has_coe_to_fun linter (#5546)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1609464809, "sha": "d2bde119", "message": "chore(scripts): update nolints.txt (#5554)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1609442249, "sha": "54bf708d", "message": "feat(logic/basic): exists_unique_false simp lemma (#5544)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_unique_false", []]]}]}, {"timestamp": 1609432228, "sha": "0830bfd4", "message": "refactor(analysis/analytic/basic): redefine `formal_multilinear_series.radius` (#5349)\nWith the new definition, (a) some proofs get much shorter; (b) we\ndon't need `rpow` in `analytic/basic`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["del", "theorem", "bound_of_lt_radius", ["formal_multilinear_series"]], ["mod", "def", "change_origin", ["formal_multilinear_series"]], ["del", "theorem", "geometric_bound_of_lt_radius", ["formal_multilinear_series"]], ["add", "theorem", "is_o_of_lt_radius", ["formal_multilinear_series"]], ["add", "theorem", "is_o_one_of_lt_radius", ["formal_multilinear_series"]], ["mod", "theorem", "le_radius_of_bound", ["formal_multilinear_series"]], ["add", "theorem", "le_radius_of_bound_nnreal", ["formal_multilinear_series"]], ["add", "theorem", "le_radius_of_is_O", ["formal_multilinear_series"]], ["add", "theorem", "lt_radius_of_is_O", ["formal_multilinear_series"]], ["add", "theorem", "nnnorm_mul_pow_le_of_lt_radius", ["formal_multilinear_series"]], ["add", "theorem", "norm_mul_pow_le_mul_pow_of_lt_radius", ["formal_multilinear_series"]], ["add", "theorem", "norm_mul_pow_le_of_lt_radius", ["formal_multilinear_series"]], ["mod", "theorem", "radius_neg", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/analytic/radius_liminf.lean", "changes": [["add", "theorem", "radius_eq_liminf", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}]}, {"timestamp": 1609409223, "sha": "10f6c151", "message": "chore(analysis/normed_space/inner_product): notation for orthogonal complement (#5536)\nNotation for `submodule.orthogonal`, so that one can write `Kᗮ` instead of `K.orthogonal`.\nSimultaneous PR\nhttps://github.com/leanprover/vscode-lean/pull/246\nadds `\\perp` as vscode shorthand for this symbol.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/New.20linear.20algebra.20notation)", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "theorem", "orthogonal_eq_inter", []], ["mod", "theorem", "Inf_orthogonal", ["submodule"]], ["mod", "theorem", "bot_orthogonal_eq_top", ["submodule"]], ["mod", "theorem", "inf_orthogonal", ["submodule"]], ["mod", "theorem", "infi_orthogonal", ["submodule"]], ["mod", "theorem", "is_closed_orthogonal", ["submodule"]], ["mod", "theorem", "le_orthogonal_orthogonal", ["submodule"]], ["mod", "theorem", "mem_orthogonal'", ["submodule"]], ["mod", "theorem", "mem_orthogonal", ["submodule"]], ["mod", "theorem", "orthogonal_disjoint", ["submodule"]], ["mod", "theorem", "orthogonal_le", ["submodule"]], ["mod", "theorem", "orthogonal_orthogonal", ["submodule"]], ["mod", "theorem", "top_orthogonal_eq_bot", ["submodule"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}]}, {"timestamp": 1609404548, "sha": "cca63650", "message": "feat(field_theory/galois): is_galois.tfae (#5542)\nThis is a TFAE theorem for is_galois", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["add", "theorem", "tfae", ["is_galois"]]]}]}, {"timestamp": 1609394657, "sha": "b04aeb5e", "message": "chore(algebra): move lemmas from ring_theory.algebra_tower to algebra.algebra.tower (#5506)\nMoved some basic lemmas from `ring_theory.algebra_tower` to `algebra.algebra.tower`.", "changes": [{"oldPath": null, "newPath": "src/algebra/algebra/tower.lean", "changes": [["add", "def", "lsmul", ["algebra"]], ["add", "theorem", "lsmul_coe", ["algebra"]], ["add", "theorem", "ext", ["is_scalar_tower", "algebra"]], ["add", "theorem", "algebra_comap_eq", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_apply", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_eq", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_smul", ["is_scalar_tower"]], ["add", "theorem", "coe_restrict_base'", ["is_scalar_tower"]], ["add", "theorem", "coe_restrict_base", ["is_scalar_tower"]], ["add", "theorem", "coe_to_alg_hom'", ["is_scalar_tower"]], ["add", "theorem", "coe_to_alg_hom", ["is_scalar_tower"]], ["add", "theorem", "of_algebra_map_eq'", ["is_scalar_tower"]], ["add", "theorem", "of_algebra_map_eq", ["is_scalar_tower"]], ["add", "theorem", "range_under_adjoin", ["is_scalar_tower"]], ["add", "def", "restrict_base", ["is_scalar_tower"]], ["add", "theorem", "restrict_base_apply", ["is_scalar_tower"]], ["add", "def", "to_alg_hom", ["is_scalar_tower"]], ["add", "theorem", "to_alg_hom_apply", ["is_scalar_tower"]], ["add", "theorem", "mem_res", ["subalgebra"]], ["add", "def", "of_under", ["subalgebra"]], ["add", "def", "res", ["subalgebra"]], ["add", "theorem", "res_inj", ["subalgebra"]], ["add", "theorem", "res_top", ["subalgebra"]], ["add", "theorem", "smul_mem_span_smul'", ["submodule"]], ["add", "theorem", "smul_mem_span_smul", ["submodule"]], ["add", "theorem", "smul_mem_span_smul_of_mem", ["submodule"]], ["add", "theorem", "span_smul", ["submodule"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "theorem", "ext", ["is_scalar_tower", "algebra"]], ["del", "theorem", "algebra_comap_eq", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_apply", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_eq", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_smul", ["is_scalar_tower"]], ["del", "theorem", "of_algebra_map_eq", ["is_scalar_tower"]], ["del", "theorem", "range_under_adjoin", ["is_scalar_tower"]], ["del", "def", "restrict_base", ["is_scalar_tower"]], ["del", "theorem", "restrict_base_apply", ["is_scalar_tower"]], ["del", "theorem", "smul_left_comm", ["is_scalar_tower"]], ["del", "def", "to_alg_hom", ["is_scalar_tower"]], ["del", "theorem", "to_alg_hom_apply", ["is_scalar_tower"]], ["del", "theorem", "mem_res", ["subalgebra"]], ["del", "def", "of_under", ["subalgebra"]], ["del", "def", "res", ["subalgebra"]], ["del", "theorem", "res_inj", ["subalgebra"]], ["del", "theorem", "res_top", ["subalgebra"]], ["del", "theorem", "smul_mem_span_smul'", ["submodule"]], ["del", "theorem", "smul_mem_span_smul", ["submodule"]], ["del", "theorem", "smul_mem_span_smul_of_mem", ["submodule"]], ["del", "theorem", "span_smul", ["submodule"]]]}]}, {"timestamp": 1609383206, "sha": "a40f31fb", "message": "feat(data/tprod): finite products of types (#5385)\nThis PR defined `list.tprod` as a finite product of types to transfer results from binary products to finitary products.\nSee module doc for more info.", "changes": [{"oldPath": null, "newPath": "src/data/tprod.lean", "changes": [["add", "theorem", "elim_mk", ["list", "tprod"]], ["add", "theorem", "elim_of_mem", ["list", "tprod"]], ["add", "theorem", "elim_of_ne", ["list", "tprod"]], ["add", "theorem", "elim_self", ["list", "tprod"]], ["add", "theorem", "ext", ["list", "tprod"]], ["add", "theorem", "fst_mk", ["list", "tprod"]], ["add", "theorem", "mk_elim", ["list", "tprod"]], ["add", "def", "pi_equiv_tprod", ["list", "tprod"]], ["add", "theorem", "snd_mk", ["list", "tprod"]], ["add", "def", "tprod", ["list"]], ["add", "theorem", "elim_preimage_pi", ["set"]], ["add", "theorem", "mk_preimage_tprod", ["set"]]]}]}, {"timestamp": 1609378657, "sha": "611b73eb", "message": "chore(scripts): update nolints.txt (#5540)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1609370152, "sha": "9c46cadc", "message": "feat(field_theory/algebraic_closure): algebraically closed fields have no nontrivial algebraic extensions (#5537)", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "algebra_map_surjective_of_is_algebraic", ["is_alg_closed"]], ["add", "theorem", "algebra_map_surjective_of_is_integral", ["is_alg_closed"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_iff_is_integral'", []]]}]}, {"timestamp": 1609360997, "sha": "6e0d0fa4", "message": "chore(algebra/field): use `K` as a type variable (#5535)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "add_div'", []], ["mod", "theorem", "add_div", []], ["mod", "theorem", "add_div_eq_mul_add_div", []], ["mod", "theorem", "div_add'", []], ["mod", "theorem", "div_add_div", []], ["mod", "theorem", "div_add_div_same", []], ["mod", "theorem", "div_neg", []], ["mod", "theorem", "div_neg_eq_neg_div", []], ["mod", "theorem", "div_sub'", []], ["mod", "theorem", "div_sub_div", []], ["mod", "theorem", "div_sub_div_same", []], ["mod", "theorem", "inv_add_inv", []], ["mod", "theorem", "inv_sub_inv", []], ["mod", "theorem", "inverse_eq_has_inv", []], ["mod", "theorem", "mul_div_assoc'", []], ["mod", "theorem", "neg_div'", []], ["mod", "theorem", "neg_div", []], ["mod", "theorem", "neg_div_neg_eq", []], ["mod", "theorem", "one_div_add_one_div", []], ["mod", "theorem", "one_div_neg_eq_neg_one_div", []], ["mod", "theorem", "one_div_neg_one_eq_neg_one", []], ["mod", "theorem", "sub_div'", []], ["mod", "theorem", "sub_div", []]]}]}, {"timestamp": 1609360995, "sha": "99881936", "message": "feat(measure_theory): various additions (#5389)\nSome computations of measures on non-measurable sets\nSome more measurability lemmas for pi-types\nCleanup in `measure_space`", "changes": [{"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "Inter_fintype", ["is_measurable"]], ["add", "theorem", "Union_fintype", ["is_measurable"]], ["add", "theorem", "pi", ["is_measurable"]], ["add", "theorem", "pi_fintype", ["is_measurable"]], ["add", "theorem", "pi_univ", ["is_measurable"]], ["mod", "theorem", "is_measurable_pi", []], ["add", "theorem", "is_measurable_pi_of_nonempty", []], ["add", "theorem", "eval", ["measurable"]], ["add", "def", "Pi_congr_right", ["measurable_equiv"]], ["add", "theorem", "coe_mk", ["measurable_equiv"]], ["add", "theorem", "coe_symm_mk", ["measurable_equiv"]], ["add", "theorem", "measurable_pi_iff", []], ["add", "theorem", "measurable_update", []], ["add", "theorem", "nonempty_measurable_superset", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "def", "completion", []], ["mod", "theorem", "diff_null", ["is_measurable"]], ["mod", "theorem", "is_null_measurable", ["is_measurable"]], ["mod", "theorem", "Union_nat", ["is_null_measurable"]], ["mod", "theorem", "compl", ["is_null_measurable"]], ["mod", "theorem", "diff_null", ["is_null_measurable"]], ["mod", "theorem", "union_null", ["is_null_measurable"]], ["mod", "def", "is_null_measurable", []], ["mod", "theorem", "is_null_measurable_iff", []], ["mod", "theorem", "is_null_measurable_measure_eq", []], ["mod", "theorem", "is_null_measurable_of_complete", []], ["mod", "theorem", "ae_all_iff", ["measure_theory"]], ["mod", "theorem", "ae_ball_iff", ["measure_theory"]], ["mod", "theorem", "ae_eq_empty", ["measure_theory"]], ["mod", "theorem", "ae_eq_refl", ["measure_theory"]], ["mod", "theorem", "ae_eq_symm", ["measure_theory"]], ["mod", "theorem", "ae_eq_trans", ["measure_theory"]], ["mod", "theorem", "ae_le_set", ["measure_theory"]], ["mod", "theorem", "ae_map_iff", ["measure_theory"]], ["mod", "theorem", "ae_of_all", ["measure_theory"]], ["mod", "theorem", "ae_restrict_eq", ["measure_theory"]], ["mod", "theorem", "ae_restrict_iff", ["measure_theory"]], ["mod", "theorem", "diff_ae_eq_self", ["measure_theory"]], ["mod", "theorem", "eventually_eq_dirac'", ["measure_theory"]], ["mod", "theorem", "eventually_eq_dirac", ["measure_theory"]], ["mod", "theorem", "exists_is_measurable_superset_iff_measure_eq_zero", ["measure_theory"]], ["mod", "theorem", "exists_is_measurable_superset_of_measure_eq_zero", ["measure_theory"]], ["mod", "theorem", "le_to_measure_apply", ["measure_theory"]], ["mod", "theorem", "le_to_outer_measure_caratheodory", ["measure_theory"]], ["mod", "theorem", "Inf_apply", ["measure_theory", "measure"]], ["mod", "theorem", "add_apply", ["measure_theory", "measure"]], ["mod", "theorem", "coe_smul", ["measure_theory", "measure"]], ["mod", "theorem", "compl_mem_cofinite", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply_eq_top", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply_infinite", ["measure_theory", "measure"]], ["mod", "theorem", "count_apply_lt_top", ["measure_theory", "measure"]], ["mod", "theorem", "dirac_apply'", ["measure_theory", "measure"]], ["mod", "theorem", "dirac_apply", ["measure_theory", "measure"]], ["mod", "theorem", "dirac_apply_of_mem", ["measure_theory", "measure"]], ["mod", "theorem", "ext", ["measure_theory", "measure"]], ["mod", "theorem", "ext_iff", ["measure_theory", "measure"]], ["mod", "theorem", "finite_at_principal", ["measure_theory", "measure"]], ["mod", "def", "is_complete", ["measure_theory", "measure"]], ["mod", "theorem", "le_lift_linear_apply", ["measure_theory", "measure"]], ["add", "theorem", "le_map_apply", ["measure_theory", "measure"]], ["mod", "theorem", "le_sum", ["measure_theory", "measure"]], ["mod", "theorem", "map_comap_subtype_coe", ["measure_theory", "measure"]], ["mod", "theorem", "measure_univ_eq_zero", ["measure_theory", "measure"]], ["mod", "theorem", "mem_cofinite", ["measure_theory", "measure"]], ["mod", "def", "of_measurable", ["measure_theory", "measure"]], ["mod", "theorem", "of_measurable_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Inf_eq_Inf_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_apply_eq_supr", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_Union_le", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_add_restrict_compl", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_apply_eq_zero'", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_apply_eq_zero", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_compl_add_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_congr_meas", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_congr_mono", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_eq_zero", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_le_self", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_sum", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_to_outer_measure_eq_to_outer_measure_restrict", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_add_inter", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_apply", ["measure_theory", "measure"]], ["mod", "theorem", "restrict_union_congr", ["measure_theory", "measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "measure"]], ["mod", "theorem", "sub_apply", ["measure_theory", "measure"]], ["mod", "def", "sum", ["measure_theory", "measure"]], ["mod", "theorem", "sum_apply", ["measure_theory", "measure"]], ["mod", "theorem", "supr_restrict_spanning_sets", ["measure_theory", "measure"]], ["mod", "theorem", "to_outer_measure_injective", ["measure_theory", "measure"]], ["mod", "theorem", "measure_Union", ["measure_theory"]], ["mod", "theorem", "measure_Union_le", ["measure_theory"]], ["mod", "theorem", "measure_Union_null", ["measure_theory"]], ["mod", "theorem", "measure_Union_null_iff", ["measure_theory"]], ["mod", "theorem", "measure_compl", ["measure_theory"]], ["mod", "theorem", "measure_congr", ["measure_theory"]], ["mod", "theorem", "measure_countable", ["measure_theory"]], ["mod", "theorem", "measure_diff", ["measure_theory"]], ["add", "theorem", "measure_eq_infi'", ["measure_theory"]], ["mod", "theorem", "measure_eq_infi", ["measure_theory"]], ["mod", "theorem", "measure_eq_inter_diff", ["measure_theory"]], ["mod", "theorem", "measure_eq_trim", ["measure_theory"]], ["mod", "theorem", "measure_finite", ["measure_theory"]], ["mod", "theorem", "measure_if", ["measure_theory"]], ["mod", "theorem", "measure_mono_ae", ["measure_theory"]], ["mod", "theorem", "measure_union_add_inter", ["measure_theory"]], ["mod", "theorem", "measure_union_null", ["measure_theory"]], ["mod", "theorem", "measure_union_null_iff", ["measure_theory"]], ["mod", "theorem", "mem_ae_map_iff", ["measure_theory"]], ["mod", "theorem", "mem_dirac_ae_iff", ["measure_theory"]], ["mod", "def", "to_measure", ["measure_theory", "outer_measure"]], ["mod", "theorem", "restrict_congr_set", ["measure_theory"]], ["mod", "theorem", "restrict_mono_ae", ["measure_theory"]], ["mod", "theorem", "tendsto_measure_Inter", ["measure_theory"]], ["mod", "theorem", "tendsto_measure_Union", ["measure_theory"]], ["mod", "theorem", "to_measure_apply", ["measure_theory"]], ["mod", "theorem", "to_measure_to_outer_measure", ["measure_theory"]], ["mod", "theorem", "to_outer_measure_apply", ["measure_theory"]], ["mod", "theorem", "to_outer_measure_to_measure", ["measure_theory"]], ["mod", "theorem", "union_ae_eq_right", ["measure_theory"]], ["mod", "theorem", "finite_measure", ["metric", "bounded"]], ["mod", "theorem", "null_is_null_measurable", []], ["mod", "def", "null_measurable", []]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["add", "theorem", "prod_prod_le", ["measure_theory", "measure"]]]}]}, {"timestamp": 1609356560, "sha": "f1d2bc60", "message": "feat(order/lattice_intervals): lattice structures on intervals in lattices (#5496)\nDefines (semi-)lattice structures on intervals in lattices", "changes": [{"oldPath": null, "newPath": "src/order/lattice_intervals.lean", "changes": [["add", "def", "bounded_lattice", ["set", "Icc"]], ["add", "def", "order_bot", ["set", "Icc"]], ["add", "def", "order_top", ["set", "Icc"]], ["add", "def", "semilattice_inf_bot", ["set", "Icc"]], ["add", "def", "semilattice_inf_top", ["set", "Icc"]], ["add", "def", "semilattice_sup_bot", ["set", "Icc"]], ["add", "def", "semilattice_sup_top", ["set", "Icc"]], ["add", "theorem", "coe_bot", ["set", "Ici"]], ["add", "theorem", "coe_top", ["set", "Ici"]], ["add", "def", "order_bot", ["set", "Ico"]], ["add", "def", "semilattice_inf_bot", ["set", "Ico"]], ["add", "theorem", "coe_bot", ["set", "Iic"]], ["add", "theorem", "coe_top", ["set", "Iic"]], ["add", "def", "order_top", ["set", "Ioc"]], ["add", "def", "semilattice_sup_top", ["set", "Ioc"]]]}]}, {"timestamp": 1609349634, "sha": "16320e2e", "message": "chore(topology/algebra/infinite_sum): refactor `tsum_mul_left/right` (#5533)\n* move old lemmas to `summable` namespace;\n* add new `tsum_mul_left` and `tsum_mul_right` that work in a `division_ring` without a `summable` assumption.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "nonneg", ["has_sum"]], ["add", "theorem", "nonpos", ["has_sum"]], ["add", "theorem", "tsum_mul_left", ["summable"]], ["add", "theorem", "tsum_mul_right", ["summable"]], ["mod", "theorem", "tsum_mul_left", []], ["mod", "theorem", "tsum_mul_right", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "tsum_mul_left", ["nnreal"]], ["add", "theorem", "tsum_mul_right", ["nnreal"]]]}]}, {"timestamp": 1609349632, "sha": "958c407a", "message": "chore(analysis/normed_space/basic): a few lemmas about `nnnorm` (#5532)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "coe_nnnorm", []], ["add", "theorem", "mem_emetric_ball_0_iff", []], ["add", "theorem", "nnnorm_div", ["normed_field"]], ["add", "theorem", "nnnorm_fpow", ["normed_field"]], ["add", "def", "nnnorm_hom", ["normed_field"]], ["add", "theorem", "nnnorm_mul", ["normed_field"]], ["add", "theorem", "nnnorm_pow", ["normed_field"]], ["add", "theorem", "nnnorm_prod", ["normed_field"]]]}]}, {"timestamp": 1609343477, "sha": "b15bb06e", "message": "feat(topology/instances/ennreal): a sufficient condition for `f : (Σ i, β i) → ℝ` to be summable (#5531)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "summable_sigma", ["nnreal"]], ["add", "theorem", "summable_sigma_of_nonneg", []]]}]}, {"timestamp": 1609343473, "sha": "38ba6ba2", "message": "chore(data/real/{e,}nnreal): a few lemmas (#5530)\n* Rename `nnreal.le_of_forall_lt_one_mul_lt` to\n `nnreal.le_of_forall_lt_one_mul_le`, and similarly for `ennreal`.\n* Move the proof of the latter lemma to `topology/instances/ennreal`,\n prove it using continuity of multiplication.\n* Add `ennreal.le_of_forall_nnreal_lt`, `nnreal.lt_div_iff`, and\n `nnreal.mul_lt_of_lt_div`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "le_of_forall_lt_one_mul_lt", ["ennreal"]], ["add", "theorem", "le_of_forall_nnreal_lt", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "le_of_forall_lt_one_mul_le", ["nnreal"]], ["del", "theorem", "le_of_forall_lt_one_mul_lt", ["nnreal"]], ["add", "theorem", "lt_div_iff", ["nnreal"]], ["add", "theorem", "mul_lt_of_lt_div", ["nnreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "le_of_forall_lt_one_mul_le", ["ennreal"]]]}]}, {"timestamp": 1609343471, "sha": "c82be35d", "message": "feat(analysis/normed_space/inner_product): orthogonal complement lemmas (#5474)\nThe orthogonal complement of a subspace is closed. The orthogonal complement of the orthogonal complement of a complete subspace is itself.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "def", "inner_right", []], ["add", "theorem", "inner_right_apply", []], ["add", "theorem", "inner_right_coe", []], ["add", "theorem", "orthogonal_eq_inter", []], ["add", "theorem", "exists_sum_mem_mem_orthogonal", ["submodule"]], ["add", "theorem", "is_closed_orthogonal", ["submodule"]], ["add", "theorem", "orthogonal_orthogonal", ["submodule"]], ["add", "theorem", "sup_orthogonal_of_complete_space", ["submodule"]]]}]}, {"timestamp": 1609333548, "sha": "7a031718", "message": "chore(order/rel_iso): add some missing lemmas (#5492)\nAlso define `order_iso.trans`.", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "coe_subtype", ["order_embedding"]], ["add", "def", "subtype", ["order_embedding"]], ["add", "theorem", "coe_trans", ["order_iso"]], ["add", "theorem", "map_bot'", ["order_iso"]], ["mod", "theorem", "map_bot", ["order_iso"]], ["add", "theorem", "map_top'", ["order_iso"]], ["mod", "theorem", "map_top", ["order_iso"]], ["add", "theorem", "symm_apply_eq", ["order_iso"]], ["add", "theorem", "symm_injective", ["order_iso"]], ["add", "theorem", "symm_symm", ["order_iso"]], ["add", "def", "trans", ["order_iso"]], ["add", "theorem", "trans_apply", ["order_iso"]], ["add", "theorem", "coe_trans", ["rel_embedding"]], ["mod", "theorem", "trans_apply", ["rel_embedding"]], ["add", "theorem", "default_def", ["rel_iso"]], ["del", "def", "set_coe_embedding", []]]}]}, {"timestamp": 1609333546, "sha": "8545aa60", "message": "chore(topology/algebra/ordered): move code, add missing lemmas (#5481)\n* merge two sections about `linear_ordered_add_comm_group`;\n* add missing lemmas about limits of `f * g` when one of `f`, `g` tends to `-∞`, and another tends to a positive or negative constant;\n* drop `neg_preimage_closure` in favor of the new `neg_closure` in `topology/algebra/group`.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv_closure", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "at_bot_mul", ["filter", "tendsto"]], ["add", "theorem", "at_bot_mul_neg", ["filter", "tendsto"]], ["add", "theorem", "mul_at_bot", ["filter", "tendsto"]], ["add", "theorem", "neg_mul_at_bot", ["filter", "tendsto"]], ["add", "theorem", "neg_mul_at_top", ["filter", "tendsto"]], ["mod", "theorem", "tendsto_nhds", ["linear_ordered_add_comm_group"]], ["del", "theorem", "neg_preimage_closure", []], ["mod", "theorem", "nhds_eq_infi_abs_sub", []], ["mod", "theorem", "order_topology_of_nhds_abs", []]]}]}, {"timestamp": 1609322867, "sha": "5e86589d", "message": "chore(data/nat/enat): some useful lemmas (#5517)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "find_le", ["nat"]]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "coe_le_iff", ["enat"]], ["add", "theorem", "coe_lt_iff", ["enat"]], ["add", "theorem", "dom_coe", ["enat"]], ["add", "theorem", "dom_of_le_of_dom", ["enat"]], ["mod", "theorem", "dom_of_le_some", ["enat"]], ["add", "theorem", "dom_of_lt", ["enat"]], ["add", "theorem", "eq_top_iff_forall_le", ["enat"]], ["add", "theorem", "eq_top_iff_forall_lt", ["enat"]], ["add", "def", "find", ["enat"]], ["add", "theorem", "find_dom", ["enat"]], ["add", "theorem", "find_eq_top_iff", ["enat"]], ["add", "theorem", "find_get", ["enat"]], ["add", "theorem", "find_le", ["enat"]], ["add", "theorem", "get_coe'", ["enat"]], ["mod", "theorem", "get_coe", ["enat"]], ["mod", "theorem", "get_le_get", ["enat"]], ["add", "theorem", "le_coe_iff", ["enat"]], ["add", "theorem", "le_def", ["enat"]], ["add", "theorem", "lt_coe_iff", ["enat"]], ["add", "theorem", "lt_def", ["enat"]], ["add", "theorem", "lt_find", ["enat"]], ["add", "theorem", "lt_find_iff", ["enat"]], ["mod", "def", "to_with_top", ["enat"]], ["mod", "theorem", "to_with_top_zero'", ["enat"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["del", "theorem", "find_le", ["nat"]]]}, {"oldPath": "src/ring_theory/power_series/basic.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": []}]}, {"timestamp": 1609315261, "sha": "1c110ada", "message": "fix(tactic/linarith): elaborate and insert arguments before destructing hypotheses (#5501)\ncloses #5480\nArguments to `linarith` can depend on hypotheses (e.g. conjunctions) that get destructed during preprocessing, after which the arguments will no longer elaborate or typecheck. This just moves the elaboration earlier and adds these arguments as hypotheses themselves.", "changes": [{"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["add", "theorem", "bar", []]]}]}, {"timestamp": 1609292294, "sha": "7c6020f1", "message": "chore(scripts): update nolints.txt (#5526)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1609268767, "sha": "abffbaa3", "message": "feat(analysis/convex/specific_functions): log is concave (#5508)\nThis PR proves that the real log is concave on `Ioi 0` and `Iio 0`, and adds lemmas about concavity of functions along the way.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "concave_on_of_deriv2_nonpos", []], ["add", "theorem", "concave_on_of_deriv_antimono", []], ["add", "theorem", "concave_on_open_of_deriv2_nonpos", []], ["add", "theorem", "concave_on_univ_of_deriv2_nonpos", []], ["add", "theorem", "concave_on_univ_of_deriv_antimono", []], ["add", "theorem", "convex_on_open_of_deriv2_nonneg", []]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["add", "theorem", "concave_on_log_Iio", []], ["add", "theorem", "concave_on_log_Ioi", []]]}]}, {"timestamp": 1609228055, "sha": "8e413ebb", "message": "feat(order/bounded_lattice): define atoms, coatoms, and simple lattices (#5471)\nDefines `is_atom`, `is_coatom`, and `is_simple_lattice`\nRefactors `ideal.is_maximal` to use `is_coatom`, the new definition is definitionally equal to the old one", "changes": [{"oldPath": null, "newPath": "src/order/atoms.lean", "changes": [["add", "theorem", "eq_bot_or_eq_of_le_atom", []], ["add", "theorem", "eq_top_or_eq_of_coatom_le", []], ["add", "def", "is_atom", []], ["add", "theorem", "is_atom_iff_is_coatom_dual", []], ["add", "theorem", "is_atom_top", []], ["add", "def", "is_coatom", []], ["add", "theorem", "is_coatom_bot", []], ["add", "theorem", "is_coatom_iff_is_atom_dual", []], ["add", "theorem", "is_simple_lattice_iff_is_atom_top", []], ["add", "theorem", "is_simple_lattice_iff_is_coatom_bot", []], ["add", "theorem", "is_simple_lattice_iff_is_simple_lattice_order_dual", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_ne_top", []], ["add", "theorem", "top_ne_bot", []]]}, {"oldPath": "src/order/order_dual.lean", "newPath": "src/order/order_dual.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["mod", "def", "is_maximal", ["ideal"]]]}]}, {"timestamp": 1609210840, "sha": "15ff8653", "message": "doc(localized): update documentation (#5519)\nremove old warning\nremove duplicated documentation\nrename notation namespace to locale", "changes": [{"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}]}, {"timestamp": 1609205587, "sha": "297d97ea", "message": "chore(scripts): update nolints.txt (#5522)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1609176978, "sha": "41bad637", "message": "feat(polynomial/degree/definitions): nat_degree_X_pow (#5512)\nCompanion to degree_X_pow", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "nat_degree_X_pow", ["polynomial"]]]}]}, {"timestamp": 1609167801, "sha": "d245c4e0", "message": "feat(polynomial/algebra_map): aeval_comp (#5511)\nBasic lemma about aeval", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_comp", ["polynomial"]]]}]}, {"timestamp": 1609163713, "sha": "f1f2ca68", "message": "feat(category_theory/limits): preserves limits of equivalent shape (#5515)", "changes": [{"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "preserves_colimits_of_shape_of_equiv", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_of_equiv", ["category_theory", "limits"]]]}]}, {"timestamp": 1609126812, "sha": "6d1d4c13", "message": "chore(scripts): update nolints.txt (#5514)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1609115926, "sha": "6d0b415e", "message": "feat(data/list/basic): nth_zero (#5513)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_zero", ["list"]]]}]}, {"timestamp": 1609087259, "sha": "5c8c1222", "message": "chore(analysis/analytic/basic): speed up slow lemmas (#5507)\nRemoves slow `tidy`s from `formal_multilinear_series.change_origin_radius` and `formal_multilinear_series.change_origin_has_sum`", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}]}, {"timestamp": 1609042915, "sha": "1e75453f", "message": "feat(data/list/basic): filter_map retains prefix (#5453)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_map", ["list", "is_prefix"]], ["add", "theorem", "reduce_option", ["list", "is_prefix"]]]}]}, {"timestamp": 1609023279, "sha": "f7e728ad", "message": "feat(data/list/range): enum is a zip (#5457)", "changes": [{"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "enum_eq_zip_range", ["list"]], ["add", "theorem", "enum_from_eq_zip_range'", ["list"]], ["add", "theorem", "unzip_enum_eq_prod", ["list"]], ["add", "theorem", "unzip_enum_from_eq_prod", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "map_prod_left_eq_zip", ["list"]], ["add", "theorem", "map_prod_right_eq_zip", ["list"]], ["add", "theorem", "zip_of_prod", ["list"]]]}]}, {"timestamp": 1609015096, "sha": "ae60bb96", "message": "chore(topology/algebra/order): add `continuous_on.surj_on_of_tendsto` (#5502)\n* rename `surjective_of_continuous` to `continuous.surjective` and `surjective_of_continuous'` to `continuous.surjective'`;\n* add `continuous_on.surj_on_of_tendsto` and `continuous_on.surj_on_of_tendsto'`", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/data/real/sqrt.lean", "newPath": "src/data/real/sqrt.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "surjective'", ["continuous"]], ["add", "theorem", "surjective", ["continuous"]], ["add", "theorem", "surj_on_of_tendsto'", ["continuous_on"]], ["add", "theorem", "surj_on_of_tendsto", ["continuous_on"]], ["del", "theorem", "surjective_of_continuous'", []], ["del", "theorem", "surjective_of_continuous", []]]}]}, {"timestamp": 1608976064, "sha": "add100aa", "message": "feat(ring_theory/perfection): perfection.map (#5503)", "changes": [{"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": [["add", "theorem", "coeff_map", ["perfection"]], ["add", "theorem", "coeff_pow_p'", ["perfection"]], ["add", "theorem", "hom_ext", ["perfection"]], ["add", "def", "map", ["perfection"]], ["add", "theorem", "comp_equiv'", ["perfection_map"]], ["add", "theorem", "comp_equiv", ["perfection_map"]], ["add", "theorem", "comp_map", ["perfection_map"]], ["add", "theorem", "comp_symm_equiv'", ["perfection_map"]], ["add", "theorem", "comp_symm_equiv", ["perfection_map"]], ["add", "theorem", "equiv_apply", ["perfection_map"]], ["add", "theorem", "hom_ext", ["perfection_map"]], ["add", "theorem", "map_eq_map", ["perfection_map"]], ["add", "theorem", "map_map", ["perfection_map"]]]}]}, {"timestamp": 1608946266, "sha": "768497cd", "message": "chore(scripts): update nolints.txt (#5505)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608931767, "sha": "666035fa", "message": "fix(algebra/big_operators/basic): add docstrings for `sum_bij` and `sum_bij'` (#5497)\nThey don't seem to be there.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}]}, {"timestamp": 1608931766, "sha": "1a526b31", "message": "chore(topology/homeomorph): a few more lemmas, golf (#5467)", "changes": [{"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["mod", "theorem", "coinduced_eq", ["homeomorph"]], ["add", "theorem", "comap_nhds_eq", ["homeomorph"]], ["add", "theorem", "image_closure", ["homeomorph"]], ["add", "theorem", "image_preimage", ["homeomorph"]], ["mod", "theorem", "induced_eq", ["homeomorph"]], ["add", "theorem", "is_closed_image", ["homeomorph"]], ["add", "theorem", "is_closed_preimage", ["homeomorph"]], ["add", "theorem", "is_open_image", ["homeomorph"]], ["add", "theorem", "map_nhds_eq", ["homeomorph"]], ["add", "theorem", "nhds_eq_comap", ["homeomorph"]], ["add", "theorem", "preimage_closure", ["homeomorph"]], ["add", "theorem", "preimage_image", ["homeomorph"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}]}, {"timestamp": 1608921531, "sha": "726b7bfd", "message": "feat(analysis/specific_limits): a `tfae` about \"`f` grows exponentially slower than `R ^ n`\" (#5488)\nAlso add supporting lemmas here and there.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_bit0_nonneg", []], ["add", "theorem", "pow_bit0_pos", []], ["mod", "theorem", "pow_two_nonneg", []], ["mod", "theorem", "pow_two_pos_of_ne_zero", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "abs_pow", []], ["mod", "theorem", "one_add_mul_le_pow", []], ["mod", "theorem", "one_add_sub_mul_le_pow", []], ["add", "theorem", "pow_bit1_neg_iff", []], ["add", "theorem", "pow_bit1_nonneg_iff", []], ["add", "theorem", "pow_bit1_nonpos_iff", []], ["add", "theorem", "pow_bit1_pos_iff", []], ["add", "theorem", "sign_cases_of_C_mul_pow_nonneg", []], ["add", "theorem", "strict_mono_pow_bit1", []]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_O_one_nat_at_top_iff", ["asymptotics"]], ["mod", "theorem", "is_O_with_zero_right_iff", ["asymptotics"]], ["mod", "theorem", "is_O_zero_right_iff", ["asymptotics"]], ["mod", "theorem", "is_o_zero_right_iff", ["asymptotics"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "is_O_pow_pow_of_le_left", []], ["add", "theorem", "tfae_exists_lt_is_o_pow", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "coe_pow", ["nnreal"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "nonneg_of_eventually_pow_nonneg", ["filter"]], ["add", "theorem", "tendsto_bit0_at_bot", ["filter"]], ["add", "theorem", "tendsto_bit0_at_top", ["filter"]], ["add", "theorem", "tendsto_bit1_at_top", ["filter"]], ["add", "theorem", "zero_pow_eventually_eq", ["filter"]]]}]}, {"timestamp": 1608916205, "sha": "d968a61d", "message": "feat(category_theory/limits): yoneda reflects limits (#5447)\nyoneda and coyoneda jointly reflect limits", "changes": [{"oldPath": "src/category_theory/limits/yoneda.lean", "newPath": "src/category_theory/limits/yoneda.lean", "changes": [["add", "def", "coyoneda_jointly_reflects_limits", ["category_theory"]], ["add", "def", "yoneda_jointly_reflects_limits", ["category_theory"]]]}]}, {"timestamp": 1608904628, "sha": "f60fd080", "message": "chore(logic/basic): +2 simp lemmas (#5500)\n* simplify `a ∨ b ↔ a` to `b → a`;\n* simplify `a ∨ b ↔ b` to `a → b`.", "changes": [{"oldPath": "src/data/ordmap/ordset.lean", "newPath": "src/data/ordmap/ordset.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "or_iff_left_iff_imp", []], ["add", "theorem", "or_iff_right_iff_imp", []]]}]}, {"timestamp": 1608860525, "sha": "1f0231df", "message": "chore(scripts): update nolints.txt (#5498)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608839487, "sha": "feced767", "message": "feat(algebra/*): Noncomputable `group` structures from `is_unit` (#5427)\nNoncomputably defines the following group structures given that all (nonzero) elements are units:\n- `monoid` -> `group`\n- `comm_monoid` -> `comm_group`\n- `monoid_with_zero` -> `comm_group_with_zero`\n- `comm_monoid_with_zero` -> `comm_group_with_zero`\n- `ring` -> `division_ring`\n- `comm_ring` -> `field`", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}]}, {"timestamp": 1608828639, "sha": "f300c759", "message": "feat(data/list/basic): lemmas about reduce_option (#5450)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_map_append", ["list"]], ["add", "theorem", "reduce_option_append", ["list"]], ["add", "theorem", "reduce_option_concat", ["list"]], ["add", "theorem", "reduce_option_concat_of_some", ["list"]], ["add", "theorem", "reduce_option_cons_of_none", ["list"]], ["add", "theorem", "reduce_option_cons_of_some", ["list"]], ["add", "theorem", "reduce_option_length_eq_iff", ["list"]], ["add", "theorem", "reduce_option_length_le", ["list"]], ["add", "theorem", "reduce_option_length_lt_iff", ["list"]], ["add", "theorem", "reduce_option_map", ["list"]], ["add", "theorem", "reduce_option_mem_iff", ["list"]], ["add", "theorem", "reduce_option_nil", ["list"]], ["add", "theorem", "reduce_option_nth_iff", ["list"]], ["add", "theorem", "reduce_option_singleton", ["list"]]]}]}, {"timestamp": 1608821542, "sha": "3046436c", "message": "chore(linear_algebra/linear_independent): make a binding explicit in ne_zero (#5494)\nResubmitting #5479 from within the mathlib repo.", "changes": [{"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}]}, {"timestamp": 1608798935, "sha": "46614b02", "message": "chore(ring_theory/power_series/well_known): generalize (#5491)\n* generalize `power_series.exp`, `power_series.cos`, and `power_series.sin` to a `ℚ`-algebra;\n* define `alg_hom.mk'`;\n* rename `alg_hom_nat` to `ring_hom.to_nat_alg_hom`;\n* drop `alg_hom_int` (was equal to `ring_hom.to_int_alg_hom`);\n* add `ring_hom.to_rat_alg_hom`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "coe_mk'", ["alg_hom"]], ["add", "def", "mk'", ["alg_hom"]], ["del", "def", "alg_hom_int", []], ["del", "def", "alg_hom_nat", []], ["add", "theorem", "map_rat_algebra_map", ["ring_hom"]], ["mod", "def", "to_int_alg_hom", ["ring_hom"]], ["add", "def", "to_nat_alg_hom", ["ring_hom"]], ["add", "def", "to_rat_alg_hom", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/power_series/well_known.lean", "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["mod", "theorem", "coeff_exp", ["power_series"]], ["mod", "def", "cos", ["power_series"]], ["mod", "def", "exp", ["power_series"]], ["mod", "theorem", "map_cos", ["power_series"]], ["mod", "theorem", "map_exp", ["power_series"]], ["mod", "theorem", "map_sin", ["power_series"]], ["mod", "def", "sin", ["power_series"]]]}]}, {"timestamp": 1608798933, "sha": "8a038398", "message": "chore(scripts): update nolints.txt (#5490)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608794254, "sha": "2ae61be9", "message": "feat(field_theory/galois): is_galois.self (#5486)\nSome basic lemmas about is_separable, normal, and is_galois.", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}]}, {"timestamp": 1608761289, "sha": "63070edc", "message": "feat(data/list/chain): relate chain to refl trans gen (#5437)\nSome golf and a new lemma to convert a list chain to a refl trans gen", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["mod", "theorem", "induction", ["list", "chain"]], ["mod", "theorem", "induction_head", ["list", "chain"]], ["mod", "theorem", "exists_chain_of_relation_refl_trans_gen", ["list"]], ["add", "theorem", "relation_refl_trans_gen_of_exists_chain", ["list"]]]}]}, {"timestamp": 1608761287, "sha": "ceae5296", "message": "chore(group_theory/coset): Make `quotient_group.mk` an abbreviation (#5377)\nThis allows simp lemmas about `quotient.mk'` to apply here, which currently do not apply.\nThe definition doesn't seem interesting enough to be semireducible.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "def", "mk", ["quotient_group"]]]}]}, {"timestamp": 1608749924, "sha": "2a5a0b0e", "message": "feat(group_theory/*): mark some lemmas as ext (about homs out of free constructions) (#5484)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["add", "theorem", "ext_hom", ["free_group"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra.lean", "newPath": "src/linear_algebra/clifford_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/dfinsupp.lean", "newPath": "src/linear_algebra/dfinsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}]}, {"timestamp": 1608749922, "sha": "e2edba53", "message": "chore(order/filter/basic): make `filter.univ_mem_sets` a `simp` lemma (#5464)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "insert_nth_succ_nil", ["list"]]]}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": [["mod", "theorem", "core_univ", ["rel"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "univ_mem_sets", ["filter"]]]}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": [["mod", "theorem", "nhds_nil", []]]}]}, {"timestamp": 1608749918, "sha": "d3a5e067", "message": "feat(data/dlist/basic): dlist singleton and of_list simp lemmas (#5461)", "changes": [{"oldPath": "src/data/dlist/basic.lean", "newPath": "src/data/dlist/basic.lean", "changes": [["add", "theorem", "dlist_lazy", []], ["add", "theorem", "dlist_singleton", []]]}]}, {"timestamp": 1608739829, "sha": "fd9268cb", "message": "feat(data/list/basic): lemmas about scanl (#5454)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "length_scanl", ["list"]], ["add", "theorem", "length_singleton", ["list"]], ["add", "theorem", "nth_le_succ_scanl", ["list"]], ["add", "theorem", "nth_le_zero_scanl", ["list"]], ["add", "theorem", "nth_succ_scanl", ["list"]], ["add", "theorem", "nth_zero_scanl", ["list"]], ["add", "theorem", "scanl_cons", ["list"]], ["add", "theorem", "scanl_nil", ["list"]]]}]}, {"timestamp": 1608725502, "sha": "eb5cf252", "message": "chore(analysis/asymptotics): a few more lemmas (#5482)\n* golf some proofs;\n* `x ^ n = o (y ^ n)` as `n → ∞` provided that `0 ≤ x < y`;\n* lemmas about `is_O _ _ ⊤` etc;\n* if `is_O f g cofinite`, then for some `C>0` and any `x` such that `g x ≠ 0` we have `∥f x∥≤C*∥g x∥`.", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "bound_of_is_O_cofinite", ["asymptotics"]], ["add", "theorem", "bound_of_is_O_nat_at_top", ["asymptotics"]], ["add", "theorem", "is_O_cofinite_iff", ["asymptotics"]], ["add", "theorem", "is_O_nat_at_top_iff", ["asymptotics"]], ["add", "theorem", "is_O_top", ["asymptotics"]], ["add", "theorem", "is_O_with_top", ["asymptotics"]], ["add", "theorem", "is_o_top", ["asymptotics"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "is_o_pow_pow_of_abs_lt_left", []], ["add", "theorem", "is_o_pow_pow_of_lt_left", []], ["mod", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", []]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "eventually_cofinite", ["filter"]]]}]}, {"timestamp": 1608716482, "sha": "435b97ac", "message": "feat(ring_theory/witt_vector): the comparison between W(F_p) and Z_p (#5164)\nThis PR is the culmination of the Witt vector project. We prove that the\nring of Witt vectors over `zmod p` is isomorphic to the ring of `p`-adic\nnumbers.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "symm_to_ring_hom_comp_to_ring_hom", ["ring_equiv"]], ["add", "theorem", "to_ring_hom_comp_symm_to_ring_hom", ["ring_equiv"]]]}, {"oldPath": null, "newPath": "src/ring_theory/witt_vector/compare.lean", "changes": [["add", "theorem", "card_zmod", ["truncated_witt_vector"]], ["add", "theorem", "char_p_zmod", ["truncated_witt_vector"]], ["add", "theorem", "commutes'", ["truncated_witt_vector"]], ["add", "theorem", "commutes", ["truncated_witt_vector"]], ["add", "theorem", "commutes_symm'", ["truncated_witt_vector"]], ["add", "theorem", "commutes_symm", ["truncated_witt_vector"]], ["add", "theorem", "eq_of_le_of_cast_pow_eq_zero", ["truncated_witt_vector"]], ["add", "def", "zmod_equiv_trunc", ["truncated_witt_vector"]], ["add", "theorem", "zmod_equiv_trunc_apply", ["truncated_witt_vector"]], ["add", "def", "equiv", ["witt_vector"]], ["add", "def", "from_padic_int", ["witt_vector"]], ["add", "theorem", "from_padic_int_comp_to_padic_int", ["witt_vector"]], ["add", "theorem", "from_padic_int_comp_to_padic_int_ext", ["witt_vector"]], ["add", "def", "to_padic_int", ["witt_vector"]], ["add", "theorem", "to_padic_int_comp_from_padic_int", ["witt_vector"]], ["add", "theorem", "to_padic_int_comp_from_padic_int_ext", ["witt_vector"]], ["add", "def", "to_zmod_pow", ["witt_vector"]], ["add", "theorem", "to_zmod_pow_compat", ["witt_vector"]], ["add", "theorem", "zmod_equiv_trunc_compat", ["witt_vector"]]]}]}, {"timestamp": 1608696738, "sha": "d5adbde1", "message": "feat(data/list/basic): prefix simplifying iff lemmas (#5452)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "cons_prefix_iff", ["list"]], ["add", "theorem", "map_prefix", ["list"]], ["add", "theorem", "prefix_take_le_iff", ["list"]]]}]}, {"timestamp": 1608687034, "sha": "24f71d7b", "message": "chore(scripts): update nolints.txt (#5483)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608670598, "sha": "eba2a796", "message": "feat(data/list/zip): length of zip_with, nth_le of zip (#5455)", "changes": [{"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "length_zip_with", ["list"]], ["add", "theorem", "lt_length_left_of_zip", ["list"]], ["add", "theorem", "lt_length_left_of_zip_with", ["list"]], ["add", "theorem", "lt_length_right_of_zip", ["list"]], ["add", "theorem", "lt_length_right_of_zip_with", ["list"]], ["add", "theorem", "nth_le_zip", ["list"]], ["add", "theorem", "nth_le_zip_with", ["list"]], ["add", "theorem", "zip_with_cons_cons", ["list"]], ["add", "theorem", "zip_with_nil_left", ["list"]], ["add", "theorem", "zip_with_nil_right", ["list"]]]}]}, {"timestamp": 1608656718, "sha": "3fc60fc7", "message": "fix(number_theory/bernoulli): fix docstring (#5478)", "changes": [{"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}]}, {"timestamp": 1608656716, "sha": "0f1362e1", "message": "chore(analysis/calculus/mean_value): use `𝓝[Ici x] x` instead of `𝓝[Ioi x] x` (#5472)\nIn many parts of the library we prefer `𝓝[Ici x] x` to `𝓝[Ioi x]\nx` (e.g., in assumptions line `continuous_within_at`). Fix MVT and\nGronwall's inequality to use it if possible.\nMotivated by #4945", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "has_deriv_at_iff_tendsto_slope", []], ["add", "theorem", "has_deriv_within_at_Iio_iff_Iic", []], ["add", "theorem", "has_deriv_within_at_Ioi_iff_Ici", []], ["add", "theorem", "has_deriv_within_at_diff_singleton", []], ["mod", "theorem", "has_deriv_within_at_iff_tendsto_slope'", []], ["mod", "theorem", "has_deriv_within_at_iff_tendsto_slope", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "sdiff_idem_right", []]]}]}, {"timestamp": 1608656714, "sha": "fb99440a", "message": "feat(data/complex/is_R_or_C): register some instances (#5466)\nRegister a couple of facts which were previously known for `ℝ` and `ℂ` individually, but not for the typeclass `[is_R_or_C K]`:\n- such a field `K` is finite-dimensional as a vector space over `ℝ`\n- finite-dimensional normed spaces over `K` are proper.\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Instances.20for.20is_R_or_C", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}]}, {"timestamp": 1608656712, "sha": "7c2f1663", "message": "chore(analysis/special_functions/trigonometric): review continuity of `tan` (#5429)\n* prove that `tan` is discontinuous at `x` whenever `cos x = 0`;\n* turn `continuous_at_tan` and `differentiable_at_tan` into `iff` lemmas;\n* reformulate various lemmas in terms of `cos x = 0` instead of `∃ k, x = ...`;", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "continuous_of_real", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "continuous_at_tan", ["complex"]], ["mod", "theorem", "deriv_tan", ["complex"]], ["mod", "theorem", "differentiable_at_tan", ["complex"]], ["mod", "theorem", "has_deriv_at_tan", ["complex"]], ["add", "theorem", "tendsto_abs_tan_at_top", ["complex"]], ["add", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["complex"]], ["add", "theorem", "continuous_at_tan", ["real"]], ["del", "theorem", "continuous_tan", ["real"]], ["mod", "theorem", "deriv_tan", ["real"]], ["del", "theorem", "deriv_tan_of_mem_Ioo", ["real"]], ["mod", "theorem", "differentiable_at_tan", ["real"]], ["mod", "theorem", "has_deriv_at_tan", ["real"]], ["add", "theorem", "tan_pi_div_two", ["real"]], ["add", "theorem", "tendsto_abs_tan_at_top", ["real"]], ["add", "theorem", "tendsto_abs_tan_of_cos_eq_zero", ["real"]]]}]}, {"timestamp": 1608656709, "sha": "d569d634", "message": "refactor(analysis/inner_product_space, geometry/euclidean) range of orthogonal projection (#5408)\nPreviously, the orthogonal projection was defined for all subspaces of an inner product space, with the junk value `id` if the space was not complete; then all nontrivial lemmas required a hypothesis of completeness (and nonemptiness for the affine orthogonal projection). Change this to a definition only for subspaces `K` satisfying `[complete_space K]` (and `[nonempty K]` for the affine orthogonal projection).\nPreviously, the orthogonal projection was a linear map from `E` to `E`. Redefine it to be a linear map from `E` to `K`.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Orthogonal.20projection)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "theorem", "eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero", []], ["add", "theorem", "eq_orthogonal_projection_of_eq_submodule", []], ["mod", "theorem", "eq_orthogonal_projection_of_mem_of_inner_eq_zero", []], ["mod", "def", "orthogonal_projection", []], ["del", "theorem", "orthogonal_projection_def", []], ["mod", "def", "orthogonal_projection_fn", []], ["mod", "theorem", "orthogonal_projection_fn_eq", []], ["mod", "theorem", "orthogonal_projection_fn_inner_eq_zero", []], ["mod", "theorem", "orthogonal_projection_fn_mem", []], ["mod", "theorem", "orthogonal_projection_inner_eq_zero", []], ["del", "theorem", "orthogonal_projection_mem", []], ["del", "def", "orthogonal_projection_of_complete", []]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["mod", "theorem", "dist_orthogonal_projection_eq_zero_iff", ["euclidean_geometry"]], ["mod", "theorem", "dist_orthogonal_projection_ne_zero_of_not_mem", ["euclidean_geometry"]], ["mod", "theorem", "dist_reflection", ["euclidean_geometry"]], ["mod", "theorem", "dist_reflection_eq_of_mem", ["euclidean_geometry"]], ["add", "theorem", "eq_orthogonal_projection_of_eq_subspace", ["euclidean_geometry"]], ["add", "theorem", "eq_reflection_of_eq_subspace", ["euclidean_geometry"]], ["mod", "theorem", "inter_eq_singleton_orthogonal_projection", ["euclidean_geometry"]], ["mod", "theorem", "inter_eq_singleton_orthogonal_projection_fn", ["euclidean_geometry"]], ["mod", "def", "orthogonal_projection", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_def", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_eq_self_iff", ["euclidean_geometry"]], ["mod", "def", "orthogonal_projection_fn", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_eq", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_mem", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_mem_orthogonal", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_linear", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_mem", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_mem_orthogonal", ["euclidean_geometry"]], ["del", "def", "orthogonal_projection_of_nonempty_of_complete", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_of_nonempty_of_complete_eq", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_orthogonal_projection", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vadd_eq_self", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vsub_mem_direction", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["mod", "def", "reflection", ["euclidean_geometry"]], ["mod", "theorem", "reflection_apply", ["euclidean_geometry"]], ["mod", "theorem", "reflection_eq_iff_orthogonal_projection_eq", ["euclidean_geometry"]], ["mod", "theorem", "reflection_eq_self_iff", ["euclidean_geometry"]], ["mod", "theorem", "reflection_involutive", ["euclidean_geometry"]], ["mod", "theorem", "reflection_mem_of_le_of_mem", ["euclidean_geometry"]], ["mod", "theorem", "reflection_orthogonal_vadd", ["euclidean_geometry"]], ["mod", "theorem", "reflection_reflection", ["euclidean_geometry"]], ["mod", "theorem", "reflection_symm", ["euclidean_geometry"]], ["mod", "theorem", "reflection_vadd_smul_vsub_orthogonal_projection", ["euclidean_geometry"]], ["mod", "theorem", "vsub_orthogonal_projection_mem_direction", ["euclidean_geometry"]], ["mod", "theorem", "vsub_orthogonal_projection_mem_direction_orthogonal", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["mod", "theorem", "dist_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["mod", "theorem", "dist_set_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["mod", "theorem", "exists_dist_eq_iff_exists_dist_orthogonal_projection_eq", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "theorem", "coe_vadd", ["affine_subspace"]], ["add", "theorem", "coe_vsub", ["affine_subspace"]]]}]}, {"timestamp": 1608656707, "sha": "0ff90682", "message": "feat(data/finset/basic, topology/separation): add induction_on_union, separate, and separate_finset_of_t2 (#5332)\nprove lemma disjoint_finsets_opens_of_t2 showing that in a t2_space disjoint finsets have disjoint open neighbourhoods, using auxiliary lemma not_mem_finset_opens_of_t2.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "induction_on_union", ["finset"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "finset_disjoint_finset_opens_of_t2", []], ["add", "theorem", "point_disjoint_finset_opens_of_t2", []], ["add", "theorem", "comm", ["separated"]], ["add", "theorem", "empty_left", ["separated"]], ["add", "theorem", "empty_right", ["separated"]], ["add", "theorem", "symm", ["separated"]], ["add", "theorem", "union_left", ["separated"]], ["add", "theorem", "union_right", ["separated"]], ["add", "def", "separated", []]]}]}, {"timestamp": 1608644863, "sha": "02ab90cc", "message": "chore(*): split some long lines (#5470)", "changes": [{"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": [["mod", "theorem", "quot_add", ["CommRing", "colimits"]], ["mod", "theorem", "quot_mul", ["CommRing", "colimits"]], ["mod", "theorem", "quot_neg", ["CommRing", "colimits"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "ne_zero", ["is_unit"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "uniform_continuous_on_iff", ["filter", "has_basis"]], ["mod", "theorem", "mem_uniform_prod", []], ["mod", "theorem", "nhds_basis_uniformity'", []], ["mod", "theorem", "uniform_continuous_fst", []], ["mod", "theorem", "uniform_continuous_on_iff_restrict", []], ["mod", "theorem", "uniform_continuous_snd", []], ["mod", "theorem", "core_eq", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "Cauchy_eq", ["Cauchy"]], ["mod", "theorem", "extension_coe", ["uniform_space", "completion"]], ["mod", "theorem", "extension_unique", ["uniform_space", "completion"]]]}, {"oldPath": "test/monotonicity/test_cases.lean", "newPath": "test/monotonicity/test_cases.lean", "changes": []}]}, {"timestamp": 1608623426, "sha": "4ddae3db", "message": "feat(ring_theory/power_series): define power series for `exp`, `sin`, `cos`, and `1 / (u - x)`. (#5432)\nThis PR defines `power_series.exp` etc to be formal power series for the corresponding functions. Once we have a bridge to `is_analytic`, we should redefine `complex.exp` etc using these power series.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "map_eq_zero", ["ring_hom"]]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["add", "theorem", "coe_map_inv", ["units"]]]}, {"oldPath": "src/analysis/calculus/formal_multilinear_series.lean", "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "theorem", "conj_eq_zero", ["is_R_or_C"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series/basic.lean", "changes": [["mod", "theorem", "inv_of_unit_eq'", ["mv_power_series"]], ["mod", "theorem", "inv_of_unit_eq", ["mv_power_series"]]]}, {"oldPath": null, "newPath": "src/ring_theory/power_series/well_known.lean", "changes": [["add", "theorem", "coeff_exp", ["power_series"]], ["add", "theorem", "coeff_inv_units_sub", ["power_series"]], ["add", "theorem", "constant_coeff_inv_units_sub", ["power_series"]], ["add", "def", "cos", ["power_series"]], ["add", "def", "exp", ["power_series"]], ["add", "def", "inv_units_sub", ["power_series"]], ["add", "theorem", "inv_units_sub_mul_X", ["power_series"]], ["add", "theorem", "inv_units_sub_mul_sub", ["power_series"]], ["add", "theorem", "map_cos", ["power_series"]], ["add", "theorem", "map_exp", ["power_series"]], ["add", "theorem", "map_inv_units_sub", ["power_series"]], ["add", "theorem", "map_sin", ["power_series"]], ["add", "def", "sin", ["power_series"]]]}]}, {"timestamp": 1608606644, "sha": "92dfdbcc", "message": "chore(scripts): update nolints.txt (#5469)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608606642, "sha": "3c7394fe", "message": "fix(group_theory/*, algebra/group): [to_additive, simp] doesn't work (#5468)\nAs explained in `algebra/group/to_additive`, `@[to_additive, simp]` doesn't work (it doesn't attach a `simp` attribute to the additive lemma), but conversely `@[simps, to_additive]` is also wrong.\nAlong the way I also noticed that some `right_inv` (as in an inverse function) lemmas were being changed to `right_neg` by to_additive :D", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": [["mod", "theorem", "mul_right", ["semiconj_by"]]]}, {"oldPath": "src/algebra/ordered_monoid.lean", "newPath": "src/algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["mod", "theorem", "mul_equiv_of_localizations_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_left_inv_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_right_inv", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_right_inv_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_symm_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "of_mul_equiv_of_dom_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "of_mul_equiv_of_localizations_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "of_mul_equiv_of_mul_equiv_apply", ["submonoid", "localization_map"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1608594684, "sha": "9ec2778f", "message": "chore(data/{equiv,set}/basic): image_preimage (#5465)\n* `equiv.symm_image_image`: add `@[simp]`;\n* `equiv.image_preimage`, `equiv.preimage_image`: new `simp` lemmas;\n* `set.image_preimage_eq`, `set.preimage_image_eq`: make `s : set _` an explicit argument;\n* `function.injective.preimage_image`, `function.surjective.image_preimage`: new aliases for `set.preimage_image_eq`\n and `set.image_preimage_eq` with arguments reversed\nAlso golf a proof about `separated`.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "image_preimage", ["equiv"]], ["add", "theorem", "preimage_image", ["equiv"]], ["mod", "theorem", "symm_image_image", ["equiv"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_image", ["function", "injective"]], ["add", "theorem", "image_preimage", ["function", "surjective"]], ["mod", "theorem", "image_preimage_eq", ["set"]], ["mod", "theorem", "preimage_eq_preimage", ["set"]]]}, {"oldPath": "src/order/semiconj_Sup.lean", "newPath": "src/order/semiconj_Sup.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1608584199, "sha": "d2ae43f6", "message": "feat(data/list/basic): lemmas about nth of take and append (#5449)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "nth_append", ["list"]], ["add", "theorem", "nth_append_right", ["list"]], ["add", "theorem", "nth_take", ["list"]], ["add", "theorem", "nth_take_of_succ", ["list"]], ["add", "theorem", "take_succ", ["list"]]]}]}, {"timestamp": 1608584197, "sha": "3b9cbdfe", "message": "feat(data/ordmap): Ordered maps (like rb_map but better) (#5353)\nThis cleans up an old mathlib branch from 2 years ago, so it probably isn't in very modern style, but it would be best to get it merged and kept up to date rather than leaving it to rot.\nIt is an implementation of size balanced ordered maps based on Haskell's `Data.Map.Strict`. The `ordnode` structure can be used directly if one is only interested in using it for programming purposes, and the `ordset` structure bundles the proofs so that you can prove theorems about inserting and deleting doing what you expect.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "def", "cmp_le", []], ["add", "theorem", "cmp_le_eq_cmp", []], ["add", "theorem", "cmp_le_swap", []]]}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": [["add", "theorem", "dist_tri_left'", ["nat"]], ["add", "theorem", "dist_tri_left", ["nat"]], ["add", "theorem", "dist_tri_right'", ["nat"]], ["add", "theorem", "dist_tri_right", ["nat"]]]}, {"oldPath": "src/data/nat/psub.lean", "newPath": "src/data/nat/psub.lean", "changes": [["add", "def", "psub'", ["nat"]], ["add", "theorem", "psub'_eq_psub", ["nat"]], ["mod", "theorem", "psub_eq_none", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/ordmap/ordnode.lean", "changes": [["add", "def", "adjust_with", ["ordnode"]], ["add", "def", "all", ["ordnode"]], ["add", "def", "alter", ["ordnode"]], ["add", "def", "amem", ["ordnode"]], ["add", "def", "any", ["ordnode"]], ["add", "def", "attach'", ["ordnode"]], ["add", "def", "balance", ["ordnode"]], ["add", "def", "balance_l", ["ordnode"]], ["add", "def", "balance_r", ["ordnode"]], ["add", "def", "delta", ["ordnode"]], ["add", "def", "diff", ["ordnode"]], ["add", "def", "disjoint", ["ordnode"]], ["add", "def", "drop", ["ordnode"]], ["add", "def", "drop_aux", ["ordnode"]], ["add", "def", "drop_while", ["ordnode"]], ["add", "def", "dual", ["ordnode"]], ["add", "def", "emem", ["ordnode"]], ["add", "def", "empty", ["ordnode"]], ["add", "def", "equiv", ["ordnode"]], ["add", "def", "erase", ["ordnode"]], ["add", "def", "erase_max", ["ordnode"]], ["add", "def", "erase_min", ["ordnode"]], ["add", "def", "filter", ["ordnode"]], ["add", "def", "find", ["ordnode"]], ["add", "def", "find_ge", ["ordnode"]], ["add", "def", "find_ge_aux", ["ordnode"]], ["add", "def", "find_gt", ["ordnode"]], ["add", "def", "find_gt_aux", ["ordnode"]], ["add", "def", "find_index", ["ordnode"]], ["add", "def", "find_index_aux", ["ordnode"]], ["add", "def", "find_le", ["ordnode"]], ["add", "def", "find_le_aux", ["ordnode"]], ["add", "def", "find_lt", ["ordnode"]], ["add", "def", "find_lt_aux", ["ordnode"]], ["add", "def", "find_max'", ["ordnode"]], ["add", "def", "find_max", ["ordnode"]], ["add", "def", "find_min'", ["ordnode"]], ["add", "def", "find_min", ["ordnode"]], ["add", "def", "fold", ["ordnode"]], ["add", "def", "foldl", ["ordnode"]], ["add", "def", "foldr", ["ordnode"]], ["add", "def", "glue", ["ordnode"]], ["add", "def", "image", ["ordnode"]], ["add", "def", "insert'", ["ordnode"]], ["add", "def", "insert_max", ["ordnode"]], ["add", "def", "insert_min", ["ordnode"]], ["add", "def", "insert_with", ["ordnode"]], ["add", "def", "inter", ["ordnode"]], ["add", "def", "is_subset", ["ordnode"]], ["add", "def", "is_subset_aux", ["ordnode"]], ["add", "def", "link", ["ordnode"]], ["add", "def", "map", ["ordnode"]], ["add", "def", "mem", ["ordnode"]], ["add", "def", "merge", ["ordnode"]], ["add", "def", "node'", ["ordnode"]], ["add", "def", "nth", ["ordnode"]], ["add", "def", "of_asc_list", ["ordnode"]], ["add", "def", "of_asc_list_aux₁", ["ordnode"]], ["add", "def", "of_asc_list_aux₂", ["ordnode"]], ["add", "def", "of_list'", ["ordnode"]], ["add", "def", "of_list", ["ordnode"]], ["add", "def", "partition", ["ordnode"]], ["add", "def", "pmap", ["ordnode"]], ["add", "def", "powerset", ["ordnode"]], ["add", "def", "ratio", ["ordnode"]], ["add", "def", "remove_nth", ["ordnode"]], ["add", "def", "repr", ["ordnode"]], ["add", "def", "size", ["ordnode"]], ["add", "def", "span", ["ordnode"]], ["add", "def", "split3", ["ordnode"]], ["add", "def", "split", ["ordnode"]], ["add", "def", "split_at", ["ordnode"]], ["add", "def", "split_at_aux", ["ordnode"]], ["add", "def", "split_max'", ["ordnode"]], ["add", "def", "split_max", ["ordnode"]], ["add", "def", "split_min'", ["ordnode"]], ["add", "def", "split_min", ["ordnode"]], ["add", "def", "take", ["ordnode"]], ["add", "def", "take_aux", ["ordnode"]], ["add", "def", "take_while", ["ordnode"]], ["add", "def", "to_list", ["ordnode"]], ["add", "def", "to_rev_list", ["ordnode"]], ["add", "def", "union", ["ordnode"]], ["add", "def", "update_with", ["ordnode"]], ["add", "inductive", "ordnode", []]]}, {"oldPath": null, "newPath": "src/data/ordmap/ordset.lean", "changes": [["add", "theorem", "imp", ["ordnode", "all"]], ["add", "theorem", "all_balance'", ["ordnode"]], ["add", "theorem", "all_balance_l", ["ordnode"]], ["add", "theorem", "all_balance_r", ["ordnode"]], ["add", "theorem", "all_dual", ["ordnode"]], ["add", "theorem", "all_iff_forall", ["ordnode"]], ["add", "theorem", "all_node'", ["ordnode"]], ["add", "theorem", "all_node3_l", ["ordnode"]], ["add", "theorem", "all_node3_r", ["ordnode"]], ["add", "theorem", "all_node4_l", ["ordnode"]], ["add", "theorem", "all_node4_r", ["ordnode"]], ["add", "theorem", "all_rotate_l", ["ordnode"]], ["add", "theorem", "all_rotate_r", ["ordnode"]], ["add", "theorem", "all_singleton", ["ordnode"]], ["add", "theorem", "imp", ["ordnode", "any"]], ["add", "theorem", "any_iff_exists", ["ordnode"]], ["add", "theorem", "any_singleton", ["ordnode"]], ["add", "def", "balance'", ["ordnode"]], ["add", "theorem", "balance_eq_balance'", ["ordnode"]], ["add", "def", "balance_l'", ["ordnode"]], ["add", "theorem", "balance_l_eq_balance'", ["ordnode"]], ["add", "theorem", "balance_l_eq_balance", ["ordnode"]], ["add", "def", "balance_r'", ["ordnode"]], ["add", "theorem", "balance_r_eq_balance'", ["ordnode"]], ["add", "theorem", "balance_sz_dual", ["ordnode"]], ["add", "theorem", "dual", ["ordnode", "balanced"]], ["add", "def", "balanced", ["ordnode"]], ["add", "theorem", "symm", ["ordnode", "balanced_sz"]], ["add", "def", "balanced_sz", ["ordnode"]], ["add", "theorem", "balanced_sz_down", ["ordnode"]], ["add", "theorem", "balanced_sz_up", ["ordnode"]], ["add", "theorem", "balanced_sz_zero", ["ordnode"]], ["add", "theorem", "dual", ["ordnode", "bounded"]], ["add", "theorem", "dual_iff", ["ordnode", "bounded"]], ["add", "theorem", "mem_gt", ["ordnode", "bounded"]], ["add", "theorem", "mem_lt", ["ordnode", "bounded"]], ["add", "theorem", "mono_left", ["ordnode", "bounded"]], ["add", "theorem", "mono_right", ["ordnode", "bounded"]], ["add", "theorem", "of_gt", ["ordnode", "bounded"]], ["add", "theorem", "of_lt", ["ordnode", "bounded"]], ["add", "theorem", "to_lt", ["ordnode", "bounded"]], ["add", "theorem", "to_nil", ["ordnode", "bounded"]], ["add", "theorem", "to_sep", ["ordnode", "bounded"]], ["add", "theorem", "trans_left", ["ordnode", "bounded"]], ["add", "theorem", "trans_right", ["ordnode", "bounded"]], ["add", "theorem", "weak", ["ordnode", "bounded"]], ["add", "theorem", "weak_left", ["ordnode", "bounded"]], ["add", "theorem", "weak_right", ["ordnode", "bounded"]], ["add", "def", "bounded", ["ordnode"]], ["add", "theorem", "delta_lt_false", ["ordnode"]], ["add", "theorem", "dual_balance'", ["ordnode"]], ["add", "theorem", "dual_balance_l", ["ordnode"]], ["add", "theorem", "dual_balance_r", ["ordnode"]], ["add", "theorem", "dual_dual", ["ordnode"]], ["add", "theorem", "dual_erase_max", ["ordnode"]], ["add", "theorem", "dual_erase_min", ["ordnode"]], ["add", "theorem", "dual_insert", ["ordnode"]], ["add", "theorem", "dual_node'", ["ordnode"]], ["add", "theorem", "dual_node3_l", ["ordnode"]], ["add", "theorem", "dual_node3_r", ["ordnode"]], ["add", "theorem", "dual_node4_l", ["ordnode"]], ["add", "theorem", "dual_node4_r", ["ordnode"]], ["add", "theorem", "dual_rotate_l", ["ordnode"]], ["add", "theorem", "dual_rotate_r", ["ordnode"]], ["add", "theorem", "emem_iff_all", ["ordnode"]], ["add", "theorem", "emem_iff_mem_to_list", ["ordnode"]], ["add", "theorem", "equiv_iff", ["ordnode"]], ["add", "theorem", "valid", ["ordnode", "erase_max"]], ["add", "theorem", "valid", ["ordnode", "erase_min"]], ["add", "theorem", "find_max'_all", ["ordnode"]], ["add", "theorem", "find_max'_dual", ["ordnode"]], ["add", "theorem", "find_max_dual", ["ordnode"]], ["add", "theorem", "find_min'_all", ["ordnode"]], ["add", "theorem", "find_min'_dual", ["ordnode"]], ["add", "theorem", "find_min_dual", ["ordnode"]], ["add", "theorem", "foldr_cons_eq_to_list", ["ordnode"]], ["add", "theorem", "valid", ["ordnode", "insert'"]], ["add", "theorem", "insert'_eq_insert_with", ["ordnode"]], ["add", "theorem", "valid", ["ordnode", "insert"]], ["add", "theorem", "insert_eq_insert_with", ["ordnode"]], ["add", "theorem", "valid", ["ordnode", "insert_with"]], ["add", "theorem", "valid_aux", ["ordnode", "insert_with"]], ["add", "theorem", "length_to_list'", ["ordnode"]], ["add", "theorem", "length_to_list", ["ordnode"]], ["add", "theorem", "merge_nil_left", ["ordnode"]], ["add", "theorem", "merge_nil_right", ["ordnode"]], ["add", "theorem", "merge_node", ["ordnode"]], ["add", "def", "node3_l", ["ordnode"]], ["add", "theorem", "node3_l_size", ["ordnode"]], ["add", "def", "node3_r", ["ordnode"]], ["add", "theorem", "node3_r_size", ["ordnode"]], ["add", "def", "node4_l", ["ordnode"]], ["add", "theorem", "node4_l_size", ["ordnode"]], ["add", "def", "node4_r", ["ordnode"]], ["add", "theorem", "not_le_delta", ["ordnode"]], ["add", "theorem", "add_left", ["ordnode", "raised"]], ["add", "theorem", "add_right", ["ordnode", "raised"]], ["add", "theorem", "dist_le'", ["ordnode", "raised"]], ["add", "theorem", "dist_le", ["ordnode", "raised"]], ["add", "theorem", "right", ["ordnode", "raised"]], ["add", "def", "raised", ["ordnode"]], ["add", "theorem", "raised_iff", ["ordnode"]], ["add", "def", "real_size", ["ordnode"]], ["add", "def", "rotate_l", ["ordnode"]], ["add", "def", "rotate_r", ["ordnode"]], ["add", "theorem", "size_balance'", ["ordnode"]], ["add", "theorem", "size_balance_l", ["ordnode"]], ["add", "theorem", "size_balance_r", ["ordnode"]], ["add", "theorem", "size_dual", ["ordnode"]], ["add", "theorem", "size_eq_real_size", ["ordnode"]], ["add", "theorem", "balance'", ["ordnode", "sized"]], ["add", "theorem", "dual", ["ordnode", "sized"]], ["add", "theorem", "dual_iff", ["ordnode", "sized"]], ["add", "theorem", "eq_node'", ["ordnode", "sized"]], ["add", "theorem", "induction", ["ordnode", "sized"]], ["add", "theorem", "node'", ["ordnode", "sized"]], ["add", "theorem", "node3_l", ["ordnode", "sized"]], ["add", "theorem", "node3_r", ["ordnode", "sized"]], ["add", "theorem", "node4_l", ["ordnode", "sized"]], ["add", "theorem", "pos", ["ordnode", "sized"]], ["add", "theorem", "rotate_l", ["ordnode", "sized"]], ["add", "theorem", "rotate_l_size", ["ordnode", "sized"]], ["add", "theorem", "rotate_r", ["ordnode", "sized"]], ["add", "theorem", "rotate_r_size", ["ordnode", "sized"]], ["add", "theorem", "size_eq", ["ordnode", "sized"]], ["add", "theorem", "size_eq_zero", ["ordnode", "sized"]], ["add", "def", "sized", ["ordnode"]], ["add", "theorem", "split_max_eq", ["ordnode"]], ["add", "theorem", "split_min_eq", ["ordnode"]], ["add", "theorem", "to_list_nil", ["ordnode"]], ["add", "theorem", "to_list_node", ["ordnode"]], ["add", "theorem", "balance'", ["ordnode", "valid'"]], ["add", "theorem", "balance'_aux", ["ordnode", "valid'"]], ["add", "theorem", "balance'_lemma", ["ordnode", "valid'"]], ["add", "theorem", "balance", ["ordnode", "valid'"]], ["add", "theorem", "balance_l", ["ordnode", "valid'"]], ["add", "theorem", "balance_l_aux", ["ordnode", "valid'"]], ["add", "theorem", "balance_r", ["ordnode", "valid'"]], ["add", "theorem", "balance_r_aux", ["ordnode", "valid'"]], ["add", "theorem", "dual", ["ordnode", "valid'"]], ["add", "theorem", "dual_iff", ["ordnode", "valid'"]], ["add", "theorem", "erase_max_aux", ["ordnode", "valid'"]], ["add", "theorem", "erase_min_aux", ["ordnode", "valid'"]], ["add", "theorem", "glue", ["ordnode", "valid'"]], ["add", "theorem", "glue_aux", ["ordnode", "valid'"]], ["add", "theorem", "left", ["ordnode", "valid'"]], ["add", "theorem", "merge_aux", ["ordnode", "valid'"]], ["add", "theorem", "merge_aux₁", ["ordnode", "valid'"]], ["add", "theorem", "merge_lemma", ["ordnode", "valid'"]], ["add", "theorem", "mono_left", ["ordnode", "valid'"]], ["add", "theorem", "mono_right", ["ordnode", "valid'"]], ["add", "theorem", "node'", ["ordnode", "valid'"]], ["add", "theorem", "node3_l", ["ordnode", "valid'"]], ["add", "theorem", "node3_r", ["ordnode", "valid'"]], ["add", "theorem", "node4_l", ["ordnode", "valid'"]], ["add", "theorem", "node4_l_lemma₁", ["ordnode", "valid'"]], ["add", "theorem", "node4_l_lemma₂", ["ordnode", "valid'"]], ["add", "theorem", "node4_l_lemma₃", ["ordnode", "valid'"]], ["add", "theorem", "node4_l_lemma₄", ["ordnode", "valid'"]], ["add", "theorem", "node4_l_lemma₅", ["ordnode", "valid'"]], ["add", "theorem", "node", ["ordnode", "valid'"]], ["add", "theorem", "of_gt", ["ordnode", "valid'"]], ["add", "theorem", "of_lt", ["ordnode", "valid'"]], ["add", "theorem", "right", ["ordnode", "valid'"]], ["add", "theorem", "rotate_l", ["ordnode", "valid'"]], ["add", "theorem", "rotate_l_lemma₁", ["ordnode", "valid'"]], ["add", "theorem", "rotate_l_lemma₂", ["ordnode", "valid'"]], ["add", "theorem", "rotate_l_lemma₃", ["ordnode", "valid'"]], ["add", "theorem", "rotate_l_lemma₄", ["ordnode", "valid'"]], ["add", "theorem", "rotate_r", ["ordnode", "valid'"]], ["add", "theorem", "trans_left", ["ordnode", "valid'"]], ["add", "theorem", "trans_right", ["ordnode", "valid'"]], ["add", "theorem", "valid", ["ordnode", "valid'"]], ["add", "structure", "valid'", ["ordnode"]], ["add", "theorem", "valid'_nil", ["ordnode"]], ["add", "theorem", "valid'_singleton", ["ordnode"]], ["add", "theorem", "dual", ["ordnode", "valid"]], ["add", "theorem", "dual_iff", ["ordnode", "valid"]], ["add", "theorem", "left", ["ordnode", "valid"]], ["add", "theorem", "merge", ["ordnode", "valid"]], ["add", "theorem", "right", ["ordnode", "valid"]], ["add", "theorem", "size_eq", ["ordnode", "valid"]], ["add", "def", "valid", ["ordnode"]], ["add", "theorem", "valid_nil", ["ordnode"]], ["add", "theorem", "valid_singleton", ["ordnode"]], ["add", "def", "empty", ["ordset"]], ["add", "theorem", "empty_iff", ["ordset"]], ["add", "def", "insert'", ["ordset"]], ["add", "def", "nil", ["ordset"]], ["add", "def", "size", ["ordset"]], ["add", "def", "ordset", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "cmp_le_flip", ["order_dual"]], ["add", "theorem", "dual_dual", ["order_dual", "linear_order"]], ["add", "theorem", "dual_dual", ["order_dual", "partial_order"]], ["add", "theorem", "dual_dual", ["order_dual", "preorder"]]]}]}, {"timestamp": 1608572930, "sha": "bc3ad25a", "message": "feat(linear_algebra/tensor_algebra): Add missing lemmas about subtraction (#5428)", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "map_sub₂", ["linear_map"]], ["add", "theorem", "sub_tmul", ["tensor_product"]], ["add", "theorem", "tmul_sub", ["tensor_product"]]]}]}, {"timestamp": 1608572929, "sha": "34d5750f", "message": "feat(data/option/basic): lemmas on map of none and congr (#5424)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "map_congr", ["option"]], ["add", "theorem", "map_eq_none'", ["option"]], ["add", "theorem", "map_eq_none", ["option"]]]}]}, {"timestamp": 1608569147, "sha": "0ed425fa", "message": "feat(ring_theory/perfection): define characteristic predicate of perfection (#5386)\nName changes:\n- `perfect_field` --> `perfect_ring` (generalization)\n- `semiring.perfection` --> `ring.perfection`\n- Original `ring.perfection` deleted.", "changes": [{"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["mod", "theorem", "coe_frobenius_equiv", []], ["mod", "theorem", "coe_frobenius_equiv_symm", []], ["add", "theorem", "commute_frobenius_pth_root", []], ["mod", "theorem", "eq_pth_root_iff", []], ["mod", "def", "frobenius_equiv", []], ["mod", "theorem", "frobenius_pth_root", []], ["add", "theorem", "injective_pow_p", []], ["mod", "theorem", "left_inverse_pth_root_frobenius", []], ["mod", "theorem", "map_iterate_pth_root", ["monoid_hom"]], ["mod", "theorem", "map_pth_root", ["monoid_hom"]], ["mod", "def", "lift", ["perfect_closure"]], ["mod", "def", "pth_root", []], ["mod", "theorem", "pth_root_eq_iff", []], ["mod", "theorem", "pth_root_frobenius", []], ["add", "theorem", "pth_root_pow_p'", []], ["add", "theorem", "pth_root_pow_p", []], ["add", "theorem", "right_inverse_pth_root_frobenius", []], ["mod", "theorem", "map_iterate_pth_root", ["ring_hom"]], ["mod", "theorem", "map_pth_root", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": [["add", "def", "coeff", ["perfection"]], ["add", "theorem", "coeff_add_ne_zero", ["perfection"]], ["add", "theorem", "coeff_frobenius", ["perfection"]], ["add", "theorem", "coeff_iterate_frobenius'", ["perfection"]], ["add", "theorem", "coeff_iterate_frobenius", ["perfection"]], ["add", "theorem", "coeff_mk", ["perfection"]], ["add", "theorem", "coeff_ne_zero_of_le", ["perfection"]], ["add", "theorem", "coeff_pow_p", ["perfection"]], ["add", "theorem", "coeff_pth_root", ["perfection"]], ["add", "theorem", "ext", ["perfection"]], ["add", "theorem", "frobenius_pth_root", ["perfection"]], ["add", "def", "lift", ["perfection"]], ["add", "def", "pth_root", ["perfection"]], ["add", "theorem", "pth_root_frobenius", ["perfection"]], ["add", "theorem", "id", ["perfection_map"]], ["add", "theorem", "mk'", ["perfection_map"]], ["add", "theorem", "of", ["perfection_map"]], ["add", "structure", "perfection_map", []], ["del", "def", "coeff", ["ring", "perfection"]], ["del", "theorem", "coeff_add_ne_zero", ["ring", "perfection"]], ["del", "theorem", "coeff_frobenius", ["ring", "perfection"]], ["del", "theorem", "coeff_ne_zero_of_le", ["ring", "perfection"]], ["del", "theorem", "coeff_pow_p", ["ring", "perfection"]], ["del", "theorem", "coeff_pth_root", ["ring", "perfection"]], ["del", "theorem", "ext", ["ring", "perfection"]], ["del", "theorem", "frobenius_pth_root", ["ring", "perfection"]], ["del", "def", "pth_root", ["ring", "perfection"]], ["del", "theorem", "pth_root_frobenius", ["ring", "perfection"]], ["mod", "def", "perfection", ["ring"]], ["del", "def", "perfection", ["semiring"]]]}]}, {"timestamp": 1608564589, "sha": "96a2aa1d", "message": "feat(ring_theory/roots_of_unity): add minimal_polynomial_eq_pow (#5444)\nThis is the main result about minimal polynomial of primitive roots of unity: `μ` and `μ ^ p` have the same minimal polynomial.\nThe proof is a little long, but I don't see how I can split it: it is entirely by contradiction, so any lemma extracted from it would start with a false assumption and at the end it would be used only in this proof.", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "minimal_polynomial_eq_pow", ["is_primitive_root"]]]}]}, {"timestamp": 1608559244, "sha": "c5c02ec8", "message": "feat(category_theory/yoneda): add iso_comp_punit (#5448)\nA presheaf P : C^{op} -> Type v is isomorphic to the composition of P with the coyoneda functor Type v -> Type v associated to `punit`.\n[This is useful for developing the theory of sheaves taking values in a general category]", "changes": [{"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["add", "def", "iso_comp_punit", ["category_theory", "coyoneda"]]]}]}, {"timestamp": 1608541674, "sha": "c98d5bb0", "message": "feat(category_theory/limits): yoneda preserves limits (#5439)\nyoneda and coyoneda preserve limits", "changes": [{"oldPath": "src/category_theory/limits/preserves/limits.lean", "newPath": "src/category_theory/limits/preserves/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/yoneda.lean", "newPath": "src/category_theory/limits/yoneda.lean", "changes": []}]}, {"timestamp": 1608536933, "sha": "4778e165", "message": "chore(category_theory/sites/sheaf): rename sheaf to sheaf_of_types (#5458)\nI wanted to add sheaves with values in general categories, so I moved sheaf.lean to sheaf_of_types.lean and then added a new file sheaf.lean. Github then produced an incomprehensible diff file because sheaf.lean had completely changed. Hence I propose first moving `sheaf.lean` to `sheaf_of_types.lean` and then adding a new `sheaf.lean` later. As well as moving the file, I also slightly change it.", "changes": [{"oldPath": "src/category_theory/sites/canonical.lean", "newPath": "src/category_theory/sites/canonical.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf_of_types.lean", "changes": [["del", "def", "Sheaf", ["category_theory"]], ["add", "def", "SheafOfTypes", ["category_theory"]], ["add", "def", "SheafOfTypes_to_presheaf", ["category_theory"]], ["del", "def", "Sheaf_to_presheaf", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/types.lean", "newPath": "src/category_theory/sites/types.lean", "changes": [["mod", "theorem", "eval_app", ["category_theory"]], ["mod", "def", "yoneda'", ["category_theory"]]]}]}, {"timestamp": 1608514334, "sha": "ca2e536f", "message": "chore(scripts): update nolints.txt (#5459)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608463982, "sha": "d79105ef", "message": "feat(tactic/field_simp): let field_simp use norm_num to prove numerals are nonzero (#5418)\nAs suggested by @robertylewis in https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Solving.20simple.20%28in%29equalities.20gets.20frustrating/near/220278546, change the discharger in `field_simp` to try `assumption` on goals `x ≠ 0` and `norm_num1` on these goals when `x` is a numeral.", "changes": [{"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": []}, {"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "mul_ne_zero", []]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/real/golden_ratio.lean", "newPath": "src/data/real/golden_ratio.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "mul_ne_zero'", ["nnreal"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/perfection.lean", "newPath": "src/ring_theory/perfection.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/field_simp.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1608456092, "sha": "50107383", "message": "feat(topology/algebra/ordered): continuity of `abs` (#5412)", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "abs", ["continuous"]], ["add", "theorem", "continuous_abs", []], ["add", "theorem", "abs", ["continuous_at"]], ["add", "theorem", "abs", ["continuous_on"]], ["add", "theorem", "abs", ["continuous_within_at"]], ["add", "theorem", "abs", ["filter", "tendsto"]], ["add", "theorem", "tendsto_abs_nhds_within_zero", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "continuous_abs", ["rat"]], ["del", "theorem", "continuous_abs", ["real"]]]}]}, {"timestamp": 1608428395, "sha": "a9fb069b", "message": "chore(scripts): update nolints.txt (#5441)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608410722, "sha": "1cb97275", "message": "feat(field_theory/galois): Separable splitting field is Galois (#5347)\nProves that a splitting field of a separable polynomial is Galois by showing that it has lots of automorphisms.", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["add", "theorem", "of_card_aut_eq_findim", ["is_galois"]], ["add", "theorem", "of_fixed_field_eq_bot", ["is_galois"]], ["add", "theorem", "of_separable_splitting_field", ["is_galois"]], ["add", "theorem", "of_separable_splitting_field_aux", ["is_galois"]]]}]}, {"timestamp": 1608400535, "sha": "e22fb94e", "message": "chore(data/nat/cast,algebra/ordered_group): 2 trivial lemmas (#5436)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "inv_lt_self", []]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "one_le_iff_pos", ["with_top"]]]}]}, {"timestamp": 1608400533, "sha": "5de67573", "message": "chore(algebra/ordered_group): deduplicate (#5403)\nI deleted many `a_of_b` lemmas for which `a_iff_b` existed, then restored (most? all?) of them using `alias` command.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "add_le_of_le_sub_left", []], ["del", "theorem", "add_le_of_le_sub_right", []], ["del", "theorem", "add_lt_of_lt_sub_left", []], ["del", "theorem", "add_lt_of_lt_sub_right", []], ["del", "theorem", "exists_gt_zero", []], ["add", "theorem", "exists_zero_lt", []], ["del", "theorem", "le_add_of_neg_le_sub_left", []], ["del", "theorem", "le_add_of_neg_le_sub_right", []], ["del", "theorem", "le_add_of_sub_left_le", []], ["del", "theorem", "le_add_of_sub_right_le", []], ["del", "theorem", "le_of_sub_nonneg", []], ["del", "theorem", "le_of_sub_nonpos", []], ["del", "theorem", "le_sub_left_of_add_le", []], ["del", "theorem", "le_sub_right_of_add_le", []], ["del", "theorem", "lt_add_of_neg_lt_sub_left", []], ["del", "theorem", "lt_add_of_neg_lt_sub_right", []], ["del", "theorem", "lt_add_of_sub_left_lt", []], ["del", "theorem", "lt_add_of_sub_right_lt", []], ["del", "theorem", "lt_of_sub_neg", []], ["del", "theorem", "lt_of_sub_pos", []], ["del", "theorem", "lt_sub_left_of_add_lt", []], ["del", "theorem", "lt_sub_right_of_add_lt", []], ["del", "theorem", "neg_le_sub_left_of_le_add", []], ["del", "theorem", "neg_le_sub_right_of_le_add", []], ["del", "theorem", "neg_lt_sub_left_of_lt_add", []], ["del", "theorem", "neg_lt_sub_right_of_lt_add", []], ["add", "theorem", "sub_le_of_abs_sub_le_left", []], ["add", "theorem", "sub_le_of_abs_sub_le_right", []], ["del", "theorem", "sub_le_of_sub_le", []], ["del", "theorem", "sub_le_self", []], ["mod", "theorem", "sub_le_self_iff", []], ["del", "theorem", "sub_left_le_of_le_add", []], ["del", "theorem", "sub_left_lt_of_lt_add", []], ["add", "theorem", "sub_lt_of_abs_sub_lt_left", []], ["add", "theorem", "sub_lt_of_abs_sub_lt_right", []], ["del", "theorem", "sub_lt_of_sub_lt", []], ["del", "theorem", "sub_lt_self", []], ["mod", "theorem", "sub_lt_self_iff", []], ["del", "theorem", "sub_lt_sub_of_le_of_lt", []], ["del", "theorem", "sub_lt_sub_of_lt_of_le", []], ["del", "theorem", "sub_neg_of_lt", []], ["del", "theorem", "sub_nonneg_of_le", []], ["del", "theorem", "sub_nonpos_of_le", []], ["del", "theorem", "sub_pos_of_lt", []], ["del", "theorem", "sub_right_le_of_le_add", []], ["del", "theorem", "sub_right_lt_of_lt_add", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "sub_le_of_abs_sub_le_left", []], ["del", "theorem", "sub_le_of_abs_sub_le_right", []], ["del", "theorem", "sub_lt_of_abs_sub_lt_left", []], ["del", "theorem", "sub_lt_of_abs_sub_lt_right", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1608400530, "sha": "63e7fc96", "message": "feat(topology/algebra/ordered): a linear ordered additive group with order topology is a topological group (#5402)", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "tendsto_abs_at_bot_at_top", ["filter"]], ["add", "theorem", "tendsto_abs_at_top_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "eventually_abs_sub_lt", []], ["mod", "theorem", "tendsto_nhds", ["linear_ordered_add_comm_group"]], ["add", "theorem", "nhds_eq_infi_abs_sub", []], ["mod", "theorem", "order_topology_of_nhds_abs", []], ["del", "theorem", "tendsto_abs_at_top_at_top", []]]}]}, {"timestamp": 1608400528, "sha": "154a0242", "message": "feat(measure_theory/lp_space): add lemmas about the monotonicity of the Lp seminorm (#5395)\nAlso add a lemma mem_Lp.const_smul for a normed space.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "lintegral_Lp_mul_le_Lq_mul_Lr", ["ennreal"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "const_smul", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "integrable", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "mem_ℒp_of_exponent_le", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "snorm_le_snorm_mul_rpow_measure_univ", ["ℒp_space"]], ["add", "theorem", "snorm_le_snorm_of_exponent_le", ["ℒp_space"]], ["add", "theorem", "snorm_smul_le_mul_snorm", ["ℒp_space"]]]}]}, {"timestamp": 1608400527, "sha": "ce385a05", "message": "feat(ring_theory/roots_of_unity): lemmas about minimal polynomial (#5393)\nThree results about the minimal polynomial of `μ` and `μ ^ p`, where `μ` is a primitive root of unity. These are preparatory lemmas to prove that the two minimal polynomials are equal.", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "minimal_polynomial_dvd_expand", ["is_primitive_root"]], ["add", "theorem", "minimal_polynomial_dvd_mod_p", ["is_primitive_root"]], ["add", "theorem", "minimal_polynomial_dvd_pow_mod", ["is_primitive_root"]], ["add", "theorem", "pow_of_prime", ["is_primitive_root"]]]}]}, {"timestamp": 1608394637, "sha": "c55721d6", "message": "chore(analysis/calculus/{fderiv,deriv}): `f x ≠ f a` for `x ≈ a`, `x ≠ a` if `∥z∥ ≤ C * ∥f' z∥` (#5420)", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "eq_zero_imp", ["asymptotics", "is_O"]], ["add", "theorem", "eq_zero_imp", ["asymptotics", "is_O_with"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "eventually_ne", ["has_deriv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "eventually_ne", ["has_fderiv_at"]], ["add", "theorem", "eventually_ne", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "bound_of_antilipschitz", ["linear_map"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "eventually_ne_nhds_within", ["local_homeomorph"]]]}]}, {"timestamp": 1608389966, "sha": "ff830d7e", "message": "feat(ring_theory/witt_vector): redefine subtraction using witt_sub polynomial (#5405)", "changes": [{"oldPath": "src/ring_theory/witt_vector/basic.lean", "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": [["add", "theorem", "sub", ["witt_vector", "map_fun"]]]}, {"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": [["add", "theorem", "sub_coeff", ["witt_vector"]], ["add", "theorem", "witt_sub_vars", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": [["del", "theorem", "sub_coeff", ["witt_vector"]], ["del", "theorem", "sub_eq", ["witt_vector"]]]}]}, {"timestamp": 1608375952, "sha": "656b1bb5", "message": "feat(category_theory): essential image of a functor (#5352)\nDefine essential image of a functor as a predicate and use it to re-express essential surjectivity.\nConstruct the essential image as a subcategory of the target and use it to factorise an arbitrary functor into a fully faithful functor and an essentially surjective functor.\nAlso shuffles the import hierarchy a little so that essential image can import full subcategories.", "changes": [{"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "theorem", "functor_map_inj_iff", ["category_theory", "equivalence"]], ["mod", "theorem", "inverse_map_inj_iff", ["category_theory", "equivalence"]]]}, {"oldPath": null, "newPath": "src/category_theory/essential_image.lean", "changes": [["add", "def", "get_iso", ["category_theory", "functor", "ess_image"]], ["add", "theorem", "of_iso", ["category_theory", "functor", "ess_image"]], ["add", "theorem", "of_nat_iso", ["category_theory", "functor", "ess_image"]], ["add", "def", "witness", ["category_theory", "functor", "ess_image"]], ["add", "def", "ess_image", ["category_theory", "functor"]], ["add", "theorem", "ess_image_eq_of_nat_iso", ["category_theory", "functor"]], ["add", "def", "ess_image_inclusion", ["category_theory", "functor"]], ["add", "theorem", "obj_mem_ess_image", ["category_theory", "functor"]], ["add", "def", "obj_obj_preimage_iso", ["category_theory", "functor"]], ["add", "def", "obj_preimage", ["category_theory", "functor"]], ["add", "def", "to_ess_image", ["category_theory", "functor"]], ["add", "def", "to_ess_image_comp_essential_image_inclusion", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/normal_mono.lean", "newPath": "src/category_theory/limits/shapes/normal_mono.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}]}, {"timestamp": 1608366101, "sha": "0bb665cc", "message": "chore(ring_theory/power_series): review, golf (#5431)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_ite_index", ["finset"]], ["add", "theorem", "prod_sigma'", ["finset"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "coe_lt_top", ["enat"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "def", "coeff", ["mv_power_series"]], ["add", "theorem", "coeff_add_monomial_mul", ["mv_power_series"]], ["add", "theorem", "coeff_add_mul_monomial", ["mv_power_series"]], ["del", "theorem", "coeff_monomial'", ["mv_power_series"]], ["add", "theorem", "coeff_monomial_mul", ["mv_power_series"]], ["add", "theorem", "coeff_monomial_ne", ["mv_power_series"]], ["add", "theorem", "coeff_monomial_same", ["mv_power_series"]], ["add", "theorem", "coeff_mul_monomial", ["mv_power_series"]], ["add", "theorem", "eq_of_coeff_monomial_ne_zero", ["mv_power_series"]], ["add", "theorem", "map_C", ["mv_power_series"]], ["add", "theorem", "map_X", ["mv_power_series"]], ["add", "theorem", "map_monomial", ["mv_power_series"]], ["mod", "def", "monomial", ["mv_power_series"]], ["mod", "theorem", "monomial_zero_eq_C", ["mv_power_series"]], ["add", "theorem", "monomial_zero_one", ["mv_power_series"]], ["mod", "def", "coeff", ["power_series"]], ["del", "theorem", "coeff_monomial'", ["power_series"]], ["add", "theorem", "coeff_monomial_same", ["power_series"]], ["mod", "def", "monomial", ["power_series"]], ["mod", "theorem", "monomial_zero_eq_C", ["power_series"]], ["mod", "theorem", "order_eq_top", ["power_series"]]]}]}, {"timestamp": 1608344698, "sha": "53354e7d", "message": "chore(scripts): update nolints.txt (#5433)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608344696, "sha": "ec1b70eb", "message": "chore(linear_algebra/multilinear): Add map_update_zero (#5417)\n`map_coord_zero` isn't in a form that can be used by simp, so this introduces a form which can.", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "map_update_zero", ["multilinear_map"]]]}]}, {"timestamp": 1608344694, "sha": "5e057c94", "message": "feat(data/fin): trans and id lemmas for fin.cast (#5415)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_refl", ["fin"]], ["add", "theorem", "cast_trans", ["fin"]]]}]}, {"timestamp": 1608334498, "sha": "0e9a77cc", "message": "feat(data/nat/basic): succ_lt_succ_iff (#5422)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "succ_lt_succ_iff", ["nat"]]]}]}, {"timestamp": 1608325035, "sha": "33483a3d", "message": "chore(analysis/special_functions/trigonometric): golf a few more proofs (#5423)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "cos_eq_iff_quadratic", ["complex"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "int_cast_abs", ["complex"]]]}]}, {"timestamp": 1608313237, "sha": "0d140b15", "message": "feat(data/set/basic): nonempty instances for subtypes (#5409)\nIn #5408, it is useful to be able to track the nonemptiness of a subset by typeclass inference. These constructions allow one to do this.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "nonempty_of_nonempty_subtype", ["set"]]]}]}, {"timestamp": 1608304514, "sha": "775edc61", "message": "feat(linear_algebra/tensor_product): Inherit smul through is_scalar_tower (#5317)\nMost notably, this now means that the lemmas about `smul` and `tmul` can be used to prove `∀ z : Z, (z • a) ⊗ₜ[R] b = z • (a ⊗ₜ[R] b)`.\nHopefully these instances aren't dangerous - in particular, there's now a risk of a non-defeq-but-eq diamond for the `ℤ`- and `ℕ`-module structure.\nHowever:\n* this diamond already exists in other places anyway\n* the diamond if it comes up can be solved with `subsingleton.elim`, since we have a proof that all Z-module and N-module structures must be equivalent.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "def", "aux", ["tensor_product", "smul"]], ["mod", "theorem", "aux_of", ["tensor_product", "smul"]], ["mod", "theorem", "smul_tmul'", ["tensor_product"]], ["mod", "theorem", "smul_tmul", ["tensor_product"]], ["mod", "theorem", "tmul_smul", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1608293036, "sha": "74b58397", "message": "chore(topology/algebra/ordered): generalize `tendsto_at_top_add_left` etc (#5398)\n* generalize some lemmas from `linear_ordered_ring` to\n `linear_ordered_add_comm_group`;\n* rename them to allow dot notation; the new names are\n `filter.tendsto.add_at_*` and `filter.tendsto.at_*_add`, where `*` is\n `top` or `bot`;\n* generalize `infi_unit` and `supr_unit` to\n `conditionally_complete_lattice`, add `[unique α]` versions;\n* in a `subsingleton`, both `at_top` and `at_bot` are equal to `⊤`;\n these lemmas are useful for the `nontriviality` tactic.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_of_subsingleton", ["polynomial"]], ["add", "theorem", "coeff_nat_degree", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_of_subsingleton", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["del", "theorem", "coeff_nat_degree", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_mul", ["polynomial", "monic"]], ["mod", "theorem", "next_coeff_prod", ["polynomial", "monic"]]]}, {"oldPath": "src/data/polynomial/reverse.lean", "newPath": "src/data/polynomial/reverse.lean", "changes": [["add", "theorem", "coeff_one_reverse", ["polynomial"]], ["add", "theorem", "coeff_zero_reverse", ["polynomial"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "theorem", "infi_unit", []], ["del", "theorem", "supr_unit", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "infi_unique", []], ["add", "theorem", "infi_unit", []], ["add", "theorem", "supr_unique", []], ["add", "theorem", "supr_unit", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "at_bot_eq", ["filter", "subsingleton"]], ["add", "theorem", "at_top_eq", ["filter", "subsingleton"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "add_at_bot", ["filter", "tendsto"]], ["add", "theorem", "add_at_top", ["filter", "tendsto"]], ["add", "theorem", "at_bot_add", ["filter", "tendsto"]], ["add", "theorem", "at_top_add", ["filter", "tendsto"]], ["add", "theorem", "mul_at_top", ["filter", "tendsto"]], ["del", "theorem", "tendsto_at_bot_add_tendsto_left", []], ["del", "theorem", "tendsto_at_bot_add_tendsto_right", []], ["del", "theorem", "tendsto_at_top_add_tendsto_left", []], ["del", "theorem", "tendsto_at_top_add_tendsto_right", []]]}]}, {"timestamp": 1608282723, "sha": "c4f673cb", "message": "chore(analysis/normed_space/basic): `continuous_at.norm` etc (#5411)\nAdd variants of the lemma that the norm is continuous. Also rewrite a few proofs, and rename three lemmas:\n* `lim_norm` -> `tendsto_norm_sub_self`\n* `lim_norm_zero` -> `tendsto_norm_zero`\n* `lim_norm_zero'` -> `tendsto_norm_zero'`", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm", ["continuous"]], ["mod", "theorem", "norm", ["continuous"]], ["add", "theorem", "nnnorm", ["continuous_at"]], ["add", "theorem", "norm", ["continuous_at"]], ["add", "theorem", "nnnorm", ["continuous_on"]], ["add", "theorem", "norm", ["continuous_on"]], ["add", "theorem", "nnnorm", ["continuous_within_at"]], ["add", "theorem", "norm", ["continuous_within_at"]], ["mod", "theorem", "nnnorm", ["filter", "tendsto"]], ["mod", "theorem", "norm", ["filter", "tendsto"]], ["del", "theorem", "lim_norm", []], ["del", "theorem", "lim_norm_zero", []], ["add", "theorem", "tendsto_norm", []], ["add", "theorem", "tendsto_norm_nhds_within_zero", []], ["add", "theorem", "tendsto_norm_sub_self", []], ["add", "theorem", "tendsto_norm_zero", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "lim_norm_zero'", []], ["add", "theorem", "tendsto_norm_zero'", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "tendsto'", ["continuous"]]]}]}, {"timestamp": 1608255891, "sha": "a4dd9e18", "message": "chore(scripts): update nolints.txt (#5413)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608255889, "sha": "b1218f8b", "message": "chore(analysis/special_functions/trigonometric): review, golf (#5392)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "bij_on_cos", ["real"]], ["add", "theorem", "bij_on_sin", ["real"]], ["mod", "theorem", "cos_eq_one_iff_of_lt_of_lt", ["real"]], ["del", "theorem", "cos_inj_of_nonneg_of_le_pi", ["real"]], ["add", "theorem", "cos_mem_Icc", ["real"]], ["mod", "theorem", "cos_nonneg_of_mem_Icc", ["real"]], ["mod", "theorem", "cos_nonpos_of_pi_div_two_le_of_le", ["real"]], ["mod", "theorem", "cos_pos_of_mem_Ioo", ["real"]], ["del", "theorem", "exists_cos_eq", ["real"]], ["del", "theorem", "exists_sin_eq", ["real"]], ["add", "theorem", "inj_on_cos", ["real"]], ["add", "theorem", "inj_on_sin", ["real"]], ["add", "theorem", "maps_to_cos", ["real"]], ["add", "theorem", "maps_to_sin", ["real"]], ["mod", "theorem", "range_cos", ["real"]], ["mod", "theorem", "range_sin", ["real"]], ["del", "theorem", "sin_inj_of_le_of_le_pi_div_two", ["real"]], ["del", "theorem", "sin_lt_sin_of_le_of_le_pi_div_two", ["real"]], ["add", "theorem", "sin_lt_sin_of_lt_of_le_pi_div_two", ["real"]], ["add", "theorem", "sin_mem_Icc", ["real"]], ["add", "theorem", "sin_nonneg_of_mem_Icc", ["real"]], ["add", "theorem", "sin_pos_of_mem_Ioo", ["real"]], ["add", "theorem", "strict_mono_decr_on_cos", ["real"]], ["add", "theorem", "strict_mono_incr_on_sin", ["real"]], ["add", "theorem", "surj_on_cos", ["real"]], ["add", "theorem", "surj_on_sin", ["real"]]]}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}]}, {"timestamp": 1608222720, "sha": "35f2789c", "message": "chore(algebra/module/basic): add `subsingleton (semimodule ℕ M)` (#5396)\nThis can be used to resolve diamonds between different `semimodule ℕ` instances.\nThe implementation is copied from the `subsingleton (module ℤ M)` instance.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "module_ext", []], ["add", "theorem", "semimodule_ext", []]]}]}, {"timestamp": 1608211660, "sha": "6f1351f3", "message": "chore(algebra/{group,ring}): more on pushing/pulling groups/rings along morphisms (#5406)", "changes": [{"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}]}, {"timestamp": 1608211659, "sha": "ff716d24", "message": "chore(order/bounds): golf (#5401)", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "exists_between'", ["is_glb"]], ["add", "theorem", "exists_between", ["is_glb"]], ["mod", "theorem", "exists_between_self_add'", ["is_glb"]], ["mod", "theorem", "exists_between_self_add", ["is_glb"]], ["add", "theorem", "exists_between'", ["is_lub"]], ["add", "theorem", "exists_between", ["is_lub"]], ["mod", "theorem", "exists_between_sub_self'", ["is_lub"]], ["mod", "theorem", "exists_between_sub_self", ["is_lub"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1608211656, "sha": "3685146a", "message": "chore(topology/algebra/ordered): deduplicate (#5399)\n* Drop `mem_nhds_unbounded` in favor of\n `mem_nhds_iff_exists_Ioo_subset'`.\n* Use `(h : ∃ l, l < a)` instead of `{l} (hl : l < a)` in\n `mem_nhds_iff_exists_Ioo_subset'`. This way we can `apply` the\n theorem without generating non-`Prop` goals and we can get the\n arguments directly from `no_bot` / `no_top`.\n* add `nhds_basis_Ioo'` and `nhds_basis_Ioo`.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "inf_binfi", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "mem_nhds_iff_exists_Ioo_subset'", []], ["del", "theorem", "mem_nhds_unbounded", []], ["add", "theorem", "nhds_basis_Ioo'", []], ["add", "theorem", "nhds_basis_Ioo", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1608211654, "sha": "35a16a94", "message": "feat(algebra/module/basic): Add symmetric smul_comm_class instances for int and nat (#5369)\nThese can't be added globally for all types as they cause instance resolution loops, but are safe here as these definitions do not depend on an existing `smul_comm_class`.\nNote that these instances already exist via `is_scalar_tower.to_smul_comm_class'` for algebras - this just makes sure the instances are still available in the presence of weaker typeclasses. There's no diamond concern here, as `smul_comm_class` is in `Prop`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": []}]}, {"timestamp": 1608202170, "sha": "ee6969c3", "message": "chore(linear_algebra/{alternating,multilinear}): Add a handful of trivial lemmas (#5380)\nSome of these are needed for a WIP PR, and some seem like generally nice things to have.", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "coe_add", ["alternating_map"]], ["add", "theorem", "coe_alternatization", ["alternating_map"]], ["add", "theorem", "coe_neg", ["alternating_map"]], ["add", "theorem", "coe_smul", ["alternating_map"]], ["add", "theorem", "coe_sub", ["alternating_map"]], ["add", "theorem", "coe_zero", ["alternating_map"]], ["mod", "theorem", "smul_apply", ["alternating_map"]], ["add", "theorem", "sub_apply", ["alternating_map"]], ["del", "theorem", "to_multilinear_map_alternization", ["alternating_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "dom_coprod'_apply", ["multilinear_map"]], ["add", "theorem", "dom_coprod_dom_dom_congr_sum_congr", ["multilinear_map"]], ["add", "theorem", "dom_dom_congr_mul", ["multilinear_map"]], ["add", "theorem", "dom_dom_congr_trans", ["multilinear_map"]], ["mod", "theorem", "sub_apply", ["multilinear_map"]]]}]}, {"timestamp": 1608192231, "sha": "6a99e9e8", "message": "chore(analysis/calculus/deriv): add `iff` versions of `differentiable_const_add` etc (#5390)\nAlso drop some unneeded `differentiable` assumptions in lemmas like `deriv_const_add`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_add_const", []], ["mod", "theorem", "deriv_const_add", []], ["mod", "theorem", "deriv_const_sub", []], ["mod", "theorem", "deriv_sub_const", []], ["mod", "theorem", "neg", ["deriv_within"]], ["mod", "theorem", "deriv_within_add_const", []], ["mod", "theorem", "deriv_within_const_add", []], ["mod", "theorem", "deriv_within_const_sub", []], ["mod", "theorem", "deriv_within_sub_const", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "const_add", ["differentiable"]], ["mod", "theorem", "const_sub", ["differentiable"]], ["mod", "theorem", "neg", ["differentiable"]], ["mod", "theorem", "sub_const", ["differentiable"]], ["add", "theorem", "differentiable_add_const_iff", []], ["mod", "theorem", "neg", ["differentiable_at"]], ["mod", "theorem", "sub_const", ["differentiable_at"]], ["add", "theorem", "differentiable_at_add_const_iff", []], ["add", "theorem", "differentiable_at_const_add_iff", []], ["add", "theorem", "differentiable_at_const_sub_iff", []], ["add", "theorem", "differentiable_at_neg_iff", []], ["add", "theorem", "differentiable_at_sub_const_iff", []], ["add", "theorem", "differentiable_const_add_iff", []], ["add", "theorem", "differentiable_const_sub_iff", []], ["add", "theorem", "differentiable_neg_iff", []], ["mod", "theorem", "const_add", ["differentiable_on"]], ["mod", "theorem", "const_sub", ["differentiable_on"]], ["mod", "theorem", "sub_const", ["differentiable_on"]], ["add", "theorem", "differentiable_on_add_const_iff", []], ["add", "theorem", "differentiable_on_const_add_iff", []], ["add", "theorem", "differentiable_on_const_sub_iff", []], ["add", "theorem", "differentiable_on_neg_iff", []], ["add", "theorem", "differentiable_on_sub_const_iff", []], ["add", "theorem", "differentiable_sub_const_iff", []], ["add", "theorem", "differentiable_within_at_add_const_iff", []], ["add", "theorem", "differentiable_within_at_const_add_iff", []], ["add", "theorem", "differentiable_within_at_const_sub_iff", []], ["add", "theorem", "differentiable_within_at_neg_iff", []], ["add", "theorem", "differentiable_within_at_sub_const_iff", []], ["mod", "theorem", "fderiv_add_const", []], ["mod", "theorem", "fderiv_const_add", []], ["mod", "theorem", "fderiv_const_sub", []], ["mod", "theorem", "fderiv_neg", []], ["mod", "theorem", "fderiv_sub_const", []], ["mod", "theorem", "fderiv_within_add_const", []], ["mod", "theorem", "fderiv_within_const_add", []], ["mod", "theorem", "fderiv_within_const_sub", []], ["mod", "theorem", "fderiv_within_neg", []], ["mod", "theorem", "fderiv_within_sub_const", []], ["mod", "theorem", "add_const", ["has_fderiv_at"]]]}]}, {"timestamp": 1608168687, "sha": "e8fc373a", "message": "chore(scripts): update nolints.txt (#5400)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1608155560, "sha": "01a77adc", "message": "chore(analysis/analytic/basic.lean): fix latex in doc (#5397)\nDoc in the file `analytic/basic.lean` is broken, since I used a latex command `\\choose` which doesn't exist. Replace it with `\\binom`.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}]}, {"timestamp": 1608155558, "sha": "8fa10afc", "message": "feat(ring_theory/algebra_tower): alg_hom_equiv_sigma (#5345)\nProves that algebra homomorphisms from the top of an is_scalar_tower are the same as a pair of algebra homomorphisms.\nThis is useful for counting algebra homomorphisms.", "changes": [{"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "def", "extend_scalars", ["alg_hom"]], ["add", "def", "restrict_domain", ["alg_hom"]], ["add", "def", "alg_hom_equiv_sigma", []]]}]}, {"timestamp": 1608143722, "sha": "c5a2ff4c", "message": "chore(script/copy-mod-doc) Specify an encoding for files when opening (#5394)\nThis was necessary for the script to run locally on windows.", "changes": [{"oldPath": "scripts/lint-copy-mod-doc.py", "newPath": "scripts/lint-copy-mod-doc.py", "changes": []}]}, {"timestamp": 1608143720, "sha": "9282f6cd", "message": "feat(finset): two simple lemmas (#5387)\nalso open function namespace", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "coe_injective", ["finset"]], ["add", "theorem", "mem_insert_coe", ["finset"]], ["add", "theorem", "to_finset_surj_on", ["list"]], ["mod", "theorem", "to_finset_surjective", ["list"]]]}]}, {"timestamp": 1608132696, "sha": "39ecd1ab", "message": "chore(group_theory/group_action/basic): Add a simp lemma about smul on quotient groups (#5374)\nBy pushing `mk` to the outside, this increases the chance they can cancel with an outer `lift`", "changes": [{"oldPath": "src/group_theory/group_action/basic.lean", "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "smul_coe", ["mul_action", "quotient"]], ["add", "theorem", "smul_mk", ["mul_action", "quotient"]]]}]}, {"timestamp": 1608132694, "sha": "1221ab6b", "message": "chore(*): add a `div`/`sub` field to (`add_`)`group`(`_with_zero`) (#5303)\nThis PR is intended to fix the following kind of diamonds:\nLet `foo X` be a type with a `∀ X, has_div (foo X)` instance but no `∀ X, has_inv (foo X)`, e.g. when `foo X` is a `euclidean_domain`. Suppose we also have an instance `∀ X [cromulent X], group_with_zero (foo X)`. Then the `(/)` coming from `group_with_zero_has_div` cannot be defeq to the `(/)` coming from `foo.has_div`.\nAs a consequence of making the `has_div` instances defeq, we can no longer assume that `(div_eq_mul_inv a b : a / b = a * b⁻¹) = rfl` for all groups. The previous preparation PR #5302 should have changed all places in mathlib that assumed defeqness, to rewrite explicitly instead.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "inv_eq_one_div", []], ["del", "theorem", "mul_one_div", []]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "inv_eq_one_div", ["group"]], ["del", "theorem", "mul_one_div", ["group"]], ["add", "theorem", "inv_eq_one_div", []], ["add", "theorem", "mul_one_div", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["add", "theorem", "div_eq_mul_inv", []], ["del", "theorem", "div_eq_mul_inv", ["group"]], ["add", "def", "to_monoid", ["group"]], ["del", "theorem", "sub_eq_add_neg", []]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "theorem", "sub_apply", ["add_monoid_hom"]], ["add", "theorem", "div_apply", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["del", "theorem", "sub_apply", ["pi"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["add", "theorem", "of_add_sub", []], ["add", "theorem", "of_mul_div", []], ["add", "theorem", "to_add_div", []], ["add", "theorem", "to_mul_sub", []]]}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": [["add", "theorem", "div_down", ["ulift"]], ["del", "theorem", "sub_down", ["ulift"]]]}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/defs.lean", "newPath": "src/algebra/group_with_zero/defs.lean", "changes": [["del", "theorem", "div_eq_mul_inv", []]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": [["add", "theorem", "div_eq", ["punit"]]]}, {"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": []}, {"oldPath": "src/algebra/ring/ulift.lean", "newPath": "src/algebra/ring/ulift.lean", "changes": []}, {"oldPath": "src/analysis/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add_aut.lean", "newPath": "src/data/equiv/mul_add_aut.lean", "changes": []}, {"oldPath": "src/data/equiv/ring_aut.lean", "newPath": "src/data/equiv/ring_aut.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": [["add", "theorem", "div_def", ["equiv"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "neg_apply", ["matrix"]], ["mod", "theorem", "sub_apply", ["matrix"]], ["mod", "theorem", "zero_apply", ["matrix"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["add", "theorem", "coe_pow", ["padic_int"]], ["mod", "theorem", "coe_sub", ["padic_int"]], ["del", "theorem", "coet_pow", ["padic_int"]]]}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["mod", "theorem", "div_apply", ["pi"]]]}, {"oldPath": "src/data/quaternion.lean", "newPath": "src/data/quaternion.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": [["add", "theorem", "mk_sub", ["cau_seq", "completion"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["del", "theorem", "sub_mem", ["is_add_subgroup"]], ["add", "theorem", "div_mem", ["is_subgroup"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["del", "theorem", "sub_mem", ["add_subgroup"]], ["add", "theorem", "div_mem", ["subgroup"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mk_sub", ["submodule", "quotient"]]]}, {"oldPath": "src/linear_algebra/char_poly/basic.lean", "newPath": "src/linear_algebra/char_poly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "sub_apply", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "coe_sub", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["add", "theorem", "coe_div", ["filter", "germ"]], ["del", "theorem", "coe_sub", ["filter", "germ"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["del", "theorem", "int_sub_hack", ["norm_num"]]]}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["add", "theorem", "coe_sub", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "test/refine_struct.lean", "newPath": "test/refine_struct.lean", "changes": []}]}, {"timestamp": 1608126921, "sha": "461865b2", "message": "refactor(data/real): move `real.sqrt` to `data.real.sqrt`, more dependencies (#5359)\n* define `nnreal.sqrt`;\n* use general theory to prove that the inverse exists, and is an `order_iso`;\n* deduce continuity of `sqrt` from continuity of `order_iso`.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/arsinh.lean", "newPath": "src/analysis/special_functions/arsinh.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["del", "theorem", "continuous_sqrt", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["del", "theorem", "le_sqrt'", ["real"]], ["del", "theorem", "le_sqrt", ["real"]], ["del", "theorem", "le_sqrt_of_sqr_le", ["real"]], ["del", "theorem", "mul_self_sqrt", ["real"]], ["del", "theorem", "sqr_sqrt", ["real"]], ["del", "def", "sqrt_aux", ["real"]], ["del", "theorem", "sqrt_aux_nonneg", ["real"]], ["del", "theorem", "sqrt_div", ["real"]], ["del", "theorem", "sqrt_eq_iff_mul_self_eq", ["real"]], ["del", "theorem", "sqrt_eq_iff_sqr_eq", ["real"]], ["del", "theorem", "sqrt_eq_zero'", ["real"]], ["del", "theorem", "sqrt_eq_zero", ["real"]], ["del", "theorem", "sqrt_eq_zero_of_nonpos", ["real"]], ["del", "theorem", "sqrt_exists", ["real"]], ["del", "theorem", "sqrt_inj", ["real"]], ["del", "theorem", "sqrt_inv", ["real"]], ["del", "theorem", "sqrt_le", ["real"]], ["del", "theorem", "sqrt_le_left", ["real"]], ["del", "theorem", "sqrt_le_sqrt", ["real"]], ["del", "theorem", "sqrt_lt", ["real"]], ["del", "theorem", "sqrt_mul'", ["real"]], ["del", "theorem", "sqrt_mul", ["real"]], ["del", "theorem", "sqrt_mul_self", ["real"]], ["del", "theorem", "sqrt_mul_self_eq_abs", ["real"]], ["del", "theorem", "sqrt_nonneg", ["real"]], ["del", "theorem", "sqrt_one", ["real"]], ["del", "theorem", "sqrt_pos", ["real"]], ["del", "theorem", "sqrt_prop", ["real"]], ["del", "theorem", "sqrt_sqr", ["real"]], ["del", "theorem", "sqrt_sqr_eq_abs", ["real"]], ["del", "theorem", "sqrt_zero", ["real"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "le_of_real_iff_coe_le'", ["nnreal"]]]}, {"oldPath": null, "newPath": "src/data/real/sqrt.lean", "changes": [["add", "theorem", "sqrt", ["continuous"]], ["add", "theorem", "sqrt", ["continuous_at"]], ["add", "theorem", "sqrt", ["continuous_on"]], ["add", "theorem", "sqrt", ["continuous_within_at"]], ["add", "theorem", "sqrt", ["filter", "tendsto"]], ["add", "theorem", "continuous_sqrt", ["nnreal"]], ["add", "theorem", "le_sqrt_iff", ["nnreal"]], ["add", "theorem", "mul_sqrt_self", ["nnreal"]], ["add", "theorem", "sqrt_div", ["nnreal"]], ["add", "theorem", "sqrt_eq_iff_sqr_eq", ["nnreal"]], ["add", "theorem", "sqrt_eq_zero", ["nnreal"]], ["add", "theorem", "sqrt_inv", ["nnreal"]], ["add", "theorem", "sqrt_le_iff", ["nnreal"]], ["add", "theorem", "sqrt_mul", ["nnreal"]], ["add", "theorem", "sqrt_mul_self", ["nnreal"]], ["add", "theorem", "sqrt_one", ["nnreal"]], ["add", "theorem", "sqrt_zero", ["nnreal"]], ["add", "theorem", "continuous_sqrt", ["real"]], ["add", "theorem", "le_sqrt'", ["real"]], ["add", "theorem", "le_sqrt", ["real"]], ["add", "theorem", "le_sqrt_of_sqr_le", ["real"]], ["add", "theorem", "mul_self_sqrt", ["real"]], ["add", "theorem", "sqr_sqrt", ["real"]], ["add", "def", "sqrt_aux", ["real"]], ["add", "theorem", "sqrt_aux_nonneg", ["real"]], ["add", "theorem", "sqrt_div", ["real"]], ["add", "theorem", "sqrt_eq_iff_mul_self_eq", ["real"]], ["add", "theorem", "sqrt_eq_iff_sqr_eq", ["real"]], ["add", "theorem", "sqrt_eq_zero'", ["real"]], ["add", "theorem", "sqrt_eq_zero", ["real"]], ["add", "theorem", "sqrt_eq_zero_of_nonpos", ["real"]], ["add", "theorem", "sqrt_inj", ["real"]], ["add", "theorem", "sqrt_inv", ["real"]], ["add", "theorem", "sqrt_le", ["real"]], ["add", "theorem", "sqrt_le_iff", ["real"]], ["add", "theorem", "sqrt_le_left", ["real"]], ["add", "theorem", "sqrt_le_sqrt", ["real"]], ["add", "theorem", "sqrt_lt", ["real"]], ["add", "theorem", "sqrt_mul'", ["real"]], ["add", "theorem", "sqrt_mul", ["real"]], ["add", "theorem", "sqrt_mul_self", ["real"]], ["add", "theorem", "sqrt_mul_self_eq_abs", ["real"]], ["add", "theorem", "sqrt_nonneg", ["real"]], ["add", "theorem", "sqrt_one", ["real"]], ["add", "theorem", "sqrt_pos", ["real"]], ["add", "theorem", "sqrt_sqr", ["real"]], ["add", "theorem", "sqrt_sqr_eq_abs", ["real"]], ["add", "theorem", "sqrt_zero", ["real"]]]}]}, {"timestamp": 1608126919, "sha": "1b010684", "message": "feat(ring_theory/witt_vector): Witt vectors are proj. limit of truncated Witt vectors (#5163)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/ring_theory/witt_vector/truncated.lean", "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": [["add", "theorem", "card", ["truncated_witt_vector"]], ["add", "theorem", "coeff_truncate", ["truncated_witt_vector"]], ["add", "theorem", "infi_ker_truncate", ["truncated_witt_vector"]], ["add", "def", "truncate", ["truncated_witt_vector"]], ["add", "theorem", "truncate_comp", ["truncated_witt_vector"]], ["add", "theorem", "truncate_comp_witt_vector_truncate", ["truncated_witt_vector"]], ["add", "theorem", "truncate_surjective", ["truncated_witt_vector"]], ["add", "theorem", "truncate_truncate", ["truncated_witt_vector"]], ["add", "theorem", "truncate_witt_vector_truncate", ["truncated_witt_vector"]], ["add", "theorem", "coeff_truncate", ["witt_vector"]], ["add", "theorem", "hom_ext", ["witt_vector"]], ["add", "def", "lift", ["witt_vector"]], ["add", "def", "lift_equiv", ["witt_vector"]], ["add", "def", "lift_fun", ["witt_vector"]], ["add", "theorem", "lift_unique", ["witt_vector"]], ["add", "theorem", "mem_ker_truncate", ["witt_vector"]], ["add", "def", "truncate", ["witt_vector"]], ["add", "theorem", "truncate_comp_lift", ["witt_vector"]], ["add", "theorem", "truncate_lift", ["witt_vector"]], ["add", "theorem", "truncate_lift_fun", ["witt_vector"]], ["add", "theorem", "truncate_mk", ["witt_vector"]], ["add", "theorem", "truncate_surjective", ["witt_vector"]]]}]}, {"timestamp": 1608112813, "sha": "6548be43", "message": "chore(data/quot): Add missing simp lemmas (#5372)\nThese are called `lift_on'_beta` for consistency with `lift_on_beta`; even though we also have `map_mk'` etc in the same file.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}]}, {"timestamp": 1608103875, "sha": "78940f46", "message": "chore(*): use notation `ℝ≥0` (#5391)", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["mod", "theorem", "bound_of_lt_radius", ["formal_multilinear_series"]], ["mod", "theorem", "geometric_bound_of_lt_radius", ["formal_multilinear_series"]], ["mod", "theorem", "le_radius_of_bound", ["formal_multilinear_series"]], ["mod", "theorem", "tendsto_uniformly_on'", ["has_fpower_series_on_ball"]], ["mod", "theorem", "tendsto_uniformly_on", ["has_fpower_series_on_ball"]], ["mod", "theorem", "uniform_geometric_approx", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "add_lipschitz_with", ["antilipschitz_with"]], ["mod", "theorem", "continuous_nnnorm", []], ["mod", "theorem", "add", ["lipschitz_with"]], ["mod", "theorem", "neg", ["lipschitz_with"]], ["mod", "theorem", "sub", ["lipschitz_with"]], ["mod", "theorem", "summable_of_nnnorm_bounded", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "op_norm_le_of_lipschitz", ["continuous_linear_map"]], ["mod", "theorem", "uniform_embedding_of_bound", ["continuous_linear_map"]], ["mod", "theorem", "antilipschitz_of_bound", ["linear_map"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "nnreal_rpow", ["measurable"]], ["mod", "theorem", "nnreal_rpow_const", ["measurable"]], ["mod", "theorem", "measurable_rpow", ["nnreal"]], ["mod", "theorem", "measurable_rpow_const", ["nnreal"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "exists_pos_sum_of_encodable", ["nnreal"]], ["mod", "theorem", "has_sum_geometric", ["nnreal"]], ["mod", "theorem", "summable_geometric", ["nnreal"]], ["mod", "theorem", "tendsto_const_div_at_top_nhds_0_nat", ["nnreal"]], ["mod", "theorem", "tendsto_inverse_at_top_nhds_0_nat", ["nnreal"]], ["mod", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["nnreal"]], ["mod", "theorem", "tsum_geometric_nnreal", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "add_sub_cancel'", ["nnreal"]], ["mod", "theorem", "add_sub_cancel", ["nnreal"]], ["mod", "theorem", "bdd_above_coe", ["nnreal"]], ["mod", "theorem", "bdd_below_coe", ["nnreal"]], ["mod", "theorem", "bot_eq_zero", ["nnreal"]], ["mod", "theorem", "coe_Inf", ["nnreal"]], ["mod", "theorem", "coe_Sup", ["nnreal"]], ["mod", "theorem", "coe_max", ["nnreal"]], ["mod", "theorem", "coe_min", ["nnreal"]], ["mod", "theorem", "coe_nonneg", ["nnreal"]], ["mod", "theorem", "div_def", ["nnreal"]], ["mod", "theorem", "inv_eq_zero", ["nnreal"]], ["mod", "theorem", "inv_pos", ["nnreal"]], ["mod", "theorem", "inv_zero", ["nnreal"]], ["mod", "theorem", "le_of_forall_epsilon_le", ["nnreal"]], ["mod", "theorem", "le_of_real_iff_coe_le", ["nnreal"]], ["mod", "theorem", "lt_iff_exists_rat_btwn", ["nnreal"]], ["mod", "theorem", "lt_of_real_iff_coe_lt", ["nnreal"]], ["mod", "theorem", "lt_sub_iff_add_lt", ["nnreal"]], ["mod", "theorem", "mul_eq_mul_left", ["nnreal"]], ["mod", "theorem", "mul_ne_zero'", ["nnreal"]], ["mod", "theorem", "of_real_le_iff_le_coe", ["nnreal"]], ["mod", "theorem", "of_real_lt_iff_lt_coe", ["nnreal"]], ["mod", "theorem", "sub_add_cancel_of_le", ["nnreal"]], ["mod", "theorem", "sub_eq_iff_eq_add", ["nnreal"]], ["mod", "theorem", "sub_le_iff_le_add", ["nnreal"]], ["mod", "theorem", "sub_lt_iff_lt_add", ["nnreal"]], ["mod", "theorem", "val_eq_coe", ["nnreal"]], ["mod", "theorem", "zero_le_coe", ["nnreal"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "lintegral_coe_eq_integral", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": [["mod", "theorem", "of_content_exists_compact", ["measure_theory", "outer_measure"]], ["mod", "theorem", "of_content_exists_open", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "lintegral_mono_nnreal", ["measure_theory"]], ["mod", "theorem", "map_coe_ennreal_restrict", ["measure_theory", "simple_func"]], ["mod", "theorem", "map_coe_nnreal_restrict", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "cauchy_seq_of_edist_le_of_summable", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["mod", "def", "comp", ["bounded_continuous_function"]], ["mod", "theorem", "continuous_comp", ["bounded_continuous_function"]], ["mod", "theorem", "lipschitz_comp", ["bounded_continuous_function"]], ["mod", "theorem", "uniform_continuous_comp", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "coe_range_mem_nhds", ["ennreal"]], ["mod", "theorem", "continuous_coe", ["ennreal"]], ["mod", "theorem", "continuous_coe_iff", ["ennreal"]], ["mod", "theorem", "embedding_coe", ["ennreal"]], ["mod", "def", "lt_top_homeomorph_nnreal", ["ennreal"]], ["mod", "def", "ne_top_homeomorph_nnreal", ["ennreal"]], ["mod", "theorem", "nhds_coe", ["ennreal"]], ["mod", "theorem", "nhds_coe_coe", ["ennreal"]], ["mod", "theorem", "tendsto_coe", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "dist_le_coe", []], ["mod", "theorem", "dist_lt_coe", []], ["mod", "theorem", "edist_le_coe", []], ["mod", "theorem", "edist_lt_coe", []], ["mod", "theorem", "emetric_ball_nnreal", ["metric"]], ["mod", "theorem", "emetric_closed_ball_nnreal", ["metric"]], ["mod", "def", "nndist", []], ["mod", "theorem", "dist_eq", ["nnreal"]], ["mod", "theorem", "nndist_eq", ["nnreal"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": []}]}, {"timestamp": 1608103873, "sha": "47b3c4b4", "message": "feat(algebra/lie/basic): nilpotent and solvable Lie algebras (#5382)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "def", "derived_lie_ideal", []], ["del", "def", "derived_lie_submodule", []], ["add", "def", "derived_series", ["lie_algebra"]], ["add", "theorem", "derived_series_le_lower_central_series", ["lie_module"]], ["add", "def", "lower_central_series", ["lie_module"]], ["add", "theorem", "trivial_iff_derived_eq_bot", ["lie_module"]], ["add", "theorem", "trivial_lie_oper_zero", ["lie_submodule"]], ["del", "theorem", "trivial_iff_derived_eq_bot", []], ["add", "theorem", "trivial_lie_zero", []]]}]}, {"timestamp": 1608092419, "sha": "79e9aeed", "message": "feat(equiv/basic): add true_arrow_equiv (#5388)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "true_arrow_equiv", ["equiv"]]]}]}, {"timestamp": 1608081314, "sha": "26f8b288", "message": "chore(scripts): update nolints.txt (#5384)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1608081312, "sha": "e264e5f4", "message": "feat(tactic/ext): `ext?` displays applied lemmas (#5375)\nrefactor using `state_t` instead of state passing style", "changes": [{"oldPath": "src/control/monad/basic.lean", "newPath": "src/control/monad/basic.lean", "changes": []}, {"oldPath": "src/tactic/congr.lean", "newPath": "src/tactic/congr.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": []}]}, {"timestamp": 1608071032, "sha": "2ee0f1ef", "message": "feat(category_theory/isomorphism): is_iso versions (#5355)\nadd `is_iso` versions of some existing `iso` lemmas", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "comp_hom_eq_id", ["category_theory"]], ["add", "theorem", "hom_comp_eq_id", ["category_theory"]]]}]}, {"timestamp": 1608071030, "sha": "dbb6b043", "message": "feat(topology/separation): add lemma connected_component_eq_clopen_Inter (#5335)\nProve the lemma that in a t2 and compact space, the connected component of a point equals the intersection of all its clopen neighbourhoods. Will be useful for work on Profinite sets. The proof that a Profinite set is a limit of finite discrete spaces found at: https://stacks.math.columbia.edu/tag/08ZY uses this lemma. Also some proofs that the category Profinite is reflective in CompactHausdorff uses this lemma.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subset_iff_inter_eq_self", ["set"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "left_le_of_le_sup_left", ["disjoint"]], ["add", "theorem", "left_le_of_le_sup_right", ["disjoint"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "connected_component_eq_Inter_clopen", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "connected_component_subset_Inter_clopen", []], ["add", "theorem", "preimage_clopen_of_clopen", ["continuous_on"]], ["add", "theorem", "is_clopen_Inter", []], ["add", "theorem", "is_clopen_bInter", []], ["add", "theorem", "is_clopen_inter_of_disjoint_cover_clopen", []], ["add", "theorem", "is_preconnected_iff_subset_of_disjoint_closed", []], ["add", "theorem", "is_preconnected_iff_subset_of_fully_disjoint_closed", []], ["add", "theorem", "subset_or_disjoint_of_clopen", []]]}]}, {"timestamp": 1608066574, "sha": "66eddd8b", "message": "chore(algebra/category/Module/monoidal): Speed up the elaboration (#5383)\nThis takes the elaboration time from ~5s to ~2.5s for associator_naturality, from ~90s to 5s for pentagon, and from ~14s to ~8s for `triangle`.", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": []}]}, {"timestamp": 1608066572, "sha": "b7024088", "message": "feat(ring_theory/roots_of_unity): add squarefreeness mod p of minimal polynomial (#5381)\nTwo easy results about the reduction `mod p` of the minimal polynomial over `ℤ` of a primitive root of unity: it is separable and hence squarefree.", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "separable_minimal_polynomial_mod", ["is_primitive_root"]], ["add", "theorem", "squarefree_minimal_polynomial_mod", ["is_primitive_root"]]]}]}, {"timestamp": 1608055050, "sha": "78e48c02", "message": "ci(lint-copy-mod-doc.py): add reserved notation and set_option linters, enable small_alpha_vrachy_check linter (#5330)\n[As requested on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/the.20word.20.22to.22/near/219370843), the reserved notation linter checks for `reserve` or `precedence` at the start of a non-comment, non-string literal line in any file other than `tactic.core`.\nThe new set_option linter disallows `set_option pp`, `set_option profiler` and `set_option trace` at the start of a non-comment, non-string literal line.\nI also noticed that the `small_alpha_vrachy_check` linter added in #4802 wasn't actually called, so I added it to the main `lint` function.", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/lint-copy-mod-doc.py", "newPath": "scripts/lint-copy-mod-doc.py", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "congr_right", ["linear_equiv"]], ["mod", "theorem", "sup_eq_range", ["submodule"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "forall_prop_of_false", []]]}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/reserved_notation.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": [["mod", "def", "select_for_which", ["where"]]]}]}, {"timestamp": 1608050624, "sha": "c208a651", "message": "feat(analysis/mean_inequalities): add Minkowski's inequality for the Lebesgue integral of ennreal functions (#5379)", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "lintegral_Lp_add_le", ["ennreal"]], ["add", "theorem", "lintegral_mul_rpow_le_lintegral_rpow_mul_lintegral_rpow", ["ennreal"]], ["add", "theorem", "lintegral_rpow_add_le_add_snorm_mul_lintegral_rpow_add", ["ennreal"]]]}]}, {"timestamp": 1608039081, "sha": "3a997b1d", "message": "fix(group_theory/subgroup): Fix doubly-namespaced instance (#5378)\nNot sure why the linter missed this.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1608039079, "sha": "75130b39", "message": "feat(data/set/basic): nonempty set of nonempty subtype (#5373)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nonempty_of_nonempty_subtype", ["set"]]]}]}, {"timestamp": 1608039077, "sha": "d21d17b1", "message": "feat(ring_theory/roots_of_unity): minimal polynomial of primitive roots (#5322)\nI've added some simple results about the minimal polynomial of a primitive root of unity. The next step will be to prove that any two primitive roots have the same minimal polynomial.", "changes": [{"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "is_integral", ["is_primitive_root"]], ["add", "theorem", "minimal_polynomial_dvd_X_pow_sub_one", ["is_primitive_root"]]]}]}, {"timestamp": 1608028221, "sha": "0f4ac1bf", "message": "feat(category_theory/limits): product comparison simp lemmas (#5351)\nThis adds two new simp lemmas to reduce the prod comparison morphism and uses them to golf some proofs", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "prod_comparison_fst", ["category_theory", "limits"]], ["add", "theorem", "prod_comparison_snd", ["category_theory", "limits"]]]}]}, {"timestamp": 1608028219, "sha": "9ba9a983", "message": "chore(category_theory/sites): improve naming (#5350)\n- Improve naming of some lemmas to be more descriptive\n- Golf some proofs\n- Add some convenience deconstructors which are useful in practice", "changes": [{"oldPath": "src/category_theory/sites/canonical.lean", "newPath": "src/category_theory/sites/canonical.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "theorem", "is_separated_of_is_sheaf", ["category_theory", "presieve"]], ["add", "theorem", "functor_inclusion_comp_extend", ["category_theory", "presieve", "is_sheaf_for"]], ["add", "theorem", "hom_ext", ["category_theory", "presieve", "is_sheaf_for"]], ["add", "theorem", "unique_extend", ["category_theory", "presieve", "is_sheaf_for"]], ["del", "theorem", "is_sheaf_for_coarser_topology", ["category_theory", "presieve"]], ["mod", "theorem", "is_sheaf_for_iff_generate", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_iff_yoneda_sheaf_condition", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_of_le", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_of_yoneda", ["category_theory", "presieve"]], ["del", "theorem", "is_sheaf_yoneda", ["category_theory", "presieve"]], ["del", "theorem", "separated_of_sheaf", ["category_theory", "presieve"]], ["del", "theorem", "yoneda_condition_iff_sheaf_condition", ["category_theory", "presieve"]]]}]}, {"timestamp": 1608028217, "sha": "dd72a981", "message": "feat(group_theory/perm/basic): Bundle sigma_congr_right and sum_congr into monoid_homs (#5301)\nThis makes the corresponding subgroups available as `monoid_hom.range`.\nAs a result, the old subgroup definitions can be removed.\nThis also adds injectivity and cardinality lemmas.", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "def", "sigma_congr_right_hom", ["equiv", "perm"]], ["add", "theorem", "sigma_congr_right_hom_injective", ["equiv", "perm"]], ["mod", "theorem", "sigma_congr_right_inv", ["equiv", "perm"]], ["mod", "theorem", "sigma_congr_right_mul", ["equiv", "perm"]], ["mod", "theorem", "sigma_congr_right_one", ["equiv", "perm"]], ["add", "def", "sum_congr_hom", ["equiv", "perm"]], ["add", "theorem", "sum_congr_hom_injective", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": [["add", "theorem", "card_range", ["equiv", "perm", "sigma_congr_right_hom"]], ["del", "def", "sigma_congr_right_subgroup", ["equiv", "perm"]], ["add", "theorem", "card_range", ["equiv", "perm", "sum_congr_hom"]], ["del", "def", "sum_congr_subgroup", ["equiv", "perm"]]]}]}, {"timestamp": 1608028214, "sha": "8041945f", "message": "feat(category_theory/monad): monadicity theorems (#5137)\nThis is a proof of the reflexive (or crude) monadicity theorem along with a complete proof of Beck's monadicity theorem.\nAlso renames the prefix for special monad coequalizers to `free_coequalizer` rather than `coequalizer`, to avoid name-clashes when both `monad` and `limits` are imported.", "changes": [{"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/coequalizer.lean", "newPath": "src/category_theory/monad/coequalizer.lean", "changes": [["mod", "def", "beck_algebra_cofork", ["category_theory", "monad"]], ["del", "def", "bottom_map", ["category_theory", "monad", "coequalizer"]], ["del", "theorem", "condition", ["category_theory", "monad", "coequalizer"]], ["del", "def", "top_map", ["category_theory", "monad", "coequalizer"]], ["del", "def", "π", ["category_theory", "monad", "coequalizer"]], ["add", "def", "bottom_map", ["category_theory", "monad", "free_coequalizer"]], ["add", "theorem", "condition", ["category_theory", "monad", "free_coequalizer"]], ["add", "def", "top_map", ["category_theory", "monad", "free_coequalizer"]], ["add", "def", "π", ["category_theory", "monad", "free_coequalizer"]]]}, {"oldPath": null, "newPath": "src/category_theory/monad/monadicity.lean", "changes": [["add", "def", "creates_G_split_coequalizers_of_monadic", ["category_theory", "monad"]], ["add", "def", "monadic_of_creates_G_split_coequalizers", ["category_theory", "monad"]], ["add", "def", "monadic_of_has_preserves_G_split_coequalizers_of_reflects_isomorphisms", ["category_theory", "monad"]], ["add", "def", "monadic_of_has_preserves_reflects_G_split_coequalizers", ["category_theory", "monad"]], ["add", "def", "monadic_of_has_preserves_reflexive_coequalizers_of_reflects_isomorphisms", ["category_theory", "monad"]], ["add", "def", "comparison_adjunction", ["category_theory", "monad", "monadicity_internal"]], ["add", "theorem", "comparison_adjunction_counit_app", ["category_theory", "monad", "monadicity_internal"]], ["add", "theorem", "comparison_adjunction_unit_f", ["category_theory", "monad", "monadicity_internal"]], ["add", "theorem", "comparison_adjunction_unit_f_aux", ["category_theory", "monad", "monadicity_internal"]], ["add", "def", "comparison_left_adjoint_hom_equiv", ["category_theory", "monad", "monadicity_internal"]], ["add", "def", "comparison_left_adjoint_obj", ["category_theory", "monad", "monadicity_internal"]], ["add", "def", "counit_coequalizer_of_reflects_coequalizer", ["category_theory", "monad", "monadicity_internal"]], ["add", "def", "counit_cofork", ["category_theory", "monad", "monadicity_internal"]], ["add", "def", "left_adjoint_comparison", ["category_theory", "monad", "monadicity_internal"]], ["add", "def", "unit_cofork", ["category_theory", "monad", "monadicity_internal"]], ["add", "def", "unit_colimit_of_preserves_coequalizer", ["category_theory", "monad", "monadicity_internal"]]]}]}, {"timestamp": 1608028211, "sha": "407d1386", "message": "chore(category_theory/equivalence): weaken essential surjectivity (#3821)\nWeaken essential surjectivity to be a Prop, rather than the data of the inverse.", "changes": [{"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/Fintype.lean", "newPath": "src/category_theory/Fintype.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["del", "def", "equivalence_of_fully_faithfully_ess_surj", ["category_theory", "equivalence"]], ["add", "theorem", "ess_surj_of_equivalence", ["category_theory", "equivalence"]], ["del", "def", "ess_surj_of_equivalence", ["category_theory", "equivalence"]], ["del", "def", "fun_obj_preimage_iso", ["category_theory", "functor"]], ["del", "def", "obj_preimage", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": [["add", "theorem", "ess_surj", ["Compactum_to_CompHaus"]]]}]}, {"timestamp": 1608017397, "sha": "a1aa5110", "message": "feat(simps): interaction between simps and to_additive (#5331)\nIf a definition is both marked `to_additive` and `simps` (in that order), `simps` will from also apply the `to_additive` attribute to its generated lemmas (which creates the additive counterparts of the simp-lemmas).\nThis also generalizes `set_attribute` to use the default parameter if possible.\nThis implements half of #1639.", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1608004377, "sha": "a959718e", "message": "chore(algebra/quadratic_discriminant): golf proofs using limits (#5339)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "exists_le_mul_self", []], ["del", "theorem", "exists_lt_mul_self", []]]}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "exists_le_mul_self", []], ["add", "theorem", "exists_lt_mul_self", []]]}]}, {"timestamp": 1607995900, "sha": "ff13cdeb", "message": "chore(scripts): update nolints.txt (#5376)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607995898, "sha": "cadaa44a", "message": "feat(group_theory/subgroup): Add decidable_mem_range (#5371)\nThis means that `fintype (quotient_group.quotient f.range)` can be found by type-class resolution.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1607995896, "sha": "b2ab94f8", "message": "fix(group_theory): Remove a duplicate fintype instance on quotient_group.quotient (#5368)\nThis noncomputable instance was annoying, and can easy be recovered by passing in a classical decidable_pred instance instead.", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/subgroup.lean", "newPath": "src/group_theory/perm/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1607995894, "sha": "b364d337", "message": "chore(topology/instances/ennreal): remove summability assumption in tendsto_sum_nat_add (#5366)\nWe have currently\n```lean\nlemma tendsto_sum_nat_add (f : ℕ → ℝ≥0) (hf : summable f) : tendsto (λ i, ∑' k, f (k + i)) at_top (𝓝 0)\n```\nHowever, the summability assumption is not necessary as otherwise all sums are zero, and the statement still holds. The PR removes the assumption.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tendsto_sum_nat_add", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "tendsto_sum_nat_add", ["nnreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "summable_nat_add_iff", ["nnreal"]]]}]}, {"timestamp": 1607995892, "sha": "4dbb3e23", "message": "chore(data/finsupp/basic): more lemmas about `α →₀ ℕ` (#5362)\n* define `canonically_ordered_add_monoid` instance;\n* add a few simp lemmas;\n* more lemmas about product over `finsupp.antidiagonal n`;\n* define `finsupp.Iic_finset`, use it for `finite_le_nat`.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "Iic_finset", ["finsupp"]], ["add", "theorem", "antidiagonal_support_filter_fst_eq", ["finsupp"]], ["add", "theorem", "antidiagonal_support_filter_snd_eq", ["finsupp"]], ["add", "theorem", "coe_Iic_finset", ["finsupp"]], ["add", "theorem", "mem_Iic_finset", ["finsupp"]], ["add", "theorem", "nat_add_sub_cancel", ["finsupp"]], ["add", "theorem", "nat_add_sub_cancel_left", ["finsupp"]], ["add", "theorem", "nat_add_sub_of_le", ["finsupp"]], ["add", "theorem", "nat_sub_add_cancel", ["finsupp"]], ["add", "theorem", "nat_zero_sub", ["finsupp"]], ["add", "theorem", "prod_antidiagonal_support_swap", ["finsupp"]], ["mod", "theorem", "single_eq_zero", ["finsupp"]], ["mod", "theorem", "swap_mem_antidiagonal_support", ["finsupp"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1607995890, "sha": "8de08f72", "message": "chore(order/iterate): generalize lemmas about inequalities and iterations (#5357)\nIf `f : α → α` is a monotone function and `x y : ℕ → α` are two\nsequences such that `x 0 ≤ y 0`, `x (n + 1) ≤ f (x n)`, and\n`f (y n) ≤ y (n + 1)`, then `x n ≤ y n`. This lemma (and its versions\nfor `<`) generalize `geom_le` as well as `iterate_le_of_map_le`.", "changes": [{"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "geom_le", []], ["mod", "theorem", "geom_lt", []], ["add", "theorem", "tendsto_at_top_of_geom_le", []], ["del", "theorem", "tendsto_at_top_of_geom_lt", []]]}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": [["add", "theorem", "seq_le_seq", ["monotone"]], ["add", "theorem", "seq_lt_seq_of_le_of_lt", ["monotone"]], ["add", "theorem", "seq_lt_seq_of_lt_of_le", ["monotone"]], ["add", "theorem", "seq_pos_lt_seq_of_le_of_lt", ["monotone"]], ["add", "theorem", "seq_pos_lt_seq_of_lt_of_le", ["monotone"]]]}]}, {"timestamp": 1607987246, "sha": "d1904fce", "message": "refactor(measure_theory/lp_space): move most of the proof of mem_Lp.add to a new lemma in analysis/mean_inequalities (#5370)", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "lintegral_rpow_add_lt_top_of_lintegral_rpow_lt_top", ["ennreal"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": []}]}, {"timestamp": 1607987244, "sha": "dc719a9d", "message": "feat(algebra/lie/basic): define ideal operations for Lie modules (#5337)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "def", "derived_lie_ideal", []], ["add", "def", "derived_lie_submodule", []], ["mod", "theorem", "add_eq_sup", ["lie_submodule"]], ["add", "theorem", "bot_lie", ["lie_submodule"]], ["add", "theorem", "coe_submodule_le_coe_submodule", ["lie_submodule"]], ["add", "theorem", "coe_sup", ["lie_submodule"]], ["add", "theorem", "coe_to_set_mk", ["lie_submodule"]], ["add", "theorem", "coe_to_submodule_mk", ["lie_submodule"]], ["add", "theorem", "eq_bot_iff", ["lie_submodule"]], ["mod", "theorem", "le_def", ["lie_submodule"]], ["add", "theorem", "lie_bot", ["lie_submodule"]], ["add", "theorem", "lie_comm", ["lie_submodule"]], ["add", "theorem", "lie_ideal_oper_eq_span", ["lie_submodule"]], ["add", "theorem", "lie_le_inf", ["lie_submodule"]], ["add", "theorem", "lie_le_left", ["lie_submodule"]], ["add", "theorem", "lie_le_right", ["lie_submodule"]], ["add", "theorem", "lie_mem_lie", ["lie_submodule"]], ["add", "theorem", "lie_sup", ["lie_submodule"]], ["add", "theorem", "mem_sup", ["lie_submodule"]], ["add", "theorem", "mono_lie", ["lie_submodule"]], ["add", "theorem", "mono_lie_left", ["lie_submodule"]], ["add", "theorem", "mono_lie_right", ["lie_submodule"]], ["add", "theorem", "sup_lie", ["lie_submodule"]], ["add", "theorem", "trivial_iff_derived_eq_bot", []]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "mk_coe", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1607982743, "sha": "a649c59a", "message": "feat(field_theory/intermediate_field): lift2_alg_equiv (#5344)\nProves that lift2 is isomorphic as an algebra over the base field", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "def", "lift2_alg_equiv", ["intermediate_field"]]]}]}, {"timestamp": 1607975661, "sha": "4415dc0e", "message": "feat(algebra/algebra/basic): arrow_congr for alg_equiv (#5346)\nThis is a copy of equiv.arrow_congr", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "arrow_congr", ["alg_equiv"]], ["add", "theorem", "arrow_congr_comp", ["alg_equiv"]], ["add", "theorem", "arrow_congr_refl", ["alg_equiv"]], ["add", "theorem", "arrow_congr_symm", ["alg_equiv"]], ["add", "theorem", "arrow_congr_trans", ["alg_equiv"]]]}]}, {"timestamp": 1607963970, "sha": "07b5618a", "message": "chore(linear_algebra/{multilinear,alternating}): Generalize smul and neg instance (#5364)\nThis brings the generality in line with that of `linear_map`. Notably:\n* `has_neg` now exists when only the codomain has negation\n* `has_scalar` now exists for the weaker condition of `smul_comm_class` rather than `has_scalar_tower`", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "map_neg", ["alternating_map"]], ["mod", "theorem", "neg_apply", ["alternating_map"]], ["mod", "theorem", "to_multilinear_map_alternization", ["alternating_map"]], ["mod", "def", "alternatization", ["multilinear_map"]], ["mod", "theorem", "alternatization_apply", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "map_neg", ["multilinear_map"]]]}]}, {"timestamp": 1607963968, "sha": "b1c56b1b", "message": "feat(field_theory.minimal_polynomial): add results for GCD domains (#5336)\nI have added `gcd_domain_dvd`: for GCD domains, the minimal polynomial divides any primitive polynomial that has the integral\nelement as root.\nFor `gcd_domain_eq_field_fractions` and `gcd_domain_dvd` I have also added explicit versions for `ℤ`. Unfortunately, it seems impossible (to me at least) to apply the general lemmas and I had to redo the proofs, see [Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Minimal.20polynomial.20over.20.E2.84.9A.20vs.20over.20.E2.84.A4) for more details. (The basic reason seems to be that it's hard to convince lean that `is_scalar_tower ℤ ℚ α` holds using the localization map).", "changes": [{"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["add", "theorem", "gcd_domain_dvd", ["minimal_polynomial"]], ["add", "theorem", "integer_dvd", ["minimal_polynomial"]], ["add", "theorem", "over_int_eq_over_rat", ["minimal_polynomial"]]]}]}, {"timestamp": 1607963966, "sha": "f443792f", "message": "feat(topology/subset_properties): add instances for totally_disconnected_spaces (#5334)\nAdd the instances subtype.totally_disconnected_space and pi.totally_disconnected_space.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subsingleton_of_image", ["set"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1607963964, "sha": "d36af184", "message": "feat(tactic/induction): add induction'/cases'/eliminate_hyp/eliminate_expr tactics (#5027)\nThis PR adds interactive tactics `induction'` and `cases'` as well as\nnon-interactive variants `eliminate_hyp` and `eliminate_expr`. The tactics are\nsimilar to standard `induction` and `cases`, but they feature several\nimprovements:\n- `induction'` performs 'dependent induction', which means it takes the indices\n of indexed inductive types fully into account. This is convenient, for example,\n for programming language or logic formalisations, which tend to rely heavily on\n indexed types.\n- `induction'` by default generalises everything that can be generalised. This\n is to support beginners, who often struggle to identify that a proof requires\n a generalised induction hypothesis. In cases where this feature hinders more\n than it helps, it can easily be turned off.\n- `induction'` and `cases'` generate much more human-friendly names than their\n standard counterparts. This is, again, mostly to support beginners. Experts\n should usually supply explicit names to make proof scripts more robust.\n- `cases'` works for some rare goals which `cases` does not support, but should\n otherwise be mostly a drop-in replacement (except for the generated names).", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "all_some", ["list"]], ["add", "def", "fill_nones", ["list"]], ["add", "def", "take_list", ["list"]], ["add", "def", "to_rbmap", ["list"]]]}, {"oldPath": "src/tactic/binder_matching.lean", "newPath": "src/tactic/binder_matching.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/induction.lean", "changes": [["add", "inductive", "generalization_mode", ["tactic", "eliminate"]]]}, {"oldPath": null, "newPath": "test/induction.lean", "changes": [["add", "inductive", "Even", []], ["add", "inductive", "Fin", []], ["add", "def", "append", ["List"]], ["add", "inductive", "List", []], ["add", "inductive", "Two", []], ["add", "inductive", "eq", ["Vec"]], ["add", "inductive", "Vec", []], ["add", "def", "accufact", []], ["add", "theorem", "accufact_1_eq_fact", []], ["add", "inductive", "exp", ["expressions"]], ["add", "def", "subst", ["expressions"]], ["add", "theorem", "subst_Var", ["expressions"]], ["add", "theorem", "ext", ["fraction"]], ["add", "structure", "fraction", []], ["add", "inductive", "le", []], ["add", "inductive", "lt", ["less_than"]], ["add", "theorem", "lt_lte", ["less_than"]], ["add", "inductive", "lte", ["less_than"]], ["add", "inductive", "lt", []], ["add", "inductive", "nat_or_positive", []], ["add", "theorem", "not_even_2_mul_add_1", []], ["add", "theorem", "not_sorted_17_13", []], ["add", "inductive", "palindrome", ["palindrome"]], ["add", "theorem", "rev_palindrome", ["palindrome"]], ["add", "inductive", "nonempty", ["rose"]], ["add", "theorem", "nonempty_node_elim", ["rose"]], ["add", "inductive", "rose", []], ["add", "inductive", "rose₁", []], ["add", "inductive", "big_step", ["semantics"]], ["add", "theorem", "big_step_assign_iff", ["semantics"]], ["add", "theorem", "big_step_deterministic", ["semantics"]], ["add", "theorem", "big_step_ite_iff", ["semantics"]], ["add", "theorem", "big_step_of_small_step_of_big_step", ["semantics"]], ["add", "theorem", "big_step_of_star_small_step", ["semantics"]], ["add", "theorem", "big_step_seq_iff", ["semantics"]], ["add", "theorem", "big_step_skip_iff", ["semantics"]], ["add", "theorem", "big_step_while_false_iff", ["semantics"]], ["add", "theorem", "big_step_while_iff", ["semantics"]], ["add", "theorem", "big_step_while_true_iff", ["semantics"]], ["add", "inductive", "curried_big_step", ["semantics"]], ["add", "theorem", "not_big_step_while_true", ["semantics"]], ["add", "theorem", "not_curried_big_step_while_true", ["semantics"]], ["add", "inductive", "small_step", ["semantics"]], ["add", "theorem", "small_step_deterministic", ["semantics"]], ["add", "theorem", "small_step_final", ["semantics"]], ["add", "theorem", "small_step_if_equal_states", ["semantics"]], ["add", "theorem", "small_step_ite_iff", ["semantics"]], ["add", "theorem", "small_step_seq_iff", ["semantics"]], ["add", "theorem", "small_step_skip", ["semantics"]], ["add", "theorem", "lift", ["semantics", "star"]], ["add", "theorem", "single", ["semantics", "star"]], ["add", "theorem", "trans", ["semantics", "star"]], ["add", "theorem", "trans_induction_on", ["semantics", "star"]], ["add", "theorem", "star_small_step_of_big_step", ["semantics"]], ["add", "theorem", "star_small_step_seq", ["semantics"]], ["add", "def", "update", ["semantics", "state"]], ["add", "def", "state", ["semantics"]], ["add", "inductive", "stmt", ["semantics"]], ["add", "inductive", "sorted", []], ["add", "theorem", "head", ["star"]], ["add", "theorem", "head_induction_on", ["star"]], ["add", "inductive", "star", []], ["add", "inductive", "tc", ["transitive_closure"]], ["add", "theorem", "tc_pets₁", ["transitive_closure"]], ["add", "theorem", "tc_pets₂", ["transitive_closure"]], ["add", "theorem", "tc_trans'", ["transitive_closure"]], ["add", "theorem", "tc_trans", ["transitive_closure"]], ["add", "inductive", "ℕ'", []], ["add", "def", "plus", ["ℕ₂"]], ["add", "inductive", "ℕ₂", []]]}]}, {"timestamp": 1607951781, "sha": "a65de994", "message": "feat(data/equiv): Add `congr_arg`, `congr_fun`, and `ext_iff` lemmas to equivs (#5367)\nThese members already exist on the corresponding homs", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "ext_iff", ["alg_equiv"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "ext_iff", ["linear_equiv"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "ext_iff", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "ext_iff", ["ring_equiv"]]]}]}, {"timestamp": 1607951778, "sha": "dad88d8c", "message": "feat(field_theory/splitting_field): add splits_X theorem (#5343)\nThis is a handy result and isn't definitionally a special case of splits_X_sub_C", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "splits_X", ["polynomial"]]]}]}, {"timestamp": 1607951775, "sha": "cf7377ac", "message": "chore(field_theory/adjoin): move dim/findim lemmas (#5342)\nadjoin.lean has some dim/findim lemmas, some of which could be moved to intermediate_field.lean", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "dim_eq_one_iff", ["intermediate_field"]], ["del", "theorem", "dim_intermediate_field_eq_dim_subalgebra", ["intermediate_field"]], ["add", "theorem", "findim_eq_one_iff", ["intermediate_field"]], ["del", "theorem", "findim_intermediate_field_eq_findim_subalgebra", ["intermediate_field"]], ["del", "theorem", "to_subalgebra_eq_iff", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "dim_eq_dim_subalgebra", ["intermediate_field"]], ["mod", "theorem", "eq_of_le_of_findim_eq'", ["intermediate_field"]], ["mod", "theorem", "eq_of_le_of_findim_eq", ["intermediate_field"]], ["mod", "theorem", "eq_of_le_of_findim_le'", ["intermediate_field"]], ["mod", "theorem", "eq_of_le_of_findim_le", ["intermediate_field"]], ["add", "theorem", "findim_eq_findim_subalgebra", ["intermediate_field"]], ["add", "theorem", "to_subalgebra_eq_iff", ["intermediate_field"]]]}]}, {"timestamp": 1607951774, "sha": "0d7ddf1f", "message": "chore(order/filter/at_top_bot): add/rename lemmas about limits like `±∞*c` (#5333)\n### New lemmas\n* `filter.tendsto.nsmul_at_top` and `filter.tendsto.nsmul_at_bot`;\n* `filter.tendsto_mul_self_at_top`;\n* `filter.tendsto.at_top_mul_at_bot`, `filter.tendsto.at_bot_mul_at_top`,\n `filter.tendsto.at_bot_mul_at_bot`;\n* `filter.tendsto.at_top_of_const_mul`, `filter.tendsto.at_top_of_mul_const`;\n* `filter.tendsto.at_top_div_const`, `filter.tendsto.neg_const_mul_at_top`,\n `filter.tendsto.at_top_mul_neg_const`, `filter.tendsto.const_mul_at_bot`,\n `filter.tendsto.at_bot_mul_const`, `filer.tendsto.at_bot_div_const`,\n `filter.tendsto.neg_const_mul_at_bot`, `filter.tendsto.at_bot_mul_neg_const`.\n### Renamed lemmas\n* `tendsto_pow_at_top` → `filter.tendsto_pow_at_top`;\n* `tendsto_at_top_mul_left` → `filter.tendsto.const_mul_at_top'`;\n* `tendsto_at_top_mul_right` → `filter.tendsto.at_top_mul_const'`;\n* `tendsto_at_top_mul_left'` → `filter.tendsto.const_mul_at_top`;\n* `tendsto_at_top_mul_right'` → `filer.tendsto.at_top_mul_const`;\n* `tendsto_mul_at_top` → `filter.tendsto.at_top_mul`;\n* `tendsto_mul_at_bot` → `filter.tendsto.at_top_mul_neg`;\n* `tendsto_at_top_mul_at_top` → `filter.tendsto.at_top_mul_at_top`.", "changes": [{"oldPath": "src/analysis/asymptotic_equivalent.lean", "newPath": "src/analysis/asymptotic_equivalent.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": [["add", "theorem", "at_top_mul_const'", ["filter", "tendsto"]], ["add", "theorem", "const_mul_at_top'", ["filter", "tendsto"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "at_bot_div_const", ["filter", "tendsto"]], ["add", "theorem", "at_bot_mul_at_bot", ["filter", "tendsto"]], ["add", "theorem", "at_bot_mul_at_top", ["filter", "tendsto"]], ["add", "theorem", "at_bot_mul_const", ["filter", "tendsto"]], ["add", "theorem", "at_bot_mul_neg_const", ["filter", "tendsto"]], ["add", "theorem", "at_top_div_const", ["filter", "tendsto"]], ["add", "theorem", "at_top_mul_at_bot", ["filter", "tendsto"]], ["add", "theorem", "at_top_mul_at_top", ["filter", "tendsto"]], ["add", "theorem", "at_top_mul_const", ["filter", "tendsto"]], ["add", "theorem", "at_top_mul_neg_const", ["filter", "tendsto"]], ["add", "theorem", "at_top_of_const_mul", ["filter", "tendsto"]], ["add", "theorem", "at_top_of_mul_const", ["filter", "tendsto"]], ["add", "theorem", "const_mul_at_bot", ["filter", "tendsto"]], ["add", "theorem", "const_mul_at_top", ["filter", "tendsto"]], ["add", "theorem", "neg_const_mul_at_bot", ["filter", "tendsto"]], ["add", "theorem", "neg_const_mul_at_top", ["filter", "tendsto"]], ["add", "theorem", "nsmul_at_bot", ["filter", "tendsto"]], ["add", "theorem", "nsmul_at_top", ["filter", "tendsto"]], ["del", "theorem", "tendsto_at_top_mul_at_top", ["filter"]], ["add", "theorem", "tendsto_mul_self_at_top", ["filter"]], ["mod", "theorem", "tendsto_neg_at_bot_at_top", ["filter"]], ["mod", "theorem", "tendsto_neg_at_top_at_bot", ["filter"]], ["add", "theorem", "tendsto_pow_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "at_top_mul", ["filter", "tendsto"]], ["add", "theorem", "at_top_mul_neg", ["filter", "tendsto"]], ["del", "theorem", "tendsto_at_top_div", []], ["del", "theorem", "tendsto_at_top_mul_left'", []], ["del", "theorem", "tendsto_at_top_mul_left", []], ["del", "theorem", "tendsto_at_top_mul_right'", []], ["del", "theorem", "tendsto_at_top_mul_right", []], ["del", "theorem", "tendsto_mul_at_bot", []], ["del", "theorem", "tendsto_mul_at_top", []], ["del", "theorem", "tendsto_pow_at_top", []]]}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1607951772, "sha": "1d37ff18", "message": "feat(analysis/mean_inequalities): add weighted generalized mean inequality for ennreal (#5316)", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "rpow_arith_mean_le_arith_mean2_rpow", ["ennreal"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["ennreal"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "le_of_top_imp_top_of_to_nnreal_le", ["ennreal"]], ["add", "theorem", "to_nnreal_mul", ["ennreal"]], ["add", "theorem", "to_nnreal_pow", ["ennreal"]], ["add", "theorem", "to_nnreal_prod", ["ennreal"]]]}]}, {"timestamp": 1607951770, "sha": "cecab59d", "message": "feat(group_theory/congruence): Add inv and neg (#5304)", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}]}, {"timestamp": 1607951768, "sha": "6dc50004", "message": "feat(computability/language): define formal languages (#5291)\nLifted from #5036 in order to include in #5038 as well.", "changes": [{"oldPath": null, "newPath": "src/computability/language.lean", "changes": [["add", "theorem", "add_def", ["language"]], ["add", "theorem", "add_self", ["language"]], ["add", "theorem", "mul_def", ["language"]], ["add", "theorem", "one_def", ["language"]], ["add", "def", "star", ["language"]], ["add", "theorem", "star_def", ["language"]], ["add", "theorem", "star_def_nonempty", ["language"]], ["add", "theorem", "zero_def", ["language"]], ["add", "def", "language", []]]}]}, {"timestamp": 1607951765, "sha": "67b5ff6f", "message": "feat(algebra/direct_sum): constructor for morphisms into direct sums (#5204)", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["add", "def", "from_add_monoid", ["direct_sum"]], ["add", "theorem", "from_add_monoid_of", ["direct_sum"]], ["add", "theorem", "from_add_monoid_of_apply", ["direct_sum"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}]}, {"timestamp": 1607946359, "sha": "c722b967", "message": "feat (topology/instances/ennreal): summability from finite sum control (#5363)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "summable_iff_not_tendsto_nat_at_top", ["nnreal"]], ["add", "theorem", "summable_of_sum_range_le", ["nnreal"]], ["add", "theorem", "tsum_le_of_sum_range_le", ["nnreal"]], ["add", "theorem", "summable_iff_not_tendsto_nat_at_top_of_nonneg", []], ["add", "theorem", "summable_of_sum_range_le", []], ["add", "theorem", "tsum_le_of_sum_range_le", []]]}]}, {"timestamp": 1607940171, "sha": "91e5b8a7", "message": "chore(analysis/normed_space/ordered): minor golfing (#5356)", "changes": [{"oldPath": "src/analysis/normed_space/ordered.lean", "newPath": "src/analysis/normed_space/ordered.lean", "changes": []}]}, {"timestamp": 1607940168, "sha": "2245cfb6", "message": "feat(measurable_space): infix notation for measurable_equiv (#5329)\nWe use `≃ᵐ` as notation. Note: `≃ₘ` is already used for diffeomorphisms.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "def", "ennreal_equiv_sum", ["ennreal"]], ["mod", "def", "to_measurable_equiv", ["homemorph"]], ["mod", "def", "ennreal_equiv_nnreal", ["measurable_equiv"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "coe_eq", ["measurable_equiv"]], ["mod", "def", "prod_assoc", ["measurable_equiv"]], ["mod", "def", "prod_comm", ["measurable_equiv"]], ["mod", "def", "prod_congr", ["measurable_equiv"]], ["mod", "def", "refl", ["measurable_equiv"]], ["mod", "def", "prod", ["measurable_equiv", "set"]], ["mod", "def", "range_inl", ["measurable_equiv", "set"]], ["mod", "def", "range_inr", ["measurable_equiv", "set"]], ["mod", "def", "singleton", ["measurable_equiv", "set"]], ["mod", "def", "univ", ["measurable_equiv", "set"]], ["mod", "def", "sum_congr", ["measurable_equiv"]], ["mod", "def", "symm", ["measurable_equiv"]], ["mod", "def", "trans", ["measurable_equiv"]]]}]}, {"timestamp": 1607934930, "sha": "6f69741b", "message": "chore(analysis/calculus/*): rename `*.of_local_homeomorph` to `local_homeomorph.*_symm` (#5358)\nRename some lemmas, and make `(f : local_homeomorph _ _)` an explicit argument:\n* `has_fderiv_at.of_local_homeomorph` → `local_homeomorph.has_fderiv_at_symm`;\n* `times_cont_diff_at.of_local_homeomorph` → `local_homeomorph.times_cont_diff_at_symm`.\nIf we want to apply one of these lemmas to prove smoothness of, e.g., `arctan`, `log`, or `arcsin`, then the goal\nhas no `local_homeomorph.symm`, and we need to explicitly supply a `local_homeomorph` with an appropriate `inv_fun`.\nAlso add some lemmas that help to prove that the inverse function is **not** differentiable at a point.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "congr_of_eventually_eq_of_mem", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_at_symm", ["local_homeomorph"]], ["add", "theorem", "not_differentiable_at_of_local_left_inverse_has_deriv_at_zero", []], ["add", "theorem", "not_differentiable_within_at_of_local_left_inverse_has_deriv_within_at_zero", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["del", "theorem", "of_local_homeomorph", ["has_fderiv_at"]], ["add", "theorem", "has_fderiv_at_symm", ["local_homeomorph"]], ["add", "theorem", "has_strict_fderiv_at_symm", ["local_homeomorph"]]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["mod", "theorem", "local_inverse_apply_image", ["has_strict_fderiv_at"]], ["add", "theorem", "local_inverse_def", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff_at_symm", ["local_homeomorph"]], ["del", "theorem", "of_local_homeomorph", ["times_cont_diff_at"]]]}]}, {"timestamp": 1607913692, "sha": "714bc15f", "message": "feat(category_theory/adjunction): adjoint lifting theorems (#5118)\nProves the [adjoint lifting theorem](https://ncatlab.org/nlab/show/adjoint+lifting+theorem) and the [adjoint triangle theorem](https://ncatlab.org/nlab/show/adjoint+triangle+theorem).\nThe intent here is for all but the last four statements in the file to be implementation.", "changes": [{"oldPath": null, "newPath": "src/category_theory/adjunction/lifting.lean", "changes": [["add", "def", "construct_left_adjoint_equiv", ["category_theory", "lift_adjoint"]], ["add", "def", "counit_coequalises", ["category_theory", "lift_adjoint"]], ["add", "def", "other_map", ["category_theory", "lift_adjoint"]]]}]}, {"timestamp": 1607909211, "sha": "b7a9615a", "message": "chore(scripts): update nolints.txt (#5360)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607853492, "sha": "88fb7cab", "message": "chore(analysis/calculus): move the definition of `formal_multilinear_series` to a new file (#5348)", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/formal_multilinear_series.lean", "changes": [["add", "theorem", "congr", ["formal_multilinear_series"]], ["add", "def", "shift", ["formal_multilinear_series"]], ["add", "def", "unshift", ["formal_multilinear_series"]], ["add", "def", "formal_multilinear_series", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["del", "theorem", "congr", ["formal_multilinear_series"]], ["del", "def", "restrict_scalars", ["formal_multilinear_series"]], ["del", "def", "shift", ["formal_multilinear_series"]], ["del", "def", "unshift", ["formal_multilinear_series"]], ["del", "def", "formal_multilinear_series", []]]}]}, {"timestamp": 1607822996, "sha": "36eec1a9", "message": "chore(scripts): update nolints.txt (#5341)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607817554, "sha": "eb9164bd", "message": "feat(category_theory/sites): naming and attributes (#5340)\nAdds simps projections for sieve arrows and makes the names consistent (some used `mem_` and others used `_apply`, now they only use the latter).", "changes": [{"oldPath": "src/category_theory/sites/canonical.lean", "newPath": "src/category_theory/sites/canonical.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "theorem", "Inf_apply", ["category_theory", "sieve"]], ["add", "theorem", "Sup_apply", ["category_theory", "sieve"]], ["add", "theorem", "inter_apply", ["category_theory", "sieve"]], ["del", "theorem", "mem_Inf", ["category_theory", "sieve"]], ["del", "theorem", "mem_Sup", ["category_theory", "sieve"]], ["del", "theorem", "mem_generate", ["category_theory", "sieve"]], ["del", "theorem", "mem_inter", ["category_theory", "sieve"]], ["del", "theorem", "mem_pullback", ["category_theory", "sieve"]], ["del", "theorem", "mem_pushforward_of_comp", ["category_theory", "sieve"]], ["del", "theorem", "mem_top", ["category_theory", "sieve"]], ["del", "theorem", "mem_union", ["category_theory", "sieve"]], ["add", "theorem", "pushforward_apply_comp", ["category_theory", "sieve"]], ["del", "theorem", "sieve_of_subfunctor_apply", ["category_theory", "sieve"]], ["add", "theorem", "top_apply", ["category_theory", "sieve"]], ["add", "theorem", "union_apply", ["category_theory", "sieve"]]]}]}, {"timestamp": 1607812889, "sha": "68818b3a", "message": "feat(field_theory/galois): Is_galois iff is_galois top (#5285)\nProves that E/F is Galois iff top/F is Galois.", "changes": [{"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["add", "theorem", "transfer_galois", ["alg_equiv"]], ["add", "theorem", "of_alg_equiv", ["is_galois"]], ["add", "theorem", "is_galois_iff_is_galois_top", []]]}]}, {"timestamp": 1607793456, "sha": "5ced4dde", "message": "feat(ring_theory/finiteness): add iff_quotient_mv_polynomial (#5321)\nAdd characterizations of finite type algebra as quotient of polynomials rings. There are three version of the same lemma, using a `finset`, a `fintype` and `fin n`.", "changes": [{"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "def", "alg_equiv_of_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/finiteness.lean", "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "iff_quotient_mv_polynomial''", ["algebra", "finite_type"]], ["add", "theorem", "iff_quotient_mv_polynomial'", ["algebra", "finite_type"]], ["add", "theorem", "iff_quotient_mv_polynomial", ["algebra", "finite_type"]]]}]}, {"timestamp": 1607763807, "sha": "3afdf41f", "message": "chore(*): generalize some lemmas from `linear_ordered_semiring` to `ordered_semiring` (#5327)\nAPI changes:\n* Many lemmas now have weaker typeclass assumptions. Sometimes this means that `@myname _ _ _` needs one more `_`.\n* Drop `eq_one_of_mul_self_left_cancel` etc in favor of the new `mul_eq_left_iff` etc.\n* A few new lemmas that state `monotone` or `strict_mono_incr_on`.", "changes": [{"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["mod", "theorem", "add_one_pow_unbounded_of_pos", []], ["mod", "theorem", "exists_nat_ge", []], ["mod", "theorem", "exists_nat_gt", []]]}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["mod", "theorem", "two_ne_zero'", []]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "eq_one_of_left_cancel_mul_self", []], ["del", "theorem", "eq_one_of_mul_self_left_cancel", []], ["del", "theorem", "eq_one_of_mul_self_right_cancel", []], ["del", "theorem", "eq_one_of_right_cancel_mul_self", []], ["add", "theorem", "left_eq_mul_iff", []], ["add", "theorem", "mul_eq_left_iff", []], ["add", "theorem", "mul_eq_right_iff", []], ["add", "theorem", "right_eq_mul_iff", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_mono", []], ["add", "theorem", "strict_mono_incr_on_pow", []], ["add", "theorem", "strict_mono_pow", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["mod", "theorem", "cast_abs", ["int"]], ["mod", "theorem", "cast_le", ["int"]], ["mod", "theorem", "cast_lt", ["int"]], ["mod", "theorem", "cast_lt_zero", ["int"]], ["mod", "theorem", "cast_max", ["int"]], ["mod", "theorem", "cast_min", ["int"]], ["add", "theorem", "cast_mono", ["int"]], ["mod", "theorem", "cast_nonneg", ["int"]], ["mod", "theorem", "cast_nonpos", ["int"]], ["mod", "theorem", "cast_pos", ["int"]], ["add", "theorem", "cast_strict_mono", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "abs_cast", ["nat"]], ["mod", "theorem", "cast_add_one_pos", ["nat"]], ["mod", "theorem", "cast_le", ["nat"]], ["mod", "theorem", "cast_le_one", ["nat"]], ["mod", "theorem", "cast_lt", ["nat"]], ["mod", "theorem", "cast_lt_one", ["nat"]], ["mod", "theorem", "cast_nonneg", ["nat"]], ["mod", "theorem", "cast_pos", ["nat"]], ["mod", "theorem", "cast_two", ["nat"]], ["add", "theorem", "mono_cast", ["nat"]], ["mod", "theorem", "one_le_cast", ["nat"]], ["mod", "theorem", "one_lt_cast", ["nat"]], ["mod", "theorem", "strict_mono_cast", ["nat"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/order/filter/archimedean.lean", "newPath": "src/order/filter/archimedean.lean", "changes": [["mod", "theorem", "tendsto_coe_int_at_top_at_top", []], ["mod", "theorem", "tendsto_coe_int_at_top_iff", []], ["mod", "theorem", "tendsto_coe_nat_at_top_at_top", []], ["mod", "theorem", "tendsto_coe_nat_at_top_iff", []]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}]}, {"timestamp": 1607757422, "sha": "dad5aabe", "message": "refactor(ring_theory/polynomial/homogeneous): redefine `mv_polynomial.homogeneous_component` (#5294)\n* redefine `homogeneous_component` using `finsupp.restrict_dom`,\n “upgrade” it to a `linear_map`;\n* add `coeff_homogeneous_component` and use it to golf some proofs.", "changes": [{"oldPath": "src/ring_theory/polynomial/homogeneous.lean", "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": [["add", "theorem", "coeff_homogeneous_component", ["mv_polynomial"]]]}]}, {"timestamp": 1607757420, "sha": "9cc8835b", "message": "feat(group_theory/perm/subgroup): Add some simple subgroups of permutations (#5279)", "changes": [{"oldPath": null, "newPath": "src/group_theory/perm/subgroup.lean", "changes": [["add", "def", "sigma_congr_right_subgroup", ["equiv", "perm"]], ["add", "def", "sum_congr_subgroup", ["equiv", "perm"]]]}]}, {"timestamp": 1607757418, "sha": "84f99388", "message": "feat(category_theory/sites): sheaves on types (#5259)", "changes": [{"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "theorem", "is_sheaf_for", ["category_theory", "presieve", "is_sheaf"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/types.lean", "changes": [["add", "def", "discrete_presieve", ["category_theory"]], ["add", "def", "discrete_sieve", ["category_theory"]], ["add", "theorem", "discrete_sieve_mem", ["category_theory"]], ["add", "def", "eval", ["category_theory"]], ["add", "theorem", "eval_app", ["category_theory"]], ["add", "theorem", "eval_map", ["category_theory"]], ["add", "theorem", "eval_types_glue", ["category_theory"]], ["add", "theorem", "generate_discrete_presieve_mem", ["category_theory"]], ["add", "theorem", "is_sheaf_yoneda'", ["category_theory"]], ["add", "theorem", "subcanonical_types_grothendieck_topology", ["category_theory"]], ["add", "theorem", "types_glue_eval", ["category_theory"]], ["add", "def", "types_grothendieck_topology", ["category_theory"]], ["add", "theorem", "types_grothendieck_topology_eq_canonical", ["category_theory"]], ["add", "def", "yoneda'", ["category_theory"]], ["add", "theorem", "yoneda'_comp", ["category_theory"]]]}]}, {"timestamp": 1607757416, "sha": "0344aeed", "message": "feat(ring_theory/*): various lemmas about quotients, localizations, and polynomials (#5249)", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "quotient_map_comp_mk", ["ideal"]], ["add", "theorem", "quotient_map_surjective", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_quotient_map_iff", []], ["add", "theorem", "is_integral_elem_of_is_integral_elem_comp", ["ring_hom"]], ["add", "theorem", "is_integral_tower_top_of_is_integral", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["mod", "theorem", "radical_eq_jacobson", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "localization_map_bijective_of_field", []], ["add", "theorem", "map_injective_of_injective", []]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "eq_zero_of_constant_mem_of_maximal", ["ideal"]], ["add", "theorem", "polynomial_not_is_field", ["ideal"]]]}]}, {"timestamp": 1607757413, "sha": "d0323804", "message": "feat(field_theory/normal): normal_of_alg_equiv (#5225)\nProves that normal is preserved by an alg_equiv", "changes": [{"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "transfer_normal", ["alg_equiv"]], ["add", "theorem", "of_alg_equiv", ["normal"]]]}]}, {"timestamp": 1607747893, "sha": "f51fe7b6", "message": "chore(data/fin): Improve docstrings, rename `coe_sub_nat`, add `nat_add_zero` (#5290)\nThese are cherry-picked from the tuple PR, #4406.\n`coe_sub_nat` was previously named `sub_nat_coe`, but this didn't match `coe_nat_add` and `coe_add_nat`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_sub_nat", ["fin"]], ["add", "theorem", "nat_add_zero", ["fin"]], ["mod", "def", "sub_nat", ["fin"]]]}]}, {"timestamp": 1607737700, "sha": "2609428d", "message": "chore(scripts): update nolints.txt (#5328)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607737698, "sha": "b02c529a", "message": "feat(category_theory/limits): strengthen simp lemma (#5326)\nMakes a simp lemma slightly stronger", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "cone_π", ["category_theory", "limits", "limit"]]]}]}, {"timestamp": 1607737697, "sha": "e7ca8016", "message": "feat(data/list/chain): induction up the chain (#5325)\nSlightly strengthen statements that were there before", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "induction_head", ["list", "chain"]]]}]}, {"timestamp": 1607737693, "sha": "f0c8a15d", "message": "chore(algebra/ordered_ring): golf some proofs using `strict_mono_incr_on` (#5323)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "strict_mono_incr_on_mul_self", []]]}]}, {"timestamp": 1607737690, "sha": "01746f84", "message": "feat(outer_measure): define bounded_by (#5314)\n`bounded_by` wrapper around `of_function` that drops the condition that `m ∅ = 0`. \nRefactor `Inf_gen` to use `bounded_by`.\nI am also planning to use `bounded_by` for finitary products of measures.\nAlso add some complete lattice lemmas", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "Inf_eq_bounded_by_Inf_gen", ["measure_theory", "outer_measure"]], ["del", "theorem", "Inf_eq_of_function_Inf_gen", ["measure_theory", "outer_measure"]], ["add", "theorem", "Inf_gen_def", ["measure_theory", "outer_measure"]], ["del", "theorem", "Inf_gen_empty", ["measure_theory", "outer_measure"]], ["del", "theorem", "Inf_gen_nonempty1", ["measure_theory", "outer_measure"]], ["del", "theorem", "Inf_gen_nonempty2", ["measure_theory", "outer_measure"]], ["add", "def", "bounded_by", ["measure_theory", "outer_measure"]], ["add", "theorem", "bounded_by_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "bounded_by_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "bounded_by_eq", ["measure_theory", "outer_measure"]], ["add", "theorem", "bounded_by_eq_of_function", ["measure_theory", "outer_measure"]], ["add", "theorem", "bounded_by_le", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_bounded_by'", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_bounded_by", ["measure_theory", "outer_measure"]], ["add", "theorem", "supr_Inf_gen_nonempty", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "binfi_le_of_le", []], ["add", "theorem", "le_bsupr_of_le", []], ["add", "theorem", "le_infi_const", []], ["add", "theorem", "supr_const_le", []]]}]}, {"timestamp": 1607737688, "sha": "3782acf1", "message": "feat(topology/algebra/*): Criterion to ensure topological monoids and groups (#5284)\nThis is old stuff from the perfectoid project that was never PRed and is useful for the liquid tensor experiment.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "prod_map_map_eq'", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "of_comm_of_nhds_one", ["topological_group"]], ["add", "theorem", "of_nhds_aux", ["topological_group"]], ["add", "theorem", "of_nhds_one'", ["topological_group"]], ["add", "theorem", "of_nhds_one", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "of_nhds_one", ["has_continuous_mul"]], ["add", "theorem", "has_continuous_mul_of_comm_of_nhds_one", []]]}]}, {"timestamp": 1607727292, "sha": "846ee3f4", "message": "feat(data/equiv): symm_symm_apply (#5324)\nA little dsimp lemma that's often helpful", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "symm_symm_apply", ["equiv"]]]}]}, {"timestamp": 1607718368, "sha": "63e1ad43", "message": "chore(group_theory/perm/basic): Add missing lemmas (#5320)\nThese lemmas existed for left multiplication but not right multiplication", "changes": [{"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "mul_swap_eq_iff", ["equiv"]], ["add", "theorem", "mul_swap_involutive", ["equiv"]], ["add", "theorem", "mul_swap_mul_self", ["equiv"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1607718366, "sha": "90aa66bf", "message": "chore(algebra/big_operators/basic): Rename hypotheses for clarity (#5318)\nThis makes them somewhat more consistent with `prod_bij`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}]}, {"timestamp": 1607705048, "sha": "3a88a9ea", "message": "chore(data/subtype): Add coind_bijective and map_involutive (#5319)", "changes": [{"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "coind_bijective", ["subtype"]], ["add", "theorem", "coind_surjective", ["subtype"]], ["add", "theorem", "map_involutive", ["subtype"]]]}]}, {"timestamp": 1607705046, "sha": "029b2587", "message": "chore(linear_algebra/tensor_product): Actually relax the requirements for add_comm_group (#5315)\nA previous commit (#5305) changed the definition to not need these, but forgot to actually change these.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1607705044, "sha": "db712d59", "message": "chore(*): simp lemmas for `tendsto`, `Ixx`, and `coe` (#5296)\n* For `(f : α → β) (l : filter β)`, simplify `tendsto (λ a : Ixx*, f x) at_top l`\n to `tendsto f _ l`, and similarly for `at_bot`.\n* For `(f : α → Ixx*) (l : filter α)`, simplify\n `tendsto f l at_top` to `tendsto (λ x, (f x : β)) l _`, and\n similarly for `at_bot`.\nHere `Ixx*` is one of the intervals `Ici a`, `Ioi a`, `Ioo a b` etc,\nand `_` is a filter that depends on the choice of `Ixx` and\n`at_top`/`at_bot`.\n* Drop some “nontriviality” assumptions like `no_top_order` for lemmas\nabout `Ioi a`.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["mod", "theorem", "comap_exp_nhds_within_Ioi_zero", ["real"]], ["mod", "def", "exp_order_iso", ["real"]], ["mod", "theorem", "log_surjective", ["real"]], ["mod", "theorem", "log_zero", ["real"]], ["mod", "theorem", "map_exp_at_bot", ["real"]], ["mod", "theorem", "range_exp", ["real"]], ["mod", "theorem", "range_log", ["real"]], ["mod", "theorem", "surj_on_log'", ["real"]], ["mod", "theorem", "surj_on_log", ["real"]], ["mod", "theorem", "tendsto_exp_at_bot_nhds_within", ["real"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "at_bot_Iio_eq", ["filter"]], ["mod", "theorem", "at_top_Ioi_eq", ["filter"]], ["add", "theorem", "tendsto_Ici_at_top", ["filter"]], ["add", "theorem", "tendsto_Iic_at_bot", ["filter"]], ["add", "theorem", "tendsto_Iio_at_bot", ["filter"]], ["add", "theorem", "tendsto_Ioi_at_top", ["filter"]], ["add", "theorem", "tendsto_comp_coe_Ici_at_top", ["filter"]], ["add", "theorem", "tendsto_comp_coe_Iic_at_bot", ["filter"]], ["add", "theorem", "tendsto_comp_coe_Iio_at_bot", ["filter"]], ["add", "theorem", "tendsto_comp_coe_Ioi_at_top", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "nontrivial_iff_nonempty", ["filter"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "range_eq", ["order_iso"]], ["add", "theorem", "range_eq", ["rel_iso"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "comap_coe_Iio_nhds_within_Iio", []], ["mod", "theorem", "comap_coe_Ioi_nhds_within_Ioi", []], ["mod", "theorem", "comap_coe_Ioo_nhds_within_Iio", []], ["mod", "theorem", "comap_coe_Ioo_nhds_within_Ioi", []], ["mod", "theorem", "comap_coe_nhds_within_Iio_of_Ioo_subset", []], ["mod", "theorem", "comap_coe_nhds_within_Ioi_of_Ioo_subset", []], ["mod", "theorem", "map_coe_Iio_at_top", []], ["mod", "theorem", "map_coe_Ioi_at_bot", []], ["mod", "theorem", "map_coe_at_bot_of_Ioo_subset", []], ["mod", "theorem", "map_coe_at_top_of_Ioo_subset", []], ["add", "theorem", "tendsto_Iio_at_top", []], ["add", "theorem", "tendsto_Ioi_at_bot", []], ["add", "theorem", "tendsto_Ioo_at_bot", []], ["add", "theorem", "tendsto_Ioo_at_top", []], ["add", "theorem", "tendsto_comp_coe_Iio_at_top", []], ["add", "theorem", "tendsto_comp_coe_Ioi_at_bot", []], ["add", "theorem", "tendsto_comp_coe_Ioo_at_bot", []], ["add", "theorem", "tendsto_comp_coe_Ioo_at_top", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1607694351, "sha": "a372dfce", "message": "chore(*): don't assume `sub_eq_add_neg` and `div_eq_mul_inv` are defeq (#5302)\nThis PR prepares for a follow-up PR (#5303) that adds `div` and `sub` fields to (`add_`)`group`(`_with_zero`). That follow-up PR is intended to fix the following kind of diamonds:\nLet `foo X` be a type with a `∀ X, has_div (foo X)` instance but no `∀ X, has_inv (foo X)`, e.g. when `foo X` is a `euclidean_domain`. Suppose we also have an instance `∀ X [cromulent X], group_with_zero (foo X)`. Then the `(/)` coming from `group_with_zero_has_div` cannot be defeq to the `(/)` coming from `foo.has_div`.\nAs a consequence of making the `has_div` instances defeq, we can no longer assume that `(div_eq_mul_inv a b : a / b = a * b⁻¹) = rfl` for all groups. This preparation PR should have changed all places in mathlib that assumed defeqness, to rewrite explicitly instead.\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60div.60.20as.20a.20field.20in.20.60group(_with_zero).60", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "mul_one_div", []]]}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "div_left_injective", []], ["add", "theorem", "div_right_injective", []], ["add", "theorem", "inv_eq_one_div", ["group"]], ["add", "theorem", "mul_one_div", ["group"]], ["mod", "theorem", "neg_add'", []], ["del", "theorem", "sub_left_injective", []], ["del", "theorem", "sub_right_injective", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["add", "theorem", "div_eq_mul_inv", ["group"]], ["mod", "theorem", "sub_eq_add_neg", []]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "map_sub", ["add_monoid_hom"]]]}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["mod", "theorem", "sub_apply", ["pi"]]]}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero/basic.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["mod", "theorem", "div_eq_inv_mul", []], ["del", "theorem", "div_eq_mul_inv", []], ["mod", "theorem", "div_one", []], ["mod", "theorem", "div_self", []], ["mod", "theorem", "one_div", []], ["mod", "theorem", "zero_div", []]]}, {"oldPath": "src/algebra/group_with_zero/defs.lean", "newPath": "src/algebra/group_with_zero/defs.lean", "changes": [["add", "theorem", "div_eq_mul_inv", []]]}, {"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "sub_le_sub_iff", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "def", "continuous_multilinear_curry_right_equiv'", []], ["add", "theorem", "continuous_multilinear_curry_right_equiv_apply'", []], ["add", "theorem", "continuous_multilinear_curry_right_equiv_symm_apply'", []]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "coe_sub", ["real", "angle"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "add_apply", ["matrix"]], ["mod", "theorem", "neg_apply", ["matrix"]], ["add", "theorem", "sub_apply", ["matrix"]], ["mod", "theorem", "zero_apply", ["matrix"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "monic_sub_of_left", ["polynomial"]], ["add", "theorem", "monic_sub_of_right", ["polynomial"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["mod", "theorem", "sub_mem", ["is_add_subgroup"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_subspace.lean", "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": [["mod", "theorem", "add_neg_eq_sub", ["tactic", "ring"]]]}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": [["mod", "theorem", "div_pf", ["tactic", "ring_exp"]], ["mod", "theorem", "sub_pf", ["tactic", "ring_exp"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "is_closed_map_div_right", []], ["add", "theorem", "is_open_map_div_right", []]]}, {"oldPath": "src/topology/algebra/group_with_zero.lean", "newPath": "src/topology/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": []}]}, {"timestamp": 1607690150, "sha": "d2ae4e25", "message": "feat(ring_theory/witt_vector): truncated Witt vectors, definition and ring structure (#5162)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/truncated.lean", "changes": [["add", "def", "coeff", ["truncated_witt_vector"]], ["add", "theorem", "coeff_mk", ["truncated_witt_vector"]], ["add", "theorem", "coeff_out", ["truncated_witt_vector"]], ["add", "theorem", "coeff_zero", ["truncated_witt_vector"]], ["add", "theorem", "ext", ["truncated_witt_vector"]], ["add", "theorem", "ext_iff", ["truncated_witt_vector"]], ["add", "def", "mk", ["truncated_witt_vector"]], ["add", "theorem", "mk_coeff", ["truncated_witt_vector"]], ["add", "def", "out", ["truncated_witt_vector"]], ["add", "theorem", "out_injective", ["truncated_witt_vector"]], ["add", "theorem", "truncate_fun_out", ["truncated_witt_vector"]], ["add", "def", "truncated_witt_vector", []], ["add", "theorem", "coeff_truncate_fun", ["witt_vector"]], ["add", "theorem", "out_truncate_fun", ["witt_vector"]], ["add", "def", "truncate_fun", ["witt_vector"]], ["add", "theorem", "truncate_fun_add", ["witt_vector"]], ["add", "theorem", "truncate_fun_mul", ["witt_vector"]], ["add", "theorem", "truncate_fun_neg", ["witt_vector"]], ["add", "theorem", "truncate_fun_one", ["witt_vector"]], ["add", "theorem", "truncate_fun_surjective", ["witt_vector"]], ["add", "theorem", "truncate_fun_zero", ["witt_vector"]]]}]}, {"timestamp": 1607684277, "sha": "6288eeda", "message": "feat(linear_algebra/alternating): Add alternatization of multilinear_map (#5187)\nThis adds:\n* `def multilinear_map.alternatize`\n* `lemma alternating_map.to_multilinear_map_alternize`", "changes": [{"oldPath": "src/linear_algebra/alternating.lean", "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "to_multilinear_map_alternization", ["alternating_map"]], ["add", "def", "alternatization", ["multilinear_map"]], ["add", "theorem", "alternatization_apply", ["multilinear_map"]]]}]}, {"timestamp": 1607651207, "sha": "dbdba555", "message": "chore(scripts): update nolints.txt (#5313)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607651205, "sha": "8817c3ea", "message": "chore(linear_algebra/tensor_product): Relax the ring requirement to semiring for the group instance (#5305)", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "theorem", "map_neg₂", ["linear_map"]], ["add", "def", "aux", ["tensor_product", "neg"]], ["add", "theorem", "aux_of", ["tensor_product", "neg"]], ["mod", "theorem", "neg_tmul", ["tensor_product"]]]}]}, {"timestamp": 1607651204, "sha": "9e550f2d", "message": "feat(topology/separation): finite t1 spaces are discrete (#5298)\nThese lemmas should simplify the arguments of #4301\nZulip discussion: https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/discrete_topology/near/218932564 \n", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subset_singleton_iff", ["set"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "is_open_singleton_iff", ["metric"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "forall_open_iff_discrete", []], ["add", "theorem", "singletons_open_iff_discrete", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "discrete_of_t1_of_finite", []]]}]}, {"timestamp": 1607651201, "sha": "2c0b43d9", "message": "feat(combinatorics/simple_graph/degree_sum): degree-sum formula and handshake lemma (#5263)\nAdds the theorem that the sum of the degrees of the vertices of a simple graph is twice the number of edges. Also adds corollaries like the handshake lemma, which is that the number of odd-degree vertices is even.\nThe corollary `exists_ne_odd_degree_if_exists_odd` is in anticipation of Sperner's lemma.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "edge_mem_other_incident_set", ["simple_graph"]]]}, {"oldPath": null, "newPath": "src/combinatorics/simple_graph/degree_sum.lean", "changes": [["add", "def", "edge", ["simple_graph", "dart"]], ["add", "theorem", "edge_fiber", ["simple_graph", "dart"]], ["add", "theorem", "edge_mem", ["simple_graph", "dart"]], ["add", "def", "rev", ["simple_graph", "dart"]], ["add", "theorem", "rev_edge", ["simple_graph", "dart"]], ["add", "theorem", "rev_involutive", ["simple_graph", "dart"]], ["add", "theorem", "rev_ne", ["simple_graph", "dart"]], ["add", "theorem", "rev_rev", ["simple_graph", "dart"]], ["add", "structure", "dart", ["simple_graph"]], ["add", "theorem", "dart_card_eq_sum_degrees", ["simple_graph"]], ["add", "theorem", "dart_card_eq_twice_card_edges", ["simple_graph"]], ["add", "theorem", "dart_edge_eq_iff", ["simple_graph"]], ["add", "theorem", "dart_edge_fiber_card", ["simple_graph"]], ["add", "theorem", "dart_fst_fiber", ["simple_graph"]], ["add", "theorem", "dart_fst_fiber_card_eq_degree", ["simple_graph"]], ["add", "def", "dart_of_neighbor_set", ["simple_graph"]], ["add", "theorem", "dart_of_neighbor_set_injective", ["simple_graph"]], ["add", "theorem", "even_card_odd_degree_vertices", ["simple_graph"]], ["add", "theorem", "exists_ne_odd_degree_of_exists_odd_degree", ["simple_graph"]], ["add", "theorem", "odd_card_odd_degree_vertices_ne", ["simple_graph"]], ["add", "theorem", "sum_degrees_eq_twice_card_edges", ["simple_graph"]]]}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/zmod/parity.lean", "changes": [["add", "theorem", "eq_one_iff_odd", ["zmod"]], ["add", "theorem", "eq_zero_iff_even", ["zmod"]], ["add", "theorem", "ne_zero_iff_odd", ["zmod"]]]}]}, {"timestamp": 1607642345, "sha": "918d5a95", "message": "chore(data/finsupp/basic): redefine `finsupp.filter` (#5310)\nAlso use lemmas about `indicator_function` and `function.update` to\ngolf some proofs about `finsupp.single`.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "add_apply", ["finsupp"]], ["add", "theorem", "coe_add", ["finsupp"]], ["add", "theorem", "coe_fn_injective", ["finsupp"]], ["mod", "theorem", "ext", ["finsupp"]], ["mod", "theorem", "filter_add", ["finsupp"]], ["add", "def", "filter_add_hom", ["finsupp"]], ["add", "theorem", "filter_apply", ["finsupp"]], ["add", "theorem", "filter_eq_indicator", ["finsupp"]], ["add", "theorem", "filter_eq_sum", ["finsupp"]], ["add", "theorem", "fun_support_eq", ["finsupp"]], ["del", "theorem", "injective_coe_fn", ["finsupp"]], ["mod", "theorem", "single_apply", ["finsupp"]], ["add", "theorem", "single_apply_eq_zero", ["finsupp"]], ["add", "theorem", "single_eq_indicator", ["finsupp"]], ["add", "theorem", "single_eq_update", ["finsupp"]], ["mod", "theorem", "support_filter", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}]}, {"timestamp": 1607642343, "sha": "c2958736", "message": "feat(algebra/module/basic): {nat,int}_smul_apply (#5308)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "int_smul_apply", ["add_monoid_hom"]], ["mod", "theorem", "map_int_cast_smul", ["add_monoid_hom"]], ["mod", "theorem", "map_int_module_smul", ["add_monoid_hom"]], ["mod", "theorem", "map_nat_cast_smul", ["add_monoid_hom"]], ["mod", "theorem", "map_rat_cast_smul", ["add_monoid_hom"]], ["mod", "theorem", "map_rat_module_smul", ["add_monoid_hom"]], ["add", "theorem", "nat_smul_apply", ["add_monoid_hom"]]]}]}, {"timestamp": 1607636659, "sha": "c9793b52", "message": "chore(data/mv_polynomial): delete stray comments (#5312)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1607636656, "sha": "f72734a3", "message": "chore(data/complex/exponential): add `inv_one_add_tan_sq` etc (#5299)\n* mark `cos_sq_add_sin_sq` and `sin_sq_add_cos_sq` as `@[simp]`;\n* add lemmas representing `sin x` and `cos x` as functions of `tan x`.", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_sq_add_sin_sq", ["complex"]], ["add", "theorem", "inv_one_add_tan_sq", ["complex"]], ["mod", "theorem", "sin_sq_add_cos_sq", ["complex"]], ["add", "theorem", "tan_mul_cos", ["complex"]], ["add", "theorem", "tan_sq_div_one_add_tan_sq", ["complex"]], ["add", "theorem", "cos_sq_add_sin_sq", ["real"]], ["add", "theorem", "inv_one_add_tan_sq", ["real"]], ["add", "theorem", "inv_sqrt_one_add_tan_sq", ["real"]], ["mod", "theorem", "sin_sq_add_cos_sq", ["real"]], ["add", "theorem", "tan_div_sqrt_one_add_tan_sq", ["real"]], ["add", "theorem", "tan_mul_cos", ["real"]], ["add", "theorem", "tan_sq_div_one_add_tan_sq", ["real"]]]}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}]}, {"timestamp": 1607636654, "sha": "32b2e305", "message": "feat(category_theory/monad): special coequalizers for a monad (#5239)\nTwo important coequalizer diagrams related to a monad", "changes": [{"oldPath": null, "newPath": "src/category_theory/monad/coequalizer.lean", "changes": [["add", "def", "beck_algebra_coequalizer", ["category_theory", "monad"]], ["add", "def", "beck_algebra_cofork", ["category_theory", "monad"]], ["add", "def", "beck_coequalizer", ["category_theory", "monad"]], ["add", "def", "beck_cofork", ["category_theory", "monad"]], ["add", "def", "beck_split_coequalizer", ["category_theory", "monad"]], ["add", "def", "bottom_map", ["category_theory", "monad", "coequalizer"]], ["add", "theorem", "condition", ["category_theory", "monad", "coequalizer"]], ["add", "def", "top_map", ["category_theory", "monad", "coequalizer"]], ["add", "def", "π", ["category_theory", "monad", "coequalizer"]]]}]}, {"timestamp": 1607625581, "sha": "4e8486b8", "message": "feat(algebra/group/hom): add_monoid_hom.sub_apply (#5307)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "sub_apply", ["add_monoid_hom"]]]}]}, {"timestamp": 1607625579, "sha": "be6c37ce", "message": "feat(algebra/big_operators/finsupp): rename variables, and move to top of file (#5306)", "changes": [{"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": []}]}, {"timestamp": 1607619756, "sha": "f3c9d204", "message": "chore(linear_algebra/determinant): Golf a proof (#5309)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1607619753, "sha": "cdb13984", "message": "feat(category_theory/limits): any functor preserves split coequalizers (#5246)\nOnce #5230 merges, the only diff in this PR should be in `src/category_theory/limits/preserves/shapes/equalizers.lean`", "changes": [{"oldPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": []}]}, {"timestamp": 1607608741, "sha": "12d097e3", "message": "feat(category_theory/sites/sieves): change presieve operation defs (#5295)\nchange the definitions of operations on presieves to avoid `eq_to_hom` and use inductive types instead, which makes proofs a lot nicer", "changes": [{"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": [["add", "inductive", "pullback_arrows", ["category_theory"]], ["del", "def", "pullback_arrows", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "inductive", "singleton", ["category_theory", "presieve"]], ["del", "def", "singleton", ["category_theory", "presieve"]], ["mod", "theorem", "singleton_self", ["category_theory", "presieve"]]]}, {"oldPath": "src/category_theory/sites/spaces.lean", "newPath": "src/category_theory/sites/spaces.lean", "changes": []}]}, {"timestamp": 1607608738, "sha": "3f42fb48", "message": "feat(group_theory/perm/sign): Add sign_sum_congr (#5266)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "sum_congr_refl_swap", ["equiv", "perm"]], ["add", "theorem", "sum_congr_swap_refl", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "sum_congr_one_swap", ["equiv", "perm"]], ["add", "theorem", "sum_congr_swap_one", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "sign_sum_congr", ["equiv", "perm"]]]}]}, {"timestamp": 1607608736, "sha": "90755c36", "message": "refactor(order/filter/ultrafilter): drop `filter.is_ultrafilter` (#5264)\nUse bundled `ultrafilter`s instead.", "changes": [{"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "coe_abs", ["hyperreal"]], ["mod", "theorem", "coe_lt_coe", ["hyperreal"]], ["mod", "theorem", "coe_max", ["hyperreal"]], ["mod", "theorem", "coe_min", ["hyperreal"]], ["mod", "def", "hyperreal", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_coe_compl'", ["subtype"]], ["add", "theorem", "preimage_coe_compl", ["subtype"]], ["add", "theorem", "preimage_coe_eq_empty", ["subtype"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_ne_bot_iff_compl_range", ["filter"]], ["add", "theorem", "comap_ne_bot_iff_frequently", ["filter"]], ["add", "theorem", "compl_not_mem_sets", ["filter"]], ["add", "theorem", "empty_nmem_sets", ["filter"]], ["mod", "theorem", "principal_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "theorem", "abs_def", ["filter", "germ"]], ["mod", "theorem", "coe_lt", ["filter", "germ"]], ["mod", "theorem", "coe_pos", ["filter", "germ"]], ["mod", "theorem", "const_abs", ["filter", "germ"]], ["mod", "theorem", "const_div", ["filter", "germ"]], ["mod", "theorem", "const_lt", ["filter", "germ"]], ["mod", "theorem", "const_max", ["filter", "germ"]], ["mod", "theorem", "const_min", ["filter", "germ"]], ["del", "theorem", "le_def", ["filter", "germ"]], ["mod", "theorem", "lt_def", ["filter", "germ"]], ["mod", "theorem", "max_def", ["filter", "germ"]], ["mod", "theorem", "min_def", ["filter", "germ"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["add", "theorem", "le_def", ["filter", "germ"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "bot_ne_hyperfilter", ["filter"]], ["mod", "theorem", "compl_mem_hyperfilter_of_finite", ["filter"]], ["del", "theorem", "exists_ultrafilter", ["filter"]], ["mod", "theorem", "exists_ultrafilter_iff", ["filter"]], ["del", "theorem", "exists_ultrafilter_of_finite_inter_nonempty", ["filter"]], ["add", "theorem", "forall_ne_bot_le_iff", ["filter"]], ["mod", "theorem", "hyperfilter_le_cofinite", ["filter"]], ["del", "theorem", "hyperfilter_ne_bot", ["filter"]], ["del", "theorem", "em", ["filter", "is_ultrafilter"]], ["del", "theorem", "eventually_imp", ["filter", "is_ultrafilter"]], ["del", "theorem", "eventually_not", ["filter", "is_ultrafilter"]], ["del", "theorem", "eventually_or", ["filter", "is_ultrafilter"]], ["del", "theorem", "unique", ["filter", "is_ultrafilter"]], ["del", "def", "is_ultrafilter", ["filter"]], ["del", "theorem", "is_ultrafilter_hyperfilter", ["filter"]], ["mod", "theorem", "le_iff_ultrafilter", ["filter"]], ["del", "theorem", "le_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_hyperfilter_of_finite_compl", ["filter"]], ["mod", "theorem", "mem_iff_ultrafilter", ["filter"]], ["del", "theorem", "mem_of_finite_Union_ultrafilter", ["filter"]], ["del", "theorem", "mem_of_finite_sUnion_ultrafilter", ["filter"]], ["del", "theorem", "mem_or_compl_mem_of_ultrafilter", ["filter"]], ["del", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["del", "theorem", "ne_empty_of_mem_ultrafilter", ["filter"]], ["mod", "theorem", "nmem_hyperfilter_of_finite", ["filter"]], ["del", "theorem", "nonempty_of_mem_ultrafilter", ["filter"]], ["del", "theorem", "sup_of_ultrafilters", ["filter"]], ["add", "theorem", "supr_ultrafilter_le_eq", ["filter"]], ["del", "def", "bind", ["filter", "ultrafilter"]], ["del", "def", "comap", ["filter", "ultrafilter"]], ["del", "theorem", "eq_iff_val_le_val", ["filter", "ultrafilter"]], ["del", "def", "map", ["filter", "ultrafilter"]], ["del", "def", "pure", ["filter", "ultrafilter"]], ["del", "def", "ultrafilter", ["filter"]], ["del", "theorem", "ultrafilter_bind", ["filter"]], ["del", "theorem", "ultrafilter_iff_compl_mem_iff_not_mem'", ["filter"]], ["del", "theorem", "ultrafilter_iff_compl_mem_iff_not_mem", ["filter"]], ["del", "theorem", "ultrafilter_map", ["filter"]], ["del", "theorem", "ultrafilter_of_le", ["filter"]], ["del", "theorem", "ultrafilter_of_spec", ["filter"]], ["del", "theorem", "ultrafilter_of_ultrafilter", ["filter"]], ["del", "theorem", "ultrafilter_pure", ["filter"]], ["del", "theorem", "ultrafilter_ultrafilter_of'", ["filter"]], ["del", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["add", "def", "bind", ["ultrafilter"]], ["add", "theorem", "coe_inj", ["ultrafilter"]], ["add", "theorem", "coe_injective", ["ultrafilter"]], ["add", "theorem", "coe_le_coe", ["ultrafilter"]], ["add", "theorem", "coe_map", ["ultrafilter"]], ["add", "def", "comap", ["ultrafilter"]], ["add", "theorem", "compl_mem_iff_not_mem", ["ultrafilter"]], ["add", "theorem", "compl_not_mem_iff", ["ultrafilter"]], ["add", "theorem", "empty_not_mem", ["ultrafilter"]], ["add", "theorem", "eventually_imp", ["ultrafilter"]], ["add", "theorem", "eventually_not", ["ultrafilter"]], ["add", "theorem", "eventually_or", ["ultrafilter"]], ["add", "theorem", "exists_le", ["ultrafilter"]], ["add", "theorem", "exists_ultrafilter_of_finite_inter_nonempty", ["ultrafilter"]], ["add", "theorem", "ext", ["ultrafilter"]], ["add", "theorem", "finite_bUnion_mem_iff", ["ultrafilter"]], ["add", "theorem", "finite_sUnion_mem_iff", ["ultrafilter"]], ["add", "theorem", "frequently_iff_eventually", ["ultrafilter"]], ["add", "theorem", "le_of_inf_ne_bot'", ["ultrafilter"]], ["add", "theorem", "le_of_inf_ne_bot", ["ultrafilter"]], ["add", "def", "map", ["ultrafilter"]], ["add", "theorem", "mem_coe", ["ultrafilter"]], ["add", "theorem", "mem_map", ["ultrafilter"]], ["add", "theorem", "mem_or_compl_mem", ["ultrafilter"]], ["add", "theorem", "mem_pure_sets", ["ultrafilter"]], ["add", "theorem", "ne_empty_of_mem", ["ultrafilter"]], ["add", "theorem", "nonempty_of_mem", ["ultrafilter"]], ["add", "theorem", "of_coe", ["ultrafilter"]], ["add", "def", "of_compl_not_mem_iff", ["ultrafilter"]], ["add", "theorem", "of_le", ["ultrafilter"]], ["add", "theorem", "union_mem_iff", ["ultrafilter"]], ["add", "theorem", "unique", ["ultrafilter"]], ["add", "structure", "ultrafilter", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "continuous_at_iff_ultrafilter", []], ["del", "def", "Lim", ["filter", "ultrafilter"]], ["add", "def", "Lim", ["ultrafilter"]], ["add", "theorem", "cluster_pt_iff", ["ultrafilter"]]]}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "Lim_eq_iff_le_nhds", ["is_ultrafilter"]], ["add", "theorem", "Lim_eq_iff_le_nhds", ["ultrafilter"]]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": [["mod", "theorem", "convergent_eqv_pure", []], ["mod", "theorem", "ultrafilter_comap_pure_nhds", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "theorem", "le_nhds_Lim", ["is_ultrafilter"]], ["add", "theorem", "le_nhds_Lim", ["ultrafilter"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["del", "theorem", "cauchy_of_totally_bounded_of_ultrafilter", []], ["add", "theorem", "cauchy_of_totally_bounded", ["ultrafilter"]]]}]}, {"timestamp": 1607608734, "sha": "2bf0c2e7", "message": "feat(group_theory/group_action/sub_mul_action): add a has_zero instance (#5216)", "changes": [{"oldPath": "src/group_theory/group_action/sub_mul_action.lean", "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": [["add", "theorem", "zero_mem", ["sub_mul_action"]]]}]}, {"timestamp": 1607597463, "sha": "702b1e8c", "message": "refactor(data/finsupp/basic): merge `finsupp.of_multiset` and `multiset.to_finsupp` (#5237)\n* redefine `finsupp.to_multiset` as an `add_equiv`;\n* drop `finsupp.equiv_multiset` and `finsupp.of_multiset`;\n* define `multiset.to_finsupp` as `finsupp.to_multiset.symm`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "to_finset_sum_count_smul_eq", ["multiset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "coe_order_iso_multiset", ["finsupp"]], ["add", "theorem", "coe_order_iso_multiset_symm", ["finsupp"]], ["del", "def", "equiv_multiset", ["finsupp"]], ["add", "theorem", "le_def", ["finsupp"]], ["mod", "theorem", "mem_antidiagonal_support", ["finsupp"]], ["del", "def", "of_multiset", ["finsupp"]], ["del", "theorem", "of_multiset_apply", ["finsupp"]], ["add", "def", "order_iso_multiset", ["finsupp"]], ["mod", "theorem", "prod_to_multiset", ["finsupp"]], ["mod", "theorem", "to_finset_to_multiset", ["finsupp"]], ["mod", "def", "to_multiset", ["finsupp"]], ["add", "theorem", "to_multiset_apply", ["finsupp"]], ["mod", "theorem", "to_multiset_single", ["finsupp"]], ["mod", "theorem", "to_multiset_to_finsupp", ["finsupp"]], ["mod", "def", "to_finsupp", ["multiset"]], ["mod", "theorem", "to_finsupp_add", ["multiset"]], ["add", "theorem", "to_finsupp_eq_iff", ["multiset"]], ["mod", "theorem", "to_finsupp_singleton", ["multiset"]], ["mod", "theorem", "to_finsupp_zero", ["multiset"]], ["add", "theorem", "to_finsuppstrict_mono", ["multiset"]]]}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": [["del", "theorem", "le_def", ["finsupp"]], ["del", "theorem", "of_multiset_strict_mono", ["finsupp"]], ["del", "def", "order_iso_multiset", ["finsupp"]], ["del", "theorem", "order_iso_multiset_apply", ["finsupp"]], ["del", "theorem", "order_iso_multiset_symm_apply", ["finsupp"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "id_def", ["function"]]]}]}, {"timestamp": 1607589895, "sha": "ac669c74", "message": "chore(category_theory/limits/preserves): cleanup (#4163)\n(edited to update).\nThis PR entirely re-does the construction of limits from products and equalizers in a shorter way. With the new preserves limits machinery this new construction also shows that a functor which preserves products and equalizers preserves all limits, which previously was *really* annoying to do", "changes": [{"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": [["add", "theorem", "has_limit_of_equalizer_and_product", ["category_theory", "limits"]], ["add", "def", "build_is_limit", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["add", "def", "build_limit", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["del", "def", "cones_hom", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["del", "def", "cones_inv", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["del", "def", "cones_iso", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["del", "def", "diagram", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["add", "def", "preserves_finite_limits_of_preserves_equalizers_and_finite_products", ["category_theory", "limits"]], ["add", "def", "preserves_limit_of_preserves_equalizers_and_product", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_preserves_equalizers_and_products", ["category_theory", "limits"]]]}]}, {"timestamp": 1607585959, "sha": "e68d2d78", "message": "feat(category_theory/sites): category of sheaves (#5255)\nCategory of sheaves on a grothendieck topology\n(cc: @kckennylau)", "changes": [{"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "def", "Sheaf", ["category_theory"]], ["add", "def", "Sheaf_to_presheaf", ["category_theory"]]]}]}, {"timestamp": 1607563550, "sha": "ba568a61", "message": "chore(scripts): update nolints.txt (#5297)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607540992, "sha": "84c0132e", "message": "chore(data/indicator_function): a few more `simp` lemmas (#5293)\n* drop `indicator_of_support_subset` in favor of the new `indicator_eq_self`;\n* add a few more lemmas: `indicator_apply_eq_self`,\n `indicator_apply_eq_zero`, `indicator_eq_zero`, `indicator_eq_zero'`", "changes": [{"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_apply_eq_self", ["set"]], ["add", "theorem", "indicator_apply_eq_zero", ["set"]], ["add", "theorem", "indicator_eq_self", ["set"]], ["add", "theorem", "indicator_eq_zero'", ["set"]], ["add", "theorem", "indicator_eq_zero", ["set"]], ["mod", "theorem", "indicator_indicator", ["set"]], ["del", "theorem", "indicator_of_support_subset", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "piecewise_singleton", ["set"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}]}, {"timestamp": 1607535369, "sha": "bf25d26f", "message": "chore(data/set/intervals/proj_Icc): add `strict_mono_incr_on` (#5292)\n* rename `set.Icc_extend_monotone` to `monotone.Icc_extend`;\n* add `set.strict_mono_incr_on_proj_Icc` and `strict_mono.strict_mono_incr_on_Icc_extend`.", "changes": [{"oldPath": "src/data/set/intervals/proj_Icc.lean", "newPath": "src/data/set/intervals/proj_Icc.lean", "changes": [["add", "theorem", "Icc_extend", ["monotone"]], ["del", "theorem", "Icc_extend_monotone", ["set"]], ["add", "theorem", "strict_mono_incr_on_proj_Icc", ["set"]], ["add", "theorem", "strict_mono_incr_on_Icc_extend", ["strict_mono"]]]}]}, {"timestamp": 1607535366, "sha": "efe18d5d", "message": "feat(measure_theory/interval_integral): continuous implies interval_integrable (#5288)", "changes": [{"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "interval_integrable", ["continuous"]], ["add", "theorem", "interval_integrable", ["continuous_on"]]]}]}, {"timestamp": 1607535364, "sha": "e357a338", "message": "chore(linear_algebra/multilinear): Add `linear_map.comp_multilinear_map_dom_dom_congr` (#5270)", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "comp_multilinear_map_dom_dom_congr", ["linear_map"]]]}]}, {"timestamp": 1607535362, "sha": "698d6b76", "message": "ci(.github/workflows/dependent-issues.yml): automation for \"blocked-by-other-PR\" label (#5261)\nWhen a PR or issue is updated, the [dependent-issues](https://github.com/z0al/dependent-issues) action will do the following on all PRs which are marked as dependent on it (with the text `- [ ] depends on: #blah` that we're already using):\n- add / remove the \"blocked-by-other-PR\" label\n- post / edit a comment with the current status of its dependencies (this is slightly redundant, given that we have another action which checks off the dependent PRs in the PR comments, but the extra notifications might be useful).\n- it also adds a new status check which is pending (yellow) until all dependencies are closed.", "changes": [{"oldPath": null, "newPath": ".github/workflows/dependent-issues.yml", "changes": []}]}, {"timestamp": 1607530380, "sha": "a87f62bc", "message": "feat(category_theory/limits/preserves): preserving binary products (#5061)\nThis moves and re-does my old file about preserving binary products to match the new API and framework for preservation of special shapes, and also cleans up some existing API. \n(I can split this up if necessary but they're all pretty minor changes, so hope this is okay!)", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/functor_category.lean", "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/binary_products.lean", "changes": [["add", "def", "is_limit_map_cone_binary_fan_equiv", ["category_theory", "limits"]], ["add", "def", "is_limit_of_has_binary_product_of_preserves_limit", ["category_theory", "limits"]], ["add", "def", "is_limit_of_reflects_of_map_is_limit", ["category_theory", "limits"]], ["add", "def", "map_is_limit_of_preserves_of_is_limit", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_pair"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_pair"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_pair"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "coprod_is_coprod", ["category_theory", "limits"]], ["mod", "def", "map_pair", ["category_theory", "limits"]], ["mod", "def", "prod_comparison", ["category_theory", "limits"]], ["add", "def", "prod_is_prod", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "newPath": null, "changes": [["del", "def", "alternative_cone", ["category_theory", "limits"]], ["del", "def", "alternative_cone_is_limit", ["category_theory", "limits"]], ["del", "def", "preserves_binary_prod_of_prod_comparison_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1607505844, "sha": "d12a7319", "message": "chore(data/mv_polynomial): mark `mv_polynomial.ext` as `@[ext]` (#5289)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "ext", ["mv_polynomial"]]]}]}, {"timestamp": 1607488604, "sha": "1f309c52", "message": "feat(analysis/special_functions): `real.log` is infinitely smooth away from zero (#5116)\nAlso redefine it using `order_iso.to_homeomorph` and prove more lemmas about limits of `exp`/`log`.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff_on_inv", []]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "log", ["continuous"]], ["add", "theorem", "log", ["continuous_at"]], ["add", "theorem", "log", ["continuous_on"]], ["add", "theorem", "log", ["continuous_within_at"]], ["add", "theorem", "log", ["deriv"]], ["del", "theorem", "deriv_log'", []], ["add", "theorem", "log", ["deriv_within"]], ["del", "theorem", "deriv_within_log'", []], ["add", "theorem", "log", ["fderiv"]], ["add", "theorem", "log", ["fderiv_within"]], ["add", "theorem", "log", ["filter", "tendsto"]], ["add", "theorem", "log", ["has_fderiv_at"]], ["add", "theorem", "log", ["has_fderiv_within_at"]], ["mod", "theorem", "log", ["measurable"]], ["add", "theorem", "coe_comp_exp_order_iso", ["real"]], ["add", "theorem", "coe_exp_order_iso_apply", ["real"]], ["add", "theorem", "comap_exp_at_top", ["real"]], ["add", "theorem", "comap_exp_nhds_within_Ioi_zero", ["real"]], ["mod", "theorem", "continuous_at_log", ["real"]], ["add", "theorem", "continuous_at_log_iff", ["real"]], ["mod", "theorem", "continuous_log'", ["real"]], ["del", "theorem", "continuous_log", ["real"]], ["add", "theorem", "continuous_on_log", ["real"]], ["add", "theorem", "deriv_log'", ["real"]], ["add", "theorem", "deriv_log", ["real"]], ["add", "theorem", "differentiable_at_log", ["real"]], ["add", "theorem", "differentiable_at_log_iff", ["real"]], ["add", "theorem", "differentiable_on_log", ["real"]], ["del", "theorem", "exists_exp_eq_of_pos", ["real"]], ["add", "def", "exp_order_iso", ["real"]], ["add", "theorem", "log_of_ne_zero", ["real"]], ["add", "theorem", "log_of_pos", ["real"]], ["add", "theorem", "map_exp_at_bot", ["real"]], ["add", "theorem", "map_exp_at_top", ["real"]], ["mod", "theorem", "range_exp", ["real"]], ["add", "theorem", "strict_mono_decr_on_log", ["real"]], ["add", "theorem", "strict_mono_incr_on_log", ["real"]], ["add", "theorem", "surj_on_log'", ["real"]], ["add", "theorem", "surj_on_log", ["real"]], ["add", "theorem", "tendsto_comp_exp_at_bot", ["real"]], ["add", "theorem", "tendsto_comp_exp_at_top", ["real"]], ["add", "theorem", "tendsto_exp_at_bot", ["real"]], ["add", "theorem", "tendsto_exp_at_bot_nhds_within", ["real"]], ["add", "theorem", "tendsto_exp_comp_at_top", ["real"]], ["add", "theorem", "tendsto_log_nhds_within_zero", ["real"]], ["del", "theorem", "tendsto_log_one_zero", ["real"]], ["add", "theorem", "times_cont_diff_at_log", ["real"]], ["add", "theorem", "times_cont_diff_on_log", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_eq_exp", ["real"]], ["mod", "theorem", "exp_le_exp", ["real"]], ["mod", "theorem", "exp_lt_exp", ["real"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "cod_restrict", ["strict_mono"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "univ", ["order_iso", "set"]], ["add", "def", "set_congr", ["order_iso"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "intermediate_value_univ", []], ["mod", "theorem", "intermediate_value_univ₂", []], ["mod", "theorem", "intermediate_value", ["is_preconnected"]], ["mod", "theorem", "intermediate_value₂", ["is_preconnected"]], ["mod", "theorem", "mem_range_of_exists_le_of_exists_ge", []], ["mod", "theorem", "nhds_within_Ici_self_ne_bot", []], ["mod", "theorem", "nhds_within_Iic_self_ne_bot", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_open_compl_singleton", []]]}]}, {"timestamp": 1607478178, "sha": "2032f7ba", "message": "chore(scripts): update nolints.txt (#5287)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607478176, "sha": "7ae11651", "message": "chore(data/pi): Express `single` in terms of `function.update` (#5283)\nThese were originally introduced in #3513.\nPerhaps `function.update` wasn't as well developed back then.", "changes": [{"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": []}]}, {"timestamp": 1607467301, "sha": "1e3447b8", "message": "chore(data/equiv/mul_add): Split out the group structure on automorphisms (#5281)\nThis prevents `group_theory.perm.basic` being imported into lots of files that don't care about permutations.\nThe argument here is that `add_aut` is to `add_equiv` as `perm` is to `equiv`: `perm` gets its group structure in a separate file to where `equiv` is defined, so `add_aut`, `mul_aut`, and `ring_aut` should too.\nThis adds back imports of `group_theory.perm.basic` to downstream files that inherited them through `data.equiv.mul_add`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["del", "theorem", "apply_inv_self", ["add_aut"]], ["del", "theorem", "coe_mul", ["add_aut"]], ["del", "theorem", "coe_one", ["add_aut"]], ["del", "theorem", "inv_apply_self", ["add_aut"]], ["del", "theorem", "inv_def", ["add_aut"]], ["del", "theorem", "mul_apply", ["add_aut"]], ["del", "theorem", "mul_def", ["add_aut"]], ["del", "theorem", "one_apply", ["add_aut"]], ["del", "theorem", "one_def", ["add_aut"]], ["del", "def", "to_perm", ["add_aut"]], ["del", "theorem", "apply_inv_self", ["mul_aut"]], ["del", "theorem", "coe_mul", ["mul_aut"]], ["del", "theorem", "coe_one", ["mul_aut"]], ["del", "def", "conj", ["mul_aut"]], ["del", "theorem", "conj_apply", ["mul_aut"]], ["del", "theorem", "conj_inv_apply", ["mul_aut"]], ["del", "theorem", "conj_symm_apply", ["mul_aut"]], ["del", "theorem", "inv_apply_self", ["mul_aut"]], ["del", "theorem", "inv_def", ["mul_aut"]], ["del", "theorem", "mul_apply", ["mul_aut"]], ["del", "theorem", "mul_def", ["mul_aut"]], ["del", "theorem", "one_apply", ["mul_aut"]], ["del", "theorem", "one_def", ["mul_aut"]], ["del", "def", "to_perm", ["mul_aut"]], ["del", "def", "mul_aut", []]]}, {"oldPath": null, "newPath": "src/data/equiv/mul_add_aut.lean", "changes": [["add", "theorem", "apply_inv_self", ["add_aut"]], ["add", "theorem", "coe_mul", ["add_aut"]], ["add", "theorem", "coe_one", ["add_aut"]], ["add", "theorem", "inv_apply_self", ["add_aut"]], ["add", "theorem", "inv_def", ["add_aut"]], ["add", "theorem", "mul_apply", ["add_aut"]], ["add", "theorem", "mul_def", ["add_aut"]], ["add", "theorem", "one_apply", ["add_aut"]], ["add", "theorem", "one_def", ["add_aut"]], ["add", "def", "to_perm", ["add_aut"]], ["add", "theorem", "apply_inv_self", ["mul_aut"]], ["add", "theorem", "coe_mul", ["mul_aut"]], ["add", "theorem", "coe_one", ["mul_aut"]], ["add", "def", "conj", ["mul_aut"]], ["add", "theorem", "conj_apply", ["mul_aut"]], ["add", "theorem", "conj_inv_apply", ["mul_aut"]], ["add", "theorem", "conj_symm_apply", ["mul_aut"]], ["add", "theorem", "inv_apply_self", ["mul_aut"]], ["add", "theorem", "inv_def", ["mul_aut"]], ["add", "theorem", "mul_apply", ["mul_aut"]], ["add", "theorem", "mul_def", ["mul_aut"]], ["add", "theorem", "one_apply", ["mul_aut"]], ["add", "theorem", "one_def", ["mul_aut"]], ["add", "def", "to_perm", ["mul_aut"]], ["add", "def", "mul_aut", []]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["del", "def", "to_add_aut", ["ring_aut"]], ["del", "def", "to_mul_aut", ["ring_aut"]], ["del", "def", "to_perm", ["ring_aut"]], ["del", "def", "ring_aut", []]]}, {"oldPath": null, "newPath": "src/data/equiv/ring_aut.lean", "changes": [["add", "def", "to_add_aut", ["ring_aut"]], ["add", "def", "to_mul_aut", ["ring_aut"]], ["add", "def", "to_perm", ["ring_aut"]], ["add", "def", "ring_aut", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action/group.lean", "newPath": "src/group_theory/group_action/group.lean", "changes": []}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}]}, {"timestamp": 1607451534, "sha": "4c9499fc", "message": "chore(algebra/group/pi): Split into multiple files (#5280)\nThis allows files that appear before `ordered_group` to still use `pi.monoid` etc.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["del", "theorem", "div_apply", ["pi"]], ["del", "theorem", "inv_apply", ["pi"]], ["del", "theorem", "mul_apply", ["pi"]], ["del", "theorem", "one_apply", ["pi"]]]}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/ordered_pi.lean", "changes": []}, {"oldPath": "src/data/pi.lean", "newPath": "src/data/pi.lean", "changes": [["add", "theorem", "div_apply", ["pi"]], ["add", "theorem", "inv_apply", ["pi"]], ["add", "theorem", "mul_apply", ["pi"]], ["add", "theorem", "one_apply", ["pi"]]]}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}]}, {"timestamp": 1607445245, "sha": "b5ab2f77", "message": "feat(topology/algebra/ordered): add lemmas about `map coe at_top/at_bot` (#5238)", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["del", "theorem", "Ioo_at_bot_eq_nhds_within", []], ["del", "theorem", "Ioo_at_top_eq_nhds_within", []], ["add", "theorem", "comap_coe_Iio_nhds_within_Iio", []], ["add", "theorem", "comap_coe_Ioi_nhds_within_Ioi", []], ["add", "theorem", "comap_coe_Ioo_nhds_within_Iio", []], ["add", "theorem", "comap_coe_Ioo_nhds_within_Ioi", []], ["add", "theorem", "comap_coe_nhds_within_Iio_of_Ioo_subset", []], ["add", "theorem", "comap_coe_nhds_within_Ioi_of_Ioo_subset", []], ["add", "theorem", "map_coe_Iio_at_top", []], ["add", "theorem", "map_coe_Ioi_at_bot", []], ["add", "theorem", "map_coe_Ioo_at_bot", []], ["add", "theorem", "map_coe_Ioo_at_top", []], ["add", "theorem", "map_coe_at_bot_of_Ioo_subset", []], ["add", "theorem", "map_coe_at_top_of_Ioo_subset", []]]}]}, {"timestamp": 1607441288, "sha": "7f5a5ddd", "message": "feat(category_theory/limits): split coequalizers (#5230)\nDefine what it means for a triple of morphisms `f g : X ⟶ Y`, `π : Y ⟶ Z` to be a split coequalizer, and show that every split coequalizer is a coequalizer and absolute.\nDefine split pairs and `G`-split pairs.\nThese definitions and constructions are useful in particular for the monadicity theorems.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/split_coequalizer.lean", "changes": [["add", "def", "is_split_pair", ["category_theory", "functor"]], ["add", "def", "as_cofork", ["category_theory", "is_split_coequalizer"]], ["add", "def", "is_coequalizer", ["category_theory", "is_split_coequalizer"]], ["add", "def", "map", ["category_theory", "is_split_coequalizer"]], ["add", "structure", "is_split_coequalizer", ["category_theory"]]]}]}, {"timestamp": 1607435268, "sha": "64ddb126", "message": "feat(analysis/mean_inequalities): add Hölder's inequality for the Lebesgue integral of ennreal and nnreal functions (#5267)", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "ae_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["add", "theorem", "fun_eq_fun_mul_inv_snorm_mul_snorm", ["ennreal"]], ["add", "def", "fun_mul_inv_snorm", ["ennreal"]], ["add", "theorem", "fun_mul_inv_snorm_rpow", ["ennreal"]], ["add", "theorem", "lintegral_mul_eq_zero_of_lintegral_rpow_eq_zero", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq_of_ne_zero_of_eq_top", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq_of_ne_zero_of_ne_top", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_one_of_lintegral_rpow_eq_one", ["ennreal"]], ["add", "theorem", "lintegral_rpow_fun_mul_inv_snorm_eq_one", ["ennreal"]], ["add", "theorem", "lintegral_mul_le_Lp_mul_Lq", ["nnreal"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "inv_rpow_of_pos", ["ennreal"]], ["add", "theorem", "of_real_rpow_of_nonneg", ["nnreal"]]]}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": [["add", "theorem", "inv_add_inv_conj_ennreal", ["real", "is_conjugate_exponent"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_div_of_pos", ["ennreal"]], ["add", "theorem", "of_real_inv_of_pos", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_zero_fun", ["measure_theory"]]]}]}, {"timestamp": 1607424185, "sha": "3996bd42", "message": "chore(logic/basic): add a few `simp` lemmas (#5278)\nAlso add `fintype.prod_eq_single`.", "changes": [{"oldPath": "archive/arithcc.lean", "newPath": "archive/arithcc.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_eq_single", ["fintype"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "not_imp_self", ["decidable"]], ["add", "theorem", "imp_not_self", []], ["add", "theorem", "ite_eq_left_iff", []], ["add", "theorem", "ite_eq_right_iff", []], ["add", "theorem", "not_imp_self", []]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1607424182, "sha": "d3bbaeb9", "message": "chore(combinatorics/composition): use `order_embedding` (#5276)\n* use `order_embedding` for `composition.boundary`\n* use `order_embedding` for `composition.embedding`\n* add `max_eq_right_iff` etc\n* golf some proofs", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "max_eq_left_iff", []], ["add", "theorem", "max_eq_right_iff", []], ["add", "theorem", "min_eq_left_iff", []], ["add", "theorem", "min_eq_right_iff", []]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["mod", "def", "boundary", ["composition"]], ["add", "theorem", "coe_embedding", ["composition"]], ["add", "theorem", "coe_inv_embedding", ["composition"]], ["mod", "def", "embedding", ["composition"]], ["del", "theorem", "embedding_injective", ["composition"]], ["mod", "theorem", "ones_blocks", ["composition"]], ["mod", "theorem", "single_blocks", ["composition"]], ["mod", "theorem", "single_length", ["composition"]], ["del", "theorem", "strict_mono_boundary", ["composition"]]]}]}, {"timestamp": 1607424180, "sha": "51f5ca3e", "message": "chore(group_theory/perm): Add alternate formulation of (sum|sigma)_congr lemmas (#5260)\nThese lemmas existed already for `equiv`, but not for `perm` or for `perm` via group structures.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "sigma_congr_right", ["equiv", "perm"]], ["add", "theorem", "sigma_congr_right_refl", ["equiv", "perm"]], ["add", "theorem", "sigma_congr_right_symm", ["equiv", "perm"]], ["add", "theorem", "sigma_congr_right_trans", ["equiv", "perm"]], ["add", "def", "sum_congr", ["equiv", "perm"]], ["add", "theorem", "sum_congr_apply", ["equiv", "perm"]], ["add", "theorem", "sum_congr_refl", ["equiv", "perm"]], ["add", "theorem", "sum_congr_symm", ["equiv", "perm"]], ["add", "theorem", "sum_congr_trans", ["equiv", "perm"]], ["mod", "theorem", "sum_congr_symm", ["equiv"]]]}, {"oldPath": "src/group_theory/perm/basic.lean", "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "sigma_congr_right_inv", ["equiv", "perm"]], ["add", "theorem", "sigma_congr_right_mul", ["equiv", "perm"]], ["add", "theorem", "sigma_congr_right_one", ["equiv", "perm"]], ["add", "theorem", "sum_congr_inv", ["equiv", "perm"]], ["add", "theorem", "sum_congr_mul", ["equiv", "perm"]], ["add", "theorem", "sum_congr_one", ["equiv", "perm"]]]}]}, {"timestamp": 1607412980, "sha": "ac6fc38e", "message": "chore(*): move/add lemmas about `disjoint` (#5277)\n* `set.disjoint_compl_left` and `set.disjoint_compl_right`:\n - generalize to any `boolean_algebra`,\n - move to `order/boolean_algebra`,\n - drop `set.` prefix,\n - make the argument implicit to follow the style of other lemmas in `order/boolean_algebra`\n* add `set.disjoint_empty` and `set.empty_disjoint`\n* add `disjoint_top` and `top_disjoint`, use in `set.disjoint_univ`and `set.univ_disjoint`.", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "disjoint_compl_left", ["set"]], ["del", "theorem", "disjoint_compl_right", ["set"]], ["add", "theorem", "disjoint_empty", ["set"]], ["add", "theorem", "empty_disjoint", ["set"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "disjoint_compl_left", []], ["add", "theorem", "disjoint_compl_right", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "disjoint_bot_left", []], ["mod", "theorem", "disjoint_bot_right", []], ["add", "theorem", "disjoint_top", []], ["add", "theorem", "top_disjoint", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1607412977, "sha": "ef377a92", "message": "chore(data/list/sort): docs, add a few lemmas (#5274)\n * Add a module docstring and section headers.\n* Rename `list.eq_of_sorted_of_perm` to `list.eq_of_perm_of_sorted`;\n the new name reflects the order of arguments.\n* Add a few lemmas.", "changes": [{"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["add", "theorem", "eq_of_perm_of_sorted", ["list"]], ["del", "theorem", "eq_of_sorted_of_perm", ["list"]], ["add", "theorem", "insertion_sort_cons_eq_take_drop", ["list"]], ["mod", "theorem", "length_merge_sort", ["list"]], ["add", "theorem", "merge_sort_eq_insertion_sort", ["list"]], ["mod", "theorem", "merge_sort_eq_self", ["list"]], ["add", "theorem", "ordered_insert_eq_take_drop", ["list"]], ["mod", "theorem", "perm_insertion_sort", ["list"]], ["mod", "theorem", "perm_merge", ["list"]], ["mod", "theorem", "perm_merge_sort", ["list"]], ["mod", "theorem", "perm_ordered_insert", ["list"]], ["add", "theorem", "insertion_sort_eq", ["list", "sorted"]], ["add", "theorem", "merge", ["list", "sorted"]], ["add", "theorem", "ordered_insert", ["list", "sorted"]], ["mod", "theorem", "sorted_insertion_sort", ["list"]], ["del", "theorem", "sorted_merge", ["list"]], ["mod", "theorem", "sorted_merge_sort", ["list"]], ["del", "theorem", "sorted_ordered_insert", ["list"]]]}, {"oldPath": "src/data/multiset/sort.lean", "newPath": "src/data/multiset/sort.lean", "changes": []}]}, {"timestamp": 1607412975, "sha": "aec64b17", "message": "feat(category_theory/monad): generalise algebra colimits (#5234)\nAssumption generalisations and universe generalisations", "changes": [{"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["add", "def", "monadic_creates_colimit_of_preserves_colimit", ["category_theory"]]]}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}]}, {"timestamp": 1607412973, "sha": "73601789", "message": "feat(category_theory/closed/types): presheaf category is cartesian closed (#4897)", "changes": [{"oldPath": null, "newPath": "src/category_theory/closed/types.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/limits.lean", "newPath": "src/category_theory/limits/preserves/limits.lean", "changes": [["add", "theorem", "lift_comp_preserves_limits_iso_hom", ["category_theory"]], ["add", "def", "preserves_colimit_iso", ["category_theory"]], ["add", "theorem", "preserves_colimits_iso_inv_comp_desc", ["category_theory"]], ["add", "theorem", "preserves_desc_map_cocone", ["category_theory"]], ["add", "theorem", "preserves_lift_map_cone", ["category_theory"]], ["add", "def", "preserves_limit_iso", ["category_theory"]], ["add", "theorem", "preserves_limits_iso_hom_π", ["category_theory"]], ["add", "theorem", "preserves_limits_iso_inv_π", ["category_theory"]], ["add", "theorem", "ι_preserves_colimits_iso_hom", ["category_theory"]], ["add", "theorem", "ι_preserves_colimits_iso_inv", ["category_theory"]], ["del", "theorem", "lift_comp_preserves_limits_iso_hom", []], ["del", "def", "preserves_colimit_iso", []], ["del", "theorem", "preserves_colimits_iso_inv_comp_desc", []], ["del", "theorem", "preserves_desc_map_cocone", []], ["del", "theorem", "preserves_lift_map_cone", []], ["del", "def", "preserves_limit_iso", []], ["del", "theorem", "preserves_limits_iso_hom_π", []], ["del", "theorem", "preserves_limits_iso_inv_π", []], ["del", "theorem", "ι_preserves_colimits_iso_hom", []], ["del", "theorem", "ι_preserves_colimits_iso_inv", []]]}]}, {"timestamp": 1607403955, "sha": "8f42d73d", "message": "chore(data/list/pairwise): add `list.pairwise_pmap` and `list.pairwise.pmap` (#5273)\nAlso add `list.pairwise.tail` and use it in the proof of `list.sorted.tail`.", "changes": [{"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "pmap", ["list", "pairwise"]], ["add", "theorem", "tail", ["list", "pairwise"]], ["add", "theorem", "pairwise_pmap", ["list"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["mod", "theorem", "tail", ["list", "sorted"]]]}]}, {"timestamp": 1607397613, "sha": "3f4829cd", "message": "chore(data/support): zero function has empty support (#5275)", "changes": [{"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["add", "theorem", "support_zero'", ["function"]], ["add", "theorem", "support_zero", ["function"]]]}]}, {"timestamp": 1607390479, "sha": "35f08626", "message": "chore(scripts): update nolints.txt (#5272)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607371450, "sha": "b173925a", "message": "refactor(data/fin): use `order_embedding` for many maps (#5251)\nAlso swap `data.fin` with `order.rel_iso` in the import tree.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "def", "add_nat", ["fin"]], ["mod", "def", "cast", ["fin"]], ["mod", "def", "cast_add", ["fin"]], ["mod", "def", "cast_le", ["fin"]], ["del", "theorem", "cast_le_injective", ["fin"]], ["mod", "theorem", "cast_lt_cast_succ", ["fin"]], ["mod", "def", "cast_succ", ["fin"]], ["mod", "theorem", "cast_succ_inj", ["fin"]], ["mod", "theorem", "coe_add_nat", ["fin"]], ["mod", "theorem", "coe_cast", ["fin"]], ["mod", "theorem", "coe_cast_add", ["fin"]], ["mod", "theorem", "coe_cast_le", ["fin"]], ["mod", "theorem", "coe_cast_lt", ["fin"]], ["mod", "theorem", "coe_cast_succ", ["fin"]], ["add", "def", "coe_embedding", ["fin"]], ["mod", "theorem", "coe_last", ["fin"]], ["add", "theorem", "coe_nat_add", ["fin"]], ["del", "theorem", "coe_sub_nat", ["fin"]], ["add", "theorem", "coe_succ_embedding", ["fin"]], ["mod", "def", "nat_add", ["fin"]], ["mod", "def", "sub_nat", ["fin"]], ["mod", "def", "succ_above", ["fin"]], ["add", "theorem", "succ_above_aux", ["fin"]], ["add", "theorem", "succ_above_last_apply", ["fin"]], ["mod", "theorem", "succ_above_zero", ["fin"]], ["add", "def", "succ_embedding", ["fin"]], ["add", "theorem", "symm_cast", ["fin"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["del", "def", "rel_embedding", ["fin", "val"]], ["del", "def", "rel_embedding", ["fin_fin"]], ["add", "theorem", "apply_eq_apply", ["order_embedding"]], ["add", "theorem", "apply_le_apply", ["order_embedding"]], ["add", "theorem", "apply_lt_apply", ["order_embedding"]], ["add", "theorem", "coe_of_strict_mono", ["order_embedding"]]]}]}, {"timestamp": 1607371448, "sha": "b9689bdc", "message": "feat(topology/algebra/infinite_sum): add lemmas about continuous linear maps (#5243)", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "tsum_eq_iff", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "smul", ["has_sum"]], ["add", "theorem", "smul", ["summable"]], ["add", "theorem", "tsum_smul", []]]}]}, {"timestamp": 1607360750, "sha": "f7301374", "message": "chore(logic/basic): add `and.congr_left_iff` and `@[simp]` attrs (#5268)", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "congr_left_iff", ["and"]], ["mod", "theorem", "congr_right_iff", ["and"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1607337433, "sha": "44400c99", "message": "feat(dynamics/circle/rotation_number): translation numbers define a group action up to a semiconjugacy (#5138)\nFormalize a theorem by Étienne Ghys: given two lifts `f₁`, `f₂` of\nactions of a group `G` on the circle by orientation preserving\nhomeomorphisms to the real line, assume that for each `g : G` the\ntranslation numbers of `f₁ g` and `f₂ g` are equal. Then the actions\nare semiconjugate by a (possibly discontinuous) circle map.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "of_bijective_apply_symm_apply", ["equiv"]], ["add", "theorem", "of_bijective_symm_apply_apply", ["equiv"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": [["add", "theorem", "coe_to_order_iso", ["circle_deg1_lift"]], ["add", "theorem", "coe_to_order_iso_inv", ["circle_deg1_lift"]], ["add", "theorem", "coe_to_order_iso_symm", ["circle_deg1_lift"]], ["add", "theorem", "continuous_iff_surjective", ["circle_deg1_lift"]], ["add", "theorem", "is_unit_iff_bijective", ["circle_deg1_lift"]], ["add", "theorem", "map_lt_add_floor_translation_number_add_one", ["circle_deg1_lift"]], ["add", "theorem", "map_lt_add_translation_number_add_one", ["circle_deg1_lift"]], ["add", "theorem", "semiconj_of_bijective_of_translation_number_eq", ["circle_deg1_lift"]], ["add", "theorem", "semiconj_of_group_action_of_forall_translation_number_eq", ["circle_deg1_lift"]], ["add", "theorem", "semiconj_of_is_unit_of_translation_number_eq", ["circle_deg1_lift"]], ["add", "theorem", "strict_mono_iff_injective", ["circle_deg1_lift"]], ["add", "def", "to_order_iso", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_gpow", ["circle_deg1_lift"]], ["del", "theorem", "translation_number_map_id", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_one", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_units_inv", ["circle_deg1_lift"]], ["add", "theorem", "units_apply_inv_apply", ["circle_deg1_lift"]], ["add", "theorem", "units_inv_apply_apply", ["circle_deg1_lift"]], ["add", "theorem", "units_semiconj_of_translation_number_eq", ["circle_deg1_lift"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "strict_mono_iff_injective", ["monotone"]]]}]}, {"timestamp": 1607330714, "sha": "f0ceb6bb", "message": "feat(analysis/mean_inequalities): add young_inequality for nnreal and ennreal with real exponents (#5242)\nThe existing young_inequality for nnreal has nnreal exponents. This adds a version with real exponents with the is_conjugate_exponent property, and a similar version for ennreal with real exponents.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "young_inequality", ["ennreal"]], ["add", "theorem", "young_inequality_real", ["nnreal"]]]}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": [["add", "theorem", "inv_add_inv_conj_nnreal", ["real", "is_conjugate_exponent"]], ["add", "theorem", "one_lt_nnreal", ["real", "is_conjugate_exponent"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "of_real_div'", ["nnreal"]], ["add", "theorem", "of_real_div", ["nnreal"]], ["add", "theorem", "of_real_inv", ["nnreal"]]]}]}, {"timestamp": 1607323749, "sha": "914d2b13", "message": "chore(topology/category/Profinite): Fix docstring (#5265)", "changes": [{"oldPath": "src/topology/category/Profinite.lean", "newPath": "src/topology/category/Profinite.lean", "changes": []}]}, {"timestamp": 1607312032, "sha": "b2427d53", "message": "feat(order/filter/ultrafilter): Restriction of ultrafilters along large embeddings (#5195)\nThis PR adds the fact that the `comap` of an ultrafilter along a \"large\" embedding (meaning the image is large w.r.t. the ultrafilter) is again an ultrafilter.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_diff_image", ["set"]], ["add", "theorem", "range_diff_image_subset", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "image_mem_map_iff", ["filter"]], ["add", "theorem", "mem_comap_iff", ["filter"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "def", "comap", ["filter", "ultrafilter"]]]}]}, {"timestamp": 1607304267, "sha": "67eb675c", "message": "chore(scripts): update nolints.txt (#5262)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607285314, "sha": "8d54d527", "message": "chore(topology/algebra/ordered): generalize `intermediate_value_Icc` etc (#5235)\nSeveral lemmas assumed that the codomain is a conditionally complete\nlinear order while actually the statements are true for a linear\norder. Also introduce `mem_range_of_exists_le_of_exists_ge` and use it\nin `surjective_of_continuous`.", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "intermediate_value_Icc'", []], ["mod", "theorem", "intermediate_value_Icc", []], ["add", "theorem", "mem_range_of_exists_le_of_exists_ge", []], ["mod", "theorem", "surjective_of_continuous'", []], ["mod", "theorem", "surjective_of_continuous", []]]}]}, {"timestamp": 1607285312, "sha": "9cb27c94", "message": "chore(ring_theory/algebra_tower): generalize `is_scalar_tower.right` (#5224)\nThe old instance for `[is_scalar_tower R S S]` assumed\n[comm_semiring S]` instead of `[semiring S]`.", "changes": [{"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1607285310, "sha": "128b316c", "message": "feat(number_theory/primes_congruent_one): infinitely many primes congruent to 1 (#5217)\nI prove that, for any positive `k : ℕ`, there are infinitely many primes `p` such that `p ≡ 1 [MOD k]`.\n I am not sure that `p ≡ 1 [MOD k]` is the recommended way of stating this in mathlib (instead of using `nat.cast_ring_hom `), I can change it if needed. Also, I don't know if it is appropriate to create a new file, but I didn't see any reasonable location.", "changes": [{"oldPath": null, "newPath": "src/number_theory/primes_congruent_one.lean", "changes": [["add", "theorem", "exists_prime_ge_modeq_one", ["nat"]], ["add", "theorem", "frequently_at_top_modeq_one", ["nat"]], ["add", "theorem", "infinite_set_of_prime_modeq_one", ["nat"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "frequently_at_top_iff_infinite", ["nat"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "degree_cyclotomic_pos", ["polynomial"]]]}]}, {"timestamp": 1607280985, "sha": "b3aa0524", "message": "feat(combinatorics/simple_graph/basic): introduce incidence sets, graph construction from relation (#5191)\nAdd incidence sets and some lemmas, including a proof of equivalence between the neighbor set of a vertex and its incidence set. Add a graph construction from a given relation.\nDefinitions and lemmas adapted from [simple_graphs2](https://github.com/leanprover-community/mathlib/blob/simple_graphs2/src/combinatorics/simple_graph/basic.lean#L317)", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": [["add", "theorem", "adj_incidence_set_inter", ["simple_graph"]], ["add", "theorem", "card_incidence_set_eq_degree", ["simple_graph"]], ["add", "theorem", "degree_pos_iff_exists_adj", ["simple_graph"]], ["add", "theorem", "edge_set_univ_card", ["simple_graph"]], ["add", "def", "from_rel", ["simple_graph"]], ["add", "theorem", "from_rel_adj", ["simple_graph"]], ["add", "def", "incidence_finset", ["simple_graph"]], ["add", "theorem", "incidence_other_neighbor_edge", ["simple_graph"]], ["add", "theorem", "incidence_other_prop", ["simple_graph"]], ["add", "def", "incidence_set", ["simple_graph"]], ["add", "def", "incidence_set_equiv_neighbor_set", ["simple_graph"]], ["add", "theorem", "incidence_set_subset", ["simple_graph"]], ["add", "def", "max_degree", ["simple_graph"]], ["add", "theorem", "mem_incidence_finset", ["simple_graph"]], ["add", "theorem", "mem_incidence_iff_neighbor", ["simple_graph"]], ["add", "theorem", "mem_incidence_set", ["simple_graph"]], ["add", "def", "min_degree", ["simple_graph"]], ["add", "def", "other_vertex_of_incident", ["simple_graph"]]]}]}, {"timestamp": 1607255036, "sha": "c88e8f35", "message": "refactor(*): drop `topology/instances/complex` (#5208)\n* drop `topology/instances/complex`, deduce topology from `normed_space` instead;\n* generalize continuity of `polynomial.eval` to any `topological_ring`; add versions for `eval₂` and `aeval`;\n* replace `polynomial.tendsto_infinity` with `tendsto_abv_at_top`, add versions for `eval₂`, `aeval`, as well as `norm` instead of `abv`.\n* generalize `complex.exists_forall_abs_polynomial_eval_le` to any `[normed_ring R] [proper_space R]` such that norm\n is multiplicative, rename to `polynomial.exists_forall_norm_le`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["mod", "def", "im", ["complex", "continuous_linear_map"]], ["mod", "def", "of_real", ["complex", "continuous_linear_map"]], ["mod", "def", "re", ["complex", "continuous_linear_map"]], ["add", "theorem", "dist_eq", ["complex"]]]}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": [["del", "theorem", "exists_forall_abs_polynomial_eval_le", ["complex"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": [["del", "theorem", "continuous_eval", ["polynomial"]], ["add", "theorem", "exists_forall_norm_le", ["polynomial"]], ["add", "theorem", "tendsto_abv_aeval_at_top", ["polynomial"]], ["add", "theorem", "tendsto_abv_at_top", ["polynomial"]], ["add", "theorem", "tendsto_abv_eval₂_at_top", ["polynomial"]], ["del", "theorem", "tendsto_infinity", ["polynomial"]], ["add", "theorem", "tendsto_norm_at_top", ["polynomial"]]]}, {"oldPath": "src/topology/instances/complex.lean", "newPath": null, "changes": [["del", "theorem", "inv", ["complex", "continuous"]], ["del", "theorem", "continuous_abs", ["complex"]], ["del", "theorem", "continuous_im", ["complex"]], ["del", "theorem", "continuous_inv", ["complex"]], ["del", "theorem", "continuous_of_real", ["complex"]], ["del", "theorem", "continuous_re", ["complex"]], ["del", "theorem", "dist_eq", ["complex"]], ["del", "def", "real_prod_homeo", ["complex"]], ["del", "theorem", "tendsto_inv", ["complex"]], ["del", "theorem", "uniform_continuous_abs", ["complex"]], ["del", "theorem", "uniform_continuous_add", ["complex"]], ["del", "theorem", "uniform_continuous_im", ["complex"]], ["del", "theorem", "uniform_continuous_inv", ["complex"]], ["del", "theorem", "uniform_continuous_mul", ["complex"]], ["del", "theorem", "uniform_continuous_mul_const", ["complex"]], ["del", "theorem", "uniform_continuous_neg", ["complex"]], ["del", "theorem", "uniform_continuous_of_real", ["complex"]], ["del", "theorem", "uniform_continuous_re", ["complex"]]]}]}, {"timestamp": 1607250689, "sha": "29a1731a", "message": "feat(ring_theory/witt_vector): common identities between operators on Witt vectors (#5161)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/identities.lean", "changes": [["add", "theorem", "coeff_p_pow", ["witt_vector"]], ["add", "theorem", "frobenius_verschiebung", ["witt_vector"]], ["add", "theorem", "verschiebung_mul_frobenius", ["witt_vector"]], ["add", "theorem", "verschiebung_zmod", ["witt_vector"]]]}]}, {"timestamp": 1607241326, "sha": "339bd9a9", "message": "chore(*): clean up several unnecessary let statements (#5257)\nCleans up a few `let`s and `letI`s and a `have` and a `set` that have made it into some proofs in the library but do not seem to do anything for the proof.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1607241324, "sha": "12a8361f", "message": "feat(data/polynomial): simp lemmas about polynomial derivatives (#5256)\nAdd simp lemmas derivative_bit0 derivative_bit1 and derivative_X_pow", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "derivative_X_pow", ["polynomial"]], ["add", "theorem", "derivative_bit0", ["polynomial"]], ["add", "theorem", "derivative_bit1", ["polynomial"]]]}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}]}, {"timestamp": 1607241321, "sha": "c6de6e4f", "message": "chore(algebra/group_power): mark `map_pow` etc as `@[simp]` (#5253)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "map_nsmul", ["add_monoid_hom"]], ["mod", "theorem", "map_pow", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "map_gsmul", ["add_monoid_hom"]], ["mod", "theorem", "map_gpow", ["monoid_hom"]]]}]}, {"timestamp": 1607230374, "sha": "85380712", "message": "doc(data/list): fix `erasep` doc string (#5254)\ncloses #5252", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}]}, {"timestamp": 1607217871, "sha": "065bd5fc", "message": "chore(scripts): update nolints.txt (#5250)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1607199670, "sha": "7e8e174b", "message": "style(combinatorics/simple_graph/basic): edit proof of lemma to match style guidelines (#5245)\nRewrite proof of `adj_iff_exists_edge` to match style guidelines.", "changes": [{"oldPath": "src/combinatorics/simple_graph/basic.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1607199666, "sha": "ae99c76d", "message": "feat(field_theory/galois): Is_galois iff is_galois bot (#5231)\nProves that E/F is Galois iff E/bot is Galois.\nThis is useful in Galois theory because it gives a new way of showing that E/F is Galois:\n1) Show that bot is the fixed field of some subgroup\n2) Apply `is_galois.of_fixed_field`\n3) Apply `is_galois_iff_is_galois_bot`\nMore to be added later (once #5225 is merged): Galois is preserved by alg_equiv, is_galois_iff_galois_top", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/galois.lean", "newPath": "src/field_theory/galois.lean", "changes": [["add", "theorem", "tower_top_of_is_galois", ["is_galois"]], ["add", "theorem", "is_galois_iff_is_galois_bot", []]]}]}, {"timestamp": 1607199664, "sha": "ddfba423", "message": "chore(data/multiset/basic): make `card` a bundled `add_monoid_hom` (#5228)\nOther changes:\n* use `/-! ###` in section headers;\n* move `add_monoid` section above `card`;\n* fix docstrings of `multiset.choose_x` and `multiset.choose`.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "def", "card", ["multiset"]], ["mod", "theorem", "card_add", ["multiset"]], ["mod", "theorem", "count_eq_zero", ["multiset"]]]}]}, {"timestamp": 1607199662, "sha": "1f648141", "message": "chore(data/equiv/ring): add `symm_symm` and `coe_symm_mk` (#5227)\nAlso generalize `map_mul` and `map_add` to `[has_mul R] [has_add R]`\ninstead of `[semiring R]`.", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_symm_mk", ["ring_equiv"]], ["mod", "theorem", "map_add", ["ring_equiv"]], ["mod", "theorem", "map_mul", ["ring_equiv"]], ["add", "theorem", "symm_symm", ["ring_equiv"]]]}]}, {"timestamp": 1607194429, "sha": "d4bd4cda", "message": "fix(topology/algebra/infinite_sum): fix docstring typos and add example (#5159)", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1607187541, "sha": "83b13d1c", "message": "feat(category_theory/limits): morphisms to equalizer (#5233)\nThe natural bijection for morphisms to an equalizer and the dual.", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "hom_iso", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "theorem", "hom_iso_natural", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "fork", "is_limit"]], ["add", "theorem", "hom_iso_natural", ["category_theory", "limits", "fork", "is_limit"]]]}]}, {"timestamp": 1607187539, "sha": "dd114987", "message": "chore(linear_algebra/basic): redefine `restrict` (#5229)\nUse `dom_restrict` and `cod_restrict`", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1607176131, "sha": "481f5e09", "message": "chore(data/prod): `prod.swap` is `bijective` (#5226)", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "swap_bijective", ["prod"]], ["add", "theorem", "swap_inj", ["prod"]], ["add", "theorem", "swap_injective", ["prod"]], ["add", "theorem", "swap_surjective", ["prod"]]]}]}, {"timestamp": 1607162333, "sha": "c5009dd7", "message": "chore(data/equiv/basic): Add missing refl/trans/symm simp lemmas (#5223)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "sigma_congr_right_refl", ["equiv"]], ["add", "theorem", "sigma_congr_right_symm", ["equiv"]], ["add", "theorem", "sigma_congr_right_trans", ["equiv"]], ["add", "theorem", "sum_congr_refl", ["equiv"]], ["add", "theorem", "sum_congr_trans", ["equiv"]]]}]}, {"timestamp": 1607154628, "sha": "3972da8a", "message": "chore(category_theory/limits/preserves): make names consistent (#5240)\nadjusted names and namespaces to match #5044", "changes": [{"oldPath": "src/category_theory/limits/preserves/shapes/products.lean", "newPath": "src/category_theory/limits/preserves/shapes/products.lean", "changes": [["add", "def", "is_limit_fan_mk_obj_of_is_limit", ["category_theory", "limits"]], ["add", "def", "is_limit_map_cone_fan_mk_equiv", ["category_theory", "limits"]], ["add", "def", "is_limit_of_has_product_of_preserves_limit", ["category_theory", "limits"]], ["add", "def", "is_limit_of_is_limit_fan_mk_obj", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_product"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_product"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_product"]], ["del", "def", "fan_map_cone_limit", ["preserves"]], ["del", "def", "is_limit_of_has_product_of_preserves_limit", ["preserves"]], ["del", "def", "is_limit_of_reflects_of_map_is_limit", ["preserves"]], ["del", "def", "map_is_limit_of_preserves_of_is_limit", ["preserves"]], ["del", "def", "preserves_product_of_iso_comparison", ["preserves"]], ["del", "def", "preserves_products_iso", ["preserves"]], ["del", "theorem", "preserves_products_iso_hom", ["preserves"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}]}, {"timestamp": 1607154626, "sha": "39a3b58b", "message": "feat(order/filter/at_top_bot): `order_iso` maps `at_top` to `at_top` (#5236)", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "comap_at_bot", ["order_iso"]], ["add", "theorem", "comap_at_top", ["order_iso"]], ["add", "theorem", "map_at_bot", ["order_iso"]], ["add", "theorem", "map_at_top", ["order_iso"]], ["add", "theorem", "tendsto_at_bot", ["order_iso"]], ["add", "theorem", "tendsto_at_bot_iff", ["order_iso"]], ["add", "theorem", "tendsto_at_top", ["order_iso"]], ["add", "theorem", "tendsto_at_top_iff", ["order_iso"]]]}]}, {"timestamp": 1607154624, "sha": "147a81a2", "message": "chore(category_theory/limits): preserving coequalizers (#5212)\ndualise stuff from before", "changes": [{"oldPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": [["add", "def", "is_colimit_cofork_map_of_is_colimit", ["category_theory", "limits"]], ["add", "def", "is_colimit_map_cocone_cofork_equiv", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_has_coequalizer_of_preserves_colimit", ["category_theory", "limits"]], ["add", "def", "is_colimit_of_is_colimit_cofork_map", ["category_theory", "limits"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_coequalizer"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_coequalizer"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}]}, {"timestamp": 1607154622, "sha": "b82eb7a5", "message": "refactor(combinatorics/simple_graph/matching): change definition of matching (#5210)\nRefactored definition of matching per @eric-wieser's [suggestion](https://github.com/leanprover-community/mathlib/pull/5156#discussion_r535102524) and @kmill's [suggestion](https://github.com/leanprover-community/mathlib/pull/5156#discussion_r535745112), for the purpose of using `matching.sub_edges` instead of `matching.prop.sub_edges`", "changes": [{"oldPath": "src/combinatorics/simple_graph/matching.lean", "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": [["del", "structure", "is_matching", ["simple_graph"]], ["add", "structure", "matching", ["simple_graph"]], ["del", "def", "matching", ["simple_graph"]]]}]}, {"timestamp": 1607154619, "sha": "dc08f4d4", "message": "feat(analysis): define asymptotic equivalence of two functions (#4979)\nThis defines the relation `is_equivalent u v l`, which means that `u-v` is little o of\n`v` along the filter `l`. It is required to state, for example, Stirling's formula, or the prime number theorem", "changes": [{"oldPath": null, "newPath": "src/analysis/asymptotic_equivalent.lean", "changes": [["add", "theorem", "div", ["asymptotics", "is_equivalent"]], ["add", "theorem", "exists_eq_mul", ["asymptotics", "is_equivalent"]], ["add", "theorem", "inv", ["asymptotics", "is_equivalent"]], ["add", "theorem", "is_O", ["asymptotics", "is_equivalent"]], ["add", "theorem", "is_O_symm", ["asymptotics", "is_equivalent"]], ["add", "theorem", "is_o", ["asymptotics", "is_equivalent"]], ["add", "theorem", "mul", ["asymptotics", "is_equivalent"]], ["add", "theorem", "refl", ["asymptotics", "is_equivalent"]], ["add", "theorem", "smul", ["asymptotics", "is_equivalent"]], ["add", "theorem", "symm", ["asymptotics", "is_equivalent"]], ["add", "theorem", "tendsto_at_top", ["asymptotics", "is_equivalent"]], ["add", "theorem", "tendsto_at_top_iff", ["asymptotics", "is_equivalent"]], ["add", "theorem", "tendsto_const", ["asymptotics", "is_equivalent"]], ["add", "theorem", "tendsto_nhds", ["asymptotics", "is_equivalent"]], ["add", "theorem", "tendsto_nhds_iff", ["asymptotics", "is_equivalent"]], ["add", "theorem", "trans", ["asymptotics", "is_equivalent"]], ["add", "def", "is_equivalent", ["asymptotics"]], ["add", "theorem", "is_equivalent_const_iff_tendsto", ["asymptotics"]], ["add", "theorem", "is_equivalent_iff_exists_eq_mul", ["asymptotics"]], ["add", "theorem", "is_equivalent_iff_tendsto_one", ["asymptotics"]], ["add", "theorem", "is_equivalent_of_tendsto_one'", ["asymptotics"]], ["add", "theorem", "is_equivalent_of_tendsto_one", ["asymptotics"]], ["add", "theorem", "is_equivalent_zero_iff_eventually_zero", ["asymptotics"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_o_iff_tendsto'", ["asymptotics"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/ordered.lean", "changes": [["add", "theorem", "is_o_pow_pow_at_top_of_lt", []], ["add", "theorem", "tendsto_pow_div_pow_at_top_of_lt", []]]}]}, {"timestamp": 1607144048, "sha": "de7dbbbd", "message": "feat(algebra/group): composition of monoid homs as \"bilinear\" monoid hom (#5202)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "def", "comp_hom", ["monoid_hom"]], ["add", "theorem", "comp_mul", ["monoid_hom"]], ["add", "theorem", "comp_one", ["monoid_hom"]], ["add", "theorem", "mul_comp", ["monoid_hom"]], ["add", "theorem", "one_comp", ["monoid_hom"]], ["add", "theorem", "comp_one", ["one_hom"]], ["add", "theorem", "one_comp", ["one_hom"]]]}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}]}, {"timestamp": 1607131657, "sha": "56c4e732", "message": "chore(scripts): update nolints.txt (#5232)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607117200, "sha": "0afd3a0f", "message": "chore(data/finsupp/basic): Add single_of_single_apply (#5219)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "single_of_single_apply", ["finsupp"]]]}]}, {"timestamp": 1607117198, "sha": "8a9a5d35", "message": "feat(dynamics): (semi-)flows, omega limits (#4843)\nThis code has gone through a couple of iterations since it was first written in summer, when the ambition was 'Morse decompositions in Lean' rather than 'mildly generalise some results from a first course in differential equations'. Nevertheless there's much in here I'm not confident about & would appreciate help with.", "changes": [{"oldPath": null, "newPath": "src/dynamics/flow.lean", "changes": [["add", "theorem", "ext", ["flow"]], ["add", "def", "from_iter", ["flow"]], ["add", "theorem", "image_eq_preimage", ["flow"]], ["add", "theorem", "is_invariant_iff_image_eq", ["flow"]], ["add", "theorem", "map_add", ["flow"]], ["add", "theorem", "map_zero", ["flow"]], ["add", "theorem", "map_zero_apply", ["flow"]], ["add", "def", "restrict", ["flow"]], ["add", "def", "reverse", ["flow"]], ["add", "def", "to_homeomorph", ["flow"]], ["add", "structure", "flow", []], ["add", "theorem", "is_invariant", ["is_fw_invariant"]], ["add", "def", "is_fw_invariant", []], ["add", "theorem", "is_fw_invariant_iff_is_invariant", []], ["add", "theorem", "is_fw_invariant", ["is_invariant"]], ["add", "def", "is_invariant", []], ["add", "theorem", "is_invariant_iff_image", []]]}, {"oldPath": null, "newPath": "src/dynamics/omega_limit.lean", "changes": [["add", "theorem", "eventually_closure_subset_of_is_compact_absorbing_of_is_open_of_omega_limit_subset'", []], ["add", "theorem", "eventually_closure_subset_of_is_compact_absorbing_of_is_open_of_omega_limit_subset", []], ["add", "theorem", "eventually_closure_subset_of_is_open_of_omega_limit_subset", []], ["add", "theorem", "eventually_maps_to_of_is_compact_absorbing_of_is_open_of_omega_limit_subset", []], ["add", "theorem", "eventually_maps_to_of_is_open_of_omega_limit_subset", []], ["add", "theorem", "is_invariant_omega_limit", ["flow"]], ["add", "theorem", "omega_limit_image_eq", ["flow"]], ["add", "theorem", "omega_limit_image_subset", ["flow"]], ["add", "theorem", "omega_limit_omega_limit", ["flow"]], ["add", "theorem", "is_closed_omega_limit", []], ["add", "theorem", "maps_to_omega_limit'", []], ["add", "theorem", "maps_to_omega_limit", []], ["add", "theorem", "mem_omega_limit_iff_frequently", []], ["add", "theorem", "mem_omega_limit_iff_frequently₂", []], ["add", "theorem", "mem_omega_limit_singleton_iff_map_cluster_point", []], ["add", "theorem", "nonempty_omega_limit", []], ["add", "theorem", "nonempty_omega_limit_of_is_compact_absorbing", []], ["add", "def", "omega_limit", []], ["add", "theorem", "omega_limit_Inter", []], ["add", "theorem", "omega_limit_Union", []], ["add", "theorem", "omega_limit_def", []], ["add", "theorem", "omega_limit_eq_Inter", []], ["add", "theorem", "omega_limit_eq_Inter_inter", []], ["add", "theorem", "omega_limit_eq_bInter_inter", []], ["add", "theorem", "omega_limit_image_eq", []], ["add", "theorem", "omega_limit_inter", []], ["add", "theorem", "omega_limit_mono_left", []], ["add", "theorem", "omega_limit_mono_right", []], ["add", "theorem", "omega_limit_preimage_subset", []], ["add", "theorem", "omega_limit_subset_closure_fw_image", []], ["add", "theorem", "omega_limit_subset_of_tendsto", []], ["add", "theorem", "omega_limit_union", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_curry", []], ["add", "theorem", "continuous_uncurry_left", []], ["add", "theorem", "continuous_uncurry_of_discrete_topology_left", []], ["add", "theorem", "continuous_uncurry_right", []]]}]}, {"timestamp": 1607097458, "sha": "5f430798", "message": "doc(data/quot): Fix typo (#5221)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}]}, {"timestamp": 1607097455, "sha": "4ea2e68d", "message": "chore(algebra/big_operators/basic): Split prod_cancels_of_partition_cancels in two and add a docstring (#5218)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_partition", ["finset"]]]}]}, {"timestamp": 1607097451, "sha": "5ea96f9a", "message": "feat(linear_algebra/multilinear): Add `multilinear_map.coprod` (#5182)", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "def", "dom_coprod'", ["multilinear_map"]], ["add", "def", "dom_coprod", ["multilinear_map"]]]}]}, {"timestamp": 1607097449, "sha": "cb7effa8", "message": "feat(ring_theory/discrete_valuation_ring): add additive valuation (#5094)\nFollowing the approach used for p-adic numbers, we define an additive valuation on a DVR R as a bare function v: R -> nat, with the convention that v(0)=0 instead of +infinity for convenience. Note that we have no `hom` structure (like `monoid_hom` or `add_monoid_hom`) for v(a*b)=v(a)+v(b) and anyway this doesn't even hold if ab=0. We prove all the usual axioms.", "changes": [{"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["add", "theorem", "add_val_add", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_def'", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_def", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_le_iff_dvd", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_mul", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_one", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_pow", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_spec", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_uniformizer", ["discrete_valuation_ring"]], ["add", "theorem", "add_val_zero", ["discrete_valuation_ring"]], ["add", "theorem", "eq_unit_mul_pow_irreducible", ["discrete_valuation_ring"]]]}]}, {"timestamp": 1607093303, "sha": "f1d30f6e", "message": "doc(data/typevec): Fix broken markdown rendering (#5220)", "changes": [{"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": []}]}, {"timestamp": 1607088878, "sha": "54c13bd8", "message": "docs(data/fp): Move title comment so that it appears in the markdown (#5222)", "changes": [{"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}]}, {"timestamp": 1607078126, "sha": "30467f4b", "message": "feat(field_theory/adjoin): induction on adjoin (#5173)\nThis is another adjoin induction lemma that will be used in an upcoming PR.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "induction_on_adjoin_fg", ["intermediate_field"]], ["add", "theorem", "induction_on_adjoin_finset", ["intermediate_field"]]]}]}, {"timestamp": 1607067782, "sha": "7e307bcc", "message": "chore(algebra/ring): delete a duplicate instance (#5215)\nIn #3303 and #3296 which were merged 1 day apart two versions of the instance comm_monoid_with_zero from a comm_semiring were added 5 lines apart in the file, delete one.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}]}, {"timestamp": 1607067780, "sha": "2d00ba48", "message": "feat(category_theory/limits): cleanup equalizers (#5214)\ngolf and make simp more powerful", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["del", "theorem", "cocone_of_split_epi_ι_app_one", ["category_theory", "limits"]], ["del", "theorem", "cocone_of_split_epi_ι_app_zero", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "cofork"]], ["mod", "theorem", "π_eq_app_one", ["category_theory", "limits", "cofork"]], ["mod", "theorem", "π_of_π", ["category_theory", "limits", "cofork"]], ["del", "theorem", "cone_of_split_mono_π_app_one", ["category_theory", "limits"]], ["del", "theorem", "cone_of_split_mono_π_app_zero", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "fork"]], ["mod", "theorem", "ι_eq_app_zero", ["category_theory", "limits", "fork"]], ["mod", "theorem", "ι_of_ι", ["category_theory", "limits", "fork"]], ["mod", "def", "split_epi_coequalizes", ["category_theory", "limits"]]]}]}, {"timestamp": 1607067779, "sha": "b2f8c4c0", "message": "feat(category_theory/limits): reflects limit if reflects iso and preserves (#5213)", "changes": [{"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "reflects_colimit_of_reflects_isomorphisms", ["category_theory", "limits"]], ["add", "def", "reflects_colimits_of_reflects_isomorphisms", ["category_theory", "limits"]], ["add", "def", "reflects_colimits_of_shape_of_reflects_isomorphisms", ["category_theory", "limits"]], ["add", "def", "reflects_limit_of_reflects_isomorphisms", ["category_theory", "limits"]], ["add", "def", "reflects_limits_of_reflects_isomorphisms", ["category_theory", "limits"]], ["add", "def", "reflects_limits_of_shape_of_reflects_isomorphisms", ["category_theory", "limits"]]]}]}, {"timestamp": 1607067777, "sha": "cfd01f9d", "message": "chore(topology/continuous_on): change type of `continuous_on.comp_continuous` (#5209)\nUse `∀ x, f x ∈ s` instead of `range f ⊆ s`.", "changes": [{"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1607067775, "sha": "ad25cacf", "message": "refactor(data/polynomial/derivative): change `polynomial.derivative` to be a `linear_map` (#5198)\nRefactors polynomial.derivative to be a linear_map by default", "changes": [{"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["mod", "def", "derivative", ["polynomial"]], ["add", "theorem", "derivative_apply", ["polynomial"]], ["add", "theorem", "derivative_eval", ["polynomial"]], ["del", "def", "derivative_hom", ["polynomial"]], ["del", "def", "derivative_lhom", ["polynomial"]], ["mod", "theorem", "derivative_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": [["del", "theorem", "derivative_eval", ["polynomial"]]]}]}, {"timestamp": 1607067772, "sha": "240f6eb9", "message": "feat(category_theory/monad): cleanups in monad algebra (#5193)\n- Converts the simp normal form for composition of algebra homs to use category notation. \n- Adds simps where appropriate\n- Golfs proofs, remove some erw and nonterminal simps\n- Remove some redundant brackets", "changes": [{"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["add", "theorem", "comp_eq_comp", ["category_theory", "comonad", "coalgebra"]], ["add", "theorem", "comp_f", ["category_theory", "comonad", "coalgebra"]], ["mod", "def", "comp", ["category_theory", "comonad", "coalgebra", "hom"]], ["mod", "def", "id", ["category_theory", "comonad", "coalgebra", "hom"]], ["add", "theorem", "id_eq_id", ["category_theory", "comonad", "coalgebra"]], ["add", "theorem", "id_f", ["category_theory", "comonad", "coalgebra"]], ["add", "theorem", "comp_eq_comp", ["category_theory", "monad", "algebra"]], ["add", "theorem", "comp_f", ["category_theory", "monad", "algebra"]], ["mod", "def", "comp", ["category_theory", "monad", "algebra", "hom"]], ["mod", "def", "id", ["category_theory", "monad", "algebra", "hom"]], ["add", "theorem", "id_eq_id", ["category_theory", "monad", "algebra"]], ["add", "theorem", "id_f", ["category_theory", "monad", "algebra"]]]}]}, {"timestamp": 1607067770, "sha": "c10d1b1f", "message": "feat(ring_theory/polynomial/cyclotomic): add order_of_root_cyclotomic (#5151)\nTwo lemmas about roots of cyclotomic polynomials modulo `p`.\n`order_of_root_cyclotomic` is the main algebraic tool to prove the existence of infinitely many primes congruent to `1` modulo `n`.", "changes": [{"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "divisors_subset_of_dvd", ["nat"]], ["add", "theorem", "divisors_subset_proper_divisors", ["nat"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "X_pow_sub_one_dvd_prod_cyclotomic", ["polynomial"]], ["add", "theorem", "coprime_of_root_cyclotomic", ["polynomial"]], ["mod", "theorem", "cyclotomic_coeff_zero", ["polynomial"]], ["add", "theorem", "order_of_root_cyclotomic", ["polynomial"]], ["add", "theorem", "order_of_root_cyclotomic_dvd", ["polynomial"]]]}]}, {"timestamp": 1607067768, "sha": "c939c9e4", "message": "feat(category_theory/limits/preserves): preserving terminal objects (#5060)\nAnother part of #4716.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/terminal.lean", "changes": [["add", "theorem", "has_terminal_of_has_terminal_of_preserves_limit", ["category_theory", "limits"]], ["add", "def", "is_limit_map_cone_empty_cone_equiv", ["category_theory", "limits"]], ["add", "def", "is_limit_of_has_terminal_of_preserves_limit", ["category_theory", "limits"]], ["add", "def", "is_terminal_obj_of_is_terminal", ["category_theory", "limits"]], ["add", "def", "is_terminal_of_is_terminal_obj", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_terminal"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_terminal"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_terminal"]], ["add", "def", "preserves_terminal_of_is_iso", ["category_theory", "limits"]], ["add", "def", "preserves_terminal_of_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1607063718, "sha": "4f5046dd", "message": "feat(ring_theory/polynomial/cyclotomic): Möbius inversion formula for cyclotomic polynomials (#5192)\nProves Möbius inversion for functions to a `comm_group_with_zero`\nProves the Möbius inversion formula for cyclotomic polynomials", "changes": [{"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "prod_eq_iff_prod_pow_moebius_eq_of_nonzero", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "cyclotomic_eq_prod_X_pow_sub_one_pow_moebius", ["polynomial"]]]}]}, {"timestamp": 1607044837, "sha": "57dd302d", "message": "chore(scripts): update nolints.txt (#5211)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1607034301, "sha": "20cc59d9", "message": "feat(algebra/lie/basic): define missing inclusion maps (#5207)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "def", "is_lie_abelian", []], ["add", "def", "incl", ["lie_ideal"]], ["add", "theorem", "incl_apply", ["lie_ideal"]], ["add", "theorem", "coe_hom_of_le", ["lie_submodule"]], ["add", "def", "hom_of_le", ["lie_submodule"]], ["add", "theorem", "hom_of_le_apply", ["lie_submodule"]], ["add", "def", "incl", ["lie_submodule"]], ["add", "theorem", "incl_apply", ["lie_submodule"]], ["add", "theorem", "incl_eq_val", ["lie_submodule"]]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}]}, {"timestamp": 1607034299, "sha": "ec839ef0", "message": "feat(topology/algebra/order): continuity of monotone functions (#5199)\nAdd local versions of `order_iso.continuous`.", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "continuous_at_left_of_mono_incr_on_of_closure_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_left_of_mono_incr_on_of_exists_between", []], ["add", "theorem", "continuous_at_left_of_mono_incr_on_of_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_of_mono_incr_on_of_closure_image_mem_nhds", []], ["add", "theorem", "continuous_at_of_mono_incr_on_of_exists_between", []], ["add", "theorem", "continuous_at_of_mono_incr_on_of_image_mem_nhds", []], ["add", "theorem", "continuous_at_right_of_mono_incr_on_of_closure_image_mem_nhds_within", []], ["add", "theorem", "continuous_at_right_of_mono_incr_on_of_exists_between", []], ["add", "theorem", "continuous_at_right_of_mono_incr_on_of_image_mem_nhds_within", []], ["add", "theorem", "continuous_of_dense_range", ["monotone"]], ["add", "theorem", "continuous_of_surjective", ["monotone"]], ["add", "theorem", "continuous_at_left_of_closure_image_mem_nhds_within", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_left_of_exists_between", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_left_of_image_mem_nhds_within", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_left_of_surj_on", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_of_closure_image_mem_nhds", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_of_exists_between", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_of_image_mem_nhds", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_right_of_closure_image_mem_nhds_within", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_right_of_exists_between", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_right_of_image_mem_nhds_within", ["strict_mono_incr_on"]], ["add", "theorem", "continuous_at_right_of_surj_on", ["strict_mono_incr_on"]]]}]}, {"timestamp": 1607023825, "sha": "3894503e", "message": "doc(tactic/library_search): use more detailed doc string in docs (#5206)\nThe doc string for `tactic.interactive.library_search` is better than the tactic doc entry.\nThe latter is missing details like `library_search!`", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1607023823, "sha": "d416ad69", "message": "feat(topology/category/Profinite): add category of profinite top. spaces (#5147)", "changes": [{"oldPath": "src/topology/category/CompHaus.lean", "newPath": "src/topology/category/CompHaus.lean", "changes": [["add", "theorem", "coe_to_Top", ["CompHaus"]], ["mod", "def", "CompHaus_to_Top", []]]}, {"oldPath": null, "newPath": "src/topology/category/Profinite.lean", "changes": [["add", "theorem", "coe_to_Top", ["Profinite"]], ["add", "structure", "Profinite", []], ["add", "def", "Profinite_to_CompHaus", []], ["add", "theorem", "Profinite_to_CompHaus_to_Top", []], ["add", "def", "Profinite_to_Top", []]]}]}, {"timestamp": 1607023820, "sha": "6f38a50d", "message": "feat(field_theory/minimal_polynomial): add algebra_map_inj (#5062)\nI have added `algebra_map_inj` that computes the minimal polynomial of an element of the base ring. It generalizes `algebra_map` that assumes the base ring to be a field. I left `algebra_map` since I think it is reasonable to have a lemma that works without proving explicitly that the algebra map is injective.", "changes": [{"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["del", "theorem", "algebra_map'", ["minimal_polynomial"]], ["add", "theorem", "degree_le_of_monic", ["minimal_polynomial"]], ["add", "theorem", "eq_X_sub_C", ["minimal_polynomial"]], ["add", "theorem", "eq_X_sub_C_of_algebra_map_inj", ["minimal_polynomial"]], ["mod", "theorem", "gcd_domain_eq_field_fractions", ["minimal_polynomial"]]]}]}, {"timestamp": 1607013094, "sha": "986cabf3", "message": "fix(linear_algebra/multilinear): Fix incorrect type constraints on `dom_dom_congr` (#5203)\nIn the last PR, I accidentally put this in a section with `[comm_semiring R]`, but this only actually requires `[semiring R]`", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1607013092, "sha": "52697178", "message": "chore(linear_algebra/determinant): Move some lemmas about swaps to better files (#5201)\nThese lemmas are not specific to determinants, and I need them in another file imported by `determinant`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "apply_swap_eq_self", ["equiv"]], ["mod", "theorem", "comp_swap_eq_update", ["equiv"]], ["mod", "theorem", "swap_apply_self", ["equiv"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "def", "mod_swap", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["del", "def", "mod_swap", ["matrix"]]]}]}, {"timestamp": 1607013090, "sha": "8ff9c0e6", "message": "feat(group_theory/order_of_element): add is_cyclic_of_prime_card (#5172)\nAdd `is_cyclic_of_prime_card`, which says if a group has prime order, then it is cyclic. I also added `eq_top_of_card_eq` which says a subgroup is `top` when it has the same size as the group, not sure where that should be in the file.", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "is_cyclic_of_prime_card", []]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "eq_top_of_card_eq", ["subgroup"]]]}]}, {"timestamp": 1607004280, "sha": "f1b387f8", "message": "feat(algebra/module/basic): Add smul_comm_class instances (#5205)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1607004278, "sha": "a4b6c418", "message": "feat(field_theory/separable): is_separable_of_alg_hom_is_separable (#5175)\nProves that is_separable pulls back along an alg_hom", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "of_alg_hom", ["is_separable"]]]}]}, {"timestamp": 1607004276, "sha": "b978f366", "message": "refactor(field_theory/fixed): Generalize alg_hom lemmas (#5174)\nThis PR generalizes some alg_hom lemmas to not require equality of the domain and codomain.", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["mod", "theorem", "cardinal_mk_alg_hom", []], ["mod", "theorem", "linear_independent_to_linear_map", []]]}]}, {"timestamp": 1607004273, "sha": "e7c2bba1", "message": "feat(ring_theory/witt_vector/frobenius): the frobenius endomorphism of witt vectors (#4838)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/frobenius.lean", "changes": [["add", "theorem", "bind₁_frobenius_poly_rat_witt_polynomial", ["witt_vector"]], ["add", "theorem", "bind₁_frobenius_poly_witt_polynomial", ["witt_vector"]], ["add", "theorem", "coeff_frobenius", ["witt_vector"]], ["add", "theorem", "coeff_frobenius_char_p", ["witt_vector"]], ["add", "theorem", "coeff_frobenius_fun", ["witt_vector"]], ["add", "def", "frobenius", ["witt_vector"]], ["add", "theorem", "frobenius_eq_map_frobenius", ["witt_vector"]], ["add", "def", "frobenius_fun", ["witt_vector"]], ["add", "theorem", "frobenius_fun_is_poly", ["witt_vector"]], ["add", "theorem", "frobenius_is_poly", ["witt_vector"]], ["add", "def", "frobenius_poly", ["witt_vector"]], ["add", "theorem", "frobenius_poly_aux_eq", ["witt_vector"]], ["add", "def", "frobenius_poly_rat", ["witt_vector"]], ["add", "theorem", "frobenius_poly_zmod", ["witt_vector"]], ["add", "theorem", "frobenius_zmodp", ["witt_vector"]], ["add", "theorem", "ghost_component_frobenius", ["witt_vector"]], ["add", "theorem", "ghost_component_frobenius_fun", ["witt_vector"]], ["add", "theorem", "key₁", ["witt_vector", "map_frobenius_poly"]], ["add", "theorem", "key₂", ["witt_vector", "map_frobenius_poly"]], ["add", "theorem", "map_frobenius_poly", ["witt_vector"]]]}]}, {"timestamp": 1606997000, "sha": "f1531ea5", "message": "feat(ring_theory/witt_vector): witt_sub, a demonstration of is_poly techniques (#5165)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/ring_theory/witt_vector/is_poly.lean", "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": [["add", "theorem", "sub_coeff", ["witt_vector"]], ["add", "theorem", "sub_eq", ["witt_vector"]]]}]}, {"timestamp": 1606996998, "sha": "f6273d4d", "message": "feat(group_theory/group_action/sub_mul_action): Add an object for bundled sets closed under a mul action (#4996)\nThis adds `sub_mul_action` as a base class for `submodule`, and copies across the relevant lemmas.\nThis also weakens the type class requires for `A →[R] B`, to allow it to be used when only `has_scalar` is available.", "changes": [{"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": [["mod", "def", "comp", ["mul_action_hom"]], ["mod", "theorem", "comp_apply", ["mul_action_hom"]], ["mod", "theorem", "comp_id", ["mul_action_hom"]], ["mod", "theorem", "ext", ["mul_action_hom"]], ["mod", "theorem", "ext_iff", ["mul_action_hom"]], ["mod", "theorem", "id_apply", ["mul_action_hom"]], ["mod", "theorem", "id_comp", ["mul_action_hom"]], ["mod", "theorem", "map_smul", ["mul_action_hom"]]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["mod", "theorem", "neg_mem", ["submodule"]], ["add", "theorem", "to_sub_mul_action_eq", ["submodule"]], ["add", "theorem", "to_sub_mul_action_injective", ["submodule"]]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/sub_mul_action.lean", "changes": [["add", "theorem", "coe_eq_coe", ["sub_mul_action"]], ["add", "theorem", "coe_injective", ["sub_mul_action"]], ["add", "theorem", "coe_mem", ["sub_mul_action"]], ["add", "theorem", "coe_mk", ["sub_mul_action"]], ["add", "theorem", "coe_neg", ["sub_mul_action"]], ["add", "theorem", "coe_set_eq", ["sub_mul_action"]], ["add", "theorem", "coe_smul", ["sub_mul_action"]], ["add", "theorem", "coe_sort_coe", ["sub_mul_action"]], ["add", "theorem", "ext'_iff", ["sub_mul_action"]], ["add", "theorem", "ext", ["sub_mul_action"]], ["add", "theorem", "mem_coe", ["sub_mul_action"]], ["add", "theorem", "neg_mem", ["sub_mul_action"]], ["add", "theorem", "neg_mem_iff", ["sub_mul_action"]], ["add", "theorem", "smul_mem", ["sub_mul_action"]], ["add", "theorem", "smul_mem_iff'", ["sub_mul_action"]], ["add", "theorem", "smul_mem_iff", ["sub_mul_action"]], ["add", "theorem", "subtype_apply", ["sub_mul_action"]], ["add", "theorem", "subtype_eq_val", ["sub_mul_action"]], ["add", "structure", "sub_mul_action", []]]}]}, {"timestamp": 1606992959, "sha": "98a20c25", "message": "feat(combinatorics/simple_graph/matching): introduce matchings and perfect matchings of graphs (#5156)\nIntroduce definitions of matchings and perfect matchings of graphs. This is with the goal of eventually proving Hall's Marriage Theorem and Tutte's Theorem.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph/matching.lean", "changes": [["add", "structure", "is_matching", ["simple_graph"]], ["add", "def", "is_perfect", ["simple_graph", "matching"]], ["add", "theorem", "is_perfect_iff", ["simple_graph", "matching"]], ["add", "def", "support", ["simple_graph", "matching"]], ["add", "def", "matching", ["simple_graph"]]]}]}, {"timestamp": 1606963301, "sha": "61e76c42", "message": "chore(scripts): update nolints.txt (#5197)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606957433, "sha": "d9a7d05d", "message": "chore(topology/algebra/ordered): add `order_iso.to_homeomorph` (#5111)\n* Replace `homeomorph_of_strict_mono_surjective` with `order_iso.to_homeomorph` and `order_iso.continuous`.\n* Drop `continuous_at_of_strict_mono_surjective` in favor of `order_iso.to_homeomorph`.\n* Use notation for `nhds_within` here and there.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["del", "theorem", "coe_homeomorph_of_strict_mono_surjective", []], ["del", "theorem", "continuous_at_of_strict_mono_surjective", []], ["del", "theorem", "continuous_inv_of_strict_mono_equiv", []], ["del", "theorem", "continuous_left_of_strict_mono_surjective", []], ["del", "theorem", "continuous_of_strict_mono_surjective", []], ["del", "theorem", "continuous_right_of_strict_mono_surjective", []], ["add", "theorem", "coe_to_homeomorph", ["order_iso"]], ["add", "theorem", "coe_to_homeomorph_symm", ["order_iso"]], ["add", "def", "to_homeomorph", ["order_iso"]]]}]}, {"timestamp": 1606944139, "sha": "3f61e549", "message": "feat(category_theory/monad): mark monad lemmas as reassoc (#5190)", "changes": [{"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}]}, {"timestamp": 1606944136, "sha": "a84d7a71", "message": "feat(category_theory/adjunction): adjunction to equivalence (#5189)\nRaise an adjunction to an equivalence", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "def", "is_right_adjoint_to_is_equivalence", ["category_theory", "adjunction"]], ["add", "def", "to_equivalence", ["category_theory", "adjunction"]]]}]}, {"timestamp": 1606944133, "sha": "ed6eab01", "message": "feat(category_theory/adjunction): simp adjunction defs (#5188)\nMark adjunction defs as `simps` and use the new lemmas to simplify some proofs", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["del", "theorem", "equiv_homset_left_of_nat_iso_apply", ["category_theory", "adjunction"]], ["del", "theorem", "equiv_homset_left_of_nat_iso_symm_apply", ["category_theory", "adjunction"]], ["del", "theorem", "equiv_homset_right_of_nat_iso_apply", ["category_theory", "adjunction"]], ["del", "theorem", "equiv_homset_right_of_nat_iso_symm_apply", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}]}, {"timestamp": 1606944131, "sha": "9be829e9", "message": "feat(order/bounds): add basic lemmas about bdd_below (#5186)\nLemmas for bounded intervals (`Icc`, `Ico`, `Ioc` and `Ioo`). There were lemmas for `bdd_above` but the ones for `bdd_below` were missing.", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "bdd_below_Icc", []], ["add", "theorem", "bdd_below_Ico", []], ["add", "theorem", "bdd_below_Ioc", []], ["add", "theorem", "bdd_below_Ioo", []]]}]}, {"timestamp": 1606944129, "sha": "e5befed7", "message": "chore(data/polynomial/degree): golf some proofs, add simple lemmas (#5185)\n* drop `polynomial.nat_degree_C_mul_X_pow_of_nonzero`; was a duplicate\n of `polynomial.nat_degree_C_mul_X_pow`;\n* golf the proof of `nat_degree_C_mul_X_pow_le`;\n* add more `simp` lemmas.", "changes": [{"oldPath": "src/data/polynomial/degree/definitions.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": [["add", "theorem", "degree_mul_X", ["polynomial"]], ["add", "theorem", "degree_mul_X_pow", ["polynomial"]], ["add", "theorem", "degree_mul_monic", ["polynomial"]], ["add", "theorem", "leading_coeff_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["del", "theorem", "leading_coeff_monomial'", ["polynomial"]], ["mod", "theorem", "leading_coeff_monomial", ["polynomial"]], ["add", "theorem", "leading_coeff_mul_X", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_mul_monic", ["polynomial"]], ["add", "theorem", "monic_X_pow", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_X", ["polynomial"]], ["del", "theorem", "nat_degree_C_mul_X_pow_of_nonzero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}]}, {"timestamp": 1606944127, "sha": "64fd9f8c", "message": "feat(order/rel_iso): preimages of intervals under an `order_iso` (#5183)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "preimage_Icc", ["order_iso"]], ["add", "theorem", "preimage_Ici", ["order_iso"]], ["add", "theorem", "preimage_Ico", ["order_iso"]], ["add", "theorem", "preimage_Iic", ["order_iso"]], ["add", "theorem", "preimage_Iio", ["order_iso"]], ["add", "theorem", "preimage_Ioc", ["order_iso"]], ["add", "theorem", "preimage_Ioi", ["order_iso"]], ["add", "theorem", "preimage_Ioo", ["order_iso"]]]}]}, {"timestamp": 1606944125, "sha": "725fb8bc", "message": "feat(algebra/lie/basic): define `map` and `comap` for Lie ideals, submodules (#5181)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "def", "comap", ["lie_ideal"]], ["add", "theorem", "gc_map_comap", ["lie_ideal"]], ["add", "def", "map", ["lie_ideal"]], ["add", "theorem", "map_le_iff_le_comap", ["lie_ideal"]], ["add", "def", "comap", ["lie_submodule"]], ["add", "theorem", "gc_map_comap", ["lie_submodule"]], ["add", "def", "lie_span", ["lie_submodule"]], ["add", "theorem", "lie_span_le", ["lie_submodule"]], ["add", "def", "map", ["lie_submodule"]], ["add", "theorem", "map_le_iff_le_comap", ["lie_submodule"]], ["add", "theorem", "mem_lie_span", ["lie_submodule"]], ["add", "theorem", "subset_lie_span", ["lie_submodule"]]]}]}, {"timestamp": 1606944123, "sha": "5e93545f", "message": "feat(linear_algebra/multilinear): Generalize dom_dom_congr for equivalences between types (#5180)\nThis also bundles the operation into an equivalence.", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["mod", "def", "dom_dom_congr", ["multilinear_map"]], ["add", "def", "dom_dom_congr_equiv", ["multilinear_map"]]]}]}, {"timestamp": 1606944121, "sha": "8da5f23f", "message": "feat(data/set/function): Extend `update_comp` lemmas to work on dependent functions (#5178)\nAlso extends them to `Sort`", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "update_comp_eq_of_injective'", ["function"]], ["mod", "theorem", "update_comp_eq_of_injective", ["function"]], ["add", "theorem", "update_comp_eq_of_not_mem_range'", ["function"]], ["mod", "theorem", "update_comp_eq_of_not_mem_range", ["function"]]]}]}, {"timestamp": 1606944118, "sha": "2189c7ab", "message": "feat(data/option/basic): map_map functor-like lemmas (#5030)\nNew lemmas:\n`map_eq_map`\n`map_map`\n`comp_map`\n`map_comp_map`", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "comp_map", ["option"]], ["add", "theorem", "map_comp_map", ["option"]], ["add", "theorem", "map_eq_map", ["option"]], ["mod", "theorem", "map_eq_some", ["option"]], ["add", "theorem", "map_map", ["option"]], ["mod", "theorem", "map_none", ["option"]], ["mod", "theorem", "map_some", ["option"]]]}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}]}, {"timestamp": 1606936408, "sha": "0bb88094", "message": "feat(category_theory/limits): left adjoint if preserves colimits (#4942)\nA slight generalisation of a construction from before. Maybe this is the dual version you were talking about @jcommelin - if so my mistake! I think the advantage of doing it this way is that you definitionally get the old version but also the new version too.", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": [["mod", "def", "is_left_adjoint_of_preserves_colimits", ["category_theory"]], ["add", "def", "is_left_adjoint_of_preserves_colimits_aux", ["category_theory"]]]}]}, {"timestamp": 1606930683, "sha": "e5ea2000", "message": "chore(analysis/normed_space): golf 2 proofs (#5184)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1606921663, "sha": "a8ddd7b2", "message": "feat(algebra/module/basic): generalize `is_scalar_tower` instances (#5135)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1606915947, "sha": "d6241cb0", "message": "feat(linear_algebra/*): Use alternating maps for wedge and determinant (#5124)\nThis :\n* Adds `exterior_algebra.ι_multi`, where `ι_multi ![a, b ,c]` = `ι a * ι b * ι c`\n* Makes `det_row_multilinear` an `alternating_map`\n* Makes `is_basis.det` an `alternating_map`", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "def", "det_row_multilinear", ["matrix"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["add", "theorem", "ι_add_mul_swap", ["exterior_algebra"]], ["add", "theorem", "ι_mul_prod_list", ["exterior_algebra"]], ["add", "def", "ι_multi", ["exterior_algebra"]], ["add", "theorem", "ι_multi_apply", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "def", "det", ["is_basis"]], ["add", "theorem", "to_matrix_transpose_apply", ["is_basis"]], ["add", "theorem", "to_matrix_transpose_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_transpose_apply", ["linear_map"]]]}]}, {"timestamp": 1606893931, "sha": "61f63649", "message": "feat(number_theory/arithmetic_function): Möbius inversion for `add_comm_group`s, `comm_group`s (#5115)\nAdds scalar multiplication for `arithmetic_function`s\nGeneralizes Möbius inversion to work with `(add_)comm_group`s", "changes": [{"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "coe_zeta_smul_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "mul_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "mul_smul'", ["nat", "arithmetic_function"]], ["add", "theorem", "one_smul'", ["nat", "arithmetic_function"]], ["add", "theorem", "prod_eq_iff_prod_pow_moebius_eq", ["nat", "arithmetic_function"]], ["add", "theorem", "smul_apply", ["nat", "arithmetic_function"]], ["del", "theorem", "sum_eq_iff_sum_moebius_eq", ["nat", "arithmetic_function"]], ["add", "theorem", "sum_eq_iff_sum_mul_moebius_eq", ["nat", "arithmetic_function"]], ["add", "theorem", "sum_eq_iff_sum_smul_moebius_eq", ["nat", "arithmetic_function"]]]}]}, {"timestamp": 1606874439, "sha": "f7e1806d", "message": "chore(scripts): update nolints.txt (#5176)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606865037, "sha": "c2c7afe9", "message": "feat(data/nat/sqrt): add simple inequality lemmas and \"no middle square\" (#5155)\nThe first two theorems are useful when one needs the biggest perfect square strictly less than a number, whereas `no_middle_square` can be used to easily prove that a given number is not a square.", "changes": [{"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": [["add", "theorem", "not_exists_sq", ["nat"]], ["add", "theorem", "sqrt_mul_sqrt_lt_succ", ["nat"]], ["add", "theorem", "succ_le_succ_sqrt", ["nat"]]]}]}, {"timestamp": 1606865034, "sha": "9a4ed2aa", "message": "refactor(*): Add `_injective` alongside `_inj` lemmas (#5150)\nThis adds four new `injective` lemmas:\n* `list.append_right_injective`\n* `list.append_left_injective`\n* `sub_right_injective`\n* `sub_left_injective`\nIt also replaces as many `*_inj` lemmas as possible with an implementation of `*_injective.eq_iff`, to make it clear that the lemmas are just aliases of each other.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "sub_left_injective", []], ["add", "theorem", "sub_right_injective", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "append_left_injective", ["list"]], ["add", "theorem", "append_right_injective", ["list"]]]}]}, {"timestamp": 1606865032, "sha": "c2b7d237", "message": "chore(category_theory/limits): separate regular and normal monos (#5149)\nThis separates the file `regular_mono` into `regular_mono` and `normal_mono`: mostly this simplifies the import graph, but also this has the advantage that to use things about kernel pairs it's no longer necessary to import things about zero objects (I kept changing equalizers and using the changes in a file about monads which imported kernel pairs, and it was very slow because of zero objects)", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/normal_mono.lean", "changes": [["add", "def", "equivalence_reflects_normal_epi", ["category_theory"]], ["add", "def", "equivalence_reflects_normal_mono", ["category_theory"]], ["add", "def", "desc'", ["category_theory", "normal_epi"]], ["add", "def", "lift'", ["category_theory", "normal_mono"]], ["add", "def", "normal_of_is_pullback_fst_of_normal", ["category_theory"]], ["add", "def", "normal_of_is_pullback_snd_of_normal", ["category_theory"]], ["add", "def", "normal_of_is_pushout_fst_of_normal", ["category_theory"]], ["add", "def", "normal_of_is_pushout_snd_of_normal", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["del", "def", "equivalence_reflects_normal_epi", ["category_theory"]], ["del", "def", "equivalence_reflects_normal_mono", ["category_theory"]], ["del", "def", "desc'", ["category_theory", "normal_epi"]], ["del", "def", "lift'", ["category_theory", "normal_mono"]], ["del", "def", "normal_of_is_pullback_fst_of_normal", ["category_theory"]], ["del", "def", "normal_of_is_pullback_snd_of_normal", ["category_theory"]], ["del", "def", "normal_of_is_pushout_fst_of_normal", ["category_theory"]], ["del", "def", "normal_of_is_pushout_snd_of_normal", ["category_theory"]]]}]}, {"timestamp": 1606853102, "sha": "6c456e35", "message": "feat(linear_algebra/multilinear): Add dom_dom_congr (#5136)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "dite_comp_equiv_update", []], ["add", "theorem", "update_apply_equiv_apply", ["function"]], ["add", "theorem", "update_comp_equiv", ["function"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "def", "dom_dom_congr", ["multilinear_map"]]]}]}, {"timestamp": 1606853100, "sha": "41e0903f", "message": "feat(category_theory/limits/preserves): preserving equalizers (#5044)\nConstructions and lemmas about preserving equalizers", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/equalizers.lean", "changes": [["add", "def", "is_limit_fork_map_of_is_limit", ["category_theory", "limits"]], ["add", "def", "is_limit_map_cone_fork_equiv", ["category_theory", "limits"]], ["add", "def", "is_limit_of_has_equalizer_of_preserves_limit", ["category_theory", "limits"]], ["add", "def", "is_limit_of_is_limit_fork_map", ["category_theory", "limits"]], ["add", "def", "iso", ["category_theory", "limits", "preserves_equalizer"]], ["add", "theorem", "iso_hom", ["category_theory", "limits", "preserves_equalizer"]], ["add", "def", "of_iso_comparison", ["category_theory", "limits", "preserves_equalizer"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}]}, {"timestamp": 1606839264, "sha": "2a684774", "message": "chore(algebra/group/basic): Add eq_one_iff_eq_one_of_mul_eq_one (#5169)", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "eq_one_iff_eq_one_of_mul_eq_one", []]]}]}, {"timestamp": 1606839262, "sha": "24596cae", "message": "feat(tactic/ring_exp): handle `nat.succ p` as `p + 1` (#5166)\nFixes: #5157 \nThis PR adds a `rewrite` operation to `ring_exp`, which takes a normalized `p' : ex sum` and a proof that `p = p'.orig`, and shows `p` also normalizes to `p'.pretty`. The only use currently is `nat.succ`. If we still had `nat.has_pow`, the same function could have handled rewriting from `nat.has_pow` to `monoid.has_pow`.", "changes": [{"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1606839260, "sha": "9e78823c", "message": "feat(ring_theory/perfection): perfection and tilt (#5032)\n- [x] depends on: #5132", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/perfection.lean", "changes": [["add", "theorem", "mul_ne_zero_of_pow_p_ne_zero", ["mod_p"]], ["add", "theorem", "pre_val_add", ["mod_p"]], ["add", "theorem", "pre_val_eq_zero", ["mod_p"]], ["add", "theorem", "pre_val_mk", ["mod_p"]], ["add", "theorem", "pre_val_mul", ["mod_p"]], ["add", "theorem", "pre_val_zero", ["mod_p"]], ["add", "theorem", "v_p_lt_pre_val", ["mod_p"]], ["add", "theorem", "v_p_lt_val", ["mod_p"]], ["add", "def", "mod_p", []], ["add", "def", "perfection", ["monoid"]], ["add", "theorem", "coeff_nat_find_add_ne_zero", ["pre_tilt"]], ["add", "theorem", "map_eq_zero", ["pre_tilt"]], ["add", "theorem", "val_aux_add", ["pre_tilt"]], ["add", "theorem", "val_aux_eq", ["pre_tilt"]], ["add", "theorem", "val_aux_mul", ["pre_tilt"]], ["add", "theorem", "val_aux_one", ["pre_tilt"]], ["add", "theorem", "val_aux_zero", ["pre_tilt"]], ["add", "def", "pre_tilt", []], ["add", "def", "coeff", ["ring", "perfection"]], ["add", "theorem", "coeff_add_ne_zero", ["ring", "perfection"]], ["add", "theorem", "coeff_frobenius", ["ring", "perfection"]], ["add", "theorem", "coeff_ne_zero_of_le", ["ring", "perfection"]], ["add", "theorem", "coeff_pow_p", ["ring", "perfection"]], ["add", "theorem", "coeff_pth_root", ["ring", "perfection"]], ["add", "theorem", "ext", ["ring", "perfection"]], ["add", "theorem", "frobenius_pth_root", ["ring", "perfection"]], ["add", "def", "pth_root", ["ring", "perfection"]], ["add", "theorem", "pth_root_frobenius", ["ring", "perfection"]], ["add", "def", "perfection", ["ring"]], ["add", "def", "perfection", ["semiring"]], ["add", "def", "tilt", []]]}]}, {"timestamp": 1606829141, "sha": "b7649bcd", "message": "doc(linear_algebra/determinant): Add a reference to is_basis.det (#5167)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1606829139, "sha": "c088f657", "message": "chore(data/equiv/perm): Move around lemmas about perm and swap (#5153)\nOnly a very small fraction of `data/equiv/basic` needs knowledge of groups, moving out `perm_group` lets us cut the dependency.\nThe new `perm_group` file is then a good place for some of the lemmas in `group_theory/perm/sign`, especially those which just restate `equiv` lemmas in terms of `*` and `⁻¹` instead of `.trans` and `.symm`.\nThis moves a few lemmas about swap out of the `equiv.perm` namespace and into `equiv`, since `equiv.swap` is also in that namespace.", "changes": [{"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "theorem", "apply_inv_self", ["equiv", "perm"]], ["del", "theorem", "coe_mul", ["equiv", "perm"]], ["del", "theorem", "coe_one", ["equiv", "perm"]], ["del", "theorem", "inv_apply_self", ["equiv", "perm"]], ["del", "theorem", "inv_def", ["equiv", "perm"]], ["del", "theorem", "mul_apply", ["equiv", "perm"]], ["del", "theorem", "mul_def", ["equiv", "perm"]], ["del", "theorem", "one_apply", ["equiv", "perm"]], ["del", "theorem", "one_def", ["equiv", "perm"]], ["del", "theorem", "swap_inv", ["equiv"]], ["del", "theorem", "swap_mul_self", ["equiv"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/perm/basic.lean", "changes": [["add", "theorem", "mul_swap_eq_swap_mul", ["equiv"]], ["add", "theorem", "apply_inv_self", ["equiv", "perm"]], ["add", "theorem", "coe_mul", ["equiv", "perm"]], ["add", "theorem", "coe_one", ["equiv", "perm"]], ["add", "theorem", "eq_inv_iff_eq", ["equiv", "perm"]], ["add", "theorem", "inv_apply_self", ["equiv", "perm"]], ["add", "theorem", "inv_def", ["equiv", "perm"]], ["add", "theorem", "inv_eq_iff_eq", ["equiv", "perm"]], ["add", "theorem", "mul_apply", ["equiv", "perm"]], ["add", "theorem", "mul_def", ["equiv", "perm"]], ["add", "theorem", "one_apply", ["equiv", "perm"]], ["add", "theorem", "one_def", ["equiv", "perm"]], ["add", "theorem", "swap_inv", ["equiv"]], ["add", "theorem", "swap_mul_eq_iff", ["equiv"]], ["add", "theorem", "swap_mul_eq_mul_swap", ["equiv"]], ["add", "theorem", "swap_mul_involutive", ["equiv"]], ["add", "theorem", "swap_mul_self", ["equiv"]], ["add", "theorem", "swap_mul_self_mul", ["equiv"]], ["add", "theorem", "swap_mul_swap_mul_swap", ["equiv"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["del", "theorem", "eq_inv_iff_eq", ["equiv", "perm"]], ["del", "theorem", "inv_eq_iff_eq", ["equiv", "perm"]], ["del", "theorem", "mul_swap_eq_swap_mul", ["equiv", "perm"]], ["del", "theorem", "swap_mul_eq_iff", ["equiv", "perm"]], ["del", "theorem", "swap_mul_eq_mul_swap", ["equiv", "perm"]], ["del", "theorem", "swap_mul_involutive", ["equiv", "perm"]], ["del", "theorem", "swap_mul_self_mul", ["equiv", "perm"]], ["del", "theorem", "swap_mul_swap_mul_swap", ["equiv", "perm"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}]}, {"timestamp": 1606829137, "sha": "7188eae5", "message": "feat(linear_algebra): Add alternating multilinear maps (#5102)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/alternating.lean", "changes": [["add", "theorem", "add_apply", ["alternating_map"]], ["add", "theorem", "coe_inj", ["alternating_map"]], ["add", "theorem", "coe_mk", ["alternating_map"]], ["add", "theorem", "coe_multilinear_map", ["alternating_map"]], ["add", "theorem", "coe_multilinear_map_mk", ["alternating_map"]], ["add", "theorem", "congr_arg", ["alternating_map"]], ["add", "theorem", "congr_fun", ["alternating_map"]], ["add", "theorem", "ext", ["alternating_map"]], ["add", "theorem", "ext_iff", ["alternating_map"]], ["add", "theorem", "map_add", ["alternating_map"]], ["add", "theorem", "map_add_swap", ["alternating_map"]], ["add", "theorem", "map_congr_perm", ["alternating_map"]], ["add", "theorem", "map_eq_zero_of_eq", ["alternating_map"]], ["add", "theorem", "map_perm", ["alternating_map"]], ["add", "theorem", "map_smul", ["alternating_map"]], ["add", "theorem", "map_sub", ["alternating_map"]], ["add", "theorem", "map_swap", ["alternating_map"]], ["add", "theorem", "map_swap_add", ["alternating_map"]], ["add", "theorem", "map_update_self", ["alternating_map"]], ["add", "theorem", "map_update_update", ["alternating_map"]], ["add", "theorem", "neg_apply", ["alternating_map"]], ["add", "theorem", "smul_apply", ["alternating_map"]], ["add", "theorem", "to_fun_eq_coe", ["alternating_map"]], ["add", "theorem", "to_multilinear_map_eq_coe", ["alternating_map"]], ["add", "theorem", "zero_apply", ["alternating_map"]], ["add", "structure", "alternating_map", []]]}]}, {"timestamp": 1606820346, "sha": "ca3351f6", "message": "feat(rat/{basic,floor}) add floor lemmas (#5148)", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "exists_eq_mul_div_num_and_eq_mul_div_denom", ["rat"]]]}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": [["add", "theorem", "mod_nat_eq_sub_mul_floor_rat_div", ["int"]], ["add", "theorem", "coprime_sub_mul_floor_rat_div_of_coprime", ["nat"]], ["add", "theorem", "floor_int_div_nat_eq_div", ["rat"]], ["add", "theorem", "fract_inv_num_lt_num_of_pos", ["rat"]], ["add", "theorem", "num_lt_succ_floor_mul_denom", ["rat"]]]}]}, {"timestamp": 1606812582, "sha": "2b074bea", "message": "feat(algebra/lie/basic): Define lattice structure for `lie_submodule`s (#5146)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "Inf_coe", ["lie_submodule"]], ["add", "theorem", "Inf_coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "Inf_glb", ["lie_submodule"]], ["add", "theorem", "add_eq_sup", ["lie_submodule"]], ["add", "theorem", "bot_coe", ["lie_submodule"]], ["add", "theorem", "coe_injective", ["lie_submodule"]], ["add", "theorem", "coe_to_submodule", ["lie_submodule"]], ["add", "theorem", "ext", ["lie_submodule"]], ["add", "theorem", "le_def", ["lie_submodule"]], ["add", "theorem", "mem_bot", ["lie_submodule"]], ["add", "theorem", "mem_carrier", ["lie_submodule"]], ["add", "theorem", "mem_top", ["lie_submodule"]], ["add", "theorem", "top_coe", ["lie_submodule"]], ["mod", "structure", "lie_submodule", []]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "mem_carrier", ["submodule"]]]}]}, {"timestamp": 1606801564, "sha": "a8831524", "message": "doc(data/mv_polynomial/basic): Fix documentation of mv_polynomial.monomial (#5160)\nThe documenting comment for this function was obviously lifted from the single variable polynomial version, and did not make sense.\nI'm not sure if this is the right comment, but it is at least better to what it was before.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1606785608, "sha": "b846aa52", "message": "chore(scripts): update nolints.txt (#5158)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606759989, "sha": "c3f4d1b8", "message": "refactor(combinatorics/simple_graph): move simple graph files to their own folder (#5154)\nMove the files into one folder with the goal of integrating material from the branch [simple_graphs2](https://github.com/leanprover-community/mathlib/tree/simple_graphs2)", "changes": [{"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "src/combinatorics/adj_matrix.lean", "newPath": "src/combinatorics/simple_graph/adj_matrix.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph.lean", "newPath": "src/combinatorics/simple_graph/basic.lean", "changes": []}]}, {"timestamp": 1606737896, "sha": "e3a699ed", "message": "feat(linear_algebra/determinant): Show that the determinant is a multilinear map (#5142)", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "def", "det_row_multilinear", ["matrix"]]]}]}, {"timestamp": 1606733556, "sha": "9f955fe5", "message": "feat(ring_theory/integral_closure): Cleanup interface for ring_hom.is_integral (#5144)", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["del", "theorem", "is_integral_of_is_integral_mul_unit'", []], ["del", "theorem", "is_integral_of_surjective'", []], ["del", "theorem", "is_integral_quotient_of_is_integral'", []], ["del", "theorem", "is_integral_tower_bot_of_is_integral'", []], ["add", "theorem", "is_integral_add", ["ring_hom"]], ["add", "theorem", "is_integral_map", ["ring_hom"]], ["add", "theorem", "is_integral_mul", ["ring_hom"]], ["add", "theorem", "is_integral_neg", ["ring_hom"]], ["add", "theorem", "is_integral_of_is_integral_mul_unit", ["ring_hom"]], ["add", "theorem", "is_integral_of_mem_closure", ["ring_hom"]], ["add", "theorem", "is_integral_of_surjective", ["ring_hom"]], ["add", "theorem", "is_integral_one", ["ring_hom"]], ["add", "theorem", "is_integral_quotient_of_is_integral", ["ring_hom"]], ["add", "theorem", "is_integral_sub", ["ring_hom"]], ["add", "theorem", "is_integral_tower_bot_of_is_integral", ["ring_hom"]], ["mod", "theorem", "is_integral_trans", ["ring_hom"]], ["add", "theorem", "is_integral_zero", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "theorem", "is_integral_elem_localization_at_leading_coeff'", []], ["add", "theorem", "is_integral_elem_localization_at_leading_coeff", ["ring_hom"]]]}]}, {"timestamp": 1606617181, "sha": "1f1ba587", "message": "feat(category_theory/limits): reflexive coequalizers (#5123)\nAdds reflexive coequalizers. These are useful for #5118 as well as for some monadicity theorems and other results.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/reflexive.lean", "changes": [["add", "theorem", "mk'", ["category_theory", "is_coreflexive_pair"]], ["add", "theorem", "swap", ["category_theory", "is_coreflexive_pair"]], ["add", "theorem", "is_reflexive_pair", ["category_theory", "is_kernel_pair"]], ["add", "theorem", "mk'", ["category_theory", "is_reflexive_pair"]], ["add", "theorem", "swap", ["category_theory", "is_reflexive_pair"]], ["add", "theorem", "left_comp_retraction", ["category_theory"]], ["add", "theorem", "has_coequalizer_of_common_section", ["category_theory", "limits"]], ["add", "theorem", "has_equalizer_of_common_retraction", ["category_theory", "limits"]], ["add", "theorem", "right_comp_retraction", ["category_theory"]], ["add", "theorem", "section_comp_left", ["category_theory"]], ["add", "theorem", "section_comp_right", ["category_theory"]]]}]}, {"timestamp": 1606612756, "sha": "5866812c", "message": "chore(scripts): update nolints.txt (#5143)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606598204, "sha": "fe7b407f", "message": "feat(tactic/explode): display exploded proofs as widgets (#4718)\n#4094. This is a more advanced version of the expandable `#explode` diagram implemented in the [Mathematica-Lean Link](http://robertylewis.com/leanmm/lean_mm.pdf). The widget adds features such as jumping to definitions and exploding constants occurring in a proof term subsequently. Note that right now the [\\](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details) tag simply hides the information. \"Exploding on request\" requires a bit more refactoring on `#explode` itself and is still on the way. \nExample usage:`#explode_widget iff_true_intro`. \n![explode_widget](https://user-images.githubusercontent.com/22624072/96630999-7cb62780-1361-11eb-977d-3eb34039ab41.png)", "changes": [{"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/explode_widget.lean", "changes": []}]}, {"timestamp": 1606592303, "sha": "ec822277", "message": "chore(group_theory/perm/sign): Add swap_mul_involutive (#5141)\nThis is just a bundled version of swap_mul_self_mul", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "swap_mul_involutive", ["equiv", "perm"]]]}]}, {"timestamp": 1606585338, "sha": "916bf74a", "message": "feat(category_theory/limits): images, equalizers and pullbacks imply functorial images (#5140)", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}]}, {"timestamp": 1606585336, "sha": "b1d8b897", "message": "chore(algebra/char_p): refactor char_p (#5132)", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p/basic.lean", "changes": [["mod", "theorem", "add_pow_char", []], ["mod", "theorem", "add_pow_char_of_commute", []], ["mod", "theorem", "add_pow_char_pow", []], ["mod", "theorem", "add_pow_char_pow_of_commute", []], ["mod", "theorem", "cast_card_eq_zero", ["char_p"]], ["add", "theorem", "congr", ["char_p"]], ["add", "theorem", "dvd", ["ring_char"]], ["mod", "theorem", "eq", ["ring_char"]], ["add", "theorem", "eq_iff", ["ring_char"]], ["add", "theorem", "of_eq", ["ring_char"]], ["mod", "theorem", "spec", ["ring_char"]]]}, {"oldPath": null, "newPath": "src/algebra/char_p/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/char_p/pi.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/char_p/quotient.lean", "changes": [["add", "theorem", "quotient", ["char_p"]]]}, {"oldPath": null, "newPath": "src/algebra/char_p/subring.lean", "changes": []}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": []}, {"oldPath": "src/data/matrix/char_p.lean", "newPath": "src/data/matrix/char_p.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1606580804, "sha": "137163a8", "message": "feat(analysis/normed_space/dual): Fréchet-Riesz representation for the dual of a Hilbert space (#4379)\nThis PR defines `to_dual` which maps an element `x` of an inner product space to `λ y, ⟪x, y⟫`. We also give the Fréchet-Riesz representation, which states that every element of the dual of a Hilbert space `E` has the form `λ u, ⟪x, u⟫` for some `x : E`.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "def", "of_isometry", ["continuous_linear_equiv"]], ["add", "theorem", "norm_apply_of_isometry", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["add", "def", "to_dual", ["inner_product_space", "isometric"]], ["add", "theorem", "ker_to_dual_map", ["inner_product_space"]], ["add", "theorem", "norm_to_dual'_apply", ["inner_product_space"]], ["add", "theorem", "norm_to_dual_apply", ["inner_product_space"]], ["add", "theorem", "norm_to_dual_map_apply", ["inner_product_space"]], ["add", "theorem", "norm_to_dual_symm_apply", ["inner_product_space"]], ["add", "theorem", "range_to_dual_map", ["inner_product_space"]], ["add", "def", "to_dual'", ["inner_product_space"]], ["add", "theorem", "to_dual'_apply", ["inner_product_space"]], ["add", "theorem", "to_dual'_isometry", ["inner_product_space"]], ["add", "theorem", "to_dual'_surjective", ["inner_product_space"]], ["add", "def", "to_dual", ["inner_product_space"]], ["add", "theorem", "to_dual_apply", ["inner_product_space"]], ["add", "theorem", "to_dual_eq_iff_eq'", ["inner_product_space"]], ["add", "theorem", "to_dual_eq_iff_eq", ["inner_product_space"]], ["add", "def", "to_dual_map", ["inner_product_space"]], ["add", "theorem", "to_dual_map_apply", ["inner_product_space"]], ["add", "theorem", "to_dual_map_eq_iff_eq", ["inner_product_space"]], ["add", "theorem", "to_dual_map_injective", ["inner_product_space"]], ["add", "theorem", "to_dual_map_isometry", ["inner_product_space"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["mod", "def", "sesq_form_of_inner", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "isometry_of_norm", ["add_monoid_hom"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "ring_equiv_apply", ["is_R_or_C"]]]}]}, {"timestamp": 1606526801, "sha": "801dea94", "message": "chore(scripts): update nolints.txt (#5139)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606518595, "sha": "ba43f6f1", "message": "doc(field_theory/finite/basic): update doc-strings (#5134)\nThe documentation mentions `finite_field.is_cyclic` that does not exist (probably replaced by `subgroup_units_cyclic` in `ring_theory.integral_domain`).", "changes": [{"oldPath": "src/field_theory/finite/basic.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": []}]}, {"timestamp": 1606518593, "sha": "b6f23099", "message": "chore({ring,group}_theory/free_*): Add of_injective (#5131)\nThis adds:\n* `free_abelian_group.of_injective`\n* `free_ring.of_injective`\n* `free_comm_ring.of_injective`\n* `free_algebra.of_injective`\nfollowing up from dcbec39a5bf9af5c6e065eea185f8776ac537d3b", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["add", "theorem", "ι_injective", ["free_algebra"]]]}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "of_injective", ["free_abelian_group"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["add", "theorem", "of_injective", ["free_comm_ring"]]]}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": [["add", "theorem", "of_injective", ["free_ring"]]]}]}, {"timestamp": 1606512364, "sha": "4a153ed9", "message": "feat(ring_theory/polynomials/cyclotomic): add lemmas about cyclotomic polynomials (#5122)\nTwo lemmas about cyclotomic polynomials:\n`cyclotomic_of_prime` is the explicit formula for `cyclotomic p R` when `p` is prime;\n`cyclotomic_coeff_zero` shows that the constant term of `cyclotomic n R` is `1` if `2 ≤ n`. I will use this to prove that there are infinitely many prime congruent to `1` modulo `n`, for all `n`.", "changes": [{"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["add", "theorem", "coeff_zero_prod", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "cyclotomic_coeff_zero", ["polynomial"]], ["add", "theorem", "cyclotomic_eq_geom_series", ["polynomial"]], ["add", "theorem", "eq_cyclotomic_iff", ["polynomial"]]]}]}, {"timestamp": 1606512362, "sha": "14f20960", "message": "feat(ring_theory/jacobson): generalized nullstellensatz - polynomials over a Jacobson ring are Jacobson (#4962)\nThe main statements are `is_jacobson_polynomial_iff_is_jacobson ` and `is_jacobson_mv_polynomial`, saying that `polynomial` and `mv_polynomial` both preserve jacobson property of rings. \nThis second statement is in some sense a general form of the classical nullstellensatz, since in a Jacobson ring the intersection of maximal ideals containing an ideal will be exactly the radical of that ideal (and so I(V(I)) = I.radical).", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["add", "theorem", "is_jacobson_mv_polynomial_fin", ["ideal"]], ["add", "theorem", "is_jacobson_of_is_integral'", ["ideal"]], ["add", "theorem", "is_jacobson_polynomial_iff_is_jacobson", ["ideal"]], ["add", "theorem", "jacobson_bot_of_integral_localization", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["add", "theorem", "jacobson_bot_polynomial_le_Inf_map_maximal", ["ideal"]], ["add", "theorem", "jacobson_bot_polynomial_of_jacobson_bot", ["ideal"]], ["add", "theorem", "map_jacobson_of_bijective", ["ideal"]], ["add", "theorem", "mem_jacobson_bot", ["ideal"]]]}]}, {"timestamp": 1606501826, "sha": "8d3e93fb", "message": "chore(category_theory/limits): golf a proof (#5133)", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}]}, {"timestamp": 1606501824, "sha": "fb704197", "message": "feat(algebra/group/basic): simplify composed assoc ops (#5031)\nNew lemmas:\n`comp_assoc_left`\n`comp_assoc_right`\n`comp_mul_left`\n`comp_add_left`\n`comp_mul_right`\n`comp_add_right`", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "comp_assoc_left", []], ["add", "theorem", "comp_assoc_right", []], ["add", "theorem", "comp_mul_left", []], ["add", "theorem", "comp_mul_right", []]]}]}, {"timestamp": 1606501822, "sha": "73a2fd3a", "message": "feat(ring_theory/witt_vector/init_tail): adding disjoint witt vectors (#4835)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/init_tail.lean", "changes": [["add", "theorem", "coeff_add_of_disjoint", ["witt_vector"]], ["add", "theorem", "coeff_select", ["witt_vector"]], ["add", "def", "init", ["witt_vector"]], ["add", "theorem", "init_add", ["witt_vector"]], ["add", "theorem", "init_add_tail", ["witt_vector"]], ["add", "theorem", "init_init", ["witt_vector"]], ["add", "theorem", "init_is_poly", ["witt_vector"]], ["add", "theorem", "init_mul", ["witt_vector"]], ["add", "theorem", "init_neg", ["witt_vector"]], ["add", "theorem", "init_sub", ["witt_vector"]], ["add", "def", "select", ["witt_vector"]], ["add", "theorem", "select_add_select_not", ["witt_vector"]], ["add", "theorem", "select_is_poly", ["witt_vector"]], ["add", "def", "select_poly", ["witt_vector"]], ["add", "def", "tail", ["witt_vector"]]]}]}, {"timestamp": 1606491332, "sha": "396487f9", "message": "feat(topology/separation): Adds t2_space instances for disjoint unions (sums and sigma types). (#5113)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_inl_range_inr", ["set"]], ["add", "theorem", "preimage_inr_range_inl", ["set"]], ["add", "theorem", "range_inl_inter_range_inr", ["set"]], ["mod", "theorem", "range_inl_union_range_inr", ["set"]], ["add", "theorem", "range_inr_inter_range_inl", ["set"]], ["add", "theorem", "range_inr_union_range_inl", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "is_open_range_inl", []], ["add", "theorem", "is_open_range_inr", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "separated_by_continuous", []], ["add", "theorem", "separated_by_open_embedding", []]]}]}, {"timestamp": 1606487159, "sha": "876481ef", "message": "feat(field_theory/separable): add separable_of_X_pow_sub_C and squarefree_of_X_pow_sub_C (#5052)\nI've added that `X ^ n - a` is separable, and so `squarefree`.", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "separable_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "squarefree_X_pow_sub_C", ["polynomial"]]]}]}, {"timestamp": 1606487157, "sha": "c82b7082", "message": "feat(category_theory/sites): the canonical topology on a category (#4928)\nExplicitly construct the finest topology for which the given presheaves are sheaves, and specialise to construct the canonical topology. \nAlso one or two tiny changes which should have been there before", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/canonical.lean", "changes": [["add", "def", "canonical_topology", ["category_theory", "sheaf"]], ["add", "def", "finest_topology", ["category_theory", "sheaf"]], ["add", "def", "finest_topology_single", ["category_theory", "sheaf"]], ["add", "theorem", "is_sheaf_for_bind", ["category_theory", "sheaf"]], ["add", "theorem", "is_sheaf_for_trans", ["category_theory", "sheaf"]], ["add", "theorem", "is_sheaf_of_representable", ["category_theory", "sheaf"]], ["add", "theorem", "is_sheaf_yoneda_obj", ["category_theory", "sheaf"]], ["add", "theorem", "le_finest_topology", ["category_theory", "sheaf"]], ["add", "theorem", "sheaf_for_finest_topology", ["category_theory", "sheaf"]], ["add", "theorem", "is_sheaf_of_representable", ["category_theory", "sheaf", "subcanonical"]], ["add", "theorem", "of_yoneda_is_sheaf", ["category_theory", "sheaf", "subcanonical"]], ["add", "def", "subcanonical", ["category_theory", "sheaf"]]]}, {"oldPath": "src/category_theory/sites/sheaf.lean", "newPath": "src/category_theory/sites/sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": []}]}, {"timestamp": 1606478339, "sha": "0ac414af", "message": "feat(data/fin): Add pred_{le,lt}_pred_iff (#5121)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "pred_le_pred_iff", ["fin"]], ["add", "theorem", "pred_lt_pred_iff", ["fin"]]]}]}, {"timestamp": 1606478337, "sha": "8acd296e", "message": "chore(topology/path_connected): move `proj_Icc` to a separate file (#5120)\nAlso use `min` and `max` in the definition to make, e.g., the proof of the continuity trivial.", "changes": [{"oldPath": null, "newPath": "src/data/set/intervals/proj_Icc.lean", "changes": [["add", "def", "Icc_extend", ["set"]], ["add", "theorem", "Icc_extend_coe", ["set"]], ["add", "theorem", "Icc_extend_left", ["set"]], ["add", "theorem", "Icc_extend_monotone", ["set"]], ["add", "theorem", "Icc_extend_of_le_left", ["set"]], ["add", "theorem", "Icc_extend_of_mem", ["set"]], ["add", "theorem", "Icc_extend_of_right_le", ["set"]], ["add", "theorem", "Icc_extend_range", ["set"]], ["add", "theorem", "Icc_extend_right", ["set"]], ["add", "theorem", "monotone_proj_Icc", ["set"]], ["add", "def", "proj_Icc", ["set"]], ["add", "theorem", "proj_Icc_coe", ["set"]], ["add", "theorem", "proj_Icc_left", ["set"]], ["add", "theorem", "proj_Icc_of_le_left", ["set"]], ["add", "theorem", "proj_Icc_of_mem", ["set"]], ["add", "theorem", "proj_Icc_of_right_le", ["set"]], ["add", "theorem", "proj_Icc_right", ["set"]], ["add", "theorem", "proj_Icc_surj_on", ["set"]], ["add", "theorem", "proj_Icc_surjective", ["set"]], ["add", "theorem", "range_proj_Icc", ["set"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/ordered/proj_Icc.lean", "changes": [["add", "theorem", "Icc_extend", ["continuous"]], ["add", "theorem", "continuous_Icc_extend_iff", []], ["add", "theorem", "continuous_proj_Icc", []], ["add", "theorem", "quotient_map_proj_Icc", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "topological_space_eq_iff", []]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "quotient_map_iff", []]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["del", "def", "I_extend", []], ["del", "theorem", "I_extend_extends", []], ["del", "theorem", "I_extend_one", []], ["del", "theorem", "I_extend_range", []], ["del", "theorem", "I_extend_zero", []], ["del", "theorem", "I_extend", ["continuous"]], ["del", "theorem", "continuous_proj_I", []], ["add", "theorem", "coe_mk", ["path"]], ["mod", "def", "extend", ["path"]], ["del", "theorem", "extend_le_zero", ["path"]], ["add", "theorem", "extend_of_le_zero", ["path"]], ["add", "theorem", "extend_of_one_le", ["path"]], ["del", "theorem", "extend_one_le", ["path"]], ["del", "def", "proj_I", []], ["del", "theorem", "proj_I_I", []], ["del", "theorem", "proj_I_one", []], ["del", "theorem", "proj_I_zero", []], ["del", "theorem", "range_proj_I", []], ["del", "theorem", "surjective_proj_I", []]]}]}, {"timestamp": 1606468597, "sha": "238c58c3", "message": "chore(category_theory/limits): golf a proof (#5130)", "changes": [{"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["mod", "theorem", "w", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}]}, {"timestamp": 1606468595, "sha": "ff2aeae9", "message": "feat(logic/relation): trans_gen closure (#5129)\nMechanical conversion of `refl_trans_gen` lemmas for just `trans_gen`.", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "trans_gen_closed", ["relation", "trans_gen"]], ["add", "theorem", "trans_gen_eq_self", ["relation", "trans_gen"]], ["add", "theorem", "trans_gen_idem", ["relation", "trans_gen"]], ["add", "theorem", "trans_gen_lift'", ["relation", "trans_gen"]], ["add", "theorem", "trans_gen_lift", ["relation", "trans_gen"]], ["add", "theorem", "transitive_trans_gen", ["relation", "trans_gen"]]]}]}, {"timestamp": 1606468593, "sha": "af7ba87a", "message": "feat(data/polynomial/eval): eval₂ f x (p * X) = eval₂ f x p * x (#5110)\nAlso generalize `polynomial.eval₂_mul_noncomm` and\n`polynomial.eval₂_list_prod_noncomm`.\nThis PR uses `add_monoid_algebra.lift_nc` to golf some proofs about\n`eval₂`. I'm not ready to replace the definition of `eval₂` yet (e.g.,\nbecause it breaks dot notation everywhere), so I added\na lemma `eval₂_eq_lift_nc` instead.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "range_single_subset", ["finsupp"]], ["add", "theorem", "single_apply_mem", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "coeff_X_of_ne_one", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval₂_X_mul", ["polynomial"]], ["add", "theorem", "eval₂_eq_lift_nc", ["polynomial"]], ["mod", "theorem", "eval₂_list_prod_noncomm", ["polynomial"]], ["add", "theorem", "eval₂_mul_C'", ["polynomial"]], ["add", "theorem", "eval₂_mul_X", ["polynomial"]], ["mod", "theorem", "eval₂_mul_noncomm", ["polynomial"]], ["mod", "def", "eval₂_ring_hom'", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1606468591, "sha": "8e09111f", "message": "chore(order/basic): add `strict_mono_??cr_on.dual` and `dual_right` (#5107)\nWe can use these to avoid `@strict_mono_??cr_on (order_dual α) (order_dual β)`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "injective_of_lt_imp_ne", []]]}]}, {"timestamp": 1606468589, "sha": "a106102a", "message": "chore(category_theory/iso): golf and name consistency (#5096)\nMinor changes: makes the names consistent and simplifies proofs", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "theorem", "comp_inv_eq", ["category_theory", "is_iso"]], ["del", "theorem", "comp_is_iso_eq", ["category_theory", "is_iso"]], ["add", "theorem", "eq_comp_inv", ["category_theory", "is_iso"]]]}]}, {"timestamp": 1606468587, "sha": "d0789503", "message": "feat(linear_algebra/bilinear_form): equivalence with matrices, given a basis (#5095)\nThis PR defines the equivalence between bilinear forms on an arbitrary module and matrices, given a basis of that module. It updates the existing equivalence between bilinear forms on `n → R` so that the overall structure of the file matches that of `linear_algebra.matrix`, i.e. there are two pairs of equivs, one for `n → R` and one for any `M` with a basis.\nChanges:\n - `bilin_form_equiv_matrix`, `bilin_form.to_matrix` and `matrix.to_bilin_form` have been consolidated as linear equivs `bilin_form.to_matrix'` and `matrix.to_bilin'`. Other declarations have been renamed accordingly.\n - `quadratic_form.to_matrix` and `matrix.to_quadratic_form` are renamed by analogy to `quadratic_form.to_matrix'` and `matrix.to_quadratic_form'`\n - replaced some `classical.decidable_eq` in lemma statements with instance parameters, because otherwise we have to use `congr` to apply these lemmas when a `decidable_eq` instance is available\nAdditions:\n - `bilin_form.to_matrix` and `matrix.to_bilin`: given a basis, the equivalences between bilinear forms on any module and matrices\n - lemmas from `to_matrix'` and `to_bilin'` have been ported to `to_matrix` and `to_bilin`\n - `bilin_form.congr`, a dependency of `bilin_form.to_matrix`, states that `bilin_form R M` and `bilin_form R M'` are linearly equivalent if `M` and `M'` are\n - assorted lemmas involving `std_basis`\nDeletions:\n - `bilin_form.to_matrix_smul`: use `linear_equiv.map_smul` instead", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "is_basis_fun", ["pi"]], ["add", "theorem", "is_basis_fun_repr", ["pi"]], ["mod", "theorem", "is_basis_fun₀", ["pi"]], ["mod", "theorem", "is_basis_std_basis", ["pi"]], ["mod", "theorem", "linear_independent_std_basis", ["pi"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "comp_comp", ["bilin_form"]], ["add", "theorem", "comp_congr", ["bilin_form"]], ["add", "def", "congr", ["bilin_form"]], ["add", "theorem", "congr_apply", ["bilin_form"]], ["add", "theorem", "congr_comp", ["bilin_form"]], ["add", "theorem", "congr_symm", ["bilin_form"]], ["add", "theorem", "ext_basis", ["bilin_form"]], ["add", "theorem", "mul_to_matrix'", ["bilin_form"]], ["add", "theorem", "mul_to_matrix'_mul", ["bilin_form"]], ["mod", "theorem", "mul_to_matrix", ["bilin_form"]], ["mod", "theorem", "mul_to_matrix_mul", ["bilin_form"]], ["add", "theorem", "sum_repr_mul_repr_mul", ["bilin_form"]], ["add", "def", "to_matrix'", ["bilin_form"]], ["add", "theorem", "to_matrix'_apply", ["bilin_form"]], ["add", "theorem", "to_matrix'_comp", ["bilin_form"]], ["add", "theorem", "to_matrix'_comp_left", ["bilin_form"]], ["add", "theorem", "to_matrix'_comp_right", ["bilin_form"]], ["add", "theorem", "to_matrix'_mul", ["bilin_form"]], ["add", "theorem", "to_matrix'_symm", ["bilin_form"]], ["add", "theorem", "to_matrix'_to_bilin'", ["bilin_form"]], ["del", "def", "to_matrix", ["bilin_form"]], ["mod", "theorem", "to_matrix_apply", ["bilin_form"]], ["add", "def", "to_matrix_aux", ["bilin_form"]], ["add", "theorem", "to_matrix_aux_std_basis", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp_left", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp_right", ["bilin_form"]], ["add", "theorem", "to_matrix_is_basis_fun", ["bilin_form"]], ["mod", "theorem", "to_matrix_mul", ["bilin_form"]], ["del", "theorem", "to_matrix_smul", ["bilin_form"]], ["add", "theorem", "to_matrix_symm", ["bilin_form"]], ["add", "theorem", "to_matrix_to_bilin", ["bilin_form"]], ["del", "def", "to_matrixₗ", ["bilin_form"]], ["del", "def", "bilin_form_equiv_matrix", []], ["add", "theorem", "to_matrix_aux_eq", ["bilinear_form"]], ["add", "theorem", "is_adjoint_pair_to_bilin'", []], ["add", "theorem", "is_adjoint_pair_to_bilin", []], ["add", "theorem", "equiv_fun_symm_std_basis", ["is_basis"]], ["add", "def", "to_bilin'", ["matrix"]], ["add", "theorem", "to_bilin'_apply", ["matrix"]], ["add", "def", "to_bilin'_aux", ["matrix"]], ["add", "theorem", "to_bilin'_aux_eq", ["matrix"]], ["add", "theorem", "to_bilin'_aux_std_basis", ["matrix"]], ["add", "theorem", "to_bilin'_comp", ["matrix"]], ["add", "theorem", "to_bilin'_std_basis", ["matrix"]], ["add", "theorem", "to_bilin'_symm", ["matrix"]], ["add", "theorem", "to_bilin'_to_matrix'", ["matrix"]], ["add", "theorem", "to_bilin_apply", ["matrix"]], ["add", "theorem", "to_bilin_comp", ["matrix"]], ["del", "def", "to_bilin_form", ["matrix"]], ["del", "theorem", "to_bilin_form_apply", ["matrix"]], ["del", "theorem", "to_bilin_form_comp", ["matrix"]], ["del", "def", "to_bilin_formₗ", ["matrix"]], ["add", "theorem", "to_bilin_is_basis_fun", ["matrix"]], ["add", "theorem", "to_bilin_symm", ["matrix"]], ["add", "theorem", "to_bilin_to_matrix", ["matrix"]], ["del", "theorem", "matrix_is_adjoint_pair_bilin_form", []], ["add", "theorem", "to_bilin'_aux_to_matrix_aux", []], ["del", "theorem", "to_bilin_form_to_matrix", []], ["del", "theorem", "to_matrix_to_bilin_form", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "def", "to_quadratic_form'", ["matrix"]], ["del", "def", "to_quadratic_form", ["matrix"]], ["mod", "def", "discr", ["quadratic_form"]], ["add", "def", "to_matrix'", ["quadratic_form"]], ["add", "theorem", "to_matrix'_comp", ["quadratic_form"]], ["add", "theorem", "to_matrix'_smul", ["quadratic_form"]], ["del", "def", "to_matrix", ["quadratic_form"]], ["del", "theorem", "to_matrix_comp", ["quadratic_form"]], ["del", "theorem", "to_matrix_smul", ["quadratic_form"]]]}]}, {"timestamp": 1606468584, "sha": "c06c6169", "message": "feat(number_theory/arithmetic_function): Moebius inversion (#5047)\nChanges the way that zeta works with coercion\nProves Möbius inversion for functions to a general `comm_ring`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "sum_int_cast", ["finset"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["mod", "theorem", "coe_coe", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_moebius_mul_coe_zeta", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_mul_zeta_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_zeta_mul_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_zeta_mul_coe_moebius", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_zeta_mul_moebius", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_zeta_unit", ["nat", "arithmetic_function"]], ["mod", "theorem", "int_coe_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "int_coe_int", ["nat", "arithmetic_function"]], ["add", "theorem", "inv_zeta_unit", ["nat", "arithmetic_function"]], ["mod", "theorem", "is_multiplicative_zeta", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_mul_coe_zeta", ["nat", "arithmetic_function"]], ["del", "theorem", "moebius_mul_zeta", ["nat", "arithmetic_function"]], ["mod", "theorem", "mul_zeta_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "nat_coe_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "nat_coe_nat", ["nat", "arithmetic_function"]], ["mod", "theorem", "pmul_zeta", ["nat", "arithmetic_function"]], ["add", "theorem", "sum_eq_iff_sum_moebius_eq", ["nat", "arithmetic_function"]], ["mod", "def", "zeta", ["nat", "arithmetic_function"]], ["mod", "theorem", "zeta_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "zeta_apply_ne", ["nat", "arithmetic_function"]], ["mod", "theorem", "zeta_mul_apply", ["nat", "arithmetic_function"]], ["del", "theorem", "zeta_mul_moebius", ["nat", "arithmetic_function"]], ["mod", "theorem", "zeta_pmul", ["nat", "arithmetic_function"]], ["add", "def", "zeta_unit", ["nat", "arithmetic_function"]]]}]}, {"timestamp": 1606468581, "sha": "2bda184a", "message": "feat(field_theory): Prove the Galois correspondence (#4786)\nThe proof leverages existing results from field_theory/fixed.lean and field_theory/primitive_element.lean.\nWe define Galois as normal + separable. Proving the various equivalent characterizations of Galois extensions is yet to be done.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_of_inclusion_surjective", ["set"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "bot_equiv_def", ["intermediate_field"]], ["add", "def", "equiv_of_eq", ["intermediate_field", "subalgebra"]], ["add", "theorem", "top_equiv_def", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["add", "theorem", "to_alg_hom_bijective", ["fixed_points"]], ["add", "def", "to_alg_hom_equiv", ["fixed_points"]]]}, {"oldPath": null, "newPath": "src/field_theory/galois.lean", "changes": [["add", "theorem", "findim_fixed_field_eq_card", ["intermediate_field"]], ["add", "def", "fixed_field", ["intermediate_field"]], ["add", "def", "fixing_subgroup", ["intermediate_field"]], ["add", "def", "fixing_subgroup_equiv", ["intermediate_field"]], ["add", "theorem", "fixing_subgroup_fixed_field", ["intermediate_field"]], ["add", "theorem", "le_iff_le", ["intermediate_field"]], ["add", "theorem", "card_aut_eq_findim", ["is_galois"]], ["add", "theorem", "card_fixing_subgroup_eq_findim", ["is_galois"]], ["add", "theorem", "fixed_field_fixing_subgroup", ["is_galois"]], ["add", "def", "galois_coinsertion_intermediate_field_subgroup", ["is_galois"]], ["add", "def", "galois_insertion_intermediate_field_subgroup", ["is_galois"]], ["add", "theorem", "integral", ["is_galois"]], ["add", "theorem", "card_aut_eq_findim", ["is_galois", "intermediate_field", "adjoin_simple"]], ["add", "def", "intermediate_field_equiv_subgroup", ["is_galois"]], ["add", "theorem", "is_separable_splitting_field", ["is_galois"]], ["add", "theorem", "normal", ["is_galois"]], ["add", "theorem", "separable", ["is_galois"]], ["add", "def", "is_galois", []]]}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "tower_top_of_normal", ["normal"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1606459149, "sha": "2f939e93", "message": "chore(data/equiv/basic): redefine `set.bij_on.equiv` (#5128)\nNow `set.bij_on.equiv` works for any `h : set.bij_on f s t`. The old\nbehaviour can be achieved using `(equiv.set_univ _).symm.trans _`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "bijective", ["set", "bij_on"]]]}]}, {"timestamp": 1606459147, "sha": "4715d992", "message": "chore(data/set/function): add 3 trivial lemmas (#5127)", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "eq_iff", ["set", "inj_on"]], ["add", "theorem", "comp_strict_mono_incr_on", ["strict_mono"]], ["add", "theorem", "comp", ["strict_mono_incr_on"]]]}]}, {"timestamp": 1606459144, "sha": "c1edbdda", "message": "chore(data/complex/exponential): golf 2 proofs (#5126)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "abs_le_one_iff_mul_self_le_one", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}]}, {"timestamp": 1606459142, "sha": "cb9e5cf9", "message": "doc(data/equiv/basic): improve docstring of `equiv.sum_equiv_sigma_bool` (#5119)\nAlso slightly improve defeq of the `to_fun` field by using `sum.elim` instead of a custom `match`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "sum_equiv_sigma_bool", ["equiv"]]]}]}, {"timestamp": 1606459140, "sha": "d3cc9935", "message": "chore(data/pprod): Add pprod.mk.eta (#5114)\nThis is exactly the same as prod.mk.eta", "changes": [{"oldPath": null, "newPath": "src/data/pprod.lean", "changes": [["add", "theorem", "eta", ["pprod", "mk"]]]}]}, {"timestamp": 1606450349, "sha": "2c5d4a3c", "message": "chore(order/rel_iso): add a few lemmas (#5106)\n* add lemmas `order_iso.apply_eq_iff_eq` etc;\n* define `order_iso.symm`.", "changes": [{"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "le_map_sup", ["order_embedding"]], ["add", "theorem", "map_inf_le", ["order_embedding"]], ["add", "theorem", "apply_eq_iff_eq", ["order_iso"]], ["add", "theorem", "apply_le_apply", ["order_iso"]], ["add", "theorem", "apply_lt_apply", ["order_iso"]], ["add", "theorem", "apply_symm_apply", ["order_iso"]], ["add", "theorem", "map_inf", ["order_iso"]], ["add", "theorem", "map_sup", ["order_iso"]], ["add", "theorem", "map_top", ["order_iso"]], ["add", "def", "symm", ["order_iso"]], ["add", "theorem", "symm_apply_apply", ["order_iso"]], ["del", "theorem", "le_map_sup", ["rel_embedding"]], ["del", "theorem", "map_inf_le", ["rel_embedding"]], ["del", "theorem", "map_inf", ["rel_iso"]], ["del", "theorem", "map_sup", ["rel_iso"]], ["del", "theorem", "map_top", ["rel_iso"]]]}]}, {"timestamp": 1606440064, "sha": "1a8089e9", "message": "chore(scripts): update nolints.txt (#5125)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606411144, "sha": "59717d68", "message": "chore(data/sum): Add trivial simp lemmas (#5112)", "changes": [{"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["add", "theorem", "comp_elim", ["sum"]], ["add", "theorem", "elim_comp_inl", ["sum"]], ["add", "theorem", "elim_comp_inl_inr", ["sum"]], ["add", "theorem", "elim_comp_inr", ["sum"]], ["add", "theorem", "elim_inl_inr", ["sum"]]]}]}, {"timestamp": 1606384796, "sha": "2d476e0e", "message": "chore(data/equiv/basic): Add comp_swap_eq_update (#5091)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "comp_swap_eq_update", ["equiv"]], ["add", "theorem", "swap_eq_update", ["equiv"]]]}]}, {"timestamp": 1606353533, "sha": "98ebe5a6", "message": "chore(scripts): update nolints.txt (#5117)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606320838, "sha": "6e301c75", "message": "chore(logic/function/basic): Add function.update_apply (#5093)\nThis makes it easier to eliminate `dite`s in simple situations when only `ite` is needed.", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "update_apply", ["function"]]]}]}, {"timestamp": 1606316990, "sha": "81207e09", "message": "feat(algebra/triv_sq_zero_ext): trivial square-zero extension (#5109)", "changes": [{"oldPath": null, "newPath": "src/algebra/triv_sq_zero_ext.lean", "changes": [["add", "theorem", "ext", ["triv_sq_zero_ext"]], ["add", "def", "fst", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_add", ["triv_sq_zero_ext"]], ["add", "def", "fst_hom", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_inl", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_inr", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_mul", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_neg", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_one", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_smul", ["triv_sq_zero_ext"]], ["add", "theorem", "fst_zero", ["triv_sq_zero_ext"]], ["add", "def", "inl", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_add", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_fst_add_inr_snd_eq", ["triv_sq_zero_ext"]], ["add", "def", "inl_hom", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_injective", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_mul", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_mul_inl", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_mul_inr", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_neg", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_one", ["triv_sq_zero_ext"]], ["add", "theorem", "inl_zero", ["triv_sq_zero_ext"]], ["add", "def", "inr", ["triv_sq_zero_ext"]], ["add", "theorem", "inr_add", ["triv_sq_zero_ext"]], ["add", "def", "inr_hom", ["triv_sq_zero_ext"]], ["add", "theorem", "inr_injective", ["triv_sq_zero_ext"]], ["add", "theorem", "inr_mul_inl", ["triv_sq_zero_ext"]], ["add", "theorem", "inr_mul_inr", ["triv_sq_zero_ext"]], ["add", "theorem", "inr_neg", ["triv_sq_zero_ext"]], ["add", "theorem", "inr_smul", ["triv_sq_zero_ext"]], ["add", "theorem", "inr_zero", ["triv_sq_zero_ext"]], ["add", "def", "snd", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_add", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_inl", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_inr", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_mul", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_neg", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_one", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_smul", ["triv_sq_zero_ext"]], ["add", "theorem", "snd_zero", ["triv_sq_zero_ext"]], ["add", "def", "triv_sq_zero_ext", []]]}]}, {"timestamp": 1606304361, "sha": "4265f2c9", "message": "chore(data/int/basic): Add int.units_mul_self (#5101)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "units_coe_mul_self", ["int"]], ["add", "theorem", "units_mul_self", ["int"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1606286880, "sha": "0324935c", "message": "chore(data/equiv/basic): Add trivial simp lemma (#5100)\nWith this in place, `⇑1 ∘ f` simplifies to `⇑f`", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "coe_one", ["equiv", "perm"]], ["mod", "theorem", "one_apply", ["equiv", "perm"]]]}]}, {"timestamp": 1606274278, "sha": "00200778", "message": "fix(algebra/ordered_group): remove workaround (#5103)\nThe problem mentioned in the TODO has been solved so the workaround is no longer needed.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "def", "mk'", ["ordered_comm_group"]]]}, {"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": []}]}, {"timestamp": 1606267731, "sha": "83f293e2", "message": "chore(scripts): update nolints.txt (#5105)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606247315, "sha": "7e66984c", "message": "fix(algebra/group_with_zero/power): remove duplicate lemmas (#5083)\n`pow_eq_zero` and `pow_eq_zero'` are syntactically equal, as are `pow_ne_zero` and `pow_ne_zero'`.", "changes": [{"oldPath": "src/algebra/group_with_zero/power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "pow_eq_zero'", []], ["del", "theorem", "pow_ne_zero'", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1606223922, "sha": "2ed48468", "message": "chore(linear_algebra/multilinear_map): Add boring coercion lemmas copied from ring_hom (#5099)", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "coe_inj", ["multilinear_map"]], ["add", "theorem", "coe_mk", ["multilinear_map"]], ["add", "theorem", "congr_arg", ["multilinear_map"]], ["add", "theorem", "congr_fun", ["multilinear_map"]], ["add", "theorem", "ext_iff", ["multilinear_map"]], ["add", "theorem", "to_fun_eq_coe", ["multilinear_map"]]]}]}, {"timestamp": 1606218120, "sha": "943b1294", "message": "feat(analysis/special_functions/trigonometric): sin, cos, sinh, and cosh are infinitely smooth (#5090)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "times_cont_diff_cos", ["complex"]], ["add", "theorem", "times_cont_diff_cosh", ["complex"]], ["add", "theorem", "times_cont_diff_sin", ["complex"]], ["add", "theorem", "times_cont_diff_sinh", ["complex"]], ["add", "theorem", "fderiv_ccos", []], ["add", "theorem", "fderiv_ccosh", []], ["add", "theorem", "fderiv_cos", []], ["add", "theorem", "fderiv_cosh", []], ["add", "theorem", "fderiv_csin", []], ["add", "theorem", "fderiv_csinh", []], ["add", "theorem", "fderiv_sin", []], ["add", "theorem", "fderiv_sinh", []], ["add", "theorem", "fderiv_within_ccos", []], ["add", "theorem", "fderiv_within_ccosh", []], ["add", "theorem", "fderiv_within_cos", []], ["add", "theorem", "fderiv_within_cosh", []], ["add", "theorem", "fderiv_within_csin", []], ["add", "theorem", "fderiv_within_csinh", []], ["add", "theorem", "fderiv_within_sin", []], ["add", "theorem", "fderiv_within_sinh", []], ["add", "theorem", "ccos", ["has_fderiv_at"]], ["add", "theorem", "ccosh", ["has_fderiv_at"]], ["add", "theorem", "cos", ["has_fderiv_at"]], ["add", "theorem", "cosh", ["has_fderiv_at"]], ["add", "theorem", "csin", ["has_fderiv_at"]], ["add", "theorem", "csinh", ["has_fderiv_at"]], ["add", "theorem", "sin", ["has_fderiv_at"]], ["add", "theorem", "sinh", ["has_fderiv_at"]], ["add", "theorem", "ccos", ["has_fderiv_within_at"]], ["add", "theorem", "ccosh", ["has_fderiv_within_at"]], ["add", "theorem", "cos", ["has_fderiv_within_at"]], ["add", "theorem", "cosh", ["has_fderiv_within_at"]], ["add", "theorem", "csin", ["has_fderiv_within_at"]], ["add", "theorem", "csinh", ["has_fderiv_within_at"]], ["add", "theorem", "sin", ["has_fderiv_within_at"]], ["add", "theorem", "sinh", ["has_fderiv_within_at"]], ["mod", "theorem", "ccos", ["measurable"]], ["mod", "theorem", "ccosh", ["measurable"]], ["mod", "theorem", "cos", ["measurable"]], ["mod", "theorem", "cosh", ["measurable"]], ["mod", "theorem", "csin", ["measurable"]], ["mod", "theorem", "csinh", ["measurable"]], ["mod", "theorem", "sin", ["measurable"]], ["mod", "theorem", "sinh", ["measurable"]], ["add", "theorem", "times_cont_diff_cos", ["real"]], ["add", "theorem", "times_cont_diff_cosh", ["real"]], ["add", "theorem", "times_cont_diff_sin", ["real"]], ["add", "theorem", "times_cont_diff_sinh", ["real"]], ["add", "theorem", "ccos", ["times_cont_diff"]], ["add", "theorem", "ccosh", ["times_cont_diff"]], ["add", "theorem", "cos", ["times_cont_diff"]], ["add", "theorem", "cosh", ["times_cont_diff"]], ["add", "theorem", "csin", ["times_cont_diff"]], ["add", "theorem", "csinh", ["times_cont_diff"]], ["add", "theorem", "sin", ["times_cont_diff"]], ["add", "theorem", "sinh", ["times_cont_diff"]], ["add", "theorem", "ccos", ["times_cont_diff_at"]], ["add", "theorem", "ccosh", ["times_cont_diff_at"]], ["add", "theorem", "cos", ["times_cont_diff_at"]], ["add", "theorem", "cosh", ["times_cont_diff_at"]], ["add", "theorem", "csin", ["times_cont_diff_at"]], ["add", "theorem", "csinh", ["times_cont_diff_at"]], ["add", "theorem", "sin", ["times_cont_diff_at"]], ["add", "theorem", "sinh", ["times_cont_diff_at"]], ["add", "theorem", "ccos", ["times_cont_diff_on"]], ["add", "theorem", "ccosh", ["times_cont_diff_on"]], ["add", "theorem", "cos", ["times_cont_diff_on"]], ["add", "theorem", "cosh", ["times_cont_diff_on"]], ["add", "theorem", "csin", ["times_cont_diff_on"]], ["add", "theorem", "csinh", ["times_cont_diff_on"]], ["add", "theorem", "sin", ["times_cont_diff_on"]], ["add", "theorem", "sinh", ["times_cont_diff_on"]], ["add", "theorem", "ccos", ["times_cont_diff_within_at"]], ["add", "theorem", "ccosh", ["times_cont_diff_within_at"]], ["add", "theorem", "cos", ["times_cont_diff_within_at"]], ["add", "theorem", "cosh", ["times_cont_diff_within_at"]], ["add", "theorem", "csin", ["times_cont_diff_within_at"]], ["add", "theorem", "csinh", ["times_cont_diff_within_at"]], ["add", "theorem", "sin", ["times_cont_diff_within_at"]], ["add", "theorem", "sinh", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1606209342, "sha": "fe4abe00", "message": "chore(algebra/lie/skew_adjoint): move logic for Lie algebras of skew-adjoint endomorphisms to own file (#5098)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "theorem", "is_skew_adjoint_bracket", ["bilin_form"]], ["del", "theorem", "is_skew_adjoint_bracket", ["matrix"]], ["del", "theorem", "lie_transpose", ["matrix"]], ["del", "theorem", "mem_skew_adjoint_matrices_lie_subalgebra", []], ["del", "theorem", "mem_skew_adjoint_matrices_lie_subalgebra_unit_smul", []], ["del", "def", "skew_adjoint_lie_subalgebra", []], ["del", "def", "skew_adjoint_lie_subalgebra_equiv", []], ["del", "theorem", "skew_adjoint_lie_subalgebra_equiv_apply", []], ["del", "theorem", "skew_adjoint_lie_subalgebra_equiv_symm_apply", []], ["del", "def", "skew_adjoint_matrices_lie_subalgebra", []], ["del", "theorem", "skew_adjoint_matrices_lie_subalgebra_equiv_apply", []], ["del", "def", "skew_adjoint_matrices_lie_subalgebra_equiv_transpose", []], ["del", "theorem", "skew_adjoint_matrices_lie_subalgebra_equiv_transpose_apply", []]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/lie/skew_adjoint.lean", "changes": [["add", "theorem", "is_skew_adjoint_bracket", ["bilin_form"]], ["add", "theorem", "is_skew_adjoint_bracket", ["matrix"]], ["add", "theorem", "lie_transpose", ["matrix"]], ["add", "theorem", "mem_skew_adjoint_matrices_lie_subalgebra", []], ["add", "theorem", "mem_skew_adjoint_matrices_lie_subalgebra_unit_smul", []], ["add", "def", "skew_adjoint_lie_subalgebra", []], ["add", "def", "skew_adjoint_lie_subalgebra_equiv", []], ["add", "theorem", "skew_adjoint_lie_subalgebra_equiv_apply", []], ["add", "theorem", "skew_adjoint_lie_subalgebra_equiv_symm_apply", []], ["add", "def", "skew_adjoint_matrices_lie_subalgebra", []], ["add", "theorem", "skew_adjoint_matrices_lie_subalgebra_equiv_apply", []], ["add", "def", "skew_adjoint_matrices_lie_subalgebra_equiv_transpose", []], ["add", "theorem", "skew_adjoint_matrices_lie_subalgebra_equiv_transpose_apply", []]]}]}, {"timestamp": 1606184071, "sha": "51e71e9d", "message": "chore(scripts): update nolints.txt (#5097)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606174398, "sha": "64b3e52b", "message": "feat(data/finset/basic): Finset subset induction (#5087)\nInduction on subsets of a given finset.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "induction_on'", ["finset"]]]}]}, {"timestamp": 1606169043, "sha": "434a34de", "message": "feat(group_theory/perm/sign): Add swap_induction_on' (#5092)\nThis also adds a docstring for swap_induction_on", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "swap_induction_on'", ["equiv", "perm"]]]}]}, {"timestamp": 1606169041, "sha": "2a49f4e5", "message": "feat(algebra/lie/direct_sum): direct sums of Lie modules (#5063)\nThere are three things happening here:\n 1. introduction of definitions of direct sums for Lie modules,\n 2. introduction of definitions of morphisms, equivs for Lie modules,\n 3. splitting out extant definition of direct sums for Lie algebras\n into a new file.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "theorem", "bracket_apply", ["lie_algebra", "direct_sum"]], ["add", "theorem", "apply_symm_apply", ["lie_module_equiv"]], ["add", "theorem", "coe_to_lie_module_hom", ["lie_module_equiv"]], ["add", "theorem", "coe_to_linear_equiv", ["lie_module_equiv"]], ["add", "theorem", "one_apply", ["lie_module_equiv"]], ["add", "def", "refl", ["lie_module_equiv"]], ["add", "theorem", "refl_apply", ["lie_module_equiv"]], ["add", "def", "symm", ["lie_module_equiv"]], ["add", "theorem", "symm_apply_apply", ["lie_module_equiv"]], ["add", "theorem", "symm_symm", ["lie_module_equiv"]], ["add", "theorem", "symm_trans_apply", ["lie_module_equiv"]], ["add", "def", "trans", ["lie_module_equiv"]], ["add", "theorem", "trans_apply", ["lie_module_equiv"]], ["add", "structure", "lie_module_equiv", []], ["add", "theorem", "coe_injective", ["lie_module_hom"]], ["add", "theorem", "coe_mk", ["lie_module_hom"]], ["add", "theorem", "coe_to_linear_map", ["lie_module_hom"]], ["add", "def", "comp", ["lie_module_hom"]], ["add", "theorem", "comp_apply", ["lie_module_hom"]], ["add", "theorem", "comp_coe", ["lie_module_hom"]], ["add", "theorem", "ext", ["lie_module_hom"]], ["add", "theorem", "ext_iff", ["lie_module_hom"]], ["add", "def", "inverse", ["lie_module_hom"]], ["add", "theorem", "map_lie'", ["lie_module_hom"]], ["add", "structure", "lie_module_hom", []]]}, {"oldPath": null, "newPath": "src/algebra/lie/direct_sum.lean", "changes": [["add", "theorem", "bracket_apply", ["direct_sum"]], ["add", "def", "lie_algebra_component", ["direct_sum"]], ["add", "def", "lie_algebra_of", ["direct_sum"]], ["add", "theorem", "lie_module_bracket_apply", ["direct_sum"]], ["add", "def", "lie_module_component", ["direct_sum"]], ["add", "def", "lie_module_of", ["direct_sum"]]]}]}, {"timestamp": 1606161417, "sha": "fee93e96", "message": "feat(ring_theory/*): Various lemmas about ideals, quotients, and localizations (#5046)\nLemmas needed for the proof that is_jacobson is preserved under taking polynomials.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "coe_map_ring_hom", ["polynomial"]], ["add", "theorem", "eval₂_C_X", ["polynomial"]], ["mod", "theorem", "map_injective", ["polynomial"]], ["add", "def", "map_ring_hom", ["polynomial"]], ["add", "theorem", "map_surjective", ["polynomial"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["mod", "theorem", "mem_map_of_mem", ["submonoid"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "bot_quotient_is_maximal_iff", ["ideal"]], ["add", "theorem", "comp_quotient_map_eq_of_comp_eq", ["ideal"]], ["add", "theorem", "quotient_map_injective", ["ideal"]], ["add", "theorem", "quotient_map_mk", ["ideal"]], ["add", "theorem", "radical_bot_of_integral_domain", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["add", "theorem", "is_maximal_comap_of_is_integral_of_is_maximal'", ["ideal"]], ["add", "theorem", "is_maximal_of_is_integral_of_is_maximal_comap'", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_of_is_integral_mul_unit'", []], ["add", "theorem", "is_integral_of_mem_closure''", []], ["add", "theorem", "is_integral_of_mem_closure'", []], ["add", "theorem", "is_integral_of_surjective'", []], ["add", "theorem", "is_integral_quotient_of_is_integral'", []], ["add", "theorem", "is_integral_tower_bot_of_is_integral'", []], ["add", "theorem", "is_integral_trans", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_integral_elem_localization_at_leading_coeff'", []], ["add", "theorem", "is_integral_localization'", []], ["add", "theorem", "surjective_quotient_map_of_maximal_of_localization", ["localization_map"]]]}, {"oldPath": "src/ring_theory/non_zero_divisors.lean", "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["add", "theorem", "map_le_non_zero_divisors_of_injective", []], ["add", "theorem", "powers_le_non_zero_divisors_of_domain", []]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "eq_zero_of_polynomial_mem_map_range", ["ideal"]], ["add", "theorem", "polynomial_mem_ideal_of_coeff_mem_ideal", ["ideal"]], ["mod", "def", "polynomial_quotient_equiv_quotient_polynomial", ["ideal"]]]}]}, {"timestamp": 1606150937, "sha": "96a20388", "message": "chore(linear_algebra/bilinear_form): cleanup (#5049)\n- Generalize some defs and lemmas to semimodules over semirings\n- Define the equiv between `bilin_form` and `linear_map` analogously to `linear_map.to_matrix / matrix.to_lin`\n- Mark appropriate lemmas as `simp`\n- Fix overlong lines, match style guide in other places too\n- Make use of variables consistent throughout the file", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "neg", ["alt_bilin_form"]], ["del", "def", "bilin_linear_map_equiv", ["bilin_form"]], ["del", "theorem", "coe_fn_to_linear_map", ["bilin_form"]], ["mod", "def", "comp", ["bilin_form"]], ["mod", "theorem", "comp_apply", ["bilin_form"]], ["mod", "theorem", "comp_injective", ["bilin_form"]], ["mod", "theorem", "ext", ["bilin_form"]], ["mod", "theorem", "add", ["bilin_form", "is_adjoint_pair"]], ["mod", "theorem", "comp", ["bilin_form", "is_adjoint_pair"]], ["mod", "theorem", "eq", ["bilin_form", "is_adjoint_pair"]], ["mod", "theorem", "smul", ["bilin_form", "is_adjoint_pair"]], ["mod", "theorem", "sub", ["bilin_form", "is_adjoint_pair"]], ["mod", "def", "is_adjoint_pair", ["bilin_form"]], ["mod", "theorem", "is_adjoint_pair_zero", ["bilin_form"]], ["add", "theorem", "is_ortho_smul_left", ["bilin_form"]], ["add", "theorem", "is_ortho_smul_right", ["bilin_form"]], ["mod", "def", "is_pair_self_adjoint", ["bilin_form"]], ["mod", "theorem", "is_pair_self_adjoint_equiv", ["bilin_form"]], ["mod", "def", "is_pair_self_adjoint_submodule", ["bilin_form"]], ["mod", "def", "is_skew_adjoint", ["bilin_form"]], ["mod", "theorem", "is_skew_adjoint_iff_neg_self_adjoint", ["bilin_form"]], ["mod", "def", "lin_mul_lin", ["bilin_form"]], ["mod", "theorem", "lin_mul_lin_comp", ["bilin_form"]], ["mod", "theorem", "lin_mul_lin_comp_left", ["bilin_form"]], ["mod", "theorem", "lin_mul_lin_comp_right", ["bilin_form"]], ["del", "theorem", "map_sum_left", ["bilin_form"]], ["del", "theorem", "map_sum_right", ["bilin_form"]], ["mod", "theorem", "mem_is_pair_self_adjoint_submodule", ["bilin_form"]], ["mod", "theorem", "mem_self_adjoint_submodule", ["bilin_form"]], ["mod", "theorem", "mem_skew_adjoint_submodule", ["bilin_form"]], ["mod", "theorem", "mul_to_matrix", ["bilin_form"]], ["mod", "theorem", "mul_to_matrix_mul", ["bilin_form"]], ["mod", "theorem", "neg_apply", ["bilin_form"]], ["mod", "theorem", "neg_left", ["bilin_form"]], ["mod", "theorem", "neg_right", ["bilin_form"]], ["del", "theorem", "ortho_smul_left", ["bilin_form"]], ["del", "theorem", "ortho_smul_right", ["bilin_form"]], ["mod", "theorem", "ortho_zero", ["bilin_form"]], ["mod", "def", "self_adjoint_submodule", ["bilin_form"]], ["mod", "def", "skew_adjoint_submodule", ["bilin_form"]], ["mod", "theorem", "smul_apply", ["bilin_form"]], ["mod", "theorem", "sub_left", ["bilin_form"]], ["mod", "theorem", "sub_right", ["bilin_form"]], ["add", "def", "to_lin", ["bilin_form"]], ["add", "theorem", "to_lin_symm", ["bilin_form"]], ["del", "def", "to_linear_map", ["bilin_form"]], ["mod", "def", "to_matrix", ["bilin_form"]], ["mod", "theorem", "to_matrix_apply", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp_left", ["bilin_form"]], ["mod", "theorem", "to_matrix_comp_right", ["bilin_form"]], ["mod", "theorem", "to_matrix_mul", ["bilin_form"]], ["mod", "theorem", "to_matrix_smul", ["bilin_form"]], ["mod", "def", "to_matrixₗ", ["bilin_form"]], ["mod", "theorem", "zero_left", ["bilin_form"]], ["mod", "theorem", "zero_right", ["bilin_form"]], ["mod", "structure", "bilin_form", []], ["mod", "def", "bilin_form_equiv_matrix", []], ["mod", "def", "to_bilin", ["linear_map"]], ["add", "def", "to_bilin_aux", ["linear_map"]], ["add", "theorem", "to_bilin_aux_eq", ["linear_map"]], ["add", "theorem", "to_bilin_symm", ["linear_map"]], ["add", "theorem", "map_sum_left", []], ["add", "theorem", "map_sum_right", []], ["mod", "def", "is_adjoint_pair", ["matrix"]], ["mod", "theorem", "is_adjoint_pair_equiv", ["matrix"]], ["mod", "def", "to_bilin_form", ["matrix"]], ["mod", "theorem", "to_bilin_form_apply", ["matrix"]], ["mod", "def", "to_bilin_formₗ", ["matrix"]], ["mod", "def", "pair_self_adjoint_matrices_submodule", []], ["mod", "def", "self_adjoint_matrices_submodule", []], ["mod", "def", "skew_adjoint_matrices_submodule", []], ["mod", "theorem", "to_bilin_form_to_matrix", []], ["add", "theorem", "to_linear_map_apply", []], ["mod", "theorem", "to_matrix_to_bilin_form", []]]}]}, {"timestamp": 1606144848, "sha": "270fc310", "message": "fix(ring_theory/discrete_valuation_ring): docstring typos (#5085)\nClarify one docstring and fix two others.", "changes": [{"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["add", "theorem", "to_unique_factorization_monoid", ["discrete_valuation_ring", "has_unit_mul_pow_irreducible_factorization"]], ["del", "theorem", "ufd", ["discrete_valuation_ring", "has_unit_mul_pow_irreducible_factorization"]]]}]}, {"timestamp": 1606139272, "sha": "e8c8ce91", "message": "chore(category_theory/limits): move product isomorphisms (#5057)\nThis PR moves some constructions and lemmas from `monoidal/of_has_finite_products` (back) to `limits/shapes/binary_products`. \nThis reverts some changes made in https://github.com/leanprover-community/mathlib/commit/18246ac427c62348e7ff854965998cd9878c7692#diff-95871ea16bec862dfc4359f812b624a7a98e87b8c31c034e8a6e792332edb646. In particular, the purpose of that PR was to minimise imports in particular relating to `finite_limits`, but moving these particular definitions back doesn't make the imports any worse in that sense - other than that `binary_products` now imports `terminal` which I think doesn't make the import graph much worse. On the other hand, these definitions are useful outside of the context of monoidal categories so I think they do genuinely belong in `limits/`.\nI also changed some proofs from `tidy` to `simp` or a term-mode proof, and removed a `simp` attribute from a lemma which was already provable by `simp`.", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "braid_natural", ["category_theory", "limits"]], ["add", "def", "associator", ["category_theory", "limits", "coprod"]], ["add", "theorem", "associator_naturality", ["category_theory", "limits", "coprod"]], ["add", "def", "braiding", ["category_theory", "limits", "coprod"]], ["add", "def", "left_unitor", ["category_theory", "limits", "coprod"]], ["add", "theorem", "pentagon", ["category_theory", "limits", "coprod"]], ["add", "def", "right_unitor", ["category_theory", "limits", "coprod"]], ["add", "theorem", "symmetry'", ["category_theory", "limits", "coprod"]], ["add", "theorem", "symmetry", ["category_theory", "limits", "coprod"]], ["add", "theorem", "triangle", ["category_theory", "limits", "coprod"]], ["add", "def", "associator", ["category_theory", "limits", "prod"]], ["add", "theorem", "associator_naturality", ["category_theory", "limits", "prod"]], ["add", "def", "braiding", ["category_theory", "limits", "prod"]], ["add", "def", "functor_left_comp", ["category_theory", "limits", "prod"]], ["add", "def", "left_unitor", ["category_theory", "limits", "prod"]], ["add", "theorem", "left_unitor_hom_naturality", ["category_theory", "limits", "prod"]], ["add", "theorem", "left_unitor_inv_naturality", ["category_theory", "limits", "prod"]], ["add", "theorem", "pentagon", ["category_theory", "limits", "prod"]], ["add", "def", "right_unitor", ["category_theory", "limits", "prod"]], ["add", "theorem", "right_unitor_hom_naturality", ["category_theory", "limits", "prod"]], ["add", "theorem", "symmetry'", ["category_theory", "limits", "prod"]], ["add", "theorem", "symmetry", ["category_theory", "limits", "prod"]], ["add", "theorem", "triangle", ["category_theory", "limits", "prod"]], ["add", "theorem", "prod_right_unitor_inv_naturality", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["del", "theorem", "braid_natural", ["category_theory", "limits"]], ["del", "def", "associator", ["category_theory", "limits", "coprod"]], ["del", "theorem", "associator_naturality", ["category_theory", "limits", "coprod"]], ["del", "def", "braiding", ["category_theory", "limits", "coprod"]], ["del", "def", "left_unitor", ["category_theory", "limits", "coprod"]], ["del", "theorem", "pentagon", ["category_theory", "limits", "coprod"]], ["del", "def", "right_unitor", ["category_theory", "limits", "coprod"]], ["del", "theorem", "symmetry'", ["category_theory", "limits", "coprod"]], ["del", "theorem", "symmetry", ["category_theory", "limits", "coprod"]], ["del", "theorem", "triangle", ["category_theory", "limits", "coprod"]], ["del", "def", "associator", ["category_theory", "limits", "prod"]], ["del", "theorem", "associator_naturality", ["category_theory", "limits", "prod"]], ["del", "def", "braiding", ["category_theory", "limits", "prod"]], ["del", "def", "functor_left_comp", ["category_theory", "limits", "prod"]], ["del", "def", "left_unitor", ["category_theory", "limits", "prod"]], ["del", "theorem", "left_unitor_hom_naturality", ["category_theory", "limits", "prod"]], ["del", "theorem", "left_unitor_inv_naturality", ["category_theory", "limits", "prod"]], ["del", "theorem", "pentagon", ["category_theory", "limits", "prod"]], ["del", "def", "right_unitor", ["category_theory", "limits", "prod"]], ["del", "theorem", "right_unitor_hom_naturality", ["category_theory", "limits", "prod"]], ["del", "theorem", "symmetry'", ["category_theory", "limits", "prod"]], ["del", "theorem", "symmetry", ["category_theory", "limits", "prod"]], ["del", "theorem", "triangle", ["category_theory", "limits", "prod"]], ["del", "theorem", "prod_right_unitor_inv_naturality", ["category_theory", "limits"]]]}]}, {"timestamp": 1606139270, "sha": "a71901f2", "message": "feat(category_theory/limits): explicit binary product functor in Type (#5043)\nAdds `binary_product_functor`, the explicit product functor in Type, and `binary_product_iso_prod` which shows it is isomorphic to the one picked by choice (this is helpful eg to show Type is cartesian closed).\nI also edited the definitions a little to use existing machinery instead - this seems to make `simp` and `tidy` stronger when working with the explicit product cone; but they're definitionally the same as the old ones.", "changes": [{"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "def", "binary_coproduct_cocone", ["category_theory", "limits", "types"]], ["add", "def", "binary_coproduct_colimit", ["category_theory", "limits", "types"]], ["add", "def", "binary_coproduct_colimit_cocone", ["category_theory", "limits", "types"]], ["del", "def", "binary_coproduct_limit_cone", ["category_theory", "limits", "types"]], ["add", "def", "binary_product_cone", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_product_cone_fst", ["category_theory", "limits", "types"]], ["add", "theorem", "binary_product_cone_snd", ["category_theory", "limits", "types"]], ["add", "def", "binary_product_functor", ["category_theory", "limits", "types"]], ["add", "def", "binary_product_limit", ["category_theory", "limits", "types"]], ["add", "def", "coproduct_colimit_cocone", ["category_theory", "limits", "types"]], ["del", "def", "coproduct_limit_cone", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1606139268, "sha": "562be707", "message": "feat(field_theory/separable): a separable polynomial is squarefree (#5039)\nI prove that a separable polynomial is squarefree.", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "squarefree", ["polynomial", "separable"]]]}]}, {"timestamp": 1606139264, "sha": "3c1cf603", "message": "feat(category_theory/sigma): disjoint union of categories (#5020)", "changes": [{"oldPath": null, "newPath": "src/category_theory/sigma/basic.lean", "changes": [["add", "def", "desc", ["category_theory", "sigma"]], ["add", "def", "desc_map", ["category_theory", "sigma"]], ["add", "theorem", "desc_map_mk", ["category_theory", "sigma"]], ["add", "def", "desc_uniq", ["category_theory", "sigma"]], ["add", "theorem", "desc_uniq_hom_app", ["category_theory", "sigma"]], ["add", "theorem", "desc_uniq_inv_app", ["category_theory", "sigma"]], ["add", "def", "sigma", ["category_theory", "sigma", "functor"]], ["add", "def", "incl", ["category_theory", "sigma"]], ["add", "def", "incl_comp_map", ["category_theory", "sigma"]], ["add", "def", "incl_desc", ["category_theory", "sigma"]], ["add", "theorem", "incl_desc_hom_app", ["category_theory", "sigma"]], ["add", "theorem", "incl_desc_inv_app", ["category_theory", "sigma"]], ["add", "theorem", "incl_obj", ["category_theory", "sigma"]], ["add", "def", "map", ["category_theory", "sigma"]], ["add", "def", "map_comp", ["category_theory", "sigma"]], ["add", "def", "map_id", ["category_theory", "sigma"]], ["add", "theorem", "map_map", ["category_theory", "sigma"]], ["add", "theorem", "map_obj", ["category_theory", "sigma"]], ["add", "def", "nat_iso", ["category_theory", "sigma"]], ["add", "def", "sigma", ["category_theory", "sigma", "nat_trans"]], ["add", "def", "nat_trans", ["category_theory", "sigma"]], ["add", "theorem", "nat_trans_app", ["category_theory", "sigma"]], ["add", "theorem", "assoc", ["category_theory", "sigma", "sigma_hom"]], ["add", "def", "comp", ["category_theory", "sigma", "sigma_hom"]], ["add", "theorem", "comp_def", ["category_theory", "sigma", "sigma_hom"]], ["add", "theorem", "comp_id", ["category_theory", "sigma", "sigma_hom"]], ["add", "def", "id", ["category_theory", "sigma", "sigma_hom"]], ["add", "theorem", "id_comp", ["category_theory", "sigma", "sigma_hom"]], ["add", "inductive", "sigma_hom", ["category_theory", "sigma"]]]}]}, {"timestamp": 1606139262, "sha": "13b9478e", "message": "feat(combinatorics/colex): introduce colexicographical order (#4858)\nWe define the colex ordering for finite sets, and give a couple of important lemmas and properties relating to it.\nPart of #2770, in order to prove the Kruskal-Katona theorem.", "changes": [{"oldPath": null, "newPath": "src/combinatorics/colex.lean", "changes": [["add", "theorem", "eq_iff", ["colex"]], ["add", "theorem", "forall_lt_of_colex_lt_of_forall_lt", ["colex"]], ["add", "theorem", "hom", ["colex"]], ["add", "theorem", "hom_fin", ["colex"]], ["add", "theorem", "le_def", ["colex"]], ["add", "theorem", "le_trans", ["colex"]], ["add", "theorem", "lt_def", ["colex"]], ["add", "theorem", "lt_singleton_iff_mem_lt", ["colex"]], ["add", "theorem", "lt_trans", ["colex"]], ["add", "theorem", "lt_trichotomy", ["colex"]], ["add", "theorem", "mem_le_of_singleton_le", ["colex"]], ["add", "theorem", "sdiff_lt_sdiff_iff_lt", ["colex"]], ["add", "theorem", "singleton_lt_iff_lt", ["colex"]], ["add", "theorem", "sum_pow_two_lt_iff_lt", ["colex"]], ["add", "def", "colex", ["finset"]], ["add", "def", "to_colex", ["finset"]], ["add", "theorem", "sum_pow_two_lt", ["nat"]]]}]}, {"timestamp": 1606135248, "sha": "83ec6e06", "message": "feat(analysis/normed_space/inner_product): inner product is infinitely smooth (#5089)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "continuous_inner", []], ["add", "theorem", "inner", ["differentiable"]], ["add", "theorem", "inner", ["differentiable_at"]], ["add", "theorem", "differentiable_inner", []], ["add", "theorem", "inner", ["differentiable_on"]], ["add", "theorem", "inner", ["differentiable_within_at"]], ["add", "theorem", "inner_smul_real_left", []], ["add", "theorem", "inner_smul_real_right", []], ["add", "theorem", "is_bounded_bilinear_map_inner", []], ["add", "theorem", "inner", ["times_cont_diff"]], ["add", "theorem", "inner", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_at_inner", []], ["add", "theorem", "times_cont_diff_inner", []], ["add", "theorem", "inner", ["times_cont_diff_on"]], ["add", "theorem", "inner", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "algebra_map_eq_of_real", ["is_R_or_C"]]]}]}, {"timestamp": 1606126058, "sha": "fdabe9c3", "message": "feat(data/padics/padic_norm): add a little more API (#5082)\nA little more API for `padic_val_rat` and `padic_val_nat`.", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["add", "theorem", "dvd_of_one_le_padic_val_nat", []], ["add", "theorem", "sum_pos_of_pos", ["padic_val_rat"]]]}]}, {"timestamp": 1606122189, "sha": "2f516593", "message": "feat(analysis/special_functions/exp_log): `exp` is infinitely smooth (#5086)\n* Prove that `complex.exp` and `real.exp` are infinitely smooth.\n* Generalize lemmas about `exp ∘ f` to `f : E → ℂ` or `f : E → ℝ`\n instead of `f : ℂ → ℂ` or `f : ℝ → ℝ`.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "times_cont_diff_exp", ["complex"]], ["add", "theorem", "fderiv_exp", []], ["add", "theorem", "fderiv_within_exp", []], ["add", "theorem", "cexp", ["has_fderiv_at"]], ["add", "theorem", "exp", ["has_fderiv_at"]], ["add", "theorem", "cexp", ["has_fderiv_within_at"]], ["add", "theorem", "exp", ["has_fderiv_within_at"]], ["mod", "theorem", "cexp", ["measurable"]], ["mod", "theorem", "exp", ["measurable"]], ["add", "theorem", "times_cont_diff_exp", ["real"]], ["add", "theorem", "cexp", ["times_cont_diff"]], ["add", "theorem", "exp", ["times_cont_diff"]], ["add", "theorem", "cexp", ["times_cont_diff_at"]], ["add", "theorem", "exp", ["times_cont_diff_at"]], ["add", "theorem", "cexp", ["times_cont_diff_on"]], ["add", "theorem", "exp", ["times_cont_diff_on"]], ["add", "theorem", "cexp", ["times_cont_diff_within_at"]], ["add", "theorem", "exp", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1606101874, "sha": "b9bd4a57", "message": "chore(scripts): update nolints.txt (#5088)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1606093225, "sha": "ce0498e6", "message": "feat(data/nat/basic): add injectivity and divisibility lemmas (#5068)\nMultiplication by a non-zero natural is injective. Also a simple criterion for non-divisibility which I couldn't find (0 anisotropic (#5050)\nI made a mistake by merging a PR that defined `nondegenerate`\nbut should have used the terminology `anisotropic` instead.", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "def", "anisotropic", ["quadratic_form"]], ["del", "def", "nondegenerate", ["quadratic_form"]], ["add", "theorem", "not_anisotropic_iff_exists", ["quadratic_form"]], ["del", "theorem", "not_nondegenerate_iff_exists", ["quadratic_form"]]]}]}, {"timestamp": 1605875969, "sha": "498d4977", "message": "feat(measure_theory/lp_space): prove that neg and add are in Lp (#5014)\nFor f and g in Lp, (-f) and (f+g) are also in Lp.", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "rpow_arith_mean_le_arith_mean2_rpow", ["nnreal"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "default_fin_one", ["fin"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_mono_nnreal", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/lp_space.lean", "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "add", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "neg", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "snorm_neg", ["ℒp_space"]]]}]}, {"timestamp": 1605865227, "sha": "32d1dfcb", "message": "feat(linear_algebra/quadratic_form): nondegenerate quadratic forms (#5045)\nNo real lemmas about these, but `nondegenerate Q` is easier to read than `∀ x, Q x = 0 → x = 0`", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "def", "nondegenerate", ["quadratic_form"]], ["add", "theorem", "not_nondegenerate_iff_exists", ["quadratic_form"]]]}]}, {"timestamp": 1605858745, "sha": "8d40e8d0", "message": "feat(analysis/special_functions/pow): add ennreal.to_nnreal_rpow (#5042)\ncut ennreal.to_real_rpow into two lemmas: to_nnreal_rpow and to_real_rpow", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "to_nnreal_rpow", ["ennreal"]], ["mod", "theorem", "to_real_rpow", ["ennreal"]]]}]}, {"timestamp": 1605854640, "sha": "de76acdc", "message": "feat(number_theory/arithmetic_function): moebius is the inverse of zeta (#5001)\nProves the most basic version of moebius inversion: that the moebius function is the inverse of the zeta function", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "divisors_filter_squarefree", ["nat"]], ["add", "theorem", "sum_divisors_filter_squarefree", ["nat"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "card_factors_one", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_mul_zeta", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_ne_zero_iff_eq_or", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_mul_moebius", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "factors_multiset_prod_of_irreducible", ["nat"]]]}]}, {"timestamp": 1605834298, "sha": "0e976d95", "message": "chore(scripts): update nolints.txt (#5048)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605800097, "sha": "47542a04", "message": "feat(ring_theory/witt_vector/verschiebung): verschiebung of witt vectors (#4836)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/verschiebung.lean", "changes": [["add", "theorem", "aeval_verschiebung_poly'", ["witt_vector"]], ["add", "theorem", "aeval_verschiebung_poly", ["witt_vector"]], ["add", "theorem", "bind₁_verschiebung_poly_witt_polynomial", ["witt_vector"]], ["add", "theorem", "ghost_component_verschiebung", ["witt_vector"]], ["add", "theorem", "ghost_component_verschiebung_fun", ["witt_vector"]], ["add", "theorem", "ghost_component_zero_verschiebung", ["witt_vector"]], ["add", "theorem", "ghost_component_zero_verschiebung_fun", ["witt_vector"]], ["add", "theorem", "map_verschiebung", ["witt_vector"]], ["add", "def", "verschiebung", ["witt_vector"]], ["add", "theorem", "verschiebung_coeff_add_one", ["witt_vector"]], ["add", "theorem", "verschiebung_coeff_succ", ["witt_vector"]], ["add", "theorem", "verschiebung_coeff_zero", ["witt_vector"]], ["add", "def", "verschiebung_fun", ["witt_vector"]], ["add", "theorem", "verschiebung_fun_coeff", ["witt_vector"]], ["add", "theorem", "verschiebung_fun_coeff_succ", ["witt_vector"]], ["add", "theorem", "verschiebung_fun_coeff_zero", ["witt_vector"]], ["add", "theorem", "verschiebung_fun_is_poly", ["witt_vector"]], ["add", "theorem", "verschiebung_is_poly", ["witt_vector"]], ["add", "def", "verschiebung_poly", ["witt_vector"]], ["add", "theorem", "verschiebung_poly_zero", ["witt_vector"]]]}]}, {"timestamp": 1605790819, "sha": "33265106", "message": "chore(field_theory/minimal_polynomial): generalize irreducible (#5006)\nI have removed the assumption that the base ring is a field for a minimal polynomial to be irreducible.\nThe proof is simple but long, it should be possible to use `wlog` to shorten it, but I do not understand how to do it...", "changes": [{"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["add", "theorem", "aeval_ne_zero_of_dvd_not_unit_minimal_polynomial", ["minimal_polynomial"]], ["del", "theorem", "degree_ne_zero", ["minimal_polynomial"]], ["mod", "theorem", "degree_pos", ["minimal_polynomial"]], ["add", "theorem", "gcd_domain_eq_field_fractions", ["minimal_polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1605790817, "sha": "b479d3bb", "message": "feat(algebra/*): star_ring instances on free_algebra, free_monoid, ring_quot, and quaternion (#4902)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["add", "theorem", "star_algebra_map", ["free_algebra"]], ["add", "def", "star_hom", ["free_algebra"]], ["add", "theorem", "star_ι", ["free_algebra"]]]}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["add", "theorem", "star_of", ["free_monoid"]], ["add", "theorem", "star_one", ["free_monoid"]]]}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": [["add", "def", "star_ring", ["ring_quot"]]]}, {"oldPath": "src/data/quaternion.lean", "newPath": "src/data/quaternion.lean", "changes": [["add", "theorem", "star_def", ["quaternion_algebra"]]]}]}, {"timestamp": 1605780626, "sha": "700d5761", "message": "chore(algebra/group/defs): Remove shortcut instance definitions (#4955)\nThis means that `group.to_left_cancel_semigroup` is now spelt `group.to_cancel_monoid.to_left_cancel_monoid.to_left_cancel_semigroup`.\nThe longer spelling shouldn't actually matter because type inference will do it anyway.\nI don't know whether this matters, but this should slightly reduce the number of connections that instance resolution must check.\nThis shortcut wasn't added deliberately, it seems it just got added accidentally when #3688 was introduced.", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}]}, {"timestamp": 1605768203, "sha": "123c5221", "message": "feat(category_theory/limits): terminal comparison morphism (#5025)", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "initial_comparison", ["category_theory", "limits"]], ["add", "def", "terminal_comparison", ["category_theory", "limits"]]]}]}, {"timestamp": 1605755160, "sha": "b848b5b5", "message": "feat(algebra/squarefree): a squarefree element of a UFM divides a power iff it divides (#5037)\nProves that if `x, y` are elements of a UFM such that `squarefree x`, then `x | y ^ n` iff `x | y`.", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "dvd_pow_iff_dvd_of_squarefree", ["unique_factorization_monoid"]], ["mod", "theorem", "squarefree_iff_nodup_factors", ["unique_factorization_monoid"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "mem_nsmul", ["multiset"]], ["add", "theorem", "prod_dvd_prod", ["multiset"]]]}, {"oldPath": "src/data/multiset/erase_dup.lean", "newPath": "src/data/multiset/erase_dup.lean", "changes": [["add", "theorem", "erase_dup_nsmul", ["multiset"]], ["add", "theorem", "le_erase_dup_iff_le", ["multiset", "nodup"]], ["add", "theorem", "le_nsmul_iff_le", ["multiset", "nodup"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "dvd_iff_factors_le_factors", ["unique_factorization_monoid"]], ["add", "theorem", "factors_pow", ["unique_factorization_monoid"]], ["add", "theorem", "factors_zero", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1605750578, "sha": "87a6d95b", "message": "chore(scripts): update nolints.txt (#5041)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605750576, "sha": "68adaba3", "message": "chore(field_theory/separable): spell-check \"seperable\" to \"separable\" (#5040)\nReplacing instances of \"seperable\" with \"separable\"", "changes": [{"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "multiplicity_le_one_of_separable", ["polynomial"]], ["del", "theorem", "multiplicity_le_one_of_seperable", ["polynomial"]], ["add", "theorem", "root_multiplicity_le_one_of_separable", ["polynomial"]], ["del", "theorem", "root_multiplicity_le_one_of_seperable", ["polynomial"]]]}]}, {"timestamp": 1605741839, "sha": "dcbec39a", "message": "feat(algebra/*): Add of_injective lemmas (#5034)\nThis adds `free_monoid.of_injective`, `monoid_algebra.of_injective`, `add_monoid_algebra.of_injective`, and renames and restates `free_group.of.inj` to match these lemmas.\n`function.injective (free_abelian_group.of)` is probably also true, but I wasn't able to prove it.", "changes": [{"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["add", "theorem", "of_injective", ["free_monoid"]]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "of_injective", ["add_monoid_algebra"]], ["add", "theorem", "of_injective", ["monoid_algebra"]]]}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["del", "theorem", "inj", ["free_group", "of"]], ["add", "theorem", "of_injective", ["free_group"]]]}]}, {"timestamp": 1605741837, "sha": "2de8db42", "message": "feat(analysis/special_functions/pow): prove measurability of rpow for ennreal (#5026)\nProve measurability of rpow for an ennreal argument.\nAlso shorten the proof in the real case.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "coe_rpow_def", ["ennreal"]], ["add", "theorem", "measurable_rpow", ["ennreal"]], ["add", "theorem", "measurable_rpow_const", ["ennreal"]], ["add", "theorem", "ennreal_rpow", ["measurable"]], ["add", "theorem", "ennreal_rpow_const", ["measurable"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "ite", ["measurable"]]]}]}, {"timestamp": 1605733800, "sha": "abb0b678", "message": "refactor(*): make continuous a structure (#5035)\nTurn `continuous` into a structure, to make sure it is not unfolded too much by Lean.\nAfter the change, inferring some types is harder to Lean (as it can not unfold further to find more information), so some help is needed at places. Especially, for `hf : continuous f` and `hg : continuous g`, I had to replace `hf.prod_mk hg` with `(hf.prod_mk hg : _)` a lot of times.\nFor `hf : continuous f` and `hs : is_open s`, the fact that `f^(-1) s` is open used to be `hf s hs`. Now, it is `hs.preimage hf`, just like it is for closed sets.", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/seminorm.lean", "newPath": "src/analysis/seminorm.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "structure", "continuous", []], ["del", "def", "continuous", []], ["add", "theorem", "continuous_def", []]]}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["mod", "theorem", "map_obj", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "tsum_sub", ["ennreal"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "coinduced_le_iff_le_induced", []], ["add", "theorem", "coinduced_le", ["continuous"]], ["add", "theorem", "le_induced", ["continuous"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/tactic.lean", "newPath": "src/topology/tactic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1605716893, "sha": "38d2b53a", "message": "feat(algebra/free_algebra): Add a nontrivial instance (#5033)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}]}, {"timestamp": 1605709632, "sha": "0e09ada8", "message": "feat(category_theory/is_connected): zigzag lemmas (#5024)\nA few basic lemmas about connected categories and the zigzag relation", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["add", "theorem", "zag_of_zag_obj", ["category_theory"]], ["add", "def", "setoid", ["category_theory", "zigzag"]], ["add", "theorem", "zigzag_equivalence", ["category_theory"]], ["add", "theorem", "zigzag_obj_of_zigzag", ["category_theory"]]]}]}, {"timestamp": 1605703492, "sha": "aff77270", "message": "chore(data/complex/is_R_or_C): Remove two unnecessary axioms (#5017)\n`of_real` and `smul_coe_mul_ax` are already implied by the algebra structure.\nThe addition of `noncomputable` does not matter here, as both instances of `is_R_or_C` are marked non-computable anyway.", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["mod", "theorem", "norm_sq_of_real", ["is_R_or_C"]], ["mod", "theorem", "of_real_alg", ["is_R_or_C"]], ["del", "def", "of_real_hom", ["is_R_or_C"]], ["mod", "theorem", "of_real_one", ["is_R_or_C"]], ["mod", "theorem", "of_real_pow", ["is_R_or_C"]], ["mod", "theorem", "of_real_sub", ["is_R_or_C"]], ["mod", "theorem", "of_real_zero", ["is_R_or_C"]], ["mod", "theorem", "zero_re'", ["is_R_or_C"]]]}]}, {"timestamp": 1605691932, "sha": "d22a878e", "message": "doc(algebra/module/linear_map): Explain where the ring instance is (#5023)", "changes": [{"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}]}, {"timestamp": 1605691930, "sha": "dfdad99f", "message": "feat(category_theory): constant functor is faithful (#5022)", "changes": [{"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}]}, {"timestamp": 1605691926, "sha": "dab2ae38", "message": "feat(category_theory/is_connected): transfer across equivalence (#5021)\nAlso renames some universes to match usual conventions", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["mod", "theorem", "constant_of_preserves_morphisms", ["category_theory"]], ["add", "theorem", "is_connected_of_equivalent", ["category_theory"]], ["add", "theorem", "is_preconnected_of_equivalent", ["category_theory"]], ["mod", "def", "iso_constant", ["category_theory"]]]}]}, {"timestamp": 1605691915, "sha": "a44b46c3", "message": "chore(*/sub*): Use the simp normal form for has_coe_to_sort (#5019)\nThis reduces the need to start proofs on subtypes by applying `mem_coe`.", "changes": [{"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1605691913, "sha": "0d3092b6", "message": "feat(number_theory/arithmetic_function): defining several more `arithmetic_function`s (#4998)\nDefines arithmetic functions `card_factors`, `card_distinct_factors`, and `moebius`", "changes": [{"oldPath": "src/algebra/squarefree.lean", "newPath": "src/algebra/squarefree.lean", "changes": []}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "def", "card_distinct_factors", ["nat", "arithmetic_function"]], ["add", "theorem", "card_distinct_factors_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "card_distinct_factors_eq_card_factors_iff_squarefree", ["nat", "arithmetic_function"]], ["add", "theorem", "card_distinct_factors_zero", ["nat", "arithmetic_function"]], ["add", "def", "card_factors", ["nat", "arithmetic_function"]], ["add", "theorem", "card_factors_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "card_factors_eq_one_iff_prime", ["nat", "arithmetic_function"]], ["add", "theorem", "card_factors_mul", ["nat", "arithmetic_function"]], ["add", "theorem", "card_factors_multiset_prod", ["nat", "arithmetic_function"]], ["add", "def", "moebius", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_apply_of_squarefree", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_eq_zero_of_not_squarefree", ["nat", "arithmetic_function"]], ["add", "theorem", "moebius_ne_zero_iff_squarefree", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_zero_eq_zero_of_ne_zero", ["multiplicity"]]]}]}, {"timestamp": 1605691910, "sha": "7cc6b53f", "message": "feat(category_theory/sites): sheaves on a grothendieck topology (#4608)\nBroken off from #4577.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "type_equalizer_iff_unique", ["category_theory", "limits", "types"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/sheaf.lean", "changes": [["add", "def", "first_obj", ["category_theory", "equalizer"]], ["add", "def", "first_obj_eq_family", ["category_theory", "equalizer"]], ["add", "def", "fork_map", ["category_theory", "equalizer"]], ["add", "theorem", "compatible_iff", ["category_theory", "equalizer", "presieve"]], ["add", "def", "first_map", ["category_theory", "equalizer", "presieve"]], ["add", "def", "second_map", ["category_theory", "equalizer", "presieve"]], ["add", "def", "second_obj", ["category_theory", "equalizer", "presieve"]], ["add", "theorem", "sheaf_condition", ["category_theory", "equalizer", "presieve"]], ["add", "theorem", "w", ["category_theory", "equalizer", "presieve"]], ["add", "theorem", "compatible_iff", ["category_theory", "equalizer", "sieve"]], ["add", "theorem", "equalizer_sheaf_condition", ["category_theory", "equalizer", "sieve"]], ["add", "def", "first_map", ["category_theory", "equalizer", "sieve"]], ["add", "def", "second_map", ["category_theory", "equalizer", "sieve"]], ["add", "def", "second_obj", ["category_theory", "equalizer", "sieve"]], ["add", "theorem", "w", ["category_theory", "equalizer", "sieve"]], ["add", "theorem", "compatible_iff_sieve_compatible", ["category_theory", "presieve"]], ["add", "theorem", "extend_agrees", ["category_theory", "presieve"]], ["add", "theorem", "extend_restrict", ["category_theory", "presieve"]], ["add", "theorem", "extension_iff_amalgamation", ["category_theory", "presieve"]], ["add", "theorem", "restrict", ["category_theory", "presieve", "family_of_elements", "compatible"]], ["add", "theorem", "sieve_extend", ["category_theory", "presieve", "family_of_elements", "compatible"]], ["add", "theorem", "to_sieve_compatible", ["category_theory", "presieve", "family_of_elements", "compatible"]], ["add", "def", "compatible", ["category_theory", "presieve", "family_of_elements"]], ["add", "def", "is_amalgamation", ["category_theory", "presieve", "family_of_elements"]], ["add", "def", "pullback_compatible", ["category_theory", "presieve", "family_of_elements"]], ["add", "def", "restrict", ["category_theory", "presieve", "family_of_elements"]], ["add", "def", "sieve_compatible", ["category_theory", "presieve", "family_of_elements"]], ["add", "def", "family_of_elements", ["category_theory", "presieve"]], ["add", "theorem", "is_amalgamation_restrict", ["category_theory", "presieve"]], ["add", "theorem", "is_amalgamation_sieve_extend", ["category_theory", "presieve"]], ["add", "theorem", "is_compatible_of_exists_amalgamation", ["category_theory", "presieve"]], ["add", "def", "is_separated", ["category_theory", "presieve"]], ["add", "theorem", "ext", ["category_theory", "presieve", "is_separated_for"]], ["add", "theorem", "is_sheaf_for", ["category_theory", "presieve", "is_separated_for"]], ["add", "def", "is_separated_for", ["category_theory", "presieve"]], ["add", "theorem", "is_separated_for_and_exists_is_amalgamation_iff_sheaf_for", ["category_theory", "presieve"]], ["add", "theorem", "is_separated_for_iff_generate", ["category_theory", "presieve"]], ["add", "theorem", "is_separated_for_top", ["category_theory", "presieve"]], ["add", "def", "is_sheaf", ["category_theory", "presieve"]], ["add", "theorem", "is_amalgamation", ["category_theory", "presieve", "is_sheaf_for"]], ["add", "theorem", "is_separated_for", ["category_theory", "presieve", "is_sheaf_for"]], ["add", "theorem", "valid_glue", ["category_theory", "presieve", "is_sheaf_for"]], ["add", "def", "is_sheaf_for", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_coarser_topology", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_iff_generate", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_iso", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_singleton_iso", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_subsieve", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_subsieve_aux", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_for_top_sieve", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_iso", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_pretopology", ["category_theory", "presieve"]], ["add", "theorem", "is_sheaf_yoneda", ["category_theory", "presieve"]], ["add", "def", "nat_trans_equiv_compatible_family", ["category_theory", "presieve"]], ["add", "theorem", "pullback_compatible_iff", ["category_theory", "presieve"]], ["add", "theorem", "restrict_extend", ["category_theory", "presieve"]], ["add", "theorem", "restrict_inj", ["category_theory", "presieve"]], ["add", "theorem", "separated_of_sheaf", ["category_theory", "presieve"]], ["add", "theorem", "yoneda_condition_iff_sheaf_condition", ["category_theory", "presieve"]], ["add", "def", "yoneda_sheaf_condition", ["category_theory", "presieve"]]]}]}, {"timestamp": 1605683172, "sha": "fec1a59f", "message": "feat(data/list): map lemmas paralleling functor (#5028)\nAdding `comp_map` and `map_comp_map`.\nDocstrings done to match docstrings for equivalent `prod.map_comp_map`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "comp_map", ["list"]], ["add", "theorem", "map_comp_map", ["list"]]]}, {"oldPath": "src/data/multiset/functor.lean", "newPath": "src/data/multiset/functor.lean", "changes": []}]}, {"timestamp": 1605661696, "sha": "19e3302b", "message": "chore(scripts): update nolints.txt (#5029)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605635632, "sha": "e92b5acd", "message": "feat(algebra/opposites): Provide semimodule instances and op_linear_equiv (#4954)\nWe already have a `has_scalar` definition via an `algebra` definition.\nThe definition used there satisfies a handful of other typeclasses too, and also allows for `op_add_equiv` to be stated more strongly as `op_linear_equiv`.\nThis also cuts back the imports a little on `algebra.module.basic`, which means formerly-transitive imports have to be added to downstream files.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "op_smul", ["opposite"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/module/opposites.lean", "changes": [["add", "theorem", "coe_op_linear_equiv", ["opposite"]], ["add", "theorem", "coe_op_linear_equiv_symm", ["opposite"]], ["add", "theorem", "coe_op_linear_equiv_symm_to_linear_map", ["opposite"]], ["add", "theorem", "coe_op_linear_equiv_to_linear_map", ["opposite"]], ["add", "def", "op_linear_equiv", ["opposite"]], ["add", "theorem", "op_linear_equiv_symm_to_add_equiv", ["opposite"]], ["add", "theorem", "op_linear_equiv_to_add_equiv", ["opposite"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op_smul", ["opposite"]], ["add", "theorem", "unop_smul", ["opposite"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}]}, {"timestamp": 1605626876, "sha": "97fc8ce1", "message": "refactor(algebra/lie/basic): unbundle the action in `lie_module` (#4959)", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "theorem", "add_lie", []], ["mod", "theorem", "commutative_ring_iff_abelian_lie_ring", []], ["mod", "theorem", "gsmul_lie", []], ["add", "theorem", "leibniz_lie", []], ["del", "theorem", "lie_act", []], ["mod", "theorem", "lie_add", []], ["mod", "def", "ad", ["lie_algebra"]], ["add", "theorem", "ad_apply", ["lie_algebra"]], ["del", "theorem", "endo_algebra_bracket", ["lie_algebra"]], ["mod", "def", "of_associative_algebra_hom", ["lie_algebra"]], ["mod", "theorem", "of_associative_algebra_hom_apply", ["lie_algebra"]], ["mod", "theorem", "of_associative_algebra_hom_comp", ["lie_algebra"]], ["mod", "theorem", "of_associative_algebra_hom_id", ["lie_algebra"]], ["mod", "theorem", "lie_gsmul", []], ["add", "theorem", "lie_jacobi", []], ["add", "theorem", "lie_lie", []], ["mod", "theorem", "lie_mem_left", []], ["del", "def", "of_endo_morphism", ["lie_module"]], ["add", "def", "to_endo_morphism", ["lie_module"]], ["mod", "theorem", "lie_neg", []], ["mod", "theorem", "of_associative_ring_bracket", ["lie_ring"]], ["mod", "theorem", "lie_self", []], ["mod", "theorem", "lie_skew", []], ["mod", "theorem", "lie_smul", []], ["add", "def", "action_as_endo_map", ["lie_submodule", "quotient"]], ["add", "def", "action_as_endo_map_bracket", ["lie_submodule", "quotient"]], ["del", "theorem", "lie_quotient_action_apply", ["lie_submodule", "quotient"]], ["mod", "structure", "lie_submodule", []], ["mod", "theorem", "lie_zero", []], ["mod", "theorem", "neg_lie", []], ["mod", "theorem", "smul_lie", []], ["mod", "theorem", "zero_lie", []]]}, {"oldPath": "src/algebra/lie/classical.lean", "newPath": "src/algebra/lie/classical.lean", "changes": [["mod", "theorem", "sl_non_abelian", ["lie_algebra", "special_linear"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mul_eq_comp", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/linear_action.lean", "newPath": null, "changes": [["del", "def", "of_endo_map", ["linear_action"]], ["del", "def", "to_endo_map", ["linear_action"]], ["del", "theorem", "linear_action_act_add", []], ["del", "theorem", "linear_action_act_smul", []], ["del", "theorem", "linear_action_add_act", []], ["del", "theorem", "linear_action_smul_act", []], ["del", "theorem", "linear_action_zero", []], ["del", "theorem", "zero_linear_action", []]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": [["mod", "theorem", "commutator_coe_linear_map", ["derivation"]], ["add", "theorem", "sub_apply", ["derivation"]]]}, {"oldPath": "test/transport/basic.lean", "newPath": "test/transport/basic.lean", "changes": [["del", "def", "map", ["lie_ring"]]]}]}, {"timestamp": 1605615698, "sha": "47476efa", "message": "docs(references.bib): adds Samuel's Théorie Algébrique des Nombres (#5018)\nAdded Samuel's Théorie Algébrique des Nombres", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1605615696, "sha": "a59e76b5", "message": "feat(ring_theory/noetherian): add two lemmas on products of prime ideals (#5013)\nAdd two lemmas saying that in a noetherian ring (resp. _integral domain)_ every (_nonzero_) ideal contains a (_nonzero_) product of prime ideals.", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "not_is_prime_iff", ["ideal"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "exists_prime_spectrum_prod_le", []], ["add", "theorem", "exists_prime_spectrum_prod_le_and_ne_bot_of_domain", []], ["add", "theorem", "induction", ["is_noetherian"]]]}]}, {"timestamp": 1605615693, "sha": "86b09715", "message": "feat(algebra/group_with_zero): Bundled `monoid_with_zero_hom` (#4995)\nThis adds, without notation, `monoid_with_zero_hom` as a variant of `A →* B` that also satisfies `f 0 = 0`.\nAs part of this, this change:\n* Splits up `group_with_zero` into multiple files, so that the definitions can be used in the bundled homs before any of the lemmas start pulling in dependencies\n* Adds `monoid_with_zero_hom` as a base class of `ring_hom`\n* Changes some `monoid_hom` objects into `monoid_with_zero_hom` objects.\n* Moves some lemmas about `valuation` into `monoid_hom`, since they apply more generally\n* Add automatic coercions between `monoid_with_zero_hom` and `monoid_hom`", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "map_div", ["ring_hom"]], ["mod", "theorem", "map_eq_zero", ["ring_hom"]], ["mod", "theorem", "map_inv", ["ring_hom"]], ["mod", "theorem", "map_ne_zero", ["ring_hom"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["mod", "def", "normalize", []], ["mod", "theorem", "normalize_zero", []]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_eq_to_mul_hom", ["monoid_hom"]], ["add", "theorem", "coe_eq_to_one_hom", ["monoid_hom"]], ["add", "theorem", "cancel_left", ["monoid_with_zero_hom"]], ["add", "theorem", "cancel_right", ["monoid_with_zero_hom"]], ["add", "theorem", "coe_comp", ["monoid_with_zero_hom"]], ["add", "theorem", "coe_eq_to_monoid_hom", ["monoid_with_zero_hom"]], ["add", "theorem", "coe_eq_to_zero_hom", ["monoid_with_zero_hom"]], ["add", "theorem", "coe_inj", ["monoid_with_zero_hom"]], ["add", "theorem", "coe_mk", ["monoid_with_zero_hom"]], ["add", "def", "comp", ["monoid_with_zero_hom"]], ["add", "theorem", "comp_apply", ["monoid_with_zero_hom"]], ["add", "theorem", "comp_assoc", ["monoid_with_zero_hom"]], ["add", "theorem", "comp_id", ["monoid_with_zero_hom"]], ["add", "theorem", "congr_arg", ["monoid_with_zero_hom"]], ["add", "theorem", "congr_fun", ["monoid_with_zero_hom"]], ["add", "theorem", "ext", ["monoid_with_zero_hom"]], ["add", "theorem", "ext_iff", ["monoid_with_zero_hom"]], ["add", "def", "id", ["monoid_with_zero_hom"]], ["add", "theorem", "id_apply", ["monoid_with_zero_hom"]], ["add", "theorem", "id_comp", ["monoid_with_zero_hom"]], ["add", "theorem", "map_mul", ["monoid_with_zero_hom"]], ["add", "theorem", "map_one", ["monoid_with_zero_hom"]], ["add", "theorem", "map_zero", ["monoid_with_zero_hom"]], ["add", "theorem", "to_fun_eq_coe", ["monoid_with_zero_hom"]], ["add", "theorem", "to_monoid_hom_coe", ["monoid_with_zero_hom"]], ["add", "theorem", "to_zero_hom_coe", ["monoid_with_zero_hom"]], ["add", "structure", "monoid_with_zero_hom", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero/basic.lean", "changes": [["del", "theorem", "inv_zero", []], ["del", "theorem", "map_div", ["monoid_hom"]], ["del", "theorem", "map_eq_zero", ["monoid_hom"]], ["del", "theorem", "map_inv'", ["monoid_hom"]], ["del", "theorem", "map_ne_zero", ["monoid_hom"]], ["mod", "theorem", "map_units_inv", ["monoid_hom"]], ["add", "theorem", "map_div", ["monoid_with_zero_hom"]], ["add", "theorem", "map_eq_zero", ["monoid_with_zero_hom"]], ["add", "theorem", "map_inv'", ["monoid_with_zero_hom"]], ["add", "theorem", "map_ne_zero", ["monoid_with_zero_hom"]], ["del", "theorem", "mul_inv_cancel", []], ["del", "theorem", "mul_left_cancel'", []], ["del", "theorem", "mul_right_cancel'", []], ["del", "theorem", "mul_zero", []], ["del", "theorem", "zero_mul", []]]}, {"oldPath": null, "newPath": "src/algebra/group_with_zero/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group_with_zero/defs.lean", "changes": [["add", "theorem", "inv_zero", []], ["add", "theorem", "mul_inv_cancel", []], ["add", "theorem", "mul_left_cancel'", []], ["add", "theorem", "mul_right_cancel'", []], ["add", "theorem", "mul_zero", []], ["add", "theorem", "zero_mul", []]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero/power.lean", "changes": [["del", "theorem", "map_fpow", ["monoid_hom"]], ["add", "theorem", "map_fpow", ["monoid_with_zero_hom"]]]}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["add", "theorem", "map_neg", ["monoid_hom"]], ["add", "theorem", "map_neg_one", ["monoid_hom"]], ["add", "theorem", "map_sub_swap", ["monoid_hom"]]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "def", "abs_hom", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "def", "norm_hom", ["normed_field"]]]}, {"oldPath": "src/data/quaternion.lean", "newPath": "src/data/quaternion.lean", "changes": [["mod", "def", "norm_sq", ["quaternion"]], ["del", "theorem", "norm_sq_zero", ["quaternion"]]]}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["mod", "theorem", "coe_coe", ["valuation"]], ["mod", "theorem", "map", ["valuation", "is_equiv"]], ["mod", "def", "map", ["valuation"]], ["del", "theorem", "map_neg_one", ["valuation"]], ["mod", "theorem", "unit_map_eq", ["valuation"]], ["mod", "structure", "valuation", []]]}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1605615690, "sha": "7a707646", "message": "feat(ring_theory/fractional_ideal): helper lemmas for Dedekind domains (#4994)\nAn assortment of lemmas and refactoring related to `fractional_ideal`s, used in the Dedekind domain project.\n \nThe motivation for creating this PR is that we are planning to remove the general `has_inv` instance on `fractional_ideal` (reserving it only for Dedekind domains), and we don't want to do the resulting refactoring twice. So we make sure everything is in the master branch, do the refactoring there, then merge the changes back into the work in progress branch.\nOverview of the changes in `localization.lean`:\n * more `is_integer` lemmas\n * a localization of a noetherian ring is noetherian\n * generalize a few lemmas from integral domains to nontrivial `comm_ring`s\n * `algebra A (fraction_ring A)` instance\nOverview of the changes in `fractional_ideal.lean`:\n * generalize many lemmas from integral domains to (nontrivial) `comm_ring`s (now `R` is notation for a `comm_ring` and `R₁` for an integral domain) \n * `is_fractional_of_le`, `is_fractional_span_iff` and `is_fractional_of_fg`\n * many `simp` and `norm_cast` results involving `coe : ideal -> fractional_ideal` and `coe : fractional_ideal -> submodule`: now should be complete for `0`, `1`, `+`, `*`, `/` and `≤`.\n * use `1 : submodule` as `simp` normal form instead of `coe_submodule (1 : ideal)`\n * make the multiplication operation irreducible\n * port `submodule.has_mul` lemmas to `fractional_ideal.has_mul`\n * `simp` lemmas for `canonical_equiv`, `span_singleton`\n * many ways to prove `is_noetherian`\nCo-Authored-By: Ashvni \nCo-Authored-By: faenuccio ", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "add_le_add_left", ["ring", "fractional_ideal"]], ["add", "theorem", "canonical_equiv_flip", ["ring", "fractional_ideal"]], ["add", "theorem", "canonical_equiv_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "canonical_equiv_symm", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_coe_ideal", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_div", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_fun_map_equiv", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_ideal_le_one", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_le_coe", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_map", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_mk", ["ring", "fractional_ideal"]], ["del", "theorem", "coe_ne_bot_iff_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_one", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_one_eq_coe_submodule_one", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_bot", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_eq_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_injective", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_to_fractional_ideal_ne_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_to_submodule_eq_bot", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_to_submodule_ne_bot", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "div_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "eq_span_singleton_of_principal", ["ring", "fractional_ideal"]], ["add", "theorem", "exists_mem_to_map_eq", ["ring", "fractional_ideal"]], ["mod", "theorem", "exists_ne_zero_mem_is_integer", ["ring", "fractional_ideal"]], ["add", "theorem", "ext_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "inv_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "invertible_iff_generator_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "invertible_of_principal", ["ring", "fractional_ideal"]], ["add", "theorem", "is_fractional_of_fg", ["ring", "fractional_ideal"]], ["add", "theorem", "is_fractional_of_le", ["ring", "fractional_ideal"]], ["add", "theorem", "is_fractional_span_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "is_fractional_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "is_noetherian", ["ring", "fractional_ideal"]], ["add", "theorem", "is_noetherian_coe_to_fractional_ideal", ["ring", "fractional_ideal"]], ["add", "theorem", "is_noetherian_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "is_noetherian_span_singleton_to_map_inv_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "is_noetherian_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "is_principal_inv", ["ring", "fractional_ideal"]], ["add", "theorem", "le_div_iff_mul_le", ["ring", "fractional_ideal"]], ["add", "theorem", "le_div_iff_of_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "le_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "le_iff_mem", ["ring", "fractional_ideal"]], ["add", "theorem", "le_one_iff_exists_coe_ideal", ["ring", "fractional_ideal"]], ["add", "theorem", "le_self_mul_one_div", ["ring", "fractional_ideal"]], ["add", "theorem", "le_self_mul_self", ["ring", "fractional_ideal"]], ["add", "theorem", "le_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_coe_ideal", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_div", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_eq_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_equiv_apply", ["ring", "fractional_ideal"]], ["add", "theorem", "map_equiv_symm", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_inv", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_ne_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_canonical_equiv_apply", ["ring", "fractional_ideal"]], ["del", "theorem", "mem_coe", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_coe_ideal", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_div_iff_of_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_span_singleton_self", ["ring", "fractional_ideal"]], ["add", "def", "mul", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_eq_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_le", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_le_mul_left", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_mem_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_one_div_le_one", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_self_le_self", ["ring", "fractional_ideal"]], ["add", "theorem", "one_div_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "span_fractional_iff", ["ring", "fractional_ideal"]], ["del", "theorem", "span_singleton_fractional", ["ring", "fractional_ideal"]], ["add", "theorem", "span_singleton_inv", ["ring", "fractional_ideal"]], ["add", "theorem", "span_singleton_ne_zero_iff", ["ring", "fractional_ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "is_integer_one", ["localization_map"]], ["add", "theorem", "is_integer_zero", ["localization_map"]], ["add", "theorem", "is_noetherian_ring", ["localization_map"]]]}]}, {"timestamp": 1605611917, "sha": "ad286fbf", "message": "feat(tactic/fresh_names): add tactics for giving hyps fresh names (#4987)\nThis commit adds a variant of `rename` which guarantees that the renamed\nhypotheses receive fresh names. To implement this, we also add more flexible\nvariants of `get_unused_name`, `intro_fresh` and `intro_lst_fresh`.", "changes": [{"oldPath": null, "newPath": "src/tactic/fresh_names.lean", "changes": []}, {"oldPath": null, "newPath": "test/fresh_names.lean", "changes": []}]}, {"timestamp": 1605579330, "sha": "a2f3399a", "message": "chore(scripts): update nolints.txt (#5016)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605570451, "sha": "53f71f8d", "message": "feat(data/list): list last lemmas (#5015)\nlist last lemmas letting lean learn little logical links", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "last_map", ["list"]], ["add", "theorem", "last_pmap", ["list"]]]}]}, {"timestamp": 1605536133, "sha": "b588fc4c", "message": "chore(*) Unused have statements in term mode (#5012)\nRemove unneeded have statements.", "changes": [{"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1605517383, "sha": "90fa510d", "message": "feat(analysis/special_functions/pow): rpow is measurable (#5008)\nProve the measurability of rpow in two cases: real and nnreal.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "nnreal_rpow", ["measurable"]], ["add", "theorem", "nnreal_rpow_const", ["measurable"]], ["add", "theorem", "rpow", ["measurable"]], ["add", "theorem", "rpow_const", ["measurable"]], ["add", "theorem", "measurable_rpow", ["nnreal"]], ["add", "theorem", "measurable_rpow_const", ["nnreal"]], ["add", "theorem", "measurable_rpow", ["real"]], ["add", "theorem", "measurable_rpow_const", ["real"]]]}]}, {"timestamp": 1605489778, "sha": "4cd24385", "message": "chore(scripts): update nolints.txt (#5011)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605485832, "sha": "470ac77c", "message": "feat(category_theory/monad): monadic functor really creates limits (#4931)\nShow that a monadic functor `creates_limits`, and a partial result for colimits.", "changes": [{"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["add", "def", "monadic_creates_colimits_of_preserves_colimits", ["category_theory"]], ["add", "def", "monadic_creates_colimits_of_shape_of_preserves_colimits_of_shape", ["category_theory"]], ["add", "def", "monadic_creates_limits", ["category_theory"]], ["del", "theorem", "monadic_creates_limits", ["category_theory"]]]}]}, {"timestamp": 1605449411, "sha": "96315941", "message": "feat(algebra/star): star monoids, rings and algebras (#4886)", "changes": [{"oldPath": null, "newPath": "src/algebra/star/algebra.lean", "changes": [["add", "theorem", "star_smul", []]]}, {"oldPath": null, "newPath": "src/algebra/star/basic.lean", "changes": [["add", "def", "star", []], ["add", "theorem", "star_add", []], ["add", "def", "star_add_equiv", []], ["add", "theorem", "star_bit0", []], ["add", "theorem", "star_bit1", []], ["add", "theorem", "star_id_of_comm", []], ["add", "theorem", "star_injective", []], ["add", "theorem", "star_mul", []], ["add", "def", "star_mul_equiv", []], ["add", "theorem", "star_neg", []], ["add", "theorem", "star_one", []], ["add", "def", "star_ring_equiv", []], ["add", "def", "star_ring_of_comm", []], ["add", "theorem", "star_star", []], ["add", "theorem", "star_sub", []], ["add", "theorem", "star_sum", []], ["add", "theorem", "star_zero", []]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "map_map", ["matrix"]], ["add", "theorem", "star_apply", ["matrix"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1605416167, "sha": "9dd9b6b0", "message": "refactor(archive/imo/imo1969_q1): prove `infinite` statement, cleanup (#4391)\nThe previous formalization didn't quite prove that there were infinitely many natural numbers with the desired property, but rather that for any natural number there's a larger one with the property. This PR changes the ending to prove that the set of integers described in the problem statement is `infinite`.", "changes": [{"oldPath": "archive/imo/imo1969_q1.lean", "newPath": "archive/imo/imo1969_q1.lean", "changes": [["add", "def", "a_choice", []], ["add", "theorem", "a_choice_good", []], ["add", "theorem", "a_choice_strict_mono", []], ["mod", "theorem", "factorization", []], ["add", "def", "good_nats", []], ["mod", "theorem", "imo1969_q1", []], ["mod", "theorem", "int_large", []], ["del", "theorem", "int_not_prime", []], ["mod", "theorem", "left_factor_large", []], ["add", "theorem", "not_prime_of_int_mul'", []], ["mod", "theorem", "polynomial_not_prime", []], ["mod", "theorem", "right_factor_large", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_mul_nat_abs_eq", ["int"]]]}, {"oldPath": null, "newPath": "src/data/int/nat_prime.lean", "changes": [["add", "theorem", "not_prime_of_int_mul", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "nat_pow", ["strict_mono"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "factors_unique", ["nat"]], ["add", "theorem", "not_prime_mul'", ["nat"]], ["del", "theorem", "not_prime_helper", ["tactic", "norm_num"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "eq_finite_Union_of_finite_subset_Union", ["set"]], ["mod", "theorem", "finite_Union", ["set"]], ["add", "theorem", "infinite_image_iff", ["set"]], ["add", "theorem", "infinite_of_inj_on_maps_to", ["set"]], ["add", "theorem", "infinite_of_injective_forall_mem", ["set"]], ["add", "theorem", "infinite_range_of_injective", ["set"]]]}]}, {"timestamp": 1605404776, "sha": "7e27d941", "message": "chore(scripts): update nolints.txt (#5007)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605404774, "sha": "447b18f5", "message": "chore(data/polynomial/degree): consolidate all `polynomial.degree` files in one folder (#5005)\nMoves `data/polynomial/degree.lean` to `data/polynomial/degree`, which already exists, renames it `lemmas.lean`\nRenames `data/polynomial/degree/basic.lean` to `definitions.lean`\nAdds `data/polynomial/degree/default.lean`, which just imports `lemmas.lean`", "changes": [{"oldPath": "src/data/polynomial/cancel_leads.lean", "newPath": "src/data/polynomial/cancel_leads.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/polynomial/degree/default.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/definitions.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree/lemmas.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}]}, {"timestamp": 1605404772, "sha": "fca7ebaf", "message": "chore(analysis/calculus/deriv): composition of `g : 𝕜 → 𝕜` with `f : E → 𝕜` (#4871)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "comp_has_fderiv_at", ["has_deriv_at"]], ["add", "theorem", "comp_has_fderiv_within_at", ["has_deriv_at"]], ["add", "theorem", "comp_has_fderiv_at_filter", ["has_deriv_at_filter"]], ["add", "theorem", "comp_has_fderiv_within_at", ["has_deriv_within_at"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "tendsto_nhds_within", ["continuous_within_at"]]]}]}, {"timestamp": 1605400675, "sha": "e6e82755", "message": "chore(linear_algebra/char_poly): put everything `char_poly` in one folder (#5004)\nMoves `char_poly` to `char_poly.basic`, because the folder already exists", "changes": [{"oldPath": "src/linear_algebra/char_poly.lean", "newPath": "src/linear_algebra/char_poly/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}]}, {"timestamp": 1605395605, "sha": "65442444", "message": "feat(data/polynomial) small refactor and golf (#5002)\nFactor out the lemma that roots of the normalization equal the roots of a polynomial and golf a proof a tiny bit.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "roots_normalize", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "C_leading_coeff_mul_prod_multiset_X_sub_C", ["polynomial"]], ["mod", "theorem", "splits_iff_card_roots", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/cyclotomic.lean", "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": []}]}, {"timestamp": 1605391694, "sha": "05822370", "message": "feat(analysis): seminorms and local convexity (#4827)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/analysis/seminorm.lean", "changes": [["add", "def", "absorbent", []], ["add", "theorem", "absorbent_nhds_zero", []], ["add", "def", "absorbs", []], ["add", "theorem", "absorbs_self", ["balanced"]], ["add", "theorem", "closure", ["balanced"]], ["add", "theorem", "interior", ["balanced"]], ["add", "def", "balanced", []], ["add", "theorem", "balanced_zero_union_interior", []], ["add", "theorem", "balanced_ball_zero", ["seminorm"]], ["add", "def", "ball", ["seminorm"]], ["add", "theorem", "ball_zero_eq", ["seminorm"]], ["add", "theorem", "mem_ball", ["seminorm"]], ["add", "theorem", "mem_ball_zero", ["seminorm"]], ["add", "theorem", "nonneg", ["seminorm"]], ["add", "theorem", "sub_rev", ["seminorm"]], ["add", "structure", "seminorm", []]]}]}, {"timestamp": 1605383213, "sha": "633c2a63", "message": "feat(ring_theory/gauss_lemma): two primitive polynomials divide iff they do in a fraction field (#5003)\nShows `polynomial.is_primitive.dvd_iff_fraction_map_dvd_fraction_map`, that two primitive polynomials divide iff they do over a fraction field.\nShows `polynomial.is_primitive.int.dvd_iff_map_cast_dvd_map_cast`, the version for integers and rationals.", "changes": [{"oldPath": "src/ring_theory/polynomial/gauss_lemma.lean", "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": [["add", "theorem", "dvd_iff_fraction_map_dvd_fraction_map", ["polynomial", "is_primitive"]], ["add", "theorem", "dvd_of_fraction_map_dvd_fraction_map", ["polynomial", "is_primitive"]], ["add", "theorem", "dvd_iff_map_cast_dvd_map_cast", ["polynomial", "is_primitive", "int"]]]}]}, {"timestamp": 1605383211, "sha": "00924146", "message": "feat(data/nat/choose/sum): alternating binomial coefficient sums (#4997)\nEvaluates some sums related to binomial coefficients with alternating signs", "changes": [{"oldPath": "src/data/finset/powerset.lean", "newPath": "src/data/finset/powerset.lean", "changes": [["add", "theorem", "powerset_len_eq_filter", ["finset"]]]}, {"oldPath": "src/data/nat/choose/sum.lean", "newPath": "src/data/nat/choose/sum.lean", "changes": [["add", "theorem", "sum_powerset_apply_card", ["finset"]], ["add", "theorem", "sum_powerset_neg_one_pow_card", ["finset"]], ["add", "theorem", "sum_powerset_neg_one_pow_card_of_nonempty", ["finset"]], ["add", "theorem", "alternating_sum_range_choose", ["int"]], ["add", "theorem", "alternating_sum_range_choose_of_ne", ["int"]]]}]}, {"timestamp": 1605378015, "sha": "9b887d51", "message": "feat(measure_theory/lp_space): Define Lp spaces (#4993)\nDefine the space Lp of functions for which the norm raised to the power p has finite integral.\nDefine the seminorm on that space (without proof that it is a seminorm, for now).\nAdd three lemmas to analysis/special_functions/pow.lean about ennreal.rpow\n", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "rpow_eq_top_of_nonneg", ["ennreal"]], ["add", "theorem", "rpow_lt_top_of_nonneg", ["ennreal"]], ["add", "theorem", "rpow_ne_top_of_nonneg", ["ennreal"]]]}, {"oldPath": null, "newPath": "src/measure_theory/lp_space.lean", "changes": [["add", "theorem", "lintegral_rpow_nnnorm_eq_rpow_snorm", ["ℒp_space"]], ["add", "theorem", "lintegral_rpow_nnnorm_lt_top_of_snorm_lt_top", ["ℒp_space"]], ["add", "theorem", "snorm_lt_top", ["ℒp_space", "mem_ℒp"]], ["add", "theorem", "snorm_ne_top", ["ℒp_space", "mem_ℒp"]], ["add", "def", "mem_ℒp", ["ℒp_space"]], ["add", "theorem", "mem_ℒp_of_snorm_lt_top", ["ℒp_space"]], ["add", "theorem", "mem_ℒp_one_iff_integrable", ["ℒp_space"]], ["add", "def", "snorm", ["ℒp_space"]], ["add", "theorem", "snorm_zero", ["ℒp_space"]], ["add", "theorem", "zero_mem_ℒp", ["ℒp_space"]]]}]}, {"timestamp": 1605357293, "sha": "70ca6fd8", "message": "feat(ring_theory/power_basis): `equiv`s between algebras with the same power basis (#4986)\n`power_basis.lift` and `power_basis.equiv` use the power basis structure to define `alg_hom`s and `alg_equiv`s.\n \nThe main application in this PR is `power_basis.equiv_adjoin_simple`, which states that adjoining an element of a power basis of `L : K` gives `L` itself.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_eq_sum_range'", ["polynomial"]], ["add", "theorem", "aeval_eq_sum_range", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "degree_add_eq_left_of_degree_lt", ["polynomial"]], ["del", "theorem", "degree_add_eq_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_add_eq_right_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_sub_eq_left_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_sub_eq_right_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_sum_fin_lt", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "eval₂_mod_by_monic_eq_self_of_root", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval₂_eq_sum_range'", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/lifts.lean", "newPath": "src/data/polynomial/lifts.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "monic_add_of_left", ["polynomial"]], ["add", "theorem", "monic_add_of_right", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "aeval_mod_by_monic_eq_self_of_root", ["polynomial"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["mod", "theorem", "ne_zero", ["minimal_polynomial"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["del", "theorem", "findim", ["adjoin_root"]], ["del", "theorem", "finite_dimensional", ["adjoin_root"]], ["add", "theorem", "gen_eq", ["intermediate_field", "adjoin", "power_basis"]], ["add", "theorem", "aeval_minpoly_gen", ["power_basis"]], ["add", "theorem", "constr_pow_aeval", ["power_basis"]], ["add", "theorem", "constr_pow_algebra_map", ["power_basis"]], ["add", "theorem", "constr_pow_gen", ["power_basis"]], ["add", "theorem", "constr_pow_mul", ["power_basis"]], ["add", "theorem", "dim_le_nat_degree_of_root", ["power_basis"]], ["add", "theorem", "dim_ne_zero", ["power_basis"]], ["add", "theorem", "equiv_adjoin_simple_aeval", ["power_basis"]], ["add", "theorem", "equiv_adjoin_simple_gen", ["power_basis"]], ["add", "theorem", "equiv_adjoin_simple_symm_aeval", ["power_basis"]], ["add", "theorem", "equiv_adjoin_simple_symm_gen", ["power_basis"]], ["add", "theorem", "equiv_aeval", ["power_basis"]], ["add", "theorem", "equiv_gen", ["power_basis"]], ["add", "theorem", "equiv_symm", ["power_basis"]], ["add", "theorem", "exists_eq_aeval", ["power_basis"]], ["add", "theorem", "is_integral_gen", ["power_basis"]], ["add", "theorem", "lift_aeval", ["power_basis"]], ["add", "theorem", "lift_gen", ["power_basis"]], ["add", "theorem", "minpoly_gen_monic", ["power_basis"]], ["add", "theorem", "nat_degree_lt_nat_degree", ["power_basis"]], ["add", "theorem", "nat_degree_minimal_polynomial", ["power_basis"]], ["add", "theorem", "nat_degree_minpoly_gen", ["power_basis"]]]}]}, {"timestamp": 1605357291, "sha": "6bac8992", "message": "feat(category_theory/limits/preserves): functor product preserves colims (#4941)", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/preserves/functor_category.lean", "changes": [["add", "def", "prod_preserves_colimits", ["category_theory", "functor_category"]]]}]}, {"timestamp": 1605357289, "sha": "154d73dc", "message": "feat(category_theory/equivalence): equivalence of functor categories (#4940)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "def", "congr_left", ["category_theory", "equivalence"]], ["add", "def", "congr_right", ["category_theory", "equivalence"]]]}]}, {"timestamp": 1605357286, "sha": "a0341a89", "message": "feat(category_theory/limits/creates): transfer creating limits through nat iso (#4938)\n`creates` version of #4934", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "def", "creates_colimit_of_nat_iso", ["category_theory"]], ["add", "def", "creates_colimits_of_nat_iso", ["category_theory"]], ["add", "def", "creates_colimits_of_shape_of_nat_iso", ["category_theory"]], ["add", "def", "creates_limit_of_nat_iso", ["category_theory"]], ["add", "def", "creates_limits_of_nat_iso", ["category_theory"]], ["add", "def", "creates_limits_of_shape_of_nat_iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}]}, {"timestamp": 1605357285, "sha": "ccc1431c", "message": "feat(ring_theory/ideal_operations): prime avoidance (#773)\n```lean\n/-- Prime avoidance. Atiyah-Macdonald 1.11, Eisenbud 3.3, Stacks 10.14.2 (00DS), Matsumura Ex.1.6. -/\ntheorem subset_union_prime {s : finset ι} {f : ι → ideal R} (a b : ι)\n (hp : ∀ i ∈ s, i ≠ a → i ≠ b → is_prime (f i)) {I : ideal R} :\n (I : set R) ⊆ (⋃ i ∈ (↑s : set ι), f i) ↔ ∃ i ∈ s, I ≤ f i :=\n```", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "inf_le'", ["ideal", "is_prime"]], ["add", "theorem", "inf_le", ["ideal", "is_prime"]], ["add", "theorem", "mul_le", ["ideal", "is_prime"]], ["add", "theorem", "prod_le", ["ideal", "is_prime"]], ["add", "theorem", "prod_le_inf", ["ideal"]], ["add", "theorem", "subset_union", ["ideal"]], ["add", "theorem", "subset_union_prime'", ["ideal"]], ["add", "theorem", "subset_union_prime", ["ideal"]]]}]}, {"timestamp": 1605351775, "sha": "5f151043", "message": "feat(algebra/squarefree): Defines squarefreeness, proves several equivalences (#4981)\nDefines when a monoid element is `squarefree`\nProves basic lemmas to determine squarefreeness\nProves squarefreeness criteria in terms of `multiplicity`, `unique_factorization_monoid.factors`, and `nat.factors`", "changes": [{"oldPath": null, "newPath": "src/algebra/squarefree.lean", "changes": [["add", "theorem", "squarefree", ["irreducible"]], ["add", "theorem", "squarefree", ["is_unit"]], ["add", "theorem", "squarefree_iff_multiplicity_le_one", ["multiplicity"]], ["add", "theorem", "squarefree_iff_nodup_factors", ["nat"]], ["add", "theorem", "not_squarefree_zero", []], ["add", "theorem", "squarefree", ["prime"]], ["add", "def", "squarefree", []], ["add", "theorem", "squarefree_of_dvd_of_squarefree", []], ["add", "theorem", "squarefree_one", []], ["add", "theorem", "squarefree_iff_nodup_factors", ["unique_factorization_monoid"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_le_multiplicity_of_dvd", ["multiplicity"]]]}]}, {"timestamp": 1605316428, "sha": "4db26afe", "message": "chore(scripts): update nolints.txt (#4999)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605305200, "sha": "9ed9e0f8", "message": "feat(tactic/has_variable_names): add tactic for type-based naming (#4988)\nWhen we name hypotheses or variables, we often do so in a type-directed fashion:\na hypothesis of type `ℕ` is called `n` or `m`; a hypothesis of type `list ℕ` is\ncalled `ns`; etc. This commits adds a tactic which looks up typical variable\nnames for a given type. Typical variable names are registered by giving an\ninstance of the new type class `has_variable_names`. We also give instances of\nthis type class for many core types.", "changes": [{"oldPath": null, "newPath": "src/tactic/has_variable_names.lean", "changes": [["add", "def", "make_inheriting_instance", ["has_variable_names"]], ["add", "def", "make_listlike_instance", ["has_variable_names"]]]}]}, {"timestamp": 1605296531, "sha": "050b8370", "message": "feat(field_theory/adjoin): Adjoin integral element (#4831)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "disjoint_to_finset", ["multiset"]], ["add", "theorem", "to_finset_card_of_nodup", ["multiset"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_simple_to_subalgebra_of_integral", ["intermediate_field"]], ["add", "theorem", "card_alg_hom_adjoin_integral", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}]}, {"timestamp": 1605290345, "sha": "eeb20575", "message": "feat(ring_theory/unique_factorization_domain): connecting `multiplicity` to `unique_factorization_domain.factors` (#4980)\nConnects multiplicity of an irreducible to the multiset of irreducible factors", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "associated_pow_pow", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "le_multiplicity_iff_repeat_le_factors", ["unique_factorization_monoid"]], ["add", "theorem", "multiplicity_eq_count_factors", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1605266104, "sha": "1a233e0e", "message": "feat(analysis/calculus): derivative is measurable (#4974)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_mem_iff", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/fderiv_measurable.lean", "changes": [["add", "theorem", "measurable_apply'", ["continuous_linear_map"]], ["add", "theorem", "measurable_apply", ["continuous_linear_map"]], ["add", "theorem", "measurable_apply₂", ["continuous_linear_map"]], ["add", "theorem", "measurable_coe", ["continuous_linear_map"]], ["add", "def", "A", ["fderiv_measurable_aux"]], ["add", "theorem", "A_mono", ["fderiv_measurable_aux"]], ["add", "def", "B", ["fderiv_measurable_aux"]], ["add", "def", "D", ["fderiv_measurable_aux"]], ["add", "theorem", "D_subset_differentiable_set", ["fderiv_measurable_aux"]], ["add", "theorem", "differentiable_set_eq_D", ["fderiv_measurable_aux"]], ["add", "theorem", "differentiable_set_subset_D", ["fderiv_measurable_aux"]], ["add", "theorem", "is_open_A", ["fderiv_measurable_aux"]], ["add", "theorem", "is_open_B", ["fderiv_measurable_aux"]], ["add", "theorem", "le_of_mem_A", ["fderiv_measurable_aux"]], ["add", "theorem", "mem_A_of_differentiable", ["fderiv_measurable_aux"]], ["add", "theorem", "norm_sub_le_of_mem_A", ["fderiv_measurable_aux"]], ["add", "theorem", "is_measurable_set_of_differentiable_at", []], ["add", "theorem", "is_measurable_set_of_differentiable_at_of_is_complete", []], ["add", "theorem", "measurable_deriv", []], ["add", "theorem", "measurable_fderiv", []], ["add", "theorem", "measurable_fderiv_apply_const", []]]}, {"oldPath": "src/topology/metric_space/premetric_space.lean", "newPath": "src/topology/metric_space/premetric_space.lean", "changes": []}]}, {"timestamp": 1605230728, "sha": "140d8b42", "message": "chore(scripts): update nolints.txt (#4992)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605223394, "sha": "6b3a2d1d", "message": "feat(archive/imo): formalize IMO 1964 problem 1 (#4935)\nThis is an alternative approach to #4369, where progress seems to have stalled. I avoid integers completely by working with `nat.modeq`, and deal with the cases of n mod 3 by simply breaking into three cases.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1964_q1.lean", "changes": [["add", "theorem", "aux", []], ["add", "theorem", "imo1964_q1a", []], ["add", "theorem", "imo1964_q1b", []], ["add", "def", "problem_predicate", []], ["add", "theorem", "two_pow_three_mul_add_one_mod_seven", []], ["add", "theorem", "two_pow_three_mul_add_two_mod_seven", []], ["add", "theorem", "two_pow_three_mul_mod_seven", []]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "modeq_pow", ["nat", "modeq"]]]}]}, {"timestamp": 1605199004, "sha": "6e64df5f", "message": "chore(deprecated/group): Do not import `deprecated` from `equiv/mul_add` (#4989)\nThis swaps the direction of the import, which makes the deprecated instances for `mul_equiv` be in the same place as the instances for `monoid_hom`.", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}]}, {"timestamp": 1605199002, "sha": "97a7f577", "message": "chore(algebra/direct_limit): Use bundled morphisms (#4964)\nThis introduced some ugliness in the form of `(λ i j h, f i j h)`, which is a little unfortunate", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "def", "lift", ["add_comm_group", "direct_limit"]], ["del", "theorem", "lift_add", ["add_comm_group", "direct_limit"]], ["del", "theorem", "lift_neg", ["add_comm_group", "direct_limit"]], ["del", "theorem", "lift_sub", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "lift_unique", ["add_comm_group", "direct_limit"]], ["del", "theorem", "lift_zero", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "zero_exact", ["add_comm_group", "direct_limit", "of"]], ["mod", "def", "of", ["add_comm_group", "direct_limit"]], ["del", "theorem", "of_add", ["add_comm_group", "direct_limit"]], ["del", "theorem", "of_neg", ["add_comm_group", "direct_limit"]], ["del", "theorem", "of_sub", ["add_comm_group", "direct_limit"]], ["del", "theorem", "of_zero", ["add_comm_group", "direct_limit"]], ["mod", "def", "direct_limit", ["add_comm_group"]], ["mod", "def", "lift", ["ring", "direct_limit"]], ["del", "theorem", "lift_add", ["ring", "direct_limit"]], ["del", "def", "lift_hom", ["ring", "direct_limit"]], ["del", "theorem", "lift_mul", ["ring", "direct_limit"]], ["del", "theorem", "lift_neg", ["ring", "direct_limit"]], ["del", "theorem", "lift_one", ["ring", "direct_limit"]], ["del", "theorem", "lift_pow", ["ring", "direct_limit"]], ["del", "theorem", "lift_sub", ["ring", "direct_limit"]], ["mod", "theorem", "lift_unique", ["ring", "direct_limit"]], ["del", "theorem", "lift_zero", ["ring", "direct_limit"]], ["mod", "theorem", "zero_exact", ["ring", "direct_limit", "of"]], ["mod", "def", "of", ["ring", "direct_limit"]], ["del", "theorem", "of_add", ["ring", "direct_limit"]], ["mod", "theorem", "of_injective", ["ring", "direct_limit"]], ["del", "theorem", "of_mul", ["ring", "direct_limit"]], ["del", "theorem", "of_neg", ["ring", "direct_limit"]], ["del", "theorem", "of_one", ["ring", "direct_limit"]], ["del", "theorem", "of_pow", ["ring", "direct_limit"]], ["del", "theorem", "of_sub", ["ring", "direct_limit"]], ["del", "theorem", "of_zero", ["ring", "direct_limit"]], ["mod", "theorem", "exists_of", ["ring", "direct_limit", "polynomial"]]]}]}, {"timestamp": 1605190786, "sha": "34215fc9", "message": "feat(group_theory/sub{monoid,group}): Add `closure_induction'` for subtypes (#4984)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "closure_induction'", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "closure_induction'", ["submonoid"]]]}]}, {"timestamp": 1605183275, "sha": "7404f0ea", "message": "feat(algebra/pointwise): lemmas relating to submonoids (#4960)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "mul_subset", ["submonoid"]], ["add", "theorem", "mul_subset_closure", ["submonoid"]]]}]}, {"timestamp": 1605169736, "sha": "593013df", "message": "feat(algebra/quandle): Bundle `rack.to_envel_group.map` into an equiv (#4978)\nThis also cleans up some non-terminal simp tactics", "changes": [{"oldPath": "src/algebra/quandle.lean", "newPath": "src/algebra/quandle.lean", "changes": [["mod", "def", "map", ["rack", "to_envel_group"]]]}]}, {"timestamp": 1605154002, "sha": "3f575d72", "message": "feat(group_theory/subgroup) top is a normal subgroup (#4982)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1605149511, "sha": "509a2242", "message": "chore(scripts): update nolints.txt (#4983)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605140660, "sha": "f6c8d81c", "message": "feat(algebra/group/with_one): Use an equiv for `lift` (#4975)", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "def", "lift", ["with_one"]]]}]}, {"timestamp": 1605140656, "sha": "49cf28fe", "message": "feat(data/matrix): little lemmas on `map` (#4874)\nI had a couple of expressions involving mapping matrices, that the simplifier didn't `simp` away. It turns out the missing lemmas already existed, just not with the correct form / hypotheses. So here they are.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "alg_equiv_map_one", ["matrix"]], ["add", "theorem", "alg_equiv_map_zero", ["matrix"]], ["add", "theorem", "alg_hom_map_one", ["matrix"]], ["add", "theorem", "alg_hom_map_zero", ["matrix"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "add_equiv_map_zero", ["matrix"]], ["add", "theorem", "add_monoid_hom_map_zero", ["matrix"]], ["add", "theorem", "linear_equiv_map_zero", ["matrix"]], ["add", "theorem", "linear_map_map_zero", ["matrix"]], ["add", "theorem", "ring_equiv_map_one", ["matrix"]], ["add", "theorem", "ring_equiv_map_zero", ["matrix"]], ["add", "theorem", "ring_hom_map_one", ["matrix"]], ["add", "theorem", "ring_hom_map_zero", ["matrix"]], ["add", "theorem", "zero_hom_map_zero", ["matrix"]]]}]}, {"timestamp": 1605132821, "sha": "67309a44", "message": "refactor(group_theory/group_action): Break the file into three pieces (#4936)\nI found myself fighting import cycles when trying to define `has_scalar` instances in files that are early in the import tree.\nBy creating a separate `defs` file with minimal dependencies, this ought to become easier.\nThis also adds documentation.\nNone of the proofs or lemma statements have been touched.", "changes": [{"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": null, "changes": [["del", "def", "const_smul_hom", []], ["del", "theorem", "const_smul_hom_apply", []], ["del", "theorem", "eq_inv_smul_iff'", []], ["del", "theorem", "eq_inv_smul_iff", []], ["del", "theorem", "smul_sum", ["finset"]], ["del", "theorem", "inv_smul_eq_iff'", []], ["del", "theorem", "inv_smul_eq_iff", []], ["del", "theorem", "inv_smul_smul'", []], ["del", "theorem", "inv_smul_smul", []], ["del", "theorem", "smul_eq_zero", ["is_unit"]], ["del", "theorem", "smul_left_cancel", ["is_unit"]], ["del", "theorem", "ite_smul", []], ["del", "theorem", "smul_sum", ["list"]], ["del", "def", "comp_hom", ["mul_action"]], ["del", "def", "fixed_by", ["mul_action"]], ["del", "theorem", "fixed_eq_Inter_fixed_by", ["mul_action"]], ["del", "def", "fixed_points", ["mul_action"]], ["del", "theorem", "injective_of_quotient_stabilizer", ["mul_action"]], ["del", "theorem", "mem_fixed_by", ["mul_action"]], ["del", "theorem", "mem_fixed_points'", ["mul_action"]], ["del", "theorem", "mem_fixed_points", ["mul_action"]], ["del", "theorem", "mem_orbit", ["mul_action"]], ["del", "theorem", "mem_orbit_iff", ["mul_action"]], ["del", "theorem", "mem_orbit_self", ["mul_action"]], ["del", "theorem", "mem_orbit_smul", ["mul_action"]], ["del", "theorem", "mem_stabilizer_iff", ["mul_action"]], ["del", "def", "mul_left_cosets", ["mul_action"]], ["del", "def", "of_quotient_stabilizer", ["mul_action"]], ["del", "theorem", "of_quotient_stabilizer_mem_orbit", ["mul_action"]], ["del", "theorem", "of_quotient_stabilizer_mk", ["mul_action"]], ["del", "theorem", "of_quotient_stabilizer_smul", ["mul_action"]], ["del", "def", "orbit", ["mul_action"]], ["del", "theorem", "orbit_eq_iff", ["mul_action"]], ["del", "theorem", "orbit_equiv_quotient_stabilizer_symm_apply", ["mul_action"]], ["del", "def", "orbit_rel", ["mul_action"]], ["del", "def", "regular", ["mul_action"]], ["del", "theorem", "smul_mem_orbit_smul", ["mul_action"]], ["del", "def", "subgroup", ["mul_action", "stabilizer"]], ["del", "def", "submonoid", ["mul_action", "stabilizer"]], ["del", "def", "stabilizer", ["mul_action"]], ["del", "def", "stabilizer_carrier", ["mul_action"]], ["del", "def", "to_fun", ["mul_action"]], ["del", "theorem", "to_fun_apply", ["mul_action"]], ["del", "def", "to_perm", ["mul_action"]], ["del", "theorem", "smul_sum", ["multiset"]], ["del", "theorem", "one_smul", []], ["del", "theorem", "smul_add", []], ["del", "theorem", "smul_assoc", []], ["del", "theorem", "symm", ["smul_comm_class"]], ["del", "theorem", "smul_inv_smul'", []], ["del", "theorem", "smul_inv_smul", []], ["del", "theorem", "smul_ite", []], ["del", "theorem", "smul_neg", []], ["del", "theorem", "smul_one_smul", []], ["del", "theorem", "smul_smul", []], ["del", "theorem", "smul_sub", []], ["del", "theorem", "smul_zero", []], ["del", "theorem", "inv_smul_smul", ["units"]], ["del", "theorem", "smul_eq_iff_eq_inv_smul", ["units"]], ["del", "theorem", "smul_eq_zero", ["units"]], ["del", "theorem", "smul_inv_smul", ["units"]], ["del", "theorem", "smul_left_cancel", ["units"]], ["del", "theorem", "smul_ne_zero", ["units"]], ["del", "def", "smul_perm_hom", ["units"]]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/basic.lean", "changes": [["add", "theorem", "smul_sum", ["finset"]], ["add", "theorem", "smul_sum", ["list"]], ["add", "def", "fixed_by", ["mul_action"]], ["add", "theorem", "fixed_eq_Inter_fixed_by", ["mul_action"]], ["add", "def", "fixed_points", ["mul_action"]], ["add", "theorem", "injective_of_quotient_stabilizer", ["mul_action"]], ["add", "theorem", "mem_fixed_by", ["mul_action"]], ["add", "theorem", "mem_fixed_points'", ["mul_action"]], ["add", "theorem", "mem_fixed_points", ["mul_action"]], ["add", "theorem", "mem_orbit", ["mul_action"]], ["add", "theorem", "mem_orbit_iff", ["mul_action"]], ["add", "theorem", "mem_orbit_self", ["mul_action"]], ["add", "theorem", "mem_orbit_smul", ["mul_action"]], ["add", "theorem", "mem_stabilizer_iff", ["mul_action"]], ["add", "def", "mul_left_cosets", ["mul_action"]], ["add", "def", "of_quotient_stabilizer", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_mem_orbit", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_mk", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_smul", ["mul_action"]], ["add", "def", "orbit", ["mul_action"]], ["add", "theorem", "orbit_eq_iff", ["mul_action"]], ["add", "theorem", "orbit_equiv_quotient_stabilizer_symm_apply", ["mul_action"]], ["add", "def", "orbit_rel", ["mul_action"]], ["add", "theorem", "smul_mem_orbit_smul", ["mul_action"]], ["add", "def", "subgroup", ["mul_action", "stabilizer"]], ["add", "def", "submonoid", ["mul_action", "stabilizer"]], ["add", "def", "stabilizer", ["mul_action"]], ["add", "def", "stabilizer_carrier", ["mul_action"]], ["add", "theorem", "smul_sum", ["multiset"]]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/group_action/defs.lean", "changes": [["add", "def", "const_smul_hom", []], ["add", "theorem", "const_smul_hom_apply", []], ["add", "theorem", "ite_smul", []], ["add", "def", "comp_hom", ["mul_action"]], ["add", "def", "regular", ["mul_action"]], ["add", "def", "to_fun", ["mul_action"]], ["add", "theorem", "to_fun_apply", ["mul_action"]], ["add", "theorem", "one_smul", []], ["add", "theorem", "smul_add", []], ["add", "theorem", "smul_assoc", []], ["add", "theorem", "symm", ["smul_comm_class"]], ["add", "theorem", "smul_ite", []], ["add", "theorem", "smul_neg", []], ["add", "theorem", "smul_one_smul", []], ["add", "theorem", "smul_smul", []], ["add", "theorem", "smul_sub", []], ["add", "theorem", "smul_zero", []]]}, {"oldPath": null, "newPath": "src/group_theory/group_action/group.lean", "changes": [["add", "theorem", "eq_inv_smul_iff'", []], ["add", "theorem", "eq_inv_smul_iff", []], ["add", "theorem", "inv_smul_eq_iff'", []], ["add", "theorem", "inv_smul_eq_iff", []], ["add", "theorem", "inv_smul_smul'", []], ["add", "theorem", "inv_smul_smul", []], ["add", "theorem", "smul_eq_zero", ["is_unit"]], ["add", "theorem", "smul_left_cancel", ["is_unit"]], ["add", "def", "to_perm", ["mul_action"]], ["add", "theorem", "smul_inv_smul'", []], ["add", "theorem", "smul_inv_smul", []], ["add", "theorem", "inv_smul_smul", ["units"]], ["add", "theorem", "smul_eq_iff_eq_inv_smul", ["units"]], ["add", "theorem", "smul_eq_zero", ["units"]], ["add", "theorem", "smul_inv_smul", ["units"]], ["add", "theorem", "smul_left_cancel", ["units"]], ["add", "theorem", "smul_ne_zero", ["units"]], ["add", "def", "smul_perm_hom", ["units"]]]}]}, {"timestamp": 1605123412, "sha": "743a1047", "message": "chore(algebra): trivial lemmas on powers (#4977)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_lt_pow_iff", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "pow_lt_pow_iff_of_lt_one", []]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["add", "theorem", "inv_fpow'", []]]}, {"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}]}, {"timestamp": 1605117704, "sha": "5f098cfd", "message": "chore(topology): 2 trivial lemmas (#4968)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "mem_ball_iff_norm'", []], ["add", "theorem", "mem_ball_iff_norm", []], ["add", "theorem", "mem_closed_ball_iff_norm'", []], ["add", "theorem", "mem_closed_ball_iff_norm", []]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "nhds_has_basis", ["topological_space", "is_topological_basis"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "eventually_nhds_iff", ["metric"]], ["add", "theorem", "eventually_nhds_iff_ball", ["metric"]], ["add", "theorem", "mem_closed_ball'", ["metric"]]]}]}, {"timestamp": 1605107616, "sha": "d4aabf99", "message": "doc(type_classes): Explain the use of {} instance arguments (#4976)\nCloses gh-4660", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}]}, {"timestamp": 1605101961, "sha": "60234d18", "message": "chore(algebra/archimedean): add `exists_pow_lt_of_lt_1` (#4970)", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["mod", "theorem", "exists_int_pow_near'", []], ["mod", "theorem", "exists_int_pow_near", []], ["add", "theorem", "exists_nat_pow_near_of_lt_one", []], ["add", "theorem", "exists_pow_lt_of_lt_one", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "uniformity_basis_dist_pow_of_lt_1", []]]}]}, {"timestamp": 1605101958, "sha": "4bf7ae47", "message": "refactor(analysis/normed_space): use `lt` in rescale_to_shell, DRY (#4969)\n* Use strict inequality for the upper bound in `rescale_to_shell`.\n* Deduplicate some proofs about operator norm.\n* Add `linear_map.bound_of_shell`, `continuous_linear_map.op_norm_le_of_shell`, and `continuous_linear_map.op_norm_le_of_shell'`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "le_of_op_norm_le", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_of_shell'", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_of_shell", ["continuous_linear_map"]], ["add", "theorem", "bound_of_shell", ["linear_map"]]]}]}, {"timestamp": 1605101956, "sha": "e1560a31", "message": "feat(measure_theory/borel_space): continuity set of a function is measurable (#4967)\n* Move the definition of `is_Gδ` and basic lemmas to a separate file.\n* Prove that `{x | continuous_at f x}` is a Gδ set provided that the\n codomain is a uniform space with countable basis of the uniformity\n filter (e.g., an `emetric_space`). In particular, this set is\n measurable.\n* Rename `nhds_le_uniformity` to `supr_nhds_le_uniformity`.\n* Add new `nhds_le_uniformity` without `⨆` in the statement.\n* Add `uniform.continuous_at_iff_prod`.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "is_measurable", ["is_Gδ"]], ["add", "theorem", "is_measurable_set_of_continuous_at", []]]}, {"oldPath": null, "newPath": "src/topology/G_delta.lean", "changes": [["add", "theorem", "inter", ["is_Gδ"]], ["add", "theorem", "union", ["is_Gδ"]], ["add", "def", "is_Gδ", []], ["add", "theorem", "is_Gδ_Inter", []], ["add", "theorem", "is_Gδ_Inter_of_open", []], ["add", "theorem", "is_Gδ_bInter", []], ["add", "theorem", "is_Gδ_bInter_of_open", []], ["add", "theorem", "is_Gδ_sInter", []], ["add", "theorem", "is_Gδ_set_of_continuous_at", []], ["add", "theorem", "is_Gδ_set_of_continuous_at_of_countably_generated_uniformity", []], ["add", "theorem", "is_Gδ_univ", []], ["add", "theorem", "is_Gδ", ["is_open"]], ["add", "def", "residual", []]]}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["del", "theorem", "inter", ["is_Gδ"]], ["del", "theorem", "union", ["is_Gδ"]], ["del", "def", "is_Gδ", []], ["del", "theorem", "is_Gδ_Inter", []], ["del", "theorem", "is_Gδ_Inter_of_open", []], ["del", "theorem", "is_Gδ_bInter", []], ["del", "theorem", "is_Gδ_bInter_of_open", []], ["del", "theorem", "is_Gδ_sInter", []], ["del", "theorem", "is_Gδ_univ", []], ["del", "theorem", "is_Gδ", ["is_open"]], ["del", "def", "residual", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "nhds_le_uniformity", []], ["add", "theorem", "supr_nhds_le_uniformity", []], ["add", "theorem", "continuous_at_iff_prod", ["uniform"]]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1605091827, "sha": "02cdc33f", "message": "chore(algebra/group/hom): Add missing simp lemmas (#4958)\nThese are named in the same pattern as `linear_map.to_add_monoid_hom_coe`", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "to_mul_hom_coe", ["monoid_hom"]], ["add", "theorem", "to_one_hom_coe", ["monoid_hom"]]]}]}, {"timestamp": 1605091825, "sha": "3d6291ea", "message": "chore(algebra/group/with_one): Use bundled morphisms (#4957)\nThe comment \"We have no bundled semigroup homomorphisms\" has become false, these exist as `mul_hom`.\nThis also adds `with_one.coe_mul_hom` and `with_zero.coe_add_hom`", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "def", "coe_mul_hom", ["with_one"]], ["mod", "def", "lift", ["with_one"]], ["mod", "theorem", "lift_coe", ["with_one"]], ["mod", "theorem", "lift_one", ["with_one"]], ["mod", "theorem", "lift_unique", ["with_one"]], ["mod", "def", "map", ["with_one"]]]}]}, {"timestamp": 1605082966, "sha": "f30200e5", "message": "refactor(algebra/free_algebra): Make `lift` an equiv (#4908)\nThis can probably lead to some API cleanup down the line", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["mod", "def", "lift", ["free_algebra"]], ["add", "theorem", "lift_aux_eq", ["free_algebra"]], ["add", "theorem", "lift_symm_apply", ["free_algebra"]]]}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": [["mod", "def", "lift", ["universal_enveloping_algebra"]], ["add", "theorem", "lift_symm_apply", ["universal_enveloping_algebra"]], ["mod", "theorem", "ι_comp_lift", ["universal_enveloping_algebra"]]]}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": [["mod", "def", "lift", ["ring_quot"]], ["mod", "def", "lift_alg_hom", ["ring_quot"]]]}, {"oldPath": "src/linear_algebra/clifford_algebra.lean", "newPath": "src/linear_algebra/clifford_algebra.lean", "changes": [["mod", "def", "lift", ["clifford_algebra"]]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["mod", "theorem", "hom_ext", ["exterior_algebra"]], ["mod", "def", "lift", ["exterior_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["mod", "def", "lift", ["tensor_algebra"]]]}]}, {"timestamp": 1605058421, "sha": "c20ecef0", "message": "chore(scripts): update nolints.txt (#4965)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1605051000, "sha": "5c9e3ef8", "message": "feat(ring_theory/adjoin_root): Dimension of adjoin_root (#4830)\nAdds `adjoin_root.degree_lt_linear_equiv`, the restriction of `adjoin_root.mk f`\nto the polynomials of degree less than `f`, viewed as a isomorphism between\nvector spaces over `K` and uses it to prove that `adjoin_root f` has dimension\n`f.nat_degree`. Also renames `adjoin_root.alg_hom` to `adjoin_root.lift_hom`.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_pow", ["alg_equiv"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_root_equiv_adjoin_apply_root", ["intermediate_field"]], ["add", "theorem", "aeval_gen_minimal_polynomial", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "aeval_alg_hom_eq_zero", ["adjoin_root"]], ["del", "def", "alg_hom", ["adjoin_root"]], ["del", "theorem", "coe_alg_hom", ["adjoin_root"]], ["add", "theorem", "coe_lift_hom", ["adjoin_root"]], ["add", "def", "equiv", ["adjoin_root"]], ["add", "def", "lift_hom", ["adjoin_root"]], ["add", "theorem", "lift_hom_eq_alg_hom", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/power_basis.lean", "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "findim", ["adjoin_root"]], ["add", "theorem", "finite_dimensional", ["adjoin_root"]], ["mod", "theorem", "power_basis_is_basis", ["adjoin_root"]], ["add", "theorem", "findim", ["intermediate_field", "adjoin"]], ["add", "theorem", "finite_dimensional", ["intermediate_field", "adjoin"]], ["del", "theorem", "exists_eq_aeval_gen", ["intermediate_field", "adjoin_simple"]], ["mod", "theorem", "power_basis_is_basis", ["intermediate_field"]], ["add", "theorem", "findim", ["power_basis"]], ["mod", "theorem", "finite_dimensional", ["power_basis"]]]}]}, {"timestamp": 1605038681, "sha": "19bcf65c", "message": "chore(data/set/basic): Simp `(⊤ : set α)` to `set.univ` (#4963)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "top_eq_univ", ["set"]]]}]}, {"timestamp": 1605007541, "sha": "d3fff8a0", "message": "feat(data/fin): define `fin.insert_nth` (#4947)\nAlso rename `fin.succ_above_descend` to `fin.succ_above_pred_above`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cons_le", ["fin"]], ["add", "theorem", "eq_insert_nth_iff", ["fin"]], ["add", "theorem", "forall_iff_succ_above", ["fin"]], ["add", "def", "insert_nth", ["fin"]], ["add", "theorem", "insert_nth_apply_same", ["fin"]], ["add", "theorem", "insert_nth_apply_succ_above", ["fin"]], ["add", "theorem", "insert_nth_comp_succ_above", ["fin"]], ["add", "theorem", "insert_nth_eq_iff", ["fin"]], ["add", "theorem", "insert_nth_last'", ["fin"]], ["add", "theorem", "insert_nth_last", ["fin"]], ["add", "theorem", "insert_nth_zero'", ["fin"]], ["add", "theorem", "insert_nth_zero", ["fin"]], ["add", "theorem", "le_cons", ["fin"]], ["add", "theorem", "pred_above_zero", ["fin"]], ["del", "theorem", "succ_above_descend", ["fin"]], ["mod", "theorem", "succ_above_lt_iff", ["fin"]], ["add", "theorem", "succ_above_pred_above", ["fin"]], ["add", "theorem", "tuple0_le", ["fin"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1605007539, "sha": "ecbcd382", "message": "feat(category_theory/closed): cartesian closed category with zero object is trivial (#4924)", "changes": [{"oldPath": null, "newPath": "src/category_theory/closed/zero.lean", "changes": [["add", "def", "equiv_punit", ["category_theory"]], ["add", "def", "unique_homset_of_initial_iso_terminal", ["category_theory"]], ["add", "def", "unique_homset_of_zero", ["category_theory"]]]}]}, {"timestamp": 1605003715, "sha": "55a28c16", "message": "feat(ring_theory/witt_vector/mul_p): multiplication by p as operation on witt vectors (#4837)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/mul_p.lean", "changes": [["add", "theorem", "bind₁_witt_mul_n_witt_polynomial", ["witt_vector"]], ["add", "theorem", "mul_n_coeff", ["witt_vector"]], ["add", "theorem", "mul_n_is_poly", ["witt_vector"]], ["add", "def", "witt_mul_n", ["witt_vector"]]]}]}, {"timestamp": 1604995837, "sha": "34b7361b", "message": "feat(algebra/*): Add ring instances to clifford_algebra and exterior_algebra (#4916)\nTo do this, this removes the `irreducible` attributes.\nThese attributes were present to try and \"insulate\" the quotient / generator based definitions, and force downstream proofs to use the universal property.\nUnfortunately, this irreducibility created massive headaches in typeclass resolution, and the tradeoff for neatness vs usability just isn't worth it.\nIf someone wants to add back the `irreducible` attributes in future, they now have test-cases that force them not to break the `ring` instances when doing so.", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/linear_algebra/clifford_algebra.lean", "newPath": "src/linear_algebra/clifford_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}, {"oldPath": null, "newPath": "test/free_algebra.lean", "changes": []}]}, {"timestamp": 1604970437, "sha": "1ada09b0", "message": "chore(scripts): update nolints.txt (#4961)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604962355, "sha": "e8758ae0", "message": "feat(measure_theory/*): a few lemmas about `(is_)measurable` in `Π i, π i` (#4948)", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "pi_le_borel_pi", []]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_pi", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "theorem", "measure_diff_of_ae_le", ["measure_theory"]]]}]}, {"timestamp": 1604926870, "sha": "09afb046", "message": "feat(ring_theory/polynomial/content): Gauss's Lemma (irreducibility criterion) (#4861)\nProves that a primitive polynomial is irreducible iff it is irreducible over the fraction field", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["del", "theorem", "irreducible_of_irreducible_map", ["polynomial"]], ["add", "theorem", "irreducible_of_irreducible_map", ["polynomial", "monic"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": [["add", "theorem", "is_primitive_of_dvd", ["polynomial", "is_primitive"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/gauss_lemma.lean", "changes": [["add", "theorem", "irreducible_iff_irreducible_map_cast", ["polynomial", "is_primitive", "int"]], ["add", "theorem", "irreducible_iff_irreducible_map_fraction_map", ["polynomial", "is_primitive"]], ["add", "theorem", "irreducible_of_irreducible_map_of_injective", ["polynomial", "is_primitive"]], ["add", "theorem", "is_unit_iff_is_unit_map", ["polynomial", "is_primitive"]], ["add", "theorem", "is_unit_iff_is_unit_map_of_injective", ["polynomial", "is_primitive"]], ["add", "theorem", "is_unit_or_eq_zero_of_is_unit_integer_normalization_prim_part", ["polynomial"]]]}]}, {"timestamp": 1604918930, "sha": "fdbfe755", "message": "chore(group_theory/group_action): Rename some group_action lemmas (#4946)\nThis renames\n* These lemmas about `group α`, for consistency with `smul_neg` etc, which are in the global scope:\n * `mul_action.inv_smul_smul` → `inv_smul_smul`\n * `mul_action.smul_inv_smul` → `smul_inv_smul`\n * `mul_action.inv_smul_eq_iff` → `inv_smul_eq_iff`\n * `mul_action.eq_inv_smul_iff` → `eq_inv_smul_iff`\n* These lemmas about `group_with_zero α`, for consistency with `smul_inv_smul'` etc, which have trailing `'`s (and were added in #2693, while the `'`-less ones were added later):\n * `inv_smul_eq_iff` → `inv_smul_eq_iff'`\n * `eq_inv_smul_iff` → `eq_inv_smul_iff'`", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/group_ring_action.lean", "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "eq_inv_smul_iff'", []], ["mod", "theorem", "eq_inv_smul_iff", []], ["add", "theorem", "inv_smul_eq_iff'", []], ["mod", "theorem", "inv_smul_eq_iff", []], ["add", "theorem", "inv_smul_smul", []], ["del", "theorem", "eq_inv_smul_iff", ["mul_action"]], ["del", "theorem", "inv_smul_eq_iff", ["mul_action"]], ["del", "theorem", "inv_smul_smul", ["mul_action"]], ["del", "theorem", "smul_inv_smul", ["mul_action"]], ["add", "theorem", "smul_inv_smul", []]]}]}, {"timestamp": 1604900756, "sha": "22b61b26", "message": "feat(topology/subset_properties): separated of discrete (#4952)\nAs [requested on Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/totally.20disconnected.20of.20discrete/near/216021581).", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1604892354, "sha": "e1c333dc", "message": "chore(data/finset/basic): remove inter_eq_sdiff_sdiff (#4953)\nThis is a duplicate of sdiff_sdiff_self_left", "changes": [{"oldPath": "archive/imo/imo1998_q2.lean", "newPath": "archive/imo/imo1998_q2.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "theorem", "inter_eq_sdiff_sdiff", ["finset"]]]}]}, {"timestamp": 1604882906, "sha": "40f673ee", "message": "feat(data/set/intervals/pi): lemmas about intervals in `Π i, π i` (#4951)\nAlso add missing lemmas `Ixx_mem_nhds` and lemmas `pi_Ixx_mem_nhds`.\nFor each `pi_Ixx_mem_nhds` I add a non-dependent version\n`pi_Ixx_mem_nhds'` because sometimes Lean fails to unify different\ninstances while trying to apply the dependent version to `ι → ℝ`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "pi_mono", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/intervals/pi.lean", "changes": [["add", "theorem", "Icc_diff_pi_univ_Ioc_subset", ["set"]], ["add", "theorem", "pi_univ_Icc", ["set"]], ["add", "theorem", "pi_univ_Ici", ["set"]], ["add", "theorem", "pi_univ_Ico_subset", ["set"]], ["add", "theorem", "pi_univ_Iic", ["set"]], ["add", "theorem", "pi_univ_Iio_subset", ["set"]], ["add", "theorem", "pi_univ_Ioc_subset", ["set"]], ["add", "theorem", "pi_univ_Ioi_subset", ["set"]], ["add", "theorem", "pi_univ_Ioo_subset", ["set"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "le_def", ["pi"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Icc_mem_nhds", []], ["add", "theorem", "Ici_mem_nhds", []], ["add", "theorem", "Ico_mem_nhds", []], ["add", "theorem", "Iic_mem_nhds", []], ["add", "theorem", "Ioc_mem_nhds", []], ["add", "theorem", "pi_Icc_mem_nhds'", []], ["add", "theorem", "pi_Icc_mem_nhds", []], ["add", "theorem", "pi_Ici_mem_nhds'", []], ["add", "theorem", "pi_Ici_mem_nhds", []], ["add", "theorem", "pi_Ico_mem_nhds'", []], ["add", "theorem", "pi_Ico_mem_nhds", []], ["add", "theorem", "pi_Iic_mem_nhds'", []], ["add", "theorem", "pi_Iic_mem_nhds", []], ["add", "theorem", "pi_Iio_mem_nhds'", []], ["add", "theorem", "pi_Iio_mem_nhds", []], ["add", "theorem", "pi_Ioc_mem_nhds'", []], ["add", "theorem", "pi_Ioc_mem_nhds", []], ["add", "theorem", "pi_Ioi_mem_nhds'", []], ["add", "theorem", "pi_Ioi_mem_nhds", []], ["add", "theorem", "pi_Ioo_mem_nhds'", []], ["add", "theorem", "pi_Ioo_mem_nhds", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "set_pi_mem_nhds", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "compact_pi_Icc", []]]}]}, {"timestamp": 1604861465, "sha": "dcb8576b", "message": "chore(data/finset/basic): trivial simp lemmas (#4950)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "insert_nonempty", ["finset"]], ["mod", "theorem", "singleton_nonempty", ["finset"]]]}]}, {"timestamp": 1604861463, "sha": "de2f1b2a", "message": "feat(data/set/intervals/basic): collection of lemmas of the form I??_of_I?? (#4918)\nSome propositions about intervals that I thought may be useful (despite their simplicity).", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "mem_Icc_of_Ico", ["set"]], ["add", "theorem", "mem_Icc_of_Ioc", ["set"]], ["add", "theorem", "mem_Icc_of_Ioo", ["set"]], ["add", "theorem", "mem_Ici_of_Ioi", ["set"]], ["add", "theorem", "mem_Ico_of_Ioo", ["set"]], ["add", "theorem", "mem_Iic_of_Iio", ["set"]], ["add", "theorem", "mem_Ioc_of_Ioo", ["set"]]]}]}, {"timestamp": 1604852783, "sha": "14a7c39d", "message": "chore(data/finset/basic): use `has_coe_t` for coercion of `finset` to `set` (#4917)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "coe_empty", ["finset"]], ["mod", "theorem", "coe_erase", ["finset"]], ["mod", "theorem", "coe_inj", ["finset"]], ["mod", "theorem", "coe_inter", ["finset"]], ["mod", "theorem", "coe_mem", ["finset"]], ["mod", "theorem", "coe_nonempty", ["finset"]], ["mod", "theorem", "coe_sdiff", ["finset"]], ["mod", "theorem", "coe_singleton", ["finset"]], ["mod", "theorem", "coe_ssubset", ["finset"]], ["mod", "theorem", "coe_union", ["finset"]], ["mod", "theorem", "mem_coe", ["finset"]], ["mod", "theorem", "mk_coe", ["finset"]], ["mod", "theorem", "piecewise_coe", ["finset"]], ["mod", "theorem", "set_of_mem", ["finset"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}]}, {"timestamp": 1604797861, "sha": "26e4f15f", "message": "chore(scripts): update nolints.txt (#4944)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604784461, "sha": "e7d40ef3", "message": "refactor(*): Move an instance to a more appropriate file (#4939)\nIn its former location, this instance related neither to the section it was the sole resident of, nor even to the file.", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}]}, {"timestamp": 1604780140, "sha": "5fed35bf", "message": "chore(docs/100): fix typo (#4937)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1604780138, "sha": "c2ab384f", "message": "feat(category_theory/limits/preserves): convenience defs for things already there (#4933)", "changes": [{"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "is_colimit_of_reflects", ["category_theory", "limits"]], ["add", "def", "is_limit_of_reflects", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_reflects_of_preserves", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape_of_reflects_of_preserves", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_reflects_of_preserves", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_of_reflects_of_preserves", ["category_theory", "limits"]]]}]}, {"timestamp": 1604775972, "sha": "9a0ba082", "message": "feat(category_theory/limits/preserves): transfer preserving limits through nat iso (#4932)\n- Move two defs higher in the file\n- Shorten some proofs using newer lemmas\n- Show that we can transfer preservation of limits through natural isomorphism in the functor.", "changes": [{"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["del", "def", "preserves_colimit_of_iso", ["category_theory", "limits"]], ["add", "def", "preserves_colimit_of_iso_diagram", ["category_theory", "limits"]], ["add", "def", "preserves_colimit_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape_of_nat_iso", ["category_theory", "limits"]], ["del", "def", "preserves_limit_of_iso", ["category_theory", "limits"]], ["add", "def", "preserves_limit_of_iso_diagram", ["category_theory", "limits"]], ["add", "def", "preserves_limit_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape_of_nat_iso", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "changes": []}]}, {"timestamp": 1604775970, "sha": "c494db5c", "message": "feat(category_theory/limits/shapes/equalizers): equalizer comparison map (#4927)", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "coequalizer_comparison", ["category_theory", "limits"]], ["add", "theorem", "coequalizer_comparison_map_desc", ["category_theory", "limits"]], ["add", "def", "equalizer_comparison", ["category_theory", "limits"]], ["add", "theorem", "equalizer_comparison_comp_π", ["category_theory", "limits"]], ["add", "theorem", "map_lift_equalizer_comparison", ["category_theory", "limits"]], ["add", "theorem", "ι_comp_coequalizer_comparison", ["category_theory", "limits"]]]}]}, {"timestamp": 1604772008, "sha": "11368e1b", "message": "feat(category_theory/limits/preserves): transfer reflecting limits through nat iso (#4934)", "changes": [{"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "reflects_colimit_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "reflects_colimits_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "reflects_colimits_of_shape_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "reflects_limit_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "reflects_limits_of_nat_iso", ["category_theory", "limits"]], ["add", "def", "reflects_limits_of_shape_of_nat_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1604738759, "sha": "655b6171", "message": "feat(category_theory/limits/preserves/shapes/products): preserve products (#4857)\nA smaller part of #4716, for just products.\nThis also renames the file `preserves/shapes.lean` to `preserves/shapes/products.lean`, since I want a similar API for other special shapes and it'd get too big otherwise. \nOf the declarations which were already present: `preserves_products_iso`, `preserves_products_iso_hom_π`, `map_lift_comp_preserves_products_iso_hom`, the first is still there but with weaker assumptions, and the other two are now provable by simp (under weaker assumptions again).", "changes": [{"oldPath": "src/category_theory/limits/preserves/shapes.lean", "newPath": null, "changes": [["del", "theorem", "map_lift_comp_preserves_products_iso_hom", []], ["del", "def", "preserves_products_iso", []], ["del", "theorem", "preserves_products_iso_hom_π", []]]}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes/products.lean", "changes": [["add", "def", "fan_map_cone_limit", ["preserves"]], ["add", "def", "is_limit_of_has_product_of_preserves_limit", ["preserves"]], ["add", "def", "is_limit_of_reflects_of_map_is_limit", ["preserves"]], ["add", "def", "map_is_limit_of_preserves_of_is_limit", ["preserves"]], ["add", "def", "preserves_product_of_iso_comparison", ["preserves"]], ["add", "def", "preserves_products_iso", ["preserves"]], ["add", "theorem", "preserves_products_iso_hom", ["preserves"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "product_is_product", ["category_theory", "limits"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}]}, {"timestamp": 1604711474, "sha": "c4e8d748", "message": "chore(scripts): update nolints.txt (#4926)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604694891, "sha": "8ba0ddef", "message": "chore(data/polynomial/monic): speedup next_coeff_mul (#4920)", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}]}, {"timestamp": 1604694889, "sha": "e0cf0d37", "message": "fix(meta/expr): adjust is_likely_generated_binder_name to lean#490 (#4915)\nLean PR 490 changed Lean's strategy for generating binder names. This PR adapts\n`name.is_likely_generated_binder_name`, which checks whether a binder name was\nlikely generated by Lean (rather than given by the user).", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": null, "newPath": "test/likely_generated_name.lean", "changes": []}]}, {"timestamp": 1604690240, "sha": "b6b41c10", "message": "feat(category_theory/limits/creates): composition creates limits (#4922)", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}]}, {"timestamp": 1604690238, "sha": "4f673bde", "message": "feat(category_theory/limits/preserves): instances for composition preserving limits (#4921)\nA couple of quick instances. I'm pretty sure these instances don't cause clashes since they're for subsingleton classes, and they shouldn't cause loops since they're just other versions of instances already there.", "changes": [{"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}]}, {"timestamp": 1604678931, "sha": "bddc5c9e", "message": "feat(category_theory/limits): equivalence creates colimits (#4923)\nDualises and tidy proofs already there", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "map_cocone_equiv", ["category_theory", "limits", "is_colimit"]]]}]}, {"timestamp": 1604674671, "sha": "91f8e687", "message": "feat(src/ring_theory/polynomial/cyclotomic): cyclotomic polynomials (#4914)\nI have added some basic results about cyclotomic polynomials. I defined them as the polynomial, with integer coefficients, that lifts the complex polynomial ∏ μ in primitive_roots n ℂ, (X - C μ). I proved that the degree of cyclotomic n is totient n and the product formula for X ^ n - 1. I plan to prove the irreducibility in the near future.\nThis was in [4869](https://github.com/leanprover-community/mathlib/pull/4869) before I splitted that PR. Compared to it, I added the definition of `cyclotomic n R` for any ring `R` (still using the polynomial with coefficients in `ℤ`) and some easy lemmas, especially `cyclotomic_of_ring_hom`, `cyclotomic'_eq_X_pow_sub_one_div` `cyclotomic_eq_X_pow_sub_one_div`, and `cycl_eq_cycl'`.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/cyclotomic.lean", "changes": [["add", "theorem", "X_pow_sub_one_eq_prod", ["polynomial"]], ["add", "theorem", "X_pow_sub_one_splits", ["polynomial"]], ["add", "theorem", "monic", ["polynomial", "cyclotomic'"]], ["add", "def", "cyclotomic'", ["polynomial"]], ["add", "theorem", "cyclotomic'_eq_X_pow_sub_one_div", ["polynomial"]], ["add", "theorem", "cyclotomic'_ne_zero", ["polynomial"]], ["add", "theorem", "cyclotomic'_one", ["polynomial"]], ["add", "theorem", "cyclotomic'_splits", ["polynomial"]], ["add", "theorem", "cyclotomic'_two", ["polynomial"]], ["add", "theorem", "cyclotomic'_zero", ["polynomial"]], ["add", "theorem", "monic", ["polynomial", "cyclotomic"]], ["add", "def", "cyclotomic", ["polynomial"]], ["add", "theorem", "cyclotomic_eq_X_pow_sub_one_div", ["polynomial"]], ["add", "theorem", "cyclotomic_eq_prod_X_sub_primitive_roots", ["polynomial"]], ["add", "theorem", "cyclotomic_ne_zero", ["polynomial"]], ["add", "theorem", "cyclotomic_one", ["polynomial"]], ["add", "theorem", "cyclotomic_two", ["polynomial"]], ["add", "theorem", "cyclotomic_zero", ["polynomial"]], ["add", "theorem", "degree_cyclotomic'", ["polynomial"]], ["add", "theorem", "degree_cyclotomic", ["polynomial"]], ["add", "theorem", "int_coeff_of_cyclotomic", ["polynomial"]], ["add", "theorem", "int_cyclotomic_rw", ["polynomial"]], ["add", "theorem", "int_cyclotomic_spec", ["polynomial"]], ["add", "theorem", "int_cyclotomic_unique", ["polynomial"]], ["add", "theorem", "map_cyclotomic", ["polynomial"]], ["add", "theorem", "map_cyclotomic_int", ["polynomial"]], ["add", "theorem", "nat_degree_cyclotomic'", ["polynomial"]], ["add", "theorem", "nat_degree_cyclotomic", ["polynomial"]], ["add", "theorem", "prod_cyclotomic'_eq_X_pow_sub_one", ["polynomial"]], ["add", "theorem", "prod_cyclotomic_eq_X_pow_sub_one", ["polynomial"]], ["add", "theorem", "roots_of_cyclotomic", ["polynomial"]], ["add", "theorem", "unique_int_coeff_of_cycl", ["polynomial"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["del", "theorem", "primitive_root_one", ["is_primitive_root"]], ["add", "theorem", "primitive_roots_one", ["is_primitive_root"]]]}]}, {"timestamp": 1604657860, "sha": "747aaae9", "message": "chore(algebra/lie/basic): Add some missing simp lemmas about A →ₗ⁅R⁆ B (#4912)\nThese are mostly inspired by lemmas in linear_map. All the proofs are either `rfl` or copied from a proof for `linear_map`.", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["add", "theorem", "coe_mk", ["lie_algebra"]], ["add", "theorem", "coe_injective", ["lie_algebra", "morphism"]], ["mod", "theorem", "comp_apply", ["lie_algebra", "morphism"]], ["add", "theorem", "comp_coe", ["lie_algebra", "morphism"]], ["add", "theorem", "ext_iff", ["lie_algebra", "morphism"]], ["add", "theorem", "of_associative_algebra_hom_apply", ["lie_algebra"]]]}]}, {"timestamp": 1604625055, "sha": "fd3212c3", "message": "chore(scripts): update nolints.txt (#4919)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604602638, "sha": "a12d6772", "message": "feat(ring_theory): define a `power_basis` structure (#4905)\nThis PR defines a structure `power_basis`. If `S` is an `R`-algebra, `pb : power_basis R S` states that `S` (as `R`-module) has basis `1`, `pb.gen`, ..., `pb.gen ^ (pb.dim - 1)`. Since there are multiple possible choices, I decided to not make it a typeclass.\nThree constructors for `power_basis` are included: `algebra.adjoin`, `intermediate_field.adjoin` and `adjoin_root`. Each of these is of the form `power_basis K _` with `K` a field, at least until `minimal_polynomial` gets better support for rings.", "changes": [{"oldPath": null, "newPath": "src/ring_theory/power_basis.lean", "changes": [["add", "theorem", "power_basis_is_basis", ["adjoin_root"]], ["add", "theorem", "linear_independent_power_basis", ["algebra"]], ["add", "theorem", "mem_span_power_basis", ["algebra"]], ["add", "theorem", "power_basis_is_basis", ["algebra"]], ["add", "theorem", "exists_eq_aeval_gen", ["intermediate_field", "adjoin_simple"]], ["add", "theorem", "power_basis_is_basis", ["intermediate_field"]], ["add", "theorem", "is_integral_algebra_map_iff", []], ["add", "theorem", "eq_of_algebra_map_eq", ["minimal_polynomial"]], ["add", "theorem", "finite_dimensional", ["power_basis"]], ["add", "theorem", "mem_span_pow'", ["power_basis"]], ["add", "theorem", "mem_span_pow", ["power_basis"]], ["add", "theorem", "mem_supported_range", ["power_basis", "polynomial"]], ["add", "structure", "power_basis", []]]}]}, {"timestamp": 1604596015, "sha": "246df99f", "message": "feat(category_theory/limits): Any small complete category is a preorder (#4907)\nShow that any small complete category has subsingleton homsets.\nNot sure if this is useful for anything - maybe it shouldn't be an instance", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/small_complete.lean", "changes": []}]}, {"timestamp": 1604596013, "sha": "40245977", "message": "feat(category_theory/limits/presheaf): left adjoint if preserves colimits (#4896)", "changes": [{"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": [["add", "def", "is_left_adjoint_of_preserves_colimits", ["category_theory"]]]}]}, {"timestamp": 1604596011, "sha": "6a1ce57b", "message": "chore(algebra/module/linear_map): Derive linear_map from mul_action_hom (#4888)\nNote that this required some stuff about polynomials to move to cut import cycles.", "changes": [{"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": [["del", "theorem", "coe_polynomial", ["mul_semiring_action_hom"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "theorem", "coeff_smul'", ["polynomial"]], ["del", "theorem", "eval_smul'", ["polynomial"]], ["del", "theorem", "smul_C", ["polynomial"]], ["del", "theorem", "smul_X", ["polynomial"]], ["del", "theorem", "smul_eval", ["polynomial"]], ["del", "theorem", "smul_eval_smul", ["polynomial"]], ["del", "theorem", "coeff", ["prod_X_sub_smul"]], ["del", "theorem", "eval", ["prod_X_sub_smul"]], ["del", "theorem", "monic", ["prod_X_sub_smul"]], ["del", "theorem", "smul", ["prod_X_sub_smul"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/polynomial/group_ring_action.lean", "changes": [["add", "theorem", "coe_polynomial", ["mul_semiring_action_hom"]], ["add", "theorem", "coeff_smul'", ["polynomial"]], ["add", "theorem", "eval_smul'", ["polynomial"]], ["add", "theorem", "smul_C", ["polynomial"]], ["add", "theorem", "smul_X", ["polynomial"]], ["add", "theorem", "smul_eval", ["polynomial"]], ["add", "theorem", "smul_eval_smul", ["polynomial"]], ["add", "theorem", "coeff", ["prod_X_sub_smul"]], ["add", "theorem", "eval", ["prod_X_sub_smul"]], ["add", "theorem", "monic", ["prod_X_sub_smul"]], ["add", "theorem", "smul", ["prod_X_sub_smul"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1604591006, "sha": "2f07ff21", "message": "chore(topology/metric_space): more `norm_cast` lemmas, golf proofs (#4911)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "coe_nndist", []], ["add", "theorem", "dist_le_coe", []], ["add", "theorem", "dist_le_pi_dist", []], ["add", "theorem", "dist_lt_coe", []], ["add", "theorem", "edist_le_coe", []], ["add", "theorem", "edist_lt_coe", []], ["add", "theorem", "ennreal_coe_nndist", []], ["add", "theorem", "nndist_le_pi_nndist", []], ["add", "theorem", "nndist_pi_def", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_pi_def", []]]}]}, {"timestamp": 1604538478, "sha": "834d491d", "message": "chore(scripts): update nolints.txt (#4910)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604527196, "sha": "189063b1", "message": "chore(data/W): rename `W` to `W_type` (#4909)\nHaving a single character identifier in the root namespace is inconvenient.\ncloses leanprover-community/doc-gen#83", "changes": [{"oldPath": "archive/examples/prop_encodable.lean", "newPath": "archive/examples/prop_encodable.lean", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "src/data/W.lean", "newPath": "src/data/W.lean", "changes": [["del", "def", "depth", ["W"]], ["del", "theorem", "depth_lt_depth_mk", ["W"]], ["del", "theorem", "depth_pos", ["W"]], ["del", "inductive", "W", []], ["add", "def", "depth", ["W_type"]], ["add", "theorem", "depth_lt_depth_mk", ["W_type"]], ["add", "theorem", "depth_pos", ["W_type"]], ["add", "inductive", "W_type", []]]}, {"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": [["mod", "def", "W", ["pfunctor"]]]}]}, {"timestamp": 1604515061, "sha": "5a61ef19", "message": "feat(ring_theory/witt_vector/teichmuller): Teichmuller representatives (#4690)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/teichmuller.lean", "changes": [["add", "theorem", "ghost_component_teichmuller", ["witt_vector"]], ["add", "theorem", "map_teichmuller", ["witt_vector"]], ["add", "theorem", "teichmuller_coeff_pos", ["witt_vector"]], ["add", "theorem", "teichmuller_coeff_zero", ["witt_vector"]], ["add", "def", "teichmuller_fun", ["witt_vector"]], ["add", "theorem", "teichmuller_zero", ["witt_vector"]]]}]}, {"timestamp": 1604505882, "sha": "211b0c05", "message": "feat(logic/basic): forall2_congr lemmas (#4904)\nSome helpful lemmas for working with quantifiers, just other versions of what's already there.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists₂_congr", []], ["add", "theorem", "exists₃_congr", []], ["add", "theorem", "exists₄_congr", []], ["add", "theorem", "forall₂_congr", []], ["add", "theorem", "forall₃_congr", []], ["add", "theorem", "forall₄_congr", []]]}]}, {"timestamp": 1604505880, "sha": "0081a5a4", "message": "feat(ring_theory/algebraic): if `L / K` is algebraic, then the subalgebras are fields (#4903)", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "mem_subalgebra_equiv_intermediate_field", []], ["add", "theorem", "mem_subalgebra_equiv_intermediate_field_symm", []], ["add", "def", "subalgebra_equiv_intermediate_field", []], ["add", "theorem", "to_intermediate_field_to_subalgebra", []], ["add", "theorem", "to_subalgebra_to_intermediate_field", []]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "aeval_coe", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "inv_eq_of_aeval_div_X_ne_zero", []], ["add", "theorem", "inv_eq_of_root_of_coeff_zero_ne_zero", []], ["add", "theorem", "inv_mem_of_algebraic", ["subalgebra"]], ["add", "theorem", "inv_mem_of_root_of_coeff_zero_ne_zero", ["subalgebra"]], ["add", "theorem", "is_field_of_algebraic", ["subalgebra"]]]}]}, {"timestamp": 1604498775, "sha": "e303a7d9", "message": "feat(linear_algebra/tensor_product): tensoring linear maps with modules (#4771)", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "coe_ltensor_hom", ["linear_map"]], ["add", "theorem", "coe_rtensor_hom", ["linear_map"]], ["add", "def", "ltensor", ["linear_map"]], ["add", "theorem", "ltensor_add", ["linear_map"]], ["add", "theorem", "ltensor_comp", ["linear_map"]], ["add", "theorem", "ltensor_comp_map", ["linear_map"]], ["add", "theorem", "ltensor_comp_rtensor", ["linear_map"]], ["add", "def", "ltensor_hom", ["linear_map"]], ["add", "theorem", "ltensor_id", ["linear_map"]], ["add", "theorem", "ltensor_neg", ["linear_map"]], ["add", "theorem", "ltensor_smul", ["linear_map"]], ["add", "theorem", "ltensor_sub", ["linear_map"]], ["add", "theorem", "ltensor_tmul", ["linear_map"]], ["add", "theorem", "ltensor_zero", ["linear_map"]], ["add", "theorem", "map_comp_ltensor", ["linear_map"]], ["add", "theorem", "map_comp_rtensor", ["linear_map"]], ["add", "def", "rtensor", ["linear_map"]], ["add", "theorem", "rtensor_add", ["linear_map"]], ["add", "theorem", "rtensor_comp", ["linear_map"]], ["add", "theorem", "rtensor_comp_ltensor", ["linear_map"]], ["add", "theorem", "rtensor_comp_map", ["linear_map"]], ["add", "def", "rtensor_hom", ["linear_map"]], ["add", "theorem", "rtensor_id", ["linear_map"]], ["add", "theorem", "rtensor_neg", ["linear_map"]], ["add", "theorem", "rtensor_smul", ["linear_map"]], ["add", "theorem", "rtensor_sub", ["linear_map"]], ["add", "theorem", "rtensor_tmul", ["linear_map"]], ["add", "theorem", "rtensor_zero", ["linear_map"]]]}]}, {"timestamp": 1604477386, "sha": "6f72c228", "message": "chore(data/finset): add a few lemmas (#4901)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "insert_sdiff_insert", ["finset"]], ["add", "theorem", "piecewise_idem_left", ["finset"]], ["add", "theorem", "piecewise_idem_right", ["finset"]], ["add", "theorem", "piecewise_mem_Icc'", ["finset"]], ["add", "theorem", "piecewise_mem_Icc", ["finset"]], ["add", "theorem", "piecewise_mem_Icc_of_mem_of_mem", ["finset"]], ["add", "theorem", "piecewise_piecewise_of_subset_left", ["finset"]], ["add", "theorem", "piecewise_piecewise_of_subset_right", ["finset"]], ["add", "theorem", "sdiff_insert_of_not_mem", ["finset"]]]}]}, {"timestamp": 1604477382, "sha": "08770779", "message": "chore(analysis/calculus/times_cont_diff): a few missing lemmas (#4900)\n* add `times_cont_diff_within_at_iff_forall_nat_le` and `times_cont_diff_on_iff_forall_nat_le`;\n* add `times_cont_diff_on_all_iff_nat` and `times_cont_diff_all_iff_nat`;\n* rename `times_cont_diff_at.differentiable` to `times_cont_diff_at.differentiable_at`;\n* add `times_cont_diff.div_const`;\n* add `times_cont_diff_succ_iff_deriv`\n* move some `of_le` lemmas up to support minor golfing of proofs.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "div_const", ["times_cont_diff"]], ["add", "theorem", "times_cont_diff_all_iff_nat", []], ["del", "theorem", "differentiable", ["times_cont_diff_at"]], ["add", "theorem", "differentiable_at", ["times_cont_diff_at"]], ["add", "theorem", "div_const", ["times_cont_diff_at"]], ["add", "theorem", "div_const", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_diff_on_all_iff_nat", []], ["add", "theorem", "times_cont_diff_on_iff_forall_nat_le", []], ["add", "theorem", "times_cont_diff_succ_iff_deriv", []], ["add", "theorem", "div_const", ["times_cont_diff_within_at"]], ["add", "theorem", "times_cont_diff_within_at_iff_forall_nat_le", []]]}]}, {"timestamp": 1604477380, "sha": "beb6831f", "message": "feat(analysis/calculus/times_cont_diff): add `restrict_scalars` (#4899)\nAdd `restrict_scalars` lemmas to `has_ftaylor_series_up_to_on`,\n`times_cont_diff_within_at`, `times_cont_diff_on`,\n`times_cont_diff_at`, and `times_cont_diff`.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "def", "restrict_scalars", ["formal_multilinear_series"]], ["add", "theorem", "restrict_scalars", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "restrict_scalars", ["times_cont_diff"]], ["add", "theorem", "restrict_scalars", ["times_cont_diff_at"]], ["add", "theorem", "restrict_scalars", ["times_cont_diff_on"]], ["add", "theorem", "restrict_scalars", ["times_cont_diff_within_at"]]]}]}, {"timestamp": 1604477378, "sha": "b7991c0a", "message": "feat(category_theory/limits/cones): map_cone and postcompose lemmas (#4894)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "functoriality_comp_postcompose", ["category_theory", "functor"]], ["add", "def", "functoriality_comp_precompose", ["category_theory", "functor"]], ["add", "def", "postcompose_whisker_left_map_cone", ["category_theory", "functor"]], ["add", "def", "precompose_whisker_left_map_cocone", ["category_theory", "functor"]]]}]}, {"timestamp": 1604477376, "sha": "7d6f37dc", "message": "feat(category_theory/closed/cartesian): product preserves colimits (#4893)", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}]}, {"timestamp": 1604477375, "sha": "e1d60fda", "message": "feat(data/equiv): exists unique congr (#4890)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}]}, {"timestamp": 1604477371, "sha": "d88042c1", "message": "feat(order/filter/at_top_bot): lemmas about `map/comap` of `at_top`/`at_bot` (#4878)\n* Redefine `at_top`/`at_bot` using `Ici`/`Iic`.\n* Add lemmas about `map`/`comap` of `at_top`/`at_bot` under `coe : s → α`, where `s` is one of `Ici a`, `Iic a`, `Ioi a`, `Iio a`.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "def", "at_bot", ["filter"]], ["add", "theorem", "at_bot_Iic_eq", ["filter"]], ["add", "theorem", "at_bot_Iio_eq", ["filter"]], ["mod", "def", "at_top", ["filter"]], ["add", "theorem", "at_top_Ici_eq", ["filter"]], ["add", "theorem", "at_top_Ioi_eq", ["filter"]], ["add", "theorem", "map_coe_Ici_at_top", ["filter"]], ["add", "theorem", "map_coe_Iic_at_bot", ["filter"]], ["add", "theorem", "map_coe_Iio_at_bot", ["filter"]], ["add", "theorem", "map_coe_Ioi_at_top", ["filter"]], ["add", "theorem", "map_coe_at_top_of_Ici_subset", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually_eq_of_mem", ["set", "eq_on"]]]}]}, {"timestamp": 1604468598, "sha": "7ab3ca85", "message": "feat(data/quaternion): define quaternions and prove some basic properties (#2339)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_apply", ["opposite"]], ["add", "theorem", "op_smul", ["opposite"]]]}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "op_sum", ["finset"]], ["add", "theorem", "unop_sum", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["del", "theorem", "op_sum", ["with_top"]], ["del", "theorem", "unop_sum", ["with_top"]]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "coe_of_involutive", ["linear_equiv"]], ["add", "def", "of_involutive", ["linear_equiv"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "coe_op_add_equiv", ["opposite"]], ["add", "theorem", "coe_op_add_equiv_symm", ["opposite"]], ["del", "theorem", "coe_op_add_hom", ["opposite"]], ["del", "theorem", "coe_unop_add_hom", ["opposite"]], ["add", "def", "op_add_equiv", ["opposite"]], ["add", "theorem", "op_add_equiv_to_equiv", ["opposite"]], ["del", "def", "op_add_hom", ["opposite"]], ["del", "def", "unop_add_hom", ["opposite"]], ["add", "theorem", "coe_to_opposite", ["ring_hom"]], ["add", "def", "to_opposite", ["ring_hom"]]]}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/quaternion.lean", "changes": [["add", "theorem", "coe_complex_add", ["quaternion"]], ["add", "theorem", "coe_complex_coe", ["quaternion"]], ["add", "theorem", "coe_complex_im_i", ["quaternion"]], ["add", "theorem", "coe_complex_im_j", ["quaternion"]], ["add", "theorem", "coe_complex_im_k", ["quaternion"]], ["add", "theorem", "coe_complex_mul", ["quaternion"]], ["add", "theorem", "coe_complex_one", ["quaternion"]], ["add", "theorem", "coe_complex_re", ["quaternion"]], ["add", "theorem", "coe_complex_smul", ["quaternion"]], ["add", "theorem", "coe_complex_zero", ["quaternion"]], ["add", "theorem", "coe_of_complex", ["quaternion"]], ["add", "theorem", "inner_def", ["quaternion"]], ["add", "theorem", "inner_self", ["quaternion"]], ["add", "theorem", "norm_coe", ["quaternion"]], ["add", "theorem", "norm_mul", ["quaternion"]], ["add", "theorem", "norm_sq_eq_norm_square", ["quaternion"]], ["add", "def", "of_complex", ["quaternion"]]]}, {"oldPath": null, "newPath": "src/data/quaternion.lean", "changes": [["add", "theorem", "add_im_i", ["quaternion"]], ["add", "theorem", "add_im_j", ["quaternion"]], ["add", "theorem", "add_im_k", ["quaternion"]], ["add", "theorem", "add_re", ["quaternion"]], ["add", "theorem", "algebra_map_def", ["quaternion"]], ["add", "theorem", "coe_add", ["quaternion"]], ["add", "theorem", "coe_commute", ["quaternion"]], ["add", "theorem", "coe_commutes", ["quaternion"]], ["add", "theorem", "coe_conj_alg_equiv", ["quaternion"]], ["add", "theorem", "coe_im_i", ["quaternion"]], ["add", "theorem", "coe_im_j", ["quaternion"]], ["add", "theorem", "coe_im_k", ["quaternion"]], ["add", "theorem", "coe_inj", ["quaternion"]], ["add", "theorem", "coe_injective", ["quaternion"]], ["add", "theorem", "coe_mul", ["quaternion"]], ["add", "theorem", "coe_mul_eq_smul", ["quaternion"]], ["add", "theorem", "coe_neg", ["quaternion"]], ["add", "theorem", "coe_norm_sq_add", ["quaternion"]], ["add", "theorem", "coe_one", ["quaternion"]], ["add", "theorem", "coe_re", ["quaternion"]], ["add", "theorem", "coe_sub", ["quaternion"]], ["add", "theorem", "coe_zero", ["quaternion"]], ["add", "theorem", "commute_conj_conj", ["quaternion"]], ["add", "theorem", "commute_conj_self", ["quaternion"]], ["add", "theorem", "commute_self_conj", ["quaternion"]], ["add", "def", "conj", ["quaternion"]], ["add", "theorem", "conj_add", ["quaternion"]], ["add", "theorem", "conj_add_self'", ["quaternion"]], ["add", "theorem", "conj_add_self", ["quaternion"]], ["add", "def", "conj_alg_equiv", ["quaternion"]], ["add", "theorem", "conj_coe", ["quaternion"]], ["add", "theorem", "conj_conj", ["quaternion"]], ["add", "theorem", "conj_conj_mul", ["quaternion"]], ["add", "theorem", "conj_eq_two_re_sub", ["quaternion"]], ["add", "theorem", "conj_fixed", ["quaternion"]], ["add", "theorem", "conj_im_i", ["quaternion"]], ["add", "theorem", "conj_im_j", ["quaternion"]], ["add", "theorem", "conj_im_k", ["quaternion"]], ["add", "theorem", "conj_mul", ["quaternion"]], ["add", "theorem", "conj_mul_conj", ["quaternion"]], ["add", "theorem", "conj_mul_eq_coe", ["quaternion"]], ["add", "theorem", "conj_mul_self", ["quaternion"]], ["add", "theorem", "conj_neg", ["quaternion"]], ["add", "theorem", "conj_one", ["quaternion"]], ["add", "theorem", "conj_re", ["quaternion"]], ["add", "theorem", "conj_smul", ["quaternion"]], ["add", "theorem", "conj_sub", ["quaternion"]], ["add", "theorem", "conj_zero", ["quaternion"]], ["add", "theorem", "eq_re_iff_mem_range_coe", ["quaternion"]], ["add", "theorem", "eq_re_of_eq_coe", ["quaternion"]], ["add", "theorem", "ext", ["quaternion"]], ["add", "theorem", "ext_iff", ["quaternion"]], ["add", "theorem", "mul_coe_eq_smul", ["quaternion"]], ["add", "theorem", "mul_conj_eq_coe", ["quaternion"]], ["add", "theorem", "mul_im_i", ["quaternion"]], ["add", "theorem", "mul_im_j", ["quaternion"]], ["add", "theorem", "mul_im_k", ["quaternion"]], ["add", "theorem", "mul_re", ["quaternion"]], ["add", "theorem", "neg_im_i", ["quaternion"]], ["add", "theorem", "neg_im_j", ["quaternion"]], ["add", "theorem", "neg_im_k", ["quaternion"]], ["add", "theorem", "neg_re", ["quaternion"]], ["add", "def", "norm_sq", ["quaternion"]], ["add", "theorem", "norm_sq_coe", ["quaternion"]], ["add", "theorem", "norm_sq_def'", ["quaternion"]], ["add", "theorem", "norm_sq_def", ["quaternion"]], ["add", "theorem", "norm_sq_div", ["quaternion"]], ["add", "theorem", "norm_sq_eq_zero", ["quaternion"]], ["add", "theorem", "norm_sq_inv", ["quaternion"]], ["add", "theorem", "norm_sq_le_zero", ["quaternion"]], ["add", "theorem", "norm_sq_ne_zero", ["quaternion"]], ["add", "theorem", "norm_sq_neg", ["quaternion"]], ["add", "theorem", "norm_sq_nonneg", ["quaternion"]], ["add", "theorem", "norm_sq_zero", ["quaternion"]], ["add", "theorem", "one_im_i", ["quaternion"]], ["add", "theorem", "one_im_j", ["quaternion"]], ["add", "theorem", "one_im_k", ["quaternion"]], ["add", "theorem", "one_re", ["quaternion"]], ["add", "theorem", "self_add_conj'", ["quaternion"]], ["add", "theorem", "self_add_conj", ["quaternion"]], ["add", "theorem", "self_mul_conj", ["quaternion"]], ["add", "theorem", "smul_coe", ["quaternion"]], ["add", "theorem", "smul_im_i", ["quaternion"]], ["add", "theorem", "smul_im_j", ["quaternion"]], ["add", "theorem", "smul_im_k", ["quaternion"]], ["add", "theorem", "smul_re", ["quaternion"]], ["add", "theorem", "sub_im_i", ["quaternion"]], ["add", "theorem", "sub_im_j", ["quaternion"]], ["add", "theorem", "sub_im_k", ["quaternion"]], ["add", "theorem", "sub_re", ["quaternion"]], ["add", "theorem", "zero_im_i", ["quaternion"]], ["add", "theorem", "zero_im_j", ["quaternion"]], ["add", "theorem", "zero_im_k", ["quaternion"]], ["add", "theorem", "zero_re", ["quaternion"]], ["add", "def", "quaternion", []], ["add", "theorem", "coe_add", ["quaternion_algebra"]], ["add", "theorem", "coe_algebra_map", ["quaternion_algebra"]], ["add", "theorem", "coe_commute", ["quaternion_algebra"]], ["add", "theorem", "coe_commutes", ["quaternion_algebra"]], ["add", "theorem", "coe_conj_alg_equiv", ["quaternion_algebra"]], ["add", "theorem", "coe_im_i", ["quaternion_algebra"]], ["add", "theorem", "coe_im_j", ["quaternion_algebra"]], ["add", "theorem", "coe_im_k", ["quaternion_algebra"]], ["add", "theorem", "coe_inj", ["quaternion_algebra"]], ["add", "theorem", "coe_injective", ["quaternion_algebra"]], ["add", "theorem", "coe_mul", ["quaternion_algebra"]], ["add", "theorem", "coe_mul_eq_smul", ["quaternion_algebra"]], ["add", "theorem", "coe_neg", ["quaternion_algebra"]], ["add", "theorem", "coe_one", ["quaternion_algebra"]], ["add", "theorem", "coe_re", ["quaternion_algebra"]], ["add", "theorem", "coe_sub", ["quaternion_algebra"]], ["add", "theorem", "coe_zero", ["quaternion_algebra"]], ["add", "theorem", "commute_conj_conj", ["quaternion_algebra"]], ["add", "theorem", "commute_conj_self", ["quaternion_algebra"]], ["add", "theorem", "commute_self_conj", ["quaternion_algebra"]], ["add", "def", "conj", ["quaternion_algebra"]], ["add", "theorem", "conj_add", ["quaternion_algebra"]], ["add", "theorem", "conj_add_self'", ["quaternion_algebra"]], ["add", "theorem", "conj_add_self", ["quaternion_algebra"]], ["add", "def", "conj_alg_equiv", ["quaternion_algebra"]], ["add", "theorem", "conj_coe", ["quaternion_algebra"]], ["add", "theorem", "conj_conj", ["quaternion_algebra"]], ["add", "theorem", "conj_conj_mul", ["quaternion_algebra"]], ["add", "theorem", "conj_eq_two_re_sub", ["quaternion_algebra"]], ["add", "theorem", "conj_fixed", ["quaternion_algebra"]], ["add", "theorem", "conj_mul", ["quaternion_algebra"]], ["add", "theorem", "conj_mul_conj", ["quaternion_algebra"]], ["add", "theorem", "conj_mul_eq_coe", ["quaternion_algebra"]], ["add", "theorem", "conj_neg", ["quaternion_algebra"]], ["add", "theorem", "conj_one", ["quaternion_algebra"]], ["add", "theorem", "conj_smul", ["quaternion_algebra"]], ["add", "theorem", "conj_sub", ["quaternion_algebra"]], ["add", "theorem", "conj_zero", ["quaternion_algebra"]], ["add", "theorem", "eq_re_iff_mem_range_coe", ["quaternion_algebra"]], ["add", "theorem", "eq_re_of_eq_coe", ["quaternion_algebra"]], ["add", "theorem", "im_i_conj", ["quaternion_algebra"]], ["add", "theorem", "im_j_conj", ["quaternion_algebra"]], ["add", "theorem", "im_k_conj", ["quaternion_algebra"]], ["add", "theorem", "eta", ["quaternion_algebra", "mk"]], ["add", "theorem", "mk_add_mk", ["quaternion_algebra"]], ["add", "theorem", "mk_mul_mk", ["quaternion_algebra"]], ["add", "theorem", "mk_sub_mk", ["quaternion_algebra"]], ["add", "theorem", "mul_coe_eq_smul", ["quaternion_algebra"]], ["add", "theorem", "mul_conj_eq_coe", ["quaternion_algebra"]], ["add", "theorem", "neg_mk", ["quaternion_algebra"]], ["add", "theorem", "re_conj", ["quaternion_algebra"]], ["add", "theorem", "self_add_conj'", ["quaternion_algebra"]], ["add", "theorem", "self_add_conj", ["quaternion_algebra"]], ["add", "theorem", "smul_coe", ["quaternion_algebra"]], ["add", "theorem", "smul_im_i", ["quaternion_algebra"]], ["add", "theorem", "smul_im_j", ["quaternion_algebra"]], ["add", "theorem", "smul_im_k", ["quaternion_algebra"]], ["add", "theorem", "smul_re", ["quaternion_algebra"]], ["add", "structure", "quaternion_algebra", []]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": []}]}, {"timestamp": 1604453813, "sha": "16e38718", "message": "chore(scripts): update nolints.txt (#4898)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1604449210, "sha": "23a2767d", "message": "feat(category_theory/yoneda): type level yoneda equivalence (#4889)\nBroken off from #4608.", "changes": [{"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["add", "def", "yoneda_equiv", ["category_theory"]], ["add", "theorem", "yoneda_equiv_apply", ["category_theory"]], ["add", "theorem", "yoneda_equiv_naturality", ["category_theory"]], ["add", "theorem", "yoneda_equiv_symm_app_apply", ["category_theory"]]]}]}, {"timestamp": 1604439018, "sha": "505097f4", "message": "feat(order): countable categoricity of dense linear orders (#2860)\nWe construct an order isomorphism between any two countable, nonempty, dense linear orders without endpoints, using the back-and-forth method.", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "cmp_eq_cmp_symm", []], ["add", "theorem", "cmp_eq_eq_iff", []], ["add", "theorem", "cmp_eq_gt_iff", []], ["add", "theorem", "cmp_eq_lt_iff", []], ["add", "theorem", "cmp_self_eq_eq", []], ["add", "theorem", "le_iff_le_of_cmp_eq_cmp", []], ["add", "theorem", "lt_iff_lt_of_cmp_eq_cmp", []]]}, {"oldPath": null, "newPath": "src/order/countable_dense_linear_order.lean", "changes": [["add", "def", "embedding_from_countable_to_dense", ["order"]], ["add", "theorem", "exists_between_finsets", ["order"]], ["add", "def", "iso_of_countable_dense", ["order"]], ["add", "def", "defined_at_left", ["order", "partial_iso"]], ["add", "def", "defined_at_right", ["order", "partial_iso"]], ["add", "theorem", "exists_across", ["order", "partial_iso"]], ["add", "def", "fun_of_ideal", ["order", "partial_iso"]], ["add", "def", "inv_of_ideal", ["order", "partial_iso"]], ["add", "def", "partial_iso", ["order"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "of_strict_mono", ["order_embedding"]], ["add", "def", "of_cmp_eq_cmp", ["order_iso"]]]}]}, {"timestamp": 1604435863, "sha": "712a0b75", "message": "chore(algebra/lie): adjoint rep of lie algebra uses lowercase `ad` (#4891)\nThe uppercase is for Lie groups", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["del", "def", "Ad", ["lie_algebra"]], ["add", "def", "ad", ["lie_algebra"]]]}]}, {"timestamp": 1604426217, "sha": "e88a5bb5", "message": "feat(*): assorted prereqs for cyclotomic polynomials (#4887)\nThis is hopefully my last preparatory PR for cyclotomic polynomials. It was in [4869](https://github.com/leanprover-community/mathlib/pull/4869) .", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "mem_nth_roots_finset", ["polynomial"]], ["mod", "def", "nth_roots_finset", ["polynomial"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["mod", "theorem", "filter_dvd_eq_divisors", ["nat"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["mod", "theorem", "card_nth_roots", ["is_primitive_root"]], ["mod", "theorem", "card_nth_roots_finset", ["is_primitive_root"]], ["mod", "theorem", "nth_roots_nodup", ["is_primitive_root"]], ["add", "theorem", "nth_roots_one_eq_bind_primitive_roots'", ["is_primitive_root"]], ["mod", "theorem", "nth_roots_one_eq_bind_primitive_roots", ["is_primitive_root"]], ["add", "theorem", "primitive_root_one", ["is_primitive_root"]], ["add", "theorem", "primitive_roots_zero", ["is_primitive_root"]]]}]}, {"timestamp": 1604426214, "sha": "b37d4a3d", "message": "feat(category_theory/limits/types): ext iff lemma (#4883)\nA little lemma which sometimes makes it easier to work with limits in type.", "changes": [{"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "limit_ext_iff", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1604426212, "sha": "6bed7d4f", "message": "fix(tactic/interactive): issue where long term tooltips break layout (#4882)\nFor issue description see https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/widget.20v.20long.20term.20names\nBasically the problem is that if the little 'argument pills' in the tooltip are too long, then there is a fight between the expression linebreaking algorithm and the pill linebreaking algorithm and something gets messed up.\nA first attempt to fix this is to use flexbox for laying out the pills.\nStill some issues with expressions linebreaking weirdly to sort out before this should be pulled.\nNeed to find a mwe that I can put in a file without a huge dependency tree.", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1604426210, "sha": "4f8c490f", "message": "feat(tactic/mk_iff_of_inductive_prop): mk_iff attribute (#4863)\nThis attribute should make `mk_iff_of_inductive_prop` easier to use.", "changes": [{"oldPath": "archive/imo/imo1981_q3.lean", "newPath": "archive/imo/imo1981_q3.lean", "changes": [["mod", "structure", "problem_predicate", []]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "inductive", "rel", ["multiset"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["mod", "inductive", "r", ["perfect_closure"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["mod", "inductive", "refl_gen", ["relation"]], ["mod", "inductive", "trans_gen", ["relation"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/mk_iff_of_inductive_prop.lean", "newPath": "src/tactic/mk_iff_of_inductive_prop.lean", "changes": [["add", "def", "list_option_merge", ["mk_iff"]]]}, {"oldPath": "test/mk_iff_of_inductive.lean", "newPath": "test/mk_iff_of_inductive.lean", "changes": [["add", "structure", "foo2", []], ["add", "structure", "foo", []]]}]}, {"timestamp": 1604418610, "sha": "918e28ca", "message": "feat(category_theory/limits/types): explicit description of equalizers in Type (#4880)\nCf https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/concrete.20limits.20in.20Type.\nAdds equivalent conditions for a fork in Type to be a equalizer, and a proof that the subtype is an equalizer.\n(cc: @adamtopaz @kbuzzard)", "changes": [{"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "def", "equalizer_limit", ["category_theory", "limits", "types"]], ["add", "theorem", "unique_of_type_equalizer", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1604418608, "sha": "34c3668e", "message": "chore(data/set/intervals/ord_connected): make it more useful as a typeclass (#4879)\n* Add `protected lemma set.Icc_subset` that looks for\n `ord_connected s` instance.\n* Add `instance` versions to more lemmas.\n* Add `ord_connected_pi`.", "changes": [{"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["mod", "theorem", "ord_connected_Icc", ["set"]], ["mod", "theorem", "ord_connected_Ici", ["set"]], ["mod", "theorem", "ord_connected_Ico", ["set"]], ["mod", "theorem", "ord_connected_Iic", ["set"]], ["mod", "theorem", "ord_connected_Iio", ["set"]], ["mod", "theorem", "ord_connected_Ioc", ["set"]], ["mod", "theorem", "ord_connected_Ioi", ["set"]], ["mod", "theorem", "ord_connected_Ioo", ["set"]], ["mod", "theorem", "ord_connected_empty", ["set"]], ["mod", "theorem", "ord_connected_interval", ["set"]], ["add", "theorem", "ord_connected_pi", ["set"]], ["mod", "theorem", "ord_connected_singleton", ["set"]], ["mod", "theorem", "ord_connected_univ", ["set"]]]}]}, {"timestamp": 1604418606, "sha": "9851a886", "message": "feat(*/multilinear): define `(continuous_)multilinear_map.restrict_scalars` (#4872)\nI'm going to use these definitions to prove\n`times_cont_diff_at.restrict_scalars` etc.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "continuous_restrict_scalars", ["continuous_multilinear_map"]], ["add", "theorem", "norm_restrict_scalars", ["continuous_multilinear_map"]], ["mod", "theorem", "op_norm_smul_le", ["continuous_multilinear_map"]], ["add", "def", "restrict_scalars_linear", ["continuous_multilinear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "coe_restrict_scalars", ["multilinear_map"]], ["add", "def", "restrict_scalars", ["multilinear_map"]], ["mod", "theorem", "smul_apply", ["multilinear_map"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["mod", "theorem", "comp_continuous_multilinear_map_coe", ["continuous_linear_map"]], ["add", "theorem", "coe_restrict_scalars", ["continuous_multilinear_map"]], ["add", "def", "restrict_scalars", ["continuous_multilinear_map"]], ["mod", "theorem", "smul_apply", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1604418604, "sha": "63d109fe", "message": "chore(category_theory/limits): Use `lim_map` over `lim.map` (#4856)\nModify the simp-normal form for `lim.map` to be `lim_map` instead, and express lemmas in terms of `lim_map` instead, as well as use it in special shapes so that the assumptions can be weakened.", "changes": [{"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "lim_map_eq_lim_map", ["category_theory", "limits"]], ["mod", "theorem", "lift_map", ["category_theory", "limits", "limit"]], ["del", "theorem", "map_π", ["category_theory", "limits", "limit"]], ["mod", "theorem", "post_π", ["category_theory", "limits", "limit"]], ["mod", "theorem", "pre_π", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["mod", "def", "map", ["category_theory", "limits", "pi"]], ["mod", "def", "map", ["category_theory", "limits", "sigma"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/limits.lean", "newPath": "src/category_theory/monoidal/limits.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": []}]}, {"timestamp": 1604418602, "sha": "b26fc59f", "message": "feat(category_theory/limits/shapes/products): pi comparison morphism (#4855)", "changes": [{"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "theorem", "map_lift_pi_comparison", ["category_theory", "limits"]], ["add", "def", "pi_comparison", ["category_theory", "limits"]], ["add", "theorem", "pi_comparison_comp_π", ["category_theory", "limits"]], ["add", "def", "sigma_comparison", ["category_theory", "limits"]], ["add", "theorem", "sigma_comparison_map_desc", ["category_theory", "limits"]], ["add", "theorem", "ι_comp_sigma_comparison", ["category_theory", "limits"]]]}]}, {"timestamp": 1604413045, "sha": "52756281", "message": "feat(algebra/operations): add three lemmas (#4864)\nAdd lemmas `one_le_inv`, `self_le_self_inv` and `self_inv_le_one`", "changes": [{"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": [["add", "theorem", "le_self_mul_one_div", ["submodule"]], ["add", "theorem", "mul_one_div_le_one", ["submodule"]], ["add", "theorem", "one_le_one_div", ["submodule"]]]}]}, {"timestamp": 1604395605, "sha": "c2b6220c", "message": "feat(linear_algebra/matrix): `det (reindex e e A) = det A` (#4875)\nThis PR includes four flavours of this lemma: `det_reindex_self'` is the `simp` lemma that doesn't include the actual term `reindex` as a subexpression (because that would be already `simp`ed away by `reindex_apply`). `det_reindex_self`, `det_reindex_linear_equiv_self` and `det_reindex_alg_equiv` include their respective function in the lemma statement.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "perm_congr_apply", ["equiv"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "sign_perm_congr", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "det_reindex_alg_equiv", ["matrix"]], ["add", "theorem", "det_reindex_linear_equiv_self", ["matrix"]], ["add", "theorem", "det_reindex_self'", ["matrix"]], ["add", "theorem", "det_reindex_self", ["matrix"]]]}]}, {"timestamp": 1604365601, "sha": "57ee2162", "message": "chore(scripts): update nolints.txt (#4884)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604355846, "sha": "0e4f8f41", "message": "chore(scripts): typo in yaml_check (#4881)", "changes": [{"oldPath": "scripts/yaml_check.lean", "newPath": "scripts/yaml_check.lean", "changes": []}]}, {"timestamp": 1604355845, "sha": "dae87bcd", "message": "chore(data/finsupp/basic): Remove finsupp.leval which duplicates finsupp.lapply (#4876)", "changes": [{"oldPath": "src/algebra/big_operators/finsupp.lean", "newPath": "src/algebra/big_operators/finsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "def", "apply_add_hom", ["finsupp"]], ["del", "theorem", "coe_leval'", ["finsupp"]], ["del", "theorem", "coe_leval", ["finsupp"]], ["del", "def", "eval_add_hom", ["finsupp"]], ["del", "theorem", "eval_add_hom_apply", ["finsupp"]], ["del", "def", "leval'", ["finsupp"]], ["del", "def", "leval", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}]}, {"timestamp": 1604348862, "sha": "5334f48b", "message": "chore(data/fintype/card): add a few lemmas (#4877)\nProve a few versions of `(∏ i in s, f i) * (∏ i in sᶜ, f i) = ∏ i, f i`", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_compl_mul_prod", ["finset"]], ["add", "theorem", "prod_mul_prod_compl", ["finset"]], ["add", "theorem", "prod_mul_prod", ["is_compl"]]]}]}, {"timestamp": 1604342702, "sha": "13a104d9", "message": "chore({data,linear_algebra}/dfinsupp): Move linear_algebra stuff to its own file (#4873)\nThis makes the layout of files about `dfinsupp` resemble those of `finsupp` a little better.\nThis also:\n* Renames type arguments to match the names of those in finsupp\n* Adjusts argument explicitness to match those in finsupp\n* Adds `dfinsupp.lapply` to match `finsupp.lapply`", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["del", "theorem", "lhom_ext'", ["dfinsupp"]], ["del", "theorem", "lhom_ext", ["dfinsupp"]], ["del", "def", "lmk", ["dfinsupp"]], ["del", "theorem", "lmk_apply", ["dfinsupp"]], ["del", "def", "lsingle", ["dfinsupp"]], ["del", "theorem", "lsingle_apply", ["dfinsupp"]], ["del", "def", "lsum", ["dfinsupp"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/dfinsupp.lean", "changes": [["add", "def", "lapply", ["dfinsupp"]], ["add", "theorem", "lapply_apply", ["dfinsupp"]], ["add", "theorem", "lhom_ext'", ["dfinsupp"]], ["add", "theorem", "lhom_ext", ["dfinsupp"]], ["add", "def", "lmk", ["dfinsupp"]], ["add", "theorem", "lmk_apply", ["dfinsupp"]], ["add", "def", "lsingle", ["dfinsupp"]], ["add", "theorem", "lsingle_apply", ["dfinsupp"]], ["add", "def", "lsum", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}]}, {"timestamp": 1604337443, "sha": "6587e840", "message": "feat(algebra/algebra/subalgebra): subalgebras, when seen as submodules, are idempotent (#4854)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "mul_self", ["subalgebra"]]]}]}, {"timestamp": 1604328242, "sha": "0aa6aed9", "message": "chore(order/basic): move `strict_mono_coe`to `subtype` NS (#4870)\nAlso add `subtype.mono_coe`", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "strict_mono_coe", []], ["add", "theorem", "mono_coe", ["subtype"]], ["add", "theorem", "strict_mono_coe", ["subtype"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1604292903, "sha": "309df10a", "message": "refactor(data/list/basic,...): more explicit args (#4866)\nThis makes the `p` in most lemmas involving the following functions explicit, following the usual explicitness conventions:\n- `list.filter`,\n- `list.countp`,\n- `list.take_while`,\n- `multiset.filter`,\n- `multiset.countp`,\n- `finset.filter`", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/combinatorics/partition.lean", "newPath": "src/combinatorics/partition.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "def", "filter", ["finset"]], ["mod", "theorem", "filter_empty", ["finset"]], ["mod", "theorem", "filter_filter", ["finset"]], ["mod", "theorem", "filter_inter", ["finset"]], ["mod", "theorem", "filter_subset", ["finset"]], ["mod", "theorem", "filter_union", ["finset"]], ["mod", "theorem", "filter_union_right", ["finset"]], ["mod", "theorem", "inter_filter", ["finset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "countp_nil", ["list"]], ["mod", "theorem", "filter_filter", ["list"]], ["mod", "theorem", "span_eq_take_drop", ["list"]], ["mod", "theorem", "take_while_append_drop", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "coe_count", ["multiset"]], ["mod", "theorem", "coe_filter", ["multiset"]], ["mod", "def", "countp", ["multiset"]], ["mod", "theorem", "countp_filter", ["multiset"]], ["mod", "theorem", "countp_zero", ["multiset"]], ["mod", "def", "filter", ["multiset"]], ["mod", "theorem", "filter_add", ["multiset"]], ["mod", "theorem", "filter_add_filter", ["multiset"]], ["mod", "theorem", "filter_filter", ["multiset"]], ["mod", "theorem", "filter_map_eq_filter", ["multiset"]], ["mod", "theorem", "filter_map_filter", ["multiset"]], ["mod", "theorem", "filter_zero", ["multiset"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1604292901, "sha": "556079b4", "message": "feat(ring_theory/polynomial/content): monic polynomials are primitive (#4862)\nAdds the lemma `monic.is_primitive`.", "changes": [{"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": [["add", "theorem", "is_primitive", ["polynomial", "monic"]]]}]}, {"timestamp": 1604283046, "sha": "ecdc3197", "message": "fix(tactic/simpa): reflect more simp errors (#4865)\nfixes #2061", "changes": [{"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}, {"oldPath": "src/data/matrix/char_p.lean", "newPath": "src/data/matrix/char_p.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": []}, {"oldPath": "src/tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}]}, {"timestamp": 1604279575, "sha": "7c8868d8", "message": "chore(scripts): update nolints.txt (#4868)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604253351, "sha": "4aa087aa", "message": "doc(*): work around markdown2 bug for now (#4842)", "changes": [{"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/control/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1604192836, "sha": "7a624b88", "message": "chore(scripts): update nolints.txt (#4860)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604184252, "sha": "6f7c5394", "message": "docs(order/complete_lattice): make two docstrings more detailed (#4859)\nFollowing [discussion](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Constructing.20a.20complete.20lattice), clarify information about how to construct a complete lattice while preserving good definitional equalities.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}]}, {"timestamp": 1604175751, "sha": "51cbb836", "message": "refactor(tactic/norm_num): move norm_num extensions (#4822)\n#4820 adds the long awaited ability for `norm_num` to be extended in other files. There are two norm_num extensions currently in mathlib: `norm_digits`, which was previously exposed as a standalone tactic, and `eval_prime`, which was a part of `norm_num` and so caused `tactic.norm_num` to depend on `data.nat.prime`. This PR turns both of these into norm_num extensions, and changes the dependencies so that `data.nat.prime` can import `norm_num` rather than the other way around (which required splitting `pnat` primality and gcd facts to their own file).", "changes": [{"oldPath": "archive/imo/imo1959_q1.lean", "newPath": "archive/imo/imo1959_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1960_q1.lean", "newPath": "archive/imo/imo1960_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1969_q1.lean", "newPath": "archive/imo/imo1969_q1.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "is_prime_helper", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_bit0", ["tactic", "norm_num"]], ["add", "theorem", "n_pos", ["tactic", "norm_num", "min_fac_helper"]], ["add", "def", "min_fac_helper", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_helper_0", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_helper_1", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_helper_2", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_helper_3", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_helper_4", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_helper_5", ["tactic", "norm_num"]], ["add", "theorem", "min_fac_ne_bit0", ["tactic", "norm_num"]], ["add", "theorem", "not_prime_helper", ["tactic", "norm_num"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["del", "theorem", "is_prime_helper", ["norm_num"]], ["del", "theorem", "min_fac_bit0", ["norm_num"]], ["del", "theorem", "n_pos", ["norm_num", "min_fac_helper"]], ["del", "def", "min_fac_helper", ["norm_num"]], ["del", "theorem", "min_fac_helper_0", ["norm_num"]], ["del", "theorem", "min_fac_helper_1", ["norm_num"]], ["del", "theorem", "min_fac_helper_2", ["norm_num"]], ["del", "theorem", "min_fac_helper_3", ["norm_num"]], ["del", "theorem", "min_fac_helper_4", ["norm_num"]], ["del", "theorem", "min_fac_helper_5", ["norm_num"]], ["del", "theorem", "min_fac_ne_bit0", ["norm_num"]], ["del", "theorem", "not_prime_helper", ["norm_num"]]]}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}, {"oldPath": "test/norm_digits.lean", "newPath": "test/norm_digits.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1604166086, "sha": "be161d11", "message": "feat(category_theory/sites): functor inclusion constructions (#4845)", "changes": [{"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "def", "sieve_of_subfunctor", ["category_theory", "sieve"]], ["add", "theorem", "sieve_of_subfunctor_apply", ["category_theory", "sieve"]], ["add", "theorem", "sieve_of_subfunctor_functor_inclusion", ["category_theory", "sieve"]]]}]}, {"timestamp": 1604166084, "sha": "d91c8785", "message": "chore(group_theory/group_action): introduce `smul_comm_class` (#4770)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "theorem", "smul_apply", ["linear_map", "algebra_module"]], ["del", "def", "restrict_scalars", ["linear_map"]], ["del", "theorem", "smul_apply'", ["linear_map"]], ["del", "theorem", "map_smul_eq_smul_map", []]]}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "theorem", "map_smul_of_tower", ["linear_map"]], ["add", "def", "restrict_scalars", ["linear_map"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["del", "theorem", "mul_smul", []], ["mod", "theorem", "smul_assoc", []], ["del", "theorem", "smul_comm", []], ["add", "theorem", "symm", ["smul_comm_class"]], ["add", "theorem", "smul_one_smul", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "applyₗ'", ["linear_map"]], ["mod", "theorem", "smul_apply", ["linear_map"]], ["mod", "theorem", "smul_comp", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1604156869, "sha": "9a03bdf1", "message": "chore(algebra/ordered_group): use implicit args, add `add_eq_coe` (#4853)\n* Use implicit arguments in various `iff` lemmas about `with_top`.\n* Add `add_eq_coe`.\n* Rewrite `with_top.ordered_add_comm_monoid` moving `begin .. end` blocks inside the structure.\nThis way we don't depend on the fact that `refine` doesn't introduce any `id`s and it's easier to see right away which block proves which statement.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "add_eq_coe", ["with_top"]], ["mod", "theorem", "add_eq_top", ["with_top"]], ["mod", "theorem", "add_lt_top", ["with_top"]], ["mod", "theorem", "add_top", ["with_top"]], ["mod", "theorem", "top_add", ["with_top"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "add_eq_top", ["ennreal"]], ["mod", "theorem", "add_lt_top", ["ennreal"]], ["add", "theorem", "coe_finset_sup", ["ennreal"]], ["mod", "theorem", "coe_le_iff", ["ennreal"]], ["mod", "theorem", "le_coe_iff", ["ennreal"]], ["mod", "theorem", "lt_iff_exists_coe", ["ennreal"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_le_iff", ["with_top"]], ["add", "theorem", "coe_lt_iff", ["with_top"]], ["mod", "theorem", "le_coe_iff", ["with_top"]], ["mod", "theorem", "lt_iff_exists_coe", ["with_top"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1604151044, "sha": "e14c3782", "message": "refactor(order/filter): move some proofs to `bases` (#3478)\nMove some proofs to `order/filter/bases` and add `filter.has_basis` versions.\nNon-bc API changes:\n* `filter.inf_ne_bot_iff`; change `∀ {U V}, U ∈ f → V ∈ g → ...` to `∀ ⦃U⦄, U ∈ f → ∀ ⦃V⦄, V ∈ g → ...`\n so that `simp` lemmas about `∀ U ∈ f` can further simplify the result;\n* `filter.inf_eq_bot_iff`: similarly, change `∃ U V, ...` to `∃ (U ∈ f) (V ∈ g), ...`\n* `cluster_pt_iff`: similarly, change `∀ {U V : set α}, U ∈ 𝓝 x → V ∈ F → ...` to\n `∀ ⦃U : set α⦄ (hU : U ∈ 𝓝 x) ⦃V⦄ (hV : V ∈ F), ...`", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "inf_basis_ne_bot_iff", ["filter", "has_basis"]], ["add", "theorem", "inf_ne_bot_iff", ["filter", "has_basis"]], ["add", "theorem", "inf_principal_ne_bot_iff", ["filter", "has_basis"]], ["add", "theorem", "inf_eq_bot_iff", ["filter"]], ["add", "theorem", "inf_ne_bot_iff", ["filter"]], ["add", "theorem", "inf_ne_bot_iff_frequently_left", ["filter"]], ["add", "theorem", "inf_ne_bot_iff_frequently_right", ["filter"]], ["add", "theorem", "inf_principal_ne_bot_iff", ["filter"]], ["add", "theorem", "le_iff_forall_disjoint_principal_compl", ["filter"]], ["add", "theorem", "le_iff_forall_inf_principal_compl", ["filter"]], ["add", "theorem", "mem_iff_disjoint_principal_compl", ["filter"]], ["add", "theorem", "mem_iff_inf_principal_compl", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "inf_eq_bot_iff", ["filter"]], ["del", "theorem", "inf_ne_bot_iff", ["filter"]], ["del", "theorem", "inf_ne_bot_iff_frequently_left", ["filter"]], ["del", "theorem", "inf_ne_bot_iff_frequently_right", ["filter"]], ["del", "theorem", "inf_principal_ne_bot_iff", ["filter"]], ["del", "theorem", "le_iff_forall_inf_principal_compl", ["filter"]], ["del", "theorem", "mem_iff_inf_principal_compl", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1604133842, "sha": "f9c8abe3", "message": "chore(data/finset/basic): a few lemmas about `finset.piecewise` (#4852)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "le_piecewise_of_le_of_le", ["finset"]], ["add", "theorem", "piecewise_cases", ["finset"]], ["add", "theorem", "piecewise_congr", ["finset"]], ["add", "theorem", "piecewise_le_of_le_of_le", ["finset"]], ["add", "theorem", "piecewise_mem_set_pi", ["finset"]], ["add", "theorem", "piecewise_singleton", ["finset"]], ["add", "theorem", "update_piecewise", ["finset"]], ["add", "theorem", "update_piecewise_of_mem", ["finset"]], ["add", "theorem", "update_piecewise_of_not_mem", ["finset"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "piecewise_mem_pi", ["set"]]]}]}, {"timestamp": 1604133840, "sha": "7756265e", "message": "chore(linear_algebra/affine_space/ordered): compare endpoints to midpoint (#4851)", "changes": [{"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": [["add", "theorem", "left_le_midpoint", []], ["add", "theorem", "midpoint_le_left", []], ["add", "theorem", "midpoint_le_right", []], ["add", "theorem", "right_le_midpoint", []]]}]}, {"timestamp": 1604133839, "sha": "1f616214", "message": "feat(linear_algebra/affine_space/affine_map): add `affine_map.proj` (#4850)", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "pi_line_map_apply", ["affine_map"]], ["add", "def", "proj", ["affine_map"]], ["add", "theorem", "proj_apply", ["affine_map"]], ["add", "theorem", "proj_linear", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/affine_space/midpoint.lean", "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": [["add", "theorem", "pi_midpoint_apply", []]]}]}, {"timestamp": 1604133837, "sha": "6a449305", "message": "refactor(data/pnat): move data.pnat.prime (#4839)\nRemove the dependency `data.pnat.basic -> data.nat.prime`. Needed for #4822.", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["del", "theorem", "coe_pnat_inj", ["nat", "primes"]], ["del", "theorem", "coe_pnat_nat", ["nat", "primes"]], ["del", "theorem", "coprime_dvd_left", ["pnat", "coprime"]], ["del", "theorem", "factor_eq_gcd_left", ["pnat", "coprime"]], ["del", "theorem", "factor_eq_gcd_left_right", ["pnat", "coprime"]], ["del", "theorem", "factor_eq_gcd_right", ["pnat", "coprime"]], ["del", "theorem", "factor_eq_gcd_right_right", ["pnat", "coprime"]], ["del", "theorem", "gcd_mul", ["pnat", "coprime"]], ["del", "theorem", "gcd_mul_left_cancel", ["pnat", "coprime"]], ["del", "theorem", "gcd_mul_left_cancel_right", ["pnat", "coprime"]], ["del", "theorem", "gcd_mul_right_cancel", ["pnat", "coprime"]], ["del", "theorem", "gcd_mul_right_cancel_right", ["pnat", "coprime"]], ["del", "theorem", "mul", ["pnat", "coprime"]], ["del", "theorem", "mul_right", ["pnat", "coprime"]], ["del", "theorem", "pow", ["pnat", "coprime"]], ["del", "theorem", "symm", ["pnat", "coprime"]], ["del", "def", "coprime", ["pnat"]], ["del", "theorem", "coprime_coe", ["pnat"]], ["del", "theorem", "coprime_one", ["pnat"]], ["del", "theorem", "dvd_gcd", ["pnat"]], ["del", "theorem", "dvd_lcm_left", ["pnat"]], ["del", "theorem", "dvd_lcm_right", ["pnat"]], ["del", "theorem", "dvd_prime", ["pnat"]], ["del", "theorem", "eq_one_of_lt_two", ["pnat"]], ["del", "theorem", "exists_prime_and_dvd", ["pnat"]], ["del", "def", "gcd", ["pnat"]], ["del", "theorem", "gcd_coe", ["pnat"]], ["del", "theorem", "gcd_comm", ["pnat"]], ["del", "theorem", "gcd_dvd_left", ["pnat"]], ["del", "theorem", "gcd_dvd_right", ["pnat"]], ["del", "theorem", "gcd_eq_left", ["pnat"]], ["del", "theorem", "gcd_eq_left_iff_dvd", ["pnat"]], ["del", "theorem", "gcd_eq_right_iff_dvd", ["pnat"]], ["del", "theorem", "gcd_mul_lcm", ["pnat"]], ["del", "theorem", "gcd_one", ["pnat"]], ["del", "def", "lcm", ["pnat"]], ["del", "theorem", "lcm_coe", ["pnat"]], ["del", "theorem", "lcm_dvd", ["pnat"]], ["del", "theorem", "not_prime_one", ["pnat"]], ["del", "theorem", "one_coprime", ["pnat"]], ["del", "theorem", "one_gcd", ["pnat"]], ["del", "theorem", "ne_one", ["pnat", "prime"]], ["del", "theorem", "not_dvd_one", ["pnat", "prime"]], ["del", "theorem", "one_lt", ["pnat", "prime"]], ["del", "def", "prime", ["pnat"]], ["del", "theorem", "prime_two", ["pnat"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/pnat/prime.lean", "changes": [["add", "theorem", "coe_pnat_inj", ["nat", "primes"]], ["add", "theorem", "coe_pnat_nat", ["nat", "primes"]], ["add", "theorem", "coprime_dvd_left", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_left", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_left_right", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_right", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_right_right", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_left_cancel", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_left_cancel_right", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_right_cancel", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_right_cancel_right", ["pnat", "coprime"]], ["add", "theorem", "mul", ["pnat", "coprime"]], ["add", "theorem", "mul_right", ["pnat", "coprime"]], ["add", "theorem", "pow", ["pnat", "coprime"]], ["add", "theorem", "symm", ["pnat", "coprime"]], ["add", "def", "coprime", ["pnat"]], ["add", "theorem", "coprime_coe", ["pnat"]], ["add", "theorem", "coprime_one", ["pnat"]], ["add", "theorem", "dvd_gcd", ["pnat"]], ["add", "theorem", "dvd_lcm_left", ["pnat"]], ["add", "theorem", "dvd_lcm_right", ["pnat"]], ["add", "theorem", "dvd_prime", ["pnat"]], ["add", "theorem", "eq_one_of_lt_two", ["pnat"]], ["add", "theorem", "exists_prime_and_dvd", ["pnat"]], ["add", "def", "gcd", ["pnat"]], ["add", "theorem", "gcd_coe", ["pnat"]], ["add", "theorem", "gcd_comm", ["pnat"]], ["add", "theorem", "gcd_dvd_left", ["pnat"]], ["add", "theorem", "gcd_dvd_right", ["pnat"]], ["add", "theorem", "gcd_eq_left", ["pnat"]], ["add", "theorem", "gcd_eq_left_iff_dvd", ["pnat"]], ["add", "theorem", "gcd_eq_right_iff_dvd", ["pnat"]], ["add", "theorem", "gcd_mul_lcm", ["pnat"]], ["add", "theorem", "gcd_one", ["pnat"]], ["add", "def", "lcm", ["pnat"]], ["add", "theorem", "lcm_coe", ["pnat"]], ["add", "theorem", "lcm_dvd", ["pnat"]], ["add", "theorem", "not_prime_one", ["pnat"]], ["add", "theorem", "one_coprime", ["pnat"]], ["add", "theorem", "one_gcd", ["pnat"]], ["add", "theorem", "ne_one", ["pnat", "prime"]], ["add", "theorem", "not_dvd_one", ["pnat", "prime"]], ["add", "theorem", "one_lt", ["pnat", "prime"]], ["add", "def", "prime", ["pnat"]], ["add", "theorem", "prime_two", ["pnat"]]]}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1604133835, "sha": "3b2c97f9", "message": "feat(data/dfinsupp): Port `finsupp.lsum` and lemmas about `lift_add_hom` (#4833)\nThis then removes the proofs of any `direct_sum` lemmas which become equivalent to the `lift_add_hom` lemmas", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "comp_lift_add_hom", ["dfinsupp"]], ["add", "theorem", "lhom_ext'", ["dfinsupp"]], ["add", "theorem", "lhom_ext", ["dfinsupp"]], ["add", "theorem", "lift_add_hom_apply_single", ["dfinsupp"]], ["add", "theorem", "lift_add_hom_comp_single", ["dfinsupp"]], ["add", "theorem", "lift_add_hom_single_add_hom", ["dfinsupp"]], ["add", "def", "lsum", ["dfinsupp"]], ["add", "theorem", "sum_add_hom_comp_single", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1604133833, "sha": "17697a60", "message": "feat(data/dfinsupp): Add dfinsupp.single_eq_single_iff, and subtype.heq_iff_coe_eq (#4810)\nThis ought to make working with dfinsupps over subtypes easier", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "single_eq_single_iff", ["dfinsupp"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "heq_iff_coe_eq", ["subtype"]]]}]}, {"timestamp": 1604125108, "sha": "67c2b5a0", "message": "feat(analysis/normed_space/add_torsor): distance to midpoint (#4849)", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "dist_center_homothety", []], ["add", "theorem", "dist_homothety_center", []], ["add", "theorem", "dist_homothety_self", []], ["add", "theorem", "dist_left_midpoint", []], ["add", "theorem", "dist_midpoint_left", []], ["add", "theorem", "dist_midpoint_right", []], ["add", "theorem", "dist_right_midpoint", []], ["add", "theorem", "dist_self_homothety", []], ["add", "theorem", "dist_vadd_left", []], ["add", "theorem", "dist_vadd_right", []]]}]}, {"timestamp": 1604125105, "sha": "1521da68", "message": "feat(order/conditionally_complete_lattice): nested intervals lemma (#4848)\n* Add a few versions of the nested intervals lemma.\n* Add `pi`-instance for `conditionally_complete_lattice`.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "csupr_mem_Inter_Icc_of_mono_decr_Icc", []], ["add", "theorem", "csupr_mem_Inter_Icc_of_mono_decr_Icc_nat", []], ["add", "theorem", "csupr_mem_Inter_Icc_of_mono_incr_of_mono_decr", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "forall_le_of_monotone_of_mono_decr", []]]}]}, {"timestamp": 1604125104, "sha": "f5fd2186", "message": "feat(algebra/module/ordered): add pi instance (#4847)", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}]}, {"timestamp": 1604125101, "sha": "6fc35175", "message": "feat(category_theory/sites): generate lemmas (#4840)\nA couple of simple lemmas about the sieve generated by certain presieves.", "changes": [{"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "theorem", "generate_of_contains_split_epi", ["category_theory", "sieve"]], ["add", "theorem", "generate_of_singleton_split_epi", ["category_theory", "sieve"]], ["add", "theorem", "generate_top", ["category_theory", "sieve"]], ["add", "theorem", "le_generate", ["category_theory", "sieve"]]]}]}, {"timestamp": 1604125099, "sha": "517f0b5c", "message": "feat(ring_theory/polynomial/basic): prerequisites for galois_definition (#4829)", "changes": [{"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "as_sum_range'", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "def", "degree_lt_equiv", ["polynomial"]]]}]}, {"timestamp": 1604125096, "sha": "0f39d7ad", "message": "feat(data/prod): comp_map (#4826)", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "map_comp_map", ["prod"]], ["add", "theorem", "map_map", ["prod"]]]}]}, {"timestamp": 1604120020, "sha": "2283cf06", "message": "chore(order/filter/bases): golf a proof (#4834)\n* rename `filter.has_basis.forall_nonempty_iff_ne_bot` to\n `filter.has_basis.ne_bot_iff`, swap LHS with RHS;\n* add `filter.has_basis.eq_bot_iff`;\n* golf the proof of `filter.has_basis.ne_bot` using `filter.has_basis.forall_iff`.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "eq_bot_iff", ["filter", "has_basis"]], ["del", "theorem", "forall_nonempty_iff_ne_bot", ["filter", "has_basis"]], ["add", "theorem", "ne_bot_iff", ["filter", "has_basis"]]]}]}, {"timestamp": 1604110029, "sha": "94fa9058", "message": "feat(analysis/calculus/times_cont_diff): differentiability of field inverse (#4795)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "inverse_eq_has_inv", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "div", ["times_cont_diff"]], ["add", "theorem", "pow", ["times_cont_diff"]], ["mod", "theorem", "comp", ["times_cont_diff_at"]], ["add", "theorem", "comp_times_cont_diff_within_at", ["times_cont_diff_at"]], ["add", "theorem", "congr_of_eventually_eq", ["times_cont_diff_at"]], ["add", "theorem", "div", ["times_cont_diff_at"]], ["add", "theorem", "inv", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_at_id", []], ["add", "theorem", "times_cont_diff_at_inv", []], ["add", "theorem", "times_cont_diff_on_id", []], ["add", "theorem", "congr_nhds", ["times_cont_diff_within_at"]], ["del", "theorem", "continuous_within_at'", ["times_cont_diff_within_at"]], ["add", "theorem", "div", ["times_cont_diff_within_at"]], ["add", "theorem", "inv", ["times_cont_diff_within_at"]], ["add", "theorem", "mono_of_mem", ["times_cont_diff_within_at"]], ["add", "theorem", "times_cont_diff_within_at_congr_nhds", []], ["add", "theorem", "times_cont_diff_within_at_id", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "one_def", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "mono_of_mem", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_insert_self", []], ["mod", "theorem", "continuous_within_at_singleton", []], ["add", "theorem", "continuous_within_at_union", []], ["add", "theorem", "insert_mem_nhds_within_insert", []], ["mod", "theorem", "mem_nhds_within_insert", []], ["add", "theorem", "nhds_within_insert", []], ["add", "theorem", "nhds_within_singleton", []]]}]}, {"timestamp": 1604105881, "sha": "d5650a7f", "message": "chore(scripts): update nolints.txt (#4844)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1604084288, "sha": "cc7f06bd", "message": "feat(data/polynomial/lifts): polynomials that lift (#4796)\nGiven semirings `R` and `S` with a morphism `f : R →+* S`, a polynomial with coefficients in `S` lifts if there exist `q : polynomial R` such that `map f p = q`. I proved some basic results about polynomials that lifts, for example concerning the sum etc.\nAlmost all the proof are trivial (and essentially identical), fell free to comment just the first ones, I will do the changes in all the relevant lemmas.\nThe proofs of `lifts_iff_lifts_deg` (a polynomial that lifts can be lifted to a polynomial of the same degree) and of `lifts_iff_lifts_deg_monic` (the same for monic polynomials) are quite painful, but this are the shortest proofs I found... I think that at least these two results deserve to be in mathlib (I'm using them to prove that the cyclotomic polynomial lift to `\\Z`).", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/lifts.lean", "changes": [["add", "theorem", "C'_mem_lifts", ["polynomial"]], ["add", "theorem", "C_mem_lifts", ["polynomial"]], ["add", "theorem", "X_mem_lifts", ["polynomial"]], ["add", "theorem", "X_pow_mem_lifts", ["polynomial"]], ["add", "theorem", "base_mul_mem_lifts", ["polynomial"]], ["add", "theorem", "erase_mem_lifts", ["polynomial"]], ["add", "def", "lifts", ["polynomial"]], ["add", "theorem", "lifts_and_degree_eq_and_monic", ["polynomial"]], ["add", "theorem", "lifts_iff_coeff_lifts", ["polynomial"]], ["add", "theorem", "lifts_iff_lifts_ring", ["polynomial"]], ["add", "theorem", "lifts_iff_set_range", ["polynomial"]], ["add", "def", "lifts_ring", ["polynomial"]], ["add", "def", "map_alg", ["polynomial"]], ["add", "theorem", "map_alg_eq_map", ["polynomial"]], ["add", "theorem", "mem_lifts", ["polynomial"]], ["add", "theorem", "mem_lifts_and_degree_eq", ["polynomial"]], ["add", "theorem", "mem_lifts_iff_mem_alg", ["polynomial"]], ["add", "theorem", "monomial_mem_lifts", ["polynomial"]], ["add", "theorem", "monomial_mem_lifts_and_degree_eq", ["polynomial"]], ["add", "theorem", "smul_mem_lifts", ["polynomial"]]]}]}, {"timestamp": 1604067639, "sha": "bfadf057", "message": "feat(algebra, logic): Pi instances for nontrivial and monoid_with_zero (#4766)", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["del", "def", "single", ["pi"]], ["del", "theorem", "single_eq_of_ne", ["pi"]], ["del", "theorem", "single_eq_same", ["pi"]]]}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/pi.lean", "changes": [["add", "def", "single", ["pi"]], ["add", "theorem", "single_eq_of_ne", ["pi"]], ["add", "theorem", "single_eq_same", ["pi"]], ["add", "theorem", "single_injective", ["pi"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "update_injective", ["function"]]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": [["add", "theorem", "nontrivial_at", ["pi"]]]}]}, {"timestamp": 1604056152, "sha": "58f8817e", "message": "feat(number_theory/fermat4): The n=4 case of fermat (#4720)\nFermat's last theorem for n=4.", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["mod", "theorem", "exists_associated_pow_of_mul_eq_pow", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "abs_le_self_pow_two", ["int"]], ["add", "theorem", "le_self_pow_two", ["int"]]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["add", "theorem", "ne_zero_pow", []], ["mod", "theorem", "pow_eq_zero'", []], ["mod", "theorem", "pow_ne_zero'", []], ["mod", "theorem", "zero_pow'", []], ["mod", "theorem", "zero_pow_eq_zero", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "neg_mod_two", ["int"]]]}, {"oldPath": null, "newPath": "src/number_theory/fermat4.lean", "changes": [["add", "theorem", "comm", ["fermat_42"]], ["add", "theorem", "coprime_of_minimal", ["fermat_42"]], ["add", "theorem", "exists_minimal", ["fermat_42"]], ["add", "theorem", "exists_odd_minimal", ["fermat_42"]], ["add", "theorem", "exists_pos_odd_minimal", ["fermat_42"]], ["add", "def", "minimal", ["fermat_42"]], ["add", "theorem", "minimal_comm", ["fermat_42"]], ["add", "theorem", "mul", ["fermat_42"]], ["add", "theorem", "ne_zero", ["fermat_42"]], ["add", "theorem", "neg_of_minimal", ["fermat_42"]], ["add", "theorem", "not_minimal", ["fermat_42"]], ["add", "def", "fermat_42", []], ["add", "theorem", "coprime_of_sqr_sum'", ["int"]], ["add", "theorem", "coprime_of_sqr_sum", ["int"]], ["add", "theorem", "not_fermat_42", []], ["add", "theorem", "not_fermat_4", []]]}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": [["add", "theorem", "coprime_classification'", ["pythagorean_triple"]]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "theorem", "exists_unit_of_abs", ["int"]], ["add", "theorem", "gcd_eq_one_iff_coprime", ["int"]], ["add", "theorem", "dvd_pow'", ["int", "prime"]], ["add", "theorem", "dvd_pow", ["int", "prime"]], ["add", "theorem", "sqr_of_coprime", ["int"]], ["add", "theorem", "sqr_of_gcd_eq_one", ["int"]]]}]}, {"timestamp": 1604056145, "sha": "d28e3d10", "message": "feat(ring_theory/witt_vector/is_poly): supporting ghost calculations (#4691)\nMost operations on Witt vectors can be described/defined\nby evaluating integral polynomials on the coefficients of Witt vectors.\nOne can prove identities between combinations of such operations\nby applying the non-injective ghost map,\nand continuing to prove the resulting identity of ghost components.\nSuch a calculation is called a ghost calculation.\nThis file provides the theoretical justification for why\napplying the non-injective ghost map is a legal move,\nand it provides tactics that aid in applying this step\nto the point that it is almost transparent.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/is_poly.lean", "changes": [["add", "theorem", "add_is_poly₂", ["witt_vector"]], ["add", "theorem", "bind₁_one_poly_witt_polynomial", ["witt_vector"]], ["add", "theorem", "bind₁_zero_witt_polynomial", ["witt_vector"]], ["add", "theorem", "comp", ["witt_vector", "is_poly"]], ["add", "theorem", "comp₂", ["witt_vector", "is_poly"]], ["add", "theorem", "ext", ["witt_vector", "is_poly"]], ["add", "theorem", "map", ["witt_vector", "is_poly"]], ["add", "def", "is_poly", ["witt_vector"]], ["add", "theorem", "comp", ["witt_vector", "is_poly₂"]], ["add", "theorem", "comp_left", ["witt_vector", "is_poly₂"]], ["add", "theorem", "comp_right", ["witt_vector", "is_poly₂"]], ["add", "theorem", "diag", ["witt_vector", "is_poly₂"]], ["add", "theorem", "ext", ["witt_vector", "is_poly₂"]], ["add", "theorem", "map", ["witt_vector", "is_poly₂"]], ["add", "def", "is_poly₂", ["witt_vector"]], ["add", "theorem", "mul_is_poly₂", ["witt_vector"]], ["add", "theorem", "neg_is_poly", ["witt_vector"]], ["add", "def", "one_poly", ["witt_vector"]], ["add", "theorem", "poly_eq_of_witt_polynomial_bind_eq'", ["witt_vector"]], ["add", "theorem", "poly_eq_of_witt_polynomial_bind_eq", ["witt_vector"]]]}]}, {"timestamp": 1604046023, "sha": "3aac0287", "message": "feat(field_theory/intermediate_field): equalities from inclusions and dimension bounds (#4828)", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "eq_of_le_of_findim_eq'", ["intermediate_field"]], ["add", "theorem", "eq_of_le_of_findim_eq", ["intermediate_field"]], ["add", "theorem", "eq_of_le_of_findim_le'", ["intermediate_field"]], ["add", "theorem", "eq_of_le_of_findim_le", ["intermediate_field"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "eq_of_le_of_findim_le", ["finite_dimensional"]]]}]}, {"timestamp": 1604046021, "sha": "6ec7aece", "message": "feat(data/polynomial): ext lemmas for homomorphisms from `polynomial R` (#4823)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "alg_hom_ext", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "add_hom_ext'", ["polynomial"]], ["add", "theorem", "add_hom_ext", ["polynomial"]], ["add", "theorem", "lhom_ext'", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "theorem", "ring_hom_ext'", ["polynomial"]], ["add", "theorem", "ring_hom_ext", ["polynomial"]]]}]}, {"timestamp": 1604046019, "sha": "03a477c4", "message": "feat(data/dfinsupp): Port over the `finsupp.lift_add_hom` API (#4821)\nThese lemmas are mostly copied with minimal translation from `finsupp`.\nA few proofs are taken from `direct_sum`.\nThe API of `direct_sum` is deliberately unchanged in this PR.", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "add_closure_Union_range_single", ["dfinsupp"]], ["add", "theorem", "add_hom_ext'", ["dfinsupp"]], ["add", "theorem", "add_hom_ext", ["dfinsupp"]], ["add", "def", "lift_add_hom", ["dfinsupp"]], ["add", "def", "single_add_hom", ["dfinsupp"]], ["add", "def", "sum_add_hom", ["dfinsupp"]], ["add", "theorem", "sum_add_hom_apply", ["dfinsupp"]], ["add", "theorem", "sum_add_hom_single", ["dfinsupp"]]]}]}, {"timestamp": 1604046018, "sha": "5ae192eb", "message": "feat(data/equiv, algebra/*): Add simps projections to many equivs and homs (#4818)\nThis doesn't actually change any existing lemmas to use these projections.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "inv_fun", ["alg_equiv", "simps"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/module/linear_map.lean", "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "inv_fun", ["linear_equiv", "simps"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "inv_fun", ["mul_equiv", "simps"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "def", "inv_fun", ["ring_equiv", "simps"]]]}]}, {"timestamp": 1604046016, "sha": "d46d0c27", "message": "chore(topology/basic): the set of cluster pts of a filter is a closed set (#4815)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "interior_eq_nhds'", []], ["add", "theorem", "interior_set_of_eq", []], ["add", "theorem", "is_closed_set_of_cluster_pt", []], ["add", "theorem", "is_open_set_of_eventually_nhds", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1604046014, "sha": "072cfc55", "message": "chore(data/dfinsupp): Provide dfinsupp with a semimodule instance (#4801)\nfinsupp already has one, it seems pointless to hide the one for dfinsupp behind a def.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["del", "def", "to_has_scalar", ["dfinsupp"]], ["del", "def", "to_semimodule", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1604046009, "sha": "63c0dac6", "message": "refactor(module/ordered): make ordered_semimodule a mixin (#4719)\nPer @urkud's suggestion at #4683. This should avoid having to introduce a separate `ordered_algebra` class.", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": [["add", "theorem", "mk''", ["ordered_semimodule"]], ["del", "def", "mk''", ["ordered_semimodule"]], ["add", "theorem", "mk'", ["ordered_semimodule"]], ["del", "def", "mk'", ["ordered_semimodule"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "concave_le", ["concave_on"]], ["mod", "theorem", "convex_hypograph", ["concave_on"]], ["mod", "theorem", "convex_lt", ["concave_on"]], ["mod", "theorem", "smul", ["concave_on"]], ["mod", "theorem", "concave_on_iff_convex_hypograph", []], ["mod", "theorem", "convex_epigraph", ["convex_on"]], ["mod", "theorem", "convex_le", ["convex_on"]], ["mod", "theorem", "convex_lt", ["convex_on"]], ["mod", "theorem", "smul", ["convex_on"]], ["mod", "theorem", "convex_on_iff_convex_epigraph", []], ["mod", "theorem", "neg_concave_on_iff", []], ["mod", "theorem", "neg_convex_on_iff", []]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "to_ordered_semimodule", ["convex_cone"]], ["del", "def", "to_ordered_semimodule", ["convex_cone"]]]}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}]}, {"timestamp": 1604035710, "sha": "4003b3ee", "message": "feat(*): a, switch to lean 3.23 (#4802)\nThere are three changes affecting mathlib:\n1. `ℕ → ℕ` is now elaborated as `∀ ᾰ : ℕ, ℕ`. This means that `intro` introduces assumptions with names like `ᾰ_1`, etc. These names should not be used, and instead provided explicitly to `intro` (and other tactics).\n2. The heuristic to determine the definition name for `instance : foo bar` has been changed.\n3. `by_contra` now uses classical logic, and defaults to the hypothesis name `h`.\n4. adds a few new simp-lemmas in `data/typevec`", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "scripts/lint-copy-mod-doc.py", "newPath": "scripts/lint-copy-mod-doc.py", "changes": []}, {"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/group/ulift.lean", "newPath": "src/algebra/group/ulift.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cofinal.lean", "newPath": "src/category_theory/limits/cofinal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/reflects_isomorphisms.lean", "newPath": "src/category_theory/reflects_isomorphisms.lean", "changes": []}, {"oldPath": "src/combinatorics/simple_graph.lean", "newPath": "src/combinatorics/simple_graph.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/control/functor/multivariate.lean", "newPath": "src/control/functor/multivariate.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "def", "comm_ring_aux", ["real"]]]}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": []}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": [["add", "theorem", "prod_fst_mk", ["typevec"]], ["add", "theorem", "prod_snd_mk", ["typevec"]], ["add", "theorem", "subtype_val_to_subtype'", ["typevec"]], ["add", "theorem", "subtype_val_to_subtype", ["typevec"]], ["add", "theorem", "to_subtype'_of_subtype'", ["typevec"]]]}, {"oldPath": "src/geometry/manifold/algebra/smooth_functions.lean", "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/omega_complete_partial_order.lean", "newPath": "src/topology/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "test/finish3.lean", "newPath": "test/finish3.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": []}, {"oldPath": "test/pretty_cases.lean", "newPath": "test/pretty_cases.lean", "changes": []}, {"oldPath": "test/qpf.lean", "newPath": "test/qpf.lean", "changes": []}]}, {"timestamp": 1604023336, "sha": "581b2af3", "message": "feat(analysis/asymptotics): Equivalent definitions for `is_[oO] u v l` looking like `u = φ * v` for some `φ` (#4646)\nThe advantage of these statements over `u/v` tendsto 0 / is bounded is they do not require any nonvanishing assumptions about `v`", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "eventually_mul_div_cancel", ["asymptotics", "is_O"]], ["add", "theorem", "is_O_iff_exists_eq_mul", ["asymptotics"]], ["add", "theorem", "eventually_mul_div_cancel", ["asymptotics", "is_O_with"]], ["add", "theorem", "exists_eq_mul", ["asymptotics", "is_O_with"]], ["add", "theorem", "is_O_with_iff_exists_eq_mul", ["asymptotics"]], ["add", "theorem", "is_O_with_of_eq_mul", ["asymptotics"]], ["add", "theorem", "eventually_mul_div_cancel", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_iff_exists_eq_mul", ["asymptotics"]]]}]}, {"timestamp": 1604020129, "sha": "f510728a", "message": "chore(scripts): update nolints.txt (#4825)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1604011078, "sha": "fc307f9b", "message": "feat(tactic/norm_num): make norm_num extensible (#4820)\nThis allows you to extend `norm_num` by defining additional tactics of type `expr → tactic (expr × expr)` with the `@[norm_num]` attribute. It still requires some tactic proficiency to use correctly, but it at least allows us to move all the possible norm_num extensions to their own files instead of the current dependency cycle problem.\nThis could potentially become a performance problem if too many things are marked `@[norm_num]`, as they are simply looked through in linear order. It could be improved by having extensions register a finite set of constants that they wish to evaluate, and dispatch to the right extension tactic using a `name_map`.\n```lean\ndef foo : ℕ := 1\n@[norm_num] meta def eval_foo : expr → tactic (expr × expr)\n| `(foo) := pure (`(1:ℕ), `(eq.refl 1))\n| _ := tactic.failed\nexample : foo = 1 := by norm_num\n```", "changes": [{"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": [["add", "def", "foo", []]]}]}, {"timestamp": 1603999693, "sha": "2c7efdfc", "message": "feat(category_theory/sites): Grothendieck topology on a space (#4819)\nThe grothendieck topology associated to a topological space.\nI also changed a definition I meant to change in #4816, and updated the TODOs of some docstrings; I can split these into separate PRs if needed but I think all the changes are quite minor", "changes": [{"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": []}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["del", "theorem", "singleton_arrow_self", ["category_theory", "presieve"]], ["add", "theorem", "singleton_self", ["category_theory", "presieve"]]]}, {"oldPath": null, "newPath": "src/category_theory/sites/spaces.lean", "changes": [["add", "def", "grothendieck_topology", ["opens"]], ["add", "def", "pretopology", ["opens"]], ["add", "theorem", "pretopology_to_grothendieck", ["opens"]]]}]}, {"timestamp": 1603999690, "sha": "92af9fa8", "message": "feat(category_theory/limits/pullbacks): pullback self is id iff mono (#4813)", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "is_limit_mk_id_id", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mono_of_is_limit_mk_id_id", ["category_theory", "limits", "pullback_cone"]]]}]}, {"timestamp": 1603999687, "sha": "78811e0a", "message": "feat(ring_theory/unique_factorization_domain): `unique_factorization_monoid` structure on polynomials over ufd (#4774)\nProvides the `unique_factorization_monoid` structure on polynomials over a UFD", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["mod", "theorem", "exists_irreducible_of_degree_pos", ["polynomial"]], ["mod", "theorem", "exists_irreducible_of_nat_degree_ne_zero", ["polynomial"]], ["mod", "theorem", "exists_irreducible_of_nat_degree_pos", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1603999683, "sha": "856381c1", "message": "chore(data/equiv/basic): arrow_congr preserves properties of binary operators (#4759)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "semiconj_conj", ["equiv"]], ["add", "theorem", "semiconj₂_conj", ["equiv"]]]}, {"oldPath": "src/logic/function/conjugate.lean", "newPath": "src/logic/function/conjugate.lean", "changes": [["add", "theorem", "is_associative_left", ["function", "semiconj₂"]], ["add", "theorem", "is_associative_right", ["function", "semiconj₂"]], ["add", "theorem", "is_idempotent_left", ["function", "semiconj₂"]], ["add", "theorem", "is_idempotent_right", ["function", "semiconj₂"]]]}]}, {"timestamp": 1603999680, "sha": "ccc98d0a", "message": "refactor(*): `midpoint`, `point_reflection`, and Mazur-Ulam in affine spaces (#4752)\n* redefine `midpoint` for points in an affine space;\n* redefine `point_reflection` for affine spaces (as `equiv`,\n `affine_equiv`, and `isometric`);\n* define `const_vsub` as `equiv`, `affine_equiv`, and `isometric`;\n* define `affine_map.of_map_midpoint`;\n* fully migrate the proof of Mazur-Ulam theorem to affine spaces;", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "coe_const_vsub", ["equiv"]], ["add", "theorem", "coe_const_vsub_symm", ["equiv"]], ["add", "def", "const_vsub", ["equiv"]], ["add", "theorem", "injective_point_reflection_left_of_injective_bit0", ["equiv"]], ["add", "def", "point_reflection", ["equiv"]], ["add", "theorem", "point_reflection_apply", ["equiv"]], ["add", "theorem", "point_reflection_fixed_iff_of_injective_bit0", ["equiv"]], ["add", "theorem", "point_reflection_involutive", ["equiv"]], ["add", "theorem", "point_reflection_self", ["equiv"]], ["add", "theorem", "point_reflection_symm", ["equiv"]]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "one_sub_inv_of_two", []]]}, {"oldPath": "src/algebra/midpoint.lean", "newPath": null, "changes": [["del", "theorem", "coe_of_map_midpoint", ["add_monoid_hom"]], ["del", "def", "of_map_midpoint", ["add_monoid_hom"]], ["del", "theorem", "point_reflection_midpoint_left", ["equiv"]], ["del", "theorem", "point_reflection_midpoint_right", ["equiv"]], ["del", "def", "midpoint", []], ["del", "theorem", "midpoint_add_add", []], ["del", "theorem", "midpoint_add_left", []], ["del", "theorem", "midpoint_add_right", []], ["del", "theorem", "midpoint_add_self", []], ["del", "theorem", "midpoint_comm", []], ["del", "theorem", "midpoint_def", []], ["del", "theorem", "midpoint_eq_iff", []], ["del", "theorem", "midpoint_neg_neg", []], ["del", "theorem", "midpoint_self", []], ["del", "theorem", "midpoint_smul_smul", []], ["del", "theorem", "midpoint_sub_left", []], ["del", "theorem", "midpoint_sub_right", []], ["del", "theorem", "midpoint_sub_sub", []], ["del", "theorem", "midpoint_unique", []], ["del", "theorem", "midpoint_zero_add", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "two_smul'", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "def", "of_map_midpoint", ["affine_map"]], ["add", "theorem", "coe_const_vsub", ["isometric"]], ["add", "theorem", "coe_const_vsub_symm", ["isometric"]], ["add", "def", "const_vsub", ["isometric"]], ["add", "theorem", "dist_point_reflection_fixed", ["isometric"]], ["add", "theorem", "dist_point_reflection_self'", ["isometric"]], ["add", "theorem", "dist_point_reflection_self", ["isometric"]], ["add", "theorem", "dist_point_reflection_self_real", ["isometric"]], ["add", "def", "point_reflection", ["isometric"]], ["add", "theorem", "point_reflection_apply", ["isometric"]], ["add", "theorem", "point_reflection_fixed_iff", ["isometric"]], ["add", "theorem", "point_reflection_involutive", ["isometric"]], ["add", "theorem", "point_reflection_midpoint_left", ["isometric"]], ["add", "theorem", "point_reflection_midpoint_right", ["isometric"]], ["add", "theorem", "point_reflection_self", ["isometric"]], ["add", "theorem", "point_reflection_symm", ["isometric"]], ["add", "theorem", "point_reflection_to_equiv", ["isometric"]]]}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": [["add", "theorem", "coe_to_affine_equiv", ["isometric"]], ["del", "theorem", "coe_to_affine_map", ["isometric"]], ["mod", "theorem", "map_midpoint", ["isometric"]], ["mod", "theorem", "midpoint_fixed", ["isometric"]], ["add", "def", "to_affine_equiv", ["isometric"]], ["del", "def", "to_affine_map", ["isometric"]]]}, {"oldPath": "src/analysis/normed_space/point_reflection.lean", "newPath": null, "changes": [["del", "theorem", "point_reflection_fixed_iff_of_module", ["equiv"]], ["del", "def", "point_reflection", ["isometric"]], ["del", "theorem", "point_reflection_apply", ["isometric"]], ["del", "theorem", "point_reflection_dist_fixed", ["isometric"]], ["del", "theorem", "point_reflection_dist_self'", ["isometric"]], ["del", "theorem", "point_reflection_dist_self", ["isometric"]], ["del", "theorem", "point_reflection_dist_self_real", ["isometric"]], ["del", "theorem", "point_reflection_fixed_iff", ["isometric"]], ["del", "theorem", "point_reflection_involutive", ["isometric"]], ["del", "theorem", "point_reflection_midpoint_left", ["isometric"]], ["del", "theorem", "point_reflection_midpoint_right", ["isometric"]], ["del", "theorem", "point_reflection_self", ["isometric"]], ["del", "theorem", "point_reflection_symm", ["isometric"]], ["del", "theorem", "point_reflection_to_equiv", ["isometric"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["del", "def", "point_reflection", ["equiv"]], ["del", "theorem", "point_reflection_apply", ["equiv"]], ["del", "theorem", "point_reflection_fixed_iff_of_bit0_injective", ["equiv"]], ["del", "theorem", "point_reflection_involutive", ["equiv"]], ["del", "theorem", "point_reflection_self", ["equiv"]], ["del", "theorem", "point_reflection_symm", ["equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "apply_line_map", ["affine_equiv"]], ["add", "theorem", "coe_const_vsub", ["affine_equiv"]], ["add", "theorem", "coe_const_vsub_symm", ["affine_equiv"]], ["add", "def", "const_vsub", ["affine_equiv"]], ["add", "theorem", "injective_point_reflection_left_of_injective_bit0", ["affine_equiv"]], ["add", "theorem", "injective_point_reflection_left_of_module", ["affine_equiv"]], ["add", "def", "point_reflection", ["affine_equiv"]], ["add", "theorem", "point_reflection_apply", ["affine_equiv"]], ["add", "theorem", "point_reflection_fixed_iff_of_injective_bit0", ["affine_equiv"]], ["add", "theorem", "point_reflection_fixed_iff_of_module", ["affine_equiv"]], ["add", "theorem", "point_reflection_involutive", ["affine_equiv"]], ["add", "theorem", "point_reflection_self", ["affine_equiv"]], ["add", "theorem", "point_reflection_symm", ["affine_equiv"]], ["add", "theorem", "to_equiv_point_reflection", ["affine_equiv"]], ["add", "theorem", "homothety_neg_one_apply", ["affine_map"]], ["add", "theorem", "line_map_vadd", ["affine_map"]], ["add", "theorem", "line_map_vsub", ["affine_map"]], ["add", "theorem", "vadd_line_map", ["affine_map"]], ["add", "theorem", "vsub_line_map", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/affine_space/affine_map.lean", "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "homothety_eq_line_map", ["affine_map"]], ["add", "theorem", "left_vsub_line_map", ["affine_map"]], ["add", "theorem", "line_map_vadd_line_map", ["affine_map"]], ["add", "theorem", "line_map_vsub_left", ["affine_map"]], ["add", "theorem", "line_map_vsub_line_map", ["affine_map"]], ["add", "theorem", "line_map_vsub_right", ["affine_map"]], ["add", "theorem", "right_vsub_line_map", ["affine_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/midpoint.lean", "changes": [["add", "theorem", "coe_of_map_midpoint", ["add_monoid_hom"]], ["add", "def", "of_map_midpoint", ["add_monoid_hom"]], ["add", "theorem", "map_midpoint", ["affine_equiv"]], ["add", "theorem", "point_reflection_midpoint_left", ["affine_equiv"]], ["add", "theorem", "point_reflection_midpoint_right", ["affine_equiv"]], ["add", "theorem", "map_midpoint", ["affine_map"]], ["add", "theorem", "homothety_inv_of_two", []], ["add", "theorem", "homothety_inv_two", []], ["add", "theorem", "homothety_one_half", []], ["add", "theorem", "line_map_inv_two", []], ["add", "theorem", "line_map_one_half", []], ["add", "def", "midpoint", []], ["add", "theorem", "midpoint_add_self", []], ["add", "theorem", "midpoint_comm", []], ["add", "theorem", "midpoint_eq_iff'", []], ["add", "theorem", "midpoint_eq_iff", []], ["add", "theorem", "midpoint_eq_midpoint_iff_vsub_eq_vsub", []], ["add", "theorem", "midpoint_self", []], ["add", "theorem", "midpoint_unique", []], ["add", "theorem", "midpoint_vadd_midpoint", []], ["add", "theorem", "midpoint_vsub_midpoint", []], ["add", "theorem", "midpoint_zero_add", []]]}]}, {"timestamp": 1603999676, "sha": "4d19191e", "message": "feat(algebra/monoid_algebra): Add an equivalence between `add_monoid_algebra` and `monoid_algebra` in terms of `multiplicative` (#4402)", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "map_domain_mul", ["add_monoid_algebra"]], ["add", "theorem", "map_domain_mul", ["monoid_algebra"]]]}]}, {"timestamp": 1603995982, "sha": "d709ed6f", "message": "feat(algebra/direct_sum*): relax a lot of constraints to add_comm_monoid (#3537)", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["add", "theorem", "sub_apply", ["direct_sum"]], ["add", "theorem", "unique", ["direct_sum", "to_add_monoid"]], ["add", "def", "to_add_monoid", ["direct_sum"]], ["add", "theorem", "to_add_monoid_of", ["direct_sum"]], ["del", "theorem", "unique", ["direct_sum", "to_group"]], ["del", "def", "to_group", ["direct_sum"]], ["del", "theorem", "to_group_of", ["direct_sum"]], ["mod", "def", "direct_sum", []]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["mod", "theorem", "smul_apply", ["direct_sum"]]]}]}, {"timestamp": 1603986166, "sha": "f83468d3", "message": "feat(category_theory/functor_category): monos in the functor category (#4811)", "changes": [{"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["add", "theorem", "epi_app_of_epi", ["category_theory", "nat_trans"]], ["add", "theorem", "mono_app_of_mono", ["category_theory", "nat_trans"]]]}]}, {"timestamp": 1603981135, "sha": "7d7e850b", "message": "chore(category_theory/sites): nicer names (#4816)\nChanges the name `arrows_with_codomain` to `presieve` which is more suggestive and shorter, and changes `singleton_arrow` to `singleton`, since it's in the presieve namespace anyway.", "changes": [{"oldPath": "src/category_theory/sites/pretopology.lean", "newPath": "src/category_theory/sites/pretopology.lean", "changes": [["mod", "def", "pullback_arrows", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["del", "def", "bind", ["category_theory", "arrows_with_codomain"]], ["del", "theorem", "bind_comp", ["category_theory", "arrows_with_codomain"]], ["del", "def", "singleton_arrow", ["category_theory", "arrows_with_codomain"]], ["del", "theorem", "singleton_arrow_eq_iff_domain", ["category_theory", "arrows_with_codomain"]], ["del", "theorem", "singleton_arrow_self", ["category_theory", "arrows_with_codomain"]], ["del", "def", "arrows_with_codomain", ["category_theory"]], ["add", "def", "bind", ["category_theory", "presieve"]], ["add", "theorem", "bind_comp", ["category_theory", "presieve"]], ["add", "def", "singleton", ["category_theory", "presieve"]], ["add", "theorem", "singleton_arrow_self", ["category_theory", "presieve"]], ["add", "theorem", "singleton_eq_iff_domain", ["category_theory", "presieve"]], ["add", "def", "presieve", ["category_theory"]], ["mod", "def", "bind", ["category_theory", "sieve"]], ["mod", "def", "generate", ["category_theory", "sieve"]], ["mod", "def", "gi_generate", ["category_theory", "sieve"]], ["mod", "theorem", "le_pullback_bind", ["category_theory", "sieve"]], ["mod", "theorem", "mem_generate", ["category_theory", "sieve"]], ["mod", "theorem", "pushforward_le_bind_of_mem", ["category_theory", "sieve"]], ["mod", "theorem", "sets_iff_generate", ["category_theory", "sieve"]]]}]}, {"timestamp": 1603977855, "sha": "8b858d0b", "message": "feat(data/dfinsupp): Relax requirements of semimodule conversion to add_comm_monoid (#3490)\nThe extra `_`s required to make this still build are unfortunate, but hopefully someone else can work out how to remove them in a later PR.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["add", "theorem", "add_apply", ["direct_sum"]], ["add", "theorem", "zero_apply", ["direct_sum"]]]}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "theorem", "of_associative_algebra_hom_id", ["lie_algebra"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "ext", ["dfinsupp"]], ["mod", "theorem", "smul_apply", ["dfinsupp"]], ["mod", "theorem", "support_smul", ["dfinsupp"]], ["mod", "def", "to_has_scalar", ["dfinsupp"]], ["mod", "def", "to_semimodule", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["add", "theorem", "smul_apply", ["direct_sum"]], ["add", "theorem", "support_smul", ["direct_sum"]]]}]}, {"timestamp": 1603964993, "sha": "d510a637", "message": "feat(linear_algebra/finite_dimensional): finite dimensional algebra_hom of fields is bijective (#4793)\nChanges to finite_dimensional.lean from #4786", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "bijective", ["alg_hom"]]]}]}, {"timestamp": 1603956622, "sha": "1baf7017", "message": "feat(category_theory/Fintype): Adds the category of finite types and its \"standard\" skeleton. (#4809)\nThis PR adds the category `Fintype` of finite types, as well as its \"standard\" skeleton whose objects are `fin n`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/Fintype.lean", "changes": [["add", "def", "incl", ["Fintype"]], ["add", "def", "of", ["Fintype"]], ["add", "def", "incl", ["Fintype", "skeleton"]], ["add", "theorem", "incl_mk_nat_card", ["Fintype", "skeleton"]], ["add", "theorem", "is_skeletal", ["Fintype", "skeleton"]], ["add", "def", "mk", ["Fintype", "skeleton"]], ["add", "def", "to_nat", ["Fintype", "skeleton"]], ["add", "def", "skeleton", ["Fintype"]], ["add", "def", "Fintype", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "equiv_iff_eq", ["fin"]]]}]}, {"timestamp": 1603933547, "sha": "d9c82152", "message": "chore(scripts): update nolints.txt (#4814)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603918161, "sha": "69d41da5", "message": "feat(tactic/dependencies): add tactics to compute (reverse) dependencies (#4602)\nThese are the beginnings of an API about dependencies between expressions. For\nnow, we only deal with dependencies and reverse dependencies of hypotheses,\nwhich are easy to compute.\nBreaking change: `tactic.revert_deps` is renamed to\n`tactic.revert_reverse_dependencies_of_hyp` for consistency. Its implementation\nis completely new, but should be equivalent to the old one except for the order\nin which hypotheses are reverted. (But the old implementation made no particular\nguarantees about this order anyway.)", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/dependencies.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": null, "newPath": "test/dependencies.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1603908583, "sha": "d75da1a2", "message": "feat(topology/algebra/group_with_zero): introduce `has_continuous_inv'` (#4804)\nMove lemmas about continuity of division from `normed_field`, add a few new lemmas, and introduce a new typeclass. Also use it for `nnreal`s.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "div", ["continuous"]], ["del", "theorem", "inv'", ["continuous"]], ["del", "theorem", "div", ["continuous_at"]], ["del", "theorem", "inv'", ["continuous_at"]], ["del", "theorem", "div", ["continuous_on"]], ["del", "theorem", "inv'", ["continuous_on"]], ["del", "theorem", "div", ["continuous_within_at"]], ["del", "theorem", "inv'", ["continuous_within_at"]], ["del", "theorem", "div", ["filter", "tendsto"]], ["del", "theorem", "div_const", ["filter", "tendsto"]], ["del", "theorem", "inv'", ["filter", "tendsto"]], ["del", "theorem", "continuous_on_inv", ["normed_field"]], ["del", "theorem", "tendsto_inv", ["normed_field"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/group_with_zero.lean", "changes": [["add", "theorem", "div", ["continuous"]], ["add", "theorem", "div_const", ["continuous"]], ["add", "theorem", "inv'", ["continuous"]], ["add", "theorem", "div", ["continuous_at"]], ["add", "theorem", "div_const", ["continuous_at"]], ["add", "theorem", "inv'", ["continuous_at"]], ["add", "theorem", "div", ["continuous_on"]], ["add", "theorem", "div_const", ["continuous_on"]], ["add", "theorem", "inv'", ["continuous_on"]], ["add", "theorem", "continuous_on_div", []], ["add", "theorem", "continuous_on_inv'", []], ["add", "theorem", "div", ["continuous_within_at"]], ["add", "theorem", "div_const", ["continuous_within_at"]], ["add", "theorem", "inv'", ["continuous_within_at"]], ["add", "theorem", "div", ["filter", "tendsto"]], ["add", "theorem", "div_const", ["filter", "tendsto"]], ["add", "theorem", "inv'", ["filter", "tendsto"]], ["add", "theorem", "tendsto_inv'", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["del", "theorem", "sub", ["nnreal", "tendsto"]], ["mod", "theorem", "tendsto_coe", ["nnreal"]]]}]}, {"timestamp": 1603908581, "sha": "80ffad0c", "message": "chore(data/dfinsupp): Make some lemma arguments explicit (#4803)\nThis file is long and this is not exhaustive, but this hits most of the simpler ones", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "add_apply", ["dfinsupp"]], ["mod", "theorem", "filter_pos_add_filter_neg", ["dfinsupp"]], ["mod", "theorem", "neg_apply", ["dfinsupp"]], ["mod", "theorem", "sub_apply", ["dfinsupp"]], ["mod", "theorem", "zero_apply", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1603908579, "sha": "7a37dd4e", "message": "feat(algebra/monoid_algebra): Bundle lift_nc_mul and lift_nc_one into a ring_hom and alg_hom (#4789)", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "def", "lift_nc_alg_hom", ["add_monoid_algebra"]], ["add", "def", "lift_nc_ring_hom", ["add_monoid_algebra"]], ["add", "def", "lift_nc_alg_hom", ["monoid_algebra"]], ["add", "def", "lift_nc_ring_hom", ["monoid_algebra"]]]}]}, {"timestamp": 1603908577, "sha": "28cc74f8", "message": "feat(ring_theory/unique_factorization_domain): a `normalization_monoid` structure for ufms (#4772)\nProvides a default `normalization_monoid` structure on a `unique_factorization_monoid`", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "associated_map_mk", ["associates"]], ["add", "theorem", "mk_monoid_hom_apply", ["associates"]]]}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "def", "normalization_monoid_of_monoid_hom_right_inverse", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "factors_mul", ["unique_factorization_monoid"]], ["add", "theorem", "factors_one", ["unique_factorization_monoid"]]]}]}, {"timestamp": 1603908575, "sha": "25df2671", "message": "feat(category_theory/limits/presheaf): free cocompletion (#4740)\nFill in the missing part of #4401, showing that the yoneda extension is unique. Also adds some basic API around #4401.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": [["add", "def", "map", ["category_theory", "category_of_elements"]], ["add", "theorem", "map_π", ["category_theory", "category_of_elements"]]]}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "is_colimit_of_preserves", ["category_theory", "limits"]], ["add", "def", "is_limit_of_preserves", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/presheaf.lean", "newPath": "src/category_theory/limits/presheaf.lean", "changes": [["add", "theorem", "cocone_of_representable_naturality", ["category_theory"]], ["add", "theorem", "cocone_of_representable_ι_app", ["category_theory"]], ["add", "def", "nat_iso_of_nat_iso_on_representables", ["category_theory"]], ["add", "def", "unique_extension_along_yoneda", ["category_theory"]]]}]}, {"timestamp": 1603908573, "sha": "dfa85b54", "message": "feat(archive/imo): formalize IMO 1981 problem Q3 (#4599)\nDetermine the maximum value of `m ^ 2 + n ^ 2`, where `m` and `n` are integers in\n`{1, 2, ..., 1981}` and `(n ^ 2 - m * n - m ^ 2) ^ 2 = 1`.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1981_q3.lean", "changes": [["add", "theorem", "imo1981_q3", []], ["add", "theorem", "k_bound", []], ["add", "theorem", "m_n_bounds", []], ["add", "theorem", "eq_imp_1", ["nat_predicate"]], ["add", "theorem", "imp_fib", ["nat_predicate"]], ["add", "theorem", "m_le_n", ["nat_predicate"]], ["add", "theorem", "m_pos", ["nat_predicate"]], ["add", "theorem", "n_le_N", ["nat_predicate"]], ["add", "theorem", "n_pos", ["nat_predicate"]], ["add", "theorem", "reduction", ["nat_predicate"]], ["add", "def", "nat_predicate", []], ["add", "theorem", "eq_imp_1", ["problem_predicate"]], ["add", "theorem", "m_le_n", ["problem_predicate"]], ["add", "theorem", "reduction", ["problem_predicate"]], ["add", "structure", "problem_predicate", []], ["add", "theorem", "solution_bound", []], ["add", "theorem", "solution_greatest", []], ["add", "def", "specified_set", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "abs_eq_iff_mul_self_eq", []], ["add", "theorem", "abs_le_iff_mul_self_le", []], ["add", "theorem", "abs_lt_iff_mul_self_lt", []], ["add", "theorem", "mul_self_inj", []], ["add", "theorem", "zero_lt_three", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_eq_iff_mul_self_eq", ["int"]], ["add", "theorem", "nat_abs_eq_iff_sq_eq", ["int"]], ["add", "theorem", "nat_abs_le_iff_mul_self_le", ["int"]], ["add", "theorem", "nat_abs_le_iff_sq_le", ["int"]], ["add", "theorem", "nat_abs_lt_iff_mul_self_lt", ["int"]], ["add", "theorem", "nat_abs_lt_iff_sq_lt", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "eq_one_of_mul_eq_one_left", ["nat"]], ["add", "theorem", "eq_one_of_mul_eq_one_right", ["nat"]], ["mod", "theorem", "zero_max", ["nat"]]]}, {"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": [["add", "theorem", "fib_two", ["nat"]]]}]}, {"timestamp": 1603898470, "sha": "40da087f", "message": "feat(equiv/basic): use @[simps] (#4652)\nUse the `@[simps]` attribute to automatically generate equation lemmas for equivalences.\nThe names `foo_apply` and `foo_symm_apply` are used for the projection lemmas of `foo`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "Pi_congr_left'", ["equiv"]], ["del", "theorem", "Pi_congr_left'_apply", ["equiv"]], ["del", "theorem", "Pi_congr_left'_symm_apply", ["equiv"]], ["del", "theorem", "arrow_congr'_apply", ["equiv"]], ["mod", "def", "arrow_congr", ["equiv"]], ["del", "theorem", "arrow_congr_apply", ["equiv"]], ["del", "theorem", "coe_of_bijective", ["equiv"]], ["del", "theorem", "coe_plift", ["equiv"]], ["del", "theorem", "coe_plift_symm", ["equiv"]], ["del", "theorem", "coe_prod_comm", ["equiv"]], ["del", "theorem", "coe_prod_congr", ["equiv"]], ["del", "theorem", "coe_ulift", ["equiv"]], ["del", "theorem", "coe_ulift_symm", ["equiv"]], ["del", "theorem", "conj_apply", ["equiv"]], ["mod", "def", "fun_unique", ["equiv"]], ["del", "theorem", "fun_unique_apply", ["equiv"]], ["del", "theorem", "fun_unique_symm_apply", ["equiv"]], ["del", "theorem", "of_injective_apply", ["equiv"]], ["mod", "def", "prod_assoc", ["equiv"]], ["del", "theorem", "prod_assoc_apply", ["equiv"]], ["del", "theorem", "prod_assoc_sym_apply", ["equiv"]], ["mod", "def", "prod_comm", ["equiv"]], ["mod", "def", "prod_congr", ["equiv"]], ["mod", "def", "prod_punit", ["equiv"]], ["del", "theorem", "prod_punit_apply", ["equiv"]], ["mod", "def", "psigma_equiv_sigma", ["equiv"]], ["del", "theorem", "psigma_equiv_sigma_apply", ["equiv"]], ["del", "theorem", "psigma_equiv_sigma_symm_apply", ["equiv"]], ["del", "theorem", "punit_prod_apply", ["equiv"]], ["del", "theorem", "image_apply", ["equiv", "set"]], ["del", "theorem", "of_eq_apply", ["equiv", "set"]], ["del", "theorem", "of_eq_symm_apply", ["equiv", "set"]], ["del", "theorem", "range_apply", ["equiv", "set"]], ["del", "theorem", "univ_apply", ["equiv", "set"]], ["del", "theorem", "univ_symm_apply", ["equiv", "set"]], ["del", "theorem", "sigma_congr_left_apply", ["equiv"]], ["del", "theorem", "sigma_congr_right_apply", ["equiv"]], ["del", "theorem", "sigma_congr_right_symm_apply", ["equiv"]], ["mod", "def", "sigma_equiv_prod", ["equiv"]], ["del", "theorem", "sigma_equiv_prod_apply", ["equiv"]], ["del", "theorem", "sigma_equiv_prod_symm_apply", ["equiv"]], ["del", "theorem", "sigma_preimage_equiv_apply", ["equiv"]], ["del", "theorem", "sigma_preimage_equiv_symm_apply_fst", ["equiv"]], ["del", "theorem", "sigma_preimage_equiv_symm_apply_snd_fst", ["equiv"]], ["add", "def", "inv_fun", ["equiv", "simps"]], ["del", "theorem", "subtype_congr_right_mk", ["equiv"]], ["del", "theorem", "subtype_preimage_apply", ["equiv"]], ["del", "theorem", "subtype_preimage_symm_apply_coe", ["equiv"]], ["del", "theorem", "sum_comm_apply", ["equiv"]], ["del", "theorem", "sum_congr_apply", ["equiv"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "def", "coind", ["subtype"]], ["mod", "def", "map", ["subtype"]], ["add", "def", "val", ["subtype", "simps"]]]}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}]}, {"timestamp": 1603881265, "sha": "e8f8de67", "message": "feat(ring_theory/valuation): ring of integers (#4729)", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["add", "theorem", "pow_lt_pow'", []], ["add", "theorem", "pow_lt_pow_succ", []], ["add", "theorem", "zero_lt_one''", []]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "theorem", "map_add_le", ["valuation"]], ["add", "theorem", "map_add_lt", ["valuation"]], ["add", "theorem", "map_sum_le", ["valuation"]], ["add", "theorem", "map_sum_lt'", ["valuation"]], ["add", "theorem", "map_sum_lt", ["valuation"]]]}, {"oldPath": null, "newPath": "src/ring_theory/valuation/integers.lean", "changes": [["add", "theorem", "integers", ["valuation", "integer"]], ["add", "def", "integer", ["valuation"]], ["add", "theorem", "dvd_iff_le", ["valuation", "integers"]], ["add", "theorem", "dvd_of_le", ["valuation", "integers"]], ["add", "theorem", "is_unit_of_one", ["valuation", "integers"]], ["add", "theorem", "le_iff_dvd", ["valuation", "integers"]], ["add", "theorem", "le_of_dvd", ["valuation", "integers"]], ["add", "theorem", "one_of_is_unit", ["valuation", "integers"]], ["add", "structure", "integers", ["valuation"]]]}, {"oldPath": null, "newPath": "src/ring_theory/valuation/integral.lean", "changes": [["add", "theorem", "mem_of_integral", ["valuation", "integers"]]]}]}, {"timestamp": 1603876734, "sha": "216cbc49", "message": "feat(analysis/special_functions/trigonometric): simp attributes for trig values (#4806)\nsimp attributes for the trig values that didn't already have them", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "cos_pi_div_eight", ["real"]], ["mod", "theorem", "cos_pi_div_four", ["real"]], ["mod", "theorem", "cos_pi_div_six", ["real"]], ["mod", "theorem", "cos_pi_div_sixteen", ["real"]], ["mod", "theorem", "cos_pi_div_thirty_two", ["real"]], ["mod", "theorem", "cos_pi_div_three", ["real"]], ["mod", "theorem", "sin_pi_div_eight", ["real"]], ["mod", "theorem", "sin_pi_div_four", ["real"]], ["mod", "theorem", "sin_pi_div_six", ["real"]], ["mod", "theorem", "sin_pi_div_sixteen", ["real"]], ["mod", "theorem", "sin_pi_div_thirty_two", ["real"]], ["mod", "theorem", "sin_pi_div_three", ["real"]]]}]}, {"timestamp": 1603871372, "sha": "6dfa952c", "message": "refactor(order/filter): make `filter.has_mem semireducible (#4807)\nThis way `simp only []` does not simplify `s ∈ f` to `s ∈ f.sets`.\n* Add protected simp lemmas `filter.mem_mk` and `filter.mem_sets`.\n* Use implicit argument in `filter.mem_generate_iff`.\n* Use `∃ t, s ∈ ...` instead of `s ∈ ⋃ t, ...` in\n `filter.mem_infi_finite` and `filter.mem_infi_finite'`.\n* Use an implicit argument in `(non/ne_)empty_of_mem_ultrafilter`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "mem_generate_iff", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "ne_empty_of_mem_ultrafilter", ["filter"]], ["mod", "theorem", "nonempty_of_mem_ultrafilter", ["filter"]]]}, {"oldPath": "src/topology/category/Compactum.lean", "newPath": "src/topology/category/Compactum.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1603865198, "sha": "7807f3d3", "message": "chore(linear_algebra/affine_space/basic): split (#4767)\n* Split `linear_algebra/affine_space/basic` into two files: `affine_map` and `affine_subspace`.\n* Move notation `affine_space` to the bottom of `algebra/add_torsor`.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/affine_map.lean", "changes": [["add", "theorem", "add_linear", ["affine_map"]], ["add", "theorem", "apply_line_map", ["affine_map"]], ["add", "theorem", "coe_add", ["affine_map"]], ["add", "theorem", "coe_comp", ["affine_map"]], ["add", "theorem", "coe_const", ["affine_map"]], ["add", "theorem", "coe_fst", ["affine_map"]], ["add", "theorem", "coe_homothety_affine", ["affine_map"]], ["add", "theorem", "coe_homothety_hom", ["affine_map"]], ["add", "theorem", "coe_id", ["affine_map"]], ["add", "theorem", "coe_line_map", ["affine_map"]], ["add", "theorem", "coe_mk'", ["affine_map"]], ["add", "theorem", "coe_mk", ["affine_map"]], ["add", "theorem", "coe_mul", ["affine_map"]], ["add", "theorem", "coe_one", ["affine_map"]], ["add", "theorem", "coe_smul", ["affine_map"]], ["add", "theorem", "coe_snd", ["affine_map"]], ["add", "theorem", "coe_zero", ["affine_map"]], ["add", "def", "comp", ["affine_map"]], ["add", "theorem", "comp_apply", ["affine_map"]], ["add", "theorem", "comp_assoc", ["affine_map"]], ["add", "theorem", "comp_id", ["affine_map"]], ["add", "theorem", "comp_line_map", ["affine_map"]], ["add", "def", "const", ["affine_map"]], ["add", "theorem", "const_linear", ["affine_map"]], ["add", "theorem", "decomp'", ["affine_map"]], ["add", "theorem", "decomp", ["affine_map"]], ["add", "theorem", "ext", ["affine_map"]], ["add", "theorem", "ext_iff", ["affine_map"]], ["add", "def", "fst", ["affine_map"]], ["add", "theorem", "fst_line_map", ["affine_map"]], ["add", "theorem", "fst_linear", ["affine_map"]], ["add", "def", "homothety", ["affine_map"]], ["add", "theorem", "homothety_add", ["affine_map"]], ["add", "def", "homothety_affine", ["affine_map"]], ["add", "theorem", "homothety_apply", ["affine_map"]], ["add", "theorem", "homothety_def", ["affine_map"]], ["add", "def", "homothety_hom", ["affine_map"]], ["add", "theorem", "homothety_mul", ["affine_map"]], ["add", "theorem", "homothety_one", ["affine_map"]], ["add", "theorem", "homothety_zero", ["affine_map"]], ["add", "def", "id", ["affine_map"]], ["add", "theorem", "id_apply", ["affine_map"]], ["add", "theorem", "id_comp", ["affine_map"]], ["add", "theorem", "id_linear", ["affine_map"]], ["add", "theorem", "image_interval", ["affine_map"]], ["add", "theorem", "injective_coe_fn", ["affine_map"]], ["add", "def", "line_map", ["affine_map"]], ["add", "theorem", "line_map_apply", ["affine_map"]], ["add", "theorem", "line_map_apply_module'", ["affine_map"]], ["add", "theorem", "line_map_apply_module", ["affine_map"]], ["add", "theorem", "line_map_apply_one", ["affine_map"]], ["add", "theorem", "line_map_apply_one_sub", ["affine_map"]], ["add", "theorem", "line_map_apply_ring'", ["affine_map"]], ["add", "theorem", "line_map_apply_ring", ["affine_map"]], ["add", "theorem", "line_map_apply_zero", ["affine_map"]], ["add", "theorem", "line_map_linear", ["affine_map"]], ["add", "theorem", "line_map_same", ["affine_map"]], ["add", "theorem", "line_map_same_apply", ["affine_map"]], ["add", "theorem", "line_map_symm", ["affine_map"]], ["add", "theorem", "line_map_vadd_apply", ["affine_map"]], ["add", "theorem", "linear_map_vsub", ["affine_map"]], ["add", "theorem", "map_vadd", ["affine_map"]], ["add", "def", "mk'", ["affine_map"]], ["add", "theorem", "mk'_linear", ["affine_map"]], ["add", "def", "snd", ["affine_map"]], ["add", "theorem", "snd_line_map", ["affine_map"]], ["add", "theorem", "snd_linear", ["affine_map"]], ["add", "theorem", "to_fun_eq_coe", ["affine_map"]], ["add", "theorem", "vadd_apply", ["affine_map"]], ["add", "theorem", "vsub_apply", ["affine_map"]], ["add", "theorem", "zero_linear", ["affine_map"]], ["add", "structure", "affine_map", []], ["add", "theorem", "coe_to_affine_map", ["linear_map"]], ["add", "def", "to_affine_map", ["linear_map"]], ["add", "theorem", "to_affine_map_linear", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/affine_subspace.lean", "changes": [["add", "def", "affine_span", []], ["add", "theorem", "affine_span_insert_affine_span", []], ["add", "theorem", "affine_span_insert_eq_affine_span", []], ["add", "theorem", "affine_span_mono", []], ["add", "theorem", "affine_span_nonempty", []], ["add", "theorem", "affine_span_singleton_union_vadd_eq_top_of_span_eq_top", []], ["add", "theorem", "affine_span_coe", ["affine_subspace"]], ["add", "theorem", "affine_span_eq_Inf", ["affine_subspace"]], ["add", "theorem", "bot_coe", ["affine_subspace"]], ["add", "theorem", "coe_affine_span_singleton", ["affine_subspace"]], ["add", "theorem", "coe_direction_eq_vsub_set", ["affine_subspace"]], ["add", "theorem", "coe_direction_eq_vsub_set_left", ["affine_subspace"]], ["add", "theorem", "coe_direction_eq_vsub_set_right", ["affine_subspace"]], ["add", "def", "direction", ["affine_subspace"]], ["add", "theorem", "direction_affine_span_insert", ["affine_subspace"]], ["add", "theorem", "direction_bot", ["affine_subspace"]], ["add", "theorem", "direction_eq_top_iff_of_nonempty", ["affine_subspace"]], ["add", "theorem", "direction_eq_vector_span", ["affine_subspace"]], ["add", "theorem", "direction_inf", ["affine_subspace"]], ["add", "theorem", "direction_inf_of_mem", ["affine_subspace"]], ["add", "theorem", "direction_inf_of_mem_inf", ["affine_subspace"]], ["add", "theorem", "direction_le", ["affine_subspace"]], ["add", "theorem", "direction_lt_of_nonempty", ["affine_subspace"]], ["add", "theorem", "direction_mk'", ["affine_subspace"]], ["add", "def", "direction_of_nonempty", ["affine_subspace"]], ["add", "theorem", "direction_of_nonempty_eq_direction", ["affine_subspace"]], ["add", "theorem", "direction_sup", ["affine_subspace"]], ["add", "theorem", "direction_top", ["affine_subspace"]], ["add", "theorem", "eq_iff_direction_eq_of_mem", ["affine_subspace"]], ["add", "theorem", "eq_of_direction_eq_of_nonempty_of_le", ["affine_subspace"]], ["add", "theorem", "exists_of_lt", ["affine_subspace"]], ["add", "theorem", "ext", ["affine_subspace"]], ["add", "theorem", "ext_of_direction_eq", ["affine_subspace"]], ["add", "theorem", "inf_coe", ["affine_subspace"]], ["add", "theorem", "inter_eq_singleton_of_nonempty_of_is_compl", ["affine_subspace"]], ["add", "theorem", "inter_nonempty_of_nonempty_of_sup_direction_eq_top", ["affine_subspace"]], ["add", "theorem", "le_def'", ["affine_subspace"]], ["add", "theorem", "le_def", ["affine_subspace"]], ["add", "theorem", "lt_def", ["affine_subspace"]], ["add", "theorem", "lt_iff_le_and_exists", ["affine_subspace"]], ["add", "theorem", "mem_affine_span_insert_iff", ["affine_subspace"]], ["add", "theorem", "mem_affine_span_singleton", ["affine_subspace"]], ["add", "theorem", "mem_coe", ["affine_subspace"]], ["add", "theorem", "mem_direction_iff_eq_vsub", ["affine_subspace"]], ["add", "theorem", "mem_direction_iff_eq_vsub_left", ["affine_subspace"]], ["add", "theorem", "mem_direction_iff_eq_vsub_right", ["affine_subspace"]], ["add", "theorem", "mem_inf_iff", ["affine_subspace"]], ["add", "theorem", "mem_top", ["affine_subspace"]], ["add", "def", "mk'", ["affine_subspace"]], ["add", "theorem", "mk'_eq", ["affine_subspace"]], ["add", "theorem", "mk'_nonempty", ["affine_subspace"]], ["add", "theorem", "not_le_iff_exists", ["affine_subspace"]], ["add", "theorem", "not_mem_bot", ["affine_subspace"]], ["add", "theorem", "self_mem_mk'", ["affine_subspace"]], ["add", "theorem", "span_Union", ["affine_subspace"]], ["add", "theorem", "span_empty", ["affine_subspace"]], ["add", "theorem", "span_points_subset_coe_of_subset_coe", ["affine_subspace"]], ["add", "theorem", "span_union", ["affine_subspace"]], ["add", "theorem", "span_univ", ["affine_subspace"]], ["add", "theorem", "sup_direction_le", ["affine_subspace"]], ["add", "theorem", "sup_direction_lt_of_nonempty_of_inter_empty", ["affine_subspace"]], ["add", "theorem", "top_coe", ["affine_subspace"]], ["add", "theorem", "vadd_mem_iff_mem_direction", ["affine_subspace"]], ["add", "theorem", "vadd_mem_mk'", ["affine_subspace"]], ["add", "theorem", "vadd_mem_of_mem_direction", ["affine_subspace"]], ["add", "theorem", "vsub_left_mem_direction_iff_mem", ["affine_subspace"]], ["add", "theorem", "vsub_mem_direction", ["affine_subspace"]], ["add", "theorem", "vsub_right_mem_direction_iff_mem", ["affine_subspace"]], ["add", "structure", "affine_subspace", []], ["add", "theorem", "coe_affine_span", []], ["add", "theorem", "direction_affine_span", []], ["add", "theorem", "mem_affine_span", []], ["add", "theorem", "mem_span_points", []], ["add", "def", "span_points", []], ["add", "theorem", "span_points_nonempty", []], ["add", "def", "to_affine_subspace", ["submodule"]], ["add", "theorem", "subset_affine_span", []], ["add", "theorem", "subset_span_points", []], ["add", "theorem", "vadd_mem_span_points_of_mem_span_points_of_mem_vector_span", []], ["add", "def", "vector_span", []], ["add", "theorem", "vector_span_def", []], ["add", "theorem", "vector_span_empty", []], ["add", "theorem", "vector_span_eq_span_vsub_set_left", []], ["add", "theorem", "vector_span_eq_span_vsub_set_left_ne", []], ["add", "theorem", "vector_span_eq_span_vsub_set_right", []], ["add", "theorem", "vector_span_eq_span_vsub_set_right_ne", []], ["add", "theorem", "vector_span_image_eq_span_vsub_set_left_ne", []], ["add", "theorem", "vector_span_image_eq_span_vsub_set_right_ne", []], ["add", "theorem", "vector_span_mono", []], ["add", "theorem", "vector_span_range_eq_span_range_vsub_left", []], ["add", "theorem", "vector_span_range_eq_span_range_vsub_left_ne", []], ["add", "theorem", "vector_span_range_eq_span_range_vsub_right", []], ["add", "theorem", "vector_span_range_eq_span_range_vsub_right_ne", []], ["add", "theorem", "vector_span_singleton", []], ["add", "theorem", "vsub_mem_vector_span", []], ["add", "theorem", "vsub_mem_vector_span_of_mem_span_points_of_mem_span_points", []], ["add", "theorem", "vsub_set_subset_vector_span", []]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["del", "theorem", "add_linear", ["affine_map"]], ["del", "theorem", "apply_line_map", ["affine_map"]], ["del", "theorem", "coe_add", ["affine_map"]], ["del", "theorem", "coe_comp", ["affine_map"]], ["del", "theorem", "coe_const", ["affine_map"]], ["del", "theorem", "coe_fst", ["affine_map"]], ["del", "theorem", "coe_homothety_affine", ["affine_map"]], ["del", "theorem", "coe_homothety_hom", ["affine_map"]], ["del", "theorem", "coe_id", ["affine_map"]], ["del", "theorem", "coe_line_map", ["affine_map"]], ["del", "theorem", "coe_mk'", ["affine_map"]], ["del", "theorem", "coe_mk", ["affine_map"]], ["del", "theorem", "coe_mul", ["affine_map"]], ["del", "theorem", "coe_one", ["affine_map"]], ["del", "theorem", "coe_smul", ["affine_map"]], ["del", "theorem", "coe_snd", ["affine_map"]], ["del", "theorem", "coe_zero", ["affine_map"]], ["del", "def", "comp", ["affine_map"]], ["del", "theorem", "comp_apply", ["affine_map"]], ["del", "theorem", "comp_assoc", ["affine_map"]], ["del", "theorem", "comp_id", ["affine_map"]], ["del", "theorem", "comp_line_map", ["affine_map"]], ["del", "def", "const", ["affine_map"]], ["del", "theorem", "const_linear", ["affine_map"]], ["del", "theorem", "decomp'", ["affine_map"]], ["del", "theorem", "decomp", ["affine_map"]], ["del", "theorem", "ext", ["affine_map"]], ["del", "theorem", "ext_iff", ["affine_map"]], ["del", "def", "fst", ["affine_map"]], ["del", "theorem", "fst_line_map", ["affine_map"]], ["del", "theorem", "fst_linear", ["affine_map"]], ["del", "def", "homothety", ["affine_map"]], ["del", "theorem", "homothety_add", ["affine_map"]], ["del", "def", "homothety_affine", ["affine_map"]], ["del", "theorem", "homothety_apply", ["affine_map"]], ["del", "theorem", "homothety_def", ["affine_map"]], ["del", "def", "homothety_hom", ["affine_map"]], ["del", "theorem", "homothety_mul", ["affine_map"]], ["del", "theorem", "homothety_one", ["affine_map"]], ["del", "theorem", "homothety_zero", ["affine_map"]], ["del", "def", "id", ["affine_map"]], ["del", "theorem", "id_apply", ["affine_map"]], ["del", "theorem", "id_comp", ["affine_map"]], ["del", "theorem", "id_linear", ["affine_map"]], ["del", "theorem", "image_interval", ["affine_map"]], ["del", "theorem", "injective_coe_fn", ["affine_map"]], ["del", "def", "line_map", ["affine_map"]], ["del", "theorem", "line_map_apply", ["affine_map"]], ["del", "theorem", "line_map_apply_module'", ["affine_map"]], ["del", "theorem", "line_map_apply_module", ["affine_map"]], ["del", "theorem", "line_map_apply_one", ["affine_map"]], ["del", "theorem", "line_map_apply_one_sub", ["affine_map"]], ["del", "theorem", "line_map_apply_ring'", ["affine_map"]], ["del", "theorem", "line_map_apply_ring", ["affine_map"]], ["del", "theorem", "line_map_apply_zero", ["affine_map"]], ["del", "theorem", "line_map_linear", ["affine_map"]], ["del", "theorem", "line_map_same", ["affine_map"]], ["del", "theorem", "line_map_same_apply", ["affine_map"]], ["del", "theorem", "line_map_symm", ["affine_map"]], ["del", "theorem", "line_map_vadd_apply", ["affine_map"]], ["del", "theorem", "linear_map_vsub", ["affine_map"]], ["del", "theorem", "map_vadd", ["affine_map"]], ["del", "def", "mk'", ["affine_map"]], ["del", "theorem", "mk'_linear", ["affine_map"]], ["del", "def", "snd", ["affine_map"]], ["del", "theorem", "snd_line_map", ["affine_map"]], ["del", "theorem", "snd_linear", ["affine_map"]], ["del", "theorem", "to_fun_eq_coe", ["affine_map"]], ["del", "theorem", "vadd_apply", ["affine_map"]], ["del", "theorem", "vsub_apply", ["affine_map"]], ["del", "theorem", "zero_linear", ["affine_map"]], ["del", "structure", "affine_map", []], ["del", "def", "affine_span", []], ["del", "theorem", "affine_span_insert_affine_span", []], ["del", "theorem", "affine_span_insert_eq_affine_span", []], ["del", "theorem", "affine_span_mono", []], ["del", "theorem", "affine_span_nonempty", []], ["del", "theorem", "affine_span_singleton_union_vadd_eq_top_of_span_eq_top", []], ["del", "theorem", "affine_span_coe", ["affine_subspace"]], ["del", "theorem", "affine_span_eq_Inf", ["affine_subspace"]], ["del", "theorem", "bot_coe", ["affine_subspace"]], ["del", "theorem", "coe_affine_span_singleton", ["affine_subspace"]], ["del", "theorem", "coe_direction_eq_vsub_set", ["affine_subspace"]], ["del", "theorem", "coe_direction_eq_vsub_set_left", ["affine_subspace"]], ["del", "theorem", "coe_direction_eq_vsub_set_right", ["affine_subspace"]], ["del", "def", "direction", ["affine_subspace"]], ["del", "theorem", "direction_affine_span_insert", ["affine_subspace"]], ["del", "theorem", "direction_bot", ["affine_subspace"]], ["del", "theorem", "direction_eq_top_iff_of_nonempty", ["affine_subspace"]], ["del", "theorem", "direction_eq_vector_span", ["affine_subspace"]], ["del", "theorem", "direction_inf", ["affine_subspace"]], ["del", "theorem", "direction_inf_of_mem", ["affine_subspace"]], ["del", "theorem", "direction_inf_of_mem_inf", ["affine_subspace"]], ["del", "theorem", "direction_le", ["affine_subspace"]], ["del", "theorem", "direction_lt_of_nonempty", ["affine_subspace"]], ["del", "theorem", "direction_mk'", ["affine_subspace"]], ["del", "def", "direction_of_nonempty", ["affine_subspace"]], ["del", "theorem", "direction_of_nonempty_eq_direction", ["affine_subspace"]], ["del", "theorem", "direction_sup", ["affine_subspace"]], ["del", "theorem", "direction_top", ["affine_subspace"]], ["del", "theorem", "eq_iff_direction_eq_of_mem", ["affine_subspace"]], ["del", "theorem", "eq_of_direction_eq_of_nonempty_of_le", ["affine_subspace"]], ["del", "theorem", "exists_of_lt", ["affine_subspace"]], ["del", "theorem", "ext", ["affine_subspace"]], ["del", "theorem", "ext_of_direction_eq", ["affine_subspace"]], ["del", "theorem", "inf_coe", ["affine_subspace"]], ["del", "theorem", "inter_eq_singleton_of_nonempty_of_is_compl", ["affine_subspace"]], ["del", "theorem", "inter_nonempty_of_nonempty_of_sup_direction_eq_top", ["affine_subspace"]], ["del", "theorem", "le_def'", ["affine_subspace"]], ["del", "theorem", "le_def", ["affine_subspace"]], ["del", "theorem", "lt_def", ["affine_subspace"]], ["del", "theorem", "lt_iff_le_and_exists", ["affine_subspace"]], ["del", "theorem", "mem_affine_span_insert_iff", ["affine_subspace"]], ["del", "theorem", "mem_affine_span_singleton", ["affine_subspace"]], ["del", "theorem", "mem_coe", ["affine_subspace"]], ["del", "theorem", "mem_direction_iff_eq_vsub", ["affine_subspace"]], ["del", "theorem", "mem_direction_iff_eq_vsub_left", ["affine_subspace"]], ["del", "theorem", "mem_direction_iff_eq_vsub_right", ["affine_subspace"]], ["del", "theorem", "mem_inf_iff", ["affine_subspace"]], ["del", "theorem", "mem_top", ["affine_subspace"]], ["del", "def", "mk'", ["affine_subspace"]], ["del", "theorem", "mk'_eq", ["affine_subspace"]], ["del", "theorem", "mk'_nonempty", ["affine_subspace"]], ["del", "theorem", "not_le_iff_exists", ["affine_subspace"]], ["del", "theorem", "not_mem_bot", ["affine_subspace"]], ["del", "theorem", "self_mem_mk'", ["affine_subspace"]], ["del", "theorem", "span_Union", ["affine_subspace"]], ["del", "theorem", "span_empty", ["affine_subspace"]], ["del", "theorem", "span_points_subset_coe_of_subset_coe", ["affine_subspace"]], ["del", "theorem", "span_union", ["affine_subspace"]], ["del", "theorem", "span_univ", ["affine_subspace"]], ["del", "theorem", "sup_direction_le", ["affine_subspace"]], ["del", "theorem", "sup_direction_lt_of_nonempty_of_inter_empty", ["affine_subspace"]], ["del", "theorem", "top_coe", ["affine_subspace"]], ["del", "theorem", "vadd_mem_iff_mem_direction", ["affine_subspace"]], ["del", "theorem", "vadd_mem_mk'", ["affine_subspace"]], ["del", "theorem", "vadd_mem_of_mem_direction", ["affine_subspace"]], ["del", "theorem", "vsub_left_mem_direction_iff_mem", ["affine_subspace"]], ["del", "theorem", "vsub_mem_direction", ["affine_subspace"]], ["del", "theorem", "vsub_right_mem_direction_iff_mem", ["affine_subspace"]], ["del", "structure", "affine_subspace", []], ["del", "theorem", "coe_affine_span", []], ["del", "theorem", "direction_affine_span", []], ["del", "theorem", "coe_to_affine_map", ["linear_map"]], ["del", "def", "to_affine_map", ["linear_map"]], ["del", "theorem", "to_affine_map_linear", ["linear_map"]], ["del", "theorem", "mem_affine_span", []], ["del", "theorem", "mem_span_points", []], ["del", "def", "span_points", []], ["del", "theorem", "span_points_nonempty", []], ["del", "def", "to_affine_subspace", ["submodule"]], ["del", "theorem", "subset_affine_span", []], ["del", "theorem", "subset_span_points", []], ["del", "theorem", "vadd_mem_span_points_of_mem_span_points_of_mem_vector_span", []], ["del", "def", "vector_span", []], ["del", "theorem", "vector_span_def", []], ["del", "theorem", "vector_span_empty", []], ["del", "theorem", "vector_span_eq_span_vsub_set_left", []], ["del", "theorem", "vector_span_eq_span_vsub_set_left_ne", []], ["del", "theorem", "vector_span_eq_span_vsub_set_right", []], ["del", "theorem", "vector_span_eq_span_vsub_set_right_ne", []], ["del", "theorem", "vector_span_image_eq_span_vsub_set_left_ne", []], ["del", "theorem", "vector_span_image_eq_span_vsub_set_right_ne", []], ["del", "theorem", "vector_span_mono", []], ["del", "theorem", "vector_span_range_eq_span_range_vsub_left", []], ["del", "theorem", "vector_span_range_eq_span_range_vsub_left_ne", []], ["del", "theorem", "vector_span_range_eq_span_range_vsub_right", []], ["del", "theorem", "vector_span_range_eq_span_range_vsub_right_ne", []], ["del", "theorem", "vector_span_singleton", []], ["del", "theorem", "vsub_mem_vector_span", []], ["del", "theorem", "vsub_mem_vector_span_of_mem_span_points_of_mem_span_points", []], ["del", "theorem", "vsub_set_subset_vector_span", []]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/ordered.lean", "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}]}, {"timestamp": 1603847490, "sha": "4d1da548", "message": "chore(scripts): update nolints.txt (#4808)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603837371, "sha": "c7379968", "message": "feat(algebra/algebra/subalgebra): algebra equalizer (#4791)\nChanges to subalgebra.lean from #4786", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "def", "equalizer", ["alg_hom"]], ["add", "theorem", "mem_equalizer", ["alg_hom"]]]}]}, {"timestamp": 1603837370, "sha": "2a7e2158", "message": "feat(data/vector2): scanl and associated lemmas (#4613)", "changes": [{"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["mod", "theorem", "nth_cons_nil", ["vector"]], ["add", "def", "scanl", ["vector"]], ["add", "theorem", "scanl_cons", ["vector"]], ["add", "theorem", "scanl_head", ["vector"]], ["add", "theorem", "scanl_nil", ["vector"]], ["add", "theorem", "scanl_nth", ["vector"]], ["add", "theorem", "scanl_singleton", ["vector"]], ["add", "theorem", "scanl_val", ["vector"]], ["add", "theorem", "to_list_scanl", ["vector"]]]}]}, {"timestamp": 1603828385, "sha": "51e12c00", "message": "chore(ring_theory/fractional_ideal): change exists_eq_span_singleton_mul (#4800)\nReplace assumption `(a : K)` with `(a : R)`\nAdd result `a \\ne 0` \nChange `span_singleton` a to `span singleton (g.to_map a)^-1`\n.. in the statement of lemma `exists_eq_span_singleton_mul`\nAdapt dependences", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}]}, {"timestamp": 1603828383, "sha": "97065dbf", "message": "refactor(data/polynomial): use `linear_map` for `monomial`, review `degree` (#4784)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_int_cast", ["alg_hom"]]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "one_eq_inv", []]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "def", "monomial", ["polynomial"]], ["add", "theorem", "monomial_def", ["polynomial"]], ["mod", "theorem", "monomial_zero_right", ["polynomial"]], ["add", "theorem", "smul_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": [["del", "theorem", "eq_C_of_nat_degree_eq_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["mod", "theorem", "C_eq_int_cast", ["polynomial"]], ["add", "theorem", "as_sum_range_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "as_sum_support_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "coeff_nat_degree", ["polynomial"]], ["add", "theorem", "degree_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "degree_C_mul_X_pow_le", ["polynomial"]], ["mod", "theorem", "degree_X_pow", ["polynomial"]], ["mod", "theorem", "degree_monomial", ["polynomial"]], ["mod", "theorem", "degree_monomial_le", ["polynomial"]], ["add", "theorem", "eq_C_of_nat_degree_eq_zero", ["polynomial"]], ["add", "theorem", "eq_X_add_C_of_nat_degree_le_one", ["polynomial"]], ["add", "theorem", "exists_eq_X_add_C_of_nat_degree_le_one", ["polynomial"]], ["mod", "theorem", "mem_support_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "ne_zero_of_ne", ["polynomial", "monic"]], ["add", "theorem", "ne_zero_of_polynomial_ne", ["polynomial", "monic"]], ["del", "theorem", "ne_zero_of_zero_ne_one", ["polynomial", "monic"]], ["mod", "theorem", "nat_degree_C_mul_X_pow_of_nonzero", ["polynomial"]], ["add", "theorem", "nat_degree_le_iff_degree_le", ["polynomial"]], ["del", "theorem", "nat_degree_le_of_degree_le", ["polynomial"]], ["add", "theorem", "supp_subset_range", ["polynomial"]], ["mod", "theorem", "support_C_mul_X_pow_nonzero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["mod", "theorem", "le_trailing_degree_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "le_trailing_degree_monomial", ["polynomial"]], ["del", "theorem", "monomial_le_trailing_degree", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_monomial", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_monomial_le", ["polynomial"]], ["add", "theorem", "trailing_degree_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "trailing_degree_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "derivative_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "derivative_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "theorem", "of_polynomial_ne", ["polynomial", "nontrivial"]], ["del", "theorem", "of_polynomial_ne", ["polynomial", "nonzero"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["del", "theorem", "nat_degree_gt_one_of_irrational_root", []], ["add", "theorem", "one_lt_nat_degree_of_irrational_root", []]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/scale_roots.lean", "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": [["add", "theorem", "inv_fun_monomial", ["poly_equiv_tensor"]]]}]}, {"timestamp": 1603828381, "sha": "a1ab984c", "message": "feat(data/finset/lattice,order/basic): add lemmas in order_dual, prove dual order exchanges max' and min' (#4715)\nIntroduce functionality to work with order duals and monotone decreasing maps. The pretty part of the code is by Johan Commelin, the ugly part is my own addition!", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "map", ["finset", "nonempty"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "max'_eq_of_dual_min'", ["finset"]], ["add", "theorem", "min'_eq_of_dual_max'", ["finset"]], ["add", "theorem", "of_dual_max_eq_min_of_dual", ["finset"]], ["add", "theorem", "of_dual_min_eq_max_of_dual", ["finset"]]]}, {"oldPath": null, "newPath": "src/order/order_dual.lean", "changes": [["add", "theorem", "le_to_dual", ["order_dual"]], ["add", "theorem", "lt_to_dual", ["order_dual"]], ["add", "def", "of_dual", ["order_dual"]], ["add", "theorem", "of_dual_inj", ["order_dual"]], ["add", "theorem", "of_dual_le_of_dual", ["order_dual"]], ["add", "theorem", "of_dual_lt_of_dual", ["order_dual"]], ["add", "theorem", "of_dual_symm_eq", ["order_dual"]], ["add", "theorem", "of_dual_to_dual", ["order_dual"]], ["add", "def", "to_dual", ["order_dual"]], ["add", "theorem", "to_dual_inj", ["order_dual"]], ["add", "theorem", "to_dual_le", ["order_dual"]], ["add", "theorem", "to_dual_le_to_dual", ["order_dual"]], ["add", "theorem", "to_dual_lt", ["order_dual"]], ["add", "theorem", "to_dual_lt_to_dual", ["order_dual"]], ["add", "theorem", "to_dual_of_dual", ["order_dual"]], ["add", "theorem", "to_dual_symm_eq", ["order_dual"]]]}]}, {"timestamp": 1603819251, "sha": "1efbf13a", "message": "feat(data/vector2): add lemma map_id (#4799)\n`map_id` proves that a vector is unchanged when mapped under the `id` function. This is similar to `list.map_id`. This lemma was marked with the `simp` attribute to make it available to the simplifier.", "changes": [{"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["add", "theorem", "map_id", ["vector"]]]}]}, {"timestamp": 1603819247, "sha": "40e514cb", "message": "feat(algebra/monoid_algebra): formula for `lift_nc f g (c • φ)` (#4782)", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "lift_nc_smul", ["add_monoid_algebra"]], ["add", "theorem", "lift_nc_smul", ["monoid_algebra"]], ["mod", "theorem", "single_algebra_map_eq_algebra_map_mul_of", ["monoid_algebra"]]]}]}, {"timestamp": 1603819245, "sha": "99acfda0", "message": "feat(category_theory/sites): pretopology (#4648)\nAdds pretopologies.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/pretopology.lean", "changes": [["add", "def", "gi", ["category_theory", "pretopology"]], ["add", "theorem", "mem_to_grothendieck", ["category_theory", "pretopology"]], ["add", "def", "of_grothendieck", ["category_theory", "pretopology"]], ["add", "def", "to_grothendieck", ["category_theory", "pretopology"]], ["add", "theorem", "to_grothendieck_bot", ["category_theory", "pretopology"]], ["add", "def", "trivial", ["category_theory", "pretopology"]], ["add", "structure", "pretopology", ["category_theory"]], ["add", "def", "pullback_arrows", ["category_theory"]], ["add", "theorem", "pullback_arrows_comm", ["category_theory"]], ["add", "theorem", "pullback_singleton", ["category_theory"]]]}]}, {"timestamp": 1603809553, "sha": "a027a37b", "message": "feat(tactic/simps): user-provided names for projections (#4663)\nAdds the functionality to specify custom projection names, like this:\n```lean\ninitialize_simps_projections equiv (to_fun → apply, inv_fun → symm_apply)\n```\nThese names will always be used and cannot (yet) be manually overridden. \nImplement this for embeddings: `initialize_simps_projections embedding (to_fun → apply)`.\nRename `fixed_points.to_alg_hom_apply -> fixed_points.to_alg_hom_apply_apply`, since `@[simps]` now generates the name `to_alg_hom_apply` instead of `to_alg_hom_to_fun`.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["del", "theorem", "to_alg_hom_apply", ["fixed_points"]], ["add", "theorem", "to_alg_hom_apply_apply", ["fixed_points"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "def", "sigma_map", ["function", "embedding"]], ["mod", "def", "sigma_mk", ["function", "embedding"]], ["mod", "def", "embedding_of_subset", ["set"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "inv_fun", ["manual_projection_names", "equiv", "simps"]], ["add", "def", "symm", ["manual_projection_names", "equiv"]], ["add", "structure", "equiv", ["manual_projection_names"]]]}]}, {"timestamp": 1603799733, "sha": "e0b153b2", "message": "refactor(*): drop `decidable_linear_order`, switch to Lean 3.22.0 (#4762)\nThe main non-bc change in Lean 3.22.0 is leanprover-community/lean#484 which merges `linear_order`\nwith `decidable_linear_order`. This is the `mathlib` part of this PR.\n## List of API changes\n* All `*linear_order*` typeclasses now imply decidability of `(≤)`, `(<)`, and `(=)`.\n* Drop `classical.DLO`.\n* Drop `discrete_linear_ordered_field`, use `linear_ordered_field` instead.\n* Drop `decidable_linear_ordered_semiring`, use `linear_ordered_semiring` instead.\n* Drop `decidable_linear_ordered_comm_ring`, use `linear_ordered_comm_ring` instead;\n* Rename `decidable_linear_ordered_cancel_add_comm_monoid` to `linear_ordered_cancel_add_comm_monoid`.\n* Rename `decidable_linear_ordered_add_comm_group` to `linear_ordered_add_comm_group`.\n* Modify some lemmas to use weaker typeclass assumptions.\n* Add more lemmas about `ordering.compares`, including `linear_order_of_compares` which\n constructs a `linear_order` instance from `cmp` function.", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": [["mod", "theorem", "Ico_lemma", []]]}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["del", "theorem", "exists_int_smul_near_of_pos'", ["decidable_linear_ordered_add_comm_group"]], ["del", "theorem", "exists_int_smul_near_of_pos", ["decidable_linear_ordered_add_comm_group"]], ["mod", "theorem", "exists_int_pow_near'", []], ["mod", "theorem", "exists_int_pow_near", []], ["add", "theorem", "exists_int_smul_near_of_pos'", ["linear_ordered_add_comm_group"]], ["add", "theorem", "exists_int_smul_near_of_pos", ["linear_ordered_add_comm_group"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["mod", "theorem", "abs_sum_le_sum_abs", ["finset"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["mod", "theorem", "one_lt_fpow", []]]}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["mod", "theorem", "abs_sub_lt_one_of_floor_eq_floor", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "abs_neg_one_pow", []], ["mod", "theorem", "pow_abs", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["mod", "theorem", "cmp_compares", []], ["mod", "theorem", "le_iff_le_iff_lt_iff_lt", ["decidable"]], ["mod", "theorem", "le_imp_le_iff_lt_imp_lt", ["decidable"]], ["add", "def", "linear_order_of_compares", []], ["mod", "theorem", "eq_gt", ["ordering", "compares"]], ["add", "theorem", "le_antisymm", ["ordering", "compares"]], ["add", "theorem", "le_total", ["ordering", "compares"]], ["add", "theorem", "ne_gt", ["ordering", "compares"]], ["add", "theorem", "ne_lt", ["ordering", "compares"]], ["add", "theorem", "compares_swap", ["ordering"]], ["add", "theorem", "swap_eq_iff_eq_swap", ["ordering"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "add_lt_add_left", ["decidable_linear_ordered_add_comm_group"]], ["add", "theorem", "exists_gt_zero", []], ["mod", "theorem", "fn_min_mul_fn_max", []], ["add", "theorem", "add_lt_add_left", ["linear_ordered_add_comm_group"]], ["mod", "theorem", "min_mul_max", []], ["del", "def", "to_decidable_linear_ordered_add_comm_group", ["nonneg_add_comm_group"]], ["add", "def", "to_linear_ordered_add_comm_group", ["nonneg_add_comm_group"]], ["mod", "theorem", "max_coe", ["units"]], ["mod", "theorem", "min_coe", ["units"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "abs_two", []], ["del", "def", "to_decidable_linear_ordered_comm_ring", ["linear_nonneg_ring"]], ["mod", "def", "to_linear_order", ["linear_nonneg_ring"]], ["add", "def", "to_linear_ordered_comm_ring", ["linear_nonneg_ring"]], ["mod", "def", "to_linear_ordered_ring", ["linear_nonneg_ring"]]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/combinatorics/pigeonhole.lean", "newPath": "src/combinatorics/pigeonhole.lean", "changes": []}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": []}, {"oldPath": "src/data/char.lean", "newPath": "src/data/char.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "sum_div_factorial_le", ["complex"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/fintype/sort.lean", "newPath": "src/data/fintype/sort.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["mod", "theorem", "cast_abs", ["int"]], ["mod", "theorem", "cast_max", ["int"]], ["mod", "theorem", "cast_min", ["int"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "exists_le_of_sum_le", ["list"]], ["mod", "theorem", "exists_lt_of_sum_lt", ["list"]]]}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "abs_sum_le_sum_abs", ["multiset"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "abs_cast", ["nat"]], ["mod", "theorem", "cast_max", ["nat"]], ["mod", "theorem", "cast_min", ["nat"]]]}, {"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["mod", "theorem", "coeff_eq_zero_of_lt_nat_trailing_degree", ["polynomial"]], ["mod", "theorem", "coeff_eq_zero_of_trailing_degree_lt", ["polynomial"]], ["mod", "theorem", "coeff_nat_trailing_degree_eq_zero_of_trailing_degree_lt", ["polynomial"]], ["mod", "theorem", "coeff_nat_trailing_degree_pred_eq_zero", ["polynomial"]], ["mod", "theorem", "le_trailing_degree_C_mul_X_pow", ["polynomial"]], ["mod", "theorem", "le_trailing_degree_X_pow", ["polynomial"]], ["mod", "theorem", "monomial_le_trailing_degree", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_eq_of_trailing_degree_eq", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_le_nat_trailing_degree", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_le_of_trailing_degree_le", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_le_trailing_degree", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_neg", ["polynomial"]], ["mod", "theorem", "nat_trailing_degree_one", ["polynomial"]], ["mod", "theorem", "trailing_degree_eq_nat_trailing_degree", ["polynomial"]], ["mod", "theorem", "trailing_degree_le_trailing_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_abs", ["rat"]], ["mod", "theorem", "cast_max", ["rat"]], ["mod", "theorem", "cast_min", ["rat"]]]}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["mod", "def", "cau_seq", []], ["mod", "def", "is_cau_seq", []]]}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "coe_abs", ["hyperreal"]], ["mod", "theorem", "coe_max", ["hyperreal"]], ["mod", "theorem", "coe_min", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "Union_Inter_of_monotone", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["mod", "theorem", "support_max", ["function"]], ["mod", "theorem", "support_min", ["function"]]]}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/group_theory/archimedean.lean", "newPath": "src/group_theory/archimedean.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["mod", "def", "cycle_factors", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["mod", "def", "swap_factors", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["mod", "theorem", "image_interval", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "def", "lift", ["decidable_linear_order"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_le_coe", ["with_bot"]], ["mod", "theorem", "inf_eq_min", ["with_bot"]], ["mod", "theorem", "lattice_eq_DLO", ["with_bot"]], ["mod", "theorem", "some_le_some", ["with_bot"]], ["mod", "theorem", "sup_eq_max", ["with_bot"]], ["mod", "theorem", "inf_eq_min", ["with_top"]], ["mod", "theorem", "lattice_eq_DLO", ["with_top"]], ["mod", "theorem", "sup_eq_max", ["with_top"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "theorem", "insert", ["is_greatest"]], ["mod", "theorem", "union", ["is_greatest"]], ["mod", "theorem", "is_greatest_pair", []], ["mod", "theorem", "insert", ["is_least"]], ["mod", "theorem", "union", ["is_least"]], ["mod", "theorem", "is_least_pair", []]]}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "theorem", "abs_def", ["filter", "germ"]], ["mod", "theorem", "const_abs", ["filter", "germ"]], ["mod", "theorem", "const_max", ["filter", "germ"]], ["mod", "theorem", "const_min", ["filter", "germ"]], ["mod", "theorem", "max_def", ["filter", "germ"]], ["mod", "theorem", "min_def", ["filter", "germ"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["mod", "theorem", "inf_eq_min", []], ["mod", "theorem", "sup_eq_max", []]]}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["del", "def", "decidable_linear_order_of_STO'", []], ["mod", "def", "linear_order_of_STO'", []]]}, {"oldPath": "src/ring_theory/int/basic.lean", "newPath": "src/ring_theory/int/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": [["mod", "def", "minimum_on", ["tactic", "interactive", "list"]]]}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "summable_abs_iff", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["del", "theorem", "tendsto_nhds", ["decidable_linear_ordered_add_comm_group"]], ["add", "theorem", "tendsto_nhds", ["linear_ordered_add_comm_group"]], ["mod", "theorem", "tendsto_abs_at_top_at_top", []]]}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": [["mod", "theorem", "tendsto_infinity", ["polynomial"]]]}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "theorem", "mem_entourage", ["cauchy_seq"]]]}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1603763775, "sha": "69db7a33", "message": "chore(scripts): update nolints.txt (#4797)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603753461, "sha": "6e2980ce", "message": "chore(*): reflow some long lines (#4794)", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "def", "of_alg_hom", ["alg_equiv"]]]}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "irreducible_of_prime", []], ["mod", "theorem", "prime_of_associated", []]]}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "map_prod", ["ring_hom"]]]}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": [["mod", "theorem", "prod_powerset_insert", ["finset"]]]}, {"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "theorem", "char_p_of_prime_pow_injective", []]]}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "theorem", "lift_add", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "lift_sub", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "of_add", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "of_sub", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "zero_exact_aux", ["module", "direct_limit", "of"]], ["mod", "theorem", "induction_on", ["ring", "direct_limit"]], ["mod", "theorem", "zero_exact_aux", ["ring", "direct_limit", "of"]], ["mod", "theorem", "of_pow", ["ring", "direct_limit"]]]}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["mod", "theorem", "op_geom_series", []]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1603753459, "sha": "8746f083", "message": "feat(data/equiv/basic): equiv.set.powerset (#4790)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}]}, {"timestamp": 1603747845, "sha": "c76c3c5c", "message": "feat(degree/basic.lean): degree_lt_iff_coeff_zero (#4792)\nChanges to degree/basic.lean from #4786", "changes": [{"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "degree_lt_iff_coeff_zero", ["polynomial"]]]}]}, {"timestamp": 1603737572, "sha": "95b3add2", "message": "fix(tactic/derive_fintype): add support for props (#4777)\nThis adds support for propositional arguments in inductive constructors.\nIt was previously not handled, and while it *almost* works without\nchange, we have to use `Sigma' (a:A) (b:B) (c:C), unit` to tuple up the\narguments instead of `Sigma' (a:A) (b:B), C` because it would cause problems\nin the unary case where there is only one propositional field.", "changes": [{"oldPath": "src/tactic/derive_fintype.lean", "newPath": "src/tactic/derive_fintype.lean", "changes": []}, {"oldPath": "test/derive_fintype.lean", "newPath": "test/derive_fintype.lean", "changes": [["add", "structure", "foo4", []]]}]}, {"timestamp": 1603737570, "sha": "94285983", "message": "feat(tactic/rcases): add `rintro (x y : t)` support (#4722)\nAs requested on Zulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/rintros/near/213999254", "changes": [{"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1603737569, "sha": "877a20e3", "message": "feat(ring_theory/finiteness): some finiteness notions in commutative algebra (#4634)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/finiteness.lean", "changes": [["add", "theorem", "comp", ["alg_hom", "finite"]], ["add", "theorem", "finite_type", ["alg_hom", "finite"]], ["add", "theorem", "id", ["alg_hom", "finite"]], ["add", "theorem", "of_surjective", ["alg_hom", "finite"]], ["add", "def", "finite", ["alg_hom"]], ["add", "theorem", "comp", ["alg_hom", "finite_type"]], ["add", "theorem", "comp_surjective", ["alg_hom", "finite_type"]], ["add", "theorem", "id", ["alg_hom", "finite_type"]], ["add", "theorem", "of_surjective", ["alg_hom", "finite_type"]], ["add", "def", "finite_type", ["alg_hom"]], ["add", "theorem", "equiv", ["algebra", "finite_type"]], ["add", "theorem", "of_surjective", ["algebra", "finite_type"]], ["add", "theorem", "self", ["algebra", "finite_type"]], ["add", "theorem", "trans", ["algebra", "finite_type"]], ["add", "def", "finite_type", ["algebra"]], ["add", "theorem", "equiv", ["module", "finite"]], ["add", "theorem", "of_injective", ["module", "finite"]], ["add", "theorem", "of_surjective", ["module", "finite"]], ["add", "theorem", "trans", ["module", "finite"]], ["add", "def", "finite", ["module"]], ["add", "theorem", "finite_def", ["module"]], ["add", "theorem", "comp", ["ring_hom", "finite"]], ["add", "theorem", "finite_type", ["ring_hom", "finite"]], ["add", "theorem", "id", ["ring_hom", "finite"]], ["add", "theorem", "of_surjective", ["ring_hom", "finite"]], ["add", "def", "finite", ["ring_hom"]], ["add", "theorem", "comp", ["ring_hom", "finite_type"]], ["add", "theorem", "comp_surjective", ["ring_hom", "finite_type"]], ["add", "theorem", "id", ["ring_hom", "finite_type"]], ["add", "theorem", "of_surjective", ["ring_hom", "finite_type"]], ["add", "def", "finite_type", ["ring_hom"]]]}]}, {"timestamp": 1603737567, "sha": "61c095f2", "message": "chore(algebra/module,linear_algebra): split off a `linear_map` file (#4476)\nIn order to make `algebra/module/basic.lean` and `linear_algebra/basic.lean` a bit more manageable, move the basic facts about `linear_map`s and `linear_equiv`s into a separate file. `linear_algebra/basic.lean` still needs to be split a bit more.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "def", "to_int_linear_map", ["add_monoid_hom"]], ["del", "def", "to_rat_linear_map", ["add_monoid_hom"]], ["del", "theorem", "is_linear_map_neg", ["is_linear_map"]], ["del", "theorem", "is_linear_map_smul'", ["is_linear_map"]], ["del", "theorem", "is_linear_map_smul", ["is_linear_map"]], ["del", "theorem", "map_neg", ["is_linear_map"]], ["del", "theorem", "map_sub", ["is_linear_map"]], ["del", "theorem", "map_zero", ["is_linear_map"]], ["del", "def", "mk'", ["is_linear_map"]], ["del", "theorem", "mk'_apply", ["is_linear_map"]], ["del", "structure", "is_linear_map", []], ["del", "theorem", "coe_injective", ["linear_map"]], ["del", "theorem", "coe_mk", ["linear_map"]], ["del", "def", "comp", ["linear_map"]], ["del", "theorem", "comp_apply", ["linear_map"]], ["del", "theorem", "comp_coe", ["linear_map"]], ["del", "theorem", "ext", ["linear_map"]], ["del", "theorem", "ext_iff", ["linear_map"]], ["del", "theorem", "ext_ring", ["linear_map"]], ["del", "def", "id", ["linear_map"]], ["del", "theorem", "id_apply", ["linear_map"]], ["del", "theorem", "id_coe", ["linear_map"]], ["del", "theorem", "is_linear", ["linear_map"]], ["del", "theorem", "map_add", ["linear_map"]], ["del", "theorem", "map_neg", ["linear_map"]], ["del", "theorem", "map_smul", ["linear_map"]], ["del", "theorem", "map_sub", ["linear_map"]], ["del", "theorem", "map_sum", ["linear_map"]], ["del", "theorem", "map_zero", ["linear_map"]], ["del", "def", "to_add_monoid_hom", ["linear_map"]], ["del", "theorem", "to_add_monoid_hom_coe", ["linear_map"]], ["del", "theorem", "to_add_monoid_hom_injective", ["linear_map"]], ["del", "theorem", "to_fun_eq_coe", ["linear_map"]], ["del", "structure", "linear_map", []], ["del", "def", "End", ["module"]]]}, {"oldPath": null, "newPath": "src/algebra/module/linear_map.lean", "changes": [["add", "def", "to_int_linear_map", ["add_monoid_hom"]], ["add", "def", "to_rat_linear_map", ["add_monoid_hom"]], ["add", "theorem", "is_linear_map_neg", ["is_linear_map"]], ["add", "theorem", "is_linear_map_smul'", ["is_linear_map"]], ["add", "theorem", "is_linear_map_smul", ["is_linear_map"]], ["add", "theorem", "map_neg", ["is_linear_map"]], ["add", "theorem", "map_sub", ["is_linear_map"]], ["add", "theorem", "map_zero", ["is_linear_map"]], ["add", "def", "mk'", ["is_linear_map"]], ["add", "theorem", "mk'_apply", ["is_linear_map"]], ["add", "structure", "is_linear_map", []], ["add", "theorem", "apply_symm_apply", ["linear_equiv"]], ["add", "theorem", "coe_coe", ["linear_equiv"]], ["add", "theorem", "coe_to_add_equiv", ["linear_equiv"]], ["add", "theorem", "coe_to_equiv", ["linear_equiv"]], ["add", "theorem", "comp_coe", ["linear_equiv"]], ["add", "theorem", "eq_symm_apply", ["linear_equiv"]], ["add", "theorem", "ext", ["linear_equiv"]], ["add", "theorem", "injective_to_equiv", ["linear_equiv"]], ["add", "theorem", "injective_to_linear_map", ["linear_equiv"]], ["add", "theorem", "inv_fun_apply", ["linear_equiv"]], ["add", "theorem", "map_add", ["linear_equiv"]], ["add", "theorem", "map_eq_zero_iff", ["linear_equiv"]], ["add", "theorem", "map_ne_zero_iff", ["linear_equiv"]], ["add", "theorem", "map_smul", ["linear_equiv"]], ["add", "theorem", "map_sum", ["linear_equiv"]], ["add", "theorem", "map_zero", ["linear_equiv"]], ["add", "theorem", "mk_apply", ["linear_equiv"]], ["add", "def", "refl", ["linear_equiv"]], ["add", "theorem", "refl_apply", ["linear_equiv"]], ["add", "theorem", "refl_to_linear_map", ["linear_equiv"]], ["add", "theorem", "refl_trans", ["linear_equiv"]], ["add", "def", "symm", ["linear_equiv"]], ["add", "theorem", "symm_apply_apply", ["linear_equiv"]], ["add", "theorem", "symm_apply_eq", ["linear_equiv"]], ["add", "theorem", "symm_symm", ["linear_equiv"]], ["add", "theorem", "symm_trans", ["linear_equiv"]], ["add", "theorem", "symm_trans_apply", ["linear_equiv"]], ["add", "def", "to_equiv", ["linear_equiv"]], ["add", "theorem", "to_equiv_inj", ["linear_equiv"]], ["add", "theorem", "to_fun_apply", ["linear_equiv"]], ["add", "theorem", "to_linear_map_inj", ["linear_equiv"]], ["add", "def", "trans", ["linear_equiv"]], ["add", "theorem", "trans_apply", ["linear_equiv"]], ["add", "theorem", "trans_refl", ["linear_equiv"]], ["add", "theorem", "trans_symm", ["linear_equiv"]], ["add", "structure", "linear_equiv", []], ["add", "theorem", "coe_injective", ["linear_map"]], ["add", "theorem", "coe_mk", ["linear_map"]], ["add", "def", "comp", ["linear_map"]], ["add", "theorem", "comp_apply", ["linear_map"]], ["add", "theorem", "comp_coe", ["linear_map"]], ["add", "theorem", "ext", ["linear_map"]], ["add", "theorem", "ext_iff", ["linear_map"]], ["add", "theorem", "ext_ring", ["linear_map"]], ["add", "def", "id", ["linear_map"]], ["add", "theorem", "id_apply", ["linear_map"]], ["add", "theorem", "id_coe", ["linear_map"]], ["add", "def", "inverse", ["linear_map"]], ["add", "theorem", "is_linear", ["linear_map"]], ["add", "theorem", "map_add", ["linear_map"]], ["add", "theorem", "map_neg", ["linear_map"]], ["add", "theorem", "map_smul", ["linear_map"]], ["add", "theorem", "map_sub", ["linear_map"]], ["add", "theorem", "map_sum", ["linear_map"]], ["add", "theorem", "map_zero", ["linear_map"]], ["add", "def", "to_add_monoid_hom", ["linear_map"]], ["add", "theorem", "to_add_monoid_hom_coe", ["linear_map"]], ["add", "theorem", "to_add_monoid_hom_injective", ["linear_map"]], ["add", "theorem", "to_fun_eq_coe", ["linear_map"]], ["add", "structure", "linear_map", []], ["add", "def", "End", ["module"]]]}, {"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "apply_symm_apply", ["linear_equiv"]], ["del", "theorem", "coe_coe", ["linear_equiv"]], ["del", "theorem", "coe_to_add_equiv", ["linear_equiv"]], ["del", "theorem", "coe_to_equiv", ["linear_equiv"]], ["del", "theorem", "comp_coe", ["linear_equiv"]], ["del", "theorem", "eq_symm_apply", ["linear_equiv"]], ["del", "theorem", "ext", ["linear_equiv"]], ["del", "theorem", "injective_to_equiv", ["linear_equiv"]], ["del", "theorem", "injective_to_linear_map", ["linear_equiv"]], ["del", "theorem", "inv_fun_apply", ["linear_equiv"]], ["del", "theorem", "map_add", ["linear_equiv"]], ["del", "theorem", "map_eq_zero_iff", ["linear_equiv"]], ["del", "theorem", "map_ne_zero_iff", ["linear_equiv"]], ["del", "theorem", "map_smul", ["linear_equiv"]], ["del", "theorem", "map_sum", ["linear_equiv"]], ["del", "theorem", "map_zero", ["linear_equiv"]], ["del", "theorem", "mk_apply", ["linear_equiv"]], ["del", "def", "refl", ["linear_equiv"]], ["del", "theorem", "refl_apply", ["linear_equiv"]], ["del", "theorem", "refl_to_linear_map", ["linear_equiv"]], ["del", "theorem", "refl_trans", ["linear_equiv"]], ["del", "def", "symm", ["linear_equiv"]], ["del", "theorem", "symm_apply_apply", ["linear_equiv"]], ["del", "theorem", "symm_apply_eq", ["linear_equiv"]], ["del", "theorem", "symm_symm", ["linear_equiv"]], ["del", "theorem", "symm_trans", ["linear_equiv"]], ["del", "theorem", "symm_trans_apply", ["linear_equiv"]], ["del", "def", "to_equiv", ["linear_equiv"]], ["del", "theorem", "to_equiv_inj", ["linear_equiv"]], ["del", "theorem", "to_fun_apply", ["linear_equiv"]], ["del", "theorem", "to_linear_map_inj", ["linear_equiv"]], ["del", "def", "trans", ["linear_equiv"]], ["del", "theorem", "trans_apply", ["linear_equiv"]], ["del", "theorem", "trans_refl", ["linear_equiv"]], ["del", "theorem", "trans_symm", ["linear_equiv"]], ["del", "structure", "linear_equiv", []], ["del", "def", "inverse", ["linear_map"]]]}]}, {"timestamp": 1603728801, "sha": "83edb506", "message": "feat(simps): improve error messages (#4653)\nIf a custom projection has a different type than the expected projection, then it will show a more specific error message.\nAlso reflow most long lines\nAlso add some tests", "changes": [{"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["del", "structure", "equiv", ["failty_manual_coercion"]], ["add", "structure", "equiv", ["faulty_manual_coercion"]], ["add", "def", "inv_fun", ["faulty_universes", "equiv", "simps"]], ["add", "def", "symm", ["faulty_universes", "equiv"]], ["add", "structure", "equiv", ["faulty_universes"]], ["add", "def", "inv_fun", ["manual_universes", "equiv", "simps"]], ["add", "def", "symm", ["manual_universes", "equiv"]], ["add", "structure", "equiv", ["manual_universes"]]]}]}, {"timestamp": 1603721916, "sha": "ba5594a6", "message": "feat(data/dfinsupp): Add missing to_additive lemmas (#4788)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "prod_inv", ["dfinsupp"]], ["add", "theorem", "prod_mul", ["dfinsupp"]], ["add", "theorem", "prod_one", ["dfinsupp"]], ["del", "theorem", "sum_add", ["dfinsupp"]], ["del", "theorem", "sum_neg", ["dfinsupp"]], ["del", "theorem", "sum_zero", ["dfinsupp"]]]}]}, {"timestamp": 1603718568, "sha": "2e90c600", "message": "feat(ring_theory/witt_vector/basic): verifying the ring axioms (#4694)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/basic.lean", "changes": [["add", "def", "ghost_component", ["witt_vector"]], ["add", "theorem", "ghost_component_apply", ["witt_vector"]], ["add", "def", "ghost_equiv", ["witt_vector"]], ["add", "theorem", "ghost_equiv_coe", ["witt_vector"]], ["add", "theorem", "bijective_of_invertible", ["witt_vector", "ghost_map"]], ["add", "def", "ghost_map", ["witt_vector"]], ["add", "theorem", "ghost_map_apply", ["witt_vector"]], ["add", "def", "map", ["witt_vector"]], ["add", "theorem", "map_coeff", ["witt_vector"]], ["add", "theorem", "add", ["witt_vector", "map_fun"]], ["add", "theorem", "injective", ["witt_vector", "map_fun"]], ["add", "theorem", "mul", ["witt_vector", "map_fun"]], ["add", "theorem", "neg", ["witt_vector", "map_fun"]], ["add", "theorem", "one", ["witt_vector", "map_fun"]], ["add", "theorem", "surjective", ["witt_vector", "map_fun"]], ["add", "theorem", "zero", ["witt_vector", "map_fun"]], ["add", "def", "map_fun", ["witt_vector"]], ["add", "theorem", "map_injective", ["witt_vector"]], ["add", "theorem", "map_surjective", ["witt_vector"]]]}]}, {"timestamp": 1603689672, "sha": "7be82f94", "message": "chore(scripts): update nolints.txt (#4785)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603689670, "sha": "b2b39edd", "message": "chore(order/galois_connection): define `with_bot.gi_get_or_else_bot` (#4781)\nThis Galois insertion can be used to golf proofs about\n`polynomial.degree` vs `polynomial.nat_degree`.", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "get_or_else_coe", ["option"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "get_or_else_bot", ["with_bot"]], ["add", "theorem", "get_or_else_bot_le_iff", ["with_bot"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "def", "gi_get_or_else_bot", ["with_bot"]]]}]}, {"timestamp": 1603689668, "sha": "121c9a49", "message": "chore(algebra/group/hom): use `coe_comp` in `simp` lemmas (#4780)\nThis way Lean will simplify `⇑(f.comp g)` even if it is not applied to\nan element.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_comp", ["monoid_hom"]], ["mod", "theorem", "comp_apply", ["monoid_hom"]], ["add", "theorem", "coe_comp", ["mul_hom"]], ["mod", "theorem", "comp_apply", ["mul_hom"]], ["add", "theorem", "coe_comp", ["one_hom"]], ["mod", "theorem", "comp_apply", ["one_hom"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "coe_mul_right", ["add_monoid_hom"]], ["mod", "theorem", "mul_right_apply", ["add_monoid_hom"]]]}]}, {"timestamp": 1603689666, "sha": "6e4fe98c", "message": "chore(data/polynomial/{degree/basic, eval}): Some trivial lemmas about polynomials (#4768)\nI have added the lemma `supp_card_le_succ_nat_degree` about the cardinality of the support of a polynomial and removed the useless commutativity assumptio in `map_sum` and `map_neg`.", "changes": [{"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "card_supp_le_succ_nat_degree", ["polynomial"]], ["add", "theorem", "supp_subset_range_nat_degree_succ", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "map_int_cast", ["polynomial"]], ["mod", "theorem", "map_neg", ["polynomial"]], ["mod", "theorem", "map_sub", ["polynomial"]]]}]}, {"timestamp": 1603686305, "sha": "40362122", "message": "feat(algebra/big_operators/nat_antidiagonal): a few more lemmas (#4783)", "changes": [{"oldPath": "src/algebra/big_operators/nat_antidiagonal.lean", "newPath": "src/algebra/big_operators/nat_antidiagonal.lean", "changes": [["add", "theorem", "prod_antidiagonal_subst", ["finset", "nat"]], ["add", "theorem", "prod_antidiagonal_succ'", ["finset", "nat"]], ["add", "theorem", "prod_antidiagonal_succ", ["finset", "nat"]], ["add", "theorem", "prod_antidiagonal_swap", ["finset", "nat"]], ["add", "theorem", "sum_antidiagonal_succ'", ["finset", "nat"]], ["mod", "theorem", "sum_antidiagonal_succ", ["finset", "nat"]]]}]}, {"timestamp": 1603662800, "sha": "a9d3ce8e", "message": "feat(analysis/normed_space/add_torsor): continuity of `vadd`/`vsub` (#4751)\nProve that `vadd`/`vsub` are Lipschitz continuous, hence uniform\ncontinuous and continuous.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_eq_vadd_iff_neg_add_eq_vsub", []], ["add", "theorem", "vadd_eq_vadd_iff_sub_eq_vsub", []], ["add", "theorem", "vsub_sub_vsub_comm", []]]}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "vadd", ["continuous"]], ["add", "theorem", "vsub", ["continuous"]], ["add", "theorem", "vadd", ["continuous_at"]], ["add", "theorem", "vsub", ["continuous_at"]], ["add", "theorem", "continuous_vadd", []], ["add", "theorem", "continuous_vsub", []], ["add", "theorem", "vadd", ["continuous_within_at"]], ["add", "theorem", "vsub", ["continuous_within_at"]], ["add", "theorem", "dist_vadd_vadd_le", []], ["add", "theorem", "dist_vsub_cancel_left", []], ["add", "theorem", "dist_vsub_cancel_right", []], ["add", "theorem", "dist_vsub_vsub_le", []], ["add", "theorem", "edist_vadd_vadd_le", []], ["add", "theorem", "edist_vsub_vsub_le", []], ["add", "theorem", "vadd", ["filter", "tendsto"]], ["add", "theorem", "vsub", ["filter", "tendsto"]], ["add", "theorem", "vadd", ["lipschitz_with"]], ["add", "theorem", "vsub", ["lipschitz_with"]], ["mod", "def", "metric_space_of_normed_group_of_add_torsor", []], ["add", "theorem", "nndist_vadd_vadd_le", []], ["add", "theorem", "nndist_vsub_vsub_le", []], ["add", "theorem", "uniform_continuous_vadd", []], ["add", "theorem", "uniform_continuous_vsub", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}]}, {"timestamp": 1603650574, "sha": "e7a4b12c", "message": "fix(tactic/core): fix infinite loop in emit_code_here (#4746)\nPreviously `emit_code_here \"\\n\"` would go into an infinite loop because the `command_like` parser consumes nothing, but the string is not yet empty. Now we recurse on the length of the string to ensure termination.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "test/run_parser.lean", "newPath": "test/run_parser.lean", "changes": []}]}, {"timestamp": 1603644320, "sha": "151f0dd2", "message": "chore(linear_algebra/tensor_product): missing simp lemmas (#4769)", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "assoc_symm_tmul", ["tensor_product"]], ["add", "theorem", "comm_symm_tmul", ["tensor_product"]], ["add", "theorem", "congr_symm_tmul", ["tensor_product"]], ["add", "theorem", "lid_symm_apply", ["tensor_product"]], ["add", "theorem", "lift_comp_map", ["tensor_product"]], ["add", "theorem", "map_comp", ["tensor_product"]], ["add", "theorem", "rid_symm_apply", ["tensor_product"]]]}]}, {"timestamp": 1603644318, "sha": "69f550cb", "message": "chore(ring_theory/unique_factorization_domain): fix some lemma names (#4765)\nFixes names of some lemmas that were erroneously renamed with find-and-replace\nChanges some constructor names to use dot notation\nNames replaced:\n`exists_prime_of_factor` -> `exists_prime_factors`\n`wf_dvd_monoid_of_exists_prime_of_factor` -> `wf_dvd_monoid.of_exists_prime_factors`\n`irreducible_iff_prime_of_exists_prime_of_factor` -> `irreducible_iff_prime_of_exists_prime_factors`\n`unique_factorization_monoid_of_exists_prime_of_factor` -> `unique_factorization_monoid.of_exists_prime_factors`\n`unique_factorization_monoid_iff_exists_prime_of_factor` -> `unique_factorization_monoid.iff_exists_prime_factors`\n`irreducible_iff_prime_of_exists_unique_irreducible_of_factor` -> `irreducible_iff_prime_of_exists_unique_irreducible_factors`\n`unique_factorization_monoid.of_exists_unique_irreducible_of_factor` -> `unique_factorization_monoid.of_exists_unique_irreducible_factors`\n`no_factors_of_no_prime_of_factor` -> `no_factors_of_no_prime_factors`\n`dvd_of_dvd_mul_left_of_no_prime_of_factor` -> `dvd_of_dvd_mul_left_of_no_prime_factors`\n`dvd_of_dvd_mul_right_of_no_prime_of_factor` -> `dvd_of_dvd_mul_right_of_no_prime_factors`", "changes": [{"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "irreducible_iff_prime_of_exists_prime_factors", []], ["del", "theorem", "irreducible_iff_prime_of_exists_prime_of_factor", []], ["add", "theorem", "irreducible_iff_prime_of_exists_unique_irreducible_factors", []], ["del", "theorem", "irreducible_iff_prime_of_exists_unique_irreducible_of_factor", []], ["add", "theorem", "dvd_of_dvd_mul_left_of_no_prime_factors", ["unique_factorization_monoid"]], ["del", "theorem", "dvd_of_dvd_mul_left_of_no_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "dvd_of_dvd_mul_right_of_no_prime_factors", ["unique_factorization_monoid"]], ["del", "theorem", "dvd_of_dvd_mul_right_of_no_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "exists_prime_factors", ["unique_factorization_monoid"]], ["del", "theorem", "exists_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "iff_exists_prime_factors", ["unique_factorization_monoid"]], ["add", "theorem", "no_factors_of_no_prime_factors", ["unique_factorization_monoid"]], ["del", "theorem", "no_factors_of_no_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "of_exists_prime_factors", ["unique_factorization_monoid"]], ["add", "theorem", "of_exists_unique_irreducible_factors", ["unique_factorization_monoid"]], ["del", "theorem", "of_exists_unique_irreducible_of_factor", ["unique_factorization_monoid"]], ["del", "theorem", "unique_factorization_monoid_iff_exists_prime_of_factor", []], ["del", "theorem", "unique_factorization_monoid_of_exists_prime_of_factor", []], ["add", "theorem", "of_exists_prime_factors", ["wf_dvd_monoid"]], ["del", "theorem", "wf_dvd_monoid_of_exists_prime_of_factor", []]]}]}, {"timestamp": 1603637810, "sha": "14cff9ac", "message": "chore(algebra/group/pi): add `pi.has_div` (#4776)\nMotivated by #4646", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "div_apply", ["pi"]]]}]}, {"timestamp": 1603577279, "sha": "f056468f", "message": "chore(analysis/normed_space): add 2 `@[simp]` attrs (#4775)\nAdd `@[simp]` to `norm_pos_iff` and `norm_le_zero_iff`", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_le_zero_iff", []], ["mod", "theorem", "norm_pos_iff", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}]}, {"timestamp": 1603540091, "sha": "cae77dc7", "message": "feat(algebra/direct_sum): Fix two todos about generalizing over unique types (#4764)\nAlso promotes `id` to a `≃+`, and prefers coercion over direct use of `subtype.val`.", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "single_injective", ["dfinsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1603517796, "sha": "de6a9d41", "message": "feat(ring_theory/polynomial/content): `gcd_monoid` instance on polynomials over gcd domain (#4760)\nRefactors `ring_theory/polynomial/content` a bit to introduce `prim_part`\nProvides a `gcd_monoid` instance on polynomials over a gcd domain", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/cancel_leads.lean", "changes": [["add", "def", "cancel_leads", ["polynomial"]], ["add", "theorem", "dvd_cancel_leads_of_dvd_of_dvd", ["polynomial"]], ["add", "theorem", "nat_degree_cancel_leads_lt_of_nat_degree_le_nat_degree", ["polynomial"]], ["add", "theorem", "neg_cancel_leads", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/content.lean", "newPath": "src/ring_theory/polynomial/content.lean", "changes": [["add", "theorem", "content_prim_part", ["polynomial"]], ["add", "theorem", "dvd_iff_content_dvd_content_and_prim_part_dvd_prim_part", ["polynomial"]], ["add", "theorem", "eq_C_content_mul_prim_part", ["polynomial"]], ["del", "theorem", "eq_C_mul_primitive", ["polynomial"]], ["add", "theorem", "exists_primitive_lcm_of_is_primitive", ["polynomial"]], ["add", "theorem", "dvd_prim_part_iff_dvd", ["polynomial", "is_primitive"]], ["add", "theorem", "mul", ["polynomial", "is_primitive"]], ["add", "theorem", "prim_part_eq", ["polynomial", "is_primitive"]], ["add", "theorem", "is_primitive_prim_part", ["polynomial"]], ["add", "theorem", "is_unit_prim_part_C", ["polynomial"]], ["add", "theorem", "nat_degree_prim_part", ["polynomial"]], ["add", "def", "prim_part", ["polynomial"]], ["add", "theorem", "prim_part_dvd", ["polynomial"]], ["add", "theorem", "prim_part_mul", ["polynomial"]], ["add", "theorem", "prim_part_ne_zero", ["polynomial"]], ["add", "theorem", "prim_part_zero", ["polynomial"]]]}]}, {"timestamp": 1603517794, "sha": "570c293a", "message": "feat(data/polynomial/ring_division): Two easy lemmas about polynomials (#4742)\nTwo easy lemmas from my previous, now splitted, PR.", "changes": [{"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "monic_X_pow_sub_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "leading_coeff_div_by_monic_of_monic", ["polynomial"]]]}]}, {"timestamp": 1603517792, "sha": "b9a94d69", "message": "feat(linear_algebra/nonsingular_inverse): add stronger form of Cramer's rule (#4737)\nAlso renaming `cramer_transpose_eq_adjugate_mul_vec` --> `cramer_eq_adjugate_mul_vec` after the transpose was rendered redundant.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["add", "theorem", "cramer_eq_adjugate_mul_vec", ["matrix"]], ["del", "theorem", "cramer_transpose_eq_adjugate_mul_vec", ["matrix"]], ["del", "theorem", "cramers_rule", ["matrix"]], ["add", "theorem", "det_smul_inv_mul_vec_eq_cramer", ["matrix"]], ["add", "theorem", "mul_vec_cramer", ["matrix"]]]}]}, {"timestamp": 1603509011, "sha": "2987a496", "message": "fix(tactic/core): use eval_pexpr in run_parser_cmd (#4761)\nContinuation of #4745, see https://github.com/leanprover-community/mathlib/pull/4745#discussion_r510771137", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1603501348, "sha": "8255507e", "message": "feat(data/pnat/basic): Add strong induction on pnat (#4736)\nI added strong induction on `pnat`. (This was from a previous PR that I am splitting.)", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "case_strong_induction_on", ["pnat"]], ["add", "theorem", "exists_eq_succ_of_ne_one", ["pnat"]], ["add", "theorem", "strong_induction_on", ["pnat"]]]}]}, {"timestamp": 1603491171, "sha": "c141eed8", "message": "feat(data/list/basic): Add prod_reverse_noncomm (#4757)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_reverse_noncomm", ["list"]]]}]}, {"timestamp": 1603491170, "sha": "4ec88dbe", "message": "feat(algebra/direct_sum): Bundle the homomorphisms (#4754)", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["mod", "def", "mk", ["direct_sum"]], ["del", "theorem", "mk_add", ["direct_sum"]], ["del", "theorem", "mk_neg", ["direct_sum"]], ["del", "theorem", "mk_sub", ["direct_sum"]], ["del", "theorem", "mk_zero", ["direct_sum"]], ["mod", "def", "of", ["direct_sum"]], ["del", "theorem", "of_add", ["direct_sum"]], ["del", "theorem", "of_neg", ["direct_sum"]], ["del", "theorem", "of_sub", ["direct_sum"]], ["del", "theorem", "of_zero", ["direct_sum"]], ["mod", "def", "to_group", ["direct_sum"]], ["del", "theorem", "to_group_add", ["direct_sum"]], ["del", "theorem", "to_group_neg", ["direct_sum"]], ["del", "theorem", "to_group_sub", ["direct_sum"]], ["del", "theorem", "to_group_zero", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1603491168, "sha": "aa590397", "message": "feat(category_theory): presheaf is colimit of representables (#4401)\nShow every presheaf (on a small category) is a colimit of representables, and some related results. \nSuggestions for better names more than welcome.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/category_theory/adjunction/default.lean", "newPath": "src/category_theory/adjunction/default.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": [["add", "def", "nat_iso_of_left_adjoint_nat_iso", ["adjunction"]], ["add", "def", "nat_iso_of_right_adjoint_nat_iso", ["adjunction"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/presheaf.lean", "changes": [["add", "def", "cocone_of_representable", ["category_theory"]], ["add", "theorem", "cocone_of_representable_X", ["category_theory"]], ["add", "def", "initial", ["category_theory", "colimit_adj", "elements"]], ["add", "def", "extend_along_yoneda", ["category_theory", "colimit_adj"]], ["add", "theorem", "extend_along_yoneda_obj", ["category_theory", "colimit_adj"]], ["add", "def", "is_extension_along_yoneda", ["category_theory", "colimit_adj"]], ["add", "def", "is_initial", ["category_theory", "colimit_adj"]], ["add", "def", "restrict_yoneda_hom_equiv", ["category_theory", "colimit_adj"]], ["add", "theorem", "restrict_yoneda_hom_equiv_natural", ["category_theory", "colimit_adj"]], ["add", "def", "restricted_yoneda", ["category_theory", "colimit_adj"]], ["add", "def", "restricted_yoneda_yoneda", ["category_theory", "colimit_adj"]], ["add", "def", "yoneda_adjunction", ["category_theory", "colimit_adj"]], ["add", "def", "colimit_of_representable", ["category_theory"]], ["add", "def", "extend_along_yoneda_yoneda", ["category_theory"]], ["add", "def", "functor_to_representables", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "initial_op_of_terminal", ["category_theory", "limits"]], ["add", "def", "initial_unop_of_terminal", ["category_theory", "limits"]], ["add", "def", "terminal_op_of_initial", ["category_theory", "limits"]], ["add", "def", "terminal_unop_of_initial", ["category_theory", "limits"]]]}]}, {"timestamp": 1603483480, "sha": "5afeb9b9", "message": "chore(*): a few more type-specific ext lemmas (#4741)\n* mark lemmas about homs from `multiplicative nat` and `multiplicative int` as `@[ext]`;\n* add a special case lemma about linear maps from the base semiring;\n* ext lemmas for ring homs from `(add_)monoid_algebra`;\n* ext lemmas for multiplicative homs from `multiplicative (α →₀ M)`;\n* make sure that Lean can chain ext lemmas by using hom equalities in lemmas about `finsupp`/`(add_)monoid_algebra`.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["mod", "theorem", "ext_mint", ["monoid_hom"]], ["mod", "theorem", "ext_mnat", ["monoid_hom"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "ext_ring", ["linear_map"]]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "alg_hom_ext'", ["add_monoid_algebra"]], ["mod", "theorem", "alg_hom_ext", ["add_monoid_algebra"]], ["add", "theorem", "ring_hom_ext'", ["add_monoid_algebra"]], ["add", "theorem", "ring_hom_ext", ["add_monoid_algebra"]], ["add", "theorem", "alg_hom_ext'", ["monoid_algebra"]], ["mod", "theorem", "alg_hom_ext", ["monoid_algebra"]], ["add", "theorem", "ring_hom_ext'", ["monoid_algebra"]], ["add", "theorem", "ring_hom_ext", ["monoid_algebra"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "add_hom_ext'", ["finsupp"]], ["mod", "theorem", "add_hom_ext", ["finsupp"]], ["del", "theorem", "lhom_ext'", ["finsupp"]], ["del", "theorem", "lhom_ext", ["finsupp"]], ["add", "theorem", "mul_hom_ext'", ["finsupp"]], ["add", "theorem", "mul_hom_ext", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "ring_hom_ext", ["mv_polynomial"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "lhom_ext'", ["finsupp"]], ["add", "theorem", "lhom_ext", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}]}, {"timestamp": 1603474960, "sha": "0bbf3e29", "message": "fix(deprecated/group): Correct the name of `is_add_group_hom has_neg.neg` (#4755)\nRename `inv.is_add_group_hom` to `neg.is_add_group_hom`.", "changes": [{"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}]}, {"timestamp": 1603458223, "sha": "58869614", "message": "feat(data/{nat,list}/basic): Add some trivial lemmas (#4738)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_inv", ["list"]], ["add", "theorem", "prod_inv_reverse", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1603448132, "sha": "b651c6f6", "message": "feat(tactic/core): add `run_parser` user command (#4745)\nAllows for writing things like:\n```lean\nimport tactic.core\nrun_parser emit_code_here \"def foo := 1\"\n```\nRelevant Zulip conversation: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/universes/near/214229509", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "test/run_parser.lean", "changes": []}]}, {"timestamp": 1603448130, "sha": "fb4aee0d", "message": "fix(deprecated/*): remove instances (#4735)\nRemove all instances constructing structures from `is_*` predicates, like for example:\n```lean\ninstance subset.ring {S : set R} [is_subring S] : ring S :=\n...\n```\nCo-Authored-By: Gabriel Ebner ", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "def", "of_is_subring", ["algebra"]]]}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["add", "def", "comm_group", ["subtype"]], ["add", "def", "group", ["subtype"]]]}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": [["add", "def", "comm_monoid", ["subtype"]], ["add", "def", "monoid", ["subtype"]]]}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": [["add", "def", "domain", ["subring"]], ["add", "def", "comm_ring", ["subset"]], ["add", "def", "ring", ["subset"]], ["add", "def", "comm_ring", ["subtype"]], ["add", "def", "ring", ["subtype"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": null, "newPath": "test/import_order_timeout.lean", "changes": [["add", "theorem", "foo", []], ["add", "theorem", "injective_iff", []]]}]}, {"timestamp": 1603448128, "sha": "70b14cee", "message": "refactor(*): use is_scalar_tower instead of restrict_scalars (#4733)\n- rename `semimodule.restrict_scalars` to `restrict_scalars`\n- rename `restrict_scalars` to `subspace.restrict_scalars`\n- use `is_scalar_tower` wherever possible\n- add warnings to docstrings about `restrict_scalars` to encourage `is_scalar_tower` instead", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "def", "restrict_scalars_equiv", ["algebra"]], ["del", "theorem", "restrict_scalars_equiv_apply", ["algebra"]], ["del", "theorem", "restrict_scalars_equiv_symm_apply", ["algebra"]], ["add", "theorem", "algebra_map_smul", []], ["add", "theorem", "smul_apply", ["linear_map", "algebra_module"]], ["add", "theorem", "coe_coe_is_scalar_tower", ["linear_map"]], ["mod", "theorem", "coe_restrict_scalars_eq_coe", ["linear_map"]], ["add", "theorem", "ker_restrict_scalars", ["linear_map"]], ["mod", "def", "lto_fun", ["linear_map"]], ["mod", "def", "restrict_scalars", ["linear_map"]], ["add", "def", "smul_algebra_right", ["linear_map"]], ["add", "theorem", "smul_algebra_right_apply", ["linear_map"]], ["add", "theorem", "smul_apply'", ["linear_map"]], ["del", "def", "linear_map_algebra_has_scalar", []], ["del", "theorem", "smul_apply", ["linear_map_algebra_module"]], ["del", "def", "linear_map_algebra_module", []], ["add", "def", "restrict_scalars", []], ["del", "theorem", "restrict_scalars_ker", []], ["add", "theorem", "restrict_scalars_smul_def", []], ["del", "def", "restrict_scalars'", ["semimodule"]], ["del", "def", "restrict_scalars", ["semimodule"]], ["del", "theorem", "restrict_scalars_smul_def", ["semimodule"]], ["del", "def", "smul_algebra_right", []], ["del", "theorem", "smul_algebra_right_apply", []], ["mod", "def", "restrict_scalars", ["submodule"]], ["mod", "theorem", "restrict_scalars_bot", ["submodule"]], ["add", "theorem", "restrict_scalars_inj", ["submodule"]], ["add", "theorem", "restrict_scalars_injective", ["submodule"]], ["mod", "theorem", "restrict_scalars_mem", ["submodule"]], ["mod", "theorem", "restrict_scalars_top", ["submodule"]]]}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "def", "restrict_scalars'", ["normed_space"]], ["add", "def", "restrict_scalars", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "smul_algebra_right", ["continuous_linear_map"]], ["mod", "theorem", "smul_algebra_right_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": [["del", "def", "conjugate", []], ["del", "theorem", "conjugate_i", []], ["del", "def", "equivariant_projection", []], ["del", "theorem", "equivariant_projection_condition", []], ["add", "def", "conjugate", ["linear_map"]], ["add", "theorem", "conjugate_i", ["linear_map"]], ["add", "def", "equivariant_projection", ["linear_map"]], ["add", "theorem", "equivariant_projection_condition", ["linear_map"]], ["add", "def", "sum_of_conjugates", ["linear_map"]], ["add", "def", "sum_of_conjugates_equivariant", ["linear_map"]], ["del", "def", "sum_of_conjugates", []], ["del", "def", "sum_of_conjugates_equivariant", []]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "def", "restrict_scalars'", ["submodule"]], ["del", "theorem", "restrict_scalars'_inj", ["submodule"]], ["del", "theorem", "restrict_scalars'_injective", ["submodule"]], ["del", "theorem", "restrict_scalars'_top", ["submodule"]]]}]}, {"timestamp": 1603448126, "sha": "82b4843c", "message": "feat(ring_theory/roots_of_unity): Roots of unity as union of primitive roots (#4644)\nI have added some lemmas about roots of unity, especially `root_of_unity_eq_uniun_prim` that says that, if there is a primitive `n`-th root of unity in `R`, then the set of `n`-th roots of unity is equal to the union of `primitive_roots i R` for `i | n`.\nI will use this lemma in to develop the theory of cyclotomic polynomials.", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "pos_of_div_pos", ["pnat"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "mem_nth_roots_finset", ["polynomial"]], ["add", "def", "nth_roots_finset", ["polynomial"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "filter_dvd_eq_divisors", ["nat"]]]}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "card_nth_roots", ["is_primitive_root"]], ["add", "theorem", "card_nth_roots_finset", ["is_primitive_root"]], ["add", "theorem", "disjoint", ["is_primitive_root"]], ["add", "theorem", "nth_roots_nodup", ["is_primitive_root"]], ["add", "theorem", "nth_roots_one_eq_bind_primitive_roots", ["is_primitive_root"]], ["add", "theorem", "pow", ["is_primitive_root"]]]}]}, {"timestamp": 1603448124, "sha": "278a14b3", "message": "feat(analysis/p_series): prove the p-series convergence test (#4360)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": null, "newPath": "src/analysis/p_series.lean", "changes": [["add", "theorem", "le_tsum_condensed", ["ennreal"]], ["add", "theorem", "tsum_condensed_le", ["ennreal"]], ["add", "theorem", "le_sum_condensed'", ["finset"]], ["add", "theorem", "le_sum_condensed", ["finset"]], ["add", "theorem", "sum_condensed_le'", ["finset"]], ["add", "theorem", "sum_condensed_le", ["finset"]], ["add", "theorem", "summable_condensed_iff", ["nnreal"]], ["add", "theorem", "summable_one_div_rpow", ["nnreal"]], ["add", "theorem", "summable_one_rpow_inv", ["nnreal"]], ["add", "theorem", "not_summable_nat_cast_inv", ["real"]], ["add", "theorem", "not_summable_one_div_nat_cast", ["real"]], ["add", "theorem", "summable_nat_pow_inv", ["real"]], ["add", "theorem", "summable_nat_rpow_inv", ["real"]], ["add", "theorem", "summable_one_div_nat_pow", ["real"]], ["add", "theorem", "summable_one_div_nat_rpow", ["real"]], ["add", "theorem", "tendsto_sum_range_one_div_nat_succ_at_top", ["real"]], ["add", "theorem", "summable_condensed_iff_of_nonneg", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "half_le_harmonic_double_sub_harmonic", []], ["del", "def", "harmonic_series", []], ["del", "theorem", "harmonic_tendsto_at_top", []], ["del", "theorem", "mono_harmonic", []], ["del", "theorem", "self_div_two_le_harmonic_two_pow", []]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "eventually_cofinite_ne", ["filter"]]]}]}, {"timestamp": 1603448121, "sha": "04b55727", "message": "feat(ring_theory/witt_vector/defs): type of witt vectors + ring operations (#4332)\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/ring_theory/witt_vector/defs.lean", "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": [["add", "theorem", "add_coeff", ["witt_vector"]], ["add", "def", "coeff", ["witt_vector"]], ["add", "theorem", "coeff_mk", ["witt_vector"]], ["add", "def", "eval", ["witt_vector"]], ["add", "theorem", "ext", ["witt_vector"]], ["add", "theorem", "ext_iff", ["witt_vector"]], ["add", "def", "mk", ["witt_vector"]], ["add", "theorem", "mul_coeff", ["witt_vector"]], ["add", "theorem", "neg_coeff", ["witt_vector"]], ["add", "theorem", "one_coeff_eq_of_pos", ["witt_vector"]], ["add", "theorem", "one_coeff_zero", ["witt_vector"]], ["add", "def", "peval", ["witt_vector"]], ["add", "theorem", "zero_coeff", ["witt_vector"]], ["add", "def", "witt_vector", []]]}]}, {"timestamp": 1603438965, "sha": "9e4ef854", "message": "feat(linear_algebra/affine_space): define `affine_equiv.mk'` (#4750)\nSimilarly to `affine_map.mk'`, this constructor checks that the map\nagrees with its linear part only for one base point.", "changes": [{"oldPath": "src/linear_algebra/affine_space/affine_equiv.lean", "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "coe_mk'", ["affine_equiv"]], ["add", "theorem", "linear_mk'", ["affine_equiv"]], ["add", "def", "mk'", ["affine_equiv"]], ["add", "theorem", "to_equiv_mk'", ["affine_equiv"]]]}]}, {"timestamp": 1603438963, "sha": "468c01c8", "message": "chore(topology/*): add two missing simp coe lemmas (#4748)", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_to_linear_equiv", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "coe_to_equiv", ["isometric"]]]}]}, {"timestamp": 1603438960, "sha": "458c833e", "message": "chore(algebra/group/basic): Mark inv_involutive simp (#4744)\nThis means expressions like `has_inv.inv ∘ has_inv.inv` can be simplified", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}]}, {"timestamp": 1603432056, "sha": "bb52355b", "message": "feat(linear_algebra/basic): define `linear_equiv.neg` (#4749)\nAlso weaken requirements for `has_neg (M →ₗ[R] M₂)` from\n`[add_comm_group M]` `[add_comm_group M₂]` to `[add_comm_monoid M]`\n`[add_comm_group M₂]`.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_neg", ["linear_equiv"]], ["add", "def", "neg", ["linear_equiv"]], ["add", "theorem", "neg_apply", ["linear_equiv"]], ["add", "theorem", "symm_neg", ["linear_equiv"]]]}]}, {"timestamp": 1603432054, "sha": "dc4ad812", "message": "refactor(*): lmul is an algebra hom (#4724)\nalso, make some arguments implicit, and add simp lemmas", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["mod", "theorem", "lmul'_apply", ["algebra"]], ["mod", "def", "lmul", ["algebra"]], ["mod", "theorem", "lmul_left_apply", ["algebra"]], ["add", "theorem", "lmul_left_mul", ["algebra"]], ["add", "theorem", "lmul_left_one", ["algebra"]], ["mod", "theorem", "lmul_right_apply", ["algebra"]], ["add", "theorem", "lmul_right_mul", ["algebra"]], ["add", "theorem", "lmul_right_one", ["algebra"]], ["mod", "theorem", "algebra_map_End_apply", ["module"]], ["mod", "theorem", "algebra_map_End_eq_smul_id", ["module"]], ["mod", "theorem", "ker_algebra_map_End", ["module"]]]}, {"oldPath": "src/algebra/algebra/operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "mul_apply", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1603432052, "sha": "ff711a31", "message": "feat(measure_theory/measure_space): Added lemmas for commuting restrict for outer measures and measures (#4673)\nThis also adds `of_function_apply` and `Inf_apply` (for `outer_measure`). I had some difficulty getting\nthese functions to expand (as represented by the length of `Inf_apply`) in a clean way.\nI also think `Inf_apply` is instructive in terms of making it clear what the definition of `Inf` is. Once `Inf` is rewritten,\nthen the large set of operations available for `infi_le` and `le_infi` (and `ennreal.tsum_le_tsum`) can be used.\n`measure.restrict_Inf_eq_Inf_restrict` will be helpful in getting more results about the subtraction of measures,\nspecifically writing down the result of `(a - b)` when `a` is not less than or equal to `b` and `b` is not less than\nor equal to `a`.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "le_of_add_le_add_left", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Inf_eq_Inf_restrict", ["measure_theory", "measure"]], ["add", "theorem", "restrict_to_outer_measure_eq_to_outer_measure_restrict", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "Inf_apply", ["measure_theory", "outer_measure"]], ["mod", "theorem", "Inf_gen_nonempty2", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_function_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "restrict_Inf_eq_Inf_restrict", ["measure_theory", "outer_measure"]], ["add", "theorem", "restrict_trim", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1603427469, "sha": "f2793132", "message": "feat(category_theory/yoneda): better simp lemmas for small yoneda (#4743)\nGives nicer (d)simp lemmas for yoneda_sections_small.", "changes": [{"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["mod", "def", "yoneda_sections_small", ["category_theory"]], ["add", "theorem", "yoneda_sections_small_hom", ["category_theory"]], ["add", "theorem", "yoneda_sections_small_inv_app_apply", ["category_theory"]]]}]}, {"timestamp": 1603415433, "sha": "8bd1df59", "message": "chore(scripts): update nolints.txt (#4747)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603388016, "sha": "de12036b", "message": "chore(data/polynomial): remove monomial_one_eq_X_pow (#4734)\nmonomial_one_eq_X_pow was a duplicate of X_pow_eq_monomial", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["del", "theorem", "monomial_one_eq_X_pow", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1603378675, "sha": "6eb55641", "message": "chore(data/equiv/basic): Add a simp lemma perm.coe_mul (#4723)\nThis mirrors `equiv.coe_trans`", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "coe_mul", ["equiv", "perm"]], ["mod", "theorem", "mul_apply", ["equiv", "perm"]]]}]}, {"timestamp": 1603352905, "sha": "add50960", "message": "chore(*): 3 unrelated small changes (#4732)\n* fix universe levels in `equiv.set.compl`: by default Lean uses some\n`max` universes both for `α` and `β`, and it backfires when one tries\nto apply it.\n* add `nat.mul_factorial_pred`;\n* add instance `fixed_points.decidable`.\nPart of #4731", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/nat/factorial.lean", "newPath": "src/data/nat/factorial.lean", "changes": [["add", "theorem", "mul_factorial_pred", ["nat"]]]}, {"oldPath": "src/dynamics/fixed_points/basic.lean", "newPath": "src/dynamics/fixed_points/basic.lean", "changes": []}]}, {"timestamp": 1603352903, "sha": "aba31c93", "message": "feat(algebra/monoid_algebra): define a non-commutative version of `lift` (#4725)\n* [X] define `monoid_algebra.lift_c` and `add_monoid_algebra.lift_nc` to be generalizations of `(mv_)polynomial.eval₂` to `(add_)monoid_algebra`s.\n* [X] use `to_additive` in many proofs about `add_monoid_algebra`;\n* [X] define `finsupp.nontrivial`, use it for `(add_)monoid_algebra.nontrivial`;\n* [X] copy more lemmas about `lift` from `monoid_algebra` to `add_monoid_algebra`;\n* [X] use `@[ext]` on more powerful type-specific lemmas;\n* [x] fix docstrings of `(add_)monoid_algebra.lift₂`;\n* [x] fix compile failures.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["mod", "theorem", "alg_hom_ext", ["add_monoid_algebra"]], ["mod", "theorem", "alg_hom_ext_iff", ["add_monoid_algebra"]], ["mod", "def", "lift", ["add_monoid_algebra"]], ["add", "theorem", "lift_apply'", ["add_monoid_algebra"]], ["add", "theorem", "lift_apply", ["add_monoid_algebra"]], ["add", "theorem", "lift_def", ["add_monoid_algebra"]], ["add", "def", "lift_nc", ["add_monoid_algebra"]], ["add", "theorem", "lift_nc_mul", ["add_monoid_algebra"]], ["add", "theorem", "lift_nc_one", ["add_monoid_algebra"]], ["add", "theorem", "lift_nc_single", ["add_monoid_algebra"]], ["add", "theorem", "lift_of", ["add_monoid_algebra"]], ["add", "theorem", "lift_single", ["add_monoid_algebra"]], ["add", "theorem", "lift_symm_apply", ["add_monoid_algebra"]], ["add", "theorem", "lift_unique'", ["add_monoid_algebra"]], ["add", "theorem", "lift_unique", ["add_monoid_algebra"]], ["mod", "theorem", "of_apply", ["add_monoid_algebra"]], ["mod", "theorem", "alg_hom_ext", ["monoid_algebra"]], ["add", "theorem", "lift_apply'", ["monoid_algebra"]], ["add", "theorem", "lift_def", ["monoid_algebra"]], ["add", "def", "lift_nc", ["monoid_algebra"]], ["add", "theorem", "lift_nc_mul", ["monoid_algebra"]], ["add", "theorem", "lift_nc_one", ["monoid_algebra"]], ["add", "theorem", "lift_nc_single", ["monoid_algebra"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "comp_lift_add_hom", ["finsupp"]], ["add", "theorem", "lift_add_hom_apply_single", ["finsupp"]], ["add", "theorem", "lift_add_hom_comp_single", ["finsupp"]], ["add", "theorem", "prod_add_index'", ["finsupp"]], ["add", "theorem", "sum_add_index'", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "aeval_unique", ["mv_polynomial"]], ["mod", "theorem", "alg_hom_ext", ["mv_polynomial"]], ["del", "theorem", "eval_unique", ["mv_polynomial"]], ["mod", "theorem", "ring_hom_ext", ["mv_polynomial"]], ["add", "theorem", "single_eq_monomial", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/comap.lean", "newPath": "src/data/mv_polynomial/comap.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": [["add", "theorem", "bind₁_comp_rename", ["mv_polynomial"]], ["add", "theorem", "rename_comp_bind₁", ["mv_polynomial"]]]}]}, {"timestamp": 1603352901, "sha": "fb5ef2b9", "message": "feat(linear_algebra/nonsingular_inverse): state Cramer's rule explicitly (#4700)\nMostly so that we can add an entry to the Freek 100.", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "smul_mul_vec_assoc", ["matrix"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "det_eq_zero_of_column_eq_zero", ["matrix"]], ["add", "theorem", "det_eq_zero_of_row_eq_zero", ["matrix"]], ["del", "theorem", "det_zero_of_column_eq", ["matrix"]], ["add", "theorem", "det_zero_of_row_eq", ["matrix"]]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["mod", "def", "adjugate", ["matrix"]], ["mod", "def", "cramer", ["matrix"]], ["mod", "theorem", "cramer_apply", ["matrix"]], ["del", "theorem", "cramer_column_self", ["matrix"]], ["mod", "def", "cramer_map", ["matrix"]], ["add", "theorem", "cramer_transpose_eq_adjugate_mul_vec", ["matrix"]], ["add", "theorem", "cramer_transpose_row_self", ["matrix"]], ["add", "theorem", "cramers_rule", ["matrix"]]]}]}, {"timestamp": 1603348722, "sha": "03f0285d", "message": "refactor(algebra/add_torsor): define pointwise `-ᵥ` and `+ᵥ` on sets (#4710)\nThis seems more natural than `vsub_set` to me.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "empty_vsub", ["set"]], ["add", "theorem", "vadd", ["set", "finite"]], ["add", "theorem", "vsub", ["set", "finite"]], ["add", "theorem", "singleton_vadd", ["set"]], ["add", "theorem", "singleton_vsub", ["set"]], ["add", "theorem", "singleton_vsub_self", ["set"]], ["add", "theorem", "vadd_singleton", ["set"]], ["add", "theorem", "vadd_subset_vadd", ["set"]], ["add", "theorem", "vsub_empty", ["set"]], ["add", "theorem", "vsub_mem_vsub", ["set"]], ["add", "theorem", "vsub_self_mono", ["set"]], ["add", "theorem", "vsub_singleton", ["set"]], ["add", "theorem", "vsub_subset_iff", ["set"]], ["add", "theorem", "vsub_subset_vsub", ["set"]], ["del", "theorem", "vsub_mem_vsub_set", []], ["del", "def", "vsub_set", []], ["del", "theorem", "vsub_set_empty", []], ["del", "theorem", "vsub_set_finite_of_finite", []], ["del", "theorem", "vsub_set_mono", []], ["del", "theorem", "vsub_set_singleton", []]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["mod", "def", "vector_span", []], ["mod", "theorem", "vector_span_def", []], ["mod", "theorem", "vsub_set_subset_vector_span", []]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1603343746, "sha": "4c4d47c2", "message": "feat(algebra/gcd_monoid): noncomputably defines `gcd_monoid` structures from partial information (#4664)\nAdds the following 4 noncomputable functions which define `gcd_monoid` instances.\n`gcd_monoid_of_gcd` takes as input a `gcd` function and a few of its properties\n`gcd_monoid_of_lcm` takes as input a `lcm` function and a few of its properties\n`gcd_monoid_of_exists_gcd` takes as input the prop that every two elements have a `gcd`\n`gcd_monoid_of_exists_lcm` takes as input the prop that every two elements have an `lcm`", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}]}, {"timestamp": 1603329248, "sha": "fca876ea", "message": "chore(scripts): update nolints.txt (#4730)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603294303, "sha": "df450024", "message": "feat(archive): formalize compiler correctness by McCarthy and Painter (#4702)\nAdd a formalization of the correctness of a compiler from arithmetic expressions to machine language described by McCarthy and Painter, which is considered the first proof of compiler correctness.", "changes": [{"oldPath": null, "newPath": "archive/arithcc.lean", "changes": [["add", "def", "compile", ["arithcc"]], ["add", "theorem", "compiler_correctness", ["arithcc"]], ["add", "inductive", "expr", ["arithcc"]], ["add", "def", "identifier", ["arithcc"]], ["add", "inductive", "instruction", ["arithcc"]], ["add", "def", "loc", ["arithcc"]], ["add", "def", "outcome", ["arithcc"]], ["add", "theorem", "outcome_append", ["arithcc"]], ["add", "def", "read", ["arithcc"]], ["add", "theorem", "le_of_lt_succ", ["arithcc", "register"]], ["add", "theorem", "lt_succ_self", ["arithcc", "register"]], ["add", "def", "register", ["arithcc"]], ["add", "structure", "state", ["arithcc"]], ["add", "def", "state_eq", ["arithcc"]], ["add", "theorem", "state_eq_implies_write_eq", ["arithcc"]], ["add", "def", "state_eq_rs", ["arithcc"]], ["add", "theorem", "state_eq_rs_implies_write_eq_rs", ["arithcc"]], ["add", "def", "step", ["arithcc"]], ["add", "def", "value", ["arithcc"]], ["add", "def", "word", ["arithcc"]], ["add", "def", "write", ["arithcc"]], ["add", "theorem", "write_eq_implies_state_eq", ["arithcc"]]]}]}, {"timestamp": 1603294300, "sha": "1b4e7694", "message": "feat(linear_algebra/affine_space): define `affine_equiv` (#2909)\nDefine\n* [X] `affine_equiv` to be an invertible affine map (e.g., extend both `affine_map` and `equiv`);\n* [X] conversion to `linear_equiv`;\n* [X] `group` structure on affine automorphisms;\n* [X] prove standard lemmas for equivalences (`apply_symm_apply`, `symm_apply_eq` etc).\nAPI changes\n* make `G` implicit in `equiv.vadd_const`.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["mod", "theorem", "coe_vadd_const", ["equiv"]], ["mod", "theorem", "coe_vadd_const_symm", ["equiv"]]]}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["mod", "theorem", "vadd_const_to_equiv", ["isometric"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/affine_equiv.lean", "changes": [["add", "theorem", "apply_eq_iff_eq", ["affine_equiv"]], ["add", "theorem", "apply_eq_iff_eq_symm_apply", ["affine_equiv"]], ["add", "theorem", "apply_symm_apply", ["affine_equiv"]], ["add", "theorem", "coe_fn_inj", ["affine_equiv"]], ["add", "theorem", "coe_mul", ["affine_equiv"]], ["add", "theorem", "coe_one", ["affine_equiv"]], ["add", "theorem", "coe_refl", ["affine_equiv"]], ["add", "theorem", "coe_to_affine_map", ["affine_equiv"]], ["add", "theorem", "coe_to_equiv", ["affine_equiv"]], ["add", "theorem", "coe_trans", ["affine_equiv"]], ["add", "def", "const_vadd", ["affine_equiv"]], ["add", "theorem", "const_vadd_apply", ["affine_equiv"]], ["add", "theorem", "const_vadd_symm_apply", ["affine_equiv"]], ["add", "theorem", "ext", ["affine_equiv"]], ["add", "theorem", "injective_coe_fn", ["affine_equiv"]], ["add", "theorem", "injective_to_affine_map", ["affine_equiv"]], ["add", "theorem", "injective_to_equiv", ["affine_equiv"]], ["add", "theorem", "inv_def", ["affine_equiv"]], ["add", "theorem", "linear_const_vadd", ["affine_equiv"]], ["add", "theorem", "linear_refl", ["affine_equiv"]], ["add", "theorem", "linear_to_affine_map", ["affine_equiv"]], ["add", "theorem", "linear_vadd_const", ["affine_equiv"]], ["add", "theorem", "map_vadd", ["affine_equiv"]], ["add", "theorem", "mul_def", ["affine_equiv"]], ["add", "theorem", "one_def", ["affine_equiv"]], ["add", "theorem", "range_eq", ["affine_equiv"]], ["add", "def", "refl", ["affine_equiv"]], ["add", "theorem", "refl_apply", ["affine_equiv"]], ["add", "theorem", "refl_trans", ["affine_equiv"]], ["add", "def", "symm", ["affine_equiv"]], ["add", "theorem", "symm_apply_apply", ["affine_equiv"]], ["add", "theorem", "symm_linear", ["affine_equiv"]], ["add", "theorem", "symm_refl", ["affine_equiv"]], ["add", "theorem", "symm_to_equiv", ["affine_equiv"]], ["add", "theorem", "symm_trans", ["affine_equiv"]], ["add", "def", "to_affine_map", ["affine_equiv"]], ["add", "theorem", "to_affine_map_inj", ["affine_equiv"]], ["add", "theorem", "to_affine_map_mk", ["affine_equiv"]], ["add", "theorem", "to_equiv_inj", ["affine_equiv"]], ["add", "theorem", "to_equiv_refl", ["affine_equiv"]], ["add", "def", "trans", ["affine_equiv"]], ["add", "theorem", "trans_apply", ["affine_equiv"]], ["add", "theorem", "trans_assoc", ["affine_equiv"]], ["add", "theorem", "trans_refl", ["affine_equiv"]], ["add", "theorem", "trans_symm", ["affine_equiv"]], ["add", "def", "vadd_const", ["affine_equiv"]], ["add", "theorem", "vadd_const_apply", ["affine_equiv"]], ["add", "theorem", "vadd_const_symm_apply", ["affine_equiv"]], ["add", "structure", "affine_equiv", []], ["add", "theorem", "coe_to_affine_equiv", ["linear_equiv"]], ["add", "def", "to_affine_equiv", ["linear_equiv"]]]}]}, {"timestamp": 1603287300, "sha": "75316cad", "message": "chore(linear_algebra/basic): a few simp lemmas (#4727)\n* add `submodule.nonempty`;\n* add `@[simp]` to `submodule.map_id`;\n* add `submodule.neg_coe`, `protected submodule.map_neg`, and `submodule.span_neg`.", "changes": [{"oldPath": "src/algebra/module/submodule.lean", "newPath": "src/algebra/module/submodule.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "map_id", ["submodule"]], ["add", "theorem", "neg_coe", ["submodule"]], ["add", "theorem", "span_neg", ["submodule"]]]}]}, {"timestamp": 1603244375, "sha": "01c1e6fb", "message": "chore(scripts): update nolints.txt (#4721)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603244373, "sha": "3a860cc4", "message": "fixup(category_theory/sites): add arrow sets that aren't sieves (#4703)\nBroken off from #4648.\n- I realised that by creating a type `arrows_with_codomain` I can avoid using `set (over X)` entirely (the bit I was missing was that `derive complete_lattice` works on the new type even though it wasn't inferred on the pi-type), so I changed sieves to use that instead. \n- I added constructors for special arrow sets. The definitions of `singleton_arrow` and `pullback_arrows` look a bit dubious because of the equality and `eq_to_hom` stuff; I don't love that either so if there's a suggestion on how to achieve the same things (in particular stating (1) and (3) from: https://stacks.math.columbia.edu/tag/00VH, as well as a complete lattice structure) I'd be happy to consider.\n- I added a coercion so we can write `S f` instead of `S.arrows f` for sieves.", "changes": [{"oldPath": "src/category_theory/sites/grothendieck.lean", "newPath": "src/category_theory/sites/grothendieck.lean", "changes": [["mod", "theorem", "arrow_max", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "bind_covering", ["category_theory", "grothendieck_topology"]], ["mod", "theorem", "dense_covering", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "ext", ["category_theory", "grothendieck_topology"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "def", "bind", ["category_theory", "arrows_with_codomain"]], ["add", "theorem", "bind_comp", ["category_theory", "arrows_with_codomain"]], ["add", "def", "singleton_arrow", ["category_theory", "arrows_with_codomain"]], ["add", "theorem", "singleton_arrow_eq_iff_domain", ["category_theory", "arrows_with_codomain"]], ["add", "theorem", "singleton_arrow_self", ["category_theory", "arrows_with_codomain"]], ["add", "def", "arrows_with_codomain", ["category_theory"]], ["add", "def", "bind", ["category_theory", "sieve"]], ["add", "theorem", "downward_closed", ["category_theory", "sieve"]], ["mod", "def", "generate", ["category_theory", "sieve"]], ["del", "inductive", "generate_sets", ["category_theory", "sieve"]], ["mod", "def", "gi_generate", ["category_theory", "sieve"]], ["mod", "theorem", "id_mem_iff_eq_top", ["category_theory", "sieve"]], ["add", "theorem", "le_pullback_bind", ["category_theory", "sieve"]], ["add", "theorem", "mem_generate", ["category_theory", "sieve"]], ["mod", "theorem", "mem_pushforward_of_comp", ["category_theory", "sieve"]], ["mod", "theorem", "mem_top", ["category_theory", "sieve"]], ["mod", "theorem", "pullback_eq_top_iff_mem", ["category_theory", "sieve"]], ["mod", "theorem", "pullback_eq_top_of_mem", ["category_theory", "sieve"]], ["add", "theorem", "pushforward_le_bind_of_mem", ["category_theory", "sieve"]], ["del", "def", "set_over", ["category_theory", "sieve"]], ["mod", "theorem", "sets_iff_generate", ["category_theory", "sieve"]]]}]}, {"timestamp": 1603240977, "sha": "857cbd52", "message": "chore(category_theory/limits/preserves): split up files and remove redundant defs (#4717)\nBroken off from #4163 and #4716.\nWhile the diff of this PR is quite big, it actually doesn't do very much: \n- I removed the definitions of `preserves_(co)limits_iso` from `preserves/basic`, since there's already a version in `preserves/shapes` which has lemmas about it. (I didn't keep them in `preserves/basic` since that file is already getting quite big, so I chose to instead put them into the smaller file.\n- I split up `preserves/shapes` into two files: `preserves/limits` and `preserves/shapes`. From my other PRs my plan is for `shapes` to contain isomorphisms and constructions for special shapes, eg `fan.mk` and `fork`s, some of which aren't already present, and `limits` to have things for the general case. In this PR I don't change the situation for special shapes (other than simplifying some proofs), other than moving it into a separate file for clarity.", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["del", "def", "preserves_colimit_iso", ["category_theory", "limits"]], ["del", "def", "preserves_limit_iso", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/limits.lean", "changes": [["add", "theorem", "lift_comp_preserves_limits_iso_hom", []], ["add", "def", "preserves_colimit_iso", []], ["add", "theorem", "preserves_colimits_iso_inv_comp_desc", []], ["add", "theorem", "preserves_desc_map_cocone", []], ["add", "theorem", "preserves_lift_map_cone", []], ["add", "def", "preserves_limit_iso", []], ["add", "theorem", "preserves_limits_iso_hom_π", []], ["add", "theorem", "preserves_limits_iso_inv_π", []], ["add", "theorem", "ι_preserves_colimits_iso_hom", []], ["add", "theorem", "ι_preserves_colimits_iso_inv", []]]}, {"oldPath": "src/category_theory/limits/preserves/shapes.lean", "newPath": "src/category_theory/limits/preserves/shapes.lean", "changes": [["del", "def", "preserves_limits_iso", []], ["del", "theorem", "preserves_limits_iso_hom_π", []]]}]}, {"timestamp": 1603199711, "sha": "8489972a", "message": "feat(data/complex/module): ![1, I] is a basis of C over R (#4713)", "changes": [{"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "theorem", "coe_algebra_map", ["complex"]], ["add", "theorem", "dim_real_complex", ["complex"]], ["add", "theorem", "findim_real_complex", ["complex"]], ["add", "theorem", "im_smul", ["complex"]], ["add", "theorem", "is_basis_one_I", ["complex"]], ["add", "theorem", "re_smul", ["complex"]], ["add", "theorem", "{u}", ["complex"]], ["add", "theorem", "dim_real_of_complex", []], ["add", "theorem", "findim_real_of_complex", []]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "range_cons", ["matrix"]], ["add", "theorem", "range_empty", ["matrix"]]]}]}, {"timestamp": 1603189407, "sha": "cf551ee3", "message": "chore(*): review some lemmas about injectivity of coercions (#4711)\nAPI changes:\n* rename `linear_map.coe_fn_congr` to `protected\n linear_map.congr_arg`;\n* rename `linear_map.lcongr_fun` to `protected linear_map.congr_fun`;\n* rename `enorm.coe_fn_injective` to `enorm.injective_coe_fn`, add\n `enorm.coe_inj`;\n* rename `equiv.coe_fn_injective` to `equiv.injective_coe_fn`,\n reformulate in terms of `function.injective`;\n* add `equiv.coe_inj`;\n* add `affine_map.injective_coe_fn`, `protected affine_map.congr_arg`,\n and `protected affine_map.congr_fun`;\n* rename `linear_equiv.to_equiv_injective` to\n `linear_equiv.injective_to_equiv`, add `linear_equiv.to_equiv_inj`;\n* rename `linear_equiv.eq_of_linear_map_eq` to\n `linear_equiv.injective_to_linear_map`, formulate as `injective\n coe`;\n* add `linear_equiv.to_linear_map_inj`;\n* rename `outer_measure.coe_fn_injective` to\n `outer_measure.injective_coe_fn`;\n* rename `rel_iso.to_equiv_injective` to `rel_iso.injective_to_equiv`;\n* rename `rel_iso.coe_fn_injective` to `rel_iso.injective_coe_fn`;\n* rename `continuous_linear_map.coe_fn_injective` to\n `injective_coe_fn`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "coe_fn_congr", ["linear_map"]], ["del", "theorem", "lcongr_fun", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": [["del", "theorem", "coe_fn_injective", ["enorm"]], ["add", "theorem", "coe_inj", ["enorm"]], ["add", "theorem", "injective_coe_fn", ["enorm"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "theorem", "coe_fn_injective", ["equiv"]], ["add", "theorem", "injective_coe_fn", ["equiv"]]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "injective_coe_fn", ["affine_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "eq_of_linear_map_eq", ["linear_equiv"]], ["add", "theorem", "injective_to_equiv", ["linear_equiv"]], ["add", "theorem", "injective_to_linear_map", ["linear_equiv"]], ["mod", "theorem", "refl_trans", ["linear_equiv"]], ["add", "theorem", "to_equiv_inj", ["linear_equiv"]], ["del", "theorem", "to_equiv_injective", ["linear_equiv"]], ["add", "theorem", "to_linear_map_inj", ["linear_equiv"]], ["mod", "theorem", "trans_refl", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["del", "theorem", "coe_fn_injective", ["measure_theory", "outer_measure"]], ["add", "theorem", "injective_coe_fn", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["del", "theorem", "coe_fn_injective", ["rel_iso"]], ["add", "theorem", "injective_coe_fn", ["rel_iso"]], ["add", "theorem", "injective_to_equiv", ["rel_iso"]], ["del", "theorem", "to_equiv_injective", ["rel_iso"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["del", "theorem", "coe_fn_injective", ["continuous_linear_map"]], ["add", "theorem", "injective_coe_fn", ["continuous_linear_map"]]]}]}, {"timestamp": 1603189405, "sha": "5d52ea42", "message": "chore(.gitignore): gitignore for emacs temp files (#4699)\nEmacs backup files end in `~`, and you don't want them in the repo. Just makes things mildly easier for emacs users if that pattern is in the gitignore.", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}]}, {"timestamp": 1603181453, "sha": "8131349c", "message": "fix(tactic/norm_num): remove one_div from simp set (#4705)\nfixes #4701", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1603181451, "sha": "617e8295", "message": "feat(linear_algebra/affine_space/ordered): define `slope` (#4669)\n* Review API of `ordered_semimodule`:\n - replace `lt_of_smul_lt_smul_of_nonneg` with `lt_of_smul_lt_smul_of_pos`;\n it's equivalent but is easier to prove;\n - add more lemmas;\n - add a constructor for the special case of an ordered semimodule over\n\ta linearly ordered field; in this case it suffices to verify only\n\t`a < b → 0 < c → c • a ≤ c • b`;\n - use the new constructor in `analysis/convex/cone`;\n* Define `units.smul_perm_hom`, reroute `mul_action.to_perm` through it;\n* Add a few more lemmas unfolding `affine_map.line_map` in special cases;\n* Define `slope f a b = (b - a)⁻¹ • (f b -ᵥ f a)` and prove a handful\n of monotonicity properties.", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": [["add", "theorem", "eq_of_smul_eq_smul_of_pos_of_le", []], ["add", "theorem", "le_smul_iff_of_pos", []], ["add", "theorem", "lt_of_smul_lt_smul_of_nonneg", []], ["add", "def", "mk''", ["ordered_semimodule"]], ["add", "def", "mk'", ["ordered_semimodule"]], ["add", "theorem", "smul_le_iff_of_pos", []], ["add", "theorem", "smul_le_smul_iff_of_neg", []], ["add", "theorem", "smul_le_smul_iff_of_pos", []], ["add", "theorem", "smul_lt_iff_of_pos", []], ["add", "theorem", "smul_lt_smul_iff_of_pos", []], ["add", "theorem", "smul_pos_iff_of_pos", []]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "smul_left_cancel", ["is_unit"]], ["mod", "def", "to_perm", ["mul_action"]], ["add", "theorem", "smul_eq_iff_eq_inv_smul", ["units"]], ["add", "theorem", "smul_left_cancel", ["units"]], ["add", "def", "smul_perm_hom", ["units"]]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "fst_line_map", ["affine_map"]], ["add", "theorem", "line_map_apply_module'", ["affine_map"]], ["add", "theorem", "line_map_apply_module", ["affine_map"]], ["add", "theorem", "line_map_apply_one_sub", ["affine_map"]], ["add", "theorem", "line_map_apply_ring'", ["affine_map"]], ["add", "theorem", "line_map_apply_ring", ["affine_map"]], ["add", "theorem", "line_map_same_apply", ["affine_map"]], ["add", "theorem", "snd_line_map", ["affine_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/ordered.lean", "changes": [["add", "theorem", "eq_of_slope_eq_zero", []], ["add", "theorem", "left_le_line_map_iff_le", []], ["add", "theorem", "left_lt_line_map_iff_lt", []], ["add", "theorem", "line_map_le_left_iff_le", []], ["add", "theorem", "line_map_le_line_map_iff_of_lt", []], ["add", "theorem", "line_map_le_map_iff_slope_le_slope", []], ["add", "theorem", "line_map_le_map_iff_slope_le_slope_left", []], ["add", "theorem", "line_map_le_map_iff_slope_le_slope_right", []], ["add", "theorem", "line_map_le_right_iff_le", []], ["add", "theorem", "line_map_lt_left_iff_lt", []], ["add", "theorem", "line_map_lt_line_map_iff_of_lt", []], ["add", "theorem", "line_map_lt_map_iff_slope_lt_slope", []], ["add", "theorem", "line_map_lt_map_iff_slope_lt_slope_left", []], ["add", "theorem", "line_map_lt_map_iff_slope_lt_slope_right", []], ["add", "theorem", "line_map_lt_right_iff_lt", []], ["add", "theorem", "line_map_mono_endpoints", []], ["add", "theorem", "line_map_mono_left", []], ["add", "theorem", "line_map_mono_right", []], ["add", "theorem", "line_map_slope_line_map_slope_line_map", []], ["add", "theorem", "line_map_slope_slope_sub_div_sub", []], ["add", "theorem", "line_map_strict_mono_endpoints", []], ["add", "theorem", "line_map_strict_mono_left", []], ["add", "theorem", "line_map_strict_mono_right", []], ["add", "theorem", "map_le_line_map_iff_slope_le_slope", []], ["add", "theorem", "map_le_line_map_iff_slope_le_slope_left", []], ["add", "theorem", "map_le_line_map_iff_slope_le_slope_right", []], ["add", "theorem", "map_lt_line_map_iff_slope_lt_slope", []], ["add", "theorem", "map_lt_line_map_iff_slope_lt_slope_left", []], ["add", "theorem", "map_lt_line_map_iff_slope_lt_slope_right", []], ["add", "theorem", "right_le_line_map_iff_le", []], ["add", "theorem", "right_lt_line_map_iff_lt", []], ["add", "def", "slope", []], ["add", "theorem", "slope_comm", []], ["add", "theorem", "slope_def_field", []], ["add", "theorem", "slope_same", []], ["add", "theorem", "sub_div_sub_smul_slope_add_sub_div_sub_smul_slope", []]]}]}, {"timestamp": 1603172290, "sha": "b46190f9", "message": "chore(data/finsupp): minor review (#4712)\n* add a few lemmas about injectivity of `coe_fn` etc;\n* simplify definition of `finsupp.on_finset`;\n* replace the proof of `support_on_finset` by `rfl`;\n* make `finsupp.mem_support_on_finset` a `simp` lemma.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "coe_mk", ["finsupp"]], ["add", "theorem", "coe_zero", ["finsupp"]], ["mod", "theorem", "ext", ["finsupp"]], ["add", "theorem", "ext_iff'", ["finsupp"]], ["add", "theorem", "injective_coe_fn", ["finsupp"]], ["mod", "theorem", "mem_support_on_finset", ["finsupp"]], ["mod", "theorem", "zero_apply", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}]}, {"timestamp": 1603172288, "sha": "288802b6", "message": "chore(data/polynomial): slightly generalize `map_eq_zero` and `map_ne_zero` (#4708)\nWe don't need the codomain to be a field.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "map_eq_zero", ["polynomial"]], ["mod", "theorem", "map_ne_zero", ["polynomial"]]]}]}, {"timestamp": 1603172287, "sha": "21415c8c", "message": "chore(topology/algebra/ordered): drop section vars, golf 2 proofs (#4706)\n* Explicitly specify explicit arguments instead of using section\n variables;\n* Add `continuous_min` and `continuous_max`;\n* Use them for `tendsto.min` and `tendsto.max`", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "max", ["continuous"]], ["mod", "theorem", "min", ["continuous"]], ["add", "theorem", "continuous_max", []], ["add", "theorem", "continuous_min", []], ["mod", "theorem", "frontier_le_subset_eq", []], ["mod", "theorem", "frontier_lt_subset_eq", []]]}]}, {"timestamp": 1603172284, "sha": "0cf8a98b", "message": "chore(data/set): a few more lemmas about `image2` (#4695)\nAlso add `@[simp]` to `set.image2_singleton_left` and `set.image2_singleton_rigt`.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "exists_prod_set", ["set"]], ["add", "theorem", "forall_image2_iff", ["set"]], ["add", "theorem", "image2_assoc", ["set"]], ["mod", "theorem", "image2_singleton", ["set"]], ["mod", "theorem", "image2_singleton_left", ["set"]], ["mod", "theorem", "image2_singleton_right", ["set"]], ["add", "theorem", "image2_subset_iff", ["set"]]]}]}, {"timestamp": 1603172281, "sha": "050b5a1b", "message": "feat(data/real/pi): Leibniz's series for pi (#4228)\nFreek No. 26 \n", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "tendsto_div_pow_mul_exp_add_at_top", ["real"]], ["add", "theorem", "tendsto_exp_nhds_0_nhds_1", ["real"]], ["add", "theorem", "tendsto_mul_exp_add_div_pow_at_top", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "log_rpow", ["real"]], ["add", "theorem", "tendsto_rpow_at_top", []], ["add", "theorem", "tendsto_rpow_div", []], ["add", "theorem", "tendsto_rpow_div_mul_add", []], ["add", "theorem", "tendsto_rpow_neg_at_top", []], ["add", "theorem", "tendsto_rpow_neg_div", []]]}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": [["add", "theorem", "tendsto_sum_pi_div_four", ["real"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "const_mul", ["tendsto"]], ["add", "theorem", "mul_const", ["tendsto"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_pow_at_top", []], ["add", "theorem", "tendsto_pow_neg_at_top", []]]}]}, {"timestamp": 1603163858, "sha": "cd884eb8", "message": "feat(measure_theory): finite_spanning_sets_in (#4668)\n* We define a new Type-valued structure `finite_spanning_sets_in` which consists of a countable sequence of sets that span the type, have finite measure, and live in a specified collection of sets, \n* `sigma_finite` is redefined in terms of `finite_spanning_sets_in`\n* One of the ext lemmas is now conveniently formulated in terms of `finite_spanning_sets_in`\n* `finite_spanning_sets_in` is also used to remove a little bit of code duplication in `prod` (which occurred because `sigma_finite` was a `Prop`, and forgot the actual construction)\n* Define a predicate `is_countably_spanning` which states that a collection of sets has a countable spanning subset. This is useful for one particular lemma in `prod`.\n* Generalize some lemmas about products in the case that the σ-algebras are generated by a collection of sets. This can be used to reason about iterated products.\n* Prove `prod_assoc_prod`.\n* Cleanup in `measurable_space` and somewhat in `measure_space`.\n* Rename `measurable.sum_rec -> measurable.sum_elim` (and give a different but definitionally equal statement)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "prod_assoc_preimage", ["equiv"]]]}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["add", "theorem", "Union_unpair_prod", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_prod", ["set"]], ["add", "theorem", "bUnion_prod", ["set"]], ["add", "theorem", "prod_Union", ["set"]], ["add", "theorem", "prod_bUnion", ["set"]], ["add", "theorem", "prod_sUnion", ["set"]], ["add", "theorem", "sUnion_prod", ["set"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "def", "is_countably_spanning", []], ["add", "theorem", "is_countably_spanning_is_measurable", []], ["mod", "theorem", "Inter", ["is_measurable"]], ["mod", "theorem", "Inter_Prop", ["is_measurable"]], ["mod", "theorem", "Union", ["is_measurable"]], ["mod", "theorem", "Union_Prop", ["is_measurable"]], ["mod", "theorem", "disjointed", ["is_measurable"]], ["mod", "theorem", "sInter", ["is_measurable"]], ["mod", "theorem", "sUnion", ["is_measurable"]], ["mod", "theorem", "subtype_image", ["is_measurable"]], ["mod", "theorem", "comp", ["measurable"]], ["mod", "theorem", "fst", ["measurable"]], ["mod", "theorem", "indicator", ["measurable"]], ["mod", "theorem", "piecewise", ["measurable"]], ["mod", "theorem", "snd", ["measurable"]], ["mod", "theorem", "subtype_coe", ["measurable"]], ["mod", "theorem", "subtype_mk", ["measurable"]], ["add", "theorem", "sum_elim", ["measurable"]], ["del", "theorem", "sum_rec", ["measurable"]], ["mod", "theorem", "measurable_const", []], ["mod", "theorem", "coe_eq", ["measurable_equiv"]], ["add", "def", "prod_assoc", ["measurable_equiv"]], ["mod", "def", "prod_comm", ["measurable_equiv"]], ["mod", "def", "prod_congr", ["measurable_equiv"]], ["mod", "def", "prod", ["measurable_equiv", "set"]], ["mod", "def", "range_inl", ["measurable_equiv", "set"]], ["mod", "def", "range_inr", ["measurable_equiv", "set"]], ["mod", "def", "singleton", ["measurable_equiv", "set"]], ["mod", "def", "sum_congr", ["measurable_equiv"]], ["mod", "def", "symm", ["measurable_equiv"]], ["del", "theorem", "symm_to_equiv", ["measurable_equiv"]], ["mod", "def", "trans", ["measurable_equiv"]], ["del", "theorem", "trans_to_equiv", ["measurable_equiv"]], ["mod", "theorem", "measurable_find", []], ["mod", "theorem", "measurable_find_greatest'", []], ["mod", "theorem", "measurable_find_greatest", []], ["mod", "theorem", "measurable_from_nat", []], ["mod", "theorem", "measurable_from_top", []], ["mod", "theorem", "measurable_id", []], ["mod", "theorem", "measurable_of_measurable_on_compl_singleton", []], ["mod", "theorem", "measurable_one", []], ["mod", "theorem", "measurable_pi_apply", []], ["mod", "theorem", "measurable_pi_lambda", []], ["mod", "theorem", "comap_bot", ["measurable_space"]], ["mod", "theorem", "comap_supr", ["measurable_space"]], ["mod", "theorem", "ext", ["measurable_space", "dynkin_system"]], ["mod", "theorem", "generate_le", ["measurable_space", "dynkin_system"]], ["mod", "def", "to_measurable_space", ["measurable_space", "dynkin_system"]], ["mod", "theorem", "ext", ["measurable_space"]], ["add", "theorem", "generate_from_is_measurable", ["measurable_space"]], ["mod", "theorem", "generate_from_le", ["measurable_space"]], ["mod", "def", "gi_generate_from", ["measurable_space"]], ["add", "theorem", "is_pi_system_is_measurable", ["measurable_space"]], ["mod", "theorem", "map_top", ["measurable_space"]], ["mod", "structure", "measurable_space", []], ["mod", "theorem", "measurable_subtype_coe", []], ["mod", "theorem", "measurable_to_encodable", []], ["mod", "theorem", "measurable_to_nat", []], ["mod", "theorem", "measurable_unit", []], ["mod", "theorem", "measurable", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "def", "completion", []], ["del", "theorem", "exists_finite_spanning_sets", ["measure_theory"]], ["del", "theorem", "finite_at_filter_of_finite", ["measure_theory"]], ["add", "theorem", "is_countably_spanning_spanning_sets", ["measure_theory"]], ["mod", "theorem", "ext_of_generate_from_of_Union", ["measure_theory", "measure"]], ["mod", "theorem", "finite_at_bot", ["measure_theory", "measure"]], ["mod", "def", "finite_at_filter", ["measure_theory", "measure"]], ["add", "theorem", "finite_at_filter_of_finite", ["measure_theory", "measure"]], ["add", "structure", "finite_spanning_sets_in", ["measure_theory", "measure"]], ["add", "def", "to_finite_spanning_sets_in", ["measure_theory", "measure"]], ["add", "def", "sigma_finite", ["measure_theory"]], ["mod", "def", "null_measurable", []]]}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": [["add", "theorem", "generate_from_eq_prod", []], ["add", "theorem", "generate_from_prod_eq", []], ["add", "theorem", "prod", ["is_countably_spanning"]], ["add", "theorem", "prod", ["is_pi_system"]], ["add", "def", "prod", ["measure_theory", "measure", "finite_spanning_sets_in"]], ["add", "theorem", "prod_assoc_prod", ["measure_theory", "measure"]], ["add", "theorem", "prod_eq_generate_from", ["measure_theory", "measure"]], ["del", "theorem", "prod_unique", ["measure_theory", "measure"]]]}]}, {"timestamp": 1603156453, "sha": "9755ae3c", "message": "chore(scripts): update nolints.txt (#4704)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603147526, "sha": "accc50ed", "message": "chore(data/finsupp): `to_additive` on `on_finset_sum` (#4698)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "on_finset_prod", ["finsupp"]], ["del", "theorem", "on_finset_sum", ["finsupp"]]]}]}, {"timestamp": 1603147523, "sha": "706b4841", "message": "chore(data/multiset): add a few lemmas (#4697)", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_cons", ["multiset"]], ["add", "theorem", "map_nsmul", ["multiset"]], ["add", "theorem", "sum_map_singleton", ["multiset"]]]}]}, {"timestamp": 1603147521, "sha": "b707e989", "message": "refactor(ring_theory/witt_vector): move lemmas to separate file (#4693)\nThis new file has almost no module docstring.\nThis is on purpose, it is a refactor PR.\nA follow-up PR will add a module docstring and more definitions.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/defs.lean", "changes": [["add", "theorem", "constant_coeff_witt_add", ["witt_vector"]], ["add", "theorem", "constant_coeff_witt_mul", ["witt_vector"]], ["add", "theorem", "constant_coeff_witt_neg", ["witt_vector"]], ["add", "theorem", "constant_coeff_witt_sub", ["witt_vector"]], ["add", "def", "witt_add", ["witt_vector"]], ["add", "theorem", "witt_add_vars", ["witt_vector"]], ["add", "theorem", "witt_add_zero", ["witt_vector"]], ["add", "def", "witt_mul", ["witt_vector"]], ["add", "theorem", "witt_mul_vars", ["witt_vector"]], ["add", "theorem", "witt_mul_zero", ["witt_vector"]], ["add", "def", "witt_neg", ["witt_vector"]], ["add", "theorem", "witt_neg_vars", ["witt_vector"]], ["add", "theorem", "witt_neg_zero", ["witt_vector"]], ["add", "def", "witt_one", ["witt_vector"]], ["add", "theorem", "witt_one_pos_eq_zero", ["witt_vector"]], ["add", "theorem", "witt_one_zero_eq_one", ["witt_vector"]], ["add", "def", "witt_sub", ["witt_vector"]], ["add", "theorem", "witt_sub_zero", ["witt_vector"]], ["add", "def", "witt_zero", ["witt_vector"]], ["add", "theorem", "witt_zero_eq_zero", ["witt_vector"]]]}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": [["add", "theorem", "witt_structure_int_vars", []], ["add", "theorem", "witt_structure_rat_vars", []], ["del", "theorem", "constant_coeff_witt_add", ["witt_vector"]], ["del", "theorem", "constant_coeff_witt_mul", ["witt_vector"]], ["del", "theorem", "constant_coeff_witt_neg", ["witt_vector"]], ["del", "theorem", "constant_coeff_witt_sub", ["witt_vector"]], ["del", "theorem", "witt_add_vars", ["witt_vector"]], ["del", "theorem", "witt_add_zero", ["witt_vector"]], ["del", "theorem", "witt_mul_vars", ["witt_vector"]], ["del", "theorem", "witt_mul_zero", ["witt_vector"]], ["del", "theorem", "witt_neg_vars", ["witt_vector"]], ["del", "theorem", "witt_neg_zero", ["witt_vector"]], ["del", "theorem", "witt_one_pos_eq_zero", ["witt_vector"]], ["del", "theorem", "witt_one_zero_eq_one", ["witt_vector"]], ["del", "theorem", "witt_structure_int_vars", ["witt_vector"]], ["del", "theorem", "witt_structure_rat_vars", ["witt_vector"]], ["del", "theorem", "witt_sub_zero", ["witt_vector"]], ["del", "theorem", "witt_zero_eq_zero", ["witt_vector"]]]}]}, {"timestamp": 1603147519, "sha": "b3003023", "message": "feat(algebra/free_algebra): Add a ring instance (#4692)\nThis also adds a ring instance to `tensor_algebra`.\nThe approach here does not work for `exterior_algebra` and `clifford_algebra`, and produces weird errors.\nThose will be easier to investigate when their foundations are in mathlib.", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}]}, {"timestamp": 1603147517, "sha": "cc6594a5", "message": "doc(algebra/algebra/basic): Fixes some documentation about `R`-algebras (#4689)\nSee the associated zulip discussion:\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/The.20Type.20of.20R-algebras/near/213722713", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}]}, {"timestamp": 1603147515, "sha": "86d65f8d", "message": "chore(topology/instances/ennreal): prove `nnreal.not_summable_iff_tendsto_nat_at_top` (#4670)\n* use `ℝ≥0` notation in `data/real/ennreal`;\n* add `ennreal.forall_ne_top`, `ennreal.exists_ne_top`,\n `ennreal.ne_top_equiv_nnreal`, `ennreal.cinfi_ne_top`,\n `ennreal.infi_ne_top`, `ennreal.csupr_ne_top`, `ennreal.sup_ne_top`,\n `ennreal.supr_ennreal`;\n* add `nnreal.injective_coe`, add `@[simp, norm_cast]` to\n `nnreal.tendsto_coe`, and add `nnreal.tendsto_coe_at_top`; move\n `nnreal.infi_real_pos_eq_infi_nnreal_pos` from `ennreal` to `nnreal`;\n* use `function.injective` instead of an unfolded definition in `filter.comap_map`;\n* add `ennreal.nhds_top'`, `ennreal.tendsto_nhds_top_iff_nnreal`,\n `ennreal.tendsto_nhds_top_iff_nat`;\n \n* upgrade `ennreal.tendsto_coe_nnreal_nhds_top` to an `iff`, rename to\n `ennreal.tendsto_coe_nhds_top`;\n* `nnreal.has_sum_iff_tendsto_nat` now takes `r` as an implicit argument;\n* add `nnreal.not_summable_iff_tendsto_nat_at_top` and\n `not_summable_iff_tendsto_nat_at_top_of_nonneg`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "cinfi_ne_top", ["ennreal"]], ["mod", "theorem", "coe_Inf", ["ennreal"]], ["mod", "theorem", "coe_Sup", ["ennreal"]], ["mod", "theorem", "coe_finset_prod", ["ennreal"]], ["mod", "theorem", "coe_finset_sum", ["ennreal"]], ["mod", "theorem", "coe_indicator", ["ennreal"]], ["mod", "theorem", "coe_inv_two", ["ennreal"]], ["mod", "theorem", "coe_le_iff", ["ennreal"]], ["mod", "theorem", "coe_max", ["ennreal"]], ["mod", "theorem", "coe_mem_upper_bounds", ["ennreal"]], ["mod", "theorem", "coe_min", ["ennreal"]], ["mod", "theorem", "coe_mono", ["ennreal"]], ["mod", "theorem", "coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nnreal_eq", ["ennreal"]], ["mod", "theorem", "coe_one", ["ennreal"]], ["mod", "theorem", "coe_to_real", ["ennreal"]], ["mod", "theorem", "coe_two", ["ennreal"]], ["mod", "theorem", "coe_zero", ["ennreal"]], ["add", "theorem", "csupr_ne_top", ["ennreal"]], ["add", "theorem", "exists_ne_top", ["ennreal"]], ["mod", "theorem", "forall_ennreal", ["ennreal"]], ["add", "theorem", "forall_ne_top", ["ennreal"]], ["add", "theorem", "infi_ne_top", ["ennreal"]], ["mod", "theorem", "le_coe_iff", ["ennreal"]], ["mod", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["mod", "theorem", "lt_iff_exists_add_pos_lt", ["ennreal"]], ["mod", "theorem", "lt_iff_exists_coe", ["ennreal"]], ["add", "def", "ne_top_equiv_nnreal", ["ennreal"]], ["mod", "def", "of_nnreal_hom", ["ennreal"]], ["mod", "theorem", "some_eq_coe", ["ennreal"]], ["add", "theorem", "supr_ennreal", ["ennreal"]], ["add", "theorem", "supr_ne_top", ["ennreal"]], ["mod", "def", "ennreal", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_map", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_nhds_bot_mono'", []], ["add", "theorem", "tendsto_nhds_bot_mono", []], ["add", "theorem", "tendsto_nhds_top_mono'", []], ["add", "theorem", "tendsto_nhds_top_mono", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "nhds_top'", ["ennreal"]], ["mod", "theorem", "nhds_top", ["ennreal"]], ["add", "theorem", "tendsto_coe_nhds_top", ["ennreal"]], ["del", "theorem", "tendsto_coe_nnreal_nhds_top", ["ennreal"]], ["add", "theorem", "tendsto_nhds_top_iff_nat", ["ennreal"]], ["add", "theorem", "tendsto_nhds_top_iff_nnreal", ["ennreal"]], ["mod", "theorem", "tsum_coe_ne_top_iff_summable", ["ennreal"]], ["del", "theorem", "infi_real_pos_eq_infi_nnreal_pos", []], ["mod", "theorem", "has_sum_iff_tendsto_nat", ["nnreal"]], ["add", "theorem", "not_summable_iff_tendsto_nat_at_top", ["nnreal"]], ["add", "theorem", "not_summable_iff_tendsto_nat_at_top_of_nonneg", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "comap_coe_at_top", ["nnreal"]], ["add", "theorem", "infi_real_pos_eq_infi_nnreal_pos", ["nnreal"]], ["add", "theorem", "map_coe_at_top", ["nnreal"]], ["add", "theorem", "tendsto_coe'", ["nnreal"]], ["mod", "theorem", "tendsto_coe", ["nnreal"]], ["add", "theorem", "tendsto_coe_at_top", ["nnreal"]]]}]}, {"timestamp": 1603147512, "sha": "30195815", "message": "feat({field,ring}_theory/adjoin): generalize `induction_on_adjoin` (#4647)\nWe can prove `induction_on_adjoin` for both `algebra.adjoin` and `intermediate_field.adjoin` in a very similar way, if we add a couple of small lemmas. The extra lemmas I introduced for `algebra.adjoin` shorten the proof of `intermediate_field.adjoin` noticeably.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_empty", ["intermediate_field"]], ["add", "theorem", "adjoin_eq_algebra_adjoin", ["intermediate_field"]], ["add", "theorem", "adjoin_insert_adjoin", ["intermediate_field"]], ["del", "theorem", "adjoin_le_algebra_adjoin", ["intermediate_field"]], ["add", "theorem", "eq_adjoin_of_eq_algebra_adjoin", ["intermediate_field"]], ["add", "def", "fg", ["intermediate_field"]], ["add", "theorem", "fg_adjoin_finset", ["intermediate_field"]], ["add", "theorem", "fg_bot", ["intermediate_field"]], ["add", "theorem", "fg_def", ["intermediate_field"]], ["add", "theorem", "fg_of_fg_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "fg_of_noetherian", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "to_subalgebra_le_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "to_subalgebra_lt_to_subalgebra", ["intermediate_field"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_insert_adjoin", ["algebra"]], ["add", "theorem", "fg_of_fg_to_submodule", ["subalgebra"]], ["add", "theorem", "fg_of_noetherian", ["subalgebra"]], ["add", "theorem", "induction_on_adjoin", ["subalgebra"]]]}]}, {"timestamp": 1603147510, "sha": "006b2e70", "message": "feat(data/polynomial/reverse): define `reverse f`, prove that `reverse` is a multiplicative monoid homomorphism (#4598)", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/reverse.lean", "changes": [["add", "theorem", "coeff_reflect", ["polynomial"]], ["add", "theorem", "reflect_C_mul", ["polynomial"]], ["add", "theorem", "reflect_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "reflect_add", ["polynomial"]], ["add", "theorem", "reflect_eq_zero_iff", ["polynomial"]], ["add", "theorem", "reflect_monomial", ["polynomial"]], ["add", "theorem", "reflect_mul", ["polynomial"]], ["add", "theorem", "reflect_mul_induction", ["polynomial"]], ["add", "theorem", "reflect_support", ["polynomial"]], ["add", "theorem", "reflect_zero", ["polynomial"]], ["add", "def", "rev_at", ["polynomial"]], ["add", "theorem", "rev_at_add", ["polynomial"]], ["add", "def", "rev_at_fun", ["polynomial"]], ["add", "theorem", "rev_at_fun_eq", ["polynomial"]], ["add", "theorem", "rev_at_fun_inj", ["polynomial"]], ["add", "theorem", "rev_at_fun_invol", ["polynomial"]], ["add", "theorem", "rev_at_invol", ["polynomial"]], ["add", "theorem", "rev_at_le", ["polynomial"]], ["add", "theorem", "reverse_mul", ["polynomial"]], ["add", "theorem", "reverse_mul_of_domain", ["polynomial"]], ["add", "theorem", "reverse_zero", ["polynomial"]]]}]}, {"timestamp": 1603147507, "sha": "0c70cf30", "message": "feat(tactic/unify_equations): add unify_equations tactic (#4515)\n`unify_equations` is a first-order unification tactic for propositional\nequalities. It implements the algorithm that `cases` uses to simplify\nindices of inductive types, with one extension: `unify_equations` can\nderive a contradiction from 'cyclic' equations like `n = n + 1`.\n`unify_equations` is unlikely to be particularly useful on its own, but\nI'll use it as part of my new `induction` tactic.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/unify_equations.lean", "changes": [["add", "theorem", "add_add_one_ne", ["tactic", "unify_equations"]]]}, {"oldPath": null, "newPath": "test/unify_equations.lean", "changes": [["add", "inductive", "rose", []]]}]}, {"timestamp": 1603147505, "sha": "a249c9a4", "message": "feat(archive/imo): formalize IMO 1998 problem 2 (#4502)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1998_q2.lean", "changes": [["add", "def", "A", []], ["add", "theorem", "A_card_lower_bound", []], ["add", "theorem", "A_card_upper_bound", []], ["add", "theorem", "A_fibre_over_contestant", []], ["add", "theorem", "A_fibre_over_contestant_card", []], ["add", "theorem", "A_fibre_over_judge_pair", []], ["add", "theorem", "A_fibre_over_judge_pair_card", []], ["add", "theorem", "A_maps_to_off_diag_judge_pair", []], ["add", "theorem", "add_sq_add_sq_sub", []], ["add", "def", "agreed_contestants", []], ["add", "def", "contestant", ["agreed_triple"]], ["add", "def", "judge_pair", ["agreed_triple"]], ["add", "def", "agreed_triple", []], ["add", "theorem", "clear_denominators", []], ["add", "theorem", "distinct_judge_pairs_card_lower_bound", []], ["add", "theorem", "imo1998_q2", []], ["add", "def", "agree", ["judge_pair"]], ["add", "theorem", "agree_iff_same_rating", ["judge_pair"]], ["add", "def", "distinct", ["judge_pair"]], ["add", "def", "judge₁", ["judge_pair"]], ["add", "def", "judge₂", ["judge_pair"]], ["add", "def", "judge_pair", []], ["add", "theorem", "judge_pairs_card_lower_bound", []], ["add", "theorem", "norm_bound_of_odd_sum", []]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "def", "diag", ["finset"]], ["add", "theorem", "diag_card", ["finset"]], ["add", "theorem", "filter_card_add_filter_neg_card_eq_card", ["finset"]], ["add", "theorem", "filter_product", ["finset"]], ["add", "theorem", "filter_product_card", ["finset"]], ["add", "theorem", "mem_diag", ["finset"]], ["add", "theorem", "mem_off_diag", ["finset"]], ["add", "def", "off_diag", ["finset"]], ["add", "theorem", "off_diag_card", ["finset"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "theorem", "ne_of_odd_sum", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "odd_gt_zero", ["nat"]]]}]}, {"timestamp": 1603147503, "sha": "5065471e", "message": "feat(data/monoid_algebra): add missing has_coe_to_fun (#4315)\nAlso does the same for the additive version `semimodule k (add_monoid_algebra k G)`.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1603137696, "sha": "0523b61d", "message": "chore(logic/function): `simp`lify applications of `(un)curry` (#4696)", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "curry_apply", ["function"]], ["add", "theorem", "uncurry_apply_pair", ["function"]]]}]}, {"timestamp": 1603121827, "sha": "a1f17706", "message": "Revert \"chore(data/multiset): add a few lemmas\"\nThis reverts commit 45caa4f392fe4f7622fef576cf3811b9ff6fd307.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "count_cons", ["multiset"]], ["del", "theorem", "map_nsmul", ["multiset"]], ["del", "theorem", "sum_map_singleton", ["multiset"]]]}]}, {"timestamp": 1603121442, "sha": "45caa4f3", "message": "chore(data/multiset): add a few lemmas", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_cons", ["multiset"]], ["add", "theorem", "map_nsmul", ["multiset"]], ["add", "theorem", "sum_map_singleton", ["multiset"]]]}]}, {"timestamp": 1603120305, "sha": "cacc297c", "message": "fix(tactic/norm_num): remove unnecessary argument to rat.cast_zero (#4682)\nSee [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60norm_num.60.20error.20message).", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["mod", "theorem", "adc_bit0_bit1", ["norm_num"]], ["mod", "theorem", "adc_bit1_bit0", ["norm_num"]], ["mod", "theorem", "adc_bit1_bit1", ["norm_num"]], ["mod", "theorem", "int_div", ["norm_num"]], ["mod", "theorem", "int_mod", ["norm_num"]], ["mod", "theorem", "le_bit0_bit0", ["norm_num"]], ["mod", "theorem", "le_bit1_bit1", ["norm_num"]], ["mod", "theorem", "lt_bit0_bit0", ["norm_num"]], ["mod", "theorem", "lt_bit1_bit1", ["norm_num"]], ["mod", "theorem", "rat_cast_bit0", ["norm_num"]], ["mod", "theorem", "rat_cast_bit1", ["norm_num"]], ["mod", "theorem", "sle_bit0_bit0", ["norm_num"]], ["mod", "theorem", "sle_bit0_bit1", ["norm_num"]], ["mod", "theorem", "sle_bit1_bit0", ["norm_num"]], ["mod", "theorem", "sle_bit1_bit1", ["norm_num"]], ["mod", "theorem", "sle_one_bit0", ["norm_num"]], ["mod", "theorem", "sle_one_bit1", ["norm_num"]]]}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1603107547, "sha": "0f1bc68f", "message": "feat(ring_theory/witt_vector/structure_polynomial): examples and basic properties (#4467)\nThis is the 4th and final PR in a series on a fundamental theorem about Witt polynomials.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "eval₂_hom_zero'", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_zero", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "mem_vars_bind₁", ["mv_polynomial"]], ["add", "theorem", "mem_vars_rename", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": [["add", "theorem", "constant_coeff_witt_structure_int", []], ["add", "theorem", "constant_coeff_witt_structure_int_zero", []], ["add", "theorem", "constant_coeff_witt_structure_rat", []], ["add", "theorem", "constant_coeff_witt_structure_rat_zero", []], ["add", "theorem", "constant_coeff_witt_add", ["witt_vector"]], ["add", "theorem", "constant_coeff_witt_mul", ["witt_vector"]], ["add", "theorem", "constant_coeff_witt_neg", ["witt_vector"]], ["add", "theorem", "constant_coeff_witt_sub", ["witt_vector"]], ["add", "theorem", "witt_add_vars", ["witt_vector"]], ["add", "theorem", "witt_add_zero", ["witt_vector"]], ["add", "theorem", "witt_mul_vars", ["witt_vector"]], ["add", "theorem", "witt_mul_zero", ["witt_vector"]], ["add", "theorem", "witt_neg_vars", ["witt_vector"]], ["add", "theorem", "witt_neg_zero", ["witt_vector"]], ["add", "theorem", "witt_one_pos_eq_zero", ["witt_vector"]], ["add", "theorem", "witt_one_zero_eq_one", ["witt_vector"]], ["add", "theorem", "witt_structure_int_vars", ["witt_vector"]], ["add", "theorem", "witt_structure_rat_vars", ["witt_vector"]], ["add", "theorem", "witt_sub_zero", ["witt_vector"]], ["add", "theorem", "witt_zero_eq_zero", ["witt_vector"]]]}]}, {"timestamp": 1603107545, "sha": "4140f789", "message": "feat(algebra/ordered_semiring): relax 0 < 1 to 0 ≤ 1 (#4363)\nPer [discussion](https://github.com/leanprover-community/mathlib/pull/4296#issuecomment-701953077) in #4296.", "changes": [{"oldPath": "archive/imo/imo1972_b2.lean", "newPath": "archive/imo/imo1972_b2.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["del", "theorem", "zero_lt_one'", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "zero_lt_one", ["canonically_ordered_semiring"]], ["mod", "theorem", "le_of_mul_le_of_one_le", []], ["mod", "def", "to_linear_nonneg_ring", ["nonneg_ring"]], ["del", "def", "to_ordered_ring", ["nonneg_ring"]], ["add", "theorem", "zero_le_two", []], ["add", "theorem", "zero_lt_one'", []], ["mod", "theorem", "zero_lt_one", []]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_two", ["real"]]]}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "one_lt_two", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["add", "theorem", "le_def", ["filter", "germ"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/tactic/linarith/verification.lean", "newPath": "src/tactic/linarith/verification.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/topology/algebra/floor_ring.lean", "newPath": "src/topology/algebra/floor_ring.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1603103932, "sha": "ef9d00f7", "message": "feat(linear_algebra/matrix): multiplying `is_basis.to_matrix` and `linear_map.to_matrix` (#4650)\nThis basically tells us that `is_basis.to_matrix` is indeed a basis change matrix.", "changes": [{"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "sum_to_matrix_smul_self", ["is_basis"]], ["add", "theorem", "to_lin_to_matrix", ["is_basis"]], ["mod", "def", "to_matrix", ["is_basis"]], ["add", "theorem", "to_matrix_eq_to_matrix_constr", ["is_basis"]], ["mod", "theorem", "to_matrix_self", ["is_basis"]], ["mod", "theorem", "to_matrix_update", ["is_basis"]], ["add", "theorem", "is_basis_to_matrix_mul_linear_map_to_matrix", []], ["add", "theorem", "linear_map_to_matrix_mul_is_basis_to_matrix", []], ["add", "theorem", "to_lin_self", ["matrix"]]]}]}, {"timestamp": 1603103930, "sha": "47dcecd2", "message": "feat(data/complex/exponential): bounds on exp (#4432)\nDefine `real.exp_bound` using `complex.exp_bound`. Deduce numerical\nbounds on `exp 1` analogous to those we have for pi.", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_1_approx_succ_eq", ["real"]], ["add", "theorem", "exp_approx_end'", ["real"]], ["add", "theorem", "exp_approx_end", ["real"]], ["add", "theorem", "exp_approx_start", ["real"]], ["add", "theorem", "exp_approx_succ", ["real"]], ["add", "theorem", "exp_bound", ["real"]], ["add", "def", "exp_near", ["real"]], ["add", "theorem", "exp_near_sub", ["real"]], ["add", "theorem", "exp_near_succ", ["real"]], ["add", "theorem", "exp_near_zero", ["real"]]]}, {"oldPath": null, "newPath": "src/data/complex/exponential_bounds.lean", "changes": [["add", "theorem", "exp_neg_one_gt_0367879441", ["real"]], ["add", "theorem", "exp_neg_one_lt_0367879442", ["real"]], ["add", "theorem", "exp_one_gt_271828182", ["real"]], ["add", "theorem", "exp_one_lt_271828183", ["real"]], ["add", "theorem", "exp_one_near_10", ["real"]], ["add", "theorem", "exp_one_near_20", ["real"]]]}]}, {"timestamp": 1603103928, "sha": "c38d128c", "message": "feat(ring_theory/polynomial/chebyshev): chebyshev polynomials of the first kind (#4267)\nIf T_n denotes the n-th Chebyshev polynomial of the first kind, then the\npolynomials 2*T_n(X/2) form a Lambda structure on Z[X].\nI call these polynomials the lambdashev polynomials, because, as far as I\nam aware they don't have a name in the literature.\nWe show that they commute, and that the p-th polynomial is congruent to X^p\nmod p. In other words: a Lambda structure.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "chebyshev₁_complex_cos", []], ["add", "theorem", "cos_nat_mul", []]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/chebyshev/basic.lean", "changes": [["add", "theorem", "chebyshev₁_eq_lambdashev", ["polynomial"]], ["add", "theorem", "chebyshev₁_mul", ["polynomial"]], ["add", "theorem", "lambdashev_char_p", ["polynomial"]], ["add", "theorem", "lambdashev_comp_comm", ["polynomial"]], ["add", "theorem", "lambdashev_eq_chebyshev₁", ["polynomial"]], ["add", "theorem", "lambdashev_eval_add_inv", ["polynomial"]], ["add", "theorem", "lambdashev_mul", ["polynomial"]], ["add", "theorem", "lambdashev_zmod_p", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/chebyshev/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/chebyshev/defs.lean", "changes": [["add", "theorem", "chebyshev₁_add_two", ["polynomial"]], ["add", "theorem", "chebyshev₁_of_two_le", ["polynomial"]], ["add", "theorem", "chebyshev₁_one", ["polynomial"]], ["add", "theorem", "chebyshev₁_two", ["polynomial"]], ["add", "theorem", "chebyshev₁_zero", ["polynomial"]], ["add", "theorem", "lambdashev_add_two", ["polynomial"]], ["add", "theorem", "lambdashev_eq_two_le", ["polynomial"]], ["add", "theorem", "lambdashev_one", ["polynomial"]], ["add", "theorem", "lambdashev_two", ["polynomial"]], ["add", "theorem", "lambdashev_zero", ["polynomial"]], ["add", "theorem", "map_chebyshev₁", ["polynomial"]], ["add", "theorem", "map_lambdashev", ["polynomial"]]]}]}, {"timestamp": 1603091584, "sha": "f75dbd3d", "message": "feat(algebra/*): some simp lemmas, and changing binders (#4681)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "inv_of_mul_self_assoc", []], ["add", "theorem", "mul_inv_of_self_assoc", []]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}]}, {"timestamp": 1603091581, "sha": "41c227a1", "message": "feat(algebra/infinite_sum): make tsum irreducible (#4679)\nSee https://leanprover.zulipchat.com/#narrow/stream/239415-metaprogramming-.2F.20tactics/topic/congr'.20is.20slow", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "def", "tsum", []]]}]}, {"timestamp": 1603091578, "sha": "7601a7a5", "message": "feat(ring_theory/adjoin): adjoin_singleton_one (#4633)", "changes": [{"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_singleton_one", ["algebra"]]]}]}, {"timestamp": 1603082706, "sha": "4b890a24", "message": "feat(*): make int.nonneg irreducible (#4601)\nIn #4474, `int.lt` was made irreducible. We make `int.nonneg` irreducible, which is stronger as `int.lt` is expressed in terms of `int.nonneg`.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/range.lean", "newPath": "src/data/int/range.lean", "changes": []}, {"oldPath": "src/data/int/sqrt.lean", "newPath": "src/data/int/sqrt.lean", "changes": [["mod", "theorem", "sqrt_nonneg", ["int"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/rat/sqrt.lean", "newPath": "src/data/rat/sqrt.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": [["mod", "theorem", "norm_nonneg", ["gaussian_int"]]]}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1603070723, "sha": "d174295c", "message": "chore(scripts): update nolints.txt (#4680)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1603070721, "sha": "9d1bbd10", "message": "fix(data/equiv): nolint typo (#4677)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}]}, {"timestamp": 1603070719, "sha": "49bb5dd9", "message": "refactor(tactic/norm_num): define prove_ne_zero using prove_ne (#4626)\nThis is trickier than it sounds because of a cyclic dependency. As a result we\nnow have two versions of `prove_ne_zero` and `prove_clear_denom` is\ngeneric over them. One version proves ne using an order relation on the\ntarget, while the other uses `uncast` lemmas to reduce to `rat` and\nthen uses the first `prove_ne_zero`. (This is why we actually want two versions -\nwe can't solve this with a large mutual def, because it would\nresult in an infinite recursion.)", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1603062415, "sha": "1ac5d822", "message": "fix(logic/nontrivial): change tactic doc entry tag to more common \"type class\" (#4676)", "changes": [{"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}]}, {"timestamp": 1603056891, "sha": "61e1111d", "message": "chore(linear_algebra/affine_space): introduce notation for `affine_map` (#4675)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "comp_affine_map", ["concave_on"]], ["mod", "theorem", "affine_image", ["convex"]], ["mod", "theorem", "affine_preimage", ["convex"]], ["mod", "theorem", "combo_affine_apply", ["convex"]], ["mod", "theorem", "comp_affine_map", ["convex_on"]]]}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": [["mod", "def", "to_affine_map", ["isometric"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["mod", "def", "orthogonal_projection", ["euclidean_geometry"]]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["mod", "theorem", "add_linear", ["affine_map"]], ["mod", "theorem", "apply_line_map", ["affine_map"]], ["mod", "theorem", "coe_add", ["affine_map"]], ["mod", "theorem", "coe_comp", ["affine_map"]], ["mod", "theorem", "coe_fst", ["affine_map"]], ["mod", "theorem", "coe_mul", ["affine_map"]], ["mod", "theorem", "coe_one", ["affine_map"]], ["mod", "theorem", "coe_smul", ["affine_map"]], ["mod", "theorem", "coe_snd", ["affine_map"]], ["mod", "theorem", "coe_zero", ["affine_map"]], ["mod", "def", "comp", ["affine_map"]], ["mod", "theorem", "comp_apply", ["affine_map"]], ["mod", "theorem", "comp_assoc", ["affine_map"]], ["mod", "theorem", "comp_id", ["affine_map"]], ["mod", "theorem", "comp_line_map", ["affine_map"]], ["mod", "def", "const", ["affine_map"]], ["mod", "theorem", "decomp'", ["affine_map"]], ["mod", "theorem", "decomp", ["affine_map"]], ["mod", "theorem", "ext", ["affine_map"]], ["mod", "theorem", "ext_iff", ["affine_map"]], ["mod", "def", "fst", ["affine_map"]], ["mod", "theorem", "fst_linear", ["affine_map"]], ["mod", "def", "homothety", ["affine_map"]], ["mod", "def", "homothety_affine", ["affine_map"]], ["mod", "def", "homothety_hom", ["affine_map"]], ["mod", "def", "id", ["affine_map"]], ["mod", "theorem", "id_comp", ["affine_map"]], ["mod", "theorem", "image_interval", ["affine_map"]], ["mod", "def", "line_map", ["affine_map"]], ["mod", "theorem", "linear_map_vsub", ["affine_map"]], ["mod", "theorem", "map_vadd", ["affine_map"]], ["mod", "def", "snd", ["affine_map"]], ["mod", "theorem", "snd_linear", ["affine_map"]], ["mod", "theorem", "to_fun_eq_coe", ["affine_map"]], ["mod", "theorem", "vadd_apply", ["affine_map"]], ["mod", "theorem", "vsub_apply", ["affine_map"]], ["mod", "theorem", "zero_linear", ["affine_map"]], ["mod", "def", "to_affine_map", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["mod", "def", "weighted_vsub_of_point", ["affine_map"]], ["mod", "def", "affine_combination", ["finset"]]]}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": [["mod", "theorem", "continuous_iff", ["affine_map"]]]}]}, {"timestamp": 1603056889, "sha": "4faf2e21", "message": "chore(order/filter): use implicit arguments in `tendsto_at_top` etc (#4672)\nAlso weaken some assumptions from a decidable linear order to a linear order.", "changes": [{"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "tendsto_at_bot'", ["filter"]], ["mod", "theorem", "tendsto_at_bot", ["filter"]], ["mod", "theorem", "tendsto_at_bot_at_bot", ["filter"]], ["mod", "theorem", "tendsto_at_bot_at_top", ["filter"]], ["mod", "theorem", "tendsto_at_top'", ["filter"]], ["mod", "theorem", "tendsto_at_top", ["filter"]], ["mod", "theorem", "tendsto_at_top_at_bot", ["filter"]], ["mod", "theorem", "tendsto_at_top_at_top", ["filter"]], ["add", "theorem", "tendsto_at_top_mul_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "tendsto_at_top", ["emetric"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1603056887, "sha": "392d52c2", "message": "chore(order/filter): run `dsimp only [set.mem_set_of_eq]` in `filter_upwards` (#4671)", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/prod.lean", "newPath": "src/measure_theory/prod.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1603048869, "sha": "93b7e635", "message": "feat(analysis/special_functions/trigonometric): range_{exp,cos,sin} (#4595)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "log_surjective", ["real"]], ["add", "theorem", "range_exp", ["real"]], ["add", "theorem", "range_log", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "cos_surjective", ["complex"]], ["add", "theorem", "exists_eq_mul_self", ["complex"]], ["add", "theorem", "exists_pow_nat_eq", ["complex"]], ["add", "theorem", "range_cos", ["complex"]], ["add", "theorem", "range_exp", ["complex"]], ["add", "theorem", "range_sin", ["complex"]], ["add", "theorem", "sin_surjective", ["complex"]], ["add", "theorem", "range_cos_infinite", ["real"]], ["add", "theorem", "range_sin_infinite", ["real"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "infinite_of_infinite_image", ["set"]]]}]}, {"timestamp": 1603036942, "sha": "fee2dfaa", "message": "chore(analysis/calculus/fderiv): golf a lemma using new `nontriviality` (#4584)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1603015192, "sha": "e21dc7a9", "message": "feat(topology/subset_properties): define `filter.cocompact` (#4666)\nThe filter of complements to compact subsets.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm", ["continuous"]], ["add", "theorem", "tendsto_norm_cocompact_at_top", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nonempty_insert", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "exists_forall_ge", ["continuous"]], ["add", "theorem", "exists_forall_le", ["continuous"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "tendsto_dist_left_cocompact_at_top", []], ["add", "theorem", "tendsto_dist_right_cocompact_at_top", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "def", "cocompact", ["filter"]], ["add", "theorem", "has_basis_cocompact", ["filter"]], ["add", "theorem", "mem_cocompact'", ["filter"]], ["add", "theorem", "mem_cocompact", ["filter"]], ["add", "theorem", "compl_mem_cocompact", ["is_compact"]], ["add", "theorem", "insert", ["is_compact"]]]}]}, {"timestamp": 1603000293, "sha": "cc32876d", "message": "chore(analysis/normed_space/basic): add `continuous_at.inv'`, `continuous.div` etc (#4667)\nAlso add `continuous_on_(cos/sin)`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "div", ["continuous"]], ["add", "theorem", "inv'", ["continuous"]], ["add", "theorem", "inv'", ["continuous_at"]], ["add", "theorem", "div", ["continuous_on"]], ["add", "theorem", "inv'", ["continuous_on"]], ["add", "theorem", "div", ["continuous_within_at"]], ["add", "theorem", "inv'", ["continuous_within_at"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "continuous_on_cos", ["complex"]], ["add", "theorem", "continuous_on_sin", ["complex"]], ["add", "theorem", "continuous_on_cos", ["real"]]]}]}, {"timestamp": 1602995370, "sha": "db06b677", "message": "feat(measure_theory/prod): product measures and Fubini's theorem (#4590)\n* Define the product measure of two σ-finite measures.\n* Prove Tonelli's theorem.\n* Prove Fubini's theorem.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_mul_left", ["set"]], ["add", "theorem", "indicator_mul_right", ["set"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/prod.lean", "changes": [["add", "theorem", "generate_from_prod", []], ["add", "theorem", "is_measurable_integrable", []], ["add", "theorem", "is_pi_system_prod", []], ["add", "theorem", "integral_prod_left'", ["measurable"]], ["add", "theorem", "integral_prod_left", ["measurable"]], ["add", "theorem", "integral_prod_right'", ["measurable"]], ["add", "theorem", "integral_prod_right", ["measurable"]], ["add", "theorem", "lintegral_prod_left'", ["measurable"]], ["add", "theorem", "lintegral_prod_left", ["measurable"]], ["add", "theorem", "lintegral_prod_right'", ["measurable"]], ["add", "theorem", "lintegral_prod_right", ["measurable"]], ["add", "theorem", "map_prod_mk_left", ["measurable"]], ["add", "theorem", "map_prod_mk_right", ["measurable"]], ["add", "theorem", "measurable_measure_prod_mk_left", []], ["add", "theorem", "measurable_measure_prod_mk_left_finite", []], ["add", "theorem", "measurable_measure_prod_mk_right", []], ["add", "theorem", "continuous_integral_integral", ["measure_theory"]], ["add", "theorem", "has_finite_integral_prod_iff", ["measure_theory"]], ["add", "theorem", "integral_norm_prod_left", ["measure_theory", "integrable"]], ["add", "theorem", "integral_norm_prod_right", ["measure_theory", "integrable"]], ["add", "theorem", "integral_prod_left", ["measure_theory", "integrable"]], ["add", "theorem", "integral_prod_right", ["measure_theory", "integrable"]], ["add", "theorem", "prod_left_ae", ["measure_theory", "integrable"]], ["add", "theorem", "prod_right_ae", ["measure_theory", "integrable"]], ["add", "theorem", "swap", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_prod_iff'", ["measure_theory"]], ["add", "theorem", "integrable_prod_iff", ["measure_theory"]], ["add", "theorem", "integrable_swap_iff", ["measure_theory"]], ["add", "theorem", "integral_fn_integral_add", ["measure_theory"]], ["add", "theorem", "integral_fn_integral_sub", ["measure_theory"]], ["add", "theorem", "integral_integral", ["measure_theory"]], ["add", "theorem", "integral_integral_add'", ["measure_theory"]], ["add", "theorem", "integral_integral_add", ["measure_theory"]], ["add", "theorem", "integral_integral_sub'", ["measure_theory"]], ["add", "theorem", "integral_integral_sub", ["measure_theory"]], ["add", "theorem", "integral_integral_swap", ["measure_theory"]], ["add", "theorem", "integral_integral_symm", ["measure_theory"]], ["add", "theorem", "integral_prod", ["measure_theory"]], ["add", "theorem", "integral_prod_swap", ["measure_theory"]], ["add", "theorem", "integral_prod_symm", ["measure_theory"]], ["add", "theorem", "lintegral_fn_integral_sub", ["measure_theory"]], ["add", "theorem", "lintegral_lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_lintegral_swap", ["measure_theory"]], ["add", "theorem", "lintegral_lintegral_symm", ["measure_theory"]], ["add", "theorem", "lintegral_prod", ["measure_theory"]], ["add", "theorem", "lintegral_prod_swap", ["measure_theory"]], ["add", "theorem", "lintegral_prod_symm", ["measure_theory"]], ["add", "theorem", "add_prod", ["measure_theory", "measure"]], ["add", "theorem", "ae_ae_of_ae_prod", ["measure_theory", "measure"]], ["add", "theorem", "ae_measure_lt_top", ["measure_theory", "measure"]], ["add", "theorem", "dirac_prod", ["measure_theory", "measure"]], ["add", "theorem", "dirac_prod_dirac", ["measure_theory", "measure"]], ["add", "theorem", "integrable_measure_prod_mk_left", ["measure_theory", "measure"]], ["add", "theorem", "measure_ae_null_of_prod_null", ["measure_theory", "measure"]], ["add", "theorem", "measure_prod_null", ["measure_theory", "measure"]], ["add", "theorem", "prod_add", ["measure_theory", "measure"]], ["add", "theorem", "prod_apply", ["measure_theory", "measure"]], ["add", "theorem", "prod_apply_symm", ["measure_theory", "measure"]], ["add", "theorem", "prod_dirac", ["measure_theory", "measure"]], ["add", "theorem", "prod_eq", ["measure_theory", "measure"]], ["add", "theorem", "prod_prod", ["measure_theory", "measure"]], ["add", "theorem", "prod_restrict", ["measure_theory", "measure"]], ["add", "theorem", "prod_sum", ["measure_theory", "measure"]], ["add", "theorem", "prod_swap", ["measure_theory", "measure"]], ["add", "theorem", "prod_unique", ["measure_theory", "measure"]], ["add", "theorem", "sum_prod", ["measure_theory", "measure"]]]}]}, {"timestamp": 1602985618, "sha": "c7782bb1", "message": "chore(scripts): update nolints.txt (#4665)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1602985616, "sha": "77dc6794", "message": "chore(data/set/intervals): more lemmas (#4662)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_bot", ["set"]], ["add", "theorem", "Icc_top", ["set"]], ["mod", "theorem", "Ici_bot", ["set"]], ["mod", "theorem", "Ici_top", ["set"]], ["add", "theorem", "Ico_bot", ["set"]], ["add", "theorem", "Ico_subset_Ici_self", ["set"]], ["add", "theorem", "Ico_union_right", ["set"]], ["add", "theorem", "Iic_bot", ["set"]], ["add", "theorem", "Iic_top", ["set"]], ["add", "theorem", "Ioc_subset_Iic_self", ["set"]], ["add", "theorem", "Ioc_top", ["set"]], ["add", "theorem", "Ioc_union_left", ["set"]], ["add", "theorem", "Ioo_union_left", ["set"]], ["add", "theorem", "Ioo_union_right", ["set"]]]}]}, {"timestamp": 1602985613, "sha": "95852107", "message": "chore(order/filter): add a few lemmas (#4661)", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "at_top_basis_Ioi", ["filter"]], ["add", "theorem", "eventually_gt_at_top", ["filter"]], ["add", "theorem", "eventually_lt_at_bot", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "frequently_iff", ["filter", "has_basis"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "eventually_sup", ["filter"]], ["add", "theorem", "tendsto_top", ["filter"]]]}]}, {"timestamp": 1602985611, "sha": "f9908388", "message": "chore(data/finsupp/basic): rename type variables (#4624)\nUse `M`, `N`, `P` for types with `has_zero`, `add_monoid`, or\n`add_comm_monoid` structure, and `R`, `S` for types with at least\na `semiring` instance.\nAPI change: `single_add_erase` and `erase_add_single` now use explicit arguments.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "add_apply", ["finsupp"]], ["mod", "theorem", "add_eq_zero_iff", ["finsupp"]], ["mod", "theorem", "add_hom_ext", ["finsupp"]], ["mod", "def", "antidiagonal", ["finsupp"]], ["mod", "theorem", "antidiagonal_zero", ["finsupp"]], ["mod", "theorem", "card_support_eq_one'", ["finsupp"]], ["mod", "theorem", "card_support_eq_one", ["finsupp"]], ["mod", "theorem", "card_support_eq_zero", ["finsupp"]], ["mod", "theorem", "coe_leval'", ["finsupp"]], ["mod", "theorem", "coe_leval", ["finsupp"]], ["mod", "def", "comap_domain", ["finsupp"]], ["mod", "theorem", "comap_domain_apply", ["finsupp"]], ["mod", "def", "comap_has_scalar", ["finsupp"]], ["mod", "def", "comap_mul_action", ["finsupp"]], ["mod", "theorem", "comap_smul_apply", ["finsupp"]], ["mod", "theorem", "comap_smul_single", ["finsupp"]], ["mod", "def", "emb_domain", ["finsupp"]], ["mod", "theorem", "emb_domain_apply", ["finsupp"]], ["mod", "theorem", "emb_domain_eq_map_domain", ["finsupp"]], ["mod", "theorem", "emb_domain_eq_zero", ["finsupp"]], ["mod", "theorem", "emb_domain_inj", ["finsupp"]], ["mod", "theorem", "emb_domain_injective", ["finsupp"]], ["mod", "theorem", "emb_domain_notin_range", ["finsupp"]], ["mod", "theorem", "emb_domain_zero", ["finsupp"]], ["mod", "theorem", "eq_single_iff", ["finsupp"]], ["mod", "theorem", "eq_zero_of_comap_domain_eq_zero", ["finsupp"]], ["mod", "def", "equiv_fun_on_fintype", ["finsupp"]], ["mod", "def", "erase", ["finsupp"]], ["mod", "theorem", "erase_add", ["finsupp"]], ["mod", "theorem", "erase_add_single", ["finsupp"]], ["mod", "theorem", "erase_ne", ["finsupp"]], ["mod", "theorem", "erase_same", ["finsupp"]], ["mod", "theorem", "erase_single", ["finsupp"]], ["mod", "theorem", "erase_single_ne", ["finsupp"]], ["mod", "theorem", "erase_zero", ["finsupp"]], ["mod", "def", "eval_add_hom", ["finsupp"]], ["mod", "theorem", "eval_add_hom_apply", ["finsupp"]], ["mod", "theorem", "ext", ["finsupp"]], ["mod", "theorem", "ext_iff", ["finsupp"]], ["mod", "def", "filter", ["finsupp"]], ["mod", "theorem", "filter_add", ["finsupp"]], ["mod", "theorem", "filter_curry", ["finsupp"]], ["mod", "theorem", "filter_pos_add_filter_neg", ["finsupp"]], ["mod", "theorem", "filter_smul", ["finsupp"]], ["mod", "theorem", "filter_sum", ["finsupp"]], ["mod", "theorem", "filter_zero", ["finsupp"]], ["mod", "theorem", "finite_le_nat", ["finsupp"]], ["mod", "theorem", "finite_lt_nat", ["finsupp"]], ["mod", "theorem", "finite_supp", ["finsupp"]], ["mod", "def", "finsupp_prod_equiv", ["finsupp"]], ["mod", "def", "frange", ["finsupp"]], ["mod", "theorem", "frange_single", ["finsupp"]], ["mod", "theorem", "induction₂", ["finsupp"]], ["mod", "theorem", "le_iff", ["finsupp"]], ["mod", "def", "leval'", ["finsupp"]], ["mod", "def", "leval", ["finsupp"]], ["mod", "theorem", "lhom_ext'", ["finsupp"]], ["mod", "theorem", "lhom_ext", ["finsupp"]], ["mod", "def", "lift_add_hom", ["finsupp"]], ["mod", "theorem", "lift_add_hom_apply", ["finsupp"]], ["mod", "theorem", "lift_add_hom_single_add_hom", ["finsupp"]], ["mod", "theorem", "lift_add_hom_symm_apply", ["finsupp"]], ["mod", "theorem", "lift_add_hom_symm_apply_apply", ["finsupp"]], ["mod", "theorem", "lt_wf", ["finsupp"]], ["mod", "def", "map_domain", ["finsupp"]], ["mod", "theorem", "map_domain_add", ["finsupp"]], ["mod", "theorem", "map_domain_apply", ["finsupp"]], ["mod", "theorem", "map_domain_comap_domain", ["finsupp"]], ["mod", "theorem", "map_domain_comp", ["finsupp"]], ["mod", "theorem", "map_domain_congr", ["finsupp"]], ["mod", "theorem", "map_domain_finset_sum", ["finsupp"]], ["mod", "theorem", "map_domain_injective", ["finsupp"]], ["mod", "theorem", "map_domain_notin_range", ["finsupp"]], ["mod", "theorem", "map_domain_single", ["finsupp"]], ["mod", "theorem", "map_domain_smul", ["finsupp"]], ["mod", "theorem", "map_domain_sum", ["finsupp"]], ["mod", "theorem", "map_domain_support", ["finsupp"]], ["mod", "theorem", "map_domain_zero", ["finsupp"]], ["mod", "def", "add_monoid_hom", ["finsupp", "map_range"]], ["mod", "def", "map_range", ["finsupp"]], ["mod", "theorem", "map_range_add", ["finsupp"]], ["mod", "theorem", "map_range_apply", ["finsupp"]], ["mod", "theorem", "map_range_finset_sum", ["finsupp"]], ["mod", "theorem", "map_range_multiset_sum", ["finsupp"]], ["mod", "theorem", "map_range_single", ["finsupp"]], ["mod", "theorem", "map_range_zero", ["finsupp"]], ["mod", "theorem", "mem_antidiagonal_support", ["finsupp"]], ["mod", "theorem", "mem_frange", ["finsupp"]], ["mod", "theorem", "mem_support_finset_sum", ["finsupp"]], ["mod", "theorem", "mem_support_iff", ["finsupp"]], ["mod", "theorem", "mem_support_multiset_sum", ["finsupp"]], ["mod", "theorem", "mem_support_single", ["finsupp"]], ["mod", "theorem", "mul_sum", ["finsupp"]], ["mod", "theorem", "multiset_map_sum", ["finsupp"]], ["mod", "theorem", "multiset_sum_sum", ["finsupp"]], ["mod", "theorem", "neg_apply", ["finsupp"]], ["mod", "theorem", "not_mem_support_iff", ["finsupp"]], ["mod", "def", "on_finset", ["finsupp"]], ["mod", "theorem", "on_finset_apply", ["finsupp"]], ["mod", "theorem", "on_finset_sum", ["finsupp"]], ["mod", "def", "prod", ["finsupp"]], ["mod", "theorem", "prod_add_index", ["finsupp"]], ["mod", "theorem", "prod_comm", ["finsupp"]], ["mod", "theorem", "prod_emb_domain", ["finsupp"]], ["mod", "theorem", "prod_finset_sum_index", ["finsupp"]], ["mod", "theorem", "prod_fintype", ["finsupp"]], ["add", "theorem", "prod_inv", ["finsupp"]], ["mod", "theorem", "prod_ite_eq'", ["finsupp"]], ["mod", "theorem", "prod_ite_eq", ["finsupp"]], ["mod", "theorem", "prod_map_domain_index", ["finsupp"]], ["mod", "theorem", "prod_map_domain_index_inj", ["finsupp"]], ["mod", "theorem", "prod_map_range_index", ["finsupp"]], ["add", "theorem", "prod_mul", ["finsupp"]], ["mod", "theorem", "prod_neg_index", ["finsupp"]], ["mod", "theorem", "prod_of_support_subset", ["finsupp"]], ["mod", "theorem", "prod_pow", ["finsupp"]], ["mod", "theorem", "prod_single_index", ["finsupp"]], ["mod", "theorem", "prod_subtype_domain_index", ["finsupp"]], ["mod", "theorem", "prod_to_multiset", ["finsupp"]], ["mod", "theorem", "prod_zero_index", ["finsupp"]], ["mod", "def", "restrict_support_equiv", ["finsupp"]], ["mod", "theorem", "sigma_sum", ["finsupp"]], ["mod", "def", "single", ["finsupp"]], ["mod", "theorem", "single_add", ["finsupp"]], ["mod", "theorem", "single_add_erase", ["finsupp"]], ["mod", "def", "single_add_hom", ["finsupp"]], ["mod", "theorem", "single_apply", ["finsupp"]], ["mod", "theorem", "single_eq_of_ne", ["finsupp"]], ["mod", "theorem", "single_eq_same", ["finsupp"]], ["mod", "theorem", "single_eq_single_iff", ["finsupp"]], ["mod", "theorem", "single_finset_sum", ["finsupp"]], ["mod", "theorem", "single_injective", ["finsupp"]], ["mod", "theorem", "single_multiset_sum", ["finsupp"]], ["mod", "theorem", "single_sum", ["finsupp"]], ["mod", "theorem", "single_swap", ["finsupp"]], ["mod", "theorem", "single_zero", ["finsupp"]], ["mod", "theorem", "smul_apply'", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]], ["mod", "theorem", "smul_single'", ["finsupp"]], ["mod", "theorem", "smul_single", ["finsupp"]], ["mod", "theorem", "smul_single_one", ["finsupp"]], ["mod", "def", "split", ["finsupp"]], ["mod", "def", "split_comp", ["finsupp"]], ["mod", "theorem", "sub_apply", ["finsupp"]], ["mod", "def", "subtype_domain", ["finsupp"]], ["mod", "theorem", "subtype_domain_add", ["finsupp"]], ["mod", "theorem", "subtype_domain_apply", ["finsupp"]], ["mod", "theorem", "subtype_domain_eq_zero_iff'", ["finsupp"]], ["mod", "theorem", "subtype_domain_eq_zero_iff", ["finsupp"]], ["mod", "theorem", "subtype_domain_finsupp_sum", ["finsupp"]], ["mod", "theorem", "subtype_domain_neg", ["finsupp"]], ["mod", "theorem", "subtype_domain_sub", ["finsupp"]], ["mod", "theorem", "subtype_domain_sum", ["finsupp"]], ["mod", "theorem", "subtype_domain_zero", ["finsupp"]], ["mod", "def", "sum", ["finsupp"]], ["del", "theorem", "sum_add", ["finsupp"]], ["mod", "theorem", "sum_apply", ["finsupp"]], ["mod", "theorem", "sum_comap_domain", ["finsupp"]], ["mod", "theorem", "sum_curry_index", ["finsupp"]], ["mod", "theorem", "sum_id_lt_of_lt", ["finsupp"]], ["mod", "theorem", "sum_mul", ["finsupp"]], ["del", "theorem", "sum_neg", ["finsupp"]], ["mod", "theorem", "sum_single", ["finsupp"]], ["mod", "theorem", "sum_smul_index'", ["finsupp"]], ["mod", "theorem", "sum_smul_index", ["finsupp"]], ["mod", "theorem", "sum_sub", ["finsupp"]], ["mod", "theorem", "sum_zero", ["finsupp"]], ["mod", "theorem", "support_add", ["finsupp"]], ["mod", "theorem", "support_add_eq", ["finsupp"]], ["mod", "theorem", "support_curry", ["finsupp"]], ["mod", "theorem", "support_emb_domain", ["finsupp"]], ["mod", "theorem", "support_eq_empty", ["finsupp"]], ["mod", "theorem", "support_eq_singleton'", ["finsupp"]], ["mod", "theorem", "support_eq_singleton", ["finsupp"]], ["mod", "theorem", "support_erase", ["finsupp"]], ["mod", "theorem", "support_map_range", ["finsupp"]], ["mod", "theorem", "support_neg", ["finsupp"]], ["mod", "theorem", "support_on_finset_subset", ["finsupp"]], ["mod", "theorem", "support_smul", ["finsupp"]], ["mod", "theorem", "support_subset_iff", ["finsupp"]], ["mod", "theorem", "support_subtype_domain", ["finsupp"]], ["mod", "theorem", "support_sum", ["finsupp"]], ["mod", "theorem", "support_zero", ["finsupp"]], ["mod", "theorem", "support_zip_with", ["finsupp"]], ["mod", "theorem", "swap_mem_antidiagonal_support", ["finsupp"]], ["mod", "theorem", "to_multiset_strict_mono", ["finsupp"]], ["mod", "theorem", "to_multiset_to_finsupp", ["finsupp"]], ["mod", "theorem", "unique_ext", ["finsupp"]], ["mod", "theorem", "unique_ext_iff", ["finsupp"]], ["mod", "theorem", "unique_single", ["finsupp"]], ["mod", "theorem", "unique_single_eq_iff", ["finsupp"]], ["mod", "theorem", "zero_apply", ["finsupp"]], ["mod", "theorem", "zero_not_mem_frange", ["finsupp"]], ["mod", "def", "zip_with", ["finsupp"]], ["mod", "structure", "finsupp", []], ["mod", "theorem", "map_finsupp_prod", ["monoid_hom"]], ["mod", "theorem", "map_finsupp_prod", ["mul_equiv"]], ["mod", "theorem", "map_finsupp_prod", ["ring_hom"]], ["mod", "theorem", "map_finsupp_sum", ["ring_hom"]]]}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}]}, {"timestamp": 1602985609, "sha": "ebd2b7f2", "message": "feat(logic/nontrivial): make `nontriviality` work for more goals (#4574)\nThe goal is to make `nontriviality` work for the following goals:\n* [x] `nontriviality α` if the goal is `is_open s`, `s : set α`;\n* [x] `nontriviality E` if the goal is `is_O f g` or `is_o f g`, where `f : α → E`;\n* [x] `nontriviality R` if the goal is `linear_independent R _`;\n* [ ] `nontriviality R` if the goal is `is_O f g` or `is_o f g`, where `f : α → E`, `[semimodule R E]`;\n in this case `nontriviality` should add a local instance `semimodule.subsingleton R`.\nThe last case was never needed in `mathlib`, and there is a workaround: run `nontriviality E`, then deduce `nontrivial R` from `nontrivial E`.\nMisc feature:\n* [x] make `nontriviality` accept an optional list of additional `simp` lemmas.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "is_unit_of_subsingleton", []]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_O_of_subsingleton", ["asymptotics"]], ["add", "theorem", "is_o_of_subsingleton", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff_at_of_subsingleton", []], ["add", "theorem", "times_cont_diff_of_subsingleton", []], ["add", "theorem", "times_cont_diff_on_of_subsingleton", []], ["add", "theorem", "times_cont_diff_within_at_of_subsingleton", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_of_subsingleton", []]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "monic_of_subsingleton", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "test/nontriviality.lean", "newPath": "test/nontriviality.lean", "changes": [["add", "def", "empty_or_univ", []], ["add", "theorem", "set_empty_or_univ'", ["subsingleton"]], ["add", "theorem", "set_empty_or_univ", ["subsingleton"]]]}]}, {"timestamp": 1602985607, "sha": "b977dbac", "message": "fix(solve_by_elim): handle multiple goals with different hypotheses (#4519)\nPreviously `solve_by_elim*` would operate on multiple goals (only succeeding if it could close all of them, and performing backtracking across goals), however it would incorrectly only use the local context from the main goal. If other goals had different sets of hypotheses, ... various bad things could happen!\nThis PR arranges so that `solve_by_elim*` inspects the local context later, so it picks up the correct hypotheses.", "changes": [{"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1602977077, "sha": "13cd192e", "message": "feat(measure_theory/measure_space): added sub for measure_theory.measure (#4639)\nThis definition is useful for proving the Lebesgue-Radon-Nikodym theorem for non-negative measures.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "le_of_add_le_add_left", ["ennreal"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "le_of_add_le_add_left", ["measure_theory", "measure"]], ["add", "theorem", "le_zero_iff_eq'", ["measure_theory", "measure"]], ["add", "theorem", "sub_add_cancel_of_le", ["measure_theory", "measure"]], ["add", "theorem", "sub_apply", ["measure_theory", "measure"]], ["add", "theorem", "sub_def", ["measure_theory", "measure"]], ["add", "theorem", "sub_eq_zero_of_le", ["measure_theory", "measure"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tsum_sub", ["ennreal"]]]}]}, {"timestamp": 1602977075, "sha": "e83458cb", "message": "feat(algebra/group_power): Add mul/add variants of powers_hom and friends (#4636)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "def", "gmultiples_add_hom", []], ["add", "theorem", "gmultiples_add_hom_apply", []], ["add", "theorem", "gmultiples_add_hom_symm_apply", []], ["add", "def", "gpowers_mul_hom", []], ["add", "theorem", "gpowers_mul_hom_apply", []], ["add", "theorem", "gpowers_mul_hom_symm_apply", []], ["add", "def", "multiples_add_hom", []], ["add", "theorem", "multiples_add_hom_apply", []], ["add", "theorem", "multiples_add_hom_symm_apply", []], ["add", "def", "powers_mul_hom", []], ["add", "theorem", "powers_mul_hom_apply", []], ["add", "theorem", "powers_mul_hom_symm_apply", []]]}]}, {"timestamp": 1602977073, "sha": "c83c28a1", "message": "feat(archive/imo): add IMO 2019 problem 4 (#4482)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2019_q4.lean", "changes": [["add", "theorem", "imo2019_q4", []], ["add", "theorem", "imo2019_q4_upper_bound", []]]}, {"oldPath": "src/algebra/big_operators/default.lean", "newPath": "src/algebra/big_operators/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/big_operators/enat.lean", "changes": [["add", "theorem", "sum_nat_coe_enat", ["finset"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "exists_lt_and_lt_iff_not_dvd", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "exists_lt_and_lt_iff_not_dvd", ["nat"]]]}, {"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": [["add", "theorem", "bit_eq_zero", ["nat"]]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "def", "coe_hom", ["enat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_two_factorial_lt", ["nat"]], ["add", "theorem", "multiplicity_factorial_mul", ["nat", "prime"]], ["add", "theorem", "multiplicity_factorial_mul_succ", ["nat", "prime"]], ["mod", "theorem", "multiplicity_one", ["nat", "prime"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "ne_of_lt_of_lt_int", ["monotone"]], ["add", "theorem", "ne_of_lt_of_lt_nat", ["monotone"]]]}]}, {"timestamp": 1602967845, "sha": "95d33ee9", "message": "refactor(algebra/quadratic_discriminant): drop linearity condition; cleanup (#4656)\nRenames:\n- `discriminant_le_zero` to `discrim_le_zero`\n- `discriminant_lt_zero` to `discrim_lt_zero`", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "exists_le_mul_self", []], ["add", "theorem", "exists_lt_mul_self", []]]}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": [["mod", "def", "discrim", []], ["add", "theorem", "discrim_le_zero", []], ["add", "theorem", "discrim_lt_zero", []], ["del", "theorem", "discriminant_le_zero", []], ["del", "theorem", "discriminant_lt_zero", []], ["del", "theorem", "exist_quadratic_eq_zero", []], ["del", "theorem", "exists_le_mul_self", []], ["del", "theorem", "exists_lt_mul_self", []], ["add", "theorem", "exists_quadratic_eq_zero", []], ["mod", "theorem", "quadratic_eq_zero_iff", []], ["mod", "theorem", "quadratic_eq_zero_iff_discrim_eq_square", []], ["mod", "theorem", "quadratic_eq_zero_iff_of_discrim_eq_zero", []], ["mod", "theorem", "quadratic_ne_zero_of_discrim_ne_square", []]]}]}, {"timestamp": 1602967843, "sha": "03674679", "message": "chore(group/type_tags): Add missing simp lemmas (#4651)", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["mod", "def", "of_mul", ["additive"]], ["add", "theorem", "of_mul_symm_eq", ["additive"]], ["mod", "def", "to_mul", ["additive"]], ["add", "theorem", "to_mul_symm_eq", ["additive"]], ["mod", "def", "of_add", ["multiplicative"]], ["add", "theorem", "of_add_symm_eq", ["multiplicative"]], ["mod", "def", "to_add", ["multiplicative"]], ["add", "theorem", "to_add_symm_eq", ["multiplicative"]]]}]}, {"timestamp": 1602967841, "sha": "0b9afe18", "message": "chore(linear_algebra/affine_space): redefine `line_map`, add `to_affine_subspace` (#4643)\n* now `line_map` takes two points on the line, not a point and a\n direction, update/review lemmas;\n* add `submodule.to_affine_subspace`;\n* add `affine_map.fst` and `affine_map.snd`;\n* prove that an affine map `ℝ → ℝ` sends an unordered interval to an unordered interval.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "maps_to_inter", ["set"]], ["add", "theorem", "maps_to_union", ["set"]]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["del", "theorem", "affine_apply_line_map", ["affine_map"]], ["del", "theorem", "affine_comp_line_map", ["affine_map"]], ["add", "theorem", "apply_line_map", ["affine_map"]], ["add", "theorem", "coe_fst", ["affine_map"]], ["add", "theorem", "coe_line_map", ["affine_map"]], ["add", "theorem", "coe_snd", ["affine_map"]], ["add", "theorem", "comp_line_map", ["affine_map"]], ["add", "def", "fst", ["affine_map"]], ["add", "theorem", "fst_linear", ["affine_map"]], ["add", "theorem", "image_interval", ["affine_map"]], ["mod", "def", "line_map", ["affine_map"]], ["mod", "theorem", "line_map_apply", ["affine_map"]], ["add", "theorem", "line_map_apply_one", ["affine_map"]], ["mod", "theorem", "line_map_apply_zero", ["affine_map"]], ["mod", "theorem", "line_map_linear", ["affine_map"]], ["add", "theorem", "line_map_same", ["affine_map"]], ["add", "theorem", "line_map_symm", ["affine_map"]], ["add", "theorem", "line_map_vadd_apply", ["affine_map"]], ["del", "theorem", "line_map_vadd_neg", ["affine_map"]], ["del", "theorem", "line_map_zero", ["affine_map"]], ["add", "def", "snd", ["affine_map"]], ["add", "theorem", "snd_linear", ["affine_map"]], ["add", "def", "to_affine_subspace", ["submodule"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "reflect_lt", ["monotone"]], ["del", "theorem", "reflect_lt", []]]}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}]}, {"timestamp": 1602959165, "sha": "589ebf59", "message": "chore(algebra/*): add a few `prod.*` instances (#4659)\n* `prod.left_cancel_semigroup`;\n* `prod_right_cancel_semigroup`;\n* `prod.ordered_cancel_comm_monoid`;\n* `ordered_comm_group`.", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1602959162, "sha": "6e5b6cc0", "message": "feat(algebra/gcd_monoid, polynomial/field_division): generalizing `normalization_monoid` on polynomials (#4655)\nDefines a `normalization_monoid` instance on any `comm_group_with_zero`, including fields\nDefines a `normalization_monoid` instance on `polynomial R` when `R` has a `normalization_monoid` instance", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "theorem", "coe_norm_unit", ["comm_group_with_zero"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "coe_norm_unit", ["polynomial"]], ["add", "theorem", "coe_norm_unit_of_ne_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_normalize", ["polynomial"]], ["add", "theorem", "normalize_monic", ["polynomial"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}]}, {"timestamp": 1602959160, "sha": "edddb3b2", "message": "feat(finsupp/basic): Add a variant of `prod_map_domain_index` for when f is injective (#4645)\nThis puts much weaker restrictions on `h`, making this easier to apply in some situations", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "prod_emb_domain", ["finsupp"]], ["add", "theorem", "prod_map_domain_index_inj", ["finsupp"]]]}]}, {"timestamp": 1602959158, "sha": "85eb12df", "message": "feat(algebra/algebra/basic): product of two algebras (#4632)", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_prod_apply", ["algebra"]]]}]}, {"timestamp": 1602959157, "sha": "82ff1e56", "message": "feat(algebra/algebra/subalgebra): subalgebra.subsingleton (#4631)", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "subsingleton_of_top_le_bot", []]]}]}, {"timestamp": 1602959155, "sha": "688157f8", "message": "feat(ring_theory/polynomial/content): definition of content + proof that it is multiplicative (#4393)\nDefines `polynomial.content` to be the `gcd` of the coefficients of a polynomial\nSays a polynomial `is_primitive` if its content is 1\nProves that `(p * q).content = p.content * q.content", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "add_lt_add_iff_left", ["with_bot"]], ["add", "theorem", "add_lt_add_iff_right", ["with_bot"]]]}, {"oldPath": "src/data/polynomial/erase_lead.lean", "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "theorem", "erase_lead_nat_degree_lt_or_erase_lead_eq_zero", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/content.lean", "changes": [["add", "theorem", "C_content_dvd", ["polynomial"]], ["add", "def", "content", ["polynomial"]], ["add", "theorem", "content_C", ["polynomial"]], ["add", "theorem", "content_C_mul", ["polynomial"]], ["add", "theorem", "content_X", ["polynomial"]], ["add", "theorem", "content_X_mul", ["polynomial"]], ["add", "theorem", "content_X_pow", ["polynomial"]], ["add", "theorem", "content_dvd_coeff", ["polynomial"]], ["add", "theorem", "content_eq_gcd_leading_coeff_content_erase_lead", ["polynomial"]], ["add", "theorem", "content_eq_gcd_range_of_lt", ["polynomial"]], ["add", "theorem", "content_eq_gcd_range_succ", ["polynomial"]], ["add", "theorem", "content_eq_zero_iff", ["polynomial"]], ["add", "theorem", "content_monomial", ["polynomial"]], ["add", "theorem", "content_mul", ["polynomial"]], ["add", "theorem", "content_mul_aux", ["polynomial"]], ["add", "theorem", "content_one", ["polynomial"]], ["add", "theorem", "content_zero", ["polynomial"]], ["add", "theorem", "dvd_content_iff_C_dvd", ["polynomial"]], ["add", "theorem", "eq_C_mul_primitive", ["polynomial"]], ["add", "theorem", "gcd_content_eq_of_dvd_sub", ["polynomial"]], ["add", "theorem", "content_eq_one", ["polynomial", "is_primitive"]], ["add", "theorem", "ne_zero", ["polynomial", "is_primitive"]], ["add", "def", "is_primitive", ["polynomial"]], ["add", "theorem", "is_primitive_iff_is_unit_of_C_dvd", ["polynomial"]], ["add", "theorem", "is_primitive_one", ["polynomial"]], ["add", "theorem", "normalize_content", ["polynomial"]]]}]}, {"timestamp": 1602950881, "sha": "b145c36f", "message": "feat(archive/imo): variant solution to IMO 1962 problem 4 (#4640)\nContinuation of a discussion at #4518", "changes": [{"oldPath": "archive/imo/imo1962_q4.lean", "newPath": "archive/imo/imo1962_q4.lean", "changes": [["add", "theorem", "formula", []], ["add", "theorem", "imo1962_q4'", []], ["add", "theorem", "solve_cos2x_0", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "pow_eq_zero_iff", []]]}]}, {"timestamp": 1602942086, "sha": "25d83437", "message": "feat(topology/sheaves): an equivalent sheaf condition (#4538)\nAnother condition equivalent to the sheaf condition: for every open cover `U`, `F.obj (supr U)` is the limit point of the diagram consisting of all the `F.obj V`, where `V ≤ U i` for some `i`.\nThis condition is particularly straightforward to state, and makes some proofs easier (however we don't do this here: just prove the equivalence with the \"official\" definition). It's particularly nice because there is no case splitting (depending on whether you're looking at single or double intersections) when checking the sheaf condition.\nThis is the statement Lurie uses in Spectral Algebraic Geometry.\nLater I may propose that we make this the official definition, but I'll wait to see how it pans out in actual use, first. For now it's just provided as yet another equivalent version of the sheaf condition.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/sheaves/sheaf_condition/opens_le_cover.lean", "changes": [["add", "def", "hom_to_index", ["Top", "presheaf", "sheaf_condition", "opens_le_cover"]], ["add", "def", "index", ["Top", "presheaf", "sheaf_condition", "opens_le_cover"]], ["add", "def", "opens_le_cover", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "opens_le_cover_cocone", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "pairwise_cocone_iso", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "pairwise_diagram_iso", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "pairwise_to_opens_le_cover", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "pairwise_to_opens_le_cover_map", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "pairwise_to_opens_le_cover_obj", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "sheaf_condition_equiv_sheaf_condition_opens_le_cover", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_opens_le_cover", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_opens_le_cover_equiv_sheaf_condition_pairwise_intersections", ["Top", "presheaf"]]]}]}, {"timestamp": 1602897080, "sha": "ca2e6f42", "message": "chore(scripts): update nolints.txt (#4654)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1602884626, "sha": "7b9acd9e", "message": "chore(measure_theory/*): reflow long lines (#4642)\nAlso do some minor golfing.", "changes": [{"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_add_measure'", ["measure_theory"]], ["mod", "theorem", "coe_add", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_neg", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_neg_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_pos_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_sub", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_zero", ["measure_theory", "l1", "simple_func"]]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "supr_approx_apply", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}]}, {"timestamp": 1602877292, "sha": "189e5386", "message": "feat(geometry/manifold): stab at diffeomorphisms (#4351)", "changes": [{"oldPath": null, "newPath": "src/geometry/manifold/diffeomorph.lean", "changes": [["add", "def", "diffeomorph", []], ["add", "theorem", "coe_eq_to_equiv", ["times_diffeomorph"]], ["add", "structure", "times_diffeomorph", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}]}, {"timestamp": 1602871288, "sha": "86b298f2", "message": "feat(category_theory/sites): grothendieck topologies (#4577)", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/grothendieck.lean", "changes": [["add", "theorem", "arrow_intersect", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "arrow_max", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "arrow_stable", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "arrow_trans", ["category_theory", "grothendieck_topology"]], ["add", "def", "atomic", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "bot_covering", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "bot_covers", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "covering_iff_covers_id", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "covering_of_eq_top", ["category_theory", "grothendieck_topology"]], ["add", "def", "covers", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "covers_iff", ["category_theory", "grothendieck_topology"]], ["add", "def", "dense", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "dense_covering", ["category_theory", "grothendieck_topology"]], ["add", "def", "discrete", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "discrete_eq_top", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "intersection_covering", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "intersection_covering_iff", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "is_glb_Inf", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "mem_sieves_iff_coe", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "pullback_stable", ["category_theory", "grothendieck_topology"]], ["add", "def", "right_ore_condition", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "right_ore_of_pullbacks", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "superset_covering", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "top_covering", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "top_covers", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "top_mem", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "transitive", ["category_theory", "grothendieck_topology"]], ["add", "def", "trivial", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "trivial_covering", ["category_theory", "grothendieck_topology"]], ["add", "theorem", "trivial_eq_bot", ["category_theory", "grothendieck_topology"]], ["add", "structure", "grothendieck_topology", ["category_theory"]]]}, {"oldPath": "src/category_theory/sites/sieves.lean", "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "theorem", "pullback_eq_top_of_mem", ["category_theory", "sieve"]], ["add", "theorem", "pullback_id", ["category_theory", "sieve"]]]}]}, {"timestamp": 1602865709, "sha": "0d9227f8", "message": "feat(category_theory/monad/kleisli): add Kleisli category of a monad (#4542)\nAdds the Kleisli category of a monad, and shows the Kleisli category for a lawful control monad is equivalent to the Kleisli category of its category-theoretic version.\nFollowing discussion at https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/kleisli.20vs.20kleisli.\nI'd appreciate suggestions for names more sensible than the ones already there.", "changes": [{"oldPath": null, "newPath": "src/category_theory/monad/kleisli.lean", "changes": [["add", "def", "adj", ["category_theory", "kleisli", "adjunction"]], ["add", "def", "from_kleisli", ["category_theory", "kleisli", "adjunction"]], ["add", "def", "to_kleisli", ["category_theory", "kleisli", "adjunction"]], ["add", "def", "to_kleisli_comp_from_kleisli_iso_self", ["category_theory", "kleisli", "adjunction"]], ["add", "def", "kleisli", ["category_theory"]]]}, {"oldPath": "src/category_theory/monad/types.lean", "newPath": "src/category_theory/monad/types.lean", "changes": [["add", "def", "eq", ["category_theory"]]]}]}, {"timestamp": 1602834222, "sha": "f675a006", "message": "chore(set_theory/zfc): split long lines (#4641)\nAlso add `Set.subset_def` and rewrite `Set.mem_pair_sep` in tactic mode", "changes": [{"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["mod", "theorem", "sep_hom", ["Class"]], ["mod", "theorem", "mk", ["Set", "image"]], ["mod", "theorem", "map_fval", ["Set"]], ["mod", "theorem", "map_is_func", ["Set"]], ["mod", "theorem", "map_unique", ["Set"]], ["mod", "theorem", "mem_image", ["Set"]], ["mod", "theorem", "mem_map", ["Set"]], ["mod", "theorem", "mem_pair_sep", ["Set"]], ["add", "theorem", "subset_def", ["Set"]], ["mod", "theorem", "eq", ["pSet", "definable"]], ["mod", "def", "eval_aux", ["pSet", "resp"]]]}]}, {"timestamp": 1602826457, "sha": "1cce6064", "message": "feat(analysis/special_functions/trigonometric): some lemmas (#4638)\nThe following changes:\n- `sin_sub_sin` and friends (sum-to-product lemmas) moved from `trigonometric` to the earlier file `exponential`. (I think the distinction between the files is that `trigonometric` collects the facts that require either differentiation or the definition `pi`, whereas purely algebraic facts about trigonometry go in `exponential`? For example the double-angle formula is in `exponential`).\n- rewrite proof of `cos_lt_cos_of_nonneg_of_le_pi_div_two` to avoid dependence on `cos_eq_one_iff_of_lt_of_lt` (but not sure if the result is actually simpler, feel free to propose this be reverted)\n- some new explicit values of trig functions, `cos (π / 3)` and similar\n- correct a series of lemmas in the `complex` namespace that were stated for real arguments (presumably the author copy-pasted but forgot to rewrite)\n- lemmas `sin_eq_zero_iff`, `cos_eq_cos_iff`, `sin_eq_sin_iff`", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "cos_add_pi", ["complex"]], ["mod", "theorem", "cos_add_pi_div_two", ["complex"]], ["mod", "theorem", "cos_add_two_pi", ["complex"]], ["add", "theorem", "cos_eq_cos_iff", ["complex"]], ["mod", "theorem", "cos_pi_div_two_sub", ["complex"]], ["mod", "theorem", "cos_pi_sub", ["complex"]], ["mod", "theorem", "cos_sub_pi_div_two", ["complex"]], ["mod", "theorem", "sin_add_pi", ["complex"]], ["mod", "theorem", "sin_add_pi_div_two", ["complex"]], ["mod", "theorem", "sin_add_two_pi", ["complex"]], ["add", "theorem", "sin_eq_sin_iff", ["complex"]], ["add", "theorem", "sin_eq_zero_iff", ["complex"]], ["add", "theorem", "sin_ne_zero_iff", ["complex"]], ["mod", "theorem", "sin_pi_div_two_sub", ["complex"]], ["mod", "theorem", "sin_pi_sub", ["complex"]], ["mod", "theorem", "sin_sub_pi_div_two", ["complex"]], ["add", "theorem", "cos_eq_cos_iff", ["real"]], ["add", "theorem", "cos_pi_div_six", ["real"]], ["add", "theorem", "cos_pi_div_three", ["real"]], ["del", "theorem", "cos_sub_cos", ["real"]], ["add", "theorem", "sin_eq_sin_iff", ["real"]], ["add", "theorem", "sin_pi_div_six", ["real"]], ["add", "theorem", "sin_pi_div_three", ["real"]], ["del", "theorem", "sin_sub_sin", ["real"]], ["add", "theorem", "square_cos_pi_div_six", ["real"]], ["add", "theorem", "square_sin_pi_div_three", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_add_cos", ["complex"]], ["add", "theorem", "cos_sub_cos", ["complex"]], ["add", "theorem", "sin_sub_sin", ["complex"]], ["add", "theorem", "cos_add_cos", ["real"]], ["add", "theorem", "cos_sub_cos", ["real"]], ["add", "theorem", "sin_sub_sin", ["real"]]]}]}, {"timestamp": 1602826455, "sha": "e7b8421e", "message": "chore(linear_algebra/finsupp): turn `finsupp.lsum` into `add_equiv` (#4597)", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["del", "theorem", "hom_ext", ["finsupp"]], ["add", "theorem", "lhom_ext'", ["finsupp"]], ["add", "theorem", "lhom_ext", ["finsupp"]], ["add", "theorem", "lift_add_hom_symm_apply_apply", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/direct_sum/finsupp.lean", "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": [["mod", "def", "finsupp_lequiv_direct_sum", []]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "def", "lsum", ["finsupp"]], ["add", "theorem", "lsum_symm_apply", ["finsupp"]]]}]}, {"timestamp": 1602818742, "sha": "8280190f", "message": "chore(scripts): update nolints.txt (#4637)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1602818739, "sha": "cc14658a", "message": "chore(algebra/group_powers): Add missing lemmas (#4635)\nThis part of the file defines four equivalences, but goes on to state lemmas about only one of them.\nThis provides the lemmas for the other three.", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "apply_int", ["add_monoid_hom"]], ["add", "theorem", "apply_nat", ["add_monoid_hom"]], ["add", "theorem", "gmultiples_hom_apply", []], ["add", "theorem", "gmultiples_hom_symm_apply", []], ["add", "theorem", "gpowers_hom_apply", []], ["add", "theorem", "gpowers_hom_symm_apply", []], ["del", "theorem", "mnat_monoid_hom_eq", []], ["del", "theorem", "mnat_monoid_hom_ext", []], ["add", "theorem", "apply_mint", ["monoid_hom"]], ["add", "theorem", "apply_mnat", ["monoid_hom"]], ["add", "theorem", "ext_mint", ["monoid_hom"]], ["add", "theorem", "ext_mnat", ["monoid_hom"]], ["add", "theorem", "multiples_hom_apply", []], ["add", "theorem", "multiples_hom_symm_apply", []]]}]}, {"timestamp": 1602809773, "sha": "dca1393e", "message": "feat(data/equiv/basic): add `equiv.set.compl` (#4630)\nGiven an equivalence between two sets `e₀ : s ≃ t`, the set of\n`e : α ≃ β` that agree with `e₀` on `s` is equivalent to `sᶜ ≃ tᶜ`.\nAlso add a bunch of lemmas to `data/set/function`; some of them are\nused in the definition of `equiv.set.compl`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "sum_compl_symm_apply", ["equiv", "set"]], ["add", "theorem", "sum_compl_symm_apply_compl", ["equiv", "set"]], ["add", "theorem", "union_symm_apply_left", ["equiv", "set"]], ["add", "theorem", "union_symm_apply_right", ["equiv", "set"]], ["add", "def", "set_prod_equiv_sigma", ["equiv"]], ["add", "theorem", "subtype_congr_apply", ["equiv"]], ["add", "theorem", "subtype_congr_symm_apply", ["equiv"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["del", "theorem", "inj_on", ["function", "injective"]], ["add", "theorem", "compl", ["set", "bij_on"]], ["add", "theorem", "inj_on_of_injective", ["set"]], ["add", "theorem", "mono", ["set", "inv_on"]], ["add", "theorem", "maps_to", ["set", "left_inv_on"]], ["add", "theorem", "mono", ["set", "left_inv_on"]], ["mod", "theorem", "surj_on", ["set", "left_inv_on"]], ["add", "theorem", "mem_iff", ["set", "maps_to"]], ["add", "theorem", "surj_on_compl", ["set", "maps_to"]], ["add", "theorem", "maps_to_iff_exists_map_subtype", ["set"]], ["mod", "theorem", "maps_to_range", ["set"]], ["add", "theorem", "maps_to", ["set", "right_inv_on"]], ["add", "theorem", "mono", ["set", "right_inv_on"]], ["add", "theorem", "maps_to_compl", ["set", "surj_on"]], ["add", "theorem", "surj_on_iff_exists_map_subtype", ["set"]], ["add", "theorem", "surjective_maps_to_image_restrict", ["set"]]]}]}, {"timestamp": 1602809771, "sha": "b0b61e6f", "message": "feat(order/category/omega-complete): omega-complete partial orders form a complete category (#4397)\nas discussed in #4348.", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["del", "theorem", "of_π_app_one", ["category_theory", "limits", "cofork"]], ["del", "theorem", "of_π_app_zero", ["category_theory", "limits", "cofork"]], ["del", "theorem", "of_ι_app_one", ["category_theory", "limits", "fork"]], ["del", "theorem", "of_ι_app_zero", ["category_theory", "limits", "fork"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["mod", "def", "mk", ["category_theory", "limits", "cofan"]], ["del", "theorem", "mk_π_app", ["category_theory", "limits", "cofan"]], ["mod", "def", "mk", ["category_theory", "limits", "fan"]], ["del", "theorem", "mk_π_app", ["category_theory", "limits", "fan"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/order/category/omega_complete_partial_order.lean", "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": [["add", "def", "equalizer", ["ωCPO", "has_equalizers"]], ["add", "def", "equalizer_ι", ["ωCPO", "has_equalizers"]], ["add", "def", "is_equalizer", ["ωCPO", "has_equalizers"]], ["add", "def", "is_product", ["ωCPO", "has_products"]], ["add", "def", "product", ["ωCPO", "has_products"]], ["mod", "def", "ωCPO", []]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["add", "theorem", "congr_arg", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "congr_fun", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "subtype", ["omega_complete_partial_order"]]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": [["add", "def", "val", ["preorder_hom", "subtype"]]]}]}, {"timestamp": 1602805699, "sha": "3e12a7b9", "message": "chore(category_theory/limits/binary_products): fixup binary product lemmas (#4376)\nThe main changes in here are:\n- `prod.map` is now a def, not an abbreviation. I think this is an important change because oftentimes `simp` will reduce it to `lim.map` and then get stuck, which is tough to debug and usually the wrong step to take. Instead, the `prod.map_fst` and `snd` lemmas are proved directly rather than with simp, and these are used to get everything else.\n- I added a couple of new simp lemmas and rewrote a few others: the overall guide here is that more things can be proved by `rw` or `simp` *without using ext*. The idea of this is that when you're dealing with a chain of compositions containing product morphisms, it's much nicer to be able to rewrite (or simp) the parts you want rather than needing to do an auxiliary `have` and use `ext` in there, then rewrite using this lemma inside your big chain. In this file at least I managed to get rid of a bunch of uses of `ext` (and also convert `tidy` to `simp`) so I'm pretty sure these changes were positive.\n- Moved around some definitions and lemmas. No big changes here, mostly just putting things which work similarly closer.\n- Weakened typeclass assumptions: in particular for `prod_comparison`.\n- Renamed some `prod_` lemmas to `prod.`, since there used to be a mix between the two; so I've made the usage consistent.\n+ dual versions of all the above.", "changes": [{"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": [["add", "theorem", "diag_σ", ["category_theory", "non_preadditive_abelian"]], ["mod", "def", "is_colimit_σ", ["category_theory", "non_preadditive_abelian"]], ["mod", "def", "r", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "Δ", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "Δ_map", ["category_theory", "non_preadditive_abelian"]], ["del", "theorem", "Δ_σ", ["category_theory", "non_preadditive_abelian"]], ["mod", "def", "σ", ["category_theory", "non_preadditive_abelian"]]]}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["mod", "def", "coev", ["category_theory"]], ["add", "theorem", "coev_naturality", ["category_theory"]], ["mod", "def", "ev", ["category_theory"]], ["add", "theorem", "ev_naturality", ["category_theory"]], ["mod", "def", "adjunction", ["category_theory", "exp"]]]}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": [["mod", "def", "forget_cone", ["category_theory", "prod_preserves_connected_limits"]], ["mod", "def", "γ₁", ["category_theory", "prod_preserves_connected_limits"]], ["mod", "def", "γ₂", ["category_theory", "prod_preserves_connected_limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "desc_comp", ["category_theory", "limits", "coprod"]], ["del", "theorem", "desc_comp_comp", ["category_theory", "limits", "coprod"]], ["add", "theorem", "desc_comp_inl_comp_inr", ["category_theory", "limits", "coprod"]], ["add", "theorem", "desc_inl_inr", ["category_theory", "limits", "coprod"]], ["add", "theorem", "diag_comp", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "inl_map", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "inr_map", ["category_theory", "limits", "coprod"]], ["mod", "def", "map", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "map_codiag", ["category_theory", "limits", "coprod"]], ["del", "theorem", "map_comp_codiag", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_comp_id", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "map_comp_inl_inr_codiag", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "map_desc", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_id_comp", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_id_id", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "map_inl_inr_codiag", ["category_theory", "limits", "coprod"]], ["mod", "def", "map_iso", ["category_theory", "limits", "coprod"]], ["del", "theorem", "map_iso_hom", ["category_theory", "limits", "coprod"]], ["del", "theorem", "map_iso_inv", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_map", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_swap", ["category_theory", "limits", "coprod"]], ["del", "theorem", "coprod_desc_inl_inr", ["category_theory", "limits"]], ["del", "theorem", "coprod_map_comp_id", ["category_theory", "limits"]], ["del", "theorem", "coprod_map_id_comp", ["category_theory", "limits"]], ["del", "theorem", "coprod_map_id_id", ["category_theory", "limits"]], ["del", "theorem", "coprod_map_map", ["category_theory", "limits"]], ["mod", "theorem", "inv_prod_comparison_map_fst", ["category_theory", "limits"]], ["mod", "theorem", "inv_prod_comparison_map_snd", ["category_theory", "limits"]], ["add", "theorem", "comp_diag", ["category_theory", "limits", "prod"]], ["add", "theorem", "comp_lift", ["category_theory", "limits", "prod"]], ["mod", "theorem", "diag_map", ["category_theory", "limits", "prod"]], ["del", "theorem", "diag_map_comp", ["category_theory", "limits", "prod"]], ["mod", "theorem", "diag_map_fst_snd", ["category_theory", "limits", "prod"]], ["add", "def", "functor", ["category_theory", "limits", "prod"]], ["del", "theorem", "lift_comp_comp", ["category_theory", "limits", "prod"]], ["add", "theorem", "lift_fst_comp_snd_comp", ["category_theory", "limits", "prod"]], ["add", "theorem", "lift_fst_snd", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_map", ["category_theory", "limits", "prod"]], ["mod", "def", "map", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_comp_id", ["category_theory", "limits", "prod"]], ["mod", "theorem", "map_fst", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_id_comp", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_id_id", ["category_theory", "limits", "prod"]], ["mod", "def", "map_iso", ["category_theory", "limits", "prod"]], ["del", "theorem", "map_iso_hom", ["category_theory", "limits", "prod"]], ["del", "theorem", "map_iso_inv", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_map", ["category_theory", "limits", "prod"]], ["mod", "theorem", "map_snd", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_swap", ["category_theory", "limits", "prod"]], ["mod", "def", "prod_comparison", ["category_theory", "limits"]], ["mod", "theorem", "prod_comparison_inv_natural", ["category_theory", "limits"]], ["mod", "theorem", "prod_comparison_natural", ["category_theory", "limits"]], ["del", "def", "prod_functor", ["category_theory", "limits"]], ["del", "theorem", "prod_lift_fst_snd", ["category_theory", "limits"]], ["del", "theorem", "prod_map_comp_id", ["category_theory", "limits"]], ["del", "theorem", "prod_map_id_comp", ["category_theory", "limits"]], ["del", "theorem", "prod_map_id_id", ["category_theory", "limits"]], ["del", "theorem", "prod_map_map", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["add", "def", "functor_left_comp", ["category_theory", "limits", "prod"]], ["add", "theorem", "left_unitor_hom_naturality", ["category_theory", "limits", "prod"]], ["add", "theorem", "left_unitor_inv_naturality", ["category_theory", "limits", "prod"]], ["add", "theorem", "right_unitor_hom_naturality", ["category_theory", "limits", "prod"]], ["del", "def", "prod_functor_left_comp", ["category_theory", "limits"]], ["del", "theorem", "prod_left_unitor_hom_naturality", ["category_theory", "limits"]], ["del", "theorem", "prod_left_unitor_inv_naturality", ["category_theory", "limits"]], ["del", "theorem", "prod_right_unitor_hom_naturality", ["category_theory", "limits"]]]}]}, {"timestamp": 1602801098, "sha": "b7d176e5", "message": "feat(category_theory/cones): some isomorphisms relating operations (#4536)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "map_cocone_precompose", ["category_theory", "functor"]], ["add", "def", "map_cocone_precompose_equivalence_functor", ["category_theory", "functor"]], ["add", "def", "map_cocone_whisker", ["category_theory", "functor"]], ["add", "def", "map_cone_postcompose", ["category_theory", "functor"]], ["add", "def", "map_cone_postcompose_equivalence_functor", ["category_theory", "functor"]], ["add", "def", "map_cone_whisker", ["category_theory", "functor"]]]}]}, {"timestamp": 1602794064, "sha": "8985e395", "message": "feat(archive/100-theorems-list/70_perfect_numbers): Perfect Number Theorem, Direction 2 (#4621)\nAdds a few extra lemmas about `divisors`, `proper_divisors` and sums of proper divisors\nProves Euler's direction of the Perfect Number theorem, finishing Freek 70", "changes": [{"oldPath": "archive/100-theorems-list/70_perfect_numbers.lean", "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": [["add", "theorem", "eq_pow_two_mul_odd", ["nat"]], ["add", "theorem", "eq_two_pow_mul_prime_mersenne_of_even_perfect", ["nat"]], ["add", "theorem", "even_and_perfect_iff", ["nat"]]]}, {"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "divisors_one", ["nat"]], ["del", "theorem", "divisors_prime", ["nat"]], ["add", "theorem", "eq_proper_divisors_of_subset_of_sum_eq_sum", ["nat"]], ["mod", "theorem", "fst_mem_divisors_of_mem_antidiagonal", ["nat"]], ["mod", "theorem", "map_swap_divisors_antidiagonal", ["nat"]], ["add", "theorem", "one_mem_proper_divisors_iff_one_lt", ["nat"]], ["mod", "theorem", "perfect_iff_sum_divisors_eq_two_mul", ["nat"]], ["mod", "theorem", "perfect_iff_sum_proper_divisors", ["nat"]], ["add", "theorem", "pos_of_mem_divisors", ["nat"]], ["add", "theorem", "pos_of_mem_proper_divisors", ["nat"]], ["add", "theorem", "divisors", ["nat", "prime"]], ["add", "theorem", "proper_divisors", ["nat", "prime"]], ["add", "theorem", "sum_divisors", ["nat", "prime"]], ["add", "theorem", "sum_proper_divisors", ["nat", "prime"]], ["add", "theorem", "proper_divisors_eq_singleton_one_iff_prime", ["nat"]], ["add", "theorem", "proper_divisors_one", ["nat"]], ["add", "theorem", "proper_divisors_subset_divisors", ["nat"]], ["mod", "theorem", "snd_mem_divisors_of_mem_antidiagonal", ["nat"]], ["del", "theorem", "sum_divisors_prime", ["nat"]], ["add", "theorem", "sum_proper_divisors_dvd", ["nat"]], ["add", "theorem", "sum_proper_divisors_eq_one_iff_prime", ["nat"]], ["mod", "theorem", "swap_mem_divisors_antidiagonal", ["nat"]]]}]}, {"timestamp": 1602779351, "sha": "d4735176", "message": "chore(algebra/group/hom): add `monoid_hom.eval` (#4629)", "changes": [{"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["add", "theorem", "finset_prod_apply", ["monoid_hom"]], ["mod", "theorem", "list_prod_apply", ["pi"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "def", "eval", ["monoid_hom"]], ["add", "theorem", "eval_apply", ["monoid_hom"]]]}]}, {"timestamp": 1602779349, "sha": "38a5f5d6", "message": "chore(data/equiv/mul_add): add `monoid_hom.to_mul_equiv` (#4628)", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "to_add_equiv", ["add_monoid_hom"]], ["add", "theorem", "coe_to_mul_equiv", ["monoid_hom"]], ["add", "def", "to_mul_equiv", ["monoid_hom"]], ["add", "theorem", "coe_to_monoid_hom", ["mul_equiv"]]]}]}, {"timestamp": 1602779347, "sha": "46b0528b", "message": "refactor(data/polynomial): Move some lemmas to `monoid_algebra` (#4627)\nThe `add_monoid_algebra.mul_apply_antidiagonal` lemma is copied verbatim from `monoid_algebra.mul_apply_antidiagonal`.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["add", "theorem", "mul_apply_antidiagonal", ["add_monoid_algebra"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["mod", "def", "coeff", ["polynomial"]], ["del", "theorem", "coeff_single", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}]}, {"timestamp": 1602779345, "sha": "abaf3c29", "message": "feat(algebra/category/Algebra/basic): Add free/forget adjunction. (#4620)\nThis PR adds the usual free/forget adjunction for the category of `R`-algebras.", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["add", "def", "adj", ["Algebra"]], ["add", "def", "free", ["Algebra"]]]}]}, {"timestamp": 1602779343, "sha": "07ee11e7", "message": "feat(algebra/algebra/basic): Add `map_finsupp_(sum|prod)` to `alg_(hom|equiv)` (#4603)\nAlso copies some lemmas from `alg_hom` to `alg_equiv` that were missing", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "map_div", ["alg_equiv"]], ["add", "theorem", "map_finsupp_prod", ["alg_equiv"]], ["add", "theorem", "map_finsupp_sum", ["alg_equiv"]], ["add", "theorem", "map_inv", ["alg_equiv"]], ["mod", "theorem", "map_neg", ["alg_equiv"]], ["add", "theorem", "map_prod", ["alg_equiv"]], ["mod", "theorem", "map_sub", ["alg_equiv"]], ["add", "theorem", "map_finsupp_prod", ["alg_hom"]], ["add", "theorem", "map_finsupp_sum", ["alg_hom"]]]}]}, {"timestamp": 1602779340, "sha": "bb1f5492", "message": "feat(algebra/gcd_monoid): in a gcd_domain a coprime factor of a power is a power (#4589)\nThe main result is:\n```\ntheorem associated_pow_of_mul_eq_pow {a b c : α} (ha : a ≠ 0) (hb : b ≠ 0)\n (hab : gcd a b = 1) {k : ℕ} (h : a * b = c ^ k) :\n ∃ (d : α), associated (d ^ k) a\n```", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "theorem", "dvd_gcd_mul_of_dvd_mul", []], ["add", "theorem", "dvd_mul_gcd_of_dvd_mul", []], ["add", "theorem", "exists_associated_pow_of_mul_eq_pow", []], ["add", "theorem", "gcd_pow_left_dvd_pow_gcd", []], ["add", "theorem", "gcd_pow_right_dvd_pow_gcd", []], ["add", "theorem", "pow_dvd_of_mul_eq_pow", []]]}]}, {"timestamp": 1602779338, "sha": "b01ca810", "message": "feat(data/matrix/notation): simp lemmas for constant-indexed elements (#4491)\nIf you use the `![]` vector notation to define a vector, then `simp`\ncan extract elements `0` and `1` from that vector, but not element `2`\nor subsequent elements. (This shows up in particular in geometry if\ndefining a triangle with a concrete vector of vertices and then\nsubsequently doing things that need to extract a particular vertex.)\nAdd `bit0` and `bit1` `simp` lemmas to allow any element indexed by a\nnumeral to be extracted (even when the numeral is larger than the\nlength of the list, such numerals in `fin n` being interpreted mod\n`n`).\nThis ends up quite long; `bit0` and `bit1` semantics mean extracting\nalternate elements of the vector in a way that can wrap around to the\nstart of the vector when the numeral is `n` or larger, so the lemmas\nneed to deal with constructing such a vector of alternate elements.\nAs I've implemented it, some definitions also need an extra hypothesis\nas an argument to control definitional equalities for the vector\nlengths, to avoid problems with non-defeq types when stating\nsubsequent lemmas. However, even the example added to\n`test/matrix.lean` of extracting element `123456789` of a 5-element\nvector is processed quite quickly, so this seems efficient enough.\nNote also that there are two `@[simp]` lemmas whose proofs are just\n`by simp`, but that are in fact needed for `simp` to complete\nextracting some elements and that the `simp` linter does not (at least\nwhen used with `#lint` for this single file) complain about. I'm not\nsure what's going on there, since I didn't think a lemma that `simp`\ncan prove should normally need to be marked as `@[simp]`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "append", ["fin"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "cons_append", ["matrix"]], ["add", "theorem", "cons_vec_alt0", ["matrix"]], ["add", "theorem", "cons_vec_alt1", ["matrix"]], ["add", "theorem", "cons_vec_bit0_eq_alt0", ["matrix"]], ["add", "theorem", "cons_vec_bit1_eq_alt1", ["matrix"]], ["add", "theorem", "empty_append", ["matrix"]], ["add", "theorem", "empty_vec_alt0", ["matrix"]], ["add", "theorem", "empty_vec_alt1", ["matrix"]], ["add", "def", "vec_alt0", ["matrix"]], ["add", "theorem", "vec_alt0_append", ["matrix"]], ["add", "def", "vec_alt1", ["matrix"]], ["add", "theorem", "vec_alt1_append", ["matrix"]]]}, {"oldPath": "test/matrix.lean", "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1602774062, "sha": "85d4b574", "message": "feat(data/polynomial/eval): bit0_comp, bit1_comp (#4617)", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "bit0_comp", ["polynomial"]], ["add", "theorem", "bit1_comp", ["polynomial"]]]}]}, {"timestamp": 1602770658, "sha": "1444fa52", "message": "fix(haar_measure): minor changes (#4623)\nThere were some mistakes in the doc, which made it sound like `chaar` and `haar_outer_measure` coincide on compact sets, which is not generally true. \nAlso cleanup various proofs.", "changes": [{"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": [["add", "theorem", "of_content_le", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": [["del", "theorem", "chaar_le_haar_outer_measure", ["measure_theory", "measure"]], ["add", "theorem", "echaar_le_haar_outer_measure", ["measure_theory", "measure"]], ["add", "theorem", "echaar_self", ["measure_theory", "measure", "haar"]], ["mod", "theorem", "is_left_invariant_chaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "is_left_invariant_echaar", ["measure_theory", "measure", "haar"]], ["mod", "theorem", "is_left_invariant_index", ["measure_theory", "measure", "haar"]], ["del", "theorem", "haar_outer_measure_le_chaar", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_le_echaar", ["measure_theory", "measure"]]]}]}, {"timestamp": 1602751878, "sha": "7559d1c8", "message": "lint(data/num/*): add docs and remove some [has_zero] requirements (#4604)", "changes": [{"oldPath": "src/data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": [["mod", "def", "cast_num", []], ["del", "def", "sqrt_aux1", ["pos_num"]], ["del", "def", "sqrt_aux", ["pos_num"]]]}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["mod", "theorem", "cast_bit0", ["pos_num"]], ["mod", "theorem", "cast_bit1", ["pos_num"]], ["mod", "theorem", "cast_one'", ["pos_num"]], ["mod", "theorem", "cast_one", ["pos_num"]]]}]}, {"timestamp": 1602747022, "sha": "fa652828", "message": "chore(category_theory/monoidal): fix typo in docstrings (#4625)", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["mod", "theorem", "left_unitor_conjugation", ["category_theory", "monoidal_category"]], ["mod", "theorem", "right_unitor_conjugation", ["category_theory", "monoidal_category"]], ["mod", "def", "tensor_iso", ["category_theory"]]]}]}, {"timestamp": 1602724313, "sha": "2e1129eb", "message": "chore(scripts): update nolints.txt (#4622)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1602700779, "sha": "084b7e7d", "message": "chore(algebra/order,data/set/intervals): a few more trivial lemmas (#4611)\n* a few more lemmas for `has_le.le` and `has_lt.lt` namespaces;\n* a few lemmas about intersections of intervals;\n* fix section header in `topology/algebra/module`.", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "le_or_le", ["has_le", "le"]], ["mod", "theorem", "le_or_lt", ["has_le", "le"]], ["mod", "theorem", "lt_or_le", ["has_le", "le"]], ["add", "theorem", "lt_or_lt", ["has_lt", "lt"]], ["add", "theorem", "ne'", ["has_lt", "lt"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ioc_inter_Ioo_of_left_lt", ["set"]], ["add", "theorem", "Ioc_inter_Ioo_of_right_le", ["set"]], ["add", "theorem", "Ioo_inter_Ioc_of_left_le", ["set"]], ["add", "theorem", "Ioo_inter_Ioc_of_right_lt", ["set"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1602700777, "sha": "d11eb847", "message": "fix(tactic/suggest): properly remove \"Try this: exact \" prefix from library_search hole command (#4609)\n[See Zulip](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/mechanisms.20to.20search.20through.20mathlilb/near/213223321)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1602696661, "sha": "40844f01", "message": "doc(category_theory/comma): Fix markdown rendering in docs (#4618)", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}]}, {"timestamp": 1602686792, "sha": "de463493", "message": "feat(data/set/intervals): more lemmas about `unordered_interval` (#4607)\nAdd images/preimages of unordered intervals under common arithmetic operations.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "image_const", ["set", "nonempty"]]]}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "image_add_const_interval", ["set"]], ["add", "theorem", "image_const_add_interval", ["set"]], ["add", "theorem", "image_const_mul_interval", ["set"]], ["add", "theorem", "image_const_sub_interval", ["set"]], ["add", "theorem", "image_div_const_interval", ["set"]], ["add", "theorem", "image_mul_const_interval", ["set"]], ["add", "theorem", "image_neg_interval", ["set"]], ["add", "theorem", "image_sub_const_interval", ["set"]], ["add", "theorem", "preimage_add_const_interval", ["set"]], ["add", "theorem", "preimage_const_add_interval", ["set"]], ["add", "theorem", "preimage_const_mul_interval", ["set"]], ["add", "theorem", "preimage_const_sub_interval", ["set"]], ["add", "theorem", "preimage_div_const_interval", ["set"]], ["add", "theorem", "preimage_mul_const_interval", ["set"]], ["add", "theorem", "preimage_neg_interval", ["set"]], ["add", "theorem", "preimage_sub_const_interval", ["set"]]]}]}, {"timestamp": 1602686790, "sha": "442ef226", "message": "feat(linear_algebra/clifford_algebra): Add a definition derived from exterior_algebra.lean (#4430)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/clifford_algebra.lean", "changes": [["add", "def", "as_exterior", ["clifford_algebra"]], ["add", "theorem", "comp_ι_square_scalar", ["clifford_algebra"]], ["add", "theorem", "hom_ext", ["clifford_algebra"]], ["add", "def", "lift", ["clifford_algebra"]], ["add", "theorem", "lift_comp_ι", ["clifford_algebra"]], ["add", "theorem", "lift_unique", ["clifford_algebra"]], ["add", "theorem", "lift_ι_apply", ["clifford_algebra"]], ["add", "inductive", "rel", ["clifford_algebra"]], ["add", "def", "ι", ["clifford_algebra"]], ["add", "theorem", "ι_comp_lift", ["clifford_algebra"]], ["add", "theorem", "ι_square_scalar", ["clifford_algebra"]], ["add", "def", "clifford_algebra", []]]}, {"oldPath": "src/linear_algebra/exterior_algebra.lean", "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": []}]}, {"timestamp": 1602689800, "sha": "1a1655c0", "message": "doc(docs/100): link to actual triangle inequality (#4614)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1602668728, "sha": "f7edbca4", "message": "feat(algebra/char_zero): char_zero.infinite (#4593)", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["mod", "theorem", "two_ne_zero'", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "nonempty", ["infinite"]]]}]}, {"timestamp": 1602668726, "sha": "6f5ccc1e", "message": "chore(linear_algebra/linear_independent): review API (#4567)\n### API changes\n#### New definitions and lemmas\n* `subalgebra.to_submodule_equiv`: a linear equivalence between a subalgebra and its coercion\n to a submodule;\n* `algebra.to_submodule_bot`: coercion of `⊥ : subalgebra R A` to `submodule R A` is\n `submodule.span {1}`;\n* `submodule.disjoint_def'`: one more expansion of `disjoint` for submodules;\n* `submodule.is_compl_range_inl_inr`: ranges of `inl` and `inr` are complement submodules;\n* `finsupp.supported_inter`, `finsupp.disjojint_supported_supported`,\n `finsupp.disjoint_supported_supported_iff` : more lemmas about `finsupp.supported`;\n* `finsupp.total_unique`: formula for `finsupp.total` on a `unique` type;\n* `linear_independent_iff_injective_total`, `linear_independent.injective_total` :\n relate `linear_independent R v` to `injective (finsupp.total ι M R v)`;\n* `fintype.linear_independent_iff`: a simplified test for\n `linear_independent R v` if the domain of `v` is a `fintype`;\n* `linear_independent.map'`: an injective linear map sends linearly\n independent families of vectors to linearly independent families of\n vectors;\n* `linear_map.linear_independent_iff`: if `f` is an injective linear\n map, then `f ∘ v` is linearly independent iff `v` is linearly\n independent;\n* `linear_independent.disjoint_span_image`: if `v` is a linearly\n independent family of vectors, then the submodules spanned by\n disjoint subfamilies of `v` are disjoint;\n* `linear_independent_sum`: a test for linear independence of a\n disjoint union of two families of vectors;\n* `linear_independent.sum_type`: `iff.mpr` from `linear_independent_sum`;\n* `linear_independent_unique_iff`, `linear_independent_unique`: a test\n for linear independence of a single-vector family;\n* `linear_independent_option'`, `linear_independent_option`, `linear_independent.option`:\n test for linear independence of a family indexed by `option ι`;\n* `linear_independent_pair`: test for independence of `{v₁, v₂}`;\n* `linear_independent_fin_cons`, `linear_independent.fin_cons`,\n `linear_independent_fin_succ`, `linear_independent_fin2`: tests for\n linear independence of families indexed by `i : fin n`.\n#### Rename\n* `_root_.disjoint_span_singleton` → `submodule.disjoint_span_singleton'`;\n* `linear_independent.image` → `linear_independent.map`\n* `linear_independent_of_comp` → `linear_independent.of_comp`;\n#### Changes in type signature\n* `is_basis.to_dual`, `is_basis.to_dual_flip`, `is_basis.to_dual_equiv`: take `B` as an explicit\n argument to improve readability of the pretty-printed output;", "changes": [{"oldPath": "src/algebra/algebra/subalgebra.lean", "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "theorem", "to_submodule_bot", ["algebra"]], ["add", "def", "to_submodule_equiv", ["subalgebra"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "option_equiv_sum_punit_coe", ["equiv"]], ["mod", "theorem", "option_equiv_sum_punit_none", ["equiv"]], ["add", "theorem", "insert_apply_left", ["equiv", "set"]], ["add", "theorem", "insert_apply_right", ["equiv", "set"]], ["add", "theorem", "insert_symm_apply_inl", ["equiv", "set"]], ["add", "theorem", "insert_symm_apply_inr", ["equiv", "set"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "is_compl_range_inl_inr", ["linear_map"]], ["mod", "theorem", "sup_range_inl_inr", ["linear_map"]], ["add", "theorem", "disjoint_def'", ["submodule"]], ["add", "theorem", "disjoint_span_singleton'", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "def", "dual_basis", ["is_basis"]], ["mod", "theorem", "to_dual_apply_left", ["is_basis"]], ["mod", "theorem", "to_dual_apply_right", ["is_basis"]], ["mod", "theorem", "to_dual_eq_equiv_fun", ["is_basis"]], ["mod", "theorem", "to_dual_eq_repr", ["is_basis"]], ["mod", "def", "to_dual_flip", ["is_basis"]], ["mod", "theorem", "to_dual_inj", ["is_basis"]], ["mod", "theorem", "to_dual_ker", ["is_basis"]], ["mod", "theorem", "to_dual_range", ["is_basis"]], ["mod", "theorem", "to_dual_swap_eq_to_dual", ["is_basis"]], ["mod", "theorem", "eval_apply", ["module", "dual"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "disjoint_supported_supported", ["finsupp"]], ["add", "theorem", "disjoint_supported_supported_iff", ["finsupp"]], ["add", "theorem", "supported_inter", ["finsupp"]], ["add", "theorem", "total_unique", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["del", "theorem", "disjoint_span_singleton", []], ["add", "theorem", "linear_independent_iff", ["fintype"]], ["add", "theorem", "disjoint_span_image", ["linear_independent"]], ["add", "theorem", "fin_cons", ["linear_independent"]], ["del", "theorem", "image'", ["linear_independent"]], ["mod", "theorem", "image", ["linear_independent"]], ["add", "theorem", "map'", ["linear_independent"]], ["add", "theorem", "map", ["linear_independent"]], ["add", "theorem", "of_comp", ["linear_independent"]], ["del", "theorem", "of_subtype_range", ["linear_independent"]], ["add", "theorem", "option", ["linear_independent"]], ["add", "theorem", "sum_type", ["linear_independent"]], ["add", "theorem", "to_subtype_range'", ["linear_independent"]], ["mod", "theorem", "to_subtype_range", ["linear_independent"]], ["del", "theorem", "unique", ["linear_independent"]], ["add", "theorem", "linear_independent_fin2", []], ["add", "theorem", "linear_independent_fin_cons", []], ["add", "theorem", "linear_independent_fin_succ", []], ["add", "theorem", "linear_independent_iff_injective_total", []], ["del", "theorem", "linear_independent_of_comp", []], ["add", "theorem", "linear_independent_option'", []], ["add", "theorem", "linear_independent_option", []], ["add", "theorem", "linear_independent_pair", []], ["add", "theorem", "linear_independent_subtype_range", []], ["add", "theorem", "linear_independent_sum", []], ["del", "theorem", "linear_independent_unique", []], ["add", "theorem", "linear_independent_unique_iff", []]]}]}, {"timestamp": 1602663845, "sha": "85117294", "message": "refactor(data/int/gcd,ring_theory/int/basic): collect integer divisibility results from various files (#4572)\nApplying comments from PR #4384. In particular:\n1) Move the gcd and lcm results from gcd_monoid to `data/int/gcd.lean` with new proofs (for a few lcm results) that do not need ring theory.\n2) Try to collect applications of ring theory to ℕ and ℤ into a new file `ring_theory/int/basic.lean`.", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["del", "def", "associates_int_equiv_nat", []], ["del", "theorem", "coe_gcd", ["int"]], ["del", "theorem", "coe_lcm", ["int"]], ["del", "theorem", "coe_nat_abs_eq_normalize", ["int"]], ["del", "theorem", "dvd_gcd", ["int"]], ["del", "theorem", "dvd_lcm_left", ["int"]], ["del", "theorem", "dvd_lcm_right", ["int"]], ["del", "theorem", "exists_gcd_one'", ["int"]], ["del", "theorem", "exists_gcd_one", ["int"]], ["del", "theorem", "gcd_assoc", ["int"]], ["del", "theorem", "gcd_comm", ["int"]], ["del", "theorem", "gcd_div", ["int"]], ["del", "theorem", "gcd_div_gcd_div_gcd", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_left", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_left_right", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_right", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_right_right", ["int"]], ["del", "theorem", "gcd_dvd_gcd_of_dvd_left", ["int"]], ["del", "theorem", "gcd_dvd_gcd_of_dvd_right", ["int"]], ["del", "theorem", "gcd_dvd_left", ["int"]], ["del", "theorem", "gcd_dvd_right", ["int"]], ["del", "theorem", "gcd_eq_left", ["int"]], ["del", "theorem", "gcd_eq_right", ["int"]], ["del", "theorem", "gcd_eq_zero_iff", ["int"]], ["del", "theorem", "gcd_mul_lcm", ["int"]], ["del", "theorem", "gcd_mul_left", ["int"]], ["del", "theorem", "gcd_mul_right", ["int"]], ["del", "theorem", "gcd_one_left", ["int"]], ["del", "theorem", "gcd_one_right", ["int"]], ["del", "theorem", "gcd_pos_of_non_zero_left", ["int"]], ["del", "theorem", "gcd_pos_of_non_zero_right", ["int"]], ["del", "theorem", "gcd_self", ["int"]], ["del", "theorem", "gcd_zero_left", ["int"]], ["del", "theorem", "gcd_zero_right", ["int"]], ["del", "def", "lcm", ["int"]], ["del", "theorem", "lcm_assoc", ["int"]], ["del", "theorem", "lcm_comm", ["int"]], ["del", "theorem", "lcm_def", ["int"]], ["del", "theorem", "lcm_dvd", ["int"]], ["del", "theorem", "lcm_one_left", ["int"]], ["del", "theorem", "lcm_one_right", ["int"]], ["del", "theorem", "lcm_self", ["int"]], ["del", "theorem", "lcm_zero_left", ["int"]], ["del", "theorem", "lcm_zero_right", ["int"]], ["del", "theorem", "nat_abs_gcd", ["int"]], ["del", "theorem", "nat_abs_lcm", ["int"]], ["del", "theorem", "ne_zero_of_gcd", ["int"]], ["del", "theorem", "normalize_coe_nat", ["int"]], ["del", "theorem", "normalize_of_neg", ["int"]], ["del", "theorem", "normalize_of_nonneg", ["int"]], ["del", "theorem", "pow_dvd_pow_iff", ["int"]], ["del", "theorem", "dvd_mul'", ["int", "prime"]], ["del", "theorem", "dvd_mul", ["int", "prime"]], ["del", "theorem", "irreducible_iff_nat_prime", []], ["del", "theorem", "prime_iff_prime", ["nat"]], ["del", "theorem", "prime_iff_prime_int", ["nat"]], ["del", "theorem", "prime_two_or_dvd_of_dvd_two_mul_pow_self_two", []]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "dvd_gcd", ["int"]], ["add", "theorem", "dvd_lcm_left", ["int"]], ["add", "theorem", "dvd_lcm_right", ["int"]], ["add", "theorem", "exists_gcd_one'", ["int"]], ["add", "theorem", "exists_gcd_one", ["int"]], ["add", "theorem", "gcd_assoc", ["int"]], ["add", "theorem", "gcd_comm", ["int"]], ["add", "theorem", "gcd_div", ["int"]], ["add", "theorem", "gcd_div_gcd_div_gcd", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_left", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_left_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_right_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_left", ["int"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_right", ["int"]], ["add", "theorem", "gcd_dvd_left", ["int"]], ["add", "theorem", "gcd_dvd_right", ["int"]], ["add", "theorem", "gcd_eq_left", ["int"]], ["add", "theorem", "gcd_eq_right", ["int"]], ["add", "theorem", "gcd_eq_zero_iff", ["int"]], ["add", "theorem", "gcd_mul_lcm", ["int"]], ["add", "theorem", "gcd_mul_left", ["int"]], ["add", "theorem", "gcd_mul_right", ["int"]], ["add", "theorem", "gcd_one_left", ["int"]], ["add", "theorem", "gcd_one_right", ["int"]], ["add", "theorem", "gcd_pos_of_non_zero_left", ["int"]], ["add", "theorem", "gcd_pos_of_non_zero_right", ["int"]], ["add", "theorem", "gcd_self", ["int"]], ["add", "theorem", "gcd_zero_left", ["int"]], ["add", "theorem", "gcd_zero_right", ["int"]], ["add", "def", "lcm", ["int"]], ["add", "theorem", "lcm_assoc", ["int"]], ["add", "theorem", "lcm_comm", ["int"]], ["add", "theorem", "lcm_def", ["int"]], ["add", "theorem", "lcm_dvd", ["int"]], ["add", "theorem", "lcm_one_left", ["int"]], ["add", "theorem", "lcm_one_right", ["int"]], ["add", "theorem", "lcm_self", ["int"]], ["add", "theorem", "lcm_zero_left", ["int"]], ["add", "theorem", "lcm_zero_right", ["int"]], ["add", "theorem", "ne_zero_of_gcd", ["int"]], ["add", "theorem", "pow_dvd_pow_iff", ["int"]]]}, {"oldPath": "src/data/nat/associated.lean", "newPath": null, "changes": [["del", "theorem", "irreducible_iff_prime", ["nat"]], ["del", "theorem", "prime_iff", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/unique_factorization.lean", "newPath": null, "changes": [["del", "theorem", "factors_eq", ["nat"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/int/basic.lean", "changes": [["add", "def", "associates_int_equiv_nat", []], ["add", "theorem", "coe_gcd", ["int"]], ["add", "theorem", "coe_lcm", ["int"]], ["add", "theorem", "coe_nat_abs_eq_normalize", ["int"]], ["add", "theorem", "nat_abs_gcd", ["int"]], ["add", "theorem", "nat_abs_lcm", ["int"]], ["add", "theorem", "normalize_coe_nat", ["int"]], ["add", "theorem", "normalize_of_neg", ["int"]], ["add", "theorem", "normalize_of_nonneg", ["int"]], ["add", "theorem", "dvd_mul'", ["int", "prime"]], ["add", "theorem", "dvd_mul", ["int", "prime"]], ["add", "theorem", "irreducible_iff_nat_prime", []], ["add", "theorem", "finite_int_iff", ["multiplicity"]], ["add", "theorem", "finite_int_iff_nat_abs_finite", ["multiplicity"]], ["add", "theorem", "factors_eq", ["nat"]], ["add", "theorem", "irreducible_iff_prime", ["nat"]], ["add", "theorem", "prime_iff", ["nat"]], ["add", "theorem", "prime_iff_prime", ["nat"]], ["add", "theorem", "prime_iff_prime_int", ["nat"]], ["add", "theorem", "prime_two_or_dvd_of_dvd_two_mul_pow_self_two", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["del", "theorem", "finite_int_iff", ["multiplicity"]], ["del", "theorem", "finite_int_iff_nat_abs_finite", ["multiplicity"]]]}]}, {"timestamp": 1602663843, "sha": "20006f10", "message": "feat(data/polynomial/field_division, field_theory/splitting_field): Splits if enough roots (#4557)\nI have added some lemmas about polynomials that split. In particular the fact that if `p` has as many roots as its degree than it can be written as a product of `(X - a)` and so it splits.\nThe proof of this for monic polynomial, in `eq_prod_of_card_roots_monic`, is rather messy and can probably be improved a lot.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "prod_multiset_X_sub_C_dvd", ["polynomial"]], ["add", "theorem", "prod_multiset_root_eq_finset_root", ["polynomial"]], ["add", "theorem", "roots_C_mul", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "theorem", "C_eq_zero", ["polynomial"]], ["mod", "theorem", "C_inj", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "C_leading_coeff_mul_prod_multiset_X_sub_C", ["polynomial"]], ["add", "theorem", "prod_multiset_X_sub_C_of_monic_of_roots_card_eq", ["polynomial"]], ["add", "theorem", "splits_iff_card_roots", ["polynomial"]]]}]}, {"timestamp": 1602637597, "sha": "1c12bd95", "message": "chore(scripts): update nolints.txt (#4610)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1602633073, "sha": "e2dd1c67", "message": "feat(analysis/normed_space): unconditionally convergent series in `R^n` is absolutely convergent (#4551)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "has_sum_of_bounded_monoid_hom_of_has_sum", []], ["del", "theorem", "has_sum_of_bounded_monoid_hom_of_summable", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "summable_norm_iff", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "has_sum_of_summable", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_eq_zero_or_self", ["set"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "of_neg", ["summable"]], ["add", "theorem", "summable_abs_iff", []], ["add", "theorem", "summable_neg_iff", []], ["add", "theorem", "summable_subtype_and_compl", []]]}]}, {"timestamp": 1602626393, "sha": "2543b688", "message": "refactor(*): migrate to `dense` API (#4447)\n@PatrickMassot introduced `dense` in #4399. In this PR I review the API and migrate many definitions and lemmas\nto use `dense s` instead of `closure s = univ`. I also generalize `second_countable_of_separable` to a `uniform_space`\nwith a countably generated uniformity filter.\n## API changes\n### Use `dense` or `dense_range` instead of `closure _ = univ`\n#### Lemmas\n- `has_fderiv_within_at.unique_diff_within_at`;\n- `exists_dense_seq`;\n- `dense_Inter_of_open_nat`;\n- `dense_sInter_of_open`;\n- `dense_bInter_of_open`;\n- `dense_Inter_of_open`;\n- `dense_sInter_of_Gδ`;\n- `dense_bInter_of_Gδ`;\n- `eventually_residual`;\n- `mem_residual`;\n- `dense_bUnion_interior_of_closed`;\n- `dense_sUnion_interior_of_closed`;\n- `dense_Union_interior_of_closed`;\n- `Kuratowski_embeddinng.embedding_of_subset_isometry`;\n- `continuous_extend_from`;\n#### Definitions\n- `unique_diff_within_at`;\n- `residual`;\n### Rename\n- `submodule.linear_eq_on` → `linear_map.eq_on_span`, `linear_map.eq_on_span'`;\n- `submodule.linear_map.ext_on` → `linear_map.ext_on_range`;\n- `filter.is_countably_generated.has_antimono_basis` →\n `filter.is_countably_generated.exists_antimono_basis`;\n- `exists_countable_closure_eq_univ` → `exists_countable_dense`, use `dense`;\n- `dense_seq_dense` → `dense_range_dense_seq`, use `dense`;\n- `dense_range.separable_space` is now `protected`;\n- `dense_of_subset_dense` → `dense.mono`;\n- `dense_inter_of_open_left` → `dense.inter_of_open_left`;\n- `dense_inter_of_open_right` → `dense.inter_of_open_right`;\n- `continuous.dense_image_of_dense_range` → `dense_range.dense_image`;\n- `dense_range.inhabited`, `dense_range.nonempty`: changed API, TODO;\n- `quotient_dense_of_dense` → `dense.quotient`, use `dense`;\n- `dense_inducing.separable` → `dense_inducing.separable_space`, add `protected`;\n- `dense_embedding.separable` → `dense_embedding.separable_space`, add `protected`;\n- `dense_inter_of_Gδ` → `dense.inter_of_Gδ`;\n- `stone_cech_unit_dense` → `dense_range_stone_cech_unit`;\n- `abstract_completion.dense'` → `abstract_completion.closure_range`;\n- `Cauchy.pure_cauchy_dense` → `Cauchy.dense_range_pure_cauchy`;\n- `completion.dense` → `completion.dense_range_coe`;\n- `completion.dense₂` → `completion.dense_range_coe₂`;\n- `completion.dense₃` → `completion.dense_range_coe₃`;\n### New\n- `has_fderiv_within_at.unique_on` : if `f'` and `f₁'` are two derivatives of `f`\n within `s` at `x`, then they are equal on the tangent cone to `s` at `x`;\n- `local_homeomorph.mdifferentiable.mfderiv_bijective`,\n `local_homeomorph.mdifferentiable.mfderiv_surjective`\n- `continuous_linear_map.eq_on_closure_span`: if two continuous linear maps are equal on `s`,\n then they are equal on `closure (submodule.span s)`;\n- `continuous_linear_map.ext_on`: if two continuous linear maps are equal on a set `s` such that\n `submodule.span s` is dense, then they are equal;\n- `dense_closure`: `closure s` is dense iff `s` is dense;\n- `dense.of_closure`, `dense.closure`: aliases for `dense_closure.mp` and `dense_closure.mpr`;\n- `dense_univ`: `univ` is dense;\n- `dense.inter_open_nonempty`: alias for `dense_iff_inter_open.mp`;\n- `dense.nonempty_iff`: if `s : set α` is a dense set, then `s` is nonempty iff `α` is nonempty;\n- `dense.nonempty`: a dense set in a nonempty type is nonempty;\n- `dense_range.some`: given a function with `dense_range` and a point in the codomain, returns a point in the domain;\n- `function.surjective.dense_range`: a surjective function has dense range;\n- `continuous.range_subset_closure_image_dense`: closure of the image of a dense set under\n a continuous function includes the range of this function;\n- `dense_range.dense_of_maps_to`: if a function with dense range maps a dense set `s` to `t`, then\n `t` is dense in the codomain;\n- `dense_range.quotient`;\n- `dense.prod`: product of two dense sets is dense in the product;\n- `set.eq_on.closure`;\n- `continuous.ext_on`;\n- `linear_map.ext_on`", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "unique_on", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "theorem", "mfderiv_bijective", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "mfderiv_surjective", ["local_homeomorph", "mdifferentiable"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "eq_on_span'", ["linear_map"]], ["add", "theorem", "eq_on_span", ["linear_map"]], ["add", "theorem", "ext_on", ["linear_map"]], ["add", "theorem", "ext_on_range", ["linear_map"]], ["del", "theorem", "linear_eq_on", ["submodule"]], ["del", "theorem", "ext_on", ["submodule", "linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "eq_on_closure_span", ["continuous_linear_map"]], ["add", "theorem", "ext_on", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["del", "theorem", "separable_space", ["dense_range"]], ["add", "theorem", "dense_range_dense_seq", ["topological_space"]], ["del", "theorem", "dense_seq_dense", ["topological_space"]], ["del", "theorem", "exists_countable_closure_eq_univ", ["topological_space"]], ["mod", "theorem", "exists_dense_seq", ["topological_space"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "dense_image_of_dense_range", ["continuous"]], ["add", "theorem", "range_subset_closure_image_dense", ["continuous"]], ["add", "theorem", "inter_of_open_left", ["dense"]], ["add", "theorem", "inter_of_open_right", ["dense"]], ["add", "theorem", "mono", ["dense"]], ["add", "theorem", "nonempty", ["dense"]], ["add", "theorem", "nonempty_iff", ["dense"]], ["add", "theorem", "dense_closure", []], ["del", "theorem", "dense_inter_of_open_left", []], ["del", "theorem", "dense_inter_of_open_right", []], ["del", "theorem", "dense_of_subset_dense", []], ["mod", "theorem", "comp", ["dense_range"]], ["add", "theorem", "dense_image", ["dense_range"]], ["add", "theorem", "dense_of_maps_to", ["dense_range"]], ["del", "def", "inhabited", ["dense_range"]], ["mod", "theorem", "nonempty", ["dense_range"]], ["add", "theorem", "nonempty_iff", ["dense_range"]], ["add", "def", "some", ["dense_range"]], ["add", "theorem", "dense_univ", []], ["add", "theorem", "dense_range", ["function", "surjective"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod", ["dense"]], ["add", "theorem", "quotient", ["dense"]], ["del", "theorem", "prod", ["dense_range"]], ["add", "theorem", "prod_map", ["dense_range"]], ["add", "theorem", "quotient", ["dense_range"]], ["del", "theorem", "quotient_dense_of_dense", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["del", "theorem", "separable", ["dense_embedding"]], ["del", "theorem", "separable", ["dense_inducing"]]]}, {"oldPath": "src/topology/extend_from_subset.lean", "newPath": "src/topology/extend_from_subset.lean", "changes": [["mod", "theorem", "continuous_extend_from", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["add", "theorem", "inter_of_Gδ", ["dense"]], ["del", "theorem", "dense_inter_of_Gδ", []], ["mod", "theorem", "mem_residual", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["mod", "theorem", "embedding_of_subset_isometry", ["Kuratowski_embedding"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "ext_on", ["continuous"]], ["add", "theorem", "closure", ["set", "eq_on"]]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": [["add", "theorem", "dense_range_pure", []], ["add", "theorem", "dense_range_stone_cech_unit", []], ["add", "theorem", "induced_topology_pure", []], ["del", "theorem", "stone_cech_unit_dense", []]]}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": [["add", "theorem", "closure_range", ["abstract_completion"]], ["del", "theorem", "dense'", ["abstract_completion"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["add", "theorem", "dense_range_pure_cauchy", ["Cauchy"]], ["del", "theorem", "pure_cauchy_dense", ["Cauchy"]], ["del", "theorem", "dense", ["uniform_space", "completion"]], ["add", "theorem", "dense_range_coe", ["uniform_space", "completion"]], ["add", "theorem", "dense_range_coe₂", ["uniform_space", "completion"]], ["add", "theorem", "dense_range_coe₃", ["uniform_space", "completion"]], ["del", "theorem", "dense₂", ["uniform_space", "completion"]], ["del", "theorem", "dense₃", ["uniform_space", "completion"]]]}]}, {"timestamp": 1602618514, "sha": "fde3d78c", "message": "chore(multiset): dedicated notation for multiset.cons (#4600)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "cons_val", ["finset"]], ["mod", "theorem", "insert_val'", ["finset"]], ["mod", "theorem", "insert_val_of_not_mem", ["finset"]], ["mod", "theorem", "mk_cons", ["finset"]], ["mod", "theorem", "singleton_val", ["finset"]]]}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/antidiagonal.lean", "newPath": "src/data/multiset/antidiagonal.lean", "changes": [["mod", "theorem", "antidiagonal_cons", ["multiset"]], ["mod", "theorem", "antidiagonal_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "add_cons", ["multiset"]], ["mod", "theorem", "card_cons", ["multiset"]], ["mod", "theorem", "card_eq_one", ["multiset"]], ["mod", "theorem", "card_singleton", ["multiset"]], ["mod", "theorem", "cons_add", ["multiset"]], ["mod", "theorem", "cons_bind", ["multiset"]], ["mod", "theorem", "cons_erase", ["multiset"]], ["mod", "theorem", "cons_inj_right", ["multiset"]], ["mod", "theorem", "cons_inter_distrib", ["multiset"]], ["mod", "theorem", "cons_le_cons", ["multiset"]], ["mod", "theorem", "cons_le_cons_iff", ["multiset"]], ["mod", "theorem", "cons_ne_zero", ["multiset"]], ["mod", "theorem", "cons_subset", ["multiset"]], ["mod", "theorem", "cons_swap", ["multiset"]], ["mod", "theorem", "cons_union_distrib", ["multiset"]], ["mod", "theorem", "count_cons_of_ne", ["multiset"]], ["mod", "theorem", "count_cons_self", ["multiset"]], ["mod", "theorem", "count_le_count_cons", ["multiset"]], ["mod", "theorem", "count_singleton", ["multiset"]], ["mod", "theorem", "countp_cons_of_neg", ["multiset"]], ["mod", "theorem", "countp_cons_of_pos", ["multiset"]], ["mod", "theorem", "disjoint_singleton", ["multiset"]], ["mod", "theorem", "erase_cons_head", ["multiset"]], ["mod", "theorem", "erase_cons_tail", ["multiset"]], ["mod", "theorem", "erase_le_iff_le_cons", ["multiset"]], ["mod", "theorem", "exists_cons_of_mem", ["multiset"]], ["mod", "theorem", "filter_cons_of_neg", ["multiset"]], ["mod", "theorem", "filter_cons_of_pos", ["multiset"]], ["mod", "theorem", "foldl_cons", ["multiset"]], ["mod", "theorem", "foldr_cons", ["multiset"]], ["mod", "theorem", "join_cons", ["multiset"]], ["mod", "theorem", "le_cons_erase", ["multiset"]], ["mod", "theorem", "le_cons_of_not_mem", ["multiset"]], ["mod", "theorem", "le_cons_self", ["multiset"]], ["mod", "theorem", "lt_cons_self", ["multiset"]], ["mod", "theorem", "lt_iff_cons_le", ["multiset"]], ["mod", "theorem", "map_cons", ["multiset"]], ["mod", "theorem", "mem_cons", ["multiset"]], ["mod", "theorem", "mem_cons_of_mem", ["multiset"]], ["mod", "theorem", "mem_cons_self", ["multiset"]], ["mod", "theorem", "mem_singleton", ["multiset"]], ["mod", "theorem", "mem_singleton_self", ["multiset"]], ["mod", "theorem", "prod_cons", ["multiset"]], ["mod", "theorem", "prod_singleton", ["multiset"]], ["mod", "theorem", "product_singleton", ["multiset"]], ["mod", "theorem", "repeat_one", ["multiset"]], ["mod", "theorem", "repeat_subset_singleton", ["multiset"]], ["mod", "theorem", "repeat_succ", ["multiset"]], ["mod", "theorem", "singleton_add", ["multiset"]], ["mod", "theorem", "singleton_coe", ["multiset"]], ["mod", "theorem", "singleton_disjoint", ["multiset"]], ["mod", "theorem", "singleton_eq_singleton", ["multiset"]], ["mod", "theorem", "singleton_inj", ["multiset"]], ["mod", "theorem", "singleton_le", ["multiset"]], ["mod", "theorem", "singleton_ne_zero", ["multiset"]], ["mod", "theorem", "sub_cons", ["multiset"]], ["mod", "theorem", "zero_ne_cons", ["multiset"]]]}, {"oldPath": "src/data/multiset/erase_dup.lean", "newPath": "src/data/multiset/erase_dup.lean", "changes": [["mod", "theorem", "erase_dup_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/finset_ops.lean", "newPath": "src/data/multiset/finset_ops.lean", "changes": [["mod", "theorem", "ndinsert_of_not_mem", ["multiset"]], ["mod", "theorem", "ndinsert_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/fold.lean", "newPath": "src/data/multiset/fold.lean", "changes": [["mod", "theorem", "fold_cons'_left", ["multiset"]], ["mod", "theorem", "fold_cons'_right", ["multiset"]], ["mod", "theorem", "fold_cons_right", ["multiset"]], ["mod", "theorem", "fold_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/functor.lean", "newPath": "src/data/multiset/functor.lean", "changes": [["mod", "theorem", "pure_def", ["multiset"]]]}, {"oldPath": "src/data/multiset/gcd.lean", "newPath": "src/data/multiset/gcd.lean", "changes": [["mod", "theorem", "gcd_singleton", ["multiset"]], ["mod", "theorem", "lcm_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/intervals.lean", "newPath": "src/data/multiset/intervals.lean", "changes": [["mod", "theorem", "eq_cons", ["multiset", "Ico"]], ["mod", "theorem", "succ_top", ["multiset", "Ico"]]]}, {"oldPath": "src/data/multiset/lattice.lean", "newPath": "src/data/multiset/lattice.lean", "changes": [["mod", "theorem", "inf_singleton", ["multiset"]], ["mod", "theorem", "sup_singleton", ["multiset"]]]}, {"oldPath": "src/data/multiset/nat_antidiagonal.lean", "newPath": "src/data/multiset/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["mod", "theorem", "nodup_cons", ["multiset"]], ["mod", "theorem", "nodup_cons_of_nodup", ["multiset"]], ["mod", "theorem", "nodup_iff_le", ["multiset"]], ["mod", "theorem", "nodup_iff_ne_cons_cons", ["multiset"]], ["mod", "theorem", "nodup_of_nodup_cons", ["multiset"]], ["mod", "theorem", "nodup_singleton", ["multiset"]], ["mod", "theorem", "not_mem_of_nodup_cons", ["multiset"]], ["mod", "theorem", "not_nodup_pair", ["multiset"]]]}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": [["mod", "def", "cons", ["multiset", "pi"]], ["mod", "theorem", "cons_same", ["multiset", "pi"]], ["mod", "theorem", "pi_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/powerset.lean", "newPath": "src/data/multiset/powerset.lean", "changes": [["mod", "theorem", "powerset_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset/range.lean", "newPath": "src/data/multiset/range.lean", "changes": [["mod", "theorem", "range_succ", ["multiset"]]]}, {"oldPath": "src/data/multiset/sections.lean", "newPath": "src/data/multiset/sections.lean", "changes": [["mod", "theorem", "sections_zero", ["multiset"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": [["mod", "def", "of_prime", ["prime_multiset"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "roots_X_sub_C", ["polynomial"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/sym.lean", "newPath": "src/data/sym.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1602614665, "sha": "7368d719", "message": "chore(number_theory/arithmetic_function): Define in terms of zero_hom (#4606)\nNo need to write these proofs in two places", "changes": [{"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["mod", "theorem", "map_zero", ["nat", "arithmetic_function"]], ["mod", "theorem", "zero_apply", ["nat", "arithmetic_function"]], ["add", "def", "arithmetic_function", ["nat"]], ["del", "structure", "arithmetic_function", ["nat"]]]}]}, {"timestamp": 1602607562, "sha": "b1c1033f", "message": "feat(analysis/normed_space/operator_norm): construct a continuous_linear_equiv from a linear_equiv and bounds in both directions (#4583)", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "to_continuous_linear_equiv_of_bounds", ["linear_equiv"]]]}]}, {"timestamp": 1602607560, "sha": "7cff8250", "message": "feat(data/vector2): induction principle, define last, and some lemmas (blocked by #4578) (#4554)", "changes": [{"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["add", "def", "induction_on", ["vector"]], ["add", "def", "last", ["vector"]], ["add", "theorem", "last_def", ["vector"]], ["add", "theorem", "nth_cons_nil", ["vector"]], ["add", "theorem", "reverse_nth_zero", ["vector"]], ["add", "theorem", "singleton_tail", ["vector"]], ["add", "theorem", "tail_nil", ["vector"]], ["add", "theorem", "to_list_reverse", ["vector"]], ["add", "theorem", "to_list_singleton", ["vector"]]]}]}, {"timestamp": 1602602690, "sha": "71bb9f23", "message": "chore(linear_algebra/finsupp): Implement lsingle in terms of single_add_hom (#4605)\nWhile not shorter, this makes it easier to relate the two definitions", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "def", "lapply", ["finsupp"]]]}]}, {"timestamp": 1602597754, "sha": "ca6af1c4", "message": "chore(algebra/monoid_algebra): Replace `algebra_map'` with `single_(zero|one)_ring_hom` (#4582)\n`algebra_map'` is now trivially equal to `single_(zero|one)_ring_hom.comp`, so is no longer needed.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["del", "def", "algebra_map'", ["add_monoid_algebra"]], ["add", "def", "single_zero_alg_hom", ["add_monoid_algebra"]], ["add", "def", "single_zero_ring_hom", ["add_monoid_algebra"]], ["del", "def", "algebra_map'", ["monoid_algebra"]], ["add", "def", "single_one_alg_hom", ["monoid_algebra"]], ["add", "def", "single_one_ring_hom", ["monoid_algebra"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["mod", "def", "C", ["polynomial"]]]}]}, {"timestamp": 1602587548, "sha": "9f9344d3", "message": "feat(algebra/char_p): fields with a hom between them have same char (#4594)", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "char_p_iff_char_p", ["ring_hom"]]]}]}, {"timestamp": 1602582437, "sha": "dd8bf2c5", "message": "feat(data/polynomial/eval): easy lemmas + speedup (#4596)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["del", "theorem", "mul_comp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "comp_assoc", ["polynomial"]], ["add", "theorem", "eval₂_congr", ["polynomial"]], ["add", "theorem", "mul_comp", ["polynomial"]], ["add", "theorem", "neg_comp", ["polynomial"]], ["add", "theorem", "sub_comp", ["polynomial"]]]}]}, {"timestamp": 1602570622, "sha": "7fff35f5", "message": "chore(algebra/pointwise): remove `@[simp]` from `singleton_one`/`singleton_zero` (#4592)\nThis lemma simplified `{1}` and `{0}` to `1` and `0` making them unusable for other `singleton` lemmas.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "preimage_mul_left_singleton", ["set"]], ["add", "theorem", "preimage_mul_right_singleton", ["set"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1602570620, "sha": "c9ae9e67", "message": "chore(linear_algebra/dimension): more same-universe versions of `is_basis.mk_eq_dim` (#4591)\nWhile all the `lift` magic is good for general theory, it is not that convenient for the case when everything is in `Type`.\n* add `mk_eq_mk_of_basis'`: same-universe version of `mk_eq_mk_of_basis`;\n* generalize `is_basis.mk_eq_dim''` to any index type in the same universe as `V`, not necessarily `s : set V`;\n* reorder lemmas to optimize the total length of the proofs;\n* drop one `finite_dimensional` assumption in `findim_of_infinite_dimensional`.", "changes": [{"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": [["mod", "theorem", "findim_mul_findim", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "mk_eq_dim''", ["is_basis"]], ["add", "theorem", "mk_eq_mk_of_basis'", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "findim_of_infinite_dimensional", ["finite_dimensional"]]]}]}, {"timestamp": 1602563996, "sha": "766d860d", "message": "fix(big_operators): fix imports (#4588)\nPreviously `algebra.big_operators.pi` imported `algebra.big_operators.default`. That import direction is now reversed.", "changes": [{"oldPath": "src/algebra/big_operators/default.lean", "newPath": "src/algebra/big_operators/default.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": []}, {"oldPath": "src/data/polynomial/iterated_deriv.lean", "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": []}]}, {"timestamp": 1602560938, "sha": "505b969c", "message": "feat(archive/imo): formalize IMO 1962 problem Q1 (#4450)\nThe problem statement:\nFind the smallest natural number $n$ which has the following properties:\n(a) Its decimal representation has 6 as the last digit.\n(b) If the last digit 6 is erased and placed in front of the remaining digits,\nthe resulting number is four times as large as the original number $n$.\nThis is a proof that 153846 is the smallest member of the set satisfying these conditions.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1962_q1.lean", "changes": [["add", "theorem", "case_0_digit", []], ["add", "theorem", "case_1_digit", []], ["add", "theorem", "case_2_digit", []], ["add", "theorem", "case_3_digit", []], ["add", "theorem", "case_4_digit", []], ["add", "theorem", "case_5_digit", []], ["add", "theorem", "case_more_digits", []], ["add", "theorem", "helper_5_digit", []], ["add", "theorem", "imo1962_q1", []], ["add", "theorem", "no_smaller_solutions", []], ["add", "def", "problem_predicate'", []], ["add", "def", "problem_predicate", []], ["add", "theorem", "satisfied_by_153846", []], ["add", "theorem", "without_digits", []]]}]}, {"timestamp": 1602554474, "sha": "e9572699", "message": "chore(scripts): update nolints.txt (#4587)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1602554472, "sha": "9eb341a1", "message": "feat(mv_polynomial): minor simplification in coeff_mul (#4586)\nThe proof was already golfed in #4472.\nUse `×` instead of `sigma`.\nShorten one line over 100 chars.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1602554469, "sha": "7dcaee1c", "message": "feat(archive/imo): formalize IMO 1962 problem 4 (#4518)\nThe problem statement: Solve the equation `cos x ^ 2 + cos (2 * x) ^ 2 + cos (3 * x) ^ 2 = 1`.\nThere are a bunch of trig formulas I proved along the way; there are sort of an infinite number of trig formulas so I'm open to feedback on whether some should go in the core libraries. Also possibly some of them have a shorter proof that would render the lemma unnecessary.\nFor what it's worth, the actual method of solution is not how a human would do it; a more intuitive human method is to simplify in terms of `cos x` and then solve, but I think this is simpler in Lean because it doesn't rely on solving `cos x = y` for several different `y`.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1962_q4.lean", "changes": [["add", "theorem", "alt_equiv", []], ["add", "def", "alt_formula", []], ["add", "theorem", "cos_sum_equiv", []], ["add", "theorem", "finding_zeros", []], ["add", "theorem", "imo1962_q4", []], ["add", "def", "problem_equation", []], ["add", "def", "solution_set", []], ["add", "theorem", "solve_cos2_half", []], ["add", "theorem", "solve_cos3x_0", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_square'", ["complex"]], ["add", "theorem", "cos_three_mul", ["complex"]], ["add", "theorem", "cosh_square", ["complex"]], ["add", "theorem", "cosh_three_mul", ["complex"]], ["add", "theorem", "cosh_two_mul", ["complex"]], ["add", "theorem", "sin_three_mul", ["complex"]], ["add", "theorem", "sinh_square", ["complex"]], ["add", "theorem", "sinh_three_mul", ["complex"]], ["add", "theorem", "sinh_two_mul", ["complex"]], ["add", "theorem", "cos_square'", ["real"]], ["add", "theorem", "cos_three_mul", ["real"]], ["add", "theorem", "cos_two_mul'", ["real"]], ["add", "theorem", "cosh_add_sinh", ["real"]], ["add", "theorem", "cosh_square", ["real"]], ["add", "theorem", "cosh_three_mul", ["real"]], ["add", "theorem", "cosh_two_mul", ["real"]], ["add", "theorem", "sin_three_mul", ["real"]], ["add", "theorem", "sinh_add_cosh", ["real"]], ["add", "theorem", "sinh_square", ["real"]], ["add", "theorem", "sinh_three_mul", ["real"]], ["add", "theorem", "sinh_two_mul", ["real"]]]}]}, {"timestamp": 1602554467, "sha": "b231d8e7", "message": "feat(archive/imo): formalize IMO 1960 problem 1 (#4366)\nThe problem:\nDetermine all three-digit numbers $N$ having the property that $N$ is divisible by 11, and\n$\\dfrac{N}{11}$ is equal to the sum of the squares of the digits of $N$.\nArt of Problem Solving offers three solutions to this problem - https://artofproblemsolving.com/wiki/index.php/1960_IMO_Problems/Problem_1 - but they all involve a fairly large amount of bashing through cases and solving basic algebra. This proof is also essentially bashing through cases, using the `iterate` tactic and calls to `norm_num`.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1960_q1.lean", "changes": [["add", "theorem", "ge_100", []], ["add", "theorem", "imo1960_q1", []], ["add", "theorem", "left_direction", []], ["add", "theorem", "lt_1000", []], ["add", "theorem", "not_zero", []], ["add", "def", "problem_predicate", []], ["add", "theorem", "right_direction", []], ["add", "def", "search_up_to", []], ["add", "theorem", "search_up_to_end", []], ["add", "theorem", "search_up_to_start", []], ["add", "theorem", "search_up_to_step", []], ["add", "def", "solution_predicate", []], ["add", "def", "sum_of_squares", []]]}]}, {"timestamp": 1602544661, "sha": "a6d445db", "message": "feat(data/finsupp): Add `map_finsupp_prod` to homs (#4585)\nThis is a convenience alias for `map_prod`, which is awkward to use.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "map_finsupp_prod", ["monoid_hom"]], ["add", "theorem", "map_finsupp_prod", ["mul_equiv"]], ["add", "theorem", "map_finsupp_prod", ["ring_hom"]], ["add", "theorem", "map_finsupp_sum", ["ring_hom"]]]}]}, {"timestamp": 1602544660, "sha": "d1bb5ea6", "message": "feat(topology/category/Compactum): Compact Hausdorff spaces (#4555)\nThis PR provides the equivalence between the category of compact Hausdorff topological spaces and the category of algebras for the ultrafilter monad.\n## Notation\n1. `Compactum` is the category of algebras for the ultrafilter monad. It's a wrapper around `monad.algebra (of_type_functor $ ultrafilter)`.\n2. `CompHaus` is the full subcategory of `Top` consisting of topological spaces which are compact and Hausdorff.", "changes": [{"oldPath": null, "newPath": "src/data/set/constructions.lean", "changes": [["add", "inductive", "finite_inter_closure", ["has_finite_inter"]], ["add", "def", "finite_inter_closure_has_finite_inter", ["has_finite_inter"]], ["add", "theorem", "finite_inter_closure_insert", ["has_finite_inter"]], ["add", "theorem", "finite_inter_mem", ["has_finite_inter"]], ["add", "structure", "has_finite_inter", []]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "ne_empty_of_mem_ultrafilter", ["filter"]], ["add", "theorem", "nonempty_of_mem_ultrafilter", ["filter"]], ["add", "theorem", "ultrafilter_iff_compl_mem_iff_not_mem'", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "def", "Lim'", []], ["add", "def", "Lim", ["filter", "ultrafilter"]]]}, {"oldPath": null, "newPath": "src/topology/category/CompHaus.lean", "changes": [["add", "structure", "CompHaus", []], ["add", "def", "CompHaus_to_Top", []]]}, {"oldPath": null, "newPath": "src/topology/category/Compactum.lean", "changes": [["add", "theorem", "Lim_eq_str", ["Compactum"]], ["add", "def", "adj", ["Compactum"]], ["add", "theorem", "cl_eq_closure", ["Compactum"]], ["add", "theorem", "continuous_of_hom", ["Compactum"]], ["add", "def", "forget", ["Compactum"]], ["add", "def", "free", ["Compactum"]], ["add", "def", "hom_of_continuous", ["Compactum"]], ["add", "def", "incl", ["Compactum"]], ["add", "theorem", "is_closed_cl", ["Compactum"]], ["add", "theorem", "is_closed_iff", ["Compactum"]], ["add", "def", "join", ["Compactum"]], ["add", "theorem", "join_distrib", ["Compactum"]], ["add", "theorem", "le_nhds_of_str_eq", ["Compactum"]], ["add", "def", "str", ["Compactum"]], ["add", "theorem", "str_eq_of_le_nhds", ["Compactum"]], ["add", "theorem", "str_hom_commute", ["Compactum"]], ["add", "theorem", "str_incl", ["Compactum"]], ["add", "def", "Compactum", []], ["add", "theorem", "faithful", ["Compactum_to_CompHaus"]], ["add", "def", "full", ["Compactum_to_CompHaus"]], ["add", "def", "Compactum_to_CompHaus", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_open_iff_ultrafilter'", []]]}]}, {"timestamp": 1602544657, "sha": "bc77a23e", "message": "feat(data/list/*): add left- and right-biased versions of map₂ and zip (#4512)\nWhen given lists of different lengths, `map₂` and `zip` truncate the output to\nthe length of the shorter input list. This commit adds variations on `map₂` and\n`zip` whose output is always as long as the left/right input.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "map₂_flip", ["list"]], ["add", "theorem", "map₂_left'_nil_right", ["list"]], ["add", "theorem", "map₂_left_eq_map₂", ["list"]], ["add", "theorem", "map₂_left_eq_map₂_left'", ["list"]], ["add", "theorem", "map₂_left_nil_right", ["list"]], ["add", "theorem", "map₂_right'_cons_cons", ["list"]], ["add", "theorem", "map₂_right'_nil_cons", ["list"]], ["add", "theorem", "map₂_right'_nil_left", ["list"]], ["add", "theorem", "map₂_right'_nil_right", ["list"]], ["add", "theorem", "map₂_right_cons_cons", ["list"]], ["add", "theorem", "map₂_right_eq_map₂", ["list"]], ["add", "theorem", "map₂_right_eq_map₂_right'", ["list"]], ["add", "theorem", "map₂_right_nil_cons", ["list"]], ["add", "theorem", "map₂_right_nil_left", ["list"]], ["add", "theorem", "map₂_right_nil_right", ["list"]], ["add", "theorem", "zip_left'_cons_cons", ["list"]], ["add", "theorem", "zip_left'_cons_nil", ["list"]], ["add", "theorem", "zip_left'_nil_left", ["list"]], ["add", "theorem", "zip_left'_nil_right", ["list"]], ["add", "theorem", "zip_left_cons_cons", ["list"]], ["add", "theorem", "zip_left_cons_nil", ["list"]], ["add", "theorem", "zip_left_eq_zip_left'", ["list"]], ["add", "theorem", "zip_left_nil_left", ["list"]], ["add", "theorem", "zip_left_nil_right", ["list"]], ["add", "theorem", "zip_right'_cons_cons", ["list"]], ["add", "theorem", "zip_right'_nil_cons", ["list"]], ["add", "theorem", "zip_right'_nil_left", ["list"]], ["add", "theorem", "zip_right'_nil_right", ["list"]], ["add", "theorem", "zip_right_cons_cons", ["list"]], ["add", "theorem", "zip_right_eq_zip_right'", ["list"]], ["add", "theorem", "zip_right_nil_cons", ["list"]], ["add", "theorem", "zip_right_nil_left", ["list"]], ["add", "theorem", "zip_right_nil_right", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "map₂_left'", ["list"]], ["add", "def", "map₂_left", ["list"]], ["add", "def", "map₂_right'", ["list"]], ["add", "def", "map₂_right", ["list"]], ["add", "def", "zip_left'", ["list"]], ["add", "def", "zip_left", ["list"]], ["add", "def", "zip_right'", ["list"]], ["add", "def", "zip_right", ["list"]]]}]}, {"timestamp": 1602535813, "sha": "d3d70f1f", "message": "chore(algebra/order*): move `abs`/`min`/`max`, review (#4581)\n* make `algebra.ordered_group` import `algebra.order_functions`, not vice versa;\n* move some proofs from `algebra.ordered_functions` to `algebra.ordered_group` and `algebra.ordered_ring`;\n* deduplicate API;\n* golf some proofs.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["del", "theorem", "abs_abs_sub_le_abs_sub", []], ["del", "theorem", "abs_add", []], ["del", "theorem", "abs_eq", []], ["del", "theorem", "abs_eq_zero", []], ["del", "theorem", "abs_le", []], ["del", "theorem", "abs_le_abs", []], ["del", "theorem", "abs_le_max_abs_abs", []], ["del", "theorem", "abs_lt", []], ["del", "theorem", "abs_max_sub_max_le_abs", []], ["del", "theorem", "abs_nonpos_iff", []], ["del", "theorem", "abs_one", []], ["del", "theorem", "abs_pos_iff", []], ["del", "theorem", "abs_sub_le_iff", []], ["del", "theorem", "abs_sub_lt_iff", []], ["del", "theorem", "fn_min_mul_fn_max", []], ["del", "theorem", "lt_abs", []], ["del", "theorem", "max_le_add_of_nonneg", []], ["del", "theorem", "max_mul_mul_le_max_mul_max", []], ["del", "theorem", "max_mul_of_nonneg", []], ["del", "theorem", "max_sub_min_eq_abs'", []], ["del", "theorem", "max_sub_min_eq_abs", []], ["del", "theorem", "max_zero_sub_eq_self", []], ["del", "theorem", "min_le_add_of_nonneg_left", []], ["del", "theorem", "min_le_add_of_nonneg_right", []], ["del", "theorem", "min_mul_max", []], ["del", "theorem", "min_mul_of_nonneg", []], ["del", "theorem", "min_sub", []], ["del", "theorem", "mul_max_of_nonneg", []], ["del", "theorem", "mul_min_of_nonneg", []], ["del", "theorem", "sub_abs_le_abs_sub", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "max_div_div_right", []], ["add", "theorem", "max_div_div_right_of_nonpos", []], ["add", "theorem", "min_div_div_right", []], ["add", "theorem", "min_div_div_right_of_nonpos", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "abs_abs", []], ["add", "theorem", "abs_abs_sub_abs_le_abs_sub", []], ["add", "theorem", "abs_add", []], ["del", "theorem", "abs_add_le_abs_add_abs", []], ["add", "theorem", "abs_eq", []], ["add", "theorem", "abs_eq_zero", []], ["add", "theorem", "abs_le'", []], ["add", "theorem", "abs_le", []], ["add", "theorem", "abs_le_abs", []], ["add", "theorem", "abs_le_max_abs_abs", []], ["del", "theorem", "abs_le_of_le_of_neg_le", []], ["add", "theorem", "abs_lt", []], ["del", "theorem", "abs_lt_of_lt_of_neg_lt", []], ["add", "theorem", "abs_max_sub_max_le_abs", []], ["mod", "theorem", "abs_neg", []], ["add", "theorem", "abs_nonpos_iff", []], ["mod", "theorem", "abs_of_neg", []], ["mod", "theorem", "abs_of_nonneg", []], ["mod", "theorem", "abs_of_nonpos", []], ["mod", "theorem", "abs_of_pos", []], ["add", "theorem", "abs_pos", []], ["del", "theorem", "abs_pos_of_ne_zero", []], ["mod", "theorem", "abs_pos_of_neg", []], ["mod", "theorem", "abs_pos_of_pos", []], ["add", "theorem", "abs_sub_le_iff", []], ["add", "theorem", "abs_sub_lt_iff", []], ["mod", "theorem", "abs_zero", []], ["del", "theorem", "eq_of_abs_sub_nonpos", ["decidable_linear_ordered_add_comm_group"]], ["add", "theorem", "eq_of_abs_sub_nonpos", []], ["del", "theorem", "eq_zero_of_abs_eq_zero", []], ["add", "theorem", "fn_min_mul_fn_max", []], ["mod", "theorem", "le_abs_self", []], ["add", "theorem", "lt_abs", []], ["del", "theorem", "max_eq_neg_min_neg_neg", []], ["add", "theorem", "max_le_add_of_nonneg", []], ["mod", "theorem", "max_neg_neg", []], ["add", "theorem", "max_sub_min_eq_abs'", []], ["add", "theorem", "max_sub_min_eq_abs", []], ["add", "theorem", "max_sub_sub_left", []], ["add", "theorem", "max_sub_sub_right", []], ["add", "theorem", "max_zero_sub_eq_self", []], ["del", "theorem", "min_eq_neg_max_neg_neg", []], ["add", "theorem", "min_le_add_of_nonneg_left", []], ["add", "theorem", "min_le_add_of_nonneg_right", []], ["add", "theorem", "min_mul_max", []], ["mod", "theorem", "min_neg_neg", []], ["add", "theorem", "min_sub_sub_left", []], ["add", "theorem", "min_sub_sub_right", []], ["del", "theorem", "ne_zero_of_abs_ne_zero", []], ["mod", "theorem", "neg_le_abs_self", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "abs_abs_sub_abs_le_abs_sub", []], ["add", "def", "abs_hom", []], ["add", "theorem", "abs_one", []], ["add", "def", "to_linear_order", ["linear_nonneg_ring"]], ["add", "def", "to_linear_ordered_ring", ["linear_nonneg_ring"]], ["add", "theorem", "max_mul_mul_le_max_mul_max", []], ["add", "theorem", "max_mul_of_nonneg", []], ["add", "theorem", "min_mul_of_nonneg", []], ["add", "theorem", "mul_max_of_nonneg", []], ["add", "theorem", "mul_min_of_nonneg", []], ["add", "def", "to_ordered_ring", ["nonneg_ring"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1602535811, "sha": "6ea62008", "message": "feat(tactic/rcases): rcases_many (#4569)\nThis allows you to pattern match many variables at once, using the\nsyntax `obtain ⟨a|b, c|d⟩ := ⟨x, y⟩`. This doesn't require any change\nto the front end documentation, as it is in some sense the obvious thing,\nbut this doesn't break any existing uses because this could never work\nbefore (since the expected type of the tuple expression is not known).", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1602535809, "sha": "9bed4567", "message": "feta(data/fin): induction principle on fin (n + 1) (#4546)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cases_succ'", ["fin"]], ["add", "def", "induction", ["fin"]], ["add", "def", "induction_on", ["fin"]]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": []}]}, {"timestamp": 1602535806, "sha": "8ccfb0ad", "message": "chore(control/functor): linting (#4496)", "changes": [{"oldPath": "src/control/functor.lean", "newPath": "src/control/functor.lean", "changes": []}]}, {"timestamp": 1602526136, "sha": "9713e960", "message": "chore(*): update to Lean 3.21.0c (#4578)\nThe only real change is the removal of notation for `vector.cons`.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/bitvec/core.lean", "newPath": "src/data/bitvec/core.lean", "changes": []}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "src/data/sym.lean", "newPath": "src/data/sym.lean", "changes": [["mod", "theorem", "cons_of_coe_eq", ["sym"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["mod", "theorem", "cons_head", ["vector"]], ["mod", "theorem", "cons_tail", ["vector"]], ["mod", "theorem", "cons_val", ["vector"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "mem_fixed_points_mul_left_cosets_iff_mem_normalizer", ["sylow"]]]}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}]}, {"timestamp": 1602526133, "sha": "6816b835", "message": "feat(archive/100-theorems-list/70_perfect_numbers): Direction 1 of the Perfect Number Theorem (#4544)\nProves Euclid's half of the Euclid-Euler Theorem that if `2 ^ (k + 1) - 1` is prime, then `2 ^ k * (2 ^ (k + 1) - 1)` is an (even) perfect number.", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/70_perfect_numbers.lean", "changes": [["add", "theorem", "even_two_pow_mul_mersenne_of_prime", ["nat"]], ["add", "theorem", "ne_zero_of_prime_mersenne", ["nat"]], ["add", "theorem", "perfect_two_pow_mul_mersenne_of_prime", ["nat"]], ["add", "theorem", "sigma_two_pow_eq_mersenne_succ", ["nat"]], ["add", "theorem", "odd_mersenne_succ", []]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "sigma_one_apply", ["nat", "arithmetic_function"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "divisors_prime", ["nat"]], ["add", "theorem", "divisors_prime_pow", ["nat"]], ["add", "theorem", "mem_divisors_prime_pow", ["nat"]], ["mod", "def", "perfect", ["nat"]], ["mod", "theorem", "perfect_iff_sum_divisors_eq_two_mul", ["nat"]], ["mod", "theorem", "perfect_iff_sum_proper_divisors", ["nat"]], ["add", "theorem", "prod_divisors_prime", ["nat"]], ["add", "theorem", "prod_divisors_prime_pow", ["nat"]], ["add", "theorem", "sum_divisors_prime", ["nat"]], ["add", "theorem", "sum_divisors_prime_pow", ["nat"]]]}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": [["add", "theorem", "succ_mersenne", []]]}]}, {"timestamp": 1602522861, "sha": "93790507", "message": "chore(data/hash_map): linting (#4498)", "changes": [{"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}]}, {"timestamp": 1602514655, "sha": "266895fb", "message": "fix(algebra/ordered_group): use `add_neg` in autogenerated lemma name (#4580)\nExplicitly add `sub_le_sub_iff` with `a - b`.", "changes": [{"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "div_le_div_iff'", []], ["add", "theorem", "sub_le_sub_iff", []]]}]}, {"timestamp": 1602514653, "sha": "b3ce8837", "message": "feat(algebra/*_power): simplify `(-a)^(bit0 _)` and `(-a)^(bit1 _)` (#4573)\nWorks for `pow` and `fpow`. Also simplify powers of `I : ℂ`.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "neg_fpow_bit0", []], ["add", "theorem", "neg_fpow_bit1", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "bit0_nsmul'", []], ["add", "theorem", "bit1_nsmul'", []], ["add", "theorem", "neg_pow_bit0", []], ["add", "theorem", "neg_pow_bit1", []], ["add", "theorem", "pow_bit0'", []], ["add", "theorem", "pow_bit1'", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["add", "theorem", "fpow_add'", []], ["add", "theorem", "fpow_bit0'", []], ["add", "theorem", "fpow_bit0", []], ["add", "theorem", "fpow_bit1'", []], ["add", "theorem", "fpow_bit1", []]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "I_fpow_bit0", ["complex"]], ["add", "theorem", "I_fpow_bit1", ["complex"]], ["add", "theorem", "I_pow_bit0", ["complex"]], ["add", "theorem", "I_pow_bit1", ["complex"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "bit0_ne_bit1", ["int"]], ["add", "theorem", "bit1_ne_bit0", ["int"]], ["add", "theorem", "bit1_ne_zero", ["int"]], ["add", "theorem", "bodd_bit0", ["int"]], ["add", "theorem", "bodd_bit1", ["int"]], ["mod", "theorem", "bodd_two", ["int"]]]}]}, {"timestamp": 1602514651, "sha": "38e9ed32", "message": "feat(archive/imo): IMO 2020 Q2 (#4565)\nAdd a proof of IMO 2020 Q2 (directly following one of the official\nsolutions; there are many very similar approaches possible).\nIn support of this solution, add `geom_mean_le_arith_mean4_weighted`\nto `analysis.mean_inequalities`, for both `real` and `nnreal`,\nanalogous to the versions for two and three numbers (and also add\n`geom_mean_le_arith_mean3_weighted` for `real` as it was only present\nfor `nnreal`).", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2020_q2.lean", "changes": [["add", "theorem", "imo2020_q2", []]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "geom_mean_le_arith_mean4_weighted", ["nnreal"]], ["add", "theorem", "geom_mean_le_arith_mean3_weighted", ["real"]], ["add", "theorem", "geom_mean_le_arith_mean4_weighted", ["real"]]]}]}, {"timestamp": 1602514648, "sha": "5022425a", "message": "feat(algebra/free_algebra): Add an inductive principle (#4335)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["add", "theorem", "induction", ["free_algebra"]]]}]}, {"timestamp": 1602514646, "sha": "3d1f16aa", "message": "feat(analysis/normed_space/multilinear): define `mk_pi_algebra` (#4316)\nI'm going to use this definition for converting `(mv_)power_series` to `formal_multilinear_series`.", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "mk_pi_algebra_apply", ["continuous_multilinear_map"]], ["add", "theorem", "mk_pi_algebra_fin_apply", ["continuous_multilinear_map"]], ["add", "theorem", "mk_pi_field_apply_one_eq_self", ["continuous_multilinear_map"]], ["del", "theorem", "mk_pi_ring_apply_one_eq_self", ["continuous_multilinear_map"]], ["add", "theorem", "norm_mk_pi_algebra", ["continuous_multilinear_map"]], ["add", "theorem", "norm_mk_pi_algebra_fin", ["continuous_multilinear_map"]], ["add", "theorem", "norm_mk_pi_algebra_fin_le_of_pos", ["continuous_multilinear_map"]], ["add", "theorem", "norm_mk_pi_algebra_fin_succ_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_mk_pi_algebra_fin_zero", ["continuous_multilinear_map"]], ["add", "theorem", "norm_mk_pi_algebra_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_mk_pi_algebra_of_empty", ["continuous_multilinear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "coe_comp_multilinear_map", ["linear_map"]], ["mod", "def", "comp_multilinear_map", ["linear_map"]], ["add", "theorem", "comp_multilinear_map_apply", ["linear_map"]], ["add", "theorem", "mk_pi_algebra_apply", ["multilinear_map"]], ["add", "theorem", "mk_pi_algebra_fin_apply", ["multilinear_map"]], ["add", "theorem", "mk_pi_algebra_fin_apply_const", ["multilinear_map"]], ["add", "def", "smul_right", ["multilinear_map"]], ["add", "theorem", "smul_right_apply", ["multilinear_map"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "theorem", "to_multilinear_map_inj", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1602505310, "sha": "1362701b", "message": "refactor(field_theory): Adjoin intermediate field (#4468)\nRefactor adjoin to be an intermediate field rather than a subalgebra.", "changes": [{"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["del", "theorem", "algebra_map_mem", ["field", "adjoin"]], ["del", "theorem", "mono", ["field", "adjoin"]], ["del", "theorem", "range_algebra_map_subset", ["field", "adjoin"]], ["del", "def", "adjoin", ["field"]], ["del", "theorem", "adjoin_adjoin_comm", ["field"]], ["del", "theorem", "adjoin_adjoin_left", ["field"]], ["del", "theorem", "adjoin_contains_field_as_subfield", ["field"]], ["del", "theorem", "adjoin_dim_eq_one_iff", ["field"]], ["del", "theorem", "adjoin_dim_eq_one_of_sub_bot", ["field"]], ["del", "theorem", "adjoin_eq_bot", ["field"]], ["del", "theorem", "adjoin_eq_bot_iff", ["field"]], ["del", "theorem", "adjoin_eq_range_algebra_map_adjoin", ["field"]], ["del", "theorem", "adjoin_findim_eq_one_iff", ["field"]], ["del", "theorem", "adjoin_one", ["field"]], ["del", "theorem", "algebra_map_gen", ["field", "adjoin_simple"]], ["del", "def", "gen", ["field", "adjoin_simple"]], ["del", "theorem", "adjoin_simple_adjoin_simple", ["field"]], ["del", "theorem", "adjoin_simple_comm", ["field"]], ["del", "theorem", "adjoin_simple_dim_eq_one_iff", ["field"]], ["del", "theorem", "adjoin_simple_dim_eq_one_of_mem_bot", ["field"]], ["del", "theorem", "adjoin_simple_eq_bot", ["field"]], ["del", "theorem", "adjoin_simple_eq_bot_iff", ["field"]], ["del", "theorem", "adjoin_simple_findim_eq_one_iff", ["field"]], ["del", "theorem", "adjoin_subset_adjoin_iff", ["field"]], ["del", "theorem", "adjoin_subset_iff", ["field"]], ["del", "theorem", "adjoin_subset_subfield", ["field"]], ["del", "theorem", "adjoin_zero", ["field"]], ["del", "theorem", "bot_eq_top_of_dim_adjoin_eq_one", ["field"]], ["del", "theorem", "bot_eq_top_of_findim_adjoin_eq_one", ["field"]], ["del", "theorem", "bot_eq_top_of_findim_adjoin_le_one", ["field"]], ["del", "theorem", "mem_adjoin_simple_self", ["field"]], ["del", "theorem", "mem_bot_of_adjoin_simple_dim_eq_one", ["field"]], ["del", "theorem", "mem_bot_of_adjoin_simple_sub_bot", ["field"]], ["del", "theorem", "sub_bot_of_adjoin_dim_eq_one", ["field"]], ["del", "theorem", "sub_bot_of_adjoin_sub_bot", ["field"]], ["del", "theorem", "subfield_subset_adjoin_self", ["field"]], ["del", "theorem", "subset_adjoin", ["field"]], ["del", "theorem", "subset_adjoin_of_subset_left", ["field"]], ["del", "theorem", "subset_adjoin_of_subset_right", ["field"]], ["add", "theorem", "algebra_map_mem", ["intermediate_field", "adjoin"]], ["add", "theorem", "mono", ["intermediate_field", "adjoin"]], ["add", "theorem", "range_algebra_map_subset", ["intermediate_field", "adjoin"]], ["add", "def", "adjoin", ["intermediate_field"]], ["add", "theorem", "adjoin_adjoin_comm", ["intermediate_field"]], ["add", "theorem", "adjoin_adjoin_left", ["intermediate_field"]], ["add", "theorem", "adjoin_contains_field_as_subfield", ["intermediate_field"]], ["add", "theorem", "adjoin_eq_bot_iff", ["intermediate_field"]], ["add", "theorem", "adjoin_eq_range_algebra_map_adjoin", ["intermediate_field"]], ["add", "theorem", "adjoin_induction", ["intermediate_field"]], ["add", "theorem", "adjoin_int", ["intermediate_field"]], ["add", "theorem", "adjoin_le_algebra_adjoin", ["intermediate_field"]], ["add", "theorem", "adjoin_le_iff", ["intermediate_field"]], ["add", "theorem", "adjoin_le_subfield", ["intermediate_field"]], ["add", "theorem", "adjoin_map", ["intermediate_field"]], ["add", "theorem", "adjoin_nat", ["intermediate_field"]], ["add", "theorem", "adjoin_one", ["intermediate_field"]], ["add", "theorem", "algebra_map_gen", ["intermediate_field", "adjoin_simple"]], ["add", "def", "gen", ["intermediate_field", "adjoin_simple"]], ["add", "theorem", "adjoin_simple_adjoin_simple", ["intermediate_field"]], ["add", "theorem", "adjoin_simple_comm", ["intermediate_field"]], ["add", "theorem", "adjoin_simple_eq_bot_iff", ["intermediate_field"]], ["add", "theorem", "adjoin_subset_adjoin_iff", ["intermediate_field"]], ["add", "theorem", "adjoin_zero", ["intermediate_field"]], ["add", "theorem", "algebra_adjoin_le_adjoin", ["intermediate_field"]], ["add", "theorem", "bot_eq_top_of_dim_adjoin_eq_one", ["intermediate_field"]], ["add", "theorem", "bot_eq_top_of_findim_adjoin_eq_one", ["intermediate_field"]], ["add", "theorem", "bot_eq_top_of_findim_adjoin_le_one", ["intermediate_field"]], ["add", "theorem", "bot_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "coe_bot_eq_self", ["intermediate_field"]], ["add", "theorem", "coe_top_eq_top", ["intermediate_field"]], ["add", "theorem", "dim_adjoin_eq_one_iff", ["intermediate_field"]], ["add", "theorem", "dim_adjoin_simple_eq_one_iff", ["intermediate_field"]], ["add", "theorem", "dim_intermediate_field_eq_dim_subalgebra", ["intermediate_field"]], ["add", "theorem", "findim_adjoin_eq_one_iff", ["intermediate_field"]], ["add", "theorem", "findim_adjoin_simple_eq_one_iff", ["intermediate_field"]], ["add", "theorem", "findim_intermediate_field_eq_findim_subalgebra", ["intermediate_field"]], ["add", "theorem", "gc", ["intermediate_field"]], ["add", "def", "gi", ["intermediate_field"]], ["add", "theorem", "induction_on_adjoin", ["intermediate_field"]], ["add", "theorem", "mem_adjoin_simple_self", ["intermediate_field"]], ["add", "theorem", "mem_bot", ["intermediate_field"]], ["add", "theorem", "mem_top", ["intermediate_field"]], ["add", "theorem", "subset_adjoin", ["intermediate_field"]], ["add", "theorem", "subset_adjoin_of_subset_left", ["intermediate_field"]], ["add", "theorem", "subset_adjoin_of_subset_right", ["intermediate_field"]], ["add", "theorem", "subsingleton_of_dim_adjoin_eq_one", ["intermediate_field"]], ["add", "theorem", "subsingleton_of_findim_adjoin_eq_one", ["intermediate_field"]], ["add", "theorem", "subsingleton_of_findim_adjoin_le_one", ["intermediate_field"]], ["add", "theorem", "to_subalgebra_eq_iff", ["intermediate_field"]], ["add", "theorem", "top_to_subalgebra", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "def", "lift1", ["intermediate_field"]], ["add", "def", "lift2", ["intermediate_field"]], ["add", "theorem", "mem_lift2", ["intermediate_field"]], ["mod", "theorem", "pow_mem", ["intermediate_field"]]]}, {"oldPath": "src/field_theory/primitive_element.lean", "newPath": "src/field_theory/primitive_element.lean", "changes": [["del", "theorem", "exists_primitive_element_aux", ["field"]], ["del", "theorem", "exists_primitive_element_inf", ["field"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "eq_bot_of_bot_eq_top", []], ["add", "theorem", "eq_top_of_bot_eq_top", []], ["add", "theorem", "subsingleton_of_bot_eq_top", []]]}]}, {"timestamp": 1602497783, "sha": "8fa91251", "message": "feat(data/polynomial/degree/erase_lead): definition and basic lemmas (#4527)\nerase_lead serves as the reduction step in an induction, breaking off one monomial from a polynomial. It is used in a later PR to prove that reverse is a multiplicative monoid map on polynomials.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "pred_card_le_card_erase", ["finset"]], ["add", "theorem", "subset_of_eq", ["finset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "card_support_eq_one'", ["finsupp"]], ["add", "theorem", "card_support_eq_one", ["finsupp"]], ["add", "theorem", "card_support_eq_zero", ["finsupp"]], ["add", "theorem", "eq_single_iff", ["finsupp"]], ["add", "theorem", "erase_zero", ["finsupp"]], ["add", "theorem", "support_eq_singleton'", ["finsupp"]], ["add", "theorem", "support_eq_singleton", ["finsupp"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "X_pow_eq_monomial", ["polynomial"]], ["del", "theorem", "monomial_eq_X_pow", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": [["add", "theorem", "C_mul_X_pow_eq_self", ["polynomial"]], ["add", "theorem", "monomial_nat_degree_leading_coeff_eq_self", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "leading_coeff_monomial'", ["polynomial"]], ["add", "theorem", "nat_degree_monomial", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/erase_lead.lean", "changes": [["add", "def", "erase_lead", ["polynomial"]], ["add", "theorem", "erase_lead_C", ["polynomial"]], ["add", "theorem", "erase_lead_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "erase_lead_X", ["polynomial"]], ["add", "theorem", "erase_lead_X_pow", ["polynomial"]], ["add", "theorem", "erase_lead_add_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "erase_lead_add_monomial_nat_degree_leading_coeff", ["polynomial"]], ["add", "theorem", "erase_lead_coeff", ["polynomial"]], ["add", "theorem", "erase_lead_coeff_nat_degree", ["polynomial"]], ["add", "theorem", "erase_lead_coeff_of_ne", ["polynomial"]], ["add", "theorem", "erase_lead_degree_le", ["polynomial"]], ["add", "theorem", "erase_lead_monomial", ["polynomial"]], ["add", "theorem", "erase_lead_nat_degree_le", ["polynomial"]], ["add", "theorem", "erase_lead_nat_degree_lt", ["polynomial"]], ["add", "theorem", "erase_lead_ne_zero", ["polynomial"]], ["add", "theorem", "erase_lead_support", ["polynomial"]], ["add", "theorem", "erase_lead_support_card_lt", ["polynomial"]], ["add", "theorem", "erase_lead_zero", ["polynomial"]], ["add", "theorem", "nat_degree_not_mem_erase_lead_support", ["polynomial"]], ["add", "theorem", "ne_nat_degree_of_mem_erase_lead_support", ["polynomial"]], ["add", "theorem", "self_sub_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "self_sub_monomial_nat_degree_leading_coeff", ["polynomial"]]]}]}, {"timestamp": 1602491401, "sha": "0bfc68fc", "message": "feat(ring_theory/witt_vector/structure_polynomial): witt_structure_int_prop (#4466)\nThis is the 3rd PR in a series on a fundamental theorem about Witt polynomials.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": [["add", "theorem", "eq_witt_structure_int", []], ["add", "theorem", "witt_structure_int_exists_unique", []], ["add", "theorem", "witt_structure_int_prop", []], ["add", "theorem", "witt_structure_int_rename", []], ["add", "theorem", "witt_structure_prop", []]]}]}, {"timestamp": 1602484408, "sha": "b9537177", "message": "feat(set_theory/cardinal): cardinality of powerset (#4576)\nadds a lemma for cardinality of powerset", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_set", ["cardinal"]]]}]}, {"timestamp": 1602464904, "sha": "81b8123d", "message": "chore(scripts): update nolints.txt (#4575)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1602450996, "sha": "665cc13c", "message": "chore(topology/algebra/group): review (#4570)\n* Ensure that we don't use `[topological_group G]` when it suffices to ask for, e.g., `[has_continuous_mul G]`.\n* Introduce `[has_continuous_sub]`, add an instance for `nnreal`.", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "inv", ["continuous"]], ["mod", "theorem", "sub", ["continuous"]], ["del", "theorem", "inv", ["continuous_at"]], ["add", "theorem", "continuous_at_inv", []], ["del", "theorem", "continuous_inv", []], ["mod", "theorem", "inv", ["continuous_on"]], ["mod", "theorem", "sub", ["continuous_on"]], ["mod", "theorem", "continuous_on_inv", []], ["del", "theorem", "continuous_sub", []], ["mod", "theorem", "inv", ["continuous_within_at"]], ["add", "theorem", "sub", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_inv", []], ["mod", "theorem", "exists_nhds_split_inv", []], ["mod", "theorem", "inv", ["filter", "tendsto"]], ["mod", "theorem", "sub", ["filter", "tendsto"]], ["mod", "theorem", "is_closed_map_mul_left", []], ["mod", "theorem", "is_closed_map_mul_right", []], ["add", "theorem", "mul_left", ["is_open"]], ["add", "theorem", "mul_right", ["is_open"]], ["mod", "theorem", "is_open_map_mul_left", []], ["mod", "theorem", "is_open_map_mul_right", []], ["del", "theorem", "is_open_mul_left", []], ["del", "theorem", "is_open_mul_right", []], ["mod", "theorem", "nhds_one_symm", []], ["mod", "theorem", "nhds_translation", []], ["mod", "theorem", "nhds_translation_mul_inv", []], ["mod", "theorem", "tendsto_inv", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["del", "theorem", "sub", ["nnreal", "continuous"]], ["del", "theorem", "continuous_sub", ["nnreal"]]]}]}, {"timestamp": 1602446985, "sha": "952a407c", "message": "feat(data/nat/digits): add norm_digits tactic (#4452)\nThis adds a basic tactic for normalizing expressions of the form `nat.digits a b = l`. As requested on Zulip: https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/simplifying.20nat.2Edigits/near/212152395", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "digits_def'", ["nat"]], ["add", "theorem", "digits_zero_succ'", ["nat"]], ["add", "theorem", "digits_one", ["nat", "norm_digits"]], ["add", "theorem", "digits_succ", ["nat", "norm_digits"]]]}, {"oldPath": null, "newPath": "test/norm_digits.lean", "changes": []}]}, {"timestamp": 1602446983, "sha": "b1ca33e0", "message": "feat(analysis/calculus/times_cont_diff, analysis/calculus/inverse): smooth inverse function theorem (#4407)\nThe inverse function theorem, in the C^k and smooth categories.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "of_local_homeomorph", ["has_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "image_mem_to_local_homeomorph_target", ["times_cont_diff_at"]], ["add", "def", "local_inverse", ["times_cont_diff_at"]], ["add", "theorem", "local_inverse_apply_image", ["times_cont_diff_at"]], ["add", "theorem", "mem_to_local_homeomorph_source", ["times_cont_diff_at"]], ["add", "def", "to_local_homeomorph", ["times_cont_diff_at"]], ["add", "theorem", "to_local_homeomorph_coe", ["times_cont_diff_at"]], ["add", "theorem", "to_local_inverse", ["times_cont_diff_at"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "has_strict_fderiv_at'", ["times_cont_diff_at"]], ["add", "theorem", "of_local_homeomorph", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_at_zero", []], ["add", "theorem", "times_cont_diff_within_at_zero", []]]}]}, {"timestamp": 1602442142, "sha": "b48b4ff0", "message": "feat(analysis/normed_space/inner_product): Cauchy-Schwarz equality case and other lemmas (#4571)", "changes": [{"oldPath": "src/analysis/normed_space/inner_product.lean", "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "abs_inner_div_norm_mul_norm_eq_one_iff", []], ["add", "theorem", "abs_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul", []], ["add", "theorem", "abs_inner_eq_norm_iff", []], ["mod", "def", "euclidean_space", []], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square_of_inner_eq_zero", []], ["add", "theorem", "bot_orthogonal_eq_top", ["submodule"]], ["add", "theorem", "eq_top_iff_orthogonal_eq_bot", ["submodule"]], ["add", "theorem", "is_compl_orthogonal_of_is_complete", ["submodule"]], ["del", "theorem", "is_compl_orthogonal_of_is_complete_real", ["submodule"]], ["add", "theorem", "top_orthogonal_eq_bot", ["submodule"]]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "norm_eq_abs", ["is_R_or_C"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}]}, {"timestamp": 1602442140, "sha": "0f085b98", "message": "chore(linear_algebra/finite_dimensional): rename `of_finite_basis` (#4562)\n* rename `of_finite_basis` to `of_fintype_basis`;\n* add new `of_finite_basis` assuming that the domain the basis is a\n `finite` set;\n* allow `s : finset ι` and any function `s → V` in `of_finset_basis`.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "of_finite_basis", ["finite_dimensional"]], ["mod", "theorem", "of_finset_basis", ["finite_dimensional"]], ["add", "theorem", "of_fintype_basis", ["finite_dimensional"]]]}]}, {"timestamp": 1602433655, "sha": "14dcfe0c", "message": "chore(*): assorted lemmas (#4566)\nNon-bc changes:\n* make some lemmas use `coe` instead of `subtype.val`;\n* make the arguments of `range_comp` explicit, reorder them.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "option_equiv_sum_punit", ["equiv"]], ["add", "theorem", "option_equiv_sum_punit_symm_inl", ["equiv"]], ["add", "theorem", "option_equiv_sum_punit_symm_inr", ["equiv"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "subtype_eq_empty", ["finset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["mod", "theorem", "emb_domain_apply", ["finsupp"]], ["add", "theorem", "emb_domain_eq_zero", ["finsupp"]], ["mod", "theorem", "emb_domain_inj", ["finsupp"]], ["add", "theorem", "emb_domain_injective", ["finsupp"]], ["mod", "theorem", "emb_domain_zero", ["finsupp"]], ["add", "theorem", "subtype_domain_eq_zero_iff'", ["finsupp"]], ["add", "theorem", "subtype_domain_eq_zero_iff", ["finsupp"]], ["mod", "theorem", "support_emb_domain", ["finsupp"]], ["add", "theorem", "unique_ext", ["finsupp"]], ["add", "theorem", "unique_ext_iff", ["finsupp"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "cases_on'_coe", ["option"]], ["add", "theorem", "cases_on'_none", ["option"]], ["add", "theorem", "cases_on'_none_coe", ["option"]], ["add", "theorem", "cases_on'_some", ["option"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "range_eq", ["function", "surjective"]], ["add", "theorem", "is_compl_range_inl_range_inr", ["set"]], ["add", "theorem", "pair_comm", ["set"]], ["mod", "theorem", "range_comp", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "subset_Inter_iff", ["set"]]]}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["add", "theorem", "injective_inl", ["sum"]], ["add", "theorem", "injective_inr", ["sum"]]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": [["add", "theorem", "not_subsingleton", []]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1602433653, "sha": "918e5d82", "message": "chore(data/finsupp): replace `eq_zero_of_zero_eq_one` with `finsupp.unique_of_right` (#4563)\nAlso add a lemma `semimodule.subsingleton`: if `R` is a subsingleton semiring, then any semimodule over `R` is a subsingleton.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "is_unit_of_subsingleton", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "subsingleton_iff_zero_eq_one", []], ["del", "theorem", "subsingleton_of_zero_eq_one", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "subsingleton", ["semimodule"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_independent.lean", "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "linear_independent_of_subsingleton", []], ["del", "theorem", "linear_independent_of_zero_eq_one", []]]}]}, {"timestamp": 1602429158, "sha": "33f7870a", "message": "chore(measure_theory/measurable_space): add `finset.is_measurable_bUnion` etc (#4553)\nI always forget how to convert `finset` or `set.finite` to `set.countable. Also `finset.is_measurable_bUnion` uses `finset`'s `has_mem`, not coercion to `set`.\nAlso replace `tendsto_at_top_supr_nat` etc with slightly more general versions using a `[semilattice_sup β] [nonempty β]` instead of `nat`.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_bInter", ["finset"]], ["add", "theorem", "is_measurable_bUnion", ["finset"]], ["add", "theorem", "is_measurable_bInter", ["set", "finite"]], ["add", "theorem", "is_measurable_bUnion", ["set", "finite"]], ["add", "theorem", "is_measurable_sInter", ["set", "finite"]], ["add", "theorem", "is_measurable_sUnion", ["set", "finite"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "supr_eq_of_tendsto", []], ["add", "theorem", "tendsto_at_top_cinfi", []], ["add", "theorem", "tendsto_at_top_infi", []], ["del", "theorem", "tendsto_at_top_infi_nat", []], ["del", "theorem", "tendsto_at_top_supr_nat", []]]}]}, {"timestamp": 1602419422, "sha": "99130d84", "message": "chore(algebra/monoid_algebra): Reorder lemmas, name some sections for clarity (#4535)\nThis also reduces the scope of `local attribute [reducible] add_monoid_algebra` to the sections which actually need it.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1602412943, "sha": "0487a1d2", "message": "chore(algebra/algebra/basic): fix definition of `ring_hom.to_algebra` (#4561)\nThe new definition uses `to_ring_hom := i` instead of `.. i` to get\ndefeq `algebra_map R S = i`, and adds it as a lemma.", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["add", "theorem", "algebra_map_to_algebra", ["ring_hom"]]]}]}, {"timestamp": 1602389165, "sha": "2c53e5ee", "message": "chore(order/well_founded): move to a file (#4568)\nI want to use `order/rel_classes` before `data/set/basic`.", "changes": [{"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "lt_sup_iff", []]]}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["del", "theorem", "eq_iff_not_lt_of_le", ["well_founded"]], ["del", "theorem", "has_min", ["well_founded"]], ["del", "theorem", "min_mem", ["well_founded"]], ["del", "theorem", "not_lt_min", ["well_founded"]], ["del", "theorem", "well_founded_iff_has_max'", ["well_founded"]], ["del", "theorem", "well_founded_iff_has_min'", ["well_founded"]], ["del", "theorem", "well_founded_iff_has_min", ["well_founded"]]]}, {"oldPath": null, "newPath": "src/order/well_founded.lean", "changes": [["add", "theorem", "eq_iff_not_lt_of_le", ["well_founded"]], ["add", "theorem", "has_min", ["well_founded"]], ["add", "theorem", "min_mem", ["well_founded"]], ["add", "theorem", "not_lt_min", ["well_founded"]], ["add", "theorem", "well_founded_iff_has_max'", ["well_founded"]], ["add", "theorem", "well_founded_iff_has_min'", ["well_founded"]], ["add", "theorem", "well_founded_iff_has_min", ["well_founded"]]]}]}, {"timestamp": 1602385587, "sha": "4dbebe3b", "message": "chore(scripts): update nolints.txt (#4564)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}]}, {"timestamp": 1602378143, "sha": "d8d6e18c", "message": "feat(data/finset/basic): equivalence of finsets from equivalence of types (#4560)\nBroken off from #4259.\nGiven an equivalence `α` to `β`, produce an equivalence between `finset α` and `finset β`, and simp lemmas about it.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "finset_congr_apply", ["equiv"]], ["add", "theorem", "finset_congr_symm_apply", ["equiv"]]]}]}, {"timestamp": 1602371172, "sha": "df5adc5c", "message": "chore(topology/*): golf some proofs (#4528)\n* move `exists_nhds_split` to `topology/algebra/monoid`, rename to `exists_nhds_one_split`;\n* add a version `exists_open_nhds_one_split`;\n* move `exists_nhds_split4` to `topology/algebra/monoid`, rename to `exists_nhds_one_split4`;\n* move `one_open_separated_mul` to `topology/algebra/monoid`, rename to `exists_open_nhds_one_mul_subset`;\n* add `mem_prod_nhds_iff`;\n* golf some proofs.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["del", "theorem", "exists_nhds_split4", []], ["del", "theorem", "exists_nhds_split", []], ["del", "theorem", "one_open_separated_mul", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "exists_nhds_one_split4", []], ["add", "theorem", "exists_nhds_one_split", []], ["add", "theorem", "exists_open_nhds_one_mul_subset", []], ["add", "theorem", "exists_open_nhds_one_split", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "exists_nhds_square", []], ["add", "theorem", "prod_nhds", ["filter", "has_basis"]], ["add", "theorem", "mem_nhds_prod_iff", []]]}]}, {"timestamp": 1602361523, "sha": "c726898e", "message": "feat(data/equiv/basic): equivalence on functions from bool (#4559)\nAn equivalence of functions from bool and pairs, together with some simp lemmas about it.\nBroken off from #4259.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "bool_to_equiv_prod", ["equiv"]], ["add", "theorem", "bool_to_equiv_prod_apply", ["equiv"]], ["add", "theorem", "bool_to_equiv_prod_symm_apply_ff", ["equiv"]], ["add", "theorem", "bool_to_equiv_prod_symm_apply_tt", ["equiv"]]]}]}, {"timestamp": 1602354485, "sha": "f91e0c68", "message": "feat(data/finset/pi): pi singleton lemmas (#4558)\nBroken off from #4259. \nTwo lemmas to reduce `finset.pi` on singletons.", "changes": [{"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": [["add", "theorem", "pi_const_singleton", ["finset"]], ["add", "theorem", "pi_singletons", ["finset"]]]}]}, {"timestamp": 1602343124, "sha": "c8738cb6", "message": "feat(topology/uniform_space/cauchy): generalize `second_countable_of_separable` to uniform spaces (#4530)\nAlso generalize `is_countably_generated.has_antimono_basis` to `is_countably_generated.exists_antimono_subbasis` and add a few lemmas about bases of the uniformity filter.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "property_index", ["filter", "has_basis"]], ["add", "theorem", "set_index_mem", ["filter", "has_basis"]], ["add", "theorem", "set_index_subset", ["filter", "has_basis"]], ["add", "theorem", "exists_antimono_basis", ["filter", "is_countably_generated"]], ["del", "theorem", "exists_antimono_seq", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_antimono_subbasis", ["filter", "is_countably_generated"]], ["del", "theorem", "has_antimono_basis", ["filter", "is_countably_generated"]], ["mod", "theorem", "inf", ["filter", "is_countably_generated"]], ["mod", "theorem", "inf_principal", ["filter", "is_countably_generated"]], ["mod", "theorem", "is_countably_generated_iff_exists_antimono_basis", ["filter"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "exists_countable_dense", ["topological_space"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "nhds_eq_uniformity", []], ["add", "theorem", "is_open_ball", ["uniform_space"]], ["add", "theorem", "mem_ball_self", ["uniform_space"]], ["add", "theorem", "uniformity_has_basis_open", []], ["add", "theorem", "uniformity_has_basis_open_symmetric", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "second_countable_of_separable", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1602322805, "sha": "6676917e", "message": "feat(analysis/special_functions/*): a few more simp lemmas (#4550)\nAdd more lemmas for simplifying inequalities with `exp`, `log`, and\n`rpow`. Lemmas that generate more than one inequality are not marked\nas `simp`.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["mod", "theorem", "log_nonneg", ["real"]], ["add", "theorem", "log_nonneg_iff", ["real"]], ["add", "theorem", "log_nonpos_iff'", ["real"]], ["add", "theorem", "log_nonpos_iff", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "one_le_rpow_of_pos_of_le_one_of_nonpos", ["real"]], ["add", "theorem", "one_lt_rpow_iff", ["real"]], ["add", "theorem", "one_lt_rpow_iff_of_pos", ["real"]], ["mod", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["real"]], ["add", "theorem", "rpow_le_one_iff_of_pos", ["real"]], ["add", "theorem", "rpow_lt_one_iff", ["real"]], ["add", "theorem", "rpow_lt_one_iff_of_pos", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_le_one_iff", ["real"]], ["mod", "theorem", "exp_lt_one_iff", ["real"]], ["add", "theorem", "one_le_exp_iff", ["real"]], ["mod", "theorem", "one_lt_exp_iff", ["real"]]]}]}, {"timestamp": 1602291890, "sha": "b084a068", "message": "chore(scripts): update nolints.txt (#4556)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1602271373, "sha": "40b55c0b", "message": "feat(measure_theory): additions (#4324)\nMany additional lemmas. \nNotable addition: sequential limits of measurable functions into a metric space are measurable.\nRename `integral_map_measure` -> `integral_map` (to be consistent with the version for `lintegral`)\nFix the precedence of all notations for integrals. From now on `∫ x, abs ∥f x∥ ∂μ` will be parsed\ncorrectly (previously it gave a parse error).\nSome cleanup (moving lemmas, and some nicer presentation by opening locales and namespaces).", "changes": [{"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_comp_right", ["set"]], ["add", "theorem", "indicator_prod_one", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "Union_Inter_of_monotone", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_Inter_subset", ["set"]], ["add", "theorem", "Union_inter_of_monotone", ["set"]], ["add", "theorem", "Union_inter_subset", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ite_and", []]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "ennnorm_integral_le_lintegral_ennnorm", ["measure_theory"]], ["add", "theorem", "integral_add'", ["measure_theory"]], ["add", "theorem", "integral_map", ["measure_theory"]], ["del", "theorem", "integral_map_measure", ["measure_theory"]], ["add", "theorem", "integral_neg'", ["measure_theory"]], ["add", "theorem", "integral_sub'", ["measure_theory"]], ["add", "theorem", "integral_to_real", ["measure_theory"]], ["add", "theorem", "integral_zero'", ["measure_theory"]], ["add", "theorem", "lintegral_coe_eq_integral", ["measure_theory"]], ["add", "theorem", "integral_eq_sum_of_subset", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "measurable_coe", ["ennreal"]], ["mod", "theorem", "ennreal_coe", ["measurable"]], ["add", "theorem", "inf_nndist", ["measurable"]], ["mod", "theorem", "nnnorm", ["measurable"]], ["mod", "theorem", "nnreal_coe", ["measurable"]], ["mod", "theorem", "norm", ["measurable"]], ["mod", "theorem", "sub_nnreal", ["measurable"]], ["mod", "theorem", "measurable_dist", []], ["mod", "theorem", "measurable_edist", []], ["mod", "theorem", "measurable_ennreal_coe_iff", []], ["mod", "def", "ennreal_equiv_nnreal", ["measurable_equiv"]], ["add", "theorem", "measurable_inf_nndist", []], ["add", "theorem", "measurable_liminf'", []], ["add", "theorem", "measurable_liminf", []], ["add", "theorem", "measurable_limsup'", []], ["add", "theorem", "measurable_limsup", []], ["mod", "theorem", "measurable_nndist", []], ["mod", "theorem", "measurable_nnnorm", []], ["add", "theorem", "measurable_of_tendsto_metric'", []], ["add", "theorem", "measurable_of_tendsto_metric", []], ["add", "theorem", "measurable_of_tendsto_nnreal'", []], ["add", "theorem", "measurable_of_tendsto_nnreal", []], ["mod", "theorem", "measurable_coe", ["nnreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "ae_lt_top", ["measure_theory"]], ["add", "theorem", "lintegral_comp", ["measure_theory"]], ["add", "theorem", "lintegral_mul_const'", ["measure_theory"]], ["add", "theorem", "lintegral_mul_const", ["measure_theory"]], ["add", "theorem", "lintegral_mul_const_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "integrable_smul_const", ["measure_theory"]], ["add", "theorem", "norm_eq_lintegral", ["measure_theory", "l1"]], ["add", "theorem", "norm_sub_eq_lintegral", ["measure_theory", "l1"]], ["add", "theorem", "of_real_norm_eq_lintegral", ["measure_theory", "l1"]], ["add", "theorem", "of_real_norm_sub_eq_lintegral", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "dirac_ae_eq", ["measure_theory"]], ["mod", "theorem", "le_iff'", ["measure_theory", "measure"]], ["mod", "theorem", "le_iff", ["measure_theory", "measure"]], ["mod", "theorem", "lt_iff'", ["measure_theory", "measure"]], ["mod", "theorem", "lt_iff", ["measure_theory", "measure"]], ["add", "theorem", "sum_cond", ["measure_theory", "measure"]], ["mod", "theorem", "to_outer_measure_le", ["measure_theory", "measure"]], ["add", "theorem", "measure_Union_null_iff", ["measure_theory"]], ["add", "theorem", "measure_if", ["measure_theory"]], ["add", "theorem", "measure_union_null_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "integral_smul_const", []]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["mod", "theorem", "integrable_approx_on", ["measure_theory", "simple_func"]], ["mod", "theorem", "integrable_approx_on_univ", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_approx_on_zero_le", ["measure_theory", "simple_func"]], ["mod", "theorem", "tendsto_approx_on_l1_edist", ["measure_theory", "simple_func"]], ["mod", "theorem", "tendsto_approx_on_univ_l1", ["measure_theory", "simple_func"]], ["mod", "theorem", "tendsto_approx_on_univ_l1_edist", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1602267349, "sha": "d533e1ce", "message": "feat(ring_theory/power_series): inverse lemmas (#4552)\nBroken off from #4259.", "changes": [{"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "theorem", "eq_inv_iff_mul_eq_one", ["power_series"]], ["add", "theorem", "eq_mul_inv_iff_mul_eq", ["power_series"]], ["add", "theorem", "inv_eq_iff_mul_eq_one", ["power_series"]]]}]}, {"timestamp": 1602258260, "sha": "b167809a", "message": "feat(topology/basic): Lim_spec etc. cleanup (#4545)\nFixes #4543\nSee [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/More.20point.20set.20topology.20questions/near/212757136)", "changes": [{"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "Lim_spec", []], ["add", "theorem", "le_nhds_Lim", []], ["del", "theorem", "lim_spec", []], ["add", "theorem", "tendsto_nhds_lim", []]]}, {"oldPath": "src/topology/extend_from_subset.lean", "newPath": "src/topology/extend_from_subset.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "Lim_eq_iff", []], ["add", "theorem", "lim_eq_iff", ["filter"]], ["mod", "theorem", "lim_eq", ["filter", "tendsto"]], ["add", "theorem", "Lim_eq_iff_le_nhds", ["is_ultrafilter"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "le_nhds_Lim", ["is_ultrafilter"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1602249366, "sha": "fcaf6e91", "message": "feat(meta/expr): add parser for generated binder names (#4540)\nDuring elaboration, Lean generates a name for anonymous Π binders. This commit\nadds a parser that recognises such names.", "changes": [{"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "is_nat", ["string"]]]}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1602249364, "sha": "306dc8a0", "message": "chore(algebra/big_operators/basic): add lemma prod_multiset_count' that generalize prod_multiset_count to consider a function to a monoid (#4534)\nI have added `prod_multiset_count'` that is very similar to `prod_multiset_count` but takes into account a function `f : \\a \\r M` where `M` is a commutative monoid. The proof is essentially the same (I didn't try to prove it using `prod_multiset_count` because maybe we can remove it and just keep the more general version).", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_multiset_map_count", ["finset"]]]}]}, {"timestamp": 1602241561, "sha": "656ef0a5", "message": "chore(topology/instances/nnreal): use notation (#4548)", "changes": [{"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "coe_tsum", ["nnreal"]], ["mod", "theorem", "sub", ["nnreal", "continuous"]], ["mod", "theorem", "continuous_coe", ["nnreal"]], ["mod", "theorem", "continuous_sub", ["nnreal"]], ["mod", "theorem", "has_sum_coe", ["nnreal"]], ["mod", "theorem", "sum_add_tsum_nat_add", ["nnreal"]], ["mod", "theorem", "summable_comp_injective", ["nnreal"]], ["mod", "theorem", "summable_nat_add", ["nnreal"]], ["mod", "theorem", "sub", ["nnreal", "tendsto"]], ["mod", "theorem", "tendsto_coe", ["nnreal"]]]}]}, {"timestamp": 1602241559, "sha": "d0f45f52", "message": "lint(various): nolint has_inhabited_instance for injective functions (#4541)\n`function.embedding`, `homeomorph`, `isometric` represent injective/bijective functions, so it's silly to expect them to be inhabited.", "changes": [{"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1602233678, "sha": "cc75e4ef", "message": "chore(data/nat/cast): a few `simp`/`norm_cast` lemmas (#4549)", "changes": [{"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "cast_le", ["nat"]], ["add", "theorem", "cast_le_one", ["nat"]], ["add", "theorem", "cast_lt_one", ["nat"]], ["mod", "theorem", "coe_nat_dvd", ["nat"]], ["add", "theorem", "one_le_cast", ["nat"]], ["add", "theorem", "one_lt_cast", ["nat"]], ["add", "theorem", "strict_mono_cast", ["nat"]]]}]}, {"timestamp": 1602207871, "sha": "f6836c16", "message": "chore(scripts): update nolints.txt (#4547)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1602200646, "sha": "8004fb68", "message": "chore(topology/algebra/group): move a lemma to `group_theory/coset` (#4522)\n`quotient_group_saturate` didn't use any topology. Move it to\n`group_theory/coset` and rename to\n`quotient_group.preimage_image_coe`.\nAlso rename `quotient_group.open_coe` to `quotient_group.is_open_map_coe`", "changes": [{"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["add", "theorem", "preimage_image_coe", ["quotient_group"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "theorem", "coe_gpow", ["quotient_group"]], ["mod", "theorem", "coe_inv", ["quotient_group"]], ["mod", "theorem", "coe_mul", ["quotient_group"]], ["mod", "theorem", "coe_one", ["quotient_group"]], ["mod", "theorem", "coe_pow", ["quotient_group"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "is_open_map_coe", ["quotient_group"]], ["del", "theorem", "open_coe", ["quotient_group"]], ["del", "theorem", "quotient_group_saturate", []]]}]}, {"timestamp": 1602195342, "sha": "ce999a89", "message": "feat(topology/basic): add `is_open_iff_ultrafilter` (#4529)\nRequested on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F)\nby Adam Topaz", "changes": [{"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "le_iff_ultrafilter", ["filter"]], ["add", "theorem", "mem_iff_ultrafilter", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "is_open_iff_ultrafilter", []]]}]}, {"timestamp": 1602180245, "sha": "a9124551", "message": "fix(bors.toml, build.yml): check for new linter, rename linter to \"Lint style\" (#4539)", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}]}, {"timestamp": 1602171678, "sha": "73f119e0", "message": "refactor(category_theory/pairwise): change direction of morphisms in the category of pairwise intersections (#4537)\nEven though this makes some proofs slightly more awkward, this is the more natural definition.\nIn a subsequent PR about another equivalent sheaf condition, it also makes proofs less awkward, too!", "changes": [{"oldPath": "src/category_theory/category/pairwise.lean", "newPath": "src/category_theory/category/pairwise.lean", "changes": [["add", "def", "cocone", ["category_theory", "pairwise"]], ["add", "def", "cocone_is_colimit", ["category_theory", "pairwise"]], ["add", "def", "cocone_ι_app", ["category_theory", "pairwise"]], ["del", "def", "cone", ["category_theory", "pairwise"]], ["del", "def", "cone_is_limit", ["category_theory", "pairwise"]], ["del", "def", "cone_π_app", ["category_theory", "pairwise"]], ["mod", "def", "diagram", ["category_theory", "pairwise"]], ["mod", "def", "diagram_obj", ["category_theory", "pairwise"]]]}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1602171676, "sha": "0ae4a3d5", "message": "fix(update-copy-mod-doc-exceptions.sh): cleanup, sort properly (#4533)\nFollowup to #4513.", "changes": [{"oldPath": "scripts/update-copy-mod-doc-exceptions.sh", "newPath": "scripts/update-copy-mod-doc-exceptions.sh", "changes": []}]}, {"timestamp": 1602171674, "sha": "427564e0", "message": "chore(algebra/monoid_algebra): Fix TODO about unwanted unfolding (#4532)\nFor whatever reason, supplying `zero` and `add` explicitly makes the proofs work inline.\nThis TODO was added by @johoelzl in f09abb1c47a846c33c0e996ffa9bf12951b40b15.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1602171672, "sha": "0c18d968", "message": "chore(data/padics/*): linting + squeeze_simp speedup (#4531)", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "def", "padic_seq", []]]}]}, {"timestamp": 1602171668, "sha": "60be8ed5", "message": "feat(data/equiv/*): to_monoid_hom_injective and to_ring_hom_injective (#4525)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "to_monoid_hom_injective", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "to_ring_hom_injective", ["ring_equiv"]]]}]}, {"timestamp": 1602171666, "sha": "253f2252", "message": "lint(computability/halting): docstrings (#4524)\nAdds docstrings in `computability/halting.lean`", "changes": [{"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}]}, {"timestamp": 1602171664, "sha": "e74bd261", "message": "chore(*): add a few more `unique` instances (#4511)\n* `linear_map.unique_of_left`, `linear_map.unique_of_right`,\n `continuous_linear_map.unique_of_left`,\n `continuous_linear_map.unique_of_right`: if either `M` or `M₂` is a\n `subsingleton`, then both `M →ₗ[R] M₂` and `M →L[R] M₂` are\n `unique`;\n* `pi.unique`: if each `β a` is `unique`, then `Π a, β a` is `unique`;\n* rename `function.injective.comap_subsingleton` to\n `function.injective.subsingleton`;\n* add `unique.mk'` and `function.injective.unique`;\n* add a few `simp` lemmas for `default`;\n* drop `nonempty_unique_or_exists_ne` and `subsingleton_or_exists_ne`;\n* rename `linear_map.coe_inj` to `coe_injective` and `continuous_linear_map.coe_inj` to `coe_fn_injective`,\n make them use `function.injective`.\nMotivated by #4407", "changes": [{"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "coe_inj", ["linear_map"]], ["add", "theorem", "coe_injective", ["linear_map"]], ["mod", "theorem", "to_add_monoid_hom_injective", ["linear_map"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "default_def", ["linear_map"]]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["del", "theorem", "comap_subsingleton", ["function", "injective"]], ["del", "def", "unique", ["function", "surjective"]], ["del", "theorem", "nonempty_unique_or_exists_ne", []], ["add", "theorem", "default_apply", ["pi"]], ["add", "theorem", "default_def", ["pi"]], ["del", "theorem", "subsingleton_or_exists_ne", []], ["add", "def", "mk'", ["unique"]]]}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_fn_injective", ["continuous_linear_map"]], ["del", "theorem", "coe_inj", ["continuous_linear_map"]], ["add", "theorem", "default_def", ["continuous_linear_map"]]]}]}, {"timestamp": 1602171662, "sha": "7b42c714", "message": "feat(archive/imo): revive @kbuzzard's imo2019_q1 (#4377)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo2019_q1.lean", "changes": [["add", "theorem", "imo2019Q1", []]]}]}, {"timestamp": 1602171659, "sha": "9b0d30c0", "message": "feat(number_theory/arithmetic_function): define `is_multiplicative` on `arithmetic_function`s, provides examples (#4312)\nProvides a few basic examples of important arithmetic functions\nDefines what it means for an arithmetic function to be multiplicative", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "gcd_mul_gcd_of_coprime_of_mul_eq_mul", ["nat"]]]}, {"oldPath": "src/number_theory/arithmetic_function.lean", "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["mod", "theorem", "add_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "coe_coe", ["nat", "arithmetic_function"]], ["mod", "theorem", "coe_inj", ["nat", "arithmetic_function"]], ["mod", "theorem", "ext", ["nat", "arithmetic_function"]], ["mod", "theorem", "ext_iff", ["nat", "arithmetic_function"]], ["add", "def", "id", ["nat", "arithmetic_function"]], ["add", "theorem", "id_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "int_coe_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "int_cast", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "theorem", "map_mul_of_coprime", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "theorem", "map_one", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "theorem", "mul", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "theorem", "nat_cast", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "theorem", "pmul", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "theorem", "ppow", ["nat", "arithmetic_function", "is_multiplicative"]], ["add", "def", "is_multiplicative", ["nat", "arithmetic_function"]], ["add", "theorem", "is_multiplicative_id", ["nat", "arithmetic_function"]], ["add", "theorem", "is_multiplicative_pow", ["nat", "arithmetic_function"]], ["add", "theorem", "is_multiplicative_sigma", ["nat", "arithmetic_function"]], ["add", "theorem", "is_multiplicative_zeta", ["nat", "arithmetic_function"]], ["mod", "theorem", "map_zero", ["nat", "arithmetic_function"]], ["mod", "theorem", "mul_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "mul_zeta_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "nat_coe_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "one_apply_ne", ["nat", "arithmetic_function"]], ["mod", "theorem", "one_one", ["nat", "arithmetic_function"]], ["add", "def", "pmul", ["nat", "arithmetic_function"]], ["add", "theorem", "pmul_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "pmul_comm", ["nat", "arithmetic_function"]], ["add", "theorem", "pmul_zeta", ["nat", "arithmetic_function"]], ["add", "def", "pow", ["nat", "arithmetic_function"]], ["add", "theorem", "pow_apply", ["nat", "arithmetic_function"]], ["add", "def", "ppow", ["nat", "arithmetic_function"]], ["add", "theorem", "ppow_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "ppow_succ'", ["nat", "arithmetic_function"]], ["add", "theorem", "ppow_succ", ["nat", "arithmetic_function"]], ["add", "theorem", "ppow_zero", ["nat", "arithmetic_function"]], ["add", "def", "sigma", ["nat", "arithmetic_function"]], ["add", "theorem", "sigma_apply", ["nat", "arithmetic_function"]], ["mod", "theorem", "to_fun_eq", ["nat", "arithmetic_function"]], ["mod", "theorem", "zero_apply", ["nat", "arithmetic_function"]], ["add", "def", "zeta", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_apply_ne", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_mul_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_mul_pow_eq_sigma", ["nat", "arithmetic_function"]], ["add", "theorem", "zeta_pmul", ["nat", "arithmetic_function"]], ["mod", "structure", "arithmetic_function", ["nat"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["mod", "def", "divisors", ["nat"]], ["del", "theorem", "divisors_eq_proper_divisors_insert_self", ["nat"]], ["add", "theorem", "divisors_eq_proper_divisors_insert_self_of_pos", ["nat"]], ["mod", "theorem", "divisors_zero", ["nat"]], ["mod", "def", "proper_divisors", ["nat"]]]}]}, {"timestamp": 1602163676, "sha": "5a01549f", "message": "lint(multiset/pi): remove unused instance (#4526)\nRemoves an unused instance from `multiset/pi`", "changes": [{"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/multiset/pi.lean", "newPath": "src/data/multiset/pi.lean", "changes": [["mod", "theorem", "cons_ne", ["multiset", "pi"]]]}]}, {"timestamp": 1602163674, "sha": "48a36046", "message": "feat(logic/nontrivial): a tactic to summon nontrivial instances (#4374)\n```\nGiven a goal `a = b` or `a ≤ b` in a type `α`, generates an additional hypothesis `nontrivial α`\n(as otherwise `α` is a subsingleton and the goal is trivial).\nAlternatively, given a hypothesis `a ≠ b` or `a < b` in a type `α`, tries to generate a `nontrivial α`\nhypothesis from existing hypotheses using `nontrivial_of_ne` and `nontrivial_of_lt`.\n```", "changes": [{"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": [["del", "theorem", "char_poly_monic_of_nontrivial", []]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": [["add", "theorem", "nontrivial_of_lt", []], ["mod", "theorem", "subsingleton_or_nontrivial", []]]}, {"oldPath": null, "newPath": "test/nontriviality.lean", "changes": []}]}, {"timestamp": 1602152603, "sha": "43f52dd7", "message": "chore(algebra/char_zero): rename vars, add `with_top` instance (#4523)\nMotivated by #3135.\n* Use `R` as a `Type*` variable;\n* Add `add_monoid_hom.map_nat_cast` and `with_top.coe_add_hom`;\n* Drop versions of `char_zero_of_inj_zero`, use `[add_left_cancel_monoid R]` instead.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["del", "theorem", "char_zero_of_inj_zero", ["add_group"]], ["mod", "theorem", "add_halves'", []], ["mod", "theorem", "add_self_eq_zero", []], ["mod", "theorem", "bit0_eq_zero", []], ["mod", "theorem", "char_zero_of_inj_zero", []], ["mod", "theorem", "half_add_self", []], ["mod", "theorem", "half_sub", []], ["mod", "theorem", "cast_add_one_ne_zero", ["nat"]], ["mod", "theorem", "cast_dvd_char_zero", ["nat"]], ["mod", "theorem", "cast_eq_zero", ["nat"]], ["mod", "theorem", "cast_inj", ["nat"]], ["mod", "theorem", "cast_injective", ["nat"]], ["mod", "theorem", "cast_ne_zero", ["nat"]], ["del", "theorem", "char_zero_of_inj_zero", ["ordered_cancel_comm_monoid"]], ["mod", "theorem", "sub_half", []], ["mod", "theorem", "two_ne_zero'", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "def", "coe_add_hom", ["with_top"]], ["add", "theorem", "coe_coe_add_hom", ["with_top"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "eq_nat_cast", ["add_monoid_hom"]], ["add", "theorem", "map_nat_cast", ["add_monoid_hom"]]]}]}, {"timestamp": 1602135126, "sha": "34a44717", "message": "chore(data/quot): `quot.mk` etc are surjective (#4517)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["mod", "theorem", "lift_on_beta₂", ["quotient"]], ["add", "theorem", "surjective_quotient_mk'", ["quotient"]], ["add", "theorem", "surjective_quot_mk", []], ["add", "theorem", "surjective_quotient_mk", []]]}]}, {"timestamp": 1602135124, "sha": "4f757600", "message": "chore(*/hom,equiv): Split `monoid_hom` into more fundamental structures, and reuse them elsewhere (#4423)\nNotably this adds `add_hom` and `mul_hom`, which become base classes of `add_equiv`, `mul_equiv`, `linear_map`, and `linear_equiv`.\nPrimarily to avoid breaking assumptions of field order in `monoid_hom` and `add_monoid_hom`, this also adds `one_hom` and `zero_hom`.\nA massive number of lemmas here are totally uninteresting and hold for pretty much all objects that define `coe_to_fun`.\nThis PR translates all those lemmas, but doesn't bother attempting to generalize later ones.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "structure", "add_hom", []], ["mod", "structure", "add_monoid_hom", []], ["mod", "theorem", "cancel_left", ["monoid_hom"]], ["mod", "theorem", "cancel_right", ["monoid_hom"]], ["mod", "theorem", "coe_inj", ["monoid_hom"]], ["mod", "theorem", "coe_mk", ["monoid_hom"]], ["mod", "def", "comp", ["monoid_hom"]], ["mod", "theorem", "comp_apply", ["monoid_hom"]], ["mod", "theorem", "comp_assoc", ["monoid_hom"]], ["mod", "theorem", "comp_id", ["monoid_hom"]], ["mod", "theorem", "congr_arg", ["monoid_hom"]], ["mod", "theorem", "congr_fun", ["monoid_hom"]], ["mod", "theorem", "ext", ["monoid_hom"]], ["mod", "theorem", "ext_iff", ["monoid_hom"]], ["mod", "def", "id", ["monoid_hom"]], ["mod", "theorem", "id_apply", ["monoid_hom"]], ["mod", "theorem", "id_comp", ["monoid_hom"]], ["mod", "theorem", "map_mul", ["monoid_hom"]], ["mod", "theorem", "map_one", ["monoid_hom"]], ["mod", "theorem", "one_apply", ["monoid_hom"]], ["mod", "theorem", "to_fun_eq_coe", ["monoid_hom"]], ["mod", "structure", "monoid_hom", []], ["add", "theorem", "cancel_left", ["mul_hom"]], ["add", "theorem", "cancel_right", ["mul_hom"]], ["add", "theorem", "coe_inj", ["mul_hom"]], ["add", "theorem", "coe_mk", ["mul_hom"]], ["add", "def", "comp", ["mul_hom"]], ["add", "theorem", "comp_apply", ["mul_hom"]], ["add", "theorem", "comp_assoc", ["mul_hom"]], ["add", "theorem", "comp_id", ["mul_hom"]], ["add", "theorem", "congr_arg", ["mul_hom"]], ["add", "theorem", "congr_fun", ["mul_hom"]], ["add", "theorem", "ext", ["mul_hom"]], ["add", "theorem", "ext_iff", ["mul_hom"]], ["add", "def", "id", ["mul_hom"]], ["add", "theorem", "id_apply", ["mul_hom"]], ["add", "theorem", "id_comp", ["mul_hom"]], ["add", "theorem", "map_mul", ["mul_hom"]], ["add", "theorem", "to_fun_eq_coe", ["mul_hom"]], ["add", "structure", "mul_hom", []], ["add", "theorem", "cancel_left", ["one_hom"]], ["add", "theorem", "cancel_right", ["one_hom"]], ["add", "theorem", "coe_inj", ["one_hom"]], ["add", "theorem", "coe_mk", ["one_hom"]], ["add", "def", "comp", ["one_hom"]], ["add", "theorem", "comp_apply", ["one_hom"]], ["add", "theorem", "comp_assoc", ["one_hom"]], ["add", "theorem", "comp_id", ["one_hom"]], ["add", "theorem", "congr_arg", ["one_hom"]], ["add", "theorem", "congr_fun", ["one_hom"]], ["add", "theorem", "ext", ["one_hom"]], ["add", "theorem", "ext_iff", ["one_hom"]], ["add", "def", "id", ["one_hom"]], ["add", "theorem", "id_apply", ["one_hom"]], ["add", "theorem", "id_comp", ["one_hom"]], ["add", "theorem", "map_one", ["one_hom"]], ["add", "theorem", "one_apply", ["one_hom"]], ["add", "theorem", "to_fun_eq_coe", ["one_hom"]], ["add", "structure", "one_hom", []], ["add", "structure", "zero_hom", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["mod", "structure", "add_equiv", []], ["mod", "structure", "mul_equiv", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "to_add_equiv", ["linear_equiv"]], ["add", "def", "to_equiv", ["linear_equiv"]]]}]}, {"timestamp": 1602131840, "sha": "b4dc9128", "message": "ci(*): run style lint in parallel job, fix update-copy-mod-doc-exceptions.sh (#4513)\nFollowup to #4486:\n- run the linter in a separate parallel job, per request\n- the update-*.sh script now correctly generates a full exceptions file\n- add some more comments to the shell scripts", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/copy-mod-doc-exceptions.txt", "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": "scripts/lint-copy-mod-doc.sh", "newPath": "scripts/lint-copy-mod-doc.sh", "changes": []}, {"oldPath": "scripts/update-copy-mod-doc-exceptions.sh", "newPath": "scripts/update-copy-mod-doc-exceptions.sh", "changes": []}]}, {"timestamp": 1602131838, "sha": "3d1d4fbe", "message": "feat(data/polynomial/degree/trailing_degree): fixed formatting and streamlined a couple of proofs (#4509)", "changes": [{"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "nat_trailing_degree_eq_support_min'", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_le_of_mem_supp", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_mem_support_of_nonzero", ["polynomial"]], ["add", "theorem", "trailing_coeff_eq_zero", ["polynomial"]], ["add", "theorem", "trailing_coeff_nonzero_iff_nonzero", ["polynomial"]]]}]}, {"timestamp": 1602128696, "sha": "7a715545", "message": "doc(tactic/slim_check): improve advice in error message (#4520)\nThe error message in `slim_check` suggests to look for `testable` and it now specifies which namespace to find `testable` in.", "changes": [{"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}]}, {"timestamp": 1602119327, "sha": "e9d1dc47", "message": "chore(scripts): update nolints.txt (#4521)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1602113252, "sha": "a5b0376c", "message": "chore(topology/algebra/monoid,group): rename variables (#4516)\nUse `M`, `N` for monoids, `G`, `H` for groups.", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "add_Z", ["add_group_with_zero_nhd"]], ["mod", "theorem", "exists_Z_half", ["add_group_with_zero_nhd"]], ["mod", "theorem", "neg_Z", ["add_group_with_zero_nhd"]], ["mod", "theorem", "nhds_eq", ["add_group_with_zero_nhd"]], ["mod", "theorem", "nhds_zero_eq_Z", ["add_group_with_zero_nhd"]], ["mod", "theorem", "compact_covered_by_mul_left_translates", []], ["mod", "theorem", "compact_open_separated_mul", []], ["mod", "theorem", "inv", ["continuous"]], ["mod", "theorem", "sub", ["continuous"]], ["mod", "theorem", "inv", ["continuous_at"]], ["mod", "theorem", "continuous_inv", []], ["mod", "theorem", "inv", ["continuous_on"]], ["mod", "theorem", "sub", ["continuous_on"]], ["mod", "theorem", "continuous_on_inv", []], ["mod", "theorem", "continuous_sub", []], ["mod", "theorem", "inv", ["continuous_within_at"]], ["mod", "theorem", "exists_nhds_split4", []], ["mod", "theorem", "exists_nhds_split", []], ["mod", "theorem", "exists_nhds_split_inv", []], ["mod", "theorem", "inv", ["filter", "tendsto"]], ["mod", "theorem", "sub", ["filter", "tendsto"]], ["mod", "theorem", "is_closed_map_mul_left", []], ["mod", "theorem", "is_closed_map_mul_right", []], ["mod", "theorem", "is_open_map_mul_left", []], ["mod", "theorem", "is_open_map_mul_right", []], ["mod", "theorem", "is_open_mul_left", []], ["mod", "theorem", "is_open_mul_right", []], ["mod", "theorem", "nhds_is_mul_hom", []], ["mod", "theorem", "nhds_mul", []], ["mod", "theorem", "nhds_one_symm", []], ["mod", "theorem", "nhds_translation", []], ["mod", "theorem", "nhds_translation_mul_inv", []], ["mod", "theorem", "one_open_separated_mul", []], ["mod", "theorem", "open_coe", ["quotient_group"]], ["mod", "theorem", "quotient_group_saturate", []], ["mod", "theorem", "tendsto_inv", []], ["mod", "theorem", "regular_space", ["topological_group"]], ["mod", "theorem", "t1_space", ["topological_group"]], ["mod", "theorem", "t2_space", ["topological_group"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["mod", "theorem", "mul", ["continuous"]], ["mod", "theorem", "pow", ["continuous"]], ["mod", "theorem", "mul", ["continuous_at"]], ["mod", "theorem", "continuous_finset_prod", []], ["mod", "theorem", "continuous_list_prod", []], ["mod", "theorem", "continuous_mul", []], ["mod", "theorem", "continuous_mul_left", []], ["mod", "theorem", "continuous_mul_right", []], ["mod", "theorem", "continuous_multiset_prod", []], ["mod", "theorem", "mul", ["continuous_on"]], ["mod", "theorem", "continuous_pow", []], ["mod", "theorem", "mul", ["continuous_within_at"]], ["mod", "theorem", "mul", ["filter", "tendsto"]], ["mod", "theorem", "mem_nhds_one", ["submonoid"]], ["mod", "theorem", "tendsto_finset_prod", []], ["mod", "theorem", "tendsto_list_prod", []], ["mod", "theorem", "tendsto_mul", []], ["mod", "theorem", "tendsto_multiset_prod", []]]}]}, {"timestamp": 1602106757, "sha": "d67062f4", "message": "chore(algebra/pointwise): add `###` here and there (#4514)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}]}, {"timestamp": 1602106755, "sha": "fa8b7ba2", "message": "chore(topology/*): use dot notation for `is_open.prod` and `is_closed.prod` (#4510)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod", ["is_closed"]], ["del", "theorem", "is_closed_prod", []], ["add", "theorem", "prod", ["is_open"]], ["del", "theorem", "is_open_prod", []]]}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1602102340, "sha": "2b89d59b", "message": "chore(ring_theory/coprime): weaken assumptions of finset.prod_dvd_of_coprime (#4506)", "changes": [{"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime.lean", "changes": [["mod", "theorem", "prod_dvd_of_coprime", ["finset"]]]}]}, {"timestamp": 1602094171, "sha": "4635aee7", "message": "chore(algebra/continuous_functions): `coninuous` -> `continuous` (#4508)", "changes": [{"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}]}, {"timestamp": 1602094168, "sha": "4e8427ec", "message": "fix(data/list/defs): remove map_head; rename map_last to modify_last (#4507)\n`map_head` is removed in favour of the equivalent `modify_head`.\n`map_last` is renamed to `modify_last` for consistency with the other\n`modify_*` functions.", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["del", "def", "map_head", ["list"]], ["del", "def", "map_last", ["list"]], ["add", "def", "modify_last", ["list"]]]}]}, {"timestamp": 1602094165, "sha": "a4a20ac3", "message": "doc(data/num/basic): added doc-strings to most defs (#4439)", "changes": [{"oldPath": "src/data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": []}]}, {"timestamp": 1602086891, "sha": "8f9c10fc", "message": "feat(data/matrix): add `matrix.mul_sub` and `matrix.sub_mul` (#4505)\nI was quite surprised that we didn't have this yet, but I guess they weren't needed when `sub_eq_add_neg` was still `@[simp]`.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1602086888, "sha": "2d34e94a", "message": "chore(*big_operators*): line length (#4504)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_eq_fold", ["finset"]], ["mod", "theorem", "prod_subset", ["finset"]], ["mod", "theorem", "map_prod", ["ring_hom"]]]}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}]}, {"timestamp": 1602086885, "sha": "6b50fb99", "message": "fix(tactic/ring): use int_sub_hack to avoid defeq blowup (#4503)", "changes": [{"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1602080823, "sha": "4db1c72f", "message": "ci(scripts/*): linting for copyright, imports, module docstrings, line length (#4486)\nThis PR adds some scripts to check the `.lean` files in `src/` and `archive/` for the following issues (which are out of scope for the current linter):\n- Malformed or missing copyright header\n- More than one file imported per line\n- Module docstring missing, or too late\n- Lines of length > 100 (unless they contain `http`)\nThe scripts are run at the end of our \"tests\" job since the \"lint\" job usually takes longer to run. (This isn't a big deal though, since they're quick.)\nCurrent problems are saved in the file `scripts/copy-mod-doc-exceptions.txt` and ignored so that we don't have to fix everything up front. Over time, this should get shorter as we fix things!\nSeparately, this also fixes some warnings in our GitHub actions workflow (see [this blog post](https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/)).", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": null, "newPath": "scripts/copy-mod-doc-exceptions.txt", "changes": []}, {"oldPath": null, "newPath": "scripts/lint-copy-mod-doc.py", "changes": []}, {"oldPath": null, "newPath": "scripts/lint-copy-mod-doc.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/update-copy-mod-doc-exceptions.sh", "changes": []}, {"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}]}, {"timestamp": 1602080818, "sha": "c9d4567e", "message": "lint(data/matrix/basic): add definition docstrings (#4478)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1602065525, "sha": "6a852793", "message": "fix(tactic/doc_commands): do not construct json by hand (#4501)\nFixes three lines going over the 100 character limit.\nThe first one was a hand-rolled JSON serializer, I took the liberty to migrate it to the new `json` API.", "changes": [{"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}]}, {"timestamp": 1602065524, "sha": "0386adaf", "message": "chore(data/tree): linting (#4499)", "changes": [{"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}]}, {"timestamp": 1602065522, "sha": "cbbc123e", "message": "lint(category_theory/equivalence): docstring and a module doc (#4495)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}]}, {"timestamp": 1602065520, "sha": "8a4b491c", "message": "feat(ring_theory/witt_vector/structure_polynomial): {map_}witt_structure_int (#4465)\nThis is the second PR in a series on a fundamental theorem about Witt polynomials.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": [["add", "theorem", "C_p_pow_dvd_bind₁_rename_witt_polynomial_sub_sum", []], ["add", "theorem", "bind₁_rename_expand_witt_polynomial", []], ["add", "theorem", "map_witt_structure_int", []], ["add", "theorem", "witt_structure_rat_rec", []], ["add", "theorem", "witt_structure_rat_rec_aux", []]]}]}, {"timestamp": 1602057394, "sha": "e5ce9d3d", "message": "chore(data/quot): linting (#4500)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}]}, {"timestamp": 1602057392, "sha": "ed9ef1b4", "message": "chore(*): normalise copyright headers (#4497)\nThis diff makes sure that all files start with a copyright header\nof the following shape\n```\n/-\nCopyright ...\n... Apache ...\nAuthor...\n-/\n```\nSome files used to have a short description of the contents\nin the same comment block.\nSuch comments have *not* been turned into module docstrings,\nbut simply moved to a regular comment block below the copyright header.\nTurning these comments into good module docstrings is an\neffort that should be undertaken in future PRs.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/tactic/derive_fintype.lean", "newPath": "src/tactic/derive_fintype.lean", "changes": []}, {"oldPath": "src/tactic/derive_inhabited.lean", "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/omega/clause.lean", "newPath": "src/tactic/omega/clause.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_ees.lean", "newPath": "src/tactic/omega/find_ees.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_scalars.lean", "newPath": "src/tactic/omega/find_scalars.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/lin_comb.lean", "newPath": "src/tactic/omega/lin_comb.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/prove_unsats.lean", "newPath": "src/tactic/omega/prove_unsats.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": []}]}, {"timestamp": 1602051791, "sha": "3c755273", "message": "lint(group_theory/*): docstrings and an inhabited instance (#4493)\nAn inhabited instance for `presented_group`\nDocstrings in `group_theory/abelianization` and `group_theory/congruence`.", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": []}]}, {"timestamp": 1602044717, "sha": "8c528b9a", "message": "lint(group_theory/perm/*): docstrings (#4492)\nAdds missing docstrings in `group_theory/perm/cycles` and `group_theory/perm/sign`.", "changes": [{"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}]}, {"timestamp": 1602032810, "sha": "cb3118d5", "message": "chore(scripts): update nolints.txt (#4490)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1602032807, "sha": "2e77ef6a", "message": "lint(order/lexographic, pilex): docstrings (#4489)\nDocstrings in `order/lexographic` and `order/pilex`", "changes": [{"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}]}, {"timestamp": 1602032805, "sha": "afffab1d", "message": "lint(order/order_iso_nat): docstrings (#4488)\nAdds docstrings to `rel_embedding.nat_lt` and `rel_embedding.nat_gt`", "changes": [{"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}]}, {"timestamp": 1602032802, "sha": "93cdc3a5", "message": "feat(control/traversable/basic): composition of applicative transformations (#4487)\nAdded composition law for applicative transformations, added rest of interface for coercion of applicative transformations to functions (lifted from `monoid_hom`), and proved composition was associative and has an identity. Also corrected some documentation.", "changes": [{"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": [["add", "theorem", "app_eq_coe", ["applicative_transformation"]], ["add", "theorem", "coe_inj", ["applicative_transformation"]], ["add", "theorem", "coe_mk", ["applicative_transformation"]], ["add", "def", "comp", ["applicative_transformation"]], ["add", "theorem", "comp_apply", ["applicative_transformation"]], ["add", "theorem", "comp_assoc", ["applicative_transformation"]], ["add", "theorem", "comp_id", ["applicative_transformation"]], ["add", "theorem", "congr_arg", ["applicative_transformation"]], ["add", "theorem", "congr_fun", ["applicative_transformation"]], ["add", "theorem", "ext", ["applicative_transformation"]], ["add", "theorem", "ext_iff", ["applicative_transformation"]], ["add", "theorem", "id_comp", ["applicative_transformation"]], ["add", "theorem", "preserves_map'", ["applicative_transformation"]]]}]}, {"timestamp": 1602032801, "sha": "fe8b6315", "message": "lint(ring_theory/*): docstrings (#4485)\nDocstrings in `ring_theory/ideal/operations`, `ring_theory/multiplicity`, and `ring_theory/ring_invo`.", "changes": [{"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/ring_invo.lean", "newPath": "src/ring_theory/ring_invo.lean", "changes": []}]}, {"timestamp": 1602024354, "sha": "7488f8ef", "message": "lint(order/bounded_lattice): docstring (#4484)", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1602024352, "sha": "f4ccbdf5", "message": "feat(data/nat/basic): add_succ_lt_add (#4483)\nAdd the lemma that, for natural numbers, if `a < b` and `c < d` then\n`a + c + 1 < b + d` (i.e. a stronger version of `add_lt_add` for the\nnatural number case). `library_search` did not find this in mathlib.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_succ_lt_add", ["nat"]]]}]}, {"timestamp": 1602024350, "sha": "f88234d1", "message": "feat(measure_theory): integral of a non-negative function is >0 iff μ(support f) > 0 (#4410)\nAlso add a few supporting lemmas", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "le_iff_eq", ["has_le", "le"]], ["add", "theorem", "lt_iff_ne", ["has_le", "le"]]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_of_support_subset", ["set"]], ["add", "theorem", "indicator_support", ["set"]]]}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["add", "theorem", "support_eq_empty_iff", ["function"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_eq_zero_iff_of_nonneg", ["measure_theory"]], ["add", "theorem", "integral_eq_zero_iff_of_nonneg_ae", ["measure_theory"]], ["add", "theorem", "integral_pos_iff_support_of_nonneg", ["measure_theory"]], ["add", "theorem", "integral_pos_iff_support_of_nonneg_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "lintegral_eq_zero_iff", ["measure_theory"]], ["add", "theorem", "lintegral_pos_iff_support", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_eq_integral_of_support_subset", ["interval_integral"]], ["add", "theorem", "integral_eq_zero_iff_of_le_of_nonneg_ae", ["interval_integral"]], ["add", "theorem", "integral_eq_zero_iff_of_nonneg_ae", ["interval_integral"]], ["add", "theorem", "integral_non_measurable", ["interval_integral"]], ["add", "theorem", "integral_pos_iff_support_of_nonneg_ae'", ["interval_integral"]], ["add", "theorem", "integral_pos_iff_support_of_nonneg_ae", ["interval_integral"]], ["add", "theorem", "integral_zero", ["interval_integral"]], ["add", "theorem", "interval_integrable", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["add", "theorem", "volume_pos_of_nhds_real", ["filter", "eventually"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "integrable_of_compact_closure_support", ["continuous"]], ["add", "theorem", "set_integral_eq_zero_iff_of_nonneg_ae", ["measure_theory"]], ["add", "theorem", "set_integral_pos_iff_support_of_nonneg_ae", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "le_iff_eq", ["filter", "eventually_le"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "exists_Ioo_subset", ["filter", "eventually"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "eventually_mem", ["is_open"]]]}]}, {"timestamp": 1602019414, "sha": "5192fd94", "message": "feat(data/polynomial/degree/basic): add lemmas dealing with monomials, their support and their nat_degrees (#4475)", "changes": [{"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "card_support_C_mul_X_pow_le_one", ["polynomial"]], ["add", "theorem", "le_degree_of_mem_supp", ["polynomial"]], ["add", "theorem", "le_nat_degree_of_mem_supp", ["polynomial"]], ["add", "theorem", "mem_support_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_X_pow_le", ["polynomial"]], ["add", "theorem", "nat_degree_C_mul_X_pow_of_nonzero", ["polynomial"]], ["add", "theorem", "nat_degree_eq_support_max'", ["polynomial"]], ["add", "theorem", "nat_degree_mem_support_of_nonzero", ["polynomial"]], ["add", "theorem", "nonempty_support_iff", ["polynomial"]], ["add", "theorem", "support_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "support_C_mul_X_pow_nonzero", ["polynomial"]]]}]}, {"timestamp": 1602019412, "sha": "d768e46f", "message": "feat(ring_theory/witt_vector/structure_polynomial): witt_structure_rat{_prop} (#4464)\nThis is the first PR in a series on a fundamental theorem for Witt polynomials.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": null, "newPath": "src/ring_theory/witt_vector/structure_polynomial.lean", "changes": [["add", "theorem", "witt_structure_rat_exists_unique", []], ["add", "theorem", "witt_structure_rat_prop", []]]}]}, {"timestamp": 1602013009, "sha": "7948b5a2", "message": "chore(*): fix authorship for split files (#4480)\nA few files with missing copyright headers in #4477 came from splitting up older files, so the attribution was incorrect:\n- `data/setoid/partition.lean` was split from `data/setoid.lean` in #2853.\n- `data/finset/order.lean` was split from `algebra/big_operators.lean` in #3495.\n- `group_theory/submonoid/operations.lean` was split from `group_theory/submonoid.lean` in #3058.", "changes": [{"oldPath": "src/data/finset/order.lean", "newPath": "src/data/finset/order.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}]}, {"timestamp": 1602006004, "sha": "ac058890", "message": "chore(topology/list): one import per line (#4479)\nThis one seems to have slipped through previous efforts", "changes": [{"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}]}, {"timestamp": 1601997791, "sha": "e559ca98", "message": "chore(*): add copyright headers (#4477)", "changes": [{"oldPath": "src/category_theory/category/pairwise.lean", "newPath": "src/category_theory/category/pairwise.lean", "changes": []}, {"oldPath": "src/category_theory/limits/punit.lean", "newPath": "src/category_theory/limits/punit.lean", "changes": []}, {"oldPath": "src/data/finset/order.lean", "newPath": "src/data/finset/order.lean", "changes": []}, {"oldPath": "src/data/list/indexes.lean", "newPath": "src/data/list/indexes.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": []}]}, {"timestamp": 1601997789, "sha": "74161277", "message": "feat(data/polynomial/ring_division): add multiplicity of sum of polynomials is at least minimum of multiplicities (#4442)\nI've added the lemma `root_multiplicity_add` inside `data/polynomial/ring_division` that says that the multiplicity of a root in a sum of two polynomials is at least the minimum of the multiplicities.", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "min_pow_dvd_add", []]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "root_multiplicity_X_sub_C_pow", ["polynomial"]], ["add", "theorem", "root_multiplicity_add", ["polynomial"]], ["add", "theorem", "root_multiplicity_of_dvd", ["polynomial"]]]}]}, {"timestamp": 1601988110, "sha": "8d199395", "message": "feat(*): make `int.le` irreducible (#4474)\nThere's very rarely a reason to unfold `int.le` and it can create trouble: https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/deep.20recursion.20was.20detected.20at.20'replace'", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/range.lean", "newPath": "src/data/int/range.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}]}, {"timestamp": 1601988107, "sha": "99e308d3", "message": "chore(parity): even and odd in semiring (#4473)\nReplaces the ad-hoc `nat.even`, `nat.odd`, `int.even` and `int.odd` by definitions that make sense in semirings and get that `odd` can be `rintros`/`rcases`'ed. This requires almost no change except that `even` is not longer usable as a dot notation (which I see as a feature since I find `even n` to be more readable than `n.even`).", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "def", "even", []], ["add", "theorem", "even_iff_two_dvd", []], ["add", "def", "odd", []]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["mod", "theorem", "convex_on_pow_of_even", []], ["mod", "theorem", "int_prod_range_nonneg", []]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["del", "def", "even", ["int"]], ["mod", "theorem", "even_add", ["int"]], ["mod", "theorem", "even_bit0", ["int"]], ["mod", "theorem", "even_coe_nat", ["int"]], ["mod", "theorem", "even_iff", ["int"]], ["mod", "theorem", "even_mul", ["int"]], ["mod", "theorem", "even_neg", ["int"]], ["mod", "theorem", "even_pow", ["int"]], ["mod", "theorem", "even_sub", ["int"]], ["mod", "theorem", "even_zero", ["int"]], ["mod", "theorem", "mod_two_ne_one", ["int"]], ["mod", "theorem", "mod_two_ne_zero", ["int"]], ["mod", "theorem", "not_even_bit1", ["int"]], ["mod", "theorem", "not_even_one", ["int"]], ["del", "def", "odd", ["int"]], ["del", "theorem", "odd_def", ["int"]], ["add", "theorem", "odd_iff", ["int"]], ["add", "theorem", "odd_iff_not_even", ["int"]], ["mod", "theorem", "two_dvd_ne_zero", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["mod", "theorem", "add", ["nat", "even"]], ["mod", "theorem", "sub", ["nat", "even"]], ["del", "def", "even", ["nat"]], ["mod", "theorem", "even_add", ["nat"]], ["mod", "theorem", "even_bit0", ["nat"]], ["mod", "theorem", "even_iff", ["nat"]], ["mod", "theorem", "even_mul", ["nat"]], ["mod", "theorem", "even_pow", ["nat"]], ["mod", "theorem", "even_sub", ["nat"]], ["mod", "theorem", "even_succ", ["nat"]], ["mod", "theorem", "mod_two_ne_one", ["nat"]], ["mod", "theorem", "mod_two_ne_zero", ["nat"]], ["mod", "theorem", "not_even_bit1", ["nat"]], ["del", "def", "odd", ["nat"]], ["del", "theorem", "odd_def", ["nat"]], ["add", "theorem", "odd_iff", ["nat"]], ["add", "theorem", "odd_iff_not_even", ["nat"]]]}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1601988105, "sha": "1d1a0415", "message": "chore(data/mv_polynomial/basic): coeff_mul, more golfing and speedup (#4472)", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "mul_eq_zero_of_ne_zero_imp_eq_zero", []]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1601988103, "sha": "8cebd2b1", "message": "chore(algebra/algebra): Split subalgebras into their own file (#4471)\nThis matches how `subring` and `submonoid` both have their own files.\nThis also remove `noncomputable theory` which is unnecessary for almost all the definitions", "changes": [{"oldPath": "src/algebra/algebra/basic.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": [["del", "def", "of_bijective", ["alg_equiv"]], ["del", "def", "cod_restrict", ["alg_hom"]], ["del", "theorem", "coe_range", ["alg_hom"]], ["del", "theorem", "injective_cod_restrict", ["alg_hom"]], ["del", "theorem", "mem_range", ["alg_hom"]], ["del", "def", "adjoin", ["algebra"]], ["del", "theorem", "bijective_algebra_map_iff", ["algebra"]], ["del", "def", "bot_equiv", ["algebra"]], ["del", "def", "bot_equiv_of_injective", ["algebra"]], ["del", "theorem", "coe_bot", ["algebra"]], ["del", "theorem", "coe_top", ["algebra"]], ["del", "theorem", "comap_top", ["algebra"]], ["del", "theorem", "eq_top_iff", ["algebra"]], ["del", "theorem", "map_bot", ["algebra"]], ["del", "theorem", "map_top", ["algebra"]], ["del", "theorem", "mem_bot", ["algebra"]], ["del", "theorem", "mem_top", ["algebra"]], ["del", "theorem", "surjective_algebra_map_iff", ["algebra"]], ["del", "def", "to_top", ["algebra"]], ["del", "theorem", "mem_subalgebra_of_is_subring", []], ["del", "theorem", "mem_subalgebra_of_subring", []], ["del", "theorem", "mem_subalgebra_of_subsemiring", []], ["del", "theorem", "add_mem", ["subalgebra"]], ["del", "theorem", "algebra_map_mem", ["subalgebra"]], ["del", "theorem", "coe_int_mem", ["subalgebra"]], ["del", "theorem", "coe_nat_mem", ["subalgebra"]], ["del", "theorem", "coe_val", ["subalgebra"]], ["del", "def", "comap'", ["subalgebra"]], ["del", "def", "comap", ["subalgebra"]], ["del", "theorem", "ext", ["subalgebra"]], ["del", "theorem", "ext_iff", ["subalgebra"]], ["del", "theorem", "gsmul_mem", ["subalgebra"]], ["del", "theorem", "list_prod_mem", ["subalgebra"]], ["del", "theorem", "list_sum_mem", ["subalgebra"]], ["del", "def", "map", ["subalgebra"]], ["del", "theorem", "map_injective", ["subalgebra"]], ["del", "theorem", "map_le", ["subalgebra"]], ["del", "theorem", "map_mono", ["subalgebra"]], ["del", "theorem", "mem_coe", ["subalgebra"]], ["del", "theorem", "mem_map", ["subalgebra"]], ["del", "theorem", "mem_to_submodule", ["subalgebra"]], ["del", "theorem", "mul_mem", ["subalgebra"]], ["del", "theorem", "multiset_prod_mem", ["subalgebra"]], ["del", "theorem", "multiset_sum_mem", ["subalgebra"]], ["del", "theorem", "neg_mem", ["subalgebra"]], ["del", "theorem", "nsmul_mem", ["subalgebra"]], ["del", "theorem", "one_mem", ["subalgebra"]], ["del", "theorem", "pow_mem", ["subalgebra"]], ["del", "theorem", "prod_mem", ["subalgebra"]], ["del", "theorem", "range_le", ["subalgebra"]], ["del", "theorem", "range_subset", ["subalgebra"]], ["del", "theorem", "range_val", ["subalgebra"]], ["del", "theorem", "smul_mem", ["subalgebra"]], ["del", "theorem", "srange_le", ["subalgebra"]], ["del", "theorem", "sub_mem", ["subalgebra"]], ["del", "theorem", "sum_mem", ["subalgebra"]], ["del", "def", "to_submodule", ["subalgebra"]], ["del", "theorem", "to_submodule_inj", ["subalgebra"]], ["del", "theorem", "to_submodule_injective", ["subalgebra"]], ["del", "def", "to_subring", ["subalgebra"]], ["del", "def", "under", ["subalgebra"]], ["del", "def", "val", ["subalgebra"]], ["del", "theorem", "val_apply", ["subalgebra"]], ["del", "theorem", "zero_mem", ["subalgebra"]], ["del", "structure", "subalgebra", []], ["del", "def", "subalgebra_of_is_subring", []], ["del", "def", "subalgebra_of_subring", []], ["del", "def", "subalgebra_of_subsemiring", []]]}, {"oldPath": null, "newPath": "src/algebra/algebra/subalgebra.lean", "changes": [["add", "def", "cod_restrict", ["alg_hom"]], ["add", "theorem", "coe_range", ["alg_hom"]], ["add", "theorem", "injective_cod_restrict", ["alg_hom"]], ["add", "theorem", "mem_range", ["alg_hom"]], ["add", "def", "adjoin", ["algebra"]], ["add", "theorem", "bijective_algebra_map_iff", ["algebra"]], ["add", "theorem", "coe_bot", ["algebra"]], ["add", "theorem", "coe_top", ["algebra"]], ["add", "theorem", "comap_top", ["algebra"]], ["add", "theorem", "eq_top_iff", ["algebra"]], ["add", "theorem", "map_bot", ["algebra"]], ["add", "theorem", "map_top", ["algebra"]], ["add", "theorem", "mem_bot", ["algebra"]], ["add", "theorem", "mem_top", ["algebra"]], ["add", "theorem", "surjective_algebra_map_iff", ["algebra"]], ["add", "def", "to_top", ["algebra"]], ["add", "theorem", "mem_subalgebra_of_is_subring", []], ["add", "theorem", "mem_subalgebra_of_subring", []], ["add", "theorem", "mem_subalgebra_of_subsemiring", []], ["add", "theorem", "add_mem", ["subalgebra"]], ["add", "theorem", "algebra_map_mem", ["subalgebra"]], ["add", "theorem", "coe_int_mem", ["subalgebra"]], ["add", "theorem", "coe_nat_mem", ["subalgebra"]], ["add", "theorem", "coe_val", ["subalgebra"]], ["add", "def", "comap'", ["subalgebra"]], ["add", "def", "comap", ["subalgebra"]], ["add", "theorem", "ext", ["subalgebra"]], ["add", "theorem", "ext_iff", ["subalgebra"]], ["add", "theorem", "gsmul_mem", ["subalgebra"]], ["add", "theorem", "list_prod_mem", ["subalgebra"]], ["add", "theorem", "list_sum_mem", ["subalgebra"]], ["add", "def", "map", ["subalgebra"]], ["add", "theorem", "map_injective", ["subalgebra"]], ["add", "theorem", "map_le", ["subalgebra"]], ["add", "theorem", "map_mono", ["subalgebra"]], ["add", "theorem", "mem_coe", ["subalgebra"]], ["add", "theorem", "mem_map", ["subalgebra"]], ["add", "theorem", "mem_to_submodule", ["subalgebra"]], ["add", "theorem", "mul_mem", ["subalgebra"]], ["add", "theorem", "multiset_prod_mem", ["subalgebra"]], ["add", "theorem", "multiset_sum_mem", ["subalgebra"]], ["add", "theorem", "neg_mem", ["subalgebra"]], ["add", "theorem", "nsmul_mem", ["subalgebra"]], ["add", "theorem", "one_mem", ["subalgebra"]], ["add", "theorem", "pow_mem", ["subalgebra"]], ["add", "theorem", "prod_mem", ["subalgebra"]], ["add", "theorem", "range_le", ["subalgebra"]], ["add", "theorem", "range_subset", ["subalgebra"]], ["add", "theorem", "range_val", ["subalgebra"]], ["add", "theorem", "smul_mem", ["subalgebra"]], ["add", "theorem", "srange_le", ["subalgebra"]], ["add", "theorem", "sub_mem", ["subalgebra"]], ["add", "theorem", "sum_mem", ["subalgebra"]], ["add", "def", "to_submodule", ["subalgebra"]], ["add", "theorem", "to_submodule_inj", ["subalgebra"]], ["add", "theorem", "to_submodule_injective", ["subalgebra"]], ["add", "def", "to_subring", ["subalgebra"]], ["add", "def", "under", ["subalgebra"]], ["add", "def", "val", ["subalgebra"]], ["add", "theorem", "val_apply", ["subalgebra"]], ["add", "theorem", "zero_mem", ["subalgebra"]], ["add", "structure", "subalgebra", []], ["add", "def", "subalgebra_of_is_subring", []], ["add", "def", "subalgebra_of_subring", []], ["add", "def", "subalgebra_of_subsemiring", []]]}, {"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}]}, {"timestamp": 1601988102, "sha": "94bc31d3", "message": "lint(logic/unique): module doc, docstring (#4461)", "changes": [{"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}]}, {"timestamp": 1601988100, "sha": "2fc65980", "message": "lint(group_theory/eckmann_hilton): docs, module docs, unused argument (#4459)", "changes": [{"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": [["mod", "def", "comm_group", ["eckmann_hilton"]]]}]}, {"timestamp": 1601988098, "sha": "f4207aa2", "message": "feat(data/*): lemmas about lists and finsets (#4457)\nA part of #4316", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["mod", "theorem", "prod_mk", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_def", ["fin"]], ["add", "theorem", "univ_eq_empty", ["finset"]], ["mod", "theorem", "univ_nonempty", ["finset"]], ["add", "theorem", "univ_nonempty_iff", ["finset"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_of_fn", ["fin"]], ["add", "theorem", "prod_univ_def", ["fin"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "attach_eq_nil", ["list"]], ["add", "theorem", "pmap_eq_nil", ["list"]], ["add", "theorem", "prod_update_nth", ["list"]]]}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["add", "theorem", "map_update", ["list", "nodup"]]]}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["add", "theorem", "of_fn_const", ["list"]], ["mod", "theorem", "of_fn_succ", ["list"]], ["mod", "theorem", "of_fn_zero", ["list"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "fin_range_eq_nil", ["list"]], ["add", "theorem", "fin_range_zero", ["list"]], ["add", "theorem", "of_fn_eq_map", ["list"]], ["add", "theorem", "of_fn_id", ["list"]], ["add", "theorem", "range'_eq_nil", ["list"]], ["add", "theorem", "range_eq_nil", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}]}, {"timestamp": 1601988096, "sha": "1fa07c2c", "message": "chore(category_theory/monoidal): add module docs (#4454)", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}]}, {"timestamp": 1601988093, "sha": "4d9406e2", "message": "feat(geometry/euclidean/monge_point): orthocentric systems (#4448)\nDefine orthocentric systems of points, and prove some basic properties\nof them. In particular, if we say that an orthocentric system\nconsists of four points, one of which is the orthocenter of the\ntriangle formed by the other three, then each of the points is the\northocenter of the triangle formed by the other three, and all four\ntriangles have the same circumradius.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "affine_independent", ["euclidean_geometry", "cospherical"]]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["add", "theorem", "affine_span_of_orthocentric_system", ["euclidean_geometry"]], ["add", "theorem", "exists_dist_eq_circumradius_of_subset_insert_orthocenter", ["euclidean_geometry"]], ["add", "theorem", "exists_of_range_subset_orthocentric_system", ["euclidean_geometry"]], ["add", "theorem", "affine_independent", ["euclidean_geometry", "orthocentric_system"]], ["add", "theorem", "eq_insert_orthocenter", ["euclidean_geometry", "orthocentric_system"]], ["add", "theorem", "exists_circumradius_eq", ["euclidean_geometry", "orthocentric_system"]], ["add", "def", "orthocentric_system", ["euclidean_geometry"]]]}]}, {"timestamp": 1601979751, "sha": "e9b43b6a", "message": "lint(data/equiv/ring): docstrings, inhabited (#4460)", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}]}, {"timestamp": 1601979749, "sha": "58a54d34", "message": "chore(category_theory/*): doc-strings (#4453)", "changes": [{"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}]}, {"timestamp": 1601979747, "sha": "6b59725c", "message": "chore(control/traversable/{basic,equiv,instances,lemmas}): linting (#4444)\nThe `nolint`s in `instances.lean` are there because all the arguments need to be there for `is_lawful_traversable`. In the same file, I moved `traverse_map` because it does not need the `is_lawful_applicative` instances.", "changes": [{"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": [["add", "def", "id_transformation", ["applicative_transformation"]]]}, {"oldPath": "src/control/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}, {"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/control/traversable/lemmas.lean", "newPath": "src/control/traversable/lemmas.lean", "changes": []}]}, {"timestamp": 1601979745, "sha": "372d2949", "message": "feat(data/finsupp): lift a collection of `add_monoid_hom`s to an `add_monoid_hom` on `α →₀ β` (#4395)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "to_add_monoid_hom_injective", ["linear_map"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "add_closure_Union_range_single", ["finsupp"]], ["add", "theorem", "add_hom_ext", ["finsupp"]], ["mod", "theorem", "hom_ext", ["finsupp"]], ["add", "def", "lift_add_hom", ["finsupp"]], ["add", "theorem", "lift_add_hom_apply", ["finsupp"]], ["add", "theorem", "lift_add_hom_single_add_hom", ["finsupp"]], ["add", "theorem", "lift_add_hom_symm_apply", ["finsupp"]], ["add", "theorem", "prod_of_support_subset", ["finsupp"]], ["mod", "theorem", "prod_single_index", ["finsupp"]], ["add", "def", "single_add_hom", ["finsupp"]]]}]}, {"timestamp": 1601974965, "sha": "b1d3ef9a", "message": "chore(data/mv_polynomial/basic): speedup coeff_mul (#4469)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}]}, {"timestamp": 1601974963, "sha": "c08a8686", "message": "feat(trailing_degree): added two lemmas support_X, support_X_empty computing the support of X, simplified a couple of lemmas (#4294)", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "monomial_eq_X_pow", ["polynomial"]], ["add", "theorem", "support_X", ["polynomial"]], ["add", "theorem", "support_X_empty", ["polynomial"]], ["add", "theorem", "support_X_pow", ["polynomial"]], ["add", "theorem", "support_monomial'", ["polynomial"]], ["add", "theorem", "support_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "C_mul_X_pow_eq_monomial", ["polynomial"]], ["del", "theorem", "monomial_eq_smul_X", ["polynomial"]], ["del", "theorem", "monomial_one_eq_X_pow", ["polynomial"]], ["add", "theorem", "support_C_mul_X_pow'", ["polynomial"]], ["add", "theorem", "support_mul_X_pow", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["mod", "theorem", "trailing_degree_lt_wf", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "theorem", "monomial_eq_smul_X", ["polynomial"]], ["add", "theorem", "monomial_one_eq_X_pow", ["polynomial"]]]}]}, {"timestamp": 1601974961, "sha": "fc7e943e", "message": "feat(normed_space/basic): remove localized notation (#4246)\nRemove notation for `tendsto` in `nhds`. \nAlso make `is_bounded_linear_map.tendsto` protected.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "lim_norm", []], ["mod", "theorem", "lim_norm_zero", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["del", "theorem", "tendsto", ["is_bounded_linear_map"]]]}]}, {"timestamp": 1601968060, "sha": "32b5b68d", "message": "chore(topology/compacts): inhabit instances (#4462)", "changes": [{"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": []}]}, {"timestamp": 1601968058, "sha": "d3b1d65d", "message": "lint(measure_theory): docstrings and style (#4455)", "changes": [{"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "def", "bernoulli", ["pmf"]], ["mod", "theorem", "bind_apply", ["pmf"]], ["mod", "def", "of_fintype", ["pmf"]], ["mod", "def", "pure", ["pmf"]], ["mod", "def", "seq", ["pmf"]], ["mod", "theorem", "tsum_coe", ["pmf"]], ["mod", "def", "{u}", []]]}]}, {"timestamp": 1601952868, "sha": "523bddb4", "message": "doc(data/nat/prime, data/int/basic, data/int/modeq): docstrings (#4445)\nFilling in docstrings on `data/nat/prime`, `data/int/basic`, `data/int/modeq`.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1601952866, "sha": "cd785998", "message": "lint(category_theory/monad): doc-strings (#4428)", "changes": [{"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}]}, {"timestamp": 1601949868, "sha": "a228af6a", "message": "chore(scripts): update nolints.txt (#4456)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601945720, "sha": "27b6c239", "message": "lint(category_theory/limits): docstrings and inhabited instances (#4435)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}]}, {"timestamp": 1601942992, "sha": "37879aa6", "message": "feat(undergrad): minimal polynomial (#4308)\nAdds minimal polynomial of endomorphisms to the undergrad list, although its use will be hard to guess for undergrads.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}]}, {"timestamp": 1601939917, "sha": "432da5f8", "message": "feat(measure_theory/integration): add lintegral_with_density_eq_lintegral_mul (#4350)\nThis is Exercise 1.2.1 from Terence Tao's \"An Epsilon of Room\"", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "lintegral_add", ["measure_theory"]], ["mod", "theorem", "lintegral_add_measure", ["measure_theory"]], ["mod", "theorem", "lintegral_const_mul", ["measure_theory"]], ["mod", "theorem", "lintegral_smul_measure", ["measure_theory"]], ["mod", "theorem", "lintegral_sum_measure", ["measure_theory"]], ["add", "theorem", "lintegral_with_density_eq_lintegral_mul", ["measure_theory"]], ["mod", "theorem", "with_density_apply", ["measure_theory"]]]}]}, {"timestamp": 1601935308, "sha": "97c444e0", "message": "lint(topology/algebra): docstrings (#4446)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1601927124, "sha": "21158c43", "message": "lint(data/pnat): Docstrings and an unused argument in `pnat.basic`, `pnat.factors` (#4443)\nAdds docstrings\nChanges `div_exact` from having one unused input of type `k | m` to `div_exact m k`.", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["mod", "def", "div_exact", ["pnat"]], ["mod", "theorem", "mul_div_exact", ["pnat"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}]}, {"timestamp": 1601927121, "sha": "45347f93", "message": "lint(src/order/rel_iso): docstrings and inhabited (#4441)", "changes": [{"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}]}, {"timestamp": 1601927119, "sha": "21271659", "message": "chore(linear_algebra/basis): split off `linear_independent.lean` (#4440)\nThe file `basis.lean` was getting rather long (1500 lines), so I decided to split it into two not as long files at a natural point: everything using `linear_independent` but not `basis` can go into a new file `linear_independent.lean`. As a result, we can import `basis.lean` a bit later in the `ring_theory` hierarchy.", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["del", "theorem", "disjoint_span_singleton", []], ["del", "theorem", "eq_of_linear_independent_of_span_subtype", []], ["del", "theorem", "exists_finite_card_le_of_finite_of_linear_independent_of_span", []], ["del", "theorem", "exists_linear_independent", []], ["del", "theorem", "exists_of_linear_independent_of_finite_span", []], ["del", "theorem", "le_of_span_le_span", []], ["del", "theorem", "linear_dependent_iff", []], ["del", "theorem", "comp", ["linear_independent"]], ["del", "theorem", "image'", ["linear_independent"]], ["del", "theorem", "image", ["linear_independent"]], ["del", "theorem", "image_subtype", ["linear_independent"]], ["del", "theorem", "injective", ["linear_independent"]], ["del", "theorem", "inl_union_inr", ["linear_independent"]], ["del", "theorem", "insert", ["linear_independent"]], ["del", "theorem", "mono", ["linear_independent"]], ["del", "theorem", "ne_zero", ["linear_independent"]], ["del", "theorem", "of_subtype_range", ["linear_independent"]], ["del", "def", "repr", ["linear_independent"]], ["del", "theorem", "repr_eq", ["linear_independent"]], ["del", "theorem", "repr_eq_single", ["linear_independent"]], ["del", "theorem", "repr_ker", ["linear_independent"]], ["del", "theorem", "repr_range", ["linear_independent"]], ["del", "theorem", "restrict_of_comp_subtype", ["linear_independent"]], ["del", "theorem", "to_subtype_range", ["linear_independent"]], ["del", "theorem", "total_comp_repr", ["linear_independent"]], ["del", "def", "total_equiv", ["linear_independent"]], ["del", "theorem", "total_repr", ["linear_independent"]], ["del", "theorem", "union", ["linear_independent"]], ["del", "theorem", "unique", ["linear_independent"]], ["del", "def", "linear_independent", []], ["del", "theorem", "linear_independent_Union_finite", []], ["del", "theorem", "linear_independent_Union_finite_subtype", []], ["del", "theorem", "linear_independent_Union_of_directed", []], ["del", "theorem", "linear_independent_bUnion_of_directed", []], ["del", "theorem", "linear_independent_comp_subtype", []], ["del", "theorem", "linear_independent_comp_subtype_disjoint", []], ["del", "theorem", "linear_independent_empty", []], ["del", "theorem", "linear_independent_empty_type", []], ["del", "theorem", "linear_independent_equiv'", []], ["del", "theorem", "linear_independent_equiv", []], ["del", "theorem", "linear_independent_iff''", []], ["del", "theorem", "linear_independent_iff'", []], ["del", "theorem", "linear_independent_iff", []], ["del", "theorem", "linear_independent_iff_not_mem_span", []], ["del", "theorem", "linear_independent_iff_not_smul_mem_span", []], ["del", "theorem", "linear_independent_iff_total_on", []], ["del", "theorem", "linear_independent_image", []], ["del", "theorem", "linear_independent_inl_union_inr'", []], ["del", "theorem", "linear_independent_insert'", []], ["del", "theorem", "linear_independent_insert", []], ["del", "theorem", "linear_independent_monoid_hom", []], ["del", "theorem", "linear_independent_of_comp", []], ["del", "theorem", "linear_independent_of_finite", []], ["del", "theorem", "linear_independent_of_zero_eq_one", []], ["del", "theorem", "linear_independent_sUnion_of_directed", []], ["del", "theorem", "linear_independent_singleton", []], ["del", "theorem", "linear_independent_span", []], ["del", "theorem", "linear_independent_subtype", []], ["del", "theorem", "linear_independent_subtype_disjoint", []], ["del", "theorem", "linear_independent_unique", []], ["del", "theorem", "mem_span_insert_exchange", []], ["del", "theorem", "span_le_span_iff", []], ["del", "theorem", "surjective_of_linear_independent_of_span", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/linear_independent.lean", "changes": [["add", "theorem", "disjoint_span_singleton", []], ["add", "theorem", "eq_of_linear_independent_of_span_subtype", []], ["add", "theorem", "exists_finite_card_le_of_finite_of_linear_independent_of_span", []], ["add", "theorem", "exists_linear_independent", []], ["add", "theorem", "exists_of_linear_independent_of_finite_span", []], ["add", "theorem", "le_of_span_le_span", []], ["add", "theorem", "linear_dependent_iff", []], ["add", "theorem", "comp", ["linear_independent"]], ["add", "theorem", "image'", ["linear_independent"]], ["add", "theorem", "image", ["linear_independent"]], ["add", "theorem", "image_subtype", ["linear_independent"]], ["add", "theorem", "injective", ["linear_independent"]], ["add", "theorem", "inl_union_inr", ["linear_independent"]], ["add", "theorem", "insert", ["linear_independent"]], ["add", "theorem", "mono", ["linear_independent"]], ["add", "theorem", "ne_zero", ["linear_independent"]], ["add", "theorem", "of_subtype_range", ["linear_independent"]], ["add", "def", "repr", ["linear_independent"]], ["add", "theorem", "repr_eq", ["linear_independent"]], ["add", "theorem", "repr_eq_single", ["linear_independent"]], ["add", "theorem", "repr_ker", ["linear_independent"]], ["add", "theorem", "repr_range", ["linear_independent"]], ["add", "theorem", "restrict_of_comp_subtype", ["linear_independent"]], ["add", "theorem", "to_subtype_range", ["linear_independent"]], ["add", "theorem", "total_comp_repr", ["linear_independent"]], ["add", "def", "total_equiv", ["linear_independent"]], ["add", "theorem", "total_repr", ["linear_independent"]], ["add", "theorem", "union", ["linear_independent"]], ["add", "theorem", "unique", ["linear_independent"]], ["add", "def", "linear_independent", []], ["add", "theorem", "linear_independent_Union_finite", []], ["add", "theorem", "linear_independent_Union_finite_subtype", []], ["add", "theorem", "linear_independent_Union_of_directed", []], ["add", "theorem", "linear_independent_bUnion_of_directed", []], ["add", "theorem", "linear_independent_comp_subtype", []], ["add", "theorem", "linear_independent_comp_subtype_disjoint", []], ["add", "theorem", "linear_independent_empty", []], ["add", "theorem", "linear_independent_empty_type", []], ["add", "theorem", "linear_independent_equiv'", []], ["add", "theorem", "linear_independent_equiv", []], ["add", "theorem", "linear_independent_iff''", []], ["add", "theorem", "linear_independent_iff'", []], ["add", "theorem", "linear_independent_iff", []], ["add", "theorem", "linear_independent_iff_not_mem_span", []], ["add", "theorem", "linear_independent_iff_not_smul_mem_span", []], ["add", "theorem", "linear_independent_iff_total_on", []], ["add", "theorem", "linear_independent_image", []], ["add", "theorem", "linear_independent_inl_union_inr'", []], ["add", "theorem", "linear_independent_insert'", []], ["add", "theorem", "linear_independent_insert", []], ["add", "theorem", "linear_independent_monoid_hom", []], ["add", "theorem", "linear_independent_of_comp", []], ["add", "theorem", "linear_independent_of_finite", []], ["add", "theorem", "linear_independent_of_zero_eq_one", []], ["add", "theorem", "linear_independent_sUnion_of_directed", []], ["add", "theorem", "linear_independent_singleton", []], ["add", "theorem", "linear_independent_span", []], ["add", "theorem", "linear_independent_subtype", []], ["add", "theorem", "linear_independent_subtype_disjoint", []], ["add", "theorem", "linear_independent_unique", []], ["add", "theorem", "mem_span_insert_exchange", []], ["add", "theorem", "span_le_span_iff", []], ["add", "theorem", "surjective_of_linear_independent_of_span", []]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1601927118, "sha": "88c76ab9", "message": "feat(order/filter/ultrafilter): Add variant of `exists_ultrafilter`. (#4436)\nThe lemma `exists_ultrafilter` tells us that any proper filter can be extended to an ultrafilter (using Zorn's lemma). This PR adds a variant, called `exists_ultrafilter_of_finite_inter_nonempty` which says that any collection of sets `S` can be extended to an ultrafilter whenever it satisfies the property that the intersection of any finite subcollection `T` is nonempty.", "changes": [{"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "exists_ultrafilter_of_finite_inter_nonempty", ["filter"]]]}]}, {"timestamp": 1601927115, "sha": "91515320", "message": "lint(order/conditionally_complete_lattice): docstrings (#4434)", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1601927113, "sha": "221ec606", "message": "feat(ring_theory/ideal): ideals in product rings (#4431)", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "coe_prod_comm", ["mul_equiv"]], ["add", "theorem", "coe_prod_comm_symm", ["mul_equiv"]], ["add", "def", "prod_comm", ["mul_equiv"]]]}, {"oldPath": "src/algebra/ring/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": [["add", "theorem", "coe_coe_prod_comm", ["ring_equiv"]], ["add", "theorem", "coe_coe_prod_comm_symm", ["ring_equiv"]], ["add", "theorem", "coe_prod_comm", ["ring_equiv"]], ["add", "theorem", "coe_prod_comm_symm", ["ring_equiv"]], ["add", "theorem", "fst_comp_coe_prod_comm", ["ring_equiv"]], ["add", "def", "prod_comm", ["ring_equiv"]], ["add", "theorem", "snd_comp_coe_prod_comm", ["ring_equiv"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["add", "theorem", "prime_spectrum_prod_symm_inl_as_ideal", ["prime_spectrum"]], ["add", "theorem", "prime_spectrum_prod_symm_inr_as_ideal", ["prime_spectrum"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "map_is_prime_of_equiv", ["ideal"]], ["add", "theorem", "ker_coe_equiv", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/ring_theory/ideal/prod.lean", "changes": [["add", "theorem", "ideal_prod_eq", ["ideal"]], ["add", "def", "ideal_prod_equiv", ["ideal"]], ["add", "theorem", "ideal_prod_equiv_symm_apply", ["ideal"]], ["add", "theorem", "ideal_prod_prime", ["ideal"]], ["add", "theorem", "ideal_prod_prime_aux", ["ideal"]], ["add", "theorem", "is_prime_ideal_prod_top'", ["ideal"]], ["add", "theorem", "is_prime_ideal_prod_top", ["ideal"]], ["add", "theorem", "is_prime_of_is_prime_prod_top'", ["ideal"]], ["add", "theorem", "is_prime_of_is_prime_prod_top", ["ideal"]], ["add", "theorem", "map_fst_prod", ["ideal"]], ["add", "theorem", "map_prod_comm_prod", ["ideal"]], ["add", "theorem", "map_snd_prod", ["ideal"]], ["add", "theorem", "mem_prod", ["ideal"]], ["add", "theorem", "prime_ideals_equiv_symm_inl", ["ideal"]], ["add", "theorem", "prime_ideals_equiv_symm_inr", ["ideal"]], ["add", "theorem", "ext_iff", ["ideal", "prod"]], ["add", "def", "prod", ["ideal"]], ["add", "theorem", "prod_top_top", ["ideal"]]]}]}, {"timestamp": 1601927110, "sha": "f9e3779b", "message": "lint(category_theory/whiskering): add doc-strings (#4417)", "changes": [{"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": [["mod", "def", "left_unitor", ["category_theory", "functor"]], ["mod", "def", "right_unitor", ["category_theory", "functor"]]]}]}, {"timestamp": 1601927108, "sha": "d2140efb", "message": "feat(algebra/gcd_monoid): `gcd_mul_dvd_mul_gcd` (#4386)\nAdds a `gcd_monoid` version of `nat.gcd_mul_dvd_mul_gcd`", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "theorem", "exists_dvd_and_dvd_of_dvd_mul", []], ["add", "theorem", "gcd_mul_dvd_mul_gcd", []]]}]}, {"timestamp": 1601918444, "sha": "c58c4e62", "message": "docs(tactic/{fin_cases,lift}): lint (#4421)", "changes": [{"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}]}, {"timestamp": 1601918442, "sha": "e89d0edd", "message": "chore(*/multilinear): generalize `comp_linear_map` to a family of linear maps (#4408)\nTogether with #4316 this will give us multilinear maps corresponding to monomials.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["mod", "def", "comp_linear_map", ["multilinear_map"]], ["add", "theorem", "comp_linear_map_apply", ["multilinear_map"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "apply_update", ["function"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "theorem", "comp_continuous_linear_map_apply", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1601911102, "sha": "7f74e6b3", "message": "feat(data/mv_polynomial/basic): map_map_range_eq_iff (#4438)\nSplit off from #4268", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "map_map_range_eq_iff", ["mv_polynomial"]]]}]}, {"timestamp": 1601911100, "sha": "39f5d6b6", "message": "feat(data/rat/basic): denom_eq_one_iff (#4437)\nSplit off from #4268", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "denom_eq_one_iff", ["rat"]]]}]}, {"timestamp": 1601911098, "sha": "22398f3e", "message": "chore(src/linear_algebra): linting (#4427)", "changes": [{"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}]}, {"timestamp": 1601897947, "sha": "ca269b44", "message": "feat(linear_algebra/affine_space/finite_dimensional): collinearity (#4433)\nDefine collinearity of a set of points in an affine space for a vector\nspace (as meaning the `vector_span` has dimension at most 1), and\nprove some basic lemmas about it, leading to three points being\ncollinear if and only if they are not affinely independent.", "changes": [{"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "affine_independent_iff_not_collinear", []], ["add", "def", "collinear", []], ["add", "theorem", "collinear_empty", []], ["add", "theorem", "collinear_iff_dim_le_one", []], ["add", "theorem", "collinear_iff_exists_forall_eq_smul_vadd", []], ["add", "theorem", "collinear_iff_findim_le_one", []], ["add", "theorem", "collinear_iff_not_affine_independent", []], ["add", "theorem", "collinear_iff_of_mem", []], ["add", "theorem", "collinear_insert_singleton", []], ["add", "theorem", "collinear_singleton", []]]}]}, {"timestamp": 1601897945, "sha": "b0fe280b", "message": "chore(category_theory/yoneda): doc-strings (#4429)", "changes": [{"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1601897943, "sha": "1501bf6f", "message": "chore(data/fin2): linting (#4426)", "changes": [{"oldPath": "src/data/fin2.lean", "newPath": "src/data/fin2.lean", "changes": []}]}, {"timestamp": 1601897941, "sha": "dd73dd2a", "message": "chore(linear_algebra/finsupp*): linting (#4425)", "changes": [{"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}]}, {"timestamp": 1601897938, "sha": "c058524c", "message": "chore(data/fintype/basic): linting (#4424)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1601897936, "sha": "70b8e828", "message": "data(data/dlist/{basic,instances}): linting (#4422)", "changes": [{"oldPath": "src/data/dlist/basic.lean", "newPath": "src/data/dlist/basic.lean", "changes": []}, {"oldPath": "src/data/dlist/instances.lean", "newPath": "src/data/dlist/instances.lean", "changes": []}]}, {"timestamp": 1601897934, "sha": "da1265c5", "message": "chore(data/buffer/basic): linting (#4420)", "changes": [{"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}]}, {"timestamp": 1601897932, "sha": "768ff768", "message": "chore(data/array/lemmas): linting (#4419)", "changes": [{"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": [["mod", "def", "d_array_equiv_fin", ["equiv"]]]}]}, {"timestamp": 1601897930, "sha": "c370bd06", "message": "chore(data/W): linting (#4418)", "changes": [{"oldPath": "src/data/W.lean", "newPath": "src/data/W.lean", "changes": []}]}, {"timestamp": 1601897928, "sha": "6a4fd24a", "message": "lint(category_theory/adjunction): add doc-strings (#4415)", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}]}, {"timestamp": 1601897926, "sha": "17b607f7", "message": "chore(algebra/direct_sum): linting (#4412)", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1601897923, "sha": "b44e927e", "message": "feat(data/finsupp): Make `finsupp.dom_congr` a `≃+` (#4398)\nSince this has additional structure, it may as well be part of the type", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_to_linear_equiv", ["add_equiv"]], ["add", "theorem", "coe_to_linear_equiv_symm", ["add_equiv"]], ["add", "def", "to_linear_equiv", ["add_equiv"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}]}, {"timestamp": 1601897921, "sha": "54a2c6b6", "message": "chore(algebra/group/with_one): prove `group_with_zero` earlier, drop custom lemmas (#4385)", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "theorem", "coe_one", ["with_zero"]], ["del", "theorem", "div_eq_div", ["with_zero"]], ["del", "theorem", "div_eq_iff_mul_eq", ["with_zero"]], ["del", "theorem", "div_mul_cancel", ["with_zero"]], ["del", "theorem", "div_one", ["with_zero"]], ["del", "theorem", "div_zero", ["with_zero"]], ["del", "theorem", "mul_comm", ["with_zero"]], ["del", "theorem", "mul_div_cancel", ["with_zero"]], ["del", "theorem", "mul_inv_cancel", ["with_zero"]], ["del", "theorem", "mul_inv_rev", ["with_zero"]], ["del", "theorem", "mul_left_inv", ["with_zero"]], ["del", "theorem", "mul_right_inv", ["with_zero"]], ["del", "theorem", "one_div", ["with_zero"]], ["del", "theorem", "zero_div", ["with_zero"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "coe_def", ["option"]]]}]}, {"timestamp": 1601897919, "sha": "72360845", "message": "refactor(linear_algebra/matrix): consistent naming (#4345)\nThe naming of the maps between `linear_map` and `matrix` was a mess. This PR proposes to clean it up by standardising on two forms:\n * `linear_map.to_matrix` and `matrix.to_linear_map` are the equivalences (in the respective direction) between `M₁ →ₗ[R] M₂` and `matrix m n R`, given bases for `M₁` and `M₂`.\n * `linear_map.to_matrix'` and `matrix.to_lin'` are the equivalences between `((n → R) →ₗ[R] (m → R))` and `matrix m n R` in the respective directions\nThe following declarations are renamed:\n * `comp_to_matrix_mul` -> `linear_map.to_matrix'_comp`\n * `linear_equiv_matrix` -> `linear_map.to_matrix`\n * `linear_equiv_matrix_{apply,comp,id,mul,range}` -> `linear_map.to_matrix_{apply,comp,id,mul,range}`\n * `linear_equiv_matrix_symm_{apply,mul,one}` -> `matrix.to_lin_{apply,mul,one}`\n * `linear_equiv_matrix'` -> `linear_map.to_matrix'`\n * `linear_map.to_matrix_id` ->`linear_map.to_matrix'_id`\n * `matrix.mul_to_lin` -> `matrix.to_lin'_mul`\n * `matrix.to_lin` -> `matrix.mul_vec_lin` (which should get simplified to `matrix.to_lin'`)\n * `matrix.to_lin_apply` -> `matrix.to_lin'_apply`\n * `matrix.to_lin_one` -> `matrix.to_lin'_one`\n * `to_lin_to_matrix` -> `matrix.to_lin'_to_matrix'`\n * `to_matrix_to_lin` -> `linear_map.to_matrix'_to_lin'`\nThe following declarations are deleted as unnecessary:\n * `linear_equiv_matrix_apply'` (use `linear_map.to_matrix_apply` instead)\n * `linear_equiv_matrix'_apply` (the original `linear_map.to_matrix` doesn't exist any more)\n * `linear_equiv_matrix'_symm_apply` (the original `matrix.to_lin` doesn't exist any more)\n * `linear_map.to_matrixₗ` (use `linear_map.to_matrix'` instead)\n * `linear_map.to_matrix` (use `linear_map.to_matrix'` instead)\n * `linear_map.to_matrix_of_equiv` (use `linear_map.to_matrix'_apply` instead)\n * `matrix.eval` (use `matrix.to_lin'` instead)\n * `matrix.to_lin.is_add_monoid_hom` (use `linear_equiv.to_add_monoid_hom` instead)\n * `matrix.to_lin_{add,zero,neg}` (use `linear_equiv.map_{add,zero,neg} matrix.to_lin'` instead)\n * `matrix.to_lin_of_equiv` (use `matrix.to_lin'_apply` instead)\nZulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Refactoring.20.60linear_map.20.3C-.3E.20matrix.60", "changes": [{"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "range_repr", ["is_basis"]], ["add", "theorem", "range_repr_self", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "to_bilin_form_comp", ["matrix"]], ["mod", "theorem", "matrix_is_adjoint_pair_bilin_form", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "def", "alg_equiv_matrix'", []], ["mod", "def", "alg_equiv_matrix", []], ["del", "def", "linear_equiv_matrix'", []], ["del", "theorem", "linear_equiv_matrix'_apply", []], ["del", "theorem", "linear_equiv_matrix'_symm_apply", []], ["del", "def", "linear_equiv_matrix", []], ["del", "theorem", "linear_equiv_matrix_apply'", []], ["del", "theorem", "linear_equiv_matrix_apply", []], ["del", "theorem", "linear_equiv_matrix_id", []], ["del", "theorem", "linear_equiv_matrix_range", []], ["del", "theorem", "linear_equiv_matrix_symm_apply", []], ["del", "theorem", "linear_equiv_matrix_symm_one", []], ["del", "theorem", "linear_equiv_matrix_symm_transpose", []], ["del", "theorem", "linear_equiv_matrix_transpose", []], ["add", "def", "to_matrix'", ["linear_map"]], ["add", "theorem", "to_matrix'_apply", ["linear_map"]], ["add", "theorem", "to_matrix'_comp", ["linear_map"]], ["add", "theorem", "to_matrix'_id", ["linear_map"]], ["add", "theorem", "to_matrix'_mul", ["linear_map"]], ["add", "theorem", "to_matrix'_symm", ["linear_map"]], ["add", "theorem", "to_matrix'_to_lin'", ["linear_map"]], ["mod", "def", "to_matrix", ["linear_map"]], ["add", "theorem", "to_matrix_apply'", ["linear_map"]], ["add", "theorem", "to_matrix_apply", ["linear_map"]], ["add", "theorem", "to_matrix_comp", ["linear_map"]], ["mod", "theorem", "to_matrix_id", ["linear_map"]], ["add", "theorem", "to_matrix_mul", ["linear_map"]], ["del", "theorem", "to_matrix_of_equiv", ["linear_map"]], ["add", "theorem", "to_matrix_range", ["linear_map"]], ["add", "theorem", "to_matrix_symm", ["linear_map"]], ["add", "theorem", "to_matrix_symm_transpose", ["linear_map"]], ["add", "theorem", "to_matrix_to_lin", ["linear_map"]], ["add", "theorem", "to_matrix_transpose", ["linear_map"]], ["del", "def", "to_matrixₗ", ["linear_map"]], ["del", "theorem", "comp_to_matrix_mul", ["matrix"]], ["add", "theorem", "diagonal_to_lin'", ["matrix"]], ["del", "theorem", "diagonal_to_lin", ["matrix"]], ["del", "def", "eval", ["matrix"]], ["add", "theorem", "ker_diagonal_to_lin'", ["matrix"]], ["del", "theorem", "ker_diagonal_to_lin", ["matrix"]], ["del", "theorem", "linear_equiv_matrix_comp", ["matrix"]], ["del", "theorem", "linear_equiv_matrix_mul", ["matrix"]], ["del", "theorem", "linear_equiv_matrix_symm_mul", ["matrix"]], ["del", "theorem", "mul_to_lin", ["matrix"]], ["add", "def", "mul_vec_lin", ["matrix"]], ["add", "theorem", "mul_vec_lin_apply", ["matrix"]], ["add", "theorem", "mul_vec_std_basis", ["matrix"]], ["mod", "theorem", "rank_vec_mul_vec", ["matrix"]], ["add", "def", "to_lin'", ["matrix"]], ["add", "theorem", "to_lin'_apply", ["matrix"]], ["add", "theorem", "to_lin'_mul", ["matrix"]], ["add", "theorem", "to_lin'_one", ["matrix"]], ["add", "theorem", "to_lin'_symm", ["matrix"]], ["add", "theorem", "to_lin'_to_matrix'", ["matrix"]], ["mod", "def", "to_lin", ["matrix"]], ["del", "theorem", "to_lin_add", ["matrix"]], ["mod", "theorem", "to_lin_apply", ["matrix"]], ["add", "theorem", "to_lin_mul", ["matrix"]], ["del", "theorem", "to_lin_neg", ["matrix"]], ["del", "theorem", "to_lin_of_equiv", ["matrix"]], ["mod", "theorem", "to_lin_one", ["matrix"]], ["add", "theorem", "to_lin_symm", ["matrix"]], ["add", "theorem", "to_lin_to_matrix", ["matrix"]], ["del", "theorem", "to_lin_zero", ["matrix"]], ["del", "theorem", "to_lin_to_matrix", []], ["del", "theorem", "to_matrix_to_lin", []]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["add", "def", "to_lin'", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin'_mul", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin'_one", ["matrix", "special_linear_group"]], ["del", "def", "to_lin", ["matrix", "special_linear_group"]], ["del", "theorem", "to_lin_mul", ["matrix", "special_linear_group"]], ["del", "theorem", "to_lin_one", ["matrix", "special_linear_group"]]]}]}, {"timestamp": 1601887797, "sha": "67b312c2", "message": "chore(logic/relation): linting (#4414)", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}]}, {"timestamp": 1601887795, "sha": "186660c0", "message": "feat(*): assorted `simp` lemmas for IMO 2019 q1 (#4383)\n* mark some lemmas about cancelling in expressions with `(-)` as `simp`;\n* simplify `a * b = a * c` to `b = c ∨ a = 0`, and similarly for\n `a * c = b * c;\n* change `priority` of `monoid.has_pow` and `group.has_pow` to the\n default priority.\n* simplify `monoid.pow` and `group.gpow` to `has_pow.pow`.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "add_add_neg_cancel'_right", []], ["mod", "theorem", "add_add_sub_cancel", []], ["mod", "theorem", "add_sub_sub_cancel", []], ["mod", "theorem", "sub_add_add_cancel", []], ["mod", "theorem", "sub_add_sub_cancel'", []], ["mod", "theorem", "sub_sub_cancel", []], ["mod", "theorem", "sub_sub_sub_cancel_left", []]]}, {"oldPath": "src/algebra/group/commute.lean", "newPath": "src/algebra/group/commute.lean", "changes": [["add", "theorem", "inv_mul_cancel_assoc", ["commute"]], ["add", "theorem", "mul_inv_cancel_assoc", ["commute"]], ["add", "theorem", "inv_mul_cancel_comm", []], ["add", "theorem", "inv_mul_cancel_comm_assoc", []], ["add", "theorem", "mul_inv_cancel_comm", []], ["add", "theorem", "mul_inv_cancel_comm_assoc", []]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "gpow_eq_has_pow", ["group"]], ["add", "theorem", "pow_eq_has_pow", ["monoid"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "mul_eq_mul_left_iff", []], ["add", "theorem", "mul_eq_mul_right_iff", []]]}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["del", "theorem", "cast_pow", ["padic_int"]], ["add", "theorem", "coet_pow", ["padic_int"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1601887793, "sha": "8f4475b4", "message": "feat(combinatorics/partitions): Add partitions (#4303)", "changes": [{"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/partition.lean", "changes": [["add", "theorem", "count_of_sums_of_ne_zero", ["partition"]], ["add", "theorem", "count_of_sums_zero", ["partition"]], ["add", "def", "distincts", ["partition"]], ["add", "def", "indiscrete_partition", ["partition"]], ["add", "def", "odd_distincts", ["partition"]], ["add", "def", "odds", ["partition"]], ["add", "def", "of_composition", ["partition"]], ["add", "theorem", "of_composition_surj", ["partition"]], ["add", "def", "of_multiset", ["partition"]], ["add", "def", "of_sums", ["partition"]], ["add", "structure", "partition", []]]}]}, {"timestamp": 1601883576, "sha": "ca679aca", "message": "chore(algebra/direct_limit): linting (#4411)", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["del", "theorem", "directed_system", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "lift_unique", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "zero_exact", ["add_comm_group", "direct_limit", "of"]], ["mod", "def", "direct_limit", ["add_comm_group"]], ["mod", "theorem", "exists_of", ["module", "direct_limit"]], ["mod", "theorem", "lift_unique", ["module", "direct_limit"]], ["mod", "theorem", "zero_exact_aux", ["module", "direct_limit", "of"]], ["mod", "theorem", "exists_of", ["ring", "direct_limit"]], ["mod", "theorem", "induction_on", ["ring", "direct_limit"]], ["mod", "theorem", "lift_unique", ["ring", "direct_limit"]], ["mod", "theorem", "zero_exact_aux", ["ring", "direct_limit", "of"]], ["mod", "theorem", "of_injective", ["ring", "direct_limit"]], ["mod", "theorem", "exists_of", ["ring", "direct_limit", "polynomial"]]]}]}, {"timestamp": 1601883572, "sha": "581b1415", "message": "feat(data/complex): norm_cast lemmas (#4405)\nMark various existing lemmas such as `abs_of_real` and `of_real_exp`\nas `norm_cast` lemmas so that `norm_cast` and related tactics can\nhandle expressions involving those functions, and add lemmas\n`of_real_prod` and `of_real_sum` to allow those tactics to work with\nsums and products involving coercions from real to complex.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "abs_of_real", ["complex"]], ["add", "theorem", "of_real_prod", ["complex"]], ["add", "theorem", "of_real_sum", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "of_real_cos", ["complex"]], ["mod", "theorem", "of_real_cosh", ["complex"]], ["mod", "theorem", "of_real_exp", ["complex"]], ["mod", "theorem", "of_real_sin", ["complex"]], ["mod", "theorem", "of_real_sinh", ["complex"]], ["mod", "theorem", "of_real_tan", ["complex"]], ["mod", "theorem", "of_real_tanh", ["complex"]]]}]}, {"timestamp": 1601883570, "sha": "1c8bb422", "message": "feat(linear_algebra/affine_space/finite_dimensional): more lemmas (#4389)\nAdd more lemmas concerning dimensions of affine spans of finite\nfamilies of points. In particular, various forms of the lemma that `n + 1`\npoints are affinely independent if and only if their `vector_span` has\ndimension `n` (or equivalently, at least `n`). With suitable\ndefinitions, this is equivalent to saying that three points are\naffinely independent or collinear, four are affinely independent or\ncoplanar, etc., thus preparing for giving a definition of `collinear`\n(for any set of points in an affine space for a vector space) in terms\nof dimension and proving some basic properties of it including\nrelating it to affine independence.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "vector_span_range_eq_span_range_vsub_left_ne", []], ["add", "theorem", "vector_span_range_eq_span_range_vsub_right_ne", []]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "affine_independent_iff_findim_vector_span_eq", []], ["add", "theorem", "affine_independent_iff_le_findim_vector_span", []], ["add", "theorem", "affine_independent_iff_not_findim_vector_span_le", []], ["add", "theorem", "findim_vector_span_image_finset_le", []], ["add", "theorem", "findim_vector_span_le_iff_not_affine_independent", []], ["add", "theorem", "findim_vector_span_range_le", []]]}]}, {"timestamp": 1601883568, "sha": "565e961d", "message": "feat(number_theory/arithmetic_function): Define arithmetic functions/the Dirichlet ring (#4352)\nDefines a type `arithmetic_function A` of functions from `nat` to `A` sending 0 to 0\nDefines the Dirichlet ring structure on `arithmetic_function A`", "changes": [{"oldPath": null, "newPath": "src/number_theory/arithmetic_function.lean", "changes": [["add", "theorem", "add_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_coe", ["nat", "arithmetic_function"]], ["add", "theorem", "coe_inj", ["nat", "arithmetic_function"]], ["add", "theorem", "ext", ["nat", "arithmetic_function"]], ["add", "theorem", "ext_iff", ["nat", "arithmetic_function"]], ["add", "theorem", "int_coe_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "map_zero", ["nat", "arithmetic_function"]], ["add", "theorem", "mul_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "nat_coe_apply", ["nat", "arithmetic_function"]], ["add", "theorem", "one_apply_ne", ["nat", "arithmetic_function"]], ["add", "theorem", "one_one", ["nat", "arithmetic_function"]], ["add", "theorem", "to_fun_eq", ["nat", "arithmetic_function"]], ["add", "theorem", "zero_apply", ["nat", "arithmetic_function"]], ["add", "structure", "arithmetic_function", ["nat"]]]}, {"oldPath": "src/number_theory/divisors.lean", "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "dvd_of_mem_divisors", ["nat"]]]}]}, {"timestamp": 1601875450, "sha": "9ab7f055", "message": "feat(category_theory/limits/terminal): limit of a diagram with initial object (#4404)\nIf the index category for a functor has an initial object, the image of the functor is a limit.", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["mod", "def", "as_empty_cocone", ["category_theory", "limits"]], ["mod", "def", "as_empty_cone", ["category_theory", "limits"]], ["add", "def", "cocone_of_diagram_terminal", ["category_theory", "limits"]], ["add", "def", "colimit_of_diagram_terminal", ["category_theory", "limits"]], ["add", "def", "colimit_of_terminal", ["category_theory", "limits"]], ["add", "def", "cone_of_diagram_initial", ["category_theory", "limits"]], ["add", "def", "limit_of_diagram_initial", ["category_theory", "limits"]], ["add", "def", "limit_of_initial", ["category_theory", "limits"]]]}]}, {"timestamp": 1601875448, "sha": "91d9e963", "message": "chore(algebra/ring/basic): docs, simps (#4375)\n* add docstrings to all typeclasses in `algebra/ring/basic`;\n* add `ring_hom.inhabited := ⟨id α⟩` to make linter happy;\n* given `f : α →+* β`, simplify `f.to_monoid_hom` and\n`f.to_add_monoid_hom` to coercions;\n* add `simp` lemmas for coercions of `ring_hom.mk f _ _ _ _` to\n`monoid_hom` and `add_monoid_hom`.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "coe_add_monoid_hom", []], ["del", "theorem", "coe_monoid_hom", []], ["add", "theorem", "coe_add_monoid_hom", ["ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_mk", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom_mk", ["ring_hom"]], ["add", "theorem", "to_add_monoid_hom_eq_coe", ["ring_hom"]], ["mod", "theorem", "to_fun_eq_coe", ["ring_hom"]], ["add", "theorem", "to_monoid_hom_eq_coe", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1601875446, "sha": "08cdf37c", "message": "feat(analysis/complex/roots_of_unity): complex (primitive) roots of unity (#4330)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "src/analysis/complex/roots_of_unity.lean", "changes": [["add", "theorem", "card_primitive_roots", ["complex"]], ["add", "theorem", "card_roots_of_unity", ["complex"]], ["add", "theorem", "is_primitive_root_exp", ["complex"]], ["add", "theorem", "is_primitive_root_exp_of_coprime", ["complex"]], ["add", "theorem", "is_primitive_root_iff", ["complex"]], ["add", "theorem", "mem_roots_of_unity", ["complex"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "two_pi_I_ne_zero", ["complex"]], ["add", "theorem", "pi_ne_zero", ["real"]]]}]}, {"timestamp": 1601870897, "sha": "bf998892", "message": "feat(category_theory/limits): lift self limit (#4403)\nA couple of little lemmas to simplify lift of a limit cone.", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "desc_self", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "lift_self", ["category_theory", "limits", "is_limit"]]]}]}, {"timestamp": 1601864187, "sha": "916b5d3a", "message": "feat(topology): completion of separable space is separable (#4399)\nAPI change:\n* `dense` renamed to `exists_between`;\n* new `dense (s : set α)` means `∀ x, x ∈ closure s`.", "changes": [{"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/infinite.lean", "newPath": "src/data/set/intervals/infinite.lean", "changes": []}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "dense", []], ["add", "theorem", "exists_between", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "separable_space", ["dense_range"]], ["add", "theorem", "exists_countable_closure_eq_univ", ["topological_space"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "dense_image_of_dense_range", ["continuous"]], ["add", "theorem", "closure_eq", ["dense"]], ["add", "def", "dense", []], ["add", "theorem", "dense_iff_closure_eq", []], ["mod", "theorem", "dense_of_subset_dense", []], ["add", "theorem", "closure_range", ["dense_range"]], ["add", "theorem", "comp", ["dense_range"]], ["add", "def", "inhabited", ["dense_range"]], ["add", "theorem", "nonempty", ["dense_range"]], ["add", "def", "dense_range", []], ["add", "theorem", "dense_range_iff_closure_range", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod", ["dense_range"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "nhds_within_ne_bot", ["dense_range"]]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "separable", ["dense_embedding"]], ["add", "theorem", "separable", ["dense_inducing"]], ["del", "theorem", "closure_range", ["dense_range"]], ["del", "theorem", "comp", ["dense_range"]], ["del", "def", "inhabited", ["dense_range"]], ["del", "theorem", "nhds_within_ne_bot", ["dense_range"]], ["del", "theorem", "nonempty", ["dense_range"]], ["del", "theorem", "prod", ["dense_range"]], ["del", "def", "dense_range", []], ["del", "theorem", "dense_range_iff_closure_range", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1601860726, "sha": "fc09dbae", "message": "feat(analysis/special_functions/pow): exp_mul (#4409)\nAdd the lemma that `exp (x * y) = (exp x) ^ y`, for real `x` and `y`.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "exp_mul", ["real"]]]}]}, {"timestamp": 1601844563, "sha": "d13d21ba", "message": "feat(algebra/big_operators/order): bounding finite fibration cardinalities from below (#4396)\nAlso including unrelated change `finset.inter_eq_sdiff_sdiff`.", "changes": [{"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "mul_card_image_le_card", ["finset"]], ["add", "theorem", "mul_card_image_le_card_of_maps_to", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "inter_eq_sdiff_sdiff", ["finset"]]]}]}, {"timestamp": 1601839111, "sha": "f437365a", "message": "feat(linear_algebra/dimension): one-dimensional spaces (#4400)\nAdd some lemmas about the vectors in spaces and subspaces of dimension\nat most 1.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "le_span_singleton_iff", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_le_one_iff", []], ["add", "theorem", "dim_submodule_le_one_iff'", []], ["add", "theorem", "dim_submodule_le_one_iff", []]]}]}, {"timestamp": 1601825275, "sha": "8f536768", "message": "feat(data/nat): Slightly strengthen nat.coprime_of_dvd/nat.coprime_of_dvd' (#4368)\nIt is sufficient to consider prime factors.\nThe theorems now depend on nat.prime (data/nat/prime.lean), which depends on\ndata/nat/gcd.lean, so I moved them to prime.lean.", "changes": [{"oldPath": "archive/imo/imo1959_q1.lean", "newPath": "archive/imo/imo1959_q1.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["del", "theorem", "coprime_of_dvd'", ["nat"]], ["del", "theorem", "coprime_of_dvd", ["nat"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "coprime_of_dvd'", ["nat"]], ["add", "theorem", "coprime_of_dvd", ["nat"]]]}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}]}, {"timestamp": 1601809848, "sha": "729b60a2", "message": "feat(data/set/basic): subsingleton_coe (#4388)\nAdd a lemma relating a set being a subsingleton set to its coercion to\na type being a subsingleton type.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subsingleton_coe", ["set"]]]}]}, {"timestamp": 1601809845, "sha": "e8b65e68", "message": "feat(data/set/basic): eq_singleton_iff_unique_mem (#4387)\nWe have this lemma for `finset`. Add a version for `set` (with the\nsame name).", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_singleton_iff_unique_mem", ["set"]]]}]}, {"timestamp": 1601809843, "sha": "e1b1d17a", "message": "feat(algebra/group): construct `add_monoid_hom` from `map_sub` (#4382)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_of_map_sub", ["add_monoid_hom"]], ["mod", "theorem", "map_sub", ["add_monoid_hom"]], ["add", "def", "of_map_sub", ["add_monoid_hom"]], ["add", "theorem", "coe_of_map_mul_inv", ["monoid_hom"]], ["add", "def", "of_map_mul_inv", ["monoid_hom"]]]}]}, {"timestamp": 1601809841, "sha": "231271d3", "message": "chore(data/equiv/mul_add): add more `equiv` lemmas to `mul_equiv` namespace (#4380)\nAlso make `apply_eq_iff_eq` and `apply_eq_iff_eq_symm_apply` use\nimplicit arguments.", "changes": [{"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["equiv"]], ["mod", "theorem", "apply_eq_iff_eq_symm_apply", ["equiv"]]]}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "apply_eq_iff_eq", ["mul_equiv"]], ["add", "theorem", "apply_eq_iff_symm_apply", ["mul_equiv"]], ["add", "theorem", "eq_symm_apply", ["mul_equiv"]], ["add", "theorem", "symm_apply_eq", ["mul_equiv"]]]}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}]}, {"timestamp": 1601809839, "sha": "5d35b9ad", "message": "feat(algebra/gcd_monoid, data/*set/gcd): a few lemmas about gcds (#4354)\nAdds lemmas about gcds useful for proving Gauss's Lemma", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "theorem", "gcd_eq_of_dvd_sub_left", []], ["add", "theorem", "gcd_eq_of_dvd_sub_right", []]]}, {"oldPath": "src/data/finset/gcd.lean", "newPath": "src/data/finset/gcd.lean", "changes": [["add", "theorem", "gcd_eq_gcd_filter_ne_zero", ["finset"]], ["add", "theorem", "gcd_eq_of_dvd_sub", ["finset"]], ["add", "theorem", "gcd_eq_zero_iff", ["finset"]], ["add", "theorem", "gcd_mul_left", ["finset"]], ["add", "theorem", "gcd_mul_right", ["finset"]]]}, {"oldPath": "src/data/multiset/gcd.lean", "newPath": "src/data/multiset/gcd.lean", "changes": [["add", "theorem", "gcd_eq_zero_iff", ["multiset"]]]}]}, {"timestamp": 1601804904, "sha": "509dd9ea", "message": "feat(linear_algebra/basic): span_singleton smul lemmas (#4394)\nAdd two submodule lemmas relating `span R ({r • x})` and `span R {x}`.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "span_singleton_smul_eq", ["submodule"]], ["add", "theorem", "span_singleton_smul_le", ["submodule"]]]}]}, {"timestamp": 1601794785, "sha": "c3d08357", "message": "chore(data/mv_polynomial): rename `pderivative` to `pderiv` (#4381)\nThis name matches `fderiv` and `deriv` we have in `analysis/`.", "changes": [{"oldPath": "src/data/mv_polynomial/pderivative.lean", "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": [["add", "def", "pderiv", ["mv_polynomial"]], ["add", "theorem", "pderiv_C", ["mv_polynomial"]], ["add", "theorem", "pderiv_C_mul", ["mv_polynomial"]], ["add", "theorem", "pderiv_eq_zero_of_not_mem_vars", ["mv_polynomial"]], ["add", "theorem", "pderiv_monomial", ["mv_polynomial"]], ["add", "theorem", "pderiv_monomial_mul", ["mv_polynomial"]], ["add", "theorem", "pderiv_monomial_single", ["mv_polynomial"]], ["add", "theorem", "pderiv_mul", ["mv_polynomial"]], ["del", "def", "pderivative", ["mv_polynomial"]], ["del", "theorem", "pderivative_C", ["mv_polynomial"]], ["del", "theorem", "pderivative_C_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_eq_zero_of_not_mem_vars", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial_single", ["mv_polynomial"]], ["del", "theorem", "pderivative_mul", ["mv_polynomial"]]]}]}, {"timestamp": 1601789943, "sha": "e902cae5", "message": "feat(category_theory/limits/cofinal): better API for cofinal functors (#4276)\nThis PR\n1. Proves that `F : C ⥤ D` being cofinal is equivalent to `colimit (F ⋙ G) ≅ colimit G` for all `G : D ⥤ E`. (Previously we just had the implication.)\n2. Proves that if `F` is cofinal then `limit (F.op ⋙ H) ≅ limit H` for all `H: Dᵒᵖ ⥤ E`.", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["add", "theorem", "zag_symmetric", ["category_theory"]], ["add", "theorem", "zigzag_symmetric", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/cofinal.lean", "newPath": "src/category_theory/limits/cofinal.lean", "changes": [["add", "theorem", "cofinal_of_colimit_comp_coyoneda_iso_punit", ["category_theory", "cofinal"]], ["add", "def", "colimit_comp_coyoneda_iso", ["category_theory", "cofinal"]], ["add", "def", "cones_equiv", ["category_theory", "cofinal"]], ["add", "def", "extend_cone", ["category_theory", "cofinal"]], ["add", "def", "extend_cone_cocone_to_cone", ["category_theory", "cofinal"]], ["add", "def", "extend_cone_cone_to_cocone", ["category_theory", "cofinal"]], ["add", "theorem", "has_limit_of_comp", ["category_theory", "cofinal"]], ["add", "def", "is_limit_extend_cone_equiv", ["category_theory", "cofinal"]], ["add", "def", "is_limit_whisker_equiv", ["category_theory", "cofinal"]], ["add", "def", "limit_cone_comp", ["category_theory", "cofinal"]], ["add", "theorem", "limit_cone_comp_aux", ["category_theory", "cofinal"]], ["add", "def", "limit_cone_of_comp", ["category_theory", "cofinal"]], ["add", "def", "limit_iso'", ["category_theory", "cofinal"]], ["add", "def", "limit_iso", ["category_theory", "cofinal"]], ["add", "theorem", "limit_pre_is_iso_aux", ["category_theory", "cofinal"]], ["add", "theorem", "zigzag_of_eqv_gen_quot_rel", ["category_theory", "cofinal"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "of_cone_equiv_apply_desc", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "of_cone_equiv_symm_apply_desc", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "colimit_eq", ["category_theory", "limits", "types"]], ["add", "theorem", "colimit_equiv_quot_apply", ["category_theory", "limits", "types"]], ["add", "def", "rel", ["category_theory", "limits", "types", "quot"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/yoneda.lean", "changes": [["add", "def", "colimit_cocone", ["category_theory", "coyoneda"]], ["add", "def", "colimit_cocone_is_colimit", ["category_theory", "coyoneda"]], ["add", "def", "colimit_coyoneda_iso", ["category_theory", "coyoneda"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}]}, {"timestamp": 1601783124, "sha": "e738e905", "message": "feat(algebra/group_power/identities): named ring identities (#4390)\nThis PR adds a new file containing some \"named\" ring identities provable by `ring`.", "changes": [{"oldPath": null, "newPath": "src/algebra/group_power/identities.lean", "changes": [["add", "theorem", "pow_four_add_four_mul_pow_four'", []], ["add", "theorem", "pow_four_add_four_mul_pow_four", []], ["add", "theorem", "pow_two_add_mul_pow_two_mul_pow_two_add_mul_pow_two", []], ["add", "theorem", "pow_two_add_pow_two_mul_pow_two_add_pow_two", []], ["add", "theorem", "sum_eight_sq_mul_sum_eight_sq", []], ["add", "theorem", "sum_four_sq_mul_sum_four_sq", []]]}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1601776507, "sha": "f2044a57", "message": "chore(scripts): update nolints.txt (#4392)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601769160, "sha": "333c2164", "message": "chore(algebra/group/type_tags): Use ≃ instead of → (#4346)\nThese functions are all equivalences, so we may as well expose that in their type\nThis also fills in some conversions that were missing.\nUnfortunately this requires some type ascriptions in a handful of places.\nIt might be possible to remove these somehow.\nThis zulip thread contains a mwe: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Type.20inference.20on.20.60.E2.86.92.60.20vs.20.60.E2.89.83.60/near/211922501.", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["add", "def", "to_multiplicative''", ["add_monoid_hom"]], ["mod", "def", "to_multiplicative'", ["add_monoid_hom"]], ["mod", "def", "to_multiplicative", ["add_monoid_hom"]], ["mod", "def", "of_mul", ["additive"]], ["mod", "def", "to_mul", ["additive"]], ["add", "def", "to_additive''", ["monoid_hom"]], ["mod", "def", "to_additive'", ["monoid_hom"]], ["mod", "def", "to_additive", ["monoid_hom"]], ["mod", "def", "of_add", ["multiplicative"]], ["mod", "def", "to_add", ["multiplicative"]], ["del", "theorem", "of_add_injective", []], ["del", "theorem", "of_mul_injective", []], ["del", "theorem", "to_add_injective", []], ["del", "theorem", "to_mul_injective", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "to_multiplicative''", ["add_equiv"]], ["add", "def", "to_multiplicative'", ["add_equiv"]], ["mod", "def", "to_multiplicative", ["add_equiv"]], ["add", "def", "to_additive''", ["mul_equiv"]], ["add", "def", "to_additive'", ["mul_equiv"]], ["mod", "def", "to_additive", ["mul_equiv"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/ring_theory/roots_of_unity.lean", "newPath": "src/ring_theory/roots_of_unity.lean", "changes": []}]}, {"timestamp": 1601758277, "sha": "a0ba5e7d", "message": "doc(data/real/*): add a few docstrings, `ereal.has_zero`, and `ereal.inhabited` (#4378)", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1601758275, "sha": "e593ffa6", "message": "feat(algebra/ordered*): more simp lemmas (#4359)\nSimplify expressions like `0 < a * b`, `0 < a / b`, `a / b < 1` etc. to FOL formulas of inequalities on `a`, `b`.", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["mod", "theorem", "pow_nonneg", []], ["mod", "theorem", "pow_pos", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "inv_eq_one'", []]]}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "le_iff_lt", ["ne"]], ["add", "theorem", "lt_or_lt", ["ne"]]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "div_le_one_iff", []], ["add", "theorem", "div_lt_one_iff", []], ["add", "theorem", "div_neg_iff", []], ["add", "theorem", "div_nonneg_iff", []], ["add", "theorem", "div_nonpos_iff", []], ["add", "theorem", "div_pos_iff", []], ["add", "theorem", "inv_le_one_iff", []], ["add", "theorem", "inv_lt_one_iff", []], ["add", "theorem", "inv_lt_one_iff_of_pos", []], ["add", "theorem", "one_le_div_iff", []], ["add", "theorem", "one_le_inv_iff", []], ["add", "theorem", "one_lt_div_iff", []], ["add", "theorem", "one_lt_inv_iff", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["linear_ordered_ring"]], ["add", "theorem", "mul_neg_iff", []], ["add", "theorem", "mul_nonneg_iff", []], ["add", "theorem", "mul_nonpos_iff", []], ["add", "theorem", "mul_pos_iff", []], ["add", "theorem", "nonneg_and_nonneg_or_nonpos_and_nonpos_of_mul_nnonneg", []], ["mod", "theorem", "pos_of_mul_pos_left", []], ["mod", "theorem", "pos_of_mul_pos_right", []]]}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "coe_nat_nonneg", ["int"]]]}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}]}, {"timestamp": 1601751398, "sha": "b790b27d", "message": "feat(slim_check): sampleable instance for generating functions and injective functions (#3967)\nThis also adds `printable_prop` to trace why propositions hold or don't hold and `sampleable_ext` to allow the data structure generated and shrunken by `slim_check` to have a different type from the type we are looking for.", "changes": [{"oldPath": "src/control/uliftable.lean", "newPath": "src/control/uliftable.lean", "changes": [["mod", "def", "adapt_up", ["uliftable"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": []}, {"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": null, "newPath": "src/testing/slim_check/functions.lean", "changes": [["add", "def", "apply", ["slim_check", "injective_function"]], ["add", "theorem", "apply_id_injective", ["slim_check", "injective_function"]], ["add", "theorem", "apply_id_mem_iff", ["slim_check", "injective_function"]], ["add", "def", "apply_id", ["slim_check", "injective_function", "list"]], ["add", "theorem", "apply_id_cons", ["slim_check", "injective_function", "list"]], ["add", "theorem", "apply_id_eq_self", ["slim_check", "injective_function", "list"]], ["add", "theorem", "apply_id_zip_eq", ["slim_check", "injective_function", "list"]], ["add", "def", "slice", ["slim_check", "injective_function", "perm"]], ["add", "def", "slice_sizes", ["slim_check", "injective_function"]], ["add", "inductive", "injective_function", ["slim_check"]], ["add", "def", "apply", ["slim_check", "total_function"]], ["add", "def", "to_finmap'", ["slim_check", "total_function", "list"]], ["add", "def", "repr_aux", ["slim_check", "total_function"]], ["add", "def", "sizeof", ["slim_check", "total_function", "total"]], ["add", "inductive", "total_function", ["slim_check"]]]}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": [["add", "def", "choose_nat'", ["slim_check", "gen"]], ["add", "def", "elements", ["slim_check", "gen"]], ["add", "def", "freq", ["slim_check", "gen"]], ["add", "def", "freq_aux", ["slim_check", "gen"]], ["del", "def", "one_of_aux", ["slim_check", "gen"]], ["add", "def", "resize", ["slim_check", "gen"]]]}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": [["add", "def", "has_sizeof", ["slim_check", "int"]], ["add", "def", "mk", ["slim_check", "large"]], ["add", "def", "large", ["slim_check"]], ["mod", "def", "print_samples", ["slim_check"]], ["add", "def", "rec_shrink_with", ["slim_check"]], ["add", "theorem", "rec_shrink_with_eq", ["slim_check"]], ["add", "def", "mk", ["slim_check", "small"]], ["add", "def", "small", ["slim_check"]], ["mod", "def", "shrink", ["slim_check", "sum"]]]}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": [["add", "def", "add_shrinks", ["slim_check"]], ["mod", "def", "add_var_to_counter_example", ["slim_check"]], ["add", "def", "format_failure'", ["slim_check"]], ["add", "def", "format_failure", ["slim_check"]], ["mod", "def", "minimize", ["slim_check"]], ["mod", "def", "minimize_aux", ["slim_check"]], ["del", "def", "to_string", ["slim_check", "test_result"]], ["mod", "def", "trace_if_giveup", ["slim_check"]], ["add", "def", "mk", ["slim_check", "use_has_to_string"]], ["add", "def", "use_has_to_string", ["slim_check"]]]}, {"oldPath": null, "newPath": "test/mk_slim_check_test.lean", "changes": []}, {"oldPath": "test/slim_check.lean", "newPath": "test/slim_check.lean", "changes": []}]}, {"timestamp": 1601738809, "sha": "c39170e4", "message": "doc(*): add a few short module docstrings (#4370)", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}]}, {"timestamp": 1601720754, "sha": "946ab026", "message": "chore(.github/workflows): github action for crossing off PR dependencies (#4367)", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/sync_closed_tasks.yaml", "changes": []}]}, {"timestamp": 1601701216, "sha": "069952b8", "message": "chore(category_theory/limits/binary_products): weaken assumptions (#4373)\nweakens the assumptions on which limits need to exist for these constructions\nnot much of a change but the assumptions I used were too strong so just a small fix", "changes": [{"oldPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "changes": [["mod", "def", "alternative_cone", ["category_theory", "limits"]], ["mod", "def", "alternative_cone_is_limit", ["category_theory", "limits"]]]}]}, {"timestamp": 1601701215, "sha": "9e455c15", "message": "feat(data/monoid_algebra): Allow R ≠ k in semimodule R (monoid_algebra k G) (#4365)\nAlso does the same for the additive version `semimodule R (add_monoid_algebra k G)`.", "changes": [{"oldPath": "src/algebra/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": [["mod", "theorem", "alg_hom_ext", ["add_monoid_algebra"]], ["mod", "theorem", "alg_hom_ext_iff", ["add_monoid_algebra"]], ["mod", "def", "algebra_map'", ["add_monoid_algebra"]], ["mod", "theorem", "coe_algebra_map", ["add_monoid_algebra"]], ["mod", "def", "lift", ["add_monoid_algebra"]], ["mod", "theorem", "alg_hom_ext", ["monoid_algebra"]], ["mod", "theorem", "coe_algebra_map", ["monoid_algebra"]], ["mod", "def", "lift", ["monoid_algebra"]], ["mod", "theorem", "lift_apply", ["monoid_algebra"]], ["mod", "theorem", "lift_of", ["monoid_algebra"]], ["mod", "theorem", "lift_single", ["monoid_algebra"]], ["mod", "theorem", "lift_symm_apply", ["monoid_algebra"]], ["mod", "theorem", "lift_unique'", ["monoid_algebra"]], ["mod", "theorem", "lift_unique", ["monoid_algebra"]], ["add", "theorem", "single_algebra_map_eq_algebra_map_mul_of", ["monoid_algebra"]]]}]}, {"timestamp": 1601698129, "sha": "6ab3eb7c", "message": "chore(category_theory/limits/equalizers): some equalizer fixups (#4372)\nA couple of minor changes for equalizers:\n- Add some `simps` attributes\n- Removes some redundant brackets\n- Simplify the construction of an iso between cones (+dual)\n- Show the equalizer fork is a limit (+dual)", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "coequalizer_is_coequalizer", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "cofork"]], ["mod", "def", "ext", ["category_theory", "limits", "cofork"]], ["add", "def", "equalizer_is_equalizer", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "fork"]], ["mod", "def", "ext", ["category_theory", "limits", "fork"]]]}]}, {"timestamp": 1601687212, "sha": "6a524003", "message": "chore(scripts): update nolints.txt (#4371)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601671785, "sha": "da24addb", "message": "feat(data/multiset): ordered sum lemmas (#4305)\nAdd some lemmas about products in ordered monoids and sums in ordered add monoids, and a multiset count filter lemma (and a rename of a count filter lemma)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "all_one_of_le_one_le_of_prod_eq_one", ["list"]], ["add", "theorem", "one_le_prod_of_one_le", ["list"]], ["add", "theorem", "single_le_prod", ["list"]], ["add", "theorem", "sum_eq_zero_iff", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "all_one_of_le_one_le_of_prod_eq_one", ["multiset"]], ["del", "theorem", "count_filter", ["multiset"]], ["add", "theorem", "count_filter_of_neg", ["multiset"]], ["add", "theorem", "count_filter_of_pos", ["multiset"]], ["add", "theorem", "one_le_prod_of_one_le", ["multiset"]], ["add", "theorem", "single_le_prod", ["multiset"]], ["add", "theorem", "sum_eq_zero_iff", ["multiset"]]]}]}, {"timestamp": 1601661712, "sha": "2634c1b5", "message": "feat(category_theory/cones): map_cone_inv as an equivalence (#4253)\nWhen `G` is an equivalence, we have `G.map_cone_inv : cone (F ⋙ G) → cone F`, and that this is an inverse to `G.map_cone`, but not quite that these constitute an equivalence of categories. This PR fixes that.", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "theorem", "counit_app_functor", ["category_theory", "equivalence"]], ["del", "theorem", "counit_functor", ["category_theory", "equivalence"]], ["add", "theorem", "counit_inv_app_functor", ["category_theory", "equivalence"]], ["del", "theorem", "functor_unit", ["category_theory", "equivalence"]], ["del", "theorem", "inverse_counit", ["category_theory", "equivalence"]], ["add", "theorem", "unit_app_inverse", ["category_theory", "equivalence"]], ["add", "theorem", "unit_inv_app_inverse", ["category_theory", "equivalence"]], ["del", "theorem", "unit_inverse", ["category_theory", "equivalence"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "map_cocone_inv", ["category_theory", "functor"]], ["add", "def", "map_cocone_inv_map_cocone", ["category_theory", "functor"]], ["add", "def", "map_cocone_map_cocone_inv", ["category_theory", "functor"]], ["add", "def", "functoriality_equivalence", ["category_theory", "limits", "cocones"]], ["add", "def", "functoriality_equivalence", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/transport.lean", "newPath": "src/category_theory/monoidal/transport.lean", "changes": []}]}, {"timestamp": 1601643984, "sha": "2ce359b9", "message": "feat(data/nat/parity,data/int/parity): odd numbers (#4357)\nAs discussed at\n,\ndefine `nat.odd` and `int.odd` to allow a more literal expression\n(outside of mathlib; for example, in formal olympiad problem\nstatements) of results whose informal statement refers to odd numbers.\nThese definitions are not expected to be used in mathlib beyond the\n`simp` lemmas added here that translate them back to `¬ even`. This\nis similar to how `>` is defined but almost all mathlib results are\nexpected to use `<` instead.\nIt's likely that expressing olympiad problem statements literally in\nLean will end up using some other such definitions, where avoiding API\nduplication means almost everything relevant in mathlib is developed\nin terms of the expansion of the definition.", "changes": [{"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "def", "odd", ["int"]], ["add", "theorem", "odd_def", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "def", "odd", ["nat"]], ["add", "theorem", "odd_def", ["nat"]]]}]}, {"timestamp": 1601640741, "sha": "53570c0e", "message": "chore(README): add zulip badge (#4362)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1601633673, "sha": "eeb9bb6a", "message": "feat(data/polynomial/coeff): single-variate `C_dvd_iff_dvd_coeff` (#4355)\nAdds a single-variate version of the lemma `mv_polynomial.C_dvd_iff_dvd_coeff`\n(Useful for Gauss's Lemma)", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "C_dvd_iff_dvd_coeff", ["polynomial"]]]}]}, {"timestamp": 1601633671, "sha": "8876ba25", "message": "feat(ring_theory/roots_of_unity): (primitive) roots of unity (#4260)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/roots_of_unity.lean", "changes": [["add", "theorem", "card_roots_of_unity", []], ["add", "theorem", "card_primitive_roots", ["is_primitive_root"]], ["add", "theorem", "card_roots_of_unity'", ["is_primitive_root"]], ["add", "theorem", "card_roots_of_unity", ["is_primitive_root"]], ["add", "theorem", "coe_subgroup_iff", ["is_primitive_root"]], ["add", "theorem", "coe_units_iff", ["is_primitive_root"]], ["add", "theorem", "eq_neg_one_of_two_right", ["is_primitive_root"]], ["add", "theorem", "eq_pow_of_mem_roots_of_unity", ["is_primitive_root"]], ["add", "theorem", "eq_pow_of_pow_eq_one", ["is_primitive_root"]], ["add", "theorem", "fpow_eq_one", ["is_primitive_root"]], ["add", "theorem", "fpow_eq_one_iff_dvd", ["is_primitive_root"]], ["add", "theorem", "fpow_of_gcd_eq_one", ["is_primitive_root"]], ["add", "theorem", "gpow_eq_one", ["is_primitive_root"]], ["add", "theorem", "gpow_eq_one_iff_dvd", ["is_primitive_root"]], ["add", "theorem", "gpow_of_gcd_eq_one", ["is_primitive_root"]], ["add", "theorem", "gpowers_eq", ["is_primitive_root"]], ["add", "theorem", "iff_def", ["is_primitive_root"]], ["add", "theorem", "inv'", ["is_primitive_root"]], ["add", "theorem", "inv", ["is_primitive_root"]], ["add", "theorem", "inv_iff'", ["is_primitive_root"]], ["add", "theorem", "inv_iff", ["is_primitive_root"]], ["add", "theorem", "is_primitive_root_iff'", ["is_primitive_root"]], ["add", "theorem", "is_primitive_root_iff", ["is_primitive_root"]], ["add", "theorem", "is_unit", ["is_primitive_root"]], ["add", "theorem", "mem_roots_of_unity", ["is_primitive_root"]], ["add", "theorem", "mk_of_lt", ["is_primitive_root"]], ["add", "theorem", "neg_one", ["is_primitive_root"]], ["add", "theorem", "one", ["is_primitive_root"]], ["add", "theorem", "one_right_iff", ["is_primitive_root"]], ["add", "theorem", "pow_eq_one_iff_dvd", ["is_primitive_root"]], ["add", "theorem", "pow_iff_coprime", ["is_primitive_root"]], ["add", "theorem", "pow_inj", ["is_primitive_root"]], ["add", "theorem", "pow_ne_one_of_pos_of_lt", ["is_primitive_root"]], ["add", "theorem", "pow_of_coprime", ["is_primitive_root"]], ["add", "def", "zmod_equiv_gpowers", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_gpowers_apply_coe_int", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_gpowers_apply_coe_nat", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_gpowers_symm_apply_gpow'", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_gpowers_symm_apply_gpow", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_gpowers_symm_apply_pow'", ["is_primitive_root"]], ["add", "theorem", "zmod_equiv_gpowers_symm_apply_pow", ["is_primitive_root"]], ["add", "structure", "is_primitive_root", []], ["add", "theorem", "map_roots_of_unity", []], ["add", "theorem", "mem_primitive_roots", []], ["add", "theorem", "mem_roots_of_unity", []], ["add", "theorem", "mem_roots_of_unity_iff_mem_nth_roots", []], ["add", "def", "primitive_roots", []], ["add", "def", "roots_of_unity", []], ["add", "def", "roots_of_unity_equiv_nth_roots", []], ["add", "theorem", "roots_of_unity_equiv_nth_roots_apply", []], ["add", "theorem", "roots_of_unity_equiv_nth_roots_symm_apply", []], ["add", "theorem", "roots_of_unity_le_of_dvd", []]]}]}, {"timestamp": 1601627704, "sha": "d631126a", "message": "chore(algebra): move algebra and monoid algebra to algebra/ (#4298)\nOn the basis that all the basic definitions of algebraic gadgets are otherwise in `src/algebra/`, I'd like to move `ring_theory/algebra.lean`, `ring_theory/algebra_operations.lean`, and `data/monoid_algebra.lean` there too.", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/algebra/algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/algebra/algebra/operations.lean", "changes": []}, {"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": []}, {"oldPath": "src/algebra/lie/basic.lean", "newPath": "src/algebra/lie/basic.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/algebra/monoid_algebra.lean", "changes": []}, {"oldPath": "src/algebra/ring_quot.lean", "newPath": "src/algebra/ring_quot.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1601623169, "sha": "1f91d93b", "message": "chore(ring_theory/power_series): rename variables (#4361)\nUse `R`, `S`, `T` for (semi)rings and `k` for a field.", "changes": [{"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "theorem", "coe_C", ["mv_polynomial"]], ["mod", "theorem", "coe_add", ["mv_polynomial"]], ["mod", "theorem", "coe_monomial", ["mv_polynomial"]], ["mod", "theorem", "coe_mul", ["mv_polynomial"]], ["mod", "theorem", "coe_one", ["mv_polynomial"]], ["mod", "def", "ring_hom", ["mv_polynomial", "coe_to_mv_power_series"]], ["mod", "theorem", "coe_zero", ["mv_polynomial"]], ["mod", "theorem", "coeff_coe", ["mv_polynomial"]], ["mod", "def", "C", ["mv_power_series"]], ["mod", "def", "X", ["mv_power_series"]], ["mod", "theorem", "X_def", ["mv_power_series"]], ["mod", "theorem", "X_dvd_iff", ["mv_power_series"]], ["mod", "theorem", "X_inj", ["mv_power_series"]], ["mod", "theorem", "X_pow_dvd_iff", ["mv_power_series"]], ["mod", "def", "coeff", ["mv_power_series"]], ["mod", "theorem", "coeff_C", ["mv_power_series"]], ["mod", "theorem", "coeff_C_mul", ["mv_power_series"]], ["mod", "theorem", "coeff_inv", ["mv_power_series"]], ["mod", "theorem", "coeff_inv_aux", ["mv_power_series"]], ["mod", "theorem", "coeff_inv_of_unit", ["mv_power_series"]], ["mod", "theorem", "coeff_map", ["mv_power_series"]], ["mod", "theorem", "coeff_monomial'", ["mv_power_series"]], ["mod", "theorem", "coeff_monomial", ["mv_power_series"]], ["mod", "theorem", "coeff_mul", ["mv_power_series"]], ["mod", "theorem", "coeff_mul_C", ["mv_power_series"]], ["mod", "theorem", "coeff_smul", ["mv_power_series"]], ["mod", "theorem", "coeff_trunc", ["mv_power_series"]], ["mod", "theorem", "coeff_zero", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_C", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_X", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_eq_constant_coeff_apply", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_mul_X", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_one", ["mv_power_series"]], ["mod", "def", "constant_coeff", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_C", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_X", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_inv", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_inv_of_unit", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_map", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_one", ["mv_power_series"]], ["mod", "theorem", "constant_coeff_zero", ["mv_power_series"]], ["mod", "theorem", "ext", ["mv_power_series"]], ["mod", "theorem", "ext_iff", ["mv_power_series"]], ["mod", "theorem", "inv_eq_zero", ["mv_power_series"]], ["mod", "def", "inv_of_unit", ["mv_power_series"]], ["mod", "theorem", "inv_of_unit_eq'", ["mv_power_series"]], ["mod", "theorem", "inv_of_unit_eq", ["mv_power_series"]], ["mod", "theorem", "is_unit_constant_coeff", ["mv_power_series"]], ["mod", "def", "map", ["mv_power_series"]], ["mod", "theorem", "map_id", ["mv_power_series"]], ["mod", "def", "monomial", ["mv_power_series"]], ["mod", "theorem", "monomial_mul_monomial", ["mv_power_series"]], ["mod", "theorem", "monomial_zero_eq_C", ["mv_power_series"]], ["mod", "theorem", "monomial_zero_eq_C_apply", ["mv_power_series"]], ["mod", "theorem", "mul_inv_of_unit", ["mv_power_series"]], ["mod", "def", "trunc", ["mv_power_series"]], ["mod", "theorem", "trunc_C", ["mv_power_series"]], ["mod", "def", "trunc_fun", ["mv_power_series"]], ["mod", "theorem", "trunc_one", ["mv_power_series"]], ["mod", "def", "mv_power_series", []], ["mod", "theorem", "coe_C", ["polynomial"]], ["mod", "theorem", "coe_add", ["polynomial"]], ["mod", "theorem", "coe_monomial", ["polynomial"]], ["mod", "theorem", "coe_mul", ["polynomial"]], ["mod", "theorem", "coe_one", ["polynomial"]], ["mod", "def", "ring_hom", ["polynomial", "coe_to_power_series"]], ["mod", "theorem", "coe_zero", ["polynomial"]], ["mod", "theorem", "coeff_coe", ["polynomial"]], ["mod", "def", "C", ["power_series"]], ["mod", "def", "X", ["power_series"]], ["mod", "theorem", "X_dvd_iff", ["power_series"]], ["mod", "theorem", "X_eq", ["power_series"]], ["mod", "theorem", "X_pow_dvd_iff", ["power_series"]], ["mod", "theorem", "X_pow_eq", ["power_series"]], ["mod", "theorem", "X_prime", ["power_series"]], ["mod", "def", "coeff", ["power_series"]], ["mod", "theorem", "coeff_C", ["power_series"]], ["mod", "theorem", "coeff_C_mul", ["power_series"]], ["mod", "theorem", "coeff_inv", ["power_series"]], ["mod", "theorem", "coeff_inv_aux", ["power_series"]], ["mod", "theorem", "coeff_inv_of_unit", ["power_series"]], ["mod", "theorem", "coeff_map", ["power_series"]], ["mod", "theorem", "coeff_mk", ["power_series"]], ["mod", "theorem", "coeff_monomial'", ["power_series"]], ["mod", "theorem", "coeff_monomial", ["power_series"]], ["mod", "theorem", "coeff_mul", ["power_series"]], ["mod", "theorem", "coeff_mul_C", ["power_series"]], ["mod", "theorem", "coeff_of_lt_order", ["power_series"]], ["mod", "theorem", "coeff_one_X", ["power_series"]], ["mod", "theorem", "coeff_order", ["power_series"]], ["mod", "theorem", "coeff_smul", ["power_series"]], ["mod", "theorem", "coeff_succ_mul_X", ["power_series"]], ["mod", "theorem", "coeff_trunc", ["power_series"]], ["mod", "theorem", "coeff_zero_C", ["power_series"]], ["mod", "theorem", "coeff_zero_X", ["power_series"]], ["mod", "theorem", "coeff_zero_eq_constant_coeff_apply", ["power_series"]], ["mod", "theorem", "coeff_zero_mul_X", ["power_series"]], ["mod", "theorem", "coeff_zero_one", ["power_series"]], ["mod", "def", "constant_coeff", ["power_series"]], ["mod", "theorem", "constant_coeff_C", ["power_series"]], ["mod", "theorem", "constant_coeff_X", ["power_series"]], ["mod", "theorem", "constant_coeff_inv", ["power_series"]], ["mod", "theorem", "constant_coeff_inv_of_unit", ["power_series"]], ["mod", "theorem", "constant_coeff_one", ["power_series"]], ["mod", "theorem", "constant_coeff_zero", ["power_series"]], ["mod", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["power_series"]], ["mod", "theorem", "ext", ["power_series"]], ["mod", "theorem", "ext_iff", ["power_series"]], ["mod", "theorem", "inv_eq_inv_aux", ["power_series"]], ["mod", "theorem", "inv_eq_zero", ["power_series"]], ["mod", "def", "inv_of_unit", ["power_series"]], ["mod", "theorem", "inv_of_unit_eq'", ["power_series"]], ["mod", "theorem", "inv_of_unit_eq", ["power_series"]], ["mod", "theorem", "is_unit_constant_coeff", ["power_series"]], ["mod", "theorem", "le_order", ["power_series"]], ["mod", "theorem", "le_order_add", ["power_series"]], ["mod", "def", "map", ["power_series"]], ["mod", "theorem", "map_id", ["power_series"]], ["mod", "def", "mk", ["power_series"]], ["mod", "def", "monomial", ["power_series"]], ["mod", "theorem", "monomial_eq_mk", ["power_series"]], ["mod", "theorem", "monomial_zero_eq_C", ["power_series"]], ["mod", "theorem", "monomial_zero_eq_C_apply", ["power_series"]], ["mod", "theorem", "mul_inv_of_unit", ["power_series"]], ["mod", "theorem", "nat_le_order", ["power_series"]], ["mod", "def", "order", ["power_series"]], ["mod", "theorem", "order_X", ["power_series"]], ["mod", "theorem", "order_X_pow", ["power_series"]], ["mod", "theorem", "order_add_of_order_eq", ["power_series"]], ["mod", "theorem", "order_eq", ["power_series"]], ["mod", "theorem", "order_eq_nat", ["power_series"]], ["mod", "theorem", "order_eq_top", ["power_series"]], ["mod", "theorem", "order_finite_of_coeff_ne_zero", ["power_series"]], ["mod", "theorem", "order_le", ["power_series"]], ["mod", "theorem", "order_monomial", ["power_series"]], ["mod", "theorem", "order_monomial_of_ne_zero", ["power_series"]], ["mod", "theorem", "order_mul", ["power_series"]], ["mod", "theorem", "order_mul_ge", ["power_series"]], ["mod", "theorem", "order_one", ["power_series"]], ["mod", "theorem", "order_zero", ["power_series"]], ["mod", "theorem", "span_X_is_prime", ["power_series"]], ["mod", "def", "trunc", ["power_series"]], ["mod", "theorem", "trunc_C", ["power_series"]], ["mod", "theorem", "trunc_add", ["power_series"]], ["mod", "theorem", "trunc_one", ["power_series"]], ["mod", "theorem", "trunc_zero", ["power_series"]], ["mod", "def", "power_series", []]]}]}, {"timestamp": 1601618263, "sha": "140db109", "message": "chore(data/monoid_algebra): Make the style in `lift` consistent (#4347)\nThis continues from a06c87ed28989d062aa3d5324e880e62edf4a2f8, which changed add_monoid_algebra.lift but not monoid_algebra.lift.\nNote only the additive proof needs `erw` (to unfold `multiplicative`).", "changes": [{"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1601600661, "sha": "d41f3863", "message": "chore(scripts): update nolints.txt (#4358)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601584802, "sha": "4ef680b1", "message": "feat(group_theory): subgroups of real numbers (#4334)\nThis fills the last hole in the \"Topology of R\" section of our undergrad curriculum: additive subgroups of real numbers are either dense or cyclic. Most of this PR is supporting material about ordered abelian groups. \nCo-Authored-By: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com>", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "exists_int_smul_near_of_pos'", ["decidable_linear_ordered_add_comm_group"]], ["add", "theorem", "exists_int_smul_near_of_pos", ["decidable_linear_ordered_add_comm_group"]]]}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "gsmul_nonneg", []], ["add", "theorem", "nsmul_lt_nsmul", []], ["mod", "theorem", "nsmul_nonneg", []], ["add", "theorem", "nsmul_pos", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "gsmul_le_gsmul", []], ["add", "theorem", "gsmul_le_gsmul_iff", []], ["add", "theorem", "gsmul_lt_gsmul", []], ["add", "theorem", "gsmul_lt_gsmul_iff", []], ["add", "theorem", "gsmul_pos", []], ["add", "theorem", "nsmul_le_nsmul_iff", []], ["add", "theorem", "nsmul_lt_nsmul_iff", []]]}, {"oldPath": null, "newPath": "src/group_theory/archimedean.lean", "changes": [["add", "theorem", "cyclic_of_min", ["add_subgroup"]], ["add", "theorem", "subgroup_cyclic", ["int"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "closure_singleton_zero", ["add_subgroup"]], ["add", "theorem", "bot_or_exists_ne_one", ["subgroup"]], ["add", "theorem", "bot_or_nontrivial", ["subgroup"]], ["add", "theorem", "closure_singleton_one", ["subgroup"]], ["add", "theorem", "eq_bot_iff_forall", ["subgroup"]], ["add", "theorem", "nontrivial_iff_exists_ne_one", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "closure_singleton_zero", ["add_submonoid"]], ["add", "theorem", "closure_singleton_one", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "bot_or_exists_ne_one", ["submonoid"]], ["add", "theorem", "bot_or_nontrivial", ["submonoid"]], ["add", "theorem", "eq_bot_iff_forall", ["submonoid"]], ["add", "theorem", "nontrivial_iff_exists_ne_one", ["submonoid"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "exists_between_self_add'", ["is_glb"]], ["add", "theorem", "exists_between_self_add", ["is_glb"]], ["add", "theorem", "exists_between_sub_self'", ["is_lub"]], ["add", "theorem", "exists_between_sub_self", ["is_lub"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "int_mul_mem", ["add_subgroup"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "mem_closure_iff", ["real"]], ["add", "theorem", "subgroup_dense_of_no_min", ["real"]], ["add", "theorem", "subgroup_dense_or_cyclic", ["real"]]]}]}, {"timestamp": 1601577788, "sha": "48518578", "message": "chore(analysis/normed_space): define `norm_one_class` (#4323)\nMany normed rings have `∥1⊫1`. Add a typeclass mixin for this property.\nAPI changes:\n* drop `normed_field.norm_one`, use `norm_one` instead;\n* same with `normed_field.nnnorm_one`;\n* new typeclass `norm_one_class` for `∥1∥ = 1`;\n* add `list.norm_prod_le`, `list.norm_prod_le`, `finset.norm_prod_le`, `finset.norm_prod_le'`:\n norm of the product of finitely many elements is less than or equal to the product of their norms;\n versions with prime assume that a `list` or a `finset` is nonempty, while the other versions\n assume `[norm_one_class]`;\n* rename `norm_pow_le` to `norm_pow_le'`, new `norm_pow_le` assumes `[norm_one_class]` instead\n of `0 < n`;\n* add a few supporting lemmas about `list`s and `finset`s.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_mk", ["finset"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "eventually_norm_pow_le", []], ["add", "theorem", "norm_prod_le'", ["finset"]], ["add", "theorem", "norm_prod_le", ["finset"]], ["add", "theorem", "norm_prod_le'", ["list"]], ["add", "theorem", "norm_prod_le", ["list"]], ["mod", "theorem", "mul_left_bound", []], ["mod", "theorem", "mul_right_bound", []], ["add", "theorem", "nnnorm_one", []], ["mod", "theorem", "norm_mul_le", []], ["add", "theorem", "norm_pow_le'", []], ["mod", "theorem", "norm_pow_le", []], ["add", "theorem", "nontrivial", ["normed_algebra"]], ["add", "theorem", "norm_one_class", ["normed_algebra"]], ["del", "theorem", "to_nonzero", ["normed_algebra"]], ["del", "theorem", "nnnorm_one", ["normed_field"]], ["del", "theorem", "norm_one", ["normed_field"]], ["mod", "theorem", "norm_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "mk_cons", ["finset"]], ["add", "theorem", "mk_zero", ["finset"]], ["add", "theorem", "nonempty_cons", ["finset"]], ["add", "theorem", "nonempty_mk_coe", ["finset"]], ["add", "theorem", "not_nonempty_empty", ["finset"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["del", "theorem", "norm_one", ["padic_int"]]]}]}, {"timestamp": 1601573856, "sha": "d5834ee3", "message": "feat(data/real/irrational): add a lemma to deduce nat_degree from irrational root (#4349)\nThis PR is splitted from #4301 .", "changes": [{"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["add", "theorem", "nat_degree_gt_one_of_irrational_root", []]]}]}, {"timestamp": 1601573854, "sha": "ddaa325e", "message": "feat(archive/imo): formalize IMO 1969 problem 1 (#4261)\nThis is a formalization of the problem and solution for the first problem on the 1969 IMO:\nProve that there are infinitely many natural numbers $a$ with the following property: the number $z = n^4 + a$ is not prime for any natural number $n$", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1969_q1.lean", "changes": [["add", "theorem", "factorization", []], ["add", "theorem", "imo1969_q1", []], ["add", "theorem", "int_large", []], ["add", "theorem", "int_not_prime", []], ["add", "theorem", "left_factor_large", []], ["add", "theorem", "polynomial_not_prime", []], ["add", "theorem", "right_factor_large", []]]}]}, {"timestamp": 1601570605, "sha": "7767ef8b", "message": "feat(number_theory/divisors): defines the finsets of divisors/proper divisors, perfect numbers, etc. (#4310)\nDefines `nat.divisors n` to be the set of divisors of `n`, and `nat.proper_divisors` to be the set of divisors of `n` other than `n`.\nDefines `nat.divisors_antidiagonal` in analogy to other `antidiagonal`s used to define convolutions\nDefines `nat.perfect`, the predicate for perfect numbers", "changes": [{"oldPath": null, "newPath": "src/number_theory/divisors.lean", "changes": [["add", "theorem", "divisor_le", ["nat"]], ["add", "def", "divisors", ["nat"]], ["add", "def", "divisors_antidiagonal", ["nat"]], ["add", "theorem", "divisors_antidiagonal_one", ["nat"]], ["add", "theorem", "divisors_antidiagonal_zero", ["nat"]], ["add", "theorem", "divisors_eq_proper_divisors_insert_self", ["nat"]], ["add", "theorem", "divisors_zero", ["nat"]], ["add", "theorem", "fst_mem_divisors_of_mem_antidiagonal", ["nat"]], ["add", "theorem", "map_swap_divisors_antidiagonal", ["nat"]], ["add", "theorem", "mem_divisors", ["nat"]], ["add", "theorem", "mem_divisors_antidiagonal", ["nat"]], ["add", "theorem", "mem_proper_divisors", ["nat"]], ["add", "def", "perfect", ["nat"]], ["add", "theorem", "perfect_iff_sum_divisors_eq_two_mul", ["nat"]], ["add", "theorem", "perfect_iff_sum_proper_divisors", ["nat"]], ["add", "theorem", "not_self_mem", ["nat", "proper_divisors"]], ["add", "def", "proper_divisors", ["nat"]], ["add", "theorem", "proper_divisors_zero", ["nat"]], ["add", "theorem", "snd_mem_divisors_of_mem_antidiagonal", ["nat"]], ["add", "theorem", "sum_divisors_eq_sum_proper_divisors_add_self", ["nat"]], ["add", "theorem", "swap_mem_divisors_antidiagonal", ["nat"]]]}]}, {"timestamp": 1601562491, "sha": "f10dda05", "message": "feat(data/nat/basic): simp-lemmas for bit0 and bit1 mod two (#4343)\nCo-Authored-By: Gabriel Ebner ", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "bit0_mod_two", ["nat"]], ["add", "theorem", "bit1_mod_two", ["nat"]]]}]}, {"timestamp": 1601562487, "sha": "0fc7b29e", "message": "feat(data/mv_polynomial): stub on invertible elements (#4320)\nMore from the Witt vector branch.", "changes": [{"oldPath": null, "newPath": "src/data/mv_polynomial/invertible.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "def", "algebra_tower", ["is_scalar_tower", "invertible"]], ["add", "def", "invertible_algebra_coe_nat", ["is_scalar_tower"]]]}]}, {"timestamp": 1601562481, "sha": "3d58fce5", "message": "feat(linear_algebra): determinant of `matrix.block_diagonal` (#4300)\nThis PR shows the determinant of `matrix.block_diagonal` is the product of the determinant of each subblock.\nThe only contributing permutations in the expansion of the determinant are those which map each block to the same block. Each of those permutations has the form `equiv.prod_congr_left σ`. Using `equiv.perm.extend` and `equiv.prod_congr_right`, we can compute the sign of `equiv.prod_congr_left σ`, and with a bit of algebraic manipulation we reach the conclusion.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "coe_prod", ["int"]], ["add", "theorem", "prod_to_finset", ["list"]], ["add", "theorem", "coe_prod", ["nat"]], ["add", "theorem", "coe_prod", ["units"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "eq_of_prod_extend_right_ne", ["equiv", "perm"]], ["add", "theorem", "fst_prod_extend_right", ["equiv", "perm"]], ["add", "def", "prod_extend_right", ["equiv", "perm"]], ["add", "theorem", "prod_extend_right_apply_eq", ["equiv", "perm"]], ["add", "theorem", "prod_extend_right_apply_ne", ["equiv", "perm"]], ["add", "def", "prod_congr_left", ["equiv"]], ["add", "theorem", "prod_congr_left_apply", ["equiv"]], ["add", "theorem", "prod_congr_left_trans_prod_comm", ["equiv"]], ["add", "theorem", "prod_congr_refl_left", ["equiv"]], ["add", "theorem", "prod_congr_refl_right", ["equiv"]], ["add", "def", "prod_congr_right", ["equiv"]], ["add", "theorem", "prod_congr_right_apply", ["equiv"]], ["add", "theorem", "prod_congr_right_trans_prod_comm", ["equiv"]], ["add", "theorem", "sigma_congr_right_sigma_equiv_prod", ["equiv"]], ["add", "theorem", "sigma_equiv_prod_sigma_congr_right", ["equiv"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_pi_univ", ["finset"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["mod", "theorem", "card_support_swap", ["equiv", "perm"]], ["mod", "theorem", "eq_swap_of_is_cycle_of_apply_apply_eq_self", ["equiv", "perm"]], ["mod", "theorem", "is_cycle_swap", ["equiv", "perm"]], ["mod", "theorem", "is_cycle_swap_mul", ["equiv", "perm"]], ["mod", "theorem", "is_cycle_swap_mul_aux₁", ["equiv", "perm"]], ["mod", "theorem", "is_cycle_swap_mul_aux₂", ["equiv", "perm"]], ["add", "theorem", "prod_prod_extend_right", ["equiv", "perm"]], ["mod", "theorem", "sign_cycle", ["equiv", "perm"]], ["add", "theorem", "sign_prod_congr_left", ["equiv", "perm"]], ["add", "theorem", "sign_prod_congr_right", ["equiv", "perm"]], ["add", "theorem", "sign_prod_extend_right", ["equiv", "perm"]], ["mod", "theorem", "support_swap", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_block_diagonal", ["matrix"]]]}]}, {"timestamp": 1601562479, "sha": "13e9cc4a", "message": "feat(linear_algebra/exterior_algebra): Add an exterior algebra (#4297)\nThis adds the basic exterior algebra definitions using a very similar approach to `universal_enveloping_algebra`.\nIt's based off the `exterior_algebra` branch, dropping the `wedge` stuff for now as development in multilinear maps is happening elsewhere.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/exterior_algebra.lean", "changes": [["add", "theorem", "comp_ι_square_zero", ["exterior_algebra"]], ["add", "theorem", "hom_ext", ["exterior_algebra"]], ["add", "def", "lift", ["exterior_algebra"]], ["add", "theorem", "lift_comp_ι", ["exterior_algebra"]], ["add", "theorem", "lift_unique", ["exterior_algebra"]], ["add", "theorem", "lift_ι_apply", ["exterior_algebra"]], ["add", "inductive", "rel", ["exterior_algebra"]], ["add", "def", "ι", ["exterior_algebra"]], ["add", "theorem", "ι_comp_lift", ["exterior_algebra"]], ["add", "theorem", "ι_square_zero", ["exterior_algebra"]], ["add", "def", "exterior_algebra", []]]}]}, {"timestamp": 1601562477, "sha": "268073ae", "message": "feat(geometry/manifold): derivative of the zero section of the tangent bundle (#4292)\nWe show that the zero section of the tangent bundle to a smooth manifold is smooth, and compute its derivative.\nAlong the way, some streamlining of supporting material.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "fderiv_const", []], ["mod", "theorem", "fderiv_id'", []], ["add", "theorem", "fderiv_within_eq_fderiv", []]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "smooth_const_section", ["basic_smooth_bundle_core"]], ["add", "theorem", "mdifferentiable", ["smooth"]], ["add", "theorem", "mdifferentiable_at", ["smooth"]], ["add", "theorem", "mdifferentiable_within_at", ["smooth"]], ["add", "theorem", "smooth_zero_section", ["tangent_bundle"]], ["add", "theorem", "tangent_map_tangent_bundle_pure", ["tangent_bundle"]], ["add", "def", "zero_section", ["tangent_bundle"]]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["add", "theorem", "continuous_const_section", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_apply", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_fst", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv'_inv_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_symm_apply", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_apply", ["topological_fiber_bundle_core"]], ["del", "theorem", "local_triv_fst", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_at_source", ["topological_fiber_bundle_core"]]]}]}, {"timestamp": 1601562475, "sha": "11cdc8cf", "message": "feat(data/polynomial/*) : as_sum_support (#4286)", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["del", "theorem", "as_sum", ["polynomial"]], ["add", "theorem", "as_sum_range", ["polynomial"]], ["add", "theorem", "as_sum_support", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_finset_sum", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}]}, {"timestamp": 1601555317, "sha": "0ccc1573", "message": "feat(data/nat/fact, analysis/specific_limits): rename nat.fact, add few lemmas about its behaviour along at_top (#4309)\nMain content : \n- Rename `nat.fact` to `nat.factorial`, and add notation `n!` in locale `factorial`. This fixes #2786\n- Generalize `prod_inv_distrib` to `comm_group_with_zero` *without any nonzero assumptions*\n- `factorial_tendsto_at_top` : n! --> infinity as n--> infinity\n- `tendsto_factorial_div_pow_self_at_top` : n!/(n^n) --> 0 as n --> infinity", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "pow_eq_prod_const", ["finset"]], ["add", "theorem", "prod_inv_distrib'", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/intervals.lean", "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["del", "theorem", "prod_Ico_id_eq_fact", ["finset"]], ["add", "theorem", "prod_Ico_id_eq_factorial", ["finset"]], ["add", "theorem", "prod_range_add_one_eq_factorial", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "prod_le_one", ["finset"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "factorial_tendsto_at_top", []], ["add", "theorem", "tendsto_factorial_div_pow_self_at_top", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["del", "theorem", "sum_div_fact_le", ["complex"]], ["add", "theorem", "sum_div_factorial_le", ["complex"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "card_perm", ["fintype"]], ["mod", "theorem", "length_perms_of_list", []]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["mod", "theorem", "length_permutations", ["list"]]]}, {"oldPath": "src/data/nat/choose/basic.lean", "newPath": "src/data/nat/choose/basic.lean", "changes": [["del", "theorem", "choose_eq_fact_div_fact", ["nat"]], ["add", "theorem", "choose_eq_factorial_div_factorial", ["nat"]], ["del", "theorem", "choose_mul_fact_mul_fact", ["nat"]], ["add", "theorem", "choose_mul_factorial_mul_factorial", ["nat"]], ["del", "theorem", "fact_mul_fact_dvd_fact", ["nat"]], ["add", "theorem", "factorial_mul_factorial_dvd_factorial", ["nat"]]]}, {"oldPath": "src/data/nat/choose/dvd.lean", "newPath": "src/data/nat/choose/dvd.lean", "changes": []}, {"oldPath": "src/data/nat/fact.lean", "newPath": null, "changes": [["del", "theorem", "dvd_fact", ["nat"]], ["del", "def", "fact", ["nat"]], ["del", "theorem", "fact_dvd_fact", ["nat"]], ["del", "theorem", "fact_eq_one", ["nat"]], ["del", "theorem", "fact_inj", ["nat"]], ["del", "theorem", "fact_le", ["nat"]], ["del", "theorem", "fact_lt", ["nat"]], ["del", "theorem", "fact_mul_pow_le_fact", ["nat"]], ["del", "theorem", "fact_ne_zero", ["nat"]], ["del", "theorem", "fact_one", ["nat"]], ["del", "theorem", "fact_pos", ["nat"]], ["del", "theorem", "fact_succ", ["nat"]], ["del", "theorem", "fact_zero", ["nat"]], ["del", "theorem", "monotone_fact", ["nat"]], ["del", "theorem", "one_lt_fact", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/factorial.lean", "changes": [["add", "theorem", "dvd_factorial", ["nat"]], ["add", "def", "factorial", ["nat"]], ["add", "theorem", "factorial_dvd_factorial", ["nat"]], ["add", "theorem", "factorial_eq_one", ["nat"]], ["add", "theorem", "factorial_inj", ["nat"]], ["add", "theorem", "factorial_le", ["nat"]], ["add", "theorem", "factorial_lt", ["nat"]], ["add", "theorem", "factorial_mul_pow_le_factorial", ["nat"]], ["add", "theorem", "factorial_ne_zero", ["nat"]], ["add", "theorem", "factorial_one", ["nat"]], ["add", "theorem", "factorial_pos", ["nat"]], ["add", "theorem", "factorial_succ", ["nat"]], ["add", "theorem", "factorial_zero", ["nat"]], ["add", "theorem", "monotone_factorial", ["nat"]], ["add", "theorem", "one_lt_factorial", ["nat"]], ["add", "theorem", "self_le_factorial", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": [["del", "theorem", "multiplicity_fact", ["nat", "prime"]], ["add", "theorem", "multiplicity_factorial", ["nat", "prime"]], ["del", "theorem", "pow_dvd_fact_iff", ["nat", "prime"]], ["add", "theorem", "pow_dvd_factorial_iff", ["nat", "prime"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "dvd_fact", ["nat", "prime"]], ["add", "theorem", "dvd_factorial", ["nat", "prime"]]]}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["mod", "theorem", "wilsons_lemma", ["zmod"]]]}]}, {"timestamp": 1601543811, "sha": "9c241b0d", "message": "feat(*): a few more tests for `summable`, docstrings (#4325)\n### Important new theorems:\n* `summable_geometric_iff_norm_lt_1`: a geometric series in a normed field is summable iff the norm of the common ratio is less than 1;\n* `summable.tendsto_cofinite_zero`: divergence test: if `f` is a `summable` function, then `f x` tends to zero along `cofinite`;\n### API change\n* rename `cauchy_seq_of_tendsto_nhds` to `filter.tendsto.cauchy_seq` to enable dot syntax.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "summable_geometric_iff_norm_lt_1", []]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "theorem", "eventually_cofinite_nmem", ["finset"]], ["add", "theorem", "compl_mem_cofinite", ["set", "finite"]], ["add", "theorem", "eventually_cofinite_nmem", ["set", "finite"]], ["mod", "theorem", "infinite_iff_frequently_cofinite", ["set"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tendsto_cofinite_zero", ["summable"]], ["add", "theorem", "vanishing", ["summable"]], ["mod", "theorem", "summable_iff_cauchy_seq_finset", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "exists_le_has_sum_of_le", ["nnreal"]], ["mod", "theorem", "has_sum_iff_tendsto_nat", ["nnreal"]], ["mod", "theorem", "summable_of_le", ["nnreal"]], ["mod", "theorem", "tendsto_sum_nat_add", ["nnreal"]], ["mod", "theorem", "tsum_comp_le_tsum_of_inj", ["nnreal"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["del", "theorem", "cauchy_seq_of_tendsto_nhds", []], ["add", "theorem", "cauchy_map", ["filter", "tendsto"]], ["add", "theorem", "cauchy_seq", ["filter", "tendsto"]]]}]}, {"timestamp": 1601543809, "sha": "fb2b1de0", "message": "feat(algebra/ordered_ring): ask for 0 < 1 earlier. (#4296)\nIt used to be that `linear_ordered_semiring` asked for `0 < 1`, while `ordered_semiring` didn't.\nI'd prefer that `ordered_semiring` asks for this already:\n1. because lots of interesting examples (e.g. rings of operators) satisfy this property\n2. because the rest of mathlib doesn't care", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}]}, {"timestamp": 1601538074, "sha": "9ceb1141", "message": "feat(analysis/normed_space/inner_product): Define the inner product based on `is_R_or_C` (#4057)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "abs_norm_eq_norm", []]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/inner_product.lean", "changes": [["add", "theorem", "abs_inner_le_norm", []], ["add", "theorem", "abs_real_inner_div_norm_mul_norm_eq_one_iff", []], ["add", "theorem", "abs_real_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul", []], ["add", "theorem", "abs_real_inner_div_norm_mul_norm_le_one", []], ["add", "theorem", "abs_real_inner_le_norm", []], ["add", "def", "bilin_form_of_real_inner", []], ["add", "theorem", "eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero", []], ["add", "theorem", "eq_orthogonal_projection_of_mem_of_inner_eq_zero", []], ["add", "def", "euclidean_space", []], ["add", "theorem", "exists_norm_eq_infi_of_complete_convex", []], ["add", "theorem", "exists_norm_eq_infi_of_complete_subspace", []], ["add", "theorem", "findim_euclidean_space", []], ["add", "theorem", "findim_euclidean_space_fin", []], ["add", "def", "is_R_or_C_to_real", ["has_inner"]], ["add", "theorem", "inner_abs_conj_sym", []], ["add", "theorem", "inner_add_add_self", []], ["add", "theorem", "inner_add_left", []], ["add", "theorem", "inner_add_right", []], ["add", "theorem", "inner_conj_sym", []], ["add", "theorem", "inner_eq_zero_sym", []], ["add", "theorem", "inner_im_symm", []], ["add", "theorem", "inner_mul_conj_re_abs", []], ["add", "theorem", "inner_mul_inner_self_le", []], ["add", "theorem", "inner_neg_left", []], ["add", "theorem", "inner_neg_neg", []], ["add", "theorem", "inner_neg_right", []], ["add", "structure", "core", ["inner_product_space"]], ["add", "def", "is_R_or_C_to_real", ["inner_product_space"]], ["add", "theorem", "abs_inner_le_norm", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_abs_conj_sym", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_add_add_self", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_add_left", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_add_right", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_conj_sym", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_im_symm", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_mul_conj_re_abs", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_mul_inner_self_le", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_neg_left", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_neg_right", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_norm_sq_eq_inner_self", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_re_symm", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_eq_norm_square", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_eq_zero", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_im_zero", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_nonneg", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_nonneg_im", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_re_to_K", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_smul_left", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_smul_right", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_sub_left", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_sub_right", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_sub_sub_self", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_zero_left", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_zero_right", ["inner_product_space", "of_core"]], ["add", "theorem", "norm_eq_sqrt_inner", ["inner_product_space", "of_core"]], ["add", "def", "norm_sq", ["inner_product_space", "of_core"]], ["add", "theorem", "sqrt_norm_sq_eq_norm", ["inner_product_space", "of_core"]], ["add", "def", "to_has_inner", ["inner_product_space", "of_core"]], ["add", "def", "to_has_norm", ["inner_product_space", "of_core"]], ["add", "def", "to_normed_group", ["inner_product_space", "of_core"]], ["add", "def", "to_normed_space", ["inner_product_space", "of_core"]], ["add", "def", "of_core", ["inner_product_space"]], ["add", "theorem", "inner_re_symm", []], ["add", "theorem", "inner_re_zero_left", []], ["add", "theorem", "inner_re_zero_right", []], ["add", "theorem", "inner_self_abs_to_K", []], ["add", "theorem", "inner_self_conj", []], ["add", "theorem", "inner_self_eq_norm_square", []], ["add", "theorem", "inner_self_eq_zero", []], ["add", "theorem", "inner_self_im_zero", []], ["add", "theorem", "inner_self_nonneg", []], ["add", "theorem", "inner_self_nonneg_im", []], ["add", "theorem", "inner_self_nonpos", []], ["add", "theorem", "inner_self_re_abs", []], ["add", "theorem", "inner_self_re_to_K", []], ["add", "theorem", "inner_smul_left", []], ["add", "theorem", "inner_smul_right", []], ["add", "theorem", "inner_sub_left", []], ["add", "theorem", "inner_sub_right", []], ["add", "theorem", "inner_sub_sub_self", []], ["add", "theorem", "inner_sum", []], ["add", "theorem", "inner_sum_smul_sum_smul_of_sum_eq_zero", []], ["add", "theorem", "inner_zero_left", []], ["add", "theorem", "inner_zero_right", []], ["add", "theorem", "linear_independent_of_ne_zero_of_inner_eq_zero", []], ["add", "theorem", "norm_add_mul_self", []], ["add", "theorem", "norm_add_mul_self_real", []], ["add", "theorem", "norm_add_pow_two", []], ["add", "theorem", "norm_add_pow_two_real", []], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square_iff_real_inner_eq_zero", []], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square_real", []], ["add", "theorem", "norm_eq_infi_iff_inner_eq_zero", []], ["add", "theorem", "norm_eq_infi_iff_real_inner_eq_zero", []], ["add", "theorem", "norm_eq_infi_iff_real_inner_le_zero", []], ["add", "theorem", "norm_eq_sqrt_inner", []], ["add", "theorem", "norm_eq_sqrt_real_inner", []], ["add", "theorem", "norm_sub_mul_self", []], ["add", "theorem", "norm_sub_mul_self_real", []], ["add", "theorem", "norm_sub_pow_two", []], ["add", "theorem", "norm_sub_pow_two_real", []], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_iff_real_inner_eq_zero", []], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_real", []], ["add", "def", "orthogonal_projection", []], ["add", "theorem", "orthogonal_projection_def", []], ["add", "def", "orthogonal_projection_fn", []], ["add", "theorem", "orthogonal_projection_fn_eq", []], ["add", "theorem", "orthogonal_projection_fn_inner_eq_zero", []], ["add", "theorem", "orthogonal_projection_fn_mem", []], ["add", "theorem", "orthogonal_projection_inner_eq_zero", []], ["add", "theorem", "orthogonal_projection_mem", []], ["add", "def", "orthogonal_projection_of_complete", []], ["add", "theorem", "parallelogram_law", []], ["add", "theorem", "parallelogram_law_with_norm", []], ["add", "theorem", "parallelogram_law_with_norm_real", []], ["add", "theorem", "real_inner_add_add_self", []], ["add", "theorem", "real_inner_add_sub_eq_zero_iff", []], ["add", "theorem", "real_inner_comm", []], ["add", "theorem", "real_inner_div_norm_mul_norm_eq_neg_one_iff", []], ["add", "theorem", "real_inner_div_norm_mul_norm_eq_neg_one_of_ne_zero_of_neg_mul", []], ["add", "theorem", "real_inner_div_norm_mul_norm_eq_one_iff", []], ["add", "theorem", "real_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_pos_mul", []], ["add", "theorem", "real_inner_eq_norm_add_mul_self_sub_norm_mul_self_sub_norm_mul_self_div_two", []], ["add", "theorem", "real_inner_eq_norm_mul_self_add_norm_mul_self_sub_norm_sub_mul_self_div_two", []], ["add", "theorem", "real_inner_eq_re_inner", []], ["add", "theorem", "real_inner_mul_inner_self_le", []], ["add", "theorem", "real_inner_self_abs", []], ["add", "theorem", "real_inner_self_eq_norm_square", []], ["add", "theorem", "real_inner_self_nonneg", []], ["add", "theorem", "real_inner_self_nonpos", []], ["add", "theorem", "real_inner_smul_left", []], ["add", "theorem", "real_inner_smul_right", []], ["add", "theorem", "real_inner_smul_self_left", []], ["add", "theorem", "real_inner_smul_self_right", []], ["add", "theorem", "real_inner_sub_sub_self", []], ["add", "def", "sesq_form_of_inner", []], ["add", "theorem", "Inf_orthogonal", ["submodule"]], ["add", "theorem", "findim_add_inf_findim_orthogonal", ["submodule"]], ["add", "theorem", "inf_orthogonal", ["submodule"]], ["add", "theorem", "infi_orthogonal", ["submodule"]], ["add", "theorem", "inner_left_of_mem_orthogonal", ["submodule"]], ["add", "theorem", "inner_right_of_mem_orthogonal", ["submodule"]], ["add", "theorem", "is_compl_orthogonal_of_is_complete_real", ["submodule"]], ["add", "theorem", "le_orthogonal_orthogonal", ["submodule"]], ["add", "theorem", "mem_orthogonal'", ["submodule"]], ["add", "theorem", "mem_orthogonal", ["submodule"]], ["add", "def", "orthogonal", ["submodule"]], ["add", "theorem", "orthogonal_disjoint", ["submodule"]], ["add", "theorem", "orthogonal_gc", ["submodule"]], ["add", "theorem", "orthogonal_le", ["submodule"]], ["add", "theorem", "sup_orthogonal_inf_of_is_complete", ["submodule"]], ["add", "theorem", "sup_orthogonal_of_is_complete", ["submodule"]], ["add", "theorem", "sum_inner", []]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": null, "changes": [["del", "theorem", "abs_inner_div_norm_mul_norm_eq_one_iff", []], ["del", "theorem", "abs_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul", []], ["del", "theorem", "abs_inner_div_norm_mul_norm_le_one", []], ["del", "theorem", "abs_inner_le_norm", []], ["del", "def", "bilin_form_of_inner", []], ["del", "theorem", "eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero", []], ["del", "theorem", "eq_orthogonal_projection_of_mem_of_inner_eq_zero", []], ["del", "def", "euclidean_space", []], ["del", "theorem", "exists_norm_eq_infi_of_complete_convex", []], ["del", "theorem", "exists_norm_eq_infi_of_complete_subspace", []], ["del", "theorem", "findim_euclidean_space", []], ["del", "theorem", "findim_euclidean_space_fin", []], ["del", "theorem", "inner_add_add_self", []], ["del", "theorem", "inner_add_left", []], ["del", "theorem", "inner_add_right", []], ["del", "theorem", "inner_add_sub_eq_zero_iff", []], ["del", "theorem", "inner_comm", []], ["del", "theorem", "inner_div_norm_mul_norm_eq_neg_one_iff", []], ["del", "theorem", "inner_div_norm_mul_norm_eq_neg_one_of_ne_zero_of_neg_mul", []], ["del", "theorem", "inner_div_norm_mul_norm_eq_one_iff", []], ["del", "theorem", "inner_div_norm_mul_norm_eq_one_of_ne_zero_of_pos_mul", []], ["del", "theorem", "inner_eq_norm_add_mul_self_sub_norm_mul_self_sub_norm_mul_self_div_two", []], ["del", "theorem", "inner_eq_norm_add_mul_self_sub_norm_sub_mul_self_div_four", []], ["del", "theorem", "inner_eq_norm_mul_self_add_norm_mul_self_sub_norm_sub_mul_self_div_two", []], ["del", "theorem", "inner_mul_inner_self_le", []], ["del", "theorem", "inner_neg_left", []], ["del", "theorem", "inner_neg_neg", []], ["del", "theorem", "inner_neg_right", []], ["del", "structure", "core", ["inner_product_space"]], ["del", "theorem", "abs_inner_le_norm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_add_add_self", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_add_left", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_add_right", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_comm", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_mul_inner_self_le", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_self_eq_norm_square", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_smul_left", ["inner_product_space", "of_core"]], ["del", "theorem", "inner_smul_right", ["inner_product_space", "of_core"]], ["del", "theorem", "norm_eq_sqrt_inner", ["inner_product_space", "of_core"]], ["del", "def", "to_has_inner", ["inner_product_space", "of_core"]], ["del", "def", "to_has_norm", ["inner_product_space", "of_core"]], ["del", "def", "to_normed_group", ["inner_product_space", "of_core"]], ["del", "def", "to_normed_space", ["inner_product_space", "of_core"]], ["del", "def", "of_core", ["inner_product_space"]], ["del", "theorem", "inner_self_eq_norm_square", []], ["del", "theorem", "inner_self_eq_zero", []], ["del", "theorem", "inner_self_nonneg", []], ["del", "theorem", "inner_self_nonpos", []], ["del", "theorem", "inner_smul_left", []], ["del", "theorem", "inner_smul_right", []], ["del", "theorem", "inner_smul_self_left", []], ["del", "theorem", "inner_smul_self_right", []], ["del", "theorem", "inner_sub_left", []], ["del", "theorem", "inner_sub_right", []], ["del", "theorem", "inner_sub_sub_self", []], ["del", "theorem", "inner_sum", []], ["del", "theorem", "inner_sum_smul_sum_smul_of_sum_eq_zero", []], ["del", "theorem", "inner_zero_left", []], ["del", "theorem", "inner_zero_right", []], ["del", "theorem", "linear_independent_of_ne_zero_of_inner_eq_zero", []], ["del", "theorem", "norm_add_mul_self", []], ["del", "theorem", "norm_add_pow_two", []], ["del", "theorem", "norm_add_square_eq_norm_square_add_norm_square", []], ["del", "theorem", "norm_add_square_eq_norm_square_add_norm_square_iff_inner_eq_zero", []], ["del", "theorem", "norm_eq_infi_iff_inner_eq_zero", []], ["del", "theorem", "norm_eq_infi_iff_inner_le_zero", []], ["del", "theorem", "norm_sub_mul_self", []], ["del", "theorem", "norm_sub_pow_two", []], ["del", "theorem", "norm_sub_square_eq_norm_square_add_norm_square", []], ["del", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_iff_inner_eq_zero", []], ["del", "def", "orthogonal_projection", []], ["del", "theorem", "orthogonal_projection_def", []], ["del", "def", "orthogonal_projection_fn", []], ["del", "theorem", "orthogonal_projection_fn_eq", []], ["del", "theorem", "orthogonal_projection_fn_inner_eq_zero", []], ["del", "theorem", "orthogonal_projection_fn_mem", []], ["del", "theorem", "orthogonal_projection_inner_eq_zero", []], ["del", "theorem", "orthogonal_projection_mem", []], ["del", "def", "orthogonal_projection_of_complete", []], ["del", "theorem", "parallelogram_law", []], ["del", "theorem", "parallelogram_law_with_norm", []], ["del", "theorem", "Inf_orthogonal", ["submodule"]], ["del", "theorem", "findim_add_inf_findim_orthogonal", ["submodule"]], ["del", "theorem", "inf_orthogonal", ["submodule"]], ["del", "theorem", "infi_orthogonal", ["submodule"]], ["del", "theorem", "inner_left_of_mem_orthogonal", ["submodule"]], ["del", "theorem", "inner_right_of_mem_orthogonal", ["submodule"]], ["del", "theorem", "is_compl_orthogonal_of_is_complete", ["submodule"]], ["del", "theorem", "le_orthogonal_orthogonal", ["submodule"]], ["del", "theorem", "mem_orthogonal'", ["submodule"]], ["del", "theorem", "mem_orthogonal", ["submodule"]], ["del", "def", "orthogonal", ["submodule"]], ["del", "theorem", "orthogonal_disjoint", ["submodule"]], ["del", "theorem", "orthogonal_gc", ["submodule"]], ["del", "theorem", "orthogonal_le", ["submodule"]], ["del", "theorem", "sup_orthogonal_inf_of_is_complete", ["submodule"]], ["del", "theorem", "sup_orthogonal_of_is_complete", ["submodule"]], ["del", "theorem", "sum_inner", []]]}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "I_im'", ["is_R_or_C"]], ["add", "theorem", "abs_sqr_re_add_conj'", ["is_R_or_C"]], ["add", "theorem", "abs_sqr_re_add_conj", ["is_R_or_C"]], ["add", "theorem", "conj_div", ["is_R_or_C"]], ["add", "theorem", "conj_inv", ["is_R_or_C"]], ["add", "theorem", "conj_mul_eq_norm_sq_left", ["is_R_or_C"]], ["add", "def", "conj_to_ring_equiv", ["is_R_or_C"]], ["add", "theorem", "div_re_of_real", ["is_R_or_C"]], ["mod", "theorem", "inv_def", ["is_R_or_C"]], ["add", "theorem", "norm_conj", ["is_R_or_C"]], ["mod", "theorem", "of_real_add", ["is_R_or_C"]], ["mod", "theorem", "of_real_mul", ["is_R_or_C"]], ["add", "theorem", "of_real_mul_re", ["is_R_or_C"]], ["mod", "theorem", "of_real_neg", ["is_R_or_C"]], ["add", "theorem", "re_eq_abs_of_mul_conj", ["is_R_or_C"]], ["add", "theorem", "sqrt_norm_sq_eq_norm", ["is_R_or_C"]], ["add", "theorem", "zero_re'", ["is_R_or_C"]], ["mod", "theorem", "zero_re", ["is_R_or_C"]]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["mod", "theorem", "inner_eq_zero_iff_angle_eq_pi_div_two", ["inner_product_geometry"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/triangle.lean", "newPath": "src/geometry/euclidean/triangle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/instances/real.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": [["mod", "def", "euclidean_quadrant", []]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "theorem", "is_add_monoid_hom_left", ["sesq_form"]], ["add", "theorem", "is_add_monoid_hom_right", ["sesq_form"]], ["add", "theorem", "map_sum_left", ["sesq_form"]], ["add", "theorem", "map_sum_right", ["sesq_form"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["del", "def", "restrict_scalars", ["subspace"]]]}]}, {"timestamp": 1601521025, "sha": "1b973263", "message": "feat(data/fintype): pigeonhole principles (#4096)\nAdd pigeonhole principles for finitely and infinitely many pigeons in finitely many holes. There are also strong versions of these, which say that there is a hole containing at least as many pigeons as the average number of pigeons per hole. Fixes #2272.", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "card_eq_sum_card_fiberwise", ["finset"]], ["add", "theorem", "prod_fiberwise_of_maps_to", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "card_le_mul_card_image_of_maps_to", ["finset"]], ["add", "theorem", "exists_lt_of_sum_lt", ["finset"]], ["add", "theorem", "sum_fiberwise_le_sum_of_sum_fiber_nonneg", ["finset"]], ["add", "theorem", "sum_le_sum_fiberwise_of_sum_fiber_nonpos", ["finset"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/pigeonhole.lean", "changes": [["add", "theorem", "exists_card_fiber_le_of_card_le_mul", ["finset"]], ["add", "theorem", "exists_card_fiber_lt_of_card_lt_mul", ["finset"]], ["add", "theorem", "exists_le_card_fiber_of_mul_le_card_of_maps_to", ["finset"]], ["add", "theorem", "exists_le_sum_fiber_of_maps_to_of_nsmul_le_sum", ["finset"]], ["add", "theorem", "exists_le_sum_fiber_of_sum_fiber_nonpos_of_nsmul_le_sum", ["finset"]], ["add", "theorem", "exists_lt_card_fiber_of_mul_lt_card_of_maps_to", ["finset"]], ["add", "theorem", "exists_lt_sum_fiber_of_maps_to_of_nsmul_lt_sum", ["finset"]], ["add", "theorem", "exists_lt_sum_fiber_of_sum_fiber_nonpos_of_nsmul_lt_sum", ["finset"]], ["add", "theorem", "exists_sum_fiber_le_of_maps_to_of_sum_le_nsmul", ["finset"]], ["add", "theorem", "exists_sum_fiber_le_of_sum_fiber_nonneg_of_sum_le_nsmul", ["finset"]], ["add", "theorem", "exists_sum_fiber_lt_of_maps_to_of_sum_lt_nsmul", ["finset"]], ["add", "theorem", "exists_sum_fiber_lt_of_sum_fiber_nonneg_of_sum_lt_nsmul", ["finset"]], ["add", "theorem", "exists_card_fiber_le_of_card_le_mul", ["fintype"]], ["add", "theorem", "exists_card_fiber_lt_of_card_lt_mul", ["fintype"]], ["add", "theorem", "exists_le_card_fiber_of_mul_le_card", ["fintype"]], ["add", "theorem", "exists_le_sum_fiber_of_nsmul_le_sum", ["fintype"]], ["add", "theorem", "exists_lt_card_fiber_of_mul_lt_card", ["fintype"]], ["add", "theorem", "exists_lt_sum_fiber_of_nsmul_lt_sum", ["fintype"]], ["add", "theorem", "exists_sum_fiber_le_of_sum_le_nsmul", ["fintype"]], ["add", "theorem", "exists_sum_fiber_lt_of_sum_lt_nsmul", ["fintype"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "bind_filter_eq_of_maps_to", ["finset"]], ["add", "theorem", "exists_ne_map_eq_of_card_lt_of_maps_to", ["finset"]], ["add", "theorem", "fiber_card_ne_zero_iff_mem_image", ["finset"]], ["add", "theorem", "fiber_nonempty_iff_mem_image", ["finset"]], ["add", "theorem", "filter_mem_image_eq_image", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_nonempty", ["finset"]], ["add", "theorem", "exists_infinite_fiber", ["fintype"]], ["add", "theorem", "exists_ne_map_eq_of_card_lt", ["fintype"]], ["add", "theorem", "exists_ne_map_eq_of_infinite", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}]}, {"timestamp": 1601514456, "sha": "af994169", "message": "chore(scripts): update nolints.txt (#4341)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601497772, "sha": "bcc7c024", "message": "feat(geometry/manifold): smooth bundled maps (#3641)", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "mul", ["times_cont_diff"]], ["add", "theorem", "smul", ["times_cont_diff"]], ["mod", "theorem", "times_cont_diff_add", []], ["add", "theorem", "mul", ["times_cont_diff_at"]], ["add", "theorem", "smul", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_mul", []], ["mod", "theorem", "times_cont_diff_neg", []], ["add", "theorem", "mul", ["times_cont_diff_on"]], ["add", "theorem", "smul", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_diff_smul", []], ["add", "theorem", "mul", ["times_cont_diff_within_at"]], ["add", "theorem", "smul", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/geometry/algebra/lie_group.lean", "newPath": "src/geometry/manifold/algebra/lie_group.lean", "changes": [["del", "theorem", "mul", ["smooth"]], ["del", "theorem", "smooth_left_mul", []], ["del", "theorem", "smooth_mul", []], ["del", "theorem", "mul", ["smooth_on"]], ["del", "theorem", "smooth_right_mul", []]]}, {"oldPath": null, "newPath": "src/geometry/manifold/algebra/monoid.lean", "changes": [["add", "structure", "has_smooth_add_core", []], ["add", "structure", "has_smooth_mul_core", []], ["add", "theorem", "mul", ["smooth"]], ["add", "structure", "smooth_add_monoid_morphism", []], ["add", "structure", "smooth_monoid_morphism", []], ["add", "theorem", "smooth_mul", []], ["add", "theorem", "smooth_mul_left", []], ["add", "theorem", "smooth_mul_right", []], ["add", "theorem", "mul", ["smooth_on"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/algebra/smooth_functions.lean", "changes": [["add", "def", "C", ["smooth_map"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/algebra/structures.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/instances/real.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["del", "theorem", "compatible", ["smooth_manifold_with_corners"]], ["add", "theorem", "smooth_manifold_with_corners_of_times_cont_diff_on", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "smul", ["smooth"]], ["add", "theorem", "smooth_smul", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": [["mod", "theorem", "coe_inj", ["times_cont_mdiff_map"]], ["mod", "def", "comp", ["times_cont_mdiff_map"]], ["mod", "theorem", "comp_apply", ["times_cont_mdiff_map"]], ["mod", "def", "const", ["times_cont_mdiff_map"]], ["mod", "def", "id", ["times_cont_mdiff_map"]]]}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/continuous_map.lean", "newPath": "src/topology/continuous_map.lean", "changes": [["mod", "def", "comp", ["continuous_map"]], ["mod", "def", "const", ["continuous_map"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1601494988, "sha": "c04e3398", "message": "feat(archive/imo): formalize IMO 1959 problem 1 (#4340)\nThis is a formalization of the problem and solution for the first problem on the 1959 IMO:\nProve that the fraction (21n+4)/(14n+3) is irreducible for every natural number n.", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1959_q1.lean", "changes": [["add", "theorem", "calculation", []], ["add", "theorem", "imo1959_q1", []]]}]}, {"timestamp": 1601489685, "sha": "23b04b0f", "message": "chore(ring_theory/algebra): Mark algebra.mem_top as simp (#4339)\nThis is consistent with `subsemiring.mem_top` and `submonoid.mem_top`, both of which are marked simp.", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "mem_top", ["algebra"]]]}]}, {"timestamp": 1601489683, "sha": "decd67c4", "message": "feat(analysis/convex): slope_mono_adjacent (#4307)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "slope_mono_adjacent", ["concave_on"]], ["add", "theorem", "concave_on_real_iff_slope_mono_adjacent", []], ["add", "theorem", "slope_mono_adjacent", ["convex_on"]], ["add", "theorem", "convex_on_real_iff_slope_mono_adjacent", []]]}]}, {"timestamp": 1601484445, "sha": "a06c87ed", "message": "chore(*): Tidy some proofs and variables (#4338)", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["mod", "theorem", "hom_ext", ["free_algebra"]], ["mod", "def", "lift", ["free_algebra"]], ["mod", "theorem", "lift_comp_ι", ["free_algebra"]], ["mod", "theorem", "lift_unique", ["free_algebra"]], ["mod", "theorem", "lift_ι_apply", ["free_algebra"]], ["mod", "theorem", "ι_comp_lift", ["free_algebra"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1601484443, "sha": "9921fe71", "message": "fix(ring_theory/algebra): Fix typo \"algbera\" (#4337)\nIntroduced in e57fc3d6c142835dc8566aa28e812f7688f14512", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["del", "theorem", "bijective_algbera_map_iff", ["algebra"]], ["add", "theorem", "bijective_algebra_map_iff", ["algebra"]], ["del", "theorem", "surjective_algbera_map_iff", ["algebra"]], ["add", "theorem", "surjective_algebra_map_iff", ["algebra"]]]}]}, {"timestamp": 1601476945, "sha": "05038da0", "message": "feat(ring_theory/algebra): some lemmas about numerals in algebras (#4327)", "changes": [{"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "bit0_smul_bit0", ["algebra"]], ["add", "theorem", "bit0_smul_bit1", ["algebra"]], ["add", "theorem", "bit0_smul_one", ["algebra"]], ["add", "theorem", "bit1_smul_bit0", ["algebra"]], ["add", "theorem", "bit1_smul_bit1", ["algebra"]], ["add", "theorem", "bit1_smul_one", ["algebra"]]]}]}, {"timestamp": 1601459513, "sha": "5fd2037e", "message": "chore(*): rename is_unit_pow to is_unit.pow (#4329)\nenable dot notation by renaming\nis_unit_pow to is_unit.pow", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "pow", ["is_unit"]], ["del", "theorem", "is_unit_pow", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}]}, {"timestamp": 1601459511, "sha": "ac797ad5", "message": "feat(topology/bounded_continuous_function): normed_comm_ring structure on bounded continuous functions (#4326)\nAn instance of the new (#4291) class `normed_comm_ring`.", "changes": [{"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}]}, {"timestamp": 1601459509, "sha": "e53aa870", "message": "feat(order/basic): lemmas about `strict_mono_incr_on` (#4313)\nAlso move the section about `order_dual` up to use it in the proofs.\nNon-BC API changes:\n* Now `strict_mono_incr_on` and `strict_mono_decr_on` take `x` and `y` as `⦃⦄` args.", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inj_on", ["strict_mono_decr_on"]], ["add", "theorem", "inj_on", ["strict_mono_incr_on"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "dual_compares", ["order_dual"]], ["del", "theorem", "compares", ["strict_mono"]], ["mod", "theorem", "injective", ["strict_mono"]], ["mod", "theorem", "le_iff_le", ["strict_mono"]], ["mod", "theorem", "lt_iff_lt", ["strict_mono"]], ["add", "theorem", "le_iff_le", ["strict_mono_decr_on"]], ["add", "theorem", "lt_iff_lt", ["strict_mono_decr_on"]], ["add", "theorem", "le_iff_le", ["strict_mono_incr_on"]], ["add", "theorem", "lt_iff_lt", ["strict_mono_incr_on"]], ["add", "theorem", "coe_le_coe", ["subtype"]], ["add", "theorem", "coe_lt_coe", ["subtype"]], ["add", "theorem", "mk_le_mk", ["subtype"]], ["add", "theorem", "mk_lt_mk", ["subtype"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["add", "theorem", "coe_to_order_embedding", ["order_iso"]], ["add", "def", "to_order_embedding", ["order_iso"]]]}]}, {"timestamp": 1601459506, "sha": "e1c0b0a9", "message": "feat(ring_theory/jacobson): Integral extension of Jacobson rings are Jacobson (#4304)\nMain statement given by `is_jacobson_of_is_integral `", "changes": [{"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["add", "theorem", "eq_bot_of_comap_eq_bot", ["ideal"]], ["add", "theorem", "exists_ideal_over_maximal_of_is_integral", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["add", "theorem", "is_jacobson_of_is_integral", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["add", "theorem", "comap_jacobson", ["ideal"]]]}]}, {"timestamp": 1601459504, "sha": "ff66d924", "message": "chore(category_theory/limits): facts about opposites of limit cones (#4250)\nSimple facts about limit cones and opposite categories.", "changes": [{"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "map_cocone_op", ["category_theory", "functor"]], ["add", "def", "map_cone_op", ["category_theory", "functor"]], ["add", "def", "op", ["category_theory", "limits", "cocone"]], ["add", "def", "unop", ["category_theory", "limits", "cocone"]], ["add", "def", "cocone_equivalence_op_cone_op", ["category_theory", "limits"]], ["add", "def", "op", ["category_theory", "limits", "cone"]], ["add", "def", "unop", ["category_theory", "limits", "cone"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "op", ["category_theory", "limits", "is_colimit"]], ["add", "def", "unop", ["category_theory", "limits", "is_colimit"]], ["add", "def", "is_colimit_equiv_is_limit_op", ["category_theory", "limits"]], ["add", "def", "op", ["category_theory", "limits", "is_limit"]], ["add", "def", "unop", ["category_theory", "limits", "is_limit"]], ["add", "def", "is_limit_equiv_is_colimit_op", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": [["add", "def", "counit_iso", ["category_theory", "Monad", "Monad_Mon_equiv"]], ["add", "def", "unit_iso", ["category_theory", "Monad", "Monad_Mon_equiv"]], ["add", "def", "unit_iso_hom", ["category_theory", "Monad", "Monad_Mon_equiv"]], ["add", "def", "unit_iso_inv", ["category_theory", "Monad", "Monad_Mon_equiv"]], ["del", "def", "of_to_mon_end_iso", ["category_theory", "Monad"]], ["del", "def", "to_of_mon_end_iso", ["category_theory", "Monad"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "def", "op", ["category_theory", "equivalence"]], ["add", "def", "unop", ["category_theory", "equivalence"]], ["add", "def", "op_hom", ["category_theory", "functor"]], ["add", "def", "op_inv", ["category_theory", "functor"]], ["add", "theorem", "remove_op_hom", ["category_theory", "nat_iso"]], ["add", "theorem", "remove_op_inv", ["category_theory", "nat_iso"]], ["mod", "theorem", "unop_hom", ["category_theory", "nat_iso"]], ["mod", "theorem", "unop_inv", ["category_theory", "nat_iso"]], ["add", "theorem", "remove_left_op_app", ["category_theory", "nat_trans"]], ["add", "theorem", "remove_op_id", ["category_theory", "nat_trans"]], ["del", "theorem", "right_op_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "unop_id", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}]}, {"timestamp": 1601452608, "sha": "da66bb81", "message": "feat(*): preparations for roots of unity (#4322)", "changes": [{"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["add", "theorem", "is_unit_of_pow_eq_one", []]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "pow_gcd_eq_one", []]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["mod", "theorem", "card_nth_roots", ["polynomial"]], ["mod", "theorem", "mem_nth_roots", ["polynomial"]], ["mod", "def", "nth_roots", ["polynomial"]], ["add", "theorem", "nth_roots_zero", ["polynomial"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1601389019, "sha": "743f82ca", "message": "feat(algebra/pointwise): Add missing to_additive on finset lemmas (#4306)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "add_card_le", ["finset"]]]}]}, {"timestamp": 1601381508, "sha": "669a3499", "message": "feat(data/prod): mk injective lemmas (#4319)\nMore scattered lemmmas from the Witt vector branch.\nCo-authored by: Johan Commelin ", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "inj_left", ["prod", "mk"]], ["add", "theorem", "inj_right", ["prod", "mk"]]]}]}, {"timestamp": 1601381505, "sha": "d301d431", "message": "feat(algebra/invertible): invertible.copy (#4318)\nA useful gadget from the Witt vector project.\nCo-authored by: Johan Commelin ", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "def", "copy", ["invertible"]]]}]}, {"timestamp": 1601381503, "sha": "fa09f493", "message": "feat(analysis/special_functions/*): prove that `exp` etc are measurable (#4314)\nThe modifications in `measure_theory/borel_space` are a part of the\nproof of measurability of `x^y`, `x : ennreal`, `y : ℝ`, but this\nproof depends on a refactoring of `arcsin` I'm going to PR soon.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "measurable_exp", ["complex"]], ["add", "theorem", "cexp", ["measurable"]], ["add", "theorem", "exp", ["measurable"]], ["add", "theorem", "log", ["measurable"]], ["mod", "theorem", "continuous_log'", ["real"]], ["add", "theorem", "measurable_exp", ["real"]], ["add", "theorem", "measurable_log", ["real"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "measurable_cos", ["complex"]], ["add", "theorem", "measurable_cosh", ["complex"]], ["add", "theorem", "measurable_sin", ["complex"]], ["add", "theorem", "measurable_sinh", ["complex"]], ["add", "theorem", "ccos", ["measurable"]], ["add", "theorem", "ccosh", ["measurable"]], ["add", "theorem", "cos", ["measurable"]], ["add", "theorem", "cosh", ["measurable"]], ["add", "theorem", "csin", ["measurable"]], ["add", "theorem", "csinh", ["measurable"]], ["add", "theorem", "sin", ["measurable"]], ["add", "theorem", "sinh", ["measurable"]], ["add", "theorem", "measurable_cos", ["real"]], ["add", "theorem", "measurable_cosh", ["real"]], ["add", "theorem", "measurable_sin", ["real"]], ["add", "theorem", "measurable_sinh", ["real"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_mul", ["ennreal"]], ["add", "theorem", "measurable_of_measurable_nnreal_prod", ["ennreal"]], ["add", "theorem", "measurable_sub", ["ennreal"]], ["add", "theorem", "measurable_to_nnreal", ["ennreal"]], ["add", "theorem", "measurable_to_real", ["ennreal"]], ["mod", "theorem", "ennreal_mul", ["measurable"]], ["mod", "theorem", "ennreal_sub", ["measurable"]], ["del", "theorem", "measurable_ennreal_to_real", []], ["del", "theorem", "measurable_to_nnreal", []]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "measurable_const", []]]}]}, {"timestamp": 1601381501, "sha": "744e0675", "message": "feat(linear_algebra/dual): transpose of linear maps (#4302)\nThis is filling an easy hole from the undergrad curriculum page: the transpose of a linear map. We don't prove much about it but at least we make contact with matrix transpose.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "arrow_congr_symm_apply", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "theorem", "dual_basis_apply", ["is_basis"]], ["add", "theorem", "dual_basis_apply_self", ["is_basis"]], ["add", "theorem", "dual_basis_equiv_fun", ["is_basis"]], ["add", "theorem", "dual_basis_repr", ["is_basis"]], ["add", "theorem", "to_dual_apply_left", ["is_basis"]], ["add", "theorem", "to_dual_apply_right", ["is_basis"]], ["add", "theorem", "to_dual_eq_equiv_fun", ["is_basis"]], ["add", "theorem", "to_dual_total_left", ["is_basis"]], ["add", "theorem", "to_dual_total_right", ["is_basis"]], ["add", "theorem", "total_dual_basis", ["is_basis"]], ["add", "def", "transpose", ["module", "dual"]], ["add", "theorem", "transpose_apply", ["module", "dual"]], ["add", "theorem", "transpose_comp", ["module", "dual"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "linear_equiv_matrix'_symm_apply", []], ["add", "theorem", "linear_equiv_matrix_symm_apply", []], ["add", "theorem", "linear_equiv_matrix_symm_transpose", []], ["add", "theorem", "linear_equiv_matrix_transpose", []]]}]}, {"timestamp": 1601377186, "sha": "a5a7a753", "message": "feat(analysis/normed_space): define `normed_comm_ring` (#4291)\nAlso use section `variables`.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["mod", "theorem", "map_fpow", ["ring_hom"]]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["add", "theorem", "map_fpow", ["monoid_hom"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "continuous_on_inv", ["normed_field"]], ["mod", "theorem", "exists_lt_norm", ["normed_field"]], ["mod", "theorem", "exists_norm_lt", ["normed_field"]], ["mod", "theorem", "exists_norm_lt_one", ["normed_field"]], ["mod", "theorem", "exists_one_lt_norm", ["normed_field"]], ["mod", "theorem", "nhds_within_is_unit_ne_bot", ["normed_field"]], ["mod", "theorem", "nnnorm_inv", ["normed_field"]], ["mod", "theorem", "nnnorm_one", ["normed_field"]], ["mod", "theorem", "norm_div", ["normed_field"]], ["mod", "theorem", "norm_fpow", ["normed_field"]], ["add", "def", "norm_hom", ["normed_field"]], ["mod", "theorem", "norm_inv", ["normed_field"]], ["mod", "theorem", "norm_mul", ["normed_field"]], ["mod", "theorem", "norm_one", ["normed_field"]], ["mod", "theorem", "norm_pow", ["normed_field"]], ["mod", "theorem", "norm_prod", ["normed_field"]], ["mod", "theorem", "punctured_nhds_ne_bot", ["normed_field"]], ["mod", "theorem", "tendsto_inv", ["normed_field"]]]}]}, {"timestamp": 1601373202, "sha": "9962bfa7", "message": "doc(data/monoid_algebra): fix typo (#4317)", "changes": [{"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1601365043, "sha": "22d034c1", "message": "feat(algebra/quandle): racks and quandles (#4247)\nThis adds the algebraic structures of racks and quandles, defines a few examples, and provides the universal enveloping group of a rack.\nA rack is a set that acts on itself bijectively, and sort of the point is that the action `act : α → (α ≃ α)` satisfies\n```\nact (x ◃ y) = act x * act y * (act x)⁻¹\n```\nwhere `x ◃ y` is the usual rack/quandle notation for `act x y`. (Note: racks do not use `has_scalar` because it's convenient having `x ◃⁻¹ y` for the inverse action of `x` on `y`. Plus, associative racks have a trivial action.)\nIn knot theory, the universal enveloping group of the fundamental quandle is isomorphic to the fundamental group of the knot complement. For oriented knots up to orientation-reversed mirror image, the fundamental quandle is a complete invariant, unlike the fundamental group, which fails to distinguish non-prime knots with chiral summands.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebra/quandle.lean", "changes": [["add", "def", "map", ["quandle", "conj"]], ["add", "def", "conj", ["quandle"]], ["add", "theorem", "conj_act_eq_conj", ["quandle"]], ["add", "theorem", "conj_swap", ["quandle"]], ["add", "def", "dihedral", ["quandle"]], ["add", "theorem", "inv", ["quandle", "dihedral_act"]], ["add", "def", "dihedral_act", ["quandle"]], ["add", "theorem", "fix_inv", ["quandle"]], ["add", "def", "act", ["rack"]], ["add", "theorem", "act_apply", ["rack"]], ["add", "theorem", "act_inv_act_eq", ["rack"]], ["add", "theorem", "act_symm_apply", ["rack"]], ["add", "theorem", "ad_conj", ["rack"]], ["add", "theorem", "assoc_iff_id", ["rack"]], ["add", "def", "envel_action", ["rack"]], ["add", "theorem", "envel_action_prop", ["rack"]], ["add", "def", "envel_group", ["rack"]], ["add", "theorem", "inv_act_act_eq", ["rack"]], ["add", "theorem", "inv_act_apply", ["rack"]], ["add", "theorem", "involutory_inv_act_eq_act", ["rack"]], ["add", "def", "is_abelian", ["rack"]], ["add", "def", "is_involutory", ["rack"]], ["add", "theorem", "left_cancel", ["rack"]], ["add", "theorem", "left_cancel_inv", ["rack"]], ["add", "theorem", "op_act_op_eq", ["rack"]], ["add", "theorem", "op_inv_act_op_eq", ["rack"]], ["add", "inductive", "pre_envel_group", ["rack"]], ["add", "theorem", "rel", ["rack", "pre_envel_group_rel'"]], ["add", "inductive", "pre_envel_group_rel'", ["rack"]], ["add", "theorem", "refl", ["rack", "pre_envel_group_rel"]], ["add", "theorem", "symm", ["rack", "pre_envel_group_rel"]], ["add", "theorem", "trans", ["rack", "pre_envel_group_rel"]], ["add", "inductive", "pre_envel_group_rel", ["rack"]], ["add", "theorem", "self_act_act_eq", ["rack"]], ["add", "theorem", "self_act_eq_iff_eq", ["rack"]], ["add", "theorem", "self_act_inv_act_eq", ["rack"]], ["add", "def", "self_apply_equiv", ["rack"]], ["add", "theorem", "self_distrib", ["rack"]], ["add", "theorem", "self_distrib_inv", ["rack"]], ["add", "theorem", "self_inv_act_act_eq", ["rack"]], ["add", "theorem", "self_inv_act_eq_iff_eq", ["rack"]], ["add", "theorem", "self_inv_act_inv_act_eq", ["rack"]], ["add", "def", "to_conj", ["rack"]], ["add", "def", "map", ["rack", "to_envel_group"]], ["add", "theorem", "well_def", ["rack", "to_envel_group", "map_aux"]], ["add", "def", "map_aux", ["rack", "to_envel_group"]], ["add", "theorem", "univ", ["rack", "to_envel_group"]], ["add", "theorem", "univ_uniq", ["rack", "to_envel_group"]], ["add", "def", "to_envel_group", ["rack"]], ["add", "def", "comp", ["shelf_hom"]], ["add", "theorem", "comp_apply", ["shelf_hom"]], ["add", "def", "id", ["shelf_hom"]], ["add", "theorem", "map_act", ["shelf_hom"]], ["add", "theorem", "to_fun_eq_coe", ["shelf_hom"]], ["add", "structure", "shelf_hom", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "conj_inv_apply", ["mul_aut"]], ["add", "theorem", "to_equiv_apply", ["mul_equiv"]]]}]}, {"timestamp": 1601355507, "sha": "0bb5e5d9", "message": "feat(ring_theory/algebra_tower): Artin--Tate lemma (#4282)", "changes": [{"oldPath": "src/field_theory/intermediate_field.lean", "newPath": "src/field_theory/intermediate_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "map_span", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "mem_span_finset", []]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_image", ["algebra"]], ["add", "theorem", "fg_adjoin_finset", ["subalgebra"]], ["add", "theorem", "fg_map", ["subalgebra"]], ["add", "theorem", "fg_of_fg_map", ["subalgebra"]], ["add", "theorem", "fg_of_submodule_fg", ["subalgebra"]], ["add", "theorem", "fg_top", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_val", ["subalgebra"]], ["add", "theorem", "map_injective", ["subalgebra"]], ["add", "theorem", "map_mono", ["subalgebra"]], ["add", "theorem", "range_val", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "fg_trans'", ["algebra"]], ["add", "theorem", "exists_subalgebra_of_fg", []], ["add", "theorem", "fg_of_fg_of_fg", []], ["mod", "theorem", "aeval_apply", ["is_scalar_tower"]], ["mod", "theorem", "of_algebra_map_eq", ["is_scalar_tower"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_of_injective", []], ["add", "theorem", "is_noetherian_of_fg_of_noetherian'", []], ["add", "theorem", "is_noetherian_of_injective", []], ["add", "theorem", "fg_of_fg_map", ["submodule"]], ["mod", "theorem", "fg_of_fg_map_of_fg_inf_ker", ["submodule"]], ["add", "theorem", "fg_of_linear_equiv", ["submodule"]], ["add", "theorem", "fg_top", ["submodule"]]]}]}, {"timestamp": 1601350326, "sha": "88187ba9", "message": "chore(topology/algebra/ordered): golf a proof (#4311)\n* generalize `continuous_within_at_Ioi_iff_Ici` from `linear_order α`\n to `partial_order α`;\n* base the proof on a more general fact:\n `continuous_within_at f (s \\ {x}) x ↔ continuous_within_at f s x`.", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "continuous_within_at_Ioi_iff_Ici", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "diff_iff", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_diff_self", []], ["add", "theorem", "continuous_within_at_singleton", []]]}]}, {"timestamp": 1601313738, "sha": "89d8cc37", "message": "refactor(data/nat/basic): review API of `nat.find_greatest` (#4274)\nOther changes:\n* add `nat.find_eq_iff`;\n* use weaker assumptions in `measurable_to_encodable` and `measurable_to_nat`;\n* add `measurable_find`.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "find_eq_iff", ["nat"]], ["add", "theorem", "find_greatest_eq_iff", ["nat"]], ["del", "theorem", "find_greatest_eq_zero", ["nat"]], ["add", "theorem", "find_greatest_eq_zero_iff", ["nat"]], ["mod", "theorem", "find_greatest_is_greatest", ["nat"]], ["mod", "theorem", "find_greatest_le", ["nat"]], ["mod", "theorem", "find_greatest_of_ne_zero", ["nat"]], ["mod", "theorem", "find_greatest_spec", ["nat"]], ["del", "theorem", "find_greatest_spec_and_le", ["nat"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_find", []], ["add", "theorem", "measurable_find_greatest'", []], ["mod", "theorem", "measurable_find_greatest", []]]}]}, {"timestamp": 1601306745, "sha": "50dbce94", "message": "fix(data/list/basic): Ensure that ball_cons actually works as a simp lemma (#4281)\nThe LHS of the simp lemma `list.ball_cons` (aka `list.forall_mem_cons`) is not in simp-normal form, as `list.mem_cons_iff` rewrites it.\nThis adds a new simp lemma which is the form that `list.mem_cons_iff` rewrites it to.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "forall_mem_cons'", ["list"]]]}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall_eq_or_imp", []]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1601306743, "sha": "40fb7017", "message": "feat(data/mv_polynomial): some lemmas on constant_coeff and rename (#4231)\nSnippet from the Witt project\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "constant_coeff_comp_C", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_comp_algebra_map", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["add", "theorem", "constant_coeff_rename", ["mv_polynomial"]]]}]}, {"timestamp": 1601302124, "sha": "8461a7d3", "message": "feat(geometry/euclidean/monge_point): lemmas on altitudes and orthocenter (#4179)\nAdd more lemmas about altitudes of a simplex and the orthocenter of a\ntriangle. Some of these are just building out basic API that's\nmathematically trivial (e.g. showing that the altitude as defined is a\none-dimensional affine subspace and providing an explicit form of its\ndirection), while the results on the orthocenter have some geometrical\ncontent that's part of the preparation for defining and proving basic\nproperties of orthocentric systems.", "changes": [{"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["add", "theorem", "affine_span_insert_singleton_eq_altitude_iff", ["affine", "simplex"]], ["add", "theorem", "direction_altitude", ["affine", "simplex"]], ["add", "theorem", "findim_direction_altitude", ["affine", "simplex"]], ["add", "theorem", "mem_altitude", ["affine", "simplex"]], ["add", "theorem", "vector_span_le_altitude_direction_orthogonal", ["affine", "simplex"]], ["add", "theorem", "affine_span_orthocenter_point_le_altitude", ["affine", "triangle"]], ["add", "theorem", "altitude_replace_orthocenter_eq_affine_span", ["affine", "triangle"]], ["add", "theorem", "orthocenter_replace_orthocenter_eq_point", ["affine", "triangle"]]]}]}, {"timestamp": 1601292084, "sha": "7bbb759f", "message": "chore(algebra/free_algebra): Make the second type argument to lift and ι implicit (#4299)\nThese can always be inferred by the context, and just make things longer.\nThis is consistent with how the type argument for `id` is implicit.\nThe changes are applied to downstream uses too.", "changes": [{"oldPath": "src/algebra/free_algebra.lean", "newPath": "src/algebra/free_algebra.lean", "changes": [["mod", "theorem", "quot_mk_eq_ι", ["free_algebra"]]]}, {"oldPath": "src/algebra/lie/universal_enveloping.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": [["mod", "theorem", "lift_ι_apply", ["universal_enveloping_algebra"]], ["mod", "theorem", "ι_comp_lift", ["universal_enveloping_algebra"]]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}]}, {"timestamp": 1601292082, "sha": "ad680c24", "message": "chore(algebra/ordered_ring): remove duplicate lemma (#4295)\n`ordered_ring.two_pos` and `ordered_ring.zero_lt_two` had ended up identical. I kept `zero_lt_two`.", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["mod", "theorem", "half_pos", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "four_pos", []], ["del", "theorem", "two_pos", []], ["add", "theorem", "zero_lt_four", []], ["mod", "theorem", "zero_lt_two", []]]}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_two", ["real"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "two_ne_zero", ["ennreal"]], ["del", "theorem", "two_pos", ["ennreal"]], ["add", "theorem", "zero_lt_two", ["ennreal"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}]}, {"timestamp": 1601270733, "sha": "3986e978", "message": "chore(algebra/lie): group Lie algebra files together in their own directory (#4288)", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie/basic.lean", "changes": [["mod", "def", "lie_ideal_subalgebra", []], ["mod", "def", "of_endo_morphism", ["lie_module"]]]}, {"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/lie/classical.lean", "changes": []}, {"oldPath": "src/algebra/universal_enveloping_algebra.lean", "newPath": "src/algebra/lie/universal_enveloping.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "test/transport/basic.lean", "newPath": "test/transport/basic.lean", "changes": []}]}, {"timestamp": 1601270730, "sha": "d77ac51c", "message": "chore(data/fintype/card): review API (#4287)\nAPI changes:\n* `finset.filter_mem_eq_inter` now takes `[Π i, decidable (i ∈ t)]`; this way it works better\n with `classical`;\n* add `finset.mem_compl` and `finset.coe_compl`;\n* [DRY] drop `finset.prod_range_eq_prod_fin` and `finset.sum_range_eq_sum_fin`:\n use `fin.prod_univ_eq_prod_range` and `fin.sum_univ_eq_sum_range` instead;\n* rename `finset.prod_equiv` to `equiv.prod_comp` to enable dot notation;\n* add `fintype.prod_dite`: a specialized version of `finset.prod_dite`.\nAlso golf a proof in `analysis/normed_space/multilinear`", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "filter_mem_eq_inter", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "coe_compl", ["finset"]], ["add", "theorem", "mem_compl", ["finset"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_comp", ["equiv"]], ["del", "theorem", "prod_equiv", ["finset"]], ["del", "theorem", "prod_range_eq_prod_fin", ["finset"]], ["add", "theorem", "prod_dite", ["fintype"]]]}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": []}]}, {"timestamp": 1601270728, "sha": "66c87c0d", "message": "feat(data/*/gcd): adds gcd, lcm of finsets and multisets (#4217)\nDefines `finset.gcd`, `finset.lcm`, `multiset.gcd`, `multiset.lcm`\nProves some basic facts about those, analogous to those in `data.multiset.lattice` and `data.finset.lattice`", "changes": [{"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "theorem", "gcd_eq_of_associated_left", []], ["add", "theorem", "gcd_eq_of_associated_right", []], ["add", "theorem", "lcm_eq_of_associated_left", []], ["add", "theorem", "lcm_eq_of_associated_right", []]]}, {"oldPath": null, "newPath": "src/data/finset/gcd.lean", "changes": [["add", "theorem", "dvd_gcd", ["finset"]], ["add", "theorem", "dvd_gcd_iff", ["finset"]], ["add", "theorem", "dvd_lcm", ["finset"]], ["add", "def", "gcd", ["finset"]], ["add", "theorem", "gcd_congr", ["finset"]], ["add", "theorem", "gcd_def", ["finset"]], ["add", "theorem", "gcd_dvd", ["finset"]], ["add", "theorem", "gcd_empty", ["finset"]], ["add", "theorem", "gcd_insert", ["finset"]], ["add", "theorem", "gcd_mono", ["finset"]], ["add", "theorem", "gcd_mono_fun", ["finset"]], ["add", "theorem", "gcd_singleton", ["finset"]], ["add", "theorem", "gcd_union", ["finset"]], ["add", "def", "lcm", ["finset"]], ["add", "theorem", "lcm_congr", ["finset"]], ["add", "theorem", "lcm_def", ["finset"]], ["add", "theorem", "lcm_dvd", ["finset"]], ["add", "theorem", "lcm_dvd_iff", ["finset"]], ["add", "theorem", "lcm_empty", ["finset"]], ["add", "theorem", "lcm_insert", ["finset"]], ["add", "theorem", "lcm_mono", ["finset"]], ["add", "theorem", "lcm_mono_fun", ["finset"]], ["add", "theorem", "lcm_singleton", ["finset"]], ["add", "theorem", "lcm_union", ["finset"]], ["add", "theorem", "normalize_gcd", ["finset"]], ["add", "theorem", "normalize_lcm", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/multiset/gcd.lean", "changes": [["add", "theorem", "dvd_gcd", ["multiset"]], ["add", "theorem", "dvd_lcm", ["multiset"]], ["add", "def", "gcd", ["multiset"]], ["add", "theorem", "gcd_add", ["multiset"]], ["add", "theorem", "gcd_cons", ["multiset"]], ["add", "theorem", "gcd_dvd", ["multiset"]], ["add", "theorem", "gcd_erase_dup", ["multiset"]], ["add", "theorem", "gcd_mono", ["multiset"]], ["add", "theorem", "gcd_ndinsert", ["multiset"]], ["add", "theorem", "gcd_ndunion", ["multiset"]], ["add", "theorem", "gcd_singleton", ["multiset"]], ["add", "theorem", "gcd_union", ["multiset"]], ["add", "theorem", "gcd_zero", ["multiset"]], ["add", "def", "lcm", ["multiset"]], ["add", "theorem", "lcm_add", ["multiset"]], ["add", "theorem", "lcm_cons", ["multiset"]], ["add", "theorem", "lcm_dvd", ["multiset"]], ["add", "theorem", "lcm_erase_dup", ["multiset"]], ["add", "theorem", "lcm_mono", ["multiset"]], ["add", "theorem", "lcm_ndinsert", ["multiset"]], ["add", "theorem", "lcm_ndunion", ["multiset"]], ["add", "theorem", "lcm_singleton", ["multiset"]], ["add", "theorem", "lcm_union", ["multiset"]], ["add", "theorem", "lcm_zero", ["multiset"]], ["add", "theorem", "normalize_gcd", ["multiset"]], ["add", "theorem", "normalize_lcm", ["multiset"]]]}]}, {"timestamp": 1601266818, "sha": "17618222", "message": "chore(category_theory/limits): some limit lemmas (#4238)\nA couple of lemmas characterising definitions which are already there (the first part of #4163)", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "iso_of_nat_iso_hom_desc", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "lift_iso_of_nat_iso_hom", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "cocone_point_unique_up_to_iso_hom_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cocone_point_unique_up_to_iso_inv_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cocone_points_iso_of_nat_iso_hom_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "comp_cocone_points_iso_of_nat_iso_hom", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "comp_cocone_points_iso_of_nat_iso_inv", ["category_theory", "limits", "is_colimit"]], ["add", "def", "equiv_iso_colimit", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "equiv_iso_colimit_apply", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "equiv_iso_colimit_symm_apply", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "map", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "of_iso_colimit_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "ι_map", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cone_points_iso_of_nat_iso_hom_comp", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_points_iso_of_nat_iso_inv_comp", ["category_theory", "limits", "is_limit"]], ["add", "def", "equiv_iso_limit", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "equiv_iso_limit_apply", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "equiv_iso_limit_symm_apply", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "lift_comp_cone_point_unique_up_to_iso_hom", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "lift_comp_cone_point_unique_up_to_iso_inv", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "lift_comp_cone_points_iso_of_nat_iso_hom", ["category_theory", "limits", "is_limit"]], ["mod", "def", "map", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "map_π", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "of_iso_limit_lift", ["category_theory", "limits", "is_limit"]], ["del", "theorem", "is_limit_map_π", ["category_theory", "limits"]], ["del", "theorem", "ι_is_colimit_map", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves/shapes.lean", "newPath": "src/category_theory/limits/preserves/shapes.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}]}, {"timestamp": 1601257545, "sha": "d8726bf3", "message": "feat(ring_theory/integral_closure): Explicitly define integral extensions (#4164)\n* Defined `ring_hom.is_integral_elem` as a generalization of `is_integral` that takes a ring homomorphism rather than an algebra. The old version is is redefined to be `(algebra_map R A).is_integral_elem x`.\n* Create predicates `ring_hom.is_integral` and `algebra.is_integral` representing when the entire extension is integral over the base ring.", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["mod", "theorem", "exists_ideal_over_prime_of_is_integral'", ["ideal"]], ["mod", "theorem", "exists_ideal_over_prime_of_is_integral", ["ideal"]], ["mod", "theorem", "is_maximal_comap_of_is_integral_of_is_maximal", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "def", "is_integral", ["algebra"]], ["mod", "theorem", "is_integral_trans", ["algebra"]], ["mod", "theorem", "is_integral_of_surjective", []], ["mod", "theorem", "is_integral_quotient_of_is_integral", []], ["mod", "theorem", "is_integral_trans", []], ["add", "def", "is_integral", ["ring_hom"]], ["add", "def", "is_integral_elem", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "is_integral_localization", []]]}]}, {"timestamp": 1601254778, "sha": "2fa1bc62", "message": "chore(scripts): update nolints.txt (#4293)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601239501, "sha": "38977584", "message": "feat(measure_theory): prove that more functions are measurable (#4266)\nMostly additions to `borel_space`.\nGeneralize `measurable_bsupr` and `measurable_binfi` to countable sets (instead of encodable underlying types). Use the lemma `countable_encodable` to get the original behavior.\nSome cleanup in `borel_space`: more instances are in `variables`, and lemmas with the same instances a bit more.\nOne downside: there is a big import bump in `borel_space`, it currently imports `hahn_banach`. This is (only) used in `measurable_smul_const`. If someone has a proof sketch (in math) of `measurable_smul_const` that doesn't involve Hahn Banach (and that maybe generalizes `real` to a topological field or something), please let me know.", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "closed_embedding_smul_left", []], ["add", "theorem", "is_closed_map_smul_left", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ker_to_span_singleton", ["linear_equiv"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "borel_eq_generate_Iio", []], ["mod", "theorem", "borel_eq_generate_Ioi", []], ["mod", "theorem", "measurable_of_measurable_nnreal", ["ennreal"]], ["mod", "theorem", "measurable_of_measurable_nnreal_nnreal", ["ennreal"]], ["mod", "theorem", "is_measurable_interval", []], ["mod", "theorem", "is_measurable_le'", []], ["mod", "theorem", "is_measurable_le", []], ["mod", "theorem", "is_measurable_lt'", []], ["mod", "theorem", "is_measurable_lt", []], ["add", "theorem", "is_pi_system_is_open", []], ["mod", "theorem", "dist", ["measurable"]], ["mod", "theorem", "edist", ["measurable"]], ["mod", "theorem", "ennreal_add", ["measurable"]], ["mod", "theorem", "ennreal_coe", ["measurable"]], ["mod", "theorem", "ennreal_mul", ["measurable"]], ["mod", "theorem", "ennreal_of_real", ["measurable"]], ["mod", "theorem", "ennreal_sub", ["measurable"]], ["add", "theorem", "ennreal_tsum", ["measurable"]], ["add", "theorem", "inf_dist", ["measurable"]], ["add", "theorem", "inf_edist", ["measurable"]], ["mod", "theorem", "is_glb", ["measurable"]], ["mod", "theorem", "is_lub", ["measurable"]], ["mod", "theorem", "max", ["measurable"]], ["mod", "theorem", "min", ["measurable"]], ["add", "theorem", "mul'", ["measurable"]], ["mod", "theorem", "nndist", ["measurable"]], ["mod", "theorem", "nnreal_coe", ["measurable"]], ["mod", "theorem", "nnreal_of_real", ["measurable"]], ["mod", "theorem", "sub_nnreal", ["measurable"]], ["add", "theorem", "to_nnreal", ["measurable"]], ["add", "theorem", "to_real", ["measurable"]], ["mod", "theorem", "measurable_binfi", []], ["mod", "theorem", "measurable_bsupr", []], ["add", "theorem", "measurable_cSup", []], ["add", "theorem", "measurable_comp_iff_of_closed_embedding", []], ["mod", "theorem", "measurable_dist", []], ["mod", "theorem", "measurable_edist", []], ["add", "theorem", "measurable_ennnorm", []], ["add", "theorem", "measurable_ennreal_coe_iff", []], ["add", "theorem", "measurable_ennreal_to_real", []], ["add", "theorem", "measurable_inf_dist", []], ["add", "theorem", "measurable_inf_edist", []], ["mod", "theorem", "measurable_infi", []], ["mod", "theorem", "measurable_nndist", []], ["add", "theorem", "measurable_of_Ici", []], ["add", "theorem", "measurable_of_Iic", []], ["add", "theorem", "measurable_of_Iio", []], ["add", "theorem", "measurable_of_Ioi", []], ["add", "theorem", "measurable_of_is_closed'", []], ["add", "theorem", "measurable_of_is_closed", []], ["add", "theorem", "measurable_of_is_open", []], ["add", "theorem", "measurable_smul_const", []], ["mod", "theorem", "measurable_supr", []], ["add", "theorem", "measurable_to_nnreal", []], ["add", "theorem", "measurable_coe", ["nnreal"]]]}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": [["add", "theorem", "measurable_measure", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_swap_iff", []], ["add", "theorem", "of_uncurry_left", ["measurable"]], ["add", "theorem", "of_uncurry_right", ["measurable"]], ["add", "theorem", "measurable_prod", []], ["add", "theorem", "measurable_prod_mk_left", []], ["add", "theorem", "measurable_prod_mk_right", []], ["add", "theorem", "measurable_swap", []], ["add", "theorem", "measurable_swap_iff", []]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "of_nonempty", ["is_closed_map"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_closed_map_const", []]]}]}, {"timestamp": 1601231482, "sha": "c3224710", "message": "feat(undergrad.yaml): missing items (#4290)", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1601224443, "sha": "2516d7d6", "message": "feat(topology): various additions (#4264)\nSome if it is used for Fubini, but some of the results were rabbit holes I went into, which I never ended up using, but that still seem useful.", "changes": [{"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "Liminf_eq_supr_Inf", ["filter", "has_basis"]], ["add", "theorem", "liminf_eq_supr_infi", ["filter", "has_basis"]], ["add", "theorem", "limsup_eq_infi_supr", ["filter", "has_basis"]], ["mod", "theorem", "liminf_eq_supr_infi_of_nat'", ["filter"]], ["mod", "theorem", "liminf_eq_supr_infi_of_nat", ["filter"]], ["mod", "theorem", "limsup_eq_infi_supr_of_nat'", ["filter"]], ["mod", "theorem", "limsup_eq_infi_supr_of_nat", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum", ["pi"]], ["add", "theorem", "summable", ["pi"]], ["add", "theorem", "tsum_apply", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "is_closed_le_prod", []], ["add", "theorem", "is_open_lt_prod", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "tendsto_pi", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": [["add", "theorem", "cons", ["filter", "tendsto"]], ["add", "theorem", "continuous_cons", ["list"]], ["add", "theorem", "continuous_prod", ["list"]], ["del", "theorem", "tendsto_cons'", ["list"]], ["mod", "theorem", "tendsto_cons", ["list"]], ["mod", "theorem", "tendsto_insert_nth", ["list"]], ["add", "theorem", "tendsto_prod", ["list"]], ["mod", "theorem", "nhds_cons", []], ["mod", "theorem", "nhds_list", []], ["mod", "theorem", "nhds_nil", []], ["mod", "theorem", "continuous_at_remove_nth", ["vector"]], ["mod", "theorem", "continuous_insert_nth'", ["vector"]], ["mod", "theorem", "continuous_insert_nth", ["vector"]], ["mod", "theorem", "continuous_remove_nth", ["vector"]], ["mod", "theorem", "tendsto_cons", ["vector"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "coe_inf_nndist", ["metric"]], ["add", "theorem", "continuous_inf_nndist_pt", ["metric"]], ["add", "def", "inf_nndist", ["metric"]], ["add", "theorem", "lipschitz_inf_nndist_pt", ["metric"]], ["add", "theorem", "uniform_continuous_inf_nndist_pt", ["metric"]]]}]}, {"timestamp": 1601197116, "sha": "b6ce982d", "message": "refactor(*): create directory field_theory/finite (#4212)\nfacts on finite fields needed facts on polynomials\nfacts on polynomials wanted to use things about finite fields\nthis PR reorganises some of the imports\nat the moment it also contributes a bit of new stuff,\nand depends on two other PRs that add new stuff.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/polynomial.lean", "newPath": null, "changes": [["del", "theorem", "C_dvd_iff_zmod", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite/basic.lean", "changes": [["add", "theorem", "frobenius_zmod", ["zmod"]]]}, {"oldPath": null, "newPath": "src/field_theory/finite/polynomial.lean", "changes": [["add", "theorem", "C_dvd_iff_zmod", ["mv_polynomial"]], ["add", "def", "R", ["mv_polynomial"]], ["add", "theorem", "degrees_indicator", ["mv_polynomial"]], ["add", "theorem", "dim_R", ["mv_polynomial"]], ["add", "theorem", "eq_zero_of_eval_eq_zero", ["mv_polynomial"]], ["add", "theorem", "eval_indicator_apply_eq_one", ["mv_polynomial"]], ["add", "theorem", "eval_indicator_apply_eq_zero", ["mv_polynomial"]], ["add", "def", "evalᵢ", ["mv_polynomial"]], ["add", "def", "evalₗ", ["mv_polynomial"]], ["add", "theorem", "evalₗ_apply", ["mv_polynomial"]], ["add", "theorem", "expand_zmod", ["mv_polynomial"]], ["add", "theorem", "frobenius_zmod", ["mv_polynomial"]], ["add", "def", "indicator", ["mv_polynomial"]], ["add", "theorem", "indicator_mem_restrict_degree", ["mv_polynomial"]], ["add", "theorem", "ker_evalₗ", ["mv_polynomial"]], ["add", "theorem", "map_restrict_dom_evalₗ", ["mv_polynomial"]], ["add", "theorem", "range_evalᵢ", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["del", "def", "R", ["mv_polynomial"]], ["del", "theorem", "degrees_indicator", ["mv_polynomial"]], ["del", "theorem", "dim_R", ["mv_polynomial"]], ["del", "theorem", "eq_zero_of_eval_eq_zero", ["mv_polynomial"]], ["del", "theorem", "eval_indicator_apply_eq_one", ["mv_polynomial"]], ["del", "theorem", "eval_indicator_apply_eq_zero", ["mv_polynomial"]], ["del", "def", "evalᵢ", ["mv_polynomial"]], ["del", "def", "evalₗ", ["mv_polynomial"]], ["del", "theorem", "evalₗ_apply", ["mv_polynomial"]], ["del", "def", "indicator", ["mv_polynomial"]], ["del", "theorem", "indicator_mem_restrict_degree", ["mv_polynomial"]], ["del", "theorem", "ker_evalₗ", ["mv_polynomial"]], ["del", "theorem", "map_restrict_dom_evalₗ", ["mv_polynomial"]], ["del", "theorem", "range_evalᵢ", ["mv_polynomial"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1601192936, "sha": "95ab6ac9", "message": "docs(overview): expand analysis (#4284)\nA few additions to the \"normed spaces\", \"convexity\", \"special functions\" and \"manifolds\" sections of the overview.", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1601184154, "sha": "a7e34357", "message": "chore(data/option): swap sides in `ne_none_iff_exists` (#4285)\n* swap lhs and rhs of the equality in `option.ne_none_iff_exists`; the new order matches, e.g., the definition of `set.range` and `can_lift.prf`;\n* the same in `with_one.ne_one_iff_exists` and `with_zero.ne_zero_iff_exists`;\n* remove `option.ne_none_iff_exists'`;\n* restore the original `option.ne_none_iff_exists` as `option.ne_none_iff_exists'`", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "theorem", "ne_one_iff_exists", ["with_one"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["mod", "theorem", "ne_none_iff_exists'", ["option"]], ["mod", "theorem", "ne_none_iff_exists", ["option"]]]}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}]}, {"timestamp": 1601170754, "sha": "5f6b07f8", "message": "chore(scripts): update nolints.txt (#4283)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601166820, "sha": "5c957ec8", "message": "feat(analysis/convex/integral): Jensen's inequality for integrals (#4225)", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/integral.lean", "changes": [["add", "theorem", "integral_mem", ["convex"]], ["add", "theorem", "smul_integral_mem", ["convex"]], ["add", "theorem", "map_integral_le", ["convex_on"]], ["add", "theorem", "map_smul_integral_le", ["convex_on"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_def", ["prod"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "sum_range_measure_preimage_singleton", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "prod_mk", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ne_zero", ["measure_theory", "probability_measure"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "fst_integral", []], ["add", "theorem", "integral_pair", []], ["add", "theorem", "snd_integral", []]]}]}, {"timestamp": 1601152995, "sha": "8600cb08", "message": "feat(measure_space): define sigma finite measures (#4265)\nThey are defined as a `Prop`. The noncomputable \"eliminator\" is called `spanning_sets`, and satisfies monotonicity, even though that is not required to give a `sigma_finite` instance.\nI define a helper function `accumulate s := ⋃ y ≤ x, s y`. This is helpful, to separate out some monotonicity proofs. It is in its own file purely for import reasons (there is no good file to put it that imports both `set.lattice` and `finset.basic`, the latter is used in 1 lemma).", "changes": [{"oldPath": null, "newPath": "src/data/set/accumulate.lean", "changes": [["add", "theorem", "Union_accumulate", ["set"]], ["add", "def", "accumulate", ["set"]], ["add", "theorem", "accumulate_def", ["set"]], ["add", "theorem", "bUnion_accumulate", ["set"]], ["add", "theorem", "mem_accumulate", ["set"]], ["add", "theorem", "monotone_accumulate", ["set"]], ["add", "theorem", "subset_accumulate", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_prod_of_monotone", ["set"]], ["add", "theorem", "image2_eq_seq", ["set"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "Union_spanning_sets", ["measure_theory"]], ["add", "theorem", "exists_finite_spanning_sets", ["measure_theory"]], ["add", "theorem", "is_measurable_spanning_sets", ["measure_theory"]], ["add", "theorem", "supr_restrict_spanning_sets", ["measure_theory", "measure"]], ["add", "theorem", "measure_bUnion_lt_top", ["measure_theory"]], ["add", "theorem", "measure_spanning_sets_lt_top", ["measure_theory"]], ["add", "theorem", "monotone_spanning_sets", ["measure_theory"]], ["add", "def", "spanning_sets", ["measure_theory"]]]}]}, {"timestamp": 1601147753, "sha": "253b120d", "message": "feat(field_theory): prove primitive element theorem (#4153)\nProof of the primitive element theorem. The main proof is in `field_theory/primitive_element.lean`. Some lemmas we used have been added to other files. We have also changed the notation for adjoining an element to a field to be easier to use.", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "eval_gcd_eq_zero", ["polynomial"]], ["add", "theorem", "eval₂_gcd_eq_zero", ["polynomial"]], ["add", "theorem", "is_root_gcd_iff_is_root_left_right", ["polynomial"]], ["add", "theorem", "mem_roots_map", ["polynomial"]], ["add", "theorem", "root_gcd_iff_root_left_right", ["polynomial"]], ["add", "theorem", "root_left_of_root_gcd", ["polynomial"]], ["add", "theorem", "root_right_of_root_gcd", ["polynomial"]]]}, {"oldPath": "src/deprecated/subfield.lean", "newPath": "src/deprecated/subfield.lean", "changes": [["add", "theorem", "pow_mem", ["is_subfield"]]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_adjoin_comm", ["field"]], ["add", "theorem", "adjoin_dim_eq_one_iff", ["field"]], ["add", "theorem", "adjoin_dim_eq_one_of_sub_bot", ["field"]], ["add", "theorem", "adjoin_eq_bot", ["field"]], ["add", "theorem", "adjoin_eq_bot_iff", ["field"]], ["add", "theorem", "adjoin_eq_range_algebra_map_adjoin", ["field"]], ["add", "theorem", "adjoin_findim_eq_one_iff", ["field"]], ["add", "theorem", "adjoin_one", ["field"]], ["mod", "theorem", "algebra_map_gen", ["field", "adjoin_simple"]], ["mod", "theorem", "adjoin_simple_adjoin_simple", ["field"]], ["add", "theorem", "adjoin_simple_comm", ["field"]], ["add", "theorem", "adjoin_simple_dim_eq_one_iff", ["field"]], ["add", "theorem", "adjoin_simple_dim_eq_one_of_mem_bot", ["field"]], ["add", "theorem", "adjoin_simple_eq_bot", ["field"]], ["add", "theorem", "adjoin_simple_eq_bot_iff", ["field"]], ["add", "theorem", "adjoin_simple_findim_eq_one_iff", ["field"]], ["del", "theorem", "adjoin_singleton", ["field"]], ["add", "theorem", "adjoin_zero", ["field"]], ["add", "theorem", "bot_eq_top_of_dim_adjoin_eq_one", ["field"]], ["add", "theorem", "bot_eq_top_of_findim_adjoin_eq_one", ["field"]], ["add", "theorem", "bot_eq_top_of_findim_adjoin_le_one", ["field"]], ["add", "theorem", "mem_bot_of_adjoin_simple_dim_eq_one", ["field"]], ["add", "theorem", "mem_bot_of_adjoin_simple_sub_bot", ["field"]], ["add", "theorem", "sub_bot_of_adjoin_dim_eq_one", ["field"]], ["add", "theorem", "sub_bot_of_adjoin_sub_bot", ["field"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["add", "theorem", "dvd_map_of_is_scalar_tower", ["minimal_polynomial"]]]}, {"oldPath": null, "newPath": "src/field_theory/primitive_element.lean", "changes": [["add", "theorem", "exists_primitive_element", ["field"]], ["add", "theorem", "exists_primitive_element_aux", ["field"]], ["add", "theorem", "exists_primitive_element_inf", ["field"]], ["add", "theorem", "exists_primitive_element_of_fintype_bot", ["field"]], ["add", "theorem", "exists_primitive_element_of_fintype_top", ["field"]], ["add", "theorem", "primitive_element_inf_aux", ["field"]], ["add", "theorem", "primitive_element_inf_aux_exists_c", ["field"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "is_separable_tower_bot_of_is_separable", []], ["add", "theorem", "is_separable_tower_top_of_is_separable", []], ["add", "theorem", "eq_X_sub_C_of_separable_of_root_eq", ["polynomial"]], ["add", "theorem", "separable_gcd_left", ["polynomial"]], ["add", "theorem", "separable_gcd_right", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "eq_X_sub_C_of_splits_of_single_root", ["polynomial"]], ["add", "theorem", "splits_of_splits_gcd_left", ["polynomial"]], ["add", "theorem", "splits_of_splits_gcd_right", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "findim_top", []], ["add", "theorem", "finite_dimensional_of_dim_eq_one", []], ["add", "theorem", "bot_eq_top_of_dim_eq_one", ["subalgebra"]], ["add", "theorem", "bot_eq_top_of_findim_eq_one", ["subalgebra"]], ["add", "theorem", "dim_bot", ["subalgebra"]], ["add", "theorem", "dim_eq_one_iff", ["subalgebra"]], ["add", "theorem", "dim_eq_one_of_eq_bot", ["subalgebra"]], ["add", "theorem", "dim_top", ["subalgebra"]], ["add", "theorem", "eq_bot_of_dim_one", ["subalgebra"]], ["add", "theorem", "eq_bot_of_findim_one", ["subalgebra"]], ["add", "theorem", "findim_bot", ["subalgebra"]], ["add", "theorem", "findim_eq_one_iff", ["subalgebra"]], ["add", "theorem", "findim_eq_one_of_eq_bot", ["subalgebra"]], ["add", "theorem", "finite_dimensional_bot", ["subalgebra"]], ["add", "theorem", "subalgebra_top_dim_eq_submodule_top_dim", []], ["add", "theorem", "subalgebra_top_findim_eq_submodule_top_findim", []]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_bot", ["algebra"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero", ["is_scalar_tower"]], ["add", "theorem", "aeval_eq_zero_of_aeval_algebra_map_eq_zero_field", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_aeval", ["is_scalar_tower"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_tower_bot_of_is_integral_field", []]]}]}, {"timestamp": 1601147750, "sha": "d0b59476", "message": "feat(algebra/universal_enveloping_algebra): construction of universal enveloping algebra and its universal property (#4041)\n## Main definitions\n * `universal_enveloping_algebra`\n * `universal_enveloping_algebra.algebra`\n * `universal_enveloping_algebra.lift`\n * `universal_enveloping_algebra.ι_comp_lift`\n * `universal_enveloping_algebra.lift_unique`\n * `universal_enveloping_algebra.hom_ext`", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "coe_to_linear_map", ["lie_algebra"]], ["add", "theorem", "ext", ["lie_algebra", "morphism"]]]}, {"oldPath": null, "newPath": "src/algebra/universal_enveloping_algebra.lean", "changes": [["add", "theorem", "hom_ext", ["universal_enveloping_algebra"]], ["add", "def", "lift", ["universal_enveloping_algebra"]], ["add", "theorem", "lift_unique", ["universal_enveloping_algebra"]], ["add", "theorem", "lift_ι_apply", ["universal_enveloping_algebra"]], ["add", "def", "mk_alg_hom", ["universal_enveloping_algebra"]], ["add", "inductive", "rel", ["universal_enveloping_algebra"]], ["add", "def", "ι", ["universal_enveloping_algebra"]], ["add", "theorem", "ι_comp_lift", ["universal_enveloping_algebra"]], ["add", "def", "universal_enveloping_algebra", []]]}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1601142797, "sha": "3ebee15f", "message": "feat(src/data/polynomial/ring_division.lean): eq_zero_of_infinite_is_root (#4280)\nadd a lemma stating that a polynomial is zero if it has infinitely many roots.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "eq_of_infinite_eval_eq", ["polynomial"]], ["add", "theorem", "eq_zero_of_infinite_is_root", ["polynomial"]]]}]}, {"timestamp": 1601142795, "sha": "376ab30f", "message": "feat(data/nat/unique_factorization): a `unique_factorization_monoid` instance on N (#4194)\nProvides a `unique_factorization_monoid` instance on `nat`\nShows its equivalence to `nat.factors`, which is list-valued", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "associated_eq_eq", []], ["add", "theorem", "associated_iff_eq", []]]}, {"oldPath": null, "newPath": "src/data/nat/associated.lean", "changes": [["add", "theorem", "irreducible_iff_prime", ["nat"]], ["add", "theorem", "prime_iff", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/unique_factorization.lean", "changes": [["add", "theorem", "factors_eq", ["nat"]]]}]}, {"timestamp": 1601135359, "sha": "88e198a1", "message": "feat(data/multiset): count repeat lemma (#4278)\nA small lemma and renaming (of `count_repeat` to `count_repeat_self`) to count elements in a `multiset.repeat`. One part of #4259.", "changes": [{"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "count_repeat", ["multiset"]], ["add", "theorem", "count_repeat_self", ["multiset"]]]}]}, {"timestamp": 1601135356, "sha": "8e838058", "message": "chore(analysis/special_functions/pow): +2 lemmas about `nnreal.rpow` (#4272)\n`λ x, x^y` is continuous in more cases than `λ p, p.1^p.2`.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "continuous_at_rpow_const", ["nnreal"]], ["add", "theorem", "continuous_rpow_const", ["nnreal"]]]}]}, {"timestamp": 1601135354, "sha": "31774933", "message": "feat(ring_theory/algebra, algebra/module): Add add_comm_monoid_to_add_comm_group and semiring_to_ring (#4252)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "def", "add_comm_monoid_to_add_comm_group", ["semimodule"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "mul_sub_algebra_map_commutes", ["algebra"]], ["mod", "theorem", "mul_sub_algebra_map_pow_commutes", ["algebra"]], ["add", "def", "semiring_to_ring", ["algebra"]]]}]}, {"timestamp": 1601135353, "sha": "7c0c16ca", "message": "feat(data/list/basic): Add lemmas about inits and tails (#4222)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "inits_append", ["list"]], ["add", "theorem", "inits_cons", ["list"]], ["add", "theorem", "inits_eq_tails", ["list"]], ["add", "theorem", "inits_reverse", ["list"]], ["add", "theorem", "map_reverse_inits", ["list"]], ["add", "theorem", "map_reverse_tails", ["list"]], ["add", "theorem", "reverse_involutive", ["list"]], ["add", "theorem", "tails_append", ["list"]], ["add", "theorem", "tails_cons", ["list"]], ["add", "theorem", "tails_eq_inits", ["list"]], ["add", "theorem", "tails_reverse", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "mem_zip_inits_tails", ["list"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "comp_self", ["function", "involutive"]]]}]}, {"timestamp": 1601128670, "sha": "bc3a6cfa", "message": "chore(data/list/basic): Make it clear that `forall_mem_cons` and `ball_cons` are synonyms (#4279)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "forall_mem_cons", ["list"]]]}]}, {"timestamp": 1601122326, "sha": "9b09f906", "message": "feat(ennreal): some lemmas about ennreal (#4262)\nAlso some lemmas about norms in (e)nnreal.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "def", "nnnorm", []], ["add", "theorem", "ennnorm_eq_of_real", ["real"]], ["add", "theorem", "nnnorm_coe_eq_self", ["real"]], ["add", "theorem", "nnnorm_of_nonneg", ["real"]], ["add", "theorem", "norm_of_nonneg", ["real"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "mul_lt_top_iff", ["ennreal"]], ["add", "theorem", "of_real_le_of_le_to_real", ["ennreal"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "continuous_coe", ["ennreal"]], ["add", "theorem", "continuous_coe_iff", ["ennreal"]]]}]}, {"timestamp": 1601115374, "sha": "280a42e1", "message": "chore(topology/instances/nnreal): reuse `order_topology_of_ord_connected` (#4277)", "changes": [{"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1601115372, "sha": "b8b6f5dd", "message": "chore(order/filter/archimedean): move&generalize a few lemmas (#4275)\n* `tendsto_coe_nat_real_at_top_iff`: `tendsto_coe_nat_at_top_iff`,\n generalize to a linear ordered archimedean semiring;\n* `tendsto_coe_nat_real_at_top_at_top`: `tendsto_coe_nat_at_top_at_top`,\n generalize to a linear ordered archimedean semiring;\n* `tendsto_coe_int_real_at_top_iff`: `tendsto_coe_int_at_top_iff`,\n generalize to a linear ordered archimedean ring;\n* `tendsto_coe_int_real_at_top_at_top`: `tendsto_coe_int_at_top_at_top`,\n generalize to a linear ordered archimedean ring;\n* add versions for `ℚ`;\n* golf the proof of `tendsto_at_top_embedding`.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "exists_nat_ge", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/filter/archimedean.lean", "changes": [["add", "theorem", "tendsto_coe_int_at_top_at_top", []], ["add", "theorem", "tendsto_coe_int_at_top_iff", []], ["add", "theorem", "tendsto_coe_nat_at_top_at_top", []], ["add", "theorem", "tendsto_coe_nat_at_top_iff", []], ["add", "theorem", "tendsto_coe_rat_at_top_iff", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "tendsto_coe_int_real_at_top_at_top", []], ["del", "theorem", "tendsto_coe_int_real_at_top_iff", []], ["del", "theorem", "tendsto_coe_nat_real_at_top_at_top", []], ["del", "theorem", "tendsto_coe_nat_real_at_top_iff", []]]}]}, {"timestamp": 1601115370, "sha": "aa11589a", "message": "feat(algebra/homology, category_theory/abelian): expand API on exactness (#4256)", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["del", "theorem", "w_assoc", ["category_theory", "exact"]], ["add", "theorem", "exact_comp_hom_inv_comp", ["category_theory"]], ["add", "theorem", "exact_comp_hom_inv_comp_iff", ["category_theory"]], ["add", "theorem", "exact_comp_mono", ["category_theory"]], ["add", "theorem", "exact_epi_comp", ["category_theory"]], ["add", "theorem", "exact_kernel", ["category_theory"]], ["add", "theorem", "exact_zero_left_of_mono", ["category_theory"]], ["add", "theorem", "kernel_ι_eq_zero_of_exact_zero_left", ["category_theory"]]]}, {"oldPath": "src/algebra/homology/image_to_kernel_map.lean", "newPath": "src/algebra/homology/image_to_kernel_map.lean", "changes": [["add", "theorem", "image_to_kernel_map_comp_hom_inv_comp", ["category_theory"]], ["add", "theorem", "image_to_kernel_map_comp_left", ["category_theory"]], ["add", "theorem", "image_to_kernel_map_comp_right", ["category_theory"]], ["mod", "theorem", "image_to_kernel_map_epi_of_epi_of_zero", ["category_theory"]], ["mod", "theorem", "image_to_kernel_map_epi_of_zero_of_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "theorem", "epi_of_cokernel_π_eq_zero", ["category_theory", "abelian"]], ["add", "theorem", "epi_of_zero_cokernel", ["category_theory", "abelian"]], ["add", "theorem", "mono_of_kernel_ι_eq_zero", ["category_theory", "abelian"]], ["add", "theorem", "mono_of_zero_kernel", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "epi_iff_cokernel_π_eq_zero", ["category_theory", "abelian"]], ["add", "theorem", "epi_iff_exact_zero_right", ["category_theory", "abelian"]], ["add", "theorem", "exact_cokernel", ["category_theory", "abelian"]], ["add", "theorem", "mono_iff_exact_zero_left", ["category_theory", "abelian"]], ["add", "theorem", "mono_iff_kernel_ι_eq_zero", ["category_theory", "abelian"]], ["add", "theorem", "tfae_epi", ["category_theory", "abelian"]], ["add", "theorem", "tfae_mono", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "def", "post_comp_is_iso", ["category_theory", "limits", "image"]], ["add", "theorem", "post_comp_is_iso_hom_comp_image_ι", ["category_theory", "limits", "image"]], ["add", "theorem", "post_comp_is_iso_inv_comp_image_ι", ["category_theory", "limits", "image"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}]}, {"timestamp": 1601115368, "sha": "61897aef", "message": "feat(data/set/intervals/infinite): intervals are infinite (#4241)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "exists_maximal", ["finset"]], ["add", "theorem", "exists_minimal", ["finset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "nonempty", ["set", "finite", "to_finset"]], ["add", "theorem", "infinite_mono", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/intervals/infinite.lean", "changes": [["add", "theorem", "infinite", ["set", "Icc"]], ["add", "theorem", "infinite", ["set", "Ici"]], ["add", "theorem", "infinite", ["set", "Ico"]], ["add", "theorem", "infinite", ["set", "Iic"]], ["add", "theorem", "infinite", ["set", "Iio"]], ["add", "theorem", "infinite", ["set", "Ioc"]], ["add", "theorem", "infinite", ["set", "Ioi"]], ["add", "theorem", "infinite", ["set", "Ioo"]]]}]}, {"timestamp": 1601115366, "sha": "e3cc06e0", "message": "feat(algebraic_geometry/presheafed_space): gluing presheaves (#4198)\n#### `PresheafedSpace C` has colimits.\nIf `C` has limits, then the category `PresheafedSpace C` has colimits,\nand the forgetful functor to `Top` preserves these colimits.\nWhen restricted to a diagram where the underlying continuous maps are open embeddings,\nthis says that we can glue presheaved spaces.\nGiven a diagram `F : J ⥤ PresheafedSpace C`,\nwe first build the colimit of the underlying topological spaces,\nas `colimit (F ⋙ PresheafedSpace.forget C)`. Call that colimit space `X`.\nOur strategy is to push each of the presheaves `F.obj j`\nforward along the continuous map `colimit.ι (F ⋙ PresheafedSpace.forget C) j` to `X`.\nSince pushforward is functorial, we obtain a diagram `J ⥤ (presheaf C X)ᵒᵖ`\nof presheaves on a single space `X`.\n(Note that the arrows now point the other direction,\nbecause this is the way `PresheafedSpace C` is set up.)\nThe limit of this diagram then constitutes the colimit presheaf.", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["mod", "def", "comp", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "congr_app", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/presheafed_space/has_colimits.lean", "changes": [["add", "def", "colimit", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "colimit_cocone", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "desc_c_app", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["add", "theorem", "desc_c_naturality", ["algebraic_geometry", "PresheafedSpace", "colimit_cocone_is_colimit"]], ["add", "def", "colimit_cocone_is_colimit", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "map_comp_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "map_id_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "pushforward_diagram_to_colimit", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "eq_to_hom_unop", ["category_theory"]], ["add", "theorem", "congr", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": [["add", "theorem", "congr", ["category_theory", "grothendieck"]], ["add", "theorem", "id_fiber'", ["category_theory", "grothendieck"]]]}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["add", "theorem", "ι_desc_app", ["category_theory", "limits", "colimit"]], ["add", "theorem", "colimit_obj_ext", ["category_theory", "limits"]], ["add", "def", "colimit_obj_iso_colimit_comp_evaluation", ["category_theory", "limits"]], ["add", "theorem", "colimit_obj_iso_colimit_comp_evaluation_ι_app_hom", ["category_theory", "limits"]], ["add", "theorem", "colimit_obj_iso_colimit_comp_evaluation_ι_inv", ["category_theory", "limits"]], ["add", "theorem", "lift_π_app", ["category_theory", "limits", "limit"]], ["add", "theorem", "limit_obj_ext", ["category_theory", "limits"]], ["add", "def", "limit_obj_iso_limit_comp_evaluation", ["category_theory", "limits"]], ["add", "theorem", "limit_obj_iso_limit_comp_evaluation_hom_π", ["category_theory", "limits"]], ["add", "theorem", "limit_obj_iso_limit_comp_evaluation_inv_π_app", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "desc_cocone", ["category_theory", "limits", "colimit"]], ["add", "theorem", "lift_cone", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "w_apply", ["category_theory", "limits", "types", "colimit"]], ["add", "theorem", "ι_desc_apply", ["category_theory", "limits", "types", "colimit"]], ["add", "theorem", "ι_map_apply", ["category_theory", "limits", "types", "colimit"]], ["del", "theorem", "colimit_w_apply", ["category_theory", "limits", "types"]], ["del", "theorem", "lift_π_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "lift_π_apply", ["category_theory", "limits", "types", "limit"]], ["add", "theorem", "map_π_apply", ["category_theory", "limits", "types", "limit"]], ["add", "theorem", "w_apply", ["category_theory", "limits", "types", "limit"]], ["del", "theorem", "limit_w_apply", ["category_theory", "limits", "types"]], ["del", "theorem", "map_π_apply", ["category_theory", "limits", "types"]], ["del", "theorem", "ι_desc_apply", ["category_theory", "limits", "types"]], ["del", "theorem", "ι_map_apply", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "theorem", "map_comp_map", ["topological_space", "opens"]]]}, {"oldPath": null, "newPath": "src/topology/sheaves/limits.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["del", "def", "pushforward", ["Top", "presheaf"]], ["add", "theorem", "pushforward_eq_hom_app", ["Top", "presheaf"]], ["add", "theorem", "pushforward_eq_rfl", ["Top", "presheaf"]], ["add", "def", "pushforward_map", ["Top", "presheaf"]], ["add", "def", "pushforward_obj", ["Top", "presheaf"]], ["add", "theorem", "pushforward_obj_map", ["Top", "presheaf"]], ["add", "theorem", "pushforward_obj_obj", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1601107130, "sha": "c2f896fe", "message": "feat(data/set): add some lemmas (#4263)\nSome lemmas about sets, mostly involving disjointness\nI also sneaked in the lemma `(λ x : α, y) = const α y` which is useful to rewrite with.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_swap_prod", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "preimage", ["disjoint"]], ["add", "theorem", "union_left", ["disjoint"]], ["add", "theorem", "union_right", ["disjoint"]], ["del", "theorem", "preimage", ["set", "disjoint"]], ["del", "theorem", "union_left", ["set", "disjoint"]], ["del", "theorem", "union_right", ["set", "disjoint"]], ["mod", "theorem", "disjoint_iff_inter_eq_empty", ["set"]], ["mod", "theorem", "disjoint_left", ["set"]], ["mod", "theorem", "disjoint_of_subset_left", ["set"]], ["mod", "theorem", "disjoint_of_subset_right", ["set"]], ["mod", "theorem", "disjoint_right", ["set"]], ["mod", "theorem", "disjoint_singleton_left", ["set"]], ["mod", "theorem", "disjoint_singleton_right", ["set"]], ["mod", "theorem", "disjoint_union_left", ["set"]], ["mod", "theorem", "disjoint_union_right", ["set"]], ["add", "theorem", "disjoint_univ", ["set"]], ["mod", "theorem", "not_disjoint_iff", ["set"]], ["add", "theorem", "preimage_eq_empty", ["set"]], ["add", "theorem", "preimage_eq_empty_iff", ["set"]], ["add", "theorem", "univ_disjoint", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "const_def", ["function"]]]}]}, {"timestamp": 1601107128, "sha": "18927246", "message": "feat(data/matrix): definition of `block_diagonal` (#4257)\nThis PR defines `matrix.block_diagonal : (o -> matrix m n R) -> matrix (m × o) (n × o) R`. The choice to put `o` on the right hand side of the product will help with relating this to `is_basis.smul`, but it won't be a huge hassle to write `matrix (o × m) (o × m) R` instead if you prefer.\nI also tried making `m` and `n` depend on `o`, giving `block_diagonal M : matrix (Σ k : o, m k) (Σ k : o, n k) R`, but that turned out to be a shotcut to `eq.rec` hell.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_product_univ", ["finset"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "block_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal_add", ["matrix"]], ["add", "theorem", "block_diagonal_apply", ["matrix"]], ["add", "theorem", "block_diagonal_apply_eq", ["matrix"]], ["add", "theorem", "block_diagonal_apply_ne", ["matrix"]], ["add", "theorem", "block_diagonal_diagonal", ["matrix"]], ["add", "theorem", "block_diagonal_mul", ["matrix"]], ["add", "theorem", "block_diagonal_neg", ["matrix"]], ["add", "theorem", "block_diagonal_one", ["matrix"]], ["add", "theorem", "block_diagonal_smul", ["matrix"]], ["add", "theorem", "block_diagonal_sub", ["matrix"]], ["add", "theorem", "block_diagonal_transpose", ["matrix"]], ["add", "theorem", "block_diagonal_zero", ["matrix"]]]}]}, {"timestamp": 1601100585, "sha": "7aef1505", "message": "feat(category_theory): sieves (#3909)\nDefine sieves, from my topos project. Co-authored by @EdAyers. \nThese definitions and lemmas have been battle-tested quite a bit so I'm reasonably confident they're workable.", "changes": [{"oldPath": null, "newPath": "src/category_theory/sites/sieves.lean", "changes": [["add", "theorem", "arrows_ext", ["category_theory", "sieve"]], ["add", "def", "functor", ["category_theory", "sieve"]], ["add", "def", "functor_inclusion", ["category_theory", "sieve"]], ["add", "def", "galois_coinsertion_of_mono", ["category_theory", "sieve"]], ["add", "theorem", "galois_connection", ["category_theory", "sieve"]], ["add", "def", "galois_insertion_of_split_epi", ["category_theory", "sieve"]], ["add", "def", "generate", ["category_theory", "sieve"]], ["add", "inductive", "generate_sets", ["category_theory", "sieve"]], ["add", "def", "gi_generate", ["category_theory", "sieve"]], ["add", "theorem", "id_mem_iff_eq_top", ["category_theory", "sieve"]], ["add", "theorem", "le_pushforward_pullback", ["category_theory", "sieve"]], ["add", "theorem", "mem_Inf", ["category_theory", "sieve"]], ["add", "theorem", "mem_Sup", ["category_theory", "sieve"]], ["add", "theorem", "mem_inter", ["category_theory", "sieve"]], ["add", "theorem", "mem_pullback", ["category_theory", "sieve"]], ["add", "theorem", "mem_pushforward_of_comp", ["category_theory", "sieve"]], ["add", "theorem", "mem_top", ["category_theory", "sieve"]], ["add", "theorem", "mem_union", ["category_theory", "sieve"]], ["add", "def", "nat_trans_of_le", ["category_theory", "sieve"]], ["add", "theorem", "nat_trans_of_le_comm", ["category_theory", "sieve"]], ["add", "def", "pullback", ["category_theory", "sieve"]], ["add", "theorem", "pullback_comp", ["category_theory", "sieve"]], ["add", "theorem", "pullback_eq_top_iff_mem", ["category_theory", "sieve"]], ["add", "theorem", "pullback_inter", ["category_theory", "sieve"]], ["add", "theorem", "pullback_monotone", ["category_theory", "sieve"]], ["add", "theorem", "pullback_pushforward_le", ["category_theory", "sieve"]], ["add", "theorem", "pullback_top", ["category_theory", "sieve"]], ["add", "def", "pushforward", ["category_theory", "sieve"]], ["add", "theorem", "pushforward_comp", ["category_theory", "sieve"]], ["add", "theorem", "pushforward_monotone", ["category_theory", "sieve"]], ["add", "theorem", "pushforward_union", ["category_theory", "sieve"]], ["add", "def", "set_over", ["category_theory", "sieve"]], ["add", "theorem", "sets_iff_generate", ["category_theory", "sieve"]], ["add", "structure", "sieve", ["category_theory"]]]}]}, {"timestamp": 1601087468, "sha": "6289adfc", "message": "fix(order/bounded_lattice): fix some misleading theorem names (#4271)", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_lt_top", ["with_top"]], ["add", "theorem", "le_none", ["with_top"]], ["del", "theorem", "none_le", ["with_top"]], ["del", "theorem", "none_lt_some", ["with_top"]], ["add", "theorem", "some_lt_none", ["with_top"]]]}]}, {"timestamp": 1601084964, "sha": "d76f19f3", "message": "feat(overview): expand measure theory (#4258)", "changes": [{"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}]}, {"timestamp": 1601081884, "sha": "4b3570f3", "message": "chore(scripts): update nolints.txt (#4270)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1601061325, "sha": "85bbf8a5", "message": "feat(data/fin): `zero_eq_one_iff` and `one_eq_zero_iff` (#4255)\nJust a pair of little lemmas that were handy to me. The main benefit is that `simp` can now prove `if (0 : fin 2) = 1 then 1 else 0 = 0`, which should help with calculations using `data.matrix.notation`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "one_eq_zero_iff", ["fin"]], ["add", "theorem", "zero_eq_one_iff", ["fin"]]]}]}, {"timestamp": 1601053077, "sha": "3a591e8b", "message": "chore(data/list/defs): mark pairwise.nil simp to match chain.nil (#4254)", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}]}, {"timestamp": 1601053075, "sha": "5e8d5274", "message": "feat(ring_theory/witt_vector/witt_polynomial): definition and basic properties (#4236)\nFrom the Witt vector project\nThis is the first of a dozen of files on Witt vectors. This file contains\nthe definition of the so-called Witt polynomials.\nFollow-up PRs will contain:\n* An important structural result on the Witt polynomials\n* The definition of the ring of Witt vectors (including the ring structure)\n* Several common operations on Witt vectors\n* Identities between thes operations\n* A comparison isomorphism between the ring of Witt vectors over F_p and\nthe ring of p-adic integers Z_p.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "commute_inv_of", []], ["del", "def", "invertible_inv_of", []]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["mod", "theorem", "vars_X", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/witt_vector/witt_polynomial.lean", "changes": [["add", "theorem", "X_in_terms_of_W_aux", []], ["add", "theorem", "X_in_terms_of_W_eq", []], ["add", "theorem", "X_in_terms_of_W_vars_aux", []], ["add", "theorem", "X_in_terms_of_W_vars_subset", []], ["add", "theorem", "X_in_terms_of_W_zero", []], ["add", "theorem", "aeval_witt_polynomial", []], ["add", "theorem", "bind₁_X_in_terms_of_W_witt_polynomial", []], ["add", "theorem", "bind₁_witt_polynomial_X_in_terms_of_W", []], ["add", "theorem", "constant_coeff_X_in_terms_of_W", []], ["add", "theorem", "constant_coeff_witt_polynomial", []], ["add", "theorem", "map_witt_polynomial", []], ["add", "theorem", "witt_polynomial_eq_sum_C_mul_X_pow", []], ["add", "theorem", "witt_polynomial_one", []], ["add", "theorem", "witt_polynomial_vars", []], ["add", "theorem", "witt_polynomial_vars_subset", []], ["add", "theorem", "witt_polynomial_zero", []], ["add", "theorem", "witt_polynomial_zmod_self", []]]}]}, {"timestamp": 1601045638, "sha": "565efec2", "message": "chore(data/real/ennreal): 3 lemmas stating `∞ / b = ∞` (#4248)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "top_div_coe", ["ennreal"]], ["add", "theorem", "top_div_of_lt_top", ["ennreal"]], ["add", "theorem", "top_div_of_ne_top", ["ennreal"]]]}]}, {"timestamp": 1601045636, "sha": "10299743", "message": "feat(*): finite rings with char = card = n are isomorphic to zmod n (#4234)\nFrom the Witt vector project\nI've made use of the opportunity to remove some unused arguments,\nand to clean up some code by using namespacing and such.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "cast_card_eq_zero", ["char_p"]], ["add", "theorem", "char_p_of_ne_zero", []], ["add", "theorem", "char_p_of_prime_pow_injective", []]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_ring_hom_inj_iff", ["ring_equiv"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "eq_univ_of_card", ["finset"]], ["add", "theorem", "bijective_iff_injective_and_card", ["fintype"]], ["add", "theorem", "bijective_iff_surjective_and_card", ["fintype"]], ["mod", "theorem", "card_eq_one_iff", ["fintype"]], ["mod", "def", "card_eq_zero_equiv_equiv_pempty", ["fintype"]], ["mod", "theorem", "card_eq_zero_iff", ["fintype"]], ["mod", "theorem", "card_le_of_injective", ["fintype"]], ["mod", "theorem", "card_le_one_iff", ["fintype"]], ["mod", "theorem", "card_le_one_iff_subsingleton", ["fintype"]], ["mod", "theorem", "card_pos_iff", ["fintype"]], ["mod", "theorem", "exists_ne_of_one_lt_card", ["fintype"]], ["mod", "theorem", "exists_pair_of_one_lt_card", ["fintype"]], ["mod", "theorem", "injective_iff_bijective", ["fintype"]], ["mod", "theorem", "injective_iff_surjective", ["fintype"]], ["mod", "theorem", "injective_iff_surjective_of_equiv", ["fintype"]], ["add", "theorem", "nonempty_equiv_of_card_eq", ["fintype"]], ["mod", "theorem", "one_lt_card_iff_nontrivial", ["fintype"]], ["mod", "theorem", "surjective_iff_bijective", ["fintype"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_hom_bijective", ["zmod"]], ["add", "theorem", "cast_hom_injective", ["zmod"]], ["mod", "theorem", "ring_hom_eq_of_ker_eq", ["zmod"]], ["mod", "theorem", "ring_hom_surjective", ["zmod"]]]}]}, {"timestamp": 1601045634, "sha": "aee16bd6", "message": "feat(data/mv_polynomial/basic): counit (#4205)\nFrom the Witt vector project", "changes": [{"oldPath": null, "newPath": "src/data/mv_polynomial/counit.lean", "changes": [["add", "theorem", "acounit_C", ["mv_polynomial"]], ["add", "theorem", "acounit_X", ["mv_polynomial"]], ["add", "theorem", "acounit_surjective", ["mv_polynomial"]], ["add", "theorem", "counit_C", ["mv_polynomial"]], ["add", "theorem", "counit_X", ["mv_polynomial"]], ["add", "theorem", "counit_nat_C", ["mv_polynomial"]], ["add", "theorem", "counit_nat_X", ["mv_polynomial"]], ["add", "theorem", "counit_nat_surjective", ["mv_polynomial"]], ["add", "theorem", "counit_surjective", ["mv_polynomial"]]]}]}, {"timestamp": 1601045632, "sha": "5deb96d5", "message": "feat(data/mv_polynomial/funext): function extensionality for polynomials (#4196)\nover infinite integral domains", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "trans_apply", ["ring_equiv"]]]}, {"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "theorem", "C_inj", ["mv_polynomial"]], ["mod", "theorem", "C_injective", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "theorem", "fin_succ_equiv_apply", ["mv_polynomial"]], ["add", "theorem", "fin_succ_equiv_eq", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/funext.lean", "changes": [["add", "theorem", "funext", ["mv_polynomial"]], ["add", "theorem", "funext_iff", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "funext", ["polynomial"]], ["add", "theorem", "zero_of_eval_zero", ["polynomial"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "def", "extend", ["function"]], ["add", "theorem", "extend_apply", ["function"]], ["add", "theorem", "extend_comp", ["function"]], ["add", "theorem", "extend_def", ["function"]]]}]}, {"timestamp": 1601038460, "sha": "680f8771", "message": "feat(data/rat/basic): coe_int_div, coe_nat_div (#4233)\nSnippet from the Witt project", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "coe_int_div", ["rat"]], ["add", "theorem", "coe_int_div_self", ["rat"]], ["add", "theorem", "coe_nat_div", ["rat"]], ["add", "theorem", "coe_nat_div_self", ["rat"]]]}]}, {"timestamp": 1601038458, "sha": "9591d437", "message": "feat(data/*): lemmas on division of polynomials by constant polynomials (#4206)\nFrom the Witt vector project\nWe provide a specialized version for polynomials over zmod n,\nwhich turns out to be convenient in practice.\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "C_dvd_iff_dvd_coeff", ["mv_polynomial"]], ["add", "theorem", "C_dvd_iff_map_hom_eq_zero", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/zmod/polynomial.lean", "changes": [["add", "theorem", "C_dvd_iff_zmod", ["mv_polynomial"]]]}]}, {"timestamp": 1601038456, "sha": "c7d818cd", "message": "feat(data/mv_polynomial/variables): vars_bind₁ and friends (#4204)\nFrom the Witt vector project\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["del", "theorem", "total_degree_rename_le", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["mod", "theorem", "aeval_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["add", "theorem", "degrees_rename", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_congr'", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["add", "theorem", "total_degree_rename_le", ["mv_polynomial"]], ["mod", "theorem", "vars_C", ["mv_polynomial"]], ["add", "theorem", "vars_bind₁", ["mv_polynomial"]], ["mod", "theorem", "vars_monomial", ["mv_polynomial"]], ["add", "theorem", "vars_rename", ["mv_polynomial"]]]}]}, {"timestamp": 1601028436, "sha": "2313602e", "message": "feat(order/bounded_lattice): custom recursors for with_bot/with_top (#4245)", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "def", "rec_bot_coe", ["with_bot"]], ["add", "def", "rec_top_coe", ["with_top"]]]}]}, {"timestamp": 1601028434, "sha": "f43bd45e", "message": "fix(tactic/lint/simp): only head-beta reduce, don't whnf (#4237)\nThis is necessary to accept simp lemmas like `injective reverse`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "ne_empty_of_mem", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "cons_injective", ["list"]], ["mod", "theorem", "length_injective", ["list"]], ["mod", "theorem", "length_injective_iff", ["list"]], ["mod", "theorem", "reverse_injective", ["list"]]]}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}, {"oldPath": "test/lint_simp_var_head.lean", "newPath": "test/lint_simp_var_head.lean", "changes": []}]}, {"timestamp": 1601028432, "sha": "5da451b4", "message": "feat(data/mv_polynomial/expand): replace variables by a power (#4197)\nFrom the Witt vectors project.", "changes": [{"oldPath": null, "newPath": "src/data/mv_polynomial/expand.lean", "changes": [["add", "theorem", "expand_C", ["mv_polynomial"]], ["add", "theorem", "expand_X", ["mv_polynomial"]], ["add", "theorem", "expand_bind₁", ["mv_polynomial"]], ["add", "theorem", "expand_comp_bind₁", ["mv_polynomial"]], ["add", "theorem", "expand_monomial", ["mv_polynomial"]], ["add", "theorem", "expand_one", ["mv_polynomial"]], ["add", "theorem", "expand_one_apply", ["mv_polynomial"]], ["add", "theorem", "map_expand", ["mv_polynomial"]], ["add", "theorem", "rename_comp_expand", ["mv_polynomial"]], ["add", "theorem", "rename_expand", ["mv_polynomial"]]]}]}, {"timestamp": 1601024827, "sha": "b6154d90", "message": "feat(category_theory/limits): small lemmas (#4251)", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "iso_limit_cone", ["category_theory", "limits", "limit"]], ["add", "theorem", "iso_limit_cone_hom_π", ["category_theory", "limits", "limit"]], ["add", "theorem", "iso_limit_cone_inv_π", ["category_theory", "limits", "limit"]], ["add", "theorem", "pre_eq", ["category_theory", "limits", "limit"]]]}]}, {"timestamp": 1601022076, "sha": "40f13709", "message": "chore(measure_theory/bochner_integration): rename/add lemmas, fix docstring (#4249)\n* add `integral_nonneg` assuming `0 ≤ f`;\n* rename `integral_nonpos_of_nonpos_ae` to `integral_nonpos_of_ae`;\n* add `integral_nonpos` assuming `f ≤ 0`;\n* rename `integral_mono` to `integral_mono_ae`;\n* add `integral_mono` assuming `f ≤ g`;\n* (partially?) fix module docstring.", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_mono", ["measure_theory"]], ["add", "theorem", "integral_mono_ae", ["measure_theory"]], ["add", "theorem", "integral_nonneg", ["measure_theory"]], ["add", "theorem", "integral_nonpos", ["measure_theory"]], ["add", "theorem", "integral_nonpos_of_ae", ["measure_theory"]], ["del", "theorem", "integral_nonpos_of_nonpos_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}]}, {"timestamp": 1601017040, "sha": "143c074c", "message": "feat(category_theory/cofinal): cofinal functors (#4218)", "changes": [{"oldPath": "src/category_theory/is_connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["add", "theorem", "is_preconnected_induction", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/cofinal.lean", "changes": [["add", "def", "cocones_equiv", ["category_theory", "cofinal"]], ["add", "def", "colimit_cocone_comp", ["category_theory", "cofinal"]], ["add", "theorem", "colimit_cocone_comp_aux", ["category_theory", "cofinal"]], ["add", "def", "colimit_cocone_of_comp", ["category_theory", "cofinal"]], ["add", "def", "colimit_iso'", ["category_theory", "cofinal"]], ["add", "def", "colimit_iso", ["category_theory", "cofinal"]], ["add", "theorem", "colimit_pre_is_iso_aux", ["category_theory", "cofinal"]], ["add", "def", "extend_cocone", ["category_theory", "cofinal"]], ["add", "theorem", "has_colimit_of_comp", ["category_theory", "cofinal"]], ["add", "def", "hom_to_lift", ["category_theory", "cofinal"]], ["add", "theorem", "induction", ["category_theory", "cofinal"]], ["add", "def", "is_colimit_extend_cocone_equiv", ["category_theory", "cofinal"]], ["add", "def", "is_colimit_whisker_equiv", ["category_theory", "cofinal"]], ["add", "def", "lift", ["category_theory", "cofinal"]], ["add", "def", "cofinal", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "iso_colimit_cocone", ["category_theory", "limits", "colimit"]], ["add", "theorem", "iso_colimit_cocone_ι_hom", ["category_theory", "limits", "colimit"]], ["add", "theorem", "iso_colimit_cocone_ι_inv", ["category_theory", "limits", "colimit"]], ["add", "theorem", "pre_eq", ["category_theory", "limits", "colimit"]], ["add", "theorem", "of_cocone_equiv_apply_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "of_cocone_equiv_symm_apply_desc", ["category_theory", "limits", "is_colimit"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["mod", "def", "over", ["category_theory"]], ["mod", "def", "under", ["category_theory"]]]}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": [["mod", "def", "from_punit", ["category_theory", "functor"]]]}]}, {"timestamp": 1601012765, "sha": "dda82fcd", "message": "chore(*): add missing copyright, cleanup imports (#4229)\nAdd missing copyright, avoid use of `import tactic`, and put each `import` statement on a separate line, for easier analysis via grep.", "changes": [{"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/83_friendship_graphs.lean", "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": []}, {"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/trailing_degree.lean", "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": []}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/ring_theory/derivation.lean", "newPath": "src/ring_theory/derivation.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/tactic/derive_fintype.lean", "newPath": "src/tactic/derive_fintype.lean", "changes": []}, {"oldPath": "test/tauto.lean", "newPath": "test/tauto.lean", "changes": []}, {"oldPath": "test/unfold_cases.lean", "newPath": "test/unfold_cases.lean", "changes": []}]}, {"timestamp": 1600992724, "sha": "f9a667d3", "message": "refactor(algebra/group_power, data/nat/basic): remove redundant lemmas (#4243)\nThis removes lemmas about `pow` on `nat` which are redundant\nwith more general versions in the root namespace.\nOne notable removal is `nat.pow_succ`; use `pow_succ'` instead.\nIn order that the general versions are available already in `data.nat.basic`,\nmany lemmas from `algebra.group_power.lemmas` have been moved to\n`algebra.group_power.basic` (basically as many as possible without adding imports).", "changes": [{"oldPath": "archive/imo/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/miu_language/decision_suf.lean", "newPath": "archive/miu_language/decision_suf.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["del", "theorem", "prod_nat_pow", ["finset"]]]}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/group_power/basic.lean", "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "abs_neg_one_pow", []], ["add", "theorem", "map_nsmul", ["add_monoid_hom"]], ["add", "theorem", "bit0_nsmul", []], ["add", "theorem", "bit1_nsmul", []], ["add", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_le_one", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_pos", ["canonically_ordered_semiring"]], ["add", "theorem", "gpow_gpow", ["commute"]], ["add", "theorem", "gpow_gpow_self", ["commute"]], ["add", "theorem", "gpow_left", ["commute"]], ["add", "theorem", "gpow_right", ["commute"]], ["add", "theorem", "gpow_self", ["commute"]], ["add", "theorem", "mul_gpow", ["commute"]], ["add", "theorem", "mul_pow", ["commute"]], ["add", "theorem", "self_gpow", ["commute"]], ["add", "theorem", "dvd_pow", []], ["add", "theorem", "eq_or_eq_neg_of_pow_two_eq_pow_two", []], ["add", "theorem", "gpow_coe_nat", []], ["add", "theorem", "gpow_neg", []], ["add", "theorem", "gpow_neg_one", []], ["add", "theorem", "gpow_neg_succ_of_nat", []], ["add", "theorem", "gpow_of_nat", []], ["add", "theorem", "gpow_one", []], ["add", "theorem", "gpow_zero", []], ["add", "theorem", "gsmul_add", []], ["add", "theorem", "gsmul_coe_nat", []], ["add", "theorem", "gsmul_neg", []], ["add", "theorem", "gsmul_neg_succ_of_nat", []], ["add", "theorem", "gsmul_of_nat", []], ["add", "theorem", "gsmul_sub", []], ["add", "theorem", "gsmul_zero", []], ["add", "theorem", "inv_gpow", []], ["add", "theorem", "inv_pow", []], ["add", "theorem", "map_nsmul", ["is_add_monoid_hom"]], ["add", "theorem", "map_pow", ["is_monoid_hom"]], ["add", "theorem", "ite_pow", []], ["add", "theorem", "lt_of_pow_lt_pow", []], ["add", "theorem", "map_pow", ["monoid_hom"]], ["add", "theorem", "mul_gpow", []], ["add", "theorem", "mul_gpow_neg_one", []], ["add", "theorem", "mul_nsmul'", []], ["add", "theorem", "mul_nsmul", []], ["add", "theorem", "mul_pow", []], ["add", "theorem", "neg_gsmul", []], ["add", "theorem", "neg_nsmul", []], ["add", "theorem", "neg_one_gsmul", []], ["add", "theorem", "neg_one_pow_eq_or", []], ["add", "theorem", "neg_pow", []], ["add", "theorem", "neg_square", []], ["add", "theorem", "nsmul_add", []], ["add", "theorem", "nsmul_add_comm", []], ["add", "theorem", "nsmul_add_sub_nsmul", []], ["add", "theorem", "nsmul_le_nsmul", []], ["add", "theorem", "nsmul_le_nsmul_of_le_right", []], ["add", "theorem", "nsmul_neg_comm", []], ["add", "theorem", "nsmul_nonneg", []], ["add", "theorem", "nsmul_sub", []], ["add", "theorem", "nsmul_zero", []], ["add", "theorem", "of_add_gsmul", []], ["add", "theorem", "of_add_nsmul", []], ["add", "theorem", "one_gpow", []], ["add", "theorem", "one_gsmul", []], ["add", "theorem", "one_le_pow_of_one_le", []], ["add", "theorem", "one_nsmul", []], ["add", "theorem", "one_pow", []], ["add", "theorem", "pow_abs", []], ["add", "theorem", "pow_bit0", []], ["add", "theorem", "pow_bit1", []], ["add", "theorem", "pow_boole", []], ["add", "theorem", "pow_dvd_pow", []], ["add", "theorem", "pow_dvd_pow_of_dvd", []], ["add", "theorem", "pow_eq_zero", []], ["add", "theorem", "pow_inv_comm", []], ["add", "theorem", "pow_ite", []], ["add", "theorem", "pow_le_pow", []], ["add", "theorem", "pow_le_pow_of_le_left", []], ["add", "theorem", "pow_left_inj", []], ["add", "theorem", "pow_lt_pow", []], ["add", "theorem", "pow_lt_pow_of_lt_left", []], ["add", "theorem", "pow_mul'", []], ["add", "theorem", "pow_mul", []], ["add", "theorem", "pow_mul_comm", []], ["add", "theorem", "pow_mul_pow_sub", []], ["add", "theorem", "pow_ne_zero", []], ["add", "theorem", "pow_nonneg", []], ["add", "theorem", "pow_one", []], ["add", "theorem", "pow_pos", []], ["add", "theorem", "pow_sub", []], ["add", "theorem", "pow_sub_mul_pow", []], ["add", "theorem", "pow_two_nonneg", []], ["add", "theorem", "pow_two_pos_of_ne_zero", []], ["add", "theorem", "pow_two_sub_pow_two", []], ["add", "theorem", "map_pow", ["ring_hom"]], ["add", "theorem", "gpow_right", ["semiconj_by"]], ["add", "theorem", "sq_sub_sq", []], ["add", "theorem", "sub_nsmul_nsmul_add", []], ["add", "theorem", "zero_gsmul", []], ["add", "theorem", "zero_pow", []]]}, {"oldPath": "src/algebra/group_power/lemmas.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "abs_neg_one_pow", []], ["del", "theorem", "map_nsmul", ["add_monoid_hom"]], ["del", "theorem", "bit0_nsmul", []], ["del", "theorem", "bit1_nsmul", []], ["del", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_le_one", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["del", "theorem", "pow_pos", ["canonically_ordered_semiring"]], ["del", "theorem", "gpow_gpow", ["commute"]], ["del", "theorem", "gpow_gpow_self", ["commute"]], ["del", "theorem", "gpow_left", ["commute"]], ["del", "theorem", "gpow_right", ["commute"]], ["del", "theorem", "gpow_self", ["commute"]], ["del", "theorem", "mul_gpow", ["commute"]], ["del", "theorem", "mul_pow", ["commute"]], ["del", "theorem", "self_gpow", ["commute"]], ["del", "theorem", "dvd_pow", []], ["del", "theorem", "eq_or_eq_neg_of_pow_two_eq_pow_two", []], ["del", "theorem", "gpow_coe_nat", []], ["del", "theorem", "gpow_neg", []], ["del", "theorem", "gpow_neg_one", []], ["del", "theorem", "gpow_neg_succ_of_nat", []], ["del", "theorem", "gpow_of_nat", []], ["del", "theorem", "gpow_one", []], ["del", "theorem", "gpow_zero", []], ["del", "theorem", "gsmul_add", []], ["del", "theorem", "gsmul_coe_nat", []], ["del", "theorem", "gsmul_neg", []], ["del", "theorem", "gsmul_neg_succ_of_nat", []], ["del", "theorem", "gsmul_of_nat", []], ["del", "theorem", "gsmul_sub", []], ["del", "theorem", "gsmul_zero", []], ["del", "theorem", "inv_gpow", []], ["del", "theorem", "inv_pow", []], ["del", "theorem", "map_nsmul", ["is_add_monoid_hom"]], ["del", "theorem", "map_pow", ["is_monoid_hom"]], ["del", "theorem", "ite_pow", []], ["del", "theorem", "lt_of_pow_lt_pow", []], ["del", "theorem", "map_pow", ["monoid_hom"]], ["del", "theorem", "mul_gpow", []], ["del", "theorem", "mul_gpow_neg_one", []], ["del", "theorem", "mul_nsmul'", []], ["del", "theorem", "mul_nsmul", []], ["del", "theorem", "mul_pow", []], ["del", "theorem", "neg_gsmul", []], ["del", "theorem", "neg_nsmul", []], ["del", "theorem", "neg_one_gsmul", []], ["del", "theorem", "neg_one_pow_eq_or", []], ["del", "theorem", "neg_pow", []], ["del", "theorem", "neg_square", []], ["del", "theorem", "nsmul_add", []], ["del", "theorem", "nsmul_add_comm", []], ["del", "theorem", "nsmul_add_sub_nsmul", []], ["del", "theorem", "nsmul_le_nsmul", []], ["del", "theorem", "nsmul_le_nsmul_of_le_right", []], ["del", "theorem", "nsmul_neg_comm", []], ["del", "theorem", "nsmul_nonneg", []], ["del", "theorem", "nsmul_sub", []], ["del", "theorem", "nsmul_zero", []], ["del", "theorem", "of_add_gsmul", []], ["del", "theorem", "of_add_nsmul", []], ["del", "theorem", "one_gpow", []], ["del", "theorem", "one_gsmul", []], ["del", "theorem", "one_le_pow_of_one_le", []], ["del", "theorem", "one_nsmul", []], ["del", "theorem", "one_pow", []], ["del", "theorem", "pow_abs", []], ["del", "theorem", "pow_bit0", []], ["del", "theorem", "pow_bit1", []], ["del", "theorem", "pow_boole", []], ["del", "theorem", "pow_dvd_pow", []], ["del", "theorem", "pow_dvd_pow_of_dvd", []], ["del", "theorem", "pow_eq_zero", []], ["del", "theorem", "pow_inv_comm", []], ["del", "theorem", "pow_ite", []], ["del", "theorem", "pow_le_pow", []], ["del", "theorem", "pow_le_pow_of_le_left", []], ["del", "theorem", "pow_left_inj", []], ["del", "theorem", "pow_lt_pow", []], ["del", "theorem", "pow_lt_pow_of_lt_left", []], ["del", "theorem", "pow_mul'", []], ["del", "theorem", "pow_mul", []], ["del", "theorem", "pow_mul_comm", []], ["del", "theorem", "pow_mul_pow_sub", []], ["del", "theorem", "pow_ne_zero", []], ["del", "theorem", "pow_nonneg", []], ["del", "theorem", "pow_one", []], ["del", "theorem", "pow_pos", []], ["del", "theorem", "pow_sub", []], ["del", "theorem", "pow_sub_mul_pow", []], ["del", "theorem", "pow_two_nonneg", []], ["del", "theorem", "pow_two_pos_of_ne_zero", []], ["del", "theorem", "pow_two_sub_pow_two", []], ["del", "theorem", "map_pow", ["ring_hom"]], ["del", "theorem", "gpow_right", ["semiconj_by"]], ["del", "theorem", "sq_sub_sq", []], ["del", "theorem", "sub_nsmul_nsmul_add", []], ["del", "theorem", "zero_gsmul", []], ["del", "theorem", "zero_pow", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "mul_pow", ["nat"]], ["del", "theorem", "one_pow", ["nat"]], ["del", "theorem", "pos_pow_of_pos", ["nat"]], ["del", "theorem", "pow_add", ["nat"]], ["del", "theorem", "pow_dvd_pow", ["nat"]], ["del", "theorem", "pow_dvd_pow_of_dvd", ["nat"]], ["del", "theorem", "pow_eq_mul_pow_sub", ["nat"]], ["del", "theorem", "pow_le_pow_of_le_left", ["nat"]], ["del", "theorem", "pow_one", ["nat"]], ["del", "theorem", "pow_pos", ["nat"]], ["del", "theorem", "pow_succ", ["nat"]], ["del", "theorem", "pow_two", ["nat"]], ["del", "theorem", "pow_zero", ["nat"]], ["del", "theorem", "zero_pow", ["nat"]]]}, {"oldPath": "src/data/nat/choose/sum.lean", "newPath": "src/data/nat/choose/sum.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/nat/fact.lean", "newPath": "src/data/nat/fact.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/log.lean", "newPath": "src/data/nat/log.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1600987878, "sha": "46bf8ca0", "message": "fix(topology/path_connected): avoid a slow use of `continuity` (#4244)\nThis corrects the timeout experienced by @Nicknamen in #3641. See https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.233641/near/211107487", "changes": [{"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": []}]}, {"timestamp": 1600980665, "sha": "675f5d47", "message": "feat(algebra/char_p): nontrivial_of_char_ne_one (#4232)\nAlso renames `false_of_nonzero_of_char_one` to `false_of_nontrivial_of_char_one`\nSnippet from the Witt project", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "false_of_nontrivial_of_char_one", ["char_p"]], ["del", "theorem", "false_of_nonzero_of_char_one", ["char_p"]], ["add", "theorem", "nontrivial_of_char_ne_one", ["char_p"]]]}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": [["add", "theorem", "false_of_nontrivial_of_subsingleton", []]]}]}, {"timestamp": 1600976614, "sha": "5eedf327", "message": "docs(data/complex/exponential): docstring for de Moivre (#4242)", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}]}, {"timestamp": 1600969117, "sha": "02ca5e28", "message": "fix(.github/workflows/add_label_from_review.yml): fix label removal (#4240)\nThe API calls were referencing the wrong field, see for example https://github.com/leanprover-community/mathlib/runs/1161014126?check_suite_focus=true#step:7:3", "changes": [{"oldPath": ".github/workflows/add_label_from_review.yml", "newPath": ".github/workflows/add_label_from_review.yml", "changes": []}]}, {"timestamp": 1600969115, "sha": "d6707462", "message": "feat(category_theory/monad/algebra): Add faithful instances. (#4227)\nAdds a `faithful` instance for the forgetful functors from the Eilenberg Moore category associated to a (co)monad.", "changes": [{"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}]}, {"timestamp": 1600969112, "sha": "5c31dea2", "message": "feat(field_theory): intermediate fields (#4181)\nDefine `intermediate_field K L` as a structure extending `subalgebra K L` and `subfield L`.\nThis definition required some changes in `subalgebra`, which I added in #4180.", "changes": [{"oldPath": null, "newPath": "src/field_theory/intermediate_field.lean", "changes": [["add", "theorem", "add_mem", ["intermediate_field"]], ["add", "theorem", "algebra_map_mem", ["intermediate_field"]], ["add", "theorem", "coe_add", ["intermediate_field"]], ["add", "theorem", "coe_int_mem", ["intermediate_field"]], ["add", "theorem", "coe_inv", ["intermediate_field"]], ["add", "theorem", "coe_mul", ["intermediate_field"]], ["add", "theorem", "coe_neg", ["intermediate_field"]], ["add", "theorem", "coe_one", ["intermediate_field"]], ["add", "theorem", "coe_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "coe_to_subfield", ["intermediate_field"]], ["add", "theorem", "coe_val", ["intermediate_field"]], ["add", "theorem", "coe_zero", ["intermediate_field"]], ["add", "theorem", "div_mem", ["intermediate_field"]], ["add", "theorem", "ext'", ["intermediate_field"]], ["add", "theorem", "ext", ["intermediate_field"]], ["add", "theorem", "field_range_le", ["intermediate_field"]], ["add", "theorem", "gsmul_mem", ["intermediate_field"]], ["add", "theorem", "inv_mem", ["intermediate_field"]], ["add", "theorem", "list_prod_mem", ["intermediate_field"]], ["add", "theorem", "list_sum_mem", ["intermediate_field"]], ["add", "def", "map", ["intermediate_field"]], ["add", "theorem", "mem_coe", ["intermediate_field"]], ["add", "theorem", "mem_mk", ["intermediate_field"]], ["add", "theorem", "mem_to_subalgebra", ["intermediate_field"]], ["add", "theorem", "mem_to_subfield", ["intermediate_field"]], ["add", "theorem", "mul_mem", ["intermediate_field"]], ["add", "theorem", "multiset_prod_mem", ["intermediate_field"]], ["add", "theorem", "multiset_sum_mem", ["intermediate_field"]], ["add", "theorem", "neg_mem", ["intermediate_field"]], ["add", "theorem", "one_mem", ["intermediate_field"]], ["add", "theorem", "pow_mem", ["intermediate_field"]], ["add", "theorem", "prod_mem", ["intermediate_field"]], ["add", "theorem", "set_range_subset", ["intermediate_field"]], ["add", "theorem", "smul_mem", ["intermediate_field"]], ["add", "theorem", "sub_mem", ["intermediate_field"]], ["add", "theorem", "sum_mem", ["intermediate_field"]], ["add", "theorem", "to_subalgebra_injective", ["intermediate_field"]], ["add", "def", "val", ["intermediate_field"]], ["add", "theorem", "val_mk", ["intermediate_field"]], ["add", "theorem", "zero_mem", ["intermediate_field"]], ["add", "structure", "intermediate_field", []], ["add", "def", "to_intermediate_field", ["subalgebra"]], ["add", "def", "to_intermediate_field", ["subfield"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "sub_mem", ["subfield"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1600969110, "sha": "e23b97e5", "message": "feat(ring_theory/polynomial): decomposing the kernel of an endomorphism polynomial (#4174)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "map_bit0", ["ring_hom"]], ["add", "theorem", "map_bit1", ["ring_hom"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_X_pow", ["polynomial"]], ["add", "theorem", "aeval_add", ["polynomial"]], ["add", "theorem", "aeval_bit0", ["polynomial"]], ["add", "theorem", "aeval_bit1", ["polynomial"]], ["add", "theorem", "aeval_monomial", ["polynomial"]], ["add", "theorem", "aeval_mul", ["polynomial"]], ["add", "theorem", "aeval_nat_cast", ["polynomial"]], ["add", "theorem", "aeval_one", ["polynomial"]], ["add", "theorem", "aeval_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["del", "theorem", "eval₂_endomorphism_algebra_map", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mul_apply", ["linear_map"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "map_bit0", ["alg_hom"]], ["add", "theorem", "map_bit1", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "disjoint_ker_aeval_of_coprime", ["polynomial"]], ["add", "theorem", "sup_aeval_range_eq_top_of_coprime", ["polynomial"]], ["add", "theorem", "sup_ker_aeval_eq_ker_aeval_mul_of_coprime", ["polynomial"]], ["add", "theorem", "sup_ker_aeval_le_ker_aeval_mul", ["polynomial"]]]}]}, {"timestamp": 1600966175, "sha": "03894dff", "message": "feat(category_theory/limits/creates): Add has_(co)limit defs (#4239)\nThis PR adds four `def`s:\n1. `has_limits_of_shape_of_has_limits_of_shape_creates_limits_of_shape` \n2. `has_limits_of_has_limits_creates_limits`\n3. `has_colimits_of_shape_of_has_colimits_of_shape_creates_colimits_of_shape`\n4. `has_colimits_of_has_colimits_creates_colimits`\nThese show that a category `C` has (co)limits (of a given shape) given a functor `F : C ⥤ D` which creates (co)limits (of the given shape) where `D` has (co)limits (of the given shape).\nSee the associated zulip discussion: \nhttps://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/has_limits.20of.20has_limits.20and.20creates_limits/near/211083395", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "theorem", "has_colimits_of_has_colimits_creates_colimits", ["category_theory"]], ["add", "theorem", "has_colimits_of_shape_of_has_colimits_of_shape_creates_colimits_of_shape", ["category_theory"]], ["add", "theorem", "has_limits_of_has_limits_creates_limits", ["category_theory"]], ["add", "theorem", "has_limits_of_shape_of_has_limits_of_shape_creates_limits_of_shape", ["category_theory"]]]}]}, {"timestamp": 1600956159, "sha": "03775fbb", "message": "chore(data/mv_polynomial): aeval_rename -> aeval_id_rename (#4230)\n`aeval_rename` was not general enough, so it is renamed to\n`aeval_id_rename`.\nAlso: state and prove the more general version of `aeval_rename`.", "changes": [{"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": [["add", "theorem", "aeval_id_rename", ["mv_polynomial"]], ["del", "theorem", "aeval_rename", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["add", "theorem", "aeval_rename", ["mv_polynomial"]]]}]}, {"timestamp": 1600943954, "sha": "3484e8be", "message": "fix(data/mv_polynomial): fix doc strings (#4219)", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/comap.lean", "newPath": "src/data/mv_polynomial/comap.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/pderivative.lean", "newPath": "src/data/mv_polynomial/pderivative.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": []}]}, {"timestamp": 1600943953, "sha": "f0713cb9", "message": "refactor(measure_theory/simple_func_dense): split monolithic proof (#4199)\nIn the new proof the sequence of approximating functions has a simpler description: `N`-th function\nsends `x` to the point `e k` which is the nearest to `f x` among the points `e 0`, ..., `e N`, where `e n`\nis a dense sequence such that `e 0 = 0`.", "changes": [{"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "range_cases_on", ["nat"]], ["add", "theorem", "range_of_succ", ["nat"]], ["add", "theorem", "range_rec", ["nat"]], ["add", "theorem", "zero_union_range_succ", ["nat"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "sep_set_of", ["set"]], ["add", "theorem", "set_of_and", ["set"]], ["add", "theorem", "set_of_or", ["set"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "tendsto_integral_approx_on_univ", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "is_measurable_lt'", []], ["add", "theorem", "is_measurable_lt", []], ["mod", "theorem", "const_mul", ["measurable"]], ["mod", "theorem", "const_smul", ["measurable"]], ["mod", "theorem", "mul_const", ["measurable"]], ["add", "theorem", "measurable_edist_left", []], ["add", "theorem", "measurable_edist_right", []]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "measurable_bind", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "add'", ["measure_theory", "integrable"]], ["add", "theorem", "sub'", ["measure_theory", "integrable"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "ae_eq_bot", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["add", "theorem", "approx_on_comp", ["measure_theory", "simple_func"]], ["add", "theorem", "approx_on_mem", ["measure_theory", "simple_func"]], ["add", "theorem", "approx_on_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "edist_approx_on_le", ["measure_theory", "simple_func"]], ["add", "theorem", "edist_approx_on_y0_le", ["measure_theory", "simple_func"]], ["add", "theorem", "edist_nearest_pt_le", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_approx_on", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_approx_on_univ", ["measure_theory", "simple_func"]], ["add", "theorem", "nearest_pt_ind_le", ["measure_theory", "simple_func"]], ["add", "theorem", "nearest_pt_ind_succ", ["measure_theory", "simple_func"]], ["add", "theorem", "nearest_pt_ind_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "nearest_pt_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_l1_edist", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_l1", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_approx_on_univ_l1_edist", ["measure_theory", "simple_func"]], ["add", "theorem", "tendsto_nearest_pt", ["measure_theory", "simple_func"]], ["del", "theorem", "simple_func_sequence_tendsto'", ["measure_theory"]], ["del", "theorem", "simple_func_sequence_tendsto", ["measure_theory"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["mod", "theorem", "dense_seq_dense", ["topological_space"]]]}]}, {"timestamp": 1600936671, "sha": "ba8fa0f1", "message": "feat(logic/embedding): use simps (#4169)\nSome lemmas are slightly reformulated, and have a worse name. But they are (almost) never typed explicitly, since they are simp lemmas (even the occurrences in other files probably came from `squeeze_simp`).", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/nat_antidiagonal.lean", "newPath": "src/algebra/big_operators/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "theorem", "refl_to_embedding", ["equiv"]], ["del", "theorem", "to_embedding_coe_fn", ["equiv"]], ["del", "theorem", "coe_image", ["function", "embedding"]], ["del", "theorem", "coe_sigma_map", ["function", "embedding"]], ["del", "theorem", "coe_sigma_mk", ["function", "embedding"]], ["del", "theorem", "refl_apply", ["function", "embedding"]], ["mod", "def", "sigma_map", ["function", "embedding"]], ["mod", "def", "sigma_mk", ["function", "embedding"]], ["del", "theorem", "trans_apply", ["function", "embedding"]], ["del", "theorem", "mul_left_embedding_apply", []], ["del", "theorem", "mul_right_embedding_apply", []], ["del", "theorem", "coe_embedding_of_subset_apply", ["set"]], ["mod", "def", "embedding_of_subset", ["set"]], ["del", "theorem", "embedding_of_subset_apply_mk", ["set"]]]}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}]}, {"timestamp": 1600930493, "sha": "5e934cd9", "message": "chore(*): cleanup imports, split off data/finset/preimage from data/set/finite (#4221)\nMostly this consists of moving some content from `data.set.finite` to `data.finset.preimage`, in order to reduce imports in `data.set.finite`.", "changes": [{"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": "src/data/finset/default.lean", "newPath": "src/data/finset/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finset/preimage.lean", "changes": [["add", "theorem", "coe_preimage", ["finset"]], ["add", "theorem", "image_preimage", ["finset"]], ["add", "theorem", "image_preimage_of_bij", ["finset"]], ["add", "theorem", "image_subset_iff_subset_preimage", ["finset"]], ["add", "theorem", "map_subset_iff_subset_preimage", ["finset"]], ["add", "theorem", "mem_preimage", ["finset"]], ["add", "theorem", "monotone_preimage", ["finset"]], ["add", "theorem", "prod_preimage'", ["finset"]], ["add", "theorem", "prod_preimage", ["finset"]], ["add", "theorem", "prod_preimage_of_bij", ["finset"]], ["add", "theorem", "sigma_image_fst_preimage_mk", ["finset"]], ["add", "theorem", "sigma_preimage_mk", ["finset"]], ["add", "theorem", "sigma_preimage_mk_of_subset", ["finset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "coe_preimage", ["finset"]], ["del", "theorem", "image_preimage", ["finset"]], ["del", "theorem", "image_preimage_of_bij", ["finset"]], ["del", "theorem", "image_subset_iff_subset_preimage", ["finset"]], ["del", "theorem", "map_subset_iff_subset_preimage", ["finset"]], ["del", "theorem", "mem_preimage", ["finset"]], ["del", "theorem", "monotone_preimage", ["finset"]], ["del", "theorem", "prod_preimage'", ["finset"]], ["del", "theorem", "prod_preimage", ["finset"]], ["del", "theorem", "prod_preimage_of_bij", ["finset"]], ["del", "theorem", "sigma_image_fst_preimage_mk", ["finset"]], ["del", "theorem", "sigma_preimage_mk", ["finset"]], ["del", "theorem", "sigma_preimage_mk_of_subset", ["finset"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}]}, {"timestamp": 1600926742, "sha": "ed07cac5", "message": "feat(data/mv_polynomial/rename): coeff_rename (#4203)\nAlso, use the opportunity to use R as variable for the coefficient ring\nthroughout the file.", "changes": [{"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["add", "theorem", "coeff_rename_eq_zero", ["mv_polynomial"]], ["add", "theorem", "coeff_rename_map_domain", ["mv_polynomial"]], ["add", "theorem", "coeff_rename_ne_zero", ["mv_polynomial"]], ["mod", "theorem", "eval_rename_prodmk", ["mv_polynomial"]], ["mod", "theorem", "eval₂_cast_comp", ["mv_polynomial"]], ["mod", "theorem", "eval₂_rename_prodmk", ["mv_polynomial"]], ["mod", "theorem", "exists_fin_rename", ["mv_polynomial"]], ["mod", "theorem", "exists_finset_rename", ["mv_polynomial"]], ["mod", "theorem", "map_rename", ["mv_polynomial"]], ["mod", "def", "rename", ["mv_polynomial"]], ["mod", "theorem", "rename_C", ["mv_polynomial"]], ["mod", "theorem", "rename_X", ["mv_polynomial"]], ["mod", "theorem", "rename_eq", ["mv_polynomial"]], ["mod", "theorem", "rename_eval₂", ["mv_polynomial"]], ["mod", "theorem", "rename_id", ["mv_polynomial"]], ["mod", "theorem", "rename_injective", ["mv_polynomial"]], ["mod", "theorem", "rename_monomial", ["mv_polynomial"]], ["mod", "theorem", "rename_prodmk_eval₂", ["mv_polynomial"]], ["mod", "theorem", "rename_rename", ["mv_polynomial"]], ["mod", "theorem", "total_degree_rename_le", ["mv_polynomial"]]]}]}, {"timestamp": 1600918432, "sha": "ef18740b", "message": "feat(linear_algebra/eigenspace): generalized eigenvectors span the entire space (#4111)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ker_restrict", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["mod", "theorem", "aeval_apply_of_has_eigenvector", ["module", "End"]], ["mod", "def", "eigenspace", ["module", "End"]], ["mod", "theorem", "eigenspace_aeval_polynomial_degree_1", ["module", "End"]], ["mod", "theorem", "eigenspace_div", ["module", "End"]], ["mod", "theorem", "eigenspace_le_generalized_eigenspace", ["module", "End"]], ["mod", "theorem", "eigenvectors_linear_independent", ["module", "End"]], ["mod", "theorem", "exists_eigenvalue", ["module", "End"]], ["mod", "theorem", "exp_ne_zero_of_has_generalized_eigenvalue", ["module", "End"]], ["add", "def", "generalized_eigenrange", ["module", "End"]], ["mod", "def", "generalized_eigenspace", ["module", "End"]], ["mod", "theorem", "generalized_eigenspace_eq_generalized_eigenspace_findim_of_le", ["module", "End"]], ["mod", "theorem", "generalized_eigenspace_mono", ["module", "End"]], ["mod", "theorem", "generalized_eigenspace_restrict", ["module", "End"]], ["add", "theorem", "generalized_eigenvec_disjoint_range_ker", ["module", "End"]], ["mod", "def", "has_eigenvalue", ["module", "End"]], ["mod", "def", "has_eigenvector", ["module", "End"]], ["mod", "def", "has_generalized_eigenvalue", ["module", "End"]], ["mod", "theorem", "has_generalized_eigenvalue_of_has_eigenvalue", ["module", "End"]], ["mod", "theorem", "has_generalized_eigenvalue_of_has_generalized_eigenvalue_of_le", ["module", "End"]], ["mod", "def", "has_generalized_eigenvector", ["module", "End"]], ["mod", "theorem", "ker_aeval_ring_hom'_unit_polynomial", ["module", "End"]], ["add", "theorem", "map_generalized_eigenrange_le", ["module", "End"]], ["mod", "theorem", "mem_eigenspace_iff", ["module", "End"]], ["add", "theorem", "pos_findim_generalized_eigenspace_of_has_eigenvalue", ["module", "End"]], ["add", "theorem", "supr_generalized_eigenspace_eq_top", ["module", "End"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "mul_sub_algebra_map_commutes", ["algebra"]], ["add", "theorem", "mul_sub_algebra_map_pow_commutes", ["algebra"]]]}]}, {"timestamp": 1600914958, "sha": "4e414458", "message": "chore(scripts): update nolints.txt (#4226)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1600914957, "sha": "6b35819b", "message": "refactor(category_theory): make `has_image` and friends a Prop (#4195)\nThis is an obious follow-up to #3995. It changes the following declarations to a `Prop`:\n* `arrow.has_lift`\n* `strong_epi`\n* `has_image`/`has_images`\n* `has_strong_epi_mono_factorisations`\n* `has_image_map`/`has_image_maps`\nThe big win is that there is now precisely one notion of exactness in every category with kernels and images, not a (different but provably equal) notion of exactness per `has_kernels` and `has_images` instance like in the pre-#3995 era.", "changes": [{"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": [["del", "def", "image_iso_range", ["AddCommGroup"]], ["del", "theorem", "image_map", ["AddCommGroup"]]]}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "def", "coimage_iso_image'", ["category_theory", "abelian"]], ["del", "theorem", "image_eq_image", ["category_theory", "abelian"]], ["add", "def", "image_iso_image", ["category_theory", "abelian"]], ["del", "theorem", "image_ι_eq_image_ι", ["category_theory", "abelian"]], ["add", "theorem", "image_ι_comp_eq_zero", ["category_theory", "abelian", "images"]], ["del", "theorem", "kernel_cokernel_eq_image_ι", ["category_theory", "abelian"]], ["add", "theorem", "strong_epi_of_epi", ["category_theory", "abelian"]], ["del", "def", "strong_epi_of_epi", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "def", "is_limit_image'", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": [["add", "theorem", "strong_epi_of_epi", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "strong_epi_of_epi", ["category_theory", "non_preadditive_abelian"]]]}, {"oldPath": "src/category_theory/abelian/pseudoelements.lean", "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": []}, {"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "theorem", "mk", ["category_theory", "arrow", "has_lift"]], ["del", "def", "lift", ["category_theory", "arrow"]], ["add", "structure", "lift_struct", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "mk", ["category_theory", "limits", "has_image"]], ["del", "theorem", "factor_map", ["category_theory", "limits", "has_image_map"]], ["add", "def", "image_map", ["category_theory", "limits", "has_image_map"]], ["add", "theorem", "mk", ["category_theory", "limits", "has_image_map"]], ["add", "theorem", "transport", ["category_theory", "limits", "has_image_map"]], ["del", "def", "has_image_map_comp", ["category_theory", "limits"]], ["del", "def", "has_image_map_id", ["category_theory", "limits"]], ["add", "theorem", "mk", ["category_theory", "limits", "has_strong_epi_mono_factorisations"]], ["mod", "def", "is_image", ["category_theory", "limits", "image"]], ["mod", "def", "map", ["category_theory", "limits", "image"]], ["mod", "def", "mono_factorisation", ["category_theory", "limits", "image"]], ["add", "structure", "image_factorisation", ["category_theory", "limits"]], ["add", "theorem", "factor_map", ["category_theory", "limits", "image_map"]], ["add", "def", "transport", ["category_theory", "limits", "image_map"]], ["add", "structure", "image_map", ["category_theory", "limits"]], ["add", "def", "image_map_comp", ["category_theory", "limits"]], ["add", "def", "image_map_id", ["category_theory", "limits"]], ["add", "theorem", "e_iso_ext_hom", ["category_theory", "limits", "is_image"]], ["add", "theorem", "e_iso_ext_inv", ["category_theory", "limits", "is_image"]], ["add", "theorem", "iso_ext_hom_m", ["category_theory", "limits", "is_image"]], ["add", "theorem", "iso_ext_inv_m", ["category_theory", "limits", "is_image"]], ["add", "theorem", "lift_ι", ["category_theory", "limits", "is_image"]], ["add", "theorem", "strong_epi_factor_thru_image_of_strong_epi_mono_factorisation", ["category_theory", "limits"]], ["add", "theorem", "strong_epi_of_strong_epi_mono_factorisation", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": [["del", "def", "is_iso_of_mono_of_strong_epi", ["category_theory"]], ["add", "theorem", "strong_epi_comp", ["category_theory"]], ["del", "def", "strong_epi_comp", ["category_theory"]], ["add", "theorem", "strong_epi_of_strong_epi", ["category_theory"]], ["del", "def", "strong_epi_of_strong_epi", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["del", "def", "zero", ["category_theory", "limits", "has_image"]], ["add", "def", "image_factorisation_zero", ["category_theory", "limits"]], ["mod", "def", "image_zero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["del", "theorem", "image_map", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}]}, {"timestamp": 1600906543, "sha": "96e81faa", "message": "feat(data/(lazy_)list): various lemmas and definitions (#4172)", "changes": [{"oldPath": "src/data/lazy_list/basic.lean", "newPath": "src/data/lazy_list/basic.lean", "changes": [["add", "def", "attach", ["lazy_list"]], ["add", "theorem", "forall_mem_cons", ["lazy_list"]], ["add", "theorem", "mem_cons", ["lazy_list"]], ["add", "theorem", "mem_nil", ["lazy_list"]], ["add", "def", "pmap", ["lazy_list"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "disjoint_take_drop", ["list"]], ["add", "theorem", "inter_reverse", ["list"]], ["add", "theorem", "mem_map_swap", ["list"]], ["add", "theorem", "mem_of_mem_drop", ["list"]], ["add", "theorem", "nth_eq_none_iff", ["list"]], ["add", "theorem", "nth_injective", ["list"]], ["add", "theorem", "reverse_take", ["list"]], ["add", "theorem", "sizeof_slice_lt", ["list"]], ["add", "theorem", "slice_eq", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "slice", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "drop_inter", ["list", "perm"]], ["add", "theorem", "inter_append", ["list", "perm"]], ["add", "theorem", "slice_inter", ["list", "perm"]], ["add", "theorem", "take_inter", ["list", "perm"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["add", "theorem", "sizeof_erase_dupkeys", ["list"]], ["add", "theorem", "sizeof_kerase", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "nth_zip_eq_some", ["list"]], ["add", "theorem", "nth_zip_with", ["list"]], ["add", "theorem", "nth_zip_with_eq_some", ["list"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "fst_to_sigma", ["prod"]], ["add", "theorem", "snd_to_sigma", ["prod"]], ["add", "def", "to_sigma", ["prod"]]]}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1600894539, "sha": "69279580", "message": "feat(data/real/irrational): add a different formulation for irrationality (#4213)", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["add", "theorem", "irrational_iff_ne_rational", []]]}]}, {"timestamp": 1600894536, "sha": "9aeffa83", "message": "feat(geometry/manifold): bundled smooth map (#3904)", "changes": [{"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "times_cont_mdiff", ["continuous_linear_map"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/times_cont_mdiff_map.lean", "changes": [["add", "def", "smooth_map", []], ["add", "theorem", "coe_inj", ["times_cont_mdiff_map"]], ["add", "def", "comp", ["times_cont_mdiff_map"]], ["add", "theorem", "comp_apply", ["times_cont_mdiff_map"]], ["add", "def", "const", ["times_cont_mdiff_map"]], ["add", "theorem", "ext", ["times_cont_mdiff_map"]], ["add", "def", "id", ["times_cont_mdiff_map"]], ["add", "structure", "times_cont_mdiff_map", []]]}]}, {"timestamp": 1600886890, "sha": "72e5b9fc", "message": "feat(measure_theory): ext lemmas for measures (#3895)\nAdd class `sigma_finite`.\nAlso some cleanup.\nRename `measurable_space.is_measurable` -> `measurable_space.is_measurable'`. This is to avoid name clash with `_root_.is_measurable`, which should almost always be used instead.\ndefine `is_pi_system`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_eq_compl_inter", ["set"]], ["add", "theorem", "diff_inter_self_eq_diff", ["set"]], ["add", "theorem", "diff_self_inter", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "elim", ["fact"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "ennreal_add", ["measurable"]]]}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": []}, {"oldPath": "src/measure_theory/haar_measure.lean", "newPath": "src/measure_theory/haar_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "def", "is_measurable", []], ["add", "def", "is_pi_system", []], ["mod", "theorem", "generate_from_eq", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_has_compl", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_has_def", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_has_subset_generate_measurable", ["measurable_space", "dynkin_system"]], ["add", "theorem", "ext_iff", ["measurable_space"]], ["mod", "theorem", "generate_from_le", ["measurable_space"]], ["mod", "theorem", "generate_from_le_iff", ["measurable_space"]], ["mod", "theorem", "induction_on_inter", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ext_of_generate_finite", ["measure_theory"]], ["add", "theorem", "ext_of_generate_from_of_Union", ["measure_theory", "measure"]], ["mod", "def", "is_complete", ["measure_theory", "measure"]], ["add", "theorem", "measure_compl", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}]}, {"timestamp": 1600880171, "sha": "7cf8fa62", "message": "fix(archive/100-thms): update link to 100.yaml in README (#4224)", "changes": [{"oldPath": "archive/100-theorems-list/README.md", "newPath": "archive/100-theorems-list/README.md", "changes": []}]}, {"timestamp": 1600859437, "sha": "ecd889a5", "message": "feat(data/polynomial/*): higher order derivative (#4187)", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/iterated_deriv.lean", "changes": [["add", "theorem", "coeff_iterated_deriv_as_prod_Ico", ["polynomial"]], ["add", "theorem", "coeff_iterated_deriv_as_prod_range", ["polynomial"]], ["add", "def", "iterated_deriv", ["polynomial"]], ["add", "theorem", "iterated_deriv_C", ["polynomial"]], ["add", "theorem", "iterated_deriv_C_zero", ["polynomial"]], ["add", "theorem", "iterated_deriv_X", ["polynomial"]], ["add", "theorem", "iterated_deriv_X_one", ["polynomial"]], ["add", "theorem", "iterated_deriv_X_zero", ["polynomial"]], ["add", "theorem", "iterated_deriv_add", ["polynomial"]], ["add", "theorem", "iterated_deriv_eq_zero_of_nat_degree_lt", ["polynomial"]], ["add", "theorem", "iterated_deriv_mul", ["polynomial"]], ["add", "theorem", "iterated_deriv_neg", ["polynomial"]], ["add", "theorem", "iterated_deriv_one", ["polynomial"]], ["add", "theorem", "iterated_deriv_one_zero", ["polynomial"]], ["add", "theorem", "iterated_deriv_smul", ["polynomial"]], ["add", "theorem", "iterated_deriv_sub", ["polynomial"]], ["add", "theorem", "iterated_deriv_succ", ["polynomial"]], ["add", "theorem", "iterated_deriv_zero_left", ["polynomial"]], ["add", "theorem", "iterated_deriv_zero_right", ["polynomial"]]]}]}, {"timestamp": 1600854421, "sha": "5ab7eb0f", "message": "feat(analysis/special_functions/trigonometric): continuity and differentiability of arctan (#4138)\nAdded lemmas for continuity and differentiability of arctan, as well as various supporting limit lemmas.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "deriv_arctan", []], ["add", "theorem", "deriv_within_arctan", []], ["add", "theorem", "arctan", ["differentiable"]], ["add", "theorem", "arctan", ["differentiable_at"]], ["add", "theorem", "arctan", ["differentiable_on"]], ["add", "theorem", "arctan", ["differentiable_within_at"]], ["add", "theorem", "arctan", ["has_deriv_at"]], ["add", "theorem", "arctan", ["has_deriv_within_at"]], ["add", "theorem", "arctan_mem_Ioo", ["real"]], ["add", "theorem", "continuous_arctan", ["real"]], ["add", "theorem", "continuous_on_tan_Ioo", ["real"]], ["add", "theorem", "deriv_arctan", ["real"]], ["mod", "theorem", "deriv_tan_of_mem_Ioo", ["real"]], ["add", "theorem", "differentiable_at_arctan", ["real"]], ["mod", "theorem", "differentiable_at_tan_of_mem_Ioo", ["real"]], ["mod", "theorem", "exists_cos_eq", ["real"]], ["mod", "theorem", "exists_cos_eq_zero", ["real"]], ["mod", "theorem", "exists_sin_eq", ["real"]], ["add", "theorem", "has_deriv_at_arctan", ["real"]], ["mod", "theorem", "has_deriv_at_tan_of_mem_Ioo", ["real"]], ["mod", "theorem", "range_cos", ["real"]], ["mod", "theorem", "range_sin", ["real"]], ["add", "def", "tan_homeomorph", ["real"]], ["add", "theorem", "tan_homeomorph_inv_fun_eq_arctan", ["real"]], ["add", "theorem", "tendsto_cos_neg_pi_div_two", ["real"]], ["add", "theorem", "tendsto_cos_pi_div_two", ["real"]], ["add", "theorem", "tendsto_sin_neg_pi_div_two", ["real"]], ["add", "theorem", "tendsto_sin_pi_div_two", ["real"]], ["add", "theorem", "tendsto_tan_neg_pi_div_two", ["real"]], ["add", "theorem", "tendsto_tan_pi_div_two", ["real"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "tendsto_at_top_div", []], ["del", "theorem", "tendsto_at_top_mul_left'", []], ["del", "theorem", "tendsto_at_top_mul_left", []], ["del", "theorem", "tendsto_at_top_mul_right'", []], ["del", "theorem", "tendsto_at_top_mul_right", []], ["del", "theorem", "tendsto_inv_at_top_zero'", []], ["del", "theorem", "tendsto_inv_at_top_zero", []], ["del", "theorem", "tendsto_inv_zero_at_top", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "inv_tendsto_at_top", ["tendsto"]], ["add", "theorem", "inv_tendsto_zero", ["tendsto"]], ["add", "theorem", "tendsto_at_top_div", []], ["add", "theorem", "tendsto_at_top_mul_left'", []], ["add", "theorem", "tendsto_at_top_mul_left", []], ["add", "theorem", "tendsto_at_top_mul_right'", []], ["add", "theorem", "tendsto_at_top_mul_right", []], ["add", "theorem", "tendsto_inv_at_top_zero'", []], ["add", "theorem", "tendsto_inv_at_top_zero", []], ["add", "theorem", "tendsto_inv_zero_at_top", []], ["add", "theorem", "tendsto_mul_at_bot", []], ["add", "theorem", "tendsto_mul_at_top", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "change_inv", ["homeomorph"]]]}]}, {"timestamp": 1600846395, "sha": "d7aada16", "message": "doc(data/list/tfae): Add skeletal docstring (#4220)", "changes": [{"oldPath": "src/data/list/tfae.lean", "newPath": "src/data/list/tfae.lean", "changes": []}]}, {"timestamp": 1600822925, "sha": "937199ad", "message": "chore(scripts): update nolints.txt (#4216)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1600801712, "sha": "392d3e37", "message": "feat(archive/imo/*): add IMO 1972 B2, move IMOs to a subdirectory (#4209)", "changes": [{"oldPath": null, "newPath": "archive/imo/imo1972_b2.lean", "changes": []}, {"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo/imo1988_q6.lean", "changes": []}]}, {"timestamp": 1600794090, "sha": "994c31d0", "message": "feat(ring_theory/ideal/basic): mem_bot (#4211)\nSnippet from the Witt project\nCo-Authored-By: Rob Y. Lewis ", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "mem_bot", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}]}, {"timestamp": 1600786350, "sha": "f2458d6f", "message": "chore(data/mv_polynomial): Rename variables (#4208)\nI renamed `α` to `R` throughout. I also changed the `\\sigma` to `σ` in `basic.lean`, see leanprover-community/doc-gen#62", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["mod", "def", "C", ["mv_polynomial"]], ["mod", "theorem", "C_0", ["mv_polynomial"]], ["mod", "theorem", "C_1", ["mv_polynomial"]], ["mod", "theorem", "C_add", ["mv_polynomial"]], ["mod", "theorem", "C_eq_coe_nat", ["mv_polynomial"]], ["mod", "theorem", "C_mul", ["mv_polynomial"]], ["mod", "theorem", "C_pow", ["mv_polynomial"]], ["mod", "def", "X", ["mv_polynomial"]], ["mod", "theorem", "X_pow_eq_single", ["mv_polynomial"]], ["mod", "def", "aeval", ["mv_polynomial"]], ["mod", "theorem", "aeval_C", ["mv_polynomial"]], ["mod", "theorem", "aeval_def", ["mv_polynomial"]], ["mod", "theorem", "aeval_eq_zero", ["mv_polynomial"]], ["mod", "theorem", "aeval_monomial", ["mv_polynomial"]], ["mod", "theorem", "alg_hom_C", ["mv_polynomial"]], ["mod", "theorem", "alg_hom_ext", ["mv_polynomial"]], ["mod", "theorem", "algebra_map_eq", ["mv_polynomial"]], ["mod", "theorem", "as_sum", ["mv_polynomial"]], ["mod", "theorem", "coe_eval₂_hom", ["mv_polynomial"]], ["mod", "def", "coeff", ["mv_polynomial"]], ["mod", "theorem", "coeff_C_mul", ["mv_polynomial"]], ["mod", "theorem", "coeff_add", ["mv_polynomial"]], ["mod", "def", "coeff_coe_to_fun", ["mv_polynomial"]], ["mod", "theorem", "coeff_map", ["mv_polynomial"]], ["mod", "theorem", "coeff_mul", ["mv_polynomial"]], ["mod", "theorem", "coeff_mul_X'", ["mv_polynomial"]], ["mod", "theorem", "coeff_mul_X", ["mv_polynomial"]], ["mod", "theorem", "coeff_sum", ["mv_polynomial"]], ["mod", "theorem", "coeff_zero_X", ["mv_polynomial"]], ["mod", "theorem", "comp_eval₂_hom", ["mv_polynomial"]], ["mod", "def", "constant_coeff", ["mv_polynomial"]], ["mod", "theorem", "constant_coeff_C", ["mv_polynomial"]], ["mod", "theorem", "constant_coeff_comp_map", ["mv_polynomial"]], ["mod", "theorem", "constant_coeff_eq", ["mv_polynomial"]], ["mod", "theorem", "constant_coeff_map", ["mv_polynomial"]], ["mod", "theorem", "constant_coeff_monomial", ["mv_polynomial"]], ["mod", "theorem", "eq_zero_iff", ["mv_polynomial"]], ["mod", "def", "eval", ["mv_polynomial"]], ["mod", "theorem", "eval_eq'", ["mv_polynomial"]], ["mod", "theorem", "eval_eq", ["mv_polynomial"]], ["mod", "theorem", "eval_map", ["mv_polynomial"]], ["mod", "theorem", "eval_prod", ["mv_polynomial"]], ["mod", "theorem", "eval_sum", ["mv_polynomial"]], ["mod", "theorem", "eval_unique", ["mv_polynomial"]], ["mod", "def", "eval₂", ["mv_polynomial"]], ["mod", "theorem", "eval₂_assoc", ["mv_polynomial"]], ["mod", "theorem", "eval₂_comp_left", ["mv_polynomial"]], ["mod", "theorem", "eval₂_comp_right", ["mv_polynomial"]], ["mod", "theorem", "eval₂_congr", ["mv_polynomial"]], ["mod", "theorem", "eval₂_eq'", ["mv_polynomial"]], ["mod", "theorem", "eval₂_eq", ["mv_polynomial"]], ["mod", "theorem", "eval₂_eq_eval_map", ["mv_polynomial"]], ["mod", "theorem", "eval₂_eta", ["mv_polynomial"]], ["mod", "def", "eval₂_hom", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_C", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_X'", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_congr", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_eq_zero", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_map_hom", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_monomial", ["mv_polynomial"]], ["mod", "theorem", "eval₂_map", ["mv_polynomial"]], ["mod", "theorem", "eval₂_one", ["mv_polynomial"]], ["mod", "theorem", "eval₂_pow", ["mv_polynomial"]], ["mod", "theorem", "eval₂_prod", ["mv_polynomial"]], ["mod", "theorem", "eval₂_sum", ["mv_polynomial"]], ["mod", "theorem", "eval₂_zero", ["mv_polynomial"]], ["mod", "theorem", "exists_coeff_ne_zero", ["mv_polynomial"]], ["mod", "theorem", "ext", ["mv_polynomial"]], ["mod", "theorem", "ext_iff", ["mv_polynomial"]], ["mod", "theorem", "hom_eq_hom", ["mv_polynomial"]], ["mod", "theorem", "induction_on'", ["mv_polynomial"]], ["mod", "theorem", "induction_on", ["mv_polynomial"]], ["mod", "theorem", "is_id", ["mv_polynomial"]], ["mod", "def", "map", ["mv_polynomial"]], ["mod", "theorem", "map_C", ["mv_polynomial"]], ["mod", "theorem", "map_X", ["mv_polynomial"]], ["mod", "theorem", "map_eval₂", ["mv_polynomial"]], ["mod", "theorem", "map_eval₂_hom", ["mv_polynomial"]], ["mod", "theorem", "map_id", ["mv_polynomial"]], ["mod", "theorem", "map_map", ["mv_polynomial"]], ["mod", "theorem", "map_monomial", ["mv_polynomial"]], ["mod", "theorem", "monic_monomial_eq", ["mv_polynomial"]], ["mod", "def", "monomial", ["mv_polynomial"]], ["mod", "theorem", "monomial_add", ["mv_polynomial"]], ["mod", "theorem", "monomial_eq", ["mv_polynomial"]], ["mod", "theorem", "monomial_mul", ["mv_polynomial"]], ["mod", "theorem", "monomial_zero", ["mv_polynomial"]], ["mod", "theorem", "ne_zero_iff", ["mv_polynomial"]], ["mod", "theorem", "ring_hom_ext", ["mv_polynomial"]], ["mod", "theorem", "single_eq_C_mul_X", ["mv_polynomial"]], ["mod", "theorem", "smul_eq_C_mul", ["mv_polynomial"]], ["mod", "theorem", "smul_eval", ["mv_polynomial"]], ["mod", "theorem", "support_map_of_injective", ["mv_polynomial"]], ["mod", "theorem", "support_map_subset", ["mv_polynomial"]], ["mod", "theorem", "support_sum_monomial_coeff", ["mv_polynomial"]], ["mod", "def", "mv_polynomial", []]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["mod", "theorem", "C_neg", ["mv_polynomial"]], ["mod", "theorem", "C_sub", ["mv_polynomial"]], ["mod", "theorem", "coeff_neg", ["mv_polynomial"]], ["mod", "theorem", "coeff_sub", ["mv_polynomial"]], ["mod", "theorem", "degrees_neg", ["mv_polynomial"]], ["mod", "theorem", "degrees_sub", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_X", ["mv_polynomial"]], ["mod", "theorem", "hom_C", ["mv_polynomial"]], ["mod", "def", "hom_equiv", ["mv_polynomial"]], ["mod", "theorem", "total_degree_neg", ["mv_polynomial"]], ["mod", "theorem", "total_degree_sub", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/equiv.lean", "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["mod", "def", "iter_to_sum", ["mv_polynomial"]], ["mod", "theorem", "iter_to_sum_C_C", ["mv_polynomial"]], ["mod", "theorem", "iter_to_sum_C_X", ["mv_polynomial"]], ["mod", "theorem", "iter_to_sum_X", ["mv_polynomial"]], ["mod", "def", "mv_polynomial_equiv_mv_polynomial", ["mv_polynomial"]], ["mod", "def", "option_equiv_left", ["mv_polynomial"]], ["mod", "def", "option_equiv_right", ["mv_polynomial"]], ["mod", "def", "pempty_ring_equiv", ["mv_polynomial"]], ["mod", "def", "punit_ring_equiv", ["mv_polynomial"]], ["mod", "def", "ring_equiv_congr", ["mv_polynomial"]], ["mod", "def", "ring_equiv_of_equiv", ["mv_polynomial"]], ["mod", "def", "sum_ring_equiv", ["mv_polynomial"]], ["mod", "def", "sum_to_iter", ["mv_polynomial"]], ["mod", "theorem", "sum_to_iter_C", ["mv_polynomial"]], ["mod", "theorem", "sum_to_iter_Xl", ["mv_polynomial"]], ["mod", "theorem", "sum_to_iter_Xr", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/monad.lean", "newPath": "src/data/mv_polynomial/monad.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["mod", "theorem", "aeval_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["mod", "theorem", "coeff_eq_zero_of_total_degree_lt", ["mv_polynomial"]], ["mod", "def", "degree_of", ["mv_polynomial"]], ["mod", "def", "degrees", ["mv_polynomial"]], ["mod", "theorem", "degrees_C", ["mv_polynomial"]], ["mod", "theorem", "degrees_X", ["mv_polynomial"]], ["mod", "theorem", "degrees_add", ["mv_polynomial"]], ["mod", "theorem", "degrees_add_of_disjoint", ["mv_polynomial"]], ["mod", "theorem", "degrees_map", ["mv_polynomial"]], ["mod", "theorem", "degrees_map_of_injective", ["mv_polynomial"]], ["mod", "theorem", "degrees_monomial", ["mv_polynomial"]], ["mod", "theorem", "degrees_monomial_eq", ["mv_polynomial"]], ["mod", "theorem", "degrees_mul", ["mv_polynomial"]], ["mod", "theorem", "degrees_one", ["mv_polynomial"]], ["mod", "theorem", "degrees_pow", ["mv_polynomial"]], ["mod", "theorem", "degrees_prod", ["mv_polynomial"]], ["mod", "theorem", "degrees_sum", ["mv_polynomial"]], ["mod", "theorem", "degrees_zero", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["mod", "theorem", "exists_degree_lt", ["mv_polynomial"]], ["mod", "theorem", "le_degrees_add", ["mv_polynomial"]], ["mod", "theorem", "mem_degrees", ["mv_polynomial"]], ["mod", "theorem", "mem_support_not_mem_vars_zero", ["mv_polynomial"]], ["mod", "def", "total_degree", ["mv_polynomial"]], ["mod", "theorem", "total_degree_C", ["mv_polynomial"]], ["mod", "theorem", "total_degree_X", ["mv_polynomial"]], ["mod", "theorem", "total_degree_add", ["mv_polynomial"]], ["mod", "theorem", "total_degree_eq", ["mv_polynomial"]], ["mod", "theorem", "total_degree_le_degrees_card", ["mv_polynomial"]], ["mod", "theorem", "total_degree_mul", ["mv_polynomial"]], ["mod", "theorem", "total_degree_multiset_prod", ["mv_polynomial"]], ["mod", "theorem", "total_degree_one", ["mv_polynomial"]], ["mod", "theorem", "total_degree_pow", ["mv_polynomial"]], ["mod", "theorem", "total_degree_zero", ["mv_polynomial"]], ["mod", "def", "vars", ["mv_polynomial"]], ["mod", "theorem", "vars_0", ["mv_polynomial"]], ["mod", "theorem", "vars_C", ["mv_polynomial"]], ["mod", "theorem", "vars_X", ["mv_polynomial"]], ["mod", "theorem", "vars_add_subset", ["mv_polynomial"]], ["mod", "theorem", "vars_monomial_single", ["mv_polynomial"]], ["mod", "theorem", "vars_mul", ["mv_polynomial"]], ["mod", "theorem", "vars_one", ["mv_polynomial"]], ["mod", "theorem", "vars_pow", ["mv_polynomial"]], ["mod", "theorem", "vars_prod", ["mv_polynomial"]]]}]}, {"timestamp": 1600779443, "sha": "516b0dfd", "message": "refactor(ring_theory/algebra): re-bundle `subalgebra` (#4180)\nThis PR makes `subalgebra` extend `subsemiring` instead of using `subsemiring` as a field in its definition. The refactor is needed because `intermediate_field` should simultaneously extend `subalgebra` and `subfield`, and so the type of the `carrier` fields should match.\nI added some copies of definitions that use `subring` instead of `is_subring` if I needed to change these definitions anyway.", "changes": [{"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": [["mod", "theorem", "adjoin_int", ["algebra"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_range", ["alg_hom"]], ["add", "theorem", "map_div", ["alg_hom"]], ["add", "theorem", "map_inv", ["alg_hom"]], ["add", "theorem", "mem_range", ["alg_hom"]], ["add", "theorem", "algebra_map_of_subring", ["algebra"]], ["add", "theorem", "algebra_map_of_subring_apply", ["algebra"]], ["add", "theorem", "coe_algebra_map_of_subring", ["algebra"]], ["add", "theorem", "is_subring_algebra_map_apply", ["algebra"]], ["add", "theorem", "is_subring_coe_algebra_map", ["algebra"]], ["add", "theorem", "is_subring_coe_algebra_map_hom", ["algebra"]], ["del", "theorem", "subring_algebra_map_apply", ["algebra"]], ["del", "theorem", "subring_coe_algebra_map", ["algebra"]], ["del", "theorem", "subring_coe_algebra_map_hom", ["algebra"]], ["add", "theorem", "mem_subalgebra_of_is_subring", []], ["mod", "theorem", "mem_subalgebra_of_subring", []], ["add", "def", "to_subring", ["subalgebra"]], ["add", "def", "subalgebra_of_is_subring", []], ["mod", "def", "subalgebra_of_subring", []]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "mem_range_self", ["ring_hom"]], ["add", "theorem", "surjective_onto_range", ["ring_hom"]], ["add", "def", "to_subring", ["set"]], ["add", "theorem", "sub_mem", ["subring"]], ["del", "def", "to_comm_ring", ["subring"]]]}]}, {"timestamp": 1600774133, "sha": "d09ef4ab", "message": "feat(category_theory/monoidal): transport monoidal structure along an equivalence (#4123)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "theorem", "functor_unit_comp", ["category_theory", "equivalence"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["mod", "theorem", "id_tensor_comp_tensor_id", ["category_theory", "monoidal_category"]], ["mod", "theorem", "tensor_id_comp_id_tensor", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["add", "def", "id", ["category_theory", "lax_monoidal_functor"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/transport.lean", "changes": [["add", "def", "from_transported", ["category_theory", "monoidal"]], ["add", "def", "lax_from_transported", ["category_theory", "monoidal"]], ["add", "def", "lax_to_transported", ["category_theory", "monoidal"]], ["add", "def", "to_transported", ["category_theory", "monoidal"]], ["add", "def", "transport", ["category_theory", "monoidal"]], ["add", "def", "transported", ["category_theory", "monoidal"]], ["add", "def", "transported_monoidal_counit_iso", ["category_theory", "monoidal"]], ["add", "def", "transported_monoidal_unit_iso", ["category_theory", "monoidal"]]]}]}, {"timestamp": 1600774131, "sha": "caffd024", "message": "feat(data/polynomial/degree/trailing_degree): basic definitions and properties (#4113)\nAdds trailing_degree, trailing_nat_degree, trailing_coeff and various lemmas add functionality to work with trailing coefficients", "changes": [{"oldPath": null, "newPath": "src/data/polynomial/degree/trailing_degree.lean", "changes": [["add", "theorem", "coeff_eq_zero_of_lt_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "coeff_eq_zero_of_trailing_degree_lt", ["polynomial"]], ["add", "theorem", "coeff_nat_trailing_degree_eq_zero_of_trailing_degree_lt", ["polynomial"]], ["add", "theorem", "coeff_nat_trailing_degree_pred_eq_zero", ["polynomial"]], ["add", "theorem", "le_trailing_degree_C", ["polynomial"]], ["add", "theorem", "le_trailing_degree_C_mul_X_pow", ["polynomial"]], ["add", "theorem", "le_trailing_degree_X", ["polynomial"]], ["add", "theorem", "le_trailing_degree_X_pow", ["polynomial"]], ["add", "theorem", "le_trailing_degree_of_ne_zero", ["polynomial"]], ["add", "theorem", "monomial_le_trailing_degree", ["polynomial"]], ["add", "def", "nat_trailing_degree", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_C", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_X", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_X_le", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_eq_of_trailing_degree_eq", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_eq_of_trailing_degree_eq_some", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_int_cast", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_le_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_le_of_ne_zero", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_le_of_trailing_degree_le", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_le_trailing_degree", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_nat_cast", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_neg", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_one", ["polynomial"]], ["add", "theorem", "nat_trailing_degree_zero", ["polynomial"]], ["add", "theorem", "ne_zero_of_trailing_degree_lt", ["polynomial"]], ["add", "def", "next_coeff_up", ["polynomial"]], ["add", "theorem", "next_coeff_up_C_eq_zero", ["polynomial"]], ["add", "theorem", "next_coeff_up_of_pos_nat_trailing_degree", ["polynomial"]], ["add", "def", "trailing_coeff", ["polynomial"]], ["add", "def", "trailing_degree", ["polynomial"]], ["add", "theorem", "trailing_degree_C", ["polynomial"]], ["add", "theorem", "trailing_degree_X", ["polynomial"]], ["add", "theorem", "trailing_degree_eq_iff_nat_trailing_degree_eq", ["polynomial"]], ["add", "theorem", "trailing_degree_eq_iff_nat_trailing_degree_eq_of_pos", ["polynomial"]], ["add", "theorem", "trailing_degree_eq_nat_trailing_degree", ["polynomial"]], ["add", "theorem", "trailing_degree_eq_top", ["polynomial"]], ["add", "theorem", "trailing_degree_le_trailing_degree", ["polynomial"]], ["add", "theorem", "trailing_degree_lt_wf", ["polynomial"]], ["add", "theorem", "trailing_degree_monomial", ["polynomial"]], ["add", "theorem", "trailing_degree_ne_of_nat_trailing_degree_ne", ["polynomial"]], ["add", "theorem", "trailing_degree_neg", ["polynomial"]], ["add", "theorem", "trailing_degree_one", ["polynomial"]], ["add", "theorem", "trailing_degree_one_le", ["polynomial"]], ["add", "theorem", "trailing_degree_zero", ["polynomial"]], ["add", "theorem", "def", ["polynomial", "trailing_monic"]], ["add", "theorem", "trailing_coeff", ["polynomial", "trailing_monic"]], ["add", "def", "trailing_monic", ["polynomial"]]]}]}, {"timestamp": 1600769056, "sha": "58d0bfcc", "message": "feat(topology/sheaves): alternate formulation of the sheaf condition (#4190)\nCurrently the sheaf condition is stated as it often is in textbooks, e.g. \nhttps://stacks.math.columbia.edu/tag/0072. That is, it is about an equalizer of the two maps `∏ F.obj (U i) ⟶ ∏ F.obj (U i) ⊓ (U j)`.\nThis PR adds an equivalent formulation, saying that `F.obj (supr U)` (with its natural projection maps) is the limit of the diagram consisting of the `F.obj (U i)` and the `F.obj (U i ⊓ U j)`. \nI'd like to add further reformulations in subsequent PRs, in particular the nice one I saw in Lurie's SAG, just saying that `F.obj (supr U)` is the limit over the diagram of all `F.obj V` where `V` is an open subset of *some* `U i`. This version is actually much nicer to formalise, and I'm hoping we can translate over quite a lot of what we've already done about the sheaf condition to that version", "changes": [{"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/category/pairwise.lean", "changes": [["add", "def", "comp", ["category_theory", "pairwise"]], ["add", "def", "cone", ["category_theory", "pairwise"]], ["add", "def", "cone_is_limit", ["category_theory", "pairwise"]], ["add", "def", "cone_π_app", ["category_theory", "pairwise"]], ["add", "def", "diagram", ["category_theory", "pairwise"]], ["add", "def", "diagram_map", ["category_theory", "pairwise"]], ["add", "def", "diagram_obj", ["category_theory", "pairwise"]], ["add", "inductive", "hom", ["category_theory", "pairwise"]], ["add", "def", "id", ["category_theory", "pairwise"]], ["add", "inductive", "pairwise", ["category_theory"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "le_of_op_hom", ["category_theory"]], ["add", "def", "op_hom_of_le", ["category_theory"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": [["add", "def", "diagram_comp_preserves_limits", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "map_cone_fork", ["Top", "presheaf", "sheaf_condition"]], ["add", "def", "sheaf_condition_equiv_sheaf_condition_comp", ["Top", "presheaf"]], ["del", "def", "diagram_comp_preserves_limits", ["Top", "sheaf_condition"]], ["del", "def", "map_cone_fork", ["Top", "sheaf_condition"]], ["del", "def", "sheaf_condition_equiv_sheaf_condition_comp", ["Top"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["add", "def", "sheaf_condition", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_equiv_of_iso", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_punit", ["Top", "presheaf"]], ["del", "def", "of_open_embedding", ["Top", "sheaf_condition", "cover"]], ["del", "def", "iso_of_iso", ["Top", "sheaf_condition", "diagram"]], ["del", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "diagram"]], ["del", "def", "diagram", ["Top", "sheaf_condition"]], ["del", "def", "iso_of_iso", ["Top", "sheaf_condition", "fork"]], ["del", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "fork"]], ["del", "def", "fork", ["Top", "sheaf_condition"]], ["del", "theorem", "fork_X", ["Top", "sheaf_condition"]], ["del", "theorem", "fork_ι", ["Top", "sheaf_condition"]], ["del", "theorem", "fork_π_app_walking_parallel_pair_one", ["Top", "sheaf_condition"]], ["del", "theorem", "fork_π_app_walking_parallel_pair_zero", ["Top", "sheaf_condition"]], ["del", "def", "left_res", ["Top", "sheaf_condition"]], ["del", "def", "iso_of_iso", ["Top", "sheaf_condition", "pi_inters"]], ["del", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "pi_inters"]], ["del", "def", "pi_inters", ["Top", "sheaf_condition"]], ["del", "def", "iso_of_iso", ["Top", "sheaf_condition", "pi_opens"]], ["del", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "pi_opens"]], ["del", "def", "pi_opens", ["Top", "sheaf_condition"]], ["del", "def", "res", ["Top", "sheaf_condition"]], ["del", "def", "right_res", ["Top", "sheaf_condition"]], ["del", "theorem", "w", ["Top", "sheaf_condition"]], ["del", "def", "sheaf_condition", ["Top"]], ["del", "def", "sheaf_condition_equiv_of_iso", ["Top"]], ["del", "def", "sheaf_condition_punit", ["Top"]]]}, {"oldPath": null, "newPath": "src/topology/sheaves/sheaf_condition/equalizer_products.lean", "changes": [["add", "def", "of_open_embedding", ["Top", "presheaf", "sheaf_condition_equalizer_products", "cover"]], ["add", "def", "iso_of_iso", ["Top", "presheaf", "sheaf_condition_equalizer_products", "diagram"]], ["add", "def", "iso_of_open_embedding", ["Top", "presheaf", "sheaf_condition_equalizer_products", "diagram"]], ["add", "def", "diagram", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "def", "iso_of_iso", ["Top", "presheaf", "sheaf_condition_equalizer_products", "fork"]], ["add", "def", "iso_of_open_embedding", ["Top", "presheaf", "sheaf_condition_equalizer_products", "fork"]], ["add", "def", "fork", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "theorem", "fork_X", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "theorem", "fork_ι", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "theorem", "fork_π_app_walking_parallel_pair_one", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "theorem", "fork_π_app_walking_parallel_pair_zero", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "def", "left_res", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "def", "iso_of_iso", ["Top", "presheaf", "sheaf_condition_equalizer_products", "pi_inters"]], ["add", "def", "iso_of_open_embedding", ["Top", "presheaf", "sheaf_condition_equalizer_products", "pi_inters"]], ["add", "def", "pi_inters", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "def", "iso_of_iso", ["Top", "presheaf", "sheaf_condition_equalizer_products", "pi_opens"]], ["add", "def", "iso_of_open_embedding", ["Top", "presheaf", "sheaf_condition_equalizer_products", "pi_opens"]], ["add", "def", "pi_opens", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "def", "res", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "def", "right_res", ["Top", "presheaf", "sheaf_condition_equalizer_products"]], ["add", "theorem", "w", ["Top", "presheaf", "sheaf_condition_equalizer_products"]]]}, {"oldPath": null, "newPath": "src/topology/sheaves/sheaf_condition/pairwise_intersections.lean", "changes": [["add", "def", "sheaf_condition_equiv_sheaf_condition_pairwise_intersections", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_equiv_sheaf_condition_preserves_limit_pairwise_intersections", ["Top", "presheaf"]], ["add", "def", "cone_equiv", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "cone_equiv_counit_iso", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "cone_equiv_functor", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "cone_equiv_functor_obj", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "cone_equiv_inverse", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "cone_equiv_inverse_obj", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "cone_equiv_unit_iso", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "cone_equiv_unit_iso_app", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "is_limit_map_cone_of_is_limit_sheaf_condition_fork", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "is_limit_sheaf_condition_fork_of_is_limit_map_cone", ["Top", "presheaf", "sheaf_condition_pairwise_intersections"]], ["add", "def", "sheaf_condition_pairwise_intersections", ["Top", "presheaf"]], ["add", "def", "sheaf_condition_preserves_limit_pairwise_intersections", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": [["add", "def", "to_Type", ["Top", "presheaf"]], ["add", "def", "to_Types", ["Top", "presheaf"]], ["del", "def", "to_Type", ["Top", "sheaf_condition"]], ["del", "def", "to_Types", ["Top", "sheaf_condition"]]]}]}, {"timestamp": 1600764080, "sha": "b4641efe", "message": "feat(l1_space): add measurability to integrable (#4170)\nThis PR defines `integrable` such that `integrable` implies `measurable`. The old version is called `has_finite_integral`.\nThis allows us to drop *many* measurability conditions from lemmas that also require integrability.\nThere are some lemmas that have extra measurability conditions, if it has `integrable` as conclusion without corresponding `measurable` hypothesis.\nThere are many results that require an additional `[measurable_space E]` hypothesis, and some that require `[borel_space E]` or `[second_countable_space E]` (usually when using that addition is measurable).", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_add", ["measure_theory"]], ["add", "theorem", "integral_add_measure'", ["measure_theory"]], ["mod", "theorem", "integral_eq", ["measure_theory"]], ["mod", "theorem", "integral_eq_lintegral_max_sub_lintegral_min", ["measure_theory"]], ["mod", "theorem", "integral_finset_sum", ["measure_theory"]], ["mod", "theorem", "integral_mono", ["measure_theory"]], ["mod", "theorem", "integral_mono_of_nonneg", ["measure_theory"]], ["del", "theorem", "integral_non_integrable", ["measure_theory"]], ["mod", "theorem", "integral_sub", ["measure_theory"]], ["mod", "theorem", "integral_undef", ["measure_theory"]], ["mod", "theorem", "integral_of_fun_eq_integral", ["measure_theory", "l1"]], ["mod", "theorem", "norm_of_fun_eq_integral_norm", ["measure_theory", "l1"]], ["mod", "theorem", "of_simple_func_add", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_sub", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_zero", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "norm_integral_le_of_norm_le", ["measure_theory"]], ["mod", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["mod", "theorem", "integral_sub", ["measure_theory", "simple_func"]], ["mod", "theorem", "tendsto_integral_of_l1", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "eventually_interval_integrable", ["filter", "tendsto"]], ["mod", "theorem", "eventually_interval_integrable_ae", ["filter", "tendsto"]], ["mod", "theorem", "add", ["interval_integrable"]], ["mod", "theorem", "neg", ["interval_integrable"]], ["mod", "theorem", "refl", ["interval_integrable"]], ["mod", "theorem", "sub", ["interval_integrable"]], ["mod", "theorem", "deriv_integral_left", ["interval_integral"]], ["mod", "theorem", "deriv_integral_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "deriv_integral_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "deriv_integral_right", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_left", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "deriv_within_integral_right", ["interval_integral"]], ["mod", "theorem", "fderiv_integral", ["interval_integral"]], ["mod", "theorem", "fderiv_integral_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "fderiv_within_integral_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_add", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_at_right", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "integral_has_deriv_within_at_right", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_at", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_within_at", ["interval_integral"]], ["mod", "theorem", "integral_has_fderiv_within_at_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_left", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_deriv_at_right", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_fderiv_at", ["interval_integral"]], ["mod", "theorem", "integral_has_strict_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["mod", "theorem", "integral_sub", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "integrable_zero", ["measurable"]], ["add", "theorem", "add_measure", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "congr'", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "congr", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "const_mul", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "left_of_add_measure", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "max_zero", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "min_zero", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "mono'", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "mono", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "mono_measure", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "mul_const", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "neg", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "norm", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "right_of_add_measure", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "smul", ["measure_theory", "has_finite_integral"]], ["add", "theorem", "smul_measure", ["measure_theory", "has_finite_integral"]], ["add", "def", "has_finite_integral", ["measure_theory"]], ["add", "theorem", "has_finite_integral_add_measure", ["measure_theory"]], ["add", "theorem", "has_finite_integral_congr'", ["measure_theory"]], ["add", "theorem", "has_finite_integral_congr", ["measure_theory"]], ["add", "theorem", "has_finite_integral_const", ["measure_theory"]], ["add", "theorem", "has_finite_integral_const_iff", ["measure_theory"]], ["add", "theorem", "has_finite_integral_iff_edist", ["measure_theory"]], ["add", "theorem", "has_finite_integral_iff_norm", ["measure_theory"]], ["add", "theorem", "has_finite_integral_iff_of_real", ["measure_theory"]], ["add", "theorem", "has_finite_integral_neg_iff", ["measure_theory"]], ["add", "theorem", "has_finite_integral_norm_iff", ["measure_theory"]], ["add", "theorem", "has_finite_integral_of_bounded", ["measure_theory"]], ["add", "theorem", "has_finite_integral_of_dominated_convergence", ["measure_theory"]], ["add", "theorem", "has_finite_integral_smul_iff", ["measure_theory"]], ["add", "theorem", "has_finite_integral_zero", ["measure_theory"]], ["add", "theorem", "has_finite_integral_zero_measure", ["measure_theory"]], ["mod", "theorem", "add", ["measure_theory", "integrable"]], ["mod", "theorem", "congr'", ["measure_theory", "integrable"]], ["mod", "theorem", "congr", ["measure_theory", "integrable"]], ["add", "theorem", "has_finite_integral", ["measure_theory", "integrable"]], ["mod", "theorem", "left_of_add_measure", ["measure_theory", "integrable"]], ["add", "theorem", "measurable", ["measure_theory", "integrable"]], ["mod", "theorem", "mono'", ["measure_theory", "integrable"]], ["mod", "theorem", "mono", ["measure_theory", "integrable"]], ["mod", "theorem", "mono_measure", ["measure_theory", "integrable"]], ["mod", "theorem", "neg", ["measure_theory", "integrable"]], ["mod", "theorem", "norm", ["measure_theory", "integrable"]], ["mod", "theorem", "right_of_add_measure", ["measure_theory", "integrable"]], ["mod", "theorem", "smul", ["measure_theory", "integrable"]], ["mod", "theorem", "sub", ["measure_theory", "integrable"]], ["mod", "def", "integrable", ["measure_theory"]], ["mod", "theorem", "integrable_congr'", ["measure_theory"]], ["mod", "theorem", "integrable_congr", ["measure_theory"]], ["mod", "theorem", "integrable_finset_sum", ["measure_theory"]], ["del", "theorem", "integrable_iff_edist", ["measure_theory"]], ["del", "theorem", "integrable_iff_norm", ["measure_theory"]], ["del", "theorem", "integrable_iff_of_real", ["measure_theory"]], ["mod", "theorem", "integrable_map_measure", ["measure_theory"]], ["mod", "theorem", "integrable_neg_iff", ["measure_theory"]], ["mod", "theorem", "integrable_norm_iff", ["measure_theory"]], ["del", "theorem", "integrable_of_bounded", ["measure_theory"]], ["del", "theorem", "integrable_of_dominated_convergence", ["measure_theory"]], ["mod", "theorem", "integrable_smul_iff", ["measure_theory"]], ["mod", "theorem", "integrable_zero", ["measure_theory"]], ["del", "theorem", "integrable_zero_measure", ["measure_theory"]], ["mod", "theorem", "dist_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_of_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_of_fun_eq_lintegral_norm", ["measure_theory", "l1"]], ["mod", "def", "of_fun", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_add", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_eq_mk", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_eq_of_fun", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_neg", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_smul", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_sub", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_zero", ["measure_theory", "l1"]], ["mod", "theorem", "to_fun_of_fun", ["measure_theory", "l1"]], ["mod", "def", "l1", ["measure_theory"]], ["mod", "theorem", "lintegral_edist_lt_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "def", "comp_l1", ["continuous_linear_map"]], ["mod", "theorem", "comp_l1_apply", ["continuous_linear_map"]], ["mod", "theorem", "integrable_comp", ["continuous_linear_map"]], ["mod", "theorem", "integral_comp_comm", ["continuous_linear_map"]], ["mod", "theorem", "integral_comp_l1_comm", ["continuous_linear_map"]], ["mod", "theorem", "measurable_comp_l1", ["continuous_linear_map"]], ["mod", "theorem", "norm_comp_l1_apply_le", ["continuous_linear_map"]], ["mod", "theorem", "integrable_on_compact", ["continuous_on"]], ["mod", "theorem", "integrable_on_of_nhds_within", ["is_compact"]], ["add", "theorem", "has_finite_integral_restrict_of_bounded", ["measure_theory"]], ["mod", "theorem", "integrable_indicator_iff", ["measure_theory"]], ["mod", "theorem", "integrable_on_empty", ["measure_theory"]], ["mod", "theorem", "integrable_on_finite_union", ["measure_theory"]], ["mod", "theorem", "integrable_on_finset_union", ["measure_theory"]], ["del", "theorem", "integrable_on_of_bounded", ["measure_theory"]], ["mod", "theorem", "integrable_at_filter", ["measure_theory", "measure", "finite_at_filter"]], ["mod", "theorem", "integrable_at_filter_of_tendsto", ["measure_theory", "measure", "finite_at_filter"]], ["mod", "theorem", "integrable_at_filter_of_tendsto_ae", ["measure_theory", "measure", "finite_at_filter"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["mod", "theorem", "simple_func_sequence_tendsto'", ["measure_theory"]]]}]}, {"timestamp": 1600755402, "sha": "2ae199f1", "message": "refactor(ring_theory/unique_factorization_domain): completes the refactor of `unique_factorization_domain` (#4156)\nRefactors `unique_factorization_domain` to `unique_factorization_monoid`\n`unique_factorization_monoid` is a predicate\n`unique_factorization_monoid` now requires no additive/subtractive structure", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "prod_eq_zero_iff", ["associates"]]]}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["add", "theorem", "mk_normalize", ["associates"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "prod_eq_zero_iff", ["multiset"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["mod", "theorem", "of_ufd_of_unique_irreducible", ["discrete_valuation_ring", "has_unit_mul_pow_irreducible_factorization"]], ["add", "theorem", "ufd", ["discrete_valuation_ring", "has_unit_mul_pow_irreducible_factorization"]], ["mod", "theorem", "of_ufd_of_unique_irreducible", ["discrete_valuation_ring"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": [["del", "theorem", "integer_of_integral", ["unique_factorization_domain"]], ["del", "theorem", "integrally_closed", ["unique_factorization_domain"]], ["add", "theorem", "integer_of_integral", ["unique_factorization_monoid"]], ["add", "theorem", "integrally_closed", ["unique_factorization_monoid"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["del", "theorem", "associates_irreducible_iff_prime", ["associates"]], ["del", "def", "factors'", ["associates"]], ["del", "def", "factors", ["associates"]], ["mod", "theorem", "factors_mk", ["associates"]], ["mod", "theorem", "map_subtype_coe_factors'", ["associates"]], ["mod", "def", "{u}", ["associates"]], ["del", "theorem", "coprime_iff_gcd_eq_one", []], ["del", "theorem", "exists_prime_dvd_of_gcd_ne_one", []], ["add", "theorem", "irreducible_iff_prime_of_exists_prime_of_factor", []], ["add", "theorem", "irreducible_iff_prime_of_exists_unique_irreducible_of_factor", []], ["add", "theorem", "prime_factors_irreducible", []], ["add", "theorem", "prime_factors_unique", []], ["del", "theorem", "dvd_of_dvd_mul_left_of_no_prime_factors", ["unique_factorization_domain"]], ["del", "theorem", "dvd_of_dvd_mul_right_of_no_prime_factors", ["unique_factorization_domain"]], ["del", "theorem", "exists_mem_factors_of_dvd", ["unique_factorization_domain"]], ["del", "theorem", "exists_reduced_factors'", ["unique_factorization_domain"]], ["del", "theorem", "exists_reduced_factors", ["unique_factorization_domain"]], ["del", "theorem", "factors_irreducible", ["unique_factorization_domain"]], ["del", "theorem", "induction_on_prime", ["unique_factorization_domain"]], ["del", "theorem", "irreducible_factors", ["unique_factorization_domain"]], ["del", "theorem", "irreducible_iff_prime", ["unique_factorization_domain"]], ["del", "theorem", "no_factors_of_no_prime_factors", ["unique_factorization_domain"]], ["del", "def", "of_unique_irreducible_factorization", ["unique_factorization_domain"]], ["del", "def", "to_gcd_monoid", ["unique_factorization_domain"]], ["del", "theorem", "unique", ["unique_factorization_domain"]], ["add", "theorem", "dvd_of_dvd_mul_left_of_no_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "dvd_of_dvd_mul_right_of_no_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "exists_mem_factors_of_dvd", ["unique_factorization_monoid"]], ["add", "theorem", "exists_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "exists_reduced_factors'", ["unique_factorization_monoid"]], ["add", "theorem", "exists_reduced_factors", ["unique_factorization_monoid"]], ["add", "theorem", "factors_irreducible", ["unique_factorization_monoid"]], ["add", "theorem", "factors_prod", ["unique_factorization_monoid"]], ["add", "theorem", "factors_unique", ["unique_factorization_monoid"]], ["add", "theorem", "induction_on_prime", ["unique_factorization_monoid"]], ["add", "theorem", "irreducible_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "no_factors_of_no_prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "normalize_factor", ["unique_factorization_monoid"]], ["add", "theorem", "of_exists_unique_irreducible_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "prime_of_factor", ["unique_factorization_monoid"]], ["add", "theorem", "unique_factorization_monoid_iff_exists_prime_of_factor", []], ["add", "theorem", "unique_factorization_monoid_of_exists_prime_of_factor", []], ["del", "structure", "unique_irreducible_factorization", []], ["add", "theorem", "wf_dvd_monoid_of_exists_prime_of_factor", []]]}]}, {"timestamp": 1600736045, "sha": "480c92cd", "message": "chore(scripts): update nolints.txt (#4207)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1600713931, "sha": "b91df551", "message": "chore(topology/algebra/module): make `topological_module` an abbreviation (#4200)\nAlso prove that a `topological_semiring` is a `topological_semimodule`.", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "topological_module", []]]}]}, {"timestamp": 1600705632, "sha": "92c01257", "message": "chore(data/nat/digits): use nat namespace (#4201)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["del", "theorem", "base_pow_length_digits_le'", []], ["del", "theorem", "base_pow_length_digits_le", []], ["del", "theorem", "coe_int_of_digits", []], ["del", "theorem", "coe_of_digits", []], ["del", "def", "digits", []], ["del", "theorem", "digits_add", []], ["del", "theorem", "digits_add_two_add_one", []], ["del", "def", "digits_aux", []], ["del", "def", "digits_aux_0", []], ["del", "def", "digits_aux_1", []], ["del", "theorem", "digits_aux_def", []], ["del", "theorem", "digits_aux_zero", []], ["del", "theorem", "digits_eq_nil_iff_eq_zero", []], ["del", "theorem", "digits_last", []], ["del", "theorem", "digits_len_le_digits_len_succ", []], ["del", "theorem", "digits_lt_base'", []], ["del", "theorem", "digits_lt_base", []], ["del", "theorem", "digits_ne_nil_iff_ne_zero", []], ["del", "theorem", "digits_of_digits", []], ["del", "theorem", "digits_of_lt", []], ["del", "theorem", "digits_one", []], ["del", "theorem", "digits_one_succ", []], ["del", "theorem", "digits_zero", []], ["del", "theorem", "digits_zero_of_eq_zero", []], ["del", "theorem", "digits_zero_succ", []], ["del", "theorem", "digits_zero_zero", []], ["del", "theorem", "dvd_iff_dvd_digits_sum", []], ["del", "theorem", "dvd_iff_dvd_of_digits", []], ["del", "theorem", "dvd_of_digits_sub_of_digits", []], ["del", "theorem", "eleven_dvd_iff", []], ["del", "theorem", "last_digit_ne_zero", []], ["del", "theorem", "le_digits_len_le", []], ["del", "theorem", "lt_base_pow_length_digits'", []], ["del", "theorem", "lt_base_pow_length_digits", []], ["del", "theorem", "modeq_digits_sum", []], ["del", "theorem", "modeq_eleven_digits_sum", []], ["del", "theorem", "modeq_nine_digits_sum", []], ["del", "theorem", "modeq_three_digits_sum", []], ["add", "theorem", "base_pow_length_digits_le'", ["nat"]], ["add", "theorem", "base_pow_length_digits_le", ["nat"]], ["add", "theorem", "coe_int_of_digits", ["nat"]], ["add", "theorem", "coe_of_digits", ["nat"]], ["add", "def", "digits", ["nat"]], ["add", "theorem", "digits_add", ["nat"]], ["add", "theorem", "digits_add_two_add_one", ["nat"]], ["add", "def", "digits_aux", ["nat"]], ["add", "def", "digits_aux_0", ["nat"]], ["add", "def", "digits_aux_1", ["nat"]], ["add", "theorem", "digits_aux_def", ["nat"]], ["add", "theorem", "digits_aux_zero", ["nat"]], ["add", "theorem", "digits_eq_nil_iff_eq_zero", ["nat"]], ["add", "theorem", "digits_last", ["nat"]], ["add", "theorem", "digits_len_le_digits_len_succ", ["nat"]], ["add", "theorem", "digits_lt_base'", ["nat"]], ["add", "theorem", "digits_lt_base", ["nat"]], ["add", "theorem", "digits_ne_nil_iff_ne_zero", ["nat"]], ["add", "theorem", "digits_of_digits", ["nat"]], ["add", "theorem", "digits_of_lt", ["nat"]], ["add", "theorem", "digits_one", ["nat"]], ["add", "theorem", "digits_one_succ", ["nat"]], ["add", "theorem", "digits_zero", ["nat"]], ["add", "theorem", "digits_zero_of_eq_zero", ["nat"]], ["add", "theorem", "digits_zero_succ", ["nat"]], ["add", "theorem", "digits_zero_zero", ["nat"]], ["add", "theorem", "dvd_iff_dvd_digits_sum", ["nat"]], ["add", "theorem", "dvd_iff_dvd_of_digits", ["nat"]], ["add", "theorem", "dvd_of_digits_sub_of_digits", ["nat"]], ["add", "theorem", "eleven_dvd_iff", ["nat"]], ["add", "theorem", "last_digit_ne_zero", ["nat"]], ["add", "theorem", "le_digits_len_le", ["nat"]], ["add", "theorem", "lt_base_pow_length_digits'", ["nat"]], ["add", "theorem", "lt_base_pow_length_digits", ["nat"]], ["add", "theorem", "modeq_digits_sum", ["nat"]], ["add", "theorem", "modeq_eleven_digits_sum", ["nat"]], ["add", "theorem", "modeq_nine_digits_sum", ["nat"]], ["add", "theorem", "modeq_three_digits_sum", ["nat"]], ["add", "theorem", "nine_dvd_iff", ["nat"]], ["add", "def", "of_digits", ["nat"]], ["add", "theorem", "of_digits_append", ["nat"]], ["add", "theorem", "of_digits_digits", ["nat"]], ["add", "theorem", "of_digits_digits_append_digits", ["nat"]], ["add", "theorem", "of_digits_eq_foldr", ["nat"]], ["add", "theorem", "of_digits_lt_base_pow_length'", ["nat"]], ["add", "theorem", "of_digits_lt_base_pow_length", ["nat"]], ["add", "theorem", "of_digits_mod", ["nat"]], ["add", "theorem", "of_digits_modeq'", ["nat"]], ["add", "theorem", "of_digits_modeq", ["nat"]], ["add", "theorem", "of_digits_neg_one", ["nat"]], ["add", "theorem", "of_digits_one", ["nat"]], ["add", "theorem", "of_digits_one_cons", ["nat"]], ["add", "theorem", "of_digits_singleton", ["nat"]], ["add", "theorem", "of_digits_zmod", ["nat"]], ["add", "theorem", "of_digits_zmodeq'", ["nat"]], ["add", "theorem", "of_digits_zmodeq", ["nat"]], ["add", "theorem", "pow_length_le_mul_of_digits", ["nat"]], ["add", "theorem", "three_dvd_iff", ["nat"]], ["add", "theorem", "zmodeq_of_digits_digits", ["nat"]], ["del", "theorem", "nine_dvd_iff", []], ["del", "def", "of_digits", []], ["del", "theorem", "of_digits_append", []], ["del", "theorem", "of_digits_digits", []], ["del", "theorem", "of_digits_digits_append_digits", []], ["del", "theorem", "of_digits_eq_foldr", []], ["del", "theorem", "of_digits_lt_base_pow_length'", []], ["del", "theorem", "of_digits_lt_base_pow_length", []], ["del", "theorem", "of_digits_mod", []], ["del", "theorem", "of_digits_modeq'", []], ["del", "theorem", "of_digits_modeq", []], ["del", "theorem", "of_digits_neg_one", []], ["del", "theorem", "of_digits_one", []], ["del", "theorem", "of_digits_one_cons", []], ["del", "theorem", "of_digits_singleton", []], ["del", "theorem", "of_digits_zmod", []], ["del", "theorem", "of_digits_zmodeq'", []], ["del", "theorem", "of_digits_zmodeq", []], ["del", "theorem", "pow_length_le_mul_of_digits", []], ["del", "theorem", "three_dvd_iff", []], ["del", "theorem", "zmodeq_of_digits_digits", []]]}]}, {"timestamp": 1600693618, "sha": "4a8c38e4", "message": "chore(category_theory/limits/lattice): cleanup (#4191)", "changes": [{"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": [["add", "def", "colimit_cocone", ["category_theory", "limits", "complete_lattice"]], ["add", "def", "colimit_iso_supr", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "colimit_iso_supr_hom", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "colimit_iso_supr_inv", ["category_theory", "limits", "complete_lattice"]], ["add", "def", "limit_cone", ["category_theory", "limits", "complete_lattice"]], ["add", "def", "limit_iso_infi", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "limit_iso_infi_hom", ["category_theory", "limits", "complete_lattice"]], ["add", "theorem", "limit_iso_infi_inv", ["category_theory", "limits", "complete_lattice"]]]}]}, {"timestamp": 1600683683, "sha": "cd4a91f7", "message": "fix(scripts/mk_all): macOS compatibility fix (#4148)\n`readlink -f` doesn't work macOS unfortunately - there are alternatives but I think it's probably safe to remove it altogether? This assumes `mk_all.sh` isn't a symlink but I can't think of a reason why it should be - and `rm_all.sh` uses `dirname \"${BASH_SOURCE[0]}\"` directly 🙂", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}]}, {"timestamp": 1600677474, "sha": "e483298a", "message": "feat(ring_theory/unique_factorization_domain): API for coprime, coprime factor of a power is a power (#4049)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "exists_non_zero_rep", ["associates"]], ["add", "theorem", "exists_rep", ["associates"]]]}, {"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "count_sum'", ["multiset"]], ["add", "theorem", "exists_smul_of_dvd_count", ["multiset"]], ["add", "theorem", "to_finset_sum_count_smul_eq", ["multiset"]]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["mod", "theorem", "pow_eq_zero'", []], ["mod", "theorem", "pow_ne_zero'", []]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "dvd_prod", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_sum", ["multiset"]], ["mod", "theorem", "dvd_prod", ["multiset"]], ["add", "theorem", "map_repeat", ["multiset"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "associates_irreducible_iff_prime", ["associates"]], ["add", "def", "bcount", ["associates"]], ["add", "def", "bfactor_set_mem", ["associates"]], ["add", "theorem", "coprime_iff_inf_one", ["associates"]], ["add", "def", "count", ["associates"]], ["add", "theorem", "count_mul", ["associates"]], ["add", "theorem", "count_mul_of_coprime'", ["associates"]], ["add", "theorem", "count_mul_of_coprime", ["associates"]], ["add", "theorem", "count_of_coprime", ["associates"]], ["add", "theorem", "count_pow", ["associates"]], ["add", "theorem", "count_reducible", ["associates"]], ["add", "theorem", "count_some", ["associates"]], ["add", "theorem", "count_zero", ["associates"]], ["add", "theorem", "dvd_count_of_dvd_count_mul", ["associates"]], ["add", "theorem", "dvd_count_pow", ["associates"]], ["add", "theorem", "dvd_of_mem_factors'", ["associates"]], ["add", "theorem", "dvd_of_mem_factors", ["associates"]], ["add", "theorem", "eq_pow_of_mul_eq_pow", ["associates"]], ["add", "theorem", "exists_prime_dvd_of_not_inf_one", ["associates"]], ["add", "def", "factor_set_mem", ["associates"]], ["add", "theorem", "factor_set_mem_eq_mem", ["associates"]], ["add", "theorem", "factors_one", ["associates"]], ["add", "theorem", "factors_prime_pow", ["associates"]], ["add", "theorem", "is_pow_of_dvd_count", ["associates"]], ["add", "theorem", "le_of_count_ne_zero", ["associates"]], ["add", "theorem", "mem_factor_set_some", ["associates"]], ["add", "theorem", "mem_factor_set_top", ["associates"]], ["add", "theorem", "mem_factors'_iff_dvd", ["associates"]], ["add", "theorem", "mem_factors'_of_dvd", ["associates"]], ["add", "theorem", "mem_factors_iff_dvd", ["associates"]], ["add", "theorem", "mem_factors_of_dvd", ["associates"]], ["add", "theorem", "pow_factors", ["associates"]], ["add", "theorem", "prime_pow_dvd_iff_le", ["associates"]], ["add", "theorem", "reducible_not_mem_factor_set", ["associates"]], ["add", "theorem", "coprime_iff_gcd_eq_one", []], ["add", "theorem", "exists_prime_dvd_of_gcd_ne_one", []]]}]}, {"timestamp": 1600668513, "sha": "40f582b9", "message": "feat(data/*/nat_antidiagonal): induction lemmas about antidiagonals (#4193)\nAdds a `nat.antidiagonal_succ` lemma for `list`, `multiset`, and `finset`, useful for proving facts about power series derivatives", "changes": [{"oldPath": "src/algebra/big_operators/default.lean", "newPath": "src/algebra/big_operators/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/big_operators/nat_antidiagonal.lean", "changes": [["add", "theorem", "sum_antidiagonal_succ", ["finset", "nat"]]]}, {"oldPath": "src/data/finset/nat_antidiagonal.lean", "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_succ", ["finset", "nat"]], ["add", "theorem", "map_swap_antidiagonal", ["finset", "nat"]]]}, {"oldPath": "src/data/list/nat_antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_succ", ["list", "nat"]]]}, {"oldPath": "src/data/multiset/nat_antidiagonal.lean", "newPath": "src/data/multiset/nat_antidiagonal.lean", "changes": [["add", "theorem", "antidiagonal_succ", ["multiset", "nat"]]]}]}, {"timestamp": 1600658592, "sha": "d8e7bb56", "message": "feat(tactic/tauto): optional closer tactic for `tauto` (#4189)\n`tauto` sometimes fails on easy subgoals; instead of backtracking\nand discarding the work, the user can now supply a closer tactic\nto the remaining goals, such as `cc`, `simp`, or `linarith`.\nthis also wraps `tauto` in a `focus1`, which allows for better\nerror messages.", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": "test/tauto.lean", "newPath": "test/tauto.lean", "changes": []}]}, {"timestamp": 1600646102, "sha": "f77d5d6f", "message": "feat(data/finset): add lemma for empty filter (#4188)\nA little lemma, analogous to `filter_true_of_mem` to make it convenient to reduce a filter which always fails.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "filter_false_of_mem", ["finset"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}]}, {"timestamp": 1600638816, "sha": "db9842c8", "message": "feat(analysis/calculus/times_cont_diff): inversion of continuous linear maps is smooth (#4185)\n- Introduce an `inverse` function on the space of continuous linear maps between two Banach spaces, which is the inverse if the map is a continuous linear equivalence and zero otherwise.\n- Prove that this function is `times_cont_diff_at` each `continuous_linear_equiv`.\n- Some of the constructions used had been introduced in #3282 and placed in `analysis.normed_space.operator_norm` (normed spaces); they are moved to the earlier file `topology.algebra.module` (topological vector spaces).", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "inverse_non_unit", ["ring"]], ["mod", "theorem", "inverse_unit", ["ring"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "differentiable_at_inverse", []], ["del", "theorem", "has_fderiv_at_inverse", []], ["add", "theorem", "has_fderiv_at_ring_inverse", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "prod", ["times_cont_diff_at"]], ["del", "theorem", "times_cont_diff_at_inverse", []], ["add", "theorem", "times_cont_diff_at_map_inverse", []], ["add", "theorem", "times_cont_diff_at_ring_inverse", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "def", "of_unit", ["continuous_linear_equiv"]], ["del", "def", "to_unit", ["continuous_linear_equiv"]], ["del", "def", "units_equiv", ["continuous_linear_equiv"]], ["del", "theorem", "units_equiv_to_continuous_linear_map", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "comp_coe", ["continuous_linear_equiv"]], ["add", "def", "of_unit", ["continuous_linear_equiv"]], ["add", "theorem", "refl_symm", ["continuous_linear_equiv"]], ["add", "theorem", "symm_trans_apply", ["continuous_linear_equiv"]], ["add", "def", "to_unit", ["continuous_linear_equiv"]], ["add", "theorem", "trans_apply", ["continuous_linear_equiv"]], ["add", "def", "units_equiv", ["continuous_linear_equiv"]], ["add", "theorem", "units_equiv_apply", ["continuous_linear_equiv"]], ["add", "theorem", "inverse_equiv", ["continuous_linear_map"]], ["add", "theorem", "inverse_non_equiv", ["continuous_linear_map"]], ["add", "theorem", "ring_inverse_eq_map_inverse", ["continuous_linear_map"]], ["add", "theorem", "ring_inverse_equiv", ["continuous_linear_map"]], ["add", "theorem", "to_ring_inverse", ["continuous_linear_map"]]]}]}, {"timestamp": 1600638814, "sha": "d774ef68", "message": "feat(topology/path_connected): add lemmas about paths and continuous families of paths (#4063)\nFrom the sphere eversion project (see https://github.com/leanprover-community/sphere-eversion/pull/12)", "changes": [{"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "exists_path_through_family'", ["is_path_connected"]], ["add", "theorem", "exists_path_through_family", ["is_path_connected"]], ["add", "theorem", "continuous_uncurry_extend_of_continuous_family", ["path"]], ["add", "theorem", "extend_extends'", ["path"]], ["add", "theorem", "extend_extends", ["path"]], ["add", "theorem", "extend_le_zero", ["path"]], ["add", "theorem", "extend_one_le", ["path"]], ["add", "theorem", "extend_range", ["path"]], ["add", "theorem", "refl_extend", ["path"]], ["add", "theorem", "refl_range", ["path"]], ["add", "theorem", "refl_symm", ["path"]], ["add", "theorem", "refl_trans_refl", ["path"]], ["add", "theorem", "symm_cast", ["path"]], ["add", "theorem", "symm_continuous_family", ["path"]], ["add", "theorem", "symm_range", ["path"]], ["add", "theorem", "trans_cast", ["path"]], ["add", "theorem", "trans_continuous_family", ["path"]], ["add", "theorem", "trans_range", ["path"]], ["add", "def", "truncate", ["path"]], ["add", "theorem", "truncate_const_continuous_family", ["path"]], ["add", "theorem", "truncate_continuous_family", ["path"]], ["add", "def", "truncate_of_le", ["path"]], ["add", "theorem", "truncate_one_one", ["path"]], ["add", "theorem", "truncate_range", ["path"]], ["add", "theorem", "truncate_self", ["path"]], ["add", "theorem", "truncate_zero_one", ["path"]], ["add", "theorem", "truncate_zero_zero", ["path"]], ["add", "theorem", "exists_path_through_family'", ["path_connected_space"]], ["add", "theorem", "exists_path_through_family", ["path_connected_space"]], ["add", "theorem", "proj_I_one", []], ["add", "theorem", "proj_I_zero", []]]}]}, {"timestamp": 1600632332, "sha": "884e90be", "message": "feat(measure_theory): Borel-Cantelli (#4166)\n```lean\nlemma measure_limsup_eq_zero {s : ℕ → set α} (hs : ∀ i, is_measurable (s i))\n (hs' : (∑' i, μ (s i)) ≠ ⊤) : μ (limsup at_top s) = 0\n```\nThere is a converse statement that is also called Borel-Cantelli, but we can't state it yet, because we don't know what independent events are.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "sub_eq_iff_eq_add", ["nnreal"]], ["add", "theorem", "sub_lt_iff_lt_add", ["nnreal"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_eventually_not_mem", ["measure_theory"]], ["add", "theorem", "measure_limsup_eq_zero", ["measure_theory"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_ge_eq_infi_nat_add", []], ["add", "theorem", "supr_ge_eq_supr_nat_add", []]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "liminf_eq_supr_infi_of_nat'", ["filter"]], ["add", "theorem", "limsup_eq_infi_supr_of_nat'", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_zero_iff", []], ["add", "theorem", "le_has_sum'", []], ["add", "theorem", "le_has_sum", []], ["add", "theorem", "le_tsum'", []], ["add", "theorem", "le_tsum", []], ["add", "theorem", "tsum_eq_zero_iff", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "summable_to_nnreal_of_tsum_ne_top", ["ennreal"]], ["add", "theorem", "tendsto_sum_nat_add", ["ennreal"]], ["add", "theorem", "to_nnreal_apply_of_tsum_ne_top", ["ennreal"]], ["add", "theorem", "tendsto_sum_nat_add", ["nnreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "sum_add_tsum_nat_add", ["nnreal"]], ["add", "theorem", "summable_nat_add", ["nnreal"]]]}]}, {"timestamp": 1600619304, "sha": "2c9b0634", "message": "feat(algebra/big_operators): add prod boole lemma (#4192)\nA small lemma to simplify products of indicator functions", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_boole", ["finset"]]]}]}, {"timestamp": 1600562840, "sha": "44667ba6", "message": "feat(ring_theory/power_series): power series lemmas (#4171)\nA couple of little lemmas for multiplication and coefficients", "changes": [{"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "theorem", "coeff_C_mul", ["mv_power_series"]], ["add", "theorem", "coeff_smul", ["mv_power_series"]], ["add", "theorem", "coeff_C_mul", ["power_series"]], ["add", "theorem", "coeff_smul", ["power_series"]]]}]}, {"timestamp": 1600560033, "sha": "9232032b", "message": "refactor(linear_algebra/tensor_algebra): build as a quotient of a free algebra (#4079)", "changes": [{"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["mod", "theorem", "hom_ext", ["tensor_algebra"]], ["del", "def", "lift_fun", ["tensor_algebra"]], ["add", "theorem", "lift_ι_apply", ["tensor_algebra"]], ["del", "def", "has_add", ["tensor_algebra", "pre"]], ["del", "def", "has_coe_module", ["tensor_algebra", "pre"]], ["del", "def", "has_coe_semiring", ["tensor_algebra", "pre"]], ["del", "def", "has_mul", ["tensor_algebra", "pre"]], ["del", "def", "has_one", ["tensor_algebra", "pre"]], ["del", "def", "has_scalar", ["tensor_algebra", "pre"]], ["del", "def", "has_zero", ["tensor_algebra", "pre"]], ["del", "inductive", "pre", ["tensor_algebra"]], ["mod", "inductive", "rel", ["tensor_algebra"]], ["add", "theorem", "ring_quot_mk_alg_hom_free_algebra_ι_eq_ι", ["tensor_algebra"]], ["mod", "def", "tensor_algebra", []]]}]}, {"timestamp": 1600557069, "sha": "7013e5b7", "message": "feat(category_theory/internal): commutative monoid objects (#4186)\nThis reprises a series of our recent PRs on monoid objects in monoidal categories, developing the same material for commutative monoid objects in braided categories.", "changes": [{"oldPath": "src/category_theory/monad/equiv_mon.lean", "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monoidal/CommMon_.lean", "changes": [["add", "theorem", "comp_hom", ["CommMon_"]], ["add", "def", "CommMon_to_lax_braided", ["CommMon_", "equiv_lax_braided_functor_punit"]], ["add", "def", "counit_iso", ["CommMon_", "equiv_lax_braided_functor_punit"]], ["add", "def", "lax_braided_to_CommMon", ["CommMon_", "equiv_lax_braided_functor_punit"]], ["add", "def", "unit_iso", ["CommMon_", "equiv_lax_braided_functor_punit"]], ["add", "def", "equiv_lax_braided_functor_punit", ["CommMon_"]], ["add", "def", "forget₂_Mon_", ["CommMon_"]], ["add", "theorem", "forget₂_Mon_map_hom", ["CommMon_"]], ["add", "theorem", "forget₂_Mon_obj_mul", ["CommMon_"]], ["add", "theorem", "forget₂_Mon_obj_one", ["CommMon_"]], ["add", "theorem", "id_hom", ["CommMon_"]], ["add", "def", "trivial", ["CommMon_"]], ["add", "structure", "CommMon_", []], ["add", "def", "map_CommMon", ["category_theory", "lax_braided_functor"]], ["add", "def", "map_CommMon_functor", ["category_theory", "lax_braided_functor"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/Mod.lean", "changes": [["add", "theorem", "assoc_flip", ["Mod"]], ["add", "def", "comap", ["Mod"]], ["add", "def", "comp", ["Mod"]], ["add", "theorem", "comp_hom'", ["Mod"]], ["add", "def", "forget", ["Mod"]], ["add", "structure", "hom", ["Mod"]], ["add", "def", "id", ["Mod"]], ["add", "theorem", "id_hom'", ["Mod"]], ["add", "def", "regular", ["Mod"]], ["add", "structure", "Mod", []]]}, {"oldPath": "src/category_theory/monoidal/internal.lean", "newPath": "src/category_theory/monoidal/Mon_.lean", "changes": [["del", "theorem", "assoc_flip", ["Mod"]], ["del", "def", "comap", ["Mod"]], ["del", "def", "comp", ["Mod"]], ["del", "theorem", "comp_hom'", ["Mod"]], ["del", "def", "forget", ["Mod"]], ["del", "structure", "hom", ["Mod"]], ["del", "def", "id", ["Mod"]], ["del", "theorem", "id_hom'", ["Mod"]], ["del", "def", "regular", ["Mod"]], ["del", "structure", "Mod", []]]}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": [["add", "theorem", "comp_to_nat_trans", ["category_theory", "braided_functor"]], ["add", "def", "mk_iso", ["category_theory", "braided_functor"]], ["add", "def", "to_lax_braided_functor", ["category_theory", "braided_functor"]], ["add", "def", "braided_functor", ["category_theory", "discrete"]], ["add", "def", "comp", ["category_theory", "lax_braided_functor"]], ["add", "theorem", "comp_to_nat_trans", ["category_theory", "lax_braided_functor"]], ["add", "def", "id", ["category_theory", "lax_braided_functor"]], ["add", "def", "mk_iso", ["category_theory", "lax_braided_functor"]], ["add", "structure", "lax_braided_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/discrete.lean", "newPath": "src/category_theory/monoidal/discrete.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor_category.lean", "newPath": "src/category_theory/monoidal/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/functor_category.lean", "newPath": "src/category_theory/monoidal/internal/functor_category.lean", "changes": [["add", "def", "counit_iso", ["category_theory", "monoidal", "CommMon_functor_category_equivalence"]], ["add", "def", "functor", ["category_theory", "monoidal", "CommMon_functor_category_equivalence"]], ["add", "def", "inverse", ["category_theory", "monoidal", "CommMon_functor_category_equivalence"]], ["add", "def", "unit_iso", ["category_theory", "monoidal", "CommMon_functor_category_equivalence"]], ["add", "def", "CommMon_functor_category_equivalence", ["category_theory", "monoidal"]]]}, {"oldPath": "src/category_theory/monoidal/internal/types.lean", "newPath": "src/category_theory/monoidal/internal/types.lean", "changes": [["add", "def", "functor", ["CommMon_Type_equivalence_CommMon"]], ["add", "def", "inverse", ["CommMon_Type_equivalence_CommMon"]], ["add", "def", "CommMon_Type_equivalence_CommMon", []], ["add", "def", "CommMon_Type_equivalence_CommMon_forget", []]]}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": [["add", "theorem", "braiding_hom_apply", ["category_theory", "monoidal"]], ["add", "theorem", "braiding_inv_apply", ["category_theory", "monoidal"]]]}]}, {"timestamp": 1600547217, "sha": "5b143ff1", "message": "feat(data/set/basic): a few lemmas (#4184)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_union_image_compl_eq_range", ["set"]], ["add", "theorem", "inter_union_compl", ["set"]]]}]}, {"timestamp": 1600544722, "sha": "640ba6c8", "message": "feat(geometry/euclidean): cospherical points (#4178)\nDefine cospherical points in a Euclidean space (the general-dimension\nversion of the two-dimensional concept of a set of points being\nconcyclic) and prove some very basic lemmas about them.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "def", "cospherical", ["euclidean_geometry"]], ["add", "theorem", "cospherical_def", ["euclidean_geometry"]], ["add", "theorem", "cospherical_empty", ["euclidean_geometry"]], ["add", "theorem", "cospherical_insert_singleton", ["euclidean_geometry"]], ["add", "theorem", "cospherical_singleton", ["euclidean_geometry"]], ["add", "theorem", "cospherical_subset", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "circumcenter_eq_of_cospherical", ["euclidean_geometry"]], ["add", "theorem", "circumcenter_eq_of_cospherical_subset", ["euclidean_geometry"]], ["add", "theorem", "circumradius_eq_of_cospherical", ["euclidean_geometry"]], ["add", "theorem", "circumradius_eq_of_cospherical_subset", ["euclidean_geometry"]], ["add", "theorem", "cospherical_iff_exists_mem_of_complete", ["euclidean_geometry"]], ["add", "theorem", "cospherical_iff_exists_mem_of_finite_dimensional", ["euclidean_geometry"]], ["add", "theorem", "exists_circumcenter_eq_of_cospherical", ["euclidean_geometry"]], ["add", "theorem", "exists_circumcenter_eq_of_cospherical_subset", ["euclidean_geometry"]], ["add", "theorem", "exists_circumradius_eq_of_cospherical", ["euclidean_geometry"]], ["add", "theorem", "exists_circumradius_eq_of_cospherical_subset", ["euclidean_geometry"]]]}]}, {"timestamp": 1600542201, "sha": "02b492ab", "message": "feat(category_theory/Mon): Mon_ C has limits when C does (#4133)\nIf `C` has limits, so does `Mon_ C`.\n(This could potentially replace many individual constructions for concrete categories,\nin particular `Mon`, `SemiRing`, `Ring`, and `Algebra R`.)", "changes": [{"oldPath": "src/category_theory/functorial.lean", "newPath": "src/category_theory/functorial.lean", "changes": [["add", "theorem", "map_comp", ["category_theory", "functorial"]], ["add", "theorem", "map_id", ["category_theory", "functorial"]], ["add", "theorem", "map_as_map", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/functorial.lean", "newPath": "src/category_theory/monoidal/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal.lean", "newPath": "src/category_theory/monoidal/internal.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/functor_category.lean", "newPath": "src/category_theory/monoidal/internal/functor_category.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monoidal/internal/limits.lean", "changes": [["add", "def", "forget_map_cone_limit_cone_iso", ["Mon_"]], ["add", "def", "limit", ["Mon_"]], ["add", "def", "limit_cone", ["Mon_"]], ["add", "def", "limit_cone_is_limit", ["Mon_"]]]}, {"oldPath": "src/category_theory/monoidal/limits.lean", "newPath": "src/category_theory/monoidal/limits.lean", "changes": [["add", "theorem", "lim_lax_ε", ["category_theory", "limits"]], ["add", "theorem", "lim_lax_μ", ["category_theory", "limits"]]]}]}, {"timestamp": 1600491082, "sha": "567954fa", "message": "feat(category_theory): `lim : (J ⥤ C) ⥤ C` is lax monoidal when `C` is monoidal (#4132)\nA step towards constructing limits in `Mon_ C` (and thence towards sheaves of modules as internal objects).", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/limits.lean", "changes": [["add", "def", "lim_lax", ["category_theory", "limits"]], ["add", "theorem", "lim_lax_map", ["category_theory", "limits"]], ["add", "theorem", "lim_lax_obj'", ["category_theory", "limits"]], ["add", "theorem", "lim_lax_obj", ["category_theory", "limits"]], ["add", "theorem", "limit_functorial_map", ["category_theory", "limits"]]]}]}, {"timestamp": 1600486387, "sha": "04fe4b6d", "message": "feat(algebra/ring_quot): quotients of noncommutative rings (#4078)", "changes": [{"oldPath": null, "newPath": "src/algebra/ring_quot.lean", "changes": [["add", "theorem", "eq_lift_alg_hom_comp_mk_alg_hom", ["ring_quot"]], ["add", "theorem", "eq_lift_comp_mk_ring_hom", ["ring_quot"]], ["add", "def", "ideal_quotient_to_ring_quot", ["ring_quot"]], ["add", "theorem", "ideal_quotient_to_ring_quot_apply", ["ring_quot"]], ["add", "def", "lift", ["ring_quot"]], ["add", "def", "lift_alg_hom", ["ring_quot"]], ["add", "theorem", "lift_alg_hom_mk_alg_hom_apply", ["ring_quot"]], ["add", "theorem", "lift_alg_hom_unique", ["ring_quot"]], ["add", "theorem", "lift_mk_ring_hom_apply", ["ring_quot"]], ["add", "theorem", "lift_unique", ["ring_quot"]], ["add", "def", "mk_alg_hom", ["ring_quot"]], ["add", "theorem", "mk_alg_hom_coe", ["ring_quot"]], ["add", "theorem", "mk_alg_hom_rel", ["ring_quot"]], ["add", "theorem", "mk_alg_hom_surjective", ["ring_quot"]], ["add", "def", "mk_ring_hom", ["ring_quot"]], ["add", "theorem", "mk_ring_hom_rel", ["ring_quot"]], ["add", "theorem", "mk_ring_hom_surjective", ["ring_quot"]], ["add", "theorem", "add_right", ["ring_quot", "rel"]], ["add", "theorem", "neg", ["ring_quot", "rel"]], ["add", "theorem", "smul", ["ring_quot", "rel"]], ["add", "inductive", "rel", ["ring_quot"]], ["add", "def", "ring_quot_equiv_ideal_quotient", ["ring_quot"]], ["add", "theorem", "ring_quot_ext'", ["ring_quot"]], ["add", "theorem", "ring_quot_ext", ["ring_quot"]], ["add", "def", "ring_quot_to_ideal_quotient", ["ring_quot"]], ["add", "theorem", "ring_quot_to_ideal_quotient_apply", ["ring_quot"]], ["add", "def", "ring_quot", []]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "def", "of_hom_inv", ["ring_equiv"]], ["add", "theorem", "of_hom_inv_apply", ["ring_equiv"]], ["add", "theorem", "of_hom_inv_symm_apply", ["ring_equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mem_Inf", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "def", "of_rel", ["ideal"]]]}]}, {"timestamp": 1600466263, "sha": "bf7a2ed3", "message": "fix(conditionally_complete_lattice): add instance (#4183)\nthere was no instance from `conditionally_complete_linear_order_bot` to `conditionally_complete_linear_order`. It is added by this change.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1600466261, "sha": "c2ae6c0e", "message": "doc(simps): explain short_name (#4182)", "changes": [{"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1600466259, "sha": "0269a76e", "message": "feat(integration): integral commutes with continuous linear maps (#4167)\nfrom the sphere eversion project. Main result:\n```lean\ncontinuous_linear_map.integral_apply_comm {α : Type*} [measurable_space α] {μ : measure α} \n {E : Type*} [normed_group E] [second_countable_topology E] [normed_space ℝ E] [complete_space E]\n [measurable_space E] [borel_space E] {F : Type*} [normed_group F]\n [second_countable_topology F] [normed_space ℝ F] [complete_space F]\n [measurable_space F] [borel_space F] \n {φ : α → E} (L : E →L[ℝ] F) (φ_meas : measurable φ) (φ_int : integrable φ μ) :\n ∫ a, L (φ a) ∂μ = L (∫ a, φ a ∂μ)\n```", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["del", "theorem", "measurable", ["continuous_linear_map"]], ["add", "theorem", "measurable_comp", ["continuous_linear_map"]], ["del", "theorem", "clm_apply", ["measurable"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "def", "comp_l1", ["continuous_linear_map"]], ["add", "def", "comp_l1L", ["continuous_linear_map"]], ["add", "theorem", "comp_l1_apply", ["continuous_linear_map"]], ["add", "def", "comp_l1ₗ", ["continuous_linear_map"]], ["add", "theorem", "continuous_integral_comp_l1", ["continuous_linear_map"]], ["add", "theorem", "integrable_comp", ["continuous_linear_map"]], ["add", "theorem", "integrable_comp_l1", ["continuous_linear_map"]], ["add", "theorem", "integral_comp_comm", ["continuous_linear_map"]], ["add", "theorem", "integral_comp_l1", ["continuous_linear_map"]], ["add", "theorem", "integral_comp_l1_comm", ["continuous_linear_map"]], ["add", "theorem", "measurable_comp_l1", ["continuous_linear_map"]], ["add", "theorem", "norm_comp_l1_apply_le", ["continuous_linear_map"]], ["add", "theorem", "norm_comp_l1_le", ["continuous_linear_map"]], ["add", "theorem", "norm_compl1L_le", ["continuous_linear_map"]], ["mod", "theorem", "induction", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1600460499, "sha": "4e3729b8", "message": "feat(geometry/euclidean/basic): intersections of circles (#4088)\nAdd two versions of the statement that two circles in two-dimensional\nspace intersect in at most two points, along with some lemmas involved\nin the proof (some of which can be interpreted in terms of\nintersections of circles or spheres and lines).", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "dist_smul_vadd_eq_dist", ["euclidean_geometry"]], ["add", "theorem", "dist_smul_vadd_square", ["euclidean_geometry"]], ["add", "theorem", "eq_of_dist_eq_of_dist_eq_of_findim_eq_two", ["euclidean_geometry"]], ["add", "theorem", "eq_of_dist_eq_of_dist_eq_of_mem_of_findim_eq_two", ["euclidean_geometry"]], ["add", "theorem", "inner_vsub_vsub_of_dist_eq_of_dist_eq", ["euclidean_geometry"]]]}]}, {"timestamp": 1600449927, "sha": "9051aa73", "message": "feat(polynomial): prepare for transcendence of e by adding small lemmas (#4175)\nThis will be a series of pull request to prepare for the proof of transcendence of e by adding lots of small lemmas.", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "not_mem_support_iff_coeff_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": [["add", "theorem", "eq_C_of_nat_degree_eq_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "nat_degree_eq_zero_of_derivative_eq_zero", ["polynomial"]]]}]}, {"timestamp": 1600429028, "sha": "ae72826a", "message": "feat(data/mv_polynomial): define comap (#4161)\nMore from the Witt vector branch.\nCo-authored by: Johan Commelin ", "changes": [{"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/mv_polynomial/comap.lean", "changes": [["add", "theorem", "comap_apply", ["mv_polynomial"]], ["add", "theorem", "comap_comp", ["mv_polynomial"]], ["add", "theorem", "comap_comp_apply", ["mv_polynomial"]], ["add", "theorem", "comap_eq_id_of_eq_id", ["mv_polynomial"]], ["add", "theorem", "comap_equiv_coe", ["mv_polynomial"]], ["add", "theorem", "comap_equiv_symm_coe", ["mv_polynomial"]], ["add", "theorem", "comap_id", ["mv_polynomial"]], ["add", "theorem", "comap_id_apply", ["mv_polynomial"]], ["add", "theorem", "comap_rename", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/rename.lean", "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["mod", "def", "rename", ["mv_polynomial"]]]}]}, {"timestamp": 1600422215, "sha": "953a5dc0", "message": "feat(category_theory/monoidal): monoid objects are just lax monoidal functors from punit (#4121)", "changes": [{"oldPath": "src/category_theory/monoidal/internal.lean", "newPath": "src/category_theory/monoidal/internal.lean", "changes": [["add", "def", "Mon_to_lax_monoidal", ["Mon_", "equiv_lax_monoidal_functor_punit"]], ["add", "def", "counit_iso", ["Mon_", "equiv_lax_monoidal_functor_punit"]], ["add", "def", "lax_monoidal_to_Mon", ["Mon_", "equiv_lax_monoidal_functor_punit"]], ["add", "def", "unit_iso", ["Mon_", "equiv_lax_monoidal_functor_punit"]], ["add", "def", "equiv_lax_monoidal_functor_punit", ["Mon_"]]]}, {"oldPath": "src/category_theory/monoidal/natural_transformation.lean", "newPath": "src/category_theory/monoidal/natural_transformation.lean", "changes": [["add", "theorem", "hom_app", ["category_theory", "monoidal_nat_iso", "of_components"]], ["add", "theorem", "inv_app", ["category_theory", "monoidal_nat_iso", "of_components"]], ["add", "def", "of_components", ["category_theory", "monoidal_nat_iso"]], ["add", "theorem", "comp_to_nat_trans''", ["category_theory", "monoidal_nat_trans"]], ["add", "theorem", "comp_to_nat_trans'", ["category_theory", "monoidal_nat_trans"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}]}, {"timestamp": 1600418672, "sha": "c158ce85", "message": "feat(analysis/calculus): converse mean value inequality (#4173)\nAlso restate mean value inequality in terms of `lipschitz_on_with`.\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "le_of_lip", ["fderiv_at"]], ["add", "theorem", "le_of_lip", ["has_fderiv_at"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "lipschitz_on_with_of_norm_deriv_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_norm_deriv_within_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_norm_fderiv_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_norm_fderiv_within_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_norm_has_deriv_within_le", ["convex"]], ["add", "theorem", "lipschitz_on_with_of_norm_has_fderiv_within_le", ["convex"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "lipschitz_on_with_empty", []]]}]}, {"timestamp": 1600418670, "sha": "f68c936c", "message": "feat(analysis/normed_space/real_inner_product): orthogonal subspace lemmas (#4152)\nAdd a few more lemmas about `submodule.orthogonal`.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "findim_add_inf_findim_orthogonal", ["submodule"]], ["add", "theorem", "orthogonal_le", ["submodule"]], ["add", "theorem", "sup_orthogonal_inf_of_is_complete", ["submodule"]]]}]}, {"timestamp": 1600418668, "sha": "b00b01f2", "message": "feat(linear_algebra/affine_space): more lemmas (#4127)\nAdd another batch of lemmas relating to affine spaces. These include\nfactoring out `vector_span_mono` as a combination of two other lemmas\nthat's used several times, and additional variants of lemmas relating\nto finite-dimensional subspaces.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "eq_iff_direction_eq_of_mem", ["affine_subspace"]], ["add", "theorem", "eq_of_direction_eq_of_nonempty_of_le", ["affine_subspace"]], ["add", "theorem", "vector_span_mono", []]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "affine_span_eq_of_le_of_affine_independent_of_card_eq_findim_add_one", []], ["add", "theorem", "affine_span_image_finset_eq_of_le_of_affine_independent_of_card_eq_findim_add_one", []], ["add", "theorem", "findim_vector_span_image_finset_of_affine_independent", []], ["add", "theorem", "vector_span_eq_of_le_of_affine_independent_of_card_eq_findim_add_one", []], ["add", "theorem", "vector_span_image_finset_eq_of_le_of_affine_independent_of_card_eq_findim_add_one", []]]}]}, {"timestamp": 1600415046, "sha": "43ff7dca", "message": "feat(topology/algebra/ordered): generalize two lemmas (#4177)\nthey hold for conditionally complete linear orders, not just for complete linear orders", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1600407575, "sha": "58883e3e", "message": "feat(topology/ωCPO): define Scott topology in connection with ω-complete partial orders (#4037)", "changes": [{"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "def", "as_linear_order", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "le_iff_imp", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_le_Inf_of_forall_exists_le", []], ["add", "theorem", "Sup_le_Sup_of_forall_exists_le", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_le_iff", []], ["add", "theorem", "le_sup_iff", []]]}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["add", "theorem", "Sup_continuous'", ["complete_lattice"]], ["add", "theorem", "Sup_continuous", ["complete_lattice"]], ["add", "theorem", "bot_continuous", ["complete_lattice"]], ["add", "theorem", "inf_continuous", ["complete_lattice"]], ["add", "theorem", "sup_continuous", ["complete_lattice"]], ["add", "theorem", "top_continuous", ["complete_lattice"]], ["add", "theorem", "monotone", ["omega_complete_partial_order", "continuous_hom"]]]}, {"oldPath": "src/order/preorder_hom.lean", "newPath": "src/order/preorder_hom.lean", "changes": [["add", "theorem", "monotone", ["preorder_hom"]]]}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/omega_complete_partial_order.lean", "changes": [["add", "def", "is_open", ["Scott"]], ["add", "theorem", "is_open_inter", ["Scott"]], ["add", "theorem", "is_open_sUnion", ["Scott"]], ["add", "theorem", "is_open_univ", ["Scott"]], ["add", "def", "is_ωSup", ["Scott"]], ["add", "def", "Scott", []], ["add", "theorem", "Scott_continuous_of_continuous", []], ["add", "theorem", "continuous_of_Scott_continuous", []], ["add", "theorem", "is_ωSup_ωSup", []], ["add", "def", "not_below", []], ["add", "theorem", "not_below_is_open", []]]}]}, {"timestamp": 1600390636, "sha": "52d4b921", "message": "chore(scripts): update nolints.txt (#4176)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1600356818, "sha": "5a2e7d7b", "message": "refactor(field-theory/subfield): bundled subfields (#4159)\nDefine bundled subfields. The contents of the new `subfield` file are basically a copy of `subring.lean` with the replacement `subring` -> `subfield`, and the proofs repaired as necessary.\nAs with the other bundled subobject refactors, other files depending on unbundled subfields now import `deprecated.subfield`.", "changes": [{"oldPath": null, "newPath": "src/deprecated/subfield.lean", "changes": [["add", "def", "closure", ["field"]], ["add", "theorem", "closure_mono", ["field"]], ["add", "theorem", "closure_subset", ["field"]], ["add", "theorem", "closure_subset_iff", ["field"]], ["add", "theorem", "mem_closure", ["field"]], ["add", "theorem", "ring_closure_subset", ["field"]], ["add", "theorem", "subset_closure", ["field"]], ["add", "theorem", "is_subfield_Union_of_directed", []]]}, {"oldPath": "src/field_theory/adjoin.lean", "newPath": "src/field_theory/adjoin.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["del", "def", "closure", ["field"]], ["del", "theorem", "closure_mono", ["field"]], ["del", "theorem", "closure_subset", ["field"]], ["del", "theorem", "closure_subset_iff", ["field"]], ["del", "theorem", "mem_closure", ["field"]], ["del", "theorem", "ring_closure_subset", ["field"]], ["del", "theorem", "subset_closure", ["field"]], ["del", "theorem", "is_subfield_Union_of_directed", []], ["add", "def", "subfield_congr", ["ring_equiv"]], ["add", "def", "cod_restrict_field", ["ring_hom"]], ["add", "theorem", "coe_field_range", ["ring_hom"]], ["add", "theorem", "coe_range_restrict_field", ["ring_hom"]], ["add", "def", "eq_locus_field", ["ring_hom"]], ["add", "theorem", "eq_of_eq_on_of_field_closure_eq_top", ["ring_hom"]], ["add", "theorem", "eq_of_eq_on_subfield_top", ["ring_hom"]], ["add", "theorem", "eq_on_field_closure", ["ring_hom"]], ["add", "theorem", "field_closure_preimage_le", ["ring_hom"]], ["add", "def", "field_range", ["ring_hom"]], ["add", "theorem", "map_field_closure", ["ring_hom"]], ["add", "theorem", "map_field_range", ["ring_hom"]], ["add", "theorem", "mem_field_range", ["ring_hom"]], ["add", "def", "range_restrict_field", ["ring_hom"]], ["add", "def", "restrict_field", ["ring_hom"]], ["add", "theorem", "restrict_field_apply", ["ring_hom"]], ["add", "theorem", "Inf_to_subring", ["subfield"]], ["add", "theorem", "add_mem", ["subfield"]], ["add", "def", "closure", ["subfield"]], ["add", "theorem", "closure_Union", ["subfield"]], ["add", "theorem", "closure_empty", ["subfield"]], ["add", "theorem", "closure_eq", ["subfield"]], ["add", "theorem", "closure_eq_of_le", ["subfield"]], ["add", "theorem", "closure_induction", ["subfield"]], ["add", "theorem", "closure_le", ["subfield"]], ["add", "theorem", "closure_mono", ["subfield"]], ["add", "theorem", "closure_preimage_le", ["subfield"]], ["add", "theorem", "closure_sUnion", ["subfield"]], ["add", "theorem", "closure_union", ["subfield"]], ["add", "theorem", "closure_univ", ["subfield"]], ["add", "theorem", "coe_Inf", ["subfield"]], ["add", "theorem", "coe_Sup_of_directed_on", ["subfield"]], ["add", "theorem", "coe_add", ["subfield"]], ["add", "theorem", "coe_coe", ["subfield"]], ["add", "theorem", "coe_comap", ["subfield"]], ["add", "theorem", "coe_inf", ["subfield"]], ["add", "theorem", "coe_int_mem", ["subfield"]], ["add", "theorem", "coe_inv", ["subfield"]], ["add", "theorem", "coe_map", ["subfield"]], ["add", "theorem", "coe_mul", ["subfield"]], ["add", "theorem", "coe_neg", ["subfield"]], ["add", "theorem", "coe_one", ["subfield"]], ["add", "theorem", "coe_ssubset_coe", ["subfield"]], ["add", "theorem", "coe_subset_coe", ["subfield"]], ["add", "theorem", "coe_subtype", ["subfield"]], ["add", "theorem", "coe_supr_of_directed", ["subfield"]], ["add", "theorem", "coe_to_add_subgroup", ["subfield"]], ["add", "theorem", "coe_to_submonoid", ["subfield"]], ["add", "theorem", "coe_to_subring", ["subfield"]], ["add", "theorem", "coe_top", ["subfield"]], ["add", "theorem", "coe_zero", ["subfield"]], ["add", "def", "comap", ["subfield"]], ["add", "theorem", "comap_comap", ["subfield"]], ["add", "theorem", "comap_inf", ["subfield"]], ["add", "theorem", "comap_infi", ["subfield"]], ["add", "theorem", "comap_top", ["subfield"]], ["add", "theorem", "div_mem", ["subfield"]], ["add", "theorem", "ext'", ["subfield"]], ["add", "theorem", "ext", ["subfield"]], ["add", "theorem", "field_range_subtype", ["subfield"]], ["add", "theorem", "gc_map_comap", ["subfield"]], ["add", "theorem", "gsmul_mem", ["subfield"]], ["add", "def", "inclusion", ["subfield"]], ["add", "theorem", "inv_mem", ["subfield"]], ["add", "theorem", "is_glb_Inf", ["subfield"]], ["add", "theorem", "le_def", ["subfield"]], ["add", "theorem", "list_prod_mem", ["subfield"]], ["add", "theorem", "list_sum_mem", ["subfield"]], ["add", "def", "map", ["subfield"]], ["add", "theorem", "map_bot", ["subfield"]], ["add", "theorem", "map_le_iff_le_comap", ["subfield"]], ["add", "theorem", "map_map", ["subfield"]], ["add", "theorem", "map_sup", ["subfield"]], ["add", "theorem", "map_supr", ["subfield"]], ["add", "theorem", "mem_Inf", ["subfield"]], ["add", "theorem", "mem_Sup_of_directed_on", ["subfield"]], ["add", "theorem", "mem_closure", ["subfield"]], ["add", "theorem", "mem_closure_iff", ["subfield"]], ["add", "theorem", "mem_coe", ["subfield"]], ["add", "theorem", "mem_comap", ["subfield"]], ["add", "theorem", "mem_inf", ["subfield"]], ["add", "theorem", "mem_map", ["subfield"]], ["add", "theorem", "mem_mk", ["subfield"]], ["add", "theorem", "mem_supr_of_directed", ["subfield"]], ["add", "theorem", "mem_to_add_subgroup", ["subfield"]], ["add", "theorem", "mem_to_submonoid", ["subfield"]], ["add", "theorem", "mem_to_subring", ["subfield"]], ["add", "theorem", "mem_top", ["subfield"]], ["add", "theorem", "mul_mem", ["subfield"]], ["add", "theorem", "multiset_prod_mem", ["subfield"]], ["add", "theorem", "multiset_sum_mem", ["subfield"]], ["add", "theorem", "neg_mem", ["subfield"]], ["add", "theorem", "one_mem", ["subfield"]], ["add", "theorem", "pow_mem", ["subfield"]], ["add", "theorem", "prod_mem", ["subfield"]], ["add", "theorem", "subring_closure_le", ["subfield"]], ["add", "theorem", "subset_closure", ["subfield"]], ["add", "def", "subtype", ["subfield"]], ["add", "theorem", "sum_mem", ["subfield"]], ["add", "def", "to_add_subgroup", ["subfield"]], ["add", "def", "to_submonoid", ["subfield"]], ["add", "theorem", "zero_mem", ["subfield"]], ["add", "structure", "subfield", []], ["add", "def", "to_subfield", ["subring"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "coe_eq_zero_iff", ["subring"]]]}]}, {"timestamp": 1600356815, "sha": "34ebade1", "message": "feat(algebra/free_algebra): free (noncommutative) algebras (#4077)\nPreviously, @adamtopaz constructed the tensor algebra of an `R`-module via a direct construction of a quotient of a free algebra.\nThis uses essentially the same construction to build a free algebra (on a type) directly. In a PR coming shortly, I'll refactor his development of the tensor algebra to use this construction.", "changes": [{"oldPath": null, "newPath": "src/algebra/free_algebra.lean", "changes": [["add", "def", "equiv_monoid_algebra_free_monoid", ["free_algebra"]], ["add", "theorem", "hom_ext", ["free_algebra"]], ["add", "def", "lift", ["free_algebra"]], ["add", "theorem", "lift_comp_ι", ["free_algebra"]], ["add", "def", "lift_fun", ["free_algebra"]], ["add", "theorem", "lift_unique", ["free_algebra"]], ["add", "theorem", "lift_ι_apply", ["free_algebra"]], ["add", "def", "has_add", ["free_algebra", "pre"]], ["add", "def", "has_coe_generator", ["free_algebra", "pre"]], ["add", "def", "has_coe_semiring", ["free_algebra", "pre"]], ["add", "def", "has_mul", ["free_algebra", "pre"]], ["add", "def", "has_one", ["free_algebra", "pre"]], ["add", "def", "has_scalar", ["free_algebra", "pre"]], ["add", "def", "has_zero", ["free_algebra", "pre"]], ["add", "inductive", "pre", ["free_algebra"]], ["add", "theorem", "quot_mk_eq_ι", ["free_algebra"]], ["add", "inductive", "rel", ["free_algebra"]], ["add", "def", "ι", ["free_algebra"]], ["add", "theorem", "ι_comp_lift", ["free_algebra"]], ["add", "def", "free_algebra", []]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_algebra.lean", "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": []}]}, {"timestamp": 1600352976, "sha": "b62dd289", "message": "feat(linear_algebra/eigenspace): beginning to relate minimal polynomials to eigenvalues (#4165)\nrephrases some lemmas in `linear_algebra` to use `aeval` instead of `eval2` and `algebra_map`\nshows that an eigenvalue of a linear transformation is a root of its minimal polynomial, and vice versa", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "aeval_endomorphism", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "aeval_apply_of_has_eigenvector", ["module", "End"]], ["add", "theorem", "eigenspace_aeval_polynomial_degree_1", ["module", "End"]], ["del", "theorem", "eigenspace_eval₂_polynomial_degree_1", ["module", "End"]], ["add", "theorem", "has_eigenvalue_iff_is_root", ["module", "End"]], ["add", "theorem", "has_eigenvalue_of_is_root", ["module", "End"]], ["add", "theorem", "is_root_of_has_eigenvalue", ["module", "End"]], ["add", "theorem", "ker_aeval_ring_hom'_unit_polynomial", ["module", "End"]], ["del", "theorem", "ker_eval₂_ring_hom'_unit_polynomial", ["module", "End"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "findim_linear_map", ["linear_map"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1600320388, "sha": "265c587e", "message": "doc(meta/converter/interactive): Add tactic documentation for a subset of `conv` tactics (#4144)", "changes": [{"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}]}, {"timestamp": 1600282215, "sha": "7db9e13b", "message": "feat(data/monoid_algebra): ext lemma (#4162)\nA small lemma that was useful in the Witt vector project.\nCo-authored by: Johan Commelin ", "changes": [{"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": [["add", "theorem", "alg_hom_ext", ["add_monoid_algebra"]], ["add", "theorem", "alg_hom_ext_iff", ["add_monoid_algebra"]]]}]}, {"timestamp": 1600271352, "sha": "9f9a8c06", "message": "feat(readme): add @hrmacbeth to maintainers list (#4168)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1600256562, "sha": "623c8462", "message": "feat(data/mv_polynomial/variables): add facts about vars and mul (#4149)\nMore from the Witt vectors branch.\nCo-authored by: Johan Commelin ", "changes": [{"oldPath": "src/data/mv_polynomial/variables.lean", "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "vars_C_mul", ["mv_polynomial"]], ["add", "theorem", "vars_mul", ["mv_polynomial"]], ["add", "theorem", "vars_one", ["mv_polynomial"]], ["add", "theorem", "vars_pow", ["mv_polynomial"]], ["add", "theorem", "vars_prod", ["mv_polynomial"]]]}]}, {"timestamp": 1600249186, "sha": "6603c6da", "message": "fix(simps): use coercion for algebra morphisms (#4155)\nPreviously it tried to apply whnf on an open expression, which failed, so it wouldn't find the coercion. Now it applied whnf before opening the expression.\nAlso use `simps` for `fixed_points.to_alg_hom`. The generated lemmas are\n```lean\nfixed_points.to_alg_hom_to_fun : ∀ (G : Type u) (F : Type v) [_inst_4 : group G] [_inst_5 : field F]\n[_inst_6 : faithful_mul_semiring_action G F],\n ⇑(to_alg_hom G F) =\n λ (g : G),\n {to_fun := (mul_semiring_action.to_semiring_hom G F g).to_fun,\n map_one' := _,\n map_mul' := _,\n map_zero' := _,\n map_add' := _,\n commutes' := _}\n```", "changes": [{"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["del", "theorem", "coe_to_alg_hom", ["fixed_points"]]]}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "structure", "alg_hom", []], ["add", "def", "my_alg_hom", []], ["add", "def", "my_ring_hom", []], ["add", "structure", "ring_hom", []]]}]}, {"timestamp": 1600243408, "sha": "9a11efbc", "message": "feat(metric_space): add lipschitz_on_with (#4151)\nThe order of the explicit arguments in this definition is open for negotiation.\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_sub_le", ["lipschitz_on_with"]], ["add", "theorem", "lipschitz_on_with_iff_norm_sub_le", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "uniform_continuous_on_iff", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "lipschitz_on_univ", []], ["add", "theorem", "mono", ["lipschitz_on_with"]], ["add", "def", "lipschitz_on_with", []], ["add", "theorem", "lipschitz_on_with_iff_dist_le_mul", []], ["add", "theorem", "lipschitz_on_with_iff_restrict", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_on_iff", ["filter", "has_basis"]], ["add", "theorem", "continuous_on", ["uniform_continuous_on"]], ["mod", "theorem", "uniform_continuous_on_iff_restrict", []]]}]}, {"timestamp": 1600243406, "sha": "4c9d3a58", "message": "feat(operator_norm): smul_right lemmas (#4150)\nfrom the sphere eversion project\nWe need a version of `continuous_linear_map.smul_right` that is itself a continuous linear map from a normed space to a space of continuous linear maps. \nbreaking changes:\n* rename `smul_right_norm` to `norm_smul_right_apply`\n* in `homothety_norm` remove useless sign assumption and switch from assuming positive dimension to `nontrivial`", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "apply", ["continuous_linear_map"]], ["add", "def", "applyₗ", ["continuous_linear_map"]], ["add", "theorem", "continuous_applyₗ", ["continuous_linear_map"]], ["mod", "theorem", "homothety_norm", ["continuous_linear_map"]], ["add", "theorem", "norm_smul_rightL", ["continuous_linear_map"]], ["add", "theorem", "norm_smul_rightL_apply", ["continuous_linear_map"]], ["add", "theorem", "norm_smul_right_apply", ["continuous_linear_map"]], ["add", "def", "smul_rightL", ["continuous_linear_map"]], ["del", "theorem", "smul_right_norm", ["continuous_linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "nontrivial_span_singleton", ["submodule"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "smul_rightₗ", ["continuous_linear_map"]]]}]}, {"timestamp": 1600236369, "sha": "f585ce54", "message": "feat(category_theory): monoidal natural transformations and discrete monoidal categories (#4112)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "congr_arg", ["monoid_hom"]], ["add", "theorem", "congr_fun", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "map_div", ["monoid_hom"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "congr_arg", ["ring_hom"]], ["add", "theorem", "congr_fun", ["ring_hom"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "theorem", "eq_of_hom", ["category_theory", "discrete"]]]}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monoidal/discrete.lean", "changes": [["add", "def", "monoidal_functor", ["category_theory", "discrete"]], ["add", "def", "monoidal_functor_comp", ["category_theory", "discrete"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal.lean", "newPath": "src/category_theory/monoidal/internal.lean", "changes": [["add", "def", "map_Mon_functor", ["category_theory", "lax_monoidal_functor"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/natural_transformation.lean", "changes": [["add", "def", "hcomp", ["category_theory", "monoidal_nat_trans"]], ["add", "def", "id", ["category_theory", "monoidal_nat_trans"]], ["add", "def", "vcomp", ["category_theory", "monoidal_nat_trans"]], ["add", "structure", "monoidal_nat_trans", ["category_theory"]]]}, {"oldPath": "src/topology/instances/real_vector_space.lean", "newPath": "src/topology/instances/real_vector_space.lean", "changes": []}]}, {"timestamp": 1600200638, "sha": "4c896c5f", "message": "chore(undergrad.yaml): updates (#4160)\nAdded a bunch of things to `undergrad.yaml`: generalized eigenspaces, conjugacy classes in a group, the orthogonal complement, continuity of monotone functions and their inverses, inverse hyperbolic trig functions, radius of convergence. Also changed (hopefully improved) some translations.", "changes": [{"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}]}, {"timestamp": 1600174796, "sha": "d3a17196", "message": "feat(category_theory/is_connected): make `is_connected` a Prop (#4136)\nAlso renames `connected` to `is_connected`, and relies on `classical.arbitrary` slightly less.", "changes": [{"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/is_connected.lean", "changes": [["mod", "theorem", "any_functor_const_on_obj", ["category_theory"]], ["del", "def", "of_any_functor_const_on_obj", ["category_theory", "connected"]], ["del", "def", "of_constant_of_preserves_morphisms", ["category_theory", "connected"]], ["del", "def", "of_induct", ["category_theory", "connected"]], ["del", "def", "connected_of_zigzag", ["category_theory"]], ["del", "theorem", "connected_zigzag", ["category_theory"]], ["mod", "theorem", "constant_of_preserves_morphisms", ["category_theory"]], ["del", "def", "discrete_connected_equiv_punit", ["category_theory"]], ["add", "def", "discrete_is_connected_equiv_punit", ["category_theory"]], ["mod", "theorem", "equiv_relation", ["category_theory"]], ["mod", "theorem", "exists_zigzag'", ["category_theory"]], ["mod", "theorem", "induct_on_objects", ["category_theory"]], ["add", "theorem", "of_any_functor_const_on_obj", ["category_theory", "is_connected"]], ["add", "theorem", "of_constant_of_preserves_morphisms", ["category_theory", "is_connected"]], ["add", "theorem", "of_induct", ["category_theory", "is_connected"]], ["add", "theorem", "is_connected_of_zigzag", ["category_theory"]], ["add", "theorem", "is_connected_zigzag", ["category_theory"]], ["add", "def", "iso_constant", ["category_theory"]], ["del", "theorem", "nat_trans_from_connected", ["category_theory"]], ["add", "theorem", "nat_trans_from_is_connected", ["category_theory"]], ["del", "def", "zigzag_connected", ["category_theory"]], ["add", "theorem", "zigzag_is_connected", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": [["mod", "def", "prod_preserves_connected_limits", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "changes": [["mod", "def", "raise_cone", ["category_theory", "over", "creates_connected"]], ["mod", "def", "raised_cone_is_limit", ["category_theory", "over", "creates_connected"]], ["mod", "theorem", "raised_cone_lowers_to_original", ["category_theory", "over", "creates_connected"]]]}]}, {"timestamp": 1600170188, "sha": "427d4141", "message": "feat(data/enat): some API and a module docstring (#4103)", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "to_with_top_add", ["enat"]]]}]}, {"timestamp": 1600131837, "sha": "7c321f80", "message": "chore(scripts): update nolints.txt (#4157)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1600126053, "sha": "b83362e4", "message": "fix(order/ocpo): remove trace option (#4154)\n(it did not produce any output)", "changes": [{"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}]}, {"timestamp": 1600126052, "sha": "a0adcc04", "message": "chore(category_theory/zero): lemmas for has_zero_morphisms.comp_zero|zero_comp (#4142)\nThe axioms of `has_zero_morphisms` never had lemmas written for them, so everyone has been using the typeclass fields directly.", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": []}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "comp_zero", ["category_theory", "limits"]], ["add", "theorem", "zero_comp", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}]}, {"timestamp": 1600126050, "sha": "3d73bd86", "message": "feat(topology/algebra/ordered): monotone continuous function is homeomorphism, relative version (#4043)\nA function `f : α → β` restricts to a homeomorphism `(Ioo a b) → β`, if it (1) is order-preserving within the interval; (2) is `continuous_on` the interval; (3) tends to positive infinity at the right endpoint; and (4) tends to negative infinity at the left endpoint. The orders `α`, `β` are required to be conditionally complete, and the order on `α` must also be dense.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "nonempty_Icc_subtype", ["set"]], ["add", "theorem", "nonempty_Ico_subtype", ["set"]], ["add", "theorem", "nonempty_Ioc_subtype", ["set"]], ["add", "theorem", "nonempty_Ioo_subtype", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Ioo_at_bot_eq_nhds_within", []], ["add", "theorem", "Ioo_at_top_eq_nhds_within", []], ["add", "theorem", "coe_homeomorph_of_strict_mono_continuous_Ioo", []]]}]}, {"timestamp": 1600118717, "sha": "ff2639dc", "message": "feat(tactic/pretty_cases): provide a skeleton for a proof by induction / cases (#4093)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/pretty_cases.lean", "changes": []}, {"oldPath": null, "newPath": "test/pretty_cases.lean", "changes": []}]}, {"timestamp": 1600112147, "sha": "218ef40a", "message": "feat(measure_theory): image of Lebesgue measure under shift/rescale (#3760)", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "bInter_bind", ["finset"]], ["add", "theorem", "bInter_option_to_finset", ["finset"]], ["add", "theorem", "bUnion_bind", ["finset"]], ["add", "theorem", "bUnion_option_to_finset", ["finset"]], ["add", "theorem", "infi_bind", ["finset"]], ["add", "theorem", "infi_option_to_finset", ["finset"]], ["add", "theorem", "supr_bind", ["finset"]], ["add", "theorem", "supr_option_to_finset", ["finset"]]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_Union_apply", ["set"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "forall'", ["set_coe"]]]}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["mod", "theorem", "Union_disjointed_of_mono", ["set"]], ["add", "theorem", "subset_Union_disjointed", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measure_ext_Ioo_rat", ["real"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "set_lintegral_congr", ["measure_theory"]], ["add", "theorem", "set_lintegral_map", ["measure_theory"]], ["add", "theorem", "set_lintegral_one", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "integral_comp_add_right", ["interval_integral"]], ["add", "theorem", "integral_comp_mul_right", ["interval_integral"]], ["add", "theorem", "integral_comp_neg", ["interval_integral"]], ["add", "theorem", "integral_smul_measure", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["add", "theorem", "map_volume_add_left", ["real"]], ["add", "theorem", "map_volume_add_right", ["real"]], ["add", "theorem", "map_volume_mul_left", ["real"]], ["add", "theorem", "map_volume_mul_right", ["real"]], ["add", "theorem", "map_volume_neg", ["real"]], ["add", "theorem", "smul_map_volume_mul_left", ["real"]], ["add", "theorem", "smul_map_volume_mul_right", ["real"]], ["mod", "theorem", "volume_Icc", ["real"]], ["mod", "theorem", "volume_Ico", ["real"]], ["mod", "theorem", "volume_Ioc", ["real"]], ["mod", "theorem", "volume_Ioo", ["real"]], ["mod", "theorem", "volume_interval", ["real"]], ["mod", "theorem", "volume_singleton", ["real"]], ["mod", "theorem", "volume_val", ["real"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "Union", ["is_measurable"]], ["add", "theorem", "bUnion_decode2", ["is_measurable"]], ["mod", "theorem", "const", ["is_measurable"]], ["mod", "theorem", "diff", ["is_measurable"]], ["mod", "theorem", "disjointed", ["is_measurable"]], ["mod", "theorem", "inter", ["is_measurable"]], ["mod", "theorem", "union", ["is_measurable"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "Ico_ae_eq_Icc", ["measure_theory"]], ["add", "theorem", "Ico_ae_eq_Ioc", ["measure_theory"]], ["add", "theorem", "Iio_ae_eq_Iic", ["measure_theory"]], ["add", "theorem", "Ioc_ae_eq_Icc", ["measure_theory"]], ["add", "theorem", "Ioi_ae_eq_Ici", ["measure_theory"]], ["add", "theorem", "Ioo_ae_eq_Icc", ["measure_theory"]], ["add", "theorem", "Ioo_ae_eq_Ico", ["measure_theory"]], ["add", "theorem", "Ioo_ae_eq_Ioc", ["measure_theory"]], ["add", "theorem", "ae_eq_empty", ["measure_theory"]], ["add", "theorem", "ae_le_set", ["measure_theory"]], ["add", "theorem", "diff_ae_eq_self", ["measure_theory"]], ["add", "theorem", "insert_ae_eq_self", ["measure_theory"]], ["add", "theorem", "ext_iff_of_Union_eq_univ", ["measure_theory", "measure"]], ["add", "theorem", "ext_iff_of_bUnion_eq_univ", ["measure_theory", "measure"]], ["add", "theorem", "ext_iff_of_sUnion_eq_univ", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_generate_from_of_cover", ["measure_theory", "measure"]], ["add", "theorem", "ext_of_generate_from_of_cover_subset", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Union_apply_eq_supr", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Union_congr", ["measure_theory", "measure"]], ["add", "theorem", "restrict_bUnion_congr", ["measure_theory", "measure"]], ["add", "theorem", "restrict_congr_meas", ["measure_theory", "measure"]], ["add", "theorem", "restrict_congr_mono", ["measure_theory", "measure"]], ["add", "theorem", "restrict_finset_bUnion_congr", ["measure_theory", "measure"]], ["add", "theorem", "restrict_map", ["measure_theory", "measure"]], ["add", "theorem", "restrict_restrict", ["measure_theory", "measure"]], ["add", "theorem", "restrict_sUnion_congr", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union_add_inter", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union_congr", ["measure_theory", "measure"]], ["add", "theorem", "measure_Inter_eq_infi", ["measure_theory"]], ["del", "theorem", "measure_Inter_eq_infi_nat", ["measure_theory"]], ["add", "theorem", "measure_Union_eq_supr", ["measure_theory"]], ["del", "theorem", "measure_Union_eq_supr_nat", ["measure_theory"]], ["add", "theorem", "measure_bUnion_eq_supr", ["measure_theory"]], ["add", "theorem", "measure_countable", ["measure_theory"]], ["mod", "theorem", "measure_diff", ["measure_theory"]], ["mod", "theorem", "measure_eq_inter_diff", ["measure_theory"]], ["add", "theorem", "measure_finite", ["measure_theory"]], ["add", "theorem", "measure_finset", ["measure_theory"]], ["add", "theorem", "measure_mono_top", ["measure_theory"]], ["add", "theorem", "measure_union_add_inter", ["measure_theory"]], ["del", "theorem", "restrict_congr", ["measure_theory"]], ["add", "theorem", "restrict_congr_set", ["measure_theory"]], ["add", "theorem", "union_ae_eq_right", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "set_integral_map", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "compl", ["filter", "eventually_eq"]], ["add", "theorem", "diff", ["filter", "eventually_eq"]], ["add", "theorem", "inter", ["filter", "eventually_eq"]], ["add", "theorem", "union", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_eq_empty", ["filter"]], ["add", "theorem", "eventually_le_antisymm_iff", ["filter"]]]}]}, {"timestamp": 1600101345, "sha": "a18be379", "message": "feat(ring_theory/ideal/over): Going up theorem for integral extensions (#4064)\nThe main statement is `exists_ideal_over_prime_of_is_integral` which shows that for an integral extension, every prime ideal of the original ring lies under some prime ideal of the extension ring.\n`is_field_of_is_integral_of_is_field` is a brute force proof that if `R → S` is an integral extension, and `S` is a field, then `R` is also a field (using the somewhat new `is_field` proposition). `is_maximal_comap_of_is_integral_of_is_maximal` Gives essentially the same statement in terms of maximal ideals.\n`disjoint_compl` has also been replaced with `disjoint_compl_left` and `disjoint_compl_right` variants.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval₂_eq_sum_range", ["polynomial"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "disjoint_compl", ["set"]], ["add", "theorem", "disjoint_compl_left", ["set"]], ["add", "theorem", "disjoint_compl_right", ["set"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "algebra_map_quotient_injective", ["ideal"]], ["add", "def", "quotient_map", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": [["add", "theorem", "exists_ideal_over_prime_of_is_integral'", ["ideal"]], ["add", "theorem", "exists_ideal_over_prime_of_is_integral", ["ideal"]], ["add", "theorem", "is_maximal_comap_of_is_integral_of_is_maximal", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_field_of_is_integral_of_is_field", []], ["add", "theorem", "is_integral_quotient_of_is_integral", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "algebra_map_mk'", []], ["add", "theorem", "comap_maximal_ideal", ["localization", "at_prime"]], ["add", "theorem", "map_eq_maximal_ideal", ["localization", "at_prime"]], ["add", "theorem", "localization_algebra_injective", []]]}]}, {"timestamp": 1600097764, "sha": "6babb557", "message": "fix(normed_space): fixed a typo from #4099 (#4147)\nThis lemma was less general that it should be because migrating it to its\nmathlib place messed up the typeclass assumptions.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_smul_of_nonneg", []]]}]}, {"timestamp": 1600097762, "sha": "8877606b", "message": "chore(ci): teach bors and GitHub about new labels (#4146)", "changes": [{"oldPath": ".github/workflows/add_label_from_comment.yml", "newPath": ".github/workflows/add_label_from_comment.yml", "changes": []}, {"oldPath": ".github/workflows/add_label_from_review.yml", "newPath": ".github/workflows/add_label_from_review.yml", "changes": []}, {"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}]}, {"timestamp": 1600097759, "sha": "49fc7edd", "message": "feat(measure_theory): assorted integration lemmas (#4145)\nfrom the sphere eversion project\nThis is still preparations for differentiation of integals depending on a parameter.", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "continuous_integral", ["measure_theory"]], ["add", "theorem", "continuous_integral", ["measure_theory", "l1"]], ["add", "theorem", "integral_eq_integral", ["measure_theory", "l1"]], ["add", "theorem", "integral_of_fun_eq_integral", ["measure_theory", "l1"]], ["add", "theorem", "norm_eq_integral_norm", ["measure_theory", "l1"]], ["add", "theorem", "norm_of_fun_eq_integral_norm", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable", ["continuous_linear_map"]], ["add", "theorem", "clm_apply", ["measurable"]], ["add", "theorem", "const_mul", ["measurable"]], ["add", "theorem", "mul_const", ["measurable"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "const_mul", ["measure_theory", "integrable"]], ["add", "theorem", "mul_const", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_norm", ["measure_theory", "l1"]], ["add", "theorem", "measurable_norm", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "integral_indicator_const", ["measure_theory"]]]}]}, {"timestamp": 1600097757, "sha": "5f45c0c6", "message": "feat(linear_algebra/finite_dimensional): finite-dimensional submodule lemmas / instances (#4128)\nAdd the lemma that a submodule contained in a finite-dimensional\nsubmodule is finite-dimensional, and instances that allow type class\ninference to show some infs and sups involving finite-dimensional\nsubmodules are finite-dimensional. These are all useful when working\nwith finite-dimensional submodules in a space that may not be\nfinite-dimensional itself.\nGiven the new instances, `dim_sup_add_dim_inf_eq` gets its type class\nrequirements relaxed to require only the submodules to be\nfinite-dimensional rather than the whole space.\n`linear_independent_iff_card_eq_findim_span` is added as a variant of\n`linear_independent_of_span_eq_top_of_card_eq_findim` for vectors not\nnecessarily spanning the whole space (implemented as an `iff` lemma\nusing `findim_span_eq_card` for the other direction).", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "linear_independent_iff_card_eq_findim_span", []], ["mod", "theorem", "dim_sup_add_dim_inf_eq", ["submodule"]], ["add", "theorem", "finite_dimensional_of_le", ["submodule"]]]}]}, {"timestamp": 1600094907, "sha": "d5c58eb8", "message": "chore(category_theory/*): make all forgetful functors use explicit arguments (#4139)\nAs suggested as https://github.com/leanprover-community/mathlib/pull/4131#discussion_r487527599, for the sake of more uniform API.", "changes": [{"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": "src/algebra/homology/chain_complex.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/grothendieck.lean", "newPath": "src/category_theory/grothendieck.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["mod", "def", "to_cocone", ["category_theory", "functor"]], ["mod", "def", "to_cone", ["category_theory", "functor"]], ["mod", "def", "colimit", ["category_theory", "over"]], ["mod", "def", "forget_colimit_is_colimit", ["category_theory", "over"]], ["mod", "def", "forget_limit_is_limit", ["category_theory", "under"]], ["mod", "def", "limit", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "changes": [["mod", "def", "raise_cone", ["category_theory", "over", "creates_connected"]], ["mod", "def", "raised_cone_is_limit", ["category_theory", "over", "creates_connected"]]]}, {"oldPath": "src/category_theory/monad/bundled.lean", "newPath": "src/category_theory/monad/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal.lean", "newPath": "src/category_theory/monoidal/internal.lean", "changes": [["add", "def", "forget", ["Mod"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["mod", "theorem", "forget_map", ["category_theory", "over"]], ["mod", "theorem", "forget_obj", ["category_theory", "over"]], ["mod", "theorem", "forget_map", ["category_theory", "under"]], ["mod", "theorem", "forget_obj", ["category_theory", "under"]]]}]}, {"timestamp": 1600087262, "sha": "a998fd10", "message": "feat(algebra/category/Module): the monoidal category of R-modules is symmetric (#4140)", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["add", "def", "braiding", ["Module"]], ["add", "theorem", "braiding_naturality", ["Module"]], ["add", "theorem", "hexagon_forward", ["Module"]], ["add", "theorem", "hexagon_reverse", ["Module"]], ["add", "theorem", "braiding_hom_apply", ["Module", "monoidal_category"]], ["add", "theorem", "braiding_inv_apply", ["Module", "monoidal_category"]]]}]}, {"timestamp": 1600087260, "sha": "e35e287b", "message": "refactor(data/nat/*): cleanup data.nat.basic, split data.nat.choose (#4135)\nThis PR rearranges `data.nat.basic` so the lemmas are now in (hopefully appropriately-named) markdown sections. It also moves several sections (mostly ones that introduced new `def`s) into new files:\n- `data.nat.fact`\n- `data.nat.psub` (maybe this could be named `data.nat.partial`?)\n- `data.nat.log`\n- `data.nat.with_bot`\n`data.nat.choose` has been split into a directory:\n- The definition of `nat.choose` and basic lemmas about it have been moved from `data.nat.basic` into `data.nat.choose.basic`\n- The binomial theorem and related lemmas involving sums are now in `data.nat.choose.sum`; the following lemmas are now in the `nat` namespace:\n - `sum_range_choose`\n - `sum_range_choose_halfway`\n - `choose_middle_le_pow`\n- Divisibility properties of binomial coefficients are now in `data.nat.choose.dvd`.\nOther changes:\n- added `nat.pow_two_sub_pow_two` to `data.nat.basic`.\n- module docs & doc strings for `data.nat.sqrt`", "changes": [{"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "def", "choose", ["nat"]], ["del", "theorem", "choose_eq_fact_div_fact", ["nat"]], ["del", "theorem", "choose_eq_zero_of_lt", ["nat"]], ["del", "theorem", "choose_mul_fact_mul_fact", ["nat"]], ["del", "theorem", "choose_mul_succ_eq", ["nat"]], ["del", "theorem", "choose_one_right", ["nat"]], ["del", "theorem", "choose_pos", ["nat"]], ["del", "theorem", "choose_self", ["nat"]], ["del", "theorem", "choose_succ_right_eq", ["nat"]], ["del", "theorem", "choose_succ_self", ["nat"]], ["del", "theorem", "choose_succ_self_right", ["nat"]], ["del", "theorem", "choose_succ_succ", ["nat"]], ["del", "theorem", "choose_symm", ["nat"]], ["del", "theorem", "choose_symm_add", ["nat"]], ["del", "theorem", "choose_symm_half", ["nat"]], ["del", "theorem", "choose_symm_of_eq_add", ["nat"]], ["del", "theorem", "choose_two_right", ["nat"]], ["del", "theorem", "choose_zero_right", ["nat"]], ["del", "theorem", "choose_zero_succ", ["nat"]], ["del", "theorem", "dvd_fact", ["nat"]], ["mod", "theorem", "eq_of_mul_eq_mul_right", ["nat"]], ["mod", "theorem", "eq_zero_of_dvd_of_div_eq_zero", ["nat"]], ["del", "def", "fact", ["nat"]], ["del", "theorem", "fact_dvd_fact", ["nat"]], ["del", "theorem", "fact_eq_one", ["nat"]], ["del", "theorem", "fact_inj", ["nat"]], ["del", "theorem", "fact_le", ["nat"]], ["del", "theorem", "fact_lt", ["nat"]], ["del", "theorem", "fact_mul_fact_dvd_fact", ["nat"]], ["del", "theorem", "fact_mul_pow_le_fact", ["nat"]], ["del", "theorem", "fact_ne_zero", ["nat"]], ["del", "theorem", "fact_one", ["nat"]], ["del", "theorem", "fact_pos", ["nat"]], ["del", "theorem", "fact_succ", ["nat"]], ["del", "theorem", "fact_zero", ["nat"]], ["mod", "theorem", "le_induction", ["nat"]], ["mod", "theorem", "le_rec_on_self", ["nat"]], ["del", "def", "log", ["nat"]], ["del", "theorem", "log_pow", ["nat"]], ["del", "theorem", "monotone_fact", ["nat"]], ["del", "theorem", "one_lt_fact", ["nat"]], ["del", "theorem", "pow_le_iff_le_log", ["nat"]], ["del", "theorem", "pow_log_le_self", ["nat"]], ["del", "theorem", "pow_succ_log_gt_self", ["nat"]], ["del", "def", "ppred", ["nat"]], ["del", "theorem", "ppred_eq_none", ["nat"]], ["del", "theorem", "ppred_eq_pred", ["nat"]], ["del", "theorem", "ppred_eq_some", ["nat"]], ["del", "theorem", "pred_eq_ppred", ["nat"]], ["del", "def", "psub", ["nat"]], ["del", "theorem", "psub_add", ["nat"]], ["del", "theorem", "psub_eq_none", ["nat"]], ["del", "theorem", "psub_eq_some", ["nat"]], ["del", "theorem", "psub_eq_sub", ["nat"]], ["del", "theorem", "sub_eq_psub", ["nat"]], ["del", "theorem", "succ_mul_choose_eq", ["nat"]], ["del", "theorem", "triangle_succ", ["nat"]], ["del", "theorem", "add_eq_one_iff", ["nat", "with_bot"]], ["del", "theorem", "add_eq_zero_iff", ["nat", "with_bot"]], ["del", "theorem", "coe_nonneg", ["nat", "with_bot"]], ["del", "theorem", "lt_zero_iff", ["nat", "with_bot"]]]}, {"oldPath": "src/data/nat/choose.lean", "newPath": null, "changes": [["del", "theorem", "add_pow", []], ["del", "theorem", "choose_le_middle", []], ["del", "theorem", "choose_le_succ_of_lt_half_left", []], ["del", "theorem", "choose_middle_le_pow", []], ["del", "theorem", "add_pow", ["commute"]], ["del", "theorem", "dvd_choose_add", ["nat", "prime"]], ["del", "theorem", "dvd_choose_self", ["nat", "prime"]], ["del", "theorem", "sum_range_choose", []], ["del", "theorem", "sum_range_choose_halfway", []]]}, {"oldPath": null, "newPath": "src/data/nat/choose/basic.lean", "changes": [["add", "def", "choose", ["nat"]], ["add", "theorem", "choose_eq_fact_div_fact", ["nat"]], ["add", "theorem", "choose_eq_zero_of_lt", ["nat"]], ["add", "theorem", "choose_le_middle", ["nat"]], ["add", "theorem", "choose_le_succ_of_lt_half_left", ["nat"]], ["add", "theorem", "choose_mul_fact_mul_fact", ["nat"]], ["add", "theorem", "choose_mul_succ_eq", ["nat"]], ["add", "theorem", "choose_one_right", ["nat"]], ["add", "theorem", "choose_pos", ["nat"]], ["add", "theorem", "choose_self", ["nat"]], ["add", "theorem", "choose_succ_right_eq", ["nat"]], ["add", "theorem", "choose_succ_self", ["nat"]], ["add", "theorem", "choose_succ_self_right", ["nat"]], ["add", "theorem", "choose_succ_succ", ["nat"]], ["add", "theorem", "choose_symm", ["nat"]], ["add", "theorem", "choose_symm_add", ["nat"]], ["add", "theorem", "choose_symm_half", ["nat"]], ["add", "theorem", "choose_symm_of_eq_add", ["nat"]], ["add", "theorem", "choose_two_right", ["nat"]], ["add", "theorem", "choose_zero_right", ["nat"]], ["add", "theorem", "choose_zero_succ", ["nat"]], ["add", "theorem", "fact_mul_fact_dvd_fact", ["nat"]], ["add", "theorem", "succ_mul_choose_eq", ["nat"]], ["add", "theorem", "triangle_succ", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/choose/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/choose/dvd.lean", "changes": [["add", "theorem", "dvd_choose_add", ["nat", "prime"]], ["add", "theorem", "dvd_choose_self", ["nat", "prime"]]]}, {"oldPath": null, "newPath": "src/data/nat/choose/sum.lean", "changes": [["add", "theorem", "add_pow", []], ["add", "theorem", "add_pow", ["commute"]], ["add", "theorem", "choose_middle_le_pow", ["nat"]], ["add", "theorem", "sum_range_choose", ["nat"]], ["add", "theorem", "sum_range_choose_halfway", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/fact.lean", "changes": [["add", "theorem", "dvd_fact", ["nat"]], ["add", "def", "fact", ["nat"]], ["add", "theorem", "fact_dvd_fact", ["nat"]], ["add", "theorem", "fact_eq_one", ["nat"]], ["add", "theorem", "fact_inj", ["nat"]], ["add", "theorem", "fact_le", ["nat"]], ["add", "theorem", "fact_lt", ["nat"]], ["add", "theorem", "fact_mul_pow_le_fact", ["nat"]], ["add", "theorem", "fact_ne_zero", ["nat"]], ["add", "theorem", "fact_one", ["nat"]], ["add", "theorem", "fact_pos", ["nat"]], ["add", "theorem", "fact_succ", ["nat"]], ["add", "theorem", "fact_zero", ["nat"]], ["add", "theorem", "monotone_fact", ["nat"]], ["add", "theorem", "one_lt_fact", ["nat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/log.lean", "changes": [["add", "def", "log", ["nat"]], ["add", "theorem", "log_pow", ["nat"]], ["add", "theorem", "pow_le_iff_le_log", ["nat"]], ["add", "theorem", "pow_log_le_self", ["nat"]], ["add", "theorem", "pow_succ_log_gt_self", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/psub.lean", "changes": [["add", "def", "ppred", ["nat"]], ["add", "theorem", "ppred_eq_none", ["nat"]], ["add", "theorem", "ppred_eq_pred", ["nat"]], ["add", "theorem", "ppred_eq_some", ["nat"]], ["add", "theorem", "pred_eq_ppred", ["nat"]], ["add", "def", "psub", ["nat"]], ["add", "theorem", "psub_add", ["nat"]], ["add", "theorem", "psub_eq_none", ["nat"]], ["add", "theorem", "psub_eq_some", ["nat"]], ["add", "theorem", "psub_eq_sub", ["nat"]], ["add", "theorem", "sub_eq_psub", ["nat"]]]}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/nat/with_bot.lean", "changes": [["add", "theorem", "add_eq_one_iff", ["nat", "with_bot"]], ["add", "theorem", "add_eq_zero_iff", ["nat", "with_bot"]], ["add", "theorem", "coe_nonneg", ["nat", "with_bot"]], ["add", "theorem", "lt_zero_iff", ["nat", "with_bot"]]]}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1600082006, "sha": "39962b7c", "message": "chore(data/polynomial/derivative): golf proof of mem_support_derivative (#4134)\nGolfed proof to be similar to what it was like prior to the refactor.", "changes": [{"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "mem_support_iff_coeff_ne_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}]}, {"timestamp": 1600079078, "sha": "6756d47c", "message": "feat(category_theory): Mon_.forget reflects isos (#4131)\nA step along the way to `sheaf X (Mon_ C) ~ Mon_ (sheaf X C)`.", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal.lean", "newPath": "src/category_theory/monoidal/internal.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/types.lean", "newPath": "src/category_theory/monoidal/internal/types.lean", "changes": []}]}, {"timestamp": 1600076551, "sha": "bbfeff38", "message": "feat(data/mv_polynomial/monad): mv_polynomial is a monad in two different ways (#4080)\nThese definitions and lemmas significantly decrease the pain in several computations in the Witt project.", "changes": [{"oldPath": null, "newPath": "src/data/mv_polynomial/monad.lean", "changes": [["add", "theorem", "aeval_X_left", ["mv_polynomial"]], ["add", "theorem", "aeval_X_left_apply", ["mv_polynomial"]], ["add", "theorem", "aeval_bind₁", ["mv_polynomial"]], ["add", "theorem", "aeval_bind₂", ["mv_polynomial"]], ["add", "theorem", "aeval_comp_bind₁", ["mv_polynomial"]], ["add", "theorem", "aeval_eq_bind₁", ["mv_polynomial"]], ["add", "theorem", "aeval_id_eq_join₁", ["mv_polynomial"]], ["add", "theorem", "aeval_rename", ["mv_polynomial"]], ["add", "def", "bind₁", ["mv_polynomial"]], ["add", "theorem", "bind₁_C_right", ["mv_polynomial"]], ["add", "theorem", "bind₁_X_left", ["mv_polynomial"]], ["add", "theorem", "bind₁_X_right", ["mv_polynomial"]], ["add", "theorem", "bind₁_bind₁", ["mv_polynomial"]], ["add", "theorem", "bind₁_comp_bind₁", ["mv_polynomial"]], ["add", "theorem", "bind₁_id", ["mv_polynomial"]], ["add", "theorem", "bind₁_monomial", ["mv_polynomial"]], ["add", "theorem", "bind₁_rename", ["mv_polynomial"]], ["add", "def", "bind₂", ["mv_polynomial"]], ["add", "theorem", "bind₂_C_left", ["mv_polynomial"]], ["add", "theorem", "bind₂_C_right", ["mv_polynomial"]], ["add", "theorem", "bind₂_X_right", ["mv_polynomial"]], ["add", "theorem", "bind₂_bind₂", ["mv_polynomial"]], ["add", "theorem", "bind₂_comp_C", ["mv_polynomial"]], ["add", "theorem", "bind₂_comp_bind₂", ["mv_polynomial"]], ["add", "theorem", "bind₂_id", ["mv_polynomial"]], ["add", "theorem", "bind₂_map", ["mv_polynomial"]], ["add", "theorem", "bind₂_monomial", ["mv_polynomial"]], ["add", "theorem", "bind₂_monomial_one", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_C_eq_bind₁", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_C_id_eq_join₁", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_C_left", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_bind₁", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_bind₂", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_comp_C", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_comp_bind₂", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_eq_bind₂", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_id_X_eq_join₂", ["mv_polynomial"]], ["add", "theorem", "hom_bind₁", ["mv_polynomial"]], ["add", "def", "join₁", ["mv_polynomial"]], ["add", "theorem", "join₁_rename", ["mv_polynomial"]], ["add", "def", "join₂", ["mv_polynomial"]], ["add", "theorem", "join₂_comp_map", ["mv_polynomial"]], ["add", "theorem", "join₂_map", ["mv_polynomial"]], ["add", "theorem", "map_bind₁", ["mv_polynomial"]], ["add", "theorem", "map_bind₂", ["mv_polynomial"]], ["add", "theorem", "map_comp_C", ["mv_polynomial"]], ["add", "theorem", "rename_bind₁", ["mv_polynomial"]]]}]}, {"timestamp": 1600076548, "sha": "ed71b2df", "message": "feat(computability/tm_computable): define computable (in polytime) for TMs, prove id is computable in constant time (#4048)\nWe define computability in polynomial time to be used in our future PR on P and NP.\nWe also prove that id is computable in constant time.\n", "changes": [{"oldPath": null, "newPath": "src/computability/tm_computable.lean", "changes": [["add", "def", "refl", ["turing", "evals_to"]], ["add", "def", "trans", ["turing", "evals_to"]], ["add", "structure", "evals_to", ["turing"]], ["add", "def", "refl", ["turing", "evals_to_in_time"]], ["add", "def", "trans", ["turing", "evals_to_in_time"]], ["add", "structure", "evals_to_in_time", ["turing"]], ["add", "def", "cfg", ["turing", "fin_tm2"]], ["add", "def", "step", ["turing", "fin_tm2"]], ["add", "def", "stmt", ["turing", "fin_tm2"]], ["add", "structure", "fin_tm2", ["turing"]], ["add", "def", "halt_list", ["turing"]], ["add", "def", "id_computable", ["turing"]], ["add", "def", "id_computable_in_poly_time", ["turing"]], ["add", "def", "id_computable_in_time", ["turing"]], ["add", "def", "id_computer", ["turing"]], ["add", "def", "init_list", ["turing"]], ["add", "structure", "tm2_computable", ["turing"]], ["add", "structure", "tm2_computable_aux", ["turing"]], ["add", "def", "to_tm2_computable_in_time", ["turing", "tm2_computable_in_poly_time"]], ["add", "structure", "tm2_computable_in_poly_time", ["turing"]], ["add", "def", "to_tm2_computable", ["turing", "tm2_computable_in_time"]], ["add", "structure", "tm2_computable_in_time", ["turing"]], ["add", "def", "tm2_outputs", ["turing"]], ["add", "def", "to_tm2_outputs", ["turing", "tm2_outputs_in_time"]], ["add", "def", "tm2_outputs_in_time", ["turing"]]]}]}, {"timestamp": 1600070618, "sha": "dce6b373", "message": "chore(algebra/homology): cleanup instances post #3995 (#4137)", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": []}, {"oldPath": "src/algebra/homology/image_to_kernel_map.lean", "newPath": "src/algebra/homology/image_to_kernel_map.lean", "changes": []}]}, {"timestamp": 1600070616, "sha": "1c2ddbcf", "message": "feat(field_theory/fixed): dimension over fixed field is order of group (#4125)\n```lean\ntheorem dim_fixed_points (G : Type u) (F : Type v) [group G] [field F]\n [fintype G] [faithful_mul_semiring_action G F] :\n findim (fixed_points G F) F = fintype.card G\n````", "changes": [{"oldPath": null, "newPath": "src/algebra/big_operators/finsupp.lean", "changes": [["add", "theorem", "sum_apply'", ["finset"]], ["add", "theorem", "sum_apply'", ["finsupp"]], ["add", "theorem", "sum_sum_index'", ["finsupp"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "theorem", "eq_of_smul_eq_smul", []], ["add", "theorem", "injective_to_semiring_hom", []]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inj_on_insert", ["set"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": [["add", "theorem", "cardinal_mk_alg_hom", []], ["add", "theorem", "findim_alg_hom", []], ["mod", "theorem", "coe_algebra_map", ["fixed_points"]], ["add", "theorem", "coe_to_alg_hom", ["fixed_points"]], ["add", "theorem", "dim_le_card", ["fixed_points"]], ["add", "theorem", "findim_eq_card", ["fixed_points"]], ["add", "theorem", "findim_le_card", ["fixed_points"]], ["mod", "theorem", "is_integral", ["fixed_points"]], ["add", "theorem", "linear_independent_smul_of_linear_independent", ["fixed_points"]], ["mod", "theorem", "eval₂", ["fixed_points", "minpoly"]], ["mod", "theorem", "irreducible", ["fixed_points", "minpoly"]], ["mod", "theorem", "irreducible_aux", ["fixed_points", "minpoly"]], ["mod", "theorem", "minimal_polynomial", ["fixed_points", "minpoly"]], ["mod", "theorem", "monic", ["fixed_points", "minpoly"]], ["mod", "theorem", "ne_one", ["fixed_points", "minpoly"]], ["add", "theorem", "of_eval₂", ["fixed_points", "minpoly"]], ["mod", "def", "minpoly", ["fixed_points"]], ["del", "theorem", "of_eval₂", ["fixed_points"]], ["mod", "theorem", "smul", ["fixed_points"]], ["mod", "theorem", "smul_polynomial", ["fixed_points"]], ["add", "def", "to_alg_hom", ["fixed_points"]], ["add", "theorem", "to_alg_hom_apply", ["fixed_points"]], ["add", "theorem", "linear_independent_to_linear_map", []]]}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": [["add", "theorem", "findim_linear_map'", ["finite_dimensional"]], ["add", "theorem", "findim_linear_map", ["finite_dimensional"]], ["add", "theorem", "right", ["finite_dimensional"]]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "def", "to_fun", ["mul_action"]], ["add", "theorem", "to_fun_apply", ["mul_action"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "image'", ["linear_independent"]], ["add", "theorem", "linear_independent_equiv'", []], ["add", "theorem", "linear_independent_equiv", []], ["add", "theorem", "linear_independent_image", []], ["add", "theorem", "linear_independent_insert'", []], ["add", "theorem", "linear_independent_insert", []], ["add", "theorem", "linear_independent_of_comp", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_le", []], ["add", "theorem", "mk_eq_dim''", ["is_basis"]], ["add", "theorem", "{u₁}", []]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "total_apply_of_mem_supported", ["finsupp"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "lto_fun", ["linear_map"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "card_le_of", ["cardinal"]]]}]}, {"timestamp": 1600070615, "sha": "b1e5a6b6", "message": "doc(measure_theory): docstrings for continuity from above and below (#4122)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}]}, {"timestamp": 1600070613, "sha": "5a478f0d", "message": "doc(category_theory/natural_isomorphism): documentation and cleanup (#4120)", "changes": [{"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "def", "app", ["category_theory", "iso"]], ["del", "def", "is_iso_app_of_is_iso", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1600070611, "sha": "51608f4a", "message": "feat(linear_algebra/affine_space,geometry/euclidean): simplex centers and order of points (#4116)\nAdd lemmas that the centroid of an injective indexed family of points\ndoes not depend on the indices of those points, only on the set of\npoints in their image, and likewise that the centroid, circumcenter\nand Monge point of a simplex and thus the orthocenter of a triangle do\nnot depend on the order in which the vertices are indexed by `fin (n + 1)`,\nonly on the set of vertices.", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "circumcenter_eq_of_range_eq", ["affine", "simplex"]]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["add", "theorem", "monge_point_eq_of_range_eq", ["affine", "simplex"]], ["add", "theorem", "orthocenter_eq_of_range_eq", ["affine", "triangle"]]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "centroid_eq_centroid_image_of_inj_on", ["finset"]], ["add", "theorem", "centroid_eq_of_inj_on_of_image_eq", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "centroid_eq_of_range_eq", ["affine", "simplex"]]]}]}, {"timestamp": 1600070609, "sha": "b19fbd79", "message": "feat(ring_theory/algebra_tower): coefficients for a basis in an algebra tower (#4114)\nThis PR gives an expression for `(is_basis.smul hb hc).repr` in terms of `hb.repr` and `hc.repr`, useful if you have a field extension `L / K`, and `x y : L`, and want to write `y` in terms of the power basis of `K(x)`.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ext_on", ["submodule", "linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "repr_apply_eq", ["is_basis"]], ["add", "theorem", "repr_eq_iff", ["is_basis"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["mod", "theorem", "smul", ["is_basis"]], ["add", "theorem", "smul_repr", ["is_basis"]], ["add", "theorem", "smul_repr_mk", ["is_basis"]], ["mod", "theorem", "linear_independent_smul", []]]}]}, {"timestamp": 1600066387, "sha": "e3559335", "message": "chore(category_theory/limits): remove unnecessary typeclass arguments (#4141)\nOngoing cleanup post #3995.\nPreviously we couldn't construct things like `instance : has_kernel (0 : X \\hom Y)`, because it wouldn't have agreed definitionally with more general instances. Now we can.", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["mod", "def", "iso_target_of_self", ["category_theory", "limits", "coequalizer"]], ["mod", "theorem", "iso_target_of_self_hom", ["category_theory", "limits", "coequalizer"]], ["mod", "theorem", "iso_target_of_self_inv", ["category_theory", "limits", "coequalizer"]], ["mod", "def", "iso_source_of_self", ["category_theory", "limits", "equalizer"]], ["mod", "theorem", "iso_source_of_self_hom", ["category_theory", "limits", "equalizer"]], ["mod", "theorem", "iso_source_of_self_inv", ["category_theory", "limits", "equalizer"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["mod", "def", "π_of_zero", ["category_theory", "limits", "cokernel"]], ["mod", "def", "cokernel_zero_iso_target", ["category_theory", "limits"]], ["mod", "theorem", "cokernel_zero_iso_target_hom", ["category_theory", "limits"]], ["mod", "theorem", "cokernel_zero_iso_target_inv", ["category_theory", "limits"]], ["mod", "def", "ι_of_zero", ["category_theory", "limits", "kernel"]], ["mod", "def", "kernel_zero_iso_source", ["category_theory", "limits"]], ["mod", "theorem", "kernel_zero_iso_source_hom", ["category_theory", "limits"]], ["mod", "theorem", "kernel_zero_iso_source_inv", ["category_theory", "limits"]]]}]}, {"timestamp": 1600042499, "sha": "bd385fbf", "message": "chore(category_theory/limits/functor_category): shuffle limits in functor cats (#4124)\nGive `is_limit` versions for statements about limits in the functor category, and write the `has_limit` versions in terms of those.\nThis also generalises the universes a little.\nAs usual, suggestions for better docstrings or better names appreciated!", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "theorem", "w", ["category_theory", "limits", "cocone"]], ["mod", "theorem", "w", ["category_theory", "limits", "cone"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["del", "theorem", "functor_w", ["category_theory", "limits", "cocone"]], ["add", "def", "combine_cocones", ["category_theory", "limits"]], ["add", "def", "combine_cones", ["category_theory", "limits"]], ["add", "def", "combined_is_colimit", ["category_theory", "limits"]], ["add", "def", "combined_is_limit", ["category_theory", "limits"]], ["del", "theorem", "functor_w", ["category_theory", "limits", "cone"]], ["add", "def", "evaluate_combined_cocones", ["category_theory", "limits"]], ["add", "def", "evaluate_combined_cones", ["category_theory", "limits"]], ["del", "def", "evaluate_functor_category_colimit_cocone", ["category_theory", "limits"]], ["del", "def", "evaluate_functor_category_limit_cone", ["category_theory", "limits"]], ["add", "def", "evaluation_jointly_reflects_colimits", ["category_theory", "limits"]], ["add", "def", "evaluation_jointly_reflects_limits", ["category_theory", "limits"]], ["del", "def", "functor_category_colimit_cocone", ["category_theory", "limits"]], ["del", "def", "functor_category_is_colimit_cocone", ["category_theory", "limits"]], ["del", "def", "functor_category_is_limit_cone", ["category_theory", "limits"]], ["del", "def", "functor_category_limit_cone", ["category_theory", "limits"]]]}]}, {"timestamp": 1599985282, "sha": "5d35e626", "message": "feat(algebraic_geometry/*): Gamma the global sections functor (#4126)", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "def", "Γ", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Γ_def", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Γ_map", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Γ_map_op", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Γ_obj", ["algebraic_geometry", "Scheme"]], ["add", "theorem", "Γ_obj_op", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "def", "Γ", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "Γ_def", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "Γ_map", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "Γ_map_op", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "Γ_obj", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "Γ_obj_op", ["algebraic_geometry", "LocallyRingedSpace"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "def", "Γ", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "Γ_map_op", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "Γ_obj_op", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": [["add", "def", "Γ", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "Γ_def", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "Γ_map", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "Γ_map_op", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "Γ_obj", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "Γ_obj_op", ["algebraic_geometry", "SheafedSpace"]]]}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "def", "bot_le", ["topological_space", "opens"]], ["add", "def", "le_map_top", ["topological_space", "opens"]], ["add", "def", "le_top", ["topological_space", "opens"]]]}]}, {"timestamp": 1599969356, "sha": "f403a8be", "message": "feat(category_theory/limits/types): is_limit versions of limits in type (#4130)\n`is_limit` versions for definitions and lemmas about limits in `Type u`.", "changes": [{"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "def", "is_limit_equiv_sections", ["category_theory", "limits", "types"]], ["add", "theorem", "is_limit_equiv_sections_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "is_limit_equiv_sections_symm_apply", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1599958914, "sha": "dd43823c", "message": "chore(scripts): update nolints.txt (#4129)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1599935415, "sha": "f3326db1", "message": "feat(normed_space): second countability for linear maps (#4099)\nFrom the sphere eversion project, various lemmas about continuous linear maps and a theorem: if E is finite dimensional and F is second countable then the space of continuous linear maps from E to F is second countable.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "eq_of_norm_sub_eq_zero", []], ["add", "theorem", "norm_le_insert", []], ["add", "theorem", "norm_smul_of_nonneg", []], ["add", "theorem", "tendsto_nhds_nhds", ["normed_group"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "coe_constrL", ["is_basis"]], ["add", "def", "constrL", ["is_basis"]], ["add", "theorem", "constrL_apply", ["is_basis"]], ["add", "theorem", "constrL_basis", ["is_basis"]], ["add", "def", "equiv_funL", ["is_basis"]], ["add", "theorem", "op_norm_le", ["is_basis"]], ["add", "theorem", "sup_norm_le_norm", ["is_basis"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_eq_of_bounds", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_of_ball", ["continuous_linear_map"]], ["add", "theorem", "continuous_of_linear_of_bound", []]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "constr_apply_fintype", ["is_basis"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "map_sum", ["continuous_linear_map"]]]}]}, {"timestamp": 1599928453, "sha": "c8771b6b", "message": "fix(algebra/ring/basic): delete mul_self_sub_mul_self_eq (#4119)\nIt's redundant with `mul_self_sub_mul_self`.\nAlso renamed `mul_self_sub_one_eq` to `mul_self_sub_one`.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "mul_self_sub_mul_self_eq", []], ["add", "theorem", "mul_self_sub_one", []], ["del", "theorem", "mul_self_sub_one_eq", []]]}]}, {"timestamp": 1599925793, "sha": "169384a7", "message": "feat(slim_check): add test cases (#4100)", "changes": [{"oldPath": "src/system/random/basic.lean", "newPath": "src/system/random/basic.lean", "changes": [["add", "def", "run_rand_with", ["io"]]]}, {"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": [["mod", "def", "check", ["slim_check", "testable"]]]}, {"oldPath": null, "newPath": "test/random.lean", "changes": [["add", "def", "find_prime", []], ["add", "def", "find_prime_aux", []], ["add", "def", "iterated_primality_test", []], ["add", "def", "iterated_primality_test_aux", []], ["add", "def", "primality_test", []]]}, {"oldPath": "test/slim_check.lean", "newPath": "test/slim_check.lean", "changes": [["del", "def", "find_prime", []], ["del", "def", "find_prime_aux", []], ["del", "def", "iterated_primality_test", []], ["del", "def", "iterated_primality_test_aux", []], ["del", "def", "primality_test", []]]}]}, {"timestamp": 1599903487, "sha": "c3a6a699", "message": "doc(group_theory/subgroup): fix links in module doc (#4115)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1599903485, "sha": "88dd01b7", "message": "chore(category_theory): minor cleanups (#4110)", "changes": [{"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": [["add", "def", "colimit_cocone_is_colimit", ["AddCommGroup", "colimits"]], ["del", "def", "colimit_is_colimit", ["AddCommGroup", "colimits"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "map", ["category_theory", "limits", "is_colimit"]], ["del", "def", "is_colimit_map", ["category_theory", "limits"]], ["add", "def", "map", ["category_theory", "limits", "is_limit"]], ["del", "def", "is_limit_map", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "theorem", "hom_inv_id_apply", ["category_theory"]], ["add", "theorem", "inv_hom_id_apply", ["category_theory"]]]}]}, {"timestamp": 1599896755, "sha": "b1a210ec", "message": "feat(logic/basic): Add more simp lemmas for forall (#4117)", "changes": [{"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall_eq_apply_imp_iff'", []], ["add", "theorem", "forall_eq_apply_imp_iff", []]]}]}, {"timestamp": 1599890457, "sha": "34199869", "message": "feat(category_theory/limits): make has_limit a Prop (#3995)\nWe change `has_limit` so that it is only an existential statement that limit data exists, and in particular lives in `Prop`.\nThis means we can safely have multiple `has_limit` classes for the same functor, because proof irrelevance ensures Lean sees them all as the same.\nWe still have access to the API which lets us pretend we have consistently chosen limits, but now these limits are provided by the axiom of choice and hence are definitionally opaque.", "changes": [{"oldPath": "docs/tutorial/category_theory/Ab.lean", "newPath": "docs/tutorial/category_theory/Ab.lean", "changes": []}, {"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": []}, {"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": [["add", "def", "binary_product_limit_cone", ["AddCommGroup"]], ["add", "def", "biprod_iso_prod", ["AddCommGroup"]], ["add", "def", "biproduct_iso_pi", ["AddCommGroup"]], ["add", "def", "product_limit_cone", ["AddCommGroup", "has_limit"]]]}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": [["del", "def", "cokernel_iso_quotient", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/kernels.lean", "newPath": "src/algebra/category/Module/kernels.lean", "changes": [["add", "theorem", "has_cokernels_Module", ["Module"]], ["del", "def", "has_cokernels_Module", ["Module"]], ["add", "theorem", "has_kernels_Module", ["Module"]], ["del", "def", "has_kernels_Module", ["Module"]]]}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": []}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/algebra/homology/image_to_kernel_map.lean", "newPath": "src/algebra/homology/image_to_kernel_map.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "theorem", "has_finite_biproducts", ["category_theory", "abelian"]], ["del", "def", "has_finite_biproducts", ["category_theory", "abelian"]], ["add", "theorem", "has_pullbacks", ["category_theory", "abelian"]], ["del", "def", "has_pullbacks", ["category_theory", "abelian"]], ["add", "theorem", "has_pushouts", ["category_theory", "abelian"]], ["del", "def", "has_pushouts", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": [["add", "theorem", "has_colimit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "has_colimit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "has_limit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "has_limit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "pullback_of_mono", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "pullback_of_mono", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "pushout_of_epi", ["category_theory", "non_preadditive_abelian"]], ["del", "def", "pushout_of_epi", ["category_theory", "non_preadditive_abelian"]]]}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["add", "theorem", "has_colimit_of_comp_equivalence", ["category_theory", "adjunction"]], ["del", "def", "has_colimit_of_comp_equivalence", ["category_theory", "adjunction"]], ["add", "theorem", "has_limit_of_comp_equivalence", ["category_theory", "adjunction"]], ["del", "def", "has_limit_of_comp_equivalence", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["del", "def", "total", ["category_theory", "graded_object"]]]}, {"oldPath": "src/category_theory/limits/colimit_limit.lean", "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "theorem", "has_colimit_of_created", ["category_theory"]], ["del", "def", "has_colimit_of_created", ["category_theory"]], ["add", "theorem", "has_limit_of_created", ["category_theory"]], ["del", "def", "has_limit_of_created", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": []}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": [["del", "def", "mk_of_has_limits", ["category_theory", "limits", "diagram_of_cones"]], ["del", "def", "limit_iso_limit_curry_comp_lim", ["category_theory", "limits"]], ["del", "def", "limit_uncurry_iso_limit_comp_lim", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "def", "cocone", ["category_theory", "limits", "colimit"]], ["add", "theorem", "cocone_X", ["category_theory", "limits", "colimit"]], ["add", "structure", "colimit_cocone", ["category_theory", "limits"]], ["add", "def", "get_colimit_cocone", ["category_theory", "limits"]], ["add", "def", "get_limit_cone", ["category_theory", "limits"]], ["add", "theorem", "mk", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "of_cocones_iso", ["category_theory", "limits", "has_colimit"]], ["del", "def", "of_cocones_iso", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "has_colimit_of_equivalence_comp", ["category_theory", "limits"]], ["del", "def", "has_colimit_of_equivalence_comp", ["category_theory", "limits"]], ["add", "theorem", "has_colimit_of_iso", ["category_theory", "limits"]], ["del", "def", "has_colimit_of_iso", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_of_shape_of_equivalence", ["category_theory", "limits"]], ["del", "def", "has_colimits_of_shape_of_equivalence", ["category_theory", "limits"]], ["add", "theorem", "mk", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "of_cones_iso", ["category_theory", "limits", "has_limit"]], ["del", "def", "of_cones_iso", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "has_limit_of_equivalence_comp", ["category_theory", "limits"]], ["del", "def", "has_limit_of_equivalence_comp", ["category_theory", "limits"]], ["add", "theorem", "has_limit_of_iso", ["category_theory", "limits"]], ["del", "def", "has_limit_of_iso", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_shape_of_equivalence", ["category_theory", "limits"]], ["del", "def", "has_limits_of_shape_of_equivalence", ["category_theory", "limits"]], ["add", "def", "is_colimit_map", ["category_theory", "limits"]], ["add", "def", "is_limit_map", ["category_theory", "limits"]], ["add", "theorem", "is_limit_map_π", ["category_theory", "limits"]], ["mod", "def", "cone", ["category_theory", "limits", "limit"]], ["add", "theorem", "cone_X", ["category_theory", "limits", "limit"]], ["add", "structure", "limit_cone", ["category_theory", "limits"]], ["add", "theorem", "ι_is_colimit_map", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "theorem", "has_colimit_of_has_limit_left_op", ["category_theory", "limits"]], ["del", "def", "has_colimit_of_has_limit_left_op", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_of_shape_op_of_has_limits_of_shape", ["category_theory", "limits"]], ["del", "def", "has_colimits_of_shape_op_of_has_limits_of_shape", ["category_theory", "limits"]], ["add", "theorem", "has_colimits_op_of_has_limits", ["category_theory", "limits"]], ["del", "def", "has_colimits_op_of_has_limits", ["category_theory", "limits"]], ["add", "theorem", "has_coproducts_opposite", ["category_theory", "limits"]], ["del", "def", "has_coproducts_opposite", ["category_theory", "limits"]], ["add", "theorem", "has_limit_of_has_colimit_left_op", ["category_theory", "limits"]], ["del", "def", "has_limit_of_has_colimit_left_op", ["category_theory", "limits"]], ["add", "theorem", "has_limits_of_shape_op_of_has_colimits_of_shape", ["category_theory", "limits"]], ["del", "def", "has_limits_of_shape_op_of_has_colimits_of_shape", ["category_theory", "limits"]], ["add", "theorem", "has_limits_op_of_has_colimits", ["category_theory", "limits"]], ["del", "def", "has_limits_op_of_has_colimits", ["category_theory", "limits"]], ["add", "theorem", "has_products_opposite", ["category_theory", "limits"]], ["del", "def", "has_products_opposite", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/pi.lean", "newPath": "src/category_theory/limits/pi.lean", "changes": [["add", "theorem", "has_colimit_of_has_colimit_comp_eval", ["category_theory", "pi"]], ["del", "def", "has_colimit_of_has_colimit_comp_eval", ["category_theory", "pi"]], ["add", "theorem", "has_limit_of_has_limit_comp_eval", ["category_theory", "pi"]], ["del", "def", "has_limit_of_has_limit_comp_eval", ["category_theory", "pi"]]]}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/shapes.lean", "newPath": "src/category_theory/limits/preserves/shapes.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "has_binary_coproducts_of_has_colimit_pair", ["category_theory", "limits"]], ["del", "def", "has_binary_coproducts_of_has_colimit_pair", ["category_theory", "limits"]], ["add", "theorem", "has_binary_products_of_has_limit_pair", ["category_theory", "limits"]], ["del", "def", "has_binary_products_of_has_limit_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "bicone", ["category_theory", "limits", "binary_biproduct"]], ["add", "theorem", "bicone_fst", ["category_theory", "limits", "binary_biproduct"]], ["add", "theorem", "bicone_inl", ["category_theory", "limits", "binary_biproduct"]], ["add", "theorem", "bicone_inr", ["category_theory", "limits", "binary_biproduct"]], ["add", "theorem", "bicone_snd", ["category_theory", "limits", "binary_biproduct"]], ["add", "def", "is_colimit", ["category_theory", "limits", "binary_biproduct"]], ["add", "def", "is_limit", ["category_theory", "limits", "binary_biproduct"]], ["add", "structure", "binary_biproduct_data", ["category_theory", "limits"]], ["add", "theorem", "inl_desc", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inr_desc", ["category_theory", "limits", "biprod"]], ["add", "theorem", "lift_fst", ["category_theory", "limits", "biprod"]], ["add", "theorem", "lift_snd", ["category_theory", "limits", "biprod"]], ["mod", "def", "biprod", ["category_theory", "limits"]], ["mod", "def", "bicone", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "bicone_ι", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "bicone_π", ["category_theory", "limits", "biproduct"]], ["del", "theorem", "inl_map", ["category_theory", "limits", "biproduct"]], ["mod", "def", "is_colimit", ["category_theory", "limits", "biproduct"]], ["mod", "def", "is_limit", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "lift_π", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "map_π", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_desc", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_map", ["category_theory", "limits", "biproduct"]], ["add", "def", "get_binary_biproduct_data", ["category_theory", "limits"]], ["add", "def", "get_biproduct_data", ["category_theory", "limits"]], ["add", "theorem", "mk", ["category_theory", "limits", "has_binary_biproduct"]], ["add", "theorem", "of_has_binary_coproduct", ["category_theory", "limits", "has_binary_biproduct"]], ["del", "def", "of_has_binary_coproduct", ["category_theory", "limits", "has_binary_biproduct"]], ["add", "theorem", "of_has_binary_product", ["category_theory", "limits", "has_binary_biproduct"]], ["del", "def", "of_has_binary_product", ["category_theory", "limits", "has_binary_biproduct"]], ["add", "theorem", "has_binary_biproduct_of_total", ["category_theory", "limits"]], ["del", "def", "has_binary_biproduct_of_total", ["category_theory", "limits"]], ["add", "theorem", "of_has_binary_coproducts", ["category_theory", "limits", "has_binary_biproducts"]], ["del", "def", "of_has_binary_coproducts", ["category_theory", "limits", "has_binary_biproducts"]], ["add", "theorem", "of_has_binary_products", ["category_theory", "limits", "has_binary_biproducts"]], ["del", "def", "of_has_binary_products", ["category_theory", "limits", "has_binary_biproducts"]], ["add", "theorem", "has_binary_biproducts_of_finite_biproducts", ["category_theory", "limits"]], ["del", "def", "has_binary_biproducts_of_finite_biproducts", ["category_theory", "limits"]], ["add", "theorem", "mk", ["category_theory", "limits", "has_biproduct"]], ["add", "theorem", "of_has_coproduct", ["category_theory", "limits", "has_biproduct"]], ["del", "def", "of_has_coproduct", ["category_theory", "limits", "has_biproduct"]], ["add", "theorem", "of_has_product", ["category_theory", "limits", "has_biproduct"]], ["del", "def", "of_has_product", ["category_theory", "limits", "has_biproduct"]], ["add", "theorem", "has_biproduct_of_total", ["category_theory", "limits"]], ["del", "def", "has_biproduct_of_total", ["category_theory", "limits"]], ["add", "theorem", "of_has_finite_coproducts", ["category_theory", "limits", "has_finite_biproducts"]], ["del", "def", "of_has_finite_coproducts", ["category_theory", "limits", "has_finite_biproducts"]], ["add", "theorem", "of_has_finite_products", ["category_theory", "limits", "has_finite_biproducts"]], ["del", "def", "of_has_finite_products", ["category_theory", "limits", "has_finite_biproducts"]], ["add", "structure", "limit_bicone", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": [["add", "theorem", "has_binary_products_of_terminal_and_pullbacks", []], ["del", "def", "has_binary_products_of_terminal_and_pullbacks", []]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": [["add", "theorem", "has_equalizers_of_pullbacks_and_binary_products", ["category_theory", "limits"]], ["del", "def", "has_equalizers_of_pullbacks_and_binary_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": [["add", "theorem", "finite_limits_from_equalizers_and_finite_products", ["category_theory", "limits"]], ["del", "def", "finite_limits_from_equalizers_and_finite_products", ["category_theory", "limits"]], ["add", "theorem", "limits_from_equalizers_and_products", ["category_theory", "limits"]], ["del", "def", "limits_from_equalizers_and_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/default.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "changes": [["add", "theorem", "has_over_limit_discrete_of_wide_pullback_limit", ["category_theory", "over", "construct_products"]], ["del", "def", "has_over_limit_discrete_of_wide_pullback_limit", ["category_theory", "over", "construct_products"]], ["add", "theorem", "over_binary_product_of_pullback", ["category_theory", "over", "construct_products"]], ["del", "def", "over_binary_product_of_pullback", ["category_theory", "over", "construct_products"]], ["add", "theorem", "over_finite_products_of_finite_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["del", "def", "over_finite_products_of_finite_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["add", "theorem", "over_product_of_wide_pullback", ["category_theory", "over", "construct_products"]], ["del", "def", "over_product_of_wide_pullback", ["category_theory", "over", "construct_products"]], ["add", "theorem", "over_products_of_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["del", "def", "over_products_of_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["add", "theorem", "over_has_terminal", ["category_theory", "over"]], ["del", "def", "over_has_terminal", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": [["add", "theorem", "has_colimit_span_of_has_colimit_pair_of_has_colimit_parallel_pair", ["category_theory", "limits"]], ["del", "def", "has_colimit_span_of_has_colimit_pair_of_has_colimit_parallel_pair", ["category_theory", "limits"]], ["add", "theorem", "has_limit_cospan_of_has_limit_pair_of_has_limit_parallel_pair", ["category_theory", "limits"]], ["del", "def", "has_limit_cospan_of_has_limit_pair_of_has_limit_parallel_pair", ["category_theory", "limits"]], ["add", "theorem", "has_pullbacks_of_has_binary_products_of_has_equalizers", ["category_theory", "limits"]], ["del", "def", "has_pullbacks_of_has_binary_products_of_has_equalizers", ["category_theory", "limits"]], ["add", "theorem", "has_pushouts_of_has_binary_coproducts_of_has_coequalizers", ["category_theory", "limits"]], ["del", "def", "has_pushouts_of_has_binary_coproducts_of_has_coequalizers", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "has_coequalizers_of_has_colimit_parallel_pair", ["category_theory", "limits"]], ["del", "def", "has_coequalizers_of_has_colimit_parallel_pair", ["category_theory", "limits"]], ["add", "theorem", "has_equalizers_of_has_limit_parallel_pair", ["category_theory", "limits"]], ["del", "def", "has_equalizers_of_has_limit_parallel_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["mod", "def", "has_finite_colimits", ["category_theory", "limits"]], ["add", "theorem", "has_finite_colimits_of_has_colimits", ["category_theory", "limits"]], ["del", "def", "has_finite_colimits_of_has_colimits", ["category_theory", "limits"]], ["mod", "def", "has_finite_limits", ["category_theory", "limits"]], ["add", "theorem", "has_finite_limits_of_has_limits", ["category_theory", "limits"]], ["del", "def", "has_finite_limits_of_has_limits", ["category_theory", "limits"]], ["mod", "def", "has_finite_wide_pullbacks", ["category_theory", "limits"]], ["add", "theorem", "has_finite_wide_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["del", "def", "has_finite_wide_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["mod", "def", "has_finite_wide_pushouts", ["category_theory", "limits"]], ["add", "theorem", "has_finite_wide_pushouts_of_has_finite_limits", ["category_theory", "limits"]], ["del", "def", "has_finite_wide_pushouts_of_has_finite_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": [["mod", "def", "has_finite_coproducts", ["category_theory", "limits"]], ["add", "theorem", "has_finite_coproducts_of_has_coproducts", ["category_theory", "limits"]], ["del", "def", "has_finite_coproducts_of_has_coproducts", ["category_theory", "limits"]], ["add", "theorem", "has_finite_coproducts_of_has_finite_colimits", ["category_theory", "limits"]], ["del", "def", "has_finite_coproducts_of_has_finite_colimits", ["category_theory", "limits"]], ["mod", "def", "has_finite_products", ["category_theory", "limits"]], ["add", "theorem", "has_finite_products_of_has_finite_limits", ["category_theory", "limits"]], ["del", "def", "has_finite_products_of_has_finite_limits", ["category_theory", "limits"]], ["add", "theorem", "has_finite_products_of_has_products", ["category_theory", "limits"]], ["del", "def", "has_finite_products_of_has_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["mod", "def", "has_cokernel", ["category_theory", "limits"]], ["mod", "def", "has_kernel", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "has_pullbacks_of_has_limit_cospan", ["category_theory", "limits"]], ["del", "def", "has_pullbacks_of_has_limit_cospan", ["category_theory", "limits"]], ["add", "theorem", "has_pushouts_of_has_colimit_span", ["category_theory", "limits"]], ["del", "def", "has_pushouts_of_has_colimit_span", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "theorem", "has_initial_of_unique", ["category_theory", "limits"]], ["del", "def", "has_initial_of_unique", ["category_theory", "limits"]], ["add", "theorem", "has_terminal_of_unique", ["category_theory", "limits"]], ["del", "def", "has_terminal_of_unique", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "def", "binary_coproduct_limit_cone", ["category_theory", "limits", "types"]], ["add", "def", "binary_product_limit_cone", ["category_theory", "limits", "types"]], ["del", "theorem", "coprod", ["category_theory", "limits", "types"]], ["del", "theorem", "coprod_desc", ["category_theory", "limits", "types"]], ["del", "theorem", "coprod_inl", ["category_theory", "limits", "types"]], ["del", "theorem", "coprod_inr", ["category_theory", "limits", "types"]], ["del", "theorem", "coprod_map", ["category_theory", "limits", "types"]], ["add", "def", "coproduct_limit_cone", ["category_theory", "limits", "types"]], ["del", "theorem", "initial", ["category_theory", "limits", "types"]], ["add", "def", "initial_limit_cone", ["category_theory", "limits", "types"]], ["del", "theorem", "pi", ["category_theory", "limits", "types"]], ["del", "theorem", "pi_lift", ["category_theory", "limits", "types"]], ["del", "theorem", "pi_map", ["category_theory", "limits", "types"]], ["del", "theorem", "pi_π", ["category_theory", "limits", "types"]], ["del", "theorem", "prod", ["category_theory", "limits", "types"]], ["del", "theorem", "prod_fst", ["category_theory", "limits", "types"]], ["del", "theorem", "prod_lift", ["category_theory", "limits", "types"]], ["del", "theorem", "prod_map", ["category_theory", "limits", "types"]], ["del", "theorem", "prod_snd", ["category_theory", "limits", "types"]], ["add", "def", "product_limit_cone", ["category_theory", "limits", "types"]], ["del", "theorem", "sigma", ["category_theory", "limits", "types"]], ["del", "theorem", "sigma_desc", ["category_theory", "limits", "types"]], ["del", "theorem", "sigma_map", ["category_theory", "limits", "types"]], ["del", "theorem", "sigma_ι", ["category_theory", "limits", "types"]], ["del", "theorem", "terminal", ["category_theory", "limits", "types"]], ["del", "theorem", "terminal_from", ["category_theory", "limits", "types"]], ["add", "def", "terminal_limit_cone", ["category_theory", "limits", "types"]], ["del", "def", "types_has_binary_coproducts", ["category_theory", "limits", "types"]], ["del", "def", "types_has_binary_products", ["category_theory", "limits", "types"]], ["del", "def", "types_has_coproducts", ["category_theory", "limits", "types"]], ["del", "def", "types_has_initial", ["category_theory", "limits", "types"]], ["del", "def", "types_has_products", ["category_theory", "limits", "types"]], ["del", "def", "types_has_terminal", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["mod", "def", "has_wide_pullbacks", ["category_theory", "limits"]], ["mod", "def", "has_wide_pushouts", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "has_initial", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "has_initial", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "has_terminal", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "has_terminal", ["category_theory", "limits", "has_zero_object"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["add", "theorem", "has_limits_of_reflective", ["category_theory"]], ["del", "def", "has_limits_of_reflective", ["category_theory"]], ["add", "theorem", "forget_creates_colimits_of_monad_preserves", ["category_theory", "monad"]], ["del", "def", "forget_creates_colimits_of_monad_preserves", ["category_theory", "monad"]], ["add", "theorem", "has_limit_of_comp_forget_has_limit", ["category_theory", "monad"]], ["del", "def", "has_limit_of_comp_forget_has_limit", ["category_theory", "monad"]], ["add", "theorem", "monadic_creates_limits", ["category_theory"]], ["del", "def", "monadic_creates_limits", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/of_chosen_finite_products.lean", "changes": [["add", "def", "assoc", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "assoc_fst", ["category_theory", "limits", "binary_fan"]], ["add", "def", "assoc_inv", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "assoc_inv_fst", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "assoc_inv_snd", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "assoc_snd", ["category_theory", "limits", "binary_fan"]], ["add", "def", "associator", ["category_theory", "limits", "binary_fan"]], ["add", "def", "associator_of_limit_cone", ["category_theory", "limits", "binary_fan"]], ["add", "def", "braiding", ["category_theory", "limits", "binary_fan"]], ["add", "def", "left_unitor", ["category_theory", "limits", "binary_fan"]], ["add", "def", "right_unitor", ["category_theory", "limits", "binary_fan"]], ["add", "def", "swap", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "swap_fst", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "swap_snd", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "swap", ["category_theory", "limits", "has_binary_product"]], ["add", "def", "assoc", ["category_theory", "limits", "is_limit"]], ["add", "def", "swap_binary_fan", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "associator_naturality", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "braiding_naturality", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "hexagon_forward", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "hexagon_reverse", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "left_unitor_naturality", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "def", "monoidal_of_chosen_finite_products_synonym", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "pentagon", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "right_unitor_naturality", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "symmetry", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "tensor_comp", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "def", "tensor_hom", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "tensor_id", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "def", "tensor_obj", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "theorem", "triangle", ["category_theory", "monoidal_of_chosen_finite_products"]], ["add", "def", "monoidal_of_chosen_finite_products", ["category_theory"]], ["add", "def", "symmetric_of_chosen_finite_products", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["mod", "def", "iso_mk", ["category_theory", "over"]], ["del", "theorem", "iso_mk_hom_left", ["category_theory", "over"]], ["del", "theorem", "iso_mk_inv_left", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": [["add", "theorem", "has_coequalizers_of_has_cokernels", ["category_theory", "preadditive"]], ["del", "def", "has_coequalizers_of_has_cokernels", ["category_theory", "preadditive"]], ["add", "theorem", "has_colimit_parallel_pair", ["category_theory", "preadditive"]], ["del", "def", "has_colimit_parallel_pair", ["category_theory", "preadditive"]], ["add", "theorem", "has_equalizers_of_has_kernels", ["category_theory", "preadditive"]], ["del", "def", "has_equalizers_of_has_kernels", ["category_theory", "preadditive"]], ["add", "theorem", "has_limit_parallel_pair", ["category_theory", "preadditive"]], ["del", "def", "has_limit_parallel_pair", ["category_theory", "preadditive"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "lift_quot_mk", ["quotient_group"]]]}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "theorem", "inf_le_left_apply", ["topological_space", "opens"]], ["add", "theorem", "inf_le_left_apply_mk", ["topological_space", "opens"]], ["add", "theorem", "le_supr_apply_mk", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": [["add", "theorem", "sheaf_condition_fac", ["Top", "subpresheaf_to_Types"]], ["add", "theorem", "sheaf_condition_uniq", ["Top", "subpresheaf_to_Types"]]]}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheafify.lean", "newPath": "src/topology/sheaves/sheafify.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1599872719, "sha": "f6a65cff", "message": "chore(scripts): update nolints.txt (#4118)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1599846525, "sha": "7bade58b", "message": "feat(logic/basic): Add forall_apply_eq_imp_iff (#4109)\nAlso adds forall_apply_eq_imp_iff' for swapped forall arguments\nThis means that `forall_range_iff` can now be solved by `simp`.\nThis requires changes in data/pfun and measure_theory/borel_space, where non-terminal `simp`s broke.", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall_apply_eq_imp_iff'", []], ["add", "theorem", "forall_apply_eq_imp_iff", []]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}]}, {"timestamp": 1599846523, "sha": "17a58072", "message": "feat(category_theory/limits/fubini): another formulation for limits commuting (#4034)\nThe statement that you can swap limits, rather than just combine into a single limit as we had before.\n(This just uses two copies of the previous isomorphism.)", "changes": [{"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": [["add", "def", "limit_curry_swap_comp_lim_iso_limit_curry_comp_lim", ["category_theory", "limits"]], ["add", "theorem", "limit_curry_swap_comp_lim_iso_limit_curry_comp_lim_hom_π_π", ["category_theory", "limits"]], ["add", "theorem", "limit_curry_swap_comp_lim_iso_limit_curry_comp_lim_inv_π_π", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "iso_of_equivalence_hom_π", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "iso_of_equivalence_inv_π", ["category_theory", "limits", "has_colimit"]], ["del", "theorem", "iso_of_equivalence_π", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "iso_of_equivalence_hom_π", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "iso_of_equivalence_inv_π", ["category_theory", "limits", "has_limit"]], ["del", "theorem", "iso_of_equivalence_π", ["category_theory", "limits", "has_limit"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}]}, {"timestamp": 1599846520, "sha": "045619ea", "message": "feat(topology/sheaves): sheafification (#3937)\n# Sheafification of `Type` valued presheaves\nWe construct the sheafification of a `Type` valued presheaf,\nas the subsheaf of dependent functions into the stalks\nconsisting of functions which are locally germs.\nWe show that the stalks of the sheafification are isomorphic to the original stalks,\nvia `stalk_to_fiber` which evaluates a germ of a dependent function at a point.\nWe construct a morphism `to_sheafify` from a presheaf to (the underlying presheaf of)\nits sheafification, given by sending a section to its collection of germs.\n## Future work\nShow that the map induced on stalks by `to_sheafify` is the inverse of `stalk_to_fiber`.\nShow sheafification is a functor from presheaves to sheaves,\nand that it is the left adjoint of the forgetful functor.", "changes": [{"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": [["add", "def", "inf_le_left", ["topological_space", "open_nhds"]], ["add", "def", "inf_le_right", ["topological_space", "open_nhds"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/sheaves/sheafify.lean", "changes": [["add", "def", "is_germ", ["Top", "presheaf", "sheafify"]], ["add", "def", "is_locally_germ", ["Top", "presheaf", "sheafify"]], ["add", "def", "sheafify", ["Top", "presheaf"]], ["add", "def", "sheafify_stalk_iso", ["Top", "presheaf"]], ["add", "def", "stalk_to_fiber", ["Top", "presheaf"]], ["add", "theorem", "stalk_to_fiber_injective", ["Top", "presheaf"]], ["add", "theorem", "stalk_to_fiber_surjective", ["Top", "presheaf"]], ["add", "def", "to_sheafify", ["Top", "presheaf"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "germ_eq", ["Top", "presheaf"]], ["add", "theorem", "germ_res_apply'", ["Top", "presheaf"]]]}]}, {"timestamp": 1599846517, "sha": "5509a30a", "message": "feat(category_theory/skeleton): add skeletal categories and construct a special case (#3929)\nI'm interested in the quotient construction of the skeleton for a thin category in particular for topos and sheafification PRs, but of course the general construction is useful too, so I've marked that as TODO and I'll make a followup PR so that this one doesn't get too big.\nThe advantage of handling this special case separately is that the skeleton of a thin category is a partial order, and so lattice constructions can be used (which is needed for my application), and also there are nice definitional equalities.", "changes": [{"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/skeletal.lean", "changes": [["add", "theorem", "eq_of_iso", ["category_theory", "functor"]], ["add", "theorem", "functor_skeletal", ["category_theory"]], ["add", "structure", "is_skeleton_of", ["category_theory"]], ["add", "def", "skeletal", ["category_theory"]], ["add", "theorem", "comp_to_thin_skeleton", ["category_theory", "thin_skeleton"]], ["add", "theorem", "equiv_of_both_ways", ["category_theory", "thin_skeleton"]], ["add", "def", "map", ["category_theory", "thin_skeleton"]], ["add", "theorem", "map_comp_eq", ["category_theory", "thin_skeleton"]], ["add", "theorem", "map_id_eq", ["category_theory", "thin_skeleton"]], ["add", "theorem", "map_iso_eq", ["category_theory", "thin_skeleton"]], ["add", "def", "map_nat_trans", ["category_theory", "thin_skeleton"]], ["add", "def", "map₂", ["category_theory", "thin_skeleton"]], ["add", "theorem", "skeletal", ["category_theory", "thin_skeleton"]], ["add", "def", "thin_skeleton", ["category_theory"]], ["add", "def", "to_thin_skeleton", ["category_theory"]]]}, {"oldPath": "src/category_theory/sparse.lean", "newPath": null, "changes": [["del", "def", "sparse_category", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/thin.lean", "changes": [["add", "def", "iso_of_both_ways", ["category_theory"]], ["add", "def", "thin_category", ["category_theory"]]]}]}, {"timestamp": 1599839597, "sha": "847f87ee", "message": "feat(geometry/euclidean/circumcenter): lemmas on orthogonal projection and reflection (#4087)\nAdd more lemmas about orthogonal projection and the circumcenter of a\nsimplex (so substantially simplifying the proof of\n`orthogonal_projection_circumcenter`). Then prove a lemma\n`eq_or_eq_reflection_of_dist_eq` that if we fix a distance a point has\nto all the vertices of a simplex, any two possible positions of that\npoint in one dimension higher than the simplex are equal or\nreflections of each other in the subspace of the simplex.", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "orthogonal_projection_eq_circumcenter_of_dist_eq", ["affine", "simplex"]], ["add", "theorem", "orthogonal_projection_eq_circumcenter_of_exists_dist_eq", ["affine", "simplex"]], ["add", "theorem", "eq_or_eq_reflection_of_dist_eq", ["euclidean_geometry"]]]}]}, {"timestamp": 1599839595, "sha": "872a37e4", "message": "cleanup(group_theory/presented_group): () -> [], and remove some FIXMEs (#4076)", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": [["del", "theorem", "inv", ["presented_group", "to_group"]], ["del", "theorem", "mul", ["presented_group", "to_group"]], ["del", "theorem", "one", ["presented_group", "to_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "conjugates_of_set_subset", ["group"]], ["mod", "theorem", "conjugates_subset_normal", ["group"]], ["del", "theorem", "normal_ker", ["monoid_hom"]], ["del", "theorem", "bot_normal", ["subgroup"]], ["del", "theorem", "center_normal", ["subgroup"]], ["mod", "theorem", "le_normalizer_of_normal", ["subgroup"]], ["mod", "theorem", "normal_closure_le_normal", ["subgroup"]], ["del", "theorem", "normal_closure_normal", ["subgroup"]], ["mod", "theorem", "normal_closure_subset_iff", ["subgroup"]], ["del", "theorem", "normal_comap", ["subgroup"]], ["del", "theorem", "normal_in_normalizer", ["subgroup"]], ["del", "theorem", "normal_of_comm", ["subgroup"]]]}]}, {"timestamp": 1599839593, "sha": "377c7c91", "message": "feat(category_theory/braided): braiding and unitors (#4075)\nThe interaction between braidings and unitors in a braided category.\nRequested by @cipher1024 for some work he's doing on monads.\nI've changed the statements of some `@[simp]` lemmas, in particular `left_unitor_tensor`, `left_unitor_tensor_inv`, `right_unitor_tensor`, `right_unitor_tensor_inv`. The new theory is that the components of a unitor indexed by a tensor product object are \"more complicated\" than other unitors. (We already follow the same principle for simplifying associators using the pentagon equation.)", "changes": [{"oldPath": "src/category_theory/monoidal/End.lean", "newPath": "src/category_theory/monoidal/End.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": [["add", "theorem", "braiding_left_unitor", ["category_theory"]], ["add", "theorem", "braiding_left_unitor_aux₁", ["category_theory"]], ["add", "theorem", "braiding_left_unitor_aux₂", ["category_theory"]], ["add", "theorem", "braiding_right_unitor", ["category_theory"]], ["add", "theorem", "braiding_right_unitor_aux₁", ["category_theory"]], ["add", "theorem", "braiding_right_unitor_aux₂", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "left_unitor_tensor'", ["category_theory", "monoidal_category"]], ["mod", "theorem", "left_unitor_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_tensor_inv'", ["category_theory", "monoidal_category"]], ["mod", "theorem", "left_unitor_tensor_inv", ["category_theory", "monoidal_category"]], ["mod", "theorem", "right_unitor_tensor", ["category_theory", "monoidal_category"]], ["mod", "theorem", "right_unitor_tensor_inv", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/unitors.lean", "newPath": "src/category_theory/monoidal/unitors.lean", "changes": []}]}, {"timestamp": 1599839591, "sha": "a1cbe88a", "message": "feat(logic/basic, logic/function/basic): involute ite (#4074)\nSome lemmas about `ite`:\n- `(d)ite_not`: exchanges the branches of an `(d)ite`\n when negating the given prop.\n- `involutive.ite_not`: applying an involutive function to an `ite`\n negates the prop\nOther changes:\nGeneralize the arguments for `(d)ite_apply` and `apply_(d)ite(2)`\nto `Sort*` over `Type*`.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "apply_dite2", []], ["mod", "theorem", "apply_dite", []], ["mod", "theorem", "apply_ite2", []], ["mod", "theorem", "apply_ite", []], ["mod", "theorem", "dite_apply", []], ["add", "theorem", "dite_not", []], ["mod", "theorem", "ite_apply", []], ["add", "theorem", "ite_not", []]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}]}, {"timestamp": 1599839589, "sha": "832acd63", "message": "feat(data/{sym2,sym}) decidable version of sym2.mem.other, filling out some of sym API (#4008)\nRemoves `sym2.vmem` and replaces it with `sym2.mem.other'`, which can get the other element of a pair in the presence of decidable equality. Writing `sym2.mem.other'` was beyond my abilities when I created `sym2.vmem`, and seeing that vmem is extremely specialized and has no immediate use, it's probably best to remove it.\nAdds some assorted simp lemmas, and also an additional lemma that `sym2.mem.other` is, in some sense, an involution.\nAdds to the API for `sym`. This is from taking some of the interface for multisets. (I was exploring whether `sym2 α` should be re-implemented as `sym α 2` and trying to add enough to `sym` to pull it off, but it doesn't seem to be worth it in the end.)\n(I'm not committing a recursor for `sym α n`, which lets you represent elements by vectors of length `n`. It needs some cleanup.)", "changes": [{"oldPath": "src/data/sym.lean", "newPath": "src/data/sym.lean", "changes": [["add", "def", "cons'", ["sym"]], ["add", "def", "cons", ["sym"]], ["add", "theorem", "cons_equiv_eq_equiv_cons", ["sym"]], ["add", "theorem", "cons_inj_left", ["sym"]], ["add", "theorem", "cons_inj_right", ["sym"]], ["add", "theorem", "cons_of_coe_eq", ["sym"]], ["add", "theorem", "cons_swap", ["sym"]], ["add", "def", "mem", ["sym"]], ["add", "theorem", "mem_cons", ["sym"]], ["add", "theorem", "mem_cons_of_mem", ["sym"]], ["add", "theorem", "mem_cons_self", ["sym"]], ["add", "def", "nil", ["sym"]], ["add", "def", "of_vector", ["sym"]], ["add", "theorem", "sound", ["sym"]], ["mod", "def", "sym'", ["sym"]], ["mod", "def", "sym_equiv_sym'", ["sym"]], ["mod", "def", "sym", []], ["mod", "def", "is_setoid", ["vector", "perm"]]]}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": [["add", "theorem", "congr_left", ["sym2"]], ["mod", "theorem", "congr_right", ["sym2"]], ["add", "theorem", "diag_is_diag", ["sym2"]], ["add", "theorem", "map_pair_eq", ["sym2"]], ["add", "def", "other'", ["sym2", "mem"]], ["add", "theorem", "mem_from_rel_irrefl_other_ne", ["sym2"]], ["add", "theorem", "mem_other_mem'", ["sym2"]], ["add", "theorem", "mem_other_mem", ["sym2"]], ["add", "theorem", "mem_other_ne", ["sym2"]], ["add", "theorem", "mem_other_spec'", ["sym2"]], ["mod", "theorem", "mem_other_spec", ["sym2"]], ["del", "def", "mk_has_vmem", ["sym2"]], ["add", "theorem", "other_eq_other'", ["sym2"]], ["add", "theorem", "other_invol'", ["sym2"]], ["add", "theorem", "other_invol", ["sym2"]], ["del", "theorem", "other_is_mem_other", ["sym2"]], ["add", "theorem", "sym2_ext", ["sym2"]], ["del", "def", "other", ["sym2", "vmem"]], ["del", "def", "vmem", ["sym2"]], ["del", "theorem", "vmem_other_spec", ["sym2"]]]}]}, {"timestamp": 1599835611, "sha": "7886c27b", "message": "feat(category_theory/monoidal): lax monoidal functors take monoids to monoids (#4108)", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal.lean", "newPath": "src/category_theory/monoidal/internal.lean", "changes": [["add", "theorem", "mul_one_hom", ["Mon_"]], ["add", "theorem", "one_mul_hom", ["Mon_"]], ["add", "def", "trivial", ["Mon_"]], ["add", "def", "map_Mon", ["category_theory", "lax_monoidal_functor"]]]}]}, {"timestamp": 1599835608, "sha": "bd74baa1", "message": "feat(algebra/homology/exact): lemmas about exactness (#4106)\nThese are a few lemmas on the way to showing how `exact` changes under isomorphisms applied to the objects. It's not everthing one might want; I'm salvaging this from an old branch and unlikely to do more in the near future, but hopefully this is mergeable progress as is.", "changes": [{"oldPath": "src/algebra/homology/exact.lean", "newPath": "src/algebra/homology/exact.lean", "changes": [["add", "theorem", "w_assoc", ["category_theory", "exact"]], ["add", "theorem", "exact_of_zero", ["category_theory"]]]}, {"oldPath": "src/algebra/homology/image_to_kernel_map.lean", "newPath": "src/algebra/homology/image_to_kernel_map.lean", "changes": [["add", "theorem", "image_to_kernel_map_comp_iso", ["category_theory"]], ["add", "theorem", "image_to_kernel_map_iso_comp", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "factor_thru_image_pre_comp", ["category_theory", "limits", "image"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "coequalizer_as_cokernel", ["category_theory", "limits"]], ["add", "theorem", "equalizer_as_kernel", ["category_theory", "limits"]]]}]}, {"timestamp": 1599835605, "sha": "233a802c", "message": "feat(algebraic_geometry/Scheme): Spec as Scheme (#4104)\n```lean\ndef Spec (R : CommRing) : Scheme\n```", "changes": [{"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "def", "Spec", ["algebraic_geometry", "Scheme"]]]}, {"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["add", "def", "LocallyRingedSpace", ["algebraic_geometry", "Spec"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "def", "of_restrict", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "restrict_top_iso", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "to_restrict_top", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "def", "adjunction", ["is_open_map"]]]}]}, {"timestamp": 1599835604, "sha": "34e0f313", "message": "feat(nnreal): absolute value (#4098)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_eq", ["real", "nnreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "abs_eq", ["nnreal"]], ["add", "theorem", "coe_nnabs", ["nnreal"]], ["add", "def", "nnabs", ["real"]]]}]}, {"timestamp": 1599831001, "sha": "842a3246", "message": "feat(category_theory): the Grothendieck construction (#3896)\nGiven a functor `F : C ⥤ Cat`, \nthe objects of `grothendieck F` consist of dependent pairs `(b, f)`, where `b : C` and `f : F.obj c`,\nand a morphism `(b, f) ⟶ (b', f')` is a pair `β : b ⟶ b'` in `C`, and `φ : (F.map β).obj f ⟶ f'`.\n(This is only a special case of the real thing: we should treat `Cat` as a 2-category and allow `F` to be a 2-functor / pseudofunctor.)", "changes": [{"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": [["add", "def", "Type_to_Cat", ["category_theory"]]]}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["mod", "theorem", "eq_to_hom_op", ["category_theory"]], ["mod", "theorem", "eq_to_iso_refl", ["category_theory"]], ["add", "theorem", "inv_eq_to_hom", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/grothendieck.lean", "changes": [["add", "def", "comp", ["category_theory", "grothendieck"]], ["add", "theorem", "ext", ["category_theory", "grothendieck"]], ["add", "def", "forget", ["category_theory", "grothendieck"]], ["add", "def", "grothendieck_Type_to_Cat", ["category_theory", "grothendieck"]], ["add", "structure", "hom", ["category_theory", "grothendieck"]], ["add", "def", "id", ["category_theory", "grothendieck"]], ["add", "structure", "grothendieck", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "comp_inv_eq", ["category_theory", "is_iso"]], ["add", "theorem", "comp_is_iso_eq", ["category_theory", "is_iso"]], ["add", "theorem", "eq_inv_comp", ["category_theory", "is_iso"]], ["add", "theorem", "inv_comp_eq", ["category_theory", "is_iso"]]]}]}, {"timestamp": 1599824129, "sha": "0c57b2da", "message": "doc(category_theory): add doc-strings and links to the stacks project (#4107)\nWe'd been discussing adding a `@[stacks \"007B\"]` tag to add cross-references to the stacks project (and possibly include links back again -- they say they're keen).\nI'm not certain that we actually have the documentation maintenance enthusiasm to make this viable, so this PR is a more lightweight solution: adding lots of links to the stacks project from doc-strings. I'd be very happy to switch back to the attribute approach later.\nThis is pretty close to exhaustive for the \"category theory preliminaries\" chapter of the stacks project, but doesn't attempt to go beyond that. I've only included links where we formalise all, or almost all (in which case I've usually left a note), of the corresponding tag.", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/fubini.lean", "newPath": "src/category_theory/limits/fubini.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["mod", "def", "yoneda", ["category_theory"]]]}, {"oldPath": "src/topology/sheaves/forget.lean", "newPath": "src/topology/sheaves/forget.lean", "changes": []}]}, {"timestamp": 1599824127, "sha": "3965e063", "message": "chore(*): use new `extends_priority` default of 100, part 2 (#4101)\nThis completes the changes started in #4066.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/category/NonemptyFinLinOrd.lean", "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/omega_complete_partial_order.lean", "newPath": "src/order/omega_complete_partial_order.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/premetric_space.lean", "newPath": "src/topology/metric_space/premetric_space.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}]}, {"timestamp": 1599824125, "sha": "bc78621a", "message": "feat(geometry/euclidean/monge_point): reflection of circumcenter (#4062)\nShow that the distance from the orthocenter of a triangle to the\nreflection of the circumcenter in a side equals the circumradius (a\nkey fact for proving various standard properties of orthocentric\nsystems).", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "reflection_circumcenter_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "reflection_circumcenter_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_reflection_circumcenter_weights_with_circumcenter", ["affine", "simplex"]]]}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["add", "theorem", "dist_orthocenter_reflection_circumcenter", ["affine", "triangle"]], ["add", "theorem", "dist_orthocenter_reflection_circumcenter_finset", ["affine", "triangle"]]]}]}, {"timestamp": 1599824123, "sha": "4ce27a5d", "message": "feat(category_theory/limits): filtered colimits commute with finite limits (in Type) (#4046)", "changes": [{"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": [["mod", "def", "sup", ["category_theory", "is_filtered"]], ["del", "theorem", "sup_exists'", ["category_theory", "is_filtered"]], ["mod", "theorem", "sup_exists", ["category_theory", "is_filtered"]], ["mod", "def", "to_sup", ["category_theory", "is_filtered"]], ["mod", "theorem", "to_sup_commutes", ["category_theory", "is_filtered"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/colimit_limit.lean", "changes": [["add", "def", "colimit_limit_to_limit_colimit", ["category_theory", "limits"]], ["add", "theorem", "map_id_left_eq_curry_map", ["category_theory", "limits"]], ["add", "theorem", "map_id_right_eq_curry_swap_map", ["category_theory", "limits"]], ["add", "theorem", "ι_colimit_limit_to_limit_colimit_π", ["category_theory", "limits"]], ["add", "theorem", "ι_colimit_limit_to_limit_colimit_π_apply", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean", "changes": [["add", "theorem", "colimit_limit_to_limit_colimit_injective", ["category_theory", "limits"]], ["add", "theorem", "colimit_limit_to_limit_colimit_surjective", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "w", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "w", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "colimit_sound'", ["category_theory", "limits", "types"]], ["add", "def", "mk", ["category_theory", "limits", "types", "limit"]], ["add", "theorem", "π_mk", ["category_theory", "limits", "types", "limit"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "def", "is_iso_equiv_bijective", ["category_theory"]]]}]}, {"timestamp": 1599805126, "sha": "80a9e4f4", "message": "refactor(data/mv_polynomial/pderivative): make pderivative a linear map (#4095)\nMake `pderivative i` a linear map as suggested at https://github.com/leanprover-community/mathlib/pull/4083#issuecomment-689712833", "changes": [{"oldPath": "src/data/mv_polynomial/pderivative.lean", "newPath": "src/data/mv_polynomial/pderivative.lean", "changes": [["del", "def", "add_monoid_hom", ["mv_polynomial", "pderivative"]], ["del", "theorem", "add_monoid_hom_apply", ["mv_polynomial", "pderivative"]], ["mod", "def", "pderivative", ["mv_polynomial"]], ["del", "theorem", "pderivative_add", ["mv_polynomial"]], ["del", "theorem", "pderivative_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1599785251, "sha": "9a24f689", "message": "chore(scripts): update nolints.txt (#4105)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1599762831, "sha": "7d88b314", "message": "feat(ring_theory/algebra_operations): add le_div_iff_mul_le (#4102)", "changes": [{"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["add", "theorem", "le_div_iff_mul_le", ["submodule"]]]}]}, {"timestamp": 1599756397, "sha": "e33a777d", "message": "feat(data/fin): iffs about succ_above ordering (#4092)\nNew lemmas:\n`succ_above_lt_iff`\n`lt_succ_above_iff`\nThese help avoid needing to do case analysis when faced with\ninequalities about `succ_above`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "lt_succ_above_iff", ["fin"]], ["add", "theorem", "succ_above_lt_iff", ["fin"]]]}]}, {"timestamp": 1599749815, "sha": "38d1715b", "message": "chore(*): update to Lean 3.20.0c, account for nat.pow removal from core (#3985)\nOutline:\n* `nat.pow` has been removed from the core library.\n We now use the instance `monoid.pow` to provide `has_pow ℕ ℕ`.\n* To accomodate this, `algebra.group_power` has been split into a directory.\n `algebra.group_power.basic` contains the definitions of `monoid.pow` and `nsmul`\n and whatever lemmas can be stated with very few imports. It is imported in `data.nat.basic`.\n The rest of `algebra.group_power` has moved to `algebra.group_power.lemmas`.\n* The new `has_pow ℕ ℕ` now satisfies a different definitional equality:\n `a^(n+1) = a * a^n` (rather than `a^(n+1) = a^n * a`).\n As a temporary measure, the lemma `nat.pow_succ` provides the old equality\n but I plan to deprecate it in favor of the more general `pow_succ'`.\n The lemma `nat.pow_eq_pow` is gone--the two sides are now the same in all respects\n so it can be deleted wherever it was used.\n* The lemmas from core that mention `nat.pow` have been moved into `data.nat.lemmas`\n and their proofs adjusted as needed to take into account the new definition.\n* The module `data.bitvec` from core has moved to `data.bitvec.core` in mathlib.\nFuture plans:\n* Remove `nat.` lemmas redundant with general `group_power` ones, like `nat.pow_add`.\n This will be easier after further shuffling of modules.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group_power/basic.lean", "changes": [["add", "theorem", "add_nsmul", []], ["add", "theorem", "pow_left", ["commute"]], ["add", "theorem", "pow_pow", ["commute"]], ["add", "theorem", "pow_pow_self", ["commute"]], ["add", "theorem", "pow_right", ["commute"]], ["add", "theorem", "pow_self", ["commute"]], ["add", "theorem", "self_pow", ["commute"]], ["add", "def", "gpow", []], ["add", "def", "gsmul", []], ["add", "def", "pow", ["monoid"]], ["add", "def", "nsmul", []], ["add", "theorem", "nsmul_add_comm'", []], ["add", "theorem", "pow_add", []], ["add", "theorem", "pow_mul_comm'", []], ["add", "theorem", "pow_succ'", []], ["add", "theorem", "pow_succ", []], ["add", "theorem", "pow_two", []], ["add", "theorem", "pow_zero", []], ["add", "theorem", "pow_right", ["semiconj_by"]], ["add", "theorem", "succ_nsmul'", []], ["add", "theorem", "succ_nsmul", []], ["add", "theorem", "two_nsmul", []], ["add", "theorem", "zero_nsmul", []]]}, {"oldPath": null, "newPath": "src/algebra/group_power/default.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power/lemmas.lean", "changes": [["del", "theorem", "add_nsmul", []], ["del", "theorem", "pow_left", ["commute"]], ["del", "theorem", "pow_pow", ["commute"]], ["del", "theorem", "pow_pow_self", ["commute"]], ["del", "theorem", "pow_right", ["commute"]], ["del", "theorem", "pow_self", ["commute"]], ["del", "theorem", "self_pow", ["commute"]], ["del", "def", "gpow", []], ["del", "def", "gsmul", []], ["del", "def", "pow", ["monoid"]], ["del", "theorem", "pow_eq_pow", ["nat"]], ["del", "def", "nsmul", []], ["del", "theorem", "nsmul_add_comm'", []], ["del", "theorem", "pow_add", []], ["del", "theorem", "pow_mul_comm'", []], ["del", "theorem", "pow_succ'", []], ["del", "theorem", "pow_succ", []], ["del", "theorem", "pow_two", []], ["del", "theorem", "pow_zero", []], ["del", "theorem", "pow_right", ["semiconj_by"]], ["del", "theorem", "succ_nsmul'", []], ["del", "theorem", "succ_nsmul", []], ["del", "theorem", "two_nsmul", []], ["del", "theorem", "zero_nsmul", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/bitvec/core.lean", "changes": [["add", "def", "adc", ["bitvec"]], ["add", "def", "add_lsb", ["bitvec"]], ["add", "def", "and", ["bitvec"]], ["add", "def", "append", ["bitvec"]], ["add", "def", "bits_to_nat", ["bitvec"]], ["add", "theorem", "bits_to_nat_to_bool", ["bitvec"]], ["add", "theorem", "bits_to_nat_to_list", ["bitvec"]], ["add", "def", "fill_shr", ["bitvec"]], ["add", "def", "not", ["bitvec"]], ["add", "theorem", "of_nat_succ", ["bitvec"]], ["add", "def", "or", ["bitvec"]], ["add", "def", "sbb", ["bitvec"]], ["add", "def", "sborrow", ["bitvec"]], ["add", "def", "sge", ["bitvec"]], ["add", "def", "sgt", ["bitvec"]], ["add", "def", "shl", ["bitvec"]], ["add", "def", "sle", ["bitvec"]], ["add", "def", "slt", ["bitvec"]], ["add", "def", "sshr", ["bitvec"]], ["add", "theorem", "to_nat_append", ["bitvec"]], ["add", "theorem", "to_nat_of_nat", ["bitvec"]], ["add", "def", "uborrow", ["bitvec"]], ["add", "def", "uge", ["bitvec"]], ["add", "def", "ugt", ["bitvec"]], ["add", "def", "ule", ["bitvec"]], ["add", "def", "ult", ["bitvec"]], ["add", "def", "ushr", ["bitvec"]], ["add", "def", "xor", ["bitvec"]], ["add", "def", "bitvec", []]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "mod_pow_succ", ["nat"]], ["mod", "theorem", "one_pow", ["nat"]], ["add", "theorem", "one_shiftl", ["nat"]], ["add", "theorem", "pos_pow_of_pos", ["nat"]], ["add", "theorem", "pow_le_pow_of_le_left", ["nat"]], ["add", "theorem", "pow_le_pow_of_le_right", ["nat"]], ["add", "theorem", "pow_lt_pow_of_lt_left", ["nat"]], ["add", "theorem", "pow_lt_pow_of_lt_right", ["nat"]], ["add", "theorem", "pow_one", ["nat"]], ["mod", "theorem", "pow_right_injective", ["nat"]], ["mod", "theorem", "pow_right_strict_mono", ["nat"]], ["add", "theorem", "pow_succ", ["nat"]], ["mod", "theorem", "pow_two", ["nat"]], ["add", "theorem", "pow_zero", ["nat"]], ["add", "theorem", "shiftl'_tt_eq_mul_pow", ["nat"]], ["add", "theorem", "shiftl_eq_mul_pow", ["nat"]], ["add", "theorem", "shiftr_eq_div_pow", ["nat"]], ["add", "theorem", "zero_pow", ["nat"]], ["add", "theorem", "zero_shiftl", ["nat"]], ["add", "theorem", "zero_shiftr", ["nat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": [["mod", "theorem", "lim_nth_hom_add", ["padic_int"]], ["mod", "theorem", "lim_nth_hom_mul", ["padic_int"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["del", "theorem", "from_nat_pow", ["norm_num"]]]}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/localized/localized.lean", "newPath": "test/localized/localized.lean", "changes": []}]}, {"timestamp": 1599742949, "sha": "d5be9f38", "message": "refactor(data/mv_polynomial): move `smul` lemmas into basic.lean (#4097)\n`C_mul'`, `smul_eq_C_mul` and `smul_eval` seemed a bit out of place in `comm_ring.lean`, since they only need `comm_semiring α`. So I moved them to `basic.lean` where they probably fit in a bit better?\nI've also golfed the proof of `smul_eq_C_mul`.", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "C_mul'", ["mv_polynomial"]], ["add", "theorem", "smul_eq_C_mul", ["mv_polynomial"]], ["add", "theorem", "smul_eval", ["mv_polynomial"]]]}, {"oldPath": "src/data/mv_polynomial/comm_ring.lean", "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["del", "theorem", "C_mul'", ["mv_polynomial"]], ["del", "theorem", "smul_eq_C_mul", ["mv_polynomial"]], ["del", "theorem", "smul_eval", ["mv_polynomial"]]]}]}, {"timestamp": 1599742948, "sha": "19b9ae6e", "message": "feat(data/mv_polynomial): a few facts about `constant_coeff` and `aeval` (#4085)\nA few additional facts about `constant_coeff_map` and `aeval` from the witt vector branch.\nCo-authored by: Johan Commelin ", "changes": [{"oldPath": "src/data/mv_polynomial/basic.lean", "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "theorem", "aeval_eq_zero", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_comp_map", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_map", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_eq_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1599742945, "sha": "d857def3", "message": "feat(slim_check): make `shrink` recursive (#4038)\nMake example shrinking recursive to make it faster and more reliable. It now acts more like a binary search and less like a linear search.", "changes": [{"oldPath": "src/data/lazy_list2.lean", "newPath": "src/data/lazy_list/basic.lean", "changes": [["add", "theorem", "append_assoc", ["lazy_list"]], ["add", "theorem", "append_bind", ["lazy_list"]], ["add", "theorem", "append_nil", ["lazy_list"]], ["add", "def", "find", ["lazy_list"]], ["add", "def", "mfirst", ["lazy_list"]], ["add", "def", "reverse", ["lazy_list"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "def", "nat_pred", ["pnat"]]]}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": [["del", "def", "shrink'", ["slim_check", "int"]], ["del", "def", "shrink", ["slim_check", "int"]], ["add", "def", "iterate_shrink", ["slim_check"]], ["del", "def", "lseq", ["slim_check", "lazy_list"]], ["add", "theorem", "one_le_sizeof", ["slim_check", "list"]], ["del", "def", "shrink'", ["slim_check", "list"]], ["add", "def", "shrink_one", ["slim_check", "list"]], ["add", "def", "shrink_removes", ["slim_check", "list"]], ["mod", "def", "shrink_with", ["slim_check", "list"]], ["add", "theorem", "sizeof_append_lt_left", ["slim_check", "list"]], ["add", "theorem", "sizeof_cons_lt_left", ["slim_check", "list"]], ["add", "theorem", "sizeof_cons_lt_right", ["slim_check", "list"]], ["add", "theorem", "sizeof_drop_lt_sizeof_of_lt_length", ["slim_check", "list"]], ["mod", "def", "shrink'", ["slim_check", "nat"]], ["mod", "def", "shrink", ["slim_check", "nat"]], ["add", "def", "get", ["slim_check", "no_shrink"]], ["add", "def", "mk", ["slim_check", "no_shrink"]], ["add", "def", "no_shrink", ["slim_check"]], ["add", "def", "shrink", ["slim_check", "prod"]], ["add", "def", "rec_shrink", ["slim_check"]], ["mod", "def", "lift", ["slim_check", "sampleable"]], ["add", "def", "shrink_fn", ["slim_check"]], ["add", "def", "sizeof_lt", ["slim_check"]], ["mod", "def", "shrink", ["slim_check", "sum"]], ["add", "theorem", "one_le_sizeof", ["slim_check", "tree"]], ["mod", "def", "shrink_with", ["slim_check", "tree"]]]}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": [["mod", "def", "minimize", ["slim_check"]], ["add", "def", "minimize_aux", ["slim_check"]]]}]}, {"timestamp": 1599736945, "sha": "55cab6c0", "message": "feat(data/{int,nat}/cast): dvd cast lemmas (#4086)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "coe_int_dvd", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "coe_nat_dvd", ["nat"]]]}]}, {"timestamp": 1599728218, "sha": "49bb92dc", "message": "feat(ring_theory/dedekind_domain): definitions (#4000)\nDefines `is_dedekind_domain` in three variants:\n1. `is_dedekind_domain`: Noetherian, Integrally closed, Krull dimension 1, thanks to @Vierkantor \n2. `is_dedekind_domain_dvr`: Noetherian, localization at every nonzero prime is a DVR\n3. `is_dedekind_domain_inv`: Every nonzero ideal is invertible.\nTODO: prove that these definitions are equivalent.\nThis PR also includes some misc. lemmas required to show the definitions are independent of choice of fraction field.\nCo-Authored-By: mushokunosora \nCo-Authored-By: faenuccio \nCo-Authored-By: Vierkantor ", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "bijective", ["alg_equiv"]], ["mod", "theorem", "coe_alg_hom", ["alg_equiv"]], ["mod", "theorem", "coe_ring_equiv", ["alg_equiv"]], ["mod", "theorem", "commutes", ["alg_equiv"]], ["mod", "theorem", "injective", ["alg_equiv"]], ["mod", "theorem", "map_add", ["alg_equiv"]], ["mod", "theorem", "map_mul", ["alg_equiv"]], ["mod", "theorem", "map_one", ["alg_equiv"]], ["mod", "theorem", "map_sum", ["alg_equiv"]], ["mod", "theorem", "map_zero", ["alg_equiv"]], ["mod", "theorem", "surjective", ["alg_equiv"]], ["add", "def", "to_alg_hom", ["alg_equiv"]], ["add", "theorem", "to_alg_hom_eq_coe", ["alg_equiv"]], ["add", "theorem", "to_alg_hom_to_linear_map", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_inj", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_to_linear_map", ["alg_equiv"]], ["add", "def", "to_linear_map", ["alg_equiv"]], ["add", "theorem", "to_linear_map_apply", ["alg_equiv"]], ["add", "theorem", "to_linear_map_inj", ["alg_equiv"]], ["add", "theorem", "trans_to_linear_map", ["alg_equiv"]], ["add", "theorem", "mem_map", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["add", "theorem", "map_div", ["submodule"]]]}, {"oldPath": null, "newPath": "src/ring_theory/dedekind_domain.lean", "changes": [["add", "structure", "is_dedekind_domain_dvr", []], ["add", "theorem", "is_dedekind_domain_iff", []], ["add", "structure", "is_dedekind_domain_inv", []], ["add", "theorem", "is_dedekind_domain_inv_iff", []], ["add", "theorem", "integral_closure", ["ring", "dimension_le_one"]], ["add", "theorem", "principal_ideal_ring", ["ring", "dimension_le_one"]], ["add", "def", "dimension_le_one", ["ring"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_mk", ["ring", "fractional_ideal"]], ["add", "theorem", "div_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "exists_ne_zero_mem_is_integer", ["ring", "fractional_ideal"]], ["add", "theorem", "inv_eq", ["ring", "fractional_ideal"]], ["add", "theorem", "inv_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_add", ["ring", "fractional_ideal"]], ["add", "theorem", "map_coe_ideal", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_comp", ["ring", "fractional_ideal"]], ["add", "theorem", "map_div", ["ring", "fractional_ideal"]], ["add", "theorem", "map_eq_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_equiv_apply", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_id", ["ring", "fractional_ideal"]], ["add", "theorem", "map_inv", ["ring", "fractional_ideal"]], ["add", "theorem", "map_map_symm", ["ring", "fractional_ideal"]], ["mod", "theorem", "map_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "map_ne_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "map_one", ["ring", "fractional_ideal"]], ["add", "theorem", "map_symm_map", ["ring", "fractional_ideal"]], ["add", "theorem", "map_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_map", ["ring", "fractional_ideal"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "bot_lt_of_maximal", ["ideal"]], ["add", "theorem", "exists_not_is_unit_of_not_is_field", ["ring"]], ["add", "theorem", "not_is_field_iff_exists_ideal_bot_lt_and_lt_top", ["ring"]], ["add", "theorem", "not_is_field_iff_exists_prime", ["ring"]], ["add", "theorem", "not_is_field_of_subsingleton", ["ring"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "span_mul_span'", ["ideal"]], ["add", "theorem", "span_singleton_mul_span_singleton", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "integral_closure_map_alg_equiv", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "of", ["fraction_ring"]], ["add", "theorem", "alg_equiv_of_quotient_apply", ["localization"]], ["add", "theorem", "alg_equiv_of_quotient_symm_apply", ["localization"]], ["del", "def", "of", []]]}]}, {"timestamp": 1599723836, "sha": "8e9b1f0f", "message": "feat(linear_algebra): add `restrict` for endomorphisms (#4053)\nAdd a `restrict` function for endomorphisms. Add some lemmas about the new function, including one about generalized eigenspaces. Add some additional lemmas about `linear_map.comp` that I do not use in the final proof, but still consider useful.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "add_comp", ["linear_map"]], ["add", "theorem", "comp_add", ["linear_map"]], ["add", "theorem", "comp_neg", ["linear_map"]], ["add", "theorem", "comp_sub", ["linear_map"]], ["add", "def", "restrict", ["linear_map"]], ["add", "theorem", "restrict_apply", ["linear_map"]], ["add", "theorem", "restrict_eq_cod_restrict_dom_restrict", ["linear_map"]], ["add", "theorem", "restrict_eq_dom_restrict_cod_restrict", ["linear_map"]], ["add", "theorem", "sub_comp", ["linear_map"]], ["add", "theorem", "subtype_comp_restrict", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "generalized_eigenspace_restrict", ["module", "End"]]]}]}, {"timestamp": 1599716567, "sha": "47264da1", "message": "feat(linear_algebra): tiny missing pieces (#4089)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "applyₗ", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "equiv_fin", ["finite_dimensional"]], ["add", "theorem", "fin_basis", ["finite_dimensional"]]]}]}, {"timestamp": 1599701664, "sha": "9f55ed70", "message": "feat(data/polynomial/ring_division): make `polynomial.roots` a multiset (#4061)\nThe original definition of `polynomial.roots` was basically \"while ∃ x, p.is_root x { finset.insert x polynomial.roots }\", so it was not\ntoo hard to replace this with `multiset.cons`.\nI tried to refactor most usages of `polynomial.roots` to talk about the multiset instead of coercing it to a finset, since that should give a bit more power to the results.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "count_roots", ["polynomial"]], ["del", "theorem", "exists_finset_roots", ["polynomial"]], ["add", "theorem", "exists_multiset_roots", ["polynomial"]], ["mod", "def", "nth_roots", ["polynomial"]], ["add", "theorem", "root_multiplicity_X_sub_C", ["polynomial"]], ["add", "theorem", "root_multiplicity_X_sub_C_self", ["polynomial"]], ["add", "theorem", "root_multiplicity_eq_zero", ["polynomial"]], ["add", "theorem", "root_multiplicity_mul", ["polynomial"]], ["add", "theorem", "root_multiplicity_pos", ["polynomial"]], ["add", "theorem", "root_multiplicity_zero", ["polynomial"]], ["mod", "theorem", "roots_C", ["polynomial"]], ["mod", "theorem", "roots_X_sub_C", ["polynomial"]], ["mod", "theorem", "roots_mul", ["polynomial"]], ["mod", "theorem", "roots_zero", ["polynomial"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/normal.lean", "newPath": "src/field_theory/normal.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "count_roots_le_one", ["polynomial"]], ["del", "theorem", "degree_separable_eq_card_roots", ["polynomial"]], ["del", "theorem", "eq_prod_roots_of_separable", ["polynomial"]], ["add", "theorem", "multiplicity_le_one_of_seperable", ["polynomial"]], ["del", "theorem", "nat_degree_separable_eq_card_roots", ["polynomial"]], ["add", "theorem", "nodup_roots", ["polynomial"]], ["add", "theorem", "root_multiplicity_le_one_of_seperable", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "degree_eq_card_roots", ["polynomial"]], ["add", "theorem", "eq_prod_roots_of_splits", ["polynomial"]], ["add", "theorem", "nat_degree_eq_card_roots", ["polynomial"]], ["add", "theorem", "nat_degree_multiset_prod", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "dvd_iff_multiplicity_pos", ["multiplicity"]]]}]}, {"timestamp": 1599695792, "sha": "660a6c49", "message": "feat(topology): misc topological lemmas (#4091)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "inf", ["filter", "is_countably_generated"]], ["add", "theorem", "inf_principal", ["filter", "is_countably_generated"]], ["add", "theorem", "is_countably_generated_principal", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "diff_mem_inf_principal_compl", ["filter"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "def", "dense_seq", ["topological_space"]], ["add", "theorem", "dense_seq_dense", ["topological_space"]], ["add", "theorem", "exists_dense_seq", ["topological_space"]], ["add", "theorem", "is_countably_generated_nhds", ["topological_space"]], ["add", "theorem", "is_countably_generated_nhds_within", ["topological_space"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "diff_mem_nhds_within_compl", []]]}]}, {"timestamp": 1599695790, "sha": "9da39cf9", "message": "feat(ordered_field): missing inequality lemmas (#4090)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "inv_mul_le_iff'", []], ["add", "theorem", "inv_mul_le_iff", []], ["add", "theorem", "inv_mul_lt_iff'", []], ["add", "theorem", "inv_mul_lt_iff", []], ["add", "theorem", "mul_inv_le_iff'", []], ["add", "theorem", "mul_inv_le_iff", []], ["add", "theorem", "mul_inv_lt_iff'", []], ["add", "theorem", "mul_inv_lt_iff", []]]}]}, {"timestamp": 1599688853, "sha": "0967f841", "message": "doc(*): add some docstrings (#4073)", "changes": [{"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1599667230, "sha": "44d356c4", "message": "feat(tactic/explode): correctly indent long statements (#4084)\n`#explode` didn't indent long statements in the proof, such as in this lemma:\n```lean\nimport tactic.explode\nvariables (p q r : ℕ → Prop)\nlemma ex (h : ∃ x, ∀ y, ∃ z, p x ∧ q y ∧ r z) :\n ∃ z, ∀ y, ∃ x, p x ∧ q y ∧ r z :=\nExists.rec_on h $ λ x h',\nExists.rec_on (h' 0) $ λ z h'',\n⟨z, λ y,\n Exists.rec_on (h' y) $ λ w h''',\n ⟨x, h''.1, h'''.2.1, h''.2.2⟩⟩\n#explode ex\n```", "changes": [{"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}]}, {"timestamp": 1599667228, "sha": "11e62b0b", "message": "fix(data/mv_polynomial/pderivative): rename variables and file, make it universe polymorphic (#4083)\nThis file originally used different variable names to the rest of `mv_polynomial`. I've changed it to now use the same conventions as the other files.\nI also renamed the file to `pderivative.lean` to be consistent with `derivative.lean` for polynomials.\nThe types of the coefficient ring and the indexing variables are now universe polymorphic.\nThe diff shows it as new files, but the only changes are fixing the statements and proofs.", "changes": [{"oldPath": "src/data/mv_polynomial/pderiv.lean", "newPath": null, "changes": [["del", "def", "add_monoid_hom", ["mv_polynomial", "pderivative"]], ["del", "theorem", "add_monoid_hom_apply", ["mv_polynomial", "pderivative"]], ["del", "def", "pderivative", ["mv_polynomial"]], ["del", "theorem", "pderivative_C", ["mv_polynomial"]], ["del", "theorem", "pderivative_C_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_add", ["mv_polynomial"]], ["del", "theorem", "pderivative_eq_zero_of_not_mem_vars", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial_single", ["mv_polynomial"]], ["del", "theorem", "pderivative_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_zero", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/pderivative.lean", "changes": [["add", "def", "add_monoid_hom", ["mv_polynomial", "pderivative"]], ["add", "theorem", "add_monoid_hom_apply", ["mv_polynomial", "pderivative"]], ["add", "def", "pderivative", ["mv_polynomial"]], ["add", "theorem", "pderivative_C", ["mv_polynomial"]], ["add", "theorem", "pderivative_C_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_add", ["mv_polynomial"]], ["add", "theorem", "pderivative_eq_zero_of_not_mem_vars", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial_single", ["mv_polynomial"]], ["add", "theorem", "pderivative_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1599663242, "sha": "98061d12", "message": "fix(tactic/linarith): treat powers like multiplication (#4082)\n`ring` understands that natural number exponents are repeated multiplication, so it's safe for `linarith` to do the same. This is unlikely to affect anything except `nlinarith` calls, which are now slightly more powerful.", "changes": [{"oldPath": "src/tactic/linarith/parsing.lean", "newPath": "src/tactic/linarith/parsing.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1599656542, "sha": "d6e7ee07", "message": "doc(ring_theory/localization): fix docstring typo (#4081)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1599656539, "sha": "297a14e4", "message": "feat(linear_algebra/affine_space): more lemmas (#4055)\nAdd some more lemmas about affine spaces. One,\n`affine_span_insert_affine_span`, is extracted from the proof of\n`exists_unique_dist_eq_of_affine_independent` as it turned out to be\nuseful elsewhere.", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "affine_span_insert_affine_span", []], ["add", "theorem", "affine_span_insert_eq_affine_span", []], ["add", "theorem", "affine_span_mono", []], ["add", "theorem", "subset_affine_span", []]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_independent_def", []], ["add", "theorem", "affine_independent_iff_of_fintype", []], ["add", "theorem", "affine_independent_of_affine_independent_set_of_injective", []], ["add", "theorem", "affine_independent_of_subset_affine_independent", []]]}]}, {"timestamp": 1599656537, "sha": "40de35aa", "message": "feat(order/conditionally_complete_lattice, topology/algebra/ordered): inherited order properties for `ord_connected` subset (#3991)\nIf `α` is `densely_ordered`, then so is the subtype `s`, for any `ord_connected` subset `s` of `α`.\nSame result for `order_topology`.\nSame result for `conditionally_complete_linear_order`, under the hypothesis `inhabited s`.", "changes": [{"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "strict_mono_coe", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "Inf_within_of_ord_connected", []], ["add", "theorem", "Sup_within_of_ord_connected", []], ["add", "theorem", "cInf_image_le", ["monotone"]], ["add", "theorem", "cSup_image_le", ["monotone"]], ["add", "theorem", "le_cInf_image", ["monotone"]], ["add", "theorem", "le_cSup_image", ["monotone"]], ["add", "theorem", "subset_Inf_def", []], ["add", "theorem", "subset_Inf_of_within", []], ["add", "theorem", "subset_Sup_def", []], ["add", "theorem", "subset_Sup_of_within", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1599649907, "sha": "2ab31f91", "message": "chore(*): use new `extends_priority` default of 100 (#4066)\nThis is the first of (most likely) two PRs which remove the use of\n`set_option default_priority 100` in favor of per-instance priority\nattributes, taking advantage of Lean 3.19c's new default priority\nof 100 on instances produced by `extends`.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/gcd_monoid.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": []}, {"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/braided.lean", "newPath": "src/category_theory/monoidal/braided.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/control/basic.lean", "newPath": "src/control/basic.lean", "changes": []}, {"oldPath": "src/control/bitraversable/basic.lean", "newPath": "src/control/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/control/lawful_fix.lean", "newPath": "src/control/lawful_fix.lean", "changes": []}, {"oldPath": "src/control/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": "src/data/complex/is_R_or_C.lean", "newPath": "src/data/complex/is_R_or_C.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/deprecated/subring.lean", "newPath": "src/deprecated/subring.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/algebra/lie_group.lean", "newPath": "src/geometry/algebra/lie_group.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_action.lean", "newPath": "src/linear_algebra/linear_action.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}]}, {"timestamp": 1599641123, "sha": "77c8415b", "message": "refactor(data/mv_polynomial): split into multiple files (#4070)\n`mv_polynomial.lean` was getting massive and hard to explore. This breaks it into (somewhat arbitrary) pieces. While `basic.lean` is still fairly long, there are a lot of basics about multivariate polynomials, and I think it's reasonable.", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": null, "changes": [["del", "def", "C", ["mv_polynomial"]], ["del", "theorem", "C_0", ["mv_polynomial"]], ["del", "theorem", "C_1", ["mv_polynomial"]], ["del", "theorem", "C_add", ["mv_polynomial"]], ["del", "theorem", "C_eq_coe_nat", ["mv_polynomial"]], ["del", "theorem", "C_inj", ["mv_polynomial"]], ["del", "theorem", "C_injective", ["mv_polynomial"]], ["del", "theorem", "C_mul'", ["mv_polynomial"]], ["del", "theorem", "C_mul", ["mv_polynomial"]], ["del", "theorem", "C_mul_monomial", ["mv_polynomial"]], ["del", "theorem", "C_neg", ["mv_polynomial"]], ["del", "theorem", "C_pow", ["mv_polynomial"]], ["del", "theorem", "C_sub", ["mv_polynomial"]], ["del", "def", "X", ["mv_polynomial"]], ["del", "theorem", "X_pow_eq_single", ["mv_polynomial"]], ["del", "def", "aeval", ["mv_polynomial"]], ["del", "theorem", "aeval_C", ["mv_polynomial"]], ["del", "theorem", "aeval_X", ["mv_polynomial"]], ["del", "theorem", "aeval_def", ["mv_polynomial"]], ["del", "theorem", "aeval_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["del", "theorem", "aeval_eq_eval₂_hom", ["mv_polynomial"]], ["del", "theorem", "aeval_monomial", ["mv_polynomial"]], ["del", "theorem", "aeval_zero'", ["mv_polynomial"]], ["del", "theorem", "aeval_zero", ["mv_polynomial"]], ["del", "theorem", "alg_hom_C", ["mv_polynomial"]], ["del", "theorem", "alg_hom_ext", ["mv_polynomial"]], ["del", "theorem", "algebra_map_eq", ["mv_polynomial"]], ["del", "theorem", "as_sum", ["mv_polynomial"]], ["del", "theorem", "coe_eval₂_hom", ["mv_polynomial"]], ["del", "def", "coeff", ["mv_polynomial"]], ["del", "theorem", "coeff_C", ["mv_polynomial"]], ["del", "theorem", "coeff_C_mul", ["mv_polynomial"]], ["del", "theorem", "coeff_X'", ["mv_polynomial"]], ["del", "theorem", "coeff_X", ["mv_polynomial"]], ["del", "theorem", "coeff_X_pow", ["mv_polynomial"]], ["del", "theorem", "coeff_add", ["mv_polynomial"]], ["del", "def", "coeff_coe_to_fun", ["mv_polynomial"]], ["del", "theorem", "coeff_eq_zero_of_total_degree_lt", ["mv_polynomial"]], ["del", "theorem", "coeff_map", ["mv_polynomial"]], ["del", "theorem", "coeff_monomial", ["mv_polynomial"]], ["del", "theorem", "coeff_mul", ["mv_polynomial"]], ["del", "theorem", "coeff_mul_X'", ["mv_polynomial"]], ["del", "theorem", "coeff_mul_X", ["mv_polynomial"]], ["del", "theorem", "coeff_neg", ["mv_polynomial"]], ["del", "theorem", "coeff_sub", ["mv_polynomial"]], ["del", "theorem", "coeff_sum", ["mv_polynomial"]], ["del", "theorem", "coeff_zero", ["mv_polynomial"]], ["del", "theorem", "coeff_zero_X", ["mv_polynomial"]], ["del", "theorem", "comp_aeval", ["mv_polynomial"]], ["del", "theorem", "comp_eval₂_hom", ["mv_polynomial"]], ["del", "def", "constant_coeff", ["mv_polynomial"]], ["del", "theorem", "constant_coeff_C", ["mv_polynomial"]], ["del", "theorem", "constant_coeff_X", ["mv_polynomial"]], ["del", "theorem", "constant_coeff_eq", ["mv_polynomial"]], ["del", "theorem", "constant_coeff_monomial", ["mv_polynomial"]], ["del", "def", "degree_of", ["mv_polynomial"]], ["del", "def", "degrees", ["mv_polynomial"]], ["del", "theorem", "degrees_C", ["mv_polynomial"]], ["del", "theorem", "degrees_X", ["mv_polynomial"]], ["del", "theorem", "degrees_add", ["mv_polynomial"]], ["del", "theorem", "degrees_add_of_disjoint", ["mv_polynomial"]], ["del", "theorem", "degrees_map", ["mv_polynomial"]], ["del", "theorem", "degrees_map_of_injective", ["mv_polynomial"]], ["del", "theorem", "degrees_monomial", ["mv_polynomial"]], ["del", "theorem", "degrees_monomial_eq", ["mv_polynomial"]], ["del", "theorem", "degrees_mul", ["mv_polynomial"]], ["del", "theorem", "degrees_neg", ["mv_polynomial"]], ["del", "theorem", "degrees_one", ["mv_polynomial"]], ["del", "theorem", "degrees_pow", ["mv_polynomial"]], ["del", "theorem", "degrees_prod", ["mv_polynomial"]], ["del", "theorem", "degrees_sub", ["mv_polynomial"]], ["del", "theorem", "degrees_sum", ["mv_polynomial"]], ["del", "theorem", "degrees_zero", ["mv_polynomial"]], ["del", "theorem", "eq_zero_iff", ["mv_polynomial"]], ["del", "def", "eval", ["mv_polynomial"]], ["del", "theorem", "eval_C", ["mv_polynomial"]], ["del", "theorem", "eval_X", ["mv_polynomial"]], ["del", "theorem", "eval_assoc", ["mv_polynomial"]], ["del", "theorem", "eval_eq'", ["mv_polynomial"]], ["del", "theorem", "eval_eq", ["mv_polynomial"]], ["del", "theorem", "eval_map", ["mv_polynomial"]], ["del", "theorem", "eval_monomial", ["mv_polynomial"]], ["del", "theorem", "eval_prod", ["mv_polynomial"]], ["del", "theorem", "eval_rename_prodmk", ["mv_polynomial"]], ["del", "theorem", "eval_sum", ["mv_polynomial"]], ["del", "theorem", "eval_unique", ["mv_polynomial"]], ["del", "def", "eval₂", ["mv_polynomial"]], ["del", "theorem", "eval₂_C", ["mv_polynomial"]], ["del", "theorem", "eval₂_X", ["mv_polynomial"]], ["del", "theorem", "eval₂_add", ["mv_polynomial"]], ["del", "theorem", "eval₂_assoc", ["mv_polynomial"]], ["del", "theorem", "eval₂_cast_comp", ["mv_polynomial"]], ["del", "theorem", "eval₂_comp_left", ["mv_polynomial"]], ["del", "theorem", "eval₂_comp_right", ["mv_polynomial"]], ["del", "theorem", "eval₂_congr", ["mv_polynomial"]], ["del", "theorem", "eval₂_eq'", ["mv_polynomial"]], ["del", "theorem", "eval₂_eq", ["mv_polynomial"]], ["del", "theorem", "eval₂_eq_eval_map", ["mv_polynomial"]], ["del", "theorem", "eval₂_eta", ["mv_polynomial"]], ["del", "def", "eval₂_hom", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_C", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_X'", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_X", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_congr", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_map_hom", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_monomial", ["mv_polynomial"]], ["del", "theorem", "eval₂_hom_rename", ["mv_polynomial"]], ["del", "theorem", "eval₂_map", ["mv_polynomial"]], ["del", "theorem", "eval₂_monomial", ["mv_polynomial"]], ["del", "theorem", "eval₂_mul", ["mv_polynomial"]], ["del", "theorem", "eval₂_mul_monomial", ["mv_polynomial"]], ["del", "theorem", "eval₂_neg", ["mv_polynomial"]], ["del", "theorem", "eval₂_one", ["mv_polynomial"]], ["del", "theorem", "eval₂_pow", ["mv_polynomial"]], ["del", "theorem", "eval₂_prod", ["mv_polynomial"]], ["del", "theorem", "eval₂_rename", ["mv_polynomial"]], ["del", "theorem", "eval₂_rename_prodmk", ["mv_polynomial"]], ["del", "theorem", "eval₂_sub", ["mv_polynomial"]], ["del", "theorem", "eval₂_sum", ["mv_polynomial"]], ["del", "theorem", "eval₂_zero", ["mv_polynomial"]], ["del", "theorem", "exists_coeff_ne_zero", ["mv_polynomial"]], ["del", "theorem", "exists_degree_lt", ["mv_polynomial"]], ["del", "theorem", "exists_fin_rename", ["mv_polynomial"]], ["del", "theorem", "exists_finset_rename", ["mv_polynomial"]], ["del", "theorem", "ext", ["mv_polynomial"]], ["del", "theorem", "ext_iff", ["mv_polynomial"]], ["del", "def", "fin_succ_equiv", ["mv_polynomial"]], ["del", "theorem", "hom_C", ["mv_polynomial"]], ["del", "theorem", "hom_eq_hom", ["mv_polynomial"]], ["del", "def", "hom_equiv", ["mv_polynomial"]], ["del", "theorem", "induction_on'", ["mv_polynomial"]], ["del", "theorem", "induction_on", ["mv_polynomial"]], ["del", "theorem", "is_id", ["mv_polynomial"]], ["del", "def", "iter_to_sum", ["mv_polynomial"]], ["del", "theorem", "iter_to_sum_C_C", ["mv_polynomial"]], ["del", "theorem", "iter_to_sum_C_X", ["mv_polynomial"]], ["del", "theorem", "iter_to_sum_X", ["mv_polynomial"]], ["del", "theorem", "le_degrees_add", ["mv_polynomial"]], ["del", "def", "map", ["mv_polynomial"]], ["del", "theorem", "map_C", ["mv_polynomial"]], ["del", "theorem", "map_X", ["mv_polynomial"]], ["del", "theorem", "map_aeval", ["mv_polynomial"]], ["del", "theorem", "map_eval₂", ["mv_polynomial"]], ["del", "theorem", "map_eval₂_hom", ["mv_polynomial"]], ["del", "theorem", "map_id", ["mv_polynomial"]], ["del", "theorem", "map_injective", ["mv_polynomial"]], ["del", "theorem", "map_map", ["mv_polynomial"]], ["del", "theorem", "map_monomial", ["mv_polynomial"]], ["del", "theorem", "map_rename", ["mv_polynomial"]], ["del", "theorem", "mem_degrees", ["mv_polynomial"]], ["del", "theorem", "mem_support_not_mem_vars_zero", ["mv_polynomial"]], ["del", "theorem", "mem_vars", ["mv_polynomial"]], ["del", "theorem", "monic_monomial_eq", ["mv_polynomial"]], ["del", "def", "monomial", ["mv_polynomial"]], ["del", "theorem", "monomial_add", ["mv_polynomial"]], ["del", "theorem", "monomial_add_single", ["mv_polynomial"]], ["del", "theorem", "monomial_eq", ["mv_polynomial"]], ["del", "theorem", "monomial_mul", ["mv_polynomial"]], ["del", "theorem", "monomial_single_add", ["mv_polynomial"]], ["del", "theorem", "monomial_zero", ["mv_polynomial"]], ["del", "def", "mv_polynomial_equiv_mv_polynomial", ["mv_polynomial"]], ["del", "theorem", "ne_zero_iff", ["mv_polynomial"]], ["del", "def", "option_equiv_left", ["mv_polynomial"]], ["del", "def", "option_equiv_right", ["mv_polynomial"]], ["del", "def", "add_monoid_hom", ["mv_polynomial", "pderivative"]], ["del", "theorem", "add_monoid_hom_apply", ["mv_polynomial", "pderivative"]], ["del", "def", "pderivative", ["mv_polynomial"]], ["del", "theorem", "pderivative_C", ["mv_polynomial"]], ["del", "theorem", "pderivative_C_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_add", ["mv_polynomial"]], ["del", "theorem", "pderivative_eq_zero_of_not_mem_vars", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_monomial_single", ["mv_polynomial"]], ["del", "theorem", "pderivative_mul", ["mv_polynomial"]], ["del", "theorem", "pderivative_zero", ["mv_polynomial"]], ["del", "def", "pempty_ring_equiv", ["mv_polynomial"]], ["del", "def", "punit_ring_equiv", ["mv_polynomial"]], ["del", "def", "rename", ["mv_polynomial"]], ["del", "theorem", "rename_C", ["mv_polynomial"]], ["del", "theorem", "rename_X", ["mv_polynomial"]], ["del", "theorem", "rename_eq", ["mv_polynomial"]], ["del", "theorem", "rename_eval₂", ["mv_polynomial"]], ["del", "theorem", "rename_id", ["mv_polynomial"]], ["del", "theorem", "rename_injective", ["mv_polynomial"]], ["del", "theorem", "rename_monomial", ["mv_polynomial"]], ["del", "theorem", "rename_prodmk_eval₂", ["mv_polynomial"]], ["del", "theorem", "rename_rename", ["mv_polynomial"]], ["del", "def", "ring_equiv_congr", ["mv_polynomial"]], ["del", "def", "ring_equiv_of_equiv", ["mv_polynomial"]], ["del", "theorem", "ring_hom_ext", ["mv_polynomial"]], ["del", "theorem", "single_eq_C_mul_X", ["mv_polynomial"]], ["del", "theorem", "smul_eq_C_mul", ["mv_polynomial"]], ["del", "theorem", "smul_eval", ["mv_polynomial"]], ["del", "theorem", "sum_monomial", ["mv_polynomial"]], ["del", "def", "sum_ring_equiv", ["mv_polynomial"]], ["del", "def", "sum_to_iter", ["mv_polynomial"]], ["del", "theorem", "sum_to_iter_C", ["mv_polynomial"]], ["del", "theorem", "sum_to_iter_Xl", ["mv_polynomial"]], ["del", "theorem", "sum_to_iter_Xr", ["mv_polynomial"]], ["del", "theorem", "support_map_of_injective", ["mv_polynomial"]], ["del", "theorem", "support_map_subset", ["mv_polynomial"]], ["del", "theorem", "support_sum_monomial_coeff", ["mv_polynomial"]], ["del", "def", "total_degree", ["mv_polynomial"]], ["del", "theorem", "total_degree_C", ["mv_polynomial"]], ["del", "theorem", "total_degree_X", ["mv_polynomial"]], ["del", "theorem", "total_degree_add", ["mv_polynomial"]], ["del", "theorem", "total_degree_eq", ["mv_polynomial"]], ["del", "theorem", "total_degree_finset_prod", ["mv_polynomial"]], ["del", "theorem", "total_degree_le_degrees_card", ["mv_polynomial"]], ["del", "theorem", "total_degree_list_prod", ["mv_polynomial"]], ["del", "theorem", "total_degree_mul", ["mv_polynomial"]], ["del", "theorem", "total_degree_multiset_prod", ["mv_polynomial"]], ["del", "theorem", "total_degree_neg", ["mv_polynomial"]], ["del", "theorem", "total_degree_one", ["mv_polynomial"]], ["del", "theorem", "total_degree_pow", ["mv_polynomial"]], ["del", "theorem", "total_degree_rename_le", ["mv_polynomial"]], ["del", "theorem", "total_degree_sub", ["mv_polynomial"]], ["del", "theorem", "total_degree_zero", ["mv_polynomial"]], ["del", "def", "vars", ["mv_polynomial"]], ["del", "theorem", "vars_0", ["mv_polynomial"]], ["del", "theorem", "vars_C", ["mv_polynomial"]], ["del", "theorem", "vars_X", ["mv_polynomial"]], ["del", "theorem", "vars_add_of_disjoint", ["mv_polynomial"]], ["del", "theorem", "vars_add_subset", ["mv_polynomial"]], ["del", "theorem", "vars_eq_support_bind_support", ["mv_polynomial"]], ["del", "theorem", "vars_map", ["mv_polynomial"]], ["del", "theorem", "vars_map_of_injective", ["mv_polynomial"]], ["del", "theorem", "vars_monomial", ["mv_polynomial"]], ["del", "theorem", "vars_monomial_single", ["mv_polynomial"]], ["del", "theorem", "vars_neg", ["mv_polynomial"]], ["del", "theorem", "vars_sub_of_disjoint", ["mv_polynomial"]], ["del", "theorem", "vars_sub_subset", ["mv_polynomial"]], ["del", "theorem", "vars_sum_of_disjoint", ["mv_polynomial"]], ["del", "theorem", "vars_sum_subset", ["mv_polynomial"]], ["del", "def", "mv_polynomial", []]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/basic.lean", "changes": [["add", "def", "C", ["mv_polynomial"]], ["add", "theorem", "C_0", ["mv_polynomial"]], ["add", "theorem", "C_1", ["mv_polynomial"]], ["add", "theorem", "C_add", ["mv_polynomial"]], ["add", "theorem", "C_eq_coe_nat", ["mv_polynomial"]], ["add", "theorem", "C_inj", ["mv_polynomial"]], ["add", "theorem", "C_injective", ["mv_polynomial"]], ["add", "theorem", "C_mul", ["mv_polynomial"]], ["add", "theorem", "C_mul_monomial", ["mv_polynomial"]], ["add", "theorem", "C_pow", ["mv_polynomial"]], ["add", "def", "X", ["mv_polynomial"]], ["add", "theorem", "X_pow_eq_single", ["mv_polynomial"]], ["add", "def", "aeval", ["mv_polynomial"]], ["add", "theorem", "aeval_C", ["mv_polynomial"]], ["add", "theorem", "aeval_X", ["mv_polynomial"]], ["add", "theorem", "aeval_def", ["mv_polynomial"]], ["add", "theorem", "aeval_eq_eval₂_hom", ["mv_polynomial"]], ["add", "theorem", "aeval_monomial", ["mv_polynomial"]], ["add", "theorem", "aeval_zero'", ["mv_polynomial"]], ["add", "theorem", "aeval_zero", ["mv_polynomial"]], ["add", "theorem", "alg_hom_C", ["mv_polynomial"]], ["add", "theorem", "alg_hom_ext", ["mv_polynomial"]], ["add", "theorem", "algebra_map_eq", ["mv_polynomial"]], ["add", "theorem", "as_sum", ["mv_polynomial"]], ["add", "theorem", "coe_eval₂_hom", ["mv_polynomial"]], ["add", "def", "coeff", ["mv_polynomial"]], ["add", "theorem", "coeff_C", ["mv_polynomial"]], ["add", "theorem", "coeff_C_mul", ["mv_polynomial"]], ["add", "theorem", "coeff_X'", ["mv_polynomial"]], ["add", "theorem", "coeff_X", ["mv_polynomial"]], ["add", "theorem", "coeff_X_pow", ["mv_polynomial"]], ["add", "theorem", "coeff_add", ["mv_polynomial"]], ["add", "def", "coeff_coe_to_fun", ["mv_polynomial"]], ["add", "theorem", "coeff_map", ["mv_polynomial"]], ["add", "theorem", "coeff_monomial", ["mv_polynomial"]], ["add", "theorem", "coeff_mul", ["mv_polynomial"]], ["add", "theorem", "coeff_mul_X'", ["mv_polynomial"]], ["add", "theorem", "coeff_mul_X", ["mv_polynomial"]], ["add", "theorem", "coeff_sum", ["mv_polynomial"]], ["add", "theorem", "coeff_zero", ["mv_polynomial"]], ["add", "theorem", "coeff_zero_X", ["mv_polynomial"]], ["add", "theorem", "comp_aeval", ["mv_polynomial"]], ["add", "theorem", "comp_eval₂_hom", ["mv_polynomial"]], ["add", "def", "constant_coeff", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_C", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_X", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_eq", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_monomial", ["mv_polynomial"]], ["add", "theorem", "eq_zero_iff", ["mv_polynomial"]], ["add", "def", "eval", ["mv_polynomial"]], ["add", "theorem", "eval_C", ["mv_polynomial"]], ["add", "theorem", "eval_X", ["mv_polynomial"]], ["add", "theorem", "eval_assoc", ["mv_polynomial"]], ["add", "theorem", "eval_eq'", ["mv_polynomial"]], ["add", "theorem", "eval_eq", ["mv_polynomial"]], ["add", "theorem", "eval_map", ["mv_polynomial"]], ["add", "theorem", "eval_monomial", ["mv_polynomial"]], ["add", "theorem", "eval_prod", ["mv_polynomial"]], ["add", "theorem", "eval_sum", ["mv_polynomial"]], ["add", "theorem", "eval_unique", ["mv_polynomial"]], ["add", "def", "eval₂", ["mv_polynomial"]], ["add", "theorem", "eval₂_C", ["mv_polynomial"]], ["add", "theorem", "eval₂_X", ["mv_polynomial"]], ["add", "theorem", "eval₂_add", ["mv_polynomial"]], ["add", "theorem", "eval₂_assoc", ["mv_polynomial"]], ["add", "theorem", "eval₂_comp_left", ["mv_polynomial"]], ["add", "theorem", "eval₂_comp_right", ["mv_polynomial"]], ["add", "theorem", "eval₂_congr", ["mv_polynomial"]], ["add", "theorem", "eval₂_eq'", ["mv_polynomial"]], ["add", "theorem", "eval₂_eq", ["mv_polynomial"]], ["add", "theorem", "eval₂_eq_eval_map", ["mv_polynomial"]], ["add", "theorem", "eval₂_eta", ["mv_polynomial"]], ["add", "def", "eval₂_hom", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_C", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_X'", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_congr", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_map_hom", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_monomial", ["mv_polynomial"]], ["add", "theorem", "eval₂_map", ["mv_polynomial"]], ["add", "theorem", "eval₂_monomial", ["mv_polynomial"]], ["add", "theorem", "eval₂_mul", ["mv_polynomial"]], ["add", "theorem", "eval₂_mul_monomial", ["mv_polynomial"]], ["add", "theorem", "eval₂_one", ["mv_polynomial"]], ["add", "theorem", "eval₂_pow", ["mv_polynomial"]], ["add", "theorem", "eval₂_prod", ["mv_polynomial"]], ["add", "theorem", "eval₂_sum", ["mv_polynomial"]], ["add", "theorem", "eval₂_zero", ["mv_polynomial"]], ["add", "theorem", "exists_coeff_ne_zero", ["mv_polynomial"]], ["add", "theorem", "ext", ["mv_polynomial"]], ["add", "theorem", "ext_iff", ["mv_polynomial"]], ["add", "theorem", "hom_eq_hom", ["mv_polynomial"]], ["add", "theorem", "induction_on'", ["mv_polynomial"]], ["add", "theorem", "induction_on", ["mv_polynomial"]], ["add", "theorem", "is_id", ["mv_polynomial"]], ["add", "def", "map", ["mv_polynomial"]], ["add", "theorem", "map_C", ["mv_polynomial"]], ["add", "theorem", "map_X", ["mv_polynomial"]], ["add", "theorem", "map_aeval", ["mv_polynomial"]], ["add", "theorem", "map_eval₂", ["mv_polynomial"]], ["add", "theorem", "map_eval₂_hom", ["mv_polynomial"]], ["add", "theorem", "map_id", ["mv_polynomial"]], ["add", "theorem", "map_injective", ["mv_polynomial"]], ["add", "theorem", "map_map", ["mv_polynomial"]], ["add", "theorem", "map_monomial", ["mv_polynomial"]], ["add", "theorem", "monic_monomial_eq", ["mv_polynomial"]], ["add", "def", "monomial", ["mv_polynomial"]], ["add", "theorem", "monomial_add", ["mv_polynomial"]], ["add", "theorem", "monomial_add_single", ["mv_polynomial"]], ["add", "theorem", "monomial_eq", ["mv_polynomial"]], ["add", "theorem", "monomial_mul", ["mv_polynomial"]], ["add", "theorem", "monomial_single_add", ["mv_polynomial"]], ["add", "theorem", "monomial_zero", ["mv_polynomial"]], ["add", "theorem", "ne_zero_iff", ["mv_polynomial"]], ["add", "theorem", "ring_hom_ext", ["mv_polynomial"]], ["add", "theorem", "single_eq_C_mul_X", ["mv_polynomial"]], ["add", "theorem", "sum_monomial", ["mv_polynomial"]], ["add", "theorem", "support_map_of_injective", ["mv_polynomial"]], ["add", "theorem", "support_map_subset", ["mv_polynomial"]], ["add", "theorem", "support_sum_monomial_coeff", ["mv_polynomial"]], ["add", "def", "mv_polynomial", []]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/comm_ring.lean", "changes": [["add", "theorem", "C_mul'", ["mv_polynomial"]], ["add", "theorem", "C_neg", ["mv_polynomial"]], ["add", "theorem", "C_sub", ["mv_polynomial"]], ["add", "theorem", "coeff_neg", ["mv_polynomial"]], ["add", "theorem", "coeff_sub", ["mv_polynomial"]], ["add", "theorem", "degrees_neg", ["mv_polynomial"]], ["add", "theorem", "degrees_sub", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_X", ["mv_polynomial"]], ["add", "theorem", "eval₂_neg", ["mv_polynomial"]], ["add", "theorem", "eval₂_sub", ["mv_polynomial"]], ["add", "theorem", "hom_C", ["mv_polynomial"]], ["add", "def", "hom_equiv", ["mv_polynomial"]], ["add", "theorem", "smul_eq_C_mul", ["mv_polynomial"]], ["add", "theorem", "smul_eval", ["mv_polynomial"]], ["add", "theorem", "total_degree_neg", ["mv_polynomial"]], ["add", "theorem", "total_degree_sub", ["mv_polynomial"]], ["add", "theorem", "vars_neg", ["mv_polynomial"]], ["add", "theorem", "vars_sub_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "vars_sub_subset", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/mv_polynomial/equiv.lean", "changes": [["add", "def", "fin_succ_equiv", ["mv_polynomial"]], ["add", "def", "iter_to_sum", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_C_C", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_C_X", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_X", ["mv_polynomial"]], ["add", "def", "mv_polynomial_equiv_mv_polynomial", ["mv_polynomial"]], ["add", "def", "option_equiv_left", ["mv_polynomial"]], ["add", "def", "option_equiv_right", ["mv_polynomial"]], ["add", "def", "pempty_ring_equiv", ["mv_polynomial"]], ["add", "def", "punit_ring_equiv", ["mv_polynomial"]], ["add", "def", "ring_equiv_congr", ["mv_polynomial"]], ["add", "def", "ring_equiv_of_equiv", ["mv_polynomial"]], ["add", "def", "sum_ring_equiv", ["mv_polynomial"]], ["add", "def", "sum_to_iter", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_C", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_Xl", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_Xr", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/pderiv.lean", "changes": [["add", "def", "add_monoid_hom", ["mv_polynomial", "pderivative"]], ["add", "theorem", "add_monoid_hom_apply", ["mv_polynomial", "pderivative"]], ["add", "def", "pderivative", ["mv_polynomial"]], ["add", "theorem", "pderivative_C", ["mv_polynomial"]], ["add", "theorem", "pderivative_C_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_add", ["mv_polynomial"]], ["add", "theorem", "pderivative_eq_zero_of_not_mem_vars", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial_single", ["mv_polynomial"]], ["add", "theorem", "pderivative_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_zero", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/rename.lean", "changes": [["add", "theorem", "eval_rename_prodmk", ["mv_polynomial"]], ["add", "theorem", "eval₂_cast_comp", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_rename", ["mv_polynomial"]], ["add", "theorem", "eval₂_rename", ["mv_polynomial"]], ["add", "theorem", "eval₂_rename_prodmk", ["mv_polynomial"]], ["add", "theorem", "exists_fin_rename", ["mv_polynomial"]], ["add", "theorem", "exists_finset_rename", ["mv_polynomial"]], ["add", "theorem", "map_rename", ["mv_polynomial"]], ["add", "def", "rename", ["mv_polynomial"]], ["add", "theorem", "rename_C", ["mv_polynomial"]], ["add", "theorem", "rename_X", ["mv_polynomial"]], ["add", "theorem", "rename_eq", ["mv_polynomial"]], ["add", "theorem", "rename_eval₂", ["mv_polynomial"]], ["add", "theorem", "rename_id", ["mv_polynomial"]], ["add", "theorem", "rename_injective", ["mv_polynomial"]], ["add", "theorem", "rename_monomial", ["mv_polynomial"]], ["add", "theorem", "rename_prodmk_eval₂", ["mv_polynomial"]], ["add", "theorem", "rename_rename", ["mv_polynomial"]], ["add", "theorem", "total_degree_rename_le", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/data/mv_polynomial/variables.lean", "changes": [["add", "theorem", "aeval_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["add", "theorem", "coeff_eq_zero_of_total_degree_lt", ["mv_polynomial"]], ["add", "def", "degree_of", ["mv_polynomial"]], ["add", "def", "degrees", ["mv_polynomial"]], ["add", "theorem", "degrees_C", ["mv_polynomial"]], ["add", "theorem", "degrees_X", ["mv_polynomial"]], ["add", "theorem", "degrees_add", ["mv_polynomial"]], ["add", "theorem", "degrees_add_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "degrees_map", ["mv_polynomial"]], ["add", "theorem", "degrees_map_of_injective", ["mv_polynomial"]], ["add", "theorem", "degrees_monomial", ["mv_polynomial"]], ["add", "theorem", "degrees_monomial_eq", ["mv_polynomial"]], ["add", "theorem", "degrees_mul", ["mv_polynomial"]], ["add", "theorem", "degrees_one", ["mv_polynomial"]], ["add", "theorem", "degrees_pow", ["mv_polynomial"]], ["add", "theorem", "degrees_prod", ["mv_polynomial"]], ["add", "theorem", "degrees_sum", ["mv_polynomial"]], ["add", "theorem", "degrees_zero", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["add", "theorem", "exists_degree_lt", ["mv_polynomial"]], ["add", "theorem", "le_degrees_add", ["mv_polynomial"]], ["add", "theorem", "mem_degrees", ["mv_polynomial"]], ["add", "theorem", "mem_support_not_mem_vars_zero", ["mv_polynomial"]], ["add", "theorem", "mem_vars", ["mv_polynomial"]], ["add", "def", "total_degree", ["mv_polynomial"]], ["add", "theorem", "total_degree_C", ["mv_polynomial"]], ["add", "theorem", "total_degree_X", ["mv_polynomial"]], ["add", "theorem", "total_degree_add", ["mv_polynomial"]], ["add", "theorem", "total_degree_eq", ["mv_polynomial"]], ["add", "theorem", "total_degree_finset_prod", ["mv_polynomial"]], ["add", "theorem", "total_degree_le_degrees_card", ["mv_polynomial"]], ["add", "theorem", "total_degree_list_prod", ["mv_polynomial"]], ["add", "theorem", "total_degree_mul", ["mv_polynomial"]], ["add", "theorem", "total_degree_multiset_prod", ["mv_polynomial"]], ["add", "theorem", "total_degree_one", ["mv_polynomial"]], ["add", "theorem", "total_degree_pow", ["mv_polynomial"]], ["add", "theorem", "total_degree_zero", ["mv_polynomial"]], ["add", "def", "vars", ["mv_polynomial"]], ["add", "theorem", "vars_0", ["mv_polynomial"]], ["add", "theorem", "vars_C", ["mv_polynomial"]], ["add", "theorem", "vars_X", ["mv_polynomial"]], ["add", "theorem", "vars_add_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "vars_add_subset", ["mv_polynomial"]], ["add", "theorem", "vars_eq_support_bind_support", ["mv_polynomial"]], ["add", "theorem", "vars_map", ["mv_polynomial"]], ["add", "theorem", "vars_map_of_injective", ["mv_polynomial"]], ["add", "theorem", "vars_monomial", ["mv_polynomial"]], ["add", "theorem", "vars_monomial_single", ["mv_polynomial"]], ["add", "theorem", "vars_sum_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "vars_sum_subset", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1599625950, "sha": "d5580f44", "message": "feat(data/equiv/basic): add ext_iff for perm (#4067)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "ext_iff", ["equiv"]], ["add", "theorem", "ext_iff", ["equiv", "perm"]]]}]}, {"timestamp": 1599600805, "sha": "f5ee84c9", "message": "feat(analysis/special_functions/pow): Added lemmas bounding rpow in ennreal (#4039)\nContinuation of #3715. Added lemmas in `ennreal` corresponding to the `real` and `nnreal` lemmas added in that PR", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "one_le_rpow", ["ennreal"]], ["add", "theorem", "one_le_rpow_of_pos_of_le_one_of_neg", ["ennreal"]], ["add", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["ennreal"]], ["mod", "theorem", "rpow_le_one", ["ennreal"]], ["add", "theorem", "rpow_le_one_of_one_le_of_neg", ["ennreal"]], ["mod", "theorem", "rpow_lt_one", ["ennreal"]], ["add", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["ennreal"]]]}]}, {"timestamp": 1599597335, "sha": "73540423", "message": "fix(topology/metric_space): free universe (#4072)\nRemoves an unneeded and painful universe restriction", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1599588683, "sha": "dde8bad7", "message": "doc(*): add docstrings (#4071)\nMinor docstring fixes", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1599568823, "sha": "b2ec2b0c", "message": "chore(data/padics): fix bad markdown in doc string (#4068)\nJust noticed this in the docs", "changes": [{"oldPath": "src/data/padics/ring_homs.lean", "newPath": "src/data/padics/ring_homs.lean", "changes": []}]}, {"timestamp": 1599568821, "sha": "4f1399de", "message": "feat(geometry/euclidean/basic): reflection lemmas (#4056)\nAdd more lemmas about reflections of points in subspaces.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "reflection_mem_of_le_of_mem", ["euclidean_geometry"]], ["add", "theorem", "reflection_orthogonal_vadd", ["euclidean_geometry"]], ["add", "theorem", "reflection_vadd_smul_vsub_orthogonal_projection", ["euclidean_geometry"]]]}]}, {"timestamp": 1599568819, "sha": "445e883e", "message": "feat(function): has_uncurry (#3694)\nBy Gabriel Ebner, from the sphere eversion project. See discussion at \nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/recursive.20uncurry", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": []}]}, {"timestamp": 1599562062, "sha": "1c53f912", "message": "doc(tactic/lean_core_docs): congr understands subsingletons (#4060)", "changes": [{"oldPath": "src/tactic/congr.lean", "newPath": "src/tactic/congr.lean", "changes": []}, {"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}]}, {"timestamp": 1599526067, "sha": "a16112d3", "message": "doc(algebra/group/to_additive): order of to_additive relative to other attributes (#4065)", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}]}, {"timestamp": 1599507708, "sha": "c7d6a8e7", "message": "feat(ring_theory/unique_factorization_domain): descending chain condition for divisibility (#4031)\nDefines the strict divisibility relation `dvd_not_unit`\nDefines class `wf_dvd_monoid`, indicating that `dvd_not_unit` is well-founded\nProvides instances of `wf_dvd_monoid`\nPrepares to refactor `unique_factorization_domain` as a predicate extending `wf_dvd_monoid`", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "dvd_not_unit_iff_lt", ["associates"]], ["add", "theorem", "dvd_not_unit_of_lt", ["associates"]], ["add", "theorem", "irreducible_mk", ["associates"]], ["del", "theorem", "irreducible_mk_iff", ["associates"]], ["del", "theorem", "le_of_mul_le_mul_right", ["associates"]], ["add", "theorem", "mk_dvd_not_unit_mk_iff", ["associates"]], ["add", "theorem", "mk_surjective", ["associates"]]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "def", "dvd_not_unit", []], ["add", "theorem", "dvd_not_unit_of_dvd_of_not_dvd", []]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["del", "theorem", "exists_factors", ["is_noetherian_ring"]], ["del", "theorem", "exists_irreducible_factor", ["is_noetherian_ring"]], ["del", "theorem", "irreducible_induction_on", ["is_noetherian_ring"]], ["del", "theorem", "well_founded_dvd_not_unit", ["is_noetherian_ring"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "exists_factors", ["wf_dvd_monoid"]], ["add", "theorem", "exists_irreducible_factor", ["wf_dvd_monoid"]], ["add", "theorem", "iff_well_founded_associates", ["wf_dvd_monoid"]], ["add", "theorem", "induction_on_irreducible", ["wf_dvd_monoid"]], ["add", "theorem", "of_well_founded_associates", ["wf_dvd_monoid"]], ["add", "theorem", "of_wf_dvd_monoid_associates", ["wf_dvd_monoid"]], ["add", "theorem", "well_founded_associates", ["wf_dvd_monoid"]]]}]}, {"timestamp": 1599501294, "sha": "851e83ec", "message": "feat(category_theory): colimits for pi categories (#4054)", "changes": [{"oldPath": "src/category_theory/limits/pi.lean", "newPath": "src/category_theory/limits/pi.lean", "changes": [["add", "def", "cocone_comp_eval", ["category_theory", "pi"]], ["add", "def", "cocone_of_cocone_comp_eval", ["category_theory", "pi"]], ["add", "def", "cocone_of_cocone_eval_is_colimit", ["category_theory", "pi"]], ["add", "def", "has_colimit_of_has_colimit_comp_eval", ["category_theory", "pi"]]]}]}, {"timestamp": 1599485796, "sha": "c259305a", "message": "feat(topology/algebra/floor_ring): add basic topological facts about `floor`, `ceil` and `fract` (#4042)\nFrom the sphere eversion project", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "ceil_eq_iff", []], ["add", "theorem", "ceil_eq_on_Ioc'", []], ["add", "theorem", "ceil_eq_on_Ioc", []], ["add", "theorem", "floor_eq_on_Ico'", []], ["add", "theorem", "floor_eq_on_Ico", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/floor_ring.lean", "changes": [["add", "theorem", "comp_fract'", ["continuous_on"]], ["add", "theorem", "comp_fract", ["continuous_on"]], ["add", "theorem", "continuous_on_ceil", []], ["add", "theorem", "continuous_on_floor", []], ["add", "theorem", "continuous_on_fract", []], ["add", "theorem", "tendsto_ceil_at_bot", []], ["add", "theorem", "tendsto_ceil_at_top", []], ["add", "theorem", "tendsto_ceil_left'", []], ["add", "theorem", "tendsto_ceil_left", []], ["add", "theorem", "tendsto_ceil_right'", []], ["add", "theorem", "tendsto_ceil_right", []], ["add", "theorem", "tendsto_floor_at_bot", []], ["add", "theorem", "tendsto_floor_at_top", []], ["add", "theorem", "tendsto_floor_left'", []], ["add", "theorem", "tendsto_floor_left", []], ["add", "theorem", "tendsto_floor_right'", []], ["add", "theorem", "tendsto_floor_right", []], ["add", "theorem", "tendsto_fract_left'", []], ["add", "theorem", "tendsto_fract_left", []], ["add", "theorem", "tendsto_fract_right'", []], ["add", "theorem", "tendsto_fract_right", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_inv_nhds_within_Ici", []], ["add", "theorem", "tendsto_inv_nhds_within_Ici_inv", []], ["add", "theorem", "tendsto_inv_nhds_within_Iic", []], ["add", "theorem", "tendsto_inv_nhds_within_Iic_inv", []]]}]}, {"timestamp": 1599464995, "sha": "f253fa06", "message": "feat(logic/basic): apply_dite2, apply_ite2 (#4050)\nAdd variants of `apply_dite` and `apply_ite` for two-argument\nfunctions (in the case where I wanted `apply_ite`, the function was\naddition). I don't think there is any need for corresponding versions\nof `dite_apply` or `ite_apply`, as two-argument versions of those\nwould be exactly the same as applying the one-argument version twice,\nwhereas that's not the case with `apply_dite2` and `apply_ite2`.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "apply_dite2", []], ["add", "theorem", "apply_ite2", []]]}]}, {"timestamp": 1599457593, "sha": "94b96cff", "message": "feat(algebraic_geometry/structure_sheaf): stalk_iso (#4047)\nGiven a ring `R` and a prime ideal `p`, construct an isomorphism of rings between the stalk of the structure sheaf of `R` at `p` and the localization of `R` at `p`.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["mod", "def", "basic_open", ["prime_spectrum"]], ["del", "theorem", "basic_open_open", ["prime_spectrum"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "theorem", "coe_open_to_localization", ["algebraic_geometry"]], ["add", "def", "const", ["algebraic_geometry"]], ["add", "theorem", "const_add", ["algebraic_geometry"]], ["add", "theorem", "const_apply'", ["algebraic_geometry"]], ["add", "theorem", "const_apply", ["algebraic_geometry"]], ["add", "theorem", "const_congr", ["algebraic_geometry"]], ["add", "theorem", "const_ext", ["algebraic_geometry"]], ["add", "theorem", "const_mul", ["algebraic_geometry"]], ["add", "theorem", "const_mul_cancel'", ["algebraic_geometry"]], ["add", "theorem", "const_mul_cancel", ["algebraic_geometry"]], ["add", "theorem", "const_mul_rev", ["algebraic_geometry"]], ["add", "theorem", "const_one", ["algebraic_geometry"]], ["add", "theorem", "const_self", ["algebraic_geometry"]], ["add", "theorem", "const_zero", ["algebraic_geometry"]], ["add", "theorem", "exists_const", ["algebraic_geometry"]], ["add", "theorem", "germ_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["add", "theorem", "germ_to_open", ["algebraic_geometry"]], ["add", "theorem", "germ_to_top", ["algebraic_geometry"]], ["add", "theorem", "is_unit_to_basic_open_self", ["algebraic_geometry"]], ["add", "theorem", "is_unit_to_stalk", ["algebraic_geometry"]], ["add", "theorem", "localization_to_basic_open", ["algebraic_geometry"]], ["add", "def", "localization_to_stalk", ["algebraic_geometry"]], ["add", "theorem", "localization_to_stalk_mk'", ["algebraic_geometry"]], ["add", "theorem", "localization_to_stalk_of", ["algebraic_geometry"]], ["add", "def", "open_to_localization", ["algebraic_geometry"]], ["add", "theorem", "open_to_localization_apply", ["algebraic_geometry"]], ["add", "theorem", "res_apply", ["algebraic_geometry"]], ["add", "theorem", "res_const'", ["algebraic_geometry"]], ["add", "theorem", "res_const", ["algebraic_geometry"]], ["mod", "def", "stalk_iso", ["algebraic_geometry"]], ["mod", "def", "stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["add", "theorem", "stalk_to_fiber_ring_hom_germ'", ["algebraic_geometry"]], ["add", "theorem", "stalk_to_fiber_ring_hom_germ", ["algebraic_geometry"]], ["add", "theorem", "stalk_to_fiber_ring_hom_to_stalk", ["algebraic_geometry"]], ["add", "def", "to_basic_open", ["algebraic_geometry"]], ["add", "theorem", "to_basic_open_mk'", ["algebraic_geometry"]], ["add", "theorem", "to_basic_open_to_map", ["algebraic_geometry"]], ["add", "def", "to_open", ["algebraic_geometry"]], ["add", "theorem", "to_open_apply", ["algebraic_geometry"]], ["add", "theorem", "to_open_eq_const", ["algebraic_geometry"]], ["add", "theorem", "to_open_germ", ["algebraic_geometry"]], ["add", "theorem", "to_open_res", ["algebraic_geometry"]], ["add", "def", "to_stalk", ["algebraic_geometry"]], ["add", "theorem", "to_stalk_comp_stalk_to_fiber_ring_hom", ["algebraic_geometry"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "germ_ext", ["Top", "presheaf"]], ["add", "theorem", "stalk_hom_ext", ["Top", "presheaf"]]]}]}, {"timestamp": 1599439915, "sha": "2e198b4a", "message": "chore(scripts): update nolints.txt (#4058)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1599436069, "sha": "4662b203", "message": "feat(category_theory): definition of `diag` in `binary_products` (#4051)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "codiag", ["category_theory", "limits"]], ["add", "theorem", "map_codiag", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_comp_codiag", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_comp_inl_inr_codiag", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_inl_inr_codiag", ["category_theory", "limits", "coprod"]], ["add", "def", "diag", ["category_theory", "limits"]], ["add", "theorem", "diag_map", ["category_theory", "limits", "prod"]], ["add", "theorem", "diag_map_comp", ["category_theory", "limits", "prod"]], ["add", "theorem", "diag_map_fst_snd", ["category_theory", "limits", "prod"]], ["add", "theorem", "diag_map_fst_snd_comp", ["category_theory", "limits", "prod"]]]}]}, {"timestamp": 1599433724, "sha": "4945c778", "message": "cleanup(ring_theory/ring_invo): update old module doc, add ring_invo.involution with cleaner statement (#4052)", "changes": [{"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/ring_invo.lean", "changes": [["add", "theorem", "involution", ["ring_invo"]]]}]}, {"timestamp": 1599394482, "sha": "de03e191", "message": "feat(analysis/normed_space/real_inner_product): linear independence of orthogonal vectors (#4045)\nAdd the lemma that an indexed family of nonzero, pairwise orthogonal\nvectors is linearly independent.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "linear_independent_of_ne_zero_of_inner_eq_zero", []]]}]}, {"timestamp": 1599394480, "sha": "1117ae79", "message": "feat(linear_algebra): Add lemmas about powers of endomorphisms (#4036)\nAdd lemmas about powers of endomorphisms and the corollary that every generalized eigenvector is a generalized eigenvector for exponent `findim K V`.", "changes": [{"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "generalized_eigenspace_eq_generalized_eigenspace_findim_of_le", ["module", "End"]], ["add", "theorem", "generalized_eigenspace_le_generalized_eigenspace_findim", ["module", "End"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "exists_ker_pow_eq_ker_pow_succ", ["module", "End"]], ["add", "theorem", "ker_pow_constant", ["module", "End"]], ["add", "theorem", "ker_pow_eq_ker_pow_findim_of_le", ["module", "End"]], ["add", "theorem", "ker_pow_le_ker_pow_findim", ["module", "End"]], ["add", "theorem", "findim_lt_findim_of_lt", ["submodule"]]]}]}, {"timestamp": 1599391713, "sha": "fabf34f4", "message": "feat(analysis/special_functions/trigonometric): Added lemmas for deriv of tan (#3746)\nI added lemmas for the derivative of the tangent function in both the complex and real namespaces. I also corrected two typos in comment lines.\n", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "continuous_on_tan", ["complex"]], ["mod", "theorem", "continuous_tan", ["complex"]], ["add", "theorem", "cos_eq_zero_iff", ["complex"]], ["add", "theorem", "cos_ne_zero_iff", ["complex"]], ["add", "theorem", "deriv_tan", ["complex"]], ["add", "theorem", "differentiable_at_tan", ["complex"]], ["add", "theorem", "exp_pi_mul_I", ["complex"]], ["add", "theorem", "has_deriv_at_tan", ["complex"]], ["add", "theorem", "continuous_on_tan", ["real"]], ["mod", "theorem", "continuous_tan", ["real"]], ["mod", "theorem", "cos_eq_zero_iff", ["real"]], ["mod", "theorem", "cos_ne_zero_iff", ["real"]], ["add", "theorem", "cos_nonneg_of_mem_Icc", ["real"]], ["del", "theorem", "cos_nonneg_of_neg_pi_div_two_le_of_le_pi_div_two", ["real"]], ["add", "theorem", "cos_pos_of_mem_Ioo", ["real"]], ["del", "theorem", "cos_pos_of_neg_pi_div_two_lt_of_lt_pi_div_two", ["real"]], ["add", "theorem", "deriv_tan", ["real"]], ["add", "theorem", "deriv_tan_of_mem_Ioo", ["real"]], ["add", "theorem", "differentiable_at_tan", ["real"]], ["add", "theorem", "differentiable_at_tan_of_mem_Ioo", ["real"]], ["add", "theorem", "has_deriv_at_tan", ["real"]], ["add", "theorem", "has_deriv_at_tan_of_mem_Ioo", ["real"]]]}]}, {"timestamp": 1599374910, "sha": "62963861", "message": "feat(data/mv_polynomial): fill in API for vars (#4018)\n`mv_polynomial.vars` was missing a lot of API. This doesn't cover everything, but it fleshes out the theory quite a bit. There's probably more coming eventually -- this is what we have now.\nCo-authored by: Johan Commelin ", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "aeval_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["add", "theorem", "degrees_add_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "degrees_map", ["mv_polynomial"]], ["add", "theorem", "degrees_map_of_injective", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_eq_constant_coeff_of_vars", ["mv_polynomial"]], ["add", "theorem", "le_degrees_add", ["mv_polynomial"]], ["add", "theorem", "mem_degrees", ["mv_polynomial"]], ["add", "theorem", "mem_vars", ["mv_polynomial"]], ["add", "theorem", "support_map_of_injective", ["mv_polynomial"]], ["add", "theorem", "support_map_subset", ["mv_polynomial"]], ["add", "theorem", "vars_add_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "vars_add_subset", ["mv_polynomial"]], ["add", "theorem", "vars_eq_support_bind_support", ["mv_polynomial"]], ["add", "theorem", "vars_map", ["mv_polynomial"]], ["add", "theorem", "vars_map_of_injective", ["mv_polynomial"]], ["add", "theorem", "vars_monomial_single", ["mv_polynomial"]], ["add", "theorem", "vars_neg", ["mv_polynomial"]], ["add", "theorem", "vars_sub_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "vars_sub_subset", ["mv_polynomial"]], ["add", "theorem", "vars_sum_of_disjoint", ["mv_polynomial"]], ["add", "theorem", "vars_sum_subset", ["mv_polynomial"]]]}]}, {"timestamp": 1599368862, "sha": "7b3c653b", "message": "chore(data/finset/lattice): remove unneeded assumptions (#4020)", "changes": [{"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["mod", "theorem", "le_max'", ["finset"]], ["mod", "theorem", "max'_singleton", ["finset"]], ["mod", "theorem", "min'_le", ["finset"]], ["mod", "theorem", "min'_lt_max'", ["finset"]], ["mod", "theorem", "min'_lt_max'_of_card", ["finset"]], ["mod", "theorem", "min'_singleton", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "max'_eq_sorted_last", ["finset"]], ["add", "theorem", "min'_eq_sorted_zero", ["finset"]], ["mod", "theorem", "mono_of_fin_last", ["finset"]], ["mod", "theorem", "mono_of_fin_zero", ["finset"]], ["mod", "theorem", "sorted_last_eq_max'", ["finset"]], ["add", "theorem", "sorted_last_eq_max'_aux", ["finset"]], ["mod", "theorem", "sorted_zero_eq_min'", ["finset"]], ["add", "theorem", "sorted_zero_eq_min'_aux", ["finset"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}]}, {"timestamp": 1599313893, "sha": "815a2f97", "message": "feat(computability/encoding): define encoding of basic data types (#3976)\nWe define the encoding of natural numbers and booleans to strings for Turing machines to be used in our future PR on polynomial time computation on Turing machines.", "changes": [{"oldPath": null, "newPath": "src/computability/encoding.lean", "changes": [["add", "def", "decode_bool", ["computability"]], ["add", "theorem", "decode_encode_bool", ["computability"]], ["add", "theorem", "decode_encode_nat", ["computability"]], ["add", "theorem", "decode_encode_num", ["computability"]], ["add", "theorem", "decode_encode_pos_num", ["computability"]], ["add", "def", "decode_nat", ["computability"]], ["add", "def", "decode_num", ["computability"]], ["add", "def", "decode_pos_num", ["computability"]], ["add", "def", "encode_bool", ["computability"]], ["add", "def", "encode_nat", ["computability"]], ["add", "def", "encode_num", ["computability"]], ["add", "def", "encode_pos_num", ["computability"]], ["add", "theorem", "encode_pos_num_nonempty", ["computability"]], ["add", "structure", "encoding", ["computability"]], ["add", "def", "encoding_nat_bool", ["computability"]], ["add", "def", "encoding_nat_Γ'", ["computability"]], ["add", "structure", "fin_encoding", ["computability"]], ["add", "def", "fin_encoding_bool_bool", ["computability"]], ["add", "def", "fin_encoding_nat_bool", ["computability"]], ["add", "def", "fin_encoding_nat_Γ'", ["computability"]], ["add", "def", "inclusion_bool_Γ'", ["computability"]], ["add", "theorem", "inclusion_bool_Γ'_injective", ["computability"]], ["add", "theorem", "left_inverse_section_inclusion", ["computability"]], ["add", "def", "section_Γ'_bool", ["computability"]], ["add", "theorem", "unary_decode_encode_nat", ["computability"]], ["add", "def", "unary_decode_nat", ["computability"]], ["add", "def", "unary_encode_nat", ["computability"]], ["add", "def", "unary_fin_encoding_nat", ["computability"]], ["add", "inductive", "Γ'", ["computability"]]]}]}, {"timestamp": 1599297596, "sha": "364d5d4c", "message": "feat(linear_algebra/char_poly): rephrase Cayley-Hamilton with `aeval', define `matrix.min_poly` (#4040)\nRephrases the Cayley-Hamilton theorem to use `aeval`, renames it `aeval_self_char_poly`\nDefines `matrix.min_poly`, the minimal polynomial of a matrix, which divides `char_poly`", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}, {"oldPath": "docs/overview.yaml", "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": "docs/undergrad.yaml", "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": "src/linear_algebra/char_poly.lean", "newPath": "src/linear_algebra/char_poly.lean", "changes": [["add", "theorem", "aeval_self_char_poly", []], ["del", "theorem", "char_poly_map_eval_self", []]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": [["add", "theorem", "is_integral", ["matrix"]], ["add", "theorem", "min_poly_dvd_char_poly", ["matrix"]]]}]}, {"timestamp": 1599267356, "sha": "ccd502af", "message": "chore(scripts): update nolints.txt (#4044)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1599220164, "sha": "7c9a86d4", "message": "refactor(geometry/manifold): use a sigma type for the total space of the tangent bundle (#3966)\nRedefine the total space of the tangent bundle to be a sigma type instead of a product type. Before\n```\nhave p : tangent_bundle I M := sorry,\nrcases p with ⟨x, v⟩,\n-- x: M\n-- v: E\n```\nAfter\n```\nhave p : tangent_bundle I M := sorry,\nrcases p with ⟨x, v⟩,\n-- x: M\n-- v: tangent_space I x\n```\nThis seems more natural, and is probably needed to do Riemannian manifolds right. The drawback is that we can not abuse identifications any more between the tangent bundle to a vector space and a product space (but we can still identify the tangent space with the vector space itself, which is the most important thing).", "changes": [{"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "inv_fun_as_coe", ["equiv"]], ["mod", "theorem", "to_fun_as_coe", ["equiv"]]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": [["mod", "theorem", "coe_chart_at_symm_fst", ["basic_smooth_bundle_core"]], ["mod", "theorem", "mem_atlas_iff", ["basic_smooth_bundle_core"]], ["mod", "theorem", "mem_chart_target_iff", ["basic_smooth_bundle_core"]], ["add", "theorem", "proj_apply", ["tangent_bundle"]], ["mod", "def", "tangent_bundle", []], ["add", "def", "tangent_bundle_model_space_homeomorph", []], ["add", "theorem", "tangent_bundle_model_space_homeomorph_coe", []], ["add", "theorem", "tangent_bundle_model_space_homeomorph_coe_symm", []], ["del", "theorem", "tangent_bundle_model_space_topology_eq_prod", []], ["mod", "def", "tangent_space", []]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["mod", "theorem", "tangent_map_chart_symm", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["mod", "def", "total_space", ["topological_fiber_bundle_core"]]]}]}, {"timestamp": 1599180731, "sha": "ecf18c69", "message": "refactor(field_theory/minimal_polynomial, *): make `aeval`, `is_integral`, and `minimal_polynomial` noncommutative (#4001)\nMakes `aeval`, `is_integral`, and `minimal_polynomial` compatible with noncommutative algebras\nRenames `eval₂_ring_hom_noncomm` to `eval₂_ring_hom'`", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "eval₂_list_prod_noncomm", ["polynomial"]], ["mod", "theorem", "eval₂_mul_noncomm", ["polynomial"]], ["add", "def", "eval₂_ring_hom'", ["polynomial"]], ["del", "def", "eval₂_ring_hom_noncomm", ["polynomial"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "ker_eval₂_ring_hom'_unit_polynomial", ["module", "End"]], ["del", "theorem", "ker_eval₂_ring_hom_noncomm_unit_polynomial", ["module", "End"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["del", "theorem", "is_integral_of_noetherian'", []], ["mod", "theorem", "is_integral_of_noetherian", []], ["add", "theorem", "is_integral_of_submodule_noetherian", []]]}]}, {"timestamp": 1599166806, "sha": "e3057ba4", "message": "doc(slim_check): add suggestion (#4024)", "changes": [{"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}]}, {"timestamp": 1599160735, "sha": "a056ccbb", "message": "feat(slim_check): subtype instances for `le` `lt` and `list.perm` (#4027)", "changes": [{"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "perm_insert_nth", ["list"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/testing/slim_check/gen.lean", "newPath": "src/testing/slim_check/gen.lean", "changes": [["add", "def", "permutation_of", ["slim_check", "gen"]]]}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}]}, {"timestamp": 1599154568, "sha": "2d40d9c6", "message": "feat(data/padics): universal property of Z_p (#3950)\nWe establish the universal property of $\\mathbb{Z}_p$ as a projective limit. Given a family of compatible ring homs $f_k : R \\to \\mathbb{Z}/p^n\\mathbb{Z}$, there is a unique limit $R \\to \\mathbb{Z}_p$.\nIn addition, we:\n* split `padic_integers.lean` into two files, creating `ring_homs.lean`\n* renamings: `padic_norm_z.*` -> `padic_int.norm_*`", "changes": [{"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["del", "theorem", "appr_lt", ["padic_int"]], ["del", "theorem", "appr_spec", ["padic_int"]], ["mod", "theorem", "coe_sub", ["padic_int"]], ["del", "theorem", "exists_mem_range", ["padic_int"]], ["add", "theorem", "exists_pow_neg_lt", ["padic_int"]], ["add", "theorem", "exists_pow_neg_lt_rat", ["padic_int"]], ["mod", "theorem", "ext", ["padic_int"]], ["del", "theorem", "is_unit_denom", ["padic_int"]], ["del", "theorem", "ker_to_zmod", ["padic_int"]], ["del", "theorem", "ker_to_zmod_pow", ["padic_int"]], ["add", "theorem", "mem_span_pow_iff_le_valuation", ["padic_int"]], ["del", "def", "mod_part", ["padic_int"]], ["del", "theorem", "mod_part_lt_p", ["padic_int"]], ["del", "theorem", "mod_part_nonneg", ["padic_int"]], ["add", "theorem", "nonarchimedean", ["padic_int"]], ["add", "theorem", "norm_add_eq_max_of_ne", ["padic_int"]], ["add", "theorem", "norm_def", ["padic_int"]], ["add", "theorem", "norm_eq_of_norm_add_lt_left", ["padic_int"]], ["add", "theorem", "norm_eq_of_norm_add_lt_right", ["padic_int"]], ["add", "theorem", "norm_eq_padic_norm", ["padic_int"]], ["add", "theorem", "norm_int_cast_eq_padic_norm", ["padic_int"]], ["add", "theorem", "norm_int_le_pow_iff_dvd", ["padic_int"]], ["add", "theorem", "norm_le_one", ["padic_int"]], ["add", "theorem", "norm_le_pow_iff_le_valuation", ["padic_int"]], ["add", "theorem", "norm_le_pow_iff_mem_span_pow", ["padic_int"]], ["add", "theorem", "norm_le_pow_iff_norm_lt_pow_add_one", ["padic_int"]], ["add", "theorem", "norm_lt_pow_iff_norm_le_pow_sub_one", ["padic_int"]], ["add", "theorem", "norm_mul", ["padic_int"]], ["add", "theorem", "norm_one", ["padic_int"]], ["add", "theorem", "norm_p", ["padic_int"]], ["add", "theorem", "norm_p_pow", ["padic_int"]], ["add", "theorem", "norm_pow", ["padic_int"]], ["del", "theorem", "norm_sub_mod_part", ["padic_int"]], ["del", "theorem", "norm_sub_mod_part_aux", ["padic_int"]], ["add", "def", "of_int_seq", ["padic_int"]], ["del", "theorem", "p_dvd_of_norm_lt_one", ["padic_int"]], ["add", "theorem", "padic_norm_e_of_padic_int", ["padic_int"]], ["mod", "theorem", "pow_p_dvd_int_iff", ["padic_int"]], ["del", "theorem", "sub_zmod_repr_mem", ["padic_int"]], ["del", "def", "to_zmod", ["padic_int"]], ["del", "def", "to_zmod_hom", ["padic_int"]], ["del", "def", "to_zmod_pow", ["padic_int"]], ["del", "theorem", "to_zmod_spec", ["padic_int"]], ["del", "theorem", "zmod_congr_of_sub_mem_max_ideal", ["padic_int"]], ["del", "theorem", "zmod_congr_of_sub_mem_span", ["padic_int"]], ["del", "theorem", "zmod_congr_of_sub_mem_span_aux", ["padic_int"]], ["del", "def", "zmod_repr", ["padic_int"]], ["del", "theorem", "zmod_repr_lt_p", ["padic_int"]], ["del", "theorem", "zmod_repr_spec", ["padic_int"]], ["del", "theorem", "add_eq_max_of_ne", ["padic_norm_z"]], ["del", "theorem", "eq_of_norm_add_lt_left", ["padic_norm_z"]], ["del", "theorem", "eq_of_norm_add_lt_right", ["padic_norm_z"]], ["del", "theorem", "le_one", ["padic_norm_z"]], ["del", "theorem", "mul", ["padic_norm_z"]], ["del", "theorem", "nonarchimedean", ["padic_norm_z"]], ["del", "theorem", "norm_one", ["padic_norm_z"]], ["del", "theorem", "norm_p", ["padic_norm_z"]], ["del", "theorem", "norm_p_pow", ["padic_norm_z"]], ["del", "theorem", "one", ["padic_norm_z"]], ["del", "theorem", "padic_norm_e_of_padic_int", ["padic_norm_z"]], ["del", "theorem", "padic_norm_z_eq_padic_norm_e", ["padic_norm_z"]], ["del", "theorem", "padic_norm_z_of_int", ["padic_norm_z"]], ["del", "theorem", "padic_val_of_cong_pow_p", ["padic_norm_z"]], ["del", "theorem", "pow", ["padic_norm_z"]], ["del", "theorem", "padic_norm_z", []]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["add", "theorem", "norm_int_le_pow_iff_dvd", ["padic_norm_e"]], ["del", "theorem", "norm_int_lt_pow_iff_dvd", ["padic_norm_e"]]]}, {"oldPath": null, "newPath": "src/data/padics/ring_homs.lean", "changes": [["add", "theorem", "appr_lt", ["padic_int"]], ["add", "theorem", "appr_mono", ["padic_int"]], ["add", "theorem", "appr_spec", ["padic_int"]], ["add", "theorem", "cast_to_zmod_pow", ["padic_int"]], ["add", "theorem", "dense_range_int_cast", ["padic_int"]], ["add", "theorem", "dense_range_nat_cast", ["padic_int"]], ["add", "theorem", "dvd_appr_sub_appr", ["padic_int"]], ["add", "theorem", "exists_mem_range", ["padic_int"]], ["add", "theorem", "exists_mem_range_of_norm_rat_le_one", ["padic_int"]], ["add", "theorem", "ext_of_to_zmod_pow", ["padic_int"]], ["add", "theorem", "is_cau_seq_nth_hom", ["padic_int"]], ["add", "theorem", "is_unit_denom", ["padic_int"]], ["add", "theorem", "ker_to_zmod", ["padic_int"]], ["add", "theorem", "ker_to_zmod_pow", ["padic_int"]], ["add", "def", "lift", ["padic_int"]], ["add", "theorem", "lift_self", ["padic_int"]], ["add", "theorem", "lift_spec", ["padic_int"]], ["add", "theorem", "lift_sub_val_mem_span", ["padic_int"]], ["add", "theorem", "lift_unique", ["padic_int"]], ["add", "def", "lim_nth_hom", ["padic_int"]], ["add", "theorem", "lim_nth_hom_add", ["padic_int"]], ["add", "theorem", "lim_nth_hom_mul", ["padic_int"]], ["add", "theorem", "lim_nth_hom_one", ["padic_int"]], ["add", "theorem", "lim_nth_hom_spec", ["padic_int"]], ["add", "theorem", "lim_nth_hom_zero", ["padic_int"]], ["add", "def", "mod_part", ["padic_int"]], ["add", "theorem", "mod_part_lt_p", ["padic_int"]], ["add", "theorem", "mod_part_nonneg", ["padic_int"]], ["add", "theorem", "norm_sub_mod_part", ["padic_int"]], ["add", "theorem", "norm_sub_mod_part_aux", ["padic_int"]], ["add", "def", "nth_hom", ["padic_int"]], ["add", "def", "nth_hom_seq", ["padic_int"]], ["add", "theorem", "nth_hom_seq_add", ["padic_int"]], ["add", "theorem", "nth_hom_seq_mul", ["padic_int"]], ["add", "theorem", "nth_hom_seq_one", ["padic_int"]], ["add", "theorem", "nth_hom_zero", ["padic_int"]], ["add", "theorem", "pow_dvd_nth_hom_sub", ["padic_int"]], ["add", "theorem", "sub_zmod_repr_mem", ["padic_int"]], ["add", "def", "to_zmod", ["padic_int"]], ["add", "def", "to_zmod_hom", ["padic_int"]], ["add", "def", "to_zmod_pow", ["padic_int"]], ["add", "theorem", "to_zmod_pow_eq_iff_ext", ["padic_int"]], ["add", "theorem", "to_zmod_spec", ["padic_int"]], ["add", "theorem", "zmod_cast_comp_to_zmod_pow", ["padic_int"]], ["add", "theorem", "zmod_congr_of_sub_mem_max_ideal", ["padic_int"]], ["add", "theorem", "zmod_congr_of_sub_mem_span", ["padic_int"]], ["add", "theorem", "zmod_congr_of_sub_mem_span_aux", ["padic_int"]], ["add", "def", "zmod_repr", ["padic_int"]], ["add", "theorem", "zmod_repr_lt_p", ["padic_int"]], ["add", "theorem", "zmod_repr_spec", ["padic_int"]]]}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["add", "theorem", "add_equiv_add", ["cau_seq"]], ["add", "theorem", "neg_equiv_neg", ["cau_seq"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_neg", ["zmod"]]]}]}, {"timestamp": 1599151432, "sha": "49173c00", "message": "ci(scripts/detect_errors.py): enforce silent builds (#4025)\nRefactor of #3989. \nThis changes the GitHub Actions workflow so that the main build step and the test step run `lean` with `--json`. The JSON output is piped to `detect_errors.py` which now exits at the end of the build if there is any output and also writes a file `src/.noisy_files` with the names of the noisy Lean files. This file is now included in the olean caches uploaded to Azure.\nThe \"try to find olean cache\" step now uses `src/.noisy_files` to delete all of the `.olean` files corresponding to the noisy Lean files, thus making the results of CI idempotent (hopefully).", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": "scripts/detect_errors.py", "newPath": "scripts/detect_errors.py", "changes": []}, {"oldPath": "scripts/fetch_olean_cache.sh", "newPath": "scripts/fetch_olean_cache.sh", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}]}, {"timestamp": 1599144450, "sha": "8b277a95", "message": "feat(category_theory/filtered): finite diagrams in filtered categories admit cocones (#4026)\nThis is only step towards eventual results about filtered colimits commuting with finite limits, `forget CommRing` preserving filtered colimits, and applications to `Scheme`.", "changes": [{"oldPath": "src/category_theory/filtered.lean", "newPath": "src/category_theory/filtered.lean", "changes": [["add", "theorem", "cocone_nonempty", ["category_theory", "is_filtered"]], ["add", "theorem", "coeq_condition", ["category_theory", "is_filtered"]], ["add", "def", "sup", ["category_theory", "is_filtered"]], ["add", "theorem", "sup_exists'", ["category_theory", "is_filtered"]], ["add", "theorem", "sup_exists", ["category_theory", "is_filtered"]], ["add", "theorem", "sup_objs_exists", ["category_theory", "is_filtered"]], ["add", "def", "to_sup", ["category_theory", "is_filtered"]], ["add", "theorem", "to_sup_commutes", ["category_theory", "is_filtered"]]]}, {"oldPath": null, "newPath": "src/category_theory/fin_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_apply_eq_apply'", []], ["add", "theorem", "exists_apply_eq_apply", []], ["mod", "theorem", "exists_eq'", []]]}]}, {"timestamp": 1599132172, "sha": "fa6485a5", "message": "feat(category_theory/limits/concrete): simp lemmas (#3973)\nSome specialisations of simp lemmas about (co)limits for concrete categories, where the equation in morphisms has been applied to an element.\nThis isn't exhaustive; just the things I've wanted recently.", "changes": [{"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": [["del", "theorem", "lift_π_apply", ["AddCommGroup"]]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["del", "theorem", "naturality_concrete", ["category_theory", "limits", "cocone"]], ["add", "theorem", "w_apply", ["category_theory", "limits", "cocone"]], ["add", "theorem", "w_forget_apply", ["category_theory", "limits", "cocone"]], ["add", "theorem", "w_apply", ["category_theory", "limits", "colimit"]], ["add", "theorem", "ι_desc_apply", ["category_theory", "limits", "colimit"]], ["del", "theorem", "naturality_concrete", ["category_theory", "limits", "cone"]], ["add", "theorem", "w_apply", ["category_theory", "limits", "cone"]], ["add", "theorem", "w_forget_apply", ["category_theory", "limits", "cone"]], ["add", "theorem", "lift_π_apply", ["category_theory", "limits", "limit"]], ["add", "theorem", "w_apply", ["category_theory", "limits", "limit"]]]}]}, {"timestamp": 1599105869, "sha": "dd633c28", "message": "feat(geometry/euclidean/circumcenter): more lemmas (#4028)\nAdd some more basic lemmas about `circumcenter` and `circumradius`.", "changes": [{"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "circumcenter_eq_centroid", ["affine", "simplex"]], ["add", "theorem", "circumcenter_eq_point", ["affine", "simplex"]], ["add", "theorem", "circumradius_nonneg", ["affine", "simplex"]], ["add", "theorem", "circumradius_pos", ["affine", "simplex"]], ["add", "theorem", "orthogonal_projection_circumcenter", ["affine", "simplex"]]]}]}, {"timestamp": 1599097968, "sha": "c86359f7", "message": "chore(scripts): update nolints.txt (#4030)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1599097966, "sha": "ca5703d5", "message": "fix(docs/100.yaml): fix indentation in 100 list (#4029)", "changes": [{"oldPath": "docs/100.yaml", "newPath": "docs/100.yaml", "changes": []}]}, {"timestamp": 1599092149, "sha": "7b9db99c", "message": "fix(test/*): make sure tests produce no output (#3947)\nModify tests so that they produce no output. This also means removing all uses of `sorry`/`admit`.\nReplace `#eval` by `run_cmd` consistently.\nTests that produced output before are modified so that it is checked that they roughly produce the right output\nAdd a trace option to the `#simp` command that turns the message of only if the expression is simplified to `true`. All tests are modified so that they simplify to `true`.\nThe randomized tests can produce output when they find a false positive, but that should basically never happen.\nAdd some docstings to `src/tactic/interactive`.", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/simp_command.lean", "newPath": "src/tactic/simp_command.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": null, "newPath": "test/README.md", "changes": []}, {"oldPath": "test/continuity.lean", "newPath": "test/continuity.lean", "changes": []}, {"oldPath": "test/doc_commands.lean", "newPath": "test/doc_commands.lean", "changes": []}, {"oldPath": "test/general_recursion.lean", "newPath": "test/general_recursion.lean", "changes": []}, {"oldPath": "test/library_search/exp_le_exp.lean", "newPath": "test/library_search/exp_le_exp.lean", "changes": []}, {"oldPath": "test/library_search/filter.lean", "newPath": "test/library_search/filter.lean", "changes": []}, {"oldPath": "test/library_search/nat.lean", "newPath": "test/library_search/nat.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["mod", "theorem", "zero_lt_one", ["T"]], ["mod", "theorem", "abs_nonneg'", []]]}, {"oldPath": "test/lint_coe_t.lean", "newPath": "test/lint_coe_t.lean", "changes": []}, {"oldPath": "test/lint_coe_to_fun.lean", "newPath": "test/lint_coe_to_fun.lean", "changes": []}, {"oldPath": "test/lint_simp_comm.lean", "newPath": "test/lint_simp_comm.lean", "changes": []}, {"oldPath": "test/lint_simp_nf.lean", "newPath": "test/lint_simp_nf.lean", "changes": []}, {"oldPath": "test/lint_simp_var_head.lean", "newPath": "test/lint_simp_var_head.lean", "changes": []}, {"oldPath": "test/logic_inline.lean", "newPath": "test/logic_inline.lean", "changes": []}, {"oldPath": "test/norm_cast_int.lean", "newPath": "test/norm_cast_int.lean", "changes": []}, {"oldPath": "test/norm_cast_lemma_order.lean", "newPath": "test/norm_cast_lemma_order.lean", "changes": []}, {"oldPath": "test/norm_cast_sum_lambda.lean", "newPath": "test/norm_cast_sum_lambda.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/packaged_goal.lean", "newPath": "test/packaged_goal.lean", "changes": []}, {"oldPath": "test/protec_proj.lean", "newPath": "test/protec_proj.lean", "changes": []}, {"oldPath": "test/refine_struct.lean", "newPath": "test/refine_struct.lean", "changes": []}, {"oldPath": "test/simp_command.lean", "newPath": "test/simp_command.lean", "changes": []}, {"oldPath": "test/slim_check.lean", "newPath": "test/slim_check.lean", "changes": []}, {"oldPath": "test/squeeze.lean", "newPath": "test/squeeze.lean", "changes": []}, {"oldPath": "test/zify.lean", "newPath": "test/zify.lean", "changes": []}]}, {"timestamp": 1599075486, "sha": "9d42f6c6", "message": "feat(order/rel_iso): define `rel_hom` (relation-preserving maps) (#3946)\nCreates a typeclass for (unidirectionally) relation-preserving maps that are not necessarily injective\n(In the case of <= relations, this is essentially a bundled monotone map)\nProves that these transfer well-foundedness between relations", "changes": [{"oldPath": "src/order/ord_continuous.lean", "newPath": "src/order/ord_continuous.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["del", "def", "osymm", ["order_embedding"]], ["del", "def", "osymm", ["order_iso"]], ["add", "theorem", "coe_coe_fn", ["rel_embedding"]], ["add", "theorem", "ext", ["rel_embedding"]], ["add", "theorem", "ext_iff", ["rel_embedding"]], ["del", "def", "rsymm", ["rel_embedding"]], ["add", "def", "to_rel_hom", ["rel_embedding"]], ["add", "theorem", "to_rel_hom_eq_coe", ["rel_embedding"]], ["add", "theorem", "coe_fn_inj", ["rel_hom"]], ["add", "theorem", "coe_fn_mk", ["rel_hom"]], ["add", "theorem", "coe_fn_to_fun", ["rel_hom"]], ["add", "theorem", "comp_apply", ["rel_hom"]], ["add", "theorem", "ext", ["rel_hom"]], ["add", "theorem", "ext_iff", ["rel_hom"]], ["add", "theorem", "id_apply", ["rel_hom"]], ["add", "theorem", "injective_of_increasing", ["rel_hom"]], ["add", "theorem", "map_rel", ["rel_hom"]], ["add", "def", "preimage", ["rel_hom"]], ["add", "structure", "rel_hom", []], ["mod", "theorem", "coe_fn_mk", ["rel_iso"]], ["mod", "theorem", "ext", ["rel_iso"]], ["add", "theorem", "ext_iff", ["rel_iso"]], ["del", "def", "rsymm", ["rel_iso"]], ["add", "theorem", "well_founded_iff", ["surjective"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1599061877, "sha": "57463fa4", "message": "feat(linear_algebra/affine_space): more lemmas (#3990)\nAdd another batch of lemmas about affine spaces. These lemmas mostly\nrelate to manipulating centroids and the relations between centroids\nof points given by different subsets of the index type.", "changes": [{"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "affine_combination_map", ["finset"]], ["add", "theorem", "centroid_eq_affine_combination_fintype", ["finset"]], ["add", "theorem", "centroid_insert_singleton", ["finset"]], ["add", "theorem", "centroid_insert_singleton_fin", ["finset"]], ["add", "theorem", "centroid_map", ["finset"]], ["add", "def", "centroid_weights_indicator", ["finset"]], ["add", "theorem", "centroid_weights_indicator_def", ["finset"]], ["add", "theorem", "sum_centroid_weights_indicator", ["finset"]], ["add", "theorem", "sum_centroid_weights_indicator_eq_one_of_card_eq_add_one", ["finset"]], ["add", "theorem", "sum_centroid_weights_indicator_eq_one_of_card_ne_zero", ["finset"]], ["add", "theorem", "sum_centroid_weights_indicator_eq_one_of_nonempty", ["finset"]], ["add", "theorem", "weighted_vsub_map", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_map", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "centroid_eq_iff", ["affine", "simplex"]], ["add", "theorem", "face_centroid_eq_centroid", ["affine", "simplex"]], ["add", "theorem", "face_centroid_eq_iff", ["affine", "simplex"]], ["add", "theorem", "range_face_points", ["affine", "simplex"]], ["add", "theorem", "affine_independent_of_ne", []]]}]}, {"timestamp": 1599059515, "sha": "71ef45e2", "message": "chore(topology/sheaves): depend less on rfl (#3994)\nAnother backport from the `prop_limits` branch.", "changes": [{"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["del", "theorem", "lift_π_apply'", ["category_theory", "limits", "types"]], ["add", "theorem", "pi_lift_π_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "pi_map_π_apply", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "colimit_sound", ["category_theory", "limits", "types"]], ["add", "theorem", "colimit_w_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "colimit_eq_iff_aux", ["category_theory", "limits", "types", "filtered_colimit"]], ["add", "theorem", "limit_w_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "map_π_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "ι_map_apply", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1599052745, "sha": "895f6ee7", "message": "chore(algebra/category/CommRing/limits): don't use deprecated.subring (#4010)", "changes": [{"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["add", "def", "sections_subring", ["Ring"]]]}]}, {"timestamp": 1599052741, "sha": "ddbdfeb5", "message": "chore(data/fin): succ_above defn compares fin terms instead of values (#3999)\n`fin.succ_above` is redefined to use a comparison between two `fin (n + 1)` instead of their coerced values in `nat`. This should delay any \"escape\" from `fin` into `nat` until necessary. Lemmas are added regarding `fin.succ_above`. Some proofs for existing lemmas reworked for new definition and simplified. Additionally, docstrings are added for related lemmas.\nNew lemmas:\nComparison after embedding:\n`succ_above_lt_ge`\n`succ_above_lt_gt`\nInjectivity lemmas:\n`succ_above_right_inj`\n`succ_above_right_injective`\n`succ_above_left_inj`\n`succ_above_left_injective`\nfinset lemma:\n`fin.univ_succ_above`\nprod and sum lemmas:\n`fin.prod_univ_succ_above`", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_succ_pos", ["fin"]], ["mod", "theorem", "pred_above_succ_above", ["fin"]], ["mod", "def", "succ_above", ["fin"]], ["mod", "theorem", "succ_above_above", ["fin"]], ["mod", "theorem", "succ_above_below", ["fin"]], ["mod", "theorem", "succ_above_descend", ["fin"]], ["add", "theorem", "succ_above_left_inj", ["fin"]], ["add", "theorem", "succ_above_left_injective", ["fin"]], ["add", "theorem", "succ_above_lt_ge", ["fin"]], ["add", "theorem", "succ_above_lt_gt", ["fin"]], ["mod", "theorem", "succ_above_ne", ["fin"]], ["add", "theorem", "succ_above_right_inj", ["fin"]], ["add", "theorem", "succ_above_right_injective", ["fin"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_succ_above", ["fin"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["mod", "theorem", "prod_univ_cast_succ", ["fin"]], ["mod", "theorem", "prod_univ_succ", ["fin"]], ["add", "theorem", "prod_univ_succ_above", ["fin"]], ["mod", "theorem", "prod_univ_zero", ["fin"]], ["mod", "theorem", "sum_univ_cast_succ", ["fin"]], ["mod", "theorem", "sum_univ_succ", ["fin"]], ["add", "theorem", "sum_univ_succ_above", ["fin"]]]}]}, {"timestamp": 1599052739, "sha": "96c80e24", "message": "feat(ring_theory/localization): Localizations of integral extensions (#3942)\nThe main definition is the algebra induced by localization at an algebra. Given an algebra `R → S` and a submonoid `M` of `R`, as well as localization maps `f : R → Rₘ` and `g : S → Sₘ`, there is a natural algebra `Rₘ → Sₘ` that makes the entire square commute, and this is defined as `localization_algebra`. \nThe two main theorems are similar but distinct statements about integral elements and localizations:\n* `is_integral_localization_at_leading_coeff` says that if an element `x` is algebraic over `algebra R S`, then if we localize to a submonoid containing the leading coefficient the image of `x` will be integral.\n* `is_integral_localization` says that if `R → S` is an integral extension, then the algebra induced by localizing at any particular submonoid will be an integral extension.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": [["add", "theorem", "leading_coeff_map'", ["polynomial"]], ["add", "theorem", "leading_coeff_map_of_leading_coeff_ne_zero", ["polynomial"]], ["add", "theorem", "nat_degree_map_of_leading_coeff_ne_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval₂_mul_eq_zero_of_left", ["polynomial"]], ["add", "theorem", "eval₂_mul_eq_zero_of_right", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "monic_mul_C_of_leading_coeff_mul_eq_one", ["polynomial"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "mem_map_of_mem", ["submonoid"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "algebra_map_submonoid", ["algebra"]], ["add", "theorem", "mem_algebra_map_submonoid_of_mem", ["algebra"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_of_is_integral_mul_unit", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "theorem", "eq_zero_of_ne_zero_of_mul_eq_zero", []], ["add", "theorem", "is_integral_localization", []], ["add", "theorem", "is_integral_localization_at_leading_coeff", []], ["del", "theorem", "le_non_zero_divisors_of_domain", []], ["del", "theorem", "map_mem_non_zero_divisors", []], ["del", "theorem", "map_ne_zero_of_mem_non_zero_divisors", []], ["del", "theorem", "mem_non_zero_divisors_iff_ne_zero", []], ["del", "theorem", "mul_mem_non_zero_divisors", []], ["del", "def", "non_zero_divisors", []]]}, {"oldPath": null, "newPath": "src/ring_theory/non_zero_divisors.lean", "changes": [["add", "theorem", "eq_zero_of_ne_zero_of_mul_left_eq_zero", []], ["add", "theorem", "eq_zero_of_ne_zero_of_mul_right_eq_zero", []], ["add", "theorem", "le_non_zero_divisors_of_domain", []], ["add", "theorem", "map_mem_non_zero_divisors", []], ["add", "theorem", "map_ne_zero_of_mem_non_zero_divisors", []], ["add", "theorem", "mem_non_zero_divisors_iff_ne_zero", []], ["add", "theorem", "mul_mem_non_zero_divisors", []], ["add", "def", "non_zero_divisors", []]]}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": [["del", "theorem", "coeff_scale_roots", []], ["del", "theorem", "coeff_scale_roots_nat_degree", []], ["del", "theorem", "degree_scale_roots", []], ["del", "theorem", "monic_scale_roots_iff", []], ["del", "theorem", "nat_degree_scale_roots", []], ["del", "theorem", "scale_roots_aeval_eq_zero", []], ["del", "theorem", "scale_roots_aeval_eq_zero_of_aeval_div_eq_zero", []], ["del", "theorem", "scale_roots_eval₂_eq_zero", []], ["del", "theorem", "scale_roots_eval₂_eq_zero_of_eval₂_div_eq_zero", []], ["del", "theorem", "scale_roots_ne_zero", []], ["del", "theorem", "support_scale_roots_eq", []], ["del", "theorem", "support_scale_roots_le", []], ["del", "theorem", "zero_scale_roots", []]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/scale_roots.lean", "changes": [["add", "theorem", "coeff_scale_roots", []], ["add", "theorem", "coeff_scale_roots_nat_degree", []], ["add", "theorem", "degree_scale_roots", []], ["add", "theorem", "monic_scale_roots_iff", []], ["add", "theorem", "nat_degree_scale_roots", []], ["add", "theorem", "scale_roots_aeval_eq_zero", []], ["add", "theorem", "scale_roots_aeval_eq_zero_of_aeval_div_eq_zero", []], ["add", "theorem", "scale_roots_eval₂_eq_zero", []], ["add", "theorem", "scale_roots_eval₂_eq_zero_of_eval₂_div_eq_zero", []], ["add", "theorem", "scale_roots_ne_zero", []], ["add", "theorem", "support_scale_roots_eq", []], ["add", "theorem", "support_scale_roots_le", []], ["add", "theorem", "zero_scale_roots", []]]}]}, {"timestamp": 1599047034, "sha": "cd36773a", "message": "feat(linear_algebra/eigenspace): add generalized eigenspaces (#4015)\nAdd the definition of generalized eigenspaces, eigenvectors and eigenvalues. Add some basic lemmas about them.\nAnother step towards #3864.", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "nsmul_add_sub_nsmul", []], ["add", "theorem", "pow_mul_pow_sub", []], ["add", "theorem", "pow_sub_mul_pow", []], ["add", "theorem", "sub_nsmul_nsmul_add", []]]}, {"oldPath": "src/linear_algebra/eigenspace.lean", "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "theorem", "eigenspace_le_generalized_eigenspace", ["module", "End"]], ["add", "theorem", "exp_ne_zero_of_has_generalized_eigenvalue", ["module", "End"]], ["add", "def", "generalized_eigenspace", ["module", "End"]], ["add", "theorem", "generalized_eigenspace_mono", ["module", "End"]], ["add", "def", "has_generalized_eigenvalue", ["module", "End"]], ["add", "theorem", "has_generalized_eigenvalue_of_has_eigenvalue", ["module", "End"]], ["add", "theorem", "has_generalized_eigenvalue_of_has_generalized_eigenvalue_of_le", ["module", "End"]], ["add", "def", "has_generalized_eigenvector", ["module", "End"]]]}]}, {"timestamp": 1599035445, "sha": "7310eab9", "message": "feat(field_theory/adjoin): adjoining elements to fields (#3913)\nDefines adjoining elements to fields", "changes": [{"oldPath": null, "newPath": "src/field_theory/adjoin.lean", "changes": [["add", "theorem", "algebra_map_mem", ["field", "adjoin"]], ["add", "theorem", "mono", ["field", "adjoin"]], ["add", "theorem", "range_algebra_map_subset", ["field", "adjoin"]], ["add", "def", "adjoin", ["field"]], ["add", "theorem", "adjoin_adjoin_left", ["field"]], ["add", "theorem", "adjoin_contains_field_as_subfield", ["field"]], ["add", "theorem", "algebra_map_gen", ["field", "adjoin_simple"]], ["add", "def", "gen", ["field", "adjoin_simple"]], ["add", "theorem", "adjoin_simple_adjoin_simple", ["field"]], ["add", "theorem", "adjoin_singleton", ["field"]], ["add", "theorem", "adjoin_subset_adjoin_iff", ["field"]], ["add", "theorem", "adjoin_subset_iff", ["field"]], ["add", "theorem", "adjoin_subset_subfield", ["field"]], ["add", "theorem", "mem_adjoin_simple_self", ["field"]], ["add", "theorem", "subfield_subset_adjoin_self", ["field"]], ["add", "theorem", "subset_adjoin", ["field"]], ["add", "theorem", "subset_adjoin_of_subset_left", ["field"]], ["add", "theorem", "subset_adjoin_of_subset_right", ["field"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "set_range_subset", ["algebra"]]]}]}, {"timestamp": 1599026482, "sha": "8026ea8a", "message": "feat(ring_theory/localization): localization away from an element (#4019)", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "lift_comp", ["add_submonoid", "localization_map", "away_map"]], ["add", "theorem", "lift_eq", ["add_submonoid", "localization_map", "away_map"]], ["add", "def", "inv_self", ["localization", "away"]], ["add", "theorem", "mk_eq_monoid_of_mk'", ["localization", "away"]], ["add", "def", "monoid_of", ["localization", "away"]], ["add", "def", "away", ["localization"]], ["add", "theorem", "lift_comp", ["submonoid", "localization_map", "away_map"]], ["add", "theorem", "lift_eq", ["submonoid", "localization_map", "away_map"]], ["add", "def", "away_map", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_self'", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_self", ["submonoid", "localization_map"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["del", "theorem", "disjoint_closure_singleton_iff_not_mem", ["ideal"]], ["add", "theorem", "disjoint_powers_iff_not_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "mk_eq_mk'", ["localization", "away"]], ["add", "def", "of", ["localization", "away"]], ["add", "theorem", "lift_comp", ["localization_map", "away_map"]], ["add", "theorem", "lift_eq", ["localization_map", "away_map"]], ["add", "def", "away_map", ["localization_map"]]]}]}, {"timestamp": 1599007050, "sha": "0b4444ca", "message": "feat(pfun/recursion): unbounded recursion (#3778)", "changes": [{"oldPath": null, "newPath": "src/control/fix.lean", "changes": [["add", "def", "approx", ["roption", "fix"]], ["add", "def", "fix_aux", ["roption"]], ["add", "theorem", "fix_def'", ["roption"]]]}, {"oldPath": null, "newPath": "src/control/lawful_fix.lean", "changes": [["add", "theorem", "fix_eq'", ["lawful_fix"]], ["add", "theorem", "continuous_curry", ["pi"]], ["add", "theorem", "continuous_uncurry", ["pi"]], ["add", "def", "monotone_curry", ["pi"]], ["add", "def", "monotone_uncurry", ["pi"]], ["add", "theorem", "uncurry_curry_continuous", ["pi"]], ["add", "def", "approx_chain", ["roption", "fix"]], ["add", "theorem", "approx_le_fix", ["roption", "fix"]], ["add", "theorem", "approx_mem_approx_chain", ["roption", "fix"]], ["add", "theorem", "approx_mono'", ["roption", "fix"]], ["add", "theorem", "approx_mono", ["roption", "fix"]], ["add", "theorem", "exists_fix_le_approx", ["roption", "fix"]], ["add", "theorem", "le_f_of_mem_approx", ["roption", "fix"]], ["add", "theorem", "mem_iff", ["roption", "fix"]], ["add", "theorem", "fix_eq", ["roption"]], ["add", "theorem", "fix_eq_ωSup", ["roption"]], ["add", "theorem", "fix_le", ["roption"]], ["add", "theorem", "to_unit_cont", ["roption"]], ["add", "def", "to_unit_mono", ["roption"]]]}, {"oldPath": null, "newPath": "src/data/nat/upto.lean", "changes": [["add", "def", "succ", ["nat", "upto"]], ["add", "def", "zero", ["nat", "upto"]], ["add", "def", "upto", ["nat"]]]}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "assert_neg", ["roption"]], ["add", "theorem", "assert_pos", ["roption"]], ["add", "theorem", "bind_le", ["roption"]], ["add", "theorem", "eq_none_or_eq_some", ["roption"]], ["add", "theorem", "le_total_of_le_of_le", ["roption"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "def", "curry", ["sigma"]], ["add", "def", "uncurry", ["sigma"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/category/Preorder.lean", "newPath": "src/order/category/Preorder.lean", "changes": [["del", "theorem", "coe_id", ["preorder_hom"]], ["del", "theorem", "coe_inj", ["preorder_hom"]], ["del", "def", "comp", ["preorder_hom"]], ["del", "theorem", "comp_id", ["preorder_hom"]], ["del", "theorem", "ext", ["preorder_hom"]], ["del", "def", "id", ["preorder_hom"]], ["del", "theorem", "id_comp", ["preorder_hom"]], ["del", "structure", "preorder_hom", []]]}, {"oldPath": null, "newPath": "src/order/category/omega_complete_partial_order.lean", "changes": [["add", "def", "of", ["ωCPO"]], ["add", "def", "ωCPO", []]]}, {"oldPath": null, "newPath": "src/order/omega_complete_partial_order.lean", "changes": [["add", "theorem", "exists_of_mem_map", ["omega_complete_partial_order", "chain"]], ["add", "def", "map", ["omega_complete_partial_order", "chain"]], ["add", "theorem", "map_comp", ["omega_complete_partial_order", "chain"]], ["add", "theorem", "map_id", ["omega_complete_partial_order", "chain"]], ["add", "theorem", "map_le_map", ["omega_complete_partial_order", "chain"]], ["add", "theorem", "mem_map", ["omega_complete_partial_order", "chain"]], ["add", "theorem", "mem_map_iff", ["omega_complete_partial_order", "chain"]], ["add", "def", "zip", ["omega_complete_partial_order", "chain"]], ["add", "def", "chain", ["omega_complete_partial_order"]], ["add", "theorem", "const_continuous'", ["omega_complete_partial_order"]], ["add", "def", "continuous'", ["omega_complete_partial_order"]], ["add", "theorem", "of_bundled'", ["omega_complete_partial_order", "continuous"]], ["add", "theorem", "of_bundled", ["omega_complete_partial_order", "continuous"]], ["add", "theorem", "to_bundled", ["omega_complete_partial_order", "continuous"]], ["add", "theorem", "to_monotone", ["omega_complete_partial_order", "continuous"]], ["add", "def", "continuous", ["omega_complete_partial_order"]], ["add", "theorem", "continuous_comp", ["omega_complete_partial_order"]], ["add", "theorem", "bind_continuous'", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "coe_apply", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "comp", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "comp_assoc", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "comp_id", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "const", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "const_apply", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "continuous", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "flip", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "forall_forall_merge'", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "forall_forall_merge", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "id", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "id_comp", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "ite_continuous'", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "map_continuous'", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "of_fun", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "of_mono", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "apply", ["omega_complete_partial_order", "continuous_hom", "prod"]], ["add", "theorem", "seq_continuous'", ["omega_complete_partial_order", "continuous_hom"]], ["add", "def", "to_mono", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "ωSup_bind", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "ωSup_def", ["omega_complete_partial_order", "continuous_hom"]], ["add", "theorem", "ωSup_ωSup", ["omega_complete_partial_order", "continuous_hom"]], ["add", "structure", "continuous_hom", ["omega_complete_partial_order"]], ["add", "theorem", "continuous_id", ["omega_complete_partial_order"]], ["add", "theorem", "id_continuous'", ["omega_complete_partial_order"]], ["add", "theorem", "le_ωSup_of_le", ["omega_complete_partial_order"]], ["add", "def", "monotone_apply", ["omega_complete_partial_order", "preorder_hom"]], ["add", "def", "to_fun_hom", ["omega_complete_partial_order", "preorder_hom"]], ["add", "theorem", "ωSup_le_iff", ["omega_complete_partial_order"]], ["add", "theorem", "ωSup_le_ωSup_of_le", ["omega_complete_partial_order"]], ["add", "theorem", "ωSup_total", ["omega_complete_partial_order"]], ["add", "def", "monotone_apply", ["pi"]], ["add", "theorem", "flip₁_continuous'", ["pi", "omega_complete_partial_order"]], ["add", "theorem", "flip₂_continuous'", ["pi", "omega_complete_partial_order"]], ["add", "def", "bind", ["preorder_hom"]], ["add", "def", "const", ["preorder_hom"]], ["add", "def", "diag", ["preorder_hom", "prod"]], ["add", "def", "fst", ["preorder_hom", "prod"]], ["add", "def", "map", ["preorder_hom", "prod"]], ["add", "def", "snd", ["preorder_hom", "prod"]], ["add", "def", "zip", ["preorder_hom", "prod"]], ["add", "theorem", "eq_of_chain", ["roption"]], ["add", "theorem", "mem_chain_of_mem_ωSup", ["roption"]], ["add", "theorem", "mem_ωSup", ["roption"]], ["add", "theorem", "ωSup_eq_none", ["roption"]], ["add", "theorem", "ωSup_eq_some", ["roption"]]]}, {"oldPath": null, "newPath": "src/order/preorder_hom.lean", "changes": [["add", "theorem", "coe_fun_mk", ["preorder_hom"]], ["add", "theorem", "coe_id", ["preorder_hom"]], ["add", "theorem", "coe_inj", ["preorder_hom"]], ["add", "def", "comp", ["preorder_hom"]], ["add", "theorem", "comp_id", ["preorder_hom"]], ["add", "theorem", "ext", ["preorder_hom"]], ["add", "def", "id", ["preorder_hom"]], ["add", "theorem", "id_comp", ["preorder_hom"]], ["add", "structure", "preorder_hom", []]]}, {"oldPath": null, "newPath": "test/general_recursion.lean", "changes": [["add", "theorem", "cont", ["roption", "examples", "div"]], ["add", "theorem", "eqn_1", ["roption", "examples", "div", "equations"]], ["add", "def", "intl", ["roption", "examples", "div"]], ["add", "def", "div", ["roption", "examples"]], ["add", "theorem", "cont", ["roption", "examples", "easy"]], ["add", "theorem", "eqn_1", ["roption", "examples", "easy", "equations"]], ["add", "def", "intl", ["roption", "examples", "easy"]], ["add", "def", "easy", ["roption", "examples"]], ["add", "def", "f91'", ["roption", "examples"]], ["add", "theorem", "cont", ["roption", "examples", "f91"]], ["add", "theorem", "eqn_1", ["roption", "examples", "f91", "equations"]], ["add", "def", "intl", ["roption", "examples", "f91"]], ["add", "def", "f91", ["roption", "examples"]], ["add", "theorem", "f91_dom", ["roption", "examples"]], ["add", "theorem", "f91_spec'", ["roption", "examples"]], ["add", "theorem", "f91_spec", ["roption", "examples"]], ["add", "inductive", "tree", ["roption", "examples"]], ["add", "theorem", "cont", ["roption", "examples", "tree_map'"]], ["add", "theorem", "eqn_1", ["roption", "examples", "tree_map'", "equations"]], ["add", "theorem", "eqn_2", ["roption", "examples", "tree_map'", "equations"]], ["add", "def", "intl", ["roption", "examples", "tree_map'"]], ["add", "def", "tree_map'", ["roption", "examples"]], ["add", "theorem", "cont", ["roption", "examples", "tree_map"]], ["add", "theorem", "eqn_1", ["roption", "examples", "tree_map", "equations"]], ["add", "theorem", "eqn_2", ["roption", "examples", "tree_map", "equations"]], ["add", "def", "intl", ["roption", "examples", "tree_map"]], ["add", "def", "tree_map", ["roption", "examples"]]]}]}, {"timestamp": 1599004415, "sha": "d94643c5", "message": "doc(slim_check): improve documentation, swap instances (#4023)", "changes": [{"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}]}, {"timestamp": 1599004413, "sha": "ef22a33f", "message": "feat(slim_check/errors): improve error messages and add useful instances (#4022)", "changes": [{"oldPath": "src/tactic/slim_check.lean", "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": "src/testing/slim_check/sampleable.lean", "newPath": "src/testing/slim_check/sampleable.lean", "changes": []}, {"oldPath": "src/testing/slim_check/testable.lean", "newPath": "src/testing/slim_check/testable.lean", "changes": []}]}, {"timestamp": 1598986443, "sha": "0c2e77c9", "message": "feat(testing): property based testing (basics) (#3915)\nAdd `gen` monad, `sampleable` and `testable` type classes", "changes": [{"oldPath": "src/data/lazy_list2.lean", "newPath": "src/data/lazy_list2.lean", "changes": [["add", "def", "init", ["lazy_list"]], ["add", "def", "interleave", ["lazy_list"]], ["add", "def", "interleave_all", ["lazy_list"]]]}, {"oldPath": null, "newPath": "src/tactic/slim_check.lean", "changes": []}, {"oldPath": null, "newPath": "src/testing/slim_check/gen.lean", "changes": [["add", "def", "choose", ["slim_check", "gen"]], ["add", "def", "choose_any", ["slim_check", "gen"]], ["add", "def", "choose_nat", ["slim_check", "gen"]], ["add", "def", "list_of", ["slim_check", "gen"]], ["add", "def", "one_of", ["slim_check", "gen"]], ["add", "def", "one_of_aux", ["slim_check", "gen"]], ["add", "def", "sized", ["slim_check", "gen"]], ["add", "def", "vector_of", ["slim_check", "gen"]], ["add", "def", "gen", ["slim_check"]], ["add", "def", "run_gen", ["slim_check", "io"]]]}, {"oldPath": null, "newPath": "src/testing/slim_check/sampleable.lean", "changes": [["add", "def", "shrink'", ["slim_check", "int"]], ["add", "def", "shrink", ["slim_check", "int"]], ["add", "def", "lseq", ["slim_check", "lazy_list"]], ["add", "def", "shrink'", ["slim_check", "list"]], ["add", "def", "shrink_with", ["slim_check", "list"]], ["add", "def", "shrink'", ["slim_check", "nat"]], ["add", "def", "shrink", ["slim_check", "nat"]], ["add", "def", "print_samples", ["slim_check"]], ["add", "def", "lift", ["slim_check", "sampleable"]], ["add", "def", "sampleable_char", ["slim_check"]], ["add", "def", "shrink", ["slim_check", "sum"]], ["add", "def", "sample", ["slim_check", "tree"]], ["add", "def", "shrink_with", ["slim_check", "tree"]]]}, {"oldPath": null, "newPath": "src/testing/slim_check/testable.lean", "changes": [["add", "def", "add_to_counter_example", ["slim_check"]], ["add", "def", "add_var_to_counter_example", ["slim_check"]], ["add", "def", "and_counter_example", ["slim_check"]], ["add", "def", "combine", ["slim_check"]], ["add", "def", "combine_testable", ["slim_check"]], ["add", "def", "convert_counter_example'", ["slim_check"]], ["add", "def", "convert_counter_example", ["slim_check"]], ["add", "def", "give_up", ["slim_check"]], ["add", "def", "is_failure", ["slim_check"]], ["add", "def", "minimize", ["slim_check"]], ["add", "def", "named_binder", ["slim_check"]], ["add", "def", "or_counter_example", ["slim_check"]], ["add", "def", "retry", ["slim_check"]], ["add", "structure", "slim_check_cfg", ["slim_check"]], ["add", "def", "decorations_of", ["slim_check", "tactic"]], ["add", "def", "to_string", ["slim_check", "test_result"]], ["add", "inductive", "test_result", ["slim_check"]], ["add", "def", "check'", ["slim_check", "testable"]], ["add", "def", "check", ["slim_check", "testable"]], ["add", "def", "run_suite", ["slim_check", "testable"]], ["add", "def", "run_suite_aux", ["slim_check", "testable"]], ["add", "def", "trace_if_giveup", ["slim_check"]]]}]}, {"timestamp": 1598965112, "sha": "329393a7", "message": "feat(analysis/calculus/times_cont_diff): iterated smoothness in terms of deriv (#4017)\nCurrently, iterated smoothness is only formulated in terms of the Fréchet derivative. For one-dimensional functions, it is more handy to use the one-dimensional derivative `deriv`. This PR provides a basic interface in this direction.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_within_of_open", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_within_of_open", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "continuous_on_deriv_of_open", ["times_cont_diff_on"]], ["add", "theorem", "continuous_on_deriv_within", ["times_cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_of_open", ["times_cont_diff_on"]], ["add", "theorem", "deriv_of_open", ["times_cont_diff_on"]], ["add", "theorem", "deriv_within", ["times_cont_diff_on"]], ["add", "theorem", "fderiv_of_open", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_diff_on_succ_iff_deriv_of_open", []], ["add", "theorem", "times_cont_diff_on_succ_iff_deriv_within", []], ["add", "theorem", "times_cont_diff_on_succ_iff_fderiv_of_open", []], ["add", "theorem", "times_cont_diff_on_top_iff_deriv_of_open", []], ["add", "theorem", "times_cont_diff_on_top_iff_deriv_within", []], ["add", "theorem", "times_cont_diff_on_top_iff_fderiv_of_open", []]]}]}, {"timestamp": 1598965110, "sha": "849a5f9b", "message": "feat(docs,ci): move overview, undergrad, and 100 theorems lists from website (#4016)\nSee conversation at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/website.20overview/near/208659351\nWe'll store these lists in mathlib so that we can catch breakage as soon as it happens, rather than continually repairing the website build. This PR adds the lists and a CI step that checks that every declaration name appearing in the lists actually exists in the library.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": null, "newPath": "docs/100.yaml", "changes": []}, {"oldPath": null, "newPath": "docs/overview.yaml", "changes": []}, {"oldPath": null, "newPath": "docs/undergrad.yaml", "changes": []}, {"oldPath": null, "newPath": "scripts/yaml_check.lean", "changes": [["add", "def", "databases", []], ["add", "def", "fails", []]]}, {"oldPath": null, "newPath": "scripts/yaml_check.py", "changes": []}]}, {"timestamp": 1598962686, "sha": "6a5241f2", "message": "refactor(algebra/category/*, category_theory/concrete_category): generalize universes for concrete categories (#3687)\nCurrently, concrete categories need to be `large_category`s. In particular, if objects live in `Type u`, then morphisms live in `Type (u + 1)`. For the category of modules over some ring R, this is not necessarily true, because we have to take the universe of R into account. One way to deal with this problem is to just force the universe of the ring to be the same as the universe of the module. This [sounds like it shouldn't be much of an issue](https://github.com/leanprover-community/mathlib/pull/1420#discussion_r322607455), but unfortunately, [it is](https://github.com/leanprover-community/mathlib/pull/3621#issue-458293664).\nThis PR\n* removes the constraint that a concrete category must be a `large_category`,\n* generalizes `Module R` and `Algebra R` to accept a universe parameter for the module/algebra and\n* adds a ton of universe annotations which become neccesary because of the change\nAs a reward, we get `abelian AddCommGroup.{u}` for arbitrary `u` without any (additional) work.", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["mod", "def", "of", ["Algebra"]]]}, {"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": [["mod", "def", "limit_π_alg_hom", ["Algebra"]]]}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["mod", "def", "limit_π_ring_hom", ["SemiRing"]]]}, {"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/abelian.lean", "newPath": "src/algebra/category/Group/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["mod", "def", "of", ["Module"]], ["mod", "def", "to_Module_iso'", ["linear_equiv"]]]}, {"oldPath": "src/algebra/category/Module/kernels.lean", "newPath": "src/algebra/category/Module/kernels.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["mod", "theorem", "associator_hom_apply", ["Module", "monoidal_category"]], ["mod", "theorem", "hom_apply", ["Module", "monoidal_category"]], ["mod", "def", "left_unitor", ["Module", "monoidal_category"]], ["mod", "theorem", "left_unitor_hom_apply", ["Module", "monoidal_category"]], ["mod", "def", "right_unitor", ["Module", "monoidal_category"]], ["mod", "theorem", "right_unitor_hom_apply", ["Module", "monoidal_category"]], ["mod", "theorem", "triangle", ["Module", "monoidal_category"]]]}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": [["mod", "def", "limit_π_monoid_hom", ["Mon"]]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["mod", "def", "has_coe_to_sort", ["category_theory", "concrete_category"]], ["mod", "def", "forget", ["category_theory"]], ["mod", "def", "forget₂", ["category_theory"]], ["mod", "def", "mk'", ["category_theory", "has_forget₂"]]]}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "newPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/internal/Module.lean", "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": [["mod", "theorem", "algebra_map", ["Module", "Mon_Module_equivalence_Algebra"]], ["mod", "def", "functor", ["Module", "Mon_Module_equivalence_Algebra"]], ["mod", "def", "Mon_Module_equivalence_Algebra", ["Module"]]]}]}, {"timestamp": 1598954085, "sha": "a97d71b5", "message": "feat(data/mv_polynomial): assorted lemmas (#4002)\nAssorted additions to `mv_polynomial`. This is more from the Witt vector development. Nothing too deep here, just scattered lemmas and the `constant_coeff` ring hom.\nCoauthored by: Johan Commelin \n\nHopefully this builds -- it's split off from a branch with a lot of other changes. I think it shouldn't have dependencies!", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "aeval_eq_eval₂_hom", ["mv_polynomial"]], ["add", "theorem", "aeval_monomial", ["mv_polynomial"]], ["add", "theorem", "aeval_zero'", ["mv_polynomial"]], ["add", "theorem", "aeval_zero", ["mv_polynomial"]], ["add", "theorem", "alg_hom_C", ["mv_polynomial"]], ["add", "theorem", "alg_hom_ext", ["mv_polynomial"]], ["add", "theorem", "comp_aeval", ["mv_polynomial"]], ["add", "theorem", "comp_eval₂_hom", ["mv_polynomial"]], ["add", "def", "constant_coeff", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_C", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_X", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_eq", ["mv_polynomial"]], ["add", "theorem", "constant_coeff_monomial", ["mv_polynomial"]], ["add", "theorem", "eval_map", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_C", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_X'", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_map_hom", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_monomial", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_rename", ["mv_polynomial"]], ["add", "theorem", "eval₂_map", ["mv_polynomial"]], ["add", "theorem", "map_aeval", ["mv_polynomial"]], ["add", "theorem", "map_eval₂_hom", ["mv_polynomial"]], ["add", "theorem", "ring_hom_ext", ["mv_polynomial"]]]}]}, {"timestamp": 1598942901, "sha": "2688d42b", "message": "feat(archive/100-theorems-list): friendship theorem (nr 83) (#3970)\ndefines friendship graphs\nproves the friendship theorem (freek #83)", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/83_friendship_graphs.lean", "changes": [["add", "def", "common_friends", []], ["add", "def", "exists_politician", []], ["add", "theorem", "adj_matrix_mul_const_one_mod_p_of_regular", ["friendship"]], ["add", "theorem", "adj_matrix_pow_mod_p_of_regular", ["friendship"]], ["add", "theorem", "adj_matrix_pow_three_of_not_adj", ["friendship"]], ["add", "theorem", "adj_matrix_sq_mod_p_of_regular", ["friendship"]], ["add", "theorem", "adj_matrix_sq_mul_const_one_of_regular", ["friendship"]], ["add", "theorem", "adj_matrix_sq_of_ne", ["friendship"]], ["add", "theorem", "adj_matrix_sq_of_regular", ["friendship"]], ["add", "theorem", "card_mod_p_of_regular", ["friendship"]], ["add", "theorem", "card_of_regular", ["friendship"]], ["add", "theorem", "degree_eq_of_not_adj", ["friendship"]], ["add", "theorem", "exists_politician_of_degree_eq_two", ["friendship"]], ["add", "theorem", "exists_politician_of_degree_le_one", ["friendship"]], ["add", "theorem", "exists_politician_of_degree_le_two", ["friendship"]], ["add", "theorem", "false_of_three_le_degree", ["friendship"]], ["add", "theorem", "is_regular_of_not_exists_politician", ["friendship"]], ["add", "theorem", "neighbor_finset_eq_of_degree_eq_two", ["friendship"]], ["add", "def", "friendship", []], ["add", "theorem", "friendship_theorem", []], ["add", "theorem", "mem_common_friends", []]]}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}]}, {"timestamp": 1598935863, "sha": "12763ecc", "message": "chore(*): more use of bundled ring homs (#4012)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "prod_hom", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["mod", "theorem", "prod_hom", ["multiset"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}]}, {"timestamp": 1598935861, "sha": "51546d29", "message": "chore(ring_theory/free_ring): use bundled ring homs (#4011)\nUse bundled ring homs in `free_ring` and `free_comm_ring`.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["del", "theorem", "coe_lift_hom", ["free_comm_ring"]], ["mod", "def", "lift", ["free_comm_ring"]], ["del", "theorem", "lift_add", ["free_comm_ring"]], ["mod", "theorem", "lift_comp_of", ["free_comm_ring"]], ["del", "def", "lift_hom", ["free_comm_ring"]], ["del", "theorem", "lift_hom_comp_of", ["free_comm_ring"]], ["del", "theorem", "lift_mul", ["free_comm_ring"]], ["del", "theorem", "lift_neg", ["free_comm_ring"]], ["del", "theorem", "lift_one", ["free_comm_ring"]], ["del", "theorem", "lift_pow", ["free_comm_ring"]], ["del", "theorem", "lift_sub", ["free_comm_ring"]], ["del", "theorem", "lift_zero", ["free_comm_ring"]], ["del", "theorem", "map_add", ["free_comm_ring"]], ["del", "theorem", "map_mul", ["free_comm_ring"]], ["del", "theorem", "map_neg", ["free_comm_ring"]], ["del", "theorem", "map_one", ["free_comm_ring"]], ["del", "theorem", "map_pow", ["free_comm_ring"]], ["del", "theorem", "map_sub", ["free_comm_ring"]], ["del", "theorem", "map_zero", ["free_comm_ring"]], ["del", "theorem", "restriction_add", ["free_comm_ring"]], ["del", "theorem", "restriction_mul", ["free_comm_ring"]], ["del", "theorem", "restriction_neg", ["free_comm_ring"]], ["del", "theorem", "restriction_one", ["free_comm_ring"]], ["del", "theorem", "restriction_sub", ["free_comm_ring"]], ["del", "theorem", "restriction_zero", ["free_comm_ring"]]]}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": [["mod", "def", "lift", ["free_ring"]], ["del", "theorem", "lift_add", ["free_ring"]], ["del", "def", "lift_hom", ["free_ring"]], ["del", "theorem", "lift_mul", ["free_ring"]], ["del", "theorem", "lift_neg", ["free_ring"]], ["del", "theorem", "lift_one", ["free_ring"]], ["del", "theorem", "lift_pow", ["free_ring"]], ["del", "theorem", "lift_sub", ["free_ring"]], ["del", "theorem", "lift_zero", ["free_ring"]], ["mod", "def", "map", ["free_ring"]], ["del", "theorem", "map_add", ["free_ring"]], ["del", "def", "map_hom", ["free_ring"]], ["del", "theorem", "map_mul", ["free_ring"]], ["del", "theorem", "map_neg", ["free_ring"]], ["mod", "theorem", "map_of", ["free_ring"]], ["del", "theorem", "map_one", ["free_ring"]], ["del", "theorem", "map_pow", ["free_ring"]], ["del", "theorem", "map_sub", ["free_ring"]], ["del", "theorem", "map_zero", ["free_ring"]]]}]}, {"timestamp": 1598935859, "sha": "93468fee", "message": "chore(algebraic_geometry/Spec): reduce imports (#4007)\nThe main change is to remove some `example`s from `topology.category.TopCommRing`, so that we don't need to know about the real and complex numbers on the way to defining a `Scheme`.\nWhile I was staring at `leanproject import-graph --to algebraic_geometry.Scheme`, I also removed a bunch of redundant or unused imports elsewhere.", "changes": [{"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/Scheme.lean", "newPath": "src/algebraic_geometry/Scheme.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/locally_ringed_space.lean", "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/sheafed_space.lean", "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": []}]}, {"timestamp": 1598935857, "sha": "551cf8e2", "message": "refactor(algebra/associates): unite `associates.prime` with `prime` (#3988)\ndeletes `associates.prime`, replaces it with the existing `prime`", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "eq_of_mul_eq_mul_right", ["associates"]], ["add", "theorem", "irreducible_iff_prime_iff", ["associates"]], ["add", "theorem", "le_of_mul_le_mul_right", ["associates"]], ["add", "theorem", "mk_dvd_mk", ["associates"]], ["del", "theorem", "ne_one", ["associates", "prime"]], ["del", "theorem", "ne_zero", ["associates", "prime"]], ["del", "def", "prime", ["associates"]], ["mod", "theorem", "dvd_iff_dvd_of_rel_right", []], ["mod", "theorem", "eq_zero_iff_of_associated", []], ["mod", "theorem", "irreducible_iff_of_associated", []], ["mod", "theorem", "irreducible_of_associated", []], ["add", "theorem", "left_dvd_or_dvd_right_of_dvd_prime_mul", []], ["mod", "theorem", "ne_zero_iff_of_associated", []], ["add", "theorem", "ne_one", ["prime"]], ["mod", "theorem", "prime_iff_of_associated", []], ["mod", "theorem", "prime_of_associated", []]]}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["del", "theorem", "left_dvd_or_dvd_right_of_dvd_prime_mul", []]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["mod", "theorem", "associates_irreducible_iff_prime", ["principal_ideal_ring"]]]}]}, {"timestamp": 1598935854, "sha": "7cd67b56", "message": "feat(category_theory/limits/shapes/terminal): is_terminal object (#3957)\nAdd language to talk about when an object is terminal, and generalise some results to use this", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["add", "theorem", "initial_mono", ["category_theory"]], ["mod", "def", "mul_zero", ["category_theory"]], ["mod", "def", "pow_zero", ["category_theory"]], ["add", "def", "strict_initial", ["category_theory"]], ["mod", "def", "zero_mul", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "as_empty_cocone", ["category_theory", "limits"]], ["add", "def", "as_empty_cone", ["category_theory", "limits"]], ["add", "def", "initial_is_initial", ["category_theory", "limits"]], ["add", "theorem", "epi_to", ["category_theory", "limits", "is_initial"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "is_initial"]], ["add", "def", "to", ["category_theory", "limits", "is_initial"]], ["add", "def", "is_initial", ["category_theory", "limits"]], ["add", "def", "from", ["category_theory", "limits", "is_terminal"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "is_terminal"]], ["add", "theorem", "mono_from", ["category_theory", "limits", "is_terminal"]], ["add", "def", "is_terminal", ["category_theory", "limits"]], ["add", "def", "terminal_is_terminal", ["category_theory", "limits"]]]}]}, {"timestamp": 1598930309, "sha": "fc57cf49", "message": "feat(data/{finset,finsupp,multiset}): more assorted lemmas (#4006)\nAnother grab bag of facts from the Witt vector branch.\nCoauthored by: Johan Commelin \n", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "union_subset_union", ["finset"]], ["add", "theorem", "disjoint_to_finset", ["multiset"]], ["add", "theorem", "to_finset_subset", ["multiset"]], ["add", "theorem", "to_finset_union", ["multiset"]]]}, {"oldPath": "src/data/finset/fold.lean", "newPath": "src/data/finset/fold.lean", "changes": [["add", "theorem", "fold_sup_bot_singleton", ["finset"]], ["add", "theorem", "fold_union_empty_singleton", ["finset"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "mem_sup", ["finset"]], ["add", "theorem", "sup_subset", ["finset"]]]}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "mem_to_multiset", ["finsupp"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "count_ne_zero", ["multiset"]]]}]}, {"timestamp": 1598922775, "sha": "c33b41b0", "message": "chore(scripts): update nolints.txt (#4009)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1598918646, "sha": "e053bdab", "message": "feat(category_theory/monoidal/internal): Mon_ (Module R) ≌ Algebra R (#3695)\nThe category of internal monoid objects in `Module R`\nis equivalent to the category of \"native\" bundled `R`-algebras.\nMoreover, this equivalence is compatible with the forgetful functors to `Module R`.", "changes": [{"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["del", "theorem", "associator_hom", ["Module", "monoidal_category"]], ["add", "theorem", "associator_hom_apply", ["Module", "monoidal_category"]], ["add", "theorem", "hom_apply", ["Module", "monoidal_category"]], ["del", "theorem", "left_unitor_hom", ["Module", "monoidal_category"]], ["add", "theorem", "left_unitor_hom_apply", ["Module", "monoidal_category"]], ["del", "theorem", "right_unitor_hom", ["Module", "monoidal_category"]], ["add", "theorem", "right_unitor_hom_apply", ["Module", "monoidal_category"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "lcongr_fun", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/internal/Module.lean", "changes": [["add", "theorem", "algebra_map", ["Module", "Mon_Module_equivalence_Algebra"]], ["add", "def", "functor", ["Module", "Mon_Module_equivalence_Algebra"]], ["add", "def", "inverse", ["Module", "Mon_Module_equivalence_Algebra"]], ["add", "def", "inverse_obj", ["Module", "Mon_Module_equivalence_Algebra"]], ["add", "def", "Mon_Module_equivalence_Algebra", ["Module"]], ["add", "def", "Mon_Module_equivalence_Algebra_forget", ["Module"]]]}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "linear_map_apply", ["algebra"]], ["add", "def", "lmul'", ["algebra"]], ["add", "theorem", "lmul'_apply", ["algebra"]]]}]}, {"timestamp": 1598913703, "sha": "036527ae", "message": "feat(linear_algebra/finite_dimensional): eq_of_le_of_findim_eq (#4005)\nAdd a variant of `eq_top_of_findim_eq`, where instead of proving a\nsubmodule equal to `⊤`, it's shown equal to another finite-dimensional\nsubmodule with the same dimension that contains it. The two lemmas\nare related by the `comap_subtype` lemmas, so the proof is short, but\nit still seems useful to have this form.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "eq_of_le_of_findim_eq", ["finite_dimensional"]]]}]}, {"timestamp": 1598911878, "sha": "be3b1758", "message": "feat(analysis/normed_space/real_inner_product): inner_add_sub_eq_zero_iff (#4004)\nAdd a lemma that the sum and difference of two vectors are orthogonal\nif and only if they have the same norm. (This can be interpreted\ngeometrically as saying e.g. that a median of a triangle from a vertex\nis orthogonal to the opposite edge if and only if the triangle is\nisosceles at that vertex.)", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "inner_add_sub_eq_zero_iff", []]]}]}, {"timestamp": 1598901935, "sha": "d0a8cc4b", "message": "feat(analysis/special_functions/trigonometric): ranges of `real.sin` and `real.cos` (#3998)", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "exists_cos_eq", ["real"]], ["add", "theorem", "range_cos", ["real"]], ["add", "theorem", "range_sin", ["real"]]]}]}, {"timestamp": 1598893663, "sha": "d4484a4e", "message": "fix(widget): workaround for webview rendering bug (#3997)\nSee https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/extension.20performance\nThe bug seems to go away if we collapse the extra nested spans made by `block` in to one span.\nStill should do some tests to make sure this doesn't break anything else.\nMinimal breaking example is:\n```\nimport tactic.interactive_expr\nexample :\n0+1+2+3+4+5+6+7+8+9 +\n0+1+2+3+4+5+6+7+8+9 =\n0+1+2+3+4+5+6+7+8+9 :=\nby skip\n```", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1598887921, "sha": "d2b18a18", "message": "feat(algebra/field, ring_theory/ideal/basic): an ideal is maximal iff the quotient is a field (#3986)\nOne half of the theorem was already proven (the implication maximal\nideal implies that the quotient is a field), but the other half was not,\nmainly because it was missing a necessary predicate.\nI added the predicate is_field that can be used to tell Lean that the\nusual ring structure on the quotient extends to a field. The predicate\nalong with proofs to move between is_field and field were provided by\nKevin Buzzard. I also added a lemma that the inverse is unique in\nis_field.\nAt the end I also added the iff statement of the theorem.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "to_is_field", ["field"]], ["add", "structure", "is_field", []], ["add", "theorem", "uniq_inv_of_is_field", []]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "maximal_ideal_iff_is_field_quotient", ["ideal", "quotient"]], ["add", "theorem", "maximal_of_is_field", ["ideal", "quotient"]]]}]}, {"timestamp": 1598885105, "sha": "8089f506", "message": "chore(category_theory/limits): some simp lemmas (#3993)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "ι_app_left", ["category_theory", "limits", "binary_cofan"]], ["add", "theorem", "ι_app_right", ["category_theory", "limits", "binary_cofan"]], ["add", "theorem", "π_app_left", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "π_app_right", ["category_theory", "limits", "binary_fan"]]]}]}, {"timestamp": 1598879864, "sha": "9e9e318c", "message": "feat(data/fin): simplify fin.mk (#3996)\nAfter the recent changes to make `fin n` a subtype, expressions\ninvolving `fin.mk` were not getting simplified as they used to be,\nsince the `simp` lemmas are for the anonymous constructor, which is\n`subtype.mk` not `fin.mk`. Add a `simp` lemma converting `fin.mk` to\nthe anonymous constructor.\nIn particular, unsimplified expressions involving `fin.mk` were coming\nout of `fin_cases` (I think this comes from `fin_range` in\n`data/list/range.lean` using `fin.mk`). I don't know if that should\nbe avoiding creating the `fin.mk` expressions in the first place, but\nsimplifying them seems a good idea in any case.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "mk_eq_subtype_mk", ["fin"]]]}]}, {"timestamp": 1598863647, "sha": "10ebb718", "message": "feat(measure_theory): induction principles in measure theory (#3978)\nThis commit adds three induction principles for measure theory\n* To prove something for arbitrary simple functions\n* To prove something for arbitrary measurable functions into `ennreal`\n* To prove something for arbitrary measurable + integrable functions.\nThis also adds some basic lemmas to various files. Not all of them are used in this PR, some will be used by near-future PRs.", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": [["add", "theorem", "comp_one", ["pi"]], ["add", "theorem", "const_one", ["pi"]], ["add", "theorem", "one_comp", ["pi"]]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "comp_indicator", ["set"]], ["add", "theorem", "indicator_add_eq_left", ["set"]], ["add", "theorem", "indicator_add_eq_right", ["set"]], ["mod", "theorem", "indicator_comp_of_zero", ["set"]], ["add", "theorem", "indicator_zero'", ["set"]], ["add", "theorem", "piecewise_eq_indicator", ["set"]]]}, {"oldPath": "src/data/list/indexes.lean", "newPath": "src/data/list/indexes.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "div_pos_iff", ["ennreal"]], ["mod", "theorem", "div_zero_iff", ["ennreal"]], ["add", "theorem", "lt_top_of_mul_lt_top_left", ["ennreal"]], ["add", "theorem", "lt_top_of_mul_lt_top_right", ["ennreal"]], ["mod", "theorem", "mul_eq_top", ["ennreal"]], ["mod", "theorem", "mul_lt_top", ["ennreal"]], ["mod", "theorem", "mul_ne_top", ["ennreal"]], ["mod", "theorem", "mul_pos", ["ennreal"]], ["add", "theorem", "ne_top_of_mul_ne_top_left", ["ennreal"]], ["add", "theorem", "ne_top_of_mul_ne_top_right", ["ennreal"]], ["add", "theorem", "not_lt_top", ["ennreal"]], ["mod", "theorem", "to_real_eq_to_real", ["ennreal"]], ["mod", "theorem", "to_real_mul_to_real", ["ennreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subset", ["eq"]], ["add", "theorem", "diff_diff_comm", ["set"]], ["mod", "theorem", "image_compl_preimage", ["set"]], ["add", "theorem", "image_diff_preimage", ["set"]], ["add", "theorem", "image_preimage_eq_iff", ["set"]], ["add", "theorem", "range_subset_singleton", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "comp_piecewise", ["set"]], ["add", "theorem", "piecewise_same", ["set"]], ["add", "theorem", "range_piecewise", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "comp_const", ["function"]], ["add", "theorem", "const_apply", ["function"]], ["add", "theorem", "const_comp", ["function"]], ["mod", "theorem", "of_comp", ["function", "injective"]], ["mod", "theorem", "comp", ["function", "left_inverse"]], ["mod", "theorem", "comp", ["function", "right_inverse"]], ["mod", "theorem", "of_comp", ["function", "surjective"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "ennreal_induction", ["measurable"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "induction", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_add", ["measure_theory"]]]}]}, {"timestamp": 1598861484, "sha": "bf7487b5", "message": "fix(algebraic_geometry/Spec): inline TeX in heading (#3992)", "changes": [{"oldPath": "src/algebraic_geometry/Spec.lean", "newPath": "src/algebraic_geometry/Spec.lean", "changes": []}]}, {"timestamp": 1598850577, "sha": "b79fc037", "message": "feature(algebraic_geometry/Scheme): the category of schemes (#3961)\nThe definition of a `Scheme`, and the category of schemes as the full subcategory of locally ringed spaces.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "is_unit_map", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/Scheme.lean", "changes": [["add", "def", "empty", ["algebraic_geometry", "Scheme"]], ["add", "def", "to_LocallyRingedSpace", ["algebraic_geometry", "Scheme"]], ["add", "structure", "Scheme", ["algebraic_geometry"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/Spec.lean", "changes": [["add", "def", "PresheafedSpace", ["algebraic_geometry", "Spec"]], ["add", "def", "SheafedSpace", ["algebraic_geometry", "Spec"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/locally_ringed_space.lean", "changes": [["add", "def", "comp", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "forget_to_SheafedSpace", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "hom", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "theorem", "hom_ext", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "id", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "stalk", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "stalk_map", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "to_Top", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "def", "𝒪", ["algebraic_geometry", "LocallyRingedSpace"]], ["add", "structure", "LocallyRingedSpace", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["mod", "theorem", "as_coe", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "const", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "mk_coe", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "restrict", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "map_presheaf_obj_presheaf", ["category_theory", "functor"]], ["del", "theorem", "map_presheaf_obj_𝒪", ["category_theory", "functor"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["add", "def", "basic_open", ["prime_spectrum"]], ["add", "theorem", "basic_open_open", ["prime_spectrum"]], ["add", "theorem", "punit", ["prime_spectrum"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/sheafed_space.lean", "changes": [["add", "theorem", "as_coe", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "comp_base", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "comp_c_app", ["algebraic_geometry", "SheafedSpace"]], ["add", "def", "forget", ["algebraic_geometry", "SheafedSpace"]], ["add", "def", "forget_to_PresheafedSpace", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "id_base", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "id_c", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "id_c_app", ["algebraic_geometry", "SheafedSpace"]], ["add", "theorem", "mk_coe", ["algebraic_geometry", "SheafedSpace"]], ["add", "def", "punit", ["algebraic_geometry", "SheafedSpace"]], ["add", "def", "restrict", ["algebraic_geometry", "SheafedSpace"]], ["add", "def", "sheaf", ["algebraic_geometry", "SheafedSpace"]], ["add", "structure", "SheafedSpace", ["algebraic_geometry"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["mod", "def", "stalk", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/structure_sheaf.lean", "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "def", "stalk_iso", ["algebraic_geometry"]], ["add", "def", "stalk_iso_Type", ["algebraic_geometry"]], ["add", "def", "stalk_to_fiber_ring_hom", ["algebraic_geometry"]], ["add", "theorem", "structure_sheaf_stalk_to_fiber_injective", ["algebraic_geometry"]], ["add", "theorem", "structure_sheaf_stalk_to_fiber_surjective", ["algebraic_geometry"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "jointly_surjective'", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "is_unit_map_iff", []], ["add", "theorem", "local_of_surjective", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "def", "functor", ["is_open_map"]], ["add", "def", "inclusion", ["topological_space", "opens"]], ["add", "theorem", "inclusion_open_embedding", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "theorem", "coe_inf", ["topological_space", "opens"]], ["add", "theorem", "le_def", ["topological_space", "opens"]], ["add", "theorem", "mk_inf_mk", ["topological_space", "opens"]], ["add", "theorem", "supr_mk", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": [["add", "theorem", "sheafify_of", ["Top", "prelocal_predicate"]]]}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["add", "def", "of_open_embedding", ["Top", "sheaf_condition", "cover"]], ["add", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "diagram"]], ["add", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "fork"]], ["add", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "pi_inters"]], ["add", "def", "iso_of_open_embedding", ["Top", "sheaf_condition", "pi_opens"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "theorem", "germ_exist", ["Top", "presheaf"]]]}]}, {"timestamp": 1598829613, "sha": "e88843ca", "message": "feat(data/finset/sort): range_mono_of_fin (#3987)\nAdd a `simp` lemma giving the range of `mono_of_fin`.", "changes": [{"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "range_mono_of_fin", ["finset"]]]}]}, {"timestamp": 1598812835, "sha": "861f1821", "message": "feat(widget): add go to definition button. (#3982)\nNow you can hit a new button in the tooltip and it will reveal the definition location in the editor!", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1598807547, "sha": "f9ee4166", "message": "feat(topology/tactic): optionally make `continuity` verbose with `?` (#3962)", "changes": [{"oldPath": "src/topology/tactic.lean", "newPath": "src/topology/tactic.lean", "changes": []}]}, {"timestamp": 1598801828, "sha": "1073204e", "message": "feat(logic/nontrivial): function.injective.exists_ne (#3983)\nAdd a lemma that an injective function from a nontrivial type has an\nargument at which it does not take a given value.", "changes": [{"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}]}, {"timestamp": 1598786668, "sha": "942c779d", "message": "feat(meta/widget): Add css classes for indentation as required by group and nest. (#3764)\nthis is a transplant of https://github.com/leanprover-community/lean/pull/439\nthe relevant css section looks more or less like this:\n```css\n .indent-code {\n text-indent: calc(var(--indent-level) * -1ch);\n padding-left: calc(var(--indent-level) * 1ch);\n }\n```\nFor details, one can play around here: https://jsfiddle.net/xbzhL60m/45/", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1598765897, "sha": "ffce8f67", "message": "feat(data/complex/is_R_or_C): add typeclass for real or complex (#3934)", "changes": [{"oldPath": null, "newPath": "src/data/complex/is_R_or_C.lean", "changes": [["add", "theorem", "I_im", ["is_R_or_C"]], ["add", "theorem", "I_mul_I", ["is_R_or_C"]], ["add", "theorem", "I_mul_I_of_nonzero", ["is_R_or_C"]], ["add", "theorem", "I_re", ["is_R_or_C"]], ["add", "theorem", "I_to_complex", ["is_R_or_C"]], ["add", "theorem", "I_to_real", ["is_R_or_C"]], ["add", "theorem", "abs_abs", ["is_R_or_C"]], ["add", "theorem", "abs_abs_sub_le_abs_sub", ["is_R_or_C"]], ["add", "theorem", "abs_add", ["is_R_or_C"]], ["add", "theorem", "abs_cast_nat", ["is_R_or_C"]], ["add", "theorem", "abs_conj", ["is_R_or_C"]], ["add", "theorem", "abs_div", ["is_R_or_C"]], ["add", "theorem", "abs_eq_zero", ["is_R_or_C"]], ["add", "theorem", "abs_im_div_abs_le_one", ["is_R_or_C"]], ["add", "theorem", "abs_im_le_abs", ["is_R_or_C"]], ["add", "theorem", "abs_inv", ["is_R_or_C"]], ["add", "theorem", "abs_mul", ["is_R_or_C"]], ["add", "theorem", "abs_ne_zero", ["is_R_or_C"]], ["add", "theorem", "abs_neg", ["is_R_or_C"]], ["add", "theorem", "abs_nonneg", ["is_R_or_C"]], ["add", "theorem", "abs_of_nat", ["is_R_or_C"]], ["add", "theorem", "abs_of_nonneg", ["is_R_or_C"]], ["add", "theorem", "abs_of_real", ["is_R_or_C"]], ["add", "theorem", "abs_one", ["is_R_or_C"]], ["add", "theorem", "abs_pos", ["is_R_or_C"]], ["add", "theorem", "abs_re_div_abs_le_one", ["is_R_or_C"]], ["add", "theorem", "abs_re_le_abs", ["is_R_or_C"]], ["add", "theorem", "abs_sub", ["is_R_or_C"]], ["add", "theorem", "abs_sub_le", ["is_R_or_C"]], ["add", "theorem", "abs_to_complex", ["is_R_or_C"]], ["add", "theorem", "abs_to_real", ["is_R_or_C"]], ["add", "theorem", "abs_two", ["is_R_or_C"]], ["add", "theorem", "abs_zero", ["is_R_or_C"]], ["add", "theorem", "add_conj", ["is_R_or_C"]], ["add", "theorem", "bit0_im", ["is_R_or_C"]], ["add", "theorem", "bit0_re", ["is_R_or_C"]], ["add", "theorem", "bit1_im", ["is_R_or_C"]], ["add", "theorem", "bit1_re", ["is_R_or_C"]], ["add", "theorem", "char_zero_R_or_C", ["is_R_or_C"]], ["add", "theorem", "conj_bijective", ["is_R_or_C"]], ["add", "theorem", "conj_bit0", ["is_R_or_C"]], ["add", "theorem", "conj_bit1", ["is_R_or_C"]], ["add", "theorem", "conj_conj", ["is_R_or_C"]], ["add", "theorem", "conj_eq_zero", ["is_R_or_C"]], ["add", "theorem", "conj_im", ["is_R_or_C"]], ["add", "theorem", "conj_inj", ["is_R_or_C"]], ["add", "theorem", "conj_involutive", ["is_R_or_C"]], ["add", "theorem", "conj_neg_I", ["is_R_or_C"]], ["add", "theorem", "conj_of_real", ["is_R_or_C"]], ["add", "theorem", "conj_re", ["is_R_or_C"]], ["add", "theorem", "conj_to_complex", ["is_R_or_C"]], ["add", "theorem", "conj_to_real", ["is_R_or_C"]], ["add", "theorem", "div_I", ["is_R_or_C"]], ["add", "theorem", "div_im", ["is_R_or_C"]], ["add", "theorem", "div_re", ["is_R_or_C"]], ["add", "theorem", "eq_conj_iff_re", ["is_R_or_C"]], ["add", "theorem", "eq_conj_iff_real", ["is_R_or_C"]], ["add", "theorem", "ext", ["is_R_or_C"]], ["add", "theorem", "ext_iff", ["is_R_or_C"]], ["add", "theorem", "im_le_abs", ["is_R_or_C"]], ["add", "theorem", "im_sq_le_norm_sq", ["is_R_or_C"]], ["add", "theorem", "im_to_complex", ["is_R_or_C"]], ["add", "theorem", "im_to_real", ["is_R_or_C"]], ["add", "theorem", "int_cast_im", ["is_R_or_C"]], ["add", "theorem", "int_cast_re", ["is_R_or_C"]], ["add", "theorem", "inv_I", ["is_R_or_C"]], ["add", "theorem", "inv_def", ["is_R_or_C"]], ["add", "theorem", "inv_im", ["is_R_or_C"]], ["add", "theorem", "inv_re", ["is_R_or_C"]], ["add", "theorem", "is_cau_seq_abs", ["is_R_or_C"]], ["add", "theorem", "is_cau_seq_im", ["is_R_or_C"]], ["add", "theorem", "is_cau_seq_re", ["is_R_or_C"]], ["add", "theorem", "mul_conj", ["is_R_or_C"]], ["add", "theorem", "mul_im", ["is_R_or_C"]], ["add", "theorem", "mul_re", ["is_R_or_C"]], ["add", "theorem", "mul_self_abs", ["is_R_or_C"]], ["add", "theorem", "nat_cast_im", ["is_R_or_C"]], ["add", "theorem", "nat_cast_re", ["is_R_or_C"]], ["add", "def", "norm_sq", ["is_R_or_C"]], ["add", "theorem", "norm_sq_add", ["is_R_or_C"]], ["add", "theorem", "norm_sq_conj", ["is_R_or_C"]], ["add", "theorem", "norm_sq_div", ["is_R_or_C"]], ["add", "theorem", "norm_sq_eq_abs", ["is_R_or_C"]], ["add", "theorem", "norm_sq_eq_def'", ["is_R_or_C"]], ["add", "theorem", "norm_sq_eq_def", ["is_R_or_C"]], ["add", "theorem", "norm_sq_eq_zero", ["is_R_or_C"]], ["add", "theorem", "norm_sq_inv", ["is_R_or_C"]], ["add", "theorem", "norm_sq_mul", ["is_R_or_C"]], ["add", "theorem", "norm_sq_neg", ["is_R_or_C"]], ["add", "theorem", "norm_sq_nonneg", ["is_R_or_C"]], ["add", "theorem", "norm_sq_of_real", ["is_R_or_C"]], ["add", "theorem", "norm_sq_one", ["is_R_or_C"]], ["add", "theorem", "norm_sq_pos", ["is_R_or_C"]], ["add", "theorem", "norm_sq_sub", ["is_R_or_C"]], ["add", "theorem", "norm_sq_to_complex", ["is_R_or_C"]], ["add", "theorem", "norm_sq_to_real", ["is_R_or_C"]], ["add", "theorem", "norm_sq_zero", ["is_R_or_C"]], ["add", "theorem", "of_real_add", ["is_R_or_C"]], ["add", "theorem", "of_real_alg", ["is_R_or_C"]], ["add", "theorem", "of_real_bit0", ["is_R_or_C"]], ["add", "theorem", "of_real_bit1", ["is_R_or_C"]], ["add", "theorem", "of_real_div", ["is_R_or_C"]], ["add", "theorem", "of_real_eq_zero", ["is_R_or_C"]], ["add", "theorem", "of_real_fpow", ["is_R_or_C"]], ["add", "def", "of_real_hom", ["is_R_or_C"]], ["add", "theorem", "of_real_im", ["is_R_or_C"]], ["add", "theorem", "of_real_inj", ["is_R_or_C"]], ["add", "theorem", "of_real_int_cast", ["is_R_or_C"]], ["add", "theorem", "of_real_inv", ["is_R_or_C"]], ["add", "theorem", "of_real_mul", ["is_R_or_C"]], ["add", "theorem", "of_real_nat_cast", ["is_R_or_C"]], ["add", "theorem", "of_real_neg", ["is_R_or_C"]], ["add", "theorem", "of_real_one", ["is_R_or_C"]], ["add", "theorem", "of_real_pow", ["is_R_or_C"]], ["add", "theorem", "of_real_rat_cast", ["is_R_or_C"]], ["add", "theorem", "of_real_re", ["is_R_or_C"]], ["add", "theorem", "of_real_sub", ["is_R_or_C"]], ["add", "theorem", "of_real_to_complex", ["is_R_or_C"]], ["add", "theorem", "of_real_to_real", ["is_R_or_C"]], ["add", "theorem", "of_real_zero", ["is_R_or_C"]], ["add", "theorem", "one_im", ["is_R_or_C"]], ["add", "theorem", "one_re", ["is_R_or_C"]], ["add", "theorem", "rat_cast_im", ["is_R_or_C"]], ["add", "theorem", "rat_cast_re", ["is_R_or_C"]], ["add", "theorem", "re_add_im", ["is_R_or_C"]], ["add", "theorem", "re_eq_add_conj", ["is_R_or_C"]], ["add", "theorem", "re_le_abs", ["is_R_or_C"]], ["add", "theorem", "re_sq_le_norm_sq", ["is_R_or_C"]], ["add", "theorem", "re_to_complex", ["is_R_or_C"]], ["add", "theorem", "re_to_real", ["is_R_or_C"]], ["add", "theorem", "smul_im'", ["is_R_or_C"]], ["add", "theorem", "smul_im", ["is_R_or_C"]], ["add", "theorem", "smul_re'", ["is_R_or_C"]], ["add", "theorem", "smul_re", ["is_R_or_C"]], ["add", "theorem", "sub_conj", ["is_R_or_C"]], ["add", "theorem", "two_ne_zero", ["is_R_or_C"]], ["add", "theorem", "zero_im", ["is_R_or_C"]], ["add", "theorem", "zero_re", ["is_R_or_C"]]]}]}, {"timestamp": 1598763206, "sha": "a18f142d", "message": "feat(set_theory/game): computation of grundy_value (nim n + nim m) (#3977)", "changes": [{"oldPath": "src/data/nat/bitwise.lean", "newPath": "src/data/nat/bitwise.lean", "changes": [["add", "theorem", "lxor_trichotomy", ["nat"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "equiv_iff_grundy_value_eq", ["pgame"]], ["mod", "theorem", "equiv_nim_iff_grundy_value_eq", ["pgame"]], ["add", "theorem", "equiv_zero_iff_grundy_value", ["pgame"]], ["add", "theorem", "grundy_value_add", ["pgame"]], ["add", "theorem", "grundy_value_nim_add_nim", ["pgame"]], ["add", "theorem", "grundy_value_zero", ["pgame"]], ["add", "theorem", "exists_move_left_eq", ["pgame", "nim"]], ["add", "theorem", "exists_ordinal_move_left_eq", ["pgame", "nim"]], ["add", "theorem", "nim_add_nim_equiv", ["pgame"]]]}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["add", "theorem", "equiv_congr_left", ["pgame"]], ["add", "theorem", "equiv_congr_right", ["pgame"]]]}]}, {"timestamp": 1598752773, "sha": "dfdb38ab", "message": "feat(data/fin): nontrivial instance (#3979)\nAdd an instance `nontrivial (fin (n + 2))`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}]}, {"timestamp": 1598722583, "sha": "14e7fe83", "message": "feat(linear_algebra/char_poly/coeff,*): prerequisites for friendship theorem (#3953)\nadds several assorted lemmas about matrices and `zmod p`\nproves that if `M` is a square matrix with entries in `zmod p`, then `tr M^p = tr M`, needed for friendship theorem", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "theorem", "add_pow_char", []], ["add", "theorem", "add_pow_char_pow", []], ["add", "theorem", "add_pow_char_pow_of_commute", []], ["add", "theorem", "iterate_frobenius", []], ["add", "theorem", "sub_pow_char", []], ["add", "theorem", "sub_pow_char_of_commute", []], ["add", "theorem", "sub_pow_char_pow", []], ["add", "theorem", "sub_pow_char_pow_of_commute", []]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "map_sub", ["matrix"]], ["add", "theorem", "scalar_inj", ["matrix"]], ["add", "theorem", "subsingleton_of_empty_left", ["matrix"]], ["add", "theorem", "subsingleton_of_empty_right", ["matrix"]]]}, {"oldPath": null, "newPath": "src/data/matrix/char_p.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "commute_X", ["polynomial"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["add", "theorem", "expand_card", ["finite_field"]], ["add", "theorem", "frobenius_pow", ["finite_field"]], ["add", "theorem", "pow_card", ["finite_field"]], ["mod", "theorem", "pow_card_sub_one_eq_one", ["finite_field"]], ["add", "theorem", "card_units", ["zmod"]], ["add", "theorem", "expand_card", ["zmod"]], ["add", "theorem", "pow_card", ["zmod"]], ["add", "theorem", "pow_card_sub_one_eq_one", ["zmod"]], ["add", "theorem", "units_pow_card_sub_one_eq_one", ["zmod"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "expand_char", ["polynomial"]], ["add", "theorem", "map_expand", ["polynomial"]], ["add", "theorem", "map_expand_pow_char", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": [["add", "theorem", "char_poly_pow_card", ["finite_field"]], ["add", "theorem", "trace_pow_card", ["finite_field"]], ["add", "theorem", "char_poly_pow_card", ["zmod"]], ["add", "theorem", "trace_pow_card", ["zmod"]]]}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["del", "theorem", "card_units", ["zmod"]], ["del", "theorem", "fermat_little", ["zmod"]], ["del", "theorem", "fermat_little_units", ["zmod"]]]}]}, {"timestamp": 1598722581, "sha": "4c4243c5", "message": "feat(linear_algebra): determinant of vectors in a basis (#3919)\nFrom the sphere eversion project, define the determinant of a family of vectors with respects to a basis. \nThe main result is `is_basis.iff_det` asserting a family of vectors is a basis iff its determinant in some basis is invertible.\nAlso renames `equiv_fun_basis` to `is_basis.equiv_fun` and `equiv_fun_basis_symm_apply` to `is_basis.equiv_fun_symm_apply`, in order to use dot notation.", "changes": [{"oldPath": "src/algebra/big_operators/pi.lean", "newPath": "src/algebra/big_operators/pi.lean", "changes": [["add", "theorem", "prod_apply", ["fintype"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "map_sum", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["del", "def", "equiv_fun_basis", []], ["del", "theorem", "equiv_fun_basis_symm_apply", []], ["add", "def", "equiv_fun", ["is_basis"]], ["add", "theorem", "equiv_fun_apply", ["is_basis"]], ["add", "theorem", "equiv_fun_self", ["is_basis"]], ["add", "theorem", "equiv_fun_symm_apply", ["is_basis"]], ["add", "theorem", "equiv_fun_total", ["is_basis"]], ["add", "theorem", "repr_self_apply", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "def", "det", ["is_basis"]], ["add", "theorem", "det_apply", ["is_basis"]], ["add", "theorem", "det_self", ["is_basis"]], ["add", "theorem", "iff_det", ["is_basis"]], ["add", "def", "to_matrix", ["is_basis"]], ["add", "theorem", "to_matrix_apply", ["is_basis"]], ["add", "def", "to_matrix_equiv", ["is_basis"]], ["add", "theorem", "to_matrix_self", ["is_basis"]], ["add", "theorem", "to_matrix_update", ["is_basis"]], ["add", "theorem", "is_unit_det", ["linear_equiv"]], ["add", "def", "of_is_unit_det", ["linear_equiv"]], ["del", "theorem", "is_unit_det", ["matrix", "linear_equiv"]], ["del", "def", "of_is_unit_det", ["matrix", "linear_equiv"]]]}]}, {"timestamp": 1598716755, "sha": "94b1292f", "message": "doc(topology/sheaves): update module docs (#3971)", "changes": [{"oldPath": "src/topology/sheaves/local_predicate.lean", "newPath": "src/topology/sheaves/local_predicate.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}]}, {"timestamp": 1598716753, "sha": "ba41f0a4", "message": "feat(data/nat): API for test_bit and bitwise operations (#3964)", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "bxor_ff_left", ["bool"]], ["add", "theorem", "bxor_ff_right", ["bool"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "bitwise_comm", ["nat"]], ["del", "theorem", "land_comm", ["nat"]], ["del", "theorem", "lor_comm", ["nat"]], ["del", "theorem", "lxor_comm", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/bitwise.lean", "changes": [["add", "theorem", "bit_ff", ["nat"]], ["add", "theorem", "bit_tt", ["nat"]], ["add", "theorem", "bitwise_comm", ["nat"]], ["add", "theorem", "eq_of_test_bit_eq", ["nat"]], ["add", "theorem", "exists_most_significant_bit", ["nat"]], ["add", "theorem", "land_assoc", ["nat"]], ["add", "theorem", "land_comm", ["nat"]], ["add", "theorem", "land_zero", ["nat"]], ["add", "theorem", "lor_assoc", ["nat"]], ["add", "theorem", "lor_comm", ["nat"]], ["add", "theorem", "lor_zero", ["nat"]], ["add", "theorem", "lt_of_test_bit", ["nat"]], ["add", "theorem", "lxor_assoc", ["nat"]], ["add", "theorem", "lxor_comm", ["nat"]], ["add", "theorem", "lxor_eq_zero", ["nat"]], ["add", "theorem", "lxor_left_inj", ["nat"]], ["add", "theorem", "lxor_right_inj", ["nat"]], ["add", "theorem", "lxor_self", ["nat"]], ["add", "theorem", "lxor_zero", ["nat"]], ["add", "theorem", "zero_land", ["nat"]], ["add", "theorem", "zero_lor", ["nat"]], ["add", "theorem", "zero_lxor", ["nat"]], ["add", "theorem", "zero_of_test_bit_eq_ff", ["nat"]], ["add", "theorem", "zero_test_bit", ["nat"]]]}]}, {"timestamp": 1598710576, "sha": "faf1df48", "message": "chore(topology/sheaves/sheaf_of_functions): rely less on defeq (#3972)\nThis backports some changes from the `prop_limits` branch.", "changes": [{"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "lift_π_apply'", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": []}]}, {"timestamp": 1598710574, "sha": "fd4628f1", "message": "chore(*): bump to lean 3.19.0c, fin is now a subtype (#3955)\n* Some `decidable.*` order theorems have been moved to core.\n* `fin` is now a subtype. \nThis means that the whnf of `fin n` is now `{i // i < n}`.\nAlso, the coercion `fin n → nat` is now preferred over `subtype.val`.\nThe entire library has been refactored accordingly. (Although I probably missed some cases.)\n* `in_current_file'` was removed since the bug in \n`in_current_file` was fixed in core.\n* The syntax of `guard_hyp` in core was changed from\n`guard_hyp h := t` to `guard_hyp h : t`, so the syntax\nfor the related `guard_hyp'`, `match_hyp` and\n`guard_hyp_strict` tactics in `tactic.interactive` was changed as well.", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["del", "theorem", "eq_or_lt_of_le", ["decidable"]], ["del", "theorem", "le_iff_lt_or_eq", ["decidable"]], ["del", "theorem", "le_imp_le_of_lt_imp_lt", ["decidable"]], ["del", "theorem", "le_of_not_lt", ["decidable"]], ["del", "theorem", "le_or_lt", ["decidable"]], ["del", "def", "lt_by_cases", ["decidable"]], ["del", "theorem", "lt_or_eq_of_le", ["decidable"]], ["del", "theorem", "lt_or_gt_of_ne", ["decidable"]], ["del", "theorem", "lt_or_le", ["decidable"]], ["del", "theorem", "lt_trichotomy", ["decidable"]], ["del", "theorem", "ne_iff_lt_or_gt", ["decidable"]], ["del", "theorem", "not_lt", ["decidable"]], ["del", "theorem", "not_le", []], ["del", "theorem", "not_lt", []]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["mod", "theorem", "lt_size_up_to_index_succ", ["composition"]], ["mod", "theorem", "lt_length'", ["composition_as_set"]], ["mod", "theorem", "lt_length", ["composition_as_set"]]]}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": [["mod", "theorem", "fin_val", ["primrec"]]]}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": [["mod", "theorem", "write_to_list", ["array"]]]}, {"oldPath": "src/data/bitvec/basic.lean", "newPath": "src/data/bitvec/basic.lean", "changes": [["mod", "theorem", "to_fin_val", ["bitvec"]]]}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["del", "theorem", "add_nat_val", ["fin"]], ["del", "theorem", "cast_add_val", ["fin"]], ["del", "theorem", "cast_le_val", ["fin"]], ["mod", "theorem", "cast_lt_cast_succ", ["fin"]], ["del", "theorem", "cast_lt_val", ["fin"]], ["mod", "theorem", "cast_succ_cast_lt", ["fin"]], ["mod", "theorem", "cast_succ_lt_last", ["fin"]], ["del", "theorem", "cast_succ_val", ["fin"]], ["del", "theorem", "cast_val", ["fin"]], ["mod", "def", "clamp", ["fin"]], ["del", "theorem", "clamp_val", ["fin"]], ["add", "theorem", "coe_add", ["fin"]], ["add", "theorem", "coe_add_nat", ["fin"]], ["add", "theorem", "coe_cast", ["fin"]], ["add", "theorem", "coe_cast_add", ["fin"]], ["add", "theorem", "coe_cast_le", ["fin"]], ["add", "theorem", "coe_cast_lt", ["fin"]], ["add", "theorem", "coe_cast_succ", ["fin"]], ["add", "theorem", "coe_clamp", ["fin"]], ["add", "theorem", "coe_injective", ["fin"]], ["add", "theorem", "coe_mul", ["fin"]], ["add", "theorem", "coe_of_nat_eq_mod'", ["fin"]], ["add", "theorem", "coe_of_nat_eq_mod", ["fin"]], ["add", "theorem", "coe_one'", ["fin"]], ["add", "theorem", "coe_pred", ["fin"]], ["add", "theorem", "coe_sub_nat", ["fin"]], ["add", "theorem", "coe_succ", ["fin"]], ["mod", "theorem", "coe_val_eq_self", ["fin"]], ["mod", "theorem", "eq_last_of_not_lt", ["fin"]], ["add", "theorem", "ext", ["fin"]], ["add", "theorem", "ext_iff", ["fin"]], ["add", "theorem", "is_lt", ["fin"]], ["mod", "theorem", "last_val", ["fin"]], ["add", "theorem", "le_iff_coe_le_coe", ["fin"]], ["del", "theorem", "le_iff_val_le_val", ["fin"]], ["add", "theorem", "lt_iff_coe_lt_coe", ["fin"]], ["del", "theorem", "lt_iff_val_lt_val", ["fin"]], ["add", "theorem", "mk_coe", ["fin"]], ["mod", "theorem", "mk_one", ["fin"]], ["mod", "theorem", "mk_zero", ["fin"]], ["del", "theorem", "pred_val", ["fin"]], ["mod", "def", "sub_nat", ["fin"]], ["del", "theorem", "sub_nat_val", ["fin"]], ["mod", "theorem", "succ_pos", ["fin"]], ["del", "theorem", "succ_val", ["fin"]], ["add", "theorem", "val_eq_coe", ["fin"]], ["del", "theorem", "val_injective", ["fin"]], ["del", "theorem", "val_of_nat_eq_mod'", ["fin"]], ["del", "theorem", "val_of_nat_eq_mod", ["fin"]], ["del", "theorem", "coe_fin", ["function", "embedding"]], ["del", "def", "fin", ["function", "embedding"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["mod", "theorem", "of_fn_nth_le", ["list"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/tactic/choose.lean", "newPath": "src/tactic/choose.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "test/apply_fun.lean", "newPath": "test/apply_fun.lean", "changes": []}, {"oldPath": "test/choose.lean", "newPath": "test/choose.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}, {"oldPath": "test/generalizes.lean", "newPath": "test/generalizes.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": []}, {"oldPath": "test/packaged_goal.lean", "newPath": "test/packaged_goal.lean", "changes": []}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}, {"oldPath": "test/rename_var.lean", "newPath": "test/rename_var.lean", "changes": []}, {"oldPath": "test/rewrite.lean", "newPath": "test/rewrite.lean", "changes": []}, {"oldPath": "test/set.lean", "newPath": "test/set.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}, {"oldPath": "test/trunc_cases.lean", "newPath": "test/trunc_cases.lean", "changes": []}, {"oldPath": "test/wlog.lean", "newPath": "test/wlog.lean", "changes": []}, {"oldPath": "test/zify.lean", "newPath": "test/zify.lean", "changes": []}]}, {"timestamp": 1598708596, "sha": "17c4651c", "message": "feat(algebraic_geometry): structure sheaf on Spec R (#3907)\nThis defines the structure sheaf on Spec R, following Hartshorne, as a sheaf in `CommRing` on `prime_spectrum R`.\nWe still need to show at the stalk at a point is just the localization; this is another page of Hartshorne, and will come in a subsequent PR.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebraic_geometry/structure_sheaf.lean", "changes": [["add", "def", "Top", ["algebraic_geometry", "Spec"]], ["add", "def", "structure_presheaf_comp_forget", ["algebraic_geometry"]], ["add", "def", "structure_presheaf_in_CommRing", ["algebraic_geometry"]], ["add", "def", "is_fraction", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "is_fraction_prelocal", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "is_locally_fraction", ["algebraic_geometry", "structure_sheaf"]], ["add", "theorem", "is_locally_fraction_pred", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "localizations", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "sections_subring", ["algebraic_geometry", "structure_sheaf"]], ["add", "def", "structure_sheaf", ["algebraic_geometry"]], ["add", "def", "structure_sheaf_in_Type", ["algebraic_geometry"]]]}]}, {"timestamp": 1598700091, "sha": "84d47a0f", "message": "refactor(set_theory/game): make impartial a class (#3974)\n* Misc. style cleanups and code golf\n* Changed naming and namespace to adhere more closely to the naming convention\n* Changed `impartial` to be a `class`. I am aware that @semorrison explicitly requested not to make `impartial` a class in the #3855, but after working with the definition a bit I concluded that making it a class is worth it, simply because writing `impartial_add (nim_impartial _) (nim_impartial _)` gets annoying quite quickly, but also because you tend to get goal states of the form `Grundy_value _ = Grundy_value _`. By making `impartial` a class and making the game argument explicit, these goal states look like `grundy_value G = grundy_value H`, which is much nicer to work with.", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": [["del", "theorem", "equiv_iff_sum_first_loses", ["pgame"]], ["del", "theorem", "good_left_move_iff_first_wins", ["pgame"]], ["del", "theorem", "good_right_move_iff_first_wins", ["pgame"]], ["add", "theorem", "add_self", ["pgame", "impartial"]], ["add", "theorem", "equiv_iff_sum_first_loses", ["pgame", "impartial"]], ["add", "theorem", "first_loses_symm'", ["pgame", "impartial"]], ["add", "theorem", "first_loses_symm", ["pgame", "impartial"]], ["add", "theorem", "first_wins_symm'", ["pgame", "impartial"]], ["add", "theorem", "first_wins_symm", ["pgame", "impartial"]], ["add", "theorem", "good_left_move_iff_first_wins", ["pgame", "impartial"]], ["add", "theorem", "good_right_move_iff_first_wins", ["pgame", "impartial"]], ["add", "theorem", "le_zero_iff", ["pgame", "impartial"]], ["add", "theorem", "lt_zero_iff", ["pgame", "impartial"]], ["add", "theorem", "neg_equiv_self", ["pgame", "impartial"]], ["add", "theorem", "no_good_left_moves_iff_first_loses", ["pgame", "impartial"]], ["add", "theorem", "no_good_right_moves_iff_first_loses", ["pgame", "impartial"]], ["add", "theorem", "not_first_loses", ["pgame", "impartial"]], ["add", "theorem", "not_first_wins", ["pgame", "impartial"]], ["add", "theorem", "winner_cases", ["pgame", "impartial"]], ["mod", "def", "impartial", ["pgame"]], ["del", "theorem", "impartial_add", ["pgame"]], ["del", "theorem", "impartial_add_self", ["pgame"]], ["del", "theorem", "impartial_first_loses_symm'", ["pgame"]], ["del", "theorem", "impartial_first_loses_symm", ["pgame"]], ["del", "theorem", "impartial_first_wins_symm'", ["pgame"]], ["del", "theorem", "impartial_first_wins_symm", ["pgame"]], ["del", "theorem", "impartial_move_left_impartial", ["pgame"]], ["del", "theorem", "impartial_move_right_impartial", ["pgame"]], ["del", "theorem", "impartial_neg", ["pgame"]], ["del", "theorem", "impartial_neg_equiv_self", ["pgame"]], ["del", "theorem", "impartial_not_first_loses", ["pgame"]], ["del", "theorem", "impartial_not_first_wins", ["pgame"]], ["del", "theorem", "impartial_winner_cases", ["pgame"]], ["del", "theorem", "no_good_left_moves_iff_first_loses", ["pgame"]], ["del", "theorem", "no_good_right_moves_iff_first_loses", ["pgame"]], ["del", "theorem", "zero_impartial", ["pgame"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["del", "theorem", "Grundy_value_def", ["nim"]], ["del", "theorem", "Grundy_value_nim", ["nim"]], ["del", "theorem", "Sprague_Grundy", ["nim"]], ["del", "theorem", "equiv_nim_iff_Grundy_value_eq", ["nim"]], ["del", "theorem", "nim_def", ["nim"]], ["del", "theorem", "nim_equiv_iff_eq", ["nim"]], ["del", "theorem", "nim_impartial", ["nim"]], ["del", "theorem", "nim_non_zero_first_wins", ["nim"]], ["del", "theorem", "nim_sum_first_loses_iff_eq", ["nim"]], ["del", "theorem", "nim_sum_first_wins_iff_neq", ["nim"]], ["del", "theorem", "nim_wf_lemma", ["nim"]], ["del", "theorem", "nim_zero_first_loses", ["nim"]], ["del", "def", "nonmoves", ["nim"]], ["del", "theorem", "nonmoves_nonempty", ["nim"]], ["add", "theorem", "equiv_nim_grundy_value", ["pgame"]], ["add", "theorem", "equiv_nim_iff_grundy_value_eq", ["pgame"]], ["add", "theorem", "grundy_value_def", ["pgame"]], ["add", "theorem", "equiv_iff_eq", ["pgame", "nim"]], ["add", "theorem", "grundy_value", ["pgame", "nim"]], ["add", "theorem", "nim_def", ["pgame", "nim"]], ["add", "theorem", "nim_wf_lemma", ["pgame", "nim"]], ["add", "theorem", "non_zero_first_wins", ["pgame", "nim"]], ["add", "theorem", "sum_first_loses_iff_eq", ["pgame", "nim"]], ["add", "theorem", "sum_first_wins_iff_neq", ["pgame", "nim"]], ["add", "theorem", "zero_first_loses", ["pgame", "nim"]], ["add", "def", "nonmoves", ["pgame"]], ["add", "theorem", "nonmoves_nonempty", ["pgame"]]]}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": [["mod", "theorem", "star_first_wins", ["pgame"]]]}]}, {"timestamp": 1598675409, "sha": "ea177c2a", "message": "feat(analysis/convex): add correspondence between convex cones and ordered semimodules (#3931)\nThis shows that a convex cone defines an ordered semimodule and vice-versa.", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "def", "blunt", ["convex_cone"]], ["add", "def", "flat", ["convex_cone"]], ["add", "def", "pointed", ["convex_cone"]], ["add", "theorem", "pointed_iff_not_blunt", ["convex_cone"]], ["add", "theorem", "pointed_of_positive_cone", ["convex_cone"]], ["add", "def", "positive_cone", ["convex_cone"]], ["add", "def", "salient", ["convex_cone"]], ["add", "theorem", "salient_iff_not_flat", ["convex_cone"]], ["add", "theorem", "salient_of_blunt", ["convex_cone"]], ["add", "theorem", "salient_of_positive_cone", ["convex_cone"]], ["add", "def", "to_ordered_add_comm_group", ["convex_cone"]], ["add", "def", "to_ordered_semimodule", ["convex_cone"]], ["add", "def", "to_partial_order", ["convex_cone"]], ["add", "def", "to_preorder", ["convex_cone"]]]}]}, {"timestamp": 1598669916, "sha": "53275f49", "message": "chore(algebra/group_with_zero): adjust some instance priorities (#3968)\nUse priority 100 for these `extends` instances.", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}]}, {"timestamp": 1598661897, "sha": "2d3530d5", "message": "chore(scripts): update nolints.txt (#3969)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1598630869, "sha": "4ccbb514", "message": "feat(linear_algebra): eigenspaces of linear maps (#3927)\nAdd eigenspaces and eigenvalues of linear maps. Add lemma that in a\nfinite-dimensional vector space over an algebraically closed field,\neigenvalues exist. Add lemma that eigenvectors belonging to distinct\neigenvalues are linearly independent.\nThis is a rework of #3864, following Cyril's suggestion. Generalized\neigenspaces will come in a subsequent PR.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "mem_support_on_finset", ["finsupp"]], ["add", "theorem", "support_on_finset", ["finsupp"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "coe_to_list", ["multiset"]], ["add", "theorem", "mem_to_list", ["multiset"]], ["add", "theorem", "prod_eq_zero", ["multiset"]], ["add", "theorem", "to_list_zero", ["multiset"]]]}, {"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "degree_eq_one_of_irreducible", ["is_alg_closed"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "degree_eq_one_of_irreducible_of_splits", ["polynomial"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "mem_submonoid_iff", ["is_unit"]], ["add", "def", "submonoid", ["is_unit"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/eigenspace.lean", "changes": [["add", "def", "eigenspace", ["module", "End"]], ["add", "theorem", "eigenspace_div", ["module", "End"]], ["add", "theorem", "eigenspace_eval₂_polynomial_degree_1", ["module", "End"]], ["add", "theorem", "eigenvectors_linear_independent", ["module", "End"]], ["add", "theorem", "exists_eigenvalue", ["module", "End"]], ["add", "def", "has_eigenvalue", ["module", "End"]], ["add", "def", "has_eigenvector", ["module", "End"]], ["add", "theorem", "ker_eval₂_ring_hom_noncomm_unit_polynomial", ["module", "End"]], ["add", "theorem", "mem_eigenspace_iff", ["module", "End"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "not_linear_independent_of_infinite", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "total_on_finset", ["finsupp"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "algebra_map_End_apply", ["module"]], ["add", "theorem", "algebra_map_End_eq_smul_id", ["module"]], ["add", "theorem", "ker_algebra_map_End", ["module"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "linear_independent_powers_iff_eval₂", ["polynomial"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "mem_submonoid_of_factors_subset_of_units_subset", ["principal_ideal_ring"]], ["add", "theorem", "ne_zero_of_mem_factors", ["principal_ideal_ring"]], ["add", "theorem", "ring_hom_mem_submonoid_of_factors_subset_of_units_subset", ["principal_ideal_ring"]]]}]}, {"timestamp": 1598628117, "sha": "1353b7e7", "message": "chore(group_theory/perm/sign): speed up proofs (#3963)\nfixes #3958 \nbased on my completely unscientific test methods, this went from 40 seconds to ~~19~~ 17 seconds (on my laptop).\nWhat I've done here is just `squeeze_simp`, but further speedup is definitely possible. Suggestions for what to do with `simp [*, eq_inv_iff_eq] at * <|> cc` are welcome, and should speed this file up a bit more.", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}]}, {"timestamp": 1598626002, "sha": "d77798a4", "message": "doc(representation_theory/maschke): fix latex (#3965)", "changes": [{"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}]}, {"timestamp": 1598623876, "sha": "31db0bdd", "message": "feat(category_theory/limits): add kernel pairs (#3925)\nAdd a subsingleton data structure expressing that a parallel pair of morphisms is a kernel pair of a given morphism.\nAnother PR from my topos project. A pretty minimal API since I didn't need much there - I also didn't introduce anything like `has_kernel_pairs` largely because I didn't need it, but also because I don't know that it's useful for anyone, and it might conflict with ideas in the prop-limits branch.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/shapes/kernel_pair.lean", "changes": [["add", "def", "cancel_right", ["category_theory", "is_kernel_pair"]], ["add", "def", "cancel_right_of_mono", ["category_theory", "is_kernel_pair"]], ["add", "def", "comp_of_mono", ["category_theory", "is_kernel_pair"]], ["add", "def", "id_of_mono", ["category_theory", "is_kernel_pair"]], ["add", "def", "lift'", ["category_theory", "is_kernel_pair"]], ["add", "def", "to_coequalizer", ["category_theory", "is_kernel_pair"]], ["add", "structure", "is_kernel_pair", ["category_theory"]]]}]}, {"timestamp": 1598610309, "sha": "a08fb2f7", "message": "feat(tactic/congr): additions to the congr' tactic (#3936)\nThis PR gives a way to apply `ext` after `congr'`.\n`congr' 3 with x y : 2` is a new notation for `congr' 3; ext x y : 2`.\nNew tactic `rcongr` that recursively keeps applying `congr'` and `ext`.\nMove `congr'` and every tactic depending on it from `tactic/interactive` to a new file `tactic/congr`.\nThe original `tactic.interactive.congr'` is now best called as `tactic.congr'`. \nOther than the tactics `congr'` and `rcongr` no tactics have been (essentially) changed.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/big_operators/ring.lean", "newPath": "src/algebra/big_operators/ring.lean", "changes": []}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/control/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": []}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/M.lean", "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": []}, {"oldPath": "src/data/pfunctor/multivariate/basic.lean", "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": [["mod", "theorem", "ext'", ["pfunctor", "M"]]]}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/data/polynomial/integral_normalization.lean", "newPath": "src/data/polynomial/integral_normalization.lean", "changes": []}, {"oldPath": "src/data/qpf/multivariate/constructions/cofix.lean", "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": []}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": []}, {"oldPath": "src/geometry/euclidean/monge_point.lean", "newPath": "src/geometry/euclidean/monge_point.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/congr.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": null, "newPath": "test/congr.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}, {"oldPath": "test/trunc_cases.lean", "newPath": "test/trunc_cases.lean", "changes": []}]}, {"timestamp": 1598599456, "sha": "ceacf541", "message": "feat(category_theory/filtered): filtered categories, and filtered colimits in `Type` (#3960)\nThis is some work @rwbarton did last year. I've merged master, written some comments, and satisfied the linter.", "changes": [{"oldPath": null, "newPath": "src/category_theory/filtered.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "colimit_eq_iff", ["category_theory", "limits", "types", "filtered_colimit"]], ["add", "theorem", "is_colimit_eq_iff", ["category_theory", "limits", "types", "filtered_colimit"]], ["add", "theorem", "jointly_surjective", ["category_theory", "limits", "types"]], ["add", "theorem", "ι_desc_apply", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "eq", ["quot"]]]}]}, {"timestamp": 1598591920, "sha": "513f7407", "message": "feat(topology/sheaves): checking the sheaf condition under a forgetful functor (#3609)\n# Checking the sheaf condition on the underlying presheaf of types.\nIf `G : C ⥤ D` is a functor which reflects isomorphisms and preserves limits\n(we assume all limits exist in both `C` and `D`),\nthen checking the sheaf condition for a presheaf `F : presheaf C X`\nis equivalent to checking the sheaf condition for `F ⋙ G`.\nThe important special case is when\n`C` is a concrete category with a forgetful functor\nthat preserves limits and reflects isomorphisms.\nThen to check the sheaf condition it suffices\nto check it on the underlying sheaf of types.\n## References\n* https://stacks.math.columbia.edu/tag/0073", "changes": [{"oldPath": null, "newPath": "src/topology/sheaves/forget.lean", "changes": [["add", "def", "diagram_comp_preserves_limits", ["Top", "sheaf_condition"]], ["add", "def", "map_cone_fork", ["Top", "sheaf_condition"]], ["add", "def", "sheaf_condition_equiv_sheaf_condition_comp", ["Top"]]]}]}, {"timestamp": 1598584597, "sha": "7e6393f8", "message": "feat(topology/sheaves): the sheaf condition for functions satisfying a local predicate (#3906)\nFunctions satisfying a local predicate form a sheaf.\nThis sheaf has a natural map from the stalk to the original fiber, and we give conditions for this map to be injective or surjective.", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "ext", ["category_theory", "limits", "cofork"]], ["add", "def", "ext", ["category_theory", "limits", "fork"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "map_iso", ["category_theory", "limits", "pi"]], ["add", "def", "map_iso", ["category_theory", "limits", "sigma"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inclusion_right", ["set"]]]}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": [["mod", "def", "inclusion", ["topological_space", "open_nhds"]], ["mod", "theorem", "inclusion_obj", ["topological_space", "open_nhds"]], ["mod", "def", "open_nhds", ["topological_space"]]]}, {"oldPath": null, "newPath": "src/topology/sheaves/local_predicate.lean", "changes": [["add", "def", "continuous_local", ["Top"]], ["add", "def", "continuous_prelocal", ["Top"]], ["add", "structure", "local_predicate", ["Top"]], ["add", "def", "sheafify", ["Top", "prelocal_predicate"]], ["add", "structure", "prelocal_predicate", ["Top"]], ["add", "def", "sheaf_to_Top", ["Top"]], ["add", "def", "stalk_to_fiber", ["Top"]], ["add", "theorem", "stalk_to_fiber_germ", ["Top"]], ["add", "theorem", "stalk_to_fiber_injective", ["Top"]], ["add", "theorem", "stalk_to_fiber_surjective", ["Top"]], ["add", "def", "subpresheaf_continuous_prelocal_iso_presheaf_to_Top", ["Top"]], ["add", "def", "diagram_subtype", ["Top", "subpresheaf_to_Types"]], ["add", "def", "sheaf_condition", ["Top", "subpresheaf_to_Types"]], ["add", "def", "subtype", ["Top", "subpresheaf_to_Types"]], ["add", "def", "subpresheaf_to_Types", ["Top"]], ["add", "def", "subsheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": [["add", "theorem", "presheaf_to_Top_obj", ["Top"]], ["mod", "def", "presheaf_to_Types", ["Top"]], ["add", "theorem", "presheaf_to_Types_map", ["Top"]], ["add", "theorem", "presheaf_to_Types_obj", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf.lean", "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["add", "def", "iso_of_iso", ["Top", "sheaf_condition", "diagram"]], ["add", "def", "iso_of_iso", ["Top", "sheaf_condition", "fork"]], ["add", "def", "iso_of_iso", ["Top", "sheaf_condition", "pi_inters"]], ["add", "def", "iso_of_iso", ["Top", "sheaf_condition", "pi_opens"]], ["add", "def", "sheaf_condition_equiv_of_iso", ["Top"]]]}, {"oldPath": "src/topology/sheaves/sheaf_of_functions.lean", "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": [["del", "def", "forget_continuity", ["Top", "sheaf_condition"]], ["del", "def", "to_Top", ["Top", "sheaf_condition"]], ["add", "def", "sheaf_to_Type", ["Top"]], ["add", "def", "sheaf_to_Types", ["Top"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": [["add", "def", "germ", ["Top", "presheaf"]], ["add", "theorem", "germ_res", ["Top", "presheaf"]], ["add", "theorem", "germ_res_apply", ["Top", "presheaf"]], ["mod", "theorem", "stalk_functor_obj", ["Top", "presheaf"]]]}]}, {"timestamp": 1598560240, "sha": "eaaac992", "message": "feat(geometry/euclidean/basic): reflection (#3932)\nDefine the reflection of a point in an affine subspace, as a bundled\nisometry, in terms of the orthogonal projection onto that subspace,\nand prove some basic lemmas about it.", "changes": [{"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "theorem", "dist_reflection", ["euclidean_geometry"]], ["add", "theorem", "dist_reflection_eq_of_mem", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_linear", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_orthogonal_projection", ["euclidean_geometry"]], ["add", "def", "reflection", ["euclidean_geometry"]], ["add", "theorem", "reflection_apply", ["euclidean_geometry"]], ["add", "theorem", "reflection_eq_iff_orthogonal_projection_eq", ["euclidean_geometry"]], ["add", "theorem", "reflection_eq_self_iff", ["euclidean_geometry"]], ["add", "theorem", "reflection_involutive", ["euclidean_geometry"]], ["add", "theorem", "reflection_reflection", ["euclidean_geometry"]], ["add", "theorem", "reflection_symm", ["euclidean_geometry"]]]}]}, {"timestamp": 1598553086, "sha": "359261ef", "message": "feat(data/nat): commutativity of bitwise operations (#3956)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "bitwise_comm", ["nat"]], ["add", "theorem", "land_comm", ["nat"]], ["add", "theorem", "lor_comm", ["nat"]], ["add", "theorem", "lxor_comm", ["nat"]]]}]}, {"timestamp": 1598539482, "sha": "6b556cf1", "message": "feat(combinatorics/adjacency_matrix): defines adjacency matrices of simple graphs (#3672)\ndefines the adjacency matrix of a simple graph\nproves lemmas about adjacency matrix that will form the bulk of the proof of the friendship theorem (freek 83)", "changes": [{"oldPath": null, "newPath": "src/combinatorics/adj_matrix.lean", "changes": [["add", "def", "adj_matrix", ["simple_graph"]], ["add", "theorem", "adj_matrix_apply", ["simple_graph"]], ["add", "theorem", "adj_matrix_dot_product", ["simple_graph"]], ["add", "theorem", "adj_matrix_mul_apply", ["simple_graph"]], ["add", "theorem", "adj_matrix_mul_self_apply_self", ["simple_graph"]], ["add", "theorem", "adj_matrix_mul_vec_apply", ["simple_graph"]], ["add", "theorem", "adj_matrix_mul_vec_const_apply", ["simple_graph"]], ["add", "theorem", "adj_matrix_mul_vec_const_apply_of_regular", ["simple_graph"]], ["add", "theorem", "adj_matrix_vec_mul_apply", ["simple_graph"]], ["add", "theorem", "dot_product_adj_matrix", ["simple_graph"]], ["add", "theorem", "mul_adj_matrix_apply", ["simple_graph"]], ["add", "theorem", "trace_adj_matrix", ["simple_graph"]], ["add", "theorem", "transpose_adj_matrix", ["simple_graph"]]]}]}, {"timestamp": 1598509531, "sha": "ea9bf31e", "message": "refactor(analysis/normed_space/real_inner_product,geometry/euclidean): orthogonal projection hypotheses (#3952)\nAs advised by Patrick in #3932, define `orthogonal_projection` (for\nboth real inner product spaces and Euclidean affine spaces) without\ntaking hypotheses of the subspace being nonempty and complete,\ndefaulting to the identity map if those conditions are not satisfied,\nso making `orthogonal_projection` more convenient to use with those\nproperties only being needed on lemmas but not simply to refer to the\northogonal projection at all.\nThe hypotheses are removed from lemmas that don't need them because\nthey are still true with the identity map. Some `nonempty` hypotheses\nare also removed where they follow from another hypothesis that gives\na point or a nonempty set of points in the subspace.\nThe unbundled `orthogonal_projection_fn` that's used only to prove\nproperties needed to define a bundled linear or affine map still takes\nthe original hypotheses, then a bundled map taking those hypotheses is\ndefined under a new name, then that map is used to define plain\n`orthogonal_projection` which does not take any of those hypotheses\nand is the version expected to be used in all lemmas after it has been\ndefined.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["mod", "def", "orthogonal_projection", []], ["add", "theorem", "orthogonal_projection_def", []], ["mod", "theorem", "orthogonal_projection_inner_eq_zero", []], ["add", "def", "orthogonal_projection_of_complete", []]]}, {"oldPath": "src/geometry/euclidean/basic.lean", "newPath": "src/geometry/euclidean/basic.lean", "changes": [["mod", "def", "orthogonal_projection", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_def", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_mem_orthogonal", ["euclidean_geometry"]], ["add", "def", "orthogonal_projection_of_nonempty_of_complete", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_of_nonempty_of_complete_eq", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["mod", "theorem", "vsub_orthogonal_projection_mem_direction_orthogonal", ["euclidean_geometry"]]]}, {"oldPath": "src/geometry/euclidean/circumcenter.lean", "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["mod", "theorem", "dist_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["mod", "theorem", "dist_set_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["mod", "theorem", "exists_unique_dist_eq_of_insert", ["euclidean_geometry"]]]}]}, {"timestamp": 1598489266, "sha": "5627aed7", "message": "chore(scripts): update nolints.txt (#3954)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1598473496, "sha": "c1478948", "message": "feat(data/fin): flesh out API for fin (#3769)\nProvide more API for `fin n`. Lemma names chosen to match equivalent lemmas in `nat`. Does not develop docstrings for the lemmas.\nNew lemmas:\niff lemmas for comparison\n`ne_iff_vne`\n`eq_mk_iff_coe_eq`\n`succ_le_succ_iff`\n`succ_lt_succ_iff`\nlemmas about explicit numerals\n`val_zero'`\n`mk_zero`\n`mk_one`\n`mk_bit0`\n`mk_bit1`\n`cast_succ_zero`\n`succ_zero_eq_one`\n`zero_ne_one`\n`pred_one`\nlemmas about order\n`zero_le`\n`succ_pos`\n`mk_succ_pos`\n`one_pos`\n`one_lt_succ_succ`\n`succ_succ_ne_one`\n`pred_mk_succ`\n`cast_succ_lt_last`\n`cast_succ_lt_succ`\n`lt_succ`\n`last_pos`\n`le_coe_last`\ncoe lemmas:\n`coe_eq_cast_succ`\n`coe_succ_eq_succ`\n`coe_nat_eq_last`\nsucc_above API:\n`succ_above_below`\n`succ_above_zero`\n`succ_above_last`\n`succ_above_above`\n`succ_above_pos`\naddition API:\n`add_one_pos`\n`pred_add_one`\nCo-authored by: Yury Kudryashov urkud@ya.ru", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "add_one_pos", ["fin"]], ["add", "theorem", "cast_succ_lt_last", ["fin"]], ["add", "theorem", "cast_succ_lt_succ", ["fin"]], ["del", "theorem", "cast_succ_ne_last", ["fin"]], ["add", "theorem", "cast_succ_zero", ["fin"]], ["add", "theorem", "coe_eq_cast_succ", ["fin"]], ["add", "theorem", "coe_nat_eq_last", ["fin"]], ["add", "theorem", "coe_succ_eq_succ", ["fin"]], ["add", "theorem", "eq_mk_iff_coe_eq", ["fin"]], ["add", "theorem", "last_pos", ["fin"]], ["add", "theorem", "le_coe_last", ["fin"]], ["add", "theorem", "lt_succ", ["fin"]], ["add", "theorem", "mk_bit0", ["fin"]], ["add", "theorem", "mk_bit1", ["fin"]], ["add", "theorem", "mk_one", ["fin"]], ["add", "theorem", "mk_succ_pos", ["fin"]], ["add", "theorem", "mk_zero", ["fin"]], ["add", "theorem", "ne_iff_vne", ["fin"]], ["add", "theorem", "one_lt_succ_succ", ["fin"]], ["add", "theorem", "one_pos", ["fin"]], ["add", "theorem", "pred_add_one", ["fin"]], ["add", "theorem", "pred_mk_succ", ["fin"]], ["add", "theorem", "pred_one", ["fin"]], ["add", "theorem", "succ_above_above", ["fin"]], ["add", "theorem", "succ_above_below", ["fin"]], ["add", "theorem", "succ_above_last", ["fin"]], ["add", "theorem", "succ_above_pos", ["fin"]], ["add", "theorem", "succ_above_zero", ["fin"]], ["add", "theorem", "succ_le_succ_iff", ["fin"]], ["add", "theorem", "succ_lt_succ_iff", ["fin"]], ["add", "theorem", "succ_pos", ["fin"]], ["add", "theorem", "succ_succ_ne_one", ["fin"]], ["add", "theorem", "succ_zero_eq_one", ["fin"]], ["add", "theorem", "val_zero'", ["fin"]], ["add", "theorem", "zero_ne_one", ["fin"]], ["del", "theorem", "zero_val", ["fin"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "cons_val_zero'", ["matrix"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1598468144, "sha": "26dfea59", "message": "feat(algebra/big_operators): sum of two products (#3944)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "mul_prod_diff_singleton", ["finset"]], ["add", "theorem", "prod_add_prod_eq", ["finset"]], ["add", "theorem", "prod_inter_mul_prod_diff", ["finset"]]]}, {"oldPath": "src/algebra/big_operators/order.lean", "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "prod_add_prod_le'", ["finset"]], ["add", "theorem", "prod_add_prod_le", ["finset"]]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["add", "theorem", "zero_pow_eq_zero", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_le_mul_left'", ["canonically_ordered_semiring"]], ["add", "theorem", "mul_le_mul_right'", ["canonically_ordered_semiring"]]]}]}, {"timestamp": 1598468142, "sha": "64aad5b8", "message": "feat(category_theory/adjunction): uniqueness of adjunctions (#3940)\nCo-authored by @thjread", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/opposites.lean", "newPath": "src/category_theory/adjunction/opposites.lean", "changes": [["add", "def", "left_adjoint_uniq", ["adjunction"]], ["add", "def", "left_adjoints_coyoneda_equiv", ["adjunction"]], ["add", "def", "right_adjoint_uniq", ["adjunction"]]]}]}, {"timestamp": 1598468140, "sha": "080746fd", "message": "feat(algebra/category/*/limits): don't rely on definitions (#3873)\nThis is a second attempt (which works **much** better) at #3860, after @TwoFX explained how to do it properly.\nThis PR takes the constructions of limits in the concrete categories `(Add)(Comm)[Mon|Group]`, `(Comm)(Semi)Ring`, `Module R`, and `Algebra R`, and makes sure that they never rely on the actual definitions of limits in \"prior\" categories.\nOf course, at this stage the `has_limit` typeclasses still contain data, so it's hard to judge whether we're really not relying on the definitions. I've marked all the `has_limits` instances in these files as irreducible, but the real proof is just that this same code is working over on the `prop_limits` branch.", "changes": [{"oldPath": "src/algebra/category/Algebra/limits.lean", "newPath": "src/algebra/category/Algebra/limits.lean", "changes": [["add", "def", "forget₂_Module_preserves_limits_aux", ["Algebra"]], ["add", "def", "forget₂_Ring_preserves_limits_aux", ["Algebra"]], ["del", "def", "limit", ["Algebra", "has_limits"]], ["add", "def", "limit_cone", ["Algebra", "has_limits"]], ["add", "def", "limit_cone_is_limit", ["Algebra", "has_limits"]], ["del", "def", "limit_is_limit", ["Algebra", "has_limits"]]]}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["add", "def", "forget₂_CommSemiRing_preserves_limits_aux", ["CommRing"]], ["add", "def", "limit_cone", ["CommRing"]], ["add", "def", "limit_cone_is_limit", ["CommRing"]], ["add", "def", "limit_cone", ["CommSemiRing"]], ["add", "def", "limit_cone_is_limit", ["CommSemiRing"]], ["add", "def", "limit_cone", ["Ring"]], ["add", "def", "limit_cone_is_limit", ["Ring"]], ["del", "def", "limit", ["SemiRing", "has_limits"]], ["add", "def", "limit_cone", ["SemiRing", "has_limits"]], ["add", "def", "limit_cone_is_limit", ["SemiRing", "has_limits"]], ["del", "def", "limit_is_limit", ["SemiRing", "has_limits"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": [["add", "theorem", "lift_π_apply", ["AddCommGroup"]], ["add", "def", "limit_cone", ["CommGroup"]], ["add", "def", "limit_cone_is_limit", ["CommGroup"]], ["add", "def", "limit_cone", ["Group"]], ["add", "def", "limit_cone_is_limit", ["Group"]]]}, {"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": [["add", "def", "forget₂_AddCommGroup_preserves_limits_aux", ["Module"]], ["del", "def", "limit", ["Module", "has_limits"]], ["add", "def", "limit_cone", ["Module", "has_limits"]], ["add", "def", "limit_cone_is_limit", ["Module", "has_limits"]], ["del", "def", "limit_is_limit", ["Module", "has_limits"]]]}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": [["add", "def", "limit_cone", ["CommMon"]], ["add", "def", "limit_cone_is_limit", ["CommMon"]], ["del", "def", "limit", ["Mon", "has_limits"]], ["add", "def", "limit_cone", ["Mon", "has_limits"]], ["add", "def", "limit_cone_is_limit", ["Mon", "has_limits"]], ["del", "def", "limit_is_limit", ["Mon", "has_limits"]]]}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": [["del", "def", "colimit", ["Top"]], ["add", "def", "colimit_cocone", ["Top"]], ["add", "def", "colimit_cocone_is_colimit", ["Top"]], ["del", "def", "colimit_is_colimit", ["Top"]], ["del", "def", "limit", ["Top"]], ["add", "def", "limit_cone", ["Top"]], ["add", "def", "limit_cone_is_limit", ["Top"]], ["del", "def", "limit_is_limit", ["Top"]]]}]}, {"timestamp": 1598464410, "sha": "2d9ab611", "message": "feat(ring_theory/ideal/basic): R/I is an ID iff I is prime (#3951)\n`is_integral_domain_iff_prime (I : ideal α) : is_integral_domain I.quotient ↔ I.is_prime`", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "is_integral_domain_iff_prime", ["ideal", "quotient"]]]}]}, {"timestamp": 1598458807, "sha": "2b6924d5", "message": "feat(topology/algebra/ordered): conditions for a strictly monotone function to be a homeomorphism (#3843)\nIf a strictly monotone function between linear orders is surjective, it is a homeomorphism.\nIf a strictly monotone function between conditionally complete linear orders is continuous, and tends to `+∞` at `+∞` and to `-∞` at `-∞`, then it is a homeomorphism.\n[Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Order.20topology)\nCo-authored by: Yury Kudryashov ", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ici_bot", ["set"]], ["add", "theorem", "Ici_singleton_of_top", ["set"]], ["add", "theorem", "Ici_top", ["set"]], ["add", "theorem", "Iic_singleton_of_bot", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/intervals/surj_on.lean", "changes": [["add", "theorem", "surj_on_Icc_of_monotone_surjective", []], ["add", "theorem", "surj_on_Ici_of_monotone_surjective", []], ["add", "theorem", "surj_on_Ico_of_monotone_surjective", []], ["add", "theorem", "surj_on_Iic_of_monotone_surjective", []], ["add", "theorem", "surj_on_Iio_of_monotone_surjective", []], ["add", "theorem", "surj_on_Ioc_of_monotone_surjective", []], ["add", "theorem", "surj_on_Ioi_of_monotone_surjective", []], ["add", "theorem", "surj_on_Ioo_of_monotone_surjective", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "bot_preimage_bot", ["strict_mono"]], ["add", "theorem", "top_preimage_top", ["strict_mono"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_preimage_bot'", ["strict_mono"]], ["add", "theorem", "top_preimage_top'", ["strict_mono"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "coe_homeomorph_of_strict_mono_continuous", []], ["add", "theorem", "coe_homeomorph_of_strict_mono_surjective", []], ["add", "theorem", "continuous_at_of_strict_mono_surjective", []], ["add", "theorem", "continuous_inv_of_strict_mono_equiv", []], ["add", "theorem", "continuous_left_of_strict_mono_surjective", []], ["add", "theorem", "continuous_of_strict_mono_surjective", []], ["add", "theorem", "continuous_right_of_strict_mono_surjective", []], ["add", "theorem", "surjective_of_continuous'", []], ["add", "theorem", "surjective_of_continuous", []]]}]}, {"timestamp": 1598453152, "sha": "f4f0854c", "message": "feat(ring_theory/bundled_subring): add bundled subrings (#3886)", "changes": [{"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": null, "newPath": "src/deprecated/subring.lean", "changes": [["add", "theorem", "coe_subtype", ["is_subring"]], ["add", "def", "subtype", ["is_subring"]], ["add", "theorem", "is_subring_Union_of_directed", []], ["add", "def", "closure", ["ring"]], ["add", "theorem", "closure_mono", ["ring"]], ["add", "theorem", "closure_subset", ["ring"]], ["add", "theorem", "closure_subset_iff", ["ring"]], ["add", "theorem", "exists_list_of_mem_closure", ["ring"]], ["add", "theorem", "image_closure", ["ring"]], ["add", "theorem", "mem_closure", ["ring"]], ["add", "theorem", "subset_closure", ["ring"]], ["add", "def", "cod_restrict", ["ring_hom"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "def", "cod_restrict", ["monoid_hom"]], ["add", "theorem", "coe_supr_of_directed", ["subgroup"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["del", "theorem", "coe_subtype", ["is_subring"]], ["del", "def", "subtype", ["is_subring"]], ["del", "theorem", "is_subring_Union_of_directed", []], ["del", "def", "closure", ["ring"]], ["del", "theorem", "closure_mono", ["ring"]], ["del", "theorem", "closure_subset", ["ring"]], ["del", "theorem", "closure_subset_iff", ["ring"]], ["del", "theorem", "exists_list_of_mem_closure", ["ring"]], ["del", "theorem", "image_closure", ["ring"]], ["del", "theorem", "mem_closure", ["ring"]], ["del", "theorem", "subset_closure", ["ring"]], ["add", "def", "subring_congr", ["ring_equiv"]], ["add", "theorem", "closure_preimage_le", ["ring_hom"]], ["add", "def", "cod_restrict'", ["ring_hom"]], ["del", "def", "cod_restrict", ["ring_hom"]], ["add", "theorem", "coe_range", ["ring_hom"]], ["add", "theorem", "coe_range_restrict", ["ring_hom"]], ["add", "def", "eq_locus", ["ring_hom"]], ["add", "theorem", "eq_of_eq_on_set_dense", ["ring_hom"]], ["add", "theorem", "eq_of_eq_on_set_top", ["ring_hom"]], ["add", "theorem", "eq_on_set_closure", ["ring_hom"]], ["add", "theorem", "map_closure", ["ring_hom"]], ["add", "theorem", "map_range", ["ring_hom"]], ["add", "theorem", "mem_range", ["ring_hom"]], ["add", "def", "range", ["ring_hom"]], ["add", "def", "range_restrict", ["ring_hom"]], ["add", "theorem", "range_top_iff_surjective", ["ring_hom"]], ["add", "theorem", "range_top_of_surjective", ["ring_hom"]], ["add", "def", "restrict", ["ring_hom"]], ["add", "theorem", "restrict_apply", ["ring_hom"]], ["add", "theorem", "Inf_to_add_subgroup", ["subring"]], ["add", "theorem", "Inf_to_submonoid", ["subring"]], ["add", "theorem", "add_mem", ["subring"]], ["add", "def", "closure", ["subring"]], ["add", "theorem", "closure_Union", ["subring"]], ["add", "theorem", "closure_empty", ["subring"]], ["add", "theorem", "closure_eq", ["subring"]], ["add", "theorem", "closure_eq_of_le", ["subring"]], ["add", "theorem", "closure_induction", ["subring"]], ["add", "theorem", "closure_le", ["subring"]], ["add", "theorem", "closure_mono", ["subring"]], ["add", "theorem", "closure_preimage_le", ["subring"]], ["add", "theorem", "closure_sUnion", ["subring"]], ["add", "theorem", "closure_union", ["subring"]], ["add", "theorem", "closure_univ", ["subring"]], ["add", "theorem", "coe_Inf", ["subring"]], ["add", "theorem", "coe_Sup_of_directed_on", ["subring"]], ["add", "theorem", "coe_add", ["subring"]], ["add", "theorem", "coe_bot", ["subring"]], ["add", "theorem", "coe_coe", ["subring"]], ["add", "theorem", "coe_comap", ["subring"]], ["add", "theorem", "coe_inf", ["subring"]], ["add", "theorem", "coe_int_mem", ["subring"]], ["add", "theorem", "coe_map", ["subring"]], ["add", "theorem", "coe_mk'", ["subring"]], ["add", "theorem", "coe_mul", ["subring"]], ["add", "theorem", "coe_neg", ["subring"]], ["add", "theorem", "coe_one", ["subring"]], ["add", "theorem", "coe_prod", ["subring"]], ["add", "theorem", "coe_ssubset_coe", ["subring"]], ["add", "theorem", "coe_subset_coe", ["subring"]], ["add", "theorem", "coe_subtype", ["subring"]], ["add", "theorem", "coe_supr_of_directed", ["subring"]], ["add", "theorem", "coe_to_add_subgroup", ["subring"]], ["add", "theorem", "coe_to_submonoid", ["subring"]], ["add", "theorem", "coe_top", ["subring"]], ["add", "theorem", "coe_zero", ["subring"]], ["add", "def", "comap", ["subring"]], ["add", "theorem", "comap_comap", ["subring"]], ["add", "theorem", "comap_inf", ["subring"]], ["add", "theorem", "comap_infi", ["subring"]], ["add", "theorem", "comap_top", ["subring"]], ["add", "theorem", "exists_list_of_mem_closure", ["subring"]], ["add", "theorem", "ext'", ["subring"]], ["add", "theorem", "ext", ["subring"]], ["add", "theorem", "gc_map_comap", ["subring"]], ["add", "theorem", "gsmul_mem", ["subring"]], ["add", "def", "inclusion", ["subring"]], ["add", "theorem", "le_def", ["subring"]], ["add", "theorem", "list_prod_mem", ["subring"]], ["add", "theorem", "list_sum_mem", ["subring"]], ["add", "def", "map", ["subring"]], ["add", "theorem", "map_bot", ["subring"]], ["add", "theorem", "map_le_iff_le_comap", ["subring"]], ["add", "theorem", "map_map", ["subring"]], ["add", "theorem", "map_sup", ["subring"]], ["add", "theorem", "map_supr", ["subring"]], ["add", "theorem", "mem_Inf", ["subring"]], ["add", "theorem", "mem_Sup_of_directed_on", ["subring"]], ["add", "theorem", "mem_bot", ["subring"]], ["add", "theorem", "mem_closure", ["subring"]], ["add", "theorem", "mem_closure_iff", ["subring"]], ["add", "theorem", "mem_coe", ["subring"]], ["add", "theorem", "mem_comap", ["subring"]], ["add", "theorem", "mem_inf", ["subring"]], ["add", "theorem", "mem_map", ["subring"]], ["add", "theorem", "mem_mk'", ["subring"]], ["add", "theorem", "mem_prod", ["subring"]], ["add", "theorem", "mem_supr_of_directed", ["subring"]], ["add", "theorem", "mem_to_add_subgroup", ["subring"]], ["add", "theorem", "mem_to_submonoid", ["subring"]], ["add", "theorem", "mem_top", ["subring"]], ["add", "theorem", "mk'_to_add_subgroup", ["subring"]], ["add", "theorem", "mk'_to_submonoid", ["subring"]], ["add", "theorem", "mul_mem", ["subring"]], ["add", "theorem", "multiset_prod_mem", ["subring"]], ["add", "theorem", "multiset_sum_mem", ["subring"]], ["add", "theorem", "neg_mem", ["subring"]], ["add", "theorem", "one_mem", ["subring"]], ["add", "theorem", "pow_mem", ["subring"]], ["add", "def", "prod", ["subring"]], ["add", "theorem", "prod_bot_sup_bot_prod", ["subring"]], ["add", "def", "prod_equiv", ["subring"]], ["add", "theorem", "prod_mem", ["subring"]], ["add", "theorem", "prod_mono", ["subring"]], ["add", "theorem", "prod_mono_left", ["subring"]], ["add", "theorem", "prod_mono_right", ["subring"]], ["add", "theorem", "prod_top", ["subring"]], ["add", "theorem", "range_fst", ["subring"]], ["add", "theorem", "range_snd", ["subring"]], ["add", "theorem", "range_subtype", ["subring"]], ["add", "theorem", "subset_closure", ["subring"]], ["add", "def", "subset_comm_ring", ["subring"]], ["add", "def", "subtype", ["subring"]], ["add", "theorem", "sum_mem", ["subring"]], ["add", "def", "to_comm_ring", ["subring"]], ["add", "def", "to_submonoid", ["subring"]], ["add", "theorem", "top_prod", ["subring"]], ["add", "theorem", "top_prod_top", ["subring"]], ["add", "theorem", "zero_mem", ["subring"]], ["add", "structure", "subring", []], ["add", "def", "to_subring", ["subsemiring"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1598453150, "sha": "0d67a02d", "message": "feat(ring_theory/noetherian): maximal among set iff Noetherian (#3846)\nMain theorem is `set_has_maximal_iff_noetherian,` which relates well foundedness of `<` to being noetherian.\nMost notably a result of\n`well_founded.well_founded_iff_has_max'` provides the fact that on a partial ordering, `well_founded >` is equivalent to each nonempty set having a maximal element.\n`well_founded.well_founded_iff_has_min` provides an analogous fact for `well_founded <`.\nSome other miscellaneous lemmas are as follows\n`localization_map.integral_domain_of_local_at_prime` is the localization of an integral domain at a prime's complement is an integral domain\n`ideal.mul_eq_bot` is the fact that in an integral domain if I*J = 0, then at least one is 0.\n`submodule.nonzero_mem_of_gt_bot` is that if ⊥ < J, then J has a nonzero member.\n`lt_add_iff_not_mem` is that b is not a member of J iff J < J+(b).\n`bot_prime` states that 0 is a prime ideal of an integral domain.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "lt_add_iff_not_mem", ["submodule"]], ["add", "theorem", "nonzero_mem_of_bot_lt", ["submodule"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": [["add", "theorem", "eq_iff_not_lt_of_le", ["well_founded"]], ["add", "theorem", "well_founded_iff_has_max'", ["well_founded"]], ["add", "theorem", "well_founded_iff_has_min'", ["well_founded"]], ["add", "theorem", "well_founded_iff_has_min", ["well_founded"]]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "bot_prime", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "mul_eq_bot", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "set_has_maximal_iff_noetherian", []]]}]}, {"timestamp": 1598447560, "sha": "187bfa52", "message": "feat(set/basic): additions to prod (#3943)\nAlso add one lemma about `Inter`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "insert_prod", ["set"]], ["add", "theorem", "mk_preimage_prod_left_eq_empty", ["set"]], ["add", "theorem", "mk_preimage_prod_left_eq_if", ["set"]], ["add", "theorem", "mk_preimage_prod_right_eq_empty", ["set"]], ["add", "theorem", "mk_preimage_prod_right_eq_if", ["set"]], ["mod", "theorem", "prod_eq_empty_iff", ["set"]], ["mod", "theorem", "prod_insert", ["set"]], ["add", "theorem", "prod_univ", ["set"]], ["add", "theorem", "univ_prod", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_set_of", ["set"]]]}]}, {"timestamp": 1598447558, "sha": "fb6046ed", "message": "feat(*/category/*): add coe_of simp lemmas (#3938)", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["add", "theorem", "coe_of", ["Algebra"]], ["del", "theorem", "of_apply", ["Algebra"]]]}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["add", "theorem", "coe_of", ["CommRing"]], ["add", "theorem", "coe_of", ["CommSemiRing"]], ["add", "theorem", "coe_of", ["Ring"]], ["add", "theorem", "coe_of", ["SemiRing"]]]}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["add", "theorem", "coe_of", ["CommGroup"]], ["add", "theorem", "coe_of", ["Group"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "theorem", "coe_of", ["Module"]], ["del", "theorem", "of_apply", ["Module"]]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["add", "theorem", "coe_of", ["CommMon"]], ["add", "theorem", "coe_of", ["Mon"]]]}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": [["add", "theorem", "coe_of", ["Meas"]]]}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": [["add", "theorem", "coe_of", ["Top"]]]}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": [["add", "theorem", "coe_of", ["TopCommRing"]]]}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": [["add", "theorem", "coe_of", ["CpltSepUniformSpace"]], ["add", "theorem", "coe_of", ["UniformSpace"]]]}]}, {"timestamp": 1598441941, "sha": "206673e7", "message": "chore(*): trivial golfing using dec_trivial tactic (#3949)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1598437975, "sha": "dd742dc8", "message": "feat(finsupp/basic): add hom_ext (#3941)\nTwo R-module homs from finsupp X R which agree on `single x 1` agree everywhere.\n```\nlemma hom_ext [semiring β] [add_comm_monoid γ] [semimodule β γ] (φ ψ : (α →₀ β) →ₗ[β] γ)\n (h : ∀ a : α, φ (single a 1) = ψ (single a 1)) : φ = ψ\n```", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": [["add", "theorem", "hom_ext", ["finsupp"]], ["add", "theorem", "smul_single_one", ["finsupp"]]]}]}, {"timestamp": 1598435787, "sha": "a31096de", "message": "fix(set_theory/game): remove stray #lint introduced in #3939 (#3948)", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": []}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": []}]}, {"timestamp": 1598402678, "sha": "da475484", "message": "chore(scripts): update nolints.txt (#3945)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1598385163, "sha": "666a2e2e", "message": "feat(algebra/group/with_one): more API for with_zero (#3716)", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "theorem", "some_eq_coe", ["with_one"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "coe_le_coe", ["with_zero"]], ["add", "theorem", "coe_lt_coe", ["with_zero"]], ["add", "theorem", "lt_of_mul_lt_mul_left", ["with_zero"]], ["add", "theorem", "mul_le_mul_left", ["with_zero"]], ["add", "theorem", "zero_le", ["with_zero"]], ["add", "theorem", "zero_lt_coe", ["with_zero"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1598374518, "sha": "44787193", "message": "feat(data/padic/padic_integers): homs to zmod(p ^ n) (#3882)\nThis is the next PR in a series of PRs on the padic numbers/integers that should culminate in a proof that Z_p is isomorphic to the ring of Witt vectors of zmod p.\nIn this PR we build ring homs from Z_p to zmod (p ^ n).", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "to_nat_zero_of_neg", ["int"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["add", "theorem", "appr_lt", ["padic_int"]], ["add", "theorem", "appr_spec", ["padic_int"]], ["add", "theorem", "coe_coe_int", ["padic_int"]], ["add", "theorem", "coe_int_eq", ["padic_int"]], ["add", "theorem", "exists_mem_range", ["padic_int"]], ["add", "theorem", "is_unit_denom", ["padic_int"]], ["add", "theorem", "ker_to_zmod", ["padic_int"]], ["add", "theorem", "ker_to_zmod_pow", ["padic_int"]], ["mod", "theorem", "maximal_ideal_eq_span_p", ["padic_int"]], ["add", "def", "mod_part", ["padic_int"]], ["add", "theorem", "mod_part_lt_p", ["padic_int"]], ["add", "theorem", "mod_part_nonneg", ["padic_int"]], ["add", "theorem", "norm_int_lt_one_iff_dvd", ["padic_int"]], ["add", "theorem", "norm_lt_one_iff_dvd", ["padic_int"]], ["add", "theorem", "norm_sub_mod_part", ["padic_int"]], ["add", "theorem", "norm_sub_mod_part_aux", ["padic_int"]], ["add", "theorem", "pow_p_dvd_int_iff", ["padic_int"]], ["add", "theorem", "sub_zmod_repr_mem", ["padic_int"]], ["add", "def", "to_zmod", ["padic_int"]], ["add", "def", "to_zmod_hom", ["padic_int"]], ["add", "def", "to_zmod_pow", ["padic_int"]], ["add", "theorem", "to_zmod_spec", ["padic_int"]], ["add", "theorem", "valuation_p_pow_mul", ["padic_int"]], ["add", "theorem", "zmod_congr_of_sub_mem_max_ideal", ["padic_int"]], ["add", "theorem", "zmod_congr_of_sub_mem_span", ["padic_int"]], ["add", "theorem", "zmod_congr_of_sub_mem_span_aux", ["padic_int"]], ["add", "def", "zmod_repr", ["padic_int"]], ["add", "theorem", "zmod_repr_lt_p", ["padic_int"]], ["add", "theorem", "zmod_repr_spec", ["padic_int"]], ["add", "theorem", "padic_norm_z_of_int", ["padic_norm_z"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["add", "theorem", "dvd_iff_norm_le", ["padic_norm"]], ["del", "theorem", "le_of_dvd", ["padic_norm"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["add", "theorem", "norm_int_le_one", ["padic_norm_e"]], ["add", "theorem", "norm_int_lt_one_iff_dvd", ["padic_norm_e"]], ["add", "theorem", "norm_int_lt_pow_iff_dvd", ["padic_norm_e"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "coe_to_nat", ["zmod"]]]}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["add", "theorem", "unit_mul_pow_congr_pow", ["discrete_valuation_ring"]], ["add", "theorem", "unit_mul_pow_congr_unit", ["discrete_valuation_ring"]]]}]}, {"timestamp": 1598366202, "sha": "b03ce616", "message": "chore(set_theory/game): various cleanup and code golf (#3939)", "changes": [{"oldPath": "src/set_theory/game/impartial.lean", "newPath": "src/set_theory/game/impartial.lean", "changes": [["add", "theorem", "impartial_not_first_loses", ["pgame"]], ["add", "theorem", "impartial_not_first_wins", ["pgame"]]]}, {"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["mod", "theorem", "nim_def", ["nim"]], ["mod", "theorem", "nim_zero_first_loses", ["nim"]]]}, {"oldPath": "src/set_theory/game/winner.lean", "newPath": "src/set_theory/game/winner.lean", "changes": [["add", "theorem", "not_first_loses_of_first_wins", ["pgame"]], ["add", "theorem", "not_first_wins_of_first_loses", ["pgame"]]]}]}, {"timestamp": 1598366200, "sha": "878c44f1", "message": "feat(category_theory/adjunction): restrict adjunction to full subcategory (#3924)\nBlocked by #3923.", "changes": [{"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": [["add", "def", "restrict_fully_faithful", ["category_theory", "adjunction"]]]}]}, {"timestamp": 1598360670, "sha": "a5a98587", "message": "feat(data/sigma/basic): cleanup (#3933)\nUse namespaces\nAdd `sigma.ext_iff`, `psigma.ext` and `sigma.ext_iff`", "changes": [{"oldPath": "src/data/pfunctor/multivariate/basic.lean", "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["mod", "def", "elim", ["psigma"]], ["mod", "theorem", "elim_val", ["psigma"]], ["add", "theorem", "ext", ["psigma"]], ["add", "theorem", "ext_iff", ["psigma"]], ["mod", "def", "map", ["psigma"]], ["mod", "theorem", "inj_iff", ["psigma", "mk"]], ["mod", "theorem", "eta", ["sigma"]], ["del", "theorem", "exists", ["sigma"]], ["mod", "theorem", "ext", ["sigma"]], ["add", "theorem", "ext_iff", ["sigma"]], ["del", "theorem", "forall", ["sigma"]], ["mod", "def", "map", ["sigma"]], ["mod", "theorem", "inj_iff", ["sigma", "mk"]], ["add", "theorem", "«exists»", ["sigma"]], ["add", "theorem", "«forall»", ["sigma"]]]}]}, {"timestamp": 1598357439, "sha": "34093880", "message": "doc(ring_theory/*): add some module docstrings (#3880)", "changes": [{"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["mod", "theorem", "coe_lift_hom", ["free_comm_ring"]], ["mod", "def", "lift", ["free_comm_ring"]], ["mod", "theorem", "lift_comp_of", ["free_comm_ring"]], ["mod", "def", "lift_hom", ["free_comm_ring"]], ["mod", "theorem", "lift_hom_comp_of", ["free_comm_ring"]]]}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": [["mod", "def", "lift", ["free_ring"]], ["mod", "theorem", "lift_comp_of", ["free_ring"]], ["mod", "def", "lift_hom", ["free_ring"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}]}, {"timestamp": 1598311519, "sha": "d4d33dea", "message": "feat(combinatorics): define simple graphs (#3458)\nadds basic definition of `simple_graph`s", "changes": [{"oldPath": null, "newPath": "src/combinatorics/simple_graph.lean", "changes": [["add", "def", "complete_graph", []], ["add", "theorem", "adj_iff_exists_edge", ["simple_graph"]], ["add", "theorem", "card_neighbor_set_eq_degree", ["simple_graph"]], ["add", "theorem", "complete_graph_degree", ["simple_graph"]], ["add", "theorem", "complete_graph_is_regular", ["simple_graph"]], ["add", "def", "degree", ["simple_graph"]], ["add", "def", "edge_finset", ["simple_graph"]], ["add", "theorem", "edge_other_ne", ["simple_graph"]], ["add", "def", "edge_set", ["simple_graph"]], ["add", "theorem", "edge_symm", ["simple_graph"]], ["add", "theorem", "irrefl", ["simple_graph"]], ["add", "def", "is_regular_of_degree", ["simple_graph"]], ["add", "def", "locally_finite", ["simple_graph"]], ["add", "theorem", "mem_edge_finset", ["simple_graph"]], ["add", "theorem", "mem_edge_set", ["simple_graph"]], ["add", "theorem", "mem_neighbor_finset", ["simple_graph"]], ["add", "theorem", "mem_neighbor_set", ["simple_graph"]], ["add", "theorem", "ne_of_adj", ["simple_graph"]], ["add", "def", "neighbor_finset", ["simple_graph"]], ["add", "theorem", "neighbor_finset_eq_filter", ["simple_graph"]], ["add", "def", "neighbor_set", ["simple_graph"]], ["add", "structure", "simple_graph", []]]}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": [["add", "theorem", "elems_iff_eq", ["sym2"]], ["mod", "theorem", "mem_iff", ["sym2"]], ["add", "theorem", "mk_has_mem_right", ["sym2"]], ["mod", "inductive", "rel", ["sym2"]], ["add", "def", "rel_bool", ["sym2"]], ["add", "theorem", "rel_bool_spec", ["sym2"]], ["mod", "def", "sym2", []]]}]}, {"timestamp": 1598296669, "sha": "8af15797", "message": "refactor(geometry/euclidean): split up file (#3926)\nSplit up `geometry/euclidean.lean` into four smaller files in\n`geometry/euclidean`. There should be no changes to any of the\nindividual definitions, or to the set of definitions present, but\nmodule doc strings have been expanded.\nVarious definitions in `geometry/euclidean/basic.lean` are not used by\nall the other files, so it would be possible to split it up further,\nbut that doesn't seem necessary for now, and more of those things may\nbe used by more other files in future. (For example,\n`geometry/euclidean/circumcenter.lean` doesn't make any use of angles\nat present. But a version of the law of sines involving the\ncircumradius would naturally go in\n`geometry/euclidean/circumcenter.lean`, and would introduce such a\ndependency.)", "changes": [{"oldPath": "src/geometry/euclidean.lean", "newPath": null, "changes": [["del", "def", "altitude", ["affine", "simplex"]], ["del", "theorem", "altitude_def", ["affine", "simplex"]], ["del", "theorem", "centroid_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["del", "def", "centroid_weights_with_circumcenter", ["affine", "simplex"]], ["del", "def", "circumcenter", ["affine", "simplex"]], ["del", "def", "circumcenter_circumradius", ["affine", "simplex"]], ["del", "theorem", "circumcenter_circumradius_unique_dist_eq", ["affine", "simplex"]], ["del", "theorem", "circumcenter_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "circumcenter_mem_affine_span", ["affine", "simplex"]], ["del", "def", "circumcenter_weights_with_circumcenter", ["affine", "simplex"]], ["del", "def", "circumradius", ["affine", "simplex"]], ["del", "theorem", "direction_monge_plane", ["affine", "simplex"]], ["del", "theorem", "dist_circumcenter_eq_circumradius'", ["affine", "simplex"]], ["del", "theorem", "dist_circumcenter_eq_circumradius", ["affine", "simplex"]], ["del", "theorem", "eq_circumcenter_of_dist_eq", ["affine", "simplex"]], ["del", "theorem", "eq_circumradius_of_dist_eq", ["affine", "simplex"]], ["del", "theorem", "eq_monge_point_of_forall_mem_monge_plane", ["affine", "simplex"]], ["del", "theorem", "inner_monge_point_vsub_face_centroid_vsub", ["affine", "simplex"]], ["del", "def", "monge_plane", ["affine", "simplex"]], ["del", "theorem", "monge_plane_comm", ["affine", "simplex"]], ["del", "theorem", "monge_plane_def", ["affine", "simplex"]], ["del", "def", "monge_point", ["affine", "simplex"]], ["del", "theorem", "monge_point_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "monge_point_eq_smul_vsub_vadd_circumcenter", ["affine", "simplex"]], ["del", "theorem", "monge_point_mem_affine_span", ["affine", "simplex"]], ["del", "theorem", "monge_point_mem_monge_plane", ["affine", "simplex"]], ["del", "theorem", "monge_point_vsub_face_centroid_eq_weighted_vsub_of_points_with_circumcenter", ["affine", "simplex"]], ["del", "def", "monge_point_vsub_face_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "monge_point_vsub_face_centroid_weights_with_circumcenter_eq_sub", ["affine", "simplex"]], ["del", "def", "monge_point_weights_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "point_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["del", "def", "point_index_embedding", ["affine", "simplex"]], ["del", "def", "point_weights_with_circumcenter", ["affine", "simplex"]], ["del", "def", "points_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "points_with_circumcenter_eq_circumcenter", ["affine", "simplex"]], ["del", "inductive", "points_with_circumcenter_index", ["affine", "simplex"]], ["del", "theorem", "points_with_circumcenter_point", ["affine", "simplex"]], ["del", "theorem", "sum_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "sum_circumcenter_weights_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "sum_monge_point_vsub_face_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "sum_monge_point_weights_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "sum_point_weights_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "sum_points_with_circumcenter", ["affine", "simplex"]], ["del", "theorem", "altitude_eq_monge_plane", ["affine", "triangle"]], ["del", "theorem", "eq_orthocenter_of_forall_mem_altitude", ["affine", "triangle"]], ["del", "def", "orthocenter", ["affine", "triangle"]], ["del", "theorem", "orthocenter_eq_monge_point", ["affine", "triangle"]], ["del", "theorem", "orthocenter_eq_smul_vsub_vadd_circumcenter", ["affine", "triangle"]], ["del", "theorem", "orthocenter_mem_affine_span", ["affine", "triangle"]], ["del", "theorem", "orthocenter_mem_altitude", ["affine", "triangle"]], ["del", "def", "angle", ["euclidean_geometry"]], ["del", "theorem", "angle_add_angle_add_angle_eq_pi", ["euclidean_geometry"]], ["del", "theorem", "angle_add_angle_eq_pi_of_angle_eq_pi", ["euclidean_geometry"]], ["del", "theorem", "angle_comm", ["euclidean_geometry"]], ["del", "theorem", "angle_eq_angle_of_angle_eq_pi", ["euclidean_geometry"]], ["del", "theorem", "angle_eq_angle_of_dist_eq", ["euclidean_geometry"]], ["del", "theorem", "angle_eq_left", ["euclidean_geometry"]], ["del", "theorem", "angle_eq_of_ne", ["euclidean_geometry"]], ["del", "theorem", "angle_eq_right", ["euclidean_geometry"]], ["del", "theorem", "angle_eq_zero_of_angle_eq_pi_left", ["euclidean_geometry"]], ["del", "theorem", "angle_eq_zero_of_angle_eq_pi_right", ["euclidean_geometry"]], ["del", "theorem", "angle_le_pi", ["euclidean_geometry"]], ["del", "theorem", "angle_nonneg", ["euclidean_geometry"]], ["del", "theorem", "dist_affine_combination", ["euclidean_geometry"]], ["del", "theorem", "dist_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["del", "theorem", "dist_eq_of_angle_eq_angle_of_angle_ne_pi", ["euclidean_geometry"]], ["del", "theorem", "dist_orthogonal_projection_eq_zero_iff", ["euclidean_geometry"]], ["del", "theorem", "dist_orthogonal_projection_ne_zero_of_not_mem", ["euclidean_geometry"]], ["del", "theorem", "dist_set_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["del", "theorem", "dist_square_eq_dist_orthogonal_projection_square_add_dist_orthogonal_projection_square", ["euclidean_geometry"]], ["del", "theorem", "dist_square_eq_dist_square_add_dist_square_iff_angle_eq_pi_div_two", ["euclidean_geometry"]], ["del", "theorem", "dist_square_eq_dist_square_add_dist_square_sub_two_mul_dist_mul_dist_mul_cos_angle", ["euclidean_geometry"]], ["del", "theorem", "dist_square_smul_orthogonal_vadd_smul_orthogonal_vadd", ["euclidean_geometry"]], ["del", "theorem", "exists_dist_eq_iff_exists_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["del", "theorem", "exists_unique_dist_eq_of_affine_independent", ["euclidean_geometry"]], ["del", "theorem", "exists_unique_dist_eq_of_insert", ["euclidean_geometry"]], ["del", "theorem", "inner_weighted_vsub", ["euclidean_geometry"]], ["del", "theorem", "inter_eq_singleton_orthogonal_projection", ["euclidean_geometry"]], ["del", "theorem", "inter_eq_singleton_orthogonal_projection_fn", ["euclidean_geometry"]], ["del", "def", "orthogonal_projection", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_eq_self_iff", ["euclidean_geometry"]], ["del", "def", "orthogonal_projection_fn", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_fn_eq", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_fn_mem", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_fn_mem_orthogonal", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_fn_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_mem", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_mem_orthogonal", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_vadd_eq_self", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_vadd_smul_vsub_orthogonal_projection", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_vsub_mem_direction", ["euclidean_geometry"]], ["del", "theorem", "orthogonal_projection_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["del", "theorem", "vsub_orthogonal_projection_mem_direction", ["euclidean_geometry"]], ["del", "theorem", "vsub_orthogonal_projection_mem_direction_orthogonal", ["euclidean_geometry"]], ["del", "def", "angle", ["inner_product_geometry"]], ["del", "theorem", "angle_add_angle_eq_pi_of_angle_eq_pi", ["inner_product_geometry"]], ["del", "theorem", "angle_add_angle_sub_add_angle_sub_eq_pi", ["inner_product_geometry"]], ["del", "theorem", "angle_comm", ["inner_product_geometry"]], ["del", "theorem", "angle_eq_pi_iff", ["inner_product_geometry"]], ["del", "theorem", "angle_eq_zero_iff", ["inner_product_geometry"]], ["del", "theorem", "angle_le_pi", ["inner_product_geometry"]], ["del", "theorem", "angle_neg_left", ["inner_product_geometry"]], ["del", "theorem", "angle_neg_neg", ["inner_product_geometry"]], ["del", "theorem", "angle_neg_right", ["inner_product_geometry"]], ["del", "theorem", "angle_neg_self_of_nonzero", ["inner_product_geometry"]], ["del", "theorem", "angle_nonneg", ["inner_product_geometry"]], ["del", "theorem", "angle_self", ["inner_product_geometry"]], ["del", "theorem", "angle_self_neg_of_nonzero", ["inner_product_geometry"]], ["del", "theorem", "angle_smul_left_of_neg", ["inner_product_geometry"]], ["del", "theorem", "angle_smul_left_of_pos", ["inner_product_geometry"]], ["del", "theorem", "angle_smul_right_of_neg", ["inner_product_geometry"]], ["del", "theorem", "angle_smul_right_of_pos", ["inner_product_geometry"]], ["del", "theorem", "angle_sub_eq_angle_sub_rev_of_norm_eq", ["inner_product_geometry"]], ["del", "theorem", "angle_zero_left", ["inner_product_geometry"]], ["del", "theorem", "angle_zero_right", ["inner_product_geometry"]], ["del", "theorem", "cos_angle", ["inner_product_geometry"]], ["del", "theorem", "cos_angle_add_angle_sub_add_angle_sub_eq_neg_one", ["inner_product_geometry"]], ["del", "theorem", "cos_angle_mul_norm_mul_norm", ["inner_product_geometry"]], ["del", "theorem", "cos_angle_sub_add_angle_sub_rev_eq_neg_cos_angle", ["inner_product_geometry"]], ["del", "theorem", "inner_eq_zero_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["del", "theorem", "norm_add_square_eq_norm_square_add_norm_square'", ["inner_product_geometry"]], ["del", "theorem", "norm_add_square_eq_norm_square_add_norm_square_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["del", "theorem", "norm_eq_of_angle_sub_eq_angle_sub_rev_of_angle_ne_pi", ["inner_product_geometry"]], ["del", "theorem", "norm_sub_square_eq_norm_square_add_norm_square'", ["inner_product_geometry"]], ["del", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["del", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_sub_two_mul_norm_mul_norm_mul_cos_angle", ["inner_product_geometry"]], ["del", "theorem", "sin_angle_add_angle_sub_add_angle_sub_eq_zero", ["inner_product_geometry"]], ["del", "theorem", "sin_angle_mul_norm_mul_norm", ["inner_product_geometry"]], ["del", "theorem", "sin_angle_sub_add_angle_sub_rev_eq_sin_angle", ["inner_product_geometry"]]]}, {"oldPath": null, "newPath": "src/geometry/euclidean/basic.lean", "changes": [["add", "def", "angle", ["euclidean_geometry"]], ["add", "theorem", "angle_add_angle_eq_pi_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_comm", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_angle_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_left", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_of_ne", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_right", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_zero_of_angle_eq_pi_left", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_zero_of_angle_eq_pi_right", ["euclidean_geometry"]], ["add", "theorem", "angle_le_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_nonneg", ["euclidean_geometry"]], ["add", "theorem", "dist_affine_combination", ["euclidean_geometry"]], ["add", "theorem", "dist_orthogonal_projection_eq_zero_iff", ["euclidean_geometry"]], ["add", "theorem", "dist_orthogonal_projection_ne_zero_of_not_mem", ["euclidean_geometry"]], ["add", "theorem", "dist_square_eq_dist_orthogonal_projection_square_add_dist_orthogonal_projection_square", ["euclidean_geometry"]], ["add", "theorem", "dist_square_smul_orthogonal_vadd_smul_orthogonal_vadd", ["euclidean_geometry"]], ["add", "theorem", "inner_weighted_vsub", ["euclidean_geometry"]], ["add", "theorem", "inter_eq_singleton_orthogonal_projection", ["euclidean_geometry"]], ["add", "theorem", "inter_eq_singleton_orthogonal_projection_fn", ["euclidean_geometry"]], ["add", "def", "orthogonal_projection", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_eq_self_iff", ["euclidean_geometry"]], ["add", "def", "orthogonal_projection_fn", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_eq", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_mem", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_mem_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_mem", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_mem_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vadd_eq_self", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vadd_smul_vsub_orthogonal_projection", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vsub_mem_direction", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "vsub_orthogonal_projection_mem_direction", ["euclidean_geometry"]], ["add", "theorem", "vsub_orthogonal_projection_mem_direction_orthogonal", ["euclidean_geometry"]], ["add", "def", "angle", ["inner_product_geometry"]], ["add", "theorem", "angle_add_angle_eq_pi_of_angle_eq_pi", ["inner_product_geometry"]], ["add", "theorem", "angle_comm", ["inner_product_geometry"]], ["add", "theorem", "angle_eq_pi_iff", ["inner_product_geometry"]], ["add", "theorem", "angle_eq_zero_iff", ["inner_product_geometry"]], ["add", "theorem", "angle_le_pi", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_left", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_neg", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_right", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_self_of_nonzero", ["inner_product_geometry"]], ["add", "theorem", "angle_nonneg", ["inner_product_geometry"]], ["add", "theorem", "angle_self", ["inner_product_geometry"]], ["add", "theorem", "angle_self_neg_of_nonzero", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_left_of_neg", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_left_of_pos", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_right_of_neg", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_right_of_pos", ["inner_product_geometry"]], ["add", "theorem", "angle_zero_left", ["inner_product_geometry"]], ["add", "theorem", "angle_zero_right", ["inner_product_geometry"]], ["add", "theorem", "cos_angle", ["inner_product_geometry"]], ["add", "theorem", "cos_angle_mul_norm_mul_norm", ["inner_product_geometry"]], ["add", "theorem", "inner_eq_zero_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["add", "theorem", "sin_angle_mul_norm_mul_norm", ["inner_product_geometry"]]]}, {"oldPath": null, "newPath": "src/geometry/euclidean/circumcenter.lean", "changes": [["add", "theorem", "centroid_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "def", "circumcenter", ["affine", "simplex"]], ["add", "def", "circumcenter_circumradius", ["affine", "simplex"]], ["add", "theorem", "circumcenter_circumradius_unique_dist_eq", ["affine", "simplex"]], ["add", "theorem", "circumcenter_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "circumcenter_mem_affine_span", ["affine", "simplex"]], ["add", "def", "circumcenter_weights_with_circumcenter", ["affine", "simplex"]], ["add", "def", "circumradius", ["affine", "simplex"]], ["add", "theorem", "dist_circumcenter_eq_circumradius'", ["affine", "simplex"]], ["add", "theorem", "dist_circumcenter_eq_circumradius", ["affine", "simplex"]], ["add", "theorem", "eq_circumcenter_of_dist_eq", ["affine", "simplex"]], ["add", "theorem", "eq_circumradius_of_dist_eq", ["affine", "simplex"]], ["add", "theorem", "point_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "point_index_embedding", ["affine", "simplex"]], ["add", "def", "point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "def", "points_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "points_with_circumcenter_eq_circumcenter", ["affine", "simplex"]], ["add", "inductive", "points_with_circumcenter_index", ["affine", "simplex"]], ["add", "theorem", "points_with_circumcenter_point", ["affine", "simplex"]], ["add", "theorem", "sum_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_circumcenter_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_points_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "dist_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["add", "theorem", "dist_set_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["add", "theorem", "exists_dist_eq_iff_exists_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["add", "theorem", "exists_unique_dist_eq_of_affine_independent", ["euclidean_geometry"]], ["add", "theorem", "exists_unique_dist_eq_of_insert", ["euclidean_geometry"]]]}, {"oldPath": null, "newPath": "src/geometry/euclidean/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/geometry/euclidean/monge_point.lean", "changes": [["add", "def", "altitude", ["affine", "simplex"]], ["add", "theorem", "altitude_def", ["affine", "simplex"]], ["add", "theorem", "direction_monge_plane", ["affine", "simplex"]], ["add", "theorem", "eq_monge_point_of_forall_mem_monge_plane", ["affine", "simplex"]], ["add", "theorem", "inner_monge_point_vsub_face_centroid_vsub", ["affine", "simplex"]], ["add", "def", "monge_plane", ["affine", "simplex"]], ["add", "theorem", "monge_plane_comm", ["affine", "simplex"]], ["add", "theorem", "monge_plane_def", ["affine", "simplex"]], ["add", "def", "monge_point", ["affine", "simplex"]], ["add", "theorem", "monge_point_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "monge_point_eq_smul_vsub_vadd_circumcenter", ["affine", "simplex"]], ["add", "theorem", "monge_point_mem_affine_span", ["affine", "simplex"]], ["add", "theorem", "monge_point_mem_monge_plane", ["affine", "simplex"]], ["add", "theorem", "monge_point_vsub_face_centroid_eq_weighted_vsub_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "monge_point_vsub_face_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "monge_point_vsub_face_centroid_weights_with_circumcenter_eq_sub", ["affine", "simplex"]], ["add", "def", "monge_point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_monge_point_vsub_face_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_monge_point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "altitude_eq_monge_plane", ["affine", "triangle"]], ["add", "theorem", "eq_orthocenter_of_forall_mem_altitude", ["affine", "triangle"]], ["add", "def", "orthocenter", ["affine", "triangle"]], ["add", "theorem", "orthocenter_eq_monge_point", ["affine", "triangle"]], ["add", "theorem", "orthocenter_eq_smul_vsub_vadd_circumcenter", ["affine", "triangle"]], ["add", "theorem", "orthocenter_mem_affine_span", ["affine", "triangle"]], ["add", "theorem", "orthocenter_mem_altitude", ["affine", "triangle"]]]}, {"oldPath": null, "newPath": "src/geometry/euclidean/triangle.lean", "changes": [["add", "theorem", "angle_add_angle_add_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_angle_of_dist_eq", ["euclidean_geometry"]], ["add", "theorem", "dist_eq_of_angle_eq_angle_of_angle_ne_pi", ["euclidean_geometry"]], ["add", "theorem", "dist_square_eq_dist_square_add_dist_square_iff_angle_eq_pi_div_two", ["euclidean_geometry"]], ["add", "theorem", "dist_square_eq_dist_square_add_dist_square_sub_two_mul_dist_mul_dist_mul_cos_angle", ["euclidean_geometry"]], ["add", "theorem", "angle_add_angle_sub_add_angle_sub_eq_pi", ["inner_product_geometry"]], ["add", "theorem", "angle_sub_eq_angle_sub_rev_of_norm_eq", ["inner_product_geometry"]], ["add", "theorem", "cos_angle_add_angle_sub_add_angle_sub_eq_neg_one", ["inner_product_geometry"]], ["add", "theorem", "cos_angle_sub_add_angle_sub_rev_eq_neg_cos_angle", ["inner_product_geometry"]], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square'", ["inner_product_geometry"]], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["add", "theorem", "norm_eq_of_angle_sub_eq_angle_sub_rev_of_angle_ne_pi", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square'", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_sub_two_mul_norm_mul_norm_mul_cos_angle", ["inner_product_geometry"]], ["add", "theorem", "sin_angle_add_angle_sub_add_angle_sub_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "sin_angle_sub_add_angle_sub_rev_eq_sin_angle", ["inner_product_geometry"]]]}]}, {"timestamp": 1598288247, "sha": "1404ad83", "message": "feat(algebra/add_torsor): vsub_vadd_comm (#3928)\nAdd another (commutative) `add_torsor` rearrangement lemma.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vsub_vadd_comm", []]]}]}, {"timestamp": 1598286189, "sha": "96b559c7", "message": "feat(set_theory/game): grundy number of single-heap nim (#3930)", "changes": [{"oldPath": "src/set_theory/game/nim.lean", "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "Grundy_value_nim", ["nim"]], ["add", "theorem", "equiv_nim_iff_Grundy_value_eq", ["nim"]], ["add", "theorem", "nim_equiv_iff_eq", ["nim"]]]}]}, {"timestamp": 1598234142, "sha": "1ccdbb9c", "message": "feat(category_theory/images): unique image (#3921)\nShow that the strong-epi mono factorisation of a morphism is unique.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "def", "iso_strong_epi_mono", ["category_theory", "limits", "image"]], ["add", "theorem", "iso_strong_epi_mono_hom_comp_ι", ["category_theory", "limits", "image"]], ["add", "theorem", "iso_strong_epi_mono_inv_comp_mono", ["category_theory", "limits", "image"]]]}]}, {"timestamp": 1598234140, "sha": "685d9dd3", "message": "feat(category_theory): cancel fully faithful functor (#3920)\nConstruct the natural isomorphism between `F` and `G` given a natural iso between `F ⋙ H` and `G ⋙ H` for a fully faithful `H`.", "changes": [{"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "def", "fully_faithful_cancel_right", ["category_theory"]], ["add", "theorem", "fully_faithful_cancel_right_hom_app", ["category_theory"]], ["add", "theorem", "fully_faithful_cancel_right_inv_app", ["category_theory"]]]}]}, {"timestamp": 1598230811, "sha": "ebd3351b", "message": "chore(category_theory/conj): add a new simp lemma (#3922)\nMark a new simp lemma which I think is helpful and simplify some proofs using it.", "changes": [{"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}]}, {"timestamp": 1598230809, "sha": "f2304096", "message": "feat(category_theory/adjunction): opposite adjunctions (#3899)\nAdd two constructions for adjoints for opposite functors.", "changes": [{"oldPath": null, "newPath": "src/category_theory/adjunction/opposites.lean", "changes": [["add", "def", "adjoint_of_op_adjoint_op", ["adjunction"]], ["add", "def", "adjoint_of_unop_adjoint_unop", ["adjunction"]], ["add", "def", "adjoint_op_of_adjoint_unop", ["adjunction"]], ["add", "def", "adjoint_unop_of_adjoint_op", ["adjunction"]], ["add", "def", "op_adjoint_of_unop_adjoint", ["adjunction"]], ["add", "def", "op_adjoint_op_of_adjoint", ["adjunction"]], ["add", "def", "unop_adjoint_of_op_adjoint", ["adjunction"]], ["add", "def", "unop_adjoint_unop_of_adjoint", ["adjunction"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "def", "op_equiv", ["category_theory"]], ["add", "theorem", "op_equiv_apply", ["category_theory"]], ["add", "theorem", "op_equiv_symm_apply", ["category_theory"]]]}]}, {"timestamp": 1598230807, "sha": "bfc8c66b", "message": "feat(category_theory/limits/shapes/finite*): finite limits from limits (#3800)\nAdd some missing derivations in the new has_limits hierarchy", "changes": [{"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["add", "def", "has_finite_colimits_of_has_colimits", ["category_theory", "limits"]], ["add", "def", "has_finite_limits_of_has_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": [["add", "def", "has_finite_coproducts_of_has_finite_colimits", ["category_theory", "limits"]], ["add", "def", "has_finite_products_of_has_finite_limits", ["category_theory", "limits"]]]}]}, {"timestamp": 1598226994, "sha": "bf6cd285", "message": "feat(category_theory/fully_faithful): equivalence of homsets (#3923)\nI was *so sure* I'd already made this PR but I can't find it nor this construction, so here it is.", "changes": [{"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "def", "equiv_of_fully_faithful", ["category_theory"]], ["add", "theorem", "equiv_of_fully_faithful_apply", ["category_theory"]], ["add", "theorem", "equiv_of_fully_faithful_symm_apply", ["category_theory"]]]}]}, {"timestamp": 1598199726, "sha": "7d4f7730", "message": "feat(ring_theory/jacobson): Proof that if a ring is a Jacobson Ring then so is its localization at a single element (#3651)\nThe main result here is that the localization of a Jacobson ring to a single element is also a Jacobson ring, which is one of the things needed for the proof that `R` is Jacobson if and only if `R[x]` is Jacobson.\nTwo characterization of Jacobson rings in terms of their quotient rings are also included, again needed to prove `R[x]` is Jacobson.", "changes": [{"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mem_closure_singleton_self", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mk_surjective", ["submodule", "quotient"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_le_Inf_of_subset_insert_top", []], ["add", "theorem", "Sup_le_Sup_of_subset_instert_bot", []]]}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "mul_unit_mem_iff_mem", ["ideal"]], ["add", "theorem", "unit_mul_mem_iff_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "theorem", "is_maximal", ["ideal", "comap"]], ["add", "theorem", "comap_Inf'", ["ideal"]], ["add", "theorem", "comap_is_maximal_of_surjective", ["ideal"]], ["add", "theorem", "comap_is_prime", ["ideal"]], ["add", "theorem", "map_is_prime_of_surjective", ["ideal"]], ["add", "theorem", "map_radical_of_surjective", ["ideal"]], ["add", "theorem", "mk_ker", ["ideal"]], ["add", "theorem", "ker_eq_comap_bot", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": [["add", "theorem", "disjoint_closure_singleton_iff_not_mem", ["ideal"]], ["add", "theorem", "is_jacobson_iff_Inf_maximal'", ["ideal"]], ["add", "theorem", "is_jacobson_localization", ["ideal"]], ["add", "theorem", "is_maximal_iff_is_maximal_disjoint", ["ideal"]], ["add", "theorem", "is_maximal_of_is_maximal_disjoint", ["ideal"]], ["add", "def", "order_iso_of_maximal", ["ideal"]]]}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["add", "theorem", "comap_jacobson_of_surjective", ["ideal"]], ["add", "theorem", "eq_jacobson_iff_Inf_maximal'", ["ideal"]], ["add", "theorem", "eq_jacobson_iff_Inf_maximal", ["ideal"]], ["add", "theorem", "eq_jacobson_iff_not_mem", ["ideal"]], ["add", "theorem", "eq_radical_of_eq_jacobson", ["ideal"]], ["del", "theorem", "is_maximal", ["ideal", "jacobson"]], ["add", "theorem", "jacobson_eq_iff_jacobson_quotient_eq_bot", ["ideal"]], ["add", "theorem", "jacobson_eq_self_of_is_maximal", ["ideal"]], ["add", "theorem", "map_jacobson_of_surjective", ["ideal"]], ["add", "theorem", "radical_eq_jacobson_iff_radical_quotient_eq_jacobson_bot", ["ideal"]], ["add", "theorem", "radical_le_jacobson", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "comap_map_of_is_prime_disjoint", ["localization_map"]], ["add", "theorem", "is_prime_iff_is_prime_disjoint", ["localization_map"]], ["add", "theorem", "is_prime_of_is_prime_disjoint", ["localization_map"]], ["add", "theorem", "mem_map_to_map_iff", ["localization_map"]], ["add", "theorem", "mk'_mem_iff", ["localization_map"]], ["add", "def", "order_iso_of_prime", ["localization_map"]]]}]}, {"timestamp": 1598196950, "sha": "e2167558", "message": "feat(linear_algebra/affine_space): more lemmas (#3918)\nAdd some more affine space lemmas. In particular, this includes\nlemmas about the dimension of the span of a finite affinely\nindependent family.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "direction_eq_top_iff_of_nonempty", ["affine_subspace"]]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "affine_span_eq_top_of_affine_independent_of_card_eq_findim_add_one", []], ["add", "theorem", "findim_vector_span_of_affine_independent", []], ["add", "theorem", "vector_span_eq_top_of_affine_independent_of_card_eq_findim_add_one", []]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_independent_set_of_affine_independent", []], ["add", "theorem", "injective_of_affine_independent", []]]}]}, {"timestamp": 1598194296, "sha": "d80f3ef3", "message": "feat(geometry/euclidean): Monge point and orthocenter (#3872)\nThe main purpose of this PR is to define the orthocenter of a\ntriangle.\nSimplices in more than two dimensions do not in general have an\northocenter: the altitudes are not necessarily concurrent. However,\nthere is a n-dimensional generalization of the orthocenter in the form\nof the Monge point of a simplex. Define a Monge plane to be an\n(n-1)-dimensional subspace that passes through the centroid of an\n(n-2)-dimensional face of the simplex and is orthogonal to the\nopposite edge. Then the Monge planes of a simplex are always\nconcurrent, and their point of concurrence is known as the Monge point\nof the simplex. Furthermore, the circumcenter O, centroid G and Monge\npoint M are collinear in that order on the Euler line, with OG : GM =\n(n-1) : 2.\nHere, we use that ratio as a convenient way to define the Monge point\nin terms of the existing definitions of the circumcenter and the\ncentroid. First we set up some infrastructure for dealing with affine\ncombinations of the vertices of a simplex together with its\ncircumcenter, which can be convenient for computations rather than\ndealing with combinations of the vertices alone; the use of an\ninductive type `points_with_circumcenter_index` seemed to be more\nconvenient than other options for how to index such combinations.\nThen, a straightforward calculation using `inner_weighted_vsub` shows\nthat the point defined in terms of the circumcenter and the centroid\ndoes indeed lie in the Monge planes, so justifying the definition as\nbeing a definition of the Monge point. It is then shown to be the\nonly point in that intersection (in fact, the only point in the\nintersection of all the Monge planes where one of the two vertices\nneeded to specify a Monge plane is fixed).\nThe altitudes of a simplex are then defined. In the case of a\ntriangle, the orthocenter is defined to be the Monge point, the\naltitudes are shown to equal the Monge planes (mathematically trivial,\nbut involves quite a bit of fiddling around with `fin 3`) and thus the\northocenter is shown to lie in the altitudes and to be the unique\npoint lying in any two of them (again, involves various fiddling\naround with `fin 3` to link up with the previous lemmas). Because of\nthe definition chosen for the Monge point, the position of the\northocenter on the Euler line of the triangle comes for free (not\nquite `rfl`, but two rewrites of `rfl` lemmas plus `norm_num`).", "changes": [{"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["add", "def", "altitude", ["affine", "simplex"]], ["add", "theorem", "altitude_def", ["affine", "simplex"]], ["add", "theorem", "centroid_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "circumcenter_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "circumcenter_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "direction_monge_plane", ["affine", "simplex"]], ["add", "theorem", "eq_monge_point_of_forall_mem_monge_plane", ["affine", "simplex"]], ["add", "theorem", "inner_monge_point_vsub_face_centroid_vsub", ["affine", "simplex"]], ["add", "def", "monge_plane", ["affine", "simplex"]], ["add", "theorem", "monge_plane_comm", ["affine", "simplex"]], ["add", "theorem", "monge_plane_def", ["affine", "simplex"]], ["add", "def", "monge_point", ["affine", "simplex"]], ["add", "theorem", "monge_point_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "monge_point_eq_smul_vsub_vadd_circumcenter", ["affine", "simplex"]], ["add", "theorem", "monge_point_mem_affine_span", ["affine", "simplex"]], ["add", "theorem", "monge_point_mem_monge_plane", ["affine", "simplex"]], ["add", "theorem", "monge_point_vsub_face_centroid_eq_weighted_vsub_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "monge_point_vsub_face_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "monge_point_vsub_face_centroid_weights_with_circumcenter_eq_sub", ["affine", "simplex"]], ["add", "def", "monge_point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "point_eq_affine_combination_of_points_with_circumcenter", ["affine", "simplex"]], ["add", "def", "point_index_embedding", ["affine", "simplex"]], ["add", "def", "point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "def", "points_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "points_with_circumcenter_eq_circumcenter", ["affine", "simplex"]], ["add", "inductive", "points_with_circumcenter_index", ["affine", "simplex"]], ["add", "theorem", "points_with_circumcenter_point", ["affine", "simplex"]], ["add", "theorem", "sum_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_circumcenter_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_monge_point_vsub_face_centroid_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_monge_point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_point_weights_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "sum_points_with_circumcenter", ["affine", "simplex"]], ["add", "theorem", "altitude_eq_monge_plane", ["affine", "triangle"]], ["add", "theorem", "eq_orthocenter_of_forall_mem_altitude", ["affine", "triangle"]], ["add", "def", "orthocenter", ["affine", "triangle"]], ["add", "theorem", "orthocenter_eq_monge_point", ["affine", "triangle"]], ["add", "theorem", "orthocenter_eq_smul_vsub_vadd_circumcenter", ["affine", "triangle"]], ["add", "theorem", "orthocenter_mem_affine_span", ["affine", "triangle"]], ["add", "theorem", "orthocenter_mem_altitude", ["affine", "triangle"]]]}]}, {"timestamp": 1598188885, "sha": "588e46c6", "message": "feat(tactic/*,meta/expr): refactor and extend binder matching functions (#3830)\nThis PR deals with meta functions that deconstruct expressions starting\nwith pi or lambda binders. Core defines `mk_local_pis` to deconstruct pi\nbinders and `tactic.core` used to contain some ad-hoc variations of its\nfunctionality. This PR unifies all these variations and adds several\nmore, for both pi and lambda binders. Specifically:\n- We remove `mk_local_pis_whnf`. Use `whnf e md >>= mk_local_pis` instead.\n Note: we reuse the name for another function with different semantics;\n see below.\n- We add `mk_{meta,local}_{pis,lambdas}`, `mk_{meta,local}_{pis,lambdas}n`,\n `mk_{meta,local}_{pis,lambdas}_whnf`, `mk_{meta,local}_{pis,lambdas}n_whnf`.\n These can all be used to 'open' a pi or lambda binder. The binder is\n instantiated with a fresh local for the `local` variants and a fresh\n metavariable for the `meta` variants. The `whnf` variants normalise\n the input expression before checking for leading binders. The\n `{pis,lambdas}n` variants match a given number of leading binders.\n Some of these functions were already defined, but we now implement\n them in terms of a new function, `mk_binders`, which abstracts over\n the common functionality.\n- We rename `get_pi_binders_dep` to `get_pi_binders_nondep`. This function returns\n the nondependent binders, so the old name was misleading.\n- We add `expr.match_` for every constructor `C` of `expr`. `match_pi`\n and `match_lam` are needed to implement the `mk_*` functions; the\n other functions are added for completeness.\n- (Bonus) We add `get_app_fn_args_whnf` and `get_app_fn_whnf`. These are variants\n of `get_app_fn_args` and `get_app_fn`, respectively, which normalise the input\n expression as necessary.\nThe refactoring might be a slight performance regression because the new\nimplementation adds some indirection. But the affected functions aren't\nwidely used anyway and I suspect that the performance loss is very\nminor, so having clearer and more concise code is probably worth it.", "changes": [{"oldPath": "src/control/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/binder_matching.lean", "changes": []}, {"oldPath": "src/tactic/choose.lean", "newPath": "src/tactic/choose.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/mk_iff_of_inductive_prop.lean", "newPath": "src/tactic/mk_iff_of_inductive_prop.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1598185661, "sha": "ffd86262", "message": "refactor(linear_algebra/affine_space/basic): make more arguments of smul_vsub_vadd_mem implicit (#3917)\nCame up in #3872.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}]}, {"timestamp": 1598164587, "sha": "7d88a30a", "message": "fix(data/sigma/basic): rename `ext` to `sigma.ext` (#3916)", "changes": [{"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["del", "theorem", "ext", []], ["add", "theorem", "ext", ["sigma"]]]}]}, {"timestamp": 1598159923, "sha": "ff970553", "message": "feat(data/finset/basic): insert_singleton_comm (#3914)\nAdd the result that `({a, b} : finset α) = {b, a}`. This came up in\n#3872, and `library_search` does not show it as already present.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "insert_singleton_comm", ["finset"]]]}]}, {"timestamp": 1598150087, "sha": "7ac7246e", "message": "feat(linear_algebra/finite_dimensional): Add `linear_equiv.of_inj_endo` and related lemmas (#3878)\nThis PR prepares #3864.\n* Move the section `zero_dim` up.\n* Add several lemmas about finite dimensional vector spaces. The only new definition is `linear_equiv.of_injective_endo`, which produces a linear equivalence from an injective endomorphism.", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "linear_independent_le_dim", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "findim_bot", []], ["add", "theorem", "lt_omega_of_linear_independent", ["finite_dimensional"]], ["add", "theorem", "of_injective_endo_left_inv", ["linear_equiv"]], ["add", "theorem", "of_injective_endo_right_inv", ["linear_equiv"]], ["add", "theorem", "of_injective_endo_to_fun", ["linear_equiv"]], ["add", "theorem", "is_unit_iff", ["linear_map"]], ["add", "theorem", "eq_top_of_disjoint", ["submodule"]]]}]}, {"timestamp": 1598119778, "sha": "abe44595", "message": "feat(analysis/convex): define concavity of functions (#3849)", "changes": [{"oldPath": "src/algebra/module/ordered.lean", "newPath": "src/algebra/module/ordered.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "add", ["concave_on"]], ["add", "theorem", "comp_affine_map", ["concave_on"]], ["add", "theorem", "comp_linear_map", ["concave_on"]], ["add", "theorem", "concave_le", ["concave_on"]], ["add", "theorem", "convex_hypograph", ["concave_on"]], ["add", "theorem", "convex_lt", ["concave_on"]], ["add", "theorem", "le_on_segment'", ["concave_on"]], ["add", "theorem", "le_on_segment", ["concave_on"]], ["add", "theorem", "smul", ["concave_on"]], ["add", "theorem", "subset", ["concave_on"]], ["add", "theorem", "translate_left", ["concave_on"]], ["add", "theorem", "translate_right", ["concave_on"]], ["add", "def", "concave_on", []], ["add", "theorem", "concave_on_const", []], ["add", "theorem", "concave_on_id", []], ["add", "theorem", "concave_on_iff_convex_hypograph", []], ["add", "theorem", "concave_on_iff_div", []], ["add", "theorem", "concave_on_real_of_slope_mono_adjacent", []], ["mod", "theorem", "le_on_segment'", ["convex_on"]], ["mod", "theorem", "le_on_segment", ["convex_on"]], ["add", "theorem", "concave_on_of_lt", ["linear_order"]], ["add", "theorem", "neg_concave_on_iff", []], ["add", "theorem", "neg_convex_on_iff", []]]}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": [["add", "theorem", "of_is_local_max_of_convex_univ", ["is_max_on"]], ["add", "theorem", "of_is_local_max_on_of_concave_on", ["is_max_on"]], ["mod", "theorem", "of_is_local_min_of_convex_univ", ["is_min_on"]], ["mod", "theorem", "of_is_local_min_on_of_convex_on", ["is_min_on"]], ["mod", "theorem", "of_is_local_min_on_of_convex_on_Icc", ["is_min_on"]]]}]}, {"timestamp": 1598109240, "sha": "9e9b3801", "message": "doc(algebra/linear_recurrence): fix a mistake in module docstring (#3911)", "changes": [{"oldPath": "src/algebra/linear_recurrence.lean", "newPath": "src/algebra/linear_recurrence.lean", "changes": []}]}, {"timestamp": 1598109238, "sha": "65ceb009", "message": "fix(topology): simplify proof of Heine-Cantor (#3910)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "bsupr_le_supr", []], ["add", "theorem", "infi_le_binfi", []]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}]}, {"timestamp": 1598106816, "sha": "6a852789", "message": "feat(data/polynomial/eval): eval_finset.prod (#3903)\nEvaluating commutes with finset.prod; useful in a variety of situations in numerical analysis.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_prod", ["polynomial"]]]}]}, {"timestamp": 1598102817, "sha": "aca785a7", "message": "feat(linear_algebra): linear_equiv_matrix lemmas (#3898)\nFrom the sphere eversion project, with help by Anne for the crucial `linear_equiv_matrix_apply`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "comp_coe", ["linear_map"]], ["mod", "theorem", "id_apply", ["linear_map"]], ["add", "theorem", "id_coe", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "def", "linear_equiv_matrix", []], ["add", "theorem", "linear_equiv_matrix_apply'", []], ["add", "theorem", "linear_equiv_matrix_apply", []], ["add", "theorem", "linear_equiv_matrix_id", []], ["mod", "theorem", "linear_equiv_matrix_range", []], ["add", "theorem", "linear_equiv_matrix_symm_one", []], ["add", "theorem", "is_unit_det", ["matrix", "linear_equiv"]], ["add", "def", "of_is_unit_det", ["matrix", "linear_equiv"]], ["mod", "theorem", "linear_equiv_matrix_comp", ["matrix"]], ["mod", "theorem", "linear_equiv_matrix_mul", ["matrix"]], ["add", "theorem", "linear_equiv_matrix_symm_mul", ["matrix"]]]}]}, {"timestamp": 1598099540, "sha": "e9d10674", "message": "feat(category_theory/opposites): isomorphism of opposite functor (#3901)\nGet some lemmas generated by `simps` and add two isomorphisms for opposite functors.", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "left_op_map", ["category_theory", "functor"]], ["del", "theorem", "left_op_obj", ["category_theory", "functor"]], ["del", "theorem", "map_app", ["category_theory", "functor", "op_hom"]], ["del", "theorem", "obj", ["category_theory", "functor", "op_hom"]], ["del", "theorem", "map_app", ["category_theory", "functor", "op_inv"]], ["del", "theorem", "obj", ["category_theory", "functor", "op_inv"]], ["del", "theorem", "op_map", ["category_theory", "functor"]], ["del", "theorem", "op_obj", ["category_theory", "functor"]], ["add", "def", "op_unop_iso", ["category_theory", "functor"]], ["del", "theorem", "right_op_map", ["category_theory", "functor"]], ["del", "theorem", "right_op_obj", ["category_theory", "functor"]], ["del", "theorem", "unop_map", ["category_theory", "functor"]], ["del", "theorem", "unop_obj", ["category_theory", "functor"]], ["add", "def", "unop_op_iso", ["category_theory", "functor"]]]}]}, {"timestamp": 1598090843, "sha": "011a2622", "message": "feat(set_theory/game): impartial games and the Sprague-Grundy theorem (#3855)", "changes": [{"oldPath": null, "newPath": "src/set_theory/game/impartial.lean", "changes": [["add", "theorem", "equiv_iff_sum_first_loses", ["pgame"]], ["add", "theorem", "good_left_move_iff_first_wins", ["pgame"]], ["add", "theorem", "good_right_move_iff_first_wins", ["pgame"]], ["add", "def", "impartial", ["pgame"]], ["add", "theorem", "impartial_add", ["pgame"]], ["add", "theorem", "impartial_add_self", ["pgame"]], ["add", "theorem", "impartial_def", ["pgame"]], ["add", "theorem", "impartial_first_loses_symm'", ["pgame"]], ["add", "theorem", "impartial_first_loses_symm", ["pgame"]], ["add", "theorem", "impartial_first_wins_symm'", ["pgame"]], ["add", "theorem", "impartial_first_wins_symm", ["pgame"]], ["add", "theorem", "impartial_move_left_impartial", ["pgame"]], ["add", "theorem", "impartial_move_right_impartial", ["pgame"]], ["add", "theorem", "impartial_neg", ["pgame"]], ["add", "theorem", "impartial_neg_equiv_self", ["pgame"]], ["add", "theorem", "impartial_winner_cases", ["pgame"]], ["add", "theorem", "no_good_left_moves_iff_first_loses", ["pgame"]], ["add", "theorem", "no_good_right_moves_iff_first_loses", ["pgame"]], ["add", "theorem", "zero_impartial", ["pgame"]]]}, {"oldPath": null, "newPath": "src/set_theory/game/nim.lean", "changes": [["add", "theorem", "Grundy_value_def", ["nim"]], ["add", "theorem", "Sprague_Grundy", ["nim"]], ["add", "theorem", "nim_def", ["nim"]], ["add", "theorem", "nim_impartial", ["nim"]], ["add", "theorem", "nim_non_zero_first_wins", ["nim"]], ["add", "theorem", "nim_sum_first_loses_iff_eq", ["nim"]], ["add", "theorem", "nim_sum_first_wins_iff_neq", ["nim"]], ["add", "theorem", "nim_wf_lemma", ["nim"]], ["add", "theorem", "nim_zero_first_loses", ["nim"]], ["add", "def", "nonmoves", ["nim"]], ["add", "theorem", "nonmoves_nonempty", ["nim"]], ["add", "def", "nim", []], ["add", "def", "out", ["ordinal"]], ["add", "theorem", "type_out'", ["ordinal"]]]}, {"oldPath": null, "newPath": "src/set_theory/game/winner.lean", "changes": [["add", "def", "first_loses", ["pgame"]], ["add", "theorem", "first_loses_is_zero", ["pgame"]], ["add", "theorem", "first_loses_of_equiv", ["pgame"]], ["add", "theorem", "first_loses_of_equiv_iff", ["pgame"]], ["add", "def", "first_wins", ["pgame"]], ["add", "theorem", "first_wins_of_equiv", ["pgame"]], ["add", "theorem", "first_wins_of_equiv_iff", ["pgame"]], ["add", "def", "left_wins", ["pgame"]], ["add", "theorem", "left_wins_of_equiv", ["pgame"]], ["add", "theorem", "left_wins_of_equiv_iff", ["pgame"]], ["add", "theorem", "omega_left_wins", ["pgame"]], ["add", "theorem", "one_left_wins", ["pgame"]], ["add", "def", "right_wins", ["pgame"]], ["add", "theorem", "right_wins_of_equiv", ["pgame"]], ["add", "theorem", "right_wins_of_equiv_iff", ["pgame"]], ["add", "theorem", "star_first_wins", ["pgame"]], ["add", "theorem", "winner_cases", ["pgame"]], ["add", "theorem", "zero_first_loses", ["pgame"]]]}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}]}, {"timestamp": 1598088908, "sha": "e546e946", "message": "fix(data/equiv/transfer_instance): remove stray #lint (#3908)", "changes": [{"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}]}, {"timestamp": 1598077860, "sha": "13881d7a", "message": "feat(tactic/dec_trivial): make dec_trivial easier to use (#3875)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/dec_trivial.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "test/dec_trivial_tactic.lean", "changes": []}, {"oldPath": null, "newPath": "test/revert_target_deps.lean", "changes": []}]}, {"timestamp": 1598072208, "sha": "83db96b2", "message": "feat(algebra/group/with_one): make with_one and with_zero irreducible. (#3883)", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "theorem", "coe_mul", ["with_one"]], ["del", "theorem", "mul_coe", ["with_one"]], ["add", "theorem", "coe_inv", ["with_zero"]], ["add", "theorem", "coe_mul", ["with_zero"]], ["del", "theorem", "inv_coe", ["with_zero"]], ["del", "theorem", "mul_coe", ["with_zero"]], ["add", "theorem", "mul_comm", ["with_zero"]], ["add", "theorem", "mul_inv_cancel", ["with_zero"]], ["add", "theorem", "mul_zero", ["with_zero"]], ["add", "theorem", "zero_mul", ["with_zero"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}]}, {"timestamp": 1598059368, "sha": "4b241664", "message": "chore(scripts): update nolints.txt (#3905)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1598055669, "sha": "278f5120", "message": "feat(data/real): define the golden ratio and its conjugate, prove irrationality of both and Binet's formula (#3885)\nCo-authored by @alreadydone and @monadius through their solutions to the corresponding Codewars Kata.", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_fin_eq_prod_range", ["finset"]], ["add", "theorem", "prod_range_eq_prod_fin", ["finset"]], ["del", "theorem", "range_prod_eq_univ_prod", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/real/golden_ratio.lean", "changes": [["add", "theorem", "fib_is_sol_fib_rec", []], ["add", "def", "fib_rec", []], ["add", "theorem", "fib_rec_char_poly_eq", []], ["add", "theorem", "geom_gold_conj_is_sol_fib_rec", []], ["add", "theorem", "geom_gold_is_sol_fib_rec", []], ["add", "theorem", "gold_add_gold_conj", []], ["add", "theorem", "gold_conj_irrational", []], ["add", "theorem", "gold_conj_mul_gold", []], ["add", "theorem", "gold_conj_ne_zero", []], ["add", "theorem", "gold_conj_neg", []], ["add", "theorem", "gold_conj_sq", []], ["add", "theorem", "gold_irrational", []], ["add", "theorem", "gold_mul_gold_conj", []], ["add", "theorem", "gold_ne_zero", []], ["add", "theorem", "gold_pos", []], ["add", "theorem", "gold_sq", []], ["add", "theorem", "gold_sub_gold_conj", []], ["add", "def", "golden_conj", []], ["add", "def", "golden_ratio", []], ["add", "theorem", "inv_gold", []], ["add", "theorem", "inv_gold_conj", []], ["add", "theorem", "neg_one_lt_gold_conj", []], ["add", "theorem", "one_lt_gold", []], ["add", "theorem", "one_sub_gold", []], ["add", "theorem", "one_sub_gold_conj", []], ["add", "theorem", "coe_fib_eq'", ["real"]], ["add", "theorem", "coe_fib_eq", ["real"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}]}, {"timestamp": 1598048004, "sha": "9998bee7", "message": "chore(measure_theory/*): remove some `measurable f` arguments (#3902)", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_add_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["mod", "theorem", "integral_Iic_sub_Iic", ["interval_integral"]], ["mod", "theorem", "integral_add_adjacent_intervals", ["interval_integral"]], ["mod", "theorem", "integral_add_adjacent_intervals_cancel", ["interval_integral"]], ["mod", "theorem", "integral_interval_add_interval_comm", ["interval_integral"]], ["mod", "theorem", "integral_interval_sub_interval_comm'", ["interval_integral"]], ["mod", "theorem", "integral_interval_sub_interval_comm", ["interval_integral"]], ["mod", "theorem", "integral_interval_sub_left", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "theorem", "integral_add_compl", ["measure_theory"]]]}]}, {"timestamp": 1598042980, "sha": "4c04f0bb", "message": "feat(topology/algebra/ordered): sum of functions with limits at_top and cst (#3833)\nTwo functions which tend to `at_top` have sum tending to `at_top`. Likewise if one tends to `at_top` and one tends to a constant.\nAlso made a couple of edits relating to [this conversation](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Ordered.20groups.20have.20no.20top.20element) about `no_top` for algebraic structures:", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "tendsto_at_bot_add", ["filter"]], ["add", "theorem", "tendsto_at_top_add", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_at_bot_add_tendsto_left", []], ["add", "theorem", "tendsto_at_bot_add_tendsto_right", []], ["add", "theorem", "tendsto_at_top_add_tendsto_left", []], ["add", "theorem", "tendsto_at_top_add_tendsto_right", []]]}]}, {"timestamp": 1598036871, "sha": "1db32c59", "message": "feat(set/basic): some results about `set.pi` (#3894)\nNew definition: `function.eval`\nAlso some changes in `set.basic`\nName changes:\n```\npi_empty_index -> empty_pi\npi_insert_index -> insert_pi\npi_singleton_index -> singleton_pi\nset.push_pull -> image_inter_preimage\nset.push_pull' -> image_preimage_inter\n```", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "empty_pi", ["set"]], ["add", "theorem", "eval_image_pi", ["set"]], ["add", "theorem", "eval_image_univ_pi", ["set"]], ["add", "theorem", "image_compl_preimage", ["set"]], ["add", "theorem", "image_inter_preimage", ["set"]], ["add", "theorem", "image_preimage_inter", ["set"]], ["add", "theorem", "insert_pi", ["set"]], ["add", "theorem", "mem_pi", ["set"]], ["add", "theorem", "mem_univ_pi", ["set"]], ["mod", "def", "pi", ["set"]], ["del", "theorem", "pi_empty_index", ["set"]], ["add", "theorem", "pi_eq_empty", ["set"]], ["add", "theorem", "pi_eq_empty_iff", ["set"]], ["mod", "theorem", "pi_if", ["set"]], ["del", "theorem", "pi_insert_index", ["set"]], ["add", "theorem", "pi_nonempty_iff", ["set"]], ["del", "theorem", "pi_singleton_index", ["set"]], ["add", "theorem", "singleton_pi", ["set"]], ["add", "theorem", "subset_pi_eval_image", ["set"]], ["add", "theorem", "univ_pi_eq_empty", ["set"]], ["add", "theorem", "univ_pi_eq_empty_iff", ["set"]], ["add", "theorem", "univ_pi_nonempty_iff", ["set"]], ["add", "theorem", "update_preimage_pi", ["set"]], ["add", "theorem", "update_preimage_univ_pi", ["set"]]]}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "def", "eval", ["function"]], ["add", "theorem", "eval_apply", ["function"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1598034702, "sha": "0c7ac835", "message": "feat(measure_theory/bochner_integration): add `integral_smul_measure` (#3900)\nAlso add `integral_dirac`", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_add_measure", ["measure_theory"]], ["add", "theorem", "integral_dirac", ["measure_theory"]], ["add", "theorem", "integral_eq_zero_of_ae", ["measure_theory"]], ["add", "theorem", "integral_smul_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_add_measure_iff", ["measure_theory"]], ["add", "theorem", "ae_smul_measure", ["measure_theory"]], ["add", "theorem", "smul_apply", ["measure_theory", "measure"]]]}]}, {"timestamp": 1598025895, "sha": "ac567902", "message": "feat(order/rel_iso): a new definition of order_iso, using preorder instances (#3838)\ndefines (new) `order_embedding` and `order_iso`, which map both < and <=\nreplaces existing `rel_embedding` and `rel_iso` instances preserving < or <= with the new abbreviations", "changes": [{"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": [["add", "def", "order_embedding_to_fun", ["finsupp"]], ["add", "theorem", "order_embedding_to_fun_apply", ["finsupp"]], ["add", "def", "order_iso_multiset", ["finsupp"]], ["add", "theorem", "order_iso_multiset_apply", ["finsupp"]], ["add", "theorem", "order_iso_multiset_symm_apply", ["finsupp"]], ["del", "def", "rel_embedding_to_fun", ["finsupp"]], ["del", "theorem", "rel_embedding_to_fun_apply", ["finsupp"]], ["del", "def", "rel_iso_multiset", ["finsupp"]], ["del", "theorem", "rel_iso_multiset_apply", ["finsupp"]], ["del", "theorem", "rel_iso_multiset_symm_apply", ["finsupp"]]]}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": [["mod", "def", "correspondence", ["setoid"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["mod", "def", "correspondence", ["con"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "le_rel_embedding", ["submodule", "comap_mkq"]], ["del", "def", "lt_rel_embedding", ["submodule", "comap_mkq"]], ["add", "def", "order_embedding", ["submodule", "comap_mkq"]], ["del", "def", "le_rel_embedding", ["submodule", "map_subtype"]], ["del", "def", "lt_rel_embedding", ["submodule", "map_subtype"]], ["add", "def", "order_embedding", ["submodule", "map_subtype"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "to_galois_connection", ["order_iso"]], ["del", "theorem", "to_galois_connection", ["rel_iso"]]]}, {"oldPath": "src/order/ord_continuous.lean", "newPath": "src/order/ord_continuous.lean", "changes": [["del", "theorem", "coe_to_le_rel_embedding", ["left_ord_continuous"]], ["del", "theorem", "coe_to_lt_rel_embedding", ["left_ord_continuous"]], ["add", "theorem", "coe_to_order_embedding", ["left_ord_continuous"]], ["del", "def", "to_le_rel_embedding", ["left_ord_continuous"]], ["del", "def", "to_lt_rel_embedding", ["left_ord_continuous"]], ["add", "def", "to_order_embedding", ["left_ord_continuous"]], ["del", "theorem", "coe_to_le_rel_embedding", ["right_ord_continuous"]], ["del", "theorem", "coe_to_lt_rel_embedding", ["right_ord_continuous"]], ["add", "theorem", "coe_to_order_embedding", ["right_ord_continuous"]], ["del", "def", "to_le_rel_embedding", ["right_ord_continuous"]], ["del", "def", "to_lt_rel_embedding", ["right_ord_continuous"]], ["add", "def", "to_order_embedding", ["right_ord_continuous"]]]}, {"oldPath": "src/order/rel_iso.lean", "newPath": "src/order/rel_iso.lean", "changes": [["mod", "def", "rel_embedding", ["fin", "val"]], ["mod", "def", "rel_embedding", ["fin_fin"]], ["add", "def", "lt_embedding", ["order_embedding"]], ["add", "theorem", "lt_embedding_apply", ["order_embedding"]], ["add", "theorem", "map_le_iff", ["order_embedding"]], ["add", "theorem", "map_lt_iff", ["order_embedding"]], ["add", "def", "osymm", ["order_embedding"]], ["add", "def", "order_embedding", []], ["add", "theorem", "map_bot", ["order_iso"]], ["add", "def", "osymm", ["order_iso"]], ["add", "def", "order_iso", []], ["del", "def", "lt_embedding_of_le_embedding", ["rel_embedding"]], ["add", "def", "order_embedding_of_lt_embedding", ["rel_embedding"]], ["del", "theorem", "map_bot", ["rel_iso"]]]}, {"oldPath": "src/order/semiconj_Sup.lean", "newPath": "src/order/semiconj_Sup.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "def", "le_rel_embedding_of_surjective", ["ideal"]], ["del", "def", "lt_rel_embedding_of_surjective", ["ideal"]], ["add", "def", "order_embedding_of_surjective", ["ideal"]], ["mod", "def", "rel_iso_of_bijective", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "def", "le_rel_embedding", ["localization_map"]], ["add", "def", "order_embedding", ["localization_map"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "def", "order_embedding", ["cardinal", "ord"]], ["add", "theorem", "order_embedding_coe", ["cardinal", "ord"]], ["del", "def", "rel_embedding", ["cardinal", "ord"]], ["del", "theorem", "rel_embedding_coe", ["cardinal", "ord"]]]}]}, {"timestamp": 1598014865, "sha": "e3409c6c", "message": "feat(data/zmod/basic): morphisms to zmod are surjective (deps: #3888) (#3889)\n... and determined by their kernel", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "ring_hom_eq_of_ker_eq", ["zmod"]], ["add", "theorem", "ring_hom_surjective", ["zmod"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1598010114, "sha": "4921be9d", "message": "feat(analysis/special_functions/arsinh): inverse hyperbolic sine function (#3801)\nAdded the following lemmas and definitions:\n`cosh_def`\n`sinh_def`\n`cosh_pos`\n`sinh_strict_mono`\n`sinh_injective`\n`sinh_surjective`\n`sinh_bijective`\n`real.cosh_sq_sub_sinh_sq`\n`sqrt_one_add_sinh_sq`\n`sinh_arsinh`\n`arsinh_sin`\nThis is from the list of UG not in lean. `cosh` coming soon.", "changes": [{"oldPath": null, "newPath": "src/analysis/special_functions/arsinh.lean", "changes": [["add", "def", "arsinh", ["real"]], ["add", "theorem", "arsinh_sinh", ["real"]], ["add", "theorem", "sinh_arsinh", ["real"]], ["add", "theorem", "sinh_bijective", ["real"]], ["add", "theorem", "sinh_injective", ["real"]], ["add", "theorem", "sinh_surjective", ["real"]], ["add", "theorem", "sqrt_one_add_sinh_sq", ["real"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "sinh_strict_mono", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cosh_eq", ["real"]], ["add", "theorem", "cosh_pos", ["real"]], ["add", "theorem", "cosh_sq_sub_sinh_sq", ["real"]], ["add", "theorem", "sinh_eq", ["real"]]]}]}, {"timestamp": 1598004469, "sha": "7a48761e", "message": "feat(logic/function): left/right inverse iff (#3897)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "left_inverse_iff_comp", ["function"]], ["add", "theorem", "right_inverse_iff_comp", ["function"]]]}]}, {"timestamp": 1598004467, "sha": "de20a394", "message": "feat(group_theory/subroup,ring_theory/ideal/operations): lift_of_surjective (#3888)\nSurjective homomorphisms behave like quotient maps", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "eq_lift_of_surjective", ["monoid_hom"]], ["add", "theorem", "lift_of_surjective_comp", ["monoid_hom"]], ["add", "theorem", "lift_of_surjective_comp_apply", ["monoid_hom"]], ["mod", "theorem", "mem_ker", ["monoid_hom"]]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["add", "theorem", "eq_lift_of_surjective", ["ring_hom"]], ["add", "theorem", "lift_of_surjective_comp", ["ring_hom"]], ["add", "theorem", "lift_of_surjective_comp_apply", ["ring_hom"]]]}]}, {"timestamp": 1598004466, "sha": "045b6c7f", "message": "chore(topology/basic): use dot notation (#3861)\n## API changes\n* add `set.range_sigma_mk`, `finset.sigma_preimage_mk`, `finset.sigma_preimage_mk_of_subset`,\n `finset.sigma_image_fst_preimage_mk`, `finset.prod_preimage'`;\n* rename `filter.monotone.tendsto_at_top_finset` to `filter.tendsto_at_top_finset_of_monotone`,\n add alias `monotone.tendsto_at_top_finset`;\n* add `filter.tendsto_finset_preimage_at_top_at_top`;\n* add `filter.tendsto.frequently`;\n* add `cluster_pt_principal_iff_frequently`, `mem_closure_iff_frequently`, `filter.frequently.mem_closure`,\n `filter.frequently.mem_of_closed`, `is_closed.mem_of_frequently_of_tendsto`;\n* rename `mem_of_closed_of_tendsto` to `is_closed.mem_of_tendsto`;\n* delete `mem_of_closed_of_tendsto'`; use new `is_closed.mem_of_frequently_of_tendsto` instead;", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_sigma_mk", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "prod_preimage'", ["finset"]], ["add", "theorem", "sigma_image_fst_preimage_mk", ["finset"]], ["add", "theorem", "sigma_preimage_mk", ["finset"]], ["add", "theorem", "sigma_preimage_mk_of_subset", ["finset"]]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["del", "theorem", "tendsto_at_top_finset", ["filter", "monotone"]], ["add", "theorem", "tendsto_at_top_finset_of_monotone", ["filter"]], ["add", "theorem", "tendsto_finset_preimage_at_top_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "cluster_pt_principal_iff_frequently", []], ["add", "theorem", "mem_of_closed", ["filter", "frequently"]], ["add", "theorem", "mem_of_frequently_of_tendsto", ["is_closed"]], ["add", "theorem", "mem_of_tendsto", ["is_closed"]], ["add", "theorem", "mem_closure_iff_frequently", []], ["del", "theorem", "mem_of_closed_of_tendsto'", []], ["del", "theorem", "mem_of_closed_of_tendsto", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/extend_from_subset.lean", "newPath": "src/topology/extend_from_subset.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}]}, {"timestamp": 1598004464, "sha": "d8cde2aa", "message": "feat(measure_theory/interval_integral): more versions of FTC-1 (#3709)\nLeft/right derivative, strict derivative, differentiability in both endpoints.\nOther changes:\n* rename `filter.tendsto_le_left` and `filter.tendsto_le_right` to `filter.tendsto.mono_left` and `filter.tendsto.mono_right`, swap arguments;\n* rename `order_top.tendsto_at_top` to `order_top.tendsto_at_top_nhds`;\n* introduce `tendsto_Ixx_class` instead of `is_interval_generated`.", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "unique_diff_within_at", ["unique_diff_on"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/interval_integral.lean", "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "eventually_interval_integrable", ["filter", "tendsto"]], ["add", "theorem", "eventually_interval_integrable_ae", ["filter", "tendsto"]], ["add", "theorem", "finite_at_inner", ["interval_integral", "FTC_filter"]], ["add", "theorem", "deriv_integral_left", ["interval_integral"]], ["add", "theorem", "deriv_integral_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "deriv_integral_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "deriv_integral_right", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_left", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "deriv_within_integral_right", ["interval_integral"]], ["add", "theorem", "fderiv_integral", ["interval_integral"]], ["add", "theorem", "fderiv_integral_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "fderiv_within_integral_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_Iic_sub_Iic", ["interval_integral"]], ["add", "theorem", "integral_const'", ["interval_integral"]], ["add", "theorem", "integral_const", ["interval_integral"]], ["add", "theorem", "integral_const_of_cdf", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_left", ["interval_integral"]], ["del", "theorem", "integral_has_deriv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_right", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_left", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_within_at_right", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_at", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_within_at", ["interval_integral"]], ["add", "theorem", "integral_has_fderiv_within_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_left", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "integral_has_strict_deriv_at_right", ["interval_integral"]], ["add", "theorem", "integral_has_strict_fderiv_at", ["interval_integral"]], ["add", "theorem", "integral_has_strict_fderiv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_interval_add_interval_comm", ["interval_integral"]], ["add", "theorem", "integral_interval_sub_interval_comm'", ["interval_integral"]], ["add", "theorem", "integral_interval_sub_interval_comm", ["interval_integral"]], ["add", "theorem", "integral_interval_sub_left", ["interval_integral"]], ["del", "theorem", "integral_same_has_deriv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_smul", ["interval_integral"]], ["add", "theorem", "integral_sub", ["interval_integral"]], ["add", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "integral_sub_integral_sub_linear_is_o_of_tendsto_ae_right", ["interval_integral"]], ["mod", "theorem", "integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae_left", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_integral_sub_linear_is_o_of_tendsto_ae_right", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae'", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_ge'", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_ge", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_le'", ["interval_integral"]], ["add", "theorem", "measure_integral_sub_linear_is_o_of_tendsto_ae_of_le", ["interval_integral"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "finite_at_bot", ["measure_theory", "measure"]], ["add", "theorem", "measure_lt_top", ["measure_theory"]], ["add", "theorem", "measure_ne_top", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "frequently", ["filter", "tendsto"]], ["add", "theorem", "mono_left", ["filter", "tendsto"]], ["add", "theorem", "mono_right", ["filter", "tendsto"]], ["mod", "theorem", "tendsto_infi'", ["filter"]], ["del", "theorem", "tendsto_le_left", ["filter"]], ["del", "theorem", "tendsto_le_right", ["filter"]]]}, {"oldPath": "src/order/filter/interval.lean", "newPath": "src/order/filter/interval.lean", "changes": [["del", "theorem", "is_interval_generated", ["filter", "has_basis"]], ["add", "theorem", "tendsto_Ixx_class", ["filter", "has_basis"]], ["del", "theorem", "has_ord_connected_basis", ["filter"]], ["del", "theorem", "is_interval_generated_principal_iff", ["filter"]], ["mod", "theorem", "Icc", ["filter", "tendsto"]], ["mod", "theorem", "Ico", ["filter", "tendsto"]], ["mod", "theorem", "Ioc", ["filter", "tendsto"]], ["mod", "theorem", "Ioo", ["filter", "tendsto"]], ["del", "theorem", "Ixx", ["filter", "tendsto"]], ["add", "theorem", "tendsto_Ixx_class_inf", ["filter"]], ["add", "theorem", "tendsto_Ixx_class_of_subset", ["filter"]], ["add", "theorem", "tendsto_Ixx_class_principal", ["filter"]], ["del", "theorem", "tendsto_Ixx_same_filter", ["filter"]], ["del", "theorem", "is_interval_generated_inf_principal", ["set", "ord_connected"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "tendsto_at_top", ["order_top"]], ["add", "theorem", "tendsto_at_top_nhds", ["order_top"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "tendsto_const_nhds_within", []]]}]}, {"timestamp": 1597998909, "sha": "bc3e8356", "message": "feat(tactic/rcases): clear pattern `-` in rcases (#3868)\nThis allows you to write:\n```lean\nexample (h : ∃ x : ℕ, true) : true :=\nbegin\n rcases h with ⟨x, -⟩,\n -- x : ℕ |- true\nend\n```\nto clear unwanted hypotheses. Note that dependents are also cleared,\nmeaning that you can get into trouble if you try to keep matching when a\nvariable later in the pattern is deleted. The `_` pattern will match\na hypothesis even if it has been deleted, so this is the recommended way\nto match on variables dependent on a deleted hypothesis.\nYou can use `-` if you prefer, but watch out for unintended variables\ngetting deleted if there are duplicate names!", "changes": [{"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1597995222, "sha": "da6cd551", "message": "feat(determinant): towards multilinearity (#3887)\nFrom the sphere eversion project. In a PR coming soon, this will be used to prove that the determinant of a family of vectors in a given basis is multi-linear (see [here](https://github.com/leanprover-community/sphere-eversion/blob/2c776f6a92c0f9babb521a02ab0cc341a06d3f3c/src/vec_det.lean) for a preview if needed).", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_update_column_add", ["matrix"]], ["add", "theorem", "det_update_column_smul", ["matrix"]], ["add", "theorem", "det_update_row_add", ["matrix"]], ["add", "theorem", "det_update_row_smul", ["matrix"]]]}]}, {"timestamp": 1597987788, "sha": "23749aa0", "message": "chore(measure_theory/*): use `_measure` instead of `_meas` (#3892)", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["del", "theorem", "integral_add_meas", ["measure_theory"]], ["add", "theorem", "integral_add_measure", ["measure_theory"]], ["del", "theorem", "integral_map_meas", ["measure_theory"]], ["add", "theorem", "integral_map_measure", ["measure_theory"]], ["del", "theorem", "integral_zero_meas", ["measure_theory"]], ["add", "theorem", "integral_zero_measure", ["measure_theory"]], ["del", "theorem", "integral_add_meas", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_add_measure", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["del", "theorem", "lintegral_add_meas", ["measure_theory"]], ["add", "theorem", "lintegral_add_measure", ["measure_theory"]], ["del", "theorem", "lintegral_smul_meas", ["measure_theory"]], ["add", "theorem", "lintegral_smul_measure", ["measure_theory"]], ["del", "theorem", "lintegral_sum_meas", ["measure_theory"]], ["add", "theorem", "lintegral_sum_measure", ["measure_theory"]], ["del", "theorem", "lintegral_zero_meas", ["measure_theory"]], ["add", "theorem", "lintegral_zero_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["del", "theorem", "add_meas", ["measure_theory", "integrable"]], ["add", "theorem", "add_measure", ["measure_theory", "integrable"]], ["del", "theorem", "left_of_add_meas", ["measure_theory", "integrable"]], ["add", "theorem", "left_of_add_measure", ["measure_theory", "integrable"]], ["del", "theorem", "mono_meas", ["measure_theory", "integrable"]], ["add", "theorem", "mono_measure", ["measure_theory", "integrable"]], ["del", "theorem", "right_of_add_meas", ["measure_theory", "integrable"]], ["add", "theorem", "right_of_add_measure", ["measure_theory", "integrable"]], ["del", "theorem", "smul_meas", ["measure_theory", "integrable"]], ["add", "theorem", "smul_measure", ["measure_theory", "integrable"]], ["del", "theorem", "integrable_add_meas", ["measure_theory"]], ["add", "theorem", "integrable_add_measure", ["measure_theory"]], ["del", "theorem", "integrable_map_meas", ["measure_theory"]], ["add", "theorem", "integrable_map_measure", ["measure_theory"]], ["del", "theorem", "integrable_zero_meas", ["measure_theory"]], ["add", "theorem", "integrable_zero_measure", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["del", "theorem", "add_meas", ["measure_theory", "integrable_on"]], ["add", "theorem", "add_measure", ["measure_theory", "integrable_on"]], ["del", "theorem", "mono_meas", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono_measure", ["measure_theory", "integrable_on"]], ["del", "theorem", "integrable_on_add_meas", ["measure_theory"]], ["add", "theorem", "integrable_on_add_measure", ["measure_theory"]], ["mod", "theorem", "integral_empty", ["measure_theory"]]]}]}, {"timestamp": 1597982011, "sha": "31cd6dd2", "message": "chore(order/bounded_lattice): use `⦃⦄` in `disjoint.symm` (#3893)", "changes": [{"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "symm", ["disjoint"]]]}]}, {"timestamp": 1597976673, "sha": "17190352", "message": "feat(category_theory/monad/*): Add category of bundled (co)monads; prove equivalence of monads with monoid objects (#3762)\nThis PR constructs bundled monads, and proves the \"usual\" equivalence between the category of monads and the category of monoid objects in the endomorphism category.\nIt also includes a definition of morphisms of unbundled monads, and proves some necessary small lemmas in the following two files:\n1. `category_theory.functor_category`\n2. `category_theory.monoidal.internal`\nGiven any isomorphism in `Cat`, we construct a corresponding equivalence of categories in `Cat.equiv_of_iso`.", "changes": [{"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": [["add", "def", "equiv_of_iso", ["category_theory", "Cat"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["add", "theorem", "hcomp_id_app", ["category_theory", "nat_trans"]], ["add", "theorem", "id_hcomp_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": [["add", "theorem", "assoc", ["category_theory", "comonad_hom"]], ["add", "def", "comp", ["category_theory", "comonad_hom"]], ["add", "theorem", "comp_id", ["category_theory", "comonad_hom"]], ["add", "theorem", "ext", ["category_theory", "comonad_hom"]], ["add", "def", "id", ["category_theory", "comonad_hom"]], ["add", "theorem", "id_comp", ["category_theory", "comonad_hom"]], ["add", "structure", "comonad_hom", ["category_theory"]], ["add", "theorem", "assoc", ["category_theory", "monad_hom"]], ["add", "def", "comp", ["category_theory", "monad_hom"]], ["add", "theorem", "comp_id", ["category_theory", "monad_hom"]], ["add", "theorem", "ext", ["category_theory", "monad_hom"]], ["add", "def", "id", ["category_theory", "monad_hom"]], ["add", "theorem", "id_comp", ["category_theory", "monad_hom"]], ["add", "structure", "monad_hom", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monad/bundled.lean", "changes": [["add", "theorem", "coassoc_func_app", ["category_theory", "Comonad"]], ["add", "theorem", "comp_to_nat_trans", ["category_theory", "Comonad"]], ["add", "def", "forget", ["category_theory", "Comonad"]], ["add", "def", "hom", ["category_theory", "Comonad"]], ["add", "def", "terminal", ["category_theory", "Comonad"]], ["add", "structure", "Comonad", ["category_theory"]], ["add", "theorem", "assoc_func_app", ["category_theory", "Monad"]], ["add", "theorem", "comp_to_nat_trans", ["category_theory", "Monad"]], ["add", "def", "forget", ["category_theory", "Monad"]], ["add", "def", "hom", ["category_theory", "Monad"]], ["add", "def", "initial", ["category_theory", "Monad"]], ["add", "structure", "Monad", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monad/equiv_mon.lean", "changes": [["add", "def", "Mon_to_Monad", ["category_theory", "Monad"]], ["add", "def", "Monad_Mon_equiv", ["category_theory", "Monad"]], ["add", "def", "Monad_to_Mon", ["category_theory", "Monad"]], ["add", "def", "of_Mon", ["category_theory", "Monad"]], ["add", "def", "of_to_mon_end_iso", ["category_theory", "Monad"]], ["add", "def", "to_Mon", ["category_theory", "Monad"]], ["add", "def", "to_of_mon_end_iso", ["category_theory", "Monad"]]]}]}, {"timestamp": 1597974242, "sha": "7271f74f", "message": "chore(scripts): update nolints.txt (#3891)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1597968515, "sha": "0a48f0a2", "message": "feat(system/random): a monad for (pseudo-)randomized computations (#3742)", "changes": [{"oldPath": "src/control/monad/basic.lean", "newPath": "src/control/monad/basic.lean", "changes": [["add", "def", "equiv", ["reader_t"]], ["add", "def", "equiv", ["state_t"]], ["add", "def", "eval", ["state_t"]]]}, {"oldPath": "src/control/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": [["add", "def", "equiv", ["cont_t"]]]}, {"oldPath": "src/control/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": [["add", "def", "equiv", ["writer_t"]]]}, {"oldPath": null, "newPath": "src/control/uliftable.lean", "changes": [["add", "def", "uliftable'", ["cont_t"]], ["add", "def", "uliftable'", ["reader_t"]], ["add", "def", "uliftable'", ["state_t"]], ["add", "def", "adapt_down", ["uliftable"]], ["add", "def", "adapt_up", ["uliftable"]], ["add", "def", "down", ["uliftable"]], ["add", "def", "down_map", ["uliftable"]], ["add", "theorem", "down_up", ["uliftable"]], ["add", "def", "up", ["uliftable"]], ["add", "theorem", "up_down", ["uliftable"]], ["add", "def", "up_map", ["uliftable"]], ["add", "def", "uliftable'", ["writer_t"]]]}, {"oldPath": null, "newPath": "src/data/bitvec/basic.lean", "changes": [["add", "theorem", "add_lsb_div_two", ["bitvec"]], ["add", "theorem", "add_lsb_eq_twice_add_one", ["bitvec"]], ["add", "def", "of_fin", ["bitvec"]], ["add", "theorem", "of_fin_le_of_fin_of_le", ["bitvec"]], ["add", "theorem", "of_fin_to_fin", ["bitvec"]], ["add", "theorem", "of_fin_val", ["bitvec"]], ["add", "theorem", "of_nat_to_nat", ["bitvec"]], ["add", "theorem", "to_bool_add_lsb_mod_two", ["bitvec"]], ["add", "def", "to_fin", ["bitvec"]], ["add", "theorem", "to_fin_le_to_fin_of_le", ["bitvec"]], ["add", "theorem", "to_fin_of_fin", ["bitvec"]], ["add", "theorem", "to_fin_val", ["bitvec"]], ["add", "theorem", "to_nat_eq_foldr_reverse", ["bitvec"]], ["add", "theorem", "to_nat_lt", ["bitvec"]]]}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "def", "of_nat", ["bool"]], ["add", "theorem", "of_nat_le_of_nat", ["bool"]], ["add", "theorem", "of_nat_to_nat", ["bool"]], ["add", "def", "to_nat", ["bool"]], ["add", "theorem", "to_nat_le_to_nat", ["bool"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "pos", ["fact", "bit0"]], ["add", "theorem", "pos", ["fact", "bit1"]], ["add", "theorem", "pos", ["fact", "pow"]], ["add", "theorem", "pos", ["fact", "succ"]], ["mod", "theorem", "add_nat_val", ["fin"]], ["add", "def", "of_nat'", ["fin"]], ["add", "theorem", "val_of_nat_eq_mod'", ["fin"]], ["add", "theorem", "val_of_nat_eq_mod", ["fin"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "log", ["nat"]], ["add", "theorem", "log_pow", ["nat"]], ["add", "theorem", "pow_le_iff_le_log", ["nat"]], ["add", "theorem", "pow_log_le_self", ["nat"]], ["add", "theorem", "pow_succ_log_gt_self", ["nat"]]]}, {"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": [["add", "def", "corec_state", ["stream"]], ["add", "theorem", "length_take", ["stream"]], ["add", "def", "take", ["stream"]]]}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": null, "newPath": "src/system/random/basic.lean", "changes": [["add", "def", "random", ["bitvec"]], ["add", "def", "random_r", ["bitvec"]], ["add", "theorem", "bool_of_nat_mem_Icc_of_mem_Icc_to_nat", []], ["add", "def", "mk_generator", ["io"]], ["add", "def", "random", ["io"]], ["add", "def", "random_r", ["io"]], ["add", "def", "random_series", ["io"]], ["add", "def", "random_series_r", ["io"]], ["add", "def", "run_rand", ["io"]], ["add", "def", "random", ["rand"]], ["add", "def", "random_r", ["rand"]], ["add", "def", "random_series", ["rand"]], ["add", "def", "random_series_r", ["rand"]], ["add", "def", "split", ["rand"]], ["add", "def", "rand", []], ["add", "def", "next", ["rand_g"]], ["add", "def", "rand_g", []], ["add", "def", "random_fin_of_pos", []], ["add", "def", "shift_31_left", []]]}, {"oldPath": null, "newPath": "test/slim_check.lean", "changes": [["add", "def", "find_prime", []], ["add", "def", "find_prime_aux", []], ["add", "def", "iterated_primality_test", []], ["add", "def", "iterated_primality_test_aux", []], ["add", "def", "primality_test", []]]}]}, {"timestamp": 1597964744, "sha": "36386fc7", "message": "feat(linear_algebra): some easy linear map/equiv lemmas (#3890)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comp_coe", ["linear_equiv"]], ["add", "theorem", "eq_of_linear_map_eq", ["linear_equiv"]], ["add", "theorem", "refl_to_linear_map", ["linear_equiv"]], ["add", "theorem", "symm_trans", ["linear_equiv"]], ["add", "theorem", "trans_symm", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "equiv_of_is_basis_comp", []], ["add", "theorem", "equiv_of_is_basis_refl", []], ["add", "theorem", "equiv_of_is_basis_symm_trans", []], ["add", "theorem", "equiv_of_is_basis_trans_symm", []]]}]}, {"timestamp": 1597959231, "sha": "c9704ff5", "message": "chore(data/matrix, linear_algebra): generalize universe parameters (#3879)\n@PatrickMassot was complaining that `matrix m n R` often doesn't work when the parameters are declared as `m n : Type*` because the universe parameters were equal. This PR makes the universe parameters of `m` and `n` distinct where possible, also generalizing some other linear algebra definitions.\nThe types of `col` and `row` used to be `matrix n punit` but are now `matrix n unit`, otherwise the elaborator can't figure out the universe. This doesn't seem to break anything except for the cases where `punit.{n}` was explicitly written down.\nThere were some breakages, but the total amount of changes is not too big.", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": [["mod", "def", "JB", ["lie_algebra", "orthogonal"]], ["mod", "def", "PB", ["lie_algebra", "orthogonal"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "col", ["matrix"]], ["mod", "theorem", "from_blocks_multiply", ["matrix"]], ["mod", "def", "row", ["matrix"]], ["mod", "def", "matrix", []]]}, {"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["mod", "theorem", "empty_val'", ["matrix"]], ["mod", "theorem", "smul_mat_empty", ["matrix"]]]}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_eq_of_injective", []], ["mod", "theorem", "dim_eq_of_surjective", []], ["mod", "theorem", "dim_le_of_injective", []], ["mod", "theorem", "dim_le_of_surjective", []], ["mod", "theorem", "dim_map_le", []], ["mod", "theorem", "dim_prod", []], ["mod", "theorem", "dim_range_add_dim_ker", []], ["mod", "theorem", "dim_range_le", []], ["mod", "theorem", "dim_range_of_surjective", []], ["mod", "theorem", "dim_eq", ["linear_equiv"]], ["mod", "def", "rank", []], ["mod", "theorem", "rank_add_le", []], ["mod", "theorem", "rank_comp_le1", []], ["mod", "theorem", "rank_comp_le2", []], ["mod", "theorem", "rank_finset_sum_le", []], ["mod", "theorem", "rank_le_domain", []], ["mod", "theorem", "rank_le_range", []], ["mod", "theorem", "rank_zero", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "rank_vec_mul_vec", ["matrix"]]]}]}, {"timestamp": 1597959229, "sha": "901c5bca", "message": "feat(ring_theory/separable): a separable polynomial splits into a product of unique `X - C a` (#3877)\nBonus result: the degree of a separable polynomial is the number of roots\nin the field where it splits.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "bind_singleton_eq_self", ["finset"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["add", "theorem", "nodup_iff_ne_cons_cons", ["multiset"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "roots_prod", ["polynomial"]], ["add", "theorem", "roots_prod_X_sub_C", ["polynomial"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "degree_separable_eq_card_roots", ["polynomial"]], ["add", "theorem", "eq_prod_roots_of_separable", ["polynomial"]], ["add", "theorem", "is_unit_of_self_mul_dvd_separable", ["polynomial"]], ["add", "theorem", "nat_degree_separable_eq_card_roots", ["polynomial"]], ["add", "theorem", "nodup_of_separable_prod", ["polynomial"]], ["add", "theorem", "not_unit_X_sub_C", ["polynomial"]], ["add", "theorem", "of_dvd", ["polynomial", "separable"]]]}]}, {"timestamp": 1597959227, "sha": "9f525c74", "message": "chore(category_theory/limits/types): cleanup (#3871)\nBackporting some cleaning up work from `prop_limits`, while it rumbles onwards.", "changes": [{"oldPath": "src/algebra/category/Module/limits.lean", "newPath": "src/algebra/category/Module/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/limits.lean", "newPath": "src/algebra/category/Mon/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves/basic.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": [["add", "def", "preserves_colimit_of_reflects_of_preserves", ["category_theory", "limits"]], ["add", "def", "preserves_limit_of_reflects_of_preserves", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["del", "def", "colimit_", ["category_theory", "limits", "types"]], ["add", "def", "colimit_cocone", ["category_theory", "limits", "types"]], ["add", "def", "colimit_cocone_is_colimit", ["category_theory", "limits", "types"]], ["add", "def", "colimit_equiv_quot", ["category_theory", "limits", "types"]], ["add", "theorem", "colimit_equiv_quot_symm_apply", ["category_theory", "limits", "types"]], ["del", "def", "colimit_is_colimit_", ["category_theory", "limits", "types"]], ["add", "theorem", "lift_π_apply", ["category_theory", "limits", "types"]], ["del", "def", "limit_", ["category_theory", "limits", "types"]], ["add", "def", "limit_cone", ["category_theory", "limits", "types"]], ["add", "def", "limit_cone_is_limit", ["category_theory", "limits", "types"]], ["add", "def", "limit_equiv_sections", ["category_theory", "limits", "types"]], ["add", "theorem", "limit_equiv_sections_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "limit_equiv_sections_symm_apply", ["category_theory", "limits", "types"]], ["add", "theorem", "limit_ext", ["category_theory", "limits", "types"]], ["del", "def", "limit_is_limit_", ["category_theory", "limits", "types"]], ["add", "def", "quot", ["category_theory", "limits", "types"]], ["del", "theorem", "types_colimit", ["category_theory", "limits", "types"]], ["del", "theorem", "types_colimit_desc", ["category_theory", "limits", "types"]], ["del", "theorem", "types_colimit_map", ["category_theory", "limits", "types"]], ["del", "theorem", "types_colimit_pre", ["category_theory", "limits", "types"]], ["del", "theorem", "types_colimit_ι", ["category_theory", "limits", "types"]], ["del", "theorem", "types_limit", ["category_theory", "limits", "types"]], ["del", "theorem", "types_limit_lift", ["category_theory", "limits", "types"]], ["del", "theorem", "types_limit_map", ["category_theory", "limits", "types"]], ["del", "theorem", "types_limit_pre", ["category_theory", "limits", "types"]], ["del", "theorem", "types_limit_π", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1597942210, "sha": "7a93d87c", "message": "doc(src/ring_theory/integral_domain.lean): add module docstring (#3881)", "changes": [{"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}]}, {"timestamp": 1597924040, "sha": "46310185", "message": "feat(data/polynomial): Add polynomial/eval lemmas (#3876)\nAdd some lemmas about `polynomial`. In particular, add lemmas about\n`eval2` for the case that the ring `S` that we evaluate into is\nnon-commutative.", "changes": [{"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "leading_coeff_X_add_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval₂_endomorphism_algebra_map", ["polynomial"]], ["add", "theorem", "eval₂_list_prod_noncomm", ["polynomial"]], ["add", "theorem", "eval₂_mul_noncomm", ["polynomial"]], ["add", "def", "eval₂_ring_hom_noncomm", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "units_coeff_zero_smul", ["polynomial"]]]}]}, {"timestamp": 1597913020, "sha": "e174f42c", "message": "feat(equiv/transfer_instances): other algebraic structures (#3870)\nSome updates to `data.equiv.transfer_instances`.\n1. Use `@[to_additive]`\n2. Add algebraic equivalences between the original and transferred instances.\n3. Transfer modules and algebras.", "changes": [{"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": [["del", "theorem", "add_def", ["equiv"]], ["add", "def", "alg_equiv", ["equiv"]], ["add", "def", "linear_equiv", ["equiv"]], ["add", "def", "mul_equiv", ["equiv"]], ["add", "theorem", "mul_equiv_apply", ["equiv"]], ["add", "theorem", "mul_equiv_symm_apply", ["equiv"]], ["del", "theorem", "neg_def", ["equiv"]], ["add", "def", "ring_equiv", ["equiv"]], ["add", "theorem", "ring_equiv_apply", ["equiv"]], ["add", "theorem", "ring_equiv_symm_apply", ["equiv"]], ["add", "theorem", "smul_def", ["equiv"]], ["del", "theorem", "zero_def", ["equiv"]]]}]}, {"timestamp": 1597913018, "sha": "d7621b93", "message": "feat(data/list/basic): lemmas about foldr/foldl (#3865)\nThis PR prepares #3864.\n* Move lemmas about `foldr`/`foldl` into the appropriate section.\n* Add variants of the `foldl_map`/`foldr_map` lemmas.\n* Add lemmas stating that a fold over a list of injective functions is injective.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "foldl_map'", ["list"]], ["add", "theorem", "foldr_map'", ["list"]], ["add", "theorem", "injective_foldl_comp", ["list"]]]}]}, {"timestamp": 1597910459, "sha": "ba06edc1", "message": "chore(data/complex/module): move `linear_map.{re,im,of_real}` from `analysis` (#3874)\nI'm going to use these `def`s in `analysis/convex/basic`, and I don't\nwant to `import analysis.normed_space.basic` there.", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["del", "def", "im", ["complex", "linear_map"]], ["del", "theorem", "im_apply", ["complex", "linear_map"]], ["del", "def", "of_real", ["complex", "linear_map"]], ["del", "theorem", "of_real_apply", ["complex", "linear_map"]], ["del", "def", "re", ["complex", "linear_map"]], ["del", "theorem", "re_apply", ["complex", "linear_map"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": [["add", "theorem", "coe_im", ["complex", "linear_map"]], ["add", "theorem", "coe_of_real", ["complex", "linear_map"]], ["add", "theorem", "coe_re", ["complex", "linear_map"]], ["add", "def", "im", ["complex", "linear_map"]], ["add", "def", "of_real", ["complex", "linear_map"]], ["add", "def", "re", ["complex", "linear_map"]]]}]}, {"timestamp": 1597903817, "sha": "34db3c34", "message": "feat(order/category): various categories of ordered types (#3841)\nThis is a first step towards the category of simplicial sets (which are presheaves on the category of nonempty finite linear orders).", "changes": [{"oldPath": null, "newPath": "src/order/category/LinearOrder.lean", "changes": [["add", "def", "of", ["LinearOrder"]], ["add", "def", "LinearOrder", []]]}, {"oldPath": null, "newPath": "src/order/category/NonemptyFinLinOrd.lean", "changes": [["add", "def", "of", ["NonemptyFinLinOrd"]], ["add", "def", "NonemptyFinLinOrd", []]]}, {"oldPath": null, "newPath": "src/order/category/PartialOrder.lean", "changes": [["add", "def", "of", ["PartialOrder"]], ["add", "def", "PartialOrder", []]]}, {"oldPath": null, "newPath": "src/order/category/Preorder.lean", "changes": [["add", "def", "of", ["Preorder"]], ["add", "def", "Preorder", []], ["add", "theorem", "coe_id", ["preorder_hom"]], ["add", "theorem", "coe_inj", ["preorder_hom"]], ["add", "def", "comp", ["preorder_hom"]], ["add", "theorem", "comp_id", ["preorder_hom"]], ["add", "theorem", "ext", ["preorder_hom"]], ["add", "def", "id", ["preorder_hom"]], ["add", "theorem", "id_comp", ["preorder_hom"]], ["add", "structure", "preorder_hom", []]]}]}, {"timestamp": 1597894366, "sha": "43647988", "message": "fix(data/fin): better defeqs in fin.has_le instance (#3869)\nThis ensures that the instances from `fin.decidable_linear_order` match\nthe direct instances. They were defeq before but not at instance reducibility.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}]}, {"timestamp": 1597875642, "sha": "9a8e504a", "message": "feat(linear_algebra/affine_space/basic): more direction lemmas (#3867)\nAdd a few more lemmas about the directions of affine subspaces.", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "direction_inf_of_mem", ["affine_subspace"]], ["add", "theorem", "direction_inf_of_mem_inf", ["affine_subspace"]], ["add", "theorem", "vadd_mem_iff_mem_direction", ["affine_subspace"]]]}]}, {"timestamp": 1597873088, "sha": "7e6b8a9d", "message": "feat(linear_algebra/affine_space/basic): more vector_span lemmas (#3866)\nAdd more lemmas relating `vector_span` to the `submodule.span` of\nparticular subtractions of points. The new lemmas fix one of the\npoints in the subtraction and exclude that point, or its index in the\ncase of an indexed family of points rather than a set, from being on\nthe other side of the subtraction (whereas the previous lemmas don't\nexclude the trivial subtraction of a point from itself).", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "vector_span_eq_span_vsub_set_left_ne", []], ["add", "theorem", "vector_span_eq_span_vsub_set_right_ne", []], ["add", "theorem", "vector_span_image_eq_span_vsub_set_left_ne", []], ["add", "theorem", "vector_span_image_eq_span_vsub_set_right_ne", []]]}]}, {"timestamp": 1597859097, "sha": "bd5552a3", "message": "feat(ring_theory/polynomial/basic): Isomorphism between polynomials over a quotient and quotient over polynomials (#3847)\nThe main statement is `polynomial_quotient_equiv_quotient_polynomial`, which gives that If `I` is an ideal of `R`, then the ring polynomials over the quotient ring `I.quotient` is isomorphic to the quotient of `polynomial R` by the ideal `map C I`.\nAlso, `mem_map_C_iff` shows that `map C I` contains exactly the polynomials whose coefficients all lie in `I`", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "eval₂_C_mk_eq_zero", ["ideal"]], ["add", "theorem", "mem_map_C_iff", ["ideal"]], ["add", "def", "polynomial_quotient_equiv_quotient_polynomial", ["ideal"]], ["add", "theorem", "quotient_map_C_eq_zero", ["ideal"]]]}]}, {"timestamp": 1597843970, "sha": "15cacf0e", "message": "feat(analysis/normed_space/real_inner_product): orthogonal subspace order (#3863)\nDefine the Galois connection between `submodule ℝ α` and its\n`order_dual` given by `submodule.orthogonal`. Thus, deduce that the\ninf of orthogonal subspaces is the subspace orthogonal to the sup (for\nthree different forms of inf), as well as replacing the proof of\n`submodule.le_orthogonal_orthogonal` by a use of\n`galois_connection.le_u_l`.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "Inf_orthogonal", ["submodule"]], ["add", "theorem", "inf_orthogonal", ["submodule"]], ["add", "theorem", "infi_orthogonal", ["submodule"]], ["add", "theorem", "orthogonal_gc", ["submodule"]]]}]}, {"timestamp": 1597843965, "sha": "d963213b", "message": "refactor(algebra/add_torsor,linear_algebra/affine_space/basic): vsub_set (#3858)\nThe definition of `vsub_set` in `algebra/add_torsor` does something\nsimilar to `set.image2`, but expressed directly with `∃` inside\n`{...}`. Various lemmas in `linear_algebra/affine_space/basic`\nlikewise express such sets of subtractions with a given point on one\nside directly rather than using `set.image`. These direct forms can\nbe inconvenient to use with lemmas about `set.image2`, `set.image` and\n`set.range`; in particular, they have the equality inside the binders\nexpressed the other way round, leading to constructs such as `conv_lhs\n{ congr, congr, funext, conv { congr, funext, rw eq_comm } }` when\nit's necessary to convert one form to the other.\nThe form of `vsub_set` was suggested in review of #2720, the original\n`add_torsor` addition, based on what was then used in\n`algebra/pointwise`. Since then, `image2` has been added to mathlib\nand `algebra/pointwise` now uses `image2`.\nThus, convert these definitions to using `image2` or `''` as\nappropriate, so simplifying various proofs.\nThis PR deliberately only addresses `vsub_set` and related definitions\nfor such sets of subtractions; it does not attempt to change any other\ndefinitions in `linear_algebra/affine_space/basic` that might also be\nable to use `image2` or `''` but are not such sets of subtractions,\nand does not change the formulations of lemmas not involving such sets\neven if a rearrangement of equalities and existential quantifiers in\nsome such lemmas might bring them closer to the formulations about\nimages of sets.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["mod", "def", "vsub_set", []]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}]}, {"timestamp": 1597838286, "sha": "1e677e66", "message": "chore(data/finset/basic): use `finset.map` in `sigma_eq_bind` (#3857)", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["mod", "theorem", "sigma_eq_bind", ["finset"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "coe_sigma_mk", ["function", "embedding"]], ["add", "def", "sigma_mk", ["function", "embedding"]]]}]}, {"timestamp": 1597836179, "sha": "a1003964", "message": "doc(linear_algebra/sesquilinear_form): add missing backtick (#3862)", "changes": [{"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}]}, {"timestamp": 1597807509, "sha": "8579a5f7", "message": "fix(test/norm_cast): fix(?) test (#3859)", "changes": [{"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": []}]}, {"timestamp": 1597787405, "sha": "425aee91", "message": "feat(analysis/calculus) : L'Hôpital's rule, 0/0 case (#3740)\nThis proves several forms of L'Hôpital's rule for computing 0/0 indeterminate forms, based on the proof given here : [Wikibooks](https://en.wikibooks.org/wiki/Calculus/L%27H%C3%B4pital%27s_Rule). See module docstring for more details.", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/lhopital.lean", "changes": [["add", "theorem", "lhopital_zero_at_bot", ["deriv"]], ["add", "theorem", "lhopital_zero_at_bot_on_Iio", ["deriv"]], ["add", "theorem", "lhopital_zero_at_top", ["deriv"]], ["add", "theorem", "lhopital_zero_at_top_on_Ioi", ["deriv"]], ["add", "theorem", "lhopital_zero_left_on_Ioo", ["deriv"]], ["add", "theorem", "lhopital_zero_nhds'", ["deriv"]], ["add", "theorem", "lhopital_zero_nhds", ["deriv"]], ["add", "theorem", "lhopital_zero_nhds_left", ["deriv"]], ["add", "theorem", "lhopital_zero_nhds_right", ["deriv"]], ["add", "theorem", "lhopital_zero_right_on_Ico", ["deriv"]], ["add", "theorem", "lhopital_zero_right_on_Ioo", ["deriv"]], ["add", "theorem", "lhopital_zero_at_bot", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_at_bot_on_Iio", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_at_top", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_at_top_on_Ioi", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_left_on_Ioc", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_left_on_Ioo", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_nhds'", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_nhds", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_nhds_left", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_nhds_right", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_right_on_Ico", ["has_deriv_at"]], ["add", "theorem", "lhopital_zero_right_on_Ioo", ["has_deriv_at"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "eventually_nhds_within_of_eventually_nhds", []]]}]}, {"timestamp": 1597782146, "sha": "5d2256da", "message": "feat(miu_language): a formalisation of the MIU language described by D. Hofstadter in \"Gödel, Escher, Bach\". (#3739)\nWe define an inductive type `derivable` so that `derivable x` represents the notion that the MIU string `x` is derivable in the MIU language. We show `derivable x` is equivalent to `decstr x`, viz. the condition that `x` begins with an `M`, has no `M` in its tail, and for which `count I` is congruent to 1 or 2 modulo 3.\nBy showing `decidable_pred decstr`, we deduce that `derivable` is decidable.", "changes": [{"oldPath": null, "newPath": "archive/miu_language/basic.lean", "changes": [["add", "inductive", "derivable", ["miu"]], ["add", "def", "lchar_to_miustr", ["miu"]], ["add", "def", "repr", ["miu", "miu_atom"]], ["add", "inductive", "miu_atom", ["miu"]], ["add", "def", "mrepr", ["miu", "miustr"]], ["add", "def", "miustr", ["miu"]]]}, {"oldPath": null, "newPath": "archive/miu_language/decision_nec.lean", "changes": [["add", "theorem", "count_equiv_one_or_two_mod3_of_derivable", ["miu"]], ["add", "def", "count_equiv_or_equiv_two_mul_mod3", ["miu"]], ["add", "def", "decstr", ["miu"]], ["add", "theorem", "decstr_of_der", ["miu"]], ["add", "def", "goodm", ["miu"]], ["add", "theorem", "goodm_of_derivable", ["miu"]], ["add", "theorem", "goodm_of_rule1", ["miu"]], ["add", "theorem", "goodm_of_rule2", ["miu"]], ["add", "theorem", "goodm_of_rule3", ["miu"]], ["add", "theorem", "goodm_of_rule4", ["miu"]], ["add", "theorem", "goodmi", ["miu"]], ["add", "theorem", "mod3_eq_1_or_mod3_eq_2", ["miu"]], ["add", "theorem", "not_derivable_mu", ["miu"]]]}, {"oldPath": null, "newPath": "archive/miu_language/decision_suf.lean", "changes": [["add", "theorem", "add_mod2", ["miu"]], ["add", "theorem", "base_case_suf", ["miu"]], ["add", "theorem", "count_I_eq_length_of_count_U_zero_and_neg_mem", ["miu"]], ["add", "theorem", "der_cons_repeat_I_repeat_U_append_of_der_cons_repeat_I_append", ["miu"]], ["add", "theorem", "der_of_decstr", ["miu"]], ["add", "theorem", "der_of_der_append_repeat_U_even", ["miu"]], ["add", "theorem", "der_repeat_I_of_mod3", ["miu"]], ["add", "theorem", "eq_append_cons_U_of_count_U_pos", ["miu"]], ["add", "theorem", "ind_hyp_suf", ["miu"]], ["add", "theorem", "le_pow2_and_pow2_eq_mod3", ["miu"]], ["add", "theorem", "mem_of_count_U_eq_succ", ["miu"]], ["add", "theorem", "repeat_pow_minus_append", ["miu"]]]}, {"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "exists_cons_of_ne_nil", ["list"]], ["add", "theorem", "repeat_count_eq_of_count_eq_length", ["list"]], ["add", "theorem", "tail_append_singleton_of_ne_nil", ["list"]]]}]}, {"timestamp": 1597770891, "sha": "0854e839", "message": "chore(algebra/euclidean_domain): docstrings (#3816)", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["mod", "theorem", "div_add_mod", ["euclidean_domain"]], ["mod", "theorem", "div_self", ["euclidean_domain"]], ["mod", "theorem", "div_zero", ["euclidean_domain"]], ["mod", "theorem", "dvd_gcd", ["euclidean_domain"]], ["mod", "theorem", "dvd_lcm_left", ["euclidean_domain"]], ["mod", "theorem", "dvd_lcm_right", ["euclidean_domain"]], ["mod", "theorem", "dvd_mod_iff", ["euclidean_domain"]], ["mod", "theorem", "eq_div_of_mul_eq_left", ["euclidean_domain"]], ["mod", "theorem", "eq_div_of_mul_eq_right", ["euclidean_domain"]], ["mod", "theorem", "induction", ["euclidean_domain", "gcd"]], ["mod", "def", "gcd", ["euclidean_domain"]], ["mod", "def", "gcd_a", ["euclidean_domain"]], ["mod", "def", "gcd_b", ["euclidean_domain"]], ["mod", "theorem", "gcd_dvd", ["euclidean_domain"]], ["mod", "theorem", "gcd_dvd_left", ["euclidean_domain"]], ["mod", "theorem", "gcd_dvd_right", ["euclidean_domain"]], ["mod", "theorem", "gcd_eq_gcd_ab", ["euclidean_domain"]], ["mod", "theorem", "gcd_eq_left", ["euclidean_domain"]], ["mod", "theorem", "gcd_mul_lcm", ["euclidean_domain"]], ["mod", "theorem", "gcd_one_left", ["euclidean_domain"]], ["mod", "theorem", "gcd_self", ["euclidean_domain"]], ["mod", "theorem", "gcd_val", ["euclidean_domain"]], ["mod", "theorem", "gcd_zero_left", ["euclidean_domain"]], ["mod", "theorem", "gcd_zero_right", ["euclidean_domain"]], ["mod", "def", "lcm", ["euclidean_domain"]], ["mod", "theorem", "lcm_dvd", ["euclidean_domain"]], ["mod", "theorem", "lcm_dvd_iff", ["euclidean_domain"]], ["mod", "theorem", "lcm_eq_zero_iff", ["euclidean_domain"]], ["mod", "theorem", "lcm_zero_left", ["euclidean_domain"]], ["mod", "theorem", "lcm_zero_right", ["euclidean_domain"]], ["mod", "theorem", "lt_one", ["euclidean_domain"]], ["mod", "theorem", "mod_eq_sub_mul_div", ["euclidean_domain"]], ["mod", "theorem", "mod_eq_zero", ["euclidean_domain"]], ["mod", "theorem", "mod_lt", ["euclidean_domain"]], ["mod", "theorem", "mod_one", ["euclidean_domain"]], ["mod", "theorem", "mod_self", ["euclidean_domain"]], ["mod", "theorem", "mod_zero", ["euclidean_domain"]], ["mod", "theorem", "mul_div_assoc", ["euclidean_domain"]], ["mod", "theorem", "mul_div_cancel", ["euclidean_domain"]], ["mod", "theorem", "mul_div_cancel_left", ["euclidean_domain"]], ["mod", "theorem", "mul_right_not_lt", ["euclidean_domain"]], ["mod", "theorem", "val_dvd_le", ["euclidean_domain"]], ["mod", "def", "xgcd", ["euclidean_domain"]], ["mod", "def", "xgcd_aux", ["euclidean_domain"]], ["mod", "theorem", "xgcd_aux_P", ["euclidean_domain"]], ["mod", "theorem", "xgcd_aux_fst", ["euclidean_domain"]], ["mod", "theorem", "xgcd_aux_rec", ["euclidean_domain"]], ["mod", "theorem", "xgcd_aux_val", ["euclidean_domain"]], ["mod", "theorem", "xgcd_val", ["euclidean_domain"]], ["mod", "theorem", "xgcd_zero_left", ["euclidean_domain"]], ["mod", "theorem", "zero_div", ["euclidean_domain"]], ["mod", "theorem", "zero_mod", ["euclidean_domain"]]]}]}, {"timestamp": 1597765073, "sha": "78770333", "message": "chore(logic/basic): `and_iff_left/right_iff_imp`, `or.right_comm` (#3854)\nAlso add `@[simp]` to `forall_bool` and `exists_bool`", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["mod", "theorem", "exists_bool", ["bool"]], ["mod", "theorem", "forall_bool", ["bool"]]]}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "and_iff_left_iff_imp", []], ["add", "theorem", "and_iff_right_iff_imp", []], ["add", "theorem", "right_comm", ["or"]]]}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "test/qpf.lean", "newPath": "test/qpf.lean", "changes": []}]}, {"timestamp": 1597765067, "sha": "cb4a5a24", "message": "doc(field_theory/tower): correct docstring (#3853)", "changes": [{"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": [["mod", "theorem", "dim_mul_dim", []]]}]}, {"timestamp": 1597759294, "sha": "9a705331", "message": "feat(data/option/basic): add ne_none_iff_exists (#3856)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "ne_none_iff_exists'", ["option"]], ["add", "theorem", "ne_none_iff_exists", ["option"]]]}]}, {"timestamp": 1597746522, "sha": "67549d93", "message": "feat(order/filter/at_top_bot): add `at_bot` versions for (almost) all `at_top` lemmas (#3845)\nThere are a few lemmas I ignored, either because I thought a `at_bot` version wouldn't be useful (e.g subsequence lemmas), because there is no \"order inversing\" equivalent of `monotone` (I think ?), or because I just didn't understand the statement so I was unable to tell if it was useful or not.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "at_bot_basis'", ["filter"]], ["add", "theorem", "at_bot_basis", ["filter"]], ["add", "theorem", "at_bot_countable_basis", ["filter"]], ["add", "theorem", "at_bot_ne_bot", ["filter"]], ["add", "theorem", "exists_forall_of_at_bot", ["filter", "eventually"]], ["add", "theorem", "eventually_at_bot", ["filter"]], ["add", "theorem", "eventually_le_at_bot", ["filter"]], ["add", "theorem", "exists_le_of_tendsto_at_bot", ["filter"]], ["add", "theorem", "exists_lt_of_tendsto_at_bot", ["filter"]], ["add", "theorem", "forall_exists_of_at_bot", ["filter", "frequently"]], ["add", "theorem", "frequently_at_bot'", ["filter"]], ["add", "theorem", "frequently_at_bot", ["filter"]], ["add", "theorem", "frequently_low_scores", ["filter"]], ["add", "theorem", "inf_map_at_bot_ne_bot_iff", ["filter"]], ["add", "theorem", "is_countably_generated_at_bot", ["filter"]], ["add", "theorem", "low_scores", ["filter"]], ["add", "theorem", "map_at_bot_eq", ["filter"]], ["add", "theorem", "map_at_bot_eq_of_gc", ["filter"]], ["add", "theorem", "mem_at_bot_sets", ["filter"]], ["add", "theorem", "at_bot_eq", ["filter", "order_bot"]], ["add", "theorem", "prod_at_bot_at_bot_eq", ["filter"]], ["add", "theorem", "prod_map_at_bot_eq", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_const_left", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_const_right", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_left_of_ge'", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_left_of_ge", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_nonpos_left'", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_nonpos_left", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_nonpos_right'", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_nonpos_right", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_right_of_ge'", ["filter"]], ["add", "theorem", "tendsto_at_bot_add_right_of_ge", ["filter"]], ["add", "theorem", "tendsto_at_bot_at_bot_iff_of_monotone", ["filter"]], ["add", "theorem", "tendsto_at_bot_at_bot_of_monotone'", ["filter"]], ["add", "theorem", "tendsto_at_bot_at_bot_of_monotone", ["filter"]], ["add", "theorem", "tendsto_at_bot_embedding", ["filter"]], ["add", "theorem", "tendsto_at_bot_mono'", ["filter"]], ["add", "theorem", "tendsto_at_bot_mono", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_add_bdd_below_left'", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_add_bdd_below_left", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_add_bdd_below_right'", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_add_bdd_below_right", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_add_const_left", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_add_const_right", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_monotone_of_filter", ["filter"]], ["add", "theorem", "tendsto_at_bot_of_monotone_of_subseq", ["filter"]], ["add", "theorem", "tendsto_at_bot_principal", ["filter"]], ["add", "theorem", "tendsto_at_bot_pure", ["filter"]], ["add", "theorem", "unbounded_of_tendsto_at_bot'", ["filter"]], ["add", "theorem", "unbounded_of_tendsto_at_bot", ["filter"]], ["add", "theorem", "unbounded_of_tendsto_at_top'", ["filter"]]]}]}, {"timestamp": 1597740302, "sha": "67e0019b", "message": "refactor(topology/metric_space/baire): use choose! in Baire theorem (#3852)\nUse `choose!` in the proof of Baire theorem.", "changes": [{"oldPath": "src/tactic/choose.lean", "newPath": "src/tactic/choose.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}]}, {"timestamp": 1597740300, "sha": "65382743", "message": "chore(data/set/finite): explicit `f` in `finset.preimage s f hf` (#3851)\nOtherwise pretty printer shows just `finset.preimage s _`.", "changes": [{"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "monotone_preimage", ["finset"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}]}, {"timestamp": 1597740298, "sha": "c3561489", "message": "feat(category_theory/abelian): pseudoelements and a four lemma (#3803)", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "theorem", "image_ι_eq_image_ι", ["category_theory", "abelian"]], ["add", "theorem", "kernel_cokernel_eq_image_ι", ["category_theory", "abelian"]]]}, {"oldPath": null, "newPath": "src/category_theory/abelian/diagram_lemmas/four.lean", "changes": [["add", "theorem", "mono_of_epi_of_mono_of_mono", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/abelian/exact.lean", "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "def", "is_limit_image", ["category_theory", "abelian"]]]}, {"oldPath": null, "newPath": "src/category_theory/abelian/pseudoelements.lean", "changes": [["add", "def", "app", ["category_theory", "abelian"]], ["add", "theorem", "app_hom", ["category_theory", "abelian"]], ["add", "def", "pseudo_equal", ["category_theory", "abelian"]], ["add", "theorem", "pseudo_equal_refl", ["category_theory", "abelian"]], ["add", "theorem", "pseudo_equal_symm", ["category_theory", "abelian"]], ["add", "theorem", "pseudo_equal_trans", ["category_theory", "abelian"]], ["add", "theorem", "apply_eq_zero_of_comp_eq_zero", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "apply_zero", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "comp_apply", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "comp_comp", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "epi_of_pseudo_surjective", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "eq_zero_iff", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "exact_of_pseudo_exact", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "hom_to_fun", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "mono_of_zero_of_map_zero", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "object_to_sort", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "over_coe_def", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "over_to_sort", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "pseudo_apply", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_apply_aux", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_apply_mk", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_exact_of_exact", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_injective_of_mono", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_pullback", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_surjective_of_epi", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "pseudo_zero", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_zero_aux", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_zero_def", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "pseudo_zero_iff", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "setoid", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "sub_of_eq_image", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "zero_apply", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "zero_eq_zero'", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "zero_eq_zero", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "zero_morphism_ext'", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "zero_morphism_ext", ["category_theory", "abelian", "pseudoelement"]], ["add", "theorem", "zero_of_map_zero", ["category_theory", "abelian", "pseudoelement"]], ["add", "def", "pseudoelement", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "image_ι_comp_eq_zero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["add", "def", "coe_from_hom", ["category_theory", "over"]], ["add", "theorem", "coe_hom", ["category_theory", "over"]]]}]}, {"timestamp": 1597734405, "sha": "04948074", "message": "feat(algebra/ordered_*): cleanup and projection notation (#3850)\nAlso add a few new projection notations.", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "mul_le_mul_three", []], ["mod", "theorem", "zero_lt_coe", ["with_top"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "mul_le_mul", ["canonically_ordered_semiring"]], ["mod", "theorem", "zero_lt_one", ["canonically_ordered_semiring"]], ["mod", "theorem", "mul_lt_mul", []], ["mod", "theorem", "one_le_two", []], ["del", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_semiring"]], ["del", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_semiring"]]]}]}, {"timestamp": 1597711601, "sha": "cd7c2287", "message": "chore(scripts): update nolints.txt (#3848)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1597699637, "sha": "b68702e6", "message": "chore(field_theory/tower): generalize tower law to modules (#3844)", "changes": [{"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}]}, {"timestamp": 1597699635, "sha": "3ea8e280", "message": "feat(tactic/choose): derive local nonempty instances (#3842)\nThis allows `choose!` to work even in cases like `{A : Type} (p : A -> Prop) (h : ∀ x : A, p x → ∃ y : A, p y)`, where we don't know that `A` is nonempty because it is generic, but it can be derived from the inhabitance of other variables in the context of the `∃ y : A` statement. As requested on zulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/non.20dependent.20chooser/near/207126587", "changes": [{"oldPath": "src/tactic/choose.lean", "newPath": "src/tactic/choose.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "test/choose.lean", "newPath": "test/choose.lean", "changes": []}]}, {"timestamp": 1597699634, "sha": "f77530e9", "message": "feat(ring_theory/localization): Generalize theorems about localization over an integral domain (#3780)\nA number of theorems about the `fraction_map` from an integral domain to its field of fractions can be generalized to apply to any `localization_map` that were the localization set doesn't contain any zero divisors. The main use for this is to show that localizing an integral domain at any set of non-zero elements is an integral domain, were previously this was only proven for the field of fractions.\nI made `le_non_zero_divisors` a class so that the integral domain instance can be synthesized automatically once you show that zero isn't in the localization set, but it could be left as just a proposition instead if that seems unnecessary.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "is_unit_map_of_injective", ["fraction_map"]], ["add", "theorem", "le_non_zero_divisors_of_domain", []], ["add", "theorem", "injective", ["localization_map"]], ["add", "def", "integral_domain_localization", ["localization_map"]], ["add", "def", "integral_domain_of_le_non_zero_divisors", ["localization_map"]], ["add", "theorem", "to_map_eq_zero_iff", ["localization_map"]]]}]}, {"timestamp": 1597697004, "sha": "f818acbe", "message": "feat(analysis/normed_space): generalize corollaries of Hahn-Banach (#3658)", "changes": [{"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["mod", "theorem", "inclusion_in_double_dual_isometry", ["normed_space"]], ["mod", "theorem", "norm_le_dual_bound", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["mod", "theorem", "coord_norm'", []], ["del", "theorem", "coord_self'", []], ["mod", "theorem", "exists_dual_vector'", []], ["mod", "theorem", "exists_dual_vector", []], ["add", "theorem", "norm'_def", []], ["add", "theorem", "norm_norm'", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "coord_self", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1597685617, "sha": "f8bf0016", "message": "fix(ring_theory/localization): remove coe_submodule instance (#3832)\nThis coe can loop. See zulip discussion at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Unknown.20error.20while.20type-checking.20with.20.60use.60/near/207089095", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["mod", "theorem", "coe_coe_ideal", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_coe", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_zero_iff", ["ring", "fractional_ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "coe_submodule", ["localization_map"]], ["del", "theorem", "mem_coe", ["localization_map"]], ["add", "theorem", "mem_coe_submodule", ["localization_map"]]]}]}, {"timestamp": 1597683555, "sha": "472251b0", "message": "feat(algebra): define linear recurrences and prove basic lemmas about them (#3829)\nWe define \"linear recurrences\", i.e assertions of the form `∀ n : ℕ, u (n + d) = a 0 * u n + a 1 * u (n+1) + ... + a (d-1) * u (n+d-1)`, and we introduce basic related lemmas and definitions (solution space, auxiliary polynomial). Currently, the most advanced theorem is : `q ^ n` is a solution iff `q` is a root of the auxiliary polynomial.", "changes": [{"oldPath": null, "newPath": "src/algebra/linear_recurrence.lean", "changes": [["add", "def", "char_poly", ["linear_recurrence"]], ["add", "theorem", "eq_mk_of_is_sol_of_eq_init'", ["linear_recurrence"]], ["add", "theorem", "eq_mk_of_is_sol_of_eq_init", ["linear_recurrence"]], ["add", "theorem", "geom_sol_iff_root_char_poly", ["linear_recurrence"]], ["add", "theorem", "is_sol_iff_mem_sol_space", ["linear_recurrence"]], ["add", "theorem", "is_sol_mk_sol", ["linear_recurrence"]], ["add", "def", "is_solution", ["linear_recurrence"]], ["add", "def", "mk_sol", ["linear_recurrence"]], ["add", "theorem", "mk_sol_eq_init", ["linear_recurrence"]], ["add", "theorem", "sol_eq_of_eq_init", ["linear_recurrence"]], ["add", "def", "sol_space", ["linear_recurrence"]], ["add", "theorem", "sol_space_dim", ["linear_recurrence"]], ["add", "def", "to_init", ["linear_recurrence"]], ["add", "def", "tuple_succ", ["linear_recurrence"]], ["add", "structure", "linear_recurrence", []]]}]}, {"timestamp": 1597678134, "sha": "3edf2b27", "message": "feat(ring_theory/DVR,padics/padic_integers): characterize ideals of DVRs, apply to `Z_p` (#3827)\nAlso introduce the p-adic valuation on `Z_p`, stolen from the perfectoid project.\nCoauthored by: Johan Commelin ", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "dvd_pow", []]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["add", "theorem", "ideal_eq_span_pow_p", ["padic_int"]], ["add", "theorem", "irreducible_p", ["padic_int"]], ["add", "theorem", "maximal_ideal_eq_span_p", ["padic_int"]], ["add", "def", "mk_units", ["padic_int"]], ["add", "theorem", "mk_units_eq", ["padic_int"]], ["add", "theorem", "norm_eq_pow_val", ["padic_int"]], ["add", "theorem", "norm_units", ["padic_int"]], ["add", "theorem", "p_dvd_of_norm_lt_one", ["padic_int"]], ["add", "theorem", "p_nonnunit", ["padic_int"]], ["add", "theorem", "prime_p", ["padic_int"]], ["add", "def", "unit_coeff", ["padic_int"]], ["add", "theorem", "unit_coeff_coe", ["padic_int"]], ["add", "theorem", "unit_coeff_spec", ["padic_int"]], ["add", "def", "valuation", ["padic_int"]], ["add", "theorem", "valuation_nonneg", ["padic_int"]], ["add", "theorem", "valuation_one", ["padic_int"]], ["add", "theorem", "valuation_p", ["padic_int"]], ["add", "theorem", "valuation_zero", ["padic_int"]], ["add", "theorem", "norm_p", ["padic_norm_z"]], ["add", "theorem", "norm_p_pow", ["padic_norm_z"]]]}, {"oldPath": "src/ring_theory/discrete_valuation_ring.lean", "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["add", "theorem", "associated_pow_irreducible", ["discrete_valuation_ring"]], ["add", "theorem", "aux_pid_of_ufd_of_unique_irreducible", ["discrete_valuation_ring"]], ["add", "theorem", "of_ufd_of_unique_irreducible", ["discrete_valuation_ring", "has_unit_mul_pow_irreducible_factorization"]], ["add", "theorem", "unique_irreducible", ["discrete_valuation_ring", "has_unit_mul_pow_irreducible_factorization"]], ["add", "def", "has_unit_mul_pow_irreducible_factorization", ["discrete_valuation_ring"]], ["add", "theorem", "ideal_eq_span_pow_irreducible", ["discrete_valuation_ring"]], ["del", "theorem", "iff_PID_with_one_nonzero_prime", ["discrete_valuation_ring"]], ["add", "theorem", "iff_pid_with_one_nonzero_prime", ["discrete_valuation_ring"]], ["del", "theorem", "irreducible_iff_uniformiser", ["discrete_valuation_ring"]], ["add", "theorem", "irreducible_iff_uniformizer", ["discrete_valuation_ring"]], ["add", "theorem", "of_has_unit_mul_pow_irreducible_factorization", ["discrete_valuation_ring"]], ["add", "theorem", "of_ufd_of_unique_irreducible", ["discrete_valuation_ring"]]]}]}, {"timestamp": 1597678132, "sha": "d4cb2372", "message": "feat(algebra/module): define ordered semimodules and generalize convexity of functions (#3728)", "changes": [{"oldPath": null, "newPath": "src/algebra/module/ordered.lean", "changes": [["add", "theorem", "smul_le_smul_of_nonneg", []], ["add", "theorem", "smul_lt_smul_of_pos", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "add", ["convex_on"]], ["mod", "theorem", "comp_affine_map", ["convex_on"]], ["mod", "theorem", "comp_linear_map", ["convex_on"]], ["mod", "theorem", "convex_epigraph", ["convex_on"]], ["mod", "theorem", "convex_le", ["convex_on"]], ["mod", "theorem", "convex_lt", ["convex_on"]], ["mod", "theorem", "le_on_segment'", ["convex_on"]], ["mod", "theorem", "le_on_segment", ["convex_on"]], ["mod", "theorem", "smul", ["convex_on"]], ["mod", "theorem", "subset", ["convex_on"]], ["mod", "theorem", "translate_left", ["convex_on"]], ["mod", "theorem", "translate_right", ["convex_on"]], ["mod", "def", "convex_on", []], ["mod", "theorem", "convex_on_const", []], ["mod", "theorem", "convex_on_iff_convex_epigraph", []], ["del", "theorem", "convex_on_iff_div:", []], ["add", "theorem", "convex_on_iff_div", []], ["mod", "theorem", "convex_on_of_lt", ["linear_order"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["mod", "theorem", "convex_on_fpow", []], ["mod", "theorem", "convex_on_pow", []], ["mod", "theorem", "convex_on_pow_of_even", []], ["mod", "theorem", "convex_on_rpow", []]]}]}, {"timestamp": 1597672744, "sha": "bc72d903", "message": "refactor(logic/basic): classical -> root, root -> decidable (#3812)\nThis moves all logic lemmas with `decidable` instances into the `decidable` namespace, and moves or adds classical versions of these to the root namespace. This change hits a lot of files, mostly to remove the `classical.` prefix on explicit references to classical lemmas.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": []}, {"oldPath": "src/data/finsupp/basic.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "mem_perms_of_list_of_mem", []]]}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": []}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "and_iff_not_or_not", []], ["add", "theorem", "by_contra", []], ["mod", "theorem", "by_contradiction", []], ["del", "theorem", "iff_iff_not_or_and_or_not", ["classical"]], ["del", "theorem", "or_not", ["classical"]], ["add", "theorem", "iff_iff_not_or_and_or_not", ["decidable"]], ["add", "theorem", "em", []], ["mod", "theorem", "forall_or_distrib_left", []], ["mod", "theorem", "forall_or_distrib_right", []], ["mod", "theorem", "iff_iff_and_or_not_and_not", []], ["add", "theorem", "iff_iff_not_or_and_or_not", []], ["mod", "theorem", "iff_not_comm", []], ["mod", "theorem", "imp_iff_not_or", []], ["mod", "theorem", "imp_imp_imp", []], ["mod", "theorem", "imp_or_distrib'", []], ["mod", "theorem", "imp_or_distrib", []], ["add", "theorem", "decidable_imp_symm", ["not"]], ["mod", "theorem", "imp_symm", ["not"]], ["del", "theorem", "not_and_distrib'", []], ["mod", "theorem", "not_and_distrib", []], ["mod", "theorem", "not_and_not_right", []], ["mod", "theorem", "not_ball", []], ["mod", "theorem", "not_exists_not", []], ["mod", "theorem", "not_forall", []], ["mod", "theorem", "not_forall_not", []], ["mod", "theorem", "not_iff", []], ["mod", "theorem", "not_iff_comm", []], ["mod", "theorem", "not_iff_not", []], ["mod", "theorem", "not_imp", []], ["mod", "theorem", "not_imp_comm", []], ["mod", "theorem", "not_imp_not", []], ["mod", "theorem", "not_not", []], ["mod", "theorem", "not_or_of_imp", []], ["mod", "theorem", "of_not_imp", []], ["mod", "theorem", "of_not_not", []], ["mod", "theorem", "or_iff_not_and_not", []], ["mod", "theorem", "or_iff_not_imp_left", []], ["mod", "theorem", "or_iff_not_imp_right", []], ["add", "theorem", "or_not", []], ["mod", "theorem", "peirce", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "test/qpf.lean", "newPath": "test/qpf.lean", "changes": []}]}, {"timestamp": 1597666500, "sha": "1a8f6bf9", "message": "feat(lint): improved ge_or_gt linter (#3810)\nThe linter will now correctly accepts occurrences of `f (≥)` and `∃ x ≥ t, b`\nThe linter will still raise a false positive on `∃ x y ≥ t, b` (with 2+ bound variables in a single binder that involves `>/≥`)\nIn contrast to the previous version of the linter, this one *does* check hypotheses.\nThis should reduce the `@[nolint ge_or_gt]` attributes from ~160 to ~10.", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "insert_nth_remove_nth_of_ge", ["list"]]]}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/dynamics/periodic_pts.lean", "newPath": "src/dynamics/periodic_pts.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "Icc_mem_nhds", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1597661174, "sha": "2a8d7f3e", "message": "chore(analysis/normed_space/banach): correct typo (#3840)\nCorrect a typo from an old global replace.", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}]}, {"timestamp": 1597658071, "sha": "41cbfdc3", "message": "chore(analysis/hofer): use the new choose! (#3839)", "changes": [{"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}]}, {"timestamp": 1597655462, "sha": "626de475", "message": "feat(linear_algebra/affine_space/combination): centroid (#3825)\nDefine the centroid of points in an affine space (given by an indexed\nfamily with a `finset` of the index type), when the underlying ring\n`k` is a division ring, and prove a few lemmas about cases where this\ndoes not involve division by zero. For example, the centroid of a\ntriangle or simplex, although none of the definitions and lemmas here\nrequire affine independence so they are all stated more generally.\n(The sort of things that would be appropriate to state specifically\nfor the case of a simplex would be e.g. defining medians and showing\nthat the centroid is the intersection of any two medians.)", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "centroid_mem_affine_span_of_card_eq_add_one", []], ["add", "theorem", "centroid_mem_affine_span_of_card_ne_zero", []], ["add", "theorem", "centroid_mem_affine_span_of_cast_card_ne_zero", []], ["add", "theorem", "centroid_mem_affine_span_of_nonempty", []], ["add", "def", "centroid", ["finset"]], ["add", "theorem", "centroid_def", ["finset"]], ["add", "theorem", "centroid_singleton", ["finset"]], ["add", "def", "centroid_weights", ["finset"]], ["add", "theorem", "centroid_weights_apply", ["finset"]], ["add", "theorem", "centroid_weights_eq_const", ["finset"]], ["add", "theorem", "sum_centroid_weights_eq_one_of_card_eq_add_one", ["finset"]], ["add", "theorem", "sum_centroid_weights_eq_one_of_card_ne_zero", ["finset"]], ["add", "theorem", "sum_centroid_weights_eq_one_of_cast_card_ne_zero", ["finset"]], ["add", "theorem", "sum_centroid_weights_eq_one_of_nonempty", ["finset"]]]}]}, {"timestamp": 1597639499, "sha": "6773f526", "message": "feat(category_theory): limits in the category of indexed families (#3737)\nA continuation of #3735, hopefully useful in #3638.", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/pi.lean", "changes": [["add", "def", "cone_comp_eval", ["category_theory", "pi"]], ["add", "def", "cone_of_cone_comp_eval", ["category_theory", "pi"]], ["add", "def", "cone_of_cone_eval_is_limit", ["category_theory", "pi"]], ["add", "def", "has_limit_of_has_limit_comp_eval", ["category_theory", "pi"]]]}, {"oldPath": "src/category_theory/pi/basic.lean", "newPath": "src/category_theory/pi/basic.lean", "changes": [["add", "def", "pi'", ["category_theory"]]]}]}, {"timestamp": 1597637413, "sha": "b0b5cd45", "message": "feat(geometry/euclidean): circumradius simp lemmas (#3834)\nMark `dist_circumcenter_eq_circumradius` as a `simp` lemma. Also add\na variant of that lemma where the distance is the other way round so\n`simp` can work with both forms.", "changes": [{"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["add", "theorem", "dist_circumcenter_eq_circumradius'", ["affine", "simplex"]], ["mod", "theorem", "dist_circumcenter_eq_circumradius", ["affine", "simplex"]]]}]}, {"timestamp": 1597633398, "sha": "43337f7e", "message": "chore(data/nat/digits): refactor proof of `last_digit_ne_zero` (#3836)\nI thoroughly misunderstood why my prior attempts for #3544 weren't working. I've refactored the proof so the `private` lemma is no longer necessary.", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}]}, {"timestamp": 1597627768, "sha": "c1fece37", "message": "fix(tactic/refine_struct): accept synonyms for `structure` types (#3828)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/refine_struct.lean", "newPath": "test/refine_struct.lean", "changes": [["add", "def", "my_semigroup", []]]}]}, {"timestamp": 1597625090, "sha": "56ed455a", "message": "chore(scripts): update nolints.txt (#3835)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1597610774, "sha": "40214fcb", "message": "feat(ring_theory/derivations): stab on derivations (#3688)", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "eq_one_of_left_cancel_mul_self", []], ["add", "theorem", "eq_one_of_mul_self_left_cancel", []], ["add", "theorem", "eq_one_of_mul_self_right_cancel", []], ["add", "theorem", "eq_one_of_right_cancel_mul_self", []]]}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["del", "def", "of_associative_algebra", ["lie_algebra"]], ["del", "def", "of_associative_ring", ["lie_ring"]], ["del", "def", "lie_algebra", ["matrix"]], ["del", "def", "lie_ring", ["matrix"]], ["del", "theorem", "add_left", ["ring_commutator"]], ["del", "theorem", "add_right", ["ring_commutator"]], ["del", "theorem", "alternate", ["ring_commutator"]], ["add", "theorem", "commutator", ["ring_commutator"]], ["del", "def", "commutator", ["ring_commutator"]], ["del", "theorem", "jacobi", ["ring_commutator"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "is_linear_map_smul", ["is_linear_map"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "smul_algebra_right", ["continuous_linear_map"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["mod", "theorem", "smul_assoc", []]]}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "algebra_compatible_smul", []], ["mod", "def", "linear_map_algebra_module", []], ["add", "theorem", "map_smul_eq_smul_map", []], ["del", "def", "restrict_scalars'", ["module"]], ["del", "def", "restrict_scalars", ["module"]], ["del", "theorem", "restrict_scalars_smul_def", ["module"]], ["add", "def", "restrict_scalars'", ["semimodule"]], ["add", "def", "restrict_scalars", ["semimodule"]], ["add", "theorem", "restrict_scalars_smul_def", ["semimodule"]], ["mod", "def", "smul_algebra_right", []], ["del", "theorem", "smul_algebra_smul", []], ["mod", "theorem", "smul_algebra_smul_comm", []], ["mod", "def", "restrict_scalars", ["subspace"]]]}, {"oldPath": null, "newPath": "src/ring_theory/derivation.lean", "changes": [["add", "theorem", "Rsmul_apply", ["derivation"]], ["add", "theorem", "add_apply", ["derivation"]], ["add", "theorem", "coe_fn_coe", ["derivation"]], ["add", "theorem", "coe_injective", ["derivation"]], ["add", "def", "commutator", ["derivation"]], ["add", "theorem", "commutator_apply", ["derivation"]], ["add", "theorem", "commutator_coe_linear_map", ["derivation"]], ["add", "theorem", "ext", ["derivation"]], ["add", "theorem", "leibniz", ["derivation"]], ["add", "theorem", "map_add", ["derivation"]], ["add", "theorem", "map_algebra_map", ["derivation"]], ["add", "theorem", "map_neg", ["derivation"]], ["add", "theorem", "map_one_eq_zero", ["derivation"]], ["add", "theorem", "map_smul", ["derivation"]], ["add", "theorem", "map_sub", ["derivation"]], ["add", "theorem", "map_zero", ["derivation"]], ["add", "theorem", "smul_apply", ["derivation"]], ["add", "theorem", "smul_to_linear_map_coe", ["derivation"]], ["add", "theorem", "to_fun_eq_coe", ["derivation"]], ["add", "structure", "derivation", []], ["add", "def", "comp_der", ["linear_map"]], ["add", "theorem", "comp_der_apply", ["linear_map"]]]}]}, {"timestamp": 1597603735, "sha": "4f2c9585", "message": "feat(tactic/interactive/choose): nondependent choose (#3806)\nNow you can write `choose!` to eliminate propositional arguments from the chosen functions.\n```\nexample (h : ∀n m : ℕ, n < m → ∃i j, m = n + i ∨ m + j = n) : true :=\nbegin\n choose! i j h using h,\n guard_hyp i := ℕ → ℕ → ℕ,\n guard_hyp j := ℕ → ℕ → ℕ,\n guard_hyp h := ∀ (n m : ℕ), n < m → m = n + i n m ∨ m + j n m = n,\n trivial\nend\n```", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "sometimes_eq", ["function"]], ["add", "theorem", "sometimes_spec", ["function"]]]}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/choose.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/choose.lean", "newPath": "test/choose.lean", "changes": []}]}, {"timestamp": 1597598155, "sha": "3d4f085e", "message": "chore(ring_theory/ideal): docstring for Krull's theorem and a special case (#3831)", "changes": [{"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "exists_maximal", ["ideal"]]]}]}, {"timestamp": 1597585190, "sha": "ee74e7f6", "message": "feat(analysis/special_functions/exp_log): `tendsto real.log at_top at_top` (#3826)", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "tendsto_log_at_top", ["real"]]]}]}, {"timestamp": 1597581717, "sha": "863bf793", "message": "feat(data/padics): more valuations, facts about norms (#3790)\nAssorted lemmas about the `p`-adics. @jcommelin and I are adding algebraic structure here as part of the Witt vector development.\nSome of these declarations are stolen shamelessly from the perfectoid project.\nCoauthored by: Johan Commelin ", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["add", "theorem", "padic_norm_p", ["padic_norm"]], ["add", "theorem", "padic_norm_p_lt_one", ["padic_norm"]], ["add", "theorem", "padic_norm_p_lt_one_of_prime", ["padic_norm"]], ["add", "theorem", "padic_norm_p_of_prime", ["padic_norm"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "cast_eq_of_rat_of_int", ["padic"]], ["mod", "theorem", "cast_eq_of_rat_of_nat", ["padic"]], ["add", "theorem", "norm_eq_pow_val", ["padic"]], ["add", "def", "valuation", ["padic"]], ["add", "theorem", "valuation_one", ["padic"]], ["add", "theorem", "valuation_p", ["padic"]], ["add", "theorem", "valuation_zero", ["padic"]], ["add", "theorem", "norm_p", ["padic_norm_e"]], ["add", "theorem", "norm_p_lt_one", ["padic_norm_e"]], ["add", "theorem", "norm_p_pow", ["padic_norm_e"]], ["add", "theorem", "norm_eq_pow_val", ["padic_seq"]], ["del", "theorem", "norm_image", ["padic_seq"]], ["add", "theorem", "norm_values_discrete", ["padic_seq"]], ["add", "theorem", "val_eq_iff_norm_eq", ["padic_seq"]], ["add", "def", "valuation", ["padic_seq"]]]}]}, {"timestamp": 1597577244, "sha": "a6f64343", "message": "feat(data/fin): bundled embedding (#3822)\nAdd the coercion from `fin n` to `ℕ` as a bundled embedding, an\nequivalent of `function.embedding.subtype`. Once leanprover-community/lean#359 is fixed\n(making `fin n` a subtype), this can go away as a duplicate, but until\nthen it is useful.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_fin", ["function", "embedding"]], ["add", "def", "fin", ["function", "embedding"]]]}]}, {"timestamp": 1597572533, "sha": "dda2dcd5", "message": "chore(data/*): doc strings on some definitions (#3791)\nDoc strings on definitions in `data.` which I could figure out what it does.", "changes": [{"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1597567043, "sha": "8f030356", "message": "chore(algebra/with_one): docstrings (#3817)", "changes": [{"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}]}, {"timestamp": 1597562448, "sha": "20fe4a16", "message": "feat(algebra/euclidean_domain): some cleanup (#3752)\nLower the priority of simp-lemmas which have an equivalent version in `group_with_zero`, so that the version of `group_with_zero` is found by `squeeze_simp` for types that have both structures.\nAdd docstrings\nRemove outdated comment", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["mod", "theorem", "div_self", ["euclidean_domain"]], ["mod", "theorem", "div_zero", ["euclidean_domain"]], ["mod", "theorem", "zero_div", ["euclidean_domain"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}]}, {"timestamp": 1597557927, "sha": "490d3cef", "message": "refactor(data/list/palindrome): use decidable_of_iff' (#3823)\nFollow-up to #3729.\n`decidable_of_iff'` allows for omitting the `eq.symm`.", "changes": [{"oldPath": "src/data/list/palindrome.lean", "newPath": "src/data/list/palindrome.lean", "changes": []}]}, {"timestamp": 1597557925, "sha": "62374f74", "message": "doc(data/real/card): docs and cleanup (#3815)", "changes": [{"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": [["mod", "theorem", "mk_Icc_real", ["cardinal"]], ["mod", "theorem", "mk_Ici_real", ["cardinal"]], ["mod", "theorem", "mk_Ico_real", ["cardinal"]], ["mod", "theorem", "mk_Iic_real", ["cardinal"]], ["mod", "theorem", "mk_Iio_real", ["cardinal"]], ["mod", "theorem", "mk_Ioc_real", ["cardinal"]], ["mod", "theorem", "mk_Ioi_real", ["cardinal"]], ["mod", "theorem", "mk_Ioo_real", ["cardinal"]], ["mod", "theorem", "mk_real", ["cardinal"]], ["mod", "theorem", "mk_univ_real", ["cardinal"]]]}]}, {"timestamp": 1597557924, "sha": "8325cf6b", "message": "feat(*): reorder implicit arguments in tsum, supr, infi (#3809)\nThis is helpful for a future version of the `ge_or_gt` linter to recognize binders: the binding type is the (implicit) argument directly before the binding body.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "def", "infi", []], ["mod", "def", "supr", []]]}, {"oldPath": "src/tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "def", "tsum", []]]}]}, {"timestamp": 1597557921, "sha": "dba30189", "message": "feat(category_theory): the category of indexed families of objects (#3735)\nPulling out a definition from #3638, and add some associated basic material.", "changes": [{"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["del", "def", "comap", ["category_theory", "graded_object"]], ["del", "def", "comap_comp", ["category_theory", "graded_object"]], ["mod", "def", "comap_eq", ["category_theory", "graded_object"]], ["del", "def", "comap_id", ["category_theory", "graded_object"]], ["del", "theorem", "comp_apply", ["category_theory", "graded_object"]], ["del", "theorem", "id_apply", ["category_theory", "graded_object"]]]}, {"oldPath": null, "newPath": "src/category_theory/pi/basic.lean", "changes": [["add", "def", "pi", ["category_theory", "functor"]], ["add", "def", "pi", ["category_theory", "nat_trans"]], ["add", "def", "comap", ["category_theory", "pi"]], ["add", "def", "comap_comp", ["category_theory", "pi"]], ["add", "def", "comap_eval_iso_eval", ["category_theory", "pi"]], ["add", "def", "comap_id", ["category_theory", "pi"]], ["add", "theorem", "comp_apply", ["category_theory", "pi"]], ["add", "def", "eval", ["category_theory", "pi"]], ["add", "theorem", "id_apply", ["category_theory", "pi"]], ["add", "def", "sum", ["category_theory", "pi"]]]}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}]}, {"timestamp": 1597557919, "sha": "3c2ed2ae", "message": "feat(topology/sheaves): construct sheaves of functions (#3608)\n# Sheaf conditions for presheaves of (continuous) functions.\nWe show that\n* `Top.sheaf_condition.to_Type`: not-necessarily-continuous functions into a type form a sheaf\n* `Top.sheaf_condition.to_Types`: in fact, these may be dependent functions into a type family\n* `Top.sheaf_condition.to_Top`: continuous functions into a topological space form a sheaf", "changes": [{"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": [["add", "def", "presheaf_to_Type", ["Top"]], ["add", "theorem", "presheaf_to_Type_map", ["Top"]], ["add", "theorem", "presheaf_to_Type_obj", ["Top"]], ["add", "def", "presheaf_to_Types", ["Top"]]]}, {"oldPath": null, "newPath": "src/topology/sheaves/sheaf_of_functions.lean", "changes": [["add", "def", "forget_continuity", ["Top", "sheaf_condition"]], ["add", "def", "to_Top", ["Top", "sheaf_condition"]], ["add", "def", "to_Type", ["Top", "sheaf_condition"]], ["add", "def", "to_Types", ["Top", "sheaf_condition"]]]}]}, {"timestamp": 1597557917, "sha": "765e4605", "message": "feat(ring_theory/polynomial/homogeneous): definition and basic props (#3223)\nThis PR also move ring_theory/polynomial.lean to\nring_theory/polynomial/basic.lean\nThis PR is part of bringing symmetric polynomials to mathlib,\nand besided that, I also expect to add binomial polynomials\nand Chebyshev polynomials in the future.\nAltogether, this motivates the starting of a ring_theory/polynomial\ndirectory.\nThe file basic.lean may need cleaning or splitting at some point.", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "coeff_eq_zero_of_total_degree_lt", ["mv_polynomial"]], ["add", "theorem", "eq_zero_iff", ["mv_polynomial"]], ["add", "theorem", "exists_coeff_ne_zero", ["mv_polynomial"]], ["add", "theorem", "ne_zero_iff", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/homogeneous.lean", "changes": [["add", "def", "homogeneous_component", ["mv_polynomial"]], ["add", "theorem", "homogeneous_component_apply", ["mv_polynomial"]], ["add", "theorem", "homogeneous_component_eq_zero'", ["mv_polynomial"]], ["add", "theorem", "homogeneous_component_eq_zero", ["mv_polynomial"]], ["add", "theorem", "homogeneous_component_is_homogeneous", ["mv_polynomial"]], ["add", "theorem", "homogeneous_component_zero", ["mv_polynomial"]], ["add", "theorem", "add", ["mv_polynomial", "is_homogeneous"]], ["add", "theorem", "coeff_eq_zero", ["mv_polynomial", "is_homogeneous"]], ["add", "theorem", "inj_right", ["mv_polynomial", "is_homogeneous"]], ["add", "theorem", "mul", ["mv_polynomial", "is_homogeneous"]], ["add", "theorem", "prod", ["mv_polynomial", "is_homogeneous"]], ["add", "theorem", "sum", ["mv_polynomial", "is_homogeneous"]], ["add", "theorem", "total_degree", ["mv_polynomial", "is_homogeneous"]], ["add", "def", "is_homogeneous", ["mv_polynomial"]], ["add", "theorem", "is_homogeneous_C", ["mv_polynomial"]], ["add", "theorem", "is_homogeneous_X", ["mv_polynomial"]], ["add", "theorem", "is_homogeneous_monomial", ["mv_polynomial"]], ["add", "theorem", "is_homogeneous_one", ["mv_polynomial"]], ["add", "theorem", "is_homogeneous_zero", ["mv_polynomial"]], ["add", "theorem", "sum_homogeneous_component", ["mv_polynomial"]]]}]}, {"timestamp": 1597553162, "sha": "b1e7fb2d", "message": "feat (category_theory/over): composition of `over.map` (#3798)\nFiltering in some defs from the topos project.\n~~Depends on #3797.~~", "changes": [{"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["add", "def", "map_comp", ["category_theory", "over"]], ["add", "def", "map_id", ["category_theory", "over"]], ["add", "def", "map_comp", ["category_theory", "under"]], ["add", "def", "map_id", ["category_theory", "under"]]]}]}, {"timestamp": 1597553160, "sha": "1037a3a7", "message": "feat(algebra/homology, category_theory/abelian, algebra/category/Module): exactness (#3784)\nWe define what it means for two maps `f` and `g` to be exact and show that for R-modules, this is the case if and only if `range f = ker g`.", "changes": [{"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": [["add", "theorem", "exact_iff", ["Module"]]]}, {"oldPath": null, "newPath": "src/algebra/homology/exact.lean", "changes": [["add", "theorem", "comp_eq_zero_of_exact", ["category_theory"]], ["add", "theorem", "fork_ι_comp_cofork_π", ["category_theory"]], ["add", "theorem", "kernel_comp_cokernel", ["category_theory"]]]}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/algebra/homology/image_to_kernel_map.lean", "newPath": "src/algebra/homology/image_to_kernel_map.lean", "changes": [["mod", "def", "image_to_kernel_map", ["category_theory"]]]}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["mod", "def", "coimage_iso_image", ["category_theory", "abelian"]], ["del", "def", "coimage_strong_epi_mono_factorisation", ["category_theory", "abelian"]], ["add", "def", "coimage_strong_epi_mono_factorisation", ["category_theory", "abelian", "coimages"]], ["mod", "theorem", "full_image_factorisation", ["category_theory", "abelian"]], ["mod", "theorem", "image_eq_image", ["category_theory", "abelian"]], ["del", "def", "image_strong_epi_mono_factorisation", ["category_theory", "abelian"]], ["add", "def", "image_strong_epi_mono_factorisation", ["category_theory", "abelian", "images"]], ["add", "def", "non_preadditive_abelian", ["category_theory", "abelian"]]]}, {"oldPath": null, "newPath": "src/category_theory/abelian/exact.lean", "changes": [["add", "theorem", "exact_iff'", ["category_theory", "abelian"]], ["add", "theorem", "exact_iff", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "comp_cocone_point_unique_up_to_iso_hom", ["category_theory", "limits", "colimit"]], ["add", "theorem", "comp_cocone_point_unique_up_to_iso_inv", ["category_theory", "limits", "colimit"]], ["add", "theorem", "comp_cocone_point_unique_up_to_iso_hom", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "comp_cocone_point_unique_up_to_iso_inv", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cone_point_unique_up_to_iso_hom_comp", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_point_unique_up_to_iso_inv_comp", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_point_unique_up_to_iso_hom_comp", ["category_theory", "limits", "limit"]], ["add", "theorem", "cone_point_unique_up_to_iso_inv_comp", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ker_le_range_iff", ["linear_map"]]]}]}, {"timestamp": 1597553158, "sha": "2c930a37", "message": "refactor(algebra/gcd_monoid, ring_theory/multiplicity): generalize normalization_domain, gcd_domain, multiplicity (#3779)\n* generalize `normalization_domain`, `gcd_domain`, `multiplicity` to not reference addition and subtraction\n* make `gcd_monoid` and `normalization_monoid` into mixins\n* add instances of `normalization_monoid` for `nat`, `associates`", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "coe_unit_eq_one", ["associates"]], ["add", "theorem", "units_eq_one", ["associates"]]]}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_monoid.lean", "changes": [["mod", "theorem", "dvd_normalize_iff", []], ["add", "theorem", "irreducible_iff_prime", ["gcd_monoid"]], ["add", "theorem", "prime_of_irreducible", ["gcd_monoid"]], ["mod", "theorem", "coe_gcd", ["int"]], ["mod", "theorem", "coe_lcm", ["int"]], ["mod", "theorem", "nat_abs_gcd", ["int"]], ["mod", "theorem", "nat_abs_lcm", ["int"]], ["add", "theorem", "norm_unit_eq_one", []], ["mod", "theorem", "norm_unit_mul_norm_unit", []], ["mod", "def", "normalize", []], ["add", "theorem", "normalize_apply", []], ["mod", "theorem", "normalize_coe_units", []], ["mod", "theorem", "normalize_dvd_iff", []], ["add", "theorem", "normalize_eq", []], ["mod", "theorem", "normalize_idem", []], ["del", "theorem", "normalize_mul", []], ["mod", "theorem", "normalize_one", []], ["mod", "theorem", "normalize_zero", []], ["add", "theorem", "units_eq_one", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["mod", "theorem", "degree_normalize", ["polynomial"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["mod", "def", "multiplicity", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["del", "def", "to_gcd_domain", ["unique_factorization_domain"]], ["add", "def", "to_gcd_monoid", ["unique_factorization_domain"]]]}]}, {"timestamp": 1597547811, "sha": "ae8abf37", "message": "chore(order/rel_iso): rename order_iso and order_embedding to rel_iso and rel_embedding (#3750)\nrenames `order_iso` and `order_embedding`, to make it clear they apply to all binary relations\nmakes room for a new definition of `order_embedding` that will deal with order instances", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/data/equiv/encodable/basic.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": [["del", "def", "order_embedding_to_fun", ["finsupp"]], ["del", "theorem", "order_embedding_to_fun_apply", ["finsupp"]], ["del", "def", "order_iso_multiset", ["finsupp"]], ["del", "theorem", "order_iso_multiset_apply", ["finsupp"]], ["del", "theorem", "order_iso_multiset_symm_apply", ["finsupp"]], ["add", "def", "rel_embedding_to_fun", ["finsupp"]], ["add", "theorem", "rel_embedding_to_fun_apply", ["finsupp"]], ["add", "def", "rel_iso_multiset", ["finsupp"]], ["add", "theorem", "rel_iso_multiset_apply", ["finsupp"]], ["add", "theorem", "rel_iso_multiset_symm_apply", ["finsupp"]]]}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": [["mod", "def", "correspondence", ["setoid"]]]}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["del", "def", "order_iso", ["setoid", "partition"]], ["add", "def", "rel_iso", ["setoid", "partition"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["mod", "def", "correspondence", ["con"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "le_order_embedding", ["submodule", "comap_mkq"]], ["add", "def", "le_rel_embedding", ["submodule", "comap_mkq"]], ["del", "def", "lt_order_embedding", ["submodule", "comap_mkq"]], ["add", "def", "lt_rel_embedding", ["submodule", "comap_mkq"]], ["del", "def", "order_iso", ["submodule", "comap_mkq"]], ["add", "def", "rel_iso", ["submodule", "comap_mkq"]], ["del", "def", "le_order_embedding", ["submodule", "map_subtype"]], ["add", "def", "le_rel_embedding", ["submodule", "map_subtype"]], ["del", "def", "lt_order_embedding", ["submodule", "map_subtype"]], ["add", "def", "lt_rel_embedding", ["submodule", "map_subtype"]], ["del", "def", "order_iso", ["submodule", "map_subtype"]], ["add", "def", "rel_iso", ["submodule", "map_subtype"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["del", "theorem", "to_galois_connection", ["order_iso"]], ["add", "theorem", "to_galois_connection", ["rel_iso"]]]}, {"oldPath": "src/order/ord_continuous.lean", "newPath": "src/order/ord_continuous.lean", "changes": [["del", "theorem", "coe_to_le_order_embedding", ["left_ord_continuous"]], ["add", "theorem", "coe_to_le_rel_embedding", ["left_ord_continuous"]], ["del", "theorem", "coe_to_lt_order_embedding", ["left_ord_continuous"]], ["add", "theorem", "coe_to_lt_rel_embedding", ["left_ord_continuous"]], ["del", "def", "to_le_order_embedding", ["left_ord_continuous"]], ["add", "def", "to_le_rel_embedding", ["left_ord_continuous"]], ["del", "def", "to_lt_order_embedding", ["left_ord_continuous"]], ["add", "def", "to_lt_rel_embedding", ["left_ord_continuous"]], ["del", "theorem", "coe_to_le_order_embedding", ["right_ord_continuous"]], ["add", "theorem", "coe_to_le_rel_embedding", ["right_ord_continuous"]], ["del", "theorem", "coe_to_lt_order_embedding", ["right_ord_continuous"]], ["add", "theorem", "coe_to_lt_rel_embedding", ["right_ord_continuous"]], ["del", "def", "to_le_order_embedding", ["right_ord_continuous"]], ["add", "def", "to_le_rel_embedding", ["right_ord_continuous"]], ["del", "def", "to_lt_order_embedding", ["right_ord_continuous"]], ["add", "def", "to_lt_rel_embedding", ["right_ord_continuous"]]]}, {"oldPath": "src/order/order_iso.lean", "newPath": null, "changes": [["del", "def", "order_embedding", ["fin", "val"]], ["del", "def", "order_embedding", ["fin_fin"]], ["del", "theorem", "injective_of_increasing", []], ["del", "def", "cod_restrict", ["order_embedding"]], ["del", "theorem", "cod_restrict_apply", ["order_embedding"]], ["del", "theorem", "coe_fn_inj", ["order_embedding"]], ["del", "theorem", "coe_fn_mk", ["order_embedding"]], ["del", "theorem", "coe_fn_to_embedding", ["order_embedding"]], ["del", "theorem", "eq_preimage", ["order_embedding"]], ["del", "theorem", "injective", ["order_embedding"]], ["del", "theorem", "le_map_sup", ["order_embedding"]], ["del", "def", "lt_embedding_of_le_embedding", ["order_embedding"]], ["del", "theorem", "map_inf_le", ["order_embedding"]], ["del", "def", "of_monotone", ["order_embedding"]], ["del", "theorem", "of_monotone_coe", ["order_embedding"]], ["del", "theorem", "ord", ["order_embedding"]], ["del", "def", "preimage", ["order_embedding"]], ["del", "theorem", "refl_apply", ["order_embedding"]], ["del", "def", "rsymm", ["order_embedding"]], ["del", "theorem", "trans_apply", ["order_embedding"]], ["del", "structure", "order_embedding", []], ["del", "theorem", "apply_inv_self", ["order_iso"]], ["del", "theorem", "apply_symm_apply", ["order_iso"]], ["del", "theorem", "coe_coe_fn", ["order_iso"]], ["del", "theorem", "coe_fn_injective", ["order_iso"]], ["del", "theorem", "coe_fn_mk", ["order_iso"]], ["del", "theorem", "coe_fn_symm_mk", ["order_iso"]], ["del", "theorem", "coe_fn_to_equiv", ["order_iso"]], ["del", "theorem", "coe_mul", ["order_iso"]], ["del", "theorem", "coe_one", ["order_iso"]], ["del", "theorem", "ext", ["order_iso"]], ["del", "theorem", "inv_apply_self", ["order_iso"]], ["del", "theorem", "map_bot", ["order_iso"]], ["del", "theorem", "map_inf", ["order_iso"]], ["del", "theorem", "map_sup", ["order_iso"]], ["del", "theorem", "map_top", ["order_iso"]], ["del", "theorem", "mul_apply", ["order_iso"]], ["del", "theorem", "of_surjective_coe", ["order_iso"]], ["del", "theorem", "ord''", ["order_iso"]], ["del", "theorem", "ord", ["order_iso"]], ["del", "def", "prod_lex_congr", ["order_iso"]], ["del", "theorem", "refl_apply", ["order_iso"]], ["del", "theorem", "rel_symm_apply", ["order_iso"]], ["del", "def", "rsymm", ["order_iso"]], ["del", "def", "sum_lex_congr", ["order_iso"]], ["del", "theorem", "symm_apply_apply", ["order_iso"]], ["del", "theorem", "symm_apply_rel", ["order_iso"]], ["del", "theorem", "to_equiv_injective", ["order_iso"]], ["del", "def", "to_order_embedding", ["order_iso"]], ["del", "theorem", "to_order_embedding_eq_coe", ["order_iso"]], ["del", "theorem", "trans_apply", ["order_iso"]], ["del", "structure", "order_iso", []], ["del", "theorem", "preimage_equivalence", []], ["del", "def", "set_coe_embedding", []], ["del", "theorem", "order_embedding_apply", ["subrel"]], ["del", "def", "subrel", []], ["del", "theorem", "subrel_val", []]]}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": [["del", "def", "nat_gt", ["order_embedding"]], ["del", "def", "nat_lt", ["order_embedding"]], ["del", "theorem", "well_founded_iff_no_descending_seq", ["order_embedding"]], ["add", "def", "nat_gt", ["rel_embedding"]], ["add", "def", "nat_lt", ["rel_embedding"]], ["add", "theorem", "well_founded_iff_no_descending_seq", ["rel_embedding"]]]}, {"oldPath": null, "newPath": "src/order/rel_iso.lean", "changes": [["add", "def", "rel_embedding", ["fin", "val"]], ["add", "def", "rel_embedding", ["fin_fin"]], ["add", "theorem", "injective_of_increasing", []], ["add", "theorem", "preimage_equivalence", []], ["add", "def", "cod_restrict", ["rel_embedding"]], ["add", "theorem", "cod_restrict_apply", ["rel_embedding"]], ["add", "theorem", "coe_fn_inj", ["rel_embedding"]], ["add", "theorem", "coe_fn_mk", ["rel_embedding"]], ["add", "theorem", "coe_fn_to_embedding", ["rel_embedding"]], ["add", "theorem", "eq_preimage", ["rel_embedding"]], ["add", "theorem", "injective", ["rel_embedding"]], ["add", "theorem", "le_map_sup", ["rel_embedding"]], ["add", "def", "lt_embedding_of_le_embedding", ["rel_embedding"]], ["add", "theorem", "map_inf_le", ["rel_embedding"]], ["add", "theorem", "map_rel_iff", ["rel_embedding"]], ["add", "def", "of_monotone", ["rel_embedding"]], ["add", "theorem", "of_monotone_coe", ["rel_embedding"]], ["add", "def", "preimage", ["rel_embedding"]], ["add", "theorem", "refl_apply", ["rel_embedding"]], ["add", "def", "rsymm", ["rel_embedding"]], ["add", "theorem", "trans_apply", ["rel_embedding"]], ["add", "structure", "rel_embedding", []], ["add", "theorem", "apply_inv_self", ["rel_iso"]], ["add", "theorem", "apply_symm_apply", ["rel_iso"]], ["add", "theorem", "coe_coe_fn", ["rel_iso"]], ["add", "theorem", "coe_fn_injective", ["rel_iso"]], ["add", "theorem", "coe_fn_mk", ["rel_iso"]], ["add", "theorem", "coe_fn_symm_mk", ["rel_iso"]], ["add", "theorem", "coe_fn_to_equiv", ["rel_iso"]], ["add", "theorem", "coe_mul", ["rel_iso"]], ["add", "theorem", "coe_one", ["rel_iso"]], ["add", "theorem", "ext", ["rel_iso"]], ["add", "theorem", "inv_apply_self", ["rel_iso"]], ["add", "theorem", "map_bot", ["rel_iso"]], ["add", "theorem", "map_inf", ["rel_iso"]], ["add", "theorem", "map_rel_iff''", ["rel_iso"]], ["add", "theorem", "map_rel_iff", ["rel_iso"]], ["add", "theorem", "map_sup", ["rel_iso"]], ["add", "theorem", "map_top", ["rel_iso"]], ["add", "theorem", "mul_apply", ["rel_iso"]], ["add", "theorem", "of_surjective_coe", ["rel_iso"]], ["add", "def", "prod_lex_congr", ["rel_iso"]], ["add", "theorem", "refl_apply", ["rel_iso"]], ["add", "theorem", "rel_symm_apply", ["rel_iso"]], ["add", "def", "rsymm", ["rel_iso"]], ["add", "def", "sum_lex_congr", ["rel_iso"]], ["add", "theorem", "symm_apply_apply", ["rel_iso"]], ["add", "theorem", "symm_apply_rel", ["rel_iso"]], ["add", "theorem", "to_equiv_injective", ["rel_iso"]], ["add", "def", "to_rel_embedding", ["rel_iso"]], ["add", "theorem", "to_rel_embedding_eq_coe", ["rel_iso"]], ["add", "theorem", "trans_apply", ["rel_iso"]], ["add", "structure", "rel_iso", []], ["add", "def", "set_coe_embedding", []], ["add", "theorem", "rel_embedding_apply", ["subrel"]], ["add", "def", "subrel", []], ["add", "theorem", "subrel_val", []]]}, {"oldPath": "src/order/semiconj_Sup.lean", "newPath": "src/order/semiconj_Sup.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "def", "le_order_embedding_of_surjective", ["ideal"]], ["add", "def", "le_rel_embedding_of_surjective", ["ideal"]], ["del", "def", "lt_order_embedding_of_surjective", ["ideal"]], ["add", "def", "lt_rel_embedding_of_surjective", ["ideal"]], ["del", "def", "order_iso_of_bijective", ["ideal"]], ["del", "def", "order_iso_of_surjective", ["ideal"]], ["add", "def", "rel_iso_of_bijective", ["ideal"]], ["add", "def", "rel_iso_of_surjective", ["ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["del", "def", "le_order_embedding", ["localization_map"]], ["add", "def", "le_rel_embedding", ["localization_map"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["del", "def", "order_iso", ["cardinal", "aleph'"]], ["del", "theorem", "order_iso_coe", ["cardinal", "aleph'"]], ["add", "def", "rel_iso", ["cardinal", "aleph'"]], ["add", "theorem", "rel_iso_coe", ["cardinal", "aleph'"]], ["mod", "def", "aleph'", ["cardinal"]], ["del", "def", "order_iso", ["cardinal", "aleph_idx"]], ["del", "theorem", "order_iso_coe", ["cardinal", "aleph_idx"]], ["add", "def", "rel_iso", ["cardinal", "aleph_idx"]], ["add", "theorem", "rel_iso_coe", ["cardinal", "aleph_idx"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["del", "theorem", "aux", ["order_iso", "cof"]], ["del", "theorem", "cof", ["order_iso"]], ["mod", "theorem", "cof_cof", ["ordinal"]], ["add", "theorem", "aux", ["rel_iso", "cof"]], ["add", "theorem", "cof", ["rel_iso"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "def", "order_embedding", ["cardinal", "ord"]], ["del", "theorem", "order_embedding_coe", ["cardinal", "ord"]], ["add", "def", "rel_embedding", ["cardinal", "ord"]], ["add", "theorem", "rel_embedding_coe", ["cardinal", "ord"]], ["mod", "def", "antisymm", ["initial_seg"]], ["mod", "theorem", "coe_coe_fn", ["initial_seg"]], ["mod", "theorem", "coe_fn_mk", ["initial_seg"]], ["del", "theorem", "coe_fn_to_order_embedding", ["initial_seg"]], ["add", "theorem", "coe_fn_to_rel_embedding", ["initial_seg"]], ["mod", "def", "of_iso", ["initial_seg"]], ["mod", "structure", "initial_seg", []], ["del", "def", "collapse", ["order_embedding"]], ["del", "theorem", "lt", ["order_embedding", "collapse_F"]], ["del", "theorem", "not_lt", ["order_embedding", "collapse_F"]], ["del", "def", "collapse_F", ["order_embedding"]], ["del", "theorem", "collapse_apply", ["order_embedding"]], ["del", "theorem", "order_iso_enum'", ["ordinal"]], ["del", "theorem", "order_iso_enum", ["ordinal"]], ["del", "def", "order_iso_out", ["ordinal"]], ["add", "theorem", "rel_iso_enum'", ["ordinal"]], ["add", "theorem", "rel_iso_enum", ["ordinal"]], ["add", "def", "rel_iso_out", ["ordinal"]], ["mod", "def", "typein_iso", ["ordinal"]], ["mod", "theorem", "coe_coe_fn", ["principal_seg"]], ["mod", "theorem", "coe_fn_mk", ["principal_seg"]], ["del", "theorem", "coe_fn_to_order_embedding", ["principal_seg"]], ["add", "theorem", "coe_fn_to_rel_embedding", ["principal_seg"]], ["mod", "def", "equiv_lt", ["principal_seg"]], ["mod", "theorem", "equiv_lt_apply", ["principal_seg"]], ["mod", "theorem", "equiv_lt_top", ["principal_seg"]], ["mod", "structure", "principal_seg", []], ["add", "def", "collapse", ["rel_embedding"]], ["add", "theorem", "lt", ["rel_embedding", "collapse_F"]], ["add", "theorem", "not_lt", ["rel_embedding", "collapse_F"]], ["add", "def", "collapse_F", ["rel_embedding"]], ["add", "theorem", "collapse_apply", ["rel_embedding"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": []}]}, {"timestamp": 1597539999, "sha": "55d06a94", "message": "chore(scripts): update nolints.txt (#3820)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1597539997, "sha": "bf51f82a", "message": "feat(ring_theory/integral_closure): Rings lying within an integral extension are integral extensions (#3781)\nProofs that if an algebra tower is integral then so are the two extensions making up the tower. I needed these for another proof I'm working on, but it seemed reasonable to create a smaller PR now since they are basically self contained.", "changes": [{"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_of_surjective", []], ["add", "theorem", "is_integral_tower_bot_of_is_integral", []], ["add", "theorem", "is_integral_tower_top_of_is_integral", []]]}]}, {"timestamp": 1597539995, "sha": "a991854f", "message": "feat(category_theory/limits): a Fubini theorem (#3732)", "changes": [{"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/fubini.lean", "changes": [["add", "def", "cone_of_cone_uncurry", ["category_theory", "limits"]], ["add", "def", "cone_of_cone_uncurry_is_limit", ["category_theory", "limits"]], ["add", "def", "cone_points", ["category_theory", "limits", "diagram_of_cones"]], ["add", "def", "mk_of_has_limits", ["category_theory", "limits", "diagram_of_cones"]], ["add", "theorem", "mk_of_has_limits_cone_points", ["category_theory", "limits", "diagram_of_cones"]], ["add", "structure", "diagram_of_cones", ["category_theory", "limits"]], ["add", "def", "limit_iso_limit_curry_comp_lim", ["category_theory", "limits"]], ["add", "theorem", "limit_iso_limit_curry_comp_lim_hom_π_π", ["category_theory", "limits"]], ["add", "theorem", "limit_iso_limit_curry_comp_lim_inv_π", ["category_theory", "limits"]], ["add", "def", "limit_uncurry_iso_limit_comp_lim", ["category_theory", "limits"]], ["add", "theorem", "limit_uncurry_iso_limit_comp_lim_hom_π_π", ["category_theory", "limits"]], ["add", "theorem", "limit_uncurry_iso_limit_comp_lim_inv_π", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}]}, {"timestamp": 1597534487, "sha": "ad8c7e55", "message": "chore(algebra/group/defs): docstrings (#3819)", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}]}, {"timestamp": 1597534485, "sha": "ad8dcaf3", "message": "chore(algebra/field): docstrings (#3814)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}]}, {"timestamp": 1597534483, "sha": "598c0912", "message": "chore(tactic/squeeze): format `simp only []` as `simp only` (#3811)\nfixes #3150", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1597534482, "sha": "e75ada7f", "message": "docs(category_theory/limits/cones): cones documentation and equivalence fixup (#3795)\nMostly adding documentation in `ct.limits.cones`, but also shortened a couple of proofs. I also adjusted a couple of statements for `is_equivalence` to match the `is_equivalence` projections which are meant to be used (these statements were only used for cones anyway).", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["del", "theorem", "counit_inv_functor_comp", ["category_theory", "is_equivalence"]], ["add", "theorem", "inv_fun_id_inv_comp", ["category_theory", "is_equivalence"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "map_cone_inv_map_cone", ["category_theory", "functor"]]]}]}, {"timestamp": 1597534480, "sha": "db99f674", "message": "docs(category_theory/adjunction): document convenience constructors for adjunctions (#3788)\nAs mentioned here: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/monoid.20object/near/204930460", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}]}, {"timestamp": 1597531454, "sha": "cd1c00d5", "message": "chore(algebra/associated): docstrings (#3813)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}]}, {"timestamp": 1597529349, "sha": "8f75f963", "message": "feat(geometry/euclidean): circumcenter and circumradius (#3693)\nShow that every simplex in a Euclidean affine space has a unique\ncircumcenter (in the affine subspace spanned by that simplex) and\ncircumradius. There are four main pieces, which all seem closely\nenough related to put them all together in the same PR. Both (b) and\n(c) have quite long proofs, but I don't see obvious pieces to extract\nfrom them.\n(a) Various lemmas about `orthogonal_projection` in relation to points\nequidistant from families of points.\n(b) The induction step for the existence and uniqueness of the\n(circumcenter, circumradius) pair, `exists_unique_dist_eq_of_insert`\n(this is actually slightly more general than is needed for the\ninduction; it includes going from a set of points that has a unique\ncircumcenter and circumradius despite being infinite or not affine\nindependent, to such a unique circumcenter and circumradius when\nanother point is added outside their affine subspace). This is\nessentially just a calculation using an explicit expression for the\ndistance of the circumcenter of the new set of points from its\northogonal projection, but still involves quite a lot of manipulation\nto get things down to a form `field_simp, ring` can handle.\n(c) The actual induction\n`exists_unique_dist_eq_of_affine_independent`, giving a unique\n(circumcenter, circumradius) pair for for any affine independent\nfamily indexed by a `fintype`, by induction on the cardinality of that\n`fintype` and using the result from (b). Given (b), this is\nessentially a lot of manipulation of trivialities.\n(d) Extracting definitions and basic properties of `circumcenter` and\n`circumradius` from the previous result.", "changes": [{"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["add", "def", "circumcenter", ["affine", "simplex"]], ["add", "def", "circumcenter_circumradius", ["affine", "simplex"]], ["add", "theorem", "circumcenter_circumradius_unique_dist_eq", ["affine", "simplex"]], ["add", "theorem", "circumcenter_mem_affine_span", ["affine", "simplex"]], ["add", "def", "circumradius", ["affine", "simplex"]], ["add", "theorem", "dist_circumcenter_eq_circumradius", ["affine", "simplex"]], ["add", "theorem", "eq_circumcenter_of_dist_eq", ["affine", "simplex"]], ["add", "theorem", "eq_circumradius_of_dist_eq", ["affine", "simplex"]], ["add", "theorem", "dist_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["add", "theorem", "dist_set_eq_iff_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["add", "theorem", "exists_dist_eq_iff_exists_dist_orthogonal_projection_eq", ["euclidean_geometry"]], ["add", "theorem", "exists_unique_dist_eq_of_affine_independent", ["euclidean_geometry"]], ["add", "theorem", "exists_unique_dist_eq_of_insert", ["euclidean_geometry"]]]}]}, {"timestamp": 1597524122, "sha": "b97b08b7", "message": "fix(*): remove usages of ge/gt (#3808)\nThese were not caught by the old `ge_or_gt` linter, but they will be caught by the new (upcoming) `ge_or_gt` linter.\nThe `nolint` flags are not yet removed, this will happen in a later PR.\nRenamings:\n```\nchar_is_prime_of_ge_two -> char_is_prime_of_two_le\ndist_eq_sub_of_ge -> dist_eq_sub_of_le_right\ngt_of_mul_lt_mul_neg_right -> lt_of_mul_lt_mul_neg_right\n```", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["del", "theorem", "char_is_prime_of_ge_two", ["char_p"]], ["add", "theorem", "char_is_prime_of_two_le", ["char_p"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["mod", "theorem", "max_le_add_of_nonneg", []], ["mod", "theorem", "min_le_add_of_nonneg_left", []], ["mod", "theorem", "min_le_add_of_nonneg_right", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "eq_of_mul_eq_mul_right", ["nat"]]]}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": [["del", "theorem", "dist_eq_sub_of_ge", ["nat"]], ["add", "theorem", "dist_eq_sub_of_le_right", ["nat"]]]}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["mod", "theorem", "cmp_to_nat", ["num"]], ["mod", "theorem", "cmp_to_nat", ["pos_num"]], ["mod", "theorem", "pred_to_nat", ["pos_num"]], ["mod", "theorem", "cmp_to_int", ["znum"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "padic_norm_e_lim_le", ["padic"]], ["mod", "theorem", "rat_dense'", ["padic"]], ["mod", "theorem", "rat_dense", ["padic"]], ["mod", "theorem", "defn", ["padic_norm_e"]], ["mod", "theorem", "norm_nonneg", ["padic_seq"]]]}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["mod", "theorem", "degree_eq_iff_nat_degree_eq_of_pos", ["polynomial"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "theorem", "le_of_forall_epsilon_le", ["real"]]]}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["mod", "theorem", "cauchy₂", ["cau_seq"]], ["mod", "theorem", "cauchy₃", ["cau_seq"]], ["mod", "theorem", "cauchy₂", ["is_cau_seq"]], ["mod", "theorem", "cauchy₃", ["is_cau_seq"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "gt_of_neg_of_infinitesimal", ["hyperreal"]], ["mod", "def", "infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_def", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinite_and_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinite_of_nonneg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinite_of_pos", ["hyperreal"]], ["mod", "theorem", "lt_neg_of_pos_of_infinitesimal", ["hyperreal"]], ["mod", "theorem", "lt_of_pos_of_infinitesimal", ["hyperreal"]], ["mod", "theorem", "pos_of_infinite_pos", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "le_of_forall_epsilon_le", ["nnreal"]], ["mod", "theorem", "le_of_real_iff_coe_le", ["nnreal"]], ["mod", "theorem", "of_real_lt_iff_lt_coe", ["nnreal"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "map_div_at_top_eq_nat", ["filter"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["mod", "theorem", "galois_connection_mul_div", ["nat"]]]}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["mod", "theorem", "add_absorp_iff", ["ordinal"]]]}, {"oldPath": "src/tactic/linarith/lemmas.lean", "newPath": "src/tactic/linarith/lemmas.lean", "changes": [["mod", "theorem", "mul_eq", ["linarith"]], ["mod", "theorem", "mul_neg", ["linarith"]], ["mod", "theorem", "mul_nonpos", ["linarith"]]]}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": [["del", "theorem", "gt_of_mul_lt_mul_neg_right", []], ["add", "theorem", "lt_of_mul_lt_mul_neg_right", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "gt_mem_sets_of_Liminf_gt", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "theorem", "Hausdorff_dist_le_of_inf_dist", ["metric"]]]}]}, {"timestamp": 1597524120, "sha": "36ced83a", "message": "chore(linear_algebra/matrix): format doc using markdown (#3807)", "changes": [{"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}]}, {"timestamp": 1597524117, "sha": "26f2d4ec", "message": "docs(data/sum): fix typo in sum.is_right docs (#3805)", "changes": [{"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": []}]}, {"timestamp": 1597524116, "sha": "9339a345", "message": "chore(data/list/defs): docstring (#3804)", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["del", "def", "find_indexes_aux", ["list"]]]}]}, {"timestamp": 1597524114, "sha": "7f1a4893", "message": "fix(algebra/order): restore choiceless theorems (#3799)\nThe classical_decidable linter commit made these choiceless proofs use choice\nagain, making them duplicates of other theorems not in the `decidable.`\nnamespace.", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["mod", "theorem", "eq_or_lt_of_le", ["decidable"]], ["mod", "theorem", "le_iff_le_iff_lt_iff_lt", ["decidable"]], ["mod", "theorem", "le_iff_lt_or_eq", ["decidable"]], ["mod", "theorem", "le_imp_le_iff_lt_imp_lt", ["decidable"]], ["mod", "theorem", "le_imp_le_of_lt_imp_lt", ["decidable"]], ["mod", "theorem", "le_of_not_lt", ["decidable"]], ["mod", "theorem", "le_or_lt", ["decidable"]], ["mod", "theorem", "lt_or_eq_of_le", ["decidable"]], ["mod", "theorem", "lt_or_gt_of_ne", ["decidable"]], ["mod", "theorem", "lt_or_le", ["decidable"]], ["mod", "theorem", "lt_trichotomy", ["decidable"]], ["mod", "theorem", "ne_iff_lt_or_gt", ["decidable"]], ["mod", "theorem", "not_lt", ["decidable"]]]}]}, {"timestamp": 1597524112, "sha": "2e890e61", "message": "feat(category_theory/comma): constructing isos in the comma,over,under cats (#3797)\nConstructors to give isomorphisms in comma, over and under categories - essentially these just let you omit checking one of the commuting squares using the fact that the components are iso and the other square works.", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["add", "def", "iso_mk", ["category_theory", "comma"]]]}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": [["mod", "def", "forget", ["category_theory", "over"]], ["add", "def", "iso_mk", ["category_theory", "over"]], ["add", "theorem", "iso_mk_hom_left", ["category_theory", "over"]], ["add", "theorem", "iso_mk_inv_left", ["category_theory", "over"]], ["del", "theorem", "mk_hom", ["category_theory", "over"]], ["del", "theorem", "mk_left", ["category_theory", "over"]], ["mod", "def", "forget", ["category_theory", "under"]], ["add", "def", "iso_mk", ["category_theory", "under"]], ["add", "theorem", "iso_mk_hom_right", ["category_theory", "under"]], ["add", "theorem", "iso_mk_inv_right", ["category_theory", "under"]]]}]}, {"timestamp": 1597524110, "sha": "c9bf6f24", "message": "feat(linear_algebra/affine_space/independent): affinely independent sets (#3794)\nProve variants of `affine_independent_iff_linear_independent_vsub`\nthat relate affine independence for a set of points (as opposed to an\nindexed family of points) to linear independence for a set of vectors,\nso facilitating linking to results such as `exists_subset_is_basis`\nexpressed in terms of linearly independent sets of vectors. There are\ntwo variants, depending on which of the set of points or the set of\nvectors is given as a hypothesis.\nThus, applying `exists_subset_is_basis`, deduce that if `k` is a\nfield, any affinely independent set of points can be extended to such\na set that spans the whole space.\nZulip discussion:\nhttps://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/linear.20suffering", "changes": [{"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["add", "theorem", "affine_span_singleton_union_vadd_eq_top_of_span_eq_top", []]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "affine_independent_set_iff_linear_independent_vsub", []], ["add", "theorem", "exists_subset_affine_independent_affine_span_eq_top", []], ["add", "theorem", "linear_independent_set_iff_affine_independent_vadd_union_singleton", []]]}]}, {"timestamp": 1597524108, "sha": "ef3ba8bf", "message": "docs(category_theory/adjunction): lint some adjunction defs (#3793)", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}]}, {"timestamp": 1597524105, "sha": "d40c06f0", "message": "feat(algebra/ordered_field): rewrite and cleanup (#3751)\nGroup similar lemmas in a more intuitive way\nAdd docstrings, module doc and section headers\nSimplify some proofs\nRemove some implications if they had a corresponding `iff` lemma.\nAdd some more variants of some lemmas\nRename some lemmas for consistency\nList of name changes (the lemma on the right might be a bi-implication, if the original version was an implication):\n`add_midpoint` -> `add_sub_div_two_lt`\n`le_div_of_mul_le`, `mul_le_of_le_div` -> `le_div_iff`\n`lt_div_of_mul_lt`, `mul_lt_of_lt_div` -> `lt_div_iff`\n`div_le_of_le_mul` -> `div_le_iff'`\n`le_mul_of_div_le` -> `div_le_iff`\n`div_lt_of_pos_of_lt_mul` -> `div_lt_iff'`\n`mul_le_of_neg_of_div_le`, `div_le_of_neg_of_mul_le` -> `div_le_iff_of_neg`\n`mul_lt_of_neg_of_div_lt`, `div_lt_of_neg_of_mul_lt` -> `div_lt_iff_of_neg`\n`div_le_div_of_pos_of_le` -> `div_le_div_of_le`\n`div_le_div_of_neg_of_le` -> `div_le_div_of_nonpos_of_le`\n`div_lt_div_of_pos_of_lt` -> `div_lt_div_of_lt`\n`div_mul_le_div_mul_of_div_le_div_nonneg` -> `div_mul_le_div_mul_of_div_le_div`\n`one_le_div_of_le`, `le_of_one_le_div`, `one_le_div_iff_le` -> `one_le_div`\n`one_lt_div_of_lt`, `lt_of_one_lt_div`, `one_lt_div_iff_lt` -> `one_lt_div`\n`div_le_one_iff_le` -> `div_le_one`\n`div_lt_one_iff_lt` -> `div_lt_one`\n`one_div_le_of_pos_of_one_div_le` -> `one_div_le`\n`one_div_le_of_neg_of_one_div_le` -> `one_div_le_of_neg`\n`div_lt_div_of_pos_of_lt_of_pos` -> `div_lt_div_of_lt_left`\nOne regression I noticed in some other files: when using `div_le_iff`, and the argument is proven by some lemma about `linear_ordered_semiring` then Lean gives a type mismatch. Presumably this happens because the instance chain `ordered_field -> has_le` doesn't go via `ordered_semiring`. The fix is to give the type explicitly, for example using `div_le_iff (t : (0 : ℝ) < _)`", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/approximations.lean", "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["del", "theorem", "add_midpoint", []], ["add", "theorem", "add_sub_div_two_lt", []], ["add", "theorem", "div_le_div_of_le", []], ["mod", "theorem", "div_le_div_of_le_left", []], ["mod", "theorem", "div_le_div_of_le_of_nonneg", []], ["del", "theorem", "div_le_div_of_neg_of_le", []], ["add", "theorem", "div_le_div_of_nonpos_of_le", []], ["del", "theorem", "div_le_div_of_pos_of_le", []], ["add", "theorem", "div_le_iff_of_neg'", []], ["add", "theorem", "div_le_iff_of_nonneg_of_le", []], ["del", "theorem", "div_le_of_le_mul", []], ["del", "theorem", "div_le_of_neg_of_mul_le", []], ["add", "theorem", "div_le_one", []], ["del", "theorem", "div_le_one_iff_le", []], ["add", "theorem", "div_le_one_of_neg", []], ["add", "theorem", "div_lt_div_of_lt", []], ["add", "theorem", "div_lt_div_of_lt_left", []], ["del", "theorem", "div_lt_div_of_pos_of_lt", []], ["del", "theorem", "div_lt_div_of_pos_of_lt_of_pos", []], ["add", "theorem", "div_lt_iff_of_neg'", []], ["del", "theorem", "div_lt_of_neg_of_mul_lt", []], ["del", "theorem", "div_lt_of_pos_of_lt_mul", []], ["add", "theorem", "div_lt_one", []], ["del", "theorem", "div_lt_one_iff_lt", []], ["add", "theorem", "div_lt_one_of_neg", []], ["add", "theorem", "div_mul_le_div_mul_of_div_le_div", []], ["del", "theorem", "div_mul_le_div_mul_of_div_le_div_nonneg", []], ["mod", "theorem", "div_two_lt_of_pos", []], ["mod", "theorem", "exists_add_lt_and_pos_of_lt", []], ["mod", "theorem", "half_pos", []], ["mod", "theorem", "inv_le_inv_of_le", []], ["add", "theorem", "inv_le_inv_of_neg", []], ["add", "theorem", "inv_le_of_neg", []], ["add", "theorem", "inv_lt_inv_of_neg", []], ["add", "theorem", "inv_lt_of_neg", []], ["add", "theorem", "le_div_iff_of_neg'", []], ["del", "theorem", "le_div_of_mul_le", []], ["add", "theorem", "le_inv_of_neg", []], ["del", "theorem", "le_mul_of_div_le", []], ["mod", "theorem", "le_of_forall_sub_le", []], ["mod", "theorem", "le_of_neg_of_one_div_le_one_div", []], ["mod", "theorem", "le_of_one_div_le_one_div", []], ["del", "theorem", "le_of_one_le_div", []], ["add", "theorem", "le_one_div", []], ["add", "theorem", "le_one_div_of_neg", []], ["add", "theorem", "lt_div_iff_of_neg'", []], ["del", "theorem", "lt_div_of_mul_lt", []], ["add", "theorem", "lt_inv_of_neg", []], ["mod", "theorem", "lt_of_neg_of_one_div_lt_one_div", []], ["mod", "theorem", "lt_of_one_div_lt_one_div", []], ["del", "theorem", "lt_of_one_lt_div", []], ["add", "theorem", "lt_one_div", []], ["add", "theorem", "lt_one_div_of_neg", []], ["mod", "theorem", "mul_le_mul_of_mul_div_le", []], ["del", "theorem", "mul_le_of_le_div", []], ["del", "theorem", "mul_le_of_neg_of_div_le", []], ["del", "theorem", "mul_lt_of_lt_div", []], ["del", "theorem", "mul_lt_of_neg_of_div_lt", []], ["mod", "theorem", "one_div_le_neg_one", []], ["add", "theorem", "one_div_le_of_neg", []], ["del", "theorem", "one_div_le_of_neg_of_one_div_le", []], ["del", "theorem", "one_div_le_of_pos_of_one_div_le", []], ["mod", "theorem", "one_div_le_one_div_of_le", []], ["add", "theorem", "one_div_le_one_div_of_neg", []], ["mod", "theorem", "one_div_le_one_div_of_neg_of_le", []], ["mod", "theorem", "one_div_lt_neg_one", []], ["add", "theorem", "one_div_lt_of_neg", []], ["mod", "theorem", "one_div_lt_one_div_of_lt", []], ["add", "theorem", "one_div_lt_one_div_of_neg", []], ["mod", "theorem", "one_div_lt_one_div_of_neg_of_lt", []], ["add", "theorem", "one_le_div", []], ["del", "theorem", "one_le_div_iff_le", []], ["del", "theorem", "one_le_div_of_le", []], ["add", "theorem", "one_le_div_of_neg", []], ["mod", "theorem", "one_le_inv", []], ["mod", "theorem", "one_le_one_div", []], ["add", "theorem", "one_lt_div", []], ["del", "theorem", "one_lt_div_iff_lt", []], ["del", "theorem", "one_lt_div_of_lt", []], ["add", "theorem", "one_lt_div_of_neg", []], ["mod", "theorem", "one_lt_one_div", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}]}, {"timestamp": 1597524102, "sha": "f953a9d1", "message": "feat(category_theory/limits/shapes/types): duals (#3738)\nJust dualising some existing material.", "changes": [{"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "coprod", ["category_theory", "limits", "types"]], ["add", "theorem", "coprod_desc", ["category_theory", "limits", "types"]], ["add", "theorem", "coprod_inl", ["category_theory", "limits", "types"]], ["add", "theorem", "coprod_inr", ["category_theory", "limits", "types"]], ["add", "theorem", "coprod_map", ["category_theory", "limits", "types"]], ["add", "theorem", "initial", ["category_theory", "limits", "types"]], ["add", "theorem", "sigma", ["category_theory", "limits", "types"]], ["add", "theorem", "sigma_desc", ["category_theory", "limits", "types"]], ["add", "theorem", "sigma_map", ["category_theory", "limits", "types"]], ["add", "theorem", "sigma_ι", ["category_theory", "limits", "types"]], ["add", "def", "types_has_binary_coproducts", ["category_theory", "limits", "types"]], ["add", "def", "types_has_coproducts", ["category_theory", "limits", "types"]], ["add", "def", "types_has_initial", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1597518847, "sha": "8ce00af6", "message": "feat(data/set/basic): pairwise_on for equality (#3802)\nAdd another lemma about `pairwise_on`: if and only if `f` takes\npairwise equal values on `s`, there is some value it takes everywhere\non `s`. This arose from discussion in #3693.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "pairwise_on_eq_iff_exists_eq", ["set"]]]}]}, {"timestamp": 1597518845, "sha": "78354e14", "message": "feat(tactic/linarith): support case splits in preprocessing (including `ne` hypotheses) (#3786)\nThis adds an API for `linarith` preprocessors to branch. Each branch results in a separate call to `linarith`, so this can be exponentially bad. Use responsibly.\nGiven that the functionality is there, and I needed a way to test it, I've added a feature that people have been begging for that I've resisted: you can now call `linarith {split_ne := tt}` to handle `a ≠ b` hypotheses. Again: 2^n `linarith` calls for `n` disequalities in your context.", "changes": [{"oldPath": "src/tactic/linarith/datatypes.lean", "newPath": "src/tactic/linarith/datatypes.lean", "changes": []}, {"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1597514335, "sha": "050728b0", "message": "feat(data/fintype/basic): card lemma and finset bool alg (#3796)\nAdds the card lemma\n```\nfinset.card_le_univ [fintype α] (s : finset α) : s.card ≤ fintype.card α\n```\nwhich I expected to see in mathlib, and upgrade the bounded_distrib_lattice instance on finset in the presence of fintype to a boolean algebra instance.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_compl", ["finset"]], ["add", "theorem", "card_le_univ", ["finset"]], ["add", "theorem", "compl_eq_univ_sdiff", ["finset"]]]}]}, {"timestamp": 1597514333, "sha": "44010bc6", "message": "refactor(linear_algebra/affine_space/combination): bundled affine_combination (#3789)\nWhen `weighted_vsub_of_point` and `weighted_vsub` became bundled\n`linear_map`s on the weights, `affine_combination` was left as an\nunbundled function with different argument order from the other two\nrelated operations. Make it into a bundled `affine_map` on the\nweights, so making it more consistent with the other two operations\nand allowing general results on `affine_map`s to be used on\n`affine_combination` (as illustrated by the changed proofs of\n`weighted_vsub_vadd_affine_combination` and\n`affine_combination_vsub`).", "changes": [{"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["mod", "def", "affine_combination", ["finset"]], ["add", "theorem", "affine_combination_linear", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": []}]}, {"timestamp": 1597514331, "sha": "9216dd7d", "message": "chore(ring_theory): delete `is_algebra_tower` (#3785)\nDelete the abbreviation `is_algebra_tower` for `is_scalar_tower`, and replace all references (including the usages of the `is_algebra_tower` namespace) with `is_scalar_tower`. Documentation should also have been updated accordingly.\nThis change was requested in a comment on #3717.", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "theorem", "aeval_apply", ["is_algebra_tower"]], ["del", "theorem", "ext", ["is_algebra_tower", "algebra"]], ["del", "theorem", "algebra_map_apply", ["is_algebra_tower"]], ["del", "theorem", "algebra_map_eq", ["is_algebra_tower"]], ["del", "theorem", "algebra_map_smul", ["is_algebra_tower"]], ["del", "theorem", "comap_eq", ["is_algebra_tower"]], ["del", "theorem", "of_algebra_map_eq", ["is_algebra_tower"]], ["del", "theorem", "range_under_adjoin", ["is_algebra_tower"]], ["del", "def", "restrict_base", ["is_algebra_tower"]], ["del", "theorem", "restrict_base_apply", ["is_algebra_tower"]], ["del", "theorem", "smul_left_comm", ["is_algebra_tower"]], ["del", "def", "to_alg_hom", ["is_algebra_tower"]], ["del", "theorem", "to_alg_hom_apply", ["is_algebra_tower"]], ["del", "def", "is_algebra_tower", []], ["add", "theorem", "aeval_apply", ["is_scalar_tower"]], ["add", "theorem", "ext", ["is_scalar_tower", "algebra"]], ["add", "theorem", "algebra_comap_eq", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_apply", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_eq", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_smul", ["is_scalar_tower"]], ["add", "theorem", "of_algebra_map_eq", ["is_scalar_tower"]], ["add", "theorem", "range_under_adjoin", ["is_scalar_tower"]], ["add", "def", "restrict_base", ["is_scalar_tower"]], ["add", "theorem", "restrict_base_apply", ["is_scalar_tower"]], ["add", "theorem", "smul_left_comm", ["is_scalar_tower"]], ["add", "def", "to_alg_hom", ["is_scalar_tower"]], ["add", "theorem", "to_alg_hom_apply", ["is_scalar_tower"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["del", "theorem", "is_integral_of_is_algebra_tower", []], ["add", "theorem", "is_integral_of_is_scalar_tower", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "comap_is_algebraic_iff", ["fraction_map"]]]}]}, {"timestamp": 1597508749, "sha": "9451f8de", "message": "feat(data/sum): add sum.{get_left, get_right, is_left, is_right} (#3792)", "changes": [{"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["add", "def", "get_left", ["sum"]], ["add", "def", "get_right", ["sum"]], ["add", "def", "is_left", ["sum"]], ["add", "def", "is_right", ["sum"]]]}]}, {"timestamp": 1597500752, "sha": "daafd6f7", "message": "chore(number_theory/pythagorean_triples): added doc-strings (#3787)\nAdded docstrings to:\n`pythagorean_triple_comm`\n`pythagorean_triple.zero`\n`mul`\n`mul_iff`", "changes": [{"oldPath": "src/number_theory/pythagorean_triples.lean", "newPath": "src/number_theory/pythagorean_triples.lean", "changes": []}]}, {"timestamp": 1597500750, "sha": "10d4811e", "message": "feat(algebra/add_torsor): injectivity lemmas (#3767)\nAdd variants of the `add_action` and `add_torsor` cancellation lemmas\nwhose conclusion is stated in terms of `function.injective`.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_left_injective", []], ["add", "theorem", "vadd_right_injective", []], ["add", "theorem", "vsub_left_injective", []], ["add", "theorem", "vsub_right_injective", []]]}]}, {"timestamp": 1597495428, "sha": "5c13693f", "message": "chore(algebra/classical_lie_algebras): fix some doc strings (#3776)", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1597495425, "sha": "9ac6e8ad", "message": "refactor(set_theory/pgame): rename pgame lemma (#3775)\nRenamed `move_left_right_moves_neg_symm` to `move_left_left_moves_neg_symm` to make it consistent with the other 3 related lemmas", "changes": [{"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["add", "theorem", "move_left_left_moves_neg_symm", ["pgame"]], ["del", "theorem", "move_left_right_moves_neg_symm", ["pgame"]]]}]}, {"timestamp": 1597495423, "sha": "658cd387", "message": "feat(tactic/derive_fintype): derive fintype instances (#3772)\nThis adds a `@[derive fintype]` implementation, like so:\n```\n@[derive fintype]\ninductive foo (α : Type)\n| A : α → foo\n| B : α → α → foo\n| C : α × α → foo\n| D : foo\n```", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "def", "cons", ["finset"]], ["add", "theorem", "cons_eq_insert", ["finset"]], ["add", "theorem", "cons_val", ["finset"]], ["add", "def", "disj_union", ["finset"]], ["add", "theorem", "disj_union_eq_union", ["finset"]], ["add", "theorem", "mem_cons", ["finset"]], ["add", "theorem", "mem_disj_union", ["finset"]]]}, {"oldPath": "src/data/finset/pi.lean", "newPath": "src/data/finset/pi.lean", "changes": []}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": [["add", "theorem", "nodup_iff_pairwise", ["multiset"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "def", "elim", ["psigma"]], ["add", "theorem", "elim_val", ["psigma"]]]}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/derive_fintype.lean", "changes": [["add", "def", "cons", ["derive_fintype", "finset_above"]], ["add", "theorem", "mem_cons_of_mem", ["derive_fintype", "finset_above"]], ["add", "theorem", "mem_cons_self", ["derive_fintype", "finset_above"]], ["add", "theorem", "mem_union_left", ["derive_fintype", "finset_above"]], ["add", "theorem", "mem_union_right", ["derive_fintype", "finset_above"]], ["add", "def", "nil", ["derive_fintype", "finset_above"]], ["add", "def", "union", ["derive_fintype", "finset_above"]], ["add", "def", "finset_above", ["derive_fintype"]], ["add", "theorem", "mem_mk", ["derive_fintype", "finset_in"]], ["add", "def", "mk", ["derive_fintype", "finset_in"]], ["add", "def", "finset_in", ["derive_fintype"]], ["add", "def", "mk_fintype", ["derive_fintype"]]]}, {"oldPath": "src/tactic/derive_inhabited.lean", "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": null, "newPath": "test/derive_fintype.lean", "changes": [["add", "inductive", "alphabet", []], ["add", "inductive", "foo2", []], ["add", "inductive", "foo3", []], ["add", "inductive", "foo", []]]}]}, {"timestamp": 1597495421, "sha": "18746ef6", "message": "feat(analysis/special_functions/pow): Added lemmas for rpow of neg exponent (#3715)\nI noticed that the library was missing some lemmas regarding the bounds of rpow of a negative exponent so I added them. I cleaned up the other similar preexisting lemmas for consistency. I then repeated the process for nnreal lemmas.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "one_le_rpow_of_pos_of_le_one_of_nonpos", ["nnreal"]], ["add", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["nnreal"]], ["add", "theorem", "rpow_le_one_of_one_le_of_nonpos", ["nnreal"]], ["mod", "theorem", "rpow_lt_one", ["nnreal"]], ["add", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["nnreal"]], ["mod", "theorem", "one_le_rpow", ["real"]], ["add", "theorem", "one_le_rpow_of_pos_of_le_one_of_nonpos", ["real"]], ["mod", "theorem", "one_lt_rpow", ["real"]], ["add", "theorem", "one_lt_rpow_of_pos_of_lt_one_of_neg", ["real"]], ["mod", "theorem", "rpow_le_one", ["real"]], ["add", "theorem", "rpow_le_one_of_one_le_of_nonpos", ["real"]], ["mod", "theorem", "rpow_lt_one", ["real"]], ["add", "theorem", "rpow_lt_one_of_one_lt_of_neg", ["real"]]]}]}, {"timestamp": 1597495419, "sha": "099f070f", "message": "feat(topology/sheaves): the sheaf condition (#3605)\nJohan and I have been working with this, and it's at least minimally viable.\nIn follow-up PRs we have finished:\n* constructing the sheaf of dependent functions to a type family\n* constructing the sheaf of continuous functions to a fixed topological space\n* checking the sheaf condition under forgetful functors that reflect isos and preserve limits (https://stacks.math.columbia.edu/tag/0073)\nObviously there's more we'd like to see before being confident that a design for sheaves is workable, but we'd like to get started!", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/punit.lean", "changes": [["add", "def", "punit_cocone_is_colimit", ["category_theory", "limits"]], ["add", "def", "punit_cone_is_limit", ["category_theory", "limits"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/sheaves/sheaf.lean", "changes": [["add", "def", "forget", ["Top", "sheaf"]], ["add", "structure", "sheaf", ["Top"]], ["add", "def", "diagram", ["Top", "sheaf_condition"]], ["add", "def", "fork", ["Top", "sheaf_condition"]], ["add", "theorem", "fork_X", ["Top", "sheaf_condition"]], ["add", "theorem", "fork_ι", ["Top", "sheaf_condition"]], ["add", "theorem", "fork_π_app_walking_parallel_pair_one", ["Top", "sheaf_condition"]], ["add", "theorem", "fork_π_app_walking_parallel_pair_zero", ["Top", "sheaf_condition"]], ["add", "def", "left_res", ["Top", "sheaf_condition"]], ["add", "def", "pi_inters", ["Top", "sheaf_condition"]], ["add", "def", "pi_opens", ["Top", "sheaf_condition"]], ["add", "def", "res", ["Top", "sheaf_condition"]], ["add", "def", "right_res", ["Top", "sheaf_condition"]], ["add", "theorem", "w", ["Top", "sheaf_condition"]], ["add", "def", "sheaf_condition", ["Top"]], ["add", "def", "sheaf_condition_punit", ["Top"]]]}]}, {"timestamp": 1597493169, "sha": "36b4a1e3", "message": "refactor(algebra/add_torsor): use `out_param` (#3727)", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["del", "theorem", "vadd_assoc", ["add_action"]], ["del", "theorem", "vadd_comm", ["add_action"]], ["del", "theorem", "vadd_left_cancel", ["add_action"]], ["del", "theorem", "vadd_left_cancel_iff", ["add_action"]], ["del", "theorem", "zero_vadd", ["add_action"]], ["del", "theorem", "eq_of_vsub_eq_zero", ["add_torsor"]], ["del", "theorem", "eq_vadd_iff_vsub_eq", ["add_torsor"]], ["del", "theorem", "neg_vsub_eq_vsub_rev", ["add_torsor"]], ["del", "theorem", "vadd_right_cancel", ["add_torsor"]], ["del", "theorem", "vadd_right_cancel_iff", ["add_torsor"]], ["del", "theorem", "vadd_vsub", ["add_torsor"]], ["del", "theorem", "vadd_vsub_assoc", ["add_torsor"]], ["del", "theorem", "vadd_vsub_vadd_cancel_left", ["add_torsor"]], ["del", "theorem", "vadd_vsub_vadd_cancel_right", ["add_torsor"]], ["del", "theorem", "vsub_add_vsub_cancel", ["add_torsor"]], ["del", "theorem", "vsub_eq_zero_iff_eq", ["add_torsor"]], ["del", "theorem", "vsub_left_cancel", ["add_torsor"]], ["del", "theorem", "vsub_left_cancel_iff", ["add_torsor"]], ["del", "theorem", "vsub_mem_vsub_set", ["add_torsor"]], ["del", "theorem", "vsub_right_cancel", ["add_torsor"]], ["del", "theorem", "vsub_right_cancel_iff", ["add_torsor"]], ["del", "theorem", "vsub_self", ["add_torsor"]], ["del", "def", "vsub_set", ["add_torsor"]], ["del", "theorem", "vsub_set_empty", ["add_torsor"]], ["del", "theorem", "vsub_set_finite_of_finite", ["add_torsor"]], ["del", "theorem", "vsub_set_mono", ["add_torsor"]], ["del", "theorem", "vsub_set_singleton", ["add_torsor"]], ["del", "theorem", "vsub_sub_vsub_cancel_left", ["add_torsor"]], ["del", "theorem", "vsub_sub_vsub_cancel_right", ["add_torsor"]], ["del", "theorem", "vsub_vadd", ["add_torsor"]], ["del", "theorem", "vsub_vadd_eq_vsub_sub", ["add_torsor"]], ["add", "theorem", "eq_of_vsub_eq_zero", []], ["add", "theorem", "eq_vadd_iff_vsub_eq", []], ["add", "theorem", "neg_vsub_eq_vsub_rev", []], ["add", "theorem", "vadd_assoc", []], ["add", "theorem", "vadd_comm", []], ["mod", "theorem", "vadd_eq_add", []], ["add", "theorem", "vadd_left_cancel", []], ["add", "theorem", "vadd_left_cancel_iff", []], ["add", "theorem", "vadd_right_cancel", []], ["add", "theorem", "vadd_right_cancel_iff", []], ["add", "theorem", "vadd_vsub", []], ["add", "theorem", "vadd_vsub_assoc", []], ["add", "theorem", "vadd_vsub_vadd_cancel_left", []], ["add", "theorem", "vadd_vsub_vadd_cancel_right", []], ["add", "theorem", "vsub_add_vsub_cancel", []], ["mod", "theorem", "vsub_eq_sub", []], ["add", "theorem", "vsub_eq_zero_iff_eq", []], ["add", "theorem", "vsub_left_cancel", []], ["add", "theorem", "vsub_left_cancel_iff", []], ["add", "theorem", "vsub_mem_vsub_set", []], ["add", "theorem", "vsub_right_cancel", []], ["add", "theorem", "vsub_right_cancel_iff", []], ["add", "theorem", "vsub_self", []], ["add", "def", "vsub_set", []], ["add", "theorem", "vsub_set_empty", []], ["add", "theorem", "vsub_set_finite_of_finite", []], ["add", "theorem", "vsub_set_mono", []], ["add", "theorem", "vsub_set_singleton", []], ["add", "theorem", "vsub_sub_vsub_cancel_left", []], ["add", "theorem", "vsub_sub_vsub_cancel_right", []], ["add", "theorem", "vsub_vadd", []], ["add", "theorem", "vsub_vadd_eq_vsub_sub", []], ["add", "theorem", "zero_vadd", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "affine_image", ["convex"]], ["mod", "theorem", "affine_preimage", ["convex"]], ["mod", "theorem", "combo_affine_apply", ["convex"]], ["mod", "theorem", "comp_affine_map", ["convex_on"]]]}, {"oldPath": "src/analysis/convex/extrema.lean", "newPath": "src/analysis/convex/extrema.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["del", "theorem", "dist_eq_norm", ["add_torsor"]], ["add", "theorem", "dist_eq_norm_vsub", []], ["mod", "theorem", "dist_vadd_cancel_left", []], ["mod", "theorem", "dist_vadd_cancel_right", []], ["mod", "theorem", "coe_vadd_const", ["isometric"]], ["mod", "theorem", "coe_vadd_const_symm", ["isometric"]], ["del", "theorem", "isometry_vadd_vsub_of_isometry", ["isometric"]], ["mod", "theorem", "vadd_const_to_equiv", ["isometric"]], ["add", "theorem", "vadd_vsub", ["isometry"]]]}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": [["mod", "theorem", "coe_to_affine_map", ["isometric"]], ["mod", "def", "to_affine_map", ["isometric"]]]}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["del", "def", "euclidean_affine_space", []], ["mod", "theorem", "angle_add_angle_eq_pi_of_angle_eq_pi", ["euclidean_geometry"]], ["mod", "theorem", "angle_comm", ["euclidean_geometry"]], ["mod", "theorem", "angle_eq_angle_of_angle_eq_pi", ["euclidean_geometry"]], ["mod", "theorem", "angle_eq_left", ["euclidean_geometry"]], ["mod", "theorem", "angle_eq_of_ne", ["euclidean_geometry"]], ["mod", "theorem", "angle_eq_right", ["euclidean_geometry"]], ["mod", "theorem", "angle_eq_zero_of_angle_eq_pi_left", ["euclidean_geometry"]], ["mod", "theorem", "angle_eq_zero_of_angle_eq_pi_right", ["euclidean_geometry"]], ["mod", "theorem", "angle_le_pi", ["euclidean_geometry"]], ["mod", "theorem", "angle_nonneg", ["euclidean_geometry"]], ["mod", "theorem", "dist_eq_of_angle_eq_angle_of_angle_ne_pi", ["euclidean_geometry"]], ["mod", "theorem", "dist_orthogonal_projection_eq_zero_iff", ["euclidean_geometry"]], ["mod", "theorem", "dist_orthogonal_projection_ne_zero_of_not_mem", ["euclidean_geometry"]], ["mod", "theorem", "dist_square_smul_orthogonal_vadd_smul_orthogonal_vadd", ["euclidean_geometry"]], ["mod", "theorem", "inter_eq_singleton_orthogonal_projection", ["euclidean_geometry"]], ["mod", "theorem", "inter_eq_singleton_orthogonal_projection_fn", ["euclidean_geometry"]], ["mod", "def", "orthogonal_projection", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_eq_self_iff", ["euclidean_geometry"]], ["mod", "def", "orthogonal_projection_fn", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_eq", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_mem", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_mem_orthogonal", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_fn_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_mem", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_mem_orthogonal", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vadd_eq_self", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vadd_smul_vsub_orthogonal_projection", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vsub_mem_direction", ["euclidean_geometry"]], ["mod", "theorem", "orthogonal_projection_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["mod", "theorem", "vsub_orthogonal_projection_mem_direction", ["euclidean_geometry"]], ["mod", "theorem", "vsub_orthogonal_projection_mem_direction_orthogonal", ["euclidean_geometry"]]]}, {"oldPath": "src/linear_algebra/affine_space/basic.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["mod", "theorem", "add_linear", ["affine_map"]], ["mod", "theorem", "affine_apply_line_map", ["affine_map"]], ["mod", "theorem", "affine_comp_line_map", ["affine_map"]], ["mod", "theorem", "coe_add", ["affine_map"]], ["mod", "theorem", "coe_comp", ["affine_map"]], ["mod", "theorem", "coe_const", ["affine_map"]], ["mod", "theorem", "coe_homothety_hom", ["affine_map"]], ["mod", "theorem", "coe_id", ["affine_map"]], ["mod", "theorem", "coe_mul", ["affine_map"]], ["mod", "theorem", "coe_one", ["affine_map"]], ["mod", "theorem", "coe_smul", ["affine_map"]], ["mod", "theorem", "coe_zero", ["affine_map"]], ["mod", "def", "comp", ["affine_map"]], ["mod", "theorem", "comp_apply", ["affine_map"]], ["mod", "theorem", "comp_assoc", ["affine_map"]], ["mod", "theorem", "comp_id", ["affine_map"]], ["mod", "def", "const", ["affine_map"]], ["mod", "theorem", "const_linear", ["affine_map"]], ["mod", "theorem", "decomp'", ["affine_map"]], ["mod", "theorem", "decomp", ["affine_map"]], ["mod", "theorem", "ext", ["affine_map"]], ["mod", "theorem", "ext_iff", ["affine_map"]], ["mod", "def", "homothety", ["affine_map"]], ["mod", "def", "homothety_affine", ["affine_map"]], ["mod", "theorem", "homothety_apply", ["affine_map"]], ["mod", "def", "homothety_hom", ["affine_map"]], ["mod", "theorem", "homothety_one", ["affine_map"]], ["mod", "theorem", "homothety_zero", ["affine_map"]], ["mod", "def", "id", ["affine_map"]], ["mod", "theorem", "id_apply", ["affine_map"]], ["mod", "theorem", "id_comp", ["affine_map"]], ["mod", "theorem", "id_linear", ["affine_map"]], ["mod", "def", "line_map", ["affine_map"]], ["mod", "theorem", "line_map_zero", ["affine_map"]], ["mod", "theorem", "linear_map_vsub", ["affine_map"]], ["mod", "theorem", "map_vadd", ["affine_map"]], ["mod", "theorem", "to_fun_eq_coe", ["affine_map"]], ["mod", "theorem", "vadd_apply", ["affine_map"]], ["mod", "theorem", "vsub_apply", ["affine_map"]], ["mod", "theorem", "zero_linear", ["affine_map"]], ["mod", "structure", "affine_map", []], ["del", "theorem", "affine_span_nonempty", ["affine_space"]], ["del", "theorem", "mem_span_points", ["affine_space"]], ["del", "def", "span_points", ["affine_space"]], ["del", "theorem", "span_points_nonempty", ["affine_space"]], ["del", "theorem", "subset_span_points", ["affine_space"]], ["del", "theorem", "vadd_mem_span_points_of_mem_span_points_of_mem_vector_span", ["affine_space"]], ["del", "def", "vector_span", ["affine_space"]], ["del", "theorem", "vector_span_def", ["affine_space"]], ["del", "theorem", "vector_span_empty", ["affine_space"]], ["del", "theorem", "vector_span_eq_span_vsub_set_left", ["affine_space"]], ["del", "theorem", "vector_span_eq_span_vsub_set_right", ["affine_space"]], ["del", "theorem", "vector_span_range_eq_span_range_vsub_left", ["affine_space"]], ["del", "theorem", "vector_span_range_eq_span_range_vsub_right", ["affine_space"]], ["del", "theorem", "vector_span_singleton", ["affine_space"]], ["del", "theorem", "vsub_mem_vector_span", ["affine_space"]], ["del", "theorem", "vsub_mem_vector_span_of_mem_span_points_of_mem_span_points", ["affine_space"]], ["del", "theorem", "vsub_set_subset_vector_span", ["affine_space"]], ["del", "def", "affine_space", []], ["mod", "def", "affine_span", []], ["add", "theorem", "affine_span_nonempty", []], ["mod", "theorem", "affine_span_coe", ["affine_subspace"]], ["mod", "theorem", "affine_span_eq_Inf", ["affine_subspace"]], ["mod", "theorem", "bot_coe", ["affine_subspace"]], ["mod", "theorem", "coe_affine_span_singleton", ["affine_subspace"]], ["mod", "theorem", "coe_direction_eq_vsub_set", ["affine_subspace"]], ["mod", "theorem", "coe_direction_eq_vsub_set_left", ["affine_subspace"]], ["mod", "theorem", "coe_direction_eq_vsub_set_right", ["affine_subspace"]], ["mod", "def", "direction", ["affine_subspace"]], ["mod", "theorem", "direction_affine_span_insert", ["affine_subspace"]], ["mod", "theorem", "direction_bot", ["affine_subspace"]], ["mod", "theorem", "direction_eq_vector_span", ["affine_subspace"]], ["mod", "theorem", "direction_inf", ["affine_subspace"]], ["mod", "theorem", "direction_le", ["affine_subspace"]], ["mod", "theorem", "direction_lt_of_nonempty", ["affine_subspace"]], ["mod", "def", "direction_of_nonempty", ["affine_subspace"]], ["mod", "theorem", "direction_of_nonempty_eq_direction", ["affine_subspace"]], ["mod", "theorem", "direction_sup", ["affine_subspace"]], ["mod", "theorem", "direction_top", ["affine_subspace"]], ["mod", "theorem", "exists_of_lt", ["affine_subspace"]], ["mod", "theorem", "ext", ["affine_subspace"]], ["mod", "theorem", "ext_of_direction_eq", ["affine_subspace"]], ["mod", "theorem", "inf_coe", ["affine_subspace"]], ["mod", "theorem", "inter_eq_singleton_of_nonempty_of_is_compl", ["affine_subspace"]], ["mod", "theorem", "inter_nonempty_of_nonempty_of_sup_direction_eq_top", ["affine_subspace"]], ["mod", "theorem", "le_def'", ["affine_subspace"]], ["mod", "theorem", "le_def", ["affine_subspace"]], ["mod", "theorem", "lt_def", ["affine_subspace"]], ["mod", "theorem", "lt_iff_le_and_exists", ["affine_subspace"]], ["mod", "theorem", "mem_affine_span_insert_iff", ["affine_subspace"]], ["mod", "theorem", "mem_coe", ["affine_subspace"]], ["mod", "theorem", "mem_direction_iff_eq_vsub", ["affine_subspace"]], ["mod", "theorem", "mem_direction_iff_eq_vsub_left", ["affine_subspace"]], ["mod", "theorem", "mem_direction_iff_eq_vsub_right", ["affine_subspace"]], ["mod", "theorem", "mem_inf_iff", ["affine_subspace"]], ["mod", "theorem", "mem_top", ["affine_subspace"]], ["mod", "def", "mk'", ["affine_subspace"]], ["mod", "theorem", "mk'_eq", ["affine_subspace"]], ["mod", "theorem", "not_le_iff_exists", ["affine_subspace"]], ["mod", "theorem", "not_mem_bot", ["affine_subspace"]], ["mod", "theorem", "span_empty", ["affine_subspace"]], ["mod", "theorem", "span_points_subset_coe_of_subset_coe", ["affine_subspace"]], ["mod", "theorem", "span_union", ["affine_subspace"]], ["mod", "theorem", "span_univ", ["affine_subspace"]], ["mod", "theorem", "sup_direction_le", ["affine_subspace"]], ["mod", "theorem", "sup_direction_lt_of_nonempty_of_inter_empty", ["affine_subspace"]], ["mod", "theorem", "top_coe", ["affine_subspace"]], ["mod", "theorem", "vadd_mem_of_mem_direction", ["affine_subspace"]], ["mod", "theorem", "vsub_left_mem_direction_iff_mem", ["affine_subspace"]], ["mod", "theorem", "vsub_mem_direction", ["affine_subspace"]], ["mod", "theorem", "vsub_right_mem_direction_iff_mem", ["affine_subspace"]], ["mod", "structure", "affine_subspace", []], ["mod", "theorem", "direction_affine_span", []], ["mod", "def", "to_affine_map", ["linear_map"]], ["mod", "theorem", "mem_affine_span", []], ["add", "theorem", "mem_span_points", []], ["add", "def", "span_points", []], ["add", "theorem", "span_points_nonempty", []], ["add", "theorem", "subset_span_points", []], ["add", "theorem", "vadd_mem_span_points_of_mem_span_points_of_mem_vector_span", []], ["add", "def", "vector_span", []], ["add", "theorem", "vector_span_def", []], ["add", "theorem", "vector_span_empty", []], ["add", "theorem", "vector_span_eq_span_vsub_set_left", []], ["add", "theorem", "vector_span_eq_span_vsub_set_right", []], ["add", "theorem", "vector_span_range_eq_span_range_vsub_left", []], ["add", "theorem", "vector_span_range_eq_span_range_vsub_right", []], ["add", "theorem", "vector_span_singleton", []], ["add", "theorem", "vsub_mem_vector_span", []], ["add", "theorem", "vsub_mem_vector_span_of_mem_span_points_of_mem_span_points", []], ["add", "theorem", "vsub_set_subset_vector_span", []]]}, {"oldPath": "src/linear_algebra/affine_space/combination.lean", "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "theorem", "affine_combination_mem_affine_span", []], ["mod", "def", "weighted_vsub_of_point", ["affine_map"]], ["del", "theorem", "affine_combination_mem_affine_span", ["affine_space"]], ["del", "theorem", "eq_affine_combination_of_mem_affine_span", ["affine_space"]], ["del", "theorem", "mem_affine_span_iff_eq_affine_combination", ["affine_space"]], ["del", "theorem", "mem_vector_span_iff_eq_weighted_vsub", ["affine_space"]], ["del", "theorem", "weighted_vsub_mem_vector_span", ["affine_space"]], ["add", "theorem", "eq_affine_combination_of_mem_affine_span", []], ["add", "theorem", "mem_affine_span_iff_eq_affine_combination", []], ["add", "theorem", "mem_vector_span_iff_eq_weighted_vsub", []], ["add", "theorem", "weighted_vsub_mem_vector_span", []]]}, {"oldPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["del", "theorem", "finite_dimensional_direction_affine_span_of_finite", ["affine_space"]], ["del", "theorem", "finite_dimensional_vector_span_of_finite", ["affine_space"]], ["add", "theorem", "finite_dimensional_direction_affine_span_of_finite", []], ["add", "theorem", "finite_dimensional_vector_span_of_finite", []]]}, {"oldPath": "src/linear_algebra/affine_space/independent.lean", "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "theorem", "ext", ["affine", "simplex"]], ["add", "theorem", "ext_iff", ["affine", "simplex"]], ["add", "def", "face", ["affine", "simplex"]], ["add", "theorem", "face_eq_mk_of_point", ["affine", "simplex"]], ["add", "theorem", "face_points", ["affine", "simplex"]], ["add", "def", "mk_of_point", ["affine", "simplex"]], ["add", "theorem", "mk_of_point_points", ["affine", "simplex"]], ["add", "structure", "simplex", ["affine"]], ["add", "def", "triangle", ["affine"]], ["del", "theorem", "ext", ["affine_space", "simplex"]], ["del", "theorem", "ext_iff", ["affine_space", "simplex"]], ["del", "def", "face", ["affine_space", "simplex"]], ["del", "theorem", "face_eq_mk_of_point", ["affine_space", "simplex"]], ["del", "theorem", "face_points", ["affine_space", "simplex"]], ["del", "def", "mk_of_point", ["affine_space", "simplex"]], ["del", "theorem", "mk_of_point_points", ["affine_space", "simplex"]], ["del", "structure", "simplex", ["affine_space"]], ["del", "def", "triangle", ["affine_space"]]]}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": [["mod", "theorem", "continuous_iff", ["affine_map"]]]}]}, {"timestamp": 1597487814, "sha": "2b8ece64", "message": "feat(data/nat/basic): one mod two or higher is one (#3763)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "one_mod", ["nat"]]]}]}, {"timestamp": 1597486159, "sha": "c444a005", "message": "Revert \"chore(ring_theory): delete `is_algebra_tower`\"\nThis reverts commit c956ce1516ccfb3139ae3ebde7ede9c678d81968.", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "aeval_apply", ["is_algebra_tower"]], ["add", "theorem", "ext", ["is_algebra_tower", "algebra"]], ["add", "theorem", "algebra_map_apply", ["is_algebra_tower"]], ["add", "theorem", "algebra_map_eq", ["is_algebra_tower"]], ["add", "theorem", "algebra_map_smul", ["is_algebra_tower"]], ["add", "theorem", "comap_eq", ["is_algebra_tower"]], ["add", "theorem", "of_algebra_map_eq", ["is_algebra_tower"]], ["add", "theorem", "range_under_adjoin", ["is_algebra_tower"]], ["add", "def", "restrict_base", ["is_algebra_tower"]], ["add", "theorem", "restrict_base_apply", ["is_algebra_tower"]], ["add", "theorem", "smul_left_comm", ["is_algebra_tower"]], ["add", "def", "to_alg_hom", ["is_algebra_tower"]], ["add", "theorem", "to_alg_hom_apply", ["is_algebra_tower"]], ["add", "def", "is_algebra_tower", []], ["del", "theorem", "aeval_apply", ["is_scalar_tower"]], ["del", "theorem", "ext", ["is_scalar_tower", "algebra"]], ["del", "theorem", "algebra_comap_eq", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_apply", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_eq", ["is_scalar_tower"]], ["del", "theorem", "algebra_map_smul", ["is_scalar_tower"]], ["del", "theorem", "of_algebra_map_eq", ["is_scalar_tower"]], ["del", "theorem", "range_under_adjoin", ["is_scalar_tower"]], ["del", "def", "restrict_base", ["is_scalar_tower"]], ["del", "theorem", "restrict_base_apply", ["is_scalar_tower"]], ["del", "theorem", "smul_left_comm", ["is_scalar_tower"]], ["del", "def", "to_alg_hom", ["is_scalar_tower"]], ["del", "theorem", "to_alg_hom_apply", ["is_scalar_tower"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_of_is_algebra_tower", []], ["del", "theorem", "is_integral_of_is_scalar_tower", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "comap_is_algebraic_iff", ["fraction_map"]]]}]}, {"timestamp": 1597485913, "sha": "c956ce15", "message": "chore(ring_theory): delete `is_algebra_tower`\nDelete the abbreviation `is_algebra_tower` for `is_scalar_tower`,\nand replace all references (including the usages of the `is_algebra_tower`\nnamespace) with `is_scalar_tower`. Documentation should also have been\nupdated accordingly.\nThis change was requested in a comment on #3717.", "changes": [{"oldPath": "src/field_theory/algebraic_closure.lean", "newPath": "src/field_theory/algebraic_closure.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/tower.lean", "newPath": "src/field_theory/tower.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "theorem", "aeval_apply", ["is_algebra_tower"]], ["del", "theorem", "ext", ["is_algebra_tower", "algebra"]], ["del", "theorem", "algebra_map_apply", ["is_algebra_tower"]], ["del", "theorem", "algebra_map_eq", ["is_algebra_tower"]], ["del", "theorem", "algebra_map_smul", ["is_algebra_tower"]], ["del", "theorem", "comap_eq", ["is_algebra_tower"]], ["del", "theorem", "of_algebra_map_eq", ["is_algebra_tower"]], ["del", "theorem", "range_under_adjoin", ["is_algebra_tower"]], ["del", "def", "restrict_base", ["is_algebra_tower"]], ["del", "theorem", "restrict_base_apply", ["is_algebra_tower"]], ["del", "theorem", "smul_left_comm", ["is_algebra_tower"]], ["del", "def", "to_alg_hom", ["is_algebra_tower"]], ["del", "theorem", "to_alg_hom_apply", ["is_algebra_tower"]], ["del", "def", "is_algebra_tower", []], ["add", "theorem", "aeval_apply", ["is_scalar_tower"]], ["add", "theorem", "ext", ["is_scalar_tower", "algebra"]], ["add", "theorem", "algebra_comap_eq", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_apply", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_eq", ["is_scalar_tower"]], ["add", "theorem", "algebra_map_smul", ["is_scalar_tower"]], ["add", "theorem", "of_algebra_map_eq", ["is_scalar_tower"]], ["add", "theorem", "range_under_adjoin", ["is_scalar_tower"]], ["add", "def", "restrict_base", ["is_scalar_tower"]], ["add", "theorem", "restrict_base_apply", ["is_scalar_tower"]], ["add", "theorem", "smul_left_comm", ["is_scalar_tower"]], ["add", "def", "to_alg_hom", ["is_scalar_tower"]], ["add", "theorem", "to_alg_hom_apply", ["is_scalar_tower"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["del", "theorem", "is_integral_of_is_algebra_tower", []], ["add", "theorem", "is_integral_of_is_scalar_tower", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "comap_is_algebraic_iff", ["fraction_map"]]]}]}, {"timestamp": 1597481127, "sha": "67dad7f3", "message": "feat(control/equiv_functor): fintype instance (#3783)\nRequested at https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/fintype.2Eequiv_congr/near/206773279", "changes": [{"oldPath": "src/control/equiv_functor/instances.lean", "newPath": "src/control/equiv_functor/instances.lean", "changes": []}]}, {"timestamp": 1597476155, "sha": "b670212c", "message": "fix(tactic/apply): fix ordering of goals produced by `apply` (#3777)", "changes": [{"oldPath": "src/tactic/apply.lean", "newPath": "src/tactic/apply.lean", "changes": []}, {"oldPath": "test/apply.lean", "newPath": "test/apply.lean", "changes": []}]}, {"timestamp": 1597476153, "sha": "c1a5283b", "message": "refactor(data/list/tfae): tfae.out (#3774)\nThis version of `tfae.out` has slightly better automatic reduction behavior: if `h : [a, b, c].tfae` then the original of `h.out 1 2` proves `[a, b, c].nth_le 1 _ <-> [a, b, c].nth_le 2 _` while the new version of `h.out 1 2` proves `b <-> c`. These are the same, of course, and you can mostly use them interchangeably, but the second one is a bit nicer to look at (and possibly works better with e.g. subsequent rewrites).", "changes": [{"oldPath": "src/data/list/tfae.lean", "newPath": "src/data/list/tfae.lean", "changes": [["mod", "theorem", "out", ["list", "tfae"]]]}]}, {"timestamp": 1597473310, "sha": "55f49265", "message": "fix(algebra/archimedean): switch to a more natural and general condition in exists_nat_pow_near (#3782)\nper discussion at https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Starting.20to.20contribute.20to.20mathlib/near/206945824", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["mod", "theorem", "exists_nat_pow_near", []]]}]}, {"timestamp": 1597424408, "sha": "3ae44bd1", "message": "fix(tactic/equiv_rw): fix problem with stuck universe metavariables (#3773)", "changes": [{"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}]}, {"timestamp": 1597420028, "sha": "c2528003", "message": "chore(*): use notation for `filter.prod` (#3768)\nAlso change from `∀ v w ∈ V` to `∀ (v ∈ V) (w ∈ V)` in `exists_nhds_split_inv`, `exists_nhds_half_neg`, `add_group_with_zero_nhd.exists_Z_half`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "mem_prod_self_iff", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "prod_eq", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "prod_def", ["filter"]], ["mod", "theorem", "prod_same_eq", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "add_Z", ["add_group_with_zero_nhd"]], ["mod", "theorem", "exists_Z_half", ["add_group_with_zero_nhd"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "nhds_prod_eq", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "def", "cauchy", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1597408128, "sha": "0e5f44b0", "message": "chore(*): assorted lemmas for FTC-1 (#3755)\nLemmas from FTC-1 (`has_strict_deriv` version) #3709", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "add_add", ["asymptotics", "is_o"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "forall_prod_set", ["set"]], ["mod", "theorem", "mem_powerset_iff", ["set"]], ["add", "theorem", "monotone_powerset", ["set"]], ["add", "theorem", "powerset_empty", ["set"]], ["add", "theorem", "powerset_inter", ["set"]], ["mod", "theorem", "powerset_mono", ["set"]], ["mod", "theorem", "powerset_nonempty", ["set"]]]}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": [["mod", "theorem", "Ico_disjoint_Ico", ["set"]], ["mod", "theorem", "Ico_disjoint_Ico_same", ["set"]], ["add", "theorem", "Iic_disjoint_Ioc", ["set"]], ["add", "theorem", "Iic_disjoint_Ioi", ["set"]], ["mod", "theorem", "Ioc_disjoint_Ioc", ["set"]], ["mod", "theorem", "Ioc_disjoint_Ioc_same", ["set"]]]}, {"oldPath": "src/data/set/intervals/ord_connected.lean", "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["add", "theorem", "ord_connected_singleton", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_pure", ["filter"]], ["add", "theorem", "eventually_pure", ["filter"]], ["add", "theorem", "principal_singleton", ["filter"]], ["del", "theorem", "pure_eq_principal", ["filter"]], ["add", "theorem", "pure_le_iff", ["filter"]], ["add", "theorem", "tendsto_iff_eventually", ["filter"]], ["mod", "theorem", "tendsto_infi", ["filter"]], ["mod", "theorem", "tendsto_principal", ["filter"]], ["mod", "theorem", "tendsto_principal_principal", ["filter"]], ["mod", "theorem", "tendsto_pure", ["filter"]], ["add", "theorem", "tendsto_pure_left", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "lift'_bot", ["filter"]], ["add", "theorem", "lift'_inf", ["filter"]], ["add", "theorem", "lift'_inf_powerset", ["filter"]], ["add", "theorem", "lift'_pure", ["filter"]], ["add", "theorem", "tendsto_lift'_powerset_mono", ["filter"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "pure_le_nhds_within", []]]}]}, {"timestamp": 1597365606, "sha": "b611c5fa", "message": "chore(scripts): update nolints.txt (#3771)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1597347394, "sha": "32c6a73e", "message": "feat(ci): auto label merge conflicts, try 2 (#3766)", "changes": [{"oldPath": ".github/workflows/merge_conflicts.yml", "newPath": ".github/workflows/merge_conflicts.yml", "changes": []}]}, {"timestamp": 1597347392, "sha": "627b4317", "message": "feat(tactic/find_unused): find the dead code in a module (#3701)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/find_unused.lean", "changes": []}, {"oldPath": null, "newPath": "test/find_unused_decl1.lean", "changes": [["add", "def", "main_thing", []], ["add", "def", "this_is_unused", []]]}, {"oldPath": null, "newPath": "test/find_unused_decl2.lean", "changes": [["add", "def", "my_list", []], ["add", "def", "other_val", []], ["add", "def", "some_val", []], ["add", "def", "unused1", []], ["add", "inductive", "unused_type", []], ["add", "def", "used_somewhere_else", []]]}]}, {"timestamp": 1597347390, "sha": "28dfad8c", "message": "feat(ideals,submonoids,subgroups): mem_sup(r) and mem_inf(i) lemmas (#3697)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "mem_Sup_of_mem", ["subgroup"]], ["add", "theorem", "mem_sup_left", ["subgroup"]], ["add", "theorem", "mem_sup_right", ["subgroup"]], ["add", "theorem", "mem_supr_of_mem", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mem_Sup_of_mem", ["submonoid"]], ["add", "theorem", "mem_sup_left", ["submonoid"]], ["add", "theorem", "mem_sup_right", ["submonoid"]], ["add", "theorem", "mem_supr_of_mem", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mem_Sup_of_mem", ["submodule"]], ["add", "theorem", "mem_sup_left", ["submodule"]], ["add", "theorem", "mem_sup_right", ["submodule"]], ["mod", "theorem", "mem_supr_of_mem", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": [["add", "theorem", "mem_Sup_of_mem", ["ideal"]], ["add", "theorem", "mem_inf", ["ideal"]], ["add", "theorem", "mem_infi", ["ideal"]], ["add", "theorem", "mem_sup_left", ["ideal"]], ["add", "theorem", "mem_sup_right", ["ideal"]], ["add", "theorem", "mem_supr_of_mem", ["ideal"]]]}]}, {"timestamp": 1597342140, "sha": "4cc094bc", "message": "chore(data/int/basic): norm_cast attribute on int.coe_nat_mod (#3765)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "coe_nat_mod", ["int"]]]}]}, {"timestamp": 1597328994, "sha": "c66ecd3f", "message": "feat(intervals/image_preimage): preimage under multiplication (#3757)\nAdd lemmas `preimage_mul_const_Ixx` and `preimage_const_mul_Ixx`.\nAlso generalize `equiv.mul_left` and `equiv.mul_right` to `units`.", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "lt_div_iff_of_neg", []]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["mod", "def", "to_units", []], ["add", "theorem", "coe_mul_left", ["units"]], ["add", "theorem", "coe_mul_right", ["units"]], ["add", "def", "mul_left", ["units"]], ["add", "theorem", "mul_left_symm", ["units"]], ["add", "def", "mul_right", ["units"]], ["add", "theorem", "mul_right_symm", ["units"]]]}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": [["add", "theorem", "preimage_const_mul_Icc", ["set"]], ["add", "theorem", "preimage_const_mul_Icc_of_neg", ["set"]], ["add", "theorem", "preimage_const_mul_Ici", ["set"]], ["add", "theorem", "preimage_const_mul_Ici_of_neg", ["set"]], ["add", "theorem", "preimage_const_mul_Ico", ["set"]], ["add", "theorem", "preimage_const_mul_Ico_of_neg", ["set"]], ["add", "theorem", "preimage_const_mul_Iic", ["set"]], ["add", "theorem", "preimage_const_mul_Iic_of_neg", ["set"]], ["add", "theorem", "preimage_const_mul_Iio", ["set"]], ["add", "theorem", "preimage_const_mul_Iio_of_neg", ["set"]], ["add", "theorem", "preimage_const_mul_Ioc", ["set"]], ["add", "theorem", "preimage_const_mul_Ioc_of_neg", ["set"]], ["add", "theorem", "preimage_const_mul_Ioi", ["set"]], ["add", "theorem", "preimage_const_mul_Ioi_of_neg", ["set"]], ["add", "theorem", "preimage_const_mul_Ioo", ["set"]], ["add", "theorem", "preimage_const_mul_Ioo_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Icc", ["set"]], ["add", "theorem", "preimage_mul_const_Icc_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Ici", ["set"]], ["add", "theorem", "preimage_mul_const_Ici_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Ico", ["set"]], ["add", "theorem", "preimage_mul_const_Ico_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Iic", ["set"]], ["add", "theorem", "preimage_mul_const_Iic_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Iio", ["set"]], ["add", "theorem", "preimage_mul_const_Iio_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Ioc", ["set"]], ["add", "theorem", "preimage_mul_const_Ioc_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Ioi", ["set"]], ["add", "theorem", "preimage_mul_const_Ioi_of_neg", ["set"]], ["add", "theorem", "preimage_mul_const_Ioo", ["set"]], ["add", "theorem", "preimage_mul_const_Ioo_of_neg", ["set"]]]}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}]}, {"timestamp": 1597323577, "sha": "f912f188", "message": "feat(ci): auto label merge conflicts (#3761)", "changes": [{"oldPath": null, "newPath": ".github/workflows/merge_conflicts.yml", "changes": []}]}, {"timestamp": 1597323575, "sha": "34352c2d", "message": "refactor(algebra/associated): change several instances from [integral_domain] to [comm_cancel_monoid_with_zero] (#3744)\ndefines `comm_cancel_monoid_with_zero`\nreplaces some `integral_domain` instances with `comm_cancel_monoid_with_zero`\nprepares the API for refactoring `normalization_domain`, `gcd_domain`, and `unique_factorization_domain` to monoids", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "associated_mul_left_cancel", []], ["mod", "theorem", "associated_mul_right_cancel", []], ["mod", "theorem", "prod_eq_zero_iff", ["associates"]], ["mod", "theorem", "dvd_and_not_dvd_iff", []], ["mod", "theorem", "exists_associated_mem_of_dvd_prod", []], ["mod", "theorem", "irreducible_of_prime", []], ["mod", "theorem", "pow_dvd_pow_iff", []], ["mod", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", []]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "mul_dvd_mul_iff_right", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "mul_dvd_mul_iff_right", []]]}]}, {"timestamp": 1597323573, "sha": "2c4300b4", "message": "feat(data/polynomial): adds map_comp (#3736)\nAdds lemma saying that the map of the composition of two polynomials is the composition of the maps, as mentioned [here](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Polynomial.20composition.20and.20map.20commute).", "changes": [{"oldPath": "src/algebra/big_operators/basic.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["add", "theorem", "prod_subset_one_on_sdiff", ["finset"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "map_comp", ["polynomial"]], ["add", "theorem", "map_sum", ["polynomial"]], ["add", "theorem", "support_map_subset", ["polynomial"]]]}]}, {"timestamp": 1597318320, "sha": "ac2f0118", "message": "feat(data/*): Add sizeof lemmas. (#3745)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "sizeof_lt_sizeof_of_mem", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "sizeof_lt_sizeof_of_mem", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "sizeof_eq_sizeof", ["list", "perm"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "sizeof_lt_sizeof_of_mem", ["multiset"]]]}]}, {"timestamp": 1597316460, "sha": "b1e56a21", "message": "feat(analysis/special_functions/trigonometric): Added lemma cos_ne_zero_iff (#3743)\nI added the theorem `cos_ne_zero_iff`, a corollary to the preexisting theorem `cos_eq_zero_iff`\n", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "cos_ne_zero_iff", ["real"]]]}]}, {"timestamp": 1597310582, "sha": "ced74696", "message": "chore(data/finset/order): use `[nonempty]` in `directed.finset_le` (#3759)", "changes": [{"oldPath": "src/data/finset/order.lean", "newPath": "src/data/finset/order.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1597310580, "sha": "4c24a091", "message": "chore(data/fintype/card): add `prod_bool` (#3758)", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_bool", ["fintype"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1597310578, "sha": "31a0258b", "message": "chore(data/fintype/card): DRY using `@... (multiplicative _)` (#3756)", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}]}, {"timestamp": 1597310576, "sha": "cc6528e7", "message": "feat(analysis/calculus/fderiv): multiplication by a complex respects real differentiability (#3731)\nIf `f` takes values in a complex vector space and is real-differentiable, then `c f` is also real-differentiable when `c` is a complex number. This PR proves this fact and the obvious variations, in the general case of two fields where one is a normed algebra over the other one.\nAlong the way, some material on `module.restrict_scalars` is added, notably in a normed space context.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "const_smul_algebra", ["differentiable"]], ["add", "theorem", "smul_algebra", ["differentiable"]], ["add", "theorem", "smul_algebra_const", ["differentiable"]], ["add", "theorem", "const_smul_algebra", ["differentiable_at"]], ["add", "theorem", "smul_algebra", ["differentiable_at"]], ["add", "theorem", "smul_algebra_const", ["differentiable_at"]], ["add", "theorem", "const_smul_algebra", ["differentiable_on"]], ["add", "theorem", "smul_algebra", ["differentiable_on"]], ["add", "theorem", "smul_algebra_const", ["differentiable_on"]], ["add", "theorem", "const_smul_algebra", ["differentiable_within_at"]], ["add", "theorem", "smul_algebra", ["differentiable_within_at"]], ["add", "theorem", "smul_algebra_const", ["differentiable_within_at"]], ["add", "theorem", "fderiv_const_smul_algebra", []], ["add", "theorem", "fderiv_smul_algebra", []], ["add", "theorem", "fderiv_smul_algebra_const", []], ["add", "theorem", "fderiv_within_const_smul_algebra", []], ["add", "theorem", "fderiv_within_smul_algebra", []], ["add", "theorem", "fderiv_within_smul_algebra_const", []], ["add", "theorem", "const_smul_algebra", ["has_fderiv_at"]], ["add", "theorem", "smul_algebra", ["has_fderiv_at"]], ["add", "theorem", "smul_algebra_const", ["has_fderiv_at"]], ["add", "theorem", "const_smul_algebra", ["has_fderiv_at_filter"]], ["add", "theorem", "const_smul_algebra", ["has_fderiv_within_at"]], ["add", "theorem", "smul_algebra", ["has_fderiv_within_at"]], ["add", "theorem", "smul_algebra_const", ["has_fderiv_within_at"]], ["add", "theorem", "const_smul_algebra", ["has_strict_fderiv_at"]], ["add", "theorem", "smul_algebra", ["has_strict_fderiv_at"]], ["add", "theorem", "smul_algebra_const", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "def", "restrict_scalars'", ["normed_space"]], ["del", "def", "restrict_scalars", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bounded_bilinear_map_smul_algebra", []]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "has_sum", ["continuous_linear_map"]], ["mod", "theorem", "has_sum_of_summable", ["continuous_linear_map"]], ["mod", "def", "restrict_scalars", ["continuous_linear_map"]], ["add", "def", "smul_algebra_right", ["continuous_linear_map"]], ["add", "theorem", "smul_algebra_right_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "smul_algebra_right", []], ["add", "theorem", "smul_algebra_right_apply", []], ["add", "theorem", "smul_algebra_smul", []], ["add", "theorem", "smul_algebra_smul_comm", []]]}]}, {"timestamp": 1597310572, "sha": "cfcbea6e", "message": "feat(data/list/palindrome): define palindromes (#3729)\nThis introduces an inductive type `palindrome`, with conversions to and from the proposition `reverse l = l`.\nReview of this PR indicates two things: (1) maybe the name `is_palindrome` is better, especially if we define the subtype of palindromic lists; (2) maybe defining palindrome by `reverse l = l` is simpler. We note these for future development.", "changes": [{"oldPath": null, "newPath": "src/data/list/palindrome.lean", "changes": [["add", "theorem", "append_reverse", ["palindrome"]], ["add", "theorem", "iff_reverse_eq", ["palindrome"]], ["add", "theorem", "of_reverse_eq", ["palindrome"]], ["add", "theorem", "reverse_eq", ["palindrome"]], ["add", "inductive", "palindrome", []]]}]}, {"timestamp": 1597305155, "sha": "c503b7af", "message": "feat(algebra/order): more lemmas for projection notation (#3753)\nAlso import `tactic.lint` and ensure that the linter passes\nMove `ge_of_eq` to this file", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "trans_le", ["eq"]], ["mod", "theorem", "ge_iff_le", []], ["add", "theorem", "ge_of_eq", []], ["mod", "theorem", "gt_iff_lt", []], ["add", "theorem", "trans_eq", ["has_le", "le"]], ["mod", "theorem", "le_implies_le_of_le_of_le", []], ["add", "theorem", "le_rfl", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "ge_of_eq", []]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}]}, {"timestamp": 1597299740, "sha": "6c8b2cd6", "message": "fix(algebra/field) remove `one_div_eq_inv` (#3749)\nIt already existed as `one_div` for `group_with_zero`\nAlso make `one_div` a `simp` lemma and renamed `nnreal.one_div_eq_inv` to `nnreal.one_div`.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "one_div_eq_inv", []]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "one_div", []], ["mod", "theorem", "one_div_one_div", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "one_div", ["nnreal"]], ["del", "theorem", "one_div_eq_inv", ["nnreal"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": []}]}, {"timestamp": 1597281043, "sha": "d6ffc1ad", "message": "feat(tactic/clear_value): preserve order and naming (#3700)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1597279373, "sha": "cacb54ec", "message": "chore(scripts): update nolints.txt (#3754)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1597273760, "sha": "486830b0", "message": "feat(tactic/choose): `choose` can now decompose conjunctions (#3699)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/choose.lean", "newPath": "test/choose.lean", "changes": []}]}, {"timestamp": 1597262661, "sha": "f8c81351", "message": "feat(tactic/rcases): type ascriptions in rcases (#3730)\nThis is a general rewrite of the `rcases` tactic, with the primary intent of adding support for type ascriptions in `rcases` patterns but it also includes a bunch more documentation, as well as making the grammar simpler, avoiding the strict tuple/alts alternations required by the previous `many` constructor (and the need for `rcases_patt_inverted` for whether the constructor means `tuple` of `alts` or `alts` of `tuple`).\nFrom a user perspective, it should not be noticeably different, except:\n* You can now use parentheses freely in patterns, so things like `a | (b | c)` work\n* You can use type ascriptions\nThe new `rcases` is backward compatible with the old one, except that `rcases e with a` (where `a` is a name) no longer does any cases and is basically just another way to write `have a := e`; to get the same effect as `cases e with a` you have to write `rcases e with ⟨a⟩` instead.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1597250004, "sha": "4324778f", "message": "feat(.): add code of conduct (#3747)", "changes": [{"oldPath": null, "newPath": "CODE_OF_CONDUCT.md", "changes": []}]}, {"timestamp": 1597244667, "sha": "eb4b2a05", "message": "feat(field_theory/algebraic_closure): algebraic closure (#3733)\n```lean\ninstance : is_alg_closed (algebraic_closure k) :=\n```\nTODO: Show that any algebraic extension embeds into any algebraically closed extension (via Zorn's lemma).", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["add", "theorem", "exists_of", ["ring", "direct_limit", "polynomial"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "algebra_map_eq", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "degree_pos_of_irreducible", ["polynomial"]], ["add", "theorem", "monic_map_iff", ["polynomial"]], ["add", "theorem", "not_irreducible_C", ["polynomial"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": null, "newPath": "src/field_theory/algebraic_closure.lean", "changes": [["add", "theorem", "algebra_map", ["algebraic_closure", "adjoin_monic"]], ["add", "theorem", "exists_root", ["algebraic_closure", "adjoin_monic"]], ["add", "theorem", "is_integral", ["algebraic_closure", "adjoin_monic"]], ["add", "def", "adjoin_monic", ["algebraic_closure"]], ["add", "theorem", "coe_to_step_of_le", ["algebraic_closure"]], ["add", "def", "eval_X_self", ["algebraic_closure"]], ["add", "theorem", "exists_of_step", ["algebraic_closure"]], ["add", "theorem", "exists_root", ["algebraic_closure"]], ["add", "theorem", "is_algebraic", ["algebraic_closure"]], ["add", "theorem", "le_max_ideal", ["algebraic_closure"]], ["add", "def", "max_ideal", ["algebraic_closure"]], ["add", "def", "monic_irreducible", ["algebraic_closure"]], ["add", "def", "of_step", ["algebraic_closure"]], ["add", "def", "of_step_hom", ["algebraic_closure"]], ["add", "theorem", "of_step_succ", ["algebraic_closure"]], ["add", "def", "span_eval", ["algebraic_closure"]], ["add", "theorem", "span_eval_ne_top", ["algebraic_closure"]], ["add", "theorem", "is_integral", ["algebraic_closure", "step"]], ["add", "def", "step", ["algebraic_closure"]], ["add", "def", "step_aux", ["algebraic_closure"]], ["add", "def", "to_adjoin_monic", ["algebraic_closure"]], ["add", "def", "to_splitting_field", ["algebraic_closure"]], ["add", "theorem", "to_splitting_field_eval_X_self", ["algebraic_closure"]], ["add", "def", "to_step_of_le", ["algebraic_closure"]], ["add", "theorem", "exists_root", ["algebraic_closure", "to_step_succ"]], ["add", "def", "to_step_succ", ["algebraic_closure"]], ["add", "def", "to_step_zero", ["algebraic_closure"]], ["add", "def", "algebraic_closure", []], ["add", "theorem", "of_exists_root", ["is_alg_closed"]], ["add", "def", "is_alg_closure", []], ["add", "theorem", "splits'", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "map_root_of_splits", ["polynomial"]], ["add", "def", "root_of_splits", ["polynomial"]], ["add", "theorem", "splits_of_is_unit", ["polynomial"]]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "comp_algebra_map", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1597228874, "sha": "bfcf6400", "message": "feat(topology/opens): open_embedding_of_le (#3597)\nAdd `lemma open_embedding_of_le {U V : opens α} (i : U ≤ V) : open_embedding (set.inclusion i)`.\nAlso, I was finding it quite inconvenient to have `x ∈ U` for `U : opens X` being unrelated to `x ∈ (U : set X)`. I propose we just add the simp lemmas in this PR that unfold to the set-level membership operation.\n(I'd be happy to go the other way if someone has a strong opinion here; just that we pick a simp normal form for talking about membership and inclusion of opens.)", "changes": [{"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "theorem", "mem_coe", ["topological_space", "opens"]], ["add", "theorem", "mem_supr", ["topological_space", "opens"]], ["add", "theorem", "open_embedding_of_le", ["topological_space", "opens"]], ["add", "theorem", "subset_coe", ["topological_space", "opens"]], ["add", "theorem", "supr_s", ["topological_space", "opens"]]]}]}, {"timestamp": 1597159896, "sha": "06e14052", "message": "docs(category/default): Fix typo for monomorphism (#3741)", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}]}, {"timestamp": 1597139863, "sha": "f92fd0d1", "message": "refactor(algebra/divisibility, associated): generalize instances in divisibility, associated (#3714)\ngeneralizes the divisibility relation to noncommutative monoids\nadds missing headers to algebra/divisibility\ngeneralizes the instances in many of the lemmas in algebra/associated\nreunites (some of the) divisibility API for ordinals with general monoids", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "associated_of_dvd_dvd", []], ["mod", "theorem", "dvd_dvd_iff_associated", []], ["mod", "theorem", "dvd_dvd_of_associated", []], ["mod", "theorem", "dvd_iff_dvd_of_rel_left", []], ["del", "theorem", "dvd_mul_unit_iff", []], ["mod", "theorem", "dvd_of_associated", []], ["mod", "theorem", "dvd_symm_iff_of_irreducible", []], ["mod", "theorem", "dvd_symm_of_irreducible", []], ["mod", "theorem", "exists_mem_multiset_dvd_of_prime", []], ["mod", "theorem", "ne_zero", ["irreducible"]], ["mod", "theorem", "is_unit_iff_dvd_one", []], ["mod", "theorem", "is_unit_iff_forall_dvd", []], ["mod", "theorem", "is_unit_of_dvd_one", []], ["mod", "theorem", "is_unit_of_dvd_unit", []], ["del", "theorem", "mul_dvd_of_is_unit_left", []], ["del", "theorem", "mul_dvd_of_is_unit_right", []], ["del", "theorem", "mul_unit_dvd_iff", []], ["mod", "theorem", "not_irreducible_zero", []], ["mod", "theorem", "not_prime_one", []], ["mod", "theorem", "not_prime_zero", []], ["mod", "theorem", "div_or_div", ["prime"]], ["mod", "theorem", "dvd_of_dvd_pow", ["prime"]], ["mod", "theorem", "ne_zero", ["prime"]], ["mod", "theorem", "not_unit", ["prime"]], ["mod", "def", "prime", []], ["del", "theorem", "unit_mul_dvd_iff", []]]}, {"oldPath": "src/algebra/divisibility.lean", "newPath": "src/algebra/divisibility.lean", "changes": [["mod", "theorem", "dvd_mul_left", []], ["add", "theorem", "dvd", ["is_unit"]], ["add", "theorem", "dvd_mul_left", ["is_unit"]], ["add", "theorem", "dvd_mul_right", ["is_unit"]], ["add", "theorem", "mul_left_dvd", ["is_unit"]], ["add", "theorem", "mul_right_dvd", ["is_unit"]], ["add", "theorem", "mul_dvd_mul_iff_left", []], ["mod", "theorem", "one_dvd", []], ["add", "theorem", "coe_dvd", ["units"]], ["add", "theorem", "dvd_mul_left", ["units"]], ["add", "theorem", "dvd_mul_right", ["units"]], ["add", "theorem", "mul_left_dvd", ["units"]], ["add", "theorem", "mul_right_dvd", ["units"]]]}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "pow_dvd_pow", []], ["mod", "theorem", "pow_dvd_pow_of_dvd", []], ["mod", "theorem", "pow_eq_zero", []], ["mod", "theorem", "pow_ne_zero", []], ["mod", "theorem", "zero_pow", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "mul_left_dvd_of_dvd", ["is_unit"]], ["del", "theorem", "mul_right_dvd_of_dvd", ["is_unit"]], ["del", "theorem", "mul_dvd_mul_iff_left", []], ["mod", "theorem", "two_dvd_bit1", []], ["del", "theorem", "coe_dvd", ["units"]], ["del", "theorem", "coe_mul_dvd", ["units"]], ["del", "theorem", "coe_ne_zero", ["units"]], ["del", "theorem", "dvd_coe", ["units"]], ["del", "theorem", "dvd_coe_mul", ["units"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal/basic.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_arithmetic.lean", "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["del", "theorem", "dvd_def", ["ordinal"]], ["del", "theorem", "dvd_mul", ["ordinal"]], ["del", "theorem", "dvd_mul_of_dvd", ["ordinal"]], ["del", "theorem", "dvd_trans", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1597130647, "sha": "57df7f5a", "message": "feat(haar_measure): define the Haar measure (#3542)\nDefine the Haar measure on a locally compact Hausdorff group.\nSome additions and simplifications to outer_measure and content.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/measure_theory/content.lean", "newPath": "src/measure_theory/content.lean", "changes": [["add", "theorem", "inner_content_comap", ["measure_theory"]], ["add", "theorem", "is_left_invariant_of_content", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_eq_infi", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_preimage", ["measure_theory", "outer_measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/haar_measure.lean", "changes": [["add", "theorem", "chaar_le_haar_outer_measure", ["measure_theory", "measure"]], ["add", "def", "chaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_empty", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_mem_cl_prehaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_mem_haar_product", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_mono", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_nonneg", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_self", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_sup_eq", ["measure_theory", "measure", "haar"]], ["add", "theorem", "chaar_sup_le", ["measure_theory", "measure", "haar"]], ["add", "def", "cl_prehaar", ["measure_theory", "measure", "haar"]], ["add", "def", "echaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "echaar_mono", ["measure_theory", "measure", "haar"]], ["add", "theorem", "echaar_sup_le", ["measure_theory", "measure", "haar"]], ["add", "def", "haar_product", ["measure_theory", "measure", "haar"]], ["add", "def", "index", ["measure_theory", "measure", "haar"]], ["add", "theorem", "index_defined", ["measure_theory", "measure", "haar"]], ["add", "theorem", "index_elim", ["measure_theory", "measure", "haar"]], ["add", "theorem", "index_empty", ["measure_theory", "measure", "haar"]], ["add", "theorem", "index_mono", ["measure_theory", "measure", "haar"]], ["add", "theorem", "index_pos", ["measure_theory", "measure", "haar"]], ["add", "theorem", "index_union_eq", ["measure_theory", "measure", "haar"]], ["add", "theorem", "index_union_le", ["measure_theory", "measure", "haar"]], ["add", "theorem", "is_left_invariant_chaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "is_left_invariant_index", ["measure_theory", "measure", "haar"]], ["add", "theorem", "is_left_invariant_prehaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "le_index_mul", ["measure_theory", "measure", "haar"]], ["add", "theorem", "mem_prehaar_empty", ["measure_theory", "measure", "haar"]], ["add", "theorem", "mul_left_index_le", ["measure_theory", "measure", "haar"]], ["add", "theorem", "nonempty_Inter_cl_prehaar", ["measure_theory", "measure", "haar"]], ["add", "def", "prehaar", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_empty", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_le_index", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_mem_haar_product", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_mono", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_nonneg", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_pos", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_self", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_sup_eq", ["measure_theory", "measure", "haar"]], ["add", "theorem", "prehaar_sup_le", ["measure_theory", "measure", "haar"]], ["add", "theorem", "haar_caratheodory_measurable", ["measure_theory", "measure"]], ["add", "def", "haar_measure", ["measure_theory", "measure"]], ["add", "theorem", "haar_measure_apply", ["measure_theory", "measure"]], ["add", "theorem", "haar_measure_pos_of_is_open", ["measure_theory", "measure"]], ["add", "theorem", "haar_measure_self", ["measure_theory", "measure"]], ["add", "def", "haar_outer_measure", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_caratheodory", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_eq_infi", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_exists_compact", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_exists_open", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_le_chaar", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_lt_top_of_is_compact", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_of_is_open", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_pos_of_is_open", ["measure_theory", "measure"]], ["add", "theorem", "haar_outer_measure_self_pos", ["measure_theory", "measure"]], ["add", "theorem", "is_left_invariant_haar_measure", ["measure_theory", "measure"]], ["add", "theorem", "one_le_haar_outer_measure_self", ["measure_theory", "measure"]], ["add", "theorem", "regular_haar_measure", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "induced_outer_measure_preimage", ["measure_theory"]], ["mod", "theorem", "le_trim_iff", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "inter_Inter_nonempty", ["is_compact"]]]}]}, {"timestamp": 1597106544, "sha": "43ceb3e0", "message": "chore(scripts): update nolints.txt (#3734)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1597087735, "sha": "9e039956", "message": "chore(algebra/ordered_field): cleanup (#3723)\n* drop `mul_zero_lt_mul_inv_of_pos` and `mul_zero_lt_mul_inv_of_neg`;\n* add `iff` lemmas `one_div_pos/neg/nonneg/nonpos` replacing old\n implications;\n* some lemmas now assume `≤` instead of `<`;\n* rename `mul_lt_of_gt_div_of_neg` to `mul_lt_of_neg_of_div_lt`\n replacing `>` by `<`.\n* add `mul_sub_mul_div_mul_neg_iff` and `mul_sub_mul_div_mul_nonpos_iff`,\n generate implications using `alias`;\n* drop `div_pos_of_pos_of_pos` (use `div_pos`) and\n `div_nonneg_of_nonneg_of_pos` (use `div_nonneg`);\n* replace `div_nonpos_of_nonpos_of_pos` with\n `div_nonpos_of_nonpos_of_nonneg`;\n* replace `div_nonpos_of_nonneg_of_neg` with\n `div_nonpos_of_nonneg_of_nonpos`;\n* replace `div_mul_le_div_mul_of_div_le_div_pos` and\n `div_mul_le_div_mul_of_div_le_div_pos'` with\n `div_mul_le_div_mul_of_div_le_div_nonneg`; I failed to find\n in the history why we had two equivalent lemmas.\n* merge `le_mul_of_ge_one_right` and `le_mul_of_one_le_right'` into\n `le_mul_of_one_le_right`, rename old `le_mul_of_one_le_right` to\n `le_mul_of_one_le_right'`;\n* ditto with `le_mul_of_ge_one_left`, `le_mul_of_one_le_left`, and\n `le_mul_of_one_le_left'`;\n* ditto with `lt_mul_of_gt_one_right`, `lt_mul_of_one_lt_right`, and\n `lt_mul_of_one_lt_right'`;\n* rename `div_lt_of_mul_lt_of_pos` to `div_lt_of_pos_of_lt_mul`;\n* rename `div_lt_of_mul_gt_of_neg` to `div_lt_of_neg_of_mul_lt`;\n* rename `mul_le_of_div_le_of_neg` to `mul_le_of_neg_of_div_le`;\n* rename `div_le_of_mul_le_of_neg` to `div_le_of_neg_of_mul_le`;\n* rename `div_lt_div_of_lt_of_pos` to `div_lt_div_of_pos_of_lt`, swap\n arguments;\n* rename `div_le_div_of_le_of_pos` to `div_le_div_of_pos_of_le`, swap\n arguments;\n* rename `div_lt_div_of_lt_of_neg` to `div_lt_div_of_neg_of_lt`, swap\n arguments;\n* rename `div_le_div_of_le_of_neg` to `div_le_div_of_neg_of_le`, swap\n arguments;\n* rename `one_div_lt_one_div_of_lt_of_neg` to\n `one_div_lt_one_div_of_neg_of_lt`;\n* rename `one_div_le_one_div_of_le_of_neg` to\n `one_div_le_one_div_of_neg_of_le`;\n* rename `le_of_one_div_le_one_div_of_neg` to\n `le_of_neg_of_one_div_le_one_div`;\n* rename `lt_of_one_div_lt_one_div_of_neg` to\n `lt_of_neg_of_one_div_lt_one_div`;\n* rename `one_div_le_of_one_div_le_of_pos` to\n `one_div_le_of_pos_of_one_div_le`;\n* rename `one_div_le_of_one_div_le_of_neg` to\n `one_div_le_of_neg_of_one_div_le`.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "zero_eq_inv", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["del", "theorem", "div_le_div_of_le_of_neg", []], ["del", "theorem", "div_le_div_of_le_of_pos", []], ["del", "theorem", "div_le_div_of_mul_sub_mul_div_nonpos", []], ["add", "theorem", "div_le_div_of_neg_of_le", []], ["add", "theorem", "div_le_div_of_pos_of_le", []], ["mod", "theorem", "div_le_of_le_mul", []], ["del", "theorem", "div_le_of_mul_le_of_neg", []], ["add", "theorem", "div_le_of_neg_of_mul_le", []], ["del", "theorem", "div_lt_div_of_lt_of_neg", []], ["del", "theorem", "div_lt_div_of_lt_of_pos", []], ["del", "theorem", "div_lt_div_of_mul_sub_mul_div_neg", []], ["add", "theorem", "div_lt_div_of_neg_of_lt", []], ["add", "theorem", "div_lt_div_of_pos_of_lt", []], ["del", "theorem", "div_lt_of_mul_gt_of_neg", []], ["del", "theorem", "div_lt_of_mul_lt_of_pos", []], ["add", "theorem", "div_lt_of_neg_of_mul_lt", []], ["add", "theorem", "div_lt_of_pos_of_lt_mul", []], ["add", "theorem", "div_mul_le_div_mul_of_div_le_div_nonneg", []], ["del", "theorem", "div_mul_le_div_mul_of_div_le_div_pos'", []], ["del", "theorem", "div_mul_le_div_mul_of_div_le_div_pos", []], ["mod", "theorem", "div_neg_of_neg_of_pos", []], ["mod", "theorem", "div_neg_of_pos_of_neg", []], ["del", "theorem", "div_nonneg'", []], ["mod", "theorem", "div_nonneg", []], ["del", "theorem", "div_nonneg_of_nonneg_of_pos", []], ["add", "theorem", "div_nonneg_of_nonpos", []], ["del", "theorem", "div_nonneg_of_nonpos_of_neg", []], ["del", "theorem", "div_nonpos_of_nonneg_of_neg", []], ["add", "theorem", "div_nonpos_of_nonneg_of_nonpos", []], ["add", "theorem", "div_nonpos_of_nonpos_of_nonneg", []], ["del", "theorem", "div_nonpos_of_nonpos_of_pos", []], ["mod", "theorem", "div_pos", []], ["mod", "theorem", "div_pos_of_neg_of_neg", []], ["del", "theorem", "div_pos_of_pos_of_pos", []], ["mod", "theorem", "div_two_lt_of_pos", []], ["mod", "theorem", "inv_lt_zero", []], ["mod", "theorem", "inv_pos", []], ["mod", "theorem", "le_mul_of_div_le", []], ["del", "theorem", "le_mul_of_ge_one_left", []], ["del", "theorem", "le_mul_of_ge_one_right", []], ["add", "theorem", "le_of_neg_of_one_div_le_one_div", []], ["del", "theorem", "le_of_one_div_le_one_div_of_neg", []], ["mod", "theorem", "le_of_one_le_div", []], ["del", "theorem", "lt_mul_of_gt_one_right", []], ["add", "theorem", "lt_of_neg_of_one_div_lt_one_div", []], ["del", "theorem", "lt_of_one_div_lt_one_div_of_neg", []], ["mod", "theorem", "lt_of_one_lt_div", []], ["mod", "theorem", "mul_le_mul_of_mul_div_le", []], ["del", "theorem", "mul_le_of_div_le_of_neg", []], ["add", "theorem", "mul_le_of_neg_of_div_le", []], ["del", "theorem", "mul_lt_of_gt_div_of_neg", []], ["add", "theorem", "mul_lt_of_neg_of_div_lt", []], ["del", "theorem", "mul_sub_mul_div_mul_neg", []], ["add", "theorem", "mul_sub_mul_div_mul_neg_iff", []], ["del", "theorem", "mul_sub_mul_div_mul_nonpos", []], ["add", "theorem", "mul_sub_mul_div_mul_nonpos_iff", []], ["del", "theorem", "mul_zero_lt_mul_inv_of_neg", []], ["del", "theorem", "mul_zero_lt_mul_inv_of_pos", []], ["del", "theorem", "neg_of_one_div_neg", []], ["add", "theorem", "one_div_le_of_neg_of_one_div_le", []], ["del", "theorem", "one_div_le_of_one_div_le_of_neg", []], ["del", "theorem", "one_div_le_of_one_div_le_of_pos", []], ["add", "theorem", "one_div_le_of_pos_of_one_div_le", []], ["del", "theorem", "one_div_le_one_div_of_le_of_neg", []], ["add", "theorem", "one_div_le_one_div_of_neg_of_le", []], ["del", "theorem", "one_div_lt_one_div_of_lt_of_neg", []], ["add", "theorem", "one_div_lt_one_div_of_neg_of_lt", []], ["add", "theorem", "one_div_neg", []], ["del", "theorem", "one_div_neg_of_neg", []], ["add", "theorem", "one_div_nonneg", []], ["add", "theorem", "one_div_nonpos", []], ["add", "theorem", "one_div_pos", []], ["del", "theorem", "one_div_pos_of_pos", []], ["mod", "theorem", "one_le_div_of_le", []], ["mod", "theorem", "one_lt_div_of_lt", []], ["del", "theorem", "pos_of_one_div_pos", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "le_mul_of_one_le_left'", []], ["del", "theorem", "le_mul_of_one_le_left", []], ["add", "theorem", "le_mul_of_one_le_right'", []], ["del", "theorem", "le_mul_of_one_le_right", []], ["add", "theorem", "lt_mul_of_one_lt_left'", []], ["del", "theorem", "lt_mul_of_one_lt_left", []], ["add", "theorem", "lt_mul_of_one_lt_right'", []], ["del", "theorem", "lt_mul_of_one_lt_right", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "le_mul_of_one_le_left'", []], ["add", "theorem", "le_mul_of_one_le_left", []], ["del", "theorem", "le_mul_of_one_le_right'", []], ["add", "theorem", "le_mul_of_one_le_right", []], ["del", "theorem", "lt_mul_of_one_lt_right'", []], ["add", "theorem", "lt_mul_of_one_lt_right", []]]}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/caratheodory.lean", "newPath": "src/analysis/convex/caratheodory.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}]}, {"timestamp": 1597087733, "sha": "4a75df92", "message": "feat(group_theory/group_action): generalize `is_algebra_tower` (#3717)\nThis PR introduces a new typeclass `is_scalar_tower R M N` stating that scalar multiplications between the three types are compatible: `smul_assoc : ((x : R) • (y : M)) • (z : N) = x • (y • z)`.\nThis typeclass is the general form of `is_algebra_tower`. It also generalizes some of the existing instances of `is_algebra_tower`. I didn't try very hard though, so I might have missed some instances.\nRelated Zulip discussions:\n * https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Effect.20of.20changing.20the.20base.20field.20on.20span\n * https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/pull.20back.20an.20R.20module.20along.20.60S.20-.3E.2B*.20R.60", "changes": [{"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": "src/algebra/module/ulift.lean", "newPath": "src/algebra/module/ulift.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "smul_assoc", []]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "def", "is_algebra_tower", []]]}, {"oldPath": "src/ring_theory/ideal/operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": [["del", "theorem", "smul_assoc", ["submodule"]]]}]}, {"timestamp": 1597082147, "sha": "37e97b53", "message": "feat(tactic): fix two bugs with generalize' (#3710)\nThe name generated by `generalize'` will be exactly the given name, even if the name already occurs in the context.\nThere was a bug with `generalize' h : e = x` if `e` occurred in the goal.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1597072748, "sha": "47861363", "message": "feat(category_theory/limits): explicit isomorphisms between preserved limits (#3602)\nWhen `G` preserves limits, it's nice to be able to quickly obtain the iso `G.obj (pi_obj f) ≅ pi_obj (λ j, G.obj (f j))`.", "changes": [{"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/preserves/shapes.lean", "changes": [["add", "theorem", "map_lift_comp_preserves_products_iso_hom", []], ["add", "def", "preserves_limits_iso", []], ["add", "theorem", "preserves_limits_iso_hom_π", []], ["add", "def", "preserves_products_iso", []], ["add", "theorem", "preserves_products_iso_hom_π", []]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}]}, {"timestamp": 1597063562, "sha": "5680428f", "message": "chore(category_theory/limits): minor changes in equalizers and products (#3603)", "changes": [{"oldPath": "src/algebra/category/Group/abelian.lean", "newPath": "src/algebra/category/Group/abelian.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": [["add", "def", "has_colimit_of_has_limit_left_op", ["category_theory", "limits"]], ["add", "def", "has_colimits_of_shape_op_of_has_limits_of_shape", ["category_theory", "limits"]], ["add", "def", "has_colimits_op_of_has_limits", ["category_theory", "limits"]], ["add", "def", "has_coproducts_opposite", ["category_theory", "limits"]], ["add", "def", "has_limit_of_has_colimit_left_op", ["category_theory", "limits"]], ["add", "def", "has_limits_of_shape_op_of_has_colimits_of_shape", ["category_theory", "limits"]], ["add", "def", "has_limits_op_of_has_colimits", ["category_theory", "limits"]], ["add", "def", "has_products_opposite", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "has_binary_coproducts", ["category_theory", "limits"]], ["add", "def", "has_binary_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/default.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "cofork", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "cofork_ι_app_one", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "cofork_π", ["category_theory", "limits", "coequalizer"]], ["mod", "def", "iso_target_of_self", ["category_theory", "limits", "coequalizer"]], ["mod", "theorem", "iso_target_of_self_hom", ["category_theory", "limits", "coequalizer"]], ["mod", "theorem", "iso_target_of_self_inv", ["category_theory", "limits", "coequalizer"]], ["del", "theorem", "cofork", ["category_theory", "limits", "coequalizer", "π"]], ["del", "theorem", "eq_app_one", ["category_theory", "limits", "coequalizer", "π"]], ["mod", "def", "π_of_eq", ["category_theory", "limits", "coequalizer"]], ["mod", "def", "coequalizer", ["category_theory", "limits"]], ["add", "def", "mk_hom", ["category_theory", "limits", "cofork"]], ["add", "def", "fork", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "fork_ι", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "fork_π_app_zero", ["category_theory", "limits", "equalizer"]], ["mod", "def", "iso_source_of_self", ["category_theory", "limits", "equalizer"]], ["mod", "theorem", "iso_source_of_self_hom", ["category_theory", "limits", "equalizer"]], ["mod", "theorem", "iso_source_of_self_inv", ["category_theory", "limits", "equalizer"]], ["del", "theorem", "eq_app_zero", ["category_theory", "limits", "equalizer", "ι"]], ["del", "theorem", "fork", ["category_theory", "limits", "equalizer", "ι"]], ["mod", "def", "ι_of_eq", ["category_theory", "limits", "equalizer"]], ["mod", "def", "equalizer", ["category_theory", "limits"]], ["add", "def", "mk_hom", ["category_theory", "limits", "fork"]], ["add", "def", "has_coequalizer", ["category_theory", "limits"]], ["add", "def", "has_coequalizers", ["category_theory", "limits"]], ["add", "def", "has_equalizer", ["category_theory", "limits"]], ["add", "def", "has_equalizers", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["del", "def", "has_coequalizers_of_has_finite_colimits", ["category_theory", "limits"]], ["del", "def", "has_equalizers_of_has_finite_limits", ["category_theory", "limits"]], ["add", "def", "has_finite_colimits", ["category_theory", "limits"]], ["add", "def", "has_finite_limits", ["category_theory", "limits"]], ["add", "def", "has_finite_wide_pullbacks", ["category_theory", "limits"]], ["add", "def", "has_finite_wide_pushouts", ["category_theory", "limits"]], ["del", "def", "has_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["del", "def", "has_pushouts_of_has_finite_colimits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": [["add", "def", "has_finite_coproducts", ["category_theory", "limits"]], ["add", "def", "has_finite_coproducts_of_has_coproducts", ["category_theory", "limits"]], ["add", "def", "has_finite_products", ["category_theory", "limits"]], ["add", "def", "has_finite_products_of_has_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "has_coproducts", ["category_theory", "limits"]], ["add", "def", "has_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "has_pullback", ["category_theory", "limits"]], ["add", "def", "has_pullbacks", ["category_theory", "limits"]], ["add", "def", "has_pushout", ["category_theory", "limits"]], ["add", "def", "has_pushouts", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "pullback"]], ["mod", "def", "desc'", ["category_theory", "limits", "pullback"]], ["mod", "def", "fst", ["category_theory", "limits", "pullback"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "pullback"]], ["mod", "def", "lift'", ["category_theory", "limits", "pullback"]], ["mod", "def", "lift", ["category_theory", "limits", "pullback"]], ["mod", "theorem", "lift_fst", ["category_theory", "limits", "pullback"]], ["mod", "theorem", "lift_snd", ["category_theory", "limits", "pullback"]], ["mod", "def", "snd", ["category_theory", "limits", "pullback"]], ["mod", "def", "pullback", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "pushout"]], ["mod", "def", "desc", ["category_theory", "limits", "pushout"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "pushout"]], ["mod", "def", "inl", ["category_theory", "limits", "pushout"]], ["mod", "theorem", "inl_desc", ["category_theory", "limits", "pushout"]], ["mod", "def", "inr", ["category_theory", "limits", "pushout"]], ["mod", "theorem", "inr_desc", ["category_theory", "limits", "pushout"]], ["mod", "def", "pushout", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "has_initial", ["category_theory", "limits"]], ["add", "def", "has_terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/types.lean", "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "pi", ["category_theory", "limits", "types"]], ["add", "theorem", "pi_lift", ["category_theory", "limits", "types"]], ["add", "theorem", "pi_map", ["category_theory", "limits", "types"]], ["add", "theorem", "pi_π", ["category_theory", "limits", "types"]], ["mod", "def", "types_has_products", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["add", "def", "has_wide_pullbacks", ["category_theory", "limits"]], ["add", "def", "has_wide_pushouts", ["category_theory", "limits"]]]}]}, {"timestamp": 1596935467, "sha": "17ef529d", "message": "refactor(linear_algebra/affine_space): split up file (#3726)\n`linear_algebra/affine_space.lean` was the 10th largest `.lean` file\nin mathlib. Move it to `linear_algebra/affine_space/basic.lean` and\nsplit out some pieces into separate files, so reducing its size to\n41st largest as well as reducing dependencies for users not needing\nall those files.\nMore pieces could also be split out (for example, splitting out\n`homothety` would eliminate the dependence of\n`linear_algebra.affine_space.basic` on\n`linear_algebra.tensor_product`), but this split seems a reasonable\nstarting point.\nThis split is intended to preserve the exact set of definitions\npresent and their namespaces, just moving some of them to different\nfiles, even if the existing namespaces aren't very consistent\n(e.g. some definitions relating to affine combinations are in the\n`finset` namespace, so allowing dot notation to be used for such\ncombinations, but others are in the `affine_space` namespace, and\nthere may not be a consistent rule for the division between the two).", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": []}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": []}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space/basic.lean", "changes": [["del", "def", "affine_independent", []], ["del", "theorem", "affine_independent_embedding_of_affine_independent", []], ["del", "theorem", "affine_independent_iff_indicator_eq_of_affine_combination_eq", []], ["del", "theorem", "affine_independent_iff_linear_independent_vsub", []], ["del", "theorem", "affine_independent_of_subsingleton", []], ["del", "theorem", "affine_independent_subtype_of_affine_independent", []], ["del", "def", "weighted_vsub_of_point", ["affine_map"]], ["del", "theorem", "affine_combination_mem_affine_span", ["affine_space"]], ["del", "theorem", "eq_affine_combination_of_mem_affine_span", ["affine_space"]], ["del", "theorem", "finite_dimensional_direction_affine_span_of_finite", ["affine_space"]], ["del", "theorem", "finite_dimensional_vector_span_of_finite", ["affine_space"]], ["del", "theorem", "mem_affine_span_iff_eq_affine_combination", ["affine_space"]], ["del", "theorem", "mem_vector_span_iff_eq_weighted_vsub", ["affine_space"]], ["del", "theorem", "ext", ["affine_space", "simplex"]], ["del", "theorem", "ext_iff", ["affine_space", "simplex"]], ["del", "def", "face", ["affine_space", "simplex"]], ["del", "theorem", "face_eq_mk_of_point", ["affine_space", "simplex"]], ["del", "theorem", "face_points", ["affine_space", "simplex"]], ["del", "def", "mk_of_point", ["affine_space", "simplex"]], ["del", "theorem", "mk_of_point_points", ["affine_space", "simplex"]], ["del", "structure", "simplex", ["affine_space"]], ["del", "def", "triangle", ["affine_space"]], ["del", "theorem", "weighted_vsub_mem_vector_span", ["affine_space"]], ["del", "theorem", "affine_span_disjoint_of_disjoint_of_affine_independent", []], ["del", "theorem", "exists_mem_inter_of_exists_mem_inter_affine_span_of_affine_independent", []], ["del", "def", "affine_combination", ["finset"]], ["del", "theorem", "affine_combination_apply", ["finset"]], ["del", "theorem", "affine_combination_eq_weighted_vsub_of_point_vadd_of_sum_eq_one", ["finset"]], ["del", "theorem", "affine_combination_indicator_subset", ["finset"]], ["del", "theorem", "affine_combination_of_eq_one_of_eq_zero", ["finset"]], ["del", "theorem", "affine_combination_vsub", ["finset"]], ["del", "theorem", "eq_affine_combination_subset_iff_eq_affine_combination_subtype", ["finset"]], ["del", "theorem", "eq_weighted_vsub_of_point_subset_iff_eq_weighted_vsub_of_point_subtype", ["finset"]], ["del", "theorem", "eq_weighted_vsub_subset_iff_eq_weighted_vsub_subtype", ["finset"]], ["del", "def", "weighted_vsub", ["finset"]], ["del", "theorem", "weighted_vsub_apply", ["finset"]], ["del", "theorem", "weighted_vsub_empty", ["finset"]], ["del", "theorem", "weighted_vsub_eq_weighted_vsub_of_point_of_sum_eq_zero", ["finset"]], ["del", "theorem", "weighted_vsub_indicator_subset", ["finset"]], ["del", "def", "weighted_vsub_of_point", ["finset"]], ["del", "theorem", "weighted_vsub_of_point_apply", ["finset"]], ["del", "theorem", "weighted_vsub_of_point_eq_of_sum_eq_zero", ["finset"]], ["del", "theorem", "weighted_vsub_of_point_erase", ["finset"]], ["del", "theorem", "weighted_vsub_of_point_indicator_subset", ["finset"]], ["del", "theorem", "weighted_vsub_of_point_insert", ["finset"]], ["del", "theorem", "weighted_vsub_of_point_vadd_eq_of_sum_eq_one", ["finset"]], ["del", "theorem", "weighted_vsub_vadd_affine_combination", ["finset"]], ["del", "theorem", "mem_affine_span_iff_mem_of_affine_independent", []], ["del", "theorem", "not_mem_affine_span_diff_of_affine_independent", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/combination.lean", "changes": [["add", "def", "weighted_vsub_of_point", ["affine_map"]], ["add", "theorem", "affine_combination_mem_affine_span", ["affine_space"]], ["add", "theorem", "eq_affine_combination_of_mem_affine_span", ["affine_space"]], ["add", "theorem", "mem_affine_span_iff_eq_affine_combination", ["affine_space"]], ["add", "theorem", "mem_vector_span_iff_eq_weighted_vsub", ["affine_space"]], ["add", "theorem", "weighted_vsub_mem_vector_span", ["affine_space"]], ["add", "def", "affine_combination", ["finset"]], ["add", "theorem", "affine_combination_apply", ["finset"]], ["add", "theorem", "affine_combination_eq_weighted_vsub_of_point_vadd_of_sum_eq_one", ["finset"]], ["add", "theorem", "affine_combination_indicator_subset", ["finset"]], ["add", "theorem", "affine_combination_of_eq_one_of_eq_zero", ["finset"]], ["add", "theorem", "affine_combination_vsub", ["finset"]], ["add", "theorem", "eq_affine_combination_subset_iff_eq_affine_combination_subtype", ["finset"]], ["add", "theorem", "eq_weighted_vsub_of_point_subset_iff_eq_weighted_vsub_of_point_subtype", ["finset"]], ["add", "theorem", "eq_weighted_vsub_subset_iff_eq_weighted_vsub_subtype", ["finset"]], ["add", "def", "weighted_vsub", ["finset"]], ["add", "theorem", "weighted_vsub_apply", ["finset"]], ["add", "theorem", "weighted_vsub_empty", ["finset"]], ["add", "theorem", "weighted_vsub_eq_weighted_vsub_of_point_of_sum_eq_zero", ["finset"]], ["add", "theorem", "weighted_vsub_indicator_subset", ["finset"]], ["add", "def", "weighted_vsub_of_point", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_apply", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_eq_of_sum_eq_zero", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_erase", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_indicator_subset", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_insert", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_vadd_eq_of_sum_eq_one", ["finset"]], ["add", "theorem", "weighted_vsub_vadd_affine_combination", ["finset"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/finite_dimensional.lean", "changes": [["add", "theorem", "finite_dimensional_direction_affine_span_of_finite", ["affine_space"]], ["add", "theorem", "finite_dimensional_vector_span_of_finite", ["affine_space"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/affine_space/independent.lean", "changes": [["add", "def", "affine_independent", []], ["add", "theorem", "affine_independent_embedding_of_affine_independent", []], ["add", "theorem", "affine_independent_iff_indicator_eq_of_affine_combination_eq", []], ["add", "theorem", "affine_independent_iff_linear_independent_vsub", []], ["add", "theorem", "affine_independent_of_subsingleton", []], ["add", "theorem", "affine_independent_subtype_of_affine_independent", []], ["add", "theorem", "ext", ["affine_space", "simplex"]], ["add", "theorem", "ext_iff", ["affine_space", "simplex"]], ["add", "def", "face", ["affine_space", "simplex"]], ["add", "theorem", "face_eq_mk_of_point", ["affine_space", "simplex"]], ["add", "theorem", "face_points", ["affine_space", "simplex"]], ["add", "def", "mk_of_point", ["affine_space", "simplex"]], ["add", "theorem", "mk_of_point_points", ["affine_space", "simplex"]], ["add", "structure", "simplex", ["affine_space"]], ["add", "def", "triangle", ["affine_space"]], ["add", "theorem", "affine_span_disjoint_of_disjoint_of_affine_independent", []], ["add", "theorem", "exists_mem_inter_of_exists_mem_inter_affine_span_of_affine_independent", []], ["add", "theorem", "mem_affine_span_iff_mem_of_affine_independent", []], ["add", "theorem", "not_mem_affine_span_diff_of_affine_independent", []]]}, {"oldPath": "src/topology/algebra/affine.lean", "newPath": "src/topology/algebra/affine.lean", "changes": []}]}, {"timestamp": 1596897258, "sha": "f23fe9a3", "message": "doc(tactic/lean_core_docs): by_cases is classical (#3718)\n`by_cases` was changed to use classical reasoning (leanprover-community/mathlib#3354, leanprover-community/lean#409), but the documentation hasn't been updated yet.\nI leave `by_contra` alone as it still uses `decidable`.", "changes": [{"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}]}, {"timestamp": 1596891703, "sha": "d27ddb49", "message": "chore(linear_algebra/basic): rewrite `p.comap q.subtype` to `comap q.subtype p` (#3725)\n@PatrickMassot requested this change in the review of #3720:\n> I find this statement very difficult to read. I think this is a bad use of dot notation, it really feels like `p` is pulling back `q.subtype` instead of the other way around (and even the docstring is suggesting that!). The same problem happens with filter.(co)map and always try to avoid it.\n> I would open submodule and then write `comap q.subtype p ≃ₗ[R] p`.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "comap_subtype_self", ["submodule"]]]}]}, {"timestamp": 1596881761, "sha": "1675dc40", "message": "chore(order/complete_lattice): use `order_dual` (#3724)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "infi_exists", []], ["mod", "theorem", "infi_infi_eq_left", []], ["mod", "theorem", "infi_infi_eq_right", []], ["mod", "theorem", "infi_insert", []], ["mod", "theorem", "supr_exists", []], ["mod", "theorem", "supr_insert", []], ["mod", "theorem", "supr_supr_eq_left", []], ["mod", "theorem", "supr_supr_eq_right", []]]}]}, {"timestamp": 1596878539, "sha": "bf1c7b75", "message": "feat(linear_algebra/finite_dimensional): finite dimensional `is_basis` helpers (#3720)\nIf we have a family of vectors in `V` with cardinality equal to the (finite) dimension of `V` over a field `K`, they span the whole space iff they are linearly independent.\nThis PR proves those two facts (in the form that either of the conditions of `is_basis K b` suffices to prove `is_basis K b` if `b` has the right cardinality).\nWe don't need to assume that `V` is finite dimensional, because the case that `findim K V = 0` will generally lead to a contradiction. We do sometimes need to assume that the family is nonempty, which seems like a much nicer condition.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "comap_subtype_equiv_of_le", ["submodule"]], ["add", "theorem", "nontrivial_of_lt_top", ["submodule", "quotient"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "findim_span_eq_card", []], ["add", "theorem", "findim_span_le_card", []], ["add", "theorem", "findim_span_set_eq_card", []], ["add", "theorem", "findim_pos", ["finite_dimensional"]], ["add", "theorem", "findim_pos_iff", ["finite_dimensional"]], ["add", "theorem", "findim_pos_iff_exists_ne_zero", ["finite_dimensional"]], ["add", "theorem", "finset_is_basis_of_linear_independent_of_card_eq_findim", []], ["add", "theorem", "finset_is_basis_of_span_eq_top_of_card_eq_findim", []], ["add", "theorem", "is_basis_of_linear_independent_of_card_eq_findim", []], ["add", "theorem", "is_basis_of_span_eq_top_of_card_eq_findim", []], ["add", "theorem", "linear_independent_of_span_eq_top_of_card_eq_findim", []], ["add", "theorem", "set_is_basis_of_linear_independent_of_card_eq_findim", []], ["add", "theorem", "set_is_basis_of_span_eq_top_of_card_eq_findim", []], ["add", "theorem", "span_eq_top_of_linear_independent_of_card_eq_findim", []], ["add", "theorem", "span_lt_of_subset_of_card_lt_findim", []], ["add", "theorem", "span_lt_top_of_card_lt_findim", []], ["add", "theorem", "findim_lt", ["submodule"]], ["add", "theorem", "findim_mono", ["submodule"]], ["add", "theorem", "lt_of_le_of_findim_lt_findim", ["submodule"]], ["add", "theorem", "lt_top_of_findim_lt_findim", ["submodule"]]]}]}, {"timestamp": 1596835996, "sha": "d61bd4ae", "message": "feat(algebra/classical_lie_algebras): add lie_algebra.orthogonal.mem_so (#3711)\nAlso unrelated change to use new notation for direct_sum", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": [["add", "theorem", "mem_so", ["lie_algebra", "orthogonal"]]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["mod", "theorem", "bracket_apply", ["lie_algebra", "direct_sum"]]]}]}, {"timestamp": 1596830010, "sha": "1cd74b11", "message": "fix(linear_algebra/finite_dimensional): universe generalize cardinal_mk_le_findim_of_linear_independent (#3721)", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "{m}", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1596824781, "sha": "00e4c04e", "message": "doc(linear_algebra/affine_space): expand module doc string (#3719)\nMake module doc string discuss the main definitions relating to affine\nspaces.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": []}]}, {"timestamp": 1596824779, "sha": "4e24f4cf", "message": "feat(data/list/*): add indexed versions of some list functions (#2191)\nAdd `foldr_with_index`, `foldl_with_index`, `mfoldr_with_index`, `mfoldl_with_index`, `mmap_with_index` and `mmap_with_index'`. The new functions are proven correct by relating them to their non-indexed counterparts.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_eq_foldr", ["list"]], ["add", "theorem", "map_eq_foldr", ["list"]], ["add", "theorem", "map_filter_eq_foldr", ["list"]], ["add", "theorem", "mfoldl_eq_foldl", ["list"]], ["add", "theorem", "mfoldr_eq_foldr", ["list"]]]}, {"oldPath": "src/data/list/default.lean", "newPath": "src/data/list/default.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "foldl_with_index", ["list"]], ["add", "def", "foldl_with_index_aux", ["list"]], ["add", "def", "foldr_with_index", ["list"]], ["add", "def", "foldr_with_index_aux", ["list"]], ["mod", "def", "indexes_values", ["list"]], ["del", "def", "indexes_values_aux", ["list"]], ["add", "def", "mfoldl_with_index", ["list"]], ["add", "def", "mfoldr_with_index", ["list"]], ["add", "def", "mmap_with_index'", ["list"]], ["add", "def", "mmap_with_index'_aux", ["list"]], ["add", "def", "mmap_with_index", ["list"]], ["add", "def", "mmap_with_index_aux", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/indexes.lean", "changes": [["add", "theorem", "find_indexes_eq_map_indexes_values", ["list"]], ["add", "theorem", "foldl_with_index_aux_eq_foldl_with_index_aux_spec", ["list"]], ["add", "def", "foldl_with_index_aux_spec", ["list"]], ["add", "theorem", "foldl_with_index_aux_spec_cons", ["list"]], ["add", "theorem", "foldl_with_index_eq_foldl_enum", ["list"]], ["add", "theorem", "foldr_with_index_aux_eq_foldr_with_index_aux_spec", ["list"]], ["add", "def", "foldr_with_index_aux_spec", ["list"]], ["add", "theorem", "foldr_with_index_aux_spec_cons", ["list"]], ["add", "theorem", "foldr_with_index_eq_foldr_enum", ["list"]], ["add", "theorem", "indexes_values_eq_filter_enum", ["list"]], ["add", "theorem", "mfoldl_with_index_eq_mfoldl_enum", ["list"]], ["add", "theorem", "mfoldr_with_index_eq_mfoldr_enum", ["list"]], ["add", "theorem", "mmap_with_index'_aux_eq_mmap_with_index_aux", ["list"]], ["add", "theorem", "mmap_with_index'_eq_mmap_with_index", ["list"]], ["add", "theorem", "mmap_with_index_aux_eq_mmap_with_index_aux_spec", ["list"]], ["add", "def", "mmap_with_index_aux_spec", ["list"]], ["add", "theorem", "mmap_with_index_aux_spec_cons", ["list"]], ["add", "theorem", "mmap_with_index_eq_mmap_enum", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "map_fst_zip", ["list"]], ["add", "theorem", "map_snd_zip", ["list"]]]}]}, {"timestamp": 1596818967, "sha": "aacd7575", "message": "feat(measurable_space): more properties of measurable sets in a product (#3703)\nAdd multiple lemmas about `prod` to `set.basic`\nSome cleanup in `set.basic`\nFix the name of the instance `measure_space ℝ`\nCleanup and a couple of additions to the `prod` section of `measurable_space`.\nRename: `prod_singleton_singleton` -> `singleton_prod_singleton`\nUse `prod.swap` in the statement of `image_swap_prod`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "diff_self", ["set"]], ["mod", "theorem", "image_empty", ["set"]], ["mod", "theorem", "image_id'", ["set"]], ["mod", "theorem", "image_swap_prod", ["set"]], ["mod", "theorem", "mem_prod", ["set"]], ["mod", "theorem", "mem_prod_eq", ["set"]], ["mod", "theorem", "mk_mem_prod", ["set"]], ["add", "theorem", "mk_preimage_prod_left", ["set"]], ["add", "theorem", "mk_preimage_prod_right", ["set"]], ["mod", "theorem", "prod_empty", ["set"]], ["mod", "theorem", "prod_eq", ["set"]], ["mod", "theorem", "prod_inter_prod", ["set"]], ["mod", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["add", "theorem", "prod_singleton", ["set"]], ["del", "theorem", "prod_singleton_singleton", ["set"]], ["add", "theorem", "prod_union", ["set"]], ["mod", "theorem", "set_of_eq_eq_singleton", ["set"]], ["add", "theorem", "singleton_prod", ["set"]], ["add", "theorem", "singleton_prod_singleton", ["set"]], ["add", "theorem", "union_prod", ["set"]], ["mod", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "prod_eq_seq", ["set"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "prod", ["is_measurable"]], ["add", "theorem", "is_measurable_prod", []], ["add", "theorem", "is_measurable_prod_of_nonempty", []], ["mod", "theorem", "fst", ["measurable"]], ["mod", "theorem", "prod", ["measurable"]], ["mod", "theorem", "prod_mk", ["measurable"]], ["mod", "theorem", "snd", ["measurable"]], ["mod", "theorem", "measurable_fst", []], ["mod", "theorem", "measurable_snd", []]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1596761088, "sha": "49ba4c47", "message": "chore(scripts): update nolints.txt (#3712)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1596732155, "sha": "1930601c", "message": "feat(algebra/group_power): lemmas relating pow in `multiplicative int` with multiplication in `int` (#3706)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "of_add_mul", ["int"]], ["add", "theorem", "to_add_gpow", ["int"]], ["add", "theorem", "to_add_pow", ["int"]], ["add", "theorem", "of_add_mul", ["nat"]], ["add", "theorem", "to_add_pow", ["nat"]]]}]}, {"timestamp": 1596732153, "sha": "35ecc7ba", "message": "feat(analysis/calculus): Rolle's and Cauchy's mean value theorems with weaker assumptions (deps : 3590) (#3681)\nThis introduces stronger versions of Rolle's theorem and Cauchy's mean value theorem, essentially by encapsulating an extension by continuity using the newly introduced `extend_from` of #3590", "changes": [{"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": [["add", "theorem", "exists_deriv_eq_zero'", []], ["add", "theorem", "exists_has_deriv_at_eq_zero'", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "exists_ratio_deriv_eq_ratio_slope'", []], ["add", "theorem", "exists_ratio_has_deriv_at_eq_ratio_slope'", []]]}]}, {"timestamp": 1596732151, "sha": "e57fc3d6", "message": "feat(field_theory/splitting_field): splitting field unique (#3654)\nMain theorem:\n```lean\npolynomial.is_splitting_field.alg_equiv {α} (β) [field α] [field β] [algebra α β]\n (f : polynomial α) [is_splitting_field α β f] : β ≃ₐ[α] splitting_field f\n````", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["mod", "theorem", "ext", ["ring_equiv"]], ["mod", "theorem", "symm_to_ring_hom_apply_to_ring_hom_apply", ["ring_equiv"]], ["add", "theorem", "symm_trans", ["ring_equiv"]], ["mod", "theorem", "to_ring_hom_apply_symm_to_ring_hom_apply", ["ring_equiv"]], ["add", "theorem", "to_ring_hom_trans", ["ring_equiv"]], ["add", "theorem", "trans_symm", ["ring_equiv"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_finset_map", ["multiset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_ne_zero", ["list"]]]}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["add", "theorem", "forall_mem_cons", ["multiset"]], ["add", "theorem", "forall_mem_map_iff", ["multiset"]], ["add", "theorem", "prod_ne_zero", ["multiset"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "map_list_prod", ["polynomial"]], ["add", "theorem", "map_multiset_prod", ["polynomial"]], ["add", "theorem", "map_prod", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "map_ne_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "roots_C", ["polynomial"]], ["add", "theorem", "roots_list_prod", ["polynomial"]], ["add", "theorem", "roots_multiset_prod", ["polynomial"]], ["add", "theorem", "roots_one", ["polynomial"]], ["add", "theorem", "roots_zero", ["polynomial"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "def", "adjoin_singleton_equiv_adjoin_root_minimal_polynomial", ["alg_equiv"]], ["add", "theorem", "lift_of_splits", []], ["add", "def", "alg_equiv", ["polynomial", "is_splitting_field"]], ["add", "theorem", "finite_dimensional", ["polynomial", "is_splitting_field"]], ["add", "def", "lift", ["polynomial", "is_splitting_field"]], ["add", "theorem", "mul", ["polynomial", "is_splitting_field"]], ["add", "theorem", "splits_iff", ["polynomial", "is_splitting_field"]], ["add", "theorem", "roots_map", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "dim_eq_zero", []], ["add", "theorem", "findim_eq_zero", []], ["add", "theorem", "findim_top", []], ["add", "theorem", "findim_le_findim_of_injective", ["linear_map"]], ["add", "theorem", "injective_iff_surjective_of_findim_eq_findim", ["linear_map"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "def", "alg_hom", ["adjoin_root"]], ["add", "theorem", "coe_alg_hom", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "of_bijective", ["alg_equiv"]], ["add", "def", "cod_restrict", ["alg_hom"]], ["add", "theorem", "injective_cod_restrict", ["alg_hom"]], ["add", "theorem", "injective_iff", ["alg_hom"]], ["add", "theorem", "bijective_algbera_map_iff", ["algebra"]], ["add", "def", "bot_equiv", ["algebra"]], ["add", "def", "bot_equiv_of_injective", ["algebra"]], ["add", "theorem", "surjective_algbera_map_iff", ["algebra"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["del", "def", "subalgebra_comap", ["is_algebra_tower"]], ["del", "theorem", "subalgebra_comap_top", ["is_algebra_tower"]], ["add", "theorem", "mem_res", ["subalgebra"]], ["add", "def", "of_under", ["subalgebra"]], ["add", "def", "res", ["subalgebra"]], ["add", "theorem", "res_inj", ["subalgebra"]], ["add", "theorem", "res_top", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1596728546, "sha": "bc2bcac7", "message": "chore(algebra/module): Move submodule to its own file (#3696)", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "add_mem", ["submodule"]], ["del", "theorem", "add_mem_iff_left", ["submodule"]], ["del", "theorem", "add_mem_iff_right", ["submodule"]], ["del", "theorem", "coe_add", ["submodule"]], ["del", "theorem", "coe_eq_coe", ["submodule"]], ["del", "theorem", "coe_eq_zero", ["submodule"]], ["del", "theorem", "coe_injective", ["submodule"]], ["del", "theorem", "coe_mem", ["submodule"]], ["del", "theorem", "coe_mk", ["submodule"]], ["del", "theorem", "coe_neg", ["submodule"]], ["del", "theorem", "coe_set_eq", ["submodule"]], ["del", "theorem", "coe_smul", ["submodule"]], ["del", "theorem", "coe_sort_coe", ["submodule"]], ["del", "theorem", "coe_sub", ["submodule"]], ["del", "theorem", "coe_to_add_subgroup", ["submodule"]], ["del", "theorem", "coe_zero", ["submodule"]], ["del", "theorem", "ext'_iff", ["submodule"]], ["del", "theorem", "ext", ["submodule"]], ["del", "theorem", "mem_coe", ["submodule"]], ["del", "theorem", "mk_eq_zero", ["submodule"]], ["del", "theorem", "neg_mem", ["submodule"]], ["del", "theorem", "neg_mem_iff", ["submodule"]], ["del", "theorem", "smul_mem", ["submodule"]], ["del", "theorem", "smul_mem_iff'", ["submodule"]], ["del", "theorem", "smul_mem_iff", ["submodule"]], ["del", "theorem", "sub_mem", ["submodule"]], ["del", "theorem", "subtype_apply", ["submodule"]], ["del", "theorem", "subtype_eq_val", ["submodule"]], ["del", "theorem", "sum_mem", ["submodule"]], ["del", "theorem", "sum_smul_mem", ["submodule"]], ["del", "def", "to_add_subgroup", ["submodule"]], ["del", "theorem", "to_add_submonoid_eq", ["submodule"]], ["del", "theorem", "to_add_submonoid_injective", ["submodule"]], ["del", "theorem", "zero_mem", ["submodule"]], ["del", "structure", "submodule", []], ["del", "def", "subspace", []]]}, {"oldPath": "src/algebra/module/default.lean", "newPath": "src/algebra/module/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/module/submodule.lean", "changes": [["add", "theorem", "add_mem", ["submodule"]], ["add", "theorem", "add_mem_iff_left", ["submodule"]], ["add", "theorem", "add_mem_iff_right", ["submodule"]], ["add", "theorem", "coe_add", ["submodule"]], ["add", "theorem", "coe_eq_coe", ["submodule"]], ["add", "theorem", "coe_eq_zero", ["submodule"]], ["add", "theorem", "coe_injective", ["submodule"]], ["add", "theorem", "coe_mem", ["submodule"]], ["add", "theorem", "coe_mk", ["submodule"]], ["add", "theorem", "coe_neg", ["submodule"]], ["add", "theorem", "coe_set_eq", ["submodule"]], ["add", "theorem", "coe_smul", ["submodule"]], ["add", "theorem", "coe_sort_coe", ["submodule"]], ["add", "theorem", "coe_sub", ["submodule"]], ["add", "theorem", "coe_to_add_subgroup", ["submodule"]], ["add", "theorem", "coe_zero", ["submodule"]], ["add", "theorem", "ext'_iff", ["submodule"]], ["add", "theorem", "ext", ["submodule"]], ["add", "theorem", "mem_coe", ["submodule"]], ["add", "theorem", "mk_eq_zero", ["submodule"]], ["add", "theorem", "neg_mem", ["submodule"]], ["add", "theorem", "neg_mem_iff", ["submodule"]], ["add", "theorem", "smul_mem", ["submodule"]], ["add", "theorem", "smul_mem_iff'", ["submodule"]], ["add", "theorem", "smul_mem_iff", ["submodule"]], ["add", "theorem", "sub_mem", ["submodule"]], ["add", "theorem", "subtype_apply", ["submodule"]], ["add", "theorem", "subtype_eq_val", ["submodule"]], ["add", "theorem", "sum_mem", ["submodule"]], ["add", "theorem", "sum_smul_mem", ["submodule"]], ["add", "def", "to_add_subgroup", ["submodule"]], ["add", "theorem", "to_add_submonoid_eq", ["submodule"]], ["add", "theorem", "to_add_submonoid_injective", ["submodule"]], ["add", "theorem", "zero_mem", ["submodule"]], ["add", "structure", "submodule", []], ["add", "def", "subspace", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1596723573, "sha": "224e0f88", "message": "docs(tactic/interactive): Add tag `debugging` and doc `mwe` for `extract_goal` (#3708)\nRequested by @kbuzzard on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Being.20stuck.20-.3E.20MWE/near/206124861).\nx-ref: leanprover-community/leanprover-community.github.io#105", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1596706508, "sha": "ee7bb12c", "message": "chore(ring_theory/ideal): Move ideal modules into a single folder (#3707)\nThe main motivation is to fix the odd inconsistency of `ideals` being plural, while most other files have singular names.\nBesides that, there seems to be precedent for grouping together such files", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/linear_algebra/adic_completion.lean", "newPath": "src/linear_algebra/adic_completion.lean", "changes": []}, {"oldPath": "src/linear_algebra/invariant_basis_number.lean", "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": []}, {"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideal/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal/operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_over.lean", "newPath": "src/ring_theory/ideal/over.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1596697112, "sha": "3eea1091", "message": "feat(measure_theory/interval_integral): introduce `∫ x in a..b, f x`, prove FTC-1 (#3640)\nDefine `∫ x in a..b, f x ∂μ` as `∫ x in Ioc a b, f x ∂μ - ∫ x in Ioc b a, f x ∂μ`. With this definition for a probability measure `μ` we have `F_μ(b)-F_μ(a)=∫ x in a..b, f x ∂μ`, where `F_μ` is the cumulative distribution function.", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_add_meas", ["measure_theory"]], ["add", "theorem", "integral_map_meas", ["measure_theory"]], ["add", "theorem", "integral_mono_of_nonneg", ["measure_theory"]], ["add", "theorem", "norm_integral_le_of_norm_le", ["measure_theory"]], ["add", "theorem", "norm_integral_le_of_norm_le_const", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/interval_integral.lean", "changes": [["add", "theorem", "add", ["interval_integrable"]], ["add", "theorem", "neg", ["interval_integrable"]], ["add", "theorem", "refl", ["interval_integrable"]], ["add", "theorem", "smul", ["interval_integrable"]], ["add", "theorem", "sub", ["interval_integrable"]], ["add", "theorem", "symm", ["interval_integrable"]], ["add", "theorem", "trans", ["interval_integrable"]], ["add", "def", "interval_integrable", []], ["add", "theorem", "integral_add", ["interval_integral"]], ["add", "theorem", "integral_add_adjacent_intervals", ["interval_integral"]], ["add", "theorem", "integral_add_adjacent_intervals_cancel", ["interval_integral"]], ["add", "theorem", "integral_cases", ["interval_integral"]], ["add", "theorem", "integral_has_deriv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_neg", ["interval_integral"]], ["add", "theorem", "integral_of_ge", ["interval_integral"]], ["add", "theorem", "integral_of_le", ["interval_integral"]], ["add", "theorem", "integral_same", ["interval_integral"]], ["add", "theorem", "integral_same_has_deriv_at_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_sub_linear_is_o_of_tendsto_ae", ["interval_integral"]], ["add", "theorem", "integral_symm", ["interval_integral"]], ["add", "theorem", "norm_integral_eq_norm_integral_Ioc", ["interval_integral"]], ["add", "theorem", "norm_integral_le_abs_integral_norm", ["interval_integral"]], ["add", "theorem", "norm_integral_le_integral_norm_Ioc", ["interval_integral"]], ["add", "theorem", "norm_integral_le_of_norm_le_const", ["interval_integral"]], ["add", "theorem", "norm_integral_le_of_norm_le_const_ae", ["interval_integral"]], ["add", "def", "interval_integral", []]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "congr'", ["measure_theory", "integrable"]], ["add", "theorem", "mono'", ["measure_theory", "integrable"]], ["del", "theorem", "mono_set", ["measure_theory", "integrable"]], ["del", "theorem", "union", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_add_meas", ["measure_theory"]], ["add", "theorem", "integrable_congr'", ["measure_theory"]], ["mod", "theorem", "integrable_const", ["measure_theory"]], ["add", "theorem", "integrable_const_iff", ["measure_theory"]], ["add", "theorem", "integrable_map_meas", ["measure_theory"]], ["add", "theorem", "integrable_of_bounded", ["measure_theory"]], ["del", "theorem", "integrable_of_integrable_bound", ["measure_theory"]], ["add", "theorem", "integrable_zero_meas", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "integrable_on_compact", ["continuous"]], ["add", "theorem", "integral_sub_linear_is_o_ae", ["continuous_at"]], ["add", "theorem", "integrable_on_compact", ["continuous_on"]], ["add", "theorem", "integral_sub_linear_is_o_ae", ["filter", "tendsto"]], ["add", "theorem", "indicator_ae_eq_restrict", []], ["add", "theorem", "indicator_ae_eq_restrict_compl", []], ["add", "theorem", "integrable_on_of_nhds_within", ["is_compact"]], ["add", "theorem", "integrable_on'", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_on", ["measure_theory", "integrable"]], ["add", "theorem", "filter_mono", ["measure_theory", "integrable_at_filter"]], ["add", "theorem", "inf_ae_iff", ["measure_theory", "integrable_at_filter"]], ["add", "theorem", "inf_of_left", ["measure_theory", "integrable_at_filter"]], ["add", "theorem", "inf_of_right", ["measure_theory", "integrable_at_filter"]], ["add", "def", "integrable_at_filter", ["measure_theory"]], ["add", "theorem", "integrable_indicator_iff", ["measure_theory"]], ["add", "theorem", "add_meas", ["measure_theory", "integrable_on"]], ["add", "theorem", "indicator", ["measure_theory", "integrable_on"]], ["add", "theorem", "integrable", ["measure_theory", "integrable_on"]], ["add", "theorem", "left_of_union", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono_meas", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono_set", ["measure_theory", "integrable_on"]], ["add", "theorem", "mono_set_ae", ["measure_theory", "integrable_on"]], ["add", "theorem", "right_of_union", ["measure_theory", "integrable_on"]], ["add", "theorem", "union", ["measure_theory", "integrable_on"]], ["add", "def", "integrable_on", ["measure_theory"]], ["add", "theorem", "integrable_on_add_meas", ["measure_theory"]], ["add", "theorem", "integrable_on_const", ["measure_theory"]], ["add", "theorem", "integrable_on_empty", ["measure_theory"]], ["add", "theorem", "integrable_on_finite_union", ["measure_theory"]], ["add", "theorem", "integrable_on_finset_union", ["measure_theory"]], ["add", "theorem", "integrable_on_of_bounded", ["measure_theory"]], ["add", "theorem", "integrable_on_union", ["measure_theory"]], ["add", "theorem", "integrable_on_univ", ["measure_theory"]], ["add", "theorem", "integrable_on_zero", ["measure_theory"]], ["add", "theorem", "integral_add_compl", ["measure_theory"]], ["add", "theorem", "integral_empty", ["measure_theory"]], ["add", "theorem", "integral_indicator", ["measure_theory"]], ["add", "theorem", "integral_union", ["measure_theory"]], ["add", "theorem", "integral_univ", ["measure_theory"]], ["add", "theorem", "integrable_at_filter", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "integrable_at_filter_of_tendsto", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "integrable_at_filter_of_tendsto_ae", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "norm_set_integral_le_of_norm_le_const'", ["measure_theory"]], ["add", "theorem", "norm_set_integral_le_of_norm_le_const", ["measure_theory"]], ["add", "theorem", "norm_set_integral_le_of_norm_le_const_ae''", ["measure_theory"]], ["add", "theorem", "norm_set_integral_le_of_norm_le_const_ae'", ["measure_theory"]], ["add", "theorem", "norm_set_integral_le_of_norm_le_const_ae", ["measure_theory"]], ["add", "theorem", "set_integral_const", ["measure_theory"]], ["add", "theorem", "piecewise_ae_eq_restrict", []], ["add", "theorem", "piecewise_ae_eq_restrict_compl", []]]}]}, {"timestamp": 1596685644, "sha": "5cba21d8", "message": "chore(*): swap order of [fintype A] [decidable_eq A] (#3705)\n@fpvandoorn suggested in #3603 swapping the order of some `[fintype A] [decidable_eq A]` arguments to solve a linter problem with slow typeclass lookup.\nThe reasoning is that Lean solves typeclass search problems from right to left, and \n* it's \"less likely\" that a type is a `fintype` than it has `decidable_eq`, so we can fail earlier if `fintype` comes second\n* typeclass search for `[decidable_eq]` can already be slow, so it's better to avoid it.\nThis PR applies this suggestion across the library.", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["mod", "def", "reindex_lie_equiv", ["matrix"]], ["mod", "theorem", "reindex_lie_equiv_apply", ["matrix"]], ["mod", "theorem", "reindex_lie_equiv_symm_apply", ["matrix"]], ["mod", "def", "skew_adjoint_matrices_lie_subalgebra_equiv_transpose", []]]}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": [["mod", "def", "fintype_arrow", ["encodable"]], ["mod", "def", "fintype_pi", ["encodable"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "card_univ_diff", ["finset"]], ["mod", "def", "equiv_fin", ["fintype"]], ["mod", "def", "of_surjective", ["fintype"]], ["mod", "def", "fin_choice", ["quotient"]], ["mod", "theorem", "fin_choice_eq", ["quotient"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["mod", "theorem", "prod_fiberwise", ["finset"]], ["mod", "theorem", "card_fun", ["fintype"]], ["mod", "theorem", "card_pi", ["fintype"]], ["mod", "theorem", "prod_fiberwise", ["fintype"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "def", "scalar", ["matrix"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["mod", "theorem", "card_image_polynomial_eval", ["finite_field"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "card_order_of_eq_totient", ["is_cyclic"]], ["mod", "theorem", "card_pow_eq_one_le", ["is_cyclic"]], ["mod", "theorem", "is_cyclic_of_order_of_eq_card", []], ["mod", "theorem", "order_of_eq_card_of_forall_mem_gpowers", []]]}, {"oldPath": "src/linear_algebra/char_poly.lean", "newPath": "src/linear_algebra/char_poly.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "to_matrix_of_equiv", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["mod", "def", "field_of_integral_domain", []]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1596674561, "sha": "f8fd0c38", "message": "chore(scripts): update nolints.txt (#3704)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1596667443, "sha": "9d3c709d", "message": "chore(algebra/module): Reuse proofs from subgroup (#3631)\nConfusingly these have opposite names - someone can always fix the names later though.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["mod", "theorem", "add_mem_iff_left", ["submodule"]], ["mod", "theorem", "add_mem_iff_right", ["submodule"]], ["mod", "theorem", "sub_mem", ["submodule"]]]}]}, {"timestamp": 1596667441, "sha": "2918b00b", "message": "feat(topology): define `extend_from`, add lemmas about extension by continuity on sets and intervals and continuity gluing (#3590)\n#### Add a new file `topology/extend_from_subset` (mostly by @PatrickMassot )\nDefine `extend_from A f` (where `f : X → Y` and `A : set X`) to be a function `g : X → Y` which maps any\n`x₀ : X` to the limit of `f` as `x` tends to `x₀`, if such a limit exists. Although this is not really an extension, it maps with the classical meaning of extending a function *defined on a set*, hence the name. In some way it is analogous to `dense_inducing.extend`, but in `set` world.\nThe main theorem about this is `continuous_on_extend_from` about extension by continuity\n#### Corollaries for extending functions defined on intervals\nA few lemmas of the form : if `f` is continuous on `Ioo a b`, then `extend_from (Ioo a b) f` is continuous on `I[cc/co/oc] a b`, provided some assumptions about limits on the boundary (and has some other properties, e.g it is equal to `f` on `Ioo a b`)\n#### More general continuity gluing\nLemmas `continuous_on_if'` and its corollaries `continuous_on_if` and `continuous_if'`, and a few other continuity lemmas", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "mem_Ioo_or_eq_endpoints_of_mem_Icc", ["set"]], ["add", "theorem", "mem_Ioo_or_eq_left_of_mem_Ico", ["set"]], ["add", "theorem", "mem_Ioo_or_eq_right_of_mem_Ioc", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "continuous_at_iff_continuous_left'_right'", []], ["add", "theorem", "continuous_at_iff_continuous_left_right", []], ["add", "theorem", "continuous_on_Icc_extend_from_Ioo", []], ["add", "theorem", "continuous_on_Ico_extend_from_Ioo", []], ["add", "theorem", "continuous_on_Ioc_extend_from_Ioo", []], ["add", "theorem", "continuous_within_at_Iio_iff_Iic", []], ["add", "theorem", "continuous_within_at_Ioi_iff_Ici", []], ["add", "theorem", "eq_lim_at_left_extend_from_Ioo", []], ["add", "theorem", "eq_lim_at_right_extend_from_Ioo", []], ["add", "theorem", "nhds_left'_sup_nhds_right", []], ["add", "theorem", "nhds_left_sup_nhds_right'", []], ["add", "theorem", "nhds_left_sup_nhds_right", []], ["mod", "theorem", "tendsto_inv_nhds_within_Iio", []], ["mod", "theorem", "tendsto_inv_nhds_within_Iio_inv", []], ["mod", "theorem", "tendsto_inv_nhds_within_Ioi", []], ["mod", "theorem", "tendsto_inv_nhds_within_Ioi_inv", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_if'", []], ["add", "theorem", "continuous_on_if'", []], ["add", "theorem", "continuous_on_if", []], ["add", "theorem", "continuous_within_at_of_not_mem_closure", []]]}, {"oldPath": null, "newPath": "src/topology/extend_from_subset.lean", "changes": [["add", "theorem", "continuous_extend_from", []], ["add", "theorem", "continuous_on_extend_from", []], ["add", "def", "extend_from", []], ["add", "theorem", "extend_from_eq", []], ["add", "theorem", "extend_from_extends", []], ["add", "theorem", "tendsto_extend_from", []]]}]}, {"timestamp": 1596662813, "sha": "89ada87c", "message": "chore(algebra, data/pnat): refactoring comm_semiring_has_dvd into comm_monoid_has_dvd (#3702)\nchanges the instance comm_semiring_has_dvd to apply to any comm_monoid\ncleans up the pnat API to use this new definition", "changes": [{"oldPath": null, "newPath": "src/algebra/divisibility.lean", "changes": [["add", "theorem", "elim", ["dvd"]], ["add", "theorem", "elim_left", ["dvd"]], ["add", "theorem", "intro", ["dvd"]], ["add", "theorem", "intro_left", ["dvd"]], ["add", "theorem", "dvd_mul_left", []], ["add", "theorem", "dvd_mul_of_dvd_left", []], ["add", "theorem", "dvd_mul_of_dvd_right", []], ["add", "theorem", "dvd_mul_right", []], ["add", "theorem", "dvd_of_mul_left_dvd", []], ["add", "theorem", "dvd_of_mul_right_dvd", []], ["add", "theorem", "dvd_refl", []], ["add", "theorem", "dvd_trans", []], ["add", "theorem", "dvd_zero", []], ["add", "theorem", "eq_zero_of_zero_dvd", []], ["add", "theorem", "exists_eq_mul_left_of_dvd", []], ["add", "theorem", "exists_eq_mul_right_of_dvd", []], ["add", "theorem", "mul_dvd_mul", []], ["add", "theorem", "mul_dvd_mul_left", []], ["add", "theorem", "mul_dvd_mul_right", []], ["add", "theorem", "one_dvd", []], ["add", "theorem", "zero_dvd_iff", []]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["del", "theorem", "elim", ["dvd"]], ["del", "theorem", "elim_left", ["dvd"]], ["del", "theorem", "intro", ["dvd"]], ["del", "theorem", "intro_left", ["dvd"]], ["del", "theorem", "dvd_mul_left", []], ["del", "theorem", "dvd_mul_of_dvd_left", []], ["del", "theorem", "dvd_mul_of_dvd_right", []], ["del", "theorem", "dvd_mul_right", []], ["del", "theorem", "dvd_of_mul_left_dvd", []], ["del", "theorem", "dvd_of_mul_right_dvd", []], ["del", "theorem", "dvd_refl", []], ["del", "theorem", "dvd_trans", []], ["del", "theorem", "dvd_zero", []], ["del", "theorem", "eq_zero_of_zero_dvd", []], ["del", "theorem", "exists_eq_mul_left_of_dvd", []], ["del", "theorem", "exists_eq_mul_right_of_dvd", []], ["del", "theorem", "mul_dvd_mul", []], ["del", "theorem", "mul_dvd_mul_left", []], ["del", "theorem", "mul_dvd_mul_right", []], ["del", "theorem", "one_dvd", []], ["del", "theorem", "zero_dvd_iff", []]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["del", "theorem", "dvd_iff''", ["pnat"]], ["mod", "theorem", "dvd_iff", ["pnat"]], ["del", "theorem", "dvd_intro", ["pnat"]], ["mod", "theorem", "dvd_lcm_left", ["pnat"]], ["mod", "theorem", "dvd_lcm_right", ["pnat"]], ["del", "theorem", "dvd_refl", ["pnat"]], ["mod", "theorem", "gcd_dvd_left", ["pnat"]], ["mod", "theorem", "gcd_dvd_right", ["pnat"]], ["del", "theorem", "one_dvd", ["pnat"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}]}, {"timestamp": 1596655840, "sha": "13d4fbee", "message": "feat(tactic/interactive_attr): `@[interactive]` attribute to export interactive tactics (#3698)\nAllows one to write \n```lean\n@[interactive]\nmeta def my_tactic := ...\n```\ninstead of\n```lean\nmeta def my_tactic := ...\nrun_cmd add_interactive [``my_tactic]\n```", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1596645295, "sha": "5fc62815", "message": "chore(data/matrix/basic): rename _val lemmas to _apply (#3297)\nWe use `_apply` for lemmas about applications of functions to arguments. Arguably \"picking out the entries of a matrix\" could warrant a different name, but as we treat matrices just as functions all over, I think it's better to use the usual names.", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "add_apply", ["matrix"]], ["del", "theorem", "add_val", ["matrix"]], ["add", "theorem", "bit0_apply", ["matrix"]], ["del", "theorem", "bit0_val", ["matrix"]], ["add", "theorem", "bit1_apply", ["matrix"]], ["add", "theorem", "bit1_apply_eq", ["matrix"]], ["add", "theorem", "bit1_apply_ne", ["matrix"]], ["del", "theorem", "bit1_val", ["matrix"]], ["del", "theorem", "bit1_val_eq", ["matrix"]], ["del", "theorem", "bit1_val_ne", ["matrix"]], ["add", "theorem", "col_apply", ["matrix"]], ["del", "theorem", "col_val", ["matrix"]], ["add", "theorem", "diagonal_apply_eq", ["matrix"]], ["add", "theorem", "diagonal_apply_ne'", ["matrix"]], ["add", "theorem", "diagonal_apply_ne", ["matrix"]], ["del", "theorem", "diagonal_val_eq", ["matrix"]], ["del", "theorem", "diagonal_val_ne'", ["matrix"]], ["del", "theorem", "diagonal_val_ne", ["matrix"]], ["add", "theorem", "mul_apply'", ["matrix"]], ["add", "theorem", "mul_apply", ["matrix"]], ["del", "theorem", "mul_val'", ["matrix"]], ["del", "theorem", "mul_val", ["matrix"]], ["add", "theorem", "neg_apply", ["matrix"]], ["del", "theorem", "neg_val", ["matrix"]], ["add", "theorem", "one_apply", ["matrix"]], ["add", "theorem", "one_apply_eq", ["matrix"]], ["add", "theorem", "one_apply_ne'", ["matrix"]], ["add", "theorem", "one_apply_ne", ["matrix"]], ["del", "theorem", "one_val", ["matrix"]], ["del", "theorem", "one_val_eq", ["matrix"]], ["del", "theorem", "one_val_ne'", ["matrix"]], ["del", "theorem", "one_val_ne", ["matrix"]], ["add", "theorem", "row_apply", ["matrix"]], ["add", "theorem", "row_mul_col_apply", ["matrix"]], ["del", "theorem", "row_mul_col_val", ["matrix"]], ["del", "theorem", "row_val", ["matrix"]], ["add", "theorem", "smul_apply", ["matrix"]], ["del", "theorem", "smul_val", ["matrix"]], ["add", "theorem", "transpose_apply", ["matrix"]], ["del", "theorem", "transpose_val", ["matrix"]], ["add", "theorem", "update_column_apply", ["matrix"]], ["del", "theorem", "update_column_val", ["matrix"]], ["add", "theorem", "update_row_apply", ["matrix"]], ["del", "theorem", "update_row_val", ["matrix"]], ["add", "theorem", "zero_apply", ["matrix"]], ["del", "theorem", "zero_val", ["matrix"]]]}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/char_poly/coeff.lean", "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["add", "theorem", "adjugate_apply", ["matrix"]], ["del", "theorem", "adjugate_val", ["matrix"]], ["add", "theorem", "mul_adjugate_apply", ["matrix"]], ["del", "theorem", "mul_adjugate_val", ["matrix"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": [["add", "theorem", "algebra_map_matrix_apply", []], ["del", "theorem", "algebra_map_matrix_val", []]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1596642086, "sha": "d952e8bf", "message": "chore(topology/category/Top/opens): module-doc, cleanup, and construct some morphisms (#3601)", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["add", "def", "hom_of_le", ["category_theory"]], ["add", "theorem", "le_of_hom", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["add", "def", "inf_le_left", ["topological_space", "opens"]], ["add", "def", "inf_le_right", ["topological_space", "opens"]], ["add", "def", "le_supr", ["topological_space", "opens"]], ["del", "theorem", "map_comp_hom_app", ["topological_space", "opens"]], ["del", "theorem", "map_comp_inv_app", ["topological_space", "opens"]], ["del", "theorem", "map_id_hom_app", ["topological_space", "opens"]], ["del", "theorem", "map_id_inv_app", ["topological_space", "opens"]], ["mod", "theorem", "map_obj", ["topological_space", "opens"]], ["add", "theorem", "to_Top_map", ["topological_space", "opens"]]]}]}, {"timestamp": 1596627460, "sha": "c63dad10", "message": "chore(ring_theory/ideals): Move the definition of ideals out of algebra/module (#3692)\nNeatness was the main motivation - it makes it easier to reason about what would need doing in #3635.\nIt also results in somewhere sensible for the docs about ideals. Also adds a very minimal docstring to `ring_theory/ideals.lean`.", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "add_mem_iff_left", ["ideal"]], ["del", "theorem", "add_mem_iff_right", ["ideal"]], ["del", "theorem", "mul_mem_left", ["ideal"]], ["del", "theorem", "mul_mem_right", ["ideal"]], ["del", "theorem", "neg_mem_iff", ["ideal"]], ["del", "def", "ideal", []]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "add_mem_iff_left", ["ideal"]], ["add", "theorem", "add_mem_iff_right", ["ideal"]], ["add", "theorem", "mul_mem_left", ["ideal"]], ["add", "theorem", "mul_mem_right", ["ideal"]], ["add", "theorem", "neg_mem_iff", ["ideal"]], ["add", "def", "ideal", []]]}]}, {"timestamp": 1596627456, "sha": "4a82e849", "message": "feat(algebra/*/ulift): algebraic instances for ulift (#3675)", "changes": [{"oldPath": null, "newPath": "src/algebra/group/ulift.lean", "changes": [["add", "theorem", "inv_down", ["ulift"]], ["add", "theorem", "mul_down", ["ulift"]], ["add", "def", "mul_equiv", ["ulift"]], ["add", "theorem", "one_down", ["ulift"]], ["add", "theorem", "sub_down", ["ulift"]]]}, {"oldPath": "src/algebra/module/pi.lean", "newPath": "src/algebra/module/pi.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/module/ulift.lean", "changes": [["add", "def", "semimodule_equiv", ["ulift"]], ["add", "theorem", "smul_down'", ["ulift"]], ["add", "theorem", "smul_down", ["ulift"]]]}, {"oldPath": null, "newPath": "src/algebra/ring/ulift.lean", "changes": [["add", "def", "ring_equiv", ["ulift"]]]}]}, {"timestamp": 1596624124, "sha": "2b9ac697", "message": "feat(linear_algebra/affine_space): faces of simplices (#3691)\nDefine a `face` of an `affine_space.simplex` with any given nonempty\nsubset of the vertices, using `finset.mono_of_fin`.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "def", "face", ["affine_space", "simplex"]], ["add", "theorem", "face_eq_mk_of_point", ["affine_space", "simplex"]], ["add", "theorem", "face_points", ["affine_space", "simplex"]]]}]}, {"timestamp": 1596624122, "sha": "ecb5c5f5", "message": "docs(algebra/module): Remove completed TODO (#3690)\nToday, submodule _does_ extend `add_submonoid`, which is I assume what this TODO was about", "changes": [{"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}]}, {"timestamp": 1596624120, "sha": "0531cb0c", "message": "feat(algebra/classical_lie_algebras): add definitions of missing classical Lie algebras (#3661)\nCopying from the comments I have added at the top of `classical_lie_algebras.lean`:\n## Main definitions\n * `lie_algebra.symplectic.sp`\n * `lie_algebra.orthogonal.so`\n * `lie_algebra.orthogonal.so'`\n * `lie_algebra.orthogonal.so_indefinite_equiv`\n * `lie_algebra.orthogonal.type_D`\n * `lie_algebra.orthogonal.type_B`\n * `lie_algebra.orthogonal.type_D_equiv_so'`\n * `lie_algebra.orthogonal.type_B_equiv_so'`", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": [["add", "def", "JB", ["lie_algebra", "orthogonal"]], ["add", "theorem", "JB_transform", ["lie_algebra", "orthogonal"]], ["add", "def", "JD", ["lie_algebra", "orthogonal"]], ["add", "theorem", "JD_transform", ["lie_algebra", "orthogonal"]], ["add", "def", "PB", ["lie_algebra", "orthogonal"]], ["add", "theorem", "PB_inv", ["lie_algebra", "orthogonal"]], ["add", "def", "PD", ["lie_algebra", "orthogonal"]], ["add", "theorem", "PD_inv", ["lie_algebra", "orthogonal"]], ["add", "def", "Pso", ["lie_algebra", "orthogonal"]], ["add", "theorem", "Pso_inv", ["lie_algebra", "orthogonal"]], ["add", "def", "S", ["lie_algebra", "orthogonal"]], ["add", "theorem", "S_as_blocks", ["lie_algebra", "orthogonal"]], ["add", "def", "indefinite_diagonal", ["lie_algebra", "orthogonal"]], ["add", "theorem", "indefinite_diagonal_assoc", ["lie_algebra", "orthogonal"]], ["add", "theorem", "indefinite_diagonal_transform", ["lie_algebra", "orthogonal"]], ["add", "theorem", "is_unit_PB", ["lie_algebra", "orthogonal"]], ["add", "theorem", "is_unit_PD", ["lie_algebra", "orthogonal"]], ["add", "theorem", "is_unit_Pso", ["lie_algebra", "orthogonal"]], ["add", "def", "so'", ["lie_algebra", "orthogonal"]], ["add", "def", "so", ["lie_algebra", "orthogonal"]], ["add", "theorem", "so_indefinite_equiv_apply", ["lie_algebra", "orthogonal"]], ["add", "def", "type_B", ["lie_algebra", "orthogonal"]], ["add", "def", "type_D", ["lie_algebra", "orthogonal"]], ["add", "def", "J", ["lie_algebra", "symplectic"]], ["add", "def", "sp", ["lie_algebra", "symplectic"]]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "def", "to_lie_equiv", ["alg_equiv"]], ["add", "theorem", "to_lie_equiv_apply", ["alg_equiv"]], ["add", "theorem", "to_lie_equiv_symm_apply", ["alg_equiv"]], ["add", "theorem", "mem_skew_adjoint_matrices_lie_subalgebra", []], ["add", "theorem", "mem_skew_adjoint_matrices_lie_subalgebra_unit_smul", []], ["add", "def", "skew_adjoint_matrices_lie_subalgebra_equiv_transpose", []], ["add", "theorem", "skew_adjoint_matrices_lie_subalgebra_equiv_transpose_apply", []]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "from_blocks", ["matrix"]], ["add", "theorem", "from_blocks_add", ["matrix"]], ["add", "theorem", "from_blocks_apply₁₁", ["matrix"]], ["add", "theorem", "from_blocks_apply₁₂", ["matrix"]], ["add", "theorem", "from_blocks_apply₂₁", ["matrix"]], ["add", "theorem", "from_blocks_apply₂₂", ["matrix"]], ["add", "theorem", "from_blocks_diagonal", ["matrix"]], ["add", "theorem", "from_blocks_multiply", ["matrix"]], ["add", "theorem", "from_blocks_one", ["matrix"]], ["add", "theorem", "from_blocks_smul", ["matrix"]], ["add", "theorem", "from_blocks_to_blocks", ["matrix"]], ["add", "theorem", "from_blocks_transpose", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₁₁", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₁₂", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₂₁", ["matrix"]], ["add", "theorem", "to_blocks_from_blocks₂₂", ["matrix"]], ["add", "def", "to_blocks₁₁", ["matrix"]], ["add", "def", "to_blocks₁₂", ["matrix"]], ["add", "def", "to_blocks₂₁", ["matrix"]], ["add", "def", "to_blocks₂₂", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "reindex_transpose", ["matrix"]]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["add", "theorem", "is_unit_det_of_left_inverse", ["matrix"]], ["add", "theorem", "is_unit_det_of_right_inverse", ["matrix"]], ["add", "theorem", "nonsing_inv_left_right", ["matrix"]], ["add", "theorem", "nonsing_inv_right_left", ["matrix"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "to_linear_equiv", ["alg_equiv"]], ["add", "theorem", "to_linear_equiv_apply", ["alg_equiv"]]]}]}, {"timestamp": 1596621361, "sha": "37119b41", "message": "feat(topology): normed spaces are (locally) path connected (#3689)", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "is_path_connected", ["convex"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "comp_continuous", ["continuous_on"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "nonempty_ball", ["metric"]], ["add", "theorem", "nonempty_closed_ball", ["metric"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": "src/topology/path_connected.lean", "changes": [["add", "theorem", "of_line", ["joined_in"]], ["add", "def", "of_line", ["path"]], ["add", "theorem", "of_line_mem", ["path"]]]}]}, {"timestamp": 1596618546, "sha": "545186ca", "message": "refactor(*): add a notation for `nhds_within` (#3683)\nThe definition is still there and can be used too.", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "has_deriv_within_at_inter'", []]]}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "differentiable_within_at_inter'", []], ["mod", "theorem", "has_fderiv_within_at_inter'", []]]}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "tangent_cone_congr", []], ["mod", "theorem", "tangent_cone_mono_nhds", []], ["mod", "theorem", "inter'", ["unique_diff_within_at"]], ["mod", "theorem", "unique_diff_within_at_congr", []], ["mod", "theorem", "unique_diff_within_at_inter'", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["mod", "theorem", "times_cont_diff_within_at_inter'", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": [["mod", "theorem", "lift_prop_within_at_inter'", ["structure_groupoid", "local_invariant_prop"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["mod", "theorem", "has_mfderiv_within_at_inter'", []], ["mod", "theorem", "mdifferentiable_within_at_inter'", []], ["mod", "theorem", "inter'", ["unique_mdiff_within_at"]]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "theorem", "ext_chart_preimage_mem_nhds_within", []]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["mod", "theorem", "times_cont_mdiff_within_at_inter'", []]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "continuous_within_at_inter'", []], ["mod", "theorem", "mem_nhds_within_insert", []], ["mod", "theorem", "mem_nhds_within_subtype", []], ["mod", "theorem", "mem_of_mem_nhds_within", []], ["mod", "theorem", "nhds_within_empty", []], ["mod", "theorem", "nhds_within_le_of_mem", []], ["mod", "theorem", "nhds_within_mono", []], ["mod", "theorem", "nhds_within_restrict''", []], ["mod", "theorem", "nhds_within_univ", []], ["mod", "theorem", "self_mem_nhds_within", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": [["mod", "theorem", "is_local_extr_on_iff", ["filter", "eventually_eq"]], ["mod", "theorem", "is_local_max_on_iff", ["filter", "eventually_eq"]], ["mod", "theorem", "is_local_min_on_iff", ["filter", "eventually_eq"]], ["mod", "theorem", "is_local_max_on", ["filter", "eventually_le"]], ["mod", "theorem", "is_local_min_on", ["filter", "eventually_le"]], ["mod", "def", "is_local_extr_on", []], ["mod", "def", "is_local_max_on", []], ["mod", "def", "is_local_min_on", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "mem_nhds_within_iff", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1596616166, "sha": "3b268785", "message": "feat(linear_algebra/affine_space): more lemmas (#3615)\nAdd further lemmas on affine spaces. This is the last piece of\npreparation needed on the affine space side for my definitions of\n`circumcenter` and `circumradius` for a simplex in a Euclidean affine\nspace.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "eq_vadd_iff_vsub_eq", ["add_torsor"]], ["add", "theorem", "vsub_set_finite_of_finite", ["add_torsor"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "affine_independent_embedding_of_affine_independent", []], ["add", "theorem", "affine_independent_iff_indicator_eq_of_affine_combination_eq", []], ["add", "theorem", "affine_independent_subtype_of_affine_independent", []], ["add", "theorem", "finite_dimensional_direction_affine_span_of_finite", ["affine_space"]], ["add", "theorem", "finite_dimensional_vector_span_of_finite", ["affine_space"]], ["add", "theorem", "affine_span_disjoint_of_disjoint_of_affine_independent", []], ["add", "theorem", "affine_span_coe", ["affine_subspace"]], ["add", "theorem", "mem_affine_span_singleton", ["affine_subspace"]], ["add", "theorem", "exists_mem_inter_of_exists_mem_inter_affine_span_of_affine_independent", []], ["add", "theorem", "eq_affine_combination_subset_iff_eq_affine_combination_subtype", ["finset"]], ["add", "theorem", "eq_weighted_vsub_of_point_subset_iff_eq_weighted_vsub_of_point_subtype", ["finset"]], ["add", "theorem", "eq_weighted_vsub_subset_iff_eq_weighted_vsub_subtype", ["finset"]], ["add", "theorem", "mem_affine_span_iff_mem_of_affine_independent", []], ["add", "theorem", "not_mem_affine_span_diff_of_affine_independent", []]]}]}, {"timestamp": 1596565260, "sha": "84b450d4", "message": "feat(topology): path connected spaces (#3627)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_def", ["set"]], ["add", "theorem", "Ici_def", ["set"]], ["add", "theorem", "Ico_def", ["set"]], ["add", "theorem", "Iic_def", ["set"]], ["add", "theorem", "Iio_def", ["set"]], ["add", "theorem", "Ioc_def", ["set"]], ["add", "theorem", "Ioi_def", ["set"]], ["add", "theorem", "Ioo_def", ["set"]]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "to_has_basis", ["filter", "has_basis"]]]}, {"oldPath": null, "newPath": "src/topology/path_connected.lean", "changes": [["add", "def", "I_extend", []], ["add", "theorem", "I_extend_extends", []], ["add", "theorem", "I_extend_one", []], ["add", "theorem", "I_extend_range", []], ["add", "theorem", "I_extend_zero", []], ["add", "def", "I_symm", []], ["add", "theorem", "I_symm_one", []], ["add", "theorem", "I_symm_zero", []], ["add", "theorem", "Icc_zero_one_symm", []], ["add", "theorem", "coe_I_one", []], ["add", "theorem", "coe_I_zero", []], ["add", "theorem", "I_extend", ["continuous"]], ["add", "theorem", "continuous_I_symm", []], ["add", "theorem", "continuous_proj_I", []], ["add", "theorem", "is_connected_iff_is_path_connected", ["is_open"]], ["add", "theorem", "image", ["is_path_connected"]], ["add", "theorem", "joined_in", ["is_path_connected"]], ["add", "theorem", "mem_path_component", ["is_path_connected"]], ["add", "theorem", "preimage_coe", ["is_path_connected"]], ["add", "theorem", "subset_path_component", ["is_path_connected"]], ["add", "theorem", "union", ["is_path_connected"]], ["add", "def", "is_path_connected", []], ["add", "theorem", "is_path_connected_iff", []], ["add", "theorem", "is_path_connected_iff_eq", []], ["add", "theorem", "is_path_connected_iff_path_connected_space", []], ["add", "theorem", "mem_path_component", ["joined"]], ["add", "theorem", "refl", ["joined"]], ["add", "def", "some_path", ["joined"]], ["add", "theorem", "symm", ["joined"]], ["add", "theorem", "trans", ["joined"]], ["add", "def", "joined", []], ["add", "theorem", "joined", ["joined_in"]], ["add", "theorem", "joined_subtype", ["joined_in"]], ["add", "theorem", "mem", ["joined_in"]], ["add", "theorem", "mono", ["joined_in"]], ["add", "theorem", "refl", ["joined_in"]], ["add", "def", "some_path", ["joined_in"]], ["add", "theorem", "some_path_mem", ["joined_in"]], ["add", "theorem", "source_mem", ["joined_in"]], ["add", "theorem", "symm", ["joined_in"]], ["add", "theorem", "target_mem", ["joined_in"]], ["add", "theorem", "trans", ["joined_in"]], ["add", "def", "joined_in", []], ["add", "theorem", "joined_in_iff_joined", []], ["add", "theorem", "joined_in_univ", []], ["add", "theorem", "loc_path_connected_of_bases", []], ["add", "theorem", "loc_path_connected_of_is_open", []], ["add", "theorem", "mem_path_component_of_mem", []], ["add", "theorem", "mem_path_component_self", []], ["add", "def", "cast", ["path"]], ["add", "theorem", "cast_coe", ["path"]], ["add", "theorem", "continuous_extend", ["path"]], ["add", "def", "extend", ["path"]], ["add", "theorem", "extend_one", ["path"]], ["add", "theorem", "extend_zero", ["path"]], ["add", "def", "map", ["path"]], ["add", "theorem", "map_coe", ["path"]], ["add", "def", "refl", ["path"]], ["add", "def", "symm", ["path"]], ["add", "def", "trans", ["path"]], ["add", "structure", "path", []], ["add", "theorem", "nonempty", ["path_component"]], ["add", "def", "path_component", []], ["add", "theorem", "path_component_congr", []], ["add", "def", "path_component_in", []], ["add", "theorem", "path_component_in_univ", []], ["add", "theorem", "path_component_subset_component", []], ["add", "theorem", "path_component_symm", []], ["add", "def", "some_path", ["path_connected_space"]], ["add", "theorem", "path_connected_space_iff_connected_space", []], ["add", "theorem", "path_connected_space_iff_eq", []], ["add", "theorem", "path_connected_space_iff_univ", []], ["add", "theorem", "path_connected_space_iff_zeroth_homotopy", []], ["add", "theorem", "path_connected_subset_basis", []], ["add", "def", "path_setoid", []], ["add", "def", "proj_I", []], ["add", "theorem", "proj_I_I", []], ["add", "theorem", "range_proj_I", []], ["add", "theorem", "surjective_proj_I", []], ["add", "def", "zeroth_homotopy", []]]}]}, {"timestamp": 1596558818, "sha": "f4b2790d", "message": "feat(data/list/defs): add monadic versions of list.{find,any,all,bor,band} (#3679)\nAlso universe-generalise `mfind` while I'm at it.", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "mall", ["list"]], ["add", "def", "many", ["list"]], ["add", "def", "mband", ["list"]], ["add", "def", "mbfind'", ["list"]], ["add", "def", "mbfind", ["list"]], ["add", "def", "mbor", ["list"]], ["mod", "def", "mfind", ["list"]]]}]}, {"timestamp": 1596548424, "sha": "3ae6cea5", "message": "feat(group_theory/submonoid/operations): transfer galois connection/insertion lemmas (#3657)", "changes": [{"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "comap_id", ["submonoid"]], ["add", "theorem", "comap_inf_map_of_injective", ["submonoid"]], ["add", "theorem", "comap_infi_map_of_injective", ["submonoid"]], ["add", "theorem", "comap_injective_of_surjective", ["submonoid"]], ["add", "theorem", "comap_le_comap_iff_of_surjective", ["submonoid"]], ["add", "theorem", "comap_map_comap", ["submonoid"]], ["add", "theorem", "comap_map_eq_of_injective", ["submonoid"]], ["add", "theorem", "comap_strict_mono_of_surjective", ["submonoid"]], ["add", "theorem", "comap_sup_map_of_injective", ["submonoid"]], ["add", "theorem", "comap_supr_map_of_injective", ["submonoid"]], ["add", "theorem", "comap_surjective_of_injective", ["submonoid"]], ["add", "def", "gci_map_comap", ["submonoid"]], ["add", "def", "gi_map_comap", ["submonoid"]], ["add", "theorem", "le_comap_map", ["submonoid"]], ["add", "theorem", "le_comap_of_map_le", ["submonoid"]], ["add", "theorem", "map_comap_eq_of_surjective", ["submonoid"]], ["add", "theorem", "map_comap_le", ["submonoid"]], ["add", "theorem", "map_comap_map", ["submonoid"]], ["add", "theorem", "map_inf_comap_of_surjective", ["submonoid"]], ["add", "theorem", "map_infi_comap_of_surjective", ["submonoid"]], ["add", "theorem", "map_injective_of_injective", ["submonoid"]], ["add", "theorem", "map_le_map_iff_of_injective", ["submonoid"]], ["add", "theorem", "map_le_of_le_comap", ["submonoid"]], ["add", "theorem", "map_strict_mono_of_injective", ["submonoid"]], ["add", "theorem", "map_sup_comap_of_surjective", ["submonoid"]], ["add", "theorem", "map_supr_comap_of_surjective", ["submonoid"]], ["add", "theorem", "map_surjective_of_surjective", ["submonoid"]], ["add", "theorem", "monotone_comap", ["submonoid"]], ["add", "theorem", "monotone_map", ["submonoid"]]]}]}, {"timestamp": 1596538026, "sha": "78fe862a", "message": "chore(measure_theory/lebesgue_measure): review (#3686)\n* use `ennreal.of_real` instead of `coe ∘ nnreal.of_real`;\n* avoid some non-finishing `simp`s;\n* simplify proofs of `lebesgue_outer_Ico/Ioc/Ioo`;\n* add `instance : locally_finite_measure (volume : measure ℝ)`\n instead of `real.volume_lt_top_of_bounded` and\n `real.volume_lt_top_of_compact`.", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_add_le", ["ennreal"]], ["add", "theorem", "of_real_coe_nnreal", ["ennreal"]], ["mod", "theorem", "of_real_eq_coe_nnreal", ["ennreal"]], ["add", "theorem", "to_real_of_real'", ["ennreal"]], ["mod", "theorem", "to_real_of_real", ["ennreal"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["add", "theorem", "borel_le_lebesgue_measurable", ["measure_theory"]], ["mod", "theorem", "lebesgue_length_eq_infi_Icc", ["measure_theory"]], ["mod", "theorem", "lebesgue_length_eq_infi_Ioo", ["measure_theory"]], ["mod", "theorem", "lebesgue_length_mono", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_Ioc", ["measure_theory"]], ["mod", "theorem", "volume_Icc", ["real"]], ["mod", "theorem", "volume_Ico", ["real"]], ["add", "theorem", "volume_Ioc", ["real"]], ["mod", "theorem", "volume_Ioo", ["real"]], ["del", "theorem", "volume_lt_top_of_bounded", ["real"]], ["del", "theorem", "volume_lt_top_of_compact", ["real"]], ["mod", "theorem", "volume_singleton", ["real"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "diff_null", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1596538024, "sha": "8f02ad2f", "message": "feat(geometry/euclidean): orthogonal projection (#3662)\nDefine orthogonal projection onto an affine subspace of a Euclidean\naffine space, and prove some basic lemmas about it.", "changes": [{"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["add", "theorem", "dist_orthogonal_projection_eq_zero_iff", ["euclidean_geometry"]], ["add", "theorem", "dist_orthogonal_projection_ne_zero_of_not_mem", ["euclidean_geometry"]], ["add", "theorem", "dist_square_eq_dist_orthogonal_projection_square_add_dist_orthogonal_projection_square", ["euclidean_geometry"]], ["add", "theorem", "dist_square_smul_orthogonal_vadd_smul_orthogonal_vadd", ["euclidean_geometry"]], ["add", "theorem", "inter_eq_singleton_orthogonal_projection", ["euclidean_geometry"]], ["add", "theorem", "inter_eq_singleton_orthogonal_projection_fn", ["euclidean_geometry"]], ["add", "def", "orthogonal_projection", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_eq_self_iff", ["euclidean_geometry"]], ["add", "def", "orthogonal_projection_fn", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_eq", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_mem", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_mem_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_fn_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_mem", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_mem_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vadd_eq_self", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vadd_smul_vsub_orthogonal_projection", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vsub_mem_direction", ["euclidean_geometry"]], ["add", "theorem", "orthogonal_projection_vsub_mem_direction_orthogonal", ["euclidean_geometry"]], ["add", "theorem", "vsub_orthogonal_projection_mem_direction", ["euclidean_geometry"]], ["add", "theorem", "vsub_orthogonal_projection_mem_direction_orthogonal", ["euclidean_geometry"]]]}]}, {"timestamp": 1596534544, "sha": "14d206b3", "message": "feat(order/filter/interval): define class `filter.is_interval_generated` (#3663)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_finite_iff_finset", ["set"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "has_basis_infi_principal_finite", ["filter"]]]}, {"oldPath": null, "newPath": "src/order/filter/interval.lean", "changes": [["add", "theorem", "is_interval_generated", ["filter", "has_basis"]], ["add", "theorem", "has_ord_connected_basis", ["filter"]], ["add", "theorem", "is_interval_generated_principal_iff", ["filter"]], ["add", "theorem", "Icc", ["filter", "tendsto"]], ["add", "theorem", "Ico", ["filter", "tendsto"]], ["add", "theorem", "Ioc", ["filter", "tendsto"]], ["add", "theorem", "Ioo", ["filter", "tendsto"]], ["add", "theorem", "Ixx", ["filter", "tendsto"]], ["add", "theorem", "tendsto_Ixx_same_filter", ["filter"]], ["add", "theorem", "is_interval_generated_inf_principal", ["set", "ord_connected"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1596534542, "sha": "ed377e13", "message": "feat(analysis/convex): a local minimum of a convex function is a global minimum (#3613)", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/extrema.lean", "changes": [["add", "theorem", "of_is_local_min_of_convex_univ", ["is_min_on"]], ["add", "theorem", "of_is_local_min_on_of_convex_on", ["is_min_on"]], ["add", "theorem", "of_is_local_min_on_of_convex_on_Icc", ["is_min_on"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "decomp'", ["affine_map"]], ["add", "theorem", "decomp", ["affine_map"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/affine.lean", "changes": [["add", "theorem", "continuous_iff", ["affine_map"]], ["add", "theorem", "line_map_continuous", ["affine_map"]]]}]}, {"timestamp": 1596532142, "sha": "b4a6651f", "message": "chore(order/filter/at_top_bot): golf three proofs (#3684)\nAlso add `is_countably_generated_at_top`.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "at_top_finset_eq_infi", ["filter"]], ["add", "theorem", "is_countably_generated_at_top", ["filter"]], ["mod", "theorem", "tendsto_at_top_finset", ["filter", "monotone"]]]}]}, {"timestamp": 1596525112, "sha": "b0de8114", "message": "chore(measure_theory/borel_space): DRY by using `order_dual` (#3685)", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}]}, {"timestamp": 1596506722, "sha": "d9a6e478", "message": "feat(measure_theory/group): regular, invariant, and conjugate measures (#3650)\nDefine the notion of a regular measure. I did this in Borel space, which required me to add an import measure_space -> borel_space.\nDefine left invariant and right invariant measures for groups\nDefine the conjugate measure, and show it is left invariant iff the original is right invariant", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "inner_regular_eq", ["measure_theory", "measure", "regular"]], ["add", "theorem", "outer_regular_eq", ["measure_theory", "measure", "regular"]], ["add", "structure", "regular", ["measure_theory", "measure"]]]}, {"oldPath": null, "newPath": "src/measure_theory/group.lean", "changes": [["add", "def", "is_left_invariant", ["measure_theory"]], ["add", "theorem", "is_left_invariant_conj'", ["measure_theory"]], ["add", "theorem", "is_left_invariant_conj", ["measure_theory"]], ["add", "def", "is_right_invariant", ["measure_theory"]], ["add", "theorem", "is_right_invariant_conj'", ["measure_theory"]], ["add", "theorem", "is_right_invariant_conj", ["measure_theory"]], ["add", "theorem", "conj_apply", ["measure_theory", "measure"]], ["add", "theorem", "conj_conj", ["measure_theory", "measure"]], ["add", "theorem", "map_mul_left_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "map_mul_right_eq_self", ["measure_theory", "measure"]], ["add", "theorem", "conj", ["measure_theory", "measure", "regular"]], ["add", "theorem", "regular_conj_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ext_iff", ["measure_theory", "measure"]]]}]}, {"timestamp": 1596501412, "sha": "acedda0d", "message": "chore(scripts): update nolints.txt (#3682)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1596487983, "sha": "b215e952", "message": "fix(data/set/intervals/basic): fix a typo (#3680)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["del", "theorem", "Ioo_subset_Ioo_union_Ici", ["set"]], ["add", "theorem", "Ioo_subset_Ioo_union_Ico", ["set"]]]}]}, {"timestamp": 1596487981, "sha": "234011d0", "message": "chore(order/filter/lift): prove `has_basis.lift` and `has_basis.lift'` (#3618)", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "has_basis_principal", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "lift'", ["filter", "has_basis"]], ["add", "theorem", "lift", ["filter", "has_basis"]], ["add", "theorem", "mem_lift_iff", ["filter", "has_basis"]]]}]}, {"timestamp": 1596482541, "sha": "50d1c485", "message": "feat(order/galois_connection): galois_coinsertions (#3656)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "strict_mono_of_le_iff_le", []], ["mod", "theorem", "strict_mono_of_monotone_of_injective", []]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "def", "dual", ["galois_coinsertion"]], ["add", "theorem", "l_injective", ["galois_coinsertion"]], ["add", "theorem", "l_le_l_iff", ["galois_coinsertion"]], ["add", "def", "lift_bounded_lattice", ["galois_coinsertion"]], ["add", "def", "lift_complete_lattice", ["galois_coinsertion"]], ["add", "def", "lift_lattice", ["galois_coinsertion"]], ["add", "def", "lift_order_bot", ["galois_coinsertion"]], ["add", "def", "lift_semilattice_inf", ["galois_coinsertion"]], ["add", "def", "lift_semilattice_sup", ["galois_coinsertion"]], ["add", "def", "monotone_intro", ["galois_coinsertion"]], ["add", "def", "of_dual", ["galois_coinsertion"]], ["add", "theorem", "strict_mono_l", ["galois_coinsertion"]], ["add", "theorem", "u_inf_l", ["galois_coinsertion"]], ["add", "theorem", "u_infi_l", ["galois_coinsertion"]], ["add", "theorem", "u_infi_of_lu_eq_self", ["galois_coinsertion"]], ["add", "theorem", "u_l_eq", ["galois_coinsertion"]], ["add", "theorem", "u_sup_l", ["galois_coinsertion"]], ["add", "theorem", "u_supr_l", ["galois_coinsertion"]], ["add", "theorem", "u_supr_of_lu_eq_self", ["galois_coinsertion"]], ["add", "theorem", "u_surjective", ["galois_coinsertion"]], ["add", "structure", "galois_coinsertion", []], ["add", "def", "lift_order_top", ["galois_connection"]], ["add", "def", "to_galois_coinsertion", ["galois_connection"]], ["add", "def", "to_galois_insertion", ["galois_connection"]], ["add", "def", "dual", ["galois_insertion"]], ["del", "theorem", "l_infi_of_ul", ["galois_insertion"]], ["add", "theorem", "l_infi_of_ul_eq_self", ["galois_insertion"]], ["del", "theorem", "l_supr_of_ul", ["galois_insertion"]], ["add", "theorem", "l_supr_of_ul_eq_self", ["galois_insertion"]], ["add", "def", "of_dual", ["galois_insertion"]], ["add", "theorem", "strict_mono_u", ["galois_insertion"]], ["add", "theorem", "u_le_u_iff", ["galois_insertion"]]]}]}, {"timestamp": 1596482539, "sha": "40c6a295", "message": "feat(measure_theory/content): define outer measure from content (#3649)\nPart of the development for the Haar measure: define an outer measure from a content.", "changes": [{"oldPath": null, "newPath": "src/measure_theory/content.lean", "changes": [["add", "def", "inner_content", ["measure_theory"]], ["add", "theorem", "inner_content_Sup_nat", ["measure_theory"]], ["add", "theorem", "inner_content_Union_nat", ["measure_theory"]], ["add", "theorem", "inner_content_empty", ["measure_theory"]], ["add", "theorem", "inner_content_exists_compact", ["measure_theory"]], ["add", "theorem", "inner_content_le", ["measure_theory"]], ["add", "theorem", "inner_content_mono'", ["measure_theory"]], ["add", "theorem", "inner_content_mono", ["measure_theory"]], ["add", "theorem", "inner_content_of_is_compact", ["measure_theory"]], ["add", "theorem", "inner_content_pos", ["measure_theory"]], ["add", "theorem", "is_left_invariant_inner_content", ["measure_theory"]], ["add", "theorem", "le_inner_content", ["measure_theory"]], ["add", "theorem", "le_of_content_compacts", ["measure_theory", "outer_measure"]], ["add", "def", "of_content", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_exists_compact", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_exists_open", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_interior_compacts", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_opens", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_content_pos_of_is_open", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1596477460, "sha": "018309f0", "message": "chore(linear_algebra/basis): replace explicit arguments for 0 ≠ 1 with nontrivial R (#3678)", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "eq_of_linear_independent_of_span_subtype", []], ["mod", "theorem", "injective", ["is_basis"]], ["mod", "theorem", "le_of_span_le_span", []], ["mod", "theorem", "injective", ["linear_independent"]], ["mod", "theorem", "ne_zero", ["linear_independent"]], ["mod", "theorem", "span_le_span_iff", []], ["mod", "theorem", "surjective_of_linear_independent_of_span", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1596477458, "sha": "6186c694", "message": "feat(group_theory/subgroup): range_gpowers_hom (#3677)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "range_gmultiples_hom", ["add_subgroup"]], ["add", "theorem", "range_gpowers_hom", ["subgroup"]]]}]}, {"timestamp": 1596477456, "sha": "b8df8aac", "message": "feat(algebra/ring): the codomain of a ring hom is trivial iff ... (#3676)\nIn the discussion of #3488, Johan (currently on vacation, so I'm not pinging him) noted that we were missing the lemma \"if `f` is a ring homomorphism, `∀ x, f x = 0` implies that the codomain is trivial\". This PR adds a couple of ways to derive from homomorphisms that rings are trivial.\nI used `0 = 1` to express that the ring is trivial because that seems to be the one that is used in practice.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "codomain_trivial_iff_map_one_eq_zero", ["ring_hom"]], ["add", "theorem", "codomain_trivial_iff_range_eq_singleton_zero", ["ring_hom"]], ["add", "theorem", "codomain_trivial_iff_range_trivial", ["ring_hom"]], ["add", "theorem", "domain_nontrivial", ["ring_hom"]], ["add", "theorem", "map_one_ne_zero", ["ring_hom"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "map_monic_ne_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/ideal_over.lean", "newPath": "src/ring_theory/ideal_over.lean", "changes": [["mod", "theorem", "comap_lt_comap_of_integral_mem_sdiff", ["ideal"]]]}]}, {"timestamp": 1596477454, "sha": "5f9e4277", "message": "feat(analysis/normed_space/add_torsor): isometries of normed_add_torsors (#3666)\nAdd the lemma that an isometry of `normed_add_torsor`s induces an\nisometry of the corresponding `normed_group`s at any base point.\nPreviously discussed on Zulip, see\n;\nboth statement and proof have been revised along the lines indicated\nin that discussion.", "changes": [{"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "isometry_vadd_vsub_of_isometry", ["isometric"]]]}]}, {"timestamp": 1596477452, "sha": "aef7ade7", "message": "feat(data/set/intervals): a few lemmas needed by FTC-1 (#3653)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Ico_diff_Iio", ["set"]], ["mod", "theorem", "Ico_inter_Iio", ["set"]], ["add", "theorem", "Ioc_union_Ioc", ["set"]], ["add", "theorem", "Ioc_union_Ioc_left", ["set"]], ["add", "theorem", "Ioc_union_Ioc_right", ["set"]], ["add", "theorem", "Ioc_union_Ioc_symm", ["set"]], ["add", "theorem", "Ioc_union_Ioc_union_Ioc_cycle", ["set"]]]}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": [["add", "theorem", "Ico_disjoint_Ico_same", ["set"]], ["add", "theorem", "Ioc_disjoint_Ioc", ["set"]], ["add", "theorem", "Ioc_disjoint_Ioc_same", ["set"]]]}]}, {"timestamp": 1596471913, "sha": "c6381aa1", "message": "chore(algebra/group_ring_action): docstring, move monoid.End to algebra/group/hom (#3671)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_mul", ["add_monoid"]], ["add", "theorem", "coe_one", ["add_monoid"]], ["add", "theorem", "coe_mul", ["monoid"]], ["add", "theorem", "coe_one", ["monoid"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["del", "def", "End", ["add_monoid"]], ["del", "def", "End", ["monoid"]]]}]}, {"timestamp": 1596463749, "sha": "b2be1eeb", "message": "feat(measure_theory/measure_space): add 3 typeclasses (#3664)\nDefine `probability_measure`, `finite_measure`, and `locally_finite_measure`.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "one_lt_top", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "lintegral_congr", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "finite_measure", ["is_compact"]], ["add", "theorem", "ae_mono", ["measure_theory"]], ["add", "theorem", "ae_restrict_iff", ["measure_theory"]], ["add", "theorem", "finite_at_filter_of_finite", ["measure_theory"]], ["add", "theorem", "filter_mono", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "filter_mono_ae", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "filter_sup", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "inf_ae_iff", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "inf_of_left", ["measure_theory", "measure", "finite_at_filter"]], ["add", "theorem", "inf_of_right", ["measure_theory", "measure", "finite_at_filter"]], ["add", "def", "finite_at_filter", ["measure_theory", "measure"]], ["add", "theorem", "finite_at_nhds", ["measure_theory", "measure"]], ["add", "theorem", "finite_at_nhds_within", ["measure_theory", "measure"]], ["add", "theorem", "finite_at_principal", ["measure_theory", "measure"]], ["add", "theorem", "le_sum", ["measure_theory", "measure"]], ["mod", "theorem", "measure_congr", ["measure_theory"]], ["del", "theorem", "measure_diff_of_ae_imp", ["measure_theory"]], ["add", "theorem", "measure_diff_of_ae_le", ["measure_theory"]], ["del", "theorem", "measure_le_of_ae_imp", ["measure_theory"]], ["add", "theorem", "measure_mono_ae", ["measure_theory"]], ["add", "theorem", "restrict_congr", ["measure_theory"]], ["add", "theorem", "restrict_mono_ae", ["measure_theory"]], ["add", "theorem", "finite_measure", ["metric", "bounded"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "filter_mono", ["filter", "eventually_eq"]], ["del", "theorem", "mem_iff", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_eq_set", ["filter"]], ["del", "theorem", "eventually_set_ext", ["filter"]]]}]}, {"timestamp": 1596454180, "sha": "3781435d", "message": "feat(algebra/category/Group): the category of abelian groups is abelian (#3621)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Group/abelian.lean", "changes": [["add", "def", "normal_epi", ["AddCommGroup"]], ["add", "def", "normal_mono", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Module/abelian.lean", "newPath": "src/algebra/category/Module/abelian.lean", "changes": [["mod", "def", "normal_epi", ["Module"]], ["mod", "def", "normal_mono", ["Module"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["mod", "def", "parallel_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "comp_nat_iso", ["category_theory", "limits"]], ["add", "def", "iso_of_ι", ["category_theory", "limits"]], ["add", "def", "iso_of_π", ["category_theory", "limits"]], ["add", "def", "of_ι_congr", ["category_theory", "limits"]], ["add", "def", "of_π_congr", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["add", "def", "equivalence_reflects_normal_epi", ["category_theory"]], ["add", "def", "equivalence_reflects_normal_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["mod", "theorem", "equivalence_preserves_zero_morphisms", ["category_theory", "limits"]], ["add", "theorem", "is_equivalence_preserves_zero_morphisms", ["category_theory", "limits"]]]}]}, {"timestamp": 1596454178, "sha": "6079ef96", "message": "feat(analysis/normed_space/real_inner_product): orthogonal projection (#3563)\n`analysis.normed_space.real_inner_product` proves the existence of\northogonal projections onto complete subspaces, but only in the form\nof an existence theorem without a corresponding `def` for the function\nthat is proved to exist. Add the corresponding `def` of\n`orthogonal_projection` as a `linear_map` and lemmas with the basic\nproperties, extracted from the existing results with `some` and\n`some_spec`.\nFor convenience in constructing the `linear_map`, some lemmas are\nfirst proved for a version of the orthogonal projection as an\nunbundled function, then used in the definition of the bundled\n`linear_map` version, then restarted for the bundled version (the two\nversions of each lemma being definitionally equal; the bundled version\nis considered the main version that should be used in all subsequent\ncode).\nThis is preparation for defining the corresponding operation for\nEuclidean affine spaces as an `affine_map`.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "eq_orthogonal_projection_fn_of_mem_of_inner_eq_zero", []], ["add", "theorem", "eq_orthogonal_projection_of_mem_of_inner_eq_zero", []], ["add", "def", "orthogonal_projection", []], ["add", "def", "orthogonal_projection_fn", []], ["add", "theorem", "orthogonal_projection_fn_eq", []], ["add", "theorem", "orthogonal_projection_fn_inner_eq_zero", []], ["add", "theorem", "orthogonal_projection_fn_mem", []], ["add", "theorem", "orthogonal_projection_inner_eq_zero", []], ["add", "theorem", "orthogonal_projection_mem", []]]}]}, {"timestamp": 1596449093, "sha": "8e0d111f", "message": "feat(data/finset/lattice,data/finset/sort): singleton lemmas (#3668)\nAdd lemmas about `min'`, `max'` and `mono_of_fin` for a singleton\n`finset`.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "max'_singleton", ["finset"]], ["add", "theorem", "min'_singleton", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "mono_of_fin_singleton", ["finset"]]]}]}, {"timestamp": 1596449091, "sha": "61db67de", "message": "chore(measure_theory/integration): define composition of a `simple_func` and a measurable function (#3667)", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "coe_comp", ["measure_theory", "simple_func"]], ["add", "def", "comp", ["measure_theory", "simple_func"]], ["add", "theorem", "range_comp_subset_range", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1596449089, "sha": "292c921d", "message": "doc(category_theory): add library note about 'dsimp, simp' pattern (#3659)", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}]}, {"timestamp": 1596445737, "sha": "3d41e33f", "message": "feat(group_theory/submonoid/operations): mrange_eq_map (#3673)", "changes": [{"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "theorem", "mrange_eq_map", ["monoid_hom"]]]}]}, {"timestamp": 1596444100, "sha": "d3e1f5fb", "message": "feat(README): add @Vierkantor to maintainer list (#3674)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1596439759, "sha": "d6c17c94", "message": "feat(linear_algebra/affine_space): simplex ext lemmas (#3669)\nAdd `ext` lemmas for `affine_space.simplex`.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "ext", ["affine_space", "simplex"]], ["add", "theorem", "ext_iff", ["affine_space", "simplex"]]]}]}, {"timestamp": 1596432582, "sha": "60ba4782", "message": "feat(algebra/category/Module): the category of R-modules is abelian (#3606)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Module/abelian.lean", "changes": [["add", "def", "normal_epi", ["Module"]], ["add", "def", "normal_mono", ["Module"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "def", "as_hom", ["Module"]], ["add", "theorem", "epi_of_range_eq_top", ["Module"]], ["add", "theorem", "ker_eq_bot_of_mono", ["Module"]], ["del", "def", "kernel_cone", ["Module"]], ["del", "def", "kernel_is_limit", ["Module"]], ["add", "theorem", "mono_of_ker_eq_bot", ["Module"]], ["add", "theorem", "range_eq_top_of_epi", ["Module"]], ["add", "def", "to_Module_iso'", ["linear_equiv"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/kernels.lean", "changes": [["add", "def", "cokernel_cocone", ["Module"]], ["add", "def", "cokernel_is_colimit", ["Module"]], ["add", "def", "has_cokernels_Module", ["Module"]], ["add", "def", "has_kernels_Module", ["Module"]], ["add", "def", "kernel_cone", ["Module"]], ["add", "def", "kernel_is_limit", ["Module"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comp_ker_subtype", ["linear_map"]], ["add", "theorem", "ker_eq_bot_of_cancel", ["linear_map"]], ["add", "theorem", "range_eq_top_of_cancel", ["linear_map"]], ["add", "theorem", "range_mkq_comp", ["linear_map"]], ["add", "def", "quot_equiv_of_eq", ["submodule"]]]}]}, {"timestamp": 1596415344, "sha": "fb883ea5", "message": "chore(scripts): update nolints.txt (#3670)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1596405783, "sha": "06df5038", "message": "chore(analysis/calculus/times_cont_diff): transpose lemmas (#3665)\nIn #3639 , I accidentally placed the new lemma `times_cont_diff_at_inverse` between `times_cont_diff_at.prod_map'` and `times_cont_diff.prod_map`. This fixes that.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}]}, {"timestamp": 1596384063, "sha": "4588400f", "message": "chore(group_theory/*): refactor quotient groups to use bundled subgroups (#3321)", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": [["mod", "def", "factor_thru_image", ["AddCommGroup"]], ["mod", "def", "ι", ["AddCommGroup", "image"]], ["mod", "def", "image", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["add", "def", "to_multiplicative'", ["add_monoid_hom"]], ["add", "def", "to_additive'", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": [["mod", "def", "stabilizer_iso_End", ["category_theory", "action_category"]], ["mod", "theorem", "stabilizer_iso_End_apply", ["category_theory", "action_category"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["mod", "theorem", "commutator_subset_ker", ["abelianization"]], ["add", "theorem", "hom_ext", ["abelianization"]], ["mod", "theorem", "of", ["abelianization", "lift"]], ["mod", "def", "lift", ["abelianization"]], ["mod", "def", "of", ["abelianization"]], ["mod", "def", "commutator", []]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "theorem", "eq_cosets_of_normal", []], ["del", "def", "left_coset_equiv_subgroup", ["is_subgroup"]], ["mod", "theorem", "normal_iff_eq_cosets", []], ["mod", "theorem", "normal_of_eq_cosets", []], ["add", "def", "quotient", ["quotient_add_group"]], ["mod", "theorem", "eq_class_eq_left_coset", ["quotient_group"]], ["mod", "def", "left_rel", ["quotient_group"]], ["mod", "def", "quotient", ["quotient_group"]], ["mod", "theorem", "right_coset_mem_right_coset", []], ["add", "def", "left_coset_equiv_subgroup", ["subgroup"]]]}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["mod", "def", "lift", ["free_abelian_group"]], ["add", "def", "map", ["free_abelian_group"]], ["add", "theorem", "of_mul", ["free_abelian_group"]], ["add", "theorem", "of_mul_of", ["free_abelian_group"]], ["add", "theorem", "of_one", ["free_abelian_group"]], ["add", "theorem", "one_def", ["free_abelian_group"]]]}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["add", "theorem", "closure_subset", ["free_group"]], ["add", "def", "to_fun", ["free_group", "map"]], ["mod", "def", "map", ["free_group"]], ["mod", "theorem", "unique", ["free_group", "prod"]], ["mod", "def", "prod", ["free_group"]], ["mod", "theorem", "range_subset", ["free_group", "to_group"]], ["add", "def", "to_fun", ["free_group", "to_group"]], ["mod", "theorem", "unique", ["free_group", "to_group"]], ["mod", "def", "to_group", ["free_group"]]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["mod", "def", "comp_hom", ["mul_action"]], ["add", "theorem", "eq_inv_smul_iff", ["mul_action"]], ["add", "theorem", "inv_smul_eq_iff", ["mul_action"]], ["mod", "def", "mul_left_cosets", ["mul_action"]], ["add", "def", "subgroup", ["mul_action", "stabilizer"]], ["add", "def", "submonoid", ["mul_action", "stabilizer"]], ["mod", "def", "stabilizer", ["mul_action"]], ["add", "def", "stabilizer_carrier", ["mul_action"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "card_eq_card_quotient_mul_card_subgroup", []], ["mod", "theorem", "card_quotient_dvd_card", []], ["mod", "theorem", "card_subgroup_dvd_card", []], ["mod", "theorem", "card_trivial", []], ["add", "theorem", "mem_powers_iff_mem_gpowers", []], ["mod", "theorem", "order_eq_card_gpowers", []], ["mod", "theorem", "powers_eq_gpowers", []]]}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": [["mod", "theorem", "closure_rels_subset_ker", ["presented_group"]], ["mod", "theorem", "unique", ["presented_group", "to_group"]], ["mod", "def", "to_group", ["presented_group"]], ["mod", "theorem", "to_group_eq_one_of_mem_closure", ["presented_group"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "def", "ker_lift", ["quotient_group"]], ["mod", "def", "lift", ["quotient_group"]], ["mod", "theorem", "lift_mk'", ["quotient_group"]], ["mod", "theorem", "lift_mk", ["quotient_group"]], ["mod", "def", "map", ["quotient_group"]], ["add", "def", "mk'", ["quotient_group"]], ["add", "def", "range_ker_lift", ["quotient_group"]], ["add", "theorem", "range_ker_lift_injective", ["quotient_group"]], ["add", "theorem", "range_ker_lift_surjective", ["quotient_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "gmultiples_subset", ["add_subgroup"]], ["mod", "theorem", "mem_ker", ["monoid_hom"]], ["add", "def", "to_range", ["monoid_hom"]], ["add", "theorem", "to_range_ker", ["monoid_hom"]], ["add", "theorem", "gpowers_subset", ["subgroup"]], ["mod", "theorem", "mem_bot", ["subgroup"]], ["add", "def", "set_normalizer", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "mem_multiples", ["add_submonoid"]], ["add", "def", "multiples", ["add_submonoid"]], ["add", "theorem", "multiples_eq_closure", ["add_submonoid"]], ["add", "theorem", "multiples_subset", ["add_submonoid"]], ["add", "theorem", "mem_powers", ["submonoid"]], ["add", "def", "powers", ["submonoid"]], ["add", "theorem", "powers_eq_closure", ["submonoid"]], ["add", "theorem", "powers_subset", ["submonoid"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "card_preimage_mk", ["quotient_group"]], ["mod", "def", "fixed_points_mul_left_cosets_equiv_quotient", ["sylow"]], ["mod", "theorem", "mem_fixed_points_mul_left_cosets_iff_mem_normalizer", ["sylow"]]]}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["mod", "def", "lift", ["free_comm_ring"]], ["mod", "theorem", "lift_comp_of", ["free_comm_ring"]], ["add", "theorem", "lift_hom_comp_of", ["free_comm_ring"]], ["mod", "def", "restriction", ["free_comm_ring"]], ["mod", "def", "to_free_comm_ring", ["free_ring"]]]}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": [["add", "def", "lift_hom", ["free_ring"]], ["add", "def", "map_hom", ["free_ring"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "quotient_group_saturate", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["del", "theorem", "mem_nhds_one", ["is_submonoid"]], ["add", "theorem", "mem_nhds_one", ["submonoid"]]]}]}, {"timestamp": 1596368811, "sha": "65598321", "message": "feat(order/filter/lift): a few lemmas about `filter.lift' _ powerset` (#3652)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "powerset_mono", ["set"]], ["add", "theorem", "powerset_nonempty", ["set"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "eventually_lift'_iff", ["filter"]], ["add", "theorem", "eventually_lift'_powerset'", ["filter"]], ["add", "theorem", "eventually_lift'_powerset", ["filter"]], ["add", "theorem", "eventually_lift'_powerset_eventually", ["filter"]], ["add", "theorem", "eventually_lift'_powerset_forall", ["filter"]]]}]}, {"timestamp": 1596368809, "sha": "fe4da7bc", "message": "feat(category_theory/limits): transporting is_limit (#3598)\nSome lemmas about moving `is_limit` terms around over equivalences, or (post|pre)composing.", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "hom_is_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_left_adjoint", ["category_theory", "limits", "is_colimit"]], ["add", "def", "precompose_hom_equiv", ["category_theory", "limits", "is_colimit"]], ["add", "def", "precompose_inv_equiv", ["category_theory", "limits", "is_colimit"]], ["add", "def", "hom_is_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_right_adjoint", ["category_theory", "limits", "is_limit"]], ["add", "def", "postcompose_hom_equiv", ["category_theory", "limits", "is_limit"]], ["add", "def", "postcompose_inv_equiv", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "newPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "changes": []}]}, {"timestamp": 1596368807, "sha": "52c0b421", "message": "feat(category_theory): Mon_ (C ⥤ D) ≌ C ⥤ Mon_ D (#3576)\nWhen `D` is a monoidal category,\nmonoid objects in `C ⥤ D` are the same thing as functors from `C` into the monoid objects of `D`.\nThis is formalised as:\n* `Mon_functor_category_equivalence : Mon_ (C ⥤ D) ≌ C ⥤ Mon_ D`\nThe intended application is that as `Ring ≌ Mon_ Ab` (not yet constructed!),\nwe have `presheaf Ring X ≌ presheaf (Mon_ Ab) X ≌ Mon_ (presheaf Ab X)`,\nand we can model a module over a presheaf of rings as a module object in `presheaf Ab X`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/internal/functor_category.lean", "changes": [["add", "def", "counit_iso", ["category_theory", "monoidal", "Mon_functor_category_equivalence"]], ["add", "def", "functor", ["category_theory", "monoidal", "Mon_functor_category_equivalence"]], ["add", "def", "inverse", ["category_theory", "monoidal", "Mon_functor_category_equivalence"]], ["add", "def", "unit_iso", ["category_theory", "monoidal", "Mon_functor_category_equivalence"]], ["add", "def", "Mon_functor_category_equivalence", ["category_theory", "monoidal"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["add", "theorem", "congr_app", ["category_theory"]]]}]}, {"timestamp": 1596368805, "sha": "e99518b2", "message": "feat(category_theory): braided and symmetric categories (#3550)\nJust the very basics:\n* the definition of braided and symmetric categories\n* braided functors, and compositions thereof\n* the symmetric monoidal structure coming from products\n* upgrading `Type u` to a symmetric monoidal structure\nThis is prompted by the desire to explore modelling sheaves of modules as the monoidal category of module objects for an internal commutative monoid in sheaves of `Ab`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/braided.lean", "changes": [["add", "def", "comp", ["category_theory", "braided_functor"]], ["add", "def", "id", ["category_theory", "braided_functor"]], ["add", "structure", "braided_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["add", "def", "symmetric_of_has_finite_coproducts", ["category_theory"]], ["add", "def", "symmetric_of_has_finite_products", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}]}, {"timestamp": 1596368803, "sha": "8c1e2da7", "message": "feat(linear_algebra/tensor_algebra): Tensor algebras (#3531)\nThis PR constructs the tensor algebra of a module over a commutative ring.\nThe main components are:\n1. The construction of the tensor algebra: `tensor_algebra R M` for a module `M` over a commutative ring `R`.\n2. The linear map `univ R M` from `M` to `tensor_algebra R M`.\n3. Given a linear map `f`from `M`to an `R`-algebra `A`, the lift of `f` to `tensor_algebra R M` is denoted `lift R M f`.\n4. A theorem `univ_comp_lift` asserting that the composition of `univ R M` with `lift R M f`is `f`.\n5. A theorem `lift_unique` asserting the uniqueness of `lift R M f`with respect to property 4.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "lift_on₂_mk", ["quot"]], ["add", "theorem", "lift₂_mk", ["quot"]], ["add", "theorem", "map₂_mk", ["quot"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/tensor_algebra.lean", "changes": [["add", "theorem", "hom_ext", ["tensor_algebra"]], ["add", "def", "lift", ["tensor_algebra"]], ["add", "theorem", "lift_comp_ι", ["tensor_algebra"]], ["add", "def", "lift_fun", ["tensor_algebra"]], ["add", "theorem", "lift_unique", ["tensor_algebra"]], ["add", "def", "has_add", ["tensor_algebra", "pre"]], ["add", "def", "has_coe_module", ["tensor_algebra", "pre"]], ["add", "def", "has_coe_semiring", ["tensor_algebra", "pre"]], ["add", "def", "has_mul", ["tensor_algebra", "pre"]], ["add", "def", "has_one", ["tensor_algebra", "pre"]], ["add", "def", "has_scalar", ["tensor_algebra", "pre"]], ["add", "def", "has_zero", ["tensor_algebra", "pre"]], ["add", "inductive", "pre", ["tensor_algebra"]], ["add", "inductive", "rel", ["tensor_algebra"]], ["add", "def", "ι", ["tensor_algebra"]], ["add", "theorem", "ι_comp_lift", ["tensor_algebra"]], ["add", "def", "tensor_algebra", []]]}]}, {"timestamp": 1596363508, "sha": "58f2c36a", "message": "feat(dynamics/periodic_pts): definition and basic properties (#3660)\nAlso add more lemmas about `inj/surj/bij_on` and `maps_to`.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inter", ["set", "bij_on"]], ["add", "theorem", "union", ["set", "bij_on"]], ["add", "theorem", "inter", ["set", "maps_to"]], ["add", "theorem", "inter_inter", ["set", "maps_to"]], ["add", "theorem", "union", ["set", "maps_to"]], ["add", "theorem", "union_union", ["set", "maps_to"]], ["add", "theorem", "inter", ["set", "surj_on"]], ["add", "theorem", "inter_inter", ["set", "surj_on"]], ["add", "theorem", "union", ["set", "surj_on"]], ["add", "theorem", "union_union", ["set", "surj_on"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bij_on_Inter", ["set"]], ["add", "theorem", "bij_on_Inter_of_directed", ["set"]], ["add", "theorem", "bij_on_Union", ["set"]], ["add", "theorem", "bij_on_Union_of_directed", ["set"]], ["add", "theorem", "image_Inter_subset", ["set"]], ["add", "theorem", "image_bInter_subset", ["set"]], ["add", "theorem", "image_sInter_subset", ["set"]], ["add", "theorem", "image_Inter_eq", ["set", "inj_on"]], ["add", "theorem", "image_bInter_eq", ["set", "inj_on"]], ["add", "theorem", "inj_on_Union_of_directed", ["set"]], ["add", "theorem", "maps_to_Inter", ["set"]], ["add", "theorem", "maps_to_Inter_Inter", ["set"]], ["add", "theorem", "maps_to_Union", ["set"]], ["add", "theorem", "maps_to_Union_Union", ["set"]], ["add", "theorem", "maps_to_bInter", ["set"]], ["add", "theorem", "maps_to_bInter_bInter", ["set"]], ["add", "theorem", "maps_to_bUnion", ["set"]], ["add", "theorem", "maps_to_bUnion_bUnion", ["set"]], ["add", "theorem", "maps_to_sInter", ["set"]], ["add", "theorem", "maps_to_sUnion", ["set"]], ["add", "theorem", "surj_on_Inter", ["set"]], ["add", "theorem", "surj_on_Inter_Inter", ["set"]], ["add", "theorem", "surj_on_Union", ["set"]], ["add", "theorem", "surj_on_Union_Union", ["set"]], ["add", "theorem", "surj_on_bUnion", ["set"]], ["add", "theorem", "surj_on_bUnion_bUnion", ["set"]], ["add", "theorem", "surj_on_sUnion", ["set"]]]}, {"oldPath": null, "newPath": "src/dynamics/periodic_pts.lean", "changes": [["add", "theorem", "Union_pnat_pts_of_period", ["function"]], ["add", "theorem", "bUnion_pts_of_period", ["function"]], ["add", "theorem", "bij_on_periodic_pts", ["function"]], ["add", "theorem", "bij_on_pts_of_period", ["function"]], ["add", "theorem", "directed_pts_of_period_pnat", ["function"]], ["add", "theorem", "is_periodic_pt", ["function", "is_fixed_pt"]], ["add", "theorem", "is_periodic_id", ["function"]], ["add", "theorem", "apply_iterate", ["function", "is_periodic_pt"]], ["add", "theorem", "eq_of_apply_eq", ["function", "is_periodic_pt"]], ["add", "theorem", "eq_of_apply_eq_same", ["function", "is_periodic_pt"]], ["add", "theorem", "eq_zero_of_lt_minimal_period", ["function", "is_periodic_pt"]], ["add", "theorem", "left_of_add", ["function", "is_periodic_pt"]], ["add", "theorem", "minimal_period_dvd", ["function", "is_periodic_pt"]], ["add", "theorem", "minimal_period_le", ["function", "is_periodic_pt"]], ["add", "theorem", "minimal_period_pos", ["function", "is_periodic_pt"]], ["add", "theorem", "right_of_add", ["function", "is_periodic_pt"]], ["add", "theorem", "trans_dvd", ["function", "is_periodic_pt"]], ["add", "def", "is_periodic_pt", ["function"]], ["add", "theorem", "is_periodic_pt_iff_minimal_period_dvd", ["function"]], ["add", "theorem", "is_periodic_pt_minimal_period", ["function"]], ["add", "theorem", "is_periodic_pt_zero", ["function"]], ["add", "theorem", "mem_periodic_pts", ["function"]], ["add", "theorem", "mem_pts_of_period", ["function"]], ["add", "def", "minimal_period", ["function"]], ["add", "theorem", "minimal_period_pos_iff_mem_periodic_pts", ["function"]], ["add", "theorem", "minimal_period_pos_of_mem_periodic_pts", ["function"]], ["add", "theorem", "mk_mem_periodic_pts", ["function"]], ["add", "def", "periodic_pts", ["function"]], ["add", "def", "pts_of_period", ["function"]], ["add", "theorem", "maps_to_periodic_pts", ["function", "semiconj"]], ["add", "theorem", "maps_to_pts_of_period", ["function", "semiconj"]]]}]}, {"timestamp": 1596357081, "sha": "78655b6e", "message": "feat(data/set/intervals): define `set.ord_connected` (#3647)\nA set `s : set α`, `[preorder α]` is `ord_connected` if for\nany `x y ∈ s` we have `[x, y] ⊆ s`. For real numbers this property\nis equivalent to each of the properties `convex s`\nand `is_preconnected s`. We define it for any `preorder`, prove some\nbasic properties, and migrate lemmas like `convex_I??` and\n`is_preconnected_I??` to this API.", "changes": [{"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "convex_Icc", []], ["mod", "theorem", "convex_Ici", []], ["mod", "theorem", "convex_Ico", []], ["mod", "theorem", "convex_Iic", []], ["mod", "theorem", "convex_Iio", []], ["mod", "theorem", "convex_Ioc", []], ["mod", "theorem", "convex_Ioi", []], ["mod", "theorem", "convex_Ioo", []], ["add", "theorem", "convex_interval", []], ["del", "theorem", "convex_real_iff", []], ["add", "theorem", "convex_iff_ord_connected", ["real"]]]}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "convex_iff_is_preconnected", ["real"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "Icc_diff_Ico_same", ["set"]], ["mod", "theorem", "Icc_diff_Ioc_same", ["set"]], ["mod", "theorem", "Icc_diff_Ioo_same", ["set"]], ["mod", "theorem", "Icc_diff_both", ["set"]], ["mod", "theorem", "Icc_diff_left", ["set"]], ["mod", "theorem", "Icc_diff_right", ["set"]], ["mod", "theorem", "Ici_diff_Ioi_same", ["set"]], ["mod", "theorem", "Ici_diff_left", ["set"]], ["mod", "theorem", "Ico_diff_Ioo_same", ["set"]], ["mod", "theorem", "Ico_diff_left", ["set"]], ["mod", "theorem", "Iic_diff_Iio_same", ["set"]], ["mod", "theorem", "Iic_diff_right", ["set"]], ["mod", "theorem", "Iio_union_right", ["set"]], ["mod", "theorem", "Ioc_diff_Ioo_same", ["set"]], ["mod", "theorem", "Ioc_diff_right", ["set"]], ["mod", "theorem", "Ioi_union_left", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/intervals/ord_connected.lean", "changes": [["add", "theorem", "dual", ["set", "ord_connected"]], ["add", "theorem", "inter", ["set", "ord_connected"]], ["add", "theorem", "interval_subset", ["set", "ord_connected"]], ["add", "def", "ord_connected", ["set"]], ["add", "theorem", "ord_connected_Icc", ["set"]], ["add", "theorem", "ord_connected_Ici", ["set"]], ["add", "theorem", "ord_connected_Ico", ["set"]], ["add", "theorem", "ord_connected_Iic", ["set"]], ["add", "theorem", "ord_connected_Iio", ["set"]], ["add", "theorem", "ord_connected_Inter", ["set"]], ["add", "theorem", "ord_connected_Ioc", ["set"]], ["add", "theorem", "ord_connected_Ioi", ["set"]], ["add", "theorem", "ord_connected_Ioo", ["set"]], ["add", "theorem", "ord_connected_bInter", ["set"]], ["add", "theorem", "ord_connected_dual", ["set"]], ["add", "theorem", "ord_connected_empty", ["set"]], ["add", "theorem", "ord_connected_iff", ["set"]], ["add", "theorem", "ord_connected_iff_interval_subset", ["set"]], ["add", "theorem", "ord_connected_interval", ["set"]], ["add", "theorem", "ord_connected_of_Ioo", ["set"]], ["add", "theorem", "ord_connected_sInter", ["set"]], ["add", "theorem", "ord_connected_univ", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "is_preconnected_Ici", []], ["mod", "theorem", "is_preconnected_Ico", []], ["mod", "theorem", "is_preconnected_Iic", []], ["mod", "theorem", "is_preconnected_Iio", []], ["mod", "theorem", "is_preconnected_Ioc", []], ["mod", "theorem", "is_preconnected_Ioi", []], ["mod", "theorem", "is_preconnected_Ioo", []], ["del", "theorem", "is_preconnected_iff_forall_Icc_subset", []], ["add", "theorem", "is_preconnected_iff_ord_connected", []], ["add", "theorem", "is_preconnected_interval", []]]}]}, {"timestamp": 1596357079, "sha": "f2db6a8f", "message": "chore(algebra/order): enable dot syntax (#3643)\nAdd dot syntax aliases to some lemmas about order (e.g.,\n`has_le.le.trans`). Also remove `lt_of_le_of_ne'` (was equivalent\nto `lt_of_le_of_ne`).", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "le_or_lt", ["has_le", "le"]], ["add", "theorem", "lt_or_le", ["has_le", "le"]], ["del", "theorem", "lt_of_le_of_ne'", []]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}]}, {"timestamp": 1596350664, "sha": "6394e4d4", "message": "feat(algebra/category/*): forget reflects isos (#3600)", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/concrete_category/reflects_isomorphisms.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "cocone_iso_of_hom_iso", ["category_theory", "limits", "cocones"]], ["add", "def", "cone_iso_of_hom_iso", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/over.lean", "newPath": "src/category_theory/over.lean", "changes": []}, {"oldPath": "src/category_theory/reflect_isomorphisms.lean", "newPath": null, "changes": [["del", "def", "cocone_iso_of_hom_iso", ["category_theory"]], ["del", "def", "cone_iso_of_hom_iso", ["category_theory"]], ["del", "def", "is_iso_of_reflects_iso", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/reflects_isomorphisms.lean", "changes": [["add", "def", "is_iso_of_reflects_iso", ["category_theory"]]]}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}]}, {"timestamp": 1596341431, "sha": "d76c75e9", "message": "feat(measure_theory): cleanup and generalize measure' (#3648)\nThere were two functions `measure'` and `outer_measure'` with undescriptive names, and which were not very general\nrename `measure'` -> `extend`\nrename `outer_measure'` -> `induced_outer_measure`\ngeneralize both `extend` and `induced_outer_measure` to an arbitrary subset of `set α` (instead of just the measurable sets). Most lemmas still hold in full generality, sometimes with a couple more assumptions. For the lemmas that need more assumptions, we have also kept the version that is just for `is_measurable`.\nMove functions `extend`, `induced_outer_measure` and `trim` to `outer_measure.lean`.\nrename `caratheodory_is_measurable` -> `of_function_caratheodory`\nrename `trim_ge` -> `le_trim`\nMake the section on caratheodory sets not private (and give a more descriptive name to lemmas).\nStyle in `measurable_space` and `outer_measure`", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "image_symm_preimage", ["equiv", "set"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "Union", ["is_measurable"]], ["mod", "def", "measurable", []], ["mod", "theorem", "ext", ["measurable_space", "dynkin_system"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "def", "measure'", ["measure_theory"]], ["del", "theorem", "measure'_Union", ["measure_theory"]], ["del", "theorem", "measure'_Union_le_tsum_nat'", ["measure_theory"]], ["del", "theorem", "measure'_Union_le_tsum_nat", ["measure_theory"]], ["del", "theorem", "measure'_Union_nat", ["measure_theory"]], ["del", "theorem", "measure'_empty", ["measure_theory"]], ["del", "theorem", "measure'_eq", ["measure_theory"]], ["del", "theorem", "measure'_mono", ["measure_theory"]], ["del", "theorem", "measure'_union", ["measure_theory"]], ["add", "theorem", "measure_eq_extend", ["measure_theory"]], ["add", "theorem", "measure_eq_induced_outer_measure", ["measure_theory"]], ["del", "theorem", "measure_eq_measure'", ["measure_theory"]], ["del", "theorem", "measure_eq_outer_measure'", ["measure_theory"]], ["del", "def", "outer_measure'", ["measure_theory"]], ["del", "theorem", "outer_measure'_eq", ["measure_theory"]], ["del", "theorem", "outer_measure'_eq_measure'", ["measure_theory"]], ["del", "theorem", "exists_is_measurable_superset_of_trim_eq_zero", ["measure_theory", "outer_measure"]], ["del", "theorem", "le_trim_iff", ["measure_theory", "outer_measure"]], ["del", "def", "trim", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_add", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_congr", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_eq", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_eq_infi'", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_eq_infi", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_ge", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_le_trim", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_smul", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_sum_ge", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_trim", ["measure_theory", "outer_measure"]], ["del", "theorem", "trim_zero", ["measure_theory", "outer_measure"]], ["add", "theorem", "to_outer_measure_eq_induced_outer_measure", ["measure_theory"]], ["del", "theorem", "to_outer_measure_eq_outer_measure'", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "def", "extend", ["measure_theory"]], ["add", "theorem", "extend_Union", ["measure_theory"]], ["add", "theorem", "extend_Union_le_tsum_nat'", ["measure_theory"]], ["add", "theorem", "extend_Union_le_tsum_nat", ["measure_theory"]], ["add", "theorem", "extend_Union_nat", ["measure_theory"]], ["add", "theorem", "extend_empty", ["measure_theory"]], ["add", "theorem", "extend_eq", ["measure_theory"]], ["add", "theorem", "extend_mono'", ["measure_theory"]], ["add", "theorem", "extend_mono", ["measure_theory"]], ["add", "theorem", "extend_union", ["measure_theory"]], ["add", "def", "induced_outer_measure", ["measure_theory"]], ["add", "theorem", "induced_outer_measure_caratheodory", ["measure_theory"]], ["add", "theorem", "induced_outer_measure_eq'", ["measure_theory"]], ["add", "theorem", "induced_outer_measure_eq", ["measure_theory"]], ["add", "theorem", "induced_outer_measure_eq_extend'", ["measure_theory"]], ["add", "theorem", "induced_outer_measure_eq_extend", ["measure_theory"]], ["add", "theorem", "induced_outer_measure_eq_infi", ["measure_theory"]], ["add", "theorem", "induced_outer_measure_exists_set", ["measure_theory"]], ["add", "theorem", "le_extend", ["measure_theory"]], ["add", "def", "caratheodory_dynkin", ["measure_theory", "outer_measure"]], ["del", "theorem", "caratheodory_is_measurable", ["measure_theory", "outer_measure"]], ["add", "theorem", "exists_is_measurable_superset_of_trim_eq_zero", ["measure_theory", "outer_measure"]], ["add", "theorem", "f_Union", ["measure_theory", "outer_measure"]], ["add", "def", "is_caratheodory", ["measure_theory", "outer_measure"]], ["del", "theorem", "is_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_Union_lt", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_Union_nat", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_compl", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_compl_iff", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_empty", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_iff", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_iff_le'", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_iff_le", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_inter", ["measure_theory", "outer_measure"]], ["del", "theorem", "is_caratheodory_le", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_sum", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_union", ["measure_theory", "outer_measure"]], ["mod", "theorem", "le_of_function", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_trim_iff", ["measure_theory", "outer_measure"]], ["add", "theorem", "measure_inter_union", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_function_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "of_function_eq", ["measure_theory", "outer_measure"]], ["mod", "theorem", "of_function_le", ["measure_theory", "outer_measure"]], ["add", "def", "trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_add", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_congr", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_eq", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_eq_infi'", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_eq_infi", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_le_trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_smul", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_sum_ge", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_zero", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1596338412, "sha": "fc65ba0d", "message": "feat(analysis/calculus/times_cont_diff): inversion is smooth (#3639)\nAt an invertible element of a complete normed algebra, the inversion operation is smooth.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "comp_times_cont_diff_at", ["times_cont_diff"]], ["add", "theorem", "comp", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_at_inverse", []], ["add", "theorem", "times_cont_diff_at_succ_iff_has_fderiv_at", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "lmul_left_right_is_bounded_bilinear", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "def", "lmul_left", ["continuous_linear_map"]], ["mod", "theorem", "lmul_left_apply", ["continuous_linear_map"]], ["add", "theorem", "lmul_left_norm", ["continuous_linear_map"]], ["add", "def", "lmul_left_right", ["continuous_linear_map"]], ["add", "theorem", "lmul_left_right_apply", ["continuous_linear_map"]], ["add", "theorem", "lmul_left_right_norm_le", ["continuous_linear_map"]], ["mod", "def", "lmul_right", ["continuous_linear_map"]], ["mod", "theorem", "lmul_right_apply", ["continuous_linear_map"]], ["add", "theorem", "lmul_right_norm", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": [["add", "theorem", "nhds", ["units"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "lmul_left_right", ["algebra"]], ["add", "theorem", "lmul_left_right_apply", ["algebra"]]]}]}, {"timestamp": 1596334222, "sha": "d3de289a", "message": "feat(topology/local_homeomorph): open_embedding.continuous_at_iff (#3599)\n```\nlemma continuous_at_iff\n {f : α → β} {g : β → γ} (hf : open_embedding f) {x : α} :\n continuous_at (g ∘ f) x ↔ continuous_at g (f x) :=\n```", "changes": [{"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "continuous_at_iff", ["open_embedding"]]]}]}, {"timestamp": 1596316027, "sha": "4274dddf", "message": "chore(*): bump to Lean 3.18.4 (#3610)\n* Remove `pi_arity` and the `vm_override` for `by_cases`, which have moved to core\n* Fix fallout from the change to the definition of `max`\n* Fix a small number of errors caused by changes to instance caching\n* Remove `min_add`, which is generalized by `min_add_add_right` and make `to_additive` generate some lemmas", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["del", "theorem", "fn_min_add_fn_max", []], ["del", "theorem", "min_add", []], ["del", "theorem", "min_add_max", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": [["mod", "theorem", "nat_max", ["primrec"]]]}, {"oldPath": "src/control/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}, {"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/fix_by_cases.lean", "newPath": null, "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1596297333, "sha": "92a20e64", "message": "feat(order/filter/extr, topology/local_extr): links between extremas of two eventually le/eq functions (#3624)\nAdd many lemmas that look similar to e.g : if f and g are equal at `a`, and `f ≤ᶠ[l] g` for some filter `l`, then `is_min_filter l f a`implies `is_min_filter l g a`", "changes": [{"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["add", "theorem", "is_extr_filter_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_max_filter_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_min_filter_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_max_filter", ["filter", "eventually_le"]], ["add", "theorem", "is_min_filter", ["filter", "eventually_le"]], ["add", "theorem", "congr", ["is_extr_filter"]], ["add", "theorem", "congr", ["is_max_filter"]], ["add", "theorem", "congr", ["is_min_filter"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "eq_of_nhds_within", ["filter", "eventually_eq"]]]}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": [["add", "theorem", "is_local_extr_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_local_extr_on_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_local_max_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_local_max_on_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_local_min_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_local_min_on_iff", ["filter", "eventually_eq"]], ["add", "theorem", "is_local_max", ["filter", "eventually_le"]], ["add", "theorem", "is_local_max_on", ["filter", "eventually_le"]], ["add", "theorem", "is_local_min", ["filter", "eventually_le"]], ["add", "theorem", "is_local_min_on", ["filter", "eventually_le"]], ["add", "theorem", "congr", ["is_local_extr"]], ["add", "theorem", "congr", ["is_local_extr_on"]], ["add", "theorem", "congr", ["is_local_max"]], ["add", "theorem", "congr", ["is_local_max_on"]], ["add", "theorem", "congr", ["is_local_min"]], ["add", "theorem", "congr", ["is_local_min_on"]]]}]}, {"timestamp": 1596283701, "sha": "aa673157", "message": "chore(order/filter/bases): generalize `has_basis.restrict` (#3645)\nThe old lemma is renamed to `filter.has_basis.restrict_subset`", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "restrict", ["filter", "has_basis"]], ["add", "theorem", "restrict_subset", ["filter", "has_basis"]]]}]}, {"timestamp": 1596272789, "sha": "c6f33994", "message": "feat(topology/subset_properties): add `is_compact.induction_on` (#3642)", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "induction_on", ["is_compact"]]]}]}, {"timestamp": 1596222591, "sha": "37ab4263", "message": "feat(complete_lattice): put supr_congr and infi_congr back (#3646)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_congr", []], ["add", "theorem", "supr_congr", []]]}]}, {"timestamp": 1596217272, "sha": "7e570ed1", "message": "chore(*): assorted small lemmas (#3644)", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "trans_le", ["asymptotics", "is_o"]]]}, {"oldPath": "src/analysis/normed_space/indicator_function.lean", "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": [["add", "theorem", "nnnorm_indicator_eq_indicator_nnnorm", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_lt_top", ["ennreal"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "union_mem_sup", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "mono", ["filter", "is_bounded_under"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1596217270, "sha": "396a764f", "message": "feat(analysis/calculus/fderiv): inversion is differentiable (#3510)\nAt an invertible element `x` of a complete normed algebra, the inversion operation of the algebra is Fréchet-differentiable, with derivative `λ t, - x⁻¹ * t * x⁻¹`.", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["add", "theorem", "inverse_unit", ["ring"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_o_id_const", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "differentiable_at_inverse", []], ["add", "theorem", "fderiv_inverse", []], ["add", "theorem", "has_fderiv_at_inverse", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "summable_of_norm_bounded", []], ["add", "theorem", "tsum_of_norm_bounded", []]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": [["add", "theorem", "inverse_add", ["normed_ring"]], ["add", "theorem", "inverse_add_norm", ["normed_ring"]], ["add", "theorem", "inverse_add_norm_diff_first_order", ["normed_ring"]], ["add", "theorem", "inverse_add_norm_diff_nth_order", ["normed_ring"]], ["add", "theorem", "inverse_add_norm_diff_second_order", ["normed_ring"]], ["add", "theorem", "inverse_add_nth_order", ["normed_ring"]], ["add", "theorem", "inverse_continuous_at", ["normed_ring"]], ["add", "theorem", "inverse_one_sub", ["normed_ring"]], ["add", "theorem", "inverse_one_sub_norm", ["normed_ring"]], ["add", "theorem", "inverse_one_sub_nth_order", ["normed_ring"]], ["mod", "def", "add", ["units"]], ["mod", "theorem", "add_coe", ["units"]], ["mod", "theorem", "one_sub_coe", ["units"]], ["mod", "def", "unit_of_nearby", ["units"]], ["mod", "theorem", "unit_of_nearby_coe", ["units"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tsum_geometric_of_norm_lt_1", ["normed_ring"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "theorem", "mul_left_continuous", []], ["add", "theorem", "mul_right_continuous", []]]}]}, {"timestamp": 1596212016, "sha": "3ae893dc", "message": "fix(tactic/simps): do not reach unreachable code (#3637)\nFixes #3636", "changes": [{"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "structure", "needs_prop_class", []], ["add", "def", "test_prop_class", []]]}]}, {"timestamp": 1596149177, "sha": "f78a012d", "message": "feat(group_theory/subgroup): Add `mem_infi` and `coe_infi` (#3634)\nThese already existed for submonoid, but were not lifted to subgroup.\nAlso adds some missing `norm_cast` attributes to similar lemmas.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "coe_infi", ["subgroup"]], ["add", "theorem", "mem_infi", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}]}, {"timestamp": 1596145560, "sha": "985a56b1", "message": "ci(fetch_olean_cache.sh): error handling (#3628)\nPreviously, the CI would be interrupted if extracting the olean cache failed. After this PR, if that step fails, all oleans are deleted and then CI continues.\nI also changed the search for ancestor commits with caches to look for `.xz` files instead of `.gz` files, for consistency.", "changes": [{"oldPath": "scripts/fetch_olean_cache.sh", "newPath": "scripts/fetch_olean_cache.sh", "changes": []}]}, {"timestamp": 1596140217, "sha": "1a393e7a", "message": "feat(tactic/explode): support exploding \"let\" expressions and improve handling of \"have\" expressions (#3632)\nThe current #explode has little effect on proofs using \"let\" expressions, e.g., #explode nat.exists_infinite_primes. #explode also\noccasionally ignores certain dependencies due to macros occurring in \"have\" expressions. See examples below. This PR fixes these issues.\ntheorem foo {p q : Prop}: p → p :=\nλ hp, have hh : p, from hp, hh\n#explode foo -- missing dependencies at forall introduction\ntheorem bar {p q : Prop}: p → p :=\nλ hp, (λ (hh : p), hh) hp\n#explode bar -- expected behavior", "changes": [{"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}]}, {"timestamp": 1596131972, "sha": "43ccce55", "message": "feat(geometry): first stab on Lie groups (#3529)", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": [["add", "def", "left_mul", []], ["add", "def", "right_mul", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "prod_map", ["times_cont_diff"]], ["add", "theorem", "times_cont_diff_add", []], ["add", "theorem", "prod_map'", ["times_cont_diff_at"]], ["add", "theorem", "prod_map", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_at_fst", []], ["add", "theorem", "times_cont_diff_at_snd", []], ["add", "theorem", "times_cont_diff_neg", []], ["del", "theorem", "map_prod", ["times_cont_diff_on"]], ["add", "theorem", "prod_map", ["times_cont_diff_on"]], ["add", "theorem", "prod_map'", ["times_cont_diff_within_at"]], ["add", "theorem", "prod_map", ["times_cont_diff_within_at"]], ["add", "theorem", "times_cont_diff_within_at_fst", []], ["add", "theorem", "times_cont_diff_within_at_snd", []]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": null, "newPath": "src/geometry/algebra/lie_group.lean", "changes": [["add", "structure", "lie_add_group_core", []], ["add", "structure", "lie_add_group_morphism", []], ["add", "structure", "lie_group_core", []], ["add", "structure", "lie_group_morphism", []], ["add", "theorem", "inv", ["smooth"]], ["add", "theorem", "mul", ["smooth"]], ["add", "theorem", "smooth_inv", []], ["add", "theorem", "smooth_left_mul", []], ["add", "theorem", "smooth_mul", []], ["add", "theorem", "inv", ["smooth_on"]], ["add", "theorem", "mul", ["smooth_on"]], ["add", "theorem", "smooth_pow", []], ["add", "theorem", "smooth_right_mul", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "smooth_at_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "smooth_on_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "smooth_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "smooth_within_at_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "times_cont_mdiff_at_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "times_cont_mdiff_on_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "times_cont_mdiff_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "times_cont_mdiff_within_at_proj", ["basic_smooth_bundle_core"]], ["add", "theorem", "comp_smooth_on", ["smooth"]], ["add", "theorem", "prod_map", ["smooth"]], ["add", "theorem", "prod_mk", ["smooth"]], ["add", "theorem", "smooth_at", ["smooth"]], ["add", "theorem", "smooth_on", ["smooth"]], ["add", "theorem", "times_cont_mdiff", ["smooth"]], ["add", "def", "smooth", []], ["add", "theorem", "prod_map", ["smooth_at"]], ["add", "theorem", "prod_mk", ["smooth_at"]], ["add", "theorem", "smooth_within_at", ["smooth_at"]], ["add", "theorem", "times_cont_mdiff_at", ["smooth_at"]], ["add", "def", "smooth_at", []], ["add", "theorem", "smooth_at_const", []], ["add", "theorem", "smooth_at_fst", []], ["add", "theorem", "smooth_at_id", []], ["add", "theorem", "smooth_at_snd", []], ["add", "theorem", "smooth_at_univ", []], ["add", "theorem", "smooth_const", []], ["add", "theorem", "smooth_fst", []], ["add", "theorem", "smooth_id", []], ["add", "theorem", "smooth_iff", []], ["add", "theorem", "smooth_iff_proj_smooth", []], ["add", "theorem", "prod_map", ["smooth_on"]], ["add", "theorem", "prod_mk", ["smooth_on"]], ["add", "theorem", "times_cont_mdiff_on", ["smooth_on"]], ["add", "def", "smooth_on", []], ["add", "theorem", "smooth_on_const", []], ["add", "theorem", "smooth_on_fst", []], ["add", "theorem", "smooth_on_id", []], ["add", "theorem", "smooth_on_iff", []], ["add", "theorem", "smooth_on_snd", []], ["add", "theorem", "smooth_on_univ", []], ["add", "theorem", "smooth_snd", []], ["add", "theorem", "prod_map", ["smooth_within_at"]], ["add", "theorem", "prod_mk", ["smooth_within_at"]], ["add", "theorem", "smooth_at", ["smooth_within_at"]], ["add", "theorem", "times_cont_mdiff_within_at", ["smooth_within_at"]], ["add", "def", "smooth_within_at", []], ["add", "theorem", "smooth_within_at_const", []], ["add", "theorem", "smooth_within_at_fst", []], ["add", "theorem", "smooth_within_at_id", []], ["add", "theorem", "smooth_within_at_iff", []], ["add", "theorem", "smooth_within_at_snd", []], ["add", "theorem", "smooth_at_proj", ["tangent_bundle"]], ["add", "theorem", "smooth_on_proj", ["tangent_bundle"]], ["add", "theorem", "smooth_proj", ["tangent_bundle"]], ["add", "theorem", "smooth_within_at_proj", ["tangent_bundle"]], ["add", "theorem", "times_cont_mdiff_at_proj", ["tangent_bundle"]], ["add", "theorem", "times_cont_mdiff_on_proj", ["tangent_bundle"]], ["add", "theorem", "times_cont_mdiff_proj", ["tangent_bundle"]], ["add", "theorem", "times_cont_mdiff_within_at_proj", ["tangent_bundle"]], ["add", "theorem", "comp_times_cont_mdiff_on", ["times_cont_mdiff"]], ["add", "theorem", "prod_map", ["times_cont_mdiff"]], ["add", "theorem", "prod_mk", ["times_cont_mdiff"]], ["add", "theorem", "smooth", ["times_cont_mdiff"]], ["mod", "theorem", "comp", ["times_cont_mdiff_at"]], ["add", "theorem", "prod_map'", ["times_cont_mdiff_at"]], ["add", "theorem", "prod_map", ["times_cont_mdiff_at"]], ["add", "theorem", "prod_mk", ["times_cont_mdiff_at"]], ["add", "theorem", "smooth_at", ["times_cont_mdiff_at"]], ["add", "theorem", "times_cont_mdiff_at_fst", []], ["add", "theorem", "times_cont_mdiff_at_snd", []], ["add", "theorem", "times_cont_mdiff_fst", []], ["add", "theorem", "prod_map", ["times_cont_mdiff_on"]], ["add", "theorem", "prod_mk", ["times_cont_mdiff_on"]], ["add", "theorem", "smooth_on", ["times_cont_mdiff_on"]], ["add", "theorem", "times_cont_mdiff_on_fst", []], ["add", "theorem", "times_cont_mdiff_on_snd", []], ["add", "theorem", "times_cont_mdiff_snd", []], ["mod", "theorem", "comp'", ["times_cont_mdiff_within_at"]], ["mod", "theorem", "comp", ["times_cont_mdiff_within_at"]], ["add", "theorem", "prod_map'", ["times_cont_mdiff_within_at"]], ["add", "theorem", "prod_map", ["times_cont_mdiff_within_at"]], ["add", "theorem", "prod_mk", ["times_cont_mdiff_within_at"]], ["add", "theorem", "smooth_within_at", ["times_cont_mdiff_within_at"]], ["add", "theorem", "times_cont_mdiff_within_at_fst", []], ["add", "theorem", "times_cont_mdiff_within_at_iff", []], ["add", "theorem", "times_cont_mdiff_within_at_snd", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_on_fst", []], ["add", "theorem", "continuous_on_snd", []], ["add", "theorem", "continuous_within_at_fst", []], ["add", "theorem", "continuous_within_at_snd", []], ["add", "theorem", "nhds_within_prod", []]]}]}, {"timestamp": 1596117549, "sha": "77f3fa47", "message": "feat(tactic/interactive_expr): add copy button to type tooltip (#3633)\nThere should now be a 'copy expression' button in each tooltip which can\nbe used to copy the current expression to the clipboard.\n![image](https://user-images.githubusercontent.com/5064353/88916012-374ff580-d25d-11ea-8260-8149966fc84a.png)\nI have not tested on windows yet.\nAlso broke out `widget_override.goals_accomplished_message` so that\nusers can override it. For example:\n```\nmeta def my_new_msg {α : Type} : widget.html α := \"my message\"\nattribute [vm_override my_new_msg] widget_override.goals_accomplished_message\n```", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1596115080, "sha": "e7075b84", "message": "chore(topology/algebra/ordered): fix assumptions in some lemmas (#3629)\n* Some `nhds_within_I??_eq_nhds_within_I??` lemmas assumed strict\n inequalities when this was not needed.\n* Remove TFAEs that only stated equality of three `nhds_within`s.\n Prove equality of `nhds_within`s instead.\n* Genralize `I??_mem_nhds_within_I??` to `order_closed_topology`.", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "Icc_mem_nhds_within_Ici", []], ["mod", "theorem", "Icc_mem_nhds_within_Iic", []], ["mod", "theorem", "Icc_mem_nhds_within_Iio", []], ["mod", "theorem", "Ico_mem_nhds_within_Ici", []], ["mod", "theorem", "Ico_mem_nhds_within_Iic", []], ["mod", "theorem", "Ico_mem_nhds_within_Iio", []], ["mod", "theorem", "Ioc_mem_nhds_within_Iic", []], ["mod", "theorem", "Ioc_mem_nhds_within_Iio", []], ["mod", "theorem", "Ioo_mem_nhds_within_Iic", []], ["mod", "theorem", "Ioo_mem_nhds_within_Iio", []], ["mod", "theorem", "continuous_within_at_Icc_iff_Ici", []], ["mod", "theorem", "continuous_within_at_Icc_iff_Iic", []], ["mod", "theorem", "continuous_within_at_Ico_iff_Ici", []], ["mod", "theorem", "continuous_within_at_Ioc_iff_Iic", []], ["mod", "theorem", "continuous_within_at_Ioc_iff_Ioi", []], ["mod", "theorem", "continuous_within_at_Ioo_iff_Ioi", []], ["mod", "theorem", "nhds_within_Ico_eq_nhds_within_Ici", []], ["mod", "theorem", "nhds_within_Ioo_eq_nhds_within_Ioi", []], ["del", "theorem", "tfae_mem_nhds_within_Ici'", []], ["del", "theorem", "tfae_mem_nhds_within_Iic'", []], ["del", "theorem", "tfae_mem_nhds_within_Iio'", []], ["del", "theorem", "tfae_mem_nhds_within_Ioi'", []]]}]}, {"timestamp": 1596098505, "sha": "29d5f110", "message": "chore(algebra/group_with_zero): weaken assumptions in some lemmas (#3630)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "map_div", ["ring_hom"]], ["mod", "theorem", "map_inv", ["ring_hom"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "injective_iff", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "map_units_inv", ["monoid_hom"]]]}, {"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "injective_iff", ["ring_hom"]]]}]}, {"timestamp": 1596094496, "sha": "e1fa5cba", "message": "feat(linear_algebra): invariant basis number property (#3560)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "bot_ne_top", ["submodule"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/invariant_basis_number.lean", "changes": [["add", "theorem", "eq_of_fin_equiv", []], ["add", "theorem", "invariant_basis_number_field", []], ["add", "theorem", "nontrivial_of_invariant_basis_number", []]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "map_pi", ["ideal"]], ["add", "theorem", "mem_pi", ["ideal"]], ["add", "def", "pi", ["ideal"]]]}]}, {"timestamp": 1596087704, "sha": "03c302dc", "message": "feat(field_theory/fixed): field is separable over fixed subfield under group action (#3568)", "changes": [{"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "gcd_map", ["polynomial"]], ["add", "theorem", "is_coprime_map", ["polynomial"]], ["add", "theorem", "is_unit_map", ["polynomial"]]]}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "def", "is_separable", []], ["add", "theorem", "inj_of_prod_X_sub_C", ["polynomial", "separable"]], ["add", "theorem", "injective_of_prod_X_sub_C", ["polynomial", "separable"]], ["add", "theorem", "separable_X_sub_C", ["polynomial"]], ["add", "theorem", "separable_map", ["polynomial"]], ["add", "theorem", "separable_prod'", ["polynomial"]], ["add", "theorem", "separable_prod", ["polynomial"]], ["add", "theorem", "separable_prod_X_sub_C_iff'", ["polynomial"]], ["add", "theorem", "separable_prod_X_sub_C_iff", ["polynomial"]]]}]}, {"timestamp": 1596066504, "sha": "ef89e9af", "message": "feat(data/qpf): compositional data type framework for inductive / coinductive types (#3317)\nFirst milestone of the QPF project. Includes multivariate quotients of polynomial functors and compiler for coinductive types.\nNot included in this PR\n * nested inductive / coinductive data types\n * universe polymorphism with more than one variable\n * inductive / coinductive families\n * equation compiler\n * efficient byte code implementation\nThose are coming in future PRs", "changes": [{"oldPath": null, "newPath": "src/data/pfunctor/multivariate/M.lean", "changes": [["add", "theorem", "bisim'", ["mvpfunctor", "M"]], ["add", "theorem", "bisim", ["mvpfunctor", "M"]], ["add", "theorem", "bisim_lemma", ["mvpfunctor", "M"]], ["add", "theorem", "bisim₀", ["mvpfunctor", "M"]], ["add", "def", "corec'", ["mvpfunctor", "M"]], ["add", "def", "corec", ["mvpfunctor", "M"]], ["add", "def", "corec_contents", ["mvpfunctor", "M"]], ["add", "def", "corec_shape", ["mvpfunctor", "M"]], ["add", "def", "dest'", ["mvpfunctor", "M"]], ["add", "theorem", "dest'_eq_dest'", ["mvpfunctor", "M"]], ["add", "def", "dest", ["mvpfunctor", "M"]], ["add", "theorem", "dest_corec'", ["mvpfunctor", "M"]], ["add", "theorem", "dest_corec", ["mvpfunctor", "M"]], ["add", "theorem", "dest_eq_dest'", ["mvpfunctor", "M"]], ["add", "theorem", "dest_map", ["mvpfunctor", "M"]], ["add", "theorem", "map_dest", ["mvpfunctor", "M"]], ["add", "def", "mk", ["mvpfunctor", "M"]], ["add", "inductive", "path", ["mvpfunctor", "M"]], ["add", "def", "path_dest_left", ["mvpfunctor", "M"]], ["add", "def", "path_dest_right", ["mvpfunctor", "M"]], ["add", "def", "M", ["mvpfunctor"]], ["add", "def", "Mp", ["mvpfunctor"]], ["add", "def", "cast_dropB", ["mvpfunctor"]], ["add", "def", "cast_lastB", ["mvpfunctor"]]]}, {"oldPath": null, "newPath": "src/data/pfunctor/multivariate/W.lean", "changes": [["add", "def", "W", ["mvpfunctor"]], ["add", "theorem", "W_cases", ["mvpfunctor"]], ["add", "def", "W_dest'", ["mvpfunctor"]], ["add", "theorem", "W_dest'_W_mk'", ["mvpfunctor"]], ["add", "theorem", "W_dest'_W_mk", ["mvpfunctor"]], ["add", "theorem", "W_ind", ["mvpfunctor"]], ["add", "def", "W_map", ["mvpfunctor"]], ["add", "theorem", "W_map_W_mk", ["mvpfunctor"]], ["add", "def", "W_mk'", ["mvpfunctor"]], ["add", "def", "W_mk", ["mvpfunctor"]], ["add", "theorem", "W_mk_eq", ["mvpfunctor"]], ["add", "inductive", "W_path", ["mvpfunctor"]], ["add", "def", "W_path_cases_on", ["mvpfunctor"]], ["add", "theorem", "W_path_cases_on_eta", ["mvpfunctor"]], ["add", "def", "W_path_dest_left", ["mvpfunctor"]], ["add", "theorem", "W_path_dest_left_W_path_cases_on", ["mvpfunctor"]], ["add", "def", "W_path_dest_right", ["mvpfunctor"]], ["add", "theorem", "W_path_dest_right_W_path_cases_on", ["mvpfunctor"]], ["add", "def", "W_rec", ["mvpfunctor"]], ["add", "theorem", "W_rec_eq", ["mvpfunctor"]], ["add", "def", "Wp", ["mvpfunctor"]], ["add", "theorem", "Wp_ind", ["mvpfunctor"]], ["add", "def", "Wp_mk", ["mvpfunctor"]], ["add", "def", "Wp_rec", ["mvpfunctor"]], ["add", "theorem", "Wp_rec_eq", ["mvpfunctor"]], ["add", "theorem", "comp_W_path_cases_on", ["mvpfunctor"]], ["add", "theorem", "map_obj_append1", ["mvpfunctor"]], ["add", "def", "obj_append1", ["mvpfunctor"]]]}, {"oldPath": "src/data/pfunctor/multivariate/basic.lean", "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": []}, {"oldPath": "src/data/pfunctor/univariate/M.lean", "newPath": "src/data/pfunctor/univariate/M.lean", "changes": [["del", "theorem", "R_is_bisimulation", ["pfunctor", "M"]], ["del", "theorem", "coinduction'", ["pfunctor", "M"]], ["del", "theorem", "coinduction", ["pfunctor", "M"]]]}, {"oldPath": "src/data/qpf/multivariate/basic.lean", "newPath": "src/data/qpf/multivariate/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/constructions/cofix.lean", "changes": [["add", "def", "Mcongr", ["mvqpf"]], ["add", "def", "Mrepr", ["mvqpf"]], ["add", "def", "abs", ["mvqpf", "cofix"]], ["add", "theorem", "abs_repr", ["mvqpf", "cofix"]], ["add", "theorem", "bisim'", ["mvqpf", "cofix"]], ["add", "theorem", "bisim", ["mvqpf", "cofix"]], ["add", "theorem", "bisim_rel", ["mvqpf", "cofix"]], ["add", "theorem", "bisim₂", ["mvqpf", "cofix"]], ["add", "def", "corec'", ["mvqpf", "cofix"]], ["add", "def", "corec'₁", ["mvqpf", "cofix"]], ["add", "def", "corec", ["mvqpf", "cofix"]], ["add", "def", "corec₁", ["mvqpf", "cofix"]], ["add", "def", "dest", ["mvqpf", "cofix"]], ["add", "theorem", "dest_corec'", ["mvqpf", "cofix"]], ["add", "theorem", "dest_corec", ["mvqpf", "cofix"]], ["add", "theorem", "dest_corec₁", ["mvqpf", "cofix"]], ["add", "theorem", "dest_mk", ["mvqpf", "cofix"]], ["add", "theorem", "ext", ["mvqpf", "cofix"]], ["add", "theorem", "ext_mk", ["mvqpf", "cofix"]], ["add", "def", "map", ["mvqpf", "cofix"]], ["add", "def", "mk", ["mvqpf", "cofix"]], ["add", "theorem", "mk_dest", ["mvqpf", "cofix"]], ["add", "def", "repr", ["mvqpf", "cofix"]], ["add", "def", "cofix", ["mvqpf"]], ["add", "def", "corecF", ["mvqpf"]], ["add", "theorem", "corecF_eq", ["mvqpf"]], ["add", "theorem", "corec_roll", ["mvqpf"]], ["add", "def", "is_precongr", ["mvqpf"]], ["add", "theorem", "liftr_map", ["mvqpf"]], ["add", "theorem", "liftr_map_last'", ["mvqpf"]], ["add", "theorem", "liftr_map_last", ["mvqpf"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/constructions/comp.lean", "changes": [["add", "theorem", "get_map", ["mvqpf", "comp"]], ["add", "theorem", "map_mk", ["mvqpf", "comp"]], ["add", "def", "comp", ["mvqpf"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/constructions/const.lean", "changes": [["add", "theorem", "get_map", ["mvqpf", "const"]], ["add", "theorem", "map_mk", ["mvqpf", "const"]], ["add", "def", "const", ["mvqpf"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/constructions/fix.lean", "changes": [["add", "def", "W_setoid", ["mvqpf"]], ["add", "theorem", "abs'", ["mvqpf", "Wequiv"]], ["add", "theorem", "refl", ["mvqpf", "Wequiv"]], ["add", "theorem", "symm", ["mvqpf", "Wequiv"]], ["add", "inductive", "Wequiv", ["mvqpf"]], ["add", "theorem", "Wequiv_map", ["mvqpf"]], ["add", "def", "Wrepr", ["mvqpf"]], ["add", "theorem", "Wrepr_W_mk", ["mvqpf"]], ["add", "theorem", "Wrepr_equiv", ["mvqpf"]], ["add", "def", "dest", ["mvqpf", "fix"]], ["add", "theorem", "dest_mk", ["mvqpf", "fix"]], ["add", "def", "drec", ["mvqpf", "fix"]], ["add", "theorem", "ind", ["mvqpf", "fix"]], ["add", "theorem", "ind_aux", ["mvqpf", "fix"]], ["add", "theorem", "ind_rec", ["mvqpf", "fix"]], ["add", "def", "map", ["mvqpf", "fix"]], ["add", "def", "mk", ["mvqpf", "fix"]], ["add", "theorem", "mk_dest", ["mvqpf", "fix"]], ["add", "def", "rec", ["mvqpf", "fix"]], ["add", "theorem", "rec_eq", ["mvqpf", "fix"]], ["add", "theorem", "rec_unique", ["mvqpf", "fix"]], ["add", "def", "fix", ["mvqpf"]], ["add", "def", "fix_to_W", ["mvqpf"]], ["add", "def", "recF", ["mvqpf"]], ["add", "theorem", "recF_eq'", ["mvqpf"]], ["add", "theorem", "recF_eq", ["mvqpf"]], ["add", "theorem", "recF_eq_of_Wequiv", ["mvqpf"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/constructions/prj.lean", "changes": [["add", "def", "P", ["mvqpf", "prj"]], ["add", "def", "abs", ["mvqpf", "prj"]], ["add", "def", "map", ["mvqpf", "prj"]], ["add", "def", "repr", ["mvqpf", "prj"]], ["add", "def", "prj", ["mvqpf"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/constructions/quot.lean", "changes": [["add", "def", "map", ["mvqpf", "quot1"]], ["add", "def", "mvfunctor", ["mvqpf", "quot1"]], ["add", "def", "quot1", ["mvqpf"]], ["add", "def", "quotient_qpf", ["mvqpf"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/constructions/sigma.lean", "changes": [["add", "def", "pi", ["mvqpf"]], ["add", "def", "sigma", ["mvqpf"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/default.lean", "changes": []}, {"oldPath": "src/data/typevec.lean", "newPath": "src/data/typevec.lean", "changes": [["add", "theorem", "drop_fun_diag", ["typevec"]], ["add", "theorem", "drop_fun_from_append1_drop_last", ["typevec"]], ["add", "theorem", "drop_fun_id", ["typevec"]], ["add", "theorem", "drop_fun_of_subtype", ["typevec"]], ["add", "theorem", "drop_fun_prod", ["typevec"]], ["add", "theorem", "drop_fun_rel_last", ["typevec"]], ["add", "theorem", "drop_fun_subtype_val", ["typevec"]], ["add", "theorem", "drop_fun_to_subtype", ["typevec"]], ["add", "def", "from_append1_drop_last", ["typevec"]], ["add", "theorem", "last_fun_from_append1_drop_last", ["typevec"]], ["add", "theorem", "last_fun_of_subtype", ["typevec"]], ["add", "theorem", "last_fun_prod", ["typevec"]], ["add", "theorem", "last_fun_subtype_val", ["typevec"]], ["add", "theorem", "last_fun_to_subtype", ["typevec"]], ["add", "theorem", "prod_map_id", ["typevec"]], ["add", "theorem", "subtype_val_diag_sub", ["typevec"]], ["add", "theorem", "to_subtype_of_subtype", ["typevec"]], ["add", "theorem", "to_subtype_of_subtype_assoc", ["typevec"]]]}]}, {"timestamp": 1596071649, "sha": "4985ad55", "message": "Revert \"feat(topology): path connected spaces\"\nThis reverts commit 9208c2bd1f6c8dedc0cd1646dd107842f05b0b0c.", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["del", "theorem", "to_has_basis", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/path_connected.lean", "newPath": null, "changes": [["del", "def", "I_extend", []], ["del", "theorem", "I_extend_extends", []], ["del", "theorem", "I_extend_one", []], ["del", "theorem", "I_extend_range", []], ["del", "theorem", "I_extend_zero", []], ["del", "def", "I_symm", []], ["del", "theorem", "I_symm_one", []], ["del", "theorem", "I_symm_zero", []], ["del", "theorem", "Icc_zero_one_symm", []], ["del", "theorem", "Iic_def", []], ["del", "theorem", "coe_I_one", []], ["del", "theorem", "coe_I_zero", []], ["del", "theorem", "I_extend", ["continuous"]], ["del", "theorem", "continuous_I_symm", []], ["del", "theorem", "continuous_proj_I", []], ["del", "theorem", "is_connected_iff_is_path_connected", ["is_open"]], ["del", "theorem", "image", ["is_path_connected"]], ["del", "theorem", "joined_in", ["is_path_connected"]], ["del", "theorem", "mem_path_component", ["is_path_connected"]], ["del", "theorem", "preimage_coe", ["is_path_connected"]], ["del", "theorem", "subset_path_component", ["is_path_connected"]], ["del", "theorem", "union", ["is_path_connected"]], ["del", "def", "is_path_connected", []], ["del", "theorem", "is_path_connected_iff", []], ["del", "theorem", "is_path_connected_iff_eq", []], ["del", "theorem", "is_path_connected_iff_path_connected_space", []], ["del", "theorem", "continuous_extend", ["joined"]], ["del", "def", "extend", ["joined"]], ["del", "theorem", "extend_one", ["joined"]], ["del", "theorem", "extend_zero", ["joined"]], ["del", "theorem", "mem_path_component", ["joined"]], ["del", "theorem", "refl", ["joined"]], ["del", "theorem", "symm", ["joined"]], ["del", "theorem", "trans", ["joined"]], ["del", "def", "joined", []], ["del", "theorem", "continuous_extend", ["joined_in"]], ["del", "theorem", "continuous_map", ["joined_in"]], ["del", "def", "extend", ["joined_in"]], ["del", "def", "extend_map", ["joined_in"]], ["del", "theorem", "extend_map_continuous", ["joined_in"]], ["del", "theorem", "extend_map_one", ["joined_in"]], ["del", "theorem", "extend_map_zero", ["joined_in"]], ["del", "theorem", "extend_one", ["joined_in"]], ["del", "theorem", "extend_zero", ["joined_in"]], ["del", "theorem", "joined", ["joined_in"]], ["del", "def", "map", ["joined_in"]], ["del", "theorem", "map_one", ["joined_in"]], ["del", "theorem", "map_zero", ["joined_in"]], ["del", "theorem", "mem", ["joined_in"]], ["del", "theorem", "mono", ["joined_in"]], ["del", "theorem", "refl", ["joined_in"]], ["del", "theorem", "symm", ["joined_in"]], ["del", "theorem", "trans", ["joined_in"]], ["del", "def", "joined_in", []], ["del", "theorem", "joined_in_iff_joined", []], ["del", "theorem", "joined_in_univ", []], ["del", "theorem", "loc_path_connected_of_bases", []], ["del", "theorem", "loc_path_connected_of_is_open", []], ["del", "theorem", "mem_path_component_of_mem", []], ["del", "theorem", "mem_path_component_self", []], ["del", "theorem", "nonempty", ["path_component"]], ["del", "def", "path_component", []], ["del", "theorem", "path_component_congr", []], ["del", "def", "path_component_in", []], ["del", "theorem", "path_component_in_univ", []], ["del", "theorem", "path_component_subset_component", []], ["del", "theorem", "path_component_symm", []], ["del", "theorem", "continuous_path", ["path_connected_space"]], ["del", "def", "path", ["path_connected_space"]], ["del", "theorem", "path_one", ["path_connected_space"]], ["del", "theorem", "path_zero", ["path_connected_space"]], ["del", "theorem", "path_connected_space_iff_connected_space", []], ["del", "theorem", "path_connected_space_iff_eq", []], ["del", "theorem", "path_connected_space_iff_univ", []], ["del", "theorem", "path_connected_subset_basis", []], ["del", "def", "proj_I", []], ["del", "theorem", "proj_I_I", []], ["del", "theorem", "range_proj_I", []]]}]}, {"timestamp": 1596071576, "sha": "9208c2bd", "message": "feat(topology): path connected spaces", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "to_has_basis", ["filter", "has_basis"]]]}, {"oldPath": null, "newPath": "src/topology/path_connected.lean", "changes": [["add", "def", "I_extend", []], ["add", "theorem", "I_extend_extends", []], ["add", "theorem", "I_extend_one", []], ["add", "theorem", "I_extend_range", []], ["add", "theorem", "I_extend_zero", []], ["add", "def", "I_symm", []], ["add", "theorem", "I_symm_one", []], ["add", "theorem", "I_symm_zero", []], ["add", "theorem", "Icc_zero_one_symm", []], ["add", "theorem", "Iic_def", []], ["add", "theorem", "coe_I_one", []], ["add", "theorem", "coe_I_zero", []], ["add", "theorem", "I_extend", ["continuous"]], ["add", "theorem", "continuous_I_symm", []], ["add", "theorem", "continuous_proj_I", []], ["add", "theorem", "is_connected_iff_is_path_connected", ["is_open"]], ["add", "theorem", "image", ["is_path_connected"]], ["add", "theorem", "joined_in", ["is_path_connected"]], ["add", "theorem", "mem_path_component", ["is_path_connected"]], ["add", "theorem", "preimage_coe", ["is_path_connected"]], ["add", "theorem", "subset_path_component", ["is_path_connected"]], ["add", "theorem", "union", ["is_path_connected"]], ["add", "def", "is_path_connected", []], ["add", "theorem", "is_path_connected_iff", []], ["add", "theorem", "is_path_connected_iff_eq", []], ["add", "theorem", "is_path_connected_iff_path_connected_space", []], ["add", "theorem", "continuous_extend", ["joined"]], ["add", "def", "extend", ["joined"]], ["add", "theorem", "extend_one", ["joined"]], ["add", "theorem", "extend_zero", ["joined"]], ["add", "theorem", "mem_path_component", ["joined"]], ["add", "theorem", "refl", ["joined"]], ["add", "theorem", "symm", ["joined"]], ["add", "theorem", "trans", ["joined"]], ["add", "def", "joined", []], ["add", "theorem", "continuous_extend", ["joined_in"]], ["add", "theorem", "continuous_map", ["joined_in"]], ["add", "def", "extend", ["joined_in"]], ["add", "def", "extend_map", ["joined_in"]], ["add", "theorem", "extend_map_continuous", ["joined_in"]], ["add", "theorem", "extend_map_one", ["joined_in"]], ["add", "theorem", "extend_map_zero", ["joined_in"]], ["add", "theorem", "extend_one", ["joined_in"]], ["add", "theorem", "extend_zero", ["joined_in"]], ["add", "theorem", "joined", ["joined_in"]], ["add", "def", "map", ["joined_in"]], ["add", "theorem", "map_one", ["joined_in"]], ["add", "theorem", "map_zero", ["joined_in"]], ["add", "theorem", "mem", ["joined_in"]], ["add", "theorem", "mono", ["joined_in"]], ["add", "theorem", "refl", ["joined_in"]], ["add", "theorem", "symm", ["joined_in"]], ["add", "theorem", "trans", ["joined_in"]], ["add", "def", "joined_in", []], ["add", "theorem", "joined_in_iff_joined", []], ["add", "theorem", "joined_in_univ", []], ["add", "theorem", "loc_path_connected_of_bases", []], ["add", "theorem", "loc_path_connected_of_is_open", []], ["add", "theorem", "mem_path_component_of_mem", []], ["add", "theorem", "mem_path_component_self", []], ["add", "theorem", "nonempty", ["path_component"]], ["add", "def", "path_component", []], ["add", "theorem", "path_component_congr", []], ["add", "def", "path_component_in", []], ["add", "theorem", "path_component_in_univ", []], ["add", "theorem", "path_component_subset_component", []], ["add", "theorem", "path_component_symm", []], ["add", "theorem", "continuous_path", ["path_connected_space"]], ["add", "def", "path", ["path_connected_space"]], ["add", "theorem", "path_one", ["path_connected_space"]], ["add", "theorem", "path_zero", ["path_connected_space"]], ["add", "theorem", "path_connected_space_iff_connected_space", []], ["add", "theorem", "path_connected_space_iff_eq", []], ["add", "theorem", "path_connected_space_iff_univ", []], ["add", "theorem", "path_connected_subset_basis", []], ["add", "def", "proj_I", []], ["add", "theorem", "proj_I_I", []], ["add", "theorem", "range_proj_I", []]]}]}, {"timestamp": 1596059421, "sha": "86c83c3f", "message": "feat(topology): two missing connectedness lemmas (#3626)\nFrom the sphere eversion project.", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_connected_iff_connected_space", []], ["add", "theorem", "is_preconnected_iff_preconnected_space", []]]}]}, {"timestamp": 1596055096, "sha": "ebeeee7f", "message": "feat(filters): a couple more lemmas (#3625)\nRandom lemmas gathered while thinking about https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/nhds_left.20and.20nhds_right", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "union_distrib_Inter_left", ["set"]], ["add", "theorem", "union_distrib_Inter_right", ["set"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "ext", ["filter", "has_basis"]], ["add", "theorem", "sup", ["filter", "has_basis"]], ["add", "theorem", "has_basis_binfi_principal'", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "binfi_sup_left", ["filter"]], ["add", "theorem", "binfi_sup_right", ["filter"]], ["del", "theorem", "infi_sup_eq", ["filter"]], ["add", "theorem", "infi_sup_left", ["filter"]], ["add", "theorem", "infi_sup_right", ["filter"]]]}]}, {"timestamp": 1596031124, "sha": "652fb2e6", "message": "chore(doc/*): add README files (#3623)", "changes": [{"oldPath": null, "newPath": "docs/README.md", "changes": []}, {"oldPath": null, "newPath": "docs/contribute/README.md", "changes": []}, {"oldPath": null, "newPath": "docs/extras/README.md", "changes": []}, {"oldPath": null, "newPath": "docs/install/README.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/README.md", "changes": []}]}, {"timestamp": 1596023151, "sha": "37e13a01", "message": "feat(tactic/lint): quieter output by default (#3622)\n* The behavior of `lint-` hasn't changed.\n* `lint` will now suppress the output of successful checks. If everything succeeds, it will print \"All linting checks passed!\"\n* `lint+` behaves like the old `lint`. It prints a confirmation for each test.\nZulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/quiet.20linter", "changes": [{"oldPath": "scripts/lint_mathlib.lean", "newPath": "scripts/lint_mathlib.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/frontend.lean", "newPath": "src/tactic/lint/frontend.lean", "changes": [["add", "inductive", "lint_verbosity", []]]}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1596021576, "sha": "b0d1d17e", "message": "feat(data/ulift): add `monad ulift` and `monad plift` (#3588)\nWe add `functor`/`applicative`/`monad` instances for `ulift` and `plift`.", "changes": [{"oldPath": "src/data/ulift.lean", "newPath": "src/data/ulift.lean", "changes": [["mod", "theorem", "constant", ["plift", "rec"]], ["mod", "theorem", "constant", ["ulift", "rec"]]]}]}, {"timestamp": 1596010871, "sha": "80f2762c", "message": "feat(topology): assorted topological lemmas (#3619)\nfrom the sphere eversion project", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "union_diff_cancel'", ["set"]], ["add", "theorem", "preimage_coe_nonempty", ["subtype"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "ex_mem", ["filter", "has_basis"]], ["add", "theorem", "has_basis_self_subset", ["filter", "has_basis"]], ["add", "theorem", "restrict", ["filter", "has_basis"]], ["add", "theorem", "has_basis_iff", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "image_coe_mem_sets", ["filter"]], ["add", "theorem", "image_mem_sets", ["filter"]], ["add", "theorem", "not_ne_bot", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_eq_interior_union_frontier", []], ["add", "theorem", "closure_eq_self_union_frontier", []], ["add", "theorem", "is_closed_iff_nhds", []]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "continuous_induced_rng'", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "def", "connected_component_in", []], ["add", "theorem", "connected_space_iff_connected_component", []], ["add", "theorem", "eq_univ_of_nonempty_clopen", []], ["add", "theorem", "is_connected_range", []]]}]}, {"timestamp": 1595982948, "sha": "e14ba7b0", "message": "chore(scripts): update nolints.txt (#3620)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1595978703, "sha": "e2452546", "message": "feat(category_theory/monoidal): λ_ (𝟙_ C) = ρ_ (𝟙_ C) (#3556)\nThe incredibly tedious proof from the axioms that `λ_ (𝟙_ C) = ρ_ (𝟙_ C)` in any monoidal category.\nOne would hope that it falls out from a coherence theorem, but we're not close to having one, and I suspect that this result might be a step in any proof.", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "left_unitor_conjugation", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_conjugation", ["category_theory", "monoidal_category"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/unitors.lean", "changes": [["add", "theorem", "cells_10_13", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_14", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_15", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_1_2", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_1_4", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_1_7", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_3_4", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_4'", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_4", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_5_6", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_6'", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_6", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_7", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_8", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_9", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "cells_9_13", ["category_theory", "monoidal_category", "unitors_equal"]], ["add", "theorem", "unitors_equal", ["category_theory", "monoidal_category"]]]}]}, {"timestamp": 1595974128, "sha": "2e6c488c", "message": "chore(order/complete_lattice): use `Prop` args in `infi_inf` etc (#3611)\nThis way one can `rw binfi_inf` first, then prove `∃ i, p i`.\nAlso move some code up to make it available near `infi_inf`.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "binfi_inf", []], ["mod", "theorem", "inf_infi", []], ["mod", "theorem", "infi_inf", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "prod_infi_left", ["filter"]], ["mod", "theorem", "prod_infi_right", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}]}, {"timestamp": 1595972011, "sha": "aafc4861", "message": "feat(topology/ordered): intervals frontiers (#3617)\nfrom the sphere eversion project", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "closure_Icc", []], ["add", "theorem", "closure_Ici", []], ["mod", "theorem", "closure_Ico", []], ["add", "theorem", "closure_Iic", []], ["mod", "theorem", "closure_Iio", []], ["mod", "theorem", "closure_Ioc", []], ["mod", "theorem", "closure_Ioi", []], ["mod", "theorem", "closure_Ioo", []], ["add", "theorem", "frontier_Icc", []], ["add", "theorem", "frontier_Ici", []], ["add", "theorem", "frontier_Ico", []], ["add", "theorem", "frontier_Iic", []], ["add", "theorem", "frontier_Iio", []], ["add", "theorem", "frontier_Ioc", []], ["add", "theorem", "frontier_Ioi", []], ["add", "theorem", "frontier_Ioo", []]]}]}, {"timestamp": 1595969139, "sha": "5cd6eeb9", "message": "chore(ci): only store oleans in azure cache (#3616)", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/fetch_olean_cache.sh", "newPath": "scripts/fetch_olean_cache.sh", "changes": []}]}, {"timestamp": 1595967164, "sha": "4ae8752c", "message": "chore(data/mv_polynomial): use bundled homs (#3595)\nI've done a lot of the scut work, but there are still about half a dozen broken proofs, if anyone would like to take a bash at them!", "changes": [{"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "coeff_map", ["mv_polynomial"]], ["mod", "def", "eval", ["mv_polynomial"]], ["mod", "theorem", "eval_C", ["mv_polynomial"]], ["mod", "theorem", "eval_X", ["mv_polynomial"]], ["del", "theorem", "eval_add", ["mv_polynomial"]], ["mod", "theorem", "eval_monomial", ["mv_polynomial"]], ["del", "theorem", "eval_mul", ["mv_polynomial"]], ["del", "theorem", "eval_neg", ["mv_polynomial"]], ["del", "theorem", "eval_one", ["mv_polynomial"]], ["del", "theorem", "eval_pow", ["mv_polynomial"]], ["del", "theorem", "eval_sub", ["mv_polynomial"]], ["del", "theorem", "eval_zero", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_X", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_congr", ["mv_polynomial"]], ["mod", "theorem", "eval₂_neg", ["mv_polynomial"]], ["mod", "theorem", "eval₂_rename", ["mv_polynomial"]], ["mod", "theorem", "eval₂_sub", ["mv_polynomial"]], ["mod", "def", "map", ["mv_polynomial"]], ["del", "theorem", "map_add", ["mv_polynomial"]], ["del", "theorem", "map_mul", ["mv_polynomial"]], ["del", "theorem", "map_neg", ["mv_polynomial"]], ["del", "theorem", "map_one", ["mv_polynomial"]], ["del", "theorem", "map_pow", ["mv_polynomial"]], ["del", "theorem", "map_sub", ["mv_polynomial"]], ["mod", "def", "rename", ["mv_polynomial"]], ["del", "theorem", "rename_add", ["mv_polynomial"]], ["del", "theorem", "rename_mul", ["mv_polynomial"]], ["del", "theorem", "rename_neg", ["mv_polynomial"]], ["del", "theorem", "rename_one", ["mv_polynomial"]], ["del", "theorem", "rename_pow", ["mv_polynomial"]], ["del", "theorem", "rename_sub", ["mv_polynomial"]], ["del", "theorem", "rename_zero", ["mv_polynomial"]], ["mod", "theorem", "smul_eval", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/chevalley_warning.lean", "newPath": "src/field_theory/chevalley_warning.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["mod", "theorem", "evalₗ_apply", ["mv_polynomial"]], ["mod", "theorem", "map_range_eq_map", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1595964676, "sha": "b7655704", "message": "chore(topology): rename interior_eq_of_open (#3614)\nThis allows to use dot notation and is more consistent with\nits closed twin is_closed.closure_eq", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "interior_eq_of_open", []], ["add", "theorem", "interior_eq", ["is_open"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1595957702, "sha": "9f51e336", "message": "feat(measure_theory/measurable_space): introduce `filter.is_measurably_generated` (#3594)\nSometimes I want to extract an `is_measurable` witness of a `filter.eventually` statement.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "nhds_within_is_measurably_generated", ["is_measurable"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "exists_measurable_mem", ["filter", "eventually"]], ["add", "theorem", "principal_is_measurably_generated_iff", ["filter"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}]}, {"timestamp": 1595957700, "sha": "7236938c", "message": "feat(measure_theory/measure_space): add `count_apply_infinite` (#3592)\nAlso add some supporting lemmas about `set.infinite`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "exists_subset_card_eq", ["infinite"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_subset_card_eq", ["set", "infinite"]], ["add", "theorem", "to_subtype", ["set", "infinite"]], ["add", "theorem", "infinite_coe_iff", ["set"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "count_apply_eq_top", ["measure_theory", "measure"]], ["add", "theorem", "count_apply_finite", ["measure_theory", "measure"]], ["add", "theorem", "count_apply_infinite", ["measure_theory", "measure"]], ["add", "theorem", "count_apply_lt_top", ["measure_theory", "measure"]]]}]}, {"timestamp": 1595955726, "sha": "f6f6f8aa", "message": "feat(linear_algebra/affine_space): more affine subspace lemmas (#3552)\nAdd more lemmas on affine subspaces that came up in the course of\nproving existence and uniqueness of the circumcenter of a simplex in a\nEuclidean space.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vsub_set_singleton", ["add_torsor"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "vector_span_singleton", ["affine_space"]], ["add", "theorem", "coe_affine_span_singleton", ["affine_subspace"]], ["add", "theorem", "direction_affine_span_insert", ["affine_subspace"]], ["add", "theorem", "direction_sup", ["affine_subspace"]], ["add", "theorem", "mem_affine_span_insert_iff", ["affine_subspace"]]]}]}, {"timestamp": 1595950251, "sha": "7848f28d", "message": "feat(category_theory): Mon_ (Type u) ≌ Mon.{u} (#3562)\nVerifying that internal monoid objects in Type are the same thing as bundled monoid objects.", "changes": [{"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/types.lean", "changes": [["add", "theorem", "prod", ["category_theory", "limits", "types"]], ["add", "theorem", "prod_fst", ["category_theory", "limits", "types"]], ["add", "theorem", "prod_lift", ["category_theory", "limits", "types"]], ["add", "theorem", "prod_map", ["category_theory", "limits", "types"]], ["add", "theorem", "prod_snd", ["category_theory", "limits", "types"]], ["add", "theorem", "terminal", ["category_theory", "limits", "types"]], ["add", "theorem", "terminal_from", ["category_theory", "limits", "types"]], ["add", "def", "types_has_binary_products", ["category_theory", "limits", "types"]], ["add", "def", "types_has_products", ["category_theory", "limits", "types"]], ["add", "def", "types_has_terminal", ["category_theory", "limits", "types"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/internal.lean", "changes": [["add", "theorem", "assoc_flip", ["Mod"]], ["add", "def", "comap", ["Mod"]], ["add", "def", "comp", ["Mod"]], ["add", "theorem", "comp_hom'", ["Mod"]], ["add", "structure", "hom", ["Mod"]], ["add", "def", "id", ["Mod"]], ["add", "theorem", "id_hom'", ["Mod"]], ["add", "def", "regular", ["Mod"]], ["add", "structure", "Mod", []], ["add", "theorem", "assoc_flip", ["Mon_"]], ["add", "def", "comp", ["Mon_"]], ["add", "theorem", "comp_hom'", ["Mon_"]], ["add", "def", "forget", ["Mon_"]], ["add", "structure", "hom", ["Mon_"]], ["add", "def", "id", ["Mon_"]], ["add", "theorem", "id_hom'", ["Mon_"]], ["add", "structure", "Mon_", []]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/internal/types.lean", "changes": [["add", "def", "functor", ["Mon_Type_equivalence_Mon"]], ["add", "def", "inverse", ["Mon_Type_equivalence_Mon"]], ["add", "def", "Mon_Type_equivalence_Mon", []], ["add", "def", "Mon_Type_equivalence_Mon_forget", []]]}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": [["add", "theorem", "associator_hom_apply", ["category_theory", "monoidal"]], ["add", "theorem", "associator_inv_apply", ["category_theory", "monoidal"]], ["add", "theorem", "left_unitor_hom_apply", ["category_theory", "monoidal"]], ["add", "theorem", "left_unitor_inv_apply", ["category_theory", "monoidal"]], ["add", "theorem", "right_unitor_hom_apply", ["category_theory", "monoidal"]], ["add", "theorem", "right_unitor_inv_apply", ["category_theory", "monoidal"]], ["add", "theorem", "tensor_apply", ["category_theory", "monoidal"]]]}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": [["add", "theorem", "ext", ["punit"]], ["add", "theorem", "ext", ["unit"]]]}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": [["del", "theorem", "ext", ["unit"]]]}]}, {"timestamp": 1595946039, "sha": "9e841c81", "message": "feat(data/list/basic): add a proof that `(a :: l) ≠ l` (#3584)\n`list.cons_ne_self` is motivated by the existence of `nat.succ_ne_self`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "cons_ne_self", ["list"]]]}]}, {"timestamp": 1595943908, "sha": "f1dfece4", "message": "feat(linear_algebra/affine_space): bundled affine independent families (#3561)\nDefine `affine_space.simplex` as `n + 1` affine independent points,\nwith the specific case of `affine_space.triangle`. I expect most\ndefinitions and results for these types (such as `circumcenter` and\n`circumradius`, which I'm currently working on) will be specific to\nthe case of Euclidean affine spaces, but some make sense in a more\ngeneral affine space context.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "def", "mk_of_point", ["affine_space", "simplex"]], ["add", "theorem", "mk_of_point_points", ["affine_space", "simplex"]], ["add", "structure", "simplex", ["affine_space"]], ["add", "def", "triangle", ["affine_space"]]]}]}, {"timestamp": 1595936878, "sha": "5a876cab", "message": "feat(category_theory): monoidal_category (C ⥤ C) (#3557)", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/End.lean", "changes": [["add", "def", "endofunctor_monoidal_category", ["category_theory"]], ["add", "def", "tensoring_right_monoidal", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "def", "tensoring_right", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["add", "theorem", "map_left_unitor", ["category_theory", "monoidal_functor"]], ["add", "theorem", "map_right_unitor", ["category_theory", "monoidal_functor"]], ["add", "theorem", "map_tensor", ["category_theory", "monoidal_functor"]]]}]}, {"timestamp": 1595931712, "sha": "be99e535", "message": "chore(ci): remove unused build step (#3607)", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1595931710, "sha": "f1ad7a8b", "message": "docs(topology/sheaves): better docs for presheaf (#3596)\nAdd module doc-strings to two files.", "changes": [{"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}]}, {"timestamp": 1595931708, "sha": "35f1f637", "message": "doc(topology/basic): docstrings for nhds and a few related lemmas (#3548)\n`nhds` was the only `def` in the file which didn't have an explanation, so I documented it.\nI also went ahead and documented a few related lemmas which I felt were worth calling out.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1595928432, "sha": "037821b8", "message": "chore(category_theory/limits/types): remove simp lemmas (#3604)\nNo one wants to see how the sausage is being made.\nOr at least, no one wants `simp` to show you without asking.", "changes": [{"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["mod", "theorem", "types_colimit", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_colimit_desc", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_colimit_map", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_colimit_pre", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_colimit_ι", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit_lift", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit_map", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit_pre", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit_π", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1595928430, "sha": "a574db13", "message": "refactor(algebra/category/*/limits): refactor concrete limits (#3463)\nWe used to construct categorical limits for `AddCommGroup` and `CommRing`.\nNow we construct them for\n* `(Add)(Comm)Mon`\n* `(Add)(Comm)Group`\n* `(Comm)(Semi)Ring`\n* `Module R`\n* `Algebra R`\nEven better, we reuse structure along the way, and show that all the relevant forgetful functors preserve limits.\nWe're still not at the point were this can either be done by\n* automation, or\n* noticing that everything is a model of a Lawvere theory\nbut ... maybe one day.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Algebra/limits.lean", "changes": [["add", "def", "limit", ["Algebra", "has_limits"]], ["add", "def", "limit_is_limit", ["Algebra", "has_limits"]], ["add", "def", "limit_π_alg_hom", ["Algebra"]], ["add", "def", "sections_subalgebra", ["Algebra"]]]}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["del", "def", "limit", ["CommRing", "CommRing_has_limits"]], ["del", "def", "limit_is_limit", ["CommRing", "CommRing_has_limits"]], ["del", "def", "limit_π_ring_hom", ["CommRing"]], ["add", "def", "forget₂_AddCommGroup_preserves_limits_aux", ["Ring"]], ["add", "def", "forget₂_AddCommMon_preserves_limits_aux", ["SemiRing"]], ["add", "def", "forget₂_Mon_preserves_limits_aux", ["SemiRing"]], ["add", "def", "limit", ["SemiRing", "has_limits"]], ["add", "def", "limit_is_limit", ["SemiRing", "has_limits"]], ["add", "def", "limit_π_ring_hom", ["SemiRing"]], ["add", "def", "sections_subsemiring", ["SemiRing"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": [["del", "def", "limit", ["AddCommGroup", "AddCommGroup_has_limits"]], ["del", "def", "limit_is_limit", ["AddCommGroup", "AddCommGroup_has_limits"]], ["mod", "def", "kernel_iso_ker_over", ["AddCommGroup"]], ["del", "def", "limit_π_add_monoid_hom", ["AddCommGroup"]], ["add", "def", "forget₂_CommMon_preserves_limits_aux", ["CommGroup"]], ["add", "def", "sections_subgroup", ["Group"]]]}, {"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/Module/limits.lean", "changes": [["add", "def", "limit", ["Module", "has_limits"]], ["add", "def", "limit_is_limit", ["Module", "has_limits"]], ["add", "def", "limit_π_linear_map", ["Module"]], ["add", "def", "sections_submodule", ["Module"]]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/Mon/limits.lean", "changes": [["add", "def", "limit", ["Mon", "has_limits"]], ["add", "def", "limit_is_limit", ["Mon", "has_limits"]], ["add", "def", "limit_π_monoid_hom", ["Mon"]], ["add", "def", "sections_submonoid", ["Mon"]]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["add", "theorem", "coe_inj", ["linear_map"]], ["del", "theorem", "coe_injective", ["linear_map"]]]}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": [["add", "theorem", "ring_hom_apply", ["pi"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "def", "creates_limit_of_fully_faithful_of_iso", ["category_theory"]], ["add", "def", "creates_limit_of_fully_faithful_of_lift", ["category_theory"]]]}, {"oldPath": "src/category_theory/reflect_isomorphisms.lean", "newPath": "src/category_theory/reflect_isomorphisms.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "algebra_map_apply", ["pi"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_inj", ["continuous_linear_map"]], ["del", "theorem", "coe_injective'", ["continuous_linear_map"]]]}]}, {"timestamp": 1595926531, "sha": "ce70305b", "message": "feat(category_theory): monoidal_category (C ⥤ D) when D is monoidal (#3571)\nWhen `C` is any category, and `D` is a monoidal category,\nthere is a natural \"pointwise\" monoidal structure on `C ⥤ D`.\nThe initial intended application is tensor product of presheaves.", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/functor_category.lean", "changes": [["add", "theorem", "associator_hom_app", ["category_theory", "monoidal"]], ["add", "theorem", "associator_inv_app", ["category_theory", "monoidal"]], ["add", "def", "tensor_hom", ["category_theory", "monoidal", "functor_category"]], ["add", "def", "tensor_obj", ["category_theory", "monoidal", "functor_category"]], ["add", "theorem", "left_unitor_hom_app", ["category_theory", "monoidal"]], ["add", "theorem", "left_unitor_inv_app", ["category_theory", "monoidal"]], ["add", "theorem", "right_unitor_hom_app", ["category_theory", "monoidal"]], ["add", "theorem", "right_unitor_inv_app", ["category_theory", "monoidal"]], ["add", "theorem", "tensor_hom_app", ["category_theory", "monoidal"]], ["add", "theorem", "tensor_obj_map", ["category_theory", "monoidal"]], ["add", "theorem", "tensor_obj_obj", ["category_theory", "monoidal"]], ["add", "theorem", "tensor_unit_map", ["category_theory", "monoidal"]], ["add", "theorem", "tensor_unit_obj", ["category_theory", "monoidal"]]]}]}, {"timestamp": 1595922859, "sha": "35763812", "message": "chore(ring_theory/subsemiring): tidy up docstrings (#3580)", "changes": [{"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1595903747, "sha": "865e8887", "message": "chore(*): make sure definitions don't generate `s x`, `s : set _` (#3591)\nFix the following definitions: `subtype.fintype`, `pfun.dom`, `pfun.as_subtype`, `pfun.equiv_subtype`.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["mod", "def", "as_subtype", ["pfun"]], ["mod", "def", "dom", ["pfun"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "coe_image_subset", ["subtype"]], ["add", "theorem", "coe_preimage_self", ["subtype"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "mem_span_singleton_self", ["submodule"]]]}]}, {"timestamp": 1595903745, "sha": "d04e3fc1", "message": "feat(linear_algebra/char_poly): relates the characteristic polynomial to trace, determinant, and dimension (#3536)\nadds lemmas about the number of fixed points of a permutation\nadds lemmas connecting the trace, determinant, and dimension of a matrix to its characteristic polynomial", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "commute", ["matrix", "scalar"]]]}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "fixed_point_card_lt_of_ne_one", ["equiv", "perm"]], ["add", "theorem", "one_lt_nonfixed_point_card_of_ne_one", ["equiv", "perm"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/char_poly/coeff.lean", "changes": [["add", "theorem", "char_matrix_apply_nat_degree", []], ["add", "theorem", "char_matrix_apply_nat_degree_le", []], ["add", "theorem", "char_poly_coeff_eq_prod_coeff_of_le", []], ["add", "theorem", "char_poly_degree_eq_dim", []], ["add", "theorem", "char_poly_monic", []], ["add", "theorem", "char_poly_monic_of_nontrivial", []], ["add", "theorem", "char_poly_nat_degree_eq_dim", []], ["add", "theorem", "char_poly_sub_diagonal_degree_lt", []], ["add", "theorem", "det_eq_sign_char_poly_coeff", []], ["add", "theorem", "det_of_card_zero", []], ["add", "theorem", "eval_det", []], ["add", "theorem", "mat_poly_equiv_eval", []], ["add", "theorem", "trace_eq_neg_char_poly_coeff", []]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "map_det", ["matrix", "alg_hom"]], ["add", "theorem", "map_det", ["matrix", "ring_hom"]]]}]}, {"timestamp": 1595903742, "sha": "a9481d97", "message": "feat(analysis/convex/basic): add lemmas about transformations of convex sets and functions (#3524)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "affine_image", ["convex"]], ["add", "theorem", "affine_preimage", ["convex"]], ["add", "theorem", "combo_affine_apply", ["convex"]], ["add", "theorem", "combo_to_vadd", ["convex"]], ["add", "theorem", "translate_preimage_left", ["convex"]], ["add", "theorem", "translate_preimage_right", ["convex"]], ["add", "theorem", "comp_affine_map", ["convex_on"]], ["add", "theorem", "comp_linear_map", ["convex_on"]], ["add", "theorem", "translate_left", ["convex_on"]], ["add", "theorem", "translate_right", ["convex_on"]]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}]}, {"timestamp": 1595903740, "sha": "005201a2", "message": "feat(linear_algebra/adic_completion): basic definitions about completions of modules (#3452)", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/adic_completion.lean", "changes": [["add", "theorem", "induction_on", ["Hausdorffification"]], ["add", "def", "lift", ["Hausdorffification"]], ["add", "theorem", "lift_comp_of", ["Hausdorffification"]], ["add", "theorem", "lift_eq", ["Hausdorffification"]], ["add", "theorem", "lift_of", ["Hausdorffification"]], ["add", "def", "of", ["Hausdorffification"]], ["add", "def", "Hausdorffification", []], ["add", "theorem", "coe_eval", ["adic_completion"]], ["add", "def", "eval", ["adic_completion"]], ["add", "theorem", "eval_apply", ["adic_completion"]], ["add", "theorem", "eval_comp_of", ["adic_completion"]], ["add", "theorem", "eval_of", ["adic_completion"]], ["add", "theorem", "ext", ["adic_completion"]], ["add", "def", "of", ["adic_completion"]], ["add", "theorem", "of_apply", ["adic_completion"]], ["add", "theorem", "range_eval", ["adic_completion"]], ["add", "def", "adic_completion", []], ["add", "theorem", "infi_pow_smul", ["is_Hausdorff"]], ["add", "def", "is_Hausdorff", []], ["add", "def", "is_adic_complete", []], ["add", "def", "is_precomplete", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/smodeq.lean", "changes": [["add", "theorem", "add", ["smodeq"]], ["add", "theorem", "bot", ["smodeq"]], ["add", "theorem", "comap", ["smodeq"]], ["add", "theorem", "map", ["smodeq"]], ["add", "theorem", "mono", ["smodeq"]], ["add", "theorem", "refl", ["smodeq"]], ["add", "theorem", "smul", ["smodeq"]], ["add", "theorem", "symm", ["smodeq"]], ["add", "theorem", "top", ["smodeq"]], ["add", "theorem", "trans", ["smodeq"]], ["add", "theorem", "zero", ["smodeq"]], ["add", "def", "smodeq", []]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "top_pow", ["ideal"]], ["add", "theorem", "map_smul''", ["submodule"]]]}]}, {"timestamp": 1595898652, "sha": "7cd1e268", "message": "feat(data/set/basic): range_unique (#3582)\nAdd a lemma on the `range` of a function from a `unique` type.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_unique", ["set"]]]}]}, {"timestamp": 1595898650, "sha": "23bd09a8", "message": "chore(deprecated/ring): removing uses (#3577)\nThis strips out a lot of the use of `deprecated.ring`. It's now only imported by `data.polynomial.eval`, and `ring_theory.free_ring`.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "theorem", "of_pow", ["ring", "direct_limit"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["del", "theorem", "map_pow", ["is_semiring_hom"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["del", "def", "of'", ["ring_equiv"]], ["del", "def", "of", ["ring_equiv"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "is_id", ["mv_polynomial"]], ["mod", "def", "iter_to_sum", ["mv_polynomial"]], ["mod", "theorem", "map_eval₂", ["mv_polynomial"]], ["mod", "theorem", "map_id", ["mv_polynomial"]], ["mod", "theorem", "map_rename", ["mv_polynomial"]], ["mod", "def", "sum_to_iter", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["mod", "theorem", "map_pow", ["polynomial"]]]}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["add", "def", "of'", ["free_ring"]]]}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": [["mod", "theorem", "lift_comp_of", ["free_ring"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1595898648, "sha": "7d4d985b", "message": "chore(data/polynomial): make eval2 irreducible (#3543)\nA while back @gebner identified that [an unfortunate timeout could be avoided](https://github.com/leanprover-community/mathlib/pull/3380#issuecomment-657449148) by making `polynomial.eval2` irreducible.\nThis PR does that.\nIt's not perfect: on a few occasions I have to temporarily set it back to semireducible, because it looks like the proofs really do some heavy refling.\nI'd like to make more things irreducible in the polynomial API, but not yet.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "comp_eq_sum_left", ["polynomial"]], ["add", "theorem", "eval_eq_sum", ["polynomial"]], ["add", "theorem", "eval₂_eq_sum", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/field_theory/fixed.lean", "newPath": "src/field_theory/fixed.lean", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "expand_eq_sum", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "subring_algebra_map_apply", ["algebra"]], ["add", "theorem", "subring_coe_algebra_map", ["algebra"]], ["add", "theorem", "subring_coe_algebra_map_hom", ["algebra"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["mod", "theorem", "integral_closure_idem", []], ["add", "theorem", "is_integral_of_is_algebra_tower", []]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "map_restriction", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1595896771, "sha": "4afb2149", "message": "chore(scripts): update nolints.txt (#3593)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1595883019, "sha": "7556353d", "message": "feat(data/int/cast): monoid_hom.ext_int (#3587)", "changes": [{"oldPath": "src/data/int/cast.lean", "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "ext_int", ["monoid_hom"]]]}]}, {"timestamp": 1595883017, "sha": "864a22ab", "message": "chore(ci): delete doc generation steps (#3586)\nDoc generation will be run on schedule in another repo for security reasons.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}, {"oldPath": "scripts/deploy_docs.sh", "newPath": null, "changes": []}]}, {"timestamp": 1595883015, "sha": "2ecf70f7", "message": "feat(data/finset/basic): more lemmas on finsets of subtypes (#3575)\nAdd two more lemmas related to `not_mem_map_subtype_of_not_property`.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "map_subtype_subset", ["finset"]], ["add", "theorem", "property_of_mem_map_subtype", ["finset"]]]}]}, {"timestamp": 1595863610, "sha": "3550f4f3", "message": "feat(*): remaining preliminaries for Haar measure (#3541)\nDefine `has_mul (finset α)`\nmore convenient formulation of `is_compact.finite_compact_cover`\nsome lemma additions", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "coe_mul", ["finset"]], ["add", "theorem", "mem_mul", ["finset"]], ["add", "theorem", "mul_card_le", ["finset"]], ["add", "theorem", "mul_def", ["finset"]], ["add", "theorem", "mul_mem_mul", ["finset"]], ["add", "theorem", "inv_subset", ["set"]], ["add", "theorem", "inv_subset_inv", ["set"]], ["mod", "theorem", "preimage_mul_right_one'", ["set"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "bInter_insert_update", ["finset"]], ["add", "theorem", "bUnion_insert_update", ["finset"]], ["add", "theorem", "infi_insert_update", ["finset"]], ["add", "theorem", "supr_insert_update", ["finset"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_subset_preimage_iff", ["function", "surjective"]], ["add", "theorem", "preimage_congr", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "mul", ["measurable"]], ["mod", "theorem", "measurable_mul", []], ["add", "theorem", "measurable_mul_left", []], ["add", "theorem", "measurable_mul_right", []]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "theorem", "coe_mk", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1595861640, "sha": "adfcfe70", "message": "feat(category_theory/concrete_category): epi_of_surjective (#3585)\nAlso, change the proof of `mono_of_injective` to use the fact that the forgetful function reflects monomorphisms.", "changes": [{"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["add", "theorem", "epi_of_surjective", ["category_theory", "concrete_category"]]]}]}, {"timestamp": 1595852463, "sha": "aeff5fc4", "message": "chore(ci): get xz archive (#3581)\nWe've been storing both .gz and .xz for a while for backward compatibility but will eventually drop .gz support.", "changes": [{"oldPath": "scripts/fetch_olean_cache.sh", "newPath": "scripts/fetch_olean_cache.sh", "changes": []}]}, {"timestamp": 1595852459, "sha": "133067cf", "message": "feat(set_theory/cardinal_ordinal): cardinal.mk_finset_eq_mk (#3578)", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "to_finset_surjective", ["list"]]]}, {"oldPath": "src/set_theory/cardinal_ordinal.lean", "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "mk_finset_eq_mk", ["cardinal"]]]}]}, {"timestamp": 1595849750, "sha": "4a5e25c5", "message": "chore(ci): remove branch update script (#3579)\nFor security reasons, this will move to a scheduled action in a different repo.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/update_branch.sh", "newPath": null, "changes": []}]}, {"timestamp": 1595849748, "sha": "8ba59d84", "message": "feat(measure_theory/measure_space): 2 lemmas about compact sets (#3573)\nA compact set `s` has finite (resp., zero) measure if every point of\n`s` has a neighborhood within `s` of finite (resp., zero) measure.", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "finite_measure_of_nhds_within", ["is_compact"]], ["add", "theorem", "measure_zero_of_nhds_within", ["is_compact"]], ["add", "theorem", "compl_mem_ae_iff", ["measure_theory"]], ["add", "theorem", "compl_mem_cofinite", ["measure_theory", "measure"]]]}]}, {"timestamp": 1595849746, "sha": "da64c7f2", "message": "chore(order/filter/basic): use `set.eq_on` in a few lemmas (#3565)", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_eq_principal", ["filter"]], ["add", "theorem", "eventually_eq", ["set", "eq_on"]]]}]}, {"timestamp": 1595844431, "sha": "8c8d6a22", "message": "feat(topology/tactic): continuity faster and more powerful (#3545)\nFollowing up on the recent introduction of Reid's continuity tactic in #2879, I've made some tweaks that make it both faster and more capable.\n1. we use `apply_rules {md:=semireducible}`, taking advantage of #3538. This makes examples like\n`example : continuous (λ x : ℝ, exp ((max x (-x)) + sin (cos x))^2) := by continuity` viable.\n2. in `apply_rules`, if we pull in lemmas using an attribute, we reverse the list of lemmas (on the heuristic that older lemmas are more frequently applicable than newer lemmas)\n3. in `continuity`, I removed the `apply_assumption` step in the `tidy` loop, since `apply_rules` is already calling `assumption`\n4. also in the `tidy` loop, I moved `intro1` above `apply_rules`.\nThe example in the test file\n```\nexample {κ ι : Type}\n (K : κ → Type) [∀ k, topological_space (K k)] (I : ι → Type) [∀ i, topological_space (I i)]\n (e : κ ≃ ι) (F : Π k, homeomorph (K k) (I (e k))) :\n continuous (λ (f : Π k, K k) (i : ι), F (e.symm i) (f (e.symm i))) :=\nby show_term { continuity }\n```\nwhich previously timed out now runs happily even with `-T50000`.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "theorem", "coe_continuous", ["continuous_multilinear_map"]]]}, {"oldPath": "src/topology/continuous_map.lean", "newPath": "src/topology/continuous_map.lean", "changes": [["add", "theorem", "coe_continuous", ["continuous_map"]]]}, {"oldPath": "src/topology/tactic.lean", "newPath": "src/topology/tactic.lean", "changes": [["add", "theorem", "continuous_id'", []]]}, {"oldPath": "test/continuity.lean", "newPath": "test/continuity.lean", "changes": []}]}, {"timestamp": 1595830160, "sha": "4c0881e8", "message": "feat(measure_theory/measure_space): several lemmas about `restrict` (#3574)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_eq_bot", ["measure_theory"]], ["add", "theorem", "ae_restrict_eq_bot", ["measure_theory"]], ["add", "theorem", "ae_restrict_ne_bot", ["measure_theory"]], ["add", "theorem", "measure_univ_eq_zero", ["measure_theory", "measure"]], ["add", "theorem", "restrict_add_restrict_compl", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply_univ", ["measure_theory", "measure"]], ["add", "theorem", "restrict_compl_add_restrict", ["measure_theory", "measure"]], ["add", "theorem", "restrict_eq_zero", ["measure_theory", "measure"]], ["add", "theorem", "restrict_le_self", ["measure_theory", "measure"]]]}]}, {"timestamp": 1595824418, "sha": "d5d463e4", "message": "chore(topology/subset_properties): +2 lemmas about `is_compact` (#3567)\nAlso use `variables {s t : set α}`", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "cluster_point_of_compact", []], ["mod", "theorem", "compact_diff", []], ["mod", "theorem", "compact_iff_finite_subcover", []], ["mod", "theorem", "compact_iff_finite_subfamily_closed", []], ["mod", "theorem", "compact_iff_ultrafilter_le_nhds", []], ["mod", "theorem", "compact_of_finite_subcover", []], ["mod", "theorem", "compact_of_finite_subfamily_closed", []], ["mod", "theorem", "compact_of_is_closed_subset", []], ["mod", "theorem", "compact_univ_pi", []], ["mod", "theorem", "compact_iff_compact_image", ["embedding"]], ["mod", "theorem", "adherence_nhdset", ["is_compact"]], ["add", "theorem", "compl_mem_sets", ["is_compact"]], ["add", "theorem", "compl_mem_sets_of_nhds_within", ["is_compact"]], ["mod", "theorem", "elim_finite_subcover", ["is_compact"]], ["mod", "theorem", "elim_finite_subcover_image", ["is_compact"]], ["mod", "theorem", "image", ["is_compact"]], ["mod", "theorem", "image_of_continuous_on", ["is_compact"]], ["mod", "theorem", "inter_left", ["is_compact"]], ["mod", "theorem", "inter_right", ["is_compact"]], ["mod", "theorem", "union", ["is_compact"]], ["mod", "theorem", "is_compact", ["set", "finite"]]]}]}, {"timestamp": 1595821125, "sha": "8673f23c", "message": "chore(data/finsupp): move into finsupp folder (#3566)", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finsupp/default.lean", "changes": []}, {"oldPath": "src/data/finsupp/lattice.lean", "newPath": "src/data/finsupp/lattice.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "test/conv/apply_congr.lean", "newPath": "test/conv/apply_congr.lean", "changes": []}]}, {"timestamp": 1595818093, "sha": "d6e399f1", "message": "chore(order/filter/basic): add `@[simp]` to `principal_empty/univ` (#3572)", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "principal_empty", ["filter"]], ["mod", "theorem", "principal_univ", ["filter"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1595813533, "sha": "d06f62d5", "message": "feat(analysis/calculus/times_cont_diff): more thorough times_cont_diff interface (#3551)\nAdd missing lemmas on smooth functions between vector spaces, that were necessary to solve the manifold exercises in Lftcm2020.\nChanges the `{x : E}` argument from implicit to explicit in `lemma times_cont_diff_within_at.comp` and `lemma times_cont_diff_within_at.comp'`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_id'", []], ["add", "theorem", "fderiv_within_id'", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "comp_times_cont_diff_within_at", ["times_cont_diff"]], ["add", "theorem", "sum", ["times_cont_diff"]], ["add", "theorem", "times_cont_diff_within_at", ["times_cont_diff"]], ["add", "theorem", "add", ["times_cont_diff_at"]], ["add", "theorem", "neg", ["times_cont_diff_at"]], ["add", "theorem", "sub", ["times_cont_diff_at"]], ["add", "theorem", "sum", ["times_cont_diff_at"]], ["add", "theorem", "sum", ["times_cont_diff_on"]], ["add", "theorem", "add", ["times_cont_diff_within_at"]], ["add", "theorem", "neg", ["times_cont_diff_within_at"]], ["add", "theorem", "sub", ["times_cont_diff_within_at"]], ["add", "theorem", "sum", ["times_cont_diff_within_at"]]]}, {"oldPath": "src/geometry/manifold/times_cont_mdiff.lean", "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1595808125, "sha": "ca6cebc5", "message": "feat(data/nat/digits): add `last_digit_ne_zero` (#3544)\nThe proof of `base_pow_length_digits_le` was refactored as suggested by @fpvandoorn in #3498.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "last_repeat_succ", ["list"]]]}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["mod", "theorem", "base_pow_length_digits_le'", []], ["add", "theorem", "digits_eq_nil_iff_eq_zero", []], ["add", "theorem", "digits_last", []], ["add", "theorem", "digits_ne_nil_iff_ne_zero", []], ["add", "theorem", "last_digit_ne_zero", []], ["add", "theorem", "of_digits_singleton", []], ["add", "theorem", "pow_length_le_mul_of_digits", []]]}]}, {"timestamp": 1595804429, "sha": "3c4abe06", "message": "chore(ci): remove update_nolint action (#3570)\nthis action will move to another repository for security reasons", "changes": [{"oldPath": ".github/workflows/update_nolints.yml", "newPath": null, "changes": []}]}, {"timestamp": 1595801802, "sha": "4763febd", "message": "chore(topology/basic): directly use `self_of_nhds` in `eq_of_nhds` (#3569)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1595785091, "sha": "a6d3d65f", "message": "chore(data/set/intervals): more `simp` lemmas (#3564)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ici_diff_Ici", ["set"]], ["add", "theorem", "Ici_diff_Ioi", ["set"]], ["add", "theorem", "Iic_diff_Iic", ["set"]], ["add", "theorem", "Iic_diff_Iio", ["set"]], ["add", "theorem", "Iio_diff_Iic", ["set"]], ["add", "theorem", "Iio_diff_Iio", ["set"]], ["add", "theorem", "Ioi_diff_Ici", ["set"]], ["add", "theorem", "Ioi_diff_Ioi", ["set"]], ["mod", "theorem", "compl_Ici", ["set"]], ["mod", "theorem", "compl_Iic", ["set"]], ["mod", "theorem", "compl_Iio", ["set"]], ["mod", "theorem", "compl_Ioi", ["set"]]]}]}, {"timestamp": 1595772983, "sha": "692a6895", "message": "feat(data/list/chain): chain'.append_overlap (#3559)", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "append_overlap", ["list", "chain'"]]]}]}, {"timestamp": 1595760116, "sha": "f4106afc", "message": "feat(order/filters, topology): relation between neighborhoods of a in [a, u), [a, u] and [a,+inf) + various nhds_within lemmas (#3516)\nContent : \n- two lemmas about filters, namely `tendsto_sup` and `eventually_eq_inf_principal_iff`\n- a few lemmas about `nhds_within`\n- duplicate and move parts of the lemmas `tfae_mem_nhds_within_[Ioi/Iio/Ici/Iic]` that only require `order_closed_topology α` instead of `order_topology α`. This allows to turn any left/right neighborhood of `a` into its \"canonical\" form (i.e `Ioi`/`Iio`/`Ici`/`Iic`) with a weaker assumption than before", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually_eq_inf_principal_iff", ["filter"]], ["add", "theorem", "sup", ["filter", "tendsto"]], ["add", "theorem", "tendsto_sup", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "continuous_within_at_Icc_iff_Ici", []], ["add", "theorem", "continuous_within_at_Icc_iff_Iic", []], ["add", "theorem", "continuous_within_at_Ico_iff_Ici", []], ["add", "theorem", "continuous_within_at_Ico_iff_Iio", []], ["add", "theorem", "continuous_within_at_Ioc_iff_Iic", []], ["add", "theorem", "continuous_within_at_Ioc_iff_Ioi", []], ["add", "theorem", "continuous_within_at_Ioo_iff_Iio", []], ["add", "theorem", "continuous_within_at_Ioo_iff_Ioi", []], ["add", "theorem", "tfae_mem_nhds_within_Ici'", []], ["add", "theorem", "tfae_mem_nhds_within_Iic'", []], ["add", "theorem", "tfae_mem_nhds_within_Iio'", []], ["add", "theorem", "tfae_mem_nhds_within_Ioi'", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "eventually_eq_nhds_within_iff", []], ["add", "theorem", "eventually_eq_nhds_within_of_eq_on", []], ["add", "theorem", "eventually_nhds_with_of_forall", []], ["add", "theorem", "eventually_eq_nhds_within", ["set", "eq_on"]], ["add", "theorem", "tendsto_nhds_within_congr", []], ["add", "theorem", "tendsto_nhds_within_of_tendsto_nhds_of_eventually_within", []]]}]}, {"timestamp": 1595754348, "sha": "f95e90b4", "message": "chore(order/liminf_limsup): use dot notation and `order_dual` (#3555)\n## New\n* `filter.has_basis.Limsup_eq_infi_Sup`\n## Rename\n### Namespace `filter`\n* `is_bounded_of_le` → `is_bounded_mono`;\n* `is_bounded_under_of_is_bounded` → `is_bounded.is_bounded_under`;\n* `is_cobounded_of_is_bounded` → `is_bounded.is_cobounded_flip`;\n* `is_cobounded_of_le` → `is_cobounded.mono`;\n### Top namespace\n* `is_bounded_under_le_of_tendsto` → `filter.tendsto.is_bounded_under_le`;\n* `is_cobounded_under_ge_of_tendsto` → `filter.tendsto.is_cobounded_under_ge`;\n* `is_bounded_under_ge_of_tendsto` → `filter.tendsto.is_bounded_under_ge`;\n* `is_cobounded_under_le_of_tendsto` → `filter.tendsto.is_cobounded_under_le`.\n## Remove\n* `filter.is_trans_le`, `filter.is_trans_ge`: we have both\n in `order/rel_classes`.", "changes": [{"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "Limsup_eq_infi_Sup", ["filter", "has_basis"]], ["add", "theorem", "is_bounded_under", ["filter", "is_bounded"]], ["add", "theorem", "is_cobounded_flip", ["filter", "is_bounded"]], ["add", "theorem", "mono", ["filter", "is_bounded"]], ["del", "theorem", "is_bounded_of_le", ["filter"]], ["del", "theorem", "is_bounded_under_of_is_bounded", ["filter"]], ["add", "theorem", "mono", ["filter", "is_cobounded"]], ["del", "theorem", "is_cobounded_of_is_bounded", ["filter"]], ["del", "theorem", "is_cobounded_of_le", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "is_bounded_under_ge", ["filter", "tendsto"]], ["add", "theorem", "is_bounded_under_le", ["filter", "tendsto"]], ["add", "theorem", "is_cobounded_under_ge", ["filter", "tendsto"]], ["add", "theorem", "is_cobounded_under_le", ["filter", "tendsto"]], ["del", "theorem", "is_bounded_under_ge_of_tendsto", []], ["del", "theorem", "is_bounded_under_le_of_tendsto", []], ["del", "theorem", "is_cobounded_under_ge_of_tendsto", []], ["del", "theorem", "is_cobounded_under_le_of_tendsto", []]]}]}, {"timestamp": 1595754346, "sha": "493a5b07", "message": "feat(data/set/lattice): add lemmas `disjoint.union_left/right` etc (#3554)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "union_left", ["set", "disjoint"]], ["add", "theorem", "union_right", ["set", "disjoint"]], ["add", "theorem", "disjoint_union_left", ["set"]], ["add", "theorem", "disjoint_union_right", ["set"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "sup_left", ["disjoint"]], ["add", "theorem", "sup_right", ["disjoint"]], ["add", "theorem", "disjoint_sup_left", []], ["add", "theorem", "disjoint_sup_right", []]]}]}, {"timestamp": 1595749264, "sha": "3c1f3329", "message": "feat(tactic/to_additive): automate substructure naming (#3553)\nThis is all @cipher1024's work, improving `to_additive` to correctly generate names when we're talking about structures (rather than just operations).", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/inj_surj.lean", "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}]}, {"timestamp": 1595747000, "sha": "d7fcd8ca", "message": "chore(analysis/normed_space): remove 2 `norm_zero` lemmas (#3558)\nWe have a general `norm_zero` lemma and these lemmas are not used\nbefore we introduce `normed_group` instances.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["del", "theorem", "norm_zero", ["continuous_multilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "norm_zero", ["continuous_linear_map"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}]}, {"timestamp": 1595731144, "sha": "11179d53", "message": "feat(algebra/category/Group/*): compare categorical (co)kernels/images with the usual notions (#3443)", "changes": [{"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": [["add", "def", "cokernel_iso_quotient", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": [["add", "def", "image_iso_range", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": [["add", "def", "kernel_iso_ker", ["AddCommGroup"]], ["add", "theorem", "kernel_iso_ker_hom_comp_subtype", ["AddCommGroup"]], ["add", "theorem", "kernel_iso_ker_inv_comp_ι", ["AddCommGroup"]], ["add", "def", "kernel_iso_ker_over", ["AddCommGroup"]]]}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/concrete_category.lean", "changes": [["add", "theorem", "cokernel_condition_apply", ["category_theory", "limits"]], ["add", "theorem", "kernel_condition_apply", ["category_theory", "limits"]]]}]}, {"timestamp": 1595692409, "sha": "8582b06b", "message": "feat(logic/basic): mark cast_eq as a `simp` lemma (#3547)\nThe theorem `cast_eq` is in core and says `theorem cast_eq : ∀ {α : Sort u} (h : α = α) (a : α), cast h a = a`", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1595690628, "sha": "3484194d", "message": "chore(geometry/manifold/real_instance): remove global fact instance (#3549)\nRemove global `fact` instance that was used to get a manifold structure on `[0, 1]`, and register only the manifold structure.", "changes": [{"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": [["add", "theorem", "fact_zero_lt_one", []]]}]}, {"timestamp": 1595671785, "sha": "e90c7b96", "message": "feat(data/num/prime): kernel-friendly decision procedure for prime (#3525)", "changes": [{"oldPath": "src/algebra/ring/basic.lean", "newPath": "src/algebra/ring/basic.lean", "changes": [["mod", "theorem", "dvd_iff_dvd_of_dvd_sub", []], ["mod", "theorem", "dvd_mul_sub_mul", []], ["add", "theorem", "two_dvd_bit0", []], ["add", "theorem", "two_dvd_bit1", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["add", "theorem", "dvd_to_nat", ["pos_num"]]]}, {"oldPath": null, "newPath": "src/data/num/prime.lean", "changes": [["add", "def", "min_fac", ["num"]], ["add", "theorem", "min_fac_to_nat", ["num"]], ["add", "def", "prime", ["num"]], ["add", "def", "min_fac", ["pos_num"]], ["add", "def", "min_fac_aux", ["pos_num"]], ["add", "theorem", "min_fac_aux_to_nat", ["pos_num"]], ["add", "theorem", "min_fac_to_nat", ["pos_num"]], ["add", "def", "prime", ["pos_num"]]]}]}, {"timestamp": 1595662295, "sha": "0379d3ac", "message": "chore(*): minor import cleanup (#3546)", "changes": [{"oldPath": "src/algebra/group/pi.lean", "newPath": "src/algebra/group/pi.lean", "changes": []}, {"oldPath": "src/algebra/ring/pi.lean", "newPath": "src/algebra/ring/pi.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable/lattice.lean", "newPath": "src/data/equiv/encodable/lattice.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1595658784, "sha": "2a456a9c", "message": "feat(topology/*, geometry/*): missing lemmas (#3528)\nGrab bag of missing lemmas on topology and geometry that were needed for the manifold exercises in Lftcm2020.", "changes": [{"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "theorem", "mfderiv_within_congr", []], ["add", "theorem", "tangent_map_id", []], ["add", "theorem", "tangent_map_within_congr", []], ["add", "theorem", "tangent_map_within_id", []]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_on_iff", ["embedding"]], ["add", "theorem", "continuous_on_iff", ["inducing"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "homeomorph_mk_coe", ["homeomorph"]], ["add", "theorem", "homeomorph_mk_coe_symm", ["homeomorph"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "is_closed_sphere", ["metric"]]]}]}, {"timestamp": 1595658782, "sha": "12a7ce39", "message": "feat(category_theory/isomorphism): lemmas about cancelling isomorphisms (#3436)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "theorem", "cancel_counit_inv_right", ["category_theory", "equivalence"]], ["add", "theorem", "cancel_counit_inv_right_assoc'", ["category_theory", "equivalence"]], ["add", "theorem", "cancel_counit_inv_right_assoc", ["category_theory", "equivalence"]], ["add", "theorem", "cancel_counit_right", ["category_theory", "equivalence"]], ["add", "theorem", "cancel_unit_inv_right", ["category_theory", "equivalence"]], ["add", "theorem", "cancel_unit_right", ["category_theory", "equivalence"]], ["add", "theorem", "cancel_unit_right_assoc'", ["category_theory", "equivalence"]], ["add", "theorem", "cancel_unit_right_assoc", ["category_theory", "equivalence"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "cancel_iso_hom_left", ["category_theory", "iso"]], ["add", "theorem", "cancel_iso_hom_right", ["category_theory", "iso"]], ["add", "theorem", "cancel_iso_hom_right_assoc", ["category_theory", "iso"]], ["add", "theorem", "cancel_iso_inv_left", ["category_theory", "iso"]], ["add", "theorem", "cancel_iso_inv_right", ["category_theory", "iso"]], ["add", "theorem", "cancel_iso_inv_right_assoc", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "cancel_nat_iso_hom_left", ["category_theory", "nat_iso"]], ["add", "theorem", "cancel_nat_iso_hom_right", ["category_theory", "nat_iso"]], ["add", "theorem", "cancel_nat_iso_hom_right_assoc", ["category_theory", "nat_iso"]], ["add", "theorem", "cancel_nat_iso_inv_left", ["category_theory", "nat_iso"]], ["add", "theorem", "cancel_nat_iso_inv_right", ["category_theory", "nat_iso"]], ["add", "theorem", "cancel_nat_iso_inv_right_assoc", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1595655035, "sha": "2d29f80a", "message": "feat(data/finsupp): lattice structure on finsupp (#3335)\nadds facts about order_isos respecting lattice operations\ndefines lattice structures on finsupps to N\nconstructs an order_iso out of finsupp.to_multiset", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finsupp/lattice.lean", "changes": [["add", "theorem", "bot_eq_zero", ["finsupp"]], ["add", "theorem", "disjoint_iff", ["finsupp"]], ["add", "theorem", "inf_apply", ["finsupp"]], ["add", "theorem", "le_def", ["finsupp"]], ["add", "theorem", "monotone_to_fun", ["finsupp"]], ["add", "theorem", "of_multiset_strict_mono", ["finsupp"]], ["add", "def", "order_embedding_to_fun", ["finsupp"]], ["add", "theorem", "order_embedding_to_fun_apply", ["finsupp"]], ["add", "def", "order_iso_multiset", ["finsupp"]], ["add", "theorem", "order_iso_multiset_apply", ["finsupp"]], ["add", "theorem", "order_iso_multiset_symm_apply", ["finsupp"]], ["add", "theorem", "sup_apply", ["finsupp"]], ["add", "theorem", "support_inf", ["finsupp"]], ["add", "theorem", "support_sup", ["finsupp"]]]}]}, {"timestamp": 1595651179, "sha": "8d55eda5", "message": "feat(topology/tactic): `continuity` tactic (#2879)", "changes": [{"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": [["mod", "def", "f", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "exp_monotone", ["real"]]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "sub", ["continuous"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "pow", ["continuous"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "max", ["continuous"]], ["mod", "theorem", "min", ["continuous"]]]}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "prod_mk", ["continuous"]], ["mod", "theorem", "continuous_fst", []], ["mod", "theorem", "continuous_inl", []], ["mod", "theorem", "continuous_inr", []], ["mod", "theorem", "continuous_quot_lift", []], ["mod", "theorem", "continuous_quot_mk", []], ["mod", "theorem", "continuous_snd", []], ["mod", "theorem", "continuous_subtype_mk", []], ["mod", "theorem", "continuous_subtype_val", []], ["mod", "theorem", "continuous_sum_rec", []], ["mod", "theorem", "continuous_ulift_down", []], ["mod", "theorem", "continuous_ulift_up", []]]}, {"oldPath": "src/topology/continuous_map.lean", "newPath": "src/topology/continuous_map.lean", "changes": [["mod", "def", "const", ["continuous_map"]], ["mod", "def", "id", ["continuous_map"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "continuous_bot", []], ["mod", "theorem", "continuous_top", []]]}, {"oldPath": null, "newPath": "src/topology/tactic.lean", "changes": []}, {"oldPath": null, "newPath": "test/continuity.lean", "changes": []}]}, {"timestamp": 1595625553, "sha": "6f9da356", "message": "feat(tactic/simps): improvements (#3477)\nFeatures:\n* `@[simps]` will look for `has_coe_to_sort` and `has_coe_to_fun` instances, and use those instead of direct projections. This should make it way more applicable for `equiv`, `local_equiv` and all other structures that coerce to a function (and for the few structures that coerce to a type). This works out-of-the-box without special configuration.\n* Use `has_mul.mul`, `has_zero.zero` and all the other \"notation projections\" instead of the projections directly. This should make it more useful in category theory and the algebraic hierarchy (note: the `[notation_class]` attribute still needs to be added to all notation classes not defined in `init.core`)\n* Add an easy way to specify custom projections of structures (like using `⇑e.symm` instead of `e.inv_fun`). They have to be definitionally equal to the projection.\nMinor changes:\n* Change the syntax to specify options.\n* `prod` (and `pprod`) are treated as a special case: we do not recursively apply projections of these structure. This was the most common reason that we had to write the desired projections manually. You can still override this behavior by writing out the projections manually.\n* A flag to apply `simp` to the rhs of the generated lemma, so that they are in simp-normal-form.\n* Added an options to add more attributes to the generated lemmas\n* Added an option which definitions to unfold to determine whether a type is a function type. By default it will unfold reducible definitions and instances (but e.g. not `set α`)\n* Added an option to unfold definitions in the declaration to determine whether it is a constructor. (default: none)\n* Added an option to not fully-apply the terms in the generated lemmas.\nDesign decisions:\n* For every field in a structure there is a specified \"projection expression\" that acts as the projection for that field. For most fields this is just the projection of the structure, but this will be automatically overridden under certain conditions, like a coercion to functions/sorts existing, or a notation typeclass existing for a certain field.\n* The first time you call `simps` for a specific structure, these projection expressions are cached using an attribute for that structure, and it is assumed you want to use the same projection expressions every time.\n* You can also manually specify the projection. See Note [custom simps projection].", "changes": [{"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": [["mod", "def", "associator", ["category_theory", "prod"]], ["mod", "def", "inverse_associator", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["mod", "def", "evaluation_uncurried", ["category_theory"]], ["mod", "def", "prod", ["category_theory", "functor"]], ["mod", "def", "prod", ["category_theory", "nat_trans"]], ["mod", "def", "fst", ["category_theory", "prod"]], ["mod", "def", "sectl", ["category_theory", "prod"]], ["mod", "def", "sectr", ["category_theory", "prod"]], ["mod", "def", "snd", ["category_theory", "prod"]], ["mod", "def", "swap", ["category_theory", "prod"]], ["mod", "def", "symmetry", ["category_theory", "prod"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "prod_Semigroup", ["coercing", "Group"]], ["add", "structure", "Semigroup", ["coercing"]], ["add", "def", "bar", ["coercing"]], ["add", "structure", "equiv2", ["coercing"]], ["add", "def", "foo2", ["coercing"]], ["add", "def", "foo", ["coercing"]], ["add", "structure", "foo_str", ["coercing"]], ["add", "def", "new_bar", ["coercing"]], ["add", "def", "voo2", ["coercing"]], ["add", "def", "voo", ["coercing"]], ["add", "structure", "voo_str", ["coercing"]], ["del", "def", "nested1", ["count_nested"]], ["del", "def", "nested2", ["count_nested"]], ["add", "def", "trans", ["equiv"]], ["add", "structure", "equiv", ["failty_manual_coercion"]], ["add", "def", "rfl2", ["foo"]], ["add", "def", "rfl3", ["foo"]], ["add", "def", "inv_fun", ["manual_coercion", "equiv", "simps"]], ["add", "def", "symm", ["manual_coercion", "equiv"]], ["add", "structure", "equiv", ["manual_coercion"]], ["add", "def", "inv_fun", ["manual_initialize", "equiv", "simps"]], ["add", "def", "symm", ["manual_initialize", "equiv"]], ["add", "structure", "equiv", ["manual_initialize"]], ["add", "def", "my_nat_equiv", []], ["add", "structure", "my_prod", []], ["add", "def", "map", ["myprod"]], ["add", "def", "nat_set_plus2", []], ["add", "def", "nat_set_plus3", []], ["add", "def", "nat_set_plus", []], ["add", "def", "symm2", ["nested_non_fully_applied", "equiv"]], ["add", "def", "symm3", ["nested_non_fully_applied", "equiv"]], ["add", "def", "symm", ["nested_non_fully_applied", "equiv"]], ["add", "structure", "equiv", ["nested_non_fully_applied"]], ["mod", "def", "partially_applied_term", []], ["add", "def", "pprod_equiv_prod", []], ["add", "structure", "set_plus", []], ["mod", "def", "short_name1", []], ["add", "def", "succeed_without_simplification_possible", []], ["add", "def", "test_sneaky", []], ["mod", "def", "very_partially_applied_term", []]]}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1595616164, "sha": "4d811493", "message": "chore(ring_theory/prod): move file to algebra/ring/prod (#3540)", "changes": [{"oldPath": "src/ring_theory/prod.lean", "newPath": "src/algebra/ring/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}]}, {"timestamp": 1595610202, "sha": "47efcf3c", "message": "chore(algebraic_geometry/presheafed_space): use projection rather than fancy coercion (#3507)\nWe'd gone to great effort when writing `PresheafedSpace` to create a coercion from morphisms of `PresheafedSpace`s to morphisms in `Top`.\nIt's hard to read, it's fragile.\nSo this PR rips out that coercion, and renames the \"continuous map between base spaces\" field from `f` to `base`, and uses that throughout.", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "theorem", "comp_base", ["algebraic_geometry", "PresheafedSpace"]], ["del", "theorem", "comp_coe", ["algebraic_geometry", "PresheafedSpace"]], ["del", "theorem", "f_as_coe", ["algebraic_geometry", "PresheafedSpace"]], ["del", "theorem", "hom_mk_coe", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "id_base", ["algebraic_geometry", "PresheafedSpace"]], ["del", "theorem", "id_coe", ["algebraic_geometry", "PresheafedSpace"]], ["del", "theorem", "id_coe_fn", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["mod", "def", "stalk_map", ["algebraic_geometry", "PresheafedSpace"]]]}]}, {"timestamp": 1595595841, "sha": "229cf6ef", "message": "feat(data/polynomial): irreducible_of_irreducible_mod_prime (#3539)\nI was waiting on this, an exercise from Johan's tutorial at LftCM, to see if a participant would PR it. Perhaps not, so I'll contribute this now.", "changes": [{"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "irreducible_of_irreducible_map", ["polynomial"]], ["add", "theorem", "is_unit_of_is_unit_leading_coeff_of_is_unit_map", ["polynomial"]]]}]}, {"timestamp": 1595595839, "sha": "579b142d", "message": "feat(field_theory/fixed): a field is normal over the fixed subfield under a group action (#3520)\nFrom my Galois theory repo.", "changes": [{"oldPath": "src/algebra/group_action_hom.lean", "newPath": "src/algebra/group_action_hom.lean", "changes": [["add", "theorem", "coe_subtype_hom'", ["is_invariant_subring"]], ["add", "theorem", "coe_subtype_hom", ["is_invariant_subring"]], ["add", "def", "subtype_hom", ["is_invariant_subring"]], ["add", "theorem", "coe_polynomial", ["mul_semiring_action_hom"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "theorem", "smul_prod", ["list"]], ["add", "theorem", "smul_prod", ["multiset"]], ["mod", "theorem", "coeff_smul'", ["polynomial"]], ["add", "theorem", "eval_smul'", ["polynomial"]], ["mod", "theorem", "smul_C", ["polynomial"]], ["mod", "theorem", "smul_X", ["polynomial"]], ["add", "theorem", "smul_eval", ["polynomial"]], ["add", "theorem", "smul_eval_smul", ["polynomial"]], ["add", "theorem", "coeff", ["prod_X_sub_smul"]], ["add", "theorem", "eval", ["prod_X_sub_smul"]], ["add", "theorem", "monic", ["prod_X_sub_smul"]], ["add", "theorem", "smul", ["prod_X_sub_smul"]], ["add", "theorem", "smul_prod", []]]}, {"oldPath": "src/algebra/module/basic.lean", "newPath": "src/algebra/module/basic.lean", "changes": [["del", "theorem", "smul_neg", []], ["del", "theorem", "smul_sub", []]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "map_dvd_map", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "irreducible_of_monic", ["polynomial"]], ["add", "theorem", "map_dvd_map'", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "eq_of_monic_of_associated", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/field_theory/fixed.lean", "changes": [["add", "theorem", "coe_algebra_map", ["fixed_points"]], ["add", "theorem", "is_integral", ["fixed_points"]], ["add", "theorem", "eval₂", ["fixed_points", "minpoly"]], ["add", "theorem", "irreducible", ["fixed_points", "minpoly"]], ["add", "theorem", "irreducible_aux", ["fixed_points", "minpoly"]], ["add", "theorem", "minimal_polynomial", ["fixed_points", "minpoly"]], ["add", "theorem", "monic", ["fixed_points", "minpoly"]], ["add", "theorem", "ne_one", ["fixed_points", "minpoly"]], ["add", "def", "minpoly", ["fixed_points"]], ["add", "theorem", "of_eval₂", ["fixed_points"]], ["add", "theorem", "smul", ["fixed_points"]], ["add", "theorem", "smul_polynomial", ["fixed_points"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["add", "theorem", "unique'", ["minimal_polynomial"]]]}, {"oldPath": null, "newPath": "src/field_theory/normal.lean", "changes": [["add", "theorem", "exists_is_splitting_field", ["normal"]], ["add", "theorem", "is_integral", ["normal"]], ["add", "theorem", "splits", ["normal"]], ["add", "def", "normal", []]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "def", "fixed_by", ["mul_action"]], ["add", "theorem", "fixed_eq_Inter_fixed_by", ["mul_action"]], ["mod", "def", "fixed_points", ["mul_action"]], ["add", "theorem", "injective_of_quotient_stabilizer", ["mul_action"]], ["add", "theorem", "mem_fixed_by", ["mul_action"]], ["add", "def", "of_quotient_stabilizer", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_mem_orbit", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_mk", ["mul_action"]], ["add", "theorem", "of_quotient_stabilizer_smul", ["mul_action"]], ["add", "theorem", "smul_neg", []], ["add", "theorem", "smul_sub", []]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_top", ["algebra"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "map_to_subring", ["polynomial"]]]}]}, {"timestamp": 1595591548, "sha": "a6ad9043", "message": "feat(tactic/apply_rules): allow apply_cfg argument (#3538)\nThis allows passing an `apply_cfg` argument to `apply_rules` (and simplifies the configuration argument to `solve_by_elim`).\nThis is prompted by the desire to try using `apply_rules` with `md := semireducible` when working on the `continuity` tactic.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}]}, {"timestamp": 1595588843, "sha": "2d47d0cb", "message": "chore(measure_theory/indicator_function): split into 2 files deps: 3503 (#3509)\nSplit `measure_theory/indicator_function` into 2 files.\nThis file formulated all lemmas for `measure.ae` but they hold for any filter.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/indicator_function.lean", "changes": [["add", "theorem", "indicator_norm_le_norm_self", []], ["add", "theorem", "norm_indicator_eq_indicator_norm", []], ["add", "theorem", "norm_indicator_le_norm_self", []], ["add", "theorem", "norm_indicator_le_of_subset", []]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_rel_indicator", ["set"]]]}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": null, "changes": [["del", "theorem", "indicator_congr_ae", []], ["del", "theorem", "indicator_congr_of_set", []], ["del", "theorem", "indicator_le_indicator_ae", []], ["del", "theorem", "indicator_norm_le_norm_self", []], ["del", "theorem", "indicator_union_ae", []], ["del", "theorem", "norm_indicator_eq_indicator_norm", []], ["del", "theorem", "norm_indicator_le_norm_self", []], ["del", "theorem", "norm_indicator_le_of_subset", []], ["del", "theorem", "tendsto_indicator_bUnion_finset", []], ["del", "theorem", "tendsto_indicator_of_antimono", []], ["del", "theorem", "tendsto_indicator_of_monotone", []]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "mem_iff", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_set_ext", ["filter"]]]}, {"oldPath": null, "newPath": "src/order/filter/indicator_function.lean", "changes": [["add", "theorem", "indicator_eventually_eq", []], ["add", "theorem", "indicator_eventually_le_indicator", []], ["add", "theorem", "indicator_union_eventually_eq", []], ["add", "theorem", "tendsto_indicator_bUnion_finset", []], ["add", "theorem", "tendsto_indicator_of_antimono", []], ["add", "theorem", "tendsto_indicator_of_monotone", []]]}]}, {"timestamp": 1595581302, "sha": "6fe81bd5", "message": "chore(*): remove `plift` from some lemmas about `infi`/`supr` (#3503)\nNow `supr_eq_supr_finset` etc assume `ι` is a `Type*` and don't use `plift`. If you want\nto apply it to a `Sort*`, rewrite on `equiv.plift.surjective.supr_comp` first.\n## Full list of API changes:\n### `data/equiv/basic`\n* `equiv.ulift`: change the order of universe arguments to match `ulift`;\n* add `coe_ulift`, `coe_plift`, `coe_ulift_symm`, `coe_plift_symm`;\n### `data/finset/lattice`\n* `supr_eq_supr_finset`, `infi_eq_infi_finset`: assume `ι` is a `Type*`, avoid `plift`;\n* `Union_eq_Union_finset`, `Inter_eq_Inter_finset`: same as above;\n### `data/set/basic`\n* `function.surjective.range_comp`: generalize to `Sort*` for 2 of 3 arguments;\n### `order/complete_lattice`\n* remove `supr_congr` and `infi_congr`;\n* add `function.surjective.supr_comp` and `function.surjective.infi_comp`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "coe_plift", ["equiv"]], ["add", "theorem", "coe_plift_symm", ["equiv"]], ["add", "theorem", "coe_ulift", ["equiv"]], ["add", "theorem", "coe_ulift_symm", ["equiv"]]]}, {"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "infi_eq_infi_finset'", []], ["add", "theorem", "Inter_eq_Inter_finset'", ["set"]], ["add", "theorem", "Union_eq_Union_finset'", ["set"]], ["add", "theorem", "supr_eq_supr_finset'", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "range_comp", ["function", "surjective"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_comp", ["function", "surjective"]], ["add", "theorem", "supr_comp", ["function", "surjective"]], ["del", "theorem", "infi_congr", []], ["del", "theorem", "supr_congr", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "infi_sets_eq_finite'", ["filter"]], ["mod", "theorem", "infi_sets_eq_finite", ["filter"]], ["add", "theorem", "mem_infi_finite'", ["filter"]], ["mod", "theorem", "mem_infi_finite", ["filter"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1595578794, "sha": "499cb9bb", "message": "refactor(data/nat/digits): refactor into sections (#3527)\nRefactor `data.nat.digits` into sections and grouping similar lemmas together.", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}]}, {"timestamp": 1595576668, "sha": "5d41ec70", "message": "feat(ring_theory/polynomial/basic): remove unnecessary commutativity assumption (#3535)", "changes": [{"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1595551319, "sha": "c88f8beb", "message": "chore(scripts): update nolints.txt (#3534)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1595546292, "sha": "bad4f978", "message": "feat(algebra/direct_sum): Add ⨁ notation (#3473)\nThis uses the unicode character \"n-ary circled plus operator\", which seems to be the usual symbol for this operation", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["mod", "def", "mk", ["direct_sum"]], ["mod", "def", "of", ["direct_sum"]], ["mod", "theorem", "unique", ["direct_sum", "to_group"]], ["mod", "def", "to_group", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/direct_sum/tensor_product.lean", "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["mod", "theorem", "apply_eq_component", ["direct_sum"]], ["mod", "def", "component", ["direct_sum"]], ["mod", "theorem", "ext", ["direct_sum"]], ["mod", "theorem", "ext_iff", ["direct_sum"]], ["mod", "def", "lmk", ["direct_sum"]], ["mod", "def", "lof", ["direct_sum"]], ["mod", "theorem", "ext", ["direct_sum", "to_module"]], ["mod", "theorem", "unique", ["direct_sum", "to_module"]], ["mod", "def", "to_module", ["direct_sum"]]]}]}, {"timestamp": 1595533939, "sha": "289d17cd", "message": "chore(data/equiv/basic): avoid `λ ⟨a, b⟩` in some defs, add `simp` lemmas (#3530)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "psigma_equiv_sigma_apply", ["equiv"]], ["add", "theorem", "psigma_equiv_sigma_symm_apply", ["equiv"]], ["mod", "def", "sigma_congr_left", ["equiv"]], ["add", "theorem", "sigma_congr_left_apply", ["equiv"]], ["add", "theorem", "sigma_congr_right_apply", ["equiv"]], ["add", "theorem", "sigma_congr_right_symm_apply", ["equiv"]], ["mod", "def", "sigma_equiv_prod", ["equiv"]], ["add", "theorem", "sigma_equiv_prod_apply", ["equiv"]], ["mod", "def", "sigma_equiv_prod_of_equiv", ["equiv"]], ["add", "theorem", "sigma_equiv_prod_symm_apply", ["equiv"]]]}]}, {"timestamp": 1595528956, "sha": "2d395a99", "message": "refactor(algebra/pi_instance): delete pi_instance file, and move instances to group/ring etc appropriately (#3513)", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/big_operators/pi.lean", "changes": [["add", "theorem", "functions_ext", ["add_monoid_hom"]], ["add", "theorem", "prod_apply", ["finset"]], ["add", "theorem", "univ_sum_single", ["finset"]], ["add", "theorem", "list_prod_apply", ["pi"]], ["add", "theorem", "multiset_prod_apply", ["pi"]], ["add", "theorem", "fst_prod", ["prod"]], ["add", "theorem", "snd_prod", ["prod"]], ["add", "theorem", "prod_mk_prod", []], ["add", "theorem", "functions_ext", ["ring_hom"]]]}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/default.lean", "newPath": "src/algebra/default.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group/pi.lean", "changes": [["add", "def", "single", ["add_monoid_hom"]], ["add", "theorem", "single_apply", ["add_monoid_hom"]], ["add", "def", "apply", ["monoid_hom"]], ["add", "theorem", "apply_apply", ["monoid_hom"]], ["add", "theorem", "inv_apply", ["pi"]], ["add", "theorem", "mul_apply", ["pi"]], ["add", "theorem", "one_apply", ["pi"]], ["add", "def", "single", ["pi"]], ["add", "theorem", "single_eq_of_ne", ["pi"]], ["add", "theorem", "single_eq_same", ["pi"]], ["add", "theorem", "sub_apply", ["pi"]]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/midpoint.lean", "newPath": "src/algebra/midpoint.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/module/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/module/pi.lean", "changes": [["add", "theorem", "smul_apply'", ["pi"]], ["add", "theorem", "smul_apply", ["pi"]]]}, {"oldPath": null, "newPath": "src/algebra/module/prod.lean", "changes": [["add", "theorem", "smul_fst", ["prod"]], ["add", "theorem", "smul_mk", ["prod"]], ["add", "theorem", "smul_snd", ["prod"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": null, "changes": [["del", "theorem", "functions_ext", ["add_monoid_hom"]], ["del", "def", "single", ["add_monoid_hom"]], ["del", "theorem", "single_apply", ["add_monoid_hom"]], ["del", "theorem", "prod_apply", ["finset"]], ["del", "theorem", "prod_mk_prod", ["finset"]], ["del", "theorem", "univ_sum_single", ["finset"]], ["del", "def", "apply", ["monoid_hom"]], ["del", "theorem", "apply_apply", ["monoid_hom"]], ["del", "theorem", "finset_prod_apply", ["pi"]], ["del", "theorem", "inv_apply", ["pi"]], ["del", "theorem", "list_prod_apply", ["pi"]], ["del", "theorem", "mul_apply", ["pi"]], ["del", "theorem", "multiset_prod_apply", ["pi"]], ["del", "theorem", "one_apply", ["pi"]], ["del", "def", "single", ["pi"]], ["del", "theorem", "single_eq_of_ne", ["pi"]], ["del", "theorem", "single_eq_same", ["pi"]], ["del", "theorem", "smul_apply'", ["pi"]], ["del", "theorem", "smul_apply", ["pi"]], ["del", "theorem", "sub_apply", ["pi"]], ["del", "theorem", "is_group_hom", ["prod", "fst"]], ["del", "theorem", "is_monoid_hom", ["prod", "fst"]], ["del", "theorem", "fst_inl", ["prod"]], ["del", "theorem", "fst_inr", ["prod"]], ["del", "theorem", "fst_prod", ["prod"]], ["del", "def", "inl", ["prod"]], ["del", "theorem", "inl_eq_inl", ["prod"]], ["del", "theorem", "inl_eq_inr", ["prod"]], ["del", "theorem", "inl_injective", ["prod"]], ["del", "def", "inr", ["prod"]], ["del", "theorem", "inr_eq_inl", ["prod"]], ["del", "theorem", "inr_eq_inr", ["prod"]], ["del", "theorem", "inr_injective", ["prod"]], ["del", "theorem", "smul_fst", ["prod"]], ["del", "theorem", "smul_mk", ["prod"]], ["del", "theorem", "smul_snd", ["prod"]], ["del", "theorem", "is_group_hom", ["prod", "snd"]], ["del", "theorem", "is_monoid_hom", ["prod", "snd"]], ["del", "theorem", "snd_inl", ["prod"]], ["del", "theorem", "snd_inr", ["prod"]], ["del", "theorem", "snd_prod", ["prod"]], ["del", "def", "apply", ["ring_hom"]], ["del", "theorem", "apply_apply", ["ring_hom"]], ["del", "theorem", "functions_ext", ["ring_hom"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/ring/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/ring/pi.lean", "changes": [["add", "def", "apply", ["ring_hom"]], ["add", "theorem", "apply_apply", ["ring_hom"]]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "inl", ["linear_map"]], ["add", "theorem", "inl_injective", ["linear_map"]], ["mod", "def", "inr", ["linear_map"]], ["add", "theorem", "inr_injective", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/prod.lean", "newPath": "src/ring_theory/prod.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}, {"oldPath": "test/pi_simp.lean", "newPath": "test/pi_simp.lean", "changes": []}]}, {"timestamp": 1595516176, "sha": "ed33a99d", "message": "chore(measure_theory/l1_space): make `measure` argument of `integrable` optional (#3508)\nOther changes:\n* a few trivial lemmas;\n* fix notation for `∀ᵐ`: now Lean can use it for printing, not only\n for parsing.", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_zero_meas", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "def", "integrable", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}]}, {"timestamp": 1595511847, "sha": "396a66a0", "message": "chore(order/filter/*): use `[nonempty _]` instead of `(_ : nonempty _)` (#3526)\nIn most cases Lean can find an instance automatically.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "at_top_basis", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "has_basis_generate", ["filter"]], ["mod", "theorem", "has_basis_infi_principal", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "infi_ne_bot_of_directed'", ["filter"]], ["mod", "theorem", "infi_sets_eq", ["filter"]], ["mod", "theorem", "map_infi_eq", ["filter"]], ["mod", "theorem", "mem_infi", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1595502508, "sha": "b9beca0b", "message": "chore(set_theory/ordinal): split into multiple files (#3517)\nSplit the file `ordinal.lean` into three files, and add docstrings for all definitions and file-level docstrings. This is just shuffling things around: no new content, no erased content.", "changes": [{"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": null, "newPath": "src/set_theory/cardinal_ordinal.lean", "changes": [["add", "theorem", "add_eq_left", ["cardinal"]], ["add", "theorem", "add_eq_left_iff", ["cardinal"]], ["add", "theorem", "add_eq_max", ["cardinal"]], ["add", "theorem", "add_eq_right", ["cardinal"]], ["add", "theorem", "add_eq_right_iff", ["cardinal"]], ["add", "theorem", "add_eq_self", ["cardinal"]], ["add", "theorem", "add_lt_of_lt", ["cardinal"]], ["add", "theorem", "add_one_eq", ["cardinal"]], ["add", "def", "order_iso", ["cardinal", "aleph'"]], ["add", "theorem", "order_iso_coe", ["cardinal", "aleph'"]], ["add", "def", "aleph'", ["cardinal"]], ["add", "theorem", "aleph'_aleph_idx", ["cardinal"]], ["add", "def", "aleph'_equiv", ["cardinal"]], ["add", "theorem", "aleph'_is_normal", ["cardinal"]], ["add", "theorem", "aleph'_le", ["cardinal"]], ["add", "theorem", "aleph'_le_of_limit", ["cardinal"]], ["add", "theorem", "aleph'_lt", ["cardinal"]], ["add", "theorem", "aleph'_nat", ["cardinal"]], ["add", "theorem", "aleph'_omega", ["cardinal"]], ["add", "theorem", "aleph'_succ", ["cardinal"]], ["add", "theorem", "aleph'_zero", ["cardinal"]], ["add", "def", "aleph", ["cardinal"]], ["add", "theorem", "init", ["cardinal", "aleph_idx"]], ["add", "def", "initial_seg", ["cardinal", "aleph_idx"]], ["add", "theorem", "initial_seg_coe", ["cardinal", "aleph_idx"]], ["add", "def", "order_iso", ["cardinal", "aleph_idx"]], ["add", "theorem", "order_iso_coe", ["cardinal", "aleph_idx"]], ["add", "def", "aleph_idx", ["cardinal"]], ["add", "theorem", "aleph_idx_aleph'", ["cardinal"]], ["add", "theorem", "aleph_idx_le", ["cardinal"]], ["add", "theorem", "aleph_idx_lt", ["cardinal"]], ["add", "theorem", "aleph_is_normal", ["cardinal"]], ["add", "theorem", "aleph_le", ["cardinal"]], ["add", "theorem", "aleph_lt", ["cardinal"]], ["add", "theorem", "aleph_succ", ["cardinal"]], ["add", "theorem", "aleph_zero", ["cardinal"]], ["add", "theorem", "bit0_eq_self", ["cardinal"]], ["add", "theorem", "bit0_le_bit0", ["cardinal"]], ["add", "theorem", "bit0_le_bit1", ["cardinal"]], ["add", "theorem", "bit0_lt_bit0", ["cardinal"]], ["add", "theorem", "bit0_lt_bit1", ["cardinal"]], ["add", "theorem", "bit0_lt_omega", ["cardinal"]], ["add", "theorem", "bit0_ne_zero", ["cardinal"]], ["add", "theorem", "bit1_eq_self_iff", ["cardinal"]], ["add", "theorem", "bit1_le_bit0", ["cardinal"]], ["add", "theorem", "bit1_le_bit1", ["cardinal"]], ["add", "theorem", "bit1_lt_bit0", ["cardinal"]], ["add", "theorem", "bit1_lt_bit1", ["cardinal"]], ["add", "theorem", "bit1_lt_omega", ["cardinal"]], ["add", "theorem", "bit1_ne_zero", ["cardinal"]], ["add", "theorem", "eq_of_add_eq_of_omega_le", ["cardinal"]], ["add", "theorem", "exists_aleph", ["cardinal"]], ["add", "theorem", "extend_function", ["cardinal"]], ["add", "theorem", "extend_function_finite", ["cardinal"]], ["add", "theorem", "extend_function_of_lt", ["cardinal"]], ["add", "theorem", "le_mul_left", ["cardinal"]], ["add", "theorem", "le_mul_right", ["cardinal"]], ["add", "theorem", "mk_bounded_set_le", ["cardinal"]], ["add", "theorem", "mk_bounded_set_le_of_omega_le", ["cardinal"]], ["add", "theorem", "mk_bounded_subset_le", ["cardinal"]], ["add", "theorem", "mk_cardinal", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_finite", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_finite_lift", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_finite_same", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_infinite", ["cardinal"]], ["add", "theorem", "mk_compl_finset_of_omega_le", ["cardinal"]], ["add", "theorem", "mk_compl_of_omega_le", ["cardinal"]], ["add", "theorem", "mk_list_eq_mk", ["cardinal"]], ["add", "theorem", "mul_eq_left", ["cardinal"]], ["add", "theorem", "mul_eq_left_iff", ["cardinal"]], ["add", "theorem", "mul_eq_max", ["cardinal"]], ["add", "theorem", "mul_eq_max_of_omega_le_left", ["cardinal"]], ["add", "theorem", "mul_eq_right", ["cardinal"]], ["add", "theorem", "mul_eq_self", ["cardinal"]], ["add", "theorem", "mul_le_max_of_omega_le_left", ["cardinal"]], ["add", "theorem", "mul_lt_of_lt", ["cardinal"]], ["add", "theorem", "omega_le_aleph'", ["cardinal"]], ["add", "theorem", "omega_le_aleph", ["cardinal"]], ["add", "theorem", "omega_le_bit0", ["cardinal"]], ["add", "theorem", "omega_le_bit1", ["cardinal"]], ["add", "theorem", "one_le_bit0", ["cardinal"]], ["add", "theorem", "one_le_bit1", ["cardinal"]], ["add", "theorem", "one_le_one", ["cardinal"]], ["add", "theorem", "one_lt_bit0", ["cardinal"]], ["add", "theorem", "one_lt_bit1", ["cardinal"]], ["add", "theorem", "one_lt_two", ["cardinal"]], ["add", "theorem", "ord_aleph_is_limit", ["cardinal"]], ["add", "theorem", "ord_is_limit", ["cardinal"]], ["add", "theorem", "pow_le", ["cardinal"]], ["add", "theorem", "power_nat_le", ["cardinal"]], ["add", "theorem", "power_self_eq", ["cardinal"]], ["add", "theorem", "powerlt_omega", ["cardinal"]], ["add", "theorem", "powerlt_omega_le", ["cardinal"]], ["add", "theorem", "type_cardinal", ["cardinal"]], ["add", "theorem", "zero_lt_bit0", ["cardinal"]], ["add", "theorem", "zero_lt_bit1", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "add_eq_left", ["cardinal"]], ["del", "theorem", "add_eq_left_iff", ["cardinal"]], ["del", "theorem", "add_eq_max", ["cardinal"]], ["del", "theorem", "add_eq_right", ["cardinal"]], ["del", "theorem", "add_eq_right_iff", ["cardinal"]], ["del", "theorem", "add_eq_self", ["cardinal"]], ["del", "theorem", "add_lt_of_lt", ["cardinal"]], ["del", "theorem", "add_one_eq", ["cardinal"]], ["del", "theorem", "add_one_of_omega_le", ["cardinal"]], ["del", "def", "order_iso", ["cardinal", "aleph'"]], ["del", "theorem", "order_iso_coe", ["cardinal", "aleph'"]], ["del", "def", "aleph'", ["cardinal"]], ["del", "theorem", "aleph'_aleph_idx", ["cardinal"]], ["del", "def", "aleph'_equiv", ["cardinal"]], ["del", "theorem", "aleph'_is_normal", ["cardinal"]], ["del", "theorem", "aleph'_le", ["cardinal"]], ["del", "theorem", "aleph'_le_of_limit", ["cardinal"]], ["del", "theorem", "aleph'_lt", ["cardinal"]], ["del", "theorem", "aleph'_nat", ["cardinal"]], ["del", "theorem", "aleph'_omega", ["cardinal"]], ["del", "theorem", "aleph'_succ", ["cardinal"]], ["del", "theorem", "aleph'_zero", ["cardinal"]], ["del", "def", "aleph", ["cardinal"]], ["del", "theorem", "init", ["cardinal", "aleph_idx"]], ["del", "def", "initial_seg", ["cardinal", "aleph_idx"]], ["del", "theorem", "initial_seg_coe", ["cardinal", "aleph_idx"]], ["del", "def", "order_iso", ["cardinal", "aleph_idx"]], ["del", "theorem", "order_iso_coe", ["cardinal", "aleph_idx"]], ["del", "def", "aleph_idx", ["cardinal"]], ["del", "theorem", "aleph_idx_aleph'", ["cardinal"]], ["del", "theorem", "aleph_idx_le", ["cardinal"]], ["del", "theorem", "aleph_idx_lt", ["cardinal"]], ["del", "theorem", "aleph_is_normal", ["cardinal"]], ["del", "theorem", "aleph_le", ["cardinal"]], ["del", "theorem", "aleph_lt", ["cardinal"]], ["del", "theorem", "aleph_succ", ["cardinal"]], ["del", "theorem", "aleph_zero", ["cardinal"]], ["del", "theorem", "bit0_eq_self", ["cardinal"]], ["del", "theorem", "bit0_le_bit0", ["cardinal"]], ["del", "theorem", "bit0_le_bit1", ["cardinal"]], ["del", "theorem", "bit0_lt_bit0", ["cardinal"]], ["del", "theorem", "bit0_lt_bit1", ["cardinal"]], ["del", "theorem", "bit0_lt_omega", ["cardinal"]], ["del", "theorem", "bit0_ne_zero", ["cardinal"]], ["del", "theorem", "bit1_eq_self_iff", ["cardinal"]], ["del", "theorem", "bit1_le_bit0", ["cardinal"]], ["del", "theorem", "bit1_le_bit1", ["cardinal"]], ["del", "theorem", "bit1_lt_bit0", ["cardinal"]], ["del", "theorem", "bit1_lt_bit1", ["cardinal"]], ["del", "theorem", "bit1_lt_omega", ["cardinal"]], ["del", "theorem", "bit1_ne_zero", ["cardinal"]], ["del", "theorem", "eq_of_add_eq_of_omega_le", ["cardinal"]], ["del", "theorem", "exists_aleph", ["cardinal"]], ["del", "theorem", "extend_function", ["cardinal"]], ["del", "theorem", "extend_function_finite", ["cardinal"]], ["del", "theorem", "extend_function_of_lt", ["cardinal"]], ["del", "theorem", "le_mul_left", ["cardinal"]], ["del", "theorem", "le_mul_right", ["cardinal"]], ["del", "theorem", "mk_bounded_set_le", ["cardinal"]], ["del", "theorem", "mk_bounded_set_le_of_omega_le", ["cardinal"]], ["del", "theorem", "mk_bounded_subset_le", ["cardinal"]], ["del", "theorem", "mk_cardinal", ["cardinal"]], ["del", "theorem", "mk_compl_eq_mk_compl_finite", ["cardinal"]], ["del", "theorem", "mk_compl_eq_mk_compl_finite_lift", ["cardinal"]], ["del", "theorem", "mk_compl_eq_mk_compl_finite_same", ["cardinal"]], ["del", "theorem", "mk_compl_eq_mk_compl_infinite", ["cardinal"]], ["del", "theorem", "mk_compl_finset_of_omega_le", ["cardinal"]], ["del", "theorem", "mk_compl_of_omega_le", ["cardinal"]], ["del", "theorem", "mk_list_eq_mk", ["cardinal"]], ["del", "theorem", "mul_eq_left", ["cardinal"]], ["del", "theorem", "mul_eq_left_iff", ["cardinal"]], ["del", "theorem", "mul_eq_max", ["cardinal"]], ["del", "theorem", "mul_eq_max_of_omega_le_left", ["cardinal"]], ["del", "theorem", "mul_eq_right", ["cardinal"]], ["del", "theorem", "mul_eq_self", ["cardinal"]], ["del", "theorem", "mul_le_max_of_omega_le_left", ["cardinal"]], ["del", "theorem", "mul_lt_of_lt", ["cardinal"]], ["del", "theorem", "omega_le_aleph'", ["cardinal"]], ["del", "theorem", "omega_le_aleph", ["cardinal"]], ["del", "theorem", "omega_le_bit0", ["cardinal"]], ["del", "theorem", "omega_le_bit1", ["cardinal"]], ["del", "theorem", "one_le_bit0", ["cardinal"]], ["del", "theorem", "one_le_bit1", ["cardinal"]], ["del", "theorem", "one_le_one", ["cardinal"]], ["del", "theorem", "one_lt_bit0", ["cardinal"]], ["del", "theorem", "one_lt_bit1", ["cardinal"]], ["del", "theorem", "one_lt_two", ["cardinal"]], ["del", "theorem", "ord_aleph_is_limit", ["cardinal"]], ["del", "theorem", "ord_is_limit", ["cardinal"]], ["del", "theorem", "ord_omega", ["cardinal"]], ["del", "theorem", "pow_le", ["cardinal"]], ["del", "theorem", "power_nat_le", ["cardinal"]], ["del", "theorem", "power_self_eq", ["cardinal"]], ["del", "theorem", "powerlt_omega", ["cardinal"]], ["del", "theorem", "powerlt_omega_le", ["cardinal"]], ["del", "theorem", "type_cardinal", ["cardinal"]], ["del", "theorem", "zero_lt_bit0", ["cardinal"]], ["del", "theorem", "zero_lt_bit1", ["cardinal"]], ["del", "def", "CNF", ["ordinal"]], ["del", "theorem", "CNF_aux", ["ordinal"]], ["del", "theorem", "CNF_foldr", ["ordinal"]], ["del", "theorem", "CNF_fst_le", ["ordinal"]], ["del", "theorem", "CNF_fst_le_log", ["ordinal"]], ["del", "theorem", "CNF_ne_zero", ["ordinal"]], ["del", "theorem", "CNF_pairwise", ["ordinal"]], ["del", "theorem", "CNF_pairwise_aux", ["ordinal"]], ["del", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["del", "theorem", "CNF_rec_zero", ["ordinal"]], ["del", "theorem", "CNF_snd_lt", ["ordinal"]], ["del", "theorem", "CNF_sorted", ["ordinal"]], ["del", "theorem", "CNF_zero", ["ordinal"]], ["del", "theorem", "add_absorp", ["ordinal"]], ["del", "theorem", "add_absorp_iff", ["ordinal"]], ["del", "theorem", "add_is_limit", ["ordinal"]], ["del", "theorem", "add_is_normal", ["ordinal"]], ["del", "theorem", "add_le_add_iff_left", ["ordinal"]], ["del", "theorem", "add_le_add_iff_right", ["ordinal"]], ["del", "theorem", "add_le_of_limit", ["ordinal"]], ["del", "theorem", "add_left_cancel", ["ordinal"]], ["del", "theorem", "add_lt_add_iff_left", ["ordinal"]], ["del", "theorem", "add_lt_omega", ["ordinal"]], ["del", "theorem", "add_lt_omega_power", ["ordinal"]], ["del", "theorem", "add_mul_limit", ["ordinal"]], ["del", "theorem", "add_mul_limit_aux", ["ordinal"]], ["del", "theorem", "add_mul_succ", ["ordinal"]], ["del", "theorem", "add_omega", ["ordinal"]], ["del", "theorem", "add_omega_power", ["ordinal"]], ["del", "theorem", "add_right_cancel", ["ordinal"]], ["del", "theorem", "add_sub_add_cancel", ["ordinal"]], ["del", "theorem", "add_sub_cancel", ["ordinal"]], ["del", "theorem", "add_sub_cancel_of_le", ["ordinal"]], ["del", "theorem", "add_succ", ["ordinal"]], ["del", "def", "bsup", ["ordinal"]], ["del", "theorem", "bsup_id", ["ordinal"]], ["del", "theorem", "bsup_le", ["ordinal"]], ["del", "theorem", "bsup_type", ["ordinal"]], ["del", "theorem", "card_eq_nat", ["ordinal"]], ["del", "theorem", "card_eq_zero", ["ordinal"]], ["del", "theorem", "card_le_nat", ["ordinal"]], ["del", "theorem", "card_lt_nat", ["ordinal"]], ["del", "theorem", "card_mul", ["ordinal"]], ["del", "theorem", "card_succ", ["ordinal"]], ["del", "def", "deriv", ["ordinal"]], ["del", "theorem", "deriv_is_normal", ["ordinal"]], ["del", "theorem", "deriv_limit", ["ordinal"]], ["del", "theorem", "deriv_succ", ["ordinal"]], ["del", "theorem", "deriv_zero", ["ordinal"]], ["del", "theorem", "div_add_mod", ["ordinal"]], ["del", "theorem", "div_def", ["ordinal"]], ["del", "theorem", "div_eq_zero_of_lt", ["ordinal"]], ["del", "theorem", "div_le", ["ordinal"]], ["del", "theorem", "div_le_of_le_mul", ["ordinal"]], ["del", "theorem", "div_lt", ["ordinal"]], ["del", "theorem", "div_mul_cancel", ["ordinal"]], ["del", "theorem", "div_one", ["ordinal"]], ["del", "theorem", "div_self", ["ordinal"]], ["del", "theorem", "div_zero", ["ordinal"]], ["del", "theorem", "dvd_add", ["ordinal"]], ["del", "theorem", "dvd_add_iff", ["ordinal"]], ["del", "theorem", "dvd_antisymm", ["ordinal"]], ["del", "theorem", "dvd_def", ["ordinal"]], ["del", "theorem", "dvd_mul", ["ordinal"]], ["del", "theorem", "dvd_mul_of_dvd", ["ordinal"]], ["del", "theorem", "dvd_trans", ["ordinal"]], ["del", "theorem", "dvd_zero", ["ordinal"]], ["del", "theorem", "fintype_card", ["ordinal"]], ["del", "theorem", "has_succ_of_is_limit", ["ordinal"]], ["del", "theorem", "nat_lt", ["ordinal", "is_limit"]], ["del", "theorem", "one_lt", ["ordinal", "is_limit"]], ["del", "theorem", "pos", ["ordinal", "is_limit"]], ["del", "def", "is_limit", ["ordinal"]], ["del", "theorem", "is_limit_add_iff", ["ordinal"]], ["del", "theorem", "is_limit_iff_omega_dvd", ["ordinal"]], ["del", "theorem", "bsup", ["ordinal", "is_normal"]], ["del", "theorem", "bsup_eq", ["ordinal", "is_normal"]], ["del", "theorem", "deriv_fp", ["ordinal", "is_normal"]], ["del", "theorem", "fp_iff_deriv", ["ordinal", "is_normal"]], ["del", "theorem", "inj", ["ordinal", "is_normal"]], ["del", "theorem", "is_limit", ["ordinal", "is_normal"]], ["del", "theorem", "le_iff", ["ordinal", "is_normal"]], ["del", "theorem", "le_nfp", ["ordinal", "is_normal"]], ["del", "theorem", "le_self", ["ordinal", "is_normal"]], ["del", "theorem", "le_set'", ["ordinal", "is_normal"]], ["del", "theorem", "le_set", ["ordinal", "is_normal"]], ["del", "theorem", "limit_le", ["ordinal", "is_normal"]], ["del", "theorem", "limit_lt", ["ordinal", "is_normal"]], ["del", "theorem", "lt_iff", ["ordinal", "is_normal"]], ["del", "theorem", "lt_nfp", ["ordinal", "is_normal"]], ["del", "theorem", "nfp_fp", ["ordinal", "is_normal"]], ["del", "theorem", "nfp_le", ["ordinal", "is_normal"]], ["del", "theorem", "nfp_le_fp", ["ordinal", "is_normal"]], ["del", "theorem", "refl", ["ordinal", "is_normal"]], ["del", "theorem", "sup", ["ordinal", "is_normal"]], ["del", "theorem", "trans", ["ordinal", "is_normal"]], ["del", "def", "is_normal", ["ordinal"]], ["del", "theorem", "iterate_le_nfp", ["ordinal"]], ["del", "theorem", "le_add_sub", ["ordinal"]], ["del", "theorem", "le_bsup", ["ordinal"]], ["del", "theorem", "le_div", ["ordinal"]], ["del", "theorem", "le_log", ["ordinal"]], ["del", "theorem", "le_nfp_self", ["ordinal"]], ["del", "theorem", "le_of_dvd", ["ordinal"]], ["del", "theorem", "le_of_mul_le_mul_left", ["ordinal"]], ["del", "theorem", "le_power_self", ["ordinal"]], ["del", "theorem", "le_succ_of_is_limit", ["ordinal"]], ["del", "theorem", "le_sup", ["ordinal"]], ["del", "theorem", "lift_add", ["ordinal"]], ["del", "theorem", "lift_is_limit", ["ordinal"]], ["del", "theorem", "lift_is_succ", ["ordinal"]], ["del", "theorem", "lift_mul", ["ordinal"]], ["del", "theorem", "lift_nat_cast", ["ordinal"]], ["del", "theorem", "lift_pred", ["ordinal"]], ["del", "theorem", "lift_succ", ["ordinal"]], ["del", "theorem", "lift_type_fin", ["ordinal"]], ["del", "theorem", "limit_le", ["ordinal"]], ["del", "def", "limit_rec_on", ["ordinal"]], ["del", "theorem", "limit_rec_on_limit", ["ordinal"]], ["del", "theorem", "limit_rec_on_succ", ["ordinal"]], ["del", "theorem", "limit_rec_on_zero", ["ordinal"]], ["del", "def", "log", ["ordinal"]], ["del", "theorem", "log_def", ["ordinal"]], ["del", "theorem", "log_le_log", ["ordinal"]], ["del", "theorem", "log_le_self", ["ordinal"]], ["del", "theorem", "log_lt", ["ordinal"]], ["del", "theorem", "log_not_one_lt", ["ordinal"]], ["del", "theorem", "log_zero", ["ordinal"]], ["del", "theorem", "lt_bsup", ["ordinal"]], ["del", "theorem", "lt_div", ["ordinal"]], ["del", "theorem", "lt_limit", ["ordinal"]], ["del", "theorem", "lt_mul_div_add", ["ordinal"]], ["del", "theorem", "lt_mul_of_limit", ["ordinal"]], ["del", "theorem", "lt_mul_succ_div", ["ordinal"]], ["del", "theorem", "lt_of_add_lt_add_right", ["ordinal"]], ["del", "theorem", "lt_omega", ["ordinal"]], ["del", "theorem", "lt_power_of_limit", ["ordinal"]], ["del", "theorem", "lt_power_succ_log", ["ordinal"]], ["del", "theorem", "lt_pred", ["ordinal"]], ["del", "theorem", "lt_sub", ["ordinal"]], ["del", "theorem", "lt_succ", ["ordinal"]], ["del", "theorem", "lt_sup", ["ordinal"]], ["del", "theorem", "mk_initial_seg", ["ordinal"]], ["del", "theorem", "mod_def", ["ordinal"]], ["del", "theorem", "mod_eq_of_lt", ["ordinal"]], ["del", "theorem", "mod_lt", ["ordinal"]], ["del", "theorem", "mod_one", ["ordinal"]], ["del", "theorem", "mod_self", ["ordinal"]], ["del", "theorem", "mod_zero", ["ordinal"]], ["del", "theorem", "mul_add", ["ordinal"]], ["del", "theorem", "mul_add_div", ["ordinal"]], ["del", "theorem", "mul_add_one", ["ordinal"]], ["del", "theorem", "mul_div_cancel", ["ordinal"]], ["del", "theorem", "mul_div_le", ["ordinal"]], ["del", "theorem", "mul_is_limit", ["ordinal"]], ["del", "theorem", "mul_is_limit_left", ["ordinal"]], ["del", "theorem", "mul_is_normal", ["ordinal"]], ["del", "theorem", "mul_le_mul", ["ordinal"]], ["del", "theorem", "mul_le_mul_iff_left", ["ordinal"]], ["del", "theorem", "mul_le_mul_left", ["ordinal"]], ["del", "theorem", "mul_le_mul_right", ["ordinal"]], ["del", "theorem", "mul_le_of_limit", ["ordinal"]], ["del", "theorem", "mul_lt_mul_iff_left", ["ordinal"]], ["del", "theorem", "mul_lt_mul_of_pos_left", ["ordinal"]], ["del", "theorem", "mul_lt_of_lt_div", ["ordinal"]], ["del", "theorem", "mul_lt_omega", ["ordinal"]], ["del", "theorem", "mul_lt_omega_power", ["ordinal"]], ["del", "theorem", "mul_ne_zero", ["ordinal"]], ["del", "theorem", "mul_omega", ["ordinal"]], ["del", "theorem", "mul_omega_dvd", ["ordinal"]], ["del", "theorem", "mul_omega_power_power", ["ordinal"]], ["del", "theorem", "mul_pos", ["ordinal"]], ["del", "theorem", "mul_right_inj", ["ordinal"]], ["del", "theorem", "mul_sub", ["ordinal"]], ["del", "theorem", "mul_succ", ["ordinal"]], ["del", "theorem", "mul_zero", ["ordinal"]], ["del", "theorem", "nat_cast_div", ["ordinal"]], ["del", "theorem", "nat_cast_eq_zero", ["ordinal"]], ["del", "theorem", "nat_cast_inj", ["ordinal"]], ["del", "theorem", "nat_cast_le", ["ordinal"]], ["del", "theorem", "nat_cast_lt", ["ordinal"]], ["del", "theorem", "nat_cast_mod", ["ordinal"]], ["del", "theorem", "nat_cast_mul", ["ordinal"]], ["del", "theorem", "nat_cast_ne_zero", ["ordinal"]], ["del", "theorem", "nat_cast_pos", ["ordinal"]], ["del", "theorem", "nat_cast_power", ["ordinal"]], ["del", "theorem", "nat_cast_sub", ["ordinal"]], ["del", "theorem", "nat_cast_succ", ["ordinal"]], ["del", "theorem", "nat_le_card", ["ordinal"]], ["del", "theorem", "nat_lt_card", ["ordinal"]], ["del", "theorem", "nat_lt_limit", ["ordinal"]], ["del", "theorem", "nat_lt_omega", ["ordinal"]], ["del", "def", "nfp", ["ordinal"]], ["del", "theorem", "nfp_eq_self", ["ordinal"]], ["del", "theorem", "not_succ_is_limit", ["ordinal"]], ["del", "theorem", "not_succ_of_is_limit", ["ordinal"]], ["del", "theorem", "not_zero_is_limit", ["ordinal"]], ["del", "theorem", "omega_is_limit", ["ordinal"]], ["del", "theorem", "omega_le", ["ordinal"]], ["del", "theorem", "omega_le_of_is_limit", ["ordinal"]], ["del", "theorem", "omega_ne_zero", ["ordinal"]], ["del", "theorem", "omega_pos", ["ordinal"]], ["del", "theorem", "one_CNF", ["ordinal"]], ["del", "theorem", "one_add_of_omega_le", ["ordinal"]], ["del", "theorem", "one_add_omega", ["ordinal"]], ["del", "theorem", "one_dvd", ["ordinal"]], ["del", "theorem", "one_le_iff_ne_zero", ["ordinal"]], ["del", "theorem", "one_le_iff_pos", ["ordinal"]], ["del", "theorem", "one_lt_omega", ["ordinal"]], ["del", "theorem", "one_power", ["ordinal"]], ["del", "def", "power", ["ordinal"]], ["del", "theorem", "power_add", ["ordinal"]], ["del", "theorem", "power_dvd_power", ["ordinal"]], ["del", "theorem", "power_dvd_power_iff", ["ordinal"]], ["del", "theorem", "power_is_limit", ["ordinal"]], ["del", "theorem", "power_is_limit_left", ["ordinal"]], ["del", "theorem", "power_is_normal", ["ordinal"]], ["del", "theorem", "power_le_of_limit", ["ordinal"]], ["del", "theorem", "power_le_power_iff_right", ["ordinal"]], ["del", "theorem", "power_le_power_left", ["ordinal"]], ["del", "theorem", "power_le_power_right", ["ordinal"]], ["del", "theorem", "power_limit", ["ordinal"]], ["del", "theorem", "power_log_le", ["ordinal"]], ["del", "theorem", "power_lt_omega", ["ordinal"]], ["del", "theorem", "power_lt_power_iff_right", ["ordinal"]], ["del", "theorem", "power_lt_power_left_of_succ", ["ordinal"]], ["del", "theorem", "power_mul", ["ordinal"]], ["del", "theorem", "power_ne_zero", ["ordinal"]], ["del", "theorem", "power_omega", ["ordinal"]], ["del", "theorem", "power_one", ["ordinal"]], ["del", "theorem", "power_pos", ["ordinal"]], ["del", "theorem", "power_right_inj", ["ordinal"]], ["del", "theorem", "power_succ", ["ordinal"]], ["del", "theorem", "power_zero", ["ordinal"]], ["del", "def", "pred", ["ordinal"]], ["del", "theorem", "pred_eq_iff_not_succ", ["ordinal"]], ["del", "theorem", "pred_le", ["ordinal"]], ["del", "theorem", "pred_le_self", ["ordinal"]], ["del", "theorem", "pred_lt_iff_is_succ", ["ordinal"]], ["del", "theorem", "pred_succ", ["ordinal"]], ["del", "def", "sub", ["ordinal"]], ["del", "theorem", "sub_eq_of_add_eq", ["ordinal"]], ["del", "theorem", "sub_eq_zero_iff_le", ["ordinal"]], ["del", "theorem", "sub_is_limit", ["ordinal"]], ["del", "theorem", "sub_le", ["ordinal"]], ["del", "theorem", "sub_le_self", ["ordinal"]], ["del", "theorem", "sub_self", ["ordinal"]], ["del", "theorem", "sub_sub", ["ordinal"]], ["del", "theorem", "sub_zero", ["ordinal"]], ["del", "theorem", "succ_inj", ["ordinal"]], ["del", "theorem", "succ_le_succ", ["ordinal"]], ["del", "theorem", "succ_log_def", ["ordinal"]], ["del", "theorem", "succ_lt_of_is_limit", ["ordinal"]], ["del", "theorem", "succ_lt_of_not_succ", ["ordinal"]], ["del", "theorem", "succ_lt_succ", ["ordinal"]], ["del", "theorem", "succ_ne_zero", ["ordinal"]], ["del", "theorem", "succ_pos", ["ordinal"]], ["del", "theorem", "succ_pred_iff_is_succ", ["ordinal"]], ["del", "theorem", "succ_zero", ["ordinal"]], ["del", "def", "sup", ["ordinal"]], ["del", "theorem", "sup_le", ["ordinal"]], ["del", "theorem", "sup_ord", ["ordinal"]], ["del", "theorem", "sup_succ", ["ordinal"]], ["del", "theorem", "type_eq_zero_iff_empty", ["ordinal"]], ["del", "theorem", "type_fin", ["ordinal"]], ["del", "theorem", "type_mul", ["ordinal"]], ["del", "theorem", "type_ne_zero_iff_nonempty", ["ordinal"]], ["del", "theorem", "type_subrel_lt", ["ordinal"]], ["del", "theorem", "unbounded_range_of_sup_ge", ["ordinal"]], ["del", "theorem", "zero_CNF", ["ordinal"]], ["del", "theorem", "zero_div", ["ordinal"]], ["del", "theorem", "zero_dvd", ["ordinal"]], ["del", "theorem", "zero_lt_one", ["ordinal"]], ["del", "theorem", "zero_mod", ["ordinal"]], ["del", "theorem", "zero_mul", ["ordinal"]], ["del", "theorem", "zero_or_succ_or_limit", ["ordinal"]], ["del", "theorem", "zero_power'", ["ordinal"]], ["del", "theorem", "zero_power", ["ordinal"]], ["del", "theorem", "zero_sub", ["ordinal"]]]}, {"oldPath": null, "newPath": "src/set_theory/ordinal_arithmetic.lean", "changes": [["add", "theorem", "add_one_of_omega_le", ["cardinal"]], ["add", "theorem", "ord_omega", ["cardinal"]], ["add", "theorem", "CNF_aux", ["ordinal"]], ["add", "theorem", "CNF_foldr", ["ordinal"]], ["add", "theorem", "CNF_fst_le", ["ordinal"]], ["add", "theorem", "CNF_fst_le_log", ["ordinal"]], ["add", "theorem", "CNF_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_pairwise", ["ordinal"]], ["add", "theorem", "CNF_pairwise_aux", ["ordinal"]], ["add", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_rec_zero", ["ordinal"]], ["add", "theorem", "CNF_snd_lt", ["ordinal"]], ["add", "theorem", "CNF_sorted", ["ordinal"]], ["add", "theorem", "CNF_zero", ["ordinal"]], ["add", "theorem", "add_absorp", ["ordinal"]], ["add", "theorem", "add_absorp_iff", ["ordinal"]], ["add", "theorem", "add_is_limit", ["ordinal"]], ["add", "theorem", "add_is_normal", ["ordinal"]], ["add", "theorem", "add_le_add_iff_left", ["ordinal"]], ["add", "theorem", "add_le_add_iff_right", ["ordinal"]], ["add", "theorem", "add_le_of_limit", ["ordinal"]], ["add", "theorem", "add_left_cancel", ["ordinal"]], ["add", "theorem", "add_lt_add_iff_left", ["ordinal"]], ["add", "theorem", "add_lt_omega", ["ordinal"]], ["add", "theorem", "add_lt_omega_power", ["ordinal"]], ["add", "theorem", "add_mul_limit", ["ordinal"]], ["add", "theorem", "add_mul_limit_aux", ["ordinal"]], ["add", "theorem", "add_mul_succ", ["ordinal"]], ["add", "theorem", "add_omega", ["ordinal"]], ["add", "theorem", "add_omega_power", ["ordinal"]], ["add", "theorem", "add_right_cancel", ["ordinal"]], ["add", "theorem", "add_sub_add_cancel", ["ordinal"]], ["add", "theorem", "add_sub_cancel", ["ordinal"]], ["add", "theorem", "add_sub_cancel_of_le", ["ordinal"]], ["add", "theorem", "add_succ", ["ordinal"]], ["add", "def", "bsup", ["ordinal"]], ["add", "theorem", "bsup_id", ["ordinal"]], ["add", "theorem", "bsup_le", ["ordinal"]], ["add", "theorem", "bsup_type", ["ordinal"]], ["add", "theorem", "card_eq_nat", ["ordinal"]], ["add", "theorem", "card_eq_zero", ["ordinal"]], ["add", "theorem", "card_le_nat", ["ordinal"]], ["add", "theorem", "card_lt_nat", ["ordinal"]], ["add", "theorem", "card_mul", ["ordinal"]], ["add", "theorem", "card_succ", ["ordinal"]], ["add", "def", "deriv", ["ordinal"]], ["add", "theorem", "deriv_is_normal", ["ordinal"]], ["add", "theorem", "deriv_limit", ["ordinal"]], ["add", "theorem", "deriv_succ", ["ordinal"]], ["add", "theorem", "deriv_zero", ["ordinal"]], ["add", "theorem", "div_add_mod", ["ordinal"]], ["add", "theorem", "div_def", ["ordinal"]], ["add", "theorem", "div_eq_zero_of_lt", ["ordinal"]], ["add", "theorem", "div_le", ["ordinal"]], ["add", "theorem", "div_le_of_le_mul", ["ordinal"]], ["add", "theorem", "div_lt", ["ordinal"]], ["add", "theorem", "div_mul_cancel", ["ordinal"]], ["add", "theorem", "div_one", ["ordinal"]], ["add", "theorem", "div_self", ["ordinal"]], ["add", "theorem", "div_zero", ["ordinal"]], ["add", "theorem", "dvd_add", ["ordinal"]], ["add", "theorem", "dvd_add_iff", ["ordinal"]], ["add", "theorem", "dvd_antisymm", ["ordinal"]], ["add", "theorem", "dvd_def", ["ordinal"]], ["add", "theorem", "dvd_mul", ["ordinal"]], ["add", "theorem", "dvd_mul_of_dvd", ["ordinal"]], ["add", "theorem", "dvd_trans", ["ordinal"]], ["add", "theorem", "dvd_zero", ["ordinal"]], ["add", "theorem", "fintype_card", ["ordinal"]], ["add", "theorem", "has_succ_of_is_limit", ["ordinal"]], ["add", "theorem", "nat_lt", ["ordinal", "is_limit"]], ["add", "theorem", "one_lt", ["ordinal", "is_limit"]], ["add", "theorem", "pos", ["ordinal", "is_limit"]], ["add", "def", "is_limit", ["ordinal"]], ["add", "theorem", "is_limit_add_iff", ["ordinal"]], ["add", "theorem", "is_limit_iff_omega_dvd", ["ordinal"]], ["add", "theorem", "bsup", ["ordinal", "is_normal"]], ["add", "theorem", "bsup_eq", ["ordinal", "is_normal"]], ["add", "theorem", "deriv_fp", ["ordinal", "is_normal"]], ["add", "theorem", "fp_iff_deriv", ["ordinal", "is_normal"]], ["add", "theorem", "inj", ["ordinal", "is_normal"]], ["add", "theorem", "is_limit", ["ordinal", "is_normal"]], ["add", "theorem", "le_iff", ["ordinal", "is_normal"]], ["add", "theorem", "le_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "le_self", ["ordinal", "is_normal"]], ["add", "theorem", "le_set'", ["ordinal", "is_normal"]], ["add", "theorem", "le_set", ["ordinal", "is_normal"]], ["add", "theorem", "limit_le", ["ordinal", "is_normal"]], ["add", "theorem", "limit_lt", ["ordinal", "is_normal"]], ["add", "theorem", "lt_iff", ["ordinal", "is_normal"]], ["add", "theorem", "lt_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_fp", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_le", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_le_fp", ["ordinal", "is_normal"]], ["add", "theorem", "refl", ["ordinal", "is_normal"]], ["add", "theorem", "sup", ["ordinal", "is_normal"]], ["add", "theorem", "trans", ["ordinal", "is_normal"]], ["add", "def", "is_normal", ["ordinal"]], ["add", "theorem", "iterate_le_nfp", ["ordinal"]], ["add", "theorem", "le_add_sub", ["ordinal"]], ["add", "theorem", "le_bsup", ["ordinal"]], ["add", "theorem", "le_div", ["ordinal"]], ["add", "theorem", "le_log", ["ordinal"]], ["add", "theorem", "le_nfp_self", ["ordinal"]], ["add", "theorem", "le_of_dvd", ["ordinal"]], ["add", "theorem", "le_of_mul_le_mul_left", ["ordinal"]], ["add", "theorem", "le_power_self", ["ordinal"]], ["add", "theorem", "le_succ_of_is_limit", ["ordinal"]], ["add", "theorem", "le_sup", ["ordinal"]], ["add", "theorem", "lift_add", ["ordinal"]], ["add", "theorem", "lift_is_limit", ["ordinal"]], ["add", "theorem", "lift_is_succ", ["ordinal"]], ["add", "theorem", "lift_mul", ["ordinal"]], ["add", "theorem", "lift_nat_cast", ["ordinal"]], ["add", "theorem", "lift_pred", ["ordinal"]], ["add", "theorem", "lift_succ", ["ordinal"]], ["add", "theorem", "lift_type_fin", ["ordinal"]], ["add", "theorem", "limit_le", ["ordinal"]], ["add", "def", "limit_rec_on", ["ordinal"]], ["add", "theorem", "limit_rec_on_limit", ["ordinal"]], ["add", "theorem", "limit_rec_on_succ", ["ordinal"]], ["add", "theorem", "limit_rec_on_zero", ["ordinal"]], ["add", "def", "log", ["ordinal"]], ["add", "theorem", "log_def", ["ordinal"]], ["add", "theorem", "log_le_log", ["ordinal"]], ["add", "theorem", "log_le_self", ["ordinal"]], ["add", "theorem", "log_lt", ["ordinal"]], ["add", "theorem", "log_not_one_lt", ["ordinal"]], ["add", "theorem", "log_zero", ["ordinal"]], ["add", "theorem", "lt_bsup", ["ordinal"]], ["add", "theorem", "lt_div", ["ordinal"]], ["add", "theorem", "lt_limit", ["ordinal"]], ["add", "theorem", "lt_mul_div_add", ["ordinal"]], ["add", "theorem", "lt_mul_of_limit", ["ordinal"]], ["add", "theorem", "lt_mul_succ_div", ["ordinal"]], ["add", "theorem", "lt_of_add_lt_add_right", ["ordinal"]], ["add", "theorem", "lt_omega", ["ordinal"]], ["add", "theorem", "lt_power_of_limit", ["ordinal"]], ["add", "theorem", "lt_power_succ_log", ["ordinal"]], ["add", "theorem", "lt_pred", ["ordinal"]], ["add", "theorem", "lt_sub", ["ordinal"]], ["add", "theorem", "lt_succ", ["ordinal"]], ["add", "theorem", "lt_sup", ["ordinal"]], ["add", "theorem", "mk_initial_seg", ["ordinal"]], ["add", "theorem", "mod_def", ["ordinal"]], ["add", "theorem", "mod_eq_of_lt", ["ordinal"]], ["add", "theorem", "mod_lt", ["ordinal"]], ["add", "theorem", "mod_one", ["ordinal"]], ["add", "theorem", "mod_self", ["ordinal"]], ["add", "theorem", "mod_zero", ["ordinal"]], ["add", "theorem", "mul_add", ["ordinal"]], ["add", "theorem", "mul_add_div", ["ordinal"]], ["add", "theorem", "mul_add_one", ["ordinal"]], ["add", "theorem", "mul_div_cancel", ["ordinal"]], ["add", "theorem", "mul_div_le", ["ordinal"]], ["add", "theorem", "mul_is_limit", ["ordinal"]], ["add", "theorem", "mul_is_limit_left", ["ordinal"]], ["add", "theorem", "mul_is_normal", ["ordinal"]], ["add", "theorem", "mul_le_mul", ["ordinal"]], ["add", "theorem", "mul_le_mul_iff_left", ["ordinal"]], ["add", "theorem", "mul_le_mul_left", ["ordinal"]], ["add", "theorem", "mul_le_mul_right", ["ordinal"]], ["add", "theorem", "mul_le_of_limit", ["ordinal"]], ["add", "theorem", "mul_lt_mul_iff_left", ["ordinal"]], ["add", "theorem", "mul_lt_mul_of_pos_left", ["ordinal"]], ["add", "theorem", "mul_lt_of_lt_div", ["ordinal"]], ["add", "theorem", "mul_lt_omega", ["ordinal"]], ["add", "theorem", "mul_lt_omega_power", ["ordinal"]], ["add", "theorem", "mul_ne_zero", ["ordinal"]], ["add", "theorem", "mul_omega", ["ordinal"]], ["add", "theorem", "mul_omega_dvd", ["ordinal"]], ["add", "theorem", "mul_omega_power_power", ["ordinal"]], ["add", "theorem", "mul_pos", ["ordinal"]], ["add", "theorem", "mul_right_inj", ["ordinal"]], ["add", "theorem", "mul_sub", ["ordinal"]], ["add", "theorem", "mul_succ", ["ordinal"]], ["add", "theorem", "mul_zero", ["ordinal"]], ["add", "theorem", "nat_cast_div", ["ordinal"]], ["add", "theorem", "nat_cast_eq_zero", ["ordinal"]], ["add", "theorem", "nat_cast_inj", ["ordinal"]], ["add", "theorem", "nat_cast_le", ["ordinal"]], ["add", "theorem", "nat_cast_lt", ["ordinal"]], ["add", "theorem", "nat_cast_mod", ["ordinal"]], ["add", "theorem", "nat_cast_mul", ["ordinal"]], ["add", "theorem", "nat_cast_ne_zero", ["ordinal"]], ["add", "theorem", "nat_cast_pos", ["ordinal"]], ["add", "theorem", "nat_cast_power", ["ordinal"]], ["add", "theorem", "nat_cast_sub", ["ordinal"]], ["add", "theorem", "nat_cast_succ", ["ordinal"]], ["add", "theorem", "nat_le_card", ["ordinal"]], ["add", "theorem", "nat_lt_card", ["ordinal"]], ["add", "theorem", "nat_lt_limit", ["ordinal"]], ["add", "theorem", "nat_lt_omega", ["ordinal"]], ["add", "def", "nfp", ["ordinal"]], ["add", "theorem", "nfp_eq_self", ["ordinal"]], ["add", "theorem", "not_succ_is_limit", ["ordinal"]], ["add", "theorem", "not_succ_of_is_limit", ["ordinal"]], ["add", "theorem", "not_zero_is_limit", ["ordinal"]], ["add", "theorem", "omega_is_limit", ["ordinal"]], ["add", "theorem", "omega_le", ["ordinal"]], ["add", "theorem", "omega_le_of_is_limit", ["ordinal"]], ["add", "theorem", "omega_ne_zero", ["ordinal"]], ["add", "theorem", "omega_pos", ["ordinal"]], ["add", "theorem", "one_CNF", ["ordinal"]], ["add", "theorem", "one_add_of_omega_le", ["ordinal"]], ["add", "theorem", "one_add_omega", ["ordinal"]], ["add", "theorem", "one_dvd", ["ordinal"]], ["add", "theorem", "one_le_iff_ne_zero", ["ordinal"]], ["add", "theorem", "one_le_iff_pos", ["ordinal"]], ["add", "theorem", "one_lt_omega", ["ordinal"]], ["add", "theorem", "one_power", ["ordinal"]], ["add", "def", "power", ["ordinal"]], ["add", "theorem", "power_add", ["ordinal"]], ["add", "theorem", "power_dvd_power", ["ordinal"]], ["add", "theorem", "power_dvd_power_iff", ["ordinal"]], ["add", "theorem", "power_is_limit", ["ordinal"]], ["add", "theorem", "power_is_limit_left", ["ordinal"]], ["add", "theorem", "power_is_normal", ["ordinal"]], ["add", "theorem", "power_le_of_limit", ["ordinal"]], ["add", "theorem", "power_le_power_iff_right", ["ordinal"]], ["add", "theorem", "power_le_power_left", ["ordinal"]], ["add", "theorem", "power_le_power_right", ["ordinal"]], ["add", "theorem", "power_limit", ["ordinal"]], ["add", "theorem", "power_log_le", ["ordinal"]], ["add", "theorem", "power_lt_omega", ["ordinal"]], ["add", "theorem", "power_lt_power_iff_right", ["ordinal"]], ["add", "theorem", "power_lt_power_left_of_succ", ["ordinal"]], ["add", "theorem", "power_mul", ["ordinal"]], ["add", "theorem", "power_ne_zero", ["ordinal"]], ["add", "theorem", "power_omega", ["ordinal"]], ["add", "theorem", "power_one", ["ordinal"]], ["add", "theorem", "power_pos", ["ordinal"]], ["add", "theorem", "power_right_inj", ["ordinal"]], ["add", "theorem", "power_succ", ["ordinal"]], ["add", "theorem", "power_zero", ["ordinal"]], ["add", "def", "pred", ["ordinal"]], ["add", "theorem", "pred_eq_iff_not_succ", ["ordinal"]], ["add", "theorem", "pred_le", ["ordinal"]], ["add", "theorem", "pred_le_self", ["ordinal"]], ["add", "theorem", "pred_lt_iff_is_succ", ["ordinal"]], ["add", "theorem", "pred_succ", ["ordinal"]], ["add", "def", "sub", ["ordinal"]], ["add", "theorem", "sub_eq_of_add_eq", ["ordinal"]], ["add", "theorem", "sub_eq_zero_iff_le", ["ordinal"]], ["add", "theorem", "sub_is_limit", ["ordinal"]], ["add", "theorem", "sub_le", ["ordinal"]], ["add", "theorem", "sub_le_self", ["ordinal"]], ["add", "theorem", "sub_self", ["ordinal"]], ["add", "theorem", "sub_sub", ["ordinal"]], ["add", "theorem", "sub_zero", ["ordinal"]], ["add", "theorem", "succ_inj", ["ordinal"]], ["add", "theorem", "succ_le_succ", ["ordinal"]], ["add", "theorem", "succ_log_def", ["ordinal"]], ["add", "theorem", "succ_lt_of_is_limit", ["ordinal"]], ["add", "theorem", "succ_lt_of_not_succ", ["ordinal"]], ["add", "theorem", "succ_lt_succ", ["ordinal"]], ["add", "theorem", "succ_ne_zero", ["ordinal"]], ["add", "theorem", "succ_pos", ["ordinal"]], ["add", "theorem", "succ_pred_iff_is_succ", ["ordinal"]], ["add", "theorem", "succ_zero", ["ordinal"]], ["add", "def", "sup", ["ordinal"]], ["add", "theorem", "sup_le", ["ordinal"]], ["add", "theorem", "sup_ord", ["ordinal"]], ["add", "theorem", "sup_succ", ["ordinal"]], ["add", "theorem", "type_eq_zero_iff_empty", ["ordinal"]], ["add", "theorem", "type_fin", ["ordinal"]], ["add", "theorem", "type_mul", ["ordinal"]], ["add", "theorem", "type_ne_zero_iff_nonempty", ["ordinal"]], ["add", "theorem", "type_subrel_lt", ["ordinal"]], ["add", "theorem", "unbounded_range_of_sup_ge", ["ordinal"]], ["add", "theorem", "zero_CNF", ["ordinal"]], ["add", "theorem", "zero_div", ["ordinal"]], ["add", "theorem", "zero_dvd", ["ordinal"]], ["add", "theorem", "zero_lt_one", ["ordinal"]], ["add", "theorem", "zero_mod", ["ordinal"]], ["add", "theorem", "zero_mul", ["ordinal"]], ["add", "theorem", "zero_or_succ_or_limit", ["ordinal"]], ["add", "theorem", "zero_power'", ["ordinal"]], ["add", "theorem", "zero_power", ["ordinal"]], ["add", "theorem", "zero_sub", ["ordinal"]]]}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": [["mod", "def", "NF", ["onote"]], ["mod", "theorem", "oadd_lt_oadd_1", ["onote"]], ["mod", "theorem", "oadd_lt_oadd_2", ["onote"]], ["mod", "theorem", "oadd_lt_oadd_3", ["onote"]]]}]}, {"timestamp": 1595494323, "sha": "79df8cc4", "message": "refactor(order/filter/at_top): import order.filter.bases (#3523)\nThis way we can use facts about `filter.has_basis` in `filter.at_top`.\nAlso generalize `is_countably_generated_at_top_finset_nat`\nto `at_top` filter on any `encodable` type.", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "at_top_basis'", ["filter"]], ["add", "theorem", "at_top_basis", ["filter"]], ["add", "theorem", "at_top_countable_basis", ["filter"]], ["add", "theorem", "tendsto", ["filter", "has_antimono_basis"]], ["add", "theorem", "subseq_tendsto", ["filter", "is_countably_generated"]], ["add", "theorem", "tendsto_iff_seq_tendsto", ["filter", "is_countably_generated"]], ["add", "theorem", "tendsto_of_seq_tendsto", ["filter", "is_countably_generated"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["del", "theorem", "at_top_basis'", ["filter"]], ["del", "theorem", "at_top_basis", ["filter"]], ["del", "theorem", "tendsto", ["filter", "has_antimono_basis"]], ["add", "theorem", "is_countably_generated", ["filter", "has_countable_basis"]], ["del", "theorem", "subseq_tendsto", ["filter", "is_countably_generated"]], ["del", "theorem", "tendsto_iff_seq_tendsto", ["filter", "is_countably_generated"]], ["del", "theorem", "tendsto_of_seq_tendsto", ["filter", "is_countably_generated"]], ["del", "theorem", "is_countably_generated_at_top_finset_nat", ["filter"]]]}]}, {"timestamp": 1595490613, "sha": "d974457e", "message": "feat(ring_theory/ideal_over): a prime ideal lying over a maximal ideal is maximal (#3488)\nBy making the results in `ideal_over.lean` a bit more general, we can transfer to quotient rings. This allows us to prove a strict inclusion `I < J` of ideals in `S` results in a strict inclusion `I.comap f < J.comap f` if `R` if `f : R ->+* S` is nice enough. As a corollary, a prime ideal lying over a maximal ideal is maximal.", "changes": [{"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "map_monic_eq_zero_iff", ["polynomial"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "comap_eq_top_iff", ["ideal"]], ["add", "theorem", "mem_quotient_iff_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideal_over.lean", "newPath": "src/ring_theory/ideal_over.lean", "changes": [["add", "theorem", "coeff_zero_mem_comap_of_root_mem_of_eval_mem", ["ideal"]], ["add", "theorem", "comap_lt_comap_of_integral_mem_sdiff", ["ideal"]], ["add", "theorem", "comap_lt_comap_of_root_mem_sdiff", ["ideal"]], ["mod", "theorem", "comap_ne_bot_of_algebraic_mem", ["ideal"]], ["mod", "theorem", "comap_ne_bot_of_integral_mem", ["ideal"]], ["add", "theorem", "exists_coeff_mem_comap_sdiff_comap_of_root_mem_sdiff", ["ideal"]], ["add", "theorem", "exists_coeff_ne_zero_mem_comap_of_non_zero_divisor_root_mem", ["ideal"]], ["add", "theorem", "comap_lt_comap", ["ideal", "integral_closure"]], ["add", "theorem", "is_maximal_of_is_maximal_comap", ["ideal", "integral_closure"]], ["add", "theorem", "is_maximal_of_is_integral_of_is_maximal_comap", ["ideal"]], ["add", "theorem", "mem_of_one_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "mk_surjective", ["ideal", "quotient"]]]}]}, {"timestamp": 1595472702, "sha": "7397db78", "message": "chore(data/sym2) : simplify proofs (#3522)\nThis shouldn't change any declarations, only proofs.", "changes": [{"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": [["mod", "theorem", "from_rel_proj_prop", ["sym2"]], ["mod", "theorem", "from_rel_prop", ["sym2"]], ["mod", "def", "is_diag", ["sym2"]], ["mod", "theorem", "map_comp", ["sym2"]], ["mod", "theorem", "map_id", ["sym2"]], ["mod", "theorem", "mk_has_mem", ["sym2"]], ["mod", "theorem", "is_equivalence", ["sym2", "rel"]], ["mod", "theorem", "vmem_other_spec", ["sym2"]]]}]}, {"timestamp": 1595466658, "sha": "c1498391", "message": "chore(topology/uniform_space/basic): golf a proof (#3521)\nAlso prove that a `subsingleton` has a unique `topological_space` structure.", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1595466656, "sha": "4a918fbb", "message": "chore(order/complete_lattice): add `supr/infi_of_empty(')` (#3519)", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_of_empty'", []], ["add", "theorem", "infi_of_empty", []], ["add", "theorem", "supr_of_empty'", []], ["add", "theorem", "supr_of_empty", []]]}]}, {"timestamp": 1595466654, "sha": "827fcd06", "message": "feat(analysis/convex/basic): add lemmas about convex combination of endpoints of intervals (#3482)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "combo_self", ["convex"]], ["add", "theorem", "mem_Icc", ["convex"]], ["add", "theorem", "mem_Ico", ["convex"]], ["add", "theorem", "mem_Ioc", ["convex"]], ["add", "theorem", "mem_Ioo", ["convex"]]]}]}, {"timestamp": 1595462299, "sha": "fbcd8908", "message": "chore(data/subtype,order/complete_lattice): use `coe` instead of `subtype.val` (#3518)", "changes": [{"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "countable_binfi_eq_infi_seq", ["filter"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1595446206, "sha": "1dd69d30", "message": "refactor(data/polynomial): re-organizing (#3512)\nThis builds on #3407, trying to get related material closer together. \nThere shouldn't be any change to the set of declarations, just the order they come in and the imports required to get them.\nThe major changes are:\n1. `data.polynomial.derivative` now has much weaker imports\n2. generally, material has been moved \"upwards\" to the first place it can be done (a lot of material moved out of `data.polynomial.degree` into `data.polynomial.degree.basic` -- essentially `degree` is the material about `degree` that also needs `eval` and friends; a further rename might be appropriate)\n3. some of the later material is no longer a big chain of linear dependencies, but compiles separately", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["del", "theorem", "C_inj", ["polynomial"]], ["del", "theorem", "C_mul'", ["polynomial"]], ["del", "theorem", "eval_mul", ["polynomial"]], ["del", "theorem", "eval_pow", ["polynomial"]], ["del", "theorem", "eval₂_hom", ["polynomial"]], ["del", "theorem", "root_mul_left_of_is_root", ["polynomial"]], ["del", "theorem", "root_mul_right_of_is_root", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "C_mul'", ["polynomial"]], ["add", "theorem", "finset_sum_coeff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/default.lean", "newPath": "src/data/polynomial/default.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": [["del", "theorem", "X_pow_sub_C_ne_zero", ["polynomial"]], ["del", "theorem", "X_sub_C_ne_zero", ["polynomial"]], ["del", "theorem", "coeff_mul_degree_add_degree", ["polynomial"]], ["del", "theorem", "coeff_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["del", "theorem", "degree_X_pow", ["polynomial"]], ["del", "theorem", "degree_X_pow_sub_C", ["polynomial"]], ["del", "theorem", "degree_X_sub_C", ["polynomial"]], ["del", "theorem", "degree_add_C", ["polynomial"]], ["del", "theorem", "degree_add_eq_of_degree_lt", ["polynomial"]], ["del", "theorem", "degree_add_eq_of_leading_coeff_add_ne_zero", ["polynomial"]], ["del", "theorem", "degree_add_le", ["polynomial"]], ["del", "theorem", "degree_erase_le", ["polynomial"]], ["del", "theorem", "degree_erase_lt", ["polynomial"]], ["del", "theorem", "degree_le_iff_coeff_zero", ["polynomial"]], ["del", "theorem", "degree_le_zero_iff", ["polynomial"]], ["del", "theorem", "degree_lt_degree_mul_X", ["polynomial"]], ["del", "theorem", "degree_mul'", ["polynomial"]], ["del", "theorem", "degree_mul", ["polynomial"]], ["del", "theorem", "degree_mul_le", ["polynomial"]], ["del", "theorem", "degree_nonneg_iff_ne_zero", ["polynomial"]], ["del", "theorem", "degree_pow'", ["polynomial"]], ["del", "theorem", "degree_pow", ["polynomial"]], ["del", "theorem", "degree_pow_le", ["polynomial"]], ["del", "theorem", "degree_sub_le", ["polynomial"]], ["del", "theorem", "degree_sub_lt", ["polynomial"]], ["del", "theorem", "degree_sum_le", ["polynomial"]], ["del", "theorem", "eq_C_of_degree_eq_zero", ["polynomial"]], ["del", "theorem", "eq_C_of_degree_le_zero", ["polynomial"]], ["del", "theorem", "eq_C_of_nat_degree_le_zero", ["polynomial"]], ["del", "theorem", "leading_coeff_C", ["polynomial"]], ["del", "theorem", "leading_coeff_X", ["polynomial"]], ["del", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["del", "theorem", "leading_coeff_add_of_degree_eq", ["polynomial"]], ["del", "theorem", "leading_coeff_add_of_degree_lt", ["polynomial"]], ["del", "theorem", "leading_coeff_eq_zero", ["polynomial"]], ["del", "theorem", "leading_coeff_eq_zero_iff_deg_eq_bot", ["polynomial"]], ["del", "def", "leading_coeff_hom", ["polynomial"]], ["del", "theorem", "leading_coeff_hom_apply", ["polynomial"]], ["del", "theorem", "leading_coeff_monomial", ["polynomial"]], ["del", "theorem", "leading_coeff_mul'", ["polynomial"]], ["del", "theorem", "leading_coeff_mul", ["polynomial"]], ["del", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["del", "theorem", "leading_coeff_one", ["polynomial"]], ["del", "theorem", "leading_coeff_pow'", ["polynomial"]], ["del", "theorem", "leading_coeff_pow", ["polynomial"]], ["del", "theorem", "leading_coeff_zero", ["polynomial"]], ["del", "theorem", "ne_zero", ["polynomial", "monic"]], ["del", "theorem", "ne_zero_of_zero_ne_one", ["polynomial", "monic"]], ["del", "theorem", "monic_X", ["polynomial"]], ["del", "theorem", "monic_one", ["polynomial"]], ["del", "theorem", "nat_degree_X_pow_sub_C", ["polynomial"]], ["del", "theorem", "nat_degree_X_sub_C", ["polynomial"]], ["del", "theorem", "nat_degree_X_sub_C_le", ["polynomial"]], ["del", "theorem", "nat_degree_eq_zero_iff_degree_le_zero", ["polynomial"]], ["del", "theorem", "nat_degree_mul'", ["polynomial"]], ["del", "theorem", "nat_degree_mul_le", ["polynomial"]], ["del", "theorem", "nat_degree_pos_iff_degree_pos", ["polynomial"]], ["del", "theorem", "nat_degree_pow'", ["polynomial"]], ["del", "theorem", "ne_zero_of_degree_gt", ["polynomial"]], ["del", "theorem", "next_coeff_X_sub_C", ["polynomial"]], ["del", "theorem", "not_is_unit_X", ["polynomial"]], ["del", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["del", "theorem", "zero_le_degree_iff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "X_pow_sub_C_ne_zero", ["polynomial"]], ["add", "theorem", "X_sub_C_ne_zero", ["polynomial"]], ["add", "theorem", "as_sum", ["polynomial"]], ["add", "theorem", "coeff_mul_degree_add_degree", ["polynomial"]], ["add", "theorem", "coeff_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_X_pow", ["polynomial"]], ["add", "theorem", "degree_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "degree_X_sub_C", ["polynomial"]], ["add", "theorem", "degree_add_C", ["polynomial"]], ["add", "theorem", "degree_add_eq_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_add_eq_of_leading_coeff_add_ne_zero", ["polynomial"]], ["add", "theorem", "degree_add_le", ["polynomial"]], ["add", "theorem", "degree_erase_le", ["polynomial"]], ["add", "theorem", "degree_erase_lt", ["polynomial"]], ["add", "theorem", "degree_le_iff_coeff_zero", ["polynomial"]], ["add", "theorem", "degree_le_zero_iff", ["polynomial"]], ["add", "theorem", "degree_lt_degree_mul_X", ["polynomial"]], ["add", "theorem", "degree_mul'", ["polynomial"]], ["add", "theorem", "degree_mul", ["polynomial"]], ["add", "theorem", "degree_mul_le", ["polynomial"]], ["add", "theorem", "degree_nonneg_iff_ne_zero", ["polynomial"]], ["add", "theorem", "degree_pow'", ["polynomial"]], ["add", "theorem", "degree_pow", ["polynomial"]], ["add", "theorem", "degree_pow_le", ["polynomial"]], ["add", "theorem", "degree_sub_le", ["polynomial"]], ["add", "theorem", "degree_sub_lt", ["polynomial"]], ["add", "theorem", "degree_sum_le", ["polynomial"]], ["add", "theorem", "eq_C_of_degree_eq_zero", ["polynomial"]], ["add", "theorem", "eq_C_of_degree_le_zero", ["polynomial"]], ["add", "theorem", "eq_C_of_nat_degree_le_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_C", ["polynomial"]], ["add", "theorem", "leading_coeff_X", ["polynomial"]], ["add", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_add_of_degree_eq", ["polynomial"]], ["add", "theorem", "leading_coeff_add_of_degree_lt", ["polynomial"]], ["add", "theorem", "leading_coeff_eq_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_eq_zero_iff_deg_eq_bot", ["polynomial"]], ["add", "def", "leading_coeff_hom", ["polynomial"]], ["add", "theorem", "leading_coeff_hom_apply", ["polynomial"]], ["add", "theorem", "leading_coeff_monomial", ["polynomial"]], ["add", "theorem", "leading_coeff_mul'", ["polynomial"]], ["add", "theorem", "leading_coeff_mul", ["polynomial"]], ["add", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_one", ["polynomial"]], ["add", "theorem", "leading_coeff_pow'", ["polynomial"]], ["add", "theorem", "leading_coeff_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_zero", ["polynomial"]], ["add", "theorem", "ne_zero", ["polynomial", "monic"]], ["add", "theorem", "ne_zero_of_zero_ne_one", ["polynomial", "monic"]], ["add", "theorem", "monic_X", ["polynomial"]], ["add", "theorem", "monic_one", ["polynomial"]], ["add", "theorem", "nat_degree_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_sub_C_le", ["polynomial"]], ["add", "theorem", "nat_degree_eq_zero_iff_degree_le_zero", ["polynomial"]], ["add", "theorem", "nat_degree_mul'", ["polynomial"]], ["add", "theorem", "nat_degree_mul_le", ["polynomial"]], ["add", "theorem", "nat_degree_pos_iff_degree_pos", ["polynomial"]], ["add", "theorem", "nat_degree_pow'", ["polynomial"]], ["add", "theorem", "ne_zero_of_degree_gt", ["polynomial"]], ["add", "theorem", "next_coeff_X_sub_C", ["polynomial"]], ["add", "theorem", "not_is_unit_X", ["polynomial"]], ["add", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["add", "theorem", "sum_over_range'", ["polynomial"]], ["add", "theorem", "sum_over_range", ["polynomial"]], ["add", "theorem", "zero_le_degree_iff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": [["del", "theorem", "derivative_eval", ["polynomial"]], ["del", "theorem", "is_coprime_of_is_root_of_eval_derivative_ne_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "eval_mul", ["polynomial"]], ["add", "theorem", "eval_pow", ["polynomial"]], ["add", "theorem", "eval₂_hom", ["polynomial"]], ["add", "theorem", "root_mul_left_of_is_root", ["polynomial"]], ["add", "theorem", "root_mul_right_of_is_root", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "is_coprime_of_is_root_of_eval_derivative_ne_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": [["add", "theorem", "derivative_eval", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/induction.lean", "newPath": "src/data/polynomial/induction.lean", "changes": [["del", "theorem", "as_sum", ["polynomial"]], ["del", "theorem", "finset_sum_coeff", ["polynomial"]], ["del", "theorem", "sum_over_range'", ["polynomial"]], ["del", "theorem", "sum_over_range", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/integral_normalization.lean", "changes": [["add", "theorem", "integral_normalization_aeval_eq_zero", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_nat_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_ne_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_ne_nat_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_eval₂_eq_zero", ["polynomial"]], ["add", "theorem", "monic_integral_normalization", ["polynomial"]], ["add", "theorem", "support_integral_normalization", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["del", "theorem", "integral_normalization_aeval_eq_zero", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_nat_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_ne_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_ne_nat_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_eval₂_eq_zero", ["polynomial"]], ["del", "theorem", "monic_integral_normalization", ["polynomial"]], ["del", "theorem", "support_integral_normalization", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "theorem", "C_inj", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1595434575, "sha": "36ea9e84", "message": "chore(*): cleanup imports (#3511)\nA not-very-interesting cleanup of imports.\nI deleted \n```\ninstance orbit_fintype (b : β) [fintype α] [decidable_eq β] :\t\n fintype (orbit α b) := set.fintype_range _\n```\nwhich wasn't being used, for the sake of not having to import everything about finiteness into `algebra.group_action`.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/deprecated/ring.lean", "newPath": "src/deprecated/ring.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/order/order_iso_nat.lean", "newPath": "src/order/order_iso_nat.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1595434573, "sha": "a8cedf9f", "message": "feat(data/nat/digits): a number is bigger than base^(digits length - 1) (#3498)", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "base_pow_length_digits_le'", []], ["add", "theorem", "base_pow_length_digits_le", []]]}]}, {"timestamp": 1595429565, "sha": "acc2802d", "message": "feat(tactic/extract_goal): remove annoying spaces (#3514)\ncloses #3375", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1595426673, "sha": "a971a88f", "message": "refactor(linear_algebra/nonsingular_inverse, data/matrix/basic): update_* rectangular matrices (#3403)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "update_column", ["matrix"]], ["add", "theorem", "update_column_ne", ["matrix"]], ["add", "theorem", "update_column_self", ["matrix"]], ["add", "theorem", "update_column_transpose", ["matrix"]], ["add", "theorem", "update_column_val", ["matrix"]], ["add", "def", "update_row", ["matrix"]], ["add", "theorem", "update_row_ne", ["matrix"]], ["add", "theorem", "update_row_self", ["matrix"]], ["add", "theorem", "update_row_transpose", ["matrix"]], ["add", "theorem", "update_row_val", ["matrix"]]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["del", "def", "update_column", ["matrix"]], ["del", "theorem", "update_column_ne", ["matrix"]], ["del", "theorem", "update_column_self", ["matrix"]], ["del", "theorem", "update_column_val", ["matrix"]], ["del", "def", "update_row", ["matrix"]], ["del", "theorem", "update_row_ne", ["matrix"]], ["del", "theorem", "update_row_self", ["matrix"]], ["del", "theorem", "update_row_transpose", ["matrix"]], ["del", "theorem", "update_row_val", ["matrix"]]]}]}, {"timestamp": 1595417576, "sha": "90d33863", "message": "feat(category_theory/kernels): compute kernel (f ≫ g) when one is an iso (#3438)", "changes": [{"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "cokernel_comp_is_iso", ["category_theory", "limits"]], ["add", "def", "cokernel_is_iso_comp", ["category_theory", "limits"]], ["add", "theorem", "cokernel_π_comp_cokernel_comp_is_iso_hom", ["category_theory", "limits"]], ["add", "theorem", "cokernel_π_comp_cokernel_comp_is_iso_inv", ["category_theory", "limits"]], ["add", "theorem", "cokernel_π_comp_cokernel_is_iso_comp_hom", ["category_theory", "limits"]], ["add", "theorem", "cokernel_π_comp_cokernel_is_iso_comp_inv", ["category_theory", "limits"]], ["add", "def", "kernel_comp_is_iso", ["category_theory", "limits"]], ["add", "theorem", "kernel_comp_is_iso_hom_comp_kernel_ι", ["category_theory", "limits"]], ["add", "theorem", "kernel_comp_is_iso_inv_comp_kernel_ι", ["category_theory", "limits"]], ["add", "def", "kernel_is_iso_comp", ["category_theory", "limits"]], ["add", "theorem", "kernel_is_iso_comp_hom_comp_kernel_ι", ["category_theory", "limits"]], ["add", "theorem", "kernel_is_iso_comp_inv_comp_kernel_ι", ["category_theory", "limits"]]]}]}, {"timestamp": 1595413094, "sha": "39f8f020", "message": "refactor(algebra/big_operators): split file, reduce imports (#3495)\nI've split up `algebra.big_operators`. It wasn't completely obvious how to divide it up, but this is an attempt to balance coherence / file size / minimal imports.", "changes": [{"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators/basic.lean", "changes": [["del", "theorem", "finset_le", ["directed"]], ["del", "theorem", "abs_sum_le_sum_abs", ["finset"]], ["del", "theorem", "card_le_mul_card_image", ["finset"]], ["del", "theorem", "card_pi", ["finset"]], ["del", "theorem", "dvd_sum", ["finset"]], ["del", "theorem", "exists_le", ["finset"]], ["del", "theorem", "exists_le_of_sum_le", ["finset"]], ["del", "theorem", "exists_pos_of_sum_zero_of_exists_nonzero", ["finset"]], ["del", "theorem", "le_sum_of_subadditive", ["finset"]], ["del", "theorem", "mul_sum", ["finset"]], ["del", "theorem", "prod_Ico_add", ["finset"]], ["del", "theorem", "prod_Ico_consecutive", ["finset"]], ["del", "theorem", "prod_Ico_eq_mul_inv", ["finset"]], ["del", "theorem", "prod_Ico_eq_prod_range", ["finset"]], ["del", "theorem", "prod_Ico_id_eq_fact", ["finset"]], ["del", "theorem", "prod_Ico_reflect", ["finset"]], ["del", "theorem", "prod_Ico_succ_top", ["finset"]], ["del", "theorem", "prod_add", ["finset"]], ["del", "theorem", "prod_eq_prod_Ico_succ_bot", ["finset"]], ["del", "theorem", "prod_le_prod'", ["finset"]], ["del", "theorem", "prod_le_prod", ["finset"]], ["del", "theorem", "prod_nat_cast", ["finset"]], ["del", "theorem", "prod_nonneg", ["finset"]], ["del", "theorem", "prod_pos", ["finset"]], ["del", "theorem", "prod_pow_eq_pow_sum", ["finset"]], ["del", "theorem", "prod_powerset_insert", ["finset"]], ["del", "theorem", "prod_range_mul_prod_Ico", ["finset"]], ["del", "theorem", "prod_range_reflect", ["finset"]], ["del", "theorem", "prod_sum", ["finset"]], ["del", "theorem", "single_le_sum", ["finset"]], ["del", "theorem", "sum_Ico_add", ["finset"]], ["del", "theorem", "sum_Ico_eq_sub", ["finset"]], ["del", "theorem", "sum_Ico_reflect", ["finset"]], ["del", "theorem", "sum_Ico_succ_top", ["finset"]], ["del", "theorem", "sum_boole_mul", ["finset"]], ["del", "theorem", "sum_div", ["finset"]], ["del", "theorem", "sum_eq_sum_Ico_succ_bot", ["finset"]], ["del", "theorem", "sum_eq_zero_iff", ["finset"]], ["del", "theorem", "sum_eq_zero_iff_of_nonneg", ["finset"]], ["del", "theorem", "sum_eq_zero_iff_of_nonpos", ["finset"]], ["del", "theorem", "sum_le_sum", ["finset"]], ["del", "theorem", "sum_le_sum_of_ne_zero", ["finset"]], ["del", "theorem", "sum_le_sum_of_subset", ["finset"]], ["del", "theorem", "sum_le_sum_of_subset_of_nonneg", ["finset"]], ["del", "theorem", "sum_lt_sum", ["finset"]], ["del", "theorem", "sum_lt_sum_of_nonempty", ["finset"]], ["del", "theorem", "sum_lt_sum_of_subset", ["finset"]], ["del", "theorem", "sum_mono_set", ["finset"]], ["del", "theorem", "sum_mono_set_of_nonneg", ["finset"]], ["del", "theorem", "sum_mul", ["finset"]], ["del", "theorem", "sum_mul_boole", ["finset"]], ["del", "theorem", "sum_mul_sum", ["finset"]], ["del", "theorem", "sum_nonneg", ["finset"]], ["del", "theorem", "sum_nonpos", ["finset"]], ["del", "theorem", "sum_pow_mul_eq_add_pow", ["finset"]], ["del", "theorem", "sum_range_id", ["finset"]], ["del", "theorem", "sum_range_id_mul_two", ["finset"]], ["del", "theorem", "sum_range_reflect", ["finset"]], ["del", "theorem", "is_group_hom_finset_prod", []], ["del", "theorem", "op_sum", ["with_top"]], ["del", "theorem", "sum_eq_top_iff", ["with_top"]], ["del", "theorem", "sum_lt_top", ["with_top"]], ["del", "theorem", "sum_lt_top_iff", ["with_top"]], ["del", "theorem", "unop_sum", ["with_top"]]]}, {"oldPath": null, "newPath": "src/algebra/big_operators/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/big_operators/intervals.lean", "changes": [["add", "theorem", "prod_Ico_add", ["finset"]], ["add", "theorem", "prod_Ico_consecutive", ["finset"]], ["add", "theorem", "prod_Ico_eq_mul_inv", ["finset"]], ["add", "theorem", "prod_Ico_eq_prod_range", ["finset"]], ["add", "theorem", "prod_Ico_id_eq_fact", ["finset"]], ["add", "theorem", "prod_Ico_reflect", ["finset"]], ["add", "theorem", "prod_Ico_succ_top", ["finset"]], ["add", "theorem", "prod_eq_prod_Ico_succ_bot", ["finset"]], ["add", "theorem", "prod_range_mul_prod_Ico", ["finset"]], ["add", "theorem", "prod_range_reflect", ["finset"]], ["add", "theorem", "sum_Ico_add", ["finset"]], ["add", "theorem", "sum_Ico_eq_sub", ["finset"]], ["add", "theorem", "sum_Ico_reflect", ["finset"]], ["add", "theorem", "sum_Ico_succ_top", ["finset"]], ["add", "theorem", "sum_eq_sum_Ico_succ_bot", ["finset"]], ["add", "theorem", "sum_range_id", ["finset"]], ["add", "theorem", "sum_range_id_mul_two", ["finset"]], ["add", "theorem", "sum_range_reflect", ["finset"]]]}, {"oldPath": null, "newPath": "src/algebra/big_operators/order.lean", "changes": [["add", "theorem", "abs_sum_le_sum_abs", ["finset"]], ["add", "theorem", "card_le_mul_card_image", ["finset"]], ["add", "theorem", "exists_le_of_sum_le", ["finset"]], ["add", "theorem", "exists_pos_of_sum_zero_of_exists_nonzero", ["finset"]], ["add", "theorem", "le_sum_of_subadditive", ["finset"]], ["add", "theorem", "prod_le_prod'", ["finset"]], ["add", "theorem", "prod_le_prod", ["finset"]], ["add", "theorem", "prod_nonneg", ["finset"]], ["add", "theorem", "prod_pos", ["finset"]], ["add", "theorem", "single_le_sum", ["finset"]], ["add", "theorem", "sum_eq_zero_iff", ["finset"]], ["add", "theorem", "sum_eq_zero_iff_of_nonneg", ["finset"]], ["add", "theorem", "sum_eq_zero_iff_of_nonpos", ["finset"]], ["add", "theorem", "sum_le_sum", ["finset"]], ["add", "theorem", "sum_le_sum_of_ne_zero", ["finset"]], ["add", "theorem", "sum_le_sum_of_subset", ["finset"]], ["add", "theorem", "sum_le_sum_of_subset_of_nonneg", ["finset"]], ["add", "theorem", "sum_lt_sum", ["finset"]], ["add", "theorem", "sum_lt_sum_of_nonempty", ["finset"]], ["add", "theorem", "sum_lt_sum_of_subset", ["finset"]], ["add", "theorem", "sum_mono_set", ["finset"]], ["add", "theorem", "sum_mono_set_of_nonneg", ["finset"]], ["add", "theorem", "sum_nonneg", ["finset"]], ["add", "theorem", "sum_nonpos", ["finset"]], ["add", "theorem", "op_sum", ["with_top"]], ["add", "theorem", "sum_eq_top_iff", ["with_top"]], ["add", "theorem", "sum_lt_top", ["with_top"]], ["add", "theorem", "sum_lt_top_iff", ["with_top"]], ["add", "theorem", "unop_sum", ["with_top"]]]}, {"oldPath": null, "newPath": "src/algebra/big_operators/ring.lean", "changes": [["add", "theorem", "dvd_sum", ["finset"]], ["add", "theorem", "mul_sum", ["finset"]], ["add", "theorem", "prod_add", ["finset"]], ["add", "theorem", "prod_nat_cast", ["finset"]], ["add", "theorem", "prod_pow_eq_pow_sum", ["finset"]], ["add", "theorem", "prod_powerset_insert", ["finset"]], ["add", "theorem", "prod_sum", ["finset"]], ["add", "theorem", "sum_boole_mul", ["finset"]], ["add", "theorem", "sum_div", ["finset"]], ["add", "theorem", "sum_mul", ["finset"]], ["add", "theorem", "sum_mul_boole", ["finset"]], ["add", "theorem", "sum_mul_sum", ["finset"]], ["add", "theorem", "sum_pow_mul_eq_add_pow", ["finset"]]]}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["del", "theorem", "exists_card_smul_ge_sum", ["finset"]], ["del", "theorem", "exists_card_smul_le_sum", ["finset"]], ["del", "theorem", "sum_const'", ["finset"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finset/order.lean", "changes": [["add", "theorem", "finset_le", ["directed"]], ["add", "theorem", "exists_le", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "card_pi", ["finset"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/prime.lean", "newPath": "src/ring_theory/prime.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "test/conv/apply_congr.lean", "newPath": "test/conv/apply_congr.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}]}, {"timestamp": 1595408149, "sha": "197b5015", "message": "feat(tactic/extract_goal): better support for `let` expressions (#3496)\nImprove treatment of let expressions #3375", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1595394517, "sha": "64335dec", "message": "chore(topology/category/): switch to bundled morphisms in Top (#3506)\nThis is a natural follow-up to @Nicknamen's recent PRs splitting bundled continuous maps out of `compact_open`.\nThere is a slight regression in `algebraic_geometry.presheafed_space` and `algebraic_geometry.stalks`, requiring a more explicit coercion. I'd encourage reviewers to ignore this, as I'll make a separate PR simplifying this (basically: having a coercion from morphisms of `PresheafedSpace`s to morphisms of `Top`s is unrealistically ambitious, and moreover harder to read, than just using the projection notation, and removing it makes everything easier).", "changes": [{"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": [["mod", "def", "f", []]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": [["mod", "def", "adj₁", ["Top"]], ["mod", "def", "adj₂", ["Top"]]]}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": [["add", "theorem", "comp_app", ["Top"]]]}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["mod", "theorem", "map_obj", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/continuous_map.lean", "newPath": "src/topology/continuous_map.lean", "changes": [["add", "theorem", "coe_inj", ["continuous_map"]], ["add", "def", "comp", ["continuous_map"]], ["add", "def", "id", ["continuous_map"]]]}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": [["del", "theorem", "add", ["Top", "continuous_functions"]], ["mod", "def", "map", ["Top", "continuous_functions"]], ["del", "theorem", "mul", ["Top", "continuous_functions"]], ["del", "theorem", "one", ["Top", "continuous_functions"]], ["del", "theorem", "zero", ["Top", "continuous_functions"]]]}]}, {"timestamp": 1595389631, "sha": "dced3436", "message": "feat(data/list/basic): induction from both ends (#3448)\nThis was originally an induction principle on palindromes, but researching Coq solutions made me realize that weakening the statement made it simpler and much easier to prove.\n- [\"The way we proceeded was to prove first an induction principle for lists, considering insertions at both ends...\"][1]\n- [\"... generalizing a single variable in that definition would create another inductive definition of a list.\"][2]\n[1]: https://www.labri.fr/perso/casteran/CoqArt/inductive-prop-chap/palindrome.html\n[2]: https://danilafe.com/blog/coq_palindrome/\nThis also adds the lemmas `length_init` and `init_append_last`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "def", "bidirectional_rec", ["list"]], ["add", "def", "bidirectional_rec_on", ["list"]], ["add", "theorem", "init_append_last", ["list"]], ["add", "theorem", "length_init", ["list"]]]}]}, {"timestamp": 1595385488, "sha": "55e7dcc1", "message": "fix(ring_theory/jacobson): Clean up documentation in Jacobson Ring definitions (#3501)\nFixes to formatting and documentation found after merging the definition of Jacobson Rings in https://github.com/leanprover-community/mathlib/pull/3404", "changes": [{"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson.lean", "newPath": "src/ring_theory/jacobson.lean", "changes": []}, {"oldPath": "src/ring_theory/jacobson_ideal.lean", "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": []}]}, {"timestamp": 1595380335, "sha": "314b2094", "message": "chore(scripts): update nolints.txt (#3505)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1595377634, "sha": "2219dc18", "message": "feat(tactic/linarith): put certificate generation in tactic monad (#3504)", "changes": [{"oldPath": "src/tactic/linarith/datatypes.lean", "newPath": "src/tactic/linarith/datatypes.lean", "changes": []}, {"oldPath": "src/tactic/linarith/elimination.lean", "newPath": "src/tactic/linarith/elimination.lean", "changes": []}, {"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "src/tactic/linarith/verification.lean", "newPath": "src/tactic/linarith/verification.lean", "changes": []}]}, {"timestamp": 1595377632, "sha": "219e2981", "message": "feat(ring_theory/discrete_valuation_ring): add DVR (#3476)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "dvd_dvd_iff_associated", []], ["add", "theorem", "dvd_dvd_of_associated", []], ["add", "theorem", "dvd_of_associated", []]]}, {"oldPath": null, "newPath": "src/ring_theory/discrete_valuation_ring.lean", "changes": [["add", "theorem", "associated_of_irreducible", ["discrete_valuation_ring"]], ["add", "theorem", "exists_irreducible", ["discrete_valuation_ring"]], ["add", "theorem", "iff_PID_with_one_nonzero_prime", ["discrete_valuation_ring"]], ["add", "theorem", "irreducible_iff_uniformiser", ["discrete_valuation_ring"]], ["add", "theorem", "not_a_field", ["discrete_valuation_ring"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "maximal_of_no_maximal", ["ideal"]], ["add", "theorem", "span_singleton_eq_span_singleton", ["ideal"]], ["add", "theorem", "span_singleton_mul_left_unit", ["ideal"]], ["add", "theorem", "span_singleton_mul_right_unit", ["ideal"]], ["add", "theorem", "local_of_unique_nonzero_prime", []], ["add", "theorem", "eq_maximal_ideal", ["local_ring"]], ["add", "theorem", "le_maximal_ideal", ["local_ring"]], ["del", "theorem", "max_ideal_unique", ["local_ring"]], ["add", "theorem", "maximal_ideal_unique", ["local_ring"]]]}]}, {"timestamp": 1595373389, "sha": "84d64972", "message": "fix(algebra/ring): add coe_neg_one lemma to units (#3489)\nFollow up to #3472 - adds `coe_neg_one`, which allows `norm_cast` to handle hypotheses like `↑-1 = 1`", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}]}, {"timestamp": 1595370390, "sha": "e448bb1a", "message": "feat(tactic/linarith): modularize coefficient oracle (#3502)\nThis makes it easy to plug an alternate certificate search method (e.g. simplex-based) into `linarith`, should one desire.", "changes": [{"oldPath": "src/tactic/linarith/datatypes.lean", "newPath": "src/tactic/linarith/datatypes.lean", "changes": []}, {"oldPath": "src/tactic/linarith/elimination.lean", "newPath": "src/tactic/linarith/elimination.lean", "changes": []}, {"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "src/tactic/linarith/verification.lean", "newPath": "src/tactic/linarith/verification.lean", "changes": []}]}, {"timestamp": 1595368738, "sha": "c6aa8e72", "message": "feat(algebra/invertible): invertible elements are units (#3499)", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "def", "unit_of_invertible", []], ["add", "theorem", "unit_of_invertible_inv", []], ["add", "theorem", "unit_of_invertible_val", []]]}]}, {"timestamp": 1595368736, "sha": "2fb6a056", "message": "feat(group_theory/semidirect_product): semidirect_product.map (#3492)", "changes": [{"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": [["add", "def", "map", ["semidirect_product"]], ["add", "theorem", "map_comp_inl", ["semidirect_product"]], ["add", "theorem", "map_comp_inr", ["semidirect_product"]], ["add", "theorem", "map_inl", ["semidirect_product"]], ["add", "theorem", "map_inr", ["semidirect_product"]], ["add", "theorem", "map_left", ["semidirect_product"]], ["add", "theorem", "map_right", ["semidirect_product"]], ["add", "theorem", "right_hom_comp_map", ["semidirect_product"]]]}]}, {"timestamp": 1595366956, "sha": "dfef07a8", "message": "chore(analysis/special_functions): moved trig vals out of real.pi, added new trig vals (#3497)\nMoved trigonometric lemmas from real.pi to analysis.special_functions.trigonometric. Also added two new trig lemmas, tan_pi_div_four and arctan_one, to analysis.special_functions.trigonometric.\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Trig.20function.20values", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["add", "theorem", "arctan_one", ["real"]], ["add", "theorem", "cos_pi_div_eight", ["real"]], ["add", "theorem", "cos_pi_div_four", ["real"]], ["add", "theorem", "cos_pi_div_sixteen", ["real"]], ["add", "theorem", "cos_pi_div_thirty_two", ["real"]], ["add", "theorem", "cos_pi_over_two_pow", ["real"]], ["add", "theorem", "sin_pi_div_eight", ["real"]], ["add", "theorem", "sin_pi_div_four", ["real"]], ["add", "theorem", "sin_pi_div_sixteen", ["real"]], ["add", "theorem", "sin_pi_div_thirty_two", ["real"]], ["add", "theorem", "sin_pi_over_two_pow_succ", ["real"]], ["add", "theorem", "sin_square_pi_over_two_pow", ["real"]], ["add", "theorem", "sin_square_pi_over_two_pow_succ", ["real"]], ["add", "theorem", "sqrt_two_add_series_lt_two", ["real"]], ["add", "theorem", "sqrt_two_add_series_monotone_left", ["real"]], ["add", "theorem", "sqrt_two_add_series_nonneg", ["real"]], ["add", "theorem", "sqrt_two_add_series_one", ["real"]], ["add", "theorem", "sqrt_two_add_series_succ", ["real"]], ["add", "theorem", "sqrt_two_add_series_two", ["real"]], ["add", "theorem", "sqrt_two_add_series_zero", ["real"]], ["add", "theorem", "sqrt_two_add_series_zero_nonneg", ["real"]], ["add", "theorem", "tan_pi_div_four", ["real"]]]}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": [["del", "theorem", "cos_pi_div_eight", ["real"]], ["del", "theorem", "cos_pi_div_four", ["real"]], ["del", "theorem", "cos_pi_div_sixteen", ["real"]], ["del", "theorem", "cos_pi_div_thirty_two", ["real"]], ["del", "theorem", "cos_pi_over_two_pow", ["real"]], ["del", "theorem", "sin_pi_div_eight", ["real"]], ["del", "theorem", "sin_pi_div_four", ["real"]], ["del", "theorem", "sin_pi_div_sixteen", ["real"]], ["del", "theorem", "sin_pi_div_thirty_two", ["real"]], ["del", "theorem", "sin_pi_over_two_pow_succ", ["real"]], ["del", "theorem", "sin_square_pi_over_two_pow", ["real"]], ["del", "theorem", "sin_square_pi_over_two_pow_succ", ["real"]], ["del", "theorem", "sqrt_two_add_series_lt_two", ["real"]], ["del", "theorem", "sqrt_two_add_series_monotone_left", ["real"]], ["del", "theorem", "sqrt_two_add_series_nonneg", ["real"]], ["del", "theorem", "sqrt_two_add_series_one", ["real"]], ["del", "theorem", "sqrt_two_add_series_succ", ["real"]], ["del", "theorem", "sqrt_two_add_series_two", ["real"]], ["del", "theorem", "sqrt_two_add_series_zero", ["real"]], ["del", "theorem", "sqrt_two_add_series_zero_nonneg", ["real"]]]}]}, {"timestamp": 1595348732, "sha": "c47d1d0d", "message": "feat(data/{mv_}polynomial): make args to aeval implicit (#3494)", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "aeval_C", ["mv_polynomial"]], ["mod", "theorem", "aeval_X", ["mv_polynomial"]], ["mod", "theorem", "aeval_def", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["mod", "theorem", "aeval_C", ["polynomial"]], ["mod", "theorem", "aeval_X", ["polynomial"]], ["mod", "theorem", "aeval_alg_hom", ["polynomial"]], ["mod", "theorem", "aeval_alg_hom_apply", ["polynomial"]], ["mod", "theorem", "aeval_def", ["polynomial"]], ["mod", "theorem", "coeff_zero_eq_aeval_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["mod", "theorem", "aeval", ["minimal_polynomial"]], ["mod", "theorem", "dvd", ["minimal_polynomial"]], ["mod", "theorem", "min", ["minimal_polynomial"]], ["mod", "theorem", "unique", ["minimal_polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": [["mod", "theorem", "adjoin_singleton_eq_range", ["algebra"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "theorem", "aeval_eq", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["mod", "theorem", "aeval_apply", ["is_algebra_tower"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["mod", "theorem", "is_integral_trans_aux", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/rational_root.lean", "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": [["mod", "theorem", "denom_dvd_of_is_root", []], ["mod", "theorem", "is_integer_of_is_root_of_monic", []], ["mod", "theorem", "num_dvd_of_is_root", []]]}]}, {"timestamp": 1595348730, "sha": "7efdd990", "message": "feat(algebra/invertible): lemmas (#3493)\nCoauthored by: Johan Commelin ", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "def", "map", ["invertible"]]]}]}, {"timestamp": 1595345008, "sha": "5776f4c0", "message": "feat(topology): more lemmas about Ici and Iic neighborhoods (#3474)\nMain feature : add `tfae_mem_nhds_within_Ici` and `tfae_mem_nhds_within_Iic`, analogous to the existing `tfae_mem_nhds_within_Ioi` and `tfae_mem_nhds_within_Iio`, as well as related lemmas (again imitating the open case)\nI also added a few lemmas in `data/set/intervals/basic.lean` that were useful for this and a few upcoming PRs", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_subset_Ici_self", ["set"]], ["add", "theorem", "Icc_subset_Iic_self", ["set"]], ["add", "theorem", "Icc_subset_Ioo", ["set"]], ["add", "theorem", "Ioc_subset_Ioo_right", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Icc_mem_nhds_within_Ici", []], ["add", "theorem", "Icc_mem_nhds_within_Iic", []], ["add", "theorem", "Ico_mem_nhds_within_Ici", []], ["add", "theorem", "Ico_mem_nhds_within_Iic", []], ["add", "theorem", "Ioc_mem_nhds_within_Ici", []], ["add", "theorem", "Ioc_mem_nhds_within_Iic", []], ["add", "theorem", "Ioo_mem_nhds_within_Ici", []], ["add", "theorem", "Ioo_mem_nhds_within_Iic", []], ["add", "theorem", "mem_nhds_within_Ici_iff_exists_Icc_subset'", []], ["add", "theorem", "mem_nhds_within_Ici_iff_exists_mem_Ioc_Ico_subset", []], ["add", "theorem", "mem_nhds_within_Iic_iff_exists_Icc_subset'", []], ["add", "theorem", "mem_nhds_within_Iic_iff_exists_mem_Ico_Ioc_subset", []], ["add", "theorem", "nhds_within_Icc_eq_nhds_within_Ici", []], ["add", "theorem", "nhds_within_Icc_eq_nhds_within_Iic", []], ["add", "theorem", "nhds_within_Ici_ne_bot", []], ["add", "theorem", "nhds_within_Ici_self_ne_bot", []], ["add", "theorem", "nhds_within_Ico_eq_nhds_within_Ici", []], ["add", "theorem", "nhds_within_Iic_ne_bot", []], ["add", "theorem", "nhds_within_Iic_self_ne_bot", []], ["add", "theorem", "nhds_within_Ioc_eq_nhds_within_Iic", []], ["add", "theorem", "tfae_mem_nhds_within_Ici", []], ["add", "theorem", "tfae_mem_nhds_within_Iic", []]]}]}, {"timestamp": 1595336333, "sha": "49049e46", "message": "feat(topology): implemented continuous bundled maps (#3486)\nIn this PR we defined continuous bundled maps, adapted the file `compact_open` accordingly, and proved instances of algebraic structures over the type `continuous_map` of continuous bundled maps. This feature was suggested on Zulip multiple times, see for example https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Continuous.20maps", "changes": [{"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": [["del", "def", "C", []], ["add", "def", "C", ["continuous"]], ["add", "def", "C", ["continuous_map"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["mod", "theorem", "image_coev", ["continuous_map"]], ["mod", "def", "induced", ["continuous_map"]], ["del", "def", "continuous_map", []]]}, {"oldPath": null, "newPath": "src/topology/continuous_map.lean", "changes": [["add", "def", "const", ["continuous_map"]], ["add", "theorem", "ext", ["continuous_map"]], ["add", "structure", "continuous_map", []]]}]}, {"timestamp": 1595332225, "sha": "5c55e157", "message": "feat(data/finset/intervals): Lemma about filter and Ico (#3479)\nAdd \"if you filter an Ico based on being less than or equal to its bottom element, you get the singleton bottom element\".", "changes": [{"oldPath": "src/data/finset/intervals.lean", "newPath": "src/data/finset/intervals.lean", "changes": [["add", "theorem", "filter_Ico_bot", ["finset", "Ico"]]]}, {"oldPath": "src/data/list/intervals.lean", "newPath": "src/data/list/intervals.lean", "changes": [["add", "theorem", "filter_le_of_bot", ["list", "Ico"]], ["add", "theorem", "filter_lt_of_succ_bot", ["list", "Ico"]]]}, {"oldPath": "src/data/multiset/intervals.lean", "newPath": "src/data/multiset/intervals.lean", "changes": [["add", "theorem", "filter_le_of_bot", ["multiset", "Ico"]]]}]}, {"timestamp": 1595327857, "sha": "d57130b3", "message": "feat(field_theory/mv_polynomial): char_p instance (#3491)", "changes": [{"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}]}, {"timestamp": 1595323511, "sha": "1a31e69c", "message": "chore(algebra/group/anti_hom): remove is_group_anti_hom (#3485)\n`is_group_anti_hom` is no longer used anywhere, so I'm going to count it as deprecated and propose removing it.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["del", "theorem", "inv_prod", []], ["del", "theorem", "map_prod", ["is_group_anti_hom"]]]}, {"oldPath": "src/algebra/group/anti_hom.lean", "newPath": null, "changes": [["del", "theorem", "inv_is_group_anti_hom", []], ["del", "theorem", "map_inv", ["is_group_anti_hom"]], ["del", "theorem", "map_one", ["is_group_anti_hom"]]]}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}]}, {"timestamp": 1595320738, "sha": "31699708", "message": "feat(category_theory/kernels): helper lemmas for constructing kernels (#3439)\nThis does for kernels what #3398 did for pullbacks.", "changes": [{"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "of_π", ["category_theory", "limits", "is_colimit"]], ["add", "def", "is_colimit_aux", ["category_theory", "limits"]], ["add", "def", "of_ι", ["category_theory", "limits", "is_limit"]], ["add", "def", "is_limit_aux", ["category_theory", "limits"]]]}]}, {"timestamp": 1595317664, "sha": "d174d3d0", "message": "refactor(linear_algebra/*): postpone importing material on direct sums (#3484)\nThis is just a refactor, to avoid needing to develop material on direct sums before we can even define an algebra.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/direct_sum/finsupp.lean", "changes": [["add", "def", "finsupp_lequiv_direct_sum", []], ["add", "theorem", "finsupp_lequiv_direct_sum_single", []], ["add", "theorem", "finsupp_lequiv_direct_sum_symm_lof", []], ["add", "def", "finsupp_tensor_finsupp", []], ["add", "theorem", "finsupp_tensor_finsupp_single", []], ["add", "theorem", "finsupp_tensor_finsupp_symm_single", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/direct_sum/tensor_product.lean", "changes": [["add", "def", "direct_sum", ["tensor_product"]], ["add", "theorem", "direct_sum_lof_tmul_lof", ["tensor_product"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["del", "def", "finsupp_lequiv_direct_sum", []], ["del", "theorem", "finsupp_lequiv_direct_sum_single", []], ["del", "theorem", "finsupp_lequiv_direct_sum_symm_lof", []], ["del", "def", "finsupp_tensor_finsupp", []], ["del", "theorem", "finsupp_tensor_finsupp_single", []], ["del", "theorem", "finsupp_tensor_finsupp_symm_single", []]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["del", "def", "direct_sum", ["tensor_product"]], ["del", "theorem", "direct_sum_lof_tmul_lof", ["tensor_product"]]]}]}, {"timestamp": 1595304396, "sha": "c71e67a9", "message": "feat(ring_theory/jacobson): definition of Jacobson rings (#3404)", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_ring_hom", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "is_maximal", ["ideal", "comap"]], ["add", "theorem", "comap_bot_le_of_injective", ["ideal"]], ["add", "theorem", "comap_le_iff_le_map", ["ideal"]], ["del", "theorem", "le_jacobson", ["ideal", "is_local"]], ["del", "theorem", "mem_jacobson_or_exists_inv", ["ideal", "is_local"]], ["del", "def", "is_local", ["ideal"]], ["del", "theorem", "is_local_of_is_maximal_radical", ["ideal"]], ["del", "theorem", "is_primary_of_is_maximal_radical", ["ideal"]], ["del", "def", "jacobson", ["ideal"]], ["del", "theorem", "jacobson_eq_top_iff", ["ideal"]], ["add", "theorem", "ker_le_comap", ["ideal"]], ["add", "theorem", "le_map_of_comap_le_of_surjective", ["ideal"]], ["add", "theorem", "is_maximal", ["ideal", "map"]], ["add", "theorem", "map_Inf", ["ideal"]], ["add", "theorem", "map_eq_top_or_is_maximal_of_surjective", ["ideal"]], ["del", "theorem", "mem_jacobson_iff", ["ideal"]], ["add", "theorem", "mem_map_iff_of_surjective", ["ideal"]], ["add", "def", "order_iso_of_bijective", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "bot_is_maximal", ["ideal"]]]}, {"oldPath": null, "newPath": "src/ring_theory/jacobson.lean", "changes": [["add", "def", "is_jacobson", ["ideal"]], ["add", "theorem", "is_jacobson_iff_Inf_maximal", ["ideal"]], ["add", "theorem", "is_jacobson_iff_prime_eq", ["ideal"]], ["add", "theorem", "is_jacobson_iso", ["ideal"]], ["add", "theorem", "is_jacobson_of_surjective", ["ideal"]], ["add", "theorem", "radical_eq_jacobson", ["ideal"]]]}, {"oldPath": null, "newPath": "src/ring_theory/jacobson_ideal.lean", "changes": [["add", "theorem", "le_jacobson", ["ideal", "is_local"]], ["add", "theorem", "mem_jacobson_or_exists_inv", ["ideal", "is_local"]], ["add", "def", "is_local", ["ideal"]], ["add", "theorem", "is_local_of_is_maximal_radical", ["ideal"]], ["add", "theorem", "is_primary_of_is_maximal_radical", ["ideal"]], ["add", "theorem", "is_maximal", ["ideal", "jacobson"]], ["add", "def", "jacobson", ["ideal"]], ["add", "theorem", "jacobson_eq_bot", ["ideal"]], ["add", "theorem", "jacobson_eq_top_iff", ["ideal"]], ["add", "theorem", "jacobson_mono", ["ideal"]], ["add", "theorem", "jacobson_top", ["ideal"]], ["add", "theorem", "le_jacobson", ["ideal"]], ["add", "theorem", "mem_jacobson_iff", ["ideal"]]]}]}, {"timestamp": 1595296548, "sha": "0322d892", "message": "refactor(topology/algebra/monoid): changed topological_monoid into has_continuous_mul (#3481)", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "measurable_prod", ["finset"]], ["mod", "theorem", "mul", ["measurable"]], ["mod", "theorem", "measurable_mul", []]]}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "add_comp", ["continuous_linear_map"]], ["mod", "theorem", "coe_coprod", ["continuous_linear_map"]], ["mod", "theorem", "comp_add", ["continuous_linear_map"]], ["mod", "def", "coprod", ["continuous_linear_map"]], ["mod", "theorem", "coprod_apply", ["continuous_linear_map"]], ["add", "theorem", "eq_top_of_nonempty_interior'", ["submodule"]], ["del", "theorem", "eq_top_of_nonempty_interior", ["submodule"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["mod", "theorem", "is_closed", ["open_subgroup"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "test/apply.lean", "newPath": "test/apply.lean", "changes": []}]}, {"timestamp": 1595293511, "sha": "079d4093", "message": "chore(scripts): update nolints.txt (#3483)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1595293509, "sha": "6721ddfb", "message": "refactor(ring_theory): remove unbundled leftovers in `ideal.quotient` (#3467)\nThis PR aims to smooth some corners in the `ideal.quotient` namespace left by the move to bundled `ring_hom`s. The main irritation is the ambiguity between different ways to map `x : R` to the quotient ring: `quot.mk`, `quotient.mk`, `quotient.mk'`, `submodule.quotient.mk`, `ideal.quotient.mk` and `ideal.quotient.mk_hom`, which caused a lot of duplication and more awkward proofs.\nThe specific changes are:\n * delete function `ideal_quotient.mk`\n * rename ring hom `ideal.quotient.mk_hom` to `ideal.quotient.mk`\n * make new `ideal_quotient.mk` the `simp` normal form\n * delete obsolete `mk_eq_mk_hom`\n * delete obsolete `mk_...` `simp` lemmas (use `ring_hom.map_...` instead)\n * delete `quotient.map_mk` which was unused and had no lemmas (`ideal.map quotient.mk` is used elsewhere)", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/number_theory/basic.lean", "newPath": "src/number_theory/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "def", "mk", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["del", "def", "map_mk", ["ideal", "quotient"]], ["mod", "def", "mk", ["ideal", "quotient"]], ["del", "theorem", "mk_add", ["ideal", "quotient"]], ["add", "theorem", "mk_eq_mk", ["ideal", "quotient"]], ["del", "theorem", "mk_eq_mk_hom", ["ideal", "quotient"]], ["del", "def", "mk_hom", ["ideal", "quotient"]], ["del", "theorem", "mk_mul", ["ideal", "quotient"]], ["del", "theorem", "mk_neg", ["ideal", "quotient"]], ["del", "theorem", "mk_one", ["ideal", "quotient"]], ["del", "theorem", "mk_pow", ["ideal", "quotient"]], ["del", "theorem", "mk_prod", ["ideal", "quotient"]], ["del", "theorem", "mk_sub", ["ideal", "quotient"]], ["del", "theorem", "mk_sum", ["ideal", "quotient"]], ["del", "theorem", "mk_zero", ["ideal", "quotient"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1595293507, "sha": "564ab022", "message": "feat(category_theory/kernels): cokernel (image.ι f) ≅ cokernel f (#3441)", "changes": [{"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "cokernel_image_ι", ["category_theory", "limits"]]]}]}, {"timestamp": 1595288531, "sha": "32c082f5", "message": "fix(tactic/library_search): group monotone lemmas with le lemmas (#3471)\nThis lets `library_search` use `monotone` lemmas to prove `\\le` goals, and vice versa, resolving a problem people were experiencing in Patrick's exercises at LftCM2020:\n```\nimport order.filter.basic\nopen filter\nexample {α β γ : Type*} {A : filter α} {B : filter β} {C : filter γ} {f : α → β} {g : β → γ}\n (hf : tendsto f A B) (hg : tendsto g B C) : tendsto (g ∘ f) A C :=\ncalc\nmap (g ∘ f) A = map g (map f A) : by library_search\n ... ≤ map g B : by library_search!\n ... ≤ C : by library_search!\n```", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": null, "newPath": "test/library_search/filter.lean", "changes": []}]}, {"timestamp": 1595283449, "sha": "2915faed", "message": "feat(data/finset/basic): Cardinality of intersection with singleton (#3480)\nIntersecting with a singleton produces a set of cardinality either 0 or 1.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "card_singleton_inter", ["finset"]]]}]}, {"timestamp": 1595277053, "sha": "1f74ddd2", "message": "feat(topology/local_extr): add lemmas on composition with continuous functions (#3459)", "changes": [{"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": [["add", "theorem", "comp_continuous_on", ["is_local_extr_on"]], ["add", "theorem", "comp_continuous_on", ["is_local_max_on"]], ["add", "theorem", "comp_continuous_on", ["is_local_min_on"]]]}]}, {"timestamp": 1595270544, "sha": "7aa85c2b", "message": "fix(algebra/group/units): add missing coe lemmas to units (#3472)\nPer @kbuzzard's suggestions [here](https://leanprover-community.github.io/archive/stream/113489-new-members/topic/Shortening.20proof.20on.20product.20of.20units.20in.20Z.html#204406319):\n- Add a new lemma `coe_eq_one` to `units` API\n- Tag `eq_iff` with `norm_cast`", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "coe_eq_one", ["units"]], ["add", "theorem", "eq_iff", ["units"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1595267773, "sha": "b66d1bee", "message": "feat(data/multivariate/qpf): definition (#3395)\nPart of #3317", "changes": [{"oldPath": "src/control/functor/multivariate.lean", "newPath": "src/control/functor/multivariate.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/pfunctor/multivariate/basic.lean", "changes": [["add", "def", "append_contents", ["mvpfunctor"]], ["add", "def", "get", ["mvpfunctor", "comp"]], ["add", "theorem", "get_map", ["mvpfunctor", "comp"]], ["add", "theorem", "get_mk", ["mvpfunctor", "comp"]], ["add", "def", "mk", ["mvpfunctor", "comp"]], ["add", "theorem", "mk_get", ["mvpfunctor", "comp"]], ["add", "def", "comp", ["mvpfunctor"]], ["add", "theorem", "comp_map", ["mvpfunctor"]], ["add", "def", "get", ["mvpfunctor", "const"]], ["add", "theorem", "get_map", ["mvpfunctor", "const"]], ["add", "theorem", "get_mk", ["mvpfunctor", "const"]], ["add", "def", "mk", ["mvpfunctor", "const"]], ["add", "theorem", "mk_get", ["mvpfunctor", "const"]], ["add", "def", "const", ["mvpfunctor"]], ["add", "def", "drop", ["mvpfunctor"]], ["add", "theorem", "id_map", ["mvpfunctor"]], ["add", "def", "last", ["mvpfunctor"]], ["add", "theorem", "liftp_iff'", ["mvpfunctor"]], ["add", "theorem", "liftp_iff", ["mvpfunctor"]], ["add", "theorem", "liftr_iff", ["mvpfunctor"]], ["add", "def", "map", ["mvpfunctor"]], ["add", "theorem", "map_eq", ["mvpfunctor"]], ["add", "def", "obj", ["mvpfunctor"]], ["add", "theorem", "supp_eq", ["mvpfunctor"]], ["add", "structure", "mvpfunctor", []]]}, {"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": [["add", "def", "children", ["pfunctor", "W"]], ["add", "def", "head", ["pfunctor", "W"]]]}, {"oldPath": null, "newPath": "src/data/qpf/multivariate/basic.lean", "changes": [["add", "theorem", "comp_map", ["mvqpf"]], ["add", "theorem", "has_good_supp_iff", ["mvqpf"]], ["add", "def", "is_uniform", ["mvqpf"]], ["add", "theorem", "liftp_iff", ["mvqpf"]], ["add", "theorem", "liftp_iff_of_is_uniform", ["mvqpf"]], ["add", "def", "liftp_preservation", ["mvqpf"]], ["add", "theorem", "liftp_preservation_iff_uniform", ["mvqpf"]], ["add", "theorem", "liftr_iff", ["mvqpf"]], ["add", "theorem", "mem_supp", ["mvqpf"]], ["add", "theorem", "supp_eq", ["mvqpf"]], ["add", "theorem", "supp_eq_of_is_uniform", ["mvqpf"]], ["add", "theorem", "supp_map", ["mvqpf"]], ["add", "def", "supp_preservation", ["mvqpf"]], ["add", "theorem", "supp_preservation_iff_liftp_preservation", ["mvqpf"]], ["add", "theorem", "supp_preservation_iff_uniform", ["mvqpf"]]]}]}, {"timestamp": 1595259769, "sha": "78f438b7", "message": "feat(tactic/squeeze_*): improve suggestions (#3431)\nThis makes this gives `squeeze_simp`, `squeeze_simpa` and `squeeze_dsimp` the `?` optional argument that indicates that we should consider all `simp` lemmas that are also `_refl_lemma`", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1595254668, "sha": "d0df6b81", "message": "feat(data/equiv/mul_add): refl_apply and trans_apply (#3470)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "refl_apply", ["mul_equiv"]], ["add", "theorem", "trans_apply", ["mul_equiv"]]]}]}, {"timestamp": 1595254666, "sha": "2994f1b9", "message": "feat(solve_by_elim): add tracing (#3468)\nWhen `solve_by_elim` fails, it now prints:\n```\n`solve_by_elim` failed.\nTry `solve_by_elim { max_depth := N }` for a larger `N`,\nor use `set_option trace.solve_by_elim true` to view the search.\n```\nand with `set_option trace.solve_by_elim true` we get messages like:\n```\nexample (n m : ℕ) (f : ℕ → ℕ → Prop) (h : f n m) : ∃ p : ℕ × ℕ, f p.1 p.2 :=\nbegin\n repeat { fsplit },\n solve_by_elim*,\nend\n```\nproducing:\n```\n[solve_by_elim . ✅ `n` solves `⊢ ℕ`]\n[solve_by_elim .. ✅ `n` solves `⊢ ℕ`]\n[solve_by_elim ... ❌ failed to solve `⊢ f (n, n).fst (n, n).snd`]\n[solve_by_elim .. ✅ `m` solves `⊢ ℕ`]\n[solve_by_elim ... ✅ `h` solves `⊢ f (n, m).fst (n, m).snd`]\n[solve_by_elim .... success!]\n```\nFixed #3063", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1595254664, "sha": "38b95c8a", "message": "feat(set_theory/cardinal): simp lemmas about numerals (#3450)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "one_lt_omega", ["cardinal"]], ["mod", "theorem", "zero_lt_one", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "bit0_eq_self", ["cardinal"]], ["add", "theorem", "bit0_le_bit0", ["cardinal"]], ["add", "theorem", "bit0_le_bit1", ["cardinal"]], ["add", "theorem", "bit0_lt_bit0", ["cardinal"]], ["add", "theorem", "bit0_lt_bit1", ["cardinal"]], ["add", "theorem", "bit0_lt_omega", ["cardinal"]], ["add", "theorem", "bit0_ne_zero", ["cardinal"]], ["add", "theorem", "bit1_eq_self_iff", ["cardinal"]], ["add", "theorem", "bit1_le_bit0", ["cardinal"]], ["add", "theorem", "bit1_le_bit1", ["cardinal"]], ["add", "theorem", "bit1_lt_bit0", ["cardinal"]], ["add", "theorem", "bit1_lt_bit1", ["cardinal"]], ["add", "theorem", "bit1_lt_omega", ["cardinal"]], ["add", "theorem", "bit1_ne_zero", ["cardinal"]], ["add", "theorem", "omega_le_bit0", ["cardinal"]], ["add", "theorem", "omega_le_bit1", ["cardinal"]], ["add", "theorem", "one_le_bit0", ["cardinal"]], ["add", "theorem", "one_le_bit1", ["cardinal"]], ["add", "theorem", "one_le_one", ["cardinal"]], ["add", "theorem", "one_lt_bit0", ["cardinal"]], ["add", "theorem", "one_lt_bit1", ["cardinal"]], ["add", "theorem", "one_lt_two", ["cardinal"]], ["add", "theorem", "zero_lt_bit0", ["cardinal"]], ["add", "theorem", "zero_lt_bit1", ["cardinal"]]]}]}, {"timestamp": 1595254661, "sha": "9a923639", "message": "feat(logic/basic): nonempty.some (#3449)\nCould we please have this? I've a number of times been annoyed by the difficulty of extracting an element from a `nonempty`.\n(Criterion for alternative solutions: `library_search` solves `nonempty X -> X`.)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "some_spec", ["Exists"]]]}]}, {"timestamp": 1595254659, "sha": "469043f9", "message": "refactor(tactic/generalizes): reimplement generalizes' (#3416)\nThe new implementation is somewhat simpler. It is inspired by the C++\nfunction `generalize_indices` in `library/tactic/cases_tactic.cpp`,\nwhich performs essentially the same construction.\nThe only non-internal change is the return type of `generalizes_intro`.", "changes": [{"oldPath": "src/tactic/generalizes.lean", "newPath": "src/tactic/generalizes.lean", "changes": []}]}, {"timestamp": 1595249691, "sha": "593b1bb5", "message": "feat(linear_algebra/affine_space): lemmas on affine spans (#3453)\nAdd more lemmas on affine spans; in particular, that the points in an\n`affine_span` are exactly the `affine_combination`s where the sum of\nweights equals 1, provided the underlying ring is nontrivial.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "affine_combination_mem_affine_span", ["affine_space"]], ["add", "theorem", "affine_span_nonempty", ["affine_space"]], ["add", "theorem", "eq_affine_combination_of_mem_affine_span", ["affine_space"]], ["add", "theorem", "mem_affine_span_iff_eq_affine_combination", ["affine_space"]], ["add", "theorem", "mem_vector_span_iff_eq_weighted_vsub", ["affine_space"]], ["add", "theorem", "span_points_nonempty", ["affine_space"]], ["del", "theorem", "span_points_nonempty_of_nonempty", ["affine_space"]], ["add", "theorem", "vector_span_empty", ["affine_space"]], ["add", "theorem", "vector_span_eq_span_vsub_set_left", ["affine_space"]], ["add", "theorem", "vector_span_eq_span_vsub_set_right", ["affine_space"]], ["add", "theorem", "vector_span_range_eq_span_range_vsub_left", ["affine_space"]], ["add", "theorem", "vector_span_range_eq_span_range_vsub_right", ["affine_space"]], ["add", "theorem", "weighted_vsub_mem_vector_span", ["affine_space"]], ["add", "theorem", "affine_combination_apply", ["finset"]], ["add", "theorem", "affine_combination_indicator_subset", ["finset"]], ["add", "theorem", "affine_combination_of_eq_one_of_eq_zero", ["finset"]], ["add", "theorem", "weighted_vsub_empty", ["finset"]], ["add", "theorem", "weighted_vsub_indicator_subset", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_indicator_subset", ["finset"]]]}]}, {"timestamp": 1595249689, "sha": "65208ed7", "message": "refactor(data/polynomial/*): further refactors (#3435)\nThere's a lot further to go, but I need to do other things for a while so will PR what I have so far.", "changes": [{"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": []}, {"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "theorem", "X_ne_zero", ["polynomial"]], ["add", "theorem", "coeff_X", ["polynomial"]], ["add", "theorem", "coeff_X_one", ["polynomial"]], ["add", "theorem", "coeff_X_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_X_mul_zero", ["polynomial"]], ["mod", "theorem", "coeff_X_pow", ["polynomial"]], ["add", "theorem", "coeff_X_pow_self", ["polynomial"]], ["mod", "theorem", "coeff_mul_X_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/data/polynomial/induction.lean", "newPath": "src/data/polynomial/induction.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": []}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["del", "theorem", "X_ne_zero", ["polynomial"]], ["del", "theorem", "coeff_X", ["polynomial"]], ["del", "theorem", "coeff_X_one", ["polynomial"]], ["del", "theorem", "coeff_X_zero", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}]}, {"timestamp": 1595249687, "sha": "cb062145", "message": "feat(tactic/interactive_expr): always select all arguments (#3384)\nIf you hover over `id id 0` in the widget (or really any function with more than one argument), then it is possible to select the partial application `id id`. The popup will then only show the function `id` and the argument `id`, but not the second argument `0`.\nThis PR changes this behavior so that you can't select partial applications and always see all argument in the popup.", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1595244358, "sha": "4a3755a1", "message": "chore(algebra/ring): fix a mistake (#3469)", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}]}, {"timestamp": 1595238080, "sha": "4dc0814e", "message": "feat (algebra/module): lemma about submodules (#3466)\nAdd a 3-line lemma saying that a linear combination of elements of a submodule is still in that submodule.", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "sum_smul_mem", ["submodule"]]]}]}, {"timestamp": 1595233012, "sha": "a400adb9", "message": "fix(tactic/library_search): 1 ≤ n goals in nat (#3462)\nFixes #3432.\nThis PR changes `library_search` and `suggest`:\n1. instead of just selecting lemma with a single `name` as their head symbol, allows selecting from a `name_set`.\n2. when the goal is `≤` on certain `ℕ` goals, set that `name_set` to `[has_lt.lt, has_le.le]`, for more flexible matching of inequality lemmas about `ℕ`\n3. now successfully solves `theorem nonzero_gt_one (n : ℕ) : ¬ n = 0 → n ≥ 1 := by library_search!`\n4. splits the `test/library_search/basic.lean` file into two parts, one which doesn't import `data.nat.basic`, for faster testing", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": [["del", "def", "lt_one", ["test", "library_search"]], ["add", "theorem", "nonzero_gt_one", ["test", "library_search"]], ["del", "theorem", "zero_lt_one", ["test", "library_search"]]]}, {"oldPath": null, "newPath": "test/library_search/nat.lean", "changes": [["add", "def", "lt_one", ["test", "library_search"]], ["add", "theorem", "zero_lt_one", ["test", "library_search"]]]}]}, {"timestamp": 1595225077, "sha": "5080dd56", "message": "feat(data/padics/padic_norm): lemmas about padic_val_nat (#3230)\nCollection of lemmas about `padic_val_nat`, culminating in `lemma prod_pow_prime_padic_val_nat : ∀ (n : nat) (s : n ≠ 0) (m : nat) (pr : n < m), ∏ p in finset.filter nat.prime (finset.range m), pow p (padic_val_nat p n) = n`.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_multiset_count", ["finset"]]]}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "cast_dvd_char_zero", ["nat"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_div_div_eq_div", ["nat"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_dvd", ["nat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "coprime_div_left", ["nat", "coprime"]], ["add", "theorem", "coprime_div_right", ["nat", "coprime"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_add_two", ["nat"]], ["add", "theorem", "prime_dvd_prime_iff_eq", ["nat"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["add", "theorem", "one_le_padic_val_nat_of_dvd", []], ["add", "theorem", "padic_val_nat_eq_factors_count", []], ["add", "theorem", "padic_val_nat_of_not_dvd", []], ["add", "theorem", "padic_val_nat_one", []], ["add", "theorem", "padic_val_nat_primes", []], ["add", "theorem", "padic_val_nat_zero", []], ["add", "theorem", "prod_pow_prime_padic_val_nat", []]]}]}, {"timestamp": 1595221574, "sha": "84d4ea77", "message": "feat(data/nat/digits): a bigger number has more digits (#3457)", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "digits_len_le_digits_len_succ", []], ["add", "theorem", "digits_one", []], ["mod", "theorem", "digits_one_succ", []], ["add", "theorem", "digits_zero_succ", []], ["add", "theorem", "digits_zero_zero", []], ["add", "theorem", "le_digits_len_le", []]]}]}, {"timestamp": 1595221572, "sha": "792f5415", "message": "feat(field_theory/tower): tower law (#3355)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_extend_by_one", ["finset"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "range_smul_range", ["set"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "subset_product", ["finset"]]]}, {"oldPath": null, "newPath": "src/field_theory/tower.lean", "changes": [["add", "theorem", "dim_mul_dim'", []], ["add", "theorem", "dim_mul_dim", []], ["add", "theorem", "findim_mul_findim", ["finite_dimensional"]], ["add", "theorem", "trans", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "linear_independent_iff''", []]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["mod", "theorem", "algebra_map_apply", ["is_algebra_tower"]], ["mod", "theorem", "algebra_map_eq", ["is_algebra_tower"]], ["add", "theorem", "algebra_map_smul", ["is_algebra_tower"]], ["add", "theorem", "smul_left_comm", ["is_algebra_tower"]], ["add", "theorem", "smul", ["is_basis"]], ["add", "theorem", "linear_independent_smul", []], ["add", "def", "restrict_scalars'", ["submodule"]], ["add", "theorem", "restrict_scalars'_inj", ["submodule"]], ["add", "theorem", "restrict_scalars'_injective", ["submodule"]], ["add", "theorem", "restrict_scalars'_top", ["submodule"]], ["add", "theorem", "smul_mem_span_smul'", ["submodule"]], ["add", "theorem", "smul_mem_span_smul", ["submodule"]], ["add", "theorem", "smul_mem_span_smul_of_mem", ["submodule"]], ["add", "theorem", "span_smul", ["submodule"]]]}]}, {"timestamp": 1595216354, "sha": "501aeb7f", "message": "feat(data/quot.lean): add lift_on_beta\\_2 (#3456)\nThis corresponds to `lift_on\\_2` in `library/init/data/quot.lean` just as `lift_beta` and `lift_on_beta` correspond to `lift` and `lift_on`. It greatly simplifies quotient proofs but was, surprisingly, missing.", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "theorem", "lift_on_beta₂", ["quotient"]]]}]}, {"timestamp": 1595214632, "sha": "697488c8", "message": "feat(tactic/unfold_cases): add unfold_cases tactic (#3396)", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/unfold_cases.lean", "changes": []}, {"oldPath": null, "newPath": "test/unfold_cases.lean", "changes": [["add", "def", "balance_eqn_compiler", []], ["add", "def", "balance_match", []], ["add", "def", "bar", []], ["add", "def", "baz", []], ["add", "inductive", "color", []], ["add", "def", "foo", []], ["add", "inductive", "node", []]]}]}, {"timestamp": 1595204166, "sha": "2975f93a", "message": "chore(tactic/interactive): move non-monadic part of `clean` to `expr.clean` (#3461)", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1595204164, "sha": "db181446", "message": "chore(order/bounded_lattice): add `is_compl.inf_left_eq_bot_iff` etc (#3460)", "changes": [{"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "disjoint_left_iff", ["is_compl"]], ["add", "theorem", "disjoint_right_iff", ["is_compl"]], ["add", "theorem", "inf_left_eq_bot_iff", ["is_compl"]], ["add", "theorem", "inf_right_eq_bot_iff", ["is_compl"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1595193539, "sha": "1bb3d198", "message": "refactor(order/filter/basic): add class `filter.ne_bot` (#3454)\nThis way Lean will f`≠ ⊥` in a few most common cases\n(incl. `nhds_ne_bot`, `at_top_ne_bot`) automatically.\nOther API changes:\n* many lemmas now take `[ne_bot l]` instead of `(hl : l ≠ ⊥)`;\n* some lemmas got `'` versions that take an explicit `(hl : ne_bot l)`;\n* rename `ultrafilter_unique` to `is_ultrafilter.unique`;\n* `cauchy_downwards` is now `cauchy.mono` (instance arg) and `cauchy.mono'` (explicit arg);\n* `cauchy_map` is now `cauchy.map`;\n* `cauchy_comap` is now `cauchy.comap`;\n* `totally_bounded_closure` is now `totally_bounded.closure`;\n* `totally_bounded_image` is now `totally_bounded.image`;", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/hofer.lean", "newPath": "src/analysis/hofer.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nhds_within_is_unit_ne_bot", ["normed_field"]], ["del", "theorem", "eq_top_of_nonempty_interior", ["submodule"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "coe_le_coe", ["hyperreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nonempty_of_not_subset", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/dynamics/fixed_points/topology.lean", "newPath": "src/dynamics/fixed_points/topology.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "at_top_ne_bot", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_ne_bot", ["filter"]], ["mod", "theorem", "comap_ne_bot_iff", ["filter"]], ["del", "theorem", "comap_ne_bot_of_image_mem", ["filter"]], ["del", "theorem", "comap_ne_bot_of_range_mem", ["filter"]], ["del", "theorem", "comap_ne_bot_of_surj", ["filter"]], ["mod", "theorem", "exists", ["filter", "eventually"]], ["mod", "theorem", "frequently", ["filter", "eventually"]], ["mod", "theorem", "eventually_const", ["filter"]], ["mod", "theorem", "frequently_const", ["filter"]], ["mod", "theorem", "frequently_imp_distrib_left", ["filter"]], ["mod", "theorem", "frequently_imp_distrib_right", ["filter"]], ["mod", "theorem", "frequently_of_forall", ["filter"]], ["mod", "theorem", "frequently_or_distrib_left", ["filter"]], ["mod", "theorem", "frequently_or_distrib_right", ["filter"]], ["mod", "theorem", "frequently_true_iff_ne_bot", ["filter"]], ["mod", "theorem", "infi_ne_bot_iff_of_directed'", ["filter"]], ["mod", "theorem", "infi_ne_bot_iff_of_directed", ["filter"]], ["mod", "theorem", "infi_ne_bot_of_directed'", ["filter"]], ["del", "theorem", "map_ne_bot", ["filter"]], ["mod", "theorem", "map_ne_bot_iff", ["filter"]], ["add", "theorem", "comap_of_image_mem", ["filter", "ne_bot"]], ["add", "theorem", "comap_of_range_mem", ["filter", "ne_bot"]], ["add", "theorem", "comap_of_surj", ["filter", "ne_bot"]], ["add", "theorem", "map", ["filter", "ne_bot"]], ["add", "theorem", "mono", ["filter", "ne_bot"]], ["add", "theorem", "ne", ["filter", "ne_bot"]], ["add", "theorem", "nonempty_of_mem", ["filter", "ne_bot"]], ["add", "theorem", "prod", ["filter", "ne_bot"]], ["add", "def", "ne_bot", ["filter"]], ["add", "theorem", "ne_bot_of_le", ["filter"]], ["mod", "theorem", "nonempty_of_mem_sets", ["filter"]], ["mod", "theorem", "nonempty_of_ne_bot", ["filter"]], ["mod", "theorem", "principal_ne_bot_iff", ["filter"]], ["mod", "theorem", "prod_ne_bot", ["filter"]], ["del", "theorem", "pure_ne_bot", ["filter"]], ["mod", "theorem", "ne_bot", ["filter", "tendsto"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["del", "theorem", "cofinite_ne_bot", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["mod", "theorem", "const_eventually_eq'", ["filter"]], ["mod", "theorem", "const_eventually_eq", ["filter"]], ["mod", "theorem", "const_inj", ["filter", "germ"]], ["mod", "theorem", "const_le_iff", ["filter", "germ"]], ["mod", "theorem", "lift_pred_const_iff", ["filter", "germ"]], ["mod", "theorem", "lift_rel_const_iff", ["filter", "germ"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "lift'_ne_bot_iff", ["filter"]], ["mod", "theorem", "lift_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["del", "theorem", "mul_ne_bot", ["filter"]], ["add", "theorem", "mul", ["filter", "ne_bot"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "exists_ultrafilter", ["filter"]], ["mod", "theorem", "exists_ultrafilter_iff", ["filter"]], ["mod", "theorem", "hyperfilter_ne_bot", ["filter"]], ["add", "theorem", "unique", ["filter", "is_ultrafilter"]], ["mod", "def", "is_ultrafilter", ["filter"]], ["mod", "theorem", "le_of_ultrafilter", ["filter"]], ["mod", "theorem", "ultrafilter_of_spec", ["filter"]], ["add", "theorem", "ultrafilter_ultrafilter_of'", ["filter"]], ["mod", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["del", "theorem", "ultrafilter_unique", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "theorem", "Liminf_le_Limsup", ["filter"]], ["mod", "theorem", "is_cobounded_of_is_bounded", ["filter"]], ["mod", "theorem", "liminf_const", ["filter"]], ["mod", "theorem", "liminf_le_limsup", ["filter"]], ["mod", "theorem", "limsup_const", ["filter"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["del", "theorem", "eq_top_of_nonempty_interior'", ["submodule"]], ["add", "theorem", "eq_top_of_nonempty_interior", ["submodule"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "Liminf_eq_of_le_nhds", []], ["mod", "theorem", "Limsup_eq_of_le_nhds", []], ["mod", "theorem", "liminf_eq", ["filter", "tendsto"]], ["mod", "theorem", "limsup_eq", ["filter", "tendsto"]], ["mod", "theorem", "ge_of_tendsto'", []], ["mod", "theorem", "ge_of_tendsto", []], ["mod", "theorem", "le_of_tendsto_of_tendsto'", []], ["mod", "theorem", "le_of_tendsto_of_tendsto", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "ne_bot", ["cluster_pt"]], ["add", "theorem", "of_le_nhds'", ["cluster_pt"]], ["mod", "theorem", "of_le_nhds", ["cluster_pt"]], ["mod", "def", "cluster_pt", []], ["del", "theorem", "nhds_ne_bot", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["mod", "theorem", "comap_nhds_ne_bot", ["dense_inducing"]], ["add", "theorem", "nhds_within_ne_bot", ["dense_range"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "Lim_eq", []], ["mod", "theorem", "eq_of_nhds_ne_bot", []], ["mod", "theorem", "t2_iff_nhds", []], ["add", "theorem", "tendsto_nhds_unique'", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "inter_right", ["is_compact"]], ["mod", "theorem", "prod", ["is_compact"]], ["mod", "def", "is_compact", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "comap'", ["cauchy"]], ["add", "theorem", "comap", ["cauchy"]], ["add", "theorem", "map", ["cauchy"]], ["add", "theorem", "mono'", ["cauchy"]], ["add", "theorem", "mono", ["cauchy"]], ["mod", "def", "cauchy", []], ["del", "theorem", "cauchy_comap", []], ["del", "theorem", "cauchy_downwards", []], ["mod", "theorem", "cauchy_iff_exists_le_nhds", []], ["del", "theorem", "cauchy_map", []], ["add", "theorem", "cauchy_map_iff'", []], ["mod", "theorem", "cauchy_map_iff_exists_tendsto", []], ["mod", "def", "seq", ["sequentially_complete"]], ["add", "theorem", "closure", ["totally_bounded"]], ["add", "theorem", "image", ["totally_bounded"]], ["del", "theorem", "totally_bounded_closure", []], ["del", "theorem", "totally_bounded_image", []]]}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1595193538, "sha": "953ab3ab", "message": "feat(geometry/manifold/charted_space): open subset of a manifold is a manifold (#3442)\nAn open subset of a charted space is naturally a charted space. If the charted space has structure groupoid `G` (with `G` closed under restriction), then the open subset does also.\nMost of the work is in `topology/local_homeomorph`, where it is proved that a local homeomorphism whose source is `univ` is an open embedding, and conversely.", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "image_open_of_open'", ["local_homeomorph"]], ["add", "theorem", "source_preimage_target", ["local_homeomorph"]], ["add", "theorem", "subtype_restr_coe", ["local_homeomorph"]], ["add", "theorem", "subtype_restr_def", ["local_homeomorph"]], ["add", "theorem", "subtype_restr_source", ["local_homeomorph"]], ["add", "theorem", "subtype_restr_symm_trans_subtype_restr", ["local_homeomorph"]], ["add", "theorem", "to_open_embedding", ["local_homeomorph"]], ["add", "theorem", "continuous_inv_fun", ["open_embedding"]], ["add", "theorem", "open_target", ["open_embedding"]], ["add", "theorem", "source", ["open_embedding"]], ["add", "theorem", "target", ["open_embedding"]], ["add", "theorem", "to_local_equiv_coe", ["open_embedding"]], ["add", "theorem", "to_local_equiv_source", ["open_embedding"]], ["add", "theorem", "to_local_equiv_target", ["open_embedding"]], ["add", "theorem", "to_local_homeomorph_coe", ["open_embedding"]], ["add", "theorem", "local_homeomorph_subtype_coe_coe", ["topological_space", "opens"]], ["add", "theorem", "local_homeomorph_subtype_coe_source", ["topological_space", "opens"]], ["add", "theorem", "local_homeomorph_subtype_coe_target", ["topological_space", "opens"]]]}]}, {"timestamp": 1595175143, "sha": "bc278b7e", "message": "fix(tactic/apply_rules): fix stuck metavariable bug (#3451)\n`apply_rules` had the same bug `solve_by_elim` used to suffer from: applying a lemma once would fix its arguments, and prevent it from being applied a second time with different arguments.\nThis essentially ports over the fix from `solve_by_elim`: rather than carrying around a `list expr`, we carry a `list (tactic expr)` and generate on demand.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": null, "newPath": "test/apply_rules.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1595172588, "sha": "9b0435a0", "message": "fix(tactic/linarith): find correct zero_lt_one (#3455)\nZulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/linarith.20and.20ordinal.20file", "changes": [{"oldPath": "src/tactic/linarith/verification.lean", "newPath": "src/tactic/linarith/verification.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["add", "theorem", "works", ["T"]], ["add", "theorem", "zero_lt_one", ["T"]]]}]}, {"timestamp": 1595169868, "sha": "47ea2a6e", "message": "feat(topology, analysis) : add lemmas about `has_neg.neg` (preliminaries for L'Hopital's rule) (#3392)\nThis PR contains a few lemmas about the `has_neg.neg` function, such as : \n- its limit along `at_top` and `at_bot`\n- its limit along `nhds a`, `nhds_within a (Ioi a)` and similar filters\n- its differentiability and derivative", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "neg'", ["deriv"]], ["add", "theorem", "neg", ["deriv"]], ["add", "theorem", "deriv_neg''", []], ["mod", "theorem", "deriv_neg'", []], ["mod", "theorem", "deriv_neg", []], ["add", "theorem", "neg", ["deriv_within"]], ["mod", "theorem", "deriv_within_neg", []], ["add", "theorem", "differentiable_neg", []], ["add", "theorem", "differentiable_on_neg", []], ["add", "theorem", "has_deriv_at_filter_neg", []], ["add", "theorem", "has_deriv_at_neg'", []], ["add", "theorem", "has_deriv_at_neg", []], ["add", "theorem", "has_deriv_within_at_neg", []], ["add", "theorem", "has_strict_deriv_at_neg", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "exists_forall_of_at_top", ["filter", "eventually"]], ["mod", "theorem", "eventually_at_top", ["filter"]], ["add", "theorem", "eventually_ge_at_top", ["filter"]], ["mod", "theorem", "forall_exists_of_at_top", ["filter", "frequently"]], ["mod", "theorem", "frequently_at_top'", ["filter"]], ["mod", "theorem", "frequently_at_top", ["filter"]], ["add", "theorem", "tendsto_at_bot'", ["filter"]], ["add", "theorem", "tendsto_at_bot", ["filter"]], ["add", "theorem", "tendsto_at_bot_at_bot", ["filter"]], ["add", "theorem", "tendsto_at_bot_at_top", ["filter"]], ["mod", "theorem", "tendsto_at_top_at_bot", ["filter"]], ["mod", "theorem", "tendsto_at_top_at_top_of_monotone'", ["filter"]], ["mod", "theorem", "tendsto_at_top_embedding", ["filter"]], ["mod", "theorem", "tendsto_at_top_of_monotone_of_filter", ["filter"]], ["mod", "theorem", "tendsto_at_top_of_monotone_of_subseq", ["filter"]], ["mod", "theorem", "tendsto_at_top_pure", ["filter"]], ["add", "theorem", "tendsto_neg_at_bot_at_top", ["filter"]], ["add", "theorem", "tendsto_neg_at_top_at_bot", ["filter"]], ["mod", "theorem", "unbounded_of_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "continuous_on_inv", []], ["add", "theorem", "tendsto_inv", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_inv_nhds_within_Iio", []], ["add", "theorem", "tendsto_inv_nhds_within_Iio_inv", []], ["add", "theorem", "tendsto_inv_nhds_within_Ioi", []], ["add", "theorem", "tendsto_inv_nhds_within_Ioi_inv", []]]}]}, {"timestamp": 1595167997, "sha": "8187551d", "message": "feat(topology/algebra/continuous_functions): algebra structure over continuous functions (#3383)", "changes": [{"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": [["add", "def", "C", []]]}]}, {"timestamp": 1595150978, "sha": "5228d557", "message": "feat(linear_algebra/basic): add span_zero (#3306)\n`simp` now proves span_zero for both submodules and ideals", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "span_singleton_eq_bot", ["submodule"]], ["add", "theorem", "span_zero", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "theorem", "span_singleton_eq_bot", ["ideal"]], ["add", "theorem", "span_zero", ["ideal"]]]}]}, {"timestamp": 1595139871, "sha": "33544763", "message": "feat(data/indicator_function): more lemmas (#3424)\nAdd some lemmas of use when using `set.indicator` to manipulate\nfunctions involved in summations.", "changes": [{"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "mem_of_indicator_ne_zero", ["set"]], ["add", "theorem", "sum_indicator_subset", ["set"]], ["add", "theorem", "sum_indicator_subset_of_eq_zero", ["set"]]]}]}, {"timestamp": 1595137395, "sha": "8312419c", "message": "refactor(data/polynomial): remove has_coe_to_fun, and @[reducible] on monomial (#3420)\nI'm going to refactor in stages, trying to clean up some of the cruftier aspects of `data/polynomial/*`.\nThis PR:\n1. removes the `has_coe_to_fun` on polynomial", "changes": [{"oldPath": "src/data/polynomial/basic.lean", "newPath": "src/data/polynomial/basic.lean", "changes": [["del", "theorem", "apply_eq_coeff", ["polynomial"]], ["del", "def", "coeff_coe_to_fun", ["polynomial"]], ["add", "theorem", "coeff_monomial", ["polynomial"]], ["mod", "theorem", "coeff_one_zero", ["polynomial"]], ["add", "theorem", "monomial_mul_monomial", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/coeff.lean", "newPath": "src/data/polynomial/coeff.lean", "changes": []}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial/derivative.lean", "newPath": "src/data/polynomial/derivative.lean", "changes": []}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "apply_eq_coeff", ["polynomial"]], ["add", "def", "coeff_coe_to_fun", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/eval.lean", "newPath": "src/data/polynomial/eval.lean", "changes": []}, {"oldPath": "src/data/polynomial/monomial.lean", "newPath": "src/data/polynomial/monomial.lean", "changes": [["mod", "theorem", "coeff_C_zero", ["polynomial"]], ["mod", "theorem", "coeff_X", ["polynomial"]], ["mod", "theorem", "coeff_X_one", ["polynomial"]], ["mod", "theorem", "coeff_X_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1595134422, "sha": "eca55c9a", "message": "feat(category_theory/equivalence): injectivity simp lemmas for equivalences (#3437)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "theorem", "functor_map_inj_iff", ["category_theory", "equivalence"]], ["add", "theorem", "inverse_map_inj_iff", ["category_theory", "equivalence"]]]}]}, {"timestamp": 1595134420, "sha": "eb68f4c2", "message": "feat (linear_algebra/matrix): make diag and trace compatible with semirings (#3433)\nchanges ring and related instances to semiring etc. in requirements for matrix.diag and matrix.trace", "changes": [{"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "def", "diag", ["matrix"]], ["mod", "def", "trace", ["matrix"]]]}]}, {"timestamp": 1595134418, "sha": "e6bfe187", "message": "feat(topology/algebra/module): pi and proj for CLM (#3430)", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "infi_ker_proj", ["continuous_linear_map"]], ["add", "def", "infi_ker_proj_equiv", ["continuous_linear_map"]], ["add", "def", "pi", ["continuous_linear_map"]], ["add", "theorem", "pi_apply", ["continuous_linear_map"]], ["add", "theorem", "pi_comp", ["continuous_linear_map"]], ["add", "theorem", "pi_eq_zero", ["continuous_linear_map"]], ["add", "theorem", "pi_zero", ["continuous_linear_map"]], ["add", "def", "proj", ["continuous_linear_map"]], ["add", "theorem", "proj_apply", ["continuous_linear_map"]], ["add", "theorem", "proj_pi", ["continuous_linear_map"]]]}]}, {"timestamp": 1595130157, "sha": "f83cf57a", "message": "feat(data/equiv/mul_add): minor lemmas (#3447)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "apply_inv_self", ["add_aut"]], ["add", "theorem", "inv_apply_self", ["add_aut"]], ["add", "theorem", "apply_inv_self", ["mul_aut"]], ["add", "theorem", "inv_apply_self", ["mul_aut"]]]}]}, {"timestamp": 1595130155, "sha": "61bd966e", "message": "feat(data/list/basic): add concat lemmas (#3445)\nThe first two are taken after the `head_eq_of_cons_eq` and `tail_eq_of_cons_eq` lemmas further up in the file.\nThe third, `reverse_concat`, is like `reverse_cons'` but with the `::` and `concat` swapped.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "init_eq_of_concat_eq", ["list"]], ["add", "theorem", "last_eq_of_concat_eq", ["list"]], ["add", "theorem", "reverse_concat", ["list"]]]}]}, {"timestamp": 1595128524, "sha": "91ca9270", "message": "feat(geometry/manifold/local_invariant_properties): local structomorphism is `local_invariant_prop` (#3434)\nFor a groupoid `G`, define the property of being a local structomorphism; prove that if `G` is closed under restriction then this property satisfies `local_invariant_prop` (i.e., is local and `G`-invariant).", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "theorem", "closed_under_restriction'", []]]}, {"oldPath": "src/geometry/manifold/local_invariant_properties.lean", "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": [["add", "def", "is_local_structomorph_within_at", ["structure_groupoid"]], ["add", "theorem", "is_local_structomorph_within_at_local_invariant_prop", ["structure_groupoid"]]]}]}, {"timestamp": 1595090977, "sha": "4760a33a", "message": "feat(algebra/polynomial, data/polynomial): lemmas about monic polynomials (#3402)", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "add_pow_char_of_commute", []]]}, {"oldPath": "src/algebra/polynomial/basic.lean", "newPath": null, "changes": [["del", "theorem", "coe_aeval_eq_eval", ["polynomial"]], ["del", "theorem", "coeff_zero_eq_aeval_zero", ["polynomial"]], ["del", "def", "leading_coeff_hom", ["polynomial"]], ["del", "theorem", "leading_coeff_hom_apply", ["polynomial"]]]}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["del", "theorem", "monic_prod_of_monic", ["polynomial"]], ["add", "theorem", "nat_degree_prod'", ["polynomial"]], ["add", "theorem", "nat_degree_prod", ["polynomial"]], ["del", "theorem", "nat_degree_prod_eq'", ["polynomial"]], ["del", "theorem", "nat_degree_prod_eq", ["polynomial"]], ["del", "theorem", "nat_degree_prod_eq_of_monic", ["polynomial"]], ["add", "theorem", "nat_degree_prod_of_monic", ["polynomial"]], ["add", "theorem", "prod_X_sub_C_coeff_card_pred", ["polynomial"]], ["add", "theorem", "prod_X_sub_C_next_coeff", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/algebra_map.lean", "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "coe_aeval_eq_eval", ["polynomial"]], ["add", "theorem", "coeff_zero_eq_aeval_zero", ["polynomial"]], ["add", "theorem", "pow_comp", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree.lean", "newPath": "src/data/polynomial/degree.lean", "changes": [["add", "theorem", "degree_mul'", ["polynomial"]], ["add", "theorem", "degree_mul", ["polynomial"]], ["del", "theorem", "degree_mul_eq'", ["polynomial"]], ["add", "theorem", "degree_pow'", ["polynomial"]], ["add", "theorem", "degree_pow", ["polynomial"]], ["del", "theorem", "degree_pow_eq'", ["polynomial"]], ["add", "def", "leading_coeff_hom", ["polynomial"]], ["add", "theorem", "leading_coeff_hom_apply", ["polynomial"]], ["add", "theorem", "leading_coeff_mul", ["polynomial"]], ["add", "theorem", "leading_coeff_pow", ["polynomial"]], ["add", "theorem", "nat_degree_mul'", ["polynomial"]], ["del", "theorem", "nat_degree_mul_eq'", ["polynomial"]], ["add", "theorem", "nat_degree_pow'", ["polynomial"]], ["del", "theorem", "nat_degree_pow_eq'", ["polynomial"]], ["add", "theorem", "next_coeff_X_sub_C", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/degree/basic.lean", "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "def", "next_coeff", ["polynomial"]], ["add", "theorem", "next_coeff_C_eq_zero", ["polynomial"]], ["add", "theorem", "next_coeff_of_pos_nat_degree", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/div.lean", "newPath": "src/data/polynomial/div.lean", "changes": []}, {"oldPath": "src/data/polynomial/field_division.lean", "newPath": "src/data/polynomial/field_division.lean", "changes": []}, {"oldPath": "src/data/polynomial/monic.lean", "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "coeff_nat_degree", ["polynomial", "monic"]], ["add", "theorem", "degree_eq_zero_iff_eq_one", ["polynomial", "monic"]], ["add", "theorem", "nat_degree_mul", ["polynomial", "monic"]], ["add", "theorem", "next_coeff_mul", ["polynomial", "monic"]], ["add", "theorem", "next_coeff_prod", ["polynomial", "monic"]], ["add", "theorem", "monic_prod_of_monic", ["polynomial"]]]}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": [["del", "theorem", "degree_mul_eq", ["polynomial"]], ["del", "theorem", "degree_pow_eq", ["polynomial"]], ["del", "theorem", "leading_coeff_mul", ["polynomial"]], ["del", "theorem", "leading_coeff_pow", ["polynomial"]], ["add", "theorem", "nat_degree_mul", ["polynomial"]], ["del", "theorem", "nat_degree_mul_eq", ["polynomial"]], ["add", "theorem", "nat_degree_pow", ["polynomial"]], ["del", "theorem", "nat_degree_pow_eq", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1595089156, "sha": "37cf166f", "message": "feat(data/complex/exponential): added @[mono] tag to exp_le_exp and exp_lt_exp (#3318)\nadded @[mono] tag to exp_le_exp and exp_lt_exp.", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_monotone", ["real"]]]}]}, {"timestamp": 1595075291, "sha": "e3e0aa0d", "message": "chore(linear_algebra/direct_sum_module): add dosctrings (#3418)", "changes": [{"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["mod", "def", "lmk", ["direct_sum"]]]}]}, {"timestamp": 1595071617, "sha": "21a16834", "message": "feat(data/finsupp): sums over on_finset (#3427)\nThere aren't many lemmas about `finsupp.on_finset`. Add one that's\nuseful for manipulating sums over `on_finset`.", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "on_finset_sum", ["finsupp"]]]}]}, {"timestamp": 1595071615, "sha": "4767b303", "message": "feat(algebra/big_operators): more general prod_insert_one (#3426)\nI found I had a use for a slightly more general version of\n`prod_insert_one` / `sum_insert_zero`. Add that version and use it in\nthe proof of `prod_insert_one`.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_insert_of_eq_one_if_not_mem", ["finset"]]]}]}, {"timestamp": 1595068450, "sha": "f81568a3", "message": "feat(group_theory/semidirect_product): mk_eq_inl_mul_inr and hom_ext (#3408)", "changes": [{"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": [["add", "theorem", "hom_ext", ["semidirect_product"]], ["add", "theorem", "mk_eq_inl_mul_inr", ["semidirect_product"]]]}]}, {"timestamp": 1595064468, "sha": "907147ad", "message": "feat(linear_algebra/matrix): define equivalences for reindexing matrices with equivalent types (#3409)", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "def", "reindex_lie_equiv", ["matrix"]], ["add", "theorem", "reindex_lie_equiv_apply", ["matrix"]], ["add", "theorem", "reindex_lie_equiv_symm_apply", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "def", "reindex", ["matrix"]], ["add", "def", "reindex_alg_equiv", ["matrix"]], ["add", "theorem", "reindex_alg_equiv_apply", ["matrix"]], ["add", "theorem", "reindex_alg_equiv_symm_apply", ["matrix"]], ["add", "theorem", "reindex_apply", ["matrix"]], ["add", "def", "reindex_linear_equiv", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_apply", ["matrix"]], ["add", "theorem", "reindex_linear_equiv_symm_apply", ["matrix"]], ["add", "theorem", "reindex_mul", ["matrix"]], ["add", "theorem", "reindex_symm_apply", ["matrix"]]]}]}, {"timestamp": 1595055368, "sha": "06823d6d", "message": "chore(*): add copyright header, cleanup imports (#3440)\nFixes\n1. a missing copyright header\n2. moves `tactic.obviously` into the imports of `tactic.basic`, so everyone has `tidy` and `obviously` available.\n3. removes a few redundant imports", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/obviously.lean", "newPath": "src/tactic/obviously.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}]}, {"timestamp": 1594997356, "sha": "9616f443", "message": "feat(algebra/ordered_group): decidable_linear_order for multiplicative and additive (#3429)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1594997354, "sha": "3acf220f", "message": "feat(group_theory/semidirect_product): inl_aut_inv (#3410)", "changes": [{"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": [["add", "theorem", "inl_aut_inv", ["semidirect_product"]], ["mod", "theorem", "inl_left_mul_inr_right", ["semidirect_product"]]]}]}, {"timestamp": 1594993673, "sha": "89996255", "message": "chore(*): more import reduction (#3421)\nAnother import reduction PR. (This is by hand, not just removing transitive imports.)\nMostly this one is from staring at `leanproject import-graph --to data.polynomial.basic` and wondering about weird edges in the graph.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/big_operators.lean", "newPath": "src/algebra/polynomial/big_operators.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/int/sqrt.lean", "newPath": "src/data/int/sqrt.lean", "changes": []}, {"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": []}, {"oldPath": "src/data/polynomial/ring_division.lean", "newPath": "src/data/polynomial/ring_division.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": [["del", "theorem", "exists_mul_self", ["rat"]], ["del", "def", "sqrt", ["rat"]], ["del", "theorem", "sqrt_eq", ["rat"]], ["del", "theorem", "sqrt_nonneg", ["rat"]]]}, {"oldPath": null, "newPath": "src/data/rat/sqrt.lean", "changes": [["add", "theorem", "exists_mul_self", ["rat"]], ["add", "def", "sqrt", ["rat"]], ["add", "theorem", "sqrt_eq", ["rat"]], ["add", "theorem", "sqrt_nonneg", ["rat"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1594989502, "sha": "207a1d4e", "message": "feat(data/finset/basic): finset of empty type (#3425)\nIn a proof working by cases for whether a type is nonempty, I found I\nhad a use for the result that a `finset` of an empty type is empty.", "changes": [{"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "eq_empty_of_not_nonempty", ["finset"]]]}]}, {"timestamp": 1594978016, "sha": "4a6b7168", "message": "fix(tactic/nlinarith): stop nlinarith failing in the presence of squares when there is no order (#3417)\nAs reported by Heather Macbeth at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/app_builder_exception.20in.20.60nlinarith.60/near/204138256", "changes": [{"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["add", "theorem", "abs_nonneg'", []]]}]}, {"timestamp": 1594970589, "sha": "7d31f772", "message": "refactor(measure_theory/*): big refactor (#3373)\nBig refactor of integrals, fixes #3084 \nMake `integral (f : α → E) (μ : measure α)` the main definition, and use `notation` for other integrals\n(over a set and/or w.r.t. the canonical measure `volume`).", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "coe_injective", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "extend_unique", ["continuous_linear_map"]]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "map_indicator", ["add_monoid_hom"]], ["add", "theorem", "indicator_le'", ["set"]], ["add", "theorem", "indicator_le", ["set"]], ["add", "theorem", "indicator_le_self'", ["set"]], ["add", "theorem", "indicator_le_self", ["set"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_indicator", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_indicator", ["nnreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "if_preimage", ["set"]], ["add", "theorem", "set_of_true", ["set"]], ["del", "theorem", "univ_def", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "piecewise_preimage", ["set"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["del", "theorem", "add_to_fun", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "all_ae_mk_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_comp", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_comp₂", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_const", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_edist", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_inv", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_le", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_mul", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_one", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_pair", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_pos_part", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_smul", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "coe_fn_sub", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "comp", ["measure_theory", "ae_eq_fun"]], ["del", "def", "comp_edist", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "comp_edist_self", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "comp_edist_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_eq_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "comp_eq_mk_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "comp_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "comp_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_to_germ", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "comp₂", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_eq_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "comp₂_eq_mk_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_eq_pair", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "comp₂_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_to_germ", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "const", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "const_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_add_right", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_eq_add_add", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_eq_coe'", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_eq_coe", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "edist_mk_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "edist_smul", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_to_fun'", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_zero_eq_coe", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "edist_zero_to_fun", ["measure_theory", "ae_eq_fun"]], ["del", "def", "eintegral", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "eintegral_add", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "eintegral_eq_zero_iff", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "eintegral_le_eintegral", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "eintegral_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "eintegral_to_fun", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "eintegral_zero", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "ext", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "induction_on", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "induction_on₂", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "induction_on₃", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "inv_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "inv_to_germ", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "le_iff_to_fun_le", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "lift_pred", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "lift_rel", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lift_rel_iff_coe_fn", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "lift_rel_iff_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "lift_rel_mk_mk", ["measure_theory", "ae_eq_fun"]], ["add", "def", "lintegral", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lintegral_add", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lintegral_coe_fn", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lintegral_eq_zero_iff", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lintegral_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lintegral_mono", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lintegral_zero", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "mk_add_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_coe_fn", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "mk_eq_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "mk_le_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_mul_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_sub", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "mk_sub_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_to_germ", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mul_to_germ", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "neg_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "neg_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "one_def", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "one_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "one_to_germ", ["measure_theory", "ae_eq_fun"]], ["add", "def", "pair", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "pair_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "pair_mk_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "pos_part", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "pos_part_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "pos_part_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "quot_mk_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "quotient_out'_eq_coe_fn", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "self_eq_mk", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "smul_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "smul_to_germ", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "sub_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "def", "to_germ", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "to_germ_eq", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "to_germ_injective", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "zero_def", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "zero_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "ae_eq_fun", ["measure_theory"]], ["add", "def", "ae_eq_setoid", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "def", "integral", ["measure_theory"]], ["add", "theorem", "integral_add_meas", ["measure_theory"]], ["mod", "theorem", "integral_congr_ae", ["measure_theory"]], ["add", "theorem", "integral_const", ["measure_theory"]], ["mod", "theorem", "integral_div", ["measure_theory"]], ["mod", "theorem", "integral_eq", ["measure_theory"]], ["mod", "theorem", "integral_eq_lintegral_of_nonneg_ae", ["measure_theory"]], ["mod", "theorem", "integral_finset_sum", ["measure_theory"]], ["del", "theorem", "integral_le_integral", ["measure_theory"]], ["del", "theorem", "integral_le_integral_ae", ["measure_theory"]], ["add", "theorem", "integral_mono", ["measure_theory"]], ["mod", "theorem", "integral_mul_left", ["measure_theory"]], ["mod", "theorem", "integral_mul_right", ["measure_theory"]], ["mod", "theorem", "integral_neg", ["measure_theory"]], ["mod", "theorem", "integral_non_integrable", ["measure_theory"]], ["mod", "theorem", "integral_non_measurable", ["measure_theory"]], ["mod", "theorem", "integral_nonneg_of_ae", ["measure_theory"]], ["mod", "theorem", "integral_nonpos_of_nonpos_ae", ["measure_theory"]], ["mod", "theorem", "integral_smul", ["measure_theory"]], ["mod", "theorem", "integral_undef", ["measure_theory"]], ["mod", "theorem", "integral_zero", ["measure_theory"]], ["mod", "def", "integral", ["measure_theory", "l1"]], ["mod", "theorem", "integral_add", ["measure_theory", "l1"]], ["mod", "def", "integral_clm", ["measure_theory", "l1"]], ["mod", "theorem", "integral_eq", ["measure_theory", "l1"]], ["mod", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "l1"]], ["mod", "theorem", "integral_neg", ["measure_theory", "l1"]], ["mod", "theorem", "integral_smul", ["measure_theory", "l1"]], ["mod", "theorem", "integral_sub", ["measure_theory", "l1"]], ["mod", "theorem", "integral_zero", ["measure_theory", "l1"]], ["mod", "theorem", "norm_integral_le", ["measure_theory", "l1"]], ["mod", "theorem", "add_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_add", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_coe", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_neg", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_neg_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_pos_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_smul", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_sub", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "coe_to_l1", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_zero", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "dist_eq", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "dist_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "edist_eq", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "exists_simple_func_near", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "integral", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "integral_add", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "integral_clm", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "integral_congr", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "integral_eq_bintegral", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "integral_eq_integral", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "integral_eq_lintegral", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "integral_l1_eq_integral", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "integral_smul", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "lintegral_edist_to_simple_func_lt_top", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "neg_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "neg_part_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "neg_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "norm_eq'", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "norm_eq", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "norm_eq_bintegral", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_eq_integral", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "norm_integral_le_norm", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "norm_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "norm_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "of_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_add", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_eq_mk", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_eq_of_fun", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_neg", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_smul", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_sub", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "of_simple_func_zero", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "pos_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "pos_part_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "smul_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "sub_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "to_simple_func_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "zero_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "simple_func", ["measure_theory", "l1"]], ["mod", "theorem", "norm_integral_le_integral_norm", ["measure_theory"]], ["mod", "theorem", "norm_integral_le_lintegral_norm", ["measure_theory"]], ["del", "def", "bintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_add", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_congr", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_eq_integral'", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_eq_integral", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_eq_lintegral'", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_eq_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_neg", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_smul", ["measure_theory", "simple_func"]], ["del", "theorem", "bintegral_sub", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable", ["measure_theory", "simple_func", "fin_meas_supp"]], ["del", "theorem", "fin_vol_supp_of_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_iff_fin_meas_supp", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_iff_fin_vol_supp", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_iff_integral_lt_top", ["measure_theory", "simple_func"]], ["del", "theorem", "integrable_of_fin_vol_supp", ["measure_theory", "simple_func"]], ["mod", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["add", "def", "integral", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_add", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_add_meas", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_eq_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_eq_lintegral'", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_eq_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_eq_sum_filter", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_neg", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_smul", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_sub", ["measure_theory", "simple_func"]], ["del", "theorem", "map_bintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "map_integral", ["measure_theory", "simple_func"]], ["mod", "def", "neg_part", ["measure_theory", "simple_func"]], ["del", "theorem", "norm_bintegral_le_bintegral_norm", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_integral_le_integral_norm", ["measure_theory", "simple_func"]], ["mod", "def", "pos_part", ["measure_theory", "simple_func"]], ["mod", "theorem", "tendsto_integral_of_dominated_convergence", ["measure_theory"]], ["add", "theorem", "tendsto_integral_of_l1", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["del", "theorem", "is_measurable_eq", []], ["del", "theorem", "is_measurable_singleton", []]]}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": [["del", "theorem", "integral_bind", ["measure_theory", "measure"]], ["del", "theorem", "integral_join", ["measure_theory", "measure"]], ["add", "theorem", "lintegral_bind", ["measure_theory", "measure"]], ["add", "theorem", "lintegral_join", ["measure_theory", "measure"]], ["del", "theorem", "measurable_integral", ["measure_theory", "measure"]], ["add", "theorem", "measurable_lintegral", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": [["mod", "theorem", "indicator_congr_ae", []], ["mod", "theorem", "indicator_congr_of_set", []], ["mod", "theorem", "indicator_le_indicator_ae", []]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "def", "lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_Union", ["measure_theory"]], ["add", "theorem", "lintegral_Union_le", ["measure_theory"]], ["add", "theorem", "lintegral_add_meas", ["measure_theory"]], ["mod", "theorem", "lintegral_congr_ae", ["measure_theory"]], ["add", "theorem", "lintegral_const", ["measure_theory"]], ["mod", "theorem", "lintegral_const_mul_le", ["measure_theory"]], ["add", "theorem", "lintegral_dirac", ["measure_theory"]], ["mod", "theorem", "lintegral_eq_nnreal", ["measure_theory"]], ["del", "theorem", "lintegral_eq_supr_eapprox_integral", ["measure_theory"]], ["add", "theorem", "lintegral_eq_supr_eapprox_lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_indicator", ["measure_theory"]], ["del", "theorem", "lintegral_le_lintegral_ae", ["measure_theory"]], ["add", "theorem", "lintegral_map", ["measure_theory"]], ["add", "theorem", "lintegral_mono'", ["measure_theory"]], ["mod", "theorem", "lintegral_mono", ["measure_theory"]], ["add", "theorem", "lintegral_mono_ae", ["measure_theory"]], ["mod", "theorem", "lintegral_rw₁", ["measure_theory"]], ["mod", "theorem", "lintegral_rw₂", ["measure_theory"]], ["add", "theorem", "lintegral_smul_meas", ["measure_theory"]], ["add", "theorem", "lintegral_sum_meas", ["measure_theory"]], ["del", "theorem", "lintegral_supr_const", ["measure_theory"]], ["mod", "theorem", "lintegral_zero", ["measure_theory"]], ["add", "theorem", "lintegral_zero_meas", ["measure_theory"]], ["add", "theorem", "meas_ge_le_lintegral_div", ["measure_theory"]], ["del", "def", "integral", ["measure_theory", "measure"]], ["del", "theorem", "integral_dirac", ["measure_theory", "measure"]], ["del", "theorem", "integral_map", ["measure_theory", "measure"]], ["del", "theorem", "integral_zero", ["measure_theory", "measure"]], ["mod", "def", "with_density", ["measure_theory", "measure"]], ["del", "theorem", "with_density_apply", ["measure_theory", "measure"]], ["mod", "theorem", "monotone_lintegral", ["measure_theory"]], ["add", "theorem", "mul_meas_ge_le_lintegral", ["measure_theory"]], ["del", "theorem", "mul_volume_ge_le_lintegral", ["measure_theory"]], ["del", "theorem", "add_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "add_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_add", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_const", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_injective", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_le", ["measure_theory", "simple_func"]], ["mod", "theorem", "coe_map", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_mul", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_neg", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_piecewise", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_range", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_smul", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_sub", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_zero", ["measure_theory", "simple_func"]], ["mod", "theorem", "const_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "const_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "const_lintegral_restrict", ["measure_theory", "simple_func"]], ["del", "theorem", "const_mul_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "const_mul_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "const_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "eq_zero_of_mem_range_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "exists_range_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "iff_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "map_iff", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "meas_preimage_singleton_ne_zero", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "of_lintegral_lt_top", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "of_map", ["measure_theory", "simple_func", "fin_meas_supp"]], ["add", "theorem", "fin_meas_supp_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "fin_meas_supp_iff_support", ["measure_theory", "simple_func"]], ["del", "theorem", "fin_vol_supp_map", ["measure_theory", "simple_func"]], ["del", "theorem", "fin_vol_supp_of_fin_vol_supp_map", ["measure_theory", "simple_func"]], ["del", "theorem", "fin_vol_supp_of_integral_lt_top", ["measure_theory", "simple_func"]], ["del", "theorem", "fin_vol_supp_pair", ["measure_theory", "simple_func"]], ["add", "theorem", "finite_range", ["measure_theory", "simple_func"]], ["add", "theorem", "forall_range_iff", ["measure_theory", "simple_func"]], ["del", "def", "integral", ["measure_theory", "simple_func"]], ["del", "theorem", "integral_congr", ["measure_theory", "simple_func"]], ["del", "theorem", "integral_le_integral", ["measure_theory", "simple_func"]], ["del", "theorem", "integral_lt_top_of_fin_vol_supp", ["measure_theory", "simple_func"]], ["del", "theorem", "integral_map", ["measure_theory", "simple_func"]], ["del", "theorem", "integral_map_coe_lt_top", ["measure_theory", "simple_func"]], ["del", "theorem", "integral_sup_le", ["measure_theory", "simple_func"]], ["mod", "theorem", "is_measurable_cut", ["measure_theory", "simple_func"]], ["add", "theorem", "is_measurable_fiber", ["measure_theory", "simple_func"]], ["add", "theorem", "is_measurable_preimage", ["measure_theory", "simple_func"]], ["del", "def", "ite", ["measure_theory", "simple_func"]], ["del", "theorem", "ite_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "le_sup_lintegral", ["measure_theory", "simple_func"]], ["add", "def", "lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_add", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_congr", ["measure_theory", "simple_func"]], ["del", "theorem", "lintegral_eq_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_eq_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_eq_of_measure_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_eq_of_subset", ["measure_theory", "simple_func"]], ["mod", "theorem", "lintegral_map", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_smul", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_sum", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_zero", ["measure_theory", "simple_func"]], ["add", "def", "lintegralₗ", ["measure_theory", "simple_func"]], ["mod", "theorem", "map_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "map_coe_ennreal_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "map_coe_nnreal_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "map_const", ["measure_theory", "simple_func"]], ["del", "theorem", "map_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "map_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "map_restrict_of_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_image_of_mem_range_restrict", ["measure_theory", "simple_func"]], ["mod", "theorem", "mem_range", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_range_of_measure_ne_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_range_self", ["measure_theory", "simple_func"]], ["mod", "theorem", "mem_restrict_range", ["measure_theory", "simple_func"]], ["mod", "theorem", "mul_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "mul_eq_map₂", ["measure_theory", "simple_func"]], ["add", "def", "piecewise", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_compl", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_empty", ["measure_theory", "simple_func"]], ["add", "theorem", "piecewise_univ", ["measure_theory", "simple_func"]], ["del", "theorem", "preimage_measurable", ["measure_theory", "simple_func"]], ["mod", "theorem", "range_const", ["measure_theory", "simple_func"]], ["add", "theorem", "range_zero", ["measure_theory", "simple_func"]], ["mod", "def", "restrict", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_const_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_const_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_empty", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_lintegral_eq_lintegral_restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_of_not_measurable", ["measure_theory", "simple_func"]], ["del", "theorem", "restrict_preimage'", ["measure_theory", "simple_func"]], ["mod", "theorem", "restrict_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_preimage_singleton", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_univ", ["measure_theory", "simple_func"]], ["mod", "theorem", "smul_eq_map", ["measure_theory", "simple_func"]], ["mod", "theorem", "sup_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "support_eq", ["measure_theory", "simple_func"]], ["mod", "theorem", "supr_eapprox_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "volume_bUnion_preimage", ["measure_theory", "simple_func"]], ["del", "theorem", "zero_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "zero_lintegral", ["measure_theory", "simple_func"]], ["del", "theorem", "volume_ge_le_lintegral_div", ["measure_theory"]], ["add", "theorem", "with_density_apply", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "add", ["measure_theory", "ae_eq_fun", "integrable"]], ["mod", "theorem", "neg", ["measure_theory", "ae_eq_fun", "integrable"]], ["mod", "theorem", "smul", ["measure_theory", "ae_eq_fun", "integrable"]], ["mod", "theorem", "sub", ["measure_theory", "ae_eq_fun", "integrable"]], ["mod", "def", "integrable", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_coe_fn", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "integrable_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_zero", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "all_ae_of_real_F_le_bound", ["measure_theory"]], ["mod", "theorem", "all_ae_of_real_f_le_bound", ["measure_theory"]], ["mod", "theorem", "all_ae_tendsto_of_real_norm", ["measure_theory"]], ["add", "theorem", "add_meas", ["measure_theory", "integrable"]], ["add", "theorem", "congr", ["measure_theory", "integrable"]], ["add", "theorem", "left_of_add_meas", ["measure_theory", "integrable"]], ["mod", "theorem", "max_zero", ["measure_theory", "integrable"]], ["mod", "theorem", "min_zero", ["measure_theory", "integrable"]], ["add", "theorem", "mono", ["measure_theory", "integrable"]], ["add", "theorem", "mono_meas", ["measure_theory", "integrable"]], ["add", "theorem", "mono_set", ["measure_theory", "integrable"]], ["mod", "theorem", "neg", ["measure_theory", "integrable"]], ["mod", "theorem", "norm", ["measure_theory", "integrable"]], ["add", "theorem", "right_of_add_meas", ["measure_theory", "integrable"]], ["mod", "theorem", "smul", ["measure_theory", "integrable"]], ["add", "theorem", "smul_meas", ["measure_theory", "integrable"]], ["add", "theorem", "union", ["measure_theory", "integrable"]], ["mod", "def", "integrable", ["measure_theory"]], ["add", "theorem", "integrable_congr", ["measure_theory"]], ["del", "theorem", "integrable_congr_ae", ["measure_theory"]], ["add", "theorem", "integrable_const", ["measure_theory"]], ["mod", "theorem", "integrable_iff_edist", ["measure_theory"]], ["mod", "theorem", "integrable_iff_norm", ["measure_theory"]], ["mod", "theorem", "integrable_iff_of_real", ["measure_theory"]], ["mod", "theorem", "integrable_neg_iff", ["measure_theory"]], ["mod", "theorem", "integrable_norm_iff", ["measure_theory"]], ["del", "theorem", "integrable_of_ae_eq", ["measure_theory"]], ["mod", "theorem", "integrable_of_integrable_bound", ["measure_theory"]], ["del", "theorem", "integrable_of_le", ["measure_theory"]], ["del", "theorem", "integrable_of_le_ae", ["measure_theory"]], ["mod", "theorem", "integrable_zero", ["measure_theory"]], ["mod", "theorem", "add_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "coe_add", ["measure_theory", "l1"]], ["add", "theorem", "coe_coe", ["measure_theory", "l1"]], ["mod", "theorem", "coe_neg", ["measure_theory", "l1"]], ["mod", "theorem", "coe_pos_part", ["measure_theory", "l1"]], ["mod", "theorem", "coe_smul", ["measure_theory", "l1"]], ["mod", "theorem", "coe_sub", ["measure_theory", "l1"]], ["mod", "theorem", "coe_zero", ["measure_theory", "l1"]], ["mod", "theorem", "continuous_neg_part", ["measure_theory", "l1"]], ["mod", "theorem", "continuous_pos_part", ["measure_theory", "l1"]], ["mod", "theorem", "dist_eq", ["measure_theory", "l1"]], ["mod", "theorem", "dist_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "edist_eq", ["measure_theory", "l1"]], ["mod", "theorem", "lintegral_edist_to_fun_lt_top", ["measure_theory", "l1"]], ["mod", "theorem", "mk_to_fun", ["measure_theory", "l1"]], ["mod", "def", "neg_part", ["measure_theory", "l1"]], ["mod", "theorem", "neg_part_to_fun_eq_max", ["measure_theory", "l1"]], ["mod", "theorem", "neg_part_to_fun_eq_min", ["measure_theory", "l1"]], ["mod", "theorem", "neg_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_eq", ["measure_theory", "l1"]], ["mod", "theorem", "norm_eq_nnnorm_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_eq_norm_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_le_norm_of_ae_le", ["measure_theory", "l1"]], ["mod", "def", "of_fun", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_eq_mk", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_smul", ["measure_theory", "l1"]], ["mod", "theorem", "of_fun_to_fun", ["measure_theory", "l1"]], ["mod", "def", "pos_part", ["measure_theory", "l1"]], ["mod", "theorem", "pos_part_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "smul_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "sub_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "to_fun_of_fun", ["measure_theory", "l1"]], ["mod", "theorem", "zero_to_fun", ["measure_theory", "l1"]], ["mod", "def", "l1", ["measure_theory"]], ["mod", "theorem", "lintegral_nnnorm_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "compl_iff", ["is_measurable"]], ["mod", "theorem", "empty", ["is_measurable"]], ["add", "theorem", "inl_image", ["is_measurable"]], ["add", "theorem", "insert", ["is_measurable"]], ["add", "theorem", "subtype_image", ["is_measurable"]], ["mod", "theorem", "univ", ["is_measurable"]], ["add", "theorem", "is_measurable_eq", []], ["del", "theorem", "is_measurable_inl_image", []], ["add", "theorem", "is_measurable_insert", []], ["del", "theorem", "is_measurable_subtype_image", []], ["del", "theorem", "if", ["measurable"]], ["add", "theorem", "indicator", ["measurable"]], ["add", "theorem", "piecewise", ["measurable"]], ["del", "theorem", "preimage", ["measurable"]], ["add", "theorem", "sum_rec", ["measurable"]], ["mod", "def", "measurable", []], ["mod", "theorem", "measurable_const", []], ["add", "theorem", "measurable_fst", []], ["mod", "theorem", "measurable_id", []], ["add", "theorem", "measurable_iff_comap_le", []], ["add", "theorem", "measurable_iff_le_map", []], ["mod", "theorem", "measurable_inl", []], ["mod", "theorem", "measurable_inr", []], ["add", "theorem", "measurable_one", []], ["add", "theorem", "measurable_snd", []], ["add", "theorem", "measurable_subtype_coe", []], ["del", "theorem", "measurable_sum_rec", []], ["del", "theorem", "measurable_zero", []], ["add", "theorem", "is_measurable", ["set", "finite"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "ae_eq_refl", ["measure_theory"]], ["mod", "theorem", "ae_eq_symm", ["measure_theory"]], ["mod", "theorem", "ae_eq_trans", ["measure_theory"]], ["mod", "theorem", "ae_iff", ["measure_theory"]], ["add", "theorem", "ae_map_iff", ["measure_theory"]], ["mod", "theorem", "ae_of_all", ["measure_theory"]], ["add", "theorem", "ae_restrict_eq", ["measure_theory"]], ["add", "theorem", "coe_to_outer_measure", ["measure_theory"]], ["add", "theorem", "dirac_ae_eq", ["measure_theory"]], ["add", "theorem", "eventually_dirac", ["measure_theory"]], ["add", "theorem", "eventually_eq_dirac'", ["measure_theory"]], ["add", "theorem", "eventually_eq_dirac", ["measure_theory"]], ["add", "theorem", "exists_is_measurable_superset_iff_measure_eq_zero", ["measure_theory"]], ["add", "theorem", "le_to_measure_apply", ["measure_theory"]], ["mod", "theorem", "add_apply", ["measure_theory", "measure"]], ["add", "theorem", "coe_add", ["measure_theory", "measure"]], ["add", "theorem", "coe_smul", ["measure_theory", "measure"]], ["add", "theorem", "coe_zero", ["measure_theory", "measure"]], ["add", "def", "cofinite", ["measure_theory", "measure"]], ["add", "def", "comap", ["measure_theory", "measure"]], ["add", "theorem", "comap_apply", ["measure_theory", "measure"]], ["add", "theorem", "count_apply", ["measure_theory", "measure"]], ["add", "theorem", "count_apply_finset", ["measure_theory", "measure"]], ["add", "theorem", "dirac_apply'", ["measure_theory", "measure"]], ["add", "theorem", "dirac_apply_of_mem", ["measure_theory", "measure"]], ["add", "theorem", "eq_zero_of_not_nonempty", ["measure_theory", "measure"]], ["add", "theorem", "eventually_cofinite", ["measure_theory", "measure"]], ["mod", "theorem", "ext", ["measure_theory", "measure"]], ["add", "theorem", "le_lift_linear_apply", ["measure_theory", "measure"]], ["add", "theorem", "le_restrict_apply", ["measure_theory", "measure"]], ["add", "def", "lift_linear", ["measure_theory", "measure"]], ["add", "theorem", "lift_linear_apply", ["measure_theory", "measure"]], ["add", "theorem", "lt_iff'", ["measure_theory", "measure"]], ["add", "theorem", "lt_iff", ["measure_theory", "measure"]], ["mod", "def", "map", ["measure_theory", "measure"]], ["mod", "theorem", "map_apply", ["measure_theory", "measure"]], ["add", "theorem", "map_comap_subtype_coe", ["measure_theory", "measure"]], ["add", "theorem", "mem_cofinite", ["measure_theory", "measure"]], ["add", "def", "restrict", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Union", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Union_apply", ["measure_theory", "measure"]], ["add", "theorem", "restrict_Union_le", ["measure_theory", "measure"]], ["add", "theorem", "restrict_add", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply_eq_zero'", ["measure_theory", "measure"]], ["add", "theorem", "restrict_apply_eq_zero", ["measure_theory", "measure"]], ["add", "theorem", "restrict_empty", ["measure_theory", "measure"]], ["add", "theorem", "restrict_mono", ["measure_theory", "measure"]], ["add", "theorem", "restrict_smul", ["measure_theory", "measure"]], ["add", "theorem", "restrict_sum", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union_apply", ["measure_theory", "measure"]], ["add", "theorem", "restrict_union_le", ["measure_theory", "measure"]], ["add", "theorem", "restrict_univ", ["measure_theory", "measure"]], ["add", "theorem", "restrict_zero", ["measure_theory", "measure"]], ["add", "def", "restrictₗ", ["measure_theory", "measure"]], ["add", "theorem", "restrictₗ_apply", ["measure_theory", "measure"]], ["del", "theorem", "smul_apply", ["measure_theory", "measure"]], ["add", "theorem", "smul_to_outer_measure", ["measure_theory", "measure"]], ["add", "theorem", "sum_apply", ["measure_theory", "measure"]], ["add", "theorem", "sum_bool", ["measure_theory", "measure"]], ["add", "theorem", "to_outer_measure_injective", ["measure_theory", "measure"]], ["del", "theorem", "zero_apply", ["measure_theory", "measure"]], ["mod", "theorem", "zero_to_outer_measure", ["measure_theory", "measure"]], ["add", "theorem", "measure_bUnion_finset_le", ["measure_theory"]], ["add", "theorem", "measure_bUnion_le", ["measure_theory"]], ["add", "theorem", "measure_congr", ["measure_theory"]], ["add", "theorem", "measure_diff_of_ae_imp", ["measure_theory"]], ["add", "theorem", "measure_le_of_ae_imp", ["measure_theory"]], ["mod", "theorem", "measure_zero_iff_ae_nmem", ["measure_theory"]], ["mod", "theorem", "mem_ae_iff", ["measure_theory"]], ["add", "theorem", "mem_ae_map_iff", ["measure_theory"]], ["add", "theorem", "mem_dirac_ae_iff", ["measure_theory"]], ["add", "theorem", "nonempty_of_measure_ne_zero", ["measure_theory"]], ["mod", "theorem", "trim_eq_infi'", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_smul", ["measure_theory", "outer_measure"]], ["add", "theorem", "sum_measure_preimage_singleton", ["measure_theory"]], ["mod", "theorem", "to_measure_to_outer_measure", ["measure_theory"]], ["mod", "theorem", "to_outer_measure_apply", ["measure_theory"]], ["mod", "theorem", "to_outer_measure_to_measure", ["measure_theory"]], ["add", "theorem", "tsum_measure_preimage_singleton", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["mod", "theorem", "add_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "coe_add", ["measure_theory", "outer_measure"]], ["add", "theorem", "coe_fn_injective", ["measure_theory", "outer_measure"]], ["add", "theorem", "coe_smul", ["measure_theory", "outer_measure"]], ["add", "theorem", "coe_zero", ["measure_theory", "outer_measure"]], ["add", "def", "comap", ["measure_theory", "outer_measure"]], ["add", "theorem", "comap_apply", ["measure_theory", "outer_measure"]], ["mod", "theorem", "ext", ["measure_theory", "outer_measure"]], ["mod", "def", "map", ["measure_theory", "outer_measure"]], ["mod", "theorem", "measure_of_eq_coe", ["measure_theory", "outer_measure"]], ["add", "def", "restrict", ["measure_theory", "outer_measure"]], ["add", "theorem", "restrict_apply", ["measure_theory", "outer_measure"]], ["mod", "theorem", "smul_apply", ["measure_theory", "outer_measure"]], ["del", "theorem", "zero_apply", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["del", "theorem", "add", ["integrable_on"]], ["del", "theorem", "divide", ["integrable_on"]], ["del", "theorem", "mul_left", ["integrable_on"]], ["del", "theorem", "mul_right", ["integrable_on"]], ["del", "theorem", "neg", ["integrable_on"]], ["del", "theorem", "smul", ["integrable_on"]], ["del", "theorem", "sub", ["integrable_on"]], ["del", "theorem", "subset", ["integrable_on"]], ["del", "theorem", "union", ["integrable_on"]], ["del", "def", "integrable_on", []], ["del", "theorem", "integrable_on_congr", []], ["del", "theorem", "integrable_on_congr_ae", []], ["del", "theorem", "integrable_on_empty", []], ["del", "theorem", "integrable_on_norm_iff", []], ["del", "theorem", "integral_on_Union", []], ["del", "theorem", "integral_on_add", []], ["del", "theorem", "integral_on_congr", []], ["del", "theorem", "integral_on_congr_of_ae_eq", []], ["del", "theorem", "integral_on_congr_of_set", []], ["del", "theorem", "integral_on_div", []], ["del", "theorem", "integral_on_le_integral_on", []], ["del", "theorem", "integral_on_le_integral_on_ae", []], ["del", "theorem", "integral_on_mul_left", []], ["del", "theorem", "integral_on_mul_right", []], ["del", "theorem", "integral_on_neg", []], ["del", "theorem", "integral_on_non_integrable", []], ["del", "theorem", "integral_on_non_measurable", []], ["del", "theorem", "integral_on_nonneg", []], ["del", "theorem", "integral_on_nonneg_of_ae", []], ["del", "theorem", "integral_on_nonpos", []], ["del", "theorem", "integral_on_nonpos_of_ae", []], ["del", "theorem", "integral_on_smul", []], ["del", "theorem", "integral_on_sub", []], ["del", "theorem", "integral_on_undef", []], ["del", "theorem", "integral_on_union", []], ["del", "theorem", "integral_on_union_ae", []], ["del", "theorem", "integral_on_zero", []], ["del", "theorem", "inter_preimage", ["is_measurable"]], ["del", "theorem", "measurable_on", ["measurable"]], ["del", "theorem", "measurable_on_univ", ["measurable"]], ["del", "theorem", "subset", ["measurable_on"]], ["del", "theorem", "union", ["measurable_on"]], ["del", "def", "measurable_on", []], ["del", "theorem", "measurable_on_empty", []], ["del", "theorem", "measurable_on_singleton", []], ["del", "theorem", "integrable_on", ["measure_theory", "integrable"]], ["del", "theorem", "tendsto_integral_on_of_antimono", []], ["del", "theorem", "tendsto_integral_on_of_monotone", []]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["mod", "theorem", "simple_func_sequence_tendsto'", ["measure_theory"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "infi_eq_bot", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "prod_mk", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_inf_principal", ["filter"]], ["mod", "theorem", "mem_inf_principal", ["filter"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["add", "theorem", "map₂_coe", ["filter", "germ"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_subtype", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_injective'", ["continuous_linear_map"]], ["add", "theorem", "coe_injective", ["continuous_linear_map"]], ["add", "theorem", "coe_mk'", ["continuous_linear_map"]], ["add", "theorem", "coe_mk", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["del", "theorem", "extend_e_eq", ["dense_inducing"]], ["mod", "theorem", "extend_eq", ["dense_inducing"]], ["add", "theorem", "extend_eq_at", ["dense_inducing"]], ["del", "theorem", "extend_eq_of_cont", ["dense_inducing"]], ["add", "theorem", "extend_eq_of_tendsto", ["dense_inducing"]], ["add", "theorem", "extend_unique", ["dense_inducing"]], ["add", "theorem", "extend_unique_at", ["dense_inducing"]]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "uniformly_extend_unique", []]]}]}, {"timestamp": 1594964727, "sha": "819bd86b", "message": "feat(tactic/squeeze_*): add `squeeze_dsimp` (#3386)", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1594957954, "sha": "9d74f9b0", "message": "chore(data/polynomial): reduce imports (#3419)\nNow that @jalex-stark has split up `data.polynomial` into submodules, this PR minimises imports.", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/polynomial/basic.lean", "newPath": "src/algebra/polynomial/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/polynomial/identities.lean", "newPath": "src/data/polynomial/identities.lean", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/eisenstein_criterion.lean", "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1594944206, "sha": "f1b687cd", "message": "feat (order/order_iso): lemmas about order_isos on lattices (#3397)\nshows that `order_embedding`s and `order_iso`s respect `lattice` operations", "changes": [{"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "theorem", "le_map_sup", ["order_embedding"]], ["add", "theorem", "map_inf_le", ["order_embedding"]], ["add", "theorem", "map_bot", ["order_iso"]], ["add", "theorem", "map_inf", ["order_iso"]], ["add", "theorem", "map_sup", ["order_iso"]], ["add", "theorem", "map_top", ["order_iso"]]]}]}, {"timestamp": 1594926806, "sha": "33d45bf0", "message": "chore(data/polynomial): break up behemoth file (#3407)\nPolynomial refactor\nThe goal is to split `data/polynomial.lean` into several self-contained files in the same place. For the time being, the new place for all these files is `data/polynomial/`.\nFuture PRs may simplify proofs, remove duplicate lemmas, and move files out of the `data` directory.", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": null, "changes": [["del", "theorem", "polynomial", ["is_integral_domain"]], ["del", "def", "C", ["polynomial"]], ["del", "theorem", "C_0", ["polynomial"]], ["del", "theorem", "C_1", ["polynomial"]], ["del", "theorem", "C_add", ["polynomial"]], ["del", "theorem", "C_bit0", ["polynomial"]], ["del", "theorem", "C_bit1", ["polynomial"]], ["del", "theorem", "C_comp", ["polynomial"]], ["del", "theorem", "C_eq_algebra_map", ["polynomial"]], ["del", "theorem", "C_eq_int_cast", ["polynomial"]], ["del", "theorem", "C_eq_nat_cast", ["polynomial"]], ["del", "theorem", "C_inj", ["polynomial"]], ["del", "theorem", "C_mul'", ["polynomial"]], ["del", "theorem", "C_mul", ["polynomial"]], ["del", "theorem", "C_neg", ["polynomial"]], ["del", "theorem", "C_pow", ["polynomial"]], ["del", "theorem", "C_sub", ["polynomial"]], ["del", "def", "X", ["polynomial"]], ["del", "theorem", "X_comp", ["polynomial"]], ["del", "theorem", "X_dvd_iff", ["polynomial"]], ["del", "theorem", "X_mul", ["polynomial"]], ["del", "theorem", "X_ne_zero", ["polynomial"]], ["del", "theorem", "X_pow_mul", ["polynomial"]], ["del", "theorem", "X_pow_mul_assoc", ["polynomial"]], ["del", "theorem", "X_pow_sub_C_ne_zero", ["polynomial"]], ["del", "theorem", "X_sub_C_ne_zero", ["polynomial"]], ["del", "theorem", "add_comp", ["polynomial"]], ["del", "def", "aeval", ["polynomial"]], ["del", "theorem", "aeval_C", ["polynomial"]], ["del", "theorem", "aeval_X", ["polynomial"]], ["del", "theorem", "aeval_alg_hom", ["polynomial"]], ["del", "theorem", "aeval_alg_hom_apply", ["polynomial"]], ["del", "theorem", "aeval_def", ["polynomial"]], ["del", "theorem", "alg_hom_eval₂_algebra_map", ["polynomial"]], ["del", "theorem", "algebra_map_apply", ["polynomial"]], ["del", "theorem", "apply_eq_coeff", ["polynomial"]], ["del", "theorem", "as_sum", ["polynomial"]], ["del", "def", "binom_expansion", ["polynomial"]], ["del", "theorem", "card_nth_roots", ["polynomial"]], ["del", "theorem", "card_roots'", ["polynomial"]], ["del", "theorem", "card_roots", ["polynomial"]], ["del", "theorem", "card_roots_X_pow_sub_C", ["polynomial"]], ["del", "theorem", "card_roots_sub_C'", ["polynomial"]], ["del", "theorem", "card_roots_sub_C", ["polynomial"]], ["del", "theorem", "coe_eval₂_ring_hom", ["polynomial"]], ["del", "theorem", "coe_norm_unit", ["polynomial"]], ["del", "def", "coeff", ["polynomial"]], ["del", "theorem", "coeff_C", ["polynomial"]], ["del", "theorem", "coeff_C_mul", ["polynomial"]], ["del", "theorem", "coeff_C_mul_X", ["polynomial"]], ["del", "theorem", "coeff_C_zero", ["polynomial"]], ["del", "theorem", "coeff_X", ["polynomial"]], ["del", "theorem", "coeff_X_one", ["polynomial"]], ["del", "theorem", "coeff_X_pow", ["polynomial"]], ["del", "theorem", "coeff_X_zero", ["polynomial"]], ["del", "theorem", "coeff_add", ["polynomial"]], ["del", "def", "coeff_coe_to_fun", ["polynomial"]], ["del", "theorem", "coeff_coe_units_zero_ne_zero", ["polynomial"]], ["del", "theorem", "coeff_comp_degree_mul_degree", ["polynomial"]], ["del", "theorem", "coeff_derivative", ["polynomial"]], ["del", "theorem", "coeff_eq_zero_of_degree_lt", ["polynomial"]], ["del", "theorem", "coeff_eq_zero_of_nat_degree_lt", ["polynomial"]], ["del", "theorem", "coeff_inv_units", ["polynomial"]], ["del", "theorem", "coeff_map", ["polynomial"]], ["del", "theorem", "coeff_mk", ["polynomial"]], ["del", "theorem", "coeff_monomial_mul", ["polynomial"]], ["del", "theorem", "coeff_monomial_zero_mul", ["polynomial"]], ["del", "theorem", "coeff_mul", ["polynomial"]], ["del", "theorem", "coeff_mul_C", ["polynomial"]], ["del", "theorem", "coeff_mul_X", ["polynomial"]], ["del", "theorem", "coeff_mul_X_pow", ["polynomial"]], ["del", "theorem", "coeff_mul_X_sub_C", ["polynomial"]], ["del", "theorem", "coeff_mul_X_zero", ["polynomial"]], ["del", "theorem", "coeff_mul_degree_add_degree", ["polynomial"]], ["del", "theorem", "coeff_mul_monomial", ["polynomial"]], ["del", "theorem", "coeff_mul_monomial_zero", ["polynomial"]], ["del", "theorem", "coeff_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["del", "theorem", "coeff_nat_degree_succ_eq_zero", ["polynomial"]], ["del", "theorem", "coeff_ne_zero_of_eq_degree", ["polynomial"]], ["del", "theorem", "coeff_neg", ["polynomial"]], ["del", "theorem", "coeff_one", ["polynomial"]], ["del", "theorem", "coeff_one_zero", ["polynomial"]], ["del", "theorem", "coeff_single", ["polynomial"]], ["del", "theorem", "coeff_smul", ["polynomial"]], ["del", "theorem", "coeff_sub", ["polynomial"]], ["del", "theorem", "coeff_sum", ["polynomial"]], ["del", "theorem", "coeff_zero", ["polynomial"]], ["del", "theorem", "coeff_zero_eq_eval_zero", ["polynomial"]], ["del", "def", "comp", ["polynomial"]], ["del", "theorem", "comp_C", ["polynomial"]], ["del", "theorem", "comp_X", ["polynomial"]], ["del", "theorem", "comp_one", ["polynomial"]], ["del", "theorem", "comp_zero", ["polynomial"]], ["del", "def", "decidable_dvd_monic", ["polynomial"]], ["del", "def", "degree", ["polynomial"]], ["del", "theorem", "degree_C", ["polynomial"]], ["del", "theorem", "degree_C_le", ["polynomial"]], ["del", "theorem", "degree_C_mul_X_pow_le", ["polynomial"]], ["del", "theorem", "degree_X", ["polynomial"]], ["del", "theorem", "degree_X_le", ["polynomial"]], ["del", "theorem", "degree_X_pow", ["polynomial"]], ["del", "theorem", "degree_X_pow_le", ["polynomial"]], ["del", "theorem", "degree_X_pow_sub_C", ["polynomial"]], ["del", "theorem", "degree_X_sub_C", ["polynomial"]], ["del", "theorem", "degree_add_C", ["polynomial"]], ["del", "theorem", "degree_add_div", ["polynomial"]], ["del", "theorem", "degree_add_div_by_monic", ["polynomial"]], ["del", "theorem", "degree_add_eq_of_degree_lt", ["polynomial"]], ["del", "theorem", "degree_add_eq_of_leading_coeff_add_ne_zero", ["polynomial"]], ["del", "theorem", "degree_add_le", ["polynomial"]], ["del", "theorem", "degree_coe_units", ["polynomial"]], ["del", "theorem", "degree_derivative_eq", ["polynomial"]], ["del", "theorem", "degree_derivative_le", ["polynomial"]], ["del", "theorem", "degree_derivative_lt", ["polynomial"]], ["del", "theorem", "degree_div_X_lt", ["polynomial"]], ["del", "theorem", "degree_div_by_monic_le", ["polynomial"]], ["del", "theorem", "degree_div_by_monic_lt", ["polynomial"]], ["del", "theorem", "degree_div_le", ["polynomial"]], ["del", "theorem", "degree_div_lt", ["polynomial"]], ["del", "theorem", "degree_eq_bot", ["polynomial"]], ["del", "theorem", "degree_eq_degree_of_associated", ["polynomial"]], ["del", "theorem", "degree_eq_iff_nat_degree_eq", ["polynomial"]], ["del", "theorem", "degree_eq_iff_nat_degree_eq_of_pos", ["polynomial"]], ["del", "theorem", "degree_eq_nat_degree", ["polynomial"]], ["del", "theorem", "degree_eq_one_of_irreducible_of_root", ["polynomial"]], ["del", "theorem", "degree_eq_zero_of_is_unit", ["polynomial"]], ["del", "theorem", "degree_erase_le", ["polynomial"]], ["del", "theorem", "degree_erase_lt", ["polynomial"]], ["del", "theorem", "degree_le_degree", ["polynomial"]], ["del", "theorem", "degree_le_iff_coeff_zero", ["polynomial"]], ["del", "theorem", "degree_le_mul_left", ["polynomial"]], ["del", "theorem", "degree_le_nat_degree", ["polynomial"]], ["del", "theorem", "degree_le_zero_iff", ["polynomial"]], ["del", "theorem", "degree_lt_degree_mul_X", ["polynomial"]], ["del", "theorem", "degree_lt_wf", ["polynomial"]], ["del", "theorem", "degree_map'", ["polynomial"]], ["del", "theorem", "degree_map", ["polynomial"]], ["del", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["del", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["del", "theorem", "degree_map_le", ["polynomial"]], ["del", "theorem", "degree_mod_by_monic_le", ["polynomial"]], ["del", "theorem", "degree_mod_by_monic_lt", ["polynomial"]], ["del", "theorem", "degree_monomial", ["polynomial"]], ["del", "theorem", "degree_monomial_le", ["polynomial"]], ["del", "theorem", "degree_mul_eq'", ["polynomial"]], ["del", "theorem", "degree_mul_eq", ["polynomial"]], ["del", "theorem", "degree_mul_le", ["polynomial"]], ["del", "theorem", "degree_mul_leading_coeff_inv", ["polynomial"]], ["del", "theorem", "degree_ne_of_nat_degree_ne", ["polynomial"]], ["del", "theorem", "degree_neg", ["polynomial"]], ["del", "theorem", "degree_nonneg_iff_ne_zero", ["polynomial"]], ["del", "theorem", "degree_normalize", ["polynomial"]], ["del", "theorem", "degree_one", ["polynomial"]], ["del", "theorem", "degree_one_le", ["polynomial"]], ["del", "theorem", "degree_pos_induction_on", ["polynomial"]], ["del", "theorem", "degree_pos_of_aeval_root", ["polynomial"]], ["del", "theorem", "degree_pos_of_eval₂_root", ["polynomial"]], ["del", "theorem", "degree_pos_of_ne_zero_of_nonunit", ["polynomial"]], ["del", "theorem", "degree_pos_of_root", ["polynomial"]], ["del", "theorem", "degree_pow_eq'", ["polynomial"]], ["del", "theorem", "degree_pow_eq", ["polynomial"]], ["del", "theorem", "degree_pow_le", ["polynomial"]], ["del", "theorem", "degree_sub_le", ["polynomial"]], ["del", "theorem", "degree_sub_lt", ["polynomial"]], ["del", "theorem", "degree_sum_le", ["polynomial"]], ["del", "theorem", "degree_zero", ["polynomial"]], ["del", "def", "derivative", ["polynomial"]], ["del", "theorem", "derivative_C", ["polynomial"]], ["del", "theorem", "derivative_X", ["polynomial"]], ["del", "theorem", "derivative_add", ["polynomial"]], ["del", "theorem", "derivative_eval", ["polynomial"]], ["del", "theorem", "derivative_eval₂_C", ["polynomial"]], ["del", "def", "derivative_hom", ["polynomial"]], ["del", "def", "derivative_lhom", ["polynomial"]], ["del", "theorem", "derivative_map", ["polynomial"]], ["del", "theorem", "derivative_monomial", ["polynomial"]], ["del", "theorem", "derivative_mul", ["polynomial"]], ["del", "theorem", "derivative_neg", ["polynomial"]], ["del", "theorem", "derivative_one", ["polynomial"]], ["del", "theorem", "derivative_pow", ["polynomial"]], ["del", "theorem", "derivative_pow_succ", ["polynomial"]], ["del", "theorem", "derivative_smul", ["polynomial"]], ["del", "theorem", "derivative_sub", ["polynomial"]], ["del", "theorem", "derivative_sum", ["polynomial"]], ["del", "theorem", "derivative_zero", ["polynomial"]], ["del", "def", "div", ["polynomial"]], ["del", "def", "div_X", ["polynomial"]], ["del", "theorem", "div_X_C", ["polynomial"]], ["del", "theorem", "div_X_add", ["polynomial"]], ["del", "theorem", "div_X_eq_zero_iff", ["polynomial"]], ["del", "theorem", "div_X_mul_X_add", ["polynomial"]], ["del", "def", "div_by_monic", ["polynomial"]], ["del", "theorem", "div_by_monic_eq_div", ["polynomial"]], ["del", "theorem", "div_by_monic_eq_of_not_monic", ["polynomial"]], ["del", "theorem", "div_by_monic_eq_zero_iff", ["polynomial"]], ["del", "theorem", "div_by_monic_mul_pow_root_multiplicity_eq", ["polynomial"]], ["del", "theorem", "div_by_monic_one", ["polynomial"]], ["del", "theorem", "div_by_monic_zero", ["polynomial"]], ["del", "theorem", "div_def", ["polynomial"]], ["del", "theorem", "div_eq_zero_iff", ["polynomial"]], ["del", "theorem", "div_mod_by_monic_unique", ["polynomial"]], ["del", "theorem", "div_wf_lemma", ["polynomial"]], ["del", "theorem", "dvd_iff_is_root", ["polynomial"]], ["del", "theorem", "dvd_iff_mod_by_monic_eq_zero", ["polynomial"]], ["del", "theorem", "dvd_term_of_dvd_eval_of_dvd_terms", ["polynomial"]], ["del", "theorem", "dvd_term_of_is_root_of_dvd_terms", ["polynomial"]], ["del", "theorem", "eq_C_of_degree_eq_zero", ["polynomial"]], ["del", "theorem", "eq_C_of_degree_le_zero", ["polynomial"]], ["del", "theorem", "eq_C_of_nat_degree_le_zero", ["polynomial"]], ["del", "theorem", "eq_X_add_C_of_degree_eq_one", ["polynomial"]], ["del", "theorem", "eq_X_add_C_of_degree_le_one", ["polynomial"]], ["del", "theorem", "eq_one_of_is_unit_of_monic", ["polynomial"]], ["del", "theorem", "eq_zero_of_eq_zero", ["polynomial"]], ["del", "def", "eval", ["polynomial"]], ["del", "theorem", "eval_C", ["polynomial"]], ["del", "theorem", "eval_X", ["polynomial"]], ["del", "theorem", "eval_add", ["polynomial"]], ["del", "theorem", "eval_bit0", ["polynomial"]], ["del", "theorem", "eval_bit1", ["polynomial"]], ["del", "theorem", "eval_comp", ["polynomial"]], ["del", "theorem", "eval_div_by_monic_pow_root_multiplicity_ne_zero", ["polynomial"]], ["del", "theorem", "eval_int_cast", ["polynomial"]], ["del", "theorem", "eval_map", ["polynomial"]], ["del", "theorem", "eval_monomial", ["polynomial"]], ["del", "theorem", "eval_mul", ["polynomial"]], ["del", "theorem", "eval_mul_X_sub_C", ["polynomial"]], ["del", "theorem", "eval_nat_cast", ["polynomial"]], ["del", "theorem", "eval_neg", ["polynomial"]], ["del", "theorem", "eval_one", ["polynomial"]], ["del", "theorem", "eval_pow", ["polynomial"]], ["del", "theorem", "eval_smul", ["polynomial"]], ["del", "theorem", "eval_sub", ["polynomial"]], ["del", "def", "eval_sub_factor", ["polynomial"]], ["del", "theorem", "eval_sum", ["polynomial"]], ["del", "theorem", "eval_unique", ["polynomial"]], ["del", "theorem", "eval_zero", ["polynomial"]], ["del", "def", "eval₂", ["polynomial"]], ["del", "theorem", "eval₂_C", ["polynomial"]], ["del", "theorem", "eval₂_X", ["polynomial"]], ["del", "theorem", "eval₂_X_pow", ["polynomial"]], ["del", "theorem", "eval₂_add", ["polynomial"]], ["del", "theorem", "eval₂_algebra_map_X", ["polynomial"]], ["del", "theorem", "eval₂_algebra_map_int_X", ["polynomial"]], ["del", "theorem", "eval₂_bit0", ["polynomial"]], ["del", "theorem", "eval₂_bit1", ["polynomial"]], ["del", "theorem", "eval₂_comp", ["polynomial"]], ["del", "theorem", "eval₂_eq_eval_map", ["polynomial"]], ["del", "theorem", "eval₂_hom", ["polynomial"]], ["del", "theorem", "eval₂_map", ["polynomial"]], ["del", "theorem", "eval₂_monomial", ["polynomial"]], ["del", "theorem", "eval₂_mul", ["polynomial"]], ["del", "theorem", "eval₂_nat_cast", ["polynomial"]], ["del", "theorem", "eval₂_neg", ["polynomial"]], ["del", "theorem", "eval₂_one", ["polynomial"]], ["del", "theorem", "eval₂_pow", ["polynomial"]], ["del", "def", "eval₂_ring_hom", ["polynomial"]], ["del", "theorem", "eval₂_smul", ["polynomial"]], ["del", "theorem", "eval₂_sub", ["polynomial"]], ["del", "theorem", "eval₂_sum", ["polynomial"]], ["del", "theorem", "eval₂_zero", ["polynomial"]], ["del", "theorem", "exists_finset_roots", ["polynomial"]], ["del", "theorem", "exists_root_of_degree_eq_one", ["polynomial"]], ["del", "theorem", "ext", ["polynomial"]], ["del", "theorem", "ext_iff", ["polynomial"]], ["del", "theorem", "finset_sum_coeff", ["polynomial"]], ["del", "theorem", "hom_eval₂", ["polynomial"]], ["del", "theorem", "integral_normalization_aeval_eq_zero", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_nat_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_ne_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_coeff_ne_nat_degree", ["polynomial"]], ["del", "theorem", "integral_normalization_eval₂_eq_zero", ["polynomial"]], ["del", "theorem", "irreducible_X", ["polynomial"]], ["del", "theorem", "irreducible_X_sub_C", ["polynomial"]], ["del", "theorem", "irreducible_of_degree_eq_one", ["polynomial"]], ["del", "theorem", "irreducible_of_degree_eq_one_of_monic", ["polynomial"]], ["del", "theorem", "is_coprime_of_is_root_of_eval_derivative_ne_zero", ["polynomial"]], ["del", "theorem", "def", ["polynomial", "is_root"]], ["del", "def", "is_root", ["polynomial"]], ["del", "theorem", "is_root_of_aeval_algebra_map_eq_zero", ["polynomial"]], ["del", "theorem", "is_root_of_eval₂_map_eq_zero", ["polynomial"]], ["del", "theorem", "is_unit_C", ["polynomial"]], ["del", "theorem", "is_unit_iff", ["polynomial"]], ["del", "theorem", "is_unit_iff_degree_eq_zero", ["polynomial"]], ["del", "theorem", "ite_le_nat_degree_coeff", ["polynomial"]], ["del", "def", "lcoeff", ["polynomial"]], ["del", "theorem", "lcoeff_apply", ["polynomial"]], ["del", "theorem", "le_degree_of_ne_zero", ["polynomial"]], ["del", "theorem", "le_nat_degree_of_ne_zero", ["polynomial"]], ["del", "def", "leading_coeff", ["polynomial"]], ["del", "theorem", "leading_coeff_C", ["polynomial"]], ["del", "theorem", "leading_coeff_X", ["polynomial"]], ["del", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["del", "theorem", "leading_coeff_add_of_degree_eq", ["polynomial"]], ["del", "theorem", "leading_coeff_add_of_degree_lt", ["polynomial"]], ["del", "theorem", "leading_coeff_comp", ["polynomial"]], ["del", "theorem", "leading_coeff_eq_zero", ["polynomial"]], ["del", "theorem", "leading_coeff_eq_zero_iff_deg_eq_bot", ["polynomial"]], ["del", "theorem", "leading_coeff_map", ["polynomial"]], ["del", "theorem", "leading_coeff_monomial", ["polynomial"]], ["del", "theorem", "leading_coeff_mul'", ["polynomial"]], ["del", "theorem", "leading_coeff_mul", ["polynomial"]], ["del", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["del", "theorem", "leading_coeff_of_injective", ["polynomial"]], ["del", "theorem", "leading_coeff_one", ["polynomial"]], ["del", "theorem", "leading_coeff_pow'", ["polynomial"]], ["del", "theorem", "leading_coeff_pow", ["polynomial"]], ["del", "theorem", "leading_coeff_zero", ["polynomial"]], ["del", "def", "map", ["polynomial"]], ["del", "theorem", "map_C", ["polynomial"]], ["del", "theorem", "map_X", ["polynomial"]], ["del", "theorem", "map_add", ["polynomial"]], ["del", "theorem", "map_div", ["polynomial"]], ["del", "theorem", "map_div_by_monic", ["polynomial"]], ["del", "theorem", "map_eq_zero", ["polynomial"]], ["del", "theorem", "map_id", ["polynomial"]], ["del", "theorem", "map_injective", ["polynomial"]], ["del", "theorem", "map_map", ["polynomial"]], ["del", "theorem", "map_mod", ["polynomial"]], ["del", "theorem", "map_mod_by_monic", ["polynomial"]], ["del", "theorem", "map_mod_div_by_monic", ["polynomial"]], ["del", "theorem", "map_monomial", ["polynomial"]], ["del", "theorem", "map_mul", ["polynomial"]], ["del", "theorem", "map_nat_cast", ["polynomial"]], ["del", "theorem", "map_neg", ["polynomial"]], ["del", "theorem", "map_one", ["polynomial"]], ["del", "theorem", "map_pow", ["polynomial"]], ["del", "theorem", "map_sub", ["polynomial"]], ["del", "theorem", "map_zero", ["polynomial"]], ["del", "theorem", "mem_map_range", ["polynomial"]], ["del", "theorem", "mem_nth_roots", ["polynomial"]], ["del", "theorem", "mem_roots", ["polynomial"]], ["del", "theorem", "mem_roots_sub_C", ["polynomial"]], ["del", "theorem", "mem_support_derivative", ["polynomial"]], ["del", "def", "mod", ["polynomial"]], ["del", "theorem", "mod_X_sub_C_eq_C_eval", ["polynomial"]], ["del", "def", "mod_by_monic", ["polynomial"]], ["del", "theorem", "mod_by_monic_X", ["polynomial"]], ["del", "theorem", "mod_by_monic_X_sub_C_eq_C_eval", ["polynomial"]], ["del", "theorem", "mod_by_monic_add_div", ["polynomial"]], ["del", "theorem", "mod_by_monic_eq_mod", ["polynomial"]], ["del", "theorem", "mod_by_monic_eq_of_not_monic", ["polynomial"]], ["del", "theorem", "mod_by_monic_eq_self_iff", ["polynomial"]], ["del", "theorem", "mod_by_monic_eq_sub_mul_div", ["polynomial"]], ["del", "theorem", "mod_by_monic_one", ["polynomial"]], ["del", "theorem", "mod_by_monic_zero", ["polynomial"]], ["del", "theorem", "mod_def", ["polynomial"]], ["del", "theorem", "mod_eq_self_iff", ["polynomial"]], ["del", "theorem", "as_sum", ["polynomial", "monic"]], ["del", "theorem", "def", ["polynomial", "monic"]], ["del", "theorem", "leading_coeff", ["polynomial", "monic"]], ["del", "theorem", "ne_zero", ["polynomial", "monic"]], ["del", "theorem", "ne_zero_of_zero_ne_one", ["polynomial", "monic"]], ["del", "def", "monic", ["polynomial"]], ["del", "theorem", "monic_X", ["polynomial"]], ["del", "theorem", "monic_X_add_C", ["polynomial"]], ["del", "theorem", "monic_X_pow_add", ["polynomial"]], ["del", "theorem", "monic_X_pow_sub", ["polynomial"]], ["del", "theorem", "monic_X_sub_C", ["polynomial"]], ["del", "theorem", "monic_integral_normalization", ["polynomial"]], ["del", "theorem", "monic_map", ["polynomial"]], ["del", "theorem", "monic_mul", ["polynomial"]], ["del", "theorem", "monic_mul_leading_coeff_inv", ["polynomial"]], ["del", "theorem", "monic_normalize", ["polynomial"]], ["del", "theorem", "monic_of_degree_le", ["polynomial"]], ["del", "theorem", "monic_of_injective", ["polynomial"]], ["del", "theorem", "monic_one", ["polynomial"]], ["del", "theorem", "monic_pow", ["polynomial"]], ["del", "def", "monomial", ["polynomial"]], ["del", "theorem", "monomial_add", ["polynomial"]], ["del", "theorem", "monomial_eq_smul_X", ["polynomial"]], ["del", "theorem", "monomial_one_eq_X_pow", ["polynomial"]], ["del", "theorem", "monomial_zero_left", ["polynomial"]], ["del", "theorem", "monomial_zero_right", ["polynomial"]], ["del", "theorem", "mul_X_pow_eq_zero", ["polynomial"]], ["del", "theorem", "mul_coeff_zero", ["polynomial"]], ["del", "theorem", "mul_comp", ["polynomial"]], ["del", "theorem", "mul_div_by_monic_eq_iff_is_root", ["polynomial"]], ["del", "theorem", "mul_div_eq_iff_is_root", ["polynomial"]], ["del", "theorem", "multiplicity_X_sub_C_finite", ["polynomial"]], ["del", "theorem", "multiplicity_finite_of_degree_pos_of_monic", ["polynomial"]], ["del", "def", "nat_degree", ["polynomial"]], ["del", "theorem", "nat_degree_C", ["polynomial"]], ["del", "theorem", "nat_degree_X", ["polynomial"]], ["del", "theorem", "nat_degree_X_le", ["polynomial"]], ["del", "theorem", "nat_degree_X_pow_sub_C", ["polynomial"]], ["del", "theorem", "nat_degree_X_sub_C", ["polynomial"]], ["del", "theorem", "nat_degree_X_sub_C_le", ["polynomial"]], ["del", "theorem", "nat_degree_coe_units", ["polynomial"]], ["del", "theorem", "nat_degree_comp", ["polynomial"]], ["del", "theorem", "nat_degree_comp_le", ["polynomial"]], ["del", "theorem", "nat_degree_derivative_lt", ["polynomial"]], ["del", "theorem", "nat_degree_div_by_monic", ["polynomial"]], ["del", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["del", "theorem", "nat_degree_eq_of_degree_eq_some", ["polynomial"]], ["del", "theorem", "nat_degree_eq_zero_iff_degree_le_zero", ["polynomial"]], ["del", "theorem", "nat_degree_int_cast", ["polynomial"]], ["del", "theorem", "nat_degree_le_nat_degree", ["polynomial"]], ["del", "theorem", "nat_degree_le_of_degree_le", ["polynomial"]], ["del", "theorem", "nat_degree_le_of_dvd", ["polynomial"]], ["del", "theorem", "nat_degree_map'", ["polynomial"]], ["del", "theorem", "nat_degree_map", ["polynomial"]], ["del", "theorem", "nat_degree_mul_eq'", ["polynomial"]], ["del", "theorem", "nat_degree_mul_eq", ["polynomial"]], ["del", "theorem", "nat_degree_mul_le", ["polynomial"]], ["del", "theorem", "nat_degree_nat_cast", ["polynomial"]], ["del", "theorem", "nat_degree_neg", ["polynomial"]], ["del", "theorem", "nat_degree_one", ["polynomial"]], ["del", "theorem", "nat_degree_pos_iff_degree_pos", ["polynomial"]], ["del", "theorem", "nat_degree_pos_of_aeval_root", ["polynomial"]], ["del", "theorem", "nat_degree_pos_of_eval₂_root", ["polynomial"]], ["del", "theorem", "nat_degree_pow_eq'", ["polynomial"]], ["del", "theorem", "nat_degree_pow_eq", ["polynomial"]], ["del", "theorem", "nat_degree_zero", ["polynomial"]], ["del", "theorem", "ne_zero_of_degree_gt", ["polynomial"]], ["del", "theorem", "ne_zero_of_monic", ["polynomial"]], ["del", "theorem", "ne_zero_of_monic_of_zero_ne_one", ["polynomial"]], ["del", "theorem", "ne_zero_of_ne_zero_of_monic", ["polynomial"]], ["del", "theorem", "of_polynomial_ne", ["polynomial", "nonzero"]], ["del", "theorem", "not_is_unit_X", ["polynomial"]], ["del", "theorem", "not_is_unit_X_sub_C", ["polynomial"]], ["del", "theorem", "not_monic_zero", ["polynomial"]], ["del", "def", "nth_roots", ["polynomial"]], ["del", "theorem", "of_mem_support_derivative", ["polynomial"]], ["del", "theorem", "one_comp", ["polynomial"]], ["del", "theorem", "pairwise_coprime_X_sub", ["polynomial"]], ["del", "def", "pow_add_expansion", ["polynomial"]], ["del", "theorem", "pow_root_multiplicity_dvd", ["polynomial"]], ["del", "def", "pow_sub_pow_factor", ["polynomial"]], ["del", "theorem", "prime_X", ["polynomial"]], ["del", "theorem", "prime_X_sub_C", ["polynomial"]], ["del", "theorem", "prime_of_degree_eq_one", ["polynomial"]], ["del", "theorem", "prime_of_degree_eq_one_of_monic", ["polynomial"]], ["del", "theorem", "ring_hom_eval₂_algebra_map_int", ["polynomial"]], ["del", "theorem", "root_X_sub_C", ["polynomial"]], ["del", "theorem", "root_mul", ["polynomial"]], ["del", "theorem", "root_mul_left_of_is_root", ["polynomial"]], ["del", "theorem", "root_mul_right_of_is_root", ["polynomial"]], ["del", "def", "root_multiplicity", ["polynomial"]], ["del", "theorem", "root_multiplicity_eq_multiplicity", ["polynomial"]], ["del", "theorem", "root_or_root_of_root_mul", ["polynomial"]], ["del", "theorem", "roots_X_sub_C", ["polynomial"]], ["del", "theorem", "roots_mul", ["polynomial"]], ["del", "theorem", "single_eq_C_mul_X", ["polynomial"]], ["del", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["del", "theorem", "sum_C_index", ["polynomial"]], ["del", "theorem", "sum_C_mul_X_eq", ["polynomial"]], ["del", "theorem", "sum_monomial_eq", ["polynomial"]], ["del", "theorem", "sum_over_range'", ["polynomial"]], ["del", "theorem", "sum_over_range", ["polynomial"]], ["del", "theorem", "support_integral_normalization", ["polynomial"]], ["del", "theorem", "support_zero", ["polynomial"]], ["del", "theorem", "zero_comp", ["polynomial"]], ["del", "theorem", "zero_div_by_monic", ["polynomial"]], ["del", "theorem", "zero_is_root_of_coeff_zero_eq_zero", ["polynomial"]], ["del", "theorem", "zero_le_degree_iff", ["polynomial"]], ["del", "theorem", "zero_mod_by_monic", ["polynomial"]], ["del", "def", "polynomial", []]]}, {"oldPath": null, "newPath": "src/data/polynomial/algebra_map.lean", "changes": [["add", "theorem", "C_eq_algebra_map", ["polynomial"]], ["add", "theorem", "C_inj", ["polynomial"]], ["add", "theorem", "C_mul'", ["polynomial"]], ["add", "def", "aeval", ["polynomial"]], ["add", "theorem", "aeval_C", ["polynomial"]], ["add", "theorem", "aeval_X", ["polynomial"]], ["add", "theorem", "aeval_alg_hom", ["polynomial"]], ["add", "theorem", "aeval_alg_hom_apply", ["polynomial"]], ["add", "theorem", "aeval_def", ["polynomial"]], ["add", "theorem", "alg_hom_eval₂_algebra_map", ["polynomial"]], ["add", "theorem", "algebra_map_apply", ["polynomial"]], ["add", "theorem", "dvd_term_of_dvd_eval_of_dvd_terms", ["polynomial"]], ["add", "theorem", "dvd_term_of_is_root_of_dvd_terms", ["polynomial"]], ["add", "theorem", "eval_comp", ["polynomial"]], ["add", "theorem", "eval_mul", ["polynomial"]], ["add", "theorem", "eval_mul_X_sub_C", ["polynomial"]], ["add", "theorem", "eval_pow", ["polynomial"]], ["add", "theorem", "eval_unique", ["polynomial"]], ["add", "theorem", "eval₂_algebra_map_X", ["polynomial"]], ["add", "theorem", "eval₂_algebra_map_int_X", ["polynomial"]], ["add", "theorem", "eval₂_comp", ["polynomial"]], ["add", "theorem", "eval₂_hom", ["polynomial"]], ["add", "theorem", "is_root_of_aeval_algebra_map_eq_zero", ["polynomial"]], ["add", "theorem", "is_root_of_eval₂_map_eq_zero", ["polynomial"]], ["add", "theorem", "mul_comp", ["polynomial"]], ["add", "theorem", "not_is_unit_X_sub_C", ["polynomial"]], ["add", "theorem", "ring_hom_eval₂_algebra_map_int", ["polynomial"]], ["add", "theorem", "root_mul_left_of_is_root", ["polynomial"]], ["add", "theorem", "root_mul_right_of_is_root", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/basic.lean", "changes": [["add", "def", "X", ["polynomial"]], ["add", "theorem", "X_mul", ["polynomial"]], ["add", "theorem", "X_pow_mul", ["polynomial"]], ["add", "theorem", "X_pow_mul_assoc", ["polynomial"]], ["add", "theorem", "apply_eq_coeff", ["polynomial"]], ["add", "def", "coeff", ["polynomial"]], ["add", "def", "coeff_coe_to_fun", ["polynomial"]], ["add", "theorem", "coeff_mk", ["polynomial"]], ["add", "theorem", "coeff_neg", ["polynomial"]], ["add", "theorem", "coeff_one_zero", ["polynomial"]], ["add", "theorem", "coeff_single", ["polynomial"]], ["add", "theorem", "coeff_sub", ["polynomial"]], ["add", "theorem", "coeff_zero", ["polynomial"]], ["add", "theorem", "eq_zero_of_eq_zero", ["polynomial"]], ["add", "theorem", "ext", ["polynomial"]], ["add", "theorem", "ext_iff", ["polynomial"]], ["add", "def", "monomial", ["polynomial"]], ["add", "theorem", "monomial_add", ["polynomial"]], ["add", "theorem", "monomial_zero_right", ["polynomial"]], ["add", "theorem", "support_zero", ["polynomial"]], ["add", "def", "polynomial", []]]}, {"oldPath": null, "newPath": "src/data/polynomial/coeff.lean", "changes": [["add", "theorem", "coeff_C_mul", ["polynomial"]], ["add", "theorem", "coeff_C_mul_X", ["polynomial"]], ["add", "theorem", "coeff_X_pow", ["polynomial"]], ["add", "theorem", "coeff_add", ["polynomial"]], ["add", "theorem", "coeff_mul", ["polynomial"]], ["add", "theorem", "coeff_mul_C", ["polynomial"]], ["add", "theorem", "coeff_mul_X", ["polynomial"]], ["add", "theorem", "coeff_mul_X_pow", ["polynomial"]], ["add", "theorem", "coeff_mul_X_zero", ["polynomial"]], ["add", "theorem", "coeff_one", ["polynomial"]], ["add", "theorem", "coeff_smul", ["polynomial"]], ["add", "theorem", "coeff_sum", ["polynomial"]], ["add", "def", "lcoeff", ["polynomial"]], ["add", "theorem", "lcoeff_apply", ["polynomial"]], ["add", "theorem", "monomial_eq_smul_X", ["polynomial"]], ["add", "theorem", "monomial_one_eq_X_pow", ["polynomial"]], ["add", "theorem", "mul_X_pow_eq_zero", ["polynomial"]], ["add", "theorem", "mul_coeff_zero", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/polynomial/degree.lean", "changes": [["add", "theorem", "X_pow_sub_C_ne_zero", ["polynomial"]], ["add", "theorem", "X_sub_C_ne_zero", ["polynomial"]], ["add", "theorem", "coeff_mul_degree_add_degree", ["polynomial"]], ["add", "theorem", "coeff_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_X_pow", ["polynomial"]], ["add", "theorem", "degree_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "degree_X_sub_C", ["polynomial"]], ["add", "theorem", "degree_add_C", ["polynomial"]], ["add", "theorem", "degree_add_eq_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_add_eq_of_leading_coeff_add_ne_zero", ["polynomial"]], ["add", "theorem", "degree_add_le", ["polynomial"]], ["add", "theorem", "degree_erase_le", ["polynomial"]], ["add", "theorem", "degree_erase_lt", ["polynomial"]], ["add", "theorem", "degree_le_iff_coeff_zero", ["polynomial"]], ["add", "theorem", "degree_le_zero_iff", ["polynomial"]], ["add", "theorem", "degree_lt_degree_mul_X", ["polynomial"]], ["add", "theorem", "degree_map'", ["polynomial"]], ["add", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["add", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["add", "theorem", "degree_map_le", ["polynomial"]], ["add", "theorem", "degree_mul_eq'", ["polynomial"]], ["add", "theorem", "degree_mul_le", ["polynomial"]], ["add", "theorem", "degree_nonneg_iff_ne_zero", ["polynomial"]], ["add", "theorem", "degree_pos_of_eval₂_root", ["polynomial"]], ["add", "theorem", "degree_pos_of_root", ["polynomial"]], ["add", "theorem", "degree_pow_eq'", ["polynomial"]], ["add", "theorem", "degree_pow_le", ["polynomial"]], ["add", "theorem", "degree_sub_le", ["polynomial"]], ["add", "theorem", "degree_sub_lt", ["polynomial"]], ["add", "theorem", "degree_sum_le", ["polynomial"]], ["add", "theorem", "eq_C_of_degree_eq_zero", ["polynomial"]], ["add", "theorem", "eq_C_of_degree_le_zero", ["polynomial"]], ["add", "theorem", "eq_C_of_nat_degree_le_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_C", ["polynomial"]], ["add", "theorem", "leading_coeff_X", ["polynomial"]], ["add", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_add_of_degree_eq", ["polynomial"]], ["add", "theorem", "leading_coeff_add_of_degree_lt", ["polynomial"]], ["add", "theorem", "leading_coeff_eq_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_eq_zero_iff_deg_eq_bot", ["polynomial"]], ["add", "theorem", "leading_coeff_monomial", ["polynomial"]], ["add", "theorem", "leading_coeff_mul'", ["polynomial"]], ["add", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_one", ["polynomial"]], ["add", "theorem", "leading_coeff_pow'", ["polynomial"]], ["add", "theorem", "leading_coeff_zero", ["polynomial"]], ["add", "theorem", "ne_zero", ["polynomial", "monic"]], ["add", "theorem", "ne_zero_of_zero_ne_one", ["polynomial", "monic"]], ["add", "theorem", "monic_X", ["polynomial"]], ["add", "theorem", "monic_one", ["polynomial"]], ["add", "theorem", "nat_degree_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_sub_C_le", ["polynomial"]], ["add", "theorem", "nat_degree_comp_le", ["polynomial"]], ["add", "theorem", "nat_degree_eq_zero_iff_degree_le_zero", ["polynomial"]], ["add", "theorem", "nat_degree_map'", ["polynomial"]], ["add", "theorem", "nat_degree_mul_eq'", ["polynomial"]], ["add", "theorem", "nat_degree_mul_le", ["polynomial"]], ["add", "theorem", "nat_degree_pos_iff_degree_pos", ["polynomial"]], ["add", "theorem", "nat_degree_pos_of_eval₂_root", ["polynomial"]], ["add", "theorem", "nat_degree_pow_eq'", ["polynomial"]], ["add", "theorem", "ne_zero_of_degree_gt", ["polynomial"]], ["add", "theorem", "not_is_unit_X", ["polynomial"]], ["add", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["add", "theorem", "zero_le_degree_iff", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/degree/basic.lean", "changes": [["add", "theorem", "C_eq_int_cast", ["polynomial"]], ["add", "theorem", "coeff_eq_zero_of_degree_lt", ["polynomial"]], ["add", "theorem", "coeff_eq_zero_of_nat_degree_lt", ["polynomial"]], ["add", "theorem", "coeff_mul_X_sub_C", ["polynomial"]], ["add", "theorem", "coeff_nat_degree_succ_eq_zero", ["polynomial"]], ["add", "theorem", "coeff_ne_zero_of_eq_degree", ["polynomial"]], ["add", "def", "degree", ["polynomial"]], ["add", "theorem", "degree_C", ["polynomial"]], ["add", "theorem", "degree_C_le", ["polynomial"]], ["add", "theorem", "degree_C_mul_X_pow_le", ["polynomial"]], ["add", "theorem", "degree_X", ["polynomial"]], ["add", "theorem", "degree_X_le", ["polynomial"]], ["add", "theorem", "degree_X_pow_le", ["polynomial"]], ["add", "theorem", "degree_eq_bot", ["polynomial"]], ["add", "theorem", "degree_eq_iff_nat_degree_eq", ["polynomial"]], ["add", "theorem", "degree_eq_iff_nat_degree_eq_of_pos", ["polynomial"]], ["add", "theorem", "degree_eq_nat_degree", ["polynomial"]], ["add", "theorem", "degree_le_degree", ["polynomial"]], ["add", "theorem", "degree_le_nat_degree", ["polynomial"]], ["add", "theorem", "degree_lt_wf", ["polynomial"]], ["add", "theorem", "degree_monomial", ["polynomial"]], ["add", "theorem", "degree_monomial_le", ["polynomial"]], ["add", "theorem", "degree_ne_of_nat_degree_ne", ["polynomial"]], ["add", "theorem", "degree_neg", ["polynomial"]], ["add", "theorem", "degree_one", ["polynomial"]], ["add", "theorem", "degree_one_le", ["polynomial"]], ["add", "theorem", "degree_zero", ["polynomial"]], ["add", "theorem", "eq_X_add_C_of_degree_eq_one", ["polynomial"]], ["add", "theorem", "eq_X_add_C_of_degree_le_one", ["polynomial"]], ["add", "theorem", "ite_le_nat_degree_coeff", ["polynomial"]], ["add", "theorem", "le_degree_of_ne_zero", ["polynomial"]], ["add", "theorem", "le_nat_degree_of_ne_zero", ["polynomial"]], ["add", "def", "leading_coeff", ["polynomial"]], ["add", "theorem", "def", ["polynomial", "monic"]], ["add", "theorem", "leading_coeff", ["polynomial", "monic"]], ["add", "def", "monic", ["polynomial"]], ["add", "def", "nat_degree", ["polynomial"]], ["add", "theorem", "nat_degree_C", ["polynomial"]], ["add", "theorem", "nat_degree_X", ["polynomial"]], ["add", "theorem", "nat_degree_X_le", ["polynomial"]], ["add", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["add", "theorem", "nat_degree_eq_of_degree_eq_some", ["polynomial"]], ["add", "theorem", "nat_degree_int_cast", ["polynomial"]], ["add", "theorem", "nat_degree_le_nat_degree", ["polynomial"]], ["add", "theorem", "nat_degree_le_of_degree_le", ["polynomial"]], ["add", "theorem", "nat_degree_nat_cast", ["polynomial"]], ["add", "theorem", "nat_degree_neg", ["polynomial"]], ["add", "theorem", "nat_degree_one", ["polynomial"]], ["add", "theorem", "nat_degree_zero", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/derivative.lean", "changes": [["add", "theorem", "coeff_derivative", ["polynomial"]], ["add", "theorem", "degree_derivative_eq", ["polynomial"]], ["add", "theorem", "degree_derivative_le", ["polynomial"]], ["add", "theorem", "degree_derivative_lt", ["polynomial"]], ["add", "def", "derivative", ["polynomial"]], ["add", "theorem", "derivative_C", ["polynomial"]], ["add", "theorem", "derivative_X", ["polynomial"]], ["add", "theorem", "derivative_add", ["polynomial"]], ["add", "theorem", "derivative_eval", ["polynomial"]], ["add", "theorem", "derivative_eval₂_C", ["polynomial"]], ["add", "def", "derivative_hom", ["polynomial"]], ["add", "def", "derivative_lhom", ["polynomial"]], ["add", "theorem", "derivative_map", ["polynomial"]], ["add", "theorem", "derivative_monomial", ["polynomial"]], ["add", "theorem", "derivative_mul", ["polynomial"]], ["add", "theorem", "derivative_neg", ["polynomial"]], ["add", "theorem", "derivative_one", ["polynomial"]], ["add", "theorem", "derivative_pow", ["polynomial"]], ["add", "theorem", "derivative_pow_succ", ["polynomial"]], ["add", "theorem", "derivative_smul", ["polynomial"]], ["add", "theorem", "derivative_sub", ["polynomial"]], ["add", "theorem", "derivative_sum", ["polynomial"]], ["add", "theorem", "derivative_zero", ["polynomial"]], ["add", "theorem", "is_coprime_of_is_root_of_eval_derivative_ne_zero", ["polynomial"]], ["add", "theorem", "mem_support_derivative", ["polynomial"]], ["add", "theorem", "nat_degree_derivative_lt", ["polynomial"]], ["add", "theorem", "of_mem_support_derivative", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/div.lean", "changes": [["add", "theorem", "X_dvd_iff", ["polynomial"]], ["add", "def", "decidable_dvd_monic", ["polynomial"]], ["add", "theorem", "degree_add_div_by_monic", ["polynomial"]], ["add", "theorem", "degree_div_X_lt", ["polynomial"]], ["add", "theorem", "degree_div_by_monic_le", ["polynomial"]], ["add", "theorem", "degree_div_by_monic_lt", ["polynomial"]], ["add", "theorem", "degree_mod_by_monic_le", ["polynomial"]], ["add", "theorem", "degree_mod_by_monic_lt", ["polynomial"]], ["add", "theorem", "degree_pos_induction_on", ["polynomial"]], ["add", "def", "div_X", ["polynomial"]], ["add", "theorem", "div_X_C", ["polynomial"]], ["add", "theorem", "div_X_add", ["polynomial"]], ["add", "theorem", "div_X_eq_zero_iff", ["polynomial"]], ["add", "theorem", "div_X_mul_X_add", ["polynomial"]], ["add", "def", "div_by_monic", ["polynomial"]], ["add", "theorem", "div_by_monic_eq_of_not_monic", ["polynomial"]], ["add", "theorem", "div_by_monic_eq_zero_iff", ["polynomial"]], ["add", "theorem", "div_by_monic_mul_pow_root_multiplicity_eq", ["polynomial"]], ["add", "theorem", "div_by_monic_one", ["polynomial"]], ["add", "theorem", "div_by_monic_zero", ["polynomial"]], ["add", "theorem", "div_mod_by_monic_unique", ["polynomial"]], ["add", "theorem", "div_wf_lemma", ["polynomial"]], ["add", "theorem", "dvd_iff_is_root", ["polynomial"]], ["add", "theorem", "dvd_iff_mod_by_monic_eq_zero", ["polynomial"]], ["add", "theorem", "eval_div_by_monic_pow_root_multiplicity_ne_zero", ["polynomial"]], ["add", "theorem", "map_div_by_monic", ["polynomial"]], ["add", "theorem", "map_mod_by_monic", ["polynomial"]], ["add", "theorem", "map_mod_div_by_monic", ["polynomial"]], ["add", "def", "mod_by_monic", ["polynomial"]], ["add", "theorem", "mod_by_monic_X", ["polynomial"]], ["add", "theorem", "mod_by_monic_X_sub_C_eq_C_eval", ["polynomial"]], ["add", "theorem", "mod_by_monic_add_div", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_of_not_monic", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_self_iff", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_sub_mul_div", ["polynomial"]], ["add", "theorem", "mod_by_monic_one", ["polynomial"]], ["add", "theorem", "mod_by_monic_zero", ["polynomial"]], ["add", "theorem", "mul_div_by_monic_eq_iff_is_root", ["polynomial"]], ["add", "theorem", "multiplicity_X_sub_C_finite", ["polynomial"]], ["add", "theorem", "multiplicity_finite_of_degree_pos_of_monic", ["polynomial"]], ["add", "theorem", "nat_degree_div_by_monic", ["polynomial"]], ["add", "theorem", "pow_root_multiplicity_dvd", ["polynomial"]], ["add", "def", "root_multiplicity", ["polynomial"]], ["add", "theorem", "root_multiplicity_eq_multiplicity", ["polynomial"]], ["add", "theorem", "zero_div_by_monic", ["polynomial"]], ["add", "theorem", "zero_mod_by_monic", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/eval.lean", "changes": [["add", "theorem", "C_comp", ["polynomial"]], ["add", "theorem", "C_neg", ["polynomial"]], ["add", "theorem", "C_sub", ["polynomial"]], ["add", "theorem", "X_comp", ["polynomial"]], ["add", "theorem", "add_comp", ["polynomial"]], ["add", "theorem", "coe_eval₂_ring_hom", ["polynomial"]], ["add", "theorem", "coeff_map", ["polynomial"]], ["add", "theorem", "coeff_zero_eq_eval_zero", ["polynomial"]], ["add", "def", "comp", ["polynomial"]], ["add", "theorem", "comp_C", ["polynomial"]], ["add", "theorem", "comp_X", ["polynomial"]], ["add", "theorem", "comp_one", ["polynomial"]], ["add", "theorem", "comp_zero", ["polynomial"]], ["add", "def", "eval", ["polynomial"]], ["add", "theorem", "eval_C", ["polynomial"]], ["add", "theorem", "eval_X", ["polynomial"]], ["add", "theorem", "eval_add", ["polynomial"]], ["add", "theorem", "eval_bit0", ["polynomial"]], ["add", "theorem", "eval_bit1", ["polynomial"]], ["add", "theorem", "eval_int_cast", ["polynomial"]], ["add", "theorem", "eval_map", ["polynomial"]], ["add", "theorem", "eval_monomial", ["polynomial"]], ["add", "theorem", "eval_nat_cast", ["polynomial"]], ["add", "theorem", "eval_neg", ["polynomial"]], ["add", "theorem", "eval_one", ["polynomial"]], ["add", "theorem", "eval_smul", ["polynomial"]], ["add", "theorem", "eval_sub", ["polynomial"]], ["add", "theorem", "eval_sum", ["polynomial"]], ["add", "theorem", "eval_zero", ["polynomial"]], ["add", "def", "eval₂", ["polynomial"]], ["add", "theorem", "eval₂_C", ["polynomial"]], ["add", "theorem", "eval₂_X", ["polynomial"]], ["add", "theorem", "eval₂_X_pow", ["polynomial"]], ["add", "theorem", "eval₂_add", ["polynomial"]], ["add", "theorem", "eval₂_bit0", ["polynomial"]], ["add", "theorem", "eval₂_bit1", ["polynomial"]], ["add", "theorem", "eval₂_eq_eval_map", ["polynomial"]], ["add", "theorem", "eval₂_finset_sum", ["polynomial"]], ["add", "theorem", "eval₂_map", ["polynomial"]], ["add", "theorem", "eval₂_monomial", ["polynomial"]], ["add", "theorem", "eval₂_mul", ["polynomial"]], ["add", "theorem", "eval₂_nat_cast", ["polynomial"]], ["add", "theorem", "eval₂_neg", ["polynomial"]], ["add", "theorem", "eval₂_one", ["polynomial"]], ["add", "theorem", "eval₂_pow", ["polynomial"]], ["add", "def", "eval₂_ring_hom", ["polynomial"]], ["add", "theorem", "eval₂_smul", ["polynomial"]], ["add", "theorem", "eval₂_sub", ["polynomial"]], ["add", "theorem", "eval₂_sum", ["polynomial"]], ["add", "theorem", "eval₂_zero", ["polynomial"]], ["add", "theorem", "hom_eval₂", ["polynomial"]], ["add", "theorem", "def", ["polynomial", "is_root"]], ["add", "def", "is_root", ["polynomial"]], ["add", "def", "map", ["polynomial"]], ["add", "theorem", "map_C", ["polynomial"]], ["add", "theorem", "map_X", ["polynomial"]], ["add", "theorem", "map_add", ["polynomial"]], ["add", "theorem", "map_id", ["polynomial"]], ["add", "theorem", "map_injective", ["polynomial"]], ["add", "theorem", "map_map", ["polynomial"]], ["add", "theorem", "map_monomial", ["polynomial"]], ["add", "theorem", "map_mul", ["polynomial"]], ["add", "theorem", "map_nat_cast", ["polynomial"]], ["add", "theorem", "map_neg", ["polynomial"]], ["add", "theorem", "map_one", ["polynomial"]], ["add", "theorem", "map_pow", ["polynomial"]], ["add", "theorem", "map_sub", ["polynomial"]], ["add", "theorem", "map_zero", ["polynomial"]], ["add", "theorem", "mem_map_range", ["polynomial"]], ["add", "theorem", "one_comp", ["polynomial"]], ["add", "theorem", "root_X_sub_C", ["polynomial"]], ["add", "theorem", "zero_comp", ["polynomial"]], ["add", "theorem", "zero_is_root_of_coeff_zero_eq_zero", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/field_division.lean", "changes": [["add", "theorem", "coe_norm_unit", ["polynomial"]], ["add", "theorem", "coeff_inv_units", ["polynomial"]], ["add", "theorem", "degree_add_div", ["polynomial"]], ["add", "theorem", "degree_div_le", ["polynomial"]], ["add", "theorem", "degree_div_lt", ["polynomial"]], ["add", "theorem", "degree_map", ["polynomial"]], ["add", "theorem", "degree_mul_leading_coeff_inv", ["polynomial"]], ["add", "theorem", "degree_normalize", ["polynomial"]], ["add", "theorem", "degree_pos_of_ne_zero_of_nonunit", ["polynomial"]], ["add", "def", "div", ["polynomial"]], ["add", "theorem", "div_by_monic_eq_div", ["polynomial"]], ["add", "theorem", "div_def", ["polynomial"]], ["add", "theorem", "div_eq_zero_iff", ["polynomial"]], ["add", "theorem", "exists_root_of_degree_eq_one", ["polynomial"]], ["add", "theorem", "irreducible_of_degree_eq_one", ["polynomial"]], ["add", "theorem", "is_unit_iff_degree_eq_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_map", ["polynomial"]], ["add", "theorem", "map_div", ["polynomial"]], ["add", "theorem", "map_eq_zero", ["polynomial"]], ["add", "theorem", "map_mod", ["polynomial"]], ["add", "def", "mod", ["polynomial"]], ["add", "theorem", "mod_X_sub_C_eq_C_eval", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_mod", ["polynomial"]], ["add", "theorem", "mod_def", ["polynomial"]], ["add", "theorem", "mod_eq_self_iff", ["polynomial"]], ["add", "theorem", "monic_mul_leading_coeff_inv", ["polynomial"]], ["add", "theorem", "monic_normalize", ["polynomial"]], ["add", "theorem", "mul_div_eq_iff_is_root", ["polynomial"]], ["add", "theorem", "nat_degree_map", ["polynomial"]], ["add", "theorem", "pairwise_coprime_X_sub", ["polynomial"]], ["add", "theorem", "prime_of_degree_eq_one", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/identities.lean", "changes": [["add", "def", "binom_expansion", ["polynomial"]], ["add", "def", "eval_sub_factor", ["polynomial"]], ["add", "def", "pow_add_expansion", ["polynomial"]], ["add", "def", "pow_sub_pow_factor", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/induction.lean", "changes": [["add", "theorem", "as_sum", ["polynomial"]], ["add", "theorem", "coeff_monomial_mul", ["polynomial"]], ["add", "theorem", "coeff_monomial_zero_mul", ["polynomial"]], ["add", "theorem", "coeff_mul_monomial", ["polynomial"]], ["add", "theorem", "coeff_mul_monomial_zero", ["polynomial"]], ["add", "theorem", "finset_sum_coeff", ["polynomial"]], ["add", "theorem", "sum_C_mul_X_eq", ["polynomial"]], ["add", "theorem", "sum_monomial_eq", ["polynomial"]], ["add", "theorem", "sum_over_range'", ["polynomial"]], ["add", "theorem", "sum_over_range", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/monic.lean", "changes": [["add", "theorem", "eq_one_of_is_unit_of_monic", ["polynomial"]], ["add", "theorem", "integral_normalization_aeval_eq_zero", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_nat_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_ne_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_ne_nat_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_eval₂_eq_zero", ["polynomial"]], ["add", "theorem", "is_unit_C", ["polynomial"]], ["add", "theorem", "leading_coeff_of_injective", ["polynomial"]], ["add", "theorem", "as_sum", ["polynomial", "monic"]], ["add", "theorem", "monic_X_add_C", ["polynomial"]], ["add", "theorem", "monic_X_pow_add", ["polynomial"]], ["add", "theorem", "monic_X_pow_sub", ["polynomial"]], ["add", "theorem", "monic_X_sub_C", ["polynomial"]], ["add", "theorem", "monic_integral_normalization", ["polynomial"]], ["add", "theorem", "monic_map", ["polynomial"]], ["add", "theorem", "monic_mul", ["polynomial"]], ["add", "theorem", "monic_of_degree_le", ["polynomial"]], ["add", "theorem", "monic_of_injective", ["polynomial"]], ["add", "theorem", "monic_pow", ["polynomial"]], ["add", "theorem", "ne_zero_of_monic", ["polynomial"]], ["add", "theorem", "ne_zero_of_monic_of_zero_ne_one", ["polynomial"]], ["add", "theorem", "ne_zero_of_ne_zero_of_monic", ["polynomial"]], ["add", "theorem", "not_monic_zero", ["polynomial"]], ["add", "theorem", "support_integral_normalization", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/monomial.lean", "changes": [["add", "def", "C", ["polynomial"]], ["add", "theorem", "C_0", ["polynomial"]], ["add", "theorem", "C_1", ["polynomial"]], ["add", "theorem", "C_add", ["polynomial"]], ["add", "theorem", "C_bit0", ["polynomial"]], ["add", "theorem", "C_bit1", ["polynomial"]], ["add", "theorem", "C_eq_nat_cast", ["polynomial"]], ["add", "theorem", "C_mul", ["polynomial"]], ["add", "theorem", "C_pow", ["polynomial"]], ["add", "theorem", "X_ne_zero", ["polynomial"]], ["add", "theorem", "coeff_C", ["polynomial"]], ["add", "theorem", "coeff_C_zero", ["polynomial"]], ["add", "theorem", "coeff_X", ["polynomial"]], ["add", "theorem", "coeff_X_one", ["polynomial"]], ["add", "theorem", "coeff_X_zero", ["polynomial"]], ["add", "theorem", "monomial_zero_left", ["polynomial"]], ["add", "theorem", "of_polynomial_ne", ["polynomial", "nonzero"]], ["add", "theorem", "single_eq_C_mul_X", ["polynomial"]], ["add", "theorem", "sum_C_index", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/data/polynomial/ring_division.lean", "changes": [["add", "theorem", "polynomial", ["is_integral_domain"]], ["add", "theorem", "card_nth_roots", ["polynomial"]], ["add", "theorem", "card_roots'", ["polynomial"]], ["add", "theorem", "card_roots", ["polynomial"]], ["add", "theorem", "card_roots_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "card_roots_sub_C'", ["polynomial"]], ["add", "theorem", "card_roots_sub_C", ["polynomial"]], ["add", "theorem", "coeff_coe_units_zero_ne_zero", ["polynomial"]], ["add", "theorem", "coeff_comp_degree_mul_degree", ["polynomial"]], ["add", "theorem", "degree_coe_units", ["polynomial"]], ["add", "theorem", "degree_eq_degree_of_associated", ["polynomial"]], ["add", "theorem", "degree_eq_one_of_irreducible_of_root", ["polynomial"]], ["add", "theorem", "degree_eq_zero_of_is_unit", ["polynomial"]], ["add", "theorem", "degree_le_mul_left", ["polynomial"]], ["add", "theorem", "degree_mul_eq", ["polynomial"]], ["add", "theorem", "degree_pos_of_aeval_root", ["polynomial"]], ["add", "theorem", "degree_pow_eq", ["polynomial"]], ["add", "theorem", "exists_finset_roots", ["polynomial"]], ["add", "theorem", "irreducible_X", ["polynomial"]], ["add", "theorem", "irreducible_X_sub_C", ["polynomial"]], ["add", "theorem", "irreducible_of_degree_eq_one_of_monic", ["polynomial"]], ["add", "theorem", "is_unit_iff", ["polynomial"]], ["add", "theorem", "leading_coeff_comp", ["polynomial"]], ["add", "theorem", "leading_coeff_mul", ["polynomial"]], ["add", "theorem", "leading_coeff_pow", ["polynomial"]], ["add", "theorem", "mem_nth_roots", ["polynomial"]], ["add", "theorem", "mem_roots", ["polynomial"]], ["add", "theorem", "mem_roots_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_coe_units", ["polynomial"]], ["add", "theorem", "nat_degree_comp", ["polynomial"]], ["add", "theorem", "nat_degree_le_of_dvd", ["polynomial"]], ["add", "theorem", "nat_degree_mul_eq", ["polynomial"]], ["add", "theorem", "nat_degree_pos_of_aeval_root", ["polynomial"]], ["add", "theorem", "nat_degree_pow_eq", ["polynomial"]], ["add", "def", "nth_roots", ["polynomial"]], ["add", "theorem", "prime_X", ["polynomial"]], ["add", "theorem", "prime_X_sub_C", ["polynomial"]], ["add", "theorem", "prime_of_degree_eq_one_of_monic", ["polynomial"]], ["add", "theorem", "root_mul", ["polynomial"]], ["add", "theorem", "root_or_root_of_root_mul", ["polynomial"]], ["add", "theorem", "roots_X_sub_C", ["polynomial"]], ["add", "theorem", "roots_mul", ["polynomial"]]]}]}, {"timestamp": 1594922407, "sha": "6fd4f8fa", "message": "feat(meta/expr): add tactic_format instance for declaration (#3390)\nThis allows you to `trace d` where `d : declaration`. Useful for debugging metaprograms.", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1594909467, "sha": "25be04ae", "message": "feat(data/nat/digits): add lemmas about digits (#3406)\nAdded `lt_base_pow_length_digits`, `of_digits_lt_base_pow_length`, `of_digits_append` and `of_digits_digits_append_digits`", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "lt_base_pow_length_digits'", []], ["add", "theorem", "lt_base_pow_length_digits", []], ["add", "theorem", "of_digits_append", []], ["add", "theorem", "of_digits_digits_append_digits", []], ["add", "theorem", "of_digits_lt_base_pow_length'", []], ["add", "theorem", "of_digits_lt_base_pow_length", []]]}]}, {"timestamp": 1594904124, "sha": "a8c10e1c", "message": "chore(topology/algebra/ordered): rename `lim*_eq_of_tendsto` to `tendsto.lim*_eq` (#3415)\nAlso add `tendsto_of_le_liminf_of_limsup_le`", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "liminf_eq", ["filter", "tendsto"]], ["add", "theorem", "limsup_eq", ["filter", "tendsto"]], ["del", "theorem", "liminf_eq_of_tendsto", []], ["del", "theorem", "limsup_eq_of_tendsto", []], ["add", "theorem", "tendsto_of_le_liminf_of_limsup_le", []]]}]}, {"timestamp": 1594886036, "sha": "1311eb2b", "message": "feat(tactic/obviously): improve error reporting (#3412)\nIf `obviously` (used for auto_params) fails, it now prints a more useful message than \"chain tactic made no progress\"\nIf the goal presented to obviously contains `sorry`, it just uses `sorry` to discard it.", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/obviously.lean", "changes": []}]}, {"timestamp": 1594881937, "sha": "9ca3ce6e", "message": "chore(data/opposite): pp_nodot on op and unop (#3413)\nSince it's not possible to write `X.op`, its extremely unhelpful for the pretty printer to output this.", "changes": [{"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}]}, {"timestamp": 1594854339, "sha": "c1a5ae94", "message": "chore(order/directed): use implicit args in `iff`s (#3411)", "changes": [{"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid/membership.lean", "newPath": "src/group_theory/submonoid/membership.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "Sup_eq_supr'", []]]}, {"oldPath": "src/order/directed.lean", "newPath": "src/order/directed.lean", "changes": [["mod", "theorem", "directed_comp", []]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1594831818, "sha": "5fe67b77", "message": "feat(measure_theory): preliminaries for Haar measure (#3195)\nMove properties about lattice operations on encodable types to a new file. These are generalized from lemmas in the measure theory folder, for lattice operations and not just for `ennreal`. Also move them to the `encodable` namespace.\nRename `outer_measure.Union_aux` to `encodable.Union_decode2`.\nGeneralize some properties for outer measures to arbitrary complete lattices. This is useful for operations that behave like outer measures on a subset of `set α`.", "changes": [{"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/equiv/encodable/lattice.lean", "changes": [["add", "theorem", "Union_decode2", ["encodable"]], ["add", "theorem", "Union_decode2_cases", ["encodable"]], ["add", "theorem", "Union_decode2_disjoint_on", ["encodable"]], ["add", "theorem", "supr_decode2", ["encodable"]], ["add", "theorem", "nonempty_encodable", ["finset"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "is_measurable", ["is_compact"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["del", "theorem", "Union_decode2", ["encodable"]], ["del", "theorem", "Union_decode2_cases", ["encodable"]], ["del", "theorem", "Union_decode2_disjoint_on", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "smul_apply", ["measure_theory", "measure"]], ["add", "theorem", "exists_is_measurable_superset_of_trim_eq_zero", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_smul", ["measure_theory", "outer_measure"]], ["mod", "theorem", "trim_zero", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["del", "theorem", "Union_aux", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_inter_add_diff", ["measure_theory", "outer_measure"]], ["add", "theorem", "measure_of_eq_coe", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/order/ideal.lean", "newPath": "src/order/ideal.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "rel_sup_add", []], ["add", "theorem", "rel_supr_sum", []], ["add", "theorem", "rel_supr_tsum", []], ["add", "theorem", "tsum_Union_decode2", []], ["add", "theorem", "tsum_supr_decode2", []]]}]}, {"timestamp": 1594821405, "sha": "5f5d6417", "message": "feat(algebra/ordered_group): instances for additive/multiplicative (#3405)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1594813340, "sha": "a41a3074", "message": "refactor(topology/algebra/infinite_sum): review (#3371)\n## Rename\n- `has_sum_unique` → `has_sum.unique`;\n- `summable.summable_comp_of_injective` → `summable.comp_injective`;\n- `has_sum_iff_tendsto_nat_of_summable` → `summable.has_sum_iff_tendsto_nat`;\n- `tsum_eq_has_sum` → `has_sum.tsum_eq`;\n- `support_comp` → `support_comp_subset`, delete `support_comp'`;\n## Change arguments\n- `tsum_eq_tsum_of_ne_zero_bij`, `has_sum_iff_has_sum_of_ne_zero_bij`: use functions from `support` instead of `Π x, f x ≠ 0 → β`;\n## Add\n- `indicator_compl_add_self_apply`, `indicator_compl_add_self`;\n- `indicator_self_add_compl_apply`, `indicator_self_add_compl`;\n- `support_subset_iff`, `support_subset_iff'`;\n- `support_subset_comp`;\n- `support_prod_mk`;\n- `embedding.coe_subtype`;", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["mod", "theorem", "indicator_compl", ["set"]], ["add", "theorem", "indicator_compl_add_self", ["set"]], ["add", "theorem", "indicator_compl_add_self_apply", ["set"]], ["add", "theorem", "indicator_self_add_compl", ["set"]], ["add", "theorem", "indicator_self_add_compl_apply", ["set"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_empty_of_not_nonempty", ["set"]], ["add", "theorem", "insert_diff_self_of_not_mem", ["set"]]]}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["del", "theorem", "support_comp'", ["function"]], ["del", "theorem", "support_comp", ["function"]], ["del", "theorem", "support_comp_eq'", ["function"]], ["add", "theorem", "support_comp_subset", ["function"]], ["add", "theorem", "support_prod_mk", ["function"]], ["add", "theorem", "support_subset_comp", ["function"]], ["add", "theorem", "support_subset_iff'", ["function"]], ["add", "theorem", "support_subset_iff", ["function"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "coe_subtype", ["function", "embedding"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "theorem", "tsum_coe", ["pmf"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "map_at_top_finset_prod_le_of_prod_eq", ["filter"]], ["add", "theorem", "map_at_top_finset_prod_eq", ["function", "injective"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_iff_of_support", ["equiv"]], ["add", "theorem", "summable_iff_of_has_sum_iff", ["equiv"]], ["add", "theorem", "summable_iff_of_support", ["equiv"]], ["add", "theorem", "tsum_eq", ["equiv"]], ["add", "theorem", "tsum_eq_tsum_of_has_sum_iff_has_sum", ["equiv"]], ["add", "theorem", "tsum_eq_tsum_of_support", ["equiv"]], ["add", "theorem", "tsum_subtype", ["finset"]], ["add", "theorem", "has_sum_iff", ["function", "injective"]], ["add", "theorem", "summable_iff", ["function", "injective"]], ["add", "theorem", "add_compl", ["has_sum"]], ["add", "theorem", "compl_add", ["has_sum"]], ["add", "theorem", "has_sum_compl_iff", ["has_sum"]], ["add", "theorem", "has_sum_iff_compl", ["has_sum"]], ["del", "theorem", "has_sum_ne_zero", ["has_sum"]], ["mod", "theorem", "has_sum_of_sum_eq", ["has_sum"]], ["mod", "theorem", "mul_left", ["has_sum"]], ["mod", "theorem", "neg", ["has_sum"]], ["add", "theorem", "prod_fiberwise", ["has_sum"]], ["mod", "theorem", "sigma_of_has_sum", ["has_sum"]], ["add", "theorem", "tsum_eq", ["has_sum"]], ["add", "theorem", "unique", ["has_sum"]], ["del", "theorem", "has_sum_hom", []], ["mod", "theorem", "has_sum_iff_has_sum", []], ["del", "theorem", "has_sum_iff_has_sum_of_iso", []], ["del", "theorem", "has_sum_iff_has_sum_of_ne_zero", []], ["mod", "theorem", "has_sum_iff_has_sum_of_ne_zero_bij", []], ["del", "theorem", "has_sum_iff_tendsto_nat_of_summable", []], ["del", "theorem", "has_sum_of_iso", []], ["del", "theorem", "has_sum_subtype_iff'", []], ["del", "theorem", "has_sum_subtype_iff", []], ["add", "theorem", "has_sum_subtype_iff_indicator", []], ["del", "theorem", "has_sum_subtype_iff_of_eq_zero", []], ["add", "theorem", "has_sum_subtype_iff_of_support_subset", []], ["add", "theorem", "has_sum_subtype_support", []], ["del", "theorem", "has_sum_unique", []], ["add", "theorem", "summable_compl_iff", ["set", "finite"]], ["add", "theorem", "sum_add_tsum_compl", []], ["del", "theorem", "sum_add_tsum_subtype", []], ["add", "theorem", "add_compl", ["summable"]], ["add", "theorem", "comp_injective", ["summable"]], ["add", "theorem", "compl_add", ["summable"]], ["add", "theorem", "has_sum_iff_tendsto_nat", ["summable"]], ["add", "theorem", "prod_factor", ["summable"]], ["add", "theorem", "prod_symm", ["summable"]], ["add", "theorem", "subtype", ["summable"]], ["del", "theorem", "summable_comp_of_injective", ["summable"]], ["add", "theorem", "summable_compl_iff", ["summable"]], ["mod", "theorem", "summable_of_eq_zero_or_self", ["summable"]], ["del", "theorem", "summable_iff_summable_ne_zero", []], ["del", "theorem", "summable_iff_summable_ne_zero_bij", []], ["add", "theorem", "summable_of_ne_finset_zero", []], ["del", "theorem", "summable_subtype_iff", []], ["del", "theorem", "summable_sum_of_ne_finset_zero", []], ["add", "theorem", "tsum_add_tsum_compl", []], ["add", "theorem", "tsum_comm'", []], ["add", "theorem", "tsum_comm", []], ["del", "theorem", "tsum_eq_has_sum", []], ["del", "theorem", "tsum_eq_tsum_of_iso", []], ["del", "theorem", "tsum_eq_tsum_of_ne_zero", []], ["mod", "theorem", "tsum_eq_tsum_of_ne_zero_bij", []], ["mod", "theorem", "tsum_eq_zero_add", []], ["del", "theorem", "tsum_equiv", []], ["add", "theorem", "tsum_prod'", []], ["add", "theorem", "tsum_prod", []], ["del", "theorem", "tsum_subtype_eq_sum", []], ["mod", "theorem", "tsum_zero", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "has_sum_coe", ["nnreal"]], ["mod", "theorem", "summable_coe", ["nnreal"]]]}]}, {"timestamp": 1594806702, "sha": "503a40aa", "message": "feat(logic/basic) forall_imp (#3391)\nAdded a missing lemma, which is the one-way implication version of `forall_congr`.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall_imp", []]]}]}, {"timestamp": 1594789872, "sha": "51a75ffe", "message": "feat(category_theory/pullback): make the is_limit helper lemmas more ergonomic (#3398)", "changes": [{"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["del", "def", "mk'", ["category_theory", "limits", "pullback_cone", "is_limit"]], ["mod", "def", "mk", ["category_theory", "limits", "pullback_cone", "is_limit"]], ["add", "def", "is_limit_aux'", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "is_limit_aux", ["category_theory", "limits", "pullback_cone"]], ["del", "def", "mk'", ["category_theory", "limits", "pushout_cocone", "is_colimit"]], ["mod", "def", "mk", ["category_theory", "limits", "pushout_cocone", "is_colimit"]], ["add", "def", "is_colimit_aux'", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "is_colimit_aux", ["category_theory", "limits", "pushout_cocone"]]]}]}, {"timestamp": 1594774623, "sha": "8495f76b", "message": "feat(geometry/manifold/times_cont_mdiff): smooth functions between manifolds (#3387)\nWe define smooth functions between smooth manifolds, and prove their basic properties (including the facts that a composition of smooth functions is smooth, and that the tangent map of a smooth map is smooth).\nTo avoid reproving always the same stuff in manifolds, we build a general theory of local invariant properties in the model space (i.e., properties which are local, and invariant under the structure groupoids) and show that the lift of such properties to charted spaces automatically inherit all the good behavior of the original property. We apply this general machinery to prove most basic properties of smooth functions between manifolds.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["del", "theorem", "chart_at_model_space_eq", []], ["add", "theorem", "chart_at_self_eq", []], ["add", "theorem", "charted_space_self_atlas", []], ["mod", "theorem", "mem_groupoid_of_pregroupoid", []], ["del", "theorem", "model_space_atlas", []], ["add", "theorem", "id_mem_maximal_atlas", ["structure_groupoid"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/local_invariant_properties.lean", "changes": [["add", "def", "lift_prop", ["charted_space"]], ["add", "def", "lift_prop_at", ["charted_space"]], ["add", "def", "lift_prop_on", ["charted_space"]], ["add", "def", "lift_prop_within_at", ["charted_space"]], ["add", "theorem", "lift_prop_on_univ", ["structure_groupoid"]], ["add", "theorem", "lift_prop_within_at_univ", ["structure_groupoid"]], ["add", "theorem", "lift_prop_at_chart", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_at_chart_symm", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_at_congr_iff_of_eventually_eq", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_at_congr_of_eventually_eq", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_at_of_lift_prop_within_at", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_at_of_mem_maximal_atlas", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_at_symm_of_mem_maximal_atlas", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_id", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_of_locally_lift_prop_on", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_chart", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_chart_symm", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_congr", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_congr_iff", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_indep_chart", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_mono", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_of_lift_prop", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_of_locally_lift_prop_on", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_of_mem_maximal_atlas", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_on_symm_of_mem_maximal_atlas", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_congr", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_congr_iff", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_congr_iff_of_eventually_eq", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_congr_of_eventually_eq", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_indep_chart", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_indep_chart_aux", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_inter'", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_inter", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_mono", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_of_lift_prop_at", ["structure_groupoid", "local_invariant_prop"]], ["add", "theorem", "lift_prop_within_at_of_lift_prop_at_of_mem_nhds", ["structure_groupoid", "local_invariant_prop"]], ["add", "structure", "local_invariant_prop", ["structure_groupoid"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "theorem", "ext_chart_preimage_inter_eq", []], ["mod", "def", "maximal_atlas", ["smooth_manifold_with_corners"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/times_cont_mdiff.lean", "changes": [["add", "theorem", "times_cont_mdiff_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "times_cont_mdiff_within_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "times_cont_diff_within_at_local_invariant_prop", []], ["add", "theorem", "times_cont_diff_within_at_local_invariant_prop_id", []], ["add", "theorem", "times_cont_diff_within_at_local_invariant_prop_mono", []], ["add", "def", "times_cont_diff_within_at_prop", []], ["add", "theorem", "comp", ["times_cont_mdiff"]], ["add", "theorem", "continuous", ["times_cont_mdiff"]], ["add", "theorem", "continuous_tangent_map", ["times_cont_mdiff"]], ["add", "theorem", "mdifferentiable", ["times_cont_mdiff"]], ["add", "theorem", "of_le", ["times_cont_mdiff"]], ["add", "theorem", "of_succ", ["times_cont_mdiff"]], ["add", "theorem", "times_cont_mdiff_at", ["times_cont_mdiff"]], ["add", "theorem", "times_cont_mdiff_on", ["times_cont_mdiff"]], ["add", "theorem", "times_cont_mdiff_tangent_map", ["times_cont_mdiff"]], ["add", "def", "times_cont_mdiff", []], ["add", "theorem", "comp", ["times_cont_mdiff_at"]], ["add", "theorem", "congr_of_eventually_eq", ["times_cont_mdiff_at"]], ["add", "theorem", "continuous_at", ["times_cont_mdiff_at"]], ["add", "theorem", "mdifferentiable_at", ["times_cont_mdiff_at"]], ["add", "theorem", "of_le", ["times_cont_mdiff_at"]], ["add", "theorem", "of_succ", ["times_cont_mdiff_at"]], ["add", "theorem", "times_cont_mdiff_within_at", ["times_cont_mdiff_at"]], ["add", "def", "times_cont_mdiff_at", []], ["add", "theorem", "times_cont_mdiff_at_const", []], ["add", "theorem", "times_cont_mdiff_at_id", []], ["add", "theorem", "times_cont_mdiff_at_iff_times_cont_diff_at", []], ["add", "theorem", "times_cont_mdiff_at_iff_times_cont_mdiff_on_nhds", []], ["add", "theorem", "times_cont_mdiff_at_top", []], ["add", "theorem", "times_cont_mdiff_const", []], ["add", "theorem", "times_cont_mdiff_id", []], ["add", "theorem", "times_cont_mdiff_iff", []], ["add", "theorem", "times_cont_mdiff_iff_times_cont_diff", []], ["add", "theorem", "times_cont_mdiff_of_locally_times_cont_mdiff_on", []], ["add", "theorem", "comp'", ["times_cont_mdiff_on"]], ["add", "theorem", "comp", ["times_cont_mdiff_on"]], ["add", "theorem", "congr", ["times_cont_mdiff_on"]], ["add", "theorem", "continuous_on", ["times_cont_mdiff_on"]], ["add", "theorem", "continuous_on_tangent_map_within", ["times_cont_mdiff_on"]], ["add", "theorem", "continuous_on_tangent_map_within_aux", ["times_cont_mdiff_on"]], ["add", "theorem", "mdifferentiable_on", ["times_cont_mdiff_on"]], ["add", "theorem", "mono", ["times_cont_mdiff_on"]], ["add", "theorem", "of_le", ["times_cont_mdiff_on"]], ["add", "theorem", "of_succ", ["times_cont_mdiff_on"]], ["add", "theorem", "times_cont_mdiff_on_tangent_map_within", ["times_cont_mdiff_on"]], ["add", "theorem", "times_cont_mdiff_on_tangent_map_within_aux", ["times_cont_mdiff_on"]], ["add", "def", "times_cont_mdiff_on", []], ["add", "theorem", "times_cont_mdiff_on_chart", []], ["add", "theorem", "times_cont_mdiff_on_chart_symm", []], ["add", "theorem", "times_cont_mdiff_on_congr", []], ["add", "theorem", "times_cont_mdiff_on_const", []], ["add", "theorem", "times_cont_mdiff_on_id", []], ["add", "theorem", "times_cont_mdiff_on_iff", []], ["add", "theorem", "times_cont_mdiff_on_iff_times_cont_diff_on", []], ["add", "theorem", "times_cont_mdiff_on_of_locally_times_cont_mdiff_on", []], ["add", "theorem", "times_cont_mdiff_on_of_mem_maximal_atlas", []], ["add", "theorem", "times_cont_mdiff_on_symm_of_mem_maximal_atlas", []], ["add", "theorem", "times_cont_mdiff_on_top", []], ["add", "theorem", "times_cont_mdiff_on_univ", []], ["add", "theorem", "times_cont_mdiff_top", []], ["add", "theorem", "comp'", ["times_cont_mdiff_within_at"]], ["add", "theorem", "comp", ["times_cont_mdiff_within_at"]], ["add", "theorem", "congr", ["times_cont_mdiff_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["times_cont_mdiff_within_at"]], ["add", "theorem", "continuous_within_at", ["times_cont_mdiff_within_at"]], ["add", "theorem", "mdifferentiable_within_at", ["times_cont_mdiff_within_at"]], ["add", "theorem", "mono", ["times_cont_mdiff_within_at"]], ["add", "theorem", "of_le", ["times_cont_mdiff_within_at"]], ["add", "theorem", "of_succ", ["times_cont_mdiff_within_at"]], ["add", "theorem", "times_cont_mdiff_at", ["times_cont_mdiff_within_at"]], ["add", "def", "times_cont_mdiff_within_at", []], ["add", "theorem", "times_cont_mdiff_within_at_congr", []], ["add", "theorem", "times_cont_mdiff_within_at_const", []], ["add", "theorem", "times_cont_mdiff_within_at_id", []], ["add", "theorem", "times_cont_mdiff_within_at_iff_nat", []], ["add", "theorem", "times_cont_mdiff_within_at_iff_times_cont_diff_within_at", []], ["add", "theorem", "times_cont_mdiff_within_at_iff_times_cont_mdiff_on_nhds", []], ["add", "theorem", "times_cont_mdiff_within_at_inter'", []], ["add", "theorem", "times_cont_mdiff_within_at_inter", []], ["add", "theorem", "times_cont_mdiff_within_at_top", []], ["add", "theorem", "times_cont_mdiff_within_at_univ", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "eq_of_nhds", ["filter", "eventually_eq"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "congr_mono", ["continuous_within_at"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["mod", "theorem", "of_set_trans_of_set", ["local_homeomorph"]], ["mod", "theorem", "of_set_univ_eq_refl", ["local_homeomorph"]], ["add", "theorem", "preimage_open_of_open", ["local_homeomorph"]], ["add", "theorem", "preimage_open_of_open_symm", ["local_homeomorph"]], ["mod", "theorem", "refl_local_equiv", ["local_homeomorph"]], ["mod", "theorem", "refl_symm", ["local_homeomorph"]]]}]}, {"timestamp": 1594744834, "sha": "708e4813", "message": "chore(data/set/basic): simp attribute on set.image_subset_iff (#3394)\nsee discussion here with @sgouezel :\nhttps://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.233387.3A.20smooth.20functions.20on.20manifolds/near/203751071", "changes": [{"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "image_subset_iff", ["set"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1594739190, "sha": "6c1ae3b1", "message": "chore(category_theory/natural_isomorphism): move lemmas to correct namespace, add simp lemma (#3401)", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "def", "app", ["category_theory", "iso"]], ["add", "theorem", "hom_inv_id_app", ["category_theory", "iso"]], ["add", "theorem", "inv_hom_id_app", ["category_theory", "iso"]], ["del", "theorem", "hom_app_inv_app_id", ["category_theory", "nat_iso"]], ["del", "theorem", "hom_inv_id_app", ["category_theory", "nat_iso"]], ["del", "theorem", "inv_app_hom_app_id", ["category_theory", "nat_iso"]], ["del", "theorem", "inv_hom_id_app", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "theorem", "hom_inv_id_app_apply", ["category_theory", "functor_to_types"]], ["add", "theorem", "inv_hom_id_app_apply", ["category_theory", "functor_to_types"]]]}]}, {"timestamp": 1594739188, "sha": "f7825bf5", "message": "feat(algebra/polynomial): big_operators lemmas for polynomials (#3378)\nThis starts a new folder algebra/polynomial. As we refactor data/polynomial.lean, much of that content should land in this folder.", "changes": [{"oldPath": null, "newPath": "src/algebra/polynomial/basic.lean", "changes": [["add", "theorem", "coe_aeval_eq_eval", ["polynomial"]], ["add", "theorem", "coeff_zero_eq_aeval_zero", ["polynomial"]], ["add", "def", "leading_coeff_hom", ["polynomial"]], ["add", "theorem", "leading_coeff_hom_apply", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/algebra/polynomial/big_operators.lean", "changes": [["add", "theorem", "leading_coeff_prod'", ["polynomial"]], ["add", "theorem", "leading_coeff_prod", ["polynomial"]], ["add", "theorem", "monic_prod_of_monic", ["polynomial"]], ["add", "theorem", "nat_degree_prod_eq'", ["polynomial"]], ["add", "theorem", "nat_degree_prod_eq", ["polynomial"]], ["add", "theorem", "nat_degree_prod_eq_of_monic", ["polynomial"]], ["add", "theorem", "nat_degree_prod_le", ["polynomial"]]]}]}, {"timestamp": 1594737725, "sha": "bcf61df2", "message": "feat(data/qpf): uniformity iff preservation of supp (#3388)", "changes": [{"oldPath": "src/data/pfunctor/univariate/basic.lean", "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": [["add", "theorem", "liftp_iff'", ["pfunctor"]], ["add", "theorem", "supp_eq", ["pfunctor"]]]}, {"oldPath": "src/data/qpf/univariate/basic.lean", "newPath": "src/data/qpf/univariate/basic.lean", "changes": [["add", "def", "liftp_preservation", ["qpf"]], ["add", "theorem", "liftp_preservation_iff_uniform", ["qpf"]], ["add", "def", "supp_preservation", ["qpf"]], ["add", "theorem", "supp_preservation_iff_liftp_preservation", ["qpf"]], ["add", "theorem", "supp_preservation_iff_uniform", ["qpf"]]]}]}, {"timestamp": 1594735554, "sha": "02f2f947", "message": "refactor(category_theory/finite_limits): missing piece of #3320 (#3400)\nA recent PR #3320 did some refactoring of special shapes of limits. It seems I forgot to include `wide_pullbacks` in that refactor, so I've done that here.", "changes": [{"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["add", "def", "diagram_iso_wide_cospan", ["category_theory", "limits", "wide_pullback_shape"]], ["add", "inductive", "hom", ["category_theory", "limits", "wide_pullback_shape"]], ["add", "theorem", "hom_id", ["category_theory", "limits", "wide_pullback_shape"]], ["add", "def", "wide_cospan", ["category_theory", "limits", "wide_pullback_shape"]], ["add", "def", "wide_pullback_shape", ["category_theory", "limits"]], ["add", "def", "diagram_iso_wide_span", ["category_theory", "limits", "wide_pushout_shape"]], ["add", "inductive", "hom", ["category_theory", "limits", "wide_pushout_shape"]], ["add", "theorem", "hom_id", ["category_theory", "limits", "wide_pushout_shape"]], ["add", "def", "wide_span", ["category_theory", "limits", "wide_pushout_shape"]], ["add", "def", "wide_pushout_shape", ["category_theory", "limits"]], ["del", "def", "diagram_iso_wide_cospan", ["wide_pullback_shape"]], ["del", "inductive", "hom", ["wide_pullback_shape"]], ["del", "theorem", "hom_id", ["wide_pullback_shape"]], ["del", "def", "wide_cospan", ["wide_pullback_shape"]], ["del", "def", "wide_pullback_shape", []], ["del", "def", "diagram_iso_wide_span", ["wide_pushout_shape"]], ["del", "inductive", "hom", ["wide_pushout_shape"]], ["del", "theorem", "hom_id", ["wide_pushout_shape"]], ["del", "def", "wide_span", ["wide_pushout_shape"]], ["del", "def", "wide_pushout_shape", []]]}]}, {"timestamp": 1594726940, "sha": "a0846da1", "message": "chore(category_theory/limits/over): split a slow file (#3399)\nThis was previously the last file to finish compiling when compiling `category_theory/`. This PR splits it into some smaller pieces which can compile in parallel (and some pieces now come earlier in the import hierarchy).\nNo change to content.", "changes": [{"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["del", "def", "cones_equiv", ["category_theory", "over", "construct_products"]], ["del", "def", "cones_equiv_counit_iso", ["category_theory", "over", "construct_products"]], ["del", "def", "cones_equiv_functor", ["category_theory", "over", "construct_products"]], ["del", "def", "cones_equiv_inverse", ["category_theory", "over", "construct_products"]], ["del", "def", "cones_equiv_inverse_obj", ["category_theory", "over", "construct_products"]], ["del", "def", "cones_equiv_unit_iso", ["category_theory", "over", "construct_products"]], ["del", "def", "has_over_limit_discrete_of_wide_pullback_limit", ["category_theory", "over", "construct_products"]], ["del", "def", "over_binary_product_of_pullback", ["category_theory", "over", "construct_products"]], ["del", "def", "over_finite_products_of_finite_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["del", "def", "over_product_of_wide_pullback", ["category_theory", "over", "construct_products"]], ["del", "def", "over_products_of_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["del", "def", "wide_pullback_diagram_of_diagram_over", ["category_theory", "over", "construct_products"]], ["del", "def", "nat_trans_in_over", ["category_theory", "over", "creates_connected"]], ["del", "def", "raise_cone", ["category_theory", "over", "creates_connected"]], ["del", "def", "raised_cone_is_limit", ["category_theory", "over", "creates_connected"]], ["del", "theorem", "raised_cone_lowers_to_original", ["category_theory", "over", "creates_connected"]], ["del", "def", "over_has_terminal", ["category_theory", "over"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/over/connected.lean", "changes": [["add", "def", "nat_trans_in_over", ["category_theory", "over", "creates_connected"]], ["add", "def", "raise_cone", ["category_theory", "over", "creates_connected"]], ["add", "def", "raised_cone_is_limit", ["category_theory", "over", "creates_connected"]], ["add", "theorem", "raised_cone_lowers_to_original", ["category_theory", "over", "creates_connected"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/over/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/over/products.lean", "changes": [["add", "def", "cones_equiv", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_counit_iso", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_functor", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_inverse", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_inverse_obj", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_unit_iso", ["category_theory", "over", "construct_products"]], ["add", "def", "has_over_limit_discrete_of_wide_pullback_limit", ["category_theory", "over", "construct_products"]], ["add", "def", "over_binary_product_of_pullback", ["category_theory", "over", "construct_products"]], ["add", "def", "over_finite_products_of_finite_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["add", "def", "over_product_of_wide_pullback", ["category_theory", "over", "construct_products"]], ["add", "def", "over_products_of_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["add", "def", "wide_pullback_diagram_of_diagram_over", ["category_theory", "over", "construct_products"]], ["add", "def", "over_has_terminal", ["category_theory", "over"]]]}]}, {"timestamp": 1594726938, "sha": "0fff477d", "message": "feat(analysis/normed_space): complex Hahn-Banach theorem (#3286)\nThis proves the complex Hahn-Banach theorem by reducing it to the real version.\nThe corollaries from #3021 should be generalized as well at some point.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/extend.lean", "changes": [["add", "theorem", "norm_bound", []]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["add", "theorem", "exists_extension_norm_eq", ["complex"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "I_mul", ["complex"]], ["add", "theorem", "abs_ne_zero", ["complex"]], ["add", "theorem", "of_real_smul", ["complex"]]]}]}, {"timestamp": 1594724758, "sha": "5f01b544", "message": "feat(category_theory/kernels): kernel_iso_of_eq (#3372)\nThis provides two useful isomorphisms when working with abstract (co)kernels:\n```\ndef kernel_zero_iso_source [has_kernel (0 : X ⟶ Y)] : kernel (0 : X ⟶ Y) ≅ X :=\ndef kernel_iso_of_eq {f g : X ⟶ Y} [has_kernel f] [has_kernel g] (h : f = g) : kernel f ≅ kernel g :=\n```\nand some associated simp lemmas.", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["del", "theorem", "iso_of_nat_iso_hom_π", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "iso_of_nat_iso_ι_hom", ["category_theory", "limits", "has_colimit"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "iso_target_of_self", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "iso_target_of_self_hom", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "iso_target_of_self_inv", ["category_theory", "limits", "coequalizer"]], ["del", "def", "π_of_self", ["category_theory", "limits", "coequalizer"]], ["add", "def", "iso_source_of_self", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "iso_source_of_self_hom", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "iso_source_of_self_inv", ["category_theory", "limits", "equalizer"]], ["del", "def", "ι_of_self", ["category_theory", "limits", "equalizer"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "cokernel_iso_of_eq", ["category_theory", "limits"]], ["add", "theorem", "cokernel_iso_of_eq_refl", ["category_theory", "limits"]], ["add", "theorem", "cokernel_iso_of_eq_trans", ["category_theory", "limits"]], ["add", "def", "cokernel_zero_iso_target", ["category_theory", "limits"]], ["add", "theorem", "cokernel_zero_iso_target_hom", ["category_theory", "limits"]], ["add", "theorem", "cokernel_zero_iso_target_inv", ["category_theory", "limits"]], ["add", "def", "kernel_iso_of_eq", ["category_theory", "limits"]], ["add", "theorem", "kernel_iso_of_eq_refl", ["category_theory", "limits"]], ["add", "theorem", "kernel_iso_of_eq_trans", ["category_theory", "limits"]], ["add", "def", "kernel_zero_iso_source", ["category_theory", "limits"]], ["add", "theorem", "kernel_zero_iso_source_hom", ["category_theory", "limits"]], ["add", "theorem", "kernel_zero_iso_source_inv", ["category_theory", "limits"]]]}]}, {"timestamp": 1594717277, "sha": "58dde5b8", "message": "chore(*): generalize tensor product to semirings (#3389)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "inductive", "eqv", ["tensor_product"]], ["del", "theorem", "add", ["tensor_product", "lift_aux"]], ["mod", "theorem", "smul", ["tensor_product", "lift_aux"]], ["mod", "def", "lift_aux", ["tensor_product"]], ["add", "theorem", "lift_aux_tmul", ["tensor_product"]], ["del", "def", "relators", ["tensor_product"]], ["mod", "def", "aux", ["tensor_product", "smul"]], ["add", "theorem", "aux_of", ["tensor_product", "smul"]], ["add", "theorem", "smul_tmul'", ["tensor_product"]], ["mod", "def", "tmul", ["tensor_product"]], ["mod", "theorem", "tmul_zero", ["tensor_product"]], ["mod", "theorem", "zero_tmul", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1594689926, "sha": "04109461", "message": "chore(linear_algebra/nonsingular_inverse): swap update_row/column names (#3393)\nThe names for `update_row` and `update_column` did not correspond to their definitions. Doing a global swap of the names keep all the proofs valid and makes the semantics match.", "changes": [{"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["mod", "theorem", "cramer_apply", ["matrix"]], ["mod", "def", "cramer_map", ["matrix"]], ["mod", "def", "update_column", ["matrix"]], ["mod", "theorem", "update_column_ne", ["matrix"]], ["mod", "theorem", "update_column_self", ["matrix"]], ["del", "theorem", "update_column_transpose", ["matrix"]], ["mod", "theorem", "update_column_val", ["matrix"]], ["mod", "def", "update_row", ["matrix"]], ["mod", "theorem", "update_row_ne", ["matrix"]], ["mod", "theorem", "update_row_self", ["matrix"]], ["add", "theorem", "update_row_transpose", ["matrix"]], ["mod", "theorem", "update_row_val", ["matrix"]]]}]}, {"timestamp": 1594673877, "sha": "32c75d01", "message": "feat(linear_algebra/affine_space): more lemmas on directions of affine subspaces (#3377)\nAdd more lemmas on directions of affine subspaces, motivated by uses\nfor Euclidean geometry.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "coe_direction_eq_vsub_set_left", ["affine_subspace"]], ["add", "theorem", "coe_direction_eq_vsub_set_right", ["affine_subspace"]], ["add", "theorem", "direction_le", ["affine_subspace"]], ["add", "theorem", "direction_lt_of_nonempty", ["affine_subspace"]], ["add", "theorem", "inter_eq_singleton_of_nonempty_of_is_compl", ["affine_subspace"]], ["add", "theorem", "inter_nonempty_of_nonempty_of_sup_direction_eq_top", ["affine_subspace"]], ["add", "theorem", "mem_direction_iff_eq_vsub_left", ["affine_subspace"]], ["add", "theorem", "mem_direction_iff_eq_vsub_right", ["affine_subspace"]], ["add", "theorem", "sup_direction_le", ["affine_subspace"]], ["add", "theorem", "sup_direction_lt_of_nonempty_of_inter_empty", ["affine_subspace"]], ["add", "theorem", "vsub_left_mem_direction_iff_mem", ["affine_subspace"]], ["add", "theorem", "vsub_right_mem_direction_iff_mem", ["affine_subspace"]]]}]}, {"timestamp": 1594670555, "sha": "11322372", "message": "feat(ring_theory/ideal_over): lemmas for nonzero ideals lying over nonzero ideals (#3385)\nLet `f` be a ring homomorphism from `R` to `S` and `I` be an ideal in `S`. To show that `I.comap f` is not the zero ideal, we can show `I` contains a non-zero root of some non-zero polynomial `p : polynomial R`. As a corollary, if `S` is algebraic over `R` (e.g. the integral closure of `R`), nonzero ideals in `S` lie over nonzero ideals in `R`.\nI created a new file because `integral_closure.comap_ne_bot` depends on `comap_ne_bot_of_algebraic_mem`, but `ring_theory/algebraic.lean` imports `ring_theory/integral_closure.lean` and I didn't see any obvious join in the dependency graph where they both belonged.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/ideal_over.lean", "changes": [["add", "theorem", "coeff_zero_mem_comap_of_root_mem", ["ideal"]], ["add", "theorem", "comap_ne_bot_of_algebraic_mem", ["ideal"]], ["add", "theorem", "comap_ne_bot_of_integral_mem", ["ideal"]], ["add", "theorem", "comap_ne_bot_of_root_mem", ["ideal"]], ["add", "theorem", "exists_coeff_ne_zero_mem_comap_of_root_mem", ["ideal"]], ["add", "theorem", "comap_ne_bot", ["ideal", "integral_closure"]], ["add", "theorem", "eq_bot_of_comap_eq_bot", ["ideal", "integral_closure"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral", ["integral_closure"]]]}]}, {"timestamp": 1594668916, "sha": "45477c8f", "message": "feat(analysis/normed_space/real_inner_product): orthogonal subspaces (#3369)\nDefine the subspace of vectors orthogonal to a given subspace and\nprove some basic properties of it, building on the existing results\nabout minimizers. This is in preparation for doing similar things in\nEuclidean geometry (working with the affine subspace through a given\npoint and orthogonal to a given affine subspace, for example).", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "inner_left_of_mem_orthogonal", ["submodule"]], ["add", "theorem", "inner_right_of_mem_orthogonal", ["submodule"]], ["add", "theorem", "is_compl_orthogonal_of_is_complete", ["submodule"]], ["add", "theorem", "le_orthogonal_orthogonal", ["submodule"]], ["add", "theorem", "mem_orthogonal'", ["submodule"]], ["add", "theorem", "mem_orthogonal", ["submodule"]], ["add", "def", "orthogonal", ["submodule"]], ["add", "theorem", "orthogonal_disjoint", ["submodule"]], ["add", "theorem", "sup_orthogonal_of_is_complete", ["submodule"]]]}]}, {"timestamp": 1594666861, "sha": "2ae7ad81", "message": "feat(functor): definition multivariate functors (#3360)\nOne part of #3317", "changes": [{"oldPath": null, "newPath": "src/control/functor/multivariate.lean", "changes": [["add", "theorem", "exists_iff_exists_of_mono", ["mvfunctor"]], ["add", "theorem", "id_map'", ["mvfunctor"]], ["add", "theorem", "id_map", ["mvfunctor"]], ["add", "def", "liftp'", ["mvfunctor"]], ["add", "def", "liftp", ["mvfunctor"]], ["add", "theorem", "liftp_def", ["mvfunctor"]], ["add", "theorem", "liftp_last_pred_iff", ["mvfunctor"]], ["add", "def", "liftr'", ["mvfunctor"]], ["add", "def", "liftr", ["mvfunctor"]], ["add", "theorem", "liftr_def", ["mvfunctor"]], ["add", "theorem", "liftr_last_rel_iff", ["mvfunctor"]], ["add", "theorem", "map_map", ["mvfunctor"]], ["add", "theorem", "of_mem_supp", ["mvfunctor"]], ["add", "def", "supp", ["mvfunctor"]]]}, {"oldPath": null, "newPath": "src/data/fin2.lean", "changes": [["add", "def", "add", ["fin2"]], ["add", "def", "elim0", ["fin2"]], ["add", "def", "insert_perm", ["fin2"]], ["add", "def", "left", ["fin2"]], ["add", "def", "of_nat'", ["fin2"]], ["add", "def", "opt_of_nat", ["fin2"]], ["add", "def", "remap_left", ["fin2"]], ["add", "def", "to_nat", ["fin2"]], ["add", "inductive", "fin2", []]]}, {"oldPath": null, "newPath": "src/data/typevec.lean", "changes": [["add", "def", "append1", ["typevec"]], ["add", "def", "append1_cases", ["typevec"]], ["add", "theorem", "append1_cases_append1", ["typevec"]], ["add", "theorem", "append1_drop_last", ["typevec"]], ["add", "def", "append_fun", ["typevec"]], ["add", "theorem", "append_fun_aux", ["typevec"]], ["add", "theorem", "append_fun_comp'", ["typevec"]], ["add", "theorem", "append_fun_comp", ["typevec"]], ["add", "theorem", "append_fun_comp_id", ["typevec"]], ["add", "theorem", "append_fun_comp_split_fun", ["typevec"]], ["add", "theorem", "append_fun_id_id", ["typevec"]], ["add", "theorem", "append_fun_inj", ["typevec"]], ["add", "theorem", "append_prod_append_fun", ["typevec"]], ["add", "def", "mp", ["typevec", "arrow"]], ["add", "def", "mpr", ["typevec", "arrow"]], ["add", "def", "arrow", ["typevec"]], ["add", "def", "comp", ["typevec"]], ["add", "theorem", "comp_assoc", ["typevec"]], ["add", "theorem", "comp_id", ["typevec"]], ["add", "theorem", "const_append1", ["typevec"]], ["add", "theorem", "const_iff_true", ["typevec"]], ["add", "theorem", "const_nil", ["typevec"]], ["add", "def", "curry", ["typevec"]], ["add", "def", "diag_sub", ["typevec"]], ["add", "theorem", "diag_sub_val", ["typevec"]], ["add", "def", "drop", ["typevec"]], ["add", "theorem", "drop_append1'", ["typevec"]], ["add", "theorem", "drop_append1", ["typevec"]], ["add", "def", "drop_fun", ["typevec"]], ["add", "theorem", "drop_fun_append_fun", ["typevec"]], ["add", "theorem", "drop_fun_comp", ["typevec"]], ["add", "theorem", "drop_fun_split_fun", ["typevec"]], ["add", "def", "drop_repeat", ["typevec"]], ["add", "theorem", "eq_nil_fun", ["typevec"]], ["add", "theorem", "eq_of_drop_last_eq", ["typevec"]], ["add", "theorem", "fst_diag", ["typevec"]], ["add", "theorem", "fst_prod_mk", ["typevec"]], ["add", "def", "id", ["typevec"]], ["add", "theorem", "id_comp", ["typevec"]], ["add", "theorem", "id_eq_nil_fun", ["typevec"]], ["add", "def", "last", ["typevec"]], ["add", "theorem", "last_append1", ["typevec"]], ["add", "def", "last_fun", ["typevec"]], ["add", "theorem", "last_fun_append_fun", ["typevec"]], ["add", "theorem", "last_fun_comp", ["typevec"]], ["add", "theorem", "last_fun_split_fun", ["typevec"]], ["add", "def", "nil_fun", ["typevec"]], ["add", "theorem", "nil_fun_comp", ["typevec"]], ["add", "def", "of_repeat", ["typevec"]], ["add", "def", "of_subtype'", ["typevec"]], ["add", "def", "of_subtype", ["typevec"]], ["add", "def", "pred_last'", ["typevec"]], ["add", "def", "pred_last", ["typevec"]], ["add", "def", "diag", ["typevec", "prod"]], ["add", "def", "fst", ["typevec", "prod"]], ["add", "def", "mk", ["typevec", "prod"]], ["add", "def", "snd", ["typevec", "prod"]], ["add", "def", "prod", ["typevec"]], ["add", "theorem", "prod_id", ["typevec"]], ["add", "def", "rel_last'", ["typevec"]], ["add", "def", "rel_last", ["typevec"]], ["add", "def", "repeat", ["typevec"]], ["add", "def", "repeat_eq", ["typevec"]], ["add", "theorem", "repeat_eq_append1", ["typevec"]], ["add", "theorem", "repeat_eq_iff_eq", ["typevec"]], ["add", "theorem", "repeat_eq_nil", ["typevec"]], ["add", "theorem", "snd_diag", ["typevec"]], ["add", "theorem", "snd_prod_mk", ["typevec"]], ["add", "theorem", "split_drop_fun_last_fun", ["typevec"]], ["add", "def", "split_fun", ["typevec"]], ["add", "theorem", "split_fun_comp", ["typevec"]], ["add", "theorem", "split_fun_inj", ["typevec"]], ["add", "def", "subtype_", ["typevec"]], ["add", "def", "subtype_val", ["typevec"]], ["add", "theorem", "subtype_val_nil", ["typevec"]], ["add", "def", "to_append1_drop_last", ["typevec"]], ["add", "def", "to_subtype'", ["typevec"]], ["add", "def", "to_subtype", ["typevec"]], ["add", "def", "typevec_cases_cons₂", ["typevec"]], ["add", "theorem", "typevec_cases_cons₂_append_fun", ["typevec"]], ["add", "def", "typevec_cases_cons₃", ["typevec"]], ["add", "def", "typevec_cases_nil₂", ["typevec"]], ["add", "theorem", "typevec_cases_nil₂_append_fun", ["typevec"]], ["add", "def", "typevec_cases_nil₃", ["typevec"]], ["add", "def", "typevec", []]]}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": [["del", "def", "add", ["fin2"]], ["del", "def", "elim0", ["fin2"]], ["del", "def", "insert_perm", ["fin2"]], ["del", "def", "left", ["fin2"]], ["del", "def", "of_nat'", ["fin2"]], ["del", "def", "opt_of_nat", ["fin2"]], ["del", "def", "remap_left", ["fin2"]], ["del", "def", "to_nat", ["fin2"]], ["del", "inductive", "fin2", []]]}]}, {"timestamp": 1594643831, "sha": "f0348994", "message": "feat(data/equiv/mul_add): conj as a mul_aut (#3367)", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "inv_def", ["add_aut"]], ["add", "theorem", "mul_apply", ["add_aut"]], ["add", "theorem", "mul_def", ["add_aut"]], ["add", "theorem", "one_apply", ["add_aut"]], ["add", "theorem", "one_def", ["add_aut"]], ["add", "def", "conj", ["mul_aut"]], ["add", "theorem", "conj_apply", ["mul_aut"]], ["add", "theorem", "conj_symm_apply", ["mul_aut"]], ["add", "theorem", "inv_def", ["mul_aut"]], ["add", "theorem", "mul_apply", ["mul_aut"]], ["add", "theorem", "mul_def", ["mul_aut"]], ["add", "theorem", "one_apply", ["mul_aut"]], ["add", "theorem", "one_def", ["mul_aut"]]]}, {"oldPath": "src/group_theory/semidirect_product.lean", "newPath": "src/group_theory/semidirect_product.lean", "changes": []}]}, {"timestamp": 1594633582, "sha": "e26b459d", "message": "feat(data/polynomial): some lemmas about eval2 and algebra_map (#3382)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "C_eq_algebra_map", ["polynomial"]], ["add", "theorem", "alg_hom_eval₂_algebra_map", ["polynomial"]], ["add", "theorem", "eval₂_algebra_map_X", ["polynomial"]], ["add", "theorem", "eval₂_algebra_map_int_X", ["polynomial"]], ["add", "theorem", "ring_hom_eval₂_algebra_map_int", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "algebra_ext", ["algebra"]], ["add", "def", "to_int_alg_hom", ["ring_hom"]]]}]}, {"timestamp": 1594628238, "sha": "792faaed", "message": "chore(data/polynomial): missing a simp attribute (#3381)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1594628236, "sha": "afa534cd", "message": "chore(tactic/show_term): use Try this: (#3374)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/show_term.lean", "newPath": "src/tactic/show_term.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1594596542, "sha": "eb851ae2", "message": "chore(data/nat/prime): @[pp_nodot] nat.prime (#3379)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1594549935, "sha": "a8d6bdf6", "message": "feat(algebra/category/AddCommGroup): has_image_maps (#3366)", "changes": [{"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": [["add", "theorem", "image_map", ["AddCommGroup"]]]}, {"oldPath": "src/category_theory/arrow.lean", "newPath": "src/category_theory/arrow.lean", "changes": [["add", "def", "map_arrow", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "image_map", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1594544554, "sha": "fa6c45a8", "message": "feat(data/polynomial): simp lemmas for bit0 / bit1 (#3376)\nAdd lemmas on polynomials and bit0/bit1 (as suggested [here](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Eval.20of.20constant.20polynomial))", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "C_bit0", ["polynomial"]], ["add", "theorem", "C_bit1", ["polynomial"]], ["add", "theorem", "eval_bit0", ["polynomial"]], ["add", "theorem", "eval_bit1", ["polynomial"]], ["add", "theorem", "eval₂_bit0", ["polynomial"]], ["add", "theorem", "eval₂_bit1", ["polynomial"]]]}]}, {"timestamp": 1594539806, "sha": "4e603f4b", "message": "feat(geometry/manifold/charted_space): typeclass `closed_under_restriction` for structure groupoids (#3347)\n* Define a typeclass `closed_under_restriction` for structure groupoids.\n* Prove that it is equivalent to requiring that the structure groupoid contain all local homeomorphisms equivalent to the restriction of the identity to an open subset.\n* Verify that `continuous_groupoid` and `times_cont_diff_groupoid` satisfy `closed_under_restriction`. \n* Show that a charted space defined by a single chart is `has_groupoid` for any structure groupoid satisfying `closed_under_restriction`.\n[Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Restriction.20in.20structure.20groupoid)", "changes": [{"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "theorem", "closed_under_restriction_iff_id_le", []], ["add", "def", "id_restr_groupoid", []], ["add", "theorem", "id_restr_groupoid_mem", []], ["add", "def", "singleton_charted_space", []], ["add", "theorem", "singleton_charted_space_one_chart", []], ["add", "theorem", "singleton_has_groupoid", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "of_set_trans_of_set", ["local_homeomorph"]], ["add", "theorem", "of_set_univ_eq_refl", ["local_homeomorph"]]]}]}, {"timestamp": 1594530472, "sha": "0e1c2bc4", "message": "feat(algebra/add_torsor): more cancellation lemmas (#3368)\nAdd more cancellation lemmas for `vsub`, similar to lemmas already\npresent for `vadd`.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vsub_left_cancel", ["add_torsor"]], ["add", "theorem", "vsub_left_cancel_iff", ["add_torsor"]], ["add", "theorem", "vsub_right_cancel", ["add_torsor"]], ["add", "theorem", "vsub_right_cancel_iff", ["add_torsor"]]]}]}, {"timestamp": 1594525363, "sha": "b0473968", "message": "feat(data/set/finite): add a version of `prod_preimage` for `inj_on` (#3342)\n* rename `finset.prod_preimage` to `finset.prod_preimage_of_bij`;\n* new `prod_preimage` assumes `∀ x ∈ s, x ∉ range f, g x = 1`;\n* rename `finset.image_preimage` to `finset.image_preimage_of_bij`;\n* new `finset.image_preimage` says\n `image f (preimage s hf) = s.filter (λ x, x ∈ set.range f)`;\n* change the order of implicit arguments in the definition of `set.inj_on`;\n* add `prod_filter_of_ne`;\n* use `coe` instead of `subtype.val` in `prod_attach`;\n* add `finset.image_subset_iff`, `finset.image_subset_iff_subset_preimage`,\n `finset.map_subset_iff_subset_preimage`.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_attach", ["finset"]], ["add", "theorem", "prod_filter_of_ne", ["finset"]]]}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "theorem", "image_subset_iff", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "image_preimage", ["finset"]], ["add", "theorem", "image_preimage_of_bij", ["finset"]], ["add", "theorem", "image_subset_iff_subset_preimage", ["finset"]], ["add", "theorem", "map_subset_iff_subset_preimage", ["finset"]], ["add", "theorem", "prod_preimage_of_bij", ["finset"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "subset_range", ["set", "bij_on"]], ["add", "theorem", "subset_range", ["set", "surj_on"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "inv_fun_on_eq'", ["function"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1594514569, "sha": "298caa08", "message": "chore(scripts): update nolints.txt (#3370)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1594462271, "sha": "d7ac180f", "message": "feat(data/fintype/basic): set.to_finset_empty (#3361)\nAdd set.to_finset_empty, analogously to set.to_finset_univ.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "to_finset_empty", ["set"]]]}]}, {"timestamp": 1594462269, "sha": "34d3fe1d", "message": "chore(category_theory/comma): split into three files (#3358)\nJust reorganisation.", "changes": [{"oldPath": null, "newPath": "src/category_theory/arrow.lean", "changes": [["add", "def", "hom_mk'", ["category_theory", "arrow"]], ["add", "def", "hom_mk", ["category_theory", "arrow"]], ["add", "theorem", "id_left", ["category_theory", "arrow"]], ["add", "theorem", "id_right", ["category_theory", "arrow"]], ["add", "theorem", "fac_left", ["category_theory", "arrow", "lift"]], ["add", "theorem", "fac_right", ["category_theory", "arrow", "lift"]], ["add", "def", "lift", ["category_theory", "arrow"]], ["add", "theorem", "lift_mk'_left", ["category_theory", "arrow"]], ["add", "theorem", "lift_mk'_right", ["category_theory", "arrow"]], ["add", "def", "mk", ["category_theory", "arrow"]], ["add", "theorem", "w", ["category_theory", "arrow"]], ["add", "def", "arrow", ["category_theory"]]]}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["del", "def", "hom_mk'", ["category_theory", "arrow"]], ["del", "def", "hom_mk", ["category_theory", "arrow"]], ["del", "theorem", "id_left", ["category_theory", "arrow"]], ["del", "theorem", "id_right", ["category_theory", "arrow"]], ["del", "theorem", "fac_left", ["category_theory", "arrow", "lift"]], ["del", "theorem", "fac_right", ["category_theory", "arrow", "lift"]], ["del", "def", "lift", ["category_theory", "arrow"]], ["del", "theorem", "lift_mk'_left", ["category_theory", "arrow"]], ["del", "theorem", "lift_mk'_right", ["category_theory", "arrow"]], ["del", "def", "mk", ["category_theory", "arrow"]], ["del", "theorem", "w", ["category_theory", "arrow"]], ["del", "def", "arrow", ["category_theory"]], ["del", "theorem", "comp_left", ["category_theory", "over"]], ["del", "def", "forget", ["category_theory", "over"]], ["del", "theorem", "forget_map", ["category_theory", "over"]], ["del", "theorem", "forget_obj", ["category_theory", "over"]], ["del", "def", "hom_mk", ["category_theory", "over"]], ["del", "theorem", "id_left", ["category_theory", "over"]], ["del", "def", "iterated_slice_backward", ["category_theory", "over"]], ["del", "theorem", "iterated_slice_backward_forget_forget", ["category_theory", "over"]], ["del", "def", "iterated_slice_equiv", ["category_theory", "over"]], ["del", "def", "iterated_slice_forward", ["category_theory", "over"]], ["del", "theorem", "iterated_slice_forward_forget", ["category_theory", "over"]], ["del", "def", "map", ["category_theory", "over"]], ["del", "theorem", "map_map_left", ["category_theory", "over"]], ["del", "theorem", "map_obj_hom", ["category_theory", "over"]], ["del", "theorem", "map_obj_left", ["category_theory", "over"]], ["del", "def", "mk", ["category_theory", "over"]], ["del", "theorem", "mk_hom", ["category_theory", "over"]], ["del", "theorem", "mk_left", ["category_theory", "over"]], ["del", "theorem", "ext", ["category_theory", "over", "over_morphism"]], ["del", "theorem", "over_right", ["category_theory", "over"]], ["del", "def", "post", ["category_theory", "over"]], ["del", "theorem", "w", ["category_theory", "over"]], ["del", "def", "over", ["category_theory"]], ["del", "theorem", "comp_right", ["category_theory", "under"]], ["del", "def", "forget", ["category_theory", "under"]], ["del", "theorem", "forget_map", ["category_theory", "under"]], ["del", "theorem", "forget_obj", ["category_theory", "under"]], ["del", "def", "hom_mk", ["category_theory", "under"]], ["del", "theorem", "id_right", ["category_theory", "under"]], ["del", "def", "map", ["category_theory", "under"]], ["del", "theorem", "map_map_right", ["category_theory", "under"]], ["del", "theorem", "map_obj_hom", ["category_theory", "under"]], ["del", "theorem", "map_obj_right", ["category_theory", "under"]], ["del", "def", "mk", ["category_theory", "under"]], ["del", "def", "post", ["category_theory", "under"]], ["del", "theorem", "under_left", ["category_theory", "under"]], ["del", "theorem", "ext", ["category_theory", "under", "under_morphism"]], ["del", "theorem", "w", ["category_theory", "under"]], ["del", "def", "under", ["category_theory"]]]}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/over.lean", "changes": [["add", "theorem", "comp_left", ["category_theory", "over"]], ["add", "def", "forget", ["category_theory", "over"]], ["add", "theorem", "forget_map", ["category_theory", "over"]], ["add", "theorem", "forget_obj", ["category_theory", "over"]], ["add", "def", "hom_mk", ["category_theory", "over"]], ["add", "theorem", "id_left", ["category_theory", "over"]], ["add", "def", "iterated_slice_backward", ["category_theory", "over"]], ["add", "theorem", "iterated_slice_backward_forget_forget", ["category_theory", "over"]], ["add", "def", "iterated_slice_equiv", ["category_theory", "over"]], ["add", "def", "iterated_slice_forward", ["category_theory", "over"]], ["add", "theorem", "iterated_slice_forward_forget", ["category_theory", "over"]], ["add", "def", "map", ["category_theory", "over"]], ["add", "theorem", "map_map_left", ["category_theory", "over"]], ["add", "theorem", "map_obj_hom", ["category_theory", "over"]], ["add", "theorem", "map_obj_left", ["category_theory", "over"]], ["add", "def", "mk", ["category_theory", "over"]], ["add", "theorem", "mk_hom", ["category_theory", "over"]], ["add", "theorem", "mk_left", ["category_theory", "over"]], ["add", "theorem", "ext", ["category_theory", "over", "over_morphism"]], ["add", "theorem", "over_right", ["category_theory", "over"]], ["add", "def", "post", ["category_theory", "over"]], ["add", "theorem", "w", ["category_theory", "over"]], ["add", "def", "over", ["category_theory"]], ["add", "theorem", "comp_right", ["category_theory", "under"]], ["add", "def", "forget", ["category_theory", "under"]], ["add", "theorem", "forget_map", ["category_theory", "under"]], ["add", "theorem", "forget_obj", ["category_theory", "under"]], ["add", "def", "hom_mk", ["category_theory", "under"]], ["add", "theorem", "id_right", ["category_theory", "under"]], ["add", "def", "map", ["category_theory", "under"]], ["add", "theorem", "map_map_right", ["category_theory", "under"]], ["add", "theorem", "map_obj_hom", ["category_theory", "under"]], ["add", "theorem", "map_obj_right", ["category_theory", "under"]], ["add", "def", "mk", ["category_theory", "under"]], ["add", "def", "post", ["category_theory", "under"]], ["add", "theorem", "under_left", ["category_theory", "under"]], ["add", "theorem", "ext", ["category_theory", "under", "under_morphism"]], ["add", "theorem", "w", ["category_theory", "under"]], ["add", "def", "under", ["category_theory"]]]}]}, {"timestamp": 1594457020, "sha": "f742a3d6", "message": "refactor(tactic/push_neg): simp ¬ (p ∧ q) better (#3362)\nThis simplifies `¬ (p ∧ q)` to `(p → ¬ q)` instead of `¬ p ∨ ¬ q`. This has better behavior when going between `\\forall x, P -> Q` and `\\exists x, P /\\ Q'` where `Q` and `Q'` are opposite.", "changes": [{"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": [["mod", "theorem", "not_and_eq", ["push_neg"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1594457019, "sha": "36a25d9f", "message": "feat(algebra/category/*): get rid of the local reducible hack (#3354)\nI thought I did this back in April, but apparently never made the PR.\nWe currently use a strange hack when setting up concrete categories, making them locally reducible. There's a library note about this, which ends:\n```\nTODO: Probably @[derive] should be able to create instances of the\t\nrequired form (without `id`), and then we could use that instead of\t\nthis obscure `local attribute [reducible]` method.\n```\nThis PR makes the small change required to `delta_instance` to make this happen, and then stops using the hack in setting up concrete categories (and deletes the library note explaining this hack).", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": [["mod", "def", "Meas", []]]}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/delta_instance.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/fix_by_cases.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": [["mod", "def", "Top", []]]}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": [["mod", "def", "UniformSpace", []]]}]}, {"timestamp": 1594454336, "sha": "75b9cfa3", "message": "feat(category/has_shift): missing simp lemmas (#3365)", "changes": [{"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["add", "theorem", "shift_functor_map_apply", ["category_theory", "graded_object"]], ["add", "theorem", "shift_functor_obj_apply", ["category_theory", "graded_object"]]]}]}, {"timestamp": 1594454334, "sha": "f669a780", "message": "chore(category_theory/functor): explain how to type 𝟭 (#3364)", "changes": [{"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}]}, {"timestamp": 1594450033, "sha": "574dac55", "message": "feat(tactic/interval_cases): add `with h` option (#3353)\ncloses #2881", "changes": [{"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "test/interval_cases.lean", "newPath": "test/interval_cases.lean", "changes": []}]}, {"timestamp": 1594428105, "sha": "5ddbdc18", "message": "chore(scripts): update nolints.txt (#3363)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1594407706, "sha": "1aff3aff", "message": "feat(interactive_expr): bigger accomplishment (#3359)\nLean is difficult, we need more incentives.", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1594402522, "sha": "960fc8e3", "message": "feat(data/univariate/qpf): compositional data type framework for (co)inductive types (#3325)\nDefine univariate QPFs (quotients of polynomial functors). This is the first part of #3317.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/control/functor.lean", "newPath": "src/control/functor.lean", "changes": [["add", "def", "liftp", ["functor"]], ["add", "def", "liftr", ["functor"]], ["add", "theorem", "of_mem_supp", ["functor"]], ["add", "def", "supp", ["functor"]]]}, {"oldPath": null, "newPath": "src/data/pfunctor/univariate/M.lean", "changes": [["add", "theorem", "R_is_bisimulation", ["pfunctor", "M"]], ["add", "inductive", "agree'", ["pfunctor", "M"]], ["add", "theorem", "agree'_refl", ["pfunctor", "M"]], ["add", "theorem", "agree_iff_agree'", ["pfunctor", "M"]], ["add", "theorem", "approx_mk", ["pfunctor", "M"]], ["add", "theorem", "bisim'", ["pfunctor", "M"]], ["add", "theorem", "bisim", ["pfunctor", "M"]], ["add", "theorem", "bisim_equiv", ["pfunctor", "M"]], ["add", "theorem", "cases_mk", ["pfunctor", "M"]], ["add", "theorem", "cases_on_mk'", ["pfunctor", "M"]], ["add", "theorem", "cases_on_mk", ["pfunctor", "M"]], ["add", "def", "children", ["pfunctor", "M"]], ["add", "theorem", "children_mk", ["pfunctor", "M"]], ["add", "theorem", "coinduction'", ["pfunctor", "M"]], ["add", "theorem", "coinduction", ["pfunctor", "M"]], ["add", "def", "corec'", ["pfunctor", "M"]], ["add", "theorem", "corec_def", ["pfunctor", "M"]], ["add", "def", "corec_on", ["pfunctor", "M"]], ["add", "theorem", "corec_unique", ["pfunctor", "M"]], ["add", "def", "corec₁", ["pfunctor", "M"]], ["add", "theorem", "default_consistent", ["pfunctor", "M"]], ["add", "def", "dest", ["pfunctor", "M"]], ["add", "theorem", "dest_corec", ["pfunctor", "M"]], ["add", "theorem", "dest_mk", ["pfunctor", "M"]], ["add", "theorem", "eq_of_bisim", ["pfunctor", "M"]], ["add", "theorem", "ext'", ["pfunctor", "M"]], ["add", "theorem", "ext", ["pfunctor", "M"]], ["add", "theorem", "ext_aux", ["pfunctor", "M"]], ["add", "theorem", "head'_eq_head", ["pfunctor", "M"]], ["add", "def", "head", ["pfunctor", "M"]], ["add", "theorem", "head_eq_head'", ["pfunctor", "M"]], ["add", "theorem", "head_mk", ["pfunctor", "M"]], ["add", "theorem", "head_succ", ["pfunctor", "M"]], ["add", "def", "ichildren", ["pfunctor", "M"]], ["add", "theorem", "ichildren_mk", ["pfunctor", "M"]], ["add", "structure", "is_bisimulation", ["pfunctor", "M"]], ["add", "inductive", "is_path", ["pfunctor", "M"]], ["add", "theorem", "is_path_cons'", ["pfunctor", "M"]], ["add", "theorem", "is_path_cons", ["pfunctor", "M"]], ["add", "def", "iselect", ["pfunctor", "M"]], ["add", "theorem", "iselect_cons", ["pfunctor", "M"]], ["add", "theorem", "iselect_eq_default", ["pfunctor", "M"]], ["add", "theorem", "iselect_nil", ["pfunctor", "M"]], ["add", "def", "isubtree", ["pfunctor", "M"]], ["add", "theorem", "isubtree_cons", ["pfunctor", "M"]], ["add", "theorem", "mk_dest", ["pfunctor", "M"]], ["add", "theorem", "mk_inj", ["pfunctor", "M"]], ["add", "theorem", "nth_of_bisim", ["pfunctor", "M"]], ["add", "theorem", "truncate_approx", ["pfunctor", "M"]], ["add", "def", "M", ["pfunctor"]], ["add", "structure", "M_intl", ["pfunctor"]], ["add", "theorem", "P_corec", ["pfunctor", "approx"]], ["add", "inductive", "agree", ["pfunctor", "approx"]], ["add", "theorem", "agree_children", ["pfunctor", "approx"]], ["add", "theorem", "agree_trival", ["pfunctor", "approx"]], ["add", "def", "all_agree", ["pfunctor", "approx"]], ["add", "theorem", "approx_eta", ["pfunctor", "approx"]], ["add", "def", "children'", ["pfunctor", "approx"]], ["add", "inductive", "cofix_a", ["pfunctor", "approx"]], ["add", "theorem", "cofix_a_eq_zero", ["pfunctor", "approx"]], ["add", "def", "head'", ["pfunctor", "approx"]], ["add", "theorem", "head_succ'", ["pfunctor", "approx"]], ["add", "def", "path", ["pfunctor", "approx"]], ["add", "def", "s_corec", ["pfunctor", "approx"]], ["add", "def", "truncate", ["pfunctor", "approx"]], ["add", "theorem", "truncate_eq_of_agree", ["pfunctor", "approx"]]]}, {"oldPath": null, "newPath": "src/data/pfunctor/univariate/basic.lean", "changes": [["add", "def", "Idx", ["pfunctor"]], ["add", "def", "dest", ["pfunctor", "W"]], ["add", "theorem", "dest_mk", ["pfunctor", "W"]], ["add", "def", "mk", ["pfunctor", "W"]], ["add", "theorem", "mk_dest", ["pfunctor", "W"]], ["add", "def", "W", ["pfunctor"]], ["add", "def", "get", ["pfunctor", "comp"]], ["add", "def", "mk", ["pfunctor", "comp"]], ["add", "def", "comp", ["pfunctor"]], ["add", "theorem", "fst_map", ["pfunctor"]], ["add", "theorem", "iget_map", ["pfunctor"]], ["add", "theorem", "liftp_iff", ["pfunctor"]], ["add", "theorem", "liftr_iff", ["pfunctor"]], ["add", "def", "map", ["pfunctor"]], ["add", "def", "iget", ["pfunctor", "obj"]], ["add", "def", "obj", ["pfunctor"]], ["add", "structure", "pfunctor", []]]}, {"oldPath": null, "newPath": "src/data/pfunctor/univariate/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/qpf/univariate/basic.lean", "changes": [["add", "def", "Mcongr", ["qpf"]], ["add", "def", "W_setoid", ["qpf"]], ["add", "theorem", "abs'", ["qpf", "Wequiv"]], ["add", "theorem", "refl", ["qpf", "Wequiv"]], ["add", "theorem", "symm", ["qpf", "Wequiv"]], ["add", "inductive", "Wequiv", ["qpf"]], ["add", "def", "Wrepr", ["qpf"]], ["add", "theorem", "Wrepr_equiv", ["qpf"]], ["add", "theorem", "bisim'", ["qpf", "cofix"]], ["add", "theorem", "bisim", ["qpf", "cofix"]], ["add", "theorem", "bisim_rel", ["qpf", "cofix"]], ["add", "def", "corec", ["qpf", "cofix"]], ["add", "def", "dest", ["qpf", "cofix"]], ["add", "theorem", "dest_corec", ["qpf", "cofix"]], ["add", "def", "cofix", ["qpf"]], ["add", "def", "comp", ["qpf"]], ["add", "theorem", "comp_map", ["qpf"]], ["add", "def", "corecF", ["qpf"]], ["add", "theorem", "corecF_eq", ["qpf"]], ["add", "def", "dest", ["qpf", "fix"]], ["add", "theorem", "dest_mk", ["qpf", "fix"]], ["add", "theorem", "ind", ["qpf", "fix"]], ["add", "theorem", "ind_aux", ["qpf", "fix"]], ["add", "theorem", "ind_rec", ["qpf", "fix"]], ["add", "def", "mk", ["qpf", "fix"]], ["add", "theorem", "mk_dest", ["qpf", "fix"]], ["add", "def", "rec", ["qpf", "fix"]], ["add", "theorem", "rec_eq", ["qpf", "fix"]], ["add", "theorem", "rec_unique", ["qpf", "fix"]], ["add", "def", "fix", ["qpf"]], ["add", "def", "fix_to_W", ["qpf"]], ["add", "theorem", "has_good_supp_iff", ["qpf"]], ["add", "theorem", "id_map", ["qpf"]], ["add", "theorem", "is_lawful_functor", ["qpf"]], ["add", "def", "is_precongr", ["qpf"]], ["add", "def", "is_uniform", ["qpf"]], ["add", "theorem", "liftp_iff'", ["qpf"]], ["add", "theorem", "liftp_iff", ["qpf"]], ["add", "theorem", "liftp_iff_of_is_uniform", ["qpf"]], ["add", "theorem", "liftr_iff", ["qpf"]], ["add", "theorem", "mem_supp", ["qpf"]], ["add", "def", "quotient_qpf", ["qpf"]], ["add", "def", "recF", ["qpf"]], ["add", "theorem", "recF_eq'", ["qpf"]], ["add", "theorem", "recF_eq", ["qpf"]], ["add", "theorem", "recF_eq_of_Wequiv", ["qpf"]], ["add", "theorem", "supp_eq", ["qpf"]], ["add", "theorem", "supp_eq_of_is_uniform", ["qpf"]], ["add", "theorem", "supp_map", ["qpf"]]]}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["add", "def", "factor", ["quot"]], ["add", "theorem", "factor_mk_eq", ["quot"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "ext", []]]}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": null, "newPath": "test/qpf.lean", "changes": [["add", "theorem", "R", ["ex", "equivalence_foo"]], ["add", "def", "R", ["ex", "foo"]], ["add", "def", "map", ["ex", "foo"]], ["add", "theorem", "map_mk'", ["ex", "foo"]], ["add", "theorem", "map_mk", ["ex", "foo"]], ["add", "theorem", "map_tt", ["ex", "foo"]], ["add", "def", "mk", ["ex", "foo"]], ["add", "def", "foo", ["ex"]], ["add", "theorem", "foo_not_uniform", ["ex"]], ["add", "def", "pfunctor", ["ex", "prod"]], ["add", "theorem", "supp_mk_ff'", ["ex"]], ["add", "theorem", "supp_mk_ff₀", ["ex"]], ["add", "theorem", "supp_mk_ff₁", ["ex"]], ["add", "theorem", "supp_mk_tt'", ["ex"]], ["add", "theorem", "supp_mk_tt", ["ex"]], ["add", "def", "box", ["qpf"]], ["add", "def", "liftp'", ["qpf"]], ["add", "def", "supp'", ["qpf"]]]}]}, {"timestamp": 1594384126, "sha": "d1e63f39", "message": "chore(category_theory/limits): remove an unnecessary import (#3357)", "changes": [{"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}]}, {"timestamp": 1594384120, "sha": "699c9153", "message": "feat(number_theory): pythagorean triples (#3200)\nThe classification of pythagorean triples (one of the \"100 theorems\")", "changes": [{"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": [["add", "theorem", "exists_gcd_one'", ["int"]], ["add", "theorem", "exists_gcd_one", ["int"]], ["add", "theorem", "gcd_div_gcd_div_gcd", ["int"]], ["add", "theorem", "ne_zero_of_gcd", ["int"]], ["add", "theorem", "pow_dvd_pow_iff", ["int"]], ["add", "theorem", "dvd_mul'", ["int", "prime"]], ["add", "theorem", "dvd_mul", ["int", "prime"]], ["add", "theorem", "prime_two_or_dvd_of_dvd_two_mul_pow_self_two", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "eq_or_eq_neg_of_pow_two_eq_pow_two", []], ["add", "theorem", "pow_dvd_pow_of_dvd", []], ["add", "theorem", "pow_two_pos_of_ne_zero", []], ["add", "theorem", "pow_two_sub_pow_two", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "sub_mod", ["int"]]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["add", "theorem", "dvd_nat_abs_of_coe_dvd_pow_two", ["int", "prime"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "not_coprime_iff_dvd", ["nat", "prime"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "denom_div_eq_of_coprime", ["rat"]], ["add", "theorem", "div_int_inj", ["rat"]], ["add", "theorem", "num_div_eq_of_coprime", ["rat"]]]}, {"oldPath": null, "newPath": "src/number_theory/pythagorean_triples.lean", "changes": [["add", "theorem", "circle_equiv_apply", []], ["add", "def", "circle_equiv_gen", []], ["add", "theorem", "circle_equiv_symm_apply", []], ["add", "theorem", "classification", ["pythagorean_triple"]], ["add", "theorem", "classified", ["pythagorean_triple"]], ["add", "theorem", "coprime_classification", ["pythagorean_triple"]], ["add", "theorem", "coprime_of_coprime", ["pythagorean_triple"]], ["add", "theorem", "eq", ["pythagorean_triple"]], ["add", "theorem", "even_odd_of_coprime", ["pythagorean_triple"]], ["add", "theorem", "gcd_dvd", ["pythagorean_triple"]], ["add", "def", "is_classified", ["pythagorean_triple"]], ["add", "theorem", "is_classified_of_is_primitive_classified", ["pythagorean_triple"]], ["add", "theorem", "is_classified_of_normalize_is_primitive_classified", ["pythagorean_triple"]], ["add", "def", "is_primitive_classified", ["pythagorean_triple"]], ["add", "theorem", "is_primitive_classified_aux", ["pythagorean_triple"]], ["add", "theorem", "is_primitive_classified_of_coprime", ["pythagorean_triple"]], ["add", "theorem", "is_primitive_classified_of_coprime_of_odd_of_pos", ["pythagorean_triple"]], ["add", "theorem", "is_primitive_classified_of_coprime_of_pos", ["pythagorean_triple"]], ["add", "theorem", "is_primitive_classified_of_coprime_of_zero_left", ["pythagorean_triple"]], ["add", "theorem", "mul", ["pythagorean_triple"]], ["add", "theorem", "mul_iff", ["pythagorean_triple"]], ["add", "theorem", "mul_is_classified", ["pythagorean_triple"]], ["add", "theorem", "ne_zero_of_coprime", ["pythagorean_triple"]], ["add", "theorem", "normalize", ["pythagorean_triple"]], ["add", "theorem", "symm", ["pythagorean_triple"]], ["add", "theorem", "zero", ["pythagorean_triple"]], ["add", "def", "pythagorean_triple", []], ["add", "theorem", "pythagorean_triple_comm", []]]}]}, {"timestamp": 1594379729, "sha": "e52108d7", "message": "chore(data/int/basic): move content requiring advanced imports (#3334)\n`data.int.basic` had grown to require substantial imports from `algebra.*`. This PR moves out the end of this file into separate files. As a consequence it's then possible to separate out `data.multiset.basic` into some further pieces.", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["del", "theorem", "eq_int_cast", ["add_monoid_hom"]], ["del", "theorem", "eq_int_cast_hom", ["add_monoid_hom"]], ["del", "theorem", "ext_int", ["add_monoid_hom"]], ["del", "theorem", "cast_abs", ["int"]], ["del", "theorem", "cast_add", ["int"]], ["del", "def", "cast_add_hom", ["int"]], ["del", "theorem", "cast_bit0", ["int"]], ["del", "theorem", "cast_bit1", ["int"]], ["del", "theorem", "cast_coe_nat'", ["int"]], ["del", "theorem", "cast_coe_nat", ["int"]], ["del", "theorem", "cast_commute", ["int"]], ["del", "theorem", "cast_eq_zero", ["int"]], ["del", "theorem", "cast_id", ["int"]], ["del", "theorem", "cast_inj", ["int"]], ["del", "theorem", "cast_injective", ["int"]], ["del", "theorem", "cast_le", ["int"]], ["del", "theorem", "cast_lt", ["int"]], ["del", "theorem", "cast_lt_zero", ["int"]], ["del", "theorem", "cast_max", ["int"]], ["del", "theorem", "cast_min", ["int"]], ["del", "theorem", "cast_mul", ["int"]], ["del", "theorem", "cast_ne_zero", ["int"]], ["del", "theorem", "cast_neg", ["int"]], ["del", "theorem", "cast_neg_of_nat", ["int"]], ["del", "theorem", "cast_neg_succ_of_nat", ["int"]], ["del", "theorem", "cast_nonneg", ["int"]], ["del", "theorem", "cast_nonpos", ["int"]], ["del", "theorem", "cast_of_nat", ["int"]], ["del", "theorem", "cast_one", ["int"]], ["del", "theorem", "cast_pos", ["int"]], ["del", "def", "cast_ring_hom", ["int"]], ["del", "theorem", "cast_sub", ["int"]], ["del", "theorem", "cast_sub_nat_nat", ["int"]], ["del", "theorem", "cast_two", ["int"]], ["del", "theorem", "cast_zero", ["int"]], ["del", "theorem", "coe_cast_add_hom", ["int"]], ["del", "theorem", "coe_cast_ring_hom", ["int"]], ["del", "theorem", "coe_nat_bit0", ["int"]], ["del", "theorem", "coe_nat_bit1", ["int"]], ["del", "theorem", "commute_cast", ["int"]], ["del", "theorem", "mem_range_iff", ["int"]], ["del", "theorem", "nat_cast_eq_coe_nat", ["int"]], ["del", "def", "of_nat_hom", ["int"]], ["del", "def", "range", ["int"]], ["del", "theorem", "eq_int_cast'", ["ring_hom"]], ["del", "theorem", "eq_int_cast", ["ring_hom"]], ["del", "theorem", "ext_int", ["ring_hom"]], ["del", "theorem", "map_int_cast", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/data/int/cast.lean", "changes": [["add", "theorem", "eq_int_cast", ["add_monoid_hom"]], ["add", "theorem", "eq_int_cast_hom", ["add_monoid_hom"]], ["add", "theorem", "ext_int", ["add_monoid_hom"]], ["add", "theorem", "cast_abs", ["int"]], ["add", "theorem", "cast_add", ["int"]], ["add", "def", "cast_add_hom", ["int"]], ["add", "theorem", "cast_bit0", ["int"]], ["add", "theorem", "cast_bit1", ["int"]], ["add", "theorem", "cast_coe_nat'", ["int"]], ["add", "theorem", "cast_coe_nat", ["int"]], ["add", "theorem", "cast_commute", ["int"]], ["add", "theorem", "cast_id", ["int"]], ["add", "theorem", "cast_le", ["int"]], ["add", "theorem", "cast_lt", ["int"]], ["add", "theorem", "cast_lt_zero", ["int"]], ["add", "theorem", "cast_max", ["int"]], ["add", "theorem", "cast_min", ["int"]], ["add", "theorem", "cast_mul", ["int"]], ["add", "theorem", "cast_neg", ["int"]], ["add", "theorem", "cast_neg_of_nat", ["int"]], ["add", "theorem", "cast_neg_succ_of_nat", ["int"]], ["add", "theorem", "cast_nonneg", ["int"]], ["add", "theorem", "cast_nonpos", ["int"]], ["add", "theorem", "cast_of_nat", ["int"]], ["add", "theorem", "cast_one", ["int"]], ["add", "theorem", "cast_pos", ["int"]], ["add", "def", "cast_ring_hom", ["int"]], ["add", "theorem", "cast_sub", ["int"]], ["add", "theorem", "cast_sub_nat_nat", ["int"]], ["add", "theorem", "cast_two", ["int"]], ["add", "theorem", "cast_zero", ["int"]], ["add", "theorem", "coe_cast_add_hom", ["int"]], ["add", "theorem", "coe_cast_ring_hom", ["int"]], ["add", "theorem", "coe_nat_bit0", ["int"]], ["add", "theorem", "coe_nat_bit1", ["int"]], ["add", "theorem", "commute_cast", ["int"]], ["add", "theorem", "nat_cast_eq_coe_nat", ["int"]], ["add", "def", "of_nat_hom", ["int"]], ["add", "theorem", "eq_int_cast'", ["ring_hom"]], ["add", "theorem", "eq_int_cast", ["ring_hom"]], ["add", "theorem", "ext_int", ["ring_hom"]], ["add", "theorem", "map_int_cast", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/data/int/char_zero.lean", "changes": [["add", "theorem", "cast_eq_zero", ["int"]], ["add", "theorem", "cast_inj", ["int"]], ["add", "theorem", "cast_injective", ["int"]], ["add", "theorem", "cast_ne_zero", ["int"]]]}, {"oldPath": null, "newPath": "src/data/int/range.lean", "changes": [["add", "theorem", "mem_range_iff", ["int"]], ["add", "def", "range", ["int"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "card_range", ["multiset"]], ["del", "theorem", "mem_range", ["multiset"]], ["del", "theorem", "not_mem_range_self", ["multiset"]], ["del", "def", "range", ["multiset"]], ["del", "theorem", "range_subset", ["multiset"]], ["del", "theorem", "range_succ", ["multiset"]], ["del", "theorem", "range_zero", ["multiset"]], ["del", "theorem", "self_mem_range_succ", ["multiset"]]]}, {"oldPath": "src/data/multiset/nodup.lean", "newPath": "src/data/multiset/nodup.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/multiset/range.lean", "changes": [["add", "theorem", "card_range", ["multiset"]], ["add", "theorem", "mem_range", ["multiset"]], ["add", "theorem", "not_mem_range_self", ["multiset"]], ["add", "def", "range", ["multiset"]], ["add", "theorem", "range_subset", ["multiset"]], ["add", "theorem", "range_succ", ["multiset"]], ["add", "theorem", "range_zero", ["multiset"]], ["add", "theorem", "self_mem_range_succ", ["multiset"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["mod", "theorem", "coe_int_inj", ["rat"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/zify.lean", "newPath": "src/tactic/zify.lean", "changes": []}, {"oldPath": "test/norm_cast_int.lean", "newPath": "test/norm_cast_int.lean", "changes": []}]}, {"timestamp": 1594377329, "sha": "a348944f", "message": "chore(topology): rename compact to is_compact (#3356)", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": [["mod", "theorem", "compact_std_simplex", []]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["mod", "theorem", "volume_lt_top_of_compact", ["real"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "compact_covered_by_mul_left_translates", []], ["mod", "theorem", "compact_open_separated_mul", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["del", "theorem", "Inf_mem", ["compact"]], ["del", "theorem", "Sup_mem", ["compact"]], ["del", "theorem", "bdd_above", ["compact"]], ["del", "theorem", "bdd_below", ["compact"]], ["del", "theorem", "exists_Inf_image_eq", ["compact"]], ["del", "theorem", "exists_Sup_image_eq", ["compact"]], ["del", "theorem", "exists_forall_ge", ["compact"]], ["del", "theorem", "exists_forall_le", ["compact"]], ["del", "theorem", "exists_is_glb", ["compact"]], ["del", "theorem", "exists_is_greatest", ["compact"]], ["del", "theorem", "exists_is_least", ["compact"]], ["del", "theorem", "exists_is_lub", ["compact"]], ["del", "theorem", "is_glb_Inf", ["compact"]], ["del", "theorem", "is_greatest_Sup", ["compact"]], ["del", "theorem", "is_least_Inf", ["compact"]], ["del", "theorem", "is_lub_Sup", ["compact"]], ["mod", "theorem", "eq_Icc_of_connected_compact", []], ["add", "theorem", "Inf_mem", ["is_compact"]], ["add", "theorem", "Sup_mem", ["is_compact"]], ["add", "theorem", "bdd_above", ["is_compact"]], ["add", "theorem", "bdd_below", ["is_compact"]], ["add", "theorem", "exists_Inf_image_eq", ["is_compact"]], ["add", "theorem", "exists_Sup_image_eq", ["is_compact"]], ["add", "theorem", "exists_forall_ge", ["is_compact"]], ["add", "theorem", "exists_forall_le", ["is_compact"]], ["add", "theorem", "exists_is_glb", ["is_compact"]], ["add", "theorem", "exists_is_greatest", ["is_compact"]], ["add", "theorem", "exists_is_least", ["is_compact"]], ["add", "theorem", "exists_is_lub", ["is_compact"]], ["add", "theorem", "is_glb_Inf", ["is_compact"]], ["add", "theorem", "is_greatest_Sup", ["is_compact"]], ["add", "theorem", "is_least_Inf", ["is_compact"]], ["add", "theorem", "is_lub_Sup", ["is_compact"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/compacts.lean", "newPath": "src/topology/compacts.lean", "changes": [["mod", "def", "compacts", ["topological_space"]], ["mod", "def", "nonempty_compacts", ["topological_space"]], ["mod", "def", "positive_compacts:", ["topological_space"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["mod", "theorem", "compact_image", ["homeomorph"]], ["mod", "theorem", "compact_preimage", ["homeomorph"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["mod", "theorem", "compact_Icc", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "bounded_of_compact", ["metric"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "countable_closure_of_compact", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "binary_compact_cover", ["compact"]], ["del", "theorem", "finite_compact_cover", ["compact"]], ["del", "theorem", "inter", ["compact"]], ["del", "theorem", "is_closed", ["compact"]], ["add", "theorem", "binary_compact_cover", ["is_compact"]], ["add", "theorem", "finite_compact_cover", ["is_compact"]], ["add", "theorem", "inter", ["is_compact"]], ["add", "theorem", "is_closed", ["is_compact"]], ["mod", "theorem", "locally_compact_of_compact_nhds", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["del", "theorem", "seq_compact", ["compact"]], ["del", "theorem", "tendsto_subseq'", ["compact"]], ["del", "theorem", "tendsto_subseq", ["compact"]], ["add", "theorem", "is_seq_compact", ["is_compact"]], ["add", "theorem", "tendsto_subseq'", ["is_compact"]], ["add", "theorem", "tendsto_subseq", ["is_compact"]], ["add", "theorem", "subseq_of_frequently_in", ["is_seq_compact"]], ["add", "theorem", "totally_bounded", ["is_seq_compact"]], ["add", "def", "is_seq_compact", []], ["mod", "theorem", "compact_iff_seq_compact", ["metric"]], ["del", "theorem", "subseq_of_frequently_in", ["seq_compact"]], ["del", "theorem", "totally_bounded", ["seq_compact"]], ["del", "def", "seq_compact", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "theorem", "adherence_nhdset", ["compact"]], ["del", "theorem", "elim_finite_subcover", ["compact"]], ["del", "theorem", "elim_finite_subcover_image", ["compact"]], ["del", "theorem", "elim_finite_subfamily_closed", ["compact"]], ["del", "theorem", "image", ["compact"]], ["del", "theorem", "image_of_continuous_on", ["compact"]], ["del", "theorem", "inter_left", ["compact"]], ["del", "theorem", "inter_right", ["compact"]], ["del", "theorem", "nonempty_Inter_of_directed_nonempty_compact_closed", ["compact"]], ["del", "theorem", "nonempty_Inter_of_sequence_nonempty_compact_closed", ["compact"]], ["del", "theorem", "prod", ["compact"]], ["del", "theorem", "union", ["compact"]], ["del", "def", "compact", []], ["mod", "theorem", "compact_diff", []], ["mod", "theorem", "compact_empty", []], ["mod", "theorem", "compact_iff_compact_space", []], ["mod", "theorem", "compact_iff_compact_univ", []], ["mod", "theorem", "compact_singleton", []], ["mod", "theorem", "compact_univ", []], ["mod", "theorem", "compact_univ_pi", []], ["mod", "theorem", "generalized_tube_lemma", []], ["add", "theorem", "adherence_nhdset", ["is_compact"]], ["add", "theorem", "elim_finite_subcover", ["is_compact"]], ["add", "theorem", "elim_finite_subcover_image", ["is_compact"]], ["add", "theorem", "elim_finite_subfamily_closed", ["is_compact"]], ["add", "theorem", "image", ["is_compact"]], ["add", "theorem", "image_of_continuous_on", ["is_compact"]], ["add", "theorem", "inter_left", ["is_compact"]], ["add", "theorem", "inter_right", ["is_compact"]], ["add", "theorem", "nonempty_Inter_of_directed_nonempty_compact_closed", ["is_compact"]], ["add", "theorem", "nonempty_Inter_of_sequence_nonempty_compact_closed", ["is_compact"]], ["add", "theorem", "prod", ["is_compact"]], ["add", "theorem", "union", ["is_compact"]], ["add", "def", "is_compact", []], ["mod", "theorem", "nhds_contain_boxes_of_compact", []], ["del", "theorem", "compact", ["set", "finite"]], ["add", "theorem", "is_compact", ["set", "finite"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": [["del", "theorem", "uniform_continuous_on_of_continuous'", ["compact"]], ["del", "theorem", "uniform_continuous_on_of_continuous", ["compact"]], ["add", "theorem", "uniform_continuous_on_of_continuous'", ["is_compact"]], ["add", "theorem", "uniform_continuous_on_of_continuous", ["is_compact"]]]}]}, {"timestamp": 1594364968, "sha": "79bb8b77", "message": "feat(linear_algebra/cayley_hamilton): the Cayley-Hamilton theorem (#3276)\nThe Cayley-Hamilton theorem, following the proof at http://drorbn.net/AcademicPensieve/2015-12/CayleyHamilton.pdf.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/char_poly.lean", "changes": [["add", "def", "char_matrix", []], ["add", "theorem", "char_matrix_apply_eq", []], ["add", "theorem", "char_matrix_apply_ne", []], ["add", "def", "char_poly", []], ["add", "theorem", "char_poly_map_eval_self", []], ["add", "theorem", "mat_poly_equiv_char_matrix", []]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1594362676, "sha": "66db1ad2", "message": "refactor(algebra/homology): handle co/homology uniformly (#3316)\nA refactor of `algebra/homology` so homology and cohomology are handled uniformly, and factor out a file `image_to_kernel_map.lean` which gains some extra lemmas (which will be useful for talking about exact sequences).", "changes": [{"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": "src/algebra/homology/chain_complex.lean", "changes": [["del", "theorem", "comm", ["chain_complex"]], ["del", "theorem", "comm_at", ["chain_complex"]], ["del", "theorem", "d_squared", ["chain_complex"]], ["del", "def", "forget", ["chain_complex"]], ["del", "theorem", "comm", ["cochain_complex"]], ["del", "theorem", "comm_at", ["cochain_complex"]], ["del", "theorem", "d_squared", ["cochain_complex"]], ["del", "def", "forget", ["cochain_complex"]], ["add", "theorem", "comm", ["homological_complex"]], ["add", "theorem", "comm_at", ["homological_complex"]], ["add", "theorem", "d_squared", ["homological_complex"]], ["add", "def", "forget", ["homological_complex"]], ["add", "def", "homological_complex", []]]}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["mod", "def", "cohomology", ["cochain_complex"]], ["del", "def", "cohomology_functor", ["cochain_complex"]], ["add", "def", "cohomology_group", ["cochain_complex"]], ["mod", "def", "cohomology_map", ["cochain_complex"]], ["del", "theorem", "cohomology_map_comp", ["cochain_complex"]], ["del", "theorem", "cohomology_map_condition", ["cochain_complex"]], ["del", "theorem", "cohomology_map_id", ["cochain_complex"]], ["add", "def", "graded_cohomology", ["cochain_complex"]], ["del", "def", "image_map", ["cochain_complex"]], ["del", "theorem", "image_map_ι", ["cochain_complex"]], ["del", "def", "image_to_kernel_map", ["cochain_complex"]], ["del", "theorem", "image_to_kernel_map_condition", ["cochain_complex"]], ["del", "theorem", "induced_maps_commute", ["cochain_complex"]], ["del", "def", "kernel_functor", ["cochain_complex"]], ["del", "def", "kernel_map", ["cochain_complex"]], ["del", "theorem", "kernel_map_comp", ["cochain_complex"]], ["del", "theorem", "kernel_map_condition", ["cochain_complex"]], ["del", "theorem", "kernel_map_id", ["cochain_complex"]], ["add", "def", "graded_homology", ["homological_complex"]], ["add", "def", "homology", ["homological_complex"]], ["add", "def", "homology_group", ["homological_complex"]], ["add", "def", "homology_map", ["homological_complex"]], ["add", "theorem", "homology_map_comp", ["homological_complex"]], ["add", "theorem", "homology_map_condition", ["homological_complex"]], ["add", "theorem", "homology_map_id", ["homological_complex"]], ["add", "def", "image_map", ["homological_complex"]], ["add", "theorem", "image_map_ι", ["homological_complex"]], ["add", "def", "image_to_kernel_map", ["homological_complex"]], ["add", "theorem", "image_to_kernel_map_comp_kernel_map", ["homological_complex"]], ["add", "theorem", "image_to_kernel_map_condition", ["homological_complex"]], ["add", "def", "kernel_functor", ["homological_complex"]], ["add", "def", "kernel_map", ["homological_complex"]], ["add", "theorem", "kernel_map_comp", ["homological_complex"]], ["add", "theorem", "kernel_map_condition", ["homological_complex"]], ["add", "theorem", "kernel_map_id", ["homological_complex"]]]}, {"oldPath": null, "newPath": "src/algebra/homology/image_to_kernel_map.lean", "changes": [["add", "def", "image_to_kernel_map", ["category_theory"]], ["add", "theorem", "image_to_kernel_map_epi_of_epi_of_zero", ["category_theory"]], ["add", "theorem", "image_to_kernel_map_epi_of_zero_of_mono", ["category_theory"]], ["add", "theorem", "image_to_kernel_map_zero_left", ["category_theory"]], ["add", "theorem", "image_to_kernel_map_zero_right", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}]}, {"timestamp": 1594359616, "sha": "bcf733fa", "message": "feat(data/matrix): add matrix.map and supporting lemmas (#3352)\nAs [requested](https://github.com/leanprover-community/mathlib/pull/3276/files#r452366674).", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "def", "map_matrix", ["add_monoid_hom"]], ["add", "theorem", "map_matrix_apply", ["add_monoid_hom"]], ["add", "theorem", "diagonal_map", ["matrix"]], ["del", "theorem", "elementary_eq_basis_mul_basis", ["matrix"]], ["add", "def", "map", ["matrix"]], ["add", "theorem", "map_add", ["matrix"]], ["add", "theorem", "map_apply", ["matrix"]], ["add", "theorem", "map_mul", ["matrix"]], ["add", "theorem", "map_zero", ["matrix"]], ["del", "theorem", "matrix_eq_sum_elementary", ["matrix"]], ["add", "theorem", "matrix_eq_sum_std_basis", ["matrix"]], ["add", "theorem", "one_map", ["matrix"]], ["add", "theorem", "std_basis_eq_basis_mul_basis", ["matrix"]], ["add", "theorem", "transpose_map", ["matrix"]], ["mod", "theorem", "transpose_mul", ["matrix"]], ["mod", "theorem", "transpose_neg", ["matrix"]], ["mod", "theorem", "transpose_smul", ["matrix"]], ["mod", "theorem", "transpose_sub", ["matrix"]], ["add", "def", "map_matrix", ["ring_hom"]], ["add", "theorem", "map_matrix_apply", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": [["del", "theorem", "matrix_equiv_tensor_apply_elementary", []], ["add", "theorem", "matrix_equiv_tensor_apply_std_basis", []]]}, {"oldPath": "src/ring_theory/polynomial_algebra.lean", "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": []}]}, {"timestamp": 1594354470, "sha": "8b630df3", "message": "feat(ring_theory/matrix_algebra): drop commutativity assumption (#3351)\nRemove the unnecessary assumption that `A` is commutative in `matrix n n A ≃ₐ[R] (A ⊗[R] matrix n n R)`.\n(This didn't cause a problem for Cayley-Hamilton, but @alexjbest and Bassem Safieldeen [realised it's not necessary](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Tensor.20product.20of.20matrices).)", "changes": [{"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}]}, {"timestamp": 1594354468, "sha": "c949dd45", "message": "chore(logic/embedding): reuse proofs from `data.*` (#3341)\nOther changes:\n* rename `injective.prod` to `injective.prod_map`;\n* add `surjective.prod_map`;\n* redefine `sigma.map` without pattern matching;\n* rename `sigma_map_injective` to `injective.sigma_map`;\n* add `surjective.sigma_map`;\n* add `injective.sum_map` and `surjective.sum_map`;\n* rename `embedding.prod_congr` to `embedding.prod_map`;\n* rename `embedding.sum_congr` to `embedding.sum_map`;\n* delete `embedding.sigma_congr_right`, add more\n general `embedding.sigma_map`.", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["del", "theorem", "prod", ["function", "injective"]], ["add", "theorem", "prod_map", ["function", "injective"]], ["add", "theorem", "prod_map", ["function", "surjective"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "sigma_map", ["function", "injective"]], ["add", "theorem", "sigma_map", ["function", "surjective"]], ["mod", "def", "map", ["sigma"]], ["del", "theorem", "sigma_map_injective", []]]}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["add", "theorem", "sum_map", ["function", "injective"]], ["add", "theorem", "sum_map", ["function", "surjective"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "coe_prod_map", ["function", "embedding"]], ["add", "theorem", "coe_sigma_map", ["function", "embedding"]], ["add", "theorem", "coe_sum_map", ["function", "embedding"]], ["del", "def", "prod_congr", ["function", "embedding"]], ["add", "def", "prod_map", ["function", "embedding"]], ["del", "def", "sigma_congr_right", ["function", "embedding"]], ["add", "def", "sigma_map", ["function", "embedding"]], ["del", "def", "sum_congr", ["function", "embedding"]], ["del", "theorem", "sum_congr_apply_inl", ["function", "embedding"]], ["del", "theorem", "sum_congr_apply_inr", ["function", "embedding"]], ["add", "def", "sum_map", ["function", "embedding"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/game/domineering.lean", "newPath": "src/set_theory/game/domineering.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1594348689, "sha": "92d508a7", "message": "chore(*): import tactic.basic as early as possible, and reduce imports (#3333)\nAs discussed on [zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/import.20refactor.20and.20library_search), #3235 had the unfortunate effect of making `library_search` and `#where` and various other things unavailable in many places in mathlib.\nThis PR makes an effort to import `tactic.basic` as early as possible, while otherwise reducing unnecessary imports. \n1. import `tactic.basic` \"as early as possible\" (i.e. in any file that `tactic.basic` doesn't depend on, and which imports any tactic strictly between `tactic.core` and `tactic.basic`, just `import tactic.basic` itself\n2. add `tactic.finish`, `tactic.tauto` and `tactic.norm_cast` to tactic.basic (doesn't requires adding any dependencies)\n3. delete various unnecessary imports", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/semiconj.lean", "newPath": "src/algebra/group/semiconj.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/sym.lean", "newPath": "src/data/sym.lean", "changes": []}, {"oldPath": "src/data/sym2.lean", "newPath": "src/data/sym2.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/noncomm_ring.lean", "newPath": "src/tactic/noncomm_ring.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": "test/mk_iff_of_inductive.lean", "newPath": "test/mk_iff_of_inductive.lean", "changes": []}]}, {"timestamp": 1594341519, "sha": "997025dc", "message": "chore(scripts): update nolints.txt (#3350)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1594334661, "sha": "270e3c94", "message": "chore(data/fintype/basic): add `finset.order_top` and `finset.bounded_distrib_lattice` (#3345)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1594334660, "sha": "f5fa6149", "message": "chore(*): some monotonicity lemmas (#3344)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bInter_mono'", ["set"]], ["add", "theorem", "bInter_mono", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_mono", ["filter"]], ["mod", "theorem", "map_mono", ["filter"]], ["mod", "theorem", "monotone_principal", ["filter"]], ["mod", "theorem", "prod_mono", ["filter"]], ["mod", "theorem", "seq_mono", ["filter"]]]}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}]}, {"timestamp": 1594329473, "sha": "d6e9f97b", "message": "feat(topology/basic): yet another mem_closure (#3348)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_ne_bot", ["filter"]], ["add", "theorem", "comap_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_closure_iff_comap_ne_bot", []]]}]}, {"timestamp": 1594329471, "sha": "ac62213b", "message": "chore(order/filter/at_top_bot): in `order_top` `at_top = pure ⊤` (#3346)", "changes": [{"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "at_top_eq", ["filter", "order_top"]], ["add", "theorem", "tendsto_at_top_pure", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "tendsto_at_top", ["order_top"]]]}]}, {"timestamp": 1594329468, "sha": "4a63f3f2", "message": "feat(data/indicator_function): add `indicator_range_comp` (#3343)\nAdd\n* `comp_eq_of_eq_on_range`;\n* `piecewise_eq_on`;\n* `piecewise_eq_on_compl`;\n* `piecewise_compl`;\n* `piecewise_range_comp`;\n* `indicator_range_comp`.", "changes": [{"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["mod", "theorem", "indicator_le_indicator", ["set"]], ["add", "theorem", "indicator_range_comp", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "comp_eq_of_eq_on_range", ["set"]], ["add", "theorem", "piecewise_compl", ["set"]], ["add", "theorem", "piecewise_eq_on", ["set"]], ["add", "theorem", "piecewise_eq_on_compl", ["set"]], ["add", "theorem", "piecewise_range_comp", ["set"]]]}]}, {"timestamp": 1594312454, "sha": "d6ecb445", "message": "feat(topology/basic): closure in term of subtypes (#3339)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "nonempty_inter_iff_exists_left", ["set"]], ["add", "theorem", "nonempty_inter_iff_exists_right", ["set"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_closure_iff_nhds'", []]]}]}, {"timestamp": 1594308242, "sha": "593a4c83", "message": "fix(tactic/norm_cast): remove bad norm_cast lemma (#3340)\nThis was identified as a move_cast lemma, which meant it was rewriting to the LHS which it couldn't reduce. It's better to let the conditional rewriting handle nat subtraction -- if the right inequality is in the context there's no need to go to `int.sub_nat_nat`.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_sub_nat_nat", ["int"]]]}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}]}, {"timestamp": 1594306206, "sha": "33ca9f16", "message": "doc(category_theory/terminal): add doc-strings (#3338)\nJust adding some doc-strings.", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}]}, {"timestamp": 1594302903, "sha": "9d47b28b", "message": "feat(data): Mark all `sqrt`s as `@[pp_nodot]` (#3337)", "changes": [{"oldPath": "src/data/int/sqrt.lean", "newPath": "src/data/int/sqrt.lean", "changes": [["mod", "def", "sqrt", ["int"]]]}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": [["mod", "def", "sqrt", ["nat"]]]}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": [["mod", "def", "sqrt", ["rat"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}]}, {"timestamp": 1594270810, "sha": "e4ecf146", "message": "I'm just another maintainer", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1594291385, "sha": "be2e42fb", "message": "chore(ring_theory/algebraic): speedup slow proof (#3336)", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "val_apply", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}]}, {"timestamp": 1594275062, "sha": "c06f500f", "message": "feat(logic/basic): add eq_iff_true_of_subsingleton (#3308)\nI'm surprised we didn't have this already.\n```lean\nexample (x y : unit) : x = y := by simp\n```", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "eq_iff_true_of_subsingleton", []]]}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": [["del", "def", "tidy_test_0", ["tidy", "test"]]]}]}, {"timestamp": 1594265705, "sha": "95cc1b11", "message": "refactor(topology/dense_embedding): simplify proof (#3329)\nUsing filter bases, we can give a cleaner proof of continuity of extension by continuity. Also switch to use the \"new\" `continuous_at` in the statement.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "nhds_basis_opens'", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "continuous_at_extend", ["dense_inducing"]], ["del", "theorem", "tendsto_extend", ["dense_inducing"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "closed_nhds_basis", []]]}]}, {"timestamp": 1594265703, "sha": "d5cfa877", "message": "fix(tactic/lint/type_classes): add missing unfreeze_local_instances (#3328)", "changes": [{"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "test/lint_coe_to_fun.lean", "newPath": "test/lint_coe_to_fun.lean", "changes": [["add", "structure", "equiv", ["with_tc_param"]], ["add", "structure", "sparkling_equiv", ["with_tc_param"]]]}]}, {"timestamp": 1594264018, "sha": "b535b0a5", "message": "fix(tactic/default): add transport, equiv_rw (#3330)\nAlso added a tactic doc entry for `transport`.", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": "src/tactic/transport.lean", "changes": []}]}, {"timestamp": 1594255290, "sha": "65dcf4d3", "message": "chore(scripts): update nolints.txt (#3331)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1594241865, "sha": "782013db", "message": "fix(tactic/monotonicity): support monotone in mono (#3310)\nThis PR allow the `mono` tactic to use lemmas stated using `monotone`.\nMostly authored by Simon Hudon", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "test/monotonicity/test_cases.lean", "newPath": "test/monotonicity/test_cases.lean", "changes": [["add", "theorem", "test", []]]}]}, {"timestamp": 1594230017, "sha": "19225c35", "message": "chore(*): update to 3.17.1 (#3327)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1594218666, "sha": "27f622ef", "message": "chore(data/fintype/basic): split, and reduce imports (#3319)\nFollowing on from #3256 and #3235, this slices a little out of `data.fintype.basic`, and reduces imports, mostly in the vicinity of `data.fintype.basic`.", "changes": [{"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/control/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": []}, {"oldPath": "src/control/bitraversable/basic.lean", "newPath": "src/control/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/control/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/finset/basic.lean", "newPath": "src/data/finset/basic.lean", "changes": [["add", "def", "fin_range", ["finset"]], ["add", "theorem", "fin_range_card", ["finset"]], ["add", "theorem", "mem_fin_range", ["finset"]]]}, {"oldPath": "src/data/finset/sort.lean", "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "mono_of_fin_unique'", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["del", "theorem", "mono_of_fin_unique'", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/fintype/sort.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}]}, {"timestamp": 1594218664, "sha": "f90fcc9e", "message": "chore(*): use is_algebra_tower instead of algebra.comap and generalize some constructions to semirings (#3299)\n`algebra.comap` is now reserved to the **creation** of new algebra instances. For assumptions of theorems / constructions, `is_algebra_tower` is the new way to do it. For example:\n```lean\nvariables [algebra K L] [algebra L A]\nlemma is_algebraic_trans (L_alg : is_algebraic K L) (A_alg : is_algebraic L A) :\n is_algebraic K (comap K L A) :=\n```\nis now written as:\n```lean\nvariables [algebra K L] [algebra L A] [algebra K A] [is_algebra_tower K L A]\nlemma is_algebraic_trans (L_alg : is_algebraic K L) (A_alg : is_algebraic L A) :\n is_algebraic K A :=\n```", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "aeval_alg_hom", ["polynomial"]], ["add", "theorem", "aeval_alg_hom_apply", ["polynomial"]], ["mod", "theorem", "dvd_term_of_dvd_eval_of_dvd_terms", ["polynomial"]], ["mod", "theorem", "dvd_term_of_is_root_of_dvd_terms", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "theorem", "map_neg₂", ["linear_map"]], ["mod", "def", "map", ["tensor_product"]], ["mod", "def", "mk", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_eq_ring_closure", ["algebra"]], ["mod", "theorem", "adjoin_int", ["algebra"]], ["mod", "theorem", "adjoin_singleton_eq_range", ["algebra"]], ["add", "theorem", "mem_adjoin_iff", ["algebra"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "alg_hom_nat", []], ["add", "theorem", "mem_subalgebra_of_subsemiring", []], ["add", "theorem", "span_nat_eq", []], ["add", "theorem", "span_nat_eq_add_group_closure", []], ["add", "theorem", "add_mem", ["subalgebra"]], ["add", "theorem", "algebra_map_mem", ["subalgebra"]], ["add", "theorem", "coe_int_mem", ["subalgebra"]], ["add", "theorem", "coe_nat_mem", ["subalgebra"]], ["add", "theorem", "gsmul_mem", ["subalgebra"]], ["add", "theorem", "list_prod_mem", ["subalgebra"]], ["add", "theorem", "list_sum_mem", ["subalgebra"]], ["add", "theorem", "mem_to_submodule", ["subalgebra"]], ["mod", "theorem", "mul_mem", ["subalgebra"]], ["add", "theorem", "multiset_prod_mem", ["subalgebra"]], ["add", "theorem", "multiset_sum_mem", ["subalgebra"]], ["add", "theorem", "neg_mem", ["subalgebra"]], ["add", "theorem", "nsmul_mem", ["subalgebra"]], ["add", "theorem", "one_mem", ["subalgebra"]], ["add", "theorem", "pow_mem", ["subalgebra"]], ["add", "theorem", "prod_mem", ["subalgebra"]], ["mod", "theorem", "range_le", ["subalgebra"]], ["add", "theorem", "range_subset", ["subalgebra"]], ["add", "theorem", "smul_mem", ["subalgebra"]], ["add", "theorem", "srange_le", ["subalgebra"]], ["add", "theorem", "sub_mem", ["subalgebra"]], ["add", "theorem", "sum_mem", ["subalgebra"]], ["add", "theorem", "to_submodule_inj", ["subalgebra"]], ["add", "theorem", "to_submodule_injective", ["subalgebra"]], ["mod", "def", "under", ["subalgebra"]], ["add", "theorem", "zero_mem", ["subalgebra"]], ["add", "def", "subalgebra_of_subsemiring", []]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["mod", "theorem", "map_mul", ["submodule"]]]}, {"oldPath": "src/ring_theory/algebra_tower.lean", "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "aeval_apply", ["is_algebra_tower"]], ["add", "def", "restrict_base", ["is_algebra_tower"]], ["add", "theorem", "restrict_base_apply", ["is_algebra_tower"]], ["add", "theorem", "to_alg_hom_apply", ["is_algebra_tower"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_alg_hom", []], ["mod", "theorem", "is_integral_trans_aux", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "comap_is_algebraic_iff", ["fraction_map"]], ["mod", "def", "fraction_map_of_finite_extension", ["integral_closure"]], ["add", "theorem", "algebra_map_eq", ["localization_map"]], ["mod", "theorem", "integer_normalization_aeval_eq_zero", ["localization_map"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["mod", "theorem", "ext", ["subsemiring"]], ["add", "theorem", "mem_closure_iff", ["subsemiring"]], ["add", "theorem", "mem_closure_iff_exists_list", ["subsemiring"]]]}]}, {"timestamp": 1594218662, "sha": "ba8af8cb", "message": "feat(ring_theory/polynomial_algebra): polynomial A ≃ₐ[R] (A ⊗[R] polynomial R) (#3275)\nThis is a formal nonsense preliminary to the Cayley-Hamilton theorem, which comes in the next PR.\nWe produce the algebra isomorphism `polynomial A ≃ₐ[R] (A ⊗[R] polynomial R)`, and as a consequence also the algebra isomorphism\n```\nmatrix n n (polynomial R) ≃ₐ[R] polynomial (matrix n n R)\n```\nwhich is characterized by\n```\ncoeff (matrix_polynomial_equiv_polynomial_matrix m) k i j = coeff (m i j) k\n```", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": [["mod", "def", "algebra_map'", ["add_monoid_algebra"]], ["mod", "def", "algebra_map'", ["monoid_algebra"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "def", "C", ["polynomial"]], ["add", "theorem", "algebra_map_apply", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial_algebra.lean", "changes": [["add", "theorem", "mat_poly_equiv_coeff_apply", []], ["add", "theorem", "mat_poly_equiv_coeff_apply_aux_1", []], ["add", "theorem", "mat_poly_equiv_coeff_apply_aux_2", []], ["add", "theorem", "mat_poly_equiv_smul_one", []], ["add", "theorem", "mat_poly_equiv_symm_apply_coeff", []], ["add", "def", "equiv", ["poly_equiv_tensor"]], ["add", "def", "inv_fun", ["poly_equiv_tensor"]], ["add", "theorem", "inv_fun_add", ["poly_equiv_tensor"]], ["add", "theorem", "left_inv", ["poly_equiv_tensor"]], ["add", "theorem", "right_inv", ["poly_equiv_tensor"]], ["add", "def", "to_fun", ["poly_equiv_tensor"]], ["add", "def", "to_fun_alg_hom", ["poly_equiv_tensor"]], ["add", "theorem", "to_fun_alg_hom_apply_tmul", ["poly_equiv_tensor"]], ["add", "def", "to_fun_bilinear", ["poly_equiv_tensor"]], ["add", "def", "to_fun_linear", ["poly_equiv_tensor"]], ["add", "theorem", "to_fun_linear_algebra_map_tmul_one", ["poly_equiv_tensor"]], ["add", "theorem", "to_fun_linear_mul_tmul_mul", ["poly_equiv_tensor"]], ["add", "theorem", "to_fun_linear_mul_tmul_mul_aux_1", ["poly_equiv_tensor"]], ["add", "theorem", "to_fun_linear_mul_tmul_mul_aux_2", ["poly_equiv_tensor"]], ["add", "def", "to_fun_linear_right", ["poly_equiv_tensor"]], ["add", "def", "poly_equiv_tensor", []], ["add", "theorem", "poly_equiv_tensor_apply", []], ["add", "theorem", "poly_equiv_tensor_symm_apply_tmul", []]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1594214520, "sha": "8f6090ca", "message": "feat(algebra/ordered_field): missing lemma (#3324)", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "one_div_le", []]]}]}, {"timestamp": 1594209385, "sha": "97853b96", "message": "doc(tactic/lean_core_docs): remove \"hypothesis management\" tag (#3323)", "changes": [{"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}]}, {"timestamp": 1594204012, "sha": "a3e21a88", "message": "feat(category_theory/zero): lemmas about zero objects and zero morphisms, and improve docs (#3315)", "changes": [{"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "desc_zero", ["category_theory", "limits", "cokernel"]], ["del", "def", "π_zero_is_iso", ["category_theory", "limits", "cokernel"]], ["add", "theorem", "lift_zero", ["category_theory", "limits", "kernel"]], ["del", "def", "ι_zero_is_iso", ["category_theory", "limits", "kernel"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "epi_of_target_iso_zero", ["category_theory", "limits"]], ["add", "def", "zero", ["category_theory", "limits", "has_image"]], ["del", "theorem", "zero_of_from_zero", ["category_theory", "limits", "has_zero_object"]], ["del", "theorem", "zero_of_to_zero", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "id_zero", ["category_theory", "limits"]], ["add", "def", "id_zero_equiv_iso_zero", ["category_theory", "limits"]], ["add", "theorem", "id_zero_equiv_iso_zero_apply_hom", ["category_theory", "limits"]], ["add", "theorem", "id_zero_equiv_iso_zero_apply_inv", ["category_theory", "limits"]], ["add", "theorem", "ι_zero'", ["category_theory", "limits", "image"]], ["add", "theorem", "ι_zero", ["category_theory", "limits", "image"]], ["add", "def", "image_zero'", ["category_theory", "limits"]], ["add", "def", "image_zero", ["category_theory", "limits"]], ["add", "def", "is_iso_zero_equiv", ["category_theory", "limits"]], ["add", "def", "is_iso_zero_equiv_iso_zero", ["category_theory", "limits"]], ["add", "def", "is_iso_zero_self_equiv", ["category_theory", "limits"]], ["add", "def", "is_iso_zero_self_equiv_iso_zero", ["category_theory", "limits"]], ["add", "def", "mono_factorisation_zero", ["category_theory", "limits"]], ["add", "theorem", "mono_of_source_iso_zero", ["category_theory", "limits"]], ["add", "theorem", "zero_of_from_zero", ["category_theory", "limits"]], ["add", "theorem", "zero_of_source_iso_zero", ["category_theory", "limits"]], ["add", "theorem", "zero_of_target_iso_zero", ["category_theory", "limits"]], ["add", "theorem", "zero_of_to_zero", ["category_theory", "limits"]]]}]}, {"timestamp": 1594204010, "sha": "fbb49cbe", "message": "refactor(*): place map_map in the functor namespace (#3309)\nRenames `_root_.map_map` to `functor.map_map` and `filter.comap_comap_comp` to `filter.comap_comap` (which is consistent with `filter.map_map`).", "changes": [{"oldPath": "src/control/basic.lean", "newPath": "src/control/basic.lean", "changes": [["add", "theorem", "map_map", ["functor"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_comap", ["filter"]], ["del", "theorem", "comap_comap_comp", ["filter"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "comap_comap", ["uniform_space"]], ["del", "theorem", "comap_comap_comp", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1594198889, "sha": "afae2c4b", "message": "doc(tactic/localized): unnecessary escape characters (#3322)\nThis is probably left over from when it was a string literal instead of a doc string.", "changes": [{"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}]}, {"timestamp": 1594196747, "sha": "18246ac4", "message": "refactor(category_theory/finite_limits): reorganise import hierarchy (#3320)\nPreviously, all of the \"special shapes\" that happened to be finite imported `category_theory.limits.shapes.finite_limits`. Now it's the other way round, which I think ends up being cleaner.\nThis also results in some significant reductions to the dependency graph (e.g. talking about homology of complexes no longer requires compiling `data.fintype.basic` and all its antecedents).\nNo actual content, just moving content around.", "changes": [{"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": []}, {"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}, {"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": "src/algebra/homology/chain_complex.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/non_preadditive.lean", "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["del", "theorem", "braid_natural", ["category_theory", "limits"]], ["del", "def", "associator", ["category_theory", "limits", "coprod"]], ["del", "theorem", "associator_naturality", ["category_theory", "limits", "coprod"]], ["del", "def", "braiding", ["category_theory", "limits", "coprod"]], ["del", "def", "left_unitor", ["category_theory", "limits", "coprod"]], ["del", "theorem", "pentagon", ["category_theory", "limits", "coprod"]], ["del", "def", "right_unitor", ["category_theory", "limits", "coprod"]], ["del", "theorem", "symmetry'", ["category_theory", "limits", "coprod"]], ["del", "theorem", "symmetry", ["category_theory", "limits", "coprod"]], ["del", "theorem", "triangle", ["category_theory", "limits", "coprod"]], ["del", "def", "associator", ["category_theory", "limits", "prod"]], ["del", "theorem", "associator_naturality", ["category_theory", "limits", "prod"]], ["del", "def", "braiding", ["category_theory", "limits", "prod"]], ["del", "def", "left_unitor", ["category_theory", "limits", "prod"]], ["del", "theorem", "pentagon", ["category_theory", "limits", "prod"]], ["del", "def", "right_unitor", ["category_theory", "limits", "prod"]], ["del", "theorem", "symmetry'", ["category_theory", "limits", "prod"]], ["del", "theorem", "symmetry", ["category_theory", "limits", "prod"]], ["del", "theorem", "triangle", ["category_theory", "limits", "prod"]], ["del", "def", "prod_functor_left_comp", ["category_theory", "limits"]], ["del", "theorem", "prod_left_unitor_hom_naturality", ["category_theory", "limits"]], ["del", "theorem", "prod_left_unitor_inv_naturality", ["category_theory", "limits"]], ["del", "theorem", "prod_right_unitor_hom_naturality", ["category_theory", "limits"]], ["del", "theorem", "prod_right_unitor_inv_naturality", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/default.lean", "newPath": "src/category_theory/limits/shapes/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["del", "def", "has_coequalizers_of_has_finite_colimits", ["category_theory", "limits"]], ["del", "def", "has_equalizers_of_has_finite_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": [["add", "def", "has_coequalizers_of_has_finite_colimits", ["category_theory", "limits"]], ["add", "def", "has_equalizers_of_has_finite_limits", ["category_theory", "limits"]], ["add", "def", "has_finite_wide_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["add", "def", "has_finite_wide_pushouts_of_has_finite_limits", ["category_theory", "limits"]], ["add", "def", "has_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["add", "def", "has_pushouts_of_has_finite_colimits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["del", "def", "has_cokernels_of_has_finite_colimits", ["category_theory", "limits"]], ["del", "def", "has_kernels_of_has_finite_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["del", "def", "has_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["del", "def", "has_pushouts_of_has_finite_colimits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["del", "def", "has_finite_wide_pullbacks_of_has_finite_limits", []], ["del", "def", "has_finite_wide_pushouts_of_has_finite_limits", []]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["add", "theorem", "braid_natural", ["category_theory", "limits"]], ["add", "def", "associator", ["category_theory", "limits", "coprod"]], ["add", "theorem", "associator_naturality", ["category_theory", "limits", "coprod"]], ["add", "def", "braiding", ["category_theory", "limits", "coprod"]], ["add", "def", "left_unitor", ["category_theory", "limits", "coprod"]], ["add", "theorem", "pentagon", ["category_theory", "limits", "coprod"]], ["add", "def", "right_unitor", ["category_theory", "limits", "coprod"]], ["add", "theorem", "symmetry'", ["category_theory", "limits", "coprod"]], ["add", "theorem", "symmetry", ["category_theory", "limits", "coprod"]], ["add", "theorem", "triangle", ["category_theory", "limits", "coprod"]], ["add", "def", "associator", ["category_theory", "limits", "prod"]], ["add", "theorem", "associator_naturality", ["category_theory", "limits", "prod"]], ["add", "def", "braiding", ["category_theory", "limits", "prod"]], ["add", "def", "left_unitor", ["category_theory", "limits", "prod"]], ["add", "theorem", "pentagon", ["category_theory", "limits", "prod"]], ["add", "def", "right_unitor", ["category_theory", "limits", "prod"]], ["add", "theorem", "symmetry'", ["category_theory", "limits", "prod"]], ["add", "theorem", "symmetry", ["category_theory", "limits", "prod"]], ["add", "theorem", "triangle", ["category_theory", "limits", "prod"]], ["add", "def", "prod_functor_left_comp", ["category_theory", "limits"]], ["add", "theorem", "prod_left_unitor_hom_naturality", ["category_theory", "limits"]], ["add", "theorem", "prod_left_unitor_inv_naturality", ["category_theory", "limits"]], ["add", "theorem", "prod_right_unitor_hom_naturality", ["category_theory", "limits"]], ["add", "theorem", "prod_right_unitor_inv_naturality", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}]}, {"timestamp": 1594192365, "sha": "13eea4c3", "message": "chore(category_theory/images): cleanup (#3314)\nJust some cleanup, and adding two easy lemmas.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "epi_image_of_epi", ["category_theory", "limits"]], ["add", "theorem", "eq_fac", ["category_theory", "limits", "image"]], ["add", "theorem", "ext", ["category_theory", "limits", "image"]]]}]}, {"timestamp": 1594192363, "sha": "eb271b26", "message": "feat(data/int/basic): some lemmas (#3313)\nA few small lemmas about `to_nat` that I wanted while playing with exact sequences.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "le_add_one", ["int"]], ["add", "theorem", "to_nat_add", ["int"]], ["add", "theorem", "to_nat_add_one", ["int"]], ["add", "theorem", "to_nat_coe_nat_add_one", ["int"]], ["add", "theorem", "to_nat_one", ["int"]], ["add", "theorem", "to_nat_zero", ["int"]]]}]}, {"timestamp": 1594187129, "sha": "ff1aea54", "message": "feat(data/equiv): α × α ≃ α for [subsingleton α] (#3312)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subsingleton_prod_self_equiv", []]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1594168670, "sha": "e987f625", "message": "chore(scripts): update nolints.txt (#3311)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1594151480, "sha": "23f449bd", "message": "feat(topology/metric_space/basic): add closed_ball_mem_nhds (#3305)\nI found this lemma handy when converting between the epsilon-N definition of convergence and the filter definition", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "closed_ball_mem_nhds", ["metric"]]]}]}, {"timestamp": 1594143954, "sha": "35940dda", "message": "feat(linear_algebra/finite_dimensional): add dim_sup_add_dim_inf_eq (#3304)\nAdding a finite-dimensional version of dim(W+X)+dim(W \\cap X)=dim(W)+dim(X)", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "dim_sup_add_dim_inf_eq", ["submodule"]]]}]}, {"timestamp": 1594139963, "sha": "ea10944c", "message": "feat(data/list/defs): list.singleton_append and list.bind_singleton (#3298)\nI found these useful when working with palindromes and Fibonacci words respectively.\nWhile `bind_singleton` is available as a monad law, I find the specialized version more convenient.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "bind_singleton", ["list"]], ["add", "theorem", "singleton_append", ["list"]]]}]}, {"timestamp": 1594134911, "sha": "11ba6873", "message": "chore(algebra/big_operators): use proper `*_with_zero` class in `prod_eq_zero(_iff)` (#3303)\nAlso add a missing instance `comm_semiring → comm_monoid_with_zero`.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["add", "theorem", "mem_support", ["function"]], ["mod", "theorem", "support_prod", ["function"]], ["add", "theorem", "support_prod_subset", ["function"]]]}]}, {"timestamp": 1594115961, "sha": "12c2acb8", "message": "feat(algebra/continued_fractions): add first set of approximation lemmas (#3218)", "changes": [{"oldPath": null, "newPath": "src/algebra/continued_fractions/computation/approximations.lean", "changes": [["add", "theorem", "exists_int_eq_of_part_denom", ["generalized_continued_fraction"]], ["add", "theorem", "fib_le_of_continuants_aux_b", ["generalized_continued_fraction"]], ["add", "theorem", "nth_stream_fr_lt_one", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "nth_stream_fr_nonneg", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "nth_stream_fr_nonneg_lt_one", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "one_le_succ_nth_stream_b", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "succ_nth_stream_b_le_nth_stream_fr_inv", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "le_of_succ_nth_denom", ["generalized_continued_fraction"]], ["add", "theorem", "le_of_succ_succ_nth_continuants_aux_b", ["generalized_continued_fraction"]], ["add", "theorem", "of_denom_mono", ["generalized_continued_fraction"]], ["add", "theorem", "of_one_le_nth_part_denom", ["generalized_continued_fraction"]], ["add", "theorem", "of_part_num_eq_one", ["generalized_continued_fraction"]], ["add", "theorem", "of_part_num_eq_one_and_exists_int_part_denom_eq", ["generalized_continued_fraction"]], ["add", "theorem", "succ_nth_fib_le_of_nth_denom", ["generalized_continued_fraction"]], ["add", "theorem", "zero_le_of_continuants_aux_b", ["generalized_continued_fraction"]], ["add", "theorem", "zero_le_of_denom", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": [["del", "theorem", "comp_exact_value_correctness_of_stream_eq_none", ["generalized_continued_fraction"]], ["add", "theorem", "of_correctness_of_nth_stream_eq_none", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/translations.lean", "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": [["add", "theorem", "exists_succ_nth_stream_of_fr_zero", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "exists_succ_nth_stream_of_gcf_of_nth_eq_some", ["generalized_continued_fraction", "int_fract_pair"]], ["del", "theorem", "obtain_succ_nth_stream_of_fr_zero", ["generalized_continued_fraction", "int_fract_pair"]], ["del", "theorem", "obtain_succ_nth_stream_of_gcf_of_nth_eq_some", ["generalized_continued_fraction", "int_fract_pair"]]]}, {"oldPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "newPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/terminated_stable.lean", "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/translations.lean", "newPath": "src/algebra/continued_fractions/translations.lean", "changes": [["add", "theorem", "exists_conts_a_of_num", ["generalized_continued_fraction"]], ["add", "theorem", "exists_conts_b_of_denom", ["generalized_continued_fraction"]], ["add", "theorem", "exists_s_a_of_part_num", ["generalized_continued_fraction"]], ["add", "theorem", "exists_s_b_of_part_denom", ["generalized_continued_fraction"]], ["add", "theorem", "first_continuant_eq", ["generalized_continued_fraction"]], ["add", "theorem", "first_denominator_eq", ["generalized_continued_fraction"]], ["add", "theorem", "first_numerator_eq", ["generalized_continued_fraction"]], ["del", "theorem", "obtain_conts_a_of_num", ["generalized_continued_fraction"]], ["del", "theorem", "obtain_conts_b_of_denom", ["generalized_continued_fraction"]], ["del", "theorem", "obtain_s_a_of_part_num", ["generalized_continued_fraction"]], ["del", "theorem", "obtain_s_b_of_part_denom", ["generalized_continued_fraction"]], ["add", "theorem", "second_continuant_aux_eq", ["generalized_continued_fraction"]], ["add", "theorem", "zeroth_denominator_eq_one", ["generalized_continued_fraction"]], ["add", "theorem", "zeroth_numerator_eq_h", ["generalized_continued_fraction"]]]}]}, {"timestamp": 1594113912, "sha": "08ffbbb9", "message": "feat(analysis/normed_space/operator_norm): normed algebra of continuous linear maps (#3282)\nGiven a normed space `E`, its continuous linear endomorphisms form a normed ring, and a normed algebra if `E` is nonzero. Moreover, the units of this ring are precisely the continuous linear equivalences.", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "of_unit", ["continuous_linear_equiv"]], ["add", "def", "to_unit", ["continuous_linear_equiv"]], ["add", "def", "units_equiv", ["continuous_linear_equiv"]], ["add", "theorem", "units_equiv_to_continuous_linear_map", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1594096743, "sha": "095445ee", "message": "refactor(order/*): make `data.set.basic` import `order.bounded_lattice` (#3285)\nI have two goals:\n* make it possible to refactor `set` to use `lattice` operations;\n* make `submonoid.basic` independent of `data.nat.basic`.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "bot_eq_empty", ["set"]], ["mod", "theorem", "image_eq_range", ["set"]], ["add", "theorem", "inf_eq_inter", ["set"]], ["add", "theorem", "le_eq_subset", ["set"]], ["add", "theorem", "lt_eq_ssubset", ["set"]], ["del", "def", "strict_subset", ["set"]], ["add", "theorem", "sup_eq_union", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "bot_eq_empty", ["set"]], ["del", "theorem", "inf_eq_inter", ["set"]], ["del", "theorem", "le_eq_subset", ["set"]], ["del", "theorem", "lt_eq_ssubset", ["set"]], ["del", "theorem", "sup_eq_union", ["set"]]]}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["add", "theorem", "rel_eq_coe", ["con"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "mono", ["directed"]], ["del", "theorem", "mono_comp", ["directed"]], ["del", "def", "directed", []], ["del", "theorem", "directed_comp", []], ["del", "theorem", "mono", ["directed_on"]], ["del", "def", "directed_on", []], ["del", "theorem", "directed_on_iff_directed", []], ["del", "theorem", "directed_on_image", []]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_apply", []], ["add", "theorem", "inf_apply", []], ["add", "theorem", "sup_apply", []], ["add", "theorem", "top_apply", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "def", "Inf", []], ["mod", "theorem", "Inf_apply", []], ["del", "def", "Sup", []], ["mod", "theorem", "Sup_apply", []], ["mod", "theorem", "infi_apply", []], ["mod", "theorem", "supr_apply", []]]}, {"oldPath": null, "newPath": "src/order/directed.lean", "changes": [["add", "theorem", "mono", ["directed"]], ["add", "theorem", "mono_comp", ["directed"]], ["add", "def", "directed", []], ["add", "theorem", "directed_comp", []], ["add", "theorem", "directed_of_inf", []], ["add", "theorem", "directed_of_sup", []], ["add", "theorem", "mono", ["directed_on"]], ["add", "def", "directed_on", []], ["add", "theorem", "directed_on_iff_directed", []], ["add", "theorem", "directed_on_image", []]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["del", "theorem", "directed_of_inf", []], ["del", "theorem", "directed_of_mono", []], ["del", "theorem", "directed_of_sup", []]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["del", "def", "nat_gt", ["order_embedding"]], ["del", "def", "nat_lt", ["order_embedding"]], ["del", "theorem", "well_founded_iff_no_descending_seq", ["order_embedding"]]]}, {"oldPath": null, "newPath": "src/order/order_iso_nat.lean", "changes": [["add", "def", "nat_gt", ["order_embedding"]], ["add", "def", "nat_lt", ["order_embedding"]], ["add", "theorem", "well_founded_iff_no_descending_seq", ["order_embedding"]]]}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1594082253, "sha": "d62e71d4", "message": "chore(scripts): update nolints.txt (#3302)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1594066845, "sha": "f548db40", "message": "feat(linear_algebra/affine_space): lattice structure on affine subspaces (#3288)\nDefine a `complete_lattice` instance on affine subspaces of an affine\nspace, and prove a few basic lemmas relating to it. (There are plenty\nmore things that could be proved about it, that I think can reasonably\nbe added later.)", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vsub_set_empty", ["add_torsor"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "vector_span_def", ["affine_space"]], ["add", "theorem", "affine_span_eq_Inf", ["affine_subspace"]], ["add", "theorem", "bot_coe", ["affine_subspace"]], ["add", "theorem", "direction_bot", ["affine_subspace"]], ["add", "theorem", "direction_inf", ["affine_subspace"]], ["add", "theorem", "direction_top", ["affine_subspace"]], ["add", "theorem", "exists_of_lt", ["affine_subspace"]], ["add", "theorem", "inf_coe", ["affine_subspace"]], ["add", "theorem", "le_def'", ["affine_subspace"]], ["add", "theorem", "le_def", ["affine_subspace"]], ["add", "theorem", "lt_def", ["affine_subspace"]], ["add", "theorem", "lt_iff_le_and_exists", ["affine_subspace"]], ["add", "theorem", "mem_inf_iff", ["affine_subspace"]], ["add", "theorem", "mem_top", ["affine_subspace"]], ["del", "theorem", "mem_univ", ["affine_subspace"]], ["add", "theorem", "not_le_iff_exists", ["affine_subspace"]], ["add", "theorem", "not_mem_bot", ["affine_subspace"]], ["add", "theorem", "span_Union", ["affine_subspace"]], ["add", "theorem", "span_empty", ["affine_subspace"]], ["add", "theorem", "span_points_subset_coe_of_subset_coe", ["affine_subspace"]], ["add", "theorem", "span_union", ["affine_subspace"]], ["add", "theorem", "span_univ", ["affine_subspace"]], ["add", "theorem", "top_coe", ["affine_subspace"]], ["del", "def", "univ", ["affine_subspace"]], ["del", "theorem", "univ_coe", ["affine_subspace"]]]}]}, {"timestamp": 1594062296, "sha": "edd29d0f", "message": "chore(ring_theory/power_series): weaken assumptions for nontrivial (#3301)", "changes": [{"oldPath": "src/logic/nontrivial.lean", "newPath": "src/logic/nontrivial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "theorem", "X_inj", ["mv_power_series"]]]}]}, {"timestamp": 1594056863, "sha": "c0926f06", "message": "chore(*): update to lean 3.17.0 (#3300)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1594054701, "sha": "f06e4e00", "message": "feat(data/sym2) Defining the symmetric square (unordered pairs) (#3264)\nThis adds a type for the symmetric square of a type, which is the quotient of the cartesian square by permutations. These are also known as unordered pairs.\nAdditionally, this provides some definitions and lemmas for equalities, functoriality, membership, and a relationship between symmetric relations and terms of the symmetric square.\nI preferred `sym2` over `unordered_pairs` out of a combination of familiarity and brevity, but I could go either way for naming.", "changes": [{"oldPath": null, "newPath": "src/data/sym.lean", "changes": [["add", "def", "sym'", ["sym"]], ["add", "def", "sym_equiv_sym'", ["sym"]], ["add", "def", "sym", []], ["add", "def", "is_setoid", ["vector", "perm"]]]}, {"oldPath": null, "newPath": "src/data/sym2.lean", "changes": [["add", "theorem", "congr_right", ["sym2"]], ["add", "def", "diag", ["sym2"]], ["add", "theorem", "eq_iff", ["sym2"]], ["add", "theorem", "eq_swap", ["sym2"]], ["add", "def", "equiv_multiset", ["sym2"]], ["add", "def", "equiv_sym", ["sym2"]], ["add", "def", "from_rel", ["sym2"]], ["add", "theorem", "from_rel_irreflexive", ["sym2"]], ["add", "theorem", "from_rel_proj_prop", ["sym2"]], ["add", "theorem", "from_rel_prop", ["sym2"]], ["add", "def", "is_diag", ["sym2"]], ["add", "theorem", "is_diag_iff_proj_eq", ["sym2"]], ["add", "def", "map", ["sym2"]], ["add", "theorem", "map_comp", ["sym2"]], ["add", "theorem", "map_id", ["sym2"]], ["add", "def", "mem", ["sym2"]], ["add", "theorem", "mem_iff", ["sym2"]], ["add", "theorem", "mem_other_spec", ["sym2"]], ["add", "theorem", "mk_has_mem", ["sym2"]], ["add", "def", "mk_has_vmem", ["sym2"]], ["add", "theorem", "other_is_mem_other", ["sym2"]], ["add", "theorem", "is_equivalence", ["sym2", "rel"]], ["add", "theorem", "symm", ["sym2", "rel"]], ["add", "theorem", "trans", ["sym2", "rel"]], ["add", "inductive", "rel", ["sym2"]], ["add", "def", "sym2_equiv_sym'", ["sym2"]], ["add", "def", "other", ["sym2", "vmem"]], ["add", "def", "vmem", ["sym2"]], ["add", "theorem", "vmem_other_spec", ["sym2"]], ["add", "def", "sym2", []]]}]}, {"timestamp": 1594049665, "sha": "e3a1a619", "message": "feat(tactic/interactive): identity tactic (#3295)\nA surprisingly missing tactic combinator.", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1594044749, "sha": "33b6cba0", "message": "refactor(*): replace nonzero with nontrivial (#3296)\nIntroduce a typeclass `nontrivial` saying that a type has at least two distinct elements, and use it instead of the predicate `nonzero` requiring that `0` is different from `1`. These two predicates are equivalent in monoids with zero, which cover essentially all relevant ring-like situations, but `nontrivial` applies also to say that a vector space is nontrivial, for instance.\nAlong the way, fix some quirks in the alebraic hierarchy (replacing fields `zero_ne_one` in many structures with extending `nontrivial`, for instance). Also, `quadratic_reciprocity` was timing out. I guess it was just below the threshold before the refactoring, and some of the changes related to typeclass inference made it just above after the change. So, I squeeze_simped it, going from 47s to 1.7s on my computer.\nZulip discussion at https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/nonsingleton/near/202865366", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "associated_zero_iff_eq_zero", []]]}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "theorem", "false_of_nonzero_of_char_one", ["char_p"]], ["mod", "theorem", "ring_char_ne_one", ["char_p"]]]}, {"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": [["mod", "theorem", "sl_non_abelian", ["lie_algebra", "special_linear"]]]}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "ne_zero", ["is_unit"]], ["mod", "theorem", "not_is_unit_zero", []], ["mod", "theorem", "one_ne_zero", []], ["del", "theorem", "subsingleton_or_nonzero", []], ["mod", "theorem", "ne_zero", ["units"]], ["mod", "theorem", "zero_ne_one", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "structure", "is_integral_domain", []], ["del", "theorem", "of_ne", ["nonzero"]], ["mod", "theorem", "pred_ne_self", []], ["mod", "theorem", "succ_ne_self", []], ["mod", "theorem", "coe_ne_zero", ["units"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "frontier_closed_ball'", []], ["mod", "theorem", "interior_closed_ball'", []], ["mod", "theorem", "to_nonzero", ["normed_algebra"]], ["mod", "theorem", "norm_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["mod", "theorem", "exists_dual_vector'", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "norm_pos", ["continuous_linear_equiv"]], ["mod", "theorem", "norm_symm_pos", ["continuous_linear_equiv"]], ["mod", "theorem", "one_le_norm_mul_norm_symm", ["continuous_linear_equiv"]], ["mod", "theorem", "norm_id", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/units.lean", "newPath": "src/analysis/normed_space/units.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_le_one_iff_subsingleton", ["fintype"]], ["add", "theorem", "one_lt_card_iff_nontrivial", ["fintype"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["mod", "theorem", "to_matrix_injective", ["pequiv"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "total_degree_X", ["mv_polynomial"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "ne_zero", ["polynomial", "monic"]], ["mod", "theorem", "of_polynomial_ne", ["polynomial", "nonzero"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": [["mod", "theorem", "conj_mul", ["zsqrtd"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "mul_def", ["free_abelian_group"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_pos", []], ["mod", "theorem", "dim_pos_iff_exists_ne_zero", []], ["add", "theorem", "dim_pos_iff_nontrivial", []], ["mod", "theorem", "exists_mem_ne_zero_of_dim_pos", []], ["mod", "theorem", "le_span", ["is_basis"]]]}, {"oldPath": null, "newPath": "src/logic/nontrivial.lean", "changes": [["add", "theorem", "exists_ne", []], ["add", "theorem", "exists_pair_ne", []], ["add", "theorem", "nontrivial_iff", []], ["add", "theorem", "nontrivial_of_ne", []], ["add", "theorem", "not_nontrivial_iff_subsingleton", []], ["add", "theorem", "subsingleton_iff", []], ["add", "theorem", "subsingleton_or_nontrivial", []]]}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/fintype.lean", "newPath": "src/ring_theory/fintype.lean", "changes": [["mod", "theorem", "card_units_lt", []]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["mod", "theorem", "not_one_mem_ker", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "finite_of_linear_independent", []]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/prod.lean", "newPath": "src/ring_theory/prod.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "one_lt_iff_nontrivial", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1594042040, "sha": "2c9d9bd0", "message": "chore(scripts/nolints_summary.sh): list number of nolints per file", "changes": [{"oldPath": null, "newPath": "scripts/nolints_summary.sh", "changes": []}]}, {"timestamp": 1594019807, "sha": "5ff099b6", "message": "feat(topology): preliminaries for Haar measure (#3194)\nDefine group operations on sets\nDefine compacts, in a similar way to opens\nProve some \"separation\" properties for topological groups\nRename `continuous.comap` to `opens.comap` (so that we can have comaps for other kinds of sets in topological spaces)\nRename `inf_val` to `inf_def` (unused)\nMove some definitions from `topology.opens` to `topology.compacts`", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "inf_coe", ["finset"]], ["add", "theorem", "inf_def", ["finset"]], ["del", "theorem", "inf_val", ["finset"]], ["add", "theorem", "sup_coe", ["finset"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "div_lt_top", ["ennreal"]], ["add", "theorem", "infi_mul", ["ennreal"]], ["add", "theorem", "inv_lt_top", ["ennreal"]], ["add", "theorem", "mul_infi", ["ennreal"]], ["add", "theorem", "mul_pos", ["ennreal"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "compact_covered_by_mul_left_translates", []], ["add", "theorem", "compact_open_separated_mul", []], ["add", "theorem", "one_open_separated_mul", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_subtype_eq_sum", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "preimage", ["is_closed"]], ["add", "theorem", "preimage", ["is_open"]]]}, {"oldPath": null, "newPath": "src/topology/compacts.lean", "changes": [["add", "def", "closeds", ["topological_space"]], ["add", "theorem", "bot_val", ["topological_space", "compacts"]], ["add", "theorem", "equiv_to_fun_val", ["topological_space", "compacts"]], ["add", "theorem", "finset_sup_val", ["topological_space", "compacts"]], ["add", "theorem", "map_val", ["topological_space", "compacts"]], ["add", "theorem", "sup_val", ["topological_space", "compacts"]], ["add", "def", "compacts", ["topological_space"]], ["add", "def", "to_closeds", ["topological_space", "nonempty_compacts"]], ["add", "def", "nonempty_compacts", ["topological_space"]], ["add", "def", "positive_compacts:", ["topological_space"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "exists_nhds_square", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "is_open_preimage", ["homeomorph"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["del", "def", "comap", ["continuous"]], ["del", "theorem", "comap_id", ["continuous"]], ["del", "theorem", "comap_mono", ["continuous"]], ["del", "def", "closeds", ["topological_space"]], ["del", "def", "to_closeds", ["topological_space", "nonempty_compacts"]], ["del", "def", "nonempty_compacts", ["topological_space"]], ["add", "def", "open_nhds_of", ["topological_space"]], ["mod", "theorem", "Sup_s", ["topological_space", "opens"]], ["add", "theorem", "coe_comap", ["topological_space", "opens"]], ["add", "def", "comap", ["topological_space", "opens"]], ["add", "theorem", "comap_id", ["topological_space", "opens"]], ["add", "theorem", "comap_mono", ["topological_space", "opens"]], ["add", "theorem", "comap_val", ["topological_space", "opens"]], ["mod", "theorem", "ext", ["topological_space", "opens"]], ["add", "theorem", "ext_iff", ["topological_space", "opens"]], ["mod", "theorem", "gc", ["topological_space", "opens"]], ["mod", "def", "gi", ["topological_space", "opens"]], ["mod", "def", "is_basis", ["topological_space", "opens"]], ["add", "theorem", "supr_def", ["topological_space", "opens"]], ["add", "theorem", "val_eq_coe", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "binary_compact_cover", ["compact"]], ["add", "theorem", "finite_compact_cover", ["compact"]], ["add", "theorem", "inter", ["compact"]], ["add", "theorem", "exists_compact_superset", []], ["add", "theorem", "exists_open_with_compact_closure", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "compact_univ_pi", []], ["add", "theorem", "exists_compact_subset", []]]}]}, {"timestamp": 1594014106, "sha": "2e140f1e", "message": "refactor(algebra/inj_surj): more lemmas, move to files, rename (#3290)\n* use names `function.?jective.monoid` etc;\n* move definitions to different files;\n* add versions for `semimodules` and various `*_with_zero`;\n* add `funciton.surjective.forall` etc.", "changes": [{"oldPath": null, "newPath": "src/algebra/group/inj_surj.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/inj_surj.lean", "newPath": null, "changes": [["del", "def", "comm_group_of_injective", []], ["del", "def", "comm_group_of_surjective", []], ["del", "def", "comm_monoid_of_injective", []], ["del", "def", "comm_monoid_of_surjective", []], ["del", "def", "comm_ring_of_injective", []], ["del", "def", "comm_ring_of_surjective", []], ["del", "def", "comm_semigroup_of_injective", []], ["del", "def", "comm_semigroup_of_surjective", []], ["del", "def", "comm_semiring_of_injective", []], ["del", "def", "comm_semiring_of_surjective", []], ["del", "def", "group_of_injective", []], ["del", "def", "group_of_surjective", []], ["del", "def", "monoid_of_injective", []], ["del", "def", "monoid_of_surjective", []], ["del", "def", "ring_of_injective", []], ["del", "def", "ring_of_surjective", []], ["del", "def", "semigroup_of_injective", []], ["del", "def", "semigroup_of_surjective", []], ["del", "def", "semiring_of_injective", []], ["del", "def", "semiring_of_surjective", []]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "cancel_left", ["ring_hom"]], ["mod", "theorem", "cancel_right", ["ring_hom"]]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["del", "theorem", "bijective", ["mul_action"]]]}, {"oldPath": "src/group_theory/submonoid/basic.lean", "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "theorem", "coe_injective", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid/operations.lean", "newPath": "src/group_theory/submonoid/operations.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "eq_iff'", ["function", "injective"]], ["add", "theorem", "ne_iff'", ["function", "injective"]], ["add", "theorem", "exists", ["function", "surjective"]], ["add", "theorem", "exists₂", ["function", "surjective"]], ["add", "theorem", "exists₃", ["function", "surjective"]], ["add", "theorem", "forall", ["function", "surjective"]], ["add", "theorem", "forall₂", ["function", "surjective"]], ["add", "theorem", "forall₃", ["function", "surjective"]]]}]}, {"timestamp": 1594009893, "sha": "ffa504c9", "message": "fix(finset/lattice): undo removal of bUnion_preimage_singleton (#3293)\nIn #3189 I removed it, which was a mistake.", "changes": [{"oldPath": "src/data/finset/lattice.lean", "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "bUnion_preimage_singleton", ["finset"]]]}]}, {"timestamp": 1593995988, "sha": "e1f6ed23", "message": "chore(scripts): update nolints.txt (#3294)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593945651, "sha": "0cd500ef", "message": "doc(tactic/explode): expand doc string (#3271)\nExplanation copied from @digama0's Zulip message [here](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/.23explode.20error/near/202396813). Also removed a redundant function and added some type ascriptions.", "changes": [{"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": [["del", "def", "head'", ["tactic", "explode"]], ["mod", "inductive", "status", ["tactic", "explode"]]]}]}, {"timestamp": 1593943980, "sha": "293287d5", "message": "chore(category_theory/over/limits): change instance to def (#3281)\nHaving this as an instance causes confusion since it's a different terminal object to the one inferred by the other limit constructions in the file.", "changes": [{"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["add", "def", "over_has_terminal", ["category_theory", "over"]]]}]}, {"timestamp": 1593942401, "sha": "f39e0d7a", "message": "chore(algebra/category): use preadditivity for biproducts (#3280)\nWe can avoid some scary calculations thanks to abstract nonsense.", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": [["del", "def", "desc", ["AddCommGroup", "has_colimit"]], ["del", "theorem", "desc_apply", ["AddCommGroup", "has_colimit"]]]}]}, {"timestamp": 1593889892, "sha": "023d4f7d", "message": "feat(ring_theory/localization): order embedding of ideals, local ring instance (#3287)", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "prime_compl", ["ideal"]], ["add", "def", "at_prime", ["localization"]], ["add", "def", "at_prime", ["localization_map"]], ["mod", "def", "codomain", ["localization_map"]], ["add", "def", "le_order_embedding", ["localization_map"]], ["add", "theorem", "map_comap", ["localization_map"]], ["add", "theorem", "mk'_mul_mk'_eq_one'", ["localization_map"]], ["add", "theorem", "mk'_mul_mk'_eq_one", ["localization_map"]], ["mod", "theorem", "mk'_self", ["localization_map"]], ["add", "theorem", "mk'_surjective", ["localization_map"]]]}]}, {"timestamp": 1593874956, "sha": "08e1adc8", "message": "feat(data/pnat): basic pnat facts needed for perfect numbers (3094) (#3274)\ndefine pnat.coprime\nadd some basic lemmas pnats, mostly about coprime, gcd\ndesignate some existing lemmas with @[simp]", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "coe_eq_one_iff", ["pnat"]], ["add", "theorem", "coe_inj", ["pnat"]], ["add", "theorem", "coprime_dvd_left", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_left", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_left_right", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_right", ["pnat", "coprime"]], ["add", "theorem", "factor_eq_gcd_right_right", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_left_cancel", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_left_cancel_right", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_right_cancel", ["pnat", "coprime"]], ["add", "theorem", "gcd_mul_right_cancel_right", ["pnat", "coprime"]], ["add", "theorem", "mul", ["pnat", "coprime"]], ["add", "theorem", "mul_right", ["pnat", "coprime"]], ["add", "theorem", "pow", ["pnat", "coprime"]], ["add", "theorem", "symm", ["pnat", "coprime"]], ["add", "def", "coprime", ["pnat"]], ["add", "theorem", "coprime_coe", ["pnat"]], ["add", "theorem", "coprime_one", ["pnat"]], ["add", "theorem", "dvd_prime", ["pnat"]], ["add", "theorem", "eq_one_of_lt_two", ["pnat"]], ["add", "theorem", "exists_prime_and_dvd", ["pnat"]], ["add", "theorem", "gcd_comm", ["pnat"]], ["add", "theorem", "gcd_eq_left", ["pnat"]], ["add", "theorem", "gcd_eq_left_iff_dvd", ["pnat"]], ["add", "theorem", "gcd_eq_right_iff_dvd", ["pnat"]], ["add", "theorem", "gcd_one", ["pnat"]], ["add", "theorem", "le_of_dvd", ["pnat"]], ["add", "theorem", "not_prime_one", ["pnat"]], ["add", "theorem", "one_coprime", ["pnat"]], ["add", "theorem", "one_gcd", ["pnat"]], ["add", "theorem", "ne_one", ["pnat", "prime"]], ["add", "theorem", "not_dvd_one", ["pnat", "prime"]], ["add", "theorem", "one_lt", ["pnat", "prime"]], ["add", "theorem", "prime_two", ["pnat"]]]}, {"oldPath": "test/interval_cases.lean", "newPath": "test/interval_cases.lean", "changes": []}]}, {"timestamp": 1593851564, "sha": "0d249d70", "message": "feat(analysis/normed_space/*): group of units of a normed ring is open (#3210)\nIn a complete normed ring, the group of units is an open subset of the ring ([Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Inversion.20is.20analytic))\nSupporting material:\n* `topology.metric_space.basic`, `analysis.normed_space.basic`, `normed_space.operator_norm`: some lemmas about limits and infinite sums in metric and normed spaces\n* `analysis.normed_space.basic`, `normed_space.operator_norm`: left- and right- multiplication in a normed ring (algebra) is a bounded homomorphism (linear map); the algebra/linear-map versions are not needed for the main result but included for completeness\n* `analysis.normed_space.basic`: a normed algebra is `nonzero` (not needed for the main result) ([Zulip](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Dangerous.20instance))\n* `algebra.group_with_zero`: the `subsingleton_or_nonzero` dichotomy for monoids with zero ([Zulip](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/zero.20ring/near/202202187)) (written by @jcommelin )\n* `analysis.specific_limits`: results on geometric series in a complete `normed_ring`; relies on\n* `algebra.geom_sum`: \"left\" variants of some existing \"right\" lemmas on finite geometric series; relies on\n* `algebra.opposites`, `algebra.group_power`, `algebra.big_operators`: lemmas about the opposite ring ([Zulip](https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/Finite.20geometric.20series))", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "op_sum", ["with_top"]], ["add", "theorem", "unop_sum", ["with_top"]]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "mul_geom_sum", []], ["add", "theorem", "mul_neg_geom_sum", []], ["add", "theorem", "op_geom_series", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "op_pow", ["units"]], ["add", "theorem", "unop_pow", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "subsingleton_or_nonzero", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "coe_op_add_hom", ["opposite"]], ["add", "theorem", "coe_unop_add_hom", ["opposite"]], ["add", "def", "op_add_hom", ["opposite"]], ["add", "theorem", "op_sub", ["opposite"]], ["add", "def", "unop_add_hom", ["opposite"]], ["add", "theorem", "unop_sub", ["opposite"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "continuous_of_bound", ["add_monoid_hom"]], ["add", "theorem", "lipschitz_of_bound", ["add_monoid_hom"]], ["add", "theorem", "eventually_norm_pow_le", []], ["add", "theorem", "has_sum_of_bounded_monoid_hom_of_has_sum", []], ["add", "theorem", "has_sum_of_bounded_monoid_hom_of_summable", []], ["add", "theorem", "mul_left_bound", []], ["add", "theorem", "mul_right_bound", []], ["add", "theorem", "norm_one", ["normed_algebra"]], ["add", "theorem", "to_nonzero", ["normed_algebra"]], ["add", "theorem", "zero_ne_one", ["normed_algebra"]], ["add", "theorem", "squeeze_zero_norm'", []], ["add", "theorem", "squeeze_zero_norm", []], ["add", "theorem", "summable_of_norm_bounded_eventually", []], ["add", "theorem", "norm_pos", ["units"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "has_sum", ["continuous_linear_map"]], ["add", "theorem", "has_sum_of_summable", ["continuous_linear_map"]], ["add", "def", "lmul_left", ["continuous_linear_map"]], ["add", "theorem", "lmul_left_apply", ["continuous_linear_map"]], ["add", "def", "lmul_right", ["continuous_linear_map"]], ["add", "theorem", "lmul_right_apply", ["continuous_linear_map"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/units.lean", "changes": [["add", "def", "add", ["units"]], ["add", "theorem", "add_coe", ["units"]], ["add", "theorem", "is_open", ["units"]], ["add", "def", "one_sub", ["units"]], ["add", "theorem", "one_sub_coe", ["units"]], ["add", "def", "unit_of_nearby", ["units"]], ["add", "theorem", "unit_of_nearby_coe", ["units"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "geom_series_mul_neg", []], ["add", "theorem", "mul_neg_geom_series", []], ["add", "theorem", "summable_geometric_of_norm_lt_1", ["normed_ring"]], ["mod", "theorem", "tendsto_pow_at_top_nhds_0_of_norm_lt_1", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "squeeze_zero'", []]]}]}, {"timestamp": 1593843441, "sha": "c2886d31", "message": "fix(tactic/default): import tactic.basic (#3284)\nSome basic tactics and commands (e.g. `#explode`) were not available even if `import tactic` was used. I added `import tactic.basic` to `tactic/default.lean` to remedy this.", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}]}, {"timestamp": 1593823171, "sha": "2a43e26f", "message": "chore(scripts): update nolints.txt (#3283)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593817244, "sha": "742dc887", "message": "feat(ring_theory/polynomial): rational root theorem and integral root theorem (#3241)\nProve the rational root theorem for a unique factorization domain `A`: Let `K` be the field of fractions of `A` and `p` a polynomial over `A`. If `x : K` is a root of `p`, then the numerator of `x` divides the constant coefficient and the denominator of `x` divides the leading coefficient. (This required defining the numerator and denominator.) As a corollary we have the integral root theorem: if `p` is monic, then its roots in `K` are in fact elements of `A`. As a second corollary, the integral closure of `A` in `K` is `A` itself.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "dvd_symm_iff_of_irreducible", []], ["add", "theorem", "dvd_symm_of_irreducible", []], ["add", "theorem", "dvd_of_dvd_pow", ["prime"]]]}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "map_units_inv", ["ring_hom"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "mul", ["is_unit"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "map_units_inv", ["monoid_hom"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "mul_left_dvd_of_dvd", ["is_unit"]], ["add", "theorem", "mul_right_dvd_of_dvd", ["is_unit"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "dvd_term_of_dvd_eval_of_dvd_terms", ["polynomial"]], ["add", "theorem", "dvd_term_of_is_root_of_dvd_terms", ["polynomial"]], ["add", "theorem", "is_root_of_aeval_algebra_map_eq_zero", ["polynomial"]], ["add", "theorem", "is_root_of_eval₂_map_eq_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["add", "theorem", "left_dvd_or_dvd_right_of_dvd_prime_mul", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "eq_zero_of_num_eq_zero", ["fraction_map"]], ["add", "theorem", "exists_reduced_fraction", ["fraction_map"]], ["add", "theorem", "is_integer_of_is_unit_denom", ["fraction_map"]], ["add", "theorem", "is_unit_denom_of_num_eq_zero", ["fraction_map"]], ["add", "theorem", "mk'_num_denom", ["fraction_map"]], ["add", "theorem", "num_denom_reduced", ["fraction_map"]], ["add", "theorem", "num_mul_denom_eq_num_iff_eq'", ["fraction_map"]], ["add", "theorem", "num_mul_denom_eq_num_iff_eq", ["fraction_map"]], ["add", "theorem", "num_mul_denom_eq_num_mul_denom_iff_eq", ["fraction_map"]], ["add", "theorem", "mul_mem_non_zero_divisors", []]]}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/rational_root.lean", "changes": [["add", "theorem", "coeff_scale_roots", []], ["add", "theorem", "coeff_scale_roots_nat_degree", []], ["add", "theorem", "degree_scale_roots", []], ["add", "theorem", "denom_dvd_of_is_root", []], ["add", "theorem", "is_integer_of_is_root_of_monic", []], ["add", "theorem", "monic_scale_roots_iff", []], ["add", "theorem", "nat_degree_scale_roots", []], ["add", "theorem", "num_dvd_of_is_root", []], ["add", "theorem", "num_is_root_scale_roots_of_aeval_eq_zero", []], ["add", "theorem", "scale_roots_aeval_eq_zero", []], ["add", "theorem", "scale_roots_aeval_eq_zero_of_aeval_div_eq_zero", []], ["add", "theorem", "scale_roots_aeval_eq_zero_of_aeval_mk'_eq_zero", []], ["add", "theorem", "scale_roots_eval₂_eq_zero", []], ["add", "theorem", "scale_roots_eval₂_eq_zero_of_eval₂_div_eq_zero", []], ["add", "theorem", "scale_roots_ne_zero", []], ["add", "theorem", "support_scale_roots_eq", []], ["add", "theorem", "support_scale_roots_le", []], ["add", "theorem", "integer_of_integral", ["unique_factorization_domain"]], ["add", "theorem", "integrally_closed", ["unique_factorization_domain"]], ["add", "theorem", "zero_scale_roots", []]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "dvd_of_dvd_mul_left_of_no_prime_factors", ["unique_factorization_domain"]], ["add", "theorem", "dvd_of_dvd_mul_right_of_no_prime_factors", ["unique_factorization_domain"]], ["add", "theorem", "exists_reduced_factors'", ["unique_factorization_domain"]], ["add", "theorem", "exists_reduced_factors", ["unique_factorization_domain"]], ["add", "theorem", "no_factors_of_no_prime_factors", ["unique_factorization_domain"]]]}]}, {"timestamp": 1593813628, "sha": "c4bf9e44", "message": "chore(algebra/ordered_group): deduplicate (#3279)\nFor historical reasons we have some lemmas duplicated for `ordered_comm_monoid`\nand `ordered_cancel_comm_monoid`. This PR merges some duplicates.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "le_mul_of_le_of_one_le'", []], ["del", "theorem", "le_mul_of_one_le_left''", []], ["del", "theorem", "le_mul_of_one_le_of_le'", []], ["del", "theorem", "le_mul_of_one_le_right''", []], ["del", "theorem", "lt_of_mul_lt_mul_left''", []], ["del", "theorem", "lt_of_mul_lt_mul_right''", []], ["del", "theorem", "mul_eq_one_iff_eq_one_and_eq_one_of_one_le_of_one_le", []], ["del", "theorem", "mul_le_mul_left''", []], ["mod", "theorem", "mul_le_mul_left'", []], ["del", "theorem", "mul_le_mul_right''", []], ["mod", "theorem", "mul_le_mul_right'", []], ["del", "theorem", "mul_le_one''", []], ["del", "theorem", "mul_le_one_of_le_one_of_le_one", []], ["del", "theorem", "mul_one_lt'", []], ["del", "theorem", "mul_one_lt", []], ["del", "theorem", "mul_one_lt_of_one_le_of_one_lt'", []], ["del", "theorem", "mul_one_lt_of_one_le_of_one_lt", []], ["del", "theorem", "mul_one_lt_of_one_lt_of_one_le'", []], ["del", "theorem", "mul_one_lt_of_one_lt_of_one_le", []], ["del", "theorem", "one_le_mul'", []], ["del", "theorem", "one_le_mul_of_one_le_of_one_le", []], ["add", "theorem", "one_lt_mul'", []], ["add", "theorem", "one_lt_mul_of_le_of_lt'", []], ["add", "theorem", "one_lt_mul_of_lt_of_le'", []]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/multiset/basic.lean", "newPath": "src/data/multiset/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "tendsto_at_top_add_left_of_le'", ["filter"]], ["mod", "theorem", "tendsto_at_top_add_nonneg_left'", ["filter"]], ["mod", "theorem", "tendsto_at_top_add_nonneg_right'", ["filter"]], ["mod", "theorem", "tendsto_at_top_add_right_of_le'", ["filter"]], ["mod", "theorem", "tendsto_at_top_mono'", ["filter"]], ["mod", "theorem", "tendsto_at_top_of_add_bdd_above_left'", ["filter"]], ["mod", "theorem", "tendsto_at_top_of_add_bdd_above_right'", ["filter"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1593813626, "sha": "f1637e56", "message": "feat(field_theory/splitting_field): definition of splitting field (#3272)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "X_dvd_iff", ["polynomial"]], ["add", "theorem", "X_sub_C_ne_zero", ["polynomial"]], ["add", "theorem", "irreducible_X", ["polynomial"]], ["add", "theorem", "irreducible_X_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X", ["polynomial"]], ["add", "theorem", "nat_degree_X_le", ["polynomial"]], ["mod", "theorem", "nat_degree_X_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_div_by_monic", ["polynomial"]], ["add", "theorem", "nat_degree_le_nat_degree", ["polynomial"]], ["mod", "theorem", "nat_degree_le_of_degree_le", ["polynomial"]], ["add", "theorem", "not_is_unit_X", ["polynomial"]], ["add", "theorem", "not_is_unit_X_sub_C", ["polynomial"]], ["add", "theorem", "prime_X", ["polynomial"]], ["add", "theorem", "prime_X_sub_C", ["polynomial"]], ["add", "theorem", "root_mul", ["polynomial"]], ["add", "theorem", "roots_X_sub_C", ["polynomial"]], ["add", "theorem", "roots_mul", ["polynomial"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "X_sub_C_mul_remove_factor", ["polynomial"]], ["add", "def", "factor", ["polynomial"]], ["add", "theorem", "factor_dvd_of_degree_ne_zero", ["polynomial"]], ["add", "theorem", "factor_dvd_of_nat_degree_ne_zero", ["polynomial"]], ["add", "theorem", "factor_dvd_of_not_is_unit", ["polynomial"]], ["add", "theorem", "nat_degree_remove_factor'", ["polynomial"]], ["add", "theorem", "nat_degree_remove_factor", ["polynomial"]], ["add", "def", "remove_factor", ["polynomial"]], ["add", "theorem", "splits_of_splits_of_dvd", ["polynomial"]], ["add", "theorem", "adjoin_roots", ["polynomial", "splitting_field"]], ["add", "def", "lift", ["polynomial", "splitting_field"]], ["add", "def", "splitting_field", ["polynomial"]], ["add", "theorem", "adjoin_roots", ["polynomial", "splitting_field_aux"]], ["add", "theorem", "algebra_map_succ", ["polynomial", "splitting_field_aux"]], ["add", "theorem", "exists_lift", ["polynomial", "splitting_field_aux"]], ["add", "theorem", "succ", ["polynomial", "splitting_field_aux"]], ["add", "def", "splitting_field_aux", ["polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "theorem", "adjoin_root_eq_top", ["adjoin_root"]], ["add", "theorem", "aeval_eq", ["adjoin_root"]], ["add", "theorem", "algebra_map_eq", ["adjoin_root"]], ["add", "theorem", "induction_on", ["adjoin_root"]], ["add", "theorem", "lift_comp_of", ["adjoin_root"]], ["mod", "theorem", "lift_root", ["adjoin_root"]], ["add", "theorem", "mk_X", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "comap_top", ["algebra"]], ["add", "theorem", "map_bot", ["algebra"]], ["add", "theorem", "map_top", ["algebra"]], ["add", "def", "comap'", ["subalgebra"]], ["add", "def", "map", ["subalgebra"]], ["add", "theorem", "map_le", ["subalgebra"]]]}, {"oldPath": null, "newPath": "src/ring_theory/algebra_tower.lean", "changes": [["add", "theorem", "adjoin_algebra_map'", ["algebra"]], ["add", "theorem", "adjoin_algebra_map", ["algebra"]], ["add", "theorem", "ext", ["is_algebra_tower", "algebra"]], ["add", "theorem", "algebra_map_apply", ["is_algebra_tower"]], ["add", "theorem", "algebra_map_eq", ["is_algebra_tower"]], ["add", "theorem", "comap_eq", ["is_algebra_tower"]], ["add", "theorem", "of_algebra_map_eq", ["is_algebra_tower"]], ["add", "theorem", "range_under_adjoin", ["is_algebra_tower"]], ["add", "def", "subalgebra_comap", ["is_algebra_tower"]], ["add", "theorem", "subalgebra_comap_top", ["is_algebra_tower"]], ["add", "def", "to_alg_hom", ["is_algebra_tower"]]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": [["add", "theorem", "exists_irreducible_of_degree_pos", ["polynomial"]], ["add", "theorem", "exists_irreducible_of_nat_degree_ne_zero", ["polynomial"]], ["add", "theorem", "exists_irreducible_of_nat_degree_pos", ["polynomial"]]]}]}, {"timestamp": 1593808976, "sha": "48dea2fd", "message": "feat(algebra/pointwise): make instances global (#3240)\nadd image2 and image3, the images of binary and ternary functions\ncleanup in algebra/pointwise\nmake many variables implicit\nmake many names shorter\nadd some lemmas\nadd more simp lemmas\nadd type set_semiring as alias for set, with semiring instance using union as \"addition\"", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["mod", "theorem", "mem_inv_smul_set_iff", []], ["mod", "theorem", "mem_smul_set_iff_inv_smul_mem", []], ["add", "theorem", "Union_mul_left_image", ["set"]], ["add", "theorem", "Union_mul_right_image", ["set"]], ["del", "def", "add_comm_monoid", ["set"]], ["del", "def", "comm_monoid", ["set"]], ["add", "theorem", "compl_inv", ["set"]], ["add", "theorem", "empty_mul", ["set"]], ["del", "theorem", "empty_pointwise_mul", ["set"]], ["add", "theorem", "mul", ["set", "finite"]], ["add", "def", "fintype_mul", ["set"]], ["add", "theorem", "image2_mul", ["set"]], ["add", "theorem", "image2_smul", ["set"]], ["add", "def", "image_hom", ["set"]], ["add", "theorem", "image_inv", ["set"]], ["add", "theorem", "image_mul", ["set"]], ["add", "theorem", "image_mul_left'", ["set"]], ["add", "theorem", "image_mul_left", ["set"]], ["add", "theorem", "image_mul_prod", ["set"]], ["add", "theorem", "image_mul_right'", ["set"]], ["add", "theorem", "image_mul_right", ["set"]], ["add", "theorem", "image_one", ["set"]], ["del", "theorem", "image_pointwise_mul", ["set"]], ["add", "theorem", "image_smul", ["set"]], ["add", "theorem", "image_smul_prod", ["set"]], ["add", "theorem", "inter_inv", ["set"]], ["add", "theorem", "inv_mem_inv", ["set"]], ["add", "theorem", "inv_preimage", ["set"]], ["add", "theorem", "mem_inv", ["set"]], ["add", "theorem", "mem_mul", ["set"]], ["add", "theorem", "mem_one", ["set"]], ["del", "theorem", "mem_pointwise_mul", ["set"]], ["del", "theorem", "mem_pointwise_one", ["set"]], ["add", "theorem", "mem_smul", ["set"]], ["mod", "theorem", "mem_smul_set", ["set"]], ["add", "theorem", "mul_empty", ["set"]], ["add", "theorem", "mul_mem_mul", ["set"]], ["del", "theorem", "mul_mem_pointwise_mul", ["set"]], ["add", "theorem", "mul_singleton", ["set"]], ["add", "theorem", "mul_subset_mul", ["set"]], ["add", "theorem", "mul_union", ["set"]], ["add", "theorem", "mul", ["set", "nonempty"]], ["del", "theorem", "pointwise_mul", ["set", "nonempty"]], ["add", "theorem", "one_mem_one", ["set"]], ["add", "theorem", "one_nonempty", ["set"]], ["add", "theorem", "one_subset", ["set"]], ["del", "def", "pointwise_add_fintype", ["set"]], ["del", "def", "pointwise_inv", ["set"]], ["del", "def", "pointwise_mul", ["set"]], ["del", "def", "pointwise_mul_comm_semiring", ["set"]], ["del", "theorem", "pointwise_mul_empty", ["set"]], ["del", "theorem", "pointwise_mul_eq_Union_mul_left", ["set"]], ["del", "theorem", "pointwise_mul_eq_Union_mul_right", ["set"]], ["del", "theorem", "pointwise_mul_eq_image", ["set"]], ["del", "theorem", "pointwise_mul_finite", ["set"]], ["del", "def", "pointwise_mul_fintype", ["set"]], ["del", "def", "pointwise_mul_image_ring_hom", ["set"]], ["del", "def", "pointwise_mul_monoid", ["set"]], ["del", "def", "pointwise_mul_semigroup", ["set"]], ["del", "def", "pointwise_mul_semiring", ["set"]], ["del", "theorem", "pointwise_mul_subset_mul", ["set"]], ["del", "theorem", "pointwise_mul_union", ["set"]], ["del", "def", "pointwise_one", ["set"]], ["del", "def", "pointwise_smul", ["set"]], ["add", "theorem", "preimage_mul_left_one'", ["set"]], ["add", "theorem", "preimage_mul_left_one", ["set"]], ["add", "theorem", "preimage_mul_preimage_subset", ["set"]], ["add", "theorem", "preimage_mul_right_one'", ["set"]], ["add", "theorem", "preimage_mul_right_one", ["set"]], ["del", "theorem", "preimage_pointwise_mul_preimage_subset", ["set"]], ["add", "def", "set_semiring", ["set"]], ["del", "theorem", "is_monoid_hom", ["set", "singleton"]], ["add", "def", "singleton_hom", ["set"]], ["add", "theorem", "singleton_mul", ["set"]], ["add", "theorem", "singleton_mul_singleton", ["set"]], ["add", "theorem", "singleton_one", ["set"]], ["add", "theorem", "singleton_smul", ["set"]], ["mod", "theorem", "smul_mem_smul_set", ["set"]], ["del", "def", "smul_set", ["set"]], ["del", "def", "smul_set_action", ["set"]], ["mod", "theorem", "smul_set_empty", ["set"]], ["del", "theorem", "smul_set_eq_image", ["set"]], ["del", "theorem", "smul_set_eq_pointwise_smul_singleton", ["set"]], ["mod", "theorem", "smul_set_mono", ["set"]], ["mod", "theorem", "smul_set_union", ["set"]], ["add", "theorem", "union_inv", ["set"]], ["add", "theorem", "union_mul", ["set"]], ["del", "theorem", "union_pointwise_mul", ["set"]], ["add", "theorem", "univ_mul_univ", ["set"]], ["del", "theorem", "univ_pointwise_mul_univ", ["set"]], ["mod", "theorem", "zero_smul_set", []]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "def", "image2", ["set"]], ["add", "theorem", "image2_congr'", ["set"]], ["add", "theorem", "image2_congr", ["set"]], ["add", "theorem", "image2_empty_left", ["set"]], ["add", "theorem", "image2_empty_right", ["set"]], ["add", "theorem", "image2_image2_left", ["set"]], ["add", "theorem", "image2_image2_right", ["set"]], ["add", "theorem", "image2_image_left", ["set"]], ["add", "theorem", "image2_image_right", ["set"]], ["add", "theorem", "image2_inter_subset_left", ["set"]], ["add", "theorem", "image2_inter_subset_right", ["set"]], ["add", "theorem", "image2_left", ["set"]], ["add", "theorem", "image2_right", ["set"]], ["add", "theorem", "image2_singleton", ["set"]], ["add", "theorem", "image2_singleton_left", ["set"]], ["add", "theorem", "image2_singleton_right", ["set"]], ["add", "theorem", "image2_subset", ["set"]], ["add", "theorem", "image2_swap", ["set"]], ["add", "theorem", "image2_union_left", ["set"]], ["add", "theorem", "image2_union_right", ["set"]], ["add", "def", "image3", ["set"]], ["add", "theorem", "image3_congr'", ["set"]], ["add", "theorem", "image3_congr", ["set"]], ["add", "theorem", "image_eta", ["set"]], ["add", "theorem", "image_image2", ["set"]], ["add", "theorem", "image_prod", ["set"]], ["add", "theorem", "mem_image2", ["set"]], ["add", "theorem", "mem_image2_eq", ["set"]], ["add", "theorem", "mem_image2_iff", ["set"]], ["add", "theorem", "mem_image2_of_mem", ["set"]], ["add", "theorem", "mem_image3", ["set"]], ["add", "theorem", "image2", ["set", "nonempty"]], ["add", "theorem", "nonempty_def", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "image2", ["set", "finite"]]]}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": [["mod", "theorem", "image_add_const_Ici", ["set"]], ["mod", "theorem", "image_add_const_Iic", ["set"]], ["mod", "theorem", "image_add_const_Iio", ["set"]], ["mod", "theorem", "image_add_const_Ioi", ["set"]], ["mod", "theorem", "image_neg_Icc", ["set"]], ["mod", "theorem", "image_neg_Ici", ["set"]], ["mod", "theorem", "image_neg_Ico", ["set"]], ["mod", "theorem", "image_neg_Iic", ["set"]], ["mod", "theorem", "image_neg_Iio", ["set"]], ["mod", "theorem", "image_neg_Ioc", ["set"]], ["mod", "theorem", "image_neg_Ioi", ["set"]], ["mod", "theorem", "image_neg_Ioo", ["set"]], ["mod", "theorem", "preimage_neg_Icc", ["set"]], ["mod", "theorem", "preimage_neg_Ici", ["set"]], ["mod", "theorem", "preimage_neg_Ico", ["set"]], ["mod", "theorem", "preimage_neg_Iic", ["set"]], ["mod", "theorem", "preimage_neg_Iio", ["set"]], ["mod", "theorem", "preimage_neg_Ioc", ["set"]], ["mod", "theorem", "preimage_neg_Ioi", ["set"]], ["mod", "theorem", "preimage_neg_Ioo", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_image_left", ["set"]], ["add", "theorem", "Union_image_right", ["set"]]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "eq_inv_smul_iff", []], ["add", "theorem", "inv_smul_eq_iff", []]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "eq_iff", ["function", "injective2"]], ["add", "def", "injective2", ["function"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "is_monoid_hom", ["filter", "map"]], ["del", "theorem", "map_pointwise_mul", ["filter"]], ["del", "theorem", "map_pointwise_one", ["filter"]], ["add", "theorem", "mem_mul", ["filter"]], ["add", "theorem", "mem_one", ["filter"]], ["del", "theorem", "mem_pointwise_mul", ["filter"]], ["del", "theorem", "mem_pointwise_one", ["filter"]], ["add", "theorem", "mul_mem_mul", ["filter"]], ["del", "theorem", "mul_mem_pointwise_mul", ["filter"]], ["add", "theorem", "mul_ne_bot", ["filter"]], ["del", "theorem", "pointwise_add_map_is_add_monoid_hom", ["filter"]], ["del", "def", "pointwise_mul", ["filter"]], ["del", "theorem", "pointwise_mul_assoc", ["filter"]], ["del", "theorem", "pointwise_mul_le_mul", ["filter"]], ["del", "theorem", "pointwise_mul_map_is_monoid_hom", ["filter"]], ["del", "def", "pointwise_mul_monoid", ["filter"]], ["del", "theorem", "pointwise_mul_ne_bot", ["filter"]], ["del", "theorem", "pointwise_mul_one", ["filter"]], ["del", "def", "pointwise_one", ["filter"]], ["del", "theorem", "pointwise_one_mul", ["filter"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["mod", "theorem", "mul_subset_mul", ["submodule"]], ["mod", "theorem", "pow_subset_pow", ["submodule"]], ["mod", "theorem", "smul_def", ["submodule"]], ["mod", "theorem", "smul_le_smul", ["submodule"]], ["mod", "def", "ring_hom", ["submodule", "span"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "theorem", "span_singleton_one", ["ideal"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "is_open_mul_left", []], ["add", "theorem", "is_open_mul_right", []], ["del", "theorem", "is_open_pointwise_mul_left", []], ["del", "theorem", "is_open_pointwise_mul_right", []], ["mod", "theorem", "nhds_is_mul_hom", []], ["add", "theorem", "nhds_mul", []], ["del", "theorem", "nhds_pointwise_mul", []]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1593788691, "sha": "f9f0ca6d", "message": "feat(analysic/calculus/times_cont_diff): add times_cont_diff_within_at (#3262)\nI want to refactor manifolds, defining local properties in the model space and showing that they automatically inherit nice behavior in manifolds. \nIn this PR, we modify a little bit the definition of smooth functions in vector spaces by introducing a predicate `times_cont_diff_within_at` (just like we already have `continuous_within_at` or `differentiable_within_at`) and using it in all definitions and proofs. This will be the basis of the locality argument in manifolds.", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "comp_times_cont_diff_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "times_cont_diff_within_at_comp_iff", ["continuous_linear_equiv"]], ["add", "theorem", "times_cont_diff_within_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "times_cont_diff_at", ["times_cont_diff"]], ["add", "theorem", "continuous_at", ["times_cont_diff_at"]], ["add", "theorem", "continuous_linear_map_comp", ["times_cont_diff_at"]], ["add", "theorem", "differentiable", ["times_cont_diff_at"]], ["add", "theorem", "has_strict_fderiv_at", ["times_cont_diff_at"]], ["add", "theorem", "of_le", ["times_cont_diff_at"]], ["add", "theorem", "times_cont_diff_within_at", ["times_cont_diff_at"]], ["add", "def", "times_cont_diff_at", []], ["add", "theorem", "times_cont_diff_at_const", []], ["add", "theorem", "times_cont_diff_at_top", []], ["add", "theorem", "times_cont_diff_iff_times_cont_diff_at", []], ["add", "theorem", "comp'", ["times_cont_diff_on"]], ["del", "theorem", "has_strict_fderiv_at", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_diff_within_at", ["times_cont_diff_on"]], ["del", "theorem", "times_cont_diff_on_nat", []], ["add", "theorem", "comp'", ["times_cont_diff_within_at"]], ["add", "theorem", "comp", ["times_cont_diff_within_at"]], ["add", "theorem", "comp_continuous_linear_map", ["times_cont_diff_within_at"]], ["add", "theorem", "congr", ["times_cont_diff_within_at"]], ["add", "theorem", "congr_of_eventually_eq'", ["times_cont_diff_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["times_cont_diff_within_at"]], ["add", "theorem", "continuous_linear_map_comp", ["times_cont_diff_within_at"]], ["add", "theorem", "continuous_within_at'", ["times_cont_diff_within_at"]], ["add", "theorem", "continuous_within_at", ["times_cont_diff_within_at"]], ["add", "theorem", "differentiable_within_at'", ["times_cont_diff_within_at"]], ["add", "theorem", "differentiable_within_at", ["times_cont_diff_within_at"]], ["add", "theorem", "mono", ["times_cont_diff_within_at"]], ["add", "theorem", "of_le", ["times_cont_diff_within_at"]], ["add", "theorem", "prod", ["times_cont_diff_within_at"]], ["add", "theorem", "times_cont_diff_at", ["times_cont_diff_within_at"]], ["add", "theorem", "times_cont_diff_on", ["times_cont_diff_within_at"]], ["add", "def", "times_cont_diff_within_at", []], ["add", "theorem", "times_cont_diff_within_at_const", []], ["add", "theorem", "times_cont_diff_within_at_inter'", []], ["add", "theorem", "times_cont_diff_within_at_inter", []], ["add", "theorem", "times_cont_diff_within_at_nat", []], ["add", "theorem", "times_cont_diff_within_at_succ_iff_has_fderiv_within_at", []], ["add", "theorem", "times_cont_diff_within_at_top", []], ["add", "theorem", "times_cont_diff_within_at_univ", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_inter", ["set"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "mem_nhds_within_insert", []]]}]}, {"timestamp": 1593768085, "sha": "53c15319", "message": "feat(geometry/manifold/smooth_manifold_with_corners): product of smooth manifolds with corners (#3250)", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "map_prod", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_diff_on_fst", []], ["add", "theorem", "times_cont_diff_on_snd", []]]}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["mod", "theorem", "map_fst'", ["prod"]], ["mod", "theorem", "map_fst", ["prod"]], ["mod", "theorem", "map_snd'", ["prod"]], ["mod", "theorem", "map_snd", ["prod"]], ["add", "theorem", "prod_map", []]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": [["mod", "theorem", "mem_atlas_iff", ["basic_smooth_bundle_core"]]]}, {"oldPath": "src/geometry/manifold/charted_space.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["add", "def", "model_prod", []], ["add", "theorem", "model_prod_range_prod_id", []], ["add", "theorem", "prod_charted_space_chart_at", []]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["mod", "theorem", "tangent_map_chart_symm", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "model_with_corners_prod_coe", []], ["add", "theorem", "model_with_corners_prod_coe_symm", []], ["add", "theorem", "model_with_corners_prod_to_local_equiv", []], ["add", "theorem", "times_cont_diff_groupoid_prod", []]]}]}, {"timestamp": 1593765516, "sha": "e236160f", "message": "chore(order/filter/basic): implicit arg in `eventually_of_forall` (#3277)\nMake `l : filter α` argument of `eventually_of_forall` implicit\nbecause everywhere in `mathlib` it was used as `eventually_of_forall _`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "eventually_of_forall", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1593761241, "sha": "56ed551e", "message": "fix(algebra/group_with_zero): fix left/right (#3278)\nRename `mul_inv_cancel_left'`/`mul_inv_cancel_right'` to match\n`mul_inv_cancel_left`/`mul_inv_cancel_right`.", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "inv_mul_cancel_left'", []], ["mod", "theorem", "inv_mul_cancel_right'", []], ["mod", "theorem", "mul_inv_cancel_left'", []], ["mod", "theorem", "mul_inv_cancel_right'", []]]}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}]}, {"timestamp": 1593750492, "sha": "303740d4", "message": "feat(category_theory/abelian): every abelian category is preadditive (#3247)", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "def", "has_finite_biproducts", ["category_theory", "abelian"]], ["add", "def", "abelian", ["category_theory", "non_preadditive_abelian"]]]}, {"oldPath": null, "newPath": "src/category_theory/abelian/non_preadditive.lean", "changes": [["add", "theorem", "add_assoc", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "add_comm", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "add_comp", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "add_def", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "add_neg", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "add_neg_self", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "add_zero", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "comp_add", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "comp_sub", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "epi_is_cokernel_of_kernel", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "epi_of_zero_cancel", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "epi_of_zero_cokernel", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "has_add", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "has_colimit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "has_limit_parallel_pair", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "has_neg", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "has_sub", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "is_colimit_σ", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "is_iso_of_mono_of_epi", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "lift_map", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "lift_sub_lift", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "lift_σ", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "mono_is_kernel_of_cokernel", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "mono_of_cancel_zero", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "mono_of_zero_kernel", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "neg_add", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "neg_add_self", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "neg_def", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "neg_neg", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "neg_sub'", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "neg_sub", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "preadditive", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "pullback_of_mono", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "pushout_of_epi", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "r", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "strong_epi_of_epi", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "sub_add", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "sub_comp", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "sub_def", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "sub_self", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "sub_sub_sub", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "sub_zero", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "zero_cokernel_of_zero_cancel", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "zero_kernel_of_cancel_zero", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "Δ", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "Δ_map", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "Δ_σ", ["category_theory", "non_preadditive_abelian"]], ["add", "def", "σ", ["category_theory", "non_preadditive_abelian"]], ["add", "theorem", "σ_comp", ["category_theory", "non_preadditive_abelian"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "def", "nat_iso_functor", ["category_theory", "discrete"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "of_has_finite_coproducts", ["category_theory", "limits", "has_finite_biproducts"]], ["add", "def", "of_has_finite_products", ["category_theory", "limits", "has_finite_biproducts"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "π_of_π", ["category_theory", "limits", "cokernel_cofork"]], ["add", "theorem", "ι_of_ι", ["category_theory", "limits", "kernel_fork"]]]}]}, {"timestamp": 1593737915, "sha": "9b086e10", "message": "chore(*): reduce imports (#3235)\nThe RFC pull request simply removes some `import tactic` or `import tactic.basic`, and then makes the necessary changes in later files to import things as needed.\nI'm not sure if it's useful or not", "changes": [{"oldPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/biproducts.lean", "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/number_theory/lucas_lehmer.lean", "newPath": "src/number_theory/lucas_lehmer.lean", "changes": []}, {"oldPath": "src/number_theory/primorial.lean", "newPath": "src/number_theory/primorial.lean", "changes": []}, {"oldPath": "src/order/rel_classes.lean", "newPath": "src/order/rel_classes.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}]}, {"timestamp": 1593735754, "sha": "6a49975f", "message": "feat(category_theory/limits): fully faithful functors reflect limits and colimits (#3269)\nA fully faithful functor reflects limits and colimits", "changes": [{"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": [["add", "def", "fully_faithful_reflects_colimits", ["category_theory", "limits"]], ["add", "def", "fully_faithful_reflects_limits", ["category_theory", "limits"]]]}]}, {"timestamp": 1593722717, "sha": "838dc66e", "message": "feat(topology/basic): add `eventually_eventually_nhds` (#3266)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "bind_inf_principal", ["filter"]], ["add", "theorem", "bind_le", ["filter"]], ["del", "theorem", "bind_mono2", ["filter"]], ["mod", "theorem", "bind_mono", ["filter"]], ["del", "theorem", "bind_sup", ["filter"]], ["add", "theorem", "eventually_bind", ["filter"]], ["add", "theorem", "le", ["filter", "eventually_eq"]], ["add", "theorem", "trans_le", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_eq_bind", ["filter"]], ["add", "theorem", "antisymm", ["filter", "eventually_le"]], ["add", "theorem", "congr", ["filter", "eventually_le"]], ["add", "theorem", "refl", ["filter", "eventually_le"]], ["add", "theorem", "trans", ["filter", "eventually_le"]], ["add", "theorem", "trans_eq", ["filter", "eventually_le"]], ["add", "def", "eventually_le", ["filter"]], ["add", "theorem", "eventually_le_bind", ["filter"]], ["add", "theorem", "eventually_le_congr", ["filter"]], ["mod", "theorem", "inf_principal_ne_bot_iff", ["filter"]], ["add", "theorem", "join_le", ["filter"]], ["add", "theorem", "join_mono", ["filter"]], ["add", "theorem", "mem_bind_sets'", ["filter"]], ["add", "theorem", "sup_bind", ["filter"]]]}, {"oldPath": "src/order/filter/germ.lean", "newPath": "src/order/filter/germ.lean", "changes": [["del", "theorem", "le", ["filter", "eventually_eq"]], ["del", "theorem", "trans_le", ["filter", "eventually_eq"]], ["del", "theorem", "antisymm", ["filter", "eventually_le"]], ["del", "theorem", "congr", ["filter", "eventually_le"]], ["del", "theorem", "refl", ["filter", "eventually_le"]], ["del", "theorem", "trans", ["filter", "eventually_le"]], ["del", "theorem", "trans_eq", ["filter", "eventually_le"]], ["del", "def", "eventually_le", ["filter"]], ["del", "theorem", "eventually_le_congr", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "cluster_pt_principal_iff", []], ["add", "theorem", "eventually_eventually_eq_nhds", []], ["add", "theorem", "eventually_eventually_le_nhds", []], ["add", "theorem", "eventually_eventually_nhds", []], ["add", "theorem", "eventually_nhds_iff", []], ["add", "theorem", "eventually_nhds", ["filter", "eventually"]], ["add", "theorem", "eventually_eq_nhds", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_le_nhds", ["filter", "eventually_le"]], ["add", "theorem", "nhds_bind_nhds", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "eventually_nhds_nhds_within", []], ["add", "theorem", "eventually_nhds_within_iff", []], ["add", "theorem", "eventually_nhds_within_nhds_within", []], ["add", "theorem", "nhds_bind_nhds_within", []]]}]}, {"timestamp": 1593718706, "sha": "d84c48c8", "message": "feat(data/real/cardinality): cardinalities of intervals of reals (#3252)\nUse the existing result `mk_real` to deduce corresponding results for\nall eight kinds of intervals of reals.\nIt's convenient for this result to add a new lemma to\n`data.set.intervals.image_preimage` about the image of an interval\nunder `inv`. Just as there are only a few results there about images\nof intervals under multiplication rather than a full set, so I just\nadded the result I needed rather than all the possible variants. (I\nthink there are something like 36 reasonable variants of that lemma\nthat could be stated, for (image or preimage - the same thing in this\ncase, but still separate statements) x (interval in positive or\nnegative reals) x (end closer to 0 is 0 (open), nonzero (open) or\nnonzero (closed)) x (other end is open, closed or infinite).)", "changes": [{"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": [["add", "theorem", "mk_Icc_real", ["cardinal"]], ["add", "theorem", "mk_Ici_real", ["cardinal"]], ["add", "theorem", "mk_Ico_real", ["cardinal"]], ["add", "theorem", "mk_Iic_real", ["cardinal"]], ["add", "theorem", "mk_Iio_real", ["cardinal"]], ["add", "theorem", "mk_Ioc_real", ["cardinal"]], ["add", "theorem", "mk_Ioi_real", ["cardinal"]], ["add", "theorem", "mk_Ioo_real", ["cardinal"]], ["add", "theorem", "mk_univ_real", ["cardinal"]]]}, {"oldPath": "src/data/set/intervals/image_preimage.lean", "newPath": "src/data/set/intervals/image_preimage.lean", "changes": [["add", "theorem", "image_inv_Ioo_0_left", ["set"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_union_le", ["cardinal"]]]}]}, {"timestamp": 1593716147, "sha": "e4fdc750", "message": "refactor(analysis/calculus/*deriv): use eventually_eq in congruence statements (#3261)\nUse `eventually_eq` instead of `mem_sets` for congruence lemmas in continuity and differentiability statements.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["del", "theorem", "deriv_congr_of_mem_nhds", []], ["del", "theorem", "deriv_within_congr_of_mem_nhds_within", []], ["add", "theorem", "deriv_eq", ["filter", "eventually_eq"]], ["add", "theorem", "deriv_within_eq", ["filter", "eventually_eq"]], ["add", "theorem", "has_deriv_at_filter_iff", ["filter", "eventually_eq"]], ["add", "theorem", "congr_of_eventually_eq", ["has_deriv_at"]], ["del", "theorem", "congr_of_mem_nhds", ["has_deriv_at"]], ["add", "theorem", "congr_of_eventually_eq", ["has_deriv_at_filter"]], ["del", "theorem", "congr_of_mem_sets", ["has_deriv_at_filter"]], ["del", "theorem", "has_deriv_at_filter_congr_of_mem_sets", []], ["add", "theorem", "congr_of_eventually_eq", ["has_deriv_within_at"]], ["del", "theorem", "congr_of_mem_nhds_within", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "congr_of_eventually_eq", ["differentiable_at"]], ["del", "theorem", "congr_of_mem_nhds", ["differentiable_at"]], ["add", "theorem", "comp'", ["differentiable_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["differentiable_within_at"]], ["del", "theorem", "congr_of_mem_nhds_within", ["differentiable_within_at"]], ["del", "theorem", "fderiv_congr_of_mem_nhds", []], ["del", "theorem", "fderiv_within_congr_of_mem_nhds_within", []], ["add", "theorem", "fderiv_eq", ["filter", "eventually_eq"]], ["add", "theorem", "fderiv_within_eq", ["filter", "eventually_eq"]], ["add", "theorem", "has_fderiv_at_filter_iff", ["filter", "eventually_eq"]], ["add", "theorem", "has_strict_fderiv_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "congr_of_eventually_eq", ["has_fderiv_at"]], ["del", "theorem", "congr_of_mem_nhds", ["has_fderiv_at"]], ["add", "theorem", "congr_of_eventually_eq", ["has_fderiv_at_filter"]], ["del", "theorem", "congr_of_mem_sets", ["has_fderiv_at_filter"]], ["del", "theorem", "has_fderiv_at_filter_congr_of_mem_sets", []], ["add", "theorem", "congr_of_eventually_eq", ["has_fderiv_within_at"]], ["del", "theorem", "congr_of_mem_nhds_within", ["has_fderiv_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["has_strict_fderiv_at"]], ["del", "theorem", "congr_of_mem_sets", ["has_strict_fderiv_at"]], ["del", "theorem", "has_strict_fderiv_at_congr_of_mem_sets", []]]}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "theorem", "mdifferentiable_within_at_iff", ["filter", "eventually_eq"]], ["add", "theorem", "mfderiv_eq", ["filter", "eventually_eq"]], ["add", "theorem", "mfderiv_within_eq", ["filter", "eventually_eq"]], ["add", "theorem", "congr_of_eventually_eq", ["has_mfderiv_at"]], ["del", "theorem", "congr_of_mem_nhds", ["has_mfderiv_at"]], ["add", "theorem", "congr_of_eventually_eq", ["has_mfderiv_within_at"]], ["del", "theorem", "congr_of_mem_nhds_within", ["has_mfderiv_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["mdifferentiable_at"]], ["del", "theorem", "congr_of_mem_nhds", ["mdifferentiable_at"]], ["add", "theorem", "congr_of_eventually_eq", ["mdifferentiable_within_at"]], ["del", "theorem", "congr_of_mem_nhds_within", ["mdifferentiable_within_at"]], ["del", "theorem", "mdifferentiable_within_at_congr_of_mem_nhds_within", []], ["del", "theorem", "mfderiv_congr_of_mem_nhds", []], ["del", "theorem", "mfderiv_within_congr_of_mem_nhds_within", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "exists_mem", ["filter", "eventually"]], ["add", "theorem", "exists_mem", ["filter", "eventually_eq"]], ["add", "theorem", "eventually_eq_iff_exists_mem", ["filter"]], ["add", "theorem", "eventually_eq_of_mem", ["filter"]], ["add", "theorem", "eventually_iff_exists_mem", ["filter"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "comp'", ["continuous_on"]], ["add", "theorem", "comp'", ["continuous_within_at"]], ["add", "theorem", "congr_of_eventually_eq", ["continuous_within_at"]], ["del", "theorem", "congr_of_mem_nhds_within", ["continuous_within_at"]]]}]}, {"timestamp": 1593713699, "sha": "237b1ea5", "message": "feat(analysis/specific_limits): proof of harmonic series diverging and preliminaries (#3233)\nThis PR is made of two parts : \n- A few new generic lemmas, mostly by @PatrickMassot , in `order/filter/at_top_bot.lean` and `topology/algebra/ordered.lean`\n- Definition of the harmonic series, basic lemmas about it, and proof of its divergence, in `analysis/specific_limits.lean`\nZulip : https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Harmonic.20Series.20Divergence/near/201651652", "changes": [{"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "half_le_harmonic_double_sub_harmonic", []], ["add", "def", "harmonic_series", []], ["add", "theorem", "harmonic_tendsto_at_top", []], ["add", "theorem", "mono_harmonic", []], ["add", "theorem", "self_div_two_le_harmonic_two_pow", []]]}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "theorem", "tendsto_at_top_finset", ["filter", "monotone"]], ["mod", "theorem", "prod_at_top_at_top_eq", ["filter"]], ["mod", "theorem", "prod_map_at_top_eq", ["filter"]], ["add", "theorem", "tendsto_at_top_at_top_iff_of_monotone", ["filter"]], ["add", "theorem", "tendsto_at_top_at_top_of_monotone'", ["filter"]], ["mod", "theorem", "tendsto_at_top_at_top_of_monotone", ["filter"]], ["mod", "theorem", "tendsto_at_top_mono", ["filter"]], ["add", "theorem", "tendsto_at_top_of_monotone_of_filter", ["filter"]], ["add", "theorem", "tendsto_at_top_of_monotone_of_subseq", ["filter"]], ["mod", "theorem", "tendsto_finset_image_at_top_at_top", ["filter"]], ["add", "theorem", "unbounded_of_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "filter_eq_bot_of_not_nonempty", ["filter"]], ["add", "theorem", "tendsto_bot", ["filter"]], ["mod", "theorem", "tendsto_congr'", ["filter"]], ["add", "theorem", "tendsto_of_not_nonempty", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_at_top_csupr", []], ["add", "theorem", "tendsto_at_top_supr", []], ["add", "theorem", "tendsto_of_monotone", []]]}]}, {"timestamp": 1593695120, "sha": "8be66ee9", "message": "fix(library_search): fix a bug with iff lemmas where both sides match (#3270)\nAlso add a proper failure message for `library_search`, using Mario's text.", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": null, "newPath": "test/library_search/exp_le_exp.lean", "changes": []}]}, {"timestamp": 1593695118, "sha": "18a80ea2", "message": "chore(tactic/noncomm_ring): allow simp to fail (#3268)\nFixes #3267.", "changes": [{"oldPath": "src/tactic/noncomm_ring.lean", "newPath": "src/tactic/noncomm_ring.lean", "changes": []}, {"oldPath": "test/noncomm_ring.lean", "newPath": "test/noncomm_ring.lean", "changes": []}]}, {"timestamp": 1593685672, "sha": "dc1d9369", "message": "feat(data/polynomial): preliminaries for Cayley-Hamilton (#3243)\nMany cheerful facts about polynomials!", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_range_div'", ["finset"]], ["add", "theorem", "sum_range_sub'", ["finset"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["del", "theorem", "C_def", ["polynomial"]], ["add", "theorem", "coeff_monomial_mul", ["polynomial"]], ["add", "theorem", "coeff_monomial_zero_mul", ["polynomial"]], ["add", "theorem", "coeff_mul_C", ["polynomial"]], ["mod", "theorem", "coeff_mul_X", ["polynomial"]], ["add", "theorem", "coeff_mul_X_sub_C", ["polynomial"]], ["add", "theorem", "coeff_mul_monomial", ["polynomial"]], ["add", "theorem", "coeff_mul_monomial_zero", ["polynomial"]], ["add", "theorem", "coeff_nat_degree_succ_eq_zero", ["polynomial"]], ["add", "theorem", "eq_zero_of_eq_zero", ["polynomial"]], ["add", "theorem", "eval_monomial", ["polynomial"]], ["add", "theorem", "eval_mul_X_sub_C", ["polynomial"]], ["add", "theorem", "eval₂_eq_eval_map", ["polynomial"]], ["mod", "theorem", "eval₂_sum", ["polynomial"]], ["add", "theorem", "map_monomial", ["polynomial"]], ["add", "theorem", "monomial_add", ["polynomial"]], ["add", "theorem", "monomial_zero_left", ["polynomial"]], ["add", "theorem", "monomial_zero_right", ["polynomial"]], ["add", "theorem", "mul_coeff_zero", ["polynomial"]], ["add", "theorem", "nat_degree_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_X_sub_C_le", ["polynomial"]], ["add", "theorem", "nat_degree_mul_le", ["polynomial"]], ["add", "theorem", "sum_C_index", ["polynomial"]], ["add", "theorem", "sum_monomial_eq", ["polynomial"]], ["add", "theorem", "sum_over_range'", ["polynomial"]], ["add", "theorem", "sum_over_range", ["polynomial"]]]}]}, {"timestamp": 1593650142, "sha": "cd29ede9", "message": "chore(scripts): update nolints.txt (#3265)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593645368, "sha": "93099107", "message": "chore(algebra/*): deduplicate `*_with_zero`/`semiring`/`field` (#3259)\nAll moved/renamed/merged lemmas were generalized to use\n`*_with_zero`/`nonzero`/`mul_zero_class` instead of\n`(semi)ring`/`division_ring`/`field`.\n## Moved to `group_with_zero`\nThe following lemmas were formulated for\n`(semi_)ring`s/`division_ring`s/`field`s. Some of them had strictly\nmore general “prime” versions for `*_with_zero`. I either moved a\nlemma to `algebra/group_with_zero` and adjusted the requirements or\nremoved the non-prime version and `'` from the name of the prime\nversion. Sometimes I also made some arguments implicit.\nTL;DR: moved to `group_with_zero`, removed `name'` lemma if it was there.\n* `is_unit_zero_iff`;\n* `not_is_unit_zero`;\n* `div_eq_one_iff_eq`;\n* `eq_div_iff_mul_eq`;\n* `eq_div_of_mul_eq`;\n* `eq_one_div_of_mul_eq_one`;\n* `eq_one_div_of_mul_eq_one_left`;\n* `one_div_one_div`;\n* `eq_of_one_div_eq_one_div`;\n* `one_div_div`;\n* `mul_eq_of_eq_div`;\n* `mul_mul_div`;\n* `eq_zero_of_zero_eq_one`;\n* `eq_inv_of_mul_right_eq_one`;\n* `eq_inv_of_mul_left_eq_one`;\n* `div_right_comm`;\n* `div_div_div_cancel_right`;\n* `div_mul_div_cancel`;\n## Renamed/merged\n* rename `mul_inv''` to `mul_inv'` and merge `mul_inv'` into `mul_inv_rev'`;\n* `coe_unit_mul_inv`, `coe_unit_inv_mul`: `units.mul_inv'`, `units.inv_mul'`\n* `division_ring.inv_eq_iff`: `inv_eq_iff`;\n* `division_ring.inv_inj`: `inv_inj'`;\n* `domain.mul_left_inj`: `mul_left_inj'`;\n* `domain.mul_right_inj`: `mul_right_inj'`;\n* `eq_of_mul_eq_mul_of_nonzero_left` and `eq_of_mul_eq_mul_left`: `mul_left_cancel'`;\n* `eq_of_mul_eq_mul_of_nonzero_right` and `eq_of_mul_eq_mul_right`: `mul_right_cancel'`;\n* `inv_inj`, `inv_inj'`, `inv_inj''`: `inv_injective`, `inv_inj`, and `inv_inj'`, respectively;\n* `mul_inv_cancel_assoc_left`, `mul_inv_cancel_assoc_right`,\n `inv_mul_cancel_assoc_left`, `inv_mul_cancel_assoc_right`:\n `mul_inv_cancel_left'`, `mul_inv_cacnel_right'`,\n `inv_mul_cancel_left'`, `inv_mul_cancel_right'`;\n* `ne_zero_and_ne_zero_of_mul_ne_zero` : `ne_zero_and_ne_zero_of_mul`.\n* `ne_zero_of_mul_left_eq_one`: `left_ne_zero_of_mul_eq_one`\n* `ne_zero_of_mul_ne_zero_left` : `right_ne_zero_of_mul`;\n* `ne_zero_of_mul_ne_zero_right` : `left_ne_zero_of_mul`;\n* `ne_zero_of_mul_right_eq_one`: `left_ne_zero_of_mul_eq_one`\n* `neg_inj` and `neg_inj` renamed to `neg_injective` and `neg_inj`;\n* `one_inv_eq`: merged into `inv_one`;\n* `unit_ne_zero`: `units.ne_zero`;\n* `units.mul_inv'` and `units.inv_mul'`: `units.mul_inv_of_eq` and `units.inv_mul_of_eq`;\n* `units.mul_left_eq_zero_iff_eq_zero`,\n `units.mul_right_eq_zero_iff_eq_zero`: `units.mul_left_eq_zero`,\n `units.mul_right_eq_zero`;\n## New\n* `class cancel_monoid_with_zero`: a `monoid_with_zero` such that\n left/right multiplication by a non-zero element is injective; the\n main instances are `group_with_zero`s and `domain`s;\n* `monoid_hom.map_ne_zero`, `monoid_hom.map_eq_zero`,\n `monoid_hom.map_inv'`, `monoid_hom.map_div`, `monoid_hom.injective`:\n lemmas about monoid homomorphisms of two groups with zeros such that\n `f 0 = 0`;\n* `mul_eq_zero_of_left`, `mul_eq_zero_of_right`, `ne_zero_of_eq_one`\n* `unique_of_zero_eq_one`, `eq_of_zero_eq_one`, `nonzero_psum_unique`,\n `zero_ne_one_or_forall_eq_0`;\n* `mul_left_inj'`, `mul_right_inj'`\n## Misc changes\n* `eq_of_div_eq_one` no more requires `b ≠ 0`;", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "is_unit_zero_iff", []], ["del", "theorem", "not_is_unit_zero", []]]}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "div_eq_one_iff_eq", []], ["del", "theorem", "inv_eq_iff", ["division_ring"]], ["del", "theorem", "inv_inj", ["division_ring"]], ["del", "theorem", "eq_div_iff_mul_eq", []], ["del", "theorem", "eq_div_of_mul_eq", []], ["del", "theorem", "eq_of_div_eq_one", []], ["del", "theorem", "eq_of_one_div_eq_one_div", []], ["del", "theorem", "eq_one_div_of_mul_eq_one", []], ["del", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["del", "theorem", "mul_eq_of_eq_div", []], ["del", "theorem", "mul_inv'", []], ["del", "theorem", "mul_mul_div", []], ["del", "theorem", "one_div_div", []], ["del", "theorem", "one_div_one_div", []], ["del", "theorem", "injective", ["ring_hom"]], ["mod", "theorem", "map_div", ["ring_hom"]], ["mod", "theorem", "map_eq_zero", ["ring_hom"]], ["mod", "theorem", "map_inv", ["ring_hom"]], ["mod", "theorem", "map_ne_zero", ["ring_hom"]]]}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "eq_of_inv_eq_inv", []], ["del", "theorem", "inv_inj'", []], ["mod", "theorem", "inv_inj", []], ["add", "theorem", "inv_injective", []]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["del", "theorem", "inv_mul'", ["units"]], ["add", "theorem", "inv_mul_of_eq", ["units"]], ["del", "theorem", "mul_inv'", ["units"]], ["add", "theorem", "mul_inv_of_eq", ["units"]]]}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["del", "theorem", "coe_unit_inv_mul'", []], ["del", "theorem", "coe_unit_mul_inv'", []], ["del", "theorem", "div_div_div_cancel_right'", []], ["add", "theorem", "div_div_div_cancel_right", []], ["mod", "theorem", "div_eq_mul_inv", []], ["add", "theorem", "div_eq_of_eq_mul", []], ["add", "theorem", "div_eq_one_iff_eq", []], ["mod", "theorem", "div_eq_zero_iff", []], ["del", "theorem", "div_mul_div_cancel'", []], ["add", "theorem", "div_mul_div_cancel", []], ["del", "theorem", "div_right_comm'", []], ["add", "theorem", "div_right_comm", []], ["add", "theorem", "eq_div_iff_mul_eq", []], ["add", "theorem", "eq_div_of_mul_eq", []], ["del", "theorem", "eq_inv_of_mul_left_eq_one'", []], ["add", "theorem", "eq_inv_of_mul_left_eq_one", []], ["del", "theorem", "eq_inv_of_mul_right_eq_one'", []], ["add", "theorem", "eq_inv_of_mul_right_eq_one", []], ["del", "theorem", "eq_mul_inv_of_mul_eq'", []], ["add", "theorem", "eq_of_div_eq_one", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_left", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_right", []], ["del", "theorem", "eq_of_one_div_eq_one_div'", []], ["add", "theorem", "eq_of_one_div_eq_one_div", []], ["add", "theorem", "eq_of_zero_eq_one", []], ["del", "theorem", "eq_one_div_of_mul_eq_one'", []], ["add", "theorem", "eq_one_div_of_mul_eq_one", []], ["del", "theorem", "eq_one_div_of_mul_eq_one_left'", []], ["add", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["add", "theorem", "eq_zero_of_mul_eq_self_left", []], ["add", "theorem", "eq_zero_of_mul_eq_self_right", []], ["mod", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["add", "theorem", "eq_zero_of_zero_eq_one", []], ["del", "theorem", "inv_inj''", []], ["add", "theorem", "inv_inj'", []], ["del", "theorem", "inv_mul_cancel_assoc_left", []], ["del", "theorem", "inv_mul_cancel_assoc_right", []], ["add", "theorem", "inv_mul_cancel_left'", []], ["add", "theorem", "inv_mul_cancel_right'", []], ["mod", "theorem", "inv_one", []], ["add", "theorem", "mul_left_eq_zero", ["is_unit"]], ["add", "theorem", "mul_right_eq_zero", ["is_unit"]], ["add", "theorem", "ne_zero", ["is_unit"]], ["add", "theorem", "is_unit_zero_iff", []], ["add", "theorem", "left_ne_zero_of_mul", []], ["add", "theorem", "left_ne_zero_of_mul_eq_one", []], ["add", "theorem", "map_div", ["monoid_hom"]], ["add", "theorem", "map_eq_zero", ["monoid_hom"]], ["add", "theorem", "map_inv'", ["monoid_hom"]], ["add", "theorem", "map_ne_zero", ["monoid_hom"]], ["add", "theorem", "mul_eq_zero_of_left", []], ["add", "theorem", "mul_eq_zero_of_right", []], ["del", "theorem", "mul_inv''", []], ["add", "theorem", "mul_inv'", []], ["del", "theorem", "mul_inv_cancel_assoc_left", []], ["del", "theorem", "mul_inv_cancel_assoc_right", []], ["add", "theorem", "mul_inv_cancel_left'", []], ["add", "theorem", "mul_inv_cancel_right'", []], ["del", "theorem", "mul_inv_eq_of_eq_mul'", []], ["mod", "theorem", "mul_left_cancel'", []], ["mod", "theorem", "mul_left_inj'", []], ["add", "theorem", "mul_mul_div", []], ["mod", "theorem", "mul_right_cancel'", []], ["add", "theorem", "mul_right_inj'", []], ["mod", "theorem", "mul_zero", []], ["add", "theorem", "ne_zero_and_ne_zero_of_mul", []], ["add", "theorem", "ne_zero_of_eq_one", []], ["del", "theorem", "ne_zero_of_mul_left_eq_one'", []], ["del", "theorem", "ne_zero_of_mul_right_eq_one'", []], ["add", "theorem", "not_is_unit_zero", []], ["del", "theorem", "one_div_div'", []], ["add", "theorem", "one_div_div", []], ["del", "theorem", "one_div_one_div'", []], ["add", "theorem", "one_div_one_div", []], ["del", "theorem", "one_inv_eq", []], ["mod", "theorem", "one_ne_zero", []], ["add", "theorem", "right_ne_zero_of_mul", []], ["add", "theorem", "right_ne_zero_of_mul_eq_one", []], ["add", "theorem", "subsingleton_of_zero_eq_one", []], ["add", "def", "unique_of_zero_eq_one", []], ["del", "theorem", "unit_ne_zero", []], ["add", "theorem", "coe_inv'", ["units"]], ["mod", "theorem", "exists_iff_ne_zero", ["units"]], ["del", "theorem", "inv_eq_inv", ["units"]], ["add", "theorem", "inv_mul'", ["units"]], ["add", "theorem", "mul_inv'", ["units"]], ["add", "theorem", "mul_left_eq_zero", ["units"]], ["add", "theorem", "mul_right_eq_zero", ["units"]], ["add", "theorem", "ne_zero", ["units"]], ["mod", "theorem", "zero_mul", []], ["mod", "theorem", "zero_ne_one", []], ["add", "theorem", "zero_ne_one_or_forall_eq_0", []]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["add", "theorem", "zero_lt", ["units"]], ["del", "theorem", "zero_lt_unit", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "theorem", "mul_left_inj", ["domain"]], ["del", "theorem", "mul_right_inj", ["domain"]], ["del", "theorem", "eq_of_mul_eq_mul_left", []], ["del", "theorem", "eq_of_mul_eq_mul_left_of_ne_zero", []], ["del", "theorem", "eq_of_mul_eq_mul_right", []], ["del", "theorem", "eq_of_mul_eq_mul_right_of_ne_zero", []], ["del", "theorem", "eq_zero_of_mul_eq_self_left", []], ["del", "theorem", "eq_zero_of_mul_eq_self_right", []], ["del", "theorem", "eq_zero_of_zero_eq_one", []], ["del", "theorem", "mul_left_eq_zero_iff_eq_zero", ["is_unit"]], ["del", "theorem", "mul_right_eq_zero_iff_eq_zero", ["is_unit"]], ["mod", "theorem", "mul_self_eq_mul_self_iff", []], ["mod", "theorem", "mul_self_eq_one_iff", []], ["del", "theorem", "ne_zero_and_ne_zero_of_mul_ne_zero", []], ["del", "theorem", "ne_zero_of_mul_ne_zero_left", []], ["del", "theorem", "ne_zero_of_mul_ne_zero_right", []], ["del", "theorem", "mul_zero", ["ring"]], ["del", "theorem", "zero_mul", ["ring"]], ["del", "theorem", "subsingleton_of_zero_eq_one", []], ["del", "theorem", "mul_left_eq_zero_iff_eq_zero", ["units"]], ["del", "theorem", "mul_right_eq_zero_iff_eq_zero", ["units"]], ["del", "theorem", "zero_ne_one_or_forall_eq_0", []]]}, {"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/category_theory/preadditive/default.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/prime.lean", "newPath": "src/ring_theory/prime.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/valuation/basic.lean", "newPath": "src/ring_theory/valuation/basic.lean", "changes": []}, {"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["mod", "theorem", "inv_one", ["norm_num"]]]}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}]}, {"timestamp": 1593629163, "sha": "1a419a9f", "message": "feat(data/nat/digits): add digits_lt_base (#3246)", "changes": [{"oldPath": "src/data/nat/digits.lean", "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "digits_lt_base'", []], ["add", "theorem", "digits_lt_base", []]]}]}, {"timestamp": 1593623575, "sha": "f00b7c0c", "message": "chore(*): work on removing deprecated is_X_hom typeclasses (#3258)\nIt's far from over, but as I was bumping up against issues in `polynomial.lean` and `mv_polynomial.lean`, I'm going to PR this part for now, and then wait to return to it when other PRs affecting `polynomial.lean` have cleared.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "map_fpow", ["is_ring_hom"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["del", "theorem", "pointwise_mul_image_is_semiring_hom", ["set"]], ["add", "def", "pointwise_mul_image_ring_hom", ["set"]]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "def", "conj", ["complex"]], ["del", "theorem", "conj_add", ["complex"]], ["del", "theorem", "conj_div", ["complex"]], ["del", "theorem", "conj_inv", ["complex"]], ["del", "theorem", "conj_mul", ["complex"]], ["del", "theorem", "conj_neg", ["complex"]], ["del", "theorem", "conj_one", ["complex"]], ["del", "theorem", "conj_pow", ["complex"]], ["del", "theorem", "conj_sub", ["complex"]], ["del", "theorem", "conj_zero", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "def", "add_monoid_hom", ["finsupp", "map_range"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["add", "def", "ring_hom", ["padic_int", "coe"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": [["mod", "def", "to_complex", ["gaussian_int"]], ["mod", "theorem", "to_complex_add", ["gaussian_int"]], ["mod", "theorem", "to_complex_mul", ["gaussian_int"]], ["mod", "theorem", "to_complex_neg", ["gaussian_int"]], ["mod", "theorem", "to_complex_one", ["gaussian_int"]], ["mod", "theorem", "to_complex_sub", ["gaussian_int"]], ["mod", "theorem", "to_complex_zero", ["gaussian_int"]]]}, {"oldPath": "src/deprecated/field.lean", "newPath": null, "changes": [["del", "theorem", "injective", ["is_ring_hom"]], ["del", "theorem", "map_div", ["is_ring_hom"]], ["del", "theorem", "map_eq_zero", ["is_ring_hom"]], ["del", "theorem", "map_inv", ["is_ring_hom"]], ["del", "theorem", "map_ne_zero", ["is_ring_hom"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["mod", "def", "of_subtype", ["equiv", "perm"]], ["del", "theorem", "of_subtype_one", ["equiv", "perm"]]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["add", "def", "ring_hom", ["submodule", "span"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "def", "ring_hom", ["mv_polynomial", "coe_to_mv_power_series"]], ["add", "def", "ring_hom", ["polynomial", "coe_to_power_series"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1593605564, "sha": "e803c851", "message": "feat(field_theory/separable): relating irreducibility and separability (#3198)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "degree_derivative_le", ["polynomial"]], ["add", "theorem", "degree_derivative_lt", ["polynomial"]], ["add", "theorem", "derivative_eval₂_C", ["polynomial"]], ["add", "theorem", "derivative_map", ["polynomial"]], ["add", "theorem", "derivative_pow", ["polynomial"]], ["add", "theorem", "derivative_pow_succ", ["polynomial"]], ["add", "theorem", "eval₂_nat_cast", ["polynomial"]], ["add", "theorem", "is_unit_iff", ["polynomial"]], ["add", "theorem", "map_nat_cast", ["polynomial"]], ["add", "theorem", "nat_degree_derivative_lt", ["polynomial"]], ["add", "theorem", "nat_degree_le_of_dvd", ["polynomial"]], ["add", "theorem", "of_mem_support_derivative", ["polynomial"]]]}, {"oldPath": "src/field_theory/separable.lean", "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "separable", ["irreducible"]], ["add", "theorem", "coe_expand", ["polynomial"]], ["add", "theorem", "coeff_contract", ["polynomial"]], ["add", "theorem", "coeff_expand", ["polynomial"]], ["add", "theorem", "coeff_expand_mul'", ["polynomial"]], ["add", "theorem", "coeff_expand_mul", ["polynomial"]], ["add", "theorem", "derivative_expand", ["polynomial"]], ["add", "theorem", "exists_separable_of_irreducible", ["polynomial"]], ["add", "theorem", "expand_C", ["polynomial"]], ["add", "theorem", "expand_X", ["polynomial"]], ["add", "theorem", "expand_contract", ["polynomial"]], ["add", "theorem", "expand_eq_C", ["polynomial"]], ["add", "theorem", "expand_eq_map_domain", ["polynomial"]], ["add", "theorem", "expand_eq_zero", ["polynomial"]], ["add", "theorem", "expand_expand", ["polynomial"]], ["add", "theorem", "expand_inj", ["polynomial"]], ["add", "theorem", "expand_monomial", ["polynomial"]], ["add", "theorem", "expand_mul", ["polynomial"]], ["add", "theorem", "expand_one", ["polynomial"]], ["add", "theorem", "expand_pow", ["polynomial"]], ["add", "theorem", "is_local_ring_hom_expand", ["polynomial"]], ["add", "theorem", "is_unit_or_eq_zero_of_separable_expand", ["polynomial"]], ["add", "theorem", "nat_degree_expand", ["polynomial"]], ["add", "theorem", "of_irreducible_expand", ["polynomial"]], ["add", "theorem", "of_irreducible_expand_pow", ["polynomial"]], ["add", "theorem", "is_coprime", ["polynomial", "separable"]], ["add", "theorem", "map", ["polynomial", "separable"]], ["add", "theorem", "of_pow'", ["polynomial", "separable"]], ["add", "theorem", "of_pow", ["polynomial", "separable"]], ["add", "theorem", "separable_C", ["polynomial"]], ["add", "theorem", "separable_iff_derivative_ne_zero", ["polynomial"]], ["add", "theorem", "separable_or", ["polynomial"]], ["add", "theorem", "unique_separable_of_irreducible", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "map_nat_cast", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "of_irreducible_map", []]]}, {"oldPath": "src/ring_theory/polynomial/basic.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}]}, {"timestamp": 1593597914, "sha": "a7cdab5d", "message": "chore(data/set/basic): simp attribute on mem_range_self (#3260)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "mem_range_self", ["set"]]]}]}, {"timestamp": 1593597912, "sha": "7bd19b32", "message": "chore(data/finset, data/multiset): split into smaller files (#3256)\nThis follows on from #2341, which split the second half of `data.list.basic` into separate files. This now does the same (trying to follow a similar split) for `data.multiset` and `data.finset`.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/control/equiv_functor/instances.lean", "newPath": "src/control/equiv_functor/instances.lean", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset/basic.lean", "changes": [["del", "theorem", "card", ["finset", "Ico"]], ["del", "theorem", "diff_left", ["finset", "Ico"]], ["del", "theorem", "diff_right", ["finset", "Ico"]], ["del", "theorem", "disjoint_consecutive", ["finset", "Ico"]], ["del", "theorem", "eq_empty_iff", ["finset", "Ico"]], ["del", "theorem", "eq_empty_of_le", ["finset", "Ico"]], ["del", "theorem", "filter_le", ["finset", "Ico"]], ["del", "theorem", "filter_le_of_le", ["finset", "Ico"]], ["del", "theorem", "filter_le_of_le_bot", ["finset", "Ico"]], ["del", "theorem", "filter_le_of_top_le", ["finset", "Ico"]], ["del", "theorem", "filter_lt", ["finset", "Ico"]], ["del", "theorem", "filter_lt_of_ge", ["finset", "Ico"]], ["del", "theorem", "filter_lt_of_le_bot", ["finset", "Ico"]], ["del", "theorem", "filter_lt_of_top_le", ["finset", "Ico"]], ["del", "theorem", "image_add", ["finset", "Ico"]], ["del", "theorem", "image_const_sub", ["finset", "Ico"]], ["del", "theorem", "image_sub", ["finset", "Ico"]], ["del", "theorem", "insert_succ_bot", ["finset", "Ico"]], ["del", "theorem", "inter_consecutive", ["finset", "Ico"]], ["del", "theorem", "mem", ["finset", "Ico"]], ["del", "theorem", "not_mem_top", ["finset", "Ico"]], ["del", "theorem", "pred_singleton", ["finset", "Ico"]], ["del", "theorem", "self_eq_empty", ["finset", "Ico"]], ["del", "theorem", "subset_iff", ["finset", "Ico"]], ["del", "theorem", "succ_singleton", ["finset", "Ico"]], ["del", "theorem", "succ_top'", ["finset", "Ico"]], ["del", "theorem", "succ_top", ["finset", "Ico"]], ["del", "theorem", "to_finset", ["finset", "Ico"]], ["del", "theorem", "union_consecutive", ["finset", "Ico"]], ["del", "theorem", "val", ["finset", "Ico"]], ["del", "theorem", "zero_bot", ["finset", "Ico"]], ["del", "def", "Ico", ["finset"]], ["del", "theorem", "card", ["finset", "Ico_ℤ"]], ["del", "theorem", "mem", ["finset", "Ico_ℤ"]], ["del", "def", "Ico_ℤ", ["finset"]], ["del", "theorem", "bInter_coe", ["finset"]], ["del", "theorem", "bInter_finset_image", ["finset"]], ["del", "theorem", "bInter_insert", ["finset"]], ["del", "theorem", "bInter_inter", ["finset"]], ["del", "theorem", "bInter_singleton", ["finset"]], ["del", "theorem", "bUnion_coe", ["finset"]], ["del", "theorem", "bUnion_finset_image", ["finset"]], ["del", "theorem", "bUnion_insert", ["finset"]], ["del", "theorem", "bUnion_singleton", ["finset"]], ["del", "theorem", "bUnion_union", ["finset"]], ["del", "theorem", "card_powerset", ["finset"]], ["del", "theorem", "card_powerset_len", ["finset"]], ["del", "theorem", "comp_inf_eq_inf_comp", ["finset"]], ["del", "theorem", "comp_inf_eq_inf_comp_of_is_total", ["finset"]], ["del", "theorem", "comp_sup_eq_sup_comp", ["finset"]], ["del", "theorem", "comp_sup_eq_sup_comp_of_is_total", ["finset"]], ["del", "theorem", "empty_mem_powerset", ["finset"]], ["del", "theorem", "exists_max_image", ["finset"]], ["del", "theorem", "exists_min_image", ["finset"]], ["del", "theorem", "exists_nat_subset_range", ["finset"]], ["del", "def", "fold", ["finset"]], ["del", "theorem", "fold_congr", ["finset"]], ["del", "theorem", "fold_empty", ["finset"]], ["del", "theorem", "fold_hom", ["finset"]], ["del", "theorem", "fold_image", ["finset"]], ["del", "theorem", "fold_insert", ["finset"]], ["del", "theorem", "fold_insert_idem", ["finset"]], ["del", "theorem", "fold_map", ["finset"]], ["del", "theorem", "fold_max_le", ["finset"]], ["del", "theorem", "fold_max_lt", ["finset"]], ["del", "theorem", "fold_min_le", ["finset"]], ["del", "theorem", "fold_min_lt", ["finset"]], ["del", "theorem", "fold_op_distrib", ["finset"]], ["del", "theorem", "fold_op_rel_iff_and", ["finset"]], ["del", "theorem", "fold_op_rel_iff_or", ["finset"]], ["del", "theorem", "fold_singleton", ["finset"]], ["del", "theorem", "fold_union_inter", ["finset"]], ["del", "def", "inf", ["finset"]], ["del", "theorem", "inf_congr", ["finset"]], ["del", "theorem", "inf_empty", ["finset"]], ["del", "theorem", "inf_eq_infi", ["finset"]], ["del", "theorem", "inf_insert", ["finset"]], ["del", "theorem", "inf_le", ["finset"]], ["del", "theorem", "inf_mono", ["finset"]], ["del", "theorem", "inf_mono_fun", ["finset"]], ["del", "theorem", "inf_singleton", ["finset"]], ["del", "theorem", "inf_union", ["finset"]], ["del", "theorem", "inf_val", ["finset"]], ["del", "theorem", "infi_coe", ["finset"]], ["del", "theorem", "infi_finset_image", ["finset"]], ["del", "theorem", "infi_insert", ["finset"]], ["del", "theorem", "infi_singleton", ["finset"]], ["del", "theorem", "infi_union", ["finset"]], ["del", "theorem", "le_fold_max", ["finset"]], ["del", "theorem", "le_fold_min", ["finset"]], ["del", "theorem", "le_inf", ["finset"]], ["del", "theorem", "le_inf_iff", ["finset"]], ["del", "theorem", "le_max'", ["finset"]], ["del", "theorem", "le_max_of_mem", ["finset"]], ["del", "theorem", "le_min'", ["finset"]], ["del", "theorem", "le_sup", ["finset"]], ["del", "theorem", "length_sort", ["finset"]], ["del", "theorem", "lt_fold_max", ["finset"]], ["del", "theorem", "lt_fold_min", ["finset"]], ["del", "theorem", "lt_inf_iff", ["finset"]], ["del", "def", "max'", ["finset"]], ["del", "theorem", "max'_le", ["finset"]], ["del", "theorem", "max'_mem", ["finset"]], ["del", "theorem", "max_empty", ["finset"]], ["del", "theorem", "max_eq_none", ["finset"]], ["del", "theorem", "max_eq_sup_with_bot", ["finset"]], ["del", "theorem", "max_insert", ["finset"]], ["del", "theorem", "max_of_mem", ["finset"]], ["del", "theorem", "max_of_nonempty", ["finset"]], ["del", "theorem", "max_singleton", ["finset"]], ["del", "theorem", "mem_of_max", ["finset"]], ["del", "theorem", "mem_of_min", ["finset"]], ["del", "theorem", "mem_pi", ["finset"]], ["del", "theorem", "mem_powerset", ["finset"]], ["del", "theorem", "mem_powerset_len", ["finset"]], ["del", "theorem", "mem_powerset_self", ["finset"]], ["del", "theorem", "mem_sort", ["finset"]], ["del", "def", "min'", ["finset"]], ["del", "theorem", "min'_le", ["finset"]], ["del", "theorem", "min'_lt_max'", ["finset"]], ["del", "theorem", "min'_lt_max'_of_card", ["finset"]], ["del", "theorem", "min'_mem", ["finset"]], ["del", "theorem", "min_empty", ["finset"]], ["del", "theorem", "min_eq_inf_with_top", ["finset"]], ["del", "theorem", "min_eq_none", ["finset"]], ["del", "theorem", "min_insert", ["finset"]], ["del", "theorem", "min_le_of_mem", ["finset"]], ["del", "theorem", "min_of_mem", ["finset"]], ["del", "theorem", "min_of_nonempty", ["finset"]], ["del", "theorem", "min_singleton", ["finset"]], ["del", "def", "mono_of_fin", ["finset"]], ["del", "theorem", "mono_of_fin_bij_on", ["finset"]], ["del", "theorem", "mono_of_fin_eq_mono_of_fin_iff", ["finset"]], ["del", "theorem", "mono_of_fin_injective", ["finset"]], ["del", "theorem", "mono_of_fin_last", ["finset"]], ["del", "theorem", "mono_of_fin_strict_mono", ["finset"]], ["del", "theorem", "mono_of_fin_unique", ["finset"]], ["del", "theorem", "mono_of_fin_zero", ["finset"]], ["del", "def", "antidiagonal", ["finset", "nat"]], ["del", "theorem", "antidiagonal_zero", ["finset", "nat"]], ["del", "theorem", "card_antidiagonal", ["finset", "nat"]], ["del", "theorem", "mem_antidiagonal", ["finset", "nat"]], ["del", "theorem", "not_mem_of_mem_powerset_of_not_mem", ["finset"]], ["del", "def", "cons", ["finset", "pi"]], ["del", "theorem", "cons_ne", ["finset", "pi"]], ["del", "theorem", "cons_same", ["finset", "pi"]], ["del", "def", "empty", ["finset", "pi"]], ["del", "def", "pi", ["finset"]], ["del", "theorem", "pi_cons_injective", ["finset"]], ["del", "theorem", "pi_disjoint_of_disjoint", ["finset"]], ["del", "theorem", "pi_empty", ["finset"]], ["del", "theorem", "pi_insert", ["finset"]], ["del", "theorem", "pi_subset", ["finset"]], ["del", "theorem", "pi_val", ["finset"]], ["del", "def", "powerset", ["finset"]], ["del", "theorem", "powerset_empty", ["finset"]], ["del", "theorem", "powerset_insert", ["finset"]], ["del", "def", "powerset_len", ["finset"]], ["del", "theorem", "powerset_len_mono", ["finset"]], ["del", "theorem", "powerset_mono", ["finset"]], ["del", "theorem", "range_eq_Ico", ["finset"]], ["del", "theorem", "range_image_pred_top_sub", ["finset"]], ["del", "def", "sort", ["finset"]], ["del", "theorem", "sort_eq", ["finset"]], ["del", "theorem", "sort_nodup", ["finset"]], ["del", "theorem", "sort_sorted", ["finset"]], ["del", "theorem", "sort_sorted_lt", ["finset"]], ["del", "theorem", "sort_to_finset", ["finset"]], ["del", "theorem", "sorted_last_eq_max'", ["finset"]], ["del", "theorem", "sorted_zero_eq_min'", ["finset"]], ["del", "theorem", "subset_range_sup_succ", ["finset"]], ["del", "def", "sup", ["finset"]], ["del", "theorem", "sup_congr", ["finset"]], ["del", "theorem", "sup_def", ["finset"]], ["del", "theorem", "sup_empty", ["finset"]], ["del", "theorem", "sup_eq_supr", ["finset"]], ["del", "theorem", "sup_insert", ["finset"]], ["del", "theorem", "sup_le", ["finset"]], ["del", "theorem", "sup_le_iff", ["finset"]], ["del", "theorem", "sup_lt_iff", ["finset"]], ["del", "theorem", "sup_mono", ["finset"]], ["del", "theorem", "sup_mono_fun", ["finset"]], ["del", "theorem", "sup_singleton", ["finset"]], ["del", "theorem", "sup_union", ["finset"]], ["del", "theorem", "supr_coe", ["finset"]], ["del", "theorem", "supr_finset_image", ["finset"]], ["del", "theorem", "supr_insert", ["finset"]], ["del", "theorem", "supr_singleton", ["finset"]], ["del", "theorem", "supr_union", ["finset"]], ["del", "theorem", "infi_eq_infi_finset", []], ["del", "theorem", "count_sup", ["multiset"]], ["del", "theorem", "Inter_eq_Inter_finset", ["set"]], ["del", "theorem", "Union_eq_Union_finset", ["set"]], ["del", "theorem", "supr_eq_supr_finset", []]]}, {"oldPath": null, "newPath": "src/data/finset/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/finset/fold.lean", "changes": [["add", "def", "fold", ["finset"]], ["add", "theorem", "fold_congr", ["finset"]], ["add", "theorem", "fold_empty", ["finset"]], ["add", "theorem", "fold_hom", ["finset"]], ["add", "theorem", "fold_image", ["finset"]], ["add", "theorem", "fold_insert", ["finset"]], ["add", "theorem", "fold_insert_idem", ["finset"]], ["add", "theorem", "fold_map", ["finset"]], ["add", "theorem", "fold_max_le", ["finset"]], ["add", "theorem", "fold_max_lt", ["finset"]], ["add", "theorem", "fold_min_le", ["finset"]], ["add", "theorem", "fold_min_lt", ["finset"]], ["add", "theorem", "fold_op_distrib", ["finset"]], ["add", "theorem", "fold_op_rel_iff_and", ["finset"]], ["add", "theorem", "fold_op_rel_iff_or", ["finset"]], ["add", "theorem", "fold_singleton", ["finset"]], ["add", "theorem", "fold_union_inter", ["finset"]], ["add", "theorem", "le_fold_max", ["finset"]], ["add", "theorem", "le_fold_min", ["finset"]], ["add", "theorem", "lt_fold_max", ["finset"]], ["add", "theorem", "lt_fold_min", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/intervals.lean", "changes": [["add", "theorem", "card", ["finset", "Ico"]], ["add", "theorem", "diff_left", ["finset", "Ico"]], ["add", "theorem", "diff_right", ["finset", "Ico"]], ["add", "theorem", "disjoint_consecutive", ["finset", "Ico"]], ["add", "theorem", "eq_empty_iff", ["finset", "Ico"]], ["add", "theorem", "eq_empty_of_le", ["finset", "Ico"]], ["add", "theorem", "filter_le", ["finset", "Ico"]], ["add", "theorem", "filter_le_of_le", ["finset", "Ico"]], ["add", "theorem", "filter_le_of_le_bot", ["finset", "Ico"]], ["add", "theorem", "filter_le_of_top_le", ["finset", "Ico"]], ["add", "theorem", "filter_lt", ["finset", "Ico"]], ["add", "theorem", "filter_lt_of_ge", ["finset", "Ico"]], ["add", "theorem", "filter_lt_of_le_bot", ["finset", "Ico"]], ["add", "theorem", "filter_lt_of_top_le", ["finset", "Ico"]], ["add", "theorem", "image_add", ["finset", "Ico"]], ["add", "theorem", "image_const_sub", ["finset", "Ico"]], ["add", "theorem", "image_sub", ["finset", "Ico"]], ["add", "theorem", "insert_succ_bot", ["finset", "Ico"]], ["add", "theorem", "inter_consecutive", ["finset", "Ico"]], ["add", "theorem", "mem", ["finset", "Ico"]], ["add", "theorem", "not_mem_top", ["finset", "Ico"]], ["add", "theorem", "pred_singleton", ["finset", "Ico"]], ["add", "theorem", "self_eq_empty", ["finset", "Ico"]], ["add", "theorem", "subset_iff", ["finset", "Ico"]], ["add", "theorem", "succ_singleton", ["finset", "Ico"]], ["add", "theorem", "succ_top'", ["finset", "Ico"]], ["add", "theorem", "succ_top", ["finset", "Ico"]], ["add", "theorem", "to_finset", ["finset", "Ico"]], ["add", "theorem", "union_consecutive", ["finset", "Ico"]], ["add", "theorem", "val", ["finset", "Ico"]], ["add", "theorem", "zero_bot", ["finset", "Ico"]], ["add", "def", "Ico", ["finset"]], ["add", "theorem", "card", ["finset", "Ico_ℤ"]], ["add", "theorem", "mem", ["finset", "Ico_ℤ"]], ["add", "def", "Ico_ℤ", ["finset"]], ["add", "theorem", "range_eq_Ico", ["finset"]], ["add", "theorem", "range_image_pred_top_sub", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/lattice.lean", "changes": [["add", "theorem", "bInter_coe", ["finset"]], ["add", "theorem", "bInter_finset_image", ["finset"]], ["add", "theorem", "bInter_insert", ["finset"]], ["add", "theorem", "bInter_inter", ["finset"]], ["add", "theorem", "bInter_singleton", ["finset"]], ["add", "theorem", "bUnion_coe", ["finset"]], ["add", "theorem", "bUnion_finset_image", ["finset"]], ["add", "theorem", "bUnion_insert", ["finset"]], ["add", "theorem", "bUnion_singleton", ["finset"]], ["add", "theorem", "bUnion_union", ["finset"]], ["add", "theorem", "comp_inf_eq_inf_comp", ["finset"]], ["add", "theorem", "comp_inf_eq_inf_comp_of_is_total", ["finset"]], ["add", "theorem", "comp_sup_eq_sup_comp", ["finset"]], ["add", "theorem", "comp_sup_eq_sup_comp_of_is_total", ["finset"]], ["add", "theorem", "exists_max_image", ["finset"]], ["add", "theorem", "exists_min_image", ["finset"]], ["add", "theorem", "exists_nat_subset_range", ["finset"]], ["add", "def", "inf", ["finset"]], ["add", "theorem", "inf_congr", ["finset"]], ["add", "theorem", "inf_empty", ["finset"]], ["add", "theorem", "inf_eq_infi", ["finset"]], ["add", "theorem", "inf_insert", ["finset"]], ["add", "theorem", "inf_le", ["finset"]], ["add", "theorem", "inf_mono", ["finset"]], ["add", "theorem", "inf_mono_fun", ["finset"]], ["add", "theorem", "inf_singleton", ["finset"]], ["add", "theorem", "inf_union", ["finset"]], ["add", "theorem", "inf_val", ["finset"]], ["add", "theorem", "infi_coe", ["finset"]], ["add", "theorem", "infi_finset_image", ["finset"]], ["add", "theorem", "infi_insert", ["finset"]], ["add", "theorem", "infi_singleton", ["finset"]], ["add", "theorem", "infi_union", ["finset"]], ["add", "theorem", "le_inf", ["finset"]], ["add", "theorem", "le_inf_iff", ["finset"]], ["add", "theorem", "le_max'", ["finset"]], ["add", "theorem", "le_max_of_mem", ["finset"]], ["add", "theorem", "le_min'", ["finset"]], ["add", "theorem", "le_sup", ["finset"]], ["add", "theorem", "lt_inf_iff", ["finset"]], ["add", "def", "max'", ["finset"]], ["add", "theorem", "max'_le", ["finset"]], ["add", "theorem", "max'_mem", ["finset"]], ["add", "theorem", "max_empty", ["finset"]], ["add", "theorem", "max_eq_none", ["finset"]], ["add", "theorem", "max_eq_sup_with_bot", ["finset"]], ["add", "theorem", "max_insert", ["finset"]], ["add", "theorem", "max_of_mem", ["finset"]], ["add", "theorem", "max_of_nonempty", ["finset"]], ["add", "theorem", "max_singleton", ["finset"]], ["add", "theorem", "mem_of_max", ["finset"]], ["add", "theorem", "mem_of_min", ["finset"]], ["add", "def", "min'", ["finset"]], ["add", "theorem", "min'_le", ["finset"]], ["add", "theorem", "min'_lt_max'", ["finset"]], ["add", "theorem", "min'_lt_max'_of_card", ["finset"]], ["add", "theorem", "min'_mem", ["finset"]], ["add", "theorem", "min_empty", ["finset"]], ["add", "theorem", "min_eq_inf_with_top", ["finset"]], ["add", "theorem", "min_eq_none", ["finset"]], ["add", "theorem", "min_insert", ["finset"]], ["add", "theorem", "min_le_of_mem", ["finset"]], ["add", "theorem", "min_of_mem", ["finset"]], ["add", "theorem", "min_of_nonempty", ["finset"]], ["add", "theorem", "min_singleton", ["finset"]], ["add", "theorem", "subset_range_sup_succ", ["finset"]], ["add", "def", "sup", ["finset"]], ["add", "theorem", "sup_congr", ["finset"]], ["add", "theorem", "sup_def", ["finset"]], ["add", "theorem", "sup_empty", ["finset"]], ["add", "theorem", "sup_eq_supr", ["finset"]], ["add", "theorem", "sup_insert", ["finset"]], ["add", "theorem", "sup_le", ["finset"]], ["add", "theorem", "sup_le_iff", ["finset"]], ["add", "theorem", "sup_lt_iff", ["finset"]], ["add", "theorem", "sup_mono", ["finset"]], ["add", "theorem", "sup_mono_fun", ["finset"]], ["add", "theorem", "sup_singleton", ["finset"]], ["add", "theorem", "sup_union", ["finset"]], ["add", "theorem", "supr_coe", ["finset"]], ["add", "theorem", "supr_finset_image", ["finset"]], ["add", "theorem", "supr_insert", ["finset"]], ["add", "theorem", "supr_singleton", ["finset"]], ["add", "theorem", "supr_union", ["finset"]], ["add", "theorem", "infi_eq_infi_finset", []], ["add", "theorem", "count_sup", ["multiset"]], ["add", "theorem", "Inter_eq_Inter_finset", ["set"]], ["add", "theorem", "Union_eq_Union_finset", ["set"]], ["add", "theorem", "supr_eq_supr_finset", []]]}, {"oldPath": null, "newPath": "src/data/finset/nat_antidiagonal.lean", "changes": [["add", "def", "antidiagonal", ["finset", "nat"]], ["add", "theorem", "antidiagonal_zero", ["finset", "nat"]], ["add", "theorem", "card_antidiagonal", ["finset", "nat"]], ["add", "theorem", "mem_antidiagonal", ["finset", "nat"]]]}, {"oldPath": null, "newPath": "src/data/finset/pi.lean", "changes": [["add", "theorem", "mem_pi", ["finset"]], ["add", "def", "cons", ["finset", "pi"]], ["add", "theorem", "cons_ne", ["finset", "pi"]], ["add", "theorem", "cons_same", ["finset", "pi"]], ["add", "def", "empty", ["finset", "pi"]], ["add", "def", "pi", ["finset"]], ["add", "theorem", "pi_cons_injective", ["finset"]], ["add", "theorem", "pi_disjoint_of_disjoint", ["finset"]], ["add", "theorem", "pi_empty", ["finset"]], ["add", "theorem", "pi_insert", ["finset"]], ["add", "theorem", "pi_subset", ["finset"]], ["add", "theorem", "pi_val", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/powerset.lean", "changes": [["add", "theorem", "card_powerset", ["finset"]], ["add", "theorem", "card_powerset_len", ["finset"]], ["add", "theorem", "empty_mem_powerset", ["finset"]], ["add", "theorem", "mem_powerset", ["finset"]], ["add", "theorem", "mem_powerset_len", ["finset"]], ["add", "theorem", "mem_powerset_self", ["finset"]], ["add", "theorem", "not_mem_of_mem_powerset_of_not_mem", ["finset"]], ["add", "def", "powerset", ["finset"]], ["add", "theorem", "powerset_empty", ["finset"]], ["add", "theorem", "powerset_insert", ["finset"]], ["add", "def", "powerset_len", ["finset"]], ["add", "theorem", "powerset_len_mono", ["finset"]], ["add", "theorem", "powerset_mono", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/finset/sort.lean", "changes": [["add", "theorem", "length_sort", ["finset"]], ["add", "theorem", "mem_sort", ["finset"]], ["add", "def", "mono_of_fin", ["finset"]], ["add", "theorem", "mono_of_fin_bij_on", ["finset"]], ["add", "theorem", "mono_of_fin_eq_mono_of_fin_iff", ["finset"]], ["add", "theorem", "mono_of_fin_injective", ["finset"]], ["add", "theorem", "mono_of_fin_last", ["finset"]], ["add", "theorem", "mono_of_fin_strict_mono", ["finset"]], ["add", "theorem", "mono_of_fin_unique", ["finset"]], ["add", "theorem", "mono_of_fin_zero", ["finset"]], ["add", "def", "sort", ["finset"]], ["add", "theorem", "sort_eq", ["finset"]], ["add", "theorem", "sort_nodup", ["finset"]], ["add", "theorem", "sort_sorted", ["finset"]], ["add", "theorem", "sort_sorted_lt", ["finset"]], ["add", "theorem", "sort_to_finset", ["finset"]], ["add", "theorem", "sorted_last_eq_max'", ["finset"]], ["add", "theorem", "sorted_zero_eq_min'", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/list/default.lean", "newPath": "src/data/list/default.lean", "changes": []}, {"oldPath": "src/data/list/antidiagonal.lean", "newPath": "src/data/list/nat_antidiagonal.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/multiset/antidiagonal.lean", "changes": [["add", "def", "antidiagonal", ["multiset"]], ["add", "theorem", "antidiagonal_coe'", ["multiset"]], ["add", "theorem", "antidiagonal_coe", ["multiset"]], ["add", "theorem", "antidiagonal_cons", ["multiset"]], ["add", "theorem", "antidiagonal_map_fst", ["multiset"]], ["add", "theorem", "antidiagonal_map_snd", ["multiset"]], ["add", "theorem", "antidiagonal_zero", ["multiset"]], ["add", "theorem", "card_antidiagonal", ["multiset"]], ["add", "theorem", "mem_antidiagonal", ["multiset"]], ["add", "theorem", "prod_map_add", ["multiset"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset/basic.lean", "changes": [["del", "theorem", "add_consecutive", ["multiset", "Ico"]], ["del", "theorem", "card", ["multiset", "Ico"]], ["del", "theorem", "eq_cons", ["multiset", "Ico"]], ["del", "theorem", "eq_zero_iff", ["multiset", "Ico"]], ["del", "theorem", "eq_zero_of_le", ["multiset", "Ico"]], ["del", "theorem", "filter_le", ["multiset", "Ico"]], ["del", "theorem", "filter_le_of_le", ["multiset", "Ico"]], ["del", "theorem", "filter_le_of_le_bot", ["multiset", "Ico"]], ["del", "theorem", "filter_le_of_top_le", ["multiset", "Ico"]], ["del", "theorem", "filter_lt", ["multiset", "Ico"]], ["del", "theorem", "filter_lt_of_ge", ["multiset", "Ico"]], ["del", "theorem", "filter_lt_of_le_bot", ["multiset", "Ico"]], ["del", "theorem", "filter_lt_of_top_le", ["multiset", "Ico"]], ["del", "theorem", "inter_consecutive", ["multiset", "Ico"]], ["del", "theorem", "map_add", ["multiset", "Ico"]], ["del", "theorem", "map_sub", ["multiset", "Ico"]], ["del", "theorem", "mem", ["multiset", "Ico"]], ["del", "theorem", "nodup", ["multiset", "Ico"]], ["del", "theorem", "not_mem_top", ["multiset", "Ico"]], ["del", "theorem", "pred_singleton", ["multiset", "Ico"]], ["del", "theorem", "self_eq_zero", ["multiset", "Ico"]], ["del", "theorem", "succ_singleton", ["multiset", "Ico"]], ["del", "theorem", "succ_top", ["multiset", "Ico"]], ["del", "theorem", "zero_bot", ["multiset", "Ico"]], ["del", "def", "Ico", ["multiset"]], ["del", "def", "antidiagonal", ["multiset"]], ["del", "theorem", "antidiagonal_coe'", ["multiset"]], ["del", "theorem", "antidiagonal_coe", ["multiset"]], ["del", "theorem", "antidiagonal_cons", ["multiset"]], ["del", "theorem", "antidiagonal_map_fst", ["multiset"]], ["del", "theorem", "antidiagonal_map_snd", ["multiset"]], ["del", "theorem", "antidiagonal_zero", ["multiset"]], ["del", "theorem", "attach_ndinsert", ["multiset"]], ["del", "theorem", "bind_def", ["multiset"]], ["del", "theorem", "card_antidiagonal", ["multiset"]], ["del", "theorem", "card_pi", ["multiset"]], ["del", "theorem", "card_powerset", ["multiset"]], ["del", "theorem", "card_powerset_len", ["multiset"]], ["del", "theorem", "card_sections", ["multiset"]], ["del", "theorem", "coe_erase_dup", ["multiset"]], ["del", "theorem", "coe_fold_l", ["multiset"]], ["del", "theorem", "coe_fold_r", ["multiset"]], ["del", "theorem", "coe_ndinsert", ["multiset"]], ["del", "theorem", "coe_ndinter", ["multiset"]], ["del", "theorem", "coe_ndunion", ["multiset"]], ["del", "theorem", "coe_nodup", ["multiset"]], ["del", "theorem", "coe_sections", ["multiset"]], ["del", "theorem", "coe_sort", ["multiset"]], ["del", "theorem", "comp_traverse", ["multiset"]], ["del", "theorem", "cons_ndinter_of_mem", ["multiset"]], ["del", "theorem", "cons_ndunion", ["multiset"]], ["del", "theorem", "count_eq_one_of_mem", ["multiset"]], ["del", "theorem", "disjoint_ndinsert_left", ["multiset"]], ["del", "theorem", "disjoint_ndinsert_right", ["multiset"]], ["del", "theorem", "disjoint_of_nodup_add", ["multiset"]], ["del", "def", "erase_dup", ["multiset"]], ["del", "theorem", "erase_dup_add", ["multiset"]], ["del", "theorem", "erase_dup_cons", ["multiset"]], ["del", "theorem", "erase_dup_cons_of_mem", ["multiset"]], ["del", "theorem", "erase_dup_cons_of_not_mem", ["multiset"]], ["del", "theorem", "erase_dup_eq_self", ["multiset"]], ["del", "theorem", "erase_dup_eq_zero", ["multiset"]], ["del", "theorem", "erase_dup_ext", ["multiset"]], ["del", "theorem", "erase_dup_le", ["multiset"]], ["del", "theorem", "erase_dup_map_erase_dup_eq", ["multiset"]], ["del", "theorem", "erase_dup_singleton", ["multiset"]], ["del", "theorem", "erase_dup_subset'", ["multiset"]], ["del", "theorem", "erase_dup_subset", ["multiset"]], ["del", "theorem", "erase_dup_zero", ["multiset"]], ["del", "theorem", "fmap_def", ["multiset"]], ["del", "def", "fold", ["multiset"]], ["del", "theorem", "fold_add", ["multiset"]], ["del", "theorem", "fold_cons'_left", ["multiset"]], ["del", "theorem", "fold_cons'_right", ["multiset"]], ["del", "theorem", "fold_cons_left", ["multiset"]], ["del", "theorem", "fold_cons_right", ["multiset"]], ["del", "theorem", "fold_distrib", ["multiset"]], ["del", "theorem", "fold_eq_foldl", ["multiset"]], ["del", "theorem", "fold_eq_foldr", ["multiset"]], ["del", "theorem", "fold_erase_dup_idem", ["multiset"]], ["del", "theorem", "fold_hom", ["multiset"]], ["del", "theorem", "fold_singleton", ["multiset"]], ["del", "theorem", "fold_union_inter", ["multiset"]], ["del", "theorem", "fold_zero", ["multiset"]], ["del", "theorem", "forall_of_pairwise", ["multiset"]], ["del", "theorem", "id_traverse", ["multiset"]], ["del", "def", "inf", ["multiset"]], ["del", "theorem", "inf_add", ["multiset"]], ["del", "theorem", "inf_cons", ["multiset"]], ["del", "theorem", "inf_erase_dup", ["multiset"]], ["del", "theorem", "inf_le", ["multiset"]], ["del", "theorem", "inf_mono", ["multiset"]], ["del", "theorem", "inf_ndinsert", ["multiset"]], ["del", "theorem", "inf_ndunion", ["multiset"]], ["del", "theorem", "inf_singleton", ["multiset"]], ["del", "theorem", "inf_union", ["multiset"]], ["del", "theorem", "inf_zero", ["multiset"]], ["del", "theorem", "inter_le_ndinter", ["multiset"]], ["del", "theorem", "le_erase_dup", ["multiset"]], ["del", "theorem", "le_iff_subset", ["multiset"]], ["del", "theorem", "le_inf", ["multiset"]], ["del", "theorem", "le_ndinsert_self", ["multiset"]], ["del", "theorem", "le_ndinter", ["multiset"]], ["del", "theorem", "le_ndunion_left", ["multiset"]], ["del", "theorem", "le_ndunion_right", ["multiset"]], ["del", "theorem", "le_smul_erase_dup", ["multiset"]], ["del", "theorem", "le_sup", ["multiset"]], ["del", "theorem", "length_ndinsert_of_mem", ["multiset"]], ["del", "theorem", "length_ndinsert_of_not_mem", ["multiset"]], ["del", "theorem", "length_sort", ["multiset"]], ["del", "theorem", "lift_beta", ["multiset"]], ["del", "theorem", "map_comp_coe", ["multiset"]], ["del", "theorem", "map_eq_map_of_bij_of_nodup", ["multiset"]], ["del", "theorem", "map_single_le_powerset", ["multiset"]], ["del", "theorem", "map_traverse", ["multiset"]], ["del", "theorem", "mem_antidiagonal", ["multiset"]], ["del", "theorem", "mem_erase_dup", ["multiset"]], ["del", "theorem", "mem_erase_iff_of_nodup", ["multiset"]], ["del", "theorem", "mem_erase_of_nodup", ["multiset"]], ["del", "theorem", "mem_ndinsert", ["multiset"]], ["del", "theorem", "mem_ndinsert_of_mem", ["multiset"]], ["del", "theorem", "mem_ndinsert_self", ["multiset"]], ["del", "theorem", "mem_ndinter", ["multiset"]], ["del", "theorem", "mem_ndunion", ["multiset"]], ["del", "theorem", "mem_pi", ["multiset"]], ["del", "theorem", "mem_powerset", ["multiset"]], ["del", "theorem", "mem_powerset_aux", ["multiset"]], ["del", "theorem", "mem_powerset_len", ["multiset"]], ["del", "theorem", "mem_powerset_len_aux", ["multiset"]], ["del", "theorem", "mem_sections", ["multiset"]], ["del", "theorem", "mem_sort", ["multiset"]], ["del", "theorem", "mem_sub_of_nodup", ["multiset"]], ["del", "def", "antidiagonal", ["multiset", "nat"]], ["del", "theorem", "antidiagonal_zero", ["multiset", "nat"]], ["del", "theorem", "card_antidiagonal", ["multiset", "nat"]], ["del", "theorem", "mem_antidiagonal", ["multiset", "nat"]], ["del", "theorem", "nodup_antidiagonal", ["multiset", "nat"]], ["del", "theorem", "naturality", ["multiset"]], ["del", "def", "ndinsert", ["multiset"]], ["del", "theorem", "ndinsert_le", ["multiset"]], ["del", "theorem", "ndinsert_of_mem", ["multiset"]], ["del", "theorem", "ndinsert_of_not_mem", ["multiset"]], ["del", "theorem", "ndinsert_zero", ["multiset"]], ["del", "def", "ndinter", ["multiset"]], ["del", "theorem", "ndinter_cons_of_not_mem", ["multiset"]], ["del", "theorem", "ndinter_eq_inter", ["multiset"]], ["del", "theorem", "ndinter_eq_zero_iff_disjoint", ["multiset"]], ["del", "theorem", "ndinter_le_left", ["multiset"]], ["del", "theorem", "ndinter_le_right", ["multiset"]], ["del", "theorem", "ndinter_subset_left", ["multiset"]], ["del", "theorem", "ndinter_subset_right", ["multiset"]], ["del", "def", "ndunion", ["multiset"]], ["del", "theorem", "ndunion_eq_union", ["multiset"]], ["del", "theorem", "ndunion_le", ["multiset"]], ["del", "theorem", "ndunion_le_add", ["multiset"]], ["del", "theorem", "ndunion_le_union", ["multiset"]], ["del", "def", "nodup", ["multiset"]], ["del", "theorem", "nodup_add", ["multiset"]], ["del", "theorem", "nodup_add_of_nodup", ["multiset"]], ["del", "theorem", "nodup_attach", ["multiset"]], ["del", "theorem", "nodup_bind", ["multiset"]], ["del", "theorem", "nodup_cons", ["multiset"]], ["del", "theorem", "nodup_cons_of_nodup", ["multiset"]], ["del", "theorem", "nodup_erase_dup", ["multiset"]], ["del", "theorem", "nodup_erase_eq_filter", ["multiset"]], ["del", "theorem", "nodup_erase_of_nodup", ["multiset"]], ["del", "theorem", "nodup_ext", ["multiset"]], ["del", "theorem", "nodup_filter", ["multiset"]], ["del", "theorem", "nodup_filter_map", ["multiset"]], ["del", "theorem", "nodup_iff_count_le_one", ["multiset"]], ["del", "theorem", "nodup_iff_le", ["multiset"]], ["del", "theorem", "nodup_inter_left", ["multiset"]], ["del", "theorem", "nodup_inter_right", ["multiset"]], ["del", "theorem", "nodup_map", ["multiset"]], ["del", "theorem", "nodup_map_on", ["multiset"]], ["del", "theorem", "nodup_ndinsert", ["multiset"]], ["del", "theorem", "nodup_ndinter", ["multiset"]], ["del", "theorem", "nodup_ndunion", ["multiset"]], ["del", "theorem", "nodup_of_le", ["multiset"]], ["del", "theorem", "nodup_of_nodup_cons", ["multiset"]], ["del", "theorem", "nodup_of_nodup_map", ["multiset"]], ["del", "theorem", "nodup_pi", ["multiset"]], ["del", "theorem", "nodup_pmap", ["multiset"]], ["del", "theorem", "nodup_powerset", ["multiset"]], ["del", "theorem", "nodup_powerset_len", ["multiset"]], ["del", "theorem", "nodup_product", ["multiset"]], ["del", "theorem", "nodup_range", ["multiset"]], ["del", "theorem", "nodup_sigma", ["multiset"]], ["del", "theorem", "nodup_singleton", ["multiset"]], ["del", "theorem", "nodup_union", ["multiset"]], ["del", "theorem", "nodup_zero", ["multiset"]], ["del", "theorem", "not_mem_of_nodup_cons", ["multiset"]], ["del", "theorem", "not_nodup_pair", ["multiset"]], ["del", "theorem", "pairwise_of_nodup", ["multiset"]], ["del", "def", "cons", ["multiset", "pi"]], ["del", "theorem", "cons_ne", ["multiset", "pi"]], ["del", "theorem", "cons_same", ["multiset", "pi"]], ["del", "theorem", "cons_swap", ["multiset", "pi"]], ["del", "def", "empty", ["multiset", "pi"]], ["del", "def", "pi", ["multiset"]], ["del", "theorem", "pi_cons", ["multiset"]], ["del", "theorem", "pi_cons_injective", ["multiset"]], ["del", "theorem", "pi_zero", ["multiset"]], ["del", "def", "powerset", ["multiset"]], ["del", "def", "powerset_aux'", ["multiset"]], ["del", "theorem", "powerset_aux'_cons", ["multiset"]], ["del", "theorem", "powerset_aux'_nil", ["multiset"]], ["del", "theorem", "powerset_aux'_perm", ["multiset"]], ["del", "def", "powerset_aux", ["multiset"]], ["del", "theorem", "powerset_aux_eq_map_coe", ["multiset"]], ["del", "theorem", "powerset_aux_perm", ["multiset"]], ["del", "theorem", "powerset_aux_perm_powerset_aux'", ["multiset"]], ["del", "theorem", "powerset_coe'", ["multiset"]], ["del", "theorem", "powerset_coe", ["multiset"]], ["del", "theorem", "powerset_cons", ["multiset"]], ["del", "def", "powerset_len", ["multiset"]], ["del", "def", "powerset_len_aux", ["multiset"]], ["del", "theorem", "powerset_len_aux_cons", ["multiset"]], ["del", "theorem", "powerset_len_aux_eq_map_coe", ["multiset"]], ["del", "theorem", "powerset_len_aux_nil", ["multiset"]], ["del", "theorem", "powerset_len_aux_perm", ["multiset"]], ["del", "theorem", "powerset_len_aux_zero", ["multiset"]], ["del", "theorem", "powerset_len_coe'", ["multiset"]], ["del", "theorem", "powerset_len_coe", ["multiset"]], ["del", "theorem", "powerset_len_cons", ["multiset"]], ["del", "theorem", "powerset_len_le_powerset", ["multiset"]], ["del", "theorem", "powerset_len_mono", ["multiset"]], ["del", "theorem", "powerset_len_zero_left", ["multiset"]], ["del", "theorem", "powerset_len_zero_right", ["multiset"]], ["del", "theorem", "powerset_zero", ["multiset"]], ["del", "theorem", "prod_map_add", ["multiset"]], ["del", "theorem", "prod_map_sum", ["multiset"]], ["del", "theorem", "pure_def", ["multiset"]], ["del", "theorem", "range_le", ["multiset"]], ["del", "theorem", "revzip_powerset_aux'", ["multiset"]], ["del", "theorem", "revzip_powerset_aux", ["multiset"]], ["del", "theorem", "revzip_powerset_aux_lemma", ["multiset"]], ["del", "theorem", "revzip_powerset_aux_perm", ["multiset"]], ["del", "theorem", "revzip_powerset_aux_perm_aux'", ["multiset"]], ["del", "def", "sections", ["multiset"]], ["del", "theorem", "sections_add", ["multiset"]], ["del", "theorem", "sections_cons", ["multiset"]], ["del", "theorem", "sections_zero", ["multiset"]], ["del", "def", "sort", ["multiset"]], ["del", "theorem", "sort_eq", ["multiset"]], ["del", "theorem", "sort_sorted", ["multiset"]], ["del", "theorem", "subset_erase_dup'", ["multiset"]], ["del", "theorem", "subset_erase_dup", ["multiset"]], ["del", "theorem", "subset_ndunion_left", ["multiset"]], ["del", "theorem", "subset_ndunion_right", ["multiset"]], ["del", "def", "sup", ["multiset"]], ["del", "theorem", "sup_add", ["multiset"]], ["del", "theorem", "sup_cons", ["multiset"]], ["del", "theorem", "sup_erase_dup", ["multiset"]], ["del", "theorem", "sup_le", ["multiset"]], ["del", "theorem", "sup_mono", ["multiset"]], ["del", "theorem", "sup_ndinsert", ["multiset"]], ["del", "theorem", "sup_ndunion", ["multiset"]], ["del", "theorem", "sup_singleton", ["multiset"]], ["del", "theorem", "sup_union", ["multiset"]], ["del", "theorem", "sup_zero", ["multiset"]], ["del", "def", "traverse", ["multiset"]], ["del", "theorem", "traverse_map", ["multiset"]], ["del", "theorem", "zero_ndinter", ["multiset"]], ["del", "theorem", "zero_ndunion", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/multiset/erase_dup.lean", "changes": [["add", "theorem", "coe_erase_dup", ["multiset"]], ["add", "def", "erase_dup", ["multiset"]], ["add", "theorem", "erase_dup_cons_of_mem", ["multiset"]], ["add", "theorem", "erase_dup_cons_of_not_mem", ["multiset"]], ["add", "theorem", "erase_dup_eq_self", ["multiset"]], ["add", "theorem", "erase_dup_eq_zero", ["multiset"]], ["add", "theorem", "erase_dup_ext", ["multiset"]], ["add", "theorem", "erase_dup_le", ["multiset"]], ["add", "theorem", "erase_dup_map_erase_dup_eq", ["multiset"]], ["add", "theorem", "erase_dup_singleton", ["multiset"]], ["add", "theorem", "erase_dup_subset'", ["multiset"]], ["add", "theorem", "erase_dup_subset", ["multiset"]], ["add", "theorem", "erase_dup_zero", ["multiset"]], ["add", "theorem", "le_erase_dup", ["multiset"]], ["add", "theorem", "mem_erase_dup", ["multiset"]], ["add", "theorem", "nodup_erase_dup", ["multiset"]], ["add", "theorem", "subset_erase_dup'", ["multiset"]], ["add", "theorem", "subset_erase_dup", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/finset_ops.lean", "changes": [["add", "theorem", "attach_ndinsert", ["multiset"]], ["add", "theorem", "coe_ndinsert", ["multiset"]], ["add", "theorem", "coe_ndinter", ["multiset"]], ["add", "theorem", "coe_ndunion", ["multiset"]], ["add", "theorem", "cons_ndinter_of_mem", ["multiset"]], ["add", "theorem", "cons_ndunion", ["multiset"]], ["add", "theorem", "disjoint_ndinsert_left", ["multiset"]], ["add", "theorem", "disjoint_ndinsert_right", ["multiset"]], ["add", "theorem", "erase_dup_add", ["multiset"]], ["add", "theorem", "erase_dup_cons", ["multiset"]], ["add", "theorem", "inter_le_ndinter", ["multiset"]], ["add", "theorem", "le_ndinsert_self", ["multiset"]], ["add", "theorem", "le_ndinter", ["multiset"]], ["add", "theorem", "le_ndunion_left", ["multiset"]], ["add", "theorem", "le_ndunion_right", ["multiset"]], ["add", "theorem", "length_ndinsert_of_mem", ["multiset"]], ["add", "theorem", "length_ndinsert_of_not_mem", ["multiset"]], ["add", "theorem", "mem_ndinsert", ["multiset"]], ["add", "theorem", "mem_ndinsert_of_mem", ["multiset"]], ["add", "theorem", "mem_ndinsert_self", ["multiset"]], ["add", "theorem", "mem_ndinter", ["multiset"]], ["add", "theorem", "mem_ndunion", ["multiset"]], ["add", "def", "ndinsert", ["multiset"]], ["add", "theorem", "ndinsert_le", ["multiset"]], ["add", "theorem", "ndinsert_of_mem", ["multiset"]], ["add", "theorem", "ndinsert_of_not_mem", ["multiset"]], ["add", "theorem", "ndinsert_zero", ["multiset"]], ["add", "def", "ndinter", ["multiset"]], ["add", "theorem", "ndinter_cons_of_not_mem", ["multiset"]], ["add", "theorem", "ndinter_eq_inter", ["multiset"]], ["add", "theorem", "ndinter_eq_zero_iff_disjoint", ["multiset"]], ["add", "theorem", "ndinter_le_left", ["multiset"]], ["add", "theorem", "ndinter_le_right", ["multiset"]], ["add", "theorem", "ndinter_subset_left", ["multiset"]], ["add", "theorem", "ndinter_subset_right", ["multiset"]], ["add", "def", "ndunion", ["multiset"]], ["add", "theorem", "ndunion_eq_union", ["multiset"]], ["add", "theorem", "ndunion_le", ["multiset"]], ["add", "theorem", "ndunion_le_add", ["multiset"]], ["add", "theorem", "ndunion_le_union", ["multiset"]], ["add", "theorem", "nodup_ndinsert", ["multiset"]], ["add", "theorem", "nodup_ndinter", ["multiset"]], ["add", "theorem", "nodup_ndunion", ["multiset"]], ["add", "theorem", "subset_ndunion_left", ["multiset"]], ["add", "theorem", "subset_ndunion_right", ["multiset"]], ["add", "theorem", "zero_ndinter", ["multiset"]], ["add", "theorem", "zero_ndunion", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/fold.lean", "changes": [["add", "theorem", "coe_fold_l", ["multiset"]], ["add", "theorem", "coe_fold_r", ["multiset"]], ["add", "def", "fold", ["multiset"]], ["add", "theorem", "fold_add", ["multiset"]], ["add", "theorem", "fold_cons'_left", ["multiset"]], ["add", "theorem", "fold_cons'_right", ["multiset"]], ["add", "theorem", "fold_cons_left", ["multiset"]], ["add", "theorem", "fold_cons_right", ["multiset"]], ["add", "theorem", "fold_distrib", ["multiset"]], ["add", "theorem", "fold_eq_foldl", ["multiset"]], ["add", "theorem", "fold_eq_foldr", ["multiset"]], ["add", "theorem", "fold_erase_dup_idem", ["multiset"]], ["add", "theorem", "fold_hom", ["multiset"]], ["add", "theorem", "fold_singleton", ["multiset"]], ["add", "theorem", "fold_union_inter", ["multiset"]], ["add", "theorem", "fold_zero", ["multiset"]], ["add", "theorem", "le_smul_erase_dup", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/functor.lean", "changes": [["add", "theorem", "bind_def", ["multiset"]], ["add", "theorem", "comp_traverse", ["multiset"]], ["add", "theorem", "fmap_def", ["multiset"]], ["add", "theorem", "id_traverse", ["multiset"]], ["add", "theorem", "lift_beta", ["multiset"]], ["add", "theorem", "map_comp_coe", ["multiset"]], ["add", "theorem", "map_traverse", ["multiset"]], ["add", "theorem", "naturality", ["multiset"]], ["add", "theorem", "pure_def", ["multiset"]], ["add", "def", "traverse", ["multiset"]], ["add", "theorem", "traverse_map", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/intervals.lean", "changes": [["add", "theorem", "add_consecutive", ["multiset", "Ico"]], ["add", "theorem", "card", ["multiset", "Ico"]], ["add", "theorem", "eq_cons", ["multiset", "Ico"]], ["add", "theorem", "eq_zero_iff", ["multiset", "Ico"]], ["add", "theorem", "eq_zero_of_le", ["multiset", "Ico"]], ["add", "theorem", "filter_le", ["multiset", "Ico"]], ["add", "theorem", "filter_le_of_le", ["multiset", "Ico"]], ["add", "theorem", "filter_le_of_le_bot", ["multiset", "Ico"]], ["add", "theorem", "filter_le_of_top_le", ["multiset", "Ico"]], ["add", "theorem", "filter_lt", ["multiset", "Ico"]], ["add", "theorem", "filter_lt_of_ge", ["multiset", "Ico"]], ["add", "theorem", "filter_lt_of_le_bot", ["multiset", "Ico"]], ["add", "theorem", "filter_lt_of_top_le", ["multiset", "Ico"]], ["add", "theorem", "inter_consecutive", ["multiset", "Ico"]], ["add", "theorem", "map_add", ["multiset", "Ico"]], ["add", "theorem", "map_sub", ["multiset", "Ico"]], ["add", "theorem", "mem", ["multiset", "Ico"]], ["add", "theorem", "nodup", ["multiset", "Ico"]], ["add", "theorem", "not_mem_top", ["multiset", "Ico"]], ["add", "theorem", "pred_singleton", ["multiset", "Ico"]], ["add", "theorem", "self_eq_zero", ["multiset", "Ico"]], ["add", "theorem", "succ_singleton", ["multiset", "Ico"]], ["add", "theorem", "succ_top", ["multiset", "Ico"]], ["add", "theorem", "zero_bot", ["multiset", "Ico"]], ["add", "def", "Ico", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/lattice.lean", "changes": [["add", "def", "inf", ["multiset"]], ["add", "theorem", "inf_add", ["multiset"]], ["add", "theorem", "inf_cons", ["multiset"]], ["add", "theorem", "inf_erase_dup", ["multiset"]], ["add", "theorem", "inf_le", ["multiset"]], ["add", "theorem", "inf_mono", ["multiset"]], ["add", "theorem", "inf_ndinsert", ["multiset"]], ["add", "theorem", "inf_ndunion", ["multiset"]], ["add", "theorem", "inf_singleton", ["multiset"]], ["add", "theorem", "inf_union", ["multiset"]], ["add", "theorem", "inf_zero", ["multiset"]], ["add", "theorem", "le_inf", ["multiset"]], ["add", "theorem", "le_sup", ["multiset"]], ["add", "def", "sup", ["multiset"]], ["add", "theorem", "sup_add", ["multiset"]], ["add", "theorem", "sup_cons", ["multiset"]], ["add", "theorem", "sup_erase_dup", ["multiset"]], ["add", "theorem", "sup_le", ["multiset"]], ["add", "theorem", "sup_mono", ["multiset"]], ["add", "theorem", "sup_ndinsert", ["multiset"]], ["add", "theorem", "sup_ndunion", ["multiset"]], ["add", "theorem", "sup_singleton", ["multiset"]], ["add", "theorem", "sup_union", ["multiset"]], ["add", "theorem", "sup_zero", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/nat_antidiagonal.lean", "changes": [["add", "def", "antidiagonal", ["multiset", "nat"]], ["add", "theorem", "antidiagonal_zero", ["multiset", "nat"]], ["add", "theorem", "card_antidiagonal", ["multiset", "nat"]], ["add", "theorem", "mem_antidiagonal", ["multiset", "nat"]], ["add", "theorem", "nodup_antidiagonal", ["multiset", "nat"]]]}, {"oldPath": null, "newPath": "src/data/multiset/nodup.lean", "changes": [["add", "theorem", "coe_nodup", ["multiset"]], ["add", "theorem", "count_eq_one_of_mem", ["multiset"]], ["add", "theorem", "disjoint_of_nodup_add", ["multiset"]], ["add", "theorem", "forall_of_pairwise", ["multiset"]], ["add", "theorem", "le_iff_subset", ["multiset"]], ["add", "theorem", "map_eq_map_of_bij_of_nodup", ["multiset"]], ["add", "theorem", "mem_erase_iff_of_nodup", ["multiset"]], ["add", "theorem", "mem_erase_of_nodup", ["multiset"]], ["add", "theorem", "mem_sub_of_nodup", ["multiset"]], ["add", "def", "nodup", ["multiset"]], ["add", "theorem", "nodup_add", ["multiset"]], ["add", "theorem", "nodup_add_of_nodup", ["multiset"]], ["add", "theorem", "nodup_attach", ["multiset"]], ["add", "theorem", "nodup_bind", ["multiset"]], ["add", "theorem", "nodup_cons", ["multiset"]], ["add", "theorem", "nodup_cons_of_nodup", ["multiset"]], ["add", "theorem", "nodup_erase_eq_filter", ["multiset"]], ["add", "theorem", "nodup_erase_of_nodup", ["multiset"]], ["add", "theorem", "nodup_ext", ["multiset"]], ["add", "theorem", "nodup_filter", ["multiset"]], ["add", "theorem", "nodup_filter_map", ["multiset"]], ["add", "theorem", "nodup_iff_count_le_one", ["multiset"]], ["add", "theorem", "nodup_iff_le", ["multiset"]], ["add", "theorem", "nodup_inter_left", ["multiset"]], ["add", "theorem", "nodup_inter_right", ["multiset"]], ["add", "theorem", "nodup_map", ["multiset"]], ["add", "theorem", "nodup_map_on", ["multiset"]], ["add", "theorem", "nodup_of_le", ["multiset"]], ["add", "theorem", "nodup_of_nodup_cons", ["multiset"]], ["add", "theorem", "nodup_of_nodup_map", ["multiset"]], ["add", "theorem", "nodup_pmap", ["multiset"]], ["add", "theorem", "nodup_powerset", ["multiset"]], ["add", "theorem", "nodup_powerset_len", ["multiset"]], ["add", "theorem", "nodup_product", ["multiset"]], ["add", "theorem", "nodup_range", ["multiset"]], ["add", "theorem", "nodup_sigma", ["multiset"]], ["add", "theorem", "nodup_singleton", ["multiset"]], ["add", "theorem", "nodup_union", ["multiset"]], ["add", "theorem", "nodup_zero", ["multiset"]], ["add", "theorem", "not_mem_of_nodup_cons", ["multiset"]], ["add", "theorem", "not_nodup_pair", ["multiset"]], ["add", "theorem", "pairwise_of_nodup", ["multiset"]], ["add", "theorem", "range_le", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/pi.lean", "changes": [["add", "theorem", "card_pi", ["multiset"]], ["add", "theorem", "mem_pi", ["multiset"]], ["add", "theorem", "nodup_pi", ["multiset"]], ["add", "def", "cons", ["multiset", "pi"]], ["add", "theorem", "cons_ne", ["multiset", "pi"]], ["add", "theorem", "cons_same", ["multiset", "pi"]], ["add", "theorem", "cons_swap", ["multiset", "pi"]], ["add", "def", "empty", ["multiset", "pi"]], ["add", "def", "pi", ["multiset"]], ["add", "theorem", "pi_cons", ["multiset"]], ["add", "theorem", "pi_cons_injective", ["multiset"]], ["add", "theorem", "pi_zero", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/powerset.lean", "changes": [["add", "theorem", "card_powerset", ["multiset"]], ["add", "theorem", "card_powerset_len", ["multiset"]], ["add", "theorem", "map_single_le_powerset", ["multiset"]], ["add", "theorem", "mem_powerset", ["multiset"]], ["add", "theorem", "mem_powerset_aux", ["multiset"]], ["add", "theorem", "mem_powerset_len", ["multiset"]], ["add", "theorem", "mem_powerset_len_aux", ["multiset"]], ["add", "def", "powerset", ["multiset"]], ["add", "def", "powerset_aux'", ["multiset"]], ["add", "theorem", "powerset_aux'_cons", ["multiset"]], ["add", "theorem", "powerset_aux'_nil", ["multiset"]], ["add", "theorem", "powerset_aux'_perm", ["multiset"]], ["add", "def", "powerset_aux", ["multiset"]], ["add", "theorem", "powerset_aux_eq_map_coe", ["multiset"]], ["add", "theorem", "powerset_aux_perm", ["multiset"]], ["add", "theorem", "powerset_aux_perm_powerset_aux'", ["multiset"]], ["add", "theorem", "powerset_coe'", ["multiset"]], ["add", "theorem", "powerset_coe", ["multiset"]], ["add", "theorem", "powerset_cons", ["multiset"]], ["add", "def", "powerset_len", ["multiset"]], ["add", "def", "powerset_len_aux", ["multiset"]], ["add", "theorem", "powerset_len_aux_cons", ["multiset"]], ["add", "theorem", "powerset_len_aux_eq_map_coe", ["multiset"]], ["add", "theorem", "powerset_len_aux_nil", ["multiset"]], ["add", "theorem", "powerset_len_aux_perm", ["multiset"]], ["add", "theorem", "powerset_len_aux_zero", ["multiset"]], ["add", "theorem", "powerset_len_coe'", ["multiset"]], ["add", "theorem", "powerset_len_coe", ["multiset"]], ["add", "theorem", "powerset_len_cons", ["multiset"]], ["add", "theorem", "powerset_len_le_powerset", ["multiset"]], ["add", "theorem", "powerset_len_mono", ["multiset"]], ["add", "theorem", "powerset_len_zero_left", ["multiset"]], ["add", "theorem", "powerset_len_zero_right", ["multiset"]], ["add", "theorem", "powerset_zero", ["multiset"]], ["add", "theorem", "revzip_powerset_aux'", ["multiset"]], ["add", "theorem", "revzip_powerset_aux", ["multiset"]], ["add", "theorem", "revzip_powerset_aux_lemma", ["multiset"]], ["add", "theorem", "revzip_powerset_aux_perm", ["multiset"]], ["add", "theorem", "revzip_powerset_aux_perm_aux'", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/sections.lean", "changes": [["add", "theorem", "card_sections", ["multiset"]], ["add", "theorem", "coe_sections", ["multiset"]], ["add", "theorem", "mem_sections", ["multiset"]], ["add", "theorem", "prod_map_sum", ["multiset"]], ["add", "def", "sections", ["multiset"]], ["add", "theorem", "sections_add", ["multiset"]], ["add", "theorem", "sections_cons", ["multiset"]], ["add", "theorem", "sections_zero", ["multiset"]]]}, {"oldPath": null, "newPath": "src/data/multiset/sort.lean", "changes": [["add", "theorem", "coe_sort", ["multiset"]], ["add", "theorem", "length_sort", ["multiset"]], ["add", "theorem", "mem_sort", ["multiset"]], ["add", "def", "sort", ["multiset"]], ["add", "theorem", "sort_eq", ["multiset"]], ["add", "theorem", "sort_sorted", ["multiset"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/pnat/intervals.lean", "newPath": "src/data/pnat/intervals.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": []}, {"oldPath": "test/mk_iff_of_inductive.lean", "newPath": "test/mk_iff_of_inductive.lean", "changes": []}, {"oldPath": "test/where.lean", "newPath": "test/where.lean", "changes": []}]}, {"timestamp": 1593597910, "sha": "8ba7595a", "message": "feat(category/preadditive): properties of preadditive biproducts (#3245)\n### Basic facts about morphisms between biproducts in preadditive categories.\n* In any category (with zero morphisms), if `biprod.map f g` is an isomorphism,\n then both `f` and `g` are isomorphisms.\nThe remaining lemmas hold in any preadditive category.\n* If `f` is a morphism `X₁ ⊞ X₂ ⟶ Y₁ ⊞ Y₂` whose `X₁ ⟶ Y₁` entry is an isomorphism,\n then we can construct isomorphisms `L : X₁ ⊞ X₂ ≅ X₁ ⊞ X₂` and `R : Y₁ ⊞ Y₂ ≅ Y₁ ⊞ Y₂`\n so that `L.hom ≫ g ≫ R.hom` is diagonal (with `X₁ ⟶ Y₁` component still `f`),\n via Gaussian elimination.\n* As a corollary of the previous two facts,\n if we have an isomorphism `X₁ ⊞ X₂ ≅ Y₁ ⊞ Y₂` whose `X₁ ⟶ Y₁` entry is an isomorphism,\n we can construct an isomorphism `X₂ ≅ Y₂`.\n* If `f : W ⊞ X ⟶ Y ⊞ Z` is an isomorphism, either `𝟙 W = 0`,\n or at least one of the component maps `W ⟶ Y` and `W ⟶ Z` is nonzero.\n* If `f : ⨁ S ⟶ ⨁ T` is an isomorphism,\n then every column (corresponding to a nonzero summand in the domain)\n has some nonzero matrix entry.\nThis PR is preliminary to some work on semisimple categories.", "changes": [{"oldPath": null, "newPath": "src/category_theory/preadditive/biproducts.lean", "changes": [["add", "theorem", "column_nonzero_of_iso", ["category_theory", "biprod"]], ["add", "def", "gaussian'", ["category_theory", "biprod"]], ["add", "def", "gaussian", ["category_theory", "biprod"]], ["add", "theorem", "inl_of_components", ["category_theory", "biprod"]], ["add", "theorem", "inr_of_components", ["category_theory", "biprod"]], ["add", "def", "iso_elim'", ["category_theory", "biprod"]], ["add", "def", "iso_elim", ["category_theory", "biprod"]], ["add", "def", "of_components", ["category_theory", "biprod"]], ["add", "theorem", "of_components_comp", ["category_theory", "biprod"]], ["add", "theorem", "of_components_eq", ["category_theory", "biprod"]], ["add", "theorem", "of_components_fst", ["category_theory", "biprod"]], ["add", "theorem", "of_components_snd", ["category_theory", "biprod"]], ["add", "def", "unipotent_lower", ["category_theory", "biprod"]], ["add", "def", "unipotent_upper", ["category_theory", "biprod"]], ["add", "theorem", "column_nonzero_of_iso'", ["category_theory", "biproduct"]], ["add", "def", "column_nonzero_of_iso", ["category_theory", "biproduct"]], ["add", "def", "is_iso_left_of_is_iso_biprod_map", ["category_theory"]], ["add", "def", "is_iso_right_of_is_iso_biprod_map", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive.lean", "newPath": "src/category_theory/preadditive/default.lean", "changes": []}, {"oldPath": "src/category_theory/schur.lean", "newPath": "src/category_theory/preadditive/schur.lean", "changes": []}]}, {"timestamp": 1593594227, "sha": "aff951a5", "message": "chore(algebra/big_operators): don't use omega (#3255)\nPostpone importing `omega` a little bit longer.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime.lean", "changes": []}]}, {"timestamp": 1593590107, "sha": "e68503ad", "message": "feat(ring_theory/valuation): definition and basic properties of valuations (#3222)\nFrom the perfectoid project.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["add", "theorem", "eq_one_of_pow_eq_one", []], ["add", "theorem", "one_le_pow_iff", []], ["add", "theorem", "one_le_pow_of_one_le'", []], ["add", "theorem", "pow_eq_one_iff", []], ["add", "theorem", "pow_le_one_iff", []], ["add", "theorem", "pow_le_one_of_le_one", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "mul_le_one_of_le_one_of_le_one", []], ["add", "theorem", "one_le_mul_of_one_le_of_one_le", []]]}, {"oldPath": null, "newPath": "src/ring_theory/valuation/basic.lean", "changes": [["add", "theorem", "coe_coe", ["valuation"]], ["add", "def", "comap", ["valuation"]], ["add", "theorem", "comap_comp", ["valuation"]], ["add", "theorem", "comap_id", ["valuation"]], ["add", "theorem", "comap_on_quot_eq", ["valuation"]], ["add", "theorem", "comap_supp", ["valuation"]], ["add", "theorem", "ext", ["valuation"]], ["add", "theorem", "ext_iff", ["valuation"]], ["add", "theorem", "comap", ["valuation", "is_equiv"]], ["add", "theorem", "map", ["valuation", "is_equiv"]], ["add", "theorem", "ne_zero", ["valuation", "is_equiv"]], ["add", "theorem", "of_eq", ["valuation", "is_equiv"]], ["add", "theorem", "refl", ["valuation", "is_equiv"]], ["add", "theorem", "symm", ["valuation", "is_equiv"]], ["add", "theorem", "trans", ["valuation", "is_equiv"]], ["add", "theorem", "val_eq", ["valuation", "is_equiv"]], ["add", "def", "is_equiv", ["valuation"]], ["add", "theorem", "is_equiv_of_map_strict_mono", ["valuation"]], ["add", "theorem", "is_equiv_of_val_le_one", ["valuation"]], ["add", "def", "map", ["valuation"]], ["add", "theorem", "map_add", ["valuation"]], ["add", "theorem", "map_add_of_distinct_val", ["valuation"]], ["add", "theorem", "map_add_supp", ["valuation"]], ["add", "theorem", "map_eq_of_sub_lt", ["valuation"]], ["add", "theorem", "map_inv", ["valuation"]], ["add", "theorem", "map_mul", ["valuation"]], ["add", "theorem", "map_neg", ["valuation"]], ["add", "theorem", "map_neg_one", ["valuation"]], ["add", "theorem", "map_one", ["valuation"]], ["add", "theorem", "map_pow", ["valuation"]], ["add", "theorem", "map_sub_le_max", ["valuation"]], ["add", "theorem", "map_sub_swap", ["valuation"]], ["add", "theorem", "map_units_inv", ["valuation"]], ["add", "theorem", "map_zero", ["valuation"]], ["add", "theorem", "mem_supp_iff", ["valuation"]], ["add", "theorem", "ne_zero_iff", ["valuation"]], ["add", "def", "on_quot", ["valuation"]], ["add", "theorem", "on_quot_comap_eq", ["valuation"]], ["add", "def", "on_quot_val", ["valuation"]], ["add", "theorem", "self_le_supp_comap", ["valuation"]], ["add", "def", "supp", ["valuation"]], ["add", "theorem", "supp_quot", ["valuation"]], ["add", "theorem", "supp_quot_supp", ["valuation"]], ["add", "def", "to_preorder", ["valuation"]], ["add", "theorem", "unit_map_eq", ["valuation"]], ["add", "theorem", "zero_iff", ["valuation"]], ["add", "structure", "valuation", []]]}]}, {"timestamp": 1593574776, "sha": "a22cd4d7", "message": "chore(algebra/group_with_zero): nolint (#3254)\nAdding two doc strings to make the file lint-free again. cf. #3253.", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}]}, {"timestamp": 1593567064, "sha": "859edfb0", "message": "chore(scripts): update nolints.txt (#3253)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593563283, "sha": "89f3bbc2", "message": "feat(data/matrix): std_basis_matrix (#3244)\nThe definition of\n```\ndef std_basis_matrix (i : m) (j : n) (a : α) : matrix m n α :=\n(λ i' j', if i' = i ∧ j' = j then a else 0)\n```\nand associated lemmas, and some refactoring of `src/ring_theory/matrix_algebra.lean` to use it.\nThis is work of @jalex-stark which I'm PR'ing as part of getting Cayley-Hamilton ready.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_product'", ["finset"]], ["add", "theorem", "map_prod", ["mul_equiv"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "coe_scalar", ["matrix"]], ["add", "theorem", "elementary_eq_basis_mul_basis", ["matrix"]], ["add", "theorem", "matrix_eq_sum_elementary", ["matrix"]], ["add", "theorem", "scalar_apply_eq", ["matrix"]], ["add", "theorem", "scalar_apply_ne", ["matrix"]], ["add", "theorem", "smul_std_basis_matrix", ["matrix"]], ["add", "def", "std_basis_matrix", ["matrix"]], ["add", "theorem", "std_basis_matrix_add", ["matrix"]], ["add", "theorem", "std_basis_matrix_zero", ["matrix"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "map_sum", ["alg_equiv"]], ["add", "theorem", "trans_apply", ["alg_equiv"]]]}, {"oldPath": "src/ring_theory/matrix_algebra.lean", "newPath": "src/ring_theory/matrix_algebra.lean", "changes": [["add", "theorem", "matrix_equiv_tensor_apply_elementary", []]]}]}, {"timestamp": 1593561771, "sha": "a40be987", "message": "feat(category_theory/limits/shapes): simp lemmas to decompose pullback_cone.mk.fst (#3249)\nDecompose `(pullback_cone.mk _ _ _).fst` into its first component (+symmetrical and dual versions)", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "mk_fst", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mk_snd", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mk_inl", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "mk_inr", ["category_theory", "limits", "pushout_cocone"]]]}]}, {"timestamp": 1593556484, "sha": "06256910", "message": "chore(topology/*): use dot syntax for some lemmas (#3251)\nRename:\n* `closure_eq_of_is_closed` to `is_closed.closure_eq`;\n* `closed_of_compact` to `compact.is_closed`;\n* `bdd_above_of_compact` to `compact.bdd_above`;\n* `bdd_below_of_compact` to `compact.bdd_below`.\n* `is_complete_of_is_closed` to `is_closed.is_complete`\n* `is_closed_of_is_complete` to `is_complete.is_closed`\n* `is_closed_iff_nhds` to `is_closed_iff_cluster_pt`\n* `closure_subset_iff_subset_of_is_closed` to `is_closed.closure_subset_iff`\nAdd:\n* `closure_closed_ball` (`@[simp]` lemma)\n* `is_closed.closure_subset : is_closed s → closure s ⊆ s`", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["del", "theorem", "bdd_above_of_compact", []], ["del", "theorem", "bdd_below_of_compact", []], ["add", "theorem", "bdd_above", ["compact"]], ["add", "theorem", "bdd_below", ["compact"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "closure_empty_iff", []], ["del", "theorem", "closure_eq_of_is_closed", []], ["add", "theorem", "closure_subset_iff_is_closed", []], ["del", "theorem", "closure_subset_iff_subset_of_is_closed", []], ["add", "theorem", "closure_eq", ["is_closed"]], ["add", "theorem", "closure_subset", ["is_closed"]], ["add", "theorem", "closure_subset_iff", ["is_closed"]], ["add", "theorem", "is_closed_iff_cluster_pt", []], ["del", "theorem", "is_closed_iff_nhds", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "closure_closed_ball", ["metric"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["del", "theorem", "closed_of_compact", []], ["add", "theorem", "is_closed", ["compact"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "is_complete", ["is_closed"]], ["del", "theorem", "is_complete_of_is_closed", []]]}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": [["del", "theorem", "is_closed_of_is_complete", []], ["add", "theorem", "is_closed", ["is_complete"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1593537256, "sha": "b3915636", "message": "feat(algebra/lie_algebra): conjugation transformation for Lie algebras of skew-adjoint endomorphims, matrices (#3229)\nThe two main results are the lemmas:\n * skew_adjoint_lie_subalgebra_equiv\n * skew_adjoint_matrices_lie_subalgebra_equiv\nThe latter is expected to be useful when defining the classical Lie algebras\nof type B and D.", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["mod", "theorem", "is_skew_adjoint_bracket", ["bilin_form"]], ["del", "def", "skew_adjoint_lie_subalgebra", ["bilin_form"]], ["del", "def", "skew_adjoint_matrices_lie_embedding", ["bilin_form"]], ["del", "def", "skew_adjoint_matrices_lie_subalgebra", ["bilin_form"]], ["add", "theorem", "apply_symm_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "coe_to_lie_equiv", ["lie_algebra", "equiv"]], ["add", "theorem", "coe_to_linear_equiv", ["lie_algebra", "equiv"]], ["add", "def", "of_eq", ["lie_algebra", "equiv"]], ["add", "theorem", "of_eq_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "of_injective_apply", ["lie_algebra", "equiv"]], ["add", "def", "of_subalgebra", ["lie_algebra", "equiv"]], ["add", "theorem", "of_subalgebra_apply", ["lie_algebra", "equiv"]], ["add", "def", "of_subalgebras", ["lie_algebra", "equiv"]], ["add", "theorem", "of_subalgebras_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "of_subalgebras_symm_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "one_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "refl_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "symm_apply_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "symm_symm", ["lie_algebra", "equiv"]], ["add", "theorem", "symm_trans_apply", ["lie_algebra", "equiv"]], ["add", "theorem", "trans_apply", ["lie_algebra", "equiv"]], ["mod", "def", "range", ["lie_algebra", "morphism"]], ["add", "theorem", "range_bracket", ["lie_algebra", "morphism"]], ["add", "theorem", "lie_equiv_matrix'_apply", []], ["add", "theorem", "lie_equiv_matrix'_symm_apply", []], ["add", "theorem", "coe_bracket", ["lie_subalgebra"]], ["add", "theorem", "ext", ["lie_subalgebra"]], ["add", "theorem", "ext_iff", ["lie_subalgebra"]], ["mod", "def", "incl", ["lie_subalgebra"]], ["add", "def", "map", ["lie_subalgebra"]], ["add", "theorem", "mem_coe'", ["lie_subalgebra"]], ["add", "theorem", "mem_coe", ["lie_subalgebra"]], ["add", "theorem", "mem_map_submodule", ["lie_subalgebra"]], ["add", "def", "lie_conj", ["linear_equiv"]], ["add", "theorem", "lie_conj_apply", ["linear_equiv"]], ["add", "theorem", "lie_conj_symm", ["linear_equiv"]], ["add", "theorem", "is_skew_adjoint_bracket", ["matrix"]], ["add", "theorem", "lie_conj_apply", ["matrix"]], ["add", "theorem", "lie_conj_symm_apply", ["matrix"]], ["add", "theorem", "lie_transpose", ["matrix"]], ["add", "def", "skew_adjoint_lie_subalgebra", []], ["add", "def", "skew_adjoint_lie_subalgebra_equiv", []], ["add", "theorem", "skew_adjoint_lie_subalgebra_equiv_apply", []], ["add", "theorem", "skew_adjoint_lie_subalgebra_equiv_symm_apply", []], ["add", "def", "skew_adjoint_matrices_lie_subalgebra", []], ["add", "theorem", "skew_adjoint_matrices_lie_subalgebra_equiv_apply", []]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "transpose_sub", ["matrix"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "conj_apply", ["linear_equiv"]], ["add", "theorem", "conj_comp", ["linear_equiv"]], ["add", "theorem", "conj_trans", ["linear_equiv"]], ["add", "theorem", "of_injective_apply", ["linear_equiv"]], ["add", "def", "of_submodule", ["linear_equiv"]], ["add", "theorem", "of_submodule_apply", ["linear_equiv"]], ["add", "theorem", "of_submodule_symm_apply", ["linear_equiv"]], ["add", "def", "of_submodules", ["linear_equiv"]], ["add", "theorem", "of_submodules_apply", ["linear_equiv"]], ["add", "theorem", "of_submodules_symm_apply", ["linear_equiv"]], ["add", "theorem", "symm_conj_apply", ["linear_equiv"]], ["add", "def", "dom_restrict", ["linear_map"]], ["add", "theorem", "dom_restrict_apply", ["linear_map"]], ["add", "theorem", "mem_map_equiv", ["submodule"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "comp_injective", ["bilin_form"]], ["add", "theorem", "is_pair_self_adjoint_equiv", ["bilin_form"]], ["add", "theorem", "mem_is_pair_self_adjoint_submodule", ["bilin_form"]], ["add", "theorem", "is_adjoint_pair_equiv", ["matrix"]], ["add", "theorem", "to_bilin_form_comp", ["matrix"]], ["mod", "theorem", "matrix_is_adjoint_pair_bilin_form", []], ["add", "theorem", "mem_self_adjoint_matrices_submodule", []], ["add", "theorem", "mem_skew_adjoint_matrices_submodule", []], ["del", "def", "pair_self_adjoint_matrices_linear_embedding", []], ["del", "theorem", "pair_self_adjoint_matrices_linear_embedding_apply", []], ["del", "theorem", "pair_self_adjoint_matrices_linear_embedding_injective", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "diagonal_comp_std_basis", ["matrix"]], ["mod", "theorem", "diagonal_to_lin", ["matrix"]], ["mod", "theorem", "proj_diagonal", ["matrix"]], ["add", "def", "to_linear_equiv", ["matrix"]], ["add", "theorem", "to_linear_equiv_apply", ["matrix"]], ["add", "theorem", "to_linear_equiv_symm_apply", ["matrix"]]]}, {"oldPath": "test/noncomm_ring.lean", "newPath": "test/noncomm_ring.lean", "changes": []}]}, {"timestamp": 1593533888, "sha": "ea961f76", "message": "chore(ring_theory/polynomial): move `ring_theory.polynomial` to `ring_theory.polynomial.basic` (#3248)\nThis PR is the intersection of #3223 and #3241, allowing them to be merged in either order.\nZulip discussion: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/where.20should.20these.20definitions.20live.3F", "changes": [{"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/polynomial/default.lean", "changes": []}]}, {"timestamp": 1593529132, "sha": "9524dee3", "message": "feat(topology): real.image_Icc (#3224)\nThe image of a segment under a real-valued continuous function is a segment.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "theorem", "has_Inf_to_nonempty", []], ["del", "theorem", "has_Sup_to_nonempty", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "subset_Icc_cInf_cSup", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Inf_mem", ["compact"]], ["add", "theorem", "Sup_mem", ["compact"]], ["add", "theorem", "exists_Inf_image_eq", ["compact"]], ["add", "theorem", "exists_Sup_image_eq", ["compact"]], ["add", "theorem", "exists_is_glb", ["compact"]], ["add", "theorem", "exists_is_greatest", ["compact"]], ["add", "theorem", "exists_is_least", ["compact"]], ["add", "theorem", "exists_is_lub", ["compact"]], ["add", "theorem", "is_glb_Inf", ["compact"]], ["add", "theorem", "is_greatest_Sup", ["compact"]], ["add", "theorem", "is_least_Inf", ["compact"]], ["add", "theorem", "is_lub_Sup", ["compact"]], ["add", "theorem", "eq_Icc_cInf_cSup_of_connected_bdd_closed", []], ["add", "theorem", "eq_Icc_of_connected_compact", []], ["mod", "theorem", "cInf_mem", ["is_closed"]], ["mod", "theorem", "cSup_mem", ["is_closed"]], ["add", "theorem", "Icc_subset", ["is_connected"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "image_Icc", ["real"]]]}]}, {"timestamp": 1593520946, "sha": "1bc6ebaa", "message": "fix(tactic/interactive_expr): show let-values in tactic state widget (#3228)\nFixes the missing let-values in the tactic state widget:\n![let_widget](https://user-images.githubusercontent.com/313929/86048315-9d740d80-ba50-11ea-9a8c-09c853687343.png)", "changes": [{"oldPath": "src/tactic/interactive_expr.lean", "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1593517565, "sha": "b82ed0c5", "message": "fix(tactic/apply_fun): beta reduction was too aggressive (#3214)\nThe beta reduction performed by `apply_fun` was previously too aggressive -- in particular it was unfolding `A * B` to `A.mul B` when `A` and `B` are matrices. \nThis fix avoids using `dsimp`, and instead calls `head_beta` separately on the left and right sides of the new hypothesis.", "changes": [{"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "test/apply_fun.lean", "newPath": "test/apply_fun.lean", "changes": []}]}, {"timestamp": 1593510640, "sha": "6d0f40a6", "message": "chore(topology/algebra/ordered): use `continuous_at`, rename (#3231)\n* rename `Sup_mem_of_is_closed` and `Inf_mem_of_is_closed` to\n `is_closed.Sup_mem` and `is_closed.Inf_mem`, similarly with\n `cSup` and `cInf`;\n* make `Sup_of_continuous` etc take `continuous_at` instead\n of `continuous`, rename to `Sup_of_continuous_at_of_monotone` etc,\n similarly with `cSup`/`cInf`.", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "Inf_mem_closure", []], ["del", "theorem", "Inf_mem_of_is_closed", []], ["del", "theorem", "Inf_of_continuous'", []], ["del", "theorem", "Inf_of_continuous", []], ["mod", "theorem", "Sup_mem_closure", []], ["del", "theorem", "Sup_mem_of_is_closed", []], ["del", "theorem", "Sup_of_continuous'", []], ["del", "theorem", "Sup_of_continuous", []], ["del", "theorem", "cInf_mem_of_is_closed", []], ["del", "theorem", "cInf_of_cInf_of_monotone_of_continuous", []], ["del", "theorem", "cSup_mem_of_is_closed", []], ["del", "theorem", "cSup_of_cSup_of_monotone_of_continuous", []], ["del", "theorem", "cinfi_of_cinfi_of_monotone_of_continuous", []], ["del", "theorem", "csupr_of_csupr_of_monotone_of_continuous", []], ["del", "theorem", "infi_of_continuous'", []], ["del", "theorem", "infi_of_continuous", []], ["add", "theorem", "Inf_mem", ["is_closed"]], ["add", "theorem", "Sup_mem", ["is_closed"]], ["add", "theorem", "cInf_mem", ["is_closed"]], ["add", "theorem", "cSup_mem", ["is_closed"]], ["add", "theorem", "map_Inf_of_continuous_at_of_monotone'", []], ["add", "theorem", "map_Inf_of_continuous_at_of_monotone", []], ["add", "theorem", "map_Sup_of_continuous_at_of_monotone'", []], ["add", "theorem", "map_Sup_of_continuous_at_of_monotone", []], ["add", "theorem", "map_cInf_of_continuous_at_of_monotone", []], ["add", "theorem", "map_cSup_of_continuous_at_of_monotone", []], ["add", "theorem", "map_cinfi_of_continuous_at_of_monotone", []], ["add", "theorem", "map_csupr_of_continuous_at_of_monotone", []], ["add", "theorem", "map_infi_of_continuous_at_of_monotone'", []], ["add", "theorem", "map_infi_of_continuous_at_of_monotone", []], ["add", "theorem", "map_supr_of_continuous_at_of_monotone'", []], ["add", "theorem", "map_supr_of_continuous_at_of_monotone", []], ["del", "theorem", "supr_of_continuous'", []], ["del", "theorem", "supr_of_continuous", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "infi_mul_left", ["ennreal"]], ["add", "theorem", "infi_mul_right", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": [["mod", "def", "HD", ["Gromov_Hausdorff"]], ["mod", "theorem", "HD_below_aux1", ["Gromov_Hausdorff"]], ["mod", "theorem", "HD_below_aux2", ["Gromov_Hausdorff"]], ["mod", "theorem", "HD_candidates_b_dist_le", ["Gromov_Hausdorff"]]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1593504364, "sha": "a143c386", "message": "refactor(linear_algebra/affine_space): allow empty affine subspaces (#3219)\nWhen definitions of affine spaces and subspaces were added in #2816,\nthere was some discussion of whether an affine subspace should be\nallowed to be empty.\nAfter further consideration of what lemmas need to be added to fill\nout the interface for affine subspaces, I've concluded that it does\nindeed make sense to allow empty affine subspaces, with `nonempty`\nhypotheses then added for those results that need them, to avoid\nartificial `nonempty` hypotheses for other results on affine spans and\nintersections of affine subspaces that don't depend on any way on\naffine subspaces being nonempty and can be more cleanly stated if they\ncan be empty.\nThus, change the definition to allow affine subspaces to be empty and\nremove the bundled `direction`. The new definition of `direction` (as\nthe `vector_span` of the points in the subspace, i.e. the\n`submodule.span` of the `vsub_set` of the points) is the zero\nsubmodule for both empty affine subspaces and for those consisting of\na single point (and it's proved that in the nonempty case it contains\nexactly the pairwise subtractions of points in the affine subspace).\nThis doesn't generally add new lemmas beyond those used in reproving\nexisting results (including what were previously the `add` and `sub`\naxioms for affine subspaces) with the new definitions. It also\ndoesn't add the complete lattice structure for affine subspaces, just\nhelps enable adding it later.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vsub_mem_vsub_set", ["add_torsor"]], ["add", "theorem", "vsub_set_mono", ["add_torsor"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "subset_span_points", ["affine_space"]], ["add", "theorem", "vsub_mem_vector_span", ["affine_space"]], ["add", "theorem", "vsub_set_subset_vector_span", ["affine_space"]], ["mod", "def", "affine_span", []], ["del", "theorem", "affine_span_coe", []], ["del", "theorem", "affine_span_mem", []], ["add", "theorem", "coe_direction_eq_vsub_set", ["affine_subspace"]], ["add", "def", "direction", ["affine_subspace"]], ["add", "theorem", "direction_eq_vector_span", ["affine_subspace"]], ["add", "theorem", "direction_mk'", ["affine_subspace"]], ["del", "theorem", "direction_mk_of_point_of_direction", ["affine_subspace"]], ["add", "def", "direction_of_nonempty", ["affine_subspace"]], ["add", "theorem", "direction_of_nonempty_eq_direction", ["affine_subspace"]], ["add", "theorem", "mem_direction_iff_eq_vsub", ["affine_subspace"]], ["del", "theorem", "mem_mk_of_point_of_direction", ["affine_subspace"]], ["add", "def", "mk'", ["affine_subspace"]], ["add", "theorem", "mk'_eq", ["affine_subspace"]], ["add", "theorem", "mk'_nonempty", ["affine_subspace"]], ["del", "def", "mk_of_point_of_direction", ["affine_subspace"]], ["del", "theorem", "mk_of_point_of_direction_eq", ["affine_subspace"]], ["add", "theorem", "self_mem_mk'", ["affine_subspace"]], ["add", "theorem", "vadd_mem_mk'", ["affine_subspace"]], ["add", "theorem", "vadd_mem_of_mem_direction", ["affine_subspace"]], ["add", "theorem", "vsub_mem_direction", ["affine_subspace"]], ["add", "theorem", "coe_affine_span", []], ["add", "theorem", "direction_affine_span", []], ["add", "theorem", "mem_affine_span", []]]}]}, {"timestamp": 1593494457, "sha": "e250eb41", "message": "feat(category/schur): a small corollary of the baby schur's lemma (#3239)", "changes": [{"oldPath": "src/category_theory/schur.lean", "newPath": "src/category_theory/schur.lean", "changes": [["add", "def", "is_iso_equiv_nonzero", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": [["add", "theorem", "id_nonzero", ["category_theory"]]]}]}, {"timestamp": 1593494454, "sha": "d788d4b5", "message": "chore(data/set/intervals): split `I??_union_I??_eq_I??` (#3237)\nFor each lemma `I??_union_I??_eq_I??` add a lemma\n`I??_subset_I??_union_I??` with no assumptions.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_subset_Icc_union_Icc", ["set"]], ["add", "theorem", "Icc_subset_Icc_union_Ioc", ["set"]], ["add", "theorem", "Icc_subset_Ico_union_Icc", ["set"]], ["mod", "theorem", "Icc_union_Icc_eq_Icc", ["set"]], ["add", "theorem", "Icc_union_Ici_eq_Ici", ["set"]], ["del", "theorem", "Icc_union_Ici_eq_Ioi", ["set"]], ["mod", "theorem", "Icc_union_Ico_eq_Ico", ["set"]], ["mod", "theorem", "Icc_union_Ioc_eq_Icc", ["set"]], ["add", "theorem", "Icc_union_Ioi_eq_Ici", ["set"]], ["del", "theorem", "Icc_union_Ioi_eq_Ioi", ["set"]], ["mod", "theorem", "Icc_union_Ioo_eq_Ico", ["set"]], ["add", "theorem", "Ici_subset_Icc_union_Ici", ["set"]], ["add", "theorem", "Ici_subset_Icc_union_Ioi", ["set"]], ["add", "theorem", "Ici_subset_Ico_union_Ici", ["set"]], ["add", "theorem", "Ico_subset_Icc_union_Ico", ["set"]], ["add", "theorem", "Ico_subset_Icc_union_Ioo", ["set"]], ["add", "theorem", "Ico_subset_Ico_union_Ico", ["set"]], ["mod", "theorem", "Ico_union_Icc_eq_Icc", ["set"]], ["add", "theorem", "Ico_union_Ici_eq_Ici", ["set"]], ["del", "theorem", "Ico_union_Ici_eq_Ioi", ["set"]], ["mod", "theorem", "Ico_union_Ico_eq_Ico", ["set"]], ["add", "theorem", "Iic_subset_Iic_union_Icc", ["set"]], ["add", "theorem", "Iic_subset_Iic_union_Ioc", ["set"]], ["add", "theorem", "Iic_subset_Iio_union_Icc", ["set"]], ["add", "theorem", "Iio_subset_Iic_union_Ico", ["set"]], ["add", "theorem", "Iio_subset_Iic_union_Ioo", ["set"]], ["add", "theorem", "Iio_subset_Iio_union_Ico", ["set"]], ["add", "theorem", "Ioc_subset_Ioc_union_Icc", ["set"]], ["add", "theorem", "Ioc_subset_Ioc_union_Ioc", ["set"]], ["add", "theorem", "Ioc_subset_Ioo_union_Icc", ["set"]], ["mod", "theorem", "Ioc_union_Icc_eq_Ioc", ["set"]], ["mod", "theorem", "Ioc_union_Ico_eq_Ioo", ["set"]], ["mod", "theorem", "Ioc_union_Ioc_eq_Ioc", ["set"]], ["mod", "theorem", "Ioc_union_Ioo_eq_Ioo", ["set"]], ["add", "theorem", "Ioi_subset_Ioc_union_Ici", ["set"]], ["add", "theorem", "Ioi_subset_Ioc_union_Ioi", ["set"]], ["add", "theorem", "Ioi_subset_Ioo_union_Ici", ["set"]], ["add", "theorem", "Ioo_subset_Ioc_union_Ico", ["set"]], ["add", "theorem", "Ioo_subset_Ioc_union_Ioo", ["set"]], ["add", "theorem", "Ioo_subset_Ioo_union_Ici", ["set"]], ["mod", "theorem", "Ioo_union_Icc_eq_Ioc", ["set"]], ["mod", "theorem", "Ioo_union_Ico_eq_Ioo", ["set"]]]}]}, {"timestamp": 1593494451, "sha": "af53c9d7", "message": "chore(algebra/ring): move some classes to `group_with_zero` (#3232)\nMove `nonzero`, `mul_zero_class` and `no_zero_divisors` to\n`group_with_zero`: these classes don't need `(+)`.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "zero_left", ["commute"]], ["add", "theorem", "zero_right", ["commute"]], ["add", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["add", "theorem", "mul_eq_zero", []], ["add", "theorem", "mul_eq_zero_comm", []], ["add", "theorem", "mul_ne_zero", []], ["add", "theorem", "mul_ne_zero_comm", []], ["add", "theorem", "mul_ne_zero_iff", []], ["add", "theorem", "mul_self_eq_zero", []], ["add", "theorem", "mul_zero", []], ["add", "theorem", "one_ne_zero", []], ["add", "theorem", "zero_left", ["semiconj_by"]], ["add", "theorem", "zero_right", ["semiconj_by"]], ["add", "theorem", "zero_eq_mul", []], ["add", "theorem", "zero_eq_mul_self", []], ["add", "theorem", "zero_mul", []], ["add", "theorem", "zero_ne_one", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "theorem", "zero_left", ["commute"]], ["del", "theorem", "zero_right", ["commute"]], ["del", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["del", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", []], ["mod", "theorem", "left_distrib", []], ["del", "theorem", "mul_eq_zero", []], ["del", "theorem", "mul_eq_zero_comm", []], ["del", "theorem", "mul_ne_zero", []], ["del", "theorem", "mul_ne_zero_comm", []], ["del", "theorem", "mul_ne_zero_iff", []], ["del", "theorem", "mul_self_eq_zero", []], ["del", "theorem", "mul_zero", []], ["del", "theorem", "one_ne_zero", []], ["mod", "theorem", "right_distrib", []], ["del", "theorem", "zero_left", ["semiconj_by"]], ["del", "theorem", "zero_right", ["semiconj_by"]], ["del", "theorem", "zero_eq_mul", []], ["del", "theorem", "zero_eq_mul_self", []], ["del", "theorem", "zero_mul", []], ["del", "theorem", "zero_ne_one", []]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}]}, {"timestamp": 1593494445, "sha": "da481e77", "message": "chore(data/polynomial): partial move from is_ring_hom to ring_hom (#3213)\nThis does not attempt to do a complete refactor of `polynomial.lean` and `mv_polynomial.lean` to remove use of `is_ring_hom`, but only to fix `eval₂` which we need for the current work on Cayley-Hamilton.\nHaving struggled with these two files for the last few days, I'm keen to get them cleaned up, so I'll promise to return to this more thoroughly in a later PR.", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "def", "C", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "def", "eval", ["polynomial"]], ["add", "theorem", "eval₂_X_pow", ["polynomial"]], ["mod", "theorem", "eval₂_comp", ["polynomial"]], ["mod", "theorem", "eval₂_hom", ["polynomial"]], ["mod", "theorem", "eval₂_map", ["polynomial"]], ["add", "theorem", "eval₂_monomial", ["polynomial"]], ["mod", "theorem", "eval₂_neg", ["polynomial"]], ["mod", "theorem", "eval₂_pow", ["polynomial"]], ["mod", "theorem", "eval₂_sub", ["polynomial"]], ["mod", "theorem", "hom_eval₂", ["polynomial"]], ["mod", "def", "map", ["polynomial"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}]}, {"timestamp": 1593490521, "sha": "38904ac8", "message": "feat(data/fintype/basic): card_eq_zero_equiv_equiv_pempty (#3238)\nAdds a constructive equivalence `α ≃ pempty.{v+1}` given `fintype.card α = 0`, which I think wasn't available previously.\nI would have stated this as an `iff`, but as the right hand side is data is an `equiv` itself.", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "def", "card_eq_zero_equiv_equiv_pempty", ["fintype"]]]}]}, {"timestamp": 1593490519, "sha": "1588d81e", "message": "feat(category_theory): remove nearly all universe annotations (#3221)\nDue to some recent changes to mathlib (does someone know the relevant versions/commits?) most of the universe annotations `.{v}` and `include 𝒞` statements that were previously needed in the category_theory library are no longer necessary.\nThis PR removes them!", "changes": [{"oldPath": "src/algebra/category/Algebra/basic.lean", "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["mod", "def", "to_alg_equiv", ["category_theory", "iso"]]]}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": [["mod", "def", "free", ["CommRing"]]]}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["mod", "def", "CommRing_iso_to_ring_equiv", ["category_theory", "iso"]], ["mod", "def", "Ring_iso_to_ring_equiv", ["category_theory", "iso"]]]}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["mod", "def", "limit", ["CommRing", "CommRing_has_limits"]], ["mod", "def", "limit_is_limit", ["CommRing", "CommRing_has_limits"]], ["mod", "def", "limit_π_ring_hom", ["CommRing"]]]}, {"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": [["mod", "def", "free", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["mod", "def", "CommGroup_iso_to_mul_equiv", ["category_theory", "iso"]], ["mod", "def", "Group_iso_to_mul_equiv", ["category_theory", "iso"]]]}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": [["mod", "def", "limit", ["AddCommGroup", "AddCommGroup_has_limits"]], ["mod", "def", "limit_is_limit", ["AddCommGroup", "AddCommGroup_has_limits"]], ["mod", "def", "limit_π_add_monoid_hom", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Group/preadditive.lean", "newPath": "src/algebra/category/Group/preadditive.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["mod", "def", "to_linear_equiv", ["category_theory", "iso"]]]}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["mod", "theorem", "left_unitor_hom", ["Module", "monoidal_category"]]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["mod", "def", "CommMon_iso_to_mul_equiv", ["category_theory", "iso"]], ["mod", "def", "Mon_iso_to_mul_equiv", ["category_theory", "iso"]]]}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": "src/algebra/homology/chain_complex.lean", "changes": [["mod", "theorem", "d_squared", ["chain_complex"]], ["mod", "theorem", "d_squared", ["cochain_complex"]]]}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["mod", "def", "cohomology_functor", ["cochain_complex"]], ["mod", "def", "cohomology_map", ["cochain_complex"]], ["mod", "theorem", "cohomology_map_comp", ["cochain_complex"]], ["mod", "theorem", "cohomology_map_condition", ["cochain_complex"]], ["mod", "theorem", "cohomology_map_id", ["cochain_complex"]], ["mod", "def", "image_map", ["cochain_complex"]], ["mod", "theorem", "image_map_ι", ["cochain_complex"]], ["mod", "theorem", "induced_maps_commute", ["cochain_complex"]], ["mod", "def", "kernel_functor", ["cochain_complex"]], ["mod", "theorem", "kernel_map_comp", ["cochain_complex"]], ["mod", "theorem", "kernel_map_id", ["cochain_complex"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["mod", "theorem", "as_coe", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "comp", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "comp_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "comp_coe", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "ext", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "f_as_coe", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "forget", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "structure", "hom", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "hom_mk_coe", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "id", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "id_c", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "id_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "id_coe", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "id_coe_fn", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "def", "map_presheaf", ["category_theory", "functor"]], ["mod", "theorem", "map_presheaf_map_c", ["category_theory", "functor"]], ["mod", "theorem", "map_presheaf_map_f", ["category_theory", "functor"]], ["mod", "theorem", "map_presheaf_obj_X", ["category_theory", "functor"]], ["mod", "theorem", "map_presheaf_obj_𝒪", ["category_theory", "functor"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["mod", "def", "stalk", ["algebraic_geometry", "PresheafedSpace"]], ["mod", "theorem", "comp", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "theorem", "id", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["mod", "def", "stalk_map", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": [["mod", "def", "has_pullbacks", ["category_theory", "abelian"]], ["mod", "def", "has_pushouts", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/category_theory/category/Rel.lean", "newPath": "src/category_theory/category/Rel.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["mod", "def", "binary_product_exponentiable", ["category_theory"]], ["mod", "def", "cartesian_closed", ["category_theory"]], ["mod", "def", "exponentiable", ["category_theory"]], ["mod", "def", "mul_zero", ["category_theory"]], ["mod", "def", "pow_zero", ["category_theory"]], ["mod", "def", "prod_coprod_distrib", ["category_theory"]], ["mod", "def", "terminal_exponentiable", ["category_theory"]], ["mod", "def", "zero_mul", ["category_theory"]]]}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": [["mod", "theorem", "refl_conj", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["mod", "theorem", "comp_f", ["category_theory", "differential_object"]], ["mod", "def", "forget", ["category_theory", "differential_object"]], ["mod", "def", "comp", ["category_theory", "differential_object", "hom"]], ["mod", "def", "id", ["category_theory", "differential_object", "hom"]], ["mod", "structure", "hom", ["category_theory", "differential_object"]], ["mod", "theorem", "id_f", ["category_theory", "differential_object"]], ["mod", "theorem", "zero_f", ["category_theory", "differential_object"]]]}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["mod", "def", "End", ["category_theory"]]]}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["mod", "def", "retraction", ["category_theory"]], ["mod", "def", "section_", ["category_theory"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["mod", "theorem", "zero_apply", ["category_theory", "graded_object"]]]}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["mod", "def", "of_is_iso", ["category_theory", "groupoid"]]]}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["mod", "def", "functor_category_is_colimit_cocone", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "pre_map'", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "map_pre'", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["mod", "def", "over_binary_product_of_pullback", ["category_theory", "over", "construct_products"]], ["mod", "def", "over_finite_products_of_finite_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["mod", "def", "over_product_of_wide_pullback", ["category_theory", "over", "construct_products"]], ["mod", "def", "over_products_of_wide_pullbacks", ["category_theory", "over", "construct_products"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": [["mod", "def", "preserves_colimit_iso", ["category_theory", "limits"]], ["mod", "def", "preserves_limit_iso", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "def", "map", ["category_theory", "limits", "coprod"]], ["mod", "def", "map", ["category_theory", "limits", "prod"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "def", "to_cocone", ["category_theory", "limits", "binary_bicone"]], ["mod", "theorem", "to_cocone_X", ["category_theory", "limits", "binary_bicone"]], ["mod", "theorem", "to_cocone_ι_app_left", ["category_theory", "limits", "binary_bicone"]], ["mod", "theorem", "to_cocone_ι_app_right", ["category_theory", "limits", "binary_bicone"]], ["mod", "def", "to_cone", ["category_theory", "limits", "binary_bicone"]], ["mod", "theorem", "to_cone_X", ["category_theory", "limits", "binary_bicone"]], ["mod", "theorem", "to_cone_π_app_left", ["category_theory", "limits", "binary_bicone"]], ["mod", "theorem", "to_cone_π_app_right", ["category_theory", "limits", "binary_bicone"]], ["mod", "def", "desc", ["category_theory", "limits", "biprod"]], ["mod", "def", "fst", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "hom_ext'", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "biprod"]], ["mod", "def", "inl", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inl_fst", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inl_map", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inl_snd", ["category_theory", "limits", "biprod"]], ["mod", "def", "inr", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inr_fst", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inr_map", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inr_snd", ["category_theory", "limits", "biprod"]], ["mod", "def", "lift", ["category_theory", "limits", "biprod"]], ["mod", "def", "map'", ["category_theory", "limits", "biprod"]], ["mod", "def", "map", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "map_eq", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "map_eq_map'", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "map_fst", ["category_theory", "limits", "biprod"]], ["mod", "def", "map_iso", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "map_snd", ["category_theory", "limits", "biprod"]], ["mod", "def", "snd", ["category_theory", "limits", "biprod"]], ["mod", "def", "biprod", ["category_theory", "limits"]], ["mod", "def", "biprod_iso", ["category_theory", "limits"]], ["mod", "theorem", "hom_ext'", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "inl_map", ["category_theory", "limits", "biproduct"]], ["mod", "def", "map'", ["category_theory", "limits", "biproduct"]], ["mod", "def", "map", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "map_eq", ["category_theory", "limits", "biproduct"]], ["mod", "theorem", "map_eq_map'", ["category_theory", "limits", "biproduct"]], ["mod", "def", "of_has_binary_coproduct", ["category_theory", "limits", "has_binary_biproduct"]], ["mod", "def", "of_has_binary_product", ["category_theory", "limits", "has_binary_biproduct"]], ["mod", "def", "of_has_binary_coproducts", ["category_theory", "limits", "has_binary_biproducts"]], ["mod", "def", "of_has_binary_products", ["category_theory", "limits", "has_binary_biproducts"]], ["mod", "def", "has_binary_biproducts_of_finite_biproducts", ["category_theory", "limits"]], ["mod", "def", "of_has_coproduct", ["category_theory", "limits", "has_biproduct"]], ["mod", "def", "of_has_product", ["category_theory", "limits", "has_biproduct"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["mod", "theorem", "of_cocone_ι", ["category_theory", "limits", "cofork"]], ["mod", "def", "diagram_iso_parallel_pair", ["category_theory", "limits"]], ["mod", "theorem", "of_cone_π", ["category_theory", "limits", "fork"]], ["mod", "def", "has_coequalizers_of_has_finite_colimits", ["category_theory", "limits"]], ["mod", "def", "has_equalizers_of_has_finite_limits", ["category_theory", "limits"]], ["mod", "def", "parallel_pair", ["category_theory", "limits"]], ["mod", "theorem", "walking_parallel_pair_hom_id", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["mod", "structure", "strong_epi_mono_factorisation", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["mod", "def", "has_cokernels_of_has_finite_colimits", ["category_theory", "limits"]], ["mod", "def", "has_kernels_of_has_finite_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "def", "cospan", ["category_theory", "limits"]], ["mod", "def", "has_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["mod", "def", "has_pushouts_of_has_finite_colimits", ["category_theory", "limits"]], ["mod", "def", "span", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["mod", "def", "has_initial_of_unique", ["category_theory", "limits"]], ["mod", "def", "has_terminal_of_unique", ["category_theory", "limits"]], ["mod", "def", "to", ["category_theory", "limits", "initial"]], ["mod", "def", "initial", ["category_theory", "limits"]], ["mod", "def", "from", ["category_theory", "limits", "terminal"]], ["mod", "def", "terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["mod", "def", "has_finite_wide_pullbacks_of_has_finite_limits", []], ["mod", "def", "has_finite_wide_pushouts_of_has_finite_limits", []]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["mod", "theorem", "ext", ["category_theory", "limits", "has_zero_morphisms"]], ["mod", "def", "has_initial", ["category_theory", "limits", "has_zero_object"]], ["mod", "def", "has_terminal", ["category_theory", "limits", "has_zero_object"]], ["mod", "def", "zero_morphisms_of_zero_object", ["category_theory", "limits", "has_zero_object"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["mod", "structure", "coalgebra", ["category_theory", "comonad"]], ["mod", "structure", "algebra", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["mod", "def", "has_limits_of_reflective", ["category_theory"]], ["mod", "def", "monadic_creates_limits", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functorial.lean", "newPath": "src/category_theory/monoidal/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["mod", "def", "monoidal_of_has_finite_coproducts", ["category_theory"]], ["mod", "def", "monoidal_of_has_finite_products", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive.lean", "newPath": "src/category_theory/preadditive.lean", "changes": [["mod", "def", "has_coequalizers_of_has_cokernels", ["category_theory", "preadditive"]], ["mod", "def", "has_equalizers_of_has_kernels", ["category_theory", "preadditive"]]]}, {"oldPath": "src/category_theory/schur.lean", "newPath": "src/category_theory/schur.lean", "changes": [["mod", "def", "is_iso_of_hom_simple", ["category_theory"]]]}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": [["mod", "def", "shift", ["category_theory"]]]}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": [["mod", "def", "is_iso_of_epi_of_nonzero", ["category_theory"]], ["mod", "def", "is_iso_of_mono_of_nonzero", ["category_theory"]], ["mod", "theorem", "ext", ["category_theory", "simple"]], ["mod", "def", "simple_of_cosimple", ["category_theory"]], ["mod", "theorem", "zero_not_simple", ["category_theory"]]]}]}, {"timestamp": 1593486321, "sha": "056a72aa", "message": "perf(linarith): don't repeat nonneg proofs for nat-to-int casts (#3226)\nThis performance issue showed up particularly when using `nlinarith` over `nat`s. Proofs that `(n : int) >= 0` were being repeated many times, which led to quadratic blowup in the `nlinarith` preprocessing.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "cos_le_cos_of_nonneg_of_le_pi", ["real"]], ["mod", "theorem", "cos_lt_cos_of_nonneg_of_le_pi", ["real"]], ["mod", "theorem", "cos_lt_cos_of_nonneg_of_le_pi_div_two", ["real"]], ["mod", "theorem", "tan_lt_tan_of_lt_of_lt_pi_div_two", ["real"]], ["mod", "theorem", "tan_lt_tan_of_nonneg_of_lt_pi_div_two", ["real"]]]}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/linarith/preprocessing.lean", "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1593486319, "sha": "791744b0", "message": "feat(analysis/normed_space/real_inner_product,geometry/euclidean): inner products of weighted subtractions (#3203)\nExpress the inner product of two weighted sums, where the weights in\neach sum add to 0, in terms of the norms of pairwise differences.\nThus, express inner products for vectors expressed in terms of\n`weighted_vsub` and distances for points expressed in terms of\n`affine_combination`.\nThis is a general form of the standard formula for a distance between\npoints expressed in terms of barycentric coordinates: if the\ndifference between the normalized barycentric coordinates (with\nrespect to triangle ABC) for two points is (x, y, z) then the squared\ndistance between them is -(a^2 yz + b^2 zx + c^2 xy).\nAlthough some of the lemmas are given with the two vectors expressed\nas sums over different indexed families of vectors or points (since\nnothing in the statement or proof depends on them being the same), I\nexpect almost all uses will be in cases where the two indexed families\nare the same and only the weights vary.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "inner_sum_smul_sum_smul_of_sum_eq_zero", []]]}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["add", "theorem", "dist_affine_combination", ["euclidean_geometry"]], ["add", "theorem", "inner_weighted_vsub", ["euclidean_geometry"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "weighted_vsub_apply", ["finset"]]]}]}, {"timestamp": 1593481400, "sha": "4fcd6fd4", "message": "chore(*): import expression widgets from core (#3181)\nWith widgets, the rendering of the tactic state is implemented in pure Lean code. I would like to move this part (temporarily) into mathlib to facilitate collaborative improvement and rapid iteration under a mature community review procedure. (That is, I want other people to tweak it themselves without having to wait a week for the next Lean release to see the effect.)\nI didn't need to change anything in the source code (except for adding some doc strings). So it should be easy to copy it back to core if we want to.\nThere are no changes required to core for this PR.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/interactive_expr.lean", "changes": []}]}, {"timestamp": 1593477427, "sha": "e8fd085f", "message": "chore(scripts): update nolints.txt (#3234)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593457431, "sha": "45904fba", "message": "chore(*): change notation for `set.compl` (#3212)\n* introduce typeclass `has_compl` and notation `∁` for `has_compl.compl`\n* use it instead of `has_neg` for `set` and `boolean_algebra`", "changes": [{"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "sum_compl_apply_inr", ["equiv", "set"]]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["mod", "theorem", "indicator_compl", ["set"]]]}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["mod", "theorem", "compl_dom_subset_core", ["pfun"]], ["mod", "theorem", "core_eq", ["pfun"]], ["mod", "theorem", "core_res", ["pfun"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "compl_compl", ["set"]], ["mod", "theorem", "compl_empty", ["set"]], ["mod", "theorem", "compl_empty_iff", ["set"]], ["mod", "theorem", "compl_eq_univ_diff", ["set"]], ["mod", "theorem", "compl_image", ["set"]], ["mod", "theorem", "compl_inter", ["set"]], ["mod", "theorem", "compl_inter_self", ["set"]], ["mod", "theorem", "compl_set_of", ["set"]], ["mod", "theorem", "compl_singleton_eq", ["set"]], ["mod", "theorem", "compl_subset_comm", ["set"]], ["mod", "theorem", "compl_subset_compl", ["set"]], ["mod", "theorem", "compl_subset_iff_union", ["set"]], ["mod", "theorem", "compl_union", ["set"]], ["mod", "theorem", "compl_union_self", ["set"]], ["mod", "theorem", "compl_univ", ["set"]], ["mod", "theorem", "compl_univ_iff", ["set"]], ["mod", "theorem", "diff_compl", ["set"]], ["mod", "theorem", "diff_eq", ["set"]], ["del", "theorem", "fix_set_compl", ["set"]], ["mod", "theorem", "image_compl_eq", ["set"]], ["mod", "theorem", "image_compl_subset", ["set"]], ["mod", "theorem", "inter_compl_nonempty_iff", ["set"]], ["mod", "theorem", "inter_compl_self", ["set"]], ["mod", "theorem", "inter_eq_compl_compl_union_compl", ["set"]], ["mod", "theorem", "inter_subset", ["set"]], ["mod", "theorem", "mem_compl", ["set"]], ["mod", "theorem", "mem_compl_eq", ["set"]], ["mod", "theorem", "mem_compl_iff", ["set"]], ["mod", "theorem", "mem_compl_singleton_iff", ["set"]], ["mod", "theorem", "nonempty_compl", ["set"]], ["mod", "theorem", "not_mem_of_mem_compl", ["set"]], ["mod", "theorem", "preimage_compl", ["set"]], ["mod", "theorem", "subset_compl_comm", ["set"]], ["mod", "theorem", "subset_compl_iff_disjoint", ["set"]], ["mod", "theorem", "subset_compl_singleton_iff", ["set"]], ["mod", "theorem", "subset_image_compl", ["set"]], ["mod", "theorem", "union_compl_self", ["set"]], ["mod", "theorem", "union_eq_compl_compl_inter_compl", ["set"]]]}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["mod", "def", "disjointed", ["set"]]]}, {"oldPath": "src/data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["mod", "theorem", "compl_Ici", ["set"]], ["mod", "theorem", "compl_Iic", ["set"]], ["mod", "theorem", "compl_Iio", ["set"]], ["mod", "theorem", "compl_Ioi", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_eq_comp_Union_comp", ["set"]], ["mod", "theorem", "Union_eq_comp_Inter_comp", ["set"]], ["mod", "theorem", "compl_Inter", ["set"]], ["mod", "theorem", "compl_Union", ["set"]], ["mod", "theorem", "compl_bInter", ["set"]], ["mod", "theorem", "compl_bUnion", ["set"]], ["mod", "theorem", "disjoint_compl", ["set"]], ["del", "theorem", "sub_eq_diff", ["set"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "compl", ["is_measurable"]], ["mod", "theorem", "compl_iff", ["is_measurable"]], ["mod", "theorem", "of_compl", ["is_measurable"]], ["del", "theorem", "sub", ["is_measurable"]], ["mod", "theorem", "has_compl_iff", ["measurable_space", "dynkin_system"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "mem_ae_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["del", "theorem", "sub_le_sub", ["boolean_algebra"]], ["mod", "theorem", "compl_bot", []], ["mod", "theorem", "compl_compl'", []], ["mod", "theorem", "compl_inf", []], ["mod", "theorem", "compl_inf_eq_bot", []], ["mod", "theorem", "compl_inj_iff", []], ["mod", "theorem", "compl_injective", []], ["mod", "theorem", "compl_le_compl", []], ["mod", "theorem", "compl_le_compl_iff_le", []], ["mod", "theorem", "compl_le_iff_compl_le", []], ["mod", "theorem", "compl_le_of_compl_le", []], ["mod", "theorem", "compl_sup", []], ["mod", "theorem", "compl_sup_eq_top", []], ["mod", "theorem", "compl_top", []], ["mod", "theorem", "compl_unique", []], ["mod", "theorem", "inf_compl_eq_bot", []], ["add", "theorem", "compl_eq", ["is_compl"]], ["del", "theorem", "neg_eq", ["is_compl"]], ["add", "theorem", "is_compl_compl", []], ["del", "theorem", "is_compl_neg", []], ["mod", "theorem", "le_compl_of_le_compl", []], ["add", "theorem", "sdiff_eq", []], ["add", "theorem", "sdiff_eq_left", []], ["add", "theorem", "sdiff_le_sdiff", []], ["del", "theorem", "sub_eq", []], ["del", "theorem", "sub_eq_left", []], ["mod", "theorem", "sup_compl_eq_top", []], ["add", "theorem", "sup_sdiff_same", []], ["del", "theorem", "sup_sub_same", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["mod", "theorem", "compl_Inf", []], ["mod", "theorem", "compl_Sup", []], ["mod", "theorem", "compl_infi", []], ["mod", "theorem", "compl_supr", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "inf_principal_eq_bot", ["filter"]], ["mod", "theorem", "is_compl_principal", ["filter"]], ["mod", "theorem", "mem_sets_of_eq_bot", ["filter"]]]}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": [["mod", "theorem", "mem_cofinite", ["filter"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "mem_hyperfilter_of_finite_compl", ["filter"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "mk_sum_compl", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "closure_compl", []], ["mod", "theorem", "closure_diff", []], ["mod", "theorem", "closure_eq_compl_interior_compl", []], ["mod", "theorem", "frontier_compl", []], ["mod", "theorem", "interior_compl", []], ["mod", "def", "is_closed", []], ["mod", "theorem", "is_closed_compl_iff", []], ["mod", "theorem", "is_open_compl_iff", []]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "compl_singleton_mem_nhds", []]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "is_clopen_compl", []], ["mod", "theorem", "is_clopen_compl_iff", []], ["mod", "theorem", "is_clopen_diff", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compact_separated.lean", "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1593447120, "sha": "d3006bad", "message": "chore(init_/): remove this directory (#3227)\n* remove `init_/algebra`;\n* move `init_/data/nat` to `data/nat/basic`;\n* move `init_/data/int` to `data/int/basic`.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "abs_eq_nat_abs", ["int"]], ["add", "theorem", "nat_abs_abs", ["int"]], ["add", "theorem", "sign_mul_abs", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "eq_of_mul_eq_mul_right", ["nat"]], ["add", "theorem", "le_mul_self", ["nat"]], ["add", "theorem", "mul_self_le_mul_self", ["nat"]], ["add", "theorem", "mul_self_le_mul_self_iff", ["nat"]], ["add", "theorem", "mul_self_lt_mul_self", ["nat"]], ["add", "theorem", "mul_self_lt_mul_self_iff", ["nat"]], ["add", "theorem", "one_add", ["nat"]]]}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/init_/algebra/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/init_/algebra/norm_num.lean", "newPath": null, "changes": [["del", "def", "add1", ["norm_num"]], ["del", "theorem", "add1_bit0", ["norm_num"]], ["del", "theorem", "add1_bit1", ["norm_num"]], ["del", "theorem", "add1_bit1_helper", ["norm_num"]], ["del", "theorem", "add1_one", ["norm_num"]], ["del", "theorem", "add1_zero", ["norm_num"]], ["del", "theorem", "add_comm_four", ["norm_num"]], ["del", "theorem", "add_comm_middle", ["norm_num"]], ["del", "theorem", "add_div_helper", ["norm_num"]], ["del", "theorem", "bin_add_zero", ["norm_num"]], ["del", "theorem", "bin_zero_add", ["norm_num"]], ["del", "theorem", "bit0_add_bit0", ["norm_num"]], ["del", "theorem", "bit0_add_bit0_helper", ["norm_num"]], ["del", "theorem", "bit0_add_bit1", ["norm_num"]], ["del", "theorem", "bit0_add_bit1_helper", ["norm_num"]], ["del", "theorem", "bit0_add_one", ["norm_num"]], ["del", "theorem", "bit1_add_bit0", ["norm_num"]], ["del", "theorem", "bit1_add_bit0_helper", ["norm_num"]], ["del", "theorem", "bit1_add_bit1", ["norm_num"]], ["del", "theorem", "bit1_add_bit1_helper", ["norm_num"]], ["del", "theorem", "bit1_add_one", ["norm_num"]], ["del", "theorem", "bit1_add_one_helper", ["norm_num"]], ["del", "theorem", "div_add_helper", ["norm_num"]], ["del", "theorem", "div_eq_div_helper", ["norm_num"]], ["del", "theorem", "div_helper", ["norm_num"]], ["del", "theorem", "div_mul_helper", ["norm_num"]], ["del", "theorem", "mk_cong", ["norm_num"]], ["del", "theorem", "mul_bit0", ["norm_num"]], ["del", "theorem", "mul_bit0_helper", ["norm_num"]], ["del", "theorem", "mul_bit1", ["norm_num"]], ["del", "theorem", "mul_bit1_helper", ["norm_num"]], ["del", "theorem", "mul_div_helper", ["norm_num"]], ["del", "theorem", "mul_one", ["norm_num"]], ["del", "theorem", "mul_zero", ["norm_num"]], ["del", "theorem", "neg_add_neg_eq_of_add_add_eq_zero", ["norm_num"]], ["del", "theorem", "neg_add_neg_helper", ["norm_num"]], ["del", "theorem", "neg_add_pos_eq_of_eq_add", ["norm_num"]], ["del", "theorem", "neg_add_pos_helper1", ["norm_num"]], ["del", "theorem", "neg_add_pos_helper2", ["norm_num"]], ["del", "theorem", "neg_mul_neg_helper", ["norm_num"]], ["del", "theorem", "neg_mul_pos_helper", ["norm_num"]], ["del", "theorem", "neg_neg_helper", ["norm_num"]], ["del", "theorem", "neg_zero_helper", ["norm_num"]], ["del", "theorem", "nonneg_bit0_helper", ["norm_num"]], ["del", "theorem", "nonneg_bit1_helper", ["norm_num"]], ["del", "theorem", "nonzero_of_div_helper", ["norm_num"]], ["del", "theorem", "nonzero_of_neg_helper", ["norm_num"]], ["del", "theorem", "nonzero_of_pos_helper", ["norm_num"]], ["del", "theorem", "one_add_bit0", ["norm_num"]], ["del", "theorem", "one_add_bit1", ["norm_num"]], ["del", "theorem", "one_add_bit1_helper", ["norm_num"]], ["del", "theorem", "one_add_one", ["norm_num"]], ["del", "theorem", "pos_add_neg_helper", ["norm_num"]], ["del", "theorem", "pos_bit0_helper", ["norm_num"]], ["del", "theorem", "pos_bit1_helper", ["norm_num"]], ["del", "theorem", "pos_mul_neg_helper", ["norm_num"]], ["del", "theorem", "sub_nat_pos_helper", ["norm_num"]], ["del", "theorem", "sub_nat_zero_helper", ["norm_num"]], ["del", "theorem", "subst_into_div", ["norm_num"]], ["del", "theorem", "subst_into_prod", ["norm_num"]], ["del", "theorem", "subst_into_subtr", ["norm_num"]], ["del", "theorem", "subst_into_sum", ["norm_num"]], ["del", "theorem", "zero_mul", ["norm_num"]]]}, {"oldPath": "src/init_/data/int/basic.lean", "newPath": null, "changes": []}, {"oldPath": "src/init_/data/int/order.lean", "newPath": null, "changes": [["del", "theorem", "abs_eq_nat_abs", ["int"]], ["del", "theorem", "nat_abs_abs", ["int"]], ["del", "theorem", "sign_mul_abs", ["int"]]]}, {"oldPath": "src/init_/data/nat/lemmas.lean", "newPath": null, "changes": [["del", "theorem", "eq_of_mul_eq_mul_right", ["nat"]], ["del", "theorem", "le_mul_self", ["nat"]], ["del", "theorem", "mul_self_le_mul_self", ["nat"]], ["del", "theorem", "mul_self_le_mul_self_iff", ["nat"]], ["del", "theorem", "mul_self_lt_mul_self", ["nat"]], ["del", "theorem", "mul_self_lt_mul_self_iff", ["nat"]], ["del", "theorem", "one_add", ["nat"]]]}, {"oldPath": "src/init_/default.lean", "newPath": null, "changes": []}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/nth_rewrite.lean", "newPath": "test/nth_rewrite.lean", "changes": []}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}, {"oldPath": "test/rewrite.lean", "newPath": "test/rewrite.lean", "changes": []}]}, {"timestamp": 1593442902, "sha": "eb05a940", "message": "feat(order/filter/germ): define `filter.germ` (#3172)\nActually we already had this definition under the name\n`filter_product`.", "changes": [{"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["del", "theorem", "cast_div", ["hyperreal"]], ["mod", "theorem", "coe_abs", ["hyperreal"]], ["add", "theorem", "coe_add", ["hyperreal"]], ["add", "theorem", "coe_bit0", ["hyperreal"]], ["add", "theorem", "coe_bit1", ["hyperreal"]], ["add", "theorem", "coe_div", ["hyperreal"]], ["mod", "theorem", "coe_eq_coe", ["hyperreal"]], ["add", "theorem", "coe_eq_one", ["hyperreal"]], ["add", "theorem", "coe_eq_zero", ["hyperreal"]], ["add", "theorem", "coe_inv", ["hyperreal"]], ["mod", "theorem", "coe_le_coe", ["hyperreal"]], ["mod", "theorem", "coe_lt_coe", ["hyperreal"]], ["mod", "theorem", "coe_max", ["hyperreal"]], ["mod", "theorem", "coe_min", ["hyperreal"]], ["add", "theorem", "coe_mul", ["hyperreal"]], ["add", "theorem", "coe_neg", ["hyperreal"]], ["add", "theorem", "coe_one", ["hyperreal"]], ["add", "theorem", "coe_pos", ["hyperreal"]], ["add", "theorem", "coe_sub", ["hyperreal"]], ["add", "theorem", "coe_zero", ["hyperreal"]], ["mod", "theorem", "epsilon_lt_pos", ["hyperreal"]], ["del", "theorem", "hyperfilter_ne_bot'", ["hyperreal"]], ["del", "theorem", "hyperfilter_ne_bot", ["hyperreal"]], ["mod", "def", "is_st", ["hyperreal"]], ["mod", "theorem", "is_st_Sup", ["hyperreal"]], ["mod", "theorem", "not_real_of_infinite", ["hyperreal"]], ["mod", "theorem", "st_eq_Sup", ["hyperreal"]], ["mod", "def", "hyperreal", []]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["del", "def", "bigly_equal", ["filter"]], ["del", "theorem", "abs_def", ["filter", "filter_product"]], ["del", "theorem", "coe_inj", ["filter", "filter_product"]], ["del", "def", "lift", ["filter", "filter_product"]], ["del", "theorem", "lift_id", ["filter", "filter_product"]], ["del", "def", "lift_rel", ["filter", "filter_product"]], ["del", "def", "lift_rel₂", ["filter", "filter_product"]], ["del", "def", "lift₂", ["filter", "filter_product"]], ["del", "theorem", "lt_def'", ["filter", "filter_product"]], ["del", "theorem", "lt_def", ["filter", "filter_product"]], ["del", "theorem", "max_def", ["filter", "filter_product"]], ["del", "theorem", "min_def", ["filter", "filter_product"]], ["del", "def", "of", ["filter", "filter_product"]], ["del", "theorem", "of_abs", ["filter", "filter_product"]], ["del", "theorem", "of_add", ["filter", "filter_product"]], ["del", "theorem", "of_bit0", ["filter", "filter_product"]], ["del", "theorem", "of_bit1", ["filter", "filter_product"]], ["del", "theorem", "of_div", ["filter", "filter_product"]], ["del", "theorem", "of_eq", ["filter", "filter_product"]], ["del", "theorem", "of_eq_coe", ["filter", "filter_product"]], ["del", "theorem", "of_eq_zero", ["filter", "filter_product"]], ["del", "theorem", "of_injective", ["filter", "filter_product"]], ["del", "theorem", "of_inv", ["filter", "filter_product"]], ["del", "theorem", "of_le", ["filter", "filter_product"]], ["del", "theorem", "of_le_of_le", ["filter", "filter_product"]], ["del", "theorem", "of_lt", ["filter", "filter_product"]], ["del", "theorem", "of_lt_of_lt", ["filter", "filter_product"]], ["del", "theorem", "of_max", ["filter", "filter_product"]], ["del", "theorem", "of_min", ["filter", "filter_product"]], ["del", "theorem", "of_mul", ["filter", "filter_product"]], ["del", "theorem", "of_ne", ["filter", "filter_product"]], ["del", "theorem", "of_ne_zero", ["filter", "filter_product"]], ["del", "theorem", "of_neg", ["filter", "filter_product"]], ["del", "theorem", "of_one", ["filter", "filter_product"]], ["del", "theorem", "of_rel", ["filter", "filter_product"]], ["del", "theorem", "of_rel_of_rel", ["filter", "filter_product"]], ["del", "theorem", "of_rel_of_rel₂", ["filter", "filter_product"]], ["del", "theorem", "of_rel₂", ["filter", "filter_product"]], ["del", "def", "of_seq", ["filter", "filter_product"]], ["del", "theorem", "of_seq_add", ["filter", "filter_product"]], ["del", "theorem", "of_seq_fun", ["filter", "filter_product"]], ["del", "theorem", "of_seq_fun₂", ["filter", "filter_product"]], ["del", "theorem", "of_seq_inv", ["filter", "filter_product"]], ["del", "theorem", "of_seq_mul", ["filter", "filter_product"]], ["del", "theorem", "of_seq_neg", ["filter", "filter_product"]], ["del", "theorem", "of_seq_one", ["filter", "filter_product"]], ["del", "theorem", "of_seq_zero", ["filter", "filter_product"]], ["del", "theorem", "of_sub", ["filter", "filter_product"]], ["del", "theorem", "of_zero", ["filter", "filter_product"]], ["del", "def", "filterprod", ["filter"]], ["add", "theorem", "abs_def", ["filter", "germ"]], ["add", "theorem", "coe_lt", ["filter", "germ"]], ["add", "theorem", "coe_pos", ["filter", "germ"]], ["add", "theorem", "const_abs", ["filter", "germ"]], ["add", "theorem", "const_div", ["filter", "germ"]], ["add", "theorem", "const_lt", ["filter", "germ"]], ["add", "theorem", "const_max", ["filter", "germ"]], ["add", "theorem", "const_min", ["filter", "germ"]], ["add", "theorem", "lt_def", ["filter", "germ"]], ["add", "theorem", "max_def", ["filter", "germ"]], ["add", "theorem", "min_def", ["filter", "germ"]]]}, {"oldPath": null, "newPath": "src/order/filter/germ.lean", "changes": [["add", "theorem", "const_eventually_eq'", ["filter"]], ["add", "theorem", "const_eventually_eq", ["filter"]], ["add", "theorem", "comp_tendsto", ["filter", "eventually_eq"]], ["add", "theorem", "le", ["filter", "eventually_eq"]], ["add", "theorem", "trans_le", ["filter", "eventually_eq"]], ["add", "theorem", "antisymm", ["filter", "eventually_le"]], ["add", "theorem", "congr", ["filter", "eventually_le"]], ["add", "theorem", "refl", ["filter", "eventually_le"]], ["add", "theorem", "trans", ["filter", "eventually_le"]], ["add", "theorem", "trans_eq", ["filter", "eventually_le"]], ["add", "def", "eventually_le", ["filter"]], ["add", "theorem", "eventually_le_congr", ["filter"]], ["add", "theorem", "coe_coe_mul_hom", ["filter", "germ"]], ["add", "theorem", "coe_coe_ring_hom", ["filter", "germ"]], ["add", "theorem", "coe_comp_tendsto'", ["filter", "germ"]], ["add", "theorem", "coe_comp_tendsto", ["filter", "germ"]], ["add", "theorem", "coe_eq", ["filter", "germ"]], ["add", "theorem", "coe_inv", ["filter", "germ"]], ["add", "theorem", "coe_le", ["filter", "germ"]], ["add", "theorem", "coe_mul", ["filter", "germ"]], ["add", "def", "coe_mul_hom", ["filter", "germ"]], ["add", "theorem", "coe_one", ["filter", "germ"]], ["add", "def", "coe_ring_hom", ["filter", "germ"]], ["add", "theorem", "coe_smul'", ["filter", "germ"]], ["add", "theorem", "coe_smul", ["filter", "germ"]], ["add", "theorem", "coe_sub", ["filter", "germ"]], ["add", "theorem", "coe_tendsto", ["filter", "germ"]], ["add", "def", "comp_tendsto'", ["filter", "germ"]], ["add", "theorem", "comp_tendsto'_coe", ["filter", "germ"]], ["add", "def", "comp_tendsto", ["filter", "germ"]], ["add", "theorem", "const_bot", ["filter", "germ"]], ["add", "theorem", "const_comp_tendsto'", ["filter", "germ"]], ["add", "theorem", "const_comp_tendsto", ["filter", "germ"]], ["add", "theorem", "const_inf", ["filter", "germ"]], ["add", "theorem", "const_inj", ["filter", "germ"]], ["add", "theorem", "const_le", ["filter", "germ"]], ["add", "theorem", "const_le_iff", ["filter", "germ"]], ["add", "theorem", "const_sup", ["filter", "germ"]], ["add", "theorem", "const_top", ["filter", "germ"]], ["add", "theorem", "induction_on", ["filter", "germ"]], ["add", "theorem", "induction_on₂", ["filter", "germ"]], ["add", "theorem", "induction_on₃", ["filter", "germ"]], ["add", "def", "lift_on", ["filter", "germ"]], ["add", "def", "lift_pred", ["filter", "germ"]], ["add", "theorem", "lift_pred_coe", ["filter", "germ"]], ["add", "theorem", "lift_pred_const", ["filter", "germ"]], ["add", "theorem", "lift_pred_const_iff", ["filter", "germ"]], ["add", "def", "lift_rel", ["filter", "germ"]], ["add", "theorem", "lift_rel_coe", ["filter", "germ"]], ["add", "theorem", "lift_rel_const", ["filter", "germ"]], ["add", "theorem", "lift_rel_const_iff", ["filter", "germ"]], ["add", "def", "map'", ["filter", "germ"]], ["add", "theorem", "map'_coe", ["filter", "germ"]], ["add", "def", "map", ["filter", "germ"]], ["add", "theorem", "map_coe", ["filter", "germ"]], ["add", "theorem", "map_const", ["filter", "germ"]], ["add", "theorem", "map_id", ["filter", "germ"]], ["add", "theorem", "map_map", ["filter", "germ"]], ["add", "def", "map₂", ["filter", "germ"]], ["add", "theorem", "map₂_const", ["filter", "germ"]], ["add", "theorem", "mk'_eq_coe", ["filter", "germ"]], ["add", "theorem", "quot_mk_eq_coe", ["filter", "germ"]], ["add", "def", "germ", ["filter"]], ["add", "def", "germ_setoid", ["filter"]]]}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "bot_ne_hyperfilter", ["filter"]], ["add", "theorem", "hyperfilter_ne_bot", ["filter"]], ["add", "theorem", "em", ["filter", "is_ultrafilter"]], ["add", "theorem", "eventually_imp", ["filter", "is_ultrafilter"]], ["add", "theorem", "eventually_not", ["filter", "is_ultrafilter"]], ["add", "theorem", "eventually_or", ["filter", "is_ultrafilter"]]]}]}, {"timestamp": 1593438508, "sha": "4907d5d6", "message": "feat(algebra/ring): ite_mul_one and ite_mul_zero_... (#3217)\nThree simple lemmas about if statements involving multiplication, useful while rewriting.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "ite_mul_one", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "ite_mul_zero_left", []], ["add", "theorem", "ite_mul_zero_right", []]]}]}, {"timestamp": 1593438506, "sha": "964f0e53", "message": "feat(data/polynomial): work over noncommutative rings where possible (#3193)\nAfter downgrading `C` from an algebra homomorphism to a ring homomorphism in [69931ac](https://github.com/leanprover-community/mathlib/commit/69931acfe7b6a29f988bcf7094e090767b34fb85), which requires a few tweaks, everything else is straightforward.", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "theorem", "sum_smul_index", ["finsupp"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": [["add", "def", "algebra_map'", ["add_monoid_algebra"]], ["add", "def", "algebra_map'", ["monoid_algebra"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "def", "C", ["polynomial"]], ["add", "theorem", "C_eq_int_cast", ["polynomial"]], ["add", "theorem", "C_eq_nat_cast", ["polynomial"]], ["mod", "theorem", "C_neg", ["polynomial"]], ["mod", "theorem", "C_sub", ["polynomial"]], ["add", "theorem", "X_mul", ["polynomial"]], ["add", "theorem", "X_pow_mul", ["polynomial"]], ["add", "theorem", "X_pow_mul_assoc", ["polynomial"]], ["mod", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["mod", "theorem", "degree_map_le", ["polynomial"]], ["mod", "theorem", "degree_pos_of_root", ["polynomial"]], ["mod", "def", "derivative_hom", ["polynomial"]], ["mod", "theorem", "derivative_neg", ["polynomial"]], ["mod", "theorem", "derivative_sub", ["polynomial"]], ["add", "theorem", "eval_int_cast", ["polynomial"]], ["mod", "theorem", "eval_map", ["polynomial"]], ["add", "theorem", "eval_nat_cast", ["polynomial"]], ["add", "theorem", "eval_smul", ["polynomial"]], ["mod", "theorem", "eval₂_neg", ["polynomial"]], ["mod", "theorem", "eval₂_smul", ["polynomial"]], ["mod", "theorem", "eval₂_sub", ["polynomial"]], ["del", "theorem", "int_cast_eq_C", ["polynomial"]], ["mod", "theorem", "map_map", ["polynomial"]], ["mod", "theorem", "map_mul", ["polynomial"]], ["mod", "theorem", "map_pow", ["polynomial"]], ["mod", "theorem", "ne_zero", ["polynomial", "monic"]], ["mod", "theorem", "monic_map", ["polynomial"]], ["del", "theorem", "nat_cast_eq_C", ["polynomial"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1593438503, "sha": "a708f854", "message": "feat(category/limits/shapes): fix biproducts (#3175)\nThis is a second attempt at #3102.\nPreviously the definition of a (binary) biproduct in a category with zero morphisms (but not necessarily) preadditive was just wrong.\nThe definition for a \"bicone\" was just something that was simultaneously a cone and a cocone, with the same cone points. It was a \"biproduct bicone\" if the cone was a limit cone and the cocone was a colimit cocone. However, this definition was not particularly useful. In particular, there was no way to prove that the two different `map` constructions providing a morphism `W ⊞ X ⟶ Y ⊞ Z` (i.e. by treating the biproducts either as cones, or as cocones) were actually equal. Blech.\nSo, I've added the axioms `inl ≫ fst = 𝟙 P`, `inl ≫ snd = 0`, `inr ≫ fst = 0`, and `inr ≫ snd = 𝟙 Q` to `bicone P Q`. (Note these only require the exist of zero morphisms, not preadditivity.)\nNow the two map constructions are equal.\nI've then entirely removed the `has_preadditive_biproduct` typeclass. Instead we have\n1. additional theorems providing `total`, when `preadditive C` is available\n2. alternative constructors for `has_biproduct` that use `total` rather than `is_limit` and `is_colimit`.\nThis PR also introduces some abbreviations along the lines of `abbreviation has_binary_product (X Y : C) := has_limit (pair X Y)`, just to improve readability.", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "def", "desc'", ["category_theory", "limits", "coprod"]], ["mod", "def", "desc", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "desc_comp_comp", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "coprod"]], ["mod", "def", "inl", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "inl_desc", ["category_theory", "limits", "coprod"]], ["mod", "def", "inr", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "inr_desc", ["category_theory", "limits", "coprod"]], ["add", "def", "map_iso", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_iso_hom", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_iso_inv", ["category_theory", "limits", "coprod"]], ["mod", "def", "coprod", ["category_theory", "limits"]], ["add", "def", "has_binary_coproduct", ["category_theory", "limits"]], ["add", "def", "has_binary_product", ["category_theory", "limits"]], ["mod", "def", "fst", ["category_theory", "limits", "prod"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "prod"]], ["mod", "def", "lift'", ["category_theory", "limits", "prod"]], ["mod", "def", "lift", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_comp_comp", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_fst", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_snd", ["category_theory", "limits", "prod"]], ["add", "def", "map_iso", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_iso_hom", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_iso_inv", ["category_theory", "limits", "prod"]], ["mod", "def", "snd", ["category_theory", "limits", "prod"]], ["mod", "def", "prod", ["category_theory", "limits"]], ["add", "def", "equiv_bool", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "equiv_bool_apply_left", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "equiv_bool_apply_right", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "equiv_bool_symm_apply_ff", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "equiv_bool_symm_apply_tt", ["category_theory", "limits", "walking_pair"]], ["add", "def", "swap", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "swap_apply_left", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "swap_apply_right", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "swap_symm_apply_ff", ["category_theory", "limits", "walking_pair"]], ["add", "theorem", "swap_symm_apply_tt", ["category_theory", "limits", "walking_pair"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "to_binary_bicone", ["category_theory", "limits", "bicone"]], ["add", "def", "to_binary_bicone_is_colimit", ["category_theory", "limits", "bicone"]], ["add", "def", "to_binary_bicone_is_limit", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_cocone", ["category_theory", "limits", "bicone"]], ["mod", "def", "to_cone", ["category_theory", "limits", "bicone"]], ["mod", "structure", "bicone", ["category_theory", "limits"]], ["add", "theorem", "bicone_ι_π_ne", ["category_theory", "limits"]], ["add", "theorem", "bicone_ι_π_self", ["category_theory", "limits"]], ["add", "theorem", "to_cocone_X", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "to_cocone_ι_app_left", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "to_cocone_ι_app_right", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "to_cone_X", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "to_cone_π_app_left", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "to_cone_π_app_right", ["category_theory", "limits", "binary_bicone"]], ["add", "theorem", "braid_natural", ["category_theory", "limits", "biprod"]], ["add", "def", "braiding'", ["category_theory", "limits", "biprod"]], ["add", "theorem", "braiding'_eq_braiding", ["category_theory", "limits", "biprod"]], ["add", "def", "braiding", ["category_theory", "limits", "biprod"]], ["add", "theorem", "braiding_map_braiding", ["category_theory", "limits", "biprod"]], ["add", "theorem", "desc_eq", ["category_theory", "limits", "biprod"]], ["del", "theorem", "fst_add_snd", ["category_theory", "limits", "biprod"]], ["del", "theorem", "inl_add_inr", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inl_fst", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inl_map", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inl_snd", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inr_fst", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inr_map", ["category_theory", "limits", "biprod"]], ["mod", "theorem", "inr_snd", ["category_theory", "limits", "biprod"]], ["add", "theorem", "lift_eq", ["category_theory", "limits", "biprod"]], ["add", "def", "map'", ["category_theory", "limits", "biprod"]], ["mod", "def", "map", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_eq", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_eq_map'", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_fst", ["category_theory", "limits", "biprod"]], ["add", "def", "map_iso", ["category_theory", "limits", "biprod"]], ["add", "theorem", "map_snd", ["category_theory", "limits", "biprod"]], ["add", "theorem", "symmetry'", ["category_theory", "limits", "biprod"]], ["add", "theorem", "symmetry", ["category_theory", "limits", "biprod"]], ["add", "def", "bicone", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "desc_eq", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "hom_ext'", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "inl_map", ["category_theory", "limits", "biproduct"]], ["add", "def", "is_colimit", ["category_theory", "limits", "biproduct"]], ["add", "def", "is_limit", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "lift_desc", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "lift_eq", ["category_theory", "limits", "biproduct"]], ["add", "def", "map'", ["category_theory", "limits", "biproduct"]], ["mod", "def", "map", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "map_eq", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "map_eq_map'", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "total", ["category_theory", "limits", "biproduct"]], ["mod", "def", "ι", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_π", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_π_ne", ["category_theory", "limits", "biproduct"]], ["add", "theorem", "ι_π_self", ["category_theory", "limits", "biproduct"]], ["mod", "def", "π", ["category_theory", "limits", "biproduct"]], ["mod", "def", "biproduct", ["category_theory", "limits"]], ["mod", "def", "biproduct_iso", ["category_theory", "limits"]], ["add", "def", "of_has_binary_coproduct", ["category_theory", "limits", "has_binary_biproduct"]], ["add", "def", "of_has_binary_product", ["category_theory", "limits", "has_binary_biproduct"]], ["add", "def", "has_binary_biproduct_of_total", ["category_theory", "limits"]], ["add", "def", "of_has_binary_coproducts", ["category_theory", "limits", "has_binary_biproducts"]], ["add", "def", "of_has_binary_products", ["category_theory", "limits", "has_binary_biproducts"]], ["add", "def", "has_binary_biproducts_of_finite_biproducts", ["category_theory", "limits"]], ["add", "def", "of_has_coproduct", ["category_theory", "limits", "has_biproduct"]], ["add", "def", "of_has_product", ["category_theory", "limits", "has_biproduct"]], ["add", "def", "has_biproduct_of_total", ["category_theory", "limits"]], ["del", "def", "of_has_colimit_pair", ["category_theory", "limits", "has_preadditive_binary_biproduct"]], ["del", "def", "of_has_limit_pair", ["category_theory", "limits", "has_preadditive_binary_biproduct"]], ["del", "def", "has_preadditive_binary_biproducts_of_has_binary_coproducts", ["category_theory", "limits"]], ["del", "def", "has_preadditive_binary_biproducts_of_has_binary_products", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "has_coproduct", ["category_theory", "limits"]], ["add", "def", "has_coproducts_of_shape", ["category_theory", "limits"]], ["add", "def", "has_product", ["category_theory", "limits"]], ["add", "def", "has_products_of_shape", ["category_theory", "limits"]], ["mod", "def", "lift", ["category_theory", "limits", "pi"]], ["mod", "def", "map", ["category_theory", "limits", "pi"]], ["mod", "def", "π", ["category_theory", "limits", "pi"]], ["mod", "def", "pi_obj", ["category_theory", "limits"]], ["mod", "def", "desc", ["category_theory", "limits", "sigma"]], ["mod", "def", "map", ["category_theory", "limits", "sigma"]], ["mod", "def", "ι", ["category_theory", "limits", "sigma"]], ["mod", "def", "sigma_obj", ["category_theory", "limits"]]]}]}, {"timestamp": 1593438501, "sha": "78beab4f", "message": "feat(linear_algebra/affine_space): affine independence (#3140)\nDefine affine independent indexed families of points (in terms of no\nnontrivial `weighted_vsub` in the family being zero), prove that a\nfamily of at most one point is affine independent, and prove a family\nof points is affine independent if and only if a corresponding family\nof subtractions is linearly independent.\nThere are of course other equivalent descriptions of affine\nindependent families it will be useful to add later (that the affine\nspan of all proper subfamilies is smaller than the affine span of the\nwhole family, that each point is not in the affine span of the rest;\nin the case of a family indexed by a `fintype`, that the dimension of\nthe affine span is one less than the cardinality). But I think the\ndefinition and one equivalent formulation is a reasonable starting\npoint.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_insert_one", ["finset"]], ["add", "theorem", "prod_subtype_eq_prod_filter", ["finset"]], ["add", "theorem", "prod_subtype_map_embedding", ["finset"]], ["add", "theorem", "prod_subtype_of_mem", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "filter_true", ["finset"]], ["add", "theorem", "filter_true_of_mem", ["finset"]], ["add", "theorem", "not_mem_map_subtype_of_not_property", ["finset"]], ["add", "theorem", "subtype_map", ["finset"]], ["add", "theorem", "subtype_map_of_mem", ["finset"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "def", "affine_independent", []], ["add", "theorem", "affine_independent_iff_linear_independent_vsub", []], ["add", "theorem", "affine_independent_of_subsingleton", []], ["add", "theorem", "weighted_vsub_of_point_erase", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_insert", ["finset"]]]}]}, {"timestamp": 1593434716, "sha": "36ce13fe", "message": "chore(finset/nat/antidiagonal): simplify some proofs (#3225)\nReplace some proofs with `rfl`, and avoid `multiset.to_finset` when there is a `nodup` available.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card_mk", ["finset"]]]}, {"oldPath": "src/data/list/antidiagonal.lean", "newPath": "src/data/list/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}]}, {"timestamp": 1593418517, "sha": "c4f91767", "message": "feat(linear_algebra/tensor_product): ite_tmul (#3216)\n```\n((if P then x₁ else 0) ⊗ₜ[R] x₂) = if P then (x₁ ⊗ₜ x₂) else 0\n```\nand the symmetric version.", "changes": [{"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "ite_tmul", ["tensor_product"]], ["add", "theorem", "tmul_ite", ["tensor_product"]]]}]}, {"timestamp": 1593413986, "sha": "ca44926c", "message": "chore(ring_theory/tensor_product): missing simp lemmas (#3215)\nA few missing `simp` lemmas.", "changes": [{"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "theorem", "alg_hom_of_linear_map_tensor_product_apply", ["algebra", "tensor_product"]], ["add", "theorem", "include_left_apply", ["algebra", "tensor_product"]], ["add", "theorem", "include_right_apply", ["algebra", "tensor_product"]], ["del", "theorem", "mul_tmul", ["algebra", "tensor_product"]], ["add", "theorem", "tmul_mul_tmul", ["algebra", "tensor_product"]], ["add", "theorem", "tmul_pow", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1593405910, "sha": "a443d8ba", "message": "feat(simp_nf): instructions for linter timeout (#3205)", "changes": [{"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": [["del", "theorem", "add_zero", []], ["del", "theorem", "zero_add_zero", []]]}]}, {"timestamp": 1593404472, "sha": "9a1c0a6e", "message": "feat(data/padics/padic_norm) Fix namespacing of padic_val_nat (#3207)\nNo longer need we `padic_val_rat.padic_val_nat`.", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["add", "def", "padic_val_nat", []], ["add", "theorem", "padic_val_nat_def", []], ["del", "def", "padic_val_nat", ["padic_val_rat"]], ["del", "theorem", "padic_val_nat_def", ["padic_val_rat"]], ["del", "theorem", "padic_val_rat_of_nat", ["padic_val_rat"]], ["del", "theorem", "zero_le_padic_val_rat_of_nat", ["padic_val_rat"]], ["add", "theorem", "padic_val_rat_of_nat", []], ["add", "theorem", "zero_le_padic_val_rat_of_nat", []]]}]}, {"timestamp": 1593403030, "sha": "9acf5903", "message": "feat(data/matrix/notation): smul matrix lemmas (#3208)", "changes": [{"oldPath": "src/data/matrix/notation.lean", "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "smul_mat_cons", ["matrix"]], ["add", "theorem", "smul_mat_empty", ["matrix"]]]}]}, {"timestamp": 1593400859, "sha": "d2b46abb", "message": "chore(category_theory/punit): use discrete punit instead of punit (#3201)\nAnalogous to #3191 for `punit`. I also removed some `simp` lemmas which can be generated instead by `[simps]`.", "changes": [{"oldPath": "src/algebra/homology/chain_complex.lean", "newPath": "src/algebra/homology/chain_complex.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["del", "theorem", "hom_mk'_left", ["category_theory", "arrow"]], ["del", "theorem", "hom_mk'_right", ["category_theory", "arrow"]], ["del", "theorem", "hom_mk_left", ["category_theory", "arrow"]], ["del", "theorem", "hom_mk_right", ["category_theory", "arrow"]], ["del", "theorem", "mk_hom", ["category_theory", "arrow"]], ["del", "theorem", "fst_map", ["category_theory", "comma"]], ["del", "theorem", "fst_obj", ["category_theory", "comma"]], ["del", "theorem", "map_left_comp_hom_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_left_comp_hom_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_left_comp_inv_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_left_comp_inv_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_left_id_hom_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_left_id_hom_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_left_id_inv_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_left_id_inv_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_left_map_left", ["category_theory", "comma"]], ["del", "theorem", "map_left_map_right", ["category_theory", "comma"]], ["del", "theorem", "map_left_obj_hom", ["category_theory", "comma"]], ["del", "theorem", "map_left_obj_left", ["category_theory", "comma"]], ["del", "theorem", "map_left_obj_right", ["category_theory", "comma"]], ["del", "theorem", "map_right_comp_hom_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_right_comp_hom_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_right_comp_inv_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_right_comp_inv_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_right_id_hom_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_right_id_hom_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_right_id_inv_app_left", ["category_theory", "comma"]], ["del", "theorem", "map_right_id_inv_app_right", ["category_theory", "comma"]], ["del", "theorem", "map_right_map_left", ["category_theory", "comma"]], ["del", "theorem", "map_right_map_right", ["category_theory", "comma"]], ["del", "theorem", "map_right_obj_hom", ["category_theory", "comma"]], ["del", "theorem", "map_right_obj_left", ["category_theory", "comma"]], ["del", "theorem", "map_right_obj_right", ["category_theory", "comma"]], ["del", "theorem", "snd_map", ["category_theory", "comma"]], ["del", "theorem", "snd_obj", ["category_theory", "comma"]], ["del", "theorem", "hom_mk_left", ["category_theory", "over"]], ["mod", "def", "map", ["category_theory", "over"]], ["del", "theorem", "over_morphism_right", ["category_theory", "over"]], ["mod", "def", "over", ["category_theory"]], ["del", "theorem", "hom_mk_right", ["category_theory", "under"]], ["mod", "def", "map", ["category_theory", "under"]], ["del", "theorem", "mk_hom", ["category_theory", "under"]], ["del", "theorem", "mk_right", ["category_theory", "under"]], ["del", "theorem", "under_morphism_left", ["category_theory", "under"]], ["mod", "def", "under", ["category_theory"]]]}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": [["add", "def", "discrete_connected_equiv_punit", ["category_theory"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "def", "equiv_of_equivalence", ["category_theory", "discrete"]]]}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": [["mod", "def", "comma_equivalence", ["category_theory", "category_of_elements"]], ["add", "theorem", "comma_equivalence_functor", ["category_theory", "category_of_elements"]], ["add", "theorem", "comma_equivalence_inverse", ["category_theory", "category_of_elements"]], ["mod", "def", "from_comma", ["category_theory", "category_of_elements"]], ["mod", "def", "to_comma", ["category_theory", "category_of_elements"]], ["del", "theorem", "π_map", ["category_theory", "category_of_elements"]], ["del", "theorem", "π_obj", ["category_theory", "category_of_elements"]]]}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": [["add", "def", "equiv", ["category_theory", "functor"]], ["add", "def", "from_punit", ["category_theory", "functor"]], ["add", "theorem", "punit_ext'", ["category_theory", "functor"]], ["add", "def", "punit_ext", ["category_theory", "functor"]], ["mod", "def", "star", ["category_theory", "functor"]], ["del", "theorem", "star_map", ["category_theory", "functor"]], ["del", "theorem", "star_obj", ["category_theory", "functor"]]]}]}, {"timestamp": 1593397441, "sha": "b503fb45", "message": "chore(docs/tutorial): change category declarations (#3220)\nchange category declarations to match syntax in recent commit (i.e. no more explicit typeclass naming), delete unnecessary \"include\" lines as they are no longer needed for Lean to include the typeclass, update tutorial text to explain new syntax", "changes": [{"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}]}, {"timestamp": 1593384682, "sha": "2ec83dc5", "message": "chore(group_theory/submonoid): split into 3 files (#3058)\nNow\n* `group_theory.submonoid.basic` contains the definition, `complete_lattice` structure, and some basic facts about `closure`;\n* `group_theory.submonoid.operations` contains definitions of various operations on submonoids;\n* `group_theory.submonoid.membership` contains various facts about membership in a submonoid or the submonoid closure of a set.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": null, "changes": [["del", "theorem", "closure_singleton_eq", ["add_submonoid"]], ["del", "theorem", "mem_closure_singleton", ["add_submonoid"]], ["del", "def", "of_submonoid", ["add_submonoid"]], ["del", "theorem", "smul_mem", ["add_submonoid"]], ["del", "def", "to_submonoid", ["add_submonoid"]], ["del", "structure", "add_submonoid", []], ["del", "theorem", "closure_range_of", ["free_monoid"]], ["del", "def", "cod_mrestrict", ["monoid_hom"]], ["del", "theorem", "coe_mrange", ["monoid_hom"]], ["del", "theorem", "coe_mrange_restrict", ["monoid_hom"]], ["del", "def", "eq_mlocus", ["monoid_hom"]], ["del", "theorem", "eq_of_eq_on_mdense", ["monoid_hom"]], ["del", "theorem", "eq_of_eq_on_mtop", ["monoid_hom"]], ["del", "theorem", "eq_on_mclosure", ["monoid_hom"]], ["del", "theorem", "map_mclosure", ["monoid_hom"]], ["del", "theorem", "map_mrange", ["monoid_hom"]], ["del", "theorem", "mclosure_preimage_le", ["monoid_hom"]], ["del", "theorem", "mem_mrange", ["monoid_hom"]], ["del", "def", "mrange", ["monoid_hom"]], ["del", "def", "mrange_restrict", ["monoid_hom"]], ["del", "theorem", "mrange_top_iff_surjective", ["monoid_hom"]], ["del", "theorem", "mrange_top_of_surjective", ["monoid_hom"]], ["del", "def", "mrestrict", ["monoid_hom"]], ["del", "theorem", "mrestrict_apply", ["monoid_hom"]], ["del", "def", "submonoid_congr", ["mul_equiv"]], ["del", "def", "add_submonoid_equiv", ["submonoid"]], ["del", "theorem", "bot_prod_bot", ["submonoid"]], ["del", "def", "closure", ["submonoid"]], ["del", "theorem", "closure_Union", ["submonoid"]], ["del", "theorem", "closure_empty", ["submonoid"]], ["del", "theorem", "closure_eq", ["submonoid"]], ["del", "theorem", "closure_eq_mrange", ["submonoid"]], ["del", "theorem", "closure_eq_of_le", ["submonoid"]], ["del", "theorem", "closure_induction", ["submonoid"]], ["del", "theorem", "closure_le", ["submonoid"]], ["del", "theorem", "closure_mono", ["submonoid"]], ["del", "theorem", "closure_singleton_eq", ["submonoid"]], ["del", "theorem", "closure_union", ["submonoid"]], ["del", "theorem", "closure_univ", ["submonoid"]], ["del", "theorem", "coe_Inf", ["submonoid"]], ["del", "theorem", "coe_Sup_of_directed_on", ["submonoid"]], ["del", "theorem", "coe_bot", ["submonoid"]], ["del", "theorem", "coe_coe", ["submonoid"]], ["del", "theorem", "coe_comap", ["submonoid"]], ["del", "theorem", "coe_copy", ["submonoid"]], ["del", "theorem", "coe_eq_coe", ["submonoid"]], ["del", "theorem", "coe_inf", ["submonoid"]], ["del", "theorem", "coe_infi", ["submonoid"]], ["del", "theorem", "coe_map", ["submonoid"]], ["del", "theorem", "coe_mul", ["submonoid"]], ["del", "theorem", "coe_one", ["submonoid"]], ["del", "theorem", "coe_prod", ["submonoid"]], ["del", "theorem", "coe_ssubset_coe", ["submonoid"]], ["del", "theorem", "coe_subset_coe", ["submonoid"]], ["del", "theorem", "coe_subtype", ["submonoid"]], ["del", "theorem", "coe_supr_of_directed", ["submonoid"]], ["del", "theorem", "coe_top", ["submonoid"]], ["del", "def", "comap", ["submonoid"]], ["del", "theorem", "comap_comap", ["submonoid"]], ["del", "theorem", "comap_inf", ["submonoid"]], ["del", "theorem", "comap_infi", ["submonoid"]], ["del", "theorem", "comap_top", ["submonoid"]], ["del", "def", "copy", ["submonoid"]], ["del", "theorem", "copy_eq", ["submonoid"]], ["del", "theorem", "exists_list_of_mem_closure", ["submonoid"]], ["del", "theorem", "ext'", ["submonoid"]], ["del", "theorem", "ext", ["submonoid"]], ["del", "theorem", "gc_map_comap", ["submonoid"]], ["del", "def", "inclusion", ["submonoid"]], ["del", "theorem", "le_def", ["submonoid"]], ["del", "theorem", "list_prod_mem", ["submonoid"]], ["del", "def", "map", ["submonoid"]], ["del", "theorem", "map_bot", ["submonoid"]], ["del", "theorem", "map_id", ["submonoid"]], ["del", "theorem", "map_inl", ["submonoid"]], ["del", "theorem", "map_inr", ["submonoid"]], ["del", "theorem", "map_le_iff_le_comap", ["submonoid"]], ["del", "theorem", "map_map", ["submonoid"]], ["del", "theorem", "map_sup", ["submonoid"]], ["del", "theorem", "map_supr", ["submonoid"]], ["del", "theorem", "mem_Inf", ["submonoid"]], ["del", "theorem", "mem_Sup_of_directed_on", ["submonoid"]], ["del", "theorem", "mem_bot", ["submonoid"]], ["del", "theorem", "mem_carrier", ["submonoid"]], ["del", "theorem", "mem_closure", ["submonoid"]], ["del", "theorem", "mem_closure_singleton", ["submonoid"]], ["del", "theorem", "mem_coe", ["submonoid"]], ["del", "theorem", "mem_comap", ["submonoid"]], ["del", "theorem", "mem_inf", ["submonoid"]], ["del", "theorem", "mem_infi", ["submonoid"]], ["del", "theorem", "mem_map", ["submonoid"]], ["del", "theorem", "mem_prod", ["submonoid"]], ["del", "theorem", "mem_sup", ["submonoid"]], ["del", "theorem", "mem_supr_of_directed", ["submonoid"]], ["del", "theorem", "mem_top", ["submonoid"]], ["del", "theorem", "mul_mem", ["submonoid"]], ["del", "theorem", "multiset_prod_mem", ["submonoid"]], ["del", "def", "of_add_submonoid", ["submonoid"]], ["del", "theorem", "one_mem", ["submonoid"]], ["del", "theorem", "pow_mem", ["submonoid"]], ["del", "def", "prod", ["submonoid"]], ["del", "theorem", "prod_bot_sup_bot_prod", ["submonoid"]], ["del", "def", "prod_equiv", ["submonoid"]], ["del", "theorem", "prod_mem", ["submonoid"]], ["del", "theorem", "prod_mono", ["submonoid"]], ["del", "theorem", "prod_mono_left", ["submonoid"]], ["del", "theorem", "prod_mono_right", ["submonoid"]], ["del", "theorem", "prod_top", ["submonoid"]], ["del", "theorem", "range_fst", ["submonoid"]], ["del", "theorem", "range_inl'", ["submonoid"]], ["del", "theorem", "range_inl", ["submonoid"]], ["del", "theorem", "range_inl_sup_range_inr", ["submonoid"]], ["del", "theorem", "range_inr'", ["submonoid"]], ["del", "theorem", "range_inr", ["submonoid"]], ["del", "theorem", "range_snd", ["submonoid"]], ["del", "theorem", "range_subtype", ["submonoid"]], ["del", "theorem", "subset_closure", ["submonoid"]], ["del", "def", "subtype", ["submonoid"]], ["del", "theorem", "sup_eq_range", ["submonoid"]], ["del", "def", "to_add_submonoid", ["submonoid"]], ["del", "theorem", "top_prod", ["submonoid"]], ["del", "theorem", "top_prod_top", ["submonoid"]], ["del", "structure", "submonoid", []]]}, {"oldPath": null, "newPath": "src/group_theory/submonoid/basic.lean", "changes": [["add", "structure", "add_submonoid", []], ["add", "theorem", "coe_of_mdense", ["monoid_hom"]], ["add", "def", "eq_mlocus", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_mdense", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_mtop", ["monoid_hom"]], ["add", "theorem", "eq_on_mclosure", ["monoid_hom"]], ["add", "def", "of_mdense", ["monoid_hom"]], ["add", "def", "closure", ["submonoid"]], ["add", "theorem", "closure_Union", ["submonoid"]], ["add", "theorem", "closure_empty", ["submonoid"]], ["add", "theorem", "closure_eq", ["submonoid"]], ["add", "theorem", "closure_eq_of_le", ["submonoid"]], ["add", "theorem", "closure_induction", ["submonoid"]], ["add", "theorem", "closure_le", ["submonoid"]], ["add", "theorem", "closure_mono", ["submonoid"]], ["add", "theorem", "closure_union", ["submonoid"]], ["add", "theorem", "closure_univ", ["submonoid"]], ["add", "theorem", "coe_Inf", ["submonoid"]], ["add", "theorem", "coe_bot", ["submonoid"]], ["add", "theorem", "coe_coe", ["submonoid"]], ["add", "theorem", "coe_copy", ["submonoid"]], ["add", "theorem", "coe_eq_coe", ["submonoid"]], ["add", "theorem", "coe_inf", ["submonoid"]], ["add", "theorem", "coe_infi", ["submonoid"]], ["add", "theorem", "coe_ssubset_coe", ["submonoid"]], ["add", "theorem", "coe_subset_coe", ["submonoid"]], ["add", "theorem", "coe_top", ["submonoid"]], ["add", "def", "copy", ["submonoid"]], ["add", "theorem", "copy_eq", ["submonoid"]], ["add", "theorem", "dense_induction", ["submonoid"]], ["add", "theorem", "ext'", ["submonoid"]], ["add", "theorem", "ext", ["submonoid"]], ["add", "theorem", "le_def", ["submonoid"]], ["add", "theorem", "mem_Inf", ["submonoid"]], ["add", "theorem", "mem_bot", ["submonoid"]], ["add", "theorem", "mem_carrier", ["submonoid"]], ["add", "theorem", "mem_closure", ["submonoid"]], ["add", "theorem", "mem_coe", ["submonoid"]], ["add", "theorem", "mem_inf", ["submonoid"]], ["add", "theorem", "mem_infi", ["submonoid"]], ["add", "theorem", "mem_top", ["submonoid"]], ["add", "theorem", "mul_mem", ["submonoid"]], ["add", "theorem", "one_mem", ["submonoid"]], ["add", "theorem", "subset_closure", ["submonoid"]], ["add", "structure", "submonoid", []]]}, {"oldPath": null, "newPath": "src/group_theory/submonoid/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/submonoid/membership.lean", "changes": [["add", "theorem", "closure_singleton_eq", ["add_submonoid"]], ["add", "theorem", "mem_closure_singleton", ["add_submonoid"]], ["add", "theorem", "nsmul_mem", ["add_submonoid"]], ["add", "theorem", "closure_range_of", ["free_monoid"]], ["add", "theorem", "closure_eq_mrange", ["submonoid"]], ["add", "theorem", "closure_singleton_eq", ["submonoid"]], ["add", "theorem", "coe_Sup_of_directed_on", ["submonoid"]], ["add", "theorem", "coe_supr_of_directed", ["submonoid"]], ["add", "theorem", "exists_list_of_mem_closure", ["submonoid"]], ["add", "theorem", "list_prod_mem", ["submonoid"]], ["add", "theorem", "mem_Sup_of_directed_on", ["submonoid"]], ["add", "theorem", "mem_closure_singleton", ["submonoid"]], ["add", "theorem", "mem_sup", ["submonoid"]], ["add", "theorem", "mem_supr_of_directed", ["submonoid"]], ["add", "theorem", "multiset_prod_mem", ["submonoid"]], ["add", "theorem", "pow_mem", ["submonoid"]], ["add", "theorem", "prod_mem", ["submonoid"]], ["add", "theorem", "sup_eq_range", ["submonoid"]]]}, {"oldPath": null, "newPath": "src/group_theory/submonoid/operations.lean", "changes": [["add", "def", "of_submonoid", ["add_submonoid"]], ["add", "def", "to_submonoid", ["add_submonoid"]], ["add", "def", "cod_mrestrict", ["monoid_hom"]], ["add", "theorem", "coe_mrange", ["monoid_hom"]], ["add", "theorem", "coe_mrange_restrict", ["monoid_hom"]], ["add", "theorem", "map_mclosure", ["monoid_hom"]], ["add", "theorem", "map_mrange", ["monoid_hom"]], ["add", "theorem", "mclosure_preimage_le", ["monoid_hom"]], ["add", "theorem", "mem_mrange", ["monoid_hom"]], ["add", "def", "mrange", ["monoid_hom"]], ["add", "def", "mrange_restrict", ["monoid_hom"]], ["add", "theorem", "mrange_top_iff_surjective", ["monoid_hom"]], ["add", "theorem", "mrange_top_of_surjective", ["monoid_hom"]], ["add", "def", "mrestrict", ["monoid_hom"]], ["add", "theorem", "mrestrict_apply", ["monoid_hom"]], ["add", "def", "submonoid_congr", ["mul_equiv"]], ["add", "def", "add_submonoid_equiv", ["submonoid"]], ["add", "theorem", "bot_prod_bot", ["submonoid"]], ["add", "theorem", "coe_comap", ["submonoid"]], ["add", "theorem", "coe_map", ["submonoid"]], ["add", "theorem", "coe_mul", ["submonoid"]], ["add", "theorem", "coe_one", ["submonoid"]], ["add", "theorem", "coe_prod", ["submonoid"]], ["add", "theorem", "coe_subtype", ["submonoid"]], ["add", "def", "comap", ["submonoid"]], ["add", "theorem", "comap_comap", ["submonoid"]], ["add", "theorem", "comap_inf", ["submonoid"]], ["add", "theorem", "comap_infi", ["submonoid"]], ["add", "theorem", "comap_top", ["submonoid"]], ["add", "theorem", "gc_map_comap", ["submonoid"]], ["add", "def", "inclusion", ["submonoid"]], ["add", "def", "map", ["submonoid"]], ["add", "theorem", "map_bot", ["submonoid"]], ["add", "theorem", "map_id", ["submonoid"]], ["add", "theorem", "map_inl", ["submonoid"]], ["add", "theorem", "map_inr", ["submonoid"]], ["add", "theorem", "map_le_iff_le_comap", ["submonoid"]], ["add", "theorem", "map_map", ["submonoid"]], ["add", "theorem", "map_sup", ["submonoid"]], ["add", "theorem", "map_supr", ["submonoid"]], ["add", "theorem", "mem_comap", ["submonoid"]], ["add", "theorem", "mem_map", ["submonoid"]], ["add", "theorem", "mem_prod", ["submonoid"]], ["add", "theorem", "mrange_fst", ["submonoid"]], ["add", "theorem", "mrange_inl'", ["submonoid"]], ["add", "theorem", "mrange_inl", ["submonoid"]], ["add", "theorem", "mrange_inl_sup_mrange_inr", ["submonoid"]], ["add", "theorem", "mrange_inr'", ["submonoid"]], ["add", "theorem", "mrange_inr", ["submonoid"]], ["add", "theorem", "mrange_snd", ["submonoid"]], ["add", "def", "of_add_submonoid", ["submonoid"]], ["add", "def", "prod", ["submonoid"]], ["add", "theorem", "prod_bot_sup_bot_prod", ["submonoid"]], ["add", "def", "prod_equiv", ["submonoid"]], ["add", "theorem", "prod_mono", ["submonoid"]], ["add", "theorem", "prod_top", ["submonoid"]], ["add", "theorem", "range_subtype", ["submonoid"]], ["add", "def", "subtype", ["submonoid"]], ["add", "def", "to_add_submonoid", ["submonoid"]], ["add", "theorem", "top_prod", ["submonoid"]], ["add", "theorem", "top_prod_top", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "theorem", "nsmul_mem", ["subsemiring"]], ["del", "theorem", "smul_mem", ["subsemiring"]]]}]}, {"timestamp": 1593383310, "sha": "4ad82e5d", "message": "feat(uniform_space): compact uniform spaces, Heine-Cantor (#3180)\nfeat(uniform_space): compact uniform spaces\nCompact Hausdorff spaces are uniquely uniformizable and continuous\nfunctions on them are uniformly continuous (Heine-Cantor).", "changes": [{"oldPath": null, "newPath": "src/topology/uniform_space/compact_separated.lean", "changes": [["add", "theorem", "uniform_continuous_on_of_continuous'", ["compact"]], ["add", "theorem", "uniform_continuous_on_of_continuous", ["compact"]], ["add", "theorem", "uniform_continuous_of_continuous", ["compact_space"]], ["add", "theorem", "compact_space_uniformity", []], ["add", "def", "uniform_space_of_compact_t2", []], ["add", "theorem", "unique_uniformity_of_compact_t2", []]]}]}, {"timestamp": 1593379592, "sha": "3d72c970", "message": "chore(measure_theory/outer_measure,measure_space): use `complete_lattice_of_Inf/Sup` (#3185)\nAlso add a few supporting lemmas about `bsupr`/`binfi` to `order/complete_lattice`", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "coe_supr", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "binfi_inf", []], ["add", "theorem", "binfi_le", []], ["add", "theorem", "binfi_le_binfi", []], ["add", "theorem", "bsupr_le", []], ["add", "theorem", "bsupr_le_bsupr", []], ["mod", "theorem", "infi_lt_iff", []], ["add", "theorem", "le_binfi", []], ["add", "theorem", "le_bsupr", []], ["mod", "theorem", "lt_supr_iff", []]]}]}, {"timestamp": 1593351541, "sha": "35fbfe0a", "message": "fix(tactic/linarith): use refine instead of apply to avoid apply bug (#3199)\ncloses #3142", "changes": [{"oldPath": "src/tactic/linarith/frontend.lean", "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["add", "def", "leα", []]]}]}, {"timestamp": 1593336954, "sha": "da210bf9", "message": "doc(contribute/bors.md): update some outdated info (#3209)", "changes": [{"oldPath": "docs/contribute/bors.md", "newPath": "docs/contribute/bors.md", "changes": []}]}, {"timestamp": 1593331820, "sha": "2f6a5f59", "message": "feat(nat, lattice): preliminaries for Haar measure (#3190)\nPR 2/5 to put the Haar measure in mathlib. This PR: results about lattices and lattice operations on `nat`.\nadd some simp lemmas for `nat.find` (simplifying a proof in `sum_four_squares`)\nrename `finset.sup_val` to `finset.sup_def` (it was unused). In PR 3 I will add a new declaration `finset.sup_val`\n`Inf_nat_def` and `Sup_nat_def` renamed to `nat.Inf_def` and `nat.Sup_def`, and use `set.nonempty` in statement (they were unused outside that file)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "sup_def", ["finset"]], ["del", "theorem", "sup_val", ["finset"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "find_eq_zero", ["nat"]], ["add", "theorem", "find_pos", ["nat"]]]}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_range", []], ["mod", "theorem", "Sup_range", []], ["mod", "def", "complete_lattice_of_Inf", []], ["add", "theorem", "infi_and'", []], ["mod", "theorem", "infi_apply", []], ["add", "theorem", "infi_congr", []], ["mod", "theorem", "infi_congr_Prop", []], ["mod", "theorem", "infi_prod", []], ["mod", "theorem", "infi_sigma", []], ["mod", "theorem", "infi_sum", []], ["add", "theorem", "supr_and'", []], ["mod", "theorem", "supr_apply", []], ["add", "theorem", "supr_congr", []], ["mod", "theorem", "supr_congr_Prop", []], ["mod", "theorem", "supr_prod", []], ["mod", "theorem", "supr_sigma", []], ["mod", "theorem", "supr_sum", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "Inf_nat_def", []], ["del", "theorem", "Sup_nat_def", []], ["add", "theorem", "Inf_def", ["nat"]], ["add", "theorem", "Inf_eq_zero", ["nat"]], ["add", "theorem", "Inf_mem", ["nat"]], ["add", "theorem", "Sup_def", ["nat"]], ["add", "theorem", "not_mem_of_lt_Inf", ["nat"]]]}]}, {"timestamp": 1593328336, "sha": "4e2b46a7", "message": "feat(algebra/big_operators): add induction principles (#3197)\nadd sum_induction and prod_induction", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_induction", ["finset"]]]}]}, {"timestamp": 1593324084, "sha": "a220286a", "message": "feat(subtype): standardize (#3204)\nAdd simp lemma from x.val to coe x\nUse correct ext/ext_iff naming scheme\nUse coe in more places in the library", "changes": [{"oldPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "coe_eq_coe", ["submodule"]], ["mod", "theorem", "mk_eq_zero", ["submodule"]]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/computability/tm_to_partrec.lean", "newPath": "src/computability/tm_to_partrec.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "def", "mk", ["dfinsupp"]], ["mod", "theorem", "mk_add", ["dfinsupp"]], ["mod", "theorem", "mk_apply", ["dfinsupp"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "range_coe", ["finset"]], ["del", "theorem", "range_val", ["finset"]]]}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": [["mod", "theorem", "mk_as_list", ["hash_map"]], ["mod", "def", "mk_idx", ["hash_map"]], ["mod", "theorem", "mk_valid", ["hash_map"]]]}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["mod", "theorem", "ext", ["padic_int"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "preimage_coe_eq_preimage_coe_iff", ["set"]], ["del", "theorem", "range_coe_subtype", ["set"]], ["add", "theorem", "set_of_set", ["set"]], ["add", "theorem", "coe_image", ["subtype"]], ["add", "theorem", "coe_image_subset", ["subtype"]], ["add", "theorem", "coe_image_univ", ["subtype"]], ["mod", "theorem", "image_preimage_val", ["subtype"]], ["mod", "theorem", "mem", ["subtype"]], ["add", "theorem", "preimage_coe_eq_preimage_coe_iff", ["subtype"]], ["add", "theorem", "range_coe", ["subtype"]], ["add", "theorem", "range_coe_subtype", ["subtype"]], ["mod", "theorem", "range_val", ["subtype"]], ["add", "theorem", "range_val_subtype", ["subtype"]], ["del", "theorem", "val_image", ["subtype"]], ["del", "theorem", "val_image_subset", ["subtype"]], ["del", "theorem", "val_image_univ", ["subtype"]], ["del", "theorem", "val_range", ["subtype"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["mod", "theorem", "pairwise_disjoint", ["setoid", "is_partition"]], ["mod", "theorem", "sUnion_eq_univ", ["setoid", "is_partition"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "theorem", "coe_eta", ["subtype"]], ["del", "theorem", "coe_ext", ["subtype"]], ["add", "theorem", "coe_injective", ["subtype"]], ["mod", "theorem", "coe_mk", ["subtype"]], ["add", "theorem", "coe_prop", ["subtype"]], ["del", "theorem", "exists", ["subtype"]], ["del", "theorem", "ext", ["subtype"]], ["add", "theorem", "ext_iff", ["subtype"]], ["add", "theorem", "ext_iff_val", ["subtype"]], ["add", "theorem", "ext_val", ["subtype"]], ["del", "theorem", "forall'", ["subtype"]], ["del", "theorem", "forall", ["subtype"]], ["mod", "theorem", "mk_eq_mk", ["subtype"]], ["add", "theorem", "prop", ["subtype"]], ["mod", "theorem", "restrict_def", ["subtype"]], ["mod", "theorem", "val_eq_coe", ["subtype"]], ["del", "theorem", "val_prop'", ["subtype"]], ["mod", "theorem", "val_prop", ["subtype"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "theorem", "erange_coe", ["vector_space"]], ["del", "theorem", "eval_range", ["vector_space"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "of_finset_basis", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["del", "theorem", "coe_prop", ["subtype"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "mk'_self''", ["localization_map"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "map_subtype_coe_factors'", ["associates"]], ["del", "theorem", "map_subtype_val_factors'", ["associates"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_at_subtype_coe", []], ["del", "theorem", "continuous_at_subtype_val", []], ["add", "theorem", "embedding_subtype_coe", []], ["del", "theorem", "embedding_subtype_val", []], ["add", "theorem", "closed_embedding_subtype_coe", ["is_closed"]], ["del", "theorem", "closed_embedding_subtype_val", ["is_closed"]], ["add", "theorem", "is_open_map_subtype_coe", ["is_open"]], ["del", "theorem", "is_open_map_subtype_val", ["is_open"]], ["add", "theorem", "open_embedding_subtype_coe", ["is_open"]], ["del", "theorem", "open_embedding_subtype_val", ["is_open"]], ["add", "theorem", "map_nhds_subtype_coe_eq", []], ["del", "theorem", "map_nhds_subtype_val_eq", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "nhds_within_eq_map_subtype_coe", []], ["del", "theorem", "nhds_within_eq_map_subtype_val", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "isometry_subtype_coe", []], ["del", "theorem", "isometry_subtype_val", []]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "theorem", "ext", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "compact_iff_compact_univ", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1593304440, "sha": "dd2f1b96", "message": "chore(scripts): update nolints.txt (#3206)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593281956, "sha": "247fe80d", "message": "feat(category_theory/cones): cone functoriality is fully faithful (#3202)\nThe functors `cones.functoriality` and `cocones.functoriality` are fully faithful if the transformation functor is as well.", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "functoriality", ["category_theory", "limits", "cocones"]], ["mod", "def", "functoriality", ["category_theory", "limits", "cones"]]]}]}, {"timestamp": 1593252655, "sha": "adcd09d1", "message": "chore(tactic/linarith): remove final linting error (#3196)", "changes": [{"oldPath": "src/tactic/linarith/lemmas.lean", "newPath": "src/tactic/linarith/lemmas.lean", "changes": []}]}, {"timestamp": 1593235500, "sha": "e7e9f30c", "message": "feat(set): preliminaries for Haar measure (#3189)\n`comp_sup_eq_sup_comp` is renamed `comp_sup_eq_sup_comp_of_is_total` and there is a new version that doesn't assume that the order is linear.\n`set.image_injective` is renamed `function.injective.image_injective` (in the same way as the existing `function.surjective.preimage_injective`). `set.image_injective` is now an `iff`.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "bInter_coe", ["finset"]], ["add", "theorem", "bInter_finset_image", ["finset"]], ["add", "theorem", "bInter_insert", ["finset"]], ["add", "theorem", "bInter_inter", ["finset"]], ["add", "theorem", "bInter_singleton", ["finset"]], ["add", "theorem", "bUnion_finset_image", ["finset"]], ["del", "theorem", "bUnion_preimage_singleton", ["finset"]], ["add", "theorem", "card_union_eq", ["finset"]], ["mod", "theorem", "comp_inf_eq_inf_comp", ["finset"]], ["add", "theorem", "comp_inf_eq_inf_comp_of_is_total", ["finset"]], ["mod", "theorem", "comp_sup_eq_sup_comp", ["finset"]], ["add", "theorem", "comp_sup_eq_sup_comp_of_is_total", ["finset"]], ["add", "theorem", "infi_finset_image", ["finset"]], ["add", "theorem", "infi_insert", ["finset"]], ["add", "theorem", "infi_singleton", ["finset"]], ["add", "theorem", "infi_union", ["finset"]], ["add", "def", "subtype_insert_equiv_option", ["finset"]], ["add", "theorem", "supr_finset_image", ["finset"]], ["add", "theorem", "supr_insert", ["finset"]], ["add", "theorem", "supr_singleton", ["finset"]], ["mod", "theorem", "supr_union", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_injective", ["function", "injective"]], ["add", "theorem", "nonempty_apply_iff", ["function", "injective"]], ["add", "theorem", "preimage_surjective", ["function", "injective"]], ["add", "theorem", "image_surjective", ["function", "surjective"]], ["mod", "theorem", "preimage_injective", ["function", "surjective"]], ["add", "theorem", "diff_inter_diff", ["set"]], ["mod", "theorem", "image_injective", ["set"]], ["add", "theorem", "image_surjective", ["set"]], ["add", "theorem", "preimage_id'", ["set"]], ["add", "theorem", "preimage_injective", ["set"]], ["add", "theorem", "preimage_preimage", ["set"]], ["add", "theorem", "preimage_surjective", ["set"]], ["add", "theorem", "rfl", ["set", "subset"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "preimage", ["set", "disjoint"]], ["add", "theorem", "disjoint_iff_inter_eq_empty", ["set"]], ["add", "theorem", "disjoint_of_subset", ["set"]], ["add", "theorem", "disjoint_of_subset_left", ["set"]], ["add", "theorem", "disjoint_of_subset_right", ["set"]], ["add", "theorem", "subset_diff", ["set"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "ne", ["function", "injective"]], ["add", "theorem", "ne_iff", ["function", "injective"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1593228086, "sha": "8413b3f4", "message": "feat(analysis/normed_space/real_inner_product): sums and bilinear form (#3187)\nAdd lemmas about distributing the inner product into a sum. The\nnatural approach to proving those seems to be to use the corresponding\nlemmas for bilinear forms, so also add a construction of a `bilin_form\nℝ α` from the inner product.\nI realise this might all get refactored later if inner products get\nrefactored to cover the case of complex inner products as well.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "def", "bilin_form_of_inner", []], ["add", "theorem", "inner_sum", []], ["add", "theorem", "sum_inner", []]]}]}, {"timestamp": 1593226376, "sha": "6ed3325a", "message": "feat(category_theory/limits): limit of point iso (#3188)\nProve a cone is a limit given that the canonical morphism from it to a limiting cone is an iso.", "changes": [{"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "of_point_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_point_iso", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/reflect_isomorphisms.lean", "newPath": "src/category_theory/reflect_isomorphisms.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}]}, {"timestamp": 1593217930, "sha": "c6fd69d3", "message": "chore(scripts): update nolints.txt (#3192)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593215502, "sha": "78d67807", "message": "chore(category_theory/pempty): use discrete pempty instead of a special pempty category (#3191)\nUse `discrete pempty` instead of a specialised `pempty` category.\nMotivation: Since we have a good API for `discrete` categories, there doesn't seem to be much point in defining a specialised `pempty` category with an equivalence, instead we might as well just use `discrete pempty`.", "changes": [{"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": [["mod", "def", "empty", ["category_theory", "functor"]], ["add", "theorem", "empty_ext'", ["category_theory", "functor"]], ["mod", "def", "empty_ext", ["category_theory", "functor"]], ["add", "def", "unique_from_empty", ["category_theory", "functor"]]]}]}, {"timestamp": 1593189302, "sha": "2d270ff1", "message": "feat(data/set/basic): +2 lemmas, +2 `simp` attrs (#3182)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_diff", ["set"]], ["add", "theorem", "subset_image_diff", ["set"]], ["add", "theorem", "image_preimage_coe", ["subtype"]], ["mod", "theorem", "image_preimage_val", ["subtype"]]]}]}, {"timestamp": 1593184310, "sha": "ef62d1c0", "message": "chore(*): last preparations for Heine (#3179)\nThis is hopefully the last preparatory PR before we study compact uniform spaces. It has almost no mathematical content, except that I define `uniform_continuous_on`, and check it is equivalent to uniform continuity for the induced uniformity.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diagonal_eq_range", ["set"]], ["add", "theorem", "mem_diagonal", ["set"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_split", []], ["add", "theorem", "infi_split_single", []], ["add", "theorem", "supr_split", []], ["add", "theorem", "supr_split_single", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_const_of_mem", ["filter"]], ["add", "theorem", "comap_const_of_not_mem", ["filter"]], ["add", "theorem", "comap_prod", ["filter"]], ["add", "theorem", "le_iff_forall_inf_principal_compl", ["filter"]], ["add", "theorem", "mem_iff_inf_principal_compl", ["filter"]], ["add", "theorem", "principal_le_iff", ["filter"]], ["add", "theorem", "subtype_coe_map_comap_prod", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "of_inf_left", ["cluster_pt"]], ["add", "theorem", "of_inf_right", ["cluster_pt"]], ["add", "theorem", "cluster_pt_iff", []], ["del", "theorem", "cluster_pt_of_inf_left", []], ["del", "theorem", "cluster_pt_of_inf_right", []], ["add", "theorem", "mem_closure_iff_cluster_pt", []], ["add", "theorem", "subset_interior_iff_nhds", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "uniform_continuous_on_iff", ["metric"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "disjoint_nested_nhds", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "nhds_eq_comap_uniformity_aux", []], ["add", "theorem", "nhds_le_uniformity", []], ["add", "def", "uniform_continuous_on", []], ["add", "theorem", "uniform_continuous_on_iff_restrict", []]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["mod", "theorem", "eq_of_uniformity_inf_nhds", []]]}]}, {"timestamp": 1593178758, "sha": "6624509e", "message": "feat(algebra/big_operators): telescoping sums (#3184)\ngeneralize sum_range_sub_of_monotone, a theorem about nats, to a theorem about commutative groups", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_range_div", ["finset"]], ["add", "theorem", "sum_range_sub", ["finset"]]]}]}, {"timestamp": 1593165559, "sha": "5b97da63", "message": "feat(ring_theory/matrix_equiv_tensor): matrix n n A ≃ₐ[R] (A ⊗[R] matrix n n R) (#3177)\nWhen `A` is an `R`-algebra, matrices over `A` are equivalent (as an algebra) to `A ⊗[R] matrix n n R`.", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "to_fun_eq_coe", ["ring_hom"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "mul_mul_left", ["matrix"]], ["add", "theorem", "mul_mul_right", ["matrix"]], ["add", "def", "scalar", ["matrix"]], ["add", "theorem", "map_matrix_mul", ["ring_hom"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "sum_tmul", ["tensor_product"]], ["add", "theorem", "tmul_sum", ["tensor_product"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "apply_dite", []], ["add", "theorem", "apply_ite", []], ["add", "theorem", "dite_apply", []], ["add", "theorem", "ite_apply", []]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "symm_symm", ["alg_equiv"]], ["add", "theorem", "algebra_map_eq_smul_one", ["algebra"]]]}, {"oldPath": null, "newPath": "src/ring_theory/matrix_algebra.lean", "changes": [["add", "theorem", "algebra_map_matrix_val", []], ["add", "def", "equiv", ["matrix_equiv_tensor"]], ["add", "def", "inv_fun", ["matrix_equiv_tensor"]], ["add", "theorem", "inv_fun_add", ["matrix_equiv_tensor"]], ["add", "theorem", "inv_fun_algebra_map", ["matrix_equiv_tensor"]], ["add", "theorem", "inv_fun_smul", ["matrix_equiv_tensor"]], ["add", "theorem", "inv_fun_zero", ["matrix_equiv_tensor"]], ["add", "theorem", "left_inv", ["matrix_equiv_tensor"]], ["add", "theorem", "right_inv", ["matrix_equiv_tensor"]], ["add", "def", "to_fun", ["matrix_equiv_tensor"]], ["add", "def", "to_fun_alg_hom", ["matrix_equiv_tensor"]], ["add", "theorem", "to_fun_alg_hom_apply", ["matrix_equiv_tensor"]], ["add", "def", "to_fun_bilinear", ["matrix_equiv_tensor"]], ["add", "def", "to_fun_linear", ["matrix_equiv_tensor"]], ["add", "def", "to_fun_right_linear", ["matrix_equiv_tensor"]], ["add", "def", "matrix_equiv_tensor", []], ["add", "theorem", "matrix_equiv_tensor_apply", []], ["add", "theorem", "matrix_equiv_tensor_apply_symm", []]]}, {"oldPath": "src/ring_theory/tensor_product.lean", "newPath": "src/ring_theory/tensor_product.lean", "changes": []}]}, {"timestamp": 1593155815, "sha": "3cfc0e73", "message": "chore(category/*): linting (#3178)\nSome linting work on `category_theory/`.", "changes": [{"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": [["mod", "theorem", "op_obj_unop_hom_app", ["category_theory", "functor", "const"]], ["mod", "theorem", "op_obj_unop_inv_app", ["category_theory", "functor", "const"]]]}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["del", "def", "ulift_down", ["category_theory", "functor"]], ["del", "def", "ulift_up", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["del", "def", "ulift_down_up", ["category_theory", "functor"]], ["del", "def", "ulift_up_down", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["mod", "structure", "nat_trans", ["category_theory"]]]}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": [["mod", "def", "associator", ["category_theory", "prod"]], ["mod", "def", "inverse_associator", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/sums/associator.lean", "newPath": "src/category_theory/sums/associator.lean", "changes": [["mod", "def", "associator", ["category_theory", "sum"]], ["mod", "def", "inverse_associator", ["category_theory", "sum"]]]}]}, {"timestamp": 1593152301, "sha": "c3923e39", "message": "feat(data/fintype): trunc_sigma_of_exists (#3166)\nWhen working over a `fintype`, you can lift existential statements to `trunc` statements.\nThis PR adds:\n```\ndef trunc_of_nonempty_fintype {α} (h : nonempty α) [fintype α] : trunc α\ndef trunc_sigma_of_exists {α} [fintype α] {P : α → Prop} [decidable_pred P] (h : ∃ a, P a) : trunc (Σ' a, P a)\n```", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "def", "trunc_of_card_pos", []], ["add", "def", "trunc_of_multiset_exists_mem", []], ["add", "def", "trunc_of_nonempty_fintype", []], ["add", "def", "trunc_sigma_of_exists", []]]}]}, {"timestamp": 1593134586, "sha": "616cb5e6", "message": "chore(category_theory/equivalence) explicit transitivity transformation (#3176)\nModifies the construction of the transitive equivalence to be explicit in what exactly the natural transformations are.\nThe motivation for this is two-fold: firstly we get auto-generated projection lemmas for extracting the functor and inverse, and the natural transformations aren't obscured through `adjointify_η`.", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "def", "trans", ["category_theory", "equivalence"]]]}]}, {"timestamp": 1593131673, "sha": "abae5a3c", "message": "chore(scripts): update nolints.txt (#3174)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593126654, "sha": "43a2b24d", "message": "feat(tactic/abel) teach abel to gsmul_zero (#3173)\nAs reported by Heather Macbeth in:\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/limitations.20of.20.60abel.60\n`abel` was not negating zero to zero.", "changes": [{"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "test/abel.lean", "newPath": "test/abel.lean", "changes": []}]}, {"timestamp": 1593102964, "sha": "db7a53af", "message": "refactor(ring_theory/ideals): make local_ring a prop class (#3171)", "changes": [{"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["del", "def", "is_local_ring", []], ["del", "def", "local_of_is_local_ring", []], ["add", "theorem", "local_of_nonunits_ideal", []], ["del", "def", "local_of_nonunits_ideal", []], ["add", "theorem", "local_of_unique_max_ideal", []], ["del", "def", "local_of_unique_max_ideal", []], ["del", "def", "local_of_unit_or_unit_one_sub", []], ["add", "def", "maximal_ideal", ["local_ring"]], ["add", "theorem", "mem_maximal_ideal", ["local_ring"]], ["del", "theorem", "mem_nonunits_ideal", ["local_ring"]], ["del", "def", "nonunits_ideal", ["local_ring"]], ["mod", "def", "residue_field", ["local_ring"]], ["mod", "theorem", "map_nonunit", []]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["del", "theorem", "is_local_ring", ["mv_power_series"]], ["del", "theorem", "is_local_ring", ["power_series"]]]}]}, {"timestamp": 1593100297, "sha": "afc1c24e", "message": "feat(category/default): comp_dite (#3163)\nAdds lemmas to \"distribute\" composition over `if` statements.", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["add", "theorem", "comp_dite", ["category_theory"]], ["add", "theorem", "dite_comp", ["category_theory"]]]}]}, {"timestamp": 1593100295, "sha": "c6f629bc", "message": "feat(category_theory/limits): isos from reindexing limits (#3100)\nThree related constructions which are helpful when identifying \"the same limit written different ways\".\n1. The categories of cones over `F` and `G` are equivalent if `F` and `G` are naturally isomorphic\n(possibly after changing the indexing category by an equivalence).\n2. We can prove two cone points `(s : cone F).X` and `(t.cone F).X` are isomorphic if\n* both cones are limit cones\n* their indexing categories are equivalent via some `e : J ≌ K`,\n* the triangle of functors commutes up to a natural isomorphism: `e.functor ⋙ G ≅ F`.\n3. The chosen limits of `F : J ⥤ C` and `G : K ⥤ C` are isomorphic,\nif there is an equivalence `e : J ≌ K` making the triangle commute up to natural isomorphism.", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "equivalence_of_reindexing", ["category_theory", "limits", "cocones"]], ["add", "theorem", "equivalence_of_reindexing_functor_obj", ["category_theory", "limits", "cocones"]], ["add", "def", "whiskering", ["category_theory", "limits", "cocones"]], ["add", "def", "whiskering_equivalence", ["category_theory", "limits", "cocones"]], ["add", "def", "equivalence_of_reindexing", ["category_theory", "limits", "cones"]], ["add", "theorem", "equivalence_of_reindexing_functor_obj", ["category_theory", "limits", "cones"]], ["add", "def", "whiskering", ["category_theory", "limits", "cones"]], ["add", "def", "whiskering_equivalence", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "colim_map", ["category_theory", "limits"]], ["add", "def", "iso_of_equivalence", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "iso_of_equivalence_π", ["category_theory", "limits", "has_colimit"]], ["add", "def", "iso_of_nat_iso", ["category_theory", "limits", "has_colimit"]], ["add", "theorem", "iso_of_nat_iso_hom_π", ["category_theory", "limits", "has_colimit"]], ["add", "def", "iso_of_equivalence", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "iso_of_equivalence_π", ["category_theory", "limits", "has_limit"]], ["add", "def", "iso_of_nat_iso", ["category_theory", "limits", "has_limit"]], ["add", "theorem", "iso_of_nat_iso_hom_π", ["category_theory", "limits", "has_limit"]], ["add", "def", "cocone_points_iso_of_equivalence", ["category_theory", "limits", "is_colimit"]], ["add", "def", "cocone_points_iso_of_nat_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "whisker_equivalence", ["category_theory", "limits", "is_colimit"]], ["add", "def", "cone_points_iso_of_equivalence", ["category_theory", "limits", "is_limit"]], ["add", "def", "cone_points_iso_of_nat_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "whisker_equivalence", ["category_theory", "limits", "is_limit"]], ["add", "def", "lim_map", ["category_theory", "limits"]], ["add", "theorem", "lim_map_π", ["category_theory", "limits"]], ["add", "theorem", "ι_colim_map", ["category_theory", "limits"]]]}]}, {"timestamp": 1593095521, "sha": "158e84ae", "message": "feat(*): bump to Lean 3.16.5 (#3170)\nThere should be no changes required in mathlib.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1593090417, "sha": "7d331eb9", "message": "chore(*): assorted lemmas about `set` and `finset` (#3158)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "bUnion_coe", ["finset"]], ["add", "theorem", "bUnion_preimage_singleton", ["finset"]]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "eq_on_indicator", ["set"]], ["add", "theorem", "indicator_preimage_of_not_mem", ["set"]], ["add", "theorem", "mem_range_indicator", ["set"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_const", ["set"]], ["add", "theorem", "preimage_const_of_mem", ["set"]], ["add", "theorem", "preimage_const_of_not_mem", ["set"]], ["mod", "theorem", "preimage_inter_range", ["set"]], ["add", "theorem", "preimage_range", ["set"]], ["add", "theorem", "preimage_range_inter", ["set"]], ["add", "theorem", "preimage_singleton_eq_empty", ["set"]], ["add", "theorem", "preimage_singleton_nonempty", ["set"]], ["add", "theorem", "sep_mem_eq", ["set"]]]}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["add", "theorem", "pairwise_disjoint_fiber", []], ["add", "theorem", "pairwise_on_univ", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bUnion_preimage_singleton", ["set"]], ["add", "theorem", "bUnion_range_preimage_singleton", ["set"]], ["add", "theorem", "pairwise_on_disjoint_fiber", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ite_eq_iff", []]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}]}, {"timestamp": 1593090415, "sha": "80a08778", "message": "feat(category_theory): show a pullback of a regular mono is regular (#2780)\nAnd adds two methods for constructing limits which I've found much easier to use in practice.", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "mk'", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "def", "mk'", ["category_theory", "limits", "fork", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "flip_is_limit", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "mk'", ["category_theory", "limits", "pullback_cone", "is_limit"]], ["add", "def", "flip_is_colimit", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "mk'", ["category_theory", "limits", "pushout_cocone", "is_colimit"]]]}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["add", "def", "normal_of_is_pullback_fst_of_normal", ["category_theory"]], ["add", "def", "normal_of_is_pullback_snd_of_normal", ["category_theory"]], ["add", "def", "normal_of_is_pushout_fst_of_normal", ["category_theory"]], ["add", "def", "normal_of_is_pushout_snd_of_normal", ["category_theory"]], ["add", "def", "regular_of_is_pullback_fst_of_regular", ["category_theory"]], ["add", "def", "regular_of_is_pullback_snd_of_regular", ["category_theory"]], ["add", "def", "regular_of_is_pushout_fst_of_regular", ["category_theory"]], ["add", "def", "regular_of_is_pushout_snd_of_regular", ["category_theory"]]]}]}, {"timestamp": 1593088012, "sha": "3f868fab", "message": "feat(filter, topology): cluster_pt and principal notation, redefine compactness (#3160)\nThis PR implements what is discussed in https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/Picking.20sides. It introduces a notation for `filter.principal`, defines `cluster_pt` and uses it to redefine compactness in a way which makes the library more consistent by always putting the neighborhood filter on the left, as in the description of closures and `nhds_within`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": [["mod", "def", "at_bot", ["filter"]], ["mod", "def", "at_top", ["filter"]], ["add", "theorem", "inf_map_at_top_ne_bot_iff", ["filter"]], ["del", "theorem", "map_at_top_inf_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "theorem", "is_countably_generated_of_seq", ["filter"]], ["mod", "theorem", "is_countably_generated_seq", ["filter"]], ["mod", "theorem", "eq_infi_principal", ["filter_basis"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_principal", ["filter"]], ["mod", "theorem", "inf_principal", ["filter"]], ["mod", "theorem", "inf_principal_eq_bot", ["filter"]], ["mod", "theorem", "is_compl_principal", ["filter"]], ["mod", "theorem", "join_principal_eq_Sup", ["filter"]], ["mod", "theorem", "le_principal_iff", ["filter"]], ["mod", "theorem", "mem_principal_self", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["mod", "theorem", "mem_sets_of_eq_bot", ["filter"]], ["mod", "theorem", "monotone_principal", ["filter"]], ["mod", "theorem", "principal_empty", ["filter"]], ["mod", "theorem", "principal_eq_bot_iff", ["filter"]], ["mod", "theorem", "principal_eq_iff_eq", ["filter"]], ["mod", "theorem", "principal_mono", ["filter"]], ["mod", "theorem", "principal_ne_bot_iff", ["filter"]], ["mod", "theorem", "principal_univ", ["filter"]], ["mod", "theorem", "pure_eq_principal", ["filter"]], ["mod", "theorem", "sup_principal", ["filter"]], ["mod", "theorem", "supr_principal", ["filter"]]]}, {"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["mod", "def", "is_extr_on", []], ["mod", "def", "is_max_on", []], ["mod", "def", "is_min_on", []]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "lift_principal2", ["filter"]]]}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": [["mod", "theorem", "le_of_ultrafilter", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "theorem", "is_bounded_principal", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["mod", "theorem", "tendsto_subseq", ["topological_space", "first_countable_topology"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_eq_cluster_pts", []], ["del", "theorem", "closure_eq_nhds", []], ["add", "theorem", "mono", ["cluster_pt"]], ["add", "theorem", "of_le_nhds", ["cluster_pt"]], ["add", "theorem", "of_nhds_le", ["cluster_pt"]], ["add", "def", "cluster_pt", []], ["add", "theorem", "cluster_pt_of_inf_left", []], ["add", "theorem", "cluster_pt_of_inf_right", []], ["mod", "theorem", "interior_eq_nhds", []], ["mod", "theorem", "is_closed_iff_nhds", []], ["mod", "theorem", "is_open_iff_nhds", []], ["add", "def", "map_cluster_pt", []], ["add", "theorem", "map_cluster_pt_iff", []], ["add", "theorem", "map_cluster_pt_of_comp", []], ["mod", "def", "nhds", []], ["mod", "theorem", "nhds_def", []], ["mod", "theorem", "nhds_le_of_le", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "def", "nhds_within", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "nhds_of_ne_top", ["ennreal"]], ["mod", "theorem", "nhds_top", ["ennreal"]], ["mod", "theorem", "nhds_zero", ["ennreal"]]]}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "uniformity_edist", ["metric"]]]}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "nhds_eq", ["emetric"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "def", "compact", []]]}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "refl_le_uniformity", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "def", "is_complete", []]]}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1593070804, "sha": "e7db701e", "message": "feat(category/adjunction): missing simp lemmas (#3168)\nJust two missing simp lemmas.", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "theorem", "left_adjoint_of_is_equivalence", ["category_theory", "functor"]], ["add", "theorem", "right_adjoint_of_is_equivalence", ["category_theory", "functor"]]]}]}, {"timestamp": 1593070802, "sha": "d86f1c83", "message": "chore(category/discrete): missing simp lemmas (#3165)\nSome obvious missing `simp` lemmas for `discrete.nat_iso`.", "changes": [{"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "theorem", "nat_iso_app", ["category_theory", "discrete"]], ["add", "theorem", "nat_iso_hom_app", ["category_theory", "discrete"]], ["add", "theorem", "nat_iso_inv_app", ["category_theory", "discrete"]]]}]}, {"timestamp": 1593070801, "sha": "266d3163", "message": "chore(category/equivalence): cleanup (#3164)\nPreviously some \"shorthands\" like\n```\n@[simp] def unit (e : C ≌ D) : 𝟭 C ⟶ e.functor ⋙ e.inverse := e.unit_iso.hom\n```\nhad been added in `equivalence.lean`.\nThese were a bit annoying, as even though they were marked as `simp` sometimes the syntactic difference between `e.unit` and `e.unit_iso.hom` would get in the way of tactics working.\nThis PR turns these into abbreviations.\nThis comes at a slight cost: apparently expressions like `{ X := X }.Y` won't reduce when `.Y` is an abbreviation for `.X.Z`, so we add some `@[simp]` lemmas back in to achieve this.", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "def", "counit", ["category_theory", "equivalence"]], ["del", "theorem", "counit_def", ["category_theory", "equivalence"]], ["mod", "def", "counit_inv", ["category_theory", "equivalence"]], ["del", "theorem", "counit_inv_def", ["category_theory", "equivalence"]], ["add", "theorem", "equivalence_mk'_counit", ["category_theory", "equivalence"]], ["add", "theorem", "equivalence_mk'_counit_inv", ["category_theory", "equivalence"]], ["add", "theorem", "equivalence_mk'_unit", ["category_theory", "equivalence"]], ["add", "theorem", "equivalence_mk'_unit_inv", ["category_theory", "equivalence"]], ["add", "theorem", "functor_as_equivalence", ["category_theory", "equivalence"]], ["add", "theorem", "functor_inv", ["category_theory", "equivalence"]], ["mod", "theorem", "functor_unit_comp", ["category_theory", "equivalence"]], ["add", "theorem", "inverse_as_equivalence", ["category_theory", "equivalence"]], ["add", "theorem", "inverse_inv", ["category_theory", "equivalence"]], ["mod", "def", "unit", ["category_theory", "equivalence"]], ["del", "theorem", "unit_def", ["category_theory", "equivalence"]], ["mod", "def", "unit_inv", ["category_theory", "equivalence"]], ["del", "theorem", "unit_inv_def", ["category_theory", "equivalence"]], ["add", "theorem", "as_equivalence_functor", ["category_theory", "functor"]], ["add", "theorem", "as_equivalence_inverse", ["category_theory", "functor"]], ["add", "theorem", "inv_inv", ["category_theory", "functor"]]]}]}, {"timestamp": 1593070799, "sha": "e8187ac1", "message": "feat(category/preadditive): comp_sum (#3162)\nAdds lemmas to distribute composition over `finset.sum`, in a preadditive category.", "changes": [{"oldPath": "src/category_theory/preadditive.lean", "newPath": "src/category_theory/preadditive.lean", "changes": [["add", "theorem", "comp_sum", ["category_theory", "preadditive"]], ["add", "theorem", "sum_comp", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1593066779, "sha": "3875012a", "message": "feat(data/quot): add `map'`, `hrec_on'`, and `hrec_on₂'` (#3148)\nAlso add a few `simp` lemmas", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["mod", "theorem", "choice_eq", ["quotient"]], ["add", "theorem", "hrec_on'_mk'", ["quotient"]], ["add", "theorem", "hrec_on₂'_mk'", ["quotient"]], ["add", "theorem", "map'_mk'", ["quotient"]], ["add", "theorem", "map_mk", ["quotient"]], ["add", "theorem", "map₂'_mk'", ["quotient"]]]}]}, {"timestamp": 1593063539, "sha": "553e4534", "message": "feat(algebra/big_operators): prod_dite_eq (#3167)\nAdd `finset.prod_dite_eq`, the dependent analogue of `finset.prod_ite_eq`, and its primed version for the flipped equality.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_dite_eq'", ["finset"]], ["add", "theorem", "prod_dite_eq", ["finset"]]]}]}, {"timestamp": 1593059729, "sha": "8f04a92a", "message": "refactor(algebra/*): small API fixes (#3157)\n## Changes to `canonically_ordered_comm_semiring`\n* in the definition of `canonically_ordered_comm_semiring` replace\n `mul_eq_zero_iff` with `eq_zero_or_eq_zero_of_mul_eq_zero`; the other\n implication is always true because of `[semiring]`;\n* add instance `canonically_ordered_comm_semiring.to_no_zero_divisors`;\n## Changes to `with_top`\n* use `to_additive` for `with_top.has_one`, `with_top.coe_one` etc;\n* move `with_top.coe_ne_zero` to `algebra.ordered_group`;\n* add `with_top.has_add`, make `coe_add`, `coe_bit*` require only `[has_add α]`;\n* use proper instances for lemmas about multiplication in `with_top`, not\n just `canonically_ordered_comm_semiring` for everything;\n## Changes to `associates`\n* merge `associates.mk_zero_eq` and `associates.mk_eq_zero_iff_eq_zero` into\n `associates.mk_eq_zero`;\n* drop `associates.mul_zero`, `associates.zero_mul`, `associates.zero_ne_one`,\n and `associates.mul_eq_zero_iff` in favor of typeclass instances;\n## Misc changes\n* drop `mul_eq_zero_iff_eq_zero_or_eq_zero` in favor of `mul_eq_zero`;\n* drop `ennreal.mul_eq_zero` in favor of `mul_eq_zero` from instance.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "mk_eq_zero", ["associates"]], ["del", "theorem", "mk_eq_zero_iff_eq_zero", ["associates"]], ["del", "theorem", "mk_zero_eq", ["associates"]], ["del", "theorem", "mul_eq_zero_iff", ["associates"]], ["del", "theorem", "mul_zero", ["associates"]], ["del", "theorem", "zero_ne_one", ["associates"]]]}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "coe_add", ["with_top"]], ["mod", "theorem", "coe_bit0", ["with_top"]], ["mod", "theorem", "coe_bit1", ["with_top"]], ["mod", "theorem", "coe_eq_one", ["with_top"]], ["del", "theorem", "coe_eq_zero", ["with_top"]], ["mod", "theorem", "coe_one", ["with_top"]], ["del", "theorem", "coe_zero", ["with_top"]], ["add", "theorem", "one_eq_coe", ["with_top"]], ["add", "theorem", "one_ne_top", ["with_top"]], ["add", "theorem", "top_ne_one", ["with_top"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "coe_mul", ["with_top"]], ["del", "theorem", "top_ne_zero", ["with_top"]], ["del", "theorem", "zero_eq_coe", ["with_top"]], ["del", "theorem", "zero_ne_top", ["with_top"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "theorem", "eq_zero_of_mul_eq_self_left'", []], ["mod", "theorem", "eq_zero_of_mul_eq_self_left", []], ["del", "theorem", "eq_zero_of_mul_eq_self_right'", []], ["mod", "theorem", "eq_zero_of_mul_eq_self_right", []], ["del", "theorem", "mul_eq_zero_iff_eq_zero_or_eq_zero", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "coe_nat", ["with_top"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "mul_eq_zero", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1593047378, "sha": "e1a72b50", "message": "feat(archive/100-theorems-list/73_ascending_descending_sequences): Erdős–Szekeres (#3074)\nProve the Erdős-Szekeres theorem on ascending or descending sequences", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/73_ascending_descending_sequences.lean", "changes": [["add", "theorem", "erdos_szekeres", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "succ_injective", ["nat"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "injective_of_lt_imp_ne", []], ["add", "def", "strict_mono_decr_on", []], ["add", "def", "strict_mono_incr_on", []]]}]}, {"timestamp": 1593045247, "sha": "5c7e1a22", "message": "chore(scripts): update nolints.txt (#3161)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1593028314, "sha": "2aa08c1f", "message": "chore(algebra/ordered_group): merge `add_le_add'` with `add_le_add` (#3159)\nAlso drop `mul_le_mul''` (was a weaker version of `mul_le_mul'`).", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "mul_le_mul''", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1593009407, "sha": "04a5bdbc", "message": "feat(linear_algebra/finsupp_vector_space): is_basis.tensor_product (#3147)\nIf `b : ι → M` and `c : κ → N` are bases then so is `λ i, b i.1 ⊗ₜ c i.2 : ι × κ → M ⊗ N`.", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "sum_smul_index'", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "module_equiv_finsupp_apply_basis", []]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "coe_lsum", ["finsupp"]], ["add", "theorem", "dom_lcongr_single", ["finsupp"]], ["add", "def", "lcongr", ["finsupp"]], ["add", "theorem", "lcongr_single", ["finsupp"]], ["mod", "def", "lsum", ["finsupp"]], ["mod", "theorem", "lsum_apply", ["finsupp"]], ["add", "theorem", "lsum_single", ["finsupp"]], ["add", "def", "finsupp_lequiv_direct_sum", []], ["add", "theorem", "finsupp_lequiv_direct_sum_single", []], ["add", "theorem", "finsupp_lequiv_direct_sum_symm_lof", []], ["add", "def", "finsupp_tensor_finsupp", []], ["add", "theorem", "finsupp_tensor_finsupp_single", []], ["add", "theorem", "finsupp_tensor_finsupp_symm_single", []]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["add", "theorem", "tensor_product", ["finsupp", "is_basis"]], ["mod", "theorem", "is_basis_single", ["finsupp"]], ["add", "theorem", "is_basis_single_one", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "congr_tmul", ["tensor_product"]], ["add", "theorem", "direct_sum_lof_tmul_lof", ["tensor_product"]]]}]}, {"timestamp": 1592994177, "sha": "dd9b5c68", "message": "refactor(tactic/linarith): big refactor and docs (#3113)\nThis PR:\n* Splits `linarith` into multiple files for organizational purposes\n* Uses the general `zify` and `cancel_denom` tactics instead of weaker custom versions\n* Refactors many components of `linarith`, in particular,\n* Modularizes `linarith` preprocessing, so that users can insert custom steps\n* Implements `nlinarith` preprocessing as such a custom step, so it happens at the correct point of the preprocessing stage\n* Better encapsulates the FM elimination module, to make it easier to plug in alternate oracles if/when they exist\n* Docs, docs, docs\nThe change to zification means that some goals which involved multiplication of natural numbers will no longer be solved. However, others are now in scope. `nlinarith` is a possible drop-in replacement; otherwise, generalize the product of naturals to a single natural, and `linarith` should still succeed.", "changes": [{"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo1988_q6.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "mfind", ["list"]], ["add", "def", "mmap_upper_triangle", ["list"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/cancel_denoms.lean", "newPath": "src/tactic/cancel_denoms.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": null, "changes": [["del", "theorem", "add_subst", ["linarith"]], ["del", "def", "vars", ["linarith", "comp"]], ["del", "structure", "comp", ["linarith"]], ["del", "def", "to_string", ["linarith", "comp_source"]], ["del", "inductive", "comp_source", ["linarith"]], ["del", "theorem", "div_subst", ["linarith"]], ["del", "theorem", "eq_of_eq_of_eq", ["linarith"]], ["del", "theorem", "eq_of_not_lt_of_not_gt", ["linarith"]], ["del", "def", "cmp", ["linarith", "ineq"]], ["del", "def", "max", ["linarith", "ineq"]], ["del", "def", "to_string", ["linarith", "ineq"]], ["del", "inductive", "ineq", ["linarith"]], ["del", "theorem", "coe_nat_bit0", ["linarith", "int"]], ["del", "theorem", "coe_nat_bit0_mul", ["linarith", "int"]], ["del", "theorem", "coe_nat_bit1", ["linarith", "int"]], ["del", "theorem", "coe_nat_bit1_mul", ["linarith", "int"]], ["del", "theorem", "coe_nat_mul_bit0", ["linarith", "int"]], ["del", "theorem", "coe_nat_mul_bit1", ["linarith", "int"]], ["del", "theorem", "coe_nat_mul_one", ["linarith", "int"]], ["del", "theorem", "coe_nat_mul_zero", ["linarith", "int"]], ["del", "theorem", "coe_nat_one_mul", ["linarith", "int"]], ["del", "theorem", "coe_nat_zero_mul", ["linarith", "int"]], ["del", "theorem", "le_of_eq_of_le", ["linarith"]], ["del", "theorem", "le_of_le_of_eq", ["linarith"]], ["del", "def", "cmp", ["linarith", "linexp"]], ["del", "def", "contains", ["linarith", "linexp"]], ["del", "def", "get", ["linarith", "linexp"]], ["del", "def", "scale", ["linarith", "linexp"]], ["del", "def", "vars", ["linarith", "linexp"]], ["del", "def", "zfind", ["linarith", "linexp"]], ["del", "def", "linexp", ["linarith"]], ["del", "theorem", "lt_of_eq_of_lt", ["linarith"]], ["del", "theorem", "lt_of_lt_of_eq", ["linarith"]], ["del", "theorem", "mul_eq", ["linarith"]], ["del", "theorem", "mul_neg", ["linarith"]], ["del", "theorem", "mul_nonpos", ["linarith"]], ["del", "theorem", "mul_subst", ["linarith"]], ["del", "theorem", "mul_zero_eq", ["linarith"]], ["del", "theorem", "nat_eq_subst", ["linarith"]], ["del", "theorem", "nat_le_subst", ["linarith"]], ["del", "theorem", "nat_lt_subst", ["linarith"]], ["del", "theorem", "neg_subst", ["linarith"]], ["del", "theorem", "sub_into_lt", ["linarith"]], ["del", "theorem", "sub_subst", ["linarith"]], ["del", "theorem", "zero_mul_eq", ["linarith"]]]}, {"oldPath": null, "newPath": "src/tactic/linarith/datatypes.lean", "changes": [["add", "def", "coeff_of", ["linarith", "comp"]], ["add", "def", "scale", ["linarith", "comp"]], ["add", "def", "vars", ["linarith", "comp"]], ["add", "structure", "comp", ["linarith"]], ["add", "def", "cmp", ["linarith", "ineq"]], ["add", "def", "max", ["linarith", "ineq"]], ["add", "def", "to_string", ["linarith", "ineq"]], ["add", "inductive", "ineq", ["linarith"]], ["add", "def", "cmp", ["linarith", "linexp"]], ["add", "def", "contains", ["linarith", "linexp"]], ["add", "def", "get", ["linarith", "linexp"]], ["add", "def", "scale", ["linarith", "linexp"]], ["add", "def", "vars", ["linarith", "linexp"]], ["add", "def", "zfind", ["linarith", "linexp"]], ["add", "def", "linexp", ["linarith"]]]}, {"oldPath": null, "newPath": "src/tactic/linarith/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/linarith/elimination.lean", "changes": [["add", "def", "to_string", ["linarith", "comp_source"]], ["add", "inductive", "comp_source", ["linarith"]]]}, {"oldPath": null, "newPath": "src/tactic/linarith/frontend.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/linarith/lemmas.lean", "changes": [["add", "theorem", "eq_of_eq_of_eq", ["linarith"]], ["add", "theorem", "eq_of_not_lt_of_not_gt", ["linarith"]], ["add", "theorem", "coe_nat_bit0", ["linarith", "int"]], ["add", "theorem", "coe_nat_bit0_mul", ["linarith", "int"]], ["add", "theorem", "coe_nat_bit1", ["linarith", "int"]], ["add", "theorem", "coe_nat_bit1_mul", ["linarith", "int"]], ["add", "theorem", "coe_nat_mul_bit0", ["linarith", "int"]], ["add", "theorem", "coe_nat_mul_bit1", ["linarith", "int"]], ["add", "theorem", "coe_nat_mul_one", ["linarith", "int"]], ["add", "theorem", "coe_nat_mul_zero", ["linarith", "int"]], ["add", "theorem", "coe_nat_one_mul", ["linarith", "int"]], ["add", "theorem", "coe_nat_zero_mul", ["linarith", "int"]], ["add", "theorem", "le_of_eq_of_le", ["linarith"]], ["add", "theorem", "le_of_le_of_eq", ["linarith"]], ["add", "theorem", "lt_of_eq_of_lt", ["linarith"]], ["add", "theorem", "lt_of_lt_of_eq", ["linarith"]], ["add", "theorem", "mul_eq", ["linarith"]], ["add", "theorem", "mul_neg", ["linarith"]], ["add", "theorem", "mul_nonpos", ["linarith"]], ["add", "theorem", "mul_zero_eq", ["linarith"]], ["add", "theorem", "nat_eq_subst", ["linarith"]], ["add", "theorem", "nat_le_subst", ["linarith"]], ["add", "theorem", "nat_lt_subst", ["linarith"]], ["add", "theorem", "zero_mul_eq", ["linarith"]]]}, {"oldPath": null, "newPath": "src/tactic/linarith/parsing.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/linarith/preprocessing.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/linarith/verification.lean", "changes": []}, {"oldPath": "src/tactic/zify.lean", "newPath": "src/tactic/zify.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["add", "theorem", "norm_eq_zero_iff", []], ["add", "theorem", "norm_nonpos_left", []], ["add", "theorem", "norm_nonpos_right", []]]}]}, {"timestamp": 1592991051, "sha": "194edc12", "message": "feat(ring_theory/localization): integral closure in field extension (#3096)\nLet `A` be an integral domain with field of fractions `K` and `L` a finite extension of `K`. This PR shows the integral closure of `A` in `L` has fraction field `L`. If those definitions existed, the corollary is that the ring of integers of a number field is a number ring.\nFor this, we need two constructions on polynomials:\n * If `p` is a nonzero polynomial, `integral_normalization p` is a monic polynomial with roots `z * a` for `z` a root of `p` and `a` the leading coefficient of `p`\n * If `f` is the localization map from `A` to `K` and `p` has coefficients in `K`, then `f.integer_normalization p` is a polynomial with coefficients in `A` (think: `∀ i, is_integer (f.integer_normalization p).coeff i`) with the same roots as `p`.", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "coeff_ne_zero_of_eq_degree", ["polynomial"]], ["add", "theorem", "degree_ne_of_nat_degree_ne", ["polynomial"]], ["add", "theorem", "degree_pos_of_aeval_root", ["polynomial"]], ["add", "theorem", "degree_pos_of_eval₂_root", ["polynomial"]], ["add", "theorem", "eq_C_of_nat_degree_le_zero", ["polynomial"]], ["add", "theorem", "eval₂_smul", ["polynomial"]], ["add", "theorem", "integral_normalization_aeval_eq_zero", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_nat_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_ne_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_coeff_ne_nat_degree", ["polynomial"]], ["add", "theorem", "integral_normalization_eval₂_eq_zero", ["polynomial"]], ["add", "theorem", "monic_integral_normalization", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["add", "theorem", "nat_degree_pos_iff_degree_pos", ["polynomial"]], ["add", "theorem", "nat_degree_pos_of_aeval_root", ["polynomial"]], ["add", "theorem", "nat_degree_pos_of_eval₂_root", ["polynomial"]], ["add", "theorem", "support_integral_normalization", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_of_finite", ["algebra"]], ["add", "theorem", "exists_integral_multiple", []]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "comap_is_algebraic_iff", ["fraction_map"]], ["add", "theorem", "integer_normalization_eq_zero_iff", ["fraction_map"]], ["add", "def", "fraction_map_of_algebraic", ["integral_closure"]], ["add", "def", "fraction_map_of_finite_extension", ["integral_closure"]], ["add", "theorem", "coeff_integer_normalization_mem_support", ["localization_map"]], ["add", "theorem", "exist_integer_multiples_of_finset", ["localization_map"]], ["add", "theorem", "integer_normalization_aeval_eq_zero", ["localization_map"]], ["add", "theorem", "integer_normalization_coeff", ["localization_map"]], ["add", "theorem", "integer_normalization_eval₂_eq_zero", ["localization_map"]], ["add", "theorem", "integer_normalization_map_to_map", ["localization_map"]], ["add", "theorem", "integer_normalization_spec", ["localization_map"]], ["add", "theorem", "map_smul", ["localization_map"]]]}]}, {"timestamp": 1592982771, "sha": "8ecf53d9", "message": "feat(order/filter/countable_Inter): `sup` and `inf` (#3154)", "changes": [{"oldPath": "src/order/filter/countable_Inter.lean", "newPath": "src/order/filter/countable_Inter.lean", "changes": []}]}, {"timestamp": 1592979193, "sha": "617b07e0", "message": "feat(uniform_space/separation): add separated_set (#3130)\nAlso add documentation and simplify the proof of separated => t2 and add the converse.", "changes": [{"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["mod", "theorem", "is_add_group_hom_extension", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["mod", "def", "extension_hom", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": [["mod", "def", "of", ["CpltSepUniformSpace"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "is_closed_diagonal", []], ["add", "theorem", "t2_iff_is_closed_diagonal", []]]}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": [["mod", "theorem", "extend_map", ["abstract_completion"]]]}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": [["mod", "theorem", "is_closed_of_is_complete", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "separated_pure_cauchy_injective", ["Cauchy"]], ["mod", "theorem", "dense_embedding_coe", ["uniform_space", "completion"]], ["mod", "theorem", "extension_map", ["uniform_space", "completion"]], ["mod", "theorem", "uniform_embedding_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["add", "theorem", "eq_of_uniformity_inf_nhds", []], ["add", "theorem", "eq_of_uniformity_inf_nhds_of_is_separated", []], ["add", "theorem", "id_rel_sub_separation_relation", []], ["add", "theorem", "is_closed_separation_rel", []], ["add", "def", "is_separated", []], ["add", "theorem", "is_separated_def'", []], ["add", "theorem", "is_separated_def", []], ["add", "theorem", "is_separated_iff_induced", []], ["add", "theorem", "is_separated_of_separated_space", []], ["del", "def", "separated", []], ["mod", "theorem", "separated_equiv", []], ["add", "theorem", "separated_iff_t2", []], ["add", "def", "separated_space", []], ["add", "theorem", "separation_rel_comap", []], ["add", "theorem", "separation_rel_eq_inter_closure", []], ["mod", "theorem", "eq_of_separated_of_uniform_continuous", ["uniform_space"]], ["mod", "def", "lift", ["uniform_space", "separation_quotient"]], ["mod", "theorem", "lift_mk", ["uniform_space", "separation_quotient"]], ["mod", "theorem", "uniform_continuous_lift", ["uniform_space", "separation_quotient"]], ["add", "theorem", "univ_separated_iff", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1592959726, "sha": "985cce7b", "message": "chore(scripts): update nolints.txt (#3156)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1592957906, "sha": "d57ac08c", "message": "feat(field_theory/separable): definition and basic properties (#3155)", "changes": [{"oldPath": null, "newPath": "src/field_theory/separable.lean", "changes": [["add", "theorem", "mul", ["polynomial", "separable"]], ["add", "theorem", "of_mul_left", ["polynomial", "separable"]], ["add", "theorem", "of_mul_right", ["polynomial", "separable"]], ["add", "def", "separable", ["polynomial"]], ["add", "theorem", "separable_X", ["polynomial"]], ["add", "theorem", "separable_X_add_C", ["polynomial"]], ["add", "theorem", "separable_def'", ["polynomial"]], ["add", "theorem", "separable_def", ["polynomial"]], ["add", "theorem", "separable_one", ["polynomial"]]]}, {"oldPath": "src/ring_theory/coprime.lean", "newPath": "src/ring_theory/coprime.lean", "changes": [["add", "theorem", "add_mul_left_left", ["is_coprime"]], ["add", "theorem", "add_mul_left_left_iff", ["is_coprime"]], ["add", "theorem", "add_mul_left_right", ["is_coprime"]], ["add", "theorem", "add_mul_left_right_iff", ["is_coprime"]], ["add", "theorem", "add_mul_right_left", ["is_coprime"]], ["add", "theorem", "add_mul_right_left_iff", ["is_coprime"]], ["add", "theorem", "add_mul_right_right", ["is_coprime"]], ["add", "theorem", "add_mul_right_right_iff", ["is_coprime"]], ["add", "theorem", "mul_add_left_left", ["is_coprime"]], ["add", "theorem", "mul_add_left_left_iff", ["is_coprime"]], ["add", "theorem", "mul_add_left_right", ["is_coprime"]], ["add", "theorem", "mul_add_left_right_iff", ["is_coprime"]], ["add", "theorem", "mul_add_right_left", ["is_coprime"]], ["add", "theorem", "mul_add_right_left_iff", ["is_coprime"]], ["add", "theorem", "mul_add_right_right", ["is_coprime"]], ["add", "theorem", "mul_add_right_right_iff", ["is_coprime"]], ["add", "theorem", "of_add_mul_left_left", ["is_coprime"]], ["add", "theorem", "of_add_mul_left_right", ["is_coprime"]], ["add", "theorem", "of_add_mul_right_left", ["is_coprime"]], ["add", "theorem", "of_add_mul_right_right", ["is_coprime"]], ["add", "theorem", "of_mul_add_left_left", ["is_coprime"]], ["add", "theorem", "of_mul_add_left_right", ["is_coprime"]], ["add", "theorem", "of_mul_add_right_left", ["is_coprime"]], ["add", "theorem", "of_mul_add_right_right", ["is_coprime"]]]}]}, {"timestamp": 1592949775, "sha": "340d5a9d", "message": "refactor(geometry/manifold/*): rename to charted_space and tangent_map (#3103)\n@PatrickMassot had asked some time ago if what is currently called `manifold` in mathlib could be renamed to `charted_space`, and in a recent PR he asked if `bundled_mfderiv` could be called `tangent_map`. Both changes make sense. They are implemented in this PR, together with several tiny improvements to the manifold library.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["mod", "theorem", "refl_to_local_equiv", ["equiv"]], ["mod", "theorem", "symm_to_local_equiv", ["equiv"]], ["mod", "theorem", "to_local_equiv_coe", ["equiv"]], ["mod", "theorem", "to_local_equiv_source", ["equiv"]], ["mod", "theorem", "to_local_equiv_symm_coe", ["equiv"]], ["mod", "theorem", "to_local_equiv_target", ["equiv"]], ["mod", "theorem", "trans_to_local_equiv", ["equiv"]], ["mod", "theorem", "coe_mk", ["local_equiv"]], ["mod", "theorem", "coe_symm_mk", ["local_equiv"]], ["mod", "theorem", "coe_trans", ["local_equiv"]], ["mod", "theorem", "coe_trans_symm", ["local_equiv"]], ["add", "theorem", "image_inter_source_eq'", ["local_equiv"]], ["add", "theorem", "image_inter_source_eq", ["local_equiv"]], ["mod", "theorem", "inv_fun_as_coe", ["local_equiv"]], ["del", "theorem", "inv_image_eq_source_inter_preimage", ["local_equiv"]], ["mod", "theorem", "left_inv", ["local_equiv"]], ["mod", "theorem", "map_source", ["local_equiv"]], ["mod", "theorem", "map_target", ["local_equiv"]], ["mod", "theorem", "of_set_coe", ["local_equiv"]], ["mod", "theorem", "of_set_source", ["local_equiv"]], ["mod", "theorem", "of_set_symm", ["local_equiv"]], ["mod", "theorem", "of_set_target", ["local_equiv"]], ["mod", "theorem", "prod_coe", ["local_equiv"]], ["mod", "theorem", "prod_coe_symm", ["local_equiv"]], ["mod", "theorem", "prod_source", ["local_equiv"]], ["add", "theorem", "prod_symm", ["local_equiv"]], ["mod", "theorem", "prod_target", ["local_equiv"]], ["add", "theorem", "prod_trans", ["local_equiv"]], ["mod", "theorem", "refl_coe", ["local_equiv"]], ["mod", "theorem", "refl_restr_source", ["local_equiv"]], ["mod", "theorem", "refl_restr_target", ["local_equiv"]], ["mod", "theorem", "refl_source", ["local_equiv"]], ["mod", "theorem", "refl_symm", ["local_equiv"]], ["mod", "theorem", "refl_target", ["local_equiv"]], ["mod", "theorem", "refl_trans", ["local_equiv"]], ["mod", "theorem", "restr_coe", ["local_equiv"]], ["mod", "theorem", "restr_coe_symm", ["local_equiv"]], ["mod", "theorem", "restr_source", ["local_equiv"]], ["mod", "theorem", "restr_target", ["local_equiv"]], ["mod", "theorem", "restr_univ", ["local_equiv"]], ["mod", "theorem", "right_inv", ["local_equiv"]], ["add", "theorem", "symm_image_eq_source_inter_preimage", ["local_equiv"]], ["add", "theorem", "symm_image_inter_target_eq'", ["local_equiv"]], ["add", "theorem", "symm_image_inter_target_eq", ["local_equiv"]], ["mod", "theorem", "symm_source", ["local_equiv"]], ["mod", "theorem", "symm_symm", ["local_equiv"]], ["mod", "theorem", "symm_target", ["local_equiv"]], ["mod", "theorem", "to_fun_as_coe", ["local_equiv"]], ["mod", "theorem", "trans_refl", ["local_equiv"]], ["mod", "theorem", "trans_source", ["local_equiv"]], ["mod", "theorem", "trans_target", ["local_equiv"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": [["mod", "theorem", "base_set", ["basic_smooth_bundle_core"]], ["mod", "theorem", "chart_source", ["basic_smooth_bundle_core"]], ["mod", "theorem", "chart_target", ["basic_smooth_bundle_core"]], ["mod", "theorem", "coe_chart_at_fst", ["basic_smooth_bundle_core"]], ["mod", "theorem", "coe_chart_at_symm_fst", ["basic_smooth_bundle_core"]], ["mod", "theorem", "mem_chart_source_iff", ["basic_smooth_bundle_core"]], ["mod", "theorem", "mem_chart_target_iff", ["basic_smooth_bundle_core"]], ["mod", "theorem", "tangent_bundle_model_space_chart_at", []], ["mod", "theorem", "tangent_bundle_model_space_coe_chart_at", []], ["mod", "theorem", "tangent_bundle_model_space_coe_chart_at_symm", []]]}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/charted_space.lean", "changes": [["mod", "theorem", "chart_at_model_space_eq", []], ["add", "def", "local_homeomorph", ["charted_space_core"]], ["add", "theorem", "open_source'", ["charted_space_core"]], ["add", "theorem", "open_target", ["charted_space_core"]], ["add", "def", "to_charted_space", ["charted_space_core"]], ["add", "structure", "charted_space_core", []], ["del", "def", "local_homeomorph", ["manifold_core"]], ["del", "theorem", "open_source'", ["manifold_core"]], ["del", "theorem", "open_target", ["manifold_core"]], ["del", "def", "to_manifold", ["manifold_core"]], ["del", "structure", "manifold_core", []], ["add", "theorem", "mem_maximal_atlas_iff", []], ["mod", "theorem", "model_space_atlas", []], ["mod", "def", "refl", ["structomorph"]], ["add", "theorem", "chart_mem_maximal_atlas", ["structure_groupoid"]], ["add", "theorem", "compatible", ["structure_groupoid"]], ["add", "theorem", "compatible_of_mem_maximal_atlas", ["structure_groupoid"]], ["add", "theorem", "eq_on_source", ["structure_groupoid"]], ["add", "theorem", "id_mem", ["structure_groupoid"]], ["add", "theorem", "le_iff", ["structure_groupoid"]], ["add", "theorem", "locality", ["structure_groupoid"]], ["add", "def", "maximal_atlas", ["structure_groupoid"]], ["add", "theorem", "mem_maximal_atlas_of_mem_atlas", ["structure_groupoid"]], ["add", "theorem", "symm", ["structure_groupoid"]], ["add", "theorem", "trans", ["structure_groupoid"]]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["del", "def", "bundle_mfderiv", []], ["del", "theorem", "bundle_mfderiv_chart", []], ["del", "theorem", "bundle_mfderiv_chart_symm", []], ["del", "theorem", "bundle_mfderiv_comp", []], ["del", "theorem", "bundle_mfderiv_comp_at", []], ["del", "theorem", "bundle_mfderiv_proj", []], ["del", "theorem", "bundle_mfderiv_tangent_bundle_proj", []], ["del", "def", "bundle_mfderiv_within", []], ["del", "theorem", "bundle_mfderiv_within_comp_at", []], ["del", "theorem", "bundle_mfderiv_within_eq_bundle_mfderiv", []], ["del", "theorem", "bundle_mfderiv_within_proj", []], ["del", "theorem", "bundle_mfderiv_within_subset", []], ["del", "theorem", "bundle_mfderiv_within_tangent_bundle_proj", []], ["del", "theorem", "bundle_mfderiv_within_univ", []], ["mod", "theorem", "has_mfderiv_within_at_univ", []], ["mod", "theorem", "mfderiv_const", []], ["mod", "theorem", "mfderiv_id", []], ["mod", "theorem", "mfderiv_within_univ", []], ["add", "def", "tangent_map", []], ["add", "theorem", "tangent_map_chart", []], ["add", "theorem", "tangent_map_chart_symm", []], ["add", "theorem", "tangent_map_comp", []], ["add", "theorem", "tangent_map_comp_at", []], ["add", "theorem", "tangent_map_proj", []], ["add", "theorem", "tangent_map_tangent_bundle_proj", []], ["add", "def", "tangent_map_within", []], ["add", "theorem", "tangent_map_within_comp_at", []], ["add", "theorem", "tangent_map_within_eq_tangent_map", []], ["add", "theorem", "tangent_map_within_proj", []], ["add", "theorem", "tangent_map_within_subset", []], ["add", "theorem", "tangent_map_within_tangent_bundle_proj", []], ["add", "theorem", "tangent_map_within_univ", []], ["add", "theorem", "unique_mdiff_on_univ", []], ["mod", "def", "written_in_ext_chart_at", []], ["mod", "theorem", "written_in_ext_chart_model_space", []]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["mod", "def", "ext_chart_at", []], ["mod", "theorem", "ext_chart_at_to_inv", []], ["mod", "theorem", "ext_chart_model_space_eq_id", []], ["mod", "theorem", "mem_ext_chart_source", []], ["mod", "theorem", "left_inv'", ["model_with_corners"]], ["mod", "theorem", "left_inv", ["model_with_corners"]], ["mod", "theorem", "mk_coe", ["model_with_corners"]], ["mod", "theorem", "mk_coe_symm", ["model_with_corners"]], ["mod", "theorem", "right_inv", ["model_with_corners"]], ["mod", "theorem", "target", ["model_with_corners"]], ["mod", "theorem", "to_local_equiv_coe", ["model_with_corners"]], ["mod", "theorem", "to_local_equiv_coe_symm", ["model_with_corners"]], ["mod", "theorem", "model_with_corners_self_coe", []], ["mod", "theorem", "model_with_corners_self_coe_symm", []], ["mod", "theorem", "model_with_corners_self_local_equiv", []], ["add", "theorem", "chart_mem_maximal_atlas", ["smooth_manifold_with_corners"]], ["add", "theorem", "compatible", ["smooth_manifold_with_corners"]], ["add", "theorem", "compatible_of_mem_maximal_atlas", ["smooth_manifold_with_corners"]], ["add", "def", "maximal_atlas", ["smooth_manifold_with_corners"]], ["add", "theorem", "mem_maximal_atlas_of_mem_atlas", ["smooth_manifold_with_corners"]]]}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["mod", "theorem", "refl_to_local_homeomorph", ["homeomorph"]], ["mod", "theorem", "symm_to_local_homeomorph", ["homeomorph"]], ["mod", "theorem", "to_local_homeomorph_coe", ["homeomorph"]], ["mod", "theorem", "to_local_homeomorph_coe_symm", ["homeomorph"]], ["mod", "theorem", "to_local_homeomorph_source", ["homeomorph"]], ["mod", "theorem", "to_local_homeomorph_target", ["homeomorph"]], ["mod", "theorem", "trans_to_local_homeomorph", ["homeomorph"]], ["mod", "theorem", "coe_coe", ["local_homeomorph"]], ["mod", "theorem", "coe_coe_symm", ["local_homeomorph"]], ["mod", "theorem", "coe_trans", ["local_homeomorph"]], ["mod", "theorem", "coe_trans_symm", ["local_homeomorph"]], ["add", "theorem", "image_eq_target_inter_inv_preimage", ["local_homeomorph"]], ["add", "theorem", "image_inter_source_eq", ["local_homeomorph"]], ["mod", "theorem", "inv_fun_eq_coe", ["local_homeomorph"]], ["mod", "theorem", "left_inv", ["local_homeomorph"]], ["mod", "theorem", "map_source", ["local_homeomorph"]], ["mod", "theorem", "map_target", ["local_homeomorph"]], ["mod", "theorem", "mk_coe", ["local_homeomorph"]], ["mod", "theorem", "mk_coe_symm", ["local_homeomorph"]], ["mod", "theorem", "of_set_coe", ["local_homeomorph"]], ["mod", "theorem", "of_set_symm", ["local_homeomorph"]], ["mod", "theorem", "of_set_to_local_equiv", ["local_homeomorph"]], ["mod", "theorem", "prod_coe", ["local_homeomorph"]], ["mod", "theorem", "prod_coe_symm", ["local_homeomorph"]], ["add", "theorem", "prod_symm", ["local_homeomorph"]], ["mod", "theorem", "prod_to_local_equiv", ["local_homeomorph"]], ["add", "theorem", "prod_trans", ["local_homeomorph"]], ["mod", "theorem", "refl_coe", ["local_homeomorph"]], ["mod", "theorem", "refl_local_equiv", ["local_homeomorph"]], ["mod", "theorem", "refl_symm", ["local_homeomorph"]], ["mod", "theorem", "refl_trans", ["local_homeomorph"]], ["mod", "theorem", "restr_coe", ["local_homeomorph"]], ["mod", "theorem", "restr_coe_symm", ["local_homeomorph"]], ["mod", "theorem", "restr_open_to_local_equiv", ["local_homeomorph"]], ["mod", "theorem", "restr_to_local_equiv", ["local_homeomorph"]], ["mod", "theorem", "restr_univ", ["local_homeomorph"]], ["mod", "theorem", "right_inv", ["local_homeomorph"]], ["add", "theorem", "symm_image_eq_source_inter_preimage", ["local_homeomorph"]], ["add", "theorem", "symm_image_inter_target_eq", ["local_homeomorph"]], ["mod", "theorem", "symm_symm", ["local_homeomorph"]], ["mod", "theorem", "symm_to_local_equiv", ["local_homeomorph"]], ["mod", "theorem", "to_fun_eq_coe", ["local_homeomorph"]], ["mod", "theorem", "to_homeomorph_coe", ["local_homeomorph"]], ["mod", "theorem", "to_homeomorph_symm_coe", ["local_homeomorph"]], ["mod", "theorem", "trans_refl", ["local_homeomorph"]], ["mod", "theorem", "trans_to_local_equiv", ["local_homeomorph"]]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["mod", "theorem", "coe_coe", ["bundle_trivialization"]], ["mod", "theorem", "coe_fst", ["bundle_trivialization"]], ["mod", "theorem", "coe_mk", ["bundle_trivialization"]], ["mod", "theorem", "local_triv'_fst", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv'_inv_fst", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_at_ext_to_local_homeomorph", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_at_fst", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_at_symm_fst", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_fst", ["topological_fiber_bundle_core"]], ["mod", "theorem", "local_triv_symm_fst", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv'_source", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv'_target", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_at_source", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_source", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_local_triv_target", ["topological_fiber_bundle_core"]], ["mod", "theorem", "mem_triv_change_source", ["topological_fiber_bundle_core"]], ["mod", "def", "proj", ["topological_fiber_bundle_core"]]]}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}]}, {"timestamp": 1592935044, "sha": "bc3ed51b", "message": "chore(data/set/finite): use dot notation (#3151)\nRename:\n* `finite_insert` to `finite.insert`;\n* `finite_union` to `finite.union`;\n* `finite_subset` to `finite.subset`;\n* `finite_image` to `finite.image`;\n* `finite_dependent_image` to `finite.dependent_image`;\n* `finite_map` to `finite.map`;\n* `finite_image_iff_on` to `finite_image_iff`;\n* `finite_preimage` to `finite.preimage`;\n* `finite_sUnion` to `finite.sUnion`;\n* `finite_bUnion` to `finite.bUnion`, merge with `finite_bUnion'` and\n use `f : Π i ∈ s, set α` instead of `f : ι → set α`;\n* `finite_prod` to `finite.prod`;\n* `finite_seq` to `finite.seq`;\n* `finite_subsets_of_finite` to `finite.finite_subsets`;\n* `bdd_above_finite` to `finite.bdd_above`;\n* `bdd_above_finite_union` to `finite.bdd_above_bUnion`;\n* `bdd_below_finite` to `finite.bdd_below`;\n* `bdd_below_finite_union` to `finite.bdd_below_bUnion`.\nDelete\n* `finite_of_finite_image_on`, was a copy of `finite_of_fintie_image`;\n* `finite_bUnion'`: merge with `finite_bUnion` into `finite.bUnion`.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "bdd_above", ["finset"]], ["del", "theorem", "bdd_below", ["finset"]], ["del", "theorem", "bdd_above_finite", ["set"]], ["del", "theorem", "bdd_above_finite_union", ["set"]], ["del", "theorem", "bdd_below_finite", ["set"]], ["del", "theorem", "bdd_below_finite_union", ["set"]], ["add", "theorem", "bUnion", ["set", "finite"]], ["add", "theorem", "bdd_above_bUnion", ["set", "finite"]], ["add", "theorem", "bdd_below_bUnion", ["set", "finite"]], ["add", "theorem", "dependent_image", ["set", "finite"]], ["add", "theorem", "finite_subsets", ["set", "finite"]], ["add", "theorem", "image", ["set", "finite"]], ["add", "theorem", "insert", ["set", "finite"]], ["add", "theorem", "map", ["set", "finite"]], ["add", "theorem", "preimage", ["set", "finite"]], ["add", "theorem", "prod", ["set", "finite"]], ["add", "theorem", "sUnion", ["set", "finite"]], ["add", "theorem", "seq", ["set", "finite"]], ["add", "theorem", "subset", ["set", "finite"]], ["add", "theorem", "union", ["set", "finite"]], ["del", "theorem", "finite_bUnion'", ["set"]], ["del", "theorem", "finite_bUnion", ["set"]], ["del", "theorem", "finite_dependent_image", ["set"]], ["del", "theorem", "finite_image", ["set"]], ["add", "theorem", "finite_image_iff", ["set"]], ["del", "theorem", "finite_image_iff_on", ["set"]], ["del", "theorem", "finite_insert", ["set"]], ["del", "theorem", "finite_map", ["set"]], ["mod", "theorem", "finite_of_finite_image", ["set"]], ["del", "theorem", "finite_of_finite_image_on", ["set"]], ["del", "theorem", "finite_preimage", ["set"]], ["del", "theorem", "finite_prod", ["set"]], ["del", "theorem", "finite_sUnion", ["set"]], ["del", "theorem", "finite_seq", ["set"]], ["del", "theorem", "finite_subset", ["set"]], ["del", "theorem", "finite_subsets_of_finite", ["set"]], ["del", "theorem", "finite_union", ["set"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["del", "theorem", "measurable", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/cofinite.lean", "newPath": "src/order/filter/cofinite.lean", "changes": []}, {"oldPath": "src/order/filter/ultrafilter.lean", "newPath": "src/order/filter/ultrafilter.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1592932559, "sha": "26918a05", "message": "feat(topology/metric_space/baire): define filter `residual` (#3149)\nFixes #2265. Also define a typeclass `countable_Inter_filter` and prove that both `residual`\nand `μ.ae` have this property.", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_ball_iff", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/order/filter/countable_Inter.lean", "changes": [["add", "theorem", "countable_Inter_mem_sets", []], ["add", "theorem", "countable_bInter_mem_sets", []], ["add", "theorem", "countable_sInter_mem_sets", []], ["add", "theorem", "eventually_countable_ball", []], ["add", "theorem", "eventually_countable_forall", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "dense_inter_of_open_left", []], ["add", "theorem", "dense_inter_of_open_right", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "is_closed_ball", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["add", "theorem", "eventually_residual", []], ["add", "theorem", "mem_residual", []], ["add", "def", "residual", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "nhds_basis_closed_eball", ["emetric"]]]}]}, {"timestamp": 1592928679, "sha": "62e13643", "message": "chore(linear_algebra/nonsingular_inverse): `matrix.nonsing_inv` no longer requires base ring to carry `has_inv` instance (#3136)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "unit_spec", ["is_unit"]], ["add", "theorem", "inv_eq_of_mul_eq_one", ["units"]], ["add", "theorem", "inv_mul'", ["units"]], ["add", "theorem", "inv_unique", ["units"]], ["add", "theorem", "mul_inv'", ["units"]]]}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "invertible_unique", []]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["add", "theorem", "is_unit_det_transpose", ["matrix"]], ["add", "theorem", "is_unit_iff_is_unit_det", ["matrix"]], ["add", "theorem", "is_unit_nonsing_inv_det", ["matrix"]], ["mod", "theorem", "mul_nonsing_inv", ["matrix"]], ["del", "def", "nonsing_inv", ["matrix"]], ["add", "theorem", "nonsing_inv_apply", ["matrix"]], ["add", "theorem", "nonsing_inv_det", ["matrix"]], ["mod", "theorem", "nonsing_inv_mul", ["matrix"]], ["add", "theorem", "nonsing_inv_nonsing_inv", ["matrix"]], ["del", "theorem", "nonsing_inv_val", ["matrix"]], ["mod", "theorem", "transpose_nonsing_inv", ["matrix"]]]}]}, {"timestamp": 1592924378, "sha": "ea665e7d", "message": "fix(algebra/ordered*): add norm_cast attribute (#3132)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "coe_add", ["with_bot"]], ["add", "theorem", "coe_bit0", ["with_bot"]], ["add", "theorem", "coe_bit1", ["with_bot"]], ["add", "theorem", "coe_eq_zero", ["with_bot"]], ["mod", "theorem", "coe_one", ["with_bot"]], ["mod", "theorem", "coe_zero", ["with_bot"]], ["mod", "theorem", "coe_add", ["with_top"]], ["add", "theorem", "coe_bit0", ["with_top"]], ["add", "theorem", "coe_bit1", ["with_top"]], ["add", "theorem", "coe_eq_one", ["with_top"]], ["add", "theorem", "coe_eq_zero", ["with_top"]], ["add", "theorem", "coe_one", ["with_top"]], ["add", "theorem", "coe_zero", ["with_top"]], ["mod", "theorem", "zero_lt_coe", ["with_top"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "theorem", "coe_eq_zero", ["with_top"]], ["del", "theorem", "coe_zero", ["with_top"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_le_coe", ["with_bot"]], ["mod", "theorem", "coe_le_coe", ["with_top"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1592920732, "sha": "d287d345", "message": "refactor(order/filter/basic): define `filter.eventually_eq` (#3134)\n* Define `eventually_eq` (`f =^f[l] g`) and `eventually_le` (`f ≤^f[l] g`).\n* Use new notation and definitions in some files.", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": []}, {"oldPath": "src/order/filter/at_top_bot.lean", "newPath": "src/order/filter/at_top_bot.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "filter_mono", ["filter", "eventually"]], ["add", "theorem", "comp₂", ["filter", "eventually_eq"]], ["add", "theorem", "div", ["filter", "eventually_eq"]], ["add", "theorem", "fun_comp", ["filter", "eventually_eq"]], ["add", "theorem", "inv", ["filter", "eventually_eq"]], ["add", "theorem", "mul", ["filter", "eventually_eq"]], ["add", "theorem", "refl", ["filter", "eventually_eq"]], ["add", "theorem", "rw", ["filter", "eventually_eq"]], ["add", "theorem", "sub", ["filter", "eventually_eq"]], ["add", "theorem", "symm", ["filter", "eventually_eq"]], ["add", "theorem", "trans", ["filter", "eventually_eq"]], ["add", "def", "eventually_eq", ["filter"]], ["del", "theorem", "map_cong", ["filter"]], ["add", "theorem", "map_congr", ["filter"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "congr", ["continuous_on"]], ["mod", "theorem", "continuous_on_congr", []]]}]}, {"timestamp": 1592901654, "sha": "421ed703", "message": "chore(topology/metric_space/baire): review (#3146)\n* Simplify some proofs in `topology/metric_space/baire`;\n* Allow dependency on `hi : i ∈ S` in some `bUnion`/`bInter` lemmas.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_univ_of_subset", ["set"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "bUnion", ["set", "countable"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "bInter_eq_Inter", ["set"]], ["mod", "theorem", "bUnion_eq_Union", ["set"]], ["mod", "theorem", "sInter_bUnion", ["set"]], ["mod", "theorem", "sInter_eq_Inter", ["set"]], ["mod", "theorem", "sInter_range", ["set"]], ["mod", "theorem", "sUnion_bUnion", ["set"]], ["mod", "theorem", "sUnion_eq_Union", ["set"]], ["mod", "theorem", "sUnion_range", ["set"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["mod", "theorem", "dense_bInter_of_Gδ", []], ["add", "theorem", "dense_inter_of_Gδ", []], ["add", "theorem", "inter", ["is_Gδ"]], ["add", "theorem", "is_Gδ_Inter", []], ["mod", "theorem", "is_Gδ_Inter_of_open", []], ["add", "theorem", "is_Gδ_bInter", []], ["mod", "theorem", "is_Gδ_bInter_of_open", []], ["add", "theorem", "is_Gδ_univ", []]]}]}, {"timestamp": 1592901652, "sha": "159766e9", "message": "chore(topology/metric_space/basic): rename `uniform_continuous_dist'` (#3145)\n* rename `uniform_continuous_dist'` to `uniform_continuous_dist`;\n* rename `uniform_continuous_dist` to `uniform_continuous.dist`;\n* add `uniform_continuous.nndist`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist", ["uniform_continuous"]], ["add", "theorem", "nndist", ["uniform_continuous"]], ["del", "theorem", "uniform_continuous_dist'", []], ["mod", "theorem", "uniform_continuous_dist", []]]}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}]}, {"timestamp": 1592897502, "sha": "02d880b0", "message": "perf(tactic/cache): call `freeze_local_instances` after `reset_instance_cache` (#3128)\nCalling `unfreeze_local_instances` unfreezes the local instances of the main goal, and thereby disables the type-class cache (for this goal). It is therefore advisable to call `freeze_local_instances` afterwards as soon as possible. (The type-class cache will still be trashed when you switch between goals with different local instances, but that's only half as bad as disabling the cache entirely.)\nTo this end this PR contains several changes:\n * The `reset_instance_cache` function (and `resetI` tactic) immediately call `freeze_local_instances`.\n * The `unfreezeI` tactic is removed. Instead we introduce `unfreezingI { tac }`, which only temporarily unfreezes the local instances while executing `tac`. Try to keep `tac` as small as possible.\n * We add `substI h` and `casesI t` tactics (which are short for `unfreezingI { subst h }` and `unfreezingI { casesI t }`, resp.) as abbreviations for the most common uses of `unfreezingI`.\n * Various other uses of `unfreeze_local_instances` are eliminated. Avoid use of `unfreeze_local_instances` if possible. Use the `unfreezing tac` combinator instead (the non-interactive version of `unfreezingI`).\nSee discussion at https://github.com/leanprover-community/mathlib/pull/3113#issuecomment-647150256", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/simple.lean", "newPath": "src/category_theory/simple.lean", "changes": []}, {"oldPath": "src/control/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/control/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/parallel.lean", "newPath": "src/data/seq/parallel.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/copy.lean", "newPath": "src/order/copy.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/game/short.lean", "newPath": "src/set_theory/game/short.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}, {"oldPath": "src/tactic/trunc_cases.lean", "newPath": "src/tactic/trunc_cases.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": null, "newPath": "test/instance_cache.lean", "changes": []}]}, {"timestamp": 1592888037, "sha": "c0d74a39", "message": "refactor(group/perm) bundle sign of a perm as a monoid_hom (#3143)\nWe're trying to bundle everything right?", "changes": [{"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["mod", "theorem", "eq_sign_of_surjective_hom", ["equiv", "perm"]], ["mod", "def", "sign", ["equiv", "perm"]]]}]}, {"timestamp": 1592881886, "sha": "23d61413", "message": "chore(algebra/ring,char_zero): generalize some lemmas (#3141)\n`mul_eq_zero` etc only need `[mul_zero_class]` and `[no_zero_divisors]`. In particular, they don't need `has_neg`. Also deduplicate with `group_with_zero.*`.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "mul_ne_zero", ["division_ring"]], ["del", "theorem", "one_div_mul_one_div", ["division_ring"]], ["mod", "theorem", "mul_inv'", []], ["del", "theorem", "mul_ne_zero_comm", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "div_eq_zero_iff", []], ["mod", "theorem", "div_ne_zero_iff", []], ["del", "theorem", "mul_eq_zero'", []], ["del", "theorem", "mul_eq_zero_iff'", []], ["del", "theorem", "mul_ne_zero''", []], ["del", "theorem", "mul_ne_zero_comm''", []], ["del", "theorem", "mul_ne_zero_iff", []]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": []}, {"oldPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "mul_eq_zero_comm", []], ["del", "theorem", "mul_ne_zero'", []], ["mod", "theorem", "mul_ne_zero", []], ["del", "theorem", "mul_ne_zero_comm'", []], ["add", "theorem", "mul_ne_zero_comm", []], ["add", "theorem", "mul_ne_zero_iff", []], ["mod", "theorem", "mul_self_eq_zero", []], ["mod", "theorem", "zero_eq_mul_self", []]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": [["del", "theorem", "support_mul'", ["function"]], ["mod", "theorem", "support_mul", ["function"]]]}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}]}, {"timestamp": 1592872440, "sha": "52abfcf5", "message": "chore(scripts): update nolints.txt (#3144)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1592859157, "sha": "b5625759", "message": "feat(data/finset): add card_insert_of_mem (#3137)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card_insert_of_mem", ["finset"]]]}]}, {"timestamp": 1592853060, "sha": "36e3b9f1", "message": "chore(*): update to Lean 3.16.4c (#3139)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1592853058, "sha": "67844a81", "message": "feat(order/complete_lattice): complete lattice of Sup (#3138)\nConstruct a complete lattice from a least upper bound function. \nFrom a Xena group discussion.", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "def", "complete_lattice_of_Sup", []]]}]}, {"timestamp": 1592850139, "sha": "f0593365", "message": "fix(algebra/pi_instances): improve definitions of `pi.*` (#3116)\nThe new `test/pi_simp.lean` fails with current `master`. Note that\nthis is a workaround, not a proper fix for `tactic.pi_instance`.\nSee also [Zulip chat](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60id.60.20in.20pi_instances)\nAlso use `@[to_additive]` to generate additive definitions, add ordered multiplicative monoids, and add `semimodule (Π i, f i) (Π, g i)`.", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["del", "theorem", "add_apply", ["pi"]], ["mod", "theorem", "inv_apply", ["pi"]], ["mod", "theorem", "mul_apply", ["pi"]], ["del", "theorem", "neg_apply", ["pi"]], ["mod", "theorem", "one_apply", ["pi"]], ["add", "theorem", "smul_apply'", ["pi"]], ["mod", "theorem", "smul_apply", ["pi"]], ["del", "theorem", "zero_apply", ["pi"]]]}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": []}, {"oldPath": null, "newPath": "test/pi_simp.lean", "changes": [["add", "def", "eval_default", ["test"]], ["add", "theorem", "eval_default_one", ["test"]]]}]}, {"timestamp": 1592842336, "sha": "54cc126b", "message": "feat(data/finset,data/fintype,algebra/big_operators): some more lemmas (#3124)\nAdd some `finset`, `fintype` and `algebra.big_operators` lemmas that\nwere found useful in proving things related to affine independent\nfamilies. (In all cases where results are proved for products, and\nthen derived for sums where possible using `to_additive`, it was the\nresult for sums that I actually had a use for. In the case of\n`eq_one_of_card_le_one_of_prod_eq_one` and\n`eq_zero_of_card_le_one_of_sum_eq_zero`, `to_additive` couldn't be\nused because it also tries to convert the `1` in `s.card ≤ 1` to `0`.)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "eq_of_card_le_one_of_prod_eq", ["finset"]], ["add", "theorem", "eq_of_card_le_one_of_sum_eq", ["finset"]], ["add", "theorem", "eq_one_of_prod_eq_one", ["finset"]], ["add", "theorem", "prod_erase", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "eq_of_mem_of_not_mem_erase", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_le_one_of_subsingleton", ["finset"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "eq_of_subsingleton_of_prod_eq", ["fintype"]]]}]}, {"timestamp": 1592831995, "sha": "86dcd5cd", "message": "feat(analysis/calculus): C^1 implies strictly differentiable (#3119)\nOver the reals, a continuously differentiable function is strictly differentiable.\nSupporting material: Add a standard mean-value-theorem-related trick as its own lemma, and refactor another proof (in `calculus/extend_deriv`) to use that lemma.\nOther material: an _equality_ (rather than _inequality_) version of the mean value theorem for domains; slight refactor of `normed_space/dual`.", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": [["del", "theorem", "has_fderiv_at_boundary_of_tendsto_fderiv_aux", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "norm_image_sub_le_of_norm_fderiv_le'", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_fderiv_within_le'", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_has_fderiv_within_le'", ["convex"]], ["add", "theorem", "domain_mvt", []], ["add", "theorem", "strict_fderiv_of_cont_diff", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "has_strict_fderiv_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "has_strict_fderiv_at", ["times_cont_diff"]], ["add", "theorem", "has_strict_fderiv_at", ["times_cont_diff_on"]]]}, {"oldPath": "src/analysis/normed_space/dual.lean", "newPath": "src/analysis/normed_space/dual.lean", "changes": [["add", "theorem", "norm_le_dual_bound", ["normed_space"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "nhds_of_nhds_within_of_nhds", []]]}]}, {"timestamp": 1592827047, "sha": "46a88944", "message": "feat(linear_algebra/affine_space): affine combinations for finsets (#3122)\nExtend the definitions of affine combinations over a `fintype` to the\ncase of sums over a `finset` of an arbitrary index type (which is\nappropriate for use cases such as affine independence of a possibly\ninfinite family of points).\nAlso change to have only bundled versions of `weighted_vsub_of_point`\nand `weighted_vsub`, following review, so avoiding duplicating parts\nof `linear_map` API.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["del", "def", "affine_combination", ["affine_space"]], ["del", "theorem", "affine_combination_eq_weighted_vsub_of_point_vadd_of_sum_eq_one", ["affine_space"]], ["del", "theorem", "affine_combination_vsub", ["affine_space"]], ["del", "def", "weighted_vsub", ["affine_space"]], ["del", "theorem", "weighted_vsub_add", ["affine_space"]], ["del", "theorem", "weighted_vsub_eq_weighted_vsub_of_point_of_sum_eq_zero", ["affine_space"]], ["del", "theorem", "weighted_vsub_neg", ["affine_space"]], ["del", "def", "weighted_vsub_of_point", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_add", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_eq_of_sum_eq_zero", ["affine_space"]], ["del", "def", "weighted_vsub_of_point_linear", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_linear_apply", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_neg", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_smul", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_sub", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_vadd_eq_of_sum_eq_one", ["affine_space"]], ["del", "theorem", "weighted_vsub_of_point_zero", ["affine_space"]], ["del", "theorem", "weighted_vsub_smul", ["affine_space"]], ["del", "theorem", "weighted_vsub_sub", ["affine_space"]], ["del", "theorem", "weighted_vsub_vadd_affine_combination", ["affine_space"]], ["del", "theorem", "weighted_vsub_zero", ["affine_space"]], ["add", "def", "affine_combination", ["finset"]], ["add", "theorem", "affine_combination_eq_weighted_vsub_of_point_vadd_of_sum_eq_one", ["finset"]], ["add", "theorem", "affine_combination_vsub", ["finset"]], ["add", "def", "weighted_vsub", ["finset"]], ["add", "theorem", "weighted_vsub_eq_weighted_vsub_of_point_of_sum_eq_zero", ["finset"]], ["add", "def", "weighted_vsub_of_point", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_apply", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_eq_of_sum_eq_zero", ["finset"]], ["add", "theorem", "weighted_vsub_of_point_vadd_eq_of_sum_eq_one", ["finset"]], ["add", "theorem", "weighted_vsub_vadd_affine_combination", ["finset"]]]}]}, {"timestamp": 1592822774, "sha": "105fa176", "message": "feat(linear_algebra/matrix): trace of an endomorphism independent of basis (#3125)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "of_injective_apply", ["equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "arrow_congr_trans", ["linear_equiv"]], ["add", "theorem", "symm_trans_apply", ["linear_equiv"]], ["add", "def", "fun_congr_left", ["linear_map"]], ["add", "theorem", "fun_congr_left_apply", ["linear_map"]], ["add", "theorem", "fun_congr_left_comp", ["linear_map"]], ["add", "theorem", "fun_congr_left_id", ["linear_map"]], ["add", "theorem", "fun_congr_left_symm", ["linear_map"]], ["add", "def", "fun_left", ["linear_map"]], ["add", "theorem", "fun_left_apply", ["linear_map"]], ["add", "theorem", "fun_left_comp", ["linear_map"]], ["add", "theorem", "fun_left_id", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "range", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "linear_equiv_matrix'_apply", []], ["add", "theorem", "linear_equiv_matrix_range", []], ["add", "theorem", "to_matrix_of_equiv", ["linear_map"]], ["add", "def", "trace", ["linear_map"]], ["add", "def", "trace_aux", ["linear_map"]], ["add", "theorem", "trace_aux_def", ["linear_map"]], ["add", "theorem", "trace_aux_eq'", ["linear_map"]], ["add", "theorem", "trace_aux_eq", ["linear_map"]], ["add", "theorem", "trace_aux_range", ["linear_map"]], ["add", "theorem", "trace_eq_matrix_trace", ["linear_map"]], ["add", "theorem", "trace_mul_comm", ["linear_map"]], ["add", "theorem", "linear_equiv_matrix_comp", ["matrix"]], ["add", "theorem", "linear_equiv_matrix_mul", ["matrix"]], ["add", "theorem", "to_lin_of_equiv", ["matrix"]]]}]}, {"timestamp": 1592812917, "sha": "068aaafa", "message": "chore(data/finmap): nolint (#3131)", "changes": [{"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["mod", "def", "disjoint", ["finmap"]], ["mod", "theorem", "insert_insert", ["finmap"]], ["mod", "theorem", "insert_singleton_eq", ["finmap"]], ["mod", "theorem", "lookup_list_to_finmap", ["finmap"]], ["mod", "theorem", "lookup_union_left_of_not_in", ["finmap"]], ["mod", "theorem", "mem_list_to_finmap", ["finmap"]], ["mod", "def", "singleton", ["finmap"]], ["mod", "theorem", "to_finmap_cons", ["finmap"]], ["mod", "theorem", "to_finmap_nil", ["finmap"]], ["mod", "theorem", "union_cancel", ["finmap"]], ["mod", "def", "to_finmap", ["list"]]]}]}, {"timestamp": 1592810530, "sha": "3f9b52ae", "message": "refactor(ring_theory/*): make PID class a predicate (#3114)", "changes": [{"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "factors_decreasing", ["ideal"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["mod", "theorem", "to_maximal_ideal", ["is_prime"]], ["del", "theorem", "associates_irreducible_iff_prime", ["principal_ideal_domain"]], ["del", "theorem", "factors_decreasing", ["principal_ideal_domain"]], ["del", "theorem", "factors_spec", ["principal_ideal_domain"]], ["del", "theorem", "irreducible_iff_prime", ["principal_ideal_domain"]], ["del", "theorem", "is_maximal_of_irreducible", ["principal_ideal_domain"]], ["add", "theorem", "associates_irreducible_iff_prime", ["principal_ideal_ring"]], ["add", "theorem", "factors_spec", ["principal_ideal_ring"]], ["add", "theorem", "irreducible_iff_prime", ["principal_ideal_ring"]], ["add", "theorem", "is_maximal_of_irreducible", ["principal_ideal_ring"]]]}]}, {"timestamp": 1592786021, "sha": "6aba9580", "message": "chore(scripts): update nolints.txt (#3133)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1592773464, "sha": "d59adc18", "message": "chore(data/list/alist): nolint (#3129)", "changes": [{"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["mod", "def", "disjoint", ["alist"]]]}]}, {"timestamp": 1592768648, "sha": "5b5ff790", "message": "fix(tactic/delta_instance): bug in computing pi arity (#3127)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1592766588, "sha": "eff9ed3a", "message": "feat(topology/uniform_space): some basic lemmas (#3123)\nThis is the second PR on the road to Heine. It contains various elementary lemmas about uniform spaces.", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "closure_eq_uniformity", []], ["add", "theorem", "comp_comp_symm_mem_uniformity_sets", []], ["add", "theorem", "comp_rel_mono", []], ["add", "theorem", "comp_symm_mem_uniformity_sets", []], ["add", "theorem", "mem_comp_comp", []], ["add", "theorem", "mem_comp_of_mem_ball", []], ["add", "theorem", "subset_comp_self", []], ["add", "theorem", "subset_comp_self_of_mem_uniformity", []], ["add", "theorem", "symmetric_rel_inter", []], ["add", "theorem", "ball_mem_nhds", ["uniform_space"]], ["add", "theorem", "has_basis_nhds", ["uniform_space"]], ["add", "theorem", "has_basis_nhds_prod", ["uniform_space"]], ["add", "theorem", "mem_nhds_iff", ["uniform_space"]], ["add", "theorem", "mem_nhds_iff_symm", ["uniform_space"]], ["add", "theorem", "uniformity_comap", []], ["add", "theorem", "uniformity_has_basis_closed", []], ["add", "theorem", "uniformity_has_basis_closure", []]]}]}, {"timestamp": 1592760322, "sha": "7073c8b9", "message": "feat(tactic/cancel_denoms): try to remove numeral denominators (#3109)", "changes": [{"oldPath": null, "newPath": "src/tactic/cancel_denoms.lean", "changes": [["add", "theorem", "add_subst", ["cancel_factors"]], ["add", "theorem", "cancel_factors_eq", ["cancel_factors"]], ["add", "theorem", "cancel_factors_eq_div", ["cancel_factors"]], ["add", "theorem", "cancel_factors_le", ["cancel_factors"]], ["add", "theorem", "cancel_factors_lt", ["cancel_factors"]], ["add", "theorem", "div_subst", ["cancel_factors"]], ["add", "theorem", "mul_subst", ["cancel_factors"]], ["add", "theorem", "neg_subst", ["cancel_factors"]], ["add", "theorem", "sub_subst", ["cancel_factors"]]]}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "test/cancel_denoms.lean", "changes": []}]}, {"timestamp": 1592756580, "sha": "b7d056a1", "message": "feat(tactic/zify): move nat propositions to int (#3108)", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/zify.lean", "changes": [["add", "theorem", "coe_nat_ne_coe_nat_iff", ["int"]]]}, {"oldPath": null, "newPath": "test/zify.lean", "changes": []}]}, {"timestamp": 1592751859, "sha": "d097161b", "message": "fix(tactic/set): use provided type for new variable (#3126)\ncloses #3111", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "test/set.lean", "changes": [["add", "def", "S", []], ["add", "def", "T", []], ["add", "def", "p", []], ["add", "def", "u", []], ["add", "def", "v", []]]}]}, {"timestamp": 1592680912, "sha": "8729fe21", "message": "feat(tactic/simps): option `trace.simps.verbose` prints generated lemmas (#3121)", "changes": [{"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}]}, {"timestamp": 1592665842, "sha": "e8ff6ff6", "message": "feat(*): random lemmas about sets and filters (#3118)\nThis is the first in a series of PR that will culminate in a proof of Heine's theorem (a continuous function from a compact separated uniform space to any uniform space is uniformly continuous). I'm slicing a 600 lines files into PRs. This first PR is only about sets, filters and a bit of topology. Uniform spaces stuff will come later.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "def", "diagonal", ["set"]], ["add", "theorem", "inter_compl_nonempty_iff", ["set"]], ["add", "theorem", "preimage_coe_coe_diagonal", ["set"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "comap_has_basis", ["filter"]], ["add", "theorem", "prod'", ["filter", "has_basis"]], ["add", "theorem", "sInter_sets", ["filter", "has_basis"]], ["add", "theorem", "has_basis_self", ["filter"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "inf_principal_ne_bot_iff", ["filter"]], ["add", "theorem", "subtype_coe_map_comap", ["filter"]], ["add", "theorem", "prod_map", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "prod_map", ["continuous_on"]], ["add", "theorem", "prod_map", ["continuous_within_at"]]]}]}, {"timestamp": 1592652121, "sha": "cd9e8b53", "message": "fix(tactic/group): bugfix for inverse of 1 (#3117)\nThe new group tactic made goals like\n```lean\nexample {G : Type*} [group G] (x : G) (h : x = 1) : x = 1 :=\nbegin\n group, -- x * 1 ^(-1) = 1\n exact h,\nend\n```\nworse, presumably from trying to move the rhs to the lhs we end up with `x * 1^(-1) = 1`, we add a couple more lemmas to try to fix this.", "changes": [{"oldPath": "src/tactic/group.lean", "newPath": "src/tactic/group.lean", "changes": []}, {"oldPath": "test/group.lean", "newPath": "test/group.lean", "changes": []}]}, {"timestamp": 1592574895, "sha": "103743e3", "message": "doc(tactic/core,uniform_space/basic): minor doc fixes (#3115)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1592540325, "sha": "8e44b9f1", "message": "feat(algebra/big_operators): `prod_apply_dite` and `prod_dite` (#3110)\nGeneralize `prod_apply_ite` and `prod_ite` to dependent if-then-else. Since the proofs require `prod_attach`, it needed to move to an earlier line.\nZulip discussion: https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/prod_ite_eq", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_apply_dite", ["finset"]], ["add", "theorem", "prod_dite", ["finset"]]]}]}, {"timestamp": 1592526810, "sha": "56a580d2", "message": "chore(scripts): update nolints.txt (#3112)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1592519173, "sha": "ed44541a", "message": "chore(*): regularize naming using injective (#3071)\nThis begins some of the naming regularization discussed at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/naming.20of.20injectivity.20lemmas\nSome general rules:\n1. Lemmas should have `injective` in the name iff they have `injective` in the conclusion\n2. `X_injective` is preferable to `injective_X`.\n3. Unidirectional `inj` lemmas should be dropped in favour of bidirectional ones.\nMostly, this PR tried to fix the names of lemmas that conclude `injective` (also `surjective` and `bijective`, but they seemed to be much better already).\nA lot of the changes are from `injective_X` to `X_injective` style", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["del", "theorem", "of_inj", ["ring", "direct_limit"]], ["add", "theorem", "of_injective", ["ring", "direct_limit"]]]}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["del", "theorem", "mk_inj", ["direct_sum"]], ["add", "theorem", "mk_injective", ["direct_sum"]], ["del", "theorem", "of_inj", ["direct_sum"]], ["add", "theorem", "of_injective", ["direct_sum"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "fpow_injective", []], ["del", "theorem", "injective_fpow", []]]}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["del", "theorem", "of_add_inj", []], ["add", "theorem", "of_add_injective", []], ["del", "theorem", "of_mul_inj", []], ["add", "theorem", "of_mul_injective", []], ["del", "theorem", "to_add_inj", []], ["add", "theorem", "to_add_injective", []], ["del", "theorem", "to_mul_inj", []], ["add", "theorem", "to_mul_injective", []]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "coe_injective", ["submodule"]], ["mod", "theorem", "coe_set_eq", ["submodule"]], ["del", "theorem", "ext'", ["submodule"]], ["mod", "theorem", "ext", ["submodule"]]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["del", "theorem", "injective_inl", ["prod"]], ["del", "theorem", "injective_inr", ["prod"]], ["add", "theorem", "inl_injective", ["prod"]], ["add", "theorem", "inr_injective", ["prod"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "theorem", "coe_add_monoid_hom_inj", ["ring_hom"]], ["add", "theorem", "coe_add_monoid_hom_injective", ["ring_hom"]], ["del", "theorem", "coe_monoid_hom_inj", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom_injective", ["ring_hom"]]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["del", "theorem", "change_origin_summable_aux_j_inj", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_summable_aux_j_injective", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/point_reflection.lean", "newPath": "src/analysis/normed_space/point_reflection.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["del", "theorem", "injectivity", ["category_theory", "functor"]], ["add", "theorem", "map_injective", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["del", "theorem", "embedding_inj", ["composition"]], ["add", "theorem", "embedding_injective", ["composition"]]]}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": [["add", "theorem", "const_inj", ["nat", "partrec", "code"]], ["add", "theorem", "curry_inj", ["nat", "partrec", "code"]], ["del", "theorem", "injective_const", ["nat", "partrec", "code"]], ["del", "theorem", "injective_curry", ["nat", "partrec", "code"]], ["mod", "theorem", "smn", ["nat", "partrec", "code"]]]}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["del", "theorem", "mk_inj", ["dfinsupp"]], ["add", "theorem", "mk_injective", ["dfinsupp"]]]}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["del", "theorem", "point_reflection_fixed_iff_of_bit0_inj", ["equiv"]], ["add", "theorem", "point_reflection_fixed_iff_of_bit0_injective", ["equiv"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_le_injective", ["fin"]], ["add", "theorem", "cast_succ_injective", ["fin"]], ["del", "theorem", "injective_cast_le", ["fin"]], ["del", "theorem", "injective_cast_succ", ["fin"]], ["del", "theorem", "injective_succ", ["fin"]], ["del", "theorem", "injective_val", ["fin"]], ["add", "theorem", "succ_injective", ["fin"]], ["add", "theorem", "val_injective", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["del", "theorem", "injective_pi_cons", ["finset"]], ["add", "theorem", "pi_cons_injective", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["del", "theorem", "injective_map_domain", ["finsupp"]], ["del", "theorem", "injective_single", ["finsupp"]], ["add", "theorem", "map_domain_injective", ["finsupp"]], ["add", "theorem", "single_injective", ["finsupp"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "cons_inj'", ["list"]], ["mod", "theorem", "cons_inj", ["list"]], ["add", "theorem", "cons_injective", ["list"]], ["del", "theorem", "injective_length", ["list"]], ["del", "theorem", "injective_length_iff", ["list"]], ["del", "theorem", "injective_map_iff", ["list"]], ["add", "theorem", "length_injective", ["list"]], ["add", "theorem", "length_injective_iff", ["list"]], ["add", "theorem", "map_injective_iff", ["list"]], ["del", "theorem", "mem_map_of_inj", ["list"]], ["add", "theorem", "mem_map_of_injective", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["del", "theorem", "injective_map", ["multiset"]], ["del", "theorem", "injective_pi_cons", ["multiset"]], ["add", "theorem", "map_injective", ["multiset"]], ["del", "theorem", "mem_map_of_inj", ["multiset"]], ["add", "theorem", "mem_map_of_injective", ["multiset"]], ["add", "theorem", "pi_cons_injective", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["del", "theorem", "injective_rename", ["mv_polynomial"]], ["add", "theorem", "rename_injective", ["mv_polynomial"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["del", "theorem", "op_inj", ["opposite"]], ["add", "theorem", "op_injective", ["opposite"]], ["del", "theorem", "unop_inj", ["opposite"]], ["add", "theorem", "unop_injective", ["opposite"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["del", "theorem", "injective_map", ["option"]], ["del", "theorem", "injective_some", ["option"]], ["add", "theorem", "map_injective", ["option"]], ["add", "theorem", "some_injective", ["option"]]]}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": [["del", "theorem", "coe_nat_inj", ["prime_multiset"]], ["add", "theorem", "coe_nat_injective", ["prime_multiset"]], ["del", "theorem", "coe_pnat_inj", ["prime_multiset"]], ["add", "theorem", "coe_pnat_injective", ["prime_multiset"]]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": [["add", "theorem", "cantor_function_injective", ["cardinal"]], ["del", "theorem", "injective_cantor_function", ["cardinal"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "injective_preimage", ["function", "surjective"]], ["add", "theorem", "preimage_injective", ["function", "surjective"]], ["add", "theorem", "image_injective", ["set"]], ["del", "theorem", "injective_image", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "bijective_sigma_to_Union", ["set"]], ["del", "theorem", "injective_sigma_to_Union", ["set"]], ["add", "theorem", "sigma_to_Union_bijective", ["set"]], ["add", "theorem", "sigma_to_Union_injective", ["set"]], ["add", "theorem", "sigma_to_Union_surjective", ["set"]], ["del", "theorem", "surjective_sigma_to_Union", ["set"]]]}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": [["del", "theorem", "injective_ker_lift", ["setoid"]], ["add", "theorem", "ker_lift_injective", ["setoid"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["del", "theorem", "injective_sigma_map", []], ["del", "theorem", "injective_sigma_mk", []], ["add", "theorem", "sigma_map_injective", []], ["add", "theorem", "sigma_mk_injective", []]]}, {"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["del", "theorem", "inj_iff_trivial_ker", ["is_group_hom"]], ["del", "theorem", "inj_of_trivial_ker", ["is_group_hom"]], ["add", "theorem", "injective_iff_trivial_ker", ["is_group_hom"]], ["add", "theorem", "injective_of_trivial_ker", ["is_group_hom"]], ["del", "theorem", "trivial_ker_of_inj", ["is_group_hom"]], ["add", "theorem", "trivial_ker_of_injective", ["is_group_hom"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["del", "theorem", "injective_ker_lift", ["con"]], ["add", "theorem", "ker_lift_injective", ["con"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["del", "theorem", "conj_inj", []], ["add", "theorem", "conj_injective", []]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["del", "theorem", "injective_ker_lift", ["quotient_group"]], ["add", "theorem", "ker_lift_injective", ["quotient_group"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["del", "theorem", "mk_vector_prod_eq_one_inj", ["sylow"]], ["add", "theorem", "mk_vector_prod_eq_one_injective", ["sylow"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "dim_eq_injective", []], ["add", "theorem", "dim_eq_of_injective", []], ["add", "theorem", "dim_eq_of_surjective", []], ["del", "theorem", "dim_eq_surjective", []], ["del", "theorem", "dim_le_injective", []], ["add", "theorem", "dim_le_of_injective", []], ["add", "theorem", "dim_le_of_surjective", []], ["del", "theorem", "dim_le_surjective", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["del", "theorem", "inj", ["function", "embedding"]], ["add", "theorem", "injective", ["function", "embedding"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["del", "theorem", "compl_inj", []], ["add", "theorem", "compl_injective", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "pure_inj", ["filter"]], ["add", "theorem", "pure_injective", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["add", "theorem", "coe_inj", ["filter", "filter_product"]], ["del", "theorem", "coe_injective", ["filter", "filter_product"]], ["del", "theorem", "of_inj", ["filter", "filter_product"]], ["add", "theorem", "of_injective", ["filter", "filter_product"]]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "theorem", "coe_fn_inj", ["order_embedding"]], ["del", "theorem", "coe_fn_injective", ["order_embedding"]], ["del", "theorem", "inj", ["order_embedding"]], ["add", "theorem", "injective", ["order_embedding"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["del", "theorem", "coe_add_monoid_hom_inj", ["alg_hom"]], ["add", "theorem", "coe_add_monoid_hom_injective", ["alg_hom"]], ["del", "theorem", "coe_monoid_hom_inj", ["alg_hom"]], ["add", "theorem", "coe_monoid_hom_injective", ["alg_hom"]], ["del", "theorem", "coe_ring_hom_inj", ["alg_hom"]], ["add", "theorem", "coe_ring_hom_injective", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["del", "theorem", "bijective_quotient_inf_to_pi_quotient", ["ideal"]], ["add", "theorem", "quotient_inf_to_pi_quotient_bijective", ["ideal"]], ["del", "theorem", "inj_iff_ker_eq_bot", ["ring_hom"]], ["add", "theorem", "injective_iff_ker_eq_bot", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["del", "theorem", "mk_range_eq_of_inj", ["cardinal"]], ["add", "theorem", "mk_range_eq_of_injective", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "injective_typein", ["ordinal"]], ["add", "theorem", "typein_injective", ["ordinal"]]]}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": [["del", "theorem", "injective_min", ["function", "embedding"]], ["add", "theorem", "min_injective", ["function", "embedding"]]]}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["add", "theorem", "coe_injective", ["open_subgroup"]], ["del", "theorem", "ext'", ["open_subgroup"]], ["mod", "theorem", "ext", ["open_subgroup"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["del", "theorem", "injective_separated_pure_cauchy", ["Cauchy"]], ["add", "theorem", "separated_pure_cauchy_injective", ["Cauchy"]]]}]}, {"timestamp": 1592514496, "sha": "e060c93d", "message": "feat(category_theory/discrete): build equivalence from equiv (#3099)\n* renames all the construction building functors/transformations out of discrete categories as `discrete.functor`, `discrete.nat_trans`, `discrete.nat_iso`, rather than names using `of_function`.\n* adds `def discrete.equivalence {I J : Type u₁} (e : I ≃ J) : discrete I ≌ discrete J`,\n* removes some redundant definitions\n* breaks some long lines, \n* and adds doc-strings.", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "def", "equivalence", ["category_theory", "discrete"]], ["add", "def", "functor", ["category_theory", "discrete"]], ["add", "theorem", "functor_map", ["category_theory", "discrete"]], ["add", "theorem", "functor_obj", ["category_theory", "discrete"]], ["del", "def", "lift", ["category_theory", "discrete"]], ["add", "def", "nat_iso", ["category_theory", "discrete"]], ["add", "def", "nat_trans", ["category_theory", "discrete"]], ["add", "theorem", "nat_trans_app", ["category_theory", "discrete"]], ["del", "def", "of_function", ["category_theory", "functor"]], ["del", "theorem", "of_function_map", ["category_theory", "functor"]], ["del", "theorem", "of_function_obj", ["category_theory", "functor"]], ["del", "def", "of_isos", ["category_theory", "nat_iso"]], ["del", "def", "of_function", ["category_theory", "nat_trans"]], ["del", "theorem", "of_function_app", ["category_theory", "nat_trans"]], ["del", "def", "of_homs", ["category_theory", "nat_trans"]], ["del", "theorem", "of_homs_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["mod", "def", "ι", ["category_theory", "limits", "biproduct"]], ["mod", "def", "π", ["category_theory", "limits", "biproduct"]], ["mod", "def", "biproduct", ["category_theory", "limits"]], ["mod", "def", "biproduct_iso", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["mod", "def", "cofan", ["category_theory", "limits"]], ["mod", "def", "fan", ["category_theory", "limits"]], ["mod", "def", "lift", ["category_theory", "limits", "pi"]], ["mod", "def", "π", ["category_theory", "limits", "pi"]], ["mod", "def", "pi_obj", ["category_theory", "limits"]], ["mod", "def", "desc", ["category_theory", "limits", "sigma"]], ["mod", "def", "ι", ["category_theory", "limits", "sigma"]], ["mod", "def", "sigma_obj", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}]}, {"timestamp": 1592514494, "sha": "73caeaa5", "message": "perf(tactic/linarith): implement redundancy test to reduce number of comparisons (#3079)\nThis implements a redundancy check in `linarith` which can drastically reduce the size of the sets of comparisons that the tactic needs to deal with.\n`linarith` iteratively transforms sets of inequalities to equisatisfiable sets by eliminating a single variable. If there are `n` comparisons in the set, we expect `O(n^2)` comparisons after one elimination step. Many of these comparisons are redundant, i.e. removing them from the set does not change its satisfiability.\nDeciding redundancy is expensive, but there are cheap approximations that are very useful in practice. This PR tests comparisons for non-minimal history (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.51.493&rep=rep1&type=pdf p.13, theorem 7). Non-minimal history implies redundancy.", "changes": [{"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["mod", "theorem", "sin_le_sin_of_le_of_le_pi_div_two", ["real"]], ["mod", "theorem", "sin_lt_sin_of_le_of_le_pi_div_two", ["real"]]]}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": [["add", "def", "vars", ["linarith", "comp"]], ["add", "structure", "comp", ["linarith"]], ["add", "def", "to_string", ["linarith", "comp_source"]], ["add", "inductive", "comp_source", ["linarith"]], ["add", "def", "vars", ["linarith", "linexp"]]]}]}, {"timestamp": 1592512644, "sha": "21bf8737", "message": "refactor(category_theory/abelian): use has_finite_products (#2917)\nThis doesn't go nearly as far as I wanted.\nReally I'd like to factor out `additive`, which is a `preadditive` category with all finite biproducts, and then layer `abelian` on top of that (with (co)kernels and every epi/mono normal).\nI can't do that immediately, because:\n1. we don't provide the instances from `has_finite_biproducts` to `has_finite_(co)products`\n2. we don't define the preadditive version of finite biproducts (we only did the binary ones)\n3. hence we don't show that in a preadditive category finite products give rise to finite biproducts\n@TwoFX, @b-mehta, if either of you are interested in doing any of these, that would be great. I'll hopefully get to them eventually.", "changes": [{"oldPath": "src/category_theory/abelian/basic.lean", "newPath": "src/category_theory/abelian/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "def", "has_initial", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "has_initial_of_has_zero_object", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "has_terminal", ["category_theory", "limits", "has_zero_object"]], ["del", "def", "has_terminal_of_has_zero_object", ["category_theory", "limits", "has_zero_object"]]]}]}, {"timestamp": 1592487955, "sha": "53af7145", "message": "chore(*): update to lean 3.16.3 (#3107)\nThe changes to mathlib are from https://github.com/leanprover-community/lean/pull/321 which removed some redundant lemmas:\n* `int.of_nat_inj` -> `int.of_nat.inj`\n* `int.neg_succ_of_nat_inj` -> `int.neg_succ_of_nat.inj`\n* `nat.succ_inj` -> `nat.succ.inj`", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1592480395, "sha": "24792be6", "message": "chore(data/finset): minor review (#3105)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "nonempty_iff_nonempty", ["equiv"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "coe_erase", ["finset"]], ["mod", "theorem", "coe_filter", ["finset"]], ["mod", "theorem", "coe_image", ["finset"]], ["mod", "theorem", "coe_insert", ["finset"]], ["mod", "theorem", "coe_map", ["finset"]], ["mod", "theorem", "coe_nonempty", ["finset"]], ["mod", "theorem", "coe_sdiff", ["finset"]], ["mod", "theorem", "coe_ssubset", ["finset"]], ["mod", "theorem", "coe_subset", ["finset"]], ["mod", "theorem", "comp_inf_eq_inf_comp", ["finset"]], ["del", "theorem", "lt_inf", ["finset"]], ["add", "theorem", "lt_inf_iff", ["finset"]], ["mod", "theorem", "ssubset_iff", ["finset"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "ndinter_subset_left", ["multiset"]], ["add", "theorem", "subset_ndunion_right", ["multiset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "ssubset_iff_insert", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bot_eq_empty", ["set"]], ["add", "theorem", "inf_eq_inter", ["set"]], ["add", "theorem", "le_eq_subset", ["set"]], ["add", "theorem", "lt_eq_ssubset", ["set"]], ["add", "theorem", "sup_eq_union", ["set"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "def", "decidable_eq", ["function", "injective"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "order_dual", ["monotone"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "map_inf", ["monotone"]], ["add", "theorem", "map_sup", ["monotone"]]]}]}, {"timestamp": 1592474078, "sha": "eb5b7fb7", "message": "fix(tactic/linarith): don't fail trying to preprocess irrelevant hypotheses (#3104)", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1592442701, "sha": "b91909e7", "message": "chore(category_theory/closed/cartesian): style (#3098)\nJust breaking long lines, and using braces in a multi-goal proof, for a recently added file.\n (#2894)", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["mod", "theorem", "ev_coev", ["category_theory"]]]}]}, {"timestamp": 1592423831, "sha": "b5baf555", "message": "feat(algebra/linear_ordered_comm_group_with_zero) define linear_ordered_comm_group_with_zero (#3072)", "changes": [{"oldPath": null, "newPath": "src/algebra/linear_ordered_comm_group_with_zero.lean", "changes": [["add", "theorem", "div_le_div'", []], ["add", "theorem", "inv_le_inv''", []], ["add", "theorem", "inv_lt_inv''", []], ["add", "theorem", "le_mul_inv_of_mul_le", []], ["add", "theorem", "le_of_le_mul_right", []], ["add", "theorem", "le_zero_iff", []], ["add", "theorem", "mul_inv_le_of_le_mul", []], ["add", "theorem", "mul_inv_lt_of_lt_mul'", []], ["add", "theorem", "mul_lt_mul''''", []], ["add", "theorem", "mul_lt_right'", []], ["add", "theorem", "ne_zero_of_lt", []], ["add", "theorem", "not_lt_zero'", []], ["add", "theorem", "zero_le'", []], ["add", "theorem", "zero_le_one'", []], ["add", "theorem", "zero_lt_iff", []], ["add", "theorem", "zero_lt_one'", []], ["add", "theorem", "zero_lt_unit", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "div_le_div_iff'", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1592421021, "sha": "48c4f400", "message": "refactor(measure_theory): make `volume` a bundled measure (#3075)\nThis way we can `apply` and `rw` lemmas about `measure`s without\nintroducing a `volume`-specific version.", "changes": [{"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["add", "theorem", "pairwise_on", ["pairwise"]], ["add", "theorem", "on_injective", ["set", "pairwise_on"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "integral_zero", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "ae_all_iff", ["measure_theory"]], ["add", "theorem", "ae_eq_refl", ["measure_theory"]], ["add", "theorem", "ae_eq_symm", ["measure_theory"]], ["add", "theorem", "ae_eq_trans", ["measure_theory"]], ["add", "theorem", "ae_iff", ["measure_theory"]], ["add", "theorem", "ae_of_all", ["measure_theory"]], ["del", "def", "all_ae", ["measure_theory"]], ["del", "theorem", "all_ae_all_iff", ["measure_theory"]], ["del", "theorem", "all_ae_and_iff", ["measure_theory"]], ["del", "theorem", "all_ae_congr", ["measure_theory"]], ["del", "theorem", "all_ae_eq_refl", ["measure_theory"]], ["del", "theorem", "all_ae_eq_symm", ["measure_theory"]], ["del", "theorem", "all_ae_eq_trans", ["measure_theory"]], ["del", "theorem", "all_ae_iff", ["measure_theory"]], ["del", "theorem", "all_ae_imp_distrib_left", ["measure_theory"]], ["del", "theorem", "all_ae_of_all", ["measure_theory"]], ["del", "theorem", "all_ae_or_distrib_left", ["measure_theory"]], ["del", "theorem", "all_ae_or_distrib_right", ["measure_theory"]], ["add", "theorem", "exists_nonempty_inter_of_measure_univ_lt_sum_measure", ["measure_theory"]], ["add", "theorem", "exists_nonempty_inter_of_measure_univ_lt_tsum_measure", ["measure_theory"]], ["del", "theorem", "exists_nonempty_inter_of_volume_univ_lt_sum_volume", ["measure_theory"]], ["del", "theorem", "exists_nonempty_inter_of_volume_univ_lt_tsum_volume", ["measure_theory"]], ["del", "def", "a_e", ["measure_theory", "measure"]], ["add", "def", "ae", ["measure_theory", "measure"]], ["del", "theorem", "mem_a_e_iff", ["measure_theory", "measure"]], ["add", "theorem", "measure_bUnion_finset", ["measure_theory"]], ["add", "theorem", "measure_zero_iff_ae_nmem", ["measure_theory"]], ["add", "theorem", "mem_ae_iff", ["measure_theory"]], ["add", "theorem", "sum_measure_le_measure_univ", ["measure_theory"]], ["del", "theorem", "sum_volume_le_volume_univ", ["measure_theory"]], ["add", "theorem", "tsum_measure_le_measure_univ", ["measure_theory"]], ["del", "theorem", "tsum_volume_le_volume_univ", ["measure_theory"]], ["del", "def", "volume", ["measure_theory"]], ["del", "theorem", "volume_Union", ["measure_theory"]], ["del", "theorem", "volume_Union_le", ["measure_theory"]], ["del", "theorem", "volume_Union_null", ["measure_theory"]], ["del", "theorem", "volume_bUnion", ["measure_theory"]], ["del", "theorem", "volume_bUnion_finset", ["measure_theory"]], ["del", "theorem", "volume_diff", ["measure_theory"]], ["del", "theorem", "volume_empty", ["measure_theory"]], ["del", "theorem", "volume_mono", ["measure_theory"]], ["del", "theorem", "volume_mono_null", ["measure_theory"]], ["del", "theorem", "volume_sUnion", ["measure_theory"]], ["del", "theorem", "volume_union", ["measure_theory"]], ["del", "theorem", "volume_union_le", ["measure_theory"]], ["del", "theorem", "volume_union_null", ["measure_theory"]], ["del", "theorem", "volume_zero_iff_all_ae_nmem", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1592395654, "sha": "0736c95c", "message": "chore(order/filter/basic): move some parts to new files (#3087)\nMove `at_top`/`at_bot`, `cofinite`, and `ultrafilter` to new files.", "changes": [{"oldPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/filter/at_top_bot.lean", "changes": [["add", "theorem", "Iio_mem_at_bot", ["filter"]], ["add", "theorem", "Ioi_mem_at_top", ["filter"]], ["add", "def", "at_bot", ["filter"]], ["add", "def", "at_top", ["filter"]], ["add", "theorem", "at_top_ne_bot", ["filter"]], ["add", "theorem", "exists_forall_of_at_top", ["filter", "eventually"]], ["add", "theorem", "eventually_at_top", ["filter"]], ["add", "theorem", "exists_le_of_tendsto_at_top", ["filter"]], ["add", "theorem", "exists_lt_of_tendsto_at_top", ["filter"]], ["add", "theorem", "extraction_of_eventually_at_top", ["filter"]], ["add", "theorem", "extraction_of_frequently_at_top'", ["filter"]], ["add", "theorem", "extraction_of_frequently_at_top", ["filter"]], ["add", "theorem", "forall_exists_of_at_top", ["filter", "frequently"]], ["add", "theorem", "frequently_at_top'", ["filter"]], ["add", "theorem", "frequently_at_top", ["filter"]], ["add", "theorem", "frequently_high_scores", ["filter"]], ["add", "theorem", "high_scores", ["filter"]], ["add", "theorem", "map_add_at_top_eq_nat", ["filter"]], ["add", "theorem", "map_at_top_eq", ["filter"]], ["add", "theorem", "map_at_top_eq_of_gc", ["filter"]], ["add", "theorem", "map_at_top_inf_ne_bot_iff", ["filter"]], ["add", "theorem", "map_div_at_top_eq_nat", ["filter"]], ["add", "theorem", "map_sub_at_top_eq_nat", ["filter"]], ["add", "theorem", "mem_at_bot", ["filter"]], ["add", "theorem", "mem_at_top", ["filter"]], ["add", "theorem", "mem_at_top_sets", ["filter"]], ["add", "theorem", "tendsto_at_top_finset", ["filter", "monotone"]], ["add", "theorem", "prod_at_top_at_top_eq", ["filter"]], ["add", "theorem", "prod_map_at_top_eq", ["filter"]], ["add", "theorem", "strict_mono_subseq_of_id_le", ["filter"]], ["add", "theorem", "strict_mono_subseq_of_tendsto_at_top", ["filter"]], ["add", "theorem", "strict_mono_tendsto_at_top", ["filter"]], ["add", "theorem", "tendsto_add_at_top_iff_nat", ["filter"]], ["add", "theorem", "tendsto_add_at_top_nat", ["filter"]], ["add", "theorem", "tendsto_at_top'", ["filter"]], ["add", "theorem", "tendsto_at_top", ["filter"]], ["add", "theorem", "tendsto_at_top_add_const_left", ["filter"]], ["add", "theorem", "tendsto_at_top_add_const_right", ["filter"]], ["add", "theorem", "tendsto_at_top_add_left_of_le'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_left_of_le", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_left'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_left", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_right'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_right", ["filter"]], ["add", "theorem", "tendsto_at_top_add_right_of_le'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_right_of_le", ["filter"]], ["add", "theorem", "tendsto_at_top_at_bot", ["filter"]], ["add", "theorem", "tendsto_at_top_at_top", ["filter"]], ["add", "theorem", "tendsto_at_top_at_top_of_monotone", ["filter"]], ["add", "theorem", "tendsto_at_top_embedding", ["filter"]], ["add", "theorem", "tendsto_at_top_mono'", ["filter"]], ["add", "theorem", "tendsto_at_top_mono", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_left'", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_left", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_right'", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_right", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_const_left", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_const_right", ["filter"]], ["add", "theorem", "tendsto_at_top_principal", ["filter"]], ["add", "theorem", "tendsto_finset_image_at_top_at_top", ["filter"]], ["add", "theorem", "tendsto_finset_range", ["filter"]], ["add", "theorem", "tendsto_sub_at_top_nat", ["filter"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "Iio_mem_at_bot", ["filter"]], ["del", "theorem", "Ioi_mem_at_top", ["filter"]], ["del", "def", "at_bot", ["filter"]], ["del", "def", "at_top", ["filter"]], ["del", "theorem", "at_top_ne_bot", ["filter"]], ["del", "def", "cofinite", ["filter"]], ["del", "theorem", "cofinite_ne_bot", ["filter"]], ["del", "theorem", "compl_mem_hyperfilter_of_finite", ["filter"]], ["del", "theorem", "exists_forall_of_at_top", ["filter", "eventually"]], ["del", "theorem", "eventually_at_top", ["filter"]], ["del", "theorem", "exists_le_of_tendsto_at_top", ["filter"]], ["del", "theorem", "exists_lt_of_tendsto_at_top", ["filter"]], ["del", "theorem", "exists_ultrafilter", ["filter"]], ["del", "theorem", "exists_ultrafilter_iff", ["filter"]], ["del", "theorem", "extraction_of_eventually_at_top", ["filter"]], ["del", "theorem", "extraction_of_frequently_at_top'", ["filter"]], ["del", "theorem", "extraction_of_frequently_at_top", ["filter"]], ["del", "theorem", "forall_exists_of_at_top", ["filter", "frequently"]], ["del", "theorem", "frequently_at_top'", ["filter"]], ["del", "theorem", "frequently_at_top", ["filter"]], ["del", "theorem", "frequently_cofinite_iff_infinite", ["filter"]], ["del", "theorem", "frequently_high_scores", ["filter"]], ["del", "theorem", "high_scores", ["filter"]], ["del", "theorem", "hyperfilter_le_cofinite", ["filter"]], ["del", "def", "is_ultrafilter", ["filter"]], ["del", "theorem", "is_ultrafilter_hyperfilter", ["filter"]], ["del", "theorem", "le_of_ultrafilter", ["filter"]], ["del", "theorem", "map_add_at_top_eq_nat", ["filter"]], ["del", "theorem", "map_at_top_eq", ["filter"]], ["del", "theorem", "map_at_top_eq_of_gc", ["filter"]], ["del", "theorem", "map_at_top_inf_ne_bot_iff", ["filter"]], ["del", "theorem", "map_div_at_top_eq_nat", ["filter"]], ["del", "theorem", "map_sub_at_top_eq_nat", ["filter"]], ["del", "theorem", "mem_at_bot", ["filter"]], ["del", "theorem", "mem_at_top", ["filter"]], ["del", "theorem", "mem_at_top_sets", ["filter"]], ["del", "theorem", "mem_cofinite", ["filter"]], ["del", "theorem", "mem_hyperfilter_of_finite_compl", ["filter"]], ["del", "theorem", "mem_of_finite_Union_ultrafilter", ["filter"]], ["del", "theorem", "mem_of_finite_sUnion_ultrafilter", ["filter"]], ["del", "theorem", "mem_or_compl_mem_of_ultrafilter", ["filter"]], ["del", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["del", "theorem", "tendsto_at_top_finset", ["filter", "monotone"]], ["del", "theorem", "cofinite_eq_at_top", ["filter", "nat"]], ["del", "theorem", "nmem_hyperfilter_of_finite", ["filter"]], ["del", "theorem", "prod_at_top_at_top_eq", ["filter"]], ["del", "theorem", "prod_map_at_top_eq", ["filter"]], ["del", "theorem", "infinite_iff_frequently_cofinite", ["filter", "set"]], ["del", "theorem", "strict_mono_subseq_of_id_le", ["filter"]], ["del", "theorem", "strict_mono_subseq_of_tendsto_at_top", ["filter"]], ["del", "theorem", "strict_mono_tendsto_at_top", ["filter"]], ["del", "theorem", "sup_of_ultrafilters", ["filter"]], ["del", "theorem", "tendsto_add_at_top_iff_nat", ["filter"]], ["del", "theorem", "tendsto_add_at_top_nat", ["filter"]], ["del", "theorem", "tendsto_at_top'", ["filter"]], ["del", "theorem", "tendsto_at_top", ["filter"]], ["del", "theorem", "tendsto_at_top_add_const_left", ["filter"]], ["del", "theorem", "tendsto_at_top_add_const_right", ["filter"]], ["del", "theorem", "tendsto_at_top_add_left_of_le'", ["filter"]], ["del", "theorem", "tendsto_at_top_add_left_of_le", ["filter"]], ["del", "theorem", "tendsto_at_top_add_nonneg_left'", ["filter"]], ["del", "theorem", "tendsto_at_top_add_nonneg_left", ["filter"]], ["del", "theorem", "tendsto_at_top_add_nonneg_right'", ["filter"]], ["del", "theorem", "tendsto_at_top_add_nonneg_right", ["filter"]], ["del", "theorem", "tendsto_at_top_add_right_of_le'", ["filter"]], ["del", "theorem", "tendsto_at_top_add_right_of_le", ["filter"]], ["del", "theorem", "tendsto_at_top_at_bot", ["filter"]], ["del", "theorem", "tendsto_at_top_at_top", ["filter"]], ["del", "theorem", "tendsto_at_top_at_top_of_monotone", ["filter"]], ["del", "theorem", "tendsto_at_top_embedding", ["filter"]], ["del", "theorem", "tendsto_at_top_mono'", ["filter"]], ["del", "theorem", "tendsto_at_top_mono", ["filter"]], ["del", "theorem", "tendsto_at_top_of_add_bdd_above_left'", ["filter"]], ["del", "theorem", "tendsto_at_top_of_add_bdd_above_left", ["filter"]], ["del", "theorem", "tendsto_at_top_of_add_bdd_above_right'", ["filter"]], ["del", "theorem", "tendsto_at_top_of_add_bdd_above_right", ["filter"]], ["del", "theorem", "tendsto_at_top_of_add_const_left", ["filter"]], ["del", "theorem", "tendsto_at_top_of_add_const_right", ["filter"]], ["del", "theorem", "tendsto_at_top_principal", ["filter"]], ["del", "theorem", "tendsto_finset_image_at_top_at_top", ["filter"]], ["del", "theorem", "tendsto_finset_range", ["filter"]], ["del", "theorem", "tendsto_iff_ultrafilter", ["filter"]], ["del", "theorem", "tendsto_sub_at_top_nat", ["filter"]], ["del", "def", "bind", ["filter", "ultrafilter"]], ["del", "theorem", "eq_iff_val_le_val", ["filter", "ultrafilter"]], ["del", "def", "map", ["filter", "ultrafilter"]], ["del", "def", "pure", ["filter", "ultrafilter"]], ["del", "def", "ultrafilter", ["filter"]], ["del", "theorem", "ultrafilter_bind", ["filter"]], ["del", "theorem", "ultrafilter_iff_compl_mem_iff_not_mem", ["filter"]], ["del", "theorem", "ultrafilter_map", ["filter"]], ["del", "theorem", "ultrafilter_of_le", ["filter"]], ["del", "theorem", "ultrafilter_of_spec", ["filter"]], ["del", "theorem", "ultrafilter_of_ultrafilter", ["filter"]], ["del", "theorem", "ultrafilter_pure", ["filter"]], ["del", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["del", "theorem", "ultrafilter_unique", ["filter"]]]}, {"oldPath": null, "newPath": "src/order/filter/cofinite.lean", "changes": [["add", "def", "cofinite", ["filter"]], ["add", "theorem", "cofinite_ne_bot", ["filter"]], ["add", "theorem", "frequently_cofinite_iff_infinite", ["filter"]], ["add", "theorem", "mem_cofinite", ["filter"]], ["add", "theorem", "cofinite_eq_at_top", ["nat"]], ["add", "theorem", "infinite_iff_frequently_cofinite", ["set"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/filter/ultrafilter.lean", "changes": [["add", "theorem", "compl_mem_hyperfilter_of_finite", ["filter"]], ["add", "theorem", "exists_ultrafilter", ["filter"]], ["add", "theorem", "exists_ultrafilter_iff", ["filter"]], ["add", "theorem", "hyperfilter_le_cofinite", ["filter"]], ["add", "def", "is_ultrafilter", ["filter"]], ["add", "theorem", "is_ultrafilter_hyperfilter", ["filter"]], ["add", "theorem", "le_of_ultrafilter", ["filter"]], ["add", "theorem", "mem_hyperfilter_of_finite_compl", ["filter"]], ["add", "theorem", "mem_of_finite_Union_ultrafilter", ["filter"]], ["add", "theorem", "mem_of_finite_sUnion_ultrafilter", ["filter"]], ["add", "theorem", "mem_or_compl_mem_of_ultrafilter", ["filter"]], ["add", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["add", "theorem", "nmem_hyperfilter_of_finite", ["filter"]], ["add", "theorem", "sup_of_ultrafilters", ["filter"]], ["add", "theorem", "tendsto_iff_ultrafilter", ["filter"]], ["add", "def", "bind", ["filter", "ultrafilter"]], ["add", "theorem", "eq_iff_val_le_val", ["filter", "ultrafilter"]], ["add", "def", "map", ["filter", "ultrafilter"]], ["add", "def", "pure", ["filter", "ultrafilter"]], ["add", "def", "ultrafilter", ["filter"]], ["add", "theorem", "ultrafilter_bind", ["filter"]], ["add", "theorem", "ultrafilter_iff_compl_mem_iff_not_mem", ["filter"]], ["add", "theorem", "ultrafilter_map", ["filter"]], ["add", "theorem", "ultrafilter_of_le", ["filter"]], ["add", "theorem", "ultrafilter_of_spec", ["filter"]], ["add", "theorem", "ultrafilter_of_ultrafilter", ["filter"]], ["add", "theorem", "ultrafilter_pure", ["filter"]], ["add", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["add", "theorem", "ultrafilter_unique", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1592392014, "sha": "077cd7c0", "message": "feat(algebra/category/Algebra): basic setup for category of bundled R-algebras (#3047)\nJust boilerplate. If I don't run out of enthusiasm I'll do tensor product of R-algebras soon. (#3050)", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Algebra/basic.lean", "changes": [["add", "theorem", "coe_comp", ["Algebra"]], ["add", "theorem", "id_apply", ["Algebra"]], ["add", "def", "of", ["Algebra"]], ["add", "theorem", "of_apply", ["Algebra"]], ["add", "def", "of_self_iso", ["Algebra"]], ["add", "structure", "Algebra", []], ["add", "def", "to_Algebra_iso", ["alg_equiv"]], ["add", "def", "alg_equiv_iso_Algebra_iso", []], ["add", "def", "to_alg_equiv", ["category_theory", "iso"]]]}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["del", "def", "linear_equiv_iso_Group_iso", []], ["add", "def", "linear_equiv_iso_Module_iso", []]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_fun_injective", ["alg_equiv"]], ["add", "theorem", "coe_ring_equiv_injective", ["alg_equiv"]], ["add", "theorem", "ext", ["alg_equiv"]]]}]}, {"timestamp": 1592387870, "sha": "54441b5d", "message": "feat(algebra/group_action_hom): define equivariant maps (#2866)", "changes": [{"oldPath": null, "newPath": "src/algebra/group_action_hom.lean", "changes": [["add", "theorem", "coe_fn_coe'", ["distrib_mul_action_hom"]], ["add", "theorem", "coe_fn_coe", ["distrib_mul_action_hom"]], ["add", "def", "comp", ["distrib_mul_action_hom"]], ["add", "theorem", "comp_apply", ["distrib_mul_action_hom"]], ["add", "theorem", "comp_id", ["distrib_mul_action_hom"]], ["add", "theorem", "ext", ["distrib_mul_action_hom"]], ["add", "theorem", "ext_iff", ["distrib_mul_action_hom"]], ["add", "theorem", "id_apply", ["distrib_mul_action_hom"]], ["add", "theorem", "id_comp", ["distrib_mul_action_hom"]], ["add", "theorem", "map_add", ["distrib_mul_action_hom"]], ["add", "theorem", "map_neg", ["distrib_mul_action_hom"]], ["add", "theorem", "map_smul", ["distrib_mul_action_hom"]], ["add", "theorem", "map_sub", ["distrib_mul_action_hom"]], ["add", "theorem", "map_zero", ["distrib_mul_action_hom"]], ["add", "structure", "distrib_mul_action_hom", []], ["add", "def", "comp", ["mul_action_hom"]], ["add", "theorem", "comp_apply", ["mul_action_hom"]], ["add", "theorem", "comp_id", ["mul_action_hom"]], ["add", "theorem", "ext", ["mul_action_hom"]], ["add", "theorem", "ext_iff", ["mul_action_hom"]], ["add", "theorem", "id_apply", ["mul_action_hom"]], ["add", "theorem", "id_comp", ["mul_action_hom"]], ["add", "theorem", "map_smul", ["mul_action_hom"]], ["add", "def", "to_quotient", ["mul_action_hom"]], ["add", "theorem", "to_quotient_apply", ["mul_action_hom"]], ["add", "structure", "mul_action_hom", []], ["add", "theorem", "coe_fn_coe'", ["mul_semiring_action_hom"]], ["add", "theorem", "coe_fn_coe", ["mul_semiring_action_hom"]], ["add", "def", "comp", ["mul_semiring_action_hom"]], ["add", "theorem", "comp_apply", ["mul_semiring_action_hom"]], ["add", "theorem", "comp_id", ["mul_semiring_action_hom"]], ["add", "theorem", "ext", ["mul_semiring_action_hom"]], ["add", "theorem", "ext_iff", ["mul_semiring_action_hom"]], ["add", "theorem", "id_apply", ["mul_semiring_action_hom"]], ["add", "theorem", "id_comp", ["mul_semiring_action_hom"]], ["add", "theorem", "map_add", ["mul_semiring_action_hom"]], ["add", "theorem", "map_mul", ["mul_semiring_action_hom"]], ["add", "theorem", "map_neg", ["mul_semiring_action_hom"]], ["add", "theorem", "map_one", ["mul_semiring_action_hom"]], ["add", "theorem", "map_smul", ["mul_semiring_action_hom"]], ["add", "theorem", "map_sub", ["mul_semiring_action_hom"]], ["add", "theorem", "map_zero", ["mul_semiring_action_hom"]], ["add", "structure", "mul_semiring_action_hom", []]]}]}, {"timestamp": 1592363541, "sha": "e40de30a", "message": "chore(category_theory/closed): move one thing to monoidal closed and fix naming (#3090)\nMove one of the CCC defs to MCC as an example, and make the naming consistent.", "changes": [{"oldPath": "src/category_theory/closed/cartesian.lean", "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["add", "def", "curry", ["category_theory", "cartesian_closed"]], ["add", "def", "uncurry", ["category_theory", "cartesian_closed"]], ["del", "def", "curry", ["category_theory", "is_cartesian_closed"]], ["del", "def", "uncurry", ["category_theory", "is_cartesian_closed"]], ["mod", "def", "terminal_exponentiable", ["category_theory"]]]}, {"oldPath": "src/category_theory/closed/monoidal.lean", "newPath": "src/category_theory/closed/monoidal.lean", "changes": [["add", "def", "unit_closed", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}]}, {"timestamp": 1592354709, "sha": "a19dca67", "message": "chore(scripts): update nolints.txt (#3091)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1592335980, "sha": "e3c9fd8d", "message": "feat(topology): sequential compactness (#3061)\nThis is the long overdue PR bringing Bolzano-Weierstrass to mathlib. I'm sorry it's a bit large. I did use a couple of preliminary PRs, that one is really about converging subsequences, but supporting material is spread in many files.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "strong_rec_on'", ["nat"]], ["add", "theorem", "strong_rec_on_beta'", ["nat"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "seq_of_forall_finite_exists", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bUnion_mono", ["set"]], ["add", "theorem", "bUnion_subset_bUnion", ["set"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "id_le", ["strict_mono"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "subseq_tendsto", ["filter", "is_countably_generated"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "exists_le_of_tendsto_at_top", ["filter"]], ["add", "theorem", "exists_lt_of_tendsto_at_top", ["filter"]], ["add", "theorem", "extraction_of_eventually_at_top", ["filter"]], ["add", "theorem", "extraction_of_frequently_at_top'", ["filter"]], ["add", "theorem", "extraction_of_frequently_at_top", ["filter"]], ["add", "theorem", "frequently_high_scores", ["filter"]], ["add", "theorem", "frequently_of_forall", ["filter"]], ["add", "theorem", "high_scores", ["filter"]], ["add", "theorem", "strict_mono_subseq_of_id_le", ["filter"]], ["add", "theorem", "strict_mono_subseq_of_tendsto_at_top", ["filter"]], ["add", "theorem", "strict_mono_tendsto_at_top", ["filter"]]]}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "tendsto_subseq", ["topological_space", "first_countable_topology"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ball_eq_ball'", ["metric"]], ["add", "theorem", "ball_eq_ball", ["metric"]], ["add", "theorem", "bounded_closure_of_bounded", ["metric"]], ["add", "theorem", "finite_approx_of_totally_bounded", ["metric"]], ["mod", "theorem", "totally_bounded_of_finite_discretization", ["metric"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["add", "theorem", "seq_compact", ["compact"]], ["add", "theorem", "tendsto_subseq'", ["compact"]], ["add", "theorem", "tendsto_subseq", ["compact"]], ["add", "theorem", "tendsto_subseq", ["compact_space"]], ["add", "theorem", "lebesgue_number_lemma_seq", []], ["add", "theorem", "compact_iff_seq_compact", ["metric"]], ["add", "theorem", "compact_space_iff_seq_compact_space", ["metric"]], ["add", "theorem", "lebesgue_number_lemma_of_metric", ["seq_compact"]], ["add", "theorem", "subseq_of_frequently_in", ["seq_compact"]], ["add", "theorem", "totally_bounded", ["seq_compact"]], ["add", "def", "seq_compact", []], ["add", "theorem", "tendsto_subseq", ["seq_compact_space"]], ["add", "theorem", "tendsto_subseq_of_bounded", []], ["add", "theorem", "tendsto_subseq_of_frequently_bounded", []], ["add", "theorem", "compact_space_iff_seq_compact_space", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "mem_entourage", ["cauchy_seq"]], ["add", "theorem", "totally_bounded_of_forall_symm", []]]}]}, {"timestamp": 1592330328, "sha": "a478f91b", "message": "chore(algebra/ring): move `add_mul_self_eq` to `comm_semiring` (#3089)\nAlso use `alias` instead of `def ... := @...` to make linter happy.\nFixes https://github.com/leanprover-community/lean/issues/232", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "def", "trans", ["dvd"]], ["del", "def", "dvd_of_mul_left_eq", []], ["del", "def", "dvd_of_mul_right_eq", []]]}]}, {"timestamp": 1592327281, "sha": "ae6bf562", "message": "feat(ring_theory/tensor_product): tensor product of algebras (#3050)\nThe R-algebra structure on the tensor product of two R-algebras.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "coe_coe", ["linear_equiv"]], ["mod", "theorem", "coe_to_equiv", ["linear_equiv"]], ["add", "theorem", "inv_fun_apply", ["linear_equiv"]], ["add", "theorem", "mk_apply", ["linear_equiv"]], ["add", "theorem", "to_fun_apply", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "comm_tmul", ["tensor_product"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_alg_hom", ["alg_equiv"]], ["del", "theorem", "coe_to_alg_equiv", ["alg_equiv"]], ["add", "theorem", "inv_fun_apply", ["alg_equiv"]], ["add", "theorem", "mk_apply", ["alg_equiv"]], ["add", "def", "of_alg_hom", ["alg_equiv"]], ["add", "theorem", "to_fun_apply", ["alg_equiv"]], ["mod", "theorem", "ext", ["alg_hom"]], ["add", "theorem", "ext_iff", ["alg_hom"]]]}, {"oldPath": null, "newPath": "src/ring_theory/tensor_product.lean", "changes": [["add", "def", "alg_equiv_of_linear_equiv_tensor_product", ["algebra", "tensor_product"]], ["add", "theorem", "alg_equiv_of_linear_equiv_tensor_product_apply", ["algebra", "tensor_product"]], ["add", "def", "alg_equiv_of_linear_equiv_triple_tensor_product", ["algebra", "tensor_product"]], ["add", "theorem", "alg_equiv_of_linear_equiv_triple_tensor_product_apply", ["algebra", "tensor_product"]], ["add", "def", "alg_hom_of_linear_map_tensor_product", ["algebra", "tensor_product"]], ["add", "theorem", "algebra_map_apply", ["algebra", "tensor_product"]], ["add", "theorem", "assoc_aux_1", ["algebra", "tensor_product"]], ["add", "theorem", "assoc_aux_2", ["algebra", "tensor_product"]], ["add", "theorem", "comm_tmul", ["algebra", "tensor_product"]], ["add", "def", "congr", ["algebra", "tensor_product"]], ["add", "theorem", "congr_apply", ["algebra", "tensor_product"]], ["add", "theorem", "congr_symm_apply", ["algebra", "tensor_product"]], ["add", "theorem", "ext", ["algebra", "tensor_product"]], ["add", "def", "include_left", ["algebra", "tensor_product"]], ["add", "def", "include_right", ["algebra", "tensor_product"]], ["add", "theorem", "lid_tmul", ["algebra", "tensor_product"]], ["add", "def", "map", ["algebra", "tensor_product"]], ["add", "theorem", "map_tmul", ["algebra", "tensor_product"]], ["add", "def", "mul", ["algebra", "tensor_product"]], ["add", "theorem", "mul_apply", ["algebra", "tensor_product"]], ["add", "theorem", "mul_assoc'", ["algebra", "tensor_product"]], ["add", "theorem", "mul_assoc", ["algebra", "tensor_product"]], ["add", "def", "mul_aux", ["algebra", "tensor_product"]], ["add", "theorem", "mul_aux_apply", ["algebra", "tensor_product"]], ["add", "theorem", "mul_one", ["algebra", "tensor_product"]], ["add", "theorem", "mul_tmul", ["algebra", "tensor_product"]], ["add", "theorem", "one_def", ["algebra", "tensor_product"]], ["add", "theorem", "one_mul", ["algebra", "tensor_product"]], ["add", "theorem", "rid_tmul", ["algebra", "tensor_product"]], ["add", "def", "tensor_algebra_map", ["algebra", "tensor_product"]]]}]}, {"timestamp": 1592290146, "sha": "a432a3a1", "message": "feat(analysis/convex): Carathéodory's convexity theorem (#2960)\n```\ntheorem caratheodory (s : set E) :\n convex_hull s = ⋃ (t : finset E) (w : ↑t ⊆ s) (b : t.card ≤ findim ℝ E + 1), convex_hull ↑t\n```\nand more explicitly\n```\ntheorem eq_center_mass_card_dim_succ_of_mem_convex_hull (s : set E) (x : E) (h : x ∈ convex_hull s) :\n ∃ (t : finset E) (w : ↑t ⊆ s) (b : t.card ≤ findim ℝ E + 1)\n (f : E → ℝ), (∀ y ∈ t, 0 ≤ f y) ∧ t.sum f = 1 ∧ t.center_mass f id = x\n```", "changes": [{"oldPath": null, "newPath": "src/analysis/convex/caratheodory.lean", "changes": [["add", "theorem", "mem_convex_hull_erase", ["caratheodory"]], ["add", "theorem", "shrink'", ["caratheodory"]], ["add", "theorem", "shrink", ["caratheodory"]], ["add", "theorem", "step", ["caratheodory"]], ["add", "theorem", "convex_hull_eq_union", []], ["add", "theorem", "convex_hull_subset_union", []], ["add", "theorem", "eq_center_mass_card_le_dim_succ_of_mem_convex_hull", []], ["add", "theorem", "eq_pos_center_mass_card_le_dim_succ_of_mem_convex_hull", []]]}]}, {"timestamp": 1592280218, "sha": "b51028f1", "message": "chore(linear_algebra/finite_dimensional): lin-indep lemma typos (#3086)", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1592274924, "sha": "e0871742", "message": "feat(linear_algebra/finite_dimensional): bases given by finsets (#3041)\nIn some cases, it might be more straightforward working with finsets of\nthe vector space instead of indexed types or carrying around a proof of\nset.finite. Also provide a lemma on equal dimension\nand basis cardinality lemma that uses a finset basis.", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "exists_is_basis_finset", ["finite_dimensional"]], ["add", "theorem", "findim_eq_card_finset_basis", ["finite_dimensional"]], ["add", "theorem", "of_finset_basis", ["finite_dimensional"]]]}]}, {"timestamp": 1592265489, "sha": "a7960085", "message": "feat(category_theory): cartesian closed categories (#2894)\nCartesian closed categories, from my topos project.", "changes": [{"oldPath": null, "newPath": "src/category_theory/closed/cartesian.lean", "changes": [["add", "def", "binary_product_exponentiable", ["category_theory"]], ["add", "def", "cartesian_closed", ["category_theory"]], ["add", "def", "cartesian_closed_of_equiv", ["category_theory"]], ["add", "def", "coev", ["category_theory"]], ["add", "theorem", "coev_ev", ["category_theory"]], ["add", "theorem", "curry_eq", ["category_theory"]], ["add", "theorem", "curry_eq_iff", ["category_theory"]], ["add", "theorem", "curry_id_eq_coev", ["category_theory"]], ["add", "theorem", "curry_injective", ["category_theory"]], ["add", "theorem", "curry_natural_left", ["category_theory"]], ["add", "theorem", "curry_natural_right", ["category_theory"]], ["add", "theorem", "curry_uncurry", ["category_theory"]], ["add", "theorem", "eq_curry_iff", ["category_theory"]], ["add", "def", "ev", ["category_theory"]], ["add", "theorem", "ev_coev", ["category_theory"]], ["add", "def", "adjunction", ["category_theory", "exp"]], ["add", "def", "exp", ["category_theory"]], ["add", "def", "exp_comparison", ["category_theory"]], ["add", "theorem", "exp_comparison_natural_left", ["category_theory"]], ["add", "theorem", "exp_comparison_natural_right", ["category_theory"]], ["add", "def", "exp_terminal_iso_self", ["category_theory"]], ["add", "def", "exponentiable", ["category_theory"]], ["add", "def", "internal_hom", ["category_theory"]], ["add", "def", "internalize_hom", ["category_theory"]], ["add", "def", "curry", ["category_theory", "is_cartesian_closed"]], ["add", "def", "uncurry", ["category_theory", "is_cartesian_closed"]], ["add", "def", "mul_zero", ["category_theory"]], ["add", "def", "pow_zero", ["category_theory"]], ["add", "def", "pre", ["category_theory"]], ["add", "theorem", "pre_id", ["category_theory"]], ["add", "theorem", "pre_map", ["category_theory"]], ["add", "theorem", "pre_post_comm", ["category_theory"]], ["add", "def", "prod_coprod_distrib", ["category_theory"]], ["add", "def", "terminal_exponentiable", ["category_theory"]], ["add", "theorem", "uncurry_curry", ["category_theory"]], ["add", "theorem", "uncurry_eq", ["category_theory"]], ["add", "theorem", "uncurry_id_eq_ev", ["category_theory"]], ["add", "theorem", "uncurry_injective", ["category_theory"]], ["add", "theorem", "uncurry_natural_left", ["category_theory"]], ["add", "theorem", "uncurry_natural_right", ["category_theory"]], ["add", "def", "zero_mul", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/closed/monoidal.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["add", "def", "is_iso_of_epi_of_split_mono", ["category_theory"]], ["add", "def", "is_iso_of_mono_of_split_epi", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "inv_prod_comparison_map_fst", ["category_theory", "limits"]], ["add", "theorem", "inv_prod_comparison_map_snd", ["category_theory", "limits"]], ["add", "theorem", "prod_comparison_inv_natural", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "def", "tensor_left", ["category_theory", "monoidal_category"]], ["add", "def", "tensor_left_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_left_tensor_hom_app", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_left_tensor_inv_app", ["category_theory", "monoidal_category"]], ["add", "def", "tensor_right", ["category_theory", "monoidal_category"]], ["add", "def", "tensor_right_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_right_tensor_hom_app", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_right_tensor_inv_app", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["add", "theorem", "tensor_hom", ["category_theory", "monoidal_of_has_finite_coproducts"]], ["add", "theorem", "tensor_obj", ["category_theory", "monoidal_of_has_finite_coproducts"]], ["add", "theorem", "tensor_hom", ["category_theory", "monoidal_of_has_finite_products"]], ["add", "theorem", "tensor_obj", ["category_theory", "monoidal_of_has_finite_products"]]]}]}, {"timestamp": 1592254743, "sha": "25e414d1", "message": "feat(tactic/linarith): nlinarith tactic (#2637)\nBased on Coq's [nra](https://coq.inria.fr/refman/addendum/micromega.html#coq:tacn.nra) tactic, and requested on [Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/nonlinear.20linarith).", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "mmap'_diag", ["list"]]]}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": [["add", "theorem", "mul_zero_eq", ["linarith"]], ["add", "theorem", "zero_mul_eq", ["linarith"]]]}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["del", "theorem", "test6", []]]}]}, {"timestamp": 1592239759, "sha": "2e752e13", "message": "feat(tactic/group): group normalization tactic (#3062)\nA tactic to normalize expressions in multiplicative groups.", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "mul_gpow_neg_one", []], ["add", "theorem", "mul_gpow_self", []], ["add", "theorem", "mul_self_gpow", []]]}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/group.lean", "changes": [["add", "theorem", "gpow_trick", ["tactic", "group"]], ["add", "theorem", "gpow_trick_one'", ["tactic", "group"]], ["add", "theorem", "gpow_trick_one", ["tactic", "group"]], ["add", "theorem", "gpow_trick_sub", ["tactic", "group"]]]}, {"oldPath": null, "newPath": "test/group.lean", "changes": [["add", "def", "commutator3", []], ["add", "def", "commutator", []]]}]}, {"timestamp": 1592235946, "sha": "aa35f363", "message": "feat(analysis/hofer): Hofer's lemma (#3064)\nAdds Hofer's lemma about complete metric spaces, with supporting material.", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "div_pow_le", []], ["add", "theorem", "pos_div_pow_pos", []]]}, {"oldPath": null, "newPath": "src/analysis/hofer.lean", "changes": [["add", "theorem", "hofer", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "geom_lt", []], ["add", "theorem", "sum_geometric_two_le", []], ["add", "theorem", "tendsto_at_top_of_geom_lt", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "Iio_mem_at_bot", ["filter"]], ["add", "theorem", "Ioi_mem_at_top", ["filter"]], ["add", "theorem", "inf_eq_bot_iff", ["filter"]], ["add", "theorem", "mem_at_bot", ["filter"]], ["add", "theorem", "not_tendsto", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Iio_mem_nhds", []], ["add", "theorem", "Ioi_mem_nhds", []], ["add", "theorem", "Ioo_mem_nhds", []], ["add", "theorem", "disjoint_nhds_at_bot", []], ["add", "theorem", "disjoint_nhds_at_top", []], ["add", "theorem", "inf_nhds_at_bot", []], ["add", "theorem", "inf_nhds_at_top", []], ["add", "theorem", "not_tendsto_at_bot_of_tendsto_nhds", []], ["add", "theorem", "not_tendsto_at_top_of_tendsto_nhds", []], ["add", "theorem", "not_tendsto_nhds_of_tendsto_at_bot", []], ["add", "theorem", "not_tendsto_nhds_of_tendsto_at_top", []]]}]}, {"timestamp": 1592226034, "sha": "4843bb12", "message": "chore(linear_algebra/finsupp_vector_space): remove leftover pp.universes (#3081)\nSee also #1608.", "changes": [{"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}]}, {"timestamp": 1592208305, "sha": "758806ec", "message": "feat(linear_algebra/affine_space): more on affine subspaces (#3076)\nAdd extensionality lemmas for affine subspaces, and a constructor to\nmake an affine subspace from a point and a direction.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "direction_mk_of_point_of_direction", ["affine_subspace"]], ["add", "theorem", "ext", ["affine_subspace"]], ["add", "theorem", "ext_of_direction_eq", ["affine_subspace"]], ["add", "theorem", "mem_mk_of_point_of_direction", ["affine_subspace"]], ["add", "def", "mk_of_point_of_direction", ["affine_subspace"]], ["add", "theorem", "mk_of_point_of_direction_eq", ["affine_subspace"]]]}]}, {"timestamp": 1592186779, "sha": "543359ce", "message": "feat(field_theory/finite): Chevalley–Warning (#1564)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "coe_subtype_equiv_codomain", ["equiv"]], ["add", "theorem", "coe_subtype_equiv_codomain_symm", ["equiv"]], ["add", "def", "subtype_equiv_codomain", ["equiv"]], ["add", "theorem", "subtype_equiv_codomain_apply", ["equiv"]], ["add", "theorem", "subtype_equiv_codomain_symm_apply", ["equiv"]], ["add", "theorem", "subtype_equiv_codomain_symm_apply_eq", ["equiv"]], ["add", "theorem", "subtype_equiv_codomain_symm_apply_ne", ["equiv"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "prod_fintype", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "eval_eq'", ["mv_polynomial"]], ["add", "theorem", "eval_eq", ["mv_polynomial"]], ["add", "theorem", "eval_prod", ["mv_polynomial"]], ["add", "theorem", "eval_sum", ["mv_polynomial"]], ["add", "theorem", "eval₂_eq'", ["mv_polynomial"]], ["add", "theorem", "eval₂_eq", ["mv_polynomial"]], ["add", "theorem", "exists_degree_lt", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/field_theory/chevalley_warning.lean", "changes": [["add", "theorem", "char_dvd_card_solutions", []], ["add", "theorem", "char_dvd_card_solutions_family", []], ["add", "theorem", "sum_mv_polynomial_eq_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1592184173, "sha": "3a66d9ac", "message": "feat(polynomial): generalising some material to (noncomm_)semiring (#3043)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "coeff_sum", ["polynomial"]], ["add", "theorem", "monomial_eq_smul_X", ["polynomial"]], ["add", "theorem", "monomial_one_eq_X_pow", ["polynomial"]], ["mod", "def", "polynomial", []]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1592182187, "sha": "01732f78", "message": "chore(scripts): update nolints.txt (#3078)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1592180136, "sha": "c91fc150", "message": "chore(geometry/manifold/real_instances): use euclidean_space (#3077)\nNow that `euclidean_space` has been refactored to use the product topology, we can fix the geometry file that used a version of the product space (with the sup norm!) called `euclidean_space2`, using now instead the proper `euclidean_space`.", "changes": [{"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": [["mod", "def", "euclidean_quadrant", []], ["del", "def", "euclidean_space2", []], ["del", "theorem", "findim_euclidean_space2", []]]}]}, {"timestamp": 1592167258, "sha": "c4a32e72", "message": "doc(topology/uniform_space/basic): library note on forgetful inheritance (#3070)\nA (long) library note explaining design decisions related to forgetful inheritance, and reference to this note in various places (I have probably forgotten a few of them).", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/pi_Lp.lean", "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1592162794, "sha": "797177c3", "message": "feat(linear_algebra/affine_space): affine combinations of points (#2979)\nSome basic definitions and lemmas related to affine combinations of\npoints, in preparation for defining barycentric coordinates for use in\ngeometry.\nThis version for sums over a `fintype` is probably the most convenient\nfor geometrical uses (where the type will be `fin 3` in the case of a\ntriangle, or more generally `fin (n + 1)` for an n-simplex), but other\nuse cases may find that `finset` or `finsupp` versions of these\ndefinitions are of use as well.\nThe definition `weighted_vsub` is expected to be used with weights\nthat sum to zero, and the definition `affine_combination` is expected\nto be used with weights that sum to 1, but such a hypothesis is only\nspecified for lemmas that need it rather than for those definitions.\nI expect that most nontrivial geometric uses of barycentric\ncoordinates will need to prove such a hypothesis at some point, but\nthat it will still be more convenient not to need to pass it to all\nthe definitions and trivial lemmas.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_apply", ["pi"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "def", "weighted_vsub_of_point", ["affine_map"]], ["add", "def", "affine_combination", ["affine_space"]], ["add", "theorem", "affine_combination_eq_weighted_vsub_of_point_vadd_of_sum_eq_one", ["affine_space"]], ["add", "theorem", "affine_combination_vsub", ["affine_space"]], ["add", "def", "weighted_vsub", ["affine_space"]], ["add", "theorem", "weighted_vsub_add", ["affine_space"]], ["add", "theorem", "weighted_vsub_eq_weighted_vsub_of_point_of_sum_eq_zero", ["affine_space"]], ["add", "theorem", "weighted_vsub_neg", ["affine_space"]], ["add", "def", "weighted_vsub_of_point", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_add", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_eq_of_sum_eq_zero", ["affine_space"]], ["add", "def", "weighted_vsub_of_point_linear", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_linear_apply", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_neg", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_smul", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_sub", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_vadd_eq_of_sum_eq_one", ["affine_space"]], ["add", "theorem", "weighted_vsub_of_point_zero", ["affine_space"]], ["add", "theorem", "weighted_vsub_smul", ["affine_space"]], ["add", "theorem", "weighted_vsub_sub", ["affine_space"]], ["add", "theorem", "weighted_vsub_vadd_affine_combination", ["affine_space"]], ["add", "theorem", "weighted_vsub_zero", ["affine_space"]]]}]}, {"timestamp": 1592152595, "sha": "77c5dfe2", "message": "perf(*): avoid `user_attribute.get_param` (#3073)\nRecent studies have shown that `monoid_localization.lean` is the slowest file in mathlib. One hundred and three seconds (93%) of its class-leading runtime are spent in constructing the attribute cache for `_to_additive`. This is due to the use of the `user_attribute.get_param` function inside `get_cache`. See the [library note on user attribute parameters](https://leanprover-community.github.io/mathlib_docs/notes.html#user%20attribute%20parameters) for more information on this anti-pattern.\nThis PR removes two uses of `user_attribute.get_param`, one in `to_additive` and the other in `ancestor`.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}]}, {"timestamp": 1592152593, "sha": "0d052998", "message": "chore(data/finset): rename `ext`/`ext'`/`ext_iff` (#3069)\nNow\n* `ext` is the `@[ext]` lemma;\n* `ext_iff` is the lemma `s₁ = s₂ ↔ ∀ a, a ∈ s₁ ↔ a ∈ s₂`.\nAlso add 2 `norm_cast` attributes and a lemma `ssubset_iff_of_subset`.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "coe_inj", ["finset"]], ["del", "theorem", "ext'", ["finset"]], ["mod", "theorem", "ext", ["finset"]], ["add", "theorem", "ext_iff", ["finset"]], ["mod", "theorem", "mem_coe", ["finset"]], ["add", "theorem", "ssubset_iff_of_subset", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "ssubset_iff_of_subset", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1592152591, "sha": "1f16da1b", "message": "refactor(analysis/normed_space/real_inner_product): extend normed_space in the definition (#3060)\nCurrently, inner product spaces do not extend normed spaces, and a norm is constructed from the inner product. This makes it impossible to put an instance on reals, because it would lead to two non-defeq norms. We refactor inner product spaces to extend normed spaces, with the condition that the norm is equal (but maybe not defeq) to the square root of the inner product, to solve this issue.\nThe possibility to construct a norm from a well-behaved inner product is still given by a constructor `inner_product_space.of_core`.\nWe also register the inner product structure on a finite product of inner product spaces (not on the Pi type, which has the sup norm, but on `pi_Lp 2 one_le_two \\alpha` which has the right norm).", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["del", "theorem", "inner_def", ["euclidean_space"]], ["mod", "def", "euclidean_space", []], ["add", "theorem", "findim_euclidean_space", []], ["add", "theorem", "findim_euclidean_space_fin", []], ["add", "structure", "core", ["inner_product_space"]], ["add", "theorem", "abs_inner_le_norm", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_add_add_self", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_add_left", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_add_right", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_comm", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_mul_inner_self_le", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_self_eq_norm_square", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_smul_left", ["inner_product_space", "of_core"]], ["add", "theorem", "inner_smul_right", ["inner_product_space", "of_core"]], ["add", "theorem", "norm_eq_sqrt_inner", ["inner_product_space", "of_core"]], ["add", "def", "to_has_inner", ["inner_product_space", "of_core"]], ["add", "def", "to_has_norm", ["inner_product_space", "of_core"]], ["add", "def", "to_normed_group", ["inner_product_space", "of_core"]], ["add", "def", "to_normed_space", ["inner_product_space", "of_core"]], ["add", "def", "of_core", ["inner_product_space"]], ["mod", "theorem", "inner_self_nonneg", []], ["del", "theorem", "norm_eq_sqrt_inner", []], ["del", "def", "inner_product_space", ["pi"]], ["del", "def", "inner_product_space", ["real"]]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": [["add", "theorem", "findim_euclidean_space2", []], ["del", "theorem", "findim_euclidean_space", []]]}]}, {"timestamp": 1592147375, "sha": "85b8bdcb", "message": "perf(tactic/linarith): use key/value lists instead of rb_maps to represent linear expressions (#3004)\nThis has essentially no effect on the test file, but scales much better. \nSee discussion at https://leanprover.zulipchat.com/#narrow/stream/187764-Lean-for.20teaching/topic/Real.20analysis for an example which is in reach with this change.", "changes": [{"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": [["add", "def", "cmp", ["linarith", "ineq"]], ["del", "def", "is_lt", ["linarith", "ineq"]], ["add", "def", "cmp", ["linarith", "linexp"]], ["add", "def", "contains", ["linarith", "linexp"]], ["add", "def", "get", ["linarith", "linexp"]], ["add", "def", "scale", ["linarith", "linexp"]], ["add", "def", "zfind", ["linarith", "linexp"]], ["add", "def", "linexp", ["linarith"]]]}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": [["add", "theorem", "test6", []]]}]}, {"timestamp": 1592138262, "sha": "7f60a62d", "message": "chore(order/basic): move unbundled order classes to `rel_classes (#3066)\nReason: these classes are rarely used in `mathlib`, we don't need to mix them with classes extending `has_le`.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "antisymm_of_asymm", []], ["del", "def", "bounded", []], ["del", "def", "decidable_linear_order_of_STO'", []], ["del", "theorem", "swap", ["is_antisymm"]], ["del", "theorem", "swap", ["is_asymm"]], ["del", "theorem", "swap", ["is_irrefl"]], ["del", "theorem", "is_irrefl_of_is_asymm", []], ["del", "theorem", "swap", ["is_linear_order"]], ["del", "theorem", "neg_trans", ["is_order_connected"]], ["del", "theorem", "swap", ["is_partial_order"]], ["del", "theorem", "swap", ["is_preorder"]], ["del", "theorem", "swap", ["is_refl"]], ["del", "theorem", "swap", ["is_strict_order"]], ["del", "theorem", "swap", ["is_strict_total_order'"]], ["del", "theorem", "is_strict_weak_order_of_is_order_connected", []], ["del", "theorem", "swap", ["is_total"]], ["del", "theorem", "swap", ["is_total_preorder"]], ["del", "theorem", "swap", ["is_trans"]], ["del", "theorem", "swap", ["is_trichotomous"]], ["del", "def", "linear_order_of_STO'", []], ["del", "theorem", "not_bounded_iff", []], ["del", "theorem", "not_unbounded_iff", []], ["del", "def", "partial_order_of_SO", []], ["del", "theorem", "trans_trichotomous_left", []], ["del", "theorem", "trans_trichotomous_right", []], ["del", "def", "unbounded", []], ["del", "theorem", "has_min", ["well_founded"]], ["del", "theorem", "min_mem", ["well_founded"]], ["del", "theorem", "not_lt_min", ["well_founded"]]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/rel_classes.lean", "changes": [["add", "def", "bounded", []], ["add", "def", "decidable_linear_order_of_STO'", []], ["add", "theorem", "swap", ["is_antisymm"]], ["add", "theorem", "swap", ["is_asymm"]], ["add", "theorem", "swap", ["is_irrefl"]], ["add", "theorem", "swap", ["is_linear_order"]], ["add", "theorem", "neg_trans", ["is_order_connected"]], ["add", "theorem", "swap", ["is_partial_order"]], ["add", "theorem", "swap", ["is_preorder"]], ["add", "theorem", "swap", ["is_refl"]], ["add", "theorem", "swap", ["is_strict_order"]], ["add", "theorem", "swap", ["is_strict_total_order'"]], ["add", "theorem", "is_strict_weak_order_of_is_order_connected", []], ["add", "theorem", "swap", ["is_total"]], ["add", "theorem", "swap", ["is_total_preorder"]], ["add", "theorem", "swap", ["is_trans"]], ["add", "theorem", "swap", ["is_trichotomous"]], ["add", "def", "linear_order_of_STO'", []], ["add", "theorem", "not_bounded_iff", []], ["add", "theorem", "not_unbounded_iff", []], ["add", "def", "partial_order_of_SO", []], ["add", "theorem", "trans_trichotomous_left", []], ["add", "theorem", "trans_trichotomous_right", []], ["add", "def", "unbounded", []], ["add", "theorem", "has_min", ["well_founded"]], ["add", "theorem", "min_mem", ["well_founded"]], ["add", "theorem", "not_lt_min", ["well_founded"]]]}]}, {"timestamp": 1592138260, "sha": "2c97f239", "message": "feat(tactic/library_search): small improvements (#3037)\nThis makes the following small improvements to `library_search`:\n1. ~~Don't use `*.inj` lemmas, which are rarely useful. (Cuts test file from 95 seconds to 90 seconds.)~~\n2. Some refactoring for reusability in other tactics.\n3. `apply_declaration` now reports how many subgoals were successfully closed by `solve_by_elim` (for use by new tactics)", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1592138258, "sha": "a6534db8", "message": "feat(normed_space/dual): (topological) dual of a normed space (#3021)\nDefine the topological dual of a normed space, and prove that over the reals, the inclusion into the double dual is an isometry.\nSupporting material: a corollary of Hahn-Banach; material about spans of singletons added to `linear_algebra.basic` and `normed_space.operator_norm`; material about homotheties added to `normed_space.operator_norm`.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/normed_space/dual.lean", "changes": [["add", "theorem", "double_dual_bound", ["normed_space"]], ["add", "theorem", "dual_def", ["normed_space"]], ["add", "def", "inclusion_in_double_dual'", ["normed_space"]], ["add", "def", "inclusion_in_double_dual", ["normed_space"]], ["add", "theorem", "inclusion_in_double_dual_isometry", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["add", "theorem", "coord_norm'", []], ["add", "theorem", "coord_self'", []], ["add", "theorem", "exists_dual_vector'", []], ["add", "theorem", "exists_dual_vector", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "coord", ["continuous_linear_equiv"]], ["add", "theorem", "coord_norm", ["continuous_linear_equiv"]], ["add", "theorem", "homothety_inverse", ["continuous_linear_equiv"]], ["add", "def", "of_homothety", ["continuous_linear_equiv"]], ["add", "def", "to_span_nonzero_singleton", ["continuous_linear_equiv"]], ["add", "theorem", "to_span_nonzero_singleton_homothety", ["continuous_linear_equiv"]], ["add", "theorem", "homothety_norm", ["continuous_linear_map"]], ["add", "def", "of_homothety", ["continuous_linear_map"]], ["add", "def", "to_span_singleton", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_homothety", ["continuous_linear_map"]], ["add", "theorem", "to_span_singleton_norm", ["continuous_linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "coord", ["linear_equiv"]], ["add", "theorem", "coord_self", ["linear_equiv"]], ["add", "def", "to_span_nonzero_singleton", ["linear_equiv"]], ["add", "theorem", "to_span_nonzero_singleton_one", ["linear_equiv"]], ["add", "theorem", "span_singleton_eq_range", ["linear_map"]], ["add", "def", "to_span_singleton", ["linear_map"]], ["add", "theorem", "to_span_singleton_one", ["linear_map"]], ["add", "theorem", "mem_span_singleton_self", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "restrict_scalars", ["subspace"]]]}]}, {"timestamp": 1592135748, "sha": "4e886875", "message": "chore(data/complex/basic): rearrange into sections (#3068)\nAlso:\n* reworded some docstrings,\n* removed dependence on `deprecated.field` by changing the proofs of `of_real_div` and `of_real_fpow` to use `ring_hom` lemmas instead of `is_ring_hom` lemma,\n* renamed the instance `of_real.is_ring_hom` too `coe.is_ring_hom`,\n* renamed `real_prod_equiv*` to `equiv_prod_real*`, and\n* `conj_two` was removed in favor of `conj_bit0` and `conj_bit1`.", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "abs_abs_sub_le_abs_sub", ["complex"]], ["add", "theorem", "conj_bit0", ["complex"]], ["add", "theorem", "conj_bit1", ["complex"]], ["del", "theorem", "conj_two", ["complex"]], ["add", "def", "equiv_real_prod", ["complex"]], ["add", "theorem", "equiv_real_prod_apply", ["complex"]], ["add", "theorem", "equiv_real_prod_symm_im", ["complex"]], ["add", "theorem", "equiv_real_prod_symm_re", ["complex"]], ["mod", "theorem", "of_real_add", ["complex"]], ["mod", "theorem", "of_real_bit0", ["complex"]], ["mod", "theorem", "of_real_bit1", ["complex"]], ["mod", "theorem", "of_real_int_cast", ["complex"]], ["mod", "theorem", "of_real_rat_cast", ["complex"]], ["del", "def", "real_prod_equiv", ["complex"]], ["del", "theorem", "real_prod_equiv_apply", ["complex"]], ["del", "theorem", "real_prod_equiv_symm_im", ["complex"]], ["del", "theorem", "real_prod_equiv_symm_re", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}]}, {"timestamp": 1592125857, "sha": "2cd329fe", "message": "feat(algebra/continued_fractions): add correctness of terminating computations (#2911)\n### What\nAdd correctness lemmas for terminating computations of continued fractions\n### Why\nTo show that the continued fractions algorithm is computing the right thing in case of termination. For non-terminating sequences, lemmas about the limit will be added in a later PR.\n### How\n1. Show that the value to be approximated can always be obtained by adding the corresponding, remaining fractional part stored in `int_fract_pair.stream`.\n2. Use this to derive that once the fractional part becomes 0 (and hence the continued fraction terminates), we have exactly computed the value.", "changes": [{"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/computation/basic.lean", "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/computation/correctness_terminating.lean", "changes": [["add", "theorem", "comp_exact_value_correctness_of_stream_eq_none", ["generalized_continued_fraction"]], ["add", "theorem", "comp_exact_value_correctness_of_stream_eq_some", ["generalized_continued_fraction"]], ["add", "theorem", "of_correctness_at_top_of_terminates", ["generalized_continued_fraction"]], ["add", "theorem", "of_correctness_of_terminated_at", ["generalized_continued_fraction"]], ["add", "theorem", "of_correctness_of_terminates", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/computation/default.lean", "newPath": "src/algebra/continued_fractions/computation/default.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "newPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}]}, {"timestamp": 1592122089, "sha": "fdc326c0", "message": "feat(geometry/euclidean): sum of angles of a triangle (#2994)\nItem 27 from the 100-theorems list.", "changes": [{"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["add", "theorem", "angle_add_angle_add_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_add_angle_sub_add_angle_sub_eq_pi", ["inner_product_geometry"]], ["add", "theorem", "cos_angle_add_angle_sub_add_angle_sub_eq_neg_one", ["inner_product_geometry"]], ["add", "theorem", "cos_angle_sub_add_angle_sub_rev_eq_neg_cos_angle", ["inner_product_geometry"]], ["add", "theorem", "sin_angle_add_angle_sub_add_angle_sub_eq_zero", ["inner_product_geometry"]], ["add", "theorem", "sin_angle_sub_add_angle_sub_rev_eq_sin_angle", ["inner_product_geometry"]]]}]}, {"timestamp": 1592109041, "sha": "c8c18697", "message": "refactor(order/basic): make `*order.lift` use `[]` argument (#3067)\nTake an order on the codomain as a `[*order β]` argument.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "def", "lift", ["decidable_linear_order"]], ["mod", "def", "lift", ["linear_order"]], ["mod", "def", "lift", ["partial_order"]], ["mod", "def", "lift", ["preorder"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}]}, {"timestamp": 1592098216, "sha": "67f72889", "message": "doc(measure_theory): document basic measure theory files (#3057)", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}]}, {"timestamp": 1592095293, "sha": "0f98c37c", "message": "chore(scripts): update nolints.txt (#3065)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1592077022, "sha": "e33245ca", "message": "feat(topology/metric_space/pi_Lp): L^p distance on finite products (#3059)\n`L^p` edistance (or distance, or norm) on finite products of emetric spaces (or metric spaces, or normed groups), put on a type synonym `pi_Lp p hp α` to avoid instance clashes, and being careful to register as uniformity the product uniformity.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "mul_rpow_of_nonneg", ["ennreal"]], ["mod", "theorem", "rpow_eq_top_iff", ["ennreal"]], ["mod", "theorem", "rpow_eq_zero_iff", ["ennreal"]], ["add", "theorem", "to_real_rpow", ["ennreal"]], ["mod", "theorem", "top_rpow_of_neg", ["ennreal"]], ["mod", "theorem", "top_rpow_of_pos", ["ennreal"]], ["mod", "theorem", "zero_rpow_of_neg", ["ennreal"]], ["mod", "theorem", "zero_rpow_of_pos", ["ennreal"]], ["add", "theorem", "rpow_neg_one", ["nnreal"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/pi_Lp.lean", "changes": [["add", "theorem", "add_apply", ["pi_Lp"]], ["add", "theorem", "antilipschitz_with_equiv", ["pi_Lp"]], ["add", "theorem", "aux_uniformity_eq", ["pi_Lp"]], ["add", "def", "emetric_aux", ["pi_Lp"]], ["add", "theorem", "lipschitz_with_equiv", ["pi_Lp"]], ["add", "theorem", "neg_apply", ["pi_Lp"]], ["add", "theorem", "norm_eq", ["pi_Lp"]], ["add", "theorem", "smul_apply", ["pi_Lp"]], ["add", "theorem", "sub_apply", ["pi_Lp"]], ["add", "def", "pi_Lp", []]]}]}, {"timestamp": 1592055730, "sha": "cc16d35b", "message": "feat(linear_algebra/finite_dimensional): cardinalities and linear independence (#3056)", "changes": [{"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "cardinal_mk_le_findim_of_linear_independent", ["finite_dimensional"]], ["add", "theorem", "exists_nontrivial_relation_of_dim_lt_card", ["finite_dimensional"]], ["add", "theorem", "exists_nontrivial_relation_sum_zero_of_dim_succ_lt_card", ["finite_dimensional"]], ["add", "theorem", "exists_relation_sum_zero_pos_coefficient_of_dim_succ_lt_card", ["finite_dimensional"]], ["add", "theorem", "finset_card_le_findim_of_linear_independent", ["finite_dimensional"]], ["add", "theorem", "fintype_card_le_findim_of_linear_independent", ["finite_dimensional"]]]}]}, {"timestamp": 1592051925, "sha": "b7048a4e", "message": "feat(tactic/linarith): improve parsing expressions into linear form (#2995)\nThis PR generalizes the parsing stage of `linarith`. It will try harder to recognize expressions as linear combinations of monomials, and will match monomials up to commutativity. \n```lean\nexample (u v r s t : ℚ) (h : 0 < u*(t*v + t*r + s)) : 0 < (t*(r + v) + s)*3*u :=\nby linarith\n```\nThis is helpful for #2637 .", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1592046539, "sha": "4bb29abb", "message": "doc(algebra/group/to_additive): add doc strings and tactic doc entry (#3055)", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": [["mod", "structure", "value_type", ["to_additive"]]]}]}, {"timestamp": 1592046537, "sha": "a22b657f", "message": "refactor(topology/uniform_space): docstring and notation (#3052)\nThe goal of this PR is to make `topology/uniform_space/basic.lean` more accessible. \nFirst it introduces the standard notation for relation composition that was inexplicably not used before. I used a non-standard unicode circle here `\\ciw` but this is up for discussion as long as it looks like a composition circle.\nThen I introduced balls as discussed on [this Zulip topic](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/notations.20for.20uniform.20spaces). There could be used more, but at least this should be mostly sufficient for following PRs.\nAnd of course I put a huge module docstring. As with `order/filter/basic.lean`, I think we need more mathematical explanations than in the average mathlib file.\nI also added a bit of content about symmetric entourages but I don't have enough courage to split this off unless someone really insists.", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "ball_eq_of_symmetry", []], ["add", "theorem", "ball_mono", []], ["add", "theorem", "ball_subset_of_comp_subset", []], ["mod", "theorem", "comp_le_uniformity", []], ["mod", "theorem", "id_comp_rel", []], ["add", "theorem", "is_open_iff_ball_subset", []], ["add", "theorem", "mem_ball_comp", []], ["add", "theorem", "mem_ball_symmetry", []], ["add", "def", "symmetric_rel", []], ["add", "theorem", "symmetric_symmetrize_rel", []], ["add", "theorem", "symmetrize_mem_uniformity", []], ["add", "theorem", "symmetrize_mono", []], ["add", "def", "symmetrize_rel", []], ["add", "theorem", "symmetrize_rel_subset_self", []], ["add", "theorem", "uniform_continuous_iff_eventually", []], ["add", "def", "ball", ["uniform_space"]], ["add", "theorem", "has_basis_symmetric", ["uniform_space"]], ["add", "theorem", "has_seq_basis", ["uniform_space"]]]}]}, {"timestamp": 1592041865, "sha": "938b73a4", "message": "feat(topology/metric_space/pi_lp): Holder and Minkowski inequalities in ennreal (#2988)\nHölder and Minkowski inequalities for finite sums. Versions for ennreals.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_eq_top_iff", ["with_top"]]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "Lp_add_le", ["ennreal"]], ["add", "theorem", "inner_le_Lp_mul_Lq", ["ennreal"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "one_to_nnreal", ["ennreal"]], ["add", "theorem", "one_to_real", ["ennreal"]], ["add", "theorem", "sum_eq_top_iff", ["ennreal"]]]}]}, {"timestamp": 1592039948, "sha": "dc69dc35", "message": "refactor(ci): only update nolints once a day (#3036)\nThis PR moves the update nolints step to a new GitHub actions workflow `update_nolints.yml` which runs once a day.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/update_nolints.yml", "changes": []}, {"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}]}, {"timestamp": 1592033275, "sha": "1645542c", "message": "feat(linear_algebra): elements of a dim zero space (#3054)", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_pos_iff_exists_ne_zero", []], ["add", "theorem", "dim_zero_iff_forall_zero", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "bot_eq_top_of_dim_eq_zero", []], ["add", "theorem", "findim_bot", []], ["add", "theorem", "findim_eq_zero_of_dim_eq_zero", []], ["add", "theorem", "finite_dimensional_bot", []], ["add", "theorem", "finite_dimensional_of_dim_eq_zero", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_emptyc_iff", ["cardinal"]]]}]}, {"timestamp": 1591985322, "sha": "51ad2a18", "message": "chore(*): update to Lean 3.16.2c (#3053)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1591985320, "sha": "ce594be5", "message": "feat(linear_algebra/affine_space): define a few affine maps (#2981)", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "add_linear", ["affine_map"]], ["add", "theorem", "affine_apply_line_map", ["affine_map"]], ["add", "theorem", "affine_comp_line_map", ["affine_map"]], ["add", "theorem", "coe_add", ["affine_map"]], ["add", "theorem", "coe_const", ["affine_map"]], ["add", "theorem", "coe_homothety_affine", ["affine_map"]], ["add", "theorem", "coe_homothety_hom", ["affine_map"]], ["add", "theorem", "coe_mul", ["affine_map"]], ["add", "theorem", "coe_one", ["affine_map"]], ["add", "theorem", "coe_smul", ["affine_map"]], ["add", "theorem", "coe_zero", ["affine_map"]], ["add", "theorem", "comp_assoc", ["affine_map"]], ["add", "theorem", "comp_id", ["affine_map"]], ["add", "def", "const", ["affine_map"]], ["add", "theorem", "const_linear", ["affine_map"]], ["mod", "theorem", "ext", ["affine_map"]], ["add", "theorem", "ext_iff", ["affine_map"]], ["add", "def", "homothety", ["affine_map"]], ["add", "theorem", "homothety_add", ["affine_map"]], ["add", "def", "homothety_affine", ["affine_map"]], ["add", "theorem", "homothety_apply", ["affine_map"]], ["add", "theorem", "homothety_def", ["affine_map"]], ["add", "def", "homothety_hom", ["affine_map"]], ["add", "theorem", "homothety_mul", ["affine_map"]], ["add", "theorem", "homothety_one", ["affine_map"]], ["add", "theorem", "homothety_zero", ["affine_map"]], ["add", "theorem", "id_comp", ["affine_map"]], ["add", "theorem", "id_linear", ["affine_map"]], ["add", "def", "line_map", ["affine_map"]], ["add", "theorem", "line_map_apply", ["affine_map"]], ["add", "theorem", "line_map_apply_zero", ["affine_map"]], ["add", "theorem", "line_map_linear", ["affine_map"]], ["add", "theorem", "line_map_vadd_neg", ["affine_map"]], ["add", "theorem", "line_map_zero", ["affine_map"]], ["add", "theorem", "linear_map_vsub", ["affine_map"]], ["del", "theorem", "map_vsub", ["affine_map"]], ["add", "theorem", "vadd_apply", ["affine_map"]], ["add", "theorem", "vsub_apply", ["affine_map"]], ["add", "theorem", "zero_linear", ["affine_map"]], ["add", "theorem", "coe_to_affine_map", ["linear_map"]], ["add", "def", "to_affine_map", ["linear_map"]], ["add", "theorem", "to_affine_map_linear", ["linear_map"]]]}]}, {"timestamp": 1591979581, "sha": "14292790", "message": "feat(data/*): lemmas converting finset, set.finite, and their card (#3042)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "attach_eq_univ", ["finset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "card_to_finset", ["set", "finite"]]]}]}, {"timestamp": 1591979579, "sha": "c955537e", "message": "fix(library_search): only unfold reducible definitions when matching (#3038)\nBy default `library_search` only unfolds `reducible` definitions\nwhen attempting to match lemmas against the goal.\nPreviously, it would unfold most definitions, sometimes giving surprising answers, or slow answers.\nThe old behaviour is still available via `library_search!`.", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}]}, {"timestamp": 1591976103, "sha": "5c0000c0", "message": "chore(*): remove extra author info (#3051)\nRemoving changes to author headers in files with recent changes. Authorship should be cited in the headers only for significant contributions.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}]}, {"timestamp": 1591968468, "sha": "64461b83", "message": "chore(scripts): update nolints.txt (#3049)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591964355, "sha": "6aa24643", "message": "chore(scripts): update nolints.txt (#3048)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591962193, "sha": "f78693db", "message": "chore(data/complex/exponential): linting and pp_nodot (#3045)", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "def", "cos", ["complex"]], ["mod", "def", "cosh", ["complex"]], ["mod", "def", "exp'", ["complex"]], ["mod", "def", "exp", ["complex"]], ["mod", "theorem", "is_cau_exp", ["complex"]], ["mod", "def", "sin", ["complex"]], ["mod", "def", "sinh", ["complex"]], ["mod", "def", "tan", ["complex"]], ["mod", "def", "tanh", ["complex"]], ["mod", "theorem", "is_cau_geo_series_const", []], ["mod", "theorem", "is_cau_series_of_abv_le_cau", []], ["mod", "def", "cos", ["real"]], ["mod", "theorem", "cos_bound", ["real"]], ["mod", "def", "cosh", ["real"]], ["mod", "def", "exp", ["real"]], ["mod", "def", "sin", ["real"]], ["mod", "theorem", "sin_bound", ["real"]], ["mod", "def", "sinh", ["real"]], ["mod", "def", "tan", ["real"]], ["mod", "def", "tanh", ["real"]]]}]}, {"timestamp": 1591962191, "sha": "5808afcb", "message": "feat(analysis/mean_inequalities): Holder and Minkowski inequalities (#3025)", "changes": [{"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "Lp_add_le", ["nnreal"]], ["del", "theorem", "am_gm2_weighted", ["nnreal"]], ["del", "theorem", "am_gm3_weighted", ["nnreal"]], ["del", "theorem", "am_gm_weighted", ["nnreal"]], ["add", "theorem", "arith_mean_le_rpow_mean", ["nnreal"]], ["add", "theorem", "geom_mean_le_arith_mean2_weighted", ["nnreal"]], ["add", "theorem", "geom_mean_le_arith_mean3_weighted", ["nnreal"]], ["add", "theorem", "geom_mean_le_arith_mean_weighted", ["nnreal"]], ["add", "theorem", "inner_le_Lp_mul_Lq", ["nnreal"]], ["add", "theorem", "is_greatest_Lp", ["nnreal"]], ["del", "theorem", "pow_am_le_am_pow", ["nnreal"]], ["add", "theorem", "pow_arith_mean_le_arith_mean_pow", ["nnreal"]], ["del", "theorem", "rpow_am_le_am_rpow", ["nnreal"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["nnreal"]], ["add", "theorem", "Lp_add_le", ["real"]], ["add", "theorem", "Lp_add_le_of_nonneg", ["real"]], ["del", "theorem", "am_gm2_weighted", ["real"]], ["del", "theorem", "am_gm_weighted", ["real"]], ["add", "theorem", "arith_mean_le_rpow_mean", ["real"]], ["del", "theorem", "fpow_am_le_am_fpow", ["real"]], ["add", "theorem", "fpow_arith_mean_le_arith_mean_fpow", ["real"]], ["add", "theorem", "geom_mean_le_arith_mean2_weighted", ["real"]], ["add", "theorem", "geom_mean_le_arith_mean_weighted", ["real"]], ["add", "theorem", "inner_le_Lp_mul_Lq", ["real"]], ["add", "theorem", "inner_le_Lp_mul_Lq_of_nonneg", ["real"]], ["del", "theorem", "pow_am_le_am_pow", ["real"]], ["del", "theorem", "pow_am_le_am_pow_of_even", ["real"]], ["add", "theorem", "pow_arith_mean_le_arith_mean_pow", ["real"]], ["add", "theorem", "pow_arith_mean_le_arith_mean_pow_of_even", ["real"]], ["del", "theorem", "rpow_am_le_am_rpow", ["real"]], ["add", "theorem", "rpow_arith_mean_le_arith_mean_rpow", ["real"]]]}]}, {"timestamp": 1591960243, "sha": "27a09466", "message": "chore(scripts): update nolints.txt (#3046)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591957167, "sha": "30e620ce", "message": "chore(data/real/cau_seq): linting (#3040)", "changes": [{"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["mod", "theorem", "cauchy₂", ["cau_seq"]], ["mod", "theorem", "cauchy₃", ["cau_seq"]], ["mod", "theorem", "equiv_def₃", ["cau_seq"]], ["mod", "def", "inv", ["cau_seq"]], ["mod", "def", "lim_zero", ["cau_seq"]], ["mod", "theorem", "cauchy₂", ["is_cau_seq"]], ["mod", "theorem", "cauchy₃", ["is_cau_seq"]]]}]}, {"timestamp": 1591954289, "sha": "0f6b3ca4", "message": "doc(data/complex/basic): docstrings and pp_nodots (#3044)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "def", "norm_sq", ["complex"]]]}]}, {"timestamp": 1591939963, "sha": "96676a76", "message": "chore(scripts): update nolints.txt (#3039)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591933782, "sha": "4ec7cc58", "message": "refactor(*): fix field names in `linear_map` and `submodule` (#3032)\n* `linear_map` now uses `map_add'` and `map_smul`';\n* `submodule` now `extends add_submonoid` and adds `smul_mem'`;\n* no more `submodule.is_add_subgroup` instance;\n* `open_subgroup` now uses bundled subgroups;\n* `is_linear_map` is not a `class` anymore: we had a couple of\n `instances` but zero lemmas taking it as a typeclass argument;\n* `subgroup.mem_coe` now takes `{g : G}` as it should, not `[g : G]`.", "changes": [{"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["mod", "def", "Ad", ["lie_algebra"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["del", "theorem", "map_add", ["is_linear_map"]], ["del", "theorem", "map_smul", ["is_linear_map"]], ["mod", "def", "mk'", ["is_linear_map"]], ["add", "structure", "is_linear_map", []], ["mod", "theorem", "is_linear", ["linear_map"]], ["mod", "theorem", "map_add", ["linear_map"]], ["mod", "theorem", "map_smul", ["linear_map"]], ["mod", "theorem", "add_mem", ["submodule"]], ["add", "theorem", "coe_set_eq", ["submodule"]], ["add", "theorem", "coe_sort_coe", ["submodule"]], ["add", "theorem", "coe_to_add_subgroup", ["submodule"]], ["mod", "theorem", "ext'", ["submodule"]], ["add", "theorem", "ext'_iff", ["submodule"]], ["mod", "theorem", "ext", ["submodule"]], ["mod", "theorem", "neg_mem_iff", ["submodule"]], ["mod", "theorem", "smul_mem", ["submodule"]], ["mod", "theorem", "sum_mem", ["submodule"]], ["add", "def", "to_add_subgroup", ["submodule"]], ["add", "theorem", "to_add_submonoid_eq", ["submodule"]], ["add", "theorem", "to_add_submonoid_injective", ["submodule"]], ["mod", "theorem", "zero_mem", ["submodule"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/enorm.lean", "newPath": "src/analysis/normed_space/enorm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "mem_coe", ["subgroup"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "map_add", ["linear_equiv"]], ["mod", "theorem", "map_smul", ["linear_equiv"]], ["mod", "def", "to_add_equiv", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_action.lean", "newPath": "src/linear_algebra/linear_action.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "span_int_eq", []]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["mod", "theorem", "is_open_of_open_subideal", ["ideal"]], ["add", "structure", "open_add_subgroup", []], ["del", "theorem", "coe_injective", ["open_subgroup"]], ["add", "theorem", "coe_subgroup_le", ["open_subgroup"]], ["add", "theorem", "coe_subset", ["open_subgroup"]], ["mod", "theorem", "ext'", ["open_subgroup"]], ["mod", "theorem", "ext", ["open_subgroup"]], ["add", "theorem", "ext_iff", ["open_subgroup"]], ["del", "theorem", "is_open_of_nonempty_open_subset", ["open_subgroup"]], ["del", "theorem", "is_open_of_open_subgroup", ["open_subgroup"]], ["del", "theorem", "le_iff", ["open_subgroup"]], ["add", "theorem", "mem_coe", ["open_subgroup"]], ["add", "theorem", "mem_coe_opens", ["open_subgroup"]], ["add", "theorem", "mem_coe_subgroup", ["open_subgroup"]], ["add", "structure", "open_subgroup", []], ["del", "def", "open_subgroup", []], ["add", "theorem", "is_open_mono", ["subgroup"]], ["add", "theorem", "is_open_of_mem_nhds", ["subgroup"]], ["add", "theorem", "is_open_of_open_subgroup", ["subgroup"]], ["add", "theorem", "is_open_mono", ["submodule"]], ["del", "theorem", "is_open_of_open_submodule", ["submodule"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}]}, {"timestamp": 1591929920, "sha": "338bbd20", "message": "chore(measure/theory): remove useless module instances (#3031)\nRemove useless `module` and `vector_space` instances, as these words are now synonyms of `semimodule`.", "changes": [{"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1591914726, "sha": "593f731d", "message": "chore(scripts): update nolints.txt (#3035)\nI am happy to remove some nolints for you!", "changes": []}, {"timestamp": 1591912593, "sha": "5444945d", "message": "chore(scripts): update nolints.txt (#3034)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591912591, "sha": "f71e3597", "message": "chore(ring_theory/power_series): avoid id in instances (#3033)\nThe power series instances contain a spurious `id`, that we remove.", "changes": [{"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1591907090, "sha": "9a7151c7", "message": "feat(data/finsupp): set.finite {m | m ≤ n} (#3029)", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "finite_le_nat", ["finsupp"]], ["add", "theorem", "finite_lt_nat", ["finsupp"]]]}]}, {"timestamp": 1591907088, "sha": "666b9e59", "message": "refactor(analysis/mean_inequalities): review (#3023)\nAlso add several lemmas to other files", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "div_mul_cancel_of_imp", []], ["add", "theorem", "mul_div_cancel_left_of_imp", []], ["add", "theorem", "mul_div_cancel_of_imp'", []], ["add", "theorem", "mul_div_cancel_of_imp", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_on_const", []], ["add", "theorem", "convex_on_id", []]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["mod", "theorem", "am_gm2_weighted", ["nnreal"]], ["mod", "theorem", "am_gm3_weighted", ["nnreal"]], ["mod", "theorem", "am_gm_weighted", ["nnreal"]], ["mod", "theorem", "pow_am_le_am_pow", ["nnreal"]], ["add", "theorem", "rpow_am_le_am_rpow", ["nnreal"]], ["mod", "theorem", "young_inequality", ["nnreal"]], ["mod", "theorem", "am_gm2_weighted", ["real"]], ["mod", "theorem", "am_gm_weighted", ["real"]], ["mod", "theorem", "fpow_am_le_am_fpow", ["real"]], ["mod", "theorem", "pow_am_le_am_pow", ["real"]], ["mod", "theorem", "pow_am_le_am_pow_of_even", ["real"]], ["add", "theorem", "rpow_am_le_am_rpow", ["real"]], ["mod", "theorem", "young_inequality", ["real"]], ["add", "theorem", "young_inequality_of_nonneg", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "rpow_add", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_iff", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_iff", ["nnreal"]], ["add", "theorem", "rpow_sub'", ["nnreal"]], ["add", "theorem", "rpow_sub", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_iff", ["real"]], ["add", "theorem", "rpow_lt_rpow_iff", ["real"]], ["add", "theorem", "rpow_sub'", ["real"]], ["add", "theorem", "rpow_sub", ["real"]]]}, {"oldPath": "src/data/real/conjugate_exponents.lean", "newPath": "src/data/real/conjugate_exponents.lean", "changes": [["add", "theorem", "conjugate_eq", ["real", "is_conjugate_exponent"]], ["add", "theorem", "mul_eq_add", ["real", "is_conjugate_exponent"]], ["add", "theorem", "nonneg", ["real", "is_conjugate_exponent"]], ["add", "theorem", "one_div_nonneg", ["real", "is_conjugate_exponent"]], ["add", "theorem", "sub_one_mul_conj", ["real", "is_conjugate_exponent"]], ["add", "theorem", "sub_one_pos", ["real", "is_conjugate_exponent"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "div_mul_cancel", ["nnreal"]], ["add", "theorem", "div_self_le", ["nnreal"]]]}]}, {"timestamp": 1591901638, "sha": "257d1b7c", "message": "feat(*): preparations for Caratheodory's convexity theorem (#3030)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "exists_pos_of_sum_zero_of_exists_nonzero", ["finset"]]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "apply_range_symm", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_apply_inl", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_apply_inr", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_symm_apply_of_mem", ["equiv", "set"]], ["add", "theorem", "sum_diff_subset_symm_apply_of_not_mem", ["equiv", "set"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "coe_mem", ["finset"]], ["add", "theorem", "filter_ne'", ["finset"]], ["add", "theorem", "filter_ne", ["finset"]], ["add", "theorem", "mk_coe", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "coe_inclusion", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_to_set_to_finset", ["finset"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "subset_subset_Union", ["set"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "exists_sum_is_basis", []], ["add", "theorem", "linear_dependent_iff", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "cardinal_le_dim_of_linear_independent'", []], ["add", "theorem", "cardinal_le_dim_of_linear_independent", []]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "inl", ["function", "embedding"]], ["add", "def", "inr", ["function", "embedding"]]]}]}, {"timestamp": 1591901636, "sha": "447a2d6c", "message": "chore(data/matrix/basic): move numeral section into diagonal (#3022)\nSince the numeral section defines numerals for matrices as scalar\nmultiples of `one_val`, which is the identity matrix, these are defined\nsolely for diagonal matrices of type `matrix n n r`. So the numeral\nsection should be in the diagonal section.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "bit0_val", ["matrix"]], ["mod", "theorem", "diagonal_add", ["matrix"]]]}]}, {"timestamp": 1591899552, "sha": "1df93013", "message": "feat(group_theory/semidirect_product): introduce semidirect_products of groups (#3028)", "changes": [{"oldPath": null, "newPath": "src/group_theory/semidirect_product.lean", "changes": [["add", "def", "inl", ["semidirect_product"]], ["add", "theorem", "inl_aut", ["semidirect_product"]], ["add", "theorem", "inl_inj", ["semidirect_product"]], ["add", "theorem", "inl_injective", ["semidirect_product"]], ["add", "theorem", "inl_left_mul_inr_right", ["semidirect_product"]], ["add", "def", "inr", ["semidirect_product"]], ["add", "theorem", "inr_inj", ["semidirect_product"]], ["add", "theorem", "inr_injective", ["semidirect_product"]], ["add", "theorem", "inv_left", ["semidirect_product"]], ["add", "theorem", "inv_right", ["semidirect_product"]], ["add", "theorem", "left_inl", ["semidirect_product"]], ["add", "theorem", "left_inr", ["semidirect_product"]], ["add", "def", "lift", ["semidirect_product"]], ["add", "theorem", "lift_comp_inl", ["semidirect_product"]], ["add", "theorem", "lift_comp_inr", ["semidirect_product"]], ["add", "theorem", "lift_inl", ["semidirect_product"]], ["add", "theorem", "lift_inr", ["semidirect_product"]], ["add", "theorem", "lift_unique", ["semidirect_product"]], ["add", "theorem", "mul_left", ["semidirect_product"]], ["add", "theorem", "mul_right", ["semidirect_product"]], ["add", "theorem", "one_left", ["semidirect_product"]], ["add", "theorem", "one_right", ["semidirect_product"]], ["add", "theorem", "range_inl_eq_ker_right_hom", ["semidirect_product"]], ["add", "def", "right_hom", ["semidirect_product"]], ["add", "theorem", "right_hom_comp_inl", ["semidirect_product"]], ["add", "theorem", "right_hom_comp_inr", ["semidirect_product"]], ["add", "theorem", "right_hom_eq_right", ["semidirect_product"]], ["add", "theorem", "right_hom_inl", ["semidirect_product"]], ["add", "theorem", "right_hom_inr", ["semidirect_product"]], ["add", "theorem", "right_hom_surjective", ["semidirect_product"]], ["add", "theorem", "right_inl", ["semidirect_product"]], ["add", "theorem", "right_inr", ["semidirect_product"]], ["add", "structure", "semidirect_product", []]]}]}, {"timestamp": 1591889728, "sha": "ce48b6ba", "message": "chore(data/finsupp): drop `finsupp.module` and `vector_space` (#3009)\nThese instances are not needed as `module` and `vector_space` are abbreviations for `semimodule`.\nAlso add two bundled versions of `eval`: as `add_monoid_hom` and as `linear_map`.", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "coe_leval'", ["finsupp"]], ["add", "theorem", "coe_leval", ["finsupp"]], ["add", "def", "eval_add_hom", ["finsupp"]], ["add", "theorem", "eval_add_hom_apply", ["finsupp"]], ["add", "def", "leval'", ["finsupp"]], ["add", "def", "leval", ["finsupp"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}]}, {"timestamp": 1591875678, "sha": "cf0c6b83", "message": "chore(*): use prod and sum notation (#3027)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_Ico_id_eq_fact", ["finset"]], ["mod", "theorem", "prod_mul_distrib", ["finset"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["mod", "theorem", "bound", ["continuous_multilinear_map"]], ["mod", "theorem", "le_op_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "norm_def", ["continuous_multilinear_map"]], ["mod", "def", "op_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "op_norm_le_bound", ["continuous_multilinear_map"]], ["mod", "theorem", "ratio_le_op_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "continuous_of_bound", ["multilinear_map"]], ["mod", "def", "mk_continuous", ["multilinear_map"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "exp_sum", ["complex"]], ["mod", "theorem", "exp_sum", ["real"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["mod", "theorem", "prod_univ_zero", ["fin"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "as_sum", ["mv_polynomial"]], ["mod", "theorem", "support_sum_monomial_coeff", ["mv_polynomial"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/deprecated/submonoid.lean", "newPath": "src/deprecated/submonoid.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "det_diagonal", ["matrix"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}]}, {"timestamp": 1591868591, "sha": "5129aed5", "message": "chore(algebra/group/to_additive): improve warning message (#3024)\nAlso prevent `group_theory/subgroup` from generating this warning.", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1591862613, "sha": "ade196f8", "message": "chore(scripts): update nolints.txt (#3026)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591857399, "sha": "8863666a", "message": "feat(ring_theory/ideals): prod_dvd_of_coprime (#2815)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "pairwise_coprime_X_sub", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/coprime.lean", "changes": [["add", "theorem", "prod_dvd_of_coprime", ["finset"]], ["add", "theorem", "prod_dvd_of_coprime", ["fintype"]], ["add", "theorem", "dvd_of_dvd_mul_left", ["is_coprime"]], ["add", "theorem", "dvd_of_dvd_mul_right", ["is_coprime"]], ["add", "theorem", "is_unit_of_dvd", ["is_coprime"]], ["add", "theorem", "map", ["is_coprime"]], ["add", "theorem", "mul_dvd", ["is_coprime"]], ["add", "theorem", "mul_left", ["is_coprime"]], ["add", "theorem", "mul_left_iff", ["is_coprime"]], ["add", "theorem", "mul_right", ["is_coprime"]], ["add", "theorem", "mul_right_iff", ["is_coprime"]], ["add", "theorem", "of_mul_left_left", ["is_coprime"]], ["add", "theorem", "of_mul_left_right", ["is_coprime"]], ["add", "theorem", "of_mul_right_left", ["is_coprime"]], ["add", "theorem", "of_mul_right_right", ["is_coprime"]], ["add", "theorem", "of_prod_left", ["is_coprime"]], ["add", "theorem", "of_prod_right", ["is_coprime"]], ["add", "theorem", "pow", ["is_coprime"]], ["add", "theorem", "pow_left", ["is_coprime"]], ["add", "theorem", "pow_right", ["is_coprime"]], ["add", "theorem", "prod_left", ["is_coprime"]], ["add", "theorem", "prod_left_iff", ["is_coprime"]], ["add", "theorem", "prod_right", ["is_coprime"]], ["add", "theorem", "prod_right_iff", ["is_coprime"]], ["add", "theorem", "symm", ["is_coprime"]], ["add", "def", "is_coprime", []], ["add", "theorem", "is_coprime_comm", []], ["add", "theorem", "is_coprime_one_left", []], ["add", "theorem", "is_coprime_one_right", []], ["add", "theorem", "is_coprime_self", []], ["add", "theorem", "is_coprime_zero_left", []], ["add", "theorem", "is_coprime_zero_right", []], ["add", "theorem", "is_coprime_iff_coprime", ["nat"]]]}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["del", "def", "is_coprime", ["ideal"]], ["del", "theorem", "is_coprime_def", ["ideal"]], ["del", "theorem", "is_coprime_self", ["ideal"]]]}]}, {"timestamp": 1591815826, "sha": "2779093b", "message": "feat(linear_algebra/matrix): matrix has finite dim (#3013)\nUsing the fact that currying is a linear operation, we give matrix\na finite dimensional instance. This allows one to invoke `findim`\non matrices, giving the expected dimensions for a finite-dim matrix.\nThe import is changed to linear_algebra.finite_dimension,\nwhich brings in the previous linear_algebra.dimension import.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "findim_matrix", ["matrix"]]]}]}, {"timestamp": 1591804459, "sha": "067a96b7", "message": "chore(*): update to lean 3.16.1c (#3020)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1591804457, "sha": "76e7d298", "message": "chore(scripts): update nolints.txt (#3019)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591804455, "sha": "f7654b3f", "message": "feat(tactic/generalizes): tactic for generalizing over multiple expressions (#2982)\nThis commit adds a tactic `generalizes` which works like `generalize` but for multiple expressions at once. The tactic is more powerful than calling `generalize` multiple times since this usually fails when there are dependencies between the expressions. By contrast, `generalizes` handles at least some such situations.", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/generalizes.lean", "changes": []}, {"oldPath": null, "newPath": "test/generalizes.lean", "changes": [["add", "inductive", "eq", ["Vec"]], ["add", "theorem", "eq_cons_inversion", ["Vec"]], ["add", "inductive", "fancy_unit", ["Vec"]], ["add", "theorem", "test₁", ["Vec"]], ["add", "theorem", "test₂", ["Vec"]], ["add", "inductive", "Vec", []], ["add", "theorem", "example_from_docs₁", []], ["add", "theorem", "example_from_docs₂", []]]}]}, {"timestamp": 1591799079, "sha": "daed8a41", "message": "style(*): use rcases patterns with ext (#3018)", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1591799077, "sha": "026d639f", "message": "ci(build.yml): add -T100000 to test step (#3017)\ncf. #2276. This will also prevent some confusing timeouts, see e.g. https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Tests.20fail", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1591793403, "sha": "614d1cad", "message": "chore(*): update to lean 3.16.0 (#3016)\nThe only change relevant to mathlib is that the precedence of unary `-` has changed, so that `-a^n` parses as `-(a^n)` and not (as formerly) `(-a)^n`.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "neg_one_pow_eq_pow_mod_two", []]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}]}, {"timestamp": 1591793401, "sha": "4b622613", "message": "chore(algebra/field): deduplicate with group_with_zero (#3015)\nFor historical reasons there are lots of lemmas we prove for `group_with_zero`, then again for a `division_ring`. Merge some of them.", "changes": [{"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "div_div_div_div_eq", []], ["del", "theorem", "div_div_eq_div_mul", []], ["del", "theorem", "div_div_eq_mul_div", []], ["del", "theorem", "div_eq_mul_one_div", []], ["del", "theorem", "div_helper", []], ["del", "theorem", "div_mul_cancel", []], ["del", "theorem", "div_mul_div", []], ["del", "theorem", "div_mul_eq_div_mul_one_div", []], ["del", "theorem", "div_mul_eq_mul_div", []], ["del", "theorem", "div_mul_eq_mul_div_comm", []], ["del", "theorem", "div_mul_left", []], ["del", "theorem", "div_mul_right", []], ["del", "theorem", "div_one", []], ["del", "theorem", "div_self", []], ["del", "theorem", "division_def", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_left", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_right", []], ["del", "theorem", "eq_zero_of_one_div_eq_zero", []], ["del", "theorem", "inv_mul_cancel", []], ["del", "theorem", "inv_ne_zero", []], ["del", "theorem", "inv_one", []], ["del", "theorem", "mul_div_assoc", []], ["del", "theorem", "mul_div_cancel'", []], ["del", "theorem", "mul_div_cancel", []], ["del", "theorem", "mul_div_cancel_left", []], ["del", "theorem", "mul_div_mul_left", []], ["del", "theorem", "mul_div_mul_right", []], ["del", "theorem", "mul_eq_mul_of_div_eq_div", []], ["del", "theorem", "mul_inv_cancel", []], ["del", "theorem", "mul_one_div_cancel", []], ["del", "theorem", "ne_zero_of_one_div_ne_zero", []], ["del", "theorem", "one_div_mul_cancel", []], ["del", "theorem", "one_div_mul_one_div", []], ["del", "theorem", "one_div_ne_zero", []], ["del", "theorem", "one_div_one", []], ["del", "theorem", "one_inv_eq", []], ["del", "theorem", "zero_div", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["del", "theorem", "div_div_div_div_eq'", []], ["add", "theorem", "div_div_div_div_eq", []], ["del", "theorem", "div_div_eq_div_mul'", []], ["add", "theorem", "div_div_eq_div_mul", []], ["del", "theorem", "div_div_eq_mul_div'", []], ["add", "theorem", "div_div_eq_mul_div", []], ["del", "theorem", "div_eq_mul_one_div'", []], ["add", "theorem", "div_eq_mul_one_div", []], ["del", "theorem", "div_helper'", []], ["add", "theorem", "div_helper", []], ["del", "theorem", "div_mul_cancel'", []], ["add", "theorem", "div_mul_cancel", []], ["del", "theorem", "div_mul_div'", []], ["add", "theorem", "div_mul_div", []], ["del", "theorem", "div_mul_eq_div_mul_one_div'", []], ["add", "theorem", "div_mul_eq_div_mul_one_div", []], ["del", "theorem", "div_mul_eq_mul_div'", []], ["add", "theorem", "div_mul_eq_mul_div", []], ["del", "theorem", "div_mul_eq_mul_div_comm'", []], ["add", "theorem", "div_mul_eq_mul_div_comm", []], ["del", "theorem", "div_mul_left'", []], ["add", "theorem", "div_mul_left", []], ["del", "theorem", "div_mul_right'", []], ["add", "theorem", "div_mul_right", []], ["del", "theorem", "div_one'", []], ["add", "theorem", "div_one", []], ["del", "theorem", "div_self'", []], ["add", "theorem", "div_self", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_left'", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_left", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_right'", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_right", []], ["del", "theorem", "eq_zero_of_one_div_eq_zero'", []], ["add", "theorem", "eq_zero_of_one_div_eq_zero", []], ["del", "theorem", "inv_mul_cancel'", []], ["add", "theorem", "inv_mul_cancel", []], ["del", "theorem", "inv_ne_zero'", []], ["add", "theorem", "inv_ne_zero", []], ["del", "theorem", "inv_one'", []], ["add", "theorem", "inv_one", []], ["del", "theorem", "mul_div_assoc''", []], ["add", "theorem", "mul_div_assoc", []], ["del", "theorem", "mul_div_cancel'''", []], ["del", "theorem", "mul_div_cancel''", []], ["add", "theorem", "mul_div_cancel'", []], ["add", "theorem", "mul_div_cancel", []], ["del", "theorem", "mul_div_cancel_left'", []], ["add", "theorem", "mul_div_cancel_left", []], ["del", "theorem", "mul_div_mul_left'", []], ["add", "theorem", "mul_div_mul_left", []], ["del", "theorem", "mul_div_mul_right'", []], ["add", "theorem", "mul_div_mul_right", []], ["del", "theorem", "mul_eq_mul_of_div_eq_div'", []], ["add", "theorem", "mul_eq_mul_of_div_eq_div", []], ["del", "theorem", "mul_inv_cancel'", []], ["add", "theorem", "mul_inv_cancel", []], ["del", "theorem", "mul_one_div_cancel'", []], ["add", "theorem", "mul_one_div_cancel", []], ["del", "theorem", "ne_zero_of_one_div_ne_zero'", []], ["add", "theorem", "ne_zero_of_one_div_ne_zero", []], ["del", "theorem", "one_div_mul_cancel'", []], ["add", "theorem", "one_div_mul_cancel", []], ["del", "theorem", "one_div_mul_one_div'", []], ["add", "theorem", "one_div_mul_one_div", []], ["del", "theorem", "one_div_ne_zero'", []], ["add", "theorem", "one_div_ne_zero", []], ["del", "theorem", "one_div_one'", []], ["add", "theorem", "one_div_one", []], ["add", "theorem", "one_inv_eq", []], ["del", "theorem", "zero_div'", []], ["add", "theorem", "zero_div", []]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": []}, {"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": []}]}, {"timestamp": 1591793399, "sha": "b427ebf9", "message": "chore(data/equiv/basic): add many docstrings, review (#3008)\nNon-docstring changes:\n* drop `decidable_eq_of_equiv` (was a copy of `equiv.decidable_eq`);\n* rename `inhabited_of_equiv` to `equiv.inhabited`;\n* rename `unique_of_equiv` to `equiv.unique`, take `unique β` as an\n instance argument;\n* better defeq for `equiv.list_equiv_of_equiv`;\n* use `coe` instead of `subtype.val` in `equiv.set.union'`;\n* use `s ∩ t ⊆ ∅` instead of `s ∩ t = ∅` in `equiv.set.union`;\n this way it agrees with `disjoint`;\n* use `[decidable_pred (λ x, x ∈ s)]` instead of `[decidable_pred s]`\n in `equiv.set.union`;\n* use `coe` instead of `subtype.val` in `equiv.set.sep`;\n* make `f` an explicit argument in `equiv.of_bijective f hf`;", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "Pi_congr_right", ["equiv"]], ["add", "theorem", "coe_of_bijective", ["equiv"]], ["del", "def", "decidable_eq_of_equiv", ["equiv"]], ["del", "def", "equiv_pempty", ["equiv"]], ["del", "def", "inhabited_of_equiv", ["equiv"]], ["mod", "def", "list_equiv_of_equiv", ["equiv"]], ["del", "theorem", "of_bijective_to_fun", ["equiv"]], ["mod", "def", "psigma_equiv_sigma", ["equiv"]], ["mod", "theorem", "union_apply_left", ["equiv", "set"]], ["mod", "theorem", "union_apply_right", ["equiv", "set"]], ["mod", "def", "sigma_congr_right", ["equiv"]], ["mod", "def", "subtype_congr_right", ["equiv"]], ["add", "def", "subtype_equiv_of_subtype", ["equiv"]], ["del", "def", "unique_of_equiv", ["equiv"]], ["add", "def", "{u'", ["equiv"]]]}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid/basic.lean", "newPath": "src/data/setoid/basic.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "mk_subtype_of_equiv", ["cardinal"]], ["mod", "theorem", "mk_union_add_mk_inter", ["cardinal"]], ["mod", "theorem", "mk_union_of_disjoint", ["cardinal"]]]}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}]}, {"timestamp": 1591793397, "sha": "671284e3", "message": "feat(control/equiv_functor/instances): allow equiv_rw on finset (#2997)\nAllows moving `finset` over an `equiv` using `equiv_rw`, as requested by @jcommelin.\ne.g.\n```\nimport data.finset\nimport tactic.equiv_rw\nexample (σ τ : Type) (e : σ ≃ τ) : finset σ ≃ finset τ :=\nby { equiv_rw e, refl, }\n```", "changes": [{"oldPath": "src/control/equiv_functor/instances.lean", "newPath": "src/control/equiv_functor/instances.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "map_refl", ["finset"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "refl_to_embedding", ["equiv"]], ["add", "theorem", "trans_to_embedding", ["equiv"]]]}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}]}, {"timestamp": 1591787990, "sha": "b932a510", "message": "feat(data/set/function): add lemmas about `semiconj` (#3007)\nAlso redefine `set.maps_to` to avoid unfolding `mem_preimage`.", "changes": [{"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "bij_on_image", ["function", "semiconj"]], ["add", "theorem", "bij_on_range", ["function", "semiconj"]], ["add", "theorem", "inj_on_image", ["function", "semiconj"]], ["add", "theorem", "inj_on_preimage", ["function", "semiconj"]], ["add", "theorem", "inj_on_range", ["function", "semiconj"]], ["add", "theorem", "maps_to_image", ["function", "semiconj"]], ["add", "theorem", "maps_to_preimage", ["function", "semiconj"]], ["add", "theorem", "maps_to_range", ["function", "semiconj"]], ["add", "theorem", "surj_on_image", ["function", "semiconj"]], ["add", "theorem", "surj_on_range", ["function", "semiconj"]], ["mod", "theorem", "bij_on", ["set", "inv_on"]], ["mod", "def", "maps_to", ["set"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}]}, {"timestamp": 1591782437, "sha": "836c0a26", "message": "chore(*): use sum notation (#3014)\nThe biggest field test of the new summation notation.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "exists_le_of_sum_le", ["finset"]]]}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "sum_mem", ["convex"]], ["mod", "theorem", "center_mass_eq_of_sum_1", ["finset"]], ["mod", "theorem", "center_mass_insert", ["finset"]]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": [["mod", "theorem", "am_gm_weighted", ["nnreal"]], ["mod", "theorem", "pow_am_le_am_pow", ["nnreal"]]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "nnnorm_sum_le", []], ["mod", "theorem", "norm_sum_le", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["mod", "theorem", "sum_blocks_fun", ["composition"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "def", "exp'", ["complex"]], ["mod", "theorem", "exp_sum", ["complex"]], ["mod", "theorem", "is_cau_exp", ["complex"]], ["mod", "theorem", "is_cau_geo_series_const", []], ["mod", "theorem", "is_cau_series_of_abv_cau", []], ["mod", "theorem", "exp_sum", ["real"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["mod", "theorem", "sum_totient", ["nat"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "trace_diag", ["matrix"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["mod", "theorem", "map_sum_finset_aux", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "def", "of_fintype", ["pmf"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/representation_theory/maschke.lean", "newPath": "src/representation_theory/maschke.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "def", "has_sum", []], ["mod", "theorem", "has_sum_fintype", []], ["mod", "theorem", "has_sum_sum_of_ne_finset_zero", []], ["mod", "theorem", "tsum_fintype", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1591778993, "sha": "d9934b26", "message": "feat(linear_algebra/basic): curry is linear_equiv (#3012)\nCurrying provides a linear_equiv. This can be used to show that\nmatrix lookup is a linear operation. This should allow to easily\nprovide a finite_dimensional instance for matrices.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_uncurry", ["linear_equiv"]], ["add", "theorem", "coe_uncurry_symm", ["linear_equiv"]]]}]}, {"timestamp": 1591773339, "sha": "6a0412e9", "message": "chore(data/fintype): generalise `to_finset_card` (#2316)\nSlight generalisation of a lemma, allowing a more flexible `fintype` instance.\nAlso americanises some spelling. :-)", "changes": [{"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "to_finset_card", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "to_finset_card", ["set"]], ["mod", "theorem", "to_finset_inter", ["set"]]]}]}, {"timestamp": 1591747567, "sha": "f1df14c2", "message": "feat(group_theory/subgroup): normal_closure and gpowers (#2959)\nTransfer some more proofs from `deprecated/subgroup`", "changes": [{"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["del", "theorem", "conj_mem_conjugates_of_set", ["group"]], ["del", "def", "conjugates", ["group"]], ["del", "def", "conjugates_of_set", ["group"]], ["del", "theorem", "conjugates_of_set_mono", ["group"]], ["add", "theorem", "conjugates_of_set_subset'", ["group"]], ["del", "theorem", "conjugates_of_set_subset", ["group"]], ["del", "theorem", "mem_conjugates_of_set_iff", ["group"]], ["del", "theorem", "mem_conjugates_self", ["group"]], ["del", "theorem", "subset_conjugates_of_set", ["group"]], ["del", "theorem", "injective_mul", []]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "coe_gsmul", ["add_subgroup"]], ["add", "theorem", "coe_smul", ["add_subgroup"]], ["add", "def", "gmultiples", ["add_subgroup"]], ["add", "theorem", "gmultiples_eq_closure", ["add_subgroup"]], ["add", "theorem", "mem_gmultiples", ["add_subgroup"]], ["add", "structure", "normal", ["add_subgroup"]], ["add", "theorem", "conj_mem_conjugates_of_set", ["group"]], ["add", "def", "conjugates", ["group"]], ["add", "def", "conjugates_of_set", ["group"]], ["add", "theorem", "conjugates_of_set_mono", ["group"]], ["add", "theorem", "conjugates_of_set_subset", ["group"]], ["add", "theorem", "conjugates_subset_normal", ["group"]], ["add", "theorem", "mem_conjugates_of_set_iff", ["group"]], ["add", "theorem", "mem_conjugates_self", ["group"]], ["add", "theorem", "subset_conjugates_of_set", ["group"]], ["mod", "theorem", "normal_ker", ["monoid_hom"]], ["mod", "def", "range", ["monoid_hom"]], ["add", "theorem", "range_eq_map", ["monoid_hom"]], ["mod", "theorem", "bot_normal", ["subgroup"]], ["add", "theorem", "coe_gpow", ["subgroup"]], ["mod", "theorem", "coe_inv", ["subgroup"]], ["mod", "theorem", "coe_mk", ["subgroup"]], ["mod", "theorem", "coe_mul", ["subgroup"]], ["mod", "theorem", "coe_one", ["subgroup"]], ["add", "theorem", "coe_pow", ["subgroup"]], ["add", "theorem", "conjugates_of_set_subset_normal_closure", ["subgroup"]], ["add", "def", "gpowers", ["subgroup"]], ["add", "theorem", "gpowers_eq_closure", ["subgroup"]], ["mod", "theorem", "le_normalizer_of_normal", ["subgroup"]], ["add", "theorem", "mem_gpowers", ["subgroup"]], ["add", "theorem", "comap", ["subgroup", "normal"]], ["del", "theorem", "conj_mem", ["subgroup", "normal"]], ["add", "structure", "normal", ["subgroup"]], ["add", "def", "normal_closure", ["subgroup"]], ["add", "theorem", "normal_closure_eq_infi", ["subgroup"]], ["add", "theorem", "normal_closure_le_normal", ["subgroup"]], ["add", "theorem", "normal_closure_mono", ["subgroup"]], ["add", "theorem", "normal_closure_normal", ["subgroup"]], ["add", "theorem", "normal_closure_subset_iff", ["subgroup"]], ["add", "theorem", "normal_comap", ["subgroup"]], ["add", "def", "of_div", ["subgroup"]], ["add", "theorem", "subset_normal_closure", ["subgroup"]]]}]}, {"timestamp": 1591739617, "sha": "4e1558bf", "message": "chore(algebra/group_power): simp attribute on nsmul_eq_mul and gsmul_eq_mul (#2983)\nAlso fix the resulting lint failures, corresponding to the fact that several lemmas are not in simp normal form any more.", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "cast_int_mul_cast_int_mul", ["commute"]], ["add", "theorem", "cast_int_mul_left", ["commute"]], ["add", "theorem", "cast_int_mul_right", ["commute"]], ["add", "theorem", "cast_int_mul_self", ["commute"]], ["add", "theorem", "cast_nat_mul_cast_nat_mul", ["commute"]], ["add", "theorem", "cast_nat_mul_left", ["commute"]], ["add", "theorem", "cast_nat_mul_right", ["commute"]], ["add", "theorem", "cast_nat_mul_self", ["commute"]], ["del", "theorem", "gsmul_gsmul", ["commute"]], ["del", "theorem", "gsmul_left", ["commute"]], ["del", "theorem", "gsmul_right", ["commute"]], ["del", "theorem", "gsmul_self", ["commute"]], ["del", "theorem", "nsmul_left", ["commute"]], ["del", "theorem", "nsmul_nsmul", ["commute"]], ["del", "theorem", "nsmul_right", ["commute"]], ["del", "theorem", "nsmul_self", ["commute"]], ["add", "theorem", "self_cast_int_mul", ["commute"]], ["add", "theorem", "self_cast_int_mul_cast_int_mul", ["commute"]], ["add", "theorem", "self_cast_nat_mul", ["commute"]], ["add", "theorem", "self_cast_nat_mul_cast_nat_mul", ["commute"]], ["del", "theorem", "self_gsmul", ["commute"]], ["del", "theorem", "self_gsmul_gsmul", ["commute"]], ["del", "theorem", "self_nsmul", ["commute"]], ["del", "theorem", "self_nsmul_nsmul", ["commute"]], ["mod", "theorem", "gsmul_eq_mul", []], ["mod", "theorem", "nsmul_eq_mul", ["nat"]], ["mod", "theorem", "nsmul_eq_mul", []], ["add", "theorem", "cast_int_mul_cast_int_mul", ["semiconj_by"]], ["add", "theorem", "cast_int_mul_left", ["semiconj_by"]], ["add", "theorem", "cast_int_mul_right", ["semiconj_by"]], ["add", "theorem", "cast_nat_mul_cast_nat_mul", ["semiconj_by"]], ["add", "theorem", "cast_nat_mul_left", ["semiconj_by"]], ["add", "theorem", "cast_nat_mul_right", ["semiconj_by"]], ["del", "theorem", "gsmul_gsmul", ["semiconj_by"]], ["del", "theorem", "gsmul_left", ["semiconj_by"]], ["del", "theorem", "gsmul_right", ["semiconj_by"]], ["del", "theorem", "nsmul_left", ["semiconj_by"]], ["del", "theorem", "nsmul_nsmul", ["semiconj_by"]], ["del", "theorem", "nsmul_right", ["semiconj_by"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["del", "theorem", "coe_gsmul", ["real", "angle"]], ["add", "theorem", "coe_int_mul_eq_gsmul", ["real", "angle"]], ["add", "theorem", "coe_nat_mul_eq_nsmul", ["real", "angle"]], ["del", "theorem", "coe_smul", ["real", "angle"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1591733818, "sha": "a02ab48a", "message": "refactor(group_theory/subgroup): swap `mul_mem_cancel_left/right` (#3011)\nThis way the name follows the position of the term we cancel.", "changes": [{"oldPath": "src/deprecated/subgroup.lean", "newPath": "src/deprecated/subgroup.lean", "changes": [["mod", "theorem", "mul_mem_cancel_left", ["is_subgroup"]], ["mod", "theorem", "mul_mem_cancel_right", ["is_subgroup"]]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "inv_mem_iff", ["subgroup"]], ["mod", "theorem", "mul_mem_cancel_left", ["subgroup"]], ["mod", "theorem", "mul_mem_cancel_right", ["subgroup"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1591731391, "sha": "df34ee20", "message": "chore(scripts): update nolints.txt (#3010)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591724204, "sha": "1a4f0c22", "message": "refactor(algebra/ordered_group): multiplicative versions of ordered monoids/groups (#2844)\nThis PR defines multiplicative versions of ordered monoids and groups. It also lints the file.", "changes": [{"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["del", "theorem", "add_eq_zero_iff'", []], ["del", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg", []], ["del", "theorem", "add_eq_zero_iff_eq_zero_of_nonneg", []], ["del", "theorem", "add_le_add'", []], ["del", "theorem", "add_le_add", []], ["del", "theorem", "add_le_add_iff_left", []], ["del", "theorem", "add_le_add_iff_right", []], ["del", "theorem", "add_le_add_left'", []], ["del", "theorem", "add_le_add_left", []], ["del", "theorem", "add_le_add_right'", []], ["del", "theorem", "add_le_add_right", []], ["del", "theorem", "add_le_add_three", []], ["del", "theorem", "add_le_iff_nonpos_left", []], ["del", "theorem", "add_le_iff_nonpos_right", []], ["del", "theorem", "add_le_of_le_neg_add", []], ["del", "theorem", "add_le_of_le_of_nonpos'", []], ["del", "theorem", "add_le_of_le_of_nonpos", []], ["del", "theorem", "add_le_of_nonpos_of_le'", []], ["del", "theorem", "add_le_of_nonpos_of_le", []], ["del", "theorem", "add_lt_add", []], ["del", "theorem", "add_lt_add_iff_left", []], ["del", "theorem", "add_lt_add_iff_right", []], ["del", "theorem", "add_lt_add_left", []], ["del", "theorem", "add_lt_add_of_le_of_lt", []], ["del", "theorem", "add_lt_add_of_lt_of_le", []], ["del", "theorem", "add_lt_add_right", []], ["del", "theorem", "add_lt_iff_neg_left", []], ["del", "theorem", "add_lt_iff_neg_right", []], ["del", "theorem", "add_lt_of_le_of_neg", []], ["del", "theorem", "add_lt_of_lt_neg_add", []], ["del", "theorem", "add_lt_of_lt_of_neg'", []], ["del", "theorem", "add_lt_of_lt_of_neg", []], ["del", "theorem", "add_lt_of_lt_of_nonpos'", []], ["del", "theorem", "add_lt_of_lt_of_nonpos", []], ["del", "theorem", "add_lt_of_neg_of_le", []], ["del", "theorem", "add_lt_of_neg_of_lt'", []], ["del", "theorem", "add_lt_of_neg_of_lt", []], ["del", "theorem", "add_lt_of_nonpos_of_lt'", []], ["del", "theorem", "add_lt_of_nonpos_of_lt", []], ["del", "theorem", "add_neg'", []], ["del", "theorem", "add_neg", []], ["del", "theorem", "add_neg_le_iff_le_add'", []], ["del", "theorem", "add_neg_le_iff_le_add", []], ["del", "theorem", "add_neg_of_neg_of_nonpos'", []], ["del", "theorem", "add_neg_of_neg_of_nonpos", []], ["del", "theorem", "add_neg_of_nonpos_of_neg'", []], ["del", "theorem", "add_neg_of_nonpos_of_neg", []], ["del", "theorem", "add_nonneg'", []], ["del", "theorem", "add_nonneg", []], ["del", "theorem", "add_nonpos'", []], ["del", "theorem", "add_nonpos", []], ["del", "theorem", "add_pos'", []], ["del", "theorem", "add_pos", []], ["del", "theorem", "add_pos_of_nonneg_of_pos'", []], ["del", "theorem", "add_pos_of_nonneg_of_pos", []], ["del", "theorem", "add_pos_of_pos_of_nonneg'", []], ["del", "theorem", "add_pos_of_pos_of_nonneg", []], ["mod", "theorem", "bit0_pos", []], ["mod", "theorem", "dist_bdd_within_interval", []], ["add", "theorem", "inv_inv_of_one_lt", []], ["add", "theorem", "inv_le'", []], ["add", "theorem", "inv_le_iff_one_le_mul", []], ["add", "theorem", "inv_le_inv'", []], ["add", "theorem", "inv_le_inv_iff", []], ["add", "theorem", "inv_le_of_inv_le", []], ["add", "theorem", "inv_le_one'", []], ["add", "theorem", "inv_le_one_of_one_le", []], ["add", "theorem", "inv_le_self", []], ["add", "theorem", "inv_lt'", []], ["add", "theorem", "inv_lt_inv'", []], ["add", "theorem", "inv_lt_inv_iff", []], ["add", "theorem", "inv_lt_of_inv_lt", []], ["add", "theorem", "inv_lt_one'", []], ["add", "theorem", "inv_lt_one_iff_one_lt", []], ["add", "theorem", "inv_mul_le_iff_le_mul'", []], ["add", "theorem", "inv_mul_le_iff_le_mul", []], ["add", "theorem", "inv_mul_le_left_of_le_mul", []], ["add", "theorem", "inv_mul_le_of_le_mul", []], ["add", "theorem", "inv_mul_le_right_of_le_mul", []], ["add", "theorem", "inv_mul_lt_iff_lt_mul", []], ["add", "theorem", "inv_mul_lt_iff_lt_mul_right", []], ["add", "theorem", "inv_mul_lt_left_of_lt_mul", []], ["add", "theorem", "inv_mul_lt_of_lt_mul", []], ["add", "theorem", "inv_mul_lt_right_of_lt_mul", []], ["add", "theorem", "inv_of_one_lt_inv", []], ["del", "theorem", "le_add_iff_nonneg_left", []], ["del", "theorem", "le_add_iff_nonneg_right", []], ["del", "theorem", "le_add_of_le_of_nonneg'", []], ["del", "theorem", "le_add_of_le_of_nonneg", []], ["del", "theorem", "le_add_of_neg_add_le", []], ["del", "theorem", "le_add_of_neg_add_le_left", []], ["del", "theorem", "le_add_of_neg_add_le_right", []], ["del", "theorem", "le_add_of_nonneg_left'", []], ["del", "theorem", "le_add_of_nonneg_left", []], ["del", "theorem", "le_add_of_nonneg_of_le'", []], ["del", "theorem", "le_add_of_nonneg_of_le", []], ["del", "theorem", "le_add_of_nonneg_right'", []], ["del", "theorem", "le_add_of_nonneg_right", []], ["add", "theorem", "le_inv'", []], ["add", "theorem", "le_inv_iff_mul_le_one", []], ["add", "theorem", "le_inv_mul_iff_mul_le", []], ["add", "theorem", "le_inv_mul_of_mul_le", []], ["add", "theorem", "le_inv_of_le_inv", []], ["add", "theorem", "le_mul_iff_one_le_left'", []], ["add", "theorem", "le_mul_iff_one_le_right'", []], ["add", "theorem", "le_mul_of_inv_mul_le", []], ["add", "theorem", "le_mul_of_inv_mul_le_left", []], ["add", "theorem", "le_mul_of_inv_mul_le_right", []], ["add", "theorem", "le_mul_of_le_of_one_le'", []], ["add", "theorem", "le_mul_of_le_of_one_le", []], ["add", "theorem", "le_mul_of_one_le_left''", []], ["add", "theorem", "le_mul_of_one_le_left", []], ["add", "theorem", "le_mul_of_one_le_of_le'", []], ["add", "theorem", "le_mul_of_one_le_of_le", []], ["add", "theorem", "le_mul_of_one_le_right''", []], ["add", "theorem", "le_mul_of_one_le_right", []], ["del", "theorem", "le_neg", []], ["del", "theorem", "le_neg_add_iff_add_le", []], ["del", "theorem", "le_neg_add_of_add_le", []], ["del", "theorem", "le_neg_iff_add_nonpos", []], ["del", "theorem", "le_neg_of_le_neg", []], ["del", "theorem", "le_of_add_le_add_left", []], ["del", "theorem", "le_of_add_le_add_right", []], ["add", "theorem", "le_of_inv_le_inv", []], ["add", "theorem", "le_of_mul_le_mul_left'", []], ["add", "theorem", "le_of_mul_le_mul_right'", []], ["del", "theorem", "le_of_neg_le_neg", []], ["add", "theorem", "le_one_of_one_le_inv", []], ["del", "theorem", "lt_add_iff_pos_left", []], ["del", "theorem", "lt_add_iff_pos_right", []], ["del", "theorem", "lt_add_of_le_of_pos", []], ["del", "theorem", "lt_add_of_lt_of_nonneg'", []], ["del", "theorem", "lt_add_of_lt_of_nonneg", []], ["del", "theorem", "lt_add_of_lt_of_pos'", []], ["del", "theorem", "lt_add_of_lt_of_pos", []], ["del", "theorem", "lt_add_of_neg_add_lt", []], ["del", "theorem", "lt_add_of_neg_add_lt_left", []], ["del", "theorem", "lt_add_of_neg_add_lt_right", []], ["del", "theorem", "lt_add_of_nonneg_of_lt'", []], ["del", "theorem", "lt_add_of_nonneg_of_lt", []], ["del", "theorem", "lt_add_of_pos_left", []], ["del", "theorem", "lt_add_of_pos_of_le", []], ["del", "theorem", "lt_add_of_pos_of_lt'", []], ["del", "theorem", "lt_add_of_pos_of_lt", []], ["del", "theorem", "lt_add_of_pos_right", []], ["add", "theorem", "lt_inv'", []], ["add", "theorem", "lt_inv_mul_iff_mul_lt", []], ["add", "theorem", "lt_inv_mul_of_mul_lt", []], ["add", "theorem", "lt_inv_of_lt_inv", []], ["add", "theorem", "lt_mul_iff_one_lt_left'", []], ["add", "theorem", "lt_mul_iff_one_lt_right'", []], ["add", "theorem", "lt_mul_of_inv_mul_lt", []], ["add", "theorem", "lt_mul_of_inv_mul_lt_left", []], ["add", "theorem", "lt_mul_of_inv_mul_lt_right", []], ["add", "theorem", "lt_mul_of_le_of_one_lt", []], ["add", "theorem", "lt_mul_of_lt_of_one_le'", []], ["add", "theorem", "lt_mul_of_lt_of_one_le", []], ["add", "theorem", "lt_mul_of_lt_of_one_lt'", []], ["add", "theorem", "lt_mul_of_lt_of_one_lt", []], ["add", "theorem", "lt_mul_of_one_le_of_lt'", []], ["add", "theorem", "lt_mul_of_one_le_of_lt", []], ["add", "theorem", "lt_mul_of_one_lt_left", []], ["add", "theorem", "lt_mul_of_one_lt_of_le", []], ["add", "theorem", "lt_mul_of_one_lt_of_lt'", []], ["add", "theorem", "lt_mul_of_one_lt_of_lt", []], ["add", "theorem", "lt_mul_of_one_lt_right", []], ["del", "theorem", "lt_neg", []], ["del", "theorem", "lt_neg_add_iff_add_lt", []], ["del", "theorem", "lt_neg_add_of_add_lt", []], ["del", "theorem", "lt_neg_of_lt_neg", []], ["del", "theorem", "lt_of_add_lt_add_left'", []], ["del", "theorem", "lt_of_add_lt_add_left", []], ["del", "theorem", "lt_of_add_lt_add_right'", []], ["del", "theorem", "lt_of_add_lt_add_right", []], ["add", "theorem", "lt_of_inv_lt_inv", []], ["add", "theorem", "lt_of_mul_lt_mul_left''", []], ["add", "theorem", "lt_of_mul_lt_mul_left'", []], ["add", "theorem", "lt_of_mul_lt_mul_right''", []], ["add", "theorem", "lt_of_mul_lt_mul_right'", []], ["del", "theorem", "lt_of_neg_lt_neg", []], ["del", "theorem", "add", ["monotone"]], ["del", "theorem", "add_const", ["monotone"]], ["del", "theorem", "add_strict_mono", ["monotone"]], ["del", "theorem", "const_add", ["monotone"]], ["add", "theorem", "const_mul'", ["monotone"]], ["add", "theorem", "mul'", ["monotone"]], ["add", "theorem", "mul_const'", ["monotone"]], ["add", "theorem", "mul_strict_mono'", ["monotone"]], ["add", "theorem", "mul_eq_one_iff'", []], ["add", "theorem", "mul_eq_one_iff_eq_one_and_eq_one_of_one_le_of_one_le", []], ["add", "theorem", "mul_eq_one_iff_eq_one_of_one_le", []], ["add", "theorem", "mul_inv_le_iff_le_mul'", []], ["add", "theorem", "mul_inv_le_iff_le_mul", []], ["add", "theorem", "mul_le_iff_le_one_left'", []], ["add", "theorem", "mul_le_iff_le_one_right'", []], ["add", "theorem", "mul_le_mul''", []], ["add", "theorem", "mul_le_mul'", []], ["add", "theorem", "mul_le_mul_iff_left", []], ["add", "theorem", "mul_le_mul_iff_right", []], ["add", "theorem", "mul_le_mul_left''", []], ["add", "theorem", "mul_le_mul_left'", []], ["add", "theorem", "mul_le_mul_right''", []], ["add", "theorem", "mul_le_mul_right'", []], ["add", "theorem", "mul_le_mul_three", []], ["add", "theorem", "mul_le_of_le_inv_mul", []], ["add", "theorem", "mul_le_of_le_of_le_one'", []], ["add", "theorem", "mul_le_of_le_of_le_one", []], ["add", "theorem", "mul_le_of_le_one_of_le'", []], ["add", "theorem", "mul_le_of_le_one_of_le", []], ["add", "theorem", "mul_le_one''", []], ["add", "theorem", "mul_le_one'", []], ["add", "theorem", "mul_lt_iff_lt_one_left'", []], ["add", "theorem", "mul_lt_iff_lt_one_right'", []], ["add", "theorem", "mul_lt_mul'''", []], ["add", "theorem", "mul_lt_mul_iff_left", []], ["add", "theorem", "mul_lt_mul_iff_right", []], ["add", "theorem", "mul_lt_mul_left'", []], ["add", "theorem", "mul_lt_mul_of_le_of_lt", []], ["add", "theorem", "mul_lt_mul_of_lt_of_le", []], ["add", "theorem", "mul_lt_mul_right'", []], ["add", "theorem", "mul_lt_of_le_of_lt_one", []], ["add", "theorem", "mul_lt_of_le_one_of_lt'", []], ["add", "theorem", "mul_lt_of_le_one_of_lt", []], ["add", "theorem", "mul_lt_of_lt_inv_mul", []], ["add", "theorem", "mul_lt_of_lt_of_le_one'", []], ["add", "theorem", "mul_lt_of_lt_of_le_one", []], ["add", "theorem", "mul_lt_of_lt_of_lt_one'", []], ["add", "theorem", "mul_lt_of_lt_of_lt_one", []], ["add", "theorem", "mul_lt_of_lt_one_of_le", []], ["add", "theorem", "mul_lt_of_lt_one_of_lt'", []], ["add", "theorem", "mul_lt_of_lt_one_of_lt", []], ["add", "theorem", "mul_lt_one'", []], ["add", "theorem", "mul_lt_one", []], ["add", "theorem", "mul_lt_one_of_le_one_of_lt_one'", []], ["add", "theorem", "mul_lt_one_of_le_one_of_lt_one", []], ["add", "theorem", "mul_lt_one_of_lt_one_of_le_one'", []], ["add", "theorem", "mul_lt_one_of_lt_one_of_le_one", []], ["add", "theorem", "mul_one_lt'", []], ["add", "theorem", "mul_one_lt", []], ["add", "theorem", "mul_one_lt_of_one_le_of_one_lt'", []], ["add", "theorem", "mul_one_lt_of_one_le_of_one_lt", []], ["add", "theorem", "mul_one_lt_of_one_lt_of_one_le'", []], ["add", "theorem", "mul_one_lt_of_one_lt_of_one_le", []], ["del", "theorem", "neg_add_le_iff_le_add'", []], ["del", "theorem", "neg_add_le_iff_le_add", []], ["del", "theorem", "neg_add_le_left_of_le_add", []], ["del", "theorem", "neg_add_le_of_le_add", []], ["del", "theorem", "neg_add_le_right_of_le_add", []], ["del", "theorem", "neg_add_lt_iff_lt_add", []], ["del", "theorem", "neg_add_lt_iff_lt_add_right", []], ["del", "theorem", "neg_add_lt_left_of_lt_add", []], ["del", "theorem", "neg_add_lt_of_lt_add", []], ["del", "theorem", "neg_add_lt_right_of_lt_add", []], ["del", "theorem", "neg_le", []], ["del", "theorem", "neg_le_iff_add_nonneg", []], ["del", "theorem", "neg_le_neg", []], ["del", "theorem", "neg_le_neg_iff", []], ["del", "theorem", "neg_le_of_neg_le", []], ["del", "theorem", "neg_le_self", []], ["del", "theorem", "neg_lt", []], ["del", "theorem", "neg_lt_neg", []], ["del", "theorem", "neg_lt_neg_iff", []], ["del", "theorem", "neg_lt_of_neg_lt", []], ["del", "theorem", "neg_lt_zero", []], ["del", "theorem", "neg_neg_iff_pos", []], ["del", "theorem", "neg_neg_of_pos", []], ["del", "theorem", "neg_nonneg", []], ["del", "theorem", "neg_nonneg_of_nonpos", []], ["del", "theorem", "neg_nonpos", []], ["del", "theorem", "neg_nonpos_of_nonneg", []], ["del", "theorem", "neg_of_neg_pos", []], ["del", "theorem", "neg_pos", []], ["del", "theorem", "neg_pos_of_neg", []], ["del", "theorem", "nonneg_of_neg_nonpos", []], ["del", "theorem", "nonpos_of_neg_nonneg", []], ["add", "theorem", "one_le_inv'", []], ["add", "theorem", "one_le_inv_of_le_one", []], ["add", "theorem", "one_le_mul'", []], ["add", "theorem", "one_le_mul", []], ["add", "theorem", "one_le_of_inv_le_one", []], ["add", "theorem", "one_lt_inv'", []], ["add", "theorem", "one_lt_inv_of_inv", []], ["add", "theorem", "one_lt_of_inv_inv", []], ["del", "theorem", "add_lt_add_left", ["ordered_add_comm_group"]], ["del", "theorem", "le_of_add_le_add_left", ["ordered_add_comm_group"]], ["del", "theorem", "lt_of_add_lt_add_left", ["ordered_add_comm_group"]], ["del", "def", "mk'", ["ordered_add_comm_group"]], ["add", "theorem", "le_of_mul_le_mul_left", ["ordered_comm_group"]], ["add", "theorem", "lt_of_mul_lt_mul_left", ["ordered_comm_group"]], ["add", "def", "mk'", ["ordered_comm_group"]], ["add", "theorem", "mul_lt_mul_left'", ["ordered_comm_group"]], ["del", "theorem", "pos_of_neg_neg", []], ["add", "theorem", "self_le_inv", []], ["del", "theorem", "self_le_neg", []], ["del", "theorem", "add_const", ["strict_mono"]], ["del", "theorem", "add_monotone", ["strict_mono"]], ["del", "theorem", "const_add", ["strict_mono"]], ["add", "theorem", "const_mul'", ["strict_mono"]], ["add", "theorem", "mul_const'", ["strict_mono"]], ["add", "theorem", "mul_monotone'", ["strict_mono"]], ["mod", "theorem", "coe_le_coe", ["units"]], ["mod", "theorem", "coe_lt_coe", ["units"]]]}]}, {"timestamp": 1591722044, "sha": "f098c16e", "message": "feat(ring_theory/localization): more lemmas and defs about fields of fractions (#3005)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "eq_zero_of_ne_zero_of_mul_eq_zero", []], ["add", "theorem", "is_unit_map_of_injective", ["fraction_map"]], ["add", "theorem", "lift_mk'", ["fraction_map"]], ["add", "theorem", "mk'_eq_div", ["fraction_map"]], ["add", "theorem", "mk_eq_div", ["fraction_ring"]], ["add", "def", "fraction_ring", []], ["add", "theorem", "map_mem_non_zero_divisors", []], ["add", "theorem", "map_ne_zero_of_mem_non_zero_divisors", []], ["mod", "theorem", "mem_non_zero_divisors_iff_ne_zero", []], ["add", "def", "of", []]]}]}, {"timestamp": 1591705306, "sha": "ccdf1d27", "message": "feat(category_theory/limits): prod.lift_comp_comp (#2968)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "desc_comp_comp", ["category_theory", "limits", "coprod"]], ["add", "theorem", "lift_comp_comp", ["category_theory", "limits", "prod"]]]}]}, {"timestamp": 1591702599, "sha": "7cb0a851", "message": "refactor(topology): rename `lim` to `Lim` (#2977)\nAlso introduce `lim (f : filter α) (g : α → β)`.", "changes": [{"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "Lim_spec", []], ["mod", "theorem", "lim_spec", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["mod", "theorem", "extend_eq", ["dense_inducing"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "Lim_eq", []], ["add", "theorem", "Lim_nhds", []], ["add", "theorem", "Lim_nhds_within", []], ["add", "theorem", "lim_eq", ["continuous"]], ["add", "theorem", "lim_eq", ["filter", "tendsto"]], ["del", "theorem", "lim_eq", []], ["del", "theorem", "lim_nhds_eq", []], ["del", "theorem", "lim_nhds_eq_of_closure", []], ["add", "theorem", "lim_nhds_id", []], ["add", "theorem", "lim_nhds_within_id", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "le_nhds_Lim", ["cauchy"]], ["add", "theorem", "tendsto_lim", ["cauchy_seq"]], ["del", "theorem", "le_nhds_lim_of_cauchy", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1591700731, "sha": "76792dcc", "message": "feat(algebra/add_torsor): add `prod.add_torsor` (#2980)", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "fst_vadd", ["prod"]], ["add", "theorem", "fst_vsub", ["prod"]], ["add", "theorem", "mk_vadd_mk", ["prod"]], ["add", "theorem", "mk_vsub_mk", ["prod"]], ["add", "theorem", "snd_vadd", ["prod"]], ["add", "theorem", "snd_vsub", ["prod"]]]}]}, {"timestamp": 1591693658, "sha": "42813431", "message": "refactor(data/polynomial): redefine `C` as an `alg_hom` (#3003)\nAs a side effect Lean parses `C 1` as `polynomial nat`. If you need `polynomial R`, then use `C (1:R)`.", "changes": [{"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "def", "C", ["polynomial"]], ["mod", "theorem", "C_0", ["polynomial"]], ["mod", "theorem", "C_1", ["polynomial"]], ["mod", "theorem", "C_add", ["polynomial"]], ["add", "theorem", "C_def", ["polynomial"]], ["mod", "theorem", "C_mul", ["polynomial"]], ["mod", "theorem", "C_neg", ["polynomial"]], ["mod", "theorem", "C_pow", ["polynomial"]], ["mod", "theorem", "C_sub", ["polynomial"]], ["mod", "theorem", "int_cast_eq_C", ["polynomial"]], ["mod", "def", "lcoeff", ["polynomial"]], ["mod", "theorem", "nat_cast_eq_C", ["polynomial"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}]}, {"timestamp": 1591690436, "sha": "34302c63", "message": "chore(ring_theory/algebra): add comments explaining absence of 2 `simp` attrs (#3002)", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1591690434, "sha": "03c345ff", "message": "chore(data/real/nnreal): +2 lemmas (#3000)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "div_le_iff", ["nnreal"]], ["add", "theorem", "sum_div", ["nnreal"]]]}]}, {"timestamp": 1591690432, "sha": "10914620", "message": "feat(analysis/special_functions/pow): `inv_rpow`, `div_rpow` (#2999)\nAlso use notation `ℝ≥0` and use `nnreal.eq` instead of `rw ← nnreal.coe_eq`.", "changes": [{"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "log_inv", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["mod", "theorem", "coe_mul_rpow", ["ennreal"]], ["mod", "theorem", "coe_rpow_of_ne_zero", ["ennreal"]], ["mod", "theorem", "coe_rpow_of_nonneg", ["ennreal"]], ["mod", "theorem", "nnrpow", ["filter", "tendsto"]], ["mod", "theorem", "coe_rpow", ["nnreal"]], ["mod", "theorem", "continuous_at_rpow", ["nnreal"]], ["add", "theorem", "div_rpow", ["nnreal"]], ["add", "theorem", "inv_rpow", ["nnreal"]], ["mod", "theorem", "mul_rpow", ["nnreal"]], ["mod", "theorem", "one_le_rpow", ["nnreal"]], ["mod", "theorem", "one_lt_rpow", ["nnreal"]], ["mod", "theorem", "one_rpow", ["nnreal"]], ["mod", "theorem", "pow_nat_rpow_nat_inv", ["nnreal"]], ["add", "theorem", "rpow_add'", ["nnreal"]], ["mod", "theorem", "rpow_add", ["nnreal"]], ["mod", "theorem", "rpow_eq_pow", ["nnreal"]], ["mod", "theorem", "rpow_eq_zero_iff", ["nnreal"]], ["mod", "theorem", "rpow_le_one", ["nnreal"]], ["mod", "theorem", "rpow_le_rpow", ["nnreal"]], ["mod", "theorem", "rpow_le_rpow_of_exponent_ge", ["nnreal"]], ["mod", "theorem", "rpow_le_rpow_of_exponent_le", ["nnreal"]], ["mod", "theorem", "rpow_lt_one", ["nnreal"]], ["mod", "theorem", "rpow_lt_rpow", ["nnreal"]], ["mod", "theorem", "rpow_lt_rpow_of_exponent_gt", ["nnreal"]], ["mod", "theorem", "rpow_lt_rpow_of_exponent_lt", ["nnreal"]], ["mod", "theorem", "rpow_mul", ["nnreal"]], ["mod", "theorem", "rpow_nat_cast", ["nnreal"]], ["mod", "theorem", "rpow_nat_inv_pow_nat", ["nnreal"]], ["mod", "theorem", "rpow_neg", ["nnreal"]], ["mod", "theorem", "rpow_one", ["nnreal"]], ["mod", "theorem", "rpow_zero", ["nnreal"]], ["mod", "theorem", "zero_rpow", ["nnreal"]], ["add", "theorem", "div_rpow", ["real"]], ["add", "theorem", "inv_rpow", ["real"]], ["mod", "theorem", "one_le_rpow", ["real"]]]}]}, {"timestamp": 1591686413, "sha": "45567dcc", "message": "chore(algebra/big_operators): add `@[simp] lemma sum_eq_zero_iff` (#2998)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_eq_zero_iff", ["finset"]]]}]}, {"timestamp": 1591680243, "sha": "24ce416a", "message": "chore(data/matrix/basic): clean up of new lemmas on matrix numerals (#2996)\nGeneralise and improve use of `@[simp]` for some newly added lemmas about matrix numerals.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["del", "theorem", "bit0_apply_apply", ["matrix"]], ["add", "theorem", "bit0_val", ["matrix"]], ["del", "theorem", "bit1_apply_apply", ["matrix"]], ["add", "theorem", "bit1_val", ["matrix"]], ["add", "theorem", "bit1_val_eq", ["matrix"]], ["add", "theorem", "bit1_val_ne", ["matrix"]]]}]}, {"timestamp": 1591648331, "sha": "7bb2d89f", "message": "feat(dynamics/fixed_points/topology): new file (#2991)\n* Move `is_fixed_pt_of_tendsto_iterate` from\n `topology.metric_space.contracting`, reformulate it without `∃`.\n* Add `is_closed_fixed_points`.\n* Move `dynamics.fixed_points` to `dynamics.fixed_points.basic`.", "changes": [{"oldPath": "src/dynamics/circle/rotation_number/translation_number.lean", "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": []}, {"oldPath": "src/dynamics/fixed_points.lean", "newPath": "src/dynamics/fixed_points/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/dynamics/fixed_points/topology.lean", "changes": [["add", "theorem", "is_closed_fixed_points", []], ["add", "theorem", "is_fixed_pt_of_tendsto_iterate", []]]}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "tendsto", ["continuous_at"]]]}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["del", "theorem", "is_fixed_pt_of_tendsto_iterate", []]]}]}, {"timestamp": 1591645005, "sha": "470ccd32", "message": "chore(scripts): update nolints.txt (#2993)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591645003, "sha": "94dedddf", "message": "feat(data/real/conjugate_exponents): define real conjugate exponents (#2992)", "changes": [{"oldPath": null, "newPath": "src/data/real/conjugate_exponents.lean", "changes": [["add", "def", "conjugate_exponent", ["real"]], ["add", "theorem", "conj_eq", ["real", "is_conjugate_exponent"]], ["add", "theorem", "ne_zero", ["real", "is_conjugate_exponent"]], ["add", "theorem", "one_div_ne_zero", ["real", "is_conjugate_exponent"]], ["add", "theorem", "one_div_pos", ["real", "is_conjugate_exponent"]], ["add", "theorem", "pos", ["real", "is_conjugate_exponent"]], ["add", "theorem", "sub_one_ne_zero", ["real", "is_conjugate_exponent"]], ["add", "structure", "is_conjugate_exponent", ["real"]], ["add", "theorem", "is_conjugate_exponent_conjugate_exponent", ["real"]], ["add", "theorem", "is_conjugate_exponent_iff", ["real"]]]}]}, {"timestamp": 1591645001, "sha": "4ee67acb", "message": "chore(*): use prod notation (#2989)\nThe biggest field test of the new product notation.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": [["mod", "theorem", "prod_Ico_one_prime", ["zmod"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1591644999, "sha": "a377993a", "message": "feat(geometry/euclidean): angles and some basic lemmas (#2865)\nDefine angles (undirected, between 0 and π, in terms of inner\nproduct), and prove some basic lemmas involving angles, for real inner\nproduct spaces and Euclidean affine spaces.\nFrom the 100-theorems list, this provides versions of\n* 04 Pythagorean Theorem,\n* 65 Isosceles Triangle Theorem and\n* 94 The Law of Cosines, with various existing definitions implicitly providing\n* 91 The Triangle Inequality.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "abs_inner_div_norm_mul_norm_eq_one_iff", []], ["add", "theorem", "abs_inner_div_norm_mul_norm_eq_one_of_ne_zero_of_ne_zero_mul", []], ["add", "theorem", "abs_inner_div_norm_mul_norm_le_one", []], ["add", "theorem", "inner_div_norm_mul_norm_eq_neg_one_iff", []], ["add", "theorem", "inner_div_norm_mul_norm_eq_neg_one_of_ne_zero_of_neg_mul", []], ["add", "theorem", "inner_div_norm_mul_norm_eq_one_iff", []], ["add", "theorem", "inner_div_norm_mul_norm_eq_one_of_ne_zero_of_pos_mul", []], ["add", "theorem", "inner_eq_norm_add_mul_self_sub_norm_mul_self_sub_norm_mul_self_div_two", []], ["add", "theorem", "inner_eq_norm_add_mul_self_sub_norm_sub_mul_self_div_four", []], ["add", "theorem", "inner_eq_norm_mul_self_add_norm_mul_self_sub_norm_sub_mul_self_div_two", []], ["add", "theorem", "inner_smul_self_left", []], ["add", "theorem", "inner_smul_self_right", []], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square", []], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square_iff_inner_eq_zero", []], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square", []], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_iff_inner_eq_zero", []]]}, {"oldPath": "src/geometry/euclidean.lean", "newPath": "src/geometry/euclidean.lean", "changes": [["add", "def", "angle", ["euclidean_geometry"]], ["add", "theorem", "angle_add_angle_eq_pi_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_comm", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_angle_of_angle_eq_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_angle_of_dist_eq", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_left", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_of_ne", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_right", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_zero_of_angle_eq_pi_left", ["euclidean_geometry"]], ["add", "theorem", "angle_eq_zero_of_angle_eq_pi_right", ["euclidean_geometry"]], ["add", "theorem", "angle_le_pi", ["euclidean_geometry"]], ["add", "theorem", "angle_nonneg", ["euclidean_geometry"]], ["add", "theorem", "dist_eq_of_angle_eq_angle_of_angle_ne_pi", ["euclidean_geometry"]], ["add", "theorem", "dist_square_eq_dist_square_add_dist_square_iff_angle_eq_pi_div_two", ["euclidean_geometry"]], ["add", "theorem", "dist_square_eq_dist_square_add_dist_square_sub_two_mul_dist_mul_dist_mul_cos_angle", ["euclidean_geometry"]], ["add", "def", "angle", ["inner_product_geometry"]], ["add", "theorem", "angle_add_angle_eq_pi_of_angle_eq_pi", ["inner_product_geometry"]], ["add", "theorem", "angle_comm", ["inner_product_geometry"]], ["add", "theorem", "angle_eq_pi_iff", ["inner_product_geometry"]], ["add", "theorem", "angle_eq_zero_iff", ["inner_product_geometry"]], ["add", "theorem", "angle_le_pi", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_left", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_neg", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_right", ["inner_product_geometry"]], ["add", "theorem", "angle_neg_self_of_nonzero", ["inner_product_geometry"]], ["add", "theorem", "angle_nonneg", ["inner_product_geometry"]], ["add", "theorem", "angle_self", ["inner_product_geometry"]], ["add", "theorem", "angle_self_neg_of_nonzero", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_left_of_neg", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_left_of_pos", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_right_of_neg", ["inner_product_geometry"]], ["add", "theorem", "angle_smul_right_of_pos", ["inner_product_geometry"]], ["add", "theorem", "angle_sub_eq_angle_sub_rev_of_norm_eq", ["inner_product_geometry"]], ["add", "theorem", "angle_zero_left", ["inner_product_geometry"]], ["add", "theorem", "angle_zero_right", ["inner_product_geometry"]], ["add", "theorem", "cos_angle", ["inner_product_geometry"]], ["add", "theorem", "cos_angle_mul_norm_mul_norm", ["inner_product_geometry"]], ["add", "theorem", "inner_eq_zero_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square'", ["inner_product_geometry"]], ["add", "theorem", "norm_add_square_eq_norm_square_add_norm_square_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["add", "theorem", "norm_eq_of_angle_sub_eq_angle_sub_rev_of_angle_ne_pi", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square'", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_iff_angle_eq_pi_div_two", ["inner_product_geometry"]], ["add", "theorem", "norm_sub_square_eq_norm_square_add_norm_square_sub_two_mul_norm_mul_norm_mul_cos_angle", ["inner_product_geometry"]], ["add", "theorem", "sin_angle_mul_norm_mul_norm", ["inner_product_geometry"]]]}]}, {"timestamp": 1591643130, "sha": "dbbd696d", "message": "feat(order/ideal): order ideals, cofinal sets and the Rasiowa-Sikorski lemma (#2850)\nWe define order ideals and cofinal sets, and use them to prove the (very simple) Rasiowa-Sikorski lemma: given a countable family of cofinal subsets of an inhabited preorder, there is an upwards directed set meeting each one. This provides an API for certain recursive constructions.", "changes": [{"oldPath": null, "newPath": "src/order/ideal.lean", "changes": [["add", "theorem", "above_mem", ["order", "cofinal"]], ["add", "theorem", "le_above", ["order", "cofinal"]], ["add", "structure", "cofinal", ["order"]], ["add", "theorem", "cofinal_meets_ideal_of_cofinals", ["order"]], ["add", "def", "principal", ["order", "ideal"]], ["add", "structure", "ideal", ["order"]], ["add", "def", "ideal_of_cofinals", ["order"]], ["add", "theorem", "mem_ideal_of_cofinals", ["order"]], ["add", "theorem", "encode_mem", ["order", "sequence_of_cofinals"]], ["add", "theorem", "monotone", ["order", "sequence_of_cofinals"]]]}]}, {"timestamp": 1591637659, "sha": "d204daa5", "message": "chore(*): add docs and nolints (#2990)\nOther changes:\n* Reuse `gmultiples_hom` for `AddCommGroup.as_hom`.\n* Reuse `add_monoid_hom.ext_int` for `AddCommGroup.int_hom_ext`.\n* Drop the following definitions, define an `instance` right away\n instead:\n - `algebra.div`;\n - `monoid_hom.one`, `add_monoid_hom.zero`;\n - `monoid_hom.mul`, `add_monoid_hom.add`;\n - `monoid_hom.inv`, `add_monoid_hom.neg`.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/defs.lean", "newPath": "src/algebra/group/defs.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1591637657, "sha": "9fba817f", "message": "refactor(algebra/*): move `commute` below `ring` in `import`s (#2973)\nFixes #1865\nAPI changes:\n* drop lemmas about unbundled `center`;\n* add `to_additive` to `semiconj_by` and `commute`;\n* drop `inv_comm_of_comm` in favor of `commute.left_inv`,\n same with `inv_comm_of_comm` and `commute.left_inv'`;\n* rename `monoid_hom.map_commute` to `commute.map`, same with\n `semiconj_by`;\n* drop `commute.cast_*_*` and `nat/int/rat.mul_cast_comm`, add\n `nat/int/rat.cast_commute` and `nat.int.rat.commute_cast`;\n* add `commute.mul_fpow`.", "changes": [{"oldPath": "src/algebra/commute.lean", "newPath": null, "changes": [["del", "theorem", "centralizer_closure", ["add_monoid"]], ["del", "def", "add_submonoid", ["centralizer"]], ["del", "theorem", "inter_units_is_subgroup", ["centralizer"]], ["del", "def", "centralizer", []], ["del", "theorem", "add_left", ["commute"]], ["del", "theorem", "add_right", ["commute"]], ["del", "theorem", "cast_int_left", ["commute"]], ["del", "theorem", "cast_int_right", ["commute"]], ["del", "theorem", "cast_nat_left", ["commute"]], ["del", "theorem", "cast_nat_right", ["commute"]], ["del", "theorem", "div_left", ["commute"]], ["del", "theorem", "div_right", ["commute"]], ["del", "theorem", "finv_finv", ["commute"]], ["del", "theorem", "finv_left", ["commute"]], ["del", "theorem", "finv_left_iff", ["commute"]], ["del", "theorem", "finv_right", ["commute"]], ["del", "theorem", "finv_right_iff", ["commute"]], ["del", "theorem", "gpow_gpow", ["commute"]], ["del", "theorem", "gpow_gpow_self", ["commute"]], ["del", "theorem", "gpow_left", ["commute"]], ["del", "theorem", "gpow_right", ["commute"]], ["del", "theorem", "gpow_self", ["commute"]], ["del", "theorem", "gsmul_gsmul", ["commute"]], ["del", "theorem", "gsmul_left", ["commute"]], ["del", "theorem", "gsmul_right", ["commute"]], ["del", "theorem", "gsmul_self", ["commute"]], ["del", "theorem", "inv_inv", ["commute"]], ["del", "theorem", "inv_inv_iff", ["commute"]], ["del", "theorem", "inv_left", ["commute"]], ["del", "theorem", "inv_left_iff", ["commute"]], ["del", "theorem", "inv_right", ["commute"]], ["del", "theorem", "inv_right_iff", ["commute"]], ["del", "theorem", "list_prod_left", ["commute"]], ["del", "theorem", "list_prod_right", ["commute"]], ["del", "theorem", "mul_left", ["commute"]], ["del", "theorem", "mul_right", ["commute"]], ["del", "theorem", "neg_left", ["commute"]], ["del", "theorem", "neg_left_iff", ["commute"]], ["del", "theorem", "neg_one_left", ["commute"]], ["del", "theorem", "neg_one_right", ["commute"]], ["del", "theorem", "neg_right", ["commute"]], ["del", "theorem", "neg_right_iff", ["commute"]], ["del", "theorem", "nsmul_left", ["commute"]], ["del", "theorem", "nsmul_nsmul", ["commute"]], ["del", "theorem", "nsmul_right", ["commute"]], ["del", "theorem", "nsmul_self", ["commute"]], ["del", "theorem", "one_left", ["commute"]], ["del", "theorem", "one_right", ["commute"]], ["del", "theorem", "pow_left", ["commute"]], ["del", "theorem", "pow_pow", ["commute"]], ["del", "theorem", "pow_pow_self", ["commute"]], ["del", "theorem", "pow_right", ["commute"]], ["del", "theorem", "pow_self", ["commute"]], ["del", "theorem", "self_gpow", ["commute"]], ["del", "theorem", "self_gsmul", ["commute"]], ["del", "theorem", "self_gsmul_gsmul", ["commute"]], ["del", "theorem", "self_nsmul", ["commute"]], ["del", "theorem", "self_nsmul_nsmul", ["commute"]], ["del", "theorem", "self_pow", ["commute"]], ["del", "theorem", "sub_left", ["commute"]], ["del", "theorem", "sub_right", ["commute"]], ["del", "theorem", "units_coe", ["commute"]], ["del", "theorem", "units_coe_iff", ["commute"]], ["del", "theorem", "units_inv_left", ["commute"]], ["del", "theorem", "units_inv_left_iff", ["commute"]], ["del", "theorem", "units_inv_right", ["commute"]], ["del", "theorem", "units_inv_right_iff", ["commute"]], ["del", "theorem", "units_of_coe", ["commute"]], ["del", "theorem", "zero_left", ["commute"]], ["del", "theorem", "zero_right", ["commute"]], ["del", "def", "commute", []], ["del", "theorem", "centralizer_closure", ["group"]], ["del", "theorem", "mem_centralizer", []], ["del", "theorem", "centralizer_closure", ["monoid"]], ["del", "theorem", "neg_pow", []], ["del", "theorem", "centralizer_closure", ["ring"]], ["del", "def", "add_submonoid", ["set", "centralizer"]], ["del", "def", "centralizer", ["submonoid"]], ["del", "def", "centralizer", ["submonoid", "set"]]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "theorem", "inv_comm_of_comm", []]]}, {"oldPath": null, "newPath": "src/algebra/group/commute.lean", "changes": [["add", "theorem", "inv_inv", ["commute"]], ["add", "theorem", "inv_inv_iff", ["commute"]], ["add", "theorem", "inv_left", ["commute"]], ["add", "theorem", "inv_left_iff", ["commute"]], ["add", "theorem", "inv_right", ["commute"]], ["add", "theorem", "inv_right_iff", ["commute"]], ["add", "theorem", "mul_left", ["commute"]], ["add", "theorem", "mul_right", ["commute"]], ["add", "theorem", "one_left", ["commute"]], ["add", "theorem", "one_right", ["commute"]], ["add", "theorem", "units_coe", ["commute"]], ["add", "theorem", "units_coe_iff", ["commute"]], ["add", "theorem", "units_inv_left", ["commute"]], ["add", "theorem", "units_inv_left_iff", ["commute"]], ["add", "theorem", "units_inv_right", ["commute"]], ["add", "theorem", "units_inv_right_iff", ["commute"]], ["add", "theorem", "units_of_coe", ["commute"]], ["add", "def", "commute", []]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group/semiconj.lean", "changes": [["add", "theorem", "conj_mk", ["semiconj_by"]], ["add", "theorem", "inv_inv_symm", ["semiconj_by"]], ["add", "theorem", "inv_inv_symm_iff", ["semiconj_by"]], ["add", "theorem", "inv_right", ["semiconj_by"]], ["add", "theorem", "inv_right_iff", ["semiconj_by"]], ["add", "theorem", "inv_symm_left", ["semiconj_by"]], ["add", "theorem", "inv_symm_left_iff", ["semiconj_by"]], ["add", "theorem", "mul_left", ["semiconj_by"]], ["add", "theorem", "mul_right", ["semiconj_by"]], ["add", "theorem", "one_left", ["semiconj_by"]], ["add", "theorem", "one_right", ["semiconj_by"]], ["add", "theorem", "units_coe", ["semiconj_by"]], ["add", "theorem", "units_coe_iff", ["semiconj_by"]], ["add", "theorem", "units_inv_right", ["semiconj_by"]], ["add", "theorem", "units_inv_right_iff", ["semiconj_by"]], ["add", "theorem", "units_inv_symm_left", ["semiconj_by"]], ["add", "theorem", "units_inv_symm_left_iff", ["semiconj_by"]], ["add", "theorem", "units_of_coe", ["semiconj_by"]], ["add", "def", "semiconj_by", []], ["add", "theorem", "mk_semiconj_by", ["units"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "gpow_gpow", ["commute"]], ["add", "theorem", "gpow_gpow_self", ["commute"]], ["add", "theorem", "gpow_left", ["commute"]], ["add", "theorem", "gpow_right", ["commute"]], ["add", "theorem", "gpow_self", ["commute"]], ["add", "theorem", "gsmul_gsmul", ["commute"]], ["add", "theorem", "gsmul_left", ["commute"]], ["add", "theorem", "gsmul_right", ["commute"]], ["add", "theorem", "gsmul_self", ["commute"]], ["add", "theorem", "mul_gpow", ["commute"]], ["add", "theorem", "mul_pow", ["commute"]], ["add", "theorem", "nsmul_left", ["commute"]], ["add", "theorem", "nsmul_nsmul", ["commute"]], ["add", "theorem", "nsmul_right", ["commute"]], ["add", "theorem", "nsmul_self", ["commute"]], ["add", "theorem", "pow_left", ["commute"]], ["add", "theorem", "pow_pow", ["commute"]], ["add", "theorem", "pow_pow_self", ["commute"]], ["add", "theorem", "pow_right", ["commute"]], ["add", "theorem", "pow_self", ["commute"]], ["add", "theorem", "self_gpow", ["commute"]], ["add", "theorem", "self_gsmul", ["commute"]], ["add", "theorem", "self_gsmul_gsmul", ["commute"]], ["add", "theorem", "self_nsmul", ["commute"]], ["add", "theorem", "self_nsmul_nsmul", ["commute"]], ["add", "theorem", "self_pow", ["commute"]], ["add", "theorem", "units_gpow_left", ["commute"]], ["add", "theorem", "units_gpow_right", ["commute"]], ["mod", "theorem", "gpow_one", []], ["mod", "theorem", "mul_gpow", []], ["add", "theorem", "neg_pow", []], ["mod", "theorem", "pow_mul_comm'", []], ["add", "theorem", "gpow_right", ["semiconj_by"]], ["add", "theorem", "gsmul_gsmul", ["semiconj_by"]], ["add", "theorem", "gsmul_left", ["semiconj_by"]], ["add", "theorem", "gsmul_right", ["semiconj_by"]], ["add", "theorem", "nsmul_left", ["semiconj_by"]], ["add", "theorem", "nsmul_nsmul", ["semiconj_by"]], ["add", "theorem", "nsmul_right", ["semiconj_by"]], ["add", "theorem", "pow_right", ["semiconj_by"]], ["add", "theorem", "units_gpow_right", ["semiconj_by"]], ["add", "theorem", "conj_pow'", ["units"]], ["add", "theorem", "conj_pow", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "div_left", ["commute"]], ["add", "theorem", "div_right", ["commute"]], ["add", "theorem", "inv_inv'", ["commute"]], ["add", "theorem", "inv_left'", ["commute"]], ["add", "theorem", "inv_left_iff'", ["commute"]], ["add", "theorem", "inv_right'", ["commute"]], ["add", "theorem", "inv_right_iff'", ["commute"]], ["del", "theorem", "inv_comm_of_comm'", []], ["add", "theorem", "div_right", ["semiconj_by"]], ["add", "theorem", "inv_right'", ["semiconj_by"]], ["add", "theorem", "inv_right_iff'", ["semiconj_by"]], ["add", "theorem", "inv_symm_left'", ["semiconj_by"]], ["add", "theorem", "inv_symm_left_iff'", ["semiconj_by"]]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["add", "theorem", "fpow_fpow", ["commute"]], ["add", "theorem", "fpow_fpow_self", ["commute"]], ["add", "theorem", "fpow_left", ["commute"]], ["add", "theorem", "fpow_right", ["commute"]], ["add", "theorem", "fpow_self", ["commute"]], ["add", "theorem", "mul_fpow", ["commute"]], ["add", "theorem", "self_fpow", ["commute"]], ["del", "theorem", "fpow_mul_comm", []], ["mod", "theorem", "mul_fpow", []], ["add", "theorem", "fpow_right", ["semiconj_by"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "add_left", ["commute"]], ["add", "theorem", "add_right", ["commute"]], ["add", "theorem", "neg_left", ["commute"]], ["add", "theorem", "neg_left_iff", ["commute"]], ["add", "theorem", "neg_one_left", ["commute"]], ["add", "theorem", "neg_one_right", ["commute"]], ["add", "theorem", "neg_right", ["commute"]], ["add", "theorem", "neg_right_iff", ["commute"]], ["add", "theorem", "sub_left", ["commute"]], ["add", "theorem", "sub_right", ["commute"]], ["add", "theorem", "zero_left", ["commute"]], ["add", "theorem", "zero_right", ["commute"]], ["add", "theorem", "add_left", ["semiconj_by"]], ["add", "theorem", "add_right", ["semiconj_by"]], ["add", "theorem", "neg_left", ["semiconj_by"]], ["add", "theorem", "neg_left_iff", ["semiconj_by"]], ["add", "theorem", "neg_one_left", ["semiconj_by"]], ["add", "theorem", "neg_one_right", ["semiconj_by"]], ["add", "theorem", "neg_right", ["semiconj_by"]], ["add", "theorem", "neg_right_iff", ["semiconj_by"]], ["add", "theorem", "sub_left", ["semiconj_by"]], ["add", "theorem", "sub_right", ["semiconj_by"]], ["add", "theorem", "zero_left", ["semiconj_by"]], ["add", "theorem", "zero_right", ["semiconj_by"]]]}, {"oldPath": "src/algebra/semiconj.lean", "newPath": null, "changes": [["del", "theorem", "add_left", ["semiconj_by"]], ["del", "theorem", "add_right", ["semiconj_by"]], ["del", "theorem", "cast_nat_left", ["semiconj_by"]], ["del", "theorem", "cast_nat_right", ["semiconj_by"]], ["del", "theorem", "conj_mk", ["semiconj_by"]], ["del", "theorem", "finv_symm_left", ["semiconj_by"]], ["del", "theorem", "finv_symm_left_iff", ["semiconj_by"]], ["del", "theorem", "gpow_right", ["semiconj_by"]], ["del", "theorem", "gsmul_gsmul", ["semiconj_by"]], ["del", "theorem", "gsmul_left", ["semiconj_by"]], ["del", "theorem", "gsmul_right", ["semiconj_by"]], ["del", "theorem", "inv_inv_symm", ["semiconj_by"]], ["del", "theorem", "inv_inv_symm_iff", ["semiconj_by"]], ["del", "theorem", "inv_right", ["semiconj_by"]], ["del", "theorem", "inv_right_iff", ["semiconj_by"]], ["del", "theorem", "inv_symm_left", ["semiconj_by"]], ["del", "theorem", "inv_symm_left_iff", ["semiconj_by"]], ["del", "theorem", "mul_left", ["semiconj_by"]], ["del", "theorem", "mul_right", ["semiconj_by"]], ["del", "theorem", "neg_left", ["semiconj_by"]], ["del", "theorem", "neg_left_iff", ["semiconj_by"]], ["del", "theorem", "neg_one_left", ["semiconj_by"]], ["del", "theorem", "neg_one_right", ["semiconj_by"]], ["del", "theorem", "neg_right", ["semiconj_by"]], ["del", "theorem", "neg_right_iff", ["semiconj_by"]], ["del", "theorem", "nsmul_left", ["semiconj_by"]], ["del", "theorem", "nsmul_nsmul", ["semiconj_by"]], ["del", "theorem", "nsmul_right", ["semiconj_by"]], ["del", "theorem", "one_left", ["semiconj_by"]], ["del", "theorem", "one_right", ["semiconj_by"]], ["del", "theorem", "pow_right", ["semiconj_by"]], ["del", "theorem", "sub_left", ["semiconj_by"]], ["del", "theorem", "sub_right", ["semiconj_by"]], ["del", "theorem", "units_coe", ["semiconj_by"]], ["del", "theorem", "units_coe_iff", ["semiconj_by"]], ["del", "theorem", "units_gpow_right", ["semiconj_by"]], ["del", "theorem", "units_inv_right", ["semiconj_by"]], ["del", "theorem", "units_inv_right_iff", ["semiconj_by"]], ["del", "theorem", "units_inv_symm_left", ["semiconj_by"]], ["del", "theorem", "units_inv_symm_left_iff", ["semiconj_by"]], ["del", "theorem", "units_of_coe", ["semiconj_by"]], ["del", "theorem", "zero_left", ["semiconj_by"]], ["del", "theorem", "zero_right", ["semiconj_by"]], ["del", "def", "semiconj_by", []], ["del", "theorem", "conj_pow'", ["units"]], ["del", "theorem", "conj_pow", ["units"]], ["del", "theorem", "mk_semiconj_by", ["units"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "cast_commute", ["int"]], ["add", "theorem", "commute_cast", ["int"]], ["del", "theorem", "mul_cast_comm", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_commute", ["nat"]], ["mod", "theorem", "coe_cast_ring_hom", ["nat"]], ["add", "theorem", "commute_cast", ["nat"]], ["del", "theorem", "mul_cast_comm", ["nat"]]]}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "cast_commute", ["rat"]], ["add", "theorem", "commute_cast", ["rat"]], ["del", "theorem", "mul_cast_comm", ["rat"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1591634395, "sha": "2caf479d", "message": "feat(data/matrix/basic): add bit0, bit1 lemmas (#2987)\nBased on a conversation in\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Matrix.20equality.20by.20extensionality\nwe define simp lemmas for matrices represented by numerals.\nThis should result in better representation of scalar multiples of\n `one_val : matrix n n a`.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "bit0_apply_apply", ["matrix"]], ["add", "theorem", "bit1_apply_apply", ["matrix"]]]}]}, {"timestamp": 1591628775, "sha": "3ca4c270", "message": "chore(algebra/ordered_ring): use le instead of ge (#2986)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "le_of_mul_le_mul_left", []], ["mod", "theorem", "le_of_mul_le_mul_right", []], ["del", "theorem", "le_of_mul_le_of_ge_one", []], ["add", "theorem", "le_of_mul_le_of_one_le", []], ["mod", "theorem", "lt_of_mul_lt_mul_left", []], ["mod", "theorem", "lt_of_mul_lt_mul_right", []], ["mod", "theorem", "mul_lt_mul'", []], ["mod", "theorem", "mul_neg_of_neg_of_pos", []], ["mod", "theorem", "mul_neg_of_pos_of_neg", []], ["mod", "theorem", "mul_nonpos_of_nonneg_of_nonpos", []], ["mod", "theorem", "mul_nonpos_of_nonpos_of_nonneg", []], ["add", "theorem", "neg_one_lt_zero", []], ["mod", "theorem", "nonneg_le_nonneg_of_squares_le", []], ["add", "theorem", "one_le_two", []], ["mod", "theorem", "one_lt_two", []], ["del", "theorem", "two_ge_one", []], ["del", "theorem", "two_gt_one", []], ["del", "theorem", "zero_gt_neg_one", []]]}]}, {"timestamp": 1591628772, "sha": "47f73356", "message": "feat(data/nat/digits): digits, and divisibility tests for Freek 85 (#2686)\nI couldn't quite believe how much low hanging fruit there is on Lean's attempt at Freek's list, and so took a moment to do surely the lowest of the low...\nThis provides `digits b n`, which extracts the digits of a natural number `n` with respect to a base `b`, and `of_digits b L`, which reconstitutes a number from its digits, proves a few simple facts about these functions, and proves the usual divisibility by 3, 9, and 11 tests.", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "dvd_iff_dvd_of_dvd_sub", []], ["add", "theorem", "dvd_mul_sub_mul", []]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "alternating_prod_eq_finset_prod", ["list"]], ["add", "theorem", "alternating_sum_eq_finset_sum", ["list"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "nat_cast_eq_coe_nat", ["int"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "alternating_prod_cons_cons", ["list"]], ["add", "theorem", "alternating_prod_nil", ["list"]], ["add", "theorem", "alternating_prod_singleton", ["list"]], ["add", "theorem", "alternating_sum_cons_cons", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "alternating_prod", ["list"]], ["add", "def", "alternating_sum", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_lt_self'", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/digits.lean", "changes": [["add", "theorem", "coe_int_of_digits", []], ["add", "theorem", "coe_of_digits", []], ["add", "def", "digits", []], ["add", "theorem", "digits_add", []], ["add", "theorem", "digits_add_two_add_one", []], ["add", "def", "digits_aux", []], ["add", "def", "digits_aux_0", []], ["add", "def", "digits_aux_1", []], ["add", "theorem", "digits_aux_def", []], ["add", "theorem", "digits_aux_zero", []], ["add", "theorem", "digits_of_digits", []], ["add", "theorem", "digits_of_lt", []], ["add", "theorem", "digits_one_succ", []], ["add", "theorem", "digits_zero", []], ["add", "theorem", "digits_zero_of_eq_zero", []], ["add", "theorem", "dvd_iff_dvd_digits_sum", []], ["add", "theorem", "dvd_iff_dvd_of_digits", []], ["add", "theorem", "dvd_of_digits_sub_of_digits", []], ["add", "theorem", "eleven_dvd_iff", []], ["add", "theorem", "modeq_digits_sum", []], ["add", "theorem", "modeq_eleven_digits_sum", []], ["add", "theorem", "modeq_nine_digits_sum", []], ["add", "theorem", "modeq_three_digits_sum", []], ["add", "theorem", "nine_dvd_iff", []], ["add", "def", "of_digits", []], ["add", "theorem", "of_digits_digits", []], ["add", "theorem", "of_digits_eq_foldr", []], ["add", "theorem", "of_digits_mod", []], ["add", "theorem", "of_digits_modeq'", []], ["add", "theorem", "of_digits_modeq", []], ["add", "theorem", "of_digits_neg_one", []], ["add", "theorem", "of_digits_one", []], ["add", "theorem", "of_digits_one_cons", []], ["add", "theorem", "of_digits_zmod", []], ["add", "theorem", "of_digits_zmodeq'", []], ["add", "theorem", "of_digits_zmodeq", []], ["add", "theorem", "three_dvd_iff", []], ["add", "theorem", "zmodeq_of_digits_digits", []]]}]}, {"timestamp": 1591624481, "sha": "a7930425", "message": "feat(ring_theory/fractional_ideal): pushforward of fractional ideals (#2984)\nExtend `submodule.map` to fractional ideals by showing that the pushforward is also fractional.\nFor this, we need a slightly tweaked definition of fractional ideal: if we localize `R` at the submonoid `S`, the old definition required a nonzero `x : R` such that `xI ≤ R`, and the new definition requires `x ∈ S` instead. In the most common case, `S = non_zero_divisors R`, the results are exactly the same, and all operations are still the same.\nA practical use of these pushforwards is included: `canonical_equiv` states fractional ideals don't depend on choice of localization map.", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_add_equiv_refl", ["ring_equiv"]], ["add", "theorem", "coe_mul_equiv_refl", ["ring_equiv"]], ["add", "theorem", "refl_apply", ["ring_equiv"]], ["add", "theorem", "to_add_monoid_hom_refl", ["ring_equiv"]], ["del", "theorem", "to_fun_eq_coe", ["ring_equiv"]], ["add", "theorem", "to_fun_eq_coe_fun", ["ring_equiv"]], ["add", "theorem", "to_monoid_hom_refl", ["ring_equiv"]], ["add", "theorem", "to_ring_hom_refl", ["ring_equiv"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "map_id", ["submonoid"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_refl", ["alg_equiv"]], ["add", "theorem", "comp_symm", ["alg_equiv"]], ["add", "theorem", "symm_comp", ["alg_equiv"]]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["add", "theorem", "map_mul", ["submodule"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_add", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_coe_ideal", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_ideal_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_inv_of_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_map", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_ne_bot_iff_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "eq_span_singleton_of_principal", ["ring", "fractional_ideal"]], ["mod", "theorem", "ext", ["ring", "fractional_ideal"]], ["add", "theorem", "fractional_map", ["ring", "fractional_ideal"]], ["del", "theorem", "invertible_of_principal", ["ring", "fractional_ideal"]], ["add", "theorem", "is_principal_iff", ["ring", "fractional_ideal"]], ["add", "def", "map", ["ring", "fractional_ideal"]], ["add", "theorem", "map_add", ["ring", "fractional_ideal"]], ["add", "theorem", "map_comp", ["ring", "fractional_ideal"]], ["add", "def", "map_equiv", ["ring", "fractional_ideal"]], ["add", "theorem", "map_equiv_apply", ["ring", "fractional_ideal"]], ["add", "theorem", "map_equiv_refl", ["ring", "fractional_ideal"]], ["add", "theorem", "map_id", ["ring", "fractional_ideal"]], ["add", "theorem", "map_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_singleton_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_generator_self_inv", ["ring", "fractional_ideal"]], ["del", "theorem", "nonzero_iff_val_nonzero", ["ring", "fractional_ideal"]], ["mod", "def", "span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "span_singleton_eq_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_fractional", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_mul_span_singleton", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "span_singleton_zero", ["ring", "fractional_ideal"]], ["del", "theorem", "val_add", ["ring", "fractional_ideal"]], ["del", "theorem", "val_coe_ideal", ["ring", "fractional_ideal"]], ["add", "theorem", "val_eq_coe", ["ring", "fractional_ideal"]], ["del", "theorem", "val_inv_of_nonzero", ["ring", "fractional_ideal"]], ["del", "theorem", "val_mul", ["ring", "fractional_ideal"]], ["del", "theorem", "val_one", ["ring", "fractional_ideal"]], ["del", "theorem", "val_span_singleton", ["ring", "fractional_ideal"]], ["del", "theorem", "val_zero", ["ring", "fractional_ideal"]]]}]}, {"timestamp": 1591602943, "sha": "c360e01a", "message": "feat(ring/localization): add fraction map for int to rat cast (#2921)", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "mul_denom_eq_num", ["rat"]], ["del", "theorem", "mul_own_denom_eq_num", ["rat"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "def", "fraction_map", ["fraction_map", "int"]]]}]}, {"timestamp": 1591599632, "sha": "592f769e", "message": "feat(dynamics/circle): define translation number of a lift of a circle homeo (#2974)\nDefine a structure `circle_deg1_lift`, a function `translation_number : circle_deg1_lift → ℝ`, and prove some basic properties", "changes": [{"oldPath": "src/algebra/semiconj.lean", "newPath": "src/algebra/semiconj.lean", "changes": [["del", "theorem", "units_conj_mk", ["semiconj_by"]], ["add", "theorem", "conj_pow'", ["units"]], ["add", "theorem", "conj_pow", ["units"]], ["add", "theorem", "mk_semiconj_by", ["units"]]]}, {"oldPath": null, "newPath": "src/dynamics/circle/rotation_number/translation_number.lean", "changes": [["add", "theorem", "ceil_map_map_zero_le", ["circle_deg1_lift"]], ["add", "theorem", "coe_inj", ["circle_deg1_lift"]], ["add", "theorem", "coe_mk", ["circle_deg1_lift"]], ["add", "theorem", "coe_mul", ["circle_deg1_lift"]], ["add", "theorem", "coe_one", ["circle_deg1_lift"]], ["add", "theorem", "coe_pow", ["circle_deg1_lift"]], ["add", "theorem", "commute_add_int", ["circle_deg1_lift"]], ["add", "theorem", "commute_add_nat", ["circle_deg1_lift"]], ["add", "theorem", "commute_iff_commute", ["circle_deg1_lift"]], ["add", "theorem", "commute_int_add", ["circle_deg1_lift"]], ["add", "theorem", "commute_nat_add", ["circle_deg1_lift"]], ["add", "theorem", "commute_sub_int", ["circle_deg1_lift"]], ["add", "theorem", "commute_sub_nat", ["circle_deg1_lift"]], ["add", "theorem", "continuous_pow", ["circle_deg1_lift"]], ["add", "theorem", "dist_map_map_zero_lt", ["circle_deg1_lift"]], ["add", "theorem", "dist_map_zero_lt_of_semiconj", ["circle_deg1_lift"]], ["add", "theorem", "dist_map_zero_lt_of_semiconj_by", ["circle_deg1_lift"]], ["add", "theorem", "dist_map_zero_translation_number_le", ["circle_deg1_lift"]], ["add", "theorem", "dist_pow_map_zero_mul_translation_number_le", ["circle_deg1_lift"]], ["add", "theorem", "exists_eq_add_translation_number", ["circle_deg1_lift"]], ["add", "theorem", "ext", ["circle_deg1_lift"]], ["add", "theorem", "ext_iff", ["circle_deg1_lift"]], ["add", "theorem", "floor_map_map_zero_le", ["circle_deg1_lift"]], ["add", "theorem", "floor_sub_le_translation_number", ["circle_deg1_lift"]], ["add", "theorem", "forall_map_sub_of_Icc", ["circle_deg1_lift"]], ["add", "theorem", "inf_apply", ["circle_deg1_lift"]], ["add", "theorem", "iterate_eq_of_map_eq_add_int", ["circle_deg1_lift"]], ["add", "theorem", "iterate_le_of_map_le_add_int", ["circle_deg1_lift"]], ["add", "theorem", "iterate_mono", ["circle_deg1_lift"]], ["add", "theorem", "iterate_monotone", ["circle_deg1_lift"]], ["add", "theorem", "iterate_pos_eq_iff", ["circle_deg1_lift"]], ["add", "theorem", "iterate_pos_le_iff", ["circle_deg1_lift"]], ["add", "theorem", "iterate_pos_lt_iff", ["circle_deg1_lift"]], ["add", "theorem", "le_ceil_map_map_zero", ["circle_deg1_lift"]], ["add", "theorem", "le_floor_map_map_zero", ["circle_deg1_lift"]], ["add", "theorem", "le_iterate_of_add_int_le_map", ["circle_deg1_lift"]], ["add", "theorem", "le_iterate_pos_iff", ["circle_deg1_lift"]], ["add", "theorem", "le_map_map_zero", ["circle_deg1_lift"]], ["add", "theorem", "le_map_of_map_zero", ["circle_deg1_lift"]], ["add", "theorem", "le_translation_number_of_add_int_le", ["circle_deg1_lift"]], ["add", "theorem", "le_translation_number_of_add_le", ["circle_deg1_lift"]], ["add", "theorem", "le_translation_number_of_add_nat_le", ["circle_deg1_lift"]], ["add", "theorem", "lt_iterate_pos_iff", ["circle_deg1_lift"]], ["add", "theorem", "lt_map_map_zero", ["circle_deg1_lift"]], ["add", "theorem", "lt_map_of_int_lt_translation_number", ["circle_deg1_lift"]], ["add", "theorem", "lt_map_of_nat_lt_translation_number", ["circle_deg1_lift"]], ["add", "theorem", "lt_translation_number_of_forall_add_lt", ["circle_deg1_lift"]], ["add", "theorem", "map_add_int", ["circle_deg1_lift"]], ["add", "theorem", "map_add_nat", ["circle_deg1_lift"]], ["add", "theorem", "map_add_one", ["circle_deg1_lift"]], ["add", "theorem", "map_fract_sub_fract_eq", ["circle_deg1_lift"]], ["add", "theorem", "map_int_add", ["circle_deg1_lift"]], ["add", "theorem", "map_int_of_map_zero", ["circle_deg1_lift"]], ["add", "theorem", "map_le_of_map_zero", ["circle_deg1_lift"]], ["add", "theorem", "map_lt_of_translation_number_lt_int", ["circle_deg1_lift"]], ["add", "theorem", "map_lt_of_translation_number_lt_nat", ["circle_deg1_lift"]], ["add", "theorem", "map_map_zero_le", ["circle_deg1_lift"]], ["add", "theorem", "map_map_zero_lt", ["circle_deg1_lift"]], ["add", "theorem", "map_nat_add", ["circle_deg1_lift"]], ["add", "theorem", "map_one_add", ["circle_deg1_lift"]], ["add", "theorem", "map_sub_int", ["circle_deg1_lift"]], ["add", "theorem", "map_sub_nat", ["circle_deg1_lift"]], ["add", "theorem", "mono", ["circle_deg1_lift"]], ["add", "theorem", "mul_apply", ["circle_deg1_lift"]], ["add", "theorem", "mul_floor_map_zero_le_floor_iterate_zero", ["circle_deg1_lift"]], ["add", "theorem", "pow_mono", ["circle_deg1_lift"]], ["add", "theorem", "pow_monotone", ["circle_deg1_lift"]], ["add", "theorem", "semiconj_by_iff_semiconj", ["circle_deg1_lift"]], ["add", "theorem", "sup_apply", ["circle_deg1_lift"]], ["add", "theorem", "tendsto_translation_number'", ["circle_deg1_lift"]], ["add", "theorem", "tendsto_translation_number", ["circle_deg1_lift"]], ["add", "theorem", "tendsto_translation_number_aux", ["circle_deg1_lift"]], ["add", "theorem", "tendsto_translation_number_of_dist_bounded_aux", ["circle_deg1_lift"]], ["add", "theorem", "tendsto_translation_number₀'", ["circle_deg1_lift"]], ["add", "theorem", "tendsto_translation_number₀", ["circle_deg1_lift"]], ["add", "def", "translate", ["circle_deg1_lift"]], ["add", "theorem", "translate_apply", ["circle_deg1_lift"]], ["add", "theorem", "translate_gpow", ["circle_deg1_lift"]], ["add", "theorem", "translate_inv_apply", ["circle_deg1_lift"]], ["add", "theorem", "translate_iterate", ["circle_deg1_lift"]], ["add", "theorem", "translate_pow", ["circle_deg1_lift"]], ["add", "def", "translation_number", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_conj_eq'", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_conj_eq", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_int_iff", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_of_dist_bounded", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_of_semiconj", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_of_semiconj_by", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_of_tendsto_aux", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_of_tendsto₀'", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_of_tendsto₀", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_eq_rat_iff", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_le_ceil_sub", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_le_of_le_add", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_le_of_le_add_int", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_le_of_le_add_nat", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_lt_of_forall_lt_add", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_map_id", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_mono", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_mul_of_commute", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_of_eq_add_int", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_of_map_pow_eq_add_int", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_pow", ["circle_deg1_lift"]], ["add", "theorem", "translation_number_translate", ["circle_deg1_lift"]], ["add", "def", "transnum_aux_seq", ["circle_deg1_lift"]], ["add", "theorem", "transnum_aux_seq_def", ["circle_deg1_lift"]], ["add", "theorem", "transnum_aux_seq_dist_lt", ["circle_deg1_lift"]], ["add", "theorem", "transnum_aux_seq_zero", ["circle_deg1_lift"]], ["add", "theorem", "units_coe", ["circle_deg1_lift"]], ["add", "structure", "circle_deg1_lift", []]]}]}, {"timestamp": 1591551765, "sha": "edd02097", "message": "ci(deploy_docs.sh): generalize for use in doc-gen CI (#2978)\nThis moves some installation steps out of `deploy_docs.sh` script and makes it accept several path arguments so that it can be re-used in the CI for `doc-gen`. \nThe associated `doc-gen` PR: https://github.com/leanprover-community/doc-gen/pull/27 will be updated after this is merged.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1591546475, "sha": "be21b9a4", "message": "fix(data/nat/basic): use protected attribute (#2976)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1591530126, "sha": "516d9b54", "message": "chore(scripts): update nolints.txt (#2975)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591522771, "sha": "a7f0069c", "message": "chore(algebra/ring): fix docs, `def`/`lemma` (#2972)", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "def", "add_mul", []], ["del", "def", "mul_add", []], ["del", "def", "mul_sub", []], ["del", "def", "sub_mul", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_tsum_le_tsum_norm", []]]}]}, {"timestamp": 1591503797, "sha": "16ad1b41", "message": "chore(topology/basic): remove unneeded `mk_protected` (#2971)\nIt was already fixed by adding `@[protect_proj]`.", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1591500588, "sha": "b59f777c", "message": "feat(category_theory/eq_to_hom): functor extensionality using heq (#2712)\nUsed in https://github.com/rwbarton/lean-homotopy-theory.\nAlso proves `faithful.div_comp`, but using it would create an import loop\nso for now I just leave a comment.", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "hext", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}]}, {"timestamp": 1591477000, "sha": "2a36d256", "message": "chore(analysis/normed_space/mazur_ulam): add `to_affine_map` (#2963)", "changes": [{"oldPath": "src/analysis/normed_space/mazur_ulam.lean", "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": [["add", "theorem", "coe_to_affine_map", ["isometric"]], ["add", "def", "to_affine_map", ["isometric"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "coe_mk'", ["affine_map"]], ["add", "def", "mk'", ["affine_map"]], ["add", "theorem", "mk'_linear", ["affine_map"]]]}]}, {"timestamp": 1591467293, "sha": "a44c9a18", "message": "chore(*): protect some definitions to get rid of _root_ (#2846)\nThese were amongst the worst offenders.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1591465241, "sha": "e48c2af4", "message": "feat(data/padics/padic_norm): New padic_val_nat convenience functions (#2970)\nConvenience functions to allow us to deal either with the p-adic valuation or with multiplicity in the naturals, depending on what is locally convenient.", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["add", "def", "padic_val_nat", ["padic_val_rat"]], ["add", "theorem", "padic_val_nat_def", ["padic_val_rat"]], ["add", "theorem", "padic_val_rat_of_nat", ["padic_val_rat"]], ["add", "theorem", "zero_le_padic_val_rat_of_nat", ["padic_val_rat"]]]}]}, {"timestamp": 1591465239, "sha": "589bdb97", "message": "feat(number_theory/lucas_lehmer): prime (2^127 - 1) (#2842)\nThis PR\n1. proves the sufficiency of the Lucas-Lehmer test for Mersenne primes\n2. provides a tactic that uses `norm_num` to do each step of the calculation of Lucas-Lehmer residues\n3. proves 2^127 - 1 = 170141183460469231731687303715884105727 is prime\nIt doesn't\n1. prove the necessity of the Lucas-Lehmer test (mathlib certainly has the necessary material if someone wants to do this)\n2. use the trick `n ≡ (n % 2^p) + (n / 2^p) [MOD 2^p - 1]` that is essential to calculating Lucas-Lehmer residues quickly\n3. manage to prove any \"computer era\" primes are prime! (Although my guess is that 2^521 - 1 would run in <1 day with the current implementation.)\nI think using \"the trick\" is very plausible, and would be a fun project for someone who wanted to experiment with certified/fast arithmetic in Lean. It likely would make much larger Mersenne primes accessible.\nThis is a tidy-up and completion of work started by a student, Ainsley Pahljina.", "changes": [{"oldPath": null, "newPath": "archive/examples/mersenne_primes.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "two_not_dvd_two_mul_add_one", ["nat"]], ["add", "theorem", "two_not_dvd_two_mul_sub_one", ["nat"]]]}, {"oldPath": null, "newPath": "src/number_theory/lucas_lehmer.lean", "changes": [["add", "theorem", "X_card", ["lucas_lehmer", "X"]], ["add", "theorem", "add_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "add_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "bit0_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "bit0_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "bit1_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "bit1_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "closed_form", ["lucas_lehmer", "X"]], ["add", "theorem", "coe_mul", ["lucas_lehmer", "X"]], ["add", "theorem", "coe_nat", ["lucas_lehmer", "X"]], ["add", "theorem", "ext", ["lucas_lehmer", "X"]], ["add", "theorem", "int_coe_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "int_coe_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "left_distrib", ["lucas_lehmer", "X"]], ["add", "theorem", "mul_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "mul_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "nat_coe_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "nat_coe_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "neg_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "neg_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "one_fst", ["lucas_lehmer", "X"]], ["add", "theorem", "one_snd", ["lucas_lehmer", "X"]], ["add", "theorem", "right_distrib", ["lucas_lehmer", "X"]], ["add", "theorem", "units_card", ["lucas_lehmer", "X"]], ["add", "def", "ω", ["lucas_lehmer", "X"]], ["add", "theorem", "ω_mul_ωb", ["lucas_lehmer", "X"]], ["add", "def", "ωb", ["lucas_lehmer", "X"]], ["add", "theorem", "ωb_mul_ω", ["lucas_lehmer", "X"]], ["add", "def", "X", ["lucas_lehmer"]], ["add", "theorem", "coe_nat_pow_pred", ["lucas_lehmer", "int"]], ["add", "theorem", "coe_nat_two_pow_pred", ["lucas_lehmer", "int"]], ["add", "def", "lucas_lehmer_residue", ["lucas_lehmer"]], ["add", "def", "lucas_lehmer_test", ["lucas_lehmer"]], ["add", "theorem", "mersenne_coe_X", ["lucas_lehmer"]], ["add", "theorem", "mersenne_int_ne_zero", ["lucas_lehmer"]], ["add", "theorem", "order_ineq", ["lucas_lehmer"]], ["add", "theorem", "order_ω", ["lucas_lehmer"]], ["add", "def", "q", ["lucas_lehmer"]], ["add", "theorem", "residue_eq_zero_iff_s_mod_eq_zero", ["lucas_lehmer"]], ["add", "def", "s", ["lucas_lehmer"]], ["add", "def", "s_mod", ["lucas_lehmer"]], ["add", "theorem", "s_mod_lt", ["lucas_lehmer"]], ["add", "theorem", "s_mod_mod", ["lucas_lehmer"]], ["add", "theorem", "s_mod_nonneg", ["lucas_lehmer"]], ["add", "theorem", "s_mod_succ", ["lucas_lehmer"]], ["add", "def", "s_zmod", ["lucas_lehmer"]], ["add", "theorem", "s_zmod_eq_s", ["lucas_lehmer"]], ["add", "theorem", "s_zmod_eq_s_mod", ["lucas_lehmer"]], ["add", "theorem", "two_lt_q", ["lucas_lehmer"]], ["add", "theorem", "ω_pow_eq_neg_one", ["lucas_lehmer"]], ["add", "theorem", "ω_pow_eq_one", ["lucas_lehmer"]], ["add", "theorem", "ω_pow_formula", ["lucas_lehmer"]], ["add", "def", "ω_unit", ["lucas_lehmer"]], ["add", "theorem", "ω_unit_coe", ["lucas_lehmer"]], ["add", "theorem", "lucas_lehmer_sufficiency", []], ["add", "def", "mersenne", []], ["add", "theorem", "mersenne_pos", []], ["add", "theorem", "modeq_mersenne", []]]}]}, {"timestamp": 1591457942, "sha": "ed5f6360", "message": "chore(algebra/group_with_zero_power): review (#2966)\nList of changes:\n* Rename `gpow_neg_succ` to `gpow_neg_succ_of_nat` to match other names in `int` namespace.\n* Add `units.coe_gpow`.\n* Remove `fpow_neg_succ`, leave `fpow_neg_succ_of_nat`.\n* Rewrite the proof of `fpow_add` in the same way I rewrote the proof of `gpow_add`.\n* Make argument `a` implicit in some lemmas because they have an argument `ha : a ≠ 0`.\n* Remove `fpow_inv`. This was a copy of `fpow_neg_one` with a misleading name.\n* Remove `unit_pow` in favor of a more general `units.coe_pow`.\n* Remove `unit_gpow`, add a more general `units.coe_gpow'` instead.", "changes": [{"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["del", "theorem", "gpow_neg_succ", []], ["add", "theorem", "gpow_neg_succ_of_nat", []], ["del", "theorem", "gsmul_neg_succ", []], ["add", "theorem", "gsmul_neg_succ_of_nat", []], ["add", "theorem", "coe_gpow", ["units"]]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["mod", "theorem", "fpow_add", []], ["mod", "theorem", "fpow_add_one", []], ["del", "theorem", "fpow_inv", []], ["del", "theorem", "fpow_neg_succ", []], ["mod", "theorem", "fpow_neg_succ_of_nat", []], ["mod", "theorem", "fpow_one_add", []], ["add", "theorem", "fpow_sub_one", []], ["del", "theorem", "unit_gpow", []], ["del", "theorem", "unit_pow", []], ["add", "theorem", "coe_gpow'", ["units"]]]}, {"oldPath": "src/algebra/semiconj.lean", "newPath": "src/algebra/semiconj.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}]}, {"timestamp": 1591455930, "sha": "2f028a88", "message": "feat(analysis/convex/specific_functions): convexity of rpow (#2965)\nThe function `x -> x^p` is convex on `[0, +\\infty)` when `p \\ge 1`.", "changes": [{"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["add", "theorem", "convex_on_rpow", []]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}]}, {"timestamp": 1591449791, "sha": "f096a74a", "message": "fix(tactic/ring_exp): `ring_exp` now recognizes that `2^(n+1+1) = 2 * 2^(n+1)` (#2929)\n[Zulip thread with bug report](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/ring_exp.20needs.20ring).\nThe problem was a missing lemma so that `norm_num` could fire on `x^y` if `x` and `y` are coefficients.", "changes": [{"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": [["add", "theorem", "pow_pf_c_c", ["tactic", "ring_exp"]]]}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1591437346, "sha": "6f272716", "message": "fix(documentation): fix a typo in the readme (#2969)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1591430468, "sha": "d1ae307b", "message": "chore(algebra/ordered_group): add `exists_pos_add_of_lt` (#2967)\nAlso drop `protected` on `_root_.zero_lt_iff_ne_zero`.", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "exists_pos_add_of_lt", []], ["add", "theorem", "zero_lt_iff_ne_zero", []]]}]}, {"timestamp": 1591427717, "sha": "d18061fb", "message": "chore(algebra/add_torsor): a few more lemmas and implicit args (#2964)", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_left_cancel_iff", ["add_action"]], ["add", "theorem", "vadd_right_cancel_iff", ["add_torsor"]]]}, {"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": []}]}, {"timestamp": 1591373803, "sha": "1b2048d7", "message": "feat(analysis/special_functions/pow): rpow is differentiable (#2930)\nDifferentiability of the real power function `x ↦ x^p`. Also register the lemmas about the composition with a function to make sure that the simplifier can handle automatically the differentiability of `x ↦ (f x)^p` and more complicated expressions involving powers.", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": [["add", "theorem", "has_deriv_at_interval_right_endpoint_of_tendsto_deriv", []], ["add", "theorem", "has_deriv_at_of_has_deriv_at_of_ne", []], ["del", "theorem", "has_fderiv_at_interval_right_endpoint_of_tendsto_deriv", []]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "exp_log_of_neg", ["real"]]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "cpow_neg_one", ["complex"]], ["add", "theorem", "deriv_rpow", []], ["add", "theorem", "deriv_rpow_of_one_le", []], ["add", "theorem", "deriv_sqrt", []], ["add", "theorem", "deriv_within_rpow", []], ["add", "theorem", "deriv_within_rpow_of_one_le", []], ["add", "theorem", "deriv_within_sqrt", []], ["add", "theorem", "rpow", ["differentiable"]], ["add", "theorem", "rpow_of_one_le", ["differentiable"]], ["add", "theorem", "sqrt", ["differentiable"]], ["add", "theorem", "rpow", ["differentiable_at"]], ["add", "theorem", "rpow_of_one_le", ["differentiable_at"]], ["add", "theorem", "sqrt", ["differentiable_at"]], ["add", "theorem", "rpow", ["differentiable_on"]], ["add", "theorem", "rpow_of_one_le", ["differentiable_on"]], ["add", "theorem", "sqrt", ["differentiable_on"]], ["add", "theorem", "rpow", ["differentiable_within_at"]], ["add", "theorem", "rpow_of_one_le", ["differentiable_within_at"]], ["add", "theorem", "sqrt", ["differentiable_within_at"]], ["add", "theorem", "rpow", ["has_deriv_at"]], ["add", "theorem", "rpow_of_one_le", ["has_deriv_at"]], ["add", "theorem", "sqrt", ["has_deriv_at"]], ["add", "theorem", "rpow", ["has_deriv_within_at"]], ["add", "theorem", "rpow_of_one_le", ["has_deriv_within_at"]], ["add", "theorem", "sqrt", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_at_rpow", ["real"]], ["add", "theorem", "has_deriv_at_rpow_of_neg", ["real"]], ["add", "theorem", "has_deriv_at_rpow_of_one_le", ["real"]], ["add", "theorem", "has_deriv_at_rpow_of_pos", ["real"]], ["add", "theorem", "has_deriv_at_rpow_zero_of_one_le", ["real"]], ["add", "theorem", "le_rpow_add", ["real"]], ["add", "theorem", "rpow_add'", ["real"]], ["mod", "theorem", "rpow_add", ["real"]], ["add", "theorem", "rpow_neg_one", ["real"]], ["add", "theorem", "zero_rpow_le_one", ["real"]], ["add", "theorem", "zero_rpow_nonneg", ["real"]]]}]}, {"timestamp": 1591364377, "sha": "5c851bdb", "message": "fix(tactic/squeeze_simp): make `squeeze_simp [←...]` work (#2961)\n`squeeze_simp` parses the argument list using a function in core Lean, and when support for backwards arguments was added to `simp`, it used a new function to parse the additional structure. This PR fixes the TODO left in the code to switch `squeeze_simp` to the new function by deleting the code that needed it - it wasn't used anyway!\nTo add a test for the fix, I moved the single existing `squeeze_simp` test from the deprecated file `examples.lean` to a new file.", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}, {"oldPath": null, "newPath": "test/squeeze.lean", "changes": []}]}, {"timestamp": 1591358333, "sha": "a433eb07", "message": "feat(analysis/special_functions/pow): real powers on ennreal (#2951)\nReal powers of extended nonnegative real numbers. We develop an API based on that of real powers of reals and nnreals, proving the corresponding lemmas.", "changes": [{"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "coe_mul_rpow", ["ennreal"]], ["add", "theorem", "coe_rpow_of_ne_zero", ["ennreal"]], ["add", "theorem", "coe_rpow_of_nonneg", ["ennreal"]], ["add", "theorem", "mul_rpow_of_ne_top", ["ennreal"]], ["add", "theorem", "mul_rpow_of_ne_zero", ["ennreal"]], ["add", "theorem", "one_le_rpow", ["ennreal"]], ["add", "theorem", "one_lt_rpow", ["ennreal"]], ["add", "theorem", "one_rpow", ["ennreal"]], ["add", "theorem", "rpow_add", ["ennreal"]], ["add", "theorem", "rpow_eq_pow", ["ennreal"]], ["add", "theorem", "rpow_eq_top_iff", ["ennreal"]], ["add", "theorem", "rpow_eq_zero_iff", ["ennreal"]], ["add", "theorem", "rpow_le_one", ["ennreal"]], ["add", "theorem", "rpow_le_rpow", ["ennreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["ennreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["ennreal"]], ["add", "theorem", "rpow_lt_one", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["ennreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["ennreal"]], ["add", "theorem", "rpow_mul", ["ennreal"]], ["add", "theorem", "rpow_nat_cast", ["ennreal"]], ["add", "theorem", "rpow_neg", ["ennreal"]], ["add", "theorem", "rpow_neg_one", ["ennreal"]], ["add", "theorem", "rpow_one", ["ennreal"]], ["add", "theorem", "rpow_zero", ["ennreal"]], ["add", "theorem", "top_rpow_def", ["ennreal"]], ["add", "theorem", "top_rpow_of_neg", ["ennreal"]], ["add", "theorem", "top_rpow_of_pos", ["ennreal"]], ["add", "theorem", "zero_rpow_def", ["ennreal"]], ["add", "theorem", "zero_rpow_of_neg", ["ennreal"]], ["add", "theorem", "zero_rpow_of_pos", ["ennreal"]], ["mod", "theorem", "rpow_add", ["nnreal"]], ["mod", "theorem", "rpow_le_one", ["nnreal"]], ["mod", "theorem", "rpow_le_one", ["real"]]]}]}, {"timestamp": 1591353713, "sha": "fd623d6c", "message": "feat(data/set/intervals/image_preimage): new file (#2958)\n* Create a file for lemmas like\n `(λ x, x + a) '' Icc b c = Icc (b + a) (b + c)`.\n* Prove lemmas about images and preimages of all intervals under\n `x ↦ x ± a`, `x ↦ a ± x`, and `x ↦ -x`.\n* Move lemmas about multiplication from `basic`.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["del", "theorem", "image_add_left_Icc", ["set"]], ["del", "theorem", "image_add_right_Icc", ["set"]], ["del", "theorem", "image_mul_left_Icc'", ["set"]], ["del", "theorem", "image_mul_left_Icc", ["set"]], ["del", "theorem", "image_mul_right_Icc'", ["set"]], ["del", "theorem", "image_mul_right_Icc", ["set"]], ["del", "theorem", "image_neg_Iic", ["set"]], ["del", "theorem", "image_neg_Iio", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/intervals/image_preimage.lean", "changes": [["add", "theorem", "image_add_const_Icc", ["set"]], ["add", "theorem", "image_add_const_Ici", ["set"]], ["add", "theorem", "image_add_const_Ico", ["set"]], ["add", "theorem", "image_add_const_Iic", ["set"]], ["add", "theorem", "image_add_const_Iio", ["set"]], ["add", "theorem", "image_add_const_Ioc", ["set"]], ["add", "theorem", "image_add_const_Ioi", ["set"]], ["add", "theorem", "image_add_const_Ioo", ["set"]], ["add", "theorem", "image_const_add_Icc", ["set"]], ["add", "theorem", "image_const_add_Ici", ["set"]], ["add", "theorem", "image_const_add_Ico", ["set"]], ["add", "theorem", "image_const_add_Iic", ["set"]], ["add", "theorem", "image_const_add_Iio", ["set"]], ["add", "theorem", "image_const_add_Ioc", ["set"]], ["add", "theorem", "image_const_add_Ioi", ["set"]], ["add", "theorem", "image_const_add_Ioo", ["set"]], ["add", "theorem", "image_const_sub_Icc", ["set"]], ["add", "theorem", "image_const_sub_Ici", ["set"]], ["add", "theorem", "image_const_sub_Ico", ["set"]], ["add", "theorem", "image_const_sub_Iic", ["set"]], ["add", "theorem", "image_const_sub_Iio", ["set"]], ["add", "theorem", "image_const_sub_Ioc", ["set"]], ["add", "theorem", "image_const_sub_Ioi", ["set"]], ["add", "theorem", "image_const_sub_Ioo", ["set"]], ["add", "theorem", "image_mul_left_Icc'", ["set"]], ["add", "theorem", "image_mul_left_Icc", ["set"]], ["add", "theorem", "image_mul_right_Icc'", ["set"]], ["add", "theorem", "image_mul_right_Icc", ["set"]], ["add", "theorem", "image_neg_Icc", ["set"]], ["add", "theorem", "image_neg_Ici", ["set"]], ["add", "theorem", "image_neg_Ico", ["set"]], ["add", "theorem", "image_neg_Iic", ["set"]], ["add", "theorem", "image_neg_Iio", ["set"]], ["add", "theorem", "image_neg_Ioc", ["set"]], ["add", "theorem", "image_neg_Ioi", ["set"]], ["add", "theorem", "image_neg_Ioo", ["set"]], ["add", "theorem", "image_sub_const_Icc", ["set"]], ["add", "theorem", "image_sub_const_Ici", ["set"]], ["add", "theorem", "image_sub_const_Ico", ["set"]], ["add", "theorem", "image_sub_const_Iic", ["set"]], ["add", "theorem", "image_sub_const_Iio", ["set"]], ["add", "theorem", "image_sub_const_Ioc", ["set"]], ["add", "theorem", "image_sub_const_Ioi", ["set"]], ["add", "theorem", "image_sub_const_Ioo", ["set"]], ["add", "theorem", "preimage_add_const_Icc", ["set"]], ["add", "theorem", "preimage_add_const_Ici", ["set"]], ["add", "theorem", "preimage_add_const_Ico", ["set"]], ["add", "theorem", "preimage_add_const_Iic", ["set"]], ["add", "theorem", "preimage_add_const_Iio", ["set"]], ["add", "theorem", "preimage_add_const_Ioc", ["set"]], ["add", "theorem", "preimage_add_const_Ioi", ["set"]], ["add", "theorem", "preimage_add_const_Ioo", ["set"]], ["add", "theorem", "preimage_const_add_Icc", ["set"]], ["add", "theorem", "preimage_const_add_Ici", ["set"]], ["add", "theorem", "preimage_const_add_Ico", ["set"]], ["add", "theorem", "preimage_const_add_Iic", ["set"]], ["add", "theorem", "preimage_const_add_Iio", ["set"]], ["add", "theorem", "preimage_const_add_Ioc", ["set"]], ["add", "theorem", "preimage_const_add_Ioi", ["set"]], ["add", "theorem", "preimage_const_add_Ioo", ["set"]], ["add", "theorem", "preimage_const_sub_Icc", ["set"]], ["add", "theorem", "preimage_const_sub_Ici", ["set"]], ["add", "theorem", "preimage_const_sub_Ico", ["set"]], ["add", "theorem", "preimage_const_sub_Iic", ["set"]], ["add", "theorem", "preimage_const_sub_Iio", ["set"]], ["add", "theorem", "preimage_const_sub_Ioc", ["set"]], ["add", "theorem", "preimage_const_sub_Ioi", ["set"]], ["add", "theorem", "preimage_const_sub_Ioo", ["set"]], ["add", "theorem", "preimage_neg_Icc", ["set"]], ["add", "theorem", "preimage_neg_Ici", ["set"]], ["add", "theorem", "preimage_neg_Ico", ["set"]], ["add", "theorem", "preimage_neg_Iic", ["set"]], ["add", "theorem", "preimage_neg_Iio", ["set"]], ["add", "theorem", "preimage_neg_Ioc", ["set"]], ["add", "theorem", "preimage_neg_Ioi", ["set"]], ["add", "theorem", "preimage_neg_Ioo", ["set"]], ["add", "theorem", "preimage_sub_const_Icc", ["set"]], ["add", "theorem", "preimage_sub_const_Ici", ["set"]], ["add", "theorem", "preimage_sub_const_Ico", ["set"]], ["add", "theorem", "preimage_sub_const_Iic", ["set"]], ["add", "theorem", "preimage_sub_const_Iio", ["set"]], ["add", "theorem", "preimage_sub_const_Ioc", ["set"]], ["add", "theorem", "preimage_sub_const_Ioi", ["set"]], ["add", "theorem", "preimage_sub_const_Ioo", ["set"]]]}]}, {"timestamp": 1591351803, "sha": "1ef65c99", "message": "feat(linear_algebra/quadratic_form): more constructions for quadratic forms (#2949)\nDefine multiplication of two linear forms to give a quadratic form and addition of quadratic forms. With these definitions, we can write a generic binary quadratic form as `a • proj R₁ 0 0 + b • proj R₁ 0 1 + c • proj R₁ 1 1 : quadratic_form R₁ (fin 2 → R₁)`.\nIn order to prove the linearity conditions on the constructions, there are new `simp` lemmas `polar_add_left`, `polar_smul_left`, `polar_add_right` and `polar_smul_right` copying from the corresponding fields of the `quadratic_form` structure, that use `⇑ Q` instead of `Q.to_fun`. The original field names have a `'` appended to avoid name clashes.", "changes": [{"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "def", "lin_mul_lin", ["bilin_form"]], ["add", "theorem", "lin_mul_lin_apply", ["bilin_form"]], ["add", "theorem", "lin_mul_lin_comp", ["bilin_form"]], ["add", "theorem", "lin_mul_lin_comp_left", ["bilin_form"]], ["add", "theorem", "lin_mul_lin_comp_right", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "add_apply", ["quadratic_form"]], ["add", "theorem", "add_lin_mul_lin", ["quadratic_form"]], ["mod", "def", "associated", ["quadratic_form"]], ["add", "theorem", "associated_lin_mul_lin", ["quadratic_form"]], ["del", "theorem", "associated_smul", ["quadratic_form"]], ["add", "theorem", "coe_fn_add", ["quadratic_form"]], ["add", "theorem", "coe_fn_neg", ["quadratic_form"]], ["add", "theorem", "coe_fn_smul", ["quadratic_form"]], ["mod", "theorem", "discr_smul", ["quadratic_form"]], ["add", "def", "lin_mul_lin", ["quadratic_form"]], ["add", "theorem", "lin_mul_lin_add", ["quadratic_form"]], ["add", "theorem", "lin_mul_lin_apply", ["quadratic_form"]], ["add", "theorem", "lin_mul_lin_comp", ["quadratic_form"]], ["add", "theorem", "lin_mul_lin_self_pos_def", ["quadratic_form"]], ["add", "def", "mk_left", ["quadratic_form"]], ["add", "theorem", "neg_apply", ["quadratic_form"]], ["mod", "def", "polar", ["quadratic_form"]], ["add", "theorem", "polar_add", ["quadratic_form"]], ["add", "theorem", "polar_add_left", ["quadratic_form"]], ["add", "theorem", "polar_add_right", ["quadratic_form"]], ["add", "theorem", "polar_comm", ["quadratic_form"]], ["add", "theorem", "polar_neg", ["quadratic_form"]], ["add", "theorem", "polar_smul", ["quadratic_form"]], ["add", "theorem", "polar_smul_left", ["quadratic_form"]], ["add", "theorem", "polar_smul_right", ["quadratic_form"]], ["add", "theorem", "add", ["quadratic_form", "pos_def"]], ["add", "theorem", "smul", ["quadratic_form", "pos_def"]], ["add", "def", "proj", ["quadratic_form"]], ["add", "theorem", "proj_apply", ["quadratic_form"]], ["mod", "theorem", "smul_apply", ["quadratic_form"]], ["del", "theorem", "smul_pos_def_of_nonzero", ["quadratic_form"]], ["del", "theorem", "smul_pos_def_of_smul_nonzero", ["quadratic_form"]], ["add", "theorem", "zero_apply", ["quadratic_form"]]]}]}, {"timestamp": 1591346472, "sha": "31ceb624", "message": "feat(data/int|nat/basic): add `add_monoid_hom.ext_nat/int` (#2957)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "eq_on_inv", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "eq_int_cast", ["add_monoid_hom"]], ["add", "theorem", "eq_int_cast_hom", ["add_monoid_hom"]], ["add", "theorem", "ext_int", ["add_monoid_hom"]], ["add", "def", "cast_add_hom", ["int"]], ["add", "theorem", "coe_cast_add_hom", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "eq_nat_cast", ["add_monoid_hom"]], ["add", "theorem", "ext_nat", ["add_monoid_hom"]], ["mod", "theorem", "abs_cast", ["nat"]], ["mod", "theorem", "cast_bit0", ["nat"]], ["mod", "theorem", "cast_bit1", ["nat"]], ["mod", "theorem", "cast_max", ["nat"]], ["mod", "theorem", "cast_min", ["nat"]], ["mod", "theorem", "cast_pred", ["nat"]], ["mod", "theorem", "cast_sub", ["nat"]], ["mod", "theorem", "coe_cast_add_monoid_hom", ["nat"]], ["mod", "theorem", "eq_nat_cast", ["ring_hom"]], ["mod", "theorem", "ext_nat", ["ring_hom"]], ["mod", "theorem", "map_nat_cast", ["ring_hom"]]]}]}, {"timestamp": 1591346470, "sha": "edb4422a", "message": "feat(algebra/add_torsor): add `equiv.const_vadd` and `equiv.vadd_const` (#2907)\nAlso define their `isometric.*` versions in `analysis/normed_space/add_torsor`.", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_vsub_vadd_cancel_left", ["add_torsor"]], ["add", "theorem", "vadd_vsub_vadd_cancel_right", ["add_torsor"]], ["add", "theorem", "vsub_sub_vsub_cancel_left", ["add_torsor"]], ["add", "theorem", "vsub_sub_vsub_cancel_right", ["add_torsor"]], ["del", "theorem", "vsub_sub_vsub_left_cancel", ["add_torsor"]], ["del", "theorem", "vsub_sub_vsub_right_cancel", ["add_torsor"]], ["add", "theorem", "coe_const_vadd", ["equiv"]], ["add", "theorem", "coe_vadd_const", ["equiv"]], ["add", "theorem", "coe_vadd_const_symm", ["equiv"]], ["add", "def", "const_vadd", ["equiv"]], ["add", "theorem", "const_vadd_add", ["equiv"]], ["add", "def", "const_vadd_hom", ["equiv"]], ["add", "theorem", "const_vadd_zero", ["equiv"]], ["add", "def", "vadd_const", ["equiv"]]]}, {"oldPath": "src/analysis/normed_space/add_torsor.lean", "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "dist_vadd_cancel_left", []], ["add", "theorem", "dist_vadd_cancel_right", []], ["add", "theorem", "coe_const_vadd", ["isometric"]], ["add", "theorem", "coe_vadd_const", ["isometric"]], ["add", "theorem", "coe_vadd_const_symm", ["isometric"]], ["add", "def", "const_vadd", ["isometric"]], ["add", "theorem", "const_vadd_zero", ["isometric"]], ["add", "def", "vadd_const", ["isometric"]], ["add", "theorem", "vadd_const_to_equiv", ["isometric"]]]}]}, {"timestamp": 1591342127, "sha": "a130c73a", "message": "feat(topology/algebra/ordered): list of preconnected sets (#2943)\nA subset of a densely ordered conditionally complete lattice (e.g., `ℝ`) with order topology is preconnected if and only if it is one of the intervals.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "diff_compl", ["set"]], ["add", "theorem", "diff_diff_cancel_left", ["set"]], ["add", "theorem", "diff_diff_right", ["set"]], ["add", "theorem", "diff_inter", ["set"]], ["mod", "theorem", "mem_diff_singleton", ["set"]], ["add", "theorem", "subset_diff_singleton", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["del", "theorem", "Icc_diff_Ico_eq_singleton", ["set"]], ["add", "theorem", "Icc_diff_Ico_same", ["set"]], ["del", "theorem", "Icc_diff_Ioc_eq_singleton", ["set"]], ["add", "theorem", "Icc_diff_Ioc_same", ["set"]], ["add", "theorem", "Icc_diff_Ioo_same", ["set"]], ["add", "theorem", "Icc_diff_both", ["set"]], ["add", "theorem", "Icc_diff_left", ["set"]], ["add", "theorem", "Icc_diff_right", ["set"]], ["add", "theorem", "Ici_diff_Ioi_same", ["set"]], ["add", "theorem", "Ici_diff_left", ["set"]], ["del", "theorem", "Ico_diff_Ioo_eq_singleton", ["set"]], ["add", "theorem", "Ico_diff_Ioo_same", ["set"]], ["add", "theorem", "Ico_diff_left", ["set"]], ["add", "theorem", "Iic_diff_Iio_same", ["set"]], ["add", "theorem", "Iic_diff_right", ["set"]], ["add", "theorem", "Iio_union_right", ["set"]], ["del", "theorem", "Ioc_diff_Ioo_eq_singleton", ["set"]], ["add", "theorem", "Ioc_diff_Ioo_same", ["set"]], ["add", "theorem", "Ioc_diff_right", ["set"]], ["add", "theorem", "Ioi_union_left", ["set"]], ["add", "theorem", "mem_Icc_Ico_Ioc_Ioo_of_subset_of_subset", ["set"]], ["add", "theorem", "mem_Ici_Ioi_of_subset_of_subset", ["set"]], ["add", "theorem", "mem_Iic_Iio_of_subset_of_subset", ["set"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "nonempty_of_not_bdd_above", []], ["add", "theorem", "nonempty_of_not_bdd_below", []], ["add", "theorem", "not_bdd_above_iff'", []], ["add", "theorem", "not_bdd_above_iff", []], ["add", "theorem", "not_bdd_below_iff'", []], ["add", "theorem", "not_bdd_below_iff", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "cInf_mem_closure", []], ["mod", "theorem", "cInf_mem_of_is_closed", []], ["mod", "theorem", "cSup_mem_closure", []], ["mod", "theorem", "cSup_mem_of_is_closed", []], ["add", "theorem", "Ioo_cInf_cSup_subset", ["is_connected"]], ["add", "theorem", "nhds_within_ne_bot", ["is_glb"]], ["add", "theorem", "nhds_within_ne_bot", ["is_lub"]], ["add", "theorem", "Icc_subset", ["is_preconnected"]], ["add", "theorem", "Iio_cSup_subset", ["is_preconnected"]], ["add", "theorem", "Ioi_cInf_subset", ["is_preconnected"]], ["add", "theorem", "eq_univ_of_unbounded", ["is_preconnected"]], ["del", "theorem", "forall_Icc_subset", ["is_preconnected"]], ["add", "theorem", "mem_intervals", ["is_preconnected"]], ["mod", "theorem", "mem_closure_of_is_glb", []], ["mod", "theorem", "mem_closure_of_is_lub", []], ["mod", "theorem", "mem_of_is_glb_of_is_closed", []], ["mod", "theorem", "mem_of_is_lub_of_is_closed", []], ["del", "theorem", "nhds_principal_ne_bot_of_is_glb", []], ["del", "theorem", "nhds_principal_ne_bot_of_is_lub", []], ["add", "theorem", "set_of_is_preconnected_eq_of_ordered", []], ["add", "theorem", "set_of_is_preconnected_subset_of_ordered", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1591335081, "sha": "8f89bd83", "message": "chore(algebra/group_power): simplify a proof (#2955)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "gpow_add", []], ["mod", "theorem", "gpow_add_one", []], ["mod", "theorem", "gpow_mul", []], ["add", "theorem", "gpow_sub", []], ["add", "theorem", "gpow_sub_one", []], ["add", "theorem", "sub_gsmul", []]]}]}, {"timestamp": 1591335079, "sha": "d7fa4051", "message": "chore(algebra/*): merge `inv_inv''` with `inv_inv'` (#2954)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "inv_inv'", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["del", "theorem", "inv_inv''", []], ["add", "theorem", "inv_inv'", []]]}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}]}, {"timestamp": 1591335077, "sha": "81618883", "message": "feat(group_theory/subgroup): define normal bundled subgroups (#2947)\nMost proofs are adapted from `deprecated/subgroup`.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "sub_mem", ["add_subgroup"]], ["add", "theorem", "normal_ker", ["monoid_hom"]], ["del", "theorem", "rang_top_of_surjective", ["monoid_hom"]], ["add", "theorem", "range_top_of_surjective", ["monoid_hom"]], ["add", "theorem", "bot_normal", ["subgroup"]], ["add", "def", "center", ["subgroup"]], ["add", "theorem", "center_normal", ["subgroup"]], ["mod", "theorem", "coe_inv", ["subgroup"]], ["add", "theorem", "coe_mk", ["subgroup"]], ["add", "theorem", "le_normalizer", ["subgroup"]], ["add", "theorem", "le_normalizer_of_normal", ["subgroup"]], ["add", "theorem", "mem_center_iff", ["subgroup"]], ["add", "theorem", "mem_normalizer_iff", ["subgroup"]], ["add", "theorem", "mul_mem_cancel_left", ["subgroup"]], ["add", "theorem", "mul_mem_cancel_right", ["subgroup"]], ["add", "theorem", "conj_mem", ["subgroup", "normal"]], ["add", "theorem", "mem_comm", ["subgroup", "normal"]], ["add", "theorem", "mem_comm_iff", ["subgroup", "normal"]], ["add", "theorem", "normal_in_normalizer", ["subgroup"]], ["add", "theorem", "normal_of_comm", ["subgroup"]], ["add", "def", "normalizer", ["subgroup"]]]}]}, {"timestamp": 1591335075, "sha": "2131382b", "message": "feat(data/setoid/partition): some lemmas about partitions (#2937)", "changes": [{"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["add", "theorem", "pairwise_disjoint", ["setoid", "is_partition"]], ["add", "theorem", "sUnion_eq_univ", ["setoid", "is_partition"]], ["add", "theorem", "is_partition_classes", ["setoid"]]]}]}, {"timestamp": 1591332799, "sha": "80a52e99", "message": "chore(analysis/convex/basic): add `finset.convex_hull_eq` (#2956)", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_hull_eq", ["finset"]]]}]}, {"timestamp": 1591295881, "sha": "2ceb7f7f", "message": "feat(analysis/convex): preparatory statement for caratheodory (#2944)\nProves\n```lean\nlemma convex_hull_eq_union_convex_hull_finite_subsets (s : set E) :\n convex_hull s = ⋃ (t : finset E) (w : ↑t ⊆ s), convex_hull ↑t\n```", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_hull_eq_union_convex_hull_finite_subsets", []], ["add", "theorem", "convex_hull_singleton", []]]}]}, {"timestamp": 1591293952, "sha": "beb5d45c", "message": "chore(scripts): update nolints.txt (#2952)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591287517, "sha": "1a297969", "message": "chore(is_ring_hom): remove some uses of is_ring_hom (#2884)\nThis PR deletes the definitions `is_ring_anti_hom` and `ring_anti_equiv`, in favour of using the bundled `R →+* Rᵒᵖ` and `R ≃+* Rᵒᵖ`. It also changes the definition of `ring_invo`.\nThis is work towards removing the deprecated `is_*_hom` family.", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op_eq_one_iff", ["opposite"]], ["add", "theorem", "op_eq_zero_iff", ["opposite"]], ["add", "theorem", "unop_eq_one_iff", ["opposite"]], ["add", "theorem", "unop_eq_zero_iff", ["opposite"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "to_fun_apply", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "to_fun_eq_coe", ["ring_equiv"]], ["add", "def", "to_opposite", ["ring_equiv"]], ["add", "theorem", "to_opposite_apply", ["ring_equiv"]], ["add", "theorem", "to_opposite_symm_apply", ["ring_equiv"]]]}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["add", "def", "equiv_to_opposite", ["opposite"]], ["add", "theorem", "equiv_to_opposite_apply", ["opposite"]], ["add", "theorem", "equiv_to_opposite_symm_apply", ["opposite"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["mod", "theorem", "neg_left", ["sesq_form"]], ["mod", "theorem", "neg_right", ["sesq_form"]], ["mod", "theorem", "smul_right", ["sesq_form"]], ["mod", "theorem", "zero_left", ["sesq_form"]], ["mod", "theorem", "zero_right", ["sesq_form"]], ["mod", "structure", "sesq_form", []], ["mod", "theorem", "is_refl", ["sym_sesq_form"]], ["mod", "def", "is_sym", ["sym_sesq_form"]], ["mod", "theorem", "sym", ["sym_sesq_form"]]]}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": [["del", "def", "anti_equiv_to_equiv", ["comm_ring"]], ["del", "theorem", "anti_hom_to_hom", ["comm_ring"]], ["del", "def", "equiv_to_anti_equiv", ["comm_ring"]], ["del", "theorem", "hom_to_anti_hom", ["comm_ring"]], ["del", "theorem", "map_neg", ["is_ring_anti_hom"]], ["del", "theorem", "map_sub", ["is_ring_anti_hom"]], ["del", "theorem", "map_zero", ["is_ring_anti_hom"]], ["del", "theorem", "bijective", ["ring_anti_equiv"]], ["del", "theorem", "map_add", ["ring_anti_equiv"]], ["del", "theorem", "map_mul", ["ring_anti_equiv"]], ["del", "theorem", "map_neg", ["ring_anti_equiv"]], ["del", "theorem", "map_neg_one", ["ring_anti_equiv"]], ["del", "theorem", "map_one", ["ring_anti_equiv"]], ["del", "theorem", "map_sub", ["ring_anti_equiv"]], ["del", "theorem", "map_zero", ["ring_anti_equiv"]], ["del", "theorem", "map_zero_iff", ["ring_anti_equiv"]], ["del", "structure", "ring_anti_equiv", []], ["del", "theorem", "bijective", ["ring_equiv"]], ["del", "theorem", "map_zero_iff", ["ring_equiv"]], ["del", "theorem", "bijective", ["ring_invo"]], ["add", "theorem", "coe_ring_equiv", ["ring_invo"]], ["del", "theorem", "map_add", ["ring_invo"]], ["add", "theorem", "map_eq_zero_iff", ["ring_invo"]], ["del", "theorem", "map_mul", ["ring_invo"]], ["del", "theorem", "map_neg", ["ring_invo"]], ["del", "theorem", "map_neg_one", ["ring_invo"]], ["del", "theorem", "map_one", ["ring_invo"]], ["del", "theorem", "map_sub", ["ring_invo"]], ["del", "theorem", "map_zero", ["ring_invo"]], ["del", "theorem", "map_zero_iff", ["ring_invo"]], ["add", "def", "mk'", ["ring_invo"]], ["add", "theorem", "to_fun_eq_coe", ["ring_invo"]], ["del", "def", "to_ring_anti_equiv", ["ring_invo"]], ["mod", "structure", "ring_invo", []]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["add", "def", "coe_ring_hom", ["uniform_space", "completion"]], ["add", "def", "extension_hom", ["uniform_space", "completion"]], ["add", "def", "map_ring_hom", ["uniform_space", "completion"]]]}]}, {"timestamp": 1591285106, "sha": "7d803a98", "message": "feat(topology/metric_space/isometry): group structure on isometries (#2950)\nCloses #2908", "changes": [{"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "apply_inv_self", ["isometric"]], ["add", "theorem", "coe_mul", ["isometric"]], ["add", "theorem", "coe_one", ["isometric"]], ["add", "theorem", "inv_apply_self", ["isometric"]], ["add", "theorem", "mul_apply", ["isometric"]]]}]}, {"timestamp": 1591285104, "sha": "add0c9a8", "message": "feat(ring/localization): add construction of localization as a quotient type (#2922)", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "ind", ["localization"]], ["add", "theorem", "induction_on", ["localization"]], ["add", "theorem", "induction_on₂", ["localization"]], ["add", "theorem", "induction_on₃", ["localization"]], ["add", "def", "mk", ["localization"]], ["add", "theorem", "mk_eq_monoid_of_mk'", ["localization"]], ["add", "theorem", "mk_eq_monoid_of_mk'_apply", ["localization"]], ["add", "theorem", "mk_one_eq_monoid_of_mk", ["localization"]], ["add", "def", "monoid_of", ["localization"]], ["add", "theorem", "mul_equiv_of_quotient_apply", ["localization"]], ["add", "theorem", "mul_equiv_of_quotient_mk'", ["localization"]], ["add", "theorem", "mul_equiv_of_quotient_mk", ["localization"]], ["add", "theorem", "mul_equiv_of_quotient_monoid_of", ["localization"]], ["add", "theorem", "mul_equiv_of_quotient_symm_mk'", ["localization"]], ["add", "theorem", "mul_equiv_of_quotient_symm_mk", ["localization"]], ["add", "theorem", "mul_equiv_of_quotient_symm_monoid_of", ["localization"]], ["add", "theorem", "one_rel", ["localization"]], ["add", "def", "r'", ["localization"]], ["add", "def", "r", ["localization"]], ["add", "theorem", "r_eq_r'", ["localization"]], ["add", "theorem", "r_iff_exists", ["localization"]], ["add", "theorem", "r_of_eq", ["localization"]], ["add", "def", "localization", []], ["del", "def", "r'", ["submonoid", "localization"]], ["del", "def", "r", ["submonoid", "localization"]], ["del", "theorem", "r_eq_r'", ["submonoid", "localization"]], ["del", "theorem", "r_iff_exists", ["submonoid", "localization"]], ["del", "def", "localization", ["submonoid"]]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "def", "fraction_map", []], ["del", "def", "codomain", ["localization"]], ["del", "theorem", "epic_of_localization_map", ["localization"]], ["del", "theorem", "eq_iff_eq", ["localization"]], ["del", "theorem", "eq_iff_exists", ["localization"]], ["del", "theorem", "eq_mk'_iff_mul_eq", ["localization"]], ["del", "theorem", "eq_of_eq", ["localization"]], ["del", "theorem", "eq_zero_of_fst_eq_zero", ["localization"]], ["del", "theorem", "exists_integer_multiple'", ["localization"]], ["del", "theorem", "exists_integer_multiple", ["localization"]], ["del", "theorem", "ext", ["localization"]], ["del", "theorem", "ext_iff", ["localization"]], ["del", "def", "is_integer", ["localization"]], ["del", "theorem", "is_integer_add", ["localization"]], ["del", "theorem", "is_integer_mul", ["localization"]], ["del", "theorem", "is_integer_smul", ["localization"]], ["del", "theorem", "is_unit_comp", ["localization"]], ["del", "theorem", "lift_comp", ["localization"]], ["del", "theorem", "lift_eq", ["localization"]], ["del", "theorem", "lift_eq_iff", ["localization"]], ["del", "theorem", "lift_id", ["localization"]], ["del", "theorem", "lift_injective_iff", ["localization"]], ["del", "theorem", "lift_left_inverse", ["localization"]], ["del", "theorem", "lift_mk'", ["localization"]], ["del", "theorem", "lift_mk'_spec", ["localization"]], ["del", "theorem", "lift_of_comp", ["localization"]], ["del", "theorem", "lift_surjective_iff", ["localization"]], ["del", "theorem", "lift_unique", ["localization"]], ["del", "def", "lin_coe", ["localization"]], ["del", "theorem", "lin_coe_apply", ["localization"]], ["del", "theorem", "map_comp", ["localization"]], ["del", "theorem", "map_comp_map", ["localization"]], ["del", "theorem", "map_eq", ["localization"]], ["del", "theorem", "map_id", ["localization"]], ["del", "theorem", "map_left_cancel", ["localization"]], ["del", "theorem", "map_map", ["localization"]], ["del", "theorem", "map_mk'", ["localization"]], ["del", "theorem", "map_right_cancel", ["localization"]], ["del", "theorem", "map_units", ["localization"]], ["del", "theorem", "mem_coe", ["localization"]], ["del", "theorem", "mk'_add", ["localization"]], ["del", "theorem", "mk'_eq_iff_eq", ["localization"]], ["del", "theorem", "mk'_eq_iff_eq_mul", ["localization"]], ["del", "theorem", "mk'_eq_iff_mk'_eq", ["localization"]], ["del", "theorem", "mk'_eq_mul_mk'_one", ["localization"]], ["del", "theorem", "mk'_eq_of_eq", ["localization"]], ["del", "theorem", "mk'_mul", ["localization"]], ["del", "theorem", "mk'_mul_cancel_left", ["localization"]], ["del", "theorem", "mk'_mul_cancel_right", ["localization"]], ["del", "theorem", "mk'_one", ["localization"]], ["del", "theorem", "mk'_sec", ["localization"]], ["del", "theorem", "mk'_self''", ["localization"]], ["del", "theorem", "mk'_self'", ["localization"]], ["del", "theorem", "mk'_self", ["localization"]], ["del", "theorem", "mk'_spec'", ["localization"]], ["del", "theorem", "mk'_spec", ["localization"]], ["add", "theorem", "mk_eq_mk'", ["localization"]], ["add", "theorem", "mk_eq_mk'_apply", ["localization"]], ["add", "theorem", "mk_one_eq_of", ["localization"]], ["add", "theorem", "monoid_of_eq_of", ["localization"]], ["del", "theorem", "mul_mk'_eq_mk'_of_mul", ["localization"]], ["add", "def", "of", ["localization"]], ["del", "theorem", "of_id", ["localization"]], ["add", "theorem", "ring_equiv_of_quotient_apply", ["localization"]], ["add", "theorem", "ring_equiv_of_quotient_mk'", ["localization"]], ["add", "theorem", "ring_equiv_of_quotient_mk", ["localization"]], ["add", "theorem", "ring_equiv_of_quotient_of", ["localization"]], ["add", "theorem", "ring_equiv_of_quotient_symm_mk'", ["localization"]], ["add", "theorem", "ring_equiv_of_quotient_symm_mk", ["localization"]], ["add", "theorem", "ring_equiv_of_quotient_symm_of", ["localization"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq", ["localization"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq_map", ["localization"]], ["del", "theorem", "ring_equiv_of_ring_equiv_eq_map_apply", ["localization"]], ["del", "theorem", "ring_equiv_of_ring_equiv_mk'", ["localization"]], ["del", "theorem", "sec_spec'", ["localization"]], ["del", "theorem", "sec_spec", ["localization"]], ["del", "theorem", "surj", ["localization"]], ["del", "def", "to_map", ["localization"]], ["del", "theorem", "to_map_injective", ["localization"]], ["del", "structure", "localization", []], ["add", "def", "codomain", ["localization_map"]], ["add", "theorem", "epic_of_localization_map", ["localization_map"]], ["add", "theorem", "eq_iff_eq", ["localization_map"]], ["add", "theorem", "eq_iff_exists", ["localization_map"]], ["add", "theorem", "eq_mk'_iff_mul_eq", ["localization_map"]], ["add", "theorem", "eq_of_eq", ["localization_map"]], ["add", "theorem", "eq_zero_of_fst_eq_zero", ["localization_map"]], ["add", "theorem", "exists_integer_multiple'", ["localization_map"]], ["add", "theorem", "exists_integer_multiple", ["localization_map"]], ["add", "theorem", "ext", ["localization_map"]], ["add", "theorem", "ext_iff", ["localization_map"]], ["add", "def", "is_integer", ["localization_map"]], ["add", "theorem", "is_integer_add", ["localization_map"]], ["add", "theorem", "is_integer_mul", ["localization_map"]], ["add", "theorem", "is_integer_smul", ["localization_map"]], ["add", "theorem", "is_unit_comp", ["localization_map"]], ["add", "theorem", "lift_comp", ["localization_map"]], ["add", "theorem", "lift_eq", ["localization_map"]], ["add", "theorem", "lift_eq_iff", ["localization_map"]], ["add", "theorem", "lift_id", ["localization_map"]], ["add", "theorem", "lift_injective_iff", ["localization_map"]], ["add", "theorem", "lift_left_inverse", ["localization_map"]], ["add", "theorem", "lift_mk'", ["localization_map"]], ["add", "theorem", "lift_mk'_spec", ["localization_map"]], ["add", "theorem", "lift_of_comp", ["localization_map"]], ["add", "theorem", "lift_surjective_iff", ["localization_map"]], ["add", "theorem", "lift_unique", ["localization_map"]], ["add", "def", "lin_coe", ["localization_map"]], ["add", "theorem", "lin_coe_apply", ["localization_map"]], ["add", "theorem", "map_comp", ["localization_map"]], ["add", "theorem", "map_comp_map", ["localization_map"]], ["add", "theorem", "map_eq", ["localization_map"]], ["add", "theorem", "map_id", ["localization_map"]], ["add", "theorem", "map_left_cancel", ["localization_map"]], ["add", "theorem", "map_map", ["localization_map"]], ["add", "theorem", "map_mk'", ["localization_map"]], ["add", "theorem", "map_right_cancel", ["localization_map"]], ["add", "theorem", "map_units", ["localization_map"]], ["add", "theorem", "mem_coe", ["localization_map"]], ["add", "theorem", "mk'_add", ["localization_map"]], ["add", "theorem", "mk'_eq_iff_eq", ["localization_map"]], ["add", "theorem", "mk'_eq_iff_eq_mul", ["localization_map"]], ["add", "theorem", "mk'_eq_iff_mk'_eq", ["localization_map"]], ["add", "theorem", "mk'_eq_mul_mk'_one", ["localization_map"]], ["add", "theorem", "mk'_eq_of_eq", ["localization_map"]], ["add", "theorem", "mk'_mul", ["localization_map"]], ["add", "theorem", "mk'_mul_cancel_left", ["localization_map"]], ["add", "theorem", "mk'_mul_cancel_right", ["localization_map"]], ["add", "theorem", "mk'_one", ["localization_map"]], ["add", "theorem", "mk'_sec", ["localization_map"]], ["add", "theorem", "mk'_self''", ["localization_map"]], ["add", "theorem", "mk'_self'", ["localization_map"]], ["add", "theorem", "mk'_self", ["localization_map"]], ["add", "theorem", "mk'_spec'", ["localization_map"]], ["add", "theorem", "mk'_spec", ["localization_map"]], ["add", "theorem", "mul_mk'_eq_mk'_of_mul", ["localization_map"]], ["add", "theorem", "of_id", ["localization_map"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq", ["localization_map"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq_map", ["localization_map"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq_map_apply", ["localization_map"]], ["add", "theorem", "ring_equiv_of_ring_equiv_mk'", ["localization_map"]], ["add", "theorem", "sec_spec'", ["localization_map"]], ["add", "theorem", "sec_spec", ["localization_map"]], ["add", "theorem", "surj", ["localization_map"]], ["add", "def", "to_map", ["localization_map"]], ["add", "theorem", "to_map_injective", ["localization_map"]], ["add", "structure", "localization_map", []], ["del", "def", "to_localization", ["ring_hom"]], ["add", "def", "to_localization_map", ["ring_hom"]], ["add", "def", "to_ring_localization", ["submonoid", "localization_map"]]]}]}, {"timestamp": 1591283213, "sha": "2dbf5508", "message": "feat(ring_theory/eisenstein_criterion): Eisenstein's criterion (#2946)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/eisenstein_criterion.lean", "changes": [["add", "theorem", "eval_zero_mem_ideal_of_eq_mul_X_pow", ["polynomial", "eisenstein_criterion_aux"]], ["add", "theorem", "is_unit_of_nat_degree_eq_zero_of_forall_dvd_is_unit", ["polynomial", "eisenstein_criterion_aux"]], ["add", "theorem", "le_nat_degree_of_map_eq_mul_X_pow", ["polynomial", "eisenstein_criterion_aux"]], ["add", "theorem", "map_eq_C_mul_X_pow_of_forall_coeff_mem", ["polynomial", "eisenstein_criterion_aux"]], ["add", "theorem", "irreducible_of_eisenstein_criterion", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/ring_theory/prime.lean", "changes": [["add", "theorem", "mul_eq_mul_prime_pow", []], ["add", "theorem", "mul_eq_mul_prime_prod", []]]}]}, {"timestamp": 1591280924, "sha": "c2e78d27", "message": "refactor(data/zmod): generalize zmod.cast_hom (#2900)\nCurrently, `zmod.cast_hom` would cast `zmod n` to rings `R` of characteristic `n`.\nThis PR builds `cast_hom` for rings `R` with characteristic `m` that divides `n`.", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_add'", ["zmod"]], ["mod", "theorem", "cast_add", ["zmod"]], ["mod", "def", "cast_hom", ["zmod"]], ["mod", "theorem", "cast_hom_apply", ["zmod"]], ["add", "theorem", "cast_int_cast'", ["zmod"]], ["mod", "theorem", "cast_int_cast", ["zmod"]], ["add", "theorem", "cast_mul'", ["zmod"]], ["mod", "theorem", "cast_mul", ["zmod"]], ["add", "theorem", "cast_nat_cast'", ["zmod"]], ["mod", "theorem", "cast_nat_cast", ["zmod"]], ["add", "theorem", "cast_one'", ["zmod"]], ["mod", "theorem", "cast_one", ["zmod"]], ["add", "theorem", "cast_pow'", ["zmod"]], ["add", "theorem", "cast_pow", ["zmod"]], ["add", "theorem", "cast_sub'", ["zmod"]], ["add", "theorem", "cast_sub", ["zmod"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}]}, {"timestamp": 1591255329, "sha": "e397b4c1", "message": "chore(scripts): update nolints.txt (#2948)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591245751, "sha": "5744f897", "message": "chore(*): fix some `ge_or_gt` lint issues (#2945)\nAlso rename a few definitions:\n* `ge_of_forall_ge_sub` : `le_of_forall_sub_le`;\n* `power_series.order_ge_nat` : `power_series.nat_le_order`;\n* `power_series.order_ge`: `power_series.le_order`;", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["mod", "theorem", "exists_add_lt_and_pos_of_lt", []], ["del", "theorem", "ge_of_forall_ge_sub", []], ["add", "theorem", "le_of_forall_sub_le", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "abs_nonneg", []], ["mod", "theorem", "abs_of_nonneg", []], ["mod", "theorem", "abs_of_pos", []], ["mod", "theorem", "abs_pos_of_ne_zero", []], ["mod", "theorem", "abs_pos_of_neg", []], ["mod", "theorem", "abs_pos_of_pos", []], ["mod", "theorem", "le_add_of_nonneg_left", []], ["mod", "theorem", "le_add_of_nonneg_right", []], ["mod", "theorem", "lt_add_of_pos_left", []], ["mod", "theorem", "lt_add_of_pos_right", []], ["mod", "theorem", "sub_le_self", []], ["mod", "theorem", "sub_lt_self", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": [["mod", "theorem", "pi_gt_sqrt_two_add_series", ["real"]], ["mod", "theorem", "sqrt_two_add_series_nonneg", ["real"]], ["mod", "theorem", "sqrt_two_add_series_zero_nonneg", ["real"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": [["mod", "theorem", "pell_dioph", ["dioph"]], ["mod", "theorem", "xn_dioph", ["dioph"]]]}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "theorem", "d_pos", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq'", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_le", ["pell"]], ["mod", "theorem", "eq_of_xn_modeq_lem3", ["pell"]], ["mod", "theorem", "eq_pell_lem", ["pell"]], ["mod", "theorem", "eq_pow_of_pell_lem", ["pell"]], ["mod", "theorem", "matiyasevic", ["pell"]], ["mod", "theorem", "modeq_of_xn_modeq", ["pell"]], ["mod", "theorem", "x_pos", ["pell"]], ["mod", "theorem", "xy_modeq_of_modeq", ["pell"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "theorem", "le_order", ["power_series"]], ["add", "theorem", "le_order_add", ["power_series"]], ["add", "theorem", "nat_le_order", ["power_series"]], ["del", "theorem", "order_add_ge", ["power_series"]], ["del", "theorem", "order_ge", ["power_series"]], ["del", "theorem", "order_ge_nat", ["power_series"]]]}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "eq_of_forall_dist_le", []], ["mod", "theorem", "diam_ball", ["metric"]], ["mod", "theorem", "diam_closed_ball", ["metric"]], ["mod", "theorem", "mem_ball_self", ["metric"]], ["mod", "theorem", "mem_closed_ball_self", ["metric"]], ["mod", "theorem", "pos_of_mem_ball", ["metric"]]]}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "eq_of_forall_edist_le", []]]}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}]}, {"timestamp": 1591201169, "sha": "ef6d8d9e", "message": "refactor(analysis/specific_limits): prove `0 < r → (1+r)^n→∞` for semirings (#2935)\n* Add `add_one_pow_unbounded_of_pos` and\n `tendsto_add_one_pow_at_top_at_top_of_pos` assuming\n `[linear_ordered_semiring α]` `[archimedean α]`.\n* Rename `tendsto_pow_at_top_at_top_of_gt_1` to\n `tendsto_pow_at_top_at_top_of_one_lt`, generalize to an archimedean\n ordered ring.\n* Rename `tendsto_pow_at_top_at_top_of_gt_1_nat` to\n `nat.tendsto_pow_at_top_at_top_of_one_lt`.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "add_one_pow_unbounded_of_pos", []], ["mod", "theorem", "pow_unbounded_of_one_lt", []]]}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_pow_at_top_at_top_of_one_lt", ["nat"]], ["add", "theorem", "tendsto_add_one_pow_at_top_at_top_of_pos", []], ["del", "theorem", "tendsto_pow_at_top_at_top_of_gt_1", []], ["del", "theorem", "tendsto_pow_at_top_at_top_of_gt_1_nat", []], ["add", "theorem", "tendsto_pow_at_top_at_top_of_one_lt", []]]}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}]}, {"timestamp": 1591197088, "sha": "1adf2041", "message": "chore(scripts): update nolints.txt (#2942)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591197086, "sha": "494b43ef", "message": "chore(category_theory/limits/over): granularity in forget preserving colimits (#2941)\na bit more granularity for instances about forget preserving colimits", "changes": [{"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}]}, {"timestamp": 1591197084, "sha": "97265f9c", "message": "feat(category_theory/limits): dualise a limits result (#2940)\nAdd the dual of `is_limit.of_cone_equiv`.", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "def", "of_left_adjoint", ["category_theory", "adjunction"]], ["add", "def", "of_right_adjoint", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "of_cocone_equiv", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_cone_equiv", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": [["add", "def", "preserves_colimit_of_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1591191689, "sha": "e2052286", "message": "feat(data/fintype/basic): to_finset_inj (#2938)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "to_finset_inj", ["set"]]]}]}, {"timestamp": 1591191687, "sha": "74037cba", "message": "feat(topology/algebra/ordered): IVT for two functions (#2933)\nAlso rename some `is_connected_I*` lemmas to `is_preconnected_I*`.", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "closure_le_eq", []], ["mod", "theorem", "closure_lt_subset_le", []], ["mod", "theorem", "intermediate_value_univ", []], ["add", "theorem", "intermediate_value_univ₂", []], ["add", "theorem", "is_closed_le", ["is_closed"]], ["del", "theorem", "is_connected_Icc", []], ["del", "theorem", "is_connected_Ioo", []], ["add", "theorem", "intermediate_value₂", ["is_preconnected"]], ["add", "theorem", "is_preconnected_Icc", []], ["add", "theorem", "is_preconnected_Ioo", []], ["mod", "theorem", "tendsto_abs_at_top_at_top", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "is_preconnected", ["is_preirreducible"]]]}]}, {"timestamp": 1591191685, "sha": "f44509c0", "message": "chore(tactic/localized): lower priority of bad decidability instances in classical locale (#2932)\nAlso add a decidability instance for complex numbers.\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/monoid_algebra.2Emul_apply/near/199595932\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/slow.20elaboration/near/199543997", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": [["mod", "theorem", "tendsto_indicator_bUnion_finset", []], ["mod", "theorem", "tendsto_indicator_of_antimono", []], ["mod", "theorem", "tendsto_indicator_of_monotone", []]]}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}]}, {"timestamp": 1591186186, "sha": "ed91bb28", "message": "feat(data/setoid/partition): sUnion _classes (#2936)", "changes": [{"oldPath": "src/data/setoid/partition.lean", "newPath": "src/data/setoid/partition.lean", "changes": [["add", "theorem", "sUnion_classes", ["setoid"]]]}]}, {"timestamp": 1591186184, "sha": "c3221f74", "message": "feat(data/rat): denom_div_cast_eq_one_iff (#2934)", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "coe_int_inj", ["rat"]], ["add", "theorem", "denom_div_cast_eq_one_iff", ["rat"]]]}]}, {"timestamp": 1591186183, "sha": "1f2102d5", "message": "chore(group_theory/group_action): protect_proj attribute for mul_action (#2931)", "changes": [{"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}]}, {"timestamp": 1591186181, "sha": "687fc519", "message": "ci(bors): set `cut_body_after` to `---` (#2927)", "changes": [{"oldPath": null, "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}]}, {"timestamp": 1591186179, "sha": "9fc24137", "message": "feat(order/iterate): a few more lemmas about `f^[n]` (#2925)", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "compares_iff_of_compares_impl", ["ordering"]]]}, {"oldPath": "src/logic/function/iterate.lean", "newPath": "src/logic/function/iterate.lean", "changes": [["mod", "theorem", "iterate_id", ["function"]]]}, {"oldPath": "src/order/iterate.lean", "newPath": "src/order/iterate.lean", "changes": [["add", "theorem", "iterate_pos_eq_iff_map_eq", ["function", "commute"]], ["add", "theorem", "iterate_pos_le_iff_map_le'", ["function", "commute"]], ["add", "theorem", "iterate_pos_le_iff_map_le", ["function", "commute"]], ["add", "theorem", "iterate_ge_of_ge", ["monotone"]], ["add", "theorem", "iterate_le_of_le", ["monotone"]]]}]}, {"timestamp": 1591186177, "sha": "0ec9c0e3", "message": "feat(algebra/iterate_hom): add `mul_left_iterate` etc (#2923)", "changes": [{"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": [["add", "theorem", "add_left_iterate", []], ["add", "theorem", "add_right_iterate", []], ["add", "theorem", "mul_left_iterate", []], ["add", "theorem", "mul_right_iterate", []]]}]}, {"timestamp": 1591182541, "sha": "8d9e541b", "message": "feat(group_theory/group_action): some lemmas about orbits (#2928)\nalso remove the simp attribute unfolding the definition of orbit.\nDepends on #2924", "changes": [{"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["mod", "theorem", "mem_orbit_iff", ["mul_action"]], ["add", "theorem", "mem_orbit_smul", ["mul_action"]], ["add", "theorem", "smul_mem_orbit_smul", ["mul_action"]]]}]}, {"timestamp": 1591176529, "sha": "50202855", "message": "chore(group_theory/group_action): simp attributes on inv_smul_smul and smul_inv_smul (#2924)", "changes": [{"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["mod", "theorem", "inv_smul_smul", ["mul_action"]], ["mod", "theorem", "smul_inv_smul", ["mul_action"]]]}]}, {"timestamp": 1591171181, "sha": "39043742", "message": "chore(algebra/ordered_group)`: add `strict_mono.add_const/const_add` (#2926)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "add_const", ["strict_mono"]], ["add", "theorem", "const_add", ["strict_mono"]]]}]}, {"timestamp": 1591165877, "sha": "879bad2e", "message": "feat(analysis/normed_space/enorm): define extended norm (#2897)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "nnnorm_eq_zero", []], ["add", "theorem", "nnnorm_inv", ["normed_field"]], ["add", "theorem", "nnnorm_one", ["normed_field"]], ["add", "theorem", "nnnorm_coe_nat", ["real"]], ["add", "theorem", "nnnorm_two", ["real"]], ["add", "theorem", "norm_coe_nat", ["real"]], ["mod", "theorem", "norm_eq_abs", ["real"]], ["mod", "theorem", "norm_two", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/enorm.lean", "changes": [["add", "theorem", "coe_fn_injective", ["enorm"]], ["add", "theorem", "coe_max", ["enorm"]], ["add", "def", "emetric_space", ["enorm"]], ["add", "theorem", "eq_zero_iff", ["enorm"]], ["add", "theorem", "ext", ["enorm"]], ["add", "theorem", "ext_iff", ["enorm"]], ["add", "theorem", "finite_dist_eq", ["enorm"]], ["add", "theorem", "finite_edist_eq", ["enorm"]], ["add", "theorem", "finite_norm_eq", ["enorm"]], ["add", "def", "finite_subspace", ["enorm"]], ["add", "theorem", "map_add_le", ["enorm"]], ["add", "theorem", "map_neg", ["enorm"]], ["add", "theorem", "map_smul", ["enorm"]], ["add", "theorem", "map_sub_le", ["enorm"]], ["add", "theorem", "map_sub_rev", ["enorm"]], ["add", "theorem", "map_zero", ["enorm"]], ["add", "theorem", "max_map", ["enorm"]], ["add", "theorem", "top_map", ["enorm"]], ["add", "structure", "enorm", []]]}]}, {"timestamp": 1591132528, "sha": "efae3d9c", "message": "feat(data/mv_polynomial): C_inj and C_injective (#2920)", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "C_inj", ["mv_polynomial"]], ["add", "theorem", "C_injective", ["mv_polynomial"]]]}]}, {"timestamp": 1591127904, "sha": "607286ee", "message": "feat(data/*): ring_hom.ext_{nat,int,rat,zmod} (#2918)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "ext_int", ["ring_hom"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "ext_nat", ["ring_hom"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "ext_rat", ["ring_hom"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "ext_zmod", ["ring_hom"]]]}]}, {"timestamp": 1591118871, "sha": "62ec2c57", "message": "feat(linear_algebra/matrix): add alg_equiv_matrix (#2919)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "arrow_congr_apply", ["linear_equiv"]], ["add", "theorem", "arrow_congr_comp", ["linear_equiv"]], ["add", "theorem", "conj_apply", ["linear_equiv"]], ["add", "theorem", "conj_id", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "def", "alg_equiv_matrix'", []], ["add", "def", "alg_equiv_matrix", []], ["add", "def", "alg_conj", ["linear_equiv"]]]}]}, {"timestamp": 1591083675, "sha": "1a4de99e", "message": "feat(category_theory/limits) equalizer morphism is regular mono (#2916)\nThe equalizer morphism is a regular mono, and its dual", "changes": [{"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}]}, {"timestamp": 1591078424, "sha": "1494cc14", "message": "feat(order/semiconj_Sup): use `Sup` to semiconjugate functions (#2895)\nFormalize two lemmas from a paper by É. Ghys.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "mono", ["is_glb"]], ["add", "theorem", "mono", ["is_greatest"]], ["add", "theorem", "mono", ["is_least"]], ["add", "theorem", "mono", ["is_lub"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/semiconj_Sup.lean", "changes": [["add", "theorem", "Sup_div_semiconj", ["function"]], ["add", "theorem", "cSup_div_semiconj", ["function"]], ["add", "theorem", "symm_adjoint", ["function", "semiconj"]], ["add", "theorem", "semiconj_of_is_lub", ["function"]], ["add", "theorem", "right_mono", ["is_order_right_adjoint"]], ["add", "theorem", "unique", ["is_order_right_adjoint"]], ["add", "def", "is_order_right_adjoint", []], ["add", "theorem", "is_order_right_adjoint_Sup", []], ["add", "theorem", "is_order_right_adjoint_cSup", []]]}]}, {"timestamp": 1591064020, "sha": "4372d17b", "message": "chore(scripts): update nolints.txt (#2914)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1591058604, "sha": "eb616cf4", "message": "chore(*): split long lines (#2913)", "changes": [{"oldPath": "docs/tutorial/category_theory/Ab.lean", "newPath": "docs/tutorial/category_theory/Ab.lean", "changes": []}, {"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}, {"oldPath": "roadmap/topology/shrinking_lemma.lean", "newPath": "roadmap/topology/shrinking_lemma.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": [["mod", "theorem", "length_sorted_univ", ["encodable"]]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": [["mod", "theorem", "mem_enum", ["fin_enum", "finset"]], ["mod", "theorem", "mem_pi", ["fin_enum"]], ["mod", "def", "of_nodup_list", ["fin_enum"]], ["mod", "theorem", "mem_enum", ["fin_enum", "pi"]], ["mod", "def", "pi", ["fin_enum"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "coe_inter", ["finset"]], ["mod", "theorem", "coe_union", ["finset"]], ["mod", "theorem", "disjoint_filter_filter", ["finset"]], ["mod", "theorem", "exists_max_image", ["finset"]], ["mod", "theorem", "exists_min_image", ["finset"]], ["mod", "theorem", "fold_insert", ["finset"]], ["mod", "theorem", "image_to_finset", ["finset"]], ["mod", "theorem", "insert_union_distrib", ["finset"]], ["mod", "theorem", "mem_insert_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_inter_left", ["finset"]], ["mod", "theorem", "mem_of_mem_inter_right", ["finset"]], ["mod", "theorem", "mem_union_left", ["finset"]], ["mod", "theorem", "mem_union_right", ["finset"]], ["mod", "def", "cons", ["finset", "pi"]], ["mod", "theorem", "cons_ne", ["finset", "pi"]], ["mod", "theorem", "cons_same", ["finset", "pi"]], ["mod", "theorem", "sdiff_subset_sdiff", ["finset"]], ["mod", "theorem", "sigma_eq_bind", ["finset"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_eq_zero", ["int"]], ["mod", "theorem", "cast_inj", ["int"]], ["mod", "theorem", "coe_nat_bit0", ["int"]], ["mod", "theorem", "coe_nat_bit1", ["int"]], ["mod", "theorem", "coe_nat_inj'", ["int"]], ["mod", "theorem", "coe_nat_le", ["int"]], ["mod", "theorem", "coe_nat_lt", ["int"]], ["mod", "theorem", "shiftr_neg_succ", ["int"]], ["mod", "theorem", "test_bit_ldiff", ["int"]]]}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": [["mod", "theorem", "modeq_add_cancel_left", ["int", "modeq"]], ["mod", "theorem", "modeq_add_cancel_right", ["int", "modeq"]]]}, {"oldPath": "src/data/list/bag_inter.lean", "newPath": "src/data/list/bag_inter.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "exists_of_mem_map", ["list"]], ["mod", "theorem", "map_subset_iff", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["mod", "def", "split_on_p_aux", ["list"]]]}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["mod", "theorem", "forall₂_cons_left_iff", ["list"]]]}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": [["mod", "theorem", "pointwise_nil", ["list", "func"]]]}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": [["mod", "theorem", "nodup_erase_eq_filter", ["list"]], ["mod", "theorem", "nodup_join", ["list"]], ["mod", "theorem", "nth_le_index_of", ["list"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["mod", "theorem", "length_permutations_aux", ["list"]], ["mod", "theorem", "permutations_aux2_snd_cons", ["list"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["mod", "theorem", "map_sub_range'", ["list"]]]}, {"oldPath": "src/data/list/zip.lean", "newPath": "src/data/list/zip.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["mod", "theorem", "single_trans_single", ["pequiv"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["mod", "theorem", "bit0_le_bit0", ["pnat"]], ["mod", "theorem", "bit0_le_bit1", ["pnat"]], ["mod", "theorem", "bit1_le_bit0", ["pnat"]], ["mod", "theorem", "bit1_le_bit1", ["pnat"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "coeff_add", ["polynomial"]], ["mod", "theorem", "coeff_derivative", ["polynomial"]], ["mod", "theorem", "coeff_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["mod", "theorem", "coeff_sub", ["polynomial"]], ["mod", "theorem", "derivative_eval", ["polynomial"]], ["mod", "theorem", "mod_by_monic_X_sub_C_eq_C_eval", ["polynomial"]]]}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["mod", "theorem", "lift_beta", ["quotient"]], ["mod", "theorem", "lift_on_beta", ["quotient"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["mod", "theorem", "const_inv", ["cau_seq"]]]}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "of_real_le_of_real_iff", ["ennreal"]], ["mod", "theorem", "of_real_lt_of_real_iff", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": [["mod", "theorem", "destruct_map", ["computation"]]]}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": [["mod", "theorem", "destruct_flatten", ["wseq"]], ["mod", "theorem", "destruct_terminates_of_nth_terminates", ["wseq"]], ["mod", "theorem", "head_terminates_of_nth_terminates", ["wseq"]], ["mod", "theorem", "nth_terminates_le", ["wseq"]]]}, {"oldPath": "src/data/ulift.lean", "newPath": "src/data/ulift.lean", "changes": [["mod", "theorem", "constant", ["plift", "rec"]], ["mod", "theorem", "constant", ["ulift", "rec"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["mod", "theorem", "equivalence_join", ["relation"]], ["mod", "theorem", "trans", ["relation", "refl_trans_gen"]], ["mod", "theorem", "refl_trans_gen_of_transitive_reflexive", ["relation"]]]}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": [["mod", "theorem", "rel_exists_of_left_total", ["relator"]], ["mod", "theorem", "rel_forall_of_right_total", ["relator"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "integrable_smul_iff", ["measure_theory"]], ["mod", "theorem", "dist_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_eq_norm_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_of_fun", ["measure_theory", "l1"]]]}, {"oldPath": "test/conv/apply_congr.lean", "newPath": "test/conv/apply_congr.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}, {"oldPath": "test/hint.lean", "newPath": "test/hint.lean", "changes": []}, {"oldPath": "test/norm_cast_cardinal.lean", "newPath": "test/norm_cast_cardinal.lean", "changes": [["mod", "theorem", "coe_bit1", []]]}, {"oldPath": "test/nth_rewrite.lean", "newPath": "test/nth_rewrite.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}, {"oldPath": "test/tauto.lean", "newPath": "test/tauto.lean", "changes": []}]}, {"timestamp": 1591054774, "sha": "b95f1655", "message": "chore(group_theory/sub*): move unbundled submonoids and subgroups to `deprecated` (#2912)\n* move unbundled submonoids to `deprecated/submonoid.lean`;\n* move unbundled subgroups to `deprecated/subgroup.lean`;\n* move bundled subgroups to `group_theory/subgroup.lean`;\n* unbundled versions import bundled.", "changes": [{"oldPath": null, "newPath": "src/deprecated/subgroup.lean", "changes": [["add", "inductive", "in_closure", ["add_group"]], ["add", "theorem", "is_add_subgroup", ["additive"]], ["add", "theorem", "is_add_subgroup_iff", ["additive"]], ["add", "theorem", "normal_add_subgroup", ["additive"]], ["add", "theorem", "normal_add_subgroup_iff", ["additive"]], ["add", "theorem", "simple_add_group_iff", ["additive"]], ["add", "def", "gmultiples", []], ["add", "theorem", "gmultiples_subset", []], ["add", "def", "gpowers", []], ["add", "theorem", "gpowers_subset", []], ["add", "def", "closure", ["group"]], ["add", "theorem", "closure_eq_mclosure", ["group"]], ["add", "theorem", "closure_mono", ["group"]], ["add", "theorem", "closure_subgroup", ["group"]], ["add", "theorem", "closure_subset", ["group"]], ["add", "theorem", "closure_subset_iff", ["group"]], ["add", "theorem", "conj_mem_conjugates_of_set", ["group"]], ["add", "def", "conjugates", ["group"]], ["add", "def", "conjugates_of_set", ["group"]], ["add", "theorem", "conjugates_of_set_mono", ["group"]], ["add", "theorem", "conjugates_of_set_subset", ["group"]], ["add", "theorem", "conjugates_of_set_subset_normal_closure", ["group"]], ["add", "theorem", "conjugates_subset", ["group"]], ["add", "theorem", "exists_list_of_mem_closure", ["group"]], ["add", "theorem", "gpowers_eq_closure", ["group"]], ["add", "theorem", "image_closure", ["group"]], ["add", "inductive", "in_closure", ["group"]], ["add", "theorem", "mclosure_inv_subset", ["group"]], ["add", "theorem", "mclosure_subset", ["group"]], ["add", "theorem", "mem_closure", ["group"]], ["add", "theorem", "mem_closure_union_iff", ["group"]], ["add", "theorem", "mem_conjugates_of_set_iff", ["group"]], ["add", "theorem", "mem_conjugates_self", ["group"]], ["add", "def", "normal_closure", ["group"]], ["add", "theorem", "normal_closure_mono", ["group"]], ["add", "theorem", "normal_closure_subset", ["group"]], ["add", "theorem", "normal_closure_subset_iff", ["group"]], ["add", "theorem", "subset_closure", ["group"]], ["add", "theorem", "subset_conjugates_of_set", ["group"]], ["add", "theorem", "subset_normal_closure", ["group"]], ["add", "theorem", "injective_mul", []], ["add", "theorem", "gsmul_coe", ["is_add_subgroup"]], ["add", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["add", "theorem", "of_sub", ["is_add_subgroup"]], ["add", "theorem", "sub_mem", ["is_add_subgroup"]], ["add", "theorem", "inj_iff_trivial_ker", ["is_group_hom"]], ["add", "theorem", "inj_of_trivial_ker", ["is_group_hom"]], ["add", "theorem", "inv_iff_ker'", ["is_group_hom"]], ["add", "theorem", "inv_iff_ker", ["is_group_hom"]], ["add", "theorem", "inv_ker_one'", ["is_group_hom"]], ["add", "theorem", "inv_ker_one", ["is_group_hom"]], ["add", "def", "ker", ["is_group_hom"]], ["add", "theorem", "mem_ker", ["is_group_hom"]], ["add", "theorem", "one_iff_ker_inv'", ["is_group_hom"]], ["add", "theorem", "one_iff_ker_inv", ["is_group_hom"]], ["add", "theorem", "one_ker_inv'", ["is_group_hom"]], ["add", "theorem", "one_ker_inv", ["is_group_hom"]], ["add", "theorem", "trivial_ker_iff_eq_one", ["is_group_hom"]], ["add", "theorem", "trivial_ker_of_inj", ["is_group_hom"]], ["add", "def", "center", ["is_subgroup"]], ["add", "theorem", "coe_gpow", ["is_subgroup"]], ["add", "theorem", "coe_inv", ["is_subgroup"]], ["add", "theorem", "eq_trivial_iff", ["is_subgroup"]], ["add", "theorem", "gpow_mem", ["is_subgroup"]], ["add", "theorem", "inv_mem_iff", ["is_subgroup"]], ["add", "theorem", "mem_center", ["is_subgroup"]], ["add", "theorem", "mem_norm_comm", ["is_subgroup"]], ["add", "theorem", "mem_norm_comm_iff", ["is_subgroup"]], ["add", "theorem", "mem_trivial", ["is_subgroup"]], ["add", "theorem", "mul_mem_cancel_left", ["is_subgroup"]], ["add", "theorem", "mul_mem_cancel_right", ["is_subgroup"]], ["add", "def", "normalizer", ["is_subgroup"]], ["add", "theorem", "of_div", ["is_subgroup"]], ["add", "theorem", "subset_normalizer", ["is_subgroup"]], ["add", "def", "trivial", ["is_subgroup"]], ["add", "theorem", "trivial_eq_closure", ["is_subgroup"]], ["add", "theorem", "is_subgroup_Union_of_directed", []], ["add", "theorem", "mem_gmultiples", []], ["add", "theorem", "mem_gpowers", []], ["add", "def", "range_factorization", ["monoid_hom"]], ["add", "def", "range_subtype_val", ["monoid_hom"]], ["add", "theorem", "is_subgroup", ["multiplicative"]], ["add", "theorem", "is_subgroup_iff", ["multiplicative"]], ["add", "theorem", "normal_subgroup", ["multiplicative"]], ["add", "theorem", "normal_subgroup_iff", ["multiplicative"]], ["add", "theorem", "simple_group_iff", ["multiplicative"]], ["add", "theorem", "normal_subgroup_of_comm_group", []], ["add", "theorem", "simple_group_of_surjective", []], ["add", "def", "of", ["subgroup"]]]}, {"oldPath": null, "newPath": "src/deprecated/submonoid.lean", "changes": [["add", "inductive", "in_closure", ["add_monoid"]], ["add", "theorem", "is_add_submonoid", ["additive"]], ["add", "theorem", "is_add_submonoid_iff", ["additive"]], ["add", "theorem", "is_submonoid", ["image"]], ["add", "theorem", "multiple_subset", ["is_add_submonoid"]], ["add", "theorem", "smul_coe", ["is_add_submonoid"]], ["add", "theorem", "smul_mem", ["is_add_submonoid"]], ["add", "theorem", "coe_mul", ["is_submonoid"]], ["add", "theorem", "coe_one", ["is_submonoid"]], ["add", "theorem", "coe_pow", ["is_submonoid"]], ["add", "theorem", "finset_prod_mem", ["is_submonoid"]], ["add", "theorem", "list_prod_mem", ["is_submonoid"]], ["add", "theorem", "multiset_prod_mem", ["is_submonoid"]], ["add", "theorem", "pow_mem", ["is_submonoid"]], ["add", "theorem", "power_subset", ["is_submonoid"]], ["add", "theorem", "is_submonoid_Union_of_directed", []], ["add", "def", "closure", ["monoid"]], ["add", "theorem", "closure_mono", ["monoid"]], ["add", "theorem", "closure_singleton", ["monoid"]], ["add", "theorem", "closure_subset", ["monoid"]], ["add", "theorem", "exists_list_of_mem_closure", ["monoid"]], ["add", "theorem", "image_closure", ["monoid"]], ["add", "inductive", "in_closure", ["monoid"]], ["add", "theorem", "mem_closure_union_iff", ["monoid"]], ["add", "theorem", "subset_closure", ["monoid"]], ["add", "theorem", "add_mem", ["multiples"]], ["add", "theorem", "self_mem", ["multiples"]], ["add", "theorem", "zero_mem", ["multiples"]], ["add", "def", "multiples", []], ["add", "theorem", "is_submonoid", ["multiplicative"]], ["add", "theorem", "is_submonoid_iff", ["multiplicative"]], ["add", "theorem", "mul_mem", ["powers"]], ["add", "theorem", "one_mem", ["powers"]], ["add", "theorem", "self_mem", ["powers"]], ["add", "def", "powers", []], ["add", "def", "of", ["submonoid"]]]}, {"oldPath": "src/group_theory/bundled_subgroup.lean", "newPath": null, "changes": [["del", "theorem", "gsmul_mem", ["add_subgroup"]], ["del", "theorem", "mem_closure_singleton", ["add_subgroup"]], ["del", "def", "of_subgroup", ["add_subgroup"]], ["del", "def", "to_subgroup", ["add_subgroup"]], ["del", "structure", "add_subgroup", []], ["del", "theorem", "coe_range", ["monoid_hom"]], ["del", "theorem", "comap_ker", ["monoid_hom"]], ["del", "def", "eq_locus", ["monoid_hom"]], ["del", "theorem", "eq_of_eq_on_dense", ["monoid_hom"]], ["del", "theorem", "eq_of_eq_on_top", ["monoid_hom"]], ["del", "theorem", "eq_on_closure", ["monoid_hom"]], ["del", "theorem", "gclosure_preimage_le", ["monoid_hom"]], ["del", "def", "ker", ["monoid_hom"]], ["del", "theorem", "map_closure", ["monoid_hom"]], ["del", "theorem", "map_range", ["monoid_hom"]], ["del", "theorem", "mem_ker", ["monoid_hom"]], ["del", "theorem", "mem_range", ["monoid_hom"]], ["del", "theorem", "rang_top_of_surjective", ["monoid_hom"]], ["del", "def", "range", ["monoid_hom"]], ["del", "theorem", "range_top_iff_surjective", ["monoid_hom"]], ["del", "def", "subgroup_congr", ["mul_equiv"]], ["del", "def", "add_subgroup_equiv", ["subgroup"]], ["del", "theorem", "bot_prod_bot", ["subgroup"]], ["del", "def", "closure", ["subgroup"]], ["del", "theorem", "closure_Union", ["subgroup"]], ["del", "theorem", "closure_empty", ["subgroup"]], ["del", "theorem", "closure_eq", ["subgroup"]], ["del", "theorem", "closure_eq_of_le", ["subgroup"]], ["del", "theorem", "closure_induction", ["subgroup"]], ["del", "theorem", "closure_le", ["subgroup"]], ["del", "theorem", "closure_mono", ["subgroup"]], ["del", "theorem", "closure_union", ["subgroup"]], ["del", "theorem", "closure_univ", ["subgroup"]], ["del", "theorem", "coe_Inf", ["subgroup"]], ["del", "theorem", "coe_bot", ["subgroup"]], ["del", "theorem", "coe_coe", ["subgroup"]], ["del", "theorem", "coe_comap", ["subgroup"]], ["del", "theorem", "coe_inf", ["subgroup"]], ["del", "theorem", "coe_inv", ["subgroup"]], ["del", "theorem", "coe_map", ["subgroup"]], ["del", "theorem", "coe_mul", ["subgroup"]], ["del", "theorem", "coe_one", ["subgroup"]], ["del", "theorem", "coe_prod", ["subgroup"]], ["del", "theorem", "coe_subset_coe", ["subgroup"]], ["del", "theorem", "coe_subtype", ["subgroup"]], ["del", "theorem", "coe_to_submonoid", ["subgroup"]], ["del", "theorem", "coe_top", ["subgroup"]], ["del", "def", "comap", ["subgroup"]], ["del", "theorem", "comap_comap", ["subgroup"]], ["del", "theorem", "comap_inf", ["subgroup"]], ["del", "theorem", "comap_infi", ["subgroup"]], ["del", "theorem", "comap_top", ["subgroup"]], ["del", "theorem", "ext'", ["subgroup"]], ["del", "theorem", "ext", ["subgroup"]], ["del", "theorem", "gc_map_comap", ["subgroup"]], ["del", "theorem", "gpow_mem", ["subgroup"]], ["del", "theorem", "inv_mem", ["subgroup"]], ["del", "theorem", "le_def", ["subgroup"]], ["del", "theorem", "list_prod_mem", ["subgroup"]], ["del", "def", "map", ["subgroup"]], ["del", "theorem", "map_bot", ["subgroup"]], ["del", "theorem", "map_le_iff_le_comap", ["subgroup"]], ["del", "theorem", "map_map", ["subgroup"]], ["del", "theorem", "map_sup", ["subgroup"]], ["del", "theorem", "map_supr", ["subgroup"]], ["del", "theorem", "mem_Inf", ["subgroup"]], ["del", "theorem", "mem_Sup_of_directed_on", ["subgroup"]], ["del", "theorem", "mem_bot", ["subgroup"]], ["del", "theorem", "mem_closure", ["subgroup"]], ["del", "theorem", "mem_closure_singleton", ["subgroup"]], ["del", "theorem", "mem_coe", ["subgroup"]], ["del", "theorem", "mem_comap", ["subgroup"]], ["del", "theorem", "mem_inf", ["subgroup"]], ["del", "theorem", "mem_map", ["subgroup"]], ["del", "theorem", "mem_prod", ["subgroup"]], ["del", "theorem", "mem_supr_of_directed", ["subgroup"]], ["del", "theorem", "mem_top", ["subgroup"]], ["del", "theorem", "mul_mem", ["subgroup"]], ["del", "theorem", "multiset_prod_mem", ["subgroup"]], ["del", "def", "of", ["subgroup"]], ["del", "def", "of_add_subgroup", ["subgroup"]], ["del", "theorem", "one_mem", ["subgroup"]], ["del", "theorem", "pow_mem", ["subgroup"]], ["del", "def", "prod", ["subgroup"]], ["del", "def", "prod_equiv", ["subgroup"]], ["del", "theorem", "prod_mem", ["subgroup"]], ["del", "theorem", "prod_mono", ["subgroup"]], ["del", "theorem", "prod_mono_left", ["subgroup"]], ["del", "theorem", "prod_mono_right", ["subgroup"]], ["del", "theorem", "prod_top", ["subgroup"]], ["del", "theorem", "subset_closure", ["subgroup"]], ["del", "def", "subtype", ["subgroup"]], ["del", "def", "to_add_subgroup", ["subgroup"]], ["del", "theorem", "top_prod", ["subgroup"]], ["del", "theorem", "top_prod_top", ["subgroup"]], ["del", "structure", "subgroup", []]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["del", "inductive", "in_closure", ["add_group"]], ["add", "theorem", "gsmul_mem", ["add_subgroup"]], ["add", "theorem", "mem_closure_singleton", ["add_subgroup"]], ["add", "def", "of_subgroup", ["add_subgroup"]], ["add", "def", "to_subgroup", ["add_subgroup"]], ["add", "structure", "add_subgroup", []], ["del", "theorem", "is_add_subgroup", ["additive"]], ["del", "theorem", "is_add_subgroup_iff", ["additive"]], ["del", "theorem", "normal_add_subgroup", ["additive"]], ["del", "theorem", "normal_add_subgroup_iff", ["additive"]], ["del", "theorem", "simple_add_group_iff", ["additive"]], ["del", "def", "gmultiples", []], ["del", "theorem", "gmultiples_subset", []], ["del", "def", "gpowers", []], ["del", "theorem", "gpowers_subset", []], ["del", "def", "closure", ["group"]], ["del", "theorem", "closure_eq_mclosure", ["group"]], ["del", "theorem", "closure_mono", ["group"]], ["del", "theorem", "closure_subgroup", ["group"]], ["del", "theorem", "closure_subset", ["group"]], ["del", "theorem", "closure_subset_iff", ["group"]], ["del", "theorem", "conj_mem_conjugates_of_set", ["group"]], ["del", "def", "conjugates", ["group"]], ["del", "def", "conjugates_of_set", ["group"]], ["del", "theorem", "conjugates_of_set_mono", ["group"]], ["del", "theorem", "conjugates_of_set_subset", ["group"]], ["del", "theorem", "conjugates_of_set_subset_normal_closure", ["group"]], ["del", "theorem", "conjugates_subset", ["group"]], ["del", "theorem", "exists_list_of_mem_closure", ["group"]], ["del", "theorem", "gpowers_eq_closure", ["group"]], ["del", "theorem", "image_closure", ["group"]], ["del", "inductive", "in_closure", ["group"]], ["del", "theorem", "mclosure_inv_subset", ["group"]], ["del", "theorem", "mclosure_subset", ["group"]], ["del", "theorem", "mem_closure", ["group"]], ["del", "theorem", "mem_closure_union_iff", ["group"]], ["del", "theorem", "mem_conjugates_of_set_iff", ["group"]], ["del", "theorem", "mem_conjugates_self", ["group"]], ["del", "def", "normal_closure", ["group"]], ["del", "theorem", "normal_closure_mono", ["group"]], ["del", "theorem", "normal_closure_subset", ["group"]], ["del", "theorem", "normal_closure_subset_iff", ["group"]], ["del", "theorem", "subset_closure", ["group"]], ["del", "theorem", "subset_conjugates_of_set", ["group"]], ["del", "theorem", "subset_normal_closure", ["group"]], ["del", "theorem", "injective_mul", []], ["del", "theorem", "gsmul_coe", ["is_add_subgroup"]], ["del", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["del", "theorem", "of_sub", ["is_add_subgroup"]], ["del", "theorem", "sub_mem", ["is_add_subgroup"]], ["del", "theorem", "inj_iff_trivial_ker", ["is_group_hom"]], ["del", "theorem", "inj_of_trivial_ker", ["is_group_hom"]], ["del", "theorem", "inv_iff_ker'", ["is_group_hom"]], ["del", "theorem", "inv_iff_ker", ["is_group_hom"]], ["del", "theorem", "inv_ker_one'", ["is_group_hom"]], ["del", "theorem", "inv_ker_one", ["is_group_hom"]], ["del", "def", "ker", ["is_group_hom"]], ["del", "theorem", "mem_ker", ["is_group_hom"]], ["del", "theorem", "one_iff_ker_inv'", ["is_group_hom"]], ["del", "theorem", "one_iff_ker_inv", ["is_group_hom"]], ["del", "theorem", "one_ker_inv'", ["is_group_hom"]], ["del", "theorem", "one_ker_inv", ["is_group_hom"]], ["del", "theorem", "trivial_ker_iff_eq_one", ["is_group_hom"]], ["del", "theorem", "trivial_ker_of_inj", ["is_group_hom"]], ["del", "def", "center", ["is_subgroup"]], ["del", "theorem", "coe_gpow", ["is_subgroup"]], ["del", "theorem", "coe_inv", ["is_subgroup"]], ["del", "theorem", "eq_trivial_iff", ["is_subgroup"]], ["del", "theorem", "gpow_mem", ["is_subgroup"]], ["del", "theorem", "inv_mem_iff", ["is_subgroup"]], ["del", "theorem", "mem_center", ["is_subgroup"]], ["del", "theorem", "mem_norm_comm", ["is_subgroup"]], ["del", "theorem", "mem_norm_comm_iff", ["is_subgroup"]], ["del", "theorem", "mem_trivial", ["is_subgroup"]], ["del", "theorem", "mul_mem_cancel_left", ["is_subgroup"]], ["del", "theorem", "mul_mem_cancel_right", ["is_subgroup"]], ["del", "def", "normalizer", ["is_subgroup"]], ["del", "theorem", "of_div", ["is_subgroup"]], ["del", "theorem", "subset_normalizer", ["is_subgroup"]], ["del", "def", "trivial", ["is_subgroup"]], ["del", "theorem", "trivial_eq_closure", ["is_subgroup"]], ["del", "theorem", "is_subgroup_Union_of_directed", []], ["del", "theorem", "mem_gmultiples", []], ["del", "theorem", "mem_gpowers", []], ["add", "theorem", "coe_range", ["monoid_hom"]], ["add", "theorem", "comap_ker", ["monoid_hom"]], ["add", "def", "eq_locus", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_dense", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_top", ["monoid_hom"]], ["add", "theorem", "eq_on_closure", ["monoid_hom"]], ["add", "theorem", "gclosure_preimage_le", ["monoid_hom"]], ["add", "def", "ker", ["monoid_hom"]], ["add", "theorem", "map_closure", ["monoid_hom"]], ["add", "theorem", "map_range", ["monoid_hom"]], ["add", "theorem", "mem_ker", ["monoid_hom"]], ["add", "theorem", "mem_range", ["monoid_hom"]], ["add", "theorem", "rang_top_of_surjective", ["monoid_hom"]], ["add", "def", "range", ["monoid_hom"]], ["del", "def", "range_factorization", ["monoid_hom"]], ["del", "def", "range_subtype_val", ["monoid_hom"]], ["add", "theorem", "range_top_iff_surjective", ["monoid_hom"]], ["add", "def", "subgroup_congr", ["mul_equiv"]], ["del", "theorem", "is_subgroup", ["multiplicative"]], ["del", "theorem", "is_subgroup_iff", ["multiplicative"]], ["del", "theorem", "normal_subgroup", ["multiplicative"]], ["del", "theorem", "normal_subgroup_iff", ["multiplicative"]], ["del", "theorem", "simple_group_iff", ["multiplicative"]], ["del", "theorem", "normal_subgroup_of_comm_group", []], ["del", "theorem", "simple_group_of_surjective", []], ["add", "def", "add_subgroup_equiv", ["subgroup"]], ["add", "theorem", "bot_prod_bot", ["subgroup"]], ["add", "def", "closure", ["subgroup"]], ["add", "theorem", "closure_Union", ["subgroup"]], ["add", "theorem", "closure_empty", ["subgroup"]], ["add", "theorem", "closure_eq", ["subgroup"]], ["add", "theorem", "closure_eq_of_le", ["subgroup"]], ["add", "theorem", "closure_induction", ["subgroup"]], ["add", "theorem", "closure_le", ["subgroup"]], ["add", "theorem", "closure_mono", ["subgroup"]], ["add", "theorem", "closure_union", ["subgroup"]], ["add", "theorem", "closure_univ", ["subgroup"]], ["add", "theorem", "coe_Inf", ["subgroup"]], ["add", "theorem", "coe_bot", ["subgroup"]], ["add", "theorem", "coe_coe", ["subgroup"]], ["add", "theorem", "coe_comap", ["subgroup"]], ["add", "theorem", "coe_inf", ["subgroup"]], ["add", "theorem", "coe_inv", ["subgroup"]], ["add", "theorem", "coe_map", ["subgroup"]], ["add", "theorem", "coe_mul", ["subgroup"]], ["add", "theorem", "coe_one", ["subgroup"]], ["add", "theorem", "coe_prod", ["subgroup"]], ["add", "theorem", "coe_subset_coe", ["subgroup"]], ["add", "theorem", "coe_subtype", ["subgroup"]], ["add", "theorem", "coe_to_submonoid", ["subgroup"]], ["add", "theorem", "coe_top", ["subgroup"]], ["add", "def", "comap", ["subgroup"]], ["add", "theorem", "comap_comap", ["subgroup"]], ["add", "theorem", "comap_inf", ["subgroup"]], ["add", "theorem", "comap_infi", ["subgroup"]], ["add", "theorem", "comap_top", ["subgroup"]], ["add", "theorem", "ext'", ["subgroup"]], ["add", "theorem", "ext", ["subgroup"]], ["add", "theorem", "gc_map_comap", ["subgroup"]], ["add", "theorem", "gpow_mem", ["subgroup"]], ["add", "theorem", "inv_mem", ["subgroup"]], ["add", "theorem", "le_def", ["subgroup"]], ["add", "theorem", "list_prod_mem", ["subgroup"]], ["add", "def", "map", ["subgroup"]], ["add", "theorem", "map_bot", ["subgroup"]], ["add", "theorem", "map_le_iff_le_comap", ["subgroup"]], ["add", "theorem", "map_map", ["subgroup"]], ["add", "theorem", "map_sup", ["subgroup"]], ["add", "theorem", "map_supr", ["subgroup"]], ["add", "theorem", "mem_Inf", ["subgroup"]], ["add", "theorem", "mem_Sup_of_directed_on", ["subgroup"]], ["add", "theorem", "mem_bot", ["subgroup"]], ["add", "theorem", "mem_closure", ["subgroup"]], ["add", "theorem", "mem_closure_singleton", ["subgroup"]], ["add", "theorem", "mem_coe", ["subgroup"]], ["add", "theorem", "mem_comap", ["subgroup"]], ["add", "theorem", "mem_inf", ["subgroup"]], ["add", "theorem", "mem_map", ["subgroup"]], ["add", "theorem", "mem_prod", ["subgroup"]], ["add", "theorem", "mem_supr_of_directed", ["subgroup"]], ["add", "theorem", "mem_top", ["subgroup"]], ["add", "theorem", "mul_mem", ["subgroup"]], ["add", "theorem", "multiset_prod_mem", ["subgroup"]], ["add", "def", "of_add_subgroup", ["subgroup"]], ["add", "theorem", "one_mem", ["subgroup"]], ["add", "theorem", "pow_mem", ["subgroup"]], ["add", "def", "prod", ["subgroup"]], ["add", "def", "prod_equiv", ["subgroup"]], ["add", "theorem", "prod_mem", ["subgroup"]], ["add", "theorem", "prod_mono", ["subgroup"]], ["add", "theorem", "prod_mono_left", ["subgroup"]], ["add", "theorem", "prod_mono_right", ["subgroup"]], ["add", "theorem", "prod_top", ["subgroup"]], ["add", "theorem", "subset_closure", ["subgroup"]], ["add", "def", "subtype", ["subgroup"]], ["add", "def", "to_add_subgroup", ["subgroup"]], ["add", "theorem", "top_prod", ["subgroup"]], ["add", "theorem", "top_prod_top", ["subgroup"]], ["add", "structure", "subgroup", []]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["del", "inductive", "in_closure", ["add_monoid"]], ["del", "theorem", "is_add_submonoid", ["additive"]], ["del", "theorem", "is_add_submonoid_iff", ["additive"]], ["del", "theorem", "is_submonoid", ["image"]], ["del", "theorem", "multiple_subset", ["is_add_submonoid"]], ["del", "theorem", "smul_coe", ["is_add_submonoid"]], ["del", "theorem", "smul_mem", ["is_add_submonoid"]], ["del", "theorem", "coe_mul", ["is_submonoid"]], ["del", "theorem", "coe_one", ["is_submonoid"]], ["del", "theorem", "coe_pow", ["is_submonoid"]], ["del", "theorem", "finset_prod_mem", ["is_submonoid"]], ["del", "theorem", "list_prod_mem", ["is_submonoid"]], ["del", "theorem", "multiset_prod_mem", ["is_submonoid"]], ["del", "theorem", "pow_mem", ["is_submonoid"]], ["del", "theorem", "power_subset", ["is_submonoid"]], ["del", "theorem", "is_submonoid_Union_of_directed", []], ["del", "def", "closure", ["monoid"]], ["del", "theorem", "closure_mono", ["monoid"]], ["del", "theorem", "closure_singleton", ["monoid"]], ["del", "theorem", "closure_subset", ["monoid"]], ["del", "theorem", "exists_list_of_mem_closure", ["monoid"]], ["del", "theorem", "image_closure", ["monoid"]], ["del", "inductive", "in_closure", ["monoid"]], ["del", "theorem", "mem_closure_union_iff", ["monoid"]], ["del", "theorem", "subset_closure", ["monoid"]], ["del", "theorem", "add_mem", ["multiples"]], ["del", "theorem", "self_mem", ["multiples"]], ["del", "theorem", "zero_mem", ["multiples"]], ["del", "def", "multiples", []], ["del", "theorem", "is_submonoid", ["multiplicative"]], ["del", "theorem", "is_submonoid_iff", ["multiplicative"]], ["del", "theorem", "mul_mem", ["powers"]], ["del", "theorem", "one_mem", ["powers"]], ["del", "theorem", "self_mem", ["powers"]], ["del", "def", "powers", []], ["del", "def", "of", ["submonoid"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1591046763, "sha": "66ce5d07", "message": "feat(representation_theory/maschke): Maschke's theorem (#2762)\nThe final theorem is\n```\nlemma monoid_algebra.submodule.exists_is_compl\n (not_dvd : ¬(ring_char k ∣ fintype.card G)) (p : submodule (monoid_algebra k G) V) :\n ∃ q : submodule (monoid_algebra k G) V, is_compl p q\n```\nfor `[field k]`.\nThe core computation, turning a `k`-linear retraction of `k[G]`-linear map into a `k[G]`-linear retraction by averaging over `G`, happens over an arbitrary `[comm_ring k]` in which `[invertible (fintype.card G : k)]`.", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "smul_single'", ["finsupp"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": [["add", "def", "equivariant_of_linear_of_comm", ["monoid_algebra"]], ["add", "theorem", "equivariant_of_linear_of_comm_apply", ["monoid_algebra"]], ["add", "def", "linear_map", ["monoid_algebra", "group_smul"]], ["add", "theorem", "linear_map_apply", ["monoid_algebra", "group_smul"]], ["add", "theorem", "single_one_comm", ["monoid_algebra"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "def", "mul_left_embedding", []], ["add", "theorem", "mul_left_embedding_apply", []], ["add", "def", "mul_right_embedding", []], ["add", "theorem", "mul_right_embedding_apply", []]]}, {"oldPath": null, "newPath": "src/representation_theory/maschke.lean", "changes": [["add", "def", "conjugate", []], ["add", "theorem", "conjugate_i", []], ["add", "def", "equivariant_projection", []], ["add", "theorem", "equivariant_projection_condition", []], ["add", "theorem", "exists_left_inverse_of_injective", ["monoid_algebra"]], ["add", "theorem", "exists_is_compl", ["monoid_algebra", "submodule"]], ["add", "def", "sum_of_conjugates", []], ["add", "def", "sum_of_conjugates_equivariant", []]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1591040448, "sha": "085aadeb", "message": "chore(linear_algebra/affine_space): use implicit args (#2905)\nWhenever we have an argument `f : affine_map k V P`, Lean can figure out `k`, `V`, and `P`.", "changes": [{"oldPath": "src/linear_algebra/affine_space.lean", "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "coe_comp", ["affine_map"]], ["add", "theorem", "coe_id", ["affine_map"]], ["mod", "theorem", "comp_apply", ["affine_map"]], ["mod", "theorem", "id_apply", ["affine_map"]]]}]}, {"timestamp": 1591030918, "sha": "17296e9c", "message": "feat(category_theory/abelian): Schur's lemma (#2838)\nI wrote this mostly to gain some familiarity with @TwoFX's work on abelian categories from #2817.\nThat all looked great, and Schur's lemma was pleasantly straightforward.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "epi_of_epi_image", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["mod", "def", "cokernel_iso", ["category_theory", "limits", "cokernel"]], ["mod", "def", "of_epi", ["category_theory", "limits", "cokernel"]], ["mod", "def", "of_iso_comp", ["category_theory", "limits", "cokernel"]], ["mod", "theorem", "π_of_epi", ["category_theory", "limits", "cokernel"]], ["mod", "def", "π_of_zero", ["category_theory", "limits", "cokernel"]], ["add", "def", "π_zero_is_iso", ["category_theory", "limits", "cokernel"]], ["add", "theorem", "cokernel_not_iso_of_nonzero", ["category_theory", "limits"]], ["add", "theorem", "cokernel_not_mono_of_nonzero", ["category_theory", "limits"]], ["add", "theorem", "eq_zero_of_epi_kernel", ["category_theory", "limits"]], ["add", "theorem", "eq_zero_of_mono_cokernel", ["category_theory", "limits"]], ["add", "def", "has_cokernel", ["category_theory", "limits"]], ["add", "def", "has_kernel", ["category_theory", "limits"]], ["mod", "def", "iso_kernel", ["category_theory", "limits", "kernel"]], ["mod", "def", "of_comp_iso", ["category_theory", "limits", "kernel"]], ["mod", "def", "of_mono", ["category_theory", "limits", "kernel"]], ["mod", "theorem", "ι_of_mono", ["category_theory", "limits", "kernel"]], ["mod", "def", "ι_of_zero", ["category_theory", "limits", "kernel"]], ["mod", "def", "ι_zero_is_iso", ["category_theory", "limits", "kernel"]], ["add", "theorem", "kernel_not_epi_of_nonzero", ["category_theory", "limits"]], ["add", "theorem", "kernel_not_iso_of_nonzero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "eq_zero_of_image_eq_zero", ["category_theory", "limits"]], ["add", "theorem", "from_zero_ext", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "to_zero_ext", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "nonzero_image_of_nonzero", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/preadditive.lean", "newPath": "src/category_theory/preadditive.lean", "changes": [["add", "theorem", "epi_of_cokernel_zero", ["category_theory", "preadditive"]], ["mod", "def", "has_colimit_parallel_pair", ["category_theory", "preadditive"]], ["mod", "def", "has_limit_parallel_pair", ["category_theory", "preadditive"]], ["add", "theorem", "mono_of_kernel_zero", ["category_theory", "preadditive"]]]}, {"oldPath": null, "newPath": "src/category_theory/schur.lean", "changes": [["add", "def", "is_iso_of_hom_simple", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/simple.lean", "changes": [["add", "theorem", "cokernel_zero_of_nonzero_to_simple", ["category_theory"]], ["add", "theorem", "epi_from_simple_zero_of_not_iso", ["category_theory"]], ["add", "def", "is_iso_of_epi_of_nonzero", ["category_theory"]], ["add", "def", "is_iso_of_mono_of_nonzero", ["category_theory"]], ["add", "theorem", "kernel_zero_of_nonzero_from_simple", ["category_theory"]], ["add", "theorem", "mono_to_simple_zero_of_not_iso", ["category_theory"]], ["add", "theorem", "ext", ["category_theory", "simple"]], ["add", "def", "simple_of_cosimple", ["category_theory"]], ["add", "theorem", "zero_not_simple", ["category_theory"]]]}]}, {"timestamp": 1591024382, "sha": "2812cdc2", "message": "fix(ci): check nolints.txt against master (#2906)\nCurrently, leanprover-community-bot makes an \"update nolints\" PR if both of the following hold:\n- the `nolints` branch doesn't exist, meaning there isn't already an open nolints PR\n- `nolints.txt` has been modified compared to HEAD.\nThis can lead to a duplicate nolints PR (see e.g. #2899 and #2901), since a nolints PR might have been merged after this build on `master` started, but before this step runs.\nThis PR changes the second check so that it instead compares `nolints.txt` against the most recent `master` commit, which should fix this.", "changes": [{"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}]}, {"timestamp": 1591013838, "sha": "f142b420", "message": "fix(scripts/deploy_docs): correct git push syntax (#2903)\nThe suggestion I made in #2893 didn't work.", "changes": [{"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1591013837, "sha": "b405a5ea", "message": "fix(tactic/equiv_rw): use kdepends_on rather than occurs (#2898)\n`kdepends_on t e` and `e.occurs t` sometimes give different answers, and it seems `equiv_rw` wants the behaviour that `kdepends_on` provides.\nThere is a new test which failed with `occurs`, and succeeds using `kdepends_on`. No other changes.", "changes": [{"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}]}, {"timestamp": 1591012085, "sha": "b9d485db", "message": "chore(data/mv_polynomial): swap the order of mv_polynomial.ext_iff (#2902)\nThe previous order of implications is not the one you usually want to simp or rw with.", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}]}, {"timestamp": 1591008643, "sha": "0485e0f7", "message": "feat(scripts/deploy_docs): force push generated docs (#2893)\n(1) We build the full html docs in every CI run, even though they only get saved on master builds. Just compiling the .lean files used in doc generation should be enough to catch 95% of breaks. I think the bit of extra risk is worth speeding up the CI runs, especially since linting is now as fast as tests + docs. \n(2) The repo hosting the html pages was 1.3gb because we kept every revision. Half of the time spent on doc builds was just checking out the repo. I've deleted the history. This PR changes the build script to overwrite the previous version.", "changes": [{"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1591002088, "sha": "9172cdf8", "message": "feat(linear_algebra/affine_space): affine spaces (#2816)\nDefine (very minimally) affine spaces (as an abbreviation for\nadd_torsor in the case where the group is a vector space), affine\nsubspaces, the affine span of a set of points and affine maps.", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/affine_space.lean", "changes": [["add", "theorem", "coe_mk", ["affine_map"]], ["add", "def", "comp", ["affine_map"]], ["add", "theorem", "comp_apply", ["affine_map"]], ["add", "theorem", "ext", ["affine_map"]], ["add", "def", "id", ["affine_map"]], ["add", "theorem", "id_apply", ["affine_map"]], ["add", "theorem", "map_vadd", ["affine_map"]], ["add", "theorem", "map_vsub", ["affine_map"]], ["add", "theorem", "to_fun_eq_coe", ["affine_map"]], ["add", "structure", "affine_map", []], ["add", "theorem", "mem_span_points", ["affine_space"]], ["add", "def", "span_points", ["affine_space"]], ["add", "theorem", "span_points_nonempty_of_nonempty", ["affine_space"]], ["add", "theorem", "vadd_mem_span_points_of_mem_span_points_of_mem_vector_span", ["affine_space"]], ["add", "def", "vector_span", ["affine_space"]], ["add", "theorem", "vsub_mem_vector_span_of_mem_span_points_of_mem_span_points", ["affine_space"]], ["add", "def", "affine_space", []], ["add", "def", "affine_span", []], ["add", "theorem", "affine_span_coe", []], ["add", "theorem", "affine_span_mem", []], ["add", "theorem", "mem_coe", ["affine_subspace"]], ["add", "theorem", "mem_univ", ["affine_subspace"]], ["add", "def", "univ", ["affine_subspace"]], ["add", "theorem", "univ_coe", ["affine_subspace"]], ["add", "structure", "affine_subspace", []]]}]}, {"timestamp": 1590993833, "sha": "6beebb0a", "message": "chore(scripts): update nolints.txt (#2899)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590989486, "sha": "7263917e", "message": "chore(order/complete_lattice): redefine `ord_continuous` (#2886)\nRedefine `ord_continuous` using `is_lub` to ensure that the definition\nmakes sense for `conditionally_complete_lattice`s.", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["del", "theorem", "mono", ["ord_continuous"]], ["del", "theorem", "sup", ["ord_continuous"]], ["del", "def", "ord_continuous", []]]}, {"oldPath": null, "newPath": "src/order/ord_continuous.lean", "changes": [["add", "theorem", "coe_to_le_order_embedding", ["left_ord_continuous"]], ["add", "theorem", "coe_to_lt_order_embedding", ["left_ord_continuous"]], ["add", "theorem", "comp", ["left_ord_continuous"]], ["add", "theorem", "le_iff", ["left_ord_continuous"]], ["add", "theorem", "lt_iff", ["left_ord_continuous"]], ["add", "theorem", "map_Sup'", ["left_ord_continuous"]], ["add", "theorem", "map_Sup", ["left_ord_continuous"]], ["add", "theorem", "map_cSup", ["left_ord_continuous"]], ["add", "theorem", "map_csupr", ["left_ord_continuous"]], ["add", "theorem", "map_is_greatest", ["left_ord_continuous"]], ["add", "theorem", "map_sup", ["left_ord_continuous"]], ["add", "theorem", "map_supr", ["left_ord_continuous"]], ["add", "theorem", "mono", ["left_ord_continuous"]], ["add", "def", "to_le_order_embedding", ["left_ord_continuous"]], ["add", "def", "to_lt_order_embedding", ["left_ord_continuous"]], ["add", "def", "left_ord_continuous", []], ["add", "theorem", "coe_to_le_order_embedding", ["right_ord_continuous"]], ["add", "theorem", "coe_to_lt_order_embedding", ["right_ord_continuous"]], ["add", "theorem", "comp", ["right_ord_continuous"]], ["add", "theorem", "le_iff", ["right_ord_continuous"]], ["add", "theorem", "lt_iff", ["right_ord_continuous"]], ["add", "theorem", "map_Inf'", ["right_ord_continuous"]], ["add", "theorem", "map_Inf", ["right_ord_continuous"]], ["add", "theorem", "map_cInf", ["right_ord_continuous"]], ["add", "theorem", "map_cinfi", ["right_ord_continuous"]], ["add", "theorem", "map_inf", ["right_ord_continuous"]], ["add", "theorem", "map_infi", ["right_ord_continuous"]], ["add", "theorem", "map_is_least", ["right_ord_continuous"]], ["add", "theorem", "mono", ["right_ord_continuous"]], ["add", "def", "to_le_order_embedding", ["right_ord_continuous"]], ["add", "def", "to_lt_order_embedding", ["right_ord_continuous"]], ["add", "def", "right_ord_continuous", []]]}]}, {"timestamp": 1590987592, "sha": "ea76bd8f", "message": "chore(scripts): update nolints.txt (#2896)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590983100, "sha": "5c278857", "message": "feat(order/order_iso): group structure on order automorphisms (#2875)\nAlso add a few missing lemmas about `order_iso`", "changes": [{"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "theorem", "apply_inv_self", ["order_iso"]], ["mod", "theorem", "apply_symm_apply", ["order_iso"]], ["mod", "theorem", "coe_fn_injective", ["order_iso"]], ["add", "theorem", "coe_mul", ["order_iso"]], ["add", "theorem", "coe_one", ["order_iso"]], ["add", "theorem", "ext", ["order_iso"]], ["add", "theorem", "inv_apply_self", ["order_iso"]], ["add", "theorem", "mul_apply", ["order_iso"]], ["del", "def", "preimage", ["order_iso"]], ["add", "theorem", "rel_symm_apply", ["order_iso"]], ["add", "def", "rsymm", ["order_iso"]], ["mod", "theorem", "symm_apply_apply", ["order_iso"]], ["add", "theorem", "symm_apply_rel", ["order_iso"]], ["add", "theorem", "to_equiv_injective", ["order_iso"]], ["del", "theorem", "to_equiv_to_fun", ["order_iso"]], ["mod", "theorem", "trans_apply", ["order_iso"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1590976688, "sha": "73f95a7a", "message": "chore(algebra/group): move defs to `defs.lean` (#2885)\nAlso delete the aliases `eq_of_add_eq_add_left` and `eq_of_add_eq_add_right`.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["del", "def", "eq_of_add_eq_add_left", []], ["del", "def", "eq_of_add_eq_add_right", []], ["del", "theorem", "mul_left_cancel", ["group"]], ["del", "theorem", "mul_right_cancel", ["group"]], ["del", "theorem", "inv_eq_of_mul_eq_one", []], ["del", "theorem", "inv_inv", []], ["del", "theorem", "inv_mul_cancel_left", []], ["del", "def", "inv_mul_self", []], ["del", "theorem", "left_inv_eq_right_inv", []], ["del", "theorem", "mul_assoc", []], ["del", "theorem", "mul_comm", []], ["del", "theorem", "mul_inv_cancel_right", []], ["del", "def", "mul_inv_self", []], ["del", "theorem", "mul_left_cancel", []], ["del", "theorem", "mul_left_cancel_iff", []], ["del", "theorem", "mul_left_inj", []], ["del", "theorem", "mul_left_injective", []], ["del", "theorem", "mul_left_inv", []], ["del", "theorem", "mul_one", []], ["del", "theorem", "mul_right_cancel", []], ["del", "theorem", "mul_right_cancel_iff", []], ["del", "theorem", "mul_right_inj", []], ["del", "theorem", "mul_right_injective", []], ["del", "theorem", "mul_right_inv", []], ["del", "theorem", "one_mul", []], ["del", "theorem", "sub_eq_add_neg", []]]}, {"oldPath": null, "newPath": "src/algebra/group/defs.lean", "changes": [["add", "theorem", "inv_eq_of_mul_eq_one", []], ["add", "theorem", "inv_inv", []], ["add", "theorem", "inv_mul_cancel_left", []], ["add", "theorem", "inv_mul_self", []], ["add", "theorem", "left_inv_eq_right_inv", []], ["add", "theorem", "mul_assoc", []], ["add", "theorem", "mul_comm", []], ["add", "theorem", "mul_inv_cancel_right", []], ["add", "theorem", "mul_inv_self", []], ["add", "theorem", "mul_left_cancel", []], ["add", "theorem", "mul_left_cancel_iff", []], ["add", "theorem", "mul_left_inj", []], ["add", "theorem", "mul_left_injective", []], ["add", "theorem", "mul_left_inv", []], ["add", "theorem", "mul_one", []], ["add", "theorem", "mul_right_cancel", []], ["add", "theorem", "mul_right_cancel_iff", []], ["add", "theorem", "mul_right_inj", []], ["add", "theorem", "mul_right_injective", []], ["add", "theorem", "mul_right_inv", []], ["add", "theorem", "one_mul", []], ["add", "theorem", "sub_eq_add_neg", []]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1590955267, "sha": "d3fc918b", "message": "chore(scripts): update nolints.txt (#2892)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590951497, "sha": "1fd5195f", "message": "chore(data/equiv/mul_add): review (#2874)\n* make `mul_aut` and `add_aut` reducible to get `coe_fn`\n* add some `coe_*` lemmas", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "coe_mul", ["add_aut"]], ["add", "theorem", "coe_one", ["add_aut"]], ["add", "theorem", "coe_inv", ["equiv"]], ["add", "theorem", "coe_mul_left", ["equiv"]], ["add", "theorem", "coe_mul_right", ["equiv"]], ["add", "theorem", "inv_symm", ["equiv"]], ["add", "theorem", "mul_left_symm", ["equiv"]], ["add", "theorem", "mul_right_symm", ["equiv"]], ["add", "theorem", "coe_mul", ["mul_aut"]], ["add", "theorem", "coe_one", ["mul_aut"]]]}]}, {"timestamp": 1590944757, "sha": "7c7e8669", "message": "chore(*): update to lean 3.15.0 (#2851)\nThe main effect for mathlib comes from https://github.com/leanprover-community/lean/pull/282, which changes the elaboration strategy for structure instance literals (`{ foo := 42 }`). There are two points where we need to pay attention:\n1. Avoid sourcing (`{ ..e }` where e.g. `e : euclidean_domain α`) for fields like `add`, `mul`, `zero`, etc. Instead write `{ add := (+), mul := (*), zero := 0, ..e }`. The reason is that `{ ..e }` is equivalent to `{ mul := euclidean_domain.mul, ..e }`. And `euclidean_domain.mul` should never be mentioned.\nI'm not completely sure if this issue remains visible once the structure literal has been elaborated, but this hasn't changed since 3.14. For now, my advice is: if you get weird errors like \"cannot unify `a * b` and `?m_1 * ?m_2` in a structure literal, add `mul := (*)`.\n2. `refine { le := (≤), .. }; simp` is slower. This is because references to `(≤)` are no longer reduced to `le` in the subgoals. If a subgoal like `a ≤ b → b ≤ a → a = b` was stated for preorders (because `partial_order` extends `preorder`), then the `(≤)` will contain a `preorder` subterm. This subterm also contains other subgoals (proofs of reflexivity and transitivity). Therefore the goals are larger than you might expect:\n```\n∀ (a b : α),\n @has_le.le.{u} α\n (@preorder.to_has_le.{u} α\n (@preorder.mk.{u} α le (@lattice.lt._default.{u} α le)\n (@conditionally_complete_lattice.copy._aux_1.{u} α c le eq_le sup eq_sup inf eq_inf Sup eq_Sup Inf eq_Inf)\n (@conditionally_complete_lattice.copy._aux_2.{u} α c le eq_le sup eq_sup inf eq_inf Sup eq_Sup Inf eq_Inf)\n (λ (a b : α), iff.refl (@has_lt.lt.{u} α (@has_lt.mk.{u} α (@lattice.lt._default.{u} α le)) a b))))\n a\n b →\n @has_le.le.{u} α\n (@preorder.to_has_le.{u} α\n (@preorder.mk.{u} α le (@lattice.lt._default.{u} α le)\n (@conditionally_complete_lattice.copy._aux_1.{u} α c le eq_le sup eq_sup inf eq_inf Sup eq_Sup Inf eq_Inf)\n (@conditionally_complete_lattice.copy._aux_2.{u} α c le eq_le sup eq_sup inf eq_inf Sup eq_Sup Inf eq_Inf)\n (λ (a b : α), iff.refl (@has_lt.lt.{u} α (@has_lt.mk.{u} α (@lattice.lt._default.{u} α le)) a b))))\n b\n a →\n @eq.{u+1} α a b\n```\nAdvice: in cases such as this, try `refine { le := (≤), .. }; abstract { simp }` to reduce the size of the (dependent) subgoals.\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Lean.203.2E15.2E0).", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": [["add", "theorem", "comp_val", ["category_theory", "category_of_elements"]], ["add", "theorem", "ext", ["category_theory", "category_of_elements"]], ["add", "theorem", "id_val", ["category_theory", "category_of_elements"]]]}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/control/applicative.lean", "newPath": "src/control/applicative.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/data/erased.lean", "newPath": "src/data/erased.lean", "changes": [["add", "theorem", "bind_def", ["erased"]], ["add", "def", "map", ["erased"]], ["add", "theorem", "map_def", ["erased"]], ["add", "theorem", "map_out", ["erased"]], ["mod", "theorem", "nonempty_iff", ["erased"]], ["add", "theorem", "out_inj", ["erased"]], ["mod", "def", "out_type", ["erased"]], ["add", "theorem", "pure_def", ["erased"]], ["mod", "def", "erased", []]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["del", "def", "map_with_index", ["list"]], ["del", "def", "map_with_index_core", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "bind_def", ["multiset"]], ["add", "theorem", "fmap_def", ["multiset"]], ["add", "theorem", "pure_def", ["multiset"]]]}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["del", "def", "add", ["padic_int"]], ["del", "theorem", "add_def", ["padic_int"]], ["mod", "theorem", "coe_add", ["padic_int"]], ["mod", "theorem", "coe_coe", ["padic_int"]], ["mod", "theorem", "coe_mul", ["padic_int"]], ["mod", "theorem", "coe_neg", ["padic_int"]], ["mod", "theorem", "coe_one", ["padic_int"]], ["mod", "theorem", "coe_zero", ["padic_int"]], ["add", "theorem", "ext", ["padic_int"]], ["mod", "theorem", "mk_coe", ["padic_int"]], ["del", "def", "mul", ["padic_int"]], ["del", "theorem", "mul_def", ["padic_int"]], ["del", "def", "neg", ["padic_int"]], ["mod", "theorem", "val_eq_coe", ["padic_int"]], ["del", "theorem", "zero_def", ["padic_int"]], ["add", "theorem", "padic_norm_z", []], ["del", "def", "padic_norm_z", []]]}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": [["add", "theorem", "bind_def", ["semiquot"]], ["add", "theorem", "map_def", ["semiquot"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "coe_eq_coe", ["submonoid"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/order/copy.lean", "newPath": "src/order/copy.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}]}, {"timestamp": 1590937390, "sha": "25fc0a8f", "message": "feat(field_theory/splitting_field): lemmas (#2887)", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "splits_X_sub_C", ["polynomial"]], ["add", "theorem", "splits_id_iff_splits", ["polynomial"]], ["add", "theorem", "splits_mul_iff", ["polynomial"]], ["add", "theorem", "splits_one", ["polynomial"]], ["add", "theorem", "splits_prod", ["polynomial"]], ["add", "theorem", "splits_prod_iff", ["polynomial"]]]}]}, {"timestamp": 1590906174, "sha": "13b34b36", "message": "chore(*): split long lines (#2883)\nAlso move docs for `control/fold` from a comment to a module docstring.", "changes": [{"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": [["mod", "def", "lift'", ["free_add_semigroup"]], ["mod", "theorem", "traverse_pure'", ["free_semigroup"]], ["mod", "theorem", "traverse_pure", ["free_semigroup"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": [["mod", "theorem", "constant_of_preserves_morphisms", ["category_theory"]]]}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "theorem", "hom_inv_id_app", ["category_theory", "nat_iso"]], ["mod", "theorem", "inv_hom_id_app", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/control/fold.lean", "newPath": "src/control/fold.lean", "changes": [["mod", "def", "mfoldl", ["monoid"]], ["mod", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "foldl"]], ["mod", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "foldr"]], ["mod", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "mfoldl"]], ["mod", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "mfoldr"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "theorem", "prod_comm", ["finsupp"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["mod", "theorem", "bind_eq_some'", ["option"]], ["mod", "theorem", "bind_eq_some", ["option"]], ["mod", "theorem", "map_eq_some'", ["option"]], ["mod", "theorem", "map_eq_some", ["option"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["mod", "theorem", "ext", ["sesq_form"]], ["mod", "structure", "sesq_form", []]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": [["mod", "theorem", "map_comp_hom_app", ["topological_space", "opens"]], ["mod", "theorem", "map_comp_inv_app", ["topological_space", "opens"]], ["mod", "theorem", "map_comp_obj'", ["topological_space", "opens"]], ["mod", "theorem", "map_comp_obj", ["topological_space", "opens"]], ["mod", "theorem", "map_comp_obj_unop", ["topological_space", "opens"]], ["mod", "theorem", "op_map_comp_obj", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "continuous_of_discrete_topology", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1590901144, "sha": "a285049b", "message": "chore(algebra/group_hom): rename `add_monoid.smul` to `nsmul` (#2861)\nAlso drop `•` as a notation for two `smul`s declared in this file,\nuse `•ℕ` and `•ℤ` instead.\nThis way one can immediately see that a lemma uses `nsmul`/`gsmul`, not `has_scalar.smul`.", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_nsmul", ["finset"]], ["del", "theorem", "sum_smul'", ["finset"]]]}, {"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": [["add", "theorem", "nsmul_left", ["commute"]], ["add", "theorem", "nsmul_nsmul", ["commute"]], ["add", "theorem", "nsmul_right", ["commute"]], ["add", "theorem", "nsmul_self", ["commute"]], ["add", "theorem", "self_nsmul", ["commute"]], ["add", "theorem", "self_nsmul_nsmul", ["commute"]], ["del", "theorem", "self_smul", ["commute"]], ["del", "theorem", "self_smul_smul", ["commute"]], ["del", "theorem", "smul_left", ["commute"]], ["del", "theorem", "smul_right", ["commute"]], ["del", "theorem", "smul_self", ["commute"]], ["del", "theorem", "smul_smul", ["commute"]]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "add_gsmul", []], ["del", "theorem", "add_smul", ["add_monoid"]], ["del", "theorem", "mul_smul'", ["add_monoid"]], ["del", "theorem", "mul_smul", ["add_monoid"]], ["del", "theorem", "mul_smul_assoc", ["add_monoid"]], ["del", "theorem", "mul_smul_left", ["add_monoid"]], ["del", "theorem", "neg_smul", ["add_monoid"]], ["del", "theorem", "one_smul", ["add_monoid"]], ["del", "def", "smul", ["add_monoid"]], ["del", "theorem", "smul_add", ["add_monoid"]], ["del", "theorem", "smul_eq_mul'", ["add_monoid"]], ["del", "theorem", "smul_eq_mul", ["add_monoid"]], ["del", "theorem", "smul_le_smul", ["add_monoid"]], ["del", "theorem", "smul_le_smul_of_le_right", ["add_monoid"]], ["del", "theorem", "smul_neg_comm", ["add_monoid"]], ["del", "theorem", "smul_nonneg", ["add_monoid"]], ["del", "theorem", "smul_one", ["add_monoid"]], ["del", "theorem", "smul_sub", ["add_monoid"]], ["del", "theorem", "smul_zero", ["add_monoid"]], ["del", "theorem", "zero_smul", ["add_monoid"]], ["mod", "theorem", "map_gsmul", ["add_monoid_hom"]], ["add", "theorem", "map_nsmul", ["add_monoid_hom"]], ["del", "theorem", "map_smul", ["add_monoid_hom"]], ["add", "theorem", "add_nsmul", []], ["mod", "theorem", "add_one_gsmul", []], ["mod", "theorem", "bit0_gsmul", []], ["add", "theorem", "bit0_nsmul", []], ["del", "theorem", "bit0_smul", []], ["mod", "theorem", "bit1_gsmul", []], ["add", "theorem", "bit1_nsmul", []], ["del", "theorem", "bit1_smul", []], ["mod", "theorem", "gsmul_add_comm", []], ["mod", "theorem", "gsmul_coe_nat", []], ["mod", "theorem", "gsmul_mul'", []], ["mod", "theorem", "gsmul_mul", []], ["mod", "theorem", "gsmul_neg_succ", []], ["mod", "theorem", "gsmul_of_nat", []], ["mod", "theorem", "gsmul_one", []], ["mod", "theorem", "gsmul_zero", []], ["add", "theorem", "map_nsmul", ["is_add_monoid_hom"]], ["del", "theorem", "map_smul", ["is_add_monoid_hom"]], ["mod", "theorem", "sum_repeat", ["list"]], ["add", "theorem", "mul_nsmul'", []], ["add", "theorem", "mul_nsmul", []], ["add", "theorem", "mul_nsmul_assoc", []], ["add", "theorem", "mul_nsmul_left", []], ["add", "theorem", "nsmul_eq_mul", ["nat"]], ["del", "theorem", "smul_eq_mul", ["nat"]], ["mod", "theorem", "neg_gsmul", []], ["add", "theorem", "neg_nsmul", []], ["mod", "theorem", "neg_one_gsmul", []], ["add", "def", "nsmul", []], ["add", "theorem", "nsmul_add", []], ["add", "theorem", "nsmul_add_comm'", []], ["add", "theorem", "nsmul_add_comm", []], ["add", "theorem", "nsmul_eq_mul'", []], ["add", "theorem", "nsmul_eq_mul", []], ["add", "theorem", "nsmul_le_nsmul", []], ["add", "theorem", "nsmul_le_nsmul_of_le_right", []], ["add", "theorem", "nsmul_neg_comm", []], ["add", "theorem", "nsmul_nonneg", []], ["add", "theorem", "nsmul_one", []], ["add", "theorem", "nsmul_sub", []], ["add", "theorem", "nsmul_zero", []], ["add", "theorem", "of_add_nsmul", []], ["del", "theorem", "of_add_smul", []], ["mod", "theorem", "one_add_gsmul", []], ["mod", "theorem", "one_gsmul", []], ["add", "theorem", "one_nsmul", []], ["del", "theorem", "smul_add_comm'", []], ["del", "theorem", "smul_add_comm", []], ["add", "theorem", "succ_nsmul'", []], ["add", "theorem", "succ_nsmul", []], ["del", "theorem", "succ_smul'", []], ["del", "theorem", "succ_smul", []], ["add", "theorem", "two_nsmul", []], ["del", "theorem", "two_smul'", []], ["add", "theorem", "coe_nsmul", ["with_bot"]], ["del", "theorem", "coe_smul", ["with_bot"]], ["mod", "theorem", "zero_gsmul", []], ["add", "theorem", "zero_nsmul", []]]}, {"oldPath": "src/algebra/iterate_hom.lean", "newPath": "src/algebra/iterate_hom.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["del", "theorem", "add_monoid_smul_eq_smul", ["semimodule"]], ["add", "theorem", "nsmul_eq_smul", ["semimodule"]]]}, {"oldPath": "src/algebra/semiconj.lean", "newPath": "src/algebra/semiconj.lean", "changes": [["add", "theorem", "nsmul_left", ["semiconj_by"]], ["add", "theorem", "nsmul_nsmul", ["semiconj_by"]], ["add", "theorem", "nsmul_right", ["semiconj_by"]], ["del", "theorem", "smul_left", ["semiconj_by"]], ["del", "theorem", "smul_right", ["semiconj_by"]], ["del", "theorem", "smul_smul", ["semiconj_by"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "to_finset_nsmul", ["multiset"]], ["del", "theorem", "to_finset_smul", ["multiset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "theorem", "to_multiset_single", ["finsupp"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "count_smul", ["multiset"]], ["mod", "theorem", "sum_repeat", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "degree_pow_le", ["polynomial"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "nsmul_coe", ["nnreal"]], ["del", "theorem", "smul_coe", ["nnreal"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["mod", "theorem", "self_mem", ["multiples"]], ["mod", "theorem", "zero_mem", ["multiples"]], ["mod", "def", "multiples", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/subsemiring.lean", "newPath": "src/ring_theory/subsemiring.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": [["mod", "def", "smul", ["tactic", "abel"]], ["mod", "def", "smulg", ["tactic", "abel"]], ["mod", "def", "term", ["tactic", "abel"]], ["mod", "def", "termg", ["tactic", "abel"]]]}]}, {"timestamp": 1590890174, "sha": "28e79d48", "message": "chore(data/set/basic): add some lemmas to `function.surjective` (#2876)\nThis way they can be used with dot notation. Also rename\n`set.surjective_preimage` to\n`function.surjective.injective_preimage`. I think that the old name\nwas misleading.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "injective_preimage", ["function", "surjective"]], ["add", "theorem", "range_comp", ["function", "surjective"]], ["add", "theorem", "range_eq", ["function", "surjective"]], ["del", "theorem", "surjective_preimage", ["set"]]]}]}, {"timestamp": 1590890172, "sha": "297806e6", "message": "feat(topology/homeomorph): sum_prod_distrib (#2870)\nAlso modify the `inv_fun` of `equiv.sum_prod_distrib` to have\nmore useful definitional behavior. This also simplifies\n`measurable_equiv.sum_prod_distrib`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "continuous_inl", []], ["mod", "theorem", "continuous_inr", []], ["mod", "theorem", "embedding_inl", []], ["mod", "theorem", "embedding_inr", []], ["add", "theorem", "is_open_map_sum", []], ["add", "theorem", "is_open_sum_iff", []], ["add", "theorem", "open_embedding_inl", []], ["add", "theorem", "open_embedding_inr", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "prod_sum_distrib", ["homeomorph"]], ["add", "def", "sum_congr", ["homeomorph"]], ["add", "def", "sum_prod_distrib", ["homeomorph"]]]}]}, {"timestamp": 1590878638, "sha": "0827a30c", "message": "feat(tactic/noncomm_ring): add noncomm_ring tactic (#2858)\nFixes https://github.com/leanprover-community/mathlib/issues/2727", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "bit0_mul", []], ["add", "theorem", "bit1_mul", []], ["add", "theorem", "mul_bit0", []], ["add", "theorem", "mul_bit1", []]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/noncomm_ring.lean", "changes": []}, {"oldPath": null, "newPath": "test/noncomm_ring.lean", "changes": []}]}, {"timestamp": 1590873308, "sha": "6e581ef2", "message": "chore(scripts): update nolints.txt (#2878)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590868519, "sha": "c034b4c2", "message": "chore(order/bounds): +2 lemmas, fix a name (#2877)", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "mem_lower_bounds", []], ["add", "theorem", "mem_upper_bounds", []], ["add", "theorem", "le_is_glb_image", ["monotone"]], ["del", "theorem", "le_is_glb_image_le", ["monotone"]]]}]}, {"timestamp": 1590865707, "sha": "9d76ac24", "message": "chore(scripts): update nolints.txt (#2873)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590861692, "sha": "f05acc8e", "message": "feat(group_theory/group_action): orbit_equiv_quotient_stabilizer_symm_apply and docs (#2864)", "changes": [{"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "orbit_equiv_quotient_stabilizer_symm_apply", ["mul_action"]]]}]}, {"timestamp": 1590855848, "sha": "67f1951b", "message": "refactor(algebra/module): change module into an abbreviation for semimodule (#2848)\nThe file `algebra/module.lean` contains the lines\n```\nThere were several attempts to make `module` an abbreviation of `semimodule` but this makes\n class instance search too hard for Lean 3.\n```\nIt turns out that this was too hard for Lean 3 until recently, but this is not too hard for Lean 3.14. This PR removes these two lines, and changes the files accordingly.\nThis means that the basic objects of linear algebra are now semimodules over semiring, making it possible to talk about matrices with natural number coefficients or apply general results on multilinear maps to get the binomial or the multinomial formula.\nA linear map is now defined over semirings, between semimodules which are `add_comm_monoid`s. For some statements, you need to have an `add_comm_group`, and a `ring` or a `comm_semiring` or a `comm_ring`. I have not tried to lower the possible typeclass assumptions like this in all files, but I have done it carefully in the following files:\n* `algebra/module`\n* `linear_algebra/basic`\n* `linear_algebra/multilinear`\n* `topology/algebra/module`\n* `topology/algebra/multilinear`\nOther files can be optimised later in the same way when needed, but this PR is already big enough.\nI have also fixed the breakage in all the other files. It was sometimes completely mysterious (in tensor products, I had to replace several times `linear_map.id.flip` with `linear_map.flip linear_map.id`), but globally all right. I have tweaked a few instance priorities to make sure that things don't go too bad: there are often additional steps in typeclass inference, going from `ring` to `semiring` and from `add_comm_group` to `add_comm_monoid`, so I have increased their priority (putting it strictly between 100 and 1000), and adjusted some other priorities to get more canonical instance paths, fixing some preexisting weirdnesses (notably in multilinear maps). One place where I really had to help Lean is with normed spaces of continuous multilinear maps, where instance search is just too big.\nI am aware that this will be a nightmare to refer, but as often with big refactor it's an \"all or nothing\" PR, impossible to split in tiny pieces.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "is_linear_map_neg", ["is_linear_map"]], ["mod", "theorem", "is_linear_map_smul'", ["is_linear_map"]], ["mod", "theorem", "is_linear_map_smul", ["is_linear_map"]], ["mod", "theorem", "map_neg", ["is_linear_map"]], ["mod", "def", "id", ["linear_map"]], ["mod", "theorem", "id_apply", ["linear_map"]], ["mod", "theorem", "map_sum", ["linear_map"]], ["del", "structure", "core", ["module"]], ["mod", "theorem", "gsmul_eq_smul_cast", ["module"]], ["del", "def", "of_core", ["module"]], ["add", "def", "module", []], ["del", "def", "to_module", ["ring_hom"]], ["add", "structure", "core", ["semimodule"]], ["add", "def", "of_core", ["semimodule"]], ["mod", "theorem", "smul_neg", []], ["mod", "theorem", "add_mem_iff_left", ["submodule"]], ["mod", "theorem", "add_mem_iff_right", ["submodule"]], ["mod", "theorem", "neg_mem_iff", ["submodule"]], ["mod", "structure", "submodule", []], ["mod", "def", "subspace", []], ["mod", "def", "vector_space", []]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/calculus/darboux.lean", "newPath": "src/analysis/calculus/darboux.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "smul_apply", ["dfinsupp"]], ["mod", "def", "to_has_scalar", ["dfinsupp"]], ["del", "def", "to_module", ["dfinsupp"]], ["add", "def", "to_semimodule", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "def", "restrict_support_equiv", ["finsupp"]]]}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "is_linear_map_add", ["is_linear_map"]], ["mod", "theorem", "is_linear_map_sub", ["is_linear_map"]], ["mod", "theorem", "eq_bot_of_equiv", ["linear_equiv"]], ["mod", "def", "refl", ["linear_equiv"]], ["mod", "theorem", "refl_apply", ["linear_equiv"]], ["mod", "theorem", "finsupp_sum", ["linear_map"]], ["add", "theorem", "ker_eq_bot_of_injective", ["linear_map"]], ["mod", "theorem", "range_range_restrict", ["linear_map"]], ["mod", "theorem", "mem_span_insert'", ["submodule"]], ["mod", "theorem", "sup_eq_range", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": [["mod", "def", "contract_right", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "def", "eval", ["module", "dual"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "def", "supported_equiv_finsupp", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "diagonal_to_lin", ["matrix"]], ["mod", "theorem", "to_lin_neg", ["matrix"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "def", "flip", ["linear_map"]], ["mod", "def", "lcomp", ["linear_map"]], ["mod", "def", "uncurry", ["tensor_product"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "add_comp", ["continuous_linear_map"]], ["mod", "theorem", "comp_add", ["continuous_linear_map"]], ["mod", "theorem", "is_complete_ker", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_comp", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_one_pow", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "theorem", "coe_coe", ["continuous_multilinear_map"]], ["mod", "def", "to_multilinear_map_linear", ["continuous_multilinear_map"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}]}, {"timestamp": 1590851149, "sha": "cc06d538", "message": "feat(algebra/big_operators): prod_ne_zero (#2863)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_ne_zero_iff", ["finset"]]]}]}, {"timestamp": 1590844353, "sha": "b40ac2af", "message": "chore(topology): make topological_space fields protected (#2867)\nThis uses the recent `protect_proj` attribute (#2855).", "changes": [{"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "structure", "topological_space", []]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "def", "opens", ["topological_space"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1590824024, "sha": "62cb7f2f", "message": "feat(geometry/euclidean): Euclidean space (#2852)\nDefine Euclidean affine spaces (not necessarily finite-dimensional),\nand a corresponding instance for the standard Euclidean space `fin n → ℝ`.\nThis just defines the type class and the instance, with some other\nbasic geometric definitions and results to be added separately once\nthis is in.\nI haven't attempted to do anything about the `euclidean_space`\ndefinition in geometry/manifold/real_instances.lean that comes with a\ncomment that it uses the wrong norm. That might better be refactored\nby someone familiar with the manifold code.\nBy defining Euclidean spaces such that they are defined to be metric\nspaces, and providing an instance, this probably implicitly gives item\n91 \"The Triangle Inequality\" from the 100-theorems list, if that's\ntaken to have a geometric interpretation as in the Coq version, but\nit's not very clear how something implicit like that from various\ndifferent pieces of the library, and where the item on the list could\nbe interpreted in several different ways anyway, should be entered in\n100.yaml.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "inner_def", ["euclidean_space"]], ["add", "def", "euclidean_space", []], ["mod", "theorem", "inner_self_eq_norm_square", []], ["mod", "theorem", "inner_self_eq_zero", []], ["add", "theorem", "inner_self_nonpos", []], ["add", "def", "inner_product_space", ["pi"]], ["add", "def", "inner_product_space", ["real"]]]}, {"oldPath": null, "newPath": "src/geometry/euclidean.lean", "changes": [["add", "def", "euclidean_affine_space", []]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": [["mod", "def", "euclidean_quadrant", []], ["add", "def", "euclidean_space2", []], ["del", "def", "euclidean_space", []], ["mod", "theorem", "findim_euclidean_space", []]]}]}, {"timestamp": 1590819158, "sha": "74d446d3", "message": "feat(order/iterate): some inequalities on `f^[n] x` and `g^[n] x` (#2859)", "changes": [{"oldPath": null, "newPath": "src/order/iterate.lean", "changes": [["add", "theorem", "iterate_le_of_map_le", ["function", "commute"]], ["add", "theorem", "iterate_pos_lt_iff_map_lt'", ["function", "commute"]], ["add", "theorem", "iterate_pos_lt_iff_map_lt", ["function", "commute"]], ["add", "theorem", "iterate_pos_lt_of_map_lt'", ["function", "commute"]], ["add", "theorem", "iterate_pos_lt_of_map_lt", ["function", "commute"]]]}]}, {"timestamp": 1590813976, "sha": "aa47bba5", "message": "feat(data/equiv): equiv_of_subsingleton_of_subsingleton (#2856)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "equiv_of_subsingleton_of_subsingleton", []]]}]}, {"timestamp": 1590799500, "sha": "5455fe19", "message": "chore(scripts): update nolints.txt (#2862)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590790828, "sha": "f95e8090", "message": "chore(algebra): displace zero_ne_one_class with nonzero and make no_zero_divisors a Prop (#2847)\n- `[nonzero_semiring α]` becomes `[semiring α] [nonzero α]`\n- `[nonzero_comm_semiring α]` becomes `[comm_semiring α] [nonzero α]`\n- `[nonzero_comm_ring α]` becomes `[comm_ring α] [nonzero α]`\n- `no_zero_divisors` is now a `Prop`\n- `units.ne_zero` (originally for `domain`) merges into `units.coe_ne_zero` (originally for `nonzero_comm_semiring`)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "not_is_unit_zero", []]]}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "theorem", "false_of_nonzero_of_char_one", ["char_p"]], ["mod", "theorem", "ring_char_ne_one", ["char_p"]]]}, {"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": [["mod", "theorem", "sl_non_abelian", ["lie_algebra", "special_linear"]]]}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["mod", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", []], ["add", "theorem", "of_ne", ["nonzero"]], ["del", "def", "of_ne", ["nonzero_comm_ring"]], ["del", "def", "of_ne", ["nonzero_comm_semiring"]], ["mod", "theorem", "one_ne_zero", []], ["mod", "theorem", "pred_ne_self", []], ["mod", "theorem", "succ_ne_self", []], ["mod", "theorem", "coe_ne_zero", ["units"]], ["del", "theorem", "ne_zero", ["units"]], ["mod", "theorem", "zero_ne_one", []]]}, {"oldPath": "src/analysis/special_functions/pow.lean", "newPath": "src/analysis/special_functions/pow.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["mod", "theorem", "to_matrix_injective", ["pequiv"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "total_degree_X", ["mv_polynomial"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "ne_zero", ["polynomial", "monic"]], ["add", "theorem", "of_polynomial_ne", ["polynomial", "nonzero"]], ["del", "def", "of_polynomial_ne", ["polynomial", "nonzero_comm_ring"]], ["del", "def", "of_polynomial_ne", ["polynomial", "nonzero_comm_semiring"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/init_/data/int/basic.lean", "newPath": "src/init_/data/int/basic.lean", "changes": []}, {"oldPath": "src/init_/data/nat/lemmas.lean", "newPath": "src/init_/data/nat/lemmas.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/lagrange.lean", "newPath": "src/linear_algebra/lagrange.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/fintype.lean", "newPath": "src/ring_theory/fintype.lean", "changes": [["mod", "theorem", "card_units_lt", []]]}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["mod", "theorem", "not_one_mem_ker", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "finite_of_linear_independent", []]]}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/prod.lean", "newPath": "src/ring_theory/prod.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1590785197, "sha": "b2f643e9", "message": "feat(dynamics/fixed_points): define `is_fixed_pt` (#2857)\nDefine `function.is_fixed_pt` and prove some basic properties.", "changes": [{"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": null, "newPath": "src/dynamics/fixed_points.lean", "changes": [["add", "theorem", "bij_on_fixed_pts_comp", ["function"]], ["add", "theorem", "inv_on_fixed_pts_comp", ["function", "commute"]], ["add", "theorem", "left_bij_on_fixed_pts_comp", ["function", "commute"]], ["add", "theorem", "right_bij_on_fixed_pts_comp", ["function", "commute"]], ["add", "def", "fixed_points", ["function"]], ["add", "theorem", "inv_on_fixed_pts_comp", ["function"]], ["add", "theorem", "left_of_comp", ["function", "is_fixed_pt"]], ["add", "theorem", "to_left_inverse", ["function", "is_fixed_pt"]], ["add", "def", "is_fixed_pt", ["function"]], ["add", "theorem", "is_fixed_pt_id", ["function"]], ["add", "theorem", "maps_to_fixed_pts_comp", ["function"]], ["add", "theorem", "mem_fixed_points", ["function"]], ["add", "theorem", "maps_to_fixed_pts", ["function", "semiconj"]]]}, {"oldPath": "src/logic/function/iterate.lean", "newPath": "src/logic/function/iterate.lean", "changes": [["add", "theorem", "comp_iterate", ["function", "commute"]], ["add", "theorem", "iterate_iterate_self", ["function", "commute"]], ["add", "theorem", "iterate_self", ["function", "commute"]], ["add", "theorem", "self_iterate", ["function", "commute"]], ["add", "theorem", "comp_iterate_pred_of_pos", ["function"]], ["add", "theorem", "iterate_pred_comp_of_pos", ["function"]]]}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": [["del", "def", "fixed_points", []]]}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["mod", "theorem", "dist_le_of_fixed_point", ["contracting_with"]], ["del", "theorem", "efixed_point_is_fixed'", ["contracting_with"]], ["del", "theorem", "efixed_point_is_fixed", ["contracting_with"]], ["add", "theorem", "efixed_point_is_fixed_pt'", ["contracting_with"]], ["add", "theorem", "efixed_point_is_fixed_pt", ["contracting_with"]], ["del", "theorem", "fixed_point_is_fixed", ["contracting_with"]], ["add", "theorem", "fixed_point_is_fixed_pt", ["contracting_with"]], ["mod", "theorem", "fixed_point_unique'", ["contracting_with"]], ["mod", "theorem", "fixed_point_unique", ["contracting_with"]], ["del", "theorem", "fixed_point_of_tendsto_iterate", []], ["add", "theorem", "is_fixed_pt_of_tendsto_iterate", []]]}]}, {"timestamp": 1590769444, "sha": "836184a8", "message": "feat(tactic/protect_proj): protect_proj attribute for structures (#2855)\nThis attribute protect the projections of a structure that is being defined. \nThere were some errors in Euclidean domain caused by `rw` using `euclidean_domain.mul_assoc` instead of `mul_assoc` because the `euclidean_domain` namespace was open. This fixes this problem, and makes the `group` and `ring` etc. namespaces more usable.", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/protected.lean", "changes": []}, {"oldPath": null, "newPath": "test/protec_proj.lean", "changes": [["add", "structure", "X", []], ["add", "structure", "foo", []]]}]}, {"timestamp": 1590769442, "sha": "77674a04", "message": "chore(category_theory): T50000 challenge (#2840)\nA lame effort at making something compile with `-T50000`. No actual speed improvement, just split up a definition into pieces.", "changes": [{"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["add", "def", "cones_equiv_counit_iso", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_inverse_obj", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_unit_iso", ["category_theory", "over", "construct_products"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}]}, {"timestamp": 1590769440, "sha": "07cdafe9", "message": "feat(tactic/with_local_reducibility): alter reducibility attributes locally (#2820)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/with_local_reducibility.lean", "changes": [["add", "def", "to_attribute", ["tactic", "decl_reducibility"]], ["add", "inductive", "decl_reducibility", ["tactic"]]]}, {"oldPath": null, "newPath": "test/with_local_reducibility.lean", "changes": [["add", "def", "wlr_irred", ["test"]], ["add", "def", "wlr_red", ["test"]], ["add", "def", "wlr_semired", ["test"]]]}]}, {"timestamp": 1590763715, "sha": "4a5799e1", "message": "feat(data/equiv/basic): subtype_prod_equiv_prod (#2717)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subtype_prod_equiv_prod", ["equiv"]]]}]}, {"timestamp": 1590735056, "sha": "b013b2d6", "message": "feat(ring_theory): define subsemirings (#2837)\n~~Depends on #2836,~~ needs a better module docstring.\nSome lemmas are missing, most notably `(subsemiring.closure s : set R) = add_submonoid.closure (submonoid.closure s)`.", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["del", "theorem", "closure_preimage_le", ["monoid_hom"]], ["add", "def", "cod_mrestrict", ["monoid_hom"]], ["del", "def", "cod_restrict", ["monoid_hom"]], ["add", "theorem", "coe_mrange_restrict", ["monoid_hom"]], ["del", "theorem", "coe_range_restrict", ["monoid_hom"]], ["add", "theorem", "mclosure_preimage_le", ["monoid_hom"]], ["add", "def", "mrange_restrict", ["monoid_hom"]], ["add", "def", "mrestrict", ["monoid_hom"]], ["add", "theorem", "mrestrict_apply", ["monoid_hom"]], ["del", "def", "range_restrict", ["monoid_hom"]], ["del", "def", "restrict", ["monoid_hom"]], ["del", "theorem", "restrict_apply", ["monoid_hom"]], ["del", "theorem", "restrict_eq", ["monoid_hom"]], ["add", "theorem", "coe_Sup_of_directed_on", ["submonoid"]], ["add", "theorem", "coe_supr_of_directed", ["submonoid"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/subsemiring.lean", "changes": [["add", "def", "subsemiring_congr", ["ring_equiv"]], ["add", "def", "cod_srestrict", ["ring_hom"]], ["add", "theorem", "coe_srange", ["ring_hom"]], ["add", "theorem", "coe_srange_restrict", ["ring_hom"]], ["add", "theorem", "eq_of_eq_on_sdense", ["ring_hom"]], ["add", "theorem", "eq_of_eq_on_stop", ["ring_hom"]], ["add", "theorem", "eq_on_sclosure", ["ring_hom"]], ["add", "def", "eq_slocus", ["ring_hom"]], ["add", "theorem", "map_sclosure", ["ring_hom"]], ["add", "theorem", "map_srange", ["ring_hom"]], ["add", "theorem", "mem_srange", ["ring_hom"]], ["add", "theorem", "sclosure_preimage_le", ["ring_hom"]], ["add", "def", "srange", ["ring_hom"]], ["add", "def", "srange_restrict", ["ring_hom"]], ["add", "theorem", "srange_top_iff_surjective", ["ring_hom"]], ["add", "theorem", "srange_top_of_surjective", ["ring_hom"]], ["add", "def", "srestrict", ["ring_hom"]], ["add", "theorem", "srestrict_apply", ["ring_hom"]], ["add", "theorem", "Inf_to_add_submonoid", ["subsemiring"]], ["add", "theorem", "Inf_to_submonoid", ["subsemiring"]], ["add", "theorem", "add_mem", ["subsemiring"]], ["add", "def", "closure", ["subsemiring"]], ["add", "theorem", "closure_Union", ["subsemiring"]], ["add", "theorem", "closure_empty", ["subsemiring"]], ["add", "theorem", "closure_eq", ["subsemiring"]], ["add", "theorem", "closure_eq_of_le", ["subsemiring"]], ["add", "theorem", "closure_induction", ["subsemiring"]], ["add", "theorem", "closure_le", ["subsemiring"]], ["add", "theorem", "closure_mono", ["subsemiring"]], ["add", "theorem", "closure_sUnion", ["subsemiring"]], ["add", "theorem", "closure_union", ["subsemiring"]], ["add", "theorem", "closure_univ", ["subsemiring"]], ["add", "theorem", "coe_Inf", ["subsemiring"]], ["add", "theorem", "coe_Sup_of_directed_on", ["subsemiring"]], ["add", "theorem", "coe_bot", ["subsemiring"]], ["add", "theorem", "coe_coe", ["subsemiring"]], ["add", "theorem", "coe_comap", ["subsemiring"]], ["add", "theorem", "coe_inf", ["subsemiring"]], ["add", "theorem", "coe_map", ["subsemiring"]], ["add", "theorem", "coe_mk'", ["subsemiring"]], ["add", "theorem", "coe_mul", ["subsemiring"]], ["add", "theorem", "coe_nat_mem", ["subsemiring"]], ["add", "theorem", "coe_one", ["subsemiring"]], ["add", "theorem", "coe_prod", ["subsemiring"]], ["add", "theorem", "coe_ssubset_coe", ["subsemiring"]], ["add", "theorem", "coe_subset_coe", ["subsemiring"]], ["add", "theorem", "coe_subtype", ["subsemiring"]], ["add", "theorem", "coe_supr_of_directed", ["subsemiring"]], ["add", "theorem", "coe_to_add_submonoid", ["subsemiring"]], ["add", "theorem", "coe_to_submonoid", ["subsemiring"]], ["add", "theorem", "coe_top", ["subsemiring"]], ["add", "def", "comap", ["subsemiring"]], ["add", "theorem", "comap_comap", ["subsemiring"]], ["add", "theorem", "comap_inf", ["subsemiring"]], ["add", "theorem", "comap_infi", ["subsemiring"]], ["add", "theorem", "comap_top", ["subsemiring"]], ["add", "theorem", "ext'", ["subsemiring"]], ["add", "theorem", "ext", ["subsemiring"]], ["add", "theorem", "gc_map_comap", ["subsemiring"]], ["add", "def", "inclusion", ["subsemiring"]], ["add", "theorem", "le_def", ["subsemiring"]], ["add", "theorem", "list_prod_mem", ["subsemiring"]], ["add", "theorem", "list_sum_mem", ["subsemiring"]], ["add", "def", "map", ["subsemiring"]], ["add", "theorem", "map_bot", ["subsemiring"]], ["add", "theorem", "map_le_iff_le_comap", ["subsemiring"]], ["add", "theorem", "map_map", ["subsemiring"]], ["add", "theorem", "map_sup", ["subsemiring"]], ["add", "theorem", "map_supr", ["subsemiring"]], ["add", "theorem", "mem_Inf", ["subsemiring"]], ["add", "theorem", "mem_Sup_of_directed_on", ["subsemiring"]], ["add", "theorem", "mem_bot", ["subsemiring"]], ["add", "theorem", "mem_closure", ["subsemiring"]], ["add", "theorem", "mem_coe", ["subsemiring"]], ["add", "theorem", "mem_comap", ["subsemiring"]], ["add", "theorem", "mem_inf", ["subsemiring"]], ["add", "theorem", "mem_map", ["subsemiring"]], ["add", "theorem", "mem_mk'", ["subsemiring"]], ["add", "theorem", "mem_prod", ["subsemiring"]], ["add", "theorem", "mem_supr_of_directed", ["subsemiring"]], ["add", "theorem", "mem_to_add_submonoid", ["subsemiring"]], ["add", "theorem", "mem_to_submonoid", ["subsemiring"]], ["add", "theorem", "mem_top", ["subsemiring"]], ["add", "theorem", "mk'_to_add_submonoid", ["subsemiring"]], ["add", "theorem", "mk'_to_submonoid", ["subsemiring"]], ["add", "theorem", "mul_mem", ["subsemiring"]], ["add", "theorem", "multiset_prod_mem", ["subsemiring"]], ["add", "theorem", "multiset_sum_mem", ["subsemiring"]], ["add", "theorem", "one_mem", ["subsemiring"]], ["add", "theorem", "pow_mem", ["subsemiring"]], ["add", "def", "prod", ["subsemiring"]], ["add", "theorem", "prod_bot_sup_bot_prod", ["subsemiring"]], ["add", "def", "prod_equiv", ["subsemiring"]], ["add", "theorem", "prod_mem", ["subsemiring"]], ["add", "theorem", "prod_mono", ["subsemiring"]], ["add", "theorem", "prod_mono_left", ["subsemiring"]], ["add", "theorem", "prod_mono_right", ["subsemiring"]], ["add", "theorem", "prod_top", ["subsemiring"]], ["add", "theorem", "range_fst", ["subsemiring"]], ["add", "theorem", "range_snd", ["subsemiring"]], ["add", "theorem", "smul_mem", ["subsemiring"]], ["add", "theorem", "srange_subtype", ["subsemiring"]], ["add", "theorem", "subset_closure", ["subsemiring"]], ["add", "def", "subtype", ["subsemiring"]], ["add", "theorem", "sum_mem", ["subsemiring"]], ["add", "theorem", "top_prod", ["subsemiring"]], ["add", "theorem", "top_prod_top", ["subsemiring"]], ["add", "theorem", "zero_mem", ["subsemiring"]], ["add", "structure", "subsemiring", []]]}]}, {"timestamp": 1590731828, "sha": "6c046c75", "message": "chore(data/setoid): split into `basic` and `partition` (#2853)\nThe `basic` part has slightly fewer dependencies and `partition` part\nis never used in `mathlib`.", "changes": [{"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid/basic.lean", "changes": [["del", "def", "classes", ["setoid"]], ["del", "theorem", "classes_eqv_classes", ["setoid"]], ["del", "theorem", "classes_inj", ["setoid"]], ["del", "theorem", "classes_mk_classes", ["setoid"]], ["mod", "def", "correspondence", ["setoid"]], ["del", "theorem", "empty_not_mem_classes", ["setoid"]], ["del", "theorem", "eq_eqv_class_of_mem", ["setoid"]], ["del", "theorem", "eq_iff_classes_eq", ["setoid"]], ["del", "theorem", "eq_of_mem_classes", ["setoid"]], ["del", "theorem", "eq_of_mem_eqv_class", ["setoid"]], ["del", "theorem", "eqv_class_mem", ["setoid"]], ["del", "theorem", "eqv_classes_disjoint", ["setoid"]], ["del", "theorem", "eqv_classes_of_disjoint_union", ["setoid"]], ["del", "theorem", "exists_of_mem_partition", ["setoid"]], ["del", "def", "is_partition", ["setoid"]], ["del", "theorem", "ker_apply_eq_preimage", ["setoid"]], ["add", "theorem", "ker_def", ["setoid"]], ["add", "theorem", "ker_iff_mem_preimage", ["setoid"]], ["add", "def", "lift_equiv", ["setoid"]], ["del", "theorem", "mem_classes", ["setoid"]], ["del", "def", "mk_classes", ["setoid"]], ["del", "theorem", "mk_classes_classes", ["setoid"]], ["del", "theorem", "nonempty_of_mem_partition", ["setoid"]], ["del", "def", "order_iso", ["setoid", "partition"]], ["del", "theorem", "rel_iff_exists_classes", ["setoid"]], ["del", "def", "setoid_of_disjoint_union", ["setoid"]]]}, {"oldPath": null, "newPath": "src/data/setoid/partition.lean", "changes": [["add", "def", "classes", ["setoid"]], ["add", "theorem", "classes_eqv_classes", ["setoid"]], ["add", "theorem", "classes_inj", ["setoid"]], ["add", "theorem", "classes_mk_classes", ["setoid"]], ["add", "theorem", "empty_not_mem_classes", ["setoid"]], ["add", "theorem", "eq_eqv_class_of_mem", ["setoid"]], ["add", "theorem", "eq_iff_classes_eq", ["setoid"]], ["add", "theorem", "eq_of_mem_classes", ["setoid"]], ["add", "theorem", "eq_of_mem_eqv_class", ["setoid"]], ["add", "theorem", "eqv_class_mem", ["setoid"]], ["add", "theorem", "eqv_classes_disjoint", ["setoid"]], ["add", "theorem", "eqv_classes_of_disjoint_union", ["setoid"]], ["add", "theorem", "exists_of_mem_partition", ["setoid"]], ["add", "def", "is_partition", ["setoid"]], ["add", "theorem", "mem_classes", ["setoid"]], ["add", "def", "mk_classes", ["setoid"]], ["add", "theorem", "mk_classes_classes", ["setoid"]], ["add", "theorem", "nonempty_of_mem_partition", ["setoid"]], ["add", "def", "order_iso", ["setoid", "partition"]], ["add", "theorem", "rel_iff_exists_classes", ["setoid"]], ["add", "def", "setoid_of_disjoint_union", ["setoid"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}]}, {"timestamp": 1590707408, "sha": "543ae52c", "message": "feat(analysis/normed_space/add_torsor): normed_add_torsor (#2814)\nDefine the metric space structure on torsors of additive normed group\nactions. The motivating case is Euclidean affine spaces.\nSee\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Some.20olympiad.20formalisations\nfor the discussion leading to this particular handling of the\ndistance.\nNote: I'm not sure what the right way is to address the\ndangerous_instance linter error \"The following arguments become\nmetavariables. argument 1: (V : Type u_1)\".", "changes": [{"oldPath": "src/algebra/add_torsor.lean", "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_eq_add", []], ["add", "theorem", "vsub_eq_sub", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/add_torsor.lean", "changes": [["add", "theorem", "dist_eq_norm", ["add_torsor"]], ["add", "def", "metric_space_of_normed_group_of_add_torsor", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_eq_zero", []]]}]}, {"timestamp": 1590672369, "sha": "e9ba32d1", "message": "chore(scripts): update nolints.txt (#2849)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590666894, "sha": "ca95726e", "message": "feat(algebra/free) additive versions, docs. (#2755)\nhttps://github.com/leanprover-community/mathlib/issues/930", "changes": [{"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": [["add", "inductive", "r", ["add_magma", "free_add_semigroup"]], ["add", "def", "length", ["free_add_magma"]], ["add", "def", "lift", ["free_add_magma"]], ["add", "def", "map", ["free_add_magma"]], ["add", "inductive", "free_add_magma", []], ["add", "def", "lift'", ["free_add_semigroup"]], ["mod", "def", "length", ["free_magma"]], ["mod", "def", "lift", ["free_magma"]], ["mod", "theorem", "lift_mul", ["free_magma"]], ["mod", "theorem", "lift_of", ["free_magma"]], ["mod", "def", "map", ["free_magma"]], ["mod", "theorem", "map_mul'", ["free_magma"]], ["mod", "theorem", "map_mul", ["free_magma"]], ["mod", "theorem", "map_of", ["free_magma"]], ["mod", "theorem", "map_pure", ["free_magma"]], ["mod", "theorem", "mul_bind", ["free_magma"]], ["add", "theorem", "mul_eq", ["free_magma"]], ["mod", "theorem", "mul_map_seq", ["free_magma"]], ["mod", "theorem", "mul_seq", ["free_magma"]], ["mod", "theorem", "pure_bind", ["free_magma"]], ["mod", "theorem", "pure_seq", ["free_magma"]], ["add", "def", "rec_on'", ["free_magma"]], ["del", "def", "repr'", ["free_magma"]], ["mod", "theorem", "traverse_eq", ["free_magma"]], ["mod", "theorem", "traverse_mul'", ["free_magma"]], ["mod", "theorem", "traverse_mul", ["free_magma"]], ["mod", "theorem", "traverse_pure'", ["free_magma"]], ["mod", "theorem", "traverse_pure", ["free_magma"]], ["mod", "def", "lift'", ["free_semigroup"]], ["mod", "theorem", "lift_mul", ["free_semigroup"]], ["mod", "theorem", "lift_of", ["free_semigroup"]], ["mod", "theorem", "lift_of_mul", ["free_semigroup"]], ["mod", "theorem", "map_mul'", ["free_semigroup"]], ["mod", "theorem", "map_mul", ["free_semigroup"]], ["mod", "theorem", "map_of", ["free_semigroup"]], ["mod", "theorem", "map_pure", ["free_semigroup"]], ["mod", "theorem", "mul_bind", ["free_semigroup"]], ["mod", "theorem", "mul_map_seq", ["free_semigroup"]], ["mod", "theorem", "mul_seq", ["free_semigroup"]], ["mod", "theorem", "pure_bind", ["free_semigroup"]], ["mod", "theorem", "pure_seq", ["free_semigroup"]], ["add", "def", "rec_on'", ["free_semigroup"]], ["del", "def", "traverse'", ["free_semigroup"]], ["mod", "theorem", "traverse_eq", ["free_semigroup"]], ["mod", "theorem", "traverse_mul'", ["free_semigroup"]], ["mod", "theorem", "traverse_mul", ["free_semigroup"]], ["mod", "theorem", "traverse_pure'", ["free_semigroup"]], ["mod", "theorem", "traverse_pure", ["free_semigroup"]], ["mod", "theorem", "free_semigroup_free_magma_mul", []], ["mod", "theorem", "lift_mul", ["magma", "free_semigroup"]], ["mod", "theorem", "lift_of", ["magma", "free_semigroup"]], ["mod", "theorem", "map_mul", ["magma", "free_semigroup"]], ["mod", "theorem", "map_of", ["magma", "free_semigroup"]], ["mod", "theorem", "of_mul_assoc", ["magma", "free_semigroup"]], ["mod", "inductive", "r", ["magma", "free_semigroup"]]]}]}, {"timestamp": 1590655043, "sha": "cbf4740a", "message": "refactor(data/equiv/local_equiv): use dot notation for `eq_on_source` (#2830)\nAlso reuse more lemmas from `data/set/function`.", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["del", "theorem", "apply_eq_of_eq_on_source", ["local_equiv"]], ["add", "theorem", "eq_on", ["local_equiv", "eq_on_source"]], ["add", "theorem", "restr", ["local_equiv", "eq_on_source"]], ["add", "theorem", "source_eq", ["local_equiv", "eq_on_source"]], ["add", "theorem", "source_inter_preimage_eq", ["local_equiv", "eq_on_source"]], ["add", "theorem", "symm'", ["local_equiv", "eq_on_source"]], ["add", "theorem", "symm_eq_on", ["local_equiv", "eq_on_source"]], ["add", "theorem", "target_eq", ["local_equiv", "eq_on_source"]], ["add", "theorem", "trans'", ["local_equiv", "eq_on_source"]], ["del", "theorem", "eq_on_source_preimage", ["local_equiv"]], ["del", "theorem", "eq_on_source_restr", ["local_equiv"]], ["del", "theorem", "eq_on_source_symm", ["local_equiv"]], ["del", "theorem", "eq_on_source_trans", ["local_equiv"]], ["del", "theorem", "inv_apply_eq_of_eq_on_source", ["local_equiv"]], ["del", "theorem", "source_eq_of_eq_on_source", ["local_equiv"]], ["add", "theorem", "symm_maps_to", ["local_equiv"]], ["del", "theorem", "target_eq_of_eq_on_source", ["local_equiv"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["del", "theorem", "eq_on_of_left_inv_of_right_inv", ["set"]], ["add", "theorem", "eq_on_of_left_inv_on_of_right_inv_on", ["set"]]]}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["del", "theorem", "apply_eq_of_eq_on_source", ["local_homeomorph"]], ["add", "theorem", "eq_on", ["local_homeomorph", "eq_on_source"]], ["add", "theorem", "restr", ["local_homeomorph", "eq_on_source"]], ["add", "theorem", "source_eq", ["local_homeomorph", "eq_on_source"]], ["add", "theorem", "symm'", ["local_homeomorph", "eq_on_source"]], ["add", "theorem", "symm_eq_on_target", ["local_homeomorph", "eq_on_source"]], ["add", "theorem", "target_eq", ["local_homeomorph", "eq_on_source"]], ["add", "theorem", "trans'", ["local_homeomorph", "eq_on_source"]], ["del", "theorem", "eq_on_source_restr", ["local_homeomorph"]], ["del", "theorem", "eq_on_source_symm", ["local_homeomorph"]], ["del", "theorem", "eq_on_source_trans", ["local_homeomorph"]], ["del", "theorem", "inv_apply_eq_of_eq_on_source", ["local_homeomorph"]], ["del", "theorem", "source_eq_of_eq_on_source", ["local_homeomorph"]], ["del", "theorem", "target_eq_of_eq_on_source", ["local_homeomorph"]]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}]}, {"timestamp": 1590655041, "sha": "28dc2ed5", "message": "fix(tactic/suggest): normalize synonyms uniformly in goal and lemma (#2829)\nThis change is intended to make `library_search` and `suggest` a bit more robust in unfolding the types of the goal and lemma in order to determine which lemmas it will try to apply.\nBefore, there were two ad-hoc systems to map a head symbol to the name(s) that it should match, now there is only one ad-hoc function that does so. As a consequence, `library_search` should be able to use a lemma with return type `a > b` to close the goal `b < a`, and use `lemma foo : p → false` to close the goal `¬ p`.\n(The `>` normalization shouldn't \"really\" be needed if we all strictly followed the `gt_or_ge` linter but we don't and the failure has already caused confusion.)\n[Discussion on Zulip starts here](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/How.20to.20get.20familiar.20enough.20with.20Mathlib.20to.20use.20it/near/198746479)", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": [["add", "inductive", "P", ["test", "library_search"]], ["add", "theorem", "lemma_with_false_in_head", ["test", "library_search"]], ["add", "theorem", "lemma_with_gt_in_head", ["test", "library_search"]]]}]}, {"timestamp": 1590652225, "sha": "005763ec", "message": "feat(linear_algebra/lagrange): Lagrange interpolation (#2764)\nFixes #2600.", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "degree_sub_le", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/lagrange.lean", "changes": [["add", "def", "basis", ["lagrange"]], ["add", "theorem", "basis_empty", ["lagrange"]], ["add", "theorem", "degree_interpolate_lt", ["lagrange"]], ["add", "theorem", "eq_interpolate", ["lagrange"]], ["add", "theorem", "eq_of_eval_eq", ["lagrange"]], ["add", "theorem", "eq_zero_of_eval_eq_zero", ["lagrange"]], ["add", "theorem", "eval_basis", ["lagrange"]], ["add", "theorem", "eval_basis_ne", ["lagrange"]], ["add", "theorem", "eval_basis_self", ["lagrange"]], ["add", "theorem", "eval_interpolate", ["lagrange"]], ["add", "def", "fun_equiv_degree_lt", ["lagrange"]], ["add", "def", "interpolate", ["lagrange"]], ["add", "theorem", "interpolate_add", ["lagrange"]], ["add", "theorem", "interpolate_empty", ["lagrange"]], ["add", "theorem", "interpolate_neg", ["lagrange"]], ["add", "theorem", "interpolate_smul", ["lagrange"]], ["add", "theorem", "interpolate_sub", ["lagrange"]], ["add", "theorem", "interpolate_zero", ["lagrange"]], ["add", "def", "linterpolate", ["lagrange"]], ["add", "theorem", "nat_degree_basis", ["lagrange"]]]}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["mod", "theorem", "degree_le_mono", ["polynomial"]], ["add", "def", "degree_lt", ["polynomial"]], ["add", "theorem", "degree_lt_eq_span_X_pow", ["polynomial"]], ["add", "theorem", "degree_lt_mono", ["polynomial"]], ["add", "theorem", "mem_degree_lt", ["polynomial"]]]}]}, {"timestamp": 1590652222, "sha": "fa371f7b", "message": "feat(linear_algebra/bilinear_form): introduce adjoints of linear maps (#2746)\nWe also use this to define the Lie algebra structure on skew-adjoint\nendomorphisms / matrices. The motivation is to enable us to define the\nclassical Lie algebras.", "changes": [{"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "is_skew_adjoint_bracket", ["bilin_form"]], ["add", "def", "skew_adjoint_lie_subalgebra", ["bilin_form"]], ["add", "def", "skew_adjoint_matrices_lie_embedding", ["bilin_form"]], ["add", "def", "skew_adjoint_matrices_lie_subalgebra", ["bilin_form"]], ["add", "def", "range", ["lie_algebra", "morphism"]], ["add", "def", "lie_equiv_matrix'", []], ["add", "def", "incl", ["lie_subalgebra"]], ["mod", "def", "lie_algebra", ["matrix"]], ["mod", "def", "lie_ring", ["matrix"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "add", ["bilin_form", "is_adjoint_pair"]], ["add", "theorem", "comp", ["bilin_form", "is_adjoint_pair"]], ["add", "theorem", "eq", ["bilin_form", "is_adjoint_pair"]], ["add", "theorem", "mul", ["bilin_form", "is_adjoint_pair"]], ["add", "theorem", "smul", ["bilin_form", "is_adjoint_pair"]], ["add", "theorem", "sub", ["bilin_form", "is_adjoint_pair"]], ["add", "def", "is_adjoint_pair", ["bilin_form"]], ["add", "theorem", "is_adjoint_pair_id", ["bilin_form"]], ["add", "theorem", "is_adjoint_pair_iff_comp_left_eq_comp_right", ["bilin_form"]], ["add", "theorem", "is_adjoint_pair_zero", ["bilin_form"]], ["add", "def", "is_pair_self_adjoint", ["bilin_form"]], ["add", "def", "is_pair_self_adjoint_submodule", ["bilin_form"]], ["add", "def", "is_self_adjoint", ["bilin_form"]], ["add", "def", "is_skew_adjoint", ["bilin_form"]], ["add", "theorem", "is_skew_adjoint_iff_neg_self_adjoint", ["bilin_form"]], ["add", "theorem", "mem_self_adjoint_submodule", ["bilin_form"]], ["add", "theorem", "mem_skew_adjoint_submodule", ["bilin_form"]], ["add", "theorem", "neg_apply", ["bilin_form"]], ["add", "def", "self_adjoint_submodule", ["bilin_form"]], ["add", "def", "skew_adjoint_submodule", ["bilin_form"]], ["add", "def", "is_adjoint_pair", ["matrix"]], ["add", "def", "is_self_adjoint", ["matrix"]], ["add", "def", "is_skew_adjoint", ["matrix"]], ["add", "theorem", "matrix_is_adjoint_pair_bilin_form", []], ["add", "theorem", "mem_pair_self_adjoint_matrices_submodule", []], ["add", "def", "pair_self_adjoint_matrices_linear_embedding", []], ["add", "theorem", "pair_self_adjoint_matrices_linear_embedding_apply", []], ["add", "theorem", "pair_self_adjoint_matrices_linear_embedding_injective", []], ["add", "def", "pair_self_adjoint_matrices_submodule", []], ["add", "def", "self_adjoint_matrices_submodule", []], ["add", "def", "skew_adjoint_matrices_submodule", []], ["add", "theorem", "to_bilin_form_to_matrix", []], ["add", "theorem", "to_matrix_to_bilin_form", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "comp_to_matrix_mul", ["matrix"]], ["add", "theorem", "to_lin_neg", ["matrix"]]]}]}, {"timestamp": 1590649327, "sha": "315ba3e3", "message": "feat(category_theory): show an epi regular mono is an iso (#2781)\na really minor proof to show that a regular mono which is epi is an iso", "changes": [{"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["add", "def", "is_iso_of_regular_epi_of_mono", ["category_theory"]], ["add", "def", "is_iso_of_regular_mono_of_epi", ["category_theory"]]]}]}, {"timestamp": 1590615017, "sha": "efb4e959", "message": "refactor(*iterate*): move to `function`; renamings (#2832)\n* move lemmas about `iterate` from `data.nat.basic` to `logic.function.iterate`;\n* move lemmas like `nat.iterate_succ` to `function` namespace;\n* rename some lemmas:\n - `iterate₀` to `iterate_fixed`,\n - `iterate₁` to `semiconj.iterate_right`, see also `commute.iterate_left` and `commute.iterate_right`;\n - `iterate₂` to `semiconj₂.iterate`;\n - `iterate_cancel` to `left_inverse.iterate` and `right_inverse.iterate`;\n* move lemmas `*_hom.iterate_map_*` to `algebra/iterate_hom`.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["del", "theorem", "iterate_map_smul", ["add_monoid_hom"]], ["del", "theorem", "iterate_map_pow", ["monoid_hom"]], ["del", "theorem", "coe_pow", ["ring_hom"]], ["del", "theorem", "iterate_map_pow", ["ring_hom"]], ["del", "theorem", "iterate_map_smul", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/algebra/iterate_hom.lean", "changes": [["add", "theorem", "iterate_map_gsmul", ["add_monoid_hom"]], ["add", "theorem", "iterate_map_smul", ["add_monoid_hom"]], ["add", "theorem", "iterate_map_sub", ["add_monoid_hom"]], ["add", "theorem", "iterate_map_gpow", ["monoid_hom"]], ["add", "theorem", "iterate_map_inv", ["monoid_hom"]], ["add", "theorem", "iterate_map_mul", ["monoid_hom"]], ["add", "theorem", "iterate_map_one", ["monoid_hom"]], ["add", "theorem", "iterate_map_pow", ["monoid_hom"]], ["add", "theorem", "coe_pow", ["ring_hom"]], ["add", "theorem", "iterate_map_add", ["ring_hom"]], ["add", "theorem", "iterate_map_gsmul", ["ring_hom"]], ["add", "theorem", "iterate_map_mul", ["ring_hom"]], ["add", "theorem", "iterate_map_neg", ["ring_hom"]], ["add", "theorem", "iterate_map_one", ["ring_hom"]], ["add", "theorem", "iterate_map_pow", ["ring_hom"]], ["add", "theorem", "iterate_map_smul", ["ring_hom"]], ["add", "theorem", "iterate_map_sub", ["ring_hom"]], ["add", "theorem", "iterate_map_zero", ["ring_hom"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": [["mod", "theorem", "iterated_deriv_eq_iterate", []]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "iterate", ["function", "bijective"]], ["del", "theorem", "iterate", ["function", "injective"]], ["del", "theorem", "iterate", ["function", "surjective"]], ["del", "theorem", "iterate_map_inv", ["monoid_hom"]], ["del", "theorem", "iterate_map_mul", ["monoid_hom"]], ["del", "theorem", "iterate_map_one", ["monoid_hom"]], ["del", "theorem", "iterate_map_sub", ["monoid_hom"]], ["del", "theorem", "iterate_add", ["nat"]], ["del", "theorem", "iterate_add_apply", ["nat"]], ["del", "theorem", "iterate_cancel", ["nat"]], ["del", "theorem", "iterate_ind", ["nat"]], ["del", "theorem", "iterate_mul", ["nat"]], ["del", "theorem", "iterate_one", ["nat"]], ["del", "theorem", "iterate_succ'", ["nat"]], ["del", "theorem", "iterate_succ", ["nat"]], ["del", "theorem", "iterate_succ_apply'", ["nat"]], ["del", "theorem", "iterate_succ_apply", ["nat"]], ["del", "theorem", "iterate_zero", ["nat"]], ["del", "theorem", "iterate_zero_apply", ["nat"]], ["del", "theorem", "iterate₀", ["nat"]], ["del", "theorem", "iterate₁", ["nat"]], ["del", "theorem", "iterate₂", ["nat"]], ["del", "theorem", "iterate_map_add", ["ring_hom"]], ["del", "theorem", "iterate_map_mul", ["ring_hom"]], ["del", "theorem", "iterate_map_neg", ["ring_hom"]], ["del", "theorem", "iterate_map_one", ["ring_hom"]], ["del", "theorem", "iterate_map_sub", ["ring_hom"]], ["del", "theorem", "iterate_map_zero", ["ring_hom"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["add", "theorem", "left_inverse_pth_root_frobenius", []]]}, {"oldPath": null, "newPath": "src/logic/function/iterate.lean", "changes": [["add", "theorem", "iterate", ["function", "bijective"]], ["add", "theorem", "iterate_eq_of_map_eq", ["function", "commute"]], ["add", "theorem", "iterate_iterate", ["function", "commute"]], ["add", "theorem", "iterate_left", ["function", "commute"]], ["add", "theorem", "iterate_right", ["function", "commute"]], ["add", "theorem", "iterate", ["function", "injective"]], ["add", "theorem", "iterate_add", ["function"]], ["add", "theorem", "iterate_add_apply", ["function"]], ["add", "theorem", "iterate_fixed", ["function"]], ["add", "theorem", "iterate_id", ["function"]], ["add", "theorem", "iterate_mul", ["function"]], ["add", "theorem", "iterate_one", ["function"]], ["add", "theorem", "iterate_succ'", ["function"]], ["add", "theorem", "iterate_succ", ["function"]], ["add", "theorem", "iterate_succ_apply'", ["function"]], ["add", "theorem", "iterate_succ_apply", ["function"]], ["add", "theorem", "iterate_zero", ["function"]], ["add", "theorem", "iterate_zero_apply", ["function"]], ["add", "theorem", "iterate", ["function", "left_inverse"]], ["add", "theorem", "iterate", ["function", "right_inverse"]], ["add", "theorem", "iterate_left", ["function", "semiconj"]], ["add", "theorem", "iterate_right", ["function", "semiconj"]], ["add", "theorem", "iterate", ["function", "semiconj₂"]], ["add", "theorem", "iterate", ["function", "surjective"]]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "eq_or_principal", ["initial_seg"]], ["mod", "theorem", "lift_lift", ["ordinal"]], ["mod", "theorem", "cod_restrict_apply", ["principal_seg"]], ["mod", "theorem", "cod_restrict_top", ["principal_seg"]], ["mod", "theorem", "init_iff", ["principal_seg"]], ["mod", "theorem", "trans_apply", ["principal_seg"]], ["mod", "theorem", "trans_top", ["principal_seg"]]]}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1590605820, "sha": "19883648", "message": "feat(src/ring_theory): in a PID, all fractional ideals are invertible (#2826)\nThis would show that all PIDs are Dedekind domains, once we have a definition of Dedekind domain (we could define it right now, but it would depend on the choice of field of fractions).\nIn `localization.lean`, I added a few small lemmas on localizations (`localization.exists_integer_multiple` and `fraction_map.to_map_eq_zero_iff`). @101damnations, are these additions compatible with your branches? I'm happy to change them if not.", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "coe_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "eq_span_singleton_of_principal", ["ring", "fractional_ideal"]], ["add", "theorem", "exists_eq_span_singleton_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "invertible_of_principal", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_coe", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_singleton_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_inv_cancel_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "one_mem_one", ["ring", "fractional_ideal"]], ["add", "theorem", "span_fractional_iff", ["ring", "fractional_ideal"]], ["add", "def", "span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "span_singleton_fractional", ["ring", "fractional_ideal"]], ["add", "theorem", "span_singleton_mul_span_singleton", ["ring", "fractional_ideal"]], ["add", "theorem", "span_singleton_one", ["ring", "fractional_ideal"]], ["add", "theorem", "span_singleton_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "val_coe_ideal", ["ring", "fractional_ideal"]], ["add", "theorem", "val_inv_of_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "val_one", ["ring", "fractional_ideal"]], ["add", "theorem", "val_span_singleton", ["ring", "fractional_ideal"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "to_map_eq_zero_iff", ["fraction_map"]], ["add", "theorem", "exists_integer_multiple'", ["localization"]], ["add", "theorem", "exists_integer_multiple", ["localization"]], ["add", "theorem", "lin_coe_apply", ["localization"]]]}]}, {"timestamp": 1590586919, "sha": "c812ebeb", "message": "feat(category_theory/abelian): abelian categories (#2817)\n~~Depends on #2779.~~ Closes #2178. I will give instances for `AddCommGroup` and `Module`, but since this PR is large already, I'll wait until the next PR with that.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/abelian/basic.lean", "changes": [["add", "def", "biproduct_to_pushout", ["category_theory", "abelian", "biproduct_to_pushout_is_cokernel"]], ["add", "def", "biproduct_to_pushout_cofork", ["category_theory", "abelian", "biproduct_to_pushout_is_cokernel"]], ["add", "def", "is_colimit_biproduct_to_pushout", ["category_theory", "abelian", "biproduct_to_pushout_is_cokernel"]], ["add", "def", "coimage_iso_image", ["category_theory", "abelian"]], ["add", "def", "coimage_strong_epi_mono_factorisation", ["category_theory", "abelian"]], ["add", "def", "epi_is_cokernel_of_kernel", ["category_theory", "abelian"]], ["add", "theorem", "full_image_factorisation", ["category_theory", "abelian"]], ["add", "def", "has_pullbacks", ["category_theory", "abelian"]], ["add", "def", "has_pushouts", ["category_theory", "abelian"]], ["add", "theorem", "image_eq_image", ["category_theory", "abelian"]], ["add", "def", "image_strong_epi_mono_factorisation", ["category_theory", "abelian"]], ["add", "def", "is_iso_of_mono_of_epi", ["category_theory", "abelian"]], ["add", "def", "mono_is_kernel_of_cokernel", ["category_theory", "abelian"]], ["add", "def", "is_limit_pullback_to_biproduct", ["category_theory", "abelian", "pullback_to_biproduct_is_kernel"]], ["add", "def", "pullback_to_biproduct", ["category_theory", "abelian", "pullback_to_biproduct_is_kernel"]], ["add", "def", "pullback_to_biproduct_fork", ["category_theory", "abelian", "pullback_to_biproduct_is_kernel"]], ["add", "def", "strong_epi_of_epi", ["category_theory", "abelian"]]]}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "theorem", "hom_ext'", ["category_theory", "limits", "biprod"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "biprod"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "π_eq_app_one", ["category_theory", "limits", "cofork"]], ["add", "theorem", "ι_eq_app_zero", ["category_theory", "limits", "fork"]]]}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": [["add", "def", "is_iso_of_mono_of_strong_epi", ["category_theory"]], ["del", "def", "mono_strong_epi_is_iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/preadditive.lean", "newPath": "src/category_theory/preadditive.lean", "changes": [["mod", "theorem", "comp_neg", ["category_theory", "preadditive"]], ["mod", "theorem", "comp_sub", ["category_theory", "preadditive"]], ["mod", "theorem", "neg_comp", ["category_theory", "preadditive"]], ["mod", "theorem", "neg_comp_neg", ["category_theory", "preadditive"]], ["mod", "theorem", "sub_comp", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1590581476, "sha": "2deb6b46", "message": "feat(algebra/continued_fractions): add computation definitions and basic translation lemmas (#2797)\n### What\n- add definitions of the computation of a continued fraction for a given value (in a given floor field)\n- add very basic, mostly technical lemmas to convert between the different structures used by the computation\n### Why\n- I want to be able to compute the continued fraction of a value. I next will add termination, approximation, and correctness lemmas for the definitions in this commit (I already have them lying around on my PC for ages :cold_sweat: )\n- The technical lemmas are needed for the next bunch of commits.\n### How\n- Follow the straightforward approach as described, for example, on [Wikipedia](https://en.wikipedia.org/wiki/Continued_fraction#Calculating_continued_fraction_representations)", "changes": [{"oldPath": null, "newPath": "src/algebra/continued_fractions/computation/basic.lean", "changes": [["add", "theorem", "coe_to_int_fract_pair", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "stream_is_seq", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "structure", "int_fract_pair", ["generalized_continued_fraction"]]]}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/computation/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/computation/translations.lean", "changes": [["add", "theorem", "nth_seq1_eq_succ_nth_stream", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "obtain_succ_nth_stream_of_fr_zero", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "obtain_succ_nth_stream_of_gcf_of_nth_eq_some", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "seq1_fst_eq_of", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "stream_eq_none_of_fr_eq_zero", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "succ_nth_stream_eq_none_iff", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "succ_nth_stream_eq_some_iff", ["generalized_continued_fraction", "int_fract_pair"]], ["add", "theorem", "nth_of_eq_some_of_nth_int_fract_pair_stream_fr_ne_zero", ["generalized_continued_fraction"]], ["add", "theorem", "nth_of_eq_some_of_succ_nth_int_fract_pair_stream", ["generalized_continued_fraction"]], ["add", "theorem", "of_h_eq_floor", ["generalized_continued_fraction"]], ["add", "theorem", "of_h_eq_int_fract_pair_seq1_fst_b", ["generalized_continued_fraction"]], ["add", "theorem", "of_terminated_at_iff_int_fract_pair_seq1_terminated_at", ["generalized_continued_fraction"]], ["add", "theorem", "of_terminated_at_n_iff_succ_nth_int_fract_pair_stream_eq_none", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/default.lean", "newPath": "src/algebra/continued_fractions/default.lean", "changes": []}]}, {"timestamp": 1590581474, "sha": "798c61ba", "message": "feat(data/nat/prime): eq_prime_pow_of_dvd_least_prime_pow (#2791)\nProves\n```lean\nlemma eq_prime_pow_of_dvd_least_prime_pow\n (a p k : ℕ) (pp : prime p) (h₁ : ¬(a ∣ p^k)) (h₂ : a ∣ p^(k+1)) :\n a = p^(k+1)\n```", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "pow_dvd_pow_iff_le_right'", ["nat"]], ["add", "theorem", "pow_dvd_pow_iff_le_right", ["nat"]], ["add", "theorem", "pow_dvd_pow_iff_pow_le_pow", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "eq_prime_pow_of_dvd_least_prime_pow", ["nat"]]]}]}, {"timestamp": 1590581472, "sha": "85f08ec8", "message": "feat(CI): add -T100000 to the build step in CI (#2276)\nThis PR adds `-T100000` to CI. This is the default timeout setting in the VS Code extension and emacs.\nWith some exceptions, noted with `FIXME` comments mentioning `-T50000`, the library now compiles with `-T50000`:\n- [ ] `has_sum.has_sum_ne_zero` in `src/topology/algebra/infinite_sum.lean`, where I don't really understand why it is slow.\n- [ ] `exists_norm_eq_infi_of_complete_convex` in `src/analysis/normed_space/real_inner_product.lean`, which has a giant proof which should be rewritten in several steps.\n- [ ] `tangent_bundle_core.coord_change_comp` in `src/geometry/manifold/basic_smooth_bundle.lean`.\n- [ ] `change_origin_radius` in `src/analysis/analytic/basic.lean`\nThere are 3 `def`s related to category theory which also don't compile:\n- [ ] `adj₁` in `src/topology/category/Top/adjunctions.lean`\n- [x] `cones_equiv_inverse` in `src/category_theory/limits/over.lean` (addressed in #2840)\n- [ ] `prod_functor` in `src/category_theory/limits/shapes/binary_products.lean`\nThis proof no longer causes problems with `-T50000`, but it should still be broken up at some point.\n- [ ] `simple_func_sequence_tendsto` in `src/measure_theory/simple_func_dense.lean`, which has a giant proof which should be rewritten in several steps. ~~This one is really bad, and doesn't even compile with `-T100000`.~~ \n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/-T50000.20challenge).", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}]}, {"timestamp": 1590578675, "sha": "7c5eab3c", "message": "chore(scripts): update nolints.txt (#2841)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590569847, "sha": "a7063ecc", "message": "feat(ring_theory/prod): ring homs to/from `R × S` (#2836)\n* move some instances from `algebra/pi_instances`;\n* add `prod.comm_semiring`;\n* define `ring_hom.fst`, `ring_hom.snd`, `ring_hom.prod`, and\n `ring_hom.prod_map`.", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["mod", "theorem", "coe_prod_map", ["monoid_hom"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/prod.lean", "changes": [["add", "theorem", "coe_fst", ["ring_hom"]], ["add", "theorem", "coe_prod_map", ["ring_hom"]], ["add", "theorem", "coe_snd", ["ring_hom"]], ["add", "def", "fst", ["ring_hom"]], ["add", "theorem", "fst_comp_prod", ["ring_hom"]], ["add", "theorem", "prod_apply", ["ring_hom"]], ["add", "theorem", "prod_comp_prod_map", ["ring_hom"]], ["add", "def", "prod_map", ["ring_hom"]], ["add", "theorem", "prod_map_def", ["ring_hom"]], ["add", "theorem", "prod_unique", ["ring_hom"]], ["add", "def", "snd", ["ring_hom"]], ["add", "theorem", "snd_comp_prod", ["ring_hom"]]]}]}, {"timestamp": 1590569845, "sha": "6ee3a47e", "message": "chore(data/equiv/basic): simplify some defs, add `coe` lemmas (#2835)\nUse functions like `prod.map`, `curry`, `uncurry`, `sum.elim`, `sum.map` to define equivalences.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "apply_symm_apply", ["equiv"]], ["add", "theorem", "coe_prod_comm", ["equiv"]], ["add", "theorem", "coe_prod_congr", ["equiv"]], ["add", "theorem", "coe_refl", ["equiv"]], ["add", "theorem", "coe_trans", ["equiv"]], ["mod", "def", "empty_prod", ["equiv"]], ["mod", "theorem", "of_bijective_to_fun", ["equiv"]], ["mod", "def", "pempty_prod", ["equiv"]], ["add", "theorem", "prod_assoc_sym_apply", ["equiv"]], ["mod", "def", "prod_comm", ["equiv"]], ["del", "theorem", "prod_comm_apply", ["equiv"]], ["add", "theorem", "prod_comm_symm", ["equiv"]], ["mod", "def", "prod_congr", ["equiv"]], ["del", "theorem", "prod_congr_apply", ["equiv"]], ["add", "theorem", "prod_congr_symm", ["equiv"]], ["mod", "def", "prod_empty", ["equiv"]], ["mod", "def", "prod_pempty", ["equiv"]], ["mod", "def", "prod_punit", ["equiv"]], ["mod", "def", "psum_equiv_sum", ["equiv"]], ["mod", "def", "punit_prod", ["equiv"]], ["mod", "theorem", "punit_prod_apply", ["equiv"]], ["mod", "theorem", "refl_apply", ["equiv"]], ["add", "theorem", "self_comp_symm", ["equiv"]], ["mod", "def", "sigma_congr", ["equiv"]], ["mod", "def", "sigma_congr_left'", ["equiv"]], ["add", "theorem", "sum_comm_apply", ["equiv"]], ["del", "theorem", "sum_comm_apply_inl", ["equiv"]], ["del", "theorem", "sum_comm_apply_inr", ["equiv"]], ["mod", "theorem", "sum_comm_symm", ["equiv"]], ["mod", "def", "sum_congr", ["equiv"]], ["add", "theorem", "sum_congr_apply", ["equiv"]], ["del", "theorem", "sum_congr_apply_inl", ["equiv"]], ["del", "theorem", "sum_congr_apply_inr", ["equiv"]], ["mod", "theorem", "sum_congr_symm", ["equiv"]], ["mod", "def", "sum_empty", ["equiv"]], ["mod", "def", "sum_pempty", ["equiv"]], ["mod", "theorem", "symm_apply_apply", ["equiv"]], ["add", "theorem", "symm_comp_self", ["equiv"]], ["mod", "theorem", "trans_apply", ["equiv"]]]}, {"oldPath": "src/data/equiv/functor.lean", "newPath": "src/data/equiv/functor.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["add", "theorem", "map_comp_map", ["sum"]], ["add", "theorem", "map_id_id", ["sum"]], ["add", "theorem", "map_inl", ["sum"]], ["add", "theorem", "map_inr", ["sum"]], ["add", "theorem", "map_map", ["sum"]]]}]}, {"timestamp": 1590569843, "sha": "2a48225a", "message": "feat(computability/tm_to_partrec): partrec functions are TM-computable (#2792)\nA construction of a Turing machine that can evaluate any partial recursive function. This PR contains the bulk of the work but the end to end theorem (which asserts that any `computable` function can be evaluated by a Turing machine) has not yet been stated.", "changes": [{"oldPath": null, "newPath": "src/computability/tm_to_partrec.lean", "changes": [["add", "def", "elim", ["turing", "partrec_to_TM2", "K'"]], ["add", "theorem", "elim_update_aux", ["turing", "partrec_to_TM2", "K'"]], ["add", "theorem", "elim_update_main", ["turing", "partrec_to_TM2", "K'"]], ["add", "theorem", "elim_update_rev", ["turing", "partrec_to_TM2", "K'"]], ["add", "theorem", "elim_update_stack", ["turing", "partrec_to_TM2", "K'"]], ["add", "inductive", "K'", ["turing", "partrec_to_TM2"]], ["add", "def", "cfg'", ["turing", "partrec_to_TM2"]], ["add", "theorem", "clear_ok", ["turing", "partrec_to_TM2"]], ["add", "inductive", "cont'", ["turing", "partrec_to_TM2"]], ["add", "def", "cont_stack", ["turing", "partrec_to_TM2"]], ["add", "theorem", "copy_ok", ["turing", "partrec_to_TM2"]], ["add", "def", "halt", ["turing", "partrec_to_TM2"]], ["add", "def", "head", ["turing", "partrec_to_TM2"]], ["add", "theorem", "head_main_ok", ["turing", "partrec_to_TM2"]], ["add", "theorem", "head_stack_ok", ["turing", "partrec_to_TM2"]], ["add", "def", "init", ["turing", "partrec_to_TM2"]], ["add", "def", "move_excl", ["turing", "partrec_to_TM2"]], ["add", "theorem", "move_ok", ["turing", "partrec_to_TM2"]], ["add", "def", "move₂", ["turing", "partrec_to_TM2"]], ["add", "theorem", "move₂_ok", ["turing", "partrec_to_TM2"]], ["add", "def", "nat_end", ["turing", "partrec_to_TM2"]], ["add", "def", "peek'", ["turing", "partrec_to_TM2"]], ["add", "def", "pop'", ["turing", "partrec_to_TM2"]], ["add", "theorem", "pred_ok", ["turing", "partrec_to_TM2"]], ["add", "def", "push'", ["turing", "partrec_to_TM2"]], ["add", "def", "split_at_pred", ["turing", "partrec_to_TM2"]], ["add", "theorem", "split_at_pred_eq", ["turing", "partrec_to_TM2"]], ["add", "theorem", "split_at_pred_ff", ["turing", "partrec_to_TM2"]], ["add", "def", "stmt'", ["turing", "partrec_to_TM2"]], ["add", "theorem", "succ_ok", ["turing", "partrec_to_TM2"]], ["add", "def", "tr", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_cfg", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_cont", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_cont_stack", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_eval", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_init", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_list", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_list_ne_Cons", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_llist", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_nat", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_nat_nat_end", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_nat_zero", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_normal", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_normal_respects", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_num", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_num_nat_end", ["turing", "partrec_to_TM2"]], ["add", "def", "tr_pos_num", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_pos_num_nat_end", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_respects", ["turing", "partrec_to_TM2"]], ["add", "theorem", "tr_ret_respects", ["turing", "partrec_to_TM2"]], ["add", "def", "unrev", ["turing", "partrec_to_TM2"]], ["add", "theorem", "unrev_ok", ["turing", "partrec_to_TM2"]], ["add", "inductive", "Γ'", ["turing", "partrec_to_TM2"]], ["add", "inductive", "Λ'", ["turing", "partrec_to_TM2"]], ["add", "def", "then", ["turing", "to_partrec", "cfg"]], ["add", "inductive", "cfg", ["turing", "to_partrec"]], ["add", "def", "eval", ["turing", "to_partrec", "code"]], ["add", "theorem", "comp", ["turing", "to_partrec", "code", "exists_code"]], ["add", "theorem", "exists_code", ["turing", "to_partrec", "code"]], ["add", "def", "head", ["turing", "to_partrec", "code"]], ["add", "theorem", "head_eval", ["turing", "to_partrec", "code"]], ["add", "def", "id", ["turing", "to_partrec", "code"]], ["add", "theorem", "id_eval", ["turing", "to_partrec", "code"]], ["add", "def", "nil", ["turing", "to_partrec", "code"]], ["add", "theorem", "nil_eval", ["turing", "to_partrec", "code"]], ["add", "theorem", "zero", ["turing", "to_partrec", "code", "ok"]], ["add", "def", "ok", ["turing", "to_partrec", "code"]], ["add", "def", "prec", ["turing", "to_partrec", "code"]], ["add", "def", "pred", ["turing", "to_partrec", "code"]], ["add", "theorem", "pred_eval", ["turing", "to_partrec", "code"]], ["add", "def", "rfind", ["turing", "to_partrec", "code"]], ["add", "def", "zero", ["turing", "to_partrec", "code"]], ["add", "theorem", "zero_eval", ["turing", "to_partrec", "code"]], ["add", "inductive", "code", ["turing", "to_partrec"]], ["add", "theorem", "code_is_ok", ["turing", "to_partrec"]], ["add", "def", "eval", ["turing", "to_partrec", "cont"]], ["add", "def", "then", ["turing", "to_partrec", "cont"]], ["add", "theorem", "then_eval", ["turing", "to_partrec", "cont"]], ["add", "inductive", "cont", ["turing", "to_partrec"]], ["add", "theorem", "cont_eval_fix", ["turing", "to_partrec"]], ["add", "def", "step", ["turing", "to_partrec"]], ["add", "theorem", "is_ret", ["turing", "to_partrec", "step_normal"]], ["add", "def", "step_normal", ["turing", "to_partrec"]], ["add", "theorem", "step_normal_eval", ["turing", "to_partrec"]], ["add", "theorem", "step_normal_then", ["turing", "to_partrec"]], ["add", "def", "step_ret", ["turing", "to_partrec"]], ["add", "theorem", "step_ret_eval", ["turing", "to_partrec"]], ["add", "theorem", "step_ret_then", ["turing", "to_partrec"]]]}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": [["mod", "def", "step", ["turing", "TM2"]], ["mod", "def", "step_aux", ["turing", "TM2"]], ["add", "def", "eval_induction", ["turing"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "tail_subset", ["list"]], ["add", "theorem", "tail_suffix", ["list"]]]}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "pure_eq_some", ["roption"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["add", "theorem", "cons_head", ["vector"]], ["add", "theorem", "cons_tail", ["vector"]], ["add", "theorem", "cons_val", ["vector"]], ["add", "theorem", "tail_val", ["vector"]]]}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "update_comm", ["function"]], ["add", "theorem", "update_idem", ["function"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": [["del", "theorem", "cons_val", ["vector"]]]}]}, {"timestamp": 1590563371, "sha": "0d6d0b0f", "message": "chore(*): split long lines, unindent in namespaces (#2834)\nThe diff is large but here is the word diff (search for `[-` or `[+`):\n``` shellsession\n$ git diff --word-diff=plain --ignore-all-space master | grep '(^---|\\[-|\\[\\+)'\n--- a/src/algebra/big_operators.lean\n[-λ l, @is_group_anti_hom.map_prod _ _ _ _ _ inv_is_group_anti_hom l-]-- TODO there is probably a cleaner proof of this\n { have : [-(to_finset s).sum (λx,-]{+∑ x in s.to_finset,+} ite (x = a) 1 [-0)-]{+0+} = [-({a} : finset α).sum (λx,-]{+∑ x in {a},+} ite (x = a) 1 [-0),-]\n[- { apply (finset.sum_subset _ _).symm,-]{+0,+}\n { [-intros _ H, rwa mem_singleton.1 H },-]\n[- { exact λ _ _ H, if_neg (mt finset.mem_singleton.2 H) }-]{+rw [finset.sum_ite_eq', if_pos h, finset.sum_singleton, if_pos rfl],+} },\n--- a/src/algebra/category/Group/basic.lean\n[-a-]{+an+} `add_equiv` between `add_group`s.\"]\n--- a/src/algebra/category/Group/colimits.lean\n--- a/src/algebra/category/Mon/basic.lean\n[-a-]{+an+} `add_equiv` between `add_monoid`s.\"]\n[-a-]{+an+} `add_equiv` between `add_comm_monoid`s.\"]\n--- a/src/algebra/free.lean\n--- a/src/algebra/group/units.lean\n--- a/src/algebra/group/units_hom.lean\n--- a/src/category_theory/category/default.lean\n[-universes v u-]-- The order in this declaration matters: v often needs to be explicitly specified while u often\n--- a/src/control/monad/cont.lean\n simp [-[call_cc,except_t.call_cc,call_cc_bind_right,except_t.goto_mk_label,map_eq_bind_pure_comp,bind_assoc,@call_cc_bind_left-]{+[call_cc,except_t.call_cc,call_cc_bind_right,except_t.goto_mk_label,map_eq_bind_pure_comp,+}\n call_cc_bind_left := by { intros, simp [-[call_cc,option_t.call_cc,call_cc_bind_right,option_t.goto_mk_label,map_eq_bind_pure_comp,bind_assoc,@call_cc_bind_left-]{+[call_cc,option_t.call_cc,call_cc_bind_right,+}\n call_cc_bind_left := by { intros, simp [-[call_cc,state_t.call_cc,call_cc_bind_left,(>>=),state_t.bind,state_t.goto_mk_label],-]{+[call_cc,state_t.call_cc,call_cc_bind_left,(>>=),+}\n call_cc_dummy := by { intros, simp [-[call_cc,state_t.call_cc,call_cc_bind_right,(>>=),state_t.bind,@call_cc_dummy-]{+[call_cc,state_t.call_cc,call_cc_bind_right,(>>=),+}\n call_cc_bind_left := by { intros, simp [-[call_cc,reader_t.call_cc,call_cc_bind_left,reader_t.goto_mk_label],-]{+[call_cc,reader_t.call_cc,call_cc_bind_left,+}\n--- a/src/control/monad/writer.lean\n--- a/src/control/traversable/basic.lean\n online at [-Synopsis-]\n--- a/src/data/analysis/filter.lean\n--- a/src/data/equiv/basic.lean\n--- a/src/data/fin.lean\n--- a/src/data/finset.lean\n [-by-]{+{+} rw [-[eq],-]{+[eq] },+}\n--- a/src/data/hash_map.lean\n--- a/src/data/int/basic.lean\n--- a/src/data/list/basic.lean\n--- a/src/data/list/tfae.lean\n--- a/src/data/num/lemmas.lean\n[-Properties of the binary representation of integers.-]\n--- a/src/data/zsqrtd/basic.lean\n--- a/src/group_theory/congruence.lean\nwith [-a-]{+an+} addition.\"]\n@[to_additive Sup_eq_add_con_gen \"The supremum of a set of additive congruence relations [-S-]{+`S`+} equals\n--- a/src/group_theory/monoid_localization.lean\n--- a/src/group_theory/submonoid.lean\n--- a/src/number_theory/dioph.lean\n--- a/src/set_theory/ordinal.lean\n--- a/src/tactic/apply.lean\n--- a/src/tactic/lean_core_docs.lean\n--- a/src/tactic/lint/type_classes.lean\n--- a/src/tactic/omega/main.lean\n--- a/test/coinductive.lean\n--- a/test/localized/import3.lean\n--- a/test/norm_num.lean\n--- a/test/tidy.lean\n--- a/test/where.lean\n```\nP.S.: I don't know how to make `git diff` hide all non-interesting chunks.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["mod", "def", "to_CommGroup_iso", ["mul_equiv"]]]}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": [["mod", "theorem", "quot_add", ["AddCommGroup", "colimits"]], ["mod", "theorem", "quot_neg", ["AddCommGroup", "colimits"]]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": [["mod", "theorem", "map_mul'", ["free_magma"]], ["mod", "theorem", "mul_bind", ["free_magma"]], ["mod", "theorem", "mul_map_seq", ["free_magma"]], ["mod", "theorem", "mul_seq", ["free_magma"]], ["mod", "theorem", "traverse_mul'", ["free_magma"]], ["mod", "theorem", "traverse_mul", ["free_magma"]], ["mod", "theorem", "map_mul'", ["free_semigroup"]], ["mod", "theorem", "map_pure", ["free_semigroup"]], ["mod", "theorem", "mul_bind", ["free_semigroup"]], ["mod", "theorem", "mul_map_seq", ["free_semigroup"]], ["mod", "theorem", "mul_seq", ["free_semigroup"]], ["mod", "theorem", "pure_seq", ["free_semigroup"]], ["mod", "def", "traverse'", ["free_semigroup"]], ["mod", "theorem", "traverse_mul'", ["free_semigroup"]], ["mod", "theorem", "traverse_mul", ["free_semigroup"]], ["mod", "def", "free_semigroup_free_magma", []], ["mod", "theorem", "of_mul_assoc_left", ["magma", "free_semigroup"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["mod", "theorem", "map_comp", ["units"]]]}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["mod", "theorem", "epi_of_epi_fac", ["category_theory"]], ["mod", "theorem", "eq_of_comp_left_eq'", ["category_theory"]], ["mod", "theorem", "eq_of_comp_right_eq'", ["category_theory"]], ["mod", "theorem", "mono_of_mono_fac", ["category_theory"]]]}, {"oldPath": "src/control/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": [["mod", "def", "call_cc", ["option_t"]], ["mod", "def", "call_cc", ["reader_t"]], ["mod", "def", "call_cc", ["state_t"]], ["mod", "def", "call_cc", ["writer_t"]]]}, {"oldPath": "src/control/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": [["mod", "theorem", "map_F", ["filter", "realizer"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "Pi_curry", ["equiv"]], ["mod", "theorem", "swap_apply_self", ["equiv"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "succ_above_descend", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "image_inter", ["finset"]], ["mod", "theorem", "image_union", ["finset"]]]}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": [["mod", "theorem", "append_of_modify", ["hash_map"]], ["mod", "theorem", "contains_aux_iff", ["hash_map"]], ["mod", "theorem", "find_aux_iff", ["hash_map"]], ["mod", "theorem", "as_list_nodup", ["hash_map", "valid"]], ["mod", "theorem", "contains_aux_iff", ["hash_map", "valid"]], ["mod", "theorem", "find_aux_iff", ["hash_map", "valid"]], ["mod", "def", "mk_hash_map", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_neg_of_nat", ["int"]], ["mod", "theorem", "cast_one", ["int"]], ["mod", "theorem", "cast_sub_nat_nat", ["int"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "all_cons", ["list"]], ["mod", "theorem", "any_cons", ["list"]], ["mod", "theorem", "append_inj'", ["list"]], ["mod", "theorem", "append_inj", ["list"]], ["mod", "theorem", "append_inj_left'", ["list"]], ["mod", "theorem", "append_inj_left", ["list"]], ["mod", "theorem", "append_inj_right'", ["list"]], ["mod", "theorem", "append_inj_right", ["list"]], ["mod", "theorem", "count_erase_of_ne", ["list"]], ["mod", "theorem", "count_erase_self", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_left_left", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_left_right", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_right_left", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_right_right", ["list"]], ["mod", "theorem", "disjoint_of_subset_left", ["list"]], ["mod", "theorem", "disjoint_of_subset_right", ["list"]], ["mod", "theorem", "eq_of_infix_of_length_eq", ["list"]], ["mod", "theorem", "eq_of_mem_map_const", ["list"]], ["mod", "theorem", "eq_of_prefix_of_length_eq", ["list"]], ["mod", "theorem", "eq_of_sublist_of_length_le", ["list"]], ["mod", "theorem", "eq_of_suffix_of_length_eq", ["list"]], ["mod", "theorem", "erase_cons", ["list"]], ["mod", "theorem", "erase_cons_tail", ["list"]], ["mod", "theorem", "erasep_append_right", ["list"]], ["mod", "theorem", "erasep_cons", ["list"]], ["mod", "theorem", "erasep_cons_of_neg", ["list"]], ["mod", "theorem", "exists_of_mem_bind", ["list"]], ["mod", "theorem", "ext_le", ["list"]], ["mod", "theorem", "filter_false", ["list"]], ["mod", "theorem", "filter_true", ["list"]], ["mod", "theorem", "foldl1_eq_foldr1", ["list"]], ["mod", "theorem", "foldl_eq_foldr'", ["list"]], ["mod", "theorem", "foldl_eq_foldr", ["list"]], ["mod", "theorem", "foldl_eq_of_comm'", ["list"]], ["mod", "theorem", "foldl_eq_of_comm_of_assoc", ["list"]], ["mod", "theorem", "foldl_reverse", ["list"]], ["mod", "theorem", "foldr_eq_of_comm'", ["list"]], ["mod", "theorem", "foldr_reverse", ["list"]], ["mod", "theorem", "head_append", ["list"]], ["mod", "theorem", "head_mul_tail_prod'", ["list"]], ["mod", "theorem", "index_of_cons", ["list"]], ["mod", "theorem", "index_of_nth", ["list"]], ["mod", "theorem", "index_of_nth_le", ["list"]], ["mod", "theorem", "le_count_iff_repeat_sublist", ["list"]], ["mod", "theorem", "length_bind", ["list"]], ["mod", "theorem", "length_erase_of_mem", ["list"]], ["mod", "theorem", "mem_bind", ["list"]], ["mod", "theorem", "mem_bind_of_mem", ["list"]], ["mod", "theorem", "nth_le_reverse_aux1", ["list"]], ["mod", "theorem", "sublist_or_mem_of_sublist", ["list"]], ["mod", "theorem", "suffix_iff_eq_append", ["list"]]]}, {"oldPath": "src/data/list/tfae.lean", "newPath": "src/data/list/tfae.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["mod", "def", "of_snum", ["int"]], ["mod", "theorem", "add_of_nat", ["num"]], ["mod", "theorem", "add_one", ["num"]], ["mod", "theorem", "add_succ", ["num"]], ["mod", "theorem", "add_to_nat", ["num"]], ["mod", "theorem", "add_to_znum", ["num"]], ["mod", "theorem", "add_zero", ["num"]], ["mod", "theorem", "bit0_of_bit0", ["num"]], ["mod", "theorem", "bit1_of_bit1", ["num"]], ["mod", "theorem", "bit_to_nat", ["num"]], ["mod", "theorem", "bitwise_to_nat", ["num"]], ["mod", "theorem", "cast_add", ["num"]], ["mod", "theorem", "cast_bit0", ["num"]], ["mod", "theorem", "cast_bit1", ["num"]], ["mod", "theorem", "cast_inj", ["num"]], ["mod", "theorem", "cast_le", ["num"]], ["mod", "theorem", "cast_lt", ["num"]], ["mod", "theorem", "cast_mul", ["num"]], ["mod", "theorem", "cast_of_znum", ["num"]], ["mod", "theorem", "cast_one", ["num"]], ["mod", "theorem", "cast_pos", ["num"]], ["mod", "theorem", "cast_sub'", ["num"]], ["mod", "theorem", "cast_succ'", ["num"]], ["mod", "theorem", "cast_succ", ["num"]], ["mod", "theorem", "cast_to_int", ["num"]], ["mod", "theorem", "cast_to_nat", ["num"]], ["mod", "theorem", "cast_to_znum", ["num"]], ["mod", "theorem", "cast_to_znum_neg", ["num"]], ["mod", "theorem", "cast_zero'", ["num"]], ["mod", "theorem", "cast_zero", ["num"]], ["mod", "theorem", "cmp_eq", ["num"]], ["mod", "theorem", "cmp_swap", ["num"]], ["mod", "theorem", "cmp_to_nat", ["num"]], ["mod", "theorem", "div_to_nat", ["num"]], ["mod", "theorem", "dvd_iff_mod_eq_zero", ["num"]], ["mod", "theorem", "dvd_to_nat", ["num"]], ["mod", "theorem", "gcd_to_nat", ["num"]], ["mod", "theorem", "gcd_to_nat_aux", ["num"]], ["mod", "theorem", "land_to_nat", ["num"]], ["mod", "theorem", "ldiff_to_nat", ["num"]], ["mod", "theorem", "le_iff_cmp", ["num"]], ["mod", "theorem", "le_to_nat", ["num"]], ["mod", "theorem", "lor_to_nat", ["num"]], ["mod", "theorem", "lt_iff_cmp", ["num"]], ["mod", "theorem", "lt_to_nat", ["num"]], ["mod", "theorem", "lxor_to_nat", ["num"]], ["mod", "theorem", "mem_of_znum'", ["num"]], ["mod", "theorem", "mod_to_nat", ["num"]], ["mod", "theorem", "mul_to_nat", ["num"]], ["mod", "theorem", "nat_size_to_nat", ["num"]], ["mod", "theorem", "of_nat'_eq", ["num"]], ["mod", "theorem", "of_nat_cast", ["num"]], ["mod", "theorem", "of_nat_inj", ["num"]], ["mod", "theorem", "of_nat_to_znum", ["num"]], ["mod", "theorem", "of_nat_to_znum_neg", ["num"]], ["mod", "theorem", "of_to_nat", ["num"]], ["mod", "theorem", "of_znum'_to_nat", ["num"]], ["mod", "theorem", "of_znum_to_nat", ["num"]], ["mod", "theorem", "ppred_to_nat", ["num"]], ["mod", "theorem", "pred_to_nat", ["num"]], ["mod", "theorem", "shiftl_to_nat", ["num"]], ["mod", "theorem", "shiftr_to_nat", ["num"]], ["mod", "theorem", "size_eq_nat_size", ["num"]], ["mod", "theorem", "size_to_nat", ["num"]], ["mod", "theorem", "sub_to_nat", ["num"]], ["mod", "theorem", "succ'_to_nat", ["num"]], ["mod", "theorem", "succ_to_nat", ["num"]], ["mod", "theorem", "test_bit_to_nat", ["num"]], ["mod", "theorem", "to_nat_inj", ["num"]], ["mod", "theorem", "to_nat_to_int", ["num"]], ["mod", "theorem", "to_of_nat", ["num"]], ["mod", "theorem", "to_znum_inj", ["num"]], ["mod", "theorem", "zero_add", ["num"]], ["mod", "theorem", "zneg_to_znum", ["num"]], ["mod", "theorem", "zneg_to_znum_neg", ["num"]], ["mod", "theorem", "add_one", ["pos_num"]], ["mod", "theorem", "add_succ", ["pos_num"]], ["mod", "theorem", "add_to_nat", ["pos_num"]], ["mod", "theorem", "bit0_of_bit0", ["pos_num"]], ["mod", "theorem", "bit1_of_bit1", ["pos_num"]], ["mod", "theorem", "bit_to_nat", ["pos_num"]], ["mod", "theorem", "cast_add", ["pos_num"]], ["mod", "theorem", "cast_bit0", ["pos_num"]], ["mod", "theorem", "cast_bit1", ["pos_num"]], ["mod", "theorem", "cast_inj", ["pos_num"]], ["mod", "theorem", "cast_le", ["pos_num"]], ["mod", "theorem", "cast_lt", ["pos_num"]], ["mod", "theorem", "cast_mul", ["pos_num"]], ["mod", "theorem", "cast_one'", ["pos_num"]], ["mod", "theorem", "cast_one", ["pos_num"]], ["mod", "theorem", "cast_pos", ["pos_num"]], ["mod", "theorem", "cast_sub'", ["pos_num"]], ["mod", "theorem", "cast_succ", ["pos_num"]], ["mod", "theorem", "cast_to_int", ["pos_num"]], ["mod", "theorem", "cast_to_nat", ["pos_num"]], ["mod", "theorem", "cast_to_num", ["pos_num"]], ["mod", "theorem", "cast_to_znum", ["pos_num"]], ["mod", "theorem", "cmp_eq", ["pos_num"]], ["mod", "theorem", "cmp_swap", ["pos_num"]], ["mod", "theorem", "cmp_to_nat", ["pos_num"]], ["mod", "theorem", "cmp_to_nat_lemma", ["pos_num"]], ["mod", "theorem", "div'_to_nat", ["pos_num"]], ["mod", "theorem", "divmod_to_nat", ["pos_num"]], ["mod", "theorem", "divmod_to_nat_aux", ["pos_num"]], ["mod", "theorem", "le_iff_cmp", ["pos_num"]], ["mod", "theorem", "le_to_nat", ["pos_num"]], ["mod", "theorem", "lt_iff_cmp", ["pos_num"]], ["mod", "theorem", "lt_to_nat", ["pos_num"]], ["mod", "theorem", "mod'_to_nat", ["pos_num"]], ["mod", "theorem", "mul_to_nat", ["pos_num"]], ["mod", "theorem", "nat_size_pos", ["pos_num"]], ["mod", "theorem", "nat_size_to_nat", ["pos_num"]], ["mod", "theorem", "of_to_nat", ["pos_num"]], ["mod", "theorem", "one_add", ["pos_num"]], ["mod", "theorem", "one_le_cast", ["pos_num"]], ["mod", "theorem", "one_sub'", ["pos_num"]], ["mod", "theorem", "pred'_succ'", ["pos_num"]], ["mod", "theorem", "pred'_to_nat", ["pos_num"]], ["mod", "theorem", "pred_to_nat", ["pos_num"]], ["mod", "theorem", "size_eq_nat_size", ["pos_num"]], ["mod", "theorem", "size_to_nat", ["pos_num"]], ["mod", "theorem", "sub'_one", ["pos_num"]], ["mod", "theorem", "succ'_pred'", ["pos_num"]], ["mod", "theorem", "succ_to_nat", ["pos_num"]], ["mod", "theorem", "to_int_eq_succ_pred", ["pos_num"]], ["mod", "theorem", "to_nat_eq_succ_pred", ["pos_num"]], ["mod", "theorem", "to_nat_inj", ["pos_num"]], ["mod", "theorem", "to_nat_pos", ["pos_num"]], ["mod", "theorem", "to_nat_to_int", ["pos_num"]], ["mod", "theorem", "abs_to_nat", ["znum"]], ["mod", "theorem", "abs_to_znum", ["znum"]], ["mod", "theorem", "add_one", ["znum"]], ["mod", "theorem", "add_zero", ["znum"]], ["mod", "theorem", "bit0_of_bit0", ["znum"]], ["mod", "theorem", "bit1_of_bit1", ["znum"]], ["mod", "theorem", "cast_add", ["znum"]], ["mod", "theorem", "cast_bit0", ["znum"]], ["mod", "theorem", "cast_bit1", ["znum"]], ["mod", "theorem", "cast_bitm1", ["znum"]], ["mod", "theorem", "cast_inj", ["znum"]], ["mod", "theorem", "cast_le", ["znum"]], ["mod", "theorem", "cast_lt", ["znum"]], ["mod", "theorem", "cast_mul", ["znum"]], ["mod", "theorem", "cast_neg", ["znum"]], ["mod", "theorem", "cast_one", ["znum"]], ["mod", "theorem", "cast_pos", ["znum"]], ["mod", "theorem", "cast_succ", ["znum"]], ["mod", "theorem", "cast_to_int", ["znum"]], ["mod", "theorem", "cast_zero'", ["znum"]], ["mod", "theorem", "cast_zero", ["znum"]], ["mod", "theorem", "cast_zneg", ["znum"]], ["mod", "theorem", "cmp_to_int", ["znum"]], ["mod", "theorem", "div_to_int", ["znum"]], ["mod", "theorem", "dvd_iff_mod_eq_zero", ["znum"]], ["mod", "theorem", "dvd_to_int", ["znum"]], ["mod", "theorem", "gcd_to_nat", ["znum"]], ["mod", "theorem", "le_to_int", ["znum"]], ["mod", "theorem", "lt_to_int", ["znum"]], ["mod", "theorem", "mod_to_int", ["znum"]], ["mod", "theorem", "mul_to_int", ["znum"]], ["mod", "theorem", "neg_of_int", ["znum"]], ["mod", "theorem", "neg_zero", ["znum"]], ["mod", "theorem", "of_int'_eq", ["znum"]], ["mod", "theorem", "of_int_cast", ["znum"]], ["mod", "theorem", "of_nat_cast", ["znum"]], ["mod", "theorem", "of_to_int", ["znum"]], ["mod", "theorem", "to_int_inj", ["znum"]], ["mod", "theorem", "to_of_int", ["znum"]], ["mod", "theorem", "zero_add", ["znum"]], ["mod", "theorem", "zneg_bit1", ["znum"]], ["mod", "theorem", "zneg_bitm1", ["znum"]], ["mod", "theorem", "zneg_neg", ["znum"]], ["mod", "theorem", "zneg_pos", ["znum"]], ["mod", "theorem", "zneg_pred", ["znum"]], ["mod", "theorem", "zneg_succ", ["znum"]], ["mod", "theorem", "zneg_zneg", ["znum"]]]}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": [["mod", "def", "add", ["zsqrtd"]], ["mod", "theorem", "add_def", ["zsqrtd"]], ["mod", "theorem", "add_im", ["zsqrtd"]], ["mod", "theorem", "add_re", ["zsqrtd"]], ["mod", "theorem", "bit0_im", ["zsqrtd"]], ["mod", "theorem", "bit0_re", ["zsqrtd"]], ["mod", "theorem", "bit1_im", ["zsqrtd"]], ["mod", "theorem", "bit1_re", ["zsqrtd"]], ["mod", "theorem", "coe_int_im", ["zsqrtd"]], ["mod", "theorem", "coe_int_re", ["zsqrtd"]], ["mod", "theorem", "coe_int_val", ["zsqrtd"]], ["mod", "theorem", "coe_nat_im", ["zsqrtd"]], ["mod", "theorem", "coe_nat_re", ["zsqrtd"]], ["mod", "theorem", "coe_nat_val", ["zsqrtd"]], ["mod", "def", "conj", ["zsqrtd"]], ["mod", "theorem", "conj_im", ["zsqrtd"]], ["mod", "theorem", "conj_mul", ["zsqrtd"]], ["mod", "theorem", "conj_re", ["zsqrtd"]], ["mod", "theorem", "d_pos", ["zsqrtd"]], ["mod", "theorem", "decompose", ["zsqrtd"]], ["mod", "theorem", "divides_sq_eq_zero", ["zsqrtd"]], ["mod", "theorem", "divides_sq_eq_zero_z", ["zsqrtd"]], ["mod", "theorem", "ext", ["zsqrtd"]], ["mod", "theorem", "le_antisymm", ["zsqrtd"]], ["mod", "theorem", "le_arch", ["zsqrtd"]], ["mod", "theorem", "le_of_le_le", ["zsqrtd"]], ["mod", "theorem", "le_refl", ["zsqrtd"]], ["mod", "def", "mul", ["zsqrtd"]], ["mod", "theorem", "mul_conj", ["zsqrtd"]], ["mod", "theorem", "mul_im", ["zsqrtd"]], ["mod", "theorem", "mul_re", ["zsqrtd"]], ["mod", "theorem", "muld_val", ["zsqrtd"]], ["mod", "def", "neg", ["zsqrtd"]], ["mod", "theorem", "neg_im", ["zsqrtd"]], ["mod", "theorem", "neg_re", ["zsqrtd"]], ["mod", "def", "nonneg", ["zsqrtd"]], ["mod", "theorem", "nonneg_add", ["zsqrtd"]], ["mod", "theorem", "nonneg_add_lem", ["zsqrtd"]], ["mod", "theorem", "nonneg_antisymm", ["zsqrtd"]], ["mod", "theorem", "nonneg_cases", ["zsqrtd"]], ["mod", "theorem", "nonneg_iff_zero_le", ["zsqrtd"]], ["mod", "theorem", "nonneg_mul", ["zsqrtd"]], ["mod", "theorem", "nonneg_mul_lem", ["zsqrtd"]], ["mod", "theorem", "nonneg_muld", ["zsqrtd"]], ["mod", "theorem", "nonneg_smul", ["zsqrtd"]], ["mod", "def", "nonnegg", ["zsqrtd"]], ["mod", "theorem", "nonnegg_cases_left", ["zsqrtd"]], ["mod", "theorem", "nonnegg_cases_right", ["zsqrtd"]], ["mod", "theorem", "nonnegg_comm", ["zsqrtd"]], ["mod", "theorem", "nonnegg_neg_pos", ["zsqrtd"]], ["mod", "theorem", "nonnegg_pos_neg", ["zsqrtd"]], ["mod", "theorem", "not_divides_square", ["zsqrtd"]], ["mod", "theorem", "not_sq_le_succ", ["zsqrtd"]], ["mod", "def", "of_int", ["zsqrtd"]], ["mod", "theorem", "of_int_eq_coe", ["zsqrtd"]], ["mod", "theorem", "of_int_im", ["zsqrtd"]], ["mod", "theorem", "of_int_re", ["zsqrtd"]], ["mod", "def", "one", ["zsqrtd"]], ["mod", "theorem", "one_im", ["zsqrtd"]], ["mod", "theorem", "one_re", ["zsqrtd"]], ["mod", "theorem", "smul_val", ["zsqrtd"]], ["mod", "theorem", "smuld_val", ["zsqrtd"]], ["mod", "def", "sq_le", ["zsqrtd"]], ["mod", "theorem", "sq_le_add", ["zsqrtd"]], ["mod", "theorem", "sq_le_add_mixed", ["zsqrtd"]], ["mod", "theorem", "sq_le_cancel", ["zsqrtd"]], ["mod", "theorem", "sq_le_mul", ["zsqrtd"]], ["mod", "theorem", "sq_le_of_le", ["zsqrtd"]], ["mod", "theorem", "sq_le_smul", ["zsqrtd"]], ["mod", "def", "sqrtd", ["zsqrtd"]], ["mod", "theorem", "sqrtd_im", ["zsqrtd"]], ["mod", "theorem", "sqrtd_re", ["zsqrtd"]], ["mod", "def", "zero", ["zsqrtd"]], ["mod", "theorem", "zero_im", ["zsqrtd"]], ["mod", "theorem", "zero_re", ["zsqrtd"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["mod", "def", "correspondence", ["con"]]]}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["mod", "theorem", "mem_closure_singleton", ["add_submonoid"]]]}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": [["mod", "theorem", "abs_poly_dioph", ["dioph"]], ["mod", "theorem", "add_dioph", ["dioph"]], ["mod", "theorem", "and_dioph", ["dioph"]], ["mod", "theorem", "const_dioph", ["dioph"]], ["mod", "theorem", "dioph_comp2", ["dioph"]], ["mod", "theorem", "dioph_comp", ["dioph"]], ["mod", "def", "dioph_fn", ["dioph"]], ["mod", "theorem", "dioph_fn_comp1", ["dioph"]], ["mod", "theorem", "dioph_fn_comp2", ["dioph"]], ["mod", "theorem", "dioph_fn_comp", ["dioph"]], ["mod", "theorem", "dioph_fn_compn", ["dioph"]], ["mod", "theorem", "dioph_fn_iff_pfun", ["dioph"]], ["mod", "theorem", "dioph_fn_vec", ["dioph"]], ["mod", "theorem", "dioph_fn_vec_comp1", ["dioph"]], ["mod", "theorem", "dioph_list_all", ["dioph"]], ["mod", "def", "dioph_pfun", ["dioph"]], ["mod", "theorem", "dioph_pfun_comp1", ["dioph"]], ["mod", "theorem", "dioph_pfun_vec", ["dioph"]], ["mod", "theorem", "div_dioph", ["dioph"]], ["mod", "theorem", "dom_dioph", ["dioph"]], ["mod", "theorem", "dvd_dioph", ["dioph"]], ["mod", "theorem", "eq_dioph", ["dioph"]], ["mod", "theorem", "ex1_dioph", ["dioph"]], ["mod", "theorem", "ex_dioph", ["dioph"]], ["mod", "theorem", "ext", ["dioph"]], ["mod", "theorem", "inject_dummies", ["dioph"]], ["mod", "theorem", "inject_dummies_lem", ["dioph"]], ["mod", "theorem", "le_dioph", ["dioph"]], ["mod", "theorem", "lt_dioph", ["dioph"]], ["mod", "theorem", "mod_dioph", ["dioph"]], ["mod", "theorem", "modeq_dioph", ["dioph"]], ["mod", "theorem", "mul_dioph", ["dioph"]], ["mod", "theorem", "ne_dioph", ["dioph"]], ["mod", "theorem", "of_no_dummies", ["dioph"]], ["mod", "theorem", "or_dioph", ["dioph"]], ["mod", "theorem", "pell_dioph", ["dioph"]], ["mod", "theorem", "pow_dioph", ["dioph"]], ["mod", "theorem", "proj_dioph", ["dioph"]], ["mod", "theorem", "proj_dioph_of_nat", ["dioph"]], ["mod", "theorem", "reindex_dioph", ["dioph"]], ["mod", "theorem", "reindex_dioph_fn", ["dioph"]], ["mod", "theorem", "sub_dioph", ["dioph"]], ["mod", "theorem", "vec_ex1_dioph", ["dioph"]], ["mod", "theorem", "xn_dioph", ["dioph"]], ["mod", "theorem", "imp", ["list_all"]], ["mod", "theorem", "list_all_congr", []], ["mod", "theorem", "list_all_cons", []], ["mod", "theorem", "list_all_map", []], ["mod", "theorem", "append_insert", ["vector3"]], ["mod", "theorem", "vector_allp_iff_forall", []]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/apply.lean", "newPath": "src/tactic/apply.lean", "changes": []}, {"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "test/coinductive.lean", "newPath": "test/coinductive.lean", "changes": []}, {"oldPath": "test/localized/import3.lean", "newPath": "test/localized/import3.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": []}, {"oldPath": "test/where.lean", "newPath": "test/where.lean", "changes": []}]}, {"timestamp": 1590542334, "sha": "2792c93a", "message": "feat(ring_theory/fintype): in a finite nonzero_semiring, fintype.card (units R) < fintype.card R (#2793)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "not_is_unit_zero", []]]}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "def", "is_unit", []]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "card_lt_card_of_injective_of_not_mem", []], ["add", "theorem", "mem_image_univ_iff_mem_range", []]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/fintype.lean", "changes": [["add", "theorem", "card_units_lt", []]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1590514527, "sha": "63b8c52c", "message": "chore(scripts): update nolints.txt (#2833)\nI am happy to remove some nolints for you!", "changes": []}, {"timestamp": 1590511641, "sha": "4dfd706f", "message": "chore(scripts): update nolints.txt (#2831)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590511639, "sha": "4ca776ee", "message": "feat(linear_algebra/quadratic_form): equivalence of quadratic forms (#2769)", "changes": [{"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "refl", ["quadratic_form", "equivalent"]], ["add", "theorem", "symm", ["quadratic_form", "equivalent"]], ["add", "theorem", "trans", ["quadratic_form", "equivalent"]], ["add", "def", "equivalent", ["quadratic_form"]], ["add", "theorem", "map_app", ["quadratic_form", "isometry"]], ["add", "def", "refl", ["quadratic_form", "isometry"]], ["add", "def", "symm", ["quadratic_form", "isometry"]], ["add", "def", "trans", ["quadratic_form", "isometry"]], ["add", "structure", "isometry", ["quadratic_form"]]]}]}, {"timestamp": 1590506129, "sha": "9630eca8", "message": "feat(data/nat/primes): lemmas about min_fac (#2790)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "min_fac_eq_one_iff", ["nat"]], ["add", "theorem", "min_fac_eq_two_iff", ["nat"]], ["add", "theorem", "min_fac_sq_le_self", ["nat"]]]}]}, {"timestamp": 1590499846, "sha": "895f5689", "message": "perf(tactic/lint): speed up nolint attribute (#2828)\nLooking up the nolint attribute only takes 15 seconds out of the 45 minutes, so speeding up this part has little effect. More importantly, this PR removes one branch from the mathlib repository.", "changes": [{"oldPath": "src/tactic/lint/basic.lean", "newPath": "src/tactic/lint/basic.lean", "changes": []}]}, {"timestamp": 1590499844, "sha": "1cf59fcc", "message": "chore(src/algebra/ordered_ring.lean): fix linting errors (#2827)\n[Mentioned, but not really discussed, in this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/How.20to.20get.20familiar.20enough.20with.20Mathlib.20to.20use.20it/near/198747067).\nThis PR also removes `mul_pos'` and `mul_nonneg'` lemmas because they are now identical to the improved `mul_pos` and `mul_nonneg`.", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "four_pos", []], ["mod", "theorem", "gt_of_mul_lt_mul_neg_left", []], ["del", "theorem", "mul_nonneg'", []], ["mod", "theorem", "mul_nonneg", []], ["del", "theorem", "mul_pos'", []], ["mod", "theorem", "mul_pos", []], ["mod", "theorem", "mul_self_nonneg", []], ["mod", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", []], ["mod", "theorem", "two_ge_one", []], ["mod", "theorem", "two_gt_one", []], ["mod", "theorem", "coe_eq_zero", ["with_top"]], ["mod", "theorem", "coe_zero", ["with_top"]], ["mod", "theorem", "top_ne_zero", ["with_top"]], ["mod", "theorem", "zero_eq_coe", ["with_top"]], ["mod", "theorem", "zero_ne_top", ["with_top"]]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}]}, {"timestamp": 1590499842, "sha": "7d864755", "message": "feat(data/polynomial): eq_one_of_is_unit_of_monic (#2823)\n~~Depends on #2822 ~~", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "degree_nonneg_iff_ne_zero", ["polynomial"]], ["add", "theorem", "eq_one_of_is_unit_of_monic", ["polynomial"]], ["add", "theorem", "nat_degree_eq_zero_iff_degree_le_zero", ["polynomial"]]]}]}, {"timestamp": 1590499840, "sha": "099ffd38", "message": "chore(algebra/free_monoid): use implicit args in `lift` (#2821)", "changes": [{"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["mod", "theorem", "comp_lift", ["free_monoid"]], ["add", "theorem", "hom_map_lift", ["free_monoid"]], ["mod", "theorem", "lift_apply", ["free_monoid"]], ["mod", "theorem", "lift_comp_of", ["free_monoid"]], ["mod", "theorem", "lift_eval_of", ["free_monoid"]], ["mod", "theorem", "lift_restrict", ["free_monoid"]], ["add", "theorem", "lift_symm_apply", ["free_monoid"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_mk'", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["mod", "theorem", "closure_eq_mrange", ["submonoid"]]]}]}, {"timestamp": 1590499838, "sha": "fc790892", "message": "feat(number_theory/primorial): Bound on the primorial function (#2701)\nThis lemma is needed for Erdös's proof of Bertrand's postulate, but it may be of independent interest.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "self_mem_range_succ", ["finset"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "self_mem_range_succ", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "self_mem_range_succ", ["multiset"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "choose_symm_half", ["nat"]]]}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": [["mod", "theorem", "choose_le_middle", []], ["add", "theorem", "choose_middle_le_pow", []]]}, {"oldPath": null, "newPath": "src/number_theory/primorial.lean", "changes": [["add", "theorem", "dvd_choose_of_middling_prime", []], ["add", "def", "primorial", []], ["add", "theorem", "primorial_le_4_pow", []], ["add", "theorem", "primorial_succ", []], ["add", "theorem", "prod_primes_dvd", []]]}]}, {"timestamp": 1590493411, "sha": "2c40bd3f", "message": "feat(tactic/push_cast): take list of extra simp lemmas (#2825)\ncloses #2783", "changes": [{"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": []}]}, {"timestamp": 1590489607, "sha": "ab2e52e0", "message": "feat(order/filter/basic): a local left inverse locally equals a local right inverse (#2808)", "changes": [{"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "local_inverse_tendsto", ["has_strict_fderiv_at"]], ["add", "theorem", "local_inverse_unique", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually_eq_of_left_inv_of_right_inv", ["filter"]]]}]}, {"timestamp": 1590489605, "sha": "8c36b32f", "message": "feat(order/filter/basic): add `eventually.curry` (#2807)\nI'm not sure that this is a good name. Suggestions of better names are welcome.", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "curry", ["filter", "eventually"]], ["add", "theorem", "eventually_prod_iff", ["filter"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "curry_nhds", ["filter", "eventually"]]]}]}, {"timestamp": 1590489603, "sha": "597946df", "message": "feat(analysis/calculus/implicit): Implicit function theorem (#2749)\nFixes #1849\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/2749.20Implicit.20function.20theorem).", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["del", "theorem", "has_strict_deriv_at", ["has_strict_fderiv_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/implicit.lean", "changes": [["add", "theorem", "eq_implicit_function", ["has_strict_fderiv_at"]], ["add", "theorem", "eq_implicit_function_of_complemented", ["has_strict_fderiv_at"]], ["add", "def", "implicit_function", ["has_strict_fderiv_at"]], ["add", "def", "implicit_function_data_of_complemented", ["has_strict_fderiv_at"]], ["add", "def", "implicit_function_of_complemented", ["has_strict_fderiv_at"]], ["add", "def", "implicit_to_local_homeomorph", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_to_local_homeomorph_apply_ker", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_to_local_homeomorph_fst", ["has_strict_fderiv_at"]], ["add", "def", "implicit_to_local_homeomorph_of_complemented", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_to_local_homeomorph_of_complemented_apply", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_to_local_homeomorph_of_complemented_apply_ker", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_to_local_homeomorph_of_complemented_fst", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_to_local_homeomorph_of_complemented_self", ["has_strict_fderiv_at"]], ["add", "theorem", "implicit_to_local_homeomorph_self", ["has_strict_fderiv_at"]], ["add", "theorem", "map_implicit_function_eq", ["has_strict_fderiv_at"]], ["add", "theorem", "map_implicit_function_of_complemented_eq", ["has_strict_fderiv_at"]], ["add", "theorem", "mem_implicit_to_local_homeomorph_of_complemented_source", ["has_strict_fderiv_at"]], ["add", "theorem", "mem_implicit_to_local_homeomorph_of_complemented_target", ["has_strict_fderiv_at"]], ["add", "theorem", "mem_implicit_to_local_homeomorph_source", ["has_strict_fderiv_at"]], ["add", "theorem", "mem_implicit_to_local_homeomorph_target", ["has_strict_fderiv_at"]], ["add", "theorem", "to_implicit_function", ["has_strict_fderiv_at"]], ["add", "theorem", "to_implicit_function_of_complemented", ["has_strict_fderiv_at"]], ["add", "def", "implicit_function", ["implicit_function_data"]], ["add", "theorem", "implicit_function_apply_image", ["implicit_function_data"]], ["add", "theorem", "implicit_function_has_strict_fderiv_at", ["implicit_function_data"]], ["add", "theorem", "left_map_implicit_function", ["implicit_function_data"]], ["add", "theorem", "map_pt_mem_to_local_homeomorph_target", ["implicit_function_data"]], ["add", "def", "prod_fun", ["implicit_function_data"]], ["add", "theorem", "prod_fun_apply", ["implicit_function_data"]], ["add", "theorem", "prod_map_implicit_function", ["implicit_function_data"]], ["add", "theorem", "pt_mem_to_local_homeomorph_source", ["implicit_function_data"]], ["add", "theorem", "right_map_implicit_function", ["implicit_function_data"]], ["add", "def", "to_local_homeomorph", ["implicit_function_data"]], ["add", "theorem", "to_local_homeomorph_apply", ["implicit_function_data"]], ["add", "theorem", "to_local_homeomorph_coe", ["implicit_function_data"]], ["add", "structure", "implicit_function_data", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "is_O_comp", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "is_complete_ker", ["continuous_linear_map"]]]}]}, {"timestamp": 1590485624, "sha": "b4d4d9aa", "message": "feat(ring_theory/algebra): more on restrict_scalars (#2445)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "restrict_scalars_equiv", ["algebra"]], ["add", "theorem", "restrict_scalars_equiv_apply", ["algebra"]], ["add", "theorem", "restrict_scalars_equiv_symm_apply", ["algebra"]], ["mod", "def", "restrict_scalars", ["linear_map"]], ["add", "theorem", "smul_apply", ["linear_map_algebra_module"]], ["add", "def", "restrict_scalars'", ["module"]], ["mod", "def", "restrict_scalars", ["module"]], ["add", "theorem", "restrict_scalars_smul_def", ["module"]], ["add", "theorem", "restrict_scalars_ker", []], ["add", "def", "restrict_scalars", ["submodule"]], ["add", "theorem", "restrict_scalars_bot", ["submodule"]], ["add", "theorem", "restrict_scalars_mem", ["submodule"]], ["add", "theorem", "restrict_scalars_top", ["submodule"]]]}]}, {"timestamp": 1590480711, "sha": "ea403b34", "message": "feat(algebra/group_with_zero): mul_self_mul_inv (#2795)\nI found this lemma was useful for simplifying some expressions without\nneeding to split into cases or provide a proof that the denominator is\nnonzero, and it doesn't show up with library_search.", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "div_div_self", []], ["add", "theorem", "div_self_mul_self", []], ["add", "theorem", "inv_mul_mul_self", []], ["add", "theorem", "mul_inv_mul_self", []], ["add", "theorem", "mul_self_div_self", []], ["add", "theorem", "mul_self_mul_inv", []]]}]}, {"timestamp": 1590475278, "sha": "1c265e26", "message": "feat(data/nat/basic): with_bot lemmas (#2822)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "coe_nonneg", ["nat", "with_bot"]], ["add", "theorem", "lt_zero_iff", ["nat", "with_bot"]]]}]}, {"timestamp": 1590469600, "sha": "9bb99568", "message": "feat(data/nat/basic): inequalities (#2801)\nAdds some simple inequalities about `nat.pow`.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "lt_two_pow", ["nat"]], ["add", "theorem", "one_le_pow'", ["nat"]], ["add", "theorem", "one_le_pow", ["nat"]], ["add", "theorem", "one_le_two_pow", ["nat"]], ["add", "theorem", "one_lt_pow'", ["nat"]], ["add", "theorem", "one_lt_pow", ["nat"]], ["add", "theorem", "one_lt_two_pow'", ["nat"]], ["add", "theorem", "one_lt_two_pow", ["nat"]]]}]}, {"timestamp": 1590454743, "sha": "4b616e6d", "message": "feat(category_theory/limits): transport lemmas for kernels (#2779)", "changes": [{"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "cokernel_iso", ["category_theory", "limits", "cokernel"]], ["add", "def", "of_iso_comp", ["category_theory", "limits", "cokernel"]], ["add", "def", "cokernel_iso", ["category_theory", "limits", "is_cokernel"]], ["add", "def", "of_iso_comp", ["category_theory", "limits", "is_cokernel"]], ["add", "def", "iso_kernel", ["category_theory", "limits", "is_kernel"]], ["add", "def", "of_comp_iso", ["category_theory", "limits", "is_kernel"]], ["add", "def", "iso_kernel", ["category_theory", "limits", "kernel"]], ["add", "def", "of_comp_iso", ["category_theory", "limits", "kernel"]]]}]}, {"timestamp": 1590438032, "sha": "aad2dfc4", "message": "fix(group_with_zero): fix definition of comm_monoid_with_zero (#2818)\nAlso generate instance comm_group_with_zero -> comm_monoid_with_zero.", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}]}, {"timestamp": 1590418983, "sha": "ae5b55bd", "message": "feat(algebra/ring): ring_hom.map_dvd (#2813)", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "map_dvd", ["ring_hom"]]]}]}, {"timestamp": 1590411028, "sha": "52b839f3", "message": "feat(data/polynomial): is_unit_C (#2812)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "is_unit_C", ["polynomial"]]]}]}, {"timestamp": 1590411026, "sha": "3e0668e0", "message": "feat(linear_algebra/projection): add `equiv_prod_of_surjective_of_is_compl` (#2787)\nIf kernels of two surjective linear maps `f`, `g` are complement subspaces,\nthen `x ↦ (f x, g x)` defines a linear equivalence.\nI also add a version of this equivalence for continuous maps.\nDepends on #2785", "changes": [{"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": [["add", "theorem", "coe_equiv_prod_of_surjective_of_is_compl", ["continuous_linear_map"]], ["add", "def", "equiv_prod_of_surjective_of_is_compl", ["continuous_linear_map"]], ["add", "theorem", "equiv_prod_of_surjective_of_is_compl_apply", ["continuous_linear_map"]], ["add", "theorem", "equiv_prod_of_surjective_of_is_compl_to_linear_equiv", ["continuous_linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["add", "theorem", "coe_equiv_prod_of_surjective_of_is_compl", ["linear_map"]], ["add", "def", "equiv_prod_of_surjective_of_is_compl", ["linear_map"]], ["add", "theorem", "equiv_prod_of_surjective_of_is_compl_apply", ["linear_map"]], ["mod", "theorem", "is_compl_of_proj", ["linear_map"]], ["mod", "theorem", "ker_id_sub_eq_of_proj", ["linear_map"]], ["add", "theorem", "range_eq_of_proj", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1590408469, "sha": "60f0b012", "message": "feat(logic/function): define `semiconj` and `commute` (#2788)", "changes": [{"oldPath": null, "newPath": "src/logic/function/conjugate.lean", "changes": [["add", "theorem", "comp_left", ["function", "commute"]], ["add", "theorem", "comp_right", ["function", "commute"]], ["add", "theorem", "id_left", ["function", "commute"]], ["add", "theorem", "id_right", ["function", "commute"]], ["add", "theorem", "refl", ["function", "commute"]], ["add", "theorem", "symm", ["function", "commute"]], ["add", "def", "commute", ["function"]], ["add", "theorem", "commute", ["function", "semiconj"]], ["add", "theorem", "comp_left", ["function", "semiconj"]], ["add", "theorem", "comp_right", ["function", "semiconj"]], ["add", "theorem", "id_left", ["function", "semiconj"]], ["add", "theorem", "id_right", ["function", "semiconj"]], ["add", "theorem", "inverses_right", ["function", "semiconj"]], ["add", "def", "semiconj", ["function"]], ["add", "theorem", "comp", ["function", "semiconj₂"]], ["add", "theorem", "id_left", ["function", "semiconj₂"]], ["add", "def", "semiconj₂", ["function"]]]}]}, {"timestamp": 1590401893, "sha": "96f318c5", "message": "feat(algebra/group_power): int.nat_abs_pow_two (#2811)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "nat_abs_pow_two", ["int"]]]}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1590401891, "sha": "9da47ada", "message": "feat(data/zmod): lemmas about coercions to zmod (#2802)\nI'm not particularly happy with the location of these new lemmas within the file `data.zmod`. If anyone has a suggestion that they should be some particular place higher or lower in the file, that would be welcome.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "int_coe_eq_int_coe_iff", ["char_p"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_mod_int", ["zmod"]], ["add", "theorem", "int_coe_eq_int_coe_iff", ["zmod"]], ["add", "theorem", "int_coe_zmod_eq_zero_iff_dvd", ["zmod"]], ["add", "theorem", "nat_coe_eq_nat_coe_iff", ["zmod"]], ["add", "theorem", "nat_coe_zmod_eq_zero_iff_dvd", ["zmod"]]]}]}, {"timestamp": 1590396540, "sha": "dd062f02", "message": "feat(data/nat/prime): pow_not_prime (#2810)", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "pow_not_prime", ["nat", "prime"]]]}]}, {"timestamp": 1590391448, "sha": "a2d50075", "message": "chore(topology/algebra/module): prove `fst.prod snd = id` (#2806)", "changes": [{"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "fst_prod_snd", ["continuous_linear_map"]]]}]}, {"timestamp": 1590391447, "sha": "ccf646d3", "message": "chore(set_theory/ordinal): use a `protected lemma` to drop a `nolint` (#2805)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "div_def", ["ordinal"]], ["del", "def", "div_def", ["ordinal"]]]}]}, {"timestamp": 1590391445, "sha": "a3b3aa62", "message": "fix(tactic/norm_num): workaround int.sub unfolding bug (#2804)\nFixes https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/certificates.20for.20calculations/near/198631936 . Or rather, it works around an issue in how the kernel unfolds applications. The real fix is probably to adjust the definitional height or other heuristics around `add_group_has_sub` and `int.sub` so that tries to prove that they are defeq that way rather than unfolding `bit0` and `bit1`. Here is a MWE for the issue:\n```lean\nexample : int.has_sub = add_group_has_sub := rfl\nexample :\n (@has_sub.sub ℤ int.has_sub 5000 2 : ℤ) =\n (@has_sub.sub ℤ add_group_has_sub 5000 2) := rfl -- deep recursion\n```", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["add", "theorem", "int_sub_hack", ["norm_num"]]]}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1590388544, "sha": "6552f21e", "message": "feat(algebra/add_torsor): torsors of additive group actions (#2720)\nDefine torsors of additive group actions, to the extent needed for\n(and with notation motivated by) affine spaces, to the extent needed\nfor Euclidean spaces. See\nhttps://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Some.20olympiad.20formalisations\nfor the discussion leading to this particular structure.", "changes": [{"oldPath": null, "newPath": "src/algebra/add_torsor.lean", "changes": [["add", "theorem", "vadd_assoc", ["add_action"]], ["add", "theorem", "vadd_comm", ["add_action"]], ["add", "theorem", "vadd_left_cancel", ["add_action"]], ["add", "theorem", "zero_vadd", ["add_action"]], ["add", "theorem", "eq_of_vsub_eq_zero", ["add_torsor"]], ["add", "theorem", "neg_vsub_eq_vsub_rev", ["add_torsor"]], ["add", "theorem", "vadd_right_cancel", ["add_torsor"]], ["add", "theorem", "vadd_vsub", ["add_torsor"]], ["add", "theorem", "vadd_vsub_assoc", ["add_torsor"]], ["add", "theorem", "vsub_add_vsub_cancel", ["add_torsor"]], ["add", "theorem", "vsub_eq_zero_iff_eq", ["add_torsor"]], ["add", "theorem", "vsub_self", ["add_torsor"]], ["add", "def", "vsub_set", ["add_torsor"]], ["add", "theorem", "vsub_sub_vsub_left_cancel", ["add_torsor"]], ["add", "theorem", "vsub_sub_vsub_right_cancel", ["add_torsor"]], ["add", "theorem", "vsub_vadd", ["add_torsor"]], ["add", "theorem", "vsub_vadd_eq_vsub_sub", ["add_torsor"]]]}]}, {"timestamp": 1590383119, "sha": "518d0fd9", "message": "feat(data/int/basic): eq_zero_of_dvd_of_nonneg_of_lt (#2803)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "eq_zero_of_dvd_of_nonneg_of_lt", ["int"]], ["add", "theorem", "nat_abs_lt_nat_abs_of_nonneg_of_lt", ["int"]]]}]}, {"timestamp": 1590346934, "sha": "8d352b20", "message": "feat(char_p): generalize zmod.neg_one_ne_one (#2796)", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "neg_one_ne_one", ["char_p"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1590342738, "sha": "61b57cd7", "message": "chore(scripts): update nolints.txt (#2799)\nI am happy to remove some nolints for you!", "changes": []}, {"timestamp": 1590339839, "sha": "1445e088", "message": "chore(scripts): update nolints.txt (#2798)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590336844, "sha": "8590081f", "message": "feat(category_theory): Product comparison (#2753)\nConstruct the product comparison morphism, and show it's an iso iff F preserves binary products.", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "prod_comparison", ["category_theory", "limits"]], ["add", "theorem", "prod_comparison_natural", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/preserve_binary_products.lean", "changes": [["add", "def", "alternative_cone", ["category_theory", "limits"]], ["add", "def", "alternative_cone_is_limit", ["category_theory", "limits"]], ["add", "def", "preserves_binary_prod_of_prod_comparison_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1590332827, "sha": "292fc042", "message": "feat(category_theory): adjunction convenience defs (#2754)\nTransport adjunctions along natural isomorphisms, and `is_left_adjoint` or `is_right_adjoint` versions of existing adjunction properties.", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "def", "equiv_homset_left_of_nat_iso", ["category_theory", "adjunction"]], ["add", "theorem", "equiv_homset_left_of_nat_iso_apply", ["category_theory", "adjunction"]], ["add", "theorem", "equiv_homset_left_of_nat_iso_symm_apply", ["category_theory", "adjunction"]], ["add", "def", "equiv_homset_right_of_nat_iso", ["category_theory", "adjunction"]], ["add", "theorem", "equiv_homset_right_of_nat_iso_apply", ["category_theory", "adjunction"]], ["add", "theorem", "equiv_homset_right_of_nat_iso_symm_apply", ["category_theory", "adjunction"]], ["add", "def", "left_adjoint_of_nat_iso", ["category_theory", "adjunction"]], ["add", "def", "of_nat_iso_left", ["category_theory", "adjunction"]], ["add", "def", "of_nat_iso_right", ["category_theory", "adjunction"]], ["add", "def", "right_adjoint_of_nat_iso", ["category_theory", "adjunction"]]]}]}, {"timestamp": 1590311351, "sha": "2ef444af", "message": "feat(linear_algebra/basic): range of `linear_map.prod` (#2785)\nAlso make `ker_prod` a `simp` lemma.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "ker_prod", ["linear_map"]], ["add", "theorem", "range_prod_eq", ["linear_map"]], ["add", "theorem", "range_prod_le", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "eq_symm_apply", ["continuous_linear_equiv"]], ["add", "theorem", "symm_apply_eq", ["continuous_linear_equiv"]], ["add", "theorem", "ker_prod", ["continuous_linear_map"]], ["add", "theorem", "range_prod_eq", ["continuous_linear_map"]], ["add", "theorem", "range_prod_le", ["continuous_linear_map"]]]}]}, {"timestamp": 1590305861, "sha": "5449203f", "message": "chore(order/basic): change \"minimum\" in descriptions to \"minimal\" (#2789)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}]}, {"timestamp": 1590239595, "sha": "79e296bd", "message": "doc(archive/100-theorems-list): Update README.md (#2750)\nMaking the 100.yaml file more discoverable.", "changes": [{"oldPath": "archive/100-theorems-list/README.md", "newPath": "archive/100-theorems-list/README.md", "changes": []}]}, {"timestamp": 1590236818, "sha": "2a3f59a1", "message": "chore(scripts): update nolints.txt (#2782)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590231674, "sha": "2b79f1da", "message": "feat(ring_theory/ideal_operations): lemmas about ideals and galois connections (#2767)\ndepends on #2766", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "le_map_Sup", ["monotone"]], ["add", "theorem", "map_Inf_le", ["monotone"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "l_unique", ["galois_connection"]], ["add", "theorem", "u_unique", ["galois_connection"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "comap_Inf", ["ideal"]], ["add", "theorem", "comap_comap", ["ideal"]], ["add", "theorem", "comap_id", ["ideal"]], ["add", "theorem", "comap_infi", ["ideal"]], ["add", "theorem", "comap_injective_of_surjective", ["ideal"]], ["add", "theorem", "comap_map_comap", ["ideal"]], ["mod", "theorem", "comap_top", ["ideal"]], ["add", "theorem", "gc_map_comap", ["ideal"]], ["add", "def", "gi_map_comap", ["ideal"]], ["add", "theorem", "le_comap_map", ["ideal"]], ["add", "theorem", "le_comap_of_map_le", ["ideal"]], ["add", "theorem", "map_Sup", ["ideal"]], ["mod", "theorem", "map_bot", ["ideal"]], ["add", "theorem", "map_comap_le", ["ideal"]], ["add", "theorem", "map_comap_map", ["ideal"]], ["add", "theorem", "map_eq_bot_iff_le_ker", ["ideal"]], ["add", "theorem", "map_id", ["ideal"]], ["add", "theorem", "map_inf_comap_of_surjective", ["ideal"]], ["add", "theorem", "map_infi_comap_of_surjective", ["ideal"]], ["add", "theorem", "map_le_of_le_comap", ["ideal"]], ["add", "theorem", "map_map", ["ideal"]], ["mod", "theorem", "map_sup", ["ideal"]], ["add", "theorem", "map_sup_comap_of_surjective", ["ideal"]], ["add", "theorem", "map_supr", ["ideal"]], ["add", "theorem", "map_supr_comap_of_surjective", ["ideal"]], ["add", "theorem", "map_surjective_of_surjective", ["ideal"]], ["add", "theorem", "mul_le_left", ["ideal"]], ["add", "theorem", "mul_le_right", ["ideal"]], ["add", "theorem", "mul_left_self_sup", ["ideal"]], ["add", "theorem", "mul_right_self_sup", ["ideal"]], ["add", "theorem", "sup_mul_left_self", ["ideal"]], ["add", "theorem", "sup_mul_right_self", ["ideal"]], ["mod", "theorem", "annihilator_supr", ["submodule"]], ["mod", "theorem", "infi_colon_supr", ["submodule"]]]}]}, {"timestamp": 1590226386, "sha": "ceb13bad", "message": "chore(order/basic): add `monotone.order_dual`, `strict_mono.order_dual` (#2778)\nAlso split long lines and lint.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "def", "decidable_linear_order_of_STO'", []], ["mod", "theorem", "swap", ["is_strict_total_order'"]], ["mod", "theorem", "le_of_forall_ge_of_dense", []], ["mod", "theorem", "le_of_forall_le_of_dense", []], ["add", "theorem", "order_dual", ["monotone"]], ["add", "theorem", "order_dual", ["strict_mono"]]]}]}, {"timestamp": 1590226385, "sha": "90abd3bb", "message": "feat(data/fintype): finset.univ_map_embedding (#2765)\nAdds the lemma\n```\nlemma finset.univ_map_embedding {α : Type*} [fintype α] (e : α ↪ α) :\n (finset.univ).map e = finset.univ :=\n```", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_map_embedding", ["finset"]], ["add", "theorem", "univ_map_equiv_to_embedding", ["finset"]], ["add", "theorem", "equiv_of_fintype_self_embedding_to_embedding", ["function", "embedding"]]]}]}, {"timestamp": 1590226382, "sha": "69485051", "message": "feat(data/polynomial): prime_of_degree_eq_one_of_monic (#2745)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "degree_normalize", ["polynomial"]], ["add", "theorem", "irreducible_of_degree_eq_one_of_monic", ["polynomial"]], ["add", "theorem", "prime_of_degree_eq_one", ["polynomial"]], ["add", "theorem", "prime_of_degree_eq_one_of_monic", ["polynomial"]]]}]}, {"timestamp": 1590219860, "sha": "8c1793fe", "message": "chore(data/equiv): make `equiv.ext` args use { } (#2776)\nOther changes:\n* rename lemmas `eq_of_to_fun_eq` to `coe_fn_injective`;\n* add `left_inverse.eq_right_inverse` and use it to prove `equiv.ext`.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "coe_fn_injective", ["equiv"]], ["del", "theorem", "eq_of_to_fun_eq", ["equiv"]], ["mod", "theorem", "ext", ["equiv"]], ["mod", "theorem", "ext", ["equiv", "perm"]], ["mod", "theorem", "symm_trans", ["equiv"]], ["mod", "theorem", "trans_symm", ["equiv"]]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "ext", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "eq_right_inverse", ["function", "left_inverse"]]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "theorem", "coe_fn_injective", ["order_embedding"]], ["del", "theorem", "eq_of_to_fun_eq", ["order_embedding"]], ["add", "theorem", "coe_fn_injective", ["order_iso"]], ["del", "theorem", "eq_of_to_fun_eq", ["order_iso"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1590140463, "sha": "f66caaad", "message": "chore(scripts): update nolints.txt (#2777)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590134998, "sha": "c6aab262", "message": "feat(algebra/invertible): invertible_of_ring_char_not_dvd (#2775)\n```\ndef invertible_of_ring_char_not_dvd {R : Type*} [field R] {t : ℕ} (not_dvd : ¬(ring_char R ∣ t)) :\n invertible (t : R)\n```", "changes": [{"oldPath": "src/algebra/invertible.lean", "newPath": "src/algebra/invertible.lean", "changes": [["add", "def", "invertible_of_char_p_not_dvd", []], ["add", "def", "invertible_of_ring_char_not_dvd", []]]}]}, {"timestamp": 1590134996, "sha": "58789f7d", "message": "feat(analysis/normed_space/banach): add `continuous_linear_equiv.of_bijective` (#2774)", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "coe_fn_of_bijective", ["continuous_linear_equiv"]], ["add", "theorem", "of_bijective_apply_symm_apply", ["continuous_linear_equiv"]], ["add", "theorem", "of_bijective_symm_apply_apply", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1590132502, "sha": "80ad9edc", "message": "refactor(ring_theory/localization): characterise ring localizations up to isomorphism (#2714)\nBeginnings of ```ring_theory/localization``` refactor from #2675.\nIt's a bit sad that using the characteristic predicate means Lean can't infer the R-algebra structure of the localization. I've tried to get round this, but I'm not using •, and I've duplicated some fairly random lemmas about modules & algebras to take ```f``` as an explicit argument - mostly just what I needed to make ```fractional_ideal``` work. Should I duplicate more?\nMy comments in the ```fractional_ideal``` docs about 'preserving definitional equalities' wrt getting an R-module structure from an R-algebra structure: do they make sense? I had some errors about definitional equality of instances which I *think* I fixed after making sure the R-module structure always came from the R-algebra structure, as well as doing a few other things. I never chased up exactly what the errors were or how they went away, so I'm just guessing at my explanation.\nThings I've got left to PR to ```ring_theory/localization``` after this: \n- ```away``` (localization at submonoid generated by one element)\n- localization as a quotient type & proof it satisfies the char pred\n- localization at the complement of a prime ideal and the fact this is a local ring\n- more lemmas about fields of fractions\n- the order embedding for ideals of the localization vs. ideals of the original ring", "changes": [{"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["mod", "theorem", "bot_eq_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "coe_mem_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "div_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "div_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "eq_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "ext", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_div_of_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_inf", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_of_subset_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "fractional_sup", ["ring", "fractional_ideal"]], ["mod", "theorem", "inv_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "le_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_one_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "mem_zero_iff", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_left_mono", ["ring", "fractional_ideal"]], ["mod", "theorem", "mul_right_mono", ["ring", "fractional_ideal"]], ["mod", "theorem", "ne_zero_of_mul_eq_one", ["ring", "fractional_ideal"]], ["mod", "theorem", "nonzero_iff_val_nonzero", ["ring", "fractional_ideal"]], ["mod", "theorem", "right_inverse_eq", ["ring", "fractional_ideal"]], ["mod", "theorem", "sup_eq_add", ["ring", "fractional_ideal"]], ["mod", "theorem", "val_add", ["ring", "fractional_ideal"]], ["mod", "theorem", "val_mul", ["ring", "fractional_ideal"]], ["mod", "theorem", "val_zero", ["ring", "fractional_ideal"]], ["mod", "theorem", "zero_le", ["ring", "fractional_ideal"]], ["mod", "def", "fractional_ideal", ["ring"]], ["mod", "def", "is_fractional", ["ring"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "eq_zero_of_ne_zero_of_mul_eq_zero", []], ["add", "def", "to_integral_domain", ["fraction_map"]], ["add", "def", "fraction_map", []], ["del", "def", "at_prime", ["localization"]], ["del", "def", "inv_self", ["localization", "away"]], ["del", "theorem", "lift_coe", ["localization", "away"]], ["del", "theorem", "lift_comp_of", ["localization", "away"]], ["del", "theorem", "lift_of", ["localization", "away"]], ["del", "def", "away", ["localization"]], ["add", "def", "codomain", ["localization"]], ["del", "theorem", "coe_add", ["localization"]], ["del", "theorem", "coe_is_unit'", ["localization"]], ["del", "theorem", "coe_is_unit", ["localization"]], ["del", "theorem", "coe_mul", ["localization"]], ["del", "theorem", "coe_mul_eq_smul", ["localization"]], ["del", "theorem", "coe_mul_mk", ["localization"]], ["del", "theorem", "coe_neg", ["localization"]], ["del", "theorem", "coe_one", ["localization"]], ["del", "theorem", "coe_pow", ["localization"]], ["del", "theorem", "coe_smul", ["localization"]], ["del", "theorem", "coe_sub", ["localization"]], ["del", "theorem", "coe_zero", ["localization"]], ["add", "theorem", "epic_of_localization_map", ["localization"]], ["add", "theorem", "eq_iff_eq", ["localization"]], ["add", "theorem", "eq_iff_exists", ["localization"]], ["add", "theorem", "eq_mk'_iff_mul_eq", ["localization"]], ["add", "theorem", "eq_of_eq", ["localization"]], ["add", "theorem", "eq_zero_of_fst_eq_zero", ["localization"]], ["del", "def", "equiv_of_equiv", ["localization"]], ["add", "theorem", "ext", ["localization"]], ["add", "theorem", "ext_iff", ["localization"]], ["del", "theorem", "eq_zero_of", ["localization", "fraction_ring"]], ["del", "theorem", "eq_zero_of_ne_zero_of_mul_eq_zero", ["localization", "fraction_ring"]], ["del", "def", "equiv_of_equiv", ["localization", "fraction_ring"]], ["del", "def", "inv_aux", ["localization", "fraction_ring"]], ["del", "def", "map", ["localization", "fraction_ring"]], ["del", "theorem", "map_coe", ["localization", "fraction_ring"]], ["del", "theorem", "map_comp_of", ["localization", "fraction_ring"]], ["del", "theorem", "map_of", ["localization", "fraction_ring"]], ["del", "theorem", "mem_non_zero_divisors_iff_ne_zero", ["localization", "fraction_ring"]], ["del", "theorem", "mk_eq_div'", ["localization", "fraction_ring"]], ["del", "theorem", "mk_eq_div", ["localization", "fraction_ring"]], ["del", "theorem", "mk_inv'", ["localization", "fraction_ring"]], ["del", "theorem", "mk_inv", ["localization", "fraction_ring"]], ["del", "theorem", "injective", ["localization", "fraction_ring", "of"]], ["del", "def", "fraction_ring", ["localization"]], ["mod", "def", "is_integer", ["localization"]], ["mod", "theorem", "is_integer_add", ["localization"]], ["del", "theorem", "is_integer_coe", ["localization"]], ["mod", "theorem", "is_integer_mul", ["localization"]], ["mod", "theorem", "is_integer_smul", ["localization"]], ["add", "theorem", "is_unit_comp", ["localization"]], ["del", "def", "le_order_embedding", ["localization"]], ["del", "def", "lift'", ["localization"]], ["del", "theorem", "lift'_apply_coe", ["localization"]], ["del", "theorem", "lift'_coe", ["localization"]], ["del", "theorem", "lift'_comp_of", ["localization"]], ["del", "theorem", "lift'_mk", ["localization"]], ["del", "theorem", "lift'_of", ["localization"]], ["del", "theorem", "lift_apply_coe", ["localization"]], ["del", "theorem", "lift_coe", ["localization"]], ["add", "theorem", "lift_comp", ["localization"]], ["del", "theorem", "lift_comp_of", ["localization"]], ["add", "theorem", "lift_eq", ["localization"]], ["add", "theorem", "lift_eq_iff", ["localization"]], ["add", "theorem", "lift_id", ["localization"]], ["add", "theorem", "lift_injective_iff", ["localization"]], ["add", "theorem", "lift_left_inverse", ["localization"]], ["add", "theorem", "lift_mk'", ["localization"]], ["add", "theorem", "lift_mk'_spec", ["localization"]], ["del", "theorem", "lift_of", ["localization"]], ["add", "theorem", "lift_of_comp", ["localization"]], ["add", "theorem", "lift_surjective_iff", ["localization"]], ["add", "theorem", "lift_unique", ["localization"]], ["mod", "def", "lin_coe", ["localization"]], ["del", "theorem", "lin_coe_apply", ["localization"]], ["del", "def", "map", ["localization"]], ["del", "theorem", "map_coe", ["localization"]], ["del", "theorem", "map_comap", ["localization"]], ["add", "theorem", "map_comp", ["localization"]], ["mod", "theorem", "map_comp_map", ["localization"]], ["del", "theorem", "map_comp_of", ["localization"]], ["add", "theorem", "map_eq", ["localization"]], ["mod", "theorem", "map_id", ["localization"]], ["add", "theorem", "map_left_cancel", ["localization"]], ["mod", "theorem", "map_map", ["localization"]], ["add", "theorem", "map_mk'", ["localization"]], ["del", "theorem", "map_of", ["localization"]], ["add", "theorem", "map_right_cancel", ["localization"]], ["add", "theorem", "map_units", ["localization"]], ["add", "theorem", "mem_coe", ["localization"]], ["add", "theorem", "mk'_add", ["localization"]], ["add", "theorem", "mk'_eq_iff_eq", ["localization"]], ["add", "theorem", "mk'_eq_iff_eq_mul", ["localization"]], ["add", "theorem", "mk'_eq_iff_mk'_eq", ["localization"]], ["add", "theorem", "mk'_eq_mul_mk'_one", ["localization"]], ["add", "theorem", "mk'_eq_of_eq", ["localization"]], ["add", "theorem", "mk'_mul", ["localization"]], ["add", "theorem", "mk'_mul_cancel_left", ["localization"]], ["add", "theorem", "mk'_mul_cancel_right", ["localization"]], ["add", "theorem", "mk'_one", ["localization"]], ["add", "theorem", "mk'_sec", ["localization"]], ["add", "theorem", "mk'_self''", ["localization"]], ["add", "theorem", "mk'_self'", ["localization"]], ["add", "theorem", "mk'_self", ["localization"]], ["add", "theorem", "mk'_spec'", ["localization"]], ["add", "theorem", "mk'_spec", ["localization"]], ["del", "def", "mk", ["localization"]], ["del", "theorem", "mk_eq", ["localization"]], ["del", "theorem", "mk_eq_mul_mk_one", ["localization"]], ["del", "theorem", "mk_mul_cancel_left", ["localization"]], ["del", "theorem", "mk_mul_cancel_right", ["localization"]], ["del", "theorem", "mk_mul_mk", ["localization"]], ["del", "theorem", "mk_self''", ["localization"]], ["del", "theorem", "mk_self'", ["localization"]], ["del", "theorem", "mk_self", ["localization"]], ["del", "theorem", "mul_coe_eq_smul", ["localization"]], ["add", "theorem", "mul_mk'_eq_mk'_of_mul", ["localization"]], ["del", "def", "non_zero_divisors", ["localization"]], ["del", "theorem", "non_zero_divisors_one_val", ["localization"]], ["del", "def", "of", ["localization"]], ["del", "theorem", "of_add", ["localization"]], ["mod", "theorem", "of_id", ["localization"]], ["del", "theorem", "of_is_unit'", ["localization"]], ["del", "theorem", "of_is_unit", ["localization"]], ["del", "theorem", "of_mul", ["localization"]], ["del", "theorem", "of_neg", ["localization"]], ["del", "theorem", "of_one", ["localization"]], ["del", "theorem", "of_pow", ["localization"]], ["del", "theorem", "of_smul", ["localization"]], ["del", "theorem", "of_sub", ["localization"]], ["del", "theorem", "of_zero", ["localization"]], ["del", "def", "r", ["localization"]], ["del", "theorem", "r_of_eq", ["localization"]], ["del", "theorem", "refl", ["localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq", ["localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq_map", ["localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_eq_map_apply", ["localization"]], ["add", "theorem", "ring_equiv_of_ring_equiv_mk'", ["localization"]], ["add", "theorem", "sec_spec'", ["localization"]], ["add", "theorem", "sec_spec", ["localization"]], ["add", "theorem", "surj", ["localization"]], ["del", "theorem", "symm", ["localization"]], ["add", "def", "to_map", ["localization"]], ["add", "theorem", "to_map_injective", ["localization"]], ["del", "def", "to_units", ["localization"]], ["del", "theorem", "to_units_coe", ["localization"]], ["del", "theorem", "trans", ["localization"]], ["add", "structure", "localization", []], ["del", "def", "localization", []], ["add", "theorem", "mem_non_zero_divisors_iff_ne_zero", []], ["add", "def", "non_zero_divisors", []], ["add", "def", "to_localization", ["ring_hom"]]]}]}, {"timestamp": 1590128796, "sha": "a012d76d", "message": "chore(linear_algebra/projection): use implicit args in lemmas (#2773)", "changes": [{"oldPath": "src/analysis/normed_space/complemented.lean", "newPath": "src/analysis/normed_space/complemented.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["add", "theorem", "linear_proj_of_is_compl_comp_subtype", ["submodule"]]]}]}, {"timestamp": 1590128794, "sha": "749e39fe", "message": "feat(category_theory): preadditive binary biproducts (#2747)\nThis PR introduces \"preadditive binary biproducts\", which correspond to the second definition of biproducts given in #2177.\n* Preadditive binary biproducts are binary biproducts.\n* In a preadditive category, a binary product is a preadditive binary biproduct.\n* This directly implies that `AddCommGroup` has preadditive binary biproducts. The existence of binary coproducts in `AddCommGroup` is then a consequence of abstract nonsense.", "changes": [{"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "theorem", "fst_add_snd", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inl_add_inr", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inl_fst", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inl_snd", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inr_fst", ["category_theory", "limits", "biprod"]], ["add", "theorem", "inr_snd", ["category_theory", "limits", "biprod"]], ["add", "theorem", "lift_desc", ["category_theory", "limits", "biprod"]], ["add", "theorem", "total", ["category_theory", "limits", "biprod"]], ["add", "def", "of_has_colimit_pair", ["category_theory", "limits", "has_preadditive_binary_biproduct"]], ["add", "def", "of_has_limit_pair", ["category_theory", "limits", "has_preadditive_binary_biproduct"]], ["add", "def", "has_preadditive_binary_biproducts_of_has_binary_coproducts", ["category_theory", "limits"]], ["add", "def", "has_preadditive_binary_biproducts_of_has_binary_products", ["category_theory", "limits"]]]}]}, {"timestamp": 1590124126, "sha": "5585e3cb", "message": "chore(linear_algebra/basic): redefine le on submodule (#2766)\nPreviously, to prove an `S \\le T`, there would be a coercion in the statement after `intro x`. This fixes that.", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}]}, {"timestamp": 1590101622, "sha": "a9960cef", "message": "chore(scripts): update nolints.txt (#2771)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1590093343, "sha": "6c71874b", "message": "feat(analysis/normed_space): complemented subspaces (#2738)\nDefine complemented subspaces and prove some basic facts.", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/complemented.lean", "changes": [["add", "theorem", "ker_closed_complemented_of_finite_dimensional_range", ["continuous_linear_map"]], ["add", "theorem", "closed_complemented_iff_has_closed_compl", ["subspace"]], ["add", "theorem", "closed_complemented_of_closed_compl", ["subspace"]], ["add", "theorem", "closed_complemented_of_quotient_finite_dimensional", ["subspace"]], ["add", "theorem", "coe_continuous_linear_proj_of_closed_compl'", ["subspace"]], ["add", "theorem", "coe_continuous_linear_proj_of_closed_compl", ["subspace"]], ["add", "theorem", "coe_prod_equiv_of_closed_compl", ["subspace"]], ["add", "theorem", "coe_prod_equiv_of_closed_compl_symm", ["subspace"]], ["add", "def", "linear_proj_of_closed_compl", ["subspace"]], ["add", "def", "prod_equiv_of_closed_compl", ["subspace"]]]}, {"oldPath": "src/linear_algebra/projection.lean", "newPath": "src/linear_algebra/projection.lean", "changes": [["add", "theorem", "ker_id_sub_eq_of_proj", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "closed_complemented_ker_of_right_inverse", ["continuous_linear_map"]], ["add", "theorem", "ker_cod_restrict", ["continuous_linear_map"]], ["add", "theorem", "has_closed_complement", ["submodule", "closed_complemented"]], ["add", "def", "closed_complemented", ["submodule"]], ["add", "theorem", "closed_complemented_bot", ["submodule"]], ["add", "theorem", "closed_complemented_top", ["submodule"]]]}]}, {"timestamp": 1590093341, "sha": "fd45e288", "message": "fix(*): do not nolint simp_nf (#2734)\nThe `nolint simp_nf` for `subgroup.coe_coe` was hiding an actual nontermination issue. Please just ping me if you're unsure about the `simp_nf` linter.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "div_zero", []], ["del", "theorem", "inv_zero", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["del", "theorem", "div_zero'", []], ["add", "theorem", "div_zero", []], ["del", "theorem", "inv_zero'", []], ["add", "theorem", "inv_zero", []]]}, {"oldPath": "src/group_theory/bundled_subgroup.lean", "newPath": "src/group_theory/bundled_subgroup.lean", "changes": []}]}, {"timestamp": 1590087484, "sha": "ec01a0d5", "message": "perf(tactic/lint/simp): speed up `simp_comm` linter (#2760)\nThis is a fairly unimportant linter, but takes 35% of the linting runtime in my unscientific small-case profiling run.", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["mod", "theorem", "xgcd_aux_rec", ["euclidean_domain"]]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["mod", "theorem", "xgcd_aux_rec", ["nat"]]]}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}]}, {"timestamp": 1590075766, "sha": "d532eb60", "message": "feat(order/lattice): sup_left_idem and similar (#2768)", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_left_idem", []], ["add", "theorem", "inf_right_idem", []], ["add", "theorem", "sup_left_idem", []], ["add", "theorem", "sup_right_idem", []]]}]}, {"timestamp": 1590047467, "sha": "951b967d", "message": "refactor(data/nat/basic): use function equality for `iterate` lemmas (#2748)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "iterate_add", ["nat"]], ["add", "theorem", "iterate_add_apply", ["nat"]], ["mod", "theorem", "iterate_succ'", ["nat"]], ["mod", "theorem", "iterate_succ", ["nat"]], ["add", "theorem", "iterate_succ_apply'", ["nat"]], ["add", "theorem", "iterate_succ_apply", ["nat"]], ["mod", "theorem", "iterate_zero", ["nat"]], ["add", "theorem", "iterate_zero_apply", ["nat"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}]}, {"timestamp": 1590003476, "sha": "a540d79b", "message": "chore(archive/sensitivity): Clean up function coercion in sensitivity proof (depends on #2756) (#2758)\nThis formalizes the proof of an old conjecture: `is_awesome Gabriel`. I also took the opportunity to remove type class struggling, which I think is related to the proof of `is_awesome Floris`.\nI think @jcommelin should also update this sensitivity file to use his sum notations if applicable.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": [["del", "def", "add_comm_monoid", ["V"]], ["del", "def", "add_comm_semigroup", ["V"]], ["del", "def", "has_add", ["V"]], ["del", "def", "has_scalar", ["V"]], ["del", "def", "module", ["V"]]]}]}, {"timestamp": 1589998211, "sha": "3c9bf6b8", "message": "chore(scripts): update nolints.txt (#2763)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589988904, "sha": "d6420bdc", "message": "feat(ring_theory/principal_ideal_domain): definition of principal submodule (#2761)\nThis PR generalizes the definition of principal ideals to principal submodules. It turns out that it's essentially enough to replace `ideal R` with `submodule R M` in the relevant places. With this change, it's possible to talk about principal fractional ideals (although that development will have to wait #2714 gets merged).\nSince the PR already changes the variables used in this file, I took the opportunity to rename them so `[ring α]` becomes `[ring R]`.", "changes": [{"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["del", "theorem", "eq_bot_iff_generator_eq_zero", ["ideal", "is_principal"]], ["del", "theorem", "generator_mem", ["ideal", "is_principal"]], ["del", "theorem", "mem_iff_generator_dvd", ["ideal", "is_principal"]], ["del", "theorem", "span_singleton_generator", ["ideal", "is_principal"]], ["mod", "theorem", "to_maximal_ideal", ["is_prime"]], ["mod", "theorem", "mod_mem_iff", []], ["mod", "theorem", "associates_irreducible_iff_prime", ["principal_ideal_domain"]], ["mod", "theorem", "factors_decreasing", ["principal_ideal_domain"]], ["mod", "theorem", "factors_spec", ["principal_ideal_domain"]], ["mod", "theorem", "irreducible_iff_prime", ["principal_ideal_domain"]], ["mod", "theorem", "is_maximal_of_irreducible", ["principal_ideal_domain"]], ["add", "theorem", "eq_bot_iff_generator_eq_zero", ["submodule", "is_principal"]], ["add", "theorem", "generator_mem", ["submodule", "is_principal"]], ["add", "theorem", "mem_iff_eq_smul_generator", ["submodule", "is_principal"]], ["add", "theorem", "mem_iff_generator_dvd", ["submodule", "is_principal"]], ["add", "theorem", "span_singleton_generator", ["submodule", "is_principal"]]]}]}, {"timestamp": 1589988902, "sha": "4c3e1a9d", "message": "feat(algebra): the R-module structure on S-linear maps, for S an R-algebra (#2759)\nI couldn't find this already in mathlib, but perhaps I've missed it.", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "linear_map_algebra_has_scalar", []], ["add", "def", "linear_map_algebra_module", []]]}]}, {"timestamp": 1589988899, "sha": "6df77a61", "message": "chore(*): update to Lean 3.14.0 (#2756)\nThis is an optimistic PR, betting *nothing* will break when moving to Lean 3.14.0.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1589988898, "sha": "164c2e3c", "message": "chore(category_theory): attributes and a transport proof (#2751)\nA couple of cleanups, modified a proof or two so that `@[simps]` can be used, which let me clean up some other proofs. Also a proof that we can transfer that `F` preserves the limit `K` along an isomorphism in `K`.\n(Preparation for some PRs from my topos project)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "def", "refl", ["category_theory", "equivalence"]], ["mod", "def", "symm", ["category_theory", "equivalence"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": [["add", "def", "preserves_limit_of_iso", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "theorem", "hom_inv_id_app", ["category_theory", "nat_iso"]], ["mod", "theorem", "inv_hom_id_app", ["category_theory", "nat_iso"]], ["mod", "theorem", "app", ["category_theory", "nat_iso", "of_components"]], ["mod", "theorem", "hom_app", ["category_theory", "nat_iso", "of_components"]], ["mod", "theorem", "inv_app", ["category_theory", "nat_iso", "of_components"]], ["mod", "def", "of_components", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1589976113, "sha": "ab5d0f15", "message": "feat(category_theory/binary_products): some product lemmas and their dual (#2752)\nA bunch of lemmas about binary products.", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "braid_natural", ["category_theory", "limits"]], ["mod", "theorem", "inl_map", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "inr_map", ["category_theory", "limits", "coprod"]], ["add", "theorem", "map_desc", ["category_theory", "limits", "coprod"]], ["add", "theorem", "coprod_desc_inl_inr", ["category_theory", "limits"]], ["add", "theorem", "coprod_map_comp_id", ["category_theory", "limits"]], ["add", "theorem", "coprod_map_id_comp", ["category_theory", "limits"]], ["add", "theorem", "coprod_map_id_id", ["category_theory", "limits"]], ["add", "theorem", "coprod_map_map", ["category_theory", "limits"]], ["add", "theorem", "lift_map", ["category_theory", "limits", "prod"]], ["mod", "theorem", "map_fst", ["category_theory", "limits", "prod"]], ["mod", "theorem", "map_snd", ["category_theory", "limits", "prod"]], ["mod", "theorem", "symmetry'", ["category_theory", "limits", "prod"]], ["mod", "theorem", "symmetry", ["category_theory", "limits", "prod"]], ["add", "def", "prod_functor_left_comp", ["category_theory", "limits"]], ["add", "theorem", "prod_left_unitor_hom_naturality", ["category_theory", "limits"]], ["add", "theorem", "prod_left_unitor_inv_naturality", ["category_theory", "limits"]], ["add", "theorem", "prod_lift_fst_snd", ["category_theory", "limits"]], ["add", "theorem", "prod_map_comp_id", ["category_theory", "limits"]], ["add", "theorem", "prod_map_id_comp", ["category_theory", "limits"]], ["add", "theorem", "prod_map_id_id", ["category_theory", "limits"]], ["add", "theorem", "prod_map_map", ["category_theory", "limits"]], ["add", "theorem", "prod_right_unitor_hom_naturality", ["category_theory", "limits"]], ["add", "theorem", "prod_right_unitor_inv_naturality", ["category_theory", "limits"]]]}]}, {"timestamp": 1589972624, "sha": "1f002829", "message": "docs(linear_algebra/sesquilinear_form): correct module docs (#2757)\n@PatrickMassot mentioned that the docs for `sesquilinear_form` mention bilinear forms instead in a few places. This PR corrects them to use \"sesquilinear form\" everywhere.", "changes": [{"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}]}, {"timestamp": 1589955502, "sha": "cbe80ed2", "message": "feat(linear_algebra/projection): projection to a subspace (#2739)\nDefine equivalence between complement subspaces and projections.", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "add_mem_iff_left", ["submodule"]], ["mod", "theorem", "add_mem_iff_right", ["submodule"]]]}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "fst_eq_iff", ["prod"]], ["add", "theorem", "snd_eq_iff", ["prod"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_of_eq_apply", ["linear_equiv"]], ["add", "theorem", "coe_of_top_symm_apply", ["linear_equiv"]], ["add", "def", "of_eq", ["linear_equiv"]], ["add", "theorem", "of_eq_symm", ["linear_equiv"]], ["mod", "theorem", "of_top_symm_apply", ["linear_equiv"]], ["add", "theorem", "coe_quotient_inf_to_sup_quotient", ["linear_map"]], ["add", "theorem", "map_eq_top_iff", ["linear_map"]], ["add", "theorem", "map_le_map_iff'", ["linear_map"]], ["mod", "theorem", "map_le_map_iff", ["linear_map"]], ["add", "theorem", "quot_ker_equiv_range_apply_mk", ["linear_map"]], ["add", "theorem", "quot_ker_equiv_range_symm_apply_image", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_apply_mk", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_eq_zero_iff", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_left", ["linear_map"]], ["add", "theorem", "quotient_inf_equiv_sup_quotient_symm_apply_right", ["linear_map"]], ["add", "theorem", "range_range_restrict", ["linear_map"]], ["add", "theorem", "coe_quot_equiv_of_eq_bot_symm", ["submodule"]], ["add", "theorem", "map_mkq_eq_top", ["submodule"]], ["add", "theorem", "mem_left_iff_eq_zero_of_disjoint", ["submodule"]], ["add", "theorem", "mem_right_iff_eq_zero_of_disjoint", ["submodule"]], ["add", "def", "quot_equiv_of_eq_bot", ["submodule"]], ["add", "theorem", "quot_equiv_of_eq_bot_apply_mk", ["submodule"]], ["add", "theorem", "quot_equiv_of_eq_bot_symm_apply", ["submodule"]], ["del", "theorem", "range_range_restrict", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "exists_is_compl", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": null, "newPath": "src/linear_algebra/projection.lean", "changes": [["add", "theorem", "is_compl_of_proj", ["linear_map"]], ["add", "theorem", "linear_proj_of_is_compl_of_proj", ["linear_map"]], ["add", "theorem", "coe_is_compl_equiv_proj_apply", ["submodule"]], ["add", "theorem", "coe_is_compl_equiv_proj_symm_apply", ["submodule"]], ["add", "theorem", "coe_prod_equiv_of_is_compl'", ["submodule"]], ["add", "theorem", "coe_prod_equiv_of_is_compl", ["submodule"]], ["add", "def", "is_compl_equiv_proj", ["submodule"]], ["add", "def", "linear_proj_of_is_compl", ["submodule"]], ["add", "theorem", "linear_proj_of_is_compl_apply_eq_zero_iff", ["submodule"]], ["add", "theorem", "linear_proj_of_is_compl_apply_left", ["submodule"]], ["add", "theorem", "linear_proj_of_is_compl_apply_right'", ["submodule"]], ["add", "theorem", "linear_proj_of_is_compl_apply_right", ["submodule"]], ["add", "theorem", "linear_proj_of_is_compl_idempotent", ["submodule"]], ["add", "theorem", "linear_proj_of_is_compl_ker", ["submodule"]], ["add", "theorem", "linear_proj_of_is_compl_range", ["submodule"]], ["add", "theorem", "mk_quotient_equiv_of_is_compl_apply", ["submodule"]], ["add", "def", "prod_equiv_of_is_compl", ["submodule"]], ["add", "theorem", "prod_equiv_of_is_compl_symm_apply_fst_eq_zero", ["submodule"]], ["add", "theorem", "prod_equiv_of_is_compl_symm_apply_left", ["submodule"]], ["add", "theorem", "prod_equiv_of_is_compl_symm_apply_right", ["submodule"]], ["add", "theorem", "prod_equiv_of_is_compl_symm_apply_snd_eq_zero", ["submodule"]], ["add", "def", "quotient_equiv_of_is_compl", ["submodule"]], ["add", "theorem", "quotient_equiv_of_is_compl_apply_mk_coe", ["submodule"]], ["add", "theorem", "quotient_equiv_of_is_compl_symm_apply", ["submodule"]]]}]}, {"timestamp": 1589927665, "sha": "3c1f9f9c", "message": "feat(data/nat/choose): sum_range_choose_halfway (#2688)\nThis is a lemma on the way to proving that the product of primes less than `n` is less than `4 ^ n`, which is itself a lemma in Bertrand's postulate.\nThe lemma itself is of dubious significance, but it will eventually be necessary for Bertrand, and I want to commit early and often. Brief discussion of this decision at https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Candidate.20for.20inclusion.20in.20mathlib/near/197619722 .\nThis is my second PR to mathlib; the code is definitely verbose and poorly structured, but I don't know how to fix it. I'm expecting almost no lines of the original to remain by the end of this!", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": [["add", "theorem", "sum_range_choose_halfway", []]]}]}, {"timestamp": 1589913507, "sha": "e3aca90a", "message": "feat(logic/basic): spaces with a zero or a one are nonempty (#2743)\nRegister instances that a space with a zero or a one is not empty, with low priority as we don't want to embark on a search for a zero or a one if this is not necessary.\nDiscussion on Zulip at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/inhabited.20and.20nonempty.20instances/near/198030072", "changes": [{"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/group_theory/bundled_subgroup.lean", "newPath": "src/group_theory/bundled_subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1589907643, "sha": "607767e2", "message": "feat(algebra/big_operators): reversing an interval doesn't change the product (#2740)\nAlso use Gauss summation in the Gauss summation formula.\nInspired by #2688", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_Ico_reflect", ["finset"]], ["add", "theorem", "prod_range_reflect", ["finset"]], ["add", "theorem", "sum_Ico_reflect", ["finset"]], ["add", "theorem", "sum_range_reflect", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "image_const_sub", ["finset", "Ico"]], ["add", "theorem", "range_image_pred_top_sub", ["finset"]]]}]}, {"timestamp": 1589903698, "sha": "62c22daf", "message": "fix(ci): replace 2 old secret names (#2744)\n[`lean-3.13.2`](https://github.com/leanprover-community/mathlib/tree/lean-3.13.2) is out of date, since I missed two instances of `DEPLOY_NIGHTLY_GITHUB_TOKEN` in #2737.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1589889010, "sha": "1e185125", "message": "chore(*): remove non-canonical `option.decidable_eq_none` instance (#2741)\nI also removed the hack in `ulower.primcodable` where I had to use `none = o` instead of `o = none`.", "changes": [{"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": [["add", "def", "decidable_eq_none", ["option"]]]}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}]}, {"timestamp": 1589882319, "sha": "93b41e56", "message": "fix(*): put headings in multiline module docs on their own lines (#2742)\nfound using regex: `/-! #([^-/])*$`.\nThese don't render correctly in the mathlib docs. Module doc strings that consist of a heading on its own line are OK so I haven't changed them.\nI also moved some descriptive text from copyright headers to module docs, or removed such text if there was already a module doc string.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1589882317, "sha": "3d948bf1", "message": "feat(analysis/normed_space): interior of `closed_ball` etc (#2723)\n* define `sphere x r`\n* prove formulas for `interior`, `closure`, and `frontier` of open and closed balls in real normed vector spaces.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "closure_ball", []], ["add", "theorem", "frontier_ball", []], ["add", "theorem", "frontier_closed_ball'", []], ["add", "theorem", "frontier_closed_ball", []], ["add", "theorem", "interior_closed_ball'", []], ["add", "theorem", "interior_closed_ball", []], ["mod", "theorem", "eq_top_of_nonempty_interior", ["submodule"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "preimage_interior_subset_interior_preimage", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "ball_eq_empty_iff_nonpos", ["metric"]], ["add", "theorem", "ball_subset_interior_closed_ball", ["metric"]], ["add", "theorem", "ball_union_sphere", ["metric"]], ["add", "theorem", "closed_ball_diff_ball", ["metric"]], ["add", "theorem", "closed_ball_diff_sphere", ["metric"]], ["add", "theorem", "closed_ball_eq_empty_iff_neg", ["metric"]], ["add", "theorem", "closed_ball_zero", ["metric"]], ["add", "theorem", "closure_ball_subset_closed_ball", ["metric"]], ["add", "theorem", "frontier_ball_subset_sphere", ["metric"]], ["add", "theorem", "frontier_closed_ball_subset_sphere", ["metric"]], ["add", "def", "sphere", ["metric"]], ["add", "theorem", "sphere_disjoint_ball", ["metric"]], ["add", "theorem", "sphere_subset_closed_ball", ["metric"]], ["add", "theorem", "sphere_union_ball", ["metric"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}]}, {"timestamp": 1589876889, "sha": "f2cb5462", "message": "fix(ci): setup git before nolints, rename secret (#2737)\nOops, I broke the update nolints step on master. This should fix it.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}, {"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}]}, {"timestamp": 1589876888, "sha": "3968f7f4", "message": "feat(linear_algebra): equiv_of_is_basis' and module.fintype_of_fintype (#2735)", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "def", "equiv_of_is_basis'", []], ["mod", "def", "equiv_of_is_basis", []], ["add", "def", "fintype_of_fintype", ["module"]]]}]}, {"timestamp": 1589876885, "sha": "80b7f975", "message": "feat(tactic/localized): fail if unused locale is open (#2718)\nThis is more in line with the behavior of `open`.\nCloses #2702", "changes": [{"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "test/localized/localized.lean", "newPath": "test/localized/localized.lean", "changes": []}]}, {"timestamp": 1589876883, "sha": "3ba7d128", "message": "feat(algebra): obtaining algebraic classes through in/surjective maps (#2638)\nThis is needed for the definition of Witt vectors.", "changes": [{"oldPath": null, "newPath": "src/algebra/inj_surj.lean", "changes": [["add", "def", "comm_group_of_injective", []], ["add", "def", "comm_group_of_surjective", []], ["add", "def", "comm_monoid_of_injective", []], ["add", "def", "comm_monoid_of_surjective", []], ["add", "def", "comm_ring_of_injective", []], ["add", "def", "comm_ring_of_surjective", []], ["add", "def", "comm_semigroup_of_injective", []], ["add", "def", "comm_semigroup_of_surjective", []], ["add", "def", "comm_semiring_of_injective", []], ["add", "def", "comm_semiring_of_surjective", []], ["add", "def", "group_of_injective", []], ["add", "def", "group_of_surjective", []], ["add", "def", "monoid_of_injective", []], ["add", "def", "monoid_of_surjective", []], ["add", "def", "ring_of_injective", []], ["add", "def", "ring_of_surjective", []], ["add", "def", "semigroup_of_injective", []], ["add", "def", "semigroup_of_surjective", []], ["add", "def", "semiring_of_injective", []], ["add", "def", "semiring_of_surjective", []]]}]}, {"timestamp": 1589872215, "sha": "52aa1281", "message": "feat(data/equiv): add add_equiv.to_multiplicative (#2732)\nWe already have `add_monoid_hom.to_multiplicative`. This adds `add_equiv.to_multiplicative`.\nIt is placed in `data/equiv/mul_add.lean` because `data/equiv/mul_add.lean` already imports `algebra/group/type_tags.lean`.", "changes": [{"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "to_multiplicative", ["add_equiv"]], ["add", "def", "to_additive", ["mul_equiv"]]]}]}, {"timestamp": 1589868784, "sha": "906220ca", "message": "feat(topology/bounded_continuous_function): Normed algebra of bounded continuous functions (#2722)\nThe space `C(α, γ)` of bounded continuous functions into a normed algebra γ is a normed algebra. The space of bounded continuous functions into a normed 𝕜-space is a `C(α, 𝕜)`-module.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["add", "def", "C", ["bounded_continuous_function"]], ["add", "theorem", "norm_smul_le", ["bounded_continuous_function"]]]}]}, {"timestamp": 1589858784, "sha": "01efaebc", "message": "feat(ci): run lint and tests in parallel (#2736)\nActions doesn't let us run *steps* in parallel, but we can run *jobs* in parallel. The lint and test jobs are part of the same *workflow*. Understanding Actions terminology is half the battle.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "bors.toml", "newPath": "bors.toml", "changes": []}, {"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1589825550, "sha": "f01260a7", "message": "feat(algebra/char_p): eq_iff_modeq_int (#2731)", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "eq_iff_modeq_int", []]]}]}, {"timestamp": 1589818697, "sha": "9d762df7", "message": "chore(scripts): update nolints.txt (#2733)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589809127, "sha": "ff3130da", "message": "feat(topology/constructions): topology on ulift (#2716)", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_ulift_down", []], ["add", "theorem", "continuous_ulift_up", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "{u", ["homeomorph"]]]}]}, {"timestamp": 1589809125, "sha": "4026bd8c", "message": "feat(category_theory/full_subcategory): induced category from a groupoid is a groupoid (#2715)\nAlso some minor cleanup to the same file.", "changes": [{"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": [["del", "theorem", "hom", ["category_theory", "induced_functor"]], ["del", "theorem", "obj", ["category_theory", "induced_functor"]], ["mod", "def", "induced_functor", ["category_theory"]]]}]}, {"timestamp": 1589809123, "sha": "2fa1d7cd", "message": "Revert \"fix(category_theory/eq_to_hom): remove bad simp lemmas (#1346)\" (#2713)\nThese are good simp lemmas: they push things into a proof-irrelevant position.\nThis reverts commit 5a309a3aa30fcec122a26f379f05b466ee46fc7a.", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["mod", "theorem", "eq_to_hom_app", ["category_theory"]], ["mod", "theorem", "eq_to_hom_map", ["category_theory"]], ["mod", "theorem", "eq_to_iso_map", ["category_theory"]]]}]}, {"timestamp": 1589809121, "sha": "8b422458", "message": "refactor(algebra): merge init_.algebra into algebra (#2707)\nThis is a big refactor PR. It depends on #2697, which brings in the algebra hierarchy without any change to the file structure. This PR merges `init_.algebra.group` into `algebra.group` and so on for the rest of the algebraic hierarchy.", "changes": [{"oldPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/convergents_equiv.lean", "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "add_div'", []], ["add", "theorem", "add_div_eq_mul_add_div", []], ["mod", "theorem", "div_add'", []], ["add", "theorem", "div_add_div", []], ["add", "theorem", "div_add_div_same", []], ["add", "theorem", "div_div_div_div_eq", []], ["add", "theorem", "div_div_eq_div_mul", []], ["add", "theorem", "div_div_eq_mul_div", []], ["add", "theorem", "div_eq_mul_one_div", []], ["add", "theorem", "div_eq_one_iff_eq", []], ["add", "theorem", "div_helper", []], ["add", "theorem", "div_mul_cancel", []], ["add", "theorem", "div_mul_div", []], ["add", "theorem", "div_mul_eq_div_mul_one_div", []], ["add", "theorem", "div_mul_eq_mul_div", []], ["add", "theorem", "div_mul_eq_mul_div_comm", []], ["add", "theorem", "div_mul_left", []], ["add", "theorem", "div_mul_right", []], ["add", "theorem", "div_neg_eq_neg_div", []], ["add", "theorem", "div_one", []], ["add", "theorem", "div_self", []], ["mod", "theorem", "div_sub'", []], ["add", "theorem", "div_sub_div", []], ["add", "theorem", "div_sub_div_same", []], ["add", "theorem", "div_zero", []], ["add", "theorem", "division_def", []], ["add", "theorem", "mul_ne_zero", ["division_ring"]], ["add", "theorem", "one_div_mul_one_div", ["division_ring"]], ["add", "theorem", "eq_div_iff_mul_eq", []], ["add", "theorem", "eq_div_of_mul_eq", []], ["add", "theorem", "eq_of_div_eq_one", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_left", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_right", []], ["add", "theorem", "eq_of_one_div_eq_one_div", []], ["add", "theorem", "eq_one_div_of_mul_eq_one", []], ["add", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["add", "theorem", "eq_zero_of_one_div_eq_zero", []], ["add", "theorem", "inv_eq_one_div", []], ["add", "theorem", "inv_inv'", []], ["add", "theorem", "inv_mul_cancel", []], ["add", "theorem", "inv_ne_zero", []], ["mod", "theorem", "inv_one", []], ["add", "theorem", "inv_zero", []], ["del", "theorem", "injective", ["is_ring_hom"]], ["del", "theorem", "map_div", ["is_ring_hom"]], ["del", "theorem", "map_eq_zero", ["is_ring_hom"]], ["del", "theorem", "map_inv", ["is_ring_hom"]], ["del", "theorem", "map_ne_zero", ["is_ring_hom"]], ["mod", "theorem", "mul_div_assoc'", []], ["add", "theorem", "mul_div_assoc", []], ["add", "theorem", "mul_div_cancel'", []], ["add", "theorem", "mul_div_cancel", []], ["add", "theorem", "mul_div_cancel_left", []], ["add", "theorem", "mul_div_mul_left", []], ["add", "theorem", "mul_div_mul_right", []], ["add", "theorem", "mul_eq_mul_of_div_eq_div", []], ["add", "theorem", "mul_eq_of_eq_div", []], ["add", "theorem", "mul_inv'", []], ["add", "theorem", "mul_inv_cancel", []], ["add", "theorem", "mul_mul_div", []], ["add", "theorem", "mul_ne_zero_comm", []], ["add", "theorem", "mul_one_div_cancel", []], ["add", "theorem", "ne_zero_of_one_div_ne_zero", []], ["mod", "theorem", "neg_div'", []], ["add", "theorem", "neg_div", []], ["add", "theorem", "neg_div_neg_eq", []], ["add", "theorem", "one_div_add_one_div", []], ["add", "theorem", "one_div_div", []], ["add", "theorem", "one_div_eq_inv", []], ["add", "theorem", "one_div_mul_add_mul_one_div_eq_one_div_add_one_div", []], ["add", "theorem", "one_div_mul_cancel", []], ["add", "theorem", "one_div_mul_one_div", []], ["add", "theorem", "one_div_mul_sub_mul_one_div_eq_one_div_add_one_div", []], ["add", "theorem", "one_div_ne_zero", []], ["add", "theorem", "one_div_neg_eq_neg_one_div", []], ["add", "theorem", "one_div_neg_one_eq_neg_one", []], ["add", "theorem", "one_div_one", []], ["add", "theorem", "one_div_one_div", []], ["add", "theorem", "one_inv_eq", []], ["mod", "theorem", "sub_div'", []], ["add", "theorem", "zero_div", []]]}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "add_add_neg_cancel'_right", []], ["mod", "theorem", "add_add_sub_cancel", []], ["add", "theorem", "add_eq_of_eq_sub'", []], ["add", "theorem", "add_eq_of_eq_sub", []], ["add", "theorem", "add_sub", []], ["add", "theorem", "add_sub_add_left_eq_sub", []], ["add", "theorem", "add_sub_add_right_eq_sub", []], ["add", "theorem", "add_sub_assoc", []], ["mod", "theorem", "add_sub_cancel'", []], ["mod", "theorem", "add_sub_cancel'_right", []], ["add", "theorem", "add_sub_cancel", []], ["add", "theorem", "add_sub_comm", []], ["mod", "theorem", "add_sub_sub_cancel", []], ["mod", "theorem", "bit0_zero", []], ["mod", "theorem", "bit1_zero", []], ["add", "theorem", "eq_add_of_sub_eq'", []], ["add", "theorem", "eq_add_of_sub_eq", []], ["add", "theorem", "eq_inv_mul_of_mul_eq", []], ["add", "theorem", "eq_inv_of_eq_inv", []], ["add", "theorem", "eq_inv_of_mul_eq_one", []], ["add", "theorem", "eq_mul_inv_of_mul_eq", []], ["add", "theorem", "eq_mul_of_inv_mul_eq", []], ["add", "theorem", "eq_mul_of_mul_inv_eq", []], ["add", "def", "eq_of_add_eq_add_left", []], ["add", "def", "eq_of_add_eq_add_right", []], ["add", "theorem", "eq_of_sub_eq_zero", []], ["add", "theorem", "eq_sub_of_add_eq'", []], ["add", "theorem", "eq_sub_of_add_eq", []], ["add", "theorem", "mul_left_cancel", ["group"]], ["add", "theorem", "mul_right_cancel", ["group"]], ["add", "theorem", "inv_eq_of_mul_eq_one", []], ["add", "theorem", "inv_inj", []], ["add", "theorem", "inv_inv", []], ["mod", "theorem", "inv_involutive", []], ["add", "theorem", "inv_mul_cancel_left", []], ["add", "theorem", "inv_mul_cancel_right", []], ["add", "theorem", "inv_mul_eq_of_eq_mul", []], ["add", "def", "inv_mul_self", []], ["mod", "theorem", "inv_unique", []], ["mod", "theorem", "left_inverse_add_left_sub", []], ["mod", "theorem", "left_inverse_add_right_neg_add", []], ["mod", "theorem", "left_inverse_neg_add_add_right", []], ["mod", "theorem", "left_inverse_sub_add_left", []], ["add", "theorem", "mul_assoc", []], ["add", "theorem", "mul_comm", []], ["add", "theorem", "mul_eq_of_eq_inv_mul", []], ["add", "theorem", "mul_eq_of_eq_mul_inv", []], ["add", "theorem", "mul_inv", []], ["add", "theorem", "mul_inv_cancel_left", []], ["add", "theorem", "mul_inv_cancel_right", []], ["add", "theorem", "mul_inv_eq_of_eq_mul", []], ["add", "theorem", "mul_inv_rev", []], ["add", "def", "mul_inv_self", []], ["add", "theorem", "mul_left_cancel", []], ["add", "theorem", "mul_left_cancel_iff", []], ["add", "theorem", "mul_left_comm", []], ["mod", "theorem", "mul_left_inj", []], ["mod", "theorem", "mul_left_injective", []], ["add", "theorem", "mul_left_inv", []], ["mod", "theorem", "mul_mul_mul_comm", []], ["add", "theorem", "mul_one", []], ["add", "theorem", "mul_right_cancel", []], ["add", "theorem", "mul_right_cancel_iff", []], ["add", "theorem", "mul_right_comm", []], ["mod", "theorem", "mul_right_inj", []], ["mod", "theorem", "mul_right_injective", []], ["add", "theorem", "mul_right_inv", []], ["mod", "theorem", "neg_add'", []], ["add", "theorem", "neg_add_eq_sub", []], ["add", "theorem", "neg_neg_sub_neg", []], ["add", "theorem", "neg_sub", []], ["mod", "theorem", "neg_sub_neg", []], ["add", "theorem", "one_inv", []], ["add", "theorem", "one_mul", []], ["add", "theorem", "sub_add", []], ["mod", "theorem", "sub_add_add_cancel", []], ["add", "theorem", "sub_add_cancel", []], ["add", "theorem", "sub_add_eq_add_sub", []], ["add", "theorem", "sub_add_eq_sub_sub", []], ["add", "theorem", "sub_add_eq_sub_sub_swap", []], ["mod", "theorem", "sub_add_sub_cancel'", []], ["mod", "theorem", "sub_add_sub_cancel", []], ["add", "theorem", "sub_eq_add_neg", []], ["mod", "theorem", "sub_eq_neg_add", []], ["add", "theorem", "sub_eq_of_eq_add'", []], ["add", "theorem", "sub_eq_of_eq_add", []], ["add", "theorem", "sub_eq_sub_add_sub", []], ["mod", "theorem", "sub_eq_sub_iff_add_eq_add", []], ["mod", "theorem", "sub_eq_sub_iff_sub_eq_sub", []], ["add", "theorem", "sub_eq_zero_iff_eq", []], ["add", "theorem", "sub_eq_zero_of_eq", []], ["add", "theorem", "sub_ne_zero_of_ne", []], ["add", "theorem", "sub_neg_eq_add", []], ["mod", "theorem", "sub_right_comm", []], ["add", "theorem", "sub_self", []], ["add", "theorem", "sub_sub", []], ["mod", "theorem", "sub_sub_cancel", []], ["add", "theorem", "sub_sub_self", []], ["mod", "theorem", "sub_sub_sub_cancel_left", []], ["mod", "theorem", "sub_sub_sub_cancel_right", []], ["add", "theorem", "sub_zero", []], ["add", "theorem", "zero_sub", []]]}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "theorem", "coe_mul_left", ["add_monoid_hom"]], ["del", "def", "mul_left", ["add_monoid_hom"]], ["del", "def", "mul_right", ["add_monoid_hom"]], ["del", "theorem", "mul_right_apply", ["add_monoid_hom"]]]}, {"oldPath": "src/algebra/group/is_unit.lean", "newPath": null, "changes": [["del", "theorem", "coe_lift_right", ["is_unit"]], ["del", "theorem", "lift_right_inv_mul", ["is_unit"]], ["del", "theorem", "map", ["is_unit"]], ["del", "theorem", "mul_left_inj", ["is_unit"]], ["del", "theorem", "mul_lift_right_inv", ["is_unit"]], ["del", "theorem", "mul_right_inj", ["is_unit"]], ["del", "def", "is_unit", []], ["del", "theorem", "is_unit_iff_exists_inv'", []], ["del", "theorem", "is_unit_iff_exists_inv", []], ["del", "theorem", "is_unit_nat", []], ["del", "theorem", "is_unit_of_mul_eq_one", []], ["del", "theorem", "is_unit_of_mul_is_unit_left", []], ["del", "theorem", "is_unit_of_mul_is_unit_right", []], ["del", "theorem", "is_unit_one", []], ["del", "theorem", "is_unit_unit", []], ["del", "theorem", "is_unit_mul_units", ["units"]]]}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "def", "divp", []], ["mod", "theorem", "divp_assoc", []], ["mod", "theorem", "divp_divp_eq_divp_mul", []], ["mod", "theorem", "divp_eq_iff_mul_eq", []], ["mod", "theorem", "divp_eq_one_iff_eq", []], ["mod", "theorem", "divp_inv", []], ["mod", "theorem", "divp_left_inj", []], ["mod", "theorem", "divp_mul_cancel", []], ["mod", "theorem", "divp_one", []], ["mod", "theorem", "divp_self", []], ["add", "theorem", "mul_left_inj", ["is_unit"]], ["add", "theorem", "mul_right_inj", ["is_unit"]], ["add", "def", "is_unit", []], ["add", "theorem", "is_unit_iff_exists_inv'", []], ["add", "theorem", "is_unit_iff_exists_inv", []], ["add", "theorem", "is_unit_of_mul_eq_one", []], ["add", "theorem", "is_unit_of_mul_is_unit_left", []], ["add", "theorem", "is_unit_of_mul_is_unit_right", []], ["add", "theorem", "is_unit_one", []], ["add", "theorem", "is_unit_unit", []], ["mod", "theorem", "mul_divp_cancel", []], ["del", "theorem", "add_units_eq_zero", ["nat"]], ["del", "theorem", "units_eq_one", ["nat"]], ["mod", "theorem", "one_divp", []], ["del", "theorem", "coe_val_hom", ["units"]], ["add", "theorem", "is_unit_mul_units", ["units"]], ["del", "def", "val_hom", ["units"]]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["add", "theorem", "coe_lift_right", ["is_unit"]], ["add", "theorem", "lift_right_inv_mul", ["is_unit"]], ["add", "theorem", "map", ["is_unit"]], ["add", "theorem", "mul_lift_right_inv", ["is_unit"]]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["mod", "theorem", "div_eq_div_iff", []], ["mod", "theorem", "div_eq_iff", []], ["mod", "theorem", "eq_div_iff", []]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "abs_div", []], ["mod", "theorem", "abs_inv", []], ["add", "theorem", "abs_one_div", []], ["add", "theorem", "add_halves", []], ["add", "theorem", "add_midpoint", []], ["add", "theorem", "add_self_div_two", []], ["mod", "theorem", "div_le_div_of_le_left", []], ["add", "theorem", "div_le_div_of_le_of_neg", []], ["mod", "theorem", "div_le_div_of_le_of_nonneg", []], ["add", "theorem", "div_le_div_of_le_of_pos", []], ["add", "theorem", "div_le_div_of_mul_sub_mul_div_nonpos", []], ["add", "theorem", "div_le_of_le_mul", []], ["add", "theorem", "div_le_of_mul_le_of_neg", []], ["add", "theorem", "div_lt_div_of_lt_of_neg", []], ["add", "theorem", "div_lt_div_of_lt_of_pos", []], ["add", "theorem", "div_lt_div_of_mul_sub_mul_div_neg", []], ["add", "theorem", "div_lt_div_of_pos_of_lt_of_pos", []], ["add", "theorem", "div_lt_of_mul_gt_of_neg", []], ["add", "theorem", "div_lt_of_mul_lt_of_pos", []], ["add", "theorem", "div_mul_le_div_mul_of_div_le_div_pos'", []], ["add", "theorem", "div_mul_le_div_mul_of_div_le_div_pos", []], ["add", "theorem", "div_neg_of_neg_of_pos", []], ["add", "theorem", "div_neg_of_pos_of_neg", []], ["mod", "theorem", "div_nonneg'", []], ["add", "theorem", "div_nonneg_of_nonneg_of_pos", []], ["add", "theorem", "div_nonneg_of_nonpos_of_neg", []], ["add", "theorem", "div_nonpos_of_nonneg_of_neg", []], ["add", "theorem", "div_nonpos_of_nonpos_of_pos", []], ["add", "theorem", "div_pos_of_neg_of_neg", []], ["add", "theorem", "div_pos_of_pos_of_pos", []], ["add", "theorem", "div_two_lt_of_pos", []], ["add", "theorem", "div_two_sub_self", []], ["add", "theorem", "exists_add_lt_and_pos_of_lt", []], ["add", "theorem", "ge_of_forall_ge_sub", []], ["mod", "theorem", "inv_le_inv_of_le", []], ["mod", "theorem", "inv_le_one", []], ["mod", "theorem", "inv_lt_one", []], ["mod", "theorem", "inv_nonneg", []], ["mod", "theorem", "inv_nonpos", []], ["add", "theorem", "le_div_of_mul_le", []], ["add", "theorem", "le_mul_of_div_le", []], ["add", "theorem", "le_mul_of_ge_one_left", []], ["add", "theorem", "le_mul_of_ge_one_right", []], ["add", "theorem", "le_of_one_div_le_one_div", []], ["add", "theorem", "le_of_one_div_le_one_div_of_neg", []], ["add", "theorem", "le_of_one_le_div", []], ["add", "theorem", "lt_div_of_mul_lt", []], ["add", "theorem", "lt_mul_of_gt_one_right", []], ["add", "theorem", "lt_of_one_div_lt_one_div", []], ["add", "theorem", "lt_of_one_div_lt_one_div_of_neg", []], ["add", "theorem", "lt_of_one_lt_div", []], ["add", "theorem", "mul_le_mul_of_mul_div_le", []], ["add", "theorem", "mul_le_of_div_le_of_neg", []], ["add", "theorem", "mul_le_of_le_div", []], ["add", "theorem", "mul_lt_of_gt_div_of_neg", []], ["add", "theorem", "mul_lt_of_lt_div", []], ["mod", "theorem", "mul_self_inj_of_nonneg", []], ["add", "theorem", "mul_sub_mul_div_mul_neg", []], ["add", "theorem", "mul_sub_mul_div_mul_nonpos", []], ["add", "theorem", "mul_zero_lt_mul_inv_of_neg", []], ["add", "theorem", "mul_zero_lt_mul_inv_of_pos", []], ["del", "theorem", "inv_pos_of_nat", ["nat"]], ["del", "theorem", "one_div_le_one_div", ["nat"]], ["del", "theorem", "one_div_lt_one_div", ["nat"]], ["del", "theorem", "one_div_pos_of_nat", ["nat"]], ["add", "theorem", "neg_of_one_div_neg", []], ["add", "theorem", "one_div_le_neg_one", []], ["add", "theorem", "one_div_le_of_one_div_le_of_neg", []], ["add", "theorem", "one_div_le_of_one_div_le_of_pos", []], ["add", "theorem", "one_div_le_one_div_of_le", []], ["add", "theorem", "one_div_le_one_div_of_le_of_neg", []], ["add", "theorem", "one_div_lt_neg_one", []], ["add", "theorem", "one_div_lt_one_div_of_lt", []], ["add", "theorem", "one_div_lt_one_div_of_lt_of_neg", []], ["add", "theorem", "one_div_neg_of_neg", []], ["add", "theorem", "one_div_pos_of_pos", []], ["add", "theorem", "one_le_div_of_le", []], ["mod", "theorem", "one_le_inv", []], ["add", "theorem", "one_le_one_div", []], ["add", "theorem", "one_lt_div_of_lt", []], ["add", "theorem", "one_lt_one_div", []], ["add", "theorem", "pos_of_one_div_pos", []], ["add", "theorem", "sub_self_div_two", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "def", "abs", []], ["add", "theorem", "abs_abs", []], ["add", "theorem", "abs_add_le_abs_add_abs", []], ["add", "theorem", "abs_add_three", []], ["add", "theorem", "abs_by_cases", []], ["add", "theorem", "abs_le_of_le_of_neg_le", []], ["add", "theorem", "abs_lt_of_lt_of_neg_lt", []], ["add", "theorem", "abs_neg", []], ["add", "theorem", "abs_nonneg", []], ["add", "theorem", "abs_of_neg", []], ["add", "theorem", "abs_of_nonneg", []], ["add", "theorem", "abs_of_nonpos", []], ["add", "theorem", "abs_of_pos", []], ["add", "theorem", "abs_pos_of_ne_zero", []], ["add", "theorem", "abs_pos_of_neg", []], ["add", "theorem", "abs_pos_of_pos", []], ["add", "theorem", "abs_sub", []], ["add", "theorem", "abs_sub_abs_le_abs_sub", []], ["add", "theorem", "abs_sub_le", []], ["add", "theorem", "abs_zero", []], ["add", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg", []], ["add", "theorem", "add_le_add", []], ["add", "theorem", "add_le_add_left", []], ["add", "theorem", "add_le_add_right", []], ["add", "theorem", "add_le_add_three", []], ["mod", "theorem", "add_le_iff_nonpos_left", []], ["mod", "theorem", "add_le_iff_nonpos_right", []], ["add", "theorem", "add_le_of_le_neg_add", []], ["add", "theorem", "add_le_of_le_of_nonpos", []], ["add", "theorem", "add_le_of_le_sub_left", []], ["add", "theorem", "add_le_of_le_sub_right", []], ["add", "theorem", "add_le_of_nonpos_of_le", []], ["add", "theorem", "add_lt_add", []], ["add", "theorem", "add_lt_add_left", []], ["add", "theorem", "add_lt_add_of_le_of_lt", []], ["add", "theorem", "add_lt_add_of_lt_of_le", []], ["add", "theorem", "add_lt_add_right", []], ["mod", "theorem", "add_lt_iff_neg_left", []], ["mod", "theorem", "add_lt_iff_neg_right", []], ["add", "theorem", "add_lt_of_le_of_neg", []], ["add", "theorem", "add_lt_of_lt_neg_add", []], ["add", "theorem", "add_lt_of_lt_of_neg", []], ["add", "theorem", "add_lt_of_lt_of_nonpos", []], ["add", "theorem", "add_lt_of_lt_sub_left", []], ["add", "theorem", "add_lt_of_lt_sub_right", []], ["add", "theorem", "add_lt_of_neg_of_le", []], ["add", "theorem", "add_lt_of_neg_of_lt", []], ["add", "theorem", "add_lt_of_nonpos_of_lt", []], ["add", "theorem", "add_neg", []], ["add", "theorem", "add_neg_of_neg_of_nonpos", []], ["add", "theorem", "add_neg_of_nonpos_of_neg", []], ["add", "theorem", "add_nonneg", []], ["add", "theorem", "add_nonpos", []], ["add", "theorem", "add_pos", []], ["add", "theorem", "add_pos_of_nonneg_of_pos", []], ["add", "theorem", "add_pos_of_pos_of_nonneg", []], ["add", "theorem", "add_lt_add_left", ["decidable_linear_ordered_add_comm_group"]], ["mod", "theorem", "eq_of_abs_sub_nonpos", ["decidable_linear_ordered_add_comm_group"]], ["add", "theorem", "dist_bdd_within_interval", []], ["add", "theorem", "eq_of_abs_sub_eq_zero", []], ["add", "theorem", "eq_zero_of_abs_eq_zero", []], ["add", "theorem", "eq_zero_of_neg_eq", []], ["add", "theorem", "le_abs_self", []], ["add", "theorem", "le_add_of_le_of_nonneg", []], ["add", "theorem", "le_add_of_neg_add_le", []], ["add", "theorem", "le_add_of_neg_add_le_left", []], ["add", "theorem", "le_add_of_neg_add_le_right", []], ["add", "theorem", "le_add_of_neg_le_sub_left", []], ["add", "theorem", "le_add_of_neg_le_sub_right", []], ["add", "theorem", "le_add_of_nonneg_left", []], ["add", "theorem", "le_add_of_nonneg_of_le", []], ["add", "theorem", "le_add_of_nonneg_right", []], ["add", "theorem", "le_add_of_sub_left_le", []], ["add", "theorem", "le_add_of_sub_right_le", []], ["add", "theorem", "le_neg_add_of_add_le", []], ["add", "theorem", "le_neg_of_le_neg", []], ["add", "theorem", "le_of_add_le_add_left", []], ["add", "theorem", "le_of_add_le_add_right", []], ["add", "theorem", "le_of_neg_le_neg", []], ["add", "theorem", "le_of_sub_nonneg", []], ["add", "theorem", "le_of_sub_nonpos", []], ["add", "theorem", "le_sub_left_of_add_le", []], ["add", "theorem", "le_sub_right_of_add_le", []], ["add", "theorem", "lt_add_of_le_of_pos", []], ["add", "theorem", "lt_add_of_lt_of_nonneg", []], ["add", "theorem", "lt_add_of_lt_of_pos", []], ["add", "theorem", "lt_add_of_neg_add_lt", []], ["add", "theorem", "lt_add_of_neg_add_lt_left", []], ["add", "theorem", "lt_add_of_neg_add_lt_right", []], ["add", "theorem", "lt_add_of_neg_lt_sub_left", []], ["add", "theorem", "lt_add_of_neg_lt_sub_right", []], ["add", "theorem", "lt_add_of_nonneg_of_lt", []], ["add", "theorem", "lt_add_of_pos_left", []], ["add", "theorem", "lt_add_of_pos_of_le", []], ["add", "theorem", "lt_add_of_pos_of_lt", []], ["add", "theorem", "lt_add_of_pos_right", []], ["add", "theorem", "lt_add_of_sub_left_lt", []], ["add", "theorem", "lt_add_of_sub_right_lt", []], ["add", "theorem", "lt_neg_add_of_add_lt", []], ["add", "theorem", "lt_neg_of_lt_neg", []], ["add", "theorem", "lt_of_add_lt_add_left", []], ["add", "theorem", "lt_of_add_lt_add_right", []], ["add", "theorem", "lt_of_neg_lt_neg", []], ["add", "theorem", "lt_of_sub_neg", []], ["add", "theorem", "lt_of_sub_pos", []], ["add", "theorem", "lt_sub_left_of_add_lt", []], ["add", "theorem", "lt_sub_right_of_add_lt", []], ["add", "theorem", "max_add_add_left", []], ["add", "theorem", "max_add_add_right", []], ["add", "theorem", "max_eq_neg_min_neg_neg", []], ["add", "theorem", "max_neg_neg", []], ["add", "theorem", "min_add_add_left", []], ["add", "theorem", "min_add_add_right", []], ["add", "theorem", "min_eq_neg_max_neg_neg", []], ["add", "theorem", "min_neg_neg", []], ["add", "theorem", "ne_zero_of_abs_ne_zero", []], ["add", "theorem", "neg_add_le_left_of_le_add", []], ["add", "theorem", "neg_add_le_of_le_add", []], ["add", "theorem", "neg_add_le_right_of_le_add", []], ["add", "theorem", "neg_add_lt_left_of_lt_add", []], ["add", "theorem", "neg_add_lt_of_lt_add", []], ["add", "theorem", "neg_add_lt_right_of_lt_add", []], ["add", "theorem", "neg_le_abs_self", []], ["add", "theorem", "neg_le_neg", []], ["add", "theorem", "neg_le_of_neg_le", []], ["add", "theorem", "neg_le_sub_left_of_le_add", []], ["add", "theorem", "neg_le_sub_right_of_le_add", []], ["add", "theorem", "neg_lt_neg", []], ["add", "theorem", "neg_lt_of_neg_lt", []], ["add", "theorem", "neg_lt_sub_left_of_lt_add", []], ["add", "theorem", "neg_lt_sub_right_of_lt_add", []], ["add", "theorem", "neg_neg_of_pos", []], ["add", "theorem", "neg_nonneg_of_nonpos", []], ["add", "theorem", "neg_nonpos_of_nonneg", []], ["add", "theorem", "neg_of_neg_pos", []], ["add", "theorem", "neg_pos_of_neg", []], ["add", "theorem", "nonneg_of_neg_nonpos", []], ["add", "theorem", "nonpos_of_neg_nonneg", []], ["add", "theorem", "add_lt_add_left", ["ordered_add_comm_group"]], ["add", "theorem", "le_of_add_le_add_left", ["ordered_add_comm_group"]], ["add", "theorem", "lt_of_add_lt_add_left", ["ordered_add_comm_group"]], ["add", "theorem", "pos_of_neg_neg", []], ["add", "theorem", "sub_le_of_sub_le", []], ["add", "theorem", "sub_le_self", []], ["add", "theorem", "sub_le_sub", []], ["add", "theorem", "sub_le_sub_left", []], ["add", "theorem", "sub_le_sub_right", []], ["add", "theorem", "sub_left_le_of_le_add", []], ["add", "theorem", "sub_left_lt_of_lt_add", []], ["add", "theorem", "sub_lt_of_sub_lt", []], ["add", "theorem", "sub_lt_self", []], ["add", "theorem", "sub_lt_sub", []], ["add", "theorem", "sub_lt_sub_left", []], ["add", "theorem", "sub_lt_sub_of_le_of_lt", []], ["add", "theorem", "sub_lt_sub_of_lt_of_le", []], ["add", "theorem", "sub_lt_sub_right", []], ["add", "theorem", "sub_neg_of_lt", []], ["add", "theorem", "sub_nonneg_of_le", []], ["add", "theorem", "sub_nonpos_of_le", []], ["add", "theorem", "sub_pos_of_lt", []], ["add", "theorem", "sub_right_le_of_le_add", []], ["add", "theorem", "sub_right_lt_of_lt_add", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "abs_abs_sub_abs_le_abs_sub", []], ["add", "theorem", "abs_mul", []], ["add", "theorem", "abs_mul_abs_self", []], ["add", "theorem", "abs_mul_self", []], ["add", "theorem", "abs_sub_square", []], ["mod", "theorem", "abs_two", []], ["mod", "theorem", "bit0_le_bit0", []], ["mod", "theorem", "bit0_lt_bit0", []], ["mod", "theorem", "bit1_le_bit1", []], ["mod", "theorem", "bit1_lt_bit1", []], ["mod", "theorem", "bit1_pos'", []], ["mod", "theorem", "bit1_pos", []], ["mod", "theorem", "mul_pos", ["canonically_ordered_semiring"]], ["mod", "theorem", "mul_le_mul_left", ["decidable"]], ["mod", "theorem", "mul_le_mul_right", ["decidable"]], ["add", "theorem", "eq_zero_of_mul_self_add_mul_self_eq_zero", []], ["add", "theorem", "four_pos", []], ["add", "theorem", "gt_of_mul_lt_mul_neg_left", []], ["mod", "theorem", "le_mul_iff_one_le_left", []], ["mod", "theorem", "le_mul_iff_one_le_right", []], ["mod", "theorem", "le_mul_of_one_le_left'", []], ["mod", "theorem", "le_mul_of_one_le_right'", []], ["add", "theorem", "le_of_mul_le_mul_left", []], ["add", "theorem", "le_of_mul_le_mul_right", []], ["add", "theorem", "le_of_mul_le_of_ge_one", []], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["linear_ordered_ring"]], ["mod", "theorem", "lt_mul_iff_one_lt_left", []], ["mod", "theorem", "lt_mul_iff_one_lt_right", []], ["mod", "theorem", "lt_mul_of_one_lt_right'", []], ["add", "theorem", "lt_of_mul_lt_mul_left", []], ["add", "theorem", "lt_of_mul_lt_mul_right", []], ["mod", "theorem", "mul_le_iff_le_one_left", []], ["mod", "theorem", "mul_le_iff_le_one_right", []], ["add", "theorem", "mul_le_mul", []], ["mod", "theorem", "mul_le_mul_left", []], ["add", "theorem", "mul_le_mul_of_nonneg_left", []], ["add", "theorem", "mul_le_mul_of_nonneg_right", []], ["add", "theorem", "mul_le_mul_of_nonpos_left", []], ["add", "theorem", "mul_le_mul_of_nonpos_right", []], ["mod", "theorem", "mul_le_mul_right", []], ["mod", "theorem", "mul_le_of_le_one_left", []], ["mod", "theorem", "mul_le_of_le_one_right", []], ["mod", "theorem", "mul_le_one", []], ["mod", "theorem", "mul_lt_iff_lt_one_left", []], ["mod", "theorem", "mul_lt_iff_lt_one_right", []], ["mod", "theorem", "mul_lt_mul''", []], ["add", "theorem", "mul_lt_mul'", []], ["add", "theorem", "mul_lt_mul", []], ["mod", "theorem", "mul_lt_mul_left", []], ["add", "theorem", "mul_lt_mul_of_neg_left", []], ["add", "theorem", "mul_lt_mul_of_neg_right", []], ["add", "theorem", "mul_lt_mul_of_pos_left", []], ["add", "theorem", "mul_lt_mul_of_pos_right", []], ["mod", "theorem", "mul_lt_mul_right", []], ["mod", "theorem", "mul_lt_one_of_nonneg_of_lt_one_left", []], ["mod", "theorem", "mul_lt_one_of_nonneg_of_lt_one_right", []], ["add", "theorem", "mul_neg_of_neg_of_pos", []], ["add", "theorem", "mul_neg_of_pos_of_neg", []], ["mod", "theorem", "mul_nonneg'", []], ["add", "theorem", "mul_nonneg", []], ["mod", "theorem", "mul_nonneg_iff_right_nonneg_of_pos", []], ["add", "theorem", "mul_nonneg_of_nonpos_of_nonpos", []], ["add", "theorem", "mul_nonpos_of_nonneg_of_nonpos", []], ["add", "theorem", "mul_nonpos_of_nonpos_of_nonneg", []], ["mod", "theorem", "mul_pos'", []], ["add", "theorem", "mul_pos", []], ["add", "theorem", "mul_pos_of_neg_of_neg", []], ["add", "theorem", "mul_self_le_mul_self", []], ["add", "theorem", "mul_self_le_mul_self_iff", []], ["add", "theorem", "mul_self_lt_mul_self", []], ["add", "theorem", "mul_self_lt_mul_self_iff", []], ["add", "theorem", "mul_self_nonneg", []], ["add", "theorem", "neg_of_mul_neg_left", []], ["add", "theorem", "neg_of_mul_neg_right", []], ["mod", "theorem", "neg_of_mul_pos_left", []], ["mod", "theorem", "neg_of_mul_pos_right", []], ["add", "theorem", "nonneg_le_nonneg_of_squares_le", []], ["add", "theorem", "nonneg_of_mul_nonneg_left", []], ["add", "theorem", "nonneg_of_mul_nonneg_right", []], ["mod", "theorem", "nonpos_of_mul_nonneg_left", []], ["mod", "theorem", "nonpos_of_mul_nonneg_right", []], ["add", "theorem", "nonpos_of_mul_nonpos_left", []], ["add", "theorem", "nonpos_of_mul_nonpos_right", []], ["mod", "theorem", "one_le_bit1", []], ["mod", "theorem", "one_lt_bit1", []], ["mod", "theorem", "one_lt_mul", []], ["mod", "theorem", "one_lt_mul_of_le_of_lt", []], ["mod", "theorem", "one_lt_mul_of_lt_of_le", []], ["add", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_ring"]], ["add", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_ring"]], ["add", "theorem", "mul_lt_mul_of_pos_left", ["ordered_ring"]], ["add", "theorem", "mul_lt_mul_of_pos_right", ["ordered_ring"]], ["add", "theorem", "mul_nonneg", ["ordered_ring"]], ["add", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_semiring"]], ["add", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_semiring"]], ["add", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", []], ["add", "theorem", "pos_of_mul_pos_left", []], ["add", "theorem", "pos_of_mul_pos_right", []], ["add", "theorem", "sub_le_of_abs_sub_le_left", []], ["add", "theorem", "sub_le_of_abs_sub_le_right", []], ["add", "theorem", "sub_lt_of_abs_sub_lt_left", []], ["add", "theorem", "sub_lt_of_abs_sub_lt_right", []], ["add", "theorem", "two_ge_one", []], ["add", "theorem", "two_gt_one", []], ["add", "theorem", "two_ne_zero", []], ["add", "theorem", "two_pos", []], ["del", "theorem", "add_one_le_of_lt", ["with_top"]], ["del", "theorem", "coe_nat", ["with_top"]], ["del", "theorem", "nat_induction", ["with_top"]], ["del", "theorem", "nat_ne_top", ["with_top"]], ["del", "theorem", "top_ne_nat", ["with_top"]], ["add", "theorem", "zero_gt_neg_one", []], ["mod", "theorem", "zero_le_bit0", []], ["mod", "theorem", "zero_le_mul_left", []], ["mod", "theorem", "zero_le_mul_right", []], ["add", "theorem", "zero_le_one", []], ["mod", "theorem", "zero_lt_bit0", []], ["mod", "theorem", "zero_lt_mul_left", []], ["mod", "theorem", "zero_lt_mul_right", []], ["add", "theorem", "zero_lt_one", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "coe_mul_left", ["add_monoid_hom"]], ["add", "def", "mul_left", ["add_monoid_hom"]], ["add", "def", "mul_right", ["add_monoid_hom"]], ["add", "theorem", "mul_right_apply", ["add_monoid_hom"]], ["add", "def", "add_mul", []], ["add", "theorem", "add_mul_self_eq", []], ["add", "theorem", "distrib_three_right", []], ["mod", "theorem", "mul_left_inj", ["domain"]], ["mod", "theorem", "mul_right_inj", ["domain"]], ["add", "theorem", "elim", ["dvd"]], ["add", "theorem", "elim_left", ["dvd"]], ["add", "theorem", "intro", ["dvd"]], ["add", "theorem", "intro_left", ["dvd"]], ["add", "def", "trans", ["dvd"]], ["add", "theorem", "dvd_add", []], ["add", "theorem", "dvd_add_iff_left", []], ["add", "theorem", "dvd_add_iff_right", []], ["mod", "theorem", "dvd_add_left", []], ["mod", "theorem", "dvd_add_right", []], ["mod", "theorem", "dvd_add_self_left", []], ["mod", "theorem", "dvd_add_self_right", []], ["add", "theorem", "dvd_mul_left", []], ["add", "theorem", "dvd_mul_of_dvd_left", []], ["add", "theorem", "dvd_mul_of_dvd_right", []], ["add", "theorem", "dvd_mul_right", []], ["mod", "theorem", "dvd_neg", []], ["add", "theorem", "dvd_neg_iff_dvd", []], ["add", "theorem", "dvd_neg_of_dvd", []], ["add", "theorem", "dvd_of_dvd_neg", []], ["add", "theorem", "dvd_of_mul_left_dvd", []], ["add", "def", "dvd_of_mul_left_eq", []], ["add", "theorem", "dvd_of_mul_right_dvd", []], ["add", "def", "dvd_of_mul_right_eq", []], ["add", "theorem", "dvd_of_neg_dvd", []], ["add", "theorem", "dvd_refl", []], ["add", "theorem", "dvd_sub", []], ["add", "theorem", "dvd_trans", []], ["add", "theorem", "dvd_zero", []], ["add", "theorem", "eq_of_mul_eq_mul_left", []], ["mod", "theorem", "eq_of_mul_eq_mul_left_of_ne_zero", []], ["add", "theorem", "eq_of_mul_eq_mul_right", []], ["mod", "theorem", "eq_of_mul_eq_mul_right_of_ne_zero", []], ["mod", "theorem", "eq_zero_of_mul_eq_self_left'", []], ["add", "theorem", "eq_zero_of_mul_eq_self_left", []], ["mod", "theorem", "eq_zero_of_mul_eq_self_right'", []], ["add", "theorem", "eq_zero_of_mul_eq_self_right", []], ["add", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["add", "theorem", "eq_zero_of_zero_dvd", []], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", []], ["add", "theorem", "exists_eq_mul_left_of_dvd", []], ["add", "theorem", "exists_eq_mul_right_of_dvd", []], ["del", "theorem", "comp", ["is_ring_hom"]], ["del", "theorem", "map_neg", ["is_ring_hom"]], ["del", "theorem", "map_sub", ["is_ring_hom"]], ["del", "theorem", "map_zero", ["is_ring_hom"]], ["del", "theorem", "of_semiring", ["is_ring_hom"]], ["del", "theorem", "comp", ["is_semiring_hom"]], ["add", "theorem", "left_distrib", []], ["add", "def", "mul_add", []], ["mod", "theorem", "mul_add_eq_mul_add_iff_sub_mul_add_eq", []], ["add", "theorem", "mul_dvd_mul", []], ["mod", "theorem", "mul_dvd_mul_iff_left", []], ["mod", "theorem", "mul_dvd_mul_iff_right", []], ["add", "theorem", "mul_dvd_mul_left", []], ["add", "theorem", "mul_dvd_mul_right", []], ["mod", "theorem", "mul_eq_zero", []], ["add", "theorem", "mul_eq_zero_iff_eq_zero_or_eq_zero", []], ["mod", "theorem", "mul_ne_zero'", []], ["add", "theorem", "mul_ne_zero", []], ["mod", "theorem", "mul_ne_zero_comm'", []], ["add", "theorem", "mul_neg_eq_neg_mul_symm", []], ["mod", "theorem", "mul_neg_one", []], ["add", "theorem", "mul_self_eq_mul_self_iff", []], ["add", "theorem", "mul_self_eq_one_iff", []], ["mod", "theorem", "mul_self_eq_zero", []], ["mod", "theorem", "mul_self_sub_mul_self", []], ["add", "theorem", "mul_self_sub_mul_self_eq", []], ["add", "theorem", "mul_self_sub_one_eq", []], ["add", "def", "mul_sub", []], ["add", "theorem", "mul_sub_left_distrib", []], ["add", "theorem", "mul_sub_right_distrib", []], ["add", "theorem", "mul_zero", []], ["mod", "theorem", "ne_zero_and_ne_zero_of_mul_ne_zero", []], ["add", "theorem", "ne_zero_of_mul_ne_zero_left", []], ["add", "theorem", "ne_zero_of_mul_ne_zero_right", []], ["mod", "theorem", "neg_dvd", []], ["add", "theorem", "neg_dvd_iff_dvd", []], ["add", "theorem", "neg_dvd_of_dvd", []], ["add", "theorem", "neg_eq_neg_one_mul", []], ["add", "theorem", "neg_mul_comm", []], ["add", "theorem", "neg_mul_eq_mul_neg", []], ["add", "theorem", "neg_mul_eq_neg_mul", []], ["add", "theorem", "neg_mul_eq_neg_mul_symm", []], ["add", "theorem", "neg_mul_neg", []], ["mod", "theorem", "neg_one_mul", []], ["add", "theorem", "one_add_one_eq_two", []], ["add", "theorem", "one_dvd", []], ["add", "theorem", "one_ne_zero", []], ["add", "theorem", "right_distrib", []], ["add", "theorem", "mul_zero", ["ring"]], ["add", "theorem", "zero_mul", ["ring"]], ["del", "theorem", "coe_of", ["ring_hom"]], ["mod", "theorem", "id_apply", ["ring_hom"]], ["del", "def", "of", ["ring_hom"]], ["add", "def", "sub_mul", []], ["mod", "theorem", "sub_mul_add_eq_of_mul_add_eq_mul_add", []], ["add", "theorem", "two_mul", []], ["mod", "theorem", "inv_eq_self_iff", ["units"]], ["mod", "theorem", "zero_dvd_iff", []], ["mod", "theorem", "zero_eq_mul", []], ["mod", "theorem", "zero_eq_mul_self", []], ["add", "theorem", "zero_mul", []], ["add", "theorem", "zero_ne_one", []]]}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/control/applicative.lean", "newPath": "src/control/applicative.lean", "changes": [["del", "theorem", "applicative_comp_id", ["comp"]], ["del", "theorem", "applicative_id_comp", ["comp"]], ["del", "theorem", "map_pure", ["comp"]], ["del", "theorem", "pure_seq_eq_map", ["comp"]], ["del", "theorem", "seq_assoc", ["comp"]], ["del", "theorem", "seq_pure", ["comp"]], ["add", "theorem", "applicative_comp_id", ["functor", "comp"]], ["add", "theorem", "applicative_id_comp", ["functor", "comp"]], ["add", "theorem", "map_pure", ["functor", "comp"]], ["add", "theorem", "pure_seq_eq_map", ["functor", "comp"]], ["add", "theorem", "seq_assoc", ["functor", "comp"]], ["add", "theorem", "seq_pure", ["functor", "comp"]]]}, {"oldPath": "src/control/functor.lean", "newPath": "src/control/functor.lean", "changes": []}, {"oldPath": "src/control/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": []}, {"oldPath": "src/control/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": "src/control/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/control/traversable/lemmas.lean", "newPath": "src/control/traversable/lemmas.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/module.lean", "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_units_eq_zero", ["nat"]], ["add", "theorem", "units_eq_one", ["nat"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "inv_pos_of_nat", ["nat"]], ["add", "theorem", "one_div_le_one_div", ["nat"]], ["add", "theorem", "one_div_lt_one_div", ["nat"]], ["add", "theorem", "one_div_pos_of_nat", ["nat"]], ["add", "theorem", "add_one_le_of_lt", ["with_top"]], ["add", "theorem", "coe_nat", ["with_top"]], ["add", "theorem", "nat_induction", ["with_top"]], ["add", "theorem", "nat_ne_top", ["with_top"]], ["add", "theorem", "top_ne_nat", ["with_top"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["del", "theorem", "dvd_trans", ["pnat"]]]}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": [["mod", "theorem", "gcd_eq", ["pnat"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": [["del", "theorem", "mul_pos", ["cau_seq"]]]}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/deprecated/field.lean", "changes": [["add", "theorem", "injective", ["is_ring_hom"]], ["add", "theorem", "map_div", ["is_ring_hom"]], ["add", "theorem", "map_eq_zero", ["is_ring_hom"]], ["add", "theorem", "map_inv", ["is_ring_hom"]], ["add", "theorem", "map_ne_zero", ["is_ring_hom"]]]}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": null, "newPath": "src/deprecated/ring.lean", "changes": [["add", "theorem", "comp", ["is_ring_hom"]], ["add", "theorem", "map_neg", ["is_ring_hom"]], ["add", "theorem", "map_sub", ["is_ring_hom"]], ["add", "theorem", "map_zero", ["is_ring_hom"]], ["add", "theorem", "of_semiring", ["is_ring_hom"]], ["add", "theorem", "comp", ["is_semiring_hom"]], ["add", "theorem", "coe_of", ["ring_hom"]], ["add", "def", "of", ["ring_hom"]]]}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/init_/algebra/default.lean", "newPath": "src/init_/algebra/default.lean", "changes": []}, {"oldPath": "src/init_/algebra/field.lean", "newPath": null, "changes": [["del", "theorem", "add_div_eq_mul_add_div", []], ["del", "theorem", "div_add_div", []], ["del", "theorem", "div_add_div_same", []], ["del", "theorem", "div_div_div_div_eq", []], ["del", "theorem", "div_div_eq_div_mul", []], ["del", "theorem", "div_div_eq_mul_div", []], ["del", "theorem", "div_eq_mul_one_div", []], ["del", "theorem", "div_eq_one_iff_eq", []], ["del", "theorem", "div_helper", []], ["del", "theorem", "div_mul_cancel", []], ["del", "theorem", "div_mul_div", []], ["del", "theorem", "div_mul_eq_div_mul_one_div", []], ["del", "theorem", "div_mul_eq_mul_div", []], ["del", "theorem", "div_mul_eq_mul_div_comm", []], ["del", "theorem", "div_mul_left", []], ["del", "theorem", "div_mul_right", []], ["del", "theorem", "div_neg_eq_neg_div", []], ["del", "theorem", "div_one", []], ["del", "theorem", "div_self", []], ["del", "theorem", "div_sub_div", []], ["del", "theorem", "div_sub_div_same", []], ["del", "theorem", "div_zero", []], ["del", "theorem", "division_def", []], ["del", "theorem", "mul_ne_zero", ["division_ring"]], ["del", "theorem", "one_div_mul_one_div", ["division_ring"]], ["del", "theorem", "eq_div_iff_mul_eq", []], ["del", "theorem", "eq_div_of_mul_eq", []], ["del", "theorem", "eq_of_div_eq_one", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_left", []], ["del", "theorem", "eq_of_mul_eq_mul_of_nonzero_right", []], ["del", "theorem", "eq_of_one_div_eq_one_div", []], ["del", "theorem", "eq_one_div_of_mul_eq_one", []], ["del", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["del", "theorem", "eq_zero_of_one_div_eq_zero", []], ["del", "theorem", "inv_eq_one_div", []], ["del", "theorem", "inv_inv'", []], ["del", "theorem", "inv_mul_cancel", []], ["del", "theorem", "inv_ne_zero", []], ["del", "theorem", "inv_zero", []], ["del", "theorem", "mul_div_assoc", []], ["del", "theorem", "mul_div_cancel'", []], ["del", "theorem", "mul_div_cancel", []], ["del", "theorem", "mul_div_cancel_left", []], ["del", "theorem", "mul_div_mul_left", []], ["del", "theorem", "mul_div_mul_right", []], ["del", "theorem", "mul_eq_mul_of_div_eq_div", []], ["del", "theorem", "mul_eq_of_eq_div", []], ["del", "theorem", "mul_inv'", []], ["del", "theorem", "mul_inv_cancel", []], ["del", "theorem", "mul_mul_div", []], ["del", "theorem", "mul_ne_zero_comm", []], ["del", "theorem", "mul_one_div_cancel", []], ["del", "theorem", "ne_zero_of_one_div_ne_zero", []], ["del", "theorem", "neg_div", []], ["del", "theorem", "neg_div_neg_eq", []], ["del", "theorem", "one_div_add_one_div", []], ["del", "theorem", "one_div_div", []], ["del", "theorem", "one_div_eq_inv", []], ["del", "theorem", "one_div_mul_add_mul_one_div_eq_one_div_add_one_div", []], ["del", "theorem", "one_div_mul_cancel", []], ["del", "theorem", "one_div_mul_one_div", []], ["del", "theorem", "one_div_mul_sub_mul_one_div_eq_one_div_add_one_div", []], ["del", "theorem", "one_div_ne_zero", []], ["del", "theorem", "one_div_neg_eq_neg_one_div", []], ["del", "theorem", "one_div_neg_one_eq_neg_one", []], ["del", "theorem", "one_div_one", []], ["del", "theorem", "one_div_one_div", []], ["del", "theorem", "one_inv_eq", []], ["del", "theorem", "zero_div", []]]}, {"oldPath": "src/init_/algebra/functions.lean", "newPath": null, "changes": [["del", "theorem", "abs_abs", []], ["del", "theorem", "abs_abs_sub_abs_le_abs_sub", []], ["del", "theorem", "abs_add_le_abs_add_abs", []], ["del", "theorem", "abs_add_three", []], ["del", "theorem", "abs_by_cases", []], ["del", "theorem", "abs_div", []], ["del", "theorem", "abs_le_of_le_of_neg_le", []], ["del", "theorem", "abs_lt_of_lt_of_neg_lt", []], ["del", "theorem", "abs_mul", []], ["del", "theorem", "abs_mul_abs_self", []], ["del", "theorem", "abs_mul_self", []], ["del", "theorem", "abs_neg", []], ["del", "theorem", "abs_nonneg", []], ["del", "theorem", "abs_of_neg", []], ["del", "theorem", "abs_of_nonneg", []], ["del", "theorem", "abs_of_nonpos", []], ["del", "theorem", "abs_of_pos", []], ["del", "theorem", "abs_one_div", []], ["del", "theorem", "abs_pos_of_ne_zero", []], ["del", "theorem", "abs_pos_of_neg", []], ["del", "theorem", "abs_pos_of_pos", []], ["del", "theorem", "abs_sub", []], ["del", "theorem", "abs_sub_abs_le_abs_sub", []], ["del", "theorem", "abs_sub_le", []], ["del", "theorem", "abs_sub_square", []], ["del", "theorem", "abs_zero", []], ["del", "theorem", "dist_bdd_within_interval", []], ["del", "theorem", "eq_of_abs_sub_eq_zero", []], ["del", "theorem", "eq_zero_of_abs_eq_zero", []], ["del", "theorem", "eq_zero_of_mul_self_add_mul_self_eq_zero", []], ["del", "theorem", "eq_zero_of_neg_eq", []], ["del", "theorem", "le_abs_self", []], ["del", "theorem", "max_add_add_left", []], ["del", "theorem", "max_add_add_right", []], ["del", "theorem", "max_eq_neg_min_neg_neg", []], ["del", "theorem", "max_neg_neg", []], ["del", "theorem", "min_add_add_left", []], ["del", "theorem", "min_add_add_right", []], ["del", "theorem", "min_eq_neg_max_neg_neg", []], ["del", "theorem", "min_neg_neg", []], ["del", "theorem", "ne_zero_of_abs_ne_zero", []], ["del", "theorem", "neg_le_abs_self", []], ["del", "theorem", "sub_le_of_abs_sub_le_left", []], ["del", "theorem", "sub_le_of_abs_sub_le_right", []], ["del", "theorem", "sub_lt_of_abs_sub_lt_left", []], ["del", "theorem", "sub_lt_of_abs_sub_lt_right", []]]}, {"oldPath": "src/init_/algebra/group.lean", "newPath": null, "changes": [["del", "theorem", "add_eq_of_eq_sub'", []], ["del", "theorem", "add_eq_of_eq_sub", []], ["del", "def", "add_neg_self", []], ["del", "theorem", "add_sub", []], ["del", "theorem", "add_sub_add_left_eq_sub", []], ["del", "theorem", "add_sub_add_right_eq_sub", []], ["del", "theorem", "add_sub_assoc", []], ["del", "theorem", "add_sub_cancel", []], ["del", "theorem", "add_sub_comm", []], ["del", "theorem", "eq_add_of_sub_eq'", []], ["del", "theorem", "eq_add_of_sub_eq", []], ["del", "theorem", "eq_inv_mul_of_mul_eq", []], ["del", "theorem", "eq_inv_of_eq_inv", []], ["del", "theorem", "eq_inv_of_mul_eq_one", []], ["del", "theorem", "eq_mul_inv_of_mul_eq", []], ["del", "theorem", "eq_mul_of_inv_mul_eq", []], ["del", "theorem", "eq_mul_of_mul_inv_eq", []], ["del", "def", "eq_of_add_eq_add_left", []], ["del", "def", "eq_of_add_eq_add_right", []], ["del", "theorem", "eq_of_sub_eq_zero", []], ["del", "theorem", "eq_sub_of_add_eq'", []], ["del", "theorem", "eq_sub_of_add_eq", []], ["del", "theorem", "mul_left_cancel", ["group"]], ["del", "theorem", "mul_right_cancel", ["group"]], ["del", "theorem", "inv_eq_of_mul_eq_one", []], ["del", "theorem", "inv_inj", []], ["del", "theorem", "inv_inv", []], ["del", "theorem", "inv_mul_cancel_left", []], ["del", "theorem", "inv_mul_cancel_right", []], ["del", "theorem", "inv_mul_eq_of_eq_mul", []], ["del", "def", "inv_mul_self", []], ["del", "theorem", "mul_assoc", []], ["del", "theorem", "mul_comm", []], ["del", "theorem", "mul_eq_of_eq_inv_mul", []], ["del", "theorem", "mul_eq_of_eq_mul_inv", []], ["del", "theorem", "mul_inv", []], ["del", "theorem", "mul_inv_cancel_left", []], ["del", "theorem", "mul_inv_cancel_right", []], ["del", "theorem", "mul_inv_eq_of_eq_mul", []], ["del", "theorem", "mul_inv_rev", []], ["del", "def", "mul_inv_self", []], ["del", "theorem", "mul_left_cancel", []], ["del", "theorem", "mul_left_cancel_iff", []], ["del", "theorem", "mul_left_comm", []], ["del", "theorem", "mul_left_inv", []], ["del", "theorem", "mul_one", []], ["del", "theorem", "mul_right_cancel", []], ["del", "theorem", "mul_right_cancel_iff", []], ["del", "theorem", "mul_right_comm", []], ["del", "theorem", "mul_right_inv", []], ["del", "theorem", "neg_add_eq_sub", []], ["del", "def", "neg_add_self", []], ["del", "theorem", "neg_neg_sub_neg", []], ["del", "theorem", "neg_sub", []], ["del", "theorem", "one_inv", []], ["del", "theorem", "one_mul", []], ["del", "theorem", "sub_add", []], ["del", "theorem", "sub_add_cancel", []], ["del", "theorem", "sub_add_eq_add_sub", []], ["del", "theorem", "sub_add_eq_sub_sub", []], ["del", "theorem", "sub_add_eq_sub_sub_swap", []], ["del", "theorem", "sub_eq_add_neg", []], ["del", "theorem", "sub_eq_of_eq_add'", []], ["del", "theorem", "sub_eq_of_eq_add", []], ["del", "theorem", "sub_eq_sub_add_sub", []], ["del", "theorem", "sub_eq_zero_iff_eq", []], ["del", "theorem", "sub_eq_zero_of_eq", []], ["del", "theorem", "sub_ne_zero_of_ne", []], ["del", "theorem", "sub_neg_eq_add", []], ["del", "theorem", "sub_self", []], ["del", "theorem", "sub_sub", []], ["del", "theorem", "sub_sub_self", []], ["del", "theorem", "sub_zero", []], ["del", "theorem", "zero_sub", []]]}, {"oldPath": "src/init_/algebra/norm_num.lean", "newPath": "src/init_/algebra/norm_num.lean", "changes": []}, {"oldPath": "src/init_/algebra/ordered_field.lean", "newPath": null, "changes": [["del", "theorem", "add_halves", []], ["del", "theorem", "add_midpoint", []], ["del", "theorem", "add_self_div_two", []], ["del", "theorem", "div_le_div_of_le_of_neg", []], ["del", "theorem", "div_le_div_of_le_of_pos", []], ["del", "theorem", "div_le_div_of_mul_sub_mul_div_nonpos", []], ["del", "theorem", "div_le_of_le_mul", []], ["del", "theorem", "div_le_of_mul_le_of_neg", []], ["del", "theorem", "div_lt_div_of_lt_of_neg", []], ["del", "theorem", "div_lt_div_of_lt_of_pos", []], ["del", "theorem", "div_lt_div_of_mul_sub_mul_div_neg", []], ["del", "theorem", "div_lt_div_of_pos_of_lt_of_pos", []], ["del", "theorem", "div_lt_of_mul_gt_of_neg", []], ["del", "theorem", "div_lt_of_mul_lt_of_pos", []], ["del", "theorem", "div_mul_le_div_mul_of_div_le_div_pos'", []], ["del", "theorem", "div_mul_le_div_mul_of_div_le_div_pos", []], ["del", "theorem", "div_neg_of_neg_of_pos", []], ["del", "theorem", "div_neg_of_pos_of_neg", []], ["del", "theorem", "div_nonneg_of_nonneg_of_pos", []], ["del", "theorem", "div_nonneg_of_nonpos_of_neg", []], ["del", "theorem", "div_nonpos_of_nonneg_of_neg", []], ["del", "theorem", "div_nonpos_of_nonpos_of_pos", []], ["del", "theorem", "div_pos_of_neg_of_neg", []], ["del", "theorem", "div_pos_of_pos_of_pos", []], ["del", "theorem", "div_two_lt_of_pos", []], ["del", "theorem", "div_two_sub_self", []], ["del", "theorem", "exists_add_lt_and_pos_of_lt", []], ["del", "theorem", "ge_of_forall_ge_sub", []], ["del", "theorem", "le_div_of_mul_le", []], ["del", "theorem", "le_mul_of_div_le", []], ["del", "theorem", "le_mul_of_ge_one_left", []], ["del", "theorem", "le_mul_of_ge_one_right", []], ["del", "theorem", "le_of_one_div_le_one_div", []], ["del", "theorem", "le_of_one_div_le_one_div_of_neg", []], ["del", "theorem", "le_of_one_le_div", []], ["del", "theorem", "lt_div_of_mul_lt", []], ["del", "theorem", "lt_mul_of_gt_one_right", []], ["del", "theorem", "lt_of_one_div_lt_one_div", []], ["del", "theorem", "lt_of_one_div_lt_one_div_of_neg", []], ["del", "theorem", "lt_of_one_lt_div", []], ["del", "theorem", "mul_le_mul_of_mul_div_le", []], ["del", "theorem", "mul_le_of_div_le_of_neg", []], ["del", "theorem", "mul_le_of_le_div", []], ["del", "theorem", "mul_lt_of_gt_div_of_neg", []], ["del", "theorem", "mul_lt_of_lt_div", []], ["del", "theorem", "mul_sub_mul_div_mul_neg", []], ["del", "theorem", "mul_sub_mul_div_mul_nonpos", []], ["del", "theorem", "mul_zero_lt_mul_inv_of_neg", []], ["del", "theorem", "mul_zero_lt_mul_inv_of_pos", []], ["del", "theorem", "neg_of_one_div_neg", []], ["del", "theorem", "one_div_le_neg_one", []], ["del", "theorem", "one_div_le_of_one_div_le_of_neg", []], ["del", "theorem", "one_div_le_of_one_div_le_of_pos", []], ["del", "theorem", "one_div_le_one_div_of_le", []], ["del", "theorem", "one_div_le_one_div_of_le_of_neg", []], ["del", "theorem", "one_div_lt_neg_one", []], ["del", "theorem", "one_div_lt_one_div_of_lt", []], ["del", "theorem", "one_div_lt_one_div_of_lt_of_neg", []], ["del", "theorem", "one_div_neg_of_neg", []], ["del", "theorem", "one_div_pos_of_pos", []], ["del", "theorem", "one_le_div_of_le", []], ["del", "theorem", "one_le_one_div", []], ["del", "theorem", "one_lt_div_of_lt", []], ["del", "theorem", "one_lt_one_div", []], ["del", "theorem", "pos_of_one_div_pos", []], ["del", "theorem", "sub_self_div_two", []]]}, {"oldPath": "src/init_/algebra/ordered_group.lean", "newPath": null, "changes": [["del", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg", []], ["del", "theorem", "add_le_add", []], ["del", "theorem", "add_le_add_left", []], ["del", "theorem", "add_le_add_right", []], ["del", "theorem", "add_le_add_three", []], ["del", "theorem", "add_le_of_le_neg_add", []], ["del", "theorem", "add_le_of_le_of_nonpos", []], ["del", "theorem", "add_le_of_le_sub_left", []], ["del", "theorem", "add_le_of_le_sub_right", []], ["del", "theorem", "add_le_of_nonpos_of_le", []], ["del", "theorem", "add_lt_add", []], ["del", "theorem", "add_lt_add_left", []], ["del", "theorem", "add_lt_add_of_le_of_lt", []], ["del", "theorem", "add_lt_add_of_lt_of_le", []], ["del", "theorem", "add_lt_add_right", []], ["del", "theorem", "add_lt_of_le_of_neg", []], ["del", "theorem", "add_lt_of_lt_neg_add", []], ["del", "theorem", "add_lt_of_lt_of_neg", []], ["del", "theorem", "add_lt_of_lt_of_nonpos", []], ["del", "theorem", "add_lt_of_lt_sub_left", []], ["del", "theorem", "add_lt_of_lt_sub_right", []], ["del", "theorem", "add_lt_of_neg_of_le", []], ["del", "theorem", "add_lt_of_neg_of_lt", []], ["del", "theorem", "add_lt_of_nonpos_of_lt", []], ["del", "theorem", "add_neg", []], ["del", "theorem", "add_neg_of_neg_of_nonpos", []], ["del", "theorem", "add_neg_of_nonpos_of_neg", []], ["del", "theorem", "add_nonneg", []], ["del", "theorem", "add_nonpos", []], ["del", "theorem", "add_pos", []], ["del", "theorem", "add_pos_of_nonneg_of_pos", []], ["del", "theorem", "add_pos_of_pos_of_nonneg", []], ["del", "theorem", "add_lt_add_left", ["decidable_linear_ordered_add_comm_group"]], ["del", "theorem", "le_add_of_le_of_nonneg", []], ["del", "theorem", "le_add_of_neg_add_le", []], ["del", "theorem", "le_add_of_neg_add_le_left", []], ["del", "theorem", "le_add_of_neg_add_le_right", []], ["del", "theorem", "le_add_of_neg_le_sub_left", []], ["del", "theorem", "le_add_of_neg_le_sub_right", []], ["del", "theorem", "le_add_of_nonneg_left", []], ["del", "theorem", "le_add_of_nonneg_of_le", []], ["del", "theorem", "le_add_of_nonneg_right", []], ["del", "theorem", "le_add_of_sub_left_le", []], ["del", "theorem", "le_add_of_sub_right_le", []], ["del", "theorem", "le_neg_add_of_add_le", []], ["del", "theorem", "le_neg_of_le_neg", []], ["del", "theorem", "le_of_add_le_add_left", []], ["del", "theorem", "le_of_add_le_add_right", []], ["del", "theorem", "le_of_neg_le_neg", []], ["del", "theorem", "le_of_sub_nonneg", []], ["del", "theorem", "le_of_sub_nonpos", []], ["del", "theorem", "le_sub_left_of_add_le", []], ["del", "theorem", "le_sub_right_of_add_le", []], ["del", "theorem", "lt_add_of_le_of_pos", []], ["del", "theorem", "lt_add_of_lt_of_nonneg", []], ["del", "theorem", "lt_add_of_lt_of_pos", []], ["del", "theorem", "lt_add_of_neg_add_lt", []], ["del", "theorem", "lt_add_of_neg_add_lt_left", []], ["del", "theorem", "lt_add_of_neg_add_lt_right", []], ["del", "theorem", "lt_add_of_neg_lt_sub_left", []], ["del", "theorem", "lt_add_of_neg_lt_sub_right", []], ["del", "theorem", "lt_add_of_nonneg_of_lt", []], ["del", "theorem", "lt_add_of_pos_left", []], ["del", "theorem", "lt_add_of_pos_of_le", []], ["del", "theorem", "lt_add_of_pos_of_lt", []], ["del", "theorem", "lt_add_of_pos_right", []], ["del", "theorem", "lt_add_of_sub_left_lt", []], ["del", "theorem", "lt_add_of_sub_right_lt", []], ["del", "theorem", "lt_neg_add_of_add_lt", []], ["del", "theorem", "lt_neg_of_lt_neg", []], ["del", "theorem", "lt_of_add_lt_add_left", []], ["del", "theorem", "lt_of_add_lt_add_right", []], ["del", "theorem", "lt_of_neg_lt_neg", []], ["del", "theorem", "lt_of_sub_neg", []], ["del", "theorem", "lt_of_sub_pos", []], ["del", "theorem", "lt_sub_left_of_add_lt", []], ["del", "theorem", "lt_sub_right_of_add_lt", []], ["del", "theorem", "neg_add_le_left_of_le_add", []], ["del", "theorem", "neg_add_le_of_le_add", []], ["del", "theorem", "neg_add_le_right_of_le_add", []], ["del", "theorem", "neg_add_lt_left_of_lt_add", []], ["del", "theorem", "neg_add_lt_of_lt_add", []], ["del", "theorem", "neg_add_lt_right_of_lt_add", []], ["del", "theorem", "neg_le_neg", []], ["del", "theorem", "neg_le_of_neg_le", []], ["del", "theorem", "neg_le_sub_left_of_le_add", []], ["del", "theorem", "neg_le_sub_right_of_le_add", []], ["del", "theorem", "neg_lt_neg", []], ["del", "theorem", "neg_lt_of_neg_lt", []], ["del", "theorem", "neg_lt_sub_left_of_lt_add", []], ["del", "theorem", "neg_lt_sub_right_of_lt_add", []], ["del", "theorem", "neg_neg_of_pos", []], ["del", "theorem", "neg_nonneg_of_nonpos", []], ["del", "theorem", "neg_nonpos_of_nonneg", []], ["del", "theorem", "neg_of_neg_pos", []], ["del", "theorem", "neg_pos_of_neg", []], ["del", "theorem", "nonneg_of_neg_nonpos", []], ["del", "theorem", "nonpos_of_neg_nonneg", []], ["del", "theorem", "add_lt_add_left", ["ordered_add_comm_group"]], ["del", "theorem", "le_of_add_le_add_left", ["ordered_add_comm_group"]], ["del", "theorem", "lt_of_add_lt_add_left", ["ordered_add_comm_group"]], ["del", "theorem", "pos_of_neg_neg", []], ["del", "theorem", "sub_le_of_sub_le", []], ["del", "theorem", "sub_le_self", []], ["del", "theorem", "sub_le_sub", []], ["del", "theorem", "sub_le_sub_left", []], ["del", "theorem", "sub_le_sub_right", []], ["del", "theorem", "sub_left_le_of_le_add", []], ["del", "theorem", "sub_left_lt_of_lt_add", []], ["del", "theorem", "sub_lt_of_sub_lt", []], ["del", "theorem", "sub_lt_self", []], ["del", "theorem", "sub_lt_sub", []], ["del", "theorem", "sub_lt_sub_left", []], ["del", "theorem", "sub_lt_sub_of_le_of_lt", []], ["del", "theorem", "sub_lt_sub_of_lt_of_le", []], ["del", "theorem", "sub_lt_sub_right", []], ["del", "theorem", "sub_neg_of_lt", []], ["del", "theorem", "sub_nonneg_of_le", []], ["del", "theorem", "sub_nonpos_of_le", []], ["del", "theorem", "sub_pos_of_lt", []], ["del", "theorem", "sub_right_le_of_le_add", []], ["del", "theorem", "sub_right_lt_of_lt_add", []]]}, {"oldPath": "src/init_/algebra/ordered_ring.lean", "newPath": null, "changes": [["del", "theorem", "four_pos", []], ["del", "theorem", "gt_of_mul_lt_mul_neg_left", []], ["del", "theorem", "le_of_mul_le_mul_left", []], ["del", "theorem", "le_of_mul_le_mul_right", []], ["del", "theorem", "le_of_mul_le_of_ge_one", []], ["del", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["linear_ordered_ring"]], ["del", "theorem", "lt_of_mul_lt_mul_left", []], ["del", "theorem", "lt_of_mul_lt_mul_right", []], ["del", "theorem", "mul_le_mul", []], ["del", "theorem", "mul_le_mul_of_nonneg_left", []], ["del", "theorem", "mul_le_mul_of_nonneg_right", []], ["del", "theorem", "mul_le_mul_of_nonpos_left", []], ["del", "theorem", "mul_le_mul_of_nonpos_right", []], ["del", "theorem", "mul_lt_mul'", []], ["del", "theorem", "mul_lt_mul", []], ["del", "theorem", "mul_lt_mul_of_neg_left", []], ["del", "theorem", "mul_lt_mul_of_neg_right", []], ["del", "theorem", "mul_lt_mul_of_pos_left", []], ["del", "theorem", "mul_lt_mul_of_pos_right", []], ["del", "theorem", "mul_neg_of_neg_of_pos", []], ["del", "theorem", "mul_neg_of_pos_of_neg", []], ["del", "theorem", "mul_nonneg", []], ["del", "theorem", "mul_nonneg_of_nonpos_of_nonpos", []], ["del", "theorem", "mul_nonpos_of_nonneg_of_nonpos", []], ["del", "theorem", "mul_nonpos_of_nonpos_of_nonneg", []], ["del", "theorem", "mul_pos", []], ["del", "theorem", "mul_pos_of_neg_of_neg", []], ["del", "theorem", "mul_self_le_mul_self", []], ["del", "theorem", "mul_self_le_mul_self_iff", []], ["del", "theorem", "mul_self_lt_mul_self", []], ["del", "theorem", "mul_self_lt_mul_self_iff", []], ["del", "theorem", "mul_self_nonneg", []], ["del", "theorem", "neg_of_mul_neg_left", []], ["del", "theorem", "neg_of_mul_neg_right", []], ["del", "theorem", "nonneg_le_nonneg_of_squares_le", []], ["del", "theorem", "nonneg_of_mul_nonneg_left", []], ["del", "theorem", "nonneg_of_mul_nonneg_right", []], ["del", "theorem", "nonpos_of_mul_nonpos_left", []], ["del", "theorem", "nonpos_of_mul_nonpos_right", []], ["del", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_ring"]], ["del", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_ring"]], ["del", "theorem", "mul_lt_mul_of_pos_left", ["ordered_ring"]], ["del", "theorem", "mul_lt_mul_of_pos_right", ["ordered_ring"]], ["del", "theorem", "mul_nonneg", ["ordered_ring"]], ["del", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_semiring"]], ["del", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_semiring"]], ["del", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", []], ["del", "theorem", "pos_of_mul_pos_left", []], ["del", "theorem", "pos_of_mul_pos_right", []], ["del", "theorem", "two_ge_one", []], ["del", "theorem", "two_gt_one", []], ["del", "theorem", "two_ne_zero", []], ["del", "theorem", "two_pos", []], ["del", "theorem", "zero_gt_neg_one", []], ["del", "theorem", "zero_le_one", []], ["del", "theorem", "zero_lt_one", []]]}, {"oldPath": "src/init_/algebra/ring.lean", "newPath": null, "changes": [["del", "def", "add_mul", []], ["del", "theorem", "add_mul_self_eq", []], ["del", "theorem", "distrib_three_right", []], ["del", "theorem", "elim", ["dvd"]], ["del", "theorem", "elim_left", ["dvd"]], ["del", "theorem", "intro", ["dvd"]], ["del", "theorem", "intro_left", ["dvd"]], ["del", "def", "trans", ["dvd"]], ["del", "theorem", "dvd_add", []], ["del", "theorem", "dvd_add_iff_left", []], ["del", "theorem", "dvd_add_iff_right", []], ["del", "theorem", "dvd_mul_left", []], ["del", "theorem", "dvd_mul_of_dvd_left", []], ["del", "theorem", "dvd_mul_of_dvd_right", []], ["del", "theorem", "dvd_mul_right", []], ["del", "theorem", "dvd_neg_iff_dvd", []], ["del", "theorem", "dvd_neg_of_dvd", []], ["del", "theorem", "dvd_of_dvd_neg", []], ["del", "theorem", "dvd_of_mul_left_dvd", []], ["del", "def", "dvd_of_mul_left_eq", []], ["del", "theorem", "dvd_of_mul_right_dvd", []], ["del", "def", "dvd_of_mul_right_eq", []], ["del", "theorem", "dvd_of_neg_dvd", []], ["del", "theorem", "dvd_refl", []], ["del", "theorem", "dvd_sub", []], ["del", "theorem", "dvd_trans", []], ["del", "theorem", "dvd_zero", []], ["del", "theorem", "eq_of_mul_eq_mul_left", []], ["del", "theorem", "eq_of_mul_eq_mul_right", []], ["del", "theorem", "eq_zero_of_mul_eq_self_left", []], ["del", "theorem", "eq_zero_of_mul_eq_self_right", []], ["del", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["del", "theorem", "eq_zero_of_zero_dvd", []], ["del", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", []], ["del", "theorem", "exists_eq_mul_left_of_dvd", []], ["del", "theorem", "exists_eq_mul_right_of_dvd", []], ["del", "theorem", "left_distrib", []], ["del", "def", "mul_add", []], ["del", "theorem", "mul_dvd_mul", []], ["del", "theorem", "mul_dvd_mul_left", []], ["del", "theorem", "mul_dvd_mul_right", []], ["del", "theorem", "mul_eq_zero_iff_eq_zero_or_eq_zero", []], ["del", "theorem", "mul_ne_zero", []], ["del", "theorem", "mul_neg_eq_neg_mul_symm", []], ["del", "theorem", "mul_self_eq_mul_self_iff", []], ["del", "theorem", "mul_self_eq_one_iff", []], ["del", "theorem", "mul_self_sub_mul_self_eq", []], ["del", "theorem", "mul_self_sub_one_eq", []], ["del", "def", "mul_sub", []], ["del", "theorem", "mul_sub_left_distrib", []], ["del", "theorem", "mul_sub_right_distrib", []], ["del", "theorem", "mul_zero", []], ["del", "theorem", "ne_zero_of_mul_ne_zero_left", []], ["del", "theorem", "ne_zero_of_mul_ne_zero_right", []], ["del", "theorem", "neg_dvd_iff_dvd", []], ["del", "theorem", "neg_dvd_of_dvd", []], ["del", "theorem", "neg_eq_neg_one_mul", []], ["del", "theorem", "neg_mul_comm", []], ["del", "theorem", "neg_mul_eq_mul_neg", []], ["del", "theorem", "neg_mul_eq_neg_mul", []], ["del", "theorem", "neg_mul_eq_neg_mul_symm", []], ["del", "theorem", "neg_mul_neg", []], ["del", "theorem", "one_add_one_eq_two", []], ["del", "theorem", "one_dvd", []], ["del", "theorem", "one_ne_zero", []], ["del", "theorem", "right_distrib", []], ["del", "theorem", "mul_zero", ["ring"]], ["del", "theorem", "zero_mul", ["ring"]], ["del", "def", "sub_mul", []], ["del", "theorem", "two_mul", []], ["del", "theorem", "zero_mul", []], ["del", "theorem", "zero_ne_one", []]]}, {"oldPath": "src/init_/data/int/basic.lean", "newPath": "src/init_/data/int/basic.lean", "changes": []}, {"oldPath": "src/init_/data/int/order.lean", "newPath": "src/init_/data/int/order.lean", "changes": []}, {"oldPath": "src/init_/data/nat/lemmas.lean", "newPath": "src/init_/data/nat/lemmas.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "def", "coord_fun", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/quadratic_form.lean", "newPath": "src/linear_algebra/quadratic_form.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["add", "theorem", "subst_into_add", ["norm_num"]], ["add", "theorem", "subst_into_mul", ["norm_num"]]]}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "test/coinductive.lean", "newPath": "test/coinductive.lean", "changes": []}, {"oldPath": "test/finish4.lean", "newPath": "test/finish4.lean", "changes": [["mod", "def", "append1", []]]}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}, {"oldPath": "test/lint_simp_comm.lean", "newPath": "test/lint_simp_comm.lean", "changes": []}, {"oldPath": "test/mk_iff_of_inductive.lean", "newPath": "test/mk_iff_of_inductive.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}, {"oldPath": "test/norm_cast_int.lean", "newPath": "test/norm_cast_int.lean", "changes": []}, {"oldPath": "test/norm_cast_lemma_order.lean", "newPath": "test/norm_cast_lemma_order.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/nth_rewrite.lean", "newPath": "test/nth_rewrite.lean", "changes": []}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}, {"oldPath": "test/refine_struct.lean", "newPath": "test/refine_struct.lean", "changes": []}, {"oldPath": "test/rewrite.lean", "newPath": "test/rewrite.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}, {"oldPath": "test/simp_rw.lean", "newPath": "test/simp_rw.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1589809119, "sha": "18217e9a", "message": "feat(nat/choose): Generalise nat.dvd_choose (#2703)\nSpin-off from #2701.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": [["del", "theorem", "dvd_choose", ["nat", "prime"]], ["add", "theorem", "dvd_choose_add", ["nat", "prime"]], ["add", "theorem", "dvd_choose_self", ["nat", "prime"]], ["mod", "theorem", "sum_range_choose", []]]}]}, {"timestamp": 1589801068, "sha": "434e6a65", "message": "chore(*): update to lean 3.13.2 (#2728)\nThis should fix the bug with the missing module doc strings in the documentation.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1589758752, "sha": "93119dd6", "message": "chore(scripts): update nolints.txt (#2721)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589755076, "sha": "73251047", "message": "feat(ci): store xz archives (#2719)\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/olean.20cache", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1589745697, "sha": "cdf97dcc", "message": "refactor(field_theory): preparations for Chevalley–Warning (#2590)\nThis PR adds some preparations for the Chevalley–Warning theorem.\ndepends on: ~#2606, #2607, #2623~", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "coe_val_hom", ["units"]], ["add", "def", "val_hom", ["units"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["mod", "theorem", "card'", ["finite_field"]], ["mod", "theorem", "card", ["finite_field"]], ["mod", "theorem", "card_image_polynomial_eval", ["finite_field"]], ["add", "theorem", "cast_card_eq_zero", ["finite_field"]], ["mod", "theorem", "exists_root_sum_quadratic", ["finite_field"]], ["del", "def", "field_of_integral_domain", ["finite_field"]], ["add", "theorem", "forall_pow_eq_one_iff", ["finite_field"]], ["mod", "theorem", "pow_card_sub_one_eq_one", ["finite_field"]], ["add", "theorem", "sum_pow_lt_card_sub_one", ["finite_field"]], ["add", "theorem", "sum_pow_units", ["finite_field"]]]}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": [["mod", "theorem", "card_fiber_eq_of_mem_range", []], ["mod", "theorem", "card_nth_roots_subgroup_units", []], ["add", "def", "field_of_integral_domain", []], ["add", "theorem", "is_cyclic_of_subgroup_integral_domain", []]]}]}, {"timestamp": 1589738284, "sha": "f23c361e", "message": "chore(*): bump to lean-3.13.1 (#2697)\n## Move algebra to mathlib\nThe algebraic hierarchy has moved from the core library to `init_`. In later PRs this can be integrated into the existing directory structure of mathlib.", "changes": [{"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo1988_q6.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": null, "newPath": "src/init_/algebra/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/init_/algebra/field.lean", "changes": [["add", "theorem", "add_div_eq_mul_add_div", []], ["add", "theorem", "div_add_div", []], ["add", "theorem", "div_add_div_same", []], ["add", "theorem", "div_div_div_div_eq", []], ["add", "theorem", "div_div_eq_div_mul", []], ["add", "theorem", "div_div_eq_mul_div", []], ["add", "theorem", "div_eq_mul_one_div", []], ["add", "theorem", "div_eq_one_iff_eq", []], ["add", "theorem", "div_helper", []], ["add", "theorem", "div_mul_cancel", []], ["add", "theorem", "div_mul_div", []], ["add", "theorem", "div_mul_eq_div_mul_one_div", []], ["add", "theorem", "div_mul_eq_mul_div", []], ["add", "theorem", "div_mul_eq_mul_div_comm", []], ["add", "theorem", "div_mul_left", []], ["add", "theorem", "div_mul_right", []], ["add", "theorem", "div_neg_eq_neg_div", []], ["add", "theorem", "div_one", []], ["add", "theorem", "div_self", []], ["add", "theorem", "div_sub_div", []], ["add", "theorem", "div_sub_div_same", []], ["add", "theorem", "div_zero", []], ["add", "theorem", "division_def", []], ["add", "theorem", "mul_ne_zero", ["division_ring"]], ["add", "theorem", "one_div_mul_one_div", ["division_ring"]], ["add", "theorem", "eq_div_iff_mul_eq", []], ["add", "theorem", "eq_div_of_mul_eq", []], ["add", "theorem", "eq_of_div_eq_one", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_left", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_right", []], ["add", "theorem", "eq_of_one_div_eq_one_div", []], ["add", "theorem", "eq_one_div_of_mul_eq_one", []], ["add", "theorem", "eq_one_div_of_mul_eq_one_left", []], ["add", "theorem", "eq_zero_of_one_div_eq_zero", []], ["add", "theorem", "inv_eq_one_div", []], ["add", "theorem", "inv_inv'", []], ["add", "theorem", "inv_mul_cancel", []], ["add", "theorem", "inv_ne_zero", []], ["add", "theorem", "inv_zero", []], ["add", "theorem", "mul_div_assoc", []], ["add", "theorem", "mul_div_cancel'", []], ["add", "theorem", "mul_div_cancel", []], ["add", "theorem", "mul_div_cancel_left", []], ["add", "theorem", "mul_div_mul_left", []], ["add", "theorem", "mul_div_mul_right", []], ["add", "theorem", "mul_eq_mul_of_div_eq_div", []], ["add", "theorem", "mul_eq_of_eq_div", []], ["add", "theorem", "mul_inv'", []], ["add", "theorem", "mul_inv_cancel", []], ["add", "theorem", "mul_mul_div", []], ["add", "theorem", "mul_ne_zero_comm", []], ["add", "theorem", "mul_one_div_cancel", []], ["add", "theorem", "ne_zero_of_one_div_ne_zero", []], ["add", "theorem", "neg_div", []], ["add", "theorem", "neg_div_neg_eq", []], ["add", "theorem", "one_div_add_one_div", []], ["add", "theorem", "one_div_div", []], ["add", "theorem", "one_div_eq_inv", []], ["add", "theorem", "one_div_mul_add_mul_one_div_eq_one_div_add_one_div", []], ["add", "theorem", "one_div_mul_cancel", []], ["add", "theorem", "one_div_mul_one_div", []], ["add", "theorem", "one_div_mul_sub_mul_one_div_eq_one_div_add_one_div", []], ["add", "theorem", "one_div_ne_zero", []], ["add", "theorem", "one_div_neg_eq_neg_one_div", []], ["add", "theorem", "one_div_neg_one_eq_neg_one", []], ["add", "theorem", "one_div_one", []], ["add", "theorem", "one_div_one_div", []], ["add", "theorem", "one_inv_eq", []], ["add", "theorem", "zero_div", []]]}, {"oldPath": null, "newPath": "src/init_/algebra/functions.lean", "changes": [["add", "theorem", "abs_abs", []], ["add", "theorem", "abs_abs_sub_abs_le_abs_sub", []], ["add", "theorem", "abs_add_le_abs_add_abs", []], ["add", "theorem", "abs_add_three", []], ["add", "theorem", "abs_by_cases", []], ["add", "theorem", "abs_div", []], ["add", "theorem", "abs_le_of_le_of_neg_le", []], ["add", "theorem", "abs_lt_of_lt_of_neg_lt", []], ["add", "theorem", "abs_mul", []], ["add", "theorem", "abs_mul_abs_self", []], ["add", "theorem", "abs_mul_self", []], ["add", "theorem", "abs_neg", []], ["add", "theorem", "abs_nonneg", []], ["add", "theorem", "abs_of_neg", []], ["add", "theorem", "abs_of_nonneg", []], ["add", "theorem", "abs_of_nonpos", []], ["add", "theorem", "abs_of_pos", []], ["add", "theorem", "abs_one_div", []], ["add", "theorem", "abs_pos_of_ne_zero", []], ["add", "theorem", "abs_pos_of_neg", []], ["add", "theorem", "abs_pos_of_pos", []], ["add", "theorem", "abs_sub", []], ["add", "theorem", "abs_sub_abs_le_abs_sub", []], ["add", "theorem", "abs_sub_le", []], ["add", "theorem", "abs_sub_square", []], ["add", "theorem", "abs_zero", []], ["add", "theorem", "dist_bdd_within_interval", []], ["add", "theorem", "eq_of_abs_sub_eq_zero", []], ["add", "theorem", "eq_zero_of_abs_eq_zero", []], ["add", "theorem", "eq_zero_of_mul_self_add_mul_self_eq_zero", []], ["add", "theorem", "eq_zero_of_neg_eq", []], ["add", "theorem", "le_abs_self", []], ["add", "theorem", "max_add_add_left", []], ["add", "theorem", "max_add_add_right", []], ["add", "theorem", "max_eq_neg_min_neg_neg", []], ["add", "theorem", "max_neg_neg", []], ["add", "theorem", "min_add_add_left", []], ["add", "theorem", "min_add_add_right", []], ["add", "theorem", "min_eq_neg_max_neg_neg", []], ["add", "theorem", "min_neg_neg", []], ["add", "theorem", "ne_zero_of_abs_ne_zero", []], ["add", "theorem", "neg_le_abs_self", []], ["add", "theorem", "sub_le_of_abs_sub_le_left", []], ["add", "theorem", "sub_le_of_abs_sub_le_right", []], ["add", "theorem", "sub_lt_of_abs_sub_lt_left", []], ["add", "theorem", "sub_lt_of_abs_sub_lt_right", []]]}, {"oldPath": null, "newPath": "src/init_/algebra/group.lean", "changes": [["add", "theorem", "add_eq_of_eq_sub'", []], ["add", "theorem", "add_eq_of_eq_sub", []], ["add", "def", "add_neg_self", []], ["add", "theorem", "add_sub", []], ["add", "theorem", "add_sub_add_left_eq_sub", []], ["add", "theorem", "add_sub_add_right_eq_sub", []], ["add", "theorem", "add_sub_assoc", []], ["add", "theorem", "add_sub_cancel", []], ["add", "theorem", "add_sub_comm", []], ["add", "theorem", "eq_add_of_sub_eq'", []], ["add", "theorem", "eq_add_of_sub_eq", []], ["add", "theorem", "eq_inv_mul_of_mul_eq", []], ["add", "theorem", "eq_inv_of_eq_inv", []], ["add", "theorem", "eq_inv_of_mul_eq_one", []], ["add", "theorem", "eq_mul_inv_of_mul_eq", []], ["add", "theorem", "eq_mul_of_inv_mul_eq", []], ["add", "theorem", "eq_mul_of_mul_inv_eq", []], ["add", "def", "eq_of_add_eq_add_left", []], ["add", "def", "eq_of_add_eq_add_right", []], ["add", "theorem", "eq_of_sub_eq_zero", []], ["add", "theorem", "eq_sub_of_add_eq'", []], ["add", "theorem", "eq_sub_of_add_eq", []], ["add", "theorem", "mul_left_cancel", ["group"]], ["add", "theorem", "mul_right_cancel", ["group"]], ["add", "theorem", "inv_eq_of_mul_eq_one", []], ["add", "theorem", "inv_inj", []], ["add", "theorem", "inv_inv", []], ["add", "theorem", "inv_mul_cancel_left", []], ["add", "theorem", "inv_mul_cancel_right", []], ["add", "theorem", "inv_mul_eq_of_eq_mul", []], ["add", "def", "inv_mul_self", []], ["add", "theorem", "mul_assoc", []], ["add", "theorem", "mul_comm", []], ["add", "theorem", "mul_eq_of_eq_inv_mul", []], ["add", "theorem", "mul_eq_of_eq_mul_inv", []], ["add", "theorem", "mul_inv", []], ["add", "theorem", "mul_inv_cancel_left", []], ["add", "theorem", "mul_inv_cancel_right", []], ["add", "theorem", "mul_inv_eq_of_eq_mul", []], ["add", "theorem", "mul_inv_rev", []], ["add", "def", "mul_inv_self", []], ["add", "theorem", "mul_left_cancel", []], ["add", "theorem", "mul_left_cancel_iff", []], ["add", "theorem", "mul_left_comm", []], ["add", "theorem", "mul_left_inv", []], ["add", "theorem", "mul_one", []], ["add", "theorem", "mul_right_cancel", []], ["add", "theorem", "mul_right_cancel_iff", []], ["add", "theorem", "mul_right_comm", []], ["add", "theorem", "mul_right_inv", []], ["add", "theorem", "neg_add_eq_sub", []], ["add", "def", "neg_add_self", []], ["add", "theorem", "neg_neg_sub_neg", []], ["add", "theorem", "neg_sub", []], ["add", "theorem", "one_inv", []], ["add", "theorem", "one_mul", []], ["add", "theorem", "sub_add", []], ["add", "theorem", "sub_add_cancel", []], ["add", "theorem", "sub_add_eq_add_sub", []], ["add", "theorem", "sub_add_eq_sub_sub", []], ["add", "theorem", "sub_add_eq_sub_sub_swap", []], ["add", "theorem", "sub_eq_add_neg", []], ["add", "theorem", "sub_eq_of_eq_add'", []], ["add", "theorem", "sub_eq_of_eq_add", []], ["add", "theorem", "sub_eq_sub_add_sub", []], ["add", "theorem", "sub_eq_zero_iff_eq", []], ["add", "theorem", "sub_eq_zero_of_eq", []], ["add", "theorem", "sub_ne_zero_of_ne", []], ["add", "theorem", "sub_neg_eq_add", []], ["add", "theorem", "sub_self", []], ["add", "theorem", "sub_sub", []], ["add", "theorem", "sub_sub_self", []], ["add", "theorem", "sub_zero", []], ["add", "theorem", "zero_sub", []]]}, {"oldPath": null, "newPath": "src/init_/algebra/norm_num.lean", "changes": [["add", "def", "add1", ["norm_num"]], ["add", "theorem", "add1_bit0", ["norm_num"]], ["add", "theorem", "add1_bit1", ["norm_num"]], ["add", "theorem", "add1_bit1_helper", ["norm_num"]], ["add", "theorem", "add1_one", ["norm_num"]], ["add", "theorem", "add1_zero", ["norm_num"]], ["add", "theorem", "add_comm_four", ["norm_num"]], ["add", "theorem", "add_comm_middle", ["norm_num"]], ["add", "theorem", "add_div_helper", ["norm_num"]], ["add", "theorem", "bin_add_zero", ["norm_num"]], ["add", "theorem", "bin_zero_add", ["norm_num"]], ["add", "theorem", "bit0_add_bit0", ["norm_num"]], ["add", "theorem", "bit0_add_bit0_helper", ["norm_num"]], ["add", "theorem", "bit0_add_bit1", ["norm_num"]], ["add", "theorem", "bit0_add_bit1_helper", ["norm_num"]], ["add", "theorem", "bit0_add_one", ["norm_num"]], ["add", "theorem", "bit1_add_bit0", ["norm_num"]], ["add", "theorem", "bit1_add_bit0_helper", ["norm_num"]], ["add", "theorem", "bit1_add_bit1", ["norm_num"]], ["add", "theorem", "bit1_add_bit1_helper", ["norm_num"]], ["add", "theorem", "bit1_add_one", ["norm_num"]], ["add", "theorem", "bit1_add_one_helper", ["norm_num"]], ["add", "theorem", "div_add_helper", ["norm_num"]], ["add", "theorem", "div_eq_div_helper", ["norm_num"]], ["add", "theorem", "div_helper", ["norm_num"]], ["add", "theorem", "div_mul_helper", ["norm_num"]], ["add", "theorem", "mk_cong", ["norm_num"]], ["add", "theorem", "mul_bit0", ["norm_num"]], ["add", "theorem", "mul_bit0_helper", ["norm_num"]], ["add", "theorem", "mul_bit1", ["norm_num"]], ["add", "theorem", "mul_bit1_helper", ["norm_num"]], ["add", "theorem", "mul_div_helper", ["norm_num"]], ["add", "theorem", "mul_one", ["norm_num"]], ["add", "theorem", "mul_zero", ["norm_num"]], ["add", "theorem", "neg_add_neg_eq_of_add_add_eq_zero", ["norm_num"]], ["add", "theorem", "neg_add_neg_helper", ["norm_num"]], ["add", "theorem", "neg_add_pos_eq_of_eq_add", ["norm_num"]], ["add", "theorem", "neg_add_pos_helper1", ["norm_num"]], ["add", "theorem", "neg_add_pos_helper2", ["norm_num"]], ["add", "theorem", "neg_mul_neg_helper", ["norm_num"]], ["add", "theorem", "neg_mul_pos_helper", ["norm_num"]], ["add", "theorem", "neg_neg_helper", ["norm_num"]], ["add", "theorem", "neg_zero_helper", ["norm_num"]], ["add", "theorem", "nonneg_bit0_helper", ["norm_num"]], ["add", "theorem", "nonneg_bit1_helper", ["norm_num"]], ["add", "theorem", "nonzero_of_div_helper", ["norm_num"]], ["add", "theorem", "nonzero_of_neg_helper", ["norm_num"]], ["add", "theorem", "nonzero_of_pos_helper", ["norm_num"]], ["add", "theorem", "one_add_bit0", ["norm_num"]], ["add", "theorem", "one_add_bit1", ["norm_num"]], ["add", "theorem", "one_add_bit1_helper", ["norm_num"]], ["add", "theorem", "one_add_one", ["norm_num"]], ["add", "theorem", "pos_add_neg_helper", ["norm_num"]], ["add", "theorem", "pos_bit0_helper", ["norm_num"]], ["add", "theorem", "pos_bit1_helper", ["norm_num"]], ["add", "theorem", "pos_mul_neg_helper", ["norm_num"]], ["add", "theorem", "sub_nat_pos_helper", ["norm_num"]], ["add", "theorem", "sub_nat_zero_helper", ["norm_num"]], ["add", "theorem", "subst_into_div", ["norm_num"]], ["add", "theorem", "subst_into_prod", ["norm_num"]], ["add", "theorem", "subst_into_subtr", ["norm_num"]], ["add", "theorem", "subst_into_sum", ["norm_num"]], ["add", "theorem", "zero_mul", ["norm_num"]]]}, {"oldPath": null, "newPath": "src/init_/algebra/ordered_field.lean", "changes": [["add", "theorem", "add_halves", []], ["add", "theorem", "add_midpoint", []], ["add", "theorem", "add_self_div_two", []], ["add", "theorem", "div_le_div_of_le_of_neg", []], ["add", "theorem", "div_le_div_of_le_of_pos", []], ["add", "theorem", "div_le_div_of_mul_sub_mul_div_nonpos", []], ["add", "theorem", "div_le_of_le_mul", []], ["add", "theorem", "div_le_of_mul_le_of_neg", []], ["add", "theorem", "div_lt_div_of_lt_of_neg", []], ["add", "theorem", "div_lt_div_of_lt_of_pos", []], ["add", "theorem", "div_lt_div_of_mul_sub_mul_div_neg", []], ["add", "theorem", "div_lt_div_of_pos_of_lt_of_pos", []], ["add", "theorem", "div_lt_of_mul_gt_of_neg", []], ["add", "theorem", "div_lt_of_mul_lt_of_pos", []], ["add", "theorem", "div_mul_le_div_mul_of_div_le_div_pos'", []], ["add", "theorem", "div_mul_le_div_mul_of_div_le_div_pos", []], ["add", "theorem", "div_neg_of_neg_of_pos", []], ["add", "theorem", "div_neg_of_pos_of_neg", []], ["add", "theorem", "div_nonneg_of_nonneg_of_pos", []], ["add", "theorem", "div_nonneg_of_nonpos_of_neg", []], ["add", "theorem", "div_nonpos_of_nonneg_of_neg", []], ["add", "theorem", "div_nonpos_of_nonpos_of_pos", []], ["add", "theorem", "div_pos_of_neg_of_neg", []], ["add", "theorem", "div_pos_of_pos_of_pos", []], ["add", "theorem", "div_two_lt_of_pos", []], ["add", "theorem", "div_two_sub_self", []], ["add", "theorem", "exists_add_lt_and_pos_of_lt", []], ["add", "theorem", "ge_of_forall_ge_sub", []], ["add", "theorem", "le_div_of_mul_le", []], ["add", "theorem", "le_mul_of_div_le", []], ["add", "theorem", "le_mul_of_ge_one_left", []], ["add", "theorem", "le_mul_of_ge_one_right", []], ["add", "theorem", "le_of_one_div_le_one_div", []], ["add", "theorem", "le_of_one_div_le_one_div_of_neg", []], ["add", "theorem", "le_of_one_le_div", []], ["add", "theorem", "lt_div_of_mul_lt", []], ["add", "theorem", "lt_mul_of_gt_one_right", []], ["add", "theorem", "lt_of_one_div_lt_one_div", []], ["add", "theorem", "lt_of_one_div_lt_one_div_of_neg", []], ["add", "theorem", "lt_of_one_lt_div", []], ["add", "theorem", "mul_le_mul_of_mul_div_le", []], ["add", "theorem", "mul_le_of_div_le_of_neg", []], ["add", "theorem", "mul_le_of_le_div", []], ["add", "theorem", "mul_lt_of_gt_div_of_neg", []], ["add", "theorem", "mul_lt_of_lt_div", []], ["add", "theorem", "mul_sub_mul_div_mul_neg", []], ["add", "theorem", "mul_sub_mul_div_mul_nonpos", []], ["add", "theorem", "mul_zero_lt_mul_inv_of_neg", []], ["add", "theorem", "mul_zero_lt_mul_inv_of_pos", []], ["add", "theorem", "neg_of_one_div_neg", []], ["add", "theorem", "one_div_le_neg_one", []], ["add", "theorem", "one_div_le_of_one_div_le_of_neg", []], ["add", "theorem", "one_div_le_of_one_div_le_of_pos", []], ["add", "theorem", "one_div_le_one_div_of_le", []], ["add", "theorem", "one_div_le_one_div_of_le_of_neg", []], ["add", "theorem", "one_div_lt_neg_one", []], ["add", "theorem", "one_div_lt_one_div_of_lt", []], ["add", "theorem", "one_div_lt_one_div_of_lt_of_neg", []], ["add", "theorem", "one_div_neg_of_neg", []], ["add", "theorem", "one_div_pos_of_pos", []], ["add", "theorem", "one_le_div_of_le", []], ["add", "theorem", "one_le_one_div", []], ["add", "theorem", "one_lt_div_of_lt", []], ["add", "theorem", "one_lt_one_div", []], ["add", "theorem", "pos_of_one_div_pos", []], ["add", "theorem", "sub_self_div_two", []]]}, {"oldPath": null, "newPath": "src/init_/algebra/ordered_group.lean", "changes": [["add", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg", []], ["add", "theorem", "add_le_add", []], ["add", "theorem", "add_le_add_left", []], ["add", "theorem", "add_le_add_right", []], ["add", "theorem", "add_le_add_three", []], ["add", "theorem", "add_le_of_le_neg_add", []], ["add", "theorem", "add_le_of_le_of_nonpos", []], ["add", "theorem", "add_le_of_le_sub_left", []], ["add", "theorem", "add_le_of_le_sub_right", []], ["add", "theorem", "add_le_of_nonpos_of_le", []], ["add", "theorem", "add_lt_add", []], ["add", "theorem", "add_lt_add_left", []], ["add", "theorem", "add_lt_add_of_le_of_lt", []], ["add", "theorem", "add_lt_add_of_lt_of_le", []], ["add", "theorem", "add_lt_add_right", []], ["add", "theorem", "add_lt_of_le_of_neg", []], ["add", "theorem", "add_lt_of_lt_neg_add", []], ["add", "theorem", "add_lt_of_lt_of_neg", []], ["add", "theorem", "add_lt_of_lt_of_nonpos", []], ["add", "theorem", "add_lt_of_lt_sub_left", []], ["add", "theorem", "add_lt_of_lt_sub_right", []], ["add", "theorem", "add_lt_of_neg_of_le", []], ["add", "theorem", "add_lt_of_neg_of_lt", []], ["add", "theorem", "add_lt_of_nonpos_of_lt", []], ["add", "theorem", "add_neg", []], ["add", "theorem", "add_neg_of_neg_of_nonpos", []], ["add", "theorem", "add_neg_of_nonpos_of_neg", []], ["add", "theorem", "add_nonneg", []], ["add", "theorem", "add_nonpos", []], ["add", "theorem", "add_pos", []], ["add", "theorem", "add_pos_of_nonneg_of_pos", []], ["add", "theorem", "add_pos_of_pos_of_nonneg", []], ["add", "theorem", "add_lt_add_left", ["decidable_linear_ordered_add_comm_group"]], ["add", "theorem", "le_add_of_le_of_nonneg", []], ["add", "theorem", "le_add_of_neg_add_le", []], ["add", "theorem", "le_add_of_neg_add_le_left", []], ["add", "theorem", "le_add_of_neg_add_le_right", []], ["add", "theorem", "le_add_of_neg_le_sub_left", []], ["add", "theorem", "le_add_of_neg_le_sub_right", []], ["add", "theorem", "le_add_of_nonneg_left", []], ["add", "theorem", "le_add_of_nonneg_of_le", []], ["add", "theorem", "le_add_of_nonneg_right", []], ["add", "theorem", "le_add_of_sub_left_le", []], ["add", "theorem", "le_add_of_sub_right_le", []], ["add", "theorem", "le_neg_add_of_add_le", []], ["add", "theorem", "le_neg_of_le_neg", []], ["add", "theorem", "le_of_add_le_add_left", []], ["add", "theorem", "le_of_add_le_add_right", []], ["add", "theorem", "le_of_neg_le_neg", []], ["add", "theorem", "le_of_sub_nonneg", []], ["add", "theorem", "le_of_sub_nonpos", []], ["add", "theorem", "le_sub_left_of_add_le", []], ["add", "theorem", "le_sub_right_of_add_le", []], ["add", "theorem", "lt_add_of_le_of_pos", []], ["add", "theorem", "lt_add_of_lt_of_nonneg", []], ["add", "theorem", "lt_add_of_lt_of_pos", []], ["add", "theorem", "lt_add_of_neg_add_lt", []], ["add", "theorem", "lt_add_of_neg_add_lt_left", []], ["add", "theorem", "lt_add_of_neg_add_lt_right", []], ["add", "theorem", "lt_add_of_neg_lt_sub_left", []], ["add", "theorem", "lt_add_of_neg_lt_sub_right", []], ["add", "theorem", "lt_add_of_nonneg_of_lt", []], ["add", "theorem", "lt_add_of_pos_left", []], ["add", "theorem", "lt_add_of_pos_of_le", []], ["add", "theorem", "lt_add_of_pos_of_lt", []], ["add", "theorem", "lt_add_of_pos_right", []], ["add", "theorem", "lt_add_of_sub_left_lt", []], ["add", "theorem", "lt_add_of_sub_right_lt", []], ["add", "theorem", "lt_neg_add_of_add_lt", []], ["add", "theorem", "lt_neg_of_lt_neg", []], ["add", "theorem", "lt_of_add_lt_add_left", []], ["add", "theorem", "lt_of_add_lt_add_right", []], ["add", "theorem", "lt_of_neg_lt_neg", []], ["add", "theorem", "lt_of_sub_neg", []], ["add", "theorem", "lt_of_sub_pos", []], ["add", "theorem", "lt_sub_left_of_add_lt", []], ["add", "theorem", "lt_sub_right_of_add_lt", []], ["add", "theorem", "neg_add_le_left_of_le_add", []], ["add", "theorem", "neg_add_le_of_le_add", []], ["add", "theorem", "neg_add_le_right_of_le_add", []], ["add", "theorem", "neg_add_lt_left_of_lt_add", []], ["add", "theorem", "neg_add_lt_of_lt_add", []], ["add", "theorem", "neg_add_lt_right_of_lt_add", []], ["add", "theorem", "neg_le_neg", []], ["add", "theorem", "neg_le_of_neg_le", []], ["add", "theorem", "neg_le_sub_left_of_le_add", []], ["add", "theorem", "neg_le_sub_right_of_le_add", []], ["add", "theorem", "neg_lt_neg", []], ["add", "theorem", "neg_lt_of_neg_lt", []], ["add", "theorem", "neg_lt_sub_left_of_lt_add", []], ["add", "theorem", "neg_lt_sub_right_of_lt_add", []], ["add", "theorem", "neg_neg_of_pos", []], ["add", "theorem", "neg_nonneg_of_nonpos", []], ["add", "theorem", "neg_nonpos_of_nonneg", []], ["add", "theorem", "neg_of_neg_pos", []], ["add", "theorem", "neg_pos_of_neg", []], ["add", "theorem", "nonneg_of_neg_nonpos", []], ["add", "theorem", "nonpos_of_neg_nonneg", []], ["add", "theorem", "add_lt_add_left", ["ordered_add_comm_group"]], ["add", "theorem", "le_of_add_le_add_left", ["ordered_add_comm_group"]], ["add", "theorem", "lt_of_add_lt_add_left", ["ordered_add_comm_group"]], ["add", "theorem", "pos_of_neg_neg", []], ["add", "theorem", "sub_le_of_sub_le", []], ["add", "theorem", "sub_le_self", []], ["add", "theorem", "sub_le_sub", []], ["add", "theorem", "sub_le_sub_left", []], ["add", "theorem", "sub_le_sub_right", []], ["add", "theorem", "sub_left_le_of_le_add", []], ["add", "theorem", "sub_left_lt_of_lt_add", []], ["add", "theorem", "sub_lt_of_sub_lt", []], ["add", "theorem", "sub_lt_self", []], ["add", "theorem", "sub_lt_sub", []], ["add", "theorem", "sub_lt_sub_left", []], ["add", "theorem", "sub_lt_sub_of_le_of_lt", []], ["add", "theorem", "sub_lt_sub_of_lt_of_le", []], ["add", "theorem", "sub_lt_sub_right", []], ["add", "theorem", "sub_neg_of_lt", []], ["add", "theorem", "sub_nonneg_of_le", []], ["add", "theorem", "sub_nonpos_of_le", []], ["add", "theorem", "sub_pos_of_lt", []], ["add", "theorem", "sub_right_le_of_le_add", []], ["add", "theorem", "sub_right_lt_of_lt_add", []]]}, {"oldPath": null, "newPath": "src/init_/algebra/ordered_ring.lean", "changes": [["add", "theorem", "four_pos", []], ["add", "theorem", "gt_of_mul_lt_mul_neg_left", []], ["add", "theorem", "le_of_mul_le_mul_left", []], ["add", "theorem", "le_of_mul_le_mul_right", []], ["add", "theorem", "le_of_mul_le_of_ge_one", []], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["linear_ordered_ring"]], ["add", "theorem", "lt_of_mul_lt_mul_left", []], ["add", "theorem", "lt_of_mul_lt_mul_right", []], ["add", "theorem", "mul_le_mul", []], ["add", "theorem", "mul_le_mul_of_nonneg_left", []], ["add", "theorem", "mul_le_mul_of_nonneg_right", []], ["add", "theorem", "mul_le_mul_of_nonpos_left", []], ["add", "theorem", "mul_le_mul_of_nonpos_right", []], ["add", "theorem", "mul_lt_mul'", []], ["add", "theorem", "mul_lt_mul", []], ["add", "theorem", "mul_lt_mul_of_neg_left", []], ["add", "theorem", "mul_lt_mul_of_neg_right", []], ["add", "theorem", "mul_lt_mul_of_pos_left", []], ["add", "theorem", "mul_lt_mul_of_pos_right", []], ["add", "theorem", "mul_neg_of_neg_of_pos", []], ["add", "theorem", "mul_neg_of_pos_of_neg", []], ["add", "theorem", "mul_nonneg", []], ["add", "theorem", "mul_nonneg_of_nonpos_of_nonpos", []], ["add", "theorem", "mul_nonpos_of_nonneg_of_nonpos", []], ["add", "theorem", "mul_nonpos_of_nonpos_of_nonneg", []], ["add", "theorem", "mul_pos", []], ["add", "theorem", "mul_pos_of_neg_of_neg", []], ["add", "theorem", "mul_self_le_mul_self", []], ["add", "theorem", "mul_self_le_mul_self_iff", []], ["add", "theorem", "mul_self_lt_mul_self", []], ["add", "theorem", "mul_self_lt_mul_self_iff", []], ["add", "theorem", "mul_self_nonneg", []], ["add", "theorem", "neg_of_mul_neg_left", []], ["add", "theorem", "neg_of_mul_neg_right", []], ["add", "theorem", "nonneg_le_nonneg_of_squares_le", []], ["add", "theorem", "nonneg_of_mul_nonneg_left", []], ["add", "theorem", "nonneg_of_mul_nonneg_right", []], ["add", "theorem", "nonpos_of_mul_nonpos_left", []], ["add", "theorem", "nonpos_of_mul_nonpos_right", []], ["add", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_ring"]], ["add", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_ring"]], ["add", "theorem", "mul_lt_mul_of_pos_left", ["ordered_ring"]], ["add", "theorem", "mul_lt_mul_of_pos_right", ["ordered_ring"]], ["add", "theorem", "mul_nonneg", ["ordered_ring"]], ["add", "theorem", "mul_le_mul_of_nonneg_left", ["ordered_semiring"]], ["add", "theorem", "mul_le_mul_of_nonneg_right", ["ordered_semiring"]], ["add", "theorem", "pos_and_pos_or_neg_and_neg_of_mul_pos", []], ["add", "theorem", "pos_of_mul_pos_left", []], ["add", "theorem", "pos_of_mul_pos_right", []], ["add", "theorem", "two_ge_one", []], ["add", "theorem", "two_gt_one", []], ["add", "theorem", "two_ne_zero", []], ["add", "theorem", "two_pos", []], ["add", "theorem", "zero_gt_neg_one", []], ["add", "theorem", "zero_le_one", []], ["add", "theorem", "zero_lt_one", []]]}, {"oldPath": null, "newPath": "src/init_/algebra/ring.lean", "changes": [["add", "def", "add_mul", []], ["add", "theorem", "add_mul_self_eq", []], ["add", "theorem", "distrib_three_right", []], ["add", "theorem", "elim", ["dvd"]], ["add", "theorem", "elim_left", ["dvd"]], ["add", "theorem", "intro", ["dvd"]], ["add", "theorem", "intro_left", ["dvd"]], ["add", "def", "trans", ["dvd"]], ["add", "theorem", "dvd_add", []], ["add", "theorem", "dvd_add_iff_left", []], ["add", "theorem", "dvd_add_iff_right", []], ["add", "theorem", "dvd_mul_left", []], ["add", "theorem", "dvd_mul_of_dvd_left", []], ["add", "theorem", "dvd_mul_of_dvd_right", []], ["add", "theorem", "dvd_mul_right", []], ["add", "theorem", "dvd_neg_iff_dvd", []], ["add", "theorem", "dvd_neg_of_dvd", []], ["add", "theorem", "dvd_of_dvd_neg", []], ["add", "theorem", "dvd_of_mul_left_dvd", []], ["add", "def", "dvd_of_mul_left_eq", []], ["add", "theorem", "dvd_of_mul_right_dvd", []], ["add", "def", "dvd_of_mul_right_eq", []], ["add", "theorem", "dvd_of_neg_dvd", []], ["add", "theorem", "dvd_refl", []], ["add", "theorem", "dvd_sub", []], ["add", "theorem", "dvd_trans", []], ["add", "theorem", "dvd_zero", []], ["add", "theorem", "eq_of_mul_eq_mul_left", []], ["add", "theorem", "eq_of_mul_eq_mul_right", []], ["add", "theorem", "eq_zero_of_mul_eq_self_left", []], ["add", "theorem", "eq_zero_of_mul_eq_self_right", []], ["add", "theorem", "eq_zero_of_mul_self_eq_zero", []], ["add", "theorem", "eq_zero_of_zero_dvd", []], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", []], ["add", "theorem", "exists_eq_mul_left_of_dvd", []], ["add", "theorem", "exists_eq_mul_right_of_dvd", []], ["add", "theorem", "left_distrib", []], ["add", "def", "mul_add", []], ["add", "theorem", "mul_dvd_mul", []], ["add", "theorem", "mul_dvd_mul_left", []], ["add", "theorem", "mul_dvd_mul_right", []], ["add", "theorem", "mul_eq_zero_iff_eq_zero_or_eq_zero", []], ["add", "theorem", "mul_ne_zero", []], ["add", "theorem", "mul_neg_eq_neg_mul_symm", []], ["add", "theorem", "mul_self_eq_mul_self_iff", []], ["add", "theorem", "mul_self_eq_one_iff", []], ["add", "theorem", "mul_self_sub_mul_self_eq", []], ["add", "theorem", "mul_self_sub_one_eq", []], ["add", "def", "mul_sub", []], ["add", "theorem", "mul_sub_left_distrib", []], ["add", "theorem", "mul_sub_right_distrib", []], ["add", "theorem", "mul_zero", []], ["add", "theorem", "ne_zero_of_mul_ne_zero_left", []], ["add", "theorem", "ne_zero_of_mul_ne_zero_right", []], ["add", "theorem", "neg_dvd_iff_dvd", []], ["add", "theorem", "neg_dvd_of_dvd", []], ["add", "theorem", "neg_eq_neg_one_mul", []], ["add", "theorem", "neg_mul_comm", []], ["add", "theorem", "neg_mul_eq_mul_neg", []], ["add", "theorem", "neg_mul_eq_neg_mul", []], ["add", "theorem", "neg_mul_eq_neg_mul_symm", []], ["add", "theorem", "neg_mul_neg", []], ["add", "theorem", "one_add_one_eq_two", []], ["add", "theorem", "one_dvd", []], ["add", "theorem", "one_ne_zero", []], ["add", "theorem", "right_distrib", []], ["add", "theorem", "mul_zero", ["ring"]], ["add", "theorem", "zero_mul", ["ring"]], ["add", "def", "sub_mul", []], ["add", "theorem", "two_mul", []], ["add", "theorem", "zero_mul", []], ["add", "theorem", "zero_ne_one", []]]}, {"oldPath": null, "newPath": "src/init_/data/int/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/init_/data/int/order.lean", "changes": [["add", "theorem", "abs_eq_nat_abs", ["int"]], ["add", "theorem", "nat_abs_abs", ["int"]], ["add", "theorem", "sign_mul_abs", ["int"]]]}, {"oldPath": null, "newPath": "src/init_/data/nat/lemmas.lean", "changes": [["add", "theorem", "eq_of_mul_eq_mul_right", ["nat"]], ["add", "theorem", "le_mul_self", ["nat"]], ["add", "theorem", "mul_self_le_mul_self", ["nat"]], ["add", "theorem", "mul_self_le_mul_self_iff", ["nat"]], ["add", "theorem", "mul_self_lt_mul_self", ["nat"]], ["add", "theorem", "mul_self_lt_mul_self_iff", ["nat"]], ["add", "theorem", "one_add", ["nat"]]]}, {"oldPath": null, "newPath": "src/init_/default.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/doc_commands.lean", "newPath": "test/doc_commands.lean", "changes": []}]}, {"timestamp": 1589728109, "sha": "3449510c", "message": "feat(algebra/big_operators): Alternative phrasing of prod-bij (#2709)\nRequested by @ChrisHughes24 in https://github.com/leanprover-community/mathlib/pull/2688/files#r426184248\nA repaired version of #2708.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_bij'", ["finset"]]]}]}, {"timestamp": 1589716804, "sha": "a206df1e", "message": "chore(scripts): update nolints.txt (#2711)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589701324, "sha": "b530cdb4", "message": "refactor(normed_space): require `norm_smul_le` instead of `norm_smul` (#2693)\nWhile in many cases we can prove `norm_smul` directly, in some cases (e.g., for the operator norm) it's easier to prove `norm_smul_le`. Redefine `normed_space` to avoid repeating the same trick over and over.", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_def", ["prod"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "norm_def", ["continuous_multilinear_map"]], ["mod", "theorem", "op_norm_neg", ["continuous_multilinear_map"]], ["del", "theorem", "op_norm_smul", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_smul_le", ["continuous_multilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "norm_def", ["continuous_linear_map"]], ["mod", "def", "op_norm", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_neg", ["continuous_linear_map"]], ["del", "theorem", "op_norm_smul", ["continuous_linear_map"]], ["add", "theorem", "op_norm_smul_le", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "inv_smul_smul'", []], ["add", "theorem", "smul_eq_zero", ["is_unit"]], ["add", "theorem", "inv_smul_smul", ["mul_action"]], ["add", "theorem", "smul_inv_smul", ["mul_action"]], ["add", "theorem", "smul_inv_smul'", []], ["add", "theorem", "inv_smul_smul", ["units"]], ["add", "theorem", "smul_eq_zero", ["units"]], ["add", "theorem", "smul_inv_smul", ["units"]], ["add", "theorem", "smul_ne_zero", ["units"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["mod", "theorem", "abs_diff_coe_le_dist", ["bounded_continuous_function"]], ["add", "theorem", "add_apply", ["bounded_continuous_function"]], ["mod", "theorem", "coe_add", ["bounded_continuous_function"]], ["add", "theorem", "coe_const", ["bounded_continuous_function"]], ["del", "theorem", "coe_diff", ["bounded_continuous_function"]], ["mod", "theorem", "coe_neg", ["bounded_continuous_function"]], ["add", "theorem", "coe_smul", ["bounded_continuous_function"]], ["add", "theorem", "coe_sub", ["bounded_continuous_function"]], ["add", "theorem", "const_apply", ["bounded_continuous_function"]], ["add", "theorem", "dist_le_two_norm'", ["bounded_continuous_function"]], ["mod", "theorem", "dist_le_two_norm", ["bounded_continuous_function"]], ["add", "theorem", "ext_iff", ["bounded_continuous_function"]], ["add", "theorem", "neg_apply", ["bounded_continuous_function"]], ["add", "theorem", "norm_const_eq", ["bounded_continuous_function"]], ["add", "theorem", "norm_const_le", ["bounded_continuous_function"]], ["add", "theorem", "norm_of_normed_group_le", ["bounded_continuous_function"]], ["del", "theorem", "norm_smul", ["bounded_continuous_function"]], ["del", "theorem", "norm_smul_le", ["bounded_continuous_function"]], ["add", "theorem", "smul_apply", ["bounded_continuous_function"]], ["add", "theorem", "sub_apply", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1589689986, "sha": "39af0f66", "message": "chore(algebra/ring): drop an unneeded instance (#2705)\nWe're incompatible with Lean 3.4.2 for a long time.", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "def", "has_div_of_division_ring", []]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}]}, {"timestamp": 1589681244, "sha": "1580cd87", "message": "fix(algebra/big_operators): typo fix (#2704)\nFix cut-and-paste typos in the doc string for `∑ x, f x`.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}]}, {"timestamp": 1589681242, "sha": "4f484a1e", "message": "feat(archive/100-theorems-list): Sum of the Reciprocals of the Triangular Numbers (#2692)\nAdds a folder `archive/100-theorems-list`, moves our proof of 82 into it, and provides a proof of 42. There's a readme, I haven't really thought about what should go in there.", "changes": [{"oldPath": null, "newPath": "archive/100-theorems-list/42_inverse_triangle_sum.lean", "changes": [["add", "theorem", "inverse_triangle_sum", []]]}, {"oldPath": "archive/cubing_a_cube.lean", "newPath": "archive/100-theorems-list/82_cubing_a_cube.lean", "changes": []}, {"oldPath": null, "newPath": "archive/100-theorems-list/README.md", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_range_induction", ["finset"]], ["mod", "theorem", "sum_range_id_mul_two", ["finset"]], ["add", "theorem", "sum_range_induction", ["finset"]]]}]}, {"timestamp": 1589674074, "sha": "21bdb787", "message": "feat(ring_theory/ideal_operations): jacobson radical, is_local, and primary ideals (#768)", "changes": [{"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "le_jacobson", ["ideal", "is_local"]], ["add", "theorem", "mem_jacobson_or_exists_inv", ["ideal", "is_local"]], ["add", "def", "is_local", ["ideal"]], ["add", "theorem", "is_local_of_is_maximal_radical", ["ideal"]], ["add", "theorem", "to_is_prime", ["ideal", "is_primary"]], ["add", "def", "is_primary", ["ideal"]], ["add", "theorem", "is_primary_inf", ["ideal"]], ["add", "theorem", "is_primary_of_is_maximal_radical", ["ideal"]], ["add", "theorem", "comap", ["ideal", "is_prime"]], ["add", "theorem", "is_prime_radical", ["ideal"]], ["add", "def", "jacobson", ["ideal"]], ["add", "theorem", "jacobson_eq_top_iff", ["ideal"]], ["add", "theorem", "mem_jacobson_iff", ["ideal"]], ["add", "theorem", "mem_radical_of_pow_mem", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "mem_Inf", ["ideal"]]]}]}, {"timestamp": 1589663888, "sha": "00024db7", "message": "refactor(group_theory/monoid_localization): use old_structure_cmd (#2683)\nSecond bit of #2675.\nThe change to ```old_structure_cmd``` is so ring localizations can use this file more easily.\nI've not made sure the map ```f``` is implicit when it can be because ```f.foo``` notation means it doesn't make much difference, but I'll change this if needed.*\nI have changed some of the bad names at the end; they are still not great. Does anyone have any\nalternative suggestions?\nThings to come in future PRs: the group completion of a comm monoid and some examples, ```away``` (localization at a submonoid generated by one element), more stuff on the localization as a quotient type & the fact it satisfies the char pred.\nI think I've learnt some stuff about the ```@[simp]``` linter today. Hopefully I'll be making fewer commits trying and failing to appease it.\n*edit: I mean I haven't checked how many places I can make ```f``` implicit & remove the appropriate ```f.```'s.", "changes": [{"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["mod", "structure", "localization_map", ["add_submonoid"]], ["add", "def", "to_localization_map", ["monoid_hom"]], ["del", "theorem", "comp_mul_equiv_symm_comap_apply", ["submonoid", "localization_map"]], ["del", "theorem", "comp_mul_equiv_symm_map_apply", ["submonoid", "localization_map"]], ["add", "theorem", "eq_iff_exists", ["submonoid", "localization_map"]], ["mod", "theorem", "eq_of_eq", ["submonoid", "localization_map"]], ["mod", "theorem", "ext", ["submonoid", "localization_map"]], ["mod", "theorem", "ext_iff", ["submonoid", "localization_map"]], ["mod", "theorem", "lift_comp", ["submonoid", "localization_map"]], ["mod", "theorem", "lift_id", ["submonoid", "localization_map"]], ["add", "theorem", "map_left_cancel", ["submonoid", "localization_map"]], ["add", "theorem", "map_right_cancel", ["submonoid", "localization_map"]], ["add", "theorem", "map_units", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_mul_cancel_right", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_one", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_sec", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_apply", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_localizations_left_inv", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_localizations_left_inv_apply", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_localizations_right_inv", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_localizations_right_inv_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_symm_apply", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_localizations_symm_eq_mul_equiv_of_localizations", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_mul_equiv_eq_map", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_mul_equiv_mk'", ["submonoid", "localization_map"]], ["del", "theorem", "mul_equiv_of_to_mul_equiv", ["submonoid", "localization_map"]], ["del", "theorem", "mul_equiv_of_to_mul_equiv_apply", ["submonoid", "localization_map"]], ["del", "def", "of_mul_equiv", ["submonoid", "localization_map"]], ["del", "theorem", "of_mul_equiv_eq", ["submonoid", "localization_map"]], ["del", "theorem", "of_mul_equiv_id", ["submonoid", "localization_map"]], ["add", "def", "of_mul_equiv_of_dom", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_dom_apply", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_dom_comp", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_dom_comp_symm", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_dom_eq", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_dom_id", ["submonoid", "localization_map"]], ["add", "def", "of_mul_equiv_of_localizations", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_localizations_apply", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_localizations_comp", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_localizations_eq", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_localizations_eq_iff_eq", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_localizations_id", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_mul_equiv", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_of_mul_equiv_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "sec_spec'", ["submonoid", "localization_map"]], ["mod", "theorem", "sec_spec", ["submonoid", "localization_map"]], ["add", "theorem", "surj", ["submonoid", "localization_map"]], ["add", "theorem", "symm_comp_of_mul_equiv_of_localizations_apply'", ["submonoid", "localization_map"]], ["add", "theorem", "symm_comp_of_mul_equiv_of_localizations_apply", ["submonoid", "localization_map"]], ["del", "theorem", "symm_of_mul_equiv_apply", ["submonoid", "localization_map"]], ["del", "theorem", "symm_to_mul_equiv_apply", ["submonoid", "localization_map"]], ["del", "theorem", "to_fun_inj", ["submonoid", "localization_map"]], ["add", "def", "to_map", ["submonoid", "localization_map"]], ["add", "theorem", "to_map_injective", ["submonoid", "localization_map"]], ["del", "def", "to_mul_equiv", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_comp", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_eq", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_eq_iff_eq", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_id", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_of_mul_equiv", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_of_mul_equiv_apply", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_of_mul_equiv_of_mul_equiv", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_of_mul_equiv_of_mul_equiv_apply", ["submonoid", "localization_map"]], ["mod", "structure", "localization_map", ["submonoid"]]]}]}, {"timestamp": 1589651421, "sha": "a7b17cdd", "message": "feat(data/finset): remove uses of choice for infima (#2699)\nThis PR removes the dependence of many lemmas about inf of finset sets on the axiom of choice. The motivation for this is to make `category_theory.limits.has_finite_limits_of_semilattice_inf_top` not depend on choice, which I would like so that I can prove independence results about topos models of set theory from the axiom of choice.\nThis does make the decidable_classical linter fail.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "inf_mono_fun", ["finset"]], ["mod", "theorem", "le_inf_iff", ["finset"]], ["mod", "theorem", "sup_mono_fun", ["finset"]]]}]}, {"timestamp": 1589640551, "sha": "c81be77b", "message": "feat(data/finset) Another finset disjointness lemma (#2698)\nI couldn't find this anywhere, and I wanted it.\nNaming question: this is \"obviously\" called `disjoint_filter`, except there's already a lemma with that name.\nI know I've broken one of the rules of using `simp` here (\"don't do it at the beginning\"), but this proof is much longer than I'd have thought would be necessary so I'm rather expecting someone to hop in with a one-liner.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "disjoint_filter_filter", ["finset"]]]}]}, {"timestamp": 1589614614, "sha": "4b71428d", "message": "doc(tactic/solve_by_elim): improve docs (#2696)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1589597262, "sha": "74286f51", "message": "feat(category_theory/limits/shapes): avoid choice for binary products (#2695)\nA tiny change to liberate binary products from the axiom of choice", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}]}, {"timestamp": 1589576748, "sha": "1b85e3c2", "message": "chore(*): bump to lean-3.12.0 (#2681)\n## Changes to bracket notation\n* `{a}` now requires an instance `has_singleton`;\n* `insert a ∅ = {a}` is called `insert_emptyc_eq`, provided by an `is_lawful_singleton` instance;\n* `a ∈ ({b} : set α)` is now defeq `a = b`, not `a = b ∨ false`;\n* `({a} : set α)` is no longer defeq `insert a ∅`;\n* `({a} : finset α)` now means `⟨⟨[a]⟩, _⟩` (used to be called `finset.singleton a`), not `insert a ∅`;\n* removed `finset.singleton`;\n* `{a, b}` is now `insert a {b}`, not `insert b {a}`.\n* `finset.univ : finset bool` is now `{tt, ff}`;\n* `(({a} : finset α) : set α)` is no longer defeq `{a}`.\n## Tactic `norm_num`\nThe interactive tactic `norm_num` was recently rewritten in Lean. The non-interactive `tactic.norm_num` has been removed in Lean 3.12 so that we can migrate the algebraic hierarchy to mathlib in 3.13.\n## Tactic combinators\nhttps://github.com/leanprover-community/lean/pull/212 renames a bunch of tactic combinators. We change to using the new names.\n## Tactic `case`\nhttps://github.com/leanprover-community/lean/pull/228 slightly changes the semantics of the `case` tactic. We fix the resulting breakage to be conform the new semantics.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/classical_lie_algebras.lean", "newPath": "src/algebra/classical_lie_algebras.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "center_mass_singleton", ["finset"]]]}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/computability/reduce.lean", "newPath": "src/computability/reduce.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["equiv"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "card_eq_one", ["finset"]], ["mod", "theorem", "card_erase_le", ["finset"]], ["mod", "theorem", "card_erase_lt_of_mem", ["finset"]], ["mod", "theorem", "card_erase_of_mem", ["finset"]], ["mod", "theorem", "card_singleton", ["finset"]], ["mod", "theorem", "coe_singleton", ["finset"]], ["mod", "theorem", "fold_singleton", ["finset"]], ["mod", "theorem", "image_singleton", ["finset"]], ["del", "theorem", "inf_singleton'", ["finset"]], ["mod", "theorem", "inf_singleton", ["finset"]], ["add", "theorem", "infi_coe", ["finset"]], ["del", "theorem", "insert_empty_eq_singleton", ["finset"]], ["del", "theorem", "insert_singleton_self_eq'", ["finset"]], ["mod", "theorem", "insert_singleton_self_eq", ["finset"]], ["mod", "theorem", "inter_singleton_of_mem", ["finset"]], ["mod", "theorem", "inter_singleton_of_not_mem", ["finset"]], ["mod", "theorem", "map_singleton", ["finset"]], ["del", "theorem", "max_singleton'", ["finset"]], ["mod", "theorem", "max_singleton", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_self", ["finset"]], ["del", "theorem", "min_singleton'", ["finset"]], ["mod", "theorem", "min_singleton", ["finset"]], ["mod", "theorem", "ne_empty_of_mem", ["finset"]], ["add", "theorem", "ne_empty", ["finset", "nonempty"]], ["mod", "theorem", "not_mem_singleton", ["finset"]], ["mod", "theorem", "powerset_empty", ["finset"]], ["del", "def", "singleton", ["finset"]], ["mod", "theorem", "singleton_bind", ["finset"]], ["del", "theorem", "singleton_eq_singleton", ["finset"]], ["mod", "theorem", "singleton_iff_unique_mem", ["finset"]], ["mod", "theorem", "singleton_inj", ["finset"]], ["mod", "theorem", "singleton_inter_of_mem", ["finset"]], ["mod", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["add", "theorem", "singleton_nonempty", ["finset"]], ["add", "theorem", "singleton_subset_set_iff", ["finset"]], ["mod", "theorem", "singleton_val", ["finset"]], ["del", "theorem", "sup_singleton'", ["finset"]], ["mod", "theorem", "sup_singleton", ["finset"]], ["add", "theorem", "supr_coe", ["finset"]], ["mod", "theorem", "infi_eq_infi_finset", []], ["mod", "theorem", "to_finset_some", ["option"]], ["mod", "theorem", "supr_eq_supr_finset", []]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "univ_bool", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/list/antidiagonal.lean", "newPath": "src/data/list/antidiagonal.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "doubleton_eq", ["list"]], ["mod", "theorem", "singleton_eq", ["list"]]]}, {"oldPath": "src/data/list/nodup.lean", "newPath": "src/data/list/nodup.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "singleton_def", ["set"]], ["mod", "theorem", "singleton_nonempty", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["add", "theorem", "right_inverse", ["function", "left_inverse"]], ["add", "theorem", "surjective", ["function", "left_inverse"]], ["add", "theorem", "injective", ["function", "right_inverse"]], ["add", "theorem", "left_inverse", ["function", "right_inverse"]]]}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["del", "theorem", "mem_singleton'", ["Set"]], ["mod", "theorem", "mem_singleton", ["Set"]]]}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/converter/apply_congr.lean", "newPath": "src/tactic/converter/apply_congr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/derive_inhabited.lean", "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/mk_iff_of_inductive_prop.lean", "newPath": "src/tactic/mk_iff_of_inductive_prop.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/tactic/slice.lean", "newPath": "src/tactic/slice.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "diam_insert", ["emetric"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1589576746, "sha": "f5f7a3cf", "message": "feat(analysis/special_functions/exp_log): power series for log around 1 (#2646)\nThis PR adds the power series expansion for the real logarithm around `1`, in the form\n```lean\nhas_sum (λ (n : ℕ), x ^ (n + 1) / (n + 1)) (-log (1 - x))\n```", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "div_le_div", []]]}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["mod", "theorem", "norm_image_sub_le_of_norm_deriv_le", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_deriv_within_le", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_fderiv_le", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_fderiv_within_le", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_has_deriv_within_le", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_has_fderiv_within_le", ["convex"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "norm_id_field'", ["continuous_linear_map"]], ["add", "theorem", "norm_id_field", ["continuous_linear_map"]]]}, {"oldPath": "src/analysis/special_functions/exp_log.lean", "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "abs_log_sub_add_sum_range_le", ["real"]], ["add", "theorem", "has_sum_pow_div_log_of_abs_lt_1", ["real"]]]}]}, {"timestamp": 1589566585, "sha": "14a82b30", "message": "fix(tactic/norm_num): div/mod with negative first arg (#2689)\nbugfix from https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/norm_num.20doesn't.20prove/near/197674516", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1589560456, "sha": "a4266a01", "message": "chore(scripts): update nolints.txt (#2690)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589548527, "sha": "471d29e8", "message": "perf(tactic/ring): use new norm_num, avoid mk_app (#2685)\nRemove `tactic.norm_num` from `ring`, and do some performance upgrades borrowed from the `norm_num` overhaul while I'm at it.", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": [["mod", "theorem", "horner_pow", ["tactic", "ring"]], ["add", "theorem", "pow_succ", ["tactic", "ring"]]]}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1589529475, "sha": "b44fa3ca", "message": "chore(data/int/basic): mark cast_sub with simp attribute (#2687)\nI think the reason this didn't have the `simp` attribute already was from the time when `sub_eq_add_neg` was a `simp` lemma, so it wasn't necessary. I'm adding the `simp` attribute back now that `sub_eq_add_neg` is not a `simp` lemma.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_sub", ["int"]]]}]}, {"timestamp": 1589518291, "sha": "f07ac364", "message": "feat(category_theory/limits/lattice): finite limits in a semilattice (#2665)\nConstruct finite limits in a semilattice_inf_top category, and finite colimits in a semilattice_sup_bot category.", "changes": [{"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}]}, {"timestamp": 1589512290, "sha": "378aa0d7", "message": "feat(data/nat/choose): Sum a row of Pascal's triangle (#2684)\nAdd the \"sum of the nth row of Pascal's triangle\" theorem.\nNaming is hard, of course, and this is my first PR to mathlib, so naming suggestions are welcome.\nBriefly discussed at https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Candidate.20for.20inclusion.20in.20mathlib/near/197619403 .", "changes": [{"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": [["add", "theorem", "sum_range_choose", []]]}]}, {"timestamp": 1589480512, "sha": "be03a3d4", "message": "chore(scripts): update nolints.txt (#2682)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589480510, "sha": "606be81d", "message": "perf(tactic/ext): NEVER USE `user_attribute.get_param` (#2674)\nRefactor the extensionality attribute a bit so that it avoids `get_param`, which is a performance nightmare because it uses `eval_expr`.\n```lean\nimport all\nset_option profiler true\nexample (f g : bool → bool → set bool) : f = g :=\nby ext\n-- before: tactic execution took 2.19s\n-- after: tactic execution took 33ms\n```", "changes": [{"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/lint/basic.lean", "newPath": "src/tactic/lint/basic.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}]}, {"timestamp": 1589480508, "sha": "7427f8e0", "message": "feat(topology): a few properties of `tendsto _ _ (𝓤 α)` (#2645)\n- prove that `λ f g, tendsto (λ x, (f x, g x)) l (𝓤 α)` is an equivalence realtion;\n- in case of a metric space, restate this relation as `tendsto (λ x, dist (f x) (g x)) l (𝓝 0)`;\n- prove that `tendsto f l (𝓝 a) ↔ tendsto g l (𝓝 b)` provided that\n `tendsto (λ x, (f x, g x)) l (𝓤 α)`.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "congr_dist", ["filter", "tendsto"]], ["add", "theorem", "tendsto_iff_of_dist", []], ["add", "theorem", "tendsto_uniformity_iff_dist_tendsto_zero", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "congr_uniformity", ["filter", "tendsto"]], ["add", "theorem", "uniformity_symm", ["filter", "tendsto"]], ["add", "theorem", "uniformity_trans", ["filter", "tendsto"]], ["add", "theorem", "tendsto_diag_uniformity", []], ["add", "theorem", "tendsto_congr", ["uniform"]]]}]}, {"timestamp": 1589469771, "sha": "d412cfd0", "message": "chore(algebra/ring): lemmas about units in a semiring (#2680)\nThe lemmas in non-localization files from #2675. (Apart from one, which wasn't relevant to #2675).\n(Edit: I am bad at git. I was hoping there would only be 1 commit here. I hope whatever I'm doing wrong is inconsequential...)", "changes": [{"oldPath": "src/algebra/group/is_unit.lean", "newPath": "src/algebra/group/is_unit.lean", "changes": [["add", "theorem", "mul_left_inj", ["is_unit"]], ["add", "theorem", "mul_right_inj", ["is_unit"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "mul_left_eq_zero_iff_eq_zero", ["is_unit"]], ["add", "theorem", "mul_right_eq_zero_iff_eq_zero", ["is_unit"]], ["add", "theorem", "mul_left_eq_zero_iff_eq_zero", ["units"]], ["add", "theorem", "mul_right_eq_zero_iff_eq_zero", ["units"]]]}]}, {"timestamp": 1589454867, "sha": "03c272e5", "message": "chore(scripts): update nolints.txt (#2679)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589454864, "sha": "2871bd1e", "message": "chore(logic/function): drop `function.uncurry'` (#2678)\nSee [lean#161](https://github.com/leanprover-community/lean/pull/161/files#diff-42c23da308a4d5900f9f3244953701daR132)\nAlso add `uniform_continuous.prod_map` and `uniform_continuous₂.bicompl`", "changes": [{"oldPath": "src/logic/function/basic.lean", "newPath": "src/logic/function/basic.lean", "changes": [["del", "theorem", "curry_uncurry'", ["function"]], ["del", "def", "uncurry'", ["function"]], ["del", "theorem", "uncurry'_bicompr", ["function"]], ["del", "theorem", "uncurry'_curry", ["function"]], ["add", "theorem", "uncurry_bicompl", ["function"]]]}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": [["mod", "theorem", "extension₂_coe_coe", ["abstract_completion"]], ["mod", "theorem", "uniform_continuous_map₂", ["abstract_completion"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "prod_map", ["uniform_continuous"]], ["add", "theorem", "bicompl", ["uniform_continuous₂"]], ["add", "theorem", "uniform_continuous", ["uniform_continuous₂"]], ["mod", "def", "uniform_continuous₂", []], ["mod", "theorem", "uniform_continuous₂_curry", []], ["mod", "theorem", "uniform_continuous₂_def", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "extension₂_coe_coe", ["uniform_space", "completion"]], ["mod", "theorem", "map₂_coe_coe", ["uniform_space", "completion"]], ["mod", "theorem", "uniform_continuous_map₂", ["uniform_space", "completion"]]]}]}, {"timestamp": 1589454859, "sha": "3da777aa", "message": "chore(linear_algebra/basis): use dot notation, simplify some proofs (#2671)", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["mod", "theorem", "continuous_equiv_fun_basis", []], ["add", "theorem", "exists_right_inverse_of_surjective", ["continuous_linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "constr_basis", []], ["mod", "theorem", "exists_is_basis", []], ["del", "theorem", "exists_left_inverse_linear_map_of_injective", []], ["del", "theorem", "exists_right_inverse_linear_map_of_surjective", []], ["add", "theorem", "inl_union_inr", ["linear_independent"]], ["add", "theorem", "ne_zero", ["linear_independent"]], ["add", "theorem", "union", ["linear_independent"]], ["del", "theorem", "linear_independent_inl_union_inr", []], ["del", "theorem", "linear_independent_union", []], ["add", "theorem", "exists_left_inverse_of_injective", ["linear_map"]], ["add", "theorem", "exists_right_inverse_of_surjective", ["linear_map"]], ["del", "theorem", "ne_zero_of_linear_independent", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}]}, {"timestamp": 1589442804, "sha": "d0beb496", "message": "doc(*): move most docs to website, update links (#2676)\nThe relaunched https://leanprover-community.github.io now contains copies of most of the doc files. This PR replaces the corresponding markdown files on mathlib with pointers to their new locations so that they only need to be maintained in one place.\nThe two remaining markdown files are `docs/contribute/bors.md` and `docs/contribute/code-review.md`.\nFixes #2168.", "changes": [{"oldPath": ".github/CONTRIBUTING.md", "newPath": ".github/CONTRIBUTING.md", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "archive/README.md", "newPath": "archive/README.md", "changes": []}, {"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "docs/contribute/naming.md", "newPath": "docs/contribute/naming.md", "changes": []}, {"oldPath": "docs/contribute/style.md", "newPath": "docs/contribute/style.md", "changes": []}, {"oldPath": "docs/extras.md", "newPath": "docs/extras.md", "changes": []}, {"oldPath": "docs/extras/calc.md", "newPath": "docs/extras/calc.md", "changes": []}, {"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}, {"oldPath": "docs/extras/simp.md", "newPath": "docs/extras/simp.md", "changes": []}, {"oldPath": "docs/extras/tactic_writing.md", "newPath": "docs/extras/tactic_writing.md", "changes": []}, {"oldPath": "docs/extras/well_founded_recursion.md", "newPath": "docs/extras/well_founded_recursion.md", "changes": []}, {"oldPath": "docs/install/debian.md", "newPath": "docs/install/debian.md", "changes": []}, {"oldPath": "docs/install/debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": "docs/install/extensions-icon.png", "newPath": null, "changes": []}, {"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install/new-extensions-icon.png", "newPath": null, "changes": []}, {"oldPath": "docs/install/project.md", "newPath": "docs/install/project.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}, {"oldPath": "docs/mathlib-overview.md", "newPath": "docs/mathlib-overview.md", "changes": []}, {"oldPath": "docs/theories.md", "newPath": "docs/theories.md", "changes": []}, {"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}, {"oldPath": "docs/theories/naturals.md", "newPath": "docs/theories/naturals.md", "changes": []}, {"oldPath": "docs/theories/padics.md", "newPath": "docs/theories/padics.md", "changes": []}, {"oldPath": "docs/theories/sets.md", "newPath": "docs/theories/sets.md", "changes": []}, {"oldPath": "docs/theories/topology.md", "newPath": "docs/theories/topology.md", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1589431205, "sha": "7077b588", "message": "chore(logic/function): move to `logic/function/basic` (#2677)\nAlso add some docstrings.\nI'm going to add more `logic.function.*` files with theorems that can't go to `basic` because of imports.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/control/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function/basic.lean", "changes": [["mod", "theorem", "cantor_injective", ["function"]], ["mod", "theorem", "cantor_surjective", ["function"]]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}]}, {"timestamp": 1589431203, "sha": "6ffb6137", "message": "chore(algebra/free_monoid): add a custom `rec_on` (#2670)", "changes": [{"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["mod", "theorem", "mul_def", ["free_monoid"]], ["add", "theorem", "of_def", ["free_monoid"]], ["del", "theorem", "of_mul_eq_cons", ["free_monoid"]], ["mod", "theorem", "one_def", ["free_monoid"]], ["add", "def", "rec_on", ["free_monoid"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}]}, {"timestamp": 1589415542, "sha": "f7cb3634", "message": "refactor(order/lattice): adjust proofs to avoid choice (#2666)\nFor foundational category theoretic reasons, I'd like these lattice properties to avoid choice.\nIn particular, I'd like the proof here: https://github.com/leanprover-community/mathlib/pull/2665 to be intuitionistic.\n For most of them it was very easy, eg changing `finish` to `simp`. For `sup_assoc` and `inf_assoc` it's a bit more complex though - for `inf_assoc` I wrote out a term mode proof, and for `sup_assoc` I used `ifinish`. I realise `ifinish` is deprecated because it isn't always intuitionistic, but in this case it did give an intuitionistic proof. I think both should be proved the same way, but I'm including one of each to see which is preferred.", "changes": [{"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["mod", "theorem", "inf_le_inf_left", []], ["mod", "theorem", "inf_le_inf_right", []]]}]}, {"timestamp": 1589394678, "sha": "fc0c0258", "message": "refactor(scripts/mk_all): generate a single deterministic all.lean file (#2673)\nThe current `mk_all.sh` script is non-deterministic, and creates invalid Lean code for the `data.matrix.notation` import. The generated `all.lean` files are also slow: they take two minutes to compile on my machine.\nThe new script fixes all of that. The single generated `all.lean` file takes only 27 seconds to compile now.", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}]}, {"timestamp": 1589372402, "sha": "9f16f866", "message": "feat(topology/algebra/infinite_sum): sums on subtypes (#2659)\nFor `f` a summable function defined on the integers, we prove the formula\n```\n(∑ i in range k, f i) + (∑' i, f (i + k)) = (∑' i, f i)\n```\nThis is deduced from a general version on subtypes of the form `univ - s` where `s` is a finset.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "coe_not_mem_range_equiv", []], ["add", "theorem", "coe_not_mem_range_equiv_symm", []], ["add", "def", "not_mem_range_equiv", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_iff_tendsto_nat_of_summable", []], ["add", "theorem", "has_sum_nat_add_iff'", []], ["add", "theorem", "has_sum_nat_add_iff", []], ["add", "theorem", "has_sum_subtype_iff'", []], ["add", "theorem", "has_sum_subtype_iff", []], ["add", "theorem", "has_sum_subtype_iff_of_eq_zero", []], ["add", "theorem", "sum_add_tsum_nat_add", []], ["add", "theorem", "sum_add_tsum_subtype", []], ["add", "theorem", "summable_nat_add_iff", []], ["add", "theorem", "summable_subtype_iff", []]]}]}, {"timestamp": 1589365635, "sha": "c9f2cbcd", "message": "chore(scripts): update nolints.txt (#2669)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589365633, "sha": "506a71f9", "message": "feat(category_theory): preadditive categories (#2663)\n[As discussed](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Lean.20in.20the.20wild/near/197168926), here is the pedestrian definition of preadditive categories. Hopefully, it is not here to stay, but it will allow me to start PRing abelian categories.", "changes": [{"oldPath": "src/algebra/category/Group/default.lean", "newPath": "src/algebra/category/Group/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/Group/preadditive.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/zero.lean", "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "π_of_π", ["category_theory", "limits", "cofork"]], ["add", "theorem", "ι_of_ι", ["category_theory", "limits", "fork"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["del", "theorem", "zero_of_comp_epi", ["category_theory", "limits"]], ["mod", "theorem", "zero_of_comp_mono", ["category_theory", "limits"]], ["add", "theorem", "zero_of_epi_comp", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/preadditive.lean", "changes": [["add", "theorem", "comp_neg", ["category_theory", "preadditive"]], ["add", "theorem", "comp_sub", ["category_theory", "preadditive"]], ["add", "theorem", "epi_iff_cancel_zero", ["category_theory", "preadditive"]], ["add", "theorem", "epi_of_cancel_zero", ["category_theory", "preadditive"]], ["add", "def", "has_coequalizers_of_has_cokernels", ["category_theory", "preadditive"]], ["add", "def", "has_colimit_parallel_pair", ["category_theory", "preadditive"]], ["add", "def", "has_equalizers_of_has_kernels", ["category_theory", "preadditive"]], ["add", "def", "has_limit_parallel_pair", ["category_theory", "preadditive"]], ["add", "def", "left_comp", ["category_theory", "preadditive"]], ["add", "theorem", "mono_iff_cancel_zero", ["category_theory", "preadditive"]], ["add", "theorem", "mono_of_cancel_zero", ["category_theory", "preadditive"]], ["add", "theorem", "neg_comp", ["category_theory", "preadditive"]], ["add", "theorem", "neg_comp_neg", ["category_theory", "preadditive"]], ["add", "def", "right_comp", ["category_theory", "preadditive"]], ["add", "theorem", "sub_comp", ["category_theory", "preadditive"]]]}]}, {"timestamp": 1589365631, "sha": "ce86d33b", "message": "feat(analysis/calculus/(f)deriv): differentiability of a finite sum of functions (#2657)\nWe show that, if each `f i` is differentiable, then `λ y, ∑ i in s, f i y` is also differentiable when `s` is a finset, and give the lemmas around this for `fderiv` and `deriv`.", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "sum", ["asymptotics", "is_O"]], ["add", "theorem", "sum", ["asymptotics", "is_O_with"]], ["add", "theorem", "is_O_with_zero'", ["asymptotics"]], ["mod", "theorem", "is_O_with_zero", ["asymptotics"]], ["mod", "theorem", "is_O_zero", ["asymptotics"]], ["add", "theorem", "sum", ["asymptotics", "is_o"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_div_const", []], ["add", "theorem", "deriv_sum", []], ["add", "theorem", "deriv_within_div_const", []], ["add", "theorem", "deriv_within_sum", []], ["add", "theorem", "div_const", ["differentiable"]], ["add", "theorem", "div_const", ["differentiable_at"]], ["add", "theorem", "div_const", ["differentiable_on"]], ["add", "theorem", "div_const", ["differentiable_within_at"]], ["add", "theorem", "sum", ["has_deriv_at"]], ["add", "theorem", "sum", ["has_deriv_at_filter"]], ["add", "theorem", "has_fderiv_within_at", ["has_deriv_within_at"]], ["add", "theorem", "sum", ["has_deriv_within_at"]], ["add", "theorem", "sum", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "sum", ["differentiable"]], ["add", "theorem", "sum", ["differentiable_at"]], ["add", "theorem", "sum", ["differentiable_on"]], ["add", "theorem", "sum", ["differentiable_within_at"]], ["add", "theorem", "fderiv_sum", []], ["add", "theorem", "fderiv_within_sum", []], ["add", "theorem", "sum", ["has_fderiv_at"]], ["add", "theorem", "sum", ["has_fderiv_at_filter"]], ["add", "theorem", "sum", ["has_fderiv_within_at"]], ["add", "theorem", "sum", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "sum_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1589353306, "sha": "ed183f95", "message": "chore(group_theory/submonoid): use `complete_lattice_of_Inf` (#2661)\n* Use `complete_lattice_of_Inf` for `submonoid` and `subgroup` lattices.\n* Add `sub*.copy`.\n* Add a few `@[simp]` lemmas.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "to_fun_eq_coe", ["monoid_hom"]]]}, {"oldPath": "src/group_theory/bundled_subgroup.lean", "newPath": "src/group_theory/bundled_subgroup.lean", "changes": [["mod", "theorem", "closure_empty", ["subgroup"]], ["mod", "theorem", "closure_eq", ["subgroup"]], ["del", "theorem", "coe_ssubset_coe", ["subgroup"]], ["add", "theorem", "coe_to_submonoid", ["subgroup"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "coe_copy", ["submonoid"]], ["add", "theorem", "coe_infi", ["submonoid"]], ["add", "def", "copy", ["submonoid"]], ["add", "theorem", "copy_eq", ["submonoid"]], ["mod", "theorem", "ext'", ["submonoid"]], ["add", "theorem", "mem_carrier", ["submonoid"]], ["add", "theorem", "mem_infi", ["submonoid"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "of_image", ["is_glb"]], ["add", "theorem", "of_image", ["is_lub"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "is_glb_binfi", []], ["add", "theorem", "is_lub_bsupr", []]]}]}, {"timestamp": 1589341460, "sha": "51e2b4cc", "message": "feat(topology/separation): add `subtype.t1_space` and `subtype.regular` (#2667)\nAlso simplify the proof of `exists_open_singleton_of_fintype`", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "filter_ssubset", ["finset"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "exists_open_singleton_of_open_finset", []]]}]}, {"timestamp": 1589341458, "sha": "4857284a", "message": "feat(topology/bounded_continuous_function): the normed space C^0 (#2660)\nFor β a normed (vector) space over a nondiscrete normed field 𝕜, we construct the normed 𝕜-space structure on the set of bounded continuous functions from a topological space into β.", "changes": [{"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["mod", "theorem", "dist_eq", ["bounded_continuous_function"]], ["mod", "theorem", "dist_set_exists", ["bounded_continuous_function"]], ["add", "theorem", "norm_eq", ["bounded_continuous_function"]], ["add", "theorem", "norm_smul", ["bounded_continuous_function"]], ["add", "theorem", "norm_smul_le", ["bounded_continuous_function"]]]}]}, {"timestamp": 1589335057, "sha": "cbffb34c", "message": "feat(analysis/specific_limits): more geometric series (#2658)\nCurrently, the sum of a geometric series is only known for real numbers in `[0,1)`. We prove it for any element of a normed field with norm `< 1`, and specialize it to real numbers in `(-1, 1)`.\nSome lemmas in `analysis/specific_limits` are also moved around (but their content is not changed) to get a better organization of this file.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "div_const", ["filter", "tendsto"]], ["add", "theorem", "has_sum_iff_tendsto_nat_of_summable_norm", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "has_sum_geometric", []], ["add", "theorem", "has_sum_geometric_of_abs_lt_1", []], ["add", "theorem", "has_sum_geometric_of_lt_1", []], ["add", "theorem", "has_sum_geometric_of_norm_lt_1", []], ["del", "theorem", "summable_geometric", []], ["add", "theorem", "summable_geometric_of_abs_lt_1", []], ["add", "theorem", "summable_geometric_of_lt_1", []], ["add", "theorem", "summable_geometric_of_norm_lt_1", []], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_abs_lt_1", []], ["del", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1_normed_field", []], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_norm_lt_1", []], ["del", "theorem", "tsum_geometric", []], ["add", "theorem", "tsum_geometric_of_abs_lt_1", []], ["add", "theorem", "tsum_geometric_of_lt_1", []], ["add", "theorem", "tsum_geometric_of_norm_lt_1", []]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}]}, {"timestamp": 1589308533, "sha": "437fdaf8", "message": "feat(category_theory/creates): creates limits => preserves limits (#2639)\nShow that `F` preserves limits if it creates them and the target category has them.", "changes": [{"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "cocone_point_unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "cone_point_unique_up_to_iso", ["category_theory", "limits", "is_colimit"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}]}, {"timestamp": 1589297853, "sha": "11415339", "message": "feat(data/matrix): matrix and vector notation (#2656)\nThis PR adds notation for matrices and vectors [as discussed on Zulip a couple of months ago](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Notation.20for.20matrices.20and.20vectors), so that `![![a, b], ![c, d]]` constructs a 2x2 matrix with rows `![a, b] : fin 2 -> α` and `![c, d]`. It also adds corresponding `simp` lemmas for all matrix operations defined in `data.matrix.basic`. These lemmas should apply only when the input already contains `![...]`.\nTo express the `simp` lemmas nicely, I defined a function `dot_product : (v w : n -> α) -> α` which returns the sum of the entrywise product of two vectors. IMO, this makes the definitions of `matrix.mul`, `matrix.mul_vec` and `matrix.vec_mul` clearer, and it allows us to share some proofs. I could also inline `dot_product` (restoring the old situation) if the reviewers prefer.", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "add_dot_product", ["matrix"]], ["add", "theorem", "diagonal_dot_product", ["matrix"]], ["add", "theorem", "diagonal_transpose", ["matrix"]], ["add", "def", "dot_product", ["matrix"]], ["add", "theorem", "dot_product_add", ["matrix"]], ["add", "theorem", "dot_product_assoc", ["matrix"]], ["add", "theorem", "dot_product_comm", ["matrix"]], ["add", "theorem", "dot_product_diagonal'", ["matrix"]], ["add", "theorem", "dot_product_diagonal", ["matrix"]], ["add", "theorem", "dot_product_neg", ["matrix"]], ["add", "theorem", "dot_product_punit", ["matrix"]], ["add", "theorem", "dot_product_smul", ["matrix"]], ["add", "theorem", "dot_product_zero'", ["matrix"]], ["add", "theorem", "dot_product_zero", ["matrix"]], ["add", "theorem", "mul_vec_neg", ["matrix"]], ["add", "theorem", "neg_dot_product", ["matrix"]], ["add", "theorem", "neg_mul_vec", ["matrix"]], ["add", "theorem", "neg_vec_mul", ["matrix"]], ["add", "theorem", "row_mul_col_val", ["matrix"]], ["add", "theorem", "smul_dot_product", ["matrix"]], ["add", "theorem", "vec_mul_neg", ["matrix"]], ["add", "theorem", "zero_dot_product'", ["matrix"]], ["add", "theorem", "zero_dot_product", ["matrix"]]]}, {"oldPath": null, "newPath": "src/data/matrix/notation.lean", "changes": [["add", "theorem", "add_cons", ["matrix"]], ["add", "theorem", "col_cons", ["matrix"]], ["add", "theorem", "col_empty", ["matrix"]], ["add", "theorem", "cons_add", ["matrix"]], ["add", "theorem", "cons_dot_product", ["matrix"]], ["add", "theorem", "cons_eq_zero_iff", ["matrix"]], ["add", "theorem", "cons_head_tail", ["matrix"]], ["add", "theorem", "cons_mul", ["matrix"]], ["add", "theorem", "cons_mul_vec", ["matrix"]], ["add", "theorem", "cons_nonzero_iff", ["matrix"]], ["add", "theorem", "cons_transpose", ["matrix"]], ["add", "theorem", "cons_val'", ["matrix"]], ["add", "theorem", "cons_val_fin_one", ["matrix"]], ["add", "theorem", "cons_val_one", ["matrix"]], ["add", "theorem", "cons_val_succ'", ["matrix"]], ["add", "theorem", "cons_val_succ", ["matrix"]], ["add", "theorem", "cons_val_zero'", ["matrix"]], ["add", "theorem", "cons_val_zero", ["matrix"]], ["add", "theorem", "cons_vec_mul", ["matrix"]], ["add", "theorem", "cons_vec_mul_vec", ["matrix"]], ["add", "theorem", "cons_zero_zero", ["matrix"]], ["add", "theorem", "dot_product_cons", ["matrix"]], ["add", "theorem", "dot_product_empty", ["matrix"]], ["add", "theorem", "empty_add_empty", ["matrix"]], ["add", "theorem", "empty_eq", ["matrix"]], ["add", "theorem", "empty_mul", ["matrix"]], ["add", "theorem", "empty_mul_empty", ["matrix"]], ["add", "theorem", "empty_mul_vec", ["matrix"]], ["add", "theorem", "empty_val'", ["matrix"]], ["add", "theorem", "empty_vec_mul", ["matrix"]], ["add", "theorem", "empty_vec_mul_vec", ["matrix"]], ["add", "theorem", "head_cons", ["matrix"]], ["add", "theorem", "head_transpose", ["matrix"]], ["add", "theorem", "head_val'", ["matrix"]], ["add", "theorem", "head_zero", ["matrix"]], ["add", "theorem", "minor_cons_row", ["matrix"]], ["add", "theorem", "minor_empty", ["matrix"]], ["add", "theorem", "mul_empty", ["matrix"]], ["add", "theorem", "mul_val_succ", ["matrix"]], ["add", "theorem", "mul_vec_cons", ["matrix"]], ["add", "theorem", "mul_vec_empty", ["matrix"]], ["add", "theorem", "neg_cons", ["matrix"]], ["add", "theorem", "neg_empty", ["matrix"]], ["add", "theorem", "row_cons", ["matrix"]], ["add", "theorem", "row_empty", ["matrix"]], ["add", "theorem", "smul_cons", ["matrix"]], ["add", "theorem", "smul_empty", ["matrix"]], ["add", "theorem", "tail_cons", ["matrix"]], ["add", "theorem", "tail_transpose", ["matrix"]], ["add", "theorem", "tail_val'", ["matrix"]], ["add", "theorem", "tail_zero", ["matrix"]], ["add", "theorem", "transpose_empty_cols", ["matrix"]], ["add", "theorem", "transpose_empty_rows", ["matrix"]], ["add", "def", "vec_cons", ["matrix"]], ["add", "def", "vec_empty", ["matrix"]], ["add", "def", "vec_head", ["matrix"]], ["add", "theorem", "vec_mul_cons", ["matrix"]], ["add", "theorem", "vec_mul_empty", ["matrix"]], ["add", "theorem", "vec_mul_vec_cons", ["matrix"]], ["add", "theorem", "vec_mul_vec_empty", ["matrix"]], ["add", "def", "vec_tail", ["matrix"]], ["add", "theorem", "zero_empty", ["matrix"]]]}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": null, "newPath": "test/matrix.lean", "changes": []}]}, {"timestamp": 1589297851, "sha": "34a0c8c5", "message": "chore(*): unify use of left and right for injectivity lemmas (#2655)\nThis is the evil twin of #2652 using the opposite convention: the name of a lemma stating that a function in two arguments is injective in one of the arguments refers to the argument that changes. Example:\n```lean\nlemma sub_right_inj : a - b = a - c ↔ b = c\n```\nSee also the [Zulip discussion](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/pow_(left.7Cright)_inj(ective)).\nThis PR renames lemmas following the other convention. The following lemmas were renamed:\n`algebra/group/basic.lean`:\n* `mul_left_injective` ↔ `mul_right_injective`\n* `mul_left_inj` ↔ `mul_right_inj`\n* `sub_left_inj` ↔ `sub_right_inj`\n`algebra/goup/units.lean`:\n* `mul_left_inj` ↔ `mul_right_inj`\n* `divp_right_inj` → `divp_left_inj`\n`algebra/group_power.lean`:\n* `pow_right_inj` → `pow_left_inj`\n`algebra/group_with_zero.lean`:\n* `div_right_inj'` → ` div_left_inj'`\n* `mul_right_inj'` → `mul_left_inj'`\n`algebra/ring.lean`:\n* `domain.mul_right_inj` ↔ `domain.mul_left_inj`\n`data/finsupp.lean`:\n* `single_right_inj` → `single_left_inj`\n`data/list/basic.lean`:\n* `append_inj_left` ↔ `append_inj_right`\n* `append_inj_left'` ↔ `append_inj_right'`\n* `append_left_inj` ↔ `append_right_inj`\n* `prefix_append_left_inj` → `prefix_append_right_inj`\n`data/nat/basic.lean`:\n* `mul_left_inj` ↔ `mul_right_inj`\n`data/real/ennreal.lean`:\n* `add_left_inj` ↔ `add_right_inj`\n* `sub_left_inj` → `sub_right_inj`\n`set_theory/ordinal.lean`:\n* `mul_left_inj` → `mul_right_inj`", "changes": [{"oldPath": "docs/contribute/naming.md", "newPath": "docs/contribute/naming.md", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "mul_left_inj", []], ["mod", "theorem", "mul_left_injective", []], ["mod", "theorem", "mul_right_inj", []], ["mod", "theorem", "mul_right_injective", []], ["mod", "theorem", "sub_left_inj", []], ["mod", "theorem", "sub_right_inj", []]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "divp_left_inj", []], ["del", "theorem", "divp_right_inj", []], ["mod", "theorem", "mul_left_inj", ["units"]], ["mod", "theorem", "mul_right_inj", ["units"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "pow_left_inj", []], ["del", "theorem", "pow_right_inj", []]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "div_left_inj'", []], ["del", "theorem", "div_right_inj'", []], ["add", "theorem", "mul_left_inj'", []], ["del", "theorem", "mul_right_inj'", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "mul_left_inj", ["domain"]], ["mod", "theorem", "mul_right_inj", ["domain"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/special_functions/trigonometric.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "single_left_inj", ["finsupp"]], ["del", "theorem", "single_right_inj", ["finsupp"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "append_inj_left'", ["list"]], ["mod", "theorem", "append_inj_left", ["list"]], ["mod", "theorem", "append_inj_right'", ["list"]], ["mod", "theorem", "append_inj_right", ["list"]], ["mod", "theorem", "append_left_inj", ["list"]], ["mod", "theorem", "append_right_inj", ["list"]], ["del", "theorem", "prefix_append_left_inj", ["list"]], ["add", "theorem", "prefix_append_right_inj", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "add_left_inj", ["ennreal"]], ["mod", "theorem", "add_right_inj", ["ennreal"]], ["del", "theorem", "sub_left_inj", ["ennreal"]], ["add", "theorem", "sub_right_inj", ["ennreal"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/number_theory/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_domain.lean", "newPath": "src/ring_theory/integral_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/set_theory/game/domineering.lean", "newPath": "src/set_theory/game/domineering.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "mul_left_inj", ["ordinal"]], ["add", "theorem", "mul_right_inj", ["ordinal"]]]}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1589297849, "sha": "77b3d504", "message": "chore(topology/instances/ennreal): add +1 version of `tsum_eq_supr_sum` (#2633)\nAlso add a few lemmas about `supr` and monotone functions.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_mono_set", ["finset"]], ["add", "theorem", "sum_mono_set_of_nonneg", ["finset"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "le_infi_comp", []], ["add", "theorem", "infi_comp_eq", ["monotone"]], ["add", "theorem", "le_map_supr2", ["monotone"]], ["add", "theorem", "le_map_supr", ["monotone"]], ["del", "theorem", "map_supr2_ge", ["monotone"]], ["del", "theorem", "map_supr_ge", ["monotone"]], ["add", "theorem", "supr_comp_eq", ["monotone"]], ["add", "theorem", "supr_comp_le", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1589297847, "sha": "ff184e6d", "message": "feat(analysis/normed_space): add Mazur-Ulam theorem (#2214)\nBased on a proof by Jussi Väisälä, see [journal version](https://www.jstor.org/stable/3647749) or [preprint on web.archive](https://web.archive.org/web/20180516125105/http://www.helsinki.fi/~jvaisala/mazurulam.pdf).\nAlso rename `reflection` to `point_reflection` as was suggested by @rwbarton and @PatrickMassot", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/midpoint.lean", "newPath": "src/algebra/midpoint.lean", "changes": [["add", "theorem", "point_reflection_midpoint_left", ["equiv"]], ["add", "theorem", "point_reflection_midpoint_right", ["equiv"]], ["del", "theorem", "reflection_midpoint_left", ["equiv"]], ["del", "theorem", "reflection_midpoint_right", ["equiv"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/mazur_ulam.lean", "changes": [["add", "theorem", "coe_to_real_linear_equiv_of_map_zero", ["isometric"]], ["add", "theorem", "coe_to_real_linear_equiv_of_map_zero_symm", ["isometric"]], ["add", "theorem", "map_midpoint", ["isometric"]], ["add", "theorem", "midpoint_fixed", ["isometric"]], ["add", "def", "to_real_linear_equiv", ["isometric"]], ["add", "theorem", "to_real_linear_equiv_apply", ["isometric"]], ["add", "def", "to_real_linear_equiv_of_map_zero", ["isometric"]], ["add", "theorem", "to_real_linear_equiv_symm_apply", ["isometric"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/point_reflection.lean", "changes": [["add", "theorem", "point_reflection_fixed_iff_of_module", ["equiv"]], ["add", "def", "point_reflection", ["isometric"]], ["add", "theorem", "point_reflection_apply", ["isometric"]], ["add", "theorem", "point_reflection_dist_fixed", ["isometric"]], ["add", "theorem", "point_reflection_dist_self'", ["isometric"]], ["add", "theorem", "point_reflection_dist_self", ["isometric"]], ["add", "theorem", "point_reflection_dist_self_real", ["isometric"]], ["add", "theorem", "point_reflection_fixed_iff", ["isometric"]], ["add", "theorem", "point_reflection_involutive", ["isometric"]], ["add", "theorem", "point_reflection_midpoint_left", ["isometric"]], ["add", "theorem", "point_reflection_midpoint_right", ["isometric"]], ["add", "theorem", "point_reflection_self", ["isometric"]], ["add", "theorem", "point_reflection_symm", ["isometric"]], ["add", "theorem", "point_reflection_to_equiv", ["isometric"]]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/reflection.lean", "newPath": null, "changes": [["del", "theorem", "reflection_fixed_iff_of_module", ["equiv"]], ["del", "def", "reflection", ["isometric"]], ["del", "theorem", "reflection_apply", ["isometric"]], ["del", "theorem", "reflection_dist_fixed", ["isometric"]], ["del", "theorem", "reflection_dist_self'", ["isometric"]], ["del", "theorem", "reflection_dist_self", ["isometric"]], ["del", "theorem", "reflection_dist_self_real", ["isometric"]], ["del", "theorem", "reflection_fixed_iff", ["isometric"]], ["del", "theorem", "reflection_involutive", ["isometric"]], ["del", "theorem", "reflection_midpoint_left", ["isometric"]], ["del", "theorem", "reflection_midpoint_right", ["isometric"]], ["del", "theorem", "reflection_self", ["isometric"]], ["del", "theorem", "reflection_symm", ["isometric"]], ["del", "theorem", "reflection_to_equiv", ["isometric"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "point_reflection", ["equiv"]], ["add", "theorem", "point_reflection_apply", ["equiv"]], ["add", "theorem", "point_reflection_fixed_iff_of_bit0_inj", ["equiv"]], ["add", "theorem", "point_reflection_involutive", ["equiv"]], ["add", "theorem", "point_reflection_self", ["equiv"]], ["add", "theorem", "point_reflection_symm", ["equiv"]], ["del", "def", "reflection", ["equiv"]], ["del", "theorem", "reflection_apply", ["equiv"]], ["del", "theorem", "reflection_fixed_iff_of_bit0_inj", ["equiv"]], ["del", "theorem", "reflection_involutive", ["equiv"]], ["del", "theorem", "reflection_self", ["equiv"]], ["del", "theorem", "reflection_symm", ["equiv"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cinfi_le", []], ["mod", "theorem", "le_csupr", []]]}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "add_left_symm", ["isometric"]], ["add", "theorem", "add_left_to_equiv", ["isometric"]], ["add", "theorem", "add_right_apply", ["isometric"]], ["add", "theorem", "add_right_symm", ["isometric"]], ["add", "theorem", "add_right_to_equiv", ["isometric"]], ["add", "theorem", "coe_add_left", ["isometric"]], ["add", "theorem", "coe_add_right", ["isometric"]], ["add", "theorem", "coe_neg", ["isometric"]], ["add", "theorem", "neg_symm", ["isometric"]], ["add", "theorem", "neg_to_equiv", ["isometric"]], ["add", "theorem", "symm_symm", ["isometric"]], ["add", "theorem", "symm_trans_apply", ["isometric"]]]}]}, {"timestamp": 1589290795, "sha": "3f216bc6", "message": "feat(number_theory/basic): dvd_sub_pow_of_dvd_sub (#2640)\nCo-authored with: Kenny Lau ", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "geom_series₂_self", []], ["add", "theorem", "map_geom_series", ["ring_hom"]], ["add", "theorem", "map_geom_series₂", ["ring_hom"]]]}, {"oldPath": null, "newPath": "src/number_theory/basic.lean", "changes": [["add", "theorem", "dvd_sub_pow_of_dvd_sub", []]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "mk_eq_mk_hom", ["ideal", "quotient"]]]}]}, {"timestamp": 1589283091, "sha": "61b59ec5", "message": "fix(order/filter/basic): markdown error in module doc (#2664)", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1589265428, "sha": "295b87ec", "message": "feat(ring_theory/integral_domain): sum in integral domain indexed by finite group (#2623)\nIn other words: nontrivial sums are trivial\nMoved from `field_theory.finite` to the new `ring_theory.integral_domain`:\n- `card_nth_roots_subgroup_units`\n- `subgroup_units_cyclic`", "changes": [{"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["add", "theorem", "coe_to_hom_units", ["monoid_hom"]], ["add", "def", "to_hom_units", ["monoid_hom"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_subtype", ["finset"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["del", "theorem", "card_nth_roots_subgroup_units", []]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "exists_monoid_generator", ["is_cyclic"]]]}, {"oldPath": null, "newPath": "src/ring_theory/integral_domain.lean", "changes": [["add", "theorem", "card_fiber_eq_of_mem_range", []], ["add", "theorem", "card_nth_roots_subgroup_units", []], ["add", "theorem", "sum_hom_units", []], ["add", "theorem", "sum_hom_units_eq_zero", []]]}]}, {"timestamp": 1589260937, "sha": "f0e78172", "message": "chore(scripts): update nolints.txt (#2662)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589246680, "sha": "8c887216", "message": "feat(data/list): assorted lemmas (#2651)\nSome lemmas I found useful for #2578", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "cons_head'_tail", ["list"]], ["add", "theorem", "head_mem_head'", ["list"]], ["add", "theorem", "ilast_eq_last'", ["list"]], ["add", "theorem", "init_append_last'", ["list"]], ["add", "theorem", "is_nil_iff_eq_nil", ["list"]], ["add", "theorem", "last'_append_cons", ["list"]], ["add", "theorem", "last'_append_of_ne_nil", ["list"]], ["add", "theorem", "last'_is_none", ["list"]], ["add", "theorem", "last'_is_some", ["list"]], ["mod", "theorem", "last_cons", ["list"]], ["add", "theorem", "last_mem", ["list"]], ["add", "theorem", "mem_last'_eq_last", ["list"]], ["add", "theorem", "mem_of_mem_head'", ["list"]], ["add", "theorem", "mem_of_mem_last'", ["list"]], ["add", "theorem", "prod_eq_foldr", ["list"]]]}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "append", ["list", "chain'"]], ["add", "theorem", "cons'", ["list", "chain'"]], ["add", "theorem", "imp_head", ["list", "chain'"]], ["add", "theorem", "rel_head'", ["list", "chain'"]], ["add", "theorem", "rel_head", ["list", "chain'"]], ["add", "theorem", "chain'_cons'", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}]}, {"timestamp": 1589203436, "sha": "eb9e3824", "message": "test(tactic/norm_num): import tests from lean core (#2654)", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1589197569, "sha": "a87f326d", "message": "chore(scripts): update nolints.txt (#2653)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589190170, "sha": "e777d0b4", "message": "refactor(data/real/pi): add tactics for pi computation (#2641)\nDepends on #2589. Moves pi bounds from @fpvandoorn's gist to mathlib, and also adds a small tactic to uniformize the proofs (and also skip some unsqueezed proofs), making the compilation even faster (just around 1 second for the longest proofs).", "changes": [{"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": [["add", "theorem", "pi_gt_3141592", ["real"]], ["add", "theorem", "pi_gt_31415", ["real"]], ["mod", "theorem", "pi_gt_314", ["real"]], ["mod", "theorem", "pi_gt_three", ["real"]], ["add", "theorem", "pi_lower_bound_start", ["real"]], ["add", "theorem", "pi_lt_3141593", ["real"]], ["add", "theorem", "pi_lt_31416", ["real"]], ["mod", "theorem", "pi_lt_315", ["real"]], ["add", "theorem", "pi_upper_bound_start", ["real"]], ["mod", "theorem", "sqrt_two_add_series_step_down", ["real"]], ["mod", "theorem", "sqrt_two_add_series_step_up", ["real"]]]}]}, {"timestamp": 1589178775, "sha": "ff37fb8a", "message": "feat(algebra/ring): monoid structure on `R →+* R` (#2649)\nAlso add `comp_id` and `id_comp`", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "coe_pow", ["ring_hom"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "coe_mul", ["ring_hom"]], ["add", "theorem", "coe_one", ["ring_hom"]], ["add", "theorem", "comp_id", ["ring_hom"]], ["add", "theorem", "id_comp", ["ring_hom"]], ["mod", "def", "mk'", ["ring_hom"]], ["add", "theorem", "mul_def", ["ring_hom"]], ["add", "theorem", "one_def", ["ring_hom"]]]}]}, {"timestamp": 1589169222, "sha": "7146082c", "message": "refactor(data/fintype/basic): weaken assumptions of set.fintype (#2650)", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}]}, {"timestamp": 1589142242, "sha": "b9bdc678", "message": "feat(*): prove some `*.iterate` theorems (#2647)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "strict_mono_id", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_mul", ["continuous_linear_map"]], ["mod", "theorem", "mul_apply", ["continuous_linear_map"]], ["add", "theorem", "mul_def", ["continuous_linear_map"]], ["add", "theorem", "smul_right_one_pow", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "iterate", ["continuous"]], ["add", "theorem", "iterate", ["continuous_at"]]]}]}, {"timestamp": 1589130562, "sha": "8c6b14ea", "message": "fix(library_search): use custom apply tactic for the main goal, as well as subgoals (#2648)\ncf https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/List.20lemmas", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": [["add", "theorem", "bind_singleton", ["test", "library_search"]]]}]}, {"timestamp": 1589094847, "sha": "3710744b", "message": "feat(meta/uchange): universe lifting and lowering in meta (#2627)\nWe define the meta type `uchange (α : Type v) : Type u`, which permits us to change the universe of a type analogously to `ulift`. However since `uchange` is meta, it can both lift and lower the universe.\nAs requested on Zulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/widget/near/196808542", "changes": [{"oldPath": null, "newPath": "src/meta/uchange.lean", "changes": []}]}, {"timestamp": 1589083515, "sha": "b248481b", "message": "chore(algebra/char_zero): add `∀ n : ℕ, (n + 1 : α) ≠ 0` (#2644)", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["add", "theorem", "cast_add_one_ne_zero", ["nat"]]]}]}, {"timestamp": 1589083514, "sha": "75900904", "message": "chore(scripts): update nolints.txt (#2643)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589071541, "sha": "81f97bdf", "message": "chore(*): move to lean-3.11.0 (#2632)\nRelated Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/lean.23211.20don't.20unfold.20irred.20defs", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "def", "pow_sub_pow_factor", ["polynomial"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "infinitesimal_add", ["hyperreal"]], ["mod", "theorem", "infinitesimal_mul", ["hyperreal"]], ["mod", "theorem", "infinitesimal_neg", ["hyperreal"]]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1589067016, "sha": "a584d527", "message": "chore(scripts): update nolints.txt (#2642)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1589056231, "sha": "9f33b7dd", "message": "feat(algebra/ordered_*): arithmetic operations on monotone functions (#2634)\nAlso move `strict_mono` to `order/basic` and add a module docstring.", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["del", "theorem", "monotone_mul_left_of_nonneg", []], ["del", "theorem", "monotone_mul_right_of_nonneg", []], ["del", "theorem", "compares", ["strict_mono"]], ["del", "theorem", "injective", ["strict_mono"]], ["del", "theorem", "le_iff_le", ["strict_mono"]], ["del", "theorem", "lt_iff_lt", ["strict_mono"]], ["del", "theorem", "monotone", ["strict_mono"]], ["del", "def", "strict_mono", []], ["del", "theorem", "strict_mono_of_monotone_of_injective", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "div_const", ["monotone"]], ["add", "theorem", "div_const", ["strict_mono"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "add", ["monotone"]], ["add", "theorem", "add_const", ["monotone"]], ["add", "theorem", "add_strict_mono", ["monotone"]], ["add", "theorem", "const_add", ["monotone"]], ["add", "theorem", "add_monotone", ["strict_mono"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "const_mul", ["monotone"]], ["add", "theorem", "mul", ["monotone"]], ["add", "theorem", "mul_const", ["monotone"]], ["add", "theorem", "mul_strict_mono", ["monotone"]], ["add", "theorem", "monotone_mul_left_of_nonneg", []], ["add", "theorem", "monotone_mul_right_of_nonneg", []], ["add", "theorem", "const_mul", ["strict_mono"]], ["add", "theorem", "mul", ["strict_mono"]], ["add", "theorem", "mul_const", ["strict_mono"]], ["add", "theorem", "mul_monotone", ["strict_mono"]], ["add", "theorem", "strict_mono_mul_left_of_pos", []], ["add", "theorem", "strict_mono_mul_right_of_pos", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "comp", ["strict_mono"]], ["add", "theorem", "compares", ["strict_mono"]], ["add", "theorem", "injective", ["strict_mono"]], ["add", "theorem", "le_iff_le", ["strict_mono"]], ["add", "theorem", "lt_iff_lt", ["strict_mono"]], ["add", "theorem", "monotone", ["strict_mono"]], ["add", "def", "strict_mono", []], ["add", "theorem", "strict_mono_of_monotone_of_injective", []]]}]}, {"timestamp": 1589056229, "sha": "d04429fa", "message": "chore(logic/embedding,order/order_iso): review (#2618)\n* swap `inj` with `inj'` to match other bundled homomorphisms;\n* make some arguments explicit to avoid `embedding.of_surjective _`\n in the pretty printer output;\n* make `set_value` computable.", "changes": [{"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/pnat/intervals.lean", "newPath": "src/data/pnat/intervals.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "coe_image", ["function", "embedding"]], ["del", "theorem", "inj'", ["function", "embedding"]], ["add", "theorem", "inj", ["function", "embedding"]], ["add", "def", "set_value", ["function", "embedding"]], ["mod", "theorem", "set_value_eq", ["function", "embedding"]], ["add", "theorem", "coe_embedding_of_subset_apply", ["set"]], ["mod", "def", "embedding_of_subset", ["set"]], ["add", "theorem", "embedding_of_subset_apply_mk", ["set"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "theorem", "inj", ["order_embedding"]], ["del", "theorem", "ord'", ["order_embedding"]], ["add", "theorem", "ord", ["order_embedding"]], ["del", "theorem", "ord'", ["order_iso"]], ["add", "theorem", "ord", ["order_iso"]], ["add", "theorem", "to_order_embedding_eq_coe", ["order_iso"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1589056227, "sha": "08d43163", "message": "refactor(computability/turing_machine): add list_blank (#2605)\nThis ended up being a major refactor of `computability.turing_machine`. It started as a change of the definition of turing machine so that the tape is a quotient of lists up to the relation \"ends with blanks\", but the file is quite old and I updated it to pass the linter as well. I'm not up to speed on the new documentation requirements, but now is a good time to request them for this file. This doesn't add many new theorems, it's mostly just fixes to make it compile again after the change. (Some of the turing machine constructions are also simplified.)", "changes": [{"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": [["mod", "def", "map", ["turing", "TM0", "cfg"]], ["mod", "def", "eval", ["turing", "TM0"]], ["mod", "theorem", "map_respects", ["turing", "TM0", "machine"]], ["mod", "theorem", "map_step", ["turing", "TM0", "machine"]], ["mod", "theorem", "map_init", ["turing", "TM0"]], ["mod", "def", "map", ["turing", "TM0", "stmt"]], ["mod", "def", "eval", ["turing", "TM1"]], ["mod", "def", "tr_tape'", ["turing", "TM1to1"]], ["mod", "def", "tr_tape", ["turing", "TM1to1"]], ["del", "theorem", "tr_tape_drop_right", ["turing", "TM1to1"]], ["add", "theorem", "tr_tape_mk'", ["turing", "TM1to1"]], ["del", "theorem", "tr_tape_take_right", ["turing", "TM1to1"]], ["add", "def", "add_bottom", ["turing", "TM2to1"]], ["add", "theorem", "add_bottom_head_fst", ["turing", "TM2to1"]], ["add", "theorem", "add_bottom_map", ["turing", "TM2to1"]], ["add", "theorem", "add_bottom_modify_nth", ["turing", "TM2to1"]], ["add", "theorem", "add_bottom_nth_snd", ["turing", "TM2to1"]], ["add", "theorem", "add_bottom_nth_succ_fst", ["turing", "TM2to1"]], ["del", "def", "get", ["turing", "TM2to1", "stackel"]], ["del", "def", "is_bottom", ["turing", "TM2to1", "stackel"]], ["del", "def", "is_top", ["turing", "TM2to1", "stackel"]], ["del", "inductive", "stackel", ["turing", "TM2to1"]], ["del", "def", "stackel_equiv", ["turing", "TM2to1"]], ["add", "theorem", "stk_nth_val", ["turing", "TM2to1"]], ["mod", "theorem", "supports_run", ["turing", "TM2to1"]], ["mod", "theorem", "tr_normal_run", ["turing", "TM2to1"]], ["mod", "theorem", "tr_respects_aux₁", ["turing", "TM2to1"]], ["mod", "theorem", "tr_respects_aux₃", ["turing", "TM2to1"]], ["del", "def", "tr_stk", ["turing", "TM2to1"]], ["mod", "theorem", "tr_stmts₁_run", ["turing", "TM2to1"]], ["mod", "def", "Γ'", ["turing", "TM2to1"]], ["add", "def", "above", ["turing", "blank_extends"]], ["add", "theorem", "above_of_le", ["turing", "blank_extends"]], ["add", "theorem", "below_of_le", ["turing", "blank_extends"]], ["add", "theorem", "refl", ["turing", "blank_extends"]], ["add", "theorem", "trans", ["turing", "blank_extends"]], ["add", "def", "blank_extends", ["turing"]], ["add", "def", "above", ["turing", "blank_rel"]], ["add", "def", "below", ["turing", "blank_rel"]], ["add", "theorem", "equivalence", ["turing", "blank_rel"]], ["add", "theorem", "refl", ["turing", "blank_rel"]], ["add", "def", "setoid", ["turing", "blank_rel"]], ["add", "theorem", "symm", ["turing", "blank_rel"]], ["add", "theorem", "trans", ["turing", "blank_rel"]], ["add", "def", "blank_rel", ["turing"]], ["del", "def", "dwrite", ["turing"]], ["del", "theorem", "dwrite_eq", ["turing"]], ["del", "theorem", "dwrite_ne", ["turing"]], ["del", "theorem", "dwrite_self", ["turing"]], ["add", "def", "append", ["turing", "list_blank"]], ["add", "theorem", "append_assoc", ["turing", "list_blank"]], ["add", "theorem", "append_mk", ["turing", "list_blank"]], ["add", "def", "bind", ["turing", "list_blank"]], ["add", "theorem", "bind_mk", ["turing", "list_blank"]], ["add", "def", "cons", ["turing", "list_blank"]], ["add", "theorem", "cons_bind", ["turing", "list_blank"]], ["add", "theorem", "cons_head_tail", ["turing", "list_blank"]], ["add", "theorem", "cons_mk", ["turing", "list_blank"]], ["add", "theorem", "exists_cons", ["turing", "list_blank"]], ["add", "theorem", "ext", ["turing", "list_blank"]], ["add", "def", "head", ["turing", "list_blank"]], ["add", "theorem", "head_cons", ["turing", "list_blank"]], ["add", "theorem", "head_map", ["turing", "list_blank"]], ["add", "theorem", "head_mk", ["turing", "list_blank"]], ["add", "def", "map", ["turing", "list_blank"]], ["add", "theorem", "map_cons", ["turing", "list_blank"]], ["add", "theorem", "map_mk", ["turing", "list_blank"]], ["add", "theorem", "map_modify_nth", ["turing", "list_blank"]], ["add", "def", "mk", ["turing", "list_blank"]], ["add", "def", "modify_nth", ["turing", "list_blank"]], ["add", "def", "nth", ["turing", "list_blank"]], ["add", "theorem", "nth_map", ["turing", "list_blank"]], ["add", "theorem", "nth_mk", ["turing", "list_blank"]], ["add", "theorem", "nth_modify_nth", ["turing", "list_blank"]], ["add", "theorem", "nth_succ", ["turing", "list_blank"]], ["add", "theorem", "nth_zero", ["turing", "list_blank"]], ["add", "def", "tail", ["turing", "list_blank"]], ["add", "theorem", "tail_cons", ["turing", "list_blank"]], ["add", "theorem", "tail_map", ["turing", "list_blank"]], ["add", "theorem", "tail_mk", ["turing", "list_blank"]], ["add", "def", "list_blank", ["turing"]], ["add", "theorem", "head_map", ["turing", "pointed_map"]], ["add", "theorem", "map_pt", ["turing", "pointed_map"]], ["add", "theorem", "mk_val", ["turing", "pointed_map"]], ["del", "def", "pointed_map", ["turing"]], ["add", "def", "proj", ["turing"]], ["add", "theorem", "proj_map_nth", ["turing"]], ["add", "theorem", "exists_mk'", ["turing", "tape"]], ["add", "def", "left₀", ["turing", "tape"]], ["mod", "def", "map", ["turing", "tape"]], ["mod", "theorem", "map_fst", ["turing", "tape"]], ["add", "theorem", "map_mk'", ["turing", "tape"]], ["del", "theorem", "map_mk", ["turing", "tape"]], ["add", "theorem", "map_mk₁", ["turing", "tape"]], ["add", "theorem", "map_mk₂", ["turing", "tape"]], ["mod", "theorem", "map_write", ["turing", "tape"]], ["mod", "def", "mk'", ["turing", "tape"]], ["add", "theorem", "mk'_head", ["turing", "tape"]], ["add", "theorem", "mk'_left", ["turing", "tape"]], ["add", "theorem", "mk'_left_right₀", ["turing", "tape"]], ["add", "theorem", "mk'_nth_nat", ["turing", "tape"]], ["add", "theorem", "mk'_right", ["turing", "tape"]], ["add", "theorem", "mk'_right₀", ["turing", "tape"]], ["del", "def", "mk", ["turing", "tape"]], ["add", "def", "mk₁", ["turing", "tape"]], ["add", "def", "mk₂", ["turing", "tape"]], ["add", "theorem", "move_left_mk'", ["turing", "tape"]], ["add", "theorem", "move_left_right", ["turing", "tape"]], ["add", "theorem", "move_right_left", ["turing", "tape"]], ["add", "theorem", "move_right_mk'", ["turing", "tape"]], ["add", "theorem", "move_right_n_head", ["turing", "tape"]], ["mod", "theorem", "move_right_nth", ["turing", "tape"]], ["mod", "def", "nth", ["turing", "tape"]], ["mod", "theorem", "nth_zero", ["turing", "tape"]], ["add", "def", "right₀", ["turing", "tape"]], ["add", "theorem", "right₀_nth", ["turing", "tape"]], ["mod", "def", "write", ["turing", "tape"]], ["add", "theorem", "write_mk'", ["turing", "tape"]], ["add", "theorem", "write_move_right_n", ["turing", "tape"]], ["mod", "theorem", "write_self", ["turing", "tape"]], ["add", "structure", "tape", ["turing"]], ["del", "def", "tape", ["turing"]], ["add", "structure", "{u", ["turing"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "head'_map", ["list"]], ["del", "theorem", "nth_concat_length:", ["list"]], ["add", "theorem", "nth_concat_length", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_sub_eq_max", ["nat"]]]}]}, {"timestamp": 1589056225, "sha": "b7698468", "message": "feat(tactic/norm_num): new all-lean norm_num (#2589)\nThis is a first draft of the lean replacement for `tactic.norm_num` in core. This isn't completely polished yet; the rest of `norm_num` can now be a little less \"global-recursive\" since the primitives for e.g. adding and multiplying natural numbers are exposed.\nI'm also trying out a new approach using functions like `match_neg` and `match_numeral` instead of directly pattern matching on exprs, because this generates smaller (and hopefully more efficient) code. (Without this, some of the matches were hitting the equation compiler depth limit.)\nI'm open to new feature suggestions as well here. `nat.succ` and coercions seem useful to support in the core part, and additional flexibility using `def_replacer` is also on the agenda.", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["add", "theorem", "adc_bit0_bit0", ["norm_num"]], ["add", "theorem", "adc_bit0_bit1", ["norm_num"]], ["add", "theorem", "adc_bit0_one", ["norm_num"]], ["add", "theorem", "adc_bit1_bit0", ["norm_num"]], ["add", "theorem", "adc_bit1_bit1", ["norm_num"]], ["add", "theorem", "adc_bit1_one", ["norm_num"]], ["add", "theorem", "adc_one_bit0", ["norm_num"]], ["add", "theorem", "adc_one_bit1", ["norm_num"]], ["add", "theorem", "adc_one_one", ["norm_num"]], ["add", "theorem", "adc_zero", ["norm_num"]], ["add", "theorem", "add_bit0_bit0", ["norm_num"]], ["add", "theorem", "add_bit0_bit1", ["norm_num"]], ["add", "theorem", "add_bit1_bit0", ["norm_num"]], ["add", "theorem", "add_bit1_bit1", ["norm_num"]], ["add", "theorem", "add_neg_neg", ["norm_num"]], ["add", "theorem", "add_neg_pos_neg", ["norm_num"]], ["add", "theorem", "add_neg_pos_pos", ["norm_num"]], ["add", "theorem", "add_pos_neg_neg", ["norm_num"]], ["add", "theorem", "add_pos_neg_pos", ["norm_num"]], ["add", "theorem", "bit0_mul", ["norm_num"]], ["add", "theorem", "bit0_succ", ["norm_num"]], ["del", "theorem", "bit0_zero", ["norm_num"]], ["add", "theorem", "bit1_succ", ["norm_num"]], ["del", "theorem", "bit1_zero", ["norm_num"]], ["add", "theorem", "clear_denom_add", ["norm_num"]], ["add", "theorem", "clear_denom_div", ["norm_num"]], ["add", "theorem", "clear_denom_le", ["norm_num"]], ["add", "theorem", "clear_denom_lt", ["norm_num"]], ["add", "theorem", "clear_denom_mul", ["norm_num"]], ["add", "theorem", "clear_denom_simple_div", ["norm_num"]], ["add", "theorem", "clear_denom_simple_nat", ["norm_num"]], ["add", "theorem", "div_eq", ["norm_num"]], ["add", "theorem", "dvd_eq_int", ["norm_num"]], ["add", "theorem", "dvd_eq_nat", ["norm_num"]], ["add", "theorem", "from_nat_pow", ["norm_num"]], ["add", "theorem", "int_cast_bit0", ["norm_num"]], ["add", "theorem", "int_cast_bit1", ["norm_num"]], ["add", "theorem", "int_cast_ne", ["norm_num"]], ["add", "theorem", "int_cast_neg", ["norm_num"]], ["add", "theorem", "int_cast_one", ["norm_num"]], ["add", "theorem", "int_cast_zero", ["norm_num"]], ["add", "theorem", "int_div", ["norm_num"]], ["del", "theorem", "int_div_helper", ["norm_num"]], ["add", "theorem", "int_div_neg", ["norm_num"]], ["add", "theorem", "int_mod", ["norm_num"]], ["del", "theorem", "int_mod_helper", ["norm_num"]], ["add", "theorem", "int_mod_neg", ["norm_num"]], ["add", "theorem", "inv_div", ["norm_num"]], ["add", "theorem", "inv_div_one", ["norm_num"]], ["add", "theorem", "inv_neg", ["norm_num"]], ["add", "theorem", "inv_one", ["norm_num"]], ["add", "theorem", "inv_one_div", ["norm_num"]], ["add", "theorem", "le_bit0_bit0", ["norm_num"]], ["add", "theorem", "le_bit0_bit1", ["norm_num"]], ["add", "theorem", "le_bit1_bit0", ["norm_num"]], ["add", "theorem", "le_bit1_bit1", ["norm_num"]], ["add", "theorem", "le_neg_pos", ["norm_num"]], ["add", "theorem", "le_one_bit0", ["norm_num"]], ["add", "theorem", "le_one_bit1", ["norm_num"]], ["del", "theorem", "lt_add_of_pos_helper", ["norm_num"]], ["add", "theorem", "lt_bit0_bit0", ["norm_num"]], ["add", "theorem", "lt_bit0_bit1", ["norm_num"]], ["add", "theorem", "lt_bit1_bit0", ["norm_num"]], ["add", "theorem", "lt_bit1_bit1", ["norm_num"]], ["add", "theorem", "lt_neg_pos", ["norm_num"]], ["add", "theorem", "lt_one_bit0", ["norm_num"]], ["add", "theorem", "lt_one_bit1", ["norm_num"]], ["mod", "theorem", "min_fac_helper_3", ["norm_num"]], ["mod", "theorem", "min_fac_helper_4", ["norm_num"]], ["add", "theorem", "mul_bit0'", ["norm_num"]], ["add", "theorem", "mul_bit0_bit0", ["norm_num"]], ["add", "theorem", "mul_bit1_bit1", ["norm_num"]], ["add", "theorem", "mul_neg_neg", ["norm_num"]], ["add", "theorem", "mul_neg_pos", ["norm_num"]], ["add", "theorem", "mul_pos_neg", ["norm_num"]], ["add", "theorem", "nat_cast_bit0", ["norm_num"]], ["add", "theorem", "nat_cast_bit1", ["norm_num"]], ["add", "theorem", "nat_cast_ne", ["norm_num"]], ["add", "theorem", "nat_cast_one", ["norm_num"]], ["add", "theorem", "nat_cast_zero", ["norm_num"]], ["add", "theorem", "nat_div", ["norm_num"]], ["del", "theorem", "nat_div_helper", ["norm_num"]], ["add", "theorem", "nat_mod", ["norm_num"]], ["del", "theorem", "nat_mod_helper", ["norm_num"]], ["add", "theorem", "nat_succ_eq", ["norm_num"]], ["add", "theorem", "ne_zero_neg", ["norm_num"]], ["add", "theorem", "ne_zero_of_pos", ["norm_num"]], ["add", "theorem", "nonneg_pos", ["norm_num"]], ["add", "theorem", "not_refl_false_intro", ["norm_num"]], ["add", "theorem", "one_add", ["norm_num"]], ["add", "theorem", "one_succ", ["norm_num"]], ["add", "theorem", "pow_bit0", ["norm_num"]], ["del", "theorem", "pow_bit0_helper", ["norm_num"]], ["add", "theorem", "pow_bit1", ["norm_num"]], ["del", "theorem", "pow_bit1_helper", ["norm_num"]], ["add", "theorem", "rat_cast_bit0", ["norm_num"]], ["add", "theorem", "rat_cast_bit1", ["norm_num"]], ["add", "theorem", "rat_cast_div", ["norm_num"]], ["add", "theorem", "rat_cast_ne", ["norm_num"]], ["add", "theorem", "rat_cast_neg", ["norm_num"]], ["add", "theorem", "sle_bit0_bit0", ["norm_num"]], ["add", "theorem", "sle_bit0_bit1", ["norm_num"]], ["add", "theorem", "sle_bit1_bit0", ["norm_num"]], ["add", "theorem", "sle_bit1_bit1", ["norm_num"]], ["add", "theorem", "sle_one_bit0", ["norm_num"]], ["add", "theorem", "sle_one_bit1", ["norm_num"]], ["add", "theorem", "sub_nat_neg", ["norm_num"]], ["add", "theorem", "sub_nat_pos", ["norm_num"]], ["add", "theorem", "sub_neg", ["norm_num"]], ["add", "theorem", "sub_pos", ["norm_num"]], ["add", "theorem", "zero_adc", ["norm_num"]], ["add", "theorem", "zero_succ", ["norm_num"]]]}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1589046041, "sha": "20c74188", "message": "chore(data/finset): drop `to_set`, use `has_lift` instead (#2629)\nAlso cleanup `coe_to_finset` lemmas. Now we have `set.finite.coe_to_finset` and `set.coe_to_finset`.", "changes": [{"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "coe_injective", ["finset"]], ["del", "def", "to_set", ["finset"]], ["del", "theorem", "to_set_injective", ["finset"]], ["del", "theorem", "to_set_sdiff", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "coe_to_finset", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "coe_preimage", ["finset"]], ["del", "theorem", "coe_to_finset'", ["finset"]], ["del", "theorem", "coe_to_finset", ["finset"]], ["mod", "theorem", "coe_to_finset", ["set", "finite"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1589034889, "sha": "e1192f35", "message": "feat(data/nat/basic): add `mod_add_mod` and `add_mod_mod` (#2635)\nAdded the `mod_add_mod` and `add_mod_mod` lemmas for `data.nat.basic`. I copied them from `data.int.basic`, and just changed the data type. Would there be issues with it being labelled `@[simp]`?\nAlso, would it make sense to refactor `add_mod` above it to use `mod_add_mod` and `add_mod_mod`? It'd make it considerably shorter.\n(Tangential note, there's a disparity between the `mod` lemmas for `nat` and the `mod` lemmas for `int`, for example `int` doesn't have `add_mod`, should that be added in a separate PR?)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "add_mod", ["int"]], ["add", "theorem", "mul_mod", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_mod_eq_add_mod_left", ["nat"]], ["add", "theorem", "add_mod_eq_add_mod_right", ["nat"]], ["add", "theorem", "add_mod_mod", ["nat"]], ["add", "theorem", "mod_add_mod", ["nat"]]]}]}, {"timestamp": 1589013201, "sha": "96efc220", "message": "feat(data/nat/cast): nat.cast_with_bot (#2636)\nAs requested on Zulip: https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/with_bot/near/196979007", "changes": [{"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_with_bot", ["nat"]]]}]}, {"timestamp": 1588971691, "sha": "67e19cd9", "message": "feat(src/ring_theory/algebra): define equivalence of algebras (#2625)", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "apply_symm_apply", ["alg_equiv"]], ["add", "theorem", "bijective", ["alg_equiv"]], ["add", "theorem", "coe_ring_equiv", ["alg_equiv"]], ["add", "theorem", "coe_to_alg_equiv", ["alg_equiv"]], ["add", "theorem", "commutes", ["alg_equiv"]], ["add", "theorem", "injective", ["alg_equiv"]], ["add", "theorem", "map_add", ["alg_equiv"]], ["add", "theorem", "map_mul", ["alg_equiv"]], ["add", "theorem", "map_neg", ["alg_equiv"]], ["add", "theorem", "map_one", ["alg_equiv"]], ["add", "theorem", "map_sub", ["alg_equiv"]], ["add", "theorem", "map_zero", ["alg_equiv"]], ["add", "def", "refl", ["alg_equiv"]], ["add", "theorem", "surjective", ["alg_equiv"]], ["add", "def", "symm", ["alg_equiv"]], ["add", "theorem", "symm_apply_apply", ["alg_equiv"]], ["add", "def", "trans", ["alg_equiv"]], ["add", "structure", "alg_equiv", []]]}]}, {"timestamp": 1588955966, "sha": "fc8c4b9f", "message": "chore(`analysis/normed_space/banach`): minor review (#2631)\n* move comment to module docstring;\n* don't import `bounded_linear_maps`;\n* reuse `open_mapping` in `linear_equiv.continuous_symm`;\n* add a few `simp` lemmas.", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "coe_fn_to_continuous_linear_equiv_of_continuous", ["linear_equiv"]], ["add", "theorem", "coe_fn_to_continuous_linear_equiv_of_continuous_symm", ["linear_equiv"]], ["mod", "theorem", "continuous_symm", ["linear_equiv"]], ["mod", "def", "to_continuous_linear_equiv_of_continuous", ["linear_equiv"]]]}]}, {"timestamp": 1588901444, "sha": "ac3fb4eb", "message": "chore(scripts): update nolints.txt (#2628)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1588891382, "sha": "a7e80393", "message": "feat(data/equiv/encodable): `ulower` lowers countable types to `Type 0` (#2574)\nGiven a type `α : Type u`, we can lift it into a higher universe using `ulift α : Type (max u v)`. This PR introduces an analogous construction going in the other direction. Given an encodable (= countable) type `α : Type u`, we can lower it to the very bottom using `ulower α : Type 0`. The equivalence is primitive recursive if the type is primcodable.\nThe definition of the equivalence was already present as `encodable.equiv_range_encode`. However it is very inconvenient to use since it requires decidability instances (`encodable.decidable_range_encode`) that are not enabled by default because they would introduce overlapping instances that are not definitionally equal.", "changes": [{"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": [["add", "theorem", "option_get", ["primrec"]], ["add", "theorem", "option_get_or_else", ["primrec"]], ["add", "theorem", "subtype_mk", ["primrec"]], ["add", "theorem", "ulower_down", ["primrec"]], ["add", "theorem", "ulower_up", ["primrec"]]]}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": [["add", "theorem", "encode_eq", ["encodable", "subtype"]], ["add", "def", "down", ["ulower"]], ["add", "theorem", "down_eq_down", ["ulower"]], ["add", "theorem", "down_up", ["ulower"]], ["add", "def", "equiv", ["ulower"]], ["add", "def", "up", ["ulower"]], ["add", "theorem", "up_down", ["ulower"]], ["add", "theorem", "up_eq_up", ["ulower"]], ["add", "def", "ulower", []]]}]}, {"timestamp": 1588885357, "sha": "ed453c72", "message": "chore(data/polynomial): remove unused argument (#2626)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "map_injective", ["polynomial"]]]}]}, {"timestamp": 1588877163, "sha": "bdce1956", "message": "chore(linear_algebra/basic): review (#2616)\n* several new `simp` lemmas;\n* use `linear_equiv.coe_coe` instead of `coe_apply`;\n* rename `sup_quotient_to_quotient_inf` to `quotient_inf_to_sup_quotient` because it better reflects the definition; similarly for `equiv`.\n* make `general_linear_group` reducible.", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "coe_eq_coe", ["submodule"]], ["add", "theorem", "coe_eq_zero", ["submodule"]], ["add", "theorem", "coe_mem", ["submodule"]], ["mod", "theorem", "mk_eq_zero", ["submodule"]], ["mod", "theorem", "neg_mem_iff", ["submodule"]], ["mod", "theorem", "smul_mem_iff'", ["submodule"]]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "coe_apply", ["linear_equiv"]], ["add", "theorem", "coe_coe", ["linear_equiv"]], ["add", "theorem", "coe_to_add_equiv", ["linear_equiv"]], ["add", "theorem", "coe_to_equiv", ["linear_equiv"]], ["add", "theorem", "eq_symm_apply", ["linear_equiv"]], ["add", "theorem", "map_eq_comap", ["linear_equiv"]], ["add", "theorem", "refl_trans", ["linear_equiv"]], ["add", "theorem", "symm_apply_eq", ["linear_equiv"]], ["add", "theorem", "trans_refl", ["linear_equiv"]], ["mod", "def", "general_linear_group", ["linear_map"]], ["add", "theorem", "map_coe_ker", ["linear_map"]], ["add", "theorem", "mem_range_self", ["linear_map"]], ["add", "def", "quotient_inf_to_sup_quotient", ["linear_map"]], ["add", "theorem", "range_coprod", ["linear_map"]], ["add", "def", "range_restrict", ["linear_map"]], ["del", "def", "sup_quotient_to_quotient_inf", ["linear_map"]], ["add", "theorem", "comap_subtype_eq_top", ["submodule"]], ["add", "theorem", "comap_subtype_self", ["submodule"]], ["mod", "theorem", "disjoint_iff_comap_eq_bot", ["submodule"]], ["mod", "theorem", "map_coe", ["submodule"]], ["add", "theorem", "mem_sup'", ["submodule"]], ["add", "theorem", "quot_hom_ext", ["submodule"]], ["add", "theorem", "range_range_restrict", ["submodule"]], ["add", "theorem", "sup_eq_range", ["submodule"]]]}]}, {"timestamp": 1588866698, "sha": "5d3b8307", "message": "refactor(order/lattice): add `sup/inf_eq_*`, rename `inf_le_inf_*` (#2624)\n## New lemmas:\n* `sup_eq_right : a ⊔ b = b ↔a ≤ b`, and similarly for `sup_eq_left`, `left_eq_sup`, `right_eq_sup`,\n `inf_eq_right`, `inf_eq_left`, `left_eq_inf`, and `right_eq_inf`; all these lemmas are `@[simp]`;\n* `sup_elim` and `inf_elim`: if `(≤)` is a total order, then `p a → p b → p (a ⊔ b)`, and similarly for `inf`.\n## Renamed\n* `inf_le_inf_right` is now `inf_le_inf_left` and vice versa. This agrees with `sup_le_sup_left`/`sup_le_sup_right`, and the rest of the library.\n* `ord_continuous_sup` -> `ord_continuous.sup`;\n* `ord_continuous_mono` -> `ord_continuous.mono`.", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "mono", ["ord_continuous"]], ["add", "theorem", "sup", ["ord_continuous"]], ["del", "theorem", "ord_continuous_mono", []], ["del", "theorem", "ord_continuous_sup", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_eq_left", []], ["add", "theorem", "inf_eq_right", []], ["add", "theorem", "inf_ind", []], ["mod", "theorem", "inf_le_inf_left", []], ["mod", "theorem", "inf_le_inf_right", []], ["add", "theorem", "left_eq_inf", []], ["add", "theorem", "left_eq_sup", []], ["add", "theorem", "right_eq_inf", []], ["add", "theorem", "right_eq_sup", []], ["add", "theorem", "sup_eq_left", []], ["add", "theorem", "sup_eq_right", []], ["add", "theorem", "sup_ind", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1588856977, "sha": "6c484441", "message": "feat(algebra/lie_algebra): `lie_algebra.of_associative_algebra` is functorial (#2620)\nMore precisely we:\n * define the Lie algebra homomorphism associated to a morphism of associative algebras\n * prove that the correspondence is functorial\n * prove that subalgebras and Lie subalgebras correspond", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "def", "of_associative_algebra_hom", ["lie_algebra"]], ["add", "theorem", "of_associative_algebra_hom_comp", ["lie_algebra"]], ["add", "theorem", "of_associative_algebra_hom_id", ["lie_algebra"]], ["add", "def", "lie_subalgebra_of_subalgebra", []]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "mul_mem", ["subalgebra"]]]}]}, {"timestamp": 1588847122, "sha": "da10afcf", "message": "feat(*): define `equiv.reflection` and `isometry.reflection` (#2609)\nDefine reflection in a point and prove basic properties.\nIt is defined both as an `equiv.perm` of an `add_comm_group` and\nas an `isometric` of a `normed_group`.\nOther changes:\n* rename `two_smul` to `two_smul'`, add `two_smul` using `semimodule`\n instead of `add_monoid.smul`;\n* minor review of `algebra.midpoint`;\n* arguments of `isometry.dist_eq` and `isometry.edist_eq` are now explicit;\n* rename `isometry.inv` to `isometry.right_inv`; now it takes `right_inverse`\n instead of `equiv`;\n* drop `isometry_inv_fun`: use `h.symm.isometry` instead;\n* pull a few more lemmas about `equiv` and `isometry` to the `isometric` namespace.", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "two_smul'", []], ["del", "theorem", "two_smul", []]]}, {"oldPath": "src/algebra/midpoint.lean", "newPath": "src/algebra/midpoint.lean", "changes": [["add", "theorem", "coe_of_map_midpoint", ["add_monoid_hom"]], ["add", "def", "of_map_midpoint", ["add_monoid_hom"]], ["add", "theorem", "reflection_midpoint_left", ["equiv"]], ["add", "theorem", "reflection_midpoint_right", ["equiv"]], ["add", "theorem", "midpoint_add_self", []], ["add", "theorem", "midpoint_zero_add", []]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "two_smul", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_two", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/reflection.lean", "changes": [["add", "theorem", "reflection_fixed_iff_of_module", ["equiv"]], ["add", "def", "reflection", ["isometric"]], ["add", "theorem", "reflection_apply", ["isometric"]], ["add", "theorem", "reflection_dist_fixed", ["isometric"]], ["add", "theorem", "reflection_dist_self'", ["isometric"]], ["add", "theorem", "reflection_dist_self", ["isometric"]], ["add", "theorem", "reflection_dist_self_real", ["isometric"]], ["add", "theorem", "reflection_fixed_iff", ["isometric"]], ["add", "theorem", "reflection_involutive", ["isometric"]], ["add", "theorem", "reflection_midpoint_left", ["isometric"]], ["add", "theorem", "reflection_midpoint_right", ["isometric"]], ["add", "theorem", "reflection_self", ["isometric"]], ["add", "theorem", "reflection_symm", ["isometric"]], ["add", "theorem", "reflection_to_equiv", ["isometric"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "reflection", ["equiv"]], ["add", "theorem", "reflection_apply", ["equiv"]], ["add", "theorem", "reflection_fixed_iff_of_bit0_inj", ["equiv"]], ["add", "theorem", "reflection_involutive", ["equiv"]], ["add", "theorem", "reflection_self", ["equiv"]], ["add", "theorem", "reflection_symm", ["equiv"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["del", "theorem", "coe_eq_to_homeomorph", ["isometric"]], ["add", "theorem", "coe_to_homeomorph", ["isometric"]], ["mod", "theorem", "ext", ["isometric"]], ["del", "theorem", "isometry_inv_fun", ["isometric"]], ["add", "theorem", "to_equiv_inj", ["isometric"]], ["mod", "theorem", "to_homeomorph_to_equiv", ["isometric"]], ["mod", "theorem", "dist_eq", ["isometry"]], ["mod", "theorem", "edist_eq", ["isometry"]], ["del", "theorem", "inv", ["isometry"]], ["mod", "theorem", "isometric_on_range_apply", ["isometry"]], ["add", "theorem", "right_inv", ["isometry"]]]}]}, {"timestamp": 1588835524, "sha": "a6415d79", "message": "chore(data/set/basic): use implicit args in `set.ext_iff` (#2619)\nMost other `ext_iff` lemmas use implicit arguments, let `set.ext_iff` use them too.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "ext_iff", ["set"]]]}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1588819191, "sha": "f6edebaa", "message": "chore(scripts): update nolints.txt (#2622)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1588812166, "sha": "a8eafb65", "message": "chore(scripts): update nolints.txt (#2621)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1588804898, "sha": "0c8d2e28", "message": "chore(data/set/countable): use dot syntax here and there (#2617)\nRenamed:\n* `exists_surjective_of_countable` -> `countable.exists_surjective`;\n* `countable_subset` -> `countable.mono`;\n* `countable_image` -> `countable.image`;\n* `countable_bUnion` -> `countable.bUnion`;\n* `countable_sUnion` -> `countable.sUnion`;\n* `countable_union` -> `countable.union`;\n* `countable_insert` -> `countable.insert`;\n* `countable_finite` -> `finite.countable`;\nAdd:\n* `finset.countable_to_set`", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "countable_to_set", ["finset"]], ["add", "theorem", "bUnion", ["set", "countable"]], ["add", "theorem", "exists_surjective", ["set", "countable"]], ["add", "theorem", "image", ["set", "countable"]], ["add", "theorem", "insert", ["set", "countable"]], ["add", "theorem", "mono", ["set", "countable"]], ["add", "theorem", "sUnion", ["set", "countable"]], ["add", "theorem", "union", ["set", "countable"]], ["del", "theorem", "countable_bUnion", ["set"]], ["del", "theorem", "countable_finite", ["set"]], ["del", "theorem", "countable_image", ["set"]], ["del", "theorem", "countable_insert", ["set"]], ["del", "theorem", "countable_sUnion", ["set"]], ["del", "theorem", "countable_subset", ["set"]], ["del", "theorem", "countable_union", ["set"]], ["del", "theorem", "exists_surjective_of_countable", ["set"]], ["add", "theorem", "countable", ["set", "finite"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "range_const", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["mod", "def", "countable_filter_basis", ["filter", "is_countably_generated"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1588793993, "sha": "c3d76d01", "message": "chore(*): a few missing `simp` lemmas (#2615)\nAlso replaces `monoid_hom.exists_inv_of_comp_exists_inv` with `monoid_hom.map_exists_right_inv` and adds `monoid_hom.map_exists_left_inv`.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "theorem", "exists_inv_of_comp_exists_inv", ["monoid_hom"]], ["add", "theorem", "id_apply", ["monoid_hom"]], ["add", "theorem", "map_exists_left_inv", ["monoid_hom"]], ["add", "theorem", "map_exists_right_inv", ["monoid_hom"]], ["add", "theorem", "map_mul_eq_one", ["monoid_hom"]]]}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "theorem", "coe_mk", ["mul_equiv"]], ["add", "theorem", "coe_symm_mk", ["mul_equiv"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "eta", ["sigma"]]]}]}, {"timestamp": 1588793991, "sha": "460d9d43", "message": "refactor(data/equiv/local_equiv, topology/local_homeomorph): use coercions (#2603)\nLocal equivs and local homeomorphisms use `e.to_fun x` and `e.inv_fun x`, instead of coercions as in most of mathlib, as there were problems with coercions that made them unusable in manifolds. These problems have been fixed in Lean 3.10, so we switch to coercions for them also.\nThis is 95% a refactor PR, erasing `.to_fun` and replacing `.inv_fun` with `.symm` in several files, and fixing proofs. Plus a few simp lemmas on the coercions to let things go smoothly. I have also linted all the files I have touched.", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/inverse.lean", "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "to_local_homeomorph_coe", ["approximates_linear_on"]], ["del", "theorem", "to_local_homeomorph_to_fun", ["approximates_linear_on"]], ["add", "theorem", "to_local_homeomorph_coe", ["has_strict_fderiv_at"]], ["del", "theorem", "to_local_homeomorph_to_fun", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": [["add", "theorem", "to_local_equiv_coe", ["equiv"]], ["del", "theorem", "to_local_equiv_inv_fun", ["equiv"]], ["add", "theorem", "to_local_equiv_symm_coe", ["equiv"]], ["del", "theorem", "to_local_equiv_to_fun", ["equiv"]], ["mod", "theorem", "bij_on_source", ["local_equiv"]], ["add", "theorem", "coe_mk", ["local_equiv"]], ["add", "theorem", "coe_symm_mk", ["local_equiv"]], ["add", "theorem", "coe_trans", ["local_equiv"]], ["add", "theorem", "coe_trans_symm", ["local_equiv"]], ["mod", "theorem", "image_source_eq_target", ["local_equiv"]], ["mod", "theorem", "image_trans_source", ["local_equiv"]], ["add", "theorem", "inv_fun_as_coe", ["local_equiv"]], ["mod", "theorem", "inv_image_target_eq_source", ["local_equiv"]], ["mod", "theorem", "inv_image_trans_target", ["local_equiv"]], ["add", "theorem", "left_inv", ["local_equiv"]], ["add", "theorem", "map_source", ["local_equiv"]], ["add", "theorem", "map_target", ["local_equiv"]], ["add", "theorem", "of_set_coe", ["local_equiv"]], ["del", "theorem", "of_set_inv_fun", ["local_equiv"]], ["del", "theorem", "of_set_to_fun", ["local_equiv"]], ["add", "theorem", "prod_coe", ["local_equiv"]], ["add", "theorem", "prod_coe_symm", ["local_equiv"]], ["del", "theorem", "prod_inv_fun", ["local_equiv"]], ["del", "theorem", "prod_to_fun", ["local_equiv"]], ["add", "theorem", "refl_coe", ["local_equiv"]], ["del", "theorem", "refl_inv_fun", ["local_equiv"]], ["del", "theorem", "refl_to_fun", ["local_equiv"]], ["add", "theorem", "restr_coe", ["local_equiv"]], ["add", "theorem", "restr_coe_symm", ["local_equiv"]], ["del", "theorem", "restr_inv_fun", ["local_equiv"]], ["mod", "theorem", "restr_target", ["local_equiv"]], ["del", "theorem", "restr_to_fun", ["local_equiv"]], ["add", "theorem", "right_inv", ["local_equiv"]], ["mod", "theorem", "source_subset_preimage_target", ["local_equiv"]], ["del", "theorem", "symm_inv_fun", ["local_equiv"]], ["del", "theorem", "symm_to_fun", ["local_equiv"]], ["mod", "theorem", "target_subset_preimage_source", ["local_equiv"]], ["add", "theorem", "to_fun_as_coe", ["local_equiv"]], ["del", "theorem", "trans_apply", ["local_equiv"]], ["del", "theorem", "trans_inv_apply", ["local_equiv"]], ["del", "theorem", "trans_inv_fun", ["local_equiv"]], ["mod", "theorem", "trans_source''", ["local_equiv"]], ["mod", "theorem", "trans_source'", ["local_equiv"]], ["mod", "theorem", "trans_source", ["local_equiv"]], ["mod", "theorem", "trans_target''", ["local_equiv"]], ["mod", "theorem", "trans_target'", ["local_equiv"]], ["mod", "theorem", "trans_target", ["local_equiv"]], ["del", "theorem", "trans_to_fun", ["local_equiv"]]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": [["del", "theorem", "chart_at_inv_fun_fst", ["basic_smooth_bundle_core"]], ["del", "theorem", "chart_at_to_fun_fst", ["basic_smooth_bundle_core"]], ["add", "theorem", "coe_chart_at_fst", ["basic_smooth_bundle_core"]], ["add", "theorem", "coe_chart_at_symm_fst", ["basic_smooth_bundle_core"]], ["add", "theorem", "tangent_bundle_model_space_coe_chart_at", []], ["add", "theorem", "tangent_bundle_model_space_coe_chart_at_symm", []], ["add", "def", "trivial_basic_smooth_bundle_core", []]]}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": [["add", "def", "continuous_pregroupoid", []]]}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "theorem", "bundle_mfderiv_chart", []], ["del", "theorem", "bundle_mfderiv_chart_inv_fun", []], ["add", "theorem", "bundle_mfderiv_chart_symm", []], ["del", "theorem", "bundle_mfderiv_chart_to_fun", []], ["add", "theorem", "comp_symm_deriv", ["local_homeomorph", "mdifferentiable"]], ["del", "theorem", "inv_fun_to_fun_deriv", ["local_homeomorph", "mdifferentiable"]], ["del", "theorem", "mdifferentiable_at_inv_fun", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "mdifferentiable_at_symm", ["local_homeomorph", "mdifferentiable"]], ["del", "theorem", "mdifferentiable_at_to_fun", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "symm_comp_deriv", ["local_homeomorph", "mdifferentiable"]], ["del", "theorem", "to_fun_inv_fun_deriv", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "mdifferentiable_at_atlas", []], ["del", "theorem", "mdifferentiable_at_atlas_inv_fun", []], ["add", "theorem", "mdifferentiable_at_atlas_symm", []], ["del", "theorem", "mdifferentiable_at_atlas_to_fun", []], ["add", "theorem", "mdifferentiable_on_atlas", []], ["del", "theorem", "mdifferentiable_on_atlas_inv_fun", []], ["add", "theorem", "mdifferentiable_on_atlas_symm", []], ["del", "theorem", "mdifferentiable_on_atlas_to_fun", []], ["add", "theorem", "mdifferentiable", ["model_with_corners"]], ["add", "theorem", "mdifferentiable_on_symm", ["model_with_corners"]], ["del", "theorem", "model_with_corners_mdifferentiable_on_inv_fun", []], ["del", "theorem", "model_with_corners_mdifferentiable_on_to_fun", []]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "theorem", "ext_chart_at_coe", []], ["add", "theorem", "ext_chart_at_coe_symm", []], ["add", "theorem", "ext_chart_at_continuous_at", []], ["del", "theorem", "ext_chart_at_continuous_at_to_fun", []], ["add", "theorem", "ext_chart_at_continuous_on", []], ["del", "theorem", "ext_chart_at_continuous_on_inv_fun", []], ["add", "theorem", "ext_chart_at_continuous_on_symm", []], ["del", "theorem", "ext_chart_at_continuous_on_to_fun", []], ["del", "theorem", "ext_chart_continuous_at_inv_fun'", []], ["del", "theorem", "ext_chart_continuous_at_inv_fun", []], ["add", "theorem", "ext_chart_continuous_at_symm'", []], ["add", "theorem", "ext_chart_continuous_at_symm", []], ["mod", "theorem", "ext_chart_preimage_inter_eq", []], ["add", "theorem", "continuous_symm", ["model_with_corners"]], ["add", "theorem", "left_inv'", ["model_with_corners"]], ["add", "theorem", "left_inv", ["model_with_corners"]], ["add", "theorem", "mk_coe", ["model_with_corners"]], ["add", "theorem", "mk_coe_symm", ["model_with_corners"]], ["add", "theorem", "right_inv", ["model_with_corners"]], ["add", "theorem", "target", ["model_with_corners"]], ["add", "theorem", "to_local_equiv_coe", ["model_with_corners"]], ["add", "theorem", "to_local_equiv_coe_symm", ["model_with_corners"]], ["add", "theorem", "unique_diff", ["model_with_corners"]], ["add", "theorem", "unique_diff_at_image", ["model_with_corners"]], ["add", "theorem", "unique_diff_preimage", ["model_with_corners"]], ["add", "theorem", "unique_diff_preimage_source", ["model_with_corners"]], ["del", "theorem", "model_with_corners_inv_fun_comp", []], ["del", "theorem", "model_with_corners_left_inv", []], ["del", "theorem", "model_with_corners_right_inv", []], ["add", "theorem", "model_with_corners_self_coe", []], ["add", "theorem", "model_with_corners_self_coe_symm", []], ["mod", "theorem", "model_with_corners_self_local_equiv", []], ["del", "theorem", "model_with_corners_target", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "to_local_homeomorph_coe", ["homeomorph"]], ["add", "theorem", "to_local_homeomorph_coe_symm", ["homeomorph"]], ["del", "theorem", "to_local_homeomorph_inv_fun", ["homeomorph"]], ["mod", "theorem", "to_local_homeomorph_source", ["homeomorph"]], ["mod", "theorem", "to_local_homeomorph_target", ["homeomorph"]], ["del", "theorem", "to_local_homeomorph_to_fun", ["homeomorph"]], ["mod", "theorem", "apply_eq_of_eq_on_source", ["local_homeomorph"]], ["add", "theorem", "coe_coe", ["local_homeomorph"]], ["add", "theorem", "coe_coe_symm", ["local_homeomorph"]], ["add", "theorem", "coe_trans", ["local_homeomorph"]], ["add", "theorem", "coe_trans_symm", ["local_homeomorph"]], ["del", "theorem", "continuous_at_inv_fun", ["local_homeomorph"]], ["add", "theorem", "continuous_at_symm", ["local_homeomorph"]], ["del", "theorem", "continuous_at_to_fun", ["local_homeomorph"]], ["add", "theorem", "continuous_on_symm", ["local_homeomorph"]], ["mod", "theorem", "image_open_of_open", ["local_homeomorph"]], ["mod", "theorem", "image_trans_source", ["local_homeomorph"]], ["mod", "theorem", "inv_apply_eq_of_eq_on_source", ["local_homeomorph"]], ["add", "theorem", "inv_fun_eq_coe", ["local_homeomorph"]], ["del", "theorem", "inv_fun_tendsto", ["local_homeomorph"]], ["mod", "theorem", "inv_image_trans_target", ["local_homeomorph"]], ["add", "theorem", "left_inv", ["local_homeomorph"]], ["add", "theorem", "map_source", ["local_homeomorph"]], ["add", "theorem", "map_target", ["local_homeomorph"]], ["add", "theorem", "mk_coe", ["local_homeomorph"]], ["add", "theorem", "mk_coe_symm", ["local_homeomorph"]], ["add", "theorem", "of_set_coe", ["local_homeomorph"]], ["del", "theorem", "of_set_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "of_set_source", ["local_homeomorph"]], ["mod", "theorem", "of_set_symm", ["local_homeomorph"]], ["mod", "theorem", "of_set_target", ["local_homeomorph"]], ["del", "theorem", "of_set_to_fun", ["local_homeomorph"]], ["add", "theorem", "prod_coe", ["local_homeomorph"]], ["add", "theorem", "prod_coe_symm", ["local_homeomorph"]], ["del", "theorem", "prod_inv_fun", ["local_homeomorph"]], ["del", "theorem", "prod_to_fun", ["local_homeomorph"]], ["add", "theorem", "refl_coe", ["local_homeomorph"]], ["del", "theorem", "refl_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "refl_source", ["local_homeomorph"]], ["mod", "theorem", "refl_symm", ["local_homeomorph"]], ["mod", "theorem", "refl_target", ["local_homeomorph"]], ["del", "theorem", "refl_to_fun", ["local_homeomorph"]], ["add", "theorem", "restr_coe", ["local_homeomorph"]], ["add", "theorem", "restr_coe_symm", ["local_homeomorph"]], ["del", "theorem", "restr_inv_fun", ["local_homeomorph"]], ["del", "theorem", "restr_to_fun", ["local_homeomorph"]], ["add", "theorem", "right_inv", ["local_homeomorph"]], ["del", "theorem", "symm_inv_fun", ["local_homeomorph"]], ["del", "theorem", "symm_to_fun", ["local_homeomorph"]], ["add", "theorem", "tendsto_symm", ["local_homeomorph"]], ["add", "theorem", "to_fun_eq_coe", ["local_homeomorph"]], ["add", "theorem", "to_homeomorph_coe", ["local_homeomorph"]], ["del", "theorem", "to_homeomorph_inv_fun", ["local_homeomorph"]], ["add", "theorem", "to_homeomorph_symm_coe", ["local_homeomorph"]], ["del", "theorem", "to_homeomorph_to_fun", ["local_homeomorph"]], ["del", "theorem", "trans_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "trans_source''", ["local_homeomorph"]], ["mod", "theorem", "trans_source'", ["local_homeomorph"]], ["mod", "theorem", "trans_source", ["local_homeomorph"]], ["mod", "theorem", "trans_target''", ["local_homeomorph"]], ["mod", "theorem", "trans_target'", ["local_homeomorph"]], ["mod", "theorem", "trans_target", ["local_homeomorph"]], ["del", "theorem", "trans_to_fun", ["local_homeomorph"]]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["add", "theorem", "coe_coe", ["bundle_trivialization"]], ["add", "theorem", "coe_fst", ["bundle_trivialization"]], ["add", "theorem", "coe_mk", ["bundle_trivialization"]]]}]}, {"timestamp": 1588793989, "sha": "b1c0398a", "message": "feat(analysis/analytic/composition): the composition of formal series is associative (#2513)\nThe composition of formal multilinear series is associative. I will need this when doing the analytic local inverse theorem, and I was surprised by how nontrivial this is: one should show that two double sums coincide by reindexing, but the reindexing is combinatorially tricky (it involves joining and splitting lists carefully). \nPreliminary material on lists, sums and compositions is done in #2501 and #2554, and the proof is in this PR.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": [["add", "theorem", "blocks_fun_sigma_composition_aux", ["composition"]], ["add", "def", "gather", ["composition"]], ["add", "theorem", "length_gather", ["composition"]], ["add", "theorem", "length_sigma_composition_aux", ["composition"]], ["add", "def", "sigma_composition_aux", ["composition"]], ["add", "theorem", "sigma_composition_eq_iff", ["composition"]], ["add", "def", "sigma_equiv_sigma_pi", ["composition"]], ["add", "theorem", "sigma_pi_composition_eq_iff", ["composition"]], ["add", "theorem", "size_up_to_size_up_to_add", ["composition"]], ["add", "theorem", "apply_composition_ones", ["formal_multilinear_series"]], ["add", "theorem", "comp_along_composition_apply", ["formal_multilinear_series"]], ["add", "theorem", "comp_assoc", ["formal_multilinear_series"]], ["add", "theorem", "comp_coeff_zero''", ["formal_multilinear_series"]], ["add", "theorem", "comp_coeff_zero'", ["formal_multilinear_series"]], ["add", "theorem", "comp_coeff_zero", ["formal_multilinear_series"]], ["add", "theorem", "comp_id", ["formal_multilinear_series"]], ["add", "def", "id", ["formal_multilinear_series"]], ["add", "theorem", "id_apply_ne_one", ["formal_multilinear_series"]], ["add", "theorem", "id_apply_one'", ["formal_multilinear_series"]], ["add", "theorem", "id_apply_one", ["formal_multilinear_series"]], ["add", "theorem", "id_comp", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "congr", ["formal_multilinear_series"]]]}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["add", "def", "blocks_fin_equiv", ["composition"]], ["add", "theorem", "blocks_fun_congr", ["composition"]], ["add", "theorem", "index_embedding", ["composition"]], ["add", "theorem", "inv_embedding_comp", ["composition"]], ["add", "theorem", "nth_le_split_wrt_composition", ["list"]], ["add", "theorem", "nth_le_split_wrt_composition_aux", ["list"]]]}]}, {"timestamp": 1588782687, "sha": "0a7ff10f", "message": "feat(algebra/units): some norm_cast attributes (#2612)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "coe_inv", ["units"]], ["mod", "theorem", "coe_mul", ["units"]], ["mod", "theorem", "coe_one", ["units"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "coe_pow", ["units"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "gsmul_coe", ["is_add_subgroup"]], ["mod", "theorem", "coe_gpow", ["is_subgroup"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["mod", "theorem", "smul_coe", ["is_add_submonoid"]], ["mod", "theorem", "coe_pow", ["is_submonoid"]]]}]}, {"timestamp": 1588773937, "sha": "93a64dae", "message": "chore(data/pnat/basic): add `mk_le_mk`, `mk_lt_mk`, `coe_le_coe`, `coe_lt_coe` (#2613)", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "coe_le_coe", ["pnat"]], ["add", "theorem", "coe_lt_coe", ["pnat"]], ["add", "theorem", "mk_le_mk", ["pnat"]], ["add", "theorem", "mk_lt_mk", ["pnat"]]]}, {"oldPath": "src/data/pnat/intervals.lean", "newPath": "src/data/pnat/intervals.lean", "changes": [["mod", "theorem", "mem", ["pnat", "Ico"]]]}]}, {"timestamp": 1588755786, "sha": "55931556", "message": "feat(*): lemmas on sums and products over fintypes (#2598)", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "prod_pow", ["finsupp"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_fiberwise", ["finset"]], ["mod", "theorem", "card_eq_sum_ones", ["fintype"]], ["add", "theorem", "prod_congr", ["fintype"]], ["add", "theorem", "prod_eq_one", ["fintype"]], ["add", "theorem", "prod_fiberwise", ["fintype"]], ["add", "theorem", "prod_sum_type", ["fintype"]], ["add", "theorem", "prod_unique", ["fintype"]]]}]}, {"timestamp": 1588731094, "sha": "4503f8fe", "message": "chore(scripts): update nolints.txt (#2610)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1588717999, "sha": "c7593cc5", "message": "refactor(field_theory): move finite_card.lean into finite.lean (#2607)", "changes": [{"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["add", "theorem", "card'", ["finite_field"]], ["add", "theorem", "card", ["finite_field"]]]}, {"oldPath": "src/field_theory/finite_card.lean", "newPath": null, "changes": [["del", "theorem", "card'", ["finite_field"]], ["del", "theorem", "card", ["finite_field"]]]}]}, {"timestamp": 1588717996, "sha": "0db59dbf", "message": "feat(data/equiv/basic): some elementary equivs (#2602)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "fun_unique", ["equiv"]], ["add", "theorem", "fun_unique_apply", ["equiv"]], ["add", "theorem", "fun_unique_symm_apply", ["equiv"]], ["add", "theorem", "sigma_preimage_equiv_apply", ["equiv"]], ["add", "theorem", "sigma_preimage_equiv_symm_apply_fst", ["equiv"]], ["add", "theorem", "sigma_preimage_equiv_symm_apply_snd_fst", ["equiv"]], ["add", "def", "subtype_preimage", ["equiv"]], ["add", "theorem", "subtype_preimage_apply", ["equiv"]], ["add", "theorem", "subtype_preimage_symm_apply_coe", ["equiv"]], ["add", "theorem", "subtype_preimage_symm_apply_coe_neg", ["equiv"]], ["add", "theorem", "subtype_preimage_symm_apply_coe_pos", ["equiv"]], ["add", "def", "sum_compl", ["equiv"]], ["add", "theorem", "sum_compl_apply_inl", ["equiv"]], ["add", "theorem", "sum_compl_apply_inr", ["equiv"]], ["add", "theorem", "sum_compl_apply_symm_of_neg", ["equiv"]], ["add", "theorem", "sum_compl_apply_symm_of_pos", ["equiv"]]]}]}, {"timestamp": 1588709788, "sha": "359031f9", "message": "refactor(*): remove instance max depth (#2608)\nWith current Lean, all the manual increases of the maximum instance depth have become unnecessary. This PR removes them all.", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1588705694, "sha": "a66d0a81", "message": "chore(field_theory/finite): meaningful variable names (#2606)", "changes": [{"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["mod", "theorem", "card_nth_roots_subgroup_units", []], ["mod", "theorem", "card_image_polynomial_eval", ["finite_field"]], ["mod", "theorem", "card_units", ["finite_field"]], ["mod", "theorem", "exists_root_sum_quadratic", ["finite_field"]], ["mod", "def", "field_of_integral_domain", ["finite_field"]], ["mod", "theorem", "pow_card_sub_one_eq_one", ["finite_field"]]]}]}, {"timestamp": 1588688967, "sha": "0c1b60b6", "message": "feat(group_theory/order_of_element): order_of_eq_prime (#2604)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_eq_prime", []]]}]}, {"timestamp": 1588665735, "sha": "7a367f37", "message": "feat(algebra/char_p): add lemma ring_char_ne_one (#2595)\nThis lemma is more useful than the extant `false_of_nonzero_of_char_one`\nwhen we are working with the function `ring_char` rather than the `char_p`\nProp.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "ring_char_ne_one", ["char_p"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}]}, {"timestamp": 1588658947, "sha": "91b39066", "message": "feat(data/polynomial): misc on derivatives of polynomials (#2596)\nCo-authored by: @alexjbest", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "def", "derivative_hom", ["polynomial"]], ["add", "def", "derivative_lhom", ["polynomial"]], ["add", "theorem", "derivative_neg", ["polynomial"]], ["add", "theorem", "derivative_smul", ["polynomial"]], ["add", "theorem", "derivative_sub", ["polynomial"]], ["add", "theorem", "is_coprime_of_is_root_of_eval_derivative_ne_zero", ["polynomial"]]]}]}, {"timestamp": 1588653732, "sha": "d6ddfd2f", "message": "feat(algebra/midpoint): define `midpoint`, prove basic properties (#2599)\nPart of #2214", "changes": [{"oldPath": null, "newPath": "src/algebra/midpoint.lean", "changes": [["add", "def", "midpoint", []], ["add", "theorem", "midpoint_add_add", []], ["add", "theorem", "midpoint_add_left", []], ["add", "theorem", "midpoint_add_right", []], ["add", "theorem", "midpoint_comm", []], ["add", "theorem", "midpoint_def", []], ["add", "theorem", "midpoint_eq_iff", []], ["add", "theorem", "midpoint_neg_neg", []], ["add", "theorem", "midpoint_self", []], ["add", "theorem", "midpoint_smul_smul", []], ["add", "theorem", "midpoint_sub_left", []], ["add", "theorem", "midpoint_sub_right", []], ["add", "theorem", "midpoint_sub_sub", []], ["add", "theorem", "midpoint_unique", []]]}]}, {"timestamp": 1588631249, "sha": "1c4b5ec9", "message": "feat(ring_theory/ideals): quotient map to residue field as ring hom (#2597)", "changes": [{"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "def", "residue", ["local_ring"]]]}]}, {"timestamp": 1588589849, "sha": "14aa1f7b", "message": "feat(combinatorics/composition): refactor compositions, split a list wrt a composition (#2554)\nRefactor `composition`, replacing in its definition a list of positive integers with a list of integers which are positive. This avoids going back and forth all the time between `nat` and `pnat`.\nAlso introduce the ability to split a list of length `n` with respect to a composition `c` of `n`, giving rise to a list of `c.length` sublists whose join is the original list.", "changes": [{"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": [["del", "def", "blocks", ["composition"]], ["mod", "theorem", "blocks_length", ["composition"]], ["del", "theorem", "blocks_pnat_length", ["composition"]], ["del", "theorem", "blocks_pos", ["composition"]], ["del", "theorem", "blocks_sum", ["composition"]], ["add", "theorem", "eq_ones_iff", ["composition"]], ["add", "theorem", "eq_single_iff", ["composition"]], ["mod", "def", "length", ["composition"]], ["add", "theorem", "monotone_size_up_to", ["composition"]], ["add", "theorem", "ne_ones_iff", ["composition"]], ["add", "theorem", "of_fn_blocks_fun", ["composition"]], ["add", "def", "ones", ["composition"]], ["add", "theorem", "ones_blocks", ["composition"]], ["add", "theorem", "ones_blocks_fun", ["composition"]], ["add", "theorem", "ones_embedding", ["composition"]], ["add", "theorem", "ones_length", ["composition"]], ["add", "theorem", "ones_size_up_to", ["composition"]], ["del", "theorem", "sigma_eq_iff_blocks_pnat_eq", ["composition"]], ["add", "def", "single", ["composition"]], ["add", "theorem", "single_blocks", ["composition"]], ["add", "theorem", "single_blocks_fun", ["composition"]], ["add", "theorem", "single_embedding", ["composition"]], ["add", "theorem", "single_length", ["composition"]], ["del", "theorem", "to_composition_as_set_blocks_pnat", ["composition"]], ["del", "def", "blocks_pnat", ["composition_as_set"]], ["del", "theorem", "blocks_pnat_length", ["composition_as_set"]], ["del", "theorem", "coe_blocks_pnat_eq_blocks", ["composition_as_set"]], ["del", "theorem", "to_composition_blocks_pnat", ["composition_as_set"]], ["add", "theorem", "join_split_wrt_composition", ["list"]], ["add", "theorem", "join_split_wrt_composition_aux", ["list"]], ["add", "theorem", "length_pos_of_mem_split_wrt_composition", ["list"]], ["add", "theorem", "length_split_wrt_composition", ["list"]], ["add", "theorem", "length_split_wrt_composition_aux", ["list"]], ["add", "theorem", "map_length_split_wrt_composition", ["list"]], ["add", "theorem", "map_length_split_wrt_composition_aux", ["list"]], ["add", "def", "split_wrt_composition", ["list"]], ["add", "def", "split_wrt_composition_aux", ["list"]], ["add", "theorem", "split_wrt_composition_aux_cons", ["list"]], ["add", "theorem", "split_wrt_composition_join", ["list"]], ["add", "theorem", "sum_take_map_length_split_wrt_composition", ["list"]]]}]}, {"timestamp": 1588570822, "sha": "70245f43", "message": "feat(algebra/big_operators): prod_comp (#2594)\nThis is a lemma that @jcommelin looks like he could have used in Chevalley Warning, and is probably useful elsewhere.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_comp", ["finset"]], ["add", "theorem", "sum_comp", ["finset"]]]}]}, {"timestamp": 1588508863, "sha": "08a17d62", "message": "chore(scripts): update nolints.txt (#2593)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1588494866, "sha": "a223bbb6", "message": "chore(*): switch to lean 3.10.0 (#2587)\nThere have been two changes in Lean 3.10 that have a significant effect on mathlib:\n - `rename'` has been moved to core. Therefore `rename'` has been removed.\n - Given a term `⇑f x`, the simplifier can now rewrite in both `f` and `x`. In many cases we had both `⇑f = ⇑f'` and `⇑f x = ⇑f' x` as simp lemmas; the latter is redundant now and has been removed (or just not marked simp anymore). The new and improved congruence lemmas are also used by `convert` and `congr`, these tactics have become more powerful as well.\nI've also sneaked in two related changes that I noticed while fixing the proofs affected by the changes above:\n - `@[to_additive, simp]` has been replaced by `@[simp, to_additive]` in the monoid localization file. The difference is that `@[to_additive, simp]` only marks the multiplicative lemma as simp.\n - `def prod_comm : α × β ≃ β × α` (etc.) is no longer marked `@[simp]`. Marking this kind of lemmas as simp causes the simplifier to unfold the definition of `prod_comm` (instead of just rewriting `α × β` to `β × α` in the `≃` simp relation). This has become a bigger issue now since the simplifier can rewrite the `f` in `⇑f x`.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "arrow_punit_equiv_punit", ["equiv"]], ["mod", "def", "empty_arrow_equiv_punit", ["equiv"]], ["mod", "def", "empty_prod", ["equiv"]], ["mod", "def", "empty_sum", ["equiv"]], ["add", "theorem", "empty_sum_apply_inr", ["equiv"]], ["mod", "def", "false_arrow_equiv_punit", ["equiv"]], ["mod", "def", "nat_sum_punit_equiv_nat", ["equiv"]], ["mod", "def", "option_equiv_sum_punit", ["equiv"]], ["add", "theorem", "option_equiv_sum_punit_none", ["equiv"]], ["add", "theorem", "option_equiv_sum_punit_some", ["equiv"]], ["mod", "def", "pempty_arrow_equiv_punit", ["equiv"]], ["mod", "def", "pempty_prod", ["equiv"]], ["mod", "def", "pempty_sum", ["equiv"]], ["add", "theorem", "pempty_sum_apply_inr", ["equiv"]], ["mod", "def", "prod_assoc", ["equiv"]], ["mod", "def", "prod_comm", ["equiv"]], ["add", "theorem", "prod_comm_apply", ["equiv"]], ["mod", "def", "prod_empty", ["equiv"]], ["mod", "def", "prod_pempty", ["equiv"]], ["mod", "def", "prod_punit", ["equiv"]], ["mod", "def", "punit_arrow_equiv", ["equiv"]], ["mod", "def", "punit_prod", ["equiv"]], ["mod", "def", "sum_assoc", ["equiv"]], ["mod", "def", "sum_comm", ["equiv"]], ["add", "theorem", "sum_comm_apply_inl", ["equiv"]], ["add", "theorem", "sum_comm_apply_inr", ["equiv"]], ["add", "theorem", "sum_comm_symm", ["equiv"]], ["mod", "def", "sum_empty", ["equiv"]], ["add", "theorem", "sum_empty_apply_inl", ["equiv"]], ["mod", "def", "sum_pempty", ["equiv"]], ["add", "theorem", "sum_pempty_apply_inl", ["equiv"]], ["del", "theorem", "symm_symm_apply", ["equiv"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp/pointwise.lean", "newPath": "src/data/finsupp/pointwise.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["del", "def", "after", ["list"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["del", "theorem", "refl_trans_apply", ["pequiv"]], ["del", "theorem", "symm_refl_apply", ["pequiv"]], ["del", "theorem", "symm_single_apply", ["pequiv"]], ["del", "theorem", "symm_symm_apply", ["pequiv"]], ["del", "theorem", "trans_refl_apply", ["pequiv"]]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["mod", "theorem", "comp_mul_equiv_symm_comap_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_localizations_symm_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_mul_equiv_eq", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_mul_equiv_eq_map", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_equiv_of_mul_equiv_eq_map_apply", ["submonoid", "localization_map"]], ["del", "theorem", "of_mul_equiv_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "of_mul_equiv_eq", ["submonoid", "localization_map"]], ["del", "theorem", "to_mul_equiv_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "to_mul_equiv_eq", ["submonoid", "localization_map"]], ["mod", "theorem", "to_mul_equiv_of_mul_equiv", ["submonoid", "localization_map"]], ["mod", "theorem", "to_mul_equiv_of_mul_equiv_of_mul_equiv", ["submonoid", "localization_map"]], ["mod", "theorem", "to_mul_equiv_of_mul_equiv_of_mul_equiv_apply", ["submonoid", "localization_map"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "symm_symm_apply", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "coe_to_add_monoid_hom", ["alg_hom"]], ["mod", "theorem", "coe_to_monoid_hom", ["alg_hom"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "theorem", "coeff_zero_eq_constant_coeff_apply", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_one", ["mv_power_series"]], ["mod", "theorem", "monomial_zero_eq_C_apply", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_C", ["power_series"]], ["mod", "theorem", "coeff_zero_X", ["power_series"]], ["mod", "theorem", "coeff_zero_eq_constant_coeff_apply", ["power_series"]], ["mod", "theorem", "coeff_zero_mul_X", ["power_series"]], ["mod", "theorem", "coeff_zero_one", ["power_series"]], ["mod", "def", "mk", ["power_series"]], ["mod", "theorem", "monomial_zero_eq_C_apply", ["power_series"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/rename.lean", "newPath": null, "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "symm_symm_apply", ["continuous_linear_equiv"]]]}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1588459107, "sha": "d1eae214", "message": "chore(build.yml): Don't build nolints branch (#2591)", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1588432945, "sha": "a99f9b55", "message": "refactor(algebra/big_operators): introduce notation for finset.prod and finset.sum (#2582)\nI have not gone through all of mathlib to use this notation everywhere. I think we can maybe transition naturally.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "card_eq_sum_ones", ["finset"]], ["mod", "theorem", "exists_le_of_sum_le", ["finset"]], ["mod", "theorem", "exists_ne_one_of_prod_ne_one", ["finset"]], ["mod", "theorem", "mul_sum", ["finset"]], ["mod", "theorem", "nonempty_of_prod_ne_one", ["finset"]], ["del", "theorem", "prod_Ico_eq_div", ["finset"]], ["add", "theorem", "prod_Ico_eq_mul_inv", ["finset"]], ["mod", "theorem", "prod_Ico_id_eq_fact", ["finset"]], ["mod", "theorem", "prod_attach", ["finset"]], ["mod", "theorem", "prod_const", ["finset"]], ["mod", "theorem", "prod_const_one", ["finset"]], ["mod", "theorem", "prod_empty", ["finset"]], ["mod", "theorem", "prod_eq_fold", ["finset"]], ["mod", "theorem", "prod_eq_one", ["finset"]], ["mod", "theorem", "prod_eq_zero", ["finset"]], ["mod", "theorem", "prod_eq_zero_iff", ["finset"]], ["mod", "theorem", "prod_filter_ne_one", ["finset"]], ["mod", "theorem", "prod_insert", ["finset"]], ["mod", "theorem", "prod_inv_distrib", ["finset"]], ["mod", "theorem", "prod_mul_distrib", ["finset"]], ["mod", "theorem", "prod_pos", ["finset"]], ["mod", "theorem", "prod_sdiff", ["finset"]], ["mod", "theorem", "prod_singleton", ["finset"]], ["mod", "theorem", "prod_subset", ["finset"]], ["mod", "theorem", "prod_union", ["finset"]], ["mod", "theorem", "single_le_sum", ["finset"]], ["mod", "theorem", "sum_eq_zero_iff_of_nonneg", ["finset"]], ["mod", "theorem", "sum_eq_zero_iff_of_nonpos", ["finset"]], ["mod", "theorem", "sum_le_sum", ["finset"]], ["mod", "theorem", "sum_le_sum_of_subset", ["finset"]], ["mod", "theorem", "sum_mul", ["finset"]], ["mod", "theorem", "sum_nonneg", ["finset"]], ["mod", "theorem", "sum_nonpos", ["finset"]], ["mod", "theorem", "sum_range_id", ["finset"]], ["add", "theorem", "sum_range_succ", ["finset"]], ["mod", "theorem", "sum_sub_distrib", ["finset"]]]}, {"oldPath": "src/algebra/category/Group/biproducts.lean", "newPath": "src/algebra/category/Group/biproducts.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1588422834, "sha": "1cc83e9c", "message": "chore(algebra/ordered_field): move inv_neg to field and prove for division ring (#2588)\n`neg_inv` this lemma with the equality swapped was already in the library, so maybe we should just get rid of this or `neg_inv`\n[Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/inv_neg/near/196042954)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "inv_neg", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["del", "theorem", "inv_neg", []]]}]}, {"timestamp": 1588412503, "sha": "b902f6e0", "message": "feat(*): several `@[simp]` lemmas (#2579)\nAlso add an explicit instance for `submodule.has_coe_to_sort`.\nThis way `rintro ⟨x, hx⟩` results in `(hx : x ∈ p)`.\nAlso fixes some timeouts introduced by #2363. See Zulip: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/partrec_code", "changes": [{"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "mk_eq_one", ["prod"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "mk_eq_zero", ["submodule"]]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_pmap.lean", "newPath": "src/linear_algebra/linear_pmap.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_comm", []], ["add", "theorem", "exists_exists_and_eq_and", []], ["add", "theorem", "exists_exists_eq_and", []]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": [["mod", "theorem", "{u", []]]}]}, {"timestamp": 1588412501, "sha": "06bae3e1", "message": "fix(data/int/basic): use has_coe_t to prevent looping (#2573)\nThe file `src/computability/partrec.lean` no longer opens in vscode because type-class search times out. This happens because we have the instance `has_coe ℤ α` which causes non-termination because coercions are chained transitively (`has_coe ℤ ℤ`, `has_coe ℤ ℤ`, ...). Even if the coercions would not apply to integers (and maybe avoid non-termination), it would still enumerate all `0,1,+,-` structures, of which there are unfortunately very many.\nThis PR therefore downgrades such instances to `has_coe_t` to prevent non-termination due to transitivity. It also adds a linter to prevent this kind of error in the future.", "changes": [{"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": [["mod", "theorem", "ite_cast", []]]}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": [["del", "def", "foo_instance", []]]}, {"oldPath": null, "newPath": "test/lint_coe_t.lean", "changes": [["add", "def", "a_to_quot", []], ["add", "def", "int_to_a", []]]}]}, {"timestamp": 1588412499, "sha": "9d57f682", "message": "feat(order/bounded_lattice): introduce `is_compl` predicate (#2569)\nAlso move `disjoint` from `data/set/lattice`", "changes": [{"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "comm", ["disjoint"]], ["del", "theorem", "eq_bot", ["disjoint"]], ["del", "theorem", "mono", ["disjoint"]], ["del", "theorem", "mono_left", ["disjoint"]], ["del", "theorem", "mono_right", ["disjoint"]], ["del", "theorem", "ne", ["disjoint"]], ["del", "theorem", "symm", ["disjoint"]], ["del", "def", "disjoint", []], ["del", "theorem", "disjoint_bot_left", []], ["del", "theorem", "disjoint_bot_right", []], ["del", "theorem", "disjoint_iff", []], ["del", "theorem", "disjoint_self", []]]}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "neg_eq", ["is_compl"]], ["add", "theorem", "is_compl_neg", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "comm", ["disjoint"]], ["add", "theorem", "eq_bot", ["disjoint"]], ["add", "theorem", "mono", ["disjoint"]], ["add", "theorem", "mono_left", ["disjoint"]], ["add", "theorem", "mono_right", ["disjoint"]], ["add", "theorem", "ne", ["disjoint"]], ["add", "theorem", "symm", ["disjoint"]], ["add", "def", "disjoint", []], ["add", "theorem", "disjoint_bot_left", []], ["add", "theorem", "disjoint_bot_right", []], ["add", "theorem", "disjoint_iff", []], ["add", "theorem", "disjoint_self", []], ["add", "theorem", "antimono", ["is_compl"]], ["add", "theorem", "inf_eq_bot", ["is_compl"]], ["add", "theorem", "inf_sup", ["is_compl"]], ["add", "theorem", "le_left_iff", ["is_compl"]], ["add", "theorem", "le_right_iff", ["is_compl"]], ["add", "theorem", "left_le_iff", ["is_compl"]], ["add", "theorem", "left_unique", ["is_compl"]], ["add", "theorem", "of_eq", ["is_compl"]], ["add", "theorem", "right_le_iff", ["is_compl"]], ["add", "theorem", "right_unique", ["is_compl"]], ["add", "theorem", "sup_eq_top", ["is_compl"]], ["add", "theorem", "sup_inf", ["is_compl"]], ["add", "theorem", "to_order_dual", ["is_compl"]], ["add", "structure", "is_compl", []], ["add", "theorem", "is_compl_bot_top", []], ["add", "theorem", "is_compl_top_bot", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "is_compl_principal", ["filter"]], ["mod", "theorem", "map_at_top_eq_of_gc", ["filter"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "eq_of_inf_eq_sup_eq", []], ["del", "theorem", "eq_of_sup_eq_inf_eq", []], ["add", "theorem", "le_of_inf_le_sup_le", []]]}]}, {"timestamp": 1588408270, "sha": "738bbae0", "message": "feat(algebra/group_ring_action): action on polynomials (#2586)", "changes": [{"oldPath": "src/algebra/group_ring_action.lean", "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "theorem", "coeff_smul'", ["polynomial"]], ["add", "theorem", "smul_C", ["polynomial"]], ["add", "theorem", "smul_X", ["polynomial"]]]}]}, {"timestamp": 1588399276, "sha": "d0a1d776", "message": "doc(tactic/rcases): mention the \"rfl\" pattern (#2585)\nEdited from @jcommelin's answer on Zulip here: https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/noob.20question%28s%29/near/184491982", "changes": [{"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}]}, {"timestamp": 1588368688, "sha": "eb383b14", "message": "chore(group_theory/perm): delete duplicate lemmas (#2584)\n`sum_univ_perm` is a special case of `sum_equiv`, so it's not necessary. \nI also moved `sum_equiv` into the `finset` namespace.", "changes": [{"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_equiv", ["finset"]], ["del", "theorem", "prod_equiv", []]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["del", "theorem", "prod_univ_perm", ["finset"]], ["del", "theorem", "sum_univ_perm", ["finset"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1588348317, "sha": "4daa7e8f", "message": "feat(algebra/lie_algebra): define simple Lie algebras and define classical Lie algebra, slₙ (#2567)\nThe changes here introduce a few important properties of Lie algebras and also begin providing definitions of the classical Lie algebras. The key changes are the following definitions:\n * `lie_algebra.is_abelian`\n * `lie_module.is_irreducible`\n * `lie_algebra.is_simple`\n * `lie_algebra.special_linear.sl`\nSome simple related proofs are also included such as:\n * `commutative_ring_iff_abelian_lie_ring`\n * `lie_algebra.special_linear.sl_non_abelian`", "changes": [{"oldPath": null, "newPath": "src/algebra/classical_lie_algebras.lean", "changes": [["add", "theorem", "matrix_trace_commutator_zero", ["lie_algebra"]], ["add", "def", "E", ["lie_algebra", "special_linear"]], ["add", "theorem", "E_apply_one", ["lie_algebra", "special_linear"]], ["add", "theorem", "E_apply_zero", ["lie_algebra", "special_linear"]], ["add", "theorem", "E_diag_zero", ["lie_algebra", "special_linear"]], ["add", "theorem", "E_trace_zero", ["lie_algebra", "special_linear"]], ["add", "def", "Eb", ["lie_algebra", "special_linear"]], ["add", "theorem", "Eb_val", ["lie_algebra", "special_linear"]], ["add", "def", "sl", ["lie_algebra", "special_linear"]], ["add", "theorem", "sl_bracket", ["lie_algebra", "special_linear"]], ["add", "theorem", "sl_non_abelian", ["lie_algebra", "special_linear"]]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "commutative_ring_iff_abelian_lie_ring", []], ["add", "theorem", "of_associative_ring_bracket", ["lie_ring"]], ["del", "def", "lie_subalgebra_lie_algebra", []], ["del", "def", "lie_subalgebra_lie_ring", []]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "exists_pair_of_one_lt_card", ["fintype"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "diag_apply", ["matrix"]], ["add", "theorem", "trace_diag", ["matrix"]]]}]}, {"timestamp": 1588337802, "sha": "6a2559a5", "message": "chore(algebra/group_with_zero): rename div_eq_inv_mul' to div_eq_inv_mul (#2583)\nThere are no occurrences of the name without ' in either core or mathlib\nso this change in name (from #2242) seems to have been unnecessary.", "changes": [{"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["del", "theorem", "div_eq_inv_mul'", []], ["add", "theorem", "div_eq_inv_mul", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}]}, {"timestamp": 1588327770, "sha": "ee488b27", "message": "fix(tactic/lint/basic): remove default argument for auto_decl and enable more linters (#2580)\nRun more linters on automatically-generated declarations. Quite a few linters should have been run on them, but I forgot about it because the `auto_decls` flag is optional and off by default. I've made it non-optional so that you don't forget about it when defining a linter.\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/simp.20linter.20and.20structure.20fields/near/195810856", "changes": [{"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": [["mod", "theorem", "forall₂_nil_left_iff", ["list"]], ["mod", "theorem", "forall₂_nil_right_iff", ["list"]]]}, {"oldPath": "src/tactic/lint/basic.lean", "newPath": "src/tactic/lint/basic.lean", "changes": []}, {"oldPath": "src/tactic/lint/misc.lean", "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": "src/tactic/lint/simp.lean", "newPath": "src/tactic/lint/simp.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1588318940, "sha": "67f3fdea", "message": "feat(algebra/group_ring_action) define group actions on rings (#2566)\nDefine group action on rings.\nRelated Zulip discussions: \n- https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.232566.20group.20actions.20on.20ring \n- https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mul_action", "changes": [{"oldPath": null, "newPath": "src/algebra/group_ring_action.lean", "changes": [["add", "def", "End", ["add_monoid"]], ["add", "def", "hom_add_monoid_hom", ["distrib_mul_action"]], ["add", "def", "to_add_equiv", ["distrib_mul_action"]], ["add", "def", "to_add_monoid_hom", ["distrib_mul_action"]], ["add", "def", "End", ["monoid"]], ["add", "def", "to_semiring_equiv", ["mul_semiring_action"]], ["add", "def", "to_semiring_hom", ["mul_semiring_action"]], ["add", "theorem", "smul_inv", []], ["add", "theorem", "smul_mul'", []], ["add", "theorem", "smul_pow", []]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}]}, {"timestamp": 1588312787, "sha": "74d24aba", "message": "feat(topology/instances/real_vector_space): `E →+ F` to `E →L[ℝ] F` (#2577)\nA continuous additive map between two vector spaces over `ℝ` is `ℝ`-linear.", "changes": [{"oldPath": null, "newPath": "src/topology/instances/real_vector_space.lean", "changes": [["add", "theorem", "coe_to_real_linear_map", ["add_monoid_hom"]], ["add", "theorem", "map_real_smul", ["add_monoid_hom"]], ["add", "def", "to_real_linear_map", ["add_monoid_hom"]]]}]}, {"timestamp": 1588308540, "sha": "d3140fbe", "message": "feat(data/mv_polynomial): lemmas on total_degree (#2575)\nThis is a small preparation for the Chevalley–Warning theorem.", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "eval_one", ["mv_polynomial"]], ["add", "theorem", "eval_pow", ["mv_polynomial"]], ["mod", "theorem", "total_degree_C", ["mv_polynomial"]], ["add", "theorem", "total_degree_X", ["mv_polynomial"]], ["add", "theorem", "total_degree_neg", ["mv_polynomial"]], ["mod", "theorem", "total_degree_one", ["mv_polynomial"]], ["add", "theorem", "total_degree_pow", ["mv_polynomial"]], ["add", "theorem", "total_degree_sub", ["mv_polynomial"]], ["mod", "theorem", "total_degree_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1588281046, "sha": "c568bb40", "message": "fix(scripts): stop updating mathlib-nightly repository (#2576)\nThe `gothub` tool that we've used to push the nightlies doesn't build at the moment. Now that we have `leanproject`, we no longer need the separate nightlies repository.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": null, "changes": []}, {"oldPath": null, "newPath": "scripts/update_branch.sh", "changes": []}]}, {"timestamp": 1588281044, "sha": "06adf7d1", "message": "chore(scripts): update nolints.txt (#2572)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1588270823, "sha": "caf93b74", "message": "feat(*): small additions that prepare for Chevalley-Warning (#2560)\nA number a small changes that prepare for #1564.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "mk0", ["is_unit"]], ["del", "theorem", "is_unit_iff_ne_zero", []]]}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_mul_sum", ["finset"]]]}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "mk0", ["is_unit"]], ["add", "theorem", "is_unit_iff_ne_zero", []], ["add", "theorem", "exists_iff_ne_zero", ["units"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "inter_univ", ["finset"]], ["add", "theorem", "univ_inter", ["finset"]], ["add", "theorem", "to_finset_univ", ["set"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_extend_by_one", ["fintype"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "image_range_order_of", []], ["add", "theorem", "image_range_card", ["is_cyclic"]], ["add", "theorem", "image_range_order_of", ["is_cyclic"]]]}]}, {"timestamp": 1588255641, "sha": "8fa8f175", "message": "refactor(tsum): use ∑' instead of ∑ as notation (#2571)\nAs discussed in: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/big.20ops/near/195821357\nThis is the result of\n```\ngit grep -l '∑' | grep -v \"mean_ineq\" | xargs sed -i \"s/∑/∑'/g\"\n```\nafter manually cleaning some occurences of `∑` in TeX strings. Probably `∑` has now also been changed in a lot of comments and docstrings, but my reasoning is that if the string \"tsum\" occurs in the file, then it doesn't do harm to write `∑'` instead of `∑` in the comments as well.", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_tsum_le_tsum_norm", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "tsum_geometric", ["ennreal"]], ["mod", "theorem", "tsum_geometric", []], ["mod", "theorem", "tsum_geometric_nnreal", []], ["mod", "theorem", "tsum_geometric_two'", []], ["mod", "theorem", "tsum_geometric_two", []]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": [["mod", "def", "cantor_function", ["cardinal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "measure_Union_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "theorem", "bind_apply", ["pmf"]], ["mod", "theorem", "tsum_coe", ["pmf"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "has_sum", ["summable"]], ["mod", "theorem", "has_sum_iff", ["summable"]], ["mod", "theorem", "tsum_add", []], ["mod", "theorem", "tsum_eq_has_sum", []], ["mod", "theorem", "tsum_eq_zero_add", []], ["mod", "theorem", "tsum_eq_zero_of_not_summable", []], ["mod", "theorem", "tsum_equiv", []], ["mod", "theorem", "tsum_fintype", []], ["mod", "theorem", "tsum_ite_eq", []], ["mod", "theorem", "tsum_le_tsum", []], ["mod", "theorem", "tsum_mul_left", []], ["mod", "theorem", "tsum_mul_right", []], ["mod", "theorem", "tsum_neg", []], ["mod", "theorem", "tsum_nonneg", []], ["mod", "theorem", "tsum_nonpos", []], ["mod", "theorem", "tsum_sub", []], ["mod", "theorem", "tsum_zero", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "coe_tsum", ["nnreal"]]]}]}, {"timestamp": 1588255639, "sha": "ee70afbe", "message": "doc(.github): remove pull-request template (#2568)\nMove the pull-request template to `CONTRIBUTING.md`. This reduces the boilerplate in the PR description that almost nobody reads anyhow.", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/CONTRIBUTING.md", "changes": []}]}, {"timestamp": 1588245814, "sha": "9c8bc7a5", "message": "fix(tactic/interactive): make `inhabit` work on quantified goals (#2570)\nThis didn't work before because of the `∀` in the goal:\n```lean\nlemma c {α} [nonempty α] : ∀ n : ℕ, ∃ b : α, n = n :=\nby inhabit α; intro; use default _; refl\n```", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "test/inhabit.lean", "changes": [["add", "theorem", "a", []], ["add", "theorem", "c", []]]}]}, {"timestamp": 1588230615, "sha": "b14a26ee", "message": "refactor(analysis/complex/exponential): split into three files in special_functions/ (#2565)\nThe file `analysis/complex/exponential.lean` was growing out of control (2500 lines) and was dealing with complex and real exponentials, trigonometric functions, and power functions. I split it into three files corresponding to these three topics, and put them instead in `analysis/special_functions/`, as it was not specifically complex.\nThis is purely a refactor, so absolutely no new material nor changed proof.\nRelated Zulip discussion: https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.232565.20exponential.20split", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/special_functions/exp_log.lean", "changes": [["add", "theorem", "continuous_exp", ["complex"]], ["add", "theorem", "deriv_exp", ["complex"]], ["add", "theorem", "differentiable_at_exp", ["complex"]], ["add", "theorem", "differentiable_exp", ["complex"]], ["add", "theorem", "has_deriv_at_exp", ["complex"]], ["add", "theorem", "iter_deriv_exp", ["complex"]], ["add", "theorem", "deriv_cexp", []], ["add", "theorem", "deriv_exp", []], ["add", "theorem", "deriv_log'", []], ["add", "theorem", "deriv_within_cexp", []], ["add", "theorem", "deriv_within_exp", []], ["add", "theorem", "deriv_within_log'", []], ["add", "theorem", "cexp", ["differentiable"]], ["add", "theorem", "exp", ["differentiable"]], ["add", "theorem", "log", ["differentiable"]], ["add", "theorem", "cexp", ["differentiable_at"]], ["add", "theorem", "exp", ["differentiable_at"]], ["add", "theorem", "log", ["differentiable_at"]], ["add", "theorem", "cexp", ["differentiable_on"]], ["add", "theorem", "exp", ["differentiable_on"]], ["add", "theorem", "log", ["differentiable_on"]], ["add", "theorem", "cexp", ["differentiable_within_at"]], ["add", "theorem", "exp", ["differentiable_within_at"]], ["add", "theorem", "log", ["differentiable_within_at"]], ["add", "theorem", "cexp", ["has_deriv_at"]], ["add", "theorem", "exp", ["has_deriv_at"]], ["add", "theorem", "log", ["has_deriv_at"]], ["add", "theorem", "cexp", ["has_deriv_within_at"]], ["add", "theorem", "exp", ["has_deriv_within_at"]], ["add", "theorem", "log", ["has_deriv_within_at"]], ["add", "theorem", "continuous_at_log", ["real"]], ["add", "theorem", "continuous_exp", ["real"]], ["add", "theorem", "continuous_log'", ["real"]], ["add", "theorem", "continuous_log", ["real"]], ["add", "theorem", "deriv_exp", ["real"]], ["add", "theorem", "differentiable_at_exp", ["real"]], ["add", "theorem", "differentiable_exp", ["real"]], ["add", "theorem", "exists_exp_eq_of_pos", ["real"]], ["add", "theorem", "exp_log", ["real"]], ["add", "theorem", "exp_log_eq_abs", ["real"]], ["add", "theorem", "has_deriv_at_exp", ["real"]], ["add", "theorem", "has_deriv_at_log", ["real"]], ["add", "theorem", "has_deriv_at_log_of_pos", ["real"]], ["add", "theorem", "iter_deriv_exp", ["real"]], ["add", "theorem", "log_abs", ["real"]], ["add", "theorem", "log_exp", ["real"]], ["add", "theorem", "log_le_log", ["real"]], ["add", "theorem", "log_lt_log", ["real"]], ["add", "theorem", "log_lt_log_iff", ["real"]], ["add", "theorem", "log_mul", ["real"]], ["add", "theorem", "log_neg", ["real"]], ["add", "theorem", "log_neg_eq_log", ["real"]], ["add", "theorem", "log_neg_iff", ["real"]], ["add", "theorem", "log_nonneg", ["real"]], ["add", "theorem", "log_nonpos", ["real"]], ["add", "theorem", "log_one", ["real"]], ["add", "theorem", "log_pos", ["real"]], ["add", "theorem", "log_pos_iff", ["real"]], ["add", "theorem", "log_zero", ["real"]], ["add", "theorem", "tendsto_exp_at_top", ["real"]], ["add", "theorem", "tendsto_exp_div_pow_at_top", ["real"]], ["add", "theorem", "tendsto_exp_neg_at_top_nhds_0", ["real"]], ["add", "theorem", "tendsto_log_one_zero", ["real"]], ["add", "theorem", "tendsto_pow_mul_exp_neg_at_top_nhds_0", ["real"]]]}, {"oldPath": null, "newPath": "src/analysis/special_functions/pow.lean", "changes": [["add", "theorem", "abs_cpow_inv_nat", ["complex"]], ["add", "theorem", "abs_cpow_real", ["complex"]], ["add", "theorem", "cpow_add", ["complex"]], ["add", "theorem", "cpow_def", ["complex"]], ["add", "theorem", "cpow_eq_pow", ["complex"]], ["add", "theorem", "cpow_eq_zero_iff", ["complex"]], ["add", "theorem", "cpow_int_cast", ["complex"]], ["add", "theorem", "cpow_mul", ["complex"]], ["add", "theorem", "cpow_nat_cast", ["complex"]], ["add", "theorem", "cpow_nat_inv_pow", ["complex"]], ["add", "theorem", "cpow_neg", ["complex"]], ["add", "theorem", "cpow_one", ["complex"]], ["add", "theorem", "cpow_zero", ["complex"]], ["add", "theorem", "of_real_cpow", ["complex"]], ["add", "theorem", "one_cpow", ["complex"]], ["add", "theorem", "zero_cpow", ["complex"]], ["add", "theorem", "nnrpow", ["filter", "tendsto"]], ["add", "theorem", "coe_rpow", ["nnreal"]], ["add", "theorem", "continuous_at_rpow", ["nnreal"]], ["add", "theorem", "mul_rpow", ["nnreal"]], ["add", "theorem", "one_le_rpow", ["nnreal"]], ["add", "theorem", "one_lt_rpow", ["nnreal"]], ["add", "theorem", "one_rpow", ["nnreal"]], ["add", "theorem", "pow_nat_rpow_nat_inv", ["nnreal"]], ["add", "theorem", "rpow_add", ["nnreal"]], ["add", "theorem", "rpow_eq_pow", ["nnreal"]], ["add", "theorem", "rpow_eq_zero_iff", ["nnreal"]], ["add", "theorem", "rpow_le_one", ["nnreal"]], ["add", "theorem", "rpow_le_rpow", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["nnreal"]], ["add", "theorem", "rpow_lt_one", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["nnreal"]], ["add", "theorem", "rpow_mul", ["nnreal"]], ["add", "theorem", "rpow_nat_cast", ["nnreal"]], ["add", "theorem", "rpow_nat_inv_pow_nat", ["nnreal"]], ["add", "theorem", "rpow_neg", ["nnreal"]], ["add", "theorem", "rpow_one", ["nnreal"]], ["add", "theorem", "rpow_zero", ["nnreal"]], ["add", "theorem", "zero_rpow", ["nnreal"]], ["add", "theorem", "abs_rpow_le_abs_rpow", ["real"]], ["add", "theorem", "continuous_at_rpow", ["real"]], ["add", "theorem", "continuous_at_rpow_of_ne_zero", ["real"]], ["add", "theorem", "continuous_at_rpow_of_pos", ["real"]], ["add", "theorem", "continuous_rpow", ["real"]], ["add", "theorem", "continuous_rpow_aux1", ["real"]], ["add", "theorem", "continuous_rpow_aux2", ["real"]], ["add", "theorem", "continuous_rpow_aux3", ["real"]], ["add", "theorem", "continuous_rpow_of_ne_zero", ["real"]], ["add", "theorem", "continuous_rpow_of_pos", ["real"]], ["add", "theorem", "continuous_sqrt", ["real"]], ["add", "theorem", "mul_rpow", ["real"]], ["add", "theorem", "one_le_rpow", ["real"]], ["add", "theorem", "one_lt_rpow", ["real"]], ["add", "theorem", "one_rpow", ["real"]], ["add", "theorem", "pow_nat_rpow_nat_inv", ["real"]], ["add", "theorem", "rpow_add", ["real"]], ["add", "theorem", "rpow_def", ["real"]], ["add", "theorem", "rpow_def_of_neg", ["real"]], ["add", "theorem", "rpow_def_of_nonneg", ["real"]], ["add", "theorem", "rpow_def_of_nonpos", ["real"]], ["add", "theorem", "rpow_def_of_pos", ["real"]], ["add", "theorem", "rpow_eq_pow", ["real"]], ["add", "theorem", "rpow_eq_zero_iff_of_nonneg", ["real"]], ["add", "theorem", "rpow_int_cast", ["real"]], ["add", "theorem", "rpow_le_one", ["real"]], ["add", "theorem", "rpow_le_rpow", ["real"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["real"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["real"]], ["add", "theorem", "rpow_lt_one", ["real"]], ["add", "theorem", "rpow_lt_rpow", ["real"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["real"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["real"]], ["add", "theorem", "rpow_mul", ["real"]], ["add", "theorem", "rpow_nat_cast", ["real"]], ["add", "theorem", "rpow_nat_inv_pow_nat", ["real"]], ["add", "theorem", "rpow_neg", ["real"]], ["add", "theorem", "rpow_nonneg_of_nonneg", ["real"]], ["add", "theorem", "rpow_one", ["real"]], ["add", "theorem", "rpow_pos_of_pos", ["real"]], ["add", "theorem", "rpow_zero", ["real"]], ["add", "theorem", "sqrt_eq_rpow", ["real"]], ["add", "theorem", "zero_rpow", ["real"]]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/special_functions/trigonometric.lean", "changes": [["del", "theorem", "abs_cpow_inv_nat", ["complex"]], ["del", "theorem", "abs_cpow_real", ["complex"]], ["del", "theorem", "continuous_exp", ["complex"]], ["del", "theorem", "cpow_add", ["complex"]], ["del", "theorem", "cpow_def", ["complex"]], ["del", "theorem", "cpow_eq_pow", ["complex"]], ["del", "theorem", "cpow_eq_zero_iff", ["complex"]], ["del", "theorem", "cpow_int_cast", ["complex"]], ["del", "theorem", "cpow_mul", ["complex"]], ["del", "theorem", "cpow_nat_cast", ["complex"]], ["del", "theorem", "cpow_nat_inv_pow", ["complex"]], ["del", "theorem", "cpow_neg", ["complex"]], ["del", "theorem", "cpow_one", ["complex"]], ["del", "theorem", "cpow_zero", ["complex"]], ["del", "theorem", "deriv_exp", ["complex"]], ["del", "theorem", "differentiable_at_exp", ["complex"]], ["del", "theorem", "differentiable_exp", ["complex"]], ["del", "theorem", "has_deriv_at_exp", ["complex"]], ["del", "theorem", "iter_deriv_exp", ["complex"]], ["del", "theorem", "of_real_cpow", ["complex"]], ["del", "theorem", "one_cpow", ["complex"]], ["del", "theorem", "zero_cpow", ["complex"]], ["del", "theorem", "deriv_cexp", []], ["del", "theorem", "deriv_exp", []], ["del", "theorem", "deriv_log'", []], ["del", "theorem", "deriv_within_cexp", []], ["del", "theorem", "deriv_within_exp", []], ["del", "theorem", "deriv_within_log'", []], ["del", "theorem", "cexp", ["differentiable"]], ["del", "theorem", "exp", ["differentiable"]], ["del", "theorem", "log", ["differentiable"]], ["del", "theorem", "cexp", ["differentiable_at"]], ["del", "theorem", "exp", ["differentiable_at"]], ["del", "theorem", "log", ["differentiable_at"]], ["del", "theorem", "cexp", ["differentiable_on"]], ["del", "theorem", "exp", ["differentiable_on"]], ["del", "theorem", "log", ["differentiable_on"]], ["del", "theorem", "cexp", ["differentiable_within_at"]], ["del", "theorem", "exp", ["differentiable_within_at"]], ["del", "theorem", "log", ["differentiable_within_at"]], ["del", "theorem", "nnrpow", ["filter", "tendsto"]], ["del", "theorem", "cexp", ["has_deriv_at"]], ["del", "theorem", "exp", ["has_deriv_at"]], ["del", "theorem", "log", ["has_deriv_at"]], ["del", "theorem", "rexp", ["has_deriv_at"]], ["del", "theorem", "cexp", ["has_deriv_within_at"]], ["del", "theorem", "exp", ["has_deriv_within_at"]], ["del", "theorem", "log", ["has_deriv_within_at"]], ["del", "theorem", "rexp", ["has_deriv_within_at"]], ["del", "theorem", "coe_rpow", ["nnreal"]], ["del", "theorem", "continuous_at_rpow", ["nnreal"]], ["del", "theorem", "mul_rpow", ["nnreal"]], ["del", "theorem", "one_le_rpow", ["nnreal"]], ["del", "theorem", "one_lt_rpow", ["nnreal"]], ["del", "theorem", "one_rpow", ["nnreal"]], ["del", "theorem", "pow_nat_rpow_nat_inv", ["nnreal"]], ["del", "theorem", "rpow_add", ["nnreal"]], ["del", "theorem", "rpow_eq_pow", ["nnreal"]], ["del", "theorem", "rpow_eq_zero_iff", ["nnreal"]], ["del", "theorem", "rpow_le_one", ["nnreal"]], ["del", "theorem", "rpow_le_rpow", ["nnreal"]], ["del", "theorem", "rpow_le_rpow_of_exponent_ge", ["nnreal"]], ["del", "theorem", "rpow_le_rpow_of_exponent_le", ["nnreal"]], ["del", "theorem", "rpow_lt_one", ["nnreal"]], ["del", "theorem", "rpow_lt_rpow", ["nnreal"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_gt", ["nnreal"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_lt", ["nnreal"]], ["del", "theorem", "rpow_mul", ["nnreal"]], ["del", "theorem", "rpow_nat_cast", ["nnreal"]], ["del", "theorem", "rpow_nat_inv_pow_nat", ["nnreal"]], ["del", "theorem", "rpow_neg", ["nnreal"]], ["del", "theorem", "rpow_one", ["nnreal"]], ["del", "theorem", "rpow_zero", ["nnreal"]], ["del", "theorem", "zero_rpow", ["nnreal"]], ["del", "theorem", "abs_rpow_le_abs_rpow", ["real"]], ["del", "theorem", "continuous_at_log", ["real"]], ["del", "theorem", "continuous_at_rpow", ["real"]], ["del", "theorem", "continuous_at_rpow_of_ne_zero", ["real"]], ["del", "theorem", "continuous_at_rpow_of_pos", ["real"]], ["del", "theorem", "continuous_exp", ["real"]], ["del", "theorem", "continuous_log'", ["real"]], ["del", "theorem", "continuous_log", ["real"]], ["del", "theorem", "continuous_rpow", ["real"]], ["del", "theorem", "continuous_rpow_aux1", ["real"]], ["del", "theorem", "continuous_rpow_aux2", ["real"]], ["del", "theorem", "continuous_rpow_aux3", ["real"]], ["del", "theorem", "continuous_rpow_of_ne_zero", ["real"]], ["del", "theorem", "continuous_rpow_of_pos", ["real"]], ["del", "theorem", "continuous_sqrt", ["real"]], ["del", "theorem", "deriv_exp", ["real"]], ["del", "theorem", "differentiable_at_exp", ["real"]], ["del", "theorem", "differentiable_exp", ["real"]], ["del", "theorem", "exists_exp_eq_of_pos", ["real"]], ["del", "theorem", "exp_log", ["real"]], ["del", "theorem", "exp_log_eq_abs", ["real"]], ["del", "theorem", "has_deriv_at_exp", ["real"]], ["del", "theorem", "has_deriv_at_log", ["real"]], ["del", "theorem", "has_deriv_at_log_of_pos", ["real"]], ["del", "theorem", "iter_deriv_exp", ["real"]], ["del", "theorem", "log_abs", ["real"]], ["del", "theorem", "log_exp", ["real"]], ["del", "theorem", "log_le_log", ["real"]], ["del", "theorem", "log_lt_log", ["real"]], ["del", "theorem", "log_lt_log_iff", ["real"]], ["del", "theorem", "log_mul", ["real"]], ["del", "theorem", "log_neg", ["real"]], ["del", "theorem", "log_neg_eq_log", ["real"]], ["del", "theorem", "log_neg_iff", ["real"]], ["del", "theorem", "log_nonneg", ["real"]], ["del", "theorem", "log_nonpos", ["real"]], ["del", "theorem", "log_one", ["real"]], ["del", "theorem", "log_pos", ["real"]], ["del", "theorem", "log_pos_iff", ["real"]], ["del", "theorem", "log_zero", ["real"]], ["del", "theorem", "mul_rpow", ["real"]], ["del", "theorem", "one_le_rpow", ["real"]], ["del", "theorem", "one_lt_rpow", ["real"]], ["del", "theorem", "one_rpow", ["real"]], ["del", "theorem", "pow_nat_rpow_nat_inv", ["real"]], ["del", "theorem", "rpow_add", ["real"]], ["del", "theorem", "rpow_def", ["real"]], ["del", "theorem", "rpow_def_of_neg", ["real"]], ["del", "theorem", "rpow_def_of_nonneg", ["real"]], ["del", "theorem", "rpow_def_of_nonpos", ["real"]], ["del", "theorem", "rpow_def_of_pos", ["real"]], ["del", "theorem", "rpow_eq_pow", ["real"]], ["del", "theorem", "rpow_eq_zero_iff_of_nonneg", ["real"]], ["del", "theorem", "rpow_int_cast", ["real"]], ["del", "theorem", "rpow_le_one", ["real"]], ["del", "theorem", "rpow_le_rpow", ["real"]], ["del", "theorem", "rpow_le_rpow_of_exponent_ge", ["real"]], ["del", "theorem", "rpow_le_rpow_of_exponent_le", ["real"]], ["del", "theorem", "rpow_lt_one", ["real"]], ["del", "theorem", "rpow_lt_rpow", ["real"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_gt", ["real"]], ["del", "theorem", "rpow_lt_rpow_of_exponent_lt", ["real"]], ["del", "theorem", "rpow_mul", ["real"]], ["del", "theorem", "rpow_nat_cast", ["real"]], ["del", "theorem", "rpow_nat_inv_pow_nat", ["real"]], ["del", "theorem", "rpow_neg", ["real"]], ["del", "theorem", "rpow_nonneg_of_nonneg", ["real"]], ["del", "theorem", "rpow_one", ["real"]], ["del", "theorem", "rpow_pos_of_pos", ["real"]], ["del", "theorem", "rpow_zero", ["real"]], ["del", "theorem", "sqrt_eq_rpow", ["real"]], ["del", "theorem", "tendsto_exp_at_top", ["real"]], ["del", "theorem", "tendsto_exp_div_pow_at_top", ["real"]], ["del", "theorem", "tendsto_exp_neg_at_top_nhds_0", ["real"]], ["del", "theorem", "tendsto_log_one_zero", ["real"]], ["del", "theorem", "tendsto_pow_mul_exp_neg_at_top_nhds_0", ["real"]], ["del", "theorem", "zero_rpow", ["real"]]]}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}, {"oldPath": "test/simp_command.lean", "newPath": "test/simp_command.lean", "changes": []}]}, {"timestamp": 1588181179, "sha": "e6491de7", "message": "chore(data/equiv/ring): make ring_aut reducible (#2563)\nThis makes the coercion to fun work. This is the same approach as we used for `perm` and it worked okay for `perm`.\nRelated Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/ring_aut.20coerce.20to.20function", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["mod", "def", "ring_aut", []]]}]}, {"timestamp": 1588176776, "sha": "8490c545", "message": "refactor(analysis/complex/exponential): define log x = log |x| for x < 0 (#2564)\nPreviously we had `log x = 0` for `x < 0`. This PR changes it to `log x = log (-x)`, to make sure that the formulas `log (xy) = log x + log y` and `log' = 1/x` are true for all nonzero variables.\nAlso, add a few simp lemmas on the differentiability properties of `log` to make sure that the following works:\n```lean\nexample (x : ℝ) (h : x ≠ 0) : deriv (λ x, x * (log x - 1)) x = log x :=\nby simp [h]\n```\nRelated Zulip discussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/definition.20of.20real.20log", "changes": [{"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "log_of_real_re", ["complex"]], ["add", "theorem", "deriv_log'", []], ["add", "theorem", "deriv_within_log'", []], ["add", "theorem", "log", ["differentiable"]], ["add", "theorem", "log", ["differentiable_at"]], ["add", "theorem", "log", ["differentiable_on"]], ["add", "theorem", "log", ["differentiable_within_at"]], ["add", "theorem", "log", ["has_deriv_at"]], ["add", "theorem", "log", ["has_deriv_within_at"]], ["mod", "theorem", "exp_log", ["real"]], ["add", "theorem", "exp_log_eq_abs", ["real"]], ["mod", "theorem", "has_deriv_at_log", ["real"]], ["add", "theorem", "has_deriv_at_log_of_pos", ["real"]], ["add", "theorem", "log_abs", ["real"]], ["mod", "theorem", "log_le_log", ["real"]], ["mod", "theorem", "log_mul", ["real"]], ["add", "theorem", "log_neg_eq_log", ["real"]], ["mod", "theorem", "log_nonpos", ["real"]], ["mod", "theorem", "log_pos", ["real"]], ["mod", "theorem", "log_pos_iff", ["real"]], ["mod", "theorem", "rpow_def_of_neg", ["real"]]]}, {"oldPath": "test/differentiable.lean", "newPath": "test/differentiable.lean", "changes": []}]}, {"timestamp": 1588167177, "sha": "45800696", "message": "feat(field_theory/subfield): is_subfield.inter and is_subfield.Inter (#2562)\nProve that intersection of subfields is subfield.", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}]}, {"timestamp": 1588156364, "sha": "84f8b395", "message": "chore(data/nat/basic): move `iterate_inj` to `injective.iterate` (#2561)\nAlso add versions for `surjective` and `bijective`", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "iterate", ["function", "bijective"]], ["add", "theorem", "iterate", ["function", "injective"]], ["add", "theorem", "iterate", ["function", "surjective"]], ["add", "theorem", "iterate_ind", ["nat"]], ["del", "theorem", "iterate_inj", ["nat"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}]}, {"timestamp": 1588146195, "sha": "f8fe5968", "message": "chore(algebra/*): missing `simp`/`inj` lemmas (#2557)\nSometimes I have a specialized `ext` lemma for `A →+ B` that uses structure of `A` (e.g., `A = monoid_algebra α R`) and want to apply it to `A →+* B` or `A →ₐ[R] B`. These `coe_*_inj` lemmas make it easier.\nAlso add missing `simp` lemmas for bundled multiplication and rename `pow_of_add` and `gpow_of_add` to `of_add_smul` and `of_add_gsmul`, respectively.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_mul_left", ["add_monoid_hom"]], ["add", "theorem", "mul_right_apply", ["add_monoid_hom"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["del", "theorem", "gpow_of_add", []], ["add", "theorem", "mnat_monoid_hom_eq", []], ["add", "theorem", "mnat_monoid_hom_ext", []], ["add", "theorem", "of_add_gsmul", []], ["add", "theorem", "of_add_smul", []], ["del", "theorem", "pow_of_add", []], ["add", "theorem", "powers_hom_apply", []], ["add", "theorem", "powers_hom_symm_apply", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["del", "theorem", "coe_add_monoid_hom'", []], ["mod", "theorem", "coe_add_monoid_hom", []], ["del", "theorem", "coe_monoid_hom'", []], ["mod", "theorem", "coe_monoid_hom", []], ["add", "theorem", "coe_add_monoid_hom_inj", ["ring_hom"]], ["add", "theorem", "coe_monoid_hom_inj", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_add_monoid_hom_inj", ["alg_hom"]], ["add", "theorem", "coe_fn_inj", ["alg_hom"]], ["add", "theorem", "coe_monoid_hom_inj", ["alg_hom"]], ["add", "theorem", "coe_ring_hom_inj", ["alg_hom"]], ["add", "theorem", "coe_to_add_monoid_hom", ["alg_hom"]]]}]}, {"timestamp": 1588139066, "sha": "cb3a017f", "message": "chore(category_theory): remove `[𝒞 : category.{v₁} C] / include 𝒞` (#2556)\nIt is no longer necessary in Lean 3.9.0, thanks to\nhttps://github.com/leanprover-community/lean/commit/01063857bb6814374156433e8cbc0c94a9483f52", "changes": [{"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/functorial.lean", "newPath": "src/category_theory/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/hom_functor.lean", "newPath": "src/category_theory/hom_functor.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism_classes.lean", "newPath": "src/category_theory/isomorphism_classes.lean", "changes": []}, {"oldPath": "src/category_theory/limits/concrete_category.lean", "newPath": "src/category_theory/limits/concrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/strong_epi.lean", "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/products/bifunctor.lean", "newPath": "src/category_theory/products/bifunctor.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/reflect_isomorphisms.lean", "newPath": "src/category_theory/reflect_isomorphisms.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": []}, {"oldPath": "src/category_theory/sums/associator.lean", "newPath": "src/category_theory/sums/associator.lean", "changes": []}, {"oldPath": "src/category_theory/sums/basic.lean", "newPath": "src/category_theory/sums/basic.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1588134862, "sha": "ba9fc4d7", "message": "doc(install/*): remove outdated youtube links (#2559)\nFixes #2558.", "changes": [{"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1588115004, "sha": "94ff59ad", "message": "chore(scripts): update nolints.txt (#2555)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1588103872, "sha": "d12db89a", "message": "chore(category): rename to control (#2516)\nThis is parallel to https://github.com/leanprover-community/lean/pull/202 for community Lean (now merged).\nIt seems the changes are actually completely independent; this compiles against current community Lean, and that PR. (I'm surprised, but I guess it's just that everything is in the root namespace, and in `init/`.)\nThis PR anticipates then renaming `category_theory/` to `category/`.", "changes": [{"oldPath": "src/category/traversable/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category/applicative.lean", "newPath": "src/control/applicative.lean", "changes": []}, {"oldPath": "src/category/basic.lean", "newPath": "src/control/basic.lean", "changes": []}, {"oldPath": "src/category/bifunctor.lean", "newPath": "src/control/bifunctor.lean", "changes": []}, {"oldPath": "src/category/bitraversable/basic.lean", "newPath": "src/control/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/control/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category/bitraversable/lemmas.lean", "newPath": "src/control/bitraversable/lemmas.lean", "changes": []}, {"oldPath": "src/category/equiv_functor.lean", "newPath": "src/control/equiv_functor.lean", "changes": []}, {"oldPath": "src/category/equiv_functor/instances.lean", "newPath": "src/control/equiv_functor/instances.lean", "changes": []}, {"oldPath": "src/category/fold.lean", "newPath": "src/control/fold.lean", "changes": []}, {"oldPath": "src/category/functor.lean", "newPath": "src/control/functor.lean", "changes": []}, {"oldPath": "src/category/monad/basic.lean", "newPath": "src/control/monad/basic.lean", "changes": []}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/control/monad/cont.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/control/monad/writer.lean", "changes": []}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/control/traversable/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/control/traversable/default.lean", "changes": []}, {"oldPath": "src/category/traversable/derive.lean", "newPath": "src/control/traversable/derive.lean", "changes": []}, {"oldPath": "src/category/traversable/equiv.lean", "newPath": "src/control/traversable/equiv.lean", "changes": []}, {"oldPath": "src/category/traversable/instances.lean", "newPath": "src/control/traversable/instances.lean", "changes": []}, {"oldPath": "src/category/traversable/lemmas.lean", "newPath": "src/control/traversable/lemmas.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/data/dlist/instances.lean", "newPath": "src/data/dlist/instances.lean", "changes": []}, {"oldPath": "src/data/equiv/functor.lean", "newPath": "src/data/equiv/functor.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/lazy_list2.lean", "newPath": "src/data/lazy_list2.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/tactic/converter/old_conv.lean", "newPath": "src/tactic/converter/old_conv.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}, {"oldPath": "test/traversable.lean", "newPath": "test/traversable.lean", "changes": []}]}, {"timestamp": 1588103870, "sha": "c435b1cb", "message": "feat(analysis/calculus/inverse): Inverse function theorem (#2228)\nRef #1849", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "def'", ["asymptotics", "is_o"]], ["add", "theorem", "right_is_O_add", ["asymptotics", "is_o"]], ["add", "theorem", "right_is_O_sub", ["asymptotics", "is_o"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "has_fderiv_at_equiv", ["has_deriv_at"]], ["add", "theorem", "of_local_left_inverse", ["has_deriv_at"]], ["add", "theorem", "has_strict_fderiv_at_equiv", ["has_strict_deriv_at"]], ["add", "theorem", "of_local_left_inverse", ["has_strict_deriv_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "of_local_left_inverse", ["has_fderiv_at"]], ["add", "theorem", "is_O_sub_rev", ["has_fderiv_at_filter"]], ["del", "theorem", "comp", ["has_strict_fderiv_at"]], ["del", "theorem", "continuous_at", ["has_strict_fderiv_at"]], ["del", "theorem", "differentiable_at", ["has_strict_fderiv_at"]], ["del", "theorem", "has_fderiv_at", ["has_strict_fderiv_at"]], ["add", "theorem", "is_O_sub_rev", ["has_strict_fderiv_at"]], ["add", "theorem", "of_local_left_inverse", ["has_strict_fderiv_at"]], ["del", "theorem", "prod", ["has_strict_fderiv_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/inverse.lean", "changes": [["add", "theorem", "closed_ball_subset_target", ["approximates_linear_on"]], ["add", "def", "inverse_approx_map", ["approximates_linear_on"]], ["add", "theorem", "inverse_approx_map_contracts_on", ["approximates_linear_on"]], ["add", "theorem", "inverse_approx_map_dist_self", ["approximates_linear_on"]], ["add", "theorem", "inverse_approx_map_dist_self_le", ["approximates_linear_on"]], ["add", "theorem", "inverse_approx_map_fixed_iff", ["approximates_linear_on"]], ["add", "theorem", "inverse_approx_map_maps_to", ["approximates_linear_on"]], ["add", "theorem", "inverse_approx_map_sub", ["approximates_linear_on"]], ["add", "theorem", "inverse_continuous_on", ["approximates_linear_on"]], ["add", "theorem", "lipschitz_sub", ["approximates_linear_on"]], ["add", "theorem", "mono_num", ["approximates_linear_on"]], ["add", "theorem", "mono_set", ["approximates_linear_on"]], ["add", "theorem", "surj_on_closed_ball", ["approximates_linear_on"]], ["add", "def", "to_local_equiv", ["approximates_linear_on"]], ["add", "def", "to_local_homeomorph", ["approximates_linear_on"]], ["add", "theorem", "to_local_homeomorph_source", ["approximates_linear_on"]], ["add", "theorem", "to_local_homeomorph_target", ["approximates_linear_on"]], ["add", "theorem", "to_local_homeomorph_to_fun", ["approximates_linear_on"]], ["add", "def", "approximates_linear_on", []], ["add", "def", "local_inverse", ["has_strict_deriv_at"]], ["add", "theorem", "to_local_inverse", ["has_strict_deriv_at"]], ["add", "theorem", "to_local_left_inverse", ["has_strict_deriv_at"]], ["add", "theorem", "approximates_deriv_on_nhds", ["has_strict_fderiv_at"]], ["add", "theorem", "approximates_deriv_on_open_nhds", ["has_strict_fderiv_at"]], ["add", "theorem", "eventually_left_inverse", ["has_strict_fderiv_at"]], ["add", "theorem", "eventually_right_inverse", ["has_strict_fderiv_at"]], ["add", "theorem", "image_mem_to_local_homeomorph_target", ["has_strict_fderiv_at"]], ["add", "def", "local_inverse", ["has_strict_fderiv_at"]], ["add", "theorem", "local_inverse_apply_image", ["has_strict_fderiv_at"]], ["add", "theorem", "local_inverse_continuous_at", ["has_strict_fderiv_at"]], ["add", "theorem", "mem_to_local_homeomorph_source", ["has_strict_fderiv_at"]], ["add", "def", "to_local_homeomorph", ["has_strict_fderiv_at"]], ["add", "theorem", "to_local_homeomorph_to_fun", ["has_strict_fderiv_at"]], ["add", "theorem", "to_local_inverse", ["has_strict_fderiv_at"]], ["add", "theorem", "to_local_left_inverse", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "has_deriv_at_log", ["real"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "is_O_comp", ["continuous_linear_equiv"]], ["add", "theorem", "is_O_comp_rev", ["continuous_linear_equiv"]], ["add", "theorem", "is_O_sub", ["continuous_linear_equiv"]], ["add", "theorem", "is_O_sub_rev", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "inv_fun_tendsto", ["local_homeomorph"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}]}, {"timestamp": 1588096470, "sha": "3c02800d", "message": "chore(data/dfinsupp): use more precise `decidable` requirement (#2535)\nRemoved `decidable_zero_symm` and replaced all `[Π i, decidable_pred (eq (0 : β i))]` with `[Π i (x : β i), decidable (x ≠ 0)]`. This should work better with `open_locale classical` because now the lemmas and definitions don't assume that `[Π i (x : β i), decidable (x ≠ 0)]` comes from `decidable_zero_symm`.", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["del", "def", "decidable_zero_symm", []], ["mod", "theorem", "eq_mk_support", ["dfinsupp"]], ["mod", "theorem", "map_range_def", ["dfinsupp"]], ["mod", "def", "prod", ["dfinsupp"]], ["mod", "theorem", "prod_add_index", ["dfinsupp"]], ["mod", "theorem", "prod_neg_index", ["dfinsupp"]], ["mod", "theorem", "prod_single_index", ["dfinsupp"]], ["mod", "theorem", "prod_subtype_domain_index", ["dfinsupp"]], ["mod", "theorem", "prod_zero_index", ["dfinsupp"]], ["mod", "theorem", "single_apply", ["dfinsupp"]], ["mod", "theorem", "smul_apply", ["dfinsupp"]], ["mod", "theorem", "sub_apply", ["dfinsupp"]], ["mod", "theorem", "subtype_domain_add", ["dfinsupp"]], ["mod", "theorem", "subtype_domain_neg", ["dfinsupp"]], ["mod", "theorem", "subtype_domain_sub", ["dfinsupp"]], ["mod", "def", "sum", ["dfinsupp"]], ["mod", "theorem", "sum_add", ["dfinsupp"]], ["mod", "theorem", "sum_neg", ["dfinsupp"]], ["mod", "theorem", "sum_sub_index", ["dfinsupp"]], ["mod", "theorem", "sum_zero", ["dfinsupp"]], ["mod", "theorem", "support_add", ["dfinsupp"]], ["mod", "theorem", "support_mk_subset", ["dfinsupp"]], ["mod", "theorem", "support_neg", ["dfinsupp"]], ["mod", "def", "to_has_scalar", ["dfinsupp"]], ["mod", "def", "to_module", ["dfinsupp"]], ["mod", "def", "zip_with", ["dfinsupp"]], ["mod", "def", "dfinsupp", []]]}]}, {"timestamp": 1588086138, "sha": "f6c93723", "message": "feat(data/fin): add some lemmas about coercions (#2522)\nTwo of these lemmas allow norm_cast to work with inequalities\ninvolving fin values converted to ℕ. The rest are for simplifying\nexpressions where coercions are used to convert from ℕ to fin, in\ncases where an inequality means those coercions do not in fact change\nthe value.\nThere are very few lemmas relating to coercions from ℕ to fin in\nmathlib at present; the lemma of_nat_eq_coe (and val_add on which it\ndepends, and a few similarly trivial lemmas alongside val_add) is\nmoved from data.zmod.basic to fin.basic for use in proving the other\nlemmas, while the nat lemma add_mod is moved to data.nat.basic for use\nin the proof of of_nat_eq_coe, and mul_mod is moved alongside it as\nsuggested in review. These lemmas were found useful in formalising\nsolutions to an olympiad problem, see\n,\nand seem more generally relevant than to just that particular problem.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_coe_eq_self", ["fin"]], ["add", "theorem", "coe_coe_of_lt", ["fin"]], ["add", "theorem", "coe_fin_le", ["fin"]], ["add", "theorem", "coe_fin_lt", ["fin"]], ["add", "theorem", "coe_val_eq_self", ["fin"]], ["add", "theorem", "coe_val_of_lt", ["fin"]], ["add", "theorem", "of_nat_eq_coe", ["fin"]], ["add", "theorem", "one_val", ["fin"]], ["add", "theorem", "val_add", ["fin"]], ["add", "theorem", "val_mul", ["fin"]], ["add", "theorem", "zero_val", ["fin"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_mod", ["nat"]], ["add", "theorem", "mul_mod", ["nat"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["del", "theorem", "add_mod", ["nat"]], ["del", "theorem", "mul_mod", ["nat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["del", "theorem", "of_nat_eq_coe", ["fin"]], ["del", "theorem", "one_val", ["fin"]], ["del", "theorem", "val_add", ["fin"]], ["del", "theorem", "val_mul", ["fin"]], ["del", "theorem", "zero_val", ["fin"]]]}]}, {"timestamp": 1588075695, "sha": "f5679628", "message": "feat(data/complex/basic): inv_I and div_I (#2550)", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "div_I", ["complex"]], ["add", "theorem", "inv_I", ["complex"]]]}]}, {"timestamp": 1588075693, "sha": "9c818865", "message": "fix(tactic/doc_commands): clean up copy_doc_string command (#2543)\n#2471 added a command for copying a doc string from one decl to another. This PR:\n* documents this command\n* extends it to copy to a list of decls\n* moves `add_doc_string` from root to the `tactic` namespace", "changes": [{"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/nth_rewrite/default.lean", "newPath": "src/tactic/nth_rewrite/default.lean", "changes": []}]}, {"timestamp": 1588056855, "sha": "ae06db33", "message": "feat(category_theory/concrete): make constructing morphisms easier (#2502)\nPreviously, if you wrote:\n```lean\nexample (R : CommMon.{u}) : R ⟶ R :=\n{ to_fun := λ x, _,\n map_one' := sorry,\n map_mul' := sorry, }\n```\nyou were told the expected type was `↥(bundled.map comm_monoid.to_monoid R)`, which is not particularly reassuring unless you understand the details of how we've set up concrete categories.\nIf you called `dsimp`, this got better, just giving `R.α`. This still isn't ideal, as we prefer to talk about the underlying type of a bundled object via the coercion, not the structure projection.\nAfter this PR, which provides a slightly different mechanism for constructing \"induced\" categories from bundled categories, the expected type is exactly what you might have hoped for: `↥R`.\nThere seems to be one place where we used to get away with writing `𝟙 _` and now have to write `𝟙 A`, but otherwise there appear to be no ill-effects of this change.\n(For follow-up, I think I can entirely get rid of our `local attribute [reducible]` work-arounds when setting up concrete categories, and in fact construct most of the instances in `@[derive]` handlers, but these will be separate PRs.)", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["mod", "def", "CommRing", []], ["mod", "def", "CommSemiRing", []], ["mod", "def", "Ring", []]]}, {"oldPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["mod", "def", "CommGroup", []], ["mod", "def", "Group", []]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["mod", "def", "CommMon", []]]}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": [["add", "def", "map", ["category_theory", "bundled_hom"]], ["add", "def", "map_hom", ["category_theory", "bundled_hom"]]]}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1588005288, "sha": "fd3afb44", "message": "chore(ring_theory/algebra): move instances about complex to get rid of dependency (#2549)\nPreviously `ring_theory.algebra` imported the complex numbers. This PR moves some instances in order to get rid of that dependency.", "changes": [{"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/complex/module.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1587997855, "sha": "948d0fff", "message": "chore(topology/algebra/module): don't use unbundled homs for `algebra` instance (#2545)\nDefine special `algebra.of_semimodule` and `algebra.of_semimodule'`\nconstructors instead.\nref. #2534", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "of_semimodule'", ["algebra"]], ["add", "def", "of_semimodule", ["algebra"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "mul_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1587966079, "sha": "2fc9b158", "message": "chore(data/real/*): use bundled homs to prove `coe_sum` etc (#2533)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "map_list_prod", ["ring_hom"]], ["add", "theorem", "map_list_sum", ["ring_hom"]], ["add", "theorem", "map_multiset_prod", ["ring_hom"]], ["add", "theorem", "map_multiset_sum", ["ring_hom"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_of_nnreal_hom", ["ennreal"]], ["add", "def", "of_nnreal_hom", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_to_real_hom", ["nnreal"]], ["add", "def", "to_real_hom", ["nnreal"]]]}]}, {"timestamp": 1587938287, "sha": "134c5a52", "message": "chore(scripts): update nolints.txt (#2548)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587934069, "sha": "039c5a6d", "message": "chore(ring_theory/adjoin_root): drop `is_ring_hom` instance (#2546)\nref #2534", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1587927970, "sha": "942b795c", "message": "doc(field_theory/subfield): don't mention unbundled homs in the comment (#2544)\nref #2534", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}]}, {"timestamp": 1587909591, "sha": "fa13d160", "message": "chore(scripts): update nolints.txt (#2542)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587902676, "sha": "30ae5ba2", "message": "chore(scripts): update nolints.txt (#2541)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587902674, "sha": "74b96471", "message": "feat(measure_theory/measure_space): pigeonhole principle in a measure space (#2538)\nref #2272", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "exists_nonempty_inter_of_volume_univ_lt_sum_volume", ["measure_theory"]], ["add", "theorem", "exists_nonempty_inter_of_volume_univ_lt_tsum_volume", ["measure_theory"]], ["add", "theorem", "sum_volume_le_volume_univ", ["measure_theory"]], ["add", "theorem", "tsum_volume_le_volume_univ", ["measure_theory"]]]}]}, {"timestamp": 1587893370, "sha": "c170ce3a", "message": "chore(data/finset): add `coe_map`, `coe_image_subset_range`, and `coe_map_subset_range` (#2530)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "coe_image_subset_range", ["finset"]], ["add", "theorem", "coe_map", ["finset"]], ["add", "theorem", "coe_map_subset_range", ["finset"]]]}]}, {"timestamp": 1587893368, "sha": "40e97d37", "message": "feat(topology/algebra/module): ker, range, cod_restrict, subtype_val, coprod (#2525)\nAlso move `smul_right` to `general_ring` and define some\nmaps/equivalences useful for the inverse/implicit function theorem.", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "coe_mk", ["units"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "def", "equiv_of_inverse", ["continuous_linear_equiv"]], ["add", "theorem", "equiv_of_inverse_apply", ["continuous_linear_equiv"]], ["add", "def", "equiv_of_right_inverse", ["continuous_linear_equiv"]], ["add", "theorem", "equiv_of_right_inverse_symm_apply", ["continuous_linear_equiv"]], ["add", "theorem", "ext₁", ["continuous_linear_equiv"]], ["add", "theorem", "fst_equiv_of_right_inverse", ["continuous_linear_equiv"]], ["add", "theorem", "snd_equiv_of_right_inverse", ["continuous_linear_equiv"]], ["add", "theorem", "symm_equiv_of_inverse", ["continuous_linear_equiv"]], ["add", "def", "units_equiv_aut", ["continuous_linear_equiv"]], ["add", "theorem", "units_equiv_aut_apply", ["continuous_linear_equiv"]], ["add", "theorem", "units_equiv_aut_apply_symm", ["continuous_linear_equiv"]], ["add", "theorem", "units_equiv_aut_symm_apply", ["continuous_linear_equiv"]], ["add", "theorem", "apply_ker", ["continuous_linear_map"]], ["add", "def", "cod_restrict", ["continuous_linear_map"]], ["add", "theorem", "coe_cod_restrict", ["continuous_linear_map"]], ["add", "theorem", "coe_cod_restrict_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_coprod", ["continuous_linear_map"]], ["add", "theorem", "coe_prod_map'", ["continuous_linear_map"]], ["add", "theorem", "coe_proj_ker_of_right_inverse_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_subtype_val", ["continuous_linear_map"]], ["add", "def", "coprod", ["continuous_linear_map"]], ["add", "theorem", "coprod_apply", ["continuous_linear_map"]], ["add", "theorem", "is_closed_ker", ["continuous_linear_map"]], ["add", "def", "ker", ["continuous_linear_map"]], ["add", "theorem", "ker_coe", ["continuous_linear_map"]], ["add", "theorem", "mem_ker", ["continuous_linear_map"]], ["add", "theorem", "mem_range", ["continuous_linear_map"]], ["del", "theorem", "prod_map_apply", ["continuous_linear_map"]], ["add", "def", "proj_ker_of_right_inverse", ["continuous_linear_map"]], ["add", "theorem", "proj_ker_of_right_inverse_apply_idem", ["continuous_linear_map"]], ["add", "theorem", "proj_ker_of_right_inverse_comp_inv", ["continuous_linear_map"]], ["add", "def", "range", ["continuous_linear_map"]], ["add", "theorem", "range_coe", ["continuous_linear_map"]], ["add", "theorem", "smul_right_comp", ["continuous_linear_map"]], ["add", "def", "subtype_val", ["continuous_linear_map"]], ["add", "theorem", "subtype_val_apply", ["continuous_linear_map"]]]}]}, {"timestamp": 1587893366, "sha": "11ccc1b5", "message": "feat(analysis/calculus/deriv): define `has_strict_deriv_at` (#2524)\nAlso make more proofs explicitly use their `has_fderiv*` counterparts\nand mark some lemmas in `fderiv` as `protected`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv", ["continuous_linear_map"]], ["add", "theorem", "deriv_within", ["continuous_linear_map"]], ["add", "theorem", "has_deriv_at", ["continuous_linear_map"]], ["add", "theorem", "has_deriv_at_filter", ["continuous_linear_map"]], ["add", "theorem", "has_deriv_within_at", ["continuous_linear_map"]], ["add", "theorem", "has_strict_deriv_at", ["continuous_linear_map"]], ["del", "theorem", "has_deriv_at_inv_one", []], ["add", "theorem", "has_deriv_at", ["has_fderiv_at"]], ["add", "theorem", "has_deriv_at_filter", ["has_fderiv_at_filter"]], ["add", "theorem", "has_deriv_within_at", ["has_fderiv_within_at"]], ["add", "theorem", "add", ["has_strict_deriv_at"]], ["add", "theorem", "comp", ["has_strict_deriv_at"]], ["add", "theorem", "has_deriv_at", ["has_strict_deriv_at"]], ["add", "theorem", "mul", ["has_strict_deriv_at"]], ["add", "theorem", "neg", ["has_strict_deriv_at"]], ["add", "theorem", "scomp", ["has_strict_deriv_at"]], ["add", "theorem", "smul", ["has_strict_deriv_at"]], ["add", "theorem", "sub", ["has_strict_deriv_at"]], ["add", "def", "has_strict_deriv_at", []], ["add", "theorem", "has_strict_deriv_at_const", []], ["add", "theorem", "has_strict_deriv_at_fpow", []], ["add", "theorem", "has_strict_deriv_at_id", []], ["add", "theorem", "has_strict_deriv_at_inv", []], ["add", "theorem", "has_strict_deriv_at_pow", []], ["add", "theorem", "has_strict_deriv_at", ["has_strict_fderiv_at"]], ["add", "theorem", "has_strict_fderiv_at_iff_has_strict_deriv_at", []], ["del", "theorem", "deriv", ["is_linear_map"]], ["del", "theorem", "deriv_within", ["is_linear_map"]], ["del", "theorem", "differentiable", ["is_linear_map"]], ["del", "theorem", "differentiable_at", ["is_linear_map"]], ["del", "theorem", "differentiable_on", ["is_linear_map"]], ["del", "theorem", "differentiable_within_at", ["is_linear_map"]], ["del", "theorem", "has_deriv_at", ["is_linear_map"]], ["del", "theorem", "has_deriv_at_filter", ["is_linear_map"]], ["del", "theorem", "has_deriv_within_at", ["is_linear_map"]], ["add", "theorem", "deriv", ["linear_map"]], ["add", "theorem", "deriv_within", ["linear_map"]], ["add", "theorem", "has_deriv_at", ["linear_map"]], ["add", "theorem", "has_deriv_at_filter", ["linear_map"]], ["add", "theorem", "has_deriv_within_at", ["linear_map"]], ["add", "theorem", "has_strict_deriv_at", ["linear_map"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["del", "theorem", "fst", ["differentiable"]], ["del", "theorem", "snd", ["differentiable"]], ["del", "theorem", "fst", ["differentiable_at"]], ["del", "theorem", "prod_map", ["differentiable_at"]], ["del", "theorem", "snd", ["differentiable_at"]], ["del", "theorem", "fst", ["differentiable_on"]], ["del", "theorem", "snd", ["differentiable_on"]], ["del", "theorem", "fst", ["differentiable_within_at"]], ["del", "theorem", "snd", ["differentiable_within_at"]], ["del", "theorem", "fst", ["has_fderiv_at"]], ["del", "theorem", "prod_map", ["has_fderiv_at"]], ["del", "theorem", "snd", ["has_fderiv_at"]], ["del", "theorem", "fst", ["has_fderiv_at_filter"]], ["del", "theorem", "snd", ["has_fderiv_at_filter"]], ["del", "theorem", "fst", ["has_fderiv_within_at"]], ["del", "theorem", "snd", ["has_fderiv_within_at"]], ["add", "theorem", "congr_of_mem_sets", ["has_strict_fderiv_at"]], ["del", "theorem", "fst", ["has_strict_fderiv_at"]], ["del", "theorem", "prod_map", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "to_continuous_linear_map₁", ["linear_map"]], ["add", "theorem", "to_continuous_linear_map₁_apply", ["linear_map"]], ["add", "theorem", "to_continuous_linear_map₁_coe", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1587883588, "sha": "21b72922", "message": "feat(data/nat/basic): add `iterate_one` and `iterate_mul` (#2540)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "iterate_cancel", ["nat"]], ["add", "theorem", "iterate_mul", ["nat"]], ["add", "theorem", "iterate_one", ["nat"]], ["mod", "theorem", "iterate₂", ["nat"]]]}]}, {"timestamp": 1587883586, "sha": "21d8e0af", "message": "chore(data/real/ennreal): +2 simple lemmas (#2539)\nExtracted from #2311", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "exists_nat_mul_gt", ["ennreal"]]]}]}, {"timestamp": 1587883584, "sha": "401d3216", "message": "feat(analysis/normed_space/basic): add continuous_at.div (#2532)\nWhen proving a particular function continuous at a particular point,\nlemmas such as continuous_at.mul, continuous_at.add and\ncontinuous_at.comp can be used to build this up from continuity\nproperties of simpler functions. It's convenient to have something\nsimilar for division as well.\nThis adds continuous_at.div for normed fields, as suggested by Yury.\nIf mathlib gets topological (semi)fields in future, this should become\na result for those.", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "div", ["continuous_at"]]]}]}, {"timestamp": 1587883582, "sha": "1182e910", "message": "refactor(tactic/nth_rewrite): enable rewriting hypotheses, add docstrings (#2471)\nThis PR\n* renames the interactive tactic `perform_nth_rewrite` to `nth_rewrite`\n* enables rewriting at hypotheses, instead of only the target\n* renames the directory and namespace `rewrite_all` to `nth_rewrite`\n* adds a bunch of docstrings", "changes": [{"oldPath": null, "newPath": "src/meta/expr_lens.lean", "changes": [["add", "def", "to_string", ["expr_lens", "dir"]], ["add", "inductive", "dir", ["expr_lens"]]]}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/nth_rewrite/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/nth_rewrite/congr.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/nth_rewrite/default.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/congr.lean", "newPath": null, "changes": []}, {"oldPath": "src/tactic/rewrite_all/default.lean", "newPath": null, "changes": []}, {"oldPath": null, "newPath": "test/expr_lens.lean", "changes": []}, {"oldPath": "test/rewrite_all.lean", "newPath": "test/nth_rewrite.lean", "changes": []}]}, {"timestamp": 1587873370, "sha": "c34add7a", "message": "chore(scripts): update nolints.txt (#2537)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587873368, "sha": "bda206ab", "message": "chore(data/option,order/bounded_lattice): 2 simple lemmas about `get_or_else` (#2531)\nI'm going to use these lemmas for `polynomial.nat_degree`. I don't want to PR\nthis change to `data/polynomial` because this would create merge conflicts later.", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "get_or_else_of_ne_none", ["option"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "bot_lt_coe", ["with_bot"]], ["mod", "theorem", "bot_lt_some", ["with_bot"]], ["add", "theorem", "le_coe_get_or_else", ["with_bot"]]]}]}, {"timestamp": 1587873366, "sha": "ee6f20a6", "message": "chore(algebra/module): use bundled homs for `smul_sum` and `sum_smul` (#2529)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "def", "flip", ["monoid_hom"]], ["add", "theorem", "flip_apply", ["monoid_hom"]], ["add", "theorem", "inv_apply", ["monoid_hom"]], ["add", "theorem", "mul_apply", ["monoid_hom"]], ["add", "theorem", "one_apply", ["monoid_hom"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "def", "smul_add_hom", []], ["add", "theorem", "smul_add_hom_apply", []]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "def", "const_smul_hom", []], ["add", "theorem", "const_smul_hom_apply", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1587855807, "sha": "5219ca1a", "message": "doc(data/nat/modeq): add module docstring and lemma (#2528)\nI add a simple docstrong and also a lemma which I found useful for a codewars kata.", "changes": [{"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "modeq_iff_dvd'", ["nat", "modeq"]]]}]}, {"timestamp": 1587855805, "sha": "ba4dc1a4", "message": "doc(algebra/order_functions): add docstring and lemma (#2526)\nI added a missing lemma, and then figured that while I was here I should add a docstring", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "lt_abs", []]]}]}, {"timestamp": 1587844553, "sha": "a8ae8e8e", "message": "feat(data/bool): add de Morgan's laws (#2523)\nI will go away with my tail between my legs if someone can show me that our esteemed mathematics library already contains de Morgan's laws for booleans. I also added a docstring. I can't lint the file because it's so high up in the import heirarchy, but I also added a docstring for the two instances.", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "bnot_band", ["bool"]], ["add", "theorem", "bnot_bor", ["bool"]], ["add", "theorem", "bnot_inj", ["bool"]]]}]}, {"timestamp": 1587844551, "sha": "94fd41a2", "message": "refactor(data/padics/*): use [fact p.prime] to assume that p is prime (#2519)", "changes": [{"oldPath": "docs/theories/padics.md", "newPath": "docs/theories/padics.md", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": [["mod", "theorem", "padic_polynomial_dist", []]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["mod", "def", "padic_int", []]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["mod", "theorem", "finite_int_prime_iff", ["padic_val_rat"]], ["mod", "theorem", "padic_val_rat_def", []]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "rat_dense'", ["padic"]], ["mod", "theorem", "rat_dense", ["padic"]], ["mod", "def", "padic", []], ["mod", "theorem", "eq_of_norm_add_lt_left", ["padic_norm_e"]], ["mod", "theorem", "eq_of_norm_add_lt_right", ["padic_norm_e"]], ["mod", "def", "padic_norm_e", []], ["mod", "def", "padic_seq", []]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}]}, {"timestamp": 1587840185, "sha": "632c4baa", "message": "feat(continued_fractions) add equivalence of convergents computations (#2459)\n### What\nAdd lemmas showing that the two methods for computing the convergents of a continued fraction (recurrence relation vs direct evaluation) coincide. A high-level overview on how the proof works is given in the header of the file. \n### Why\nOne wants to be able to relate both computations. The recurrence relation can be faster to compute, the direct evaluation is more intuitive and might be easier for some proofs.\n### How\nThe proof of the equivalence is by induction. To make the induction work, one needs to \"squash\" a sequence into a shorter one while maintaining the value of the convergents computations. Most lemmas in this commit deal with this squashing operation.", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": [["mod", "def", "continuants", ["generalized_continued_fraction"]], ["mod", "def", "continuants_aux", ["generalized_continued_fraction"]], ["mod", "def", "convergents'", ["generalized_continued_fraction"]], ["mod", "def", "convergents'_aux", ["generalized_continued_fraction"]], ["mod", "def", "convergents", ["generalized_continued_fraction"]], ["mod", "def", "denominators", ["generalized_continued_fraction"]], ["mod", "def", "next_continuants", ["generalized_continued_fraction"]], ["mod", "def", "next_denominator", ["generalized_continued_fraction"]], ["mod", "def", "next_numerator", ["generalized_continued_fraction"]], ["mod", "def", "numerators", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "newPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "changes": [["mod", "theorem", "continuants_aux_recurrence", ["generalized_continued_fraction"]], ["mod", "theorem", "continuants_recurrence", ["generalized_continued_fraction"]], ["mod", "theorem", "continuants_recurrence_aux", ["generalized_continued_fraction"]], ["mod", "theorem", "denominators_recurrence", ["generalized_continued_fraction"]], ["mod", "theorem", "numerators_recurrence", ["generalized_continued_fraction"]]]}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/convergents_equiv.lean", "changes": [["add", "theorem", "convergents_eq_convergents'", ["continued_fraction"]], ["add", "theorem", "continuants_aux_eq_continuants_aux_squash_gcf_of_le", ["generalized_continued_fraction"]], ["add", "theorem", "convergents_eq_convergents'", ["generalized_continued_fraction"]], ["add", "def", "squash_gcf", ["generalized_continued_fraction"]], ["add", "theorem", "squash_gcf_eq_self_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "squash_gcf_nth_of_lt", ["generalized_continued_fraction"]], ["add", "def", "squash_seq", ["generalized_continued_fraction"]], ["add", "theorem", "squash_seq_eq_self_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "squash_seq_nth_of_lt", ["generalized_continued_fraction"]], ["add", "theorem", "squash_seq_nth_of_not_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "squash_seq_succ_n_tail_eq_squash_seq_tail_n", ["generalized_continued_fraction"]], ["add", "theorem", "succ_nth_convergent'_eq_squash_gcf_nth_convergent'", ["generalized_continued_fraction"]], ["add", "theorem", "succ_nth_convergent_eq_squash_gcf_nth_convergent", ["generalized_continued_fraction"]], ["add", "theorem", "succ_succ_nth_convergent'_aux_eq_succ_nth_convergent'_aux_squash_seq", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/default.lean", "newPath": "src/algebra/continued_fractions/default.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/terminated_stable.lean", "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": [["mod", "theorem", "convergents'_aux_stable_of_terminated", ["generalized_continued_fraction"]], ["mod", "theorem", "convergents'_aux_stable_step_of_terminated", ["generalized_continued_fraction"]]]}, {"oldPath": "src/algebra/continued_fractions/translations.lean", "newPath": "src/algebra/continued_fractions/translations.lean", "changes": [["mod", "theorem", "obtain_conts_a_of_num", ["generalized_continued_fraction"]], ["mod", "theorem", "obtain_conts_b_of_denom", ["generalized_continued_fraction"]], ["mod", "theorem", "zeroth_convergent'_aux_eq_zero", ["generalized_continued_fraction"]]]}]}, {"timestamp": 1587808694, "sha": "d9327e43", "message": "refactor(geometry/manifold/real_instances): use fact instead of lt_class (#2521)\nTo define a manifold with boundary structure on the interval `[x, y]`, typeclass inference needs to know that `x < y`. This used to be provided by the introduction of a dummy class `lt_class`. The new mechanism based on `fact` makes it possible to remove this dummy class.", "changes": [{"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": [["mod", "def", "Icc_left_chart", []], ["mod", "def", "Icc_right_chart", []], ["del", "def", "lt_class", []]]}]}, {"timestamp": 1587808692, "sha": "2b955327", "message": "refactor(*): use [fact p.prime] for frobenius and perfect_closure (#2518)\nThis also removes the dependency of `algebra.char_p` on `data.padics.padic_norm`, which was only there to make `nat.prime` a class.\nI also used this opportunity to rename all alphas and betas to `K` and `L` in the perfect closure file.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "theorem", "frobenius_inj", []], ["mod", "theorem", "iterate_map_frobenius", ["monoid_hom"]], ["mod", "theorem", "iterate_map_frobenius", ["ring_hom"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["mod", "theorem", "coe_frobenius_equiv", []], ["mod", "theorem", "coe_frobenius_equiv_symm", []], ["mod", "theorem", "eq_pth_root_iff", []], ["mod", "def", "frobenius_equiv", []], ["mod", "theorem", "frobenius_pth_root", []], ["mod", "theorem", "map_iterate_pth_root", ["monoid_hom"]], ["mod", "theorem", "map_pth_root", ["monoid_hom"]], ["mod", "theorem", "eq_iff'", ["perfect_closure"]], ["mod", "theorem", "eq_iff", ["perfect_closure"]], ["mod", "theorem", "eq_pth_root", ["perfect_closure"]], ["mod", "theorem", "frobenius_mk", ["perfect_closure"]], ["mod", "theorem", "induction_on", ["perfect_closure"]], ["mod", "theorem", "int_cast", ["perfect_closure"]], ["mod", "def", "lift", ["perfect_closure"]], ["mod", "def", "lift_on", ["perfect_closure"]], ["mod", "theorem", "lift_on_mk", ["perfect_closure"]], ["mod", "def", "mk", ["perfect_closure"]], ["mod", "theorem", "mk_add_mk", ["perfect_closure"]], ["mod", "theorem", "mk_mul_mk", ["perfect_closure"]], ["mod", "theorem", "mk_zero", ["perfect_closure"]], ["mod", "theorem", "nat_cast", ["perfect_closure"]], ["mod", "theorem", "nat_cast_eq_iff", ["perfect_closure"]], ["mod", "theorem", "neg_mk", ["perfect_closure"]], ["mod", "def", "of", ["perfect_closure"]], ["mod", "theorem", "of_apply", ["perfect_closure"]], ["mod", "theorem", "one_def", ["perfect_closure"]], ["mod", "theorem", "quot_mk_eq_mk", ["perfect_closure"]], ["mod", "theorem", "sound", ["perfect_closure", "r"]], ["mod", "inductive", "r", ["perfect_closure"]], ["mod", "theorem", "zero_def", ["perfect_closure"]], ["mod", "def", "perfect_closure", []], ["mod", "def", "pth_root", []], ["mod", "theorem", "pth_root_eq_iff", []], ["mod", "theorem", "pth_root_frobenius", []], ["mod", "theorem", "map_iterate_pth_root", ["ring_hom"]], ["mod", "theorem", "map_pth_root", ["ring_hom"]]]}]}, {"timestamp": 1587804668, "sha": "f192f2fe", "message": "chore(*): move quadratic_reciprocity to number_theory/ (#2520)\nI've never really understood why we put all these cool theorems under the data/ directory, so I suggest moving them out of there, and into the place where thy \"belong\".", "changes": [{"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/number_theory/quadratic_reciprocity.lean", "changes": []}]}, {"timestamp": 1587793350, "sha": "3c8584d6", "message": "feat(order/filter/bases): add `exists_iff` and `forall_iff` (#2507)", "changes": [{"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "exists_iff", ["filter", "has_basis"]], ["add", "theorem", "forall_iff", ["filter", "has_basis"]]]}]}, {"timestamp": 1587793348, "sha": "199f6fe4", "message": "refactor(tactic/suggest): call library_search and suggest with additional lemmas, better lemma caching (#2429)\nThis PR is mainly a refactoring of suggest. The changes include:\n* Removed `(discharger : tactic unit := done)` from `library_search`, `suggest`, `suggest_scripts` `suggest_core`, `suggest_core'`, `apply_declaration` and `apply_and_solve` and replaced by `(opt : by_elim_opt := { })` from `solve_by_elim`.\n* Replaced all occurences of `discharger` by `opt`, `opt.discharger`, or `..opt`.\n* inserted a do block into the interactive `library_search` function.\n* Added `asms ← mk_assumption_set no_dflt hs attr_names`, to the interactive `suggest` and `library_search` functions. This is so `library_search` and `suggest` don't rebuild the assumption set each time a lemma is applied.\n* Added several inputs for the interactive `library_search` and `suggest` function. These parameters were lifted from the interactive `solve_by_elim` function and allow the user to control how `solve_by_elim` is utilized by `library_search` and `suggest`.\n* Removed the `message` function (redundant code.)\n* Removed several unnecessary `g ← instantiate_mvars g`, lines.", "changes": [{"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": [["add", "def", "map_from_sum", ["test", "library_search"]]]}]}, {"timestamp": 1587787866, "sha": "06f8c556", "message": "chore(scripts): update nolints.txt (#2517)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587781376, "sha": "22d89c40", "message": "chore(scripts): update nolints.txt (#2515)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587771424, "sha": "e918f726", "message": "refactor(zmod): merge `zmodp` into `zmod`, use `[fact p.prime]` for tc search (#2511)\nThis PR introduces the class `fact P := P` for `P : Prop`, which is a way to inject elementary propositions into the type class system. This desing is inspired by @cipher1024 's https://gist.github.com/cipher1024/9bd785a75384a4870b331714ec86ad6f#file-zmod_redesign-lean.\nWe use this to endow `zmod p` with a `field` instance under the assumption `[fact p.prime]`.\nAs a consequence, the type `zmodp` is no longer needed, which removes a lot of duplicate code.\nBesides that, we redefine `zmod n`, so that `n` is a natural number instead of a *positive* natural number, and `zmod 0` is now definitionally the integers.\nTo preserve computational properties, `zmod n` is not defined as quotient type, but rather as `int` and `fin n`, depending on whether `n` is `0` or `(k+1)`.\nThe rest of this PR is adapting the library to the new definitions (most notably quadratic reciprocity and Lagrange's four squares theorem).\nFuture work: Refactor the padics to use `[fact p.prime]` instead of making `nat.prime` a class in those files. This will address #1601 and #1648. Once that is done, we can clean up the mess in `char_p` (where the imports are really tangled) and finally get some movement in #1564.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "theorem", "char_is_prime", ["char_p"]], ["add", "theorem", "char_is_prime_of_pos", ["char_p"]], ["add", "theorem", "false_of_nonzero_of_char_one", ["char_p"]], ["add", "theorem", "int_cast_eq_zero_iff", ["char_p"]], ["del", "def", "cast_hom", ["zmod"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "dvd_sub_mod", ["nat"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "add_mod", ["nat"]], ["add", "theorem", "mul_mod", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["del", "theorem", "card_units_eq_totient", ["zmod"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "def", "add_comm_semigroup", ["fin"]], ["add", "def", "comm_ring", ["fin"]], ["add", "def", "comm_semigroup", ["fin"]], ["add", "def", "has_neg", ["fin"]], ["add", "theorem", "of_nat_eq_coe", ["fin"]], ["add", "theorem", "one_val", ["fin"]], ["add", "theorem", "val_add", ["fin"]], ["add", "theorem", "val_mul", ["fin"]], ["add", "theorem", "zero_val", ["fin"]], ["del", "theorem", "add_val", ["zmod"]], ["add", "theorem", "card", ["zmod"]], ["add", "theorem", "card_units_eq_totient", ["zmod"]], ["del", "theorem", "card_zmod", ["zmod"]], ["mod", "def", "cast", ["zmod"]], ["add", "theorem", "cast_add", ["zmod"]], ["add", "def", "cast_hom", ["zmod"]], ["add", "theorem", "cast_hom_apply", ["zmod"]], ["add", "theorem", "cast_id", ["zmod"]], ["add", "theorem", "cast_int_cast", ["zmod"]], ["del", "theorem", "cast_mod_int'", ["zmod"]], ["del", "theorem", "cast_mod_int", ["zmod"]], ["del", "theorem", "cast_mod_nat'", ["zmod"]], ["mod", "theorem", "cast_mod_nat", ["zmod"]], ["add", "theorem", "cast_mul", ["zmod"]], ["del", "theorem", "cast_mul_left_val_cast", ["zmod"]], ["del", "theorem", "cast_mul_right_val_cast", ["zmod"]], ["mod", "theorem", "cast_nat_abs_val_min_abs", ["zmod"]], ["add", "theorem", "cast_nat_cast", ["zmod"]], ["add", "theorem", "cast_one", ["zmod"]], ["add", "theorem", "cast_self'", ["zmod"]], ["add", "theorem", "cast_self", ["zmod"]], ["del", "theorem", "cast_self_eq_zero", ["zmod"]], ["mod", "theorem", "cast_unit_of_coprime", ["zmod"]], ["mod", "theorem", "cast_val", ["zmod"]], ["del", "theorem", "cast_val_cast_of_dvd", ["zmod"]], ["add", "theorem", "cast_zero", ["zmod"]], ["add", "theorem", "coe_mul_inv_eq_one", ["zmod"]], ["del", "theorem", "coe_val_cast_int", ["zmod"]], ["mod", "theorem", "coe_val_min_abs", ["zmod"]], ["del", "theorem", "eq_iff_modeq_int'", ["zmod"]], ["del", "theorem", "eq_iff_modeq_int", ["zmod"]], ["del", "theorem", "eq_iff_modeq_nat'", ["zmod"]], ["mod", "theorem", "eq_iff_modeq_nat", ["zmod"]], ["del", "theorem", "eq_zero_iff_dvd_int", ["zmod"]], ["del", "theorem", "eq_zero_iff_dvd_nat", ["zmod"]], ["add", "theorem", "int_cast_surjective", ["zmod"]], ["add", "def", "inv", ["zmod"]], ["add", "theorem", "inv_coe_unit", ["zmod"]], ["add", "theorem", "inv_mul_of_unit", ["zmod"]], ["add", "theorem", "inv_zero", ["zmod"]], ["mod", "theorem", "le_div_two_iff_lt_neg", ["zmod"]], ["del", "theorem", "mk_eq_cast", ["zmod"]], ["add", "theorem", "mul_inv_eq_gcd", ["zmod"]], ["add", "theorem", "mul_inv_of_unit", ["zmod"]], ["del", "theorem", "mul_val", ["zmod"]], ["mod", "theorem", "nat_abs_val_min_abs_le", ["zmod"]], ["mod", "theorem", "nat_abs_val_min_abs_neg", ["zmod"]], ["add", "theorem", "nat_cast_surjective", ["zmod"]], ["add", "theorem", "nat_cast_val", ["zmod"]], ["mod", "theorem", "ne_neg_self", ["zmod"]], ["mod", "theorem", "neg_eq_self_mod_two", ["zmod"]], ["add", "theorem", "neg_one_ne_one", ["zmod"]], ["mod", "theorem", "neg_val'", ["zmod"]], ["mod", "theorem", "neg_val", ["zmod"]], ["del", "theorem", "one_val", ["zmod"]], ["add", "theorem", "prime_ne_zero", ["zmod"]], ["mod", "def", "unit_of_coprime", ["zmod"]], ["mod", "def", "units_equiv_coprime", ["zmod"]], ["add", "def", "val", ["zmod"]], ["add", "theorem", "val_add", ["zmod"]], ["del", "theorem", "val_cast_int", ["zmod"]], ["mod", "theorem", "val_cast_nat", ["zmod"]], ["mod", "theorem", "val_cast_of_lt", ["zmod"]], ["add", "theorem", "val_coe_unit_coprime", ["zmod"]], ["mod", "theorem", "val_eq_ite_val_min_abs", ["zmod"]], ["add", "theorem", "val_eq_zero", ["zmod"]], ["add", "theorem", "val_injective", ["zmod"]], ["add", "theorem", "val_lt", ["zmod"]], ["mod", "def", "val_min_abs", ["zmod"]], ["add", "theorem", "val_min_abs_def_pos", ["zmod"]], ["add", "theorem", "val_min_abs_def_zero", ["zmod"]], ["mod", "theorem", "val_min_abs_eq_zero", ["zmod"]], ["mod", "theorem", "val_min_abs_zero", ["zmod"]], ["add", "theorem", "val_mul", ["zmod"]], ["add", "theorem", "val_one", ["zmod"]], ["add", "theorem", "val_one_eq_one_mod", ["zmod"]], ["add", "theorem", "val_zero", ["zmod"]], ["del", "theorem", "zero_val", ["zmod"]], ["mod", "def", "zmod", []], ["del", "theorem", "add_val", ["zmodp"]], ["del", "theorem", "card_zmodp", ["zmodp"]], ["del", "theorem", "cast_mod_int", ["zmodp"]], ["del", "theorem", "cast_mod_nat", ["zmodp"]], ["del", "theorem", "cast_nat_abs_val_min_abs", ["zmodp"]], ["del", "theorem", "cast_self_eq_zero:", ["zmodp"]], ["del", "theorem", "cast_val", ["zmodp"]], ["del", "theorem", "coe_val_cast_int", ["zmodp"]], ["del", "theorem", "coe_val_min_abs", ["zmodp"]], ["del", "theorem", "eq_iff_modeq_int", ["zmodp"]], ["del", "theorem", "eq_iff_modeq_nat", ["zmodp"]], ["del", "theorem", "eq_zero_iff_dvd_int", ["zmodp"]], ["del", "theorem", "eq_zero_iff_dvd_nat", ["zmodp"]], ["del", "theorem", "le_div_two_iff_lt_neg", ["zmodp"]], ["del", "theorem", "mk_eq_cast", ["zmodp"]], ["del", "theorem", "mul_inv_eq_gcd", ["zmodp"]], ["del", "theorem", "mul_val", ["zmodp"]], ["del", "theorem", "nat_abs_val_min_abs_le", ["zmodp"]], ["del", "theorem", "nat_abs_val_min_abs_neg", ["zmodp"]], ["del", "theorem", "ne_neg_self", ["zmodp"]], ["del", "theorem", "one_val", ["zmodp"]], ["del", "theorem", "prime_ne_zero", ["zmodp"]], ["del", "theorem", "val_cast_int", ["zmodp"]], ["del", "theorem", "val_cast_nat", ["zmodp"]], ["del", "theorem", "val_cast_of_lt", ["zmodp"]], ["del", "theorem", "val_eq_ite_val_min_abs", ["zmodp"]], ["del", "def", "val_min_abs", ["zmodp"]], ["del", "theorem", "val_min_abs_eq_zero", ["zmodp"]], ["del", "theorem", "val_min_abs_zero", ["zmodp"]], ["del", "theorem", "zero_val", ["zmodp"]], ["del", "def", "zmodp", []]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": [["add", "theorem", "card_units", ["zmod"]], ["add", "theorem", "eisenstein_lemma", ["zmod"]], ["add", "theorem", "euler_criterion", ["zmod"]], ["add", "theorem", "euler_criterion_units", ["zmod"]], ["add", "theorem", "exists_pow_two_eq_neg_one_iff_mod_four_ne_three", ["zmod"]], ["add", "theorem", "exists_pow_two_eq_prime_iff_of_mod_four_eq_one", ["zmod"]], ["add", "theorem", "exists_pow_two_eq_prime_iff_of_mod_four_eq_three", ["zmod"]], ["add", "theorem", "exists_pow_two_eq_two_iff", ["zmod"]], ["add", "theorem", "fermat_little", ["zmod"]], ["add", "theorem", "fermat_little_units", ["zmod"]], ["add", "theorem", "gauss_lemma", ["zmod"]], ["add", "def", "legendre_sym", ["zmod"]], ["add", "theorem", "legendre_sym_eq_one_iff", ["zmod"]], ["add", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmod"]], ["add", "theorem", "legendre_sym_eq_pow", ["zmod"]], ["add", "theorem", "legendre_sym_eq_zero_iff", ["zmod"]], ["add", "theorem", "legendre_sym_two", ["zmod"]], ["add", "theorem", "pow_div_two_eq_neg_one_or_one", ["zmod"]], ["add", "theorem", "prod_Ico_one_prime", ["zmod"]], ["add", "theorem", "quadratic_reciprocity", ["zmod"]], ["add", "theorem", "wilsons_lemma", ["zmod"]], ["del", "theorem", "card_units_zmodp", ["zmodp"]], ["del", "theorem", "eisenstein_lemma", ["zmodp"]], ["del", "theorem", "euler_criterion", ["zmodp"]], ["del", "theorem", "euler_criterion_units", ["zmodp"]], ["del", "theorem", "exists_pow_two_eq_neg_one_iff_mod_four_ne_three", ["zmodp"]], ["del", "theorem", "exists_pow_two_eq_prime_iff_of_mod_four_eq_one", ["zmodp"]], ["del", "theorem", "exists_pow_two_eq_prime_iff_of_mod_four_eq_three", ["zmodp"]], ["del", "theorem", "exists_pow_two_eq_two_iff", ["zmodp"]], ["del", "theorem", "fermat_little", ["zmodp"]], ["del", "theorem", "gauss_lemma", ["zmodp"]], ["del", "def", "legendre_sym", ["zmodp"]], ["del", "theorem", "legendre_sym_eq_one_iff", ["zmodp"]], ["del", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmodp"]], ["del", "theorem", "legendre_sym_eq_pow", ["zmodp"]], ["del", "theorem", "legendre_sym_two", ["zmodp"]], ["del", "theorem", "pow_div_two_eq_neg_one_or_one", ["zmodp"]], ["del", "theorem", "prod_Ico_one_prime", ["zmodp"]], ["del", "theorem", "quadratic_reciprocity", ["zmodp"]], ["del", "theorem", "wilsons_lemma", ["zmodp"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": [["mod", "theorem", "mod_four_eq_three_of_nat_prime_of_prime", ["gaussian_int"]], ["mod", "theorem", "prime_iff_mod_four_eq_three_of_nat_prime", ["gaussian_int"]], ["mod", "theorem", "prime_of_nat_prime_of_mod_four_eq_three", ["gaussian_int"]], ["mod", "theorem", "sum_two_squares_of_nat_prime_of_not_irreducible", ["gaussian_int"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["mod", "theorem", "sum_two_squares", ["char_p"]], ["mod", "theorem", "pow_totient", ["zmod"]], ["add", "theorem", "sum_two_squares", ["zmod"]], ["del", "theorem", "sum_two_squares", ["zmodp"]]]}, {"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": [["mod", "theorem", "card'", ["finite_field"]], ["mod", "theorem", "card", ["finite_field"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["mod", "theorem", "exists_prime_order_of_dvd_card", ["sylow"]], ["mod", "theorem", "exists_subgroup_card_pow_prime", ["sylow"]], ["mod", "theorem", "one_mem_fixed_points_rotate", ["sylow"]], ["mod", "def", "rotate_vectors_prod_eq_one", ["sylow"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "def", "fact", []]]}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": [["mod", "theorem", "exists_sum_two_squares_add_one_eq_k", ["int"]]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": [["mod", "theorem", "sum_two_squares", ["nat", "prime"]]]}]}, {"timestamp": 1587771421, "sha": "3e54e977", "message": "chore(topology/separation): prove that `{y | y ≠ x}` is open (#2506)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_singleton_eq", ["set"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "is_open_ne_top", ["ennreal"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "is_open_ne", []]]}]}, {"timestamp": 1587762725, "sha": "ee8451b9", "message": "feat(data/list): more lemmas on joins and sums (#2501)\nA few more lemmas on lists (especially joins) and sums. I also linted the file `lists/basic.lean` and converted some comments to section headers.\nSome lemmas got renamed:\n`of_fn_prod_take` -> `prod_take_of_fn`\n`of_fn_sum_take` -> `sum_take_of_fn`\n`of_fn_prod` ->`prod_of_fn`\n`of_fn_sum` -> `sum_of_fn`\nThe arguments of `nth_le_repeat` were changed for better `simp` efficiency", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_range_sub_of_monotone", ["finset"]]]}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["add", "theorem", "univ_sigma_univ", ["finset"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_univ_eq_prod_range", ["fin"]], ["del", "theorem", "of_fn_prod", ["list"]], ["del", "theorem", "of_fn_prod_take", ["list"]], ["del", "theorem", "of_fn_sum_take", ["list"]], ["add", "theorem", "prod_of_fn", ["list"]], ["add", "theorem", "prod_take_of_fn", ["list"]], ["add", "theorem", "sum_take_of_fn", ["list"]], ["add", "theorem", "prod_equiv", []]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "drop_append", ["list"]], ["add", "theorem", "drop_sum_join", ["list"]], ["add", "theorem", "drop_take_succ_eq_cons_nth_le", ["list"]], ["add", "theorem", "drop_take_succ_join_eq_nth_le", ["list"]], ["add", "theorem", "eq_cons_of_length_one", ["list"]], ["add", "theorem", "eq_iff_join_eq", ["list"]], ["add", "theorem", "forall_mem_map_iff", ["list"]], ["add", "theorem", "nth_le_drop'", ["list"]], ["add", "theorem", "nth_le_drop", ["list"]], ["add", "theorem", "nth_le_join", ["list"]], ["add", "theorem", "nth_le_of_eq", ["list"]], ["mod", "theorem", "nth_le_repeat", ["list"]], ["add", "theorem", "nth_le_take'", ["list"]], ["add", "theorem", "nth_le_take", ["list"]], ["add", "theorem", "sum_take_map_length_lt1", ["list"]], ["add", "theorem", "sum_take_map_length_lt2", ["list"]], ["add", "theorem", "take_append", ["list"]], ["add", "theorem", "take_repeat", ["list"]], ["add", "theorem", "take_sum_join", ["list"]]]}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["add", "theorem", "forall_mem_of_fn_iff", ["list"]], ["add", "theorem", "mem_of_fn", ["list"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}]}, {"timestamp": 1587759009, "sha": "6795c9df", "message": "chore(scripts): update nolints.txt (#2514)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587748149, "sha": "3162c1c9", "message": "feat(tactic/delta_instance): protect names and deal with functions (#2477)\nThere were (at least) two issues with the `delta_instance` derive handler:\n* It couldn't protect the names of the instances it generated, so they had to be ugly to avoid clashes.\n* It didn't deal well with deriving instances on function types, so `@[derive monad]` usually failed.\nThis should fix both. The first is possible with recent(ish) additions to core.\ncloses #1951", "changes": [{"oldPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/delta_instance.lean", "newPath": "test/delta_instance.lean", "changes": []}]}, {"timestamp": 1587737751, "sha": "2f6b8d73", "message": "chore(scripts): update nolints.txt (#2510)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587737748, "sha": "7a718662", "message": "chore(topology/algebra/module): make `id` use explicit args (#2509)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "fderiv_id", []], ["mod", "theorem", "has_fderiv_at_id", []], ["del", "theorem", "snd", ["has_strict_fderiv_at"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "norm_id", ["continuous_linear_map"]], ["mod", "theorem", "norm_id_le", ["continuous_linear_map"]]]}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["mod", "theorem", "mfderiv_id", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "coe_id'", ["continuous_linear_map"]], ["mod", "theorem", "coe_id", ["continuous_linear_map"]], ["mod", "theorem", "comp_id", ["continuous_linear_map"]], ["mod", "theorem", "id_apply", ["continuous_linear_map"]], ["mod", "theorem", "id_comp", ["continuous_linear_map"]]]}]}, {"timestamp": 1587737746, "sha": "62feebc2", "message": "chore(*): add missing copyright headers (#2505)\nI think these are close to the last remaining files without copyright headers.\n(We decided at some point to allow that `import`-only files don't need one.)", "changes": [{"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}]}, {"timestamp": 1587737744, "sha": "c8946c9d", "message": "chore(tactic/*): remove some unused args in commands (#2498)", "changes": [{"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}]}, {"timestamp": 1587726843, "sha": "00d7da20", "message": "docs(*): merge rewrite tactic tag into rewriting (#2512)\nWe had two overlapping tags in the docs.", "changes": [{"oldPath": "src/tactic/converter/apply_congr.lean", "newPath": "src/tactic/converter/apply_congr.lean", "changes": []}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/lean_core_docs.lean", "newPath": "src/tactic/lean_core_docs.lean", "changes": []}, {"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}]}, {"timestamp": 1587726841, "sha": "13393e3c", "message": "chore(data/list/*): various renamings to use dot notation (#2481)\n* use dot notation\n* add a version of `list.perm.prod_eq` that only assumes that elements of the list pairwise commute instead of commutativity of the monoid.\n## List of renamed symbols\n### `data/list/basic`\n* `append_sublist_append_of_sublist_right` : `sublist.append_right`;\n* `reverse_sublist` : `sublist.reverse`;\n* `append_sublist_append` : `sublist.append`;\n* `subset_of_sublist`: `sublist.subset`;\n* `sublist_antisymm` : `sublist.antisymm`;\n* `filter_map_sublist_filter_map` : `sublist.filter_map`\n* `map_sublist_map` : `sublist.map`\n* `erasep_sublist_erasep`: `sublist.erasep`\n* `erase_sublist_erase` : `sublist.erase`;\n* `diff_sublist_of_sublist` : `sublist.diff_right`;\n### `data/list/perm`\n* `perm.skip` : `perm.cons`;\n* `perm_comm` (new);\n* `perm_subset` : `perm.subset`;\n* `mem_of_perm` : `perm.mem_iff`;\n* `perm_app_left` : `perm.append_right` (note `right` vs `left`)\n* `perm_app_right` : `perm.append_left` (note `right` vs `left`)\n* `perm_app` : `perm.append`;\n* `perm_app_cons` : `perm.append_cons`;\n* `perm_cons_app` : `perm_append_singleton`;\n* `perm_app_comm` : `perm_append_comm`;\n* `perm_length` : `perm.length_eq`;\n* `eq_nil_of_perm_nil` : `perm.eq_nil` and `perm.nil_eq`\n with different choices of lhs/rhs;\n* `eq_singleton_of_perm_inv` : `perm.eq_singleton` and `perm.singleton_eq`\n with different choices of lhs/rhs;\n* `perm_singleton` and `singleton_perm`: `iff` versions\n of `perm.eq_singleton` and `perm.singleton_eq`;\n* `eq_singleton_of_perm` : `singleton_perm_singleton`;\n* `perm_cons_app_cons` : `perm_cons_append_cons`;\n* `perm_repeat` : `repeat_perm`; new `perm_repeat` differs from it\n in the choice of lhs/rhs;\n* `perm_erase` : `perm_cons_erase`;\n* `perm_filter_map` : `perm.filter_map`;\n* `perm_map` : `perm.map`;\n* `perm_pmap` : `perm.pmap`;\n* `perm_filter` : `perm.filter`;\n* `subperm_of_sublist` : `sublist.subperm`;\n* `subperm_of_perm` : `perm.subperm`;\n* `subperm.refl` : now has `@[refl]` attribute;\n* `subperm.trans` : now has `@[trans]` attribute;\n* `length_le_of_subperm` : `subperm.length_le`;\n* `subset_of_subperm` : `subperm.subset`;\n* `exists_perm_append_of_sublist` : `sublist.exists_perm_append`;\n* `perm_countp` : `perm.countp_eq`;\n* `countp_le_of_subperm` : `subperm.countp_le`;\n* `perm_count` : `perm.count_eq`;\n* `count_le_of_subperm` : `subperm.count_le`;\n* `foldl_eq_of_perm` : `perm.foldl_eq`, added a primed version\n with slightly weaker assumptions;\n* `foldr_eq_of_perm` : `perm.foldr_eq`;\n* `rec_heq_of_perm` : `perm.eec_heq`;\n* `fold_op_eq_of_perm` : `perm.fold_op_eq`;\n* `prod_eq_of_perm`: `perm.prod_eq` and `perm.prod_eq'`;\n* `perm_cons_inv` : `perm.cons_inv`;\n* `perm_cons` : now is a `@[simp]` lemma;\n* `perm_app_right_iff` : `perm_append_right_iff`;\n* `subperm_app_left` : `subperm_append_left`;\n* `subperm_app_right` : `subperm_append_right`;\n* `perm_ext_sublist_nodup` : `nodup.sublist_ext`;\n* `erase_perm_erase` : `perm.erase`;\n* `subperm_cons_erase` (new);\n* `erase_subperm_erase` : `subperm.erase`;\n* `perm_diff_left` : `perm.diff_right` (note `left` vs `right`);\n* `perm_diff_right` : `perm.diff_left` (note `left` vs `right`);\n* `perm.diff`, `subperm.diff_right`, `erase_cons_subperm_cons_erase` (new);\n* `perm_bag_inter_left` : `perm.bag_inter_right` (note `left` vs `right`);\n* `perm_bag_inter_right` : `perm.bag_inter_left` (note `left` vs `right`);\n* `perm.bag_inter` (new);\n* `perm_erase_dup_of_perm` : `perm.erase_dup`;\n* `perm_union_left` : `perm.union_right` (note `left` vs `right`);\n* `perm_union_right` : `perm.union_left` (note `left` vs `right`);\n* `perm_union` : `perm.union`;\n* `perm_inter_left` : `perm.inter_right` (note `left` vs `right`);\n* `perm_inter_right` : `perm.inter_left` (note `left` vs `right`);\n* `perm_inter` : `perm.inter`;\n* `perm_nodup` : `perm.nodup_iff`;\n* `perm_bind_left` : `perm.bind_right` (note `left` vs `right`);\n* `perm_bind_right` : `perm.bind_left` (note `left` vs `right`);\n* `perm_product_left` : `perm.product_right` (note `left` vs `right`);\n* `perm_product_right` : `peerm.product_left` (note `left` vs `right`);\n* `perm_product` : `perm.product`;\n* `perm_erasep` : `perm.erasep`;\n### `data/list/sigma`\n* `nodupkeys.pairwise_ne` (new);\n* `perm_kreplace` : `perm.kreplace`;\n* `perm_kerase` : `perm.kerase`;\n* `perm_kinsert` : `perm.kinsert`;\n* `erase_dupkeys_cons` : now take `x : sigma β` instead\n of `{x : α}` and `{y : β x}`;\n* `perm_kunion_left` : `perm.kunion_right` (note `left` vs `right`);\n* `perm_kunion_right` : `perm.kunion_left` (note `left` vs `right`);\n* `perm_kunion` : `perm.kunion`;\n*", "changes": [{"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["mod", "theorem", "entries_to_alist", ["alist"]], ["mod", "theorem", "insert_insert", ["alist"]], ["mod", "theorem", "insert_singleton_eq", ["alist"]], ["mod", "theorem", "to_alist_cons", ["alist"]], ["mod", "theorem", "union_comm_of_disjoint", ["alist"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "append_sublist_append", ["list"]], ["del", "theorem", "append_sublist_append_of_sublist_right", ["list"]], ["del", "theorem", "diff_sublist_of_sublist", ["list"]], ["del", "theorem", "erase_sublist_erase", ["list"]], ["del", "theorem", "erasep_sublist_erasep", ["list"]], ["del", "theorem", "filter_map_sublist_filter_map", ["list"]], ["del", "theorem", "map_sublist_map", ["list"]], ["del", "theorem", "reverse_sublist", ["list"]], ["mod", "theorem", "span_eq_take_drop", ["list"]], ["add", "theorem", "antisymm", ["list", "sublist"]], ["add", "theorem", "append", ["list", "sublist"]], ["add", "theorem", "append_right", ["list", "sublist"]], ["add", "theorem", "diff_right", ["list", "sublist"]], ["add", "theorem", "erase", ["list", "sublist"]], ["add", "theorem", "erasep", ["list", "sublist"]], ["add", "theorem", "filter_map", ["list", "sublist"]], ["add", "theorem", "map", ["list", "sublist"]], ["add", "theorem", "reverse", ["list", "sublist"]], ["add", "theorem", "subset", ["list", "sublist"]], ["del", "theorem", "sublist_antisymm", ["list"]], ["del", "theorem", "subset_of_sublist", ["list"]], ["mod", "theorem", "take_while_append_drop", ["list"]]]}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["del", "theorem", "count_le_of_subperm", ["list"]], ["del", "theorem", "countp_le_of_subperm", ["list"]], ["del", "theorem", "eq_nil_of_perm_nil", ["list"]], ["del", "theorem", "eq_singleton_of_perm", ["list"]], ["del", "theorem", "eq_singleton_of_perm_inv", ["list"]], ["add", "theorem", "erase_cons_subperm_cons_erase", ["list"]], ["del", "theorem", "erase_perm_erase", ["list"]], ["del", "theorem", "erase_subperm_erase", ["list"]], ["del", "theorem", "exists_perm_append_of_sublist", ["list"]], ["del", "theorem", "fold_op_eq_of_perm", ["list"]], ["del", "theorem", "foldl_eq_of_perm", ["list"]], ["del", "theorem", "foldr_eq_of_perm", ["list"]], ["del", "theorem", "length_le_of_subperm", ["list"]], ["del", "theorem", "mem_of_perm", ["list"]], ["add", "theorem", "sublist_ext", ["list", "nodup"]], ["add", "theorem", "append", ["list", "perm"]], ["add", "theorem", "append_cons", ["list", "perm"]], ["add", "theorem", "append_left", ["list", "perm"]], ["add", "theorem", "append_right", ["list", "perm"]], ["add", "theorem", "bag_inter", ["list", "perm"]], ["add", "theorem", "bag_inter_left", ["list", "perm"]], ["add", "theorem", "bag_inter_right", ["list", "perm"]], ["add", "theorem", "bind_left", ["list", "perm"]], ["add", "theorem", "bind_right", ["list", "perm"]], ["add", "theorem", "cons_inv", ["list", "perm"]], ["add", "theorem", "count_eq", ["list", "perm"]], ["add", "theorem", "countp_eq", ["list", "perm"]], ["add", "theorem", "diff", ["list", "perm"]], ["add", "theorem", "diff_left", ["list", "perm"]], ["add", "theorem", "diff_right", ["list", "perm"]], ["add", "theorem", "eq_nil", ["list", "perm"]], ["add", "theorem", "eq_singleton", ["list", "perm"]], ["add", "theorem", "erase", ["list", "perm"]], ["add", "theorem", "erase_dup", ["list", "perm"]], ["add", "theorem", "erasep", ["list", "perm"]], ["add", "theorem", "filter", ["list", "perm"]], ["add", "theorem", "filter_map", ["list", "perm"]], ["add", "theorem", "fold_op_eq", ["list", "perm"]], ["add", "theorem", "foldl_eq'", ["list", "perm"]], ["add", "theorem", "foldl_eq", ["list", "perm"]], ["add", "theorem", "foldr_eq", ["list", "perm"]], ["add", "theorem", "insert", ["list", "perm"]], ["add", "theorem", "inter", ["list", "perm"]], ["add", "theorem", "inter_left", ["list", "perm"]], ["add", "theorem", "inter_right", ["list", "perm"]], ["add", "theorem", "length_eq", ["list", "perm"]], ["add", "theorem", "map", ["list", "perm"]], ["add", "theorem", "mem_iff", ["list", "perm"]], ["add", "theorem", "nil_eq", ["list", "perm"]], ["add", "theorem", "nodup_iff", ["list", "perm"]], ["add", "theorem", "pairwise_iff", ["list", "perm"]], ["add", "theorem", "pmap", ["list", "perm"]], ["add", "theorem", "prod_eq'", ["list", "perm"]], ["add", "theorem", "prod_eq", ["list", "perm"]], ["add", "theorem", "product", ["list", "perm"]], ["add", "theorem", "product_left", ["list", "perm"]], ["add", "theorem", "product_right", ["list", "perm"]], ["add", "theorem", "rec_heq", ["list", "perm"]], ["add", "theorem", "singleton_eq", ["list", "perm"]], ["add", "theorem", "subperm", ["list", "perm"]], ["add", "theorem", "subset", ["list", "perm"]], ["add", "theorem", "union", ["list", "perm"]], ["add", "theorem", "union_left", ["list", "perm"]], ["add", "theorem", "union_right", ["list", "perm"]], ["del", "theorem", "perm_app", ["list"]], ["del", "theorem", "perm_app_comm", ["list"]], ["del", "theorem", "perm_app_cons", ["list"]], ["del", "theorem", "perm_app_left", ["list"]], ["del", "theorem", "perm_app_left_iff", ["list"]], ["del", "theorem", "perm_app_right", ["list"]], ["del", "theorem", "perm_app_right_iff", ["list"]], ["add", "theorem", "perm_append_comm", ["list"]], ["add", "theorem", "perm_append_left_iff", ["list"]], ["add", "theorem", "perm_append_right_iff", ["list"]], ["add", "theorem", "perm_append_singleton", ["list"]], ["del", "theorem", "perm_bag_inter_left", ["list"]], ["del", "theorem", "perm_bag_inter_right", ["list"]], ["del", "theorem", "perm_bind_left", ["list"]], ["del", "theorem", "perm_bind_right", ["list"]], ["add", "theorem", "perm_comm", ["list"]], ["mod", "theorem", "perm_cons", ["list"]], ["del", "theorem", "perm_cons_app", ["list"]], ["del", "theorem", "perm_cons_app_cons", ["list"]], ["add", "theorem", "perm_cons_append_cons", ["list"]], ["add", "theorem", "perm_cons_erase", ["list"]], ["del", "theorem", "perm_cons_inv", ["list"]], ["del", "theorem", "perm_count", ["list"]], ["del", "theorem", "perm_countp", ["list"]], ["del", "theorem", "perm_diff_left", ["list"]], ["del", "theorem", "perm_diff_right", ["list"]], ["del", "theorem", "perm_erase", ["list"]], ["del", "theorem", "perm_erase_dup_of_perm", ["list"]], ["del", "theorem", "perm_erasep", ["list"]], ["mod", "theorem", "perm_ext", ["list"]], ["del", "theorem", "perm_ext_sublist_nodup", ["list"]], ["del", "theorem", "perm_filter", ["list"]], ["del", "theorem", "perm_filter_map", ["list"]], ["del", "theorem", "perm_insert", ["list"]], ["del", "theorem", "perm_inter", ["list"]], ["del", "theorem", "perm_inter_left", ["list"]], ["del", "theorem", "perm_inter_right", ["list"]], ["del", "theorem", "perm_length", ["list"]], ["del", "theorem", "perm_map", ["list"]], ["del", "theorem", "perm_nodup", ["list"]], ["del", "theorem", "perm_pairwise", ["list"]], ["del", "theorem", "perm_pmap", ["list"]], ["del", "theorem", "perm_product", ["list"]], ["del", "theorem", "perm_product_left", ["list"]], ["del", "theorem", "perm_product_right", ["list"]], ["mod", "theorem", "perm_repeat", ["list"]], ["add", "theorem", "perm_singleton", ["list"]], ["del", "theorem", "perm_subset", ["list"]], ["del", "theorem", "perm_union", ["list"]], ["del", "theorem", "perm_union_left", ["list"]], ["del", "theorem", "perm_union_right", ["list"]], ["del", "theorem", "prod_eq_of_perm", ["list"]], ["del", "theorem", "rec_heq_of_perm", ["list"]], ["add", "theorem", "repeat_perm", ["list"]], ["add", "theorem", "singleton_perm", ["list"]], ["add", "theorem", "singleton_perm_singleton", ["list"]], ["add", "theorem", "exists_perm_append", ["list", "sublist"]], ["add", "theorem", "subperm", ["list", "sublist"]], ["add", "theorem", "count_le", ["list", "subperm"]], ["add", "theorem", "countp_le", ["list", "subperm"]], ["add", "theorem", "diff_right", ["list", "subperm"]], ["add", "theorem", "erase", ["list", "subperm"]], ["add", "theorem", "length_le", ["list", "subperm"]], ["mod", "theorem", "refl", ["list", "subperm"]], ["add", "theorem", "subset", ["list", "subperm"]], ["mod", "theorem", "trans", ["list", "subperm"]], ["del", "theorem", "subperm_app_left", ["list"]], ["del", "theorem", "subperm_app_right", ["list"]], ["add", "theorem", "subperm_append_left", ["list"]], ["add", "theorem", "subperm_append_right", ["list"]], ["add", "theorem", "subperm_cons_erase", ["list"]], ["del", "theorem", "subperm_of_perm", ["list"]], ["del", "theorem", "subperm_of_sublist", ["list"]], ["del", "theorem", "subset_of_subperm", ["list"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["mod", "theorem", "erase_dupkeys_cons", ["list"]], ["mod", "theorem", "kerase_kerase", ["list"]], ["add", "theorem", "pairwise_ne", ["list", "nodupkeys"]], ["mod", "theorem", "nodupkeys_of_sublist", ["list"]], ["add", "theorem", "kerase", ["list", "perm"]], ["add", "theorem", "kinsert", ["list", "perm"]], ["add", "theorem", "kreplace", ["list", "perm"]], ["add", "theorem", "kunion", ["list", "perm"]], ["add", "theorem", "kunion_left", ["list", "perm"]], ["add", "theorem", "kunion_right", ["list", "perm"]], ["del", "theorem", "perm_kerase", ["list"]], ["del", "theorem", "perm_kinsert", ["list"]], ["del", "theorem", "perm_kreplace", ["list"]], ["del", "theorem", "perm_kunion", ["list"]], ["del", "theorem", "perm_kunion_left", ["list"]], ["del", "theorem", "perm_kunion_right", ["list"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "card_erase_of_mem", ["multiset"]], ["mod", "theorem", "coe_filter_map", ["multiset"]], ["mod", "theorem", "cons_ndunion", ["multiset"]], ["mod", "theorem", "erase_add_left_neg", ["multiset"]], ["mod", "theorem", "erase_add_right_neg", ["multiset"]], ["mod", "theorem", "erase_add_right_pos", ["multiset"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}]}, {"timestamp": 1587726839, "sha": "3ae22de4", "message": "feat(linear_algebra): quadratic forms (#2480)\nDefine quadratic forms over a module, maps from quadratic forms to bilinear forms and matrices, positive definite quadratic forms and the discriminant of quadratic forms.\nAlong the way, I added some definitions to `data/matrix/basic.lean` and `linear_algebra/bilinear_form.lean` and did some cleaning up.", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "coe_fn_congr", ["linear_map"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "col_add", ["matrix"]], ["add", "theorem", "col_mul_vec", ["matrix"]], ["add", "theorem", "col_smul", ["matrix"]], ["add", "theorem", "col_val", ["matrix"]], ["add", "theorem", "col_vec_mul", ["matrix"]], ["add", "theorem", "mul_vec_mul_vec", ["matrix"]], ["add", "theorem", "mul_vec_zero", ["matrix"]], ["add", "theorem", "row_add", ["matrix"]], ["add", "theorem", "row_mul_vec", ["matrix"]], ["add", "theorem", "row_smul", ["matrix"]], ["add", "theorem", "row_val", ["matrix"]], ["add", "theorem", "row_vec_mul", ["matrix"]], ["add", "theorem", "transpose_col", ["matrix"]], ["add", "theorem", "transpose_row", ["matrix"]], ["add", "theorem", "vec_mul_diagonal", ["matrix"]], ["add", "theorem", "vec_mul_one", ["matrix"]], ["add", "theorem", "vec_mul_vec_mul", ["matrix"]], ["add", "theorem", "vec_mul_zero", ["matrix"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_fn_sum", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "theorem", "add_apply", ["bilin_form"]], ["add", "theorem", "coe_fn_congr", ["bilin_form"]], ["add", "theorem", "coe_fn_mk", ["bilin_form"]], ["add", "theorem", "coe_fn_to_linear_map", ["bilin_form"]], ["add", "def", "comp", ["bilin_form"]], ["add", "theorem", "comp_apply", ["bilin_form"]], ["add", "def", "comp_left", ["bilin_form"]], ["add", "theorem", "comp_left_apply", ["bilin_form"]], ["add", "theorem", "comp_left_comp_right", ["bilin_form"]], ["add", "def", "comp_right", ["bilin_form"]], ["add", "theorem", "comp_right_apply", ["bilin_form"]], ["add", "theorem", "comp_right_comp_left", ["bilin_form"]], ["add", "theorem", "map_sum_left", ["bilin_form"]], ["add", "theorem", "map_sum_right", ["bilin_form"]], ["add", "theorem", "mul_to_matrix", ["bilin_form"]], ["add", "theorem", "mul_to_matrix_mul", ["bilin_form"]], ["add", "theorem", "smul_apply", ["bilin_form"]], ["add", "def", "to_matrix", ["bilin_form"]], ["add", "theorem", "to_matrix_apply", ["bilin_form"]], ["add", "theorem", "to_matrix_comp", ["bilin_form"]], ["add", "theorem", "to_matrix_comp_left", ["bilin_form"]], ["add", "theorem", "to_matrix_comp_right", ["bilin_form"]], ["add", "theorem", "to_matrix_mul", ["bilin_form"]], ["add", "theorem", "to_matrix_smul", ["bilin_form"]], ["add", "def", "to_matrixₗ", ["bilin_form"]], ["add", "def", "bilin_form_equiv_matrix", []], ["add", "def", "to_bilin_form", ["matrix"]], ["add", "theorem", "to_bilin_form_apply", ["matrix"]], ["add", "def", "to_bilin_formₗ", ["matrix"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "to_matrix_id", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/quadratic_form.lean", "changes": [["add", "theorem", "polar_to_quadratic_form", ["bilin_form"]], ["add", "def", "to_quadratic_form", ["bilin_form"]], ["add", "theorem", "to_quadratic_form_apply", ["bilin_form"]], ["add", "def", "to_quadratic_form", ["matrix"]], ["add", "def", "associated", ["quadratic_form"]], ["add", "theorem", "associated_apply", ["quadratic_form"]], ["add", "theorem", "associated_comp", ["quadratic_form"]], ["add", "theorem", "associated_is_sym", ["quadratic_form"]], ["add", "theorem", "associated_left_inverse", ["quadratic_form"]], ["add", "theorem", "associated_right_inverse", ["quadratic_form"]], ["add", "theorem", "associated_smul", ["quadratic_form"]], ["add", "theorem", "associated_to_quadratic_form", ["quadratic_form"]], ["add", "def", "comp", ["quadratic_form"]], ["add", "theorem", "comp_apply", ["quadratic_form"]], ["add", "def", "discr", ["quadratic_form"]], ["add", "theorem", "discr_comp", ["quadratic_form"]], ["add", "theorem", "discr_smul", ["quadratic_form"]], ["add", "theorem", "ext", ["quadratic_form"]], ["add", "theorem", "map_add_self", ["quadratic_form"]], ["add", "theorem", "map_neg", ["quadratic_form"]], ["add", "theorem", "map_smul", ["quadratic_form"]], ["add", "theorem", "map_sub", ["quadratic_form"]], ["add", "theorem", "map_zero", ["quadratic_form"]], ["add", "def", "polar", ["quadratic_form"]], ["add", "def", "pos_def", ["quadratic_form"]], ["add", "theorem", "smul_apply", ["quadratic_form"]], ["add", "theorem", "smul_pos_def_of_nonzero", ["quadratic_form"]], ["add", "theorem", "smul_pos_def_of_smul_nonzero", ["quadratic_form"]], ["add", "theorem", "to_fun_eq_apply", ["quadratic_form"]], ["add", "def", "to_matrix", ["quadratic_form"]], ["add", "theorem", "to_matrix_comp", ["quadratic_form"]], ["add", "theorem", "to_matrix_smul", ["quadratic_form"]], ["add", "structure", "quadratic_form", []]]}]}, {"timestamp": 1587710581, "sha": "e7bd3127", "message": "chore(tactic/pi_instance): add a docstring, remove a little bit of redundancy (#2500)", "changes": [{"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}]}, {"timestamp": 1587700984, "sha": "b7af2838", "message": "feat(algebra): define `invertible` typeclass (#2504)\nIn the discussion for #2480, we decided that the definitions would be cleaner if the elaborator could supply us with a suitable value of `1/2`. With these changes, we can now add an `[invertible 2]` argument to write `⅟ 2`.\nRelated to Zulip discussion: https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.232480.20bilinear.20forms", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "left_inv_eq_right_inv", []]]}, {"oldPath": null, "newPath": "src/algebra/invertible.lean", "changes": [["add", "theorem", "div_mul_cancel_of_invertible", []], ["add", "theorem", "div_self_of_invertible", []], ["add", "theorem", "inv_mul_cancel_of_invertible", []], ["add", "theorem", "inv_of_div", []], ["add", "theorem", "inv_of_eq_group_inv", []], ["add", "theorem", "inv_of_eq_inv", []], ["add", "theorem", "inv_of_eq_right_inv", []], ["add", "theorem", "inv_of_inv_of", []], ["add", "theorem", "inv_of_mul", []], ["add", "theorem", "inv_of_mul_self", []], ["add", "theorem", "inv_of_neg", []], ["add", "theorem", "inv_of_one", []], ["add", "def", "invertible_div", []], ["add", "def", "invertible_inv", []], ["add", "def", "invertible_inv_of", []], ["add", "def", "invertible_mul", []], ["add", "def", "invertible_neg", []], ["add", "def", "invertible_of_group", []], ["add", "def", "invertible_of_nonzero", []], ["add", "def", "invertible_one", []], ["add", "theorem", "is_unit_of_invertible", []], ["add", "theorem", "mul_div_cancel_of_invertible", []], ["add", "theorem", "mul_inv_cancel_of_invertible", []], ["add", "theorem", "mul_inv_of_mul_self_cancel", []], ["add", "theorem", "mul_inv_of_self", []], ["add", "theorem", "mul_mul_inv_of_self_cancel", []], ["add", "theorem", "nonzero_of_invertible", []]]}]}, {"timestamp": 1587690237, "sha": "02d73084", "message": "feat(cmd/simp): let `#simp` use declared `variables` (#2478)\nLet `#simp` see declared `variables`.\n~~Sits atop the minor `tactic.core` rearrangement in #2465.~~\n@semorrison It turns out that `push_local_scope` and `pop_local_scope` weren't required; the parser is smarter than we thought, and if you declared some `variables` and then tried to `#simp` them, lean would half-know what you are talking about.\nIndeed, the parsed `pexpr` from the command would include this information, but `to_expr` would report `no such 'blah'` when called afterward. To fix this you have to add the local variables you want `simp` to be able to see as local hypotheses in the same `tactic_state` in which you invoke `expr.simp`---so no wrapping your call to `expr.simp` directly in `lean.parser.of_tactic` (since this cooks up a fresh `tactic_state` for you).\nCloses #2475.\n
\n
", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/simp_command.lean", "newPath": "src/tactic/simp_command.lean", "changes": []}, {"oldPath": "test/simp_command.lean", "newPath": "test/simp_command.lean", "changes": [["mod", "def", "f", []], ["add", "theorem", "spell'", ["inst"]]]}]}, {"timestamp": 1587686030, "sha": "01967486", "message": "chore(scripts): update nolints.txt (#2503)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587675916, "sha": "fdbf22d7", "message": "doc(tactic/*): doc entries for some missing tactics (#2489)\nThis covers most of the remaining list in the old issue #450. I've already checked off my additions.", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}, {"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "src/tactic/slice.lean", "newPath": "src/tactic/slice.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}]}, {"timestamp": 1587664867, "sha": "fc7ac675", "message": "feat(data/string): add docstrings and improve semantics (#2497)\nCould have gone in #2493, but I didn't want to hold up #2478. Besides, what's a tiny pull request between friends.\nThis \"writing docstrings\" thing really lets helps you discover tiny little tweaks here and here.\n
\n
\n
", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["mod", "def", "map_tokens", ["string"]], ["del", "def", "over_list", ["string"]], ["mod", "def", "split_on", ["string"]]]}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}]}, {"timestamp": 1587654850, "sha": "9ccfa926", "message": "feat(data/string): add phrasings common to conventional languages (#2493)\nJust add a pair of string comparison functions with semantics which are common to conventional programming languages.\n
\n
\n
", "changes": [{"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "ends_with", ["string"]], ["add", "def", "starts_with", ["string"]]]}]}, {"timestamp": 1587644102, "sha": "64e464f1", "message": "chore(*): remove unnecessary transitive imports (#2496)\nThis removes all imports which have already been imported by other imports.\nOverall, this is slightly over a third of the total import lines. This should have no effect whatsoever on compilation, but should make `leanproject import-graph` somewhat... leaner!", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/default.lean", "newPath": "src/algebra/category/CommRing/default.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/default.lean", "newPath": "src/algebra/category/Group/default.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/images.lean", "newPath": "src/algebra/category/Group/images.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/limits.lean", "newPath": "src/algebra/category/Group/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/default.lean", "newPath": "src/algebra/category/Mon/default.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/default.lean", "newPath": "src/algebra/continued_fractions/default.lean", "changes": []}, {"oldPath": "src/algebra/default.lean", "newPath": "src/algebra/default.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/semiconj.lean", "newPath": "src/algebra/semiconj.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/category/bifunctor.lean", "newPath": "src/category/bifunctor.lean", "changes": []}, {"oldPath": "src/category/bitraversable/basic.lean", "newPath": "src/category/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category/equiv_functor/instances.lean", "newPath": "src/category/equiv_functor/instances.lean", "changes": []}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/category/functor.lean", "newPath": "src/category/functor.lean", "changes": []}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}, {"oldPath": "src/category/traversable/default.lean", "newPath": "src/category/traversable/default.lean", "changes": []}, {"oldPath": "src/category/traversable/derive.lean", "newPath": "src/category/traversable/derive.lean", "changes": []}, {"oldPath": "src/category/traversable/instances.lean", "newPath": "src/category/traversable/instances.lean", "changes": []}, {"oldPath": "src/category/traversable/lemmas.lean", "newPath": "src/category/traversable/lemmas.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/default.lean", "newPath": "src/category_theory/concrete_category/default.lean", "changes": []}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/hom_functor.lean", "newPath": "src/category_theory/hom_functor.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism_classes.lean", "newPath": "src/category_theory/isomorphism_classes.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/biproducts.lean", "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/default.lean", "newPath": "src/category_theory/limits/shapes/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": []}, {"oldPath": "src/category_theory/reflect_isomorphisms.lean", "newPath": "src/category_theory/reflect_isomorphisms.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/sums/basic.lean", "newPath": "src/category_theory/sums/basic.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/W.lean", "newPath": "src/data/W.lean", "changes": []}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": "src/data/list/func.lean", "newPath": "src/data/list/func.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/default.lean", "newPath": "src/data/rat/default.lean", "changes": []}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/default.lean", "newPath": "src/data/set/default.lean", "changes": []}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/default.lean", "newPath": "src/data/set/intervals/default.lean", "changes": []}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/default.lean", "newPath": "src/order/default.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/default.lean", "newPath": "src/order/filter/default.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "src/tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/basic.lean", "newPath": "src/tactic/rewrite_all/basic.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/congr.lean", "newPath": "src/tactic/rewrite_all/congr.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}, {"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "src/tactic/show_term.lean", "newPath": "src/tactic/show_term.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/tactic/trunc_cases.lean", "newPath": "src/tactic/trunc_cases.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/category/Top/default.lean", "newPath": "src/topology/category/Top/default.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/metric_space/premetric_space.lean", "newPath": "src/topology/metric_space/premetric_space.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1587633140, "sha": "8a7b94fb", "message": "chore(tactic/suggest): add a docstring (#2499)", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1587610378, "sha": "7c10fd2b", "message": "feat(category_theory/epi_mono): opposite epi mono properties (#2479)\nRelating epis and monos to the opposite category.", "changes": [{"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}]}, {"timestamp": 1587604217, "sha": "4d94de48", "message": "feat(category_theory): wide pullbacks and limits in the over category (#2461)\nThis PR introduces [wide pullbacks](https://ncatlab.org/nlab/show/wide+pullback). \nOrdinary pullbacks are then defined as a special case of wide pullbacks, which simplifies some of the definitions and proofs there. \nFinally we show that the existence of wide pullbacks in `C` gives products in the slice `C/B`, and in fact gives all limits.", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "theorem", "eq_hom_equiv_apply", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_apply_eq", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "of_cone_equiv", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["add", "def", "cones_equiv", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_functor", ["category_theory", "over", "construct_products"]], ["add", "def", "cones_equiv_inverse", ["category_theory", "over", "construct_products"]], ["add", "def", "has_over_limit_discrete_of_wide_pullback_limit", ["category_theory", "over", "construct_products"]], ["add", "def", "over_binary_product_of_pullback", ["category_theory", "over", "construct_products"]], ["add", "def", "over_finite_products_of_finite_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["add", "def", "over_product_of_wide_pullback", ["category_theory", "over", "construct_products"]], ["add", "def", "over_products_of_wide_pullbacks", ["category_theory", "over", "construct_products"]], ["add", "def", "wide_pullback_diagram_of_diagram_over", ["category_theory", "over", "construct_products"]], ["del", "theorem", "over_prod_fst_left", ["category_theory", "over"]], ["del", "theorem", "over_prod_map_left", ["category_theory", "over"]], ["del", "theorem", "over_prod_pair_hom", ["category_theory", "over"]], ["del", "theorem", "over_prod_pair_left", ["category_theory", "over"]], ["del", "theorem", "over_prod_snd_left", ["category_theory", "over"]], ["del", "def", "over_product_of_pullbacks", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["del", "theorem", "of_pushout_cocone_ι", ["category_theory", "limits", "cocone"]], ["del", "theorem", "of_pullback_cone_π", ["category_theory", "limits", "cone"]], ["mod", "def", "fst", ["category_theory", "limits", "pullback_cone"]], ["del", "theorem", "of_cone_π", ["category_theory", "limits", "pullback_cone"]], ["mod", "def", "snd", ["category_theory", "limits", "pullback_cone"]], ["mod", "def", "inl", ["category_theory", "limits", "pushout_cocone"]], ["mod", "def", "inr", ["category_theory", "limits", "pushout_cocone"]], ["del", "theorem", "of_cocone_ι", ["category_theory", "limits", "pushout_cocone"]], ["del", "def", "comp", ["category_theory", "limits", "walking_cospan", "hom"]], ["add", "def", "id", ["category_theory", "limits", "walking_cospan", "hom"]], ["add", "def", "inl", ["category_theory", "limits", "walking_cospan", "hom"]], ["add", "def", "inr", ["category_theory", "limits", "walking_cospan", "hom"]], ["add", "def", "hom", ["category_theory", "limits", "walking_cospan"]], ["del", "inductive", "hom", ["category_theory", "limits", "walking_cospan"]], ["del", "theorem", "hom_id", ["category_theory", "limits", "walking_cospan"]], ["add", "def", "left", ["category_theory", "limits", "walking_cospan"]], ["add", "def", "one", ["category_theory", "limits", "walking_cospan"]], ["add", "def", "right", ["category_theory", "limits", "walking_cospan"]], ["add", "def", "walking_cospan", ["category_theory", "limits"]], ["del", "inductive", "walking_cospan", ["category_theory", "limits"]], ["del", "def", "comp", ["category_theory", "limits", "walking_span", "hom"]], ["add", "def", "fst", ["category_theory", "limits", "walking_span", "hom"]], ["add", "def", "id", ["category_theory", "limits", "walking_span", "hom"]], ["add", "def", "snd", ["category_theory", "limits", "walking_span", "hom"]], ["add", "def", "hom", ["category_theory", "limits", "walking_span"]], ["del", "inductive", "hom", ["category_theory", "limits", "walking_span"]], ["del", "theorem", "hom_id", ["category_theory", "limits", "walking_span"]], ["add", "def", "left", ["category_theory", "limits", "walking_span"]], ["add", "def", "right", ["category_theory", "limits", "walking_span"]], ["add", "def", "zero", ["category_theory", "limits", "walking_span"]], ["add", "def", "walking_span", ["category_theory", "limits"]], ["del", "inductive", "walking_span", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/wide_pullbacks.lean", "changes": [["add", "def", "has_finite_wide_pullbacks_of_has_finite_limits", []], ["add", "def", "has_finite_wide_pushouts_of_has_finite_limits", []], ["add", "def", "diagram_iso_wide_cospan", ["wide_pullback_shape"]], ["add", "inductive", "hom", ["wide_pullback_shape"]], ["add", "theorem", "hom_id", ["wide_pullback_shape"]], ["add", "def", "wide_cospan", ["wide_pullback_shape"]], ["add", "def", "wide_pullback_shape", []], ["add", "def", "diagram_iso_wide_span", ["wide_pushout_shape"]], ["add", "inductive", "hom", ["wide_pushout_shape"]], ["add", "theorem", "hom_id", ["wide_pushout_shape"]], ["add", "def", "wide_span", ["wide_pushout_shape"]], ["add", "def", "wide_pushout_shape", []]]}]}, {"timestamp": 1587597110, "sha": "4dadd26d", "message": "chore(scripts): update nolints.txt (#2495)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587590458, "sha": "bcbdebaa", "message": "chore(tactic/apply_fun): add doc string and remove duplication (#2485)\nI was just adding a docstring to `tactic.apply_fun`, and then saw some duplication and removed it. An example of a use of #2484.\n
\n
\n
", "changes": [{"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}]}, {"timestamp": 1587580277, "sha": "691a230f", "message": "chore(scripts): update nolints.txt (#2494)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587580275, "sha": "2fb6022e", "message": "feat(mk_iff_of_inductive_prop): add, use, and document command (#2490)\nThis existed as an (undocumented) tactic that was being called with `run_cmd`. It deserves to be a documented user command.", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": "src/data/list/pairwise.lean", "newPath": "src/data/list/pairwise.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/tactic/mk_iff_of_inductive_prop.lean", "newPath": "src/tactic/mk_iff_of_inductive_prop.lean", "changes": []}, {"oldPath": "test/mk_iff_of_inductive.lean", "newPath": "test/mk_iff_of_inductive.lean", "changes": []}]}, {"timestamp": 1587572273, "sha": "591a0a00", "message": "chore(*): only import one file per line (#2470)\nThis perhaps-unnecessarily-obsessive PR puts every import statement on its own line.\nWhy?\n1. it's nice to be able to grep for `import X`\n2. ~~if we enforced this, it would be easier deal with commands after imports, etc.~~ (irrelevant in 3.9)\n3. it means I can remove all unnecessary transitive imports with a script\n4. it's just tidier. :-)", "changes": [{"oldPath": "archive/cubing_a_cube.lean", "newPath": "archive/cubing_a_cube.lean", "changes": []}, {"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "docs/contribute/style.md", "newPath": "docs/contribute/style.md", "changes": []}, {"oldPath": "scripts/lint_mathlib.lean", "newPath": "scripts/lint_mathlib.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": []}, {"oldPath": "src/algebra/default.lean", "newPath": "src/algebra/default.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero_power.lean", "newPath": "src/algebra/group_with_zero_power.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/algebra/semiconj.lean", "newPath": "src/algebra/semiconj.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/analysis/analytic/composition.lean", "newPath": "src/analysis/analytic/composition.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/iterated_deriv.lean", "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/specific_functions.lean", "newPath": "src/analysis/calculus/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/hahn_banach.lean", "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category/applicative.lean", "newPath": "src/category/applicative.lean", "changes": []}, {"oldPath": "src/category/bifunctor.lean", "newPath": "src/category/bifunctor.lean", "changes": []}, {"oldPath": "src/category/bitraversable/basic.lean", "newPath": "src/category/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category/bitraversable/lemmas.lean", "newPath": "src/category/bitraversable/lemmas.lean", "changes": []}, {"oldPath": "src/category/equiv_functor.lean", "newPath": "src/category/equiv_functor.lean", "changes": []}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/category/functor.lean", "newPath": "src/category/functor.lean", "changes": []}, {"oldPath": "src/category/monad/basic.lean", "newPath": "src/category/monad/basic.lean", "changes": []}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}, {"oldPath": "src/category/traversable/default.lean", "newPath": "src/category/traversable/default.lean", "changes": []}, {"oldPath": "src/category/traversable/derive.lean", "newPath": "src/category/traversable/derive.lean", "changes": []}, {"oldPath": "src/category/traversable/equiv.lean", "newPath": "src/category/traversable/equiv.lean", "changes": []}, {"oldPath": "src/category/traversable/instances.lean", "newPath": "src/category/traversable/instances.lean", "changes": []}, {"oldPath": "src/category/traversable/lemmas.lean", "newPath": "src/category/traversable/lemmas.lean", "changes": []}, {"oldPath": "src/category_theory/action.lean", "newPath": "src/category_theory/action.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/functorial.lean", "newPath": "src/category_theory/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism_classes.lean", "newPath": "src/category_theory/isomorphism_classes.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/monad/default.lean", "newPath": "src/category_theory/monad/default.lean", "changes": []}, {"oldPath": "src/category_theory/monad/types.lean", "newPath": "src/category_theory/monad/types.lean", "changes": []}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/quotient.lean", "newPath": "src/category_theory/quotient.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/combinatorics/composition.lean", "newPath": "src/combinatorics/composition.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/reduce.lean", "newPath": "src/computability/reduce.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/W.lean", "newPath": "src/data/W.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/dlist/basic.lean", "newPath": "src/data/dlist/basic.lean", "changes": []}, {"oldPath": "src/data/dlist/instances.lean", "newPath": "src/data/dlist/instances.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/equiv/functor.lean", "newPath": "src/data/equiv/functor.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/equiv/mul_add.lean", "newPath": "src/data/equiv/mul_add.lean", "changes": []}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": []}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/transfer_instance.lean", "newPath": "src/data/equiv/transfer_instance.lean", "changes": []}, {"oldPath": "src/data/erased.lean", "newPath": "src/data/erased.lean", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/int/sqrt.lean", "newPath": "src/data/int/sqrt.lean", "changes": []}, {"oldPath": "src/data/lazy_list2.lean", "newPath": "src/data/lazy_list2.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["mod", "theorem", "factors_prime", ["nat"]]]}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/default.lean", "newPath": "src/data/set/default.lean", "changes": []}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": []}, {"oldPath": "src/data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/default.lean", "newPath": "src/data/set/intervals/default.lean", "changes": []}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}, {"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": []}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/data/support.lean", "newPath": "src/data/support.lean", "changes": []}, {"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/copy.lean", "newPath": "src/order/copy.lean", "changes": []}, {"oldPath": "src/order/default.lean", "newPath": "src/order/default.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/default.lean", "newPath": "src/order/filter/default.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/clear.lean", "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "src/tactic/converter/apply_congr.lean", "newPath": "src/tactic/converter/apply_congr.lean", "changes": []}, {"oldPath": "src/tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": []}, {"oldPath": "src/tactic/converter/interactive.lean", "newPath": "src/tactic/converter/interactive.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/derive_inhabited.lean", "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/omega/clause.lean", "newPath": "src/tactic/omega/clause.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_ees.lean", "newPath": "src/tactic/omega/find_ees.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_scalars.lean", "newPath": "src/tactic/omega/find_scalars.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/lin_comb.lean", "newPath": "src/tactic/omega/lin_comb.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/prove_unsats.lean", "newPath": "src/tactic/omega/prove_unsats.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/tactic/rename_var.lean", "newPath": "src/tactic/rename_var.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}, {"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/basic.lean", "newPath": "src/tactic/rewrite_all/basic.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}, {"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "src/tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "src/tactic/transfer.lean", "newPath": "src/tactic/transfer.lean", "changes": []}, {"oldPath": "src/tactic/transform_decl.lean", "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/premetric_space.lean", "newPath": "src/topology/metric_space/premetric_space.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_convergence.lean", "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1587568148, "sha": "8865b00a", "message": "chore(scripts): update nolints.txt (#2491)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587557820, "sha": "d40662f5", "message": "chore(tactic/auto_cases): add docstring and remove duplication (#2488)\nI was just adding a docstring, and I saw some duplication so I removed it too.\n
\n
\n
", "changes": [{"oldPath": "src/tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}]}, {"timestamp": 1587557818, "sha": "f760ad5f", "message": "chore(meta/expr): add a docstring (#2487)\nAdd a docstring.\n
\n
\n
", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1587557816, "sha": "62a613fa", "message": "feat(data/option): add `option.mmap` and `option.maybe` (#2484)\nPlease let me know if something like this exists already! Over the last few days I've wanted it multiple times, and it is used in #2485.\n
\n
\n
", "changes": [{"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": [["add", "def", "{u", ["option"]]]}]}, {"timestamp": 1587557814, "sha": "e4abcedc", "message": "chore(data/polynomial): rename type vars (#2483)\nRename `α` to `R` etc; use `ι` for index types\nNo other changes", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "polynomial", ["is_integral_domain"]], ["mod", "def", "C", ["polynomial"]], ["mod", "theorem", "C_0", ["polynomial"]], ["mod", "theorem", "C_1", ["polynomial"]], ["mod", "theorem", "C_mul'", ["polynomial"]], ["mod", "def", "X", ["polynomial"]], ["mod", "theorem", "X_ne_zero", ["polynomial"]], ["mod", "theorem", "X_pow_sub_C_ne_zero", ["polynomial"]], ["mod", "theorem", "as_sum", ["polynomial"]], ["mod", "def", "binom_expansion", ["polynomial"]], ["mod", "theorem", "card_nth_roots", ["polynomial"]], ["mod", "theorem", "card_roots'", ["polynomial"]], ["mod", "theorem", "card_roots_X_pow_sub_C", ["polynomial"]], ["mod", "theorem", "card_roots_sub_C'", ["polynomial"]], ["mod", "theorem", "card_roots_sub_C", ["polynomial"]], ["mod", "theorem", "coe_eval₂_ring_hom", ["polynomial"]], ["mod", "theorem", "coe_norm_unit", ["polynomial"]], ["mod", "def", "coeff", ["polynomial"]], ["mod", "theorem", "coeff_C_mul", ["polynomial"]], ["mod", "theorem", "coeff_C_mul_X", ["polynomial"]], ["mod", "theorem", "coeff_X", ["polynomial"]], ["mod", "theorem", "coeff_X_one", ["polynomial"]], ["mod", "theorem", "coeff_X_zero", ["polynomial"]], ["mod", "theorem", "coeff_add", ["polynomial"]], ["mod", "def", "coeff_coe_to_fun", ["polynomial"]], ["mod", "theorem", "coeff_coe_units_zero_ne_zero", ["polynomial"]], ["mod", "theorem", "coeff_derivative", ["polynomial"]], ["mod", "theorem", "coeff_eq_zero_of_nat_degree_lt", ["polynomial"]], ["mod", "theorem", "coeff_inv_units", ["polynomial"]], ["mod", "theorem", "coeff_mk", ["polynomial"]], ["mod", "theorem", "coeff_mul", ["polynomial"]], ["mod", "theorem", "coeff_mul_X", ["polynomial"]], ["mod", "theorem", "coeff_mul_X_pow", ["polynomial"]], ["mod", "theorem", "coeff_mul_X_zero", ["polynomial"]], ["mod", "theorem", "coeff_mul_degree_add_degree", ["polynomial"]], ["mod", "theorem", "coeff_neg", ["polynomial"]], ["mod", "theorem", "coeff_one", ["polynomial"]], ["mod", "theorem", "coeff_one_zero", ["polynomial"]], ["mod", "theorem", "coeff_smul", ["polynomial"]], ["mod", "theorem", "coeff_sub", ["polynomial"]], ["mod", "theorem", "coeff_sum", ["polynomial"]], ["mod", "theorem", "coeff_zero", ["polynomial"]], ["mod", "theorem", "coeff_zero_eq_eval_zero", ["polynomial"]], ["mod", "def", "comp", ["polynomial"]], ["mod", "theorem", "comp_zero", ["polynomial"]], ["mod", "def", "decidable_dvd_monic", ["polynomial"]], ["mod", "def", "degree", ["polynomial"]], ["mod", "theorem", "degree_C_mul_X_pow_le", ["polynomial"]], ["mod", "theorem", "degree_X", ["polynomial"]], ["mod", "theorem", "degree_X_le", ["polynomial"]], ["mod", "theorem", "degree_X_pow", ["polynomial"]], ["mod", "theorem", "degree_X_pow_le", ["polynomial"]], ["mod", "theorem", "degree_X_pow_sub_C", ["polynomial"]], ["mod", "theorem", "degree_X_sub_C", ["polynomial"]], ["mod", "theorem", "degree_add_le", ["polynomial"]], ["mod", "theorem", "degree_coe_units", ["polynomial"]], ["mod", "theorem", "degree_derivative_eq", ["polynomial"]], ["mod", "theorem", "degree_div_by_monic_le", ["polynomial"]], ["mod", "theorem", "degree_div_by_monic_lt", ["polynomial"]], ["mod", "theorem", "degree_div_le", ["polynomial"]], ["mod", "theorem", "degree_eq_iff_nat_degree_eq", ["polynomial"]], ["mod", "theorem", "degree_eq_iff_nat_degree_eq_of_pos", ["polynomial"]], ["mod", "theorem", "degree_eq_one_of_irreducible_of_root", ["polynomial"]], ["mod", "theorem", "degree_erase_le", ["polynomial"]], ["mod", "theorem", "degree_le_iff_coeff_zero", ["polynomial"]], ["mod", "theorem", "degree_le_mul_left", ["polynomial"]], ["mod", "theorem", "degree_lt_wf", ["polynomial"]], ["mod", "theorem", "degree_map'", ["polynomial"]], ["mod", "theorem", "degree_map", ["polynomial"]], ["mod", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["mod", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["mod", "theorem", "degree_map_le", ["polynomial"]], ["mod", "theorem", "degree_mod_by_monic_le", ["polynomial"]], ["mod", "theorem", "degree_mod_by_monic_lt", ["polynomial"]], ["mod", "theorem", "degree_monomial_le", ["polynomial"]], ["mod", "theorem", "degree_mul_le", ["polynomial"]], ["mod", "theorem", "degree_mul_leading_coeff_inv", ["polynomial"]], ["mod", "theorem", "degree_neg", ["polynomial"]], ["mod", "theorem", "degree_one", ["polynomial"]], ["mod", "theorem", "degree_one_le", ["polynomial"]], ["mod", "theorem", "degree_pow_eq", ["polynomial"]], ["mod", "theorem", "degree_pow_le", ["polynomial"]], ["mod", "theorem", "degree_sum_le", ["polynomial"]], ["mod", "theorem", "degree_zero", ["polynomial"]], ["mod", "def", "derivative", ["polynomial"]], ["mod", "theorem", "derivative_C", ["polynomial"]], ["mod", "theorem", "derivative_X", ["polynomial"]], ["mod", "theorem", "derivative_add", ["polynomial"]], ["mod", "theorem", "derivative_eval", ["polynomial"]], ["mod", "theorem", "derivative_monomial", ["polynomial"]], ["mod", "theorem", "derivative_mul", ["polynomial"]], ["mod", "theorem", "derivative_one", ["polynomial"]], ["mod", "theorem", "derivative_sum", ["polynomial"]], ["mod", "theorem", "derivative_zero", ["polynomial"]], ["mod", "def", "div", ["polynomial"]], ["mod", "def", "div_X", ["polynomial"]], ["mod", "theorem", "div_X_C", ["polynomial"]], ["mod", "theorem", "div_X_mul_X_add", ["polynomial"]], ["mod", "def", "div_by_monic", ["polynomial"]], ["mod", "theorem", "div_by_monic_eq_div", ["polynomial"]], ["mod", "theorem", "div_by_monic_eq_of_not_monic", ["polynomial"]], ["mod", "theorem", "div_by_monic_one", ["polynomial"]], ["mod", "theorem", "div_by_monic_zero", ["polynomial"]], ["mod", "theorem", "div_mod_by_monic_unique", ["polynomial"]], ["mod", "def", "eval", ["polynomial"]], ["mod", "theorem", "eval_map", ["polynomial"]], ["mod", "theorem", "eval_neg", ["polynomial"]], ["mod", "theorem", "eval_one", ["polynomial"]], ["mod", "theorem", "eval_sub", ["polynomial"]], ["mod", "def", "eval_sub_factor", ["polynomial"]], ["mod", "theorem", "eval_sum", ["polynomial"]], ["mod", "theorem", "eval_zero", ["polynomial"]], ["mod", "def", "eval₂", ["polynomial"]], ["mod", "theorem", "eval₂_comp", ["polynomial"]], ["mod", "theorem", "eval₂_hom", ["polynomial"]], ["mod", "theorem", "eval₂_map", ["polynomial"]], ["mod", "theorem", "eval₂_neg", ["polynomial"]], ["mod", "theorem", "eval₂_one", ["polynomial"]], ["mod", "def", "eval₂_ring_hom", ["polynomial"]], ["mod", "theorem", "eval₂_sub", ["polynomial"]], ["mod", "theorem", "eval₂_sum", ["polynomial"]], ["mod", "theorem", "eval₂_zero", ["polynomial"]], ["mod", "theorem", "exists_finset_roots", ["polynomial"]], ["mod", "theorem", "ext", ["polynomial"]], ["mod", "theorem", "ext_iff", ["polynomial"]], ["mod", "theorem", "finset_sum_coeff", ["polynomial"]], ["mod", "theorem", "hom_eval₂", ["polynomial"]], ["mod", "theorem", "int_cast_eq_C", ["polynomial"]], ["mod", "def", "is_root", ["polynomial"]], ["mod", "theorem", "ite_le_nat_degree_coeff", ["polynomial"]], ["mod", "def", "lcoeff", ["polynomial"]], ["mod", "theorem", "lcoeff_apply", ["polynomial"]], ["mod", "def", "leading_coeff", ["polynomial"]], ["mod", "theorem", "leading_coeff_C", ["polynomial"]], ["mod", "theorem", "leading_coeff_X", ["polynomial"]], ["mod", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["mod", "theorem", "leading_coeff_map", ["polynomial"]], ["mod", "theorem", "leading_coeff_monomial", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["mod", "theorem", "leading_coeff_of_injective", ["polynomial"]], ["mod", "theorem", "leading_coeff_one", ["polynomial"]], ["mod", "theorem", "leading_coeff_pow", ["polynomial"]], ["mod", "theorem", "leading_coeff_zero", ["polynomial"]], ["mod", "def", "map", ["polynomial"]], ["mod", "theorem", "map_div", ["polynomial"]], ["mod", "theorem", "map_div_by_monic", ["polynomial"]], ["mod", "theorem", "map_eq_zero", ["polynomial"]], ["mod", "theorem", "map_injective", ["polynomial"]], ["mod", "theorem", "map_map", ["polynomial"]], ["mod", "theorem", "map_mod", ["polynomial"]], ["mod", "theorem", "map_mod_by_monic", ["polynomial"]], ["mod", "theorem", "map_mod_div_by_monic", ["polynomial"]], ["mod", "theorem", "map_neg", ["polynomial"]], ["mod", "theorem", "map_one", ["polynomial"]], ["mod", "theorem", "map_sub", ["polynomial"]], ["mod", "theorem", "map_zero", ["polynomial"]], ["mod", "theorem", "mem_map_range", ["polynomial"]], ["mod", "theorem", "mem_nth_roots", ["polynomial"]], ["mod", "theorem", "mem_roots_sub_C", ["polynomial"]], ["mod", "theorem", "mem_support_derivative", ["polynomial"]], ["mod", "def", "mod", ["polynomial"]], ["mod", "theorem", "mod_X_sub_C_eq_C_eval", ["polynomial"]], ["mod", "def", "mod_by_monic", ["polynomial"]], ["mod", "theorem", "mod_by_monic_X", ["polynomial"]], ["mod", "theorem", "mod_by_monic_X_sub_C_eq_C_eval", ["polynomial"]], ["mod", "theorem", "mod_by_monic_add_div", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_mod", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_of_not_monic", ["polynomial"]], ["mod", "theorem", "mod_by_monic_eq_sub_mul_div", ["polynomial"]], ["mod", "theorem", "mod_by_monic_one", ["polynomial"]], ["mod", "theorem", "mod_by_monic_zero", ["polynomial"]], ["mod", "theorem", "as_sum", ["polynomial", "monic"]], ["mod", "theorem", "leading_coeff", ["polynomial", "monic"]], ["mod", "theorem", "ne_zero", ["polynomial", "monic"]], ["mod", "theorem", "ne_zero_of_zero_ne_one", ["polynomial", "monic"]], ["mod", "def", "monic", ["polynomial"]], ["mod", "theorem", "monic_X", ["polynomial"]], ["mod", "theorem", "monic_X_add_C", ["polynomial"]], ["mod", "theorem", "monic_X_sub_C", ["polynomial"]], ["mod", "theorem", "monic_map", ["polynomial"]], ["mod", "theorem", "monic_of_injective", ["polynomial"]], ["mod", "theorem", "monic_one", ["polynomial"]], ["mod", "def", "monomial", ["polynomial"]], ["mod", "theorem", "mul_X_pow_eq_zero", ["polynomial"]], ["mod", "theorem", "multiplicity_X_sub_C_finite", ["polynomial"]], ["mod", "theorem", "nat_cast_eq_C", ["polynomial"]], ["mod", "def", "nat_degree", ["polynomial"]], ["mod", "theorem", "nat_degree_C", ["polynomial"]], ["mod", "theorem", "nat_degree_coe_units", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_of_degree_eq_some", ["polynomial"]], ["mod", "theorem", "nat_degree_int_cast", ["polynomial"]], ["mod", "theorem", "nat_degree_le_of_degree_le", ["polynomial"]], ["mod", "theorem", "nat_degree_map'", ["polynomial"]], ["mod", "theorem", "nat_degree_map", ["polynomial"]], ["mod", "theorem", "nat_degree_nat_cast", ["polynomial"]], ["mod", "theorem", "nat_degree_neg", ["polynomial"]], ["mod", "theorem", "nat_degree_one", ["polynomial"]], ["mod", "theorem", "nat_degree_pow_eq", ["polynomial"]], ["mod", "theorem", "nat_degree_zero", ["polynomial"]], ["mod", "theorem", "ne_zero_of_monic_of_zero_ne_one", ["polynomial"]], ["mod", "def", "of_polynomial_ne", ["polynomial", "nonzero_comm_ring"]], ["mod", "def", "of_polynomial_ne", ["polynomial", "nonzero_comm_semiring"]], ["mod", "theorem", "not_monic_zero", ["polynomial"]], ["mod", "def", "nth_roots", ["polynomial"]], ["mod", "theorem", "one_comp", ["polynomial"]], ["mod", "def", "pow_add_expansion", ["polynomial"]], ["mod", "theorem", "pow_root_multiplicity_dvd", ["polynomial"]], ["mod", "def", "pow_sub_pow_factor", ["polynomial"]], ["mod", "theorem", "root_mul_left_of_is_root", ["polynomial"]], ["mod", "theorem", "root_mul_right_of_is_root", ["polynomial"]], ["mod", "def", "root_multiplicity", ["polynomial"]], ["mod", "theorem", "root_multiplicity_eq_multiplicity", ["polynomial"]], ["mod", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["mod", "theorem", "sum_C_mul_X_eq", ["polynomial"]], ["mod", "theorem", "support_zero", ["polynomial"]], ["mod", "theorem", "zero_comp", ["polynomial"]], ["mod", "theorem", "zero_div_by_monic", ["polynomial"]], ["mod", "theorem", "zero_is_root_of_coeff_zero_eq_zero", ["polynomial"]], ["mod", "theorem", "zero_le_degree_iff", ["polynomial"]], ["mod", "theorem", "zero_mod_by_monic", ["polynomial"]], ["mod", "def", "polynomial", []]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}]}, {"timestamp": 1587557812, "sha": "59653709", "message": "feat(data/monoid_algebra): algebra structure, lift of morphisms (#2366)\nProve that for a monoid homomorphism `f : G →* R` from a monoid `G` to a `k`-algebra `R` there exists a unique algebra morphism `g : k[G] →ₐ[k] R` such that `∀ x : G, g (single x 1) = f x`.\nThis is expressed as `def lift : (G →* R) ≃ (monoid_algebra k G →ₐ[k] R)`.\nI want to use this to define `aeval` and `eval₂` for polynomials. This way we'll have many properties for free.", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "coe_add_monoid_hom'", []], ["mod", "theorem", "coe_add_monoid_hom", []], ["mod", "theorem", "coe_monoid_hom'", []], ["mod", "theorem", "coe_monoid_hom", []]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": [["add", "theorem", "coe_algebra_map", ["add_monoid_algebra"]], ["add", "def", "lift", ["add_monoid_algebra"]], ["add", "theorem", "mul_apply", ["add_monoid_algebra"]], ["add", "theorem", "mul_single_apply_aux", ["add_monoid_algebra"]], ["add", "theorem", "mul_single_zero_apply", ["add_monoid_algebra"]], ["add", "def", "of", ["add_monoid_algebra"]], ["add", "theorem", "of_apply", ["add_monoid_algebra"]], ["add", "theorem", "single_mul_apply_aux", ["add_monoid_algebra"]], ["mod", "theorem", "single_mul_single", ["add_monoid_algebra"]], ["add", "theorem", "single_zero_mul_apply", ["add_monoid_algebra"]], ["add", "theorem", "alg_hom_ext", ["monoid_algebra"]], ["add", "theorem", "coe_algebra_map", ["monoid_algebra"]], ["add", "def", "lift", ["monoid_algebra"]], ["add", "theorem", "lift_apply", ["monoid_algebra"]], ["add", "theorem", "lift_of", ["monoid_algebra"]], ["add", "theorem", "lift_single", ["monoid_algebra"]], ["add", "theorem", "lift_symm_apply", ["monoid_algebra"]], ["add", "theorem", "lift_unique'", ["monoid_algebra"]], ["add", "theorem", "lift_unique", ["monoid_algebra"]], ["add", "theorem", "mul_apply_antidiagonal", ["monoid_algebra"]], ["add", "theorem", "mul_single_apply_aux", ["monoid_algebra"]], ["add", "theorem", "mul_single_one_apply", ["monoid_algebra"]], ["add", "def", "of", ["monoid_algebra"]], ["add", "theorem", "of_apply", ["monoid_algebra"]], ["add", "theorem", "single_eq_algebra_map_mul_of", ["monoid_algebra"]], ["add", "theorem", "single_mul_apply_aux", ["monoid_algebra"]], ["mod", "theorem", "single_mul_single", ["monoid_algebra"]], ["add", "theorem", "single_one_mul_apply", ["monoid_algebra"]], ["add", "theorem", "single_pow", ["monoid_algebra"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_mk", ["alg_hom"]], ["add", "theorem", "coe_to_monoid_hom", ["alg_hom"]], ["add", "theorem", "coe_to_ring_hom", ["alg_hom"]], ["add", "theorem", "map_pow", ["alg_hom"]], ["add", "theorem", "map_prod", ["alg_hom"]], ["add", "theorem", "map_smul", ["alg_hom"]], ["add", "theorem", "map_sum", ["alg_hom"]], ["add", "def", "to_algebra'", ["ring_hom"]], ["mod", "def", "to_algebra", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1587546727, "sha": "142f0017", "message": "chore(cmd/where): remove unused argument (#2486)\nJust remove an unused argument from the `#where` declaration, satisfying the linter.\n
\n
\n
", "changes": [{"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}]}, {"timestamp": 1587527289, "sha": "5e2025f6", "message": "feat(group_theory/bundled_subgroup): bundled subgroup (#2140)\nAdd bundled subgroups. While `is_subgroup` is a class taking `s : set G` as an argument, `subgroup G` is a structure with a field `carrier : set G` and a coercion to `set G`.", "changes": [{"oldPath": null, "newPath": "src/group_theory/bundled_subgroup.lean", "changes": [["add", "theorem", "gsmul_mem", ["add_subgroup"]], ["add", "theorem", "mem_closure_singleton", ["add_subgroup"]], ["add", "def", "of_subgroup", ["add_subgroup"]], ["add", "def", "to_subgroup", ["add_subgroup"]], ["add", "structure", "add_subgroup", []], ["add", "theorem", "coe_range", ["monoid_hom"]], ["add", "theorem", "comap_ker", ["monoid_hom"]], ["add", "def", "eq_locus", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_dense", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_top", ["monoid_hom"]], ["add", "theorem", "eq_on_closure", ["monoid_hom"]], ["add", "theorem", "gclosure_preimage_le", ["monoid_hom"]], ["add", "def", "ker", ["monoid_hom"]], ["add", "theorem", "map_closure", ["monoid_hom"]], ["add", "theorem", "map_range", ["monoid_hom"]], ["add", "theorem", "mem_ker", ["monoid_hom"]], ["add", "theorem", "mem_range", ["monoid_hom"]], ["add", "theorem", "rang_top_of_surjective", ["monoid_hom"]], ["add", "def", "range", ["monoid_hom"]], ["add", "theorem", "range_top_iff_surjective", ["monoid_hom"]], ["add", "def", "subgroup_congr", ["mul_equiv"]], ["add", "def", "add_subgroup_equiv", ["subgroup"]], ["add", "theorem", "bot_prod_bot", ["subgroup"]], ["add", "def", "closure", ["subgroup"]], ["add", "theorem", "closure_Union", ["subgroup"]], ["add", "theorem", "closure_empty", ["subgroup"]], ["add", "theorem", "closure_eq", ["subgroup"]], ["add", "theorem", "closure_eq_of_le", ["subgroup"]], ["add", "theorem", "closure_induction", ["subgroup"]], ["add", "theorem", "closure_le", ["subgroup"]], ["add", "theorem", "closure_mono", ["subgroup"]], ["add", "theorem", "closure_union", ["subgroup"]], ["add", "theorem", "closure_univ", ["subgroup"]], ["add", "theorem", "coe_Inf", ["subgroup"]], ["add", "theorem", "coe_bot", ["subgroup"]], ["add", "theorem", "coe_coe", ["subgroup"]], ["add", "theorem", "coe_comap", ["subgroup"]], ["add", "theorem", "coe_inf", ["subgroup"]], ["add", "theorem", "coe_inv", ["subgroup"]], ["add", "theorem", "coe_map", ["subgroup"]], ["add", "theorem", "coe_mul", ["subgroup"]], ["add", "theorem", "coe_one", ["subgroup"]], ["add", "theorem", "coe_prod", ["subgroup"]], ["add", "theorem", "coe_ssubset_coe", ["subgroup"]], ["add", "theorem", "coe_subset_coe", ["subgroup"]], ["add", "theorem", "coe_subtype", ["subgroup"]], ["add", "theorem", "coe_top", ["subgroup"]], ["add", "def", "comap", ["subgroup"]], ["add", "theorem", "comap_comap", ["subgroup"]], ["add", "theorem", "comap_inf", ["subgroup"]], ["add", "theorem", "comap_infi", ["subgroup"]], ["add", "theorem", "comap_top", ["subgroup"]], ["add", "theorem", "ext'", ["subgroup"]], ["add", "theorem", "ext", ["subgroup"]], ["add", "theorem", "gc_map_comap", ["subgroup"]], ["add", "theorem", "gpow_mem", ["subgroup"]], ["add", "theorem", "inv_mem", ["subgroup"]], ["add", "theorem", "le_def", ["subgroup"]], ["add", "theorem", "list_prod_mem", ["subgroup"]], ["add", "def", "map", ["subgroup"]], ["add", "theorem", "map_bot", ["subgroup"]], ["add", "theorem", "map_le_iff_le_comap", ["subgroup"]], ["add", "theorem", "map_map", ["subgroup"]], ["add", "theorem", "map_sup", ["subgroup"]], ["add", "theorem", "map_supr", ["subgroup"]], ["add", "theorem", "mem_Inf", ["subgroup"]], ["add", "theorem", "mem_Sup_of_directed_on", ["subgroup"]], ["add", "theorem", "mem_bot", ["subgroup"]], ["add", "theorem", "mem_closure", ["subgroup"]], ["add", "theorem", "mem_closure_singleton", ["subgroup"]], ["add", "theorem", "mem_coe", ["subgroup"]], ["add", "theorem", "mem_comap", ["subgroup"]], ["add", "theorem", "mem_inf", ["subgroup"]], ["add", "theorem", "mem_map", ["subgroup"]], ["add", "theorem", "mem_prod", ["subgroup"]], ["add", "theorem", "mem_supr_of_directed", ["subgroup"]], ["add", "theorem", "mem_top", ["subgroup"]], ["add", "theorem", "mul_mem", ["subgroup"]], ["add", "theorem", "multiset_prod_mem", ["subgroup"]], ["add", "def", "of", ["subgroup"]], ["add", "def", "of_add_subgroup", ["subgroup"]], ["add", "theorem", "one_mem", ["subgroup"]], ["add", "theorem", "pow_mem", ["subgroup"]], ["add", "def", "prod", ["subgroup"]], ["add", "def", "prod_equiv", ["subgroup"]], ["add", "theorem", "prod_mem", ["subgroup"]], ["add", "theorem", "prod_mono", ["subgroup"]], ["add", "theorem", "prod_mono_left", ["subgroup"]], ["add", "theorem", "prod_mono_right", ["subgroup"]], ["add", "theorem", "prod_top", ["subgroup"]], ["add", "theorem", "subset_closure", ["subgroup"]], ["add", "def", "subtype", ["subgroup"]], ["add", "def", "to_add_subgroup", ["subgroup"]], ["add", "theorem", "top_prod", ["subgroup"]], ["add", "theorem", "top_prod_top", ["subgroup"]], ["add", "structure", "subgroup", []]]}]}, {"timestamp": 1587501965, "sha": "585d77ae", "message": "chore(scripts): update nolints.txt (#2482)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587489395, "sha": "ffa97d0f", "message": "fix(tactic/where): remove hackery from `#where`, using Lean 3c APIs (#2465)\nWe remove almost all of the hackery from `#where`, using the Lean 3c APIs exposed by @cipher1024. In doing so we add pair of library functions which make this a tad more convenient.\nThe last \"hack\" which remains is by far the most mild; we expose `lean.parser.get_current_namespace`, which creates a dummy definition in the environment in order to obtain the current namespace. Of course this should be replaced with an exposed C++ function when the time comes (crossref with the leanprover-community/lean issue here: https://github.com/leanprover-community/lean/issues/196).", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": [["del", "def", "inflate", ["where"]]]}, {"oldPath": null, "newPath": "test/where.lean", "changes": []}]}, {"timestamp": 1587465465, "sha": "533a5523", "message": "feat(tactic/hint): if hint can solve the goal, say so (#2474)\nIt used to be that `hint` would print:\n```\nthe following tactics make progress:\n----\ntac1\ntac2\ntac3\n```\nwith the tactics listed in order of number of resulting goals. In particular, if `tac1` and `tac2` actually solve the goal, while `tac3` only makes progress, this isn't explained.\nWith this PR, if any of those tactics actually close the goal, we only print those tactics, with text:\n```\nthe following tactics solve the goal:\n----\ntac1\ntac2\n```", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "test/hint.lean", "newPath": "test/hint.lean", "changes": []}]}, {"timestamp": 1587465462, "sha": "15d35b1a", "message": "feat(tactic/#simp): a user_command for #simp (#2446)\n```lean\n#simp 5 - 5\n```\nprints `0`.\nIf anyone knows how to get access to local `variables` while parsing an expression, that would be awesome. Then we could write \n```lean\nvariable (x : ℝ)\n#simp [exp_ne_zero] : deriv (λ x, (sin x) / (exp x)) x\n```\nas well as\n```lean\n#simp [exp_ne_zero] : λ x, deriv (λ x, (sin x) / (exp x)) x\n```", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/simp_command.lean", "changes": []}, {"oldPath": null, "newPath": "test/simp_command.lean", "changes": [["add", "def", "f", []]]}]}, {"timestamp": 1587454960, "sha": "df84064e", "message": "fix(tactic/clear): don't use rb_map unnecessarily (#2325)\nThe `clear_dependent` tactic seems to unnecessarily convert `list` back and forth to an `rb_map`, for no purpose, and this makes the internal tactic unnecessarily difficult to call.", "changes": [{"oldPath": "src/tactic/clear.lean", "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1587445936, "sha": "3edb6a4a", "message": "fix(category_theory/concrete): access the carrier type by the coercion (#2473)\nThis should marginally reduce the pain of using concrete categories, as the underlying types of a bundled object should more uniformly described via a coercion, rather than the `.α` projection.\n(There's still some separate pain involving `bundled.map`, but it has an orthogonal fix which I'm working on in another branch.)", "changes": [{"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": [["add", "theorem", "coe_mk", ["category_theory", "bundled"]]]}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}]}, {"timestamp": 1587431820, "sha": "7a13a11a", "message": "chore(category_theory): delete two empty files (#2472)", "changes": [{"oldPath": "src/category_theory/limits/shapes/constructions/finite_products.lean", "newPath": null, "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/sums.lean", "newPath": null, "changes": []}]}, {"timestamp": 1587406781, "sha": "5d0a7240", "message": "chore(docs/naming): update (#2468)\nThis file has been bit-rotting.", "changes": [{"oldPath": "docs/contribute/naming.md", "newPath": "docs/contribute/naming.md", "changes": []}]}, {"timestamp": 1587397017, "sha": "76267637", "message": "fix(algebra/category/*/colimits): cleaning up (#2469)\nWith the passage of time, it seems some difficulties have dissolved away, and steps in the semi-automated construction of colimits in algebraic categories which previously required `rw` or even `erw`, can now be handled by `simp`. Yay!", "changes": [{"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}]}, {"timestamp": 1587397015, "sha": "8adfafd9", "message": "feat(data/nat,data/int): add some modular arithmetic lemmas (#2460)\nThese lemmas (a) were found useful in formalising solutions to some\nolympiad problems, see\n;\n(b) seem more generally relevant than to just those particular\nproblems; (c) do not show up through library_search as being already\npresent.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "dvd_sub_of_mod_eq", ["int"]], ["add", "theorem", "eq_of_mod_eq_of_nat_abs_sub_lt_nat_abs", ["int"]], ["add", "theorem", "eq_zero_of_dvd_of_nat_abs_lt_nat_abs", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "eq_zero_of_dvd_of_lt", ["nat"]], ["add", "theorem", "sub_mod_eq_zero_of_mod_eq", ["nat"]]]}]}, {"timestamp": 1587397013, "sha": "d1ba87a9", "message": "feat(category_theory/faithful): faithful.of_iso (#2453)\nA minor useful lemma, about to be abandoned on another branch.", "changes": [{"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "theorem", "of_comp_iso", ["category_theory", "faithful"]], ["add", "theorem", "of_iso", ["category_theory", "faithful"]]]}]}, {"timestamp": 1587397011, "sha": "51e03aad", "message": "feat(data/monoid_algebra): the distrib_mul_action (#2417)", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "def", "comap_distrib_mul_action", ["finsupp"]], ["add", "def", "comap_distrib_mul_action_self", ["finsupp"]], ["add", "def", "comap_has_scalar", ["finsupp"]], ["add", "def", "comap_mul_action", ["finsupp"]], ["add", "theorem", "comap_smul_apply", ["finsupp"]], ["add", "theorem", "comap_smul_single", ["finsupp"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "def", "regular", ["mul_action"]]]}]}, {"timestamp": 1587392658, "sha": "036b0386", "message": "chore(category_theory/opposites): typo fix (#2466)\nAs mentioned in #2464.", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}]}, {"timestamp": 1587388551, "sha": "59a767ee", "message": "chore(scripts): update nolints.txt (#2467)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587381494, "sha": "44743821", "message": "feat(category_theory/opposites): some opposite category properties (#2464)\nAdd some more basic properties relating to the opposite category.\nMake sure you have:\n * [x] reviewed and applied the coding style: [coding](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/style.md), [naming](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/naming.md)\n * [x] reviewed and applied [the documentation requirements](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/doc.md)\n * [x] make sure definitions and lemmas are put in the right files\n * [x] make sure definitions and lemmas are not redundant\nFor reviewers: [code review check list](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/code-review.md)\nIf you're confused by comments on your PR like `bors r+` or `bors d+`, please see our [notes on bors](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/bors.md) for information on our merging workflow.", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "def", "op_op_equivalence", ["category_theory"]], ["add", "def", "unop_unop", ["category_theory"]]]}]}, {"timestamp": 1587371212, "sha": "58088cc9", "message": "fix(tactic/delta_instance): handle universe metavariables (#2463)", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "test/delta_instance.lean", "newPath": "test/delta_instance.lean", "changes": []}]}, {"timestamp": 1587367055, "sha": "9b255781", "message": "fix(category_theory/limits): avoid a rewrite in a definition (#2458)\nThe proof that every equalizer of `f` and `g` is an isomorphism if `f = g` had an ugly rewrite in a definition (introduced by yours truly). This PR reformulates the proof in a cleaner way by working with two morphisms `f` and `g` and a proof of `f = g` right from the start, which is easy to specialze to the case `(f, f)`, instead of trying to reduce the `(f, g)` case to the `(f, f)` case by rewriting.\nThis also lets us get rid of `fork.eq_of_ι_ι`, unless someone wants to keep it, but personally I don't think that using it is ever a good idea.", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["del", "def", "cocone_parallel_pair_self", ["category_theory", "limits"]], ["del", "theorem", "cocone_parallel_pair_self_X", ["category_theory", "limits"]], ["del", "theorem", "cocone_parallel_pair_self_ι_app_one", ["category_theory", "limits"]], ["add", "def", "π_of_eq", ["category_theory", "limits", "coequalizer"]], ["del", "def", "π_of_self'", ["category_theory", "limits", "coequalizer"]], ["del", "theorem", "eq_of_π_π", ["category_theory", "limits", "cofork"]], ["del", "def", "colimit_cocone_parallel_pair_self_is_iso'", ["category_theory", "limits"]], ["del", "def", "colimit_cocone_parallel_pair_self_is_iso", ["category_theory", "limits"]], ["del", "def", "cone_parallel_pair_self", ["category_theory", "limits"]], ["del", "theorem", "cone_parallel_pair_self_X", ["category_theory", "limits"]], ["del", "theorem", "cone_parallel_pair_self_π_app_zero", ["category_theory", "limits"]], ["del", "def", "epi_limit_cone_parallel_pair_is_iso", ["category_theory", "limits"]], ["add", "def", "ι_of_eq", ["category_theory", "limits", "equalizer"]], ["del", "def", "ι_of_self'", ["category_theory", "limits", "equalizer"]], ["del", "theorem", "eq_of_ι_ι", ["category_theory", "limits", "fork"]], ["add", "def", "id_cofork", ["category_theory", "limits"]], ["add", "def", "id_fork", ["category_theory", "limits"]], ["del", "def", "is_colimit_cocone_parallel_pair_self", ["category_theory", "limits"]], ["add", "def", "is_colimit_id_cofork", ["category_theory", "limits"]], ["add", "def", "is_iso_colimit_cocone_parallel_pair_of_eq", ["category_theory", "limits"]], ["add", "def", "is_iso_colimit_cocone_parallel_pair_of_self", ["category_theory", "limits"]], ["add", "def", "is_iso_limit_cocone_parallel_pair_of_epi", ["category_theory", "limits"]], ["add", "def", "is_iso_limit_cone_parallel_pair_of_epi", ["category_theory", "limits"]], ["add", "def", "is_iso_limit_cone_parallel_pair_of_eq", ["category_theory", "limits"]], ["add", "def", "is_iso_limit_cone_parallel_pair_of_self", ["category_theory", "limits"]], ["del", "def", "is_limit_cone_parallel_pair_self", ["category_theory", "limits"]], ["add", "def", "is_limit_id_fork", ["category_theory", "limits"]], ["del", "def", "limit_cone_parallel_pair_self_is_iso'", ["category_theory", "limits"]], ["del", "def", "limit_cone_parallel_pair_self_is_iso", ["category_theory", "limits"]], ["del", "def", "mono_limit_cocone_parallel_pair_is_iso", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}]}, {"timestamp": 1587346602, "sha": "c0afa80e", "message": "chore(tactic/simp_result): forgot to import in tactic.basic (#2462)\nWhen I write a new tactic, I tend not to import it into `tactic.basic` or `tactic.interactive` while testing it and PR'ing it, to save having to recompile the whole library every time I tweak the tactic.\nBut then, inevitably, I forget to add the import before the review process is finished.\nThis imports `simp_result`, from #2356, into `tactic.basic`.", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1587309488, "sha": "a8edb5e2", "message": "fix(category_theory/limits): make image.map_comp a simp lemma (#2456)\nThis was not possible in Lean 3.8. Many thanks to @gebner for tracking down and fixing leanprover-community/lean#181 in Lean 3.9.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}]}, {"timestamp": 1587309486, "sha": "e6aa533b", "message": "fix(category_theory/limits): remove an unnecessary axiom in has_image_map (#2455)\nI somehow missed the fact that `has_image_map.factor_map` is actually a consequence of `has_image_map.map_ι` together with the fact that `image.ι` is always a monomorphism.", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "factor_map", ["category_theory", "limits", "has_image_map"]]]}]}, {"timestamp": 1587304803, "sha": "aa55f8b5", "message": "feat(category_theory/eq_to_iso): missing simp lemma (#2454)\nA missing simp lemma.", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "inv", ["category_theory", "eq_to_iso"]]]}]}, {"timestamp": 1587304801, "sha": "9801c1c0", "message": "feat(continued_fractions) add stabilisation under termination lemmas (#2451)\n- continued fractions: add lemmas for stabilisation of computations under termination and add them to default exports\n- seq: make argument in seq.terminated_stable explicit", "changes": [{"oldPath": "src/algebra/continued_fractions/default.lean", "newPath": "src/algebra/continued_fractions/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/terminated_stable.lean", "changes": [["add", "theorem", "continuants_aux_stable_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "continuants_aux_stable_step_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "continuants_stable_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "convergents'_aux_stable_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "convergents'_aux_stable_step_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "convergents'_stable_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "convergents_stable_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "denominators_stable_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "numerators_stable_of_terminated", ["generalized_continued_fraction"]], ["add", "theorem", "terminated_stable", ["generalized_continued_fraction"]]]}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["mod", "theorem", "terminated_stable", ["seq"]]]}]}, {"timestamp": 1587301377, "sha": "6054f7c9", "message": "chore(number_theory/sum_four_squares): slightly shorten proof (#2457)\nThis proof was unnecessarily long due to a ring bug which has now been fixed.", "changes": [{"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}]}, {"timestamp": 1587325813, "sha": "d344310e", "message": "chore(category_theory/monoidal): some arguments that need to be made explicit in 3.8", "changes": [{"oldPath": "src/category_theory/monoidal/functorial.lean", "newPath": "src/category_theory/monoidal/functorial.lean", "changes": []}]}, {"timestamp": 1587283112, "sha": "11d89a2f", "message": "chore(algebra/module): replace typeclass arguments with inferred arguments (#2444)\nThis doesn't change the explicit type signature of any functions, but makes some inferable typeclass arguments implicit.\nBeyond the potential performance improvement, my motivation for doing this was that in `monoid_algebra` we currently have two possible `module k (monoid_algebra k G)` instances: one directly from `monoid_algebra.module`, and another one via `restrict_scalars`. These are equal, but not definitionally. In another experimental branch, I couldn't even express the isomorphism between these module structures, because type inference was filling in the `monoid_algebra.module` instance in composition of linear maps, and then failing because one of the linear maps was actually using the other module structure...\nThis change fixes this.", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "def", "comp", ["linear_map"]], ["mod", "theorem", "comp_apply", ["linear_map"]], ["mod", "theorem", "ext", ["linear_map"]], ["mod", "theorem", "ext_iff", ["linear_map"]], ["mod", "def", "id", ["linear_map"]], ["mod", "theorem", "id_apply", ["linear_map"]], ["mod", "def", "to_add_monoid_hom", ["linear_map"]], ["mod", "theorem", "to_add_monoid_hom_coe", ["linear_map"]], ["mod", "theorem", "to_fun_eq_coe", ["linear_map"]], ["mod", "theorem", "ext'", ["submodule"]], ["mod", "theorem", "ext", ["submodule"]], ["mod", "theorem", "subtype_eq_val", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "apply_symm_apply", ["linear_equiv"]], ["mod", "theorem", "coe_apply", ["linear_equiv"]], ["mod", "theorem", "coe_prod", ["linear_equiv"]], ["mod", "theorem", "eq_bot_of_equiv", ["linear_equiv"]], ["mod", "theorem", "ext", ["linear_equiv"]], ["mod", "theorem", "map_add", ["linear_equiv"]], ["mod", "theorem", "map_eq_zero_iff", ["linear_equiv"]], ["mod", "theorem", "map_ne_zero_iff", ["linear_equiv"]], ["mod", "theorem", "map_neg", ["linear_equiv"]], ["mod", "theorem", "map_smul", ["linear_equiv"]], ["mod", "theorem", "map_sub", ["linear_equiv"]], ["mod", "theorem", "map_zero", ["linear_equiv"]], ["mod", "theorem", "of_bijective_apply", ["linear_equiv"]], ["mod", "def", "of_linear", ["linear_equiv"]], ["mod", "theorem", "of_linear_apply", ["linear_equiv"]], ["mod", "theorem", "of_linear_symm_apply", ["linear_equiv"]], ["mod", "def", "of_top", ["linear_equiv"]], ["mod", "theorem", "of_top_apply", ["linear_equiv"]], ["mod", "theorem", "of_top_symm_apply", ["linear_equiv"]], ["mod", "theorem", "prod_apply", ["linear_equiv"]], ["mod", "theorem", "prod_symm", ["linear_equiv"]], ["mod", "def", "refl", ["linear_equiv"]], ["mod", "theorem", "refl_apply", ["linear_equiv"]], ["mod", "theorem", "skew_prod_apply", ["linear_equiv"]], ["mod", "theorem", "skew_prod_symm_apply", ["linear_equiv"]], ["mod", "def", "symm", ["linear_equiv"]], ["mod", "theorem", "symm_apply_apply", ["linear_equiv"]], ["mod", "theorem", "symm_symm", ["linear_equiv"]], ["mod", "theorem", "symm_symm_apply", ["linear_equiv"]], ["mod", "def", "to_add_equiv", ["linear_equiv"]], ["mod", "def", "trans", ["linear_equiv"]], ["mod", "theorem", "trans_apply", ["linear_equiv"]]]}]}, {"timestamp": 1587261309, "sha": "0ceac44d", "message": "feat(data/nat/prime) factors of a prime number is the list [p] (#2452)\nThe factors of a prime number are [p].", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "factors_prime", ["nat"]]]}]}, {"timestamp": 1587253628, "sha": "99245b33", "message": "chore(*): switch to lean 3.9.0 (#2449)\nIt's been too long since the last Lean release.", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": [["del", "theorem", "read_foreach_aux", ["array"]], ["mod", "theorem", "read_map", ["array"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1587253626, "sha": "d76a882d", "message": "feat(category_theory/limits/over): over category has connected limits (#2438)\nShow that the forgetful functor from the over category creates connected limits.\nThe key consequence of this is that the over category has equalizers, which we will use to show that it has all (finite) limits if the base category does.\nI've also moved the connected category examples into `category_theory/connected.lean`.\nAlso I removed the proof of\n`instance {B : C} [has_pullbacks.{v} C] : has_pullbacks.{v} (over B)`\nwhich I wrote and semorrison massively improved, as the new instances generalise it. \nI also added a `reassoc` for `is_limit.fac`, which simplified one of the proofs I had.", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/connected.lean", "newPath": "src/category_theory/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/connected.lean", "newPath": "src/category_theory/limits/connected.lean", "changes": []}, {"oldPath": "src/category_theory/limits/creates.lean", "newPath": "src/category_theory/limits/creates.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["add", "def", "nat_trans_in_over", ["category_theory", "over", "creates_connected"]], ["add", "def", "raise_cone", ["category_theory", "over", "creates_connected"]], ["add", "def", "raised_cone_is_limit", ["category_theory", "over", "creates_connected"]], ["add", "theorem", "raised_cone_lowers_to_original", ["category_theory", "over", "creates_connected"]]]}]}, {"timestamp": 1587247143, "sha": "8ec447d8", "message": "fix(*): remove `@[nolint simp_nf]` (#2450)\nThis removes a couple more nolints:\n - `coe_units_equiv_ne_zero` doesn't cause any problems anymore\n - `coe_mk` is redundant\n - `mk_eq_div` was not in simp-normal form (previously the linter timed out instead of reporting it as an error)\n - `factor_set.coe_add` is redundant", "changes": [{"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1587232118, "sha": "5107c2bd", "message": "fix(docs/extra/calc.md): remove extra space (#2448)\nThis was breaking the rendered doc at https://leanprover-community.github.io/mathlib_docs/calc.html#using-more-than-one-operator", "changes": [{"oldPath": "docs/extras/calc.md", "newPath": "docs/extras/calc.md", "changes": []}]}, {"timestamp": 1587232116, "sha": "16552e6a", "message": "fix(group_theory/submonoid): looping simp lemma (#2447)\nRemoves a `@[nolint simp_nf]`. I have no idea why I didn't notice this earlier, but `coe_coe` loops due to `coe_sort_coe_base` since `submonoid` doesn't have it's own `has_coe_to_sort` instance.", "changes": [{"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}]}, {"timestamp": 1587222921, "sha": "4e872238", "message": "feat(tactic/transport): transport structures across equivalences (#2251)\n~~Blocked by #2246.~~\n~~Blocked on #2319 and #2334, which both fix lower tactic layers used by `transport`.~~\nFrom the doc-string:\n---\nGiven a goal `⊢ S β` for some parametrized structure type `S`,\n`transport` will look for a hypothesis `s : S α` and an equivalence `e : α ≃ β`,\nand attempt to close the goal by transporting `s` across the equivalence `e`.\n```lean\nexample {α : Type} [ring α] {β : Type} (e : α ≃ β) : ring β :=\nby transport.\n```\nYou can specify the object to transport using `transport s`,\nand the equivalence to transport across using `transport s using e`.\n---\nYou can just as easily transport a [`semilattice_sup_top`](https://leanprover.zulipchat.com/#narrow/stream/116395-maths/topic/lattice.20with.20antiautomorphism) or a `lie_ring`.\nIn the `test/transport.lean` file we transport `semiring` from `nat` to `mynat`, and verify that it's possible to do simple things with the transported structure.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "apply_eq_iff_eq_symm_apply", ["equiv"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": [["mod", "def", "map", ["monoid"]]]}, {"oldPath": null, "newPath": "test/transport/basic.lean", "changes": [["add", "def", "map", ["lie_ring"]], ["add", "inductive", "mynat", []], ["add", "theorem", "mynat_add_def", []], ["add", "def", "mynat_equiv", []], ["add", "theorem", "mynat_equiv_apply_succ", []], ["add", "theorem", "mynat_equiv_apply_zero", []], ["add", "theorem", "mynat_equiv_symm_apply_succ", []], ["add", "theorem", "mynat_equiv_symm_apply_zero", []], ["add", "theorem", "mynat_mul_def", []], ["add", "theorem", "mynat_one_def", []], ["add", "theorem", "mynat_zero_def", []], ["add", "def", "map", ["semiring"]], ["add", "def", "map", ["sup_top"]]]}]}, {"timestamp": 1587212635, "sha": "ffb99a33", "message": "chore(algebra/group/type_tags): add `additive.to_mul` etc (#2363)\nDon't make `additive` and `multiplicative` irreducible (yet?) because\nit breaks compilation here and there.\nAlso prove that homomorphisms from `ℕ`, `ℤ` and their `multiplicative`\nversions are defined by the image of `1`.", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["add", "def", "of_mul", ["additive"]], ["add", "def", "to_mul", ["additive"]], ["add", "def", "of_add", ["multiplicative"]], ["add", "def", "to_add", ["multiplicative"]], ["add", "theorem", "of_add_add", []], ["add", "theorem", "of_add_inj", []], ["add", "theorem", "of_add_neg", []], ["add", "theorem", "of_add_to_add", []], ["add", "theorem", "of_add_zero", []], ["add", "theorem", "of_mul_inj", []], ["add", "theorem", "of_mul_inv", []], ["add", "theorem", "of_mul_mul", []], ["add", "theorem", "of_mul_one", []], ["add", "theorem", "of_mul_to_mul", []], ["add", "theorem", "to_add_inj", []], ["add", "theorem", "to_add_inv", []], ["add", "theorem", "to_add_mul", []], ["add", "theorem", "to_add_of_add", []], ["add", "theorem", "to_add_one", []], ["add", "theorem", "to_mul_add", []], ["add", "theorem", "to_mul_inj", []], ["add", "theorem", "to_mul_neg", []], ["add", "theorem", "to_mul_of_mul", []], ["add", "theorem", "to_mul_zero", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "def", "gmultiples_hom", []], ["add", "theorem", "gpow_of_add", []], ["add", "def", "gpowers_hom", []], ["add", "def", "multiples_hom", []], ["add", "theorem", "pow_of_add", []], ["add", "def", "powers_hom", []]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "closure_singleton_eq", ["add_submonoid"]], ["mod", "theorem", "mem_closure_singleton", ["add_submonoid"]], ["add", "theorem", "closure_singleton_eq", ["submonoid"]]]}]}, {"timestamp": 1587204222, "sha": "8b21231c", "message": "chore(data/mv_polynomial): adding a comment about a T50000 regression (#2442)", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}]}, {"timestamp": 1587195197, "sha": "a530a817", "message": "refactor(data/nat/fib): simplify proof of fib_succ_succ (#2443)\nBy tweaking some of the lemmas, I managed to shorten `fib_succ_succ` from 7 complicated lines to a single call to `simp`.\nAn alternative expression would be:\n```lean\nunfold fib,\nrepeat { rw fib_aux_stream_succ },\nunfold fib_aux_step,\n```\nI can change to that if you think the `simp` is too pithy.", "changes": [{"oldPath": "src/data/nat/fib.lean", "newPath": "src/data/nat/fib.lean", "changes": []}]}, {"timestamp": 1587183178, "sha": "1ef989f8", "message": "docs(install/*): put extra emphasis (#2439)\nPut extra emphasis on creating and working with projects\nIf people like this change I'll also make it on the other pages.", "changes": [{"oldPath": "docs/install/debian.md", "newPath": "docs/install/debian.md", "changes": []}, {"oldPath": "docs/install/debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1587170882, "sha": "6b095759", "message": "feat(tactic/lint): lint for missing has_coe_to_fun instances (#2437)\nEnforces the library note \"function coercion\":\nhttps://github.com/leanprover-community/mathlib/blob/715be9f7466f30f1d4cbff4e870530af43767fba/src/logic/basic.lean#L69-L94\nSee #2434 for a recent PR where this issue popped up.", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "theorem", "id_coe_fn", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": null, "newPath": "test/lint_coe_to_fun.lean", "changes": [["add", "structure", "equiv", []], ["add", "structure", "sparkling_equiv", []]]}]}, {"timestamp": 1587157209, "sha": "24d464c6", "message": "fix(github/workflows): ignore new bors branch (#2441)\nTwo hours ago, bors renamed the temporary branches. https://github.com/bors-ng/bors-ng/pull/933 :roll_eyes:", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1587152936, "sha": "da292759", "message": "chore(scripts): update nolints.txt (#2440)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587141037, "sha": "64f6903e", "message": "chore(*): migrate `nat/int/rat.eq_cast` to bundled homs (#2427)\nNow it is `ring_hom.eq_*_cast`, `ring_hom.map_*_cast`, `add_monoid_hom.eq_int/nat_cast`.\nAlso turn `complex.of_real` into a `ring_hom`.", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "def", "of_real", ["complex"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "eq_int_cast", ["add_monoid_hom"]], ["mod", "theorem", "cast_id", ["int"]], ["del", "theorem", "eq_cast", ["int"]], ["add", "def", "of_nat_hom", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "eq_nat_cast", ["add_monoid_hom"]], ["mod", "theorem", "cast_id", ["nat"]], ["del", "theorem", "eq_cast'", ["nat"]], ["del", "theorem", "eq_cast", ["nat"]], ["add", "theorem", "eq_nat_cast", ["ring_hom"]], ["mod", "theorem", "map_nat_cast", ["ring_hom"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["del", "theorem", "eq_cast", ["rat"]], ["del", "theorem", "eq_cast_of_ne_zero", ["rat"]], ["add", "theorem", "eq_rat_cast", ["ring_hom"]], ["add", "theorem", "map_rat_cast", ["ring_hom"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "def", "of_rat", ["real"]]]}]}, {"timestamp": 1587131080, "sha": "855e70bf", "message": "feat(data/nat): Results about nat.choose (#2421)\nA convenience lemma for symmetry of choose and inequalities about choose.\nMore results from my combinatorics project.", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "choose_symm_add", ["nat"]], ["add", "theorem", "choose_symm_of_eq_add", ["nat"]]]}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": [["add", "theorem", "choose_le_middle", []], ["add", "theorem", "choose_le_succ_of_lt_half_left", []]]}]}, {"timestamp": 1587116341, "sha": "0bc15f82", "message": "feat(analysis/analytic/composition): the composition of analytic functions is analytic (#2399)\nThe composition of analytic functions is analytic. \nThe argument is the following. Assume `g z = ∑ qₙ (z, ..., z)` and `f y = ∑ pₖ (y, ..., y)`. Then\n```\ng (f y) = ∑ qₙ (∑ pₖ (y, ..., y), ..., ∑ pₖ (y, ..., y))\n= ∑ qₙ (p_{i₁} (y, ..., y), ..., p_{iₙ} (y, ..., y)).\n```\nFor each `n` and `i₁, ..., iₙ`, define a `i₁ + ... + iₙ` multilinear function mapping\n`(y₀, ..., y_{i₁ + ... + iₙ - 1})` to\n`qₙ (p_{i₁} (y₀, ..., y_{i₁-1}), p_{i₂} (y_{i₁}, ..., y_{i₁ + i₂ - 1}), ..., p_{iₙ} (....)))`.\nThen `g ∘ f` is obtained by summing all these multilinear functions.\nThe main difficulty is to make sense of this (especially the ellipsis) in a way that Lean understands. For this, this PR uses a structure containing a decomposition of `n` as a sum `i_1 + ... i_k` (called `composition`), and a whole interface around it developed in #2398. Once it is available, the main proof is not too hard.\nThis supersedes #2328, after a new start implementing compositions using sequences.", "changes": [{"oldPath": null, "newPath": "src/analysis/analytic/composition.lean", "changes": [["add", "theorem", "comp", ["analytic_at"]], ["add", "def", "apply_composition", ["formal_multilinear_series"]], ["add", "theorem", "apply_composition_update", ["formal_multilinear_series"]], ["add", "def", "comp_along_composition", ["formal_multilinear_series"]], ["add", "def", "comp_along_composition_multilinear", ["formal_multilinear_series"]], ["add", "theorem", "comp_along_composition_multilinear_bound", ["formal_multilinear_series"]], ["add", "theorem", "comp_along_composition_nnnorm", ["formal_multilinear_series"]], ["add", "theorem", "comp_along_composition_norm", ["formal_multilinear_series"]], ["add", "def", "comp_change_of_variables", ["formal_multilinear_series"]], ["add", "theorem", "comp_change_of_variables_blocks_fun", ["formal_multilinear_series"]], ["add", "theorem", "comp_change_of_variables_length", ["formal_multilinear_series"]], ["add", "theorem", "comp_partial_sum", ["formal_multilinear_series"]], ["add", "def", "comp_partial_sum_source", ["formal_multilinear_series"]], ["add", "def", "comp_partial_sum_target", ["formal_multilinear_series"]], ["add", "def", "comp_partial_sum_target_set", ["formal_multilinear_series"]], ["add", "theorem", "comp_partial_sum_target_subset_image_comp_partial_sum_source", ["formal_multilinear_series"]], ["add", "theorem", "comp_partial_sum_target_tendsto_at_top", ["formal_multilinear_series"]], ["add", "theorem", "comp_summable_nnreal", ["formal_multilinear_series"]], ["add", "theorem", "le_comp_radius_of_summable", ["formal_multilinear_series"]], ["add", "theorem", "mem_comp_partial_sum_source_iff", ["formal_multilinear_series"]], ["add", "theorem", "mem_comp_partial_sum_target_iff", ["formal_multilinear_series"]], ["add", "theorem", "comp", ["has_fpower_series_at"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_sum_le", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "pow_le_pow", ["ennreal"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "update_comp_eq_of_injective", ["function"]], ["add", "theorem", "update_comp_eq_of_not_mem_range", ["function"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_at_top_finset", ["filter", "monotone"]]]}]}, {"timestamp": 1587106625, "sha": "715be9f7", "message": "chore(scripts): update nolints.txt (#2436)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587102831, "sha": "0567b7fa", "message": "feat(category_theory/limits): strong epimorphisms and strong epi-mono factorizations (#2433)\nThis PR contains the changes I mentioned in #2374. It contains:\n* the definition of a lift of a commutative square\n* the definition of a strong epimorphism\n* a proof that every regular epimorphism is strong\n* the definition of a strong epi-mono factorization\n* the class `has_strong_epi_images`\n* the construction `has_strong_epi_images` -> `has_image_maps`\n* a small number of changes which should have been part of #2423", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["add", "theorem", "fac_left", ["category_theory", "arrow", "lift"]], ["add", "theorem", "fac_right", ["category_theory", "arrow", "lift"]], ["add", "def", "lift", ["category_theory", "arrow"]], ["add", "theorem", "lift_mk'_left", ["category_theory", "arrow"]], ["add", "theorem", "lift_mk'_right", ["category_theory", "arrow"]], ["add", "theorem", "w", ["category_theory", "arrow"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "fac_lift", ["category_theory", "limits", "image"]], ["add", "theorem", "fac_lift", ["category_theory", "limits", "is_image"]], ["add", "def", "to_mono_is_image", ["category_theory", "limits", "strong_epi_mono_factorisation"]], ["add", "structure", "strong_epi_mono_factorisation", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "desc'", ["category_theory", "limits", "cokernel_cofork", "is_colimit"]], ["del", "def", "desc'", ["category_theory", "limits", "cokernel_cofork", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": [["add", "def", "desc'", ["category_theory", "normal_epi"]], ["add", "def", "lift'", ["category_theory", "normal_mono"]], ["add", "def", "desc'", ["category_theory", "regular_epi"]], ["add", "def", "lift'", ["category_theory", "regular_mono"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/strong_epi.lean", "changes": [["add", "def", "mono_strong_epi_is_iso", ["category_theory"]], ["add", "def", "strong_epi_comp", ["category_theory"]], ["add", "def", "strong_epi_of_strong_epi", ["category_theory"]]]}]}, {"timestamp": 1587096841, "sha": "f3471479", "message": "feat(category_theory): creation of limits and reflection of isomorphisms (#2426)\nDefine creation of limits and reflection of isomorphisms.\nPart 2 of a sequence of PRs aiming to resolve my TODO [here](https://github.com/leanprover-community/mathlib/blob/cf89963e14cf535783cefba471247ae4470fa8c3/src/category_theory/limits/over.lean#L143) - that the forgetful functor from the over category creates connected limits.\nRemaining:\n- [x] Add an instance or def which gives that if `F` creates limits and `K ⋙ F` `has_limit` then `has_limit K` as well.\n- [x] Move the forget creates limits proof to limits/over, and remove the existing proof since this one is strictly stronger - make sure to keep the statement there though using the previous point.\n- [x] Add more docstrings\nProbably relevant to @semorrison and @TwoFX.", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["mod", "def", "functoriality_counit'", ["category_theory", "adjunction"]], ["mod", "def", "functoriality_counit", ["category_theory", "adjunction"]], ["mod", "def", "functoriality_unit'", ["category_theory", "adjunction"]], ["mod", "def", "functoriality_unit", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "map_cocone", ["category_theory", "functor"]], ["mod", "def", "map_cocone_morphism", ["category_theory", "functor"]], ["mod", "def", "map_cone", ["category_theory", "functor"]], ["del", "theorem", "map_cone_inv_X", ["category_theory", "functor"]], ["add", "def", "map_cone_map_cone_inv", ["category_theory", "functor"]], ["mod", "def", "map_cone_morphism", ["category_theory", "functor"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/creates.lean", "changes": [["add", "def", "creates_colimit_of_reflects_iso", ["category_theory"]], ["add", "def", "creates_limit_of_reflects_iso", ["category_theory"]], ["add", "def", "has_colimit_of_created", ["category_theory"]], ["add", "def", "has_limit_of_created", ["category_theory"]], ["add", "def", "id_lifts_cocone", ["category_theory"]], ["add", "def", "id_lifts_cone", ["category_theory"]], ["add", "def", "lift_colimit", ["category_theory"]], ["add", "def", "lift_limit", ["category_theory"]], ["add", "structure", "liftable_cocone", ["category_theory"]], ["add", "structure", "liftable_cone", ["category_theory"]], ["add", "def", "lifted_colimit_is_colimit", ["category_theory"]], ["add", "def", "lifted_colimit_maps_to_original", ["category_theory"]], ["add", "def", "lifted_limit_is_limit", ["category_theory"]], ["add", "def", "lifted_limit_maps_to_original", ["category_theory"]], ["add", "structure", "lifts_to_colimit", ["category_theory"]], ["add", "def", "lifts_to_colimit_of_creates", ["category_theory"]], ["add", "structure", "lifts_to_limit", ["category_theory"]], ["add", "def", "lifts_to_limit_of_creates", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "map_cone_equiv", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["add", "def", "algebra_iso_of_iso", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["del", "def", "c", ["category_theory", "monad", "forget_creates_colimits"]], ["mod", "def", "lambda", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "def", "lifted_cocone", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "def", "lifted_cocone_is_colimit", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "def", "new_cocone", ["category_theory", "monad", "forget_creates_colimits"]], ["del", "def", "c", ["category_theory", "monad", "forget_creates_limits"]], ["mod", "def", "cone_point", ["category_theory", "monad", "forget_creates_limits"]], ["add", "def", "lifted_cone", ["category_theory", "monad", "forget_creates_limits"]], ["add", "def", "lifted_cone_is_limit", ["category_theory", "monad", "forget_creates_limits"]], ["add", "def", "new_cone", ["category_theory", "monad", "forget_creates_limits"]], ["del", "def", "forget_creates_limits", ["category_theory", "monad"]], ["add", "def", "has_limit_of_comp_forget_has_limit", ["category_theory", "monad"]]]}, {"oldPath": null, "newPath": "src/category_theory/reflect_isomorphisms.lean", "changes": [["add", "def", "cocone_iso_of_hom_iso", ["category_theory"]], ["add", "def", "cone_iso_of_hom_iso", ["category_theory"]], ["add", "def", "is_iso_of_reflects_iso", ["category_theory"]]]}]}, {"timestamp": 1587091339, "sha": "0d3e5465", "message": "chore(scripts): update nolints.txt (#2435)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587085918, "sha": "d2db3e83", "message": "chore(algebra/lie_algebra): add function coercion for morphisms (#2434)\nIn fact three different changes are being made here:\n 1. Adding direct function coercion for `lie_algebra.morphism`, allowing us to tidy up `map_lie` and increase simp scope\n 2. Providing a zero element for `lie_subalgebra`, thus allowing removal of a `has_inhabited_instance` exception in nolints.txt\n 3. Providing a zero element for `lie_submodule`, thus allowing removal of a `has_inhabited_instance` exception in nolints.txt", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["del", "theorem", "map_lie'", ["lie_algebra"]], ["mod", "theorem", "map_lie", ["lie_algebra"]]]}]}, {"timestamp": 1587045827, "sha": "c3d943e2", "message": "feat(computability): strong reducibility and degrees (#1203)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": [["add", "theorem", "injective_const", ["nat", "partrec", "code"]], ["add", "theorem", "injective_curry", ["nat", "partrec", "code"]], ["add", "theorem", "smn", ["nat", "partrec", "code"]]]}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": null, "newPath": "src/computability/reduce.lean", "changes": [["add", "theorem", "equiv₂", ["computable"]], ["add", "theorem", "eqv", ["computable"]], ["add", "theorem", "computable_of_many_one_reducible", ["computable_pred"]], ["add", "theorem", "computable_of_one_one_reducible", ["computable_pred"]], ["add", "theorem", "disjoin_le", []], ["add", "theorem", "disjoin_many_one_reducible", []], ["add", "theorem", "symm", ["equiv", "computable"]], ["add", "theorem", "trans", ["equiv", "computable"]], ["add", "def", "computable", ["equiv"]], ["add", "theorem", "equivalence_of_many_one_equiv", []], ["add", "theorem", "equivalence_of_one_one_equiv", []], ["add", "def", "add", ["many_one_degree"]], ["add", "theorem", "add_le'", ["many_one_degree"]], ["add", "theorem", "add_le", ["many_one_degree"]], ["add", "def", "comap", ["many_one_degree"]], ["add", "def", "le", ["many_one_degree"]], ["add", "theorem", "le_add_left'", ["many_one_degree"]], ["add", "theorem", "le_add_left", ["many_one_degree"]], ["add", "theorem", "le_add_right'", ["many_one_degree"]], ["add", "theorem", "le_add_right", ["many_one_degree"]], ["add", "theorem", "le_antisymm", ["many_one_degree"]], ["add", "theorem", "le_comap_left", ["many_one_degree"]], ["add", "theorem", "le_comap_right", ["many_one_degree"]], ["add", "theorem", "le_refl", ["many_one_degree"]], ["add", "theorem", "le_trans", ["many_one_degree"]], ["add", "def", "of", ["many_one_degree"]], ["add", "theorem", "of_le_of'", ["many_one_degree"]], ["add", "theorem", "of_le_of", ["many_one_degree"]], ["add", "def", "many_one_degree", []], ["add", "theorem", "congr_left", ["many_one_equiv"]], ["add", "theorem", "congr_right", ["many_one_equiv"]], ["add", "theorem", "le_congr_left", ["many_one_equiv"]], ["add", "theorem", "le_congr_right", ["many_one_equiv"]], ["add", "theorem", "of_equiv", ["many_one_equiv"]], ["add", "theorem", "symm", ["many_one_equiv"]], ["add", "theorem", "trans", ["many_one_equiv"]], ["add", "def", "many_one_equiv", []], ["add", "theorem", "many_one_equiv_refl", []], ["add", "def", "many_one_equiv_setoid", []], ["add", "theorem", "mk", ["many_one_reducible"]], ["add", "theorem", "trans", ["many_one_reducible"]], ["add", "def", "many_one_reducible", []], ["add", "theorem", "many_one_reducible_refl", []], ["add", "theorem", "congr_left", ["one_one_equiv"]], ["add", "theorem", "congr_right", ["one_one_equiv"]], ["add", "theorem", "le_congr_left", ["one_one_equiv"]], ["add", "theorem", "le_congr_right", ["one_one_equiv"]], ["add", "theorem", "of_equiv", ["one_one_equiv"]], ["add", "theorem", "symm", ["one_one_equiv"]], ["add", "theorem", "to_many_one", ["one_one_equiv"]], ["add", "theorem", "trans", ["one_one_equiv"]], ["add", "def", "one_one_equiv", []], ["add", "theorem", "one_one_equiv_refl", []], ["add", "theorem", "disjoin_left", ["one_one_reducible"]], ["add", "theorem", "disjoin_right", ["one_one_reducible"]], ["add", "theorem", "mk", ["one_one_reducible"]], ["add", "theorem", "of_equiv", ["one_one_reducible"]], ["add", "theorem", "of_equiv_symm", ["one_one_reducible"]], ["add", "theorem", "to_many_one", ["one_one_reducible"]], ["add", "theorem", "trans", ["one_one_reducible"]], ["add", "def", "one_one_reducible", []], ["add", "theorem", "one_one_reducible_refl", []], ["add", "theorem", "reflexive_many_one_reducible", []], ["add", "theorem", "reflexive_one_one_reducible", []], ["add", "theorem", "transitive_many_one_reducible", []], ["add", "theorem", "transitive_one_one_reducible", []]]}]}, {"timestamp": 1587039988, "sha": "a113d6e6", "message": "chore(scripts): update nolints.txt (#2432)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1587035410, "sha": "846cbabb", "message": "feat(analysis/calculus): let simp compute derivatives (#2422)\nAfter this PR:\n```lean\nexample (x : ℝ) : deriv (λ x, cos (sin x) * exp x) x = (cos(sin(x))-sin(sin(x))*cos(x))*exp(x) :=\nby { simp, ring }\n```\nExcerpts from the docstrings:\nThe simplifier is set up to prove automatically that some functions are differentiable, or differentiable at a point (but not differentiable on a set or within a set at a point, as checking automatically that the good domains are mapped one to the other when using composition is not something the simplifier can easily do). This means that one can write\n`example (x : ℝ) : differentiable ℝ (λ x, sin (exp (3 + x^2)) - 5 * cos x) := by simp`.\nIf there are divisions, one needs to supply to the simplifier proofs that the denominators do not vanish, as in\n```lean\nexample (x : ℝ) (h : 1 + sin x ≠ 0) : differentiable_at ℝ (λ x, exp x / (1 + sin x)) x :=\nby simp [h]\n```\nThe simplifier is not set up to compute the Fréchet derivative of maps (as these are in general complicated multidimensional linear maps), but it will compute one-dimensional derivatives.\nTo make sure that the simplifier can prove automatically that functions are differentiable, we tag many lemmas with the `simp` attribute, for instance those saying that the sum of differentiable functions is differentiable, as well as their product, their cartesian product, and so on. A notable exception is the chain rule: we do not mark as a simp lemma the fact that, if `f` and `g` are differentiable, then their composition also is: `simp` would always be able to match this lemma, by taking `f` or `g` to be the identity. Instead, for every reasonable function (say, `exp`), we add a lemma that if `f` is differentiable then so is `(λ x, exp (f x))`. This means adding some boilerplate lemmas, but these can also be useful in their own right. \nTests for this ability of the simplifier (with more examples) are provided in `tests/differentiable.lean`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_add", []], ["mod", "theorem", "deriv_div", []], ["add", "theorem", "deriv_id''", []], ["add", "theorem", "deriv_inv'", []], ["mod", "theorem", "deriv_mul", []], ["add", "theorem", "deriv_pow''", []], ["mod", "theorem", "deriv_sub", []], ["add", "theorem", "deriv_within_inv'", []], ["add", "theorem", "deriv_within_pow'", []], ["mod", "theorem", "div", ["differentiable"]], ["add", "theorem", "inv", ["differentiable"]], ["add", "theorem", "pow", ["differentiable"]], ["mod", "theorem", "div", ["differentiable_at"]], ["add", "theorem", "inv", ["differentiable_at"]], ["add", "theorem", "pow", ["differentiable_at"]], ["add", "theorem", "inv", ["differentiable_on"]], ["add", "theorem", "pow", ["differentiable_on"]], ["add", "theorem", "inv", ["differentiable_within_at"]], ["add", "theorem", "pow", ["differentiable_within_at"]], ["add", "theorem", "inv", ["has_deriv_at"]], ["add", "theorem", "pow", ["has_deriv_at"]], ["add", "theorem", "has_deriv_at_id'", []], ["add", "theorem", "inv", ["has_deriv_within_at"]], ["add", "theorem", "pow", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "add", ["differentiable"]], ["mod", "theorem", "fst", ["differentiable"]], ["mod", "theorem", "mul", ["differentiable"]], ["mod", "theorem", "neg", ["differentiable"]], ["mod", "theorem", "smul", ["differentiable"]], ["mod", "theorem", "snd", ["differentiable"]], ["mod", "theorem", "sub", ["differentiable"]], ["mod", "theorem", "add", ["differentiable_at"]], ["mod", "theorem", "fst", ["differentiable_at"]], ["mod", "theorem", "mul", ["differentiable_at"]], ["mod", "theorem", "neg", ["differentiable_at"]], ["mod", "theorem", "prod_map", ["differentiable_at"]], ["mod", "theorem", "smul", ["differentiable_at"]], ["mod", "theorem", "snd", ["differentiable_at"]], ["mod", "theorem", "sub", ["differentiable_at"]], ["mod", "theorem", "differentiable_at_const", []], ["add", "theorem", "differentiable_at_id'", []], ["mod", "theorem", "differentiable_at_id", []], ["mod", "theorem", "differentiable_const", []], ["add", "theorem", "differentiable_id'", []], ["mod", "theorem", "differentiable_id", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "differentiable_at_cos", ["complex"]], ["add", "theorem", "differentiable_at_cosh", ["complex"]], ["add", "theorem", "differentiable_at_exp", ["complex"]], ["add", "theorem", "differentiable_at_sin", ["complex"]], ["add", "theorem", "differentiable_at_sinh", ["complex"]], ["add", "theorem", "deriv_ccos", []], ["add", "theorem", "deriv_ccosh", []], ["add", "theorem", "deriv_cexp", []], ["add", "theorem", "deriv_cos", []], ["add", "theorem", "deriv_cosh", []], ["add", "theorem", "deriv_csin", []], ["add", "theorem", "deriv_csinh", []], ["add", "theorem", "deriv_exp", []], ["add", "theorem", "deriv_sin", []], ["add", "theorem", "deriv_sinh", []], ["add", "theorem", "deriv_within_ccos", []], ["add", "theorem", "deriv_within_ccosh", []], ["add", "theorem", "deriv_within_cexp", []], ["add", "theorem", "deriv_within_cos", []], ["add", "theorem", "deriv_within_cosh", []], ["add", "theorem", "deriv_within_csin", []], ["add", "theorem", "deriv_within_csinh", []], ["add", "theorem", "deriv_within_exp", []], ["add", "theorem", "deriv_within_sin", []], ["add", "theorem", "deriv_within_sinh", []], ["add", "theorem", "ccos", ["differentiable"]], ["add", "theorem", "ccosh", ["differentiable"]], ["add", "theorem", "cexp", ["differentiable"]], ["add", "theorem", "cos", ["differentiable"]], ["add", "theorem", "cosh", ["differentiable"]], ["add", "theorem", "csin", ["differentiable"]], ["add", "theorem", "csinh", ["differentiable"]], ["add", "theorem", "exp", ["differentiable"]], ["add", "theorem", "sin", ["differentiable"]], ["add", "theorem", "sinh", ["differentiable"]], ["add", "theorem", "ccos", ["differentiable_at"]], ["add", "theorem", "ccosh", ["differentiable_at"]], ["add", "theorem", "cexp", ["differentiable_at"]], ["add", "theorem", "cos", ["differentiable_at"]], ["add", "theorem", "cosh", ["differentiable_at"]], ["add", "theorem", "csin", ["differentiable_at"]], ["add", "theorem", "csinh", ["differentiable_at"]], ["add", "theorem", "exp", ["differentiable_at"]], ["add", "theorem", "sin", ["differentiable_at"]], ["add", "theorem", "sinh", ["differentiable_at"]], ["add", "theorem", "ccos", ["differentiable_on"]], ["add", "theorem", "ccosh", ["differentiable_on"]], ["add", "theorem", "cexp", ["differentiable_on"]], ["add", "theorem", "cos", ["differentiable_on"]], ["add", "theorem", "cosh", ["differentiable_on"]], ["add", "theorem", "csin", ["differentiable_on"]], ["add", "theorem", "csinh", ["differentiable_on"]], ["add", "theorem", "exp", ["differentiable_on"]], ["add", "theorem", "sin", ["differentiable_on"]], ["add", "theorem", "sinh", ["differentiable_on"]], ["add", "theorem", "ccos", ["differentiable_within_at"]], ["add", "theorem", "ccosh", ["differentiable_within_at"]], ["add", "theorem", "cexp", ["differentiable_within_at"]], ["add", "theorem", "cos", ["differentiable_within_at"]], ["add", "theorem", "cosh", ["differentiable_within_at"]], ["add", "theorem", "csin", ["differentiable_within_at"]], ["add", "theorem", "csinh", ["differentiable_within_at"]], ["add", "theorem", "exp", ["differentiable_within_at"]], ["add", "theorem", "sin", ["differentiable_within_at"]], ["add", "theorem", "sinh", ["differentiable_within_at"]], ["add", "theorem", "ccos", ["has_deriv_at"]], ["add", "theorem", "ccosh", ["has_deriv_at"]], ["mod", "theorem", "cexp", ["has_deriv_at"]], ["add", "theorem", "cos", ["has_deriv_at"]], ["add", "theorem", "cosh", ["has_deriv_at"]], ["add", "theorem", "csin", ["has_deriv_at"]], ["add", "theorem", "csinh", ["has_deriv_at"]], ["add", "theorem", "exp", ["has_deriv_at"]], ["add", "theorem", "sin", ["has_deriv_at"]], ["add", "theorem", "sinh", ["has_deriv_at"]], ["add", "theorem", "ccos", ["has_deriv_within_at"]], ["add", "theorem", "ccosh", ["has_deriv_within_at"]], ["mod", "theorem", "cexp", ["has_deriv_within_at"]], ["add", "theorem", "cos", ["has_deriv_within_at"]], ["add", "theorem", "cosh", ["has_deriv_within_at"]], ["add", "theorem", "csin", ["has_deriv_within_at"]], ["add", "theorem", "csinh", ["has_deriv_within_at"]], ["add", "theorem", "exp", ["has_deriv_within_at"]], ["add", "theorem", "sin", ["has_deriv_within_at"]], ["add", "theorem", "sinh", ["has_deriv_within_at"]], ["add", "theorem", "differentiable_at_cos", ["real"]], ["add", "theorem", "differentiable_at_cosh", ["real"]], ["add", "theorem", "differentiable_at_exp", ["real"]], ["add", "theorem", "differentiable_at_sin", ["real"]], ["add", "theorem", "differentiable_at_sinh", ["real"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": null, "newPath": "test/differentiable.lean", "changes": []}]}, {"timestamp": 1587035408, "sha": "ec800611", "message": "refactor(analysis/asymptotics): make is_o irreducible (#2416)\n`is_o` is currently not irreducible. Since it is a complicated type, Lean can have trouble checking if two types with `is_o` are defeq or not, leading to timeouts as described in https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there.20code.20for.20X.3F/topic/undergraduate.20calculus/near/193776607\nThis PR makes `is_o` irreducible.", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "of_bound", ["asymptotics", "is_O"]], ["add", "theorem", "is_O_iff", ["asymptotics"]], ["add", "theorem", "is_O_iff_is_O_with", ["asymptotics"]], ["add", "theorem", "of_bound", ["asymptotics", "is_O_with"]], ["add", "theorem", "is_O_with_iff", ["asymptotics"]], ["add", "theorem", "def", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_iff", ["asymptotics"]], ["add", "theorem", "is_o_iff_forall_is_O_with", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}]}, {"timestamp": 1587026007, "sha": "5fd4afc4", "message": "refactor(tactic/norm_cast): simplified attributes and numeral support (#2407)\nThis is @pnmadelaine's work, I'm just updating it to work with current mathlib.\nNew and improved version of `norm_cast` as described in the paper \"normalizing casts and coercions\": https://arxiv.org/abs/2001.10594\nThe main new user-facing feature are the simplified attributes. There is now only the `@[norm_cast]` attribute which subsumes the previous `norm_cast`, `elim_cast`, `squash_cast`, and `move_cast` attributes.\nThere is a new `set_option trace.norm_cast true` option to enable debugging output.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["mod", "theorem", "cast_eq_zero", ["nat"]], ["mod", "theorem", "cast_inj", ["nat"]], ["mod", "theorem", "cast_ne_zero", ["nat"]]]}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["mod", "theorem", "cast_fpow", ["rat"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "cast_pow", ["int"]], ["mod", "theorem", "coe_nat_pow", ["int"]], ["mod", "theorem", "cast_pow", ["nat"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "coe_add", ["submodule"]], ["mod", "theorem", "coe_mk", ["submodule"]], ["mod", "theorem", "coe_neg", ["submodule"]], ["mod", "theorem", "coe_smul", ["submodule"]], ["mod", "theorem", "coe_sub", ["submodule"]], ["mod", "theorem", "coe_zero", ["submodule"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "coe_add_monoid_hom'", []], ["mod", "theorem", "coe_add_monoid_hom", []], ["add", "theorem", "coe_monoid_hom'", []], ["mod", "theorem", "coe_monoid_hom", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "coe_rpow", ["nnreal"]]]}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": [["mod", "theorem", "mem_coe", ["convex_cone"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_cast_rat", ["int"]], ["mod", "theorem", "norm_cast_real", ["int"]], ["mod", "theorem", "norm_cast_real", ["rat"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "restrict_scalars_coe_eq_coe'", ["continuous_linear_map"]], ["mod", "theorem", "restrict_scalars_coe_eq_coe", ["continuous_linear_map"]], ["mod", "theorem", "mk_continuous_coe", ["linear_map"]], ["mod", "theorem", "mk_continuous_of_exists_bound_coe", ["linear_map"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "abs_cast_nat", ["complex"]], ["mod", "theorem", "int_cast_im", ["complex"]], ["mod", "theorem", "int_cast_re", ["complex"]], ["mod", "theorem", "nat_cast_im", ["complex"]], ["mod", "theorem", "nat_cast_re", ["complex"]], ["mod", "theorem", "of_real_add", ["complex"]], ["mod", "theorem", "of_real_bit0", ["complex"]], ["mod", "theorem", "of_real_bit1", ["complex"]], ["mod", "theorem", "of_real_div", ["complex"]], ["mod", "theorem", "of_real_fpow", ["complex"]], ["mod", "theorem", "of_real_im", ["complex"]], ["mod", "theorem", "of_real_inj", ["complex"]], ["mod", "theorem", "of_real_int_cast", ["complex"]], ["mod", "theorem", "of_real_inv", ["complex"]], ["mod", "theorem", "of_real_mul", ["complex"]], ["mod", "theorem", "of_real_nat_cast", ["complex"]], ["mod", "theorem", "of_real_neg", ["complex"]], ["mod", "theorem", "of_real_one", ["complex"]], ["mod", "theorem", "of_real_pow", ["complex"]], ["mod", "theorem", "of_real_rat_cast", ["complex"]], ["mod", "theorem", "of_real_re", ["complex"]], ["mod", "theorem", "of_real_sub", ["complex"]], ["mod", "theorem", "of_real_zero", ["complex"]], ["mod", "theorem", "rat_cast_im", ["complex"]], ["mod", "theorem", "rat_cast_re", ["complex"]]]}, {"oldPath": "src/data/equiv/ring.lean", "newPath": "src/data/equiv/ring.lean", "changes": [["mod", "theorem", "coe_add_equiv", ["ring_equiv"]], ["mod", "theorem", "coe_mul_equiv", ["ring_equiv"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "coe_last", ["fin"]], ["mod", "theorem", "coe_mk", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "coe_nonempty", ["finset"]], ["mod", "theorem", "piecewise_coe", ["finset"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "bodd_coe", ["int"]], ["mod", "theorem", "cast_abs", ["int"]], ["mod", "theorem", "cast_add", ["int"]], ["mod", "theorem", "cast_bit0", ["int"]], ["mod", "theorem", "cast_bit1", ["int"]], ["mod", "theorem", "cast_coe_nat", ["int"]], ["mod", "theorem", "cast_id", ["int"]], ["mod", "theorem", "cast_inj", ["int"]], ["mod", "theorem", "cast_le", ["int"]], ["mod", "theorem", "cast_lt", ["int"]], ["mod", "theorem", "cast_max", ["int"]], ["mod", "theorem", "cast_min", ["int"]], ["mod", "theorem", "cast_mul", ["int"]], ["mod", "theorem", "cast_neg", ["int"]], ["mod", "theorem", "cast_neg_of_nat", ["int"]], ["mod", "theorem", "cast_neg_succ_of_nat", ["int"]], ["mod", "theorem", "cast_one", ["int"]], ["mod", "theorem", "cast_sub", ["int"]], ["mod", "theorem", "cast_sub_nat_nat", ["int"]], ["mod", "theorem", "cast_zero", ["int"]], ["mod", "theorem", "coe_nat_abs", ["int"]], ["mod", "theorem", "coe_nat_bit0", ["int"]], ["mod", "theorem", "coe_nat_bit1", ["int"]], ["mod", "theorem", "coe_nat_div", ["int"]], ["mod", "theorem", "coe_nat_dvd", ["int"]], ["mod", "theorem", "coe_nat_inj'", ["int"]], ["mod", "theorem", "coe_nat_le", ["int"]], ["mod", "theorem", "coe_nat_lt", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "abs_cast", ["nat"]], ["mod", "theorem", "cast_add", ["nat"]], ["mod", "theorem", "cast_bit0", ["nat"]], ["mod", "theorem", "cast_bit1", ["nat"]], ["mod", "theorem", "cast_id", ["nat"]], ["mod", "theorem", "cast_ite", ["nat"]], ["mod", "theorem", "cast_le", ["nat"]], ["mod", "theorem", "cast_lt", ["nat"]], ["mod", "theorem", "cast_max", ["nat"]], ["mod", "theorem", "cast_min", ["nat"]], ["mod", "theorem", "cast_mul", ["nat"]], ["mod", "theorem", "cast_one", ["nat"]], ["mod", "theorem", "cast_pred", ["nat"]], ["mod", "theorem", "cast_sub", ["nat"]], ["mod", "theorem", "cast_succ", ["nat"]], ["mod", "theorem", "cast_zero", ["nat"]]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "coe_add", ["enat"]], ["mod", "theorem", "coe_get", ["enat"]], ["mod", "theorem", "coe_le_coe", ["enat"]], ["mod", "theorem", "coe_lt_coe", ["enat"]], ["mod", "theorem", "coe_one", ["enat"]], ["mod", "theorem", "coe_zero", ["enat"]], ["mod", "theorem", "get_coe", ["enat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": [["del", "def", "of_snum", ["int"]], ["del", "def", "bit0", ["nzsnum"]], ["del", "def", "bit1", ["nzsnum"]], ["del", "def", "drec'", ["nzsnum"]], ["del", "def", "head", ["nzsnum"]], ["del", "def", "not", ["nzsnum"]], ["del", "def", "sign", ["nzsnum"]], ["del", "def", "tail", ["nzsnum"]], ["del", "inductive", "nzsnum", []], ["del", "def", "bit0", ["snum"]], ["del", "def", "bit1", ["snum"]], ["del", "def", "bit", ["snum"]], ["del", "theorem", "bit_one", ["snum"]], ["del", "theorem", "bit_zero", ["snum"]], ["del", "def", "bits", ["snum"]], ["del", "def", "cadd", ["snum"]], ["del", "def", "czadd", ["snum"]], ["del", "def", "drec'", ["snum"]], ["del", "def", "head", ["snum"]], ["del", "def", "not", ["snum"]], ["del", "def", "pred", ["snum"]], ["del", "def", "rec'", ["snum"]], ["del", "def", "sign", ["snum"]], ["del", "def", "succ", ["snum"]], ["del", "def", "tail", ["snum"]], ["del", "def", "test_bit", ["snum"]], ["del", "inductive", "snum", []]]}, {"oldPath": "src/data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": [["add", "def", "bit0", ["nzsnum"]], ["add", "def", "bit1", ["nzsnum"]], ["add", "def", "drec'", ["nzsnum"]], ["add", "def", "head", ["nzsnum"]], ["add", "def", "not", ["nzsnum"]], ["add", "def", "sign", ["nzsnum"]], ["add", "def", "tail", ["nzsnum"]], ["add", "inductive", "nzsnum", []], ["add", "def", "bit0", ["snum"]], ["add", "def", "bit1", ["snum"]], ["add", "def", "bit", ["snum"]], ["add", "theorem", "bit_one", ["snum"]], ["add", "theorem", "bit_zero", ["snum"]], ["add", "def", "bits", ["snum"]], ["add", "def", "cadd", ["snum"]], ["add", "def", "czadd", ["snum"]], ["add", "def", "drec'", ["snum"]], ["add", "def", "head", ["snum"]], ["add", "def", "not", ["snum"]], ["add", "def", "pred", ["snum"]], ["add", "def", "rec'", ["snum"]], ["add", "def", "sign", ["snum"]], ["add", "def", "succ", ["snum"]], ["add", "def", "tail", ["snum"]], ["add", "def", "test_bit", ["snum"]], ["add", "inductive", "snum", []]]}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["add", "def", "of_snum", ["int"]], ["mod", "theorem", "add_of_nat", ["num"]], ["mod", "theorem", "cast_add", ["num"]], ["mod", "theorem", "cast_bit0", ["num"]], ["mod", "theorem", "cast_bit1", ["num"]], ["mod", "theorem", "cast_mul", ["num"]], ["mod", "theorem", "cast_one", ["num"]], ["mod", "theorem", "cast_to_int", ["num"]], ["mod", "theorem", "cast_to_nat", ["num"]], ["mod", "theorem", "cast_to_znum", ["num"]], ["mod", "theorem", "cast_zero", ["num"]], ["mod", "theorem", "div_to_nat", ["num"]], ["mod", "theorem", "land_to_nat", ["num"]], ["mod", "theorem", "ldiff_to_nat", ["num"]], ["mod", "theorem", "lor_to_nat", ["num"]], ["mod", "theorem", "lxor_to_nat", ["num"]], ["mod", "theorem", "mod_to_nat", ["num"]], ["mod", "theorem", "of_nat_inj", ["num"]], ["mod", "theorem", "of_to_nat", ["num"]], ["mod", "theorem", "shiftl_to_nat", ["num"]], ["mod", "theorem", "shiftr_to_nat", ["num"]], ["mod", "theorem", "sub_to_nat", ["num"]], ["mod", "theorem", "to_nat_inj", ["num"]], ["mod", "theorem", "to_nat_to_int", ["num"]], ["mod", "theorem", "cast_bit0", ["pos_num"]], ["mod", "theorem", "cast_bit1", ["pos_num"]], ["mod", "theorem", "cast_one", ["pos_num"]], ["mod", "theorem", "cast_to_int", ["pos_num"]], ["mod", "theorem", "cast_to_nat", ["pos_num"]], ["mod", "theorem", "to_nat_inj", ["pos_num"]], ["mod", "theorem", "to_nat_to_int", ["pos_num"]], ["mod", "theorem", "cast_add", ["znum"]], ["mod", "theorem", "cast_bit0", ["znum"]], ["mod", "theorem", "cast_bit1", ["znum"]], ["mod", "theorem", "cast_one", ["znum"]], ["mod", "theorem", "cast_to_int", ["znum"]], ["mod", "theorem", "cast_zero", ["znum"]], ["mod", "theorem", "cast_zneg", ["znum"]], ["mod", "theorem", "div_to_int", ["znum"]], ["mod", "theorem", "dvd_to_int", ["znum"]], ["mod", "theorem", "mod_to_int", ["znum"]], ["mod", "theorem", "mul_to_int", ["znum"]], ["mod", "theorem", "neg_of_int", ["znum"]], ["mod", "theorem", "of_int_cast", ["znum"]], ["mod", "theorem", "of_nat_cast", ["znum"]], ["mod", "theorem", "of_to_int", ["znum"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["mod", "theorem", "cast_pow", ["padic_int"]], ["mod", "theorem", "coe_add", ["padic_int"]], ["mod", "theorem", "coe_coe", ["padic_int"]], ["mod", "theorem", "coe_mul", ["padic_int"]], ["mod", "theorem", "coe_neg", ["padic_int"]], ["mod", "theorem", "coe_one", ["padic_int"]], ["mod", "theorem", "coe_sub", ["padic_int"]], ["mod", "theorem", "coe_zero", ["padic_int"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "coe_add", ["padic"]], ["mod", "theorem", "coe_div", ["padic"]], ["mod", "theorem", "coe_inj", ["padic"]], ["mod", "theorem", "coe_mul", ["padic"]], ["mod", "theorem", "coe_neg", ["padic"]], ["mod", "theorem", "coe_one", ["padic"]], ["mod", "theorem", "coe_sub", ["padic"]], ["mod", "theorem", "coe_zero", ["padic"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["mod", "theorem", "coe_int_denom", ["rat"]], ["mod", "theorem", "coe_int_num", ["rat"]], ["mod", "theorem", "coe_nat_denom", ["rat"]], ["mod", "theorem", "coe_nat_num", ["rat"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_abs", ["rat"]], ["mod", "theorem", "cast_add", ["rat"]], ["mod", "theorem", "cast_add_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_bit0", ["rat"]], ["mod", "theorem", "cast_bit1", ["rat"]], ["mod", "theorem", "cast_coe_int", ["rat"]], ["mod", "theorem", "cast_coe_nat", ["rat"]], ["mod", "theorem", "cast_div", ["rat"]], ["mod", "theorem", "cast_div_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_id", ["rat"]], ["mod", "theorem", "cast_inj", ["rat"]], ["mod", "theorem", "cast_inv", ["rat"]], ["mod", "theorem", "cast_inv_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_le", ["rat"]], ["mod", "theorem", "cast_lt", ["rat"]], ["mod", "theorem", "cast_max", ["rat"]], ["mod", "theorem", "cast_min", ["rat"]], ["mod", "theorem", "cast_mk", ["rat"]], ["mod", "theorem", "cast_mk_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_mul", ["rat"]], ["mod", "theorem", "cast_mul_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_neg", ["rat"]], ["mod", "theorem", "cast_nonneg", ["rat"]], ["mod", "theorem", "cast_one", ["rat"]], ["mod", "theorem", "cast_pow", ["rat"]], ["mod", "theorem", "cast_sub", ["rat"]], ["mod", "theorem", "cast_sub_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_zero", ["rat"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_add", ["ennreal"]], ["mod", "theorem", "coe_bit0", ["ennreal"]], ["mod", "theorem", "coe_bit1", ["ennreal"]], ["mod", "theorem", "coe_div", ["ennreal"]], ["mod", "theorem", "coe_eq_coe", ["ennreal"]], ["mod", "theorem", "coe_eq_one", ["ennreal"]], ["mod", "theorem", "coe_eq_zero", ["ennreal"]], ["mod", "theorem", "coe_finset_prod", ["ennreal"]], ["mod", "theorem", "coe_finset_sum", ["ennreal"]], ["mod", "theorem", "coe_inv", ["ennreal"]], ["mod", "theorem", "coe_inv_two", ["ennreal"]], ["mod", "theorem", "coe_le_coe", ["ennreal"]], ["mod", "theorem", "coe_le_one_iff", ["ennreal"]], ["mod", "theorem", "coe_lt_coe", ["ennreal"]], ["mod", "theorem", "coe_lt_one_iff", ["ennreal"]], ["mod", "theorem", "coe_max", ["ennreal"]], ["mod", "theorem", "coe_min", ["ennreal"]], ["mod", "theorem", "coe_mul", ["ennreal"]], ["mod", "theorem", "coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nat_le_coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nat_lt_coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nonneg", ["ennreal"]], ["mod", "theorem", "coe_one", ["ennreal"]], ["mod", "theorem", "coe_pos", ["ennreal"]], ["mod", "theorem", "coe_pow", ["ennreal"]], ["mod", "theorem", "coe_sub", ["ennreal"]], ["mod", "theorem", "coe_zero", ["ennreal"]], ["mod", "theorem", "one_eq_coe", ["ennreal"]], ["mod", "theorem", "one_le_coe_iff", ["ennreal"]], ["mod", "theorem", "one_lt_coe_iff", ["ennreal"]], ["mod", "theorem", "to_nnreal_coe", ["ennreal"]], ["mod", "theorem", "zero_eq_coe", ["ennreal"]]]}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "coe_list_prod", ["nnreal"]], ["mod", "theorem", "coe_list_sum", ["nnreal"]], ["mod", "theorem", "coe_max", ["nnreal"]], ["mod", "theorem", "coe_min", ["nnreal"]], ["mod", "theorem", "coe_multiset_prod", ["nnreal"]], ["mod", "theorem", "coe_multiset_sum", ["nnreal"]], ["mod", "theorem", "coe_ne_zero", ["nnreal"]], ["mod", "theorem", "coe_pow", ["nnreal"]], ["mod", "theorem", "coe_prod", ["nnreal"]], ["mod", "theorem", "coe_sum", ["nnreal"]], ["mod", "theorem", "smul_coe", ["nnreal"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "coe_prod", ["linear_equiv"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "coe_add", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_neg", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_neg_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_pos_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_smul", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_sub", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_zero", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "integral_eq_integral", ["measure_theory", "l1", "simple_func"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "coe_add", ["measure_theory", "l1"]], ["mod", "theorem", "coe_neg", ["measure_theory", "l1"]], ["mod", "theorem", "coe_pos_part", ["measure_theory", "l1"]], ["mod", "theorem", "coe_smul", ["measure_theory", "l1"]], ["mod", "theorem", "coe_sub", ["measure_theory", "l1"]], ["mod", "theorem", "coe_zero", ["measure_theory", "l1"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "theorem", "of_add", ["filter", "filter_product"]], ["mod", "theorem", "of_bit0", ["filter", "filter_product"]], ["mod", "theorem", "of_bit1", ["filter", "filter_product"]], ["mod", "theorem", "of_div", ["filter", "filter_product"]], ["mod", "theorem", "of_inv", ["filter", "filter_product"]], ["mod", "theorem", "of_mul", ["filter", "filter_product"]], ["mod", "theorem", "of_neg", ["filter", "filter_product"]], ["mod", "theorem", "of_one", ["filter", "filter_product"]], ["mod", "theorem", "of_sub", ["filter", "filter_product"]], ["mod", "theorem", "of_zero", ["filter", "filter_product"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "coe_restrict_scalars_eq_coe", ["linear_map"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "theorem", "coe_C", ["mv_polynomial"]], ["mod", "theorem", "coe_X", ["mv_polynomial"]], ["mod", "theorem", "coe_add", ["mv_polynomial"]], ["mod", "theorem", "coe_monomial", ["mv_polynomial"]], ["mod", "theorem", "coe_mul", ["mv_polynomial"]], ["mod", "theorem", "coe_one", ["mv_polynomial"]], ["mod", "theorem", "coe_zero", ["mv_polynomial"]], ["mod", "theorem", "coeff_coe", ["mv_polynomial"]], ["mod", "theorem", "coe_C", ["polynomial"]], ["mod", "theorem", "coe_X", ["polynomial"]], ["mod", "theorem", "coe_add", ["polynomial"]], ["mod", "theorem", "coe_monomial", ["polynomial"]], ["mod", "theorem", "coe_mul", ["polynomial"]], ["mod", "theorem", "coe_one", ["polynomial"]], ["mod", "theorem", "coe_zero", ["polynomial"]], ["mod", "theorem", "coeff_coe", ["polynomial"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "nat_cast_inj", ["cardinal"]], ["mod", "theorem", "nat_cast_le", ["cardinal"]], ["mod", "theorem", "nat_cast_lt", ["cardinal"]], ["mod", "theorem", "nat_cast_pow", ["cardinal"]], ["mod", "theorem", "nat_succ", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": [["del", "theorem", "ge_from_le", []], ["del", "theorem", "gt_from_lt", []], ["mod", "theorem", "ite_cast", []], ["del", "theorem", "ne_from_not_eq", []], ["add", "def", "of_string", ["norm_cast", "label"]], ["add", "inductive", "label", ["norm_cast"]]]}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["mod", "theorem", "coe_zero", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "coe_coe", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_prod", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_refl'", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_refl", ["continuous_linear_equiv"]], ["mod", "theorem", "prod_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_add'", ["continuous_linear_map"]], ["mod", "theorem", "coe_add", ["continuous_linear_map"]], ["mod", "theorem", "coe_apply'", ["continuous_linear_map"]], ["mod", "theorem", "coe_apply", ["continuous_linear_map"]], ["mod", "theorem", "coe_coe", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp'", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp", ["continuous_linear_map"]], ["mod", "theorem", "coe_fst'", ["continuous_linear_map"]], ["mod", "theorem", "coe_fst", ["continuous_linear_map"]], ["mod", "theorem", "coe_id'", ["continuous_linear_map"]], ["mod", "theorem", "coe_id", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg'", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg", ["continuous_linear_map"]], ["mod", "theorem", "coe_prod", ["continuous_linear_map"]], ["mod", "theorem", "coe_prod_map", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd'", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub'", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub", ["continuous_linear_map"]], ["mod", "theorem", "coe_zero'", ["continuous_linear_map"]], ["mod", "theorem", "coe_zero", ["continuous_linear_map"]], ["mod", "theorem", "prod_apply", ["continuous_linear_map"]], ["mod", "theorem", "prod_map_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["mod", "theorem", "coe_one", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "tendsto_coe", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "coe_tsum", ["nnreal"]], ["mod", "theorem", "has_sum_coe", ["nnreal"]], ["mod", "theorem", "summable_coe", ["nnreal"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["mod", "theorem", "dist_cast_rat", ["int"]], ["mod", "theorem", "dist_cast_real", ["int"]], ["mod", "theorem", "dist_cast", ["rat"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": [["add", "theorem", "half_lt_self_bis", ["ennreal"]], ["add", "theorem", "coe_inj", ["hidden"]], ["add", "theorem", "coe_one", ["hidden"]], ["add", "theorem", "mul_coe", ["hidden"]], ["add", "def", "with_zero", ["hidden"]]]}, {"oldPath": null, "newPath": "test/norm_cast_cardinal.lean", "changes": [["add", "theorem", "coe_bit0", []], ["add", "theorem", "coe_bit1", []]]}, {"oldPath": null, "newPath": "test/norm_cast_coe_fn.lean", "changes": [["add", "theorem", "coe_f1", []], ["add", "def", "f1", []], ["add", "def", "f2", []], ["add", "structure", "hom", []], ["add", "theorem", "coe_fn", ["hom_plus"]], ["add", "structure", "hom_plus", []]]}, {"oldPath": null, "newPath": "test/norm_cast_int.lean", "changes": []}, {"oldPath": null, "newPath": "test/norm_cast_lemma_order.lean", "changes": []}, {"oldPath": null, "newPath": "test/norm_cast_sum_lambda.lean", "changes": []}]}, {"timestamp": 1587010838, "sha": "7270af9c", "message": "chore(scripts): update nolints.txt (#2430)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586999150, "sha": "5ac2b48c", "message": "feat(category_theory): connected categories (#2413)\n- Define connected categories (using the convention that they must be nonempty) by asserting every functor to a discrete category is isomorphic to a constant functor. We also give some equivalent conditions which are more useful in practice: for instance that any function which is constant for objects which have a single morphism between them is constant everywhere.\n- Give the definition of connected category as specified on wikipedia, and show it's equivalent. (This is more intuitive but it seems harder to both prove and use in lean, it also seems nicer stated with `head'`. If reviewers believe this should be removed, I have no objection, but I include it for now since it is the more familiar definition).\n- Give three examples of connected categories.\n- Prove that `X × -` preserves connected limits.\nThis PR is the first of three PRs aiming to resolve my TODO [here](https://github.com/leanprover-community/mathlib/blob/cf89963e14cf535783cefba471247ae4470fa8c3/src/category_theory/limits/over.lean#L143) - that the forgetful functor from the over category creates connected limits.\nMake sure you have:\n * [x] reviewed and applied the coding style: [coding](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/style.md), [naming](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/naming.md)\n * [x] reviewed and applied [the documentation requirements](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/doc.md)\n * [x] make sure definitions and lemmas are put in the right files\n * [x] make sure definitions and lemmas are not redundant\nIf this PR is related to a discussion on Zulip, please include a link in the discussion.\nFor reviewers: [code review check list](https://github.com/leanprover-community/mathlib/blob/master/docs/contribute/code-review.md)", "changes": [{"oldPath": null, "newPath": "src/category_theory/connected.lean", "changes": [["add", "theorem", "any_functor_const_on_obj", ["category_theory"]], ["add", "def", "of_any_functor_const_on_obj", ["category_theory", "connected"]], ["add", "def", "of_constant_of_preserves_morphisms", ["category_theory", "connected"]], ["add", "def", "of_induct", ["category_theory", "connected"]], ["add", "def", "connected_of_zigzag", ["category_theory"]], ["add", "theorem", "connected_zigzag", ["category_theory"]], ["add", "theorem", "constant_of_preserves_morphisms", ["category_theory"]], ["add", "theorem", "equiv_relation", ["category_theory"]], ["add", "theorem", "exists_zigzag'", ["category_theory"]], ["add", "theorem", "induct_on_objects", ["category_theory"]], ["add", "theorem", "nat_trans_from_connected", ["category_theory"]], ["add", "def", "zag", ["category_theory"]], ["add", "def", "zigzag", ["category_theory"]], ["add", "def", "zigzag_connected", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/connected.lean", "changes": [["add", "def", "forget_cone", ["category_theory", "prod_preserves_connected_limits"]], ["add", "def", "γ₁", ["category_theory", "prod_preserves_connected_limits"]], ["add", "def", "γ₂", ["category_theory", "prod_preserves_connected_limits"]], ["add", "def", "prod_preserves_connected_limits", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "prod_functor", ["category_theory", "limits"]]]}, {"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "induction", ["list", "chain"]], ["add", "theorem", "exists_chain_of_relation_refl_trans_gen", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}]}, {"timestamp": 1586989769, "sha": "66cc2980", "message": "feat(data/finset): existence of a smaller set (#2420)\nShow the existence of a smaller finset contained in a given finset.\nThe next in my series of lemmas for my combinatorics project.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "exists_intermediate_set", ["finset"]], ["add", "theorem", "exists_smaller_set", ["finset"]]]}]}, {"timestamp": 1586976266, "sha": "8510f07e", "message": "chore(scripts): update nolints.txt (#2425)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586973204, "sha": "1e212d7d", "message": "fix(data/zmod/basic): typo (#2424)", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1586969260, "sha": "ce72cde8", "message": "feat(category_theory/limits): special shapes API cleanup (#2423)\nThis is the 2.5th PR in a series of most likely three PRs about the cohomology functor. This PR has nothing to do with cohomology, but I'm going to need a lemma from this pull request in the final PR in the series.\nIn this PR, I\n* perform various documentation and cleanup tasks\n* add lemmas similar to the ones seen in #2396 for equalizers, kernels and pullbacks (NB: these are not needed for biproducts since the `simp` and `ext` lemmas for products and coproducts readily fire)\n* generalize `prod.hom_ext` to the situation where we have a `binary_fan X Y` and an `is_limit` for that specific fan (and similar for the other shapes)\n* add \"bundled\" versions of lift and desc. Here is the most important example:\n```lean\ndef kernel.lift' {W : C} (k : W ⟶ X) (h : k ≫ f = 0) : {l : W ⟶ kernel f // l ≫ kernel.ι f = k} :=\n⟨kernel.lift f k h, kernel.lift_ι _ _ _⟩\n```\nThis definition doesn't really do anything by itself, but it makes proofs comforable and readable. For example, if you say `obtain ⟨t, ht⟩ := kernel.lift' g p hpg`, then the interesting property of `t` is right there in the tactic view, which I find helpful in keeping track of things when a proof invokes a lot of universal properties.", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "inl", ["category_theory", "limits", "binary_cofan"]], ["add", "def", "inr", ["category_theory", "limits", "binary_cofan"]], ["add", "def", "desc'", ["category_theory", "limits", "binary_cofan", "is_colimit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "binary_cofan", "is_colimit"]], ["add", "def", "fst", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "binary_fan", "is_limit"]], ["add", "def", "lift'", ["category_theory", "limits", "binary_fan", "is_limit"]], ["add", "def", "snd", ["category_theory", "limits", "binary_fan"]], ["add", "def", "desc'", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "inl_desc", ["category_theory", "limits", "coprod"]], ["add", "theorem", "inl_map", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "inr_desc", ["category_theory", "limits", "coprod"]], ["add", "theorem", "inr_map", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "prod"]], ["add", "def", "lift'", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_fst", ["category_theory", "limits", "prod"]], ["mod", "theorem", "lift_snd", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_fst", ["category_theory", "limits", "prod"]], ["add", "theorem", "map_snd", ["category_theory", "limits", "prod"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["del", "theorem", "cocone_parallel_pair_ext", ["category_theory", "limits"]], ["del", "theorem", "cocone_parallel_pair_left", ["category_theory", "limits"]], ["del", "theorem", "cocone_parallel_pair_right", ["category_theory", "limits"]], ["add", "def", "desc'", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "π_desc", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "coequalizer_ext", ["category_theory", "limits", "cofork"]], ["add", "def", "desc'", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "theorem", "left_app_one", ["category_theory", "limits", "cofork"]], ["add", "theorem", "right_app_one", ["category_theory", "limits", "cofork"]], ["mod", "def", "π", ["category_theory", "limits", "cofork"]], ["del", "theorem", "cone_parallel_pair_ext", ["category_theory", "limits"]], ["del", "theorem", "cone_parallel_pair_left", ["category_theory", "limits"]], ["del", "theorem", "cone_parallel_pair_right", ["category_theory", "limits"]], ["mod", "theorem", "epi_of_is_colimit_parallel_pair", ["category_theory", "limits"]], ["add", "def", "lift'", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "lift_ι", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "app_zero_left", ["category_theory", "limits", "fork"]], ["add", "theorem", "app_zero_right", ["category_theory", "limits", "fork"]], ["add", "theorem", "equalizer_ext", ["category_theory", "limits", "fork"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "fork", "is_limit"]], ["add", "def", "lift'", ["category_theory", "limits", "fork", "is_limit"]], ["mod", "def", "ι", ["category_theory", "limits", "fork"]], ["mod", "theorem", "mono_of_is_limit_parallel_pair", ["category_theory", "limits"]], ["mod", "inductive", "walking_parallel_pair", ["category_theory", "limits"]], ["mod", "inductive", "walking_parallel_pair_hom", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "desc'", ["category_theory", "limits", "cokernel"]], ["add", "theorem", "π_desc", ["category_theory", "limits", "cokernel"]], ["add", "def", "desc'", ["category_theory", "limits", "cokernel_cofork", "is_limit"]], ["add", "def", "lift'", ["category_theory", "limits", "kernel"]], ["add", "theorem", "lift_ι", ["category_theory", "limits", "kernel"]], ["add", "def", "lift'", ["category_theory", "limits", "kernel_fork", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "desc'", ["category_theory", "limits", "pullback"]], ["mod", "def", "fst", ["category_theory", "limits", "pullback"]], ["add", "def", "lift'", ["category_theory", "limits", "pullback"]], ["add", "theorem", "lift_fst", ["category_theory", "limits", "pullback"]], ["add", "theorem", "lift_snd", ["category_theory", "limits", "pullback"]], ["mod", "def", "snd", ["category_theory", "limits", "pullback"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "pullback_cone", "is_limit"]], ["add", "def", "lift'", ["category_theory", "limits", "pullback_cone", "is_limit"]], ["mod", "def", "inl", ["category_theory", "limits", "pushout"]], ["add", "theorem", "inl_desc", ["category_theory", "limits", "pushout"]], ["mod", "def", "inr", ["category_theory", "limits", "pushout"]], ["add", "theorem", "inr_desc", ["category_theory", "limits", "pushout"]], ["add", "def", "desc'", ["category_theory", "limits", "pushout_cocone", "is_colimit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "pushout_cocone", "is_colimit"]], ["mod", "inductive", "hom", ["category_theory", "limits", "walking_cospan"]], ["mod", "inductive", "walking_cospan", ["category_theory", "limits"]], ["mod", "inductive", "hom", ["category_theory", "limits", "walking_span"]], ["mod", "inductive", "walking_span", ["category_theory", "limits"]]]}]}, {"timestamp": 1586958877, "sha": "9b797ee3", "message": "feat(library_search): (efficiently) try calling symmetry before searching the library (#2415)\nThis fixes a gap in `library_search` we've known about for a long time: it misses lemmas stated \"the other way round\" than what you were looking for.\nThis PR fixes that. I cache the `tactic_state` after calling `symmetry`, so it is only called once, regardless of how much of the library we're searching.\nWhen `library_search` was already succeeding, it should still succeed, with the same run time.\nWhen it was failing, it will now either succeed (because it found a lemma after calling `symmetry`), or fail (in the same time, if `symmetry` fails, or approximately twice the time, if `symmetry` succeeds). I think this is a reasonable time trade-off for better search results.", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}]}, {"timestamp": 1586936514, "sha": "8e8037f5", "message": "chore(category_theory/limits): remove dependency on concrete_categories (#2411)\nJust move some content around, so that `category_theory/limits/cones.lean` doesn't need to depend on the development of `concrete_category`.", "changes": [{"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/concrete_category.lean", "changes": [["add", "theorem", "naturality_concrete", ["category_theory", "limits", "cocone"]], ["add", "theorem", "naturality_concrete", ["category_theory", "limits", "cone"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["del", "theorem", "naturality_concrete", ["category_theory", "limits", "cocone"]], ["del", "theorem", "naturality_concrete", ["category_theory", "limits", "cone"]]]}]}, {"timestamp": 1586868329, "sha": "fd0dc27e", "message": "chore(scripts): update nolints.txt (#2418)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586862123, "sha": "96a07a71", "message": "refactor(analysis/calculus/deriv): split comp and scomp (#2410)\nThe derivative of the composition of a function and a scalar function was written using `smul`, regardless of the fact that the first function was vector-valued (in which case `smul` is not avoidable) or scalar-valued (in which case it can be replaced by `mul`). Instead, this PR introduces two sets of lemmas (named `scomp` for the first type and `comp` for the second type) to get the usual multiplication in the formula for the derivative of the composition of two scalar functions.", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "scomp", ["deriv"]], ["add", "theorem", "scomp", ["deriv_within"]], ["add", "theorem", "scomp", ["has_deriv_at"]], ["add", "theorem", "scomp_has_deriv_within_at", ["has_deriv_at"]], ["add", "theorem", "scomp", ["has_deriv_at_filter"]], ["add", "theorem", "scomp", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}]}, {"timestamp": 1586862122, "sha": "15fcb8a1", "message": "feat(algebra/lie_algebra): define equivalences, direct sums of Lie algebras (#2404)\nThis pull request does two things:\n1. Defines equivalences of Lie algebras (and proves that these do indeed form an equivalence relation)\n2. Defines direct sums of Lie algebras\nThe intention is to knock another chip off https://github.com/leanprover-community/mathlib/issues/1093", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "bracket_apply", ["lie_algebra", "direct_sum"]], ["add", "def", "refl", ["lie_algebra", "equiv"]], ["add", "def", "symm", ["lie_algebra", "equiv"]], ["add", "def", "trans", ["lie_algebra", "equiv"]], ["add", "structure", "equiv", ["lie_algebra"]], ["mod", "theorem", "map_lie'", ["lie_algebra"]], ["mod", "theorem", "map_lie", ["lie_algebra"]], ["add", "def", "comp", ["lie_algebra", "morphism"]], ["add", "theorem", "comp_apply", ["lie_algebra", "morphism"]], ["add", "def", "inverse", ["lie_algebra", "morphism"]], ["mod", "structure", "morphism", ["lie_algebra"]]]}]}, {"timestamp": 1586852373, "sha": "ba154bc1", "message": "fix(library_search): find id (#2414)\nPreviously `library_search` could not find theorems that did not have a head symbol (e.g. were function types with source and target both \"variables all the way down\"). Now it can, so it solves:\n```lean\nexample (α : Prop) : α → α :=\nby library_search -- says: `exact id`\nexample (p : Prop) [decidable p] : (¬¬p) → p :=\nby library_search -- says: `exact not_not.mp`\nexample (a b : Prop) (h : a ∧ b) : a := \nby library_search -- says: `exact h.left`\nexample (P Q : Prop) [decidable P] [decidable Q]: (¬ Q → ¬ P) → (P → Q) :=\nby library_search -- says: `exact not_imp_not.mp`\n```", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}]}, {"timestamp": 1586848695, "sha": "af27ee33", "message": "chore(analysis): two more -T50000 challenges (#2393)\nRefactor two proofs to bring them under `-T50000`, in the hope that we can later add this requirement to CI, per #2276.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "def", "change_origin_summable_aux_j", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_summable_aux_j_inj", ["formal_multilinear_series"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "theorem", "has_deriv_at_real_of_complex_aux", []]]}]}, {"timestamp": 1586799231, "sha": "8356b798", "message": "feat(logic/basic): a few simp lemmas about `and` and `or` (#2408)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "and_self_left", []], ["add", "theorem", "and_self_right", []], ["add", "theorem", "or_self_left", []], ["add", "theorem", "or_self_right", []]]}]}, {"timestamp": 1586799229, "sha": "fe878eaf", "message": "feat(algebra/big-operators): some big operator lemmas (#2152)\nLemmas I found useful in my [combinatorics](https://b-mehta.github.io/combinatorics/) project\nMake sure you have:\n * [x] reviewed and applied the coding style: [coding](https://github.com/leanprover/mathlib/blob/master/docs/contribute/style.md), [naming](https://github.com/leanprover/mathlib/blob/master/docs/contribute/naming.md)\n * [x] reviewed and applied [the documentation requirements](https://github.com/leanprover/mathlib/blob/master/docs/contribute/doc.md)\n * [x] make sure definitions and lemmas are put in the right files\n * [x] make sure definitions and lemmas are not redundant\nIf this PR is related to a discussion on Zulip, please include a link in the discussion.\nFor reviewers: [code review check list](https://github.com/leanprover/mathlib/blob/master/docs/contribute/code-review.md)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_flip", ["finset"]], ["add", "theorem", "sum_const_nat", ["finset"]], ["add", "theorem", "sum_div", ["finset"]], ["add", "theorem", "sum_flip", ["finset"]], ["add", "theorem", "sum_lt_sum_of_nonempty", ["finset"]]]}]}, {"timestamp": 1586799227, "sha": "67e363fd", "message": "feat(data/finset): finset lemmas from combinatorics (#2149)\nThe beginnings of moving results from my combinatorics project\nMake sure you have:\n * [x] reviewed and applied the coding style: [coding](https://github.com/leanprover/mathlib/blob/master/docs/contribute/style.md), [naming](https://github.com/leanprover/mathlib/blob/master/docs/contribute/naming.md)\n * [x] reviewed and applied [the documentation requirements](https://github.com/leanprover/mathlib/blob/master/docs/contribute/doc.md)\n * [x] make sure definitions and lemmas are put in the right files\n * [x] make sure definitions and lemmas are not redundant\nFor reviewers: [code review check list](https://github.com/leanprover/mathlib/blob/master/docs/contribute/code-review.md)", "changes": [{"oldPath": "archive/cubing_a_cube.lean", "newPath": "archive/cubing_a_cube.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "bind_subset_bind_of_subset_left", ["finset"]], ["add", "theorem", "disjoint_sdiff_inter", ["finset"]], ["add", "theorem", "disjoint_self_iff_empty", ["finset"]], ["add", "theorem", "exists_max_image", ["finset"]], ["del", "theorem", "exists_min", ["finset"]], ["add", "theorem", "exists_min_image", ["finset"]], ["add", "theorem", "inter_eq_inter_of_sdiff_eq_sdiff", ["finset"]], ["add", "theorem", "inter_union_self", ["finset"]], ["add", "theorem", "min'_lt_max'_of_card", ["finset"]], ["add", "theorem", "not_mem_sdiff_of_mem_right", ["finset"]], ["add", "theorem", "sdiff_eq_self_iff_disjoint", ["finset"]], ["add", "theorem", "sdiff_eq_self_of_disjoint", ["finset"]], ["add", "theorem", "sdiff_idem", ["finset"]], ["add", "theorem", "sdiff_sdiff_self_left", ["finset"]], ["add", "theorem", "sdiff_singleton_eq_erase", ["finset"]], ["add", "theorem", "sdiff_union_distrib", ["finset"]], ["add", "theorem", "sdiff_union_inter", ["finset"]], ["add", "theorem", "union_eq_empty_iff", ["finset"]], ["add", "theorem", "union_sdiff_distrib", ["finset"]], ["add", "theorem", "union_sdiff_self", ["finset"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_max_image", ["set"]], ["del", "theorem", "exists_min", ["set"]], ["add", "theorem", "exists_min_image", ["set"]]]}]}, {"timestamp": 1586789620, "sha": "f3ac7b70", "message": "feat(combinatorics/composition): introduce compositions of an integer (#2398)\nA composition of an integer `n` is a decomposition of `{0, ..., n-1}` into blocks of consecutive\nintegers. Equivalently, it is a decomposition `n = i₀ + ... + i_{k-1}` into a sum of positive\nintegers. We define compositions in this PR, and introduce a whole interface around it. The goal is to use this as a tool in the proof that the composition of analytic functions is analytic", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/combinatorics/composition.lean", "changes": [["add", "def", "blocks", ["composition"]], ["add", "def", "blocks_fun", ["composition"]], ["add", "theorem", "blocks_length", ["composition"]], ["add", "theorem", "blocks_pnat_length", ["composition"]], ["add", "theorem", "blocks_pos'", ["composition"]], ["add", "theorem", "blocks_pos", ["composition"]], ["add", "theorem", "blocks_sum", ["composition"]], ["add", "def", "boundaries", ["composition"]], ["add", "def", "boundary", ["composition"]], ["add", "theorem", "boundary_last", ["composition"]], ["add", "theorem", "boundary_zero", ["composition"]], ["add", "theorem", "card_boundaries_eq_succ_length", ["composition"]], ["add", "theorem", "disjoint_range", ["composition"]], ["add", "def", "embedding", ["composition"]], ["add", "theorem", "embedding_comp_inv", ["composition"]], ["add", "theorem", "embedding_inj", ["composition"]], ["add", "def", "index", ["composition"]], ["add", "theorem", "index_exists", ["composition"]], ["add", "def", "inv_embedding", ["composition"]], ["add", "def", "length", ["composition"]], ["add", "theorem", "length_le", ["composition"]], ["add", "theorem", "length_pos_of_pos", ["composition"]], ["add", "theorem", "lt_size_up_to_index_succ", ["composition"]], ["add", "theorem", "mem_range_embedding", ["composition"]], ["add", "theorem", "mem_range_embedding_iff'", ["composition"]], ["add", "theorem", "mem_range_embedding_iff", ["composition"]], ["add", "theorem", "mono_of_fin_boundaries", ["composition"]], ["add", "theorem", "one_le_blocks'", ["composition"]], ["add", "theorem", "one_le_blocks", ["composition"]], ["add", "theorem", "sigma_eq_iff_blocks_eq", ["composition"]], ["add", "theorem", "sigma_eq_iff_blocks_pnat_eq", ["composition"]], ["add", "def", "size_up_to", ["composition"]], ["add", "theorem", "size_up_to_index_le", ["composition"]], ["add", "theorem", "size_up_to_le", ["composition"]], ["add", "theorem", "size_up_to_length", ["composition"]], ["add", "theorem", "size_up_to_of_length_le", ["composition"]], ["add", "theorem", "size_up_to_strict_mono", ["composition"]], ["add", "theorem", "size_up_to_succ'", ["composition"]], ["add", "theorem", "size_up_to_succ", ["composition"]], ["add", "theorem", "size_up_to_zero", ["composition"]], ["add", "theorem", "strict_mono_boundary", ["composition"]], ["add", "theorem", "sum_blocks_fun", ["composition"]], ["add", "def", "to_composition_as_set", ["composition"]], ["add", "theorem", "to_composition_as_set_blocks", ["composition"]], ["add", "theorem", "to_composition_as_set_blocks_pnat", ["composition"]], ["add", "theorem", "to_composition_as_set_boundaries", ["composition"]], ["add", "theorem", "to_composition_as_set_length", ["composition"]], ["add", "structure", "composition", []], ["add", "def", "blocks", ["composition_as_set"]], ["add", "def", "blocks_fun", ["composition_as_set"]], ["add", "theorem", "blocks_fun_pos", ["composition_as_set"]], ["add", "theorem", "blocks_length", ["composition_as_set"]], ["add", "theorem", "blocks_partial_sum", ["composition_as_set"]], ["add", "def", "blocks_pnat", ["composition_as_set"]], ["add", "theorem", "blocks_pnat_length", ["composition_as_set"]], ["add", "theorem", "blocks_sum", ["composition_as_set"]], ["add", "theorem", "boundaries_nonempty", ["composition_as_set"]], ["add", "def", "boundary", ["composition_as_set"]], ["add", "theorem", "boundary_length", ["composition_as_set"]], ["add", "theorem", "boundary_zero", ["composition_as_set"]], ["add", "theorem", "card_boundaries_eq_succ_length", ["composition_as_set"]], ["add", "theorem", "card_boundaries_pos", ["composition_as_set"]], ["add", "theorem", "coe_blocks_pnat_eq_blocks", ["composition_as_set"]], ["add", "def", "length", ["composition_as_set"]], ["add", "theorem", "length_lt_card_boundaries", ["composition_as_set"]], ["add", "theorem", "lt_length'", ["composition_as_set"]], ["add", "theorem", "lt_length", ["composition_as_set"]], ["add", "theorem", "mem_boundaries_iff_exists_blocks_sum_take_eq", ["composition_as_set"]], ["add", "def", "to_composition", ["composition_as_set"]], ["add", "theorem", "to_composition_blocks", ["composition_as_set"]], ["add", "theorem", "to_composition_blocks_pnat", ["composition_as_set"]], ["add", "theorem", "to_composition_boundaries", ["composition_as_set"]], ["add", "theorem", "to_composition_length", ["composition_as_set"]], ["add", "structure", "composition_as_set", []], ["add", "theorem", "composition_as_set_card", []], ["add", "def", "composition_as_set_equiv", []], ["add", "theorem", "composition_card", []], ["add", "def", "composition_equiv", []]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_last", ["fin"]], ["mod", "theorem", "coe_mk", ["fin"]], ["add", "theorem", "strict_mono_iff_lt_succ", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["del", "theorem", "bij_on_mono_of_fin", ["finset"]], ["add", "theorem", "mono_of_fin_bij_on", ["finset"]], ["add", "theorem", "mono_of_fin_eq_mono_of_fin_iff", ["finset"]], ["add", "theorem", "mono_of_fin_injective", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "of_fn_prod", ["list"]], ["add", "theorem", "of_fn_prod_take", ["list"]], ["add", "theorem", "of_fn_sum_take", ["list"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "eq_of_sum_take_eq", ["list"]], ["add", "theorem", "length_le_sum_of_one_le", ["list"]], ["add", "theorem", "monotone_sum_take", ["list"]]]}, {"oldPath": "src/data/list/of_fn.lean", "newPath": "src/data/list/of_fn.lean", "changes": [["add", "theorem", "map_of_fn", ["list"]], ["add", "theorem", "nth_le_of_fn'", ["list"]], ["mod", "theorem", "nth_le_of_fn", ["list"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_dependent_image", ["set"]]]}]}, {"timestamp": 1586785941, "sha": "01ac691d", "message": "feat(category_theory/limits/shapes/binary_products): add some basic API for prod and coprod (#2396)\nAdding explicit proofs of some basic results about maps into A x B and maps from A coprod B", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "hom_ext", ["category_theory", "limits", "coprod"]], ["add", "theorem", "inl_desc", ["category_theory", "limits", "coprod"]], ["add", "theorem", "inr_desc", ["category_theory", "limits", "coprod"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "prod"]], ["add", "theorem", "lift_fst", ["category_theory", "limits", "prod"]], ["add", "theorem", "lift_snd", ["category_theory", "limits", "prod"]]]}]}, {"timestamp": 1586782512, "sha": "cf89963e", "message": "chore(scripts): update nolints.txt (#2405)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586767954, "sha": "17b2d065", "message": "refactor(order/filter): refactor filters infi and bases (#2384)\nThis PR expands what Yury wrote about filter bases, and takes the opportunity to bring long overdue clarification to our treatment of infimums of filters (and also improve documentation and ordering in\nfilter.basic). I'm sorry it mixes reorganization and some new content, but this was hard to avoid (I do keep what motivated all this for a later PR).\nThe fundamental problem is that the infimum construction remained mysterious in filter.basic. All lemmas about it assume a directed family of filters. Yet there are many uses of infimums without this condition, notatably things like `⨅ i, principal (s i)` without condition on the indexed family of sets `s`.\nRelated to this, `filter.generate` stayed mysterious. It was used only as a technical device to lift the complete lattice structure from `set (set a)`. However it has a perfectly valid mathematical existence,\nas explained by the lemma \n```lean\nlemma sets_iff_generate {s : set (set α)} {f : filter α} : f ≤ filter.generate s ↔ s ⊆ f.sets\n```\nwhich justifies the docstring of `generate`: `generate g` is the smallest filter containing the sets `g`.\nAs an example of the mess this created, consider:\nhttps://github.com/leanprover-community/mathlib/blob/e758263/src/topology/bases.lean#L25 \n```lean\ndef has_countable_basis (f : filter α) : Prop :=\n∃ s : set (set α), countable s ∧ f = ⨅ t ∈ s, principal t\n```\nAs it stands, this definition is not clearly related to asking for the existence of a countable `s` such that `f = generate s`.\nHere the main mathematical content this PR adds in this direction:\n```lean\nlemma mem_generate_iff (s : set $ set α) {U : set α} : U ∈ generate s ↔\n∃ t ⊆ s, finite t ∧ ⋂₀ t ⊆ U\nlemma infi_eq_generate (s : ι → filter α) : infi s = generate (⋃ i, (s\ni).sets) \nlemma mem_infi_iff {ι} {s : ι → filter α} {U : set α} : (U ∈ ⨅ i, s i) ↔\n ∃ I : set ι, finite I ∧ ∃ V : {i | i ∈ I} → set α, (∀ i, V i ∈ s i) ∧\n (⋂ i, V i) ⊆ U\n```\nAll the other changes in filter.basic are either:\n* moving out stuff that should have been in other files (such as the lemmas that used to be at\nthe very top of this file)\n* reordering lemmas so that we can have section headers and things are easier to find, \n* adding to the module docstring. This module docstring contains more mathematical explanation than our usual ones. I feel this is needed because many people think filters are exotic (whereas I'm more and more convinced we should teach filters).\nThe reordering stuff makes it clear we could split this file into a linear chain of files, like we did with topology, but this is open for discussion.\nNext I added a lot to `filter.bases`. Here the issue is filter bases are used in two different ways. If you already have a filter, but you want to point out it suffices to use certain sets in it. Here you want to use Yury's `has_basis`. Or you can start with a (small) family of sets having nice properties, and build a filter out of it. Currently we don't have this in mathlib, but this is crucial for incoming PRs from the perfectoid project. For instance, in order to define the I-adic topology, you start with powers of I, make a filter and then make a topology. This also reduces the gap with Bourbaki which uses filter bases everywhere.\nI turned `has_basis` into a single field structure. It makes it very slightly less convenient to prove (you need an extra pair of angle brackets) but much easier to extend when you want to record more\nproperties of the basis, like being countable or decreasing. Also I proved the fundamental property that `f.has_basis p s` implies that `s` (filtered by `p`) actually *is* a filter basis. This is of course easy but crucial to connect with real world maths.\nAt the end of this file, I moved the countable filter basis stuff that is currently in topology.bases (aiming for first countable topologies) except that I used the foundational work on filter.basic to clearly prove all different formulations. In particular:\n```lean\nlemma generate_eq_generate_inter (s : set (set α)) : generate s = generate (sInter '' { t | finite t ∧ t ⊆ s})\n```\nclarifies things because the right-hand colleciton is countable if `s` is, and has the nice directedness condition.\nI also took the opportunity to simplify a proof in topology.sequences, showcasing the power of the newly introduced\n```lean\nlemma has_antimono_basis.tendsto [semilattice_sup ι] [nonempty ι] {l :\nfilter α} {p : ι → Prop} {s : ι → set α} (hl : l.has_antimono_basis p s)\n{φ : ι → α} (h : ∀ i : ι, φ i ∈ s i) : tendsto φ at_top l\n```\n(I will add more to that sequences file in the next PR).", "changes": [{"oldPath": "docs/theories/topology.md", "newPath": "docs/theories/topology.md", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "eq_finite_Union_of_finite_subset_Union", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "directed_on_Union", ["set"]], ["add", "theorem", "sInter_Union", ["set"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_subtype''", []]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "antimono_seq_of_seq", ["filter"]], ["add", "theorem", "countable_binfi_eq_infi_seq'", ["filter"]], ["add", "theorem", "countable_binfi_eq_infi_seq", ["filter"]], ["add", "theorem", "countable_binfi_principal_eq_seq_infi", ["filter"]], ["add", "structure", "countable_filter_basis", ["filter"]], ["add", "def", "of_sets", ["filter", "filter_basis"]], ["add", "theorem", "generate_eq_generate_inter", ["filter"]], ["add", "theorem", "tendsto", ["filter", "has_antimono_basis"]], ["add", "structure", "has_antimono_basis", ["filter"]], ["add", "theorem", "eq_generate", ["filter", "has_basis"]], ["add", "theorem", "filter_eq", ["filter", "has_basis"]], ["add", "theorem", "is_basis", ["filter", "has_basis"]], ["add", "theorem", "has_basis_generate", ["filter"]], ["add", "structure", "has_countable_basis", ["filter"]], ["add", "structure", "is_antimono_basis", ["filter"]], ["add", "theorem", "filter_eq_generate", ["filter", "is_basis"]], ["add", "theorem", "mem_filter_basis_iff", ["filter", "is_basis"]], ["add", "structure", "is_countable_basis", ["filter"]], ["add", "def", "countable_filter_basis", ["filter", "is_countably_generated"]], ["add", "theorem", "countable_generating_set", ["filter", "is_countably_generated"]], ["add", "theorem", "eq_generate", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_antimono_seq'", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_antimono_seq", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_countable_infi_principal", ["filter", "is_countably_generated"]], ["add", "theorem", "exists_seq", ["filter", "is_countably_generated"]], ["add", "theorem", "filter_basis_filter", ["filter", "is_countably_generated"]], ["add", "def", "generating_set", ["filter", "is_countably_generated"]], ["add", "theorem", "has_antimono_basis", ["filter", "is_countably_generated"]], ["add", "theorem", "has_countable_basis", ["filter", "is_countably_generated"]], ["add", "theorem", "tendsto_iff_seq_tendsto", ["filter", "is_countably_generated"]], ["add", "theorem", "tendsto_of_seq_tendsto", ["filter", "is_countably_generated"]], ["add", "def", "is_countably_generated", ["filter"]], ["add", "theorem", "is_countably_generated_at_top_finset_nat", ["filter"]], ["add", "theorem", "is_countably_generated_binfi_principal", ["filter"]], ["add", "theorem", "is_countably_generated_iff_exists_antimono_basis", ["filter"]], ["add", "theorem", "is_countably_generated_of_seq", ["filter"]], ["add", "theorem", "is_countably_generated_seq", ["filter"]], ["add", "theorem", "of_sets_filter_eq_generate", ["filter"]], ["add", "theorem", "eq_infi_principal", ["filter_basis"]], ["add", "theorem", "mem_filter_iff", ["filter_basis"]], ["add", "theorem", "mem_filter_of_mem", ["filter_basis"]], ["add", "structure", "filter_basis", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "directed_of_chain", []], ["del", "theorem", "directed_on_Union", []], ["add", "theorem", "infi_eq_generate", ["filter"]], ["add", "theorem", "map_at_top_inf_ne_bot_iff", ["filter"]], ["add", "theorem", "mem_generate_iff", ["filter"]], ["add", "theorem", "mem_infi_iff", ["filter"]], ["mod", "theorem", "mem_traverse_sets_iff", ["filter"]], ["add", "theorem", "cofinite_eq_at_top", ["filter", "nat"]], ["add", "theorem", "sInter_mem_sets_of_finite", ["filter"]], ["add", "theorem", "infinite_iff_frequently_cofinite", ["filter", "set"]], ["del", "theorem", "cofinite_eq_at_top", ["nat"]], ["del", "theorem", "infinite_iff_frequently_cofinite", ["set"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["add", "theorem", "directed_of_chain", []]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["del", "theorem", "comap", ["filter", "has_countable_basis"]], ["del", "theorem", "tendsto_iff_seq_tendsto", ["filter", "has_countable_basis"]], ["del", "theorem", "tendsto_of_seq_tendsto", ["filter", "has_countable_basis"]], ["del", "def", "has_countable_basis", ["filter"]], ["del", "theorem", "has_countable_basis_at_top_finset_nat", ["filter"]], ["del", "theorem", "has_countable_basis_iff_mono_seq'", ["filter"]], ["del", "theorem", "has_countable_basis_iff_mono_seq", ["filter"]], ["del", "theorem", "has_countable_basis_iff_seq", ["filter"]], ["del", "theorem", "has_countable_basis_of_seq", ["filter"]], ["del", "theorem", "mono_seq_of_has_countable_basis", ["filter"]], ["del", "theorem", "seq_of_has_countable_basis", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "mem_nhds_iff", ["emetric"]], ["mod", "theorem", "uniformity_has_countable_basis", ["emetric"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1586767952, "sha": "92c8d93d", "message": "feat(algebra/homology): the cohomology functor (#2374)\nThis is the second in a series of most likely three PRs about the cohomology functor. As such, this PR depends on #2373.\nIn the project laid out in `homology.lean`, @semorrison asks what the minimal assumptions are that are needed to get induced maps on images. In this PR, I offer a tautologial answer to this question: We get induced maps on images when there are induced maps on images. In this way, we can let type class resolution answer the question whether cohomology is functorial.\nIn particular, the third PR will contain the fact that if our images are strong epi-mono factorizations, then we get induced maps on images. Since the regular coimage construction in regular categories is a strong epi-mono factorization, the approach in this PR generalizes the previous suggestion of requiring `V` to be regular.\nA quick remark about cohomology and dependent types: As you can see, at one point Lean forces us to write `i - 1 + 1` instead of `i` because these two things are not definitionally equal. I am afraid, as we do more with cohomology, there will be many cases of this issue, and to compose morphisms whose types contain different incarnations of the same integer, we will have to insert some `eq_to_hom`-esque glue and pray that we will be able to rewrite them all away in the proofs without getting the beloved `motive is not type correct` error. Maybe there is some better way to solve this problem? (Or am I overthinking this and it is not actually going to be an issue at all?)", "changes": [{"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["add", "def", "cohomology_functor", ["cochain_complex"]], ["add", "def", "cohomology_map", ["cochain_complex"]], ["add", "theorem", "cohomology_map_comp", ["cochain_complex"]], ["add", "theorem", "cohomology_map_condition", ["cochain_complex"]], ["add", "theorem", "cohomology_map_id", ["cochain_complex"]], ["add", "def", "image_map", ["cochain_complex"]], ["add", "theorem", "image_map_ι", ["cochain_complex"]], ["add", "theorem", "image_to_kernel_map_condition", ["cochain_complex"]], ["add", "theorem", "induced_maps_commute", ["cochain_complex"]]]}]}, {"timestamp": 1586764523, "sha": "ca986598", "message": "chore(scripts): update nolints.txt (#2403)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586755148, "sha": "51f7319b", "message": "chore(algebra/module): rename type vars, minor cleanup, add module docstring (#2392)\n* Use `R`, `S` for rings, `k` for a field, `M`, `M₂` etc for modules;\n* Add a `semiring` version of `ring_hom.to_module`;\n* Stop using `{rα : ring α}` trick as Lean 3.7 tries unification before class search;\n* Add a short module docstring", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "def", "to_int_linear_map", ["add_monoid_hom"]], ["mod", "def", "to_rat_linear_map", ["add_monoid_hom"]], ["mod", "theorem", "sum_const'", ["finset"]], ["mod", "theorem", "sum_smul", ["finset"]], ["mod", "def", "ideal", []], ["mod", "theorem", "is_linear_map_neg", ["is_linear_map"]], ["mod", "theorem", "is_linear_map_smul'", ["is_linear_map"]], ["mod", "theorem", "is_linear_map_smul", ["is_linear_map"]], ["mod", "theorem", "map_neg", ["is_linear_map"]], ["mod", "theorem", "map_smul", ["is_linear_map"]], ["mod", "theorem", "map_sub", ["is_linear_map"]], ["mod", "theorem", "map_zero", ["is_linear_map"]], ["mod", "def", "mk'", ["is_linear_map"]], ["mod", "theorem", "mk'_apply", ["is_linear_map"]], ["mod", "theorem", "coe_mk", ["linear_map"]], ["mod", "def", "comp", ["linear_map"]], ["mod", "theorem", "comp_apply", ["linear_map"]], ["mod", "theorem", "ext", ["linear_map"]], ["mod", "theorem", "ext_iff", ["linear_map"]], ["mod", "def", "id", ["linear_map"]], ["mod", "theorem", "id_apply", ["linear_map"]], ["mod", "theorem", "is_linear", ["linear_map"]], ["mod", "theorem", "map_add", ["linear_map"]], ["mod", "theorem", "map_neg", ["linear_map"]], ["mod", "theorem", "map_smul", ["linear_map"]], ["mod", "theorem", "map_sub", ["linear_map"]], ["mod", "theorem", "map_sum", ["linear_map"]], ["mod", "def", "to_add_monoid_hom", ["linear_map"]], ["mod", "theorem", "to_add_monoid_hom_coe", ["linear_map"]], ["mod", "theorem", "to_fun_eq_coe", ["linear_map"]], ["mod", "structure", "linear_map", []], ["mod", "theorem", "sum_smul", ["list"]], ["mod", "structure", "core", ["module"]], ["mod", "theorem", "gsmul_eq_smul", ["module"]], ["mod", "def", "of_core", ["module"]], ["mod", "theorem", "sum_smul", ["multiset"]], ["mod", "theorem", "neg_one_smul", []], ["mod", "def", "to_module", ["ring_hom"]], ["add", "def", "to_semimodule", ["ring_hom"]], ["mod", "theorem", "add_monoid_smul_eq_smul", ["semimodule"]], ["mod", "theorem", "eq_zero_of_zero_eq_one", ["semimodule"]], ["mod", "theorem", "smul_eq_mul", []], ["mod", "theorem", "smul_sub", []], ["mod", "theorem", "sub_smul", []], ["mod", "theorem", "coe_add", ["submodule"]], ["mod", "theorem", "coe_mk", ["submodule"]], ["mod", "theorem", "coe_neg", ["submodule"]], ["mod", "theorem", "coe_smul", ["submodule"]], ["mod", "theorem", "coe_sub", ["submodule"]], ["mod", "theorem", "coe_zero", ["submodule"]], ["mod", "theorem", "ext'", ["submodule"]], ["mod", "theorem", "ext", ["submodule"]], ["mod", "theorem", "mem_coe", ["submodule"]], ["mod", "theorem", "neg_mem", ["submodule"]], ["mod", "theorem", "smul_mem", ["submodule"]], ["mod", "theorem", "smul_mem_iff'", ["submodule"]], ["mod", "theorem", "subtype_eq_val", ["submodule"]], ["mod", "theorem", "sum_mem", ["submodule"]], ["mod", "theorem", "zero_mem", ["submodule"]], ["mod", "structure", "submodule", []], ["mod", "def", "subspace", []], ["mod", "def", "vector_space", []], ["mod", "theorem", "zero_smul", []]]}]}, {"timestamp": 1586747318, "sha": "64fa9a20", "message": "chore(*): futureproof import syntax (#2402)\nThe next community version of Lean will treat a line starting in the first column\nafter an import as a new command, not a continuation of the import.", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1586723809, "sha": "ef4d2354", "message": "feat(category_theory): biproducts, and biproducts in AddCommGroup (#2187)\nThis PR\n1. adds typeclasses `has_biproducts` (implicitly restricting to finite biproducts, which is the only interesting case) and `has_binary_biproducts`, and the usual tooling for special shapes of limits.\n2. provides customised `has_products` and `has_coproducts` instances for `AddCommGroup`, which are both just dependent functions (for `has_coproducts` we have to assume the indexed type is finite and decidable)\n3. because these custom instances have identical underlying objects, it's trivial to put them together to get a `has_biproducts AddCommGroup`.\n4. as for 2 & 3 with binary biproducts for AddCommGroup, implemented simply as the cartesian group.", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Group/biproducts.lean", "changes": [["add", "def", "desc", ["AddCommGroup", "has_colimit"]], ["add", "theorem", "desc_apply", ["AddCommGroup", "has_colimit"]], ["add", "def", "lift", ["AddCommGroup", "has_limit"]], ["add", "theorem", "lift_apply", ["AddCommGroup", "has_limit"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["mod", "theorem", "single_apply", ["add_monoid_hom"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/biproducts.lean", "changes": [["add", "def", "to_cocone", ["category_theory", "limits", "bicone"]], ["add", "def", "to_cone", ["category_theory", "limits", "bicone"]], ["add", "structure", "bicone", ["category_theory", "limits"]], ["add", "def", "to_cocone", ["category_theory", "limits", "binary_bicone"]], ["add", "def", "to_cone", ["category_theory", "limits", "binary_bicone"]], ["add", "structure", "binary_bicone", ["category_theory", "limits"]], ["add", "def", "desc", ["category_theory", "limits", "biprod"]], ["add", "def", "fst", ["category_theory", "limits", "biprod"]], ["add", "def", "inl", ["category_theory", "limits", "biprod"]], ["add", "def", "inr", ["category_theory", "limits", "biprod"]], ["add", "def", "lift", ["category_theory", "limits", "biprod"]], ["add", "def", "map", ["category_theory", "limits", "biprod"]], ["add", "def", "snd", ["category_theory", "limits", "biprod"]], ["add", "def", "biprod", ["category_theory", "limits"]], ["add", "def", "biprod_iso", ["category_theory", "limits"]], ["add", "def", "desc", ["category_theory", "limits", "biproduct"]], ["add", "def", "lift", ["category_theory", "limits", "biproduct"]], ["add", "def", "map", ["category_theory", "limits", "biproduct"]], ["add", "def", "ι", ["category_theory", "limits", "biproduct"]], ["add", "def", "π", ["category_theory", "limits", "biproduct"]], ["add", "def", "biproduct", ["category_theory", "limits"]], ["add", "def", "biproduct_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1586715450, "sha": "1433f051", "message": "fix(tactic/norm_cast): typo (#2400)", "changes": [{"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}]}, {"timestamp": 1586671295, "sha": "d84de804", "message": "feat(set_theory/game): short games, boards, and domineering (#1540)\nThis is a do-over of my previous attempt to implement the combinatorial game of domineering. This time, we get a nice clean definition, and it computes!\nTo achieve this, I follow Reid's advice: generalise! We define \n```\nclass state (S : Type u) :=\n(turn_bound : S → ℕ)\n(L : S → finset S)\n(R : S → finset S)\n(left_bound : ∀ {s t : S} (m : t ∈ L s), turn_bound t < turn_bound s)\n(right_bound : ∀ {s t : S} (m : t ∈ R s), turn_bound t < turn_bound s)\n```\na typeclass describing `S` as \"the state of a game\", and provide `pgame.of [state S] : S \\to pgame`.\nThis allows a short and straightforward definition of Domineering:\n```lean\n/-- A Domineering board is an arbitrary finite subset of `ℤ × ℤ`. -/\ndef board := finset (ℤ × ℤ)\n...\n/-- The instance describing allowed moves on a Domineering board. -/\ninstance state : state board :=\n{ turn_bound := λ s, s.card / 2,\n L := λ s, (left s).image (move_left s),\n R := λ s, (right s).image (move_right s),\n left_bound := _\n right_bound := _, }\n```\nwhich computes:\n```\nexample : (domineering ([(0,0), (0,1), (1,0), (1,1)].to_finset) ≈ pgame.of_lists [1] [-1]) := dec_trivial\n```", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "pred_ne_self", []], ["add", "theorem", "succ_ne_self", []]]}, {"oldPath": null, "newPath": "src/set_theory/game/domineering.lean", "changes": [["add", "def", "L", ["pgame", "domineering"]], ["add", "def", "board", ["pgame", "domineering"]], ["add", "theorem", "card_of_mem_left", ["pgame", "domineering"]], ["add", "theorem", "card_of_mem_right", ["pgame", "domineering"]], ["add", "def", "left", ["pgame", "domineering"]], ["add", "def", "move_left", ["pgame", "domineering"]], ["add", "theorem", "move_left_card", ["pgame", "domineering"]], ["add", "theorem", "move_left_smaller", ["pgame", "domineering"]], ["add", "def", "move_right", ["pgame", "domineering"]], ["add", "theorem", "move_right_card", ["pgame", "domineering"]], ["add", "theorem", "move_right_smaller", ["pgame", "domineering"]], ["add", "def", "one", ["pgame", "domineering"]], ["add", "def", "right", ["pgame", "domineering"]], ["add", "def", "shift_right", ["pgame", "domineering"]], ["add", "def", "shift_up", ["pgame", "domineering"]], ["add", "def", "domineering", ["pgame"]]]}, {"oldPath": null, "newPath": "src/set_theory/game/short.lean", "changes": [["add", "def", "fintype_left", ["pgame"]], ["add", "def", "fintype_right", ["pgame"]], ["add", "def", "le_lt_decidable", ["pgame"]], ["add", "inductive", "list_short", ["pgame"]], ["add", "def", "move_left_short'", ["pgame"]], ["add", "def", "move_right_short'", ["pgame"]], ["add", "def", "mk'", ["pgame", "short"]], ["add", "inductive", "short", ["pgame"]], ["add", "def", "short_of_equiv_empty", ["pgame"]], ["add", "def", "short_of_relabelling", ["pgame"]]]}, {"oldPath": null, "newPath": "src/set_theory/game/state.lean", "changes": [["add", "def", "of", ["game"]], ["add", "def", "left_moves_of", ["pgame"]], ["add", "def", "left_moves_of_aux", ["pgame"]], ["add", "def", "of", ["pgame"]], ["add", "def", "of_aux", ["pgame"]], ["add", "def", "of_aux_relabelling", ["pgame"]], ["add", "def", "relabelling_move_left", ["pgame"]], ["add", "def", "relabelling_move_left_aux", ["pgame"]], ["add", "def", "relabelling_move_right", ["pgame"]], ["add", "def", "relabelling_move_right_aux", ["pgame"]], ["add", "def", "right_moves_of", ["pgame"]], ["add", "def", "right_moves_of_aux", ["pgame"]], ["add", "theorem", "turn_bound_ne_zero_of_left_move", ["pgame"]], ["add", "theorem", "turn_bound_ne_zero_of_right_move", ["pgame"]], ["add", "theorem", "turn_bound_of_left", ["pgame"]], ["add", "theorem", "turn_bound_of_right", ["pgame"]]]}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["mod", "theorem", "relabel_move_left'", ["pgame"]], ["mod", "theorem", "relabel_move_left", ["pgame"]], ["mod", "theorem", "relabel_move_right'", ["pgame"]], ["mod", "theorem", "relabel_move_right", ["pgame"]], ["add", "def", "trans", ["pgame", "relabelling"]]]}]}, {"timestamp": 1586651555, "sha": "0f893920", "message": "chore(scripts): update nolints.txt (#2395)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586645591, "sha": "ee8cb15a", "message": "feat(category_theory): functorial images (#2373)\nThis is the first in a series of most likely three PRs about the cohomology functor. In this PR, I\n* add documentation for `comma.lean`,\n* introduce the arrow category as a special case of the comma construction, and\n* introduce the notion of functorial images, which means that commutative squares induce morphisms on images making the obvious diagram commute.", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["add", "def", "hom_mk'", ["category_theory", "arrow"]], ["add", "theorem", "hom_mk'_left", ["category_theory", "arrow"]], ["add", "theorem", "hom_mk'_right", ["category_theory", "arrow"]], ["add", "def", "hom_mk", ["category_theory", "arrow"]], ["add", "theorem", "hom_mk_left", ["category_theory", "arrow"]], ["add", "theorem", "hom_mk_right", ["category_theory", "arrow"]], ["add", "theorem", "id_left", ["category_theory", "arrow"]], ["add", "theorem", "id_right", ["category_theory", "arrow"]], ["add", "def", "mk", ["category_theory", "arrow"]], ["add", "theorem", "mk_hom", ["category_theory", "arrow"]], ["add", "def", "arrow", ["category_theory"]], ["add", "theorem", "id_left", ["category_theory", "comma"]], ["add", "theorem", "id_right", ["category_theory", "comma"]], ["mod", "def", "map_right_comp", ["category_theory", "comma"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "def", "has_image_map_comp", ["category_theory", "limits"]], ["add", "def", "has_image_map_id", ["category_theory", "limits"]], ["add", "def", "im", ["category_theory", "limits"]], ["add", "theorem", "factor_map", ["category_theory", "limits", "image"]], ["add", "def", "map", ["category_theory", "limits", "image"]], ["add", "theorem", "map_comp", ["category_theory", "limits", "image"]], ["add", "theorem", "map_hom_mk'_ι", ["category_theory", "limits", "image"]], ["add", "theorem", "map_id", ["category_theory", "limits", "image"]], ["add", "theorem", "map_ι", ["category_theory", "limits", "image"]]]}]}, {"timestamp": 1586639961, "sha": "aa42f3b4", "message": "chore(scripts): update nolints.txt (#2391)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586630657, "sha": "5f1bfcf2", "message": "chore(tactic/lean_core_docs): add API docs for core Lean tactics (#2371)\nThis is an attempt to get some documentation of most core Lean tactics into the API docs.\nSee https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/undocumented.20core.20tactics (and the link in my second message in that thread) for background.\nCo-Authored-By: Rob Lewis \nCo-Authored-By: Scott Morrison \nCo-Authored-By: Bryan Gin-ge Chen ", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/lean_core_docs.lean", "changes": []}]}, {"timestamp": 1586630655, "sha": "80340d83", "message": "feat(category_theory): define action_category (#2358)\nThis is a simple construction that I couldn't find anywhere else: given a monoid/group action on X, we get a category/groupoid structure on X. The plan is to use to use the action groupoid in the proof of Nielsen-Schreier, where the projection onto the single object groupoid is thought of as a covering map.\nTo make sense of \"stabilizer is mul_equiv to End\", I added the simple fact that the stabilizer of any multiplicative action is a submonoid. This already existed for group actions. As far as I can tell, this instance shouldn't cause any problems as it is a Prop.", "changes": [{"oldPath": null, "newPath": "src/category_theory/action.lean", "changes": [["add", "def", "action_as_functor", ["category_theory"]], ["add", "theorem", "hom_as_subtype", ["category_theory", "action_category"]], ["add", "def", "obj_equiv", ["category_theory", "action_category"]], ["add", "def", "stabilizer_iso_End", ["category_theory", "action_category"]], ["add", "theorem", "stabilizer_iso_End_apply", ["category_theory", "action_category"]], ["add", "theorem", "stabilizer_iso_End_symm_apply", ["category_theory", "action_category"]], ["add", "def", "π", ["category_theory", "action_category"]], ["add", "theorem", "π_map", ["category_theory", "action_category"]], ["add", "theorem", "π_obj", ["category_theory", "action_category"]], ["add", "def", "action_category", ["category_theory"]]]}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": [["mod", "def", "elements", ["category_theory", "functor"]]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}]}, {"timestamp": 1586621788, "sha": "e1feab4e", "message": "refactor(*): rename ordered groups/monoids to ordered add_ groups/monoids (#2347)\nIn the perfectoid project we need ordered commutative monoids, and they are multiplicative. So the additive versions should be renamed to make some place.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "le_sum_of_subadditive", ["finset"]], ["mod", "theorem", "sum_lt_top", ["with_top"]], ["mod", "theorem", "sum_lt_top_iff", ["with_top"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "smul_nonneg", ["add_monoid"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "nonneg_def", ["nonneg_add_comm_group"]], ["add", "theorem", "nonneg_total_iff", ["nonneg_add_comm_group"]], ["add", "theorem", "not_zero_pos", ["nonneg_add_comm_group"]], ["add", "theorem", "pos_def", ["nonneg_add_comm_group"]], ["add", "def", "to_decidable_linear_ordered_add_comm_group", ["nonneg_add_comm_group"]], ["add", "theorem", "zero_lt_iff_nonneg_nonneg", ["nonneg_add_comm_group"]], ["del", "theorem", "nonneg_def", ["nonneg_comm_group"]], ["del", "theorem", "nonneg_total_iff", ["nonneg_comm_group"]], ["del", "theorem", "not_zero_pos", ["nonneg_comm_group"]], ["del", "theorem", "pos_def", ["nonneg_comm_group"]], ["del", "def", "to_decidable_linear_ordered_add_comm_group", ["nonneg_comm_group"]], ["del", "theorem", "zero_lt_iff_nonneg_nonneg", ["nonneg_comm_group"]], ["add", "def", "mk'", ["ordered_add_comm_group"]], ["del", "def", "mk'", ["ordered_comm_group"]], ["mod", "theorem", "add_bot", ["with_bot"]], ["mod", "theorem", "bot_add", ["with_bot"]], ["mod", "theorem", "add_eq_top", ["with_top"]], ["mod", "theorem", "add_lt_top", ["with_top"]], ["mod", "theorem", "add_top", ["with_top"]], ["mod", "theorem", "top_add", ["with_top"]], ["mod", "theorem", "zero_lt_coe", ["with_top"]], ["mod", "theorem", "zero_lt_top", ["with_top"]], ["add", "def", "ordered_add_comm_monoid", ["with_zero"]], ["del", "def", "ordered_comm_monoid", ["with_zero"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "theorem", "add_eq_zero_iff", ["finsupp"]], ["mod", "theorem", "le_iff", ["finsupp"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "le_sum_of_subadditive", ["multiset"]]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": []}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_nhds", ["decidable_linear_ordered_add_comm_group"]], ["del", "theorem", "tendsto_nhds", ["decidable_linear_ordered_comm_group"]]]}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}]}, {"timestamp": 1586615228, "sha": "c9fca154", "message": "chore(algebra/category): remove some [reducible] after Lean 3.8 (#2389)\nNow that Lean 3.8 has arrived, we can essentially revert #2290, but leave in the examples verifying that everything still works.\nLovely!", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}]}, {"timestamp": 1586610039, "sha": "83359d14", "message": "chore(scripts): update nolints.txt (#2390)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586599091, "sha": "4fa29249", "message": "chore(scripts): update nolints.txt (#2388)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586599089, "sha": "81d8104f", "message": "feat(actions): manage labels on PR review (#2387)\nGithub actions will now add \"ready-to-merge\" to PRs that are approved by writing \"bors r+\" / \"bors merge\" in a PR reviews. It will also remove the \"request-review\" label, if present.", "changes": [{"oldPath": ".github/workflows/add_label.yml", "newPath": ".github/workflows/add_label_from_comment.yml", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/add_label_from_review.yml", "changes": []}]}, {"timestamp": 1586599087, "sha": "c68f23df", "message": "chore(category_theory/types): add documentation, remove bad simp lemmas and instances, add notation for functions as morphisms (#2383)\n* Add module doc and doc strings for `src/category_theory/types.lean`.\n* Remove some bad simp lemmas and instances in that file and `src/category_theory/category/default.lean`.\n* Add a notation `↾f` which enables Lean to see a function `f : α → β` as a morphism `α ⟶ β` in the category of types.", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["add", "theorem", "epi_comp", ["category_theory"]], ["add", "theorem", "mono_comp", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "def", "as_hom", ["category_theory"]], ["del", "theorem", "map_comp", ["category_theory", "functor_to_types"]], ["add", "theorem", "map_comp_apply", ["category_theory", "functor_to_types"]], ["del", "theorem", "map_id", ["category_theory", "functor_to_types"]], ["add", "theorem", "map_id_apply", ["category_theory", "functor_to_types"]], ["mod", "theorem", "types_comp", ["category_theory"]], ["add", "theorem", "types_comp_apply", ["category_theory"]], ["mod", "theorem", "types_hom", ["category_theory"]], ["mod", "theorem", "types_id", ["category_theory"]], ["add", "theorem", "types_id_apply", ["category_theory"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1586599085, "sha": "00b510eb", "message": "perf(data/*): add inline attributes (#2380)\nThis is part of an effort to bring `rewrite_search` to mathlib. Depends on #2375.", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}]}, {"timestamp": 1586599083, "sha": "690643ab", "message": "fix(tactic/equiv_rw): don't use `subst` unnecessarily (#2334)\nThis removes an unnecessary `subst` from the algorithm in `equiv_rw`, which was responsible for inserting `eq.rec`'s in data terms.", "changes": [{"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": []}]}, {"timestamp": 1586589439, "sha": "8556499f", "message": "feat(category_theory): make defining groupoids easier (#2360)\nThe point of this PR is to lower the burden of proof in showing that a category is a groupoid. Rather than constructing well-defined two-sided inverses everywhere, with `groupoid.of_trunc_split_mono` you'll only need to show that every morphism has some retraction. This makes defining the free groupoid painless. There the retractions are defined by recursion on a quotient, so this saves the work of showing that all the retractions agree.\nI used `trunc` instead of `nonempty` to avoid choice / noncomputability.\nI don't understand why the @'s are needed: it seems Lean doesn't know what category structure C has without specifying it?", "changes": [{"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["add", "def", "of_epi_section", ["category_theory", "is_iso"]], ["add", "def", "of_mono_retraction", ["category_theory", "is_iso"]]]}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["add", "def", "of_is_iso", ["category_theory", "groupoid"]], ["add", "def", "of_trunc_split_mono", ["category_theory", "groupoid"]]]}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1586579276, "sha": "597704ac", "message": "chore(*): switch to lean 3.8.0 (#2361)\nSwitch to Lean 3.8.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "docs/tutorial/category_theory/intro.lean", "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/colimits.lean", "newPath": "src/algebra/category/Group/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["mod", "def", "of", ["Module"]]]}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/group/anti_hom.lean", "newPath": "src/algebra/group/anti_hom.lean", "changes": []}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/group_with_zero.lean", "newPath": "src/algebra/group_with_zero.lean", "changes": []}, {"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "zero_smul", []]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["mod", "theorem", "abs_le_abs", []], ["mod", "theorem", "min_add", []], ["mod", "theorem", "min_sub", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "eq_of_abs_sub_nonpos", ["decidable_linear_ordered_add_comm_group"]], ["del", "theorem", "eq_of_abs_sub_nonpos", ["decidable_linear_ordered_comm_group"]], ["mod", "theorem", "neg_neg_iff_pos", []], ["add", "def", "to_decidable_linear_ordered_add_comm_group", ["nonneg_comm_group"]], ["del", "def", "to_decidable_linear_ordered_comm_group", ["nonneg_comm_group"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/category/basic.lean", "newPath": "src/category/basic.lean", "changes": []}, {"oldPath": "src/category/equiv_functor.lean", "newPath": "src/category/equiv_functor.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/unbundled_hom.lean", "newPath": "src/category_theory/concrete_category/unbundled_hom.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/functorial.lean", "newPath": "src/category_theory/functorial.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "def", "cocone", ["category_theory", "limits", "colimit"]], ["mod", "def", "cone", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["mod", "def", "is_image", ["category_theory", "limits", "image"]], ["mod", "def", "mono_factorisation", ["category_theory", "limits", "image"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/regular_mono.lean", "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monad/types.lean", "newPath": "src/category_theory/monad/types.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/shift.lean", "newPath": "src/category_theory/shift.lean", "changes": [["mod", "def", "shift", ["category_theory"]]]}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "exists_le_of_sum_le", ["list"]], ["mod", "theorem", "exists_lt_of_sum_lt", ["list"]], ["mod", "theorem", "length_pos_of_sum_pos", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/list/forall2.lean", "newPath": "src/data/list/forall2.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["mod", "theorem", "map_fst", ["prod"]], ["add", "theorem", "map_mk", ["prod"]], ["mod", "theorem", "map_snd", ["prod"]]]}, {"oldPath": "src/data/rat/meta_defs.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "inv_inv", ["nnreal"]]]}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/unordered_interval.lean", "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": []}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": []}, {"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": [["mod", "structure", "zsqrtd", []]]}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["mod", "theorem", "one_smul", []]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/linear_action.lean", "newPath": "src/linear_algebra/linear_action.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "theorem", "abs_def", ["filter", "filter_product"]], ["mod", "theorem", "of_abs", ["filter", "filter_product"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": [["add", "def", "ordered_add_comm_group_game", ["game"]], ["del", "def", "ordered_comm_group_game", ["game"]]]}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["mod", "theorem", "lt_add_of_pos_helper", ["norm_num"]]]}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "tendsto_abs_at_top_at_top", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "test/coinductive.lean", "newPath": "test/coinductive.lean", "changes": []}, {"oldPath": "test/delta_instance.lean", "newPath": "test/delta_instance.lean", "changes": []}, {"oldPath": "test/monotonicity/test_cases.lean", "newPath": "test/monotonicity/test_cases.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": [["mod", "def", "dummy", []], ["mod", "def", "right_param", []], ["mod", "def", "wrong_param", []]]}, {"oldPath": "test/traversable.lean", "newPath": "test/traversable.lean", "changes": []}, {"oldPath": "test/trunc_cases.lean", "newPath": "test/trunc_cases.lean", "changes": [["mod", "def", "u", []]]}]}, {"timestamp": 1586552166, "sha": "ebdeb3b6", "message": "chore(scripts): update nolints.txt (#2386)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586541830, "sha": "29080c8c", "message": "feat(data/list/range): add sum lemmas (#2385)\nAdding the proof that left and right multiplication in a ring commute with list sum.", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "map_sub", ["add_monoid_hom"]], ["add", "def", "mul_left", ["add_monoid_hom"]], ["add", "def", "mul_right", ["add_monoid_hom"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_map_hom", ["list"]], ["add", "theorem", "sum_map_mul_left", ["list"]], ["add", "theorem", "sum_map_mul_right", ["list"]]]}, {"oldPath": "src/data/list/range.lean", "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "prod_range_succ'", ["list"]]]}]}, {"timestamp": 1586541828, "sha": "61fa4896", "message": "feat(tactic/trunc_cases): a tactic for case analysis on trunc hypotheses (#2368)\n```\n/--\nPerform case analysis on a `trunc` expression, \npreferentially using the recursor `trunc.rec_on_subsingleton` \nwhen the goal is a subsingleton, \nand using `trunc.rec` otherwise.\nAdditionally, if the new hypothesis is a type class, \nreset the instance cache.\n-/\n```", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/trunc_cases.lean", "changes": []}, {"oldPath": null, "newPath": "test/trunc_cases.lean", "changes": [["add", "theorem", "eq_rec_prod", []], ["add", "def", "u", []]]}]}, {"timestamp": 1586533177, "sha": "3cc7a32b", "message": "feat(order/complete_lattice): add a constructor from `partial_order` and `Inf` (#2359)\nAlso use `∃!` in `data/setoid`.", "changes": [{"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": [["del", "theorem", "Inf_le", ["setoid"]], ["mod", "theorem", "classes_eqv_classes", ["setoid"]], ["mod", "theorem", "eq_of_mem_eqv_class", ["setoid"]], ["mod", "theorem", "eqv_class_mem", ["setoid"]], ["mod", "theorem", "eqv_classes_disjoint", ["setoid"]], ["del", "theorem", "le_Inf", ["setoid"]], ["mod", "def", "mk_classes", ["setoid"]], ["add", "theorem", "rel_iff_exists_classes", ["setoid"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["del", "theorem", "Inf_le", ["con"]], ["mod", "theorem", "con_gen_of_con", ["con"]], ["del", "theorem", "le_Inf", ["con"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "theorem", "lower_bounds_insert", []], ["mod", "theorem", "lower_bounds_singleton", []], ["mod", "theorem", "upper_bounds_insert", []], ["mod", "theorem", "upper_bounds_singleton", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "def", "complete_lattice_of_Inf", []]]}]}, {"timestamp": 1586526512, "sha": "5169595d", "message": "chore(tactic/omega): add trace.omega option to show internal representation (#2377)\nThis is helpful when debugging issues such as #2376 and #1484.", "changes": [{"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}]}, {"timestamp": 1586526510, "sha": "bf8f25ae", "message": "feat(algebra/lie_algebra): quotients of Lie modules are Lie modules (#2335)", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "lie_quotient_action_apply", ["lie_submodule", "quotient"]], ["add", "def", "lie_submodule_invariant", ["lie_submodule", "quotient"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comap_le_comap_smul", ["submodule"]], ["add", "def", "compatible_maps", ["submodule"]], ["add", "theorem", "inf_comap_le_comap_add", ["submodule"]], ["add", "def", "mapq_linear", ["submodule"]]]}]}, {"timestamp": 1586523243, "sha": "1a099b38", "message": "chore(scripts): update nolints.txt (#2381)\nI am happy to remove some nolints for you!", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586523242, "sha": "a7142455", "message": "feat(group_theory/order_of_element): order_of_dvd_iff_pow_eq_one (#2364)", "changes": [{"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["add", "theorem", "order_of_dvd_iff_pow_eq_one", []]]}]}, {"timestamp": 1586519606, "sha": "55814dc3", "message": "fix(.github/workflows/add_label): add missing outputs (#2379)\nI hope this fixes the `add_label` workflow.", "changes": [{"oldPath": ".github/workflows/add_label.yml", "newPath": ".github/workflows/add_label.yml", "changes": []}]}, {"timestamp": 1586519604, "sha": "808fa8df", "message": "chore(.github): remove linebreaks from pull request template (#2378)\ngithub treats a newline in the markdown text as a linebreak.", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}]}, {"timestamp": 1586513999, "sha": "e7582631", "message": "refactor(ring_theory/algebra): use bundled homs, allow semirings (#2303)\nFixes #2297\nBuild fails because of some class instance problems, asked [on Zulip](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Need.20help.20with.20class.20instance.20resolution), no answer yet.", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "aeval_C", ["mv_polynomial"]], ["mod", "theorem", "aeval_def", ["mv_polynomial"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "aeval_C", ["polynomial"]], ["mod", "theorem", "aeval_def", ["polynomial"]], ["add", "theorem", "coe_eval₂_ring_hom", ["polynomial"]], ["mod", "theorem", "degree_map", ["polynomial"]], ["mod", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["mod", "theorem", "degree_map_le", ["polynomial"]], ["add", "def", "eval₂_ring_hom", ["polynomial"]], ["mod", "theorem", "leading_coeff_map", ["polynomial"]], ["mod", "theorem", "map_div", ["polynomial"]], ["mod", "theorem", "map_div_by_monic", ["polynomial"]], ["mod", "theorem", "map_eq_zero", ["polynomial"]], ["mod", "theorem", "map_id", ["polynomial"]], ["mod", "theorem", "map_injective", ["polynomial"]], ["mod", "theorem", "map_map", ["polynomial"]], ["mod", "theorem", "map_mod", ["polynomial"]], ["mod", "theorem", "map_mod_by_monic", ["polynomial"]], ["mod", "theorem", "map_mod_div_by_monic", ["polynomial"]], ["mod", "theorem", "map_neg", ["polynomial"]], ["mod", "theorem", "map_sub", ["polynomial"]], ["mod", "theorem", "monic_map", ["polynomial"]], ["mod", "theorem", "nat_degree_map", ["polynomial"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "splits_comp_of_splits", ["polynomial"]], ["mod", "theorem", "splits_map_iff", ["polynomial"]], ["mod", "theorem", "splits_of_splits_id", ["polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "theorem", "eval₂_root", ["adjoin_root"]], ["mod", "theorem", "is_root_root", ["adjoin_root"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "commutes", ["alg_hom"]], ["add", "theorem", "comp_algebra_map", ["alg_hom"]], ["mod", "theorem", "ext", ["alg_hom"]], ["del", "theorem", "id_to_linear_map", ["alg_hom"]], ["mod", "def", "of_comap", ["algebra", "comap"]], ["mod", "def", "to_comap", ["algebra", "comap"]], ["mod", "def", "comap", ["algebra"]], ["mod", "theorem", "commutes", ["algebra"]], ["mod", "theorem", "map_eq_self", ["algebra", "id"]], ["mod", "theorem", "left_comm", ["algebra"]], ["del", "theorem", "map_add", ["algebra"]], ["del", "theorem", "map_mul", ["algebra"]], ["del", "theorem", "map_neg", ["algebra"]], ["del", "theorem", "map_one", ["algebra"]], ["del", "theorem", "map_sub", ["algebra"]], ["del", "theorem", "map_zero", ["algebra"]], ["mod", "theorem", "mem_bot", ["algebra"]], ["mod", "def", "of_id", ["algebra"]], ["mod", "theorem", "of_id_apply", ["algebra"]], ["del", "def", "of_ring_hom", ["algebra"]], ["mod", "theorem", "smul_def''", ["algebra"]], ["mod", "theorem", "smul_def", ["algebra"]], ["mod", "theorem", "to_comap_apply", ["algebra"]], ["mod", "def", "algebra_map", []], ["add", "def", "to_algebra", ["ring_hom"]], ["mod", "theorem", "range_le", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["mod", "theorem", "is_integral_algebra_map", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1586502166, "sha": "f723f375", "message": "feat(ci): switch from mergify to bors (#2322)\nThis PR (joint work with @gebner) changes the automation that merges our PRs from mergify to a service called [bors](https://bors.tech/). Currently, the \"time-to-master\" of an approved PR grows linearly with the number of currently queued PRs, since mergify builds PRs against master one at a time. bors batches approved PRs together before building them against master so that most PRs should merge within 2*(current build time).\nAs far as day-to-day use goes, the main difference is that maintainers will approve PRs by commenting with the magic words \"`bors r+`\" instead of \"approving\" on Github and adding the \"ready-to-merge\" label. Contributors should be aware that pushing additional commits to an approved PR will now require a new approval.\nSome longer notes on bors and mathlib can be found [here](https://github.com/leanprover-community/mathlib/blob/2ea15d65c32574aaf513e27feb24424354340eea/docs/contribute/bors.md).", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": null, "newPath": ".github/workflows/add_label.yml", "changes": []}, {"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".mergify.yml", "newPath": null, "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "bors.toml", "changes": []}, {"oldPath": null, "newPath": "docs/contribute/bors.md", "changes": []}, {"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "scripts/fetch_olean_cache.sh", "newPath": "scripts/fetch_olean_cache.sh", "changes": []}, {"oldPath": "scripts/look_up_olean_hash.py", "newPath": null, "changes": []}, {"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}, {"oldPath": "scripts/write_azure_table_entry.py", "newPath": null, "changes": []}]}, {"timestamp": 1586498470, "sha": "495deb97", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586496431, "sha": "6152d450", "message": "refactor(field_theory/perfect_closure): use bundled homs, review (#2357)\n* refactor(field_theory/perfect_closure): use bundled homs, review\nAlso add lemmas like `monoid_hom.iterate_map_mul`.\n* Fix a typo spotted by `lint`\n* Apply suggestions from code review\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "def", "frobenius", []], ["mod", "theorem", "frobenius_add", []], ["mod", "theorem", "frobenius_def", []], ["mod", "theorem", "frobenius_inj", []], ["mod", "theorem", "frobenius_mul", []], ["mod", "theorem", "frobenius_nat_cast", []], ["mod", "theorem", "frobenius_neg", []], ["mod", "theorem", "frobenius_one", []], ["mod", "theorem", "frobenius_sub", []], ["mod", "theorem", "frobenius_zero", []], ["del", "theorem", "map_frobenius", ["is_monoid_hom"]], ["add", "theorem", "iterate_map_frobenius", ["monoid_hom"]], ["add", "theorem", "map_frobenius", ["monoid_hom"]], ["add", "theorem", "map_iterate_frobenius", ["monoid_hom"]], ["add", "theorem", "iterate_map_frobenius", ["ring_hom"]], ["add", "theorem", "map_frobenius", ["ring_hom"]], ["add", "theorem", "map_iterate_frobenius", ["ring_hom"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "iterate_map_smul", ["add_monoid_hom"]], ["add", "theorem", "iterate_map_pow", ["monoid_hom"]], ["add", "theorem", "iterate_map_pow", ["ring_hom"]], ["add", "theorem", "iterate_map_smul", ["ring_hom"]], ["mod", "theorem", "map_pow", ["ring_hom"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "iterate_map_inv", ["monoid_hom"]], ["add", "theorem", "iterate_map_mul", ["monoid_hom"]], ["add", "theorem", "iterate_map_one", ["monoid_hom"]], ["add", "theorem", "iterate_map_sub", ["monoid_hom"]], ["add", "theorem", "iterate_map_add", ["ring_hom"]], ["add", "theorem", "iterate_map_mul", ["ring_hom"]], ["add", "theorem", "iterate_map_neg", ["ring_hom"]], ["add", "theorem", "iterate_map_one", ["ring_hom"]], ["add", "theorem", "iterate_map_sub", ["ring_hom"]], ["add", "theorem", "iterate_map_zero", ["ring_hom"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["add", "theorem", "coe_frobenius_equiv", []], ["add", "theorem", "coe_frobenius_equiv_symm", []], ["add", "theorem", "eq_pth_root_iff", []], ["add", "def", "frobenius_equiv", []], ["mod", "theorem", "frobenius_pth_root", []], ["del", "theorem", "pth_root", ["is_ring_hom"]], ["add", "theorem", "map_iterate_pth_root", ["monoid_hom"]], ["add", "theorem", "map_pth_root", ["monoid_hom"]], ["del", "def", "UMP", ["perfect_closure"]], ["mod", "theorem", "eq_iff'", ["perfect_closure"]], ["mod", "theorem", "eq_pth_root", ["perfect_closure"]], ["del", "def", "frobenius_equiv", ["perfect_closure"]], ["del", "theorem", "frobenius_equiv_apply", ["perfect_closure"]], ["mod", "theorem", "frobenius_mk", ["perfect_closure"]], ["add", "theorem", "induction_on", ["perfect_closure"]], ["mod", "theorem", "int_cast", ["perfect_closure"]], ["add", "def", "lift", ["perfect_closure"]], ["add", "def", "lift_on", ["perfect_closure"]], ["add", "theorem", "lift_on_mk", ["perfect_closure"]], ["add", "def", "mk", ["perfect_closure"]], ["add", "theorem", "mk_add_mk", ["perfect_closure"]], ["add", "theorem", "mk_mul_mk", ["perfect_closure"]], ["mod", "theorem", "mk_zero", ["perfect_closure"]], ["mod", "theorem", "nat_cast", ["perfect_closure"]], ["mod", "theorem", "nat_cast_eq_iff", ["perfect_closure"]], ["add", "theorem", "neg_mk", ["perfect_closure"]], ["mod", "def", "of", ["perfect_closure"]], ["add", "theorem", "of_apply", ["perfect_closure"]], ["add", "theorem", "one_def", ["perfect_closure"]], ["add", "theorem", "quot_mk_eq_mk", ["perfect_closure"]], ["mod", "theorem", "sound", ["perfect_closure", "r"]], ["mod", "inductive", "r", ["perfect_closure"]], ["add", "theorem", "zero_def", ["perfect_closure"]], ["mod", "def", "perfect_closure", []], ["add", "def", "pth_root", []], ["add", "theorem", "pth_root_eq_iff", []], ["mod", "theorem", "pth_root_frobenius", []], ["add", "theorem", "map_iterate_pth_root", ["ring_hom"]], ["add", "theorem", "map_pth_root", ["ring_hom"]]]}]}, {"timestamp": 1586486797, "sha": "b15c213a", "message": "chore(*): replace uses of `---` delimiter in tactic docs (#2372)\n* update abel doc string\nthe tactic doc entry seems completely fine as the doc string,\nI don't know why these were separated\n* replace uses of --- in docs", "changes": [{"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/clear.lean", "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/rename.lean", "newPath": "src/tactic/rename.lean", "changes": []}, {"oldPath": "src/tactic/rename_var.lean", "newPath": "src/tactic/rename_var.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}]}, {"timestamp": 1586476606, "sha": "19e1a969", "message": "doc(add_tactic_doc): slight improvement to docs (#2365)\n* doc(add_tactic_doc): slight improvement to docs\n* Update docs/contribute/doc.md\nCo-Authored-By: Yury G. Kudryashov \n* sentence\n* update add_tactic_doc doc entry", "changes": [{"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}]}, {"timestamp": 1586466316, "sha": "4a1dc427", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586464293, "sha": "6a7db279", "message": "feat(tactic/ring_exp) allow ring_exp inside of conv blocks (#2369)\n* allow ring_exp inside of conv blocks\n* Update test/ring_exp.lean\n* Update test/ring_exp.lean\n* Update test/ring_exp.lean\n* add docstrings", "changes": [{"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1586454083, "sha": "d240f382", "message": "feat(tactic/simp_result): tactics for simplifying the results of other tactics (#2356)\n* feat(tactic/simp_result): tactics for simplifying the results of other tactics\n* word\n* better tests\n* order of arguments\n* Revert \"order of arguments\"\nThis reverts commit 38cfec6867459fcc4c5ef2d41f5313a5b0466c53.\n* fix add_tactic_doc\n* slightly robustify testing\n* improve documentation", "changes": [{"oldPath": null, "newPath": "src/tactic/simp_result.lean", "changes": []}, {"oldPath": null, "newPath": "test/simp_result.lean", "changes": []}]}, {"timestamp": 1586436289, "sha": "63fc23a6", "message": "feat(data/list): chain_iff_nth_le (#2354)\n* feat(data/list): chain_iff_nth_le\n* Update src/data/list/basic.lean\nCo-Authored-By: Johan Commelin \n* move\n* fix", "changes": [{"oldPath": "src/data/list/chain.lean", "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "chain'_iff_nth_le", ["list"]], ["add", "theorem", "chain_iff_nth_le", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "lt_of_lt_pred", ["nat"]]]}]}, {"timestamp": 1586426934, "sha": "bda8a050", "message": "doc(docs/extras/tactic_writing) add cheap method (#2198)\n* doc(docs/extras/tactic_writing) add cheap method\nAbout 50% of my personal use cases for writing tactics are just because I want a simple way of stringing several tactics together, so I propose adding this so I will know where to look when I realise I can't remember the syntax.\n* style fixes\n* Update tactic_writing.md\n* Update tactic_writing.md\n* Update docs/extras/tactic_writing.md", "changes": [{"oldPath": "docs/extras/tactic_writing.md", "newPath": "docs/extras/tactic_writing.md", "changes": []}]}, {"timestamp": 1586423033, "sha": "a8797ce7", "message": "feat(data/set/basic): add lemmata (#2353)\n* feat(data/set/basic): add lemmata\n* switch to term mode proof\n* removing dupe\n* make linter happy\n* Update src/data/set/basic.lean\nCo-Authored-By: sgouezel \n* change proof", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "exists_range_iff'", ["set"]], ["add", "theorem", "mem_compl_singleton_iff", ["set"]], ["add", "theorem", "subset_compl_singleton_iff", ["set"]]]}]}, {"timestamp": 1586412623, "sha": "80d3ed8f", "message": "fix(algebra/euclidean_domain): remove decidable_eq assumption (#2362)\nThis PR removes the `decidable_eq` assumption on the `field.to_euclidean_domain` instance. Decidable equality was only used to define the remainder with an if-then-else, but this can also be done by exploiting the fact that `0⁻¹ = 0`.\nThe current instance is a bit problematic since it can cause `a + b : ℝ` to be noncomputable if type-class inference happens to choose the wrong instance (going through `euclidean_domain` instead of \"directly\" through some kind of ring).", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}]}, {"timestamp": 1586402165, "sha": "67b121e4", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586400630, "sha": "fbc95927", "message": "chore(data/list): move some sections to separate files (#2341)\n* move list.func namespace to its own file\n* move erase_dup to its own file\n* move rotate to its own file\n* move tfae to its own file\n* move bag_inter and intervals\n* move range out\n* move nodup\n* move chain and pairwise\n* move zip\n* move forall2\n* move of_fn\n* add copyright headers\n* remove unnecessary sections, move defns to func.set and tfae\n* fixes\n* oops, forgot to add file", "changes": [{"oldPath": "src/category/traversable/instances.lean", "newPath": "src/category/traversable/instances.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/antidiagonal.lean", "changes": [["add", "def", "antidiagonal", ["list", "nat"]], ["add", "theorem", "antidiagonal_zero", ["list", "nat"]], ["add", "theorem", "length_antidiagonal", ["list", "nat"]], ["add", "theorem", "mem_antidiagonal", ["list", "nat"]], ["add", "theorem", "nodup_antidiagonal", ["list", "nat"]]]}, {"oldPath": null, "newPath": "src/data/list/bag_inter.lean", "changes": [["add", "theorem", "bag_inter_nil", ["list"]], ["add", "theorem", "bag_inter_nil_iff_inter_nil", ["list"]], ["add", "theorem", "bag_inter_sublist_left", ["list"]], ["add", "theorem", "cons_bag_inter_of_neg", ["list"]], ["add", "theorem", "cons_bag_inter_of_pos", ["list"]], ["add", "theorem", "count_bag_inter", ["list"]], ["add", "theorem", "mem_bag_inter", ["list"]], ["add", "theorem", "nil_bag_inter", ["list"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "append_consecutive", ["list", "Ico"]], ["del", "theorem", "bag_inter_consecutive", ["list", "Ico"]], ["del", "theorem", "chain'_succ", ["list", "Ico"]], ["del", "theorem", "eq_cons", ["list", "Ico"]], ["del", "theorem", "eq_empty_iff", ["list", "Ico"]], ["del", "theorem", "eq_nil_of_le", ["list", "Ico"]], ["del", "theorem", "filter_le", ["list", "Ico"]], ["del", "theorem", "filter_le_of_le", ["list", "Ico"]], ["del", "theorem", "filter_le_of_le_bot", ["list", "Ico"]], ["del", "theorem", "filter_le_of_top_le", ["list", "Ico"]], ["del", "theorem", "filter_lt", ["list", "Ico"]], ["del", "theorem", "filter_lt_of_ge", ["list", "Ico"]], ["del", "theorem", "filter_lt_of_le_bot", ["list", "Ico"]], ["del", "theorem", "filter_lt_of_top_le", ["list", "Ico"]], ["del", "theorem", "inter_consecutive", ["list", "Ico"]], ["del", "theorem", "length", ["list", "Ico"]], ["del", "theorem", "map_add", ["list", "Ico"]], ["del", "theorem", "map_sub", ["list", "Ico"]], ["del", "theorem", "mem", ["list", "Ico"]], ["del", "theorem", "nodup", ["list", "Ico"]], ["del", "theorem", "not_mem_top", ["list", "Ico"]], ["del", "theorem", "pairwise_lt", ["list", "Ico"]], ["del", "theorem", "pred_singleton", ["list", "Ico"]], ["del", "theorem", "self_empty", ["list", "Ico"]], ["del", "theorem", "succ_singleton", ["list", "Ico"]], ["del", "theorem", "succ_top", ["list", "Ico"]], ["del", "theorem", "trichotomy", ["list", "Ico"]], ["del", "theorem", "zero_bot", ["list", "Ico"]], ["del", "def", "Ico", ["list"]], ["del", "theorem", "array_eq_of_fn", ["list"]], ["del", "theorem", "bag_inter_nil", ["list"]], ["del", "theorem", "bag_inter_nil_iff_inter_nil", ["list"]], ["del", "theorem", "bag_inter_sublist_left", ["list"]], ["del", "theorem", "bi_unique_forall₂", ["list"]], ["del", "theorem", "cons", ["list", "chain'"]], ["del", "theorem", "iff", ["list", "chain'"]], ["del", "theorem", "iff_mem", ["list", "chain'"]], ["del", "theorem", "imp", ["list", "chain'"]], ["del", "theorem", "tail", ["list", "chain'"]], ["del", "theorem", "chain'_cons", ["list"]], ["del", "theorem", "chain'_iff_pairwise", ["list"]], ["del", "theorem", "chain'_map", ["list"]], ["del", "theorem", "chain'_map_of_chain'", ["list"]], ["del", "theorem", "chain'_nil", ["list"]], ["del", "theorem", "chain'_of_chain'_map", ["list"]], ["del", "theorem", "chain'_pair", ["list"]], ["del", "theorem", "chain'_reverse", ["list"]], ["del", "theorem", "chain'_singleton", ["list"]], ["del", "theorem", "chain'_split", ["list"]], ["del", "theorem", "iff", ["list", "chain"]], ["del", "theorem", "iff_mem", ["list", "chain"]], ["del", "theorem", "imp'", ["list", "chain"]], ["del", "theorem", "imp", ["list", "chain"]], ["del", "theorem", "chain_iff_pairwise", ["list"]], ["del", "theorem", "chain_lt_range'", ["list"]], ["del", "theorem", "chain_map", ["list"]], ["del", "theorem", "chain_map_of_chain", ["list"]], ["del", "theorem", "chain_of_chain_cons", ["list"]], ["del", "theorem", "chain_of_chain_map", ["list"]], ["del", "theorem", "chain_of_pairwise", ["list"]], ["del", "theorem", "chain_singleton", ["list"]], ["del", "theorem", "chain_split", ["list"]], ["del", "theorem", "chain_succ_range'", ["list"]], ["del", "theorem", "cons_bag_inter_of_neg", ["list"]], ["del", "theorem", "cons_bag_inter_of_pos", ["list"]], ["del", "theorem", "count_bag_inter", ["list"]], ["del", "theorem", "count_eq_one_of_mem", ["list"]], ["del", "theorem", "diff_eq_filter_of_nodup", ["list"]], ["del", "theorem", "disjoint_of_nodup_append", ["list"]], ["del", "theorem", "enum_from_map_fst", ["list"]], ["del", "theorem", "enum_map_fst", ["list"]], ["del", "theorem", "erase_dup_append", ["list"]], ["del", "theorem", "erase_dup_cons_of_mem'", ["list"]], ["del", "theorem", "erase_dup_cons_of_mem", ["list"]], ["del", "theorem", "erase_dup_cons_of_not_mem'", ["list"]], ["del", "theorem", "erase_dup_cons_of_not_mem", ["list"]], ["del", "theorem", "erase_dup_eq_self", ["list"]], ["del", "theorem", "erase_dup_idempotent", ["list"]], ["del", "theorem", "erase_dup_nil", ["list"]], ["del", "theorem", "erase_dup_sublist", ["list"]], ["del", "theorem", "erase_dup_subset", ["list"]], ["del", "theorem", "filter_map_cons", ["list"]], ["del", "def", "fin_range", ["list"]], ["del", "theorem", "forall_mem_ne", ["list"]], ["del", "theorem", "forall_mem_pw_filter", ["list"]], ["del", "theorem", "forall_of_forall_of_pairwise", ["list"]], ["del", "theorem", "forall_of_pairwise", ["list"]], ["del", "theorem", "flip", ["list", "forall₂"]], ["del", "theorem", "imp", ["list", "forall₂"]], ["del", "theorem", "mp", ["list", "forall₂"]], ["del", "theorem", "forall₂_and_left", ["list"]], ["del", "theorem", "forall₂_cons", ["list"]], ["del", "theorem", "forall₂_cons_left_iff", ["list"]], ["del", "theorem", "forall₂_cons_right_iff", ["list"]], ["del", "theorem", "forall₂_drop", ["list"]], ["del", "theorem", "forall₂_drop_append", ["list"]], ["del", "theorem", "forall₂_eq_eq_eq", ["list"]], ["del", "theorem", "forall₂_iff_zip", ["list"]], ["del", "theorem", "forall₂_length_eq", ["list"]], ["del", "theorem", "forall₂_map_left_iff", ["list"]], ["del", "theorem", "forall₂_map_right_iff", ["list"]], ["del", "theorem", "forall₂_nil_left_iff", ["list"]], ["del", "theorem", "forall₂_nil_right_iff", ["list"]], ["del", "theorem", "forall₂_refl", ["list"]], ["del", "theorem", "forall₂_same", ["list"]], ["del", "theorem", "forall₂_take", ["list"]], ["del", "theorem", "forall₂_take_append", ["list"]], ["del", "theorem", "forall₂_zip", ["list"]], ["del", "theorem", "add_nil", ["list", "func"]], ["del", "theorem", "eq_get_of_mem", ["list", "func"]], ["del", "theorem", "eq_of_equiv", ["list", "func"]], ["del", "theorem", "equiv_of_eq", ["list", "func"]], ["del", "theorem", "equiv_refl", ["list", "func"]], ["del", "theorem", "equiv_symm", ["list", "func"]], ["del", "theorem", "equiv_trans", ["list", "func"]], ["del", "theorem", "forall_val_of_forall_mem", ["list", "func"]], ["del", "theorem", "get_add", ["list", "func"]], ["del", "theorem", "get_eq_default_of_le", ["list", "func"]], ["del", "theorem", "get_map'", ["list", "func"]], ["del", "theorem", "get_map", ["list", "func"]], ["del", "theorem", "get_neg", ["list", "func"]], ["del", "theorem", "get_nil", ["list", "func"]], ["del", "theorem", "get_pointwise", ["list", "func"]], ["del", "theorem", "get_set", ["list", "func"]], ["del", "theorem", "get_set_eq_of_ne", ["list", "func"]], ["del", "theorem", "get_sub", ["list", "func"]], ["del", "theorem", "length_add", ["list", "func"]], ["del", "theorem", "length_neg", ["list", "func"]], ["del", "theorem", "length_pointwise", ["list", "func"]], ["del", "theorem", "length_set", ["list", "func"]], ["del", "theorem", "length_sub", ["list", "func"]], ["del", "theorem", "map_add_map", ["list", "func"]], ["del", "theorem", "mem_get_of_le", ["list", "func"]], ["del", "theorem", "mem_get_of_ne_zero", ["list", "func"]], ["del", "theorem", "nil_add", ["list", "func"]], ["del", "theorem", "nil_pointwise", ["list", "func"]], ["del", "theorem", "nil_sub", ["list", "func"]], ["del", "theorem", "pointwise_nil", ["list", "func"]], ["del", "theorem", "sub_nil", ["list", "func"]], ["del", "theorem", "iota_eq_reverse_range'", ["list"]], ["del", "theorem", "left_unique_forall₂", ["list"]], ["del", "theorem", "length_fin_range", ["list"]], ["del", "theorem", "length_iota", ["list"]], ["del", "theorem", "length_of_fn", ["list"]], ["del", "theorem", "length_of_fn_aux", ["list"]], ["del", "theorem", "length_range'", ["list"]], ["del", "theorem", "length_range", ["list"]], ["del", "theorem", "length_revzip", ["list"]], ["del", "theorem", "length_rotate'", ["list"]], ["del", "theorem", "length_rotate", ["list"]], ["del", "theorem", "length_zip", ["list"]], ["del", "theorem", "map_add_range'", ["list"]], ["del", "theorem", "map_sub_range'", ["list"]], ["del", "theorem", "mem_bag_inter", ["list"]], ["del", "theorem", "mem_diff_iff_of_nodup", ["list"]], ["del", "theorem", "mem_erase_dup", ["list"]], ["del", "theorem", "mem_erase_iff_of_nodup", ["list"]], ["del", "theorem", "mem_erase_of_nodup", ["list"]], ["del", "theorem", "mem_fin_range", ["list"]], ["del", "theorem", "mem_iota", ["list"]], ["del", "theorem", "mem_range'", ["list"]], ["del", "theorem", "mem_range", ["list"]], ["del", "theorem", "mem_rotate", ["list"]], ["del", "theorem", "mem_sections", ["list"]], ["del", "theorem", "mem_sections_length", ["list"]], ["del", "theorem", "mem_zip", ["list"]], ["del", "def", "antidiagonal", ["list", "nat"]], ["del", "theorem", "antidiagonal_zero", ["list", "nat"]], ["del", "theorem", "length_antidiagonal", ["list", "nat"]], ["del", "theorem", "mem_antidiagonal", ["list", "nat"]], ["del", "theorem", "nodup_antidiagonal", ["list", "nat"]], ["del", "theorem", "nil_bag_inter", ["list"]], ["del", "theorem", "nodup_append", ["list"]], ["del", "theorem", "nodup_append_comm", ["list"]], ["del", "theorem", "nodup_append_of_nodup", ["list"]], ["del", "theorem", "nodup_attach", ["list"]], ["del", "theorem", "nodup_bind", ["list"]], ["del", "theorem", "nodup_concat", ["list"]], ["del", "theorem", "nodup_cons", ["list"]], ["del", "theorem", "nodup_cons_of_nodup", ["list"]], ["del", "theorem", "nodup_diff", ["list"]], ["del", "theorem", "nodup_erase_dup", ["list"]], ["del", "theorem", "nodup_erase_eq_filter", ["list"]], ["del", "theorem", "nodup_erase_of_nodup", ["list"]], ["del", "theorem", "nodup_filter", ["list"]], ["del", "theorem", "nodup_filter_map", ["list"]], ["del", "theorem", "nodup_fin_range", ["list"]], ["del", "theorem", "nodup_iff_count_le_one", ["list"]], ["del", "theorem", "nodup_iff_nth_le_inj", ["list"]], ["del", "theorem", "nodup_iff_sublist", ["list"]], ["del", "theorem", "nodup_insert", ["list"]], ["del", "theorem", "nodup_inter_of_nodup", ["list"]], ["del", "theorem", "nodup_iota", ["list"]], ["del", "theorem", "nodup_join", ["list"]], ["del", "theorem", "nodup_map", ["list"]], ["del", "theorem", "nodup_map_iff", ["list"]], ["del", "theorem", "nodup_map_on", ["list"]], ["del", "theorem", "nodup_middle", ["list"]], ["del", "theorem", "nodup_nil", ["list"]], ["del", "theorem", "nodup_of_fn", ["list"]], ["del", "theorem", "nodup_of_nodup_append_left", ["list"]], ["del", "theorem", "nodup_of_nodup_append_right", ["list"]], ["del", "theorem", "nodup_of_nodup_cons", ["list"]], ["del", "theorem", "nodup_of_nodup_map", ["list"]], ["del", "theorem", "nodup_of_sublist", ["list"]], ["del", "theorem", "nodup_pmap", ["list"]], ["del", "theorem", "nodup_product", ["list"]], ["del", "theorem", "nodup_range'", ["list"]], ["del", "theorem", "nodup_range", ["list"]], ["del", "theorem", "nodup_repeat", ["list"]], ["del", "theorem", "nodup_reverse", ["list"]], ["del", "theorem", "nodup_sigma", ["list"]], ["del", "theorem", "nodup_singleton", ["list"]], ["del", "theorem", "nodup_sublists'", ["list"]], ["del", "theorem", "nodup_sublists", ["list"]], ["del", "theorem", "nodup_sublists_len", ["list"]], ["del", "theorem", "nodup_union", ["list"]], ["del", "theorem", "nodup_update_nth", ["list"]], ["del", "theorem", "not_mem_of_nodup_cons", ["list"]], ["del", "theorem", "not_mem_range_self", ["list"]], ["del", "theorem", "not_nodup_cons_of_mem", ["list"]], ["del", "theorem", "not_nodup_pair", ["list"]], ["del", "theorem", "nth_le_index_of", ["list"]], ["del", "theorem", "nth_le_of_fn", ["list"]], ["del", "theorem", "nth_le_range", ["list"]], ["del", "theorem", "nth_of_fn", ["list"]], ["del", "theorem", "nth_of_fn_aux", ["list"]], ["del", "theorem", "nth_range'", ["list"]], ["del", "theorem", "nth_range", ["list"]], ["del", "theorem", "of_fn_eq_pmap", ["list"]], ["del", "theorem", "of_fn_nth_le", ["list"]], ["del", "theorem", "of_fn_succ", ["list"]], ["del", "theorem", "of_fn_zero", ["list"]], ["del", "theorem", "and", ["list", "pairwise"]], ["del", "theorem", "and_mem", ["list", "pairwise"]], ["del", "theorem", "chain'", ["list", "pairwise"]], ["del", "theorem", "iff", ["list", "pairwise"]], ["del", "theorem", "iff_of_mem", ["list", "pairwise"]], ["del", "theorem", "imp", ["list", "pairwise"]], ["del", "theorem", "imp_mem", ["list", "pairwise"]], ["del", "theorem", "imp_of_mem", ["list", "pairwise"]], ["del", "theorem", "imp₂", ["list", "pairwise"]], ["del", "theorem", "pairwise_append", ["list"]], ["del", "theorem", "pairwise_append_comm", ["list"]], ["del", "theorem", "pairwise_filter", ["list"]], ["del", "theorem", "pairwise_filter_map", ["list"]], ["del", "theorem", "pairwise_filter_map_of_pairwise", ["list"]], ["del", "theorem", "pairwise_filter_of_pairwise", ["list"]], ["del", "theorem", "pairwise_gt_iota", ["list"]], ["del", "theorem", "pairwise_iff_nth_le", ["list"]], ["del", "theorem", "pairwise_join", ["list"]], ["del", "theorem", "pairwise_lt_range'", ["list"]], ["del", "theorem", "pairwise_lt_range", ["list"]], ["del", "theorem", "pairwise_map", ["list"]], ["del", "theorem", "pairwise_map_of_pairwise", ["list"]], ["del", "theorem", "pairwise_middle", ["list"]], ["del", "theorem", "pairwise_of_forall", ["list"]], ["del", "theorem", "pairwise_of_pairwise_cons", ["list"]], ["del", "theorem", "pairwise_of_pairwise_map", ["list"]], ["del", "theorem", "pairwise_of_sublist", ["list"]], ["del", "theorem", "pairwise_pair", ["list"]], ["del", "theorem", "pairwise_pw_filter", ["list"]], ["del", "theorem", "pairwise_reverse", ["list"]], ["del", "theorem", "pairwise_singleton", ["list"]], ["del", "theorem", "pairwise_sublists'", ["list"]], ["del", "theorem", "pairwise_sublists", ["list"]], ["del", "theorem", "prod_range_succ", ["list"]], ["del", "theorem", "prod_rotate_eq_one_of_prod_eq_one", ["list"]], ["del", "theorem", "pw_filter_cons_of_neg", ["list"]], ["del", "theorem", "pw_filter_cons_of_pos", ["list"]], ["del", "theorem", "pw_filter_eq_self", ["list"]], ["del", "theorem", "pw_filter_idempotent", ["list"]], ["del", "theorem", "pw_filter_map", ["list"]], ["del", "theorem", "pw_filter_nil", ["list"]], ["del", "theorem", "pw_filter_sublist", ["list"]], ["del", "theorem", "pw_filter_subset", ["list"]], ["del", "theorem", "range'_append", ["list"]], ["del", "theorem", "range'_concat", ["list"]], ["del", "theorem", "range'_eq_map_range", ["list"]], ["del", "theorem", "range'_sublist_right", ["list"]], ["del", "theorem", "range'_subset_right", ["list"]], ["del", "theorem", "range_concat", ["list"]], ["del", "theorem", "range_core_range'", ["list"]], ["del", "theorem", "range_eq_range'", ["list"]], ["del", "theorem", "range_sublist", ["list"]], ["del", "theorem", "range_subset", ["list"]], ["del", "theorem", "range_succ_eq_map", ["list"]], ["del", "theorem", "rel_append", ["list"]], ["del", "theorem", "rel_bind", ["list"]], ["del", "theorem", "rel_filter", ["list"]], ["del", "theorem", "rel_filter_map", ["list"]], ["del", "theorem", "rel_foldl", ["list"]], ["del", "theorem", "rel_foldr", ["list"]], ["del", "theorem", "rel_join", ["list"]], ["del", "theorem", "rel_map", ["list"]], ["del", "theorem", "rel_mem", ["list"]], ["del", "theorem", "rel_nodup", ["list"]], ["del", "theorem", "rel_of_chain_cons", ["list"]], ["del", "theorem", "rel_of_pairwise_cons", ["list"]], ["del", "theorem", "rel_prod", ["list"]], ["del", "theorem", "rel_sections", ["list"]], ["del", "theorem", "reverse_range'", ["list"]], ["del", "theorem", "reverse_revzip", ["list"]], ["del", "theorem", "revzip_map_fst", ["list"]], ["del", "theorem", "revzip_map_snd", ["list"]], ["del", "theorem", "revzip_swap", ["list"]], ["del", "theorem", "right_unique_forall₂", ["list"]], ["del", "theorem", "rotate'_cons_succ", ["list"]], ["del", "theorem", "rotate'_eq_take_append_drop", ["list"]], ["del", "theorem", "rotate'_length", ["list"]], ["del", "theorem", "rotate'_length_mul", ["list"]], ["del", "theorem", "rotate'_mod", ["list"]], ["del", "theorem", "rotate'_nil", ["list"]], ["del", "theorem", "rotate'_rotate'", ["list"]], ["del", "theorem", "rotate'_zero", ["list"]], ["del", "theorem", "rotate_cons_succ", ["list"]], ["del", "theorem", "rotate_eq_rotate'", ["list"]], ["del", "theorem", "rotate_eq_take_append_drop", ["list"]], ["del", "theorem", "rotate_length", ["list"]], ["del", "theorem", "rotate_length_mul", ["list"]], ["del", "theorem", "rotate_mod", ["list"]], ["del", "theorem", "rotate_nil", ["list"]], ["del", "theorem", "rotate_rotate", ["list"]], ["del", "theorem", "rotate_zero", ["list"]], ["del", "theorem", "subset_erase_dup", ["list"]], ["del", "theorem", "out", ["list", "tfae"]], ["del", "theorem", "tfae_cons_cons", ["list"]], ["del", "theorem", "tfae_cons_of_mem", ["list"]], ["del", "theorem", "tfae_nil", ["list"]], ["del", "theorem", "tfae_of_cycle", ["list"]], ["del", "theorem", "tfae_of_forall", ["list"]], ["del", "theorem", "tfae_singleton", ["list"]], ["del", "theorem", "unzip_cons", ["list"]], ["del", "theorem", "unzip_eq_map", ["list"]], ["del", "theorem", "unzip_left", ["list"]], ["del", "theorem", "unzip_nil", ["list"]], ["del", "theorem", "unzip_revzip", ["list"]], ["del", "theorem", "unzip_right", ["list"]], ["del", "theorem", "unzip_swap", ["list"]], ["del", "theorem", "unzip_zip", ["list"]], ["del", "theorem", "unzip_zip_left", ["list"]], ["del", "theorem", "unzip_zip_right", ["list"]], ["del", "theorem", "zip_append", ["list"]], ["del", "theorem", "zip_cons_cons", ["list"]], ["del", "theorem", "zip_map'", ["list"]], ["del", "theorem", "zip_map", ["list"]], ["del", "theorem", "zip_map_left", ["list"]], ["del", "theorem", "zip_map_right", ["list"]], ["del", "theorem", "zip_nil_left", ["list"]], ["del", "theorem", "zip_nil_right", ["list"]], ["del", "theorem", "zip_swap", ["list"]], ["del", "theorem", "zip_unzip", ["list"]], ["del", "theorem", "to_list_nodup", ["option"]]]}, {"oldPath": null, "newPath": "src/data/list/chain.lean", "changes": [["add", "theorem", "cons", ["list", "chain'"]], ["add", "theorem", "iff", ["list", "chain'"]], ["add", "theorem", "iff_mem", ["list", "chain'"]], ["add", "theorem", "imp", ["list", "chain'"]], ["add", "theorem", "tail", ["list", "chain'"]], ["add", "theorem", "chain'_cons", ["list"]], ["add", "theorem", "chain'_iff_pairwise", ["list"]], ["add", "theorem", "chain'_map", ["list"]], ["add", "theorem", "chain'_map_of_chain'", ["list"]], ["add", "theorem", "chain'_nil", ["list"]], ["add", "theorem", "chain'_of_chain'_map", ["list"]], ["add", "theorem", "chain'_pair", ["list"]], ["add", "theorem", "chain'_reverse", ["list"]], ["add", "theorem", "chain'_singleton", ["list"]], ["add", "theorem", "chain'_split", ["list"]], ["add", "theorem", "iff", ["list", "chain"]], ["add", "theorem", "iff_mem", ["list", "chain"]], ["add", "theorem", "imp'", ["list", "chain"]], ["add", "theorem", "imp", ["list", "chain"]], ["add", "theorem", "chain_iff_pairwise", ["list"]], ["add", "theorem", "chain_map", ["list"]], ["add", "theorem", "chain_map_of_chain", ["list"]], ["add", "theorem", "chain_of_chain_cons", ["list"]], ["add", "theorem", "chain_of_chain_map", ["list"]], ["add", "theorem", "chain_of_pairwise", ["list"]], ["add", "theorem", "chain_singleton", ["list"]], ["add", "theorem", "chain_split", ["list"]], ["add", "theorem", "chain'", ["list", "pairwise"]], ["add", "theorem", "rel_of_chain_cons", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["del", "def", "add", ["list", "func"]], ["del", "def", "equiv", ["list", "func"]], ["del", "def", "get", ["list", "func"]], ["del", "def", "neg", ["list", "func"]], ["del", "def", "pointwise", ["list", "func"]], ["del", "def", "set", ["list", "func"]], ["del", "def", "sub", ["list", "func"]], ["del", "def", "tfae", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/erase_dup.lean", "changes": [["add", "theorem", "erase_dup_append", ["list"]], ["add", "theorem", "erase_dup_cons_of_mem'", ["list"]], ["add", "theorem", "erase_dup_cons_of_mem", ["list"]], ["add", "theorem", "erase_dup_cons_of_not_mem'", ["list"]], ["add", "theorem", "erase_dup_cons_of_not_mem", ["list"]], ["add", "theorem", "erase_dup_eq_self", ["list"]], ["add", "theorem", "erase_dup_idempotent", ["list"]], ["add", "theorem", "erase_dup_nil", ["list"]], ["add", "theorem", "erase_dup_sublist", ["list"]], ["add", "theorem", "erase_dup_subset", ["list"]], ["add", "theorem", "mem_erase_dup", ["list"]], ["add", "theorem", "nodup_erase_dup", ["list"]], ["add", "theorem", "subset_erase_dup", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/forall2.lean", "changes": [["add", "theorem", "bi_unique_forall₂", ["list"]], ["add", "theorem", "filter_map_cons", ["list"]], ["add", "theorem", "flip", ["list", "forall₂"]], ["add", "theorem", "imp", ["list", "forall₂"]], ["add", "theorem", "mp", ["list", "forall₂"]], ["add", "theorem", "forall₂_and_left", ["list"]], ["add", "theorem", "forall₂_cons", ["list"]], ["add", "theorem", "forall₂_cons_left_iff", ["list"]], ["add", "theorem", "forall₂_cons_right_iff", ["list"]], ["add", "theorem", "forall₂_drop", ["list"]], ["add", "theorem", "forall₂_drop_append", ["list"]], ["add", "theorem", "forall₂_eq_eq_eq", ["list"]], ["add", "theorem", "forall₂_iff_zip", ["list"]], ["add", "theorem", "forall₂_length_eq", ["list"]], ["add", "theorem", "forall₂_map_left_iff", ["list"]], ["add", "theorem", "forall₂_map_right_iff", ["list"]], ["add", "theorem", "forall₂_nil_left_iff", ["list"]], ["add", "theorem", "forall₂_nil_right_iff", ["list"]], ["add", "theorem", "forall₂_refl", ["list"]], ["add", "theorem", "forall₂_same", ["list"]], ["add", "theorem", "forall₂_take", ["list"]], ["add", "theorem", "forall₂_take_append", ["list"]], ["add", "theorem", "forall₂_zip", ["list"]], ["add", "theorem", "left_unique_forall₂", ["list"]], ["add", "theorem", "rel_append", ["list"]], ["add", "theorem", "rel_bind", ["list"]], ["add", "theorem", "rel_filter", ["list"]], ["add", "theorem", "rel_filter_map", ["list"]], ["add", "theorem", "rel_foldl", ["list"]], ["add", "theorem", "rel_foldr", ["list"]], ["add", "theorem", "rel_join", ["list"]], ["add", "theorem", "rel_map", ["list"]], ["add", "theorem", "rel_mem", ["list"]], ["add", "theorem", "rel_prod", ["list"]], ["add", "theorem", "right_unique_forall₂", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/func.lean", "changes": [["add", "def", "add", ["list", "func"]], ["add", "theorem", "add_nil", ["list", "func"]], ["add", "theorem", "eq_get_of_mem", ["list", "func"]], ["add", "theorem", "eq_of_equiv", ["list", "func"]], ["add", "def", "equiv", ["list", "func"]], ["add", "theorem", "equiv_of_eq", ["list", "func"]], ["add", "theorem", "equiv_refl", ["list", "func"]], ["add", "theorem", "equiv_symm", ["list", "func"]], ["add", "theorem", "equiv_trans", ["list", "func"]], ["add", "theorem", "forall_val_of_forall_mem", ["list", "func"]], ["add", "def", "get", ["list", "func"]], ["add", "theorem", "get_add", ["list", "func"]], ["add", "theorem", "get_eq_default_of_le", ["list", "func"]], ["add", "theorem", "get_map'", ["list", "func"]], ["add", "theorem", "get_map", ["list", "func"]], ["add", "theorem", "get_neg", ["list", "func"]], ["add", "theorem", "get_nil", ["list", "func"]], ["add", "theorem", "get_pointwise", ["list", "func"]], ["add", "theorem", "get_set", ["list", "func"]], ["add", "theorem", "get_set_eq_of_ne", ["list", "func"]], ["add", "theorem", "get_sub", ["list", "func"]], ["add", "theorem", "length_add", ["list", "func"]], ["add", "theorem", "length_neg", ["list", "func"]], ["add", "theorem", "length_pointwise", ["list", "func"]], ["add", "theorem", "length_set", ["list", "func"]], ["add", "theorem", "length_sub", ["list", "func"]], ["add", "theorem", "map_add_map", ["list", "func"]], ["add", "theorem", "mem_get_of_le", ["list", "func"]], ["add", "theorem", "mem_get_of_ne_zero", ["list", "func"]], ["add", "def", "neg", ["list", "func"]], ["add", "theorem", "nil_add", ["list", "func"]], ["add", "theorem", "nil_pointwise", ["list", "func"]], ["add", "theorem", "nil_sub", ["list", "func"]], ["add", "def", "pointwise", ["list", "func"]], ["add", "theorem", "pointwise_nil", ["list", "func"]], ["add", "def", "set", ["list", "func"]], ["add", "def", "sub", ["list", "func"]], ["add", "theorem", "sub_nil", ["list", "func"]]]}, {"oldPath": null, "newPath": "src/data/list/intervals.lean", "changes": [["add", "theorem", "append_consecutive", ["list", "Ico"]], ["add", "theorem", "bag_inter_consecutive", ["list", "Ico"]], ["add", "theorem", "chain'_succ", ["list", "Ico"]], ["add", "theorem", "eq_cons", ["list", "Ico"]], ["add", "theorem", "eq_empty_iff", ["list", "Ico"]], ["add", "theorem", "eq_nil_of_le", ["list", "Ico"]], ["add", "theorem", "filter_le", ["list", "Ico"]], ["add", "theorem", "filter_le_of_le", ["list", "Ico"]], ["add", "theorem", "filter_le_of_le_bot", ["list", "Ico"]], ["add", "theorem", "filter_le_of_top_le", ["list", "Ico"]], ["add", "theorem", "filter_lt", ["list", "Ico"]], ["add", "theorem", "filter_lt_of_ge", ["list", "Ico"]], ["add", "theorem", "filter_lt_of_le_bot", ["list", "Ico"]], ["add", "theorem", "filter_lt_of_top_le", ["list", "Ico"]], ["add", "theorem", "inter_consecutive", ["list", "Ico"]], ["add", "theorem", "length", ["list", "Ico"]], ["add", "theorem", "map_add", ["list", "Ico"]], ["add", "theorem", "map_sub", ["list", "Ico"]], ["add", "theorem", "mem", ["list", "Ico"]], ["add", "theorem", "nodup", ["list", "Ico"]], ["add", "theorem", "not_mem_top", ["list", "Ico"]], ["add", "theorem", "pairwise_lt", ["list", "Ico"]], ["add", "theorem", "pred_singleton", ["list", "Ico"]], ["add", "theorem", "self_empty", ["list", "Ico"]], ["add", "theorem", "succ_singleton", ["list", "Ico"]], ["add", "theorem", "succ_top", ["list", "Ico"]], ["add", "theorem", "trichotomy", ["list", "Ico"]], ["add", "theorem", "zero_bot", ["list", "Ico"]], ["add", "def", "Ico", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/nodup.lean", "changes": [["add", "theorem", "count_eq_one_of_mem", ["list"]], ["add", "theorem", "diff_eq_filter_of_nodup", ["list"]], ["add", "theorem", "disjoint_of_nodup_append", ["list"]], ["add", "theorem", "forall_mem_ne", ["list"]], ["add", "theorem", "mem_diff_iff_of_nodup", ["list"]], ["add", "theorem", "mem_erase_iff_of_nodup", ["list"]], ["add", "theorem", "mem_erase_of_nodup", ["list"]], ["add", "theorem", "nodup_append", ["list"]], ["add", "theorem", "nodup_append_comm", ["list"]], ["add", "theorem", "nodup_append_of_nodup", ["list"]], ["add", "theorem", "nodup_attach", ["list"]], ["add", "theorem", "nodup_bind", ["list"]], ["add", "theorem", "nodup_concat", ["list"]], ["add", "theorem", "nodup_cons", ["list"]], ["add", "theorem", "nodup_cons_of_nodup", ["list"]], ["add", "theorem", "nodup_diff", ["list"]], ["add", "theorem", "nodup_erase_eq_filter", ["list"]], ["add", "theorem", "nodup_erase_of_nodup", ["list"]], ["add", "theorem", "nodup_filter", ["list"]], ["add", "theorem", "nodup_filter_map", ["list"]], ["add", "theorem", "nodup_iff_count_le_one", ["list"]], ["add", "theorem", "nodup_iff_nth_le_inj", ["list"]], ["add", "theorem", "nodup_iff_sublist", ["list"]], ["add", "theorem", "nodup_insert", ["list"]], ["add", "theorem", "nodup_inter_of_nodup", ["list"]], ["add", "theorem", "nodup_join", ["list"]], ["add", "theorem", "nodup_map", ["list"]], ["add", "theorem", "nodup_map_iff", ["list"]], ["add", "theorem", "nodup_map_on", ["list"]], ["add", "theorem", "nodup_middle", ["list"]], ["add", "theorem", "nodup_nil", ["list"]], ["add", "theorem", "nodup_of_nodup_append_left", ["list"]], ["add", "theorem", "nodup_of_nodup_append_right", ["list"]], ["add", "theorem", "nodup_of_nodup_cons", ["list"]], ["add", "theorem", "nodup_of_nodup_map", ["list"]], ["add", "theorem", "nodup_of_sublist", ["list"]], ["add", "theorem", "nodup_pmap", ["list"]], ["add", "theorem", "nodup_product", ["list"]], ["add", "theorem", "nodup_repeat", ["list"]], ["add", "theorem", "nodup_reverse", ["list"]], ["add", "theorem", "nodup_sigma", ["list"]], ["add", "theorem", "nodup_singleton", ["list"]], ["add", "theorem", "nodup_sublists'", ["list"]], ["add", "theorem", "nodup_sublists", ["list"]], ["add", "theorem", "nodup_sublists_len", ["list"]], ["add", "theorem", "nodup_union", ["list"]], ["add", "theorem", "nodup_update_nth", ["list"]], ["add", "theorem", "not_mem_of_nodup_cons", ["list"]], ["add", "theorem", "not_nodup_cons_of_mem", ["list"]], ["add", "theorem", "not_nodup_pair", ["list"]], ["add", "theorem", "nth_le_index_of", ["list"]], ["add", "theorem", "rel_nodup", ["list"]], ["add", "theorem", "to_list_nodup", ["option"]]]}, {"oldPath": null, "newPath": "src/data/list/of_fn.lean", "changes": [["add", "theorem", "array_eq_of_fn", ["list"]], ["add", "theorem", "length_of_fn", ["list"]], ["add", "theorem", "length_of_fn_aux", ["list"]], ["add", "theorem", "nth_le_of_fn", ["list"]], ["add", "theorem", "nth_of_fn", ["list"]], ["add", "theorem", "nth_of_fn_aux", ["list"]], ["add", "theorem", "of_fn_nth_le", ["list"]], ["add", "theorem", "of_fn_succ", ["list"]], ["add", "theorem", "of_fn_zero", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/pairwise.lean", "changes": [["add", "theorem", "forall_mem_pw_filter", ["list"]], ["add", "theorem", "forall_of_forall_of_pairwise", ["list"]], ["add", "theorem", "forall_of_pairwise", ["list"]], ["add", "theorem", "and", ["list", "pairwise"]], ["add", "theorem", "and_mem", ["list", "pairwise"]], ["add", "theorem", "iff", ["list", "pairwise"]], ["add", "theorem", "iff_of_mem", ["list", "pairwise"]], ["add", "theorem", "imp", ["list", "pairwise"]], ["add", "theorem", "imp_mem", ["list", "pairwise"]], ["add", "theorem", "imp_of_mem", ["list", "pairwise"]], ["add", "theorem", "imp₂", ["list", "pairwise"]], ["add", "theorem", "pairwise_append", ["list"]], ["add", "theorem", "pairwise_append_comm", ["list"]], ["add", "theorem", "pairwise_filter", ["list"]], ["add", "theorem", "pairwise_filter_map", ["list"]], ["add", "theorem", "pairwise_filter_map_of_pairwise", ["list"]], ["add", "theorem", "pairwise_filter_of_pairwise", ["list"]], ["add", "theorem", "pairwise_iff_nth_le", ["list"]], ["add", "theorem", "pairwise_join", ["list"]], ["add", "theorem", "pairwise_map", ["list"]], ["add", "theorem", "pairwise_map_of_pairwise", ["list"]], ["add", "theorem", "pairwise_middle", ["list"]], ["add", "theorem", "pairwise_of_forall", ["list"]], ["add", "theorem", "pairwise_of_pairwise_cons", ["list"]], ["add", "theorem", "pairwise_of_pairwise_map", ["list"]], ["add", "theorem", "pairwise_of_sublist", ["list"]], ["add", "theorem", "pairwise_pair", ["list"]], ["add", "theorem", "pairwise_pw_filter", ["list"]], ["add", "theorem", "pairwise_reverse", ["list"]], ["add", "theorem", "pairwise_singleton", ["list"]], ["add", "theorem", "pairwise_sublists'", ["list"]], ["add", "theorem", "pairwise_sublists", ["list"]], ["add", "theorem", "pw_filter_cons_of_neg", ["list"]], ["add", "theorem", "pw_filter_cons_of_pos", ["list"]], ["add", "theorem", "pw_filter_eq_self", ["list"]], ["add", "theorem", "pw_filter_idempotent", ["list"]], ["add", "theorem", "pw_filter_map", ["list"]], ["add", "theorem", "pw_filter_nil", ["list"]], ["add", "theorem", "pw_filter_sublist", ["list"]], ["add", "theorem", "pw_filter_subset", ["list"]], ["add", "theorem", "rel_of_pairwise_cons", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/range.lean", "changes": [["add", "theorem", "chain_lt_range'", ["list"]], ["add", "theorem", "chain_succ_range'", ["list"]], ["add", "theorem", "enum_from_map_fst", ["list"]], ["add", "theorem", "enum_map_fst", ["list"]], ["add", "def", "fin_range", ["list"]], ["add", "theorem", "iota_eq_reverse_range'", ["list"]], ["add", "theorem", "length_fin_range", ["list"]], ["add", "theorem", "length_iota", ["list"]], ["add", "theorem", "length_range'", ["list"]], ["add", "theorem", "length_range", ["list"]], ["add", "theorem", "map_add_range'", ["list"]], ["add", "theorem", "map_sub_range'", ["list"]], ["add", "theorem", "mem_fin_range", ["list"]], ["add", "theorem", "mem_iota", ["list"]], ["add", "theorem", "mem_range'", ["list"]], ["add", "theorem", "mem_range", ["list"]], ["add", "theorem", "nodup_fin_range", ["list"]], ["add", "theorem", "nodup_iota", ["list"]], ["add", "theorem", "nodup_of_fn", ["list"]], ["add", "theorem", "nodup_range'", ["list"]], ["add", "theorem", "nodup_range", ["list"]], ["add", "theorem", "not_mem_range_self", ["list"]], ["add", "theorem", "nth_le_range", ["list"]], ["add", "theorem", "nth_range'", ["list"]], ["add", "theorem", "nth_range", ["list"]], ["add", "theorem", "of_fn_eq_pmap", ["list"]], ["add", "theorem", "pairwise_gt_iota", ["list"]], ["add", "theorem", "pairwise_lt_range'", ["list"]], ["add", "theorem", "pairwise_lt_range", ["list"]], ["add", "theorem", "prod_range_succ", ["list"]], ["add", "theorem", "range'_append", ["list"]], ["add", "theorem", "range'_concat", ["list"]], ["add", "theorem", "range'_eq_map_range", ["list"]], ["add", "theorem", "range'_sublist_right", ["list"]], ["add", "theorem", "range'_subset_right", ["list"]], ["add", "theorem", "range_concat", ["list"]], ["add", "theorem", "range_core_range'", ["list"]], ["add", "theorem", "range_eq_range'", ["list"]], ["add", "theorem", "range_sublist", ["list"]], ["add", "theorem", "range_subset", ["list"]], ["add", "theorem", "range_succ_eq_map", ["list"]], ["add", "theorem", "reverse_range'", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/rotate.lean", "changes": [["add", "theorem", "length_rotate'", ["list"]], ["add", "theorem", "length_rotate", ["list"]], ["add", "theorem", "mem_rotate", ["list"]], ["add", "theorem", "prod_rotate_eq_one_of_prod_eq_one", ["list"]], ["add", "theorem", "rotate'_cons_succ", ["list"]], ["add", "theorem", "rotate'_eq_take_append_drop", ["list"]], ["add", "theorem", "rotate'_length", ["list"]], ["add", "theorem", "rotate'_length_mul", ["list"]], ["add", "theorem", "rotate'_mod", ["list"]], ["add", "theorem", "rotate'_nil", ["list"]], ["add", "theorem", "rotate'_rotate'", ["list"]], ["add", "theorem", "rotate'_zero", ["list"]], ["add", "theorem", "rotate_cons_succ", ["list"]], ["add", "theorem", "rotate_eq_rotate'", ["list"]], ["add", "theorem", "rotate_eq_take_append_drop", ["list"]], ["add", "theorem", "rotate_length", ["list"]], ["add", "theorem", "rotate_length_mul", ["list"]], ["add", "theorem", "rotate_mod", ["list"]], ["add", "theorem", "rotate_nil", ["list"]], ["add", "theorem", "rotate_rotate", ["list"]], ["add", "theorem", "rotate_zero", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/sections.lean", "changes": [["add", "theorem", "mem_sections", ["list"]], ["add", "theorem", "mem_sections_length", ["list"]], ["add", "theorem", "rel_sections", ["list"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/list/tfae.lean", "changes": [["add", "theorem", "out", ["list", "tfae"]], ["add", "def", "tfae", ["list"]], ["add", "theorem", "tfae_cons_cons", ["list"]], ["add", "theorem", "tfae_cons_of_mem", ["list"]], ["add", "theorem", "tfae_nil", ["list"]], ["add", "theorem", "tfae_of_cycle", ["list"]], ["add", "theorem", "tfae_of_forall", ["list"]], ["add", "theorem", "tfae_singleton", ["list"]]]}, {"oldPath": null, "newPath": "src/data/list/zip.lean", "changes": [["add", "theorem", "length_revzip", ["list"]], ["add", "theorem", "length_zip", ["list"]], ["add", "theorem", "mem_zip", ["list"]], ["add", "theorem", "reverse_revzip", ["list"]], ["add", "theorem", "revzip_map_fst", ["list"]], ["add", "theorem", "revzip_map_snd", ["list"]], ["add", "theorem", "revzip_swap", ["list"]], ["add", "theorem", "unzip_cons", ["list"]], ["add", "theorem", "unzip_eq_map", ["list"]], ["add", "theorem", "unzip_left", ["list"]], ["add", "theorem", "unzip_nil", ["list"]], ["add", "theorem", "unzip_revzip", ["list"]], ["add", "theorem", "unzip_right", ["list"]], ["add", "theorem", "unzip_swap", ["list"]], ["add", "theorem", "unzip_zip", ["list"]], ["add", "theorem", "unzip_zip_left", ["list"]], ["add", "theorem", "unzip_zip_right", ["list"]], ["add", "theorem", "zip_append", ["list"]], ["add", "theorem", "zip_cons_cons", ["list"]], ["add", "theorem", "zip_map'", ["list"]], ["add", "theorem", "zip_map", ["list"]], ["add", "theorem", "zip_map_left", ["list"]], ["add", "theorem", "zip_map_right", ["list"]], ["add", "theorem", "zip_nil_left", ["list"]], ["add", "theorem", "zip_nil_right", ["list"]], ["add", "theorem", "zip_swap", ["list"]], ["add", "theorem", "zip_unzip", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}]}, {"timestamp": 1586390442, "sha": "e4e483e5", "message": "Bugfix for norm num when testing divisibility of integers (#2355)\nthey were assumed nats somehow", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1586380342, "sha": "c3d9cf90", "message": "feat(analysis/analytic/basic): change origin of power series (#2327)\n* feat(analysis/analytic/basic): move basepoint of power series\n* docstring\n* Update src/analysis/analytic/basic.lean\nCo-Authored-By: Scott Morrison \n* Update src/analysis/analytic/basic.lean\nCo-Authored-By: Scott Morrison \n* Update src/analysis/analytic/basic.lean\nCo-Authored-By: Scott Morrison ", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "def", "change_origin", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_eval", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_has_sum", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_radius", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_summable_aux1", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_summable_aux2", ["formal_multilinear_series"]], ["add", "theorem", "change_origin_summable_aux3", ["formal_multilinear_series"]], ["add", "theorem", "analytic_at_of_mem", ["has_fpower_series_on_ball"]], ["add", "theorem", "change_origin", ["has_fpower_series_on_ball"]], ["add", "theorem", "is_open_analytic_at", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1586369994, "sha": "dae7154d", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586367971, "sha": "55d430ca", "message": "feat(tactic/linter): add decidable_classical linter (#2352)\n* feat(tactic/linter): add decidable_classical linter\n* docstring\n* cleanup\n* fix build, cleanup\n* fix test\n* Update src/tactic/lint/type_classes.lean\nCo-Authored-By: Scott Morrison \n* Update src/tactic/lint/type_classes.lean\nCo-Authored-By: Scott Morrison \n* Update src/tactic/lint/default.lean\nCo-Authored-By: Scott Morrison \n* Update src/tactic/lint/type_classes.lean\nCo-Authored-By: Scott Morrison \n* Update src/data/dfinsupp.lean\nCo-Authored-By: Yury G. Kudryashov ", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["mod", "theorem", "ceil_nonneg", []], ["mod", "theorem", "lt_nat_ceil", []], ["mod", "theorem", "nat_ceil_lt_add_one", []]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "sum_mem", ["submodule"]]]}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["mod", "theorem", "eq_or_lt_of_le", ["decidable"]], ["mod", "theorem", "le_iff_le_iff_lt_iff_lt", ["decidable"]], ["mod", "theorem", "le_iff_lt_or_eq", ["decidable"]], ["mod", "theorem", "le_imp_le_iff_lt_imp_lt", ["decidable"]], ["mod", "theorem", "le_imp_le_of_lt_imp_lt", ["decidable"]], ["mod", "theorem", "le_of_not_lt", ["decidable"]], ["mod", "theorem", "le_or_lt", ["decidable"]], ["mod", "theorem", "lt_or_eq_of_le", ["decidable"]], ["mod", "theorem", "lt_or_gt_of_ne", ["decidable"]], ["mod", "theorem", "lt_or_le", ["decidable"]], ["mod", "theorem", "lt_trichotomy", ["decidable"]], ["mod", "theorem", "ne_iff_lt_or_gt", ["decidable"]], ["mod", "theorem", "not_lt", ["decidable"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["mod", "theorem", "prod_apply", ["finset"]]]}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "map_range_def", ["dfinsupp"]], ["mod", "theorem", "subtype_domain_sum", ["dfinsupp"]], ["mod", "theorem", "support_zip_with", ["dfinsupp"]], ["mod", "theorem", "zip_with_def", ["dfinsupp"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "card_eq_of_bijective", ["finset"]], ["mod", "theorem", "card_le_card_of_inj_on", ["finset"]], ["mod", "theorem", "card_le_of_inj_on", ["finset"]], ["mod", "theorem", "disjoint_bind_left", ["finset"]], ["mod", "theorem", "disjoint_bind_right", ["finset"]], ["mod", "theorem", "fold_op_rel_iff_and", ["finset"]], ["mod", "theorem", "fold_op_rel_iff_or", ["finset"]], ["mod", "theorem", "singleton_bind", ["finset"]], ["mod", "theorem", "subset_image_iff", ["finset"]], ["mod", "theorem", "subset_union_elim", ["finset"]]]}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": [["mod", "theorem", "modify", ["hash_map", "valid"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "div_eq_div_of_mul_eq_mul", ["int"]], ["mod", "theorem", "eq_mul_div_of_mul_eq_mul_of_dvd_left", ["int"]], ["mod", "theorem", "exists_greatest_of_bdd", ["int"]], ["mod", "theorem", "exists_least_of_bdd", ["int"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["mod", "theorem", "equiv_to_pequiv_to_matrix", ["pequiv"]], ["mod", "theorem", "matrix_mul_apply", ["pequiv"]], ["mod", "theorem", "mul_matrix_apply", ["pequiv"]], ["mod", "theorem", "single_mul_single", ["pequiv"]], ["mod", "theorem", "single_mul_single_of_ne", ["pequiv"]], ["mod", "theorem", "single_mul_single_right", ["pequiv"]], ["mod", "def", "to_matrix", ["pequiv"]], ["mod", "theorem", "to_matrix_bot", ["pequiv"]], ["mod", "theorem", "to_matrix_injective", ["pequiv"]], ["mod", "theorem", "to_matrix_refl", ["pequiv"]], ["mod", "theorem", "to_matrix_swap", ["pequiv"]], ["mod", "theorem", "to_matrix_symm", ["pequiv"]], ["mod", "theorem", "to_matrix_trans", ["pequiv"]], ["mod", "theorem", "to_pequiv_mul_matrix", ["pequiv"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "length_ndinsert_of_mem", ["multiset"]], ["mod", "theorem", "length_ndinsert_of_not_mem", ["multiset"]]]}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["mod", "theorem", "single_trans_of_eq_none", ["pequiv"]], ["mod", "theorem", "trans_single_of_eq_none", ["pequiv"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "sum_lt_top", ["ennreal"]], ["mod", "theorem", "sum_lt_top_iff", ["ennreal"]], ["mod", "theorem", "to_nnreal_sum", ["ennreal"]], ["mod", "theorem", "to_real_sum", ["ennreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "not_not_mem", ["set"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["mod", "theorem", "card_nth_roots_subgroup_units", []], ["mod", "theorem", "card_units", ["finite_field"]], ["mod", "theorem", "pow_card_sub_one_eq_one", ["finite_field"]], ["mod", "theorem", "prod_univ_units_id_eq_neg_one", ["finite_field"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": [["mod", "theorem", "order_of_pos", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "supported_eq_span_single", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["mod", "theorem", "sum_apply", ["multilinear_map"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "not_exists_not", []], ["mod", "theorem", "not_forall_not", []], ["mod", "theorem", "not_imp", []], ["mod", "theorem", "not_not", []]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": [["mod", "theorem", "adjoin_eq_range", ["algebra"]], ["mod", "theorem", "adjoin_singleton_eq_range", ["algebra"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["mod", "theorem", "prod", ["multiplicity", "finset"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "sup_add_inf_eq_add", ["associates", "factor_set"]], ["mod", "def", "{u}", ["associates"]]]}, {"oldPath": "src/tactic/lint/default.lean", "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": "src/tactic/lint/type_classes.lean", "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": [["mod", "theorem", "imp_of_not_imp_not", []]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["mod", "theorem", "sum_apply", ["continuous_multilinear_map"]]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "exists_open_singleton_of_fintype", []]]}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1586358631, "sha": "65a5dc0f", "message": "feat(data/support): define support of a function and prove some properties (#2340)\n* feat(data/support): define support of a function and prove some properties\n* Add `support_mul'` for `group_with_zero`", "changes": [{"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "support_indicator", ["set"]]]}, {"oldPath": null, "newPath": "src/data/support.lean", "changes": [["add", "theorem", "nmem_support", ["function"]], ["add", "def", "support", ["function"]], ["add", "theorem", "support_add", ["function"]], ["add", "theorem", "support_binop_subset", ["function"]], ["add", "theorem", "support_comp'", ["function"]], ["add", "theorem", "support_comp", ["function"]], ["add", "theorem", "support_comp_eq'", ["function"]], ["add", "theorem", "support_comp_eq", ["function"]], ["add", "theorem", "support_div", ["function"]], ["add", "theorem", "support_inf", ["function"]], ["add", "theorem", "support_infi", ["function"]], ["add", "theorem", "support_inv", ["function"]], ["add", "theorem", "support_max", ["function"]], ["add", "theorem", "support_min", ["function"]], ["add", "theorem", "support_mul'", ["function"]], ["add", "theorem", "support_mul", ["function"]], ["add", "theorem", "support_neg", ["function"]], ["add", "theorem", "support_prod", ["function"]], ["add", "theorem", "support_sub", ["function"]], ["add", "theorem", "support_sum", ["function"]], ["add", "theorem", "support_sup", ["function"]], ["add", "theorem", "support_supr", ["function"]]]}]}, {"timestamp": 1586348959, "sha": "b550c165", "message": "fix(tactic/solve_by_elim): fix metavariable bug from #2269 (#2289)\n* chore(tactic/solve_by_elim): fix metavariable bug from #2269\n* tests\n* forgot to save file?\n* fix bug, and tweak docs\n* fix\n* oops, remove stray\n* provide both `lemmas` and `lemma_thunks` fields\n* fix\n* fix\n* remove code duplication\n* fix indenting\n* add comments about evaluating thunks in mk_assumption_set", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1586339755, "sha": "bd21cffc", "message": "feat(data/list/basic): some lemmas about sum/head/tail for list ℕ (#2342)\n* feat(data/list/basic): some lemmas about sum/head/tail for list ℕ\n* Add comment\n* remove lemma, moving to another PR\n* suggestion from review", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "head_add_tail_sum", ["list"]], ["add", "theorem", "head_le_sum", ["list"]], ["add", "theorem", "head_mul_tail_prod'", ["list"]], ["add", "theorem", "tail_sum", ["list"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "get_or_else_some", ["option"]]]}]}, {"timestamp": 1586330414, "sha": "cb8d8ace", "message": "feat (data/list/basic): lemmas about prod and take (#2345)\n* feat (data/list/basic): lemmas about prod and take\n* move lemma\n* one more\n* using to_additive properly", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "length_pos_of_prod_ne_one", ["list"]], ["add", "theorem", "length_pos_of_sum_ne_zero", ["list"]], ["add", "theorem", "length_pos_of_sum_pos", ["list"]], ["add", "theorem", "prod_take_mul_prod_drop", ["list"]], ["add", "theorem", "prod_take_succ", ["list"]], ["add", "theorem", "sum_take_add_sum_drop", ["list"]], ["add", "theorem", "sum_take_succ", ["list"]]]}]}, {"timestamp": 1586308333, "sha": "732f7109", "message": "feat(data/list/basic): nth_le 0 = head (#2350)\n* feat(data/list/basic): nth_le 0 = head\n* oops", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_le_zero", ["list"]]]}]}, {"timestamp": 1586299087, "sha": "0e2970c7", "message": "feat(algebra/group/basic.lean): add inv_mul_eq_one (#2349)", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "inv_mul_eq_one", []]]}]}, {"timestamp": 1586289030, "sha": "34ae62ad", "message": "feat(algebra/homology): functoriality of induced maps on cycles (#2338)\n* feat(algebra/homology): Functoriality of induced maps on cycles\n* Rename cycles to cocycles, induced_maps_on_cocycles_functor to kernels_functor\n* update names", "changes": [{"oldPath": "src/algebra/homology/homology.lean", "newPath": "src/algebra/homology/homology.lean", "changes": [["del", "def", "induced_map_on_cycles", ["cochain_complex"]], ["add", "def", "kernel_functor", ["cochain_complex"]], ["add", "def", "kernel_map", ["cochain_complex"]], ["add", "theorem", "kernel_map_comp", ["cochain_complex"]], ["add", "theorem", "kernel_map_condition", ["cochain_complex"]], ["add", "theorem", "kernel_map_id", ["cochain_complex"]]]}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": [["add", "theorem", "zero_f", ["category_theory", "differential_object"]]]}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": [["add", "theorem", "zero_apply", ["category_theory", "graded_object"]]]}]}, {"timestamp": 1586279279, "sha": "e2fa8b2b", "message": "chore(test/refine_struct): remove dead code (#2348)", "changes": [{"oldPath": "test/refine_struct.lean", "newPath": "test/refine_struct.lean", "changes": []}]}, {"timestamp": 1586275597, "sha": "abccc301", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586273497, "sha": "6f75c57e", "message": "refactor(measure_theory/borel): `borel` is not an `instance` (#2326)\nRedo Borel spaces in a way similar to `closed_order_topology`/`order_topology`.\n* `borel` is no longer an `instance`;\n* define typeclass `opens_measurable_space` for a space with `measurable_space` and `topological_space` structures such that all open sets are measurable;\n* define typeclass `borel_space` for a space with `measurable_space` and `topological_space` structures such that `measurable_space` structure is equal to `borel`;\n* use dot syntax in more cases;\n* review some proofs that started to fail because of this change.", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "option_is_some_equiv", ["equiv"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "theorem", "smul_mk", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "def", "borel", []], ["del", "theorem", "borel_eq_subtype", []], ["add", "theorem", "borel_eq_top_of_discrete", []], ["add", "theorem", "borel_eq_top_of_encodable", []], ["del", "theorem", "borel_induced", []], ["del", "theorem", "borel_prod", []], ["del", "theorem", "borel_prod_le", []], ["add", "theorem", "borel_measurable", ["continuous"]], ["add", "theorem", "measurable2", ["continuous"]], ["add", "theorem", "measurable", ["continuous"]], ["del", "def", "ennreal_equiv_nnreal", ["ennreal"]], ["del", "theorem", "add", ["ennreal", "measurable"]], ["del", "theorem", "mul", ["ennreal", "measurable"]], ["del", "theorem", "sub", ["ennreal", "measurable"]], ["add", "theorem", "measurable_prod", ["finset"]], ["mod", "def", "to_measurable_equiv", ["homemorph"]], ["add", "def", "to_measurable_equiv", ["homeomorph"]], ["add", "theorem", "is_measurable", ["is_closed"]], ["mod", "theorem", "is_measurable_Icc", []], ["mod", "theorem", "is_measurable_Ici", []], ["mod", "theorem", "is_measurable_Iic", []], ["mod", "theorem", "is_measurable_Iio", []], ["mod", "theorem", "is_measurable_Ioi", []], ["mod", "theorem", "is_measurable_Ioo", []], ["mod", "theorem", "is_measurable_ball", []], ["add", "theorem", "is_measurable_closed_ball", []], ["add", "theorem", "is_measurable_eball", []], ["add", "theorem", "is_measurable_eq", []], ["mod", "theorem", "is_measurable_interior", []], ["mod", "theorem", "is_measurable_interval", []], ["add", "theorem", "is_measurable_le'", []], ["mod", "theorem", "is_measurable_le", []], ["del", "theorem", "is_measurable_of_is_closed", []], ["del", "theorem", "is_measurable_of_is_open", []], ["add", "theorem", "is_measurable", ["is_open"]], ["del", "theorem", "add", ["measurable"]], ["del", "theorem", "coe_nnnorm", ["measurable"]], ["add", "theorem", "const_smul", ["measurable"]], ["mod", "theorem", "dist", ["measurable"]], ["mod", "theorem", "edist", ["measurable"]], ["add", "theorem", "ennnorm", ["measurable"]], ["add", "theorem", "ennreal_add", ["measurable"]], ["add", "theorem", "ennreal_coe", ["measurable"]], ["add", "theorem", "ennreal_mul", ["measurable"]], ["add", "theorem", "ennreal_of_real", ["measurable"]], ["add", "theorem", "ennreal_sub", ["measurable"]], ["del", "theorem", "infi", ["measurable"]], ["mod", "theorem", "infi_Prop", ["measurable"]], ["add", "theorem", "inv'", ["measurable"]], ["add", "theorem", "inv", ["measurable"]], ["mod", "theorem", "is_glb", ["measurable"]], ["mod", "theorem", "is_lub", ["measurable"]], ["mod", "theorem", "max", ["measurable"]], ["mod", "theorem", "min", ["measurable"]], ["mod", "theorem", "mul", ["measurable"]], ["del", "theorem", "neg", ["measurable"]], ["mod", "theorem", "nndist", ["measurable"]], ["mod", "theorem", "nnnorm", ["measurable"]], ["add", "theorem", "nnreal_coe", ["measurable"]], ["add", "theorem", "nnreal_of_real", ["measurable"]], ["mod", "theorem", "norm", ["measurable"]], ["add", "theorem", "of_inv", ["measurable"]], ["del", "theorem", "smul'", ["measurable"]], ["mod", "theorem", "smul", ["measurable"]], ["mod", "theorem", "sub", ["measurable"]], ["add", "theorem", "sub_nnreal", ["measurable"]], ["del", "theorem", "supr", ["measurable"]], ["mod", "theorem", "supr_Prop", ["measurable"]], ["add", "theorem", "measurable_binfi", []], ["add", "theorem", "measurable_bsupr", []], ["del", "theorem", "measurable_coe_int_real", []], ["add", "theorem", "measurable_const_smul_iff", []], ["mod", "theorem", "measurable_dist", []], ["mod", "theorem", "measurable_edist", []], ["add", "def", "ennreal_equiv_nnreal", ["measurable_equiv"]], ["del", "theorem", "measurable_finset_sum", []], ["add", "theorem", "measurable_infi", []], ["add", "theorem", "measurable_inv'", []], ["add", "theorem", "measurable_inv", []], ["add", "theorem", "measurable_inv_iff", []], ["add", "theorem", "measurable_mul", []], ["del", "theorem", "measurable_neg_iff", []], ["mod", "theorem", "measurable_nndist", []], ["mod", "theorem", "measurable_nnnorm", []], ["mod", "theorem", "measurable_norm", []], ["del", "theorem", "measurable_of_continuous2", []], ["del", "theorem", "measurable_of_continuous", []], ["add", "theorem", "measurable_of_continuous_on_compl_singleton", []], ["del", "theorem", "measurable_smul_iff", []], ["add", "theorem", "measurable_supr", []], ["del", "theorem", "add", ["nnreal", "measurable"]], ["del", "theorem", "mul", ["nnreal", "measurable"]], ["del", "theorem", "sub", ["nnreal", "measurable"]], ["del", "theorem", "measurable_of_real", ["nnreal"]], ["add", "theorem", "prod_le_borel_prod", []]]}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "le_infi2_lintegral", ["measure_theory"]], ["add", "theorem", "le_infi_lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_congr", ["measure_theory"]], ["add", "theorem", "lintegral_infi", ["measure_theory"]], ["del", "theorem", "lintegral_le_lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_mono", ["measure_theory"]], ["add", "theorem", "monotone_lintegral", ["measure_theory"]], ["add", "theorem", "mul_volume_ge_le_lintegral", ["measure_theory"]], ["mod", "theorem", "approx_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "approx_comp", ["measure_theory", "simple_func"]], ["add", "theorem", "supr2_lintegral_le", ["measure_theory"]], ["add", "theorem", "supr_lintegral_le", ["measure_theory"]], ["add", "theorem", "volume_ge_le_lintegral_div", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "add", ["measure_theory", "ae_eq_fun", "integrable"]], ["mod", "theorem", "sub", ["measure_theory", "ae_eq_fun", "integrable"]], ["mod", "theorem", "integrable_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "add", ["measure_theory", "integrable"]], ["mod", "theorem", "sub", ["measure_theory", "integrable"]], ["mod", "theorem", "integrable_finset_sum", ["measure_theory"]], ["mod", "theorem", "of_fun_smul", ["measure_theory", "l1"]], ["mod", "def", "l1", ["measure_theory"]], ["mod", "theorem", "lintegral_edist_lt_top", ["measure_theory"]], ["mod", "theorem", "lintegral_edist_triangle", ["measure_theory"]], ["mod", "theorem", "lintegral_nnnorm_add", ["measure_theory"]], ["mod", "theorem", "tendsto_lintegral_norm_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "congr", ["is_measurable"]], ["add", "theorem", "of_compl", ["is_measurable"]], ["add", "theorem", "prod", ["is_measurable"]], ["del", "theorem", "is_measurable_set_prod", []], ["add", "theorem", "mono", ["measurable"]], ["add", "theorem", "subtype_coe", ["measurable"]], ["del", "theorem", "subtype_val", ["measurable"]], ["add", "theorem", "measurable_from_top", []], ["add", "theorem", "measurable_of_measurable_on_compl_singleton", []], ["add", "theorem", "measurable_to_encodable", []], ["add", "theorem", "is_measurable", ["subsingleton"]], ["add", "theorem", "measurable", ["subsingleton"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "theorem", "add", ["integrable_on"]], ["mod", "theorem", "sub", ["integrable_on"]], ["mod", "theorem", "union", ["integrable_on"]], ["mod", "theorem", "measurable_on_singleton", []]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "map_infi2_le", ["monotone"]], ["add", "theorem", "map_infi_le", ["monotone"]], ["add", "theorem", "map_supr2_ge", ["monotone"]], ["add", "theorem", "map_supr_ge", ["monotone"]]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "def", "set_congr", ["homeomorph"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "continuous_on_to_nnreal", ["ennreal"]], ["add", "def", "lt_top_homeomorph_nnreal", ["ennreal"]], ["add", "def", "ne_top_homeomorph_nnreal", ["ennreal"]]]}]}, {"timestamp": 1586263205, "sha": "97c43025", "message": "feat(data/list/basic): add map_take/drop_take (#2344)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "map_drop", ["list"]], ["add", "theorem", "map_take", ["list"]]]}]}, {"timestamp": 1586254241, "sha": "2f2e016e", "message": "chore(data/list/basic): rename take_all -> take_length (#2343)\n* chore(data/list/basic): rename take_all -> take_length\n* also rename drop_all", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "drop_all", ["list"]], ["add", "theorem", "drop_length", ["list"]], ["del", "theorem", "take_all", ["list"]], ["add", "theorem", "take_length", ["list"]]]}]}, {"timestamp": 1586249322, "sha": "d936c288", "message": "feat(data/real/nnreal): coe_max and coe_min (#2346)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_max", ["nnreal"]], ["add", "theorem", "coe_min", ["nnreal"]]]}]}, {"timestamp": 1586241858, "sha": "c85453d9", "message": "fix(tactic/refine_struct): don't add unnecessary `eq.mpr` or `id` (#2319)\n* fix(tactic/interactive): don't unfold non-Prop goals\nThe old behaviour caused `eq.mpr`'s in `pi_instance` output.\n* add a test file\n* move test\n* actually move test\n* Update test/refine_struct.lean\n* test: fix compile\n* Apply suggestions from code review\nCo-Authored-By: Gabriel Ebner \n* Try a fix by @gebner and @cipher1024\n* Update test/refine_struct.lean\nCo-Authored-By: Gabriel Ebner \n* apply Gabriel's suggestion", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/refine_struct.lean", "newPath": "test/refine_struct.lean", "changes": [["add", "structure", "bar", []], ["add", "structure", "foo", []]]}]}, {"timestamp": 1586232865, "sha": "df64ea9c", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586230962, "sha": "60d14579", "message": "chore(algebra/big_operators): drop some `decidable_eq` assumptions (#2332)\n* chore(algebra/big_operators): drop some `decidable_eq` assumptions\nI wonder why `lint` didn't report them.\n* Drop unused arguments", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_comm", ["finset"]], ["mod", "theorem", "prod_sum", ["finset"]], ["mod", "theorem", "prod_union_inter", ["finset"]], ["mod", "theorem", "sum_le_sum_of_ne_zero", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "filter_and", ["finset"]], ["mod", "theorem", "filter_not", ["finset"]], ["mod", "theorem", "filter_or", ["finset"]], ["mod", "theorem", "filter_union_filter_neg_eq", ["finset"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "mul_to_lin", ["matrix"]], ["mod", "theorem", "rank_vec_mul_vec", ["matrix"]], ["mod", "theorem", "trace_mul_comm", ["matrix"]], ["mod", "theorem", "trace_transpose_mul", ["matrix"]]]}]}, {"timestamp": 1586215934, "sha": "7628c6c7", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1586214314, "sha": "48cc0c81", "message": "feat(algebra/group_with_zero): groups with a zero element adjoined (#2242)\n* feat(algebra/group_with_zero*): Basics on groups with a zero adjoined\n* feat(algebra/group_with_zero*): Basics on groups with a zero adjoined\n* Make argument implicit\n* Move inv_eq_zero out of gwz namespace\n* Partial refactor\n* Remove open_locale classical\n* Fix build\n* Factor out monoid_with_zero\n* Fix linter errors, hopefully\n* Fix build\n* Fix tests\n* Replace G with G0\n* Add spaces around `^`\n* Add spaces and backticks in docstrings\n* Fix docstring of `mk0`\n* Fix statement of inv_eq_iff\n* Golf inv_injective\n* Golf inv_eq_zero\n* Remove the gwz namespace\n* Fix build", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "div_eq_div_iff", []], ["del", "theorem", "div_eq_iff", []], ["del", "theorem", "div_eq_iff_mul_eq", []], ["del", "theorem", "div_eq_inv_mul", []], ["del", "theorem", "div_eq_mul_inv", []], ["del", "theorem", "div_eq_zero_iff", []], ["del", "theorem", "div_mul_comm", []], ["del", "theorem", "div_mul_div_cancel", []], ["del", "theorem", "div_ne_zero", []], ["del", "theorem", "div_ne_zero_iff", []], ["del", "theorem", "div_right_inj", []], ["del", "theorem", "inv_comm_of_comm", ["division_ring"]], ["del", "theorem", "divp_eq_div", []], ["del", "theorem", "divp_mk0", []], ["del", "theorem", "eq_div_iff", []], ["del", "theorem", "div_div_cancel", ["field"]], ["del", "theorem", "div_div_div_cancel_right", ["field"]], ["del", "theorem", "div_right_comm", ["field"]], ["del", "theorem", "inv_div", []], ["del", "theorem", "inv_div_left", []], ["del", "theorem", "inv_eq_zero", []], ["del", "theorem", "inv_inv''", []], ["del", "theorem", "inv_involutive'", []], ["del", "theorem", "mul_comm_div", []], ["del", "theorem", "mul_div_comm", []], ["del", "theorem", "mul_div_right_comm", []], ["del", "theorem", "inv_eq_inv", ["units"]], ["del", "def", "mk0", ["units"]], ["del", "theorem", "mk0_coe", ["units"]], ["del", "theorem", "mk0_inj", ["units"]], ["del", "theorem", "mk0_val", ["units"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "def", "fpow", []], ["del", "theorem", "fpow_add", []], ["del", "theorem", "fpow_eq_gpow", []], ["del", "theorem", "fpow_eq_zero", []], ["del", "theorem", "fpow_inv", []], ["del", "theorem", "fpow_mul", []], ["del", "theorem", "fpow_ne_zero_of_ne_zero", []], ["del", "theorem", "fpow_neg", []], ["del", "theorem", "fpow_neg_mul_fpow_self", []], ["del", "theorem", "fpow_neg_succ_of_nat", []], ["del", "theorem", "fpow_of_nat", []], ["del", "theorem", "fpow_one", []], ["del", "theorem", "fpow_sub", []], ["del", "theorem", "fpow_zero", []], ["del", "theorem", "mul_fpow", []], ["del", "theorem", "one_fpow", []], ["del", "theorem", "unit_pow", []], ["del", "theorem", "zero_fpow", []], ["del", "theorem", "zero_gpow", []]]}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "def", "smul", ["add_monoid"]], ["del", "theorem", "div_pow", []], ["del", "theorem", "div_sq_cancel", []], ["del", "theorem", "inv_pow", ["division_ring"]], ["del", "theorem", "inv_pow'", []], ["mod", "def", "pow", ["monoid"]], ["del", "theorem", "one_div_pow", []], ["del", "theorem", "pow_div", []], ["del", "theorem", "pow_inv", []]]}, {"oldPath": null, "newPath": "src/algebra/group_with_zero.lean", "changes": [["add", "theorem", "coe_unit_inv_mul'", []], ["add", "theorem", "coe_unit_mul_inv'", []], ["add", "theorem", "div_div_cancel'", []], ["add", "theorem", "div_div_div_cancel_right'", []], ["add", "theorem", "div_div_div_div_eq'", []], ["add", "theorem", "div_div_eq_div_mul'", []], ["add", "theorem", "div_div_eq_mul_div'", []], ["add", "theorem", "div_eq_div_iff", []], ["add", "theorem", "div_eq_iff", []], ["add", "theorem", "div_eq_iff_mul_eq", []], ["add", "theorem", "div_eq_inv_mul'", []], ["add", "theorem", "div_eq_mul_inv", []], ["add", "theorem", "div_eq_mul_one_div'", []], ["add", "theorem", "div_eq_zero_iff", []], ["add", "theorem", "div_helper'", []], ["add", "theorem", "div_mul_cancel'", []], ["add", "theorem", "div_mul_comm'", []], ["add", "theorem", "div_mul_div'", []], ["add", "theorem", "div_mul_div_cancel'", []], ["add", "theorem", "div_mul_eq_div_mul_one_div'", []], ["add", "theorem", "div_mul_eq_mul_div'", []], ["add", "theorem", "div_mul_eq_mul_div_comm'", []], ["add", "theorem", "div_mul_left'", []], ["add", "theorem", "div_mul_right'", []], ["add", "theorem", "div_ne_zero", []], ["add", "theorem", "div_ne_zero_iff", []], ["add", "theorem", "div_one'", []], ["add", "theorem", "div_right_comm'", []], ["add", "theorem", "div_right_inj'", []], ["add", "theorem", "div_self'", []], ["add", "theorem", "div_zero'", []], ["add", "theorem", "divp_eq_div", []], ["add", "theorem", "divp_mk0", []], ["add", "theorem", "eq_div_iff", []], ["add", "theorem", "eq_inv_of_mul_left_eq_one'", []], ["add", "theorem", "eq_inv_of_mul_right_eq_one'", []], ["add", "theorem", "eq_mul_inv_of_mul_eq'", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_left'", []], ["add", "theorem", "eq_of_mul_eq_mul_of_nonzero_right'", []], ["add", "theorem", "eq_of_one_div_eq_one_div'", []], ["add", "theorem", "eq_one_div_of_mul_eq_one'", []], ["add", "theorem", "eq_one_div_of_mul_eq_one_left'", []], ["add", "theorem", "eq_zero_of_one_div_eq_zero'", []], ["add", "theorem", "inv_comm_of_comm'", []], ["add", "theorem", "inv_div", []], ["add", "theorem", "inv_div_left", []], ["add", "theorem", "inv_eq_iff", []], ["add", "theorem", "inv_eq_zero", []], ["add", "theorem", "inv_inj''", []], ["add", "theorem", "inv_injective'", []], ["add", "theorem", "inv_inv''", []], ["add", "theorem", "inv_involutive'", []], ["add", "theorem", "inv_mul_cancel'", []], ["add", "theorem", "inv_mul_cancel_assoc_left", []], ["add", "theorem", "inv_mul_cancel_assoc_right", []], ["add", "theorem", "inv_ne_zero'", []], ["add", "theorem", "inv_one'", []], ["add", "theorem", "inv_zero'", []], ["add", "theorem", "mul_comm_div'", []], ["add", "theorem", "mul_div_assoc''", []], ["add", "theorem", "mul_div_cancel'''", []], ["add", "theorem", "mul_div_cancel''", []], ["add", "theorem", "mul_div_cancel_left'", []], ["add", "theorem", "mul_div_comm", []], ["add", "theorem", "mul_div_mul_left'", []], ["add", "theorem", "mul_div_mul_right'", []], ["add", "theorem", "mul_div_right_comm", []], ["add", "theorem", "mul_eq_mul_of_div_eq_div'", []], ["add", "theorem", "mul_eq_zero'", []], ["add", "theorem", "mul_eq_zero_iff'", []], ["add", "theorem", "mul_inv''", []], ["add", "theorem", "mul_inv_cancel'", []], ["add", "theorem", "mul_inv_cancel_assoc_left", []], ["add", "theorem", "mul_inv_cancel_assoc_right", []], ["add", "theorem", "mul_inv_eq_of_eq_mul'", []], ["add", "theorem", "mul_inv_rev'", []], ["add", "theorem", "mul_left_cancel'", []], ["add", "theorem", "mul_ne_zero''", []], ["add", "theorem", "mul_ne_zero_comm''", []], ["add", "theorem", "mul_ne_zero_iff", []], ["add", "theorem", "mul_one_div_cancel'", []], ["add", "theorem", "mul_right_cancel'", []], ["add", "theorem", "mul_right_inj'", []], ["add", "theorem", "ne_zero_of_mul_left_eq_one'", []], ["add", "theorem", "ne_zero_of_mul_right_eq_one'", []], ["add", "theorem", "ne_zero_of_one_div_ne_zero'", []], ["add", "theorem", "one_div", []], ["add", "theorem", "one_div_div'", []], ["add", "theorem", "one_div_mul_cancel'", []], ["add", "theorem", "one_div_mul_one_div'", []], ["add", "theorem", "one_div_mul_one_div_rev", []], ["add", "theorem", "one_div_ne_zero'", []], ["add", "theorem", "one_div_one'", []], ["add", "theorem", "one_div_one_div'", []], ["add", "theorem", "unit_ne_zero", []], ["add", "theorem", "coe_mk0", ["units"]], ["add", "theorem", "inv_eq_inv", ["units"]], ["add", "def", "mk0", ["units"]], ["add", "theorem", "mk0_coe", ["units"]], ["add", "theorem", "mk0_inj", ["units"]], ["add", "theorem", "zero_div'", []]]}, {"oldPath": null, "newPath": "src/algebra/group_with_zero_power.lean", "changes": [["add", "theorem", "div_fpow", []], ["add", "theorem", "div_pow", []], ["add", "theorem", "div_sq_cancel", []], ["add", "def", "fpow", []], ["add", "theorem", "fpow_add", []], ["add", "theorem", "fpow_add_one", []], ["add", "theorem", "fpow_coe_nat", []], ["add", "theorem", "fpow_eq_zero", []], ["add", "theorem", "fpow_inv", []], ["add", "theorem", "fpow_mul'", []], ["add", "theorem", "fpow_mul", []], ["add", "theorem", "fpow_mul_comm", []], ["add", "theorem", "fpow_ne_zero", []], ["add", "theorem", "fpow_ne_zero_of_ne_zero", []], ["add", "theorem", "fpow_neg", []], ["add", "theorem", "fpow_neg_mul_fpow_self", []], ["add", "theorem", "fpow_neg_one", []], ["add", "theorem", "fpow_neg_succ", []], ["add", "theorem", "fpow_neg_succ_of_nat", []], ["add", "theorem", "fpow_of_nat", []], ["add", "theorem", "fpow_one", []], ["add", "theorem", "fpow_one_add", []], ["add", "theorem", "fpow_sub", []], ["add", "theorem", "fpow_zero", []], ["add", "theorem", "inv_fpow", []], ["add", "theorem", "inv_pow'", []], ["add", "theorem", "mul_fpow", []], ["add", "theorem", "one_div_fpow", []], ["add", "theorem", "one_div_pow", []], ["add", "theorem", "one_fpow", []], ["add", "theorem", "pow_eq_zero'", []], ["add", "theorem", "pow_inv_comm'", []], ["add", "theorem", "pow_ne_zero'", []], ["add", "theorem", "pow_sub'", []], ["add", "theorem", "unit_gpow", []], ["add", "theorem", "unit_pow", []], ["add", "theorem", "zero_fpow", []], ["add", "theorem", "zero_pow'", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "ne_iff", ["nnreal"]]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1586206915, "sha": "89fdec6e", "message": "fix(data/finset): add comment (#2336)\n* doc(data/finset): adding comment\n* fix(topology/metric_space/basic): comment typo", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1586197225, "sha": "7b120a35", "message": "feat(data/mv_polynomial): add pderivative_eq_zero_of_not_mem_vars (#2324)\n* feat(data/mv_polynomial): add pderivative_eq_zero_of_not_mem_vars\n* Added doc comment for `pderivative.add_monoid_hom`\n* Fix formatting\n* fixed issues from review\n* change begin end to braces.\n* fix issues from review", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "as_sum", ["mv_polynomial"]], ["add", "theorem", "mem_support_not_mem_vars_zero", ["mv_polynomial"]], ["add", "def", "add_monoid_hom", ["mv_polynomial", "pderivative"]], ["add", "theorem", "add_monoid_hom_apply", ["mv_polynomial", "pderivative"]], ["add", "theorem", "pderivative_eq_zero_of_not_mem_vars", ["mv_polynomial"]], ["add", "theorem", "support_sum_monomial_coeff", ["mv_polynomial"]]]}]}, {"timestamp": 1586187243, "sha": "ff910dca", "message": "feat(topology/bounded_continuous_function): composition of limits when uniform convergence (#2260)\n* feat(topology/bounded_continuous_function): composition of limits when uniform convergence\n* better statement\n* uniform space version\n* cleanup\n* fix linter\n* reviewer's comments", "changes": [{"oldPath": "src/analysis/analytic/basic.lean", "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "tendsto_locally_uniformly_on'", ["has_fpower_series_on_ball"]], ["add", "theorem", "tendsto_locally_uniformly_on", ["has_fpower_series_on_ball"]], ["add", "theorem", "tendsto_uniformly_on'", ["has_fpower_series_on_ball"]], ["add", "theorem", "tendsto_uniformly_on", ["has_fpower_series_on_ball"]], ["add", "theorem", "uniform_geometric_approx", ["has_fpower_series_on_ball"]], ["del", "theorem", "uniform_limit", ["has_fpower_series_on_ball"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "val_eq_coe", ["nnreal"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "self_of_nhds", ["filter", "eventually"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["del", "theorem", "continuous_at_of_locally_uniform_limit_of_continuous_at", []], ["del", "theorem", "continuous_of_locally_uniform_limit_of_continuous", []], ["del", "theorem", "continuous_of_uniform_limit_of_continuous", []], ["del", "theorem", "continuous_on_of_locally_uniform_limit_of_continuous_on", []], ["del", "theorem", "continuous_on_of_uniform_limit_of_continuous_on", []], ["del", "theorem", "continuous_within_at_of_locally_uniform_limit_of_continuous_within_at", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "self_of_nhds_within", ["filter", "eventually"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "emetric_ball_nnreal", ["metric"]], ["add", "theorem", "emetric_closed_ball_nnreal", ["metric"]], ["add", "theorem", "tendsto_locally_uniformly_iff", ["metric"]], ["add", "theorem", "tendsto_locally_uniformly_on_iff", ["metric"]], ["add", "theorem", "tendsto_uniformly_iff", ["metric"]], ["add", "theorem", "tendsto_uniformly_on_iff", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "tendsto_locally_uniformly_iff", ["emetric"]], ["add", "theorem", "tendsto_locally_uniformly_on_iff", ["emetric"]], ["add", "theorem", "tendsto_uniformly_iff", ["emetric"]], ["add", "theorem", "tendsto_uniformly_on_iff", ["emetric"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["del", "theorem", "mem_nhds_uniformity_iff", []], ["add", "theorem", "mem_nhds_uniformity_iff_left", []], ["add", "theorem", "mem_nhds_uniformity_iff_right", []], ["add", "theorem", "continuous_at_iff'_left", ["uniform"]], ["add", "theorem", "continuous_at_iff'_right", ["uniform"]], ["add", "theorem", "continuous_iff'_left", ["uniform"]], ["add", "theorem", "continuous_iff'_right", ["uniform"]], ["add", "theorem", "continuous_on_iff'_left", ["uniform"]], ["add", "theorem", "continuous_on_iff'_right", ["uniform"]], ["add", "theorem", "continuous_within_at_iff'_left", ["uniform"]], ["add", "theorem", "continuous_within_at_iff'_right", ["uniform"]], ["add", "theorem", "tendsto_nhds_left", ["uniform"]], ["add", "theorem", "tendsto_nhds_right", ["uniform"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/uniform_space/uniform_convergence.lean", "changes": [["add", "theorem", "continuous_at_of_locally_uniform_approx_of_continuous_at", []], ["add", "theorem", "continuous_of_locally_uniform_approx_of_continuous", []], ["add", "theorem", "continuous_of_uniform_approx_of_continuous", []], ["add", "theorem", "continuous_on_of_locally_uniform_approx_of_continuous_on", []], ["add", "theorem", "continuous_on_of_uniform_approx_of_continuous_on", []], ["add", "theorem", "continuous_within_at_of_locally_uniform_approx_of_continuous_within_at", []], ["add", "theorem", "tendsto_comp_of_locally_uniform_limit", []], ["add", "theorem", "tendsto_comp_of_locally_uniform_limit_within", []], ["add", "theorem", "comp", ["tendsto_locally_uniformly"]], ["add", "theorem", "continuous", ["tendsto_locally_uniformly"]], ["add", "theorem", "tendsto_comp", ["tendsto_locally_uniformly"]], ["add", "def", "tendsto_locally_uniformly", []], ["add", "theorem", "comp", ["tendsto_locally_uniformly_on"]], ["add", "theorem", "continuous_on", ["tendsto_locally_uniformly_on"]], ["add", "theorem", "mono", ["tendsto_locally_uniformly_on"]], ["add", "theorem", "tendsto_comp", ["tendsto_locally_uniformly_on"]], ["add", "def", "tendsto_locally_uniformly_on", []], ["add", "theorem", "tendsto_locally_uniformly_on_univ", []], ["add", "theorem", "comp", ["tendsto_uniformly"]], ["add", "theorem", "continuous", ["tendsto_uniformly"]], ["add", "theorem", "tendsto_comp", ["tendsto_uniformly"]], ["add", "theorem", "tendsto_locally_uniformly", ["tendsto_uniformly"]], ["add", "theorem", "tendsto_uniformly_on", ["tendsto_uniformly"]], ["add", "def", "tendsto_uniformly", []], ["add", "theorem", "comp", ["tendsto_uniformly_on"]], ["add", "theorem", "continuous_on", ["tendsto_uniformly_on"]], ["add", "theorem", "mono", ["tendsto_uniformly_on"]], ["add", "theorem", "tendsto_comp", ["tendsto_uniformly_on"]], ["add", "theorem", "tendsto_locally_uniformly_on", ["tendsto_uniformly_on"]], ["add", "def", "tendsto_uniformly_on", []], ["add", "theorem", "tendsto_uniformly_on_univ", []]]}]}, {"timestamp": 1586176792, "sha": "572fad12", "message": "chore(topology/instances/ennreal): prove `tendsto_iff_edist_tendsto_0` (#2333)", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_iff_edist_tendsto_0", []]]}]}, {"timestamp": 1586168113, "sha": "3d60e134", "message": "chore(algebra/field): move some lemmas from `field` to `division_ring` (#2331)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}]}, {"timestamp": 1586129962, "sha": "a2e76391", "message": "feat(order/filter): more eventually/frequently API (#2330)\n* feat(order/filter): more eventually/frequently API\n* Update after review\n* Add simp attribute\n* Update src/order/filter/basic.lean\nCo-Authored-By: Yury G. Kudryashov \n* Update src/order/filter/basic.lean\nCo-Authored-By: Yury G. Kudryashov ", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eventually_comap", ["filter"]], ["add", "theorem", "eventually_iff", ["filter"]], ["add", "theorem", "eventually_map", ["filter"]], ["add", "theorem", "eventually_of_mem", ["filter"]], ["add", "theorem", "frequently_at_top'", ["filter"]], ["add", "theorem", "frequently_comap", ["filter"]], ["add", "theorem", "frequently_iff", ["filter"]], ["add", "theorem", "frequently_map", ["filter"]], ["add", "theorem", "inf_ne_bot_iff", ["filter"]], ["add", "theorem", "inf_ne_bot_iff_frequently_left", ["filter"]], ["add", "theorem", "inf_ne_bot_iff_frequently_right", ["filter"]]]}]}, {"timestamp": 1586108767, "sha": "26bf2730", "message": "feat(logic/embedding): embedding punit/prod (#2315)\n* feat(logic/embedding): embedding punit/prod\n* renaming to sectl\n* Revert disambiguations no longer needed", "changes": [{"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["del", "def", "inl", ["category_theory", "prod"]], ["del", "def", "inr", ["category_theory", "prod"]], ["add", "def", "sectl", ["category_theory", "prod"]], ["add", "def", "sectr", ["category_theory", "prod"]], ["mod", "theorem", "prod_id_fst", ["category_theory"]], ["mod", "theorem", "prod_id_snd", ["category_theory"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "equiv_symm_to_embedding_trans_to_embedding", ["function", "embedding"]], ["add", "theorem", "equiv_to_embedding_trans_symm_to_embedding", ["function", "embedding"]], ["add", "def", "punit", ["function", "embedding"]], ["add", "def", "sectl", ["function", "embedding"]], ["add", "def", "sectr", ["function", "embedding"]]]}]}, {"timestamp": 1586065988, "sha": "23681c3d", "message": "feat(tactic/linarith): split conjunctions in hypotheses (#2320)\n* feat(tactic/linarith): split conjunctions in hypotheses\n* update doc", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1586023140, "sha": "dea8bd4b", "message": "feat(*/multilinear): more material (#2197)\n* feat(*/multilinear): more material\n* improvements\n* docstring\n* elaboration strategy\n* remove begin ... end\n* fix build\n* linter", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "continuous_eval_left", ["continuous_multilinear_map"]], ["add", "theorem", "has_sum_eval", ["continuous_multilinear_map"]], ["add", "theorem", "norm_restr", ["continuous_multilinear_map"]], ["add", "def", "restr", ["continuous_multilinear_map"]], ["add", "theorem", "restr_norm_le", ["multilinear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "map_sum", ["multilinear_map"]], ["add", "theorem", "map_sum_finset", ["multilinear_map"]], ["add", "theorem", "map_sum_finset_aux", ["multilinear_map"]], ["add", "theorem", "sum_apply", ["multilinear_map"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "theorem", "map_sum", ["continuous_multilinear_map"]], ["add", "theorem", "map_sum_finset", ["continuous_multilinear_map"]], ["add", "theorem", "sum_apply", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1586018626, "sha": "8406896b", "message": "chore(ci): always push release to azure (#2321)\nPR #2048 changed the CI so that olean caches are not pushed to Azure if a later commit on the same branch occurs. The reasoning was that it was unlikely that anyone would fetch those caches. That's changed as of #2278, since `fetch_olean_cache.sh` now looks for caches from commits earlier in the history. This means that currently, we can observe the following wasteful sequence of events in several PRs (e.g. #2258):\n1. commit A gets pushed to a certain branch and CI_A starts.\n2. While CI_A is still running the `leanpkg build` step, commit B is pushed and CI_B starts.\n3. CI_A finishes `leanpkg build` but doesn't upload its cache to Azure because of #2048 \n4. Now commit C is pushed and can't use the results of CI_A\n5. CI_B finishes `leanpkg build` but doesn't upload its cache\n6. Commit D is pushed and can't use the results of CI_A or CI_B ...\n(This can keep happening as long as the next commit arrives before the most recent CI uploads to Azure).\nI also cleaned up some stuff that was left over from when we ran the build on both \"pr\" and \"push\" events.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1585987900, "sha": "63aa8b1e", "message": "feat(data/mv_polynomial): add partial derivatives (#2298)\n* feat(data/mv_polynomial): add partial derivatives\n* Added suggestions from PR.\n* trying to placate simp linter\n* Updated implementation of `pderivative`\n* formatting suggestions from Bryan\nCo-Authored-By: Bryan Gin-ge Chen \n* Suggestions from review.\n* rearrange aux lemmas", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "add_sub_single_one", ["finsupp"]], ["add", "theorem", "erase_add", ["finsupp"]], ["add", "theorem", "erase_single", ["finsupp"]], ["add", "theorem", "erase_single_ne", ["finsupp"]], ["add", "theorem", "single_sub", ["finsupp"]], ["add", "theorem", "sub_single_one_add", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "induction_on'", ["mv_polynomial"]], ["add", "theorem", "monomial_add", ["mv_polynomial"]], ["add", "theorem", "monomial_mul", ["mv_polynomial"]], ["add", "theorem", "monomial_zero", ["mv_polynomial"]], ["add", "def", "pderivative", ["mv_polynomial"]], ["add", "theorem", "pderivative_C", ["mv_polynomial"]], ["add", "theorem", "pderivative_C_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_add", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_monomial_single", ["mv_polynomial"]], ["add", "theorem", "pderivative_mul", ["mv_polynomial"]], ["add", "theorem", "pderivative_zero", ["mv_polynomial"]], ["add", "theorem", "single_eq_C_mul_X", ["mv_polynomial"]], ["add", "theorem", "sum_monomial", ["mv_polynomial"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_succ_sub_one", ["nat"]], ["add", "theorem", "succ_add_sub_one", ["nat"]]]}]}, {"timestamp": 1585977652, "sha": "906874e2", "message": "feat(category_theory): quotient categories (#2310)\nThis constructs the quotient of a category by an arbitrary family of relations on its hom-sets. Analogous to \"quotient of a group by the normal closure of a subset\", as opposed to \"quotient of a group by a normal subgroup\".\nThe plan is to eventually use this together with the path category to construct the free groupoid on a graph.", "changes": [{"oldPath": null, "newPath": "src/category_theory/quotient.lean", "changes": [["add", "def", "comp", ["category_theory", "quotient"]], ["add", "inductive", "comp_closure", ["category_theory", "quotient"]], ["add", "theorem", "comp_left", ["category_theory", "quotient"]], ["add", "theorem", "comp_mk", ["category_theory", "quotient"]], ["add", "theorem", "comp_right", ["category_theory", "quotient"]], ["add", "def", "functor", ["category_theory", "quotient"]], ["add", "def", "hom", ["category_theory", "quotient"]], ["add", "def", "is_lift", ["category_theory", "quotient", "lift"]], ["add", "theorem", "is_lift_hom", ["category_theory", "quotient", "lift"]], ["add", "theorem", "is_lift_inv", ["category_theory", "quotient", "lift"]], ["add", "def", "lift", ["category_theory", "quotient"]], ["add", "structure", "quotient", ["category_theory"]]]}]}, {"timestamp": 1585917248, "sha": "a590d4b5", "message": "feat(group_theory/monoid_localization): some homs induced on localizations: lift, map (#2118)\n* should I be changing and committing toml idk\n* initial monoid loc lemmas\n* responding to PR comments\n* removing bad @[simp]\n* inhabited instances\n* remove #lint\n* additive inhabited instance\n* using is_unit & is_add_unit\n* doc string\n* remove simp\n* submonoid.monoid_loc... -> submonoid.localization\n* submonoid.monoid_loc... -> submonoid.localization\n* generalize inhabited instance\n* remove inhabited instance\n* 2nd section\n* docs and linting\n* removing questionable `@[simp]s`\n* removing away\n* adding lemmas, removing 'include'\n* removing import\n* responding to PR comments\n* use eq_of_eq to prove comp_eq_of_eq\n* name change\n* trying to update mathlib\n* make lemma names consistent\n* Update src/algebra/group/is_unit.lean\n* Update src/algebra/group/is_unit.lean\n* fix build\n* documentation and minor changes\n* spacing\n* fix build\n* applying comments", "changes": [{"oldPath": "src/algebra/group/is_unit.lean", "newPath": "src/algebra/group/is_unit.lean", "changes": [["mod", "theorem", "coe_lift_right", ["is_unit"]], ["add", "theorem", "lift_right_inv_mul", ["is_unit"]], ["mod", "theorem", "map", ["is_unit"]], ["add", "theorem", "mul_lift_right_inv", ["is_unit"]], ["mod", "theorem", "is_unit_iff_exists_inv'", []], ["mod", "theorem", "is_unit_iff_exists_inv", []], ["add", "theorem", "is_unit_of_mul_eq_one", []], ["del", "theorem", "is_unit_of_mul_one", []], ["mod", "theorem", "is_unit_unit", []]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["mod", "theorem", "coe_lift_right", ["units"]], ["add", "theorem", "lift_right_inv_mul", ["units"]], ["add", "theorem", "mul_lift_right_inv", ["units"]]]}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "comp_eq_of_eq", ["submonoid", "localization_map"]], ["add", "theorem", "comp_mul_equiv_symm_comap_apply", ["submonoid", "localization_map"]], ["add", "theorem", "comp_mul_equiv_symm_map_apply", ["submonoid", "localization_map"]], ["add", "theorem", "epic_of_localization_map", ["submonoid", "localization_map"]], ["mod", "theorem", "eq_mk'_iff_mul_eq", ["submonoid", "localization_map"]], ["add", "theorem", "eq_of_eq", ["submonoid", "localization_map"]], ["del", "theorem", "exists_of_sec", ["submonoid", "localization_map"]], ["mod", "theorem", "exists_of_sec_mk'", ["submonoid", "localization_map"]], ["add", "theorem", "ext", ["submonoid", "localization_map"]], ["add", "theorem", "ext_iff", ["submonoid", "localization_map"]], ["mod", "theorem", "inv_inj", ["submonoid", "localization_map"]], ["mod", "theorem", "inv_unique", ["submonoid", "localization_map"]], ["add", "theorem", "is_unit_comp", ["submonoid", "localization_map"]], ["add", "theorem", "lift_comp", ["submonoid", "localization_map"]], ["add", "theorem", "lift_eq", ["submonoid", "localization_map"]], ["add", "theorem", "lift_eq_iff", ["submonoid", "localization_map"]], ["add", "theorem", "lift_id", ["submonoid", "localization_map"]], ["add", "theorem", "lift_injective_iff", ["submonoid", "localization_map"]], ["add", "theorem", "lift_left_inverse", ["submonoid", "localization_map"]], ["add", "theorem", "lift_mk'", ["submonoid", "localization_map"]], ["add", "theorem", "lift_mk'_spec", ["submonoid", "localization_map"]], ["add", "theorem", "lift_mul_left", ["submonoid", "localization_map"]], ["add", "theorem", "lift_mul_right", ["submonoid", "localization_map"]], ["add", "theorem", "lift_of_comp", ["submonoid", "localization_map"]], ["add", "theorem", "lift_spec", ["submonoid", "localization_map"]], ["add", "theorem", "lift_spec_mul", ["submonoid", "localization_map"]], ["add", "theorem", "lift_surjective_iff", ["submonoid", "localization_map"]], ["add", "theorem", "lift_unique", ["submonoid", "localization_map"]], ["add", "theorem", "map_comp", ["submonoid", "localization_map"]], ["add", "theorem", "map_comp_map", ["submonoid", "localization_map"]], ["add", "theorem", "map_eq", ["submonoid", "localization_map"]], ["add", "theorem", "map_id", ["submonoid", "localization_map"]], ["add", "theorem", "map_map", ["submonoid", "localization_map"]], ["add", "theorem", "map_mk'", ["submonoid", "localization_map"]], ["add", "theorem", "map_mul_left", ["submonoid", "localization_map"]], ["add", "theorem", "map_mul_right", ["submonoid", "localization_map"]], ["add", "theorem", "map_spec", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_eq_iff_eq_mul", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_mul", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_mul_cancel_left", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_mul_cancel_right", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_mul_eq_mk'_of_mul", ["submonoid", "localization_map"]], ["mod", "theorem", "mk'_sec", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_localizations_apply", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_localizations_symm_apply", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_mul_equiv_eq", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_mul_equiv_eq_map", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_mul_equiv_eq_map_apply", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_mul_equiv_mk'", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_to_mul_equiv", ["submonoid", "localization_map"]], ["add", "theorem", "mul_equiv_of_to_mul_equiv_apply", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_inv", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_inv_left", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_inv_right", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_mk'_eq_mk'_of_mul", ["submonoid", "localization_map"]], ["mod", "theorem", "mul_mk'_one_eq_mk'", ["submonoid", "localization_map"]], ["add", "def", "of_mul_equiv", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_apply", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_eq", ["submonoid", "localization_map"]], ["add", "theorem", "of_mul_equiv_id", ["submonoid", "localization_map"]], ["mod", "theorem", "sec_spec'", ["submonoid", "localization_map"]], ["mod", "theorem", "sec_spec", ["submonoid", "localization_map"]], ["add", "theorem", "symm_of_mul_equiv_apply", ["submonoid", "localization_map"]], ["add", "theorem", "symm_to_mul_equiv_apply", ["submonoid", "localization_map"]], ["add", "theorem", "to_fun_inj", ["submonoid", "localization_map"]], ["add", "def", "to_mul_equiv", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_apply", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_comp", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_eq", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_eq_iff_eq", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_id", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_of_mul_equiv", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_of_mul_equiv_apply", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_of_mul_equiv_of_mul_equiv", ["submonoid", "localization_map"]], ["add", "theorem", "to_mul_equiv_of_mul_equiv_of_mul_equiv_apply", ["submonoid", "localization_map"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "restrict_eq", ["monoid_hom"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1585904268, "sha": "6af5901b", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585902297, "sha": "8af4bb8d", "message": "refactor(tactic/lint): split into multiple files (#2299)\nThe `lint.lean` file is getting too long for me to comfortably navigate. This PR splits the file up into several parts:\n * `tactic.lint.basic` defining the `linter` structure and the `@[linter]` and `@[nolint]` attributes\n * `tactic.lint.frontend` defined the functions to run the linters and the various `#lint` commands\n * The linters are split into three separate files, the simp linters, the type class linters, and the rest.\n * `tactic.lint` imports all of the files above so `import tactic.lint` still works as before", "changes": [{"oldPath": "src/tactic/lint.lean", "newPath": null, "changes": [["del", "theorem", "add_zero", []], ["del", "theorem", "zero_add_zero", []]]}, {"oldPath": null, "newPath": "src/tactic/lint/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/lint/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/lint/frontend.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/lint/misc.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/lint/simp.lean", "changes": [["add", "theorem", "add_zero", []], ["add", "theorem", "zero_add_zero", []]]}, {"oldPath": null, "newPath": "src/tactic/lint/type_classes.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1585896945, "sha": "cb0a1b50", "message": "feat(order/filter): add lemmas about `∀ᶠ`, `∃ᶠ` and logic operations (#2314)\n* feat(order/filter): add lemmas about `∀ᶠ`, `∃ᶠ` and logic operations\n* Remove `@[congr]`\n* Apply suggestions from code review\nCo-Authored-By: Gabriel Ebner ", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "all_ae_and_iff", ["measure_theory"]], ["add", "theorem", "all_ae_imp_distrib_left", ["measure_theory"]], ["add", "theorem", "all_ae_or_distrib_left", ["measure_theory"]], ["add", "theorem", "all_ae_or_distrib_right", ["measure_theory"]], ["add", "theorem", "volume_zero_iff_all_ae_nmem", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "congr", ["filter", "eventually"]], ["del", "theorem", "congr_iff", ["filter", "eventually"]], ["add", "theorem", "eventually_and", ["filter"]], ["add", "theorem", "eventually_congr", ["filter"]], ["add", "theorem", "eventually_const", ["filter"]], ["mod", "theorem", "eventually_false_iff_eq_bot", ["filter"]], ["add", "theorem", "eventually_imp_distrib_left", ["filter"]], ["add", "theorem", "eventually_imp_distrib_right", ["filter"]], ["add", "theorem", "eventually_or_distrib_left", ["filter"]], ["add", "theorem", "eventually_or_distrib_right", ["filter"]], ["mod", "theorem", "frequently_bot", ["filter"]], ["add", "theorem", "frequently_const", ["filter"]], ["mod", "theorem", "frequently_false", ["filter"]], ["add", "theorem", "frequently_imp_distrib", ["filter"]], ["add", "theorem", "frequently_imp_distrib_left", ["filter"]], ["add", "theorem", "frequently_imp_distrib_right", ["filter"]], ["add", "theorem", "frequently_or_distrib", ["filter"]], ["add", "theorem", "frequently_or_distrib_left", ["filter"]], ["add", "theorem", "frequently_or_distrib_right", ["filter"]], ["mod", "theorem", "frequently_true_iff_ne_bot", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}]}, {"timestamp": 1585887098, "sha": "1b24e0a0", "message": "chore(test/*): move tests into individual files (#2317)", "changes": [{"oldPath": null, "newPath": "test/back_chaining.lean", "changes": [["add", "theorem", "inter_def", []], ["add", "theorem", "subset_def", []], ["add", "theorem", "subset_inter", []], ["add", "theorem", "union_def", []], ["add", "theorem", "union_subset", []]]}, {"oldPath": null, "newPath": "test/choose.lean", "changes": []}, {"oldPath": "test/coinductive.lean", "newPath": "test/coinductive.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": [["del", "inductive", "either", []], ["del", "def", "ex", []], ["del", "theorem", "inter_def", []], ["del", "structure", "my_struct2", []], ["del", "structure", "my_struct", []], ["del", "inductive", "my_tree", []], ["del", "inductive", "rec_data3", []], ["del", "theorem", "subset_def", []], ["del", "theorem", "subset_inter", []], ["del", "theorem", "union_def", []], ["del", "theorem", "union_subset", []], ["del", "def", "x", []]]}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": [["del", "def", "my_bar", []], ["del", "def", "my_foo", []]]}, {"oldPath": null, "newPath": "test/refine_struct.lean", "changes": [["add", "def", "my_bar", []], ["add", "def", "my_foo", []]]}, {"oldPath": null, "newPath": "test/traversable.lean", "changes": [["add", "inductive", "either", []], ["add", "def", "ex", []], ["add", "structure", "my_struct2", []], ["add", "structure", "my_struct", []], ["add", "inductive", "my_tree", []], ["add", "inductive", "rec_data3", []], ["add", "def", "x", []]]}]}, {"timestamp": 1585855532, "sha": "d3b8622b", "message": "fix(tactic/lint): simp_nf: do not ignore errors (#2266)\nThis PR fixes some bugs in the `simp_nf` linter. Previously it ignored all errors (from failing tactics). I've changed this so that errors from linters are handled centrally and reported as linter warnings. The `simp_is_conditional` function was also broken.\nAs usual, new linters find new issues:\n 1. Apparently Lean sometimes throws away simp lemmas. https://github.com/leanprover-community/lean/issues/163\n 2. Some types define `has_coe` but have an incorrect `has_coe_to_fun`, causing the simplifier to loop `⇑f a = ⇑↑f a = ⇑f a`. See the new library note:", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "map_eq_zero", ["is_ring_hom"]], ["mod", "theorem", "map_ne_zero", ["is_ring_hom"]]]}, {"oldPath": "src/category_theory/monoidal/functorial.lean", "newPath": "src/category_theory/monoidal/functorial.lean", "changes": []}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["mod", "theorem", "indicator_apply", ["set"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "ne_empty_iff_nonempty", ["set"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["mod", "theorem", "coe_coe_fn", ["order_iso"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "of_iso_apply", ["initial_seg"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "is_closed", ["subsingleton"]], ["del", "theorem", "is_open", ["subsingleton"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "is_closed_discrete", []]]}]}, {"timestamp": 1585844373, "sha": "654533ff", "message": "feat(logic/basic): a few lemmas about `exists_unique` (#2283)\nThe goal is to be able to deal with formulas like `∃! x ∈ s, p x`. Lean parses them as `∃! x, ∃! (hx : x ∈ s), p x`. While this is equivalent to `∃! x, x ∈ s ∧ p x`, it is not defeq to this formula.", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "elim2", ["exists_unique"]], ["add", "theorem", "exists2", ["exists_unique"]], ["add", "theorem", "exists", ["exists_unique"]], ["add", "theorem", "intro2", ["exists_unique"]], ["add", "theorem", "unique2", ["exists_unique"]], ["add", "theorem", "unique", ["exists_unique"]], ["add", "theorem", "exists_unique_iff_exists", []]]}]}, {"timestamp": 1585835730, "sha": "a88356ff", "message": "chore(topology/metric_space): use dot notation (#2313)\n* in `continuous.dist` and `continuous.edist`;\n* in `tendsto.dist` and `tendsto.edist`.", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "edist", ["continuous"]], ["del", "theorem", "continuous_edist'", []], ["mod", "theorem", "continuous_edist", []], ["add", "theorem", "edist", ["filter", "tendsto"]], ["del", "theorem", "tendsto_edist", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist", ["continuous"]], ["add", "theorem", "nndist", ["continuous"]], ["del", "theorem", "continuous_dist'", []], ["mod", "theorem", "continuous_dist", []], ["del", "theorem", "continuous_nndist'", []], ["mod", "theorem", "continuous_nndist", []], ["add", "theorem", "dist", ["filter", "tendsto"]], ["add", "theorem", "nndist", ["filter", "tendsto"]], ["del", "theorem", "tendsto_dist", []], ["del", "theorem", "tendsto_nndist'", []], ["del", "theorem", "uniform_continuous_nndist'", []], ["add", "theorem", "uniform_continuous_nndist", []]]}]}, {"timestamp": 1585826391, "sha": "3c27d284", "message": "feat(algebra/pi_instances): bundled homs for apply and single (#2186)\nfeat(algebra/pi_instances): bundled homs for apply and single (#2186)\nThis adds some bundled monoid homomorphisms, in particular\n```\ndef monoid_hom.apply (i : I) : (Π i, f i) →* f i := ...\n```\nand\n```\ndef add_monoid_hom.single (i : I) : f i →+ Π i, f i :=\n```\nand supporting lemmas.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "map_sum", ["ring_hom"]]]}, {"oldPath": "src/algebra/group/prod.lean", "newPath": "src/algebra/group/prod.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["add", "theorem", "functions_ext", ["add_monoid_hom"]], ["add", "def", "single", ["add_monoid_hom"]], ["add", "theorem", "single_apply", ["add_monoid_hom"]], ["add", "theorem", "prod_apply", ["finset"]], ["add", "theorem", "univ_sum_single", ["finset"]], ["add", "def", "apply", ["monoid_hom"]], ["add", "theorem", "apply_apply", ["monoid_hom"]], ["add", "def", "single", ["pi"]], ["add", "theorem", "single_eq_of_ne", ["pi"]], ["add", "theorem", "single_eq_same", ["pi"]], ["add", "def", "apply", ["ring_hom"]], ["add", "theorem", "apply_apply", ["ring_hom"]], ["add", "theorem", "functions_ext", ["ring_hom"]]]}]}, {"timestamp": 1585815479, "sha": "313cc2fe", "message": "chore(category_theory/concrete_category): take an instance, rather than extending, category (#2195)\nchore(category_theory/concrete_category): take an instance, rather than extending, category (#2195)\nOur current design for `concrete_category` has it extend `category`.\nThis PR changes that so that is takes an instance, instead.\nI want to do this because I ran into a problem defining `concrete_monoidal_category`, which is meant to be a monoidal category, whose faithful functor to Type is lax monoidal. (The prime example here is `Module R`, where there's a map `F(X) \\otimes F(Y) \\to F(X \\otimes Y)`, but not the other way: here `F(X) \\otimes F(Y)` is just the monoidal product in Type, i.e. cartesian product, and the function here is `(x, y) \\mapsto x \\otimes y`.)\nNow, `monoidal_category` does not extend `category`, but instead takes a typeclass, so with the old design `concrete_monoidal_category` was going to be a Frankenstein, extending `concrete_category` and taking a `[monoidal_category]` type class. However, when 3.7 landed this went horribly wrong, and even defining `concrete_monoidal_category` caused an unbounded typeclass search.\nSo.... I've made everything simpler, and just not used `extends` at all. It's all just typeclasses. This makes some places a bit more verbose, as we have to summon lots of separate typeclasses, but besides that everything works smoothly.\n(Note, this PR makes the change to `concrete_category`, but does not yet introduce `concrete_monoidal_category`.)", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["mod", "def", "has_coe_to_sort", ["category_theory", "concrete_category"]], ["mod", "def", "forget", ["category_theory"]], ["mod", "def", "forget₂", ["category_theory"]], ["mod", "def", "mk'", ["category_theory", "has_forget₂"]]]}, {"oldPath": "src/category_theory/differential_object.lean", "newPath": "src/category_theory/differential_object.lean", "changes": []}, {"oldPath": "src/category_theory/graded_object.lean", "newPath": "src/category_theory/graded_object.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}]}, {"timestamp": 1585806699, "sha": "f55e3ce4", "message": "refactor(*): move `algebra` below `polynomial` in the `import` chain (#2294)\n* Move `algebra` below `polynomial` in the `import` chain\nThis PR only moves code and slightly generalizes\n`mv_polynomial.aeval`.\n* Fix compile\n* Update src/data/mv_polynomial.lean\n* Apply suggestions from code review\n* Apply suggestions from code review\nCo-Authored-By: Bryan Gin-ge Chen ", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "def", "aeval", ["mv_polynomial"]], ["add", "theorem", "aeval_C", ["mv_polynomial"]], ["add", "theorem", "aeval_X", ["mv_polynomial"]], ["add", "theorem", "aeval_def", ["mv_polynomial"]], ["add", "theorem", "eval_unique", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "def", "aeval", ["polynomial"]], ["add", "theorem", "aeval_C", ["polynomial"]], ["add", "theorem", "aeval_X", ["polynomial"]], ["add", "theorem", "aeval_def", ["polynomial"]], ["add", "theorem", "eval_unique", ["polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["del", "def", "aeval", ["mv_polynomial"]], ["del", "theorem", "aeval_C", ["mv_polynomial"]], ["del", "theorem", "aeval_X", ["mv_polynomial"]], ["del", "theorem", "aeval_def", ["mv_polynomial"]], ["del", "theorem", "eval_unique", ["mv_polynomial"]], ["del", "def", "aeval", ["polynomial"]], ["del", "theorem", "aeval_C", ["polynomial"]], ["del", "theorem", "aeval_X", ["polynomial"]], ["del", "theorem", "aeval_def", ["polynomial"]], ["del", "theorem", "eval_unique", ["polynomial"]]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}]}, {"timestamp": 1585798031, "sha": "652fc17a", "message": "chore(data/set/lattice): add `set_of_exists` and `set_of_forall` (#2312)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "set_of_exists", ["set"]], ["add", "theorem", "set_of_forall", ["set"]]]}]}, {"timestamp": 1585778757, "sha": "5b972be7", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585776630, "sha": "33764abc", "message": "chore(tactic/transport): rename to transform_decl (#2308)\n* chore(tactic/transport): rename to transform_decl\n* satisfying the linter\n* oops, wrong comment format", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/transform_decl.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": null, "changes": []}]}, {"timestamp": 1585766554, "sha": "badc615e", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585764360, "sha": "a8076b2c", "message": "refactor(data/real/irrational): review (#2304)\n* refactor(data/real/irrational): review\n* Update src/data/real/irrational.lean\n* Update src/data/real/irrational.lean\n* Apply suggestions from code review", "changes": [{"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["del", "theorem", "irr_add_rat_iff_irr", []], ["del", "theorem", "irr_mul_rat_iff_irr", []], ["del", "theorem", "irr_neg", []], ["del", "theorem", "irr_nrt_of_n_not_dvd_multiplicity", []], ["del", "theorem", "irr_nrt_of_notint_nrt", []], ["del", "theorem", "irr_of_irr_mul_self", []], ["del", "theorem", "irr_rat_add_iff_irr", []], ["del", "theorem", "irr_rat_add_of_irr", []], ["del", "theorem", "irr_sqrt_of_multiplicity_odd", []], ["del", "theorem", "irr_sqrt_of_prime", []], ["del", "theorem", "irr_sqrt_rat_iff", []], ["del", "theorem", "irr_sqrt_two", []], ["add", "theorem", "add_cases", ["irrational"]], ["add", "theorem", "add_rat", ["irrational"]], ["add", "theorem", "div_cases", ["irrational"]], ["add", "theorem", "mul_cases", ["irrational"]], ["add", "theorem", "mul_rat", ["irrational"]], ["add", "theorem", "of_add_rat", ["irrational"]], ["add", "theorem", "of_fpow", ["irrational"]], ["add", "theorem", "of_inv", ["irrational"]], ["add", "theorem", "of_mul_rat", ["irrational"]], ["add", "theorem", "of_mul_self", ["irrational"]], ["add", "theorem", "of_neg", ["irrational"]], ["add", "theorem", "of_one_div", ["irrational"]], ["add", "theorem", "of_pow", ["irrational"]], ["add", "theorem", "of_rat_add", ["irrational"]], ["add", "theorem", "of_rat_div", ["irrational"]], ["add", "theorem", "of_rat_mul", ["irrational"]], ["add", "theorem", "of_rat_sub", ["irrational"]], ["add", "theorem", "of_sub_rat", ["irrational"]], ["add", "theorem", "rat_add", ["irrational"]], ["add", "theorem", "rat_mul", ["irrational"]], ["add", "theorem", "rat_sub", ["irrational"]], ["add", "theorem", "sub_rat", ["irrational"]], ["mod", "def", "irrational", []], ["add", "theorem", "irrational_add_rat_iff", []], ["add", "theorem", "irrational_inv_iff", []], ["add", "theorem", "irrational_neg_iff", []], ["add", "theorem", "irrational_nrt_of_n_not_dvd_multiplicity", []], ["add", "theorem", "irrational_nrt_of_notint_nrt", []], ["add", "theorem", "irrational_rat_add_iff", []], ["add", "theorem", "irrational_rat_sub_iff", []], ["add", "theorem", "irrational_sqrt_of_multiplicity_odd", []], ["add", "theorem", "irrational_sqrt_rat_iff", []], ["add", "theorem", "irrational_sqrt_two", []], ["add", "theorem", "irrational_sub_rat_iff", []], ["add", "theorem", "irrational_sqrt", ["nat", "prime"]], ["add", "theorem", "not_irrational", ["rat"]]]}]}, {"timestamp": 1585747798, "sha": "203ebb20", "message": "feat(tactic/simp_rw): support `<-` in `simp_rw` (#2309)", "changes": [{"oldPath": "src/tactic/simp_rw.lean", "newPath": "src/tactic/simp_rw.lean", "changes": []}, {"oldPath": "test/simp_rw.lean", "newPath": "test/simp_rw.lean", "changes": []}]}, {"timestamp": 1585736788, "sha": "fb658acd", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585734628, "sha": "003141c8", "message": "chore(algebra/module): cleanup `is_linear_map` (#2296)\n* reuse facts about `→+`;\n* add `map_smul`\n* add a few docstrings", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "map_add", ["is_linear_map"]], ["mod", "theorem", "map_neg", ["is_linear_map"]], ["add", "theorem", "map_smul", ["is_linear_map"]], ["mod", "theorem", "map_sub", ["is_linear_map"]], ["mod", "theorem", "map_zero", ["is_linear_map"]], ["mod", "def", "id", ["linear_map"]]]}]}, {"timestamp": 1585723668, "sha": "c7fb84ba", "message": "refactor(group_theory/submonoid): review API (#2173)\nThe old API was mirroring the API for unbundled submonoids, while the\nnew one is based on the API of `submodule`.\nAlso move some facts about `monoid`/`group` structure on `M × N` to\n`algebra/group/prod`.", "changes": [{"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": [["add", "theorem", "comp_lift", ["free_monoid"]], ["add", "theorem", "lift_apply", ["free_monoid"]], ["add", "theorem", "lift_comp_of", ["free_monoid"]]]}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "comp_id", ["monoid_hom"]], ["add", "theorem", "id_comp", ["monoid_hom"]]]}, {"oldPath": null, "newPath": "src/algebra/group/prod.lean", "changes": [["add", "theorem", "coe_fst", ["monoid_hom"]], ["add", "theorem", "coe_prod_map", ["monoid_hom"]], ["add", "theorem", "coe_snd", ["monoid_hom"]], ["add", "theorem", "comp_coprod", ["monoid_hom"]], ["add", "def", "coprod", ["monoid_hom"]], ["add", "theorem", "coprod_apply", ["monoid_hom"]], ["add", "theorem", "coprod_comp_inl", ["monoid_hom"]], ["add", "theorem", "coprod_comp_inr", ["monoid_hom"]], ["add", "theorem", "coprod_inl_inr", ["monoid_hom"]], ["add", "theorem", "coprod_unique", ["monoid_hom"]], ["add", "def", "fst", ["monoid_hom"]], ["add", "theorem", "fst_comp_inl", ["monoid_hom"]], ["add", "theorem", "fst_comp_inr", ["monoid_hom"]], ["add", "theorem", "fst_comp_prod", ["monoid_hom"]], ["add", "def", "inl", ["monoid_hom"]], ["add", "theorem", "inl_apply", ["monoid_hom"]], ["add", "def", "inr", ["monoid_hom"]], ["add", "theorem", "inr_apply", ["monoid_hom"]], ["add", "theorem", "prod_apply", ["monoid_hom"]], ["add", "theorem", "prod_comp_prod_map", ["monoid_hom"]], ["add", "def", "prod_map", ["monoid_hom"]], ["add", "theorem", "prod_map_def", ["monoid_hom"]], ["add", "theorem", "prod_unique", ["monoid_hom"]], ["add", "def", "snd", ["monoid_hom"]], ["add", "theorem", "snd_comp_inl", ["monoid_hom"]], ["add", "theorem", "snd_comp_inr", ["monoid_hom"]], ["add", "theorem", "snd_comp_prod", ["monoid_hom"]], ["add", "theorem", "fst_inv", ["prod"]], ["add", "theorem", "fst_mul", ["prod"]], ["add", "theorem", "fst_mul_snd", ["prod"]], ["add", "theorem", "fst_one", ["prod"]], ["add", "theorem", "fst_sub", ["prod"]], ["add", "theorem", "inv_mk", ["prod"]], ["add", "theorem", "mk_mul_mk", ["prod"]], ["add", "theorem", "mk_sub_mk", ["prod"]], ["add", "theorem", "one_eq_mk", ["prod"]], ["add", "theorem", "snd_inv", ["prod"]], ["add", "theorem", "snd_mul", ["prod"]], ["add", "theorem", "snd_one", ["prod"]], ["add", "theorem", "snd_sub", ["prod"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["del", "theorem", "fst_inv", ["prod"]], ["del", "theorem", "fst_mul", ["prod"]], ["del", "theorem", "fst_one", ["prod"]], ["del", "theorem", "fst_sub", ["prod"]], ["del", "theorem", "inv_mk", ["prod"]], ["del", "theorem", "mk_mul_mk", ["prod"]], ["del", "theorem", "mk_sub_mk", ["prod"]], ["del", "def", "fst", ["prod", "monoid_hom"]], ["del", "def", "inl", ["prod", "monoid_hom"]], ["del", "def", "inr", ["prod", "monoid_hom"]], ["del", "def", "snd", ["prod", "monoid_hom"]], ["del", "theorem", "one_eq_mk", ["prod"]], ["del", "theorem", "snd_inv", ["prod"]], ["del", "theorem", "snd_mul", ["prod"]], ["del", "theorem", "snd_one", ["prod"]], ["del", "theorem", "snd_sub", ["prod"]], ["del", "def", "prod", ["submonoid"]]]}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "fst_injective", ["prod"]], ["add", "theorem", "fst_surjective", ["prod"]], ["add", "theorem", "snd_injective", ["prod"]], ["add", "theorem", "snd_surjective", ["prod"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["mod", "theorem", "ker_lift_range_eq", ["con"]], ["mod", "theorem", "lift_range", ["con"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["del", "theorem", "closure'_singleton", ["add_monoid"]], ["del", "theorem", "coe_smul", ["add_submonoid"]], ["add", "theorem", "mem_closure_singleton", ["add_submonoid"]], ["del", "theorem", "self_mem", ["add_submonoid", "multiples"]], ["del", "def", "multiples", ["add_submonoid"]], ["del", "theorem", "multiples_subset", ["add_submonoid"]], ["mod", "theorem", "smul_mem", ["add_submonoid"]], ["add", "theorem", "closure_range_of", ["free_monoid"]], ["del", "def", "closure'", ["monoid"]], ["del", "theorem", "closure'_le", ["monoid"]], ["del", "theorem", "closure'_mono", ["monoid"]], ["del", "theorem", "closure'_singleton", ["monoid"]], ["del", "theorem", "exists_list_of_mem_closure'", ["monoid"]], ["del", "theorem", "image_closure'", ["monoid"]], ["del", "theorem", "le_closure'", ["monoid"]], ["del", "theorem", "mem_closure'_union_iff", ["monoid"]], ["add", "theorem", "closure_preimage_le", ["monoid_hom"]], ["add", "def", "cod_restrict", ["monoid_hom"]], ["add", "theorem", "coe_mrange", ["monoid_hom"]], ["add", "theorem", "coe_range_restrict", ["monoid_hom"]], ["del", "def", "comap", ["monoid_hom"]], ["add", "def", "eq_mlocus", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_mdense", ["monoid_hom"]], ["add", "theorem", "eq_of_eq_on_mtop", ["monoid_hom"]], ["add", "theorem", "eq_on_mclosure", ["monoid_hom"]], ["del", "def", "map", ["monoid_hom"]], ["add", "theorem", "map_mclosure", ["monoid_hom"]], ["add", "theorem", "map_mrange", ["monoid_hom"]], ["add", "theorem", "mem_mrange", ["monoid_hom"]], ["add", "def", "mrange", ["monoid_hom"]], ["add", "theorem", "mrange_top_iff_surjective", ["monoid_hom"]], ["add", "theorem", "mrange_top_of_surjective", ["monoid_hom"]], ["del", "def", "range", ["monoid_hom"]], ["del", "def", "range_mk", ["monoid_hom"]], ["add", "def", "range_restrict", ["monoid_hom"]], ["del", "theorem", "range_top_of_surjective", ["monoid_hom"]], ["mod", "def", "restrict", ["monoid_hom"]], ["add", "theorem", "restrict_apply", ["monoid_hom"]], ["del", "def", "set_inclusion", ["monoid_hom"]], ["del", "def", "subtype_mk", ["monoid_hom"]], ["del", "theorem", "Inf_le'", ["submonoid"]], ["del", "def", "Union_of_directed", ["submonoid"]], ["del", "def", "bot", ["submonoid"]], ["add", "theorem", "bot_prod_bot", ["submonoid"]], ["add", "def", "closure", ["submonoid"]], ["add", "theorem", "closure_Union", ["submonoid"]], ["add", "theorem", "closure_empty", ["submonoid"]], ["add", "theorem", "closure_eq", ["submonoid"]], ["add", "theorem", "closure_eq_mrange", ["submonoid"]], ["add", "theorem", "closure_eq_of_le", ["submonoid"]], ["add", "theorem", "closure_induction", ["submonoid"]], ["add", "theorem", "closure_le", ["submonoid"]], ["add", "theorem", "closure_mono", ["submonoid"]], ["add", "theorem", "closure_union", ["submonoid"]], ["add", "theorem", "closure_univ", ["submonoid"]], ["add", "theorem", "coe_Inf", ["submonoid"]], ["add", "theorem", "coe_bot", ["submonoid"]], ["add", "theorem", "coe_coe", ["submonoid"]], ["add", "theorem", "coe_comap", ["submonoid"]], ["add", "theorem", "coe_inf", ["submonoid"]], ["add", "theorem", "coe_map", ["submonoid"]], ["del", "theorem", "coe_pow", ["submonoid"]], ["add", "theorem", "coe_prod", ["submonoid"]], ["add", "theorem", "coe_ssubset_coe", ["submonoid"]], ["add", "theorem", "coe_subset_coe", ["submonoid"]], ["add", "theorem", "coe_subtype", ["submonoid"]], ["add", "theorem", "coe_top", ["submonoid"]], ["add", "def", "comap", ["submonoid"]], ["add", "theorem", "comap_comap", ["submonoid"]], ["add", "theorem", "comap_inf", ["submonoid"]], ["add", "theorem", "comap_infi", ["submonoid"]], ["add", "theorem", "comap_top", ["submonoid"]], ["add", "theorem", "exists_list_of_mem_closure", ["submonoid"]], ["del", "theorem", "finset_prod_mem", ["submonoid"]], ["add", "theorem", "gc_map_comap", ["submonoid"]], ["add", "def", "inclusion", ["submonoid"]], ["del", "def", "inf", ["submonoid"]], ["del", "theorem", "le_Inf'", ["submonoid"]], ["mod", "theorem", "le_def", ["submonoid"]], ["mod", "theorem", "list_prod_mem", ["submonoid"]], ["add", "def", "map", ["submonoid"]], ["add", "theorem", "map_bot", ["submonoid"]], ["add", "theorem", "map_inl", ["submonoid"]], ["add", "theorem", "map_inr", ["submonoid"]], ["add", "theorem", "map_le_iff_le_comap", ["submonoid"]], ["add", "theorem", "map_map", ["submonoid"]], ["add", "theorem", "map_sup", ["submonoid"]], ["add", "theorem", "map_supr", ["submonoid"]], ["add", "theorem", "mem_Sup_of_directed_on", ["submonoid"]], ["add", "theorem", "mem_closure", ["submonoid"]], ["add", "theorem", "mem_closure_singleton", ["submonoid"]], ["mod", "theorem", "mem_coe", ["submonoid"]], ["add", "theorem", "mem_comap", ["submonoid"]], ["mod", "theorem", "mem_inf", ["submonoid"]], ["add", "theorem", "mem_map", ["submonoid"]], ["add", "theorem", "mem_prod", ["submonoid"]], ["add", "theorem", "mem_sup", ["submonoid"]], ["add", "theorem", "mem_supr_of_directed", ["submonoid"]], ["add", "def", "of", ["submonoid"]], ["mod", "theorem", "pow_mem", ["submonoid"]], ["del", "theorem", "self_mem", ["submonoid", "powers"]], ["del", "def", "powers", ["submonoid"]], ["del", "theorem", "powers_subset", ["submonoid"]], ["add", "def", "prod", ["submonoid"]], ["add", "theorem", "prod_bot_sup_bot_prod", ["submonoid"]], ["add", "def", "prod_equiv", ["submonoid"]], ["add", "theorem", "prod_mono", ["submonoid"]], ["add", "theorem", "prod_mono_left", ["submonoid"]], ["add", "theorem", "prod_mono_right", ["submonoid"]], ["add", "theorem", "prod_top", ["submonoid"]], ["add", "theorem", "range_fst", ["submonoid"]], ["add", "theorem", "range_inl'", ["submonoid"]], ["add", "theorem", "range_inl", ["submonoid"]], ["add", "theorem", "range_inl_sup_range_inr", ["submonoid"]], ["add", "theorem", "range_inr'", ["submonoid"]], ["add", "theorem", "range_inr", ["submonoid"]], ["add", "theorem", "range_snd", ["submonoid"]], ["add", "theorem", "range_subtype", ["submonoid"]], ["add", "theorem", "subset_closure", ["submonoid"]], ["mod", "def", "subtype", ["submonoid"]], ["del", "theorem", "subtype_apply", ["submonoid"]], ["del", "theorem", "subtype_eq_val", ["submonoid"]], ["add", "theorem", "sup_eq_range", ["submonoid"]], ["add", "theorem", "top_prod", ["submonoid"]], ["add", "theorem", "top_prod_top", ["submonoid"]], ["del", "def", "univ", ["submonoid"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}]}, {"timestamp": 1585713906, "sha": "67e7f90d", "message": "fix(algebra/category): make has_coe_to_sort instances for bundled categories reducible (#2290)\n* fix(algebra/category): make has_coe_to_sort instances for bundled categories reducible\n* fix library notes\n* fix import\n* Update src/algebra/category/CommRing/basic.lean\nCo-Authored-By: Gabriel Ebner \n* fix notes", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}]}, {"timestamp": 1585703650, "sha": "cc20a865", "message": "feat(data/nat/basic): `simp` lemmas about inequalities with `bit*` (#2207)\n* feat(data/nat/basic): `simp` lemmas about inequalities with `bit*`\n* Fix compile of `computability/partrec_code`\n* Fix `nat.bit_cases` to work for `Type*` too\n* Generalize some lemmas to `linear_ordered_semiring`s\n* Apply suggestions from code review\nCo-Authored-By: Gabriel Ebner \n* Apply suggestions from code review\nCo-Authored-By: Scott Morrison \n* fixing a proof", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "bit0_le_bit0", []], ["add", "theorem", "bit0_lt_bit0", []], ["add", "theorem", "bit1_le_bit1", []], ["add", "theorem", "bit1_lt_bit1", []], ["add", "theorem", "one_le_bit1", []], ["add", "theorem", "one_lt_bit1", []], ["add", "theorem", "zero_le_bit0", []], ["add", "theorem", "zero_le_mul_left", []], ["add", "theorem", "zero_le_mul_right", []], ["add", "theorem", "zero_lt_bit0", []], ["add", "theorem", "zero_lt_mul_left", []], ["add", "theorem", "zero_lt_mul_right", []]]}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "bit0_le_bit1_iff", ["nat"]], ["add", "theorem", "bit0_lt_bit1_iff", ["nat"]], ["add", "theorem", "bit1_le_bit0_iff", ["nat"]], ["add", "theorem", "bit1_lt_bit0_iff", ["nat"]], ["add", "def", "bit_cases", ["nat"]], ["add", "theorem", "bit_le_bit1_iff", ["nat"]], ["add", "theorem", "bit_le_bit_iff", ["nat"]], ["add", "theorem", "bit_lt_bit_iff", ["nat"]], ["add", "theorem", "one_le_bit0_iff", ["nat"]], ["add", "theorem", "one_lt_bit0_iff", ["nat"]]]}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}]}, {"timestamp": 1585693582, "sha": "7d89f2ea", "message": "feat(data/fintype/card): prod_univ_sum (#2284)\n* feat(data/fintype/card): prod_univ_sum\n* Update src/data/fintype.lean\n* Update src/data/fintype/card.lean\n* docstrings\n* fix build\n* remove unused argument\n* fix build", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "card_map", ["finset"]]]}, {"oldPath": "src/data/fintype/basic.lean", "newPath": "src/data/fintype/basic.lean", "changes": [["mod", "theorem", "pi_finset_univ", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "prod_univ_pi", ["finset"]], ["add", "theorem", "prod_univ_sum", ["finset"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1585681375, "sha": "224ba7e0", "message": "feat(data/finset): card_image_le (#2295)\n* feat(data/finset): card_image_le\n* add list.to_finset_card_le", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card_image_le", ["finset"]], ["add", "theorem", "to_finset_card_le", ["list"]], ["add", "theorem", "to_finset_card_le", ["multiset"]]]}]}, {"timestamp": 1585670547, "sha": "72d3b6e3", "message": "feat(tactic/equiv_rw): incorporating equiv_functor (#2301)\n* feat(tactic): rewriting along equivalences\n* header\n* minor\n* type\n* actually, rewriting the goal under functors is easy\n* rewriting inside function types\n* more\n* way better\n* improving comments\n* fun\n* feat(data/equiv): pi_congr\n* various\n* feat(data/equiv): sigma_congr\n* docstrings\n* change case for consistency\n* tidying up\n* minor\n* minor\n* switching names\n* fixes\n* add some tracing routines for convenience\n* feat(tactic/core): trace_for\n* typo\n* oops\n* oops\n* various\n* chore(tactic/solve_by_elim): cleanup\n* cleanup\n* what happened to my commit?\n* fix\n* fix\n* rename to trace_if_enabled\n* fixed?\n* Tweak comments\n* feat(tactic/solve_by_elim): add accept parameter to prune tree search\n* when called with empty lemmas, use the same default set as the interactive tactic\n* trace_state_if_enabled\n* Update src/data/equiv/basic.lean\n* implicit arguments\n* stop cheating with [] ~ none\n* indenting\n* yay, working via solve_by_elim\n* pretty good\n* various\n* various\n* docstring\n* fix docstrings\n* more docs\n* docs\n* feat(data/equiv/functor): bifunctor.map_equiv\n* bifunctors\n* test rewriting under unique\n* start\n* sketch of equiv_functor\n* rewriting in subtypes\n* add documentation, and make the function an explicit argument\n* documentation\n* fix doc-strings\n* typos\n* minor\n* adding demonstration of transporting semigroup\n* update\n* removing unimpressive inhabited example; easier later\n* Update .vscode/settings.json\n* err\n* trying to transport through monoid\n* err?\n* much better\n* improve documentation of accept, and add doc-string\n* fix duplicated namespace\n* improve docs\n* feat(logic/basic): trivial transport lemmas\n* try again with documentation\n* update\n* oops\n* oops\n* omit\n* revert unnecessary change\n* fix doc-string\n* chore(data/equiv/basic): simp to_fun to coe\n* feat(tactic/equiv_rw): incorporating equiv_functor\n* rename adapt_equiv\n* simplify the equivalence produced, and provide a tactic to access the equivalence\n* add max_steps option\n* add decl_name to add_tactic_doc\n* fix add_tactic_doc\n* satisfying linter\n* fix names\n* finish fix\n* add defaults for cfg arguments\n* remove simplify_term, which already existed as expr.simp\n* remove duplicate functions that have been PRd separately\n* no need for accept\n* Update src/tactic/equiv_rw.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/tactic/equiv_rw.lean\nCo-Authored-By: Gabriel Ebner \n* replace max_steps with max_depth\n* use solve_aux\n* add missing simp lemmas about arrow_congr'\n* fix failing test, by making sure we don't leave any ≃ goals on the table\n* add comment\n* comment out trace output\n* fix fields", "changes": [{"oldPath": "src/category/equiv_functor.lean", "newPath": "src/category/equiv_functor.lean", "changes": []}, {"oldPath": null, "newPath": "src/category/equiv_functor/instances.lean", "changes": []}, {"oldPath": "src/tactic/equiv_rw.lean", "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "test/equiv_rw.lean", "newPath": "test/equiv_rw.lean", "changes": [["add", "theorem", "id_map", ["semigroup"]], ["del", "theorem", "map_comp", ["semigroup"]], ["del", "def", "map_equiv", ["semigroup"]], ["del", "theorem", "map_id", ["semigroup"]], ["add", "theorem", "map_map", ["semigroup"]]]}]}, {"timestamp": 1585665005, "sha": "b508d0e0", "message": "feat(tactic/equiv_rw): rewriting along equivalences (#2246)\n* feat(tactic): rewriting along equivalences\n* header\n* minor\n* type\n* actually, rewriting the goal under functors is easy\n* rewriting inside function types\n* more\n* way better\n* improving comments\n* fun\n* feat(data/equiv): pi_congr\n* various\n* feat(data/equiv): sigma_congr\n* docstrings\n* change case for consistency\n* tidying up\n* minor\n* minor\n* switching names\n* fixes\n* add some tracing routines for convenience\n* feat(tactic/core): trace_for\n* typo\n* oops\n* oops\n* various\n* chore(tactic/solve_by_elim): cleanup\n* cleanup\n* what happened to my commit?\n* fix\n* fix\n* rename to trace_if_enabled\n* fixed?\n* Tweak comments\n* feat(tactic/solve_by_elim): add accept parameter to prune tree search\n* when called with empty lemmas, use the same default set as the interactive tactic\n* trace_state_if_enabled\n* Update src/data/equiv/basic.lean\n* implicit arguments\n* stop cheating with [] ~ none\n* indenting\n* yay, working via solve_by_elim\n* pretty good\n* various\n* various\n* docstring\n* fix docstrings\n* more docs\n* docs\n* feat(data/equiv/functor): bifunctor.map_equiv\n* bifunctors\n* test rewriting under unique\n* rewriting in subtypes\n* add documentation, and make the function an explicit argument\n* documentation\n* fix doc-strings\n* typos\n* minor\n* adding demonstration of transporting semigroup\n* Update .vscode/settings.json\n* err\n* trying to transport through monoid\n* err?\n* much better\n* improve documentation of accept, and add doc-string\n* fix duplicated namespace\n* improve docs\n* try again with documentation\n* update\n* oops\n* rename adapt_equiv\n* simplify the equivalence produced, and provide a tactic to access the equivalence\n* add max_steps option\n* add decl_name to add_tactic_doc\n* fix add_tactic_doc\n* satisfying linter\n* add defaults for cfg arguments\n* remove simplify_term, which already existed as expr.simp\n* remove duplicate functions that have been PRd separately\n* no need for accept\n* Update src/tactic/equiv_rw.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/tactic/equiv_rw.lean\nCo-Authored-By: Gabriel Ebner \n* replace max_steps with max_depth\n* use solve_aux\n* add missing simp lemmas about arrow_congr'\n* fix failing test, by making sure we don't leave any ≃ goals on the table\n* add comment\n* comment out trace output", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "Pi_congr'", ["equiv"]], ["add", "def", "arrow_congr'", ["equiv"]], ["add", "theorem", "arrow_congr'_apply", ["equiv"]], ["add", "theorem", "arrow_congr'_refl", ["equiv"]], ["add", "theorem", "arrow_congr'_symm", ["equiv"]], ["add", "theorem", "arrow_congr'_trans", ["equiv"]], ["add", "def", "of_iff", ["equiv"]]]}, {"oldPath": "src/data/equiv/functor.lean", "newPath": "src/data/equiv/functor.lean", "changes": [["add", "theorem", "map_equiv_refl_refl", ["bifunctor"]], ["add", "theorem", "map_equiv_refl", ["functor"]]]}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/equiv_rw.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": null, "newPath": "test/equiv_rw.lean", "changes": [["add", "def", "map", ["monoid"]], ["add", "def", "map", ["semigroup"]], ["add", "theorem", "map_comp", ["semigroup"]], ["add", "def", "map_equiv", ["semigroup"]], ["add", "theorem", "map_id", ["semigroup"]]]}]}, {"timestamp": 1585654219, "sha": "26690624", "message": "feat(data/monoid_algebra): some lemmas about group rings (#2239)\n* feat(algebra/ring): generalize mul_ite\n* fix proofs\n* going off the deep-end\n* cleaning up\n* much better\n* getting there\n* no new congr lemma\n* oops\n* ...\n* to_additive\n* removing bad simp lemmas again...\n* fix proof\n* fix'\n* oops\n* feat(data/monoid_algebra): some lemmas about group rings\n* Update src/algebra/ring.lean\n* remove unnecessary arguments, thanks linter\n* err.. marking simp again, because I can't remember what goes wrong and need CI to compile for me\n* handing it back to CI for another try\n* fix prod_ite as well\n* cast_ite\n* gross fix for quadratic reciprocity argument\n* remove simp from add_ite, add comment\n* sadness\n* slight improvement\n* remove redundant lemmas", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "prod_comm", ["finsupp"]], ["add", "theorem", "prod_ite_eq'", ["finsupp"]], ["add", "theorem", "prod_ite_eq", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]]]}, {"oldPath": "src/data/monoid_algebra.lean", "newPath": "src/data/monoid_algebra.lean", "changes": [["add", "theorem", "mul_apply", ["monoid_algebra"]], ["add", "theorem", "mul_apply_left", ["monoid_algebra"]], ["add", "theorem", "mul_apply_right", ["monoid_algebra"]], ["add", "theorem", "mul_single_apply", ["monoid_algebra"]], ["add", "theorem", "single_mul_apply", ["monoid_algebra"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1585645823, "sha": "17632202", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585643751, "sha": "85affa45", "message": "refactor(*): migrate more files to bundled `ring_hom`s (#2286)\n* refactor(*): migrate more files to bundled `ring_hom`s\n* Fix lint", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "def", "cast_hom", ["zmod"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["del", "def", "to_module", ["is_ring_hom"]], ["add", "def", "to_module", ["ring_hom"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "to_equiv", ["function", "involutive"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "def", "cast_ring_hom", ["int"]], ["add", "theorem", "coe_cast_ring_hom", ["int"]], ["del", "theorem", "eq_cast'", ["int"]], ["del", "theorem", "map_int_cast", ["is_ring_hom"]], ["add", "theorem", "eq_int_cast'", ["ring_hom"]], ["add", "theorem", "eq_int_cast", ["ring_hom"]], ["mod", "theorem", "map_int_cast", ["ring_hom"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "C_sub", ["mv_polynomial"]], ["add", "theorem", "coe_eval₂_hom", ["mv_polynomial"]], ["mod", "theorem", "eval_sub", ["mv_polynomial"]], ["add", "def", "eval₂_hom", ["mv_polynomial"]], ["mod", "theorem", "eval₂_sub", ["mv_polynomial"]], ["mod", "theorem", "map_sub", ["mv_polynomial"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["del", "theorem", "map_nat_cast", ["is_semiring_hom"]], ["add", "def", "cast_add_monoid_hom", ["nat"]], ["add", "def", "cast_ring_hom", ["nat"]], ["add", "theorem", "coe_cast_add_monoid_hom", ["nat"]], ["add", "theorem", "coe_cast_ring_hom", ["nat"]], ["mod", "theorem", "map_nat_cast", ["ring_hom"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}]}, {"timestamp": 1585633662, "sha": "66f30901", "message": "feat(analysis/analytic): first take on analytic functions (#2199)\n* analytic: first definitions\n* docstrings\n* cleanup\n* Update src/analysis/analytic/basic.lean\nCo-Authored-By: Johan Commelin \n* comment on polydisk of convergence\n* coefficient at 0\n* protect sum\n* rename with_top.dense_coe", "changes": [{"oldPath": null, "newPath": "src/analysis/analytic/basic.lean", "changes": [["add", "theorem", "add", ["analytic_at"]], ["add", "theorem", "continuous_at", ["analytic_at"]], ["add", "theorem", "neg", ["analytic_at"]], ["add", "theorem", "sub", ["analytic_at"]], ["add", "def", "analytic_at", []], ["add", "theorem", "bound_of_lt_radius", ["formal_multilinear_series"]], ["add", "theorem", "continuous_on", ["formal_multilinear_series"]], ["add", "theorem", "geometric_bound_of_lt_radius", ["formal_multilinear_series"]], ["add", "theorem", "has_fpower_series_on_ball", ["formal_multilinear_series"]], ["add", "theorem", "le_radius_of_bound", ["formal_multilinear_series"]], ["add", "theorem", "min_radius_le_radius_add", ["formal_multilinear_series"]], ["add", "def", "partial_sum", ["formal_multilinear_series"]], ["add", "theorem", "partial_sum_continuous", ["formal_multilinear_series"]], ["add", "def", "radius", ["formal_multilinear_series"]], ["add", "theorem", "radius_neg", ["formal_multilinear_series"]], ["add", "theorem", "add", ["has_fpower_series_at"]], ["add", "theorem", "analytic_at", ["has_fpower_series_at"]], ["add", "theorem", "coeff_zero", ["has_fpower_series_at"]], ["add", "theorem", "continuous_at", ["has_fpower_series_at"]], ["add", "theorem", "neg", ["has_fpower_series_at"]], ["add", "theorem", "radius_pos", ["has_fpower_series_at"]], ["add", "theorem", "sub", ["has_fpower_series_at"]], ["add", "def", "has_fpower_series_at", []], ["add", "theorem", "add", ["has_fpower_series_on_ball"]], ["add", "theorem", "analytic_at", ["has_fpower_series_on_ball"]], ["add", "theorem", "coeff_zero", ["has_fpower_series_on_ball"]], ["add", "theorem", "continuous_on", ["has_fpower_series_on_ball"]], ["add", "theorem", "has_fpower_series_at", ["has_fpower_series_on_ball"]], ["add", "theorem", "mono", ["has_fpower_series_on_ball"]], ["add", "theorem", "neg", ["has_fpower_series_on_ball"]], ["add", "theorem", "radius_pos", ["has_fpower_series_on_ball"]], ["add", "theorem", "sub", ["has_fpower_series_on_ball"]], ["add", "theorem", "sum", ["has_fpower_series_on_ball"]], ["add", "theorem", "uniform_limit", ["has_fpower_series_on_ball"]], ["add", "structure", "has_fpower_series_on_ball", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "lt_iff_exists_nnreal_btwn", ["ennreal"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "bdd_above", ["finset"]], ["add", "theorem", "bdd_below", ["finset"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["del", "theorem", "dense_coe", ["with_top"]], ["add", "theorem", "lt_iff_exists_coe_btwn", ["with_top"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1585624436, "sha": "20bff2c7", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585622633, "sha": "4168aba3", "message": "refactor(data/fintype): move data/fintype to data/fintype/basic (#2285)", "changes": [{"oldPath": "docs/theories/sets.md", "newPath": "docs/theories/sets.md", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/W.lean", "newPath": "src/data/W.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype/basic.lean", "changes": []}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": []}, {"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1585613843, "sha": "c5181d11", "message": "feat(*): more `prod`-related (continuous) linear maps and their derivatives (#2277)\n* feat(*): more `prod`-related (continuous) linear maps and their derivatives\n* Make `R` argument of `continuous_linear_equiv.refl` explicit", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fst", ["differentiable"]], ["add", "theorem", "snd", ["differentiable"]], ["add", "theorem", "fst", ["differentiable_at"]], ["add", "theorem", "prod_map", ["differentiable_at"]], ["add", "theorem", "snd", ["differentiable_at"]], ["add", "theorem", "differentiable_at_fst", []], ["add", "theorem", "differentiable_at_snd", []], ["add", "theorem", "differentiable_fst", []], ["add", "theorem", "fst", ["differentiable_on"]], ["add", "theorem", "snd", ["differentiable_on"]], ["add", "theorem", "differentiable_on_fst", []], ["add", "theorem", "differentiable_on_snd", []], ["add", "theorem", "differentiable_snd", []], ["add", "theorem", "fst", ["differentiable_within_at"]], ["add", "theorem", "snd", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_fst", []], ["add", "theorem", "differentiable_within_at_snd", []], ["add", "theorem", "fst", ["fderiv"]], ["add", "theorem", "snd", ["fderiv"]], ["add", "theorem", "fderiv_fst", []], ["add", "theorem", "fderiv_snd", []], ["add", "theorem", "fst", ["fderiv_within"]], ["add", "theorem", "snd", ["fderiv_within"]], ["add", "theorem", "fderiv_within_fst", []], ["add", "theorem", "fderiv_within_snd", []], ["add", "theorem", "fst", ["has_fderiv_at"]], ["add", "theorem", "prod_map", ["has_fderiv_at"]], ["add", "theorem", "snd", ["has_fderiv_at"]], ["add", "theorem", "fst", ["has_fderiv_at_filter"]], ["add", "theorem", "snd", ["has_fderiv_at_filter"]], ["add", "theorem", "has_fderiv_at_filter_fst", []], ["add", "theorem", "has_fderiv_at_filter_snd", []], ["add", "theorem", "has_fderiv_at_fst", []], ["add", "theorem", "has_fderiv_at_snd", []], ["add", "theorem", "fst", ["has_fderiv_within_at"]], ["add", "theorem", "snd", ["has_fderiv_within_at"]], ["add", "theorem", "has_fderiv_within_at_fst", []], ["add", "theorem", "has_fderiv_within_at_snd", []], ["add", "theorem", "fst", ["has_strict_fderiv_at"]], ["add", "theorem", "prod_map", ["has_strict_fderiv_at"]], ["add", "theorem", "snd", ["has_strict_fderiv_at"]], ["add", "theorem", "has_strict_fderiv_at_fst", []], ["add", "theorem", "has_strict_fderiv_at_id", []], ["add", "theorem", "has_strict_fderiv_at_snd", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "coe_prod", ["linear_equiv"]], ["add", "theorem", "skew_prod_apply", ["linear_equiv"]], ["add", "theorem", "skew_prod_symm_apply", ["linear_equiv"]], ["add", "def", "prod_map", ["linear_map"]], ["add", "theorem", "prod_map_apply", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_def_rev", ["continuous_linear_equiv"]], ["add", "theorem", "coe_prod", ["continuous_linear_equiv"]], ["add", "theorem", "coe_refl'", ["continuous_linear_equiv"]], ["add", "theorem", "coe_refl", ["continuous_linear_equiv"]], ["add", "def", "prod", ["continuous_linear_equiv"]], ["add", "theorem", "prod_apply", ["continuous_linear_equiv"]], ["add", "def", "skew_prod", ["continuous_linear_equiv"]], ["add", "theorem", "skew_prod_apply", ["continuous_linear_equiv"]], ["add", "theorem", "skew_prod_symm_apply", ["continuous_linear_equiv"]], ["mod", "theorem", "coe_fst'", ["continuous_linear_map"]], ["mod", "theorem", "coe_fst", ["continuous_linear_map"]], ["add", "theorem", "coe_prod_map", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd'", ["continuous_linear_map"]], ["mod", "theorem", "coe_snd", ["continuous_linear_map"]], ["add", "def", "fst", ["continuous_linear_map"]], ["add", "def", "prod_map", ["continuous_linear_map"]], ["add", "theorem", "prod_map_apply", ["continuous_linear_map"]], ["add", "def", "snd", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "nhds_basis_opens", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod_map", ["continuous"]]]}]}, {"timestamp": 1585601331, "sha": "64f835b5", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585599232, "sha": "8a617238", "message": "fix(algebra/punit_instance): punit.smul_eq is marked simp and can be proved by simp (#2291)", "changes": [{"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": [["mod", "theorem", "smul_eq", ["punit"]]]}]}, {"timestamp": 1585586888, "sha": "3f0e700c", "message": "doc(algebra/group/type_tags): add docs (#2287)\n* doc(algebra/group/type_tags): add docs\n* Update src/algebra/group/type_tags.lean", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}]}, {"timestamp": 1585574193, "sha": "1331e29b", "message": "chore(*): completing most of the -T50000 challenge (#2281)", "changes": [{"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "ne_zero_of_mul_eq_one", ["ring", "fractional_ideal"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}]}, {"timestamp": 1585565211, "sha": "37212a78", "message": "feat(data/fin*): uniqueness of increasing bijection (#2258)\n* feat(data/fin*): uniqueness of increasing bijection\n* protect\n* remove tidy call\n* Update src/data/finset.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/data/finset.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/data/fintype/card.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/data/fintype/card.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/data/fintype/card.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* prove prod_add, and use this to prove sum_pow_mul_eq_add_pow\n* forgot to save\n* fix build\n* remove card_sub_card", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_add", ["finset"]], ["add", "theorem", "sum_pow_mul_eq_add_pow", ["finset"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "disjoint_iff_disjoint_coe", ["finset"]], ["add", "theorem", "mono_of_fin_last", ["finset"]], ["add", "theorem", "mono_of_fin_strict_mono", ["finset"]], ["add", "theorem", "mono_of_fin_unique", ["finset"]], ["add", "theorem", "mono_of_fin_zero", ["finset"]], ["add", "theorem", "range_eq_Ico", ["finset"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "mono_of_fin_unique'", ["finset"]], ["add", "theorem", "coe_image_univ", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "sum_pow_mul_eq_add_pow", ["fin"]], ["add", "theorem", "sum_pow_mul_eq_add_pow", ["fintype"]]]}]}, {"timestamp": 1585555761, "sha": "cd38923e", "message": "docs(algebraic_geometry/prime_spectrum): linkify url in module docs (#2288)", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}]}, {"timestamp": 1585549508, "sha": "9288d10e", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585547458, "sha": "51553e36", "message": "chore(data/set/lattice): use dot syntax for `disjoint.*` (#2282)", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "mono", ["disjoint"]], ["add", "theorem", "mono_left", ["disjoint"]], ["add", "theorem", "mono_right", ["disjoint"]], ["add", "theorem", "ne", ["disjoint"]], ["del", "theorem", "disjoint_mono", []], ["del", "theorem", "disjoint_mono_left", []], ["del", "theorem", "disjoint_mono_right", []], ["del", "theorem", "ne_of_disjoint", []], ["mod", "def", "kern_image", ["set"]], ["add", "theorem", "elim", ["set", "pairwise_disjoint"]], ["add", "theorem", "range", ["set", "pairwise_disjoint"]], ["add", "theorem", "subset", ["set", "pairwise_disjoint"]], ["del", "theorem", "pairwise_disjoint_elim", ["set"]], ["del", "theorem", "pairwise_disjoint_range", ["set"]], ["del", "theorem", "pairwise_disjoint_subset", ["set"]]]}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}]}, {"timestamp": 1585538531, "sha": "cf648606", "message": "chore(*): remove 'using_well_founded wf_tacs', fixed in core (#2280)", "changes": [{"oldPath": "docs/extras/well_founded_recursion.md", "newPath": "docs/extras/well_founded_recursion.md", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/well_founded_tactics.lean", "newPath": null, "changes": []}]}, {"timestamp": 1585529151, "sha": "8c1e32f3", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585527117, "sha": "7dad872f", "message": "feat(ci): try fetching olean caches from older commits (#2278)\n* feat(ci): try fetching older branch oleans\n* docstring edits for set_theory.surreal\n* debug\n* debug 2\n* formatting\n* try fetching\n* just increase depth\n* improve script, improve surreal docstrings\n* env context\n* quieter curl\n* fix overwriting\n* git clean\n* ci test: delete surreal.lean\n* fix env var GIT_HISTORY_DEPTH\n* add back surreal\n* reviewer comments", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/fetch_olean_cache.sh", "newPath": "scripts/fetch_olean_cache.sh", "changes": []}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": [["mod", "theorem", "lt_iff_le_not_le", ["pgame"]]]}]}, {"timestamp": 1585517514, "sha": "c14c84e4", "message": "chore(topology/algebra/ordered): `le_of_tendsto`: use `∀ᶠ`, add primed versions (#2270)\nAlso fix two typos in `order/filter/basic`", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "tendso_add_at_top_nat", ["filter"]], ["del", "theorem", "tendso_sub_at_top_nat", ["filter"]], ["add", "theorem", "tendsto_add_at_top_nat", ["filter"]], ["add", "theorem", "tendsto_sub_at_top_nat", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "ge_of_tendsto'", []], ["add", "theorem", "le_of_tendsto'", []], ["add", "theorem", "le_of_tendsto_of_tendsto'", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}]}, {"timestamp": 1585508606, "sha": "8b679d98", "message": "fix(tactic/squeeze): make suggestion at correct location (#2279)\nFixes #2267.", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1585498964, "sha": "38544f14", "message": "feat(tactic/core): basic interaction monad functions (#1658)\n* feat(tactic/core): basic interaction monad functions\n* review\n* remove get_result\n* update comments\n* whitespace\n* american spelling", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1585489606, "sha": "c4fb4035", "message": "fix(tactic/core): remove all_goals option from apply_any (#2275)\n* fix(tactic/core): remove all_goals option from any_apply\n* remove unnecessary imports", "changes": [{"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1585480767, "sha": "da8b23f9", "message": "chore(data/opposite): two trivial lemmas (#2274)", "changes": [{"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["add", "theorem", "op_eq_iff_eq_unop", ["opposite"]], ["add", "theorem", "unop_eq_iff_eq_op", ["opposite"]]]}]}, {"timestamp": 1585471341, "sha": "79880e86", "message": "chore(data/fintype/intervals): `simp` `Ico_*_card` lemmas (#2271)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card", ["finset", "Ico_ℤ"]]]}, {"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": [["add", "theorem", "Ico_pnat_card", ["set"]], ["add", "theorem", "Ico_ℕ_card", ["set"]], ["add", "theorem", "Ico_ℤ_card", ["set"]]]}, {"oldPath": "src/data/pnat/intervals.lean", "newPath": "src/data/pnat/intervals.lean", "changes": [["add", "theorem", "card", ["pnat", "Ico"]]]}]}, {"timestamp": 1585460813, "sha": "5d9e7f58", "message": "feat(analysis/calculus/fderiv): define `has_strict_fderiv_at` (#2249)\n* Move code aroud\n* general constructions (product, chain rule) before arithmetic;\n* bundled `E →L[𝕜] F` maps before unbundled\n* Use `maps_to` instead of `f '' _ ⊆ _`\n* feat(analysis/calculus/fderiv): define `has_strict_fderiv_at`\nProve strict differentiability of all functions found in this file, cleanup.\n* Update src/analysis/calculus/fderiv.lean\nCo-Authored-By: sgouezel \n* Docs, var name", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["add", "theorem", "mk_sub_mk", ["prod"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_O_fst_prod'", ["asymptotics"]], ["add", "theorem", "is_O_snd_prod'", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "comp_has_strict_fderiv_at_iff", ["continuous_linear_equiv"]], ["del", "theorem", "has_fderiv_at_filter", ["continuous_linear_map"]], ["mod", "theorem", "is_O_sub", ["has_fderiv_at_filter"]], ["del", "theorem", "image_tangent_cone_subset", ["has_fderiv_within_at"]], ["add", "theorem", "maps_to_tangent_cone", ["has_fderiv_within_at"]], ["mod", "theorem", "mul_const", ["has_fderiv_within_at"]], ["add", "theorem", "add", ["has_strict_fderiv_at"]], ["add", "theorem", "add_const", ["has_strict_fderiv_at"]], ["add", "theorem", "comp", ["has_strict_fderiv_at"]], ["add", "theorem", "const_add", ["has_strict_fderiv_at"]], ["add", "theorem", "const_mul", ["has_strict_fderiv_at"]], ["add", "theorem", "const_smul", ["has_strict_fderiv_at"]], ["add", "theorem", "const_sub", ["has_strict_fderiv_at"]], ["add", "theorem", "continuous_at", ["has_strict_fderiv_at"]], ["add", "theorem", "differentiable_at", ["has_strict_fderiv_at"]], ["add", "theorem", "has_fderiv_at", ["has_strict_fderiv_at"]], ["add", "theorem", "is_O_sub", ["has_strict_fderiv_at"]], ["add", "theorem", "mul", ["has_strict_fderiv_at"]], ["add", "theorem", "mul_const", ["has_strict_fderiv_at"]], ["add", "theorem", "neg", ["has_strict_fderiv_at"]], ["add", "theorem", "prod", ["has_strict_fderiv_at"]], ["add", "theorem", "restrict_scalars", ["has_strict_fderiv_at"]], ["add", "theorem", "smul", ["has_strict_fderiv_at"]], ["add", "theorem", "smul_const", ["has_strict_fderiv_at"]], ["add", "theorem", "sub", ["has_strict_fderiv_at"]], ["add", "theorem", "sub_const", ["has_strict_fderiv_at"]], ["add", "def", "has_strict_fderiv_at", []], ["add", "theorem", "has_strict_fderiv_at_congr_of_mem_sets", []], ["add", "theorem", "has_strict_fderiv_at_const", []], ["mod", "theorem", "differentiable_within_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "has_strict_fderiv_at", ["is_bounded_bilinear_map"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_O_comp", ["is_bounded_bilinear_map"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "prod_inl", ["filter", "eventually"]], ["add", "theorem", "prod_inr", ["filter", "eventually"]], ["add", "theorem", "prod_mk", ["filter", "eventually"]], ["add", "theorem", "eventually", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod_map'", ["continuous_at"]], ["add", "theorem", "prod_map", ["continuous_at"]], ["add", "theorem", "continuous_at_fst", []], ["add", "theorem", "continuous_at_snd", []], ["add", "theorem", "prod_inl_nhds", ["filter", "eventually"]], ["add", "theorem", "prod_inr_nhds", ["filter", "eventually"]], ["add", "theorem", "prod_mk_nhds", ["filter", "eventually"]]]}]}, {"timestamp": 1585452243, "sha": "de8c2078", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585450341, "sha": "8454c108", "message": "doc(ring_theory/noetherian): add docstring, normalise notation (#2219)\n* change notation; add module docstring\n* adding reference to A-M\n* Update src/ring_theory/noetherian.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Apply suggestions from code review", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "finite_of_linear_independent", []], ["mod", "theorem", "is_noetherian_of_fg_of_noetherian", []], ["mod", "theorem", "is_noetherian_of_linear_equiv", []], ["mod", "theorem", "is_noetherian_of_quotient_of_noetherian", []], ["mod", "theorem", "is_noetherian_of_submodule_of_noetherian", []], ["mod", "theorem", "is_noetherian_of_surjective", []], ["mod", "theorem", "exists_factors", ["is_noetherian_ring"]], ["mod", "theorem", "exists_irreducible_factor", ["is_noetherian_ring"]], ["mod", "theorem", "irreducible_induction_on", ["is_noetherian_ring"]], ["mod", "theorem", "well_founded_dvd_not_unit", ["is_noetherian_ring"]], ["mod", "def", "is_noetherian_ring", []], ["mod", "theorem", "is_noetherian_span_of_finite", []], ["mod", "theorem", "is_noetherian_submodule", []], ["mod", "theorem", "is_noetherian_submodule_left", []], ["mod", "theorem", "is_noetherian_submodule_right", []], ["mod", "def", "fg", ["submodule"]], ["mod", "theorem", "fg_bot", ["submodule"]], ["mod", "theorem", "fg_def", ["submodule"]], ["mod", "theorem", "fg_map", ["submodule"]], ["mod", "theorem", "fg_of_fg_map_of_fg_inf_ker", ["submodule"]], ["mod", "theorem", "fg_pow", ["submodule"]], ["mod", "theorem", "fg_prod", ["submodule"]], ["mod", "theorem", "fg_sup", ["submodule"]], ["mod", "theorem", "well_founded_submodule_gt", []]]}]}, {"timestamp": 1585440666, "sha": "ecdb1383", "message": "feat(category/equiv_functor): type-level functoriality w.r.t. equiv (#2255)\n* feat(data/equiv/functor): bifunctor.map_equiv\n* start\n* sketch of equiv_functor\n* update\n* removing unimpressive inhabited example; easier later\n* omit\n* revert unnecessary change\n* fix doc-string\n* fix names\n* finish fix", "changes": [{"oldPath": null, "newPath": "src/category/equiv_functor.lean", "changes": [["add", "def", "map_equiv", ["equiv_functor"]], ["add", "theorem", "map_equiv_apply", ["equiv_functor"]], ["add", "theorem", "map_equiv_symm_apply", ["equiv_functor"]]]}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": [["add", "def", "of_equiv_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "theorem", "to_equiv_comp", ["category_theory", "iso"]], ["add", "theorem", "to_equiv_id", ["category_theory", "iso"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "prod_congr", ["equiv"]]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}]}, {"timestamp": 1585430359, "sha": "d500210b", "message": "feat(algebra/big_operators): missing lemmas (#2259)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_le_prod'", ["finset"]], ["add", "theorem", "prod_pow_eq_pow_sum", ["finset"]], ["add", "theorem", "sum_lt_sum_of_subset", ["finset"]]]}]}, {"timestamp": 1585420332, "sha": "ad53e0b7", "message": "feat(tactic/solve_by_elim): add accept parameter to prune tree search (#2245)\n* chore(tactic/solve_by_elim): cleanup\n* cleanup\n* what happened to my commit?\n* fix\n* fix\n* fixed?\n* Tweak comments\n* feat(tactic/solve_by_elim): add accept parameter to prune tree search\n* when called with empty lemmas, use the same default set as the interactive tactic\n* stop cheating with [] ~ none\n* indenting\n* various\n* various\n* docstring\n* fix docstrings\n* more docs\n* docs\n* fix doc-strings\n* improve documentation of accept, and add doc-string\n* improve docs\n* try again with documentation\n* clarify when accept runs\n* Update src/tactic/solve_by_elim.lean\nCo-Authored-By: Rob Lewis \n* Update src/tactic/solve_by_elim.lean\n* Update src/tactic/solve_by_elim.lean", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": [["add", "def", "solve_by_elim_use_b", []]]}]}, {"timestamp": 1585417074, "sha": "0187cb57", "message": "fix(scripts/deploy_docs.sh): cd before git log (#2264)\n* fix(scripts/deploy_docs.sh): cd before git log\n* Update scripts/deploy_docs.sh", "changes": [{"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1585399588, "sha": "17f83409", "message": "chore(data/equiv/basic): simp to_fun to coe (#2256)\n* chore(data/equiv/basic): simp to_fun to coe\n* fix proofs\n* Update src/data/equiv/basic.lean\n* fix proof\n* partially removing to_fun\n* finish switching to coercions", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "inv_fun_as_coe", ["equiv"]], ["add", "theorem", "to_fun_as_coe", ["equiv"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1585375530, "sha": "d470ae77", "message": "fix(tactic/squeeze): do not fail when closing the goal (#2262)", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}]}, {"timestamp": 1585366451, "sha": "67327881", "message": "feat(analysis/normed_space/operator_norm): a few more estimates (#2233)\n* feat(*): a few more theorems about `unique` and `subsingleton`\n* Fix compile, fix two non-terminate `simp`s\n* Update src/topology/metric_space/antilipschitz.lean\nThis lemma will go to another PR\n* feat(analysis/normed_space/operator_norm): a few more estimates\n* `le_op_norm_of_le` : `∥x∥ ≤ c → ∥f x∥ ≤ ∥f∥ * c`;\n* `norm_id` → `norm_id_le`, new `norm_id` assumes `∃ x : E, x ≠ 0`\n* estimates on the norm of `e : E ≃L[𝕜] F`` and `e.symm`.\n* rename `(anti)lipschitz_with.to_inverse` to `to_right_inverse`", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "antilipschitz", ["continuous_linear_equiv"]], ["del", "theorem", "lipschitz", ["continuous_linear_equiv"]], ["add", "theorem", "norm_pos", ["continuous_linear_equiv"]], ["add", "theorem", "norm_symm_pos", ["continuous_linear_equiv"]], ["add", "theorem", "one_le_norm_mul_norm_symm", ["continuous_linear_equiv"]], ["add", "theorem", "subsingleton_or_nnnorm_symm_pos", ["continuous_linear_equiv"]], ["add", "theorem", "subsingleton_or_norm_symm_pos", ["continuous_linear_equiv"]], ["mod", "theorem", "uniform_embedding", ["continuous_linear_equiv"]], ["add", "theorem", "le_op_norm_of_le", ["continuous_linear_map"]], ["mod", "theorem", "norm_id", ["continuous_linear_map"]], ["add", "theorem", "norm_id_le", ["continuous_linear_map"]], ["mod", "theorem", "op_norm_comp_le", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["del", "theorem", "to_inverse", ["antilipschitz_with"]], ["add", "theorem", "to_right_inverse", ["antilipschitz_with"]], ["del", "theorem", "to_inverse", ["lipschitz_with"]], ["add", "theorem", "to_right_inverse", ["lipschitz_with"]]]}]}, {"timestamp": 1585362983, "sha": "1b13ccdf", "message": "chore(scripts/deploy_docs.sh): skip gen_docs if already built (#2263)\n* chore(scripts/deploy_docs.sh): skip gen_docs if already built\n* Update scripts/deploy_docs.sh", "changes": [{"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1585356383, "sha": "211c5d11", "message": "chore(data/int/basic): change instance order (#2257)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1585346938, "sha": "3c0b35c4", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585345071, "sha": "d0a85073", "message": "feat(algebra/ring): generalize mul_ite (#2223)\n* feat(algebra/ring): generalize mul_ite\n* fix proofs\n* going off the deep-end\n* cleaning up\n* much better\n* getting there\n* no new congr lemma\n* oops\n* ...\n* to_additive\n* removing bad simp lemmas again...\n* fix proof\n* fix'\n* oops\n* Update src/algebra/ring.lean\n* err.. marking simp again, because I can't remember what goes wrong and need CI to compile for me\n* handing it back to CI for another try\n* fix prod_ite as well\n* cast_ite\n* gross fix for quadratic reciprocity argument\n* remove simp from add_ite, add comment", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_apply_ite", ["finset"]], ["mod", "theorem", "prod_ite", ["finset"]], ["add", "theorem", "prod_pow_boole", ["finset"]], ["add", "theorem", "sum_boole", ["finset"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "ite_pow", []], ["add", "theorem", "pow_boole", []], ["add", "theorem", "pow_ite", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "boole_mul", []], ["mod", "theorem", "ite_mul", []], ["add", "theorem", "mul_boole", []], ["mod", "theorem", "mul_ite", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/specific_functions.lean", "newPath": "src/analysis/convex/specific_functions.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_ite", ["nat"]]]}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}]}, {"timestamp": 1585334888, "sha": "786c7375", "message": "feat(logic/basic): trivial transport lemmas (#2254)\n* feat(logic/basic): trivial transport lemmas\n* oops", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "eq_mp_rfl", []], ["add", "theorem", "eq_mpr_rfl", []], ["add", "theorem", "eq_rec_constant", []]]}]}, {"timestamp": 1585325297, "sha": "451de279", "message": "chore(tactic/lint): typo (#2253)", "changes": [{"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}]}, {"timestamp": 1585315143, "sha": "21ad1d3a", "message": "chore(tactic/*): update tags (#2224)\n* add missing tactic tags\n* add missing command tags\n* add missing hole command tags\n* add missing attribute tags\n* combine tags 'type class' and 'type classes'\n* combine tags 'logical manipulation' and 'logic'\n* attribute additions and changes\n* more tag updates\n* hypothesis management -> context management\n* remove 'simplification', add more tags\n* classical reasoning -> classical logic\n* substitution -> rewrite\n* normalization -> simplification", "changes": [{"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1585311137, "sha": "d3cbd4d0", "message": "chore(ci): update nolints before docs and leanchecker (#2250)\n* Update build.yml\n* run lint+tests if build step succeeds (see #2250) (#2252)\n* run lint+tests if build succeeds\n* move lint (and nolints.txt) before tests\n* Apply suggestions from code review", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1585241844, "sha": "de39b9a8", "message": "chore(.mergify.yml): cleanup (#2248)\nremove [skip-ci] and pr bits that no longer apply.", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1585256131, "sha": "2fbf0070", "message": "doc(docs/install/project.md): mention that projects are git repositories (#2244)", "changes": [{"oldPath": "docs/install/project.md", "newPath": "docs/install/project.md", "changes": []}]}, {"timestamp": 1585252859, "sha": "75b4ee86", "message": "feat(data/equiv/local_equiv): construct from `bij_on` or `inj_on` (#2232)\n* feat(data/equiv/local_equiv): construct from `bij_on` or `inj_on`\nAlso fix usage of `nonempty` vs `inhabited` in `set/function`. Linter\ndidn't catch these bugs because the types use the `.to_nonempty`\nprojection of the `[inhabited]` arguments.\n* Add `simps`/`simp` attrs", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "inv_on_inv_fun_on", ["set", "bij_on"]], ["mod", "theorem", "inv_fun_on_image", ["set", "inj_on"]], ["mod", "theorem", "left_inv_on_inv_fun_on", ["set", "inj_on"]], ["mod", "theorem", "bij_on_subset", ["set", "surj_on"]], ["mod", "theorem", "inv_on_inv_fun_on", ["set", "surj_on"]], ["mod", "theorem", "maps_to_inv_fun_on", ["set", "surj_on"]], ["mod", "theorem", "right_inv_on_inv_fun_on", ["set", "surj_on"]]]}]}, {"timestamp": 1585243838, "sha": "8943351e", "message": "feat(topology/algebra/module): define `fst` and `snd`, review (#2247)\n* feat(topology/algebra/module): define `fst` and `snd`, review\n* Fix compile", "changes": [{"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "bijective", ["continuous_linear_equiv"]], ["add", "theorem", "injective", ["continuous_linear_equiv"]], ["add", "theorem", "surjective", ["continuous_linear_equiv"]], ["add", "theorem", "coe_fst'", ["continuous_linear_map"]], ["add", "theorem", "coe_fst", ["continuous_linear_map"]], ["add", "theorem", "coe_prod", ["continuous_linear_map"]], ["add", "theorem", "coe_snd'", ["continuous_linear_map"]], ["add", "theorem", "coe_snd", ["continuous_linear_map"]], ["del", "def", "prod", ["continuous_linear_map"]], ["add", "theorem", "prod_apply", ["continuous_linear_map"]], ["del", "def", "zero", ["continuous_linear_map"]]]}]}, {"timestamp": 1585233701, "sha": "5b443634", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585229886, "sha": "0fc4e6a8", "message": "refactor(data/set/function): move `function.restrict` to `set`, redefine (#2243)\n* refactor(data/set/function): move `function.restrict` to `set`, redefine\nWe had `subtype.restrict` and `function.restrict` both defined in the\nsame way using `subtype.val`. This PR moves `function.restrict` to\n`set.restrict` and makes it use `coe` instead of `subtype.val`.\n* Fix compile\n* Update src/data/set/function.lean", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "preimage_coe_eq_preimage_coe_iff", ["set"]], ["del", "theorem", "val_range", ["set", "subtype"]], ["mod", "theorem", "val_range", ["subtype"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "def", "cod_restrict", ["set"]], ["add", "theorem", "coe_cod_restrict_apply", ["set"]], ["mod", "theorem", "range_restrict", ["set"]], ["add", "def", "restrict", ["set"]], ["add", "theorem", "restrict_apply", ["set"]], ["add", "theorem", "restrict_eq", ["set"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "theorem", "val_eq_coe", ["subtype"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["del", "def", "restrict", ["function"]], ["del", "theorem", "restrict_eq", ["function"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "cod_restrict", ["antilipschitz_with"]], ["del", "theorem", "id", ["antilipschitz_with"]], ["add", "theorem", "restrict", ["antilipschitz_with"]], ["add", "theorem", "subtype_coe", ["antilipschitz_with"]], ["add", "theorem", "to_right_inv_on'", ["antilipschitz_with"]], ["add", "theorem", "to_right_inv_on", ["antilipschitz_with"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "dist_eq", ["subtype"]]]}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "edist_eq", ["subtype"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1585220448, "sha": "fa36a8ef", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585217136, "sha": "ea10e173", "message": "feat(data/equiv/functor): bifunctor.map_equiv (#2241)\n* feat(data/equiv/functor): bifunctor.map_equiv\n* add documentation, and make the function an explicit argument\n* Update src/data/equiv/functor.lean", "changes": [{"oldPath": "src/data/equiv/functor.lean", "newPath": "src/data/equiv/functor.lean", "changes": [["add", "def", "map_equiv", ["bifunctor"]], ["add", "theorem", "map_equiv_apply", ["bifunctor"]], ["add", "theorem", "map_equiv_symm_apply", ["bifunctor"]], ["mod", "def", "map_equiv", ["functor"]], ["add", "theorem", "map_equiv_apply", ["functor"]], ["add", "theorem", "map_equiv_symm_apply", ["functor"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}]}, {"timestamp": 1585208923, "sha": "ab33237d", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585205797, "sha": "dbc4284c", "message": "feat(tactic/squeeze): improve suggestion of `cases x; squeeze_simp` (#2218)\n* feat(tactic/squeeze): improve produced argument list and format\n* feat(tactic/squeeze): combine suggestions of repeated executions\n* add documentation\n* remove dead code\n* suggestion from reviewers\n* Apply suggestions from code review\nCo-Authored-By: Gabriel Ebner \n* Update squeeze.lean\n* Apply suggestions from code review\nCo-Authored-By: Bryan Gin-ge Chen \n* simplify and remove comparison of proof terms\n* simplify goal comparison data structure\n* add documentation and fix meta-variable handling\n* add example\n* fix tests\n* move tests\n* use binders with trivial names to abstract meta variables", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": [["add", "def", "squeeze_loc_attr_carrier", ["tactic"]]]}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}, {"oldPath": null, "newPath": "test/packaged_goal.lean", "changes": []}]}, {"timestamp": 1585196405, "sha": "30146a02", "message": "chore(tactic/solve_by_elim): refactor (#2222)\n* chore(tactic/solve_by_elim): cleanup\n* cleanup\n* what happened to my commit?\n* fix\n* fix\n* fixed?\n* Tweak comments\n* when called with empty lemmas, use the same default set as the interactive tactic\n* stop cheating with [] ~ none\n* indenting\n* docstring\n* fix docstrings", "changes": [{"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1585186004, "sha": "2755eaea", "message": "chore(ci): only run on push (#2237)\n* chore(ci): only run on push\n* update contribution docs", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}]}, {"timestamp": 1585182773, "sha": "6e6c81a4", "message": "feat(algebra/homology): chain complexes (#2174)\n* thoughts on chain complexes\n* minor\n* feat(category_theory): split epis and monos, and a result about (co)projections\n* total functor faithful\n* homology!\n* remove lint\n* something something homology\n* comment out broken stuff\n* adding comments\n* various\n* rewrite\n* fixes\n* Update src/category_theory/epi_mono.lean\n* Update src/category_theory/epi_mono.lean\n* Update src/category_theory/epi_mono.lean\n* better use of ext\n* feat(category_theory): subsingleton (has_zero_morphisms)\n* revert some independent changes moved to #2180\n* revert some independent changes moved to #2181\n* revert independent changes moved to #2182\n* fix\n* Apply suggestions from code review\nCo-Authored-By: Johan Commelin \n* changes from review\n* module docs\n* various\n* Update src/category_theory/shift.lean\nCo-Authored-By: Kevin Buzzard \n* various\n* various fixes\n* fix\n* all the minor suggestions\nCo-Authored-By: Markus Himmel \n* ugh... fix reverting stuff from #2180\n* off by one\n* various\n* use abbreviation\n* chain as well as cochain\n* satisfy the linter\n* some simp lemmas\n* simp lemmas", "changes": [{"oldPath": null, "newPath": "src/algebra/homology/chain_complex.lean", "changes": [["add", "theorem", "comm", ["chain_complex"]], ["add", "theorem", "comm_at", ["chain_complex"]], ["add", "theorem", "d_squared", ["chain_complex"]], ["add", "def", "forget", ["chain_complex"]], ["add", "def", "chain_complex", []], ["add", "theorem", "comm", ["cochain_complex"]], ["add", "theorem", "comm_at", ["cochain_complex"]], ["add", "theorem", "d_squared", ["cochain_complex"]], ["add", "def", "forget", ["cochain_complex"]], ["add", "def", "cochain_complex", []]]}, {"oldPath": null, "newPath": "src/algebra/homology/homology.lean", "changes": [["add", "def", "cohomology", ["cochain_complex"]], ["add", "def", "image_to_kernel_map", ["cochain_complex"]], ["add", "def", "induced_map_on_cycles", ["cochain_complex"]]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/differential_object.lean", "changes": [["add", "theorem", "comp_f", ["category_theory", "differential_object"]], ["add", "def", "forget", ["category_theory", "differential_object"]], ["add", "def", "comp", ["category_theory", "differential_object", "hom"]], ["add", "def", "id", ["category_theory", "differential_object", "hom"]], ["add", "structure", "hom", ["category_theory", "differential_object"]], ["add", "theorem", "id_f", ["category_theory", "differential_object"]], ["add", "structure", "differential_object", ["category_theory"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "def", "pow", ["category_theory", "equivalence"]], ["add", "theorem", "pow_minus_one", ["category_theory", "equivalence"]], ["add", "theorem", "pow_one", ["category_theory", "equivalence"]], ["add", "theorem", "pow_zero", ["category_theory", "equivalence"]]]}, {"oldPath": null, "newPath": "src/category_theory/graded_object.lean", "changes": [["add", "def", "comap", ["category_theory", "graded_object"]], ["add", "def", "comap_comp", ["category_theory", "graded_object"]], ["add", "def", "comap_eq", ["category_theory", "graded_object"]], ["add", "theorem", "comap_eq_symm", ["category_theory", "graded_object"]], ["add", "theorem", "comap_eq_trans", ["category_theory", "graded_object"]], ["add", "def", "comap_equiv", ["category_theory", "graded_object"]], ["add", "def", "comap_id", ["category_theory", "graded_object"]], ["add", "theorem", "comp_apply", ["category_theory", "graded_object"]], ["add", "theorem", "id_apply", ["category_theory", "graded_object"]], ["add", "def", "total", ["category_theory", "graded_object"]], ["add", "def", "graded_object", ["category_theory"]], ["add", "def", "graded_object_with_shift", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/shift.lean", "changes": [["add", "def", "shift", ["category_theory"]], ["add", "theorem", "shift_zero_eq_zero", ["category_theory"]]]}]}, {"timestamp": 1585173395, "sha": "e04892ec", "message": "feat(topology/metric_space/isometry): add_left/right, neg (#2234)\nAlso add some lemmas from `equiv` namespace to `isometric`.", "changes": [{"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "apply_symm_apply", ["isometric"]], ["add", "theorem", "eq_symm_apply", ["isometric"]], ["add", "theorem", "ext", ["isometric"]], ["add", "theorem", "symm_apply_apply", ["isometric"]], ["add", "theorem", "symm_apply_eq", ["isometric"]], ["add", "theorem", "trans_apply", ["isometric"]]]}]}, {"timestamp": 1585163884, "sha": "bb01537b", "message": "feat(topology/local_homeomorph): a few facts about `local_homeomorph` (#2231)\n* `eventually_inv_right`, `eventually_inv_left`\n* `is_O_congr`, `is_o_congr`", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "is_O_congr", ["homeomorph"]], ["add", "theorem", "is_O_with_congr", ["homeomorph"]], ["add", "theorem", "is_o_congr", ["homeomorph"]], ["add", "theorem", "is_O_congr", ["local_homeomorph"]], ["add", "theorem", "is_O_with_congr", ["local_homeomorph"]], ["add", "theorem", "is_o_congr", ["local_homeomorph"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "eventually_left_inverse'", ["local_homeomorph"]], ["add", "theorem", "eventually_left_inverse", ["local_homeomorph"]], ["add", "theorem", "eventually_right_inverse'", ["local_homeomorph"]], ["add", "theorem", "eventually_right_inverse", ["local_homeomorph"]]]}]}, {"timestamp": 1585154090, "sha": "05aa9556", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1585151061, "sha": "bedb810b", "message": "feat(*): a few more theorems about `unique` and `subsingleton` (#2230)\n* feat(*): a few more theorems about `unique` and `subsingleton`\n* Fix compile, fix two non-terminate `simp`s\n* Update src/topology/metric_space/antilipschitz.lean\nThis lemma will go to another PR", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "subsingleton_univ", ["set"]], ["add", "theorem", "eq_univ_of_nonempty", ["subsingleton"]], ["add", "theorem", "set_cases", ["subsingleton"]]]}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "comap_subsingleton", ["function", "injective"]], ["add", "def", "unique", ["function", "surjective"]], ["add", "theorem", "nonempty_unique_or_exists_ne", []], ["add", "theorem", "subsingleton_or_exists_ne", []], ["del", "def", "of_surjective", ["unique"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "is_closed", ["subsingleton"]], ["add", "theorem", "is_open", ["subsingleton"]]]}, {"oldPath": "src/topology/metric_space/antilipschitz.lean", "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "of_subsingleton", ["antilipschitz_with"]]]}]}, {"timestamp": 1585141893, "sha": "1eae0be1", "message": "feat(data/equiv): pi_congr (#2204)\n* feat(data/equiv): pi_congr\n* docstrings\n* change case for consistency\n* tidying up\n* switching names\n* fixes\n* Update src/data/equiv/basic.lean\n* implicit arguments", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "Pi_congr", ["equiv"]], ["add", "def", "Pi_congr_left'", ["equiv"]], ["add", "theorem", "Pi_congr_left'_apply", ["equiv"]], ["add", "theorem", "Pi_congr_left'_symm_apply", ["equiv"]], ["add", "def", "Pi_congr_left", ["equiv"]]]}]}, {"timestamp": 1585132242, "sha": "83014bf7", "message": "chore(README): add Bryan; alphabetize (#2238)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1585105856, "sha": "d9083bcb", "message": "chore(algebra/ordered_field): merge `inv_pos` / `zero_lt_inv` with `inv_pos'` / `inv_neg` (#2226)\n* chore(algebra/ordered_field): merge `inv_pos` / `zero_lt_inv` with `inv_pos'` / `inv_neg`\nAlso move some lemmas to `linear_ordered_field`\n* Update src/data/real/hyperreal.lean\n* Fix compile\n* Actually fix compile of `data/real/hyperreal`", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["mod", "theorem", "inv_lt_zero", []], ["del", "theorem", "inv_neg'", []], ["del", "theorem", "inv_pos'", []], ["mod", "theorem", "inv_pos", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/cone.lean", "newPath": "src/analysis/convex/cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "omega_pos", ["hyperreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1585097621, "sha": "24b82c91", "message": "feat(tactic/core): trace_if_enabled (#2209)\n* feat(tactic/core): trace_for\n* typo\n* oops\n* oops\n* rename to trace_if_enabled\n* trace_state_if_enabled", "changes": [{"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}]}, {"timestamp": 1585087673, "sha": "efdc8504", "message": "feat(tactic/conv/apply_congr): using congruence lemmas inside conv (#2221)\n* Update interactive.lean\nAdded Keeley Hoeks Zoom tactic.\n* Add files via upload\nAdded operand.lean file to the tactic folder.\n* Add files via upload\nAdded the test files for zoom and operand.\n* Rename operand_test.lean to operand.lean\n* Update and rename zoom_test.lean to zoom.lean\nFixed the imports\n* Update operand.lean\n* Update tactics.md\n* Update operand.lean\nFixed the lamda problem.\n* Update operand.lean\nAdded tests without lamdas\n* Update operand.lean\nAdded header\n* Update operand.lean\nAdded header\n* Update operand.lean\ndeleted zoom\n* Update zoom.lean\nAdded comment to self\n* Update operand.lean\nAdded doc_string to operand\n* Update interactive.lean\nAdded doc_string to zoom\n* Update tactics.md\nFixed colon and brackets in operand doc\n* Update operand.lean\nFixed colon placements and brackets\n* merge\n* feat(tactic/converter/apply_congr): apply congruence lemmas in conv\n* last example\n* fix docs\n* Apply suggestions from code review\nCo-Authored-By: Bryan Gin-ge Chen \n* remove docs from tactics.md\n* merge doc comment fragments\n* import in tactic.basic\n* docs\n* add to conv doc tactic", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/converter/apply_congr.lean", "changes": []}, {"oldPath": "src/tactic/converter/interactive.lean", "newPath": "src/tactic/converter/interactive.lean", "changes": []}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": []}, {"oldPath": null, "newPath": "test/conv/apply_congr.lean", "changes": []}]}, {"timestamp": 1585075860, "sha": "5437b10a", "message": "feat(tactic/show_term): show_term { t } prints the term constructed by t (#2227)\n* feat(tactic): show_term { t } prints the term constructed by t\n* add to tactic.basic\n* move tests\n* silencing\n* Update src/tactic/show_term.lean\nCo-Authored-By: Gabriel Ebner \n* clean up\n* remove tests\n* Update src/tactic/show_term.lean\nCo-Authored-By: Gabriel Ebner ", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/show_term.lean", "changes": []}]}, {"timestamp": 1585065694, "sha": "5f376b26", "message": "feat(data/equiv): sigma_congr (#2205)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "sigma_congr", ["equiv"]], ["add", "def", "sigma_congr_left'", ["equiv"]]]}]}, {"timestamp": 1585053099, "sha": "bb6e1d4f", "message": "chore(README,docs/*): replace tactic doc files with links to mathlib docs (#2225)\n* chore(README,doc/*): replace tactic doc files with links to mathlib docs\nOther cleanup:\n- replaced leanprover/lean and leanprover/mathlib with\n leanprover-community/lean and leanprover-community/mathlib\n- updated pull request template and instructions for contributors with\n info about tactic doc entries\n- formatting / style for simp.md and tactic_writing.md\n- fixed broken link in category_theory.category.default\n* reword contributor suggestion for tactic tests\n* reviewer comments", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "archive/README.md", "newPath": "archive/README.md", "changes": []}, {"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "docs/extras/calc.md", "newPath": "docs/extras/calc.md", "changes": []}, {"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}, {"oldPath": "docs/extras/simp.md", "newPath": "docs/extras/simp.md", "changes": []}, {"oldPath": "docs/extras/tactic_writing.md", "newPath": "docs/extras/tactic_writing.md", "changes": []}, {"oldPath": "docs/extras/well_founded_recursion.md", "newPath": "docs/extras/well_founded_recursion.md", "changes": []}, {"oldPath": "docs/holes.md", "newPath": "docs/holes.md", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}]}, {"timestamp": 1585043212, "sha": "b5044302", "message": "feat(linear_algebra): add range_le_ker_iff (#2229)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "range_le_ker_iff", ["linear_map"]]]}]}, {"timestamp": 1584987799, "sha": "6a7e55e4", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584984632, "sha": "9a9794d7", "message": "doc(data/int/gcd): attribution + module doc (#2217)\n* doc(data/int/gcd): attribution + module doc\n* reword", "changes": [{"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["mod", "theorem", "gcd_eq_gcd_ab", ["nat"]], ["mod", "theorem", "xgcd_aux_P", ["nat"]], ["mod", "theorem", "xgcd_aux_rec", ["nat"]]]}]}, {"timestamp": 1584975454, "sha": "9832fba5", "message": "refactor(topology/metric_space/contracting): redefine using emetric (#2070)\n* refactor(topology/metric_space/contracting): redefine using emetric\n* Fix a typo produced by \"copy+paste\"\n* Fix compile\n* Refactor `efixed_point`, `efixed_point'`\n* Prove a version of Banach fixed point theorem for a map contracting\n on a complete forward-invariant set.\n* Separately prove \"primed\" lemmas.\nI Tried to define `efixed_point'` in terms of `efixed_point` and\nfailed: every time I use it, it generates a goal `complete_space ↥s`.\nSo, I decided to deduce `exists_fixed_point'` from\n`exists_fixed_point`, then use it in the proofs.", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "coe_restrict_apply", ["set", "maps_to"]], ["add", "theorem", "iterate", ["set", "maps_to"]], ["add", "theorem", "iterate_restrict", ["set", "maps_to"]], ["add", "def", "restrict", ["set", "maps_to"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "val_eq_coe", ["subtype"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_subtype_coe", []]]}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["add", "theorem", "apriori_edist_iterate_efixed_point_le'", ["contracting_with"]], ["add", "theorem", "apriori_edist_iterate_efixed_point_le", ["contracting_with"]], ["mod", "theorem", "dist_fixed_point_le", ["contracting_with"]], ["add", "theorem", "edist_efixed_point_le'", ["contracting_with"]], ["add", "theorem", "edist_efixed_point_le", ["contracting_with"]], ["add", "theorem", "edist_efixed_point_lt_top'", ["contracting_with"]], ["add", "theorem", "edist_efixed_point_lt_top", ["contracting_with"]], ["add", "theorem", "edist_inequality", ["contracting_with"]], ["add", "theorem", "edist_le_of_fixed_point", ["contracting_with"]], ["add", "theorem", "efixed_point_eq_of_edist_lt_top'", ["contracting_with"]], ["add", "theorem", "efixed_point_eq_of_edist_lt_top", ["contracting_with"]], ["add", "theorem", "efixed_point_is_fixed'", ["contracting_with"]], ["add", "theorem", "efixed_point_is_fixed", ["contracting_with"]], ["add", "theorem", "efixed_point_mem'", ["contracting_with"]], ["add", "theorem", "eq_or_edist_eq_top_of_fixed_points", ["contracting_with"]], ["add", "theorem", "exists_fixed_point'", ["contracting_with"]], ["mod", "theorem", "exists_fixed_point", ["contracting_with"]], ["add", "def", "fixed_point", ["contracting_with"]], ["mod", "theorem", "fixed_point_is_fixed", ["contracting_with"]], ["mod", "theorem", "fixed_point_unique", ["contracting_with"]], ["add", "theorem", "one_sub_K_ne_top", ["contracting_with"]], ["add", "theorem", "one_sub_K_ne_zero", ["contracting_with"]], ["add", "theorem", "one_sub_K_pos'", ["contracting_with"]], ["mod", "theorem", "one_sub_K_pos", ["contracting_with"]], ["add", "theorem", "restrict", ["contracting_with"]], ["add", "theorem", "tendsto_iterate_efixed_point'", ["contracting_with"]], ["add", "theorem", "tendsto_iterate_efixed_point", ["contracting_with"]], ["add", "theorem", "tendsto_iterate_fixed_point", ["contracting_with"]], ["mod", "theorem", "to_lipschitz_with", ["contracting_with"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "def", "edist_lt_top_setoid", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "edist_lt_top", ["lipschitz_with"]]]}]}, {"timestamp": 1584966353, "sha": "25df50e6", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584962508, "sha": "5b2c9521", "message": "feat(analysis/convex.cone): prove M. Riesz extension theorem, Hahn-Banach theorem (#2120)\n* feat(analysis/convex.cone): prove M. Riesz extension theorem\nWIP\n* Complete the proof\nTODO: move many facts to `linear_algebra/basic`,\nfix possible build failures in other files\n* Fix compile of `analysis/convex/cone`\n* Cleanup, rewrite using `linear_pmap`s\n* Deduce Hahn-Banach theorem from M. Riesz extension theorem\n* Fix lint\n* Apply suggestions from code review [skip_ci]\nCo-Authored-By: sgouezel \n* Expand comments, prove properties of `convex.to_cone`.\n* Docstrings\n* Apply suggestions from code review\nCo-Authored-By: sgouezel \n* Update src/analysis/convex/cone.lean\n* Update src/linear_algebra/basic.lean", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "smul_eq_zero", []], ["add", "theorem", "coe_mk", ["submodule"]], ["mod", "theorem", "coe_sub", ["submodule"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "convex_iff_forall_pos", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/cone.lean", "changes": [["add", "theorem", "mem_to_cone'", ["convex"]], ["add", "theorem", "mem_to_cone", ["convex"]], ["add", "theorem", "subset_to_cone", ["convex"]], ["add", "def", "to_cone", ["convex"]], ["add", "theorem", "to_cone_eq_Inf", ["convex"]], ["add", "theorem", "to_cone_is_least", ["convex"]], ["add", "theorem", "add_mem", ["convex_cone"]], ["add", "theorem", "coe_inf", ["convex_cone"]], ["add", "def", "comap", ["convex_cone"]], ["add", "theorem", "comap_comap", ["convex_cone"]], ["add", "theorem", "comap_id", ["convex_cone"]], ["add", "theorem", "convex", ["convex_cone"]], ["add", "theorem", "ext'", ["convex_cone"]], ["add", "theorem", "ext", ["convex_cone"]], ["add", "def", "map", ["convex_cone"]], ["add", "theorem", "map_id", ["convex_cone"]], ["add", "theorem", "map_map", ["convex_cone"]], ["add", "theorem", "mem_Inf", ["convex_cone"]], ["add", "theorem", "mem_bot", ["convex_cone"]], ["add", "theorem", "mem_coe", ["convex_cone"]], ["add", "theorem", "mem_comap", ["convex_cone"]], ["add", "theorem", "mem_inf", ["convex_cone"]], ["add", "theorem", "mem_mk", ["convex_cone"]], ["add", "theorem", "mem_top", ["convex_cone"]], ["add", "theorem", "smul_mem", ["convex_cone"]], ["add", "theorem", "smul_mem_iff", ["convex_cone"]], ["add", "structure", "convex_cone", []], ["add", "theorem", "convex_hull_to_cone_eq_Inf", []], ["add", "theorem", "convex_hull_to_cone_is_least", []], ["add", "theorem", "exists_extension_of_le_sublinear", []], ["add", "theorem", "exists_top", ["riesz_extension"]], ["add", "theorem", "step", ["riesz_extension"]], ["add", "theorem", "riesz_extension", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/hahn_banach.lean", "changes": [["add", "theorem", "exists_extension_norm_eq", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "bex_image_iff", ["set"]], ["add", "theorem", "exists'", ["set_coe"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "prod_apply", ["linear_equiv"]], ["add", "theorem", "prod_symm", ["linear_equiv"]], ["add", "theorem", "refl_apply", ["linear_equiv"]], ["add", "theorem", "coe_of_le", ["submodule"]], ["add", "theorem", "disjoint_span_singleton", ["submodule"]], ["mod", "theorem", "of_le_apply", ["submodule"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/linear_pmap.lean", "changes": [["add", "def", "comp_pmap", ["linear_map"]], ["add", "theorem", "comp_pmap_apply", ["linear_map"]], ["add", "def", "to_pmap", ["linear_map"]], ["add", "theorem", "to_pmap_apply", ["linear_map"]], ["add", "def", "cod_restrict", ["linear_pmap"]], ["add", "def", "comp", ["linear_pmap"]], ["add", "def", "coprod", ["linear_pmap"]], ["add", "theorem", "coprod_apply", ["linear_pmap"]], ["add", "theorem", "domain_mk_span_singleton", ["linear_pmap"]], ["add", "theorem", "domain_mono", ["linear_pmap"]], ["add", "theorem", "domain_sup", ["linear_pmap"]], ["add", "def", "eq_locus", ["linear_pmap"]], ["add", "theorem", "eq_of_le_of_domain_eq", ["linear_pmap"]], ["add", "theorem", "fst_apply", ["linear_pmap"]], ["add", "theorem", "le_of_eq_locus_ge", ["linear_pmap"]], ["add", "theorem", "map_add", ["linear_pmap"]], ["add", "theorem", "map_neg", ["linear_pmap"]], ["add", "theorem", "map_smul", ["linear_pmap"]], ["add", "theorem", "map_sub", ["linear_pmap"]], ["add", "theorem", "map_zero", ["linear_pmap"]], ["add", "theorem", "mk_apply", ["linear_pmap"]], ["add", "theorem", "mk_span_singleton_apply", ["linear_pmap"]], ["add", "theorem", "neg_apply", ["linear_pmap"]], ["add", "theorem", "snd_apply", ["linear_pmap"]], ["add", "theorem", "sup_apply", ["linear_pmap"]], ["add", "theorem", "sup_h_of_disjoint", ["linear_pmap"]], ["add", "theorem", "to_fun_eq_coe", ["linear_pmap"]], ["add", "structure", "linear_pmap", []], ["add", "theorem", "coe_prop", ["subtype"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "mono", ["directed"]], ["del", "theorem", "directed_mono", []], ["add", "theorem", "mono", ["directed_on"]], ["add", "theorem", "directed_on_image", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "exists_between_of_forall_le", []]]}]}, {"timestamp": 1584937647, "sha": "d3d78a98", "message": "chore(ring_theory/algebra): generalize restrict_scalars to noncommutative algebras (#2216)", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1584928436, "sha": "fe40a15a", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584925538, "sha": "6aa5572e", "message": "feat(algebra/module): `f : E →+ F` is `ℚ`-linear (#2215)\n* feat(algebra/module): `f : E →+ F` is `ℚ`-linear\nAlso cleanup similar lemmas about `ℕ` and `ℤ`.\n* Fix a typo", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "theorem", "directed_system", ["add_comm_group", "direct_limit"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "map_int_cast_smul", ["add_monoid_hom"]], ["add", "theorem", "map_nat_cast_smul", ["add_monoid_hom"]], ["add", "theorem", "map_rat_cast_smul", ["add_monoid_hom"]], ["add", "theorem", "map_rat_module_smul", ["add_monoid_hom"]], ["del", "theorem", "map_smul_cast", ["add_monoid_hom"]], ["add", "def", "to_int_linear_map", ["add_monoid_hom"]], ["add", "def", "to_rat_linear_map", ["add_monoid_hom"]], ["del", "def", "to_linear_map", ["is_add_group_hom"]], ["del", "theorem", "add_monoid_smul_eq_smul", ["module"]], ["mod", "theorem", "gsmul_eq_smul_cast", ["module"]], ["del", "theorem", "smul_eq_smul", ["module"]], ["add", "theorem", "add_monoid_smul_eq_smul", ["semimodule"]], ["add", "theorem", "smul_eq_smul", ["semimodule"]]]}]}, {"timestamp": 1584915026, "sha": "b9ee94d8", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584911730, "sha": "7f103fd3", "message": "fix(tactic/transport): make `to_additive` copy `protected`status (#2212)\n* fix(tactic/transport): make `to_additive` copy `protected`status\nFixes #2210, also slightly cleanup `algebra/group/units`\n* Fix compile (protected `finset.sum`)\n* Fix usage of `finset.sum`\n* Update src/tactic/transport.lean\nCo-Authored-By: Gabriel Ebner \n* fix build", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["del", "theorem", "add_units_eq_one", ["nat"]], ["add", "theorem", "add_units_eq_zero", ["nat"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1584896465, "sha": "6febc8c0", "message": "feat(tactic/doc_commands): allow doc strings on add_tactic_doc (#2201)\n* feat(tactic/doc_commands): allow doc strings on add_tactic_doc\n* Add link to Lean issue.\n* Update src/tactic/doc_commands.lean\nCo-Authored-By: Rob Lewis \n* Change all `description :=` to docstrings.\n* Change suggested by Bryan.\n* Use docstrings in library_note\n* Factor out `tactic.eval_pexpr`.\n* Add add_decl_doc command.\n* Update docs/contribute/doc.md\n* Update src/tactic/doc_commands.lean\n* Update src/tactic/doc_commands.lean\nCo-Authored-By: Bryan Gin-ge Chen ", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": [["del", "def", "my_id", ["tactic", "interactive"]]]}, {"oldPath": "src/tactic/doc_commands.lean", "newPath": "src/tactic/doc_commands.lean", "changes": [["add", "def", "f", []]]}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/fix_reflect_string.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["del", "def", "a", ["tactic", "interactive"]], ["del", "def", "normed_a", ["tactic", "interactive"]]]}, {"oldPath": null, "newPath": "test/doc_commands.lean", "changes": [["add", "def", "foo", ["bar"]]]}]}, {"timestamp": 1584885354, "sha": "4e46b306", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584882397, "sha": "7d02c231", "message": "chore(linear_algebra/*): rename copair, pair to coprod, prod (#2213)\n* chore(linear_algebra/*): rename copair, pair to coprod, prod\n* add back mistakenly deleted lemma\n* fix sensitivity, change comments to module docs\n* docstrings, linting\n* Update archive/sensitivity.lean", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "symm_symm_apply", ["linear_equiv"]], ["mod", "theorem", "trans_apply", ["linear_equiv"]], ["mod", "theorem", "comap_le_comap_iff", ["linear_map"]], ["del", "theorem", "comap_pair_prod", ["linear_map"]], ["add", "theorem", "comap_prod_prod", ["linear_map"]], ["del", "def", "copair", ["linear_map"]], ["del", "theorem", "copair_apply", ["linear_map"]], ["del", "theorem", "copair_inl", ["linear_map"]], ["del", "theorem", "copair_inl_inr", ["linear_map"]], ["del", "theorem", "copair_inr", ["linear_map"]], ["add", "def", "coprod", ["linear_map"]], ["add", "theorem", "coprod_apply", ["linear_map"]], ["add", "theorem", "coprod_inl", ["linear_map"]], ["add", "theorem", "coprod_inl_inr", ["linear_map"]], ["add", "theorem", "coprod_inr", ["linear_map"]], ["del", "theorem", "fst_eq_copair", ["linear_map"]], ["add", "theorem", "fst_eq_coprod", ["linear_map"]], ["del", "theorem", "fst_pair", ["linear_map"]], ["add", "theorem", "fst_prod", ["linear_map"]], ["del", "theorem", "inl_eq_pair", ["linear_map"]], ["add", "theorem", "inl_eq_prod", ["linear_map"]], ["del", "theorem", "inr_eq_pair", ["linear_map"]], ["add", "theorem", "inr_eq_prod", ["linear_map"]], ["mod", "theorem", "is_linear_map_prod_iso", ["linear_map"]], ["del", "theorem", "ker_pair", ["linear_map"]], ["add", "theorem", "ker_prod", ["linear_map"]], ["del", "theorem", "map_copair_prod", ["linear_map"]], ["add", "theorem", "map_coprod_prod", ["linear_map"]], ["del", "def", "pair", ["linear_map"]], ["del", "theorem", "pair_apply", ["linear_map"]], ["mod", "theorem", "pair_fst_snd", ["linear_map"]], ["mod", "def", "prod", ["linear_map"]], ["add", "theorem", "prod_apply", ["linear_map"]], ["del", "theorem", "snd_eq_copair", ["linear_map"]], ["add", "theorem", "snd_eq_coprod", ["linear_map"]], ["del", "theorem", "snd_pair", ["linear_map"]], ["add", "theorem", "snd_prod", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "constr_smul", []], ["mod", "theorem", "is_basis_empty_bot", []], ["mod", "theorem", "image_subtype", ["linear_independent"]], ["mod", "theorem", "total_comp_repr", ["linear_independent"]], ["mod", "def", "total_equiv", ["linear_independent"]], ["mod", "theorem", "linear_independent_iff_not_mem_span", []], ["mod", "theorem", "linear_independent_singleton", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}]}, {"timestamp": 1584866650, "sha": "3a714995", "message": "feat(ring_theory/algebra) : generalize `rat.algebra_rat` to `division_ring` (#2208)\nOther changes:\n* add lemmas about field inverse to `algebra/semiconj` and `algebra/commute`;\n* drop `rat.cast`, define `instance : has_coe` right away to avoid\n accidental use of `rat.cast` in theorems;\n* define `rat.cast_hom` instead of `is_ring_hom rat.cast`;\n* generalize some theorems about from `field` to `division_ring`.", "changes": [{"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": [["add", "theorem", "div_left", ["commute"]], ["add", "theorem", "div_right", ["commute"]], ["add", "theorem", "finv_finv", ["commute"]], ["add", "theorem", "finv_left", ["commute"]], ["add", "theorem", "finv_left_iff", ["commute"]], ["add", "theorem", "finv_right", ["commute"]], ["add", "theorem", "finv_right_iff", ["commute"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "cast_fpow", []], ["add", "theorem", "cast_fpow", ["rat"]]]}, {"oldPath": "src/algebra/semiconj.lean", "newPath": "src/algebra/semiconj.lean", "changes": [["add", "theorem", "finv_symm_left", ["semiconj_by"]], ["add", "theorem", "finv_symm_left_iff", ["semiconj_by"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_div", ["rat"]], ["add", "def", "cast_hom", ["rat"]], ["mod", "theorem", "cast_inv", ["rat"]], ["mod", "theorem", "cast_mk", ["rat"]], ["mod", "theorem", "cast_nonneg", ["rat"]], ["mod", "theorem", "cast_pow", ["rat"]], ["add", "theorem", "coe_cast_hom", ["rat"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1584851922, "sha": "9485a857", "message": "fix(linear_algebra/basic): make R explicit in linear_equiv.refl (#2161)\n* fix(linear_algebra/basic): make R explicit in linear_equiv.refl\n* getting mathlib to compile again\n* better variablism", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "congr_right", ["linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}]}, {"timestamp": 1584842448, "sha": "19de4162", "message": "doc(ring_theory/adjoin_root): add docstring (#2211)\n* docstring for adjoin_root\n* adding some quotes", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}]}, {"timestamp": 1584800331, "sha": "09401b7f", "message": "revert accidental push to master", "changes": [{"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1584799251, "sha": "3375126c", "message": "feat(tactic/core): trace_for", "changes": [{"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1584818698, "sha": "af0cf30e", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584816090, "sha": "0bd8b94d", "message": "refactor(scripts/mk_nolint): produce nolints.txt file during linting (#2194)\n* Factor out code to determine automatically-generated declarations.\n* Mark bool.decidable_eq and decidable.to_bool as [inline]\n* Execute linters in parallel.\n* Add lint_mathlib.lean script.\n* Switch CI to new lint_mathlib.lean script.\n* Make linter fail.\n* Revert \"Make linter fail.\"\nThis reverts commit 8b509c5815d862d0d060eac407cf6d22d743f960.\n* Remove one line from nolints.txt\n* Change shebang in rm_all.sh to be nixos-compatible\n* Disable parallel checking.\n* Make linter fail.\n* Revert \"Make linter fail.\"\nThis reverts commit 8f5ec62030ecaec93d01981b273c2a737d67eddf.\n* Move is_auto_decl to meta/expr.lean\n* Remove list.mmap_async\n* Factor out name.from_string", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": null, "newPath": "scripts/lint_mathlib.lean", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/mk_nolint.lean", "newPath": null, "changes": []}, {"oldPath": "scripts/rm_all.sh", "newPath": "scripts/rm_all.sh", "changes": []}, {"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1584786934, "sha": "dd85db0c", "message": "doc(docs/contribute/index.md): remove obsolete recommendation to use lean-3.7.2 branch (#2206)", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}]}, {"timestamp": 1584780398, "sha": "bc84a205", "message": "chore(leanpkg.toml): Lean 3.7.2c (#2203)\n* chore(leanpkg.toml): Lean 3.7.2c\nLean 3.7.1c had a bug that prevented Lean on windows from importing oleans properly (see https://github.com/leanprover-community/lean/pull/155). This is fixed in Lean 3.7.2c.\n* update contribute/index.md", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1584756650, "sha": "34bac8d3", "message": "feat(category_theory): add naturality_assoc simp lemma (#2200)", "changes": [{"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": []}]}, {"timestamp": 1584747487, "sha": "99ba8f44", "message": "chore(category_theory): change monoidal_of_has_finite_products to use binary products (#2190)\n* chore(category_theory): change monoidal_of_has_finite_products to use binary products\n* remove some simp annotations for now\n* fixes", "changes": [{"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["add", "theorem", "associator_hom", ["category_theory", "monoidal_of_has_finite_coproducts"]], ["add", "theorem", "left_unitor_hom", ["category_theory", "monoidal_of_has_finite_coproducts"]], ["add", "theorem", "left_unitor_inv", ["category_theory", "monoidal_of_has_finite_coproducts"]], ["add", "theorem", "right_unitor_hom", ["category_theory", "monoidal_of_has_finite_coproducts"]], ["add", "theorem", "right_unitor_inv", ["category_theory", "monoidal_of_has_finite_coproducts"]], ["mod", "def", "monoidal_of_has_finite_coproducts", ["category_theory"]], ["add", "theorem", "associator_hom", ["category_theory", "monoidal_of_has_finite_products"]], ["add", "theorem", "left_unitor_hom", ["category_theory", "monoidal_of_has_finite_products"]], ["add", "theorem", "left_unitor_inv", ["category_theory", "monoidal_of_has_finite_products"]], ["add", "theorem", "right_unitor_hom", ["category_theory", "monoidal_of_has_finite_products"]], ["add", "theorem", "right_unitor_inv", ["category_theory", "monoidal_of_has_finite_products"]], ["mod", "def", "monoidal_of_has_finite_products", ["category_theory"]]]}]}, {"timestamp": 1584739370, "sha": "94201677", "message": "feat(category_theory): unbundled functors and lax monoidal functors (#2193)\n* feat(category_theory): unbundled functors and lax monoidal functors\n* doc string", "changes": [{"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/functorial.lean", "changes": [["add", "def", "of", ["category_theory", "functor"]], ["add", "def", "functorial_comp", ["category_theory"]], ["add", "def", "map", ["category_theory"]], ["add", "theorem", "map_functorial_obj", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/functorial.lean", "changes": [["add", "def", "of", ["category_theory", "lax_monoidal_functor"]]]}]}, {"timestamp": 1584730425, "sha": "b224943d", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584725199, "sha": "8d44098d", "message": "feat(finsupp): move convolution product to type wrapper `add_monoid_algebra`. (#2135)\n* pulling out convolution product\n* various\n* chore(ring_theory/polynomial): refactor proof of is_noetherian_ring_fin\n* not there yet\n* feat(ring_theory/polynomial): refactor of is_integral_domain_fin\n* fix\n* ..\n* refactor\n* fix\n* yay\n* cleanup\n* satisfying the linter\n* linter\n* improving documentation\n* add distrib instance for pointwise multiplication\n* move files per Johan's suggestion\n* fix import\n* Update src/data/polynomial.lean\nCo-Authored-By: Johan Commelin \n* type annotation", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["del", "theorem", "mul_def", ["finsupp"]], ["del", "theorem", "one_def", ["finsupp"]], ["del", "theorem", "prod_single", ["finsupp"]], ["del", "theorem", "single_mul_single", ["finsupp"]], ["del", "theorem", "support_mul", ["finsupp"]]]}, {"oldPath": null, "newPath": "src/data/finsupp/pointwise.lean", "changes": [["add", "theorem", "mul_apply", ["finsupp"]], ["add", "theorem", "support_mul", ["finsupp"]]]}, {"oldPath": null, "newPath": "src/data/monoid_algebra.lean", "changes": [["add", "theorem", "mul_def", ["add_monoid_algebra"]], ["add", "theorem", "one_def", ["add_monoid_algebra"]], ["add", "theorem", "prod_single", ["add_monoid_algebra"]], ["add", "theorem", "single_mul_single", ["add_monoid_algebra"]], ["add", "theorem", "support_mul", ["add_monoid_algebra"]], ["add", "def", "add_monoid_algebra", []], ["add", "theorem", "mul_def", ["monoid_algebra"]], ["add", "theorem", "one_def", ["monoid_algebra"]], ["add", "theorem", "prod_single", ["monoid_algebra"]], ["add", "theorem", "single_mul_single", ["monoid_algebra"]], ["add", "theorem", "support_mul", ["monoid_algebra"]], ["add", "def", "monoid_algebra", []]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "def", "coeff_coe_to_fun", ["mv_polynomial"]], ["mod", "def", "mv_polynomial", []]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "def", "C", ["polynomial"]], ["mod", "def", "X", ["polynomial"]], ["add", "def", "monomial", ["polynomial"]], ["mod", "theorem", "single_eq_C_mul_X", ["polynomial"]], ["mod", "def", "polynomial", []]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["del", "def", "monomial", ["polynomial"]]]}]}, {"timestamp": 1584716506, "sha": "0f1b4654", "message": "feat(category_theory/limits): the isomorphism expressing preservation of chosen limits (#2192)\n* feat(category_theory/limits): the isomorphism expressing preservation of chosen limits\n* Update src/category_theory/limits/limits.lean", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "cone_point_unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "cone_point_unique_up_to_iso", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": [["add", "def", "preserves_colimit_iso", ["category_theory", "limits"]], ["add", "def", "preserves_limit_iso", ["category_theory", "limits"]]]}]}, {"timestamp": 1584707066, "sha": "c66c4afa", "message": "chore(algebra/Module/monoidal): add the simp lemmas for unitors and associativity (#2196)\n* feat(algebra/category/Module/monoidal): simp lemmas\n* oops\n* depressingly easy\n* order of arguments", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["del", "def", "of_self", ["Module"]], ["add", "def", "of_self_iso", ["Module"]]]}, {"oldPath": "src/algebra/category/Module/monoidal.lean", "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["add", "theorem", "associator_hom", ["Module", "monoidal_category"]], ["add", "theorem", "left_unitor_hom", ["Module", "monoidal_category"]], ["add", "theorem", "right_unitor_hom", ["Module", "monoidal_category"]]]}]}, {"timestamp": 1584698742, "sha": "d93e0ddb", "message": "chore(category_theory): missing simp lemmas (#2188)\n* chore(category_theory): missing simp lemmas\n* Apply suggestions from code review\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "theorem", "map_hom_map_inv_apply", ["category_theory", "functor_to_types"]], ["add", "theorem", "map_inv_map_hom_apply", ["category_theory", "functor_to_types"]]]}]}, {"timestamp": 1584689549, "sha": "b4e6313a", "message": "feat(category_theory): subsingleton (has_zero_morphisms) (#2180)\n* feat(category_theory): subsingleton (has_zero_morphisms)\n* fix\n* Update src/category_theory/limits/shapes/zero.lean\nCo-Authored-By: Markus Himmel \n* Update src/category_theory/limits/shapes/zero.lean\nCo-Authored-By: Markus Himmel \n* non-terminal simp\n* add warning message\n* Update src/category_theory/discrete_category.lean\nCo-Authored-By: Markus Himmel \n* Apply suggestions from code review", "changes": [{"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "theorem", "equivalence_preserves_zero_morphisms", ["category_theory", "limits"]], ["add", "theorem", "ext", ["category_theory", "limits", "has_zero_morphisms"]]]}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": [["del", "theorem", "ext", ["ulift"]]]}]}, {"timestamp": 1584680935, "sha": "cc041325", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584676799, "sha": "6c97ce02", "message": "feat(category_theory): some natural isomorphisms related to composition by functors (#2189)\n* feat(category_theory): some natural isomorphisms related to composition by functors\n* tidy up\n* cleanup\n* fix\n* better design", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "def", "map_pair", ["category_theory", "limits"]], ["add", "def", "map_pair_iso", ["category_theory", "limits"]], ["mod", "theorem", "map_pair_left", ["category_theory", "limits"]], ["mod", "theorem", "map_pair_right", ["category_theory", "limits"]], ["add", "def", "pair_comp", ["category_theory", "limits"]], ["del", "def", "pair_function", ["category_theory", "limits"]], ["mod", "theorem", "pair_obj_left", ["category_theory", "limits"]], ["mod", "theorem", "pair_obj_right", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": [["add", "def", "empty_ext", ["category_theory", "functor"]]]}]}, {"timestamp": 1584668159, "sha": "d12bbc00", "message": "feat(data/zmod): lemmas about totient and zmod (#2158)\n* feat(data/zmod): lemmas about totient and zmod\n* docstring\n* Changes based on Johan's comments\n* fix build\n* subsingleton (units(zmod 2))", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": [["add", "theorem", "totient_zero", ["nat"]], ["add", "theorem", "card_units_eq_totient", ["zmod"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_unit_of_coprime", ["zmod"]], ["add", "def", "unit_of_coprime", ["zmod"]]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["add", "theorem", "pow_totient", ["nat", "modeq"]], ["add", "theorem", "pow_totient", ["zmod"]]]}]}, {"timestamp": 1584659704, "sha": "3dd95a2e", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584654993, "sha": "1a398a72", "message": "docs(category_theory/limits): adding many docstrings (#2185)\n* lots of comments!\n* remove #lint\n* Apply suggestions from code review\nlots of missing \"co\"s\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}]}, {"timestamp": 1584643954, "sha": "344a41e8", "message": "feat(data/finset): monotone bijection from fin k (#2163)\n* feat(data/finset): increasing bijection between fin k and an ordered finset\n* fix build\n* fix linter\n* make argument explicit\n* add equiv for fintype", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "dite_comp_equiv_update", []]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "bij_on_mono_of_fin", ["finset"]], ["add", "def", "mono_of_fin", ["finset"]], ["mod", "theorem", "sort_sorted_lt", ["finset"]], ["add", "theorem", "sorted_last_eq_max'", ["finset"]], ["add", "theorem", "sorted_zero_eq_min'", ["finset"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "card_fin", ["finset"]], ["add", "theorem", "card_finset", ["fintype"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["add", "theorem", "nth_le_of_sorted_of_le", ["list"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}]}, {"timestamp": 1584635557, "sha": "b3ef6859", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584630734, "sha": "9dbc6069", "message": "refactor(*): drop `lattice` namespace (#2166)\n* refactor(*): drop `lattice` namespace\nOther changes:\n* rename `*neg*` to `*compl*` in `boolean_algebra`.\nI didn't touch `sub` in `boolean_algebra`; should it become `sdiff`?\n* Fix some compile failures\n* Fix the rest of compile failures\nDrop `real.Sup` and `real.Inf`, define instances instead.\n* fix build\n* fix build\n* Fix build", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "infi_eq_infi_finset", []], ["del", "theorem", "infi_eq_infi_finset", ["lattice"]], ["del", "theorem", "supr_eq_supr_finset", ["lattice"]], ["add", "theorem", "supr_eq_supr_finset", []]]}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "Inf_def", ["real"]], ["mod", "theorem", "Inf_empty", ["real"]], ["mod", "theorem", "Inf_of_not_bdd_below", ["real"]], ["add", "theorem", "Sup_def", ["real"]], ["mod", "theorem", "Sup_empty", ["real"]], ["mod", "theorem", "Sup_of_not_bdd_above", ["real"]], ["mod", "theorem", "Sup_univ", ["real"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/ereal.lean", "newPath": "src/data/real/ereal.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "is_st_Sup", ["hyperreal"]], ["mod", "theorem", "st_eq_Sup", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": []}, {"oldPath": "src/data/set/intervals/disjoint.lean", "newPath": "src/data/set/intervals/disjoint.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": [["add", "theorem", "sub_le_sub", ["boolean_algebra"]], ["add", "theorem", "compl_bot", []], ["add", "theorem", "compl_compl'", []], ["add", "theorem", "compl_inf", []], ["add", "theorem", "compl_inf_eq_bot", []], ["add", "theorem", "compl_inj", []], ["add", "theorem", "compl_inj_iff", []], ["add", "theorem", "compl_le_compl", []], ["add", "theorem", "compl_le_compl_iff_le", []], ["add", "theorem", "compl_le_iff_compl_le", []], ["add", "theorem", "compl_le_of_compl_le", []], ["add", "theorem", "compl_sup", []], ["add", "theorem", "compl_sup_eq_top", []], ["add", "theorem", "compl_top", []], ["add", "theorem", "compl_unique", []], ["add", "theorem", "inf_compl_eq_bot", []], ["del", "theorem", "inf_neg_eq_bot", ["lattice"]], ["del", "theorem", "le_neg_of_le_neg", ["lattice"]], ["del", "theorem", "neg_bot", ["lattice"]], ["del", "theorem", "neg_eq_neg_iff", ["lattice"]], ["del", "theorem", "neg_eq_neg_of_eq", ["lattice"]], ["del", "theorem", "neg_inf", ["lattice"]], ["del", "theorem", "neg_inf_eq_bot", ["lattice"]], ["del", "theorem", "neg_le_iff_neg_le", ["lattice"]], ["del", "theorem", "neg_le_neg", ["lattice"]], ["del", "theorem", "neg_le_neg_iff_le", ["lattice"]], ["del", "theorem", "neg_le_of_neg_le", ["lattice"]], ["del", "theorem", "neg_neg", ["lattice"]], ["del", "theorem", "neg_sup", ["lattice"]], ["del", "theorem", "neg_sup_eq_top", ["lattice"]], ["del", "theorem", "neg_top", ["lattice"]], ["del", "theorem", "neg_unique", ["lattice"]], ["del", "theorem", "sub_eq", ["lattice"]], ["del", "theorem", "sub_eq_left", ["lattice"]], ["del", "theorem", "sub_le_sub", ["lattice"]], ["del", "theorem", "sup_neg_eq_top", ["lattice"]], ["del", "theorem", "sup_sub_same", ["lattice"]], ["add", "theorem", "le_compl_of_le_compl", []], ["add", "theorem", "sub_eq", []], ["add", "theorem", "sub_eq_left", []], ["add", "theorem", "sup_compl_eq_top", []], ["add", "theorem", "sup_sub_same", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_inf_eq", []], ["add", "theorem", "bot_le", []], ["add", "theorem", "bot_lt_iff_ne_bot", []], ["add", "theorem", "bot_sup_eq", []], ["add", "theorem", "bot_unique", []], ["add", "theorem", "ext", ["bounded_lattice"]], ["add", "theorem", "eq_bot_iff", []], ["add", "theorem", "eq_bot_mono", []], ["add", "theorem", "eq_top_iff", []], ["add", "theorem", "eq_top_mono", []], ["add", "theorem", "inf_bot_eq", []], ["add", "theorem", "inf_eq_bot_iff_le_compl", []], ["add", "theorem", "inf_eq_top_iff", []], ["add", "theorem", "inf_top_eq", []], ["del", "theorem", "bot_inf_eq", ["lattice"]], ["del", "theorem", "bot_le", ["lattice"]], ["del", "theorem", "bot_lt_iff_ne_bot", ["lattice"]], ["del", "theorem", "bot_sup_eq", ["lattice"]], ["del", "theorem", "bot_unique", ["lattice"]], ["del", "theorem", "ext", ["lattice", "bounded_lattice"]], ["del", "theorem", "eq_bot_iff", ["lattice"]], ["del", "theorem", "eq_bot_mono", ["lattice"]], ["del", "theorem", "eq_top_iff", ["lattice"]], ["del", "theorem", "eq_top_mono", ["lattice"]], ["del", "theorem", "inf_bot_eq", ["lattice"]], ["del", "theorem", "inf_eq_bot_iff_le_compl", ["lattice"]], ["del", "theorem", "inf_eq_top_iff", ["lattice"]], ["del", "theorem", "inf_top_eq", ["lattice"]], ["del", "theorem", "le_bot_iff", ["lattice"]], ["del", "theorem", "le_top", ["lattice"]], ["del", "theorem", "lt_top_iff_ne_top", ["lattice"]], ["del", "theorem", "monotone_and", ["lattice"]], ["del", "theorem", "monotone_or", ["lattice"]], ["del", "theorem", "ne_bot_of_gt", ["lattice"]], ["del", "theorem", "ne_bot_of_le_ne_bot", ["lattice"]], ["del", "theorem", "ne_top_of_le_ne_top", ["lattice"]], ["del", "theorem", "ne_top_of_lt", ["lattice"]], ["del", "theorem", "not_lt_bot", ["lattice"]], ["del", "theorem", "not_top_lt", ["lattice"]], ["del", "theorem", "ext", ["lattice", "order_bot"]], ["del", "theorem", "ext_bot", ["lattice", "order_bot"]], ["del", "theorem", "ext", ["lattice", "order_top"]], ["del", "theorem", "ext_top", ["lattice", "order_top"]], ["del", "theorem", "sup_bot_eq", ["lattice"]], ["del", "theorem", "sup_eq_bot_iff", ["lattice"]], ["del", "theorem", "sup_top_eq", ["lattice"]], ["del", "theorem", "top_inf_eq", ["lattice"]], ["del", "theorem", "top_le_iff", ["lattice"]], ["del", "theorem", "top_sup_eq", ["lattice"]], ["del", "theorem", "top_unique", ["lattice"]], ["add", "theorem", "le_bot_iff", []], ["add", "theorem", "le_top", []], ["add", "theorem", "lt_top_iff_ne_top", []], ["add", "theorem", "monotone_and", []], ["add", "theorem", "monotone_or", []], ["add", "theorem", "ne_bot_of_gt", []], ["add", "theorem", "ne_bot_of_le_ne_bot", []], ["add", "theorem", "ne_top_of_le_ne_top", []], ["add", "theorem", "ne_top_of_lt", []], ["add", "theorem", "not_lt_bot", []], ["add", "theorem", "not_top_lt", []], ["add", "theorem", "ext", ["order_bot"]], ["add", "theorem", "ext_bot", ["order_bot"]], ["add", "theorem", "ext", ["order_top"]], ["add", "theorem", "ext_top", ["order_top"]], ["add", "theorem", "sup_bot_eq", []], ["add", "theorem", "sup_eq_bot_iff", []], ["add", "theorem", "sup_top_eq", []], ["add", "theorem", "top_inf_eq", []], ["add", "theorem", "top_le_iff", []], ["add", "theorem", "top_sup_eq", []], ["add", "theorem", "top_unique", []]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "Inf_sup_Inf", []], ["add", "theorem", "Inf_sup_eq", []], ["add", "theorem", "Sup_inf_Sup", []], ["add", "theorem", "Sup_inf_eq", []], ["add", "theorem", "compl_Inf", []], ["add", "theorem", "compl_Sup", []], ["add", "theorem", "compl_infi", []], ["add", "theorem", "compl_supr", []], ["add", "theorem", "inf_Sup_eq", []], ["del", "theorem", "Inf_sup_Inf", ["lattice"]], ["del", "theorem", "Inf_sup_eq", ["lattice"]], ["del", "theorem", "Sup_inf_Sup", ["lattice"]], ["del", "theorem", "Sup_inf_eq", ["lattice"]], ["del", "theorem", "inf_Sup_eq", ["lattice"]], ["del", "theorem", "neg_Inf", ["lattice"]], ["del", "theorem", "neg_Sup", ["lattice"]], ["del", "theorem", "neg_infi", ["lattice"]], ["del", "theorem", "neg_supr", ["lattice"]], ["del", "theorem", "sup_Inf_eq", ["lattice"]], ["add", "theorem", "sup_Inf_eq", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "def", "Inf", []], ["add", "theorem", "Inf_Prop_eq", []], ["add", "theorem", "Inf_apply", []], ["add", "theorem", "Inf_empty", []], ["add", "theorem", "Inf_eq_bot", []], ["add", "theorem", "Inf_eq_infi", []], ["add", "theorem", "Inf_eq_top", []], ["add", "theorem", "Inf_image", []], ["add", "theorem", "Inf_insert", []], ["add", "theorem", "Inf_le", []], ["add", "theorem", "Inf_le_Inf", []], ["add", "theorem", "Inf_le_Sup", []], ["add", "theorem", "Inf_le_of_le", []], ["add", "theorem", "Inf_lt_iff", []], ["add", "theorem", "Inf_pair", []], ["add", "theorem", "Inf_range", []], ["add", "theorem", "Inf_singleton", []], ["add", "theorem", "Inf_union", []], ["add", "theorem", "Inf_univ", []], ["add", "def", "Sup", []], ["add", "theorem", "Sup_Prop_eq", []], ["add", "theorem", "Sup_apply", []], ["add", "theorem", "Sup_empty", []], ["add", "theorem", "Sup_eq_bot", []], ["add", "theorem", "Sup_eq_supr", []], ["add", "theorem", "Sup_eq_top", []], ["add", "theorem", "Sup_image", []], ["add", "theorem", "Sup_insert", []], ["add", "theorem", "Sup_inter_le", []], ["add", "theorem", "Sup_le", []], ["add", "theorem", "Sup_le_Sup", []], ["add", "theorem", "Sup_le_iff", []], ["add", "theorem", "Sup_pair", []], ["add", "theorem", "Sup_range", []], ["add", "theorem", "Sup_singleton", []], ["add", "theorem", "Sup_union", []], ["add", "theorem", "Sup_univ", []], ["add", "theorem", "binfi_inf", []], ["add", "theorem", "has_Inf_to_nonempty", []], ["add", "theorem", "has_Sup_to_nonempty", []], ["add", "theorem", "inf_infi", []], ["add", "def", "infi", []], ["add", "theorem", "infi_Prop_eq", []], ["add", "theorem", "infi_and", []], ["add", "theorem", "infi_apply", []], ["add", "theorem", "infi_bool_eq", []], ["add", "theorem", "infi_comm", []], ["add", "theorem", "infi_congr_Prop", []], ["add", "theorem", "infi_const", []], ["add", "theorem", "infi_empty", []], ["add", "theorem", "infi_emptyset", []], ["add", "theorem", "infi_eq_bot", []], ["add", "theorem", "infi_eq_dif", []], ["add", "theorem", "infi_eq_if", []], ["add", "theorem", "infi_eq_top", []], ["add", "theorem", "infi_exists", []], ["add", "theorem", "infi_false", []], ["add", "theorem", "infi_image", []], ["add", "theorem", "infi_inf", []], ["add", "theorem", "infi_inf_eq", []], ["add", "theorem", "infi_infi_eq_left", []], ["add", "theorem", "infi_infi_eq_right", []], ["add", "theorem", "infi_insert", []], ["add", "theorem", "infi_le'", []], ["add", "theorem", "infi_le", []], ["add", "theorem", "infi_le_infi2", []], ["add", "theorem", "infi_le_infi", []], ["add", "theorem", "infi_le_infi_const", []], ["add", "theorem", "infi_le_infi_of_subset", []], ["add", "theorem", "infi_le_of_le", []], ["add", "theorem", "infi_lt_iff", []], ["add", "theorem", "infi_neg", []], ["add", "theorem", "infi_or", []], ["add", "theorem", "infi_pair", []], ["add", "theorem", "infi_pos", []], ["add", "theorem", "infi_prod", []], ["add", "theorem", "infi_range", []], ["add", "theorem", "infi_sigma", []], ["add", "theorem", "infi_singleton", []], ["add", "theorem", "infi_subtype'", []], ["add", "theorem", "infi_subtype", []], ["add", "theorem", "infi_sum", []], ["add", "theorem", "infi_top", []], ["add", "theorem", "infi_true", []], ["add", "theorem", "infi_union", []], ["add", "theorem", "infi_unit", []], ["add", "theorem", "infi_univ", []], ["add", "theorem", "Inf_eq", ["is_glb"]], ["add", "theorem", "infi_eq", ["is_glb"]], ["add", "theorem", "is_glb_Inf", []], ["add", "theorem", "is_glb_infi", []], ["add", "theorem", "Sup_eq", ["is_lub"]], ["add", "theorem", "supr_eq", ["is_lub"]], ["add", "theorem", "is_lub_Sup", []], ["add", "theorem", "is_lub_supr", []], ["del", "def", "Inf", ["lattice"]], ["del", "theorem", "Inf_Prop_eq", ["lattice"]], ["del", "theorem", "Inf_apply", ["lattice"]], ["del", "theorem", "Inf_empty", ["lattice"]], ["del", "theorem", "Inf_eq_bot", ["lattice"]], ["del", "theorem", "Inf_eq_infi", ["lattice"]], ["del", "theorem", "Inf_eq_top", ["lattice"]], ["del", "theorem", "Inf_image", ["lattice"]], ["del", "theorem", "Inf_insert", ["lattice"]], ["del", "theorem", "Inf_le", ["lattice"]], ["del", "theorem", "Inf_le_Inf", ["lattice"]], ["del", "theorem", "Inf_le_Sup", ["lattice"]], ["del", "theorem", "Inf_le_of_le", ["lattice"]], ["del", "theorem", "Inf_lt_iff", ["lattice"]], ["del", "theorem", "Inf_pair", ["lattice"]], ["del", "theorem", "Inf_range", ["lattice"]], ["del", "theorem", "Inf_singleton", ["lattice"]], ["del", "theorem", "Inf_union", ["lattice"]], ["del", "theorem", "Inf_univ", ["lattice"]], ["del", "def", "Sup", ["lattice"]], ["del", "theorem", "Sup_Prop_eq", ["lattice"]], ["del", "theorem", "Sup_apply", ["lattice"]], ["del", "theorem", "Sup_empty", ["lattice"]], ["del", "theorem", "Sup_eq_bot", ["lattice"]], ["del", "theorem", "Sup_eq_supr", ["lattice"]], ["del", "theorem", "Sup_eq_top", ["lattice"]], ["del", "theorem", "Sup_image", ["lattice"]], ["del", "theorem", "Sup_insert", ["lattice"]], ["del", "theorem", "Sup_inter_le", ["lattice"]], ["del", "theorem", "Sup_le", ["lattice"]], ["del", "theorem", "Sup_le_Sup", ["lattice"]], ["del", "theorem", "Sup_le_iff", ["lattice"]], ["del", "theorem", "Sup_pair", ["lattice"]], ["del", "theorem", "Sup_range", ["lattice"]], ["del", "theorem", "Sup_singleton", ["lattice"]], ["del", "theorem", "Sup_union", ["lattice"]], ["del", "theorem", "Sup_univ", ["lattice"]], ["del", "theorem", "binfi_inf", ["lattice"]], ["del", "theorem", "has_Inf_to_nonempty", ["lattice"]], ["del", "theorem", "has_Sup_to_nonempty", ["lattice"]], ["del", "theorem", "inf_infi", ["lattice"]], ["del", "def", "infi", ["lattice"]], ["del", "theorem", "infi_Prop_eq", ["lattice"]], ["del", "theorem", "infi_and", ["lattice"]], ["del", "theorem", "infi_apply", ["lattice"]], ["del", "theorem", "infi_bool_eq", ["lattice"]], ["del", "theorem", "infi_comm", ["lattice"]], ["del", "theorem", "infi_congr_Prop", ["lattice"]], ["del", "theorem", "infi_const", ["lattice"]], ["del", "theorem", "infi_empty", ["lattice"]], ["del", "theorem", "infi_emptyset", ["lattice"]], ["del", "theorem", "infi_eq_bot", ["lattice"]], ["del", "theorem", "infi_eq_dif", ["lattice"]], ["del", "theorem", "infi_eq_if", ["lattice"]], ["del", "theorem", "infi_eq_top", ["lattice"]], ["del", "theorem", "infi_exists", ["lattice"]], ["del", "theorem", "infi_false", ["lattice"]], ["del", "theorem", "infi_image", ["lattice"]], ["del", "theorem", "infi_inf", ["lattice"]], ["del", "theorem", "infi_inf_eq", ["lattice"]], ["del", "theorem", "infi_infi_eq_left", ["lattice"]], ["del", "theorem", "infi_infi_eq_right", ["lattice"]], ["del", "theorem", "infi_insert", ["lattice"]], ["del", "theorem", "infi_le'", ["lattice"]], ["del", "theorem", "infi_le", ["lattice"]], ["del", "theorem", "infi_le_infi2", ["lattice"]], ["del", "theorem", "infi_le_infi", ["lattice"]], ["del", "theorem", "infi_le_infi_const", ["lattice"]], ["del", "theorem", "infi_le_infi_of_subset", ["lattice"]], ["del", "theorem", "infi_le_of_le", ["lattice"]], ["del", "theorem", "infi_lt_iff", ["lattice"]], ["del", "theorem", "infi_neg", ["lattice"]], ["del", "theorem", "infi_or", ["lattice"]], ["del", "theorem", "infi_pair", ["lattice"]], ["del", "theorem", "infi_pos", ["lattice"]], ["del", "theorem", "infi_prod", ["lattice"]], ["del", "theorem", "infi_range", ["lattice"]], ["del", "theorem", "infi_sigma", ["lattice"]], ["del", "theorem", "infi_singleton", ["lattice"]], ["del", "theorem", "infi_subtype'", ["lattice"]], ["del", "theorem", "infi_subtype", ["lattice"]], ["del", "theorem", "infi_sum", ["lattice"]], ["del", "theorem", "infi_top", ["lattice"]], ["del", "theorem", "infi_true", ["lattice"]], ["del", "theorem", "infi_union", ["lattice"]], ["del", "theorem", "infi_unit", ["lattice"]], ["del", "theorem", "infi_univ", ["lattice"]], ["del", "theorem", "is_glb_Inf", ["lattice"]], ["del", "theorem", "is_glb_infi", ["lattice"]], ["del", "theorem", "is_lub_Sup", ["lattice"]], ["del", "theorem", "is_lub_supr", ["lattice"]], ["del", "theorem", "le_Inf", ["lattice"]], ["del", "theorem", "le_Inf_iff", ["lattice"]], ["del", "theorem", "le_Inf_inter", ["lattice"]], ["del", "theorem", "le_Sup", ["lattice"]], ["del", "theorem", "le_Sup_of_le", ["lattice"]], ["del", "theorem", "le_infi", ["lattice"]], ["del", "theorem", "le_infi_iff", ["lattice"]], ["del", "theorem", "le_supr'", ["lattice"]], ["del", "theorem", "le_supr", ["lattice"]], ["del", "theorem", "le_supr_iff", ["lattice"]], ["del", "theorem", "le_supr_of_le", ["lattice"]], ["del", "theorem", "lt_Sup_iff", ["lattice"]], ["del", "theorem", "lt_supr_iff", ["lattice"]], ["del", "theorem", "monotone_Inf_of_monotone", ["lattice"]], ["del", "theorem", "monotone_Sup_of_monotone", ["lattice"]], ["del", "def", "ord_continuous", ["lattice"]], ["del", "theorem", "ord_continuous_mono", ["lattice"]], ["del", "theorem", "ord_continuous_sup", ["lattice"]], ["del", "def", "supr", ["lattice"]], ["del", "theorem", "supr_Prop_eq", ["lattice"]], ["del", "theorem", "supr_and", ["lattice"]], ["del", "theorem", "supr_apply", ["lattice"]], ["del", "theorem", "supr_bool_eq", ["lattice"]], ["del", "theorem", "supr_bot", ["lattice"]], ["del", "theorem", "supr_comm", ["lattice"]], ["del", "theorem", "supr_congr_Prop", ["lattice"]], ["del", "theorem", "supr_const", ["lattice"]], ["del", "theorem", "supr_empty", ["lattice"]], ["del", "theorem", "supr_emptyset", ["lattice"]], ["del", "theorem", "supr_eq_bot", ["lattice"]], ["del", "theorem", "supr_eq_dif", ["lattice"]], ["del", "theorem", "supr_eq_if", ["lattice"]], ["del", "theorem", "supr_eq_top", ["lattice"]], ["del", "theorem", "supr_exists", ["lattice"]], ["del", "theorem", "supr_false", ["lattice"]], ["del", "theorem", "supr_image", ["lattice"]], ["del", "theorem", "supr_insert", ["lattice"]], ["del", "theorem", "supr_le", ["lattice"]], ["del", "theorem", "supr_le_iff", ["lattice"]], ["del", "theorem", "supr_le_supr2", ["lattice"]], ["del", "theorem", "supr_le_supr", ["lattice"]], ["del", "theorem", "supr_le_supr_const", ["lattice"]], ["del", "theorem", "supr_le_supr_of_subset", ["lattice"]], ["del", "theorem", "supr_neg", ["lattice"]], ["del", "theorem", "supr_or", ["lattice"]], ["del", "theorem", "supr_pair", ["lattice"]], ["del", "theorem", "supr_pos", ["lattice"]], ["del", "theorem", "supr_prod", ["lattice"]], ["del", "theorem", "supr_range", ["lattice"]], ["del", "theorem", "supr_sigma", ["lattice"]], ["del", "theorem", "supr_singleton", ["lattice"]], ["del", "theorem", "supr_subtype'", ["lattice"]], ["del", "theorem", "supr_subtype", ["lattice"]], ["del", "theorem", "supr_sum", ["lattice"]], ["del", "theorem", "supr_sup_eq", ["lattice"]], ["del", "theorem", "supr_supr_eq_left", ["lattice"]], ["del", "theorem", "supr_supr_eq_right", ["lattice"]], ["del", "theorem", "supr_true", ["lattice"]], ["del", "theorem", "supr_union", ["lattice"]], ["del", "theorem", "supr_unit", ["lattice"]], ["del", "theorem", "supr_univ", ["lattice"]], ["add", "theorem", "le_Inf", []], ["add", "theorem", "le_Inf_iff", []], ["add", "theorem", "le_Inf_inter", []], ["add", "theorem", "le_Sup", []], ["add", "theorem", "le_Sup_of_le", []], ["add", "theorem", "le_infi", []], ["add", "theorem", "le_infi_iff", []], ["add", "theorem", "le_supr'", []], ["add", "theorem", "le_supr", []], ["add", "theorem", "le_supr_iff", []], ["add", "theorem", "le_supr_of_le", []], ["add", "theorem", "lt_Sup_iff", []], ["add", "theorem", "lt_supr_iff", []], ["add", "theorem", "monotone_Inf_of_monotone", []], ["add", "theorem", "monotone_Sup_of_monotone", []], ["add", "def", "ord_continuous", []], ["add", "theorem", "ord_continuous_mono", []], ["add", "theorem", "ord_continuous_sup", []], ["add", "def", "supr", []], ["add", "theorem", "supr_Prop_eq", []], ["add", "theorem", "supr_and", []], ["add", "theorem", "supr_apply", []], ["add", "theorem", "supr_bool_eq", []], ["add", "theorem", "supr_bot", []], ["add", "theorem", "supr_comm", []], ["add", "theorem", "supr_congr_Prop", []], ["add", "theorem", "supr_const", []], ["add", "theorem", "supr_empty", []], ["add", "theorem", "supr_emptyset", []], ["add", "theorem", "supr_eq_bot", []], ["add", "theorem", "supr_eq_dif", []], ["add", "theorem", "supr_eq_if", []], ["add", "theorem", "supr_eq_top", []], ["add", "theorem", "supr_exists", []], ["add", "theorem", "supr_false", []], ["add", "theorem", "supr_image", []], ["add", "theorem", "supr_insert", []], ["add", "theorem", "supr_le", []], ["add", "theorem", "supr_le_iff", []], ["add", "theorem", "supr_le_supr2", []], ["add", "theorem", "supr_le_supr", []], ["add", "theorem", "supr_le_supr_const", []], ["add", "theorem", "supr_le_supr_of_subset", []], ["add", "theorem", "supr_neg", []], ["add", "theorem", "supr_or", []], ["add", "theorem", "supr_pair", []], ["add", "theorem", "supr_pos", []], ["add", "theorem", "supr_prod", []], ["add", "theorem", "supr_range", []], ["add", "theorem", "supr_sigma", []], ["add", "theorem", "supr_singleton", []], ["add", "theorem", "supr_subtype'", []], ["add", "theorem", "supr_subtype", []], ["add", "theorem", "supr_sum", []], ["add", "theorem", "supr_sup_eq", []], ["add", "theorem", "supr_supr_eq_left", []], ["add", "theorem", "supr_supr_eq_right", []], ["add", "theorem", "supr_true", []], ["add", "theorem", "supr_union", []], ["add", "theorem", "supr_unit", []], ["add", "theorem", "supr_univ", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "Inf_nat_def", []], ["add", "theorem", "Sup_nat_def", []], ["add", "theorem", "cInf_Ici", []], ["add", "theorem", "cInf_insert", []], ["add", "theorem", "cInf_intro", []], ["add", "theorem", "cInf_le", []], ["add", "theorem", "cInf_le_cInf", []], ["add", "theorem", "cInf_le_cSup", []], ["add", "theorem", "cInf_le_of_le", []], ["add", "theorem", "cInf_lt_of_lt", []], ["add", "theorem", "cInf_singleton", []], ["add", "theorem", "cInf_union", []], ["add", "theorem", "cInf_upper_bounds_eq_cSup", []], ["add", "theorem", "cSup_Iic", []], ["add", "theorem", "cSup_empty", []], ["add", "theorem", "cSup_insert", []], ["add", "theorem", "cSup_inter_le", []], ["add", "theorem", "cSup_intro'", []], ["add", "theorem", "cSup_intro", []], ["add", "theorem", "cSup_le", []], ["add", "theorem", "cSup_le_cSup", []], ["add", "theorem", "cSup_le_iff", []], ["add", "theorem", "cSup_lower_bounds_eq_cInf", []], ["add", "theorem", "cSup_singleton", []], ["add", "theorem", "cSup_union", []], ["add", "theorem", "cinfi_const", []], ["add", "theorem", "cinfi_le", []], ["add", "theorem", "cinfi_le_cinfi", []], ["add", "theorem", "csupr_const", []], ["add", "theorem", "csupr_le", []], ["add", "theorem", "csupr_le_csupr", []], ["add", "theorem", "exists_lt_of_cInf_lt", []], ["add", "theorem", "exists_lt_of_cinfi_lt", []], ["add", "theorem", "exists_lt_of_lt_cSup", []], ["add", "theorem", "exists_lt_of_lt_csupr", []], ["add", "theorem", "cInf_eq", ["is_glb"]], ["add", "theorem", "is_glb_cInf", []], ["add", "theorem", "cSup_eq", ["is_greatest"]], ["add", "theorem", "cInf_eq", ["is_least"]], ["add", "theorem", "cSup_eq", ["is_lub"]], ["add", "theorem", "is_lub_cSup", []], ["del", "theorem", "Inf_nat_def", ["lattice"]], ["del", "theorem", "Sup_nat_def", ["lattice"]], ["del", "theorem", "cInf_Ici", ["lattice"]], ["del", "theorem", "cInf_insert", ["lattice"]], ["del", "theorem", "cInf_intro", ["lattice"]], ["del", "theorem", "cInf_le", ["lattice"]], ["del", "theorem", "cInf_le_cInf", ["lattice"]], ["del", "theorem", "cInf_le_cSup", ["lattice"]], ["del", "theorem", "cInf_le_of_le", ["lattice"]], ["del", "theorem", "cInf_lt_of_lt", ["lattice"]], ["del", "theorem", "cInf_singleton", ["lattice"]], ["del", "theorem", "cInf_union", ["lattice"]], ["del", "theorem", "cInf_upper_bounds_eq_cSup", ["lattice"]], ["del", "theorem", "cSup_Iic", ["lattice"]], ["del", "theorem", "cSup_empty", ["lattice"]], ["del", "theorem", "cSup_insert", ["lattice"]], ["del", "theorem", "cSup_inter_le", ["lattice"]], ["del", "theorem", "cSup_intro'", ["lattice"]], ["del", "theorem", "cSup_intro", ["lattice"]], ["del", "theorem", "cSup_le", ["lattice"]], ["del", "theorem", "cSup_le_cSup", ["lattice"]], ["del", "theorem", "cSup_le_iff", ["lattice"]], ["del", "theorem", "cSup_lower_bounds_eq_cInf", ["lattice"]], ["del", "theorem", "cSup_singleton", ["lattice"]], ["del", "theorem", "cSup_union", ["lattice"]], ["del", "theorem", "cinfi_const", ["lattice"]], ["del", "theorem", "cinfi_le", ["lattice"]], ["del", "theorem", "cinfi_le_cinfi", ["lattice"]], ["del", "theorem", "csupr_const", ["lattice"]], ["del", "theorem", "csupr_le", ["lattice"]], ["del", "theorem", "csupr_le_csupr", ["lattice"]], ["del", "theorem", "exists_lt_of_cInf_lt", ["lattice"]], ["del", "theorem", "exists_lt_of_cinfi_lt", ["lattice"]], ["del", "theorem", "exists_lt_of_lt_cSup", ["lattice"]], ["del", "theorem", "exists_lt_of_lt_csupr", ["lattice"]], ["del", "theorem", "is_glb_cInf", ["lattice"]], ["del", "theorem", "is_lub_cSup", ["lattice"]], ["del", "theorem", "le_cInf", ["lattice"]], ["del", "theorem", "le_cInf_iff", ["lattice"]], ["del", "theorem", "le_cInf_inter", ["lattice"]], ["del", "theorem", "le_cSup", ["lattice"]], ["del", "theorem", "le_cSup_of_le", ["lattice"]], ["del", "theorem", "le_cinfi", ["lattice"]], ["del", "theorem", "le_csupr", ["lattice"]], ["del", "theorem", "lt_cSup_of_lt", ["lattice"]], ["add", "theorem", "le_cInf", []], ["add", "theorem", "le_cInf_iff", []], ["add", "theorem", "le_cInf_inter", []], ["add", "theorem", "le_cSup", []], ["add", "theorem", "le_cSup_of_le", []], ["add", "theorem", "le_cinfi", []], ["add", "theorem", "le_csupr", []], ["add", "theorem", "lt_cSup_of_lt", []]]}, {"oldPath": "src/order/copy.lean", "newPath": "src/order/copy.lean", "changes": [["add", "def", "copy", ["bounded_lattice"]], ["add", "def", "copy", ["complete_distrib_lattice"]], ["add", "def", "copy", ["complete_lattice"]], ["add", "def", "copy", ["conditionally_complete_lattice"]], ["add", "def", "copy", ["distrib_lattice"]], ["del", "def", "copy", ["lattice", "bounded_lattice"]], ["del", "def", "copy", ["lattice", "complete_distrib_lattice"]], ["del", "def", "copy", ["lattice", "complete_lattice"]], ["del", "def", "copy", ["lattice", "conditionally_complete_lattice"]], ["del", "def", "copy", ["lattice", "distrib_lattice"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": [["add", "theorem", "Sup_le_f_of_fixed_points", ["fixed_points"]], ["add", "theorem", "f_le_Inf_of_fixed_points", ["fixed_points"]], ["add", "theorem", "f_le_inf_of_fixed_points", ["fixed_points"]], ["add", "def", "next", ["fixed_points"]], ["add", "theorem", "next_eq", ["fixed_points"]], ["add", "def", "next_fixed", ["fixed_points"]], ["add", "theorem", "next_le", ["fixed_points"]], ["add", "def", "prev", ["fixed_points"]], ["add", "theorem", "prev_eq", ["fixed_points"]], ["add", "def", "prev_fixed", ["fixed_points"]], ["add", "theorem", "prev_le", ["fixed_points"]], ["add", "theorem", "sup_le_f_of_fixed_points", ["fixed_points"]], ["add", "def", "fixed_points", []], ["add", "def", "gfp", []], ["add", "theorem", "gfp_comp", []], ["add", "theorem", "gfp_eq", []], ["add", "theorem", "gfp_gfp", []], ["add", "theorem", "gfp_induct", []], ["add", "theorem", "gfp_le", []], ["del", "theorem", "Sup_le_f_of_fixed_points", ["lattice", "fixed_points"]], ["del", "theorem", "f_le_Inf_of_fixed_points", ["lattice", "fixed_points"]], ["del", "theorem", "f_le_inf_of_fixed_points", ["lattice", "fixed_points"]], ["del", "def", "next", ["lattice", "fixed_points"]], ["del", "theorem", "next_eq", ["lattice", "fixed_points"]], ["del", "def", "next_fixed", ["lattice", "fixed_points"]], ["del", "theorem", "next_le", ["lattice", "fixed_points"]], ["del", "def", "prev", ["lattice", "fixed_points"]], ["del", "theorem", "prev_eq", ["lattice", "fixed_points"]], ["del", "def", "prev_fixed", ["lattice", "fixed_points"]], ["del", "theorem", "prev_le", ["lattice", "fixed_points"]], ["del", "theorem", "sup_le_f_of_fixed_points", ["lattice", "fixed_points"]], ["del", "def", "fixed_points", ["lattice"]], ["del", "def", "gfp", ["lattice"]], ["del", "theorem", "gfp_comp", ["lattice"]], ["del", "theorem", "gfp_eq", ["lattice"]], ["del", "theorem", "gfp_gfp", ["lattice"]], ["del", "theorem", "gfp_induct", ["lattice"]], ["del", "theorem", "gfp_le", ["lattice"]], ["del", "theorem", "le_gfp", ["lattice"]], ["del", "theorem", "le_lfp", ["lattice"]], ["del", "def", "lfp", ["lattice"]], ["del", "theorem", "lfp_comp", ["lattice"]], ["del", "theorem", "lfp_eq", ["lattice"]], ["del", "theorem", "lfp_induct", ["lattice"]], ["del", "theorem", "lfp_le", ["lattice"]], ["del", "theorem", "lfp_lfp", ["lattice"]], ["del", "theorem", "monotone_gfp", ["lattice"]], ["del", "theorem", "monotone_lfp", ["lattice"]], ["add", "theorem", "le_gfp", []], ["add", "theorem", "le_lfp", []], ["add", "def", "lfp", []], ["add", "theorem", "lfp_comp", []], ["add", "theorem", "lfp_eq", []], ["add", "theorem", "lfp_induct", []], ["add", "theorem", "lfp_le", []], ["add", "theorem", "lfp_lfp", []], ["add", "theorem", "monotone_gfp", []], ["add", "theorem", "monotone_lfp", []]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "directed_of_inf", []], ["add", "theorem", "directed_of_mono", []], ["add", "theorem", "directed_of_sup", []], ["add", "theorem", "eq_of_sup_eq_inf_eq", []], ["add", "theorem", "forall_le_or_exists_lt_inf", []], ["add", "theorem", "forall_le_or_exists_lt_sup", []], ["add", "theorem", "inf_assoc", []], ["add", "theorem", "inf_comm", []], ["add", "theorem", "inf_eq_min", []], ["add", "theorem", "inf_idem", []], ["add", "theorem", "inf_le_inf", []], ["add", "theorem", "inf_le_inf_left", []], ["add", "theorem", "inf_le_inf_right", []], ["add", "theorem", "inf_le_left'", []], ["add", "theorem", "inf_le_left", []], ["add", "theorem", "inf_le_left_of_le", []], ["add", "theorem", "inf_le_right'", []], ["add", "theorem", "inf_le_right", []], ["add", "theorem", "inf_le_right_of_le", []], ["add", "theorem", "inf_left_comm", []], ["add", "theorem", "inf_of_le_left", []], ["add", "theorem", "inf_of_le_right", []], ["add", "theorem", "inf_sup_left", []], ["add", "theorem", "inf_sup_right", []], ["add", "theorem", "inf_sup_self", []], ["del", "theorem", "directed_of_antimono", ["lattice"]], ["del", "theorem", "directed_of_inf", ["lattice"]], ["del", "theorem", "directed_of_mono", ["lattice"]], ["del", "theorem", "directed_of_sup", ["lattice"]], ["del", "theorem", "eq_of_sup_eq_inf_eq", ["lattice"]], ["mod", "theorem", "ext", ["lattice"]], ["del", "theorem", "forall_le_or_exists_lt_inf", ["lattice"]], ["del", "theorem", "forall_le_or_exists_lt_sup", ["lattice"]], ["del", "theorem", "inf_assoc", ["lattice"]], ["del", "theorem", "inf_comm", ["lattice"]], ["del", "theorem", "inf_eq_min", ["lattice"]], ["del", "theorem", "inf_idem", ["lattice"]], ["del", "theorem", "inf_le_inf", ["lattice"]], ["del", "theorem", "inf_le_inf_left", ["lattice"]], ["del", "theorem", "inf_le_inf_right", ["lattice"]], ["del", "theorem", "inf_le_left'", ["lattice"]], ["del", "theorem", "inf_le_left", ["lattice"]], ["del", "theorem", "inf_le_left_of_le", ["lattice"]], ["del", "theorem", "inf_le_right'", ["lattice"]], ["del", "theorem", "inf_le_right", ["lattice"]], ["del", "theorem", "inf_le_right_of_le", ["lattice"]], ["del", "theorem", "inf_left_comm", ["lattice"]], ["del", "theorem", "inf_of_le_left", ["lattice"]], ["del", "theorem", "inf_of_le_right", ["lattice"]], ["del", "theorem", "inf_sup_left", ["lattice"]], ["del", "theorem", "inf_sup_right", ["lattice"]], ["del", "theorem", "inf_sup_self", ["lattice"]], ["del", "theorem", "le_inf", ["lattice"]], ["del", "theorem", "le_inf_iff", ["lattice"]], ["del", "theorem", "le_inf_sup", ["lattice"]], ["del", "theorem", "le_of_inf_eq", ["lattice"]], ["del", "theorem", "le_of_sup_eq", ["lattice"]], ["del", "theorem", "le_sup_inf", ["lattice"]], ["del", "theorem", "le_sup_left'", ["lattice"]], ["del", "theorem", "le_sup_left", ["lattice"]], ["del", "theorem", "le_sup_left_of_le", ["lattice"]], ["del", "theorem", "le_sup_right'", ["lattice"]], ["del", "theorem", "le_sup_right", ["lattice"]], ["del", "theorem", "le_sup_right_of_le", ["lattice"]], ["del", "theorem", "lt_inf_iff", ["lattice"]], ["del", "theorem", "ext", ["lattice", "semilattice_inf"]], ["del", "theorem", "ext_inf", ["lattice", "semilattice_inf"]], ["del", "theorem", "ext", ["lattice", "semilattice_sup"]], ["del", "theorem", "ext_sup", ["lattice", "semilattice_sup"]], ["del", "theorem", "sup_assoc", ["lattice"]], ["del", "theorem", "sup_comm", ["lattice"]], ["del", "theorem", "sup_eq_max", ["lattice"]], ["del", "theorem", "sup_idem", ["lattice"]], ["del", "theorem", "sup_inf_le", ["lattice"]], ["del", "theorem", "sup_inf_left", ["lattice"]], ["del", "theorem", "sup_inf_right", ["lattice"]], ["del", "theorem", "sup_inf_self", ["lattice"]], ["del", "theorem", "sup_le", ["lattice"]], ["del", "theorem", "sup_le_iff", ["lattice"]], ["del", "theorem", "sup_le_sup", ["lattice"]], ["del", "theorem", "sup_le_sup_left", ["lattice"]], ["del", "theorem", "sup_le_sup_right", ["lattice"]], ["del", "theorem", "sup_left_comm", ["lattice"]], ["del", "theorem", "sup_lt_iff", ["lattice"]], ["del", "theorem", "sup_of_le_left", ["lattice"]], ["del", "theorem", "sup_of_le_right", ["lattice"]], ["mod", "theorem", "le_antisymm'", []], ["add", "theorem", "le_inf", []], ["add", "theorem", "le_inf_iff", []], ["add", "theorem", "le_inf_sup", []], ["add", "theorem", "le_of_inf_eq", []], ["add", "theorem", "le_of_sup_eq", []], ["add", "theorem", "le_sup_inf", []], ["add", "theorem", "le_sup_left'", []], ["add", "theorem", "le_sup_left", []], ["add", "theorem", "le_sup_left_of_le", []], ["add", "theorem", "le_sup_right'", []], ["add", "theorem", "le_sup_right", []], ["add", "theorem", "le_sup_right_of_le", []], ["add", "theorem", "lt_inf_iff", []], ["add", "theorem", "ext", ["semilattice_inf"]], ["add", "theorem", "ext_inf", ["semilattice_inf"]], ["add", "theorem", "ext", ["semilattice_sup"]], ["add", "theorem", "ext_sup", ["semilattice_sup"]], ["add", "theorem", "sup_assoc", []], ["add", "theorem", "sup_comm", []], ["add", "theorem", "sup_eq_max", []], ["add", "theorem", "sup_idem", []], ["add", "theorem", "sup_inf_le", []], ["add", "theorem", "sup_inf_left", []], ["add", "theorem", "sup_inf_right", []], ["add", "theorem", "sup_inf_self", []], ["add", "theorem", "sup_le", []], ["add", "theorem", "sup_le_iff", []], ["add", "theorem", "sup_le_sup", []], ["add", "theorem", "sup_le_sup_left", []], ["add", "theorem", "sup_le_sup_right", []], ["add", "theorem", "sup_left_comm", []], ["add", "theorem", "sup_lt_iff", []], ["add", "theorem", "sup_of_le_left", []], ["add", "theorem", "sup_of_le_right", []]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/fractional_ideal.lean", "newPath": "src/ring_theory/fractional_ideal.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": [["del", "theorem", "Inf_image", []], ["del", "theorem", "Sup_image", []]]}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/local_extr.lean", "newPath": "src/topology/local_extr.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/absolute_value.lean", "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1584615584, "sha": "a20f378f", "message": "chore(category_theory/images): fix some minor problems (#2182)\n* chore(category_theory/images): fix some minor problems\n* minor\n* oops, misplaced comment", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "theorem", "as_factor_thru_image", ["category_theory", "limits"]], ["del", "theorem", "as_c", ["category_theory", "limits", "image"]], ["del", "def", "c", ["category_theory", "limits", "image"]], ["del", "theorem", "c_ι", ["category_theory", "limits", "image"]]]}]}, {"timestamp": 1584607613, "sha": "4bc32ae4", "message": "feat(category_theory): regular monos (#2154)\n* feat(category_theory): regular and normal monos\n* fixes\n* Apply suggestions from code review\nCo-Authored-By: Markus Himmel \n* shorter proofs\n* typos, thanks\nCo-Authored-By: Markus Himmel \n* Update src/category_theory/limits/shapes/regular_mono.lean\nCo-Authored-By: Markus Himmel \n* linting", "changes": [{"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "epi_of_is_colimit_parallel_pair", ["category_theory", "limits"]], ["add", "theorem", "mono_of_is_limit_parallel_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/regular_mono.lean", "changes": []}]}, {"timestamp": 1584598709, "sha": "445e3320", "message": "chore(category_theory/isomorphism): use @[simps] (#2181)", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "def", "refl", ["category_theory", "iso"]], ["del", "theorem", "refl_hom", ["category_theory", "iso"]], ["del", "theorem", "refl_inv", ["category_theory", "iso"]], ["mod", "def", "trans", ["category_theory", "iso"]], ["del", "theorem", "trans_hom", ["category_theory", "iso"]], ["del", "theorem", "trans_inv", ["category_theory", "iso"]]]}]}, {"timestamp": 1584589649, "sha": "e2b0e387", "message": "chore(category_theory/binary_products): tweak spacing in notation (#2184)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}]}, {"timestamp": 1584580364, "sha": "034685b9", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584575491, "sha": "00d9f1de", "message": "feat(topology/algebra/infinite_sum): dot notation, cauchy sequences (#2171)\n* more material on infinite sums\n* minor fixes\n* cleanup\n* yury's comments", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "cauchy_seq_finset_iff_vanishing_norm", []], ["add", "theorem", "cauchy_seq_finset_of_norm_bounded", []], ["add", "theorem", "cauchy_seq_finset_of_summable_norm", []], ["add", "theorem", "edist_eq_coe_nnnorm_sub", []], ["add", "theorem", "has_sum_of_subseq_of_summable", []], ["mod", "theorem", "summable_iff_vanishing_norm", []], ["add", "theorem", "summable_of_nnnorm_bounded", []], ["mod", "theorem", "summable_of_norm_bounded", []], ["add", "theorem", "summable_of_summable_nnnorm", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "cauchy_seq_finset_of_geometric_bound", []], ["add", "theorem", "dist_partial_sum_le_of_le_geometric", []], ["add", "theorem", "tendsto_const_div_at_top_nhds_0_nat", ["nnreal"]], ["add", "theorem", "tendsto_inverse_at_top_nhds_0_nat", ["nnreal"]], ["add", "theorem", "norm_sub_le_of_geometric_bound_of_has_sum", []]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "def", "cases_on'", ["option"]]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "theorem", "summable_coe", ["pmf"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "cauchy_seq_finset_iff_vanishing", []], ["add", "theorem", "has_sum_iff", ["equiv"]], ["add", "theorem", "summable_iff", ["equiv"]], ["add", "theorem", "add", ["has_sum"]], ["add", "theorem", "has_sum_ne_zero", ["has_sum"]], ["add", "theorem", "has_sum_of_sum_eq", ["has_sum"]], ["add", "theorem", "mul_left", ["has_sum"]], ["add", "theorem", "mul_right", ["has_sum"]], ["add", "theorem", "neg", ["has_sum"]], ["add", "theorem", "sigma", ["has_sum"]], ["add", "theorem", "sigma_of_has_sum", ["has_sum"]], ["add", "theorem", "sub", ["has_sum"]], ["add", "theorem", "summable", ["has_sum"]], ["add", "theorem", "tendsto_sum_nat", ["has_sum"]], ["del", "theorem", "has_sum_add", []], ["del", "theorem", "has_sum_iff_of_summable", []], ["del", "theorem", "has_sum_mul_left", []], ["add", "theorem", "has_sum_mul_left_iff", []], ["del", "theorem", "has_sum_mul_right", []], ["add", "theorem", "has_sum_mul_right_iff", []], ["del", "theorem", "has_sum_neg", []], ["del", "theorem", "has_sum_of_has_sum", []], ["del", "theorem", "has_sum_of_has_sum_ne_zero", []], ["del", "theorem", "has_sum_sigma", []], ["del", "theorem", "has_sum_sub", []], ["del", "theorem", "has_sum_tsum", []], ["mod", "theorem", "has_sum_unique", []], ["del", "def", "cases_on'", ["option"]], ["add", "theorem", "add", ["summable"]], ["add", "theorem", "has_sum", ["summable"]], ["add", "theorem", "has_sum_iff", ["summable"]], ["add", "theorem", "mul_left", ["summable"]], ["add", "theorem", "mul_right", ["summable"]], ["add", "theorem", "neg", ["summable"]], ["add", "theorem", "sigma'", ["summable"]], ["add", "theorem", "sigma", ["summable"]], ["add", "theorem", "sigma_factor", ["summable"]], ["add", "theorem", "sub", ["summable"]], ["add", "theorem", "summable_comp_of_injective", ["summable"]], ["add", "theorem", "summable_of_eq_zero_or_self", ["summable"]], ["del", "theorem", "summable_add", []], ["del", "theorem", "summable_comp_of_summable_of_injective", []], ["del", "theorem", "summable_iff_cauchy", []], ["add", "theorem", "summable_iff_cauchy_seq_finset", []], ["del", "theorem", "summable_mul_left", []], ["add", "theorem", "summable_mul_left_iff", []], ["del", "theorem", "summable_mul_right", []], ["add", "theorem", "summable_mul_right_iff", []], ["del", "theorem", "summable_neg", []], ["del", "theorem", "summable_of_summable_of_sub", []], ["del", "theorem", "summable_sigma", []], ["del", "theorem", "summable_spec", []], ["del", "theorem", "summable_sub", []], ["mod", "theorem", "summable_zero", []], ["del", "theorem", "tendsto_sum_nat_of_has_sum", []], ["mod", "theorem", "tsum_eq_has_sum", []], ["add", "theorem", "tsum_eq_zero_of_not_summable", []], ["add", "theorem", "tsum_le_tsum_of_inj", []], ["add", "theorem", "tsum_nonneg", []], ["add", "theorem", "tsum_nonpos", []], ["add", "theorem", "tsum_sigma'", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tsum_comp_le_tsum_of_inj", ["nnreal"]], ["add", "theorem", "tsum_comp_le_tsum_of_inj", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "tendsto_nhds_of_cauchy_seq_of_subseq", []]]}]}, {"timestamp": 1584566062, "sha": "e719f8ee", "message": "chore(*): switch to lean 3.7.1c (#2106)\n* fix(deprecated/group): remove dangerous instances\n* Update Lean version to nightly.\n* Remove composition instances for group homomorphisms.\n* Remove dangerous is_submonoid instances.\n* Flip instance arguments.\n* Various Lean 3.7 fixes.\n* Correctly use lemma.\n* Use new elan 0.8.0 lean version name.\n* Remove dangerous *.comp instances.\n* Fix comp instance fallout.\n* Fix more *.comp fallout\n* Fix more *.comp fallout.\n* More *.comp fallout.\n* Fix *.comp fallout\n* Fix *.comp fallout\n* Port to has_attribute and copy_attribute changes.\n* Fix monad_writer_adapter_trans instance.\n* Revert 3.6 hacks.\n* Update library note for *.comp morphisms.\n* fix(scripts/deploy_docs.sh): use lean_version from mathlib leanpkg.toml\n* Do not mention is_mul_hom.mul in library note.\n* Update lean version to 3.7.0.\n* Remove of_tactic'\n* switch to 3.7.1c", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": [["mod", "theorem", "unique", ["direct_sum", "to_group"]]]}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "comp", ["is_ring_hom"]], ["add", "theorem", "comp", ["is_semiring_hom"]]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["mod", "def", "has_limits_of_reflective", ["category_theory"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": [["add", "theorem", "comp", ["is_group_hom"]], ["add", "theorem", "comp", ["is_monoid_hom"]], ["add", "theorem", "comp", ["is_mul_hom"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "is_add_submonoid", ["additive"]], ["add", "theorem", "is_submonoid", ["multiplicative"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/transport.lean", "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "comp_hom", ["add_comm_group", "is_Z_bilin"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1584556566, "sha": "69f7bf86", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584551084, "sha": "5f62d3bb", "message": "feat(topology/bounded_continuous_functions): more general uniform convergence (#2165)\n* feat(topology/buonded_continuous_functions): more general uniform convergence\n* yury's comments", "changes": [{"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["mod", "def", "bounded_continuous_function", []], ["add", "theorem", "continuous_at_of_locally_uniform_limit_of_continuous_at", []], ["mod", "theorem", "continuous_of_locally_uniform_limit_of_continuous", []], ["mod", "theorem", "continuous_of_uniform_limit_of_continuous", []], ["add", "theorem", "continuous_on_of_locally_uniform_limit_of_continuous_on", []], ["add", "theorem", "continuous_on_of_uniform_limit_of_continuous_on", []], ["add", "theorem", "continuous_within_at_of_locally_uniform_limit_of_continuous_within_at", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_at", ["continuous_on"]], ["add", "theorem", "continuous_within_at", ["continuous_on"]], ["add", "theorem", "continuous_on_empty", []], ["mod", "theorem", "continuous_on_iff_is_closed", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ball_zero", ["metric"]], ["add", "theorem", "continuous_at_iff'", ["metric"]], ["add", "theorem", "continuous_on_iff'", ["metric"]], ["add", "theorem", "continuous_on_iff", ["metric"]], ["add", "theorem", "continuous_within_at_iff'", ["metric"]], ["add", "theorem", "continuous_within_at_iff", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "ball_zero", ["emetric"]]]}]}, {"timestamp": 1584543337, "sha": "739e831f", "message": "feat(analysis/complex/exponential): real powers of nnreals (#2164)\n* feat(analysis/complex/exponential): real powers of nnreals\n* cleanup\n* mean inequalities in nnreal\n* mean inequalities\n* use < instead of >\n* reviewer's comments", "changes": [{"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "cpow_eq_pow", ["complex"]], ["add", "theorem", "cpow_eq_zero_iff", ["complex"]], ["add", "theorem", "nnrpow", ["filter", "tendsto"]], ["add", "theorem", "coe_rpow", ["nnreal"]], ["add", "theorem", "continuous_at_rpow", ["nnreal"]], ["add", "theorem", "mul_rpow", ["nnreal"]], ["add", "theorem", "one_le_rpow", ["nnreal"]], ["add", "theorem", "one_lt_rpow", ["nnreal"]], ["add", "theorem", "one_rpow", ["nnreal"]], ["add", "theorem", "pow_nat_rpow_nat_inv", ["nnreal"]], ["add", "theorem", "rpow_add", ["nnreal"]], ["add", "theorem", "rpow_eq_pow", ["nnreal"]], ["add", "theorem", "rpow_eq_zero_iff", ["nnreal"]], ["add", "theorem", "rpow_le_one", ["nnreal"]], ["add", "theorem", "rpow_le_rpow", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["nnreal"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["nnreal"]], ["add", "theorem", "rpow_lt_one", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["nnreal"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["nnreal"]], ["add", "theorem", "rpow_mul", ["nnreal"]], ["add", "theorem", "rpow_nat_cast", ["nnreal"]], ["add", "theorem", "rpow_nat_inv_pow_nat", ["nnreal"]], ["add", "theorem", "rpow_neg", ["nnreal"]], ["add", "theorem", "rpow_one", ["nnreal"]], ["add", "theorem", "rpow_zero", ["nnreal"]], ["add", "theorem", "zero_rpow", ["nnreal"]], ["add", "theorem", "continuous_at_rpow", ["real"]], ["add", "theorem", "rpow_eq_pow", ["real"]], ["add", "theorem", "rpow_eq_zero_iff_of_nonneg", ["real"]], ["add", "theorem", "rpow_nat_inv_pow_nat", ["real"]]]}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}]}, {"timestamp": 1584501542, "sha": "f07a1ebf", "message": "feat(category_theory): images in Ab and Type (#2101)\n* not stacked on top of limits/colimits\n* comment\n* add ext to add_monoid_hom.ext\n* fix\n* cleanup\n* suggestions from review\n* fix\n* use more existing structure\n* fix names\n* oops\n* linter", "changes": [{"oldPath": "src/algebra/category/Group/adjunctions.lean", "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": [["mod", "def", "adj", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/category/Group/basic.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["add", "def", "as_hom", ["AddCommGroup"]], ["add", "theorem", "as_hom_apply", ["AddCommGroup"]], ["add", "theorem", "as_hom_injective", ["AddCommGroup"]], ["add", "theorem", "injective_of_mono", ["AddCommGroup"]], ["add", "theorem", "int_hom_ext", ["AddCommGroup"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Group/images.lean", "changes": [["add", "def", "factor_thru_image", ["AddCommGroup"]], ["add", "theorem", "fac", ["AddCommGroup", "image"]], ["add", "theorem", "lift_fac", ["AddCommGroup", "image"]], ["add", "def", "ι", ["AddCommGroup", "image"]], ["add", "def", "image", ["AddCommGroup"]], ["add", "def", "mono_factorisation", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "gsmul_int_int", []], ["add", "theorem", "gsmul_int_one", []]]}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["add", "theorem", "hom_ext", ["category_theory", "concrete_category"]], ["add", "theorem", "mono_of_injective", ["category_theory", "concrete_category"]]]}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["add", "theorem", "lift_fac", ["category_theory", "limits", "types", "image"]], ["add", "def", "ι", ["category_theory", "limits", "types", "image"]], ["add", "def", "image", ["category_theory", "limits", "types"]], ["add", "def", "mono_factorisation", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "def", "range_factorization", ["monoid_hom"]], ["add", "def", "range_subtype_val", ["monoid_hom"]]]}]}, {"timestamp": 1584489813, "sha": "6af37d37", "message": "fix(category_theory/limits): require explicit instances of has_zero_morphisms (#2169)\n* fix(category_theory/limits): require explicit instances of has_zero_morphisms\n* Fix unused arguments", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": []}]}, {"timestamp": 1584456588, "sha": "422f6400", "message": "fix(scripts/mk_nolint): fix error introduced by #2090 (#2170)", "changes": [{"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}]}, {"timestamp": 1584416312, "sha": "e94fef01", "message": "feat(lint): run some linters on automatically generated declarations (#2090)\n* style(lint): remove double periods\nremove spacing in the OK-results of #lint\nadd newline after ever failed result of #lint_mathlib (1 newline between two files, 2 newlines between two linters)\n* run some linters on automatically generated declarations\n* fix doc string\n* fix mk_nolint\n* fix test\n* fix linter errors\nalso explain how to fix linter errors for automatically generated declarations\n* fix linter errors", "changes": [{"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": []}, {"oldPath": "src/data/fin_enum.lean", "newPath": "src/data/fin_enum.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1584408711, "sha": "496939ce", "message": "feat(data/real/*nnreal): add division lemmas (#2167)\n* feat(data/real/*nnreal): add division lemmas\n* fix build\n* elim_cast\n* another elim_cast", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["del", "theorem", "coe_sub_infty", ["ennreal"]], ["add", "theorem", "div_eq_top", ["ennreal"]], ["mod", "theorem", "div_le_iff_le_mul", ["ennreal"]], ["add", "theorem", "div_one", ["ennreal"]], ["mod", "theorem", "le_div_iff_mul_le", ["ennreal"]], ["add", "theorem", "lt_iff_exists_add_pos_lt", ["ennreal"]], ["add", "theorem", "lt_sub_iff_add_lt", ["ennreal"]], ["add", "theorem", "mul_div_assoc", ["ennreal"]], ["mod", "theorem", "none_eq_top", ["ennreal"]], ["mod", "theorem", "some_eq_coe", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "add_div'", ["nnreal"]], ["add", "theorem", "coe_ne_zero", ["nnreal"]], ["add", "theorem", "div_add'", ["nnreal"]], ["add", "theorem", "div_add_div", ["nnreal"]], ["add", "theorem", "div_div_eq_div_mul", ["nnreal"]], ["add", "theorem", "div_div_eq_mul_div", ["nnreal"]], ["add", "theorem", "div_eq_div_iff", ["nnreal"]], ["add", "theorem", "div_eq_iff", ["nnreal"]], ["add", "theorem", "div_eq_mul_one_div", ["nnreal"]], ["add", "theorem", "div_lt_iff", ["nnreal"]], ["add", "theorem", "div_lt_one_of_lt", ["nnreal"]], ["add", "theorem", "div_mul_eq_mul_div", ["nnreal"]], ["add", "theorem", "div_pow", ["nnreal"]], ["add", "theorem", "eq_div_iff", ["nnreal"]], ["add", "theorem", "inv_eq_one_div", ["nnreal"]], ["add", "theorem", "lt_sub_iff_add_lt", ["nnreal"]], ["add", "theorem", "mul_div_assoc'", ["nnreal"]], ["add", "theorem", "mul_ne_zero'", ["nnreal"]], ["add", "theorem", "one_div_div", ["nnreal"]], ["add", "theorem", "one_div_eq_inv", ["nnreal"]], ["add", "theorem", "pow_eq_zero", ["nnreal"]], ["add", "theorem", "pow_ne_zero", ["nnreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1584400604, "sha": "4754368c", "message": "feat(category_theory): split epis and monos, and a result about (co)projections (#2146)\n* feat(category_theory): split epis and monos, and a result about (co)projections\n* rearranging\n* reviewers' suggestions\n* A split mono `f` equalizes `(retraction f ≫ f)` and `(𝟙 Y)`.\n* fix\n* cleanup\n* split_epi_coequalizes\n* fix\n* cleanup\n* reduce priorities\n* Update src/category_theory/epi_mono.lean\nCo-Authored-By: Yury G. Kudryashov \n* Update src/category_theory/epi_mono.lean", "changes": [{"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": [["add", "def", "retraction", ["category_theory"]], ["add", "def", "section_", ["category_theory"]], ["add", "theorem", "id", ["category_theory", "split_epi"]], ["add", "theorem", "id", ["category_theory", "split_mono"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "cocone_of_split_epi", ["category_theory", "limits"]], ["add", "theorem", "cocone_of_split_epi_ι_app_one", ["category_theory", "limits"]], ["add", "theorem", "cocone_of_split_epi_ι_app_zero", ["category_theory", "limits"]], ["add", "def", "cone_of_split_mono", ["category_theory", "limits"]], ["add", "theorem", "cone_of_split_mono_π_app_one", ["category_theory", "limits"]], ["add", "theorem", "cone_of_split_mono_π_app_zero", ["category_theory", "limits"]], ["add", "theorem", "parallel_pair_obj_one", ["category_theory", "limits"]], ["add", "theorem", "parallel_pair_obj_zero", ["category_theory", "limits"]], ["add", "def", "split_epi_coequalizes", ["category_theory", "limits"]], ["add", "def", "split_mono_equalizes", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/zero.lean", "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["del", "def", "zero_of_zero_object", ["category_theory", "limits"]]]}]}, {"timestamp": 1584393740, "sha": "bc087d82", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584389057, "sha": "7a5496f6", "message": "chore(order/liminf_limsup): lint and cleanup the file (#2162)\n* chore(order/liminf_limsup): lint and cleanup the file, add some statements\n* use eventually_mono", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "congr", ["filter", "eventually"]], ["add", "theorem", "congr_iff", ["filter", "eventually"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "theorem", "Liminf_le_Limsup", ["filter"]], ["mod", "theorem", "Limsup_le_of_le", ["filter"]], ["add", "theorem", "eventually_lt_of_limsup_lt", ["filter"]], ["add", "theorem", "eventually_lt_of_lt_liminf", ["filter"]], ["mod", "theorem", "le_Liminf_of_le", ["filter"]], ["add", "theorem", "liminf_congr", ["filter"]], ["add", "theorem", "liminf_const", ["filter"]], ["add", "theorem", "limsup_congr", ["filter"]], ["add", "theorem", "limsup_const", ["filter"]]]}]}, {"timestamp": 1584386571, "sha": "007b575c", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584381092, "sha": "42b92aaa", "message": "feat(tactic): command for adding tactic, command, and attribute documentation (#2114)\n* chore(*): switch to lean 3.6.0\n* begin tactic_doc command\n* merge add_tactic_doc with library_note\n* fix library_note imports\n* undo accidental revert\n* better attribute description\n* unneeded to_expr\n* fix doc string attribution\n* unicode input error\nCo-Authored-By: Bryan Gin-ge Chen \n* display and collect doc entries\n* missing doc string\n* update for lean 3.6\n* document core tactics\nI considered adding these as doc strings in core. But the entry for `conv` mentions mathlib-specific things.\n* move tfae and rcases docs\n* move rintros and obtain\n* simpa\n* move part of tactic.interactive\n* move more of tactic.interactive\n* finish tactic.interactive\n* move omega\n* move renaming tactics\n* move more\n* move norm_cast\n* more\n* move more\n* doc commands in core + docstring tweaks\n* abel, alias, cache\n* elide, finish\n* hint, linearith, pi_instances\n* norm_num, rewrite\n* ring, ring_exp\n* solve_by_elim, suggest\n* doc_commands, rcases\n* ext\n* explode, find\n* lint\n* tidy\n* localized\n* reassoc_axiom, replacer, restate_axiom, where\n* simps\n* markdown files\n* interactive\n* new additions\n* revert changes to md files\n* fix merge\n* allow entries with different categories to share the same name\n* better error messages\n* fix merge\n* linter errors\n* use derive handler for inhabited instances\n* shorten doc entry names after category fix\n* copy simp.md to doc entry, tag: \"simp\" -> \"simplification\"\n* update add_tactic_doc_command docstring and doc.md\n* simp doc entry changed to its doc string\n* Apply suggestions from code review\n* doc: horizontal rules must be surrounded by new lines\n* address reviewer suggestions\n* Update docs/contribute/doc.md\nCo-Authored-By: Gabriel Ebner \n* fix add_tactic_doc_command docstring", "changes": [{"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "docs/extras.md", "newPath": "docs/extras.md", "changes": []}, {"oldPath": "docs/extras/simp.md", "newPath": "docs/extras/simp.md", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": [["add", "theorem", "alias1", []], ["add", "theorem", "alias2", []], ["add", "theorem", "alias1", ["tactic", "alias"]], ["add", "theorem", "alias2", ["tactic", "alias"]]]}, {"oldPath": "src/tactic/apply_fun.lean", "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": [["add", "def", "my_id", ["tactic", "interactive"]]]}, {"oldPath": "src/tactic/clear.lean", "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/derive_inhabited.lean", "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/doc_commands.lean", "changes": [["add", "inductive", "doc_category", []], ["add", "def", "hash", ["string"]], ["add", "structure", "tactic_doc_entry", []]]}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "src/tactic/find.lean", "newPath": "src/tactic/find.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/interval_cases.lean", "newPath": "src/tactic/interval_cases.lean", "changes": []}, {"oldPath": "src/tactic/library_note.lean", "newPath": null, "changes": [["del", "def", "hash", ["string"]]]}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": [["add", "def", "a", ["tactic", "interactive"]], ["add", "def", "normed_a", ["tactic", "interactive"]]]}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": [["mod", "theorem", "reassoc_of", ["category_theory"]]]}, {"oldPath": "src/tactic/rename.lean", "newPath": "src/tactic/rename.lean", "changes": []}, {"oldPath": "src/tactic/rename_var.lean", "newPath": "src/tactic/rename_var.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}, {"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/tactic/simp_rw.lean", "newPath": "src/tactic/simp_rw.lean", "changes": []}, {"oldPath": "src/tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}]}, {"timestamp": 1584372804, "sha": "04c73819", "message": "doc(docs/install/windows): emphasize projects link (#2150)\nYou can't use mathlib in the test project created in step 6. I've seen a couple of Windows users get tripped up here.", "changes": [{"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1584369966, "sha": "555528e1", "message": "feat(category_theory/image): comparison maps for precomposition (#2153)\n* feat(category_theory/image): comparison maps for precomposition\n* remove duplicate argument\n* unused argument", "changes": [{"oldPath": "src/category_theory/limits/shapes/images.lean", "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "def", "eq_to_hom", ["category_theory", "limits", "image"]], ["add", "def", "eq_to_iso", ["category_theory", "limits", "image"]], ["add", "def", "pre_comp", ["category_theory", "limits", "image"]], ["add", "theorem", "pre_comp_comp", ["category_theory", "limits", "image"]]]}]}, {"timestamp": 1584350286, "sha": "1e38cb1b", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584345601, "sha": "ff84bf47", "message": "feat(category_theory/monad/limits): forgetful creates colimits (#2138)\n* forgetful creates colimits\n* tidy up proofs\n* add docs\n* suggestions from review", "changes": [{"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["add", "def", "c", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "def", "cocone_point", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "theorem", "commuting", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "def", "lambda", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "def", "γ", ["category_theory", "monad", "forget_creates_colimits"]], ["add", "def", "forget_creates_colimits_of_monad_preserves", ["category_theory", "monad"]], ["mod", "def", "forget_creates_limits", ["category_theory", "monad"]]]}]}, {"timestamp": 1584338065, "sha": "4aed8625", "message": "feat(analysis/normed_space/operator_norm): completeness of the space of operators (#2160)\n* feat(analysis/normed_space/operator_norm): completeness of the space of operators\n* add some comments", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1584330143, "sha": "d8e5d99a", "message": "feat(category_theory/limits): Convenience methods for building limit (co)forks (#2155)\n* feat(category_theory/limits): Convenience methods for building limit (co)forks\n* Formatting\n* Rework a proof about kernels\n* feat(category_theory/limits): kernel forks", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "mk", ["category_theory", "limits", "cofork", "is_colimit"]], ["add", "def", "mk", ["category_theory", "limits", "fork", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": []}]}, {"timestamp": 1584322266, "sha": "c240fcb3", "message": "feat(category_theory/limits): pullbacks from binary products and equalizers (#2143)\n* feat(category_theory/limits): derive has_binary_products from has_limit (pair X Y)\n* Rename *_of_diagram to diagram_iso_*\n* feat(category_theory/limits): pullbacks from binary products and equalizers\n* Fix build\n* Fix indentation\n* typos\n* Fix proof\n* Remove some simp lemmas that were duplicated during merge", "changes": [{"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": [["add", "def", "has_colimit_span_of_has_colimit_pair_of_has_colimit_parallel_pair", ["category_theory", "limits"]], ["add", "def", "has_limit_cospan_of_has_limit_pair_of_has_limit_parallel_pair", ["category_theory", "limits"]], ["add", "def", "has_pullbacks_of_has_binary_products_of_has_equalizers", ["category_theory", "limits"]], ["add", "def", "has_pushouts_of_has_binary_coproducts_of_has_coequalizers", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "mk", ["category_theory", "limits", "pullback_cone", "is_limit"]], ["del", "theorem", "mk_left", ["category_theory", "limits", "pullback_cone"]], ["del", "theorem", "mk_right", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mk_π_app_left", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mk_π_app_one", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mk_π_app_right", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "mk", ["category_theory", "limits", "pushout_cocone", "is_colimit"]], ["add", "theorem", "mk_ι_app_left", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "mk_ι_app_right", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "mk_ι_app_zero", ["category_theory", "limits", "pushout_cocone"]]]}]}, {"timestamp": 1584315043, "sha": "fbe2ce09", "message": "feat(category_theory/limits): kernel forks (#2156)", "changes": [{"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "app_zero", ["category_theory", "limits", "cokernel_cofork"]], ["add", "theorem", "condition", ["category_theory", "limits", "cokernel_cofork"]], ["add", "def", "of_π", ["category_theory", "limits", "cokernel_cofork"]], ["add", "def", "cokernel_cofork", ["category_theory", "limits"]], ["add", "theorem", "app_one", ["category_theory", "limits", "kernel_fork"]], ["add", "theorem", "condition", ["category_theory", "limits", "kernel_fork"]], ["add", "def", "of_ι", ["category_theory", "limits", "kernel_fork"]], ["add", "def", "kernel_fork", ["category_theory", "limits"]]]}]}, {"timestamp": 1584306949, "sha": "87f8ab22", "message": "chore(nnreal): replace coe_le with coe_le_coe (#2159)", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/mean_inequalities.lean", "newPath": "src/analysis/mean_inequalities.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1584285710, "sha": "7104132e", "message": "chore(field_theory/finite): spelling mistake (#2157)", "changes": [{"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}]}, {"timestamp": 1584246153, "sha": "0cbfbabb", "message": "refactor(logic/function): inv_fun takes a nonempty instance instead of inhabited (#2148)", "changes": [{"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["mod", "theorem", "inv_fun_neg", ["function"]], ["mod", "theorem", "inv_fun_on_neg", ["function"]]]}]}, {"timestamp": 1584241458, "sha": "b314df2e", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584236618, "sha": "8c2a254c", "message": "feat(category_theory): comonads and coalgebras (#2134)\n* Comonads and coalgebras\n* Update docstring\n* add docstrings\n* Update src/category_theory/monad/algebra.lean\nCo-Authored-By: Johan Commelin \n* Update src/category_theory/monad/algebra.lean\nCo-Authored-By: Johan Commelin \n* Update src/category_theory/monad/algebra.lean\nCo-Authored-By: Johan Commelin \n* make the linter happy\n* revert change to nolints\n* disable inhabited instance linter", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["add", "def", "adj", ["category_theory", "comonad"]], ["add", "def", "comp", ["category_theory", "comonad", "coalgebra", "hom"]], ["add", "def", "id", ["category_theory", "comonad", "coalgebra", "hom"]], ["add", "structure", "hom", ["category_theory", "comonad", "coalgebra"]], ["add", "structure", "coalgebra", ["category_theory", "comonad"]], ["add", "def", "cofree", ["category_theory", "comonad"]], ["add", "def", "forget", ["category_theory", "comonad"]]]}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}]}, {"timestamp": 1584233368, "sha": "e4bf0bfa", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584228704, "sha": "54339730", "message": "feat(category_theory): limits and colimits in Ab (#2097)\n* limits and colimits in AddCommGroup\n* feat(category_theory): limits and colimits in Ab\n* to_additive comes last\n* add to nolints\n* Update src/algebra/category/Group/limits.lean\nCo-Authored-By: Johan Commelin \n* docstrings\n* use bundled homs throughout\n* comment about better model of colimits\n* fix comments\n* fixes\n* linter", "changes": [{"oldPath": null, "newPath": "docs/tutorial/category_theory/Ab.lean", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": [["mod", "def", "desc_morphism", ["CommRing", "colimits"]]]}, {"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group/basic.lean", "changes": [["add", "def", "Ab", []], ["add", "theorem", "one_apply", ["CommGroup"]], ["add", "theorem", "one_apply", ["Group"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Group/colimits.lean", "changes": [["add", "def", "cocone_fun", ["AddCommGroup", "colimits"]], ["add", "def", "cocone_morphism", ["AddCommGroup", "colimits"]], ["add", "theorem", "cocone_naturality", ["AddCommGroup", "colimits"]], ["add", "theorem", "cocone_naturality_components", ["AddCommGroup", "colimits"]], ["add", "def", "colimit", ["AddCommGroup", "colimits"]], ["add", "def", "colimit_cocone", ["AddCommGroup", "colimits"]], ["add", "def", "colimit_is_colimit", ["AddCommGroup", "colimits"]], ["add", "def", "colimit_setoid", ["AddCommGroup", "colimits"]], ["add", "def", "colimit_type", ["AddCommGroup", "colimits"]], ["add", "def", "desc_fun", ["AddCommGroup", "colimits"]], ["add", "def", "desc_fun_lift", ["AddCommGroup", "colimits"]], ["add", "def", "desc_morphism", ["AddCommGroup", "colimits"]], ["add", "inductive", "prequotient", ["AddCommGroup", "colimits"]], ["add", "theorem", "quot_add", ["AddCommGroup", "colimits"]], ["add", "theorem", "quot_neg", ["AddCommGroup", "colimits"]], ["add", "theorem", "quot_zero", ["AddCommGroup", "colimits"]], ["add", "inductive", "relation", ["AddCommGroup", "colimits"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Group/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/Group/limits.lean", "changes": [["add", "def", "limit", ["AddCommGroup", "AddCommGroup_has_limits"]], ["add", "def", "limit_is_limit", ["AddCommGroup", "AddCommGroup_has_limits"]], ["add", "def", "limit_π_add_monoid_hom", ["AddCommGroup"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Group/zero.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": [["mod", "def", "desc_morphism", ["Mon", "colimits"]]]}]}, {"timestamp": 1584220775, "sha": "2e781eb0", "message": "doc(docs/install/*): emphasize projects link (#2151)", "changes": [{"oldPath": "docs/install/debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}]}, {"timestamp": 1584216848, "sha": "2065438d", "message": "feat(category_theory/comma): some limits in the over category and iterated slices (#2131)\n* iterated slice and limits in over category\n* A bit more docs\n* changes from review\n* removed simp attributes\n* over prod map left\n* Update src/category_theory/comma.lean\nCo-Authored-By: Johan Commelin \n* simplify equivalence definition\n* fix indentation\n* make lemmas simp again\n* removed simp\n* fix equalizers proof", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["add", "def", "iterated_slice_backward", ["category_theory", "over"]], ["add", "theorem", "iterated_slice_backward_forget_forget", ["category_theory", "over"]], ["add", "def", "iterated_slice_equiv", ["category_theory", "over"]], ["add", "def", "iterated_slice_forward", ["category_theory", "over"]], ["add", "theorem", "iterated_slice_forward_forget", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["add", "theorem", "over_prod_fst_left", ["category_theory", "over"]], ["add", "theorem", "over_prod_map_left", ["category_theory", "over"]], ["add", "theorem", "over_prod_pair_hom", ["category_theory", "over"]], ["add", "theorem", "over_prod_pair_left", ["category_theory", "over"]], ["add", "theorem", "over_prod_snd_left", ["category_theory", "over"]], ["add", "def", "over_product_of_pullbacks", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "theorem", "condition", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mk_left", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "mk_right", ["category_theory", "limits", "pullback_cone"]]]}]}, {"timestamp": 1584209657, "sha": "cc39a150", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584205776, "sha": "7b2be40f", "message": "refactor(data/equiv/algebra): split (#2147)\n* refactor(data/equiv/algebra): split\nI want to use `≃*` without importing `ring`.\n* Update src/data/equiv/ring.lean", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/free_monoid.lean", "newPath": "src/algebra/free_monoid.lean", "changes": []}, {"oldPath": "src/algebra/semiconj.lean", "newPath": "src/algebra/semiconj.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": null, "changes": [["del", "def", "to_perm", ["add_aut"]], ["del", "theorem", "map_sub", ["add_equiv"]], ["del", "structure", "add_equiv", []], ["del", "theorem", "add_def", ["equiv"]], ["del", "theorem", "coe_units_equiv_ne_zero", ["equiv"]], ["del", "theorem", "inv_def", ["equiv"]], ["del", "theorem", "mul_def", ["equiv"]], ["del", "theorem", "neg_def", ["equiv"]], ["del", "theorem", "one_def", ["equiv"]], ["del", "def", "units_equiv_ne_zero", ["equiv"]], ["del", "theorem", "zero_def", ["equiv"]], ["del", "def", "to_perm", ["mul_aut"]], ["del", "def", "mul_aut", []], ["del", "theorem", "apply_symm_apply", ["mul_equiv"]], ["del", "theorem", "ext", ["mul_equiv"]], ["del", "theorem", "map_eq_one_iff", ["mul_equiv"]], ["del", "theorem", "map_inv", ["mul_equiv"]], ["del", "theorem", "map_mul", ["mul_equiv"]], ["del", "theorem", "map_ne_one_iff", ["mul_equiv"]], ["del", "theorem", "map_one", ["mul_equiv"]], ["del", "def", "mk'", ["mul_equiv"]], ["del", "def", "refl", ["mul_equiv"]], ["del", "def", "symm", ["mul_equiv"]], ["del", "theorem", "symm_apply_apply", ["mul_equiv"]], ["del", "theorem", "symm_to_monoid_hom_apply_to_monoid_hom_apply", ["mul_equiv"]], ["del", "theorem", "to_equiv_symm", ["mul_equiv"]], ["del", "def", "to_monoid_hom", ["mul_equiv"]], ["del", "theorem", "to_monoid_hom_apply_symm_to_monoid_hom_apply", ["mul_equiv"]], ["del", "def", "to_ring_equiv", ["mul_equiv"]], ["del", "def", "trans", ["mul_equiv"]], ["del", "structure", "mul_equiv", []], ["del", "def", "to_add_aut", ["ring_aut"]], ["del", "def", "to_mul_aut", ["ring_aut"]], ["del", "def", "to_perm", ["ring_aut"]], ["del", "def", "ring_aut", []], ["del", "theorem", "apply_symm_apply", ["ring_equiv"]], ["del", "theorem", "coe_add_equiv", ["ring_equiv"]], ["del", "theorem", "coe_mul_equiv", ["ring_equiv"]], ["del", "theorem", "ext", ["ring_equiv"]], ["del", "theorem", "image_eq_preimage", ["ring_equiv"]], ["del", "theorem", "map_add", ["ring_equiv"]], ["del", "theorem", "map_eq_one_iff", ["ring_equiv"]], ["del", "theorem", "map_eq_zero_iff", ["ring_equiv"]], ["del", "theorem", "map_mul", ["ring_equiv"]], ["del", "theorem", "map_ne_one_iff", ["ring_equiv"]], ["del", "theorem", "map_ne_zero_iff", ["ring_equiv"]], ["del", "theorem", "map_neg", ["ring_equiv"]], ["del", "theorem", "map_neg_one", ["ring_equiv"]], ["del", "theorem", "map_one", ["ring_equiv"]], ["del", "theorem", "map_sub", ["ring_equiv"]], ["del", "theorem", "map_zero", ["ring_equiv"]], ["del", "def", "of'", ["ring_equiv"]], ["del", "def", "of", ["ring_equiv"]], ["del", "theorem", "symm_apply_apply", ["ring_equiv"]], ["del", "theorem", "symm_to_ring_hom_apply_to_ring_hom_apply", ["ring_equiv"]], ["del", "def", "to_add_monoid_hom", ["ring_equiv"]], ["del", "def", "to_monoid_hom", ["ring_equiv"]], ["del", "def", "to_ring_hom", ["ring_equiv"]], ["del", "theorem", "to_ring_hom_apply_symm_to_ring_hom_apply", ["ring_equiv"]], ["del", "structure", "ring_equiv", []], ["del", "def", "to_units", []], ["del", "def", "map_equiv", ["units"]]]}, {"oldPath": null, "newPath": "src/data/equiv/mul_add.lean", "changes": [["add", "def", "to_perm", ["add_aut"]], ["add", "theorem", "map_sub", ["add_equiv"]], ["add", "structure", "add_equiv", []], ["add", "def", "to_perm", ["mul_aut"]], ["add", "def", "mul_aut", []], ["add", "theorem", "apply_symm_apply", ["mul_equiv"]], ["add", "theorem", "ext", ["mul_equiv"]], ["add", "theorem", "map_eq_one_iff", ["mul_equiv"]], ["add", "theorem", "map_inv", ["mul_equiv"]], ["add", "theorem", "map_mul", ["mul_equiv"]], ["add", "theorem", "map_ne_one_iff", ["mul_equiv"]], ["add", "theorem", "map_one", ["mul_equiv"]], ["add", "def", "mk'", ["mul_equiv"]], ["add", "def", "refl", ["mul_equiv"]], ["add", "def", "symm", ["mul_equiv"]], ["add", "theorem", "symm_apply_apply", ["mul_equiv"]], ["add", "theorem", "to_equiv_symm", ["mul_equiv"]], ["add", "def", "to_monoid_hom", ["mul_equiv"]], ["add", "theorem", "to_monoid_hom_apply", ["mul_equiv"]], ["add", "def", "trans", ["mul_equiv"]], ["add", "structure", "mul_equiv", []], ["add", "def", "to_units", []], ["add", "def", "map_equiv", ["units"]]]}, {"oldPath": null, "newPath": "src/data/equiv/ring.lean", "changes": [["add", "theorem", "coe_units_equiv_ne_zero", ["equiv"]], ["add", "def", "units_equiv_ne_zero", ["equiv"]], ["add", "def", "to_ring_equiv", ["mul_equiv"]], ["add", "def", "to_add_aut", ["ring_aut"]], ["add", "def", "to_mul_aut", ["ring_aut"]], ["add", "def", "to_perm", ["ring_aut"]], ["add", "def", "ring_aut", []], ["add", "theorem", "apply_symm_apply", ["ring_equiv"]], ["add", "theorem", "coe_add_equiv", ["ring_equiv"]], ["add", "theorem", "coe_mul_equiv", ["ring_equiv"]], ["add", "theorem", "ext", ["ring_equiv"]], ["add", "theorem", "image_eq_preimage", ["ring_equiv"]], ["add", "theorem", "map_add", ["ring_equiv"]], ["add", "theorem", "map_eq_one_iff", ["ring_equiv"]], ["add", "theorem", "map_eq_zero_iff", ["ring_equiv"]], ["add", "theorem", "map_mul", ["ring_equiv"]], ["add", "theorem", "map_ne_one_iff", ["ring_equiv"]], ["add", "theorem", "map_ne_zero_iff", ["ring_equiv"]], ["add", "theorem", "map_neg", ["ring_equiv"]], ["add", "theorem", "map_neg_one", ["ring_equiv"]], ["add", "theorem", "map_one", ["ring_equiv"]], ["add", "theorem", "map_sub", ["ring_equiv"]], ["add", "theorem", "map_zero", ["ring_equiv"]], ["add", "def", "of'", ["ring_equiv"]], ["add", "def", "of", ["ring_equiv"]], ["add", "theorem", "symm_apply_apply", ["ring_equiv"]], ["add", "theorem", "symm_to_ring_hom_apply_to_ring_hom_apply", ["ring_equiv"]], ["add", "def", "to_add_monoid_hom", ["ring_equiv"]], ["add", "def", "to_monoid_hom", ["ring_equiv"]], ["add", "def", "to_ring_hom", ["ring_equiv"]], ["add", "theorem", "to_ring_hom_apply_symm_to_ring_hom_apply", ["ring_equiv"]], ["add", "structure", "ring_equiv", []]]}, {"oldPath": null, "newPath": "src/data/equiv/transfer_instance.lean", "changes": [["add", "theorem", "add_def", ["equiv"]], ["add", "theorem", "inv_def", ["equiv"]], ["add", "theorem", "mul_def", ["equiv"]], ["add", "theorem", "neg_def", ["equiv"]], ["add", "theorem", "one_def", ["equiv"]], ["add", "theorem", "zero_def", ["equiv"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1584198172, "sha": "e6ccfe03", "message": "feat(algebra): the forgetful functor Module ℤ ⥤ Ab is an equivalence (#2130)\n* feat(algebra): the forgetful functor Module ℤ ⥤ Ab is an equivalence\n* oops, forgot to add file\n* missing conversion\n* not there yet\n* fixes\n* doc-strings, and remove more instances\n* various\n* oops\n* revert\n* Delete multilinear.olean.lock\n* revert\n* move instances\n* Remove note about a bug fixed in #1586.\n* whitespace", "changes": [{"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group.lean", "changes": [["add", "theorem", "ext", ["CommGroup"]], ["add", "theorem", "ext", ["Group"]]]}, {"oldPath": null, "newPath": "src/algebra/category/Group/Z_Module_equivalence.lean", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "def", "int_module", ["add_comm_group"]], ["add", "def", "nat_semimodule", ["add_comm_monoid"]], ["add", "theorem", "map_int_module_smul", ["add_monoid_hom"]], ["add", "theorem", "map_smul_cast", ["add_monoid_hom"]], ["add", "def", "to_add_monoid_hom", ["linear_map"]], ["add", "theorem", "to_add_monoid_hom_coe", ["linear_map"]], ["add", "theorem", "add_monoid_smul_eq_smul", ["module"]], ["add", "theorem", "gsmul_eq_smul", ["module"]], ["add", "theorem", "gsmul_eq_smul_cast", ["module"]], ["add", "theorem", "module_ext", []]]}]}, {"timestamp": 1584190075, "sha": "d313d14e", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584185314, "sha": "559921a5", "message": "feat(algebra/category/Group): the free-forgetful adjunction for AddCommGroup (#2141)\n* feat(algebra/category/Group): the free-forgetful adjunction for AddCommGroup\n* fixes\n* Update src/group_theory/free_abelian_group.lean\n* oops", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Group/adjunctions.lean", "changes": [["add", "def", "adj", ["AddCommGroup"]], ["add", "def", "free", ["AddCommGroup"]], ["add", "theorem", "free_map_coe", ["AddCommGroup"]], ["add", "theorem", "free_obj_coe", ["AddCommGroup"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "def", "hom_equiv", ["free_abelian_group"]], ["add", "theorem", "hom_equiv_apply", ["free_abelian_group"]], ["add", "theorem", "hom_equiv_symm_apply", ["free_abelian_group"]], ["del", "def", "universal", ["free_abelian_group", "lift"]], ["add", "theorem", "lift_comp", ["free_abelian_group"]], ["add", "theorem", "map_of", ["free_abelian_group"]]]}]}, {"timestamp": 1584177698, "sha": "465f5996", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584172969, "sha": "81d3ebf3", "message": "feat(algebra): monoidal category of R-modules (#2125)\n* feat(algebra): monoidal category of R-modules\n* docstrings\n* minor\n* tweaks\n* fix import\n* fixes\n* reduce use of @\n* broken\n* fixes\n* Update src/algebra/category/Module/basic.lean\nCo-Authored-By: Bryan Gin-ge Chen ", "changes": [{"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["mod", "def", "kernel_is_limit", ["Module"]], ["add", "def", "of_self", ["Module"]], ["add", "def", "to_linear_equiv", ["category_theory", "iso"]], ["add", "def", "to_Module_iso", ["linear_equiv"]], ["add", "def", "linear_equiv_iso_Group_iso", []]]}, {"oldPath": null, "newPath": "src/algebra/category/Module/monoidal.lean", "changes": [["add", "def", "associator", ["Module", "monoidal_category"]], ["add", "theorem", "associator_naturality", ["Module", "monoidal_category"]], ["add", "def", "left_unitor", ["Module", "monoidal_category"]], ["add", "theorem", "left_unitor_naturality", ["Module", "monoidal_category"]], ["add", "theorem", "pentagon", ["Module", "monoidal_category"]], ["add", "def", "right_unitor", ["Module", "monoidal_category"]], ["add", "theorem", "right_unitor_naturality", ["Module", "monoidal_category"]], ["add", "theorem", "tensor_comp", ["Module", "monoidal_category"]], ["add", "def", "tensor_hom", ["Module", "monoidal_category"]], ["add", "theorem", "tensor_id", ["Module", "monoidal_category"]], ["add", "def", "tensor_obj", ["Module", "monoidal_category"]], ["add", "theorem", "triangle", ["Module", "monoidal_category"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["del", "def", "colimit", ["category_theory", "limits", "types"]], ["add", "def", "colimit_", ["category_theory", "limits", "types"]], ["del", "def", "colimit_is_colimit", ["category_theory", "limits", "types"]], ["add", "def", "colimit_is_colimit_", ["category_theory", "limits", "types"]], ["del", "def", "limit", ["category_theory", "limits", "types"]], ["add", "def", "limit_", ["category_theory", "limits", "types"]], ["del", "def", "limit_is_limit", ["category_theory", "limits", "types"]], ["add", "def", "limit_is_limit_", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit_map", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit_π", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "refl", ["linear_equiv"]], ["mod", "def", "symm", ["linear_equiv"]], ["mod", "def", "trans", ["linear_equiv"]], ["add", "theorem", "trans_apply", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "assoc_tmul", ["tensor_product"]], ["add", "theorem", "ext_fourfold", ["tensor_product"]], ["add", "theorem", "ext_threefold", ["tensor_product"]], ["add", "theorem", "lid_tmul", ["tensor_product"]], ["add", "theorem", "rid_tmul", ["tensor_product"]]]}]}, {"timestamp": 1584159031, "sha": "3d621b5e", "message": "refactor(ring_theory/subring): use bundled homs (#2144)", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "coe_subtype", ["is_subring"]], ["add", "def", "subtype", ["is_subring"]], ["mod", "theorem", "image_closure", ["ring"]]]}]}, {"timestamp": 1584151161, "sha": "ade1ee30", "message": "feat(category_theory/limits): derive has_binary_products from has_limit (pair X Y) (#2139)\n* feat(category_theory/limits): derive has_binary_products from has_limit (pair X Y)\n* Rename *_of_diagram to diagram_iso_*", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "diagram_iso_pair", ["category_theory", "limits"]], ["add", "def", "has_binary_coproducts_of_has_colimit_pair", ["category_theory", "limits"]], ["add", "def", "has_binary_products_of_has_limit_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "diagram_iso_parallel_pair", ["category_theory", "limits"]], ["add", "def", "has_coequalizers_of_has_colimit_parallel_pair", ["category_theory", "limits"]], ["add", "def", "has_equalizers_of_has_limit_parallel_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "diagram_iso_cospan", ["category_theory", "limits"]], ["add", "def", "diagram_iso_span", ["category_theory", "limits"]], ["add", "def", "has_pullbacks_of_has_limit_cospan", ["category_theory", "limits"]], ["add", "def", "has_pushouts_of_has_colimit_span", ["category_theory", "limits"]]]}]}, {"timestamp": 1584124269, "sha": "49f5fb88", "message": "chore(algebra/category/CommRing/limits): avoid `is_ring_hom` (#2142)\ndefine a `ring_hom` instead", "changes": [{"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["add", "def", "limit_π_ring_hom", ["CommRing"]]]}]}, {"timestamp": 1584102020, "sha": "32c2768b", "message": "chore(linear_algebra/basic): simplify two proofs (#2123)\n* chore(linear_algebra/basic): simplify two proofs\nAlso drop `linear_map.congr_right` in favor of\n`linear_equiv.congr_right`. I'll restore the deleted `congr_right`\nas `comp_map : (M₂ →ₗ[R] M₃) →ₗ[R] (M →ₗ[R] M₂) →ₗ[R] (M →ₗ[R] M₃)` soon.\n* Fix compile\n* Restore `congr_right` under the name `comp_right`.", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "conj", ["linear_equiv"]], ["add", "def", "comp_right", ["linear_map"]], ["del", "def", "congr_right", ["linear_map"]], ["del", "theorem", "Union_coe_of_directed", ["submodule"]], ["add", "theorem", "coe_supr_of_directed", ["submodule"]], ["mod", "theorem", "mem_supr_of_directed", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}]}, {"timestamp": 1584094707, "sha": "aec62dc4", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584090012, "sha": "b54960d1", "message": "refactor(*): migrate some files to bundled ring homs (#2133)\n* refactor(*): migrate some files to bundled ring homs\n* Rename ring_hom.is_local back to is_local_ring_hom\n* Apply suggestions from code review\nCo-Authored-By: Johan Commelin \n* Restore 2 instances, make `map` use bundled homs\n* More bundled homs\n* Add a docstring", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "map_prod", ["ring_hom"]], ["add", "theorem", "map_sum", ["ring_hom"]]]}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "def", "lift", ["ring", "direct_limit"]], ["mod", "theorem", "lift_add", ["ring", "direct_limit"]], ["add", "def", "lift_hom", ["ring", "direct_limit"]], ["mod", "theorem", "lift_mul", ["ring", "direct_limit"]], ["mod", "theorem", "lift_neg", ["ring", "direct_limit"]], ["mod", "theorem", "lift_one", ["ring", "direct_limit"]], ["mod", "theorem", "lift_pow", ["ring", "direct_limit"]], ["mod", "theorem", "lift_sub", ["ring", "direct_limit"]], ["mod", "theorem", "lift_zero", ["ring", "direct_limit"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "coe_mk", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "theorem", "coe_injective", ["adjoin_root"]], ["mod", "theorem", "eval₂_root", ["adjoin_root"]], ["mod", "theorem", "is_root_root", ["adjoin_root"]], ["mod", "def", "lift", ["adjoin_root"]], ["mod", "theorem", "lift_mk", ["adjoin_root"]], ["mod", "theorem", "lift_of", ["adjoin_root"]], ["mod", "theorem", "lift_root", ["adjoin_root"]], ["mod", "def", "mk", ["adjoin_root"]], ["add", "theorem", "mk_C", ["adjoin_root"]], ["mod", "theorem", "mk_self", ["adjoin_root"]], ["mod", "theorem", "mul_div_root_cancel", ["adjoin_root"]], ["mod", "def", "of", ["adjoin_root"]], ["mod", "def", "root", ["adjoin_root"]], ["mod", "def", "adjoin_root", []]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["add", "theorem", "coe_lift_hom", ["free_comm_ring"]], ["add", "def", "lift_hom", ["free_comm_ring"]], ["mod", "def", "map", ["free_comm_ring"]], ["mod", "theorem", "map_add", ["free_comm_ring"]], ["mod", "theorem", "map_mul", ["free_comm_ring"]], ["mod", "theorem", "map_neg", ["free_comm_ring"]], ["mod", "theorem", "map_of", ["free_comm_ring"]], ["mod", "theorem", "map_one", ["free_comm_ring"]], ["mod", "theorem", "map_pow", ["free_comm_ring"]], ["mod", "theorem", "map_sub", ["free_comm_ring"]], ["mod", "theorem", "map_zero", ["free_comm_ring"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["del", "theorem", "is_ring_hom_quotient_inf_to_pi_quotient", ["ideal"]], ["del", "theorem", "inj_iff_ker_eq_bot", ["is_ring_hom"]], ["del", "theorem", "injective_iff", ["is_ring_hom"]], ["del", "def", "ker", ["is_ring_hom"]], ["del", "theorem", "ker_eq", ["is_ring_hom"]], ["del", "theorem", "ker_eq_bot_iff_eq_zero", ["is_ring_hom"]], ["del", "theorem", "ker_is_prime", ["is_ring_hom"]], ["del", "theorem", "mem_ker", ["is_ring_hom"]], ["del", "theorem", "not_one_mem_ker", ["is_ring_hom"]], ["add", "theorem", "inj_iff_ker_eq_bot", ["ring_hom"]], ["add", "def", "ker", ["ring_hom"]], ["add", "theorem", "ker_eq", ["ring_hom"]], ["add", "theorem", "ker_eq_bot_iff_eq_zero", ["ring_hom"]], ["add", "theorem", "ker_is_prime", ["ring_hom"]], ["add", "theorem", "mem_ker", ["ring_hom"]], ["add", "theorem", "not_one_mem_ker", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "def", "lift", ["ideal", "quotient"]], ["mod", "theorem", "lift_mk", ["ideal", "quotient"]], ["add", "def", "mk_hom", ["ideal", "quotient"]], ["add", "theorem", "mk_prod", ["ideal", "quotient"]], ["add", "theorem", "mk_sum", ["ideal", "quotient"]], ["mod", "theorem", "is_unit_of_map_unit", []]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "def", "cod_restrict", ["ring_hom"]]]}]}, {"timestamp": 1584039130, "sha": "1c449b6c", "message": "chore(algebra/field*, field_theory/subfield): drop some `x ≠ 0`, use `division_ring` (#2136)\n* chore(algebra/field*, field_theory/subfield): drop some `x ≠ 0`, use `division_ring`\nWe have `0⁻¹=0` in `division_ring` now, so no need to assume `field`\nin `ring_hom.map_inv` etc.\n* Fix lint", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "map_div'", ["is_ring_hom"]], ["del", "theorem", "map_inv'", ["is_ring_hom"]], ["del", "theorem", "neg_inv'", []], ["del", "theorem", "map_div'", ["ring_hom"]], ["del", "theorem", "map_inv'", ["ring_hom"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "map_fpow'", ["is_ring_hom"]], ["mod", "theorem", "map_fpow", ["is_ring_hom"]], ["del", "theorem", "map_fpow'", ["ring_hom"]], ["mod", "theorem", "map_fpow", ["ring_hom"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}]}, {"timestamp": 1584031120, "sha": "5fe72b6b", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1584026321, "sha": "f5787f53", "message": "doc(*): switch from update-mathlib to leanproject (#2093)\n* doc(*): switch from update-mathlib to leanproject\n* Apply suggestions from code review\nCo-Authored-By: sgouezel \n* Use shiny new `leanproject new` and `leanproject get`\n* documentation tweaks\n* project.md tweaks", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "docs/install/debian.md", "newPath": "docs/install/debian.md", "changes": []}, {"oldPath": "docs/install/debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/project.md", "newPath": "docs/install/project.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1584018450, "sha": "81311088", "message": "feat(category_theory/opposites): add nat_iso.unop (#2132)\n* Add nat_iso.unop\n* Add docstrings to nat_iso.op, nat_iso.unop", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "unop_hom", ["category_theory", "nat_iso"]], ["add", "theorem", "unop_inv", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1584010600, "sha": "7d357d74", "message": "Fix a typo (#2137)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "mk_ι_app_left", ["category_theory", "limits", "binary_cofan"]], ["add", "theorem", "mk_ι_app_right", ["category_theory", "limits", "binary_cofan"]], ["del", "theorem", "mk_π_app_left", ["category_theory", "limits", "binary_cofan"]], ["del", "theorem", "mk_π_app_right", ["category_theory", "limits", "binary_cofan"]]]}]}, {"timestamp": 1583990067, "sha": "35a6e682", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583985990, "sha": "1b0a7493", "message": "feat(topology): is_closed_proj_of_compact (#2069)\n* feat(lattice): add inf_le_inf_left/right\n* feat(set/lattice): image_inter_subset\n* feat(set/lattice): push_pull\n* feat(order/filter): push_pull and product notation\n* feat(topology/subset_properties): is_closed_proj_of_compact\n* feat(set/lattice): push_pull'\n* fix(order/filter): forgotten doc\n* lint (including old missing docstrings in filter).\n* Apply Yury's suggestions.\n* Forgotten style fix\n* urkud's suggestions\nCo-Authored-By: Yury G. Kudryashov \n* Update src/order/filter/basic.lean\nCo-Authored-By: Scott Morrison ", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_inter_subset", ["set"]], ["del", "theorem", "mono_image", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "bot_prod", ["filter"]], ["add", "theorem", "map_ne_bot_iff", ["filter"]], ["mod", "theorem", "prod_bot", ["filter"]], ["mod", "theorem", "prod_comm'", ["filter"]], ["mod", "theorem", "prod_comm", ["filter"]], ["mod", "theorem", "prod_eq_bot", ["filter"]], ["mod", "theorem", "prod_ne_bot", ["filter"]], ["mod", "theorem", "prod_pure_pure", ["filter"]], ["mod", "theorem", "tendsto_fst", ["filter"]], ["mod", "theorem", "tendsto_snd", ["filter"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "inf_le_inf_left", ["lattice"]], ["add", "theorem", "inf_le_inf_right", ["lattice"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "cluster_point_of_compact", []], ["add", "theorem", "is_closed_proj_of_compact", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1583967381, "sha": "7c8dc2ad", "message": "feat(category_theory/limits): construct equalizers from pullbacks and products (#2124)\n* construct equalizers from pullbacks and products\n* ...\n* changes from review\n* Add docstrings\n* golf proofs a little\n* linter", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["add", "theorem", "eq_whisker", ["category_theory"]], ["add", "theorem", "whisker_eq", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/equalizers.lean", "changes": [["add", "def", "construct_equalizer", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["add", "def", "equalizer_cone", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["add", "def", "equalizer_cone_is_limit", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["add", "def", "pullback_fst", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["add", "theorem", "pullback_fst_eq_pullback_snd", ["category_theory", "limits", "has_equalizers_of_pullbacks_and_binary_products"]], ["add", "def", "has_equalizers_of_pullbacks_and_binary_products", ["category_theory", "limits"]]]}]}, {"timestamp": 1583953063, "sha": "7cffe252", "message": "chore(category_theory/cones): make functor argument of forget explicit (#2128)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "forget", ["category_theory", "limits", "cocones"]], ["mod", "def", "forget", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["del", "def", "of_kernel_of_mono", ["category_theory", "limits", "cokernel"]], ["del", "def", "of_cokernel_of_epi", ["category_theory", "limits", "kernel"]]]}]}, {"timestamp": 1583921741, "sha": "43431be5", "message": "chore(category_theory): remove functor.of (#2127)\n* chore(category_theory): remove functor.of\n* fix", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "def", "map", ["category_theory", "over"]], ["mod", "def", "over", ["category_theory"]], ["mod", "def", "map", ["category_theory", "under"]], ["mod", "def", "under", ["category_theory"]]]}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": [["mod", "def", "comma_equivalence", ["category_theory", "category_of_elements"]], ["mod", "def", "from_comma", ["category_theory", "category_of_elements"]], ["mod", "def", "to_comma", ["category_theory", "category_of_elements"]]]}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": [["del", "theorem", "map_app", ["category_theory", "functor", "of"]], ["del", "theorem", "obj_map", ["category_theory", "functor", "of"]], ["del", "theorem", "obj_obj", ["category_theory", "functor", "of"]], ["del", "def", "of", ["category_theory", "functor"]]]}]}, {"timestamp": 1583910813, "sha": "d909a612", "message": "fix(algebra/category): avoid deprecated lemmas (#2126)", "changes": [{"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}]}, {"timestamp": 1583870099, "sha": "36ac9162", "message": "Add two missing duals (#2122)", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "of_π_app_one", ["category_theory", "limits", "cofork"]], ["add", "theorem", "of_π_app_zero", ["category_theory", "limits", "cofork"]]]}]}, {"timestamp": 1583861913, "sha": "699401bc", "message": "feat(ci): look for equivalent oleans on Azure (#2094)\n* first attempt at avoiding recompilation in ci\n* avoid using leanproject\n* delete most of library for testing\n* modify non-lean file for testing\n* Revert \"delete most of library for testing\"\nThis reverts commit b4f298e866513a6e1517f7fb370fcf9e03eb8030.\n* unnecessary to look up the exact git sha\n* simplify\n* apply Gabriel's suggestion\n* untar all and only src directory\n* Revert \"modify non-lean file for testing\"\nThis reverts commit 3157cb1d0d0b3530445c36f8a1e9f725847f71ce.\n* simplify\n* add git reset to script\n* Revert \"add git reset to script\"\nThis reverts commit c63a8281fef1a16ad0133521b7c8b002ef47907e.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": null, "newPath": "scripts/fetch_olean_cache.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/look_up_olean_hash.py", "changes": []}, {"oldPath": null, "newPath": "scripts/write_azure_table_entry.py", "changes": []}]}, {"timestamp": 1583854165, "sha": "668a98e7", "message": "feat(measurable_space): is_measurable_supr lemma (#2092)\n* feat(data/set/lattice): add @[simp] to lemmas\n* feat(measurable_space): is_measurable_supr lemma\n* fix proof\n* fix proof\n* fix proof\n* oops\n* fix proofs\n* typo in doc string\n* remove @[simp]", "changes": [{"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_Sup", ["measurable_space"]], ["add", "theorem", "is_measurable_sup", ["measurable_space"]], ["add", "theorem", "is_measurable_supr", ["measurable_space"]]]}]}, {"timestamp": 1583845930, "sha": "9feefee8", "message": "feat(ring_theory/polynomial): refactor of is_integral_domain_fin (#2119)\n* chore(ring_theory/polynomial): refactor proof of is_noetherian_ring_fin\n* not there yet\n* feat(ring_theory/polynomial): refactor of is_integral_domain_fin\n* fix\n* refactor\n* fix\n* fix\n* suggestion from linter\n* Update src/data/mv_polynomial.lean", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "def", "fin_succ_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "polynomial", ["is_integral_domain"]]]}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["mod", "theorem", "is_integral_domain_fin", ["mv_polynomial"]], ["add", "theorem", "is_integral_domain_fin_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1583837840, "sha": "cdc56baf", "message": "feat(analysis/calculus/tangent_cone): prove that all intervals are `unique_diff_on` (#2108)\n* feat(analysis/calculus/tangent_cone): prove that all intervals are `unique_diff_on`\n* Drop some unneeded assumptions", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "unique_diff_on_Icc", []], ["add", "theorem", "unique_diff_on_Ici", []], ["add", "theorem", "unique_diff_on_Ico", []], ["add", "theorem", "unique_diff_on_Iic", []], ["add", "theorem", "unique_diff_on_Iio", []], ["add", "theorem", "unique_diff_on_Ioc", []], ["add", "theorem", "unique_diff_on_Ioi", []], ["add", "theorem", "unique_diff_on_Ioo", []], ["add", "theorem", "unique_diff_on_empty", []]]}]}, {"timestamp": 1583822385, "sha": "e8ad2e38", "message": "feat(category_theory/limits): the pullback of a monomorphism is a monomorphism (#2113)\n* The pullback of a monomorphism is a monomorphism\n* The pushout of an epimorphism is an epimorphism\n* Fix a proof\n* renaming", "changes": [{"oldPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "hom_ext", ["category_theory", "limits", "pullback"]], ["add", "theorem", "equalizer_ext", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "pushout"]], ["add", "theorem", "coequalizer_ext", ["category_theory", "limits", "pushout_cocone"]]]}]}, {"timestamp": 1583814160, "sha": "945845d8", "message": "feat(linter): include linter name in report (#2116)\n* feat(linter): include linter name in report (closes #2098)\n* Update src/tactic/lint.lean", "changes": [{"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}]}, {"timestamp": 1583806326, "sha": "4089712f", "message": "chore(ring_theory/polynomial): refactor proof of is_noetherian_ring_fin (#2117)", "changes": [{"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["mod", "theorem", "is_noetherian_ring_fin", ["mv_polynomial"]], ["add", "theorem", "is_noetherian_ring_fin_0", ["mv_polynomial"]]]}]}, {"timestamp": 1583798258, "sha": "25df8842", "message": "reflexive transitive closure is symmetric of original (#2115)\n* reflexive transitive closure is symmetric if original\n* Update src/logic/relation.lean\nCo-Authored-By: Johan Commelin \n* Update src/logic/relation.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": [["add", "theorem", "symmetric", ["relation", "refl_trans_gen"]]]}]}, {"timestamp": 1583790886, "sha": "f90803c9", "message": "feat(algebra/group/hom): cancel injective/surjective `monoid_hom`s (#2112)\n* feat(algebra/group/hom): cancel injective/surjective `monoid_hom`s\n* Add a `ring_hom` version", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "cancel_left", ["monoid_hom"]], ["add", "theorem", "cancel_right", ["monoid_hom"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "cancel_left", ["ring_hom"]], ["add", "theorem", "cancel_right", ["ring_hom"]]]}]}, {"timestamp": 1583783022, "sha": "b39713fe", "message": "feat(analysis/calculus/darboux): IVT for derivatives (#2110)\n* feat(analysis/calculus/darboux): IVT for derivatives\n* whitespace\nCo-Authored-By: sgouezel ", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/darboux.lean", "changes": [["add", "theorem", "convex_image_has_deriv_at", []], ["add", "theorem", "deriv_forall_lt_or_forall_gt_of_forall_ne", []], ["add", "theorem", "exists_has_deriv_within_at_eq_of_gt_of_lt", []], ["add", "theorem", "exists_has_deriv_within_at_eq_of_lt_of_gt", []]]}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}]}, {"timestamp": 1583764052, "sha": "62abc4d5", "message": "feat(category_theory): images (#2100)\n* feat(category_theory): images\n* oops, forgot to add file\n* Update src/category_theory/category/default.lean\nCo-Authored-By: Johan Commelin \n* some improvements\n* linting\n* oops\n* Update src/category_theory/limits/shapes/images.lean", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["mod", "theorem", "cancel_epi", ["category_theory"]], ["add", "theorem", "cancel_epi_id", ["category_theory"]], ["mod", "theorem", "cancel_mono", ["category_theory"]], ["add", "theorem", "cancel_mono_id", ["category_theory"]], ["add", "theorem", "epi_of_epi", ["category_theory"]], ["add", "theorem", "epi_of_epi_fac", ["category_theory"]], ["add", "theorem", "mono_of_mono", ["category_theory"]], ["add", "theorem", "mono_of_mono_fac", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["del", "theorem", "π_epi", ["category_theory", "limits", "coequalizer"]], ["del", "theorem", "ι_mono", ["category_theory", "limits", "equalizer"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/images.lean", "changes": [["add", "def", "factor_thru_image", ["category_theory", "limits"]], ["add", "theorem", "uniq", ["category_theory", "limits", "has_image"]], ["add", "theorem", "as_c", ["category_theory", "limits", "image"]], ["add", "theorem", "as_ι", ["category_theory", "limits", "image"]], ["add", "def", "c", ["category_theory", "limits", "image"]], ["add", "theorem", "c_ι", ["category_theory", "limits", "image"]], ["add", "theorem", "fac", ["category_theory", "limits", "image"]], ["add", "def", "is_image", ["category_theory", "limits", "image"]], ["add", "def", "lift", ["category_theory", "limits", "image"]], ["add", "theorem", "lift_fac", ["category_theory", "limits", "image"]], ["add", "def", "mono_factorisation", ["category_theory", "limits", "image"]], ["add", "def", "ι", ["category_theory", "limits", "image"]], ["add", "def", "image", ["category_theory", "limits"]], ["add", "def", "image_mono_iso_source", ["category_theory", "limits"]], ["add", "theorem", "image_mono_iso_source_hom_self", ["category_theory", "limits"]], ["add", "theorem", "image_mono_iso_source_inv_ι", ["category_theory", "limits"]], ["add", "def", "iso_ext", ["category_theory", "limits", "is_image"]], ["add", "def", "self", ["category_theory", "limits", "is_image"]], ["add", "structure", "is_image", ["category_theory", "limits"]], ["add", "theorem", "ext", ["category_theory", "limits", "mono_factorisation"]], ["add", "def", "self", ["category_theory", "limits", "mono_factorisation"]], ["add", "structure", "mono_factorisation", ["category_theory", "limits"]]]}]}, {"timestamp": 1583756538, "sha": "d8d09271", "message": "refactor(topology/algebra/ordered): rename `tendsto_of_tendsto_of_tendsto_of_le_of_le` to `tendsto_of_tendsto_of_tendsto_of_le_of_le'` (#2111)\nThe new `tendsto_of_tendsto_of_tendsto_of_le_of_le` assumes that\nthe inequalities hold everywhere.", "changes": [{"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_of_tendsto_of_tendsto_of_le_of_le'", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1583749176, "sha": "4258f5ee", "message": "refactor(analysis/normed_space/banach): use bundled `→L[𝕜]` maps (#2107)", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["mod", "theorem", "exists_approx_preimage_norm_le", []], ["mod", "theorem", "exists_preimage_norm_le", []], ["add", "theorem", "continuous_symm", ["linear_equiv"]], ["del", "theorem", "is_bounded_inv", ["linear_equiv"]], ["mod", "theorem", "open_mapping", []]]}]}, {"timestamp": 1583738177, "sha": "434b6299", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583730006, "sha": "ce7248ab", "message": "doc(docs/tutorial/category_theory): introductory category theory tutorial (#2104)\n* doc(docs/tutorial/category_theory): Adding WIP beginner category theory docs\n* linewraps\n* presumably uncontroversial edits\n* oops\n* whitespace\n* explaining more about universes\n* warning about definitional associativity\n* add TODO\n* Update docs/tutorial/category_theory/category_theory_intro.md\n* rename\n* cleanup\n* adding lean version\n* various\n* add a note about debugging universe problems\n* rename\n* delete old markdown tutorial\n* adding sections to make variable names nicer\n* tidy up universes\n* url escape parentheses inside links\n* tweaking text\n* Update docs/tutorial/category_theory/intro.lean\nCo-Authored-By: sgouezel ", "changes": [{"oldPath": null, "newPath": "docs/tutorial/category_theory/intro.lean", "changes": []}]}, {"timestamp": 1583722154, "sha": "61d70ce8", "message": "chore(algebra/group): streamlining imports (#2099)\n* chore(algebra/group): streamlining imports\n* reducing imports", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}]}, {"timestamp": 1583715370, "sha": "ca370cb9", "message": "fix(deprecated/group): remove dangerous instances (#2096)", "changes": [{"oldPath": "src/deprecated/group.lean", "newPath": "src/deprecated/group.lean", "changes": [["add", "theorem", "is_add_group_hom", ["additive"]], ["add", "theorem", "is_add_hom", ["additive"]], ["add", "theorem", "is_add_monoid_hom", ["additive"]], ["add", "theorem", "is_group_hom", ["multiplicative"]], ["add", "theorem", "is_monoid_hom", ["multiplicative"]], ["add", "theorem", "is_mul_hom", ["multiplicative"]]]}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "is_add_subgroup", ["additive"]], ["add", "theorem", "normal_add_subgroup", ["additive"]], ["mod", "def", "ker", ["is_group_hom"]], ["mod", "theorem", "mem_ker", ["is_group_hom"]], ["add", "theorem", "is_subgroup", ["multiplicative"]], ["add", "theorem", "normal_subgroup", ["multiplicative"]]]}]}, {"timestamp": 1583707563, "sha": "15d3268e", "message": "chore(category_theory/functor): make arguments implicit (#2103)", "changes": [{"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["mod", "theorem", "comp_map", ["category_theory", "functor"]]]}]}, {"timestamp": 1583646787, "sha": "b7444b03", "message": "Remove limits.lean which is superseded by limits_of_products_and_equalizers.lean (#2105)", "changes": [{"oldPath": "src/category_theory/limits/shapes/constructions/limits.lean", "newPath": null, "changes": []}]}, {"timestamp": 1583617058, "sha": "d53bbb6e", "message": "feat(data/fin_enum): `fin_enum` class for finite types with an enumeration order (#1368)\n* feat(data/enum): `enumerable` class for finite types with an\nenumeration order\n* little fixes\n* Update enum.lean\n* Update enum.lean\n* Update finset.lean\n* add documentation\n* Update src/data/enum.lean\nCo-Authored-By: Scott Morrison \n* Update src/data/enum.lean [skip ci]\nCo-Authored-By: Scott Morrison \n* Update fin.lean [skip ci[\n* Update enum.lean\n* Update enum.lean\n* Update fin.lean [skip ci]\n* Update enum.lean\n* Update src/data/enum.lean [skip ci]\nCo-Authored-By: Bryan Gin-ge Chen \n* Update interactive.lean [skip ci]\n* Rename enum.lean to fin_enum.lean [skip ci]\n* add `mono using` to doc/tactics.md [skip ci]\n* update to Lean 3.5.1\n* address lint comments\n* Update src/data/fin_enum.lean\nCo-Authored-By: Scott Morrison \n* Update fin_enum.lean\n* Apply suggestions from code review\nCo-Authored-By: Scott Morrison \n* remove unneeded lemmas\n* add `nodup_to_list`", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/fin_enum.lean", "changes": [["add", "def", "enum", ["fin_enum", "finset"]], ["add", "theorem", "mem_enum", ["fin_enum", "finset"]], ["add", "theorem", "mem_pi", ["fin_enum"]], ["add", "theorem", "mem_to_list", ["fin_enum"]], ["add", "theorem", "nodup_to_list", ["fin_enum"]], ["add", "def", "of_equiv", ["fin_enum"]], ["add", "def", "of_list", ["fin_enum"]], ["add", "def", "of_nodup_list", ["fin_enum"]], ["add", "def", "of_surjective", ["fin_enum"]], ["add", "def", "cons", ["fin_enum", "pi"]], ["add", "def", "enum", ["fin_enum", "pi"]], ["add", "theorem", "mem_enum", ["fin_enum", "pi"]], ["add", "def", "tail", ["fin_enum", "pi"]], ["add", "def", "pi", ["fin_enum"]], ["add", "def", "to_list", ["fin_enum"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "sdiff_empty", ["finset"]], ["add", "theorem", "sdiff_eq_self", ["finset"]], ["add", "theorem", "sdiff_inter_distrib_right", ["finset"]], ["add", "theorem", "sdiff_inter_self_left", ["finset"]], ["add", "theorem", "sdiff_inter_self_right", ["finset"]], ["add", "theorem", "sdiff_self", ["finset"]], ["add", "theorem", "sdiff_subset_self", ["finset"]], ["add", "theorem", "trans", ["finset", "superset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "mem_pure", ["list"]]]}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}]}, {"timestamp": 1583547722, "sha": "726d83f1", "message": "feat(lint): add two new linters (#2089)\n* feat(lint): add two new linters\nchecks whether type-class inference searches end relatively quickly\nchecks that there are no instances has_coe a t with variable a\n* remove `is_fast` from `has_coe_variable`\n* add link to note\n* typo in priority\n* fix error, implement comments", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": [["add", "def", "dangerous_instance_test", []], ["add", "def", "foo_has_mul", []], ["add", "def", "foo_instance", []], ["add", "def", "impossible_instance_test", []]]}]}, {"timestamp": 1583540107, "sha": "c5437b4b", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583530355, "sha": "6c23bad2", "message": "feat(data/set/lattice): add @[simp] to lemmas (#2091)\n* feat(data/set/lattice): add @[simp] to lemmas\n* fix proof\n* fix proof\n* fix proof\n* oops\n* fix proofs\n* typo in doc string", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "bInter_image", ["set"]], ["mod", "theorem", "bInter_range", ["set"]], ["mod", "theorem", "bUnion_image", ["set"]], ["mod", "theorem", "bUnion_range", ["set"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1583522481, "sha": "4f10d1eb", "message": "refactor(group_theory/monoid_localization): use characteristic predicate (#2004)\n* should I be changing and committing toml idk\n* initial monoid loc lemmas\n* responding to PR comments\n* removing bad @[simp]\n* inhabited instances\n* remove #lint\n* additive inhabited instance\n* using is_unit & is_add_unit\n* doc string\n* remove simp\n* submonoid.monoid_loc... -> submonoid.localization\n* submonoid.monoid_loc... -> submonoid.localization\n* generalize inhabited instance\n* remove inhabited instance", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "inv_unique", []]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "exists_inv_of_comp_exists_inv", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/is_unit.lean", "newPath": "src/algebra/group/is_unit.lean", "changes": [["mod", "theorem", "coe_lift_right", ["is_unit"]], ["mod", "theorem", "map", ["is_unit"]], ["mod", "theorem", "is_unit_iff_exists_inv'", []], ["mod", "theorem", "is_unit_iff_exists_inv", []], ["mod", "theorem", "is_unit_of_mul_is_unit_right", []], ["mod", "theorem", "is_unit_of_mul_one", []], ["mod", "theorem", "is_unit_one", []], ["mod", "theorem", "is_unit_unit", []], ["mod", "theorem", "is_unit_mul_units", ["units"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "structure", "add_units", []], ["add", "theorem", "add_units_eq_one", ["nat"]], ["mod", "theorem", "coe_inv", ["units"]], ["mod", "theorem", "coe_mk_of_mul_eq_one", ["units"]], ["mod", "theorem", "coe_mul", ["units"]], ["mod", "theorem", "coe_one", ["units"]], ["mod", "theorem", "eq_inv_mul_iff_mul_eq", ["units"]], ["mod", "theorem", "eq_mul_inv_iff_mul_eq", ["units"]], ["mod", "theorem", "ext", ["units"]], ["mod", "theorem", "ext_iff", ["units"]], ["mod", "theorem", "inv_mul", ["units"]], ["mod", "theorem", "inv_mul_cancel_left", ["units"]], ["mod", "theorem", "inv_mul_cancel_right", ["units"]], ["mod", "theorem", "inv_mul_eq_iff_eq_mul", ["units"]], ["mod", "def", "mk_of_mul_eq_one", ["units"]], ["mod", "theorem", "mul_inv", ["units"]], ["mod", "theorem", "mul_inv_cancel_left", ["units"]], ["mod", "theorem", "mul_inv_cancel_right", ["units"]], ["mod", "theorem", "mul_inv_eq_iff_eq_mul", ["units"]], ["mod", "theorem", "mul_left_inj", ["units"]], ["mod", "theorem", "mul_right_inj", ["units"]], ["mod", "theorem", "val_coe", ["units"]]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["mod", "theorem", "coe_hom_apply", ["units"]], ["mod", "theorem", "coe_lift_right", ["units"]], ["mod", "theorem", "coe_map", ["units"]], ["mod", "theorem", "map_comp", ["units"]], ["mod", "theorem", "map_id", ["units"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["add", "def", "inl", ["prod", "monoid_hom"]], ["add", "def", "inr", ["prod", "monoid_hom"]]]}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "structure", "localization_map", ["add_submonoid"]], ["del", "theorem", "add", ["add_submonoid", "r'"]], ["del", "theorem", "transitive", ["add_submonoid", "r'"]], ["del", "def", "r'", ["add_submonoid"]], ["del", "def", "aux", ["monoid_localization"]], ["del", "theorem", "exists_rep", ["monoid_localization"]], ["del", "theorem", "funext", ["monoid_localization"]], ["del", "theorem", "ind", ["monoid_localization"]], ["del", "theorem", "induction_on", ["monoid_localization"]], ["del", "theorem", "is_unit_of_of_comp", ["monoid_localization"]], ["del", "def", "lift'", ["monoid_localization"]], ["del", "theorem", "lift'_apply_of", ["monoid_localization"]], ["del", "theorem", "lift'_comp_of", ["monoid_localization"]], ["del", "theorem", "lift'_eq_iff", ["monoid_localization"]], ["del", "theorem", "lift'_mk", ["monoid_localization"]], ["del", "theorem", "lift'_of", ["monoid_localization"]], ["del", "theorem", "lift_apply_of", ["monoid_localization"]], ["del", "theorem", "lift_comp_of", ["monoid_localization"]], ["del", "theorem", "lift_eq_iff", ["monoid_localization"]], ["del", "theorem", "lift_mk", ["monoid_localization"]], ["del", "theorem", "lift_of", ["monoid_localization"]], ["del", "theorem", "lift_on_beta", ["monoid_localization"]], ["del", "def", "map", ["monoid_localization"]], ["del", "theorem", "map_comp_map", ["monoid_localization"]], ["del", "theorem", "map_comp_of", ["monoid_localization"]], ["del", "theorem", "map_eq", ["monoid_localization"]], ["del", "theorem", "map_ext", ["monoid_localization"]], ["del", "theorem", "map_id", ["monoid_localization"]], ["del", "theorem", "map_map", ["monoid_localization"]], ["del", "theorem", "map_mk", ["monoid_localization"]], ["del", "theorem", "map_of", ["monoid_localization"]], ["del", "def", "mk", ["monoid_localization"]], ["del", "theorem", "mk_eq", ["monoid_localization"]], ["del", "theorem", "mk_eq_iff_of_eq", ["monoid_localization"]], ["del", "theorem", "mk_eq_mul_mk_one", ["monoid_localization"]], ["del", "theorem", "mk_eq_of_eq", ["monoid_localization"]], ["del", "theorem", "mk_is_unit'", ["monoid_localization"]], ["del", "theorem", "mk_is_unit", ["monoid_localization"]], ["del", "theorem", "mk_mul_cancel_left", ["monoid_localization"]], ["del", "theorem", "mk_mul_cancel_right", ["monoid_localization"]], ["del", "theorem", "mk_mul_mk", ["monoid_localization"]], ["del", "theorem", "mk_self'", ["monoid_localization"]], ["del", "theorem", "mk_self", ["monoid_localization"]], ["del", "def", "of", ["monoid_localization"]], ["del", "theorem", "of_eq_mk", ["monoid_localization"]], ["del", "theorem", "of_is_unit'", ["monoid_localization"]], ["del", "theorem", "of_is_unit", ["monoid_localization"]], ["del", "theorem", "of_ker_iff", ["monoid_localization"]], ["del", "theorem", "of_mul_mk", ["monoid_localization"]], ["del", "theorem", "one_rel", ["monoid_localization"]], ["del", "theorem", "r_le_ker_aux", ["monoid_localization"]], ["del", "def", "to_units", ["monoid_localization"]], ["del", "theorem", "to_units_inv", ["monoid_localization"]], ["del", "theorem", "to_units_map_inv", ["monoid_localization"]], ["del", "theorem", "to_units_mk", ["monoid_localization"]], ["del", "def", "units_restrict", ["monoid_localization"]], ["del", "theorem", "units_restrict_mul", ["monoid_localization"]], ["del", "def", "monoid_localization", []], ["add", "def", "r'", ["submonoid", "localization"]], ["add", "def", "r", ["submonoid", "localization"]], ["add", "theorem", "r_eq_r'", ["submonoid", "localization"]], ["add", "theorem", "r_iff_exists", ["submonoid", "localization"]], ["add", "def", "localization", ["submonoid"]], ["add", "theorem", "eq_iff_eq", ["submonoid", "localization_map"]], ["add", "theorem", "eq_mk'_iff_mul_eq", ["submonoid", "localization_map"]], ["add", "theorem", "exists_of_sec", ["submonoid", "localization_map"]], ["add", "theorem", "exists_of_sec_mk'", ["submonoid", "localization_map"]], ["add", "theorem", "inv_inj", ["submonoid", "localization_map"]], ["add", "theorem", "inv_unique", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_eq_iff_eq", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_eq_iff_eq_mul", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_eq_iff_mk'_eq", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_eq_of_eq", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_mul", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_mul_cancel_left", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_mul_cancel_right", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_mul_eq_mk'_of_mul", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_one", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_sec", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_self'", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_self", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_spec'", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_spec", ["submonoid", "localization_map"]], ["add", "theorem", "mk'_surjective", ["submonoid", "localization_map"]], ["add", "theorem", "mul_inv", ["submonoid", "localization_map"]], ["add", "theorem", "mul_inv_left", ["submonoid", "localization_map"]], ["add", "theorem", "mul_inv_right", ["submonoid", "localization_map"]], ["add", "theorem", "mul_mk'_eq_mk'_of_mul", ["submonoid", "localization_map"]], ["add", "theorem", "mul_mk'_one_eq_mk'", ["submonoid", "localization_map"]], ["add", "theorem", "sec_spec'", ["submonoid", "localization_map"]], ["add", "theorem", "sec_spec", ["submonoid", "localization_map"]], ["add", "structure", "localization_map", ["submonoid"]], ["del", "def", "r'", ["submonoid"]], ["del", "def", "r", ["submonoid"]], ["del", "theorem", "r_eq_r'", ["submonoid"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "def", "restrict", ["monoid_hom"]]]}]}, {"timestamp": 1583495003, "sha": "36b336cb", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583485490, "sha": "8fb9881a", "message": "fix(category_theory/limits): Add some missing instances for special shapes of limits (#2083)\n* Add some instances for limit shapes\n* Deduce has_(equalizers|kernels|pullbacks) from has_finite_limits", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "has_coequalizers_of_has_finite_colimits", ["category_theory", "limits"]], ["add", "def", "has_equalizers_of_has_finite_limits", ["category_theory", "limits"]], ["mod", "inductive", "walking_parallel_pair_hom", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "has_cokernels_of_has_finite_colimits", ["category_theory", "limits"]], ["add", "def", "has_kernels_of_has_finite_limits", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "has_pullbacks_of_has_finite_limits", ["category_theory", "limits"]], ["add", "def", "has_pushouts_of_has_finite_colimits", ["category_theory", "limits"]], ["mod", "inductive", "hom", ["category_theory", "limits", "walking_cospan"]], ["mod", "inductive", "hom", ["category_theory", "limits", "walking_span"]]]}]}, {"timestamp": 1583477818, "sha": "f81f861e", "message": "feat(category_theory/limits): the kernel of the cokernel of an epimorphism is an isomorphism (#2088)\n* The kernel of the cokernel of an epimorphism is an isomorphism\n* Fix unused argument warnings\n* Remove a set_option\n* Fix a typo", "changes": [{"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "cocone_parallel_pair_ext", ["category_theory", "limits"]], ["add", "theorem", "cocone_parallel_pair_left", ["category_theory", "limits"]], ["add", "theorem", "cocone_parallel_pair_right", ["category_theory", "limits"]], ["add", "def", "cocone_parallel_pair_self", ["category_theory", "limits"]], ["add", "theorem", "cocone_parallel_pair_self_X", ["category_theory", "limits"]], ["add", "theorem", "cocone_parallel_pair_self_ι_app_one", ["category_theory", "limits"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "cofork", ["category_theory", "limits", "coequalizer", "π"]], ["add", "theorem", "eq_app_one", ["category_theory", "limits", "coequalizer", "π"]], ["add", "theorem", "π_epi", ["category_theory", "limits", "coequalizer"]], ["add", "def", "π_of_self'", ["category_theory", "limits", "coequalizer"]], ["add", "def", "π_of_self", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "eq_of_π_π", ["category_theory", "limits", "cofork"]], ["add", "def", "colimit_cocone_parallel_pair_self_is_iso'", ["category_theory", "limits"]], ["add", "def", "colimit_cocone_parallel_pair_self_is_iso", ["category_theory", "limits"]], ["add", "def", "ι_of_self'", ["category_theory", "limits", "equalizer"]], ["add", "def", "ι_of_self", ["category_theory", "limits", "equalizer"]], ["add", "def", "is_colimit_cocone_parallel_pair_self", ["category_theory", "limits"]], ["add", "def", "limit_cone_parallel_pair_self_is_iso'", ["category_theory", "limits"]], ["add", "def", "mono_limit_cocone_parallel_pair_is_iso", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/kernels.lean", "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "def", "is_colimit_cocone_zero_cocone", ["category_theory", "limits", "cokernel"]], ["add", "def", "of_epi", ["category_theory", "limits", "cokernel"]], ["add", "def", "of_kernel_of_mono", ["category_theory", "limits", "cokernel"]], ["add", "def", "zero_cocone", ["category_theory", "limits", "cokernel"]], ["add", "theorem", "π_of_epi", ["category_theory", "limits", "cokernel"]], ["add", "def", "π_of_zero", ["category_theory", "limits", "cokernel"]], ["add", "def", "of_cokernel_of_epi", ["category_theory", "limits", "kernel"]], ["add", "def", "of_mono", ["category_theory", "limits", "kernel"]], ["add", "theorem", "ι_of_mono", ["category_theory", "limits", "kernel"]], ["add", "def", "ι_of_zero", ["category_theory", "limits", "kernel"]]]}]}, {"timestamp": 1583434692, "sha": "0f9751c2", "message": "feat(data/traversable): improve support for instances for recursive types (#2072)", "changes": [{"oldPath": "src/category/traversable/derive.lean", "newPath": "src/category/traversable/derive.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": [["add", "def", "ex", []], ["add", "inductive", "my_tree", []], ["add", "def", "x", []]]}]}, {"timestamp": 1583458278, "sha": "093ac77a", "message": "feat(analysis/calculus/specific_functions): smoothness of exp(-1/x) (#2087)\n* feat(analysis/calculus/specific_functions): smoothness of exp(-1/x)\n* use namespace; shorter names\n* fix field_simp", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "div_sub'", []], ["add", "theorem", "sub_div'", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/specific_functions.lean", "changes": [["add", "def", "f_aux", ["exp_neg_inv_glue"]], ["add", "theorem", "f_aux_deriv", ["exp_neg_inv_glue"]], ["add", "theorem", "f_aux_deriv_pos", ["exp_neg_inv_glue"]], ["add", "theorem", "f_aux_deriv_zero", ["exp_neg_inv_glue"]], ["add", "theorem", "f_aux_has_deriv_at", ["exp_neg_inv_glue"]], ["add", "theorem", "f_aux_iterated_deriv", ["exp_neg_inv_glue"]], ["add", "theorem", "f_aux_limit", ["exp_neg_inv_glue"]], ["add", "theorem", "f_aux_zero_eq", ["exp_neg_inv_glue"]], ["add", "theorem", "nonneg", ["exp_neg_inv_glue"]], ["add", "theorem", "pos_of_pos", ["exp_neg_inv_glue"]], ["add", "theorem", "smooth", ["exp_neg_inv_glue"]], ["add", "theorem", "zero_of_nonpos", ["exp_neg_inv_glue"]], ["add", "def", "exp_neg_inv_glue", []]]}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1583424327, "sha": "50c4adf9", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583414224, "sha": "78ffbae0", "message": "chore(*): switch to lean 3.6.1 (#2064)\n* chore(*): switch to lean 3.6.0\n* Port `src/linear_algebra` to Lean 3.6c\n* Port `src/ring_theory` to Lean 3.6c\n* Port `src/algebra` and its dependencies to Lean 3.6c\n* Port `src/group_theory` to Lean 3.6c\n* WIP: Ports part of `src/data` to Lean 3.6c\n* Port `src/data` (and dependencies) to Lean 3.6\n* fix set_theory.lists\n* fix ring2\n* fix pell.lean\nthese aren't the cleanest proofs, but pell.lean is kind of a standalone thing.\n* fix dioph.lean\n* Port `src/number_theory/sum_four_squares.lean` to Lean 3.6c\n* Port `src/field_theory` to Lean 3.6\n* Port `src/computability` to Lean 3.6c\n* Port `src/measure_theory` (and dependencies) to Lean 3.6c\n* fix manifold/real_instances\n* fix analysis/complex/polynomial\n* Fix some compile errors in `real_inner_product`\n* Upgrade to Lean 3.6.1\n* perf: speed up calls to linarith\n* Reduce instance priorities for potentially noncomputable instances.\n* Remove cyclic instance.\n* Make arguments {implicit} in instances where they can be filled in via unification.\n* Make inner_product_space compile.\n* Style.\n* Port data.nat.modeq\n* Port data.int.parity\n* Port data.int.modeq\n* Port data.real.hyperreal\n* fix(ci): always run git setup step\ncloses #2079\n(cherry picked from commit 8a0157dc8dfc946d98eba02417052c3c9556559e)\n* Remove pre-3.6 legacy code.\n* Fix test/monotonicity.lean\n* Fix test/ring_exp.lean\n* Fix test/conv.lean\n* Fix archive/imo1988_q6.lean\n* Fix docs/tutorial/Zmod37.lean\n* Fix archive/sensitivity.lean\n* refactor(algebra/lie_algebra): lie_algebra should not extend lie_ring\n* remove unused argument\n* add doc-string to instance that became a def\n* add docstring\n* Fix linting error ☺\n* Fix data.real.irrational\n* fixing a proof\n* cleaning up proof\n* fix broken proof\n* fix proof\n* fix some more proofs\n* fix\n* fix proofs", "changes": [{"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo1988_q6.lean", "changes": []}, {"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "docs/tutorial/Zmod37.lean", "newPath": "docs/tutorial/Zmod37.lean", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "div_div_cancel", []], ["del", "theorem", "div_div_div_cancel_right", []], ["mod", "theorem", "div_neg", []], ["del", "theorem", "div_right_comm", []], ["mod", "theorem", "inv_eq_iff", ["division_ring"]], ["mod", "theorem", "inv_inj", ["division_ring"]], ["mod", "theorem", "div_div_cancel", ["field"]], ["mod", "theorem", "div_div_div_cancel_right", ["field"]], ["mod", "theorem", "div_right_comm", ["field"]], ["mod", "theorem", "inv_div", []], ["mod", "theorem", "inv_div_left", []], ["add", "theorem", "inv_inv''", []], ["del", "theorem", "inv_inv'", []], ["mod", "theorem", "inv_involutive'", []], ["mod", "theorem", "neg_inv", []]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["mod", "theorem", "map_fpow", ["is_ring_hom"]], ["mod", "theorem", "map_fpow", ["ring_hom"]]]}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": []}, {"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "neg_sub_neg", []], ["add", "theorem", "sub_eq_sub_iff_add_eq_add", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "div_pow", []], ["mod", "theorem", "inv_pow", ["division_ring"]], ["mod", "theorem", "inv_pow'", []], ["mod", "theorem", "one_div_pow", []], ["mod", "theorem", "pow_div", []]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "coe_sub", ["submodule"]], ["mod", "def", "vector_space", []]]}, {"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "def", "to_decidable_linear_ordered_comm_ring", ["linear_nonneg_ring"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["add", "theorem", "sub_apply", ["pi"]], ["add", "theorem", "fst_sub", ["prod"]], ["add", "theorem", "snd_sub", ["prod"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "arcsin_eq_pi_div_two_sub_arccos", ["real"]]]}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["del", "theorem", "has_insert_eq_insert", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "mem_enum_from", ["list"]]]}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/multiplicity.lean", "newPath": "src/data/nat/multiplicity.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "degree_map", ["polynomial"]], ["mod", "theorem", "leading_coeff_map", ["polynomial"]], ["mod", "theorem", "map_div", ["polynomial"]], ["mod", "theorem", "map_eq_zero", ["polynomial"]], ["mod", "theorem", "map_mod", ["polynomial"]], ["mod", "theorem", "nat_degree_map", ["polynomial"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_div", ["rat"]], ["mod", "theorem", "cast_inv", ["rat"]], ["mod", "theorem", "cast_mk", ["rat"]], ["mod", "theorem", "cast_pow", ["rat"]]]}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "inv_epsilon_eq_omega", ["hyperreal"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "inv_inv", ["nnreal"]]]}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "insert_of_has_insert", ["set"]]]}, {"oldPath": "src/data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["mod", "theorem", "pow_card_sub_one_eq_one", ["finite_field"]]]}, {"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": []}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["mod", "theorem", "is_basis_monomials", ["mv_polynomial"]], ["mod", "theorem", "mem_restrict_degree", ["mv_polynomial"]], ["mod", "theorem", "mem_restrict_degree_iff_sup", ["mv_polynomial"]], ["mod", "def", "restrict_degree", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": [["mod", "def", "UMP", ["perfect_closure"]], ["mod", "theorem", "eq_pth_root", ["perfect_closure"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/contraction.lean", "newPath": "src/linear_algebra/contraction.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_of_field", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "dim_lt_omega", ["finite_dimensional"]], ["mod", "theorem", "findim_eq_dim", ["finite_dimensional"]], ["mod", "def", "finite_dimensional", []]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "theorem", "rank_diagonal", ["matrix"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/number_theory/sum_four_squares.lean", "newPath": "src/number_theory/sum_four_squares.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "theorem", "eq_bot_of_prime", ["ideal"]], ["mod", "theorem", "eq_bot_or_top", ["ideal"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "test/conv.lean", "newPath": "test/conv.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1583367889, "sha": "85351323", "message": "refactor(algebra/lie_algebra): lie_algebra should not extend lie_ring (#2084)\n* refactor(algebra/lie_algebra): lie_algebra should not extend lie_ring\n* Fix linting error ☺", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["mod", "theorem", "endo_algebra_bracket", ["lie_algebra"]], ["mod", "def", "of_associative_algebra", ["lie_algebra"]], ["mod", "theorem", "lie_smul", []], ["mod", "def", "lie_subalgebra_lie_algebra", []], ["add", "def", "lie_subalgebra_lie_ring", []], ["add", "def", "lie_ring", ["matrix"]], ["mod", "theorem", "smul_lie", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "add_neg_le_iff_le_add", []]]}]}, {"timestamp": 1583360580, "sha": "7d6c4fbe", "message": "fix(congruence): use has_coe_t instead of has_coe (#2086)\n* fix(congruence): use has_coe_t instead of has_coe\n* capitalization\nDoes that matter for doc generation?", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}]}, {"timestamp": 1583351760, "sha": "9fc675c4", "message": "chore(analysis/normed_space/basic): rename `ne_mem_of_tendsto_norm_at_top` (#2085)\nIt uses `∀ᶠ` now, so rename to `eventually_ne_of_tendsto_norm_at_top`.", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "eventually_ne_of_tendsto_norm_at_top", []], ["del", "theorem", "ne_mem_of_tendsto_norm_at_top", []]]}]}, {"timestamp": 1583327410, "sha": "f1124087", "message": "fix(ci): adjust conditions for fixing steps (#2082)\n* fix(ci): always run git setup step\ncloses #2079\n* fix(ci): always test doc gen\ndocumentation will still be pushed only under the same conditions as before\ncloses #2081\n* Update scripts/deploy_docs.sh\nCo-Authored-By: Gabriel Ebner ", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1583305760, "sha": "cc4ac8a6", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583268305, "sha": "0f1eb80e", "message": "fix(CI/documentation): add a name back", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1583274290, "sha": "13f04c00", "message": "feat(tactic/extract_goal): improve formatting to put assumptions on their own line (#2076)", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1583266468, "sha": "545dd03d", "message": "feat(topology/metric_space/antilipschitz): define `antilipschitz_with` (#2075)\n* chore(data/real/ennreal): weaker assumptions in `sub_mul`, add `coe_inv_le`\n* feat(topology/metric_space/antilipschitz): define `antilipschitz_with`\nAlso make some proofs use facts about `antilipschitz_with`.\n* Rename inequalities, move `K` to the other side\nThis way it's easier to glue it with the rest of the library, and\nwe can avoid assuming `0 < K` in many lemmas.", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "abs_dist_sub_le_dist_add_add", []], ["add", "theorem", "add_lipschitz_with", ["antilipschitz_with"]], ["add", "theorem", "edist_add_add_le", []], ["add", "theorem", "add", ["lipschitz_with"]], ["add", "theorem", "neg", ["lipschitz_with"]], ["add", "theorem", "sub", ["lipschitz_with"]], ["add", "theorem", "nndist_add_add_le", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "antilipschitz", ["continuous_linear_equiv"]], ["add", "theorem", "lipschitz", ["continuous_linear_equiv"]], ["add", "theorem", "uniform_embedding", ["continuous_linear_equiv"]], ["add", "theorem", "antilipschitz_of_uniform_embedding", ["continuous_linear_map"]], ["del", "theorem", "bound_of_uniform_embedding", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_of_lipschitz", ["continuous_linear_map"]], ["mod", "theorem", "uniform_embedding_of_bound", ["continuous_linear_map"]], ["add", "theorem", "antilipschitz_of_bound", ["linear_map"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/metric_space/antilipschitz.lean", "changes": [["add", "theorem", "comp", ["antilipschitz_with"]], ["add", "theorem", "id", ["antilipschitz_with"]], ["add", "theorem", "mul_le_dist", ["antilipschitz_with"]], ["add", "theorem", "mul_le_edist", ["antilipschitz_with"]], ["add", "theorem", "to_inverse", ["antilipschitz_with"]], ["add", "theorem", "uniform_embedding", ["antilipschitz_with"]], ["add", "def", "antilipschitz_with", []], ["add", "theorem", "antilipschitz_with_iff_le_mul_dist", []], ["add", "theorem", "to_inverse", ["lipschitz_with"]]]}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["del", "theorem", "dist_le", ["contracting_with"]], ["add", "theorem", "dist_le_mul", ["contracting_with"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "antilipschitz", ["isometry"]], ["mod", "theorem", "injective", ["isometry"]], ["add", "theorem", "lipschitz", ["isometry"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["del", "theorem", "edist_le", ["lipschitz_with"]], ["add", "theorem", "edist_le_mul", ["lipschitz_with"]], ["add", "theorem", "mul_edist_le", ["lipschitz_with"]], ["del", "theorem", "lipschitz_with_iff_dist_le", []], ["add", "theorem", "lipschitz_with_iff_dist_le_mul", []]]}]}, {"timestamp": 1583246358, "sha": "02d22c39", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583236306, "sha": "f7e82d06", "message": "feat(tactic/lint): check for redundant simp lemmas (#2066)\n* chore(*): fix simp lemmas\n* feat(tactic/lint): check for redundant simp lemmas", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "dvd_mul_unit_iff", []], ["mod", "theorem", "mul_unit_dvd_iff", []]]}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_const_one", ["finset"]], ["mod", "theorem", "sum_const_zero", ["finset"]]]}, {"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["mod", "theorem", "cast_ne_zero", ["nat"]]]}, {"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": [["mod", "theorem", "inv_left", ["commute"]], ["mod", "theorem", "inv_right", ["commute"]], ["mod", "theorem", "neg_left", ["commute"]], ["mod", "theorem", "neg_right", ["commute"]], ["mod", "theorem", "units_inv_left", ["commute"]], ["mod", "theorem", "units_inv_right", ["commute"]]]}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": [["mod", "theorem", "lift_of_mul", ["free_semigroup"]]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "prod_repeat", ["list"]], ["mod", "theorem", "sum_repeat", ["list"]]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "map_lie'", ["lie_algebra"]], ["mod", "theorem", "map_lie", ["lie_algebra"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "comp_apply", ["ring_hom"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["mod", "theorem", "of_function_map", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["mod", "theorem", "vcomp_app'", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["mod", "theorem", "triangle_assoc_comp_left", ["category_theory", "monoidal_category"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "theorem", "app_hom", ["category_theory", "nat_iso"]], ["mod", "theorem", "app_inv", ["category_theory", "nat_iso"]], ["mod", "theorem", "hom_app_inv_app_id", ["category_theory", "nat_iso"]], ["mod", "theorem", "inv_app_hom_app_id", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": [["mod", "theorem", "rfind_dom'", ["nat"]]]}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["mod", "theorem", "coe_to_bool", ["bool"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "abs_of_nat", ["complex"]], ["mod", "theorem", "of_real_ne_zero", ["complex"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "theorem", "erase_ne", ["dfinsupp"]], ["mod", "theorem", "filter_apply_neg", ["dfinsupp"]], ["mod", "theorem", "filter_apply_pos", ["dfinsupp"]], ["mod", "theorem", "mem_support_iff", ["dfinsupp"]], ["mod", "theorem", "single_eq_of_ne", ["dfinsupp"]]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["mod", "theorem", "coe_units_equiv_ne_zero", ["equiv"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": [["mod", "theorem", "decode_eq_of_nat", ["denumerable"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "mk_val", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "image_val_of_inj_on", ["finset"]], ["mod", "theorem", "insert_empty_eq_singleton", ["finset"]], ["mod", "theorem", "mem_image_of_mem", ["finset"]], ["mod", "theorem", "mem_map_of_mem", ["finset"]], ["mod", "theorem", "piecewise_eq_of_mem", ["finset"]], ["mod", "theorem", "piecewise_eq_of_not_mem", ["finset"]], ["mod", "theorem", "piecewise_insert_of_ne", ["finset"]], ["mod", "theorem", "sdiff_union_of_subset", ["finset"]], ["mod", "theorem", "singleton_eq_singleton", ["finset"]], ["mod", "theorem", "union_sdiff_of_subset", ["finset"]], ["mod", "theorem", "union_self", ["finset"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["mod", "theorem", "card_unit", ["fintype"]], ["mod", "theorem", "univ_unit", ["fintype"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_ne_zero", ["int"]], ["mod", "theorem", "coe_nat_ne_zero", ["int"]], ["mod", "theorem", "mod_one", ["int"]], ["mod", "theorem", "mod_self", ["int"]], ["mod", "theorem", "mod_zero", ["int"]], ["mod", "theorem", "zero_mod", ["int"]]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "cons_inj'", ["list"]], ["mod", "theorem", "cons_ne_nil", ["list"]], ["mod", "theorem", "count_cons_of_ne", ["list"]], ["mod", "theorem", "count_eq_zero_of_not_mem", ["list"]], ["mod", "theorem", "disjoint_singleton", ["list"]], ["mod", "theorem", "erase_of_not_mem", ["list"]], ["mod", "theorem", "index_of_cons_ne", ["list"]], ["mod", "theorem", "index_of_of_not_mem", ["list"]], ["mod", "theorem", "insert_of_mem", ["list"]], ["mod", "theorem", "insert_of_not_mem", ["list"]], ["mod", "theorem", "mem_insert_of_mem", ["list"]], ["mod", "theorem", "mem_map_of_inj", ["list"]], ["mod", "theorem", "singleton_disjoint", ["list"]], ["mod", "theorem", "sublists'_singleton", ["list"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["mod", "theorem", "kerase_cons_eq", ["list"]], ["mod", "theorem", "kerase_cons_ne", ["list"]], ["mod", "theorem", "kerase_of_not_mem_keys", ["list"]], ["mod", "theorem", "mem_keys_kerase_of_ne", ["list"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "cons_erase", ["multiset"]], ["mod", "theorem", "cons_ndinter_of_mem", ["multiset"]], ["mod", "theorem", "count_cons_of_ne", ["multiset"]], ["mod", "theorem", "count_eq_zero_of_not_mem", ["multiset"]], ["mod", "theorem", "count_erase_of_ne", ["multiset"]], ["mod", "theorem", "disjoint_singleton", ["multiset"]], ["mod", "theorem", "erase_cons_tail", ["multiset"]], ["mod", "theorem", "erase_of_not_mem", ["multiset"]], ["del", "theorem", "forall_mem_ne", ["multiset"]], ["mod", "theorem", "length_ndinsert_of_mem", ["multiset"]], ["mod", "theorem", "length_ndinsert_of_not_mem", ["multiset"]], ["mod", "theorem", "map_id", ["multiset"]], ["mod", "theorem", "mem_map_of_inj", ["multiset"]], ["mod", "theorem", "mem_ndinsert_of_mem", ["multiset"]], ["mod", "theorem", "nodup_antidiagonal", ["multiset", "nat"]], ["mod", "theorem", "ndinsert_of_mem", ["multiset"]], ["mod", "theorem", "ndinsert_of_not_mem", ["multiset"]], ["mod", "theorem", "ndinter_cons_of_not_mem", ["multiset"]], ["mod", "theorem", "ndinter_eq_inter", ["multiset"]], ["mod", "theorem", "ndunion_eq_union", ["multiset"]], ["mod", "theorem", "singleton_disjoint", ["multiset"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "coe_add_get", ["enat"]], ["add", "theorem", "get_coe", ["enat"]]]}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["mod", "theorem", "add_to_nat", ["num"]], ["mod", "theorem", "cast_inj", ["num"]], ["mod", "theorem", "cast_le", ["num"]], ["mod", "theorem", "cast_lt", ["num"]], ["mod", "theorem", "dvd_to_nat", ["num"]], ["mod", "theorem", "land_to_nat", ["num"]], ["mod", "theorem", "ldiff_to_nat", ["num"]], ["mod", "theorem", "le_to_nat", ["num"]], ["mod", "theorem", "lor_to_nat", ["num"]], ["mod", "theorem", "lt_to_nat", ["num"]], ["mod", "theorem", "lxor_to_nat", ["num"]], ["mod", "theorem", "mul_to_nat", ["num"]], ["mod", "theorem", "of_nat_cast", ["num"]], ["mod", "theorem", "shiftl_to_nat", ["num"]], ["mod", "theorem", "shiftr_to_nat", ["num"]], ["mod", "theorem", "to_of_nat", ["num"]], ["mod", "theorem", "add_to_nat", ["pos_num"]], ["mod", "theorem", "cast_add", ["pos_num"]], ["mod", "theorem", "cast_inj", ["pos_num"]], ["mod", "theorem", "cast_le", ["pos_num"]], ["mod", "theorem", "cast_lt", ["pos_num"]], ["mod", "theorem", "cast_mul", ["pos_num"]], ["mod", "theorem", "cast_succ", ["pos_num"]], ["mod", "theorem", "le_to_nat", ["pos_num"]], ["mod", "theorem", "lt_to_nat", ["pos_num"]], ["mod", "theorem", "mul_to_nat", ["pos_num"]], ["mod", "theorem", "cast_inj", ["znum"]], ["mod", "theorem", "cast_le", ["znum"]], ["mod", "theorem", "cast_lt", ["znum"]], ["mod", "theorem", "le_to_int", ["znum"]], ["mod", "theorem", "lt_to_int", ["znum"]], ["mod", "theorem", "to_of_int", ["znum"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["mod", "theorem", "add_def", ["padic_int"]], ["mod", "theorem", "mul_def", ["padic_int"]], ["mod", "theorem", "norm_one", ["padic_norm_z"]]]}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["mod", "theorem", "to_pnat'_coe", ["pnat"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "coeff_C_mul_X", ["polynomial"]], ["mod", "theorem", "coeff_one", ["polynomial"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_ne_zero", ["rat"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "inv_le_inv", ["ennreal"]], ["mod", "theorem", "two_ne_top", ["ennreal"]], ["mod", "theorem", "two_ne_zero", ["ennreal"]], ["mod", "theorem", "zero_lt_coe_iff", ["ennreal"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["add", "theorem", "cast_div", ["hyperreal"]], ["add", "theorem", "coe_abs", ["hyperreal"]], ["add", "theorem", "coe_eq_coe", ["hyperreal"]], ["add", "theorem", "coe_le_coe", ["hyperreal"]], ["add", "theorem", "coe_lt_coe", ["hyperreal"]], ["add", "theorem", "coe_max", ["hyperreal"]], ["add", "theorem", "coe_min", ["hyperreal"]], ["add", "theorem", "hyperfilter_ne_bot'", ["hyperreal"]], ["add", "theorem", "hyperfilter_ne_bot", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "coe_mk", ["nnreal"]]]}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["mod", "theorem", "join_cons", ["seq"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "ball_image_iff", ["set"]], ["mod", "theorem", "compl_compl", ["set"]], ["mod", "theorem", "image_id'", ["set"]], ["mod", "theorem", "image_id", ["set"]], ["mod", "theorem", "insert_of_has_insert", ["set"]], ["del", "theorem", "set_of_mem", ["set"]], ["mod", "theorem", "range_val", ["subtype"]], ["mod", "theorem", "val_range", ["subtype"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "piecewise_eq_of_mem", ["set"]], ["mod", "theorem", "piecewise_eq_of_not_mem", ["set"]], ["mod", "theorem", "piecewise_insert_of_ne", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "mem_sUnion", ["set"]]]}, {"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["mod", "theorem", "inj_iff", ["sigma", "mk"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "theorem", "mk_eq_mk", ["subtype"]]]}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["mod", "theorem", "inj_iff", ["sum", "inl"]], ["mod", "theorem", "inl_ne_inr", ["sum"]], ["mod", "theorem", "inj_iff", ["sum", "inr"]], ["mod", "theorem", "inr_ne_inl", ["sum"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["mod", "theorem", "cast_mod_int'", ["zmod"]], ["mod", "theorem", "cast_mod_nat'", ["zmod"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["del", "theorem", "swap_mul_self", ["equiv", "perm"]], ["del", "theorem", "swap_swap_apply", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "map_ne_zero_iff", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/special_linear_group.lean", "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["mod", "theorem", "det_coe_fun", ["matrix", "special_linear_group"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "coe_fn_coe_trans", []], ["mod", "theorem", "coe_sort_coe_trans", []], ["mod", "theorem", "false_ne_true", []], ["mod", "theorem", "imp_true_iff", []], ["mod", "theorem", "not_and_not_right", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_singleton", ["lattice"]], ["mod", "theorem", "Sup_singleton", ["lattice"]], ["mod", "theorem", "infi_const", ["lattice"]], ["del", "theorem", "insert_of_has_insert", ["lattice"]], ["mod", "theorem", "supr_const", ["lattice"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "principal_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["add", "theorem", "coe_injective", ["filter", "filter_product"]], ["mod", "theorem", "of_add", ["filter", "filter_product"]], ["add", "theorem", "of_bit0", ["filter", "filter_product"]], ["add", "theorem", "of_bit1", ["filter", "filter_product"]], ["mod", "theorem", "of_div", ["filter", "filter_product"]], ["mod", "theorem", "of_eq_zero", ["filter", "filter_product"]], ["mod", "theorem", "of_inv", ["filter", "filter_product"]], ["mod", "theorem", "of_mul", ["filter", "filter_product"]], ["mod", "theorem", "of_ne_zero", ["filter", "filter_product"]], ["mod", "theorem", "of_neg", ["filter", "filter_product"]], ["mod", "theorem", "of_one", ["filter", "filter_product"]], ["mod", "theorem", "of_sub", ["filter", "filter_product"]], ["mod", "theorem", "of_zero", ["filter", "filter_product"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "mk_eq_div", ["localization", "fraction_ring"]], ["mod", "theorem", "mk_mul_cancel_left", ["localization"]], ["mod", "theorem", "mk_mul_cancel_right", ["localization"]], ["mod", "theorem", "mk_self''", ["localization"]], ["mod", "theorem", "mk_self'", ["localization"]], ["mod", "theorem", "mk_self", ["localization"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "theorem", "coeff_zero_C", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_X", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_mul_X", ["mv_power_series"]], ["mod", "theorem", "coeff_zero_one", ["mv_power_series"]], ["mod", "theorem", "inv_of_unit_eq", ["mv_power_series"]], ["mod", "theorem", "inv_of_unit_eq", ["power_series"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "coe_add", ["associates", "factor_set"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "mk_unit", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "coe_coe_fn", ["initial_seg"]], ["mod", "theorem", "of_iso_apply", ["initial_seg"]], ["mod", "theorem", "nat_cast_ne_zero", ["ordinal"]], ["mod", "theorem", "one_add_of_omega_le", ["ordinal"]], ["mod", "theorem", "type_ne_zero_iff_nonempty", ["ordinal"]], ["mod", "theorem", "coe_coe_fn", ["principal_seg"]], ["mod", "theorem", "equiv_lt_apply", ["principal_seg"]], ["mod", "theorem", "lt_le_apply", ["principal_seg"]], ["mod", "theorem", "of_element_apply", ["principal_seg"]], ["mod", "theorem", "trans_apply", ["principal_seg"]], ["mod", "theorem", "trans_top", ["principal_seg"]]]}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": [["del", "theorem", "mem_image", []]]}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": [["add", "theorem", "add_zero", []], ["add", "theorem", "zero_add_zero", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "id_apply", ["continuous_linear_map"]], ["add", "theorem", "sub_apply'", ["continuous_linear_map"]], ["mod", "theorem", "sub_apply", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "theorem", "Hausdorff_edist_self_closure", ["emetric"]], ["mod", "theorem", "Hausdorff_dist_self_closure", ["metric"]]]}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": [["mod", "theorem", "id_hom_app", ["Top", "presheaf", "pushforward"]]]}, {"oldPath": "test/lint_simp_nf.lean", "newPath": "test/lint_simp_nf.lean", "changes": []}]}, {"timestamp": 1583226261, "sha": "2d1bd457", "message": "fix some docstrings [ci skip] (#2078)", "changes": [{"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}]}, {"timestamp": 1583219908, "sha": "2a9ad03c", "message": "feat(data/list/basic): more lemmas about `list.chain'`; `chain'_of_pairwise` → `pairwise.chain'` (#2071)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "cons", ["list", "chain'"]], ["add", "theorem", "tail", ["list", "chain'"]], ["add", "theorem", "chain'_cons", ["list"]], ["add", "theorem", "chain'_nil", ["list"]], ["del", "theorem", "chain'_of_pairwise", ["list"]], ["add", "theorem", "chain'_pair", ["list"]], ["add", "theorem", "chain'_reverse", ["list"]], ["mod", "theorem", "chain'_singleton", ["list"]], ["add", "theorem", "imp'", ["list", "chain"]], ["add", "theorem", "chain'", ["list", "pairwise"]]]}]}, {"timestamp": 1583213397, "sha": "e0030149", "message": "feat(analysis/calculus/iterated_deriv): iterated derivative of a function defined on the base field (#2067)\n* iterated deriv\n* cleanup\n* fix docstring\n* add iterated_deriv_within_succ'\n* remove n.succ\n* n+1 -> n + 1", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/iterated_deriv.lean", "changes": [["add", "def", "iterated_deriv", []], ["add", "theorem", "iterated_deriv_eq_equiv_comp", []], ["add", "theorem", "iterated_deriv_eq_iterate", []], ["add", "theorem", "iterated_deriv_eq_iterated_fderiv", []], ["add", "theorem", "iterated_deriv_one", []], ["add", "theorem", "iterated_deriv_succ'", []], ["add", "theorem", "iterated_deriv_succ", []], ["add", "def", "iterated_deriv_within", []], ["add", "theorem", "iterated_deriv_within_eq_equiv_comp", []], ["add", "theorem", "iterated_deriv_within_eq_iterate", []], ["add", "theorem", "iterated_deriv_within_eq_iterated_fderiv_within", []], ["add", "theorem", "iterated_deriv_within_one", []], ["add", "theorem", "iterated_deriv_within_succ'", []], ["add", "theorem", "iterated_deriv_within_succ", []], ["add", "theorem", "iterated_deriv_within_univ", []], ["add", "theorem", "iterated_deriv_within_zero", []], ["add", "theorem", "iterated_deriv_zero", []], ["add", "theorem", "iterated_fderiv_apply_eq_iterated_deriv_mul_prod", []], ["add", "theorem", "iterated_fderiv_eq_equiv_comp", []], ["add", "theorem", "iterated_fderiv_within_apply_eq_iterated_deriv_within_mul_prod", []], ["add", "theorem", "iterated_fderiv_within_eq_equiv_comp", []], ["add", "theorem", "continuous_iterated_deriv", ["times_cont_diff"]], ["add", "theorem", "differentiable_iterated_deriv", ["times_cont_diff"]], ["add", "theorem", "times_cont_diff_iff_iterated_deriv", []], ["add", "theorem", "times_cont_diff_of_differentiable_iterated_deriv", []], ["add", "theorem", "continuous_on_iterated_deriv_within", ["times_cont_diff_on"]], ["add", "theorem", "differentiable_on_iterated_deriv_within", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_diff_on_iff_continuous_on_differentiable_on_deriv", []], ["add", "theorem", "times_cont_diff_on_of_continuous_on_differentiable_on_deriv", []], ["add", "theorem", "times_cont_diff_on_of_differentiable_on_deriv", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["mod", "theorem", "iterated_fderiv_succ_apply_left", []], ["mod", "theorem", "iterated_fderiv_succ_apply_right", []], ["mod", "theorem", "iterated_fderiv_within_succ_apply_left", []]]}]}, {"timestamp": 1583194660, "sha": "262a39ef", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1583185535, "sha": "fe9d7ff4", "message": "feat(tactic/nat_cases): a tactic to case bash inequalities on natural numbers (#1596)\n* starting on finset_cases\n* looking pretty nice\n* moving lemma that rewrites nat.add back to (+)\n* update tactics.md\n* cleanup\n* suggestions from review\n* Update src/tactic/fin_cases.lean\nCo-Authored-By: semorrison \n* incomplete implementation of `with` syntax\n* looks good\n* failed attempt to use unification\n* test showing elaboration problem\n* elaborating the `with` argument with respect to the expected type\n* testing the type of A in `x ∈ A` using unification rather than syntactic matching\n* refactor and cleanup\n* refactor\n* initial start on nat_cases\n* initial start on nat_cases\n* resuming work on nat_cases\n* looks reasonable\n* documentation\n* reverting bad merge in fin_cases\n* fix module comment\n* move non-meta lemmas\n* add tests for Chris' use case\n* cleanup\n* oops\n* starting on fintype instances for Icos\n* finishing fintypes\n* minor\n* not really sure what to do next\n* oops, forgot to commit??\n* oops\n* bit more work\n* more progress\n* everything works?\n* moving everything to their natural homes\n* rearrange\n* cleanup\n* linting\n* doc-strings\n* merge two interactive tactics, via `using` keyword\n* improve documentation, in response to review\n* add interval_cases to tactic.default\n* Apply suggestions from code review", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "bot_eq_zero", []]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "mem", ["finset", "Ico_ℤ"]]]}, {"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "trichotomy", ["list", "Ico"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_one_le_iff", ["nat"]], ["add", "theorem", "one_add_le_iff", ["nat"]], ["add", "theorem", "pos_of_bit0_pos", ["nat"]]]}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "add_one_le_iff", ["pnat"]], ["add", "theorem", "bit0_le_bit0", ["pnat"]], ["add", "theorem", "bit0_le_bit1", ["pnat"]], ["add", "theorem", "bit1_le_bit0", ["pnat"]], ["add", "theorem", "bit1_le_bit1", ["pnat"]], ["add", "theorem", "bot_eq_zero", ["pnat"]], ["add", "theorem", "lt_add_one_iff", ["pnat"]], ["add", "theorem", "mk_bit0", ["pnat"]], ["add", "theorem", "mk_bit1", ["pnat"]], ["add", "theorem", "mk_one", ["pnat"]], ["add", "theorem", "one_le", ["pnat"]]]}, {"oldPath": null, "newPath": "src/data/pnat/intervals.lean", "changes": [["add", "theorem", "mem", ["pnat", "Ico"]], ["add", "def", "Ico", ["pnat"]]]}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/interval_cases.lean", "changes": [["add", "theorem", "mem_set_elems", ["tactic", "interval_cases"]], ["add", "def", "set_elems", ["tactic", "interval_cases"]]]}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}, {"oldPath": null, "newPath": "test/interval_cases.lean", "changes": []}]}, {"timestamp": 1583178848, "sha": "1d82a7c2", "message": "doc(data/fin): add docs; fin_zero_elim -> fin.elim0; fin_zero_elim' -> fin_zero_elim (#2055)\n* doc(data/fin): add some docs\nAlso drom `fin_zero_elim` in favor of `fin.elim0` from `stdlib` and\nrename `fin_zero_elim'` to `fin_zero_elim`.\n* Update src/data/fin.lean\nCo-Authored-By: Rob Lewis \n* Update docs, fix `Π` vs `∀`.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["del", "def", "fin_zero_elim'", []], ["mod", "def", "fin_zero_elim", []]]}]}, {"timestamp": 1583172678, "sha": "8919541a", "message": "feat(data/finset): new basic material on finsets and fintypes (#2068)\n* feat(data/finset): additional basic material\n* minor fixes\n* golfed\n* Update src/data/finset.lean\nCo-Authored-By: Johan Commelin \n* Update src/data/finset.lean\nCo-Authored-By: Johan Commelin \n* Update src/data/finset.lean\nCo-Authored-By: Johan Commelin \n* golfed", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "le_max'", ["finset"]], ["mod", "theorem", "le_min'", ["finset"]], ["add", "theorem", "left_eq_union_iff_subset", ["finset"]], ["mod", "def", "max'", ["finset"]], ["mod", "theorem", "max'_le", ["finset"]], ["mod", "theorem", "max'_mem", ["finset"]], ["mod", "def", "min'", ["finset"]], ["mod", "theorem", "min'_le", ["finset"]], ["mod", "theorem", "min'_lt_max'", ["finset"]], ["mod", "theorem", "min'_mem", ["finset"]], ["add", "theorem", "pi_disjoint_of_disjoint", ["finset"]], ["add", "theorem", "pi_subset", ["finset"]], ["add", "theorem", "right_eq_union_iff_subset", ["finset"]], ["add", "theorem", "sdiff_subset", ["finset"]], ["add", "theorem", "singleton_subset_iff", ["finset"]], ["add", "theorem", "union_eq_left_iff_subset", ["finset"]], ["add", "theorem", "union_eq_right_iff_subset", ["finset"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "card_le_one_iff", ["finset"]], ["add", "theorem", "one_lt_card_iff", ["finset"]], ["add", "theorem", "mem_pi_finset", ["fintype"]], ["add", "def", "pi_finset", ["fintype"]], ["add", "theorem", "pi_finset_disjoint_of_disjoint", ["fintype"]], ["add", "theorem", "pi_finset_subset", ["fintype"]], ["add", "theorem", "pi_finset_univ", ["fintype"]]]}, {"oldPath": "src/data/fintype/card.lean", "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "card_pi_finset", ["fintype"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}]}, {"timestamp": 1583165970, "sha": "62756bd3", "message": "chore(data/real/ennreal): weaker assumptions in `sub_mul`, add `coe_inv_le` (#2074)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_inv_le", ["ennreal"]], ["mod", "theorem", "mul_sub", ["ennreal"]], ["mod", "theorem", "sub_mul", ["ennreal"]], ["add", "theorem", "sub_mul_ge", ["ennreal"]]]}]}, {"timestamp": 1583159159, "sha": "bfbd0937", "message": "chore(algebra/group): move `is_mul/monoid/group_hom` to `deprecated/` (#2056)\n* Move `is_mul/monoid/group_hom` to `deprecated/`\nAlso improve deprecation docstring.\nTODO: fix compile\n* chore(algebra/group): move `is_mul/monoid/group_hom` to `deprecated/`\nAlso migrate a few definitions to bundled homs:\n* use `monoid_hom.map_is_conj` instead of `is_group_hom.is_conj`;\n* `with_one.lift` and `with_one.map` now take `f` and an explicit\n argument `h : ∀ x y, f (x * y) = f x * f y` instead of `f` and\n `[is_mul_hom f]`, and produce a `monoid_hom`. As a side effect, they\n are now defined for semigroup homomorphisms only.\n* Adjust module docstring\n* Update src/algebra/group/with_one.lean\nI wonder if mergify will do its job now.", "changes": [{"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "theorem", "is_group_hom", ["inv"]], ["del", "theorem", "map_sub", ["is_add_group_hom"]], ["del", "theorem", "sub", ["is_add_group_hom"]], ["del", "theorem", "injective_iff", ["is_group_hom"]], ["del", "theorem", "inv", ["is_group_hom"]], ["del", "theorem", "map_inv", ["is_group_hom"]], ["del", "theorem", "map_one", ["is_group_hom"]], ["del", "theorem", "mk'", ["is_group_hom"]], ["del", "theorem", "mul", ["is_group_hom"]], ["del", "theorem", "map_mul", ["is_monoid_hom"]], ["del", "theorem", "of_mul", ["is_monoid_hom"]], ["del", "theorem", "inv", ["is_mul_hom"]], ["del", "theorem", "mul", ["is_mul_hom"]], ["del", "theorem", "coe_of", ["monoid_hom"]], ["del", "def", "of", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/is_unit.lean", "newPath": "src/algebra/group/is_unit.lean", "changes": [["del", "theorem", "map'", ["is_unit"]]]}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["del", "theorem", "coe_map'", ["units"]], ["del", "def", "map'", ["units"]]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "def", "lift", ["with_one"]], ["mod", "theorem", "lift_coe", ["with_one"]], ["mod", "theorem", "lift_one", ["with_one"]], ["mod", "theorem", "lift_unique", ["with_one"]], ["mod", "def", "map", ["with_one"]], ["del", "theorem", "map_eq", ["with_one"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": null, "newPath": "src/deprecated/group.lean", "changes": [["add", "theorem", "is_group_hom", ["inv"]], ["add", "theorem", "map_sub", ["is_add_group_hom"]], ["add", "theorem", "sub", ["is_add_group_hom"]], ["add", "theorem", "injective_iff", ["is_group_hom"]], ["add", "theorem", "inv", ["is_group_hom"]], ["add", "theorem", "map_inv", ["is_group_hom"]], ["add", "theorem", "map_one", ["is_group_hom"]], ["add", "theorem", "mk'", ["is_group_hom"]], ["add", "theorem", "mul", ["is_group_hom"]], ["add", "theorem", "map_mul", ["is_monoid_hom"]], ["add", "theorem", "of_mul", ["is_monoid_hom"]], ["add", "theorem", "inv", ["is_mul_hom"]], ["add", "theorem", "mul", ["is_mul_hom"]], ["add", "theorem", "map'", ["is_unit"]], ["add", "theorem", "coe_of", ["monoid_hom"]], ["add", "def", "of", ["monoid_hom"]], ["add", "theorem", "coe_map'", ["units"]], ["add", "def", "map'", ["units"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}]}, {"timestamp": 1583152393, "sha": "3055b3c0", "message": "chore(topology/metric_space/isometry): rename `(e)metric.isometry.diam_image` to `isometry.(e)diam_image` (#2073)\nThis way we can use dot notation to access these lemmas. Also add `(e)diam_range`.", "changes": [{"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["del", "theorem", "diam_image", ["emetric", "isometry"]], ["add", "theorem", "diam_image", ["isometry"]], ["add", "theorem", "diam_range", ["isometry"]], ["add", "theorem", "ediam_image", ["isometry"]], ["add", "theorem", "ediam_range", ["isometry"]], ["del", "theorem", "diam_image", ["metric", "isometry"]]]}]}, {"timestamp": 1583145773, "sha": "2683fa09", "message": "feat(order/galois_connection): lemmas about galois insertions and supr/infi (#2052)\n* feat(order/galois_connection): lemmas about galois insertions and supr/infi\n* Fix build, hopefully", "changes": [{"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "l_inf_u", ["galois_insertion"]], ["add", "theorem", "l_infi_of_ul", ["galois_insertion"]], ["add", "theorem", "l_infi_u", ["galois_insertion"]], ["add", "theorem", "l_sup_u", ["galois_insertion"]], ["add", "theorem", "l_supr_of_ul", ["galois_insertion"]], ["add", "theorem", "l_supr_u", ["galois_insertion"]], ["add", "theorem", "l_surjective", ["galois_insertion"]], ["mod", "theorem", "l_u_eq", ["galois_insertion"]], ["add", "theorem", "u_injective", ["galois_insertion"]], ["mod", "theorem", "to_galois_connection", ["order_iso"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}]}, {"timestamp": 1583139202, "sha": "d5d907b1", "message": "feat(algebra/free_monoid): define `lift` and `map`, move out of `algebra/group` (#2060)\n* Move `free_monoid` from `algebra/group/` to `algebra/`\n* feat(algebra/free_monoid): define `lift` and `map`\n* Expand docstring, drop unneeded arguments to `to_additive`\n* Fix compile\n* Update src/algebra/free_monoid.lean\nCo-Authored-By: sgouezel ", "changes": [{"oldPath": null, "newPath": "src/algebra/free_monoid.lean", "changes": [["add", "theorem", "hom_eq", ["free_monoid"]], ["add", "def", "lift", ["free_monoid"]], ["add", "theorem", "lift_eval_of", ["free_monoid"]], ["add", "theorem", "lift_of_comp_eq_map", ["free_monoid"]], ["add", "theorem", "lift_restrict", ["free_monoid"]], ["add", "def", "map", ["free_monoid"]], ["add", "theorem", "map_comp", ["free_monoid"]], ["add", "theorem", "map_of", ["free_monoid"]], ["add", "theorem", "mul_def", ["free_monoid"]], ["add", "def", "of", ["free_monoid"]], ["add", "theorem", "of_mul_eq_cons", ["free_monoid"]], ["add", "theorem", "one_def", ["free_monoid"]], ["add", "def", "free_monoid", []]]}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": "src/algebra/group/free_monoid.lean", "newPath": null, "changes": [["del", "theorem", "mul_def", ["free_monoid"]], ["del", "theorem", "one_def", ["free_monoid"]], ["del", "def", "free_monoid", []]]}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}]}, {"timestamp": 1583104186, "sha": "aec54b3b", "message": "fix(.mergify.yml): remove \" (leanprover-community/lean:3.5.1)\" (#2077)", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1582914239, "sha": "19a9bdc2", "message": "fix(tactic/omega): reify nonconstant ints and nats (#1748)", "changes": [{"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo1988_q6.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/tactic/omega/clause.lean", "newPath": "src/tactic/omega/clause.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_ees.lean", "newPath": "src/tactic/omega/find_ees.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_scalars.lean", "newPath": "src/tactic/omega/find_scalars.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": [["mod", "theorem", "clauses_sat_dnf_core", ["omega", "int"]], ["mod", "def", "dnf", ["omega", "int"]], ["mod", "def", "dnf_core", ["omega", "int"]], ["mod", "theorem", "implies_neg_elim", ["omega", "int"]], ["mod", "def", "is_nnf", ["omega", "int"]], ["mod", "theorem", "is_nnf_nnf", ["omega", "int"]], ["mod", "theorem", "is_nnf_push_neg", ["omega", "int"]], ["mod", "def", "neg_elim", ["omega", "int"]], ["mod", "def", "neg_free", ["omega", "int"]], ["mod", "theorem", "neg_free_neg_elim", ["omega", "int"]], ["mod", "def", "nnf", ["omega", "int"]], ["mod", "theorem", "nnf_equiv", ["omega", "int"]], ["mod", "def", "push_neg", ["omega", "int"]], ["mod", "theorem", "unsat_of_clauses_unsat", ["omega", "int"]]]}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": [["del", "def", "equiv", ["omega", "int", "form"]], ["del", "def", "fresh_index", ["omega", "int", "form"]], ["del", "def", "holds", ["omega", "int", "form"]], ["del", "def", "implies", ["omega", "int", "form"]], ["del", "def", "repr", ["omega", "int", "form"]], ["del", "def", "sat", ["omega", "int", "form"]], ["del", "theorem", "sat_of_implies_of_sat", ["omega", "int", "form"]], ["del", "theorem", "sat_or", ["omega", "int", "form"]], ["del", "def", "unsat", ["omega", "int", "form"]], ["del", "def", "valid", ["omega", "int", "form"]], ["del", "inductive", "form", ["omega", "int"]], ["add", "def", "equiv", ["omega", "int", "preform"]], ["add", "def", "fresh_index", ["omega", "int", "preform"]], ["add", "def", "holds", ["omega", "int", "preform"]], ["add", "def", "implies", ["omega", "int", "preform"]], ["add", "def", "repr", ["omega", "int", "preform"]], ["add", "def", "sat", ["omega", "int", "preform"]], ["add", "theorem", "sat_of_implies_of_sat", ["omega", "int", "preform"]], ["add", "theorem", "sat_or", ["omega", "int", "preform"]], ["add", "def", "unsat", ["omega", "int", "preform"]], ["add", "def", "valid", ["omega", "int", "preform"]], ["add", "inductive", "preform", ["omega", "int"]], ["mod", "def", "univ_close", ["omega", "int"]], ["mod", "theorem", "univ_close_of_valid", ["omega", "int"]], ["mod", "theorem", "valid_of_unsat_not", ["omega", "int"]]]}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": [["mod", "theorem", "univ_close_of_unsat_clausify", ["omega", "int"]]]}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/lin_comb.lean", "newPath": "src/tactic/omega/lin_comb.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": [["mod", "def", "dnf", ["omega", "nat"]], ["mod", "def", "dnf_core", ["omega", "nat"]], ["mod", "theorem", "exists_clause_holds", ["omega", "nat"]], ["mod", "theorem", "exists_clause_sat", ["omega", "nat"]], ["mod", "theorem", "unsat_of_unsat_dnf", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": [["del", "def", "equiv", ["omega", "nat", "form"]], ["del", "def", "fresh_index", ["omega", "nat", "form"]], ["del", "def", "holds", ["omega", "nat", "form"]], ["del", "theorem", "holds_constant", ["omega", "nat", "form"]], ["del", "def", "implies", ["omega", "nat", "form"]], ["del", "def", "neg_free", ["omega", "nat", "form"]], ["del", "def", "repr", ["omega", "nat", "form"]], ["del", "def", "sat", ["omega", "nat", "form"]], ["del", "theorem", "sat_of_implies_of_sat", ["omega", "nat", "form"]], ["del", "theorem", "sat_or", ["omega", "nat", "form"]], ["del", "def", "sub_free", ["omega", "nat", "form"]], ["del", "def", "unsat", ["omega", "nat", "form"]], ["del", "def", "valid", ["omega", "nat", "form"]], ["del", "inductive", "form", ["omega", "nat"]], ["add", "def", "equiv", ["omega", "nat", "preform"]], ["add", "def", "fresh_index", ["omega", "nat", "preform"]], ["add", "def", "holds", ["omega", "nat", "preform"]], ["add", "theorem", "holds_constant", ["omega", "nat", "preform"]], ["add", "def", "implies", ["omega", "nat", "preform"]], ["add", "def", "neg_free", ["omega", "nat", "preform"]], ["add", "def", "repr", ["omega", "nat", "preform"]], ["add", "def", "sat", ["omega", "nat", "preform"]], ["add", "theorem", "sat_of_implies_of_sat", ["omega", "nat", "preform"]], ["add", "theorem", "sat_or", ["omega", "nat", "preform"]], ["add", "def", "sub_free", ["omega", "nat", "preform"]], ["add", "def", "unsat", ["omega", "nat", "preform"]], ["add", "def", "valid", ["omega", "nat", "preform"]], ["add", "inductive", "preform", ["omega", "nat"]], ["mod", "def", "univ_close", ["omega", "nat"]], ["mod", "theorem", "univ_close_of_valid", ["omega", "nat"]], ["mod", "theorem", "valid_of_unsat_not", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": [["mod", "theorem", "univ_close_of_unsat_neg_elim_not", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": [["mod", "theorem", "implies_neg_elim", ["omega", "nat"]], ["mod", "theorem", "implies_neg_elim_core", ["omega", "nat"]], ["mod", "def", "is_nnf", ["omega", "nat"]], ["mod", "theorem", "is_nnf_nnf", ["omega", "nat"]], ["mod", "theorem", "is_nnf_push_neg", ["omega", "nat"]], ["mod", "def", "neg_elim", ["omega", "nat"]], ["mod", "def", "neg_elim_core", ["omega", "nat"]], ["mod", "theorem", "neg_free_neg_elim", ["omega", "nat"]], ["mod", "def", "nnf", ["omega", "nat"]], ["mod", "theorem", "nnf_equiv", ["omega", "nat"]], ["mod", "def", "push_neg", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": [["del", "def", "sub_subst", ["omega", "nat", "form"]], ["del", "def", "sub_terms", ["omega", "nat", "form"]], ["mod", "def", "is_diff", ["omega", "nat"]], ["add", "def", "sub_subst", ["omega", "nat", "preform"]], ["add", "def", "sub_terms", ["omega", "nat", "preform"]], ["mod", "theorem", "sat_sub_elim", ["omega", "nat"]], ["mod", "def", "sub_elim", ["omega", "nat"]], ["mod", "def", "sub_elim_core", ["omega", "nat"]], ["mod", "def", "sub_fresh_index", ["omega", "nat"]], ["mod", "theorem", "unsat_of_unsat_sub_elim", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/prove_unsats.lean", "newPath": "src/tactic/omega/prove_unsats.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": []}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1582907774, "sha": "354a4ed1", "message": "chore(ci): remove unneeded Lean version restrictions (#2065)\n* remove lean version from CI\n* more version references\n* fix?\n* persist environment var between steps", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1582903998, "sha": "07608293", "message": "feat(ring_theory): Fractional ideals (#2062)\n* Some WIP work on fractional ideals\n* Fill in the `sorry`\n* A lot of instances for fractional_ideal\n* Show that an invertible fractional ideal `I` has inverse `1 : I`\n* Cleanup and documentation\n* Move `has_div submodule` to algebra_operations\n* More cleanup and documentation\n* Explain the `non_zero_divisors R` in the `quotient` section\n* whitespace\nCo-Authored-By: Scott Morrison \n* `has_inv` instance for `fractional_ideal`\n* `set.univ.image` -> `set.range`\n* Fix: `mem_div_iff.mpr` should be `mem_div_iff.mp`\n(but both reduce to reflexivity anyway)\n* Add `mem_div_iff_smul_subset`\nSince that is how the definition of `I / J` is traditionally done,\nbut it is not as convenient to work with, I didn't change the definition\nbut added a lemma stating the two are equivalent\n* whitespace again\n(it got broken because I merged changes incorrectly)\n* Fix unused argument to `inv_nonzero`", "changes": [{"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["add", "theorem", "le_div_iff", ["submodule"]], ["add", "theorem", "mem_div_iff_forall_mul_mem", ["submodule"]], ["add", "theorem", "mem_div_iff_smul_subset", ["submodule"]]]}, {"oldPath": null, "newPath": "src/ring_theory/fractional_ideal.lean", "changes": [["add", "theorem", "bot_eq_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "coe_mem_one", ["ring", "fractional_ideal"]], ["add", "theorem", "div_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "div_one", ["ring", "fractional_ideal"]], ["add", "theorem", "eq_zero_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "ext", ["ring", "fractional_ideal"]], ["add", "theorem", "fractional_div_of_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "fractional_inf", ["ring", "fractional_ideal"]], ["add", "theorem", "fractional_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "fractional_of_subset_one", ["ring", "fractional_ideal"]], ["add", "theorem", "fractional_sup", ["ring", "fractional_ideal"]], ["add", "theorem", "inv_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "le_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_one_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "mem_zero_iff", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_left_mono", ["ring", "fractional_ideal"]], ["add", "theorem", "mul_right_mono", ["ring", "fractional_ideal"]], ["add", "theorem", "nonzero_iff_val_nonzero", ["ring", "fractional_ideal"]], ["add", "theorem", "right_inverse_eq", ["ring", "fractional_ideal"]], ["add", "theorem", "sup_eq_add", ["ring", "fractional_ideal"]], ["add", "theorem", "val_add", ["ring", "fractional_ideal"]], ["add", "theorem", "val_mul", ["ring", "fractional_ideal"]], ["add", "theorem", "val_zero", ["ring", "fractional_ideal"]], ["add", "theorem", "zero_le", ["ring", "fractional_ideal"]], ["add", "def", "fractional_ideal", ["ring"]], ["add", "def", "is_fractional", ["ring"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coe_mul_eq_smul", ["localization"]], ["add", "theorem", "coe_smul", ["localization"]], ["add", "def", "is_integer", ["localization"]], ["add", "theorem", "is_integer_add", ["localization"]], ["add", "theorem", "is_integer_coe", ["localization"]], ["add", "theorem", "is_integer_mul", ["localization"]], ["add", "theorem", "is_integer_smul", ["localization"]], ["add", "def", "lin_coe", ["localization"]], ["add", "theorem", "lin_coe_apply", ["localization"]], ["add", "theorem", "mul_coe_eq_smul", ["localization"]], ["add", "theorem", "of_id", ["localization"]], ["add", "theorem", "of_smul", ["localization"]]]}]}, {"timestamp": 1582897788, "sha": "4149099c", "message": "fix(tactic/ring): more precise pattern match for div (#1557)\n* fix(tactic/ring): more precise pattern match for div\n* add test\n* fix instance check for div\n* chore(algebra/quadratic_discriminant): add braces in have steps\n* use norm_num instead of ring to evaluate exponents\n* fix norm_num uses\n* fix norm_num pow bug\n* bugfix\n* fix proof", "changes": [{"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1582862526, "sha": "0bf20640", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582854601, "sha": "4637e5c8", "message": "refactor(analysis/calculus/times_cont_diff): massive refactor (#2012)\n* feat(data/fin): append\n* Update fin.lean\n* Update fintype.lean\n* replace but_last with init\n* cons and append commute\n* feat(*/multilinear): better multilinear\n* docstrings\n* snoc\n* fix build\n* comp_snoc and friends\n* refactor(analysis/calculus/times_cont_diff): massive refactor\n* fix docstring\n* move notation\n* fix build\n* linter\n* linter again\n* Update src/analysis/calculus/times_cont_diff.lean\nCo-Authored-By: Scott Morrison \n* Update src/analysis/calculus/times_cont_diff.lean\nCo-Authored-By: Scott Morrison \n* Update src/analysis/calculus/times_cont_diff.lean\nCo-Authored-By: Scott Morrison \n* Update src/analysis/calculus/times_cont_diff.lean\nCo-Authored-By: Scott Morrison \n* Update src/analysis/calculus/times_cont_diff.lean\nCo-Authored-By: Scott Morrison \n* curryfication -> currying", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "add_one_le_of_lt", ["with_top"]]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "comp_times_cont_diff_on_iff", ["continuous_linear_equiv"]], ["add", "theorem", "times_cont_diff_on_comp_iff", ["continuous_linear_equiv"]], ["add", "theorem", "times_cont_diff", ["continuous_linear_map"]], ["add", "def", "shift", ["formal_multilinear_series"]], ["add", "def", "unshift", ["formal_multilinear_series"]], ["add", "def", "formal_multilinear_series", []], ["add", "def", "ftaylor_series", []], ["add", "def", "ftaylor_series_within", []], ["add", "theorem", "ftaylor_series_within_univ", []], ["add", "theorem", "continuous", ["has_ftaylor_series_up_to"]], ["add", "theorem", "differentiable", ["has_ftaylor_series_up_to"]], ["add", "theorem", "has_fderiv_at", ["has_ftaylor_series_up_to"]], ["add", "theorem", "has_ftaylor_series_up_to_on", ["has_ftaylor_series_up_to"]], ["add", "theorem", "of_le", ["has_ftaylor_series_up_to"]], ["add", "theorem", "zero_eq'", ["has_ftaylor_series_up_to"]], ["add", "structure", "has_ftaylor_series_up_to", []], ["add", "theorem", "comp_continuous_linear_map", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "congr", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "continuous_linear_map_comp", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "continuous_on", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "differentiable_on", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "eq_ftaylor_series_of_unique_diff_on", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "has_fderiv_within_at", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "mono", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "of_le", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "prod", ["has_ftaylor_series_up_to_on"]], ["add", "theorem", "zero_eq'", ["has_ftaylor_series_up_to_on"]], ["add", "structure", "has_ftaylor_series_up_to_on", []], ["add", "theorem", "has_ftaylor_series_up_to_on_succ_iff_left", []], ["add", "theorem", "has_ftaylor_series_up_to_on_succ_iff_right", []], ["add", "theorem", "has_ftaylor_series_up_to_on_top_iff", []], ["add", "theorem", "has_ftaylor_series_up_to_on_univ_iff", []], ["add", "theorem", "has_ftaylor_series_up_to_on_zero_iff", []], ["add", "theorem", "has_ftaylor_series_up_to_succ_iff_right", []], ["add", "theorem", "has_ftaylor_series_up_to_zero_iff", []], ["del", "def", "normed_group_rec", ["iterated_continuous_linear_map"]], ["del", "def", "normed_space_rec", ["iterated_continuous_linear_map"]], ["del", "def", "iterated_continuous_linear_map", []], ["del", "def", "iterated_fderiv", []], ["add", "theorem", "iterated_fderiv_one_apply", []], ["del", "theorem", "iterated_fderiv_succ", []], ["add", "theorem", "iterated_fderiv_succ_apply_left", []], ["add", "theorem", "iterated_fderiv_succ_apply_right", []], ["add", "theorem", "iterated_fderiv_succ_eq_comp_left", []], ["add", "theorem", "iterated_fderiv_succ_eq_comp_right", []], ["del", "def", "iterated_fderiv_within", []], ["mod", "theorem", "iterated_fderiv_within_congr", []], ["add", "theorem", "iterated_fderiv_within_inter'", []], ["mod", "theorem", "iterated_fderiv_within_inter", []], ["mod", "theorem", "iterated_fderiv_within_inter_open", []], ["add", "theorem", "iterated_fderiv_within_one_apply", []], ["del", "theorem", "iterated_fderiv_within_succ", []], ["add", "theorem", "iterated_fderiv_within_succ_apply_left", []], ["add", "theorem", "iterated_fderiv_within_succ_apply_right", []], ["add", "theorem", "iterated_fderiv_within_succ_eq_comp_left", []], ["add", "theorem", "iterated_fderiv_within_succ_eq_comp_right", []], ["mod", "theorem", "iterated_fderiv_within_univ", []], ["del", "theorem", "iterated_fderiv_within_zero", []], ["add", "theorem", "iterated_fderiv_within_zero_apply", []], ["add", "theorem", "iterated_fderiv_within_zero_eq_comp", []], ["add", "theorem", "iterated_fderiv_within_zero_fun", []], ["del", "theorem", "iterated_fderiv_zero", []], ["add", "theorem", "iterated_fderiv_zero_apply", []], ["add", "theorem", "iterated_fderiv_zero_eq_comp", []], ["add", "theorem", "comp_continuous_linear_map", ["times_cont_diff"]], ["del", "theorem", "comp_is_bounded_linear", ["times_cont_diff"]], ["mod", "theorem", "continuous", ["times_cont_diff"]], ["mod", "theorem", "continuous_fderiv", ["times_cont_diff"]], ["mod", "theorem", "continuous_fderiv_apply", ["times_cont_diff"]], ["add", "theorem", "continuous_linear_map_comp", ["times_cont_diff"]], ["add", "theorem", "differentiable", ["times_cont_diff"]], ["mod", "theorem", "of_le", ["times_cont_diff"]], ["del", "theorem", "of_succ", ["times_cont_diff"]], ["mod", "theorem", "times_cont_diff_fderiv_apply", ["times_cont_diff"]], ["mod", "theorem", "times_cont_diff_on", ["times_cont_diff"]], ["del", "def", "times_cont_diff", []], ["add", "theorem", "times_cont_diff_iff_continuous_differentiable", []], ["del", "theorem", "times_cont_diff_iff_times_cont_diff_rec", []], ["add", "theorem", "times_cont_diff_of_differentiable_iterated_fderiv", []], ["mod", "theorem", "comp", ["times_cont_diff_on"]], ["add", "theorem", "comp_continuous_linear_map", ["times_cont_diff_on"]], ["del", "theorem", "comp_is_bounded_linear", ["times_cont_diff_on"]], ["mod", "theorem", "congr", ["times_cont_diff_on"]], ["del", "theorem", "congr_mono'", ["times_cont_diff_on"]], ["mod", "theorem", "congr_mono", ["times_cont_diff_on"]], ["add", "theorem", "continuous_linear_map_comp", ["times_cont_diff_on"]], ["mod", "theorem", "continuous_on", ["times_cont_diff_on"]], ["mod", "theorem", "continuous_on_fderiv_within", ["times_cont_diff_on"]], ["add", "theorem", "continuous_on_iterated_fderiv_within", ["times_cont_diff_on"]], ["mod", "theorem", "differentiable_on", ["times_cont_diff_on"]], ["add", "theorem", "differentiable_on_iterated_fderiv_within", ["times_cont_diff_on"]], ["add", "theorem", "fderiv_within", ["times_cont_diff_on"]], ["add", "theorem", "ftaylor_series_within", ["times_cont_diff_on"]], ["mod", "theorem", "mono", ["times_cont_diff_on"]], ["del", "theorem", "of_succ", ["times_cont_diff_on"]], ["del", "def", "times_cont_diff_on", []], ["add", "theorem", "times_cont_diff_on_congr", []], ["mod", "theorem", "times_cont_diff_on_const", []], ["del", "theorem", "times_cont_diff_on_fderiv_within", []], ["del", "theorem", "times_cont_diff_on_fderiv_within_nat", []], ["add", "theorem", "times_cont_diff_on_iff_continuous_on_differentiable_on", []], ["add", "theorem", "times_cont_diff_on_iff_ftaylor_series", []], ["del", "theorem", "times_cont_diff_on_iff_times_cont_diff_on_rec", []], ["add", "theorem", "times_cont_diff_on_nat", []], ["add", "theorem", "times_cont_diff_on_of_continuous_on_differentiable_on", []], ["add", "theorem", "times_cont_diff_on_of_differentiable_on", []], ["mod", "theorem", "times_cont_diff_on_of_locally_times_cont_diff_on", []], ["del", "theorem", "continuous_on_iterated_fderiv_within", ["times_cont_diff_on_rec"]], ["del", "theorem", "differentiable_on", ["times_cont_diff_on_rec"]], ["del", "theorem", "of_succ", ["times_cont_diff_on_rec"]], ["del", "def", "times_cont_diff_on_rec", []], ["del", "theorem", "times_cont_diff_on_rec_succ", []], ["del", "theorem", "times_cont_diff_on_rec_univ", []], ["del", "theorem", "times_cont_diff_on_rec_zero", []], ["del", "theorem", "times_cont_diff_on_succ", []], ["add", "theorem", "times_cont_diff_on_succ_iff_fderiv_within", []], ["add", "theorem", "times_cont_diff_on_succ_iff_has_fderiv_within_at", []], ["add", "theorem", "times_cont_diff_on_top_iff_fderiv_within", []], ["mod", "theorem", "times_cont_diff_on_univ", []], ["del", "theorem", "continuous", ["times_cont_diff_rec"]], ["del", "theorem", "differentiable", ["times_cont_diff_rec"]], ["del", "theorem", "of_succ", ["times_cont_diff_rec"]], ["del", "def", "times_cont_diff_rec", []], ["del", "theorem", "times_cont_diff_rec_succ", []], ["del", "theorem", "times_cont_diff_rec_zero", []], ["del", "theorem", "times_cont_diff_succ", []], ["add", "theorem", "times_cont_diff_succ_iff_fderiv", []], ["mod", "theorem", "times_cont_diff_top", []], ["add", "theorem", "times_cont_diff_top_iff_fderiv", []], ["add", "theorem", "times_cont_diff_zero_fun", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bounded_linear_map_left", ["is_bounded_bilinear_map"]], ["add", "theorem", "is_bounded_linear_map_right", ["is_bounded_bilinear_map"]], ["add", "theorem", "is_bounded_bilinear_map_comp_multilinear", []], ["add", "theorem", "is_bounded_linear_map_continuous_multilinear_map_comp_linear", []], ["add", "theorem", "is_bounded_linear_map_prod_multilinear", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "mem_of_mem_nhds_within", []]]}]}, {"timestamp": 1582841071, "sha": "0e4eb09d", "message": "feat(ci): avoid push to Azure if branch has been updated (#2048)\n* avoid push to Azure if branch has been updated\n* changes to git config in deploy_nightly.sh break git fetch\n* I don't understand why this is different than on my own repo\n* artifact upload breaks fetch, I guess?\n* factor out git config\n* fix env variable\n* adjustments\n* removed repo check", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}, {"oldPath": "scripts/update_nolints.sh", "newPath": "scripts/update_nolints.sh", "changes": []}]}, {"timestamp": 1582824947, "sha": "691456c6", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582816719, "sha": "7907f8f3", "message": "feat(tactic/tidy): include norm_cast in tidy (#2063)\n* feat(tactic/tidy): include norm_cast in tidy\n* Update src/tactic/core.lean", "changes": [{"oldPath": "src/tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1582810370, "sha": "6c2411bd", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582804487, "sha": "a46b3e57", "message": "doc(data/finsupp): module docs and docstrings (#2059)\n* doc(data/finsupp): module docs and docstrings\n* chore(data/finsupp): squeeze_simp, cleanup, style\n* reviewer comments", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "def", "comap_domain", ["finsupp"]], ["mod", "def", "frange", ["finsupp"]], ["mod", "theorem", "map_domain_id", ["finsupp"]], ["mod", "theorem", "neg_apply", ["finsupp"]], ["mod", "theorem", "one_def", ["finsupp"]], ["mod", "theorem", "single_apply", ["finsupp"]], ["mod", "theorem", "single_eq_of_ne", ["finsupp"]], ["mod", "theorem", "single_eq_same", ["finsupp"]], ["mod", "theorem", "smul_apply'", ["finsupp"]], ["add", "def", "split", ["finsupp"]], ["add", "def", "split_comp", ["finsupp"]], ["mod", "theorem", "sub_apply", ["finsupp"]], ["mod", "theorem", "support_zero", ["finsupp"]], ["mod", "theorem", "zero_apply", ["finsupp"]]]}]}, {"timestamp": 1582767332, "sha": "ef1e38ec", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582759888, "sha": "f0bb2f82", "message": "feat(ring_theory/polynomial): mv_polynomial.integral_domain (#2021)\n* feat(ring_theory/polynomial): mv_polynomial.integral_domain\n* Add docstrings\n* Add docstrings\n* Fix import\n* Fix build\n* Please linter, please\n* Update src/algebra/ring.lean\n* Clean up code, process comments\n* Update src/data/equiv/fin.lean\n* Update src/data/equiv/fin.lean\n* Update src/data/equiv/fin.lean\n* Update src/ring_theory/polynomial.lean", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "to_is_integral_domain", ["integral_domain"]], ["add", "def", "to_integral_domain", ["is_integral_domain"]], ["add", "structure", "is_integral_domain", []]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["add", "def", "fin_succ_equiv", []], ["add", "def", "fin_zero_equiv'", []]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "exists_fin_rename", ["mv_polynomial"]], ["add", "theorem", "exists_finset_rename", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["del", "theorem", "is_noetherian_ring_mv_polynomial_fin", []], ["del", "theorem", "is_noetherian_ring_mv_polynomial_of_fintype", []], ["del", "theorem", "is_noetherian_ring_polynomial", []], ["add", "def", "integral_domain_fintype", ["mv_polynomial"]], ["add", "theorem", "is_integral_domain_fin", ["mv_polynomial"]], ["add", "theorem", "is_integral_domain_fintype", ["mv_polynomial"]], ["add", "theorem", "is_noetherian_ring_fin", ["mv_polynomial"]]]}]}, {"timestamp": 1582714433, "sha": "73b41b2c", "message": "chore(data/prod): rename `injective_prod` to `injective.prod` (#2058)\nThis way we can use dot notation", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "prod", ["function", "injective"]], ["del", "theorem", "injective_prod", ["function"]]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1582671593, "sha": "6a6beaa7", "message": "chore(data/list/basic): drop `append_foldl` and `append_foldr`, add `map_nil` and `prod_singleton` (#2057)\n`append_foldl` and `append_foldr` were unused duplicates of\n`foldl_append` and `foldr_append`", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "append_foldl", ["list"]], ["del", "theorem", "append_foldr", ["list"]], ["add", "theorem", "map_nil", ["list"]], ["add", "theorem", "prod_singleton", ["list"]]]}]}, {"timestamp": 1582664975, "sha": "7be3e938", "message": "chore(field_theory/minimal_polynomial): fix timeout (#2054)\n* chore(field_theory/minimal_polynomial): fix timeout\n* Update src/field_theory/minimal_polynomial.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}]}, {"timestamp": 1582658569, "sha": "06c55940", "message": "chore(analyis/normed_space/banach): split proof to avoid timeout (#2053)\n* chore(analyis/normed_space/banach): split proof to avoid timeout\n* delay introducing unnecessary variable\n* Apply suggestions from code review\nCo-Authored-By: sgouezel \n* fix indent", "changes": [{"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "exists_approx_preimage_norm_le", []]]}]}, {"timestamp": 1582646810, "sha": "089d0586", "message": "feat(tactic/lint): linter for commutativity lemmas that are marked simp (#2045)\n* feat(tactic/lint): linter for commutativity lemmas that are marked simp\n* chore(*): remove simp from commutativity lemmas\n* doc(*): document simp_comm linter", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["mod", "theorem", "erase_erase", ["finmap"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "inter_comm", ["finset"]], ["mod", "theorem", "inter_left_comm", ["finset"]], ["mod", "theorem", "inter_right_comm", ["finset"]], ["mod", "theorem", "union_comm", ["finset"]]]}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["mod", "theorem", "erase_erase", ["alist"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "disjoint_comm", ["list"]], ["add", "theorem", "disjoint_nil_right", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "disjoint_comm", ["multiset"]]]}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": [["mod", "theorem", "dist_comm", ["nat"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": null, "newPath": "test/lint_simp_comm.lean", "changes": [["add", "theorem", "filter_congr_decidable", ["list"]]]}]}, {"timestamp": 1582640183, "sha": "450dcdf9", "message": "refactor(order/bounds): use dot notation, reorder, prove more properties (#2028)\n* refactor(order/bounds): use dot notation, prove more properties\nAlso make parts of `complete_lattice` and\n`conditionally_complete_lattice` use these lemmas.\n* Comments\n* Add a module docstring\n* Fixes from review, +4 lemmas about images\n* Fix a typo in the previous commit\n* Update src/order/bounds.lean\n* Update src/order/bounds.lean", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "insert", ["bdd_above"]], ["add", "theorem", "inter_of_left", ["bdd_above"]], ["add", "theorem", "inter_of_right", ["bdd_above"]], ["del", "theorem", "mk", ["bdd_above"]], ["add", "theorem", "mono", ["bdd_above"]], ["add", "theorem", "union", ["bdd_above"]], ["mod", "def", "bdd_above", []], ["add", "theorem", "bdd_above_Icc", []], ["add", "theorem", "bdd_above_Ico", []], ["add", "theorem", "bdd_above_Iic", []], ["add", "theorem", "bdd_above_Iio", []], ["add", "theorem", "bdd_above_Ioc", []], ["add", "theorem", "bdd_above_Ioo", []], ["mod", "theorem", "bdd_above_empty", []], ["mod", "theorem", "bdd_above_iff_subset_Iic", []], ["mod", "theorem", "bdd_above_insert", []], ["del", "theorem", "bdd_above_inter_left", []], ["del", "theorem", "bdd_above_inter_right", []], ["del", "theorem", "bdd_above_of_bdd_above_of_monotone", []], ["mod", "theorem", "bdd_above_singleton", []], ["del", "theorem", "bdd_above_subset", []], ["del", "theorem", "bdd_above_top", []], ["mod", "theorem", "bdd_above_union", []], ["add", "theorem", "insert", ["bdd_below"]], ["add", "theorem", "inter_of_left", ["bdd_below"]], ["add", "theorem", "inter_of_right", ["bdd_below"]], ["del", "theorem", "mk", ["bdd_below"]], ["add", "theorem", "mono", ["bdd_below"]], ["add", "theorem", "union", ["bdd_below"]], ["mod", "def", "bdd_below", []], ["add", "theorem", "bdd_below_Ici", []], ["add", "theorem", "bdd_below_Ioi", []], ["mod", "theorem", "bdd_below_bdd_above_iff_subset_Icc", []], ["del", "theorem", "bdd_below_bot", []], ["mod", "theorem", "bdd_below_empty", []], ["mod", "theorem", "bdd_below_iff_subset_Ici", []], ["mod", "theorem", "bdd_below_insert", []], ["del", "theorem", "bdd_below_inter_left", []], ["del", "theorem", "bdd_below_inter_right", []], ["del", "theorem", "bdd_below_of_bdd_below_of_monotone", []], ["mod", "theorem", "bdd_below_singleton", []], ["del", "theorem", "bdd_below_subset", []], ["mod", "theorem", "bdd_below_union", []], ["del", "theorem", "eq_of_is_glb_of_is_glb", []], ["del", "theorem", "eq_of_is_greatest_of_is_greatest", []], ["del", "theorem", "eq_of_is_least_of_is_least", []], ["del", "theorem", "eq_of_is_lub_of_is_lub", []], ["add", "theorem", "bdd_below", ["is_glb"]], ["add", "theorem", "insert", ["is_glb"]], ["add", "theorem", "lower_bounds_eq", ["is_glb"]], ["add", "theorem", "nonempty", ["is_glb"]], ["add", "theorem", "of_subset_of_superset", ["is_glb"]], ["add", "theorem", "union", ["is_glb"]], ["add", "theorem", "unique", ["is_glb"]], ["mod", "theorem", "is_glb_Icc", []], ["mod", "theorem", "is_glb_Ici", []], ["mod", "theorem", "is_glb_Ico", []], ["mod", "theorem", "is_glb_Ioc", []], ["mod", "theorem", "is_glb_Ioi", []], ["mod", "theorem", "is_glb_Ioo", []], ["mod", "theorem", "is_glb_empty", []], ["del", "theorem", "is_glb_iff_eq_of_is_glb", []], ["del", "theorem", "is_glb_iff_inf_eq", []], ["del", "theorem", "is_glb_insert_inf", []], ["add", "theorem", "is_glb_le_is_lub", []], ["mod", "theorem", "is_glb_lt_iff", []], ["add", "theorem", "is_glb_pair", []], ["mod", "theorem", "is_glb_singleton", []], ["del", "theorem", "is_glb_union_inf", []], ["add", "theorem", "is_glb_univ", []], ["add", "theorem", "bdd_above", ["is_greatest"]], ["add", "theorem", "insert", ["is_greatest"]], ["add", "theorem", "is_greatest_iff_eq", ["is_greatest"]], ["add", "theorem", "is_lub", ["is_greatest"]], ["add", "theorem", "nonempty", ["is_greatest"]], ["add", "theorem", "union", ["is_greatest"]], ["add", "theorem", "unique", ["is_greatest"]], ["add", "theorem", "upper_bounds_eq", ["is_greatest"]], ["add", "theorem", "is_greatest_Icc", []], ["add", "theorem", "is_greatest_Iic", []], ["add", "theorem", "is_greatest_Ioc", []], ["del", "theorem", "is_greatest_iff_eq_of_is_greatest", []], ["add", "theorem", "is_greatest_pair", []], ["add", "theorem", "is_greatest_singleton", []], ["add", "theorem", "is_greatest_union_iff", []], ["add", "theorem", "is_greatest_univ", []], ["add", "theorem", "bdd_below", ["is_least"]], ["add", "theorem", "insert", ["is_least"]], ["add", "theorem", "is_glb", ["is_least"]], ["add", "theorem", "is_least_iff_eq", ["is_least"]], ["add", "theorem", "lower_bounds_eq", ["is_least"]], ["add", "theorem", "nonempty", ["is_least"]], ["add", "theorem", "union", ["is_least"]], ["add", "theorem", "unique", ["is_least"]], ["add", "theorem", "is_least_Icc", []], ["add", "theorem", "is_least_Ici", []], ["add", "theorem", "is_least_Ico", []], ["del", "theorem", "is_least_iff_eq_of_is_least", []], ["add", "theorem", "is_least_pair", []], ["add", "theorem", "is_least_singleton", []], ["add", "theorem", "is_least_union_iff", []], ["add", "theorem", "is_least_univ", []], ["add", "theorem", "bdd_above", ["is_lub"]], ["add", "theorem", "insert", ["is_lub"]], ["add", "theorem", "nonempty", ["is_lub"]], ["add", "theorem", "of_subset_of_superset", ["is_lub"]], ["add", "theorem", "union", ["is_lub"]], ["add", "theorem", "unique", ["is_lub"]], ["add", "theorem", "upper_bounds_eq", ["is_lub"]], ["mod", "theorem", "is_lub_Icc", []], ["mod", "theorem", "is_lub_Ico", []], ["mod", "theorem", "is_lub_Iic", []], ["mod", "theorem", "is_lub_Iio", []], ["mod", "theorem", "is_lub_Ioc", []], ["mod", "theorem", "is_lub_Ioo", []], ["mod", "theorem", "is_lub_empty", []], ["del", "theorem", "is_lub_iff_eq_of_is_lub", []], ["del", "theorem", "is_lub_iff_sup_eq", []], ["del", "theorem", "is_lub_insert_sup", []], ["mod", "theorem", "is_lub_le_iff", []], ["add", "theorem", "is_lub_lt_iff", []], ["add", "theorem", "is_lub_pair", []], ["mod", "theorem", "is_lub_singleton", []], ["del", "theorem", "is_lub_union_sup", []], ["add", "theorem", "is_lub_univ", []], ["mod", "theorem", "le_is_glb_iff", []], ["add", "theorem", "lower_bound_Ioc", []], ["add", "theorem", "lower_bounds_Icc", []], ["add", "theorem", "lower_bounds_Ici", []], ["add", "theorem", "lower_bounds_Ico", []], ["add", "theorem", "lower_bounds_Ioi", []], ["add", "theorem", "lower_bounds_Ioo", []], ["add", "theorem", "lower_bounds_empty", []], ["add", "theorem", "lower_bounds_insert", []], ["add", "theorem", "lower_bounds_le_upper_bounds", []], ["mod", "theorem", "lower_bounds_mono", []], ["add", "theorem", "lower_bounds_mono_mem", []], ["add", "theorem", "lower_bounds_mono_set", []], ["add", "theorem", "lower_bounds_singleton", []], ["add", "theorem", "lower_bounds_union", []], ["add", "theorem", "lt_is_glb_iff", []], ["mod", "theorem", "lt_is_lub_iff", []], ["del", "theorem", "mem_lower_bounds_image", []], ["del", "theorem", "mem_upper_bounds_image", []], ["add", "theorem", "is_lub_image_le", ["monotone"]], ["add", "theorem", "le_is_glb_image_le", ["monotone"]], ["add", "theorem", "map_bdd_above", ["monotone"]], ["add", "theorem", "map_bdd_below", ["monotone"]], ["add", "theorem", "map_is_greatest", ["monotone"]], ["add", "theorem", "map_is_least", ["monotone"]], ["add", "theorem", "mem_lower_bounds_image", ["monotone"]], ["add", "theorem", "mem_upper_bounds_image", ["monotone"]], ["add", "theorem", "lower_bounds_univ", ["no_bot_order"]], ["add", "theorem", "upper_bounds_univ", ["no_top_order"]], ["del", "theorem", "nonempty_of_is_glb", []], ["del", "theorem", "nonempty_of_is_lub", []], ["add", "theorem", "lower_bounds_univ", ["order_bot"]], ["add", "theorem", "upper_bounds_univ", ["order_top"]], ["add", "theorem", "union_lower_bounds_subset_lower_bounds_inter", []], ["add", "theorem", "union_upper_bounds_subset_upper_bounds_inter", []], ["add", "theorem", "upper_bounds_Icc", []], ["add", "theorem", "upper_bounds_Ico", []], ["add", "theorem", "upper_bounds_Iic", []], ["add", "theorem", "upper_bounds_Iio", []], ["add", "theorem", "upper_bounds_Ioc", []], ["add", "theorem", "upper_bounds_Ioo", []], ["add", "theorem", "upper_bounds_empty", []], ["add", "theorem", "upper_bounds_insert", []], ["mod", "theorem", "upper_bounds_mono", []], ["add", "theorem", "upper_bounds_mono_mem", []], ["add", "theorem", "upper_bounds_mono_set", []], ["add", "theorem", "upper_bounds_singleton", []], ["add", "theorem", "upper_bounds_union", []]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_le_Sup", ["lattice"]], ["add", "theorem", "Inf_pair", ["lattice"]], ["add", "theorem", "Sup_pair", ["lattice"]], ["mod", "theorem", "infi_const", ["lattice"]], ["mod", "theorem", "is_glb_Inf", ["lattice"]], ["del", "theorem", "is_glb_iff_Inf_eq", ["lattice"]], ["del", "theorem", "is_glb_iff_infi_eq", ["lattice"]], ["mod", "theorem", "is_glb_infi", ["lattice"]], ["mod", "theorem", "is_lub_Sup", ["lattice"]], ["del", "theorem", "is_lub_iff_Sup_eq", ["lattice"]], ["del", "theorem", "is_lub_iff_supr_eq", ["lattice"]], ["mod", "theorem", "is_lub_supr", ["lattice"]], ["mod", "theorem", "supr_const", ["lattice"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_Ici", ["lattice"]], ["mod", "theorem", "cInf_insert", ["lattice"]], ["del", "theorem", "cInf_interval", ["lattice"]], ["mod", "theorem", "cInf_le_cSup", ["lattice"]], ["del", "theorem", "cInf_of_mem_of_le", ["lattice"]], ["mod", "theorem", "cInf_union", ["lattice"]], ["add", "theorem", "cSup_Iic", ["lattice"]], ["mod", "theorem", "cSup_insert", ["lattice"]], ["del", "theorem", "cSup_interval", ["lattice"]], ["mod", "theorem", "cSup_le_iff", ["lattice"]], ["del", "theorem", "cSup_of_mem_of_le", ["lattice"]], ["mod", "theorem", "cSup_union", ["lattice"]], ["mod", "theorem", "is_glb_cInf", ["lattice"]], ["mod", "theorem", "is_lub_cSup", ["lattice"]], ["mod", "theorem", "le_cInf_iff", ["lattice"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1582633622, "sha": "a227e06c", "message": "Unify naming of lemmas related to the (co)lim functor (#2040)", "changes": [{"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["del", "theorem", "ι_map", ["category_theory", "limits", "colim"]], ["add", "theorem", "ι_map", ["category_theory", "limits", "colimit"]], ["del", "theorem", "map_π", ["category_theory", "limits", "lim"]], ["add", "theorem", "map_π", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1582627192, "sha": "f77cb57f", "message": "chore(data/fintype): move results depending on big_operators (#2044)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["del", "theorem", "card_vector", []], ["del", "theorem", "prod_univ_cast_succ", ["fin"]], ["del", "theorem", "prod_univ_succ", ["fin"]], ["del", "theorem", "prod_univ_zero", ["fin"]], ["del", "theorem", "sum_univ_cast_succ", ["fin"]], ["del", "theorem", "sum_univ_succ", ["fin"]], ["del", "theorem", "prod_attach_univ", ["finset"]], ["del", "theorem", "range_prod_eq_univ_prod", ["finset"]], ["del", "theorem", "card_eq_sum_ones", ["fintype"]], ["del", "theorem", "card_fun", ["fintype"]], ["del", "theorem", "card_pi", ["fintype"]], ["del", "theorem", "card_sigma", ["fintype"]], ["del", "theorem", "card_sum", ["fintype"]]]}, {"oldPath": null, "newPath": "src/data/fintype/card.lean", "changes": [["add", "theorem", "card_vector", []], ["add", "theorem", "prod_univ_cast_succ", ["fin"]], ["add", "theorem", "prod_univ_succ", ["fin"]], ["add", "theorem", "prod_univ_zero", ["fin"]], ["add", "theorem", "sum_univ_cast_succ", ["fin"]], ["add", "theorem", "sum_univ_succ", ["fin"]], ["add", "theorem", "prod_attach_univ", ["finset"]], ["add", "theorem", "range_prod_eq_univ_prod", ["finset"]], ["add", "theorem", "card_eq_sum_ones", ["fintype"]], ["add", "theorem", "card_fun", ["fintype"]], ["add", "theorem", "card_pi", ["fintype"]], ["add", "theorem", "card_sigma", ["fintype"]], ["add", "theorem", "card_sum", ["fintype"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/number_theory/bernoulli.lean", "newPath": "src/number_theory/bernoulli.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1582620681, "sha": "61d75bb1", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582612737, "sha": "17a33f0d", "message": "refactor(order/copy): move complete_lattice.copy to its own file (#2050)\n* refactor(order/copy): move complete_lattice.copy to its own file\n* Docstrings\n* Update src/order/copy.lean", "changes": [{"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/copy.lean", "changes": [["add", "def", "copy", ["lattice", "bounded_lattice"]], ["add", "def", "copy", ["lattice", "complete_distrib_lattice"]], ["add", "def", "copy", ["lattice", "complete_lattice"]], ["add", "def", "copy", ["lattice", "conditionally_complete_lattice"]], ["add", "def", "copy", ["lattice", "distrib_lattice"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "def", "copy", ["lattice", "complete_lattice"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}]}, {"timestamp": 1582588263, "sha": "5770369f", "message": "refactor(topology/metric_space/isometry): remove isometry_inv_fun from isometric (#2051)\n* refactor(topology/metric_space/isometry): remove isometry_inv_fun from isometric; it is automatic\n* Alternative constructor for isometric bijections", "changes": [{"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "isometry_inv_fun", ["isometric"]], ["add", "def", "mk'", ["isometric"]]]}]}, {"timestamp": 1582582019, "sha": "3ff50d99", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582574296, "sha": "fb878e78", "message": "feat(tactic/lint): add linter for simp lemmas whose lhs has a variable as head symbol (#2038)", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "map_div", ["is_ring_hom"]], ["mod", "theorem", "map_inv", ["is_ring_hom"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "map_add", ["is_linear_map"]], ["mod", "theorem", "map_neg", ["is_linear_map"]], ["mod", "theorem", "map_sub", ["is_linear_map"]], ["mod", "theorem", "map_zero", ["is_linear_map"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "find_some", ["list"]]]}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": null, "newPath": "test/lint_simp_var_head.lean", "changes": []}]}, {"timestamp": 1582567929, "sha": "cb4bdd83", "message": "doc(category_theory): add a few docstrings (#2046)\n* doc(category_theory): add a few docstrings\n* Apply suggestions from code review\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}]}, {"timestamp": 1582565596, "sha": "8030469c", "message": "Revert \"Update README.md\"\nThis reverts commit 4d3ef8368051e45e1b20e77462b958be3e427c87.", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1582565506, "sha": "4d3ef836", "message": "Update README.md", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1582558984, "sha": "0fc45dcd", "message": "feat(tactic/lint): support @[nolint unused_arguments] (#2041)\n* feat(tactic/lint): support @[nolint unused_arguments]\n* refactor(scripts/mk_nolint): include failing linter name in nolints.txt\n* chore(scripts/nolints): update nolints.txt\n* doc(category/functor): add docstrings", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/category/functor.lean", "newPath": "src/category/functor.lean", "changes": [["mod", "def", "const", ["functor"]]]}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "def", "pell", ["pell"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "mem_at_top_sets", ["filter"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "def", "comap", ["algebra"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "def", "ord_eq_min", ["cardinal"]], ["mod", "def", "div_def", ["ordinal"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": [["mod", "theorem", "{u}", ["tactic", "interactive"]]]}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["mod", "def", "base", ["topological_fiber_bundle_core"]], ["mod", "def", "fiber", ["topological_fiber_bundle_core"]], ["mod", "def", "index", ["topological_fiber_bundle_core"]], ["mod", "def", "total_space", ["topological_fiber_bundle_core"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": [["mod", "def", "foo", ["bar"]]]}]}, {"timestamp": 1582544576, "sha": "32b32ad9", "message": "docs(data/set/basic): add module docstring (#1991)\n* adding module docstring\n* tidying up\n* markdown fixes\n* more md tidying\n* remove some unnecessary {alpha : Type*}\n* responding to comments\n* responding to comments", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "compl_image_set_of", ["set"]], ["mod", "theorem", "empty_diff", ["set"]], ["mod", "theorem", "exists_of_ssubset", ["set"]], ["mod", "theorem", "mem_image", ["set"]], ["mod", "theorem", "mem_of_eq_of_mem", ["set"]], ["mod", "theorem", "mem_of_mem_of_subset", ["set"]], ["mod", "theorem", "sep_set_of", ["set"]], ["mod", "theorem", "set_of_subset_set_of", ["set"]], ["mod", "theorem", "univ_eq_empty_iff", ["set"]]]}]}, {"timestamp": 1582477308, "sha": "28e4bdfc", "message": "feat(topology): an `is_complete` set is a `complete_space` (#2037)\n* feat(*): misc simple lemmas\n* +1 lemma\n* Rename `inclusion_range` to `range_inclusion`\nCo-Authored-By: Johan Commelin \n* feat(topology): an `is_complete` set is a `complete_space`\nAlso simplify a proof in `topology/metric_space/closeds`.\n* Use in `finite_dimension`", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "def", "to_closeds", ["topological_space", "nonempty_compacts"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "complete_space_iff_is_complete_univ", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "complete_space_coe_iff_is_complete", []], ["add", "theorem", "complete_space_congr", []], ["add", "theorem", "complete_space_iff_is_complete_range", []], ["add", "theorem", "complete_space_coe", ["is_closed"]], ["add", "theorem", "complete_space_coe", ["is_complete"]], ["add", "theorem", "is_complete_of_complete_image", []], ["add", "theorem", "uniform_embedding_set_inclusion", []], ["add", "theorem", "uniform_embedding_subtype_coe", []], ["add", "theorem", "uniform_embedding_subtype_val", []]]}]}, {"timestamp": 1582466272, "sha": "16c1d9d3", "message": "chore(*): minimise imports of data.list.basic (#2042)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}]}, {"timestamp": 1582460198, "sha": "256bedc3", "message": "chore(test): don't use sorry in tests, to reduce noise (#2043)", "changes": [{"oldPath": "test/apply.lean", "newPath": "test/apply.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1582410413, "sha": "bfa24650", "message": "refactor(topology/metric_space/lipschitz): redefine for an `emetric_space` (#2035)\n* refactor(topology/metric_space/lipschitz): redefine for an `emetric_space`\n* Fix compile\n* Fixes, thanks @sgouzel", "changes": [{"oldPath": "src/analysis/ODE/gronwall.lean", "newPath": "src/analysis/ODE/gronwall.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "div_le_of_le_mul", ["ennreal"]], ["add", "theorem", "mul_lt_of_lt_div", ["ennreal"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/contracting.lean", "newPath": "src/topology/metric_space/contracting.lean", "changes": [["add", "theorem", "dist_le", ["contracting_with"]], ["mod", "def", "contracting_with", []]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["mod", "theorem", "diam_image_le", ["lipschitz_with"]], ["mod", "theorem", "ediam_image_le", ["lipschitz_with"]], ["add", "theorem", "edist_iterate_succ_le_geometric", ["lipschitz_with"]], ["add", "theorem", "edist_le", ["lipschitz_with"]], ["del", "theorem", "edist_map_le", ["lipschitz_with"]], ["add", "theorem", "nndist_le", ["lipschitz_with"]], ["del", "theorem", "nndist_map_le", ["lipschitz_with"]], ["mod", "def", "lipschitz_with", []], ["add", "theorem", "lipschitz_with_iff_dist_le", []]]}]}, {"timestamp": 1582404435, "sha": "ea149c8d", "message": "feat(algebraic_geometry/prime_spectrum): prime spectrum of a ring is compact (#1987)\n* wip\n* wip\n* wip\n* wip\n* WIP\n* WIP\n* Reset changes that belong to other PR\n* Docstrings\n* Add Heine--Borel to docstring\n* Cantor's intersection theorem\n* Cantor for sequences\n* Revert \"Reset changes that belong to other PR\"\nThis reverts commit e6026b8819570ef6a763582a25d7ae5ad508134b.\n* Move submodule lemmas to other file\n* Fix build\n* Update prime_spectrum.lean\n* Docstring\n* Update prime_spectrum.lean\n* Slight improvement?\n* Slightly improve structure of proof\n* WIP\n* Cleaning up proofs\n* Final fixes", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "mem_supr", ["submodule"]], ["add", "theorem", "span_singleton_le_iff_mem", ["submodule"]], ["add", "theorem", "supr_eq_span", ["submodule"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "mem_span_iff_total", ["finsupp"]], ["mod", "theorem", "map_finsupp_total", ["linear_map"]], ["add", "theorem", "exists_finset_of_mem_supr", ["submodule"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "le_supr_iff", ["lattice"]]]}]}, {"timestamp": 1582398631, "sha": "d615ee67", "message": "feat(ci): skip Azure upload if archive already exists (#2039)\n* skip upload if archive already exists\n* simplify script\n* remove unused variable\n* fix", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1582388664, "sha": "1c6a317a", "message": "feat(*): misc simple lemmas (#2036)\n* feat(*): misc simple lemmas\n* +1 lemma\n* Rename `inclusion_range` to `range_inclusion`\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nndist_smul", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_inclusion", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_ne_bot_of_image_mem", ["filter"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "is_closed_ball_top", ["emetric"]], ["add", "theorem", "edist_eq", ["prod"]]]}]}, {"timestamp": 1582379943, "sha": "603c7bae", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582373143, "sha": "eabcd132", "message": "feat(category_theory/limits): kernels (#1988)\n* chore(category_theory): require morphisms live in Type\n* move back to Type\n* fixes\n* feat(category_theory/limits): kernels\n* finishing basic API for kernels\n* update post #1412\n* fix\n* documentation\n* documentation\n* more docs\n* replacing dumb code\n* forall -> Pi\n* removing all instances\n* working on Reid's suggested lemmas\n* experiments\n* lots to do\n* Show that equalizers are monomorphisms\n* Show that equalizer of (f, f) is always an iso\n* Show that an equalizer that is an epimorphism is an isomorphism\n* Clean up\n* Show that the kernel of a monomorphism is zero\n* Fix\n* Show that the kernel of a linear map is a kernel in the categorical sense\n* Modify proof\n* Compactify proof\n* Various cleanup\n* Some more cleanup\n* Fix bibtex\n* Address some issues raised during discussion of the PR\n* Fix some more incorrect indentation\n* Some more minor fixes\n* Unify capitalization in Bibtex entries\n* Replace equalizer.lift.uniq with equalizer.hom_ext\n* Some more slight refactors\n* Typo", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/category/Module/basic.lean", "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "def", "kernel_cone", ["Module"]], ["add", "def", "kernel_is_limit", ["Module"]], ["add", "theorem", "of_apply", ["Module"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["mod", "theorem", "condition", ["category_theory", "limits", "coequalizer"]], ["add", "theorem", "cone_parallel_pair_ext", ["category_theory", "limits"]], ["add", "theorem", "cone_parallel_pair_left", ["category_theory", "limits"]], ["add", "theorem", "cone_parallel_pair_right", ["category_theory", "limits"]], ["add", "def", "cone_parallel_pair_self", ["category_theory", "limits"]], ["add", "theorem", "cone_parallel_pair_self_X", ["category_theory", "limits"]], ["add", "theorem", "cone_parallel_pair_self_π_app_zero", ["category_theory", "limits"]], ["add", "def", "epi_limit_cone_parallel_pair_is_iso", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "eq_app_zero", ["category_theory", "limits", "equalizer", "ι"]], ["add", "theorem", "fork", ["category_theory", "limits", "equalizer", "ι"]], ["add", "theorem", "ι_mono", ["category_theory", "limits", "equalizer"]], ["add", "theorem", "eq_of_ι_ι", ["category_theory", "limits", "fork"]], ["add", "def", "is_limit_cone_parallel_pair_self", ["category_theory", "limits"]], ["add", "def", "limit_cone_parallel_pair_self_is_iso", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/kernels.lean", "changes": [["add", "theorem", "condition", ["category_theory", "limits", "cokernel"]], ["add", "def", "desc", ["category_theory", "limits", "cokernel"]], ["add", "def", "π", ["category_theory", "limits", "cokernel"]], ["add", "def", "cokernel", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "kernel"]], ["add", "def", "is_limit_cone_zero_cone", ["category_theory", "limits", "kernel"]], ["add", "def", "lift", ["category_theory", "limits", "kernel"]], ["add", "def", "zero_cone", ["category_theory", "limits", "kernel"]], ["add", "def", "ι", ["category_theory", "limits", "kernel"]], ["add", "def", "ι_zero_is_iso", ["category_theory", "limits", "kernel"]], ["add", "def", "kernel", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "has_initial_of_unique", ["category_theory", "limits"]], ["add", "def", "has_terminal_of_unique", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/zero.lean", "changes": [["add", "def", "has_initial_of_has_zero_object", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "has_terminal_of_has_zero_object", ["category_theory", "limits", "has_zero_object"]], ["add", "def", "zero_morphisms_of_zero_object", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_of_from_zero", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_of_to_zero", ["category_theory", "limits", "has_zero_object"]], ["add", "theorem", "zero_of_comp_epi", ["category_theory", "limits"]], ["add", "theorem", "zero_of_comp_mono", ["category_theory", "limits"]], ["add", "def", "zero_of_zero_object", ["category_theory", "limits"]]]}]}, {"timestamp": 1582370059, "sha": "a9ed54ca", "message": "feat(ci): upload all branch builds to Azure server (#2032)", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1582364722, "sha": "928496ad", "message": "feat(category_theory/limits) Binary product from pullbacks and terminal object (#1998)\n* Binary product from pullbacks and terminal object\n* Update binary_products.lean\n* simplifications\n* pare down the proof a bit more\n* changes from review\n* adjust simp to rw", "changes": [{"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "theorem", "of_homs_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/binary_products.lean", "changes": [["add", "def", "has_binary_products_of_terminal_and_pullbacks", []]]}]}, {"timestamp": 1582359314, "sha": "03af46c4", "message": "chore(presheafed_space): avoid deterministic timeout (#1617)\n* chore(presheafed_space): avoid deterministic timeout\n* fix proofs: now works with -T16000\n* fix", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}]}, {"timestamp": 1582331819, "sha": "11797e62", "message": "chore(topology/metric_space/emetric_space): use filter bases in 2 proofs (#2034)", "changes": [{"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1582325231, "sha": "ffb6d6eb", "message": "feat(tactic): add various tactics about local definitions (#1953)\n* feat(tactic): add various tactics about local definitions\n* remove {α β}\n* rename generalize' in monotonicity.\n* updates after reviews", "changes": [{"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1582322058, "sha": "86c94176", "message": "doc(topology/dense_embedding): fix list syntax in a comment (#2033)", "changes": [{"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}]}, {"timestamp": 1582313362, "sha": "ff36e0f7", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582307191, "sha": "472156f9", "message": "feat(tactic/lint): check that left-hand side of all simp lemmas is in simp-normal form (#2017)\n* feat(tactic/lint): check that lhs of simp lemmas are in simp nf\n* fix(topology/metric_space/basic): remove @[simp] from lemmas with {x,y} on the lhs\n* chore(topology/local_homeomorph): remove redundant lemmas from the simp set\n* fix(topology/algebra/module): fix simp-nf lints\n* chore(ring_theory/localization): mark fewer things as simp\n* fix(set_theory/ordinal): put lhs into simp-normal form\n* chore(algebra/big_operators): fix simp lemmas\n* chore(data/set/lattice): remove redundant simp lemmas\n* chore(data/set/basic): remove redundant simp lemma\n* chore(data/zsqrtd/basic): make simp_nf lint happy\n* fix(order/complete_lattice): remove lemmas from simp set\n* chore(order/filter/filter_product): fix linting issues\n* feat(data/mv_polynomial): add simp lemmas about neg\n* fix(data/multiset): fix simp_nf linter issues\n* chore(data/list/sigma): fix simp_nf linter issues\n* fix(data/list/basic): remove redundant and unapplicable simp lemmas\n* fix(measure_theory/set_integral): remove redundant simp lemma\n* fix(measure_theory/l1_space): remove redundant simp lemmas\n* fix(algebra/group_power): remove simp lemmas that are not in nf\n* fix(algebra/field): remove redundant simp lemma\n* chore(data/list/alist): remove simp lemmas\n* fix(data/int/basic): simp-normal form for coercions...\n* fix(data/finset): formulate simp-lemmas for simp-nf\n* fix(data/int/parity): use simp-normal form\n* fix(data/equiv/denumerable): remove redundant simp lemma\n* fix(category_theory/**): fix simp-normal forms\n* fix(set_theory/zfc): put simp lemmas in simp-normal form\n* fix(tactlic/lint): ignore sub_eq_add_neg for simp_nf lint\n* doc(tactic/lint): add simp_nf linter to module doc\n* doc(docs/commands): add simp_nf linter\n* fix(*): put lemmas in simp-normal form", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "sum_boole_mul", ["finset"]], ["mod", "theorem", "sum_mul_boole", ["finset"]]]}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "mk0_inv", ["units"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "gpow_of_nat", []], ["mod", "theorem", "gsmul_of_nat", []], ["mod", "theorem", "one_div_pow", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "ite_mul", []]]}, {"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["mod", "theorem", "zero_locus_bot", ["prime_spectrum"]], ["add", "theorem", "zero_locus_singleton_zero", ["prime_spectrum"]]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "apply_zero_curry0", ["continuous_multilinear_map"]], ["mod", "theorem", "curry0_norm", ["continuous_multilinear_map"]], ["add", "theorem", "fin0_apply_norm", ["continuous_multilinear_map"]], ["mod", "theorem", "uncurry0_curry0", ["continuous_multilinear_map"]]]}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": [["mod", "def", "const_comp", ["category_theory", "functor"]], ["del", "theorem", "const_comp_hom_app", ["category_theory", "functor"]], ["del", "theorem", "const_comp_inv_app", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "theorem", "functor_unit_comp", ["category_theory", "equivalence"]]]}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["add", "theorem", "vcomp_app'", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "theorem", "map_hom_inv", ["category_theory", "functor"]], ["mod", "theorem", "map_inv_hom", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "ι_cocone_morphism", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "cone_morphism_π", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "symmetry'", ["category_theory", "limits", "coprod"]], ["mod", "theorem", "symmetry", ["category_theory", "limits", "coprod"]], ["add", "theorem", "symmetry'", ["category_theory", "limits", "prod"]], ["mod", "theorem", "symmetry", ["category_theory", "limits", "prod"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "theorem", "cospan_map_id", ["category_theory", "limits"]], ["mod", "theorem", "span_map_id", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "theorem", "naturality_1", ["category_theory", "nat_iso"]], ["mod", "theorem", "naturality_2", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["mod", "theorem", "vcomp_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": [["mod", "theorem", "decode_is_some", ["denumerable"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "inf_singleton'", ["finset"]], ["mod", "theorem", "inf_singleton", ["finset"]], ["add", "theorem", "insert_singleton_self_eq'", ["finset"]], ["mod", "theorem", "insert_singleton_self_eq", ["finset"]], ["mod", "theorem", "max_singleton", ["finset"]], ["add", "theorem", "min_singleton'", ["finset"]], ["mod", "theorem", "min_singleton", ["finset"]], ["add", "theorem", "sup_singleton'", ["finset"]], ["mod", "theorem", "sup_singleton", ["finset"]], ["mod", "theorem", "supr_union", ["finset"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_coe_nat'", ["int"]], ["mod", "theorem", "cast_of_nat", ["int"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["mod", "theorem", "mod_two_ne_zero", ["int"]], ["add", "theorem", "two_dvd_ne_zero", ["int"]]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["mod", "theorem", "insert_insert_of_ne", ["alist"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "concat_append", ["list"]], ["mod", "theorem", "concat_cons", ["list"]], ["mod", "theorem", "concat_ne_nil", ["list"]], ["mod", "theorem", "concat_nil", ["list"]], ["mod", "theorem", "count_concat", ["list"]], ["mod", "theorem", "exists_mem_cons_iff", ["list"]], ["add", "theorem", "infix_append'", ["list"]], ["mod", "theorem", "infix_append", ["list"]], ["mod", "theorem", "length_concat", ["list"]], ["mod", "theorem", "prefix_concat", ["list"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["mod", "theorem", "lookup_kinsert", ["list"]], ["mod", "theorem", "lookup_kinsert_ne", ["list"]], ["mod", "theorem", "mem_keys_kinsert", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "map_singleton", ["multiset"]], ["mod", "theorem", "prod_map_one", ["multiset"]], ["mod", "theorem", "sum_map_zero", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "coeff_neg", ["mv_polynomial"]], ["add", "theorem", "rename_neg", ["mv_polynomial"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "lift_or_get_none_left", ["option"]], ["add", "theorem", "lift_or_get_none_right", ["option"]], ["add", "theorem", "lift_or_get_some_some", ["option"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "nmem_set_of_eq", ["set"]], ["mod", "theorem", "subset_preimage_univ", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "bInter_empty", ["set"]], ["mod", "theorem", "bInter_univ", ["set"]], ["mod", "theorem", "bUnion_empty", ["set"]], ["mod", "theorem", "bUnion_univ", ["set"]]]}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": [["mod", "theorem", "of_int_im", ["zsqrtd"]], ["mod", "theorem", "of_int_re", ["zsqrtd"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "lintegral_nnnorm_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "theorem", "integral_on_zero", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["mod", "theorem", "infi_emptyset", ["lattice"]], ["mod", "theorem", "infi_insert", ["lattice"]], ["mod", "theorem", "infi_pair", ["lattice"]], ["mod", "theorem", "infi_singleton", ["lattice"]], ["mod", "theorem", "infi_union", ["lattice"]], ["mod", "theorem", "infi_univ", ["lattice"]], ["mod", "theorem", "supr_emptyset", ["lattice"]], ["mod", "theorem", "supr_insert", ["lattice"]], ["mod", "theorem", "supr_pair", ["lattice"]], ["mod", "theorem", "supr_singleton", ["lattice"]], ["mod", "theorem", "supr_union", ["lattice"]], ["mod", "theorem", "supr_univ", ["lattice"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "theorem", "abs_def", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_one", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_zero", ["filter", "filter_product"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "coe_is_unit'", ["localization"]], ["mod", "theorem", "coe_is_unit", ["localization"]], ["mod", "theorem", "coe_mul_mk", ["localization"]], ["mod", "theorem", "lift'_mk", ["localization"]], ["mod", "theorem", "mk_mul_mk", ["localization"]], ["mod", "theorem", "to_units_coe", ["localization"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["add", "theorem", "eval_mk", ["Set"]], ["mod", "theorem", "eval_val", ["pSet", "resp"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "self_comp_symm'", ["continuous_linear_equiv"]], ["mod", "theorem", "self_comp_symm", ["continuous_linear_equiv"]], ["add", "theorem", "symm_comp_self'", ["continuous_linear_equiv"]], ["mod", "theorem", "symm_comp_self", ["continuous_linear_equiv"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["mod", "theorem", "of_set_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "of_set_source", ["local_homeomorph"]], ["mod", "theorem", "of_set_symm", ["local_homeomorph"]], ["mod", "theorem", "of_set_target", ["local_homeomorph"]], ["mod", "theorem", "of_set_to_fun", ["local_homeomorph"]], ["mod", "theorem", "prod_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "prod_source", ["local_homeomorph"]], ["mod", "theorem", "prod_target", ["local_homeomorph"]], ["mod", "theorem", "prod_to_fun", ["local_homeomorph"]], ["mod", "theorem", "refl_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "refl_source", ["local_homeomorph"]], ["mod", "theorem", "refl_target", ["local_homeomorph"]], ["mod", "theorem", "refl_to_fun", ["local_homeomorph"]], ["mod", "theorem", "restr_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "restr_open_source", ["local_homeomorph"]], ["mod", "theorem", "restr_source", ["local_homeomorph"]], ["mod", "theorem", "restr_target", ["local_homeomorph"]], ["mod", "theorem", "restr_to_fun", ["local_homeomorph"]], ["mod", "theorem", "symm_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "symm_source", ["local_homeomorph"]], ["mod", "theorem", "symm_target", ["local_homeomorph"]], ["mod", "theorem", "symm_to_fun", ["local_homeomorph"]], ["mod", "theorem", "trans_inv_fun", ["local_homeomorph"]], ["mod", "theorem", "trans_to_fun", ["local_homeomorph"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "diam_pair", ["metric"]], ["mod", "theorem", "diam_triple", ["metric"]]]}, {"oldPath": null, "newPath": "test/lint_simp_nf.lean", "changes": [["add", "def", "c", []], ["add", "theorem", "c_eq_d", []], ["add", "def", "d", []], ["add", "def", "f", []], ["add", "theorem", "f_c", []], ["add", "def", "h", []], ["add", "theorem", "h_c", []], ["add", "structure", "morphism", []]]}]}, {"timestamp": 1582284372, "sha": "bb7631fb", "message": "feat(algebraic_geometry/prime_spectrum): vanishing ideal (#1972)\n* wip\n* wip\n* Remove stuff for next PR\n* Update prime_spectrum.lean\n* Process comments", "changes": [{"oldPath": "src/algebraic_geometry/prime_spectrum.lean", "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["del", "theorem", "Inter_zero_locus", ["prime_spectrum"]], ["add", "theorem", "coe_vanishing_ideal", ["prime_spectrum"]], ["add", "theorem", "gc", ["prime_spectrum"]], ["add", "theorem", "gc_set", ["prime_spectrum"]], ["add", "theorem", "is_closed_zero_locus", ["prime_spectrum"]], ["add", "theorem", "le_vanishing_ideal_zero_locus", ["prime_spectrum"]], ["add", "theorem", "mem_vanishing_ideal", ["prime_spectrum"]], ["add", "theorem", "subset_vanishing_ideal_zero_locus", ["prime_spectrum"]], ["add", "theorem", "subset_zero_locus_iff_le_vanishing_ideal", ["prime_spectrum"]], ["add", "theorem", "subset_zero_locus_iff_subset_vanishing_ideal", ["prime_spectrum"]], ["add", "theorem", "subset_zero_locus_vanishing_ideal", ["prime_spectrum"]], ["add", "theorem", "sup_vanishing_ideal_le", ["prime_spectrum"]], ["mod", "theorem", "union_zero_locus", ["prime_spectrum"]], ["del", "theorem", "union_zero_locus_ideal", ["prime_spectrum"]], ["add", "def", "vanishing_ideal", ["prime_spectrum"]], ["add", "theorem", "vanishing_ideal_Union", ["prime_spectrum"]], ["add", "theorem", "vanishing_ideal_union", ["prime_spectrum"]], ["add", "theorem", "vanishing_ideal_univ", ["prime_spectrum"]], ["mod", "theorem", "zero_locus_Union", ["prime_spectrum"]], ["add", "theorem", "zero_locus_bot", ["prime_spectrum"]], ["add", "theorem", "zero_locus_empty", ["prime_spectrum"]], ["add", "theorem", "zero_locus_empty_iff_eq_top", ["prime_spectrum"]], ["add", "theorem", "zero_locus_inf", ["prime_spectrum"]], ["del", "theorem", "zero_locus_is_closed", ["prime_spectrum"]], ["add", "theorem", "zero_locus_sup", ["prime_spectrum"]], ["add", "theorem", "zero_locus_supr", ["prime_spectrum"]], ["add", "theorem", "zero_locus_union", ["prime_spectrum"]], ["add", "theorem", "zero_locus_vanishing_ideal_eq_closure", ["prime_spectrum"]]]}]}, {"timestamp": 1582263399, "sha": "b30b5e95", "message": "feat(tactic/hint): update tactic list (#2024)\n* feat(tactic/hint): update tactic list\n* Removing `fsplit` in favour of `fconstructor`.\nCo-Authored-By: Floris van Doorn \n* fix test\n* silence a test", "changes": [{"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "test/hint.lean", "newPath": "test/hint.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": []}]}, {"timestamp": 1582253457, "sha": "888e75b5", "message": "refactor(*/multilinear): better right curryfication (#1985)\n* feat(data/fin): append\n* Update fin.lean\n* Update fintype.lean\n* replace but_last with init\n* cons and append commute\n* feat(*/multilinear): better multilinear\n* docstrings\n* snoc\n* fix build\n* comp_snoc and friends\n* fix docstring\n* typo", "changes": [{"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "norm_map_tail_le", ["continuous_linear_map"]], ["del", "theorem", "norm_map_tail_right_le", ["continuous_linear_map"]], ["add", "theorem", "continuous_multilinear_curry_fin0_apply", []], ["add", "theorem", "continuous_multilinear_curry_fin0_symm_apply", []], ["add", "def", "continuous_multilinear_curry_fin1", []], ["add", "theorem", "continuous_multilinear_curry_fin1_apply", []], ["add", "theorem", "continuous_multilinear_curry_fin1_symm_apply", []], ["add", "theorem", "continuous_multilinear_curry_left_equiv_apply", []], ["add", "theorem", "continuous_multilinear_curry_left_equiv_symm_apply", []], ["add", "theorem", "continuous_multilinear_curry_right_equiv_apply", []], ["add", "theorem", "continuous_multilinear_curry_right_equiv_symm_apply", []], ["add", "theorem", "norm_map_init_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_map_snoc_le", ["continuous_multilinear_map"]], ["del", "theorem", "norm_map_tail_left_le", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry0_apply", ["continuous_multilinear_map"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "def", "comp_multilinear_map", ["linear_map"]], ["add", "def", "comp_linear_map", ["multilinear_map"]], ["add", "def", "prod", ["multilinear_map"]], ["add", "theorem", "snoc_add", ["multilinear_map"]], ["add", "theorem", "snoc_smul", ["multilinear_map"]], ["mod", "def", "uncurry_right", ["multilinear_map"]]]}, {"oldPath": "src/topology/algebra/multilinear.lean", "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "def", "comp_continuous_multilinear_map", ["continuous_linear_map"]], ["add", "theorem", "comp_continuous_multilinear_map_coe", ["continuous_linear_map"]], ["add", "def", "comp_continuous_linear_map", ["continuous_multilinear_map"]], ["add", "def", "prod", ["continuous_multilinear_map"]], ["add", "theorem", "prod_apply", ["continuous_multilinear_map"]]]}]}, {"timestamp": 1582213943, "sha": "eeedc6a7", "message": "fix(*): remove loopy simp lemmas (#2026)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "conj_comp", ["equiv"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "theorem", "dual_le", ["order_dual"]], ["mod", "theorem", "dual_lt", ["order_dual"]]]}]}, {"timestamp": 1582233920, "sha": "b0eeea46", "message": "fix(data/bool): remove simp attribute from commutativity lemmas (#2027)", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["mod", "theorem", "band_comm", ["bool"]], ["mod", "theorem", "band_left_comm", ["bool"]], ["mod", "theorem", "bor_comm", ["bool"]], ["mod", "theorem", "bor_left_comm", ["bool"]], ["mod", "theorem", "bxor_comm", ["bool"]], ["mod", "theorem", "bxor_left_comm", ["bool"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "bodd_coe", ["int"]]]}]}, {"timestamp": 1582217722, "sha": "aefdb86e", "message": "feat(data/int/basic): format -42 as -42 instead of -(41+1) (#2025)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1582212263, "sha": "d933ea53", "message": "doc(lint): add linter missing from list of defaults (#2023)", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}]}, {"timestamp": 1582210200, "sha": "43dd9388", "message": "chore(ci): check roadmap directory (#2022)\n* chore(ci): check roadmap directory\npartially addresses #2016\n* fix roadmap compilation", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "roadmap/topology/paracompact.lean", "newPath": "roadmap/topology/paracompact.lean", "changes": []}, {"oldPath": "roadmap/topology/shrinking_lemma.lean", "newPath": "roadmap/topology/shrinking_lemma.lean", "changes": []}]}, {"timestamp": 1582196790, "sha": "4e398cca", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582190494, "sha": "68b9c164", "message": "feat(algebra/group): add `units.lift_right` and `is_unit.lift_right` (#2020)\n* Rename type variables, add a docstring\n* feat(algebra/group): add `units.lift_right` and `is_unit.lift_right`\nThese defs/lemmas may be useful for `monoid_localization`.", "changes": [{"oldPath": "src/algebra/group/is_unit.lean", "newPath": "src/algebra/group/is_unit.lean", "changes": [["add", "theorem", "coe_lift_right", ["is_unit"]]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["mod", "def", "coe_hom", ["units"]], ["mod", "theorem", "coe_hom_apply", ["units"]], ["add", "theorem", "coe_lift_right", ["units"]], ["mod", "theorem", "coe_map'", ["units"]], ["mod", "theorem", "coe_map", ["units"]], ["add", "def", "lift_right", ["units"]], ["mod", "def", "map'", ["units"]], ["mod", "def", "map", ["units"]], ["mod", "theorem", "map_comp", ["units"]], ["mod", "theorem", "map_id", ["units"]]]}]}, {"timestamp": 1582165439, "sha": "d42d29bf", "message": "fix(tactic/tauto): fix typos (#2019)\n* fix(tactic/tauto): fix typos\n* fix same error in tactics.md", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}]}, {"timestamp": 1582159953, "sha": "34724f43", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582154436, "sha": "2d6556dd", "message": "feat(analysis/mean_inequalities) : Prove AM-GM (#1836)\n* feat(analysis/mean_inequalities) : Prove AM-GM\n* Update, add more inequalities\n* Update src/analysis/convex/specific_functions.lean\nCo-Authored-By: sgouezel \n* Update src/analysis/mean_inequalities.lean\nCo-Authored-By: sgouezel \n* Update src/analysis/mean_inequalities.lean\n* Small fixes, thanks @sgouezel\n* Update src/analysis/mean_inequalities.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_fpow", []], ["add", "theorem", "deriv_within_fpow", []], ["add", "theorem", "differentiable_at_fpow", []], ["add", "theorem", "differentiable_on_fpow", []], ["add", "theorem", "differentiable_within_at_fpow", []], ["add", "theorem", "has_deriv_at_fpow", []], ["add", "theorem", "has_deriv_within_at_fpow", []], ["add", "theorem", "iter_deriv_fpow", []], ["add", "theorem", "iter_deriv_pow'", []], ["add", "theorem", "iter_deriv_pow", []]]}, {"oldPath": null, "newPath": "src/analysis/convex/specific_functions.lean", "changes": [["add", "theorem", "convex_on_exp", []], ["add", "theorem", "convex_on_fpow", []], ["add", "theorem", "convex_on_pow", []], ["add", "theorem", "convex_on_pow_of_even", []], ["add", "theorem", "prod_nonneg_of_card_nonpos_even", ["finset"]], ["add", "theorem", "int_prod_range_nonneg", []]]}, {"oldPath": null, "newPath": "src/analysis/mean_inequalities.lean", "changes": [["add", "theorem", "am_gm2_weighted", ["nnreal"]], ["add", "theorem", "am_gm3_weighted", ["nnreal"]], ["add", "theorem", "am_gm_weighted", ["nnreal"]], ["add", "theorem", "pow_am_le_am_pow", ["nnreal"]], ["add", "theorem", "young_inequality", ["nnreal"]], ["add", "theorem", "am_gm2_weighted", ["real"]], ["add", "theorem", "am_gm_weighted", ["real"]], ["add", "theorem", "fpow_am_le_am_fpow", ["real"]], ["add", "theorem", "pow_am_le_am_pow", ["real"]], ["add", "theorem", "pow_am_le_am_pow_of_even", ["real"]], ["add", "theorem", "young_inequality", ["real"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "add", ["nat", "even"]], ["add", "theorem", "sub", ["nat", "even"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_mk", ["nnreal"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "compl_Ici", ["set"]], ["add", "theorem", "compl_Iic", ["set"]], ["add", "theorem", "compl_Iio", ["set"]], ["add", "theorem", "compl_Ioi", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "interior_Icc", []], ["add", "theorem", "interior_Ici", []], ["add", "theorem", "interior_Ico", []], ["add", "theorem", "interior_Iic", []], ["add", "theorem", "interior_Iio", []], ["add", "theorem", "interior_Ioc", []], ["add", "theorem", "interior_Ioi", []], ["add", "theorem", "interior_Ioo", []], ["mod", "theorem", "is_open_Iio", []], ["mod", "theorem", "is_open_Ioi", []], ["mod", "theorem", "is_open_Ioo", []]]}]}, {"timestamp": 1582148788, "sha": "5b77b64f", "message": "refactor(analysis/calculus/tangent_cone): split a proof into parts (#2013)\n* refactor(analysis/calculus/tangent_cone): split a proof into parts\nProve `submodule.eq_top_of_nonempty_interior` and use it in the\nproof of `unique_diff_on_convex`.\n* Update src/analysis/normed_space/basic.lean\nCo-Authored-By: sgouezel \n* Fix a docstring.\n* Update src/topology/algebra/module.lean", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "is_unit_iff_ne_zero", []]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "smul_mem_iff'", ["submodule"]]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "punctured_nhds_ne_bot", ["normed_field"]], ["add", "theorem", "eq_top_of_nonempty_interior", ["submodule"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "eq_top_of_nonempty_interior'", ["submodule"]]]}]}, {"timestamp": 1582116162, "sha": "bcdb4c3a", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1582110333, "sha": "85636950", "message": "refactor(algebra/associated): move `is_unit` def to `algebra/group` (#2015)\n* refactor(algebra/associated): move `is_unit` def to `algebra/group`\nI think it makes sense to have it near `units`.\n* Add a docstring to `units`, mention `is_unit` there.", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "map'", ["is_unit"]], ["del", "theorem", "map", ["is_unit"]], ["del", "def", "is_unit", []], ["del", "theorem", "is_unit_iff_exists_inv'", []], ["del", "theorem", "is_unit_iff_exists_inv", []], ["del", "theorem", "is_unit_nat", []], ["del", "theorem", "is_unit_of_mul_is_unit_left", []], ["del", "theorem", "is_unit_of_mul_is_unit_right", []], ["del", "theorem", "is_unit_of_mul_one", []], ["del", "theorem", "is_unit_one", []], ["del", "theorem", "is_unit_unit", []], ["del", "theorem", "is_unit_mul_units", ["units"]]]}, {"oldPath": "src/algebra/group/default.lean", "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group/is_unit.lean", "changes": [["add", "theorem", "map'", ["is_unit"]], ["add", "theorem", "map", ["is_unit"]], ["add", "def", "is_unit", []], ["add", "theorem", "is_unit_iff_exists_inv'", []], ["add", "theorem", "is_unit_iff_exists_inv", []], ["add", "theorem", "is_unit_nat", []], ["add", "theorem", "is_unit_of_mul_is_unit_left", []], ["add", "theorem", "is_unit_of_mul_is_unit_right", []], ["add", "theorem", "is_unit_of_mul_one", []], ["add", "theorem", "is_unit_one", []], ["add", "theorem", "is_unit_unit", []], ["add", "theorem", "is_unit_mul_units", ["units"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}]}, {"timestamp": 1582102120, "sha": "177c06f5", "message": "chore(measure_theory/*): make a few proofs slightly shorter (#2014)", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1582067593, "sha": "8700aa7d", "message": "feat(docs): install mathlibtools package with pip (#2010)", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "docs/install/debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1582056378, "sha": "2198d2c4", "message": "feat(roadmap): add some formal roadmaps in topology (#1914)\n* feat(roadmap): add some formal roadmaps in topology\n* Update roadmap/topology/paracompact.lean\nCo-Authored-By: Johan Commelin \n* Update roadmap/todo.lean\n* Update roadmap/topology/shrinking_lemma.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* add `todo` tactic as a wrapper for `exact todo`\n* Update roadmap/topology/shrinking_lemma.lean\nCo-Authored-By: Johan Commelin \n* copyright notices and module docs\n* oops", "changes": [{"oldPath": null, "newPath": "roadmap/todo.lean", "changes": []}, {"oldPath": null, "newPath": "roadmap/topology/paracompact.lean", "changes": [["add", "theorem", "normal_of_paracompact_t2", []], ["add", "theorem", "paracompact_of_compact", []], ["add", "theorem", "paracompact_of_metric", []], ["add", "theorem", "precise_refinement", ["paracompact_space"]]]}, {"oldPath": null, "newPath": "roadmap/topology/shrinking_lemma.lean", "changes": [["add", "theorem", "shrinking_lemma", []]]}]}, {"timestamp": 1582045637, "sha": "0c2dbd56", "message": "chore(analysis/normed_space/basic): implicit args (#2011)\nArguments to these `iff`s should be implicit.", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "nnnorm_eq_zero", []], ["mod", "theorem", "norm_eq_zero", []], ["mod", "theorem", "norm_le_zero_iff", []], ["mod", "theorem", "norm_pos_iff", []], ["mod", "theorem", "norm_zero", []]]}, {"oldPath": "src/analysis/normed_space/multilinear.lean", "newPath": "src/analysis/normed_space/multilinear.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1582037804, "sha": "8a660ecb", "message": "feat(scripts/deploy_nightly): change pre-release to release (#2009)\nThe `--pre-release` doesn't really achieve anything as far as we can tell, and complicates some scripting: see https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/mathlib.20nightlies", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1582027787, "sha": "115e5135", "message": "chore(topology/constructions): rename `tendsto_prod_mk_nhds` (#2008)\nNew name is `tendsto.prod_mk_nhds`. Also use it in a few proofs and\ngeneralize `tendsto_smul` to a `topological_semimodule`.", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "tendsto_smul", []], ["del", "theorem", "tendsto_smul_const", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "smul", ["continuous"]], ["add", "theorem", "smul", ["filter", "tendsto"]], ["add", "theorem", "tendsto_smul", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod_mk_nhds", ["filter", "tendsto"]], ["del", "theorem", "tendsto_prod_mk_nhds", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1582018388, "sha": "1435a196", "message": "refactor(topology/maps): split the proof of `is_open_map_iff_nhds_le` (#2007)\nExtract a lemma `is_open_map.image_mem_nhds` from the proof, and make\nthe proof use this lemma.", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "image_mem_nhds", ["is_open_map"]], ["mod", "def", "is_open_map", []], ["mod", "theorem", "is_open_map_iff_nhds_le", []]]}]}, {"timestamp": 1581991856, "sha": "2d00f208", "message": "feat(data/fin): init and snoc (#1978)\n* feat(data/fin): append\n* Update fin.lean\n* Update fintype.lean\n* replace but_last with init\n* cons and append commute\n* change append to snoc\n* comp_snoc and friends\n* markdown in docstrings\n* fix docstring", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_succ_fin_succ", ["fin"]], ["add", "theorem", "comp_cons", ["fin"]], ["add", "theorem", "comp_init", ["fin"]], ["add", "theorem", "comp_snoc", ["fin"]], ["add", "theorem", "comp_tail", ["fin"]], ["add", "theorem", "cons_snoc_eq_snoc_cons", ["fin"]], ["add", "theorem", "eq_last_of_not_lt", ["fin"]], ["add", "def", "init", ["fin"]], ["add", "theorem", "init_snoc", ["fin"]], ["add", "theorem", "init_update_cast_succ", ["fin"]], ["add", "theorem", "init_update_last", ["fin"]], ["add", "def", "snoc", ["fin"]], ["add", "theorem", "snoc_cast_succ", ["fin"]], ["add", "theorem", "snoc_init_self", ["fin"]], ["add", "theorem", "snoc_last", ["fin"]], ["add", "theorem", "snoc_update", ["fin"]], ["add", "theorem", "succ_last", ["fin"]], ["add", "theorem", "tail_init_eq_init_tail", ["fin"]], ["add", "theorem", "update_snoc_last", ["fin"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "prod_univ_cast_succ", ["fin"]], ["add", "theorem", "sum_univ_cast_succ", ["fin"]], ["add", "theorem", "univ_cast_succ", ["fin"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "theorem", "comp_update", ["function"]]]}]}, {"timestamp": 1581986407, "sha": "b373daea", "message": "feat(linear_algebra/contraction): define contraction maps between a module and its dual (#1973)\n* feat(linear_algebra/contraction): define contraction maps between a module and its dual\n* Implicit carrier types for smul_comm\n* Add comment with license and file description\n* Build on top of extant linear_map.smul_right\n* Feedback from code review", "changes": [{"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "smul_comm", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "smul_rightₗ", ["linear_map"]], ["add", "theorem", "smul_rightₗ_apply", ["linear_map"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/contraction.lean", "changes": [["add", "def", "contract_left", []], ["add", "theorem", "contract_left_apply", []], ["add", "def", "contract_right", []], ["add", "theorem", "contract_right_apply", []], ["add", "def", "dual_tensor_hom", []], ["add", "theorem", "dual_tensor_hom_apply", []]]}]}, {"timestamp": 1581981041, "sha": "4299a801", "message": "refactor(topology/subset_properties): use finite subcovers indexed by types (#1980)\n* wip\n* wip\n* wip\n* wip\n* WIP\n* WIP\n* Reset changes that belong to other PR\n* Docstrings\n* Add Heine--Borel to docstring\n* Cantor's intersection theorem\n* Cantor for sequences\n* Generalise Cantor intersection thm\n* More fixes", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "elim_finite_subcover", ["compact"]], ["add", "theorem", "elim_finite_subfamily_closed", ["compact"]], ["add", "theorem", "nonempty_Inter_of_directed_nonempty_compact_closed", ["compact"]], ["add", "theorem", "nonempty_Inter_of_sequence_nonempty_compact_closed", ["compact"]], ["add", "theorem", "compact_iff_finite_subfamily_closed", []], ["add", "theorem", "compact_of_finite_subfamily_closed", []], ["add", "theorem", "compact_space_of_finite_subfamily_closed", []], ["mod", "theorem", "compact_bUnion", ["set", "finite"]]]}]}, {"timestamp": 1581975903, "sha": "bbf5d1a5", "message": "refactor(algebra/field): partially migrate to bundled homs (#1999)\n* refactor(algebra/field): partially migrate to bundled homs\n* Add a few `@[simp]` attrs", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "injective", ["is_ring_hom"]], ["mod", "theorem", "map_div'", ["is_ring_hom"]], ["mod", "theorem", "map_div", ["is_ring_hom"]], ["mod", "theorem", "map_eq_zero", ["is_ring_hom"]], ["mod", "theorem", "map_inv'", ["is_ring_hom"]], ["mod", "theorem", "map_inv", ["is_ring_hom"]], ["mod", "theorem", "map_ne_zero", ["is_ring_hom"]], ["add", "theorem", "injective", ["ring_hom"]], ["add", "theorem", "map_div'", ["ring_hom"]], ["add", "theorem", "map_div", ["ring_hom"]], ["add", "theorem", "map_eq_zero", ["ring_hom"]], ["add", "theorem", "map_inv'", ["ring_hom"]], ["add", "theorem", "map_inv", ["ring_hom"]], ["add", "theorem", "map_ne_zero", ["ring_hom"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "map_fpow'", ["ring_hom"]], ["add", "theorem", "map_fpow", ["ring_hom"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}]}, {"timestamp": 1581970220, "sha": "6cdd96b3", "message": "chore(*): reduce proof size (#2006)", "changes": [{"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}]}, {"timestamp": 1581964635, "sha": "5eefae27", "message": "chore(set_theory/ordinal): shorten proofs (#2005)", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "lt_or_eq_apply_left", ["initial_seg"]], ["mod", "theorem", "lt_or_eq_apply_right", ["initial_seg"]]]}]}, {"timestamp": 1581958824, "sha": "5f066928", "message": "feat(data/set/intervals): add `Ici_subset_Ici`, `Iic_subset_Iic` (#2003)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ici_subset_Ici", ["set"]], ["add", "theorem", "Iic_subset_Iic", ["set"]]]}]}, {"timestamp": 1581947711, "sha": "f8d0931c", "message": "feat(tactic/rename_var): A teaching tactic (#1974)\n* feat(tactic/rename_var): A teaching tactic\nThe goal is to teach that bound variables names are irrelevant, and also\nhelp clarify local context.\n* allow rename_var to act on several locations at once\n* Apply suggestions from code review\nby Rob.\nCo-Authored-By: Rob Lewis ", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rename_var.lean", "changes": []}, {"oldPath": null, "newPath": "test/rename_var.lean", "changes": []}]}, {"timestamp": 1581941970, "sha": "cd0e2f6a", "message": "add \"Try this: \" to squeeze_simp and suggest (#1990)\n* add \"Try this\" to squeeze_simp and suggest\n* update docs\n* fix suggest tests\n* add \"try this\" to rcases, rintro, and tidy\n* add \"try this\" to hint", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/hint.lean", "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "test/suggest.lean", "newPath": "test/suggest.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": []}]}, {"timestamp": 1581936346, "sha": "557b01d2", "message": "chore(analysis/calculus/tangent_cone): simplify a proof (#2002)\nUse `linear_map.span_inl_union_inr` instead of repeating its proof.", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}]}, {"timestamp": 1581930467, "sha": "b42e5687", "message": "chore(algebra/group_power): rename type vars, minor cleanup (#1997)\nThe only non-BC change should be removing\nis_group_hom.map_gpow` / `is_add_group_hom.map_gsmul` in favor of `monoid_hom.map_gpow`.", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["mod", "def", "to_multiplicative", ["add_monoid_hom"]], ["mod", "def", "to_additive", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "abs_neg_one_pow", []], ["mod", "theorem", "add_gsmul", []], ["mod", "theorem", "add_smul", ["add_monoid"]], ["mod", "theorem", "mul_smul'", ["add_monoid"]], ["mod", "theorem", "mul_smul", ["add_monoid"]], ["mod", "theorem", "mul_smul_assoc", ["add_monoid"]], ["mod", "theorem", "mul_smul_left", ["add_monoid"]], ["mod", "theorem", "neg_smul", ["add_monoid"]], ["mod", "theorem", "one_smul", ["add_monoid"]], ["mod", "def", "smul", ["add_monoid"]], ["mod", "theorem", "smul_add", ["add_monoid"]], ["mod", "theorem", "smul_eq_mul'", ["add_monoid"]], ["mod", "theorem", "smul_eq_mul", ["add_monoid"]], ["mod", "theorem", "smul_le_smul", ["add_monoid"]], ["mod", "theorem", "smul_le_smul_of_le_right", ["add_monoid"]], ["mod", "theorem", "smul_neg_comm", ["add_monoid"]], ["mod", "theorem", "smul_nonneg", ["add_monoid"]], ["mod", "theorem", "smul_one", ["add_monoid"]], ["mod", "theorem", "smul_sub", ["add_monoid"]], ["mod", "theorem", "smul_zero", ["add_monoid"]], ["mod", "theorem", "zero_smul", ["add_monoid"]], ["mod", "theorem", "map_gsmul", ["add_monoid_hom"]], ["mod", "theorem", "map_smul", ["add_monoid_hom"]], ["mod", "theorem", "add_one_gsmul", []], ["mod", "theorem", "bit0_gsmul", []], ["mod", "theorem", "bit0_smul", []], ["mod", "theorem", "bit1_gsmul", []], ["mod", "theorem", "bit1_smul", []], ["mod", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_semiring"]], ["mod", "theorem", "pow_le_one", ["canonically_ordered_semiring"]], ["mod", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["mod", "theorem", "pow_pos", ["canonically_ordered_semiring"]], ["mod", "theorem", "div_pow", []], ["mod", "theorem", "inv_pow", ["division_ring"]], ["mod", "def", "gpow", []], ["mod", "theorem", "gpow_add", []], ["mod", "theorem", "gpow_add_one", []], ["mod", "theorem", "gpow_bit0", []], ["mod", "theorem", "gpow_bit1", []], ["mod", "theorem", "gpow_coe_nat", []], ["mod", "theorem", "gpow_mul'", []], ["mod", "theorem", "gpow_mul", []], ["mod", "theorem", "gpow_mul_comm", []], ["mod", "theorem", "gpow_neg", []], ["mod", "theorem", "gpow_neg_one", []], ["mod", "theorem", "gpow_neg_succ", []], ["mod", "theorem", "gpow_of_nat", []], ["mod", "theorem", "gpow_one", []], ["mod", "theorem", "gpow_one_add", []], ["mod", "theorem", "gpow_zero", []], ["mod", "def", "gsmul", []], ["mod", "theorem", "gsmul_add", []], ["mod", "theorem", "gsmul_add_comm", []], ["mod", "theorem", "gsmul_coe_nat", []], ["mod", "theorem", "gsmul_eq_mul'", []], ["mod", "theorem", "gsmul_eq_mul", []], ["mod", "theorem", "gsmul_mul'", []], ["mod", "theorem", "gsmul_mul", []], ["mod", "theorem", "gsmul_neg", []], ["mod", "theorem", "gsmul_neg_succ", []], ["mod", "theorem", "gsmul_of_nat", []], ["mod", "theorem", "gsmul_one", []], ["mod", "theorem", "gsmul_sub", []], ["mod", "theorem", "gsmul_zero", []], ["mod", "theorem", "cast_pow", ["int"]], ["mod", "theorem", "inv_gpow", []], ["mod", "theorem", "inv_pow'", []], ["mod", "theorem", "inv_pow", []], ["del", "theorem", "gsmul", ["is_add_group_hom"]], ["del", "theorem", "map_gsmul", ["is_add_group_hom"]], ["del", "theorem", "map_smul", ["is_add_group_hom"]], ["mod", "theorem", "map_smul", ["is_add_monoid_hom"]], ["del", "theorem", "map_gpow", ["is_group_hom"]], ["del", "theorem", "map_pow", ["is_group_hom"]], ["mod", "theorem", "map_pow", ["is_monoid_hom"]], ["mod", "theorem", "map_pow", ["is_semiring_hom"]], ["mod", "theorem", "prod_repeat", ["list"]], ["mod", "theorem", "sum_repeat", ["list"]], ["mod", "theorem", "lt_of_pow_lt_pow", []], ["mod", "def", "pow", ["monoid"]], ["mod", "theorem", "map_gpow", ["monoid_hom"]], ["mod", "theorem", "map_pow", ["monoid_hom"]], ["mod", "theorem", "mul_gpow", []], ["mod", "theorem", "mul_gsmul_assoc", []], ["mod", "theorem", "mul_gsmul_left", []], ["mod", "theorem", "mul_pow", []], ["mod", "theorem", "cast_pow", ["nat"]], ["mod", "theorem", "neg_gsmul", []], ["mod", "theorem", "neg_one_gsmul", []], ["mod", "theorem", "neg_one_pow_eq_or", []], ["mod", "theorem", "neg_one_pow_eq_pow_mod_two", []], ["mod", "theorem", "one_add_gsmul", []], ["mod", "theorem", "one_add_mul_le_pow'", []], ["mod", "theorem", "one_add_mul_le_pow", []], ["mod", "theorem", "one_add_sub_mul_le_pow", []], ["mod", "theorem", "one_div_pow", []], ["mod", "theorem", "one_gpow", []], ["mod", "theorem", "one_gsmul", []], ["mod", "theorem", "one_le_pow_of_one_le", []], ["mod", "theorem", "one_pow", []], ["mod", "theorem", "pow_abs", []], ["mod", "theorem", "pow_add", []], ["mod", "theorem", "pow_bit0", []], ["mod", "theorem", "pow_bit1", []], ["mod", "theorem", "pow_div", []], ["mod", "theorem", "pow_dvd_pow", []], ["mod", "theorem", "pow_eq_zero", []], ["mod", "theorem", "pow_inv", []], ["mod", "theorem", "pow_inv_comm", []], ["mod", "theorem", "pow_le_one", []], ["mod", "theorem", "pow_le_pow", []], ["mod", "theorem", "pow_le_pow_of_le_left", []], ["mod", "theorem", "pow_le_pow_of_le_one", []], ["mod", "theorem", "pow_lt_pow", []], ["mod", "theorem", "pow_lt_pow_of_lt_left", []], ["mod", "theorem", "pow_lt_pow_of_lt_one", []], ["mod", "theorem", "pow_mul'", []], ["mod", "theorem", "pow_mul", []], ["mod", "theorem", "pow_mul_comm'", []], ["mod", "theorem", "pow_mul_comm", []], ["mod", "theorem", "pow_ne_zero", []], ["mod", "theorem", "pow_nonneg", []], ["mod", "theorem", "pow_one", []], ["mod", "theorem", "pow_pos", []], ["mod", "theorem", "pow_right_inj", []], ["mod", "theorem", "pow_sub", []], ["mod", "theorem", "pow_succ'", []], ["mod", "theorem", "pow_succ", []], ["mod", "theorem", "pow_two", []], ["mod", "theorem", "pow_two_nonneg", []], ["mod", "theorem", "pow_zero", []], ["mod", "theorem", "map_pow", ["ring_hom"]], ["mod", "theorem", "smul_add_comm'", []], ["mod", "theorem", "smul_add_comm", []], ["mod", "theorem", "sq_sub_sq", []], ["mod", "theorem", "succ_smul'", []], ["mod", "theorem", "succ_smul", []], ["mod", "theorem", "two_smul", []], ["mod", "theorem", "coe_pow", ["units"]], ["mod", "theorem", "coe_smul", ["with_bot"]], ["mod", "theorem", "zero_gsmul", []], ["mod", "theorem", "zero_pow", []]]}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "coe_gsmul", ["real", "angle"]], ["add", "theorem", "coe_smul", ["real", "angle"]]]}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1581924548, "sha": "d673e55b", "message": "feat(ring_theory/algebra): add ext_iff (#1996)\n* feat(ring_theory/algebra): add ext_iff\n* also add eq_top_iff\n* Update src/ring_theory/algebra.lean", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "eq_top_iff", ["algebra"]], ["add", "theorem", "ext_iff", ["subalgebra"]]]}]}, {"timestamp": 1581919191, "sha": "770c56bd", "message": "doc(topology/metric_space/basic): add 1 docstring (#2000)\n* doc(topology/metric_space/basic): add 1 docstring\n* Update src/topology/metric_space/basic.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1581914105, "sha": "dbb21c88", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1581908390, "sha": "1b1b626a", "message": "chore(topology/sequences): use filter bases, minor fixes (#2001)", "changes": [{"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["mod", "def", "is_seq_closed", []]]}]}, {"timestamp": 1581809914, "sha": "c7eb6f81", "message": "chore(algebra/group/hom): add a missing `simp` lemma (#1994)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_mk", ["monoid_hom"]]]}]}, {"timestamp": 1581773619, "sha": "dbb61ea3", "message": "feat(tactic/hint): try out a customisable list of tactics, and report which ones make progress (#1955)\n* feat(tactic/hint): try out a fixed list of tactics, and report which ones make progress\n* add hint to tactic.default\n* make the list of hint tactics customisable\n* suggestion\n* fix linting errors\n* simplify use of add_hint, and add hints\n* remove TODO\n* Update src/tactic/hint.lean\nCo-Authored-By: Rob Lewis \n* various\n* Update docs/tactics.md", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/hint.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": null, "newPath": "test/hint.lean", "changes": []}]}, {"timestamp": 1581760781, "sha": "0b6d398e", "message": "chore(algebra/group/basic): rename type vars (#1989)", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "add_add_neg_cancel'_right", []], ["mod", "theorem", "add_add_sub_cancel", []], ["mod", "theorem", "add_sub_cancel'", []], ["mod", "theorem", "add_sub_cancel'_right", []], ["mod", "theorem", "add_sub_sub_cancel", []], ["mod", "theorem", "bit0_zero", []], ["mod", "theorem", "bit1_zero", []], ["mod", "theorem", "eq_iff_eq_of_sub_eq_sub", []], ["mod", "theorem", "eq_inv_iff_eq_inv", []], ["mod", "theorem", "eq_inv_iff_mul_eq_one", []], ["mod", "theorem", "eq_inv_mul_iff_mul_eq", []], ["mod", "theorem", "eq_mul_inv_iff_mul_eq", []], ["mod", "theorem", "eq_of_inv_eq_inv", []], ["mod", "theorem", "eq_sub_iff_add_eq'", []], ["mod", "theorem", "eq_sub_iff_add_eq", []], ["mod", "theorem", "inv_comm_of_comm", []], ["mod", "theorem", "inv_eq_iff_inv_eq", []], ["mod", "theorem", "inv_eq_iff_mul_eq_one", []], ["mod", "theorem", "inv_eq_one", []], ["mod", "theorem", "inv_inj'", []], ["mod", "theorem", "inv_mul_eq_iff_eq_mul", []], ["mod", "theorem", "inv_ne_one", []], ["mod", "theorem", "left_inverse_add_left_sub", []], ["mod", "theorem", "left_inverse_add_right_neg_add", []], ["mod", "theorem", "left_inverse_inv", []], ["mod", "theorem", "left_inverse_neg_add_add_right", []], ["mod", "theorem", "left_inverse_sub_add_left", []], ["mod", "theorem", "mul_eq_one_iff_eq_inv", []], ["mod", "theorem", "mul_eq_one_iff_inv_eq", []], ["mod", "theorem", "mul_inv_eq_iff_eq_mul", []], ["mod", "theorem", "mul_inv_eq_one", []], ["mod", "theorem", "mul_left_inj", []], ["mod", "theorem", "mul_left_injective", []], ["mod", "theorem", "mul_left_surjective", []], ["mod", "theorem", "mul_mul_mul_comm", []], ["mod", "theorem", "mul_right_inj", []], ["mod", "theorem", "mul_right_injective", []], ["mod", "theorem", "mul_right_surjective", []], ["mod", "theorem", "mul_self_iff_eq_one", []], ["mod", "theorem", "neg_add'", []], ["mod", "theorem", "neg_sub_neg", []], ["mod", "theorem", "sub_add_add_cancel", []], ["mod", "theorem", "sub_add_sub_cancel'", []], ["mod", "theorem", "sub_add_sub_cancel", []], ["mod", "theorem", "sub_eq_iff_eq_add'", []], ["mod", "theorem", "sub_eq_iff_eq_add", []], ["mod", "theorem", "sub_eq_neg_add", []], ["mod", "theorem", "sub_eq_sub_iff_sub_eq_sub", []], ["mod", "theorem", "sub_eq_zero", []], ["mod", "theorem", "sub_left_inj", []], ["mod", "theorem", "sub_ne_zero", []], ["mod", "theorem", "sub_right_comm", []], ["mod", "theorem", "sub_right_inj", []], ["mod", "theorem", "sub_sub_assoc_swap", []], ["mod", "theorem", "sub_sub_cancel", []], ["mod", "theorem", "sub_sub_sub_cancel_left", []], ["mod", "theorem", "sub_sub_sub_cancel_right", []]]}]}, {"timestamp": 1581702938, "sha": "d36930b2", "message": "chore(scripts): update nolints.txt", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1581697628, "sha": "edefe20e", "message": "feat(ci): update nolints.txt after master builds (#1979)\n* feat(ci): update nolints.txt after master builds\n* avoid failure when no changes\n* update for production\n* update condition\n* header override is already unset", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": null, "newPath": "scripts/update_nolints.sh", "changes": []}]}, {"timestamp": 1581676214, "sha": "938960ee", "message": "fix(scripts/deploy_docs): remove last trace of nightly builds (#1986)", "changes": [{"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1581644652, "sha": "4441394d", "message": "chore(category_theory/conj): avoid `is_mul_hom` (#1984)", "changes": [{"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}]}, {"timestamp": 1581638850, "sha": "9a911258", "message": "chore(group_theory/sub*) : rename type vars (#1982)\nUse `M`, `G`, `A` instead of greek letters", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "inductive", "in_closure", ["add_group"]], ["mod", "theorem", "normal_add_subgroup_iff", ["additive"]], ["mod", "theorem", "simple_add_group_iff", ["additive"]], ["mod", "def", "gmultiples", []], ["mod", "theorem", "gmultiples_subset", []], ["mod", "def", "gpowers", []], ["mod", "theorem", "gpowers_subset", []], ["mod", "def", "closure", ["group"]], ["mod", "theorem", "closure_eq_mclosure", ["group"]], ["mod", "theorem", "closure_mono", ["group"]], ["mod", "theorem", "closure_subgroup", ["group"]], ["mod", "theorem", "closure_subset", ["group"]], ["mod", "theorem", "closure_subset_iff", ["group"]], ["mod", "theorem", "conj_mem_conjugates_of_set", ["group"]], ["mod", "def", "conjugates", ["group"]], ["mod", "def", "conjugates_of_set", ["group"]], ["mod", "theorem", "conjugates_of_set_mono", ["group"]], ["mod", "theorem", "conjugates_of_set_subset", ["group"]], ["mod", "theorem", "conjugates_subset", ["group"]], ["mod", "theorem", "exists_list_of_mem_closure", ["group"]], ["mod", "theorem", "gpowers_eq_closure", ["group"]], ["mod", "theorem", "image_closure", ["group"]], ["mod", "inductive", "in_closure", ["group"]], ["mod", "theorem", "mclosure_inv_subset", ["group"]], ["mod", "theorem", "mclosure_subset", ["group"]], ["mod", "theorem", "mem_closure", ["group"]], ["mod", "theorem", "mem_closure_union_iff", ["group"]], ["mod", "theorem", "mem_conjugates_of_set_iff", ["group"]], ["mod", "theorem", "mem_conjugates_self", ["group"]], ["mod", "def", "normal_closure", ["group"]], ["mod", "theorem", "normal_closure_mono", ["group"]], ["mod", "theorem", "normal_closure_subset", ["group"]], ["mod", "theorem", "normal_closure_subset_iff", ["group"]], ["mod", "theorem", "subset_closure", ["group"]], ["mod", "theorem", "injective_mul", []], ["mod", "theorem", "gsmul_coe", ["is_add_subgroup"]], ["mod", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["mod", "theorem", "of_sub", ["is_add_subgroup"]], ["mod", "theorem", "sub_mem", ["is_add_subgroup"]], ["mod", "theorem", "inj_iff_trivial_ker", ["is_group_hom"]], ["mod", "theorem", "inj_of_trivial_ker", ["is_group_hom"]], ["mod", "theorem", "inv_iff_ker'", ["is_group_hom"]], ["mod", "theorem", "inv_iff_ker", ["is_group_hom"]], ["mod", "theorem", "inv_ker_one'", ["is_group_hom"]], ["mod", "theorem", "inv_ker_one", ["is_group_hom"]], ["mod", "def", "ker", ["is_group_hom"]], ["mod", "theorem", "mem_ker", ["is_group_hom"]], ["mod", "theorem", "one_iff_ker_inv'", ["is_group_hom"]], ["mod", "theorem", "one_iff_ker_inv", ["is_group_hom"]], ["mod", "theorem", "one_ker_inv'", ["is_group_hom"]], ["mod", "theorem", "one_ker_inv", ["is_group_hom"]], ["mod", "theorem", "trivial_ker_iff_eq_one", ["is_group_hom"]], ["mod", "theorem", "trivial_ker_of_inj", ["is_group_hom"]], ["mod", "def", "center", ["is_subgroup"]], ["mod", "theorem", "coe_gpow", ["is_subgroup"]], ["mod", "theorem", "coe_inv", ["is_subgroup"]], ["mod", "theorem", "eq_trivial_iff", ["is_subgroup"]], ["mod", "theorem", "gpow_mem", ["is_subgroup"]], ["mod", "theorem", "mem_center", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm_iff", ["is_subgroup"]], ["mod", "theorem", "mem_trivial", ["is_subgroup"]], ["mod", "def", "normalizer", ["is_subgroup"]], ["mod", "theorem", "of_div", ["is_subgroup"]], ["mod", "theorem", "subset_normalizer", ["is_subgroup"]], ["mod", "def", "trivial", ["is_subgroup"]], ["mod", "theorem", "trivial_eq_closure", ["is_subgroup"]], ["mod", "theorem", "mem_gmultiples", []], ["mod", "theorem", "mem_gpowers", []], ["mod", "theorem", "normal_subgroup_iff", ["multiplicative"]], ["mod", "theorem", "simple_group_iff", ["multiplicative"]], ["mod", "theorem", "normal_subgroup_of_comm_group", []], ["del", "theorem", "simple_add_group_of_surjective", []], ["mod", "theorem", "simple_group_of_surjective", []]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["mod", "theorem", "closure'_singleton", ["add_monoid"]], ["mod", "inductive", "in_closure", ["add_monoid"]], ["mod", "theorem", "coe_smul", ["add_submonoid"]], ["mod", "theorem", "self_mem", ["add_submonoid", "multiples"]], ["mod", "def", "multiples", ["add_submonoid"]], ["mod", "theorem", "multiples_subset", ["add_submonoid"]], ["mod", "def", "of_submonoid", ["add_submonoid"]], ["mod", "theorem", "smul_mem", ["add_submonoid"]], ["mod", "def", "to_submonoid", ["add_submonoid"]], ["mod", "structure", "add_submonoid", []], ["mod", "theorem", "is_submonoid", ["image"]], ["mod", "theorem", "multiple_subset", ["is_add_submonoid"]], ["mod", "theorem", "smul_coe", ["is_add_submonoid"]], ["mod", "theorem", "smul_mem", ["is_add_submonoid"]], ["mod", "theorem", "coe_mul", ["is_submonoid"]], ["mod", "theorem", "coe_one", ["is_submonoid"]], ["mod", "theorem", "finset_prod_mem", ["is_submonoid"]], ["mod", "theorem", "list_prod_mem", ["is_submonoid"]], ["mod", "theorem", "multiset_prod_mem", ["is_submonoid"]], ["mod", "theorem", "pow_mem", ["is_submonoid"]], ["mod", "theorem", "power_subset", ["is_submonoid"]], ["mod", "def", "closure", ["monoid"]], ["mod", "theorem", "closure_mono", ["monoid"]], ["mod", "theorem", "closure_singleton", ["monoid"]], ["mod", "theorem", "closure_subset", ["monoid"]], ["mod", "theorem", "exists_list_of_mem_closure", ["monoid"]], ["mod", "theorem", "image_closure", ["monoid"]], ["mod", "inductive", "in_closure", ["monoid"]], ["mod", "theorem", "mem_closure_union_iff", ["monoid"]], ["mod", "theorem", "subset_closure", ["monoid"]], ["mod", "theorem", "add_mem", ["multiples"]], ["mod", "theorem", "self_mem", ["multiples"]], ["mod", "theorem", "zero_mem", ["multiples"]], ["mod", "def", "multiples", []], ["mod", "theorem", "mul_mem", ["powers"]], ["mod", "theorem", "one_mem", ["powers"]], ["mod", "theorem", "self_mem", ["powers"]], ["mod", "def", "powers", []], ["mod", "def", "add_submonoid_equiv", ["submonoid"]], ["mod", "def", "of_add_submonoid", ["submonoid"]], ["mod", "def", "to_add_submonoid", ["submonoid"]], ["mod", "structure", "submonoid", []]]}]}, {"timestamp": 1581632875, "sha": "db1c5001", "message": "refactor(data/set/function): use dot notation (#1934)", "changes": [{"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "def", "eq_on", ["set"]], ["del", "theorem", "image_eq_image_of_eq_on", ["set"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "comp_inj_on", ["function", "injective"]], ["add", "theorem", "inj_on", ["function", "injective"]], ["add", "theorem", "surj_on", ["function", "surjective"]], ["add", "theorem", "comp", ["set", "bij_on"]], ["add", "theorem", "congr", ["set", "bij_on"]], ["add", "theorem", "image_eq", ["set", "bij_on"]], ["add", "theorem", "inj_on", ["set", "bij_on"]], ["add", "theorem", "inv_on_inv_fun_on", ["set", "bij_on"]], ["add", "theorem", "maps_to", ["set", "bij_on"]], ["mod", "theorem", "mk", ["set", "bij_on"]], ["add", "theorem", "surj_on", ["set", "bij_on"]], ["mod", "def", "bij_on", ["set"]], ["del", "theorem", "bij_on_comp", ["set"]], ["add", "theorem", "bij_on_empty", ["set"]], ["del", "theorem", "bij_on_of_eq_on", ["set"]], ["del", "theorem", "bij_on_of_inv_on", ["set"]], ["mod", "theorem", "bijective_iff_bij_on_univ", ["set"]], ["add", "theorem", "bij_on_iff", ["set", "eq_on"]], ["add", "theorem", "image_eq", ["set", "eq_on"]], ["add", "theorem", "inj_on_iff", ["set", "eq_on"]], ["add", "theorem", "maps_to_iff", ["set", "eq_on"]], ["add", "theorem", "mono", ["set", "eq_on"]], ["add", "theorem", "surj_on_iff", ["set", "eq_on"]], ["add", "theorem", "symm", ["set", "eq_on"]], ["add", "theorem", "trans", ["set", "eq_on"]], ["add", "def", "eq_on", ["set"]], ["add", "theorem", "eq_on_comm", ["set"]], ["mod", "theorem", "eq_on_of_left_inv_of_right_inv", ["set"]], ["add", "theorem", "eq_on_refl", ["set"]], ["del", "theorem", "image_eq_of_bij_on", ["set"]], ["del", "theorem", "image_eq_of_maps_to_of_surj_on", ["set"]], ["del", "theorem", "image_subset_of_maps_to", ["set"]], ["del", "theorem", "image_subset_of_maps_to_of_subset", ["set"]], ["add", "theorem", "bij_on_image", ["set", "inj_on"]], ["add", "theorem", "comp", ["set", "inj_on"]], ["add", "theorem", "congr", ["set", "inj_on"]], ["add", "theorem", "inv_fun_on_image", ["set", "inj_on"]], ["add", "theorem", "left_inv_on_inv_fun_on", ["set", "inj_on"]], ["add", "theorem", "mono", ["set", "inj_on"]], ["add", "theorem", "right_inv_on_of_left_inv_on", ["set", "inj_on"]], ["del", "theorem", "to_bij_on", ["set", "inj_on"]], ["mod", "def", "inj_on", ["set"]], ["del", "theorem", "inj_on_comp", ["set"]], ["del", "theorem", "inj_on_comp_of_injective_left", ["set"]], ["mod", "theorem", "inj_on_iff_injective", ["set"]], ["del", "theorem", "inj_on_of_bij_on", ["set"]], ["del", "theorem", "inj_on_of_eq_on", ["set"]], ["del", "theorem", "inj_on_of_inj_on_of_subset", ["set"]], ["del", "theorem", "inj_on_of_injective", ["set"]], ["del", "theorem", "inj_on_of_left_inv_on", ["set"]], ["mod", "theorem", "inj_on_preimage", ["set"]], ["mod", "theorem", "injective_iff_inj_on_univ", ["set"]], ["del", "theorem", "inv_fun_on_image", ["set"]], ["add", "theorem", "bij_on", ["set", "inv_on"]], ["add", "theorem", "symm", ["set", "inv_on"]], ["mod", "def", "inv_on", ["set"]], ["add", "theorem", "comp", ["set", "left_inv_on"]], ["add", "theorem", "congr_left", ["set", "left_inv_on"]], ["add", "theorem", "congr_right", ["set", "left_inv_on"]], ["add", "theorem", "eq", ["set", "left_inv_on"]], ["add", "theorem", "eq_on", ["set", "left_inv_on"]], ["add", "theorem", "inj_on", ["set", "left_inv_on"]], ["add", "theorem", "surj_on", ["set", "left_inv_on"]], ["mod", "def", "left_inv_on", ["set"]], ["del", "theorem", "left_inv_on_comp", ["set"]], ["del", "theorem", "left_inv_on_of_eq_on_left", ["set"]], ["del", "theorem", "left_inv_on_of_eq_on_right", ["set"]], ["del", "theorem", "left_inv_on_of_surj_on_right_inv_on", ["set"]], ["mod", "theorem", "maps_to'", ["set"]], ["add", "theorem", "comp", ["set", "maps_to"]], ["add", "theorem", "congr", ["set", "maps_to"]], ["add", "theorem", "image_subset", ["set", "maps_to"]], ["add", "theorem", "mono", ["set", "maps_to"]], ["mod", "def", "maps_to", ["set"]], ["del", "theorem", "maps_to_comp", ["set"]], ["add", "theorem", "maps_to_empty", ["set"]], ["mod", "theorem", "maps_to_image", ["set"]], ["del", "theorem", "maps_to_of_bij_on", ["set"]], ["del", "theorem", "maps_to_of_eq_on", ["set"]], ["add", "theorem", "maps_to_preimage", ["set"]], ["mod", "theorem", "maps_to_range", ["set"]], ["mod", "theorem", "maps_to_univ", ["set"]], ["mod", "theorem", "range_restrict", ["set"]], ["add", "theorem", "comp", ["set", "right_inv_on"]], ["add", "theorem", "congr_left", ["set", "right_inv_on"]], ["add", "theorem", "congr_right", ["set", "right_inv_on"]], ["add", "theorem", "eq", ["set", "right_inv_on"]], ["add", "theorem", "eq_on", ["set", "right_inv_on"]], ["add", "theorem", "surj_on", ["set", "right_inv_on"]], ["mod", "def", "right_inv_on", ["set"]], ["del", "theorem", "right_inv_on_comp", ["set"]], ["del", "theorem", "right_inv_on_of_eq_on_left", ["set"]], ["del", "theorem", "right_inv_on_of_eq_on_right", ["set"]], ["del", "theorem", "right_inv_on_of_inj_on_of_left_inv_on", ["set"]], ["del", "theorem", "subset_image_iff", ["set"]], ["del", "theorem", "subset_range_iff", ["set"]], ["add", "theorem", "bij_on_subset", ["set", "surj_on"]], ["add", "theorem", "comap_nonempty", ["set", "surj_on"]], ["add", "theorem", "comp", ["set", "surj_on"]], ["add", "theorem", "congr", ["set", "surj_on"]], ["add", "theorem", "image_eq_of_maps_to", ["set", "surj_on"]], ["add", "theorem", "inv_on_inv_fun_on", ["set", "surj_on"]], ["add", "theorem", "left_inv_on_of_right_inv_on", ["set", "surj_on"]], ["add", "theorem", "maps_to_inv_fun_on", ["set", "surj_on"]], ["add", "theorem", "mono", ["set", "surj_on"]], ["add", "theorem", "right_inv_on_inv_fun_on", ["set", "surj_on"]], ["mod", "def", "surj_on", ["set"]], ["del", "theorem", "surj_on_comp", ["set"]], ["add", "theorem", "surj_on_empty", ["set"]], ["add", "theorem", "surj_on_iff_exists_bij_on_subset", ["set"]], ["mod", "theorem", "surj_on_iff_surjective", ["set"]], ["del", "theorem", "surj_on_of_bij_on", ["set"]], ["del", "theorem", "surj_on_of_eq_on", ["set"]], ["del", "theorem", "surj_on_of_right_inv_on", ["set"]], ["mod", "theorem", "surjective_iff_surj_on_univ", ["set"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1581630465, "sha": "0372fb02", "message": "fix(scripts/deploy_docs.sh): header override is already unset\nBefore, the nightly and doc deploys were running in different builds.\nNow they're in the same build, so we don't need to (and can't) unset the\nvariable twice.", "changes": [{"oldPath": "scripts/deploy_docs.sh", "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1581626693, "sha": "56a52403", "message": "feat(calculus/fderiv): invariance of fderiv under linear equivs (#1977)\n* feat(calculus/fderiv): invariance of fderiv under linear equivs\n* missing material\n* coherent naming conventions\n* fix build\n* coherent naming conventions\n* yury's comments", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "comp_differentiable_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_on_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_fderiv", ["continuous_linear_equiv"]], ["add", "theorem", "comp_fderiv_within", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff'", ["continuous_linear_equiv"]], ["add", "theorem", "comp_has_fderiv_within_at_iff", ["continuous_linear_equiv"]], ["add", "theorem", "unique_diff_on_preimage_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_differentiable_on", ["differentiable"]], ["add", "theorem", "differentiable_at", ["differentiable"]], ["add", "theorem", "comp_differentiable_within_at", ["differentiable_at"]], ["add", "theorem", "differentiable_on_congr", []], ["add", "theorem", "comp_fderiv_within", ["fderiv"]], ["mod", "theorem", "fderiv_const", []], ["add", "theorem", "fderiv_const_apply", []], ["del", "theorem", "fderiv_within_const", []], ["add", "theorem", "fderiv_within_const_apply", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_prod_le_iff", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "symm_symm", ["linear_equiv"]], ["add", "theorem", "symm_symm_apply", ["linear_equiv"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "comp_continuous_iff", ["continuous_linear_equiv"]], ["add", "theorem", "comp_continuous_on_iff", ["continuous_linear_equiv"]], ["add", "theorem", "self_comp_symm", ["continuous_linear_equiv"]], ["add", "theorem", "symm_comp_self", ["continuous_linear_equiv"]], ["add", "theorem", "symm_symm", ["continuous_linear_equiv"]], ["add", "theorem", "symm_symm_apply", ["continuous_linear_equiv"]], ["add", "theorem", "comp_assoc", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_on_congr", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "comp_continuous_iff", ["homeomorph"]], ["add", "theorem", "comp_continuous_on_iff", ["homeomorph"]]]}]}, {"timestamp": 1581620591, "sha": "a79a055f", "message": "refactor(group_theory/submonoid): redefine `subtype.monoid` manually (#1981)\n* refactor(group_theory/submonoid): redefine `subtype.monoid` manually\nThis way `group.to_monoid subtype.group` is defeq `subtype.monoid group.to_monoid`.\n* Fix compile of `ring_theory/integral_closure`", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1581618388, "sha": "b7ffc6f3", "message": "fix(mergify): remove references to nightly builds", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1581599889, "sha": "aa4da84a", "message": "chore(ci): don't build with Lean nightly (#1975)\n* chore(ci): don't build with Lean nightly\n* fix condition for doc upload", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1581435196, "sha": "abd412b9", "message": "chore(scripts): update nolints (#1976)", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1581428625, "sha": "176852df", "message": "feat(tactic/lint): check if inhabited instances should be nonempty (#1971)\n* add inhabited vs nonempty linter\n* add new linter to ci\n* start updating files to pass linter\n* more linter fixes\n* fix more linter errors\n* more fixes\n* fix build\n* remove unnecessary instances\n* nicer proof\n* adjust inhabit tactic\n* improve proof\n* move instance to better place\n* generalize instance\n* fix build\n* inhabited -> nonempty\n* fix build", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "get_neg", ["list", "func"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "empty_ne_univ", ["set"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "countable_iff_exists_surjective", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_const", ["set"]], ["mod", "theorem", "Inter_inter", ["set"]], ["mod", "theorem", "Union_const", ["set"]], ["mod", "theorem", "Union_union", ["set"]], ["mod", "theorem", "diff_Union", ["set"]], ["mod", "theorem", "inter_Inter", ["set"]], ["mod", "theorem", "union_Union", ["set"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "constr_range", []]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "lmap_domain_supported", ["finsupp"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "exists_const", []], ["mod", "theorem", "forall_const", []], ["add", "theorem", "elim_to_inhabited", ["nonempty"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "prod_at_top_at_top_eq", ["filter"]], ["mod", "theorem", "prod_map_at_top_eq", ["filter"]]]}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "cauchy_seq_iff_le_tendsto_0", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "cauchy_seq_iff_tendsto_dist_at_top_0", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "cauchy_seq_iff'", ["emetric"]], ["mod", "theorem", "cauchy_seq_iff", ["emetric"]], ["mod", "theorem", "cauchy_seq_iff_nnreal", ["emetric"]], ["mod", "theorem", "tendsto_at_top", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "theorem", "cauchy_seq_iff_tendsto", []], ["mod", "theorem", "cauchy_seq_of_controlled", []], ["mod", "theorem", "cauchy_seq_iff'", ["filter", "has_basis"]], ["mod", "theorem", "cauchy_seq_iff", ["filter", "has_basis"]]]}]}, {"timestamp": 1581413141, "sha": "4e2c7e36", "message": "feat(topology/subset_properties): alternative definitions of irreducible and connected (#1970)\n* refactor(topology/*): irreducible and connected sets are nonempty\n* Fix typos\n* Fix more typos\n* Update src/topology/subset_properties.lean\nCo-Authored-By: sgouezel \n* Update src/topology/subset_properties.lean\nCo-Authored-By: sgouezel \n* Refactor 'nonempty' fields\n* Fix spacing in set-builder\n* Use dot notation\n* Write a comment on the nonempty assumption\n* Apply suggestions from code review\n* irreducible_iff statements\n* Fix build\n* Tiny improvements\n* Justify that connected spaces are nonempty\n* Add docstrings\n* Update src/topology/subset_properties.lean\nCo-Authored-By: sgouezel \n* Update subset_properties.lean", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "is_connected_iff_sUnion_disjoint_open", []], ["add", "theorem", "is_irreducible_iff_sInter", []], ["add", "theorem", "is_irreducible_iff_sUnion_closed", []], ["add", "theorem", "is_preconnected_iff_subset_of_disjoint", []], ["add", "theorem", "is_preirreducible_iff_closed_union_closed", []], ["add", "theorem", "connected_space", ["subtype"]], ["add", "theorem", "irreducible_space", ["subtype"]], ["add", "theorem", "preconnected_space", ["subtype"]], ["add", "theorem", "preirreducible_space", ["subtype"]]]}]}, {"timestamp": 1581352329, "sha": "93ba8b6d", "message": "refactor(topology/metric_space): introduce&use `edist`/`dist` bases (#1969)\n* refactor(topology/metric_space): introduce&use `edist`/`dist` bases\n* Introduce bases for `emetric_space` and `metric_space`.\n* Make some proofs use general facts about filter bases.\n* Fix some lint errors\n* Update src/topology/metric_space/emetric_space.lean\nCo-Authored-By: sgouezel \n* +2 docstrings", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "eventually_iff", ["filter", "has_basis"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "exists_delta_of_continuous", ["metric"]], ["del", "theorem", "mem_closure_iff'", ["metric"]], ["add", "theorem", "mem_closure_iff", ["metric"]], ["add", "theorem", "nhds_basis_ball", ["metric"]], ["add", "theorem", "nhds_basis_ball_inv_nat_pos", ["metric"]], ["add", "theorem", "nhds_basis_ball_inv_nat_succ", ["metric"]], ["add", "theorem", "nhds_basis_closed_ball", ["metric"]], ["del", "theorem", "nhds_eq", ["metric"]], ["add", "theorem", "nhds_within_basis_ball", ["metric"]], ["add", "theorem", "uniformity_basis_dist", ["metric"]], ["add", "theorem", "uniformity_basis_dist_inv_nat_pos", ["metric"]], ["add", "theorem", "uniformity_basis_dist_inv_nat_succ", ["metric"]], ["add", "theorem", "uniformity_basis_dist_le", ["metric"]], ["del", "theorem", "uniformity_dist'", ["metric"]], ["del", "theorem", "uniformity_dist", ["metric"]], ["add", "theorem", "uniformity_edist", ["metric"]], ["del", "theorem", "uniformity_edist", []]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["del", "theorem", "mem_closure_iff'", ["emetric"]], ["add", "theorem", "mem_closure_iff", ["emetric"]], ["mod", "theorem", "mem_nhds_iff", ["emetric"]], ["add", "theorem", "nhds_basis_eball", ["emetric"]], ["mod", "theorem", "nhds_eq", ["emetric"]], ["del", "theorem", "mem_uniformity_edist_inv_nat", []], ["add", "theorem", "uniformity_basis_edist'", []], ["add", "theorem", "uniformity_basis_edist", []], ["add", "theorem", "uniformity_basis_edist_inv_nat", []], ["add", "theorem", "uniformity_basis_edist_le'", []], ["add", "theorem", "uniformity_basis_edist_le", []], ["add", "theorem", "uniformity_basis_edist_nnreal", []], ["del", "theorem", "uniformity_edist''", []], ["del", "theorem", "uniformity_edist'", []], ["add", "theorem", "uniformity_edist", []], ["del", "theorem", "uniformity_edist_inv_nat", []], ["del", "theorem", "uniformity_edist_nnreal", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "mem_uniformity_iff", ["filter", "has_basis"]], ["add", "theorem", "uniform_continuous_iff", ["filter", "has_basis"]], ["add", "theorem", "nhds_basis_uniformity'", []], ["add", "theorem", "nhds_basis_uniformity", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "cauchy_iff'", []], ["del", "theorem", "cauchy_seq_iff_prod_map", []], ["add", "theorem", "cauchy_seq_iff_tendsto", []], ["add", "theorem", "cauchy_iff", ["filter", "has_basis"]], ["add", "theorem", "cauchy_seq_iff'", ["filter", "has_basis"]], ["add", "theorem", "cauchy_seq_iff", ["filter", "has_basis"]]]}]}, {"timestamp": 1581240812, "sha": "777f2141", "message": "refactor(data/matrix,linear_algebra): Use `matrix.mul` as default multiplication in matrix lemmas (#1959)\n* Change `has_mul.mul` to `matrix.mul` in a few `simp` lemmas\n* Standardise more lemmas for matrix multiplication\n* Generalize `to_pequiv_mul_matrix` to rectangular matrices", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "diagonal_mul_diagonal'", ["matrix"]], ["mod", "theorem", "diagonal_mul_diagonal", ["matrix"]]]}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["mod", "theorem", "to_pequiv_mul_matrix", ["pequiv"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["mod", "theorem", "det_mul", ["matrix"]], ["mod", "theorem", "det_transpose", ["matrix"]]]}]}, {"timestamp": 1581168339, "sha": "bcb63ebf", "message": "refactor(topology/*): irreducible and connected sets are nonempty (#1964)\n* refactor(topology/*): irreducible and connected sets are nonempty\n* Fix typos\n* Fix more typos\n* Update src/topology/subset_properties.lean\nCo-Authored-By: sgouezel \n* Update src/topology/subset_properties.lean\nCo-Authored-By: sgouezel \n* Refactor 'nonempty' fields\n* Fix spacing in set-builder\n* Use dot notation\n* Write a comment on the nonempty assumption\n* Apply suggestions from code review\n* Fix build\n* Tiny improvements", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "intermediate_value_univ", []], ["del", "theorem", "forall_Icc_subset", ["is_connected"]], ["del", "theorem", "intermediate_value", ["is_connected"]], ["mod", "theorem", "is_connected_Icc", []], ["del", "theorem", "is_connected_Ici", []], ["del", "theorem", "is_connected_Ico", []], ["del", "theorem", "is_connected_Iic", []], ["del", "theorem", "is_connected_Iio", []], ["del", "theorem", "is_connected_Ioc", []], ["del", "theorem", "is_connected_Ioi", []], ["mod", "theorem", "is_connected_Ioo", []], ["del", "theorem", "is_connected_iff_forall_Icc_subset", []], ["add", "theorem", "forall_Icc_subset", ["is_preconnected"]], ["add", "theorem", "intermediate_value", ["is_preconnected"]], ["add", "theorem", "is_preconnected_Ici", []], ["add", "theorem", "is_preconnected_Ico", []], ["add", "theorem", "is_preconnected_Iic", []], ["add", "theorem", "is_preconnected_Iio", []], ["add", "theorem", "is_preconnected_Ioc", []], ["add", "theorem", "is_preconnected_Ioi", []], ["add", "theorem", "is_preconnected_iff_forall_Icc_subset", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure", ["set", "nonempty"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["del", "theorem", "exists_irreducible", []], ["del", "theorem", "exists_mem_inter", []], ["add", "theorem", "exists_preirreducible", []], ["add", "theorem", "irreducible_component_property", []], ["del", "theorem", "irreducible_exists_mem_inter", []], ["mod", "theorem", "is_clopen_iff", []], ["add", "theorem", "is_preconnected", ["is_connected"]], ["add", "theorem", "nonempty", ["is_connected"]], ["mod", "theorem", "union", ["is_connected"]], ["del", "theorem", "is_connected_closed_iff", []], ["del", "theorem", "is_connected_empty", []], ["del", "theorem", "is_connected_of_forall", []], ["del", "theorem", "is_connected_of_forall_pair", []], ["del", "theorem", "is_connected_of_is_irreducible", []], ["del", "theorem", "is_connected_sUnion", []], ["add", "theorem", "closure", ["is_irreducible"]], ["add", "theorem", "image", ["is_irreducible"]], ["add", "theorem", "is_connected", ["is_irreducible"]], ["add", "theorem", "is_preirreducible", ["is_irreducible"]], ["add", "theorem", "nonempty", ["is_irreducible"]], ["del", "theorem", "is_irreducible_closure", []], ["del", "theorem", "is_irreducible_empty", []], ["add", "theorem", "closure", ["is_preconnected"]], ["add", "theorem", "image", ["is_preconnected"]], ["add", "theorem", "union", ["is_preconnected"]], ["add", "def", "is_preconnected", []], ["add", "theorem", "is_preconnected_closed_iff", []], ["add", "theorem", "is_preconnected_empty", []], ["add", "theorem", "is_preconnected_of_forall", []], ["add", "theorem", "is_preconnected_of_forall_pair", []], ["add", "theorem", "is_preconnected_sUnion", []], ["add", "theorem", "closure", ["is_preirreducible"]], ["add", "theorem", "image", ["is_preirreducible"]], ["add", "theorem", "is_preconnected", ["is_preirreducible"]], ["add", "def", "is_preirreducible", []], ["add", "theorem", "is_preirreducible_empty", []], ["add", "theorem", "nonempty_inter", []], ["add", "theorem", "nonempty_preirreducible_inter", []], ["mod", "theorem", "subset_connected_component", []]]}]}, {"timestamp": 1581158551, "sha": "2e18388b", "message": "feat(linear_algebra): The Special linear group SL(n, R) (#1960)\n* Define the special linear group\n* Make definitions independent of PR #1959\nThat PR changes `det_mul` to have another, still definitionally equal, type.\nIf the invocations to `det_mul` are independent of syntactic equality, i.e. we\nonly pass `det_mul` to `erw`, this branch should be compatible with the state\nbefore the change and after.\n* Documentation and code style improvements\n* Improve module docstring\n* Fix documentation\n`matrix.special_linear_group` is not a set but a type\nCo-Authored-By: sgouezel \n* Don't directly coerce from SL to linear maps\nNow we coerce from `matrix.special_linear_group n R` to `matrix n n R` instead\nof `general_linear_group R (n -> R)`\n* Whitespace fixes\n* Fix failing build in `src/linear_algebra/dual.lean`\n* Give an almost generic formula for `det_adjugate`\n* Move `det_eq_one_of_card_eq_zero` to the correct section\n* Replace the ad-hoc assumption of `det_adjugate_of_invertible` with `is_unit`\n* Fix linting error\nThere was an unnecessary assumption [decidable_eq α] floating around\n* Replace `special_linear_group.val` with the appropriate coercions\n* whitespace\nCorrectly indent continued line\nCo-Authored-By: sgouezel \n* Docstrings for the `det_adjugate_of_...` lemmas", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "to_fun_eq_coe", ["linear_map"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "univ_eq_singleton_of_card_one", []]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "mul_vec_one", ["matrix"]], ["add", "theorem", "smul_eq_diagonal_mul", ["matrix"]], ["add", "theorem", "smul_eq_mul_diagonal", ["matrix"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_eq_one_of_card_eq_zero", ["matrix"]], ["add", "theorem", "det_eq_zero_of_column_eq_zero", ["matrix"]], ["add", "theorem", "det_smul", ["matrix"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "to_lin_one", ["matrix"]]]}, {"oldPath": "src/linear_algebra/nonsingular_inverse.lean", "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["add", "theorem", "adjugate_eq_one_of_card_eq_one", ["matrix"]], ["add", "theorem", "adjugate_zero", ["matrix"]], ["add", "theorem", "det_adjugate_eq_one", ["matrix"]], ["add", "theorem", "det_adjugate_of_cancel", ["matrix"]], ["add", "theorem", "det_adjugate_of_is_unit", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/special_linear_group.lean", "changes": [["add", "theorem", "coe_to_GL", ["matrix", "special_linear_group"]], ["add", "theorem", "det_coe_fun", ["matrix", "special_linear_group"]], ["add", "theorem", "det_coe_matrix", ["matrix", "special_linear_group"]], ["add", "def", "embedding_GL", ["matrix", "special_linear_group"]], ["add", "theorem", "ext", ["matrix", "special_linear_group"]], ["add", "theorem", "ext_iff", ["matrix", "special_linear_group"]], ["add", "theorem", "inv_apply", ["matrix", "special_linear_group"]], ["add", "theorem", "inv_val", ["matrix", "special_linear_group"]], ["add", "theorem", "mul_apply", ["matrix", "special_linear_group"]], ["add", "theorem", "mul_val", ["matrix", "special_linear_group"]], ["add", "theorem", "one_apply", ["matrix", "special_linear_group"]], ["add", "theorem", "one_val", ["matrix", "special_linear_group"]], ["add", "def", "to_GL", ["matrix", "special_linear_group"]], ["add", "theorem", "to_GL_mul", ["matrix", "special_linear_group"]], ["add", "theorem", "to_GL_one", ["matrix", "special_linear_group"]], ["add", "def", "to_lin", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin_mul", ["matrix", "special_linear_group"]], ["add", "theorem", "to_lin_one", ["matrix", "special_linear_group"]], ["add", "def", "to_linear_equiv", ["matrix", "special_linear_group"]], ["add", "def", "special_linear_group", ["matrix"]]]}]}, {"timestamp": 1581094668, "sha": "2007d34f", "message": "feat(analysis/normed_space/multilinear): norm on continuous multilinear maps (#1956)\n* feat(analysis/normed_space/multilinear): norm on continuous multilinear maps\n* docstring\n* improved docstrings", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/multilinear.lean", "changes": [["add", "theorem", "curry_uncurry_left", ["continuous_linear_map"]], ["add", "theorem", "norm_map_tail_right_le", ["continuous_linear_map"]], ["add", "def", "uncurry_left", ["continuous_linear_map"]], ["add", "theorem", "uncurry_left_apply", ["continuous_linear_map"]], ["add", "theorem", "uncurry_left_norm", ["continuous_linear_map"]], ["add", "def", "continuous_multilinear_curry_fin0", []], ["add", "def", "continuous_multilinear_curry_fin0_aux", []], ["add", "def", "continuous_multilinear_curry_left_equiv", []], ["add", "def", "continuous_multilinear_curry_left_equiv_aux", []], ["add", "def", "continuous_multilinear_curry_right_equiv", []], ["add", "def", "continuous_multilinear_curry_right_equiv_aux", []], ["add", "theorem", "bound", ["continuous_multilinear_map"]], ["add", "theorem", "bounds_bdd_below", ["continuous_multilinear_map"]], ["add", "theorem", "bounds_nonempty", ["continuous_multilinear_map"]], ["add", "theorem", "continuous_eval", ["continuous_multilinear_map"]], ["add", "def", "curry0", ["continuous_multilinear_map"]], ["add", "theorem", "curry0_apply", ["continuous_multilinear_map"]], ["add", "theorem", "curry0_norm", ["continuous_multilinear_map"]], ["add", "theorem", "curry0_uncurry0", ["continuous_multilinear_map"]], ["add", "def", "curry_left", ["continuous_multilinear_map"]], ["add", "theorem", "curry_left_apply", ["continuous_multilinear_map"]], ["add", "theorem", "curry_left_norm", ["continuous_multilinear_map"]], ["add", "def", "curry_right", ["continuous_multilinear_map"]], ["add", "theorem", "curry_right_apply", ["continuous_multilinear_map"]], ["add", "theorem", "curry_right_norm", ["continuous_multilinear_map"]], ["add", "theorem", "curry_uncurry_right", ["continuous_multilinear_map"]], ["add", "theorem", "le_op_norm", ["continuous_multilinear_map"]], ["add", "theorem", "mk_pi_field_apply", ["continuous_multilinear_map"]], ["add", "theorem", "mk_pi_ring_apply_one_eq_self", ["continuous_multilinear_map"]], ["add", "theorem", "norm_image_sub_le_of_bound'", ["continuous_multilinear_map"]], ["add", "theorem", "norm_image_sub_le_of_bound", ["continuous_multilinear_map"]], ["add", "theorem", "norm_map_cons_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_map_tail_left_le", ["continuous_multilinear_map"]], ["add", "theorem", "norm_zero", ["continuous_multilinear_map"]], ["add", "def", "op_norm", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_add_le", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_le_bound", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_neg", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_nonneg", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_smul", ["continuous_multilinear_map"]], ["add", "theorem", "op_norm_zero_iff", ["continuous_multilinear_map"]], ["add", "theorem", "ratio_le_op_norm", ["continuous_multilinear_map"]], ["add", "def", "uncurry0", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry0_curry0", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry0_norm", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry_curry_left", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry_curry_right", ["continuous_multilinear_map"]], ["add", "def", "uncurry_right", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry_right_apply", ["continuous_multilinear_map"]], ["add", "theorem", "uncurry_right_norm", ["continuous_multilinear_map"]], ["add", "theorem", "unit_le_op_norm", ["continuous_multilinear_map"]], ["add", "theorem", "continuous_of_bound", ["multilinear_map"]], ["add", "theorem", "exists_bound_of_continuous", ["multilinear_map"]], ["add", "def", "mk_continuous", ["multilinear_map"]], ["add", "theorem", "mk_continuous_norm_le", ["multilinear_map"]], ["add", "theorem", "norm_image_sub_le_of_bound'", ["multilinear_map"]], ["add", "theorem", "norm_image_sub_le_of_bound", ["multilinear_map"]]]}]}, {"timestamp": 1581056484, "sha": "f912a6b4", "message": "feat(algebraic_geometry/prime_spectrum): first definitions (#1957)\n* Start on prime spectrum\n* Define comap betwee prime spectra; prove continuity\n* Update src/algebraic_geometry/prime_spectrum.lean\nCo-Authored-By: sgouezel \n* chore(*): rename `filter.inhabited_of_mem_sets` to `nonempty_of_mem_sets` (#1943)\nIn other names `inhabited` means that we have a `default` element.\n* refactor(linear_algebra/multilinear): cleanup of multilinear maps (#1921)\n* staging [ci skip]\n* staging\n* staging\n* cleanup norms\n* complete currying\n* docstrings\n* docstrings\n* cleanup\n* nonterminal simp\n* golf\n* missing bits for derivatives\n* sub_apply\n* cleanup\n* better docstrings\n* remove two files\n* reviewer's comments\n* use fintype\n* line too long\n* feat(ring_theory/power_series): several simp lemmas (#1945)\n* Small start on generating functions\n* Playing with Bernoulli\n* Finished sum_bernoulli\n* Some updates after PRs\n* Analogue for mv_power_series\n* Cleanup after merged PRs\n* feat(ring_theory/power_series): several simp lemmas\n* Remove file that shouldn't be there yet\n* Update src/ring_theory/power_series.lean\nCo-Authored-By: sgouezel \n* Generalise lemma to canonically_ordered_monoid\n* Update name\n* Fix build\n* feat(tactic/lint): Three new linters, update illegal_constants (#1947)\n* add three new linters\n* fix failing declarations\n* restrict and rename illegal_constants linter\n* update doc\n* update ge_or_gt test\n* update mk_nolint\n* fix error\n* Update scripts/mk_nolint.lean\nCo-Authored-By: Rob Lewis \n* Update src/meta/expr.lean\nCo-Authored-By: Rob Lewis \n* clarify unfolds_to_class\n* fix names since name is no longer protected\nalso change one declaration back to instance, since it did not cause a linter failure\n* fix errors, move notes to docstrings\n* add comments to docstring\n* update mk_all.sh\n* fix linter errors\n* feat(number_theory/bernoulli): Add definition of Bernoulli numbers (#1952)\n* Small start on generating functions\n* Playing with Bernoulli\n* Finished sum_bernoulli\n* Some updates after PRs\n* Analogue for mv_power_series\n* Cleanup after merged PRs\n* feat(number_theory/bernoulli): Add definition of Bernoulli numbers\n* Remove old file\n* Process comments\n* feat(topology/algebra/multilinear): define continuous multilinear maps (#1948)\n* feat(data/set/intervals): define intervals and prove basic properties (#1949)\n* things about intervals\n* better documentation\n* better file name\n* add segment_eq_interval\n* better proof for is_measurable_interval\n* better import and better proof\n* better proof\n* refactor(*): migrate from `≠ ∅` to `set.nonempty` (#1954)\n* refactor(*): migrate from `≠ ∅` to `set.nonempty`\nSorry for a huge PR but it's easier to do it in one go.\nBasically, I got rid of all `≠ ∅` in theorem/def types, then fixed\ncompile.\nI also removed most lemmas about `≠ ∅` from `set/basic` to make sure\nthat I didn't miss something I should change elsewhere. Should I\nrestore (some of) them?\n* Fix compile of `archive/`\n* Drop +1 unneeded argument, thanks @sgouezel.\n* Fix build\n* Update src/algebraic_geometry/prime_spectrum.lean\nCo-Authored-By: sgouezel \n* Update src/algebraic_geometry/prime_spectrum.lean\nCo-Authored-By: sgouezel \n* Change I to s, and little fixes\n* Update src/algebraic_geometry/prime_spectrum.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/algebraic_geometry/prime_spectrum.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/algebraic_geometry/prime_spectrum.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/algebraic_geometry/prime_spectrum.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Indentation\n* Update prime_spectrum.lean\n* fix build", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/prime_spectrum.lean", "changes": [["add", "theorem", "Inter_zero_locus", ["prime_spectrum"]], ["add", "def", "as_ideal", ["prime_spectrum"]], ["add", "def", "comap", ["prime_spectrum"]], ["add", "theorem", "comap_as_ideal", ["prime_spectrum"]], ["add", "theorem", "comap_comp", ["prime_spectrum"]], ["add", "theorem", "comap_continuous", ["prime_spectrum"]], ["add", "theorem", "comap_id", ["prime_spectrum"]], ["add", "theorem", "ext", ["prime_spectrum"]], ["add", "theorem", "is_closed_iff_zero_locus", ["prime_spectrum"]], ["add", "theorem", "is_open_iff", ["prime_spectrum"]], ["add", "theorem", "mem_zero_locus", ["prime_spectrum"]], ["add", "theorem", "preimage_comap_zero_locus", ["prime_spectrum"]], ["add", "theorem", "union_zero_locus", ["prime_spectrum"]], ["add", "theorem", "union_zero_locus_ideal", ["prime_spectrum"]], ["add", "def", "zero_locus", ["prime_spectrum"]], ["add", "theorem", "zero_locus_Union", ["prime_spectrum"]], ["add", "theorem", "zero_locus_empty_of_one_mem", ["prime_spectrum"]], ["add", "theorem", "zero_locus_is_closed", ["prime_spectrum"]], ["add", "theorem", "zero_locus_span", ["prime_spectrum"]], ["add", "theorem", "zero_locus_univ", ["prime_spectrum"]], ["add", "def", "prime_spectrum", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "def", "of_closed", ["topological_space"]]]}]}, {"timestamp": 1581002757, "sha": "fb160f0e", "message": "refactor(topology/continuous_on): use filter bases (#1968)", "changes": [{"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "nhds_within_basis_open", []], ["add", "theorem", "nhds_within_has_basis", []]]}]}, {"timestamp": 1580991638, "sha": "0e533d06", "message": "refactor(topology/basic): rewrite some proofs using filter bases (#1967)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "mem_closure_iff_nhds_basis", []], ["add", "theorem", "nhds_basis_opens", []], ["del", "theorem", "nhds_sets", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1580986264, "sha": "b4c2ec2e", "message": "chore(topology/metric_space/basic): simplify `tendsto_nhds` (#1966)\n* chore(topology/metric_space/basic): simplify `tendsto_nhds`\nNo reason to have an extra `∃ n ∈ f`.\n* whitespace\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1580980360, "sha": "34f9a172", "message": "feat(*): a few simple lemmas (#1965)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "not_subset_empty", ["set", "nonempty"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "supr_subtype'", ["lattice"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "nonempty_of_ne_bot", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "infi_of_continuous'", []], ["mod", "theorem", "infi_of_continuous", []], ["add", "theorem", "supr_of_continuous'", []], ["mod", "theorem", "supr_of_continuous", []]]}]}, {"timestamp": 1580935071, "sha": "8c086a68", "message": "chore(tactic/basic,default): add missing tactics (#1962)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}]}, {"timestamp": 1580924783, "sha": "8786ea6d", "message": "refactor(measure_theory/set_integral): move set integral into namespace set and add some lemmas (#1950)\n* move set integral into namespace set and add some lemmas\n* Update bochner_integration.lean\n* better theorem names\n* Update set_integral.lean\n* Update set_integral.lean", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_nonneg_of_ae", ["measure_theory"]], ["del", "theorem", "integral_nonneg_of_nonneg_ae", ["measure_theory"]], ["mod", "theorem", "integral_zero", ["measure_theory"]], ["del", "theorem", "integral_coe_eq_integral", ["measure_theory", "l1"]], ["add", "theorem", "integral_eq_integral", ["measure_theory", "l1", "simple_func"]]]}, {"oldPath": "src/measure_theory/set_integral.lean", "newPath": "src/measure_theory/set_integral.lean", "changes": [["mod", "theorem", "smul", ["integrable_on"]], ["mod", "def", "integrable_on", []], ["mod", "theorem", "integrable_on_congr_ae", []], ["mod", "theorem", "integrable_on_empty", []], ["del", "theorem", "integrable_on_of_integrable", []], ["mod", "theorem", "integral_on_congr", []], ["add", "theorem", "integral_on_non_integrable", []], ["add", "theorem", "integral_on_non_measurable", []], ["add", "theorem", "integral_on_nonneg", []], ["add", "theorem", "integral_on_nonneg_of_ae", []], ["add", "theorem", "integral_on_nonpos", []], ["add", "theorem", "integral_on_nonpos_of_ae", []], ["add", "theorem", "integral_on_undef", []], ["add", "theorem", "measurable_on_univ", ["measurable"]], ["mod", "def", "measurable_on", []], ["mod", "theorem", "measurable_on_empty", []], ["mod", "theorem", "measurable_on_singleton", []], ["del", "theorem", "measurable_on_univ", []], ["add", "theorem", "integrable_on", ["measure_theory", "integrable"]]]}]}, {"timestamp": 1580912865, "sha": "08581ccc", "message": "feat(tactic/rename): Add improved renaming tactic (#1916)\n* feat(tactic/rename): Add improved renaming tactic\nWe add a tactic `rename'` which works like `rename`, with the following\nimprovements:\n* Multiple hypotheses can be renamed at once.\n* Renaming always preserve the position of a hypothesis in the context.\n* Move private def `drop_until_inclusive` to `list.after`\n* Change `rename'` docs to rely less on knowledge of `rename`\n* Improve formatting of list.after docs", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "after", ["list"]]]}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rename.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1580908304, "sha": "6845aaa6", "message": "chore(*): bump Lean version to 3.5.1c (#1958)\n* chore(leanpkg.toml): bump lean version to 3.5.0\n* update CI to build with 3.5.0\n* update mergify\n* update contribute docs\n* update deploy_nightly.sh\n* 3.5.0 -> 3.5.1", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}, {"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1580883959, "sha": "dd8da516", "message": "refactor(*): migrate from `≠ ∅` to `set.nonempty` (#1954)\n* refactor(*): migrate from `≠ ∅` to `set.nonempty`\nSorry for a huge PR but it's easier to do it in one go.\nBasically, I got rid of all `≠ ∅` in theorem/def types, then fixed\ncompile.\nI also removed most lemmas about `≠ ∅` from `set/basic` to make sure\nthat I didn't miss something I should change elsewhere. Should I\nrestore (some of) them?\n* Fix compile of `archive/`\n* Drop +1 unneeded argument, thanks @sgouezel.", "changes": [{"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo1988_q6.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "pointwise_mul", ["set", "nonempty"]], ["del", "theorem", "pointwise_mul_ne_empty", ["set"]]]}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "unique_diff_on_convex", []]]}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["mod", "theorem", "exists_norm_eq_infi_of_complete_convex", []], ["mod", "theorem", "exists_norm_eq_infi_of_complete_subspace", []], ["mod", "theorem", "norm_eq_infi_iff_inner_eq_zero", []], ["mod", "theorem", "norm_eq_infi_iff_inner_le_zero", []]]}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_Inf", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": [["del", "theorem", "ne_empty", ["semiquot"]], ["add", "theorem", "nonempty", ["semiquot"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "coe_nonempty_iff_ne_empty", ["set"]], ["add", "theorem", "empty_not_nonempty", ["set"]], ["del", "theorem", "exists_mem_of_ne_empty", ["set"]], ["mod", "theorem", "fst_image_prod", ["set"]], ["del", "theorem", "insert_ne_empty", ["set"]], ["del", "theorem", "inter_singleton_ne_empty", ["set"]], ["del", "theorem", "ne_empty_iff_exists_mem", ["set"]], ["mod", "theorem", "ne_empty_iff_nonempty", ["set"]], ["del", "theorem", "ne_empty_of_mem", ["set"]], ["mod", "theorem", "nmem_singleton_empty", ["set"]], ["add", "theorem", "to_subtype", ["set", "nonempty"]], ["mod", "theorem", "nonempty_compl", ["set"]], ["del", "theorem", "nonempty_iff_univ_ne_empty", ["set"]], ["del", "theorem", "nonempty_of_inter_nonempty_left", ["set"]], ["del", "theorem", "nonempty_of_inter_nonempty_right", ["set"]], ["del", "theorem", "not_eq_empty_iff_exists", ["set"]], ["add", "theorem", "not_nonempty_iff_eq_empty", ["set"]], ["del", "theorem", "prod_ne_empty_iff", ["set"]], ["mod", "theorem", "range_eq_empty", ["set"]], ["del", "theorem", "range_ne_empty", ["set"]], ["del", "theorem", "range_ne_empty_iff_nonempty", ["set"]], ["add", "theorem", "range_nonempty", ["set"]], ["add", "theorem", "range_nonempty_iff_nonempty", ["set"]], ["del", "theorem", "singleton_ne_empty", ["set"]], ["mod", "theorem", "snd_image_prod", ["set"]], ["del", "theorem", "subset_ne_empty", ["set"]], ["del", "theorem", "univ_ne_empty", ["set"]], ["mod", "theorem", "univ_nonempty", ["set"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["mod", "theorem", "countable_iff_exists_surjective_to_subtype", ["set"]], ["mod", "theorem", "exists_surjective_of_countable", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "exists_maximal_wrt", ["set", "finite"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["del", "theorem", "Ici_ne_empty", ["set"]], ["del", "theorem", "Iic_ne_empty", ["set"]], ["del", "theorem", "Iio_ne_empty", ["set"]], ["del", "theorem", "Ioi_ne_empty", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": [["del", "theorem", "ne_empty_of_mem_partition", ["setoid"]], ["add", "theorem", "nonempty_of_mem_partition", ["setoid"]]]}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["mod", "theorem", "Inf_gen_nonempty1", ["measure_theory", "outer_measure"]], ["mod", "theorem", "top_apply", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["del", "theorem", "ne_empty_of_is_glb", []], ["del", "theorem", "ne_empty_of_is_lub", []], ["add", "theorem", "nonempty_of_is_glb", []], ["add", "theorem", "nonempty_of_is_lub", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cInf_insert", ["lattice"]], ["mod", "theorem", "cInf_intro", ["lattice"]], ["mod", "theorem", "cInf_le_cInf", ["lattice"]], ["mod", "theorem", "cInf_le_cSup", ["lattice"]], ["mod", "theorem", "cInf_union", ["lattice"]], ["mod", "theorem", "cInf_upper_bounds_eq_cSup", ["lattice"]], ["mod", "theorem", "cSup_insert", ["lattice"]], ["mod", "theorem", "cSup_inter_le", ["lattice"]], ["mod", "theorem", "cSup_intro'", ["lattice"]], ["mod", "theorem", "cSup_intro", ["lattice"]], ["mod", "theorem", "cSup_le", ["lattice"]], ["mod", "theorem", "cSup_le_cSup", ["lattice"]], ["mod", "theorem", "cSup_le_iff", ["lattice"]], ["mod", "theorem", "cSup_lower_bounds_eq_cInf", ["lattice"]], ["mod", "theorem", "cSup_union", ["lattice"]], ["mod", "theorem", "cinfi_const", ["lattice"]], ["mod", "theorem", "cinfi_le", ["lattice"]], ["mod", "theorem", "cinfi_le_cinfi", ["lattice"]], ["mod", "theorem", "csupr_const", ["lattice"]], ["mod", "theorem", "csupr_le", ["lattice"]], ["mod", "theorem", "csupr_le_csupr", ["lattice"]], ["mod", "theorem", "exists_lt_of_cInf_lt", ["lattice"]], ["mod", "theorem", "exists_lt_of_cinfi_lt", ["lattice"]], ["mod", "theorem", "exists_lt_of_lt_cSup", ["lattice"]], ["mod", "theorem", "exists_lt_of_lt_csupr", ["lattice"]], ["mod", "theorem", "is_glb_cInf", ["lattice"]], ["mod", "theorem", "is_lub_cSup", ["lattice"]], ["mod", "theorem", "le_cInf", ["lattice"]], ["mod", "theorem", "le_cInf_iff", ["lattice"]], ["mod", "theorem", "le_cInf_inter", ["lattice"]], ["mod", "theorem", "le_cinfi", ["lattice"]], ["mod", "theorem", "le_csupr", ["lattice"]], ["mod", "theorem", "coe_Inf", ["with_top"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "comap_ne_bot", ["filter"]], ["del", "theorem", "forall_sets_ne_empty_iff_ne_bot", ["filter"]], ["mod", "theorem", "nonempty_of_mem_sets", ["filter"]], ["add", "theorem", "principal_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "lift'_ne_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "theorem", "Liminf_principal", ["filter"]], ["mod", "theorem", "Limsup_principal", ["filter"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "mem_closure_of_is_glb", []], ["mod", "theorem", "mem_closure_of_is_lub", []], ["mod", "theorem", "mem_of_is_glb_of_is_closed", []], ["mod", "theorem", "mem_of_is_lub_of_is_closed", []], ["mod", "theorem", "nhds_principal_ne_bot_of_is_glb", []], ["mod", "theorem", "nhds_principal_ne_bot_of_is_lub", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "dense_iff_inter_open", []], ["mod", "theorem", "mem_closure_iff", []], ["mod", "theorem", "mem_closure_iff_nhds", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "Sup_add", ["ennreal"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": [["mod", "theorem", "nonempty_interior_of_Union_of_closed", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "diam_union'", ["metric"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "diam_union'", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["mod", "theorem", "Hausdorff_edist_empty", ["emetric"]], ["mod", "theorem", "Hausdorff_edist_le_ediam", ["emetric"]], ["add", "theorem", "empty_or_nonempty_of_Hausdorff_edist_ne_top", ["emetric"]], ["del", "theorem", "ne_empty_of_Hausdorff_edist_ne_top", ["emetric"]], ["add", "theorem", "nonempty_of_Hausdorff_edist_ne_top", ["emetric"]], ["mod", "theorem", "Hausdorff_dist_le_diam", ["metric"]], ["del", "theorem", "Hausdorff_edist_ne_top_of_ne_empty_of_bounded", ["metric"]], ["add", "theorem", "Hausdorff_edist_ne_top_of_nonempty_of_bounded", ["metric"]], ["mod", "theorem", "exists_dist_lt_of_inf_dist_lt", ["metric"]], ["mod", "theorem", "inf_dist_le_inf_dist_of_subset", ["metric"]], ["mod", "theorem", "inf_edist_ne_top", ["metric"]], ["mod", "theorem", "mem_closure_iff_inf_dist_zero", ["metric"]], ["mod", "theorem", "mem_iff_inf_dist_zero_of_closed", ["metric"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "def", "nonempty_compacts", ["topological_space"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1580854287, "sha": "253f75c8", "message": "feat(data/set/intervals): define intervals and prove basic properties (#1949)\n* things about intervals\n* better documentation\n* better file name\n* add segment_eq_interval\n* better proof for is_measurable_interval\n* better import and better proof\n* better proof", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "max_sub_min_eq_abs'", []], ["add", "theorem", "max_sub_min_eq_abs", []]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["add", "theorem", "segment_eq_interval", []]]}, {"oldPath": "src/data/indicator_function.lean", "newPath": "src/data/indicator_function.lean", "changes": [["add", "theorem", "indicator_apply", ["set"]], ["add", "theorem", "indicator_comp_of_zero", ["set"]], ["add", "theorem", "indicator_mul", ["set"]], ["add", "theorem", "indicator_nonneg'", ["set"]], ["add", "theorem", "indicator_nonneg", ["set"]], ["add", "theorem", "indicator_nonpos'", ["set"]], ["add", "theorem", "indicator_nonpos", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_inter_Icc_eq_singleton", ["set"]]]}, {"oldPath": "src/data/set/intervals/default.lean", "newPath": "src/data/set/intervals/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/set/intervals/unordered_interval.lean", "changes": [["add", "theorem", "Icc_subset_interval'", ["set"]], ["add", "theorem", "Icc_subset_interval", ["set"]], ["add", "theorem", "abs_sub_le_of_subinterval", ["set"]], ["add", "theorem", "abs_sub_left_of_mem_interval", ["set"]], ["add", "theorem", "abs_sub_right_of_mem_interval", ["set"]], ["add", "theorem", "bdd_below_bdd_above_iff_subset_interval", ["set"]], ["add", "def", "interval", ["set"]], ["add", "theorem", "interval_of_ge", ["set"]], ["add", "theorem", "interval_of_gt", ["set"]], ["add", "theorem", "interval_of_le", ["set"]], ["add", "theorem", "interval_of_lt", ["set"]], ["add", "theorem", "interval_of_not_ge", ["set"]], ["add", "theorem", "interval_of_not_le", ["set"]], ["add", "theorem", "interval_self", ["set"]], ["add", "theorem", "interval_subset_interval", ["set"]], ["add", "theorem", "interval_subset_interval_iff_le", ["set"]], ["add", "theorem", "interval_subset_interval_iff_mem", ["set"]], ["add", "theorem", "interval_subset_interval_left", ["set"]], ["add", "theorem", "interval_subset_interval_right", ["set"]], ["add", "theorem", "interval_swap", ["set"]], ["add", "theorem", "left_mem_interval", ["set"]], ["add", "theorem", "mem_interval_of_ge", ["set"]], ["add", "theorem", "mem_interval_of_le", ["set"]], ["add", "theorem", "nonempty_interval", ["set"]], ["add", "theorem", "right_mem_interval", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "is_measurable_interval", []]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": [["del", "theorem", "volume_Icc", ["measure_theory", "real"]], ["del", "theorem", "volume_Ico", ["measure_theory", "real"]], ["del", "theorem", "volume_Ioo", ["measure_theory", "real"]], ["del", "theorem", "volume_singleton", ["measure_theory", "real"]], ["del", "theorem", "volume_val", ["measure_theory", "real"]], ["add", "theorem", "volume_Icc", ["real"]], ["add", "theorem", "volume_Ico", ["real"]], ["add", "theorem", "volume_Ioo", ["real"]], ["add", "theorem", "volume_interval", ["real"]], ["add", "theorem", "volume_lt_top_of_bounded", ["real"]], ["add", "theorem", "volume_lt_top_of_compact", ["real"]], ["add", "theorem", "volume_singleton", ["real"]], ["add", "theorem", "volume_val", ["real"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "bdd_above_iff_subset_Iic", []], ["add", "theorem", "bdd_below_bdd_above_iff_subset_Icc", []], ["add", "theorem", "bdd_below_iff_subset_Ici", []]]}]}, {"timestamp": 1580846201, "sha": "475a669a", "message": "feat(topology/algebra/multilinear): define continuous multilinear maps (#1948)", "changes": [{"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["mod", "theorem", "map_smul", ["multilinear_map"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/multilinear.lean", "changes": [["add", "theorem", "add_apply", ["continuous_multilinear_map"]], ["add", "theorem", "cons_add", ["continuous_multilinear_map"]], ["add", "theorem", "cons_smul", ["continuous_multilinear_map"]], ["add", "theorem", "ext", ["continuous_multilinear_map"]], ["add", "theorem", "map_add", ["continuous_multilinear_map"]], ["add", "theorem", "map_add_univ", ["continuous_multilinear_map"]], ["add", "theorem", "map_coord_zero", ["continuous_multilinear_map"]], ["add", "theorem", "map_piecewise_add", ["continuous_multilinear_map"]], ["add", "theorem", "map_piecewise_smul", ["continuous_multilinear_map"]], ["add", "theorem", "map_smul", ["continuous_multilinear_map"]], ["add", "theorem", "map_smul_univ", ["continuous_multilinear_map"]], ["add", "theorem", "map_sub", ["continuous_multilinear_map"]], ["add", "theorem", "map_zero", ["continuous_multilinear_map"]], ["add", "theorem", "neg_apply", ["continuous_multilinear_map"]], ["add", "theorem", "smul_apply", ["continuous_multilinear_map"]], ["add", "theorem", "sub_apply", ["continuous_multilinear_map"]], ["add", "def", "to_continuous_linear_map", ["continuous_multilinear_map"]], ["add", "def", "to_multilinear_map_linear", ["continuous_multilinear_map"]], ["add", "theorem", "zero_apply", ["continuous_multilinear_map"]], ["add", "structure", "continuous_multilinear_map", []]]}]}, {"timestamp": 1580826741, "sha": "9dbc894f", "message": "feat(number_theory/bernoulli): Add definition of Bernoulli numbers (#1952)\n* Small start on generating functions\n* Playing with Bernoulli\n* Finished sum_bernoulli\n* Some updates after PRs\n* Analogue for mv_power_series\n* Cleanup after merged PRs\n* feat(number_theory/bernoulli): Add definition of Bernoulli numbers\n* Remove old file\n* Process comments", "changes": [{"oldPath": null, "newPath": "src/number_theory/bernoulli.lean", "changes": [["add", "def", "bernoulli", []], ["add", "theorem", "bernoulli_def'", []], ["add", "theorem", "bernoulli_def", []], ["add", "theorem", "bernoulli_four", []], ["add", "theorem", "bernoulli_one", []], ["add", "theorem", "bernoulli_three", []], ["add", "theorem", "bernoulli_two", []], ["add", "theorem", "bernoulli_zero", []], ["add", "theorem", "sum_bernoulli", []]]}]}, {"timestamp": 1580820142, "sha": "c5febb52", "message": "feat(tactic/lint): Three new linters, update illegal_constants (#1947)\n* add three new linters\n* fix failing declarations\n* restrict and rename illegal_constants linter\n* update doc\n* update ge_or_gt test\n* update mk_nolint\n* fix error\n* Update scripts/mk_nolint.lean\nCo-Authored-By: Rob Lewis \n* Update src/meta/expr.lean\nCo-Authored-By: Rob Lewis \n* clarify unfolds_to_class\n* fix names since name is no longer protected\nalso change one declaration back to instance, since it did not cause a linter failure\n* fix errors, move notes to docstrings\n* add comments to docstring\n* update mk_all.sh\n* fix linter errors", "changes": [{"oldPath": "docs/commands.md", "newPath": "docs/commands.md", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "def", "lie_subalgebra_lie_algebra", []]]}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["add", "def", "left_adjoint_preserves_colimits", ["category_theory", "adjunction"]], ["add", "def", "right_adjoint_preserves_limits", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "indexes_values", ["list"]], ["add", "def", "indexes_values_aux", ["list"]], ["add", "def", "is_nil", ["list"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": null, "newPath": "test/expr.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": [["add", "theorem", "bar", ["foo"]], ["add", "def", "incorrect_type_class_argument_test", []]]}]}, {"timestamp": 1580737926, "sha": "bfa7055d", "message": "feat(ring_theory/power_series): several simp lemmas (#1945)\n* Small start on generating functions\n* Playing with Bernoulli\n* Finished sum_bernoulli\n* Some updates after PRs\n* Analogue for mv_power_series\n* Cleanup after merged PRs\n* feat(ring_theory/power_series): several simp lemmas\n* Remove file that shouldn't be there yet\n* Update src/ring_theory/power_series.lean\nCo-Authored-By: sgouezel \n* Generalise lemma to canonically_ordered_monoid\n* Update name\n* Fix build", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "add_eq_zero_iff", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "theorem", "coeff_mul_C", ["mv_power_series"]], ["add", "theorem", "coeff_zero_mul_X", ["mv_power_series"]], ["add", "theorem", "coeff_mul_C", ["power_series"]], ["add", "theorem", "coeff_succ_mul_X", ["power_series"]], ["add", "theorem", "coeff_zero_mul_X", ["power_series"]]]}]}, {"timestamp": 1580729206, "sha": "62646673", "message": "refactor(linear_algebra/multilinear): cleanup of multilinear maps (#1921)\n* staging [ci skip]\n* staging\n* staging\n* cleanup norms\n* complete currying\n* docstrings\n* docstrings\n* cleanup\n* nonterminal simp\n* golf\n* missing bits for derivatives\n* sub_apply\n* cleanup\n* better docstrings\n* remove two files\n* reviewer's comments\n* use fintype\n* line too long", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_update_of_mem", ["finset"]], ["add", "theorem", "prod_update_of_not_mem", ["finset"]], ["add", "theorem", "sum_update_of_mem", ["finset"]]]}, {"oldPath": "src/analysis/complex/basic.lean", "newPath": "src/analysis/complex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_le_of_mem_closed_ball", []], ["add", "theorem", "norm_le_pi_norm", []], ["add", "theorem", "norm_lt_of_mem_ball", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "mk_continuous", ["linear_map"]], ["add", "theorem", "mk_continuous_apply", ["linear_map"]], ["add", "theorem", "mk_continuous_coe", ["linear_map"]], ["add", "theorem", "mk_continuous_norm_le", ["linear_map"]], ["add", "def", "mk_continuous_of_exists_bound", ["linear_map"]], ["add", "theorem", "mk_continuous_of_exists_bound_apply", ["linear_map"]], ["add", "theorem", "mk_continuous_of_exists_bound_coe", ["linear_map"]], ["del", "def", "with_bound", ["linear_map"]], ["del", "theorem", "linear_map_with_bound_apply", []], ["del", "theorem", "linear_map_with_bound_coe", []]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "update_eq_piecewise", ["finset"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "curry_uncurry_left", ["linear_map"]], ["add", "def", "uncurry_left", ["linear_map"]], ["add", "theorem", "uncurry_left_apply", ["linear_map"]], ["add", "def", "multilinear_curry_left_equiv", []], ["add", "def", "multilinear_curry_right_equiv", []], ["add", "def", "curry_left", ["multilinear_map"]], ["add", "theorem", "curry_left_apply", ["multilinear_map"]], ["add", "def", "curry_right", ["multilinear_map"]], ["add", "theorem", "curry_right_apply", ["multilinear_map"]], ["add", "theorem", "curry_uncurry_right", ["multilinear_map"]], ["del", "def", "linear_to_multilinear_equiv_multilinear", ["multilinear_map"]], ["add", "theorem", "mk_pi_ring_apply", ["multilinear_map"]], ["add", "theorem", "mk_pi_ring_apply_one_eq_self", ["multilinear_map"]], ["del", "def", "multilinear_to_linear_equiv_multilinear", ["multilinear_map"]], ["add", "theorem", "uncurry_curry_left", ["multilinear_map"]], ["add", "theorem", "uncurry_curry_right", ["multilinear_map"]], ["add", "def", "uncurry_right", ["multilinear_map"]], ["add", "theorem", "uncurry_right_apply", ["multilinear_map"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_update", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "continuous_at_iff", ["metric"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "continuous_at_of_locally_lipschitz", []]]}]}, {"timestamp": 1580723720, "sha": "59629da6", "message": "chore(*): rename `filter.inhabited_of_mem_sets` to `nonempty_of_mem_sets` (#1943)\nIn other names `inhabited` means that we have a `default` element.", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "inhabited_of_mem_sets", ["filter"]], ["add", "theorem", "nonempty_of_mem_sets", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "def", "seq", ["sequentially_complete"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1580714074, "sha": "a3421322", "message": "refactor(topology/metric_space/emetric_space): redefine `diam` (#1941)\n* feat(data/set/basic): define `set.subsingleton`\nAlso rename `nonempty.of_subset` to `nonempty.mono`\n* Add a missing lemma\n* refactor(topology/metric_space/emetric_space): redefine `diam`\n* Give a more readable definition of `emetric.diam`;\n* Add a few lemmas including diameter of a pair and of a triple of\n points;\n* Simplify some proofs;\n* Reformulate some theorems to use `∀ (x ∈ s) (y ∈ s)` instead\n of `∀ x y ∈ s` because the former plays better with existing `simp`\n lemmas.\n* Redefine `set.subsingleton` using `(x ∈ s) (y ∈ s)`, prove `metric.diam_triangle`", "changes": [{"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "add_ne_top", ["ennreal"]], ["add", "theorem", "max_zero_left", ["ennreal"]], ["add", "theorem", "max_zero_right", ["ennreal"]], ["add", "theorem", "of_real_to_real_le", ["ennreal"]], ["add", "theorem", "sup_eq_max", ["ennreal"]], ["add", "theorem", "to_real_add_le", ["ennreal"]], ["add", "theorem", "to_real_le_of_le_of_real", ["ennreal"]], ["add", "theorem", "to_real_max", ["ennreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "mono", ["set", "subsingleton"]], ["mod", "theorem", "subsingleton_empty", ["set"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "ne_top_of_le_ne_top", ["lattice"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "edist_lt_top", []], ["add", "theorem", "ediam_ne_top", ["metric", "bounded"]], ["del", "theorem", "bounded_iff_diam_ne_top", ["metric"]], ["add", "theorem", "bounded_iff_ediam_ne_top", ["metric"]], ["mod", "theorem", "diam_le_of_forall_dist_le", ["metric"]], ["add", "theorem", "diam_le_of_forall_dist_le_of_nonempty", ["metric"]], ["mod", "theorem", "diam_nonneg", ["metric"]], ["add", "theorem", "diam_pair", ["metric"]], ["add", "theorem", "diam_subsingleton", ["metric"]], ["add", "theorem", "diam_triple", ["metric"]], ["add", "theorem", "dist_le_diam_of_mem'", ["metric"]], ["add", "theorem", "ediam_le_of_forall_dist_le", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "def", "diam", ["emetric"]], ["add", "theorem", "diam_eq_zero_iff", ["emetric"]], ["add", "theorem", "diam_insert", ["emetric"]], ["add", "theorem", "diam_le_iff_forall_edist_le", ["emetric"]], ["mod", "theorem", "diam_le_of_forall_edist_le", ["emetric"]], ["add", "theorem", "diam_pair", ["emetric"]], ["add", "theorem", "diam_pos_iff", ["emetric"]], ["add", "theorem", "diam_subsingleton", ["emetric"]], ["add", "theorem", "diam_triple", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1580645911, "sha": "1843bfc9", "message": "feat(algebra/pointwise): pointwise scalar-multiplication lemmas (#1925)\n* feat(algebra/pointwise): more lemmas about scaling sets\n- rename `smul_set` to `scale_set` for disambiguation\n- define `scale_set_action`, which subsumes `one_smul_set`\n- additional lemmas lemmas\n* fix(analysis/convex): refactor proofs for `scale_set`\n* feat(algebra/pointwise): re-organise file\n- subsume `pointwise_mul_action`\n* feat(algebra/pointwise): remove `pointwise_mul_action`\n- subsumed by `smul_set_action` with left-regular action.", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "mem_inv_smul_set_iff", []], ["add", "theorem", "mem_smul_set_iff_inv_smul_mem", []], ["mod", "theorem", "mem_smul_set", ["set"]], ["del", "theorem", "one_smul_set", ["set"]], ["del", "def", "pointwise_mul_action", ["set"]], ["add", "theorem", "smul_mem_smul_set", ["set"]], ["add", "def", "smul_set_action", ["set"]], ["add", "theorem", "smul_set_empty", ["set"]], ["mod", "theorem", "smul_set_eq_image", ["set"]], ["add", "theorem", "smul_set_mono", ["set"]], ["add", "theorem", "smul_set_union", ["set"]]]}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/convex/topology.lean", "newPath": "src/analysis/convex/topology.lean", "changes": []}]}, {"timestamp": 1580640589, "sha": "58899d43", "message": "feat(data/set/basic): define `set.subsingleton` (#1939)\n* feat(data/set/basic): define `set.subsingleton`\nAlso rename `nonempty.of_subset` to `nonempty.mono`\n* Add a missing lemma", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "bex_insert_iff", ["set"]], ["add", "theorem", "eq_empty_or_nonempty", ["set"]], ["add", "theorem", "image_pair", ["set"]], ["add", "theorem", "image", ["set", "nonempty"]], ["add", "theorem", "mono", ["set", "nonempty"]], ["add", "theorem", "of_image", ["set", "nonempty"]], ["del", "theorem", "of_ssubset'", ["set", "nonempty"]], ["del", "theorem", "of_subset", ["set", "nonempty"]], ["del", "theorem", "nonempty_image", ["set"]], ["add", "theorem", "nonempty_image_iff", ["set"]], ["add", "theorem", "nonempty_of_ssubset'", ["set"]], ["add", "theorem", "subset_diff_union", ["set"]], ["del", "theorem", "subset_insert_diff", ["set"]], ["add", "theorem", "eq_empty_or_singleton", ["set", "subsingleton"]], ["add", "theorem", "eq_singleton_of_mem", ["set", "subsingleton"]], ["add", "theorem", "image", ["set", "subsingleton"]], ["add", "theorem", "subsingleton_empty", ["set"]], ["add", "theorem", "subsingleton_singleton", ["set"]]]}, {"oldPath": "src/order/filter/bases.lean", "newPath": "src/order/filter/bases.lean", "changes": []}]}, {"timestamp": 1580605936, "sha": "bacd4da5", "message": "chore(data/subtype): fix `∀` vs `Π` (#1940)", "changes": [{"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "def", "restrict", ["subtype"]], ["mod", "theorem", "restrict_apply", ["subtype"]]]}]}, {"timestamp": 1580600410, "sha": "11b94970", "message": "feat(data/fintype): range_prod_eq_univ_prod (#1937)\n* feat(algebra/big_operators): range_prod_eq_univ_prod\n* fix build, part 1\n* fix build, part 2\n* fix build, part 3\n* Fix build, part 4", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "range_prod_eq_univ_prod", ["finset"]]]}]}, {"timestamp": 1580580945, "sha": "6e6e6da6", "message": "feat(data/nat/basic): two identities for `choose` (#1936)\n* feat(data/nat/basic): two identities for `choose`\n* fix build", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "choose_mul_succ_eq", ["nat"]], ["add", "theorem", "choose_succ_self_right", ["nat"]]]}]}, {"timestamp": 1580574373, "sha": "a500c24c", "message": "Update units.lean (#1938)", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "coe_mk_of_mul_eq_one", ["units"]]]}]}, {"timestamp": 1580554784, "sha": "50bbb8df", "message": "fix(data/nat/basic): make arguments to `choose_succ_right_eq` explicit (#1935)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "choose_succ_right_eq", ["nat"]]]}]}, {"timestamp": 1580490476, "sha": "5ce0c0a2", "message": "feat(linear_algebra/matrix): Add proof that trace AB = trace BA, for matrices. (#1913)\n* feat(linear_algebra/matrix): trace AB = trace BA\n* Remove now-redundant matrix.smul_sum\nIn a striking coincidence,\n https://github.com/leanprover-community/mathlib/pull/1910\nwas merged almost immediately before\n https://github.com/leanprover-community/mathlib/pull/1883\nthus rendering matrix.smul_sum redundant.\n* Make arguments explicit for matrix.trace, matrix.diag\n* Tidy up whitespace\n* Remove now-redundant type ascriptions\n* Update src/linear_algebra/matrix.lean\nCo-Authored-By: Johan Commelin \n* Feedback from code review\n* Generalize diag_transpose, trace_transpose.\nWith apologies to the CI for triggering another build :-/\n* Explicit arguments trace, diag defs but not lemmas", "changes": [{"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "def", "diag", ["matrix"]], ["add", "theorem", "diag_transpose", ["matrix"]], ["mod", "def", "trace", ["matrix"]], ["add", "theorem", "trace_mul_comm", ["matrix"]], ["add", "theorem", "trace_transpose", ["matrix"]], ["add", "theorem", "trace_transpose_mul", ["matrix"]]]}]}, {"timestamp": 1580480036, "sha": "ddba2aea", "message": "chore(scripts/nolints): regenerate", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1580472676, "sha": "a8ba81b3", "message": "feat(analysis/convex): define convex hull (#1915)\n* feat(analysis/convex): define convex hull\nfixes #1851\n* Fix compile\n* Drop an unused argument\n* Split line\n* Rename some `_iff`s, drop others\n* Mention `std_simplex` in the docs\n* More docs\n* Rename `α` to `ι`, other small fixes\n* Use `range` instead of `f '' univ`\n* More docs", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_sum_elim", ["finset"]]]}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/convex/basic.lean", "newPath": "src/analysis/convex/basic.lean", "changes": [["mod", "theorem", "add", ["convex"]], ["mod", "theorem", "affinity", ["convex"]], ["mod", "theorem", "center_mass_mem", ["convex"]], ["del", "theorem", "closure", ["convex"]], ["add", "theorem", "convex_hull_eq", ["convex"]], ["mod", "theorem", "inter", ["convex"]], ["del", "theorem", "interior", ["convex"]], ["mod", "theorem", "is_linear_image", ["convex"]], ["mod", "theorem", "is_linear_preimage", ["convex"]], ["mod", "theorem", "linear_image", ["convex"]], ["mod", "theorem", "linear_preimage", ["convex"]], ["mod", "theorem", "neg", ["convex"]], ["mod", "theorem", "neg_preimage", ["convex"]], ["mod", "theorem", "prod", ["convex"]], ["add", "theorem", "segment_subset", ["convex"]], ["mod", "theorem", "smul", ["convex"]], ["mod", "theorem", "smul_preimage", ["convex"]], ["mod", "theorem", "sub", ["convex"]], ["mod", "theorem", "sum_mem", ["convex"]], ["mod", "theorem", "translate", ["convex"]], ["mod", "def", "convex", []], ["mod", "theorem", "convex_Inter", []], ["del", "theorem", "convex_ball", []], ["del", "theorem", "convex_closed_ball", []], ["add", "theorem", "convex_convex_hull", []], ["mod", "theorem", "convex_empty", []], ["mod", "theorem", "convex_halfspace_ge", []], ["mod", "theorem", "convex_halfspace_gt", []], ["mod", "theorem", "convex_halfspace_le", []], ["mod", "theorem", "convex_halfspace_lt", []], ["add", "def", "convex_hull", []], ["add", "theorem", "convex_hull_basis_eq_std_simplex", []], ["add", "theorem", "convex_hull_eq", []], ["add", "theorem", "convex_hull_min", []], ["add", "theorem", "convex_hull_mono", []], ["mod", "theorem", "convex_hyperplane", []], ["del", "theorem", "convex_iff:", []], ["add", "theorem", "convex_iff_pointwise_add_subset:", []], ["add", "theorem", "convex_iff_segment_subset", []], ["del", "theorem", "convex_iff₂:", []], ["del", "theorem", "convex_iff₃:", []], ["mod", "theorem", "add", ["convex_on"]], ["mod", "theorem", "convex_epigraph", ["convex_on"]], ["mod", "theorem", "convex_le", ["convex_on"]], ["mod", "theorem", "convex_lt", ["convex_on"]], ["add", "theorem", "exists_ge_of_center_mass", ["convex_on"]], ["add", "theorem", "exists_ge_of_mem_convex_hull", ["convex_on"]], ["del", "theorem", "le_on_interval", ["convex_on"]], ["add", "theorem", "le_on_segment'", ["convex_on"]], ["add", "theorem", "le_on_segment", ["convex_on"]], ["mod", "theorem", "map_center_mass_le", ["convex_on"]], ["mod", "theorem", "map_sum_le", ["convex_on"]], ["mod", "theorem", "smul", ["convex_on"]], ["mod", "theorem", "subset", ["convex_on"]], ["mod", "def", "convex_on", []], ["del", "theorem", "convex_on_dist", []], ["del", "theorem", "convex_on_iff", []], ["mod", "theorem", "convex_on_iff_convex_epigraph", []], ["mod", "theorem", "convex_on_real_of_slope_mono_adjacent", []], ["mod", "theorem", "convex_real_iff", []], ["mod", "theorem", "convex_sInter", []], ["mod", "theorem", "convex_segment", []], ["del", "theorem", "convex_segment_iff", []], ["mod", "theorem", "convex_singleton", []], ["add", "theorem", "convex_std_simplex", []], ["mod", "theorem", "convex_univ", []], ["mod", "theorem", "center_mass_empty", ["finset"]], ["add", "theorem", "center_mass_eq_of_sum_1", ["finset"]], ["add", "theorem", "center_mass_filter_ne_zero", ["finset"]], ["mod", "theorem", "center_mass_insert", ["finset"]], ["add", "theorem", "center_mass_ite_eq", ["finset"]], ["add", "theorem", "center_mass_mem_convex_hull", ["finset"]], ["mod", "theorem", "center_mass_pair", ["finset"]], ["add", "theorem", "center_mass_segment'", ["finset"]], ["add", "theorem", "center_mass_segment", ["finset"]], ["mod", "theorem", "center_mass_singleton", ["finset"]], ["add", "theorem", "center_mass_smul", ["finset"]], ["add", "theorem", "center_mass_subset", ["finset"]], ["add", "theorem", "convex_hull_image", ["is_linear_map"]], ["add", "theorem", "image_convex_hull", ["is_linear_map"]], ["add", "theorem", "ite_eq_mem_std_simplex", []], ["mod", "theorem", "left_mem_segment", []], ["add", "theorem", "convex_hull_image", ["linear_map"]], ["add", "theorem", "image_convex_hull", ["linear_map"]], ["mod", "theorem", "convex_on_of_lt", ["linear_order"]], ["add", "theorem", "mem_Icc_of_mem_std_simplex", []], ["del", "theorem", "mem_segment_iff'", []], ["del", "theorem", "mem_segment_iff", []], ["add", "theorem", "mem_segment_translate", []], ["mod", "theorem", "right_mem_segment", []], ["mod", "def", "segment", []], ["mod", "theorem", "segment_eq_Icc'", []], ["add", "theorem", "segment_eq_image'", []], ["add", "theorem", "segment_eq_image", []], ["del", "theorem", "segment_eq_image_Icc_zero_one'", []], ["del", "theorem", "segment_eq_image_Icc_zero_one", []], ["add", "theorem", "segment_eq_image₂", []], ["add", "theorem", "segment_same", []], ["mod", "theorem", "segment_symm", []], ["del", "theorem", "segment_translate", []], ["mod", "theorem", "segment_translate_image", []], ["mod", "theorem", "segment_translate_preimage", []], ["add", "theorem", "convex_hull_eq", ["set", "finite"]], ["add", "theorem", "convex_hull_eq_image", ["set", "finite"]], ["add", "def", "std_simplex", []], ["add", "theorem", "std_simplex_eq_inter", []], ["mod", "theorem", "convex", ["submodule"]], ["add", "theorem", "subset_convex_hull", []], ["mod", "theorem", "convex", ["subspace"]]]}, {"oldPath": null, "newPath": "src/analysis/convex/topology.lean", "changes": [["add", "theorem", "bounded_convex_hull", []], ["add", "theorem", "bounded_std_simplex", []], ["add", "theorem", "compact_std_simplex", []], ["add", "theorem", "closure", ["convex"]], ["add", "theorem", "interior", ["convex"]], ["add", "theorem", "convex_ball", []], ["add", "theorem", "convex_closed_ball", []], ["add", "theorem", "convex_hull_diam", []], ["add", "theorem", "convex_hull_ediam", []], ["add", "theorem", "convex_hull_exists_dist_ge2", []], ["add", "theorem", "convex_hull_exists_dist_ge", []], ["add", "theorem", "convex_on_dist", []], ["add", "theorem", "is_closed_std_simplex", []], ["add", "theorem", "compact_convex_hull", ["set", "finite"]], ["add", "theorem", "is_closed_convex_hull", ["set", "finite"]], ["add", "theorem", "std_simplex_subset_closed_ball", []]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["mod", "theorem", "continuous_of_finite_dimensional", ["linear_map"]], ["mod", "def", "to_continuous_linear_map", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "filter_mem_eq_inter", ["finset"]], ["add", "theorem", "union_inter_cancel_left", ["finset"]], ["add", "theorem", "union_inter_cancel_right", ["finset"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "div_one", ["nnreal"]], ["add", "theorem", "div_self", ["nnreal"]]]}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "ite_smul", []], ["add", "theorem", "smul_ite", []]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1580398103, "sha": "cae9cc97", "message": "chore(ci): remove unused olean-rs setup from build (#1932)", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1580410160, "sha": "80f5bd54", "message": "feat(ci): build and push html documentation (#1927)\n* feat(ci): build and push html doc generation\n* fix(scripts/deploy_docs): change from temporary doc repo\n* chore(ci): re-enable check for deployment\n* fix git add\n* Update scripts/deploy_docs.sh\nCo-Authored-By: Gabriel Ebner \n* Update .github/workflows/build.yml\nCo-Authored-By: Gabriel Ebner \n* Update scripts/deploy_docs.sh\nCo-Authored-By: Gabriel Ebner \n* Update scripts/deploy_docs.sh\nCo-Authored-By: Gabriel Ebner \n* remove chmod line\n* revert additional check for testing purposes\n* is this the error?\nTry a test build before I get to the office\n* rmeove _test\n* reapply author attribution change\n* revert change for testing\n* missing --\n* revert email and name config", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": null, "newPath": "scripts/deploy_docs.sh", "changes": []}]}, {"timestamp": 1580405096, "sha": "4c2d6787", "message": "fix(data/set/finite): finite.fintype is a def (#1931)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}]}, {"timestamp": 1580397385, "sha": "b7e5f75f", "message": "fix(tactic/scc): detect Props (#1930)\n* fix(tactic/scc): detect Props\n* test(test/tactics): add test", "changes": [{"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1580391666, "sha": "1bd23bf1", "message": "feat(tactic/use): apply exists_prop after use (#1882)\n* feat(tactic/use): apply exists_prop after use\n* change implementation", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1580382806, "sha": "dcbc719b", "message": "fix(tactic/squeeze): compatibility with `simp [<-...]` (#1923)\n* Add polyfills to `squeeze_simp` which should ensure compatibility with Lean 3.4 and 3.5\n* Use `decode_simp_arg_list` so `squeeze_simp` doesn't have to pattern-match\n(Except of course for the polyfill `has_to_tactic_format simp_arg_type` instance...)\n* Reword comment for `erase_simp_args`", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1580372449, "sha": "9bc01784", "message": "fix(tactic/finish): fix one classical leak, document another (#1929)\n* fix(tactic/finish): fix one classical leak, document another\n* fix(src/tactic): deprecate intuitionistic versions in docstrings. Closes #1927.", "changes": [{"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}]}, {"timestamp": 1580342961, "sha": "868333b9", "message": "feat(data/W): show finitely branching W types are encodable (#1817)\n* feat(data/equiv,data/fintype): an encodable fintype is equiv to a fin\n* feat(data/W): finitely branching W types are encodable\n* feat(archive/examples/prop_encodable): show a type of propositional formulas is encodable\n* fix(data/W): remove unused type class argument\n* fix(data/equiv): add two docstrings\n* fix(*): multiple fixes from code review", "changes": [{"oldPath": null, "newPath": "archive/examples/prop_encodable.lean", "changes": [["add", "def", "mk_fn0", []], ["add", "def", "mk_fn1", []], ["add", "def", "mk_fn2", []], ["add", "inductive", "prop_form", []]]}, {"oldPath": null, "newPath": "src/data/W.lean", "changes": [["add", "def", "depth", ["W"]], ["add", "theorem", "depth_lt_depth_mk", ["W"]], ["add", "theorem", "depth_pos", ["W"]], ["add", "inductive", "W", []]]}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": [["add", "def", "encode'", ["encodable"]]]}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": [["add", "def", "fintype_equiv_fin", ["encodable"]], ["add", "theorem", "length_sorted_univ", ["encodable"]], ["add", "theorem", "mem_sorted_univ", ["encodable"]], ["add", "def", "sorted_univ", ["encodable"]], ["add", "theorem", "sorted_univ_nodup", ["encodable"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "def", "equiv_fin_of_forall_mem_list", ["fintype"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}]}, {"timestamp": 1580322993, "sha": "4ac87ab5", "message": "chore(category_theory): use the new @[ext] attribute on structures (#1663)\n* chore(category_theory): use the new @[ext] attribute on structures\n* fixes\n* unnecessary repeated exts", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["del", "theorem", "ext", ["category_theory", "comma_morphism"]], ["mod", "structure", "comma_morphism", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["del", "theorem", "ext", ["category_theory", "limits", "cocone_morphism"]], ["mod", "structure", "cocone_morphism", ["category_theory", "limits"]], ["del", "theorem", "ext", ["category_theory", "limits", "cone_morphism"]], ["mod", "structure", "cone_morphism", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["del", "theorem", "ext", ["category_theory", "monad", "algebra", "hom"]], ["mod", "structure", "hom", ["category_theory", "monad", "algebra"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["del", "theorem", "ext", ["category_theory", "nat_trans"]], ["mod", "structure", "nat_trans", ["category_theory"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1580317212, "sha": "4aa3eee4", "message": "chore(*): add inhabited instances (#1898)\n* chore(*): add inhabited instances\n* Fix linting errors.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": [["add", "def", "of_integer", ["continued_fraction"]], ["add", "def", "of_integer", ["generalized_continued_fraction"]], ["add", "def", "of_integer", ["simple_continued_fraction"]]]}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/group/free_monoid.lean", "newPath": "src/algebra/group/free_monoid.lean", "changes": [["del", "theorem", "add_def", ["free_add_monoid"]], ["del", "theorem", "zero_def", ["free_add_monoid"]], ["del", "def", "free_add_monoid", []], ["mod", "theorem", "mul_def", ["free_monoid"]], ["mod", "theorem", "one_def", ["free_monoid"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "structure", "core", ["normed_group"]]]}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/category/Rel.lean", "newPath": "src/category_theory/category/Rel.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/data/dlist/instances.lean", "newPath": "src/data/dlist/instances.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/lazy_list2.lean", "newPath": "src/data/lazy_list2.lean", "changes": [["del", "def", "mk", ["lazy_list", "thunk"]], ["add", "def", "mk", ["thunk"]]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["add", "theorem", "ext_iff", ["alist"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/pnat/xgcd.lean", "newPath": "src/data/pnat/xgcd.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": []}, {"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/monoid_localization.lean", "newPath": "src/group_theory/monoid_localization.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/set_theory/game.lean", "newPath": "src/set_theory/game.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": []}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["add", "def", "const", ["arity"]], ["add", "theorem", "equiv_const", ["pSet", "arity"]]]}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/derive_inhabited.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_ees.lean", "newPath": "src/tactic/omega/find_ees.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/basic.lean", "newPath": "src/tactic/rewrite_all/basic.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}, {"oldPath": "src/tactic/ring_exp.lean", "newPath": "src/tactic/ring_exp.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": [["mod", "inductive", "arrow", ["tactic", "tfae"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": [["mod", "def", "Q", ["compare_reals"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1580247149, "sha": "b3683120", "message": "fix(ci): set GITHUB_TOKEN environment variable for gothub (#1920)", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1580241861, "sha": "99962ad7", "message": "fix(ci): unshallow repo before pushing nightly tags (#1919)", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1580237601, "sha": "a948e313", "message": "chore(analysis/convex): move to `analysis/convex/basic` (#1918)", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}]}, {"timestamp": 1580236074, "sha": "e36d7ecc", "message": "fix(ci): work around github hack", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1580229402, "sha": "8e0d47ad", "message": "fix(ci): try again to fix authentication", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1580220568, "sha": "75743acb", "message": "fix(scripts/deploy_nightly.sh): try to fix CI (#1917)", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1580212159, "sha": "cafd1937", "message": "chore(*): use filter.eventually (#1897)\n* chore(*): use filter.eventually\n* Update src/measure_theory/integration.lean\nCo-Authored-By: Yury G. Kudryashov \n* Fix closeds.complete_space.\n* Fix tendsto_integral_of_dominated_convergence\n* Fix tendsto_exp_at_top\n* Fix exists_norm_eq_infi_of_complete_convex\n* Use obtain.\n* Use filter.eventually_of_forall", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["mod", "theorem", "is_O_zero_right_iff", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_congr_of_mem_nhds", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "fderiv_congr_of_mem_nhds", []]]}, {"oldPath": "src/analysis/calculus/local_extr.lean", "newPath": "src/analysis/calculus/local_extr.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": "src/geometry/manifold/mfderiv.lean", "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["mod", "theorem", "mfderiv_congr_of_mem_nhds", []]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "integral_congr", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "def", "all_ae", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "exists_forall_of_at_top", ["filter", "eventually"]], ["add", "theorem", "eventually_Sup", ["filter"]], ["add", "theorem", "eventually_at_top", ["filter"]], ["add", "theorem", "eventually_bot", ["filter"]], ["add", "theorem", "eventually_principal", ["filter"]], ["add", "theorem", "eventually_sup", ["filter"]], ["add", "theorem", "eventually_supr", ["filter"]], ["add", "theorem", "eventually_top", ["filter"]], ["add", "theorem", "forall_exists_of_at_top", ["filter", "frequently"]], ["add", "theorem", "frequently_Sup", ["filter"]], ["add", "theorem", "frequently_at_top", ["filter"]], ["add", "theorem", "frequently_bot", ["filter"]], ["add", "theorem", "frequently_false", ["filter"]], ["add", "theorem", "frequently_principal", ["filter"]], ["add", "theorem", "frequently_sup", ["filter"]], ["add", "theorem", "frequently_supr", ["filter"]], ["add", "theorem", "frequently_top", ["filter"]], ["add", "theorem", "frequently_true_iff_ne_bot", ["filter"]], ["add", "theorem", "not_eventually", ["filter"]], ["add", "theorem", "not_frequently", ["filter"]], ["mod", "theorem", "tendsto_principal", ["filter"]]]}, {"oldPath": "src/order/filter/extr.lean", "newPath": "src/order/filter/extr.lean", "changes": [["mod", "def", "is_max_filter", []], ["mod", "def", "is_min_filter", []]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "theorem", "of_seq_fun", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_fun₂", ["filter", "filter_product"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "def", "Liminf", ["filter"]], ["mod", "theorem", "Liminf_eq_supr_Inf", ["filter"]], ["mod", "def", "Limsup", ["filter"]], ["mod", "theorem", "Limsup_eq_infi_Sup", ["filter"]], ["mod", "def", "is_bounded", ["filter"]], ["mod", "theorem", "mk", ["filter", "is_cobounded"]], ["mod", "def", "is_cobounded", ["filter"]], ["mod", "theorem", "liminf_eq", ["filter"]], ["mod", "theorem", "liminf_eq_supr_infi", ["filter"]], ["mod", "theorem", "limsup_eq", ["filter"]], ["mod", "theorem", "limsup_eq_infi_supr", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "ge_mem_nhds", []], ["mod", "theorem", "gt_mem_nhds", []], ["mod", "theorem", "le_mem_nhds", []], ["mod", "theorem", "lt_mem_nhds", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1580158219, "sha": "bba84730", "message": "feat(linear_algebra): Matrix inverses for square nonsingular matrices (#1816)\n* Prove that some matrices have inverses\n* Finish the proof: show that the determinant is 0 if a column is repeated\n* Show that nonsingular_inv is also a right inverse\n* Cleanup and code movement\n* Small lemmata on transpose\n* WIP: some work on inverse matrices\n* Code cleanup and documentation\n* More cleanup and documentation\n* Generalize det_zero_of_column_eq to remove the linear order assumption\n* Fix linting issues.\n* Unneeded import can be removed\n* A little bit more cleanup\n* Generalize nonsing_inv to any ring with inverse\n* Improve comments for `nonsingular_inverse`\n* Remove the less general `det_zero_of_column_eq_of_char_ne_two` proof\n* Rename `cramer_map_val` -> `cramer_map_def`\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* whitespace\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* whitespace: indent tactic proofs\n* More renaming `cramer_map_val` -> `cramer_map_def`\n* `swap_mul_self_mul` can be a `simp` lemma\n* Make parameter σ to `swap_mul_eq_iff` implicit\n* Update usage of `function.update_same` and `function.update_noteq`\n* Replace `det_permute` with `det_permutation`\nAlthough the statement now gives the determinant of a permutation matrix,\nthe proof is easier if we write it as a permuted identity matrix.\nThus the proof is basically the same, except a different line showing that the\nentries are the same.\n* Re-introduce `matrix.det_permute` (now based on `matrix.det_permutation`)\n* Delete `cramer_at` and clean up the proofs depending on it\n* Replace `cramer_map` with `cramer` after defining `cramer`\n* Apply suggestions from code review\nCo-Authored-By: sgouezel \n* Clean up imports\n* Formatting: move } to previous lines\n* Move assumptions of `det_zero_of_repeated_column` from variable to argument\n* whitespace\nInsert space between `finset.filter` and the filter condition.\nCo-Authored-By: sgouezel \n* Improve docstrings\n* Make argument to `prod_cancels_of_partition_cancels` explicit\n* Rename `replace_column` and `replace_row` to `update_column` and `update_row`\n* Replace `update_column_eq` with `update_column_self` + rewriting step\n* whitespace\nNewlines between all lemmas\n* whitespace\nNewline before 'begin'\n* Fix conflicts with latest mathlib\n* Remove unnecessary explicitification of arguments", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_cancels_of_partition_cancels", ["finset"]], ["add", "theorem", "prod_ite_eq'", ["finset"]], ["mod", "theorem", "prod_ite_eq", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "filter_eq'", ["finset"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "transpose_one", ["matrix"]], ["add", "theorem", "transpose_smul", ["matrix"]], ["add", "theorem", "transpose_val", ["matrix"]]]}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": [["add", "theorem", "equiv_to_pequiv_to_matrix", ["pequiv"]], ["add", "theorem", "to_pequiv_mul_matrix", ["pequiv"]]]}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["add", "theorem", "to_pequiv_apply", ["equiv"]]]}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "swap_mul_eq_iff", ["equiv", "perm"]], ["add", "theorem", "swap_mul_self_mul", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": [["add", "theorem", "det_permutation", ["matrix"]], ["add", "theorem", "det_permute", ["matrix"]], ["add", "theorem", "det_transpose", ["matrix"]], ["add", "theorem", "det_zero_of_column_eq", ["matrix"]], ["add", "def", "mod_swap", ["matrix"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/nonsingular_inverse.lean", "changes": [["add", "def", "adjugate", ["matrix"]], ["add", "theorem", "adjugate_def", ["matrix"]], ["add", "theorem", "adjugate_mul", ["matrix"]], ["add", "theorem", "adjugate_transpose", ["matrix"]], ["add", "theorem", "adjugate_val", ["matrix"]], ["add", "def", "cramer", ["matrix"]], ["add", "theorem", "cramer_apply", ["matrix"]], ["add", "theorem", "cramer_column_self", ["matrix"]], ["add", "theorem", "cramer_is_linear", ["matrix"]], ["add", "def", "cramer_map", ["matrix"]], ["add", "theorem", "cramer_map_is_linear", ["matrix"]], ["add", "theorem", "mul_adjugate", ["matrix"]], ["add", "theorem", "mul_adjugate_val", ["matrix"]], ["add", "theorem", "mul_nonsing_inv", ["matrix"]], ["add", "def", "nonsing_inv", ["matrix"]], ["add", "theorem", "nonsing_inv_mul", ["matrix"]], ["add", "theorem", "nonsing_inv_val", ["matrix"]], ["add", "theorem", "sum_cramer", ["matrix"]], ["add", "theorem", "sum_cramer_apply", ["matrix"]], ["add", "theorem", "transpose_nonsing_inv", ["matrix"]], ["add", "def", "update_column", ["matrix"]], ["add", "theorem", "update_column_ne", ["matrix"]], ["add", "theorem", "update_column_self", ["matrix"]], ["add", "theorem", "update_column_transpose", ["matrix"]], ["add", "theorem", "update_column_val", ["matrix"]], ["add", "def", "update_row", ["matrix"]], ["add", "theorem", "update_row_ne", ["matrix"]], ["add", "theorem", "update_row_self", ["matrix"]], ["add", "theorem", "update_row_val", ["matrix"]]]}]}, {"timestamp": 1580142542, "sha": "5f015913", "message": "fix(.github/workflows/build): set pipefail (#1911)\nWithout `pipefail`, the shell command `false | cat` terminates\nsuccessfully.", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1580136725, "sha": "898cd708", "message": "fix(archive/cubing_a_cube): roof broken by #1903 (#1912)", "changes": [{"oldPath": "archive/cubing_a_cube.lean", "newPath": "archive/cubing_a_cube.lean", "changes": [["mod", "theorem", "nonempty_bcubes", []]]}]}, {"timestamp": 1580072892, "sha": "497e692b", "message": "feat(linear_algebra/matrix): define the trace of a square matrix (#1883)\n* feat(linear_algebra/matrix): define the trace of a square matrix\n* Move ring carrier to correct universe\n* Add lemma trace_one, and define diag as linear map\n* Define diag and trace solely as linear functions\n* Diag and trace for module-valued matrices\n* Fix cyclic import\n* Rename matrix.mul_sum' --> matrix.smul_sum\nCo-Authored-By: Johan Commelin \n* Trigger CI", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "def", "diag", ["matrix"]], ["add", "theorem", "diag_one", ["matrix"]], ["add", "def", "trace", ["matrix"]], ["add", "theorem", "trace_one", ["matrix"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1580067426, "sha": "587b312e", "message": "refactor(order/filter/basic): redefine `filter.pure` (#1889)\n* refactor(order/filter/basic): redefine `filter.pure`\nNew definition has `s ∈ pure a` definitionally equal to `a ∈ s`.\n* Update src/order/filter/basic.lean\nCo-Authored-By: Gabriel Ebner \n* Minor fixes suggested by @gebner\n* Fix compile\n* Update src/order/filter/basic.lean", "changes": [{"oldPath": "src/measure_theory/indicator_function.lean", "newPath": "src/measure_theory/indicator_function.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "join_pure", ["filter"]], ["add", "theorem", "le_pure_iff", ["filter"]], ["del", "theorem", "mem_pure", ["filter"]], ["del", "theorem", "mem_pure_iff", ["filter"]], ["mod", "theorem", "mem_pure_sets", ["filter"]], ["add", "theorem", "pure_bind", ["filter"]], ["del", "theorem", "pure_def", ["filter"]], ["add", "theorem", "pure_eq_principal", ["filter"]], ["add", "theorem", "pure_inj", ["filter"]], ["add", "theorem", "pure_sets", ["filter"]], ["mod", "theorem", "tendsto_const_pure", ["filter"]], ["add", "theorem", "tendsto_pure", ["filter"]]]}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1580054088, "sha": "ce2e7a85", "message": "feat(linear_algebra/multilinear): image of sum (#1908)\n* staging\n* fix build\n* linting\n* staging\n* docstring", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_piecewise", ["finset"]], ["add", "theorem", "prod_powerset_insert", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "empty_sdiff", ["finset"]], ["add", "theorem", "insert_sdiff_of_mem", ["finset"]], ["add", "theorem", "insert_sdiff_of_not_mem", ["finset"]], ["mod", "theorem", "lt_wf", ["finset"]], ["add", "theorem", "ne_insert_of_not_mem", ["finset"]], ["add", "theorem", "not_mem_of_mem_powerset_of_not_mem", ["finset"]], ["add", "def", "piecewise", ["finset"]], ["add", "theorem", "piecewise_coe", ["finset"]], ["add", "theorem", "piecewise_empty", ["finset"]], ["add", "theorem", "piecewise_eq_of_mem", ["finset"]], ["add", "theorem", "piecewise_eq_of_not_mem", ["finset"]], ["add", "theorem", "piecewise_insert", ["finset"]], ["add", "theorem", "piecewise_insert_of_ne", ["finset"]], ["add", "theorem", "piecewise_insert_self", ["finset"]], ["add", "theorem", "powerset_empty", ["finset"]], ["add", "theorem", "powerset_insert", ["finset"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "piecewise_univ", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "insert_diff", ["set"]], ["add", "theorem", "insert_diff_of_mem", ["set"]], ["add", "theorem", "insert_diff_of_not_mem", ["set"]], ["add", "theorem", "ne_insert_of_not_mem", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "piecewise_empty", ["set"]], ["add", "theorem", "piecewise_eq_of_mem", ["set"]], ["add", "theorem", "piecewise_eq_of_not_mem", ["set"]], ["add", "theorem", "piecewise_insert", ["set"]], ["add", "theorem", "piecewise_insert_of_ne", ["set"]], ["add", "theorem", "piecewise_insert_self", ["set"]], ["add", "theorem", "piecewise_univ", ["set"]]]}, {"oldPath": "src/linear_algebra/multilinear.lean", "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "map_add_univ", ["multilinear_map"]], ["add", "theorem", "map_piecewise_add", ["multilinear_map"]], ["add", "theorem", "map_piecewise_smul", ["multilinear_map"]], ["add", "theorem", "map_smul_univ", ["multilinear_map"]], ["add", "theorem", "map_sub", ["multilinear_map"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "def", "piecewise", ["set"]]]}]}, {"timestamp": 1580046569, "sha": "ab155ef9", "message": "refactor(*): refactor `sum_smul`/`smul_sum` (#1910)\n* refactor(*): refactor `sum_smul`/`smul_sum`\nAPI changes:\n* Define both versions for `list, `multiset`, and `finset`;\n* new `finset.smul_sum` is the old `finset.smul_sum` or `_root_.sum_smul.symm``\n* new `finset.sum_smul` is the old `finset.smul_sum'`\n* new `smul_smul` doesn't need a `Type` argument\n* some lemmas are generalized to a `semimodule` or a `distrib_mul_action`\n* Fix compile", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "sum_smul", ["finset"]], ["add", "theorem", "sum_smul", ["list"]], ["add", "theorem", "sum_smul", ["multiset"]], ["add", "theorem", "smul_def", ["nat"]], ["del", "theorem", "smul_smul", []]]}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "smul_sum", ["finset"]], ["add", "theorem", "smul_sum", ["list"]], ["add", "theorem", "smul_sum", ["multiset"]], ["add", "theorem", "smul_smul", []]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "smul_sum'", ["finset"]], ["del", "theorem", "smul_sum", ["finset"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}]}, {"timestamp": 1580011089, "sha": "2297d200", "message": "feat(tactic/clear): add clear' tactic (#1899)\n* feat(tactic/clear): add clear' tactic\nWe add an improved version of the `clear` tactic. When clearing multiple\nhypotheses, `clear` can fail even though all hypotheses could be\ncleared. This happens when the hypotheses depend on each other and are\ngiven in the wrong order:\n```lean\nexample : ∀ {α : Type} {β : α → Type} (a : α) (b : β a), unit :=\n begin\n intros α β a b,\n clear a b, -- fails\n exact ()\n end\n```\nWhen `clear` tries to clear `a`, `b`, which depends on `a`, is still in the\ncontext, so the operation fails. We give a tactic `clear'` which\nrecognises this and clears `b` before `a`.\n* refactor(tactic/clear): better implementation of clear'\nWe refactor `clear'`, replacing the old implementation with one that is\nmore concise and should be faster. The new implementation strategy also\ngives us a new variant of `clear`, `clear_dependent`, almost for free.\n`clear_dependent` works like `clear'`, but in addition to the given\nhypotheses, it also clears any other hypotheses which depend on them.\n* style(test/tactics, docs/tactics): less indentation\n* test(test/tactics): better tests for clear' and clear_dependent\nWe make the tests for `clear'` and `clear_dependent` more meaningful:\nThey now permit less illegal behaviours.\n* refactor(tactic/clear): simplify error message formatting", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/clear.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1580001141, "sha": "9decec2b", "message": "feat(*): some simple lemmas about sets and finite sets (#1903)\n* feat(*): some simple lemmas about sets and finite sets\n* More lemmas, simplify proofs\n* Introduce `finsup.nonempty` and use it.\n* Update src/algebra/big_operators.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Revert \"Update src/algebra/big_operators.lean\"\nThis reverts commit 17c89a808545203dc5a80a4f11df4f62e949df8d. It\nbreaks compile if we rewrite right to left.\n* simp, to_additive\n* Add a missing docstring", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "exists_le_of_sum_le", ["finset"]], ["mod", "theorem", "exists_ne_one_of_prod_ne_one", ["finset"]], ["add", "theorem", "nonempty_of_prod_ne_one", ["finset"]], ["mod", "theorem", "prod_Ico_id_eq_fact", ["finset"]], ["add", "theorem", "prod_filter_ne_one", ["finset"]], ["add", "theorem", "sum_lt_sum", ["finset"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "exists_card_smul_ge_sum", ["finset"]], ["add", "theorem", "exists_card_smul_le_sum", ["finset"]], ["mod", "theorem", "sum_const'", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "card_pos", ["finset"]], ["add", "theorem", "coe_nonempty", ["finset"]], ["add", "theorem", "eq_empty_or_nonempty", ["finset"]], ["del", "theorem", "exists_mem_iff_ne_empty", ["finset"]], ["del", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["mod", "theorem", "exists_min", ["finset"]], ["mod", "theorem", "image_const", ["finset"]], ["mod", "def", "max'", ["finset"]], ["del", "theorem", "max_of_ne_empty", ["finset"]], ["add", "theorem", "max_of_nonempty", ["finset"]], ["mod", "def", "min'", ["finset"]], ["del", "theorem", "min_of_ne_empty", ["finset"]], ["add", "theorem", "min_of_nonempty", ["finset"]], ["add", "theorem", "bex", ["finset", "nonempty"]], ["add", "theorem", "image", ["finset", "nonempty"]], ["add", "theorem", "mono", ["finset", "nonempty"]], ["mod", "theorem", "nonempty_iff_ne_empty", ["finset"]], ["add", "theorem", "nonempty_of_ne_empty", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "def", "split_support", ["finsupp"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "prod_univ_succ", ["fin"]], ["add", "theorem", "prod_univ_zero", ["fin"]], ["add", "theorem", "sum_univ_succ", ["fin"]], ["add", "theorem", "univ_succ", ["fin"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "exists_min", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_subset_Inter2", ["set"]], ["add", "theorem", "Inter_subset_Inter", ["set"]], ["add", "theorem", "Inter_subset_of_subset", ["set"]], ["mod", "theorem", "Union_subset_iff", ["set"]], ["mod", "theorem", "mem_Inter_of_mem", ["set"]], ["mod", "theorem", "subset_Inter", ["set"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1579995934, "sha": "d3e5621d", "message": "feat(data/real/ereal): add `ereal` := [-oo,oo] (#1703)\n* feat(data/real/ereal): add `ereal` := [-oo,oo]\n* some updates\n* some cleanup in ereal\n* move pattern attribute\n* works\n* more docstring\n* don't understand why this file was broken\n* more tidyup\n* deducing complete lattice from type class inference\n* another neg theorem\n* adding some module doc\n* tinkering\n* deriving addition", "changes": [{"oldPath": null, "newPath": "src/data/real/ereal.lean", "changes": [["add", "theorem", "le_neg_of_le_neg", ["ereal"]], ["add", "theorem", "neg_eq_iff_neg_eq", ["ereal"]], ["add", "theorem", "neg_inj", ["ereal"]], ["add", "def", "ereal", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1579987110, "sha": "d4aa088e", "message": "fix(scripts/deploy_nightly): fill in blank env vars (#1909)\n* fix(scripts/deploy_nightly): fill in blank env vars\n* fix: LEAN_VERSION=\"lean-3.4.2\"", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1579960916, "sha": "70772422", "message": "doc (analysis/normed_space/operator_norm): cleanup (#1906)\n* doc (analysis/normed_space/operator_norm): cleanup\n* typo", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1579955477, "sha": "8c9a15eb", "message": "feat(topology/instances/ennreal): continuity of multiplication by const (#1905)\n* feat(topology/instances/ennreal): continuity of multiplication by const\n* Fix compile", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}]}, {"timestamp": 1579949477, "sha": "20f153a5", "message": "fix(scripts/deploy_nightly): token is now just the PAT, need to add user (#1907)", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1579941724, "sha": "3bbf8eb8", "message": "feat(data/real/nnreal): a few lemmas about subtraction (#1904)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "sub_eq_zero", ["nnreal"]], ["add", "theorem", "sub_le_self", ["nnreal"]], ["add", "theorem", "sub_self", ["nnreal"]], ["add", "theorem", "sub_sub_cancel_of_le", ["nnreal"]], ["add", "theorem", "sub_zero", ["nnreal"]]]}]}, {"timestamp": 1579908883, "sha": "3b9ee8e8", "message": "doc(geometry/manifold): fix markdown (#1901)\n* doc(geometry/manifold): fix markdown\n* Update src/geometry/manifold/manifold.lean\n* Update src/geometry/manifold/manifold.lean\n* Update src/geometry/manifold/manifold.lean\n* Update src/geometry/manifold/manifold.lean", "changes": [{"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}]}, {"timestamp": 1579903005, "sha": "d0756952", "message": "fix(build): typo in deploy_nightly script name (#1902)", "changes": [{"oldPath": ".github/workflows/build.yml", "newPath": ".github/workflows/build.yml", "changes": []}]}, {"timestamp": 1579896118, "sha": "2db02b80", "message": "feat(.github): switch to github actions for ci (#1893)", "changes": [{"oldPath": null, "newPath": ".github/workflows/build.yml", "changes": []}, {"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}, {"oldPath": ".travis.yml", "newPath": null, "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "purge_olean.sh", "newPath": null, "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}, {"oldPath": "travis_long.sh", "newPath": null, "changes": []}]}, {"timestamp": 1579867632, "sha": "601d5b13", "message": "feat(tactic/simp_rw): add `simp_rw` tactic, a mix of `simp` and `rw` (#1900)\n* add `simp_rw` tactic that is a mix of `simp` and `rw`\n* Style fixes\n* Module documentation for the file `tactic/simp_rw.lean`\n* Apply suggestions to improve documentation of `simp_rw`\n* Documentation and tests for `simp_rw [...] at ...`", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/simp_rw.lean", "changes": []}, {"oldPath": null, "newPath": "test/simp_rw.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1579856969, "sha": "69099f00", "message": "feat(order/filter/bases): define `filter.has_basis` (#1896)\n* feat(*): assorted simple lemmas, simplify some proofs\n* feat(order/filter/bases): define `filter.has_basis`\n* Add `@[nolint]`\n* +1 lemma, +1 simplified proof\n* Remove whitespaces\nCo-Authored-By: sgouezel \n* Ref. note nolint_ge", "changes": [{"oldPath": null, "newPath": "src/order/filter/bases.lean", "changes": [["add", "theorem", "at_top_basis'", ["filter"]], ["add", "theorem", "at_top_basis", ["filter"]], ["add", "theorem", "basis_sets", ["filter"]], ["add", "theorem", "comap", ["filter", "has_basis"]], ["add", "theorem", "eq_binfi", ["filter", "has_basis"]], ["add", "theorem", "eq_infi", ["filter", "has_basis"]], ["add", "theorem", "forall_nonempty_iff_ne_bot", ["filter", "has_basis"]], ["add", "theorem", "ge_iff", ["filter", "has_basis"]], ["add", "theorem", "inf", ["filter", "has_basis"]], ["add", "theorem", "inf_principal", ["filter", "has_basis"]], ["add", "theorem", "le_basis_iff", ["filter", "has_basis"]], ["add", "theorem", "le_iff", ["filter", "has_basis"]], ["add", "theorem", "map", ["filter", "has_basis"]], ["add", "theorem", "mem_iff", ["filter", "has_basis"]], ["add", "theorem", "mem_of_mem", ["filter", "has_basis"]], ["add", "theorem", "mem_of_superset", ["filter", "has_basis"]], ["add", "theorem", "prod", ["filter", "has_basis"]], ["add", "theorem", "prod_self", ["filter", "has_basis"]], ["add", "theorem", "tendsto_iff", ["filter", "has_basis"]], ["add", "theorem", "tendsto_left_iff", ["filter", "has_basis"]], ["add", "theorem", "tendsto_right_iff", ["filter", "has_basis"]], ["add", "theorem", "has_basis_binfi_principal", ["filter"]], ["add", "theorem", "has_basis_infi_principal", ["filter"]], ["add", "theorem", "basis_both", ["filter", "tendsto"]], ["add", "theorem", "basis_left", ["filter", "tendsto"]], ["add", "theorem", "basis_right", ["filter", "tendsto"]]]}]}, {"timestamp": 1579826827, "sha": "aad853b5", "message": "docs(data/mv_polynomial): add module docstring [ci skip] (#1892)\n* adding docstring\n* fix markdown\nCo-Authored-By: Gabriel Ebner \n* fix markdown\nCo-Authored-By: Gabriel Ebner \n* variables have type sigma\nCo-Authored-By: Gabriel Ebner \n* don't tell the reader about the interface\nCo-Authored-By: Gabriel Ebner \n* consistent conventions for monomial\nCo-Authored-By: Gabriel Ebner \n* variables are terms of type sigma\nCo-Authored-By: Gabriel Ebner \n* Update src/data/mv_polynomial.lean\nCo-Authored-By: Gabriel Ebner \n* Update src/data/mv_polynomial.lean\nCo-Authored-By: Gabriel Ebner \n* version 2\n* one last tinker\n* removing $ signs\n* next attempt\n* Update src/data/mv_polynomial.lean\n* Update src/data/mv_polynomial.lean\n* Update src/data/mv_polynomial.lean", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}]}, {"timestamp": 1579723827, "sha": "b686bc24", "message": "feat(algebra/lie_algebra): define Lie subalgebras, morphisms, modules, submodules, quotients (#1835)\n* feat(algebra/lie_algebra): define Lie subalgebras, morphisms, modules, submodules, quotients\n* Code review: colons at end of line\n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Catch up after GH commits from code review\n* Remove accidentally-included '#lint'\n* Rename: lie_subalgebra.bracket --> lie_subalgebra.lie_mem\n* Lie ideals are subalgebras\n* Add missing doc string\n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Allow quotients of lie_modules by lie_submodules (part 1)\nThe missing piece is the construction of a lie_module structure on\nthe quotient by a lie_submodule, i.e.,:\n`instance lie_quotient_lie_module : lie_module R L N.quotient := ...`\nI will add this in due course.\n* Code review: minor fixes\n* New lie_module approach based on add_action, linear_action\n* Remove add_action by merging into linear_action.\nI would prefer to keep add_action, and especially like to keep the feature\nthat linear_action extends has_scalar, but unfortunately this is not\npossible with the current typeclass resolution algorithm since we should\nnever extend a class with fewer carrier types.\n* Add missing doc string\n* Simplify Lie algebra adjoing action definitions\n* whitespace tweaks\n* Remove redundant explicit type\n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Catch up after rename bracket --> map_lie in morphism\n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/linear_action.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "lie_act", []], ["mod", "def", "Ad", ["lie_algebra"]], ["del", "def", "bil_lie", ["lie_algebra"]], ["add", "theorem", "endo_algebra_bracket", ["lie_algebra"]], ["add", "theorem", "map_lie", ["lie_algebra"]], ["add", "structure", "morphism", ["lie_algebra"]], ["del", "def", "of_endomorphism_algebra", ["lie_algebra"]], ["add", "def", "lie_ideal", []], ["add", "def", "lie_ideal_subalgebra", []], ["add", "theorem", "lie_mem_left", []], ["add", "theorem", "lie_mem_right", []], ["add", "def", "of_endo_morphism", ["lie_module"]], ["add", "structure", "lie_subalgebra", []], ["add", "theorem", "is_quotient_mk", ["lie_submodule", "quotient"]], ["add", "def", "mk", ["lie_submodule", "quotient"]], ["add", "theorem", "mk_bracket", ["lie_submodule", "quotient"]], ["add", "def", "quotient", ["lie_submodule"]], ["add", "structure", "lie_submodule", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/linear_action.lean", "changes": [["add", "def", "of_endo_map", ["linear_action"]], ["add", "def", "to_endo_map", ["linear_action"]], ["add", "theorem", "linear_action_act_add", []], ["add", "theorem", "linear_action_act_smul", []], ["add", "theorem", "linear_action_add_act", []], ["add", "theorem", "linear_action_smul_act", []], ["add", "theorem", "linear_action_zero", []], ["add", "theorem", "zero_linear_action", []]]}]}, {"timestamp": 1579654654, "sha": "96ee2a69", "message": "feat(order/filter/basic): prove `@cofinite ℕ = at_top` (#1888)\n* feat(order/filter/basic): prove `@cofinite ℕ = at_top`\nAlso generalize `not_injective_(nat/int)_fintype`, and use `[infinite\nα]` instead of `set.infinite (@univ α)` as an argument.\n* Update src/data/equiv/basic.lean\nCo-Authored-By: Gabriel Ebner \n* Drop a duplicate definition, thanks @ChrisHughes24", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "not_injective_infinite_fintype", []], ["add", "theorem", "not_surjective_fintype_infinite", []]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "infinite_univ", ["set"]], ["add", "theorem", "infinite_univ_iff", ["set"]], ["del", "theorem", "infinite_univ_nat", ["set"]], ["del", "theorem", "not_injective_int_fintype", ["set"]], ["del", "theorem", "not_injective_nat_fintype", ["set"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "cofinite_ne_bot", ["filter"]], ["mod", "theorem", "compl_mem_hyperfilter_of_finite", ["filter"]], ["add", "theorem", "frequently_cofinite_iff_infinite", ["filter"]], ["mod", "theorem", "hyperfilter_le_cofinite", ["filter"]], ["mod", "theorem", "is_ultrafilter_hyperfilter", ["filter"]], ["add", "theorem", "mem_cofinite", ["filter"]], ["mod", "theorem", "mem_hyperfilter_of_finite_compl", ["filter"]], ["mod", "theorem", "nmem_hyperfilter_of_finite", ["filter"]], ["add", "theorem", "cofinite_eq_at_top", ["nat"]], ["add", "theorem", "infinite_iff_frequently_cofinite", ["set"]]]}]}, {"timestamp": 1579642144, "sha": "aa6cc06f", "message": "feat(measure_theory/set_integral): integrals over subsets (#1875)\n* feat(measure_theory/set_integral): integral on a set\n* mismached variables\n* move if_preimage\n* Update src/measure_theory/l1_space.lean\nCo-Authored-By: Yury G. Kudryashov \n* Small fixes\n* Put indicator_function into data folder\n* Use antimono as names\n* Change name to antimono\n* Fix everything\n* Use binder notation for integrals\n* delete an extra space\n* Update set_integral.lean\n* adjust implicit and explicit variables\n* measurable_on_singleton\n* prove integral_on_Union\n* Update indicator_function.lean\n* Update set_integral.lean\n* lint\n* Update bochner_integration.lean\n* reviewer's comment\n* use Yury's proof", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "bUnion_insert", ["finset"]], ["add", "theorem", "bUnion_singleton", ["finset"]], ["add", "theorem", "bUnion_union", ["finset"]], ["add", "theorem", "supr_union", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/indicator_function.lean", "changes": [["add", "def", "indicator", ["set"]], ["add", "theorem", "indicator_add", ["set"]], ["add", "theorem", "indicator_compl", ["set"]], ["add", "theorem", "indicator_congr", ["set"]], ["add", "theorem", "indicator_empty", ["set"]], ["add", "theorem", "indicator_finset_bUnion", ["set"]], ["add", "theorem", "indicator_finset_sum", ["set"]], ["add", "theorem", "indicator_indicator", ["set"]], ["add", "theorem", "indicator_le_indicator", ["set"]], ["add", "theorem", "indicator_le_indicator_of_subset", ["set"]], ["add", "theorem", "indicator_neg", ["set"]], ["add", "theorem", "indicator_of_mem", ["set"]], ["add", "theorem", "indicator_of_not_mem", ["set"]], ["add", "theorem", "indicator_preimage", ["set"]], ["add", "theorem", "indicator_smul", ["set"]], ["add", "theorem", "indicator_sub", ["set"]], ["add", "theorem", "indicator_union_of_disjoint", ["set"]], ["add", "theorem", "indicator_union_of_not_mem_inter", ["set"]], ["add", "theorem", "indicator_univ", ["set"]], ["add", "theorem", "indicator_zero", ["set"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "if_preimage", ["set"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_div", ["measure_theory"]], ["add", "theorem", "integral_finset_sum", ["measure_theory"]], ["add", "theorem", "integral_le_integral", ["measure_theory"]], ["add", "theorem", "integral_le_integral_ae", ["measure_theory"]], ["del", "theorem", "integral_le_integral_of_le_ae", ["measure_theory"]], ["add", "theorem", "integral_mul_left", ["measure_theory"]], ["add", "theorem", "integral_mul_right", ["measure_theory"]], ["mod", "theorem", "integral_neg", ["measure_theory"]], ["mod", "theorem", "integral_non_integrable", ["measure_theory"]], ["mod", "theorem", "integral_non_measurable", ["measure_theory"]], ["mod", "theorem", "integral_nonneg_of_nonneg_ae", ["measure_theory"]], ["mod", "theorem", "integral_nonpos_of_nonpos_ae", ["measure_theory"]], ["mod", "theorem", "integral_smul", ["measure_theory"]], ["mod", "theorem", "integral_undef", ["measure_theory"]], ["mod", "theorem", "integral_zero", ["measure_theory"]], ["mod", "theorem", "of_simple_func_zero", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "norm_integral_le_integral_norm", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "is_measurable_Icc", []], ["add", "theorem", "is_measurable_Ici", []], ["mod", "theorem", "is_measurable_Ico", []], ["add", "theorem", "is_measurable_Iic", []], ["add", "theorem", "is_measurable_Ioc", []], ["add", "theorem", "is_measurable_Ioi", []]]}, {"oldPath": null, "newPath": "src/measure_theory/indicator_function.lean", "changes": [["add", "theorem", "indicator_congr_ae", []], ["add", "theorem", "indicator_congr_of_set", []], ["add", "theorem", "indicator_le_indicator_ae", []], ["add", "theorem", "indicator_norm_le_norm_self", []], ["add", "theorem", "indicator_union_ae", []], ["add", "theorem", "norm_indicator_eq_indicator_norm", []], ["add", "theorem", "norm_indicator_le_norm_self", []], ["add", "theorem", "norm_indicator_le_of_subset", []], ["add", "theorem", "tendsto_indicator_bUnion_finset", []], ["add", "theorem", "tendsto_indicator_of_antimono", []], ["add", "theorem", "tendsto_indicator_of_monotone", []]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "add", ["measure_theory", "integrable"]], ["mod", "theorem", "neg", ["measure_theory", "integrable"]], ["mod", "theorem", "smul", ["measure_theory", "integrable"]], ["mod", "theorem", "sub", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_congr_ae", ["measure_theory"]], ["add", "theorem", "integrable_finset_sum", ["measure_theory"]], ["del", "theorem", "integrable_iff_of_ae_eq", ["measure_theory"]], ["mod", "theorem", "integrable_neg_iff", ["measure_theory"]], ["add", "theorem", "integrable_of_le", ["measure_theory"]], ["mod", "theorem", "integrable_smul_iff", ["measure_theory"]], ["mod", "theorem", "integrable_zero", ["measure_theory"]], ["mod", "theorem", "of_fun_zero", ["measure_theory", "l1"]]]}, {"oldPath": null, "newPath": "src/measure_theory/set_integral.lean", "changes": [["add", "theorem", "add", ["integrable_on"]], ["add", "theorem", "divide", ["integrable_on"]], ["add", "theorem", "mul_left", ["integrable_on"]], ["add", "theorem", "mul_right", ["integrable_on"]], ["add", "theorem", "neg", ["integrable_on"]], ["add", "theorem", "smul", ["integrable_on"]], ["add", "theorem", "sub", ["integrable_on"]], ["add", "theorem", "subset", ["integrable_on"]], ["add", "theorem", "union", ["integrable_on"]], ["add", "def", "integrable_on", []], ["add", "theorem", "integrable_on_congr", []], ["add", "theorem", "integrable_on_congr_ae", []], ["add", "theorem", "integrable_on_empty", []], ["add", "theorem", "integrable_on_norm_iff", []], ["add", "theorem", "integrable_on_of_integrable", []], ["add", "theorem", "integral_on_Union", []], ["add", "theorem", "integral_on_add", []], ["add", "theorem", "integral_on_congr", []], ["add", "theorem", "integral_on_congr_of_ae_eq", []], ["add", "theorem", "integral_on_congr_of_set", []], ["add", "theorem", "integral_on_div", []], ["add", "theorem", "integral_on_le_integral_on", []], ["add", "theorem", "integral_on_le_integral_on_ae", []], ["add", "theorem", "integral_on_mul_left", []], ["add", "theorem", "integral_on_mul_right", []], ["add", "theorem", "integral_on_neg", []], ["add", "theorem", "integral_on_smul", []], ["add", "theorem", "integral_on_sub", []], ["add", "theorem", "integral_on_union", []], ["add", "theorem", "integral_on_union_ae", []], ["add", "theorem", "integral_on_zero", []], ["add", "theorem", "inter_preimage", ["is_measurable"]], ["add", "theorem", "measurable_on", ["measurable"]], ["add", "theorem", "subset", ["measurable_on"]], ["add", "theorem", "union", ["measurable_on"]], ["add", "def", "measurable_on", []], ["add", "theorem", "measurable_on_empty", []], ["add", "theorem", "measurable_on_singleton", []], ["add", "theorem", "measurable_on_univ", []], ["add", "theorem", "tendsto_integral_on_of_antimono", []], ["add", "theorem", "tendsto_integral_on_of_monotone", []]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "has_countable_basis_at_top_finset_nat", ["filter"]]]}]}, {"timestamp": 1579633108, "sha": "217b5e72", "message": "refactor(algebra/char_zero): use `function.injective` (#1894)\nNo need to require `↔` in the definition.", "changes": [{"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["mod", "theorem", "cast_eq_zero", ["nat"]], ["mod", "theorem", "cast_injective", ["nat"]], ["mod", "theorem", "cast_ne_zero", ["nat"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_nat_le_coe_nat", ["ennreal"]], ["mod", "theorem", "coe_nat_lt_coe_nat", ["ennreal"]], ["add", "theorem", "coe_nat_mono", ["ennreal"]]]}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": []}]}, {"timestamp": 1579600618, "sha": "f3835fab", "message": "feat(*): assorted simple lemmas, simplify some proofs (#1895)\n* feat(*): assorted simple lemmas, simplify some proofs\n* +1 lemma, +1 simplified proof", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_lt_of_real_iff_of_nonneg", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "of_real_lt_of_real_iff_of_nonneg", ["nnreal"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_singleton_nonempty", ["set"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "nonempty_Iio", ["set"]], ["add", "theorem", "nonempty_Ioi", ["set"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "mono_comp", ["directed"]]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "dense_coe", ["with_top"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "forall_sets_nonempty_iff_ne_bot", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1579335369, "sha": "d32c7977", "message": "feat(data/bool): coe_bool_iff (#1891)", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "coe_bool_iff", ["bool"]]]}]}, {"timestamp": 1579324813, "sha": "d548d92e", "message": "chore(ring_theory/polynomial): remove decidable_eq assumptions (#1890)", "changes": [{"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["mod", "theorem", "is_noetherian_ring_mv_polynomial_of_fintype", []]]}]}, {"timestamp": 1579286769, "sha": "c8ae79d0", "message": "feat(measure_theory/bochner_integration): dominated convergence theorem for filters (#1884)\n* Dominated convergence theorem for filters\n* Update bases.lean\n* Update bochner_integration.lean\n* reviewer's comments", "changes": [{"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "tendsto_integral_filter_of_dominated_convergence", ["measure_theory"]], ["mod", "theorem", "tendsto_integral_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "tendsto_lintegral_filter_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "tendsto_iff_seq_tendsto", ["filter", "has_countable_basis"]], ["add", "theorem", "tendsto_of_seq_tendsto", ["filter", "has_countable_basis"]]]}]}, {"timestamp": 1579230121, "sha": "9ac26cb6", "message": "feat(geometry/manifold/mfderiv): derivative of functions between smooth manifolds (#1872)\n* feat(geometry/manifold/mfderiv): derivative of functions between smooth manifolds\n* Update src/geometry/manifold/mfderiv.lean\nCo-Authored-By: Yury G. Kudryashov \n* more details in docstrings [ci skip]\n* fix docstrings [ci skip]\n* reviewer's comments", "changes": [{"oldPath": "src/geometry/manifold/basic_smooth_bundle.lean", "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": []}, {"oldPath": null, "newPath": "src/geometry/manifold/mfderiv.lean", "changes": [["add", "def", "bundle_mfderiv", []], ["add", "theorem", "bundle_mfderiv_chart_inv_fun", []], ["add", "theorem", "bundle_mfderiv_chart_to_fun", []], ["add", "theorem", "bundle_mfderiv_comp", []], ["add", "theorem", "bundle_mfderiv_comp_at", []], ["add", "theorem", "bundle_mfderiv_proj", []], ["add", "theorem", "bundle_mfderiv_tangent_bundle_proj", []], ["add", "def", "bundle_mfderiv_within", []], ["add", "theorem", "bundle_mfderiv_within_comp_at", []], ["add", "theorem", "bundle_mfderiv_within_eq_bundle_mfderiv", []], ["add", "theorem", "bundle_mfderiv_within_proj", []], ["add", "theorem", "bundle_mfderiv_within_subset", []], ["add", "theorem", "bundle_mfderiv_within_tangent_bundle_proj", []], ["add", "theorem", "bundle_mfderiv_within_univ", []], ["add", "theorem", "comp", ["has_mfderiv_at"]], ["add", "theorem", "comp_has_mfderiv_within_at", ["has_mfderiv_at"]], ["add", "theorem", "congr_of_mem_nhds", ["has_mfderiv_at"]], ["add", "theorem", "continuous_at", ["has_mfderiv_at"]], ["add", "theorem", "has_mfderiv_within_at", ["has_mfderiv_at"]], ["add", "theorem", "mdifferentiable_at", ["has_mfderiv_at"]], ["add", "theorem", "mfderiv", ["has_mfderiv_at"]], ["add", "def", "has_mfderiv_at", []], ["add", "theorem", "has_mfderiv_at_const", []], ["add", "theorem", "has_mfderiv_at_id", []], ["add", "theorem", "has_mfderiv_at_unique", []], ["add", "theorem", "comp", ["has_mfderiv_within_at"]], ["add", "theorem", "congr_mono", ["has_mfderiv_within_at"]], ["add", "theorem", "congr_of_mem_nhds_within", ["has_mfderiv_within_at"]], ["add", "theorem", "continuous_within_at", ["has_mfderiv_within_at"]], ["add", "theorem", "has_mfderiv_at", ["has_mfderiv_within_at"]], ["add", "theorem", "mdifferentiable_within_at", ["has_mfderiv_within_at"]], ["add", "theorem", "mfderiv_within", ["has_mfderiv_within_at"]], ["add", "theorem", "mono", ["has_mfderiv_within_at"]], ["add", "theorem", "nhds_within", ["has_mfderiv_within_at"]], ["add", "theorem", "union", ["has_mfderiv_within_at"]], ["add", "def", "has_mfderiv_within_at", []], ["add", "theorem", "has_mfderiv_within_at_const", []], ["add", "theorem", "has_mfderiv_within_at_id", []], ["add", "theorem", "has_mfderiv_within_at_inter'", []], ["add", "theorem", "has_mfderiv_within_at_inter", []], ["add", "theorem", "has_mfderiv_within_at_univ", []], ["add", "theorem", "unique_mdiff_on", ["is_open"]], ["add", "theorem", "unique_mdiff_within_at", ["is_open"]], ["add", "theorem", "inv_fun_to_fun_deriv", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "mdifferentiable_at_inv_fun", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "mdifferentiable_at_to_fun", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "range_mfderiv_eq_univ", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "symm", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "to_fun_inv_fun_deriv", ["local_homeomorph", "mdifferentiable"]], ["add", "theorem", "trans", ["local_homeomorph", "mdifferentiable"]], ["add", "def", "mdifferentiable", ["local_homeomorph"]], ["add", "theorem", "comp", ["mdifferentiable"]], ["add", "theorem", "continuous", ["mdifferentiable"]], ["add", "theorem", "mdifferentiable_on", ["mdifferentiable"]], ["add", "theorem", "mfderiv_within", ["mdifferentiable"]], ["add", "def", "mdifferentiable", []], ["add", "theorem", "comp", ["mdifferentiable_at"]], ["add", "theorem", "congr_of_mem_nhds", ["mdifferentiable_at"]], ["add", "theorem", "continuous_at", ["mdifferentiable_at"]], ["add", "theorem", "has_mfderiv_at", ["mdifferentiable_at"]], ["add", "theorem", "mdifferentiable_within_at", ["mdifferentiable_at"]], ["add", "theorem", "mfderiv", ["mdifferentiable_at"]], ["add", "def", "mdifferentiable_at", []], ["add", "theorem", "mdifferentiable_at_atlas_inv_fun", []], ["add", "theorem", "mdifferentiable_at_atlas_to_fun", []], ["add", "theorem", "mdifferentiable_at_const", []], ["add", "theorem", "mdifferentiable_at_id", []], ["add", "theorem", "mdifferentiable_at_iff_differentiable_at", []], ["add", "theorem", "mdifferentiable_chart", []], ["add", "theorem", "mdifferentiable_const", []], ["add", "theorem", "mdifferentiable_id", []], ["add", "theorem", "mdifferentiable_iff_differentiable", []], ["add", "theorem", "mdifferentiable_of_mem_atlas", []], ["add", "theorem", "comp", ["mdifferentiable_on"]], ["add", "theorem", "congr_mono", ["mdifferentiable_on"]], ["add", "theorem", "continuous_on", ["mdifferentiable_on"]], ["add", "theorem", "mono", ["mdifferentiable_on"]], ["add", "def", "mdifferentiable_on", []], ["add", "theorem", "mdifferentiable_on_atlas_inv_fun", []], ["add", "theorem", "mdifferentiable_on_atlas_to_fun", []], ["add", "theorem", "mdifferentiable_on_const", []], ["add", "theorem", "mdifferentiable_on_id", []], ["add", "theorem", "mdifferentiable_on_iff_differentiable_on", []], ["add", "theorem", "mdifferentiable_on_of_locally_mdifferentiable_on", []], ["add", "theorem", "mdifferentiable_on_univ", []], ["add", "theorem", "comp", ["mdifferentiable_within_at"]], ["add", "theorem", "congr", ["mdifferentiable_within_at"]], ["add", "theorem", "congr_mono", ["mdifferentiable_within_at"]], ["add", "theorem", "congr_of_mem_nhds_within", ["mdifferentiable_within_at"]], ["add", "theorem", "continuous_within_at", ["mdifferentiable_within_at"]], ["add", "theorem", "has_mfderiv_within_at", ["mdifferentiable_within_at"]], ["add", "theorem", "mdifferentiable_at", ["mdifferentiable_within_at"]], ["add", "theorem", "mfderiv_within", ["mdifferentiable_within_at"]], ["add", "theorem", "mfderiv_within_congr_mono", ["mdifferentiable_within_at"]], ["add", "theorem", "mono", ["mdifferentiable_within_at"]], ["add", "def", "mdifferentiable_within_at", []], ["add", "theorem", "mdifferentiable_within_at_congr_of_mem_nhds_within", []], ["add", "theorem", "mdifferentiable_within_at_const", []], ["add", "theorem", "mdifferentiable_within_at_id", []], ["add", "theorem", "mdifferentiable_within_at_iff", []], ["add", "theorem", "mdifferentiable_within_at_iff_differentiable_within_at", []], ["add", "theorem", "mdifferentiable_within_at_inter'", []], ["add", "theorem", "mdifferentiable_within_at_inter", []], ["add", "theorem", "mdifferentiable_within_at_univ", []], ["add", "def", "mfderiv", []], ["add", "theorem", "mfderiv_comp", []], ["add", "theorem", "mfderiv_congr_of_mem_nhds", []], ["add", "theorem", "mfderiv_const", []], ["add", "theorem", "mfderiv_eq_fderiv", []], ["add", "theorem", "mfderiv_id", []], ["add", "def", "mfderiv_within", []], ["add", "theorem", "mfderiv_within_comp", []], ["add", "theorem", "mfderiv_within_congr_of_mem_nhds_within", []], ["add", "theorem", "mfderiv_within_const", []], ["add", "theorem", "mfderiv_within_eq_fderiv_within", []], ["add", "theorem", "mfderiv_within_id", []], ["add", "theorem", "mfderiv_within_inter", []], ["add", "theorem", "mfderiv_within_subset", []], ["add", "theorem", "mfderiv_within_univ", []], ["add", "theorem", "mfderiv_within_zero_of_not_mdifferentiable_within_at", []], ["add", "theorem", "mfderiv_zero_of_not_mdifferentiable_at", []], ["add", "theorem", "model_with_corners_mdifferentiable_on_inv_fun", []], ["add", "theorem", "model_with_corners_mdifferentiable_on_to_fun", []], ["add", "theorem", "eq", ["unique_mdiff_on"]], ["add", "theorem", "inter", ["unique_mdiff_on"]], ["add", "theorem", "smooth_bundle_preimage", ["unique_mdiff_on"]], ["add", "theorem", "tangent_bundle_proj_preimage", ["unique_mdiff_on"]], ["add", "theorem", "unique_diff_on", ["unique_mdiff_on"]], ["add", "theorem", "unique_diff_on_inter_preimage", ["unique_mdiff_on"]], ["add", "theorem", "unique_mdiff_on_preimage", ["unique_mdiff_on"]], ["add", "def", "unique_mdiff_on", []], ["add", "theorem", "unique_mdiff_on_iff_unique_diff_on", []], ["add", "theorem", "eq", ["unique_mdiff_within_at"]], ["add", "theorem", "inter'", ["unique_mdiff_within_at"]], ["add", "theorem", "inter", ["unique_mdiff_within_at"]], ["add", "theorem", "mono", ["unique_mdiff_within_at"]], ["add", "def", "unique_mdiff_within_at", []], ["add", "theorem", "unique_mdiff_within_at_iff", []], ["add", "theorem", "unique_mdiff_within_at_iff_unique_diff_within_at", []], ["add", "theorem", "unique_mdiff_within_at_univ", []], ["add", "def", "written_in_ext_chart_at", []], ["add", "theorem", "written_in_ext_chart_comp", []], ["add", "theorem", "written_in_ext_chart_model_space", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "def", "ext_chart_at", []], ["add", "theorem", "ext_chart_at_continuous_at_to_fun", []], ["add", "theorem", "ext_chart_at_continuous_on_inv_fun", []], ["add", "theorem", "ext_chart_at_continuous_on_to_fun", []], ["add", "theorem", "ext_chart_at_open_source", []], ["add", "theorem", "ext_chart_at_source", []], ["add", "theorem", "ext_chart_at_source_mem_nhds", []], ["add", "theorem", "ext_chart_at_target_mem_nhds_within", []], ["add", "theorem", "ext_chart_at_to_inv", []], ["add", "theorem", "ext_chart_continuous_at_inv_fun'", []], ["add", "theorem", "ext_chart_continuous_at_inv_fun", []], ["add", "theorem", "ext_chart_model_space_eq_id", []], ["add", "theorem", "ext_chart_preimage_inter_eq", []], ["add", "theorem", "ext_chart_preimage_mem_nhds", []], ["add", "theorem", "ext_chart_preimage_mem_nhds_within'", []], ["add", "theorem", "ext_chart_preimage_mem_nhds_within", []], ["add", "theorem", "mem_ext_chart_source", []], ["add", "theorem", "nhds_within_ext_chart_target_eq", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "union", ["continuous_within_at"]]]}]}, {"timestamp": 1579174838, "sha": "4f81942d", "message": "feat(logic/basic): forall_or_distrib (#1887)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall_or_distrib_right", []]]}]}, {"timestamp": 1579170186, "sha": "58610ffd", "message": "chore(order/filter/*): use `s ∈ f` instead of `s ∈ f.sets` (#1885)\nOther changes:\n* compose old `mem_infi` and `mem_binfi` with `mem_Union` and\n `mem_bUnion_iff` to avoid `.sets` and simplify usage (it was\n `rw [mem_infi, mem_Union]` every time)\n* drop `lift_sets_eq` and `mem_lift_iff` in favor of `mem_lift_sets`", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["mod", "theorem", "lift'_cong", ["filter"]], ["mod", "theorem", "lift'_mono'", ["filter"]], ["mod", "theorem", "lift_mono'", ["filter"]], ["del", "theorem", "lift_sets_eq", ["filter"]], ["mod", "theorem", "mem_lift'", ["filter"]], ["mod", "theorem", "mem_lift'_sets", ["filter"]], ["mod", "theorem", "mem_lift", ["filter"]], ["del", "theorem", "mem_lift_iff", ["filter"]], ["mod", "theorem", "principal_le_lift'", ["filter"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}]}, {"timestamp": 1579162277, "sha": "05457fdd", "message": "feat(analysis/calculus/tangent_cone): define and use `tangent_cone_congr` (#1886)\n* feat(analysis/calculus/tangent_cone): define and use `tangent_cone_congr`\nThis way some proofs become shorter and hopefully more readable.\n* Add a docstring", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "tangent_cone_congr", []], ["add", "theorem", "tangent_cone_mono_nhds", []], ["add", "theorem", "mono_nhds", ["unique_diff_within_at"]], ["add", "theorem", "unique_diff_within_at_congr", []]]}]}, {"timestamp": 1579100686, "sha": "b3ed6e61", "message": "chore(*): use `ne_` instead of `neq_` in lemma names (#1878)\nOne exception: `mem_sets_of_neq_bot` is now `mem_sets_of_eq_bot`\nbecause it has an equality as an assumption.\nAlso add `filter.infi_ne_bot_(iff_?)of_directed'` with a different\n`nonempty` assumption, and use it to simplify the proof of\n`lift_ne_bot_iff`.", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "ne_bot_of_le_ne_bot", ["lattice"]], ["del", "theorem", "neq_bot_of_le_neq_bot", ["lattice"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_ne_bot", ["filter"]], ["add", "theorem", "comap_ne_bot_of_surj", ["filter"]], ["del", "theorem", "comap_neq_bot", ["filter"]], ["del", "theorem", "comap_neq_bot_of_surj", ["filter"]], ["add", "theorem", "forall_sets_ne_empty_iff_ne_bot", ["filter"]], ["del", "theorem", "forall_sets_neq_empty_iff_neq_bot", ["filter"]], ["add", "theorem", "infi_ne_bot_iff_of_directed'", ["filter"]], ["add", "theorem", "infi_ne_bot_iff_of_directed", ["filter"]], ["add", "theorem", "infi_ne_bot_of_directed'", ["filter"]], ["add", "theorem", "infi_ne_bot_of_directed", ["filter"]], ["del", "theorem", "infi_neq_bot_iff_of_directed", ["filter"]], ["del", "theorem", "infi_neq_bot_of_directed", ["filter"]], ["add", "theorem", "mem_sets_of_eq_bot", ["filter"]], ["del", "theorem", "mem_sets_of_neq_bot", ["filter"]], ["add", "theorem", "prod_ne_bot", ["filter"]], ["del", "theorem", "prod_neq_bot", ["filter"]], ["add", "theorem", "pure_ne_bot", ["filter"]], ["del", "theorem", "pure_neq_bot", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "lift'_ne_bot_iff", ["filter"]], ["del", "theorem", "lift'_neq_bot_iff", ["filter"]], ["add", "theorem", "lift_ne_bot_iff", ["filter"]], ["del", "theorem", "lift_neq_bot_iff", ["filter"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "nhds_ne_bot", []], ["del", "theorem", "nhds_neq_bot", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "comap_nhds_ne_bot", ["dense_inducing"]], ["del", "theorem", "comap_nhds_neq_bot", ["dense_inducing"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "eq_of_nhds_ne_bot", []], ["del", "theorem", "eq_of_nhds_neq_bot", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1579083220, "sha": "8e70388a", "message": "docs(README): add new maintainers (#1881)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1579079730, "sha": "d6147362", "message": "feat(linear_algebra/tensor_product): tensor product right identity (#1880)\n* feat(linear_algebra/tensor_product): tensor product right identity\n* Golf proof of tensor_product.rid\n* Add missing docstrings", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1579073077, "sha": "819939fb", "message": "refactor(order/lattice): generalize `directed_of_mono` (#1879)\nIt suffices to have `semilattice_sup`, not `decidable_linear_order`.\nAlso add `directed_of_antimono`.", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "directed_of_mono", []]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "directed_of_antimono", ["lattice"]], ["add", "theorem", "directed_of_mono", ["lattice"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1579017647, "sha": "9f7ae9ab", "message": "chore(data/set/lattice): use `∃ x ∈ s` instead of `∃ x, x ∈ s ∧` in `mem_bUnion_iff` (#1877)\nThis seems to be more in line with the rest of the library", "changes": [{"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": [["mod", "def", "get", ["semiquot"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["mod", "theorem", "mem_conjugates_of_set_iff", ["group"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1579011621, "sha": "416b7d87", "message": "fix doc strings (#1876)", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}]}, {"timestamp": 1578983580, "sha": "e095e306", "message": "feat(analysis/ODE/gronwall): A version of Grönwall's inequality (#1846)\n* feat(analysis/ODE/gronwall): A version of Gronwall's inequality\n+ uniqueness of solutions of an ODE with a Lipschitz continuous RHS\n* Consistently use ö in Grönwall\n* Fix a typo\n* Fix docs, drop assumption `0 < K`, add a version for functions `ℝ → ℝ`.\n* Fix docs\nCo-Authored-By: sgouezel \n* Fix docs", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/analysis/ODE/gronwall.lean", "changes": [["add", "theorem", "ODE_solution_unique", []], ["add", "theorem", "ODE_solution_unique_of_mem_set", []], ["add", "theorem", "dist_le_of_approx_trajectories_ODE", []], ["add", "theorem", "dist_le_of_approx_trajectories_ODE_of_mem_set", []], ["add", "theorem", "dist_le_of_trajectories_ODE", []], ["add", "theorem", "dist_le_of_trajectories_ODE_of_mem_set", []], ["add", "theorem", "gronwall_bound_K0", []], ["add", "theorem", "gronwall_bound_continuous_ε", []], ["add", "theorem", "gronwall_bound_of_K_ne_0", []], ["add", "theorem", "gronwall_bound_x0", []], ["add", "theorem", "gronwall_bound_ε0", []], ["add", "theorem", "gronwall_bound_ε0_δ0", []], ["add", "theorem", "has_deriv_at_gronwall_bound", []], ["add", "theorem", "has_deriv_at_gronwall_bound_shift", []], ["add", "theorem", "le_gronwall_bound_of_liminf_deriv_right_le", []], ["add", "theorem", "norm_le_gronwall_bound_of_norm_deriv_right_le", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "image_le_of_liminf_slope_right_lt_deriv_boundary'", []]]}]}, {"timestamp": 1578811726, "sha": "c5d91bc7", "message": "feat(topology/algebra/ordered): add order topology for partial orders… (#1276)\n* feat(topology/algebra/ordered): doc, add convergence in ordered groups criterion\n* docstring\n* reviewer's comments", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "approx_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "approx_comp", ["measure_theory", "simple_func"]], ["mod", "theorem", "supr_approx_apply", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "Inf_mem_closure", []], ["mod", "theorem", "Inf_mem_of_is_closed", []], ["mod", "theorem", "Sup_mem_closure", []], ["mod", "theorem", "Sup_mem_of_is_closed", []], ["mod", "theorem", "cInf_mem_closure", []], ["mod", "theorem", "cInf_mem_of_is_closed", []], ["mod", "theorem", "cSup_mem_closure", []], ["mod", "theorem", "cSup_mem_of_is_closed", []], ["add", "theorem", "tendsto_nhds", ["decidable_linear_ordered_comm_group"]], ["add", "theorem", "induced_order_topology'", []], ["add", "theorem", "induced_order_topology", []], ["del", "theorem", "induced_orderable_topology'", []], ["del", "theorem", "induced_orderable_topology", []], ["mod", "theorem", "infi_eq_of_tendsto", []], ["add", "theorem", "nhds_bot_order", []], ["del", "theorem", "nhds_bot_orderable", []], ["add", "theorem", "nhds_eq_order", []], ["del", "theorem", "nhds_eq_orderable", []], ["add", "theorem", "nhds_order_unbounded", []], ["del", "theorem", "nhds_orderable_unbounded", []], ["add", "theorem", "nhds_top_order", []], ["del", "theorem", "nhds_top_orderable", []], ["add", "theorem", "t2_space", ["order_topology"]], ["add", "theorem", "order_topology_of_nhds_abs", []], ["del", "theorem", "t2_space", ["orderable_topology"]], ["del", "theorem", "orderable_topology_of_nhds_abs", []], ["add", "def", "topology", ["preorder"]], ["mod", "theorem", "supr_eq_of_tendsto", []], ["mod", "theorem", "tendsto_at_top_infi_nat", []], ["mod", "theorem", "tendsto_at_top_supr_nat", []], ["add", "theorem", "tendsto_order", []], ["add", "theorem", "tendsto_order_unbounded", []], ["del", "theorem", "tendsto_orderable", []], ["del", "theorem", "tendsto_orderable_unbounded", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}]}, {"timestamp": 1578754267, "sha": "25dded2d", "message": "chore(measure_theory/bochner_integration): make proofs shorter (#1871)\n* More consistent use of the dot notation\n* Revert \"More consistent use of the dot notation\"\nThis reverts commit 854a499a9be105b42ca486eb25593a2379b07404.\n* Revert \"Revert \"More consistent use of the dot notation\"\"\nThis reverts commit 57aaf22695c031fc8dcc581110cc9d1ac397f695.\n* fix things", "changes": [{"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "def", "comp_edist", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "smul_mk", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["mod", "theorem", "integral_add", ["measure_theory"]], ["mod", "theorem", "integral_eq", ["measure_theory"]], ["del", "theorem", "integral_eq_zero_of_non_integrable", ["measure_theory"]], ["del", "theorem", "integral_eq_zero_of_non_measurable", ["measure_theory"]], ["add", "theorem", "integral_non_integrable", ["measure_theory"]], ["add", "theorem", "integral_non_measurable", ["measure_theory"]], ["mod", "theorem", "integral_smul", ["measure_theory"]], ["mod", "theorem", "integral_sub", ["measure_theory"]], ["add", "theorem", "integral_undef", ["measure_theory"]], ["mod", "def", "simple_func", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "coe_nnnorm", ["measurable"]], ["add", "theorem", "dist", ["measurable"]], ["add", "theorem", "edist", ["measurable"]], ["add", "theorem", "nndist", ["measurable"]], ["add", "theorem", "nnnorm", ["measurable"]], ["add", "theorem", "norm", ["measurable"]], ["add", "theorem", "smul'", ["measurable"]], ["add", "theorem", "smul", ["measurable"]], ["add", "theorem", "measurable_dist", []], ["add", "theorem", "measurable_edist", []], ["add", "theorem", "measurable_nndist", []], ["add", "theorem", "measurable_nnnorm", []], ["add", "theorem", "measurable_norm", []], ["add", "theorem", "measurable_smul_iff", []], ["del", "theorem", "measurable_coe_nnnorm", ["measure_theory"]], ["del", "theorem", "measurable_dist'", ["measure_theory"]], ["del", "theorem", "measurable_dist", ["measure_theory"]], ["del", "theorem", "measurable_edist'", ["measure_theory"]], ["del", "theorem", "measurable_edist", ["measure_theory"]], ["del", "theorem", "measurable_nndist'", ["measure_theory"]], ["del", "theorem", "measurable_nndist", ["measure_theory"]], ["del", "theorem", "measurable_nnnorm'", ["measure_theory"]], ["del", "theorem", "measurable_nnnorm", ["measure_theory"]], ["del", "theorem", "measurable_norm'", ["measure_theory"]], ["del", "theorem", "measurable_norm", ["measure_theory"]], ["del", "theorem", "measurable_smul'", ["measure_theory"]], ["del", "theorem", "measurable_smul", ["measure_theory"]], ["del", "theorem", "measurable_smul_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["del", "theorem", "smul_iff", ["measure_theory", "integrable"]], ["add", "theorem", "integrable_smul_iff", ["measure_theory"]], ["mod", "def", "l1", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_zero", []]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1578703373, "sha": "f67df78c", "message": "chore(algebra/module): add some missing `*_cast` tags (#1863)", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "coe_add", ["submodule"]], ["mod", "theorem", "coe_neg", ["submodule"]], ["mod", "theorem", "coe_smul", ["submodule"]], ["mod", "theorem", "coe_sub", ["submodule"]], ["mod", "theorem", "coe_zero", ["submodule"]]]}]}, {"timestamp": 1578618349, "sha": "ff2a41e4", "message": "refactor(docs): additions, modifications, reorganization (#1815)\n* move cc.md to tactics.md\n* change h3 to h2\n* remove h3\n* update simp.md headers\n* updates to casts.md\n* update holes.md\n* update docstrings\n* add commands.md\n* hole commands in emacs\n* reference library_search from find\n* delete casts.md\n* minor updates\n* minor fixes\n* more minor fixes\n* fix header level\n* updating mathlib-overview and removing a bunch of useless files", "changes": [{"oldPath": null, "newPath": "docs/commands.md", "changes": []}, {"oldPath": "docs/extras/casts.md", "newPath": null, "changes": []}, {"oldPath": "docs/extras/cc.md", "newPath": null, "changes": []}, {"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}, {"oldPath": "docs/extras/simp.md", "newPath": "docs/extras/simp.md", "changes": []}, {"oldPath": "docs/extras/tactic_writing.md", "newPath": "docs/extras/tactic_writing.md", "changes": []}, {"oldPath": "docs/extras/well_founded_recursion.md", "newPath": "docs/extras/well_founded_recursion.md", "changes": []}, {"oldPath": "docs/holes.md", "newPath": "docs/holes.md", "changes": []}, {"oldPath": "docs/mathlib-overview.md", "newPath": "docs/mathlib-overview.md", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "docs/theories/functions.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/groups.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/integers.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/linear_algebra.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/measure.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/naturals.md", "newPath": "docs/theories/naturals.md", "changes": []}, {"oldPath": "docs/theories/number_theory.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/orders.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/polynomials.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/relations.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/rings_fields.md", "newPath": null, "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}]}, {"timestamp": 1578610735, "sha": "baa3aa73", "message": "refactor(data/set/basic): change def of `⊂` to match `<` (#1862)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "eq_or_ssubset_of_subset", ["set"]], ["add", "theorem", "nonempty_diff", ["set"]], ["mod", "theorem", "not_subset", ["set"]], ["mod", "theorem", "ssubset_def", ["set"]], ["add", "theorem", "ssubset_iff_subset_ne", ["set"]], ["del", "theorem", "ssubset_iff_subset_not_subset", ["set"]], ["mod", "def", "strict_subset", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "exists_of_lt", ["submodule"]], ["mod", "theorem", "le_def'", ["submodule"]], ["mod", "theorem", "le_def", ["submodule"]], ["add", "theorem", "lt_def", ["submodule"]], ["add", "theorem", "lt_iff_le_and_exists", ["submodule"]], ["add", "theorem", "not_le_iff_exists", ["submodule"]], ["mod", "def", "of_le", ["submodule"]], ["mod", "theorem", "of_le_apply", ["submodule"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}]}, {"timestamp": 1578604989, "sha": "d7cebcf6", "message": "feat(linear_algebra/multilinear): basics of multilinear maps (#1814)\n* multilinear maps\n* progress\n* isomorphisms\n* Update src/logic/function.lean\nCo-Authored-By: Johan Commelin \n* better docstring\n* variable module\n* dep cons\n* make everything dependent\n* remove print statement\n* fix build\n* Update src/linear_algebra/multilinear.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/linear_algebra/multilinear.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* fixes\n* docstrings\n* reviewer's comments\n* cleanup", "changes": [{"oldPath": "archive/cubing_a_cube.lean", "newPath": "archive/cubing_a_cube.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_succ_ne_last", ["fin"]], ["mod", "def", "cons", ["fin"]], ["add", "theorem", "cons_self_tail", ["fin"]], ["mod", "theorem", "cons_succ", ["fin"]], ["add", "theorem", "cons_update", ["fin"]], ["mod", "theorem", "cons_zero", ["fin"]], ["add", "theorem", "injective_cast_succ", ["fin"]], ["add", "theorem", "injective_succ", ["fin"]], ["add", "theorem", "succ_inj", ["fin"]], ["mod", "def", "tail", ["fin"]], ["mod", "theorem", "tail_cons", ["fin"]], ["add", "theorem", "tail_update_succ", ["fin"]], ["add", "theorem", "tail_update_zero", ["fin"]], ["add", "theorem", "update_cons_zero", ["fin"]], ["add", "def", "fin_zero_elim'", []], ["del", "def", "{u}", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/multilinear.lean", "changes": [["add", "theorem", "add_apply", ["multilinear_map"]], ["add", "theorem", "cons_add", ["multilinear_map"]], ["add", "theorem", "cons_smul", ["multilinear_map"]], ["add", "theorem", "ext", ["multilinear_map"]], ["add", "def", "linear_to_multilinear_equiv_multilinear", ["multilinear_map"]], ["add", "theorem", "map_add", ["multilinear_map"]], ["add", "theorem", "map_coord_zero", ["multilinear_map"]], ["add", "theorem", "map_smul", ["multilinear_map"]], ["add", "theorem", "map_zero", ["multilinear_map"]], ["add", "def", "multilinear_to_linear_equiv_multilinear", ["multilinear_map"]], ["add", "theorem", "neg_apply", ["multilinear_map"]], ["add", "theorem", "smul_apply", ["multilinear_map"]], ["add", "def", "to_linear_map", ["multilinear_map"]], ["add", "theorem", "zero_apply", ["multilinear_map"]], ["add", "structure", "multilinear_map", []]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "theorem", "update_comp", ["function"]], ["add", "theorem", "update_eq_self", ["function"]], ["mod", "theorem", "update_noteq", ["function"]], ["mod", "theorem", "update_same", ["function"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1578543284, "sha": "39c10cdb", "message": "docs(tactic/tauto): elaborate tauto docs [ci skip] (#1869)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}]}, {"timestamp": 1578538037, "sha": "52899945", "message": "feat(analysis/calculus/mean_value): add generalized \"fencing\" inequality (#1838)\n* feat(analysis/calculus/mean_value): add generalized \"fencing\" inequality\nThis version can be used to deduce, e.g., Gronwall inequality as well\nas its generalized version that deals with approximate solutions.\n* Adjust to merged branches, use `liminf` instead of `limsup`, add more variations\n* Go through dim-1 liminf estimates\n* Fix: use `b ∈ Ioc a c` as a hypothesis for `I??_mem_nhds_within_Iio`\n* Update src/analysis/calculus/mean_value.lean\nCo-Authored-By: sgouezel \n* Drop `Prop`-valued `variables`, add some docs\n* More docstrings\n* Drop `Prop`-valued `variables`, drop assumption `x ∉ s`.", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "liminf_right_norm_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "liminf_right_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "liminf_right_slope_norm_le", ["has_deriv_within_at"]], ["add", "theorem", "limsup_norm_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "limsup_slope_le'", ["has_deriv_within_at"]], ["add", "theorem", "limsup_slope_le", ["has_deriv_within_at"]], ["add", "theorem", "limsup_slope_norm_le", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_iff_tendsto_slope'", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "image_le_of_deriv_right_le_deriv_boundary", []], ["add", "theorem", "image_le_of_deriv_right_lt_deriv_boundary'", []], ["add", "theorem", "image_le_of_deriv_right_lt_deriv_boundary", []], ["add", "theorem", "image_le_of_liminf_slope_right_le_deriv_boundary", []], ["add", "theorem", "image_le_of_liminf_slope_right_lt_deriv_boundary", []], ["add", "theorem", "image_norm_le_of_liminf_right_slope_norm_lt_deriv_boundary", []], ["add", "theorem", "image_norm_le_of_norm_deriv_right_le_deriv_boundary'", []], ["add", "theorem", "image_norm_le_of_norm_deriv_right_le_deriv_boundary", []], ["add", "theorem", "image_norm_le_of_norm_deriv_right_lt_deriv_boundary'", []], ["add", "theorem", "image_norm_le_of_norm_deriv_right_lt_deriv_boundary", []], ["add", "theorem", "norm_image_sub_le_of_norm_deriv_le_segment'", []], ["mod", "theorem", "norm_image_sub_le_of_norm_deriv_le_segment", []], ["add", "theorem", "norm_image_sub_le_of_norm_deriv_le_segment_01'", []], ["add", "theorem", "norm_image_sub_le_of_norm_deriv_le_segment_01", []], ["add", "theorem", "norm_image_sub_le_of_norm_deriv_right_le_segment", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm", ["filter", "tendsto"]], ["add", "theorem", "norm", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Icc_mem_nhds_within_Iio", []], ["add", "theorem", "Ico_mem_nhds_within_Iio", []], ["add", "theorem", "Ioc_mem_nhds_within_Iio", []], ["add", "theorem", "Ioo_mem_nhds_within_Iio", []]]}]}, {"timestamp": 1578514618, "sha": "9afc6f2f", "message": "docs(tactics): tautology (#1860)\n* added a short description of the tautology tactic\n* added a short description of the tautology tactic\n* Update docs/tactics.md\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1578489414, "sha": "92841c2e", "message": "refactor(analysis/asymptotics): introduce `is_O_with` (#1857)\n* refactor(analysis/asymptotics): introduce `is_O_with`\nI use it to factor out common parts of the proofs of facts about\n`is_O` and `is_o`. It can also be used with `principal s` filter to\noperate with `∀ x ∈ s, ∥f x∥ ≤ C * ∥g x∥` is a manner similar to `is_O`.\n* lint\n* Fix compile\n* Drop `(s)mul_same` lemmas.\nIt's easy to use `(s)mul_is_O (is_O_refl _ _)` or `(is_O_refl _\n_).mul_is_o _` instead\n* docs: say explicitly that `is_O` is better than `is_O_with`", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["mod", "theorem", "add", ["asymptotics", "is_O"]], ["add", "theorem", "add_is_o", ["asymptotics", "is_O"]], ["del", "theorem", "comp", ["asymptotics", "is_O"]], ["add", "theorem", "comp_tendsto", ["asymptotics", "is_O"]], ["add", "theorem", "congr'", ["asymptotics", "is_O"]], ["mod", "theorem", "congr", ["asymptotics", "is_O"]], ["mod", "theorem", "congr_left", ["asymptotics", "is_O"]], ["mod", "theorem", "congr_of_sub", ["asymptotics", "is_O"]], ["mod", "theorem", "congr_right", ["asymptotics", "is_O"]], ["add", "theorem", "const_mul_left", ["asymptotics", "is_O"]], ["add", "theorem", "const_mul_right'", ["asymptotics", "is_O"]], ["add", "theorem", "const_mul_right", ["asymptotics", "is_O"]], ["add", "theorem", "exists_nonneg", ["asymptotics", "is_O"]], ["add", "theorem", "exists_pos", ["asymptotics", "is_O"]], ["add", "theorem", "join", ["asymptotics", "is_O"]], ["mod", "theorem", "mono", ["asymptotics", "is_O"]], ["add", "theorem", "mul", ["asymptotics", "is_O"]], ["add", "theorem", "mul_is_o", ["asymptotics", "is_O"]], ["add", "theorem", "of_const_mul_right", ["asymptotics", "is_O"]], ["add", "theorem", "prod_left", ["asymptotics", "is_O"]], ["add", "theorem", "prod_left_fst", ["asymptotics", "is_O"]], ["add", "theorem", "prod_left_snd", ["asymptotics", "is_O"]], ["mod", "theorem", "prod_rightl", ["asymptotics", "is_O"]], ["mod", "theorem", "prod_rightr", ["asymptotics", "is_O"]], ["add", "theorem", "smul", ["asymptotics", "is_O"]], ["add", "theorem", "smul_is_o", ["asymptotics", "is_O"]], ["mod", "theorem", "sub", ["asymptotics", "is_O"]], ["mod", "theorem", "symm", ["asymptotics", "is_O"]], ["mod", "theorem", "trans", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_is_o", ["asymptotics", "is_O"]], ["add", "theorem", "trans_le", ["asymptotics", "is_O"]], ["mod", "theorem", "trans_tendsto", ["asymptotics", "is_O"]], ["add", "theorem", "trans_tendsto_nhds", ["asymptotics", "is_O"]], ["del", "theorem", "tri", ["asymptotics", "is_O"]], ["add", "theorem", "triangle", ["asymptotics", "is_O"]], ["mod", "def", "is_O", ["asymptotics"]], ["add", "theorem", "is_O_bot", ["asymptotics"]], ["mod", "theorem", "is_O_comm", ["asymptotics"]], ["mod", "theorem", "is_O_congr", ["asymptotics"]], ["del", "theorem", "is_O_congr_left", ["asymptotics"]], ["del", "theorem", "is_O_congr_right", ["asymptotics"]], ["add", "theorem", "is_O_const_const", ["asymptotics"]], ["del", "theorem", "is_O_const_mul_left", ["asymptotics"]], ["add", "theorem", "is_O_const_mul_left_iff'", ["asymptotics"]], ["mod", "theorem", "is_O_const_mul_left_iff", ["asymptotics"]], ["add", "theorem", "is_O_const_mul_right_iff'", ["asymptotics"]], ["mod", "theorem", "is_O_const_mul_right_iff", ["asymptotics"]], ["add", "theorem", "is_O_const_mul_self", ["asymptotics"]], ["add", "theorem", "is_O_const_of_tendsto", ["asymptotics"]], ["mod", "theorem", "is_O_const_one", ["asymptotics"]], ["del", "theorem", "is_O_const_smul_left", ["asymptotics"]], ["mod", "theorem", "is_O_const_smul_left_iff", ["asymptotics"]], ["mod", "theorem", "is_O_const_smul_right", ["asymptotics"]], ["add", "theorem", "is_O_fst_prod", ["asymptotics"]], ["del", "theorem", "is_O_iff", ["asymptotics"]], ["del", "theorem", "is_O_join", ["asymptotics"]], ["del", "theorem", "is_O_mul", ["asymptotics"]], ["mod", "theorem", "is_O_neg_left", ["asymptotics"]], ["mod", "theorem", "is_O_neg_right", ["asymptotics"]], ["mod", "theorem", "is_O_norm_left", ["asymptotics"]], ["add", "theorem", "is_O_norm_norm", ["asymptotics"]], ["mod", "theorem", "is_O_norm_right", ["asymptotics"]], ["del", "theorem", "is_O_of_is_O_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_O_of_le'", ["asymptotics"]], ["add", "theorem", "is_O_of_le", ["asymptotics"]], ["mod", "theorem", "is_O_one_of_tendsto", ["asymptotics"]], ["mod", "theorem", "is_O_prod_left", ["asymptotics"]], ["mod", "theorem", "is_O_refl", ["asymptotics"]], ["mod", "theorem", "is_O_refl_left", ["asymptotics"]], ["add", "theorem", "is_O_self_const_mul'", ["asymptotics"]], ["add", "theorem", "is_O_self_const_mul", ["asymptotics"]], ["del", "theorem", "is_O_smul", ["asymptotics"]], ["add", "theorem", "is_O_snd_prod", ["asymptotics"]], ["add", "theorem", "add", ["asymptotics", "is_O_with"]], ["add", "theorem", "add_is_o", ["asymptotics", "is_O_with"]], ["add", "theorem", "comp_tendsto", ["asymptotics", "is_O_with"]], ["add", "theorem", "congr'", ["asymptotics", "is_O_with"]], ["add", "theorem", "congr", ["asymptotics", "is_O_with"]], ["add", "theorem", "congr_const", ["asymptotics", "is_O_with"]], ["add", "theorem", "congr_left", ["asymptotics", "is_O_with"]], ["add", "theorem", "congr_right", ["asymptotics", "is_O_with"]], ["add", "theorem", "const_mul_left", ["asymptotics", "is_O_with"]], ["add", "theorem", "const_mul_right'", ["asymptotics", "is_O_with"]], ["add", "theorem", "const_mul_right", ["asymptotics", "is_O_with"]], ["add", "theorem", "const_smul_left", ["asymptotics", "is_O_with"]], ["add", "theorem", "exists_nonneg", ["asymptotics", "is_O_with"]], ["add", "theorem", "exists_pos", ["asymptotics", "is_O_with"]], ["add", "theorem", "is_O", ["asymptotics", "is_O_with"]], ["add", "theorem", "join'", ["asymptotics", "is_O_with"]], ["add", "theorem", "join", ["asymptotics", "is_O_with"]], ["add", "theorem", "mono", ["asymptotics", "is_O_with"]], ["add", "theorem", "mul", ["asymptotics", "is_O_with"]], ["add", "theorem", "of_const_mul_right", ["asymptotics", "is_O_with"]], ["add", "theorem", "prod_left", ["asymptotics", "is_O_with"]], ["add", "theorem", "prod_left_fst", ["asymptotics", "is_O_with"]], ["add", "theorem", "prod_left_same", ["asymptotics", "is_O_with"]], ["add", "theorem", "prod_left_snd", ["asymptotics", "is_O_with"]], ["add", "theorem", "prod_rightl", ["asymptotics", "is_O_with"]], ["add", "theorem", "prod_rightr", ["asymptotics", "is_O_with"]], ["add", "theorem", "right_le_add_of_lt_1", ["asymptotics", "is_O_with"]], ["add", "theorem", "right_le_sub_of_lt_1", ["asymptotics", "is_O_with"]], ["add", "theorem", "smul", ["asymptotics", "is_O_with"]], ["add", "theorem", "sub", ["asymptotics", "is_O_with"]], ["add", "theorem", "sub_is_o", ["asymptotics", "is_O_with"]], ["add", "theorem", "symm", ["asymptotics", "is_O_with"]], ["add", "theorem", "trans", ["asymptotics", "is_O_with"]], ["add", "theorem", "trans_is_o", ["asymptotics", "is_O_with"]], ["add", "theorem", "trans_le", ["asymptotics", "is_O_with"]], ["add", "theorem", "triangle", ["asymptotics", "is_O_with"]], ["add", "theorem", "weaken", ["asymptotics", "is_O_with"]], ["add", "def", "is_O_with", ["asymptotics"]], ["add", "theorem", "is_O_with_bot", ["asymptotics"]], ["add", "theorem", "is_O_with_comm", ["asymptotics"]], ["add", "theorem", "is_O_with_congr", ["asymptotics"]], ["add", "theorem", "is_O_with_const_const", ["asymptotics"]], ["add", "theorem", "is_O_with_const_mul_self", ["asymptotics"]], ["add", "theorem", "is_O_with_const_one", ["asymptotics"]], ["add", "theorem", "is_O_with_fst_prod", ["asymptotics"]], ["add", "theorem", "is_O_with_neg_left", ["asymptotics"]], ["add", "theorem", "is_O_with_neg_right", ["asymptotics"]], ["add", "theorem", "is_O_with_norm_left", ["asymptotics"]], ["add", "theorem", "is_O_with_norm_norm", ["asymptotics"]], ["add", "theorem", "is_O_with_norm_right", ["asymptotics"]], ["add", "theorem", "is_O_with_of_le'", ["asymptotics"]], ["add", "theorem", "is_O_with_of_le", ["asymptotics"]], ["add", "theorem", "is_O_with_prod_left", ["asymptotics"]], ["add", "theorem", "is_O_with_refl", ["asymptotics"]], ["add", "theorem", "is_O_with_self_const_mul'", ["asymptotics"]], ["add", "theorem", "is_O_with_self_const_mul", ["asymptotics"]], ["add", "theorem", "is_O_with_snd_prod", ["asymptotics"]], ["add", "theorem", "is_O_with_zero", ["asymptotics"]], ["add", "theorem", "is_O_with_zero_right_iff", ["asymptotics"]], ["mod", "theorem", "is_O_zero", ["asymptotics"]], ["mod", "theorem", "is_O_zero_right_iff", ["asymptotics"]], ["mod", "theorem", "add", ["asymptotics", "is_o"]], ["add", "theorem", "add_is_O", ["asymptotics", "is_o"]], ["add", "theorem", "add_is_O_with", ["asymptotics", "is_o"]], ["del", "theorem", "comp", ["asymptotics", "is_o"]], ["add", "theorem", "comp_tendsto", ["asymptotics", "is_o"]], ["add", "theorem", "congr'", ["asymptotics", "is_o"]], ["mod", "theorem", "congr", ["asymptotics", "is_o"]], ["mod", "theorem", "congr_left", ["asymptotics", "is_o"]], ["mod", "theorem", "congr_of_sub", ["asymptotics", "is_o"]], ["mod", "theorem", "congr_right", ["asymptotics", "is_o"]], ["add", "theorem", "const_mul_left", ["asymptotics", "is_o"]], ["add", "theorem", "const_mul_right'", ["asymptotics", "is_o"]], ["add", "theorem", "const_mul_right", ["asymptotics", "is_o"]], ["add", "theorem", "is_O", ["asymptotics", "is_o"]], ["add", "theorem", "is_O_with", ["asymptotics", "is_o"]], ["add", "theorem", "join", ["asymptotics", "is_o"]], ["mod", "theorem", "mono", ["asymptotics", "is_o"]], ["add", "theorem", "mul", ["asymptotics", "is_o"]], ["add", "theorem", "mul_is_O", ["asymptotics", "is_o"]], ["add", "theorem", "of_const_mul_right", ["asymptotics", "is_o"]], ["add", "theorem", "prod_left", ["asymptotics", "is_o"]], ["add", "theorem", "prod_left_fst", ["asymptotics", "is_o"]], ["add", "theorem", "prod_left_snd", ["asymptotics", "is_o"]], ["mod", "theorem", "prod_rightl", ["asymptotics", "is_o"]], ["mod", "theorem", "prod_rightr", ["asymptotics", "is_o"]], ["add", "theorem", "smul", ["asymptotics", "is_o"]], ["add", "theorem", "smul_is_O", ["asymptotics", "is_o"]], ["mod", "theorem", "sub", ["asymptotics", "is_o"]], ["mod", "theorem", "symm", ["asymptotics", "is_o"]], ["add", "theorem", "tendsto_0", ["asymptotics", "is_o"]], ["del", "theorem", "to_is_O", ["asymptotics", "is_o"]], ["add", "theorem", "trans'", ["asymptotics", "is_o"]], ["mod", "theorem", "trans", ["asymptotics", "is_o"]], ["mod", "theorem", "trans_is_O", ["asymptotics", "is_o"]], ["add", "theorem", "trans_is_O_with", ["asymptotics", "is_o"]], ["mod", "theorem", "trans_tendsto", ["asymptotics", "is_o"]], ["del", "theorem", "tri", ["asymptotics", "is_o"]], ["add", "theorem", "triangle", ["asymptotics", "is_o"]], ["mod", "def", "is_o", ["asymptotics"]], ["add", "theorem", "is_o_bot", ["asymptotics"]], ["mod", "theorem", "is_o_comm", ["asymptotics"]], ["mod", "theorem", "is_o_congr", ["asymptotics"]], ["del", "theorem", "is_o_congr_left", ["asymptotics"]], ["del", "theorem", "is_o_congr_right", ["asymptotics"]], ["add", "theorem", "is_o_const_iff", ["asymptotics"]], ["add", "theorem", "is_o_const_iff_is_o_one", ["asymptotics"]], ["del", "theorem", "is_o_const_mul_left", ["asymptotics"]], ["add", "theorem", "is_o_const_mul_left_iff'", ["asymptotics"]], ["mod", "theorem", "is_o_const_mul_left_iff", ["asymptotics"]], ["del", "theorem", "is_o_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_o_const_mul_right_iff'", ["asymptotics"]], ["add", "theorem", "is_o_const_mul_right_iff", ["asymptotics"]], ["mod", "theorem", "is_o_const_smul_left", ["asymptotics"]], ["mod", "theorem", "is_o_const_smul_left_iff", ["asymptotics"]], ["mod", "theorem", "is_o_const_smul_right", ["asymptotics"]], ["del", "theorem", "is_o_join", ["asymptotics"]], ["del", "theorem", "is_o_mul", ["asymptotics"]], ["del", "theorem", "is_o_mul_left", ["asymptotics"]], ["del", "theorem", "is_o_mul_right", ["asymptotics"]], ["mod", "theorem", "is_o_neg_left", ["asymptotics"]], ["mod", "theorem", "is_o_neg_right", ["asymptotics"]], ["mod", "theorem", "is_o_norm_left", ["asymptotics"]], ["add", "theorem", "is_o_norm_norm", ["asymptotics"]], ["mod", "theorem", "is_o_norm_right", ["asymptotics"]], ["del", "theorem", "is_o_of_is_o_const_mul_right", ["asymptotics"]], ["mod", "theorem", "is_o_one_iff", ["asymptotics"]], ["mod", "theorem", "is_o_prod_left", ["asymptotics"]], ["mod", "theorem", "is_o_refl_left", ["asymptotics"]], ["del", "theorem", "is_o_smul", ["asymptotics"]], ["mod", "theorem", "is_o_zero", ["asymptotics"]], ["mod", "theorem", "is_o_zero_right_iff", ["asymptotics"]], ["del", "theorem", "tendsto_nhds_zero_of_is_o", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1578357857, "sha": "69e07e25", "message": "chore(order/zorn): add docstrings, drop `chain.directed` (#1861)\n`chain.directed_on` is almost the same and uses a named predicate.", "changes": [{"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["del", "theorem", "directed", ["zorn", "chain"]], ["mod", "def", "succ_chain", ["zorn"]], ["mod", "def", "super_chain", ["zorn"]]]}]}, {"timestamp": 1578354515, "sha": "a1b73125", "message": "feat(topology/maps): a few lemmas about `is_open_map` (#1855)\n* feat(topology/maps): a few lemmas about `is_open_map`\nAlso fix arguments order in all `*.comp` in this file.\n* Use restricted version of `continuous_of_left_inverse` to prove non-restricted\n* Fix compile by reverting a name change", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "closed_embedding_subtype_val", ["is_closed"]], ["add", "theorem", "is_open_map_subtype_val", ["is_open"]], ["add", "theorem", "open_embedding_subtype_val", ["is_open"]], ["add", "theorem", "restrict", ["is_open_map"]], ["del", "theorem", "closed_embedding", ["subtype_val"]], ["del", "theorem", "open_embedding", ["subtype_val"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_on_image_of_left_inv_on", ["is_open_map"]], ["add", "theorem", "continuous_on_range_of_left_inverse", ["is_open_map"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "theorem", "comp", ["closed_embedding"]], ["mod", "theorem", "comp", ["embedding"]], ["del", "theorem", "comp", ["inducing"]], ["add", "theorem", "is_open_range", ["is_open_map"]], ["add", "theorem", "nhds_le", ["is_open_map"]], ["mod", "theorem", "is_open_map_iff_nhds_le", []], ["mod", "theorem", "comp", ["open_embedding"]], ["mod", "def", "quotient_map", []]]}]}, {"timestamp": 1578282573, "sha": "15c434a2", "message": "chore(*): various simple lemmas about `*_equiv`, add missing attrs (#1854)\n* chore(*): various simple lemmas about `*_equiv`, add missing attrs\n* Fix compile of `ring_theory/localization`", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["mod", "theorem", "map_eq_one_iff", ["mul_equiv"]], ["mod", "theorem", "map_ne_one_iff", ["mul_equiv"]], ["mod", "theorem", "map_add", ["ring_equiv"]], ["add", "theorem", "map_eq_one_iff", ["ring_equiv"]], ["add", "theorem", "map_eq_zero_iff", ["ring_equiv"]], ["mod", "theorem", "map_mul", ["ring_equiv"]], ["add", "theorem", "map_ne_one_iff", ["ring_equiv"]], ["add", "theorem", "map_ne_zero_iff", ["ring_equiv"]], ["mod", "theorem", "map_neg", ["ring_equiv"]], ["mod", "theorem", "map_neg_one", ["ring_equiv"]], ["mod", "theorem", "map_one", ["ring_equiv"]], ["mod", "theorem", "map_sub", ["ring_equiv"]], ["mod", "theorem", "map_zero", ["ring_equiv"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "to_bij_on", ["set", "inj_on"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "map_add", ["linear_equiv"]], ["add", "theorem", "map_eq_zero_iff", ["linear_equiv"]], ["add", "theorem", "map_ne_zero_iff", ["linear_equiv"]], ["add", "theorem", "map_neg", ["linear_equiv"]], ["add", "theorem", "map_smul", ["linear_equiv"]], ["add", "theorem", "map_sub", ["linear_equiv"]], ["add", "theorem", "map_zero", ["linear_equiv"]], ["mod", "def", "refl", ["linear_equiv"]], ["mod", "def", "symm", ["linear_equiv"]], ["add", "def", "to_add_equiv", ["linear_equiv"]], ["mod", "def", "trans", ["linear_equiv"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "coe_comp_coe_symm", ["continuous_linear_equiv"]], ["add", "theorem", "coe_symm_comp_coe", ["continuous_linear_equiv"]], ["add", "theorem", "map_eq_zero_iff", ["continuous_linear_equiv"]]]}]}, {"timestamp": 1578259517, "sha": "63670b59", "message": "feat(data/real/nnreal): add a few simple lemmas (#1856)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "div_mul_cancel", ["nnreal"]], ["add", "theorem", "div_pos", ["nnreal"]], ["add", "theorem", "half_pos", ["nnreal"]], ["add", "theorem", "mul_div_cancel'", ["nnreal"]], ["add", "theorem", "mul_div_cancel", ["nnreal"]]]}]}, {"timestamp": 1578151707, "sha": "585e107f", "message": "feat(topology/algebra/module): continuous linear equiv (#1839)\n* feat(topology/algebra/module): continuous linear equiv\n* linting\n* reviewer's comments", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "unique_diff_within_at_of_continuous_linear_equiv", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["mod", "theorem", "is_bounded_inv", ["linear_equiv"]], ["add", "def", "to_continuous_linear_equiv_of_continuous", ["linear_equiv"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "def", "to_continuous_linear_equiv", ["linear_equiv"]], ["add", "def", "to_continuous_linear_map", ["linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "smul", ["continuous"]], ["add", "theorem", "apply_symm_apply", ["continuous_linear_equiv"]], ["add", "theorem", "coe_apply", ["continuous_linear_equiv"]], ["add", "theorem", "coe_coe", ["continuous_linear_equiv"]], ["add", "theorem", "ext", ["continuous_linear_equiv"]], ["add", "theorem", "map_add", ["continuous_linear_equiv"]], ["add", "theorem", "map_neg", ["continuous_linear_equiv"]], ["add", "theorem", "map_smul", ["continuous_linear_equiv"]], ["add", "theorem", "map_sub", ["continuous_linear_equiv"]], ["add", "theorem", "map_zero", ["continuous_linear_equiv"]], ["add", "theorem", "symm_apply_apply", ["continuous_linear_equiv"]], ["add", "theorem", "symm_to_linear_equiv", ["continuous_linear_equiv"]], ["add", "def", "to_continuous_linear_map", ["continuous_linear_equiv"]], ["add", "def", "to_homeomorph", ["continuous_linear_equiv"]], ["add", "theorem", "trans_to_linear_equiv", ["continuous_linear_equiv"]], ["add", "structure", "continuous_linear_equiv", []], ["mod", "theorem", "add_comp", ["continuous_linear_map"]], ["mod", "theorem", "coe_add'", ["continuous_linear_map"]], ["mod", "theorem", "coe_add", ["continuous_linear_map"]], ["mod", "theorem", "coe_apply'", ["continuous_linear_map"]], ["mod", "theorem", "coe_apply", ["continuous_linear_map"]], ["mod", "theorem", "coe_coe", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp'", ["continuous_linear_map"]], ["mod", "theorem", "coe_comp", ["continuous_linear_map"]], ["mod", "theorem", "coe_id'", ["continuous_linear_map"]], ["mod", "theorem", "coe_id", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg'", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub'", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub", ["continuous_linear_map"]], ["mod", "theorem", "coe_zero'", ["continuous_linear_map"]], ["mod", "theorem", "coe_zero", ["continuous_linear_map"]], ["mod", "def", "comp", ["continuous_linear_map"]], ["mod", "theorem", "comp_add", ["continuous_linear_map"]], ["mod", "theorem", "comp_zero", ["continuous_linear_map"]], ["mod", "theorem", "ext", ["continuous_linear_map"]], ["mod", "theorem", "ext_iff", ["continuous_linear_map"]], ["mod", "def", "id", ["continuous_linear_map"]], ["mod", "theorem", "id_apply", ["continuous_linear_map"]], ["mod", "theorem", "map_zero", ["continuous_linear_map"]], ["mod", "theorem", "one_apply", ["continuous_linear_map"]], ["mod", "def", "prod", ["continuous_linear_map"]], ["mod", "def", "smul_right", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_apply", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_one_eq_iff", ["continuous_linear_map"]], ["mod", "theorem", "smul_right_one_one", ["continuous_linear_map"]], ["mod", "theorem", "sub_apply", ["continuous_linear_map"]], ["mod", "def", "zero", ["continuous_linear_map"]], ["mod", "theorem", "zero_apply", ["continuous_linear_map"]], ["mod", "theorem", "zero_comp", ["continuous_linear_map"]], ["mod", "theorem", "continuous_smul", []], ["mod", "theorem", "is_closed_map_smul_of_ne_zero", []], ["mod", "theorem", "is_closed_map_smul_of_unit", []], ["mod", "theorem", "is_open_map_smul_of_ne_zero", []], ["mod", "theorem", "is_open_map_smul_of_unit", []], ["mod", "def", "topological_vector_space", []]]}]}, {"timestamp": 1578003368, "sha": "5c3606dd", "message": "feat(order/filter/basic): define `filter.eventually` and `filter.frequently` (#1845)\n* feat(order/filter/basic): define `filter.eventually` and `filter.frequently`\nAs suggested in #119\n* More lemmas, use notation\n* Fix a typo\n* Update src/order/filter/basic.lean\nCo-Authored-By: Johan Commelin \n* Update src/order/filter/basic.lean\n* Add a short file docstring\n* Update src/order/filter/basic.lean", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "exists", ["filter", "eventually"]], ["add", "theorem", "frequently", ["filter", "eventually"]], ["add", "theorem", "mono", ["filter", "eventually"]], ["add", "theorem", "mp", ["filter", "eventually"]], ["add", "theorem", "eventually_false_iff_eq_bot", ["filter"]], ["add", "theorem", "eventually_of_forall", ["filter"]], ["add", "theorem", "eventually_true", ["filter"]], ["add", "theorem", "and_eventually", ["filter", "frequently"]], ["add", "theorem", "exists", ["filter", "frequently"]], ["add", "theorem", "mono", ["filter", "frequently"]], ["add", "theorem", "mp", ["filter", "frequently"]], ["add", "theorem", "frequently_iff_forall_eventually_exists_and", ["filter"]]]}]}, {"timestamp": 1577992224, "sha": "840bd1f5", "message": "feat(analysis/calculus/deriv): add aliases for `const op f` and `f op const` (#1843)\n* feat(analysis/calculus/deriv): add aliases for `const op f` and `f op const`\nOften this leads to simpler answers.\n* Docs\n* Fix compile of `mean_value.lean`\n* Drop comments, use `open_locale classical`", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_add_const", []], ["add", "theorem", "deriv_const_add", []], ["add", "theorem", "deriv_const_mul", []], ["add", "theorem", "deriv_const_smul", []], ["add", "theorem", "deriv_const_sub", []], ["add", "theorem", "deriv_mul_const", []], ["del", "theorem", "deriv_smul'", []], ["add", "theorem", "deriv_smul", []], ["add", "theorem", "deriv_smul_const", []], ["add", "theorem", "deriv_sub_const", []], ["add", "theorem", "deriv_within_add_const", []], ["add", "theorem", "deriv_within_const_add", []], ["add", "theorem", "deriv_within_const_mul", []], ["add", "theorem", "deriv_within_const_smul", []], ["add", "theorem", "deriv_within_const_sub", []], ["add", "theorem", "deriv_within_mul_const", []], ["del", "theorem", "deriv_within_smul'", []], ["add", "theorem", "deriv_within_smul", []], ["add", "theorem", "deriv_within_smul_const", []], ["add", "theorem", "deriv_within_sub_const", []], ["add", "theorem", "add_const", ["has_deriv_at"]], ["add", "theorem", "const_add", ["has_deriv_at"]], ["add", "theorem", "const_mul", ["has_deriv_at"]], ["add", "theorem", "const_smul", ["has_deriv_at"]], ["add", "theorem", "const_sub", ["has_deriv_at"]], ["add", "theorem", "mul_const", ["has_deriv_at"]], ["del", "theorem", "smul'", ["has_deriv_at"]], ["add", "theorem", "smul", ["has_deriv_at"]], ["add", "theorem", "smul_const", ["has_deriv_at"]], ["add", "theorem", "sub_const", ["has_deriv_at"]], ["add", "theorem", "add_const", ["has_deriv_at_filter"]], ["add", "theorem", "const_add", ["has_deriv_at_filter"]], ["add", "theorem", "const_sub", ["has_deriv_at_filter"]], ["add", "theorem", "sub_const", ["has_deriv_at_filter"]], ["add", "theorem", "add_const", ["has_deriv_within_at"]], ["add", "theorem", "const_add", ["has_deriv_within_at"]], ["add", "theorem", "const_mul", ["has_deriv_within_at"]], ["add", "theorem", "const_smul", ["has_deriv_within_at"]], ["add", "theorem", "const_sub", ["has_deriv_within_at"]], ["add", "theorem", "mul_const", ["has_deriv_within_at"]], ["del", "theorem", "smul'", ["has_deriv_within_at"]], ["add", "theorem", "smul", ["has_deriv_within_at"]], ["add", "theorem", "smul_const", ["has_deriv_within_at"]], ["add", "theorem", "sub_const", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "add_const", ["differentiable"]], ["add", "theorem", "const_add", ["differentiable"]], ["add", "theorem", "const_mul", ["differentiable"]], ["add", "theorem", "const_smul", ["differentiable"]], ["add", "theorem", "const_sub", ["differentiable"]], ["add", "theorem", "mul_const", ["differentiable"]], ["del", "theorem", "smul'", ["differentiable"]], ["mod", "theorem", "smul", ["differentiable"]], ["add", "theorem", "smul_const", ["differentiable"]], ["add", "theorem", "sub_const", ["differentiable"]], ["add", "theorem", "add_const", ["differentiable_at"]], ["add", "theorem", "const_add", ["differentiable_at"]], ["add", "theorem", "const_mul", ["differentiable_at"]], ["add", "theorem", "const_smul", ["differentiable_at"]], ["add", "theorem", "const_sub", ["differentiable_at"]], ["add", "theorem", "mul_const", ["differentiable_at"]], ["del", "theorem", "smul'", ["differentiable_at"]], ["mod", "theorem", "smul", ["differentiable_at"]], ["add", "theorem", "smul_const", ["differentiable_at"]], ["add", "theorem", "sub_const", ["differentiable_at"]], ["add", "theorem", "add_const", ["differentiable_on"]], ["add", "theorem", "const_add", ["differentiable_on"]], ["add", "theorem", "const_mul", ["differentiable_on"]], ["add", "theorem", "const_smul", ["differentiable_on"]], ["add", "theorem", "const_sub", ["differentiable_on"]], ["add", "theorem", "mul_const", ["differentiable_on"]], ["del", "theorem", "smul'", ["differentiable_on"]], ["mod", "theorem", "smul", ["differentiable_on"]], ["add", "theorem", "smul_const", ["differentiable_on"]], ["add", "theorem", "sub_const", ["differentiable_on"]], ["add", "theorem", "add_const", ["differentiable_within_at"]], ["add", "theorem", "const_add", ["differentiable_within_at"]], ["add", "theorem", "const_mul", ["differentiable_within_at"]], ["add", "theorem", "const_smul", ["differentiable_within_at"]], ["add", "theorem", "const_sub", ["differentiable_within_at"]], ["add", "theorem", "mul_const", ["differentiable_within_at"]], ["del", "theorem", "smul'", ["differentiable_within_at"]], ["mod", "theorem", "smul", ["differentiable_within_at"]], ["add", "theorem", "smul_const", ["differentiable_within_at"]], ["add", "theorem", "sub_const", ["differentiable_within_at"]], ["add", "theorem", "fderiv_add_const", []], ["add", "theorem", "fderiv_const_add", []], ["add", "theorem", "fderiv_const_mul", []], ["add", "theorem", "fderiv_const_smul", []], ["add", "theorem", "fderiv_const_sub", []], ["add", "theorem", "fderiv_mul_const", []], ["del", "theorem", "fderiv_smul'", []], ["mod", "theorem", "fderiv_smul", []], ["add", "theorem", "fderiv_smul_const", []], ["add", "theorem", "fderiv_sub_const", []], ["add", "theorem", "fderiv_within_add_const", []], ["add", "theorem", "fderiv_within_const_add", []], ["add", "theorem", "fderiv_within_const_mul", []], ["add", "theorem", "fderiv_within_const_smul", []], ["add", "theorem", "fderiv_within_const_sub", []], ["add", "theorem", "fderiv_within_mul_const", []], ["del", "theorem", "fderiv_within_smul'", []], ["add", "theorem", "fderiv_within_smul_const", []], ["add", "theorem", "fderiv_within_sub_const", []], ["add", "theorem", "add_const", ["has_fderiv_at"]], ["add", "theorem", "const_add", ["has_fderiv_at"]], ["add", "theorem", "const_mul", ["has_fderiv_at"]], ["add", "theorem", "const_smul", ["has_fderiv_at"]], ["add", "theorem", "const_sub", ["has_fderiv_at"]], ["add", "theorem", "mul_const", ["has_fderiv_at"]], ["del", "theorem", "smul'", ["has_fderiv_at"]], ["mod", "theorem", "smul", ["has_fderiv_at"]], ["add", "theorem", "smul_const", ["has_fderiv_at"]], ["add", "theorem", "sub_const", ["has_fderiv_at"]], ["add", "theorem", "add_const", ["has_fderiv_at_filter"]], ["add", "theorem", "const_add", ["has_fderiv_at_filter"]], ["add", "theorem", "const_smul", ["has_fderiv_at_filter"]], ["add", "theorem", "const_sub", ["has_fderiv_at_filter"]], ["del", "theorem", "smul", ["has_fderiv_at_filter"]], ["add", "theorem", "sub_const", ["has_fderiv_at_filter"]], ["add", "theorem", "add_const", ["has_fderiv_within_at"]], ["add", "theorem", "const_add", ["has_fderiv_within_at"]], ["add", "theorem", "const_mul", ["has_fderiv_within_at"]], ["add", "theorem", "const_smul", ["has_fderiv_within_at"]], ["add", "theorem", "const_sub", ["has_fderiv_within_at"]], ["add", "theorem", "mul_const", ["has_fderiv_within_at"]], ["del", "theorem", "smul'", ["has_fderiv_within_at"]], ["mod", "theorem", "smul", ["has_fderiv_within_at"]], ["add", "theorem", "smul_const", ["has_fderiv_within_at"]], ["add", "theorem", "sub_const", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "cexp", ["has_deriv_at"]], ["add", "theorem", "rexp", ["has_deriv_at"]], ["add", "theorem", "cexp", ["has_deriv_within_at"]], ["add", "theorem", "rexp", ["has_deriv_within_at"]]]}]}, {"timestamp": 1577990124, "sha": "7b18bbf9", "message": "feat(topology/algebra/ordered): add `*_mem_nhds_within_Ioi`, reorder args of `is_closed.Icc_subset_of_forall_exists_gt` (#1844)", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Icc_mem_nhds_within_Ioi", []], ["add", "theorem", "Ico_mem_nhds_within_Ioi", []], ["add", "theorem", "Ioc_mem_nhds_within_Ioi", []], ["add", "theorem", "Ioo_mem_nhds_within_Ioi", []], ["add", "theorem", "mem_nhds_within_Iio_iff_exists_mem_Ico_Ioo_subset", []], ["add", "theorem", "mem_nhds_within_Ioi_iff_exists_mem_Ioc_Ioo_subset", []]]}]}, {"timestamp": 1577961636, "sha": "033ecbfd", "message": "chore(topology/*): add a few more trivial `continuous_(within_)at` lemmas (#1842)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv", ["continuous_at"]], ["add", "theorem", "inv", ["continuous_within_at"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "mul", ["continuous_at"]], ["add", "theorem", "mul", ["continuous_within_at"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "continuous_at_const", []], ["add", "theorem", "continuous_at_id", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_on_id", []], ["add", "theorem", "continuous_within_at_const", []], ["add", "theorem", "continuous_within_at_id", []]]}]}, {"timestamp": 1577955852, "sha": "ffa97852", "message": "feat(topology/algebra/ordered): prove that `nhds_within (Ioi a) b ≠ ⊥` if `a ≤ b` (#1841)\n+ few similar statements\nAlso drop decidability assumption in `closure_Ioo` etc. We don't care\nabout using classical reasoning anyway, and usage of `classical.DLO`\nhere doesn't lead to any `noncomputable` defs.", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "nhds_within_Iio_ne_bot'", []], ["add", "theorem", "nhds_within_Iio_ne_bot", []], ["add", "theorem", "nhds_within_Iio_self_ne_bot'", []], ["add", "theorem", "nhds_within_Iio_self_ne_bot", []], ["add", "theorem", "nhds_within_Ioi_ne_bot'", []], ["add", "theorem", "nhds_within_Ioi_ne_bot", []], ["add", "theorem", "nhds_within_Ioi_self_ne_bot'", []], ["add", "theorem", "nhds_within_Ioi_self_ne_bot", []]]}]}, {"timestamp": 1577916799, "sha": "d08d5095", "message": "fix(metric_space/gromo_hausdorff): lemma should be instance + linting (#1840)", "changes": [{"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": [["mod", "theorem", "GH_dist_le_of_approx_subsets", ["Gromov_Hausdorff"]], ["del", "theorem", "second_countable", ["Gromov_Hausdorff"]]]}]}, {"timestamp": 1577609543, "sha": "acf2038a", "message": "feat(analysis/calculus/mean_value): more corollaries of the MVT (#1819)\n* feat(analysis/calculus/mean_value): more corolaries of the MVT\n* Fix compile, add \"strict inequalities\" versions of some theorems, add docs\n* Update src/analysis/calculus/mean_value.lean\n* Add theorems for `convex_on univ`\n* Fix comments\n* @sgouezel adds missing articles\nThanks a lot! We don't have them in Russian, so it's hard for me to put them right.\nCo-Authored-By: sgouezel \n* Update src/analysis/calculus/mean_value.lean\nCo-Authored-By: sgouezel \n* Add more `univ` versions", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "antimono_of_deriv_nonpos", []], ["add", "theorem", "antimono_of_deriv_nonpos", ["convex"]], ["add", "theorem", "image_sub_le_mul_sub_of_deriv_le", ["convex"]], ["add", "theorem", "image_sub_lt_mul_sub_of_deriv_lt", ["convex"]], ["add", "theorem", "mono_of_deriv_nonneg", ["convex"]], ["add", "theorem", "mul_sub_le_image_sub_of_le_deriv", ["convex"]], ["add", "theorem", "mul_sub_lt_image_sub_of_lt_deriv", ["convex"]], ["add", "theorem", "strict_antimono_of_deriv_neg", ["convex"]], ["add", "theorem", "strict_mono_of_deriv_pos", ["convex"]], ["add", "theorem", "convex_on_of_deriv2_nonneg", []], ["add", "theorem", "convex_on_of_deriv_mono", []], ["add", "theorem", "convex_on_univ_of_deriv2_nonneg", []], ["add", "theorem", "convex_on_univ_of_deriv_mono", []], ["add", "theorem", "image_sub_le_mul_sub_of_deriv_le", []], ["add", "theorem", "image_sub_lt_mul_sub_of_deriv_lt", []], ["add", "theorem", "is_const_of_fderiv_eq_zero", []], ["add", "theorem", "mono_of_deriv_nonneg", []], ["add", "theorem", "mul_sub_le_image_sub_of_le_deriv", []], ["add", "theorem", "mul_sub_lt_image_sub_of_lt_deriv", []], ["add", "theorem", "strict_antimono_of_deriv_neg", []], ["add", "theorem", "strict_mono_of_deriv_pos", []]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": [["del", "theorem", "convex_on_linorder", []], ["add", "theorem", "convex_on_real_of_slope_mono_adjacent", []], ["add", "theorem", "convex_on_of_lt", ["linear_order"]]]}]}, {"timestamp": 1577565063, "sha": "64770a89", "message": "feat(analysis/calculus/deriv): Prove equivalence of Fréchet derivative and the classical definition (#1834)\n* feat(analysis/calculus/deriv): Prove equivalence of Fréchet derivative and the classical definition\n* Fix a typo\n* Move, change doc, add versions for `has_deriv_within_at` and `has_deriv_at`.\n* Fix docstring, remove an unsed argument", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "has_deriv_at_filter_iff_tendsto_slope", []], ["add", "theorem", "has_deriv_at_iff_tendsto_slope", []], ["add", "theorem", "has_deriv_within_at_iff_tendsto_slope", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "theorem", "congr'r", ["filter", "tendsto"]], ["add", "theorem", "tendsto_congr'", ["filter"]], ["add", "theorem", "tendsto_congr", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "tendsto_inf_principal_nhds_iff_of_forall_eq", []]]}]}, {"timestamp": 1577538105, "sha": "e43905be", "message": "refactor(topology/algebra/ordered): formulate a few \"Icc induction\" principles (#1833)\n* refactor(topology/algebra/ordered): use `tfae`, prove equality of some `nhds_within`\n* Add missing `order_dual.*` instances\n* Try to fix the build\n* Fix formatting, rename some variables\n* refactor(topology/algebra/ordered): formulate a few \"Icc induction\" principles\nThey have other applications than proving `is_connected_Icc`.\n* Fix doc\nCo-Authored-By: sgouezel \n* Rephraze docs\n* Drop an unused argument", "changes": [{"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "Icc_subset_of_forall_exists_gt", ["is_closed"]], ["add", "theorem", "Icc_subset_of_forall_mem_nhds_within", ["is_closed"]], ["add", "theorem", "mem_of_ge_of_forall_exists_gt", ["is_closed"]]]}]}, {"timestamp": 1577533362, "sha": "a6a8a11e", "message": "refactor(data/equiv/encodable): bring `directed.sequence*` from `integration`, use `quotient.rep` instead of `quot.rep` (#1825)\n* refactor(data/equiv/encodable): bring `directed.sequence*` from `integration`, use `quotient.rep` instead of `quot.rep`\n`sequence_of_directed` in `measure_theory/integration` did not belong\nthere.\nAlso add some docstrings.\n* doc/style fixes by @sgouezel\nCo-Authored-By: sgouezel \n* Remove an unused argument, add a docstring\n* Completely remove the `reflexive r` assumption", "changes": [{"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": [["add", "theorem", "le_sequence", ["directed"]], ["add", "theorem", "rel_sequence", ["directed"]], ["add", "theorem", "sequence_mono", ["directed"]], ["add", "theorem", "sequence_mono_nat", ["directed"]], ["add", "def", "encodable_quotient", []], ["del", "def", "encodable_quotient", ["quot"]], ["del", "def", "rep", ["quot"]], ["del", "theorem", "rep_spec", ["quot"]], ["add", "def", "rep", ["quotient"]], ["add", "theorem", "rep_spec", ["quotient"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["del", "theorem", "le_sequence_of_directed", []], ["add", "theorem", "seq_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "monotone_sequence_of_directed", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "all_ae_of_all", ["measure_theory"]]]}]}, {"timestamp": 1577527530, "sha": "340fa146", "message": "feat(analysis/specific_limits): add a few more limits (#1832)\n* feat(analysis/specific_limits): add a few more limits\n* Drop 1 lemma, generalize two others.\n* Rename `tendsto_inverse_at_top_nhds_0`, fix compile", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "lim_norm_zero'", []], ["add", "theorem", "tendsto_norm_inverse_nhds_within_0_at_top", ["normed_field"]], ["add", "theorem", "tendsto_inv_at_top_zero'", []], ["add", "theorem", "tendsto_inv_at_top_zero", []], ["del", "theorem", "tendsto_inverse_at_top_nhds_0", []], ["add", "theorem", "tendsto_norm_at_top_at_top", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "tendsto_abs_at_top_at_top", []]]}]}, {"timestamp": 1577478369, "sha": "0a9a1ff4", "message": "refactor(topology/algebra/ordered): use `tfae`, prove equality of some `nhds_within` (#1831)\n* refactor(topology/algebra/ordered): use `tfae`, prove equality of some `nhds_within`\n* Add missing `order_dual.*` instances\n* Try to fix the build\n* Fix formatting, rename some variables\n* Fix compile", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "nhds_within_Ico_eq_nhds_within_Iio", []], ["add", "theorem", "nhds_within_Ioc_eq_nhds_within_Ioi", []], ["add", "theorem", "nhds_within_Ioo_eq_nhds_within_Iio", []], ["add", "theorem", "nhds_within_Ioo_eq_nhds_within_Ioi", []], ["add", "theorem", "tfae_mem_nhds_within_Iio", []], ["add", "theorem", "tfae_mem_nhds_within_Ioi", []]]}]}, {"timestamp": 1577470290, "sha": "82ca7318", "message": "refactor(calculus): simplify derivative extension (#1826)\n* refactor(calculus): simplify derivative extension\n* generalize continuous_within_at.closure_le\n* Simplify proof following Sébastien\n* Update src/analysis/calculus/extend_deriv.lean", "changes": [{"oldPath": "src/analysis/calculus/extend_deriv.lean", "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "closure_le", ["continuous_within_at"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "image_closure", ["continuous_within_at"]], ["add", "theorem", "mem_closure", ["continuous_within_at"]], ["add", "theorem", "nhds_within_prod_eq", []]]}]}, {"timestamp": 1577460917, "sha": "3a78f49a", "message": "feat(order/basic): add `dual_le` and `dual_lt` lemmas (#1830)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "dual_le", ["order_dual"]], ["add", "theorem", "dual_lt", ["order_dual"]]]}]}, {"timestamp": 1577455528, "sha": "c9a81b00", "message": "refactor(*): unify API of `list/multiset/finset.prod_hom` (#1820)\n* refactor(*): unify API of `list/multiset/finset.prod_hom`\nAlso remove `is_group_hom.map_prod`; use `*.prod_hom.symm` or\n`monoid_hom.map_*prod` instead.\n* Update src/ring_theory/ideal_operations.lean\nCo-Authored-By: sgouezel \n* Restore explicit args of `list.fold(l/r)_hom`\n* Fix `group_theory/perm/sign`\n* Fix `quadratic_reciprocity`\n* Fix compile", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_hom", ["finset"]], ["del", "theorem", "map_finset_prod", ["is_group_hom"]], ["del", "theorem", "map_multiset_prod", ["is_group_hom"]], ["del", "theorem", "map_prod", ["is_group_hom"]], ["add", "theorem", "map_prod", ["monoid_hom"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_list_sum", ["complex"]], ["add", "theorem", "exp_multiset_sum", ["complex"]], ["add", "theorem", "exp_sum", ["complex"]], ["add", "theorem", "exp_list_sum", ["real"]], ["add", "theorem", "exp_multiset_sum", ["real"]], ["add", "theorem", "exp_sum", ["real"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "foldl_hom", ["list"]], ["mod", "theorem", "foldl_map", ["list"]], ["mod", "theorem", "foldr_hom", ["list"]], ["mod", "theorem", "foldr_map", ["list"]], ["add", "theorem", "prod_hom", ["list"]], ["add", "theorem", "prod_hom_rel", ["list"]], ["add", "theorem", "map_list_prod", ["monoid_hom"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "map_multiset_prod", ["monoid_hom"]], ["mod", "theorem", "prod_hom", ["multiset"]], ["add", "theorem", "prod_hom_rel", ["multiset"]], ["del", "theorem", "sum_hom", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/pnat/factors.lean", "newPath": "src/data/pnat/factors.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_list_prod", ["nnreal"]], ["add", "theorem", "coe_list_sum", ["nnreal"]], ["add", "theorem", "coe_multiset_prod", ["nnreal"]], ["add", "theorem", "coe_multiset_sum", ["nnreal"]], ["add", "theorem", "coe_prod", ["nnreal"]], ["add", "theorem", "coe_sum", ["nnreal"]], ["del", "theorem", "prod_coe", ["nnreal"]], ["del", "theorem", "sum_coe", ["nnreal"]]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}]}, {"timestamp": 1577450425, "sha": "0a87dd8c", "message": "feat(topology/basic): a few simple lemmas (#1829)\n* feat(topology/basic): a few simple lemmas\n* Fix compile", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "closure_inter_subset_inter_closure", []], ["add", "theorem", "frontier_inter_subset", []], ["add", "theorem", "frontier_union_subset", []], ["add", "theorem", "frontier_eq", ["is_closed"]], ["add", "theorem", "frontier_eq", ["is_open"]], ["add", "theorem", "monotone_closure", []]]}]}, {"timestamp": 1577444904, "sha": "89854fa3", "message": "refactor(analysis/calculus/deriv): Use equality of functions (#1818)\n* refactor(analysis/calculus/deriv): Use equality of functions\nThis way we can rewrite, e.g., in `deriv (deriv sin)`.\n* Restore some old lemmas\n* Restore old `deriv_cos`, fix `deriv_id'`\n* Update src/analysis/calculus/deriv.lean\nCo-Authored-By: Johan Commelin \n* Fix compile", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_const'", []], ["add", "theorem", "deriv_id'", []], ["mod", "theorem", "deriv_id", []], ["add", "theorem", "deriv_neg'", []], ["mod", "theorem", "deriv_neg", []], ["add", "theorem", "deriv_pow'", []], ["mod", "theorem", "deriv_pow", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "deriv_cos'", ["complex"]], ["mod", "theorem", "deriv_cos", ["complex"]], ["mod", "theorem", "deriv_cosh", ["complex"]], ["mod", "theorem", "deriv_exp", ["complex"]], ["mod", "theorem", "deriv_sin", ["complex"]], ["mod", "theorem", "deriv_sinh", ["complex"]], ["add", "theorem", "iter_deriv_exp", ["complex"]], ["add", "theorem", "deriv_cos'", ["real"]], ["mod", "theorem", "deriv_cos", ["real"]], ["mod", "theorem", "deriv_cosh", ["real"]], ["mod", "theorem", "deriv_exp", ["real"]], ["mod", "theorem", "deriv_sin", ["real"]], ["mod", "theorem", "deriv_sinh", ["real"]], ["add", "theorem", "iter_deriv_exp", ["real"]]]}]}, {"timestamp": 1577439718, "sha": "c1a993d9", "message": "feat(data/set/intervals): unions of adjacent intervals (#1827)", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Icc_union_Icc_eq_Icc", ["set"]], ["add", "theorem", "Icc_union_Ici_eq_Ioi", ["set"]], ["add", "theorem", "Icc_union_Ico_eq_Ico", ["set"]], ["add", "theorem", "Icc_union_Ioc_eq_Icc", ["set"]], ["add", "theorem", "Icc_union_Ioi_eq_Ioi", ["set"]], ["add", "theorem", "Icc_union_Ioo_eq_Ico", ["set"]], ["add", "theorem", "Ico_union_Icc_eq_Icc", ["set"]], ["add", "theorem", "Ico_union_Ici_eq_Ioi", ["set"]], ["add", "theorem", "Ico_union_Ico_eq_Ico", ["set"]], ["add", "theorem", "Iic_union_Icc_eq_Iic", ["set"]], ["mod", "theorem", "Iic_union_Ici", ["set"]], ["add", "theorem", "Iic_union_Ico_eq_Iio", ["set"]], ["add", "theorem", "Iic_union_Ioc_eq_Iic", ["set"]], ["mod", "theorem", "Iic_union_Ioi", ["set"]], ["add", "theorem", "Iic_union_Ioo_eq_Iio", ["set"]], ["add", "theorem", "Iio_union_Icc_eq_Iic", ["set"]], ["mod", "theorem", "Iio_union_Ici", ["set"]], ["add", "theorem", "Iio_union_Ico_eq_Iio", ["set"]], ["add", "theorem", "Ioc_union_Icc_eq_Ioc", ["set"]], ["add", "theorem", "Ioc_union_Ici_eq_Ioi", ["set"]], ["add", "theorem", "Ioc_union_Ico_eq_Ioo", ["set"]], ["add", "theorem", "Ioc_union_Ioc_eq_Ioc", ["set"]], ["add", "theorem", "Ioc_union_Ioi_eq_Ioi", ["set"]], ["add", "theorem", "Ioc_union_Ioo_eq_Ioo", ["set"]], ["add", "theorem", "Ioo_union_Icc_eq_Ioc", ["set"]], ["add", "theorem", "Ioo_union_Ici_eq_Ioi", ["set"]], ["add", "theorem", "Ioo_union_Ico_eq_Ioo", ["set"]], ["mod", "theorem", "nonempty_Ici", ["set"]], ["mod", "theorem", "nonempty_Iic", ["set"]], ["add", "theorem", "nonempty_Ioo", ["set"]]]}]}, {"timestamp": 1577378052, "sha": "7e2d4b85", "message": "feat(analysis/calculus/extend_deriv): extend differentiability to the boundary (#1794)\n* feat(analysis/calculus/extend_deriv): extend differentiability to the boundary\n* fix build", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "congr", ["has_deriv_within_at"]], ["add", "theorem", "union", ["has_deriv_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/extend_deriv.lean", "changes": [["add", "theorem", "has_deriv_at_interval_left_endpoint_of_tendsto_deriv", []], ["add", "theorem", "has_fderiv_at_boundary_of_tendsto_fderiv", []], ["add", "theorem", "has_fderiv_at_boundary_of_tendsto_fderiv_aux", []], ["add", "theorem", "has_fderiv_at_interval_right_endpoint_of_tendsto_deriv", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "congr", ["has_fderiv_within_at"]], ["add", "theorem", "union", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_inv_zero_at_top", []]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Iic_union_Ici", ["set"]], ["add", "theorem", "Iic_union_Ioi", ["set"]], ["add", "theorem", "Iio_union_Ici", ["set"]]]}]}, {"timestamp": 1577166016, "sha": "9a9f617a", "message": "fix(topology/algebra/infinite_sum): add a hint to speed up elaboration (#1824)\nFix suggested by Joe on Zulip.", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1577143978, "sha": "64921a4c", "message": "refactor(topology/*): migrate to `uniform_space.complete_of_convergent_controlled_sequences` (#1821)\n* refactor(topology/*): migrate to `uniform_space.complete_of_convergent_controlled_sequences`\nAlso rewrite\n`uniform_space.complete_of_convergent_controlled_sequences` in terms\nof `has_countable_basis`, and add a lemma useful to prove\n`l = ⨅ i, f i` for filters.\n* Revert some implicit/explicit argument changes\nNo reason to have them, at least in this PR\n* Fix docstrings\n* Fix a docstring\n* Fix imports\n* `cau_seq_filter`: change namespaces, adjust `hensel`\n* Fix compile\n* Update src/topology/metric_space/cau_seq_filter.lean\n* Update src/topology/uniform_space/cauchy.lean", "changes": [{"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "eq_Inf_of_mem_sets_iff_exists_mem", ["filter"]], ["add", "theorem", "eq_binfi_of_mem_sets_iff_exists_mem", ["filter"]], ["add", "theorem", "eq_infi_of_mem_sets_iff_exists_mem", ["filter"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "comap", ["filter", "has_countable_basis"]], ["add", "theorem", "has_countable_basis_iff_mono_seq'", ["filter"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "complete_of_cauchy_seq_tendsto", ["metric"]], ["add", "theorem", "complete_of_convergent_controlled_sequences", ["metric"]]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": [["add", "theorem", "cauchy_seq", ["cau_seq"]], ["add", "theorem", "tendsto_limit", ["cau_seq"]], ["del", "theorem", "cauchy_of_filter_cauchy", []], ["add", "theorem", "is_cau_seq", ["cauchy_seq"]], ["del", "theorem", "complete_of_cauchy_seq_tendsto", []], ["del", "theorem", "complete_of_convergent_controlled_sequences", ["emetric"]], ["del", "theorem", "cauchy_seq_of_edist_le_half_pow", ["ennreal"]], ["del", "theorem", "edist_le_two_mul_half_pow", ["ennreal"]], ["del", "theorem", "half_pow_add_succ", ["ennreal"]], ["del", "theorem", "half_pow_mono", ["ennreal"]], ["del", "theorem", "half_pow_pos", ["ennreal"]], ["del", "theorem", "half_pow_tendsto_zero", ["ennreal"]], ["del", "theorem", "filter_cauchy_of_cauchy", []], ["del", "theorem", "complete_of_convergent_controlled_sequences", ["metric"]], ["del", "theorem", "B2_lim", ["sequentially_complete"]], ["del", "theorem", "B2_pos", ["sequentially_complete"]], ["del", "theorem", "le_nhds_cau_filter_lim", ["sequentially_complete"]], ["del", "theorem", "mono_of_mono_succ", ["sequentially_complete"]], ["del", "theorem", "seq_of_cau_filter_bound", ["sequentially_complete"]], ["del", "theorem", "seq_of_cau_filter_is_cauchy", ["sequentially_complete"]], ["del", "theorem", "seq_of_cau_filter_mem_set_seq", ["sequentially_complete"]], ["del", "def", "set_seq_of_cau_filter", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_inhabited", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_mem_sets", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_monotone'", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_monotone", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_spec", ["sequentially_complete"]], ["del", "theorem", "tendsto_limit", []]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "complete_of_cauchy_seq_tendsto", ["emetric"]], ["add", "theorem", "complete_of_convergent_controlled_sequences", ["emetric"]], ["add", "theorem", "uniformity_has_countable_basis", ["emetric"]], ["add", "theorem", "mem_uniformity_edist_inv_nat", []], ["add", "theorem", "uniformity_edist_inv_nat", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "theorem", "complete_of_convergent_controlled_sequences", ["uniform_space"]]]}]}, {"timestamp": 1577139226, "sha": "439ac4e9", "message": "feat(analysis/calculus/local_extr): Fermat's Theorem, Rolle's Theorem, Lagrange's MVT, Cauchy's MVT (#1807)\n* feat(analysis/calculus/local_extr): Rolle's Theorem, Lagrange's MVT, Cauchy's MVT\n* feat(order/filter/extr,topology/algebra/local_extr): local min/max points\nThis commit contains facts that do not require smooth structure on the domain.\n* Rewrite: introduce `is_min_filter`, `pos_tangent_cone_at`.\n* Fix compile, move code around\n* Drop a TODO, add some docs\n* Fix compile\n* Fix a typo\n* Fix #lint error\n* Add some docstrings\n* Add some missing lemmas\n* Use `differentiable_on`\n* Add/rewrite file-level docs, rename some lemmas.\n* Update src/analysis/calculus/local_extr.lean\n* Update src/order/filter/extr.lean\n* Fix a docstring, add Wiki links\n* Add refs and tags\n* File docstring: provide Lean names of the main lemmas.\n* Update src/analysis/calculus/local_extr.lean\n* Update src/analysis/calculus/local_extr.lean", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "has_deriv_at", ["has_deriv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "has_fderiv_at", ["has_fderiv_within_at"]]]}, {"oldPath": null, "newPath": "src/analysis/calculus/local_extr.lean", "changes": [["add", "theorem", "exists_Ioo_extr_on_Icc", []], ["add", "theorem", "exists_deriv_eq_zero", []], ["add", "theorem", "exists_has_deriv_at_eq_zero", []], ["add", "theorem", "exists_local_extr_Ioo", []], ["add", "theorem", "deriv_eq_zero", ["is_local_extr"]], ["add", "theorem", "fderiv_eq_zero", ["is_local_extr"]], ["add", "theorem", "has_deriv_at_eq_zero", ["is_local_extr"]], ["add", "theorem", "has_fderiv_at_eq_zero", ["is_local_extr"]], ["add", "theorem", "deriv_eq_zero", ["is_local_max"]], ["add", "theorem", "fderiv_eq_zero", ["is_local_max"]], ["add", "theorem", "has_deriv_at_eq_zero", ["is_local_max"]], ["add", "theorem", "has_fderiv_at_eq_zero", ["is_local_max"]], ["add", "theorem", "fderiv_within_eq_zero", ["is_local_max_on"]], ["add", "theorem", "fderiv_within_nonpos", ["is_local_max_on"]], ["add", "theorem", "has_fderiv_within_at_eq_zero", ["is_local_max_on"]], ["add", "theorem", "has_fderiv_within_at_nonpos", ["is_local_max_on"]], ["add", "theorem", "deriv_eq_zero", ["is_local_min"]], ["add", "theorem", "fderiv_eq_zero", ["is_local_min"]], ["add", "theorem", "has_deriv_at_eq_zero", ["is_local_min"]], ["add", "theorem", "has_fderiv_at_eq_zero", ["is_local_min"]], ["add", "theorem", "fderiv_within_eq_zero", ["is_local_min_on"]], ["add", "theorem", "fderiv_within_nonneg", ["is_local_min_on"]], ["add", "theorem", "has_fderiv_within_at_eq_zero", ["is_local_min_on"]], ["add", "theorem", "has_fderiv_within_at_nonneg", ["is_local_min_on"]], ["add", "theorem", "mem_pos_tangent_cone_at_of_segment_subset", []], ["add", "def", "pos_tangent_cone_at", []], ["add", "theorem", "pos_tangent_cone_at_mono", []], ["add", "theorem", "pos_tangent_cone_at_univ", []]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "is_const_of_fderiv_within_eq_zero", ["convex"]], ["add", "theorem", "norm_image_sub_le_of_norm_deriv_le", ["convex"]], ["add", "theorem", "exists_deriv_eq_slope", []], ["add", "theorem", "exists_has_deriv_at_eq_slope", []], ["add", "theorem", "exists_ratio_deriv_eq_ratio_slope", []], ["add", "theorem", "exists_ratio_has_deriv_at_eq_ratio_slope", []], ["del", "theorem", "norm_image_sub_le_of_norm_deriv_le_convex", []]]}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/filter/extr.lean", "changes": [["add", "theorem", "comp_antimono", ["is_extr_filter"]], ["add", "theorem", "comp_mono", ["is_extr_filter"]], ["add", "theorem", "comp_tendsto", ["is_extr_filter"]], ["add", "theorem", "filter_inf", ["is_extr_filter"]], ["add", "theorem", "filter_mono", ["is_extr_filter"]], ["add", "theorem", "neg", ["is_extr_filter"]], ["add", "def", "is_extr_filter", []], ["add", "theorem", "is_extr_filter_const", []], ["add", "theorem", "is_extr_filter_dual_iff", []], ["add", "theorem", "comp_antimono", ["is_extr_on"]], ["add", "theorem", "comp_mono", ["is_extr_on"]], ["add", "theorem", "elim", ["is_extr_on"]], ["add", "theorem", "inter", ["is_extr_on"]], ["add", "theorem", "neg", ["is_extr_on"]], ["add", "theorem", "on_preimage", ["is_extr_on"]], ["add", "theorem", "on_subset", ["is_extr_on"]], ["add", "def", "is_extr_on", []], ["add", "theorem", "is_extr_on_const", []], ["add", "theorem", "is_extr_on_dual_iff", []], ["add", "theorem", "add", ["is_max_filter"]], ["add", "theorem", "bicomp_mono", ["is_max_filter"]], ["add", "theorem", "comp_antimono", ["is_max_filter"]], ["add", "theorem", "comp_mono", ["is_max_filter"]], ["add", "theorem", "comp_tendsto", ["is_max_filter"]], ["add", "theorem", "filter_inf", ["is_max_filter"]], ["add", "theorem", "filter_mono", ["is_max_filter"]], ["add", "theorem", "inf", ["is_max_filter"]], ["add", "theorem", "is_extr", ["is_max_filter"]], ["add", "theorem", "max", ["is_max_filter"]], ["add", "theorem", "min", ["is_max_filter"]], ["add", "theorem", "neg", ["is_max_filter"]], ["add", "theorem", "sub", ["is_max_filter"]], ["add", "theorem", "sup", ["is_max_filter"]], ["add", "def", "is_max_filter", []], ["add", "theorem", "is_max_filter_const", []], ["add", "theorem", "is_max_filter_dual_iff", []], ["add", "theorem", "add", ["is_max_on"]], ["add", "theorem", "bicomp_mono", ["is_max_on"]], ["add", "theorem", "comp_antimono", ["is_max_on"]], ["add", "theorem", "comp_mono", ["is_max_on"]], ["add", "theorem", "inf", ["is_max_on"]], ["add", "theorem", "inter", ["is_max_on"]], ["add", "theorem", "is_extr", ["is_max_on"]], ["add", "theorem", "max", ["is_max_on"]], ["add", "theorem", "min", ["is_max_on"]], ["add", "theorem", "neg", ["is_max_on"]], ["add", "theorem", "on_preimage", ["is_max_on"]], ["add", "theorem", "on_subset", ["is_max_on"]], ["add", "theorem", "sub", ["is_max_on"]], ["add", "theorem", "sup", ["is_max_on"]], ["add", "def", "is_max_on", []], ["add", "theorem", "is_max_on_const", []], ["add", "theorem", "is_max_on_dual_iff", []], ["add", "theorem", "is_max_on_iff", []], ["add", "theorem", "is_max_on_univ_iff", []], ["add", "theorem", "add", ["is_min_filter"]], ["add", "theorem", "bicomp_mono", ["is_min_filter"]], ["add", "theorem", "comp_antimono", ["is_min_filter"]], ["add", "theorem", "comp_mono", ["is_min_filter"]], ["add", "theorem", "comp_tendsto", ["is_min_filter"]], ["add", "theorem", "filter_inf", ["is_min_filter"]], ["add", "theorem", "filter_mono", ["is_min_filter"]], ["add", "theorem", "inf", ["is_min_filter"]], ["add", "theorem", "is_extr", ["is_min_filter"]], ["add", "theorem", "max", ["is_min_filter"]], ["add", "theorem", "min", ["is_min_filter"]], ["add", "theorem", "neg", ["is_min_filter"]], ["add", "theorem", "sub", ["is_min_filter"]], ["add", "theorem", "sup", ["is_min_filter"]], ["add", "def", "is_min_filter", []], ["add", "theorem", "is_min_filter_const", []], ["add", "theorem", "is_min_filter_dual_iff", []], ["add", "theorem", "add", ["is_min_on"]], ["add", "theorem", "bicomp_mono", ["is_min_on"]], ["add", "theorem", "comp_antimono", ["is_min_on"]], ["add", "theorem", "comp_mono", ["is_min_on"]], ["add", "theorem", "inf", ["is_min_on"]], ["add", "theorem", "inter", ["is_min_on"]], ["add", "theorem", "is_extr", ["is_min_on"]], ["add", "theorem", "max", ["is_min_on"]], ["add", "theorem", "min", ["is_min_on"]], ["add", "theorem", "neg", ["is_min_on"]], ["add", "theorem", "on_preimage", ["is_min_on"]], ["add", "theorem", "on_subset", ["is_min_on"]], ["add", "theorem", "sub", ["is_min_on"]], ["add", "theorem", "sup", ["is_min_on"]], ["add", "def", "is_min_on", []], ["add", "theorem", "is_min_on_const", []], ["add", "theorem", "is_min_on_dual_iff", []], ["add", "theorem", "is_min_on_iff", []], ["add", "theorem", "is_min_on_univ_iff", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/local_extr.lean", "changes": [["add", "theorem", "is_local_extr", ["is_extr_on"]], ["add", "theorem", "localize", ["is_extr_on"]], ["add", "theorem", "comp_antimono", ["is_local_extr"]], ["add", "theorem", "comp_continuous", ["is_local_extr"]], ["add", "theorem", "comp_continuous_on", ["is_local_extr"]], ["add", "theorem", "comp_mono", ["is_local_extr"]], ["add", "theorem", "elim", ["is_local_extr"]], ["add", "theorem", "neg", ["is_local_extr"]], ["add", "theorem", "on", ["is_local_extr"]], ["add", "def", "is_local_extr", []], ["add", "theorem", "is_local_extr_const", []], ["add", "theorem", "comp_antimono", ["is_local_extr_on"]], ["add", "theorem", "comp_mono", ["is_local_extr_on"]], ["add", "theorem", "elim", ["is_local_extr_on"]], ["add", "theorem", "inter", ["is_local_extr_on"]], ["add", "theorem", "is_local_extr", ["is_local_extr_on"]], ["add", "theorem", "neg", ["is_local_extr_on"]], ["add", "theorem", "on_subset", ["is_local_extr_on"]], ["add", "def", "is_local_extr_on", []], ["add", "theorem", "is_local_extr_on_const", []], ["add", "theorem", "add", ["is_local_max"]], ["add", "theorem", "bicomp_mono", ["is_local_max"]], ["add", "theorem", "comp_antimono", ["is_local_max"]], ["add", "theorem", "comp_continuous", ["is_local_max"]], ["add", "theorem", "comp_continuous_on", ["is_local_max"]], ["add", "theorem", "comp_mono", ["is_local_max"]], ["add", "theorem", "inf", ["is_local_max"]], ["add", "theorem", "max", ["is_local_max"]], ["add", "theorem", "min", ["is_local_max"]], ["add", "theorem", "neg", ["is_local_max"]], ["add", "theorem", "on", ["is_local_max"]], ["add", "theorem", "sub", ["is_local_max"]], ["add", "theorem", "sup", ["is_local_max"]], ["add", "def", "is_local_max", []], ["add", "theorem", "is_local_max_const", []], ["add", "theorem", "add", ["is_local_max_on"]], ["add", "theorem", "bicomp_mono", ["is_local_max_on"]], ["add", "theorem", "comp_antimono", ["is_local_max_on"]], ["add", "theorem", "comp_mono", ["is_local_max_on"]], ["add", "theorem", "inf", ["is_local_max_on"]], ["add", "theorem", "inter", ["is_local_max_on"]], ["add", "theorem", "is_local_max", ["is_local_max_on"]], ["add", "theorem", "max", ["is_local_max_on"]], ["add", "theorem", "min", ["is_local_max_on"]], ["add", "theorem", "neg", ["is_local_max_on"]], ["add", "theorem", "on_subset", ["is_local_max_on"]], ["add", "theorem", "sub", ["is_local_max_on"]], ["add", "theorem", "sup", ["is_local_max_on"]], ["add", "def", "is_local_max_on", []], ["add", "theorem", "is_local_max_on_const", []], ["add", "theorem", "add", ["is_local_min"]], ["add", "theorem", "bicomp_mono", ["is_local_min"]], ["add", "theorem", "comp_antimono", ["is_local_min"]], ["add", "theorem", "comp_continuous", ["is_local_min"]], ["add", "theorem", "comp_continuous_on", ["is_local_min"]], ["add", "theorem", "comp_mono", ["is_local_min"]], ["add", "theorem", "inf", ["is_local_min"]], ["add", "theorem", "max", ["is_local_min"]], ["add", "theorem", "min", ["is_local_min"]], ["add", "theorem", "neg", ["is_local_min"]], ["add", "theorem", "on", ["is_local_min"]], ["add", "theorem", "sub", ["is_local_min"]], ["add", "theorem", "sup", ["is_local_min"]], ["add", "def", "is_local_min", []], ["add", "theorem", "is_local_min_const", []], ["add", "theorem", "add", ["is_local_min_on"]], ["add", "theorem", "bicomp_mono", ["is_local_min_on"]], ["add", "theorem", "comp_antimono", ["is_local_min_on"]], ["add", "theorem", "comp_mono", ["is_local_min_on"]], ["add", "theorem", "inf", ["is_local_min_on"]], ["add", "theorem", "inter", ["is_local_min_on"]], ["add", "theorem", "is_local_min", ["is_local_min_on"]], ["add", "theorem", "max", ["is_local_min_on"]], ["add", "theorem", "min", ["is_local_min_on"]], ["add", "theorem", "neg", ["is_local_min_on"]], ["add", "theorem", "on_subset", ["is_local_min_on"]], ["add", "theorem", "sub", ["is_local_min_on"]], ["add", "theorem", "sup", ["is_local_min_on"]], ["add", "def", "is_local_min_on", []], ["add", "theorem", "is_local_min_on_const", []], ["add", "theorem", "is_local_max", ["is_max_on"]], ["add", "theorem", "localize", ["is_max_on"]], ["add", "theorem", "is_local_min", ["is_min_on"]], ["add", "theorem", "localize", ["is_min_on"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1576874096, "sha": "883d974b", "message": "feat(algebra/module): sum_smul' (for semimodules) (#1752)\n* feat(algebra/module): sum_smul' (for semimodules)\n* adding docstring\n* use `classical` tactic\n* moving ' name to the weaker theorem", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_smul'", ["finset"]], ["del", "theorem", "sum_smul", ["finset"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "sum_smul", ["finset"]]]}]}, {"timestamp": 1576736693, "sha": "e8754920", "message": "chore(algebra/module) remove an unneeded commutativity assumption (#1813)", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "is_linear_map_smul'", ["is_linear_map"]]]}]}, {"timestamp": 1576673848, "sha": "5dae5d23", "message": "chore(ring_theory/algebra): redefine module structure of Z-algebra instance (#1812)\nThis redefines the Z-algebra instance, so that the module structure is definitionally equal to the Z-module structure of any `add_comm_group`", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1576661027, "sha": "bec46afd", "message": "refactor(topology/*): use dot notation with `compact`, prove `compact.image` with `continuous_on` (#1809)\n* refactor(topology/*): use dot notation, prove `compact.image` with `continuous_on`\n* Apply suggestions from code review\nCo-Authored-By: sgouezel \n* Fix compile, update some proofs\n* Make `range_quot_mk` a `simp` lemma\n* Fix lint errors", "changes": [{"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_inl_union_range_inr", ["set"]], ["add", "theorem", "range_quot_mk", ["set"]]]}, {"oldPath": "src/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "comap_inf_principal_ne_bot_of_image_mem", ["filter"]], ["mod", "theorem", "comap_mono", ["filter"]], ["add", "theorem", "comap_ne_bot_of_range_mem", ["filter"]], ["mod", "theorem", "map_inf", ["filter"]], ["add", "theorem", "map_inf_le", ["filter"]], ["mod", "theorem", "map_mono", ["filter"]], ["del", "theorem", "monotone_comap", ["filter"]], ["del", "theorem", "monotone_map", ["filter"]], ["add", "theorem", "inf", ["filter", "tendsto"]], ["add", "theorem", "ne_bot", ["filter", "tendsto"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "exists_forall_ge", ["compact"]], ["add", "theorem", "exists_forall_le", ["compact"]], ["del", "theorem", "exists_forall_ge_of_compact_of_continuous", []], ["del", "theorem", "exists_forall_le_of_compact_of_continuous", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "mem_of_nhds_within_ne_bot", ["is_closed"]], ["add", "theorem", "nhds_within_ne_bot_of_mem", []]]}, {"oldPath": "src/topology/homeomorph.lean", "newPath": "src/topology/homeomorph.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": [["mod", "def", "real_prod_homeo", ["complex"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "adherence_nhdset", ["compact"]], ["add", "theorem", "elim_finite_subcover", ["compact"]], ["add", "theorem", "elim_finite_subcover_image", ["compact"]], ["add", "theorem", "image", ["compact"]], ["add", "theorem", "image_of_continuous_on", ["compact"]], ["add", "theorem", "inter_left", ["compact"]], ["add", "theorem", "inter_right", ["compact"]], ["add", "theorem", "prod", ["compact"]], ["add", "theorem", "union", ["compact"]], ["add", "theorem", "compact_Union", []], ["del", "theorem", "compact_Union_of_compact", []], ["del", "theorem", "compact_adherence_nhdset", []], ["del", "theorem", "compact_bUnion_of_compact", []], ["del", "theorem", "compact_elim_finite_subcover", []], ["del", "theorem", "compact_elim_finite_subcover_image", []], ["del", "theorem", "compact_iff_compact_image_of_embedding", []], ["del", "theorem", "compact_image", []], ["del", "theorem", "compact_inter", []], ["del", "theorem", "compact_of_closed", []], ["del", "theorem", "compact_of_finite", []], ["del", "theorem", "compact_prod", []], ["del", "theorem", "compact_union_of_compact", []], ["add", "theorem", "compact_iff_compact_image", ["embedding"]], ["add", "theorem", "compact", ["is_closed"]], ["add", "theorem", "compact", ["set", "finite"]], ["add", "theorem", "compact_bUnion", ["set", "finite"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1576648902, "sha": "12075180", "message": "feat(*): add command for declaring library notes (#1810)\n* feat(*): add command for declaring library notes\n* add missing file\n* make note names private\n* update docs\n* Update library_note.lean\n* Update library_note.lean", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/library_note.lean", "changes": [["add", "def", "hash", ["string"]]]}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": [["del", "def", "string_hash", []]]}]}, {"timestamp": 1576620727, "sha": "acdf2729", "message": "chore(data/fintype): use `list.fin_range` for `fin.fintype` (#1811)", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}]}, {"timestamp": 1576605746, "sha": "52e18723", "message": "refactor(topology/algebra/ordered): prove IVT for a connected set (#1806)\n* refactor(topology/algebra/ordered): prove IVT for a connected set\nAlso prove that intervals are connected, and deduce the classical IVT\nfrom this.\n* Rewrite the proof, move `min_le_max` to the root namespace\n* Adjust `analysis/complex/exponential`\n* Add comments/`obtain`\n* Add some docs\n* Add more docs\n* Move some proofs to a section with weaker running assumptions\n* Remove empty lines, fix a docstring\n* +1 docstring", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["del", "theorem", "min_le_max", ["decidable"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "min_le_max", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "exists_cos_eq_zero", ["real"]], ["mod", "theorem", "exists_sin_eq", ["real"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "intermediate_value_Icc'", []], ["add", "theorem", "intermediate_value_Icc", []], ["add", "theorem", "intermediate_value_univ", []], ["add", "theorem", "forall_Icc_subset", ["is_connected"]], ["add", "theorem", "intermediate_value", ["is_connected"]], ["add", "theorem", "is_connected_Icc", []], ["add", "theorem", "is_connected_Ici", []], ["add", "theorem", "is_connected_Ico", []], ["add", "theorem", "is_connected_Iic", []], ["add", "theorem", "is_connected_Iio", []], ["add", "theorem", "is_connected_Ioc", []], ["add", "theorem", "is_connected_Ioi", []], ["add", "theorem", "is_connected_Ioo", []], ["add", "theorem", "is_connected_iff_forall_Icc_subset", []]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["del", "theorem", "intermediate_value'", ["real"]], ["del", "theorem", "intermediate_value", ["real"]]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "closure", ["is_connected"]], ["add", "theorem", "image", ["is_connected"]], ["add", "theorem", "union", ["is_connected"]], ["add", "theorem", "is_connected_closed_iff", []], ["del", "theorem", "is_connected_closure", []], ["add", "theorem", "is_connected_of_forall", []], ["add", "theorem", "is_connected_of_forall_pair", []], ["del", "theorem", "is_connected_union", []]]}]}, {"timestamp": 1576594130, "sha": "d8dc1445", "message": "feat(geometry/manifold): smooth bundles, tangent bundle (#1607)\n* feat(geometry/manifold): smooth bundles, tangent bundle\n* remove decidable in preamble\n* Update src/geometry/manifold/basic_smooth_bundle.lean\nCo-Authored-By: Johan Commelin \n* Update src/geometry/manifold/basic_smooth_bundle.lean\nCo-Authored-By: Johan Commelin \n* Update src/geometry/manifold/basic_smooth_bundle.lean\nCo-Authored-By: Johan Commelin \n* comments\n* cleanup\n* oops, forgot squeeze_simp\n* simpa instead of simp\n* oops\n* much better docstrings\n* improved formatting\n* space after forall\n* fix build\n* fix build, continuous.smul\n* minor improvements", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": null, "newPath": "src/geometry/manifold/basic_smooth_bundle.lean", "changes": [["add", "theorem", "base_set", ["basic_smooth_bundle_core"]], ["add", "def", "chart", ["basic_smooth_bundle_core"]], ["add", "theorem", "chart_at_inv_fun_fst", ["basic_smooth_bundle_core"]], ["add", "theorem", "chart_at_to_fun_fst", ["basic_smooth_bundle_core"]], ["add", "theorem", "chart_source", ["basic_smooth_bundle_core"]], ["add", "theorem", "chart_target", ["basic_smooth_bundle_core"]], ["add", "theorem", "mem_atlas_iff", ["basic_smooth_bundle_core"]], ["add", "theorem", "mem_chart_source_iff", ["basic_smooth_bundle_core"]], ["add", "theorem", "mem_chart_target_iff", ["basic_smooth_bundle_core"]], ["add", "def", "to_topological_fiber_bundle_core", ["basic_smooth_bundle_core"]], ["add", "structure", "basic_smooth_bundle_core", []], ["add", "def", "proj", ["tangent_bundle"]], ["add", "def", "tangent_bundle", []], ["add", "def", "tangent_bundle_core", []], ["add", "theorem", "tangent_bundle_model_space_chart_at", []], ["add", "theorem", "tangent_bundle_model_space_topology_eq_prod", []], ["add", "theorem", "tangent_bundle_proj_continuous", []], ["add", "theorem", "tangent_bundle_proj_open", []], ["add", "def", "tangent_space", []]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "smul", ["continuous"]], ["del", "theorem", "continuous_smul'", []], ["mod", "theorem", "continuous_smul", []], ["add", "def", "topological_vector_space", []]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}]}, {"timestamp": 1576589934, "sha": "308a08ce", "message": "refactor(topology/metric_space/closeds): migrate to `cauchy_seq_of_edist_le_geometric_two` (#1760)\n* feat(data/real/ennreal): more lemmas, `*_cast` tags, use `lift` tactic\n* Undo name change\n* Fix compile\n* nnreal: add `move_cast`\n* ennreal: more lemmas\n* Fix compile\n* feat(topology/instances/ennreal): more lemmas\n* Fix compile\n* Rewrite `cauchy_seq_of_edist_le_geometric` etc in terms of `ennreal`s\nI tried to actually use `nnreal`s, and it leads to coercions nightmare.\n* Simplify some proofs using new lemmas\n* Fix compile\n* Fix compile\n* refactor(topology/metric_space/closeds): migrate to `cauchy_seq_of_edist_le_geometric_two`", "changes": [{"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}]}, {"timestamp": 1576572777, "sha": "3053a169", "message": "feat(tactic/field_simp): tactic to reduce to one division in fields (#1792)\n* feat(algebra/field): simp set to reduce to one division in fields\n* tactic field_simp\n* fix docstring\n* fix build", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["mod", "theorem", "two_ne_zero'", []]]}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "add_div'", []], ["add", "theorem", "div_add'", []], ["add", "theorem", "div_eq_iff", []], ["add", "theorem", "eq_div_iff", []], ["add", "theorem", "mul_div_assoc'", []], ["add", "theorem", "neg_div'", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "inv_pow'", []], ["add", "theorem", "pow_div", []], ["mod", "theorem", "pow_ne_zero", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}, {"oldPath": "test/ring_exp.lean", "newPath": "test/ring_exp.lean", "changes": []}]}, {"timestamp": 1576568668, "sha": "abea2984", "message": "refactor(analysis/specific_limits): use `ennreal`s instead of `nnreal`s in `*_edist_le_geometric` (#1759)\n* feat(data/real/ennreal): more lemmas, `*_cast` tags, use `lift` tactic\n* Undo name change\n* Fix compile\n* nnreal: add `move_cast`\n* ennreal: more lemmas\n* Fix compile\n* feat(topology/instances/ennreal): more lemmas\n* Fix compile\n* Rewrite `cauchy_seq_of_edist_le_geometric` etc in terms of `ennreal`s\nI tried to actually use `nnreal`s, and it leads to coercions nightmare.\n* Simplify some proofs using new lemmas\n* Fix compile\n* Fix compile", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "cauchy_seq_of_edist_le_geometric_two", []], ["add", "theorem", "edist_le_of_edist_le_geometric_two_of_tendsto", []], ["add", "theorem", "edist_le_of_edist_le_geometric_two_of_tendsto₀:", []], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["ennreal"]], ["add", "theorem", "tsum_geometric", ["ennreal"]], ["del", "theorem", "has_sum_geometric_nnreal", []], ["add", "theorem", "has_sum_geometric", ["nnreal"]], ["add", "theorem", "summable_geometric", ["nnreal"]], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", ["nnreal"]], ["del", "theorem", "summable_geometric_nnreal", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "cauchy_seq_of_edist_le_of_tsum_ne_top", []], ["mod", "theorem", "edist_le_tsum_of_edist_le_of_tendsto", []], ["mod", "theorem", "edist_le_tsum_of_edist_le_of_tendsto₀", []]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1576505711, "sha": "cd53e272", "message": "chore(topology/algebra/ordered): use interval notation here and there (#1802)\n* chore(topology/algebra/ordered): use interval notation here and there\nAlso prove a slightly more general version of `mem_nhds_orderable_dest`\n* Fix a few compile errors\n* Rename a lemma, fix compile, add docs and `dual_I??` lemmas\n* Fix names, add comments\n* Make some lemmas simp", "changes": [{"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "Ici_subset_Ioi", ["set"]], ["add", "theorem", "Iic_subset_Iio", ["set"]], ["add", "theorem", "dual_Icc", ["set"]], ["add", "theorem", "dual_Ici", ["set"]], ["add", "theorem", "dual_Ico", ["set"]], ["add", "theorem", "dual_Iic", ["set"]], ["add", "theorem", "dual_Iio", ["set"]], ["add", "theorem", "dual_Ioc", ["set"]], ["add", "theorem", "dual_Ioi", ["set"]], ["add", "theorem", "dual_Ioo", ["set"]], ["mod", "theorem", "nonempty_Icc", ["set"]], ["mod", "theorem", "nonempty_Ico", ["set"]], ["mod", "theorem", "nonempty_Ioc", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "binfi_sets_eq", ["filter"]], ["del", "theorem", "infi_sets_eq'", ["filter"]], ["add", "theorem", "mem_binfi", ["filter"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "closure_lt_subset_le", []], ["add", "theorem", "exists_Ico_subset_of_mem_nhds'", []], ["add", "theorem", "exists_Ico_subset_of_mem_nhds", []], ["add", "theorem", "exists_Ioc_subset_of_mem_nhds'", []], ["add", "theorem", "exists_Ioc_subset_of_mem_nhds", []], ["del", "theorem", "mem_nhds_orderable_dest", []], ["mod", "theorem", "nhds_eq_orderable", []]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1576491601, "sha": "de25b101", "message": "refactor(analysis/convex): simplify proofs, use implicit args and dot notation (#1804)\n* feat(data/set/intervals): add `nonempty_Icc` etc, `image_(add/mul)_(left/right)_Icc`\n* refactor(analysis/convex): simplify proofs, use implicit args and dot notation\n* Use dot notation.\n* Swap LHS and RHS of `image_Icc_zero_one_eq_segment`.\n* Introduce `finset.center_mass`, prove basic properties.\n* Deduce Jensen's inequality from the corresponding property of convex\n sets; rename corresponding lemmas.\n* Fix a typo\nCo-Authored-By: sgouezel \n* Update src/analysis/convex.lean", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_pair", ["finset"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": [["add", "theorem", "add", ["convex"]], ["add", "theorem", "affinity", ["convex"]], ["add", "theorem", "center_mass_mem", ["convex"]], ["add", "theorem", "closure", ["convex"]], ["add", "theorem", "inter", ["convex"]], ["add", "theorem", "interior", ["convex"]], ["add", "theorem", "is_linear_image", ["convex"]], ["add", "theorem", "is_linear_preimage", ["convex"]], ["add", "theorem", "linear_image", ["convex"]], ["add", "theorem", "linear_preimage", ["convex"]], ["add", "theorem", "neg", ["convex"]], ["add", "theorem", "neg_preimage", ["convex"]], ["add", "theorem", "prod", ["convex"]], ["add", "theorem", "smul", ["convex"]], ["add", "theorem", "smul_preimage", ["convex"]], ["add", "theorem", "sub", ["convex"]], ["add", "theorem", "sum_mem", ["convex"]], ["add", "theorem", "translate", ["convex"]], ["mod", "theorem", "convex_Inter", []], ["del", "theorem", "convex_add", []], ["del", "theorem", "convex_affinity", []], ["del", "theorem", "convex_closure", []], ["del", "theorem", "convex_halfplane", []], ["mod", "theorem", "convex_halfspace_ge", []], ["mod", "theorem", "convex_halfspace_gt", []], ["mod", "theorem", "convex_halfspace_le", []], ["mod", "theorem", "convex_halfspace_lt", []], ["add", "theorem", "convex_hyperplane", []], ["add", "theorem", "convex_iff_sum_mem", []], ["del", "theorem", "convex_inter", []], ["del", "theorem", "convex_interior", []], ["del", "theorem", "convex_le_of_convex_on", []], ["del", "theorem", "convex_linear_image'", []], ["del", "theorem", "convex_linear_image", []], ["del", "theorem", "convex_linear_preimage'", []], ["del", "theorem", "convex_linear_preimage", []], ["del", "theorem", "convex_lt_of_convex_on", []], ["del", "theorem", "convex_neg", []], ["del", "theorem", "convex_neg_preimage", []], ["add", "theorem", "add", ["convex_on"]], ["add", "theorem", "convex_epigraph", ["convex_on"]], ["add", "theorem", "convex_le", ["convex_on"]], ["add", "theorem", "convex_lt", ["convex_on"]], ["add", "theorem", "le_on_interval", ["convex_on"]], ["add", "theorem", "map_center_mass_le", ["convex_on"]], ["add", "theorem", "map_sum_le", ["convex_on"]], ["add", "theorem", "smul", ["convex_on"]], ["add", "theorem", "subset", ["convex_on"]], ["del", "theorem", "convex_on_add", []], ["add", "theorem", "convex_on_iff_convex_epigraph", []], ["mod", "theorem", "convex_on_linorder", []], ["del", "theorem", "convex_on_smul", []], ["del", "theorem", "convex_on_subset", []], ["del", "theorem", "convex_on_sum", []], ["del", "theorem", "convex_prod", []], ["add", "theorem", "convex_real_iff", []], ["add", "theorem", "convex_sInter", []], ["del", "theorem", "convex_smul", []], ["del", "theorem", "convex_smul_preimage", []], ["del", "theorem", "convex_sub", []], ["del", "theorem", "convex_submodule", []], ["del", "theorem", "convex_subspace", []], ["del", "theorem", "convex_sum", []], ["del", "theorem", "convex_sum_iff", []], ["del", "theorem", "convex_translation", []], ["add", "theorem", "center_mass_empty", ["finset"]], ["add", "theorem", "center_mass_insert", ["finset"]], ["add", "theorem", "center_mass_pair", ["finset"]], ["add", "theorem", "center_mass_singleton", ["finset"]], ["del", "theorem", "image_Icc_zero_one_eq_segment", []], ["del", "theorem", "le_on_interval_of_convex_on", []], ["mod", "theorem", "left_mem_segment", []], ["mod", "theorem", "right_mem_segment", []], ["mod", "def", "segment", []], ["add", "theorem", "segment_eq_Icc'", []], ["add", "theorem", "segment_eq_image_Icc_zero_one'", []], ["add", "theorem", "segment_eq_image_Icc_zero_one", []], ["mod", "theorem", "segment_translate", []], ["add", "theorem", "segment_translate_preimage", []], ["add", "theorem", "convex", ["submodule"]], ["add", "theorem", "convex", ["subspace"]]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}]}, {"timestamp": 1576483888, "sha": "6188b991", "message": "feat(topology/instances/ennreal): more lemmas about tsum (#1756)\n* feat(data/real/ennreal): more lemmas, `*_cast` tags, use `lift` tactic\n* Undo name change\n* Fix compile\n* nnreal: add `move_cast`\n* ennreal: more lemmas\n* Fix compile\n* feat(topology/instances/ennreal): more lemmas\n* Fix compile", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "tendsto_coe", ["ennreal"]], ["add", "theorem", "tendsto_nat_nhds_top", ["ennreal"]], ["add", "theorem", "tsum_coe_ne_top_iff_summable", ["ennreal"]]]}]}, {"timestamp": 1576479694, "sha": "ee981c28", "message": "refactor(analysis/calculus/fderiv): prove `has_fderiv_within_at.lim` for any filter (#1805)\n* refactor(analysis/calculus/fderiv): prove `has_fderiv_within_at.lim` for any filter\nAlso prove two versions of \"directional derivative agrees with\n`has_fderiv_at`\": `has_fderiv_at.lim` and `has_fderiv_at.lim_real`.\n* Rename a lemma as suggested by @sgouezel", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "lim", ["has_fderiv_at"]], ["add", "theorem", "lim_real", ["has_fderiv_at"]], ["mod", "theorem", "has_fderiv_at_filter_real_equiv", []], ["mod", "theorem", "lim", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "lim_zero", ["tangent_cone_at"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "ne_mem_of_tendsto_norm_at_top", []]]}]}, {"timestamp": 1576448941, "sha": "699da421", "message": "feat(data/set/intervals): add `nonempty_Icc` etc, `image_(add/mul)_(left/right)_Icc` (#1803)", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["del", "theorem", "ivl_stretch", []], ["del", "theorem", "ivl_translate", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "inter_singleton_ne_empty", ["set"]], ["add", "theorem", "image_const", ["set", "nonempty"]]]}, {"oldPath": "src/data/set/intervals/basic.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["add", "theorem", "image_add_left_Icc", ["set"]], ["add", "theorem", "image_add_right_Icc", ["set"]], ["add", "theorem", "image_mul_left_Icc'", ["set"]], ["add", "theorem", "image_mul_left_Icc", ["set"]], ["add", "theorem", "image_mul_right_Icc'", ["set"]], ["add", "theorem", "image_mul_right_Icc", ["set"]], ["add", "theorem", "nonempty_Icc", ["set"]], ["add", "theorem", "nonempty_Ici", ["set"]], ["add", "theorem", "nonempty_Ico", ["set"]], ["add", "theorem", "nonempty_Iic", ["set"]], ["add", "theorem", "nonempty_Ioc", ["set"]]]}]}, {"timestamp": 1576445333, "sha": "7cda8bb1", "message": "feat(data/real/ennreal): more lemmas, `*_cast` tags, use `lift` tactic (#1754)\n* feat(data/real/ennreal): more lemmas, `*_cast` tags, use `lift` tactic\n* Undo name change\n* Fix compile\n* nnreal: add `move_cast`\n* ennreal: more lemmas\n* Fix compile", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_div", ["ennreal"]], ["add", "theorem", "coe_inv_two", ["ennreal"]], ["mod", "theorem", "coe_le_one_iff", ["ennreal"]], ["add", "theorem", "coe_lt_coe_nat", ["ennreal"]], ["mod", "theorem", "coe_lt_one_iff", ["ennreal"]], ["mod", "theorem", "coe_nat", ["ennreal"]], ["add", "theorem", "coe_nat_lt_coe", ["ennreal"]], ["add", "theorem", "coe_nat_lt_coe_nat", ["ennreal"]], ["add", "theorem", "coe_nat_ne_top", ["ennreal"]], ["add", "theorem", "coe_sub_infty", ["ennreal"]], ["add", "theorem", "coe_two", ["ennreal"]], ["mod", "theorem", "div_self", ["ennreal"]], ["add", "theorem", "div_top", ["ennreal"]], ["add", "theorem", "inv_lt_one", ["ennreal"]], ["add", "theorem", "inv_mul_cancel", ["ennreal"]], ["add", "theorem", "inv_one", ["ennreal"]], ["add", "theorem", "inv_two_add_inv_two", ["ennreal"]], ["add", "theorem", "le_sub_add_self", ["ennreal"]], ["add", "theorem", "max_eq_zero_iff", ["ennreal"]], ["add", "theorem", "max_mul", ["ennreal"]], ["add", "theorem", "mul_div_cancel'", ["ennreal"]], ["add", "theorem", "mul_div_cancel", ["ennreal"]], ["add", "theorem", "mul_eq_mul_right", ["ennreal"]], ["mod", "theorem", "mul_inv_cancel", ["ennreal"]], ["del", "theorem", "mul_le_if_le_inv", ["ennreal"]], ["add", "theorem", "mul_le_iff_le_inv", ["ennreal"]], ["add", "theorem", "mul_le_mul", ["ennreal"]], ["add", "theorem", "mul_le_mul_right", ["ennreal"]], ["add", "theorem", "mul_left_mono", ["ennreal"]], ["add", "theorem", "mul_lt_mul_left", ["ennreal"]], ["add", "theorem", "mul_lt_mul_right", ["ennreal"]], ["add", "theorem", "mul_max", ["ennreal"]], ["add", "theorem", "mul_ne_top", ["ennreal"]], ["add", "theorem", "mul_right_mono", ["ennreal"]], ["add", "theorem", "mul_sub", ["ennreal"]], ["add", "theorem", "one_half_lt_one", ["ennreal"]], ["mod", "theorem", "one_le_coe_iff", ["ennreal"]], ["mod", "theorem", "one_lt_coe_iff", ["ennreal"]], ["add", "theorem", "one_lt_two", ["ennreal"]], ["add", "theorem", "one_sub_inv_two", ["ennreal"]], ["add", "theorem", "pow_eq_top", ["ennreal"]], ["add", "theorem", "pow_lt_top", ["ennreal"]], ["add", "theorem", "pow_ne_top", ["ennreal"]], ["add", "theorem", "sub_eq_of_add_eq", ["ennreal"]], ["add", "theorem", "sub_half", ["ennreal"]], ["add", "theorem", "sub_le_sub_add_sub", ["ennreal"]], ["add", "theorem", "sub_mul", ["ennreal"]], ["mod", "theorem", "to_nnreal_coe", ["ennreal"]], ["add", "theorem", "top_div", ["ennreal"]], ["add", "theorem", "top_pow", ["ennreal"]], ["add", "theorem", "two_ne_top", ["ennreal"]], ["add", "theorem", "two_ne_zero", ["ennreal"]], ["add", "theorem", "two_pos", ["ennreal"]], ["add", "theorem", "zero_div", ["ennreal"]], ["mod", "theorem", "zero_lt_coe_iff", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "inv_one", ["nnreal"]], ["add", "theorem", "two_inv_lt_one", ["nnreal"]]]}]}, {"timestamp": 1576438362, "sha": "871a36fc", "message": "feat(group_theory/monoid_localization) add localizations of commutative monoids at submonoids (#1798)\n* 1st half of monoid_localization\n* change in implementation notes\n* fixing naming clashes\n* change additive version's name\n* oops, had a /- instead of /--\n* generalize comm_monoid instance\n* remove notes to self\n* responding to PR comments", "changes": [{"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["mod", "def", "ker_lift", ["con"]]]}, {"oldPath": null, "newPath": "src/group_theory/monoid_localization.lean", "changes": [["add", "theorem", "add", ["add_submonoid", "r'"]], ["add", "theorem", "transitive", ["add_submonoid", "r'"]], ["add", "def", "r'", ["add_submonoid"]], ["add", "def", "aux", ["monoid_localization"]], ["add", "theorem", "exists_rep", ["monoid_localization"]], ["add", "theorem", "funext", ["monoid_localization"]], ["add", "theorem", "ind", ["monoid_localization"]], ["add", "theorem", "induction_on", ["monoid_localization"]], ["add", "theorem", "is_unit_of_of_comp", ["monoid_localization"]], ["add", "def", "lift'", ["monoid_localization"]], ["add", "theorem", "lift'_apply_of", ["monoid_localization"]], ["add", "theorem", "lift'_comp_of", ["monoid_localization"]], ["add", "theorem", "lift'_eq_iff", ["monoid_localization"]], ["add", "theorem", "lift'_mk", ["monoid_localization"]], ["add", "theorem", "lift'_of", ["monoid_localization"]], ["add", "theorem", "lift_apply_of", ["monoid_localization"]], ["add", "theorem", "lift_comp_of", ["monoid_localization"]], ["add", "theorem", "lift_eq_iff", ["monoid_localization"]], ["add", "theorem", "lift_mk", ["monoid_localization"]], ["add", "theorem", "lift_of", ["monoid_localization"]], ["add", "theorem", "lift_on_beta", ["monoid_localization"]], ["add", "def", "map", ["monoid_localization"]], ["add", "theorem", "map_comp_map", ["monoid_localization"]], ["add", "theorem", "map_comp_of", ["monoid_localization"]], ["add", "theorem", "map_eq", ["monoid_localization"]], ["add", "theorem", "map_ext", ["monoid_localization"]], ["add", "theorem", "map_id", ["monoid_localization"]], ["add", "theorem", "map_map", ["monoid_localization"]], ["add", "theorem", "map_mk", ["monoid_localization"]], ["add", "theorem", "map_of", ["monoid_localization"]], ["add", "def", "mk", ["monoid_localization"]], ["add", "theorem", "mk_eq", ["monoid_localization"]], ["add", "theorem", "mk_eq_iff_of_eq", ["monoid_localization"]], ["add", "theorem", "mk_eq_mul_mk_one", ["monoid_localization"]], ["add", "theorem", "mk_eq_of_eq", ["monoid_localization"]], ["add", "theorem", "mk_is_unit'", ["monoid_localization"]], ["add", "theorem", "mk_is_unit", ["monoid_localization"]], ["add", "theorem", "mk_mul_cancel_left", ["monoid_localization"]], ["add", "theorem", "mk_mul_cancel_right", ["monoid_localization"]], ["add", "theorem", "mk_mul_mk", ["monoid_localization"]], ["add", "theorem", "mk_self'", ["monoid_localization"]], ["add", "theorem", "mk_self", ["monoid_localization"]], ["add", "def", "of", ["monoid_localization"]], ["add", "theorem", "of_eq_mk", ["monoid_localization"]], ["add", "theorem", "of_is_unit'", ["monoid_localization"]], ["add", "theorem", "of_is_unit", ["monoid_localization"]], ["add", "theorem", "of_ker_iff", ["monoid_localization"]], ["add", "theorem", "of_mul_mk", ["monoid_localization"]], ["add", "theorem", "one_rel", ["monoid_localization"]], ["add", "theorem", "r_le_ker_aux", ["monoid_localization"]], ["add", "def", "to_units", ["monoid_localization"]], ["add", "theorem", "to_units_inv", ["monoid_localization"]], ["add", "theorem", "to_units_map_inv", ["monoid_localization"]], ["add", "theorem", "to_units_mk", ["monoid_localization"]], ["add", "def", "units_restrict", ["monoid_localization"]], ["add", "theorem", "units_restrict_mul", ["monoid_localization"]], ["add", "def", "monoid_localization", []], ["add", "def", "r'", ["submonoid"]], ["add", "def", "r", ["submonoid"]], ["add", "theorem", "r_eq_r'", ["submonoid"]]]}]}, {"timestamp": 1576432376, "sha": "7dfbcdd4", "message": "(docs/tactics.md) adding `norm_num` [ci skip] (#1799)\n* (docs/tactics.md) adding `norm_num` [ci skip]\n* fixing example\n* clarifying explanation, adding more examples\n* one more example\n* one more example\n* editing norm_num docstring", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1576427989, "sha": "9a37e3fd", "message": "refactor(*): make vector_space an abbreviation for module (#1793)\n* refactor(*): make vector_space an abbreviation for module\n* Remove superfluous instances\n* Fix build\n* Add Note[vector space definition]\n* Update src/algebra/module.lean\n* Fix build (hopefully)\n* Update src/measure_theory/bochner_integration.lean", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "def", "vector_space", []]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1576274676, "sha": "a3844c85", "message": "chore(algebra/group/basic): DRY, add `mul_left_surjective` (#1801)\nSome lemmas explicitly listed arguments already declared using\n`variables`, remove them.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["mod", "theorem", "inv_comm_of_comm", []], ["mod", "theorem", "mul_inv_eq_one", []], ["mod", "theorem", "mul_left_eq_self", []], ["add", "theorem", "mul_left_surjective", []], ["mod", "theorem", "mul_right_eq_self", []], ["add", "theorem", "mul_right_surjective", []]]}]}, {"timestamp": 1576260630, "sha": "bb7d4c98", "message": "chore(data/set/lattice): drop `Union_eq_sUnion_range` and `Inter_eq_sInter_range` (#1800)\n* chore(data/set/lattice): drop `Union_eq_sUnion_range` and `Inter_eq_sInter_range`\nTwo reasons:\n* we already have `sUnion_range` and `sInter_range`, no need to repeat\n ourselves;\n* proofs used wrong universes.\n* Try to fix compile", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["del", "theorem", "Inter_eq_sInter_range", ["set"]], ["del", "theorem", "Union_eq_sUnion_range", ["set"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1576187120, "sha": "32816989", "message": "feat(data/padics/padic_integers): algebra structure Z_p -> Q_p (#1796)\n* feat(data/padics/padic_integers): algebra structure Z_p -> Q_p\n* Update src/data/padics/padic_integers.lean\nCo-Authored-By: Floris van Doorn \n* Fix build", "changes": [{"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}]}, {"timestamp": 1576141522, "sha": "69e861e9", "message": "feat(measure_theory/bochner_integration): connecting the Bochner integral with the integral on `ennreal`-valued functions (#1790)\n* shorter proof\n* feat(measure_theory/bochner_integration): connecting the Bochner integral with the integral on `ennreal`\nThis PR proves that `∫ f = ∫ f⁺ - ∫ f⁻`, with the first integral sign being the Bochner integral of a real-valued function `f : α → ℝ`, and second and third integral sign being the integral on `ennreal`-valued functions. See `integral_eq_lintegral_max_sub_lintegral_min`.\nI feel that most of the basic properties of the Bochner integral are proved. Please let me know if you think something else is needed.\n* various things :\n* add guides for typeclass inference;\n* add `norm_cast` tags;\n* prove some corollaries;\n* add doc strings;\n* other fixes\n* Update bochner_integration.lean\n* add some doc strings\n* Fix doc strings\n* Update bochner_integration.lean\n* Update bochner_integration.lean\n* fix doc strings\n* Update bochner_integration.lean\n* Use dot notation\n* use dot notation\n* Update Meas.lean", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "abs_max_sub_max_le_abs", []], ["add", "theorem", "max_zero_sub_eq_self", []]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "theorem", "neg_mk", ["measure_theory", "ae_eq_fun"]], ["add", "def", "pos_part", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "pos_part_to_fun", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_eq_lintegral_max_sub_lintegral_min", ["measure_theory"]], ["add", "theorem", "integral_eq_lintegral_of_nonneg_ae", ["measure_theory"]], ["add", "theorem", "integral_le_integral_of_le_ae", ["measure_theory"]], ["add", "theorem", "integral_nonneg_of_nonneg_ae", ["measure_theory"]], ["add", "theorem", "integral_nonpos_of_nonpos_ae", ["measure_theory"]], ["add", "theorem", "integral_coe_eq_integral", ["measure_theory", "l1"]], ["add", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "l1"]], ["mod", "theorem", "coe_add", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_neg", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_neg_part", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_pos_part", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_smul", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_sub", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "coe_zero", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "integral", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "integral_eq_bintegral", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "integral_eq_norm_pos_part_sub", ["measure_theory", "l1", "simple_func"]], ["add", "def", "neg_part", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "neg_part_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "def", "pos_part", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "pos_part_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_integral_le_integral_norm", ["measure_theory"]], ["del", "theorem", "of_real_norm_integral_le_lintegral_norm", ["measure_theory"]], ["add", "theorem", "bintegral_neg", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_sub", ["measure_theory", "simple_func"]], ["add", "def", "neg_part", ["measure_theory", "simple_func"]], ["add", "theorem", "neg_part_map_norm", ["measure_theory", "simple_func"]], ["add", "def", "pos_part", ["measure_theory", "simple_func"]], ["add", "theorem", "pos_part_map_norm", ["measure_theory", "simple_func"]], ["add", "theorem", "pos_part_sub_neg_part", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "def", "borel", []], ["add", "theorem", "borel_comap", []], ["add", "theorem", "borel_eq_generate_Iio", []], ["add", "theorem", "borel_eq_generate_Ioi", []], ["add", "theorem", "borel_eq_generate_from_of_subbasis", []], ["add", "theorem", "borel_eq_subtype", []], ["add", "theorem", "borel_induced", []], ["add", "theorem", "borel_prod", []], ["add", "theorem", "borel_prod_le", []], ["add", "theorem", "add", ["ennreal", "measurable"]], ["add", "theorem", "mul", ["ennreal", "measurable"]], ["add", "theorem", "sub", ["ennreal", "measurable"]], ["del", "theorem", "measurable_add", ["ennreal"]], ["del", "theorem", "measurable_mul", ["ennreal"]], ["del", "theorem", "measurable_sub", ["ennreal"]], ["add", "theorem", "is_measurable_Ico", []], ["add", "theorem", "is_measurable_Iio", []], ["add", "theorem", "is_measurable_Ioo", []], ["add", "theorem", "is_measurable_ball", []], ["add", "theorem", "is_measurable_closure", []], ["add", "theorem", "is_measurable_interior", []], ["add", "theorem", "is_measurable_le", []], ["add", "theorem", "is_measurable_of_is_closed", []], ["add", "theorem", "is_measurable_of_is_open", []], ["add", "theorem", "is_measurable_singleton", []], ["add", "theorem", "add", ["measurable"]], ["add", "theorem", "infi", ["measurable"]], ["add", "theorem", "infi_Prop", ["measurable"]], ["add", "theorem", "is_glb", ["measurable"]], ["add", "theorem", "is_lub", ["measurable"]], ["add", "theorem", "max", ["measurable"]], ["add", "theorem", "min", ["measurable"]], ["add", "theorem", "mul", ["measurable"]], ["add", "theorem", "neg", ["measurable"]], ["add", "theorem", "sub", ["measurable"]], ["add", "theorem", "supr", ["measurable"]], ["add", "theorem", "supr_Prop", ["measurable"]], ["add", "theorem", "measurable_coe_int_real", []], ["add", "theorem", "measurable_finset_sum", []], ["add", "theorem", "measurable_neg_iff", []], ["add", "theorem", "measurable_of_continuous2", []], ["add", "theorem", "measurable_of_continuous", []], ["del", "def", "borel", ["measure_theory"]], ["del", "theorem", "borel_comap", ["measure_theory"]], ["del", "theorem", "borel_eq_generate_Iio", ["measure_theory"]], ["del", "theorem", "borel_eq_generate_Ioi", ["measure_theory"]], ["del", "theorem", "borel_eq_generate_from_of_subbasis", ["measure_theory"]], ["del", "theorem", "borel_eq_subtype", ["measure_theory"]], ["del", "theorem", "borel_induced", ["measure_theory"]], ["del", "theorem", "borel_prod", ["measure_theory"]], ["del", "theorem", "borel_prod_le", ["measure_theory"]], ["del", "theorem", "is_measurable_Ico", ["measure_theory"]], ["del", "theorem", "is_measurable_Iio", ["measure_theory"]], ["del", "theorem", "is_measurable_Ioo", ["measure_theory"]], ["del", "theorem", "is_measurable_ball", ["measure_theory"]], ["del", "theorem", "is_measurable_closure", ["measure_theory"]], ["del", "theorem", "is_measurable_interior", ["measure_theory"]], ["del", "theorem", "is_measurable_of_is_closed", ["measure_theory"]], ["del", "theorem", "is_measurable_of_is_open", ["measure_theory"]], ["del", "theorem", "is_measurable_singleton", ["measure_theory"]], ["del", "theorem", "infi", ["measure_theory", "measurable"]], ["del", "theorem", "infi_Prop", ["measure_theory", "measurable"]], ["del", "theorem", "is_glb", ["measure_theory", "measurable"]], ["del", "theorem", "is_lub", ["measure_theory", "measurable"]], ["del", "theorem", "supr", ["measure_theory", "measurable"]], ["del", "theorem", "supr_Prop", ["measure_theory", "measurable"]], ["del", "theorem", "measurable_add", ["measure_theory"]], ["del", "theorem", "measurable_coe_int_real", ["measure_theory"]], ["del", "theorem", "measurable_finset_sum", ["measure_theory"]], ["del", "theorem", "measurable_le", ["measure_theory"]], ["del", "theorem", "measurable_mul", ["measure_theory"]], ["del", "theorem", "measurable_neg", ["measure_theory"]], ["del", "theorem", "measurable_neg_iff", ["measure_theory"]], ["del", "theorem", "measurable_of_continuous2", ["measure_theory"]], ["del", "theorem", "measurable_of_continuous", ["measure_theory"]], ["del", "theorem", "measurable_sub", ["measure_theory"]], ["add", "theorem", "add", ["nnreal", "measurable"]], ["add", "theorem", "mul", ["nnreal", "measurable"]], ["add", "theorem", "sub", ["nnreal", "measurable"]], ["del", "theorem", "measurable_add", ["nnreal"]], ["del", "theorem", "measurable_mul", ["nnreal"]], ["del", "theorem", "measurable_sub", ["nnreal"]]]}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "add", ["measure_theory", "ae_eq_fun", "integrable"]], ["add", "theorem", "neg", ["measure_theory", "ae_eq_fun", "integrable"]], ["add", "theorem", "smul", ["measure_theory", "ae_eq_fun", "integrable"]], ["add", "theorem", "sub", ["measure_theory", "ae_eq_fun", "integrable"]], ["del", "theorem", "integrable_add", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "integrable_neg", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "integrable_smul", ["measure_theory", "ae_eq_fun"]], ["del", "theorem", "integrable_sub", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "add", ["measure_theory", "integrable"]], ["add", "theorem", "max_zero", ["measure_theory", "integrable"]], ["add", "theorem", "min_zero", ["measure_theory", "integrable"]], ["add", "theorem", "neg", ["measure_theory", "integrable"]], ["add", "theorem", "norm", ["measure_theory", "integrable"]], ["add", "theorem", "smul", ["measure_theory", "integrable"]], ["add", "theorem", "smul_iff", ["measure_theory", "integrable"]], ["add", "theorem", "sub", ["measure_theory", "integrable"]], ["del", "theorem", "integrable_add", ["measure_theory"]], ["del", "theorem", "integrable_neg", ["measure_theory"]], ["del", "theorem", "integrable_norm", ["measure_theory"]], ["add", "theorem", "integrable_of_le_ae", ["measure_theory"]], ["del", "theorem", "integrable_smul", ["measure_theory"]], ["del", "theorem", "integrable_smul_iff", ["measure_theory"]], ["del", "theorem", "integrable_sub", ["measure_theory"]], ["mod", "theorem", "coe_add", ["measure_theory", "l1"]], ["mod", "theorem", "coe_neg", ["measure_theory", "l1"]], ["add", "theorem", "coe_pos_part", ["measure_theory", "l1"]], ["mod", "theorem", "coe_smul", ["measure_theory", "l1"]], ["mod", "theorem", "coe_sub", ["measure_theory", "l1"]], ["mod", "theorem", "coe_zero", ["measure_theory", "l1"]], ["add", "theorem", "continuous_neg_part", ["measure_theory", "l1"]], ["add", "theorem", "continuous_pos_part", ["measure_theory", "l1"]], ["add", "def", "neg_part", ["measure_theory", "l1"]], ["add", "theorem", "neg_part_to_fun_eq_max", ["measure_theory", "l1"]], ["add", "theorem", "neg_part_to_fun_eq_min", ["measure_theory", "l1"]], ["add", "theorem", "norm_le_norm_of_ae_le", ["measure_theory", "l1"]], ["add", "theorem", "norm_of_fun_eq_lintegral_norm", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_sub", ["measure_theory", "l1"]], ["add", "def", "pos_part", ["measure_theory", "l1"]], ["add", "theorem", "pos_part_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "lintegral_nnnorm_add", ["measure_theory"]], ["add", "theorem", "lintegral_norm_eq_lintegral_edist", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "fst", ["measurable"]], ["add", "theorem", "prod_mk", ["measurable"]], ["add", "theorem", "snd", ["measurable"]], ["add", "theorem", "subtype_mk", ["measurable"]], ["add", "theorem", "subtype_val", ["measurable"]], ["del", "theorem", "measurable_fst", []], ["del", "theorem", "measurable_prod_mk", []], ["del", "theorem", "measurable_snd", []], ["del", "theorem", "measurable_subtype_mk", []], ["del", "theorem", "measurable_subtype_val", []]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1576084637, "sha": "a8f6e23b", "message": "feat(data/list/basic): list.lex.not_nil_right (#1797)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "not_nil_right", ["list", "lex"]]]}]}, {"timestamp": 1576057977, "sha": "23e8ac73", "message": "feat(ring_theory/algebra): elementary simp-lemmas for aeval (#1795)", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "aeval_C", ["mv_polynomial"]], ["add", "theorem", "aeval_X", ["mv_polynomial"]], ["add", "theorem", "aeval_C", ["polynomial"]], ["add", "theorem", "aeval_X", ["polynomial"]]]}]}, {"timestamp": 1576004604, "sha": "3a10c600", "message": "chore(.mergify.yml): don't wait for travis when [ci skip] is present (#1789)", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1575995972, "sha": "361793a7", "message": "refactor(linear_algebra/finite_dimensional): universe polymorphism, doc (#1784)\n* refactor(linear_algebra/finite_dimensional): universe polymorphism, doc\n* docstrings\n* improvements\n* typo\n* Update src/linear_algebra/dimension.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/finite_dimensional.lean\nCo-Authored-By: Johan Commelin \n* Update src/linear_algebra/finite_dimensional.lean\nCo-Authored-By: Johan Commelin \n* fix comments\n* fix build\n* fix build\n* remove pp.universe\n* keep docstring in sync", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["mod", "theorem", "continuous_equiv_fun_basis", []], ["mod", "theorem", "continuous_on_pi", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "pi_apply_eq_sum_univ", ["linear_map"]], ["add", "theorem", "map_subtype_top", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["del", "theorem", "is_basis", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["del", "theorem", "dim_quotient", []], ["add", "theorem", "dim_quotient_add_dim", []], ["add", "theorem", "dim_quotient_le", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["del", "theorem", "card_eq_findim", ["finite_dimensional"]], ["del", "theorem", "dim_eq_card", ["finite_dimensional"]], ["add", "theorem", "dim_eq_card_basis", ["finite_dimensional"]], ["mod", "theorem", "exists_is_basis_finite", ["finite_dimensional"]], ["del", "theorem", "fg_of_finite_basis", ["finite_dimensional"]], ["del", "theorem", "findim_eq_card", ["finite_dimensional"]], ["add", "theorem", "findim_eq_card_basis'", ["finite_dimensional"]], ["add", "theorem", "findim_eq_card_basis", ["finite_dimensional"]], ["del", "theorem", "findim_submodule_le", ["finite_dimensional"]], ["del", "theorem", "finite_dimensional_of_finite_basis", ["finite_dimensional"]], ["add", "theorem", "iff_fg", ["finite_dimensional"]], ["del", "theorem", "of_fg", ["finite_dimensional"]], ["add", "theorem", "of_finite_basis", ["finite_dimensional"]], ["add", "theorem", "span_of_finite", ["finite_dimensional"]], ["add", "theorem", "findim_eq", ["linear_equiv"]], ["add", "theorem", "comp_eq_id_comm", ["linear_map"]], ["add", "theorem", "finite_dimensional_of_surjective", ["linear_map"]], ["add", "theorem", "fg_iff_finite_dimensional", ["submodule"]], ["add", "theorem", "findim_le", ["submodule"]], ["add", "theorem", "findim_quotient_add_findim", ["submodule"]], ["add", "theorem", "findim_quotient_le", ["submodule"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_span_of_finite", []]]}]}, {"timestamp": 1575987740, "sha": "6bb17284", "message": "feat(analysis/convex): interiors/closures of convex sets are convex in a tvs (#1781)\n* feat(topology/algebra/module): scalar multiplication homeomorphisms\n* feat(topology/algebra/module): more lemmas\n- homeomorphisms given by scalar multiplication by unit is open/closed map.\n* feat(analysis/convex): interior of convex set is convex in a tvs\n- in separate file for interpretation time reasons.\n* feat(analysis/convex): extract lemma\n* feat(analysis/convex): closure of a convext set is convex\n* style(analysis/convex): place lemmas at reasonable locations\n* style(topology/algebra/module): fix bracketing style\n* feat(analysis/convex): introduce `smul_set` and `pointwise_mul`\n- also additional equivalent statements for convexity using those definitions.\n* feat(algebra/pointwise): lemmas for `smul_set`\n* doc(algebra/pointwise): add docstrings\n* doc(algebra/pointwise): add global docstring\n* docs(algebra/pointwise): amend global docstring", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "one_smul_set", ["set"]], ["add", "def", "pointwise_smul", ["set"]], ["add", "def", "smul_set", ["set"]], ["add", "theorem", "smul_set_eq_pointwise_smul_singleton", ["set"]], ["add", "theorem", "zero_smul_set", []]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": [["add", "theorem", "convex_closure", []], ["add", "theorem", "convex_iff₂:", []], ["add", "theorem", "convex_iff₃:", []], ["add", "theorem", "convex_interior", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "is_closed_map_smul_of_ne_zero", []], ["add", "theorem", "is_closed_map_smul_of_unit", []], ["add", "theorem", "is_open_map_smul_of_ne_zero", []], ["add", "theorem", "is_open_map_smul_of_unit", []]]}]}, {"timestamp": 1575924573, "sha": "5c093726", "message": "A `ring_exp` tactic for dealing with exponents in rings (#1715)\n* Test for ring_exp\n* Implement -a/b * -a/b = a/b * a/b\n* Hide extra information in the `ex` type in `ex_info`\n* Some attempts to make the proof returned by ring_exp shorter\n* Fix that ring_exp wouldn't handle pow that isn't monomial.has_pow\n* Some optimizations in ring_exp\n* Make all proofs explicit, halving execution time more or less\n* Cache `has_add` and `has_mul` instances for another 2x speedup\n* ring_exp can replace ring to compile mathlib\n* Revert `ring` to non-test version\n* Code cleanup and documentation\n* Revert the test changes to `linarith`\n* Undo the test changes to `ring2`\n* Whitespace cleanup\n* Fix overzealous error handling\nInstead of catching any `fail` in eval, we just catch the operations that can\nsafely `fail` (i.e. `invert` and `negate`). This should make internal errors\nvisible again.\n* Fix the TODO's\n* Example use of ring_exp in data.polynomial\n* Check that `ring_exp` deals well with natural number subtraction\n* Fix incorrect docstring\n* Improve documentation\n* Small stylistic fixes\n* Fix slow behaviour on large exponents\n* Add `ring_exp` to the default tactics\n* Use applicative notation where appropriate\n* The `ring_exp` tactic also does normalization\nCo-Authored-By: Rob Lewis \n* Move `normalize` from `tactic.interactive` to `ring_exp` namespace\n* Fix name collision between `equiv` in data.equiv.basic and `equiv` in `test/tactics.lean`\nI just renamed the definition in `test/tactics.lean` to `my_equiv`\nand the operator to `my≅`.\n* Fixes for the linter\n* Fix the usage of type classes for `sub_pf` and `div_pf`\n* Fix an additional linting error\n* Optimization: we don't need norm_num to determine `x * 1 = x`\n* Improve documentation of `test/ring_exp.lean`\n* Rename `resolve_atoms` to `resolve_atom_aux` for clarity\n* Small stylistic fixes\n* Remove unneccessary hidden fields to `ex`\n* Control how much unfolding `ring_exp` does by putting a `!` after it\n* Reword comment for `ex_type`\n* Use `ring_exp!` to deal with `(n : ℕ) + 1 - 1 = n`\n* Document the `!` flag for `ring`, `ring_exp` and `ring_exp_eq`\n* Get rid of searching for another cached instance\n* Fix `ring_exp` failing on terms on the form `0^succ (succ ...)`", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/ring_exp.lean", "changes": [["add", "theorem", "add_overlap_pf", ["tactic", "ring_exp"]], ["add", "theorem", "add_overlap_pf_zero", ["tactic", "ring_exp"]], ["add", "theorem", "add_pf_sum_gt", ["tactic", "ring_exp"]], ["add", "theorem", "add_pf_sum_lt", ["tactic", "ring_exp"]], ["add", "theorem", "add_pf_sum_overlap", ["tactic", "ring_exp"]], ["add", "theorem", "add_pf_sum_overlap_zero", ["tactic", "ring_exp"]], ["add", "theorem", "add_pf_sum_z", ["tactic", "ring_exp"]], ["add", "theorem", "add_pf_z_sum", ["tactic", "ring_exp"]], ["add", "theorem", "atom_to_sum_pf", ["tactic", "ring_exp"]], ["add", "theorem", "base_to_exp_pf", ["tactic", "ring_exp"]], ["add", "structure", "coeff", ["tactic", "ring_exp"]], ["add", "theorem", "div_pf", ["tactic", "ring_exp"]], ["add", "inductive", "ex_type", ["tactic", "ring_exp"]], ["add", "theorem", "exp_congr", ["tactic", "ring_exp"]], ["add", "theorem", "exp_to_prod_pf", ["tactic", "ring_exp"]], ["add", "theorem", "inverse_pf", ["tactic", "ring_exp"]], ["add", "theorem", "mul_coeff_pf_mul_one", ["tactic", "ring_exp"]], ["add", "theorem", "mul_coeff_pf_one_mul", ["tactic", "ring_exp"]], ["add", "theorem", "mul_p_pf_sum", ["tactic", "ring_exp"]], ["add", "theorem", "mul_p_pf_zero", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pf_c_c", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pf_c_prod", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pf_prod_c", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pf_sum", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pf_zero", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pp_pf_overlap", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pp_pf_prod_gt", ["tactic", "ring_exp"]], ["add", "theorem", "mul_pp_pf_prod_lt", ["tactic", "ring_exp"]], ["add", "theorem", "negate_pf", ["tactic", "ring_exp"]], ["add", "theorem", "pow_e_pf_exp", ["tactic", "ring_exp"]], ["add", "theorem", "pow_p_pf_cons", ["tactic", "ring_exp"]], ["add", "theorem", "pow_p_pf_one", ["tactic", "ring_exp"]], ["add", "theorem", "pow_p_pf_singleton", ["tactic", "ring_exp"]], ["add", "theorem", "pow_p_pf_succ", ["tactic", "ring_exp"]], ["add", "theorem", "pow_p_pf_zero", ["tactic", "ring_exp"]], ["add", "theorem", "pow_pf_sum", ["tactic", "ring_exp"]], ["add", "theorem", "pow_pf_zero", ["tactic", "ring_exp"]], ["add", "theorem", "pow_pp_pf_c", ["tactic", "ring_exp"]], ["add", "theorem", "pow_pp_pf_one", ["tactic", "ring_exp"]], ["add", "theorem", "pow_pp_pf_prod", ["tactic", "ring_exp"]], ["add", "theorem", "prod_congr", ["tactic", "ring_exp"]], ["add", "theorem", "prod_to_sum_pf", ["tactic", "ring_exp"]], ["add", "theorem", "simple_pf_exp_one", ["tactic", "ring_exp"]], ["add", "theorem", "simple_pf_prod_neg_one", ["tactic", "ring_exp"]], ["add", "theorem", "simple_pf_prod_one", ["tactic", "ring_exp"]], ["add", "theorem", "simple_pf_sum_zero", ["tactic", "ring_exp"]], ["add", "theorem", "simple_pf_var_one", ["tactic", "ring_exp"]], ["add", "theorem", "sub_pf", ["tactic", "ring_exp"]], ["add", "theorem", "sum_congr", ["tactic", "ring_exp"]]]}, {"oldPath": null, "newPath": "test/ring_exp.lean", "changes": [["add", "def", "pow_sub_pow_factor", []]]}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": [["del", "structure", "equiv", []], ["mod", "def", "eta_expansion_test2", []], ["add", "structure", "my_equiv", []]]}]}, {"timestamp": 1575891619, "sha": "1809eb40", "message": "feat(tactic/default): import suggest (#1791)", "changes": [{"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}]}, {"timestamp": 1575877252, "sha": "acd769af", "message": "feat(analysis/calculus/deriv): derivative of division and polynomials (#1769)\n* feat(data/set/intervals): more properties of intervals\n* fix docstrings\n* blank space\n* iff versions\n* fix docstring\n* more details in docstrings\n* initial commit\n* div_deriv\n* more derivatives\n* cleanup\n* better docstring\n* fix\n* better\n* minor fix\n* simp attributes\n* Update src/analysis/calculus/deriv.lean\nCo-Authored-By: Rob Lewis \n* Update src/analysis/calculus/deriv.lean\nCo-Authored-By: Rob Lewis \n* nolint\n* pow derivative\n* Update src/topology/continuous_on.lean\nCo-Authored-By: Johan Commelin \n* comp_add and friends\n* remove useless variable", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_div", []], ["add", "theorem", "deriv_inv", []], ["add", "theorem", "deriv_pow", []], ["add", "theorem", "deriv_within_div", []], ["add", "theorem", "deriv_within_inv", []], ["add", "theorem", "deriv_within_pow", []], ["add", "theorem", "div", ["differentiable"]], ["add", "theorem", "div", ["differentiable_at"]], ["add", "theorem", "differentiable_at_inv", []], ["add", "theorem", "differentiable_at_pow", []], ["add", "theorem", "div", ["differentiable_on"]], ["add", "theorem", "differentiable_on_inv", []], ["add", "theorem", "differentiable_on_pow", []], ["add", "theorem", "differentiable_pow", []], ["add", "theorem", "div", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_inv", []], ["add", "theorem", "differentiable_within_at_pow", []], ["add", "theorem", "fderiv_inv", []], ["add", "theorem", "fderiv_within_inv", []], ["add", "theorem", "div", ["has_deriv_at"]], ["add", "theorem", "has_deriv_at_inv", []], ["add", "theorem", "has_deriv_at_inv_one", []], ["add", "theorem", "has_deriv_at_pow", []], ["add", "theorem", "div", ["has_deriv_within_at"]], ["add", "theorem", "nhds_within", ["has_deriv_within_at"]], ["add", "theorem", "has_deriv_within_at_inv", []], ["add", "theorem", "has_deriv_within_at_pow", []], ["add", "theorem", "has_fderiv_at_inv", []], ["add", "theorem", "has_fderiv_within_at_inv", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["del", "theorem", "differentiable", ["continuous_linear_map"]], ["del", "theorem", "differentiable_at", ["continuous_linear_map"]], ["del", "theorem", "differentiable_on", ["continuous_linear_map"]], ["del", "theorem", "differentiable_within_at", ["continuous_linear_map"]], ["del", "theorem", "fderiv", ["continuous_linear_map"]], ["del", "theorem", "fderiv_within", ["continuous_linear_map"]], ["del", "theorem", "has_fderiv_at", ["continuous_linear_map"]], ["del", "theorem", "has_fderiv_within_at", ["continuous_linear_map"]], ["add", "theorem", "nhds_within", ["has_fderiv_within_at"]], ["add", "theorem", "has_fderiv_within_at_of_not_mem_closure", []], ["add", "theorem", "continuous_left", ["is_bounded_bilinear_map"]], ["add", "theorem", "continuous_right", ["is_bounded_bilinear_map"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "div", ["filter", "tendsto"]], ["add", "theorem", "inv'", ["filter", "tendsto"]], ["add", "theorem", "continuous_on_inv", ["normed_field"]], ["add", "theorem", "tendsto_inv", ["normed_field"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bounded_bilinear_map_smul_right", []]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "add_comp", ["continuous_linear_map"]], ["add", "theorem", "comp_add", ["continuous_linear_map"]], ["add", "theorem", "comp_id", ["continuous_linear_map"]], ["add", "theorem", "comp_smul", ["continuous_linear_map"]], ["add", "theorem", "comp_zero", ["continuous_linear_map"]], ["add", "theorem", "id_comp", ["continuous_linear_map"]], ["add", "theorem", "smul_comp", ["continuous_linear_map"]], ["add", "theorem", "zero_comp", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "mem_nhds_within_iff", ["metric"]], ["add", "theorem", "tendsto_nhds_within_nhds", ["metric"]], ["add", "theorem", "tendsto_nhds_within_nhds_within", ["metric"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["add", "theorem", "mem_closure_iff_seq_limit", []]]}]}, {"timestamp": 1575748039, "sha": "4c382b12", "message": "(tactic/tidy): add docstring [skip ci] (#1788)\n* (tactic/tidy): add docstring [skip ci]\n* Update src/tactic/tidy.lean\n* mention [tidy] attribute", "changes": [{"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1575740917, "sha": "3c9f8f0f", "message": "feat(algebra/field_power): fpow is a strict mono (#1778)\n* WIP\n* feat(algebra/field): remove is_field_hom\nA field homomorphism is just a ring homomorphism.\nThis is one trivial tiny step in moving over to bundled homs.\n* Fix up nolints.txt\n* Process comments from reviews\n* Rename lemma", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "cast_fpow", []], ["mod", "def", "fpow", []], ["mod", "theorem", "fpow_add", []], ["mod", "theorem", "fpow_eq_gpow", []], ["add", "theorem", "fpow_eq_zero", []], ["add", "theorem", "fpow_inj", []], ["mod", "theorem", "fpow_inv", []], ["add", "theorem", "fpow_le_iff_le", []], ["mod", "theorem", "fpow_le_of_le", []], ["mod", "theorem", "fpow_le_one_of_nonpos", []], ["add", "theorem", "fpow_lt_iff_lt", []], ["mod", "theorem", "fpow_mul", []], ["mod", "theorem", "fpow_ne_zero_of_ne_zero", []], ["mod", "theorem", "fpow_neg", []], ["add", "theorem", "fpow_neg_mul_fpow_self", []], ["mod", "theorem", "fpow_neg_succ_of_nat", []], ["mod", "theorem", "fpow_nonneg_of_nonneg", []], ["mod", "theorem", "fpow_of_nat", []], ["mod", "theorem", "fpow_one", []], ["mod", "theorem", "fpow_pos_of_pos", []], ["add", "theorem", "fpow_strict_mono", []], ["mod", "theorem", "fpow_sub", []], ["mod", "theorem", "fpow_zero", []], ["add", "theorem", "injective_fpow", []], ["add", "theorem", "map_fpow'", ["is_ring_hom"]], ["mod", "theorem", "mul_fpow", []], ["add", "theorem", "fpow_ne_zero_of_pos", ["nat"]], ["add", "theorem", "fpow_pos_of_pos", ["nat"]], ["mod", "theorem", "one_fpow", []], ["mod", "theorem", "one_le_fpow_of_nonneg", []], ["mod", "theorem", "one_lt_fpow", []], ["mod", "theorem", "one_lt_pow", []], ["mod", "theorem", "pow_le_max_of_min_le", []], ["mod", "theorem", "unit_pow", []], ["mod", "theorem", "zero_fpow", []], ["mod", "theorem", "zero_gpow", []]]}]}, {"timestamp": 1575726561, "sha": "04559629", "message": "refactor(order/bounds,*): move code around to make `order.bounds` not depend on `complete_lattice` (#1783)\n* refactor(order/bounds,*): move code around to make `order.bounds` not depend on `complete_lattice`\nIn another PR I'm going to prove more facts in `order/bounds`, then\nreplace many proofs of lemmas about `(c)Sup`/`(c)Inf` with references to lemmas\nabout `is_lub`/`is_glb`.\n* Move more code to `basic`, rewrite the only remaining proof in `default`\n* Rename\n* Add `default.lean`", "changes": [{"oldPath": "archive/cubing_a_cube.lean", "newPath": "archive/cubing_a_cube.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "bdd_above_finite", ["set"]], ["add", "theorem", "bdd_above_finite_union", ["set"]], ["add", "theorem", "bdd_below_finite", ["set"]], ["add", "theorem", "bdd_below_finite_union", ["set"]]]}, {"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals/basic.lean", "changes": [["del", "theorem", "eq_of_Ico_disjoint", ["set"]], ["del", "theorem", "is_glb_Icc", ["set"]], ["del", "theorem", "is_glb_Ici", ["set"]], ["del", "theorem", "is_glb_Ico", ["set"]], ["del", "theorem", "is_glb_Ioc", ["set"]], ["del", "theorem", "is_glb_Ioi", ["set"]], ["del", "theorem", "is_glb_Ioo", ["set"]], ["del", "theorem", "is_lub_Icc", ["set"]], ["del", "theorem", "is_lub_Ico", ["set"]], ["del", "theorem", "is_lub_Iic", ["set"]], ["del", "theorem", "is_lub_Iio", ["set"]], ["del", "theorem", "is_lub_Ioc", ["set"]], ["del", "theorem", "is_lub_Ioo", ["set"]]]}, {"oldPath": null, "newPath": "src/data/set/intervals/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/set/intervals/disjoint.lean", "changes": [["add", "theorem", "Ico_disjoint_Ico", ["set"]], ["add", "theorem", "eq_of_Ico_disjoint", ["set"]]]}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["add", "theorem", "mk", ["bdd_above"]], ["add", "def", "bdd_above", []], ["add", "theorem", "bdd_above_empty", []], ["add", "theorem", "bdd_above_insert", []], ["add", "theorem", "bdd_above_inter_left", []], ["add", "theorem", "bdd_above_inter_right", []], ["add", "theorem", "bdd_above_of_bdd_above_of_monotone", []], ["add", "theorem", "bdd_above_singleton", []], ["add", "theorem", "bdd_above_subset", []], ["add", "theorem", "bdd_above_top", []], ["add", "theorem", "bdd_above_union", []], ["add", "theorem", "mk", ["bdd_below"]], ["add", "def", "bdd_below", []], ["add", "theorem", "bdd_below_bot", []], ["add", "theorem", "bdd_below_empty", []], ["add", "theorem", "bdd_below_insert", []], ["add", "theorem", "bdd_below_inter_left", []], ["add", "theorem", "bdd_below_inter_right", []], ["add", "theorem", "bdd_below_of_bdd_below_of_monotone", []], ["add", "theorem", "bdd_below_singleton", []], ["add", "theorem", "bdd_below_subset", []], ["add", "theorem", "bdd_below_union", []], ["add", "theorem", "is_glb_Icc", []], ["add", "theorem", "is_glb_Ici", []], ["add", "theorem", "is_glb_Ico", []], ["del", "theorem", "is_glb_Inf", []], ["add", "theorem", "is_glb_Ioc", []], ["add", "theorem", "is_glb_Ioi", []], ["add", "theorem", "is_glb_Ioo", []], ["del", "theorem", "is_glb_iff_Inf_eq", []], ["del", "theorem", "is_glb_iff_infi_eq", []], ["del", "theorem", "is_glb_infi", []], ["add", "theorem", "is_lub_Icc", []], ["add", "theorem", "is_lub_Ico", []], ["add", "theorem", "is_lub_Iic", []], ["add", "theorem", "is_lub_Iio", []], ["add", "theorem", "is_lub_Ioc", []], ["add", "theorem", "is_lub_Ioo", []], ["del", "theorem", "is_lub_Sup", []], ["del", "theorem", "is_lub_iff_Sup_eq", []], ["del", "theorem", "is_lub_iff_supr_eq", []], ["del", "theorem", "is_lub_supr", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "is_glb_Inf", ["lattice"]], ["add", "theorem", "is_glb_iff_Inf_eq", ["lattice"]], ["add", "theorem", "is_glb_iff_infi_eq", ["lattice"]], ["add", "theorem", "is_glb_infi", ["lattice"]], ["add", "theorem", "is_lub_Sup", ["lattice"]], ["add", "theorem", "is_lub_iff_Sup_eq", ["lattice"]], ["add", "theorem", "is_lub_iff_supr_eq", ["lattice"]], ["add", "theorem", "is_lub_supr", ["lattice"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "mk", ["bdd_above"]], ["del", "def", "bdd_above", []], ["del", "theorem", "bdd_above_empty", []], ["del", "theorem", "bdd_above_finite", []], ["del", "theorem", "bdd_above_finite_union", []], ["del", "theorem", "bdd_above_insert", []], ["del", "theorem", "bdd_above_inter_left", []], ["del", "theorem", "bdd_above_inter_right", []], ["del", "theorem", "bdd_above_of_bdd_above_of_monotone", []], ["del", "theorem", "bdd_above_singleton", []], ["del", "theorem", "bdd_above_subset", []], ["del", "theorem", "bdd_above_top", []], ["del", "theorem", "bdd_above_union", []], ["del", "theorem", "mk", ["bdd_below"]], ["del", "def", "bdd_below", []], ["del", "theorem", "bdd_below_bot", []], ["del", "theorem", "bdd_below_empty", []], ["del", "theorem", "bdd_below_finite", []], ["del", "theorem", "bdd_below_finite_union", []], ["del", "theorem", "bdd_below_insert", []], ["del", "theorem", "bdd_below_inter_left", []], ["del", "theorem", "bdd_below_inter_right", []], ["del", "theorem", "bdd_below_of_bdd_below_of_monotone", []], ["del", "theorem", "bdd_below_singleton", []], ["del", "theorem", "bdd_below_subset", []], ["del", "theorem", "bdd_below_union", []]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}]}, {"timestamp": 1575670181, "sha": "6968d749", "message": "chore(travis): add instance priority linter to CI (#1787)\n* add instance priority to linter\n* Update mk_nolint.lean\n* fix fintype.compact_space prio", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1575649478, "sha": "8ca92637", "message": "feat(topology/subset_properties): fintype.compact_space (#1786)\nFinite topological spaces are compact.", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1575645653, "sha": "70841824", "message": "feat(topology/dense_embedding): dense_range.equalizer (#1785)\n* feat(topology/dense_embedding): dense_range.equalizer\nTwo continuous functions to a t2-space\nthat agree on a dense set are equal.\n* Fix docstring", "changes": [{"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "equalizer", ["dense_range"]]]}]}, {"timestamp": 1575579624, "sha": "7221900b", "message": "feat(data/set/basic): more lemmas about `set.nonempty` (#1780)\n* feat(data/set/basic): more lemmas about `set.nonempty`\n* Fix compile", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "insert_nonempty", ["set"]], ["add", "theorem", "ne_empty", ["set", "nonempty"]], ["mod", "theorem", "singleton_ne_empty", ["set"]], ["add", "theorem", "singleton_nonempty", ["set"]]]}]}, {"timestamp": 1575566536, "sha": "2adc122c", "message": "feat(data/set/finite): remove exists_finset_of_finite (#1782)\n* feat(data/set/finite): remove exists_finset_of_finite\nexists_finset_of_finite is a duplicate of finite.exists_finset_coe\nAt same time, provide a `can_lift` instance to lift sets to finsets.\n* Add docstring", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "exists_finset_of_finite", ["set"]]]}]}, {"timestamp": 1575559436, "sha": "3e6fe842", "message": "feat(meta/expr): use structure_fields (#1766)\nremoves is_structure_like\nsimplifies definition of is_structure\nrenames and simplifies definition get_projections. It is now called structure_fields_full", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1575526051, "sha": "de377ea3", "message": "feat(algebra/field): remove is_field_hom (#1777)\n* feat(algebra/field): remove is_field_hom\nA field homomorphism is just a ring homomorphism.\nThis is one trivial tiny step in moving over to bundled homs.\n* Fix up nolints.txt\n* Remove duplicate instances", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["del", "theorem", "injective", ["is_field_hom"]], ["del", "theorem", "map_div'", ["is_field_hom"]], ["del", "theorem", "map_div", ["is_field_hom"]], ["del", "theorem", "map_eq_zero", ["is_field_hom"]], ["del", "theorem", "map_inv'", ["is_field_hom"]], ["del", "theorem", "map_inv", ["is_field_hom"]], ["del", "theorem", "map_ne_zero", ["is_field_hom"]], ["del", "def", "is_field_hom", []], ["add", "theorem", "injective", ["is_ring_hom"]], ["add", "theorem", "map_div'", ["is_ring_hom"]], ["add", "theorem", "map_div", ["is_ring_hom"]], ["add", "theorem", "map_eq_zero", ["is_ring_hom"]], ["add", "theorem", "map_inv'", ["is_ring_hom"]], ["add", "theorem", "map_inv", ["is_ring_hom"]], ["add", "theorem", "map_ne_zero", ["is_ring_hom"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "map_fpow", ["is_field_hom"]], ["add", "theorem", "map_fpow", ["is_ring_hom"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "degree_map", ["polynomial"]], ["mod", "theorem", "leading_coeff_map", ["polynomial"]], ["mod", "theorem", "map_div", ["polynomial"]], ["mod", "theorem", "map_eq_zero", ["polynomial"]], ["mod", "theorem", "map_mod", ["polynomial"]], ["mod", "theorem", "nat_degree_map", ["polynomial"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": [["mod", "theorem", "splits_comp_of_splits", ["polynomial"]], ["mod", "theorem", "splits_map_iff", ["polynomial"]]]}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1575509502, "sha": "324ae4b1", "message": "feat(data/set/basic): define `set.nonempty` (#1779)\n* Define `set.nonempty` and prove some basic lemmas\n* Migrate `well_founded.min` to `set.nonempty`\n* Fix a docstring and a few names\nBased on comments in PR\n* More docs\n* Linebreaks\n* +2 docstrings\n* Fix compile\n* Fix compile of `archive/imo1988_q6`", "changes": [{"oldPath": "archive/imo1988_q6.lean", "newPath": "archive/imo1988_q6.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "empty_prod", ["set"]], ["mod", "theorem", "ne_empty_iff_exists_mem", ["set"]], ["add", "theorem", "ne_empty_iff_nonempty", ["set"]], ["add", "theorem", "fst", ["set", "nonempty"]], ["add", "theorem", "inl", ["set", "nonempty"]], ["add", "theorem", "inr", ["set", "nonempty"]], ["add", "theorem", "left", ["set", "nonempty"]], ["add", "theorem", "of_diff", ["set", "nonempty"]], ["add", "theorem", "of_ssubset'", ["set", "nonempty"]], ["add", "theorem", "of_subset", ["set", "nonempty"]], ["add", "theorem", "prod", ["set", "nonempty"]], ["add", "theorem", "right", ["set", "nonempty"]], ["add", "theorem", "snd", ["set", "nonempty"]], ["add", "theorem", "nonempty_iff_univ_nonempty", ["set"]], ["add", "theorem", "nonempty_of_mem", ["set"]], ["add", "theorem", "nonempty_of_ssubset", ["set"]], ["mod", "theorem", "prod_empty", ["set"]], ["add", "theorem", "prod_ne_empty_iff", ["set"]], ["del", "theorem", "prod_neq_empty_iff", ["set"]], ["add", "theorem", "prod_nonempty_iff", ["set"]], ["add", "theorem", "union_nonempty", ["set"]], ["add", "theorem", "univ_nonempty", ["set"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1575486235, "sha": "d4ee5b69", "message": "fix(order.basic|ring_theory.algebra): lower instance priority (#1729)\n* algebra\n* algebra2\n* algebra3\n* algebra4\n* order.basic\n* module\n* algebra/ring\n* explain default priority of 100\n* undo priority changes", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "gsmul_eq_smul", []]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "smul_def''", ["algebra"]], ["mod", "theorem", "smul_def", ["algebra"]], ["add", "theorem", "range_le", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}]}, {"timestamp": 1575474677, "sha": "43531676", "message": "doc(topology/basic): add a few doc strings [skip ci] (#1775)\n* doc(topology/basic): add a few doc strings\n* Apply suggestions from code review", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1575467181, "sha": "c43b3329", "message": "feat(data/set/intervals): more properties of intervals (#1753)\n* feat(data/set/intervals): more properties of intervals\n* fix docstrings\n* blank space\n* iff versions\n* fix docstring\n* more details in docstrings", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": [["mod", "theorem", "Ico_subset_Iio_self", ["set"]], ["add", "theorem", "Iio_subset_Iic", ["set"]], ["add", "theorem", "Iio_subset_Iic_iff", ["set"]], ["add", "theorem", "Iio_subset_Iic_self", ["set"]], ["add", "theorem", "Iio_subset_Iio", ["set"]], ["add", "theorem", "Iio_subset_Iio_iff", ["set"]], ["add", "theorem", "Ioc_subset_Icc_self", ["set"]], ["add", "theorem", "Ioc_subset_Ioi_self", ["set"]], ["add", "theorem", "Ioi_subset_Ici", ["set"]], ["add", "theorem", "Ioi_subset_Ici_iff", ["set"]], ["add", "theorem", "Ioi_subset_Ici_self", ["set"]], ["add", "theorem", "Ioi_subset_Ioi", ["set"]], ["add", "theorem", "Ioi_subset_Ioi_iff", ["set"]], ["add", "theorem", "Ioo_subset_Iio_self", ["set"]], ["add", "theorem", "Ioo_subset_Ioc_self", ["set"]], ["add", "theorem", "Ioo_subset_Ioi_self", ["set"]], ["add", "theorem", "is_glb_Icc", ["set"]], ["add", "theorem", "is_glb_Ici", ["set"]], ["add", "theorem", "is_glb_Ico", ["set"]], ["add", "theorem", "is_glb_Ioc", ["set"]], ["add", "theorem", "is_glb_Ioi", ["set"]], ["add", "theorem", "is_glb_Ioo", ["set"]], ["add", "theorem", "is_lub_Icc", ["set"]], ["add", "theorem", "is_lub_Ico", ["set"]], ["add", "theorem", "is_lub_Iic", ["set"]], ["add", "theorem", "is_lub_Iio", ["set"]], ["add", "theorem", "is_lub_Ioc", ["set"]], ["add", "theorem", "is_lub_Ioo", ["set"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "closure_Ico", []], ["add", "theorem", "closure_Iio'", []], ["add", "theorem", "closure_Iio", []], ["add", "theorem", "closure_Ioc", []], ["add", "theorem", "closure_Ioi'", []], ["add", "theorem", "closure_Ioi", []], ["add", "theorem", "closure_Ioo", []], ["add", "theorem", "is_closed_Ici", []], ["add", "theorem", "is_closed_Iic", []], ["add", "theorem", "mem_nhds_iff_exists_Ioo_subset'", []], ["add", "theorem", "mem_nhds_iff_exists_Ioo_subset", []], ["add", "theorem", "mem_nhds_within_Ici_iff_exists_Icc_subset", []], ["add", "theorem", "mem_nhds_within_Ici_iff_exists_Ico_subset'", []], ["add", "theorem", "mem_nhds_within_Ici_iff_exists_Ico_subset", []], ["add", "theorem", "mem_nhds_within_Iic_iff_exists_Icc_subset", []], ["add", "theorem", "mem_nhds_within_Iic_iff_exists_Ioc_subset'", []], ["add", "theorem", "mem_nhds_within_Iic_iff_exists_Ioc_subset", []], ["add", "theorem", "mem_nhds_within_Iio_iff_exists_Ico_subset", []], ["add", "theorem", "mem_nhds_within_Iio_iff_exists_Ioo_subset'", []], ["add", "theorem", "mem_nhds_within_Iio_iff_exists_Ioo_subset", []], ["add", "theorem", "mem_nhds_within_Ioi_iff_exists_Ioc_subset", []], ["add", "theorem", "mem_nhds_within_Ioi_iff_exists_Ioo_subset'", []], ["add", "theorem", "mem_nhds_within_Ioi_iff_exists_Ioo_subset", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "continuous_within_at", ["continuous"]], ["add", "theorem", "tendsto", ["continuous_within_at"]], ["mod", "theorem", "mem_nhds_within", []], ["add", "theorem", "mem_nhds_within_iff_exists_mem_nhds_inter", []]]}]}, {"timestamp": 1575450767, "sha": "2c2cbb0d", "message": "feat(data/nat/prime): monoid.prime_pow and docs (#1772)\n* feat(data/nat/prime): monoid.prime_pow and docs\nFrom the perfectoid project.\nAlso add some documentation.\n* Add backticks in docs", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1575441871, "sha": "71247ebe", "message": "feat(lift): check whether target is proposition (#1767)\n* feat(lift): check whether target is proposition\n* simplify", "changes": [{"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1575433768, "sha": "c1105de1", "message": "feat(tactic): mk_simp_attribute command that includes doc string (#1763)\n* feat(tactic): mk_simp_attr command that includes doc string\n* Update tactics.md\n* rename mk_simp_attr to mk_simp_set\n* rename again to mk_simp_attribute\n* explain syntax better\n* simp with, not simp using\n* simp with, not simp using\n* avoid parsing ambiguity\n* fix build\n* Update docs/tactics.md\nCo-Authored-By: Floris van Doorn ", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/category/basic.lean", "newPath": "src/category/basic.lean", "changes": []}, {"oldPath": "src/category/monad/basic.lean", "newPath": "src/category/monad/basic.lean", "changes": []}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}]}, {"timestamp": 1575419288, "sha": "b031290b", "message": "feat(data/finset): lemmas for folding min and max (#1774)\nFrom the perfectoid project.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "fold_max_le", ["finset"]], ["add", "theorem", "fold_max_lt", ["finset"]], ["add", "theorem", "fold_min_le", ["finset"]], ["add", "theorem", "fold_min_lt", ["finset"]], ["add", "theorem", "fold_op_rel_iff_and", ["finset"]], ["add", "theorem", "fold_op_rel_iff_or", ["finset"]], ["add", "theorem", "le_fold_max", ["finset"]], ["add", "theorem", "le_fold_min", ["finset"]], ["add", "theorem", "lt_fold_max", ["finset"]], ["add", "theorem", "lt_fold_min", ["finset"]]]}]}, {"timestamp": 1575406507, "sha": "827e78b1", "message": "feat(lint): avoid Travis error when declarations are renamed (#1771)", "changes": [{"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}]}, {"timestamp": 1575398115, "sha": "866be5f6", "message": "feat(data/polynomial): monic.as_sum (#1773)\nFrom the perfectoid project.\nIt is often useful to write a monic polynomial f in the form\n`X^n + sum of lower degree terms`.", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "as_sum", ["polynomial", "monic"]]]}]}, {"timestamp": 1575391835, "sha": "922a4ebe", "message": "feat(set_theory/cardinal): eq_one_iff_subsingleton_and_nonempty (#1770)\n* feat(set_theory/cardinal): eq_one_iff_subsingleton_and_nonempty\nFrom the perfectoid project\n* Update src/set_theory/cardinal.lean", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "eq_one_iff_subsingleton_and_nonempty", ["cardinal"]]]}]}, {"timestamp": 1575384458, "sha": "3266b960", "message": "feat(tactic/lift): automatically handle pi types (#1755)\n* feat(tactic/lift): automatically handle pi types\n* Add missing docs\n* Update docs/tactics.md\nCo-Authored-By: sgouezel ", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1575359172, "sha": "89e7f6fd", "message": "feat(README): add link to Lean Links [skip ci] (#1768)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1575307771, "sha": "3913d303", "message": "refactor(topology/algebra): use dot notation in tendsto.add and friends (#1765)", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv", ["filter", "tendsto"]], ["add", "theorem", "sub", ["filter", "tendsto"]], ["del", "theorem", "inv", ["tendsto"]], ["del", "theorem", "sub", ["tendsto"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "mul", ["filter", "tendsto"]], ["del", "theorem", "mul", ["tendsto"]]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1575298104, "sha": "87929bf7", "message": "doc(*): correct bad markdown (#1764)\n* Update bochner_integration.lean\n* Update mean_value.lean\n* Update expr.lean\n* Update doc.md", "changes": [{"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1575278076, "sha": "1c4a2966", "message": "chore(topology/*): dots for continuity proofs (#1762)\n* chore(topology/*): dots for continuity proofs\nThis is a sequel to 431551a891a270260b6ece53dcdff39a0527cf78\n* fix build", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}]}, {"timestamp": 1575273467, "sha": "89fd0883", "message": "feat(topology/uniform_space/cauchy): sequentially complete space with a countable basis is complete (#1761)\n* feat(topology/uniform_space/cauchy): sequentially complete space with a countable basis is complete\nThis is a more general version of what is currently proved in\n`cau_seq_filter`. Migration of the latter file to the new code will be\ndone in a separate PR.\n* Add docs, drop unused section vars, make arguments `U` and `U'` explicit.\n* Update src/topology/uniform_space/cauchy.lean\nCo-Authored-By: sgouezel \n* Fix some comments", "changes": [{"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "cauchy_seq_of_controlled", []], ["add", "theorem", "le_nhds_of_cauchy_adhp_aux", []], ["add", "theorem", "le_nhds_of_seq_tendsto_nhds", ["sequentially_complete"]], ["add", "def", "seq", ["sequentially_complete"]], ["add", "theorem", "seq_is_cauchy_seq", ["sequentially_complete"]], ["add", "theorem", "seq_mem", ["sequentially_complete"]], ["add", "theorem", "seq_pair_mem", ["sequentially_complete"]], ["add", "def", "set_seq", ["sequentially_complete"]], ["add", "def", "set_seq_aux", ["sequentially_complete"]], ["add", "theorem", "set_seq_mem", ["sequentially_complete"]], ["add", "theorem", "set_seq_mono", ["sequentially_complete"]], ["add", "theorem", "set_seq_prod_subset", ["sequentially_complete"]], ["add", "theorem", "set_seq_sub_aux", ["sequentially_complete"]], ["add", "theorem", "complete_of_cauchy_seq_tendsto", ["uniform_space"]], ["add", "theorem", "complete_of_convergent_controlled_sequences", ["uniform_space"]]]}]}, {"timestamp": 1575221534, "sha": "177ccedb", "message": "feat(measure/bochner_integration): dominated convergence theorem (#1757)\n* feat(measure/bochner_integration): dominated convergence theorem\nThis PR\n* proves the dominated convergence theorem\n* and some other lemmas including `integral_congr_ae`, `norm_integral_le_lintegral_norm`.\n* adds several equivalent definitions of the predicate `integrable` and shortens some proofs.\n* fix linting error\n* Add some section doc strings\n* Indentation is very wrong\n* Remove useless assumptions; fix doc strings\n* remove `private`; add a doc string for Lebesgue's dominated convergence theorem\n* Update basic.lean", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "edist_eq_coe_nnnorm", []], ["add", "theorem", "of_real_norm_eq_coe_nnnorm", []]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "theorem", "integral_congr_ae", ["measure_theory"]], ["mod", "theorem", "integral_smul", ["measure_theory"]], ["add", "theorem", "norm_Integral_le_one", ["measure_theory", "l1"]], ["add", "theorem", "norm_integral_le", ["measure_theory", "l1"]], ["add", "theorem", "norm_integral_le_lintegral_norm", ["measure_theory"]], ["add", "theorem", "of_real_norm_integral_le_lintegral_norm", ["measure_theory"]], ["add", "theorem", "tendsto_integral_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["del", "theorem", "dominated_convergence_nn", ["measure_theory"]], ["add", "theorem", "tendsto_lintegral_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "all_ae_of_real_F_le_bound", ["measure_theory"]], ["add", "theorem", "all_ae_of_real_f_le_bound", ["measure_theory"]], ["add", "theorem", "all_ae_tendsto_of_real_norm", ["measure_theory"]], ["add", "theorem", "integrable_iff_edist", ["measure_theory"]], ["del", "theorem", "integrable_iff_lintegral_edist", ["measure_theory"]], ["add", "theorem", "integrable_iff_norm", ["measure_theory"]], ["mod", "theorem", "integrable_iff_of_ae_eq", ["measure_theory"]], ["add", "theorem", "integrable_iff_of_real", ["measure_theory"]], ["add", "theorem", "integrable_norm_iff", ["measure_theory"]], ["add", "theorem", "integrable_of_dominated_convergence", ["measure_theory"]], ["add", "theorem", "integrable_of_integrable_bound", ["measure_theory"]], ["add", "theorem", "norm_eq_nnnorm_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "norm_eq_norm_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "norm_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "tendsto_lintegral_norm_of_dominated_convergence", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "tendsto_to_real", ["ennreal"]]]}]}, {"timestamp": 1575216894, "sha": "8a89b063", "message": "refactor(analysis/calculus/mean_value): prove the mean value theorem using 1D derivative (#1740)\n* refactor(analysis/calculus/mean_value): prove the mean value theorem using 1D derivative\n* docstring\n* use iff.rfl\n* fix build\n* fix docstring", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "deriv_smul'", []], ["add", "theorem", "deriv_within_smul'", []], ["add", "theorem", "comp_deriv", ["fderiv"]], ["add", "theorem", "comp_deriv_within", ["fderiv_within"]], ["add", "theorem", "smul'", ["has_deriv_at"]], ["add", "theorem", "smul'", ["has_deriv_within_at"]], ["add", "theorem", "comp_has_deriv_at", ["has_fderiv_at"]], ["add", "theorem", "comp_has_deriv_within_at", ["has_fderiv_at"]], ["add", "theorem", "comp_has_deriv_within_at", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["del", "theorem", "fderiv_within", ["differentiable"]], ["add", "theorem", "fderiv_within", ["differentiable_at"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}]}, {"timestamp": 1575212831, "sha": "431551a8", "message": "refactor(topology/algebra): use the dot notation in `continuous_mul` and friends (#1758)\n* continuous_add\n* fixes\n* more fixes\n* fix\n* tendsto_add\n* fix tendsto\n* last fix", "changes": [{"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "mul_mul", ["filter", "tendsto"]], ["del", "theorem", "tendsto_mul_mul", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv", ["continuous"]], ["add", "theorem", "sub", ["continuous"]], ["del", "theorem", "continuous_inv'", []], ["mod", "theorem", "continuous_inv", []], ["del", "theorem", "continuous_sub'", []], ["mod", "theorem", "continuous_sub", []], ["add", "theorem", "inv", ["tendsto"]], ["add", "theorem", "sub", ["tendsto"]], ["del", "theorem", "tendsto_inv", []], ["del", "theorem", "tendsto_sub", []]]}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "mul", ["continuous"]], ["del", "theorem", "continuous_mul'", []], ["mod", "theorem", "continuous_mul", []], ["add", "theorem", "mul", ["tendsto"]], ["del", "theorem", "tendsto_mul'", []], ["mod", "theorem", "tendsto_mul", []]]}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "max", ["continuous"]], ["add", "theorem", "min", ["continuous"]], ["del", "theorem", "continuous_max", []], ["del", "theorem", "continuous_min", []], ["add", "theorem", "max", ["tendsto"]], ["add", "theorem", "min", ["tendsto"]], ["del", "theorem", "tendsto_max", []], ["del", "theorem", "tendsto_min", []]]}, {"oldPath": "src/topology/algebra/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "add", ["uniform_continuous"]], ["add", "theorem", "neg", ["uniform_continuous"]], ["add", "theorem", "sub", ["uniform_continuous"]], ["del", "theorem", "uniform_continuous_add'", []], ["mod", "theorem", "uniform_continuous_add", []], ["del", "theorem", "uniform_continuous_neg'", []], ["mod", "theorem", "uniform_continuous_neg", []], ["del", "theorem", "uniform_continuous_sub'", []], ["mod", "theorem", "uniform_continuous_sub", []]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["add", "theorem", "mul", ["uniform_space", "completion", "continuous"]], ["del", "theorem", "continuous_mul'", ["uniform_space", "completion"]], ["mod", "theorem", "continuous_mul", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": [["add", "theorem", "inv", ["complex", "continuous"]], ["del", "theorem", "continuous_inv'", ["complex"]], ["mod", "theorem", "continuous_inv", ["complex"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "sub", ["nnreal", "continuous"]], ["del", "theorem", "continuous_sub'", ["nnreal"]], ["mod", "theorem", "continuous_sub", ["nnreal"]], ["add", "theorem", "sub", ["nnreal", "tendsto"]], ["del", "theorem", "tendsto_sub", ["nnreal"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "inv", ["real", "continuous"]], ["del", "theorem", "continuous_inv'", ["real"]], ["mod", "theorem", "continuous_inv", ["real"]]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["del", "theorem", "mem_uniformity_of_uniform_continuous_invarant", []], ["add", "theorem", "mem_uniformity_of_uniform_continuous_invariant", []]]}, {"oldPath": "test/apply.lean", "newPath": "test/apply.lean", "changes": []}]}, {"timestamp": 1575214574, "sha": "a350f034", "message": "chore(scripts/nolint.txt): regenerate", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1575131036, "sha": "343c54d6", "message": "feat(analysis/complex/exponential): limits of exp (#1744)\n* staging\n* exp div pow\n* cleanup\n* oops\n* better proof\n* cleanup\n* docstring\n* typo in docstring", "changes": [{"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "sin_gt_sub_cube", ["real"]], ["add", "theorem", "tendsto_exp_at_top", ["real"]], ["add", "theorem", "tendsto_exp_div_pow_at_top", ["real"]], ["add", "theorem", "tendsto_exp_neg_at_top_nhds_0", ["real"]], ["add", "theorem", "tendsto_pow_mul_exp_neg_at_top_nhds_0", ["real"]]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_at_top_div", []], ["add", "theorem", "tendsto_at_top_mul_left'", []], ["add", "theorem", "tendsto_at_top_mul_left", []], ["add", "theorem", "tendsto_at_top_mul_right'", []], ["add", "theorem", "tendsto_at_top_mul_right", []], ["mod", "theorem", "tendsto_pow_at_top_at_top_of_gt_1", []]]}]}, {"timestamp": 1575064046, "sha": "e68b2be5", "message": "doc(docs/contribute, meta/expr): sectioning doc strings (#1723)\n* doc(docs/contribute, meta/expr): explain sectioning doc strings and show in practice\n* updates", "changes": [{"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1575061198, "sha": "b46ef845", "message": "doc(windows.md): update [ci skip] (#1742)\n* doc(windows.md): update [ci skip]\n* small\n* Update docs/install/windows.md\nCo-Authored-By: Bryan Gin-ge Chen \n* wording", "changes": [{"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1575053519, "sha": "9bb69dca", "message": "feat(analysis/specific_limits): add `cauchy_seq_of_edist_le_geometric` (#1743)\n* feat(analysis/specific_limits): add `cauchy_seq_of_edist_le_geometric`\nOther changes:\n* Estimates on the convergence rate both in `edist` and `dist` cases.\n* Swap lhs with lhs in `ennreal.tsum_coe` and `nnreal.tsum_coe`,\n rename accordingly\n* Use `(1 - r)⁻¹` instead of `1 / (1 - r)` in `has_sum_geometric`\n* Add some docstrings\n* Update src/analysis/specific_limits.lean", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "aux_has_sum_of_le_geometric", []], ["add", "theorem", "cauchy_seq_of_edist_le_geometric", []], ["mod", "theorem", "cauchy_seq_of_le_geometric", []], ["add", "theorem", "cauchy_seq_of_le_geometric_two", []], ["add", "theorem", "dist_le_of_le_geometric_of_tendsto", []], ["add", "theorem", "dist_le_of_le_geometric_of_tendsto₀", []], ["add", "theorem", "dist_le_of_le_geometric_two_of_tendsto", []], ["add", "theorem", "dist_le_of_le_geometric_two_of_tendsto₀", []], ["add", "theorem", "edist_le_of_edist_le_geometric_of_tendsto", []], ["add", "theorem", "edist_le_of_edist_le_geometric_of_tendsto₀", []], ["add", "theorem", "has_sum_geometric_nnreal", []], ["add", "theorem", "summable_geometric_nnreal", []], ["mod", "theorem", "tsum_geometric", []], ["add", "theorem", "tsum_geometric_nnreal", []]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "edist_le_tsum_of_edist_le_of_tendsto", []], ["add", "theorem", "edist_le_tsum_of_edist_le_of_tendsto₀", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "coe_tsum", ["nnreal"]], ["mod", "theorem", "has_sum_coe", ["nnreal"]], ["mod", "theorem", "summable_coe", ["nnreal"]], ["add", "theorem", "summable_comp_injective", ["nnreal"]], ["del", "theorem", "tsum_coe", ["nnreal"]]]}]}, {"timestamp": 1575046470, "sha": "817711d8", "message": "feat(measure_theory/bochner_integration): linearity of the Bochner Integral (#1745)\n* Linearity of the Bochner Integral\n* prove integral_neg and integral_smul with less assumptions; make integral irreducible\n* remove simp tag\n* create simp set for integral\n* Add simp_attr.integral to nolint\n* Make it possible to unfold the definition of `integral`\nand other things.\n* Update nolints.txt\n* Make it possible to unfold l1.integral\n* Update bochner_integration.lean\n* Update bochner_integration.lean", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "extend_zero", ["continuous_linear_map"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "theorem", "smul_mk", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "def", "integral", ["measure_theory"]], ["add", "theorem", "integral_add", ["measure_theory"]], ["add", "theorem", "integral_eq", ["measure_theory"]], ["add", "theorem", "integral_eq_zero_of_non_integrable", ["measure_theory"]], ["add", "theorem", "integral_eq_zero_of_non_measurable", ["measure_theory"]], ["add", "theorem", "integral_neg", ["measure_theory"]], ["add", "theorem", "integral_smul", ["measure_theory"]], ["add", "theorem", "integral_sub", ["measure_theory"]], ["add", "theorem", "integral_zero", ["measure_theory"]], ["add", "def", "integral", ["measure_theory", "l1"]], ["add", "theorem", "integral_add", ["measure_theory", "l1"]], ["add", "def", "integral_clm", ["measure_theory", "l1"]], ["add", "theorem", "integral_eq", ["measure_theory", "l1"]], ["add", "theorem", "integral_neg", ["measure_theory", "l1"]], ["add", "theorem", "integral_smul", ["measure_theory", "l1"]], ["add", "theorem", "integral_sub", ["measure_theory", "l1"]], ["add", "theorem", "integral_zero", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_neg_iff", ["measure_theory"]], ["add", "theorem", "measurable_smul_iff", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "theorem", "integrable_neg_iff", ["measure_theory"]], ["add", "theorem", "integrable_smul_iff", ["measure_theory"]]]}]}, {"timestamp": 1575039053, "sha": "65bdbabc", "message": "chore(topology/instances/ennreal): simplify some statements&proofs (#1750)\nAPI changes:\n* `nhds_top`: use `⨅a ≠ ∞` instead of `⨅a:{a:ennreal // a ≠ ⊤}`\n* `nhds_zero`, `nhds_of_ne_top` : similarly to `nhds_top`\n* `tendsto_nhds`: get rid of the intermediate set `n`.", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "nhds_of_ne_top", ["ennreal"]], ["mod", "theorem", "nhds_top", ["ennreal"]], ["mod", "theorem", "nhds_zero", ["ennreal"]]]}]}, {"timestamp": 1575035143, "sha": "8f11c466", "message": "feat(data/real/ennreal): more simp lemmas about `inv` and continuity of `inv` (#1749)\n* Prove some algebraic properties of `ennreal.inv`\n* More algebraic lemmas\n* Prove continuity of `inv`", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_one", ["ennreal"]], ["mod", "theorem", "coe_zero", ["ennreal"]], ["add", "theorem", "inv_bijective", ["ennreal"]], ["add", "theorem", "inv_eq_inv", ["ennreal"]], ["add", "theorem", "inv_involutive", ["ennreal"]], ["add", "theorem", "inv_le_iff_inv_le", ["ennreal"]], ["add", "theorem", "inv_le_inv", ["ennreal"]], ["add", "theorem", "inv_lt_iff_inv_lt", ["ennreal"]], ["add", "theorem", "inv_lt_inv", ["ennreal"]], ["add", "theorem", "inv_pos", ["ennreal"]], ["add", "theorem", "le_inv_iff_le_inv", ["ennreal"]], ["add", "theorem", "lt_inv_iff_lt_inv", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1575027914, "sha": "1b3347df", "message": "feat(algebra/*,data/real/*): add some inequalities about `canonically_ordered_comm_semiring`s (#1746)\nUse them for `nnreal` and `ennreal`.", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "one_le_pow_of_one_le", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_le_one", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_le_pow_of_le_left", ["canonically_ordered_semiring"]], ["add", "theorem", "pow_pos", ["canonically_ordered_semiring"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "mul_le_mul", ["canonically_ordered_semiring"]], ["add", "theorem", "mul_pos", ["canonically_ordered_semiring"]], ["add", "theorem", "zero_lt_one", ["canonically_ordered_semiring"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}]}, {"timestamp": 1575012149, "sha": "8e74c62a", "message": "chore(data/finset,order/filter): simplify a few proofs (#1747)\nAlso add `finset.image_mono` and `finset.range_mono`.", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "image_mono", ["finset"]], ["add", "theorem", "range_mono", ["finset"]], ["add", "theorem", "subset_range_sup_succ", ["finset"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1574884199, "sha": "198fb09d", "message": "feat(analysis/complex/exponential): derivatives (#1695)\n* feat(analysis/complex/exponential): derivatives\n* nhds\n* nhds\n* remove omega\n* remove set_option\n* simp attributes, field type\n* restrict scalar\n* staging\n* complete proof\n* staging\n* cleanup\n* staging\n* cleanup\n* docstring\n* docstring\n* reviewer's comments\n* real derivatives of exp, sin, cos, sinh, cosh\n* fix build\n* remove priority\n* better proofs", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["mod", "theorem", "is_O_const_mul_left", ["asymptotics"]], ["mod", "theorem", "is_O_const_mul_left_iff", ["asymptotics"]], ["mod", "theorem", "is_O_const_mul_right_iff", ["asymptotics"]], ["mod", "theorem", "is_O_const_smul_left", ["asymptotics"]], ["mod", "theorem", "is_O_const_smul_left_iff", ["asymptotics"]], ["mod", "theorem", "is_O_const_smul_right", ["asymptotics"]], ["mod", "theorem", "is_O_mul", ["asymptotics"]], ["mod", "theorem", "is_O_of_is_O_const_mul_right", ["asymptotics"]], ["mod", "theorem", "is_O_smul", ["asymptotics"]], ["mod", "theorem", "is_o_const_mul_left", ["asymptotics"]], ["mod", "theorem", "is_o_const_mul_left_iff", ["asymptotics"]], ["mod", "theorem", "is_o_const_mul_right", ["asymptotics"]], ["mod", "theorem", "is_o_const_smul_left", ["asymptotics"]], ["mod", "theorem", "is_o_const_smul_left_iff", ["asymptotics"]], ["mod", "theorem", "is_o_const_smul_right", ["asymptotics"]], ["mod", "theorem", "is_o_iff_tendsto", ["asymptotics"]], ["mod", "theorem", "is_o_mul", ["asymptotics"]], ["mod", "theorem", "is_o_mul_left", ["asymptotics"]], ["mod", "theorem", "is_o_mul_right", ["asymptotics"]], ["mod", "theorem", "is_o_of_is_o_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_o_pow_id", ["asymptotics"]], ["add", "theorem", "is_o_pow_pow", ["asymptotics"]], ["mod", "theorem", "is_o_smul", ["asymptotics"]], ["mod", "theorem", "tendsto_nhds_zero_of_is_o", ["asymptotics"]]]}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_congr_of_mem_nhds", []], ["mod", "theorem", "deriv_within_inter", []], ["mod", "theorem", "has_deriv_at_filter", ["has_deriv_at"]], ["add", "theorem", "has_deriv_at_iff_is_o_nhds_zero", []], ["mod", "theorem", "has_deriv_within_at_inter", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "has_fderiv_at_iff_is_o_nhds_zero", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "deriv_cos", ["complex"]], ["add", "theorem", "deriv_cosh", ["complex"]], ["add", "theorem", "deriv_exp", ["complex"]], ["add", "theorem", "deriv_sin", ["complex"]], ["add", "theorem", "deriv_sinh", ["complex"]], ["add", "theorem", "differentiable_cos", ["complex"]], ["add", "theorem", "differentiable_cosh", ["complex"]], ["add", "theorem", "differentiable_exp", ["complex"]], ["add", "theorem", "differentiable_sin", ["complex"]], ["add", "theorem", "differentiable_sinh", ["complex"]], ["add", "theorem", "has_deriv_at_cos", ["complex"]], ["add", "theorem", "has_deriv_at_cosh", ["complex"]], ["add", "theorem", "has_deriv_at_exp", ["complex"]], ["add", "theorem", "has_deriv_at_sin", ["complex"]], ["add", "theorem", "has_deriv_at_sinh", ["complex"]], ["del", "theorem", "tendsto_exp_zero_one", ["complex"]], ["add", "theorem", "deriv_cos", ["real"]], ["add", "theorem", "deriv_cosh", ["real"]], ["add", "theorem", "deriv_exp", ["real"]], ["add", "theorem", "deriv_sin", ["real"]], ["add", "theorem", "deriv_sinh", ["real"]], ["add", "theorem", "differentiable_cos", ["real"]], ["add", "theorem", "differentiable_cosh", ["real"]], ["add", "theorem", "differentiable_exp", ["real"]], ["add", "theorem", "differentiable_sin", ["real"]], ["add", "theorem", "differentiable_sinh", ["real"]], ["add", "theorem", "has_deriv_at_cos", ["real"]], ["add", "theorem", "has_deriv_at_cosh", ["real"]], ["add", "theorem", "has_deriv_at_exp", ["real"]], ["add", "theorem", "has_deriv_at_sin", ["real"]], ["add", "theorem", "has_deriv_at_sinh", ["real"]]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "abs_exp_sub_one_sub_id_le", ["complex"]]]}]}, {"timestamp": 1574876047, "sha": "01b1576c", "message": "feat(topology/algebra/infinite_sum): prove `cauchy_seq_of_edist_le_of_summable` (#1739)\n* feat(topology/algebra/infinite_sum): prove `cauchy_seq_of_edist_le_of_summable`\nOther changes:\n* Add estimates on the distance to the limit (`dist` version only)\n* Simplify some proofs\n* Add some supporting lemmas\n* Fix a typo in a lemma name in `ennreal`\n* Add `move_cast` attrs\n* More `*_cast` tags, use `norm_cast`", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "coe_add", ["ennreal"]], ["mod", "theorem", "coe_bit0", ["ennreal"]], ["mod", "theorem", "coe_bit1", ["ennreal"]], ["mod", "theorem", "coe_eq_coe", ["ennreal"]], ["mod", "theorem", "coe_eq_one", ["ennreal"]], ["mod", "theorem", "coe_eq_zero", ["ennreal"]], ["mod", "theorem", "coe_finset_prod", ["ennreal"]], ["mod", "theorem", "coe_finset_sum", ["ennreal"]], ["mod", "theorem", "coe_le_coe", ["ennreal"]], ["mod", "theorem", "coe_lt_coe", ["ennreal"]], ["add", "theorem", "coe_max", ["ennreal"]], ["add", "theorem", "coe_min", ["ennreal"]], ["add", "theorem", "coe_mono", ["ennreal"]], ["mod", "theorem", "coe_mul", ["ennreal"]], ["mod", "theorem", "coe_nonneg", ["ennreal"]], ["mod", "theorem", "coe_pos", ["ennreal"]], ["add", "theorem", "coe_pow", ["ennreal"]], ["mod", "theorem", "coe_sub", ["ennreal"]], ["mod", "theorem", "one_eq_coe", ["ennreal"]], ["add", "theorem", "one_lt_coe_iff", ["ennreal"]], ["del", "theorem", "one_lt_zero_iff", ["ennreal"]], ["mod", "theorem", "zero_eq_coe", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_pow", ["nnreal"]], ["add", "theorem", "le_div_iff_mul_le", ["nnreal"]], ["del", "theorem", "mul_le_if_le_inv", ["nnreal"]], ["add", "theorem", "mul_le_iff_le_inv", ["nnreal"]], ["mod", "theorem", "prod_coe", ["nnreal"]], ["mod", "theorem", "smul_coe", ["nnreal"]], ["add", "theorem", "sub_def", ["nnreal"]], ["add", "theorem", "sub_pos", ["nnreal"]], ["mod", "theorem", "sum_coe", ["nnreal"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_finset_range", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "cauchy_seq_of_dist_le_of_summable", []], ["add", "theorem", "cauchy_seq_of_edist_le_of_summable", []], ["add", "theorem", "dist_le_tsum_dist_of_tendsto", []], ["add", "theorem", "dist_le_tsum_dist_of_tendsto₀", []], ["add", "theorem", "dist_le_tsum_of_dist_le_of_tendsto", []], ["add", "theorem", "dist_le_tsum_of_dist_le_of_tendsto₀", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_eq", ["nnreal"]], ["add", "theorem", "nndist_eq", ["nnreal"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "cauchy_seq_iff_nnreal", ["emetric"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "cauchy_seq_of_tendsto_nhds", []]]}]}, {"timestamp": 1574778937, "sha": "255bebc0", "message": "feat(data/nat/multiplicity): multiplicity_choose and others (#1704)", "changes": [{"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "le_mod_add_mod_of_dvd_add_of_not_dvd", ["nat"]]]}, {"oldPath": null, "newPath": "src/data/nat/multiplicity.lean", "changes": [["add", "theorem", "multiplicity_eq_card_pow_dvd", ["nat"]], ["add", "theorem", "multiplicity_choose", ["nat", "prime"]], ["add", "theorem", "multiplicity_choose_aux", ["nat", "prime"]], ["add", "theorem", "multiplicity_choose_prime_pow", ["nat", "prime"]], ["add", "theorem", "multiplicity_fact", ["nat", "prime"]], ["add", "theorem", "multiplicity_le_multiplicity_choose_add", ["nat", "prime"]], ["add", "theorem", "multiplicity_mul", ["nat", "prime"]], ["add", "theorem", "multiplicity_one", ["nat", "prime"]], ["add", "theorem", "multiplicity_pow", ["nat", "prime"]], ["add", "theorem", "multiplicity_pow_self", ["nat", "prime"]], ["add", "theorem", "multiplicity_self", ["nat", "prime"]], ["add", "theorem", "pow_dvd_fact_iff", ["nat", "prime"]]]}]}, {"timestamp": 1574770233, "sha": "3443a7d4", "message": "feat(analysis/complex/basic): restriction of scalars, real differentiability of complex functions (#1716)\n* restrict scalar\n* staging\n* complete proof\n* staging\n* cleanup\n* staging\n* cleanup\n* docstring\n* docstring\n* reviewer's comments\n* Update src/analysis/complex/basic.lean\nCo-Authored-By: Rob Lewis \n* Update src/analysis/calculus/fderiv.lean\nCo-Authored-By: Rob Lewis \n* add ! in docstrings [ci skip]\n* more doc formatting in fderiv\n* fix comments\n* add docstrings", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "deriv_fderiv", []], ["mod", "theorem", "deriv_within_fderiv_within", []], ["add", "theorem", "has_deriv_at_iff_has_fderiv_at", []], ["add", "theorem", "has_deriv_within_at_iff_has_fderiv_within_at", []]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "differentiable", ["continuous_linear_map"]], ["add", "theorem", "differentiable_at", ["continuous_linear_map"]], ["add", "theorem", "differentiable_on", ["continuous_linear_map"]], ["add", "theorem", "differentiable_within_at", ["continuous_linear_map"]], ["add", "theorem", "fderiv", ["continuous_linear_map"]], ["add", "theorem", "fderiv_within", ["continuous_linear_map"]], ["add", "theorem", "has_fderiv_at", ["continuous_linear_map"]], ["add", "theorem", "has_fderiv_at_filter", ["continuous_linear_map"]], ["add", "theorem", "has_fderiv_within_at", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars", ["differentiable"]], ["add", "theorem", "restrict_scalars", ["differentiable_at"]], ["add", "theorem", "restrict_scalars", ["differentiable_on"]], ["add", "theorem", "restrict_scalars", ["differentiable_within_at"]], ["add", "theorem", "restrict_scalars", ["has_fderiv_at"]], ["add", "theorem", "restrict_scalars", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/complex/basic.lean", "changes": [["add", "def", "im", ["complex", "continuous_linear_map"]], ["add", "theorem", "im_apply", ["complex", "continuous_linear_map"]], ["add", "theorem", "im_coe", ["complex", "continuous_linear_map"]], ["add", "theorem", "im_norm", ["complex", "continuous_linear_map"]], ["add", "def", "of_real", ["complex", "continuous_linear_map"]], ["add", "theorem", "of_real_apply", ["complex", "continuous_linear_map"]], ["add", "theorem", "of_real_coe", ["complex", "continuous_linear_map"]], ["add", "theorem", "of_real_isometry", ["complex", "continuous_linear_map"]], ["add", "theorem", "of_real_norm", ["complex", "continuous_linear_map"]], ["add", "def", "re", ["complex", "continuous_linear_map"]], ["add", "theorem", "re_apply", ["complex", "continuous_linear_map"]], ["add", "theorem", "re_coe", ["complex", "continuous_linear_map"]], ["add", "theorem", "re_norm", ["complex", "continuous_linear_map"]], ["add", "def", "im", ["complex", "linear_map"]], ["add", "theorem", "im_apply", ["complex", "linear_map"]], ["add", "def", "of_real", ["complex", "linear_map"]], ["add", "theorem", "of_real_apply", ["complex", "linear_map"]], ["add", "def", "re", ["complex", "linear_map"]], ["add", "theorem", "re_apply", ["complex", "linear_map"]], ["add", "theorem", "norm_eq_abs", ["complex"]], ["add", "theorem", "norm_int", ["complex"]], ["add", "theorem", "norm_int_of_nonneg", ["complex"]], ["add", "theorem", "norm_nat", ["complex"]], ["add", "theorem", "norm_rat", ["complex"]], ["add", "theorem", "norm_real", ["complex"]], ["add", "theorem", "has_deriv_at_real_of_complex", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "norm_int", ["complex"]], ["del", "theorem", "norm_int_of_nonneg", ["complex"]], ["del", "theorem", "norm_nat", ["complex"]], ["del", "theorem", "norm_rat", ["complex"]], ["del", "theorem", "norm_real", ["complex"]], ["add", "theorem", "norm_algebra_map_eq", []], ["add", "def", "restrict_scalars", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "isometry_iff_norm_image_eq_norm", ["continuous_linear_map"]], ["add", "def", "restrict_scalars", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars_coe_eq_coe'", ["continuous_linear_map"]], ["add", "theorem", "restrict_scalars_coe_eq_coe", ["continuous_linear_map"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "coe_restrict_scalars_eq_coe", ["linear_map"]], ["add", "def", "restrict_scalars", ["linear_map"]], ["add", "def", "restrict_scalars", ["module"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "algebra_map_isometry", []]]}]}, {"timestamp": 1574759007, "sha": "33df7e88", "message": "feat(order/conditionally_complete_lattice): with_top (with_bot L) ins… (#1725)\n* feat(order/conditionally_complete_lattice): with_top (with_bot L) instances\n* dealing with most of Sebastien's comments\n* initial defs. Now what happens?\n* half way there\n* compiles!\n* tidy\n* removing dead code\n* docstring tinkering\n* removing unused code\n* is_lub_Sup' added\n* refactor final proofs\n* conforming to mathlib conventions\n* def -> lemma", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cSup_empty", ["with_bot"]], ["del", "theorem", "has_glb", ["with_top"]], ["del", "theorem", "has_lub", ["with_top"]], ["add", "theorem", "is_glb_Inf'", ["with_top"]], ["mod", "theorem", "is_glb_Inf", ["with_top"]], ["add", "theorem", "is_lub_Sup'", ["with_top"]], ["mod", "theorem", "is_lub_Sup", ["with_top"]]]}]}, {"timestamp": 1574710841, "sha": "ef47de41", "message": "chore(data/nat/basic): add some docs, drop unused arguments (#1741)\n* add a docstring\n* chore(data/nat/basic): add some docs, drop unused arguments", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "pow_left_injective", ["nat"]]]}]}, {"timestamp": 1574701245, "sha": "73735ad0", "message": "feat(topology/metric_space/basic): define `cauchy_seq_of_le_tendsto_0` (#1738)\n* Define `cauchy_seq_of_le_tendsto_0`\nSometimes it is convenient to avoid proving `0 ≤ b n`.\n* Fix the comment, generalize to an inhabitted `sup`-semilattice.", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "cauchy_seq_of_le_tendsto_0", []]]}]}, {"timestamp": 1574674149, "sha": "242159f8", "message": "feat(measure_theory/bochner_integration): bochner integral of simple functions (#1676)\n* Bochner integral of simple functions\n* Update bochner_integration.lean\n* Change notation for simple functions in L1 space; Fill in blanks in `calc` proofs\n* Better definitions of operations on integrable simple functions\n* Update src/measure_theory/bochner_integration.lean\nCo-Authored-By: sgouezel \n* Update src/measure_theory/bochner_integration.lean\nCo-Authored-By: sgouezel \n* Update src/measure_theory/bochner_integration.lean\nCo-Authored-By: sgouezel \n* Update src/measure_theory/bochner_integration.lean\nCo-Authored-By: sgouezel \n* Update src/measure_theory/bochner_integration.lean\nCo-Authored-By: sgouezel \n* Update src/measure_theory/bochner_integration.lean\nCo-Authored-By: sgouezel \n* Several fixes - listed below\n* K -> \\bbk\n* remove indentation after `calc`\n* use local instances\n* one tactic per line\n* add `elim_cast` attributes\n* remove definitions from nolints.txt\n* use `linear_map.with_bound` to get continuity\n* Update documentation and comments\n* Fix things\n* norm_triangle_sum -> norm_sum_le\n* fix documentations and comments (The Bochner integral)\n* Fix typos and grammatical errors\n* Update src/measure_theory/ae_eq_fun.lean\nCo-Authored-By: sgouezel ", "changes": [{"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "smul_sum'", ["finset"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "theorem", "edist_smul", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "smul_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "smul_to_fun", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["del", "def", "integral", ["measure_theory"]], ["del", "def", "integral", ["measure_theory", "l1"]], ["add", "theorem", "add_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_add", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_neg", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_smul", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_sub", ["measure_theory", "l1", "simple_func"]], ["add", "def", "coe_to_l1", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "coe_zero", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "dense_embedding_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "dist_eq", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "dist_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "edist_eq", ["measure_theory", "l1", "simple_func"]], ["mod", "theorem", "exists_simple_func_near", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "integral", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "integral_add", ["measure_theory", "l1", "simple_func"]], ["add", "def", "integral_clm", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "integral_congr", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "integral_eq_lintegral", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "integral_smul", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "lintegral_edist_to_simple_func_lt_top", ["measure_theory", "l1", "simple_func"]], ["del", "def", "mk", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "neg_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_Integral_le_one", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_eq'", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_eq", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_eq_bintegral", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_integral_le_norm", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "norm_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "def", "of_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_add", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_eq_mk", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_eq_of_fun", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_neg", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_smul", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_sub", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "of_simple_func_zero", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "smul_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "sub_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["mod", "def", "to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "to_simple_func_eq_to_fun", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "to_simple_func_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "uniform_continuous_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["del", "theorem", "uniform_embedding_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "zero_to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "def", "bintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_add", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_eq_integral'", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_eq_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_eq_lintegral'", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_eq_lintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "bintegral_smul", ["measure_theory", "simple_func"]], ["add", "theorem", "fin_vol_supp_of_integrable", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_iff_fin_vol_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_iff_integral_lt_top", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_of_fin_vol_supp", ["measure_theory", "simple_func"]], ["add", "theorem", "integrable_pair", ["measure_theory", "simple_func"]], ["add", "theorem", "map_bintegral", ["measure_theory", "simple_func"]], ["add", "theorem", "norm_bintegral_le_bintegral_norm", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "theorem", "integrable_smul", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_smul", ["measure_theory"]], ["del", "theorem", "add_def", ["measure_theory", "l1"]], ["del", "theorem", "all_ae_mk_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "coe_add", ["measure_theory", "l1"]], ["add", "theorem", "coe_neg", ["measure_theory", "l1"]], ["add", "theorem", "coe_smul", ["measure_theory", "l1"]], ["add", "theorem", "coe_sub", ["measure_theory", "l1"]], ["add", "theorem", "coe_zero", ["measure_theory", "l1"]], ["del", "theorem", "dist_def", ["measure_theory", "l1"]], ["add", "theorem", "dist_eq", ["measure_theory", "l1"]], ["add", "theorem", "edist_eq", ["measure_theory", "l1"]], ["del", "theorem", "ext_iff", ["measure_theory", "l1"]], ["del", "def", "mk", ["measure_theory", "l1"]], ["del", "theorem", "mk_add", ["measure_theory", "l1"]], ["del", "theorem", "mk_eq_mk", ["measure_theory", "l1"]], ["add", "theorem", "mk_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "mk_zero", ["measure_theory", "l1"]], ["del", "theorem", "neg_mk", ["measure_theory", "l1"]], ["mod", "theorem", "neg_to_fun", ["measure_theory", "l1"]], ["del", "theorem", "norm_def", ["measure_theory", "l1"]], ["add", "theorem", "norm_eq", ["measure_theory", "l1"]], ["del", "theorem", "norm_mk", ["measure_theory", "l1"]], ["add", "theorem", "norm_of_fun", ["measure_theory", "l1"]], ["add", "def", "of_fun", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_add", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_eq_mk", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_eq_of_fun", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_neg", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_smul", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "of_fun_zero", ["measure_theory", "l1"]], ["del", "theorem", "self_eq_mk", ["measure_theory", "l1"]], ["del", "theorem", "smul_def", ["measure_theory", "l1"]], ["del", "theorem", "smul_mk", ["measure_theory", "l1"]], ["mod", "theorem", "smul_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "to_fun_of_fun", ["measure_theory", "l1"]], ["del", "theorem", "zero_def", ["measure_theory", "l1"]]]}]}, {"timestamp": 1574642756, "sha": "6af35ecb", "message": "feat(topology/algebra/infinite_sum): add `has_sum` versions of a few `tsum` lemmas (#1737)\nAlso add a few lemmas in `analysis/specific_limits`", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "summable_geometric_two'", []], ["add", "theorem", "tendsto_const_div_at_top_nhds_0_nat", []], ["del", "theorem", "tendsto_one_div_at_top_nhds_0_nat", []], ["add", "theorem", "tsum_geometric_two'", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_fintype", []], ["add", "theorem", "has_sum_single", []], ["add", "theorem", "sum_le_has_sum", []], ["add", "theorem", "sum_le_tsum", []]]}]}, {"timestamp": 1574639478, "sha": "bf509d78", "message": "feat(order/filter/basic): add more lemmas about `tendsto _ _ at_top` (#1713)\n* feat(order/filter/basic): add more lemmas about `tendsto _ _ at_top`\n* Use explicit arguments as suggested by @sgouezel\n* Add lemmas for an `ordered_comm_group`\n* Add a missing lemma", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_at_top_add_const_left", ["filter"]], ["add", "theorem", "tendsto_at_top_add_const_right", ["filter"]], ["add", "theorem", "tendsto_at_top_add_left_of_le'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_left_of_le", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_left'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_left", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_right'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_nonneg_right", ["filter"]], ["add", "theorem", "tendsto_at_top_add_right_of_le'", ["filter"]], ["add", "theorem", "tendsto_at_top_add_right_of_le", ["filter"]], ["add", "theorem", "tendsto_at_top_at_top_of_monotone", ["filter"]], ["add", "theorem", "tendsto_at_top_mono'", ["filter"]], ["add", "theorem", "tendsto_at_top_mono", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_left'", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_left", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_right'", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_bdd_above_right", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_const_left", ["filter"]], ["add", "theorem", "tendsto_at_top_of_add_const_right", ["filter"]]]}]}, {"timestamp": 1574636547, "sha": "a03a0720", "message": "chore(topology/metric_space/emetric_space): define `edist_le_zero` (#1735)\nThis makes a few proofs slightly more readable.", "changes": [{"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_le_zero", []]]}]}, {"timestamp": 1574627884, "sha": "13fedc15", "message": "feat(algebra/group): define `mul/add_left/right_injective` (#1730)\nSame as `mul_left_cancel` etc but uses `function.injective`.\nThis makes it easier to use functions from `function.injective` namespace.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "mul_left_injective", []], ["add", "theorem", "mul_right_injective", []]]}]}, {"timestamp": 1574625104, "sha": "7b1cdd4f", "message": "feat(topology/metric_space/emetric_space): polygonal inequalities (#1736)\nMigrate #1572 from `dist` to `edist`", "changes": [{"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_le_Ico_sum_edist", []], ["add", "theorem", "edist_le_Ico_sum_of_edist_le", []], ["add", "theorem", "edist_le_range_sum_edist", []], ["add", "theorem", "edist_le_range_sum_of_edist_le", []]]}]}, {"timestamp": 1574617478, "sha": "ca53b5d5", "message": "feat(data/real/ennreal): 3 simple lemmas (#1734)", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_to_real", ["ennreal"]], ["add", "theorem", "to_nnreal_pos_iff", ["ennreal"]], ["add", "theorem", "to_real_pos_iff", ["ennreal"]]]}]}, {"timestamp": 1574590296, "sha": "2d54a70a", "message": "feat(analysis/normed_space): prove more lemmas, rename some old lemmas (#1733)\nRenamed lemmas:\n* `norm_triangle` → `norm_add_le`\n* `norm_triangle_sub` → `norm_sub_le`\n* `norm_triangle_sum` → `norm_sum_le`\n* `norm_reverse_triangle'` → `norm_sub_norm_le`\n* `norm_reverse_triangle`: deleted; was a duplicate of `abs_norm_sub_norm_le`\n* `nnorm_triangle` → `nnorm_add_le`\nNew lemmas:\n* `dist_add_left`, `dist_add_right`, `dist_neg_neg`, dist_sub_left`,\n dist_sub_right`, `dist_smul`, `dist_add_add_le`, `dist_sub_sub_le`:\n operate with distances without rewriting them as norms.\n* `norm_add_le_of_le`, `dist_add_add_le_of_le`,\n `dist_sub_sub_le_of_le`, `norm_sum_le_of_le` : chain a triangle-like\n inequality with an appropriate estimates on the right hand side.\nAlso simplify a few proofs and fix a typo in a comment.", "changes": [{"oldPath": "archive/sensitivity.lean", "newPath": "archive/sensitivity.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "dist_add_add_le", []], ["add", "theorem", "dist_add_add_le_of_le", []], ["add", "theorem", "dist_add_left", []], ["add", "theorem", "dist_add_right", []], ["add", "theorem", "dist_le_norm_add_norm", []], ["add", "theorem", "dist_neg_neg", []], ["add", "theorem", "dist_smul", []], ["add", "theorem", "dist_sub_left", []], ["add", "theorem", "dist_sub_right", []], ["add", "theorem", "dist_sub_sub_le", []], ["add", "theorem", "dist_sub_sub_le_of_le", []], ["add", "theorem", "nnnorm_add_le", []], ["del", "theorem", "nnnorm_triangle", []], ["add", "theorem", "norm_add_le", []], ["add", "theorem", "norm_add_le_of_le", []], ["del", "theorem", "norm_reverse_triangle'", []], ["del", "theorem", "norm_reverse_triangle", []], ["add", "theorem", "norm_sub_le", []], ["add", "theorem", "norm_sub_le_of_le", []], ["add", "theorem", "norm_sub_norm_le", []], ["add", "theorem", "norm_sum_le", []], ["add", "theorem", "norm_sum_le_of_le", []], ["del", "theorem", "norm_triangle", []], ["del", "theorem", "norm_triangle_sub", []], ["del", "theorem", "norm_triangle_sum", []], ["mod", "theorem", "norm_zero", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_add_le", ["continuous_linear_map"]], ["del", "theorem", "op_norm_triangle", ["continuous_linear_map"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["add", "theorem", "dist_le_two_norm", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1574509083, "sha": "f95c01e4", "message": "feat(algebra/ordered_*): add three simple lemmas (#1731)", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "div_le_div_of_le_of_nonneg", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "abs_two", []], ["add", "theorem", "zero_lt_two", []]]}]}, {"timestamp": 1574468159, "sha": "f86abc77", "message": "fix(*): lower instance priority (#1724)\n* fix(*): lower instance priority\nuse lower instance priority for instances that always apply\nalso do this for automatically generated instances using the `extend` keyword\nalso add a comment to most places where we short-circuit type-class inference. This can lead to greatly increased search times (see issue #1561), so we might want to delete some/all of them.\n* put default_priority option inside section\nDefault priority also applies to all instances, not just automatically-generates ones\nthe scope of set_option is limited to a section\n* two more low priorities\n* fix some broken proofs\n* fix proof\n* more fixes\n* more fixes\n* increase max_depth a bit\n* update notes\n* fix linter issues", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/lie_algebra.lean", "newPath": "src/algebra/lie_algebra.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/category/basic.lean", "newPath": "src/category/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/basic.lean", "newPath": "src/category/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": [["add", "def", "to_topsp", ["ctop"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["mod", "theorem", "card_subtype_lt", ["fintype"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_abs", ["int"]], ["mod", "theorem", "cast_max", ["int"]], ["mod", "theorem", "cast_min", ["int"]]]}, {"oldPath": "src/data/string/basic.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/geometry/manifold/real_instances.lean", "newPath": "src/geometry/manifold/real_instances.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "t2_space", ["orderable_topology"]]]}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/premetric_space.lean", "newPath": "src/topology/metric_space/premetric_space.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": [["del", "theorem", "uniform_space_topology", ["Pi"]]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1574458631, "sha": "2b3eaa83", "message": "feat(README) Point users to the tutorial project (#1728)\nI think the tutorial project is a good place to start, and if other people don't think it is then I think they might want to consider adding more files to the tutorial project. I think mathlib is intimidating for beginners and this is a much better idea. However the link to the tutorial project is not even available on the main page -- you have to click through an installation procedure and find it at the bottom, and even then the first thing is suggests is that you make a new project, which I think is harder than getting the tutorial project up and running. This PR proposes that we point people directly to the tutorial project -- they will probably notice the existence of the tutorial project before they have even installed Lean/mathlib and will hence have it at the back of their mind once they've got things up and running.", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1574457515, "sha": "013e9141", "message": "fix(docs/install/project) compiling is quick (#1727)\nI think the \"it takes a long time\" comment must either have been from before `update-mathlib` or from when we were pointing people to the perfectoid project.", "changes": [{"oldPath": "docs/install/project.md", "newPath": "docs/install/project.md", "changes": []}]}, {"timestamp": 1574454052, "sha": "62c1bc5b", "message": "doc(topology/metric_space,measure_theory): move text in copyright docs to module docs (#1726)", "changes": [{"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/metric_space/premetric_space.lean", "newPath": "src/topology/metric_space/premetric_space.lean", "changes": []}]}, {"timestamp": 1574444725, "sha": "5a1a4698", "message": "docs(README): revert 96ebf8cc\nRevert \"docs(README): Remove Patrick from the maintainer list.\"\nThis reverts commit 96ebf8cc7c446e977637a13740645a7f8e0c8992.", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1574374263, "sha": "004618ad", "message": "feat(data/nat): two lemmas about choose (#1717)\n* Two lemmas about choose\n* swap choose_symm order", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "choose_succ_right_eq", ["nat"]], ["add", "theorem", "choose_symm", ["nat"]]]}]}, {"timestamp": 1574364143, "sha": "58fc8301", "message": "fix(tactic/ext): handle case where goal is solved early (#1721)\n* fix(tactic/ext): handle case where goal is solved early\n* add test", "changes": [{"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": [["add", "structure", "dumb", []]]}]}, {"timestamp": 1574356639, "sha": "a13027a5", "message": "feat(data/finset): add cardinality of map (#1722)\n* Add cardinality of map\n* Update src/data/finset.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card_map", ["finset"]]]}]}, {"timestamp": 1574337474, "sha": "faf32899", "message": "add div_le_div_iff (#1720)", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "div_le_div_iff", []]]}]}, {"timestamp": 1574319883, "sha": "af9dcb98", "message": "make set_of_eq_eq_singleton a simp lemma (#1719)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}]}, {"timestamp": 1574280207, "sha": "9d031be0", "message": "feat(group_theory/congruence): quotients of monoids by congruence relations (#1710)\n* add congruence.lean\n* add has_mul\n* add definition of congruence relation\n* minor changes\n* Tidy up second half of congruence.lean\n* tidying docstrings\n* tidying\n* constructive 3rd isom in setoid used in congruence\n* remove import\n* open namespaces earlier\n* responding to PR comments", "changes": [{"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": [["mod", "def", "comap", ["setoid"]], ["add", "theorem", "comap_eq", ["setoid"]], ["mod", "def", "map", ["setoid"]], ["add", "def", "quotient_quotient_equiv_quotient", ["setoid"]]]}, {"oldPath": "src/group_theory/congruence.lean", "newPath": "src/group_theory/congruence.lean", "changes": [["add", "theorem", "coe_one", ["con"]], ["add", "def", "comap", ["con"]], ["add", "theorem", "comap_eq", ["con"]], ["add", "theorem", "comp_mk'_apply", ["con"]], ["add", "def", "correspondence", ["con"]], ["add", "theorem", "injective_ker_lift", ["con"]], ["add", "def", "ker", ["con"]], ["add", "theorem", "ker_apply_eq_preimage", ["con"]], ["add", "theorem", "ker_eq_lift_of_injective", ["con"]], ["add", "def", "ker_lift", ["con"]], ["add", "theorem", "ker_lift_mk", ["con"]], ["add", "theorem", "ker_lift_range_eq", ["con"]], ["add", "theorem", "ker_rel", ["con"]], ["add", "theorem", "le_iff", ["con"]], ["add", "def", "lift", ["con"]], ["add", "theorem", "lift_apply_mk'", ["con"]], ["add", "theorem", "lift_coe", ["con"]], ["add", "theorem", "lift_comp_mk'", ["con"]], ["add", "theorem", "lift_funext", ["con"]], ["add", "theorem", "lift_mk'", ["con"]], ["add", "theorem", "lift_range", ["con"]], ["add", "theorem", "lift_surjective_of_surjective", ["con"]], ["add", "theorem", "lift_unique", ["con"]], ["add", "def", "map", ["con"]], ["add", "theorem", "map_apply", ["con"]], ["add", "def", "map_gen", ["con"]], ["add", "def", "map_of_surjective", ["con"]], ["add", "theorem", "map_of_surjective_eq_map_gen", ["con"]], ["add", "theorem", "mem_coe", ["con"]], ["add", "def", "mk'", ["con"]], ["add", "theorem", "mk'_ker", ["con"]], ["add", "theorem", "mk'_surjective", ["con"]], ["add", "def", "of_submonoid", ["con"]], ["add", "def", "quotient_quotient_equiv_quotient", ["con"]], ["add", "theorem", "to_submonoid_inj", ["con"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "def", "submonoid_congr", ["mul_equiv"]]]}]}, {"timestamp": 1574269955, "sha": "f34bb6b9", "message": "refactor(topology/metric_space/lipschitz): review API of `lipschitz_with` (#1700)\n* refactor(topology/metric_space/lipschitz): review API of `lipschitz_with`\n* Take `K : ℝ≥0` instead of using a conjuction;\n* Rename each `*_of_lipschitz` to `lipschitz_with.*`;\n* Define convenience constructors (e.g., `of_le_add`);\n* Move facts about contracting maps to a separate file&namespace;\n* Adjust other files to API changes.\n* Make the first argument of `lipschitz_with.weaken` implicit\nCo-Authored-By: sgouezel \n* Fix compile\n* Fix 'unused args' bug reported by `#lint`", "changes": [{"oldPath": "src/analysis/normed_space/finite_dimension.lean", "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "lipschitz", ["continuous_linear_map"]], ["add", "theorem", "lipschitz_of_bound", ["linear_map"]], ["add", "theorem", "uniform_continuous_of_bound", ["linear_map"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["mod", "def", "comp", ["bounded_continuous_function"]], ["mod", "theorem", "continuous_comp", ["bounded_continuous_function"]], ["add", "theorem", "lipschitz_comp", ["bounded_continuous_function"]], ["add", "theorem", "uniform_continuous_comp", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": [["add", "theorem", "lipschitz_inf_dist", ["metric"]], ["add", "theorem", "lipschitz_inf_dist_set", ["metric"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/contracting.lean", "changes": [["add", "theorem", "aposteriori_dist_iterate_fixed_point_le", ["contracting_with"]], ["add", "theorem", "apriori_dist_iterate_fixed_point_le", ["contracting_with"]], ["add", "theorem", "dist_fixed_point_fixed_point_of_dist_le'", ["contracting_with"]], ["add", "theorem", "dist_fixed_point_le", ["contracting_with"]], ["add", "theorem", "dist_inequality", ["contracting_with"]], ["add", "theorem", "dist_le_of_fixed_point", ["contracting_with"]], ["add", "theorem", "exists_fixed_point", ["contracting_with"]], ["add", "theorem", "fixed_point_is_fixed", ["contracting_with"]], ["add", "theorem", "fixed_point_lipschitz_in_map", ["contracting_with"]], ["add", "theorem", "fixed_point_unique'", ["contracting_with"]], ["add", "theorem", "fixed_point_unique", ["contracting_with"]], ["add", "theorem", "one_sub_K_pos", ["contracting_with"]], ["add", "theorem", "to_lipschitz_with", ["contracting_with"]], ["add", "def", "contracting_with", []], ["add", "theorem", "fixed_point_of_tendsto_iterate", []]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["del", "theorem", "continuous_inf_dist", ["metric"]], ["add", "theorem", "continuous_inf_dist_pt", ["metric"]], ["add", "theorem", "lipschitz_inf_dist_pt", ["metric"]], ["del", "theorem", "uniform_continuous_inf_dist", ["metric"]], ["add", "theorem", "uniform_continuous_inf_dist_pt", ["metric"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["del", "theorem", "continuous_of_lipschitz", []], ["del", "theorem", "fixed_point_of_tendsto_iterate", []], ["add", "theorem", "diam_image_le", ["lipschitz_with"]], ["del", "theorem", "dist_inequality_of_contraction", ["lipschitz_with"]], ["add", "theorem", "dist_iterate_succ_le_geometric", ["lipschitz_with"]], ["add", "theorem", "ediam_image_le", ["lipschitz_with"]], ["add", "theorem", "edist_map_le", ["lipschitz_with"]], ["del", "theorem", "exists_fixed_point_of_contraction", ["lipschitz_with"]], ["del", "theorem", "fixed_point_unique_of_contraction", ["lipschitz_with"]], ["add", "theorem", "nndist_map_le", ["lipschitz_with"]], ["mod", "def", "lipschitz_with", []], ["del", "theorem", "uniform_continuous_of_le_add", []], ["del", "theorem", "uniform_continuous_of_lipschitz", []]]}]}, {"timestamp": 1574264202, "sha": "5a6a67fc", "message": "fix(data/padics): misstated lemma (#1718)", "changes": [{"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "coe_zero", ["padic"]]]}]}, {"timestamp": 1574213936, "sha": "0744a3a9", "message": "feat(analysis/normed_space/operator_norm): extension of a uniform continuous function (#1649)\n* Extension of a uniform continuous function\n* Use characteristic properties of an extended function, instead of the explicit construction\n* Add documentation on similar results in the library\n* Update src/topology/algebra/uniform_extension.lean\nCo-Authored-By: sgouezel \n* Travis failed for no reason\n* Update uniform_extension.lean\n* eliminate `uniform_extension.lean`\n* Update operator_norm.lean\n* Update operator_norm.lean\n* Remove `M`\n* Fix docstring; extend_zero should be a simp lemma", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "extend", ["continuous_linear_map"]], ["add", "theorem", "extend_zero", ["continuous_linear_map"]], ["add", "theorem", "op_norm_extend_le", ["continuous_linear_map"]], ["del", "theorem", "uniform_continuous", ["continuous_linear_map"]]]}]}, {"timestamp": 1574206903, "sha": "d67e527a", "message": "feat(algebra/group_power): prove Bernoulli's inequality for `a ≥ -2` (#1709)\n* feat(algebra/group_power): prove Bernoulli's inequality for `a ≥ -2`\n* Restate inequalities as suggested by @fpvandoorn\n* Fix docs", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "one_add_mul_le_pow'", []], ["mod", "theorem", "one_add_mul_le_pow", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "le_neg_iff_add_nonpos", []], ["add", "theorem", "neg_le_iff_add_nonneg", []], ["add", "theorem", "neg_le_self", []], ["add", "theorem", "self_le_neg", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "tendsto_pow_at_top_at_top_of_gt_1", []]]}]}, {"timestamp": 1574196540, "sha": "d4fd7227", "message": "feat(algebra/group; data/nat) lemmas for sub sub assoc (#1712)\n* Lemmas for sub sub assoc\n* Removed a lemma", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "sub_sub_assoc_swap", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "sub_sub_assoc", ["nat"]], ["mod", "theorem", "succ_div_of_dvd", ["nat"]], ["mod", "theorem", "succ_div_of_not_dvd", ["nat"]]]}]}, {"timestamp": 1574188894, "sha": "db6eab2e", "message": "fix(tactic/ring): bugfix ring sub (#1714)", "changes": [{"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1574186623, "sha": "740168bf", "message": "feat(.travis): add linting of new changes to CI (#1634)\n* feat(.travis): add linting of new changes to CI\n* explicitly list which linters to use\n* upate nolints\n* fix nolints.txt\n* fix nolints\n* remove instance_priority test", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/rm_all.sh", "newPath": "scripts/rm_all.sh", "changes": []}]}, {"timestamp": 1574179565, "sha": "02659d63", "message": "chore(scripts/nolint): regenerate nolints", "changes": [{"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1574168976, "sha": "8d7f093b", "message": "fix(tactic/omega): use eval_expr' (#1711)\n* fix(tactic/omega): use eval_expr'\n* add test", "changes": [{"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1574161641, "sha": "e3be70db", "message": "lemmas about powers of elements (#1688)\n* feat(algebra/archimedean): add alternative version of exists_int_pow_near\n- also add docstrings\n* feat(analysis/normed_space/basic): additional inequality lemmas\n- that there exists elements with large and small norms in a nondiscrete normed field.\n* doc(algebra/archimedean): edit docstrings\n* Apply suggestions from code review\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "exists_int_pow_near'", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "exists_lt_norm", ["normed_field"]], ["add", "theorem", "exists_norm_lt", ["normed_field"]]]}]}, {"timestamp": 1574137707, "sha": "b0520a31", "message": "feat(algebra/order): define `forall_lt_iff_le` and `forall_lt_iff_le'` (#1707)", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "forall_lt_iff_le'", []], ["add", "theorem", "forall_lt_iff_le", []]]}]}, {"timestamp": 1574130430, "sha": "5d5da7e6", "message": "feat(data/set/intervals): more lemmas (#1665)\n* feat(data/set/intervals): more lemmas\n* Use `simp` in more proofs, drop two `@[simp]` attrs\n* Drop more `@[simp]` attrs\nIt's not clear which side is simpler.", "changes": [{"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": [["add", "theorem", "Icc_diff_Ioc_eq_singleton", ["set"]], ["add", "theorem", "Icc_inter_Icc", ["set"]], ["add", "theorem", "Ici_inter_Ici", ["set"]], ["add", "theorem", "Ici_inter_Iic", ["set"]], ["add", "theorem", "Ici_inter_Iio", ["set"]], ["add", "theorem", "Ico_inter_Ico", ["set"]], ["add", "theorem", "Iic_inter_Iic", ["set"]], ["add", "theorem", "Iio_inter_Iio", ["set"]], ["add", "theorem", "Ioc_diff_Ioo_eq_singleton", ["set"]], ["add", "theorem", "Ioc_inter_Ioc", ["set"]], ["add", "theorem", "Ioi_inter_Iic", ["set"]], ["add", "theorem", "Ioi_inter_Iio", ["set"]], ["add", "theorem", "Ioi_inter_Ioi", ["set"]], ["mod", "theorem", "Ioo_inter_Ioo", ["set"]], ["mod", "theorem", "left_mem_Icc", ["set"]], ["add", "theorem", "left_mem_Ici", ["set"]], ["mod", "theorem", "left_mem_Ico", ["set"]], ["mod", "theorem", "left_mem_Ioc", ["set"]], ["mod", "theorem", "left_mem_Ioo", ["set"]], ["mod", "theorem", "right_mem_Icc", ["set"]], ["mod", "theorem", "right_mem_Ico", ["set"]], ["add", "theorem", "right_mem_Iic", ["set"]], ["mod", "theorem", "right_mem_Ioc", ["set"]], ["mod", "theorem", "right_mem_Ioo", ["set"]]]}]}, {"timestamp": 1574121123, "sha": "895f1ae0", "message": "feat(data/option): add `some_ne_none`, `bex_ne_none`, `ball_ne_none` (#1708)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "ball_ne_none", ["option"]], ["add", "theorem", "bex_ne_none", ["option"]], ["add", "theorem", "some_ne_none", ["option"]]]}]}, {"timestamp": 1574109168, "sha": "6b408eb1", "message": "feat(data/real/nnreal): define `nnreal.gi : galois_insertion of_real coe` (#1699)", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "le_coe_of_real", ["nnreal"]], ["mod", "theorem", "of_real_coe", ["nnreal"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "def", "monotone_intro", ["galois_insertion"]]]}]}, {"timestamp": 1574101105, "sha": "af43a2bc", "message": "feat(data/nat/enat): add_right_cancel and other (#1705)", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "add_eq_top_iff", ["enat"]], ["add", "theorem", "ne_top_iff_dom", ["enat"]]]}]}, {"timestamp": 1574093804, "sha": "0d94020c", "message": "feat(algebra/order_functions): define `min/max_mul_of_nonneg` (#1698)\nAlso define `monotone_mul_right_of_nonneg` and rename\n`monotone_mul_of_nonneg` to `monotone_mul_left_of_nonneg`.", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "max_mul_of_nonneg", []], ["add", "theorem", "min_mul_of_nonneg", []], ["add", "theorem", "monotone_mul_left_of_nonneg", []], ["del", "theorem", "monotone_mul_of_nonneg", []], ["add", "theorem", "monotone_mul_right_of_nonneg", []]]}]}, {"timestamp": 1574086209, "sha": "3f9c4d88", "message": "chore(data/set): use `Sort*` in more lemmas (#1706)\nAlso replace `nonempty_of_nonempty_range` with\n`range_ne_empty_iff_nonempty` and `range_ne_empty`.\nThe old lemma is equivalent to `range_ne_empty_iff_nonempty.mp`.", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["del", "theorem", "nonempty_of_nonempty_range", ["set"]], ["mod", "theorem", "range_const", ["set"]], ["mod", "theorem", "range_const_subset", ["set"]], ["add", "theorem", "range_ne_empty", ["set"]], ["add", "theorem", "range_ne_empty_iff_nonempty", ["set"]], ["mod", "theorem", "range_subset_iff", ["set"]]]}]}, {"timestamp": 1574079667, "sha": "428aec90", "message": "feat(group_theory/congruence): create file about congruence relations (#1690)\n* add congruence.lean\n* add has_mul\n* add definition of congruence relation\n* minor changes\n* responding to review comments\n* fix docstring mistake in setoid.lean", "changes": [{"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": []}, {"oldPath": null, "newPath": "src/group_theory/congruence.lean", "changes": [["add", "structure", "add_con", []], ["add", "inductive", "rel", ["add_con_gen"]], ["add", "theorem", "Inf_def", ["con"]], ["add", "theorem", "Inf_le", ["con"]], ["add", "theorem", "Inf_to_setoid", ["con"]], ["add", "theorem", "Sup_def", ["con"]], ["add", "theorem", "Sup_eq_con_gen", ["con"]], ["add", "theorem", "coe_eq", ["con"]], ["add", "theorem", "coe_mul", ["con"]], ["add", "theorem", "con_gen_eq", ["con"]], ["add", "theorem", "con_gen_idem", ["con"]], ["add", "theorem", "con_gen_le", ["con"]], ["add", "theorem", "con_gen_mono", ["con"]], ["add", "theorem", "con_gen_of_con", ["con"]], ["add", "theorem", "ext'", ["con"]], ["add", "theorem", "ext'_iff", ["con"]], ["add", "theorem", "ext", ["con"]], ["add", "theorem", "ext_iff", ["con"]], ["add", "theorem", "inf_def", ["con"]], ["add", "theorem", "inf_iff_and", ["con"]], ["add", "theorem", "le_Inf", ["con"]], ["add", "theorem", "le_def", ["con"]], ["add", "def", "mul_ker", ["con"]], ["add", "theorem", "mul_ker_mk_eq", ["con"]], ["add", "def", "pi", ["con"]], ["add", "theorem", "sup_def", ["con"]], ["add", "theorem", "sup_eq_con_gen", ["con"]], ["add", "theorem", "to_setoid_inj", ["con"]], ["add", "structure", "con", []], ["add", "inductive", "rel", ["con_gen"]], ["add", "def", "con_gen", []]]}]}, {"timestamp": 1574072117, "sha": "0a794fac", "message": "feat(data/finset): new union, set difference, singleton lemmas (#1702)\n* Singleton iff unique element lemma\n* Set difference lemmas\n* Changes from review", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "eq_singleton_iff_unique_mem", ["finset"]], ["add", "theorem", "sdiff_eq_empty_iff_subset", ["finset"]], ["add", "theorem", "sdiff_union_self_eq_union", ["finset"]], ["add", "theorem", "singleton_iff_unique_mem", ["finset"]], ["add", "theorem", "union_sdiff_self_eq_union", ["finset"]], ["add", "theorem", "union_sdiff_symm", ["finset"]]]}]}, {"timestamp": 1574064504, "sha": "fafdcfdc", "message": "chore(data/set/lattice): get most proofs from `pi` instance. (#1685)\nThis way we only provide proofs that don't come from `pi`", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}]}, {"timestamp": 1574049830, "sha": "d19f7bc6", "message": "feat(analysis/normed_space/finite_dimension): finite-dimensional spaces on complete fields (#1687)\n* feat(analysis/normed_space/finite_dimension): equivalence of norms, continuity of linear maps\n* improve doc\n* cleanup\n* cleanup\n* Update src/data/equiv/basic.lean\nCo-Authored-By: Johan Commelin \n* exact_mod_cast, remove classical\n* unfreezeI\n* remove typeclass assumption\n* Update src/analysis/normed_space/finite_dimension.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/linear_algebra/basic.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* Update src/linear_algebra/finite_dimensional.lean\nCo-Authored-By: Bryan Gin-ge Chen \n* cleanup", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "pi_norm_le_iff", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/finite_dimension.lean", "changes": [["add", "theorem", "continuous_equiv_fun_basis", []], ["add", "theorem", "complete", ["finite_dimensional"]], ["add", "theorem", "proper", ["finite_dimensional"]], ["add", "theorem", "continuous_of_finite_dimensional", ["linear_map"]], ["add", "theorem", "continuous_on_pi", ["linear_map"]], ["add", "theorem", "closed_of_finite_dimensional", ["submodule"]], ["add", "theorem", "complete_of_finite_dimensional", ["submodule"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "range_eq_univ", ["equiv"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "pi_apply_eq_sum_univ", ["linear_map"]], ["add", "theorem", "pi_eq_sum_univ", []]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "equiv_fun_basis_symm_apply", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "findim_eq_card", ["finite_dimensional"]], ["add", "theorem", "findim_of_field", ["finite_dimensional"]], ["add", "theorem", "findim_submodule_le", ["finite_dimensional"]], ["add", "theorem", "findim_range_add_findim_ker", ["linear_map"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "proper_image_of_proper", ["metric"]]]}]}, {"timestamp": 1574042930, "sha": "7c5f282d", "message": "chore(algebra/order_functions): rename `min/max_distrib_of_monotone` (#1697)\nNew names `monotone.map_min/max` better align with `monoid_hom.map_mul` etc.", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["del", "theorem", "max_distrib_of_monotone", []], ["del", "theorem", "min_distrib_of_monotone", []], ["add", "theorem", "map_max", ["monotone"]], ["add", "theorem", "map_min", ["monotone"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1574036302, "sha": "9607bbf8", "message": "feat(algebra/big_operators): sum_Ico_succ_top and others (#1692)\n* feat(Ico): sum_Ico_succ_top and others\n* get rid of succ_bot and rename eq_cons", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_Ico_succ_top", ["finset"]], ["add", "theorem", "prod_eq_prod_Ico_succ_bot", ["finset"]], ["add", "theorem", "sum_Ico_succ_top", ["finset"]], ["add", "theorem", "sum_eq_sum_Ico_succ_bot", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["del", "theorem", "eq_cons", ["finset", "Ico"]], ["add", "theorem", "insert_succ_bot", ["finset", "Ico"]]]}]}, {"timestamp": 1574025439, "sha": "f5385fe0", "message": "chore(order_functions): use weakly implicit brackets in strict mono (#1701)\n* chore(order_functions): use weakly implicit brackets in strict mono\n* fix build", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}]}, {"timestamp": 1574019074, "sha": "474004f1", "message": "fix(topology/dense_embeddings): tweaks (#1684)\n* fix(topology/dense_embeddings): tweaks\nThis fixes some small issues with last summer dense embedding refactors.\nThis is preparation for helping with Bochner integration. Some of those\nfixes are backported from the perfectoid project.\n* chore(dense_embedding): remove is_closed_property'\n* Update src/topology/uniform_space/completion.lean\n* Update src/topology/dense_embedding.lean", "changes": [{"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "closure_range", ["dense_range"]], ["add", "theorem", "induction_on", ["dense_range"]], ["add", "theorem", "induction_on₂", ["dense_range"]], ["add", "theorem", "induction_on₃", ["dense_range"]], ["add", "theorem", "prod", ["dense_range"]], ["del", "theorem", "dense_range_iff_closure_eq", []], ["add", "theorem", "dense_range_iff_closure_range", []], ["del", "theorem", "dense_range_prod", []], ["mod", "theorem", "is_closed_property2", []], ["mod", "theorem", "is_closed_property3", []]]}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "dense", ["uniform_space", "completion"]], ["mod", "theorem", "dense₂", ["uniform_space", "completion"]], ["del", "theorem", "induction_on₄", ["uniform_space", "completion"]]]}]}, {"timestamp": 1574012788, "sha": "1805f16a", "message": "refactor(order/bounds): make the first argument of `x ∈ upper_bounds s` implicit (#1691)\n* refactor(order/bounds): make the first argument of `x ∈ upper_bounds s` implicit\n* Use `∈ *_bounds` in the definition of `conditionally_complete_lattice`.", "changes": [{"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": [["mod", "def", "lower_bounds", []], ["mod", "def", "upper_bounds", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "mk", ["bdd_above"]], ["mod", "def", "bdd_above", []], ["mod", "theorem", "mk", ["bdd_below"]], ["mod", "def", "bdd_below", []]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}]}, {"timestamp": 1574005087, "sha": "10343579", "message": "feat(data/int/parity): not_even_iff (#1694)", "changes": [{"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "theorem", "not_even_iff", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "not_even_iff", ["nat"]]]}]}, {"timestamp": 1573969792, "sha": "e863c088", "message": "feat(algebra/pointwise): set.add_comm_monoid (#1696)\n* feat(algebra/pointwise): set.add_comm_monoid\n* defs not instances\n* fixing instance names", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "def", "add_comm_monoid", ["set"]], ["add", "def", "comm_monoid", ["set"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}]}, {"timestamp": 1573954474, "sha": "6b1ab646", "message": "Add lemma for injective pow (#1683)\n* Add lemma for injective pow\n* Rename lemma and remove spaces\n* Use strict-mono for monotonic pow\n* Rename iff statements\n* Add left injective pow as well", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "pow_le_iff_le_left", ["nat"]], ["add", "theorem", "pow_le_iff_le_right", ["nat"]], ["add", "theorem", "pow_left_injective", ["nat"]], ["add", "theorem", "pow_left_strict_mono", ["nat"]], ["add", "theorem", "pow_lt_iff_lt_left", ["nat"]], ["add", "theorem", "pow_lt_iff_lt_right", ["nat"]], ["add", "theorem", "pow_right_injective", ["nat"]], ["add", "theorem", "pow_right_strict_mono", ["nat"]]]}]}, {"timestamp": 1573834287, "sha": "6ebb7e78", "message": "feat(data/nat/modeq): add_div and others (#1689)\n* feat(data/nat/modeq): add_div and others\n* remove unnecessary positivity assumptions.\n* fix build\n* brackets", "changes": [{"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "add_div", ["nat"]], ["add", "theorem", "add_div_eq_of_add_mod_lt", ["nat"]], ["add", "theorem", "add_div_eq_of_le_mod_add_mod", ["nat"]], ["add", "theorem", "add_div_le_add_div", ["nat"]], ["add", "theorem", "add_mod_add_ite", ["nat"]], ["add", "theorem", "add_mod_add_of_le_add_mod", ["nat"]], ["add", "theorem", "add_mod_of_add_mod_lt", ["nat"]]]}]}, {"timestamp": 1573765584, "sha": "40de4fcb", "message": "doc(order/bounds,order/conditionaly_complete_lattice): add some docs (#1686)\n* doc(order/bounds,order/conditionaly_complete_lattice): add some docs\n* Fixes by @jcommelin\nCo-Authored-By: Johan Commelin \n* Fix docs: `is_least` are not unique unless we have a partial order.", "changes": [{"oldPath": "src/order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1573684026, "sha": "6fbf9f77", "message": "doc(*): proper markdown urls [ci skip] (#1680)", "changes": [{"oldPath": ".vscode/settings.json", "newPath": ".vscode/settings.json", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/category/bitraversable/basic.lean", "newPath": "src/category/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category/bitraversable/lemmas.lean", "newPath": "src/category/bitraversable/lemmas.lean", "changes": []}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": []}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}, {"oldPath": "src/category/traversable/lemmas.lean", "newPath": "src/category/traversable/lemmas.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": []}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/data/tree.lean", "newPath": "src/data/tree.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": []}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1573676404, "sha": "10ced766", "message": "doc(*): move detailed headers into real module docs (#1681)\n* doc(*): move detailed headers into real module docs\n* update zmod", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1573667589, "sha": "47296243", "message": "doc(data/rel): add docs to some definitions (#1678)\n* doc(data/rel): add docs to some definitions\n* Update src/data/rel.lean\nCo-Authored-By: Johan Commelin \n* Update src/data/rel.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}]}, {"timestamp": 1573655799, "sha": "6f5ad3cb", "message": "add dvd_gcd_iff for nat (#1682)", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "dvd_gcd_iff", ["nat"]]]}]}, {"timestamp": 1573649089, "sha": "6625f663", "message": "feat(analysis/calculus/deriv): one-dimensional derivatives (#1670)\n* feat(analysis/calculus/deriv): one-dimensional derivatives\n* Typos.\n* Define deriv f x as fderiv 𝕜 f x 1\n* Proof style.\n* Fix failing proofs.", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "comp", ["deriv"]], ["add", "def", "deriv", []], ["add", "theorem", "deriv_add", []], ["add", "theorem", "deriv_congr_of_mem_nhds", []], ["add", "theorem", "deriv_const", []], ["add", "theorem", "deriv_fderiv", []], ["add", "theorem", "deriv_id", []], ["add", "theorem", "deriv_mul", []], ["add", "theorem", "deriv_neg", []], ["add", "theorem", "deriv_sub", []], ["add", "theorem", "comp", ["deriv_within"]], ["add", "def", "deriv_within", []], ["add", "theorem", "deriv_within_add", []], ["add", "theorem", "deriv_within_congr", []], ["add", "theorem", "deriv_within_congr_of_mem_nhds_within", []], ["add", "theorem", "deriv_within_const", []], ["add", "theorem", "deriv_within_fderiv_within", []], ["add", "theorem", "deriv_within_id", []], ["add", "theorem", "deriv_within_inter", []], ["add", "theorem", "deriv_within_mul", []], ["add", "theorem", "deriv_within_neg", []], ["add", "theorem", "deriv_within_sub", []], ["add", "theorem", "deriv_within_subset", []], ["add", "theorem", "deriv_within_univ", []], ["add", "theorem", "deriv_within_zero_of_not_differentiable_within_at", []], ["add", "theorem", "deriv_zero_of_not_differentiable_at", []], ["add", "theorem", "deriv_within", ["differentiable_at"]], ["add", "theorem", "has_deriv_at", ["differentiable_at"]], ["add", "theorem", "has_deriv_within_at", ["differentiable_within_at"]], ["add", "theorem", "fderiv_deriv", []], ["add", "theorem", "fderiv_within_deriv_within", []], ["add", "theorem", "add", ["has_deriv_at"]], ["add", "theorem", "comp", ["has_deriv_at"]], ["add", "theorem", "comp_has_deriv_within_at", ["has_deriv_at"]], ["add", "theorem", "congr_of_mem_nhds", ["has_deriv_at"]], ["add", "theorem", "continuous_at", ["has_deriv_at"]], ["add", "theorem", "deriv", ["has_deriv_at"]], ["add", "theorem", "differentiable_at", ["has_deriv_at"]], ["add", "theorem", "has_deriv_at_filter", ["has_deriv_at"]], ["add", "theorem", "has_deriv_within_at", ["has_deriv_at"]], ["add", "theorem", "mul", ["has_deriv_at"]], ["add", "theorem", "neg", ["has_deriv_at"]], ["add", "theorem", "prod", ["has_deriv_at"]], ["add", "theorem", "sub", ["has_deriv_at"]], ["add", "def", "has_deriv_at", []], ["add", "theorem", "has_deriv_at_const", []], ["add", "theorem", "add", ["has_deriv_at_filter"]], ["add", "theorem", "comp", ["has_deriv_at_filter"]], ["add", "theorem", "congr_of_mem_sets", ["has_deriv_at_filter"]], ["add", "theorem", "is_O_sub", ["has_deriv_at_filter"]], ["add", "theorem", "mono", ["has_deriv_at_filter"]], ["add", "theorem", "neg", ["has_deriv_at_filter"]], ["add", "theorem", "prod", ["has_deriv_at_filter"]], ["add", "theorem", "sub", ["has_deriv_at_filter"]], ["add", "theorem", "tendsto_nhds", ["has_deriv_at_filter"]], ["add", "def", "has_deriv_at_filter", []], ["add", "theorem", "has_deriv_at_filter_congr_of_mem_sets", []], ["add", "theorem", "has_deriv_at_filter_const", []], ["add", "theorem", "has_deriv_at_filter_id", []], ["add", "theorem", "has_deriv_at_filter_iff_tendsto", []], ["add", "theorem", "has_deriv_at_id", []], ["add", "theorem", "has_deriv_at_iff_tendsto", []], ["add", "theorem", "has_deriv_at_unique", []], ["add", "theorem", "add", ["has_deriv_within_at"]], ["add", "theorem", "comp", ["has_deriv_within_at"]], ["add", "theorem", "congr_mono", ["has_deriv_within_at"]], ["add", "theorem", "congr_of_mem_nhds_within", ["has_deriv_within_at"]], ["add", "theorem", "continuous_within_at", ["has_deriv_within_at"]], ["add", "theorem", "deriv_within", ["has_deriv_within_at"]], ["add", "theorem", "differentiable_within_at", ["has_deriv_within_at"]], ["add", "theorem", "mono", ["has_deriv_within_at"]], ["add", "theorem", "mul", ["has_deriv_within_at"]], ["add", "theorem", "neg", ["has_deriv_within_at"]], ["add", "theorem", "prod", ["has_deriv_within_at"]], ["add", "theorem", "sub", ["has_deriv_within_at"]], ["add", "def", "has_deriv_within_at", []], ["add", "theorem", "has_deriv_within_at_const", []], ["add", "theorem", "has_deriv_within_at_id", []], ["add", "theorem", "has_deriv_within_at_iff_tendsto", []], ["add", "theorem", "has_deriv_within_at_inter'", []], ["add", "theorem", "has_deriv_within_at_inter", []], ["add", "theorem", "has_deriv_within_at_univ", []], ["add", "theorem", "has_fderiv_at_filter_iff_has_deriv_at_filter", []], ["add", "theorem", "has_fderiv_at_iff_has_deriv_at", []], ["add", "theorem", "has_fderiv_within_at_iff_has_deriv_within_at", []], ["add", "theorem", "deriv", ["is_linear_map"]], ["add", "theorem", "deriv_within", ["is_linear_map"]], ["add", "theorem", "differentiable", ["is_linear_map"]], ["add", "theorem", "differentiable_at", ["is_linear_map"]], ["add", "theorem", "differentiable_on", ["is_linear_map"]], ["add", "theorem", "differentiable_within_at", ["is_linear_map"]], ["add", "theorem", "has_deriv_at", ["is_linear_map"]], ["add", "theorem", "has_deriv_at_filter", ["is_linear_map"]], ["add", "theorem", "has_deriv_within_at", ["is_linear_map"]], ["add", "theorem", "eq_deriv", ["unique_diff_within_at"]]]}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["add", "theorem", "fderiv_within_zero_of_not_differentiable_within_at", []], ["add", "theorem", "fderiv_zero_of_not_differentiable_at", []]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "map_eq_self", ["algebra", "id"]], ["add", "theorem", "smul_eq_mul", ["algebra", "id"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "one_apply", ["continuous_linear_map"]], ["add", "theorem", "smul_right_apply", ["continuous_linear_map"]], ["add", "theorem", "smul_right_one_eq_iff", ["continuous_linear_map"]], ["add", "theorem", "smul_right_one_one", ["continuous_linear_map"]]]}]}, {"timestamp": 1573642410, "sha": "3bb2b5c5", "message": "feat(algebra/big_operators): dvd_sum (#1679)\n* feat(data/multiset): dvd_sum\n* feat(algebra/big_operators): dvd_sum\n* fix build\n* fix build\n* fix build", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "dvd_sum", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "dvd_sum", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "dvd_sum", ["multiset"]]]}]}, {"timestamp": 1573601893, "sha": "dfd25ff4", "message": "chore(meta/expr): delete local_binder_info; rename to_implicit (#1668)\n* chore(meta/expr): delete local_binder_info; rename to_implicit\nlocal_binder_info duplicated local_binding_info.\nto_implicit has been renamed to_implicit_local_const, to distinguish it\nfrom to_implicit_binder\n* file missing from commit", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}]}, {"timestamp": 1573584710, "sha": "1749a8dd", "message": "feat(group_theory/submonoid): add bundled submonoids and various lemmas (#1623)\n* WIP -- removing and everything is broken\n* test\n* test\n* tidy\n* fixed localization\n* starting on coset\n* WIP\n* submonoid.lean now compiles but no to_additive stuff\n* submonoid.lean compiles\n* putting is_submonoid back\n* docstrings\n* terrible docstrings up to line 370\n* finished docstrings\n* more to_additive stuff\n* WIP -- removing and everything is broken\n* test\n* test\n* tidy\n* fixed localization\n* starting on coset\n* WIP\n* submonoid.lean now compiles but no to_additive stuff\n* submonoid.lean compiles\n* putting is_submonoid back\n* docstrings\n* terrible docstrings up to line 370\n* finished docstrings\n* more to_additive stuff\n* WIP quotient monoids\n* quotient monoids WIP\n* quotient_monoid w/o ideals.lean all compiles\n* removing lemma\n* adjunction\n* some tidying\n* remove pointless equiv\n* completion compiles (very slowly)\n* add lemma\n* tidying\n* more tidying\n* mul -> smul oops\n* might now compile\n* tidied! I think\n* fix\n* breaking/adding stuff & switching branch\n* add Inf relation\n* removing sorrys\n* nearly updated quotient_monoid\n* updated quotient_monoid\n* resurrecting computability\n* tidied congruence.lean, added some docstrings\n* extending setoids instead, WIP\n* starting Galois insertion\n* a few more bits of to_additive and docs\n* no battery\n* up to line 800\n* congruence'll compile when data.setoid exists now\n* more updates modulo existence of data.setoid\n* rearranging stuff\n* docstrings\n* starting additive docstrings\n* using newer additive docstring format in submonoid\n* docstrings, tidying\n* fixes and to_additive stuff, all WIP\n* temporary congruence fixes\n* slightly better approach to kernels, general chaos\n* aahh\n* more mess\n* deleting doomed inductive congruence closure\n* many fixes and better char pred isoms\n* docstrings for group_theory.submonoid\n* removing everything but bundled submonoids/lemmas\n* removing things etc\n* removing random empty folder\n* tidy\n* adding lemma back\n* tidying\n* responding to PR comments\n* change 2 defs to lemmas\n* @[simp] group_power.lean lemmas\n* responding to commute.lean comments\n* Remove unnecessary add_semiconj_by.eq\n* Change prod.submonoid to submonoid.prod\n* replacing a / at the end of docstring\nSorry - don't make commits on your phone when your laptop's playing up :/\n* removing some not very useful to_additives\n* fix pi_instances namespaces\n* remove unnecessary prefix\n* change extensionality to ext\nnot sure this is necessary because surely merging will change this automatically, but Travis told me to, and I really want it to compile, and I am not at my laptop", "changes": [{"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": [["add", "def", "add_submonoid", ["centralizer"]], ["add", "def", "add_submonoid", ["set", "centralizer"]], ["add", "def", "centralizer", ["submonoid"]], ["add", "def", "centralizer", ["submonoid", "set"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "comp_apply", ["monoid_hom"]], ["add", "theorem", "comp_assoc", ["monoid_hom"]], ["add", "theorem", "injective_iff", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "eq_inv_mul_iff_mul_eq", ["units"]], ["add", "theorem", "eq_mul_inv_iff_mul_eq", ["units"]], ["add", "theorem", "inv_mul_eq_iff_eq_mul", ["units"]], ["add", "theorem", "mul_inv_eq_iff_eq_mul", ["units"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "map_gsmul", ["add_monoid_hom"]], ["add", "theorem", "map_smul", ["add_monoid_hom"]], ["add", "theorem", "map_gpow", ["monoid_hom"]], ["add", "theorem", "map_pow", ["monoid_hom"]], ["add", "theorem", "map_pow", ["ring_hom"]]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["add", "def", "fst", ["prod", "monoid_hom"]], ["add", "def", "snd", ["prod", "monoid_hom"]], ["add", "def", "prod", ["submonoid"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "comp_assoc", ["ring_hom"]], ["add", "theorem", "injective_iff", ["ring_hom"]]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "def", "mk'", ["mul_equiv"]], ["add", "def", "to_ring_equiv", ["mul_equiv"]], ["add", "def", "to_add_monoid_hom", ["ring_equiv"]], ["add", "def", "to_monoid_hom", ["ring_equiv"]]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": [["mod", "theorem", "mem_own_right_coset", []], ["mod", "theorem", "mem_right_coset_right_coset", []]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "closure'_singleton", ["add_monoid"]], ["add", "theorem", "coe_smul", ["add_submonoid"]], ["add", "theorem", "self_mem", ["add_submonoid", "multiples"]], ["add", "def", "multiples", ["add_submonoid"]], ["add", "theorem", "multiples_subset", ["add_submonoid"]], ["add", "def", "of_submonoid", ["add_submonoid"]], ["add", "theorem", "smul_mem", ["add_submonoid"]], ["add", "def", "to_submonoid", ["add_submonoid"]], ["add", "structure", "add_submonoid", []], ["mod", "theorem", "coe_pow", ["is_submonoid"]], ["add", "def", "closure'", ["monoid"]], ["add", "theorem", "closure'_le", ["monoid"]], ["add", "theorem", "closure'_mono", ["monoid"]], ["add", "theorem", "closure'_singleton", ["monoid"]], ["add", "theorem", "exists_list_of_mem_closure'", ["monoid"]], ["add", "theorem", "image_closure'", ["monoid"]], ["add", "theorem", "le_closure'", ["monoid"]], ["add", "theorem", "mem_closure'_union_iff", ["monoid"]], ["add", "def", "comap", ["monoid_hom"]], ["add", "def", "map", ["monoid_hom"]], ["add", "def", "range", ["monoid_hom"]], ["add", "def", "range_mk", ["monoid_hom"]], ["add", "theorem", "range_top_of_surjective", ["monoid_hom"]], ["add", "def", "set_inclusion", ["monoid_hom"]], ["add", "def", "subtype_mk", ["monoid_hom"]], ["mod", "theorem", "add_mem", ["multiples"]], ["mod", "theorem", "mul_mem", ["powers"]], ["add", "theorem", "Inf_le'", ["submonoid"]], ["add", "def", "Union_of_directed", ["submonoid"]], ["add", "def", "add_submonoid_equiv", ["submonoid"]], ["add", "def", "bot", ["submonoid"]], ["add", "theorem", "coe_mul", ["submonoid"]], ["add", "theorem", "coe_one", ["submonoid"]], ["add", "theorem", "coe_pow", ["submonoid"]], ["add", "theorem", "ext'", ["submonoid"]], ["add", "theorem", "ext", ["submonoid"]], ["add", "theorem", "finset_prod_mem", ["submonoid"]], ["add", "def", "inf", ["submonoid"]], ["add", "theorem", "le_Inf'", ["submonoid"]], ["add", "theorem", "le_def", ["submonoid"]], ["add", "theorem", "list_prod_mem", ["submonoid"]], ["add", "theorem", "mem_Inf", ["submonoid"]], ["add", "theorem", "mem_bot", ["submonoid"]], ["add", "theorem", "mem_coe", ["submonoid"]], ["add", "theorem", "mem_inf", ["submonoid"]], ["add", "theorem", "mem_top", ["submonoid"]], ["add", "theorem", "mul_mem", ["submonoid"]], ["add", "theorem", "multiset_prod_mem", ["submonoid"]], ["add", "def", "of_add_submonoid", ["submonoid"]], ["add", "theorem", "one_mem", ["submonoid"]], ["add", "theorem", "pow_mem", ["submonoid"]], ["add", "theorem", "self_mem", ["submonoid", "powers"]], ["add", "def", "powers", ["submonoid"]], ["add", "theorem", "powers_subset", ["submonoid"]], ["add", "theorem", "prod_mem", ["submonoid"]], ["add", "def", "subtype", ["submonoid"]], ["add", "theorem", "subtype_apply", ["submonoid"]], ["add", "theorem", "subtype_eq_val", ["submonoid"]], ["add", "def", "to_add_submonoid", ["submonoid"]], ["add", "def", "univ", ["submonoid"]], ["add", "structure", "submonoid", []]]}]}, {"timestamp": 1573577470, "sha": "7b07932d", "message": "feat(analysis/normed_space/operator_norm): continuity of linear forms; swap directions of `nnreal.coe_*` (#1655)\n* feat(analysis/normed_space/operator_norm): continuity of linear forms\n* use lift, change nnreal.coe_le direction", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "bound_of_uniform_embedding", ["continuous_linear_map"]], ["add", "theorem", "uniform_continuous", ["continuous_linear_map"]], ["add", "theorem", "uniform_embedding_of_bound", ["continuous_linear_map"]], ["add", "theorem", "uniform_embedding", ["linear_equiv"]], ["add", "theorem", "bound_of_continuous", ["linear_map"]], ["add", "theorem", "continuous_iff_is_closed_ker", ["linear_map"]], ["mod", "theorem", "continuous_of_bound", ["linear_map"]], ["mod", "def", "with_bound", ["linear_map"]], ["mod", "theorem", "linear_map_with_bound_apply", []], ["mod", "theorem", "linear_map_with_bound_coe", []]]}, {"oldPath": "src/analysis/normed_space/riesz_lemma.lean", "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "ball_pi", []], ["add", "theorem", "closed_ball_pi", []], ["add", "theorem", "dist_pi_le_iff", []], ["add", "theorem", "dist_pi_lt_iff", []], ["add", "theorem", "uniform_embedding_iff'", ["metric"]], ["add", "theorem", "proper_space_of_compact_closed_ball_of_le", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "uniform_embedding_iff'", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1573572122, "sha": "14435eb2", "message": "feat(algebra/lie_algebra): Define lie algebras (#1644)\n* feat(algebra/module): define abbreviation module.End\nThe algebra of endomorphisms of a module over a commutative ring.\n* feat(ring_theory/algebra): define algebra structure on square matrices over a commutative ring\n* feat(algebra/lie_algebras.lean): define Lie algebras\n* feat(algebra/lie_algebras.lean): simp lemmas for Lie rings\nSpecifically:\n * zero_left\n * zero_right\n * neg_left\n * leg_right\n* feat(algebra/lie_algebras): more simp lemmas for Lie rings\nSpecifically:\n * gsmul_left\n * gsmul_right\n* style(algebra/lie_algebras): more systematic naming\n* Update src/algebra/lie_algebras.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebras.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebras.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebras.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/lie_algebras.lean\nCatch up with renaming in recent Co-authored commits\n* Rename src/algebra/lie_algebras.lean --> src/algebra/lie_algebra.lean\n* Place lie_ring simp lemmas into global namespace\n* Place lie_smul simp lemma into global namespace\n* Drop now-redundant namespace qualifiers\n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Catch up after recent Co-authored commits making carrier types implicit\n* Add missing docstrings\n* feat(algebra/lie_algebra): replace `instance` definitions with vanilla `def`s\n* style(algebra/lie_algebra): Apply suggestions from code review\nCo-Authored-By: Patrick Massot\n* Update src/algebra/lie_algebra.lean\nCo-Authored-By: Johan Commelin \n* Minor tidy ups", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebra/lie_algebra.lean", "changes": [["add", "theorem", "add_lie", []], ["add", "theorem", "gsmul_lie", []], ["add", "theorem", "lie_add", []], ["add", "def", "Ad", ["lie_algebra"]], ["add", "def", "bil_lie", ["lie_algebra"]], ["add", "def", "of_associative_algebra", ["lie_algebra"]], ["add", "def", "of_endomorphism_algebra", ["lie_algebra"]], ["add", "theorem", "lie_gsmul", []], ["add", "theorem", "lie_neg", []], ["add", "def", "of_associative_ring", ["lie_ring"]], ["add", "theorem", "lie_self", []], ["add", "theorem", "lie_skew", []], ["add", "theorem", "lie_smul", []], ["add", "theorem", "lie_zero", []], ["add", "def", "lie_algebra", ["matrix"]], ["add", "theorem", "neg_lie", []], ["add", "theorem", "add_left", ["ring_commutator"]], ["add", "theorem", "add_right", ["ring_commutator"]], ["add", "theorem", "alternate", ["ring_commutator"]], ["add", "def", "commutator", ["ring_commutator"]], ["add", "theorem", "jacobi", ["ring_commutator"]], ["add", "theorem", "smul_lie", []], ["add", "theorem", "zero_lie", []]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "def", "End", ["module"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1573564850, "sha": "08880c94", "message": "feat(data/equiv,category_theory): prove equivalences are the same as isos (#1587)\n* refactor(category_theory,algebra/category): make algebraic categories not [reducible]\nAdapted from part of #1438.\n* Update src/algebra/category/CommRing/basic.lean\nCo-Authored-By: Scott Morrison \n* adding missing forget2 instances\n* Converting Reid's comment to a [Note]\n* adding examples testing coercions\n* feat(data/equiv/algebra): equivalence of algebraic equivalences and categorical isomorphisms\n* more @[simps]\n* more @[simps]", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["add", "def", "CommRing_iso_to_ring_equiv", ["category_theory", "iso"]], ["add", "def", "Ring_iso_to_ring_equiv", ["category_theory", "iso"]], ["add", "def", "to_CommRing_iso", ["ring_equiv"]], ["add", "def", "to_Ring_iso", ["ring_equiv"]], ["add", "def", "ring_equiv_iso_CommRing_iso", []], ["add", "def", "ring_equiv_iso_Ring_iso", []]]}, {"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group.lean", "changes": [["add", "def", "iso_perm", ["category_theory", "Aut"]], ["add", "def", "mul_equiv_perm", ["category_theory", "Aut"]], ["add", "def", "CommGroup_iso_to_mul_equiv", ["category_theory", "iso"]], ["add", "def", "Group_iso_to_mul_equiv", ["category_theory", "iso"]], ["add", "def", "to_CommGroup_iso", ["mul_equiv"]], ["add", "def", "to_Group_iso", ["mul_equiv"]], ["add", "def", "mul_equiv_iso_CommGroup_iso", []], ["add", "def", "mul_equiv_iso_Group_iso", []]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["add", "def", "CommMon_iso_to_mul_equiv", ["category_theory", "iso"]], ["add", "def", "Mon_iso_to_mul_equiv", ["category_theory", "iso"]], ["add", "def", "to_CommMon_iso", ["mul_equiv"]], ["add", "theorem", "to_CommMon_iso_hom", ["mul_equiv"]], ["add", "theorem", "to_CommMon_iso_inv", ["mul_equiv"]], ["add", "def", "to_Mon_iso", ["mul_equiv"]], ["add", "theorem", "to_Mon_iso_hom", ["mul_equiv"]], ["add", "theorem", "to_Mon_iso_inv", ["mul_equiv"]], ["add", "def", "mul_equiv_iso_CommMon_iso", []], ["add", "def", "mul_equiv_iso_Mon_iso", []]]}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["add", "theorem", "coe_hom_inv_id", ["category_theory"]], ["add", "theorem", "coe_inv_hom_id", ["category_theory"]]]}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["add", "def", "units_End_equiv_Aut", ["category_theory", "Aut"]], ["del", "def", "units_End_eqv_Aut", ["category_theory", "Aut"]]]}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "def", "equiv_equiv_iso", []], ["add", "theorem", "equiv_equiv_iso_hom", []], ["add", "theorem", "equiv_equiv_iso_inv", []], ["add", "def", "equiv_iso_iso", []]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "theorem", "symm_to_monoid_hom_apply_to_monoid_hom_apply", ["mul_equiv"]], ["add", "theorem", "to_monoid_hom_apply_symm_to_monoid_hom_apply", ["mul_equiv"]], ["add", "theorem", "symm_to_ring_hom_apply_to_ring_hom_apply", ["ring_equiv"]], ["add", "theorem", "to_ring_hom_apply_symm_to_ring_hom_apply", ["ring_equiv"]]]}]}, {"timestamp": 1573557811, "sha": "2cbeed95", "message": "style(*): use notation `𝓝` for `nhds` (#1582)\n* chore(*): notation for nhds\n* Convert new uses of nhds", "changes": [{"oldPath": "docs/contribute/style.md", "newPath": "docs/contribute/style.md", "changes": []}, {"oldPath": "docs/theories/topology.md", "newPath": "docs/theories/topology.md", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/fderiv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": [["mod", "theorem", "differentiable_within_at_inter", []], ["mod", "theorem", "fderiv_congr_of_mem_nhds", []], ["mod", "theorem", "fderiv_within_inter", []], ["mod", "theorem", "has_fderiv_at_filter", ["has_fderiv_at"]], ["mod", "theorem", "has_fderiv_within_at_inter", []]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "tangent_cone_inter_nhds", []], ["mod", "theorem", "inter", ["unique_diff_within_at"]], ["mod", "theorem", "unique_diff_within_at_inter", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["mod", "theorem", "iterated_fderiv_within_inter", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "tendsto_exp_zero_one", ["complex"]], ["mod", "theorem", "tendsto_log_one_zero", ["real"]]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "tendsto_inverse_at_top_nhds_0", []], ["mod", "theorem", "tendsto_inverse_at_top_nhds_0_nat", []], ["mod", "theorem", "tendsto_one_div_at_top_nhds_0_nat", []]]}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "gt_of_tendsto_zero_of_neg", ["hyperreal"]], ["mod", "theorem", "is_st_of_tendsto", ["hyperreal"]], ["mod", "theorem", "lt_of_tendsto_zero_of_pos", ["hyperreal"]], ["mod", "theorem", "neg_lt_of_tendsto_zero_of_pos", ["hyperreal"]]]}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "nhds_eq", ["add_group_with_zero_nhd"]], ["mod", "theorem", "nhds_zero_eq_Z", ["add_group_with_zero_nhd"]], ["mod", "theorem", "exists_nhds_split4", []], ["mod", "theorem", "exists_nhds_split", []], ["mod", "theorem", "exists_nhds_split_inv", []], ["mod", "theorem", "nhds_is_mul_hom", []], ["mod", "theorem", "nhds_one_symm", []], ["mod", "theorem", "nhds_pointwise_mul", []], ["mod", "theorem", "nhds_translation", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "def", "has_sum", []]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["mod", "theorem", "tendsto_mul'", []]]}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["mod", "theorem", "mem_nhds_one", ["open_subgroup"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "Liminf_eq_of_le_nhds", []], ["mod", "theorem", "Liminf_nhds", []], ["mod", "theorem", "Limsup_eq_of_le_nhds", []], ["mod", "theorem", "Limsup_nhds", []], ["mod", "theorem", "ge_mem_nhds", []], ["mod", "theorem", "gt_mem_nhds", []], ["mod", "theorem", "is_bounded_ge_nhds", []], ["mod", "theorem", "is_bounded_le_nhds", []], ["mod", "theorem", "is_cobounded_ge_nhds", []], ["mod", "theorem", "is_cobounded_le_nhds", []], ["mod", "theorem", "le_mem_nhds", []], ["mod", "theorem", "lt_mem_nhds", []], ["mod", "theorem", "mem_nhds_orderable_dest", []], ["mod", "theorem", "tendsto_max", []], ["mod", "theorem", "tendsto_min", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["mod", "theorem", "tendsto_zero_left", ["is_Z_bilin"]], ["mod", "theorem", "tendsto_zero_right", ["is_Z_bilin"]], ["mod", "theorem", "uniformity_eq_comap_nhds_zero'", []], ["mod", "theorem", "uniformity_eq_comap_nhds_zero", []]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "closure_eq_nhds", []], ["mod", "def", "continuous_at", []], ["mod", "theorem", "interior_eq_nhds", []], ["mod", "theorem", "is_closed_iff_nhds", []], ["mod", "theorem", "is_open_iff_mem_nhds", []], ["mod", "theorem", "is_open_iff_nhds", []], ["mod", "theorem", "le_nhds_iff", []], ["mod", "theorem", "lim_spec", []], ["mod", "theorem", "mem_closure_iff_nhds", []], ["mod", "theorem", "mem_of_nhds", []], ["mod", "theorem", "nhds_def", []], ["mod", "theorem", "nhds_le_of_le", []], ["mod", "theorem", "nhds_neq_bot", []], ["mod", "theorem", "nhds_sets", []], ["mod", "theorem", "pure_le_nhds", []], ["mod", "theorem", "tendsto_const_nhds", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "map_nhds_subtype_val_eq", []], ["mod", "theorem", "nhds_prod_eq", []], ["mod", "theorem", "nhds_swap", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["mod", "theorem", "continuous_within_at_inter", []], ["mod", "theorem", "inter_mem_nhds_within", []], ["mod", "theorem", "mem_nhds_within_of_mem_nhds", []], ["mod", "def", "nhds_within", []], ["mod", "theorem", "nhds_within_restrict'", []], ["mod", "theorem", "nhds_within_univ", []]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["mod", "theorem", "comap_nhds_neq_bot", ["dense_inducing"]], ["mod", "theorem", "extend_eq", ["dense_inducing"]], ["mod", "theorem", "tendsto_comap_nhds_nhds", ["dense_inducing"]]]}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": [["mod", "theorem", "tendsto_inv", ["complex"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "Icc_mem_nhds", ["ennreal"]], ["mod", "theorem", "coe_range_mem_nhds", ["ennreal"]], ["mod", "theorem", "nhds_coe", ["ennreal"]], ["mod", "theorem", "nhds_coe_coe", ["ennreal"]], ["mod", "theorem", "nhds_of_ne_top", ["ennreal"]], ["mod", "theorem", "nhds_top", ["ennreal"]], ["mod", "theorem", "nhds_zero", ["ennreal"]], ["mod", "theorem", "tendsto_of_real", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "tendsto_of_real", ["nnreal"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["mod", "theorem", "tendsto_inv", ["real"]]]}, {"oldPath": "src/topology/list.lean", "newPath": "src/topology/list.lean", "changes": [["mod", "theorem", "nhds_list", []], ["mod", "theorem", "nhds_nil", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "theorem", "map_nhds_eq", ["inducing"]], ["mod", "theorem", "is_open_map_iff_nhds_le", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "ball_mem_nhds", ["metric"]], ["mod", "theorem", "mem_nhds_iff", ["metric"]], ["mod", "theorem", "nhds_eq", ["metric"]], ["mod", "theorem", "nhds_comap_dist", []]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": [["mod", "theorem", "half_pow_tendsto_zero", ["ennreal"]], ["mod", "theorem", "B2_lim", ["sequentially_complete"]], ["mod", "theorem", "le_nhds_cau_filter_lim", ["sequentially_complete"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "ball_mem_nhds", ["emetric"]], ["mod", "theorem", "mem_nhds_iff", ["emetric"]], ["mod", "theorem", "nhds_eq", ["emetric"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "map_nhds_induced_eq", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "compl_singleton_mem_nhds", []], ["mod", "theorem", "eq_of_nhds_neq_bot", []], ["mod", "theorem", "lim_eq", []], ["mod", "theorem", "lim_nhds_eq", []], ["mod", "theorem", "locally_compact_of_compact_nhds", []], ["mod", "theorem", "nhds_eq_nhds_iff", []], ["mod", "theorem", "nhds_is_closed", []], ["mod", "theorem", "nhds_le_nhds_iff", []], ["mod", "theorem", "t2_iff_nhds", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": [["mod", "theorem", "convergent_eqv_pure", []], ["mod", "theorem", "ultrafilter_comap_pure_nhds", []]]}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "def", "compact", []]]}, {"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "nhds_eq_comap_uniformity", []], ["mod", "theorem", "nhds_eq_uniformity", []], ["mod", "theorem", "tendsto_left_nhds_uniformity", []], ["mod", "theorem", "tendsto_right_nhds_uniformity", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "theorem", "cauchy_nhds", []], ["mod", "def", "is_complete", []]]}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1573542303, "sha": "3cae70d6", "message": "feat(extensionality): generate ext_iff for structures (#1656)\n* feat(extensionality): generate ext_iff for structures\n* fix\n* core.lean [skip ci]\n* Update ext.lean\n* Update ext.lean\n* Update tactics.md\n* Update src/tactic/ext.lean\nCo-Authored-By: Rob Lewis ", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1573534950, "sha": "f58f3404", "message": "feat(order/lattice): add `monotone.le_map_sup` and `monotone.map_inf_le` (#1673)\nUse it to simplify some proofs in `data/rel`.", "changes": [{"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": [["mod", "theorem", "core_mono", ["rel"]], ["add", "theorem", "core_subset", ["rel"]], ["mod", "theorem", "core_union", ["rel"]], ["mod", "theorem", "image_mono", ["rel"]], ["add", "theorem", "image_subset", ["rel"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "le_map_sup", ["monotone"]], ["add", "theorem", "map_inf_le", ["monotone"]]]}]}, {"timestamp": 1573527735, "sha": "c28497fa", "message": "chore(*): use `iff.rfl` instead of `iff.refl _` (#1675)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["mod", "theorem", "ge_iff_le", []], ["mod", "theorem", "gt_iff_lt", []]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "le_iff_val_le_val", ["fin"]], ["mod", "theorem", "lt_iff_val_lt_val", ["fin"]]]}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["mod", "theorem", "op_inj_iff", ["opposite"]], ["mod", "theorem", "unop_inj_iff", ["opposite"]]]}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "set_of_app_iff", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "all_ae_iff", ["measure_theory"]], ["mod", "theorem", "mem_a_e_iff", ["measure_theory", "measure"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": [["mod", "theorem", "mem_hom_right", ["Class"]], ["mod", "theorem", "subset_hom", ["Class"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1573508694, "sha": "d0778871", "message": "cleanup(data/equiv/basic): drop `quot_equiv_of_quot'`, rename `quot_equiv_of_quot` (#1672)\n* cleanup(data/equiv/basic): drop `quot_equiv_of_quot'`, rename `quot_equiv_of_quot`\n* `quot_equiv_of_quot` was the same as `quot.congr`\n* rename `quot_equiv_of_quot` to `quot.congr_left` to match\n `quot.congr` and `quot.congr_right`.\n* Add docs", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "def", "quot_equiv_of_quot'", ["equiv"]], ["del", "def", "quot_equiv_of_quot", ["equiv"]]]}]}, {"timestamp": 1573485569, "sha": "a5b3af3d", "message": "fix(tactic/core): correct `of_int` doc string (#1671)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1573437733, "sha": "6ecdefc0", "message": "chore(analysis/calculus/deriv): rename to fderiv (#1661)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/fderiv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}]}, {"timestamp": 1573430166, "sha": "886b15b5", "message": "doc(measure_theory/l1_space): add doc and some lemmas (#1657)\n* Add doc and lemmas\n* Remove unnecessary assumption\n* Fix integrable_neg\n* Remove extra assumptions\n* Wrong variable used", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "nnnorm_norm", []]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_const_mul'", ["measure_theory"]], ["add", "theorem", "lintegral_const_mul_le", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": [["mod", "def", "integrable", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_add", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_mk", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_neg", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_smul", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_sub", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "integrable_zero", ["measure_theory", "ae_eq_fun"]], ["mod", "def", "integrable", ["measure_theory"]], ["mod", "theorem", "integrable_add", ["measure_theory"]], ["add", "theorem", "integrable_iff_lintegral_edist", ["measure_theory"]], ["add", "theorem", "integrable_iff_of_ae_eq", ["measure_theory"]], ["mod", "theorem", "integrable_neg", ["measure_theory"]], ["add", "theorem", "integrable_norm", ["measure_theory"]], ["add", "theorem", "integrable_of_ae_eq", ["measure_theory"]], ["mod", "theorem", "integrable_smul", ["measure_theory"]], ["add", "theorem", "integrable_sub", ["measure_theory"]], ["mod", "theorem", "integrable_zero", ["measure_theory"]], ["mod", "theorem", "add_def", ["measure_theory", "l1"]], ["add", "theorem", "add_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "all_ae_mk_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "dist_def", ["measure_theory", "l1"]], ["add", "theorem", "dist_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "ext_iff", ["measure_theory", "l1"]], ["add", "theorem", "lintegral_edist_to_fun_lt_top", ["measure_theory", "l1"]], ["mod", "def", "mk", ["measure_theory", "l1"]], ["add", "theorem", "mk_add", ["measure_theory", "l1"]], ["add", "theorem", "mk_eq_mk", ["measure_theory", "l1"]], ["add", "theorem", "mk_zero", ["measure_theory", "l1"]], ["add", "theorem", "neg_mk", ["measure_theory", "l1"]], ["add", "theorem", "neg_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "norm_def", ["measure_theory", "l1"]], ["add", "theorem", "norm_mk", ["measure_theory", "l1"]], ["add", "theorem", "norm_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "self_eq_mk", ["measure_theory", "l1"]], ["mod", "theorem", "smul_def", ["measure_theory", "l1"]], ["add", "theorem", "smul_mk", ["measure_theory", "l1"]], ["add", "theorem", "smul_to_fun", ["measure_theory", "l1"]], ["add", "theorem", "sub_to_fun", ["measure_theory", "l1"]], ["mod", "theorem", "zero_def", ["measure_theory", "l1"]], ["add", "theorem", "zero_to_fun", ["measure_theory", "l1"]], ["mod", "def", "l1", ["measure_theory"]], ["add", "theorem", "lintegral_edist_lt_top", ["measure_theory"]], ["add", "theorem", "lintegral_edist_triangle", ["measure_theory"]], ["mod", "theorem", "lintegral_nnnorm_add", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_eq_lintegral_edist", ["measure_theory"]], ["mod", "theorem", "lintegral_nnnorm_neg", ["measure_theory"]], ["mod", "theorem", "lintegral_nnnorm_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "all_ae_eq_refl", ["measure_theory"]], ["add", "theorem", "all_ae_eq_symm", ["measure_theory"]], ["add", "theorem", "all_ae_eq_trans", ["measure_theory"]]]}]}, {"timestamp": 1573422559, "sha": "ce48727e", "message": "fix(order/conditionally_complete_lattice): fix 2 misleading names (#1666)\n* `cSup_upper_bounds_eq_cInf` → `cSup_lower_bounds_eq_cInf`;\n* `cInf_lower_bounds_eq_cSup` → `cInf_upper_bounds_eq_cSup`.", "changes": [{"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "cInf_lower_bounds_eq_cSup", ["lattice"]], ["add", "theorem", "cInf_upper_bounds_eq_cSup", ["lattice"]], ["add", "theorem", "cSup_lower_bounds_eq_cInf", ["lattice"]], ["del", "theorem", "cSup_upper_bounds_eq_cInf", ["lattice"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}]}, {"timestamp": 1573414955, "sha": "f738ec7e", "message": "refactor(data/zmod/quadratic_reciprocity): simplify proof of quadratic reciprocity and prove when 2 is a square (#1609)\n* feat(number_theory/sum_four_squares): every natural number is the sum of four square numbers\n* gauss_lemma\n* Johan's suggestions\n* some better parity proofs\n* refactor(data/finset): restate disjoint_filter\n* fix build\n* fix silly lemmas in finite_fields\n* generalize a lemma\n* work on add_sum_mul_div_eq_mul\n* fix build\n* Update src/number_theory/sum_four_squares.lean\n* feat(data/multiset): map_eq_map_of_bij_of_nodup\n* finish proof of quad_rec\n* minor fix\n* Add docs\n* add docs in correct style\n* Use Ico 1 p instead of (range p).erase 0", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_Ico_id_eq_fact", ["finset"]], ["del", "theorem", "prod_range_id_eq_fact", ["finset"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["add", "theorem", "even_div", ["nat"]], ["add", "theorem", "neg_one_pow_eq_one_iff_even", ["nat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_nat_abs_val_min_abs", ["zmod"]], ["add", "theorem", "nat_abs_mod_two", ["zmod"]], ["add", "theorem", "nat_abs_val_min_abs_neg", ["zmod"]], ["add", "theorem", "neg_eq_self_mod_two", ["zmod"]], ["add", "theorem", "val_eq_ite_val_min_abs", ["zmod"]], ["add", "theorem", "cast_nat_abs_val_min_abs", ["zmodp"]], ["add", "theorem", "nat_abs_val_min_abs_neg", ["zmodp"]], ["add", "theorem", "val_eq_ite_val_min_abs", ["zmodp"]]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": [["add", "theorem", "Ico_map_val_min_abs_nat_abs_eq_Ico_map_id", []], ["add", "theorem", "div_eq_filter_card", []], ["del", "theorem", "card_range_p_mul_q_filter_not_coprime", ["quadratic_reciprocity_aux"]], ["del", "theorem", "filter_range_p_mul_q_div_two_eq", ["quadratic_reciprocity_aux"]], ["del", "theorem", "prod_filter_range_p_mul_q_div_two_eq", ["quadratic_reciprocity_aux"]], ["del", "theorem", "prod_filter_range_p_mul_q_div_two_eq_prod_product", ["quadratic_reciprocity_aux"]], ["del", "theorem", "prod_filter_range_p_mul_q_div_two_mod_p_eq", ["quadratic_reciprocity_aux"]], ["del", "theorem", "prod_filter_range_p_mul_q_not_coprime_eq", ["quadratic_reciprocity_aux"]], ["del", "theorem", "prod_range_div_two_erase_zero", ["quadratic_reciprocity_aux"]], ["del", "theorem", "prod_range_p_mul_q_div_two_ite_eq", ["quadratic_reciprocity_aux"]], ["del", "theorem", "prod_range_p_mul_q_filter_coprime_mod_p", ["quadratic_reciprocity_aux"]], ["del", "theorem", "range_p_product_range_q_div_two_prod", ["quadratic_reciprocity_aux"]], ["add", "theorem", "eisenstein_lemma", ["zmodp"]], ["add", "theorem", "exists_pow_two_eq_two_iff", ["zmodp"]], ["add", "theorem", "gauss_lemma", ["zmodp"]], ["add", "theorem", "legendre_sym_eq_one_iff", ["zmodp"]], ["mod", "theorem", "legendre_sym_eq_pow", ["zmodp"]], ["add", "theorem", "legendre_sym_two", ["zmodp"]], ["add", "theorem", "prod_Ico_one_prime", ["zmodp"]], ["del", "theorem", "prod_range_prime_erase_zero", ["zmodp"]], ["mod", "theorem", "quadratic_reciprocity", ["zmodp"]]]}]}, {"timestamp": 1573408698, "sha": "4e681292", "message": "feat(data/finset): Ico.subset (#1669)\nDoes not have the `m1 < n1` assumption required for `subset_iff`", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}]}, {"timestamp": 1573401107, "sha": "2cd59b41", "message": "feat(coinduction): add identifier list to `coinduction` tactic (#1653)\n* feat(coinduction): add identifier list to `coinduction` tactic\n* Update coinductive_predicates.lean\n* two doc strings [skip ci]\n* Update coinductive_predicates.lean\n* fix merge\n* move definitions around\n* move more stuff\n* fix build\n* move and document functions", "changes": [{"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": [["del", "def", "last_string", ["name"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": [["add", "def", "last_string", ["name"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/mk_iff_of_inductive_prop.lean", "newPath": "src/tactic/mk_iff_of_inductive_prop.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}]}, {"timestamp": 1573393526, "sha": "209e0397", "message": "cleanup(tactic/core): removing unused tactics (#1641)\n* doc(tactic/core): begin to add docstrings\n* a few more doc strings\n* more additions\n* more doc\n* deal with an undocumented definition by removing it\n* minor\n* add doc string\n* remove some unused core tactics\n* Revert \"remove some unused core tactics\"\nThis reverts commit 52de333c0c3fd4294930b270eeac503425f0070f.\n* document get_classes\n* Revert \"deal with an undocumented definition by removing it\"\nThis reverts commit 07b56e7456911466a15f1c340d9964e08aab195e.\n* more doc strings\n* dead code\n* revert changing `subobject_names` to private\n* remaining doc strings\n* cleanup(tactic/core): removing unused tactics\n* remove file_simp_attribute_decl and simp_lemmas_from_file\n* delete drop_binders\n* fix merge, delete check_defn", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1573385320, "sha": "4ecc17b5", "message": "fix(scripts/mk_all): don't add `lint_mathlib` to `all.lean` [ci skip] (#1667)", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}]}, {"timestamp": 1573339260, "sha": "c497f961", "message": "feat(tactic/norm_cast): add push_cast simp attribute (#1647)\n* feat(tactic/norm_cast): add push_cast simp attribute\n* test and docs", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/norm_cast.lean", "newPath": "src/tactic/norm_cast.lean", "changes": []}, {"oldPath": "test/norm_cast.lean", "newPath": "test/norm_cast.lean", "changes": []}]}, {"timestamp": 1573326849, "sha": "1236ced4", "message": "feat(data/nat/basic): succ_div (#1664)\n* feat(data/nat/basic): succ_div\nRather long proof, but it was the best I could do.\n* Update basic.lean\n* add the two lemmas for each case\n* get rid of positivity assumption", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "succ_div", ["nat"]], ["add", "theorem", "succ_div_of_dvd", ["nat"]], ["add", "theorem", "succ_div_of_not_dvd", ["nat"]]]}]}, {"timestamp": 1573308688, "sha": "1c24f92b", "message": "feat(data/list/basic): nth_le_append_right (#1662)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_le_append_right", ["list"]], ["add", "theorem", "nth_le_append_right_aux", ["list"]]]}]}, {"timestamp": 1573298970, "sha": "b0c36dfd", "message": "feat(measure_theory/integration) lemmas for calculating integral of simple functions (#1659)\n* lemmas for calculating integration on simple functions\n* Updates\n* `finsupp` changed to `fin_vol_supp`\n* less conditions for `to_real_mul_to_real`\n* `sum_lt_top` with more abstraction\n* Fix extra arguments\n* One tactic per line", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_lt_top", ["with_top"]], ["add", "theorem", "sum_lt_top_iff", ["with_top"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["mod", "theorem", "le_of_real_iff_to_real_le", ["ennreal"]], ["mod", "theorem", "of_real_eq_coe_nnreal", ["ennreal"]], ["mod", "theorem", "of_real_lt_iff_lt_to_real", ["ennreal"]], ["add", "theorem", "sum_lt_top", ["ennreal"]], ["add", "theorem", "sum_lt_top_iff", ["ennreal"]], ["add", "theorem", "to_nnreal_sum", ["ennreal"]], ["add", "theorem", "to_real_eq_to_real", ["ennreal"]], ["add", "theorem", "to_real_mul_to_real", ["ennreal"]], ["add", "theorem", "to_real_mul_top", ["ennreal"]], ["mod", "theorem", "to_real_of_real_mul", ["ennreal"]], ["add", "theorem", "to_real_sum", ["ennreal"]], ["add", "theorem", "to_real_top_mul", ["ennreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_rw₁", ["measure_theory"]], ["add", "theorem", "lintegral_rw₂", ["measure_theory"]], ["mod", "theorem", "approx_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "approx_comp", ["measure_theory", "simple_func"]], ["mod", "theorem", "ennreal_rat_embed_encode", ["measure_theory", "simple_func"]], ["add", "theorem", "fin_vol_supp_map", ["measure_theory", "simple_func"]], ["add", "theorem", "fin_vol_supp_of_fin_vol_supp_map", ["measure_theory", "simple_func"]], ["add", "theorem", "fin_vol_supp_of_integral_lt_top", ["measure_theory", "simple_func"]], ["add", "theorem", "fin_vol_supp_pair", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_lt_top_of_fin_vol_supp", ["measure_theory", "simple_func"]], ["mod", "theorem", "integral_map", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_map_coe_lt_top", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_map", ["measure_theory", "simple_func"]], ["add", "theorem", "map_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "map_preimage_singleton", ["measure_theory", "simple_func"]], ["add", "theorem", "pair_preimage", ["measure_theory", "simple_func"]], ["add", "theorem", "pair_preimage_singleton", ["measure_theory", "simple_func"]], ["add", "theorem", "preimage_eq_empty_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "smul_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "smul_eq_map", ["measure_theory", "simple_func"]], ["add", "theorem", "volume_bUnion_preimage", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}]}, {"timestamp": 1573222166, "sha": "ca216162", "message": "chore(scripts): add linter and update nolints", "changes": [{"oldPath": "scripts/mk_nolint.lean", "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "scripts/nolints.txt", "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1573221435, "sha": "8afcc5ae", "message": "feat(scripts): add nolints.txt", "changes": [{"oldPath": null, "newPath": "scripts/nolints.txt", "changes": []}]}, {"timestamp": 1573211026, "sha": "3223ba7f", "message": "doc(linear_algebra): rename lin_equiv to linear_equiv (#1660)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["del", "def", "lin_equiv_matrix'", []], ["del", "def", "lin_equiv_matrix", []], ["add", "def", "linear_equiv_matrix'", []], ["add", "def", "linear_equiv_matrix", []]]}]}, {"timestamp": 1573169138, "sha": "362acb56", "message": "feat(tactic/lint, script/mk_nolint): generate list of failing declarations to be ignored (#1636)\n* feat(tactic/lint): return names of failing declarations\n* feat(scripts/mk_nolint): produce sorted list of declarations failing lint tests\n* fix copyright\n* fix test\n* Update scripts/mk_nolint.lean", "changes": [{"oldPath": null, "newPath": "scripts/mk_nolint.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1573098221, "sha": "c718a229", "message": "feat(extensionality): rename to `ext`; generate `ext` rules for structures (#1645)\n* Update core.lean\n* Update tactics.lean\n* integrate generation of extensionality lemma of structures into `ext`\n* Update src/tactic/ext.lean [skip ci]\nCo-Authored-By: Rob Lewis \n* Update src/tactic/ext.lean [skip ci]\nCo-Authored-By: Rob Lewis \n* Update src/tactic/ext.lean\nCo-Authored-By: Rob Lewis \n* Update ext.lean [skip ci]\n* Update tactics.md [skip ci]\n* fix build\n* fix build", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/algebra/continued_fractions/basic.lean", "newPath": "src/algebra/continued_fractions/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "ext", ["units"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "ext", ["linear_map"]], ["mod", "theorem", "ext", ["submodule"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "ext", ["ring_hom"]]]}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["mod", "theorem", "ext", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/category/monad/basic.lean", "newPath": "src/category/monad/basic.lean", "changes": []}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "theorem", "ext", ["category_theory", "comma_morphism"]], ["mod", "theorem", "ext", ["category_theory", "over", "over_morphism"]], ["mod", "theorem", "ext", ["category_theory", "under", "under_morphism"]]]}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "theorem", "ext", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "theorem", "ext", ["category_theory", "limits", "cocone_morphism"]], ["mod", "def", "ext", ["category_theory", "limits", "cocones"]], ["mod", "theorem", "ext", ["category_theory", "limits", "cone_morphism"]], ["mod", "def", "ext", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "hom_ext", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["mod", "theorem", "ext", ["category_theory", "monad", "algebra", "hom"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["mod", "theorem", "ext", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["mod", "theorem", "ext", ["ring_equiv"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "ext", ["equiv"]], ["mod", "theorem", "ext", ["equiv", "perm"]]]}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["mod", "theorem", "ext", ["finmap"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["mod", "theorem", "ext", ["alist"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "ext", ["matrix"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["mod", "theorem", "ext", ["option"]]]}, {"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["mod", "theorem", "ext", ["pequiv"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "ext", ["polynomial"]]]}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/setoid.lean", "newPath": "src/data/setoid.lean", "changes": [["mod", "theorem", "ext'", ["setoid"]]]}, {"oldPath": "src/data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["mod", "theorem", "ext", ["vector"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "ext", ["linear_equiv"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "theorem", "ext", ["bilin_form"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["mod", "theorem", "ext", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["mod", "theorem", "ext", ["sesq_form"]]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["mod", "theorem", "ext", ["function", "embedding"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["mod", "theorem", "ext", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "ext", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "ext", ["measurable_space", "dynkin_system"]], ["mod", "theorem", "ext", ["measurable_space"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "ext", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["mod", "theorem", "ext", ["measure_theory", "outer_measure"]]]}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "theorem", "ext", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "theorem", "ext", ["ideal"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "theorem", "ext", ["mv_power_series"]], ["mod", "theorem", "ext", ["power_series"]]]}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": [["mod", "theorem", "ext", ["plift"]], ["mod", "theorem", "ext", ["ulift"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "ext", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["mod", "theorem", "ext", ["bounded_continuous_function"]]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["mod", "theorem", "ext", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": [["mod", "theorem", "ext", ["df"]], ["mod", "theorem", "ext", ["unit"]]]}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": [["add", "structure", "foo", []]]}]}, {"timestamp": 1573078943, "sha": "17a7f69e", "message": "doc(measure_theory/ae_eq_fun): add documentations and some lemmas (#1650)\n* Add documentations. `to_fun`.\n* More precise comments", "changes": [{"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["add", "theorem", "add_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "all_ae_mk_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_edist_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_eq_mk_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_eq_mk_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "const_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_to_fun'", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_zero_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "eintegral_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "ext", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "le_iff_to_fun_le", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "lift_rel_iff_to_fun", ["measure_theory", "ae_eq_fun"]], ["mod", "theorem", "mk_add_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_sub_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "neg_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "one_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "self_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "smul_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "sub_to_fun", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "zero_to_fun", ["measure_theory", "ae_eq_fun"]]]}]}, {"timestamp": 1573023660, "sha": "3c8bbdc6", "message": "chore(topology/subset_properties): simplify a proof (#1652)", "changes": [{"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}]}, {"timestamp": 1572998217, "sha": "62815e3d", "message": "doc(tactic/core): docstrings on all definitions (#1632)\n* doc(tactic/core): begin to add docstrings\n* a few more doc strings\n* more additions\n* more doc\n* deal with an undocumented definition by removing it\n* minor\n* add doc string\n* remove some unused core tactics\n* Revert \"remove some unused core tactics\"\nThis reverts commit 52de333c0c3fd4294930b270eeac503425f0070f.\n* document get_classes\n* Revert \"deal with an undocumented definition by removing it\"\nThis reverts commit 07b56e7456911466a15f1c340d9964e08aab195e.\n* more doc strings\n* dead code\n* revert changing `subobject_names` to private\n* remaining doc strings\n* Apply suggestions from code review\nCo-Authored-By: Bryan Gin-ge Chen \n* remove todo", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1572989202, "sha": "d9578a63", "message": "docs(tactic/lint) add code fence around #print statement to avoid its args looking like html tags. (#1651)", "changes": [{"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}]}, {"timestamp": 1572968262, "sha": "986e58ca", "message": "refactor(sum_two_square): extract lemmas about primes in Z[i] (#1643)\n* refactor(sum_two_square): extract lemmas about primes in Z[i]\n* forgot to save\n* docztring\n* module docstrings", "changes": [{"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": [["add", "theorem", "mod_four_eq_three_of_nat_prime_of_prime", ["gaussian_int"]], ["add", "theorem", "prime_iff_mod_four_eq_three_of_nat_prime", ["gaussian_int"]], ["add", "theorem", "prime_of_nat_prime_of_mod_four_eq_three", ["gaussian_int"]], ["add", "theorem", "sum_two_squares_of_nat_prime_of_not_irreducible", ["gaussian_int"]]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1572906195, "sha": "f3f1fd8c", "message": "feat(floor): one more lemma (#1646)\n* feat(floor): one more lemma\nand #lint fix\n* Update src/algebra/floor.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["mod", "theorem", "abs_sub_lt_one_of_floor_eq_floor", []], ["add", "theorem", "le_of_nat_ceil_le", []]]}]}, {"timestamp": 1572898428, "sha": "2dcc6c25", "message": "fix(tactic/tfae,scc): change the strongly connected component algorithm (#1600)\n* fix(tactic/tfae,scc): change the strongly connected component algorithm\n* add example\n* fix scc algorithm and add documentation\n* documentation [skip ci]\n* Update scc.lean [skip ci]\n* Update src/tactic/scc.lean\nCo-Authored-By: Scott Morrison \n* Update scc.lean\n* Update tactics.lean\n* Update src/tactic/scc.lean\nCo-Authored-By: Rob Lewis \n* rename mk_closure, add line breaks, grammar tweaks\n* Update scc.lean\n* add to `to_tactic_format` output and docstring, more minor fixes", "changes": [{"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1572879751, "sha": "ee5b38df", "message": "feat(simps): allow the user to specify the projections (#1630)\n* feat(simps): allow the user to specify the projections\nAlso add option to shorten generated lemma names\nAdd the attribute to more places in the category_theory library\nThe projection lemmas of inl_ and inr_ are now called inl__obj and similar\n* use simps partially in limits/cones and whiskering\n* revert whiskering\n* rename last_name to short_name\n* Update src/category_theory/products/basic.lean\n* Update src/category_theory/limits/cones.lean\nCo-Authored-By: Scott Morrison \n* Update src/category_theory/products/associator.lean\nCo-Authored-By: Scott Morrison \n* Update src/data/string/defs.lean\nCo-Authored-By: Scott Morrison \n* clarify is_eta_expansion docstrings", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "cocone_left_op_of_cone", ["category_theory", "limits"]], ["del", "theorem", "cocone_left_op_of_cone_X", ["category_theory", "limits"]], ["mod", "def", "cocone_of_cone_left_op", ["category_theory", "limits"]], ["del", "theorem", "cocone_of_cone_left_op_X", ["category_theory", "limits"]], ["mod", "def", "cone_left_op_of_cocone", ["category_theory", "limits"]], ["del", "theorem", "cone_left_op_of_cocone_X", ["category_theory", "limits"]], ["mod", "def", "cone_of_cocone_left_op", ["category_theory", "limits"]], ["del", "theorem", "cone_of_cocone_left_op_X", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": [["mod", "def", "associator", ["category_theory", "prod"]], ["del", "theorem", "associator_map", ["category_theory", "prod"]], ["del", "theorem", "associator_obj", ["category_theory", "prod"]], ["mod", "def", "inverse_associator", ["category_theory", "prod"]], ["del", "theorem", "inverse_associator_map", ["category_theory", "prod"]], ["del", "theorem", "inverse_associator_obj", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": [["mod", "def", "evaluation", ["category_theory"]], ["del", "theorem", "evaluation_map_app", ["category_theory"]], ["del", "theorem", "evaluation_obj_map", ["category_theory"]], ["del", "theorem", "evaluation_obj_obj", ["category_theory"]], ["mod", "def", "evaluation_uncurried", ["category_theory"]], ["del", "theorem", "evaluation_uncurried_map", ["category_theory"]], ["del", "theorem", "evaluation_uncurried_obj", ["category_theory"]], ["mod", "def", "prod", ["category_theory", "functor"]], ["del", "theorem", "prod_map", ["category_theory", "functor"]], ["del", "theorem", "prod_obj", ["category_theory", "functor"]], ["mod", "def", "prod", ["category_theory", "nat_trans"]], ["del", "theorem", "prod_app", ["category_theory", "nat_trans"]], ["mod", "def", "fst", ["category_theory", "prod"]], ["del", "theorem", "fst_map", ["category_theory", "prod"]], ["del", "theorem", "fst_obj", ["category_theory", "prod"]], ["mod", "def", "inl", ["category_theory", "prod"]], ["del", "theorem", "inl_map", ["category_theory", "prod"]], ["del", "theorem", "inl_obj", ["category_theory", "prod"]], ["mod", "def", "inr", ["category_theory", "prod"]], ["del", "theorem", "inr_map", ["category_theory", "prod"]], ["del", "theorem", "inr_obj", ["category_theory", "prod"]], ["mod", "def", "snd", ["category_theory", "prod"]], ["del", "theorem", "snd_map", ["category_theory", "prod"]], ["del", "theorem", "snd_obj", ["category_theory", "prod"]], ["mod", "def", "swap", ["category_theory", "prod"]], ["del", "theorem", "swap_map", ["category_theory", "prod"]], ["del", "theorem", "swap_obj", ["category_theory", "prod"]], ["mod", "def", "symmetry", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/sums/basic.lean", "newPath": "src/category_theory/sums/basic.lean", "changes": [["mod", "def", "inl_", ["category_theory", "sum"]], ["del", "theorem", "inl_map", ["category_theory", "sum"]], ["del", "theorem", "inl_obj", ["category_theory", "sum"]], ["mod", "def", "inr_", ["category_theory", "sum"]], ["del", "theorem", "inr_map", ["category_theory", "sum"]], ["del", "theorem", "inr_obj", ["category_theory", "sum"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "get_rest", ["list"]]]}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "get_rest", ["string"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "short_name1", []], ["add", "def", "specify1", ["specify"]], ["add", "def", "specify2", ["specify"]], ["add", "def", "specify3", ["specify"]], ["add", "def", "specify4", ["specify"]], ["add", "def", "specify5", ["specify"]]]}]}, {"timestamp": 1572795643, "sha": "a6ace342", "message": "feat(analysis/normed_space): Riesz's lemma (#1642)\n* fix(topology/metric_space/hausdorff_distance): fix typo\n* feat(analysis/normed_space): Riesz's Lemma\n* fix(analysis/normed_space): fix silly mistake in statement of riesz lemma\n* style(analysis/normed_space/riesz_lemma): variable names & indent\n* doc(analysis/normed_space/riesz_lemma): add attribution\n* doc(analysis/normed_space/riesz_lemma): fix module docstring style\n* style(analysis/normed_space/riesz_lemma): more style & documentation\n- recall statement in module header comment\n- typecast instead of unfold", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/riesz_lemma.lean", "changes": [["add", "theorem", "riesz_lemma", []]]}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["del", "theorem", "mem_iff_ind_dist_zero_of_closed", ["metric"]], ["add", "theorem", "mem_iff_inf_dist_zero_of_closed", ["metric"]]]}]}, {"timestamp": 1572607695, "sha": "9af7e5b5", "message": "refactor(linear_algebra/basic): use smul_right (#1640)\n* refactor(linear_algebra/basic): use smul_right\n* Update src/linear_algebra/basic.lean\nCo-Authored-By: Scott Morrison \n* Update src/linear_algebra/basic.lean\nCo-Authored-By: Scott Morrison ", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "bound", ["continuous_linear_map"]], ["del", "theorem", "scalar_prod_space_iso_norm", ["continuous_linear_map"]], ["add", "theorem", "smul_right_norm", ["continuous_linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "scalar_prod_space_iso", ["linear_map"]], ["mod", "theorem", "sum_apply", ["linear_map"]]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["del", "def", "scalar_prod_space_iso", ["continuous_linear_map"]], ["add", "def", "smul_right", ["continuous_linear_map"]]]}]}, {"timestamp": 1572578706, "sha": "1710fd8b", "message": "feat(lint): add priority test for instances that always apply (#1625)\n* feat(lint): add priority test for instances that always apply\nalso move a defn from coinductive_predicates to expr\nalso slightly refactor incorrect_def_lemma\n* update doc\n* add priorities to linters\nNow they are run in the order specified by the doc\n* always run tests in the extra set\neven when they are slow and is false\n* move some more declarations from coinductive_predicates to expr\nremove coinductive_predicates as import from some (but not all) files\n* reviewer comments\n* remove unsafe prefixes", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/meta/coinductive_predicates.lean", "newPath": "src/meta/coinductive_predicates.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}]}, {"timestamp": 1572571363, "sha": "5f17abcc", "message": "fix(tactic/elide): was untested and buggy. Fixed a few issues (#1638)\n* fix(tactic/elide): was untested and buggy. Fixed a few issues\n* Update tactics.lean\n* add copyright header\n* Update src/tactic/elide.lean\nCo-Authored-By: Rob Lewis ", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "def", "hidden", []]]}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1572565046, "sha": "df916232", "message": "chore(category_theory/whiskering): clean up (#1613)\n* chore(category_theory/whiskering): clean up\n* ugh, the stalks proofs are so fragile\n* fixes\n* minor\n* fix\n* fix", "changes": [{"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "op_app", ["category_theory", "nat_trans"]], ["add", "theorem", "op_id", ["category_theory", "nat_trans"]], ["del", "theorem", "unop_app", ["category_theory", "nat_trans"]], ["add", "theorem", "unop_id", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": [["del", "theorem", "app", ["category_theory", "whisker_left"]], ["mod", "def", "whisker_left", ["category_theory"]], ["del", "theorem", "app", ["category_theory", "whisker_right"]], ["mod", "def", "whisker_right", ["category_theory"]], ["mod", "def", "whiskering_left", ["category_theory"]], ["del", "theorem", "whiskering_left_map_app_app", ["category_theory"]], ["del", "theorem", "whiskering_left_obj_map", ["category_theory"]], ["del", "theorem", "whiskering_left_obj_obj", ["category_theory"]], ["mod", "def", "whiskering_right", ["category_theory"]], ["del", "theorem", "whiskering_right_map_app_app", ["category_theory"]], ["del", "theorem", "whiskering_right_obj_map", ["category_theory"]], ["del", "theorem", "whiskering_right_obj_obj", ["category_theory"]]]}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1572555785, "sha": "cd0bc32b", "message": "chore(data/set/finite): move defns up hierarchy; rename fintype_of_finset, card_fintype_of_finset (#1615)\n* chore(data/set/finite): move defns up hierarchy\n* get namespaces right\n* fixes\n* fix build", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "card_of_finset'", ["fintype"]], ["add", "theorem", "card_of_finset", ["fintype"]], ["add", "def", "of_finset", ["fintype"]], ["add", "theorem", "mem_to_finset", ["set"]], ["add", "theorem", "mem_to_finset_val", ["set"]], ["add", "def", "to_finset", ["set"]]]}, {"oldPath": "src/data/fintype/intervals.lean", "newPath": "src/data/fintype/intervals.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "theorem", "card_fintype_of_finset'", ["set"]], ["del", "theorem", "card_fintype_of_finset", ["set"]], ["del", "def", "fintype_of_finset", ["set"]], ["del", "theorem", "mem_to_finset", ["set"]], ["del", "theorem", "mem_to_finset_val", ["set"]], ["del", "def", "to_finset", ["set"]]]}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1572528264, "sha": "6b51787e", "message": "feat(order/conditionally_complete_lattice): add complete_linear_order instance for enat (#1633)", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "with_top_equiv_coe", ["enat"]], ["add", "theorem", "with_top_equiv_le", ["enat"]], ["add", "theorem", "with_top_equiv_lt", ["enat"]], ["add", "theorem", "with_top_equiv_symm_coe", ["enat"]], ["add", "theorem", "with_top_equiv_symm_le", ["enat"]], ["add", "theorem", "with_top_equiv_symm_lt", ["enat"]], ["add", "theorem", "with_top_equiv_symm_top", ["enat"]], ["add", "theorem", "with_top_equiv_symm_zero", ["enat"]], ["add", "theorem", "with_top_equiv_top", ["enat"]], ["add", "theorem", "with_top_equiv_zero", ["enat"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}]}, {"timestamp": 1572520833, "sha": "780cbc98", "message": "feat(tactic/simps): allow let-expressions (#1626)\n* feat(simps); allow let-expressions\n* Update src/meta/expr.lean\nCo-Authored-By: Rob Lewis ", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/simps.lean", "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": "test/simps.lean", "newPath": "test/simps.lean", "changes": [["add", "def", "let1", []], ["add", "def", "let2", []], ["add", "def", "let3", []], ["add", "def", "let4", []]]}]}, {"timestamp": 1572467466, "sha": "d43f7f9c", "message": "feat(.travis.yml): add linting to test stage (#1606)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}]}, {"timestamp": 1572456902, "sha": "aadfde68", "message": "feat(data/fintype): fintype.card_subtype_lt (#1635)\n* feat(data/fintype): fintype.card_subtype_lt\n* Update src/data/fintype.lean\nCo-Authored-By: Rob Lewis ", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "card_subtype_lt", ["fintype"]]]}]}, {"timestamp": 1572388486, "sha": "ca900815", "message": "feat(number_theory/sum_four_squares): every natural number is the sum of four square numbers (#1560)\n* feat(number_theory/sum_four_squares): every natural number is the sum of four square numbers\n* Johan's suggestions\n* some better parity proofs\n* fix silly lemmas in finite_fields\n* generalize a lemma\n* fix build\n* Update src/number_theory/sum_four_squares.lean\n* add docs in correct style", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_eq_multiset_prod", ["finset"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "map_int_cast", ["is_ring_hom"]], ["add", "theorem", "map_int_cast", ["ring_hom"]]]}, {"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["add", "theorem", "even_neg", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "map_nat_cast", ["is_semiring_hom"]], ["add", "theorem", "map_nat_cast", ["ring_hom"]]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["add", "theorem", "sum_two_squares", ["char_p"]], ["add", "theorem", "sum_two_squares", ["zmodp"]]]}, {"oldPath": null, "newPath": "src/number_theory/sum_four_squares.lean", "changes": [["add", "theorem", "exists_sum_two_squares_add_one_eq_k", ["int"]], ["add", "theorem", "sum_two_squares_of_two_mul_sum_two_squares", ["int"]], ["add", "theorem", "sum_four_squares", ["nat"]]]}]}, {"timestamp": 1572340973, "sha": "6030ff0a", "message": "chore(category_theory): speed-up monoidal.of_has_finite_products (#1616)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "associator_naturality", ["category_theory", "limits", "coprod"]], ["add", "theorem", "pentagon", ["category_theory", "limits", "coprod"]], ["add", "theorem", "triangle", ["category_theory", "limits", "coprod"]], ["add", "theorem", "associator_naturality", ["category_theory", "limits", "prod"]], ["add", "theorem", "pentagon", ["category_theory", "limits", "prod"]], ["add", "theorem", "triangle", ["category_theory", "limits", "prod"]]]}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": []}]}, {"timestamp": 1572333376, "sha": "e6e25d06", "message": "cleanup(order|string) (#1629)\nmove data.string to data.string.basic\nremove classical.decidable_linear_order. was duplicate of classical.DLO", "changes": [{"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/string.lean", "newPath": "src/data/string/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/pilex.lean", "newPath": "src/order/pilex.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}]}, {"timestamp": 1572325510, "sha": "b9e3dbba", "message": "feat(rat): give Q-algebra structure on field (#1628)\nalso move around some declarations in rat.cast\nthe only new declaration in that file is is_ring_hom_cast", "changes": [{"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["mod", "theorem", "cast_add", ["rat"]], ["mod", "theorem", "cast_bit0", ["rat"]], ["mod", "theorem", "cast_bit1", ["rat"]], ["mod", "theorem", "cast_mul", ["rat"]], ["mod", "theorem", "cast_sub", ["rat"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1572318231, "sha": "b5b674c2", "message": "fix(*): use has_coe_t (#1627)", "changes": [{"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1572309769, "sha": "0ea3dfe4", "message": "feat(tactic/rcases): transport the `cases h : e` syntax to `rcases` (#1611)\n* Update rcases.lean\n* Update rcases.lean\n* Update rcases.lean\n* Update lift.lean\n* Update rcases.lean\n* Update tactics.md\n* Update rcases.lean", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1572297833, "sha": "7a8f53e1", "message": "feat(tactic/lint): silent linting (#1580)\n* feat(tactic/lint): silent linting\n* doc(tactic/lint): doc silent linting and nolint features\n* fix test\n* change notation for silent linting\n* style(tactic/lint): remove commented lines", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/lint.lean", "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "test/lint.lean", "newPath": "test/lint.lean", "changes": []}]}, {"timestamp": 1572280138, "sha": "94e368c5", "message": "chore(ring_theory/algebra): add docstring to algebra.comap and remove unused instances (#1624)\n* doc(ring_theory/algebra): add docstring to algebra.comap\n* Update algebra.lean", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "def", "comap", ["algebra"]]]}]}, {"timestamp": 1572258890, "sha": "c2e81ddd", "message": "fix(tactic/omega): fix omega bugs, add docstring (closes #1484) (#1620)\n* Fix omega bugs, add docstring\n* style(tactic/omega/main): trivial cleaning", "changes": [{"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/main.lean", "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1572195913, "sha": "1fa03c29", "message": "feat(linear_algebra/basic): define algebra structure on endomorphisms of module (#1618)\n* feat(linear_algebra/basic): define algebra structure on endomorphisms of module\n* Update algebra.lean", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1572159997, "sha": "89ece147", "message": "fix(data/mv_polynomial): generalize equivs to comm_semiring (#1621)\nThis apparently makes the elaborator's job a lot easier, and\nreduces the compile time of the whole module by a factor of 3.", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "def", "mv_polynomial_equiv_mv_polynomial", ["mv_polynomial"]], ["mod", "def", "ring_equiv_congr", ["mv_polynomial"]]]}]}, {"timestamp": 1572143754, "sha": "8a45d98f", "message": "chore(category_theory): remove superfluous lemma (#1614)", "changes": [{"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["del", "theorem", "assoc_symm", ["category_theory", "category"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}]}, {"timestamp": 1572094703, "sha": "8eaf478a", "message": "feat(linear_algebra/basis): Dedekind's linear independence of characters (#1595)\n* feat(linear_algebra/basis): Dedekind's linear independence of characters\n* feat(linear_algebra/basis): generalize independence of characters to integral domains\n* chore(linear_algebra/basis): change proofs\n* commenting the proof", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "linear_independent_iff'", []], ["add", "theorem", "linear_independent_monoid_hom", []]]}]}, {"timestamp": 1572085059, "sha": "b9798dc7", "message": "feat(data/nat): a lemma about min_fac (#1603)\n* feat(data/nat): a lemma about min_fac\n* feat(data/nat): a lemma about min_fac\n* use Rob's proof\n* fix\n* let's play golf\n* newline\n* use Chris' proof\n* cleaning up\n* rename per Chris' suggestions", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "eq_of_dvd_of_div_eq_one", ["nat"]], ["del", "theorem", "eq_of_dvd_quot_one", ["nat"]], ["add", "theorem", "eq_zero_of_dvd_of_div_eq_zero", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "min_fac_le_div", ["nat"]]]}]}, {"timestamp": 1572078239, "sha": "b46f5b04", "message": "feat(data/set/intervals): fintype instances for ℕ and ℤ (#1602)\n* starting on fintype instances for Icos\n* finishing fintypes\n* minor\n* move file\n* oops\n* redone\n* formatting\n* cleaning up", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "mem", ["finset", "Ico_ℤ"]], ["add", "def", "Ico_ℤ", ["finset"]]]}, {"oldPath": null, "newPath": "src/data/fintype/intervals.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "to_nat_sub_of_le", ["int"]]]}]}, {"timestamp": 1572018372, "sha": "6ee8bf97", "message": "refactor(data/rat/meta): rename to meta_defs (#1612)\n* refactor(data/rat/meta): rename to meta_defs\n* fix build", "changes": [{"oldPath": "src/data/rat/default.lean", "newPath": "src/data/rat/default.lean", "changes": []}, {"oldPath": "src/data/rat/meta.lean", "newPath": "src/data/rat/meta_defs.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/rat.lean", "newPath": "test/rat.lean", "changes": []}]}, {"timestamp": 1571951605, "sha": "9db43a5f", "message": "chore(data/nat/basic): remove pos_iff_ne_zero' (#1610)\nThis used to be different from pos_iff_ne_zero because the latter\nwas phrased in terms of `n > 0`, not `0 < n`. Since #1436 they\nare the same.", "changes": [{"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["del", "theorem", "pos_iff_ne_zero'", ["nat"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1571937081, "sha": "151bcbe2", "message": "feat(meta/expr,data/rat/basic): add rat.reflect (#1565)\n* feat(meta/expr,data/rat/basic): add rat.reflect\n* doc(meta/expr,data/rat/basic): clarify type restrictions for mk_numeral functions\n* fix name clash with norm_num functions\n* fix doc string to expr.of_rat\n* Update src/data/rat/basic.lean\nCo-Authored-By: Reid Barton \n* fix declaration and move to new file\n* tests\n* fix import\n* protect rat.reflect\n* to_pos_rat --> to_nonneg_rat\n* correctly test rat.reflect", "changes": [{"oldPath": "src/data/rat/default.lean", "newPath": "src/data/rat/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rat/meta.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": null, "newPath": "test/rat.lean", "changes": []}]}, {"timestamp": 1571929715, "sha": "3f8a492b", "message": "chore(category_theory): replace some @[simp] with @[simps] (#1605)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "def", "associator", ["category_theory", "limits", "coprod"]], ["mod", "def", "braiding", ["category_theory", "limits", "coprod"]], ["mod", "def", "left_unitor", ["category_theory", "limits", "coprod"]], ["mod", "def", "right_unitor", ["category_theory", "limits", "coprod"]], ["mod", "def", "associator", ["category_theory", "limits", "prod"]], ["mod", "def", "braiding", ["category_theory", "limits", "prod"]], ["mod", "def", "left_unitor", ["category_theory", "limits", "prod"]], ["mod", "def", "right_unitor", ["category_theory", "limits", "prod"]]]}]}, {"timestamp": 1571924891, "sha": "b1f44ba1", "message": "chore(group_theory/free_group,order/zorn): rename zorn.zorn and sum.sum (#1604)\n* chore(order/zorn): rename zorn.zorn\n* chore(group_theory/free_group): rename sum.sum\n* chore(group_theory/free_group,order/zorn): remove nolint", "changes": [{"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["add", "theorem", "mul", ["free_group", "sum"]], ["del", "theorem", "sum", ["free_group", "sum"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["add", "theorem", "exists_maximal_of_chains_bounded", ["zorn"]], ["del", "theorem", "zorn", ["zorn"]]]}]}, {"timestamp": 1571916379, "sha": "5da754c9", "message": "fix(tactic/solve_by_elim): parameter parsing (#1591)\n* fix(tactic/solve_by_elim): parameter parsing\n* revert accidental commenting out\n* doc comments for solve_by_elim\n* fix build", "changes": [{"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}, {"oldPath": "test/suggest.lean", "newPath": "test/suggest.lean", "changes": []}]}, {"timestamp": 1571898495, "sha": "4b9cdf44", "message": "chore(*): pass dup_namespace and def_lemma lint tests (#1599)\n* chore(*): pass dup_namespace and def_lemma lint tests\n* Update src/group_theory/free_group.lean\nCo-Authored-By: Johan Commelin \n* Update src/number_theory/pell.lean\nCo-Authored-By: Johan Commelin \n* Update src/order/lattice.lean\nCo-Authored-By: Johan Commelin \n* Update src/set_theory/ordinal.lean\nCo-Authored-By: Johan Commelin \n* Update src/set_theory/ordinal.lean\nCo-Authored-By: Johan Commelin \n* Update src/tactic/transfer.lean\nCo-Authored-By: Johan Commelin \n* Update src/group_theory/free_group.lean\nCo-Authored-By: Reid Barton \n* using nolint", "changes": [{"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["mod", "theorem", "sum", ["free_group", "sum"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "finite_dimensional_of_finite_basis", ["finite_dimensional"]], ["del", "def", "finite_dimensional_of_finite_basis", ["finite_dimensional"]]]}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "def", "pell", ["pell"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "ext", ["lattice"]], ["del", "theorem", "ext", ["lattice", "lattice"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["mod", "theorem", "zorn", ["zorn"]]]}, {"oldPath": "src/ring_theory/algebraic.lean", "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "theorem", "is_algebraic_iff", ["subalgebra"]], ["del", "def", "is_algebraic_iff", ["subalgebra"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "def", "ord_eq_min", ["cardinal"]], ["mod", "def", "div_def", ["ordinal"]]]}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": [["add", "theorem", "reassoc_of", ["category_theory"]], ["del", "def", "reassoc_of", ["category_theory"]]]}, {"oldPath": "src/tactic/transfer.lean", "newPath": "src/tactic/transfer.lean", "changes": []}]}, {"timestamp": 1571885386, "sha": "31c73c1d", "message": "feat(data/multiset): map_eq_map_of_bij_of_nodup (#1590)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "eq_zero_iff_forall_not_mem", ["multiset"]], ["add", "theorem", "map_eq_map_of_bij_of_nodup", ["multiset"]]]}]}, {"timestamp": 1571878038, "sha": "08977be6", "message": "feat(algebra/semiconj): define `semiconj_by` and some operations (#1576)\n* feat(algebra/semiconj): define `semiconj_by` and some operations\nAlso rewrite `algebra/commute` to reuse results from `algebra/semiconj`.\n* Some `@[simp]` attributes\n* Fixes by @rwbarton, more docs\n* Add two more constructors", "changes": [{"oldPath": "src/algebra/commute.lean", "newPath": "src/algebra/commute.lean", "changes": [["mod", "theorem", "add_left", ["commute"]], ["mod", "theorem", "add_right", ["commute"]], ["mod", "theorem", "cast_nat_left", ["commute"]], ["mod", "theorem", "cast_nat_right", ["commute"]], ["mod", "theorem", "gpow_gpow", ["commute"]], ["mod", "theorem", "gpow_gpow_self", ["commute"]], ["mod", "theorem", "gpow_left", ["commute"]], ["mod", "theorem", "gpow_right", ["commute"]], ["mod", "theorem", "gsmul_gsmul", ["commute"]], ["mod", "theorem", "gsmul_left", ["commute"]], ["mod", "theorem", "gsmul_right", ["commute"]], ["mod", "theorem", "gsmul_self", ["commute"]], ["mod", "theorem", "inv_inv", ["commute"]], ["mod", "theorem", "inv_inv_iff", ["commute"]], ["mod", "theorem", "inv_left", ["commute"]], ["mod", "theorem", "inv_left_iff", ["commute"]], ["mod", "theorem", "inv_right", ["commute"]], ["mod", "theorem", "inv_right_iff", ["commute"]], ["mod", "theorem", "list_prod_left", ["commute"]], ["mod", "theorem", "list_prod_right", ["commute"]], ["mod", "theorem", "neg_left", ["commute"]], ["mod", "theorem", "neg_left_iff", ["commute"]], ["mod", "theorem", "neg_one_left", ["commute"]], ["mod", "theorem", "neg_one_right", ["commute"]], ["mod", "theorem", "neg_right", ["commute"]], ["mod", "theorem", "neg_right_iff", ["commute"]], ["mod", "theorem", "one_left", ["commute"]], ["mod", "theorem", "one_right", ["commute"]], ["mod", "theorem", "pow_pow", ["commute"]], ["mod", "theorem", "pow_right", ["commute"]], ["mod", "theorem", "self_gsmul", ["commute"]], ["mod", "theorem", "self_gsmul_gsmul", ["commute"]], ["mod", "theorem", "self_smul", ["commute"]], ["mod", "theorem", "self_smul_smul", ["commute"]], ["mod", "theorem", "smul_left", ["commute"]], ["mod", "theorem", "smul_right", ["commute"]], ["mod", "theorem", "smul_self", ["commute"]], ["mod", "theorem", "smul_smul", ["commute"]], ["mod", "theorem", "sub_left", ["commute"]], ["mod", "theorem", "sub_right", ["commute"]], ["mod", "theorem", "units_coe", ["commute"]], ["add", "theorem", "units_coe_iff", ["commute"]], ["mod", "theorem", "units_inv_left", ["commute"]], ["mod", "theorem", "units_inv_right", ["commute"]], ["add", "theorem", "units_of_coe", ["commute"]], ["mod", "theorem", "zero_left", ["commute"]], ["mod", "theorem", "zero_right", ["commute"]], ["mod", "def", "commute", []]]}, {"oldPath": null, "newPath": "src/algebra/semiconj.lean", "changes": [["add", "theorem", "add_left", ["semiconj_by"]], ["add", "theorem", "add_right", ["semiconj_by"]], ["add", "theorem", "cast_nat_left", ["semiconj_by"]], ["add", "theorem", "cast_nat_right", ["semiconj_by"]], ["add", "theorem", "conj_mk", ["semiconj_by"]], ["add", "theorem", "gpow_right", ["semiconj_by"]], ["add", "theorem", "gsmul_gsmul", ["semiconj_by"]], ["add", "theorem", "gsmul_left", ["semiconj_by"]], ["add", "theorem", "gsmul_right", ["semiconj_by"]], ["add", "theorem", "inv_inv_symm", ["semiconj_by"]], ["add", "theorem", "inv_inv_symm_iff", ["semiconj_by"]], ["add", "theorem", "inv_right", ["semiconj_by"]], ["add", "theorem", "inv_right_iff", ["semiconj_by"]], ["add", "theorem", "inv_symm_left", ["semiconj_by"]], ["add", "theorem", "inv_symm_left_iff", ["semiconj_by"]], ["add", "theorem", "mul_left", ["semiconj_by"]], ["add", "theorem", "mul_right", ["semiconj_by"]], ["add", "theorem", "neg_left", ["semiconj_by"]], ["add", "theorem", "neg_left_iff", ["semiconj_by"]], ["add", "theorem", "neg_one_left", ["semiconj_by"]], ["add", "theorem", "neg_one_right", ["semiconj_by"]], ["add", "theorem", "neg_right", ["semiconj_by"]], ["add", "theorem", "neg_right_iff", ["semiconj_by"]], ["add", "theorem", "one_left", ["semiconj_by"]], ["add", "theorem", "one_right", ["semiconj_by"]], ["add", "theorem", "pow_right", ["semiconj_by"]], ["add", "theorem", "smul_left", ["semiconj_by"]], ["add", "theorem", "smul_right", ["semiconj_by"]], ["add", "theorem", "smul_smul", ["semiconj_by"]], ["add", "theorem", "sub_left", ["semiconj_by"]], ["add", "theorem", "sub_right", ["semiconj_by"]], ["add", "theorem", "units_coe", ["semiconj_by"]], ["add", "theorem", "units_coe_iff", ["semiconj_by"]], ["add", "theorem", "units_conj_mk", ["semiconj_by"]], ["add", "theorem", "units_gpow_right", ["semiconj_by"]], ["add", "theorem", "units_inv_right", ["semiconj_by"]], ["add", "theorem", "units_inv_right_iff", ["semiconj_by"]], ["add", "theorem", "units_inv_symm_left", ["semiconj_by"]], ["add", "theorem", "units_inv_symm_left_iff", ["semiconj_by"]], ["add", "theorem", "units_of_coe", ["semiconj_by"]], ["add", "theorem", "zero_left", ["semiconj_by"]], ["add", "theorem", "zero_right", ["semiconj_by"]], ["add", "def", "semiconj_by", []]]}]}, {"timestamp": 1571872272, "sha": "e2a8e639", "message": "feat(geometry/manifold): improvements for smooth manifolds (#1593)\n* feat(geometry/manifold): improvements to smooth manifolds\n* fix\n* better definition for half-space\n* fix docstring\n* address comments\n* more comments", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "add", ["times_cont_diff"]], ["add", "theorem", "comp_times_cont_diff_on", ["times_cont_diff"]], ["add", "theorem", "neg", ["times_cont_diff"]], ["add", "theorem", "sub", ["times_cont_diff"]], ["add", "theorem", "add", ["times_cont_diff_on"]], ["add", "theorem", "neg", ["times_cont_diff_on"]], ["add", "theorem", "sub", ["times_cont_diff_on"]], ["add", "theorem", "times_cont_diff_on_const", []]]}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": [["del", "def", "groupoid_of_pregroupoid", []], ["add", "theorem", "has_groupoid_of_pregroupoid", []], ["add", "theorem", "mem_pregroupoid_of_eq_on_source", []], ["add", "def", "groupoid", ["pregroupoid"]]]}, {"oldPath": null, "newPath": "src/geometry/manifold/real_instances.lean", "changes": [["add", "def", "Icc_left_chart", []], ["add", "def", "Icc_right_chart", []], ["add", "def", "euclidean_half_space", []], ["add", "def", "euclidean_quadrant", []], ["add", "def", "euclidean_space", []], ["add", "theorem", "findim_euclidean_space", []], ["add", "def", "lt_class", []], ["add", "def", "model_with_corners_euclidean_half_space", []], ["add", "def", "model_with_corners_euclidean_quadrant", []], ["add", "theorem", "range_half_space", []], ["add", "theorem", "range_quadrant", []]]}, {"oldPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["del", "def", "euclidean_half_space", []], ["del", "def", "euclidean_space", []], ["del", "def", "model_with_corners_euclidean_half_space", []], ["add", "theorem", "of_set_mem_times_cont_diff_groupoid", []], ["del", "theorem", "range_half_space", []], ["add", "theorem", "symm_trans_mem_times_cont_diff_groupoid", []], ["mod", "def", "times_cont_diff_groupoid", []], ["mod", "theorem", "times_cont_diff_groupoid_le", []], ["mod", "theorem", "times_cont_diff_groupoid_zero_eq", []]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "findim_fin_fun", ["finite_dimensional"]], ["add", "theorem", "findim_fintype_fun_eq_card", ["finite_dimensional"]]]}]}, {"timestamp": 1571863694, "sha": "b433afa7", "message": "feat(algebra/big_operators): sum_ite (#1598)\n* feat(algebra/big_operators): sum_ite\nrename the current `sum_ite` to `sum_ite_eq` and add a more general version\n* Update src/algebra/big_operators.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_ite", ["finset"]], ["add", "theorem", "prod_ite_eq", ["finset"]]]}]}, {"timestamp": 1571862532, "sha": "36dfcfcd", "message": "doc(topology/topological_fiber_bundle): documentation improvements (#1594)\n* feat(topology/topological_fiber_bundle): improvements\n* minor fixes", "changes": [{"oldPath": "src/topology/topological_fiber_bundle.lean", "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["mod", "def", "base", ["topological_fiber_bundle_core"]], ["mod", "def", "fiber", ["topological_fiber_bundle_core"]], ["mod", "def", "index", ["topological_fiber_bundle_core"]], ["mod", "def", "total_space", ["topological_fiber_bundle_core"]]]}]}, {"timestamp": 1571850343, "sha": "d214c61c", "message": "feat(data/nat/modeq): div_mod_eq_mod_mul_div (#1597)", "changes": [{"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": [["add", "theorem", "div_mod_eq_mod_mul_div", ["nat"]]]}]}, {"timestamp": 1571841825, "sha": "36f71138", "message": "fix(suggest): focus1 at the correct moment (#1592)", "changes": [{"oldPath": "src/tactic/suggest.lean", "newPath": "src/tactic/suggest.lean", "changes": []}, {"oldPath": "test/suggest.lean", "newPath": "test/suggest.lean", "changes": []}]}, {"timestamp": 1571835043, "sha": "24dd80b0", "message": "chore(src/data/mv_polynomial): doc comments and removing unused arguments (#1585)\n* chore(src/data/mv_polynomial): doc comments and removing unused arguments\n* Update src/data/mv_polynomial.lean", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["del", "def", "coe", ["mv_polynomial", "tmp"]]]}]}, {"timestamp": 1571827709, "sha": "079e6ec9", "message": "feat(analysis/normed_space): norms on ℤ and ℚ (#1570)\n* feat(analysis/normed_space): norms on ℤ and ℚ\n* Add some `elim_cast` lemmas\n* Add `@[simp]`, thanks @robertylewis\nCo-Authored-By: Rob Lewis ", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_cast_rat", ["int"]], ["add", "theorem", "norm_cast_real", ["int"]], ["add", "theorem", "norm_cast_real", ["rat"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "dist_cast_rat", ["int"]], ["add", "theorem", "dist_cast_real", ["int"]], ["add", "theorem", "dist_eq", ["int"]], ["add", "theorem", "dist_cast", ["rat"]]]}]}, {"timestamp": 1571817035, "sha": "ee5518c2", "message": "fix(category_theory/adjunctions): fix deterministic timeouts (#1586)", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["add", "def", "cocones_iso_component_hom", ["category_theory", "adjunction"]], ["add", "def", "cocones_iso_component_inv", ["category_theory", "adjunction"]], ["add", "def", "cones_iso_component_hom", ["category_theory", "adjunction"]], ["add", "def", "cones_iso_component_inv", ["category_theory", "adjunction"]], ["add", "def", "functoriality_counit'", ["category_theory", "adjunction"]], ["add", "def", "functoriality_counit", ["category_theory", "adjunction"]], ["add", "def", "functoriality_left_adjoint", ["category_theory", "adjunction"]], ["add", "def", "functoriality_right_adjoint", ["category_theory", "adjunction"]], ["add", "def", "functoriality_unit'", ["category_theory", "adjunction"]], ["add", "def", "functoriality_unit", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}]}, {"timestamp": 1571790388, "sha": "5722ee88", "message": "refactor(data/finset): restate disjoint_filter (#1583)\n* refactor(data/finset): restate disjoint_filter\n* fix build\n* fix build", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1571761555, "sha": "31906d88", "message": "chore(algebra/category/CommRing/limits): fix typo, remove private (#1584)\n* chore(algebra/category/CommRing/limits): fix typo, remove private\n* Update src/algebra/category/CommRing/limits.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebra/category/CommRing/limits.lean\n* Update src/algebra/category/CommRing/limits.lean\n* bleh\n* Update src/algebra/category/CommRing/limits.lean", "changes": [{"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["add", "def", "limit", ["CommRing", "CommRing_has_limits"]], ["add", "def", "limit_is_limit", ["CommRing", "CommRing_has_limits"]]]}]}, {"timestamp": 1571754651, "sha": "e8bdb05e", "message": "feat(algebra/group): conversion between `→*` and `→+` (#1569)\n* feat(algebra/group): conversion between `→*` and `→+`\n* docs\n* Rename to allow use of projection notation", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": [["add", "def", "to_multiplicative", ["add_monoid_hom"]], ["add", "def", "to_additive", ["monoid_hom"]]]}]}, {"timestamp": 1571746924, "sha": "93b17864", "message": "feat(archive): add proof of sensitivity conjecture (#1553)\n* feat(*): various lemmas from the sensitivity project\n* fix proof broken by nonterminal simp\n* Update src/linear_algebra/dual.lean\nCo-Authored-By: Johan Commelin \n* lint dual.lean\n* remove decidable_mem_of_fintype instance\nthis leads to loops with `subtype.fintype` under the right decidable_eq assumptions\n* dual_lc is invalid simp lemma\n* fix namespace\n* add extra lemma\n* feat(archive): add proof of sensitivity conjecture\n* suggestions from Johan\n* undo removed whitespace\n* update header", "changes": [{"oldPath": null, "newPath": "archive/sensitivity.lean", "changes": [["add", "theorem", "adj_iff_proj_adj", ["Q"]], ["add", "theorem", "adj_iff_proj_eq", ["Q"]], ["add", "theorem", "symm", ["Q", "adjacent"]], ["add", "def", "adjacent", ["Q"]], ["add", "theorem", "card", ["Q"]], ["add", "theorem", "not_adjacent_zero", ["Q"]], ["add", "theorem", "succ_n_eq", ["Q"]], ["add", "def", "add_comm_monoid", ["V"]], ["add", "def", "add_comm_semigroup", ["V"]], ["add", "def", "has_add", ["V"]], ["add", "def", "has_scalar", ["V"]], ["add", "def", "module", ["V"]], ["add", "def", "V", []], ["add", "theorem", "dim_V", []], ["add", "def", "dual_pair_e_ε", []], ["add", "theorem", "duality", []], ["add", "theorem", "e_zero_apply", []], ["add", "theorem", "epsilon_total", []], ["add", "theorem", "exists_eigenvalue", []], ["add", "theorem", "f_image_g", []], ["add", "theorem", "f_matrix", []], ["add", "theorem", "f_squared", []], ["add", "theorem", "f_succ_apply", []], ["add", "theorem", "f_zero", []], ["add", "theorem", "findim_V", []], ["add", "theorem", "g_apply", []], ["add", "theorem", "g_injective", []], ["add", "theorem", "huang_degree_theorem", []], ["add", "def", "π", []]]}]}, {"timestamp": 1571733367, "sha": "1b4d1eaa", "message": "chore(algebra/category/*/colimits): remove unnecessary projections (#1588)\n* refactor(category_theory,algebra/category): make algebraic categories not [reducible]\nAdapted from part of #1438.\n* Update src/algebra/category/CommRing/basic.lean\nCo-Authored-By: Scott Morrison \n* adding missing forget2 instances\n* Converting Reid's comment to a [Note]\n* adding examples testing coercions\n* chore(algebra/category/*/colimits): remove unnecessary projections", "changes": [{"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": [["mod", "def", "cocone_fun", ["CommRing", "colimits"]]]}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": [["mod", "def", "cocone_fun", ["Mon", "colimits"]]]}]}, {"timestamp": 1571726536, "sha": "2b98d47a", "message": "feat(category_theory): add `reassoc` annotations (#1558)\n* feat(category_theory): add `reassoc` annotations\n* Update reassoc_axiom.lean\n* Update src/tactic/reassoc_axiom.lean\nCo-Authored-By: Scott Morrison \n* Update src/tactic/reassoc_axiom.lean\nCo-Authored-By: Scott Morrison \n* Update src/tactic/reassoc_axiom.lean\nCo-Authored-By: Scott Morrison \n* Update src/tactic/reassoc_axiom.lean\n* Update src/tactic/reassoc_axiom.lean\n* Update reassoc_axiom.lean\n* Update tactics.lean\n* Update tactics.md\n* Update reassoc_axiom.lean", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "theorem", "w", ["category_theory", "over"]]]}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/tactic/reassoc_axiom.lean", "newPath": "src/tactic/reassoc_axiom.lean", "changes": [["add", "def", "reassoc_of", ["category_theory"]], ["add", "def", "calculated_Prop", ["tactic"]]]}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1571719059, "sha": "1741a1d6", "message": "feat(data/nat/basic): division inequalities (#1579)\n* feat(data/nat/basic): division inequalities\n* whitespace\n* fix\n* shorten proof", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_mul_div_le_div", ["nat"]], ["add", "theorem", "mul_div_le_mul_div_assoc", ["nat"]]]}]}, {"timestamp": 1571711389, "sha": "c9ba7a5c", "message": "refactor(category_theory,algebra/category): make algebraic categories not [reducible] (#1491)\n* refactor(category_theory,algebra/category): make algebraic categories not [reducible]\nAdapted from part of #1438.\n* Update src/algebra/category/CommRing/basic.lean\nCo-Authored-By: Scott Morrison \n* adding missing forget2 instances\n* Converting Reid's comment to a [Note]\n* adding examples testing coercions", "changes": [{"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["del", "theorem", "comp_eq", ["CommRing"]], ["del", "theorem", "forget_map_eq_coe", ["CommRing"]], ["del", "theorem", "forget_obj_eq_coe", ["CommRing"]], ["del", "theorem", "id_eq", ["CommRing"]], ["mod", "def", "CommRing", []], ["mod", "def", "CommSemiRing", []], ["mod", "def", "Ring", []], ["mod", "def", "SemiRing", []]]}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group.lean", "changes": [["mod", "def", "CommGroup", []], ["mod", "def", "Group", []]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["mod", "def", "of", ["CommMon"]], ["mod", "def", "CommMon", []]]}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category/basic.lean", "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["add", "theorem", "coe_comp", ["category_theory"]], ["add", "theorem", "coe_id", ["category_theory"]], ["add", "def", "has_coe_to_fun", ["category_theory", "concrete_category"]], ["add", "def", "has_coe_to_sort", ["category_theory", "concrete_category"]], ["add", "theorem", "forget_map_eq_coe", ["category_theory"]], ["add", "theorem", "forget_obj_eq_coe", ["category_theory"]]]}, {"oldPath": "src/category_theory/concrete_category/bundled.lean", "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": [["mod", "def", "map", ["category_theory", "bundled"]]]}, {"oldPath": "src/category_theory/concrete_category/bundled_hom.lean", "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": [["del", "theorem", "coe_comp", ["category_theory", "bundled_hom"]], ["del", "theorem", "coe_id", ["category_theory", "bundled_hom"]], ["del", "def", "full_subcategory_has_forget₂", ["category_theory", "bundled_hom"]], ["del", "def", "has_coe_to_fun", ["category_theory", "bundled_hom"]]]}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": [["mod", "def", "induced_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["del", "theorem", "naturality_bundled", ["category_theory", "limits", "cocone"]], ["add", "theorem", "naturality_concrete", ["category_theory", "limits", "cocone"]], ["del", "theorem", "naturality_bundled", ["category_theory", "limits", "cone"]], ["add", "theorem", "naturality_concrete", ["category_theory", "limits", "cone"]]]}]}, {"timestamp": 1571705839, "sha": "340178d8", "message": "feat(data/finset): inj_on_of_surj_on_of_card_le (#1578)\n* feat(data/finset): inj_on_of_surj_on_of_card_le\n* Type ascriptions\n* function namespace", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "inj_on_of_surj_on_of_card_le", ["finset"]]]}]}, {"timestamp": 1571698627, "sha": "39092ab0", "message": "feat(*): various lemmas from the sensitivity project (#1550)\n* feat(*): various lemmas from the sensitivity project\n* fix proof broken by nonterminal simp\n* Update src/linear_algebra/dual.lean\nCo-Authored-By: Johan Commelin \n* lint dual.lean\n* remove decidable_mem_of_fintype instance\nthis leads to loops with `subtype.fintype` under the right decidable_eq assumptions\n* dual_lc is invalid simp lemma\n* fix namespace\n* add extra lemma\n* fix sum_const\n* remove unnecessary dec_eq assumptions\n* remove decidable_eq assumptions\n* document dual.lean\n* use classical locale\n* remove some unnecessary includes\n* remove an unused variable\n* Update src/linear_algebra/dual.lean\n* fixing a doc comment", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "sum_const'", ["finset"]], ["add", "theorem", "smul_eq_smul", ["module"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "mul_ite", []]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_max", ["fintype"]], ["add", "def", "decidable_mem_of_fintype", ["set"]], ["add", "theorem", "to_finset_card", ["set"]], ["add", "theorem", "to_finset_inter", ["set"]]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "def", "coeffs", ["dual_pair"]], ["add", "theorem", "coeffs_apply", ["dual_pair"]], ["add", "theorem", "coeffs_lc", ["dual_pair"]], ["add", "theorem", "decomposition", ["dual_pair"]], ["add", "theorem", "dual_lc", ["dual_pair"]], ["add", "theorem", "eq_dual", ["dual_pair"]], ["add", "theorem", "is_basis", ["dual_pair"]], ["add", "def", "lc", ["dual_pair"]], ["add", "theorem", "mem_of_mem_span", ["dual_pair"]], ["add", "structure", "dual_pair", []], ["mod", "theorem", "to_dual_to_dual", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "dim_eq_card", ["finite_dimensional"]], ["add", "theorem", "fg_of_finite_basis", ["finite_dimensional"]], ["add", "def", "finite_dimensional_of_finite_basis", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "map_finsupp_total", ["linear_map"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "nat_cast_pow", ["cardinal"]]]}]}, {"timestamp": 1571690944, "sha": "96ebf8cc", "message": "docs(README): Remove Patrick from the maintainer list.", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1571670744, "sha": "6cf3d040", "message": "fix(algebra/group/hom): Fix spurrious arguments (#1581)\nThis bug was introduced in eb230d3b48f4da49b", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}]}, {"timestamp": 1571668496, "sha": "f19dbf29", "message": "feat(geometric/manifold): smooth manifolds (#1555)\n* smooth manifolds\n* fix docstrings\n* update docstring\n* remove out_param", "changes": [{"oldPath": null, "newPath": "src/geometry/manifold/smooth_manifold_with_corners.lean", "changes": [["add", "def", "euclidean_half_space", []], ["add", "def", "euclidean_space", []], ["add", "theorem", "image", ["model_with_corners"]], ["add", "def", "prod", ["model_with_corners"]], ["add", "def", "tangent", ["model_with_corners"]], ["add", "structure", "model_with_corners", []], ["add", "def", "model_with_corners_euclidean_half_space", []], ["add", "theorem", "model_with_corners_inv_fun_comp", []], ["add", "theorem", "model_with_corners_left_inv", []], ["add", "theorem", "model_with_corners_right_inv", []], ["add", "def", "model_with_corners_self", []], ["add", "theorem", "model_with_corners_self_local_equiv", []], ["add", "theorem", "model_with_corners_target", []], ["add", "theorem", "range_half_space", []], ["add", "def", "times_cont_diff_groupoid", []], ["add", "theorem", "times_cont_diff_groupoid_le", []], ["add", "theorem", "times_cont_diff_groupoid_zero_eq", []]]}]}, {"timestamp": 1571661570, "sha": "f52e952e", "message": "feat(data/finset): define `finset.Ico.subset_iff` (#1574)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "subset_iff", ["finset", "Ico"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_of_pred_lt", ["nat"]]]}]}, {"timestamp": 1571653128, "sha": "a4bbbdea", "message": "feat(topology/topological_fiber_bundle): topological fiber bundles (#1421)\n* feat(topology/topological_fiber_bundle): topological fiber bundles\n* better definition of fiber bundles", "changes": [{"oldPath": null, "newPath": "src/topology/topological_fiber_bundle.lean", "changes": [["add", "theorem", "continuous_at_proj", ["bundle_trivialization"]], ["add", "structure", "bundle_trivialization", []], ["add", "theorem", "continuous_proj", ["is_topological_fiber_bundle"]], ["add", "theorem", "is_open_map_proj", ["is_topological_fiber_bundle"]], ["add", "def", "is_topological_fiber_bundle", []], ["add", "theorem", "is_topological_fiber_bundle_fst", []], ["add", "theorem", "is_topological_fiber_bundle_snd", []], ["add", "def", "base", ["topological_fiber_bundle_core"]], ["add", "theorem", "continuous_proj", ["topological_fiber_bundle_core"]], ["add", "def", "fiber", ["topological_fiber_bundle_core"]], ["add", "def", "index", ["topological_fiber_bundle_core"]], ["add", "theorem", "is_open_map_proj", ["topological_fiber_bundle_core"]], ["add", "theorem", "is_topological_fiber_bundle", ["topological_fiber_bundle_core"]], ["add", "def", "local_triv'", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_inv_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv'_trans", ["topological_fiber_bundle_core"]], ["add", "def", "local_triv", ["topological_fiber_bundle_core"]], ["add", "def", "local_triv_at", ["topological_fiber_bundle_core"]], ["add", "def", "local_triv_at_ext", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_at_ext_to_local_homeomorph", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_at_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_at_symm_fst", ["topological_fiber_bundle_core"]], ["add", "def", "local_triv_ext", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_symm_fst", ["topological_fiber_bundle_core"]], ["add", "theorem", "local_triv_trans", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv'_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv'_target", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_at_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_local_triv_target", ["topological_fiber_bundle_core"]], ["add", "theorem", "mem_triv_change_source", ["topological_fiber_bundle_core"]], ["add", "theorem", "open_source'", ["topological_fiber_bundle_core"]], ["add", "theorem", "open_target'", ["topological_fiber_bundle_core"]], ["add", "def", "proj", ["topological_fiber_bundle_core"]], ["add", "def", "total_space", ["topological_fiber_bundle_core"]], ["add", "def", "triv_change", ["topological_fiber_bundle_core"]], ["add", "structure", "topological_fiber_bundle_core", []]]}]}, {"timestamp": 1571646185, "sha": "d2d29ffd", "message": "feat(algebra/geom_sum): sum of a geom_series over an Ico (#1573)\n* feat(algebra/geom_sum): sum of a geom_series over an Ico\n* Add two more versions as requested by @jcommelin", "changes": [{"oldPath": "src/algebra/geom_sum.lean", "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "theorem", "geom_sum_Ico", []], ["add", "theorem", "geom_sum_Ico_mul", []], ["add", "theorem", "geom_sum_Ico_mul_neg", []]]}]}, {"timestamp": 1571645180, "sha": "0b660a9f", "message": "fix(scripts): sanity_check -> lint [ci skip] (#1575)\n* fix(scripts): sanity_check -> lint [ci skip]\n* also fix in .gitignore", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/rm_all.sh", "newPath": "scripts/rm_all.sh", "changes": []}]}, {"timestamp": 1571659737, "sha": "809276c0", "message": "feat(topology/metric_space): polygonal version of the triangle inequality (#1572)\n* feat(topology/metric_space): \"polygon\" version of the triangle inequality\n* Add two more versions of the \"polygonal\" inequality\n* Use `dist_le_Ico_sum_dist` in `cauchy_seq_of_summable_dist`", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_le_Ico_sum_dist", []], ["add", "theorem", "dist_le_Ico_sum_of_dist_le", []], ["add", "theorem", "dist_le_range_sum_dist", []], ["add", "theorem", "dist_le_range_sum_of_dist_le", []]]}]}, {"timestamp": 1571585600, "sha": "b1654df1", "message": "feat(meta/rb_map,tactic/monotonicity): replace rb_map.insert_cons (#1571)\nrb_map key (list value) is the same as rb_lmap. Usages of this function\nshould be replaced with rb_lmap.insert", "changes": [{"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}]}, {"timestamp": 1571568407, "sha": "74bed0c9", "message": "feat(tactic/suggest): generalize and reimplement library_search (#1552)\n* Create refine_list.lean\nThe refine_list tactic.\n* Create refine_list.lean\nThe refine_list.lean file\n* Update tactics.md\nAdded refine_list docs.\n* Update library_search.lean\nAdded replace_mvars function\n* Update library_search.lean\nAdded tactic_statement function and some code in the main library_search function which uses it.\n* commits\n* refine_list commits\n* Scott's work\n* update tactics.md\n* doc strings\n* update\n* Update refine_list.lean\nRemoves stray TODO line and changed the docstring for the main refine_list function.\n* Update refine_list.lean\nSpelling...\n* get_state and set_state replace by read and write\n* Combined functions and removed run_and_save_state\n* removed symmetry from library_search\n* removing test that doesn't work without symmetry\n* test properly\n* rename `refine_list` to `suggest`\n* cleaning up\n* minor\n* better sorting of results\n* oops, turn off trace messages again\n* type annotation\n* optimisation, and simpler logic\n* further explanation\n* a little more cleanup\n* Update src/tactic/library_search.lean\nRob Lewis's refactoring of `tactic_statement`\nCo-Authored-By: Rob Lewis \n* Update src/tactic/suggest.lean\nRemove `do` in line 82\nCo-Authored-By: Rob Lewis \n* Update src/tactic/suggest.lean\nRob's update of suggest in tactic.interactive.\nCo-Authored-By: Rob Lewis \n* changed interactive to tactic.interactive\n* used /--/ for copyright headers\n* adding comments explaining logic in apply_and_solve, and an optimisation\n* refactor no_mvars_in_target\n* add missing argument to interactive tactic\n* move all printing to the interactive tactic\n* refactoring\n* cleanup\n* refactoring\n* complete refactor; library_search is defined in terms of suggest_core now\n* restore protect to list.traverse and option.traverse\n* Update src/tactic/suggest.lean\nCo-Authored-By: Rob Lewis \n* some doc comments", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/category/basic.lean", "newPath": "src/category/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["mod", "theorem", "eq_some_iff_get_eq", ["option"]]]}, {"oldPath": "src/data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/library_search.lean", "newPath": null, "changes": [["del", "def", "to_string", ["tactic", "library_search", "head_symbol_match"]], ["del", "inductive", "head_symbol_match", ["tactic", "library_search"]]]}, {"oldPath": "src/tactic/rewrite_all/congr.lean", "newPath": "src/tactic/rewrite_all/congr.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/suggest.lean", "changes": [["add", "def", "to_string", ["tactic", "suggest", "head_symbol_match"]], ["add", "inductive", "head_symbol_match", ["tactic", "suggest"]]]}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}, {"oldPath": "test/mllist.lean", "newPath": "test/mllist.lean", "changes": []}, {"oldPath": null, "newPath": "test/suggest.lean", "changes": []}]}, {"timestamp": 1571523082, "sha": "f5446325", "message": "feat(algebra/big_operators): products and sums over `finset.Ico` (#1567)", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_Ico_add", ["finset"]], ["add", "theorem", "prod_Ico_consecutive", ["finset"]], ["add", "theorem", "prod_Ico_eq_div", ["finset"]], ["add", "theorem", "prod_Ico_eq_prod_range", ["finset"]], ["add", "theorem", "prod_range_mul_prod_Ico", ["finset"]], ["add", "theorem", "sum_Ico_add", ["finset"]], ["add", "theorem", "sum_Ico_eq_sub", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "disjoint_consecutive", ["finset", "Ico"]], ["mod", "theorem", "inter_consecutive", ["finset", "Ico"]], ["mod", "theorem", "self_eq_empty", ["finset", "Ico"]], ["mod", "theorem", "succ_singleton", ["finset", "Ico"]]]}]}, {"timestamp": 1571515062, "sha": "173e70a0", "message": "feat(tactic/lint): rename and refactor sanity_check (#1556)\n* chore(*): rename sanity_check to lint\n* rename sanity_check files to lint\n* refactor(tactic/lint): use attributes to add new linters\n* feat(tactic/lint): restrict which linters are run\n* doc(tactic/lint): document\n* doc(tactic/lint): document list_linters\n* chore(tactic/doc_blame): turn doc_blame into a linter\n* remove doc_blame import\n* fix(test/lint)\n* feat(meta/rb_map): add name_set.insert_list\n* feat(tactic/lint): better control over which linters are run\n* ignore instances in doc_blame\n* update lint documentation\n* minor refactor\n* correct docs\n* correct command doc strings\n* doc rb_map.lean\n* consistently use key/value\n* fix command doc strings", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/category/functor.lean", "newPath": "src/category/functor.lean", "changes": [["mod", "def", "const", ["functor"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/doc_blame.lean", "newPath": null, "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": [["mod", "theorem", "{u}", ["tactic", "interactive"]]]}, {"oldPath": null, "newPath": "src/tactic/lint.lean", "changes": []}, {"oldPath": "src/tactic/sanity_check.lean", "newPath": null, "changes": []}, {"oldPath": "test/sanity_check.lean", "newPath": "test/lint.lean", "changes": [["mod", "def", "foo", ["bar"]]]}]}, {"timestamp": 1571511886, "sha": "ee398b66", "message": "feat(algebra/floor): prove `⌈x⌉ ≤ ⌊x⌋ + 1` (#1568)", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "ceil_le_floor_add_one", []]]}]}, {"timestamp": 1571427692, "sha": "05102ecb", "message": "chore(category_theory): using simps (#1500)\n* chore(category_theory): using simps\n* more simps\n* remove simp lemma\n* revertings overlapping @[simps]", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "cocones", ["category_theory"]], ["del", "theorem", "cocones_map", ["category_theory"]], ["del", "theorem", "cocones_obj", ["category_theory"]], ["mod", "def", "cones", ["category_theory"]], ["del", "theorem", "cones_map", ["category_theory"]], ["del", "theorem", "cones_obj", ["category_theory"]], ["mod", "def", "whisker", ["category_theory", "limits", "cocone"]], ["del", "theorem", "whisker_ι_app", ["category_theory", "limits", "cocone"]], ["del", "theorem", "hom", ["category_theory", "limits", "cocones", "comp"]], ["mod", "def", "ext", ["category_theory", "limits", "cocones"]], ["del", "theorem", "ext_hom_hom", ["category_theory", "limits", "cocones"]], ["mod", "def", "forget", ["category_theory", "limits", "cocones"]], ["del", "theorem", "forget_map", ["category_theory", "limits", "cocones"]], ["del", "theorem", "forget_obj", ["category_theory", "limits", "cocones"]], ["mod", "def", "functoriality", ["category_theory", "limits", "cocones"]], ["del", "theorem", "hom", ["category_theory", "limits", "cocones", "id"]], ["mod", "def", "precompose", ["category_theory", "limits", "cocones"]], ["del", "theorem", "precompose_map_hom", ["category_theory", "limits", "cocones"]], ["del", "theorem", "precompose_obj_X", ["category_theory", "limits", "cocones"]], ["del", "theorem", "precompose_obj_ι", ["category_theory", "limits", "cocones"]], ["mod", "def", "whisker", ["category_theory", "limits", "cone"]], ["del", "theorem", "whisker_π_app", ["category_theory", "limits", "cone"]], ["del", "theorem", "hom", ["category_theory", "limits", "cones", "comp"]], ["mod", "def", "ext", ["category_theory", "limits", "cones"]], ["del", "theorem", "ext_hom_hom", ["category_theory", "limits", "cones"]], ["mod", "def", "forget", ["category_theory", "limits", "cones"]], ["del", "theorem", "forget_map", ["category_theory", "limits", "cones"]], ["del", "theorem", "forget_obj", ["category_theory", "limits", "cones"]], ["mod", "def", "functoriality", ["category_theory", "limits", "cones"]], ["del", "theorem", "hom", ["category_theory", "limits", "cones", "id"]], ["mod", "def", "postcompose", ["category_theory", "limits", "cones"]], ["del", "theorem", "postcompose_map_hom", ["category_theory", "limits", "cones"]], ["del", "theorem", "postcompose_obj_X", ["category_theory", "limits", "cones"]], ["del", "theorem", "postcompose_obj_π", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": [["mod", "def", "functor_category_colimit_cocone", ["category_theory", "limits"]], ["mod", "def", "functor_category_limit_cone", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": [["mod", "def", "to_cocone", ["category_theory", "functor"]], ["del", "theorem", "to_cocone_X", ["category_theory", "functor"]], ["del", "theorem", "to_cocone_ι", ["category_theory", "functor"]], ["mod", "def", "to_cone", ["category_theory", "functor"]], ["del", "theorem", "to_cone_X", ["category_theory", "functor"]], ["del", "theorem", "to_cone_π", ["category_theory", "functor"]], ["mod", "def", "colimit", ["category_theory", "over"]], ["del", "theorem", "colimit_X_hom", ["category_theory", "over"]], ["del", "theorem", "colimit_ι_app", ["category_theory", "over"]], ["mod", "def", "limit", ["category_theory", "under"]], ["del", "theorem", "limit_X_hom", ["category_theory", "under"]], ["del", "theorem", "limit_π_app", ["category_theory", "under"]]]}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": [["del", "theorem", "comp_f", ["category_theory", "monad", "algebra"]], ["mod", "def", "comp", ["category_theory", "monad", "algebra", "hom"]], ["del", "theorem", "comp_f", ["category_theory", "monad", "algebra", "hom"]], ["mod", "def", "id", ["category_theory", "monad", "algebra", "hom"]], ["del", "theorem", "id_f", ["category_theory", "monad", "algebra", "hom"]], ["del", "theorem", "id_f", ["category_theory", "monad", "algebra"]], ["mod", "def", "forget", ["category_theory", "monad"]], ["del", "theorem", "forget_map", ["category_theory", "monad"]], ["mod", "def", "free", ["category_theory", "monad"]], ["del", "theorem", "free_map_f", ["category_theory", "monad"]], ["del", "theorem", "free_obj_a", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": [["mod", "def", "c", ["category_theory", "monad", "forget_creates_limits"]], ["del", "theorem", "c_π", ["category_theory", "monad", "forget_creates_limits"]], ["mod", "def", "cone_point", ["category_theory", "monad", "forget_creates_limits"]], ["del", "theorem", "cone_point_a", ["category_theory", "monad", "forget_creates_limits"]], ["mod", "def", "γ", ["category_theory", "monad", "forget_creates_limits"]], ["del", "theorem", "γ_app", ["category_theory", "monad", "forget_creates_limits"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["mod", "def", "comp", ["category_theory", "lax_monoidal_functor"]], ["del", "theorem", "comp_map", ["category_theory", "lax_monoidal_functor"]], ["del", "theorem", "comp_obj", ["category_theory", "lax_monoidal_functor"]], ["del", "theorem", "comp_ε", ["category_theory", "lax_monoidal_functor"]], ["del", "theorem", "comp_μ", ["category_theory", "lax_monoidal_functor"]], ["mod", "def", "id", ["category_theory", "monoidal_functor"]], ["del", "theorem", "id_map", ["category_theory", "monoidal_functor"]], ["del", "theorem", "id_obj", ["category_theory", "monoidal_functor"]], ["del", "theorem", "id_ε", ["category_theory", "monoidal_functor"]], ["del", "theorem", "id_μ", ["category_theory", "monoidal_functor"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": [["mod", "def", "associator", ["category_theory", "functor"]], ["del", "theorem", "associator_hom_app", ["category_theory", "functor"]], ["del", "theorem", "associator_inv_app", ["category_theory", "functor"]], ["mod", "def", "left_unitor", ["category_theory", "functor"]], ["del", "theorem", "left_unitor_hom_app", ["category_theory", "functor"]], ["del", "theorem", "left_unitor_inv_app", ["category_theory", "functor"]], ["mod", "def", "right_unitor", ["category_theory", "functor"]], ["del", "theorem", "right_unitor_hom_app", ["category_theory", "functor"]], ["del", "theorem", "right_unitor_inv_app", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["del", "theorem", "map_app", ["category_theory", "coyoneda"]], ["del", "theorem", "obj_map", ["category_theory", "coyoneda"]], ["del", "theorem", "obj_obj", ["category_theory", "coyoneda"]], ["mod", "def", "coyoneda", ["category_theory"]], ["del", "theorem", "map_app", ["category_theory", "yoneda"]], ["del", "theorem", "obj_map", ["category_theory", "yoneda"]], ["del", "theorem", "obj_obj", ["category_theory", "yoneda"]], ["mod", "def", "yoneda", ["category_theory"]]]}]}, {"timestamp": 1571369267, "sha": "a1c0ad58", "message": "feat(category_theory): def `is_isomorphic_setoid`, `groupoid.iso_equiv_hom` (#1506)\n* feat(category_theory): def `is_isomorphic_setoid`, `groupoid.iso_equiv_hom`\n* Move to a dedicated file, define `isomorphic_class_functor`\n* explicit/implicit arguments\n* Update src/category_theory/groupoid.lean\n* Update src/category_theory/groupoid.lean\n* Update src/category_theory/isomorphism_classes.lean\n* Update src/category_theory/isomorphism_classes.lean\n* Update src/category_theory/isomorphism_classes.lean", "changes": [{"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["add", "def", "iso_equiv_hom", ["category_theory", "groupoid"]]]}, {"oldPath": null, "newPath": "src/category_theory/isomorphism_classes.lean", "changes": [["add", "theorem", "is_isomorphic_iff_nonempty_hom", ["category_theory", "groupoid"]], ["add", "def", "is_isomorphic", ["category_theory"]], ["add", "def", "is_isomorphic_setoid", ["category_theory"]], ["add", "def", "isomorphism_classes", ["category_theory"]]]}]}, {"timestamp": 1571342597, "sha": "e5fc2a70", "message": "refactor(topology,calculus): change subset condition for composition (#1549)\n* refactor(topology,calculus): change subset condition for composition\n* improve docstrings\n* add is_open Ioi\n* reviewer's comments\n* typo", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "congr", ["differentiable_on"]], ["add", "theorem", "congr", ["differentiable_within_at"]], ["add", "theorem", "differentiable_within_at_inter'", []], ["mod", "theorem", "comp", ["has_fderiv_within_at"]], ["add", "theorem", "image_tangent_cone_subset", ["has_fderiv_within_at"]], ["add", "theorem", "lim", ["has_fderiv_within_at"]], ["add", "theorem", "unique_diff_within_at", ["has_fderiv_within_at"]]]}, {"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "inter", ["unique_diff_on"]], ["del", "theorem", "unique_diff_on_inter", []], ["add", "theorem", "inter'", ["unique_diff_within_at"]], ["add", "theorem", "unique_diff_within_at_inter'", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/data/equiv/local_equiv.lean", "newPath": "src/data/equiv/local_equiv.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "prod_range_univ_eq", ["set"]], ["add", "theorem", "prod_subset_preimage_fst", ["set"]], ["add", "theorem", "prod_subset_preimage_snd", ["set"]], ["add", "theorem", "prod_univ_range_eq", ["set"]], ["add", "theorem", "subset_preimage_univ", ["set"]]]}, {"oldPath": "src/geometry/manifold/manifold.lean", "newPath": "src/geometry/manifold/manifold.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "is_open_Ioi", []]]}, {"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "congr", ["continuous_on"]], ["add", "theorem", "congr", ["continuous_within_at"]], ["add", "theorem", "mem_closure_image", ["continuous_within_at"]], ["add", "theorem", "preimage_mem_nhds_within'", ["continuous_within_at"]], ["add", "theorem", "mem_closure_iff_nhds_within_ne_bot", []], ["add", "theorem", "mem_nhds_within_of_mem_nhds", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "continuous_at_iff_continuous_at_comp_left", ["local_homeomorph"]], ["add", "theorem", "continuous_at_iff_continuous_at_comp_right", ["local_homeomorph"]], ["add", "theorem", "continuous_at_inv_fun", ["local_homeomorph"]], ["add", "theorem", "continuous_at_to_fun", ["local_homeomorph"]], ["mod", "theorem", "continuous_on_iff_continuous_on_comp_left", ["local_homeomorph"]], ["add", "theorem", "continuous_within_at_iff_continuous_within_at_comp_left", ["local_homeomorph"]], ["add", "theorem", "continuous_within_at_iff_continuous_within_at_comp_right", ["local_homeomorph"]], ["add", "theorem", "image_open_of_open", ["local_homeomorph"]], ["add", "theorem", "to_homeomorph_inv_fun", ["local_homeomorph"]], ["add", "def", "to_homeomorph_of_source_eq_univ_target_eq_univ", ["local_homeomorph"]], ["add", "theorem", "to_homeomorph_to_fun", ["local_homeomorph"]]]}]}, {"timestamp": 1571348774, "sha": "cc19e30e", "message": "docs(project): change example project [ci skip]", "changes": [{"oldPath": "docs/install/project.md", "newPath": "docs/install/project.md", "changes": []}]}, {"timestamp": 1571299122, "sha": "905beb08", "message": "fix(topology/metric_space): fix uniform structure on Pi types (#1551)\n* fix(topology/metric_space): fix uniform structure on pi tpype\n* cleanup\n* better construction of metric from emetric\n* use simp only instead of simp", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "sup_le_iff", ["finset"]], ["del", "theorem", "sup_lt", ["finset"]], ["add", "theorem", "sup_lt_iff", ["finset"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "Inter_mem_sets_of_fintype", ["filter"]], ["add", "theorem", "infi_principal_finset", ["filter"]], ["add", "theorem", "infi_principal_fintype", ["filter"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "def", "to_metric_space_of_dist", ["emetric_space"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}]}, {"timestamp": 1571262058, "sha": "ee863ec1", "message": "feat(ring_theory/algebraic): algebraic extensions, algebraic elements (#1519)\n* chore(ring_theory/algebra): make first type argument explicit in alg_hom\nNow this works, and it didn't work previously even with `@`\n```lean\nstructure alg_equiv (α β γ : Type*) [comm_ring α] [ring β] [ring γ]\n [algebra α β] [algebra α γ] extends alg_hom α β γ :=\n```\n* Update algebra.lean\n* feat(field_theory/algebraic_closure)\n* Remove sorries about minimal polynomials\n* Define alg_equiv.symm\n* typo\n* Remove another sorry, in base_extension\n* Work in progress\n* Remove a sorry in maximal_extension_chain\n* Merge two sorries\n* More sorries removed\n* More work on transitivity of algebraicity\n* WIP\n* Sorry-free definition of algebraic closure\n* More or less sorries\n* Removing some sorries\n* WIP\n* Fix algebraic.lean\n* Fix build, mostly\n* Remove stuff about UMP of alg clos\n* Prove transitivity of algebraic extensions\n* Add some docstrings\n* Remove files with stuff for future PRs\n* Add a bit to the module docstring\n* Fix module docstring\n* Include assumption in section injective\n* Aesthetic changes to is_integral_of_mem_of_fg\n* Little improvements of proofs in algebraic.lean\n* Improve some proofs in integral_closure.lean\n* Make variable name explicit\n* Process comments", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "degree_map'", ["polynomial"]], ["mod", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["add", "theorem", "leading_coeff_of_injective", ["polynomial"]], ["add", "theorem", "map_injective", ["polynomial"]], ["mod", "theorem", "map_pow", ["polynomial"]], ["add", "theorem", "mem_map_range", ["polynomial"]], ["add", "theorem", "ne_zero", ["polynomial", "monic"]], ["add", "theorem", "ne_zero_of_zero_ne_one", ["polynomial", "monic"]], ["add", "theorem", "monic_of_injective", ["polynomial"]], ["mod", "theorem", "nat_degree_map'", ["polynomial"]]]}, {"oldPath": "src/field_theory/minimal_polynomial.lean", "newPath": "src/field_theory/minimal_polynomial.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/algebraic.lean", "changes": [["add", "def", "is_algebraic", ["algebra"]], ["add", "theorem", "is_algebraic_iff", ["algebra"]], ["add", "theorem", "is_algebraic_trans", ["algebra"]], ["add", "def", "is_algebraic", []], ["add", "theorem", "is_algebraic_iff_is_integral", []], ["add", "theorem", "is_algebraic", ["is_integral"]], ["add", "def", "is_algebraic", ["subalgebra"]], ["add", "def", "is_algebraic_iff", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "is_integral_trans", ["algebra"]], ["mod", "theorem", "is_integral_of_mem_of_fg", []], ["mod", "theorem", "is_integral_of_noetherian", []], ["add", "theorem", "is_integral_trans", []], ["add", "theorem", "is_integral_trans_aux", []]]}]}, {"timestamp": 1571251500, "sha": "cbf81dff", "message": "archive(imo1988_q6): a formalization of Q6 on IMO1988 (#1455)\n* archive(imo1988_q6): a formalization of Q6 on IMO1988\n* WIP\n* Clean up, document, and use omega\n* Remove some non-terminal simps\n* Non-terminal simp followed by ring is fine\n* Include copyright statement\n* Add comment justifying example\n* Process review comments\n* Oops, forgot a line\n* Improve comments in the proof", "changes": [{"oldPath": null, "newPath": "archive/imo1988_q6.lean", "changes": [["add", "theorem", "constant_descent_vieta_jumping", []], ["add", "theorem", "imo1988_q6", []]]}]}, {"timestamp": 1571245522, "sha": "ad8387cc", "message": "feat(field_theory/finite): cardinality of images of polynomials (#1554)\n* feat(field_theory/finite): cardinality of images of polynomials\n* docstrings\n* Johan's suggestions\n* slightly shorten proof", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "card_eq_sum_card_image", ["finset"]], ["add", "theorem", "card_le_mul_card_image", ["finset"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "card_roots_sub_C'", ["polynomial"]], ["add", "theorem", "card_roots_sub_C", ["polynomial"]], ["add", "theorem", "degree_add_C", ["polynomial"]], ["add", "theorem", "mem_roots_sub_C", ["polynomial"]], ["add", "theorem", "nat_degree_neg", ["polynomial"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["add", "theorem", "card_image_polynomial_eval", ["finite_field"]], ["add", "theorem", "exists_root_sum_quadratic", ["finite_field"]]]}]}, {"timestamp": 1571197608, "sha": "09fd631b", "message": "feat(data/zmod/basic): val_min_abs (#1548)\n* feat(data/zmod/basic): val_min_abs\n* Update basic.lean\n* docstring and fix `zmodp` versions", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "coe_val_min_abs", ["zmod"]], ["add", "theorem", "nat_abs_val_min_abs_le", ["zmod"]], ["add", "def", "val_min_abs", ["zmod"]], ["add", "theorem", "val_min_abs_eq_zero", ["zmod"]], ["add", "theorem", "val_min_abs_zero", ["zmod"]], ["add", "theorem", "coe_val_min_abs", ["zmodp"]], ["add", "theorem", "nat_abs_val_min_abs_le", ["zmodp"]], ["add", "def", "val_min_abs", ["zmodp"]], ["add", "theorem", "val_min_abs_eq_zero", ["zmodp"]], ["add", "theorem", "val_min_abs_zero", ["zmodp"]]]}]}, {"timestamp": 1571055201, "sha": "c3d1bd71", "message": "feat(data/polynomial): card_roots' (#1546)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "card_roots'", ["polynomial"]]]}]}, {"timestamp": 1570971129, "sha": "0ee1272a", "message": "fix(doc/contribute): fix broken link (#1547)", "changes": [{"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}]}, {"timestamp": 1570960678, "sha": "d716648f", "message": "docs(topology): some more module docstrings (#1544)", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1570954108, "sha": "d10fd1e8", "message": "feat(data/int/basic): int.nat_abs_eq_zero (#1545)\n* feat(data/int/basic): int.nat_abs_eq_zero\n* Update basic.lean\n* Update basic.lean", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_eq_zero", ["int"]]]}]}, {"timestamp": 1570910843, "sha": "646c035a", "message": "refactor(topology): mild reorganization (#1541)\n* refactor(topology): mild reorganization\nAnother attempt to increase cohesion of modules in topology.\nThe old `constructions` module was starting to turn into a collection\nof miscellaneous results, and didn't actually contain any constructions\nthemselves.\nThe major changes are:\n* `constructions` now contains the definitions of the product, subspace,\n ... topologies, which used to be in `order`. This means that theorems\n involving concepts from `maps` (e.g., embeddings) and constructions\n (e.g., products) are now in `constructions`, not `maps`.\n* `subset_properties` and `separation` now import `constructions`\n rather than the other way around. This means that theorems like\n \"a product of compact spaces is compact\" are now in `subset_properties`,\n not `constructions`.\n* `homeomorph` is split off into its own file, which was easy because\n it was at the end of `constructions` anyways.\n* reorder universes in constructions\n* move README.md to docs/theories/topology.md\n* expand documentation of metric/uniform spaces slightly\n* update pointers to docs/theories/topological_spaces.md", "changes": [{"oldPath": "docs/theories.md", "newPath": "docs/theories.md", "changes": []}, {"oldPath": "docs/theories/topological_spaces.md", "newPath": "docs/theories/topology.md", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["del", "theorem", "closed_of_compact", []], ["del", "theorem", "compact_compact_separated", []], ["del", "theorem", "compact_iff_compact_image_of_embedding", []], ["del", "theorem", "compact_iff_compact_in_subtype", []], ["del", "theorem", "compact_iff_compact_space", []], ["del", "theorem", "compact_iff_compact_univ", []], ["del", "theorem", "compact_pi_infinite", []], ["del", "theorem", "compact_prod", []], ["del", "def", "subtype_emb", ["dense_embedding"]], ["del", "theorem", "dense_range_prod", []], ["del", "theorem", "diagonal_eq_range_diagonal_map", []], ["add", "theorem", "prod_mk", ["embedding"]], ["del", "theorem", "generalized_tube_lemma", []], ["del", "theorem", "coe_eq_to_equiv", ["homeomorph"]], ["del", "theorem", "coinduced_eq", ["homeomorph"]], ["del", "theorem", "compact_image", ["homeomorph"]], ["del", "theorem", "compact_preimage", ["homeomorph"]], ["del", "def", "homeomorph_of_continuous_open", ["homeomorph"]], ["del", "theorem", "image_symm", ["homeomorph"]], ["del", "theorem", "induced_eq", ["homeomorph"]], ["del", "theorem", "preimage_symm", ["homeomorph"]], ["del", "def", "prod_assoc", ["homeomorph"]], ["del", "def", "prod_comm", ["homeomorph"]], ["del", "def", "prod_congr", ["homeomorph"]], ["del", "theorem", "range_coe", ["homeomorph"]], ["del", "theorem", "self_comp_symm", ["homeomorph"]], ["del", "def", "sigma_prod_distrib", ["homeomorph"]], ["del", "theorem", "symm_comp_self", ["homeomorph"]], ["del", "structure", "homeomorph", []], ["add", "theorem", "prod_mk", ["inducing"]], ["del", "theorem", "is_closed_diagonal", []], ["del", "theorem", "is_closed_eq", []], ["del", "theorem", "is_closed_property2", []], ["del", "theorem", "is_closed_property3", []], ["del", "theorem", "is_closed_property", []], ["mod", "theorem", "is_open_prod_iff'", []], ["del", "theorem", "locally_compact_of_compact_nhds", []], ["add", "theorem", "mem_nhds_subtype", []], ["del", "theorem", "comm", ["nhds_contain_boxes"]], ["del", "theorem", "symm", ["nhds_contain_boxes"]], ["del", "def", "nhds_contain_boxes", []], ["del", "theorem", "nhds_contain_boxes_of_compact", []], ["del", "theorem", "nhds_contain_boxes_of_singleton", []], ["add", "theorem", "nhds_subtype", []], ["del", "theorem", "normal_of_compact_t2", []], ["del", "theorem", "prod_subset_compl_diagonal_iff_disjoint", []], ["add", "theorem", "quotient_dense_of_dense", []], ["add", "theorem", "closed_embedding", ["subtype_val"]], ["add", "theorem", "open_embedding", ["subtype_val"]]]}, {"oldPath": "src/topology/dense_embedding.lean", "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "def", "subtype_emb", ["dense_embedding"]], ["add", "theorem", "dense_range_prod", []], ["add", "theorem", "is_closed_property2", []], ["add", "theorem", "is_closed_property3", []], ["add", "theorem", "is_closed_property", []]]}, {"oldPath": null, "newPath": "src/topology/homeomorph.lean", "changes": [["add", "theorem", "coe_eq_to_equiv", ["homeomorph"]], ["add", "theorem", "coinduced_eq", ["homeomorph"]], ["add", "theorem", "compact_image", ["homeomorph"]], ["add", "theorem", "compact_preimage", ["homeomorph"]], ["add", "def", "homeomorph_of_continuous_open", ["homeomorph"]], ["add", "theorem", "image_symm", ["homeomorph"]], ["add", "theorem", "induced_eq", ["homeomorph"]], ["add", "theorem", "preimage_symm", ["homeomorph"]], ["add", "def", "prod_assoc", ["homeomorph"]], ["add", "def", "prod_comm", ["homeomorph"]], ["add", "def", "prod_congr", ["homeomorph"]], ["add", "theorem", "range_coe", ["homeomorph"]], ["add", "theorem", "self_comp_symm", ["homeomorph"]], ["add", "def", "sigma_prod_distrib", ["homeomorph"]], ["add", "theorem", "symm_comp_self", ["homeomorph"]], ["add", "structure", "homeomorph", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["del", "theorem", "prod_mk", ["embedding"]], ["del", "theorem", "prod_mk", ["inducing"]], ["del", "theorem", "closed_embedding", ["subtype_val"]], ["del", "theorem", "open_embedding", ["subtype_val"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["del", "theorem", "mem_nhds_subtype", []], ["del", "theorem", "nhds_subtype", []], ["del", "theorem", "quotient_dense_of_dense", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "closed_of_compact", []], ["add", "theorem", "compact_compact_separated", []], ["add", "theorem", "diagonal_eq_range_diagonal_map", []], ["add", "theorem", "is_closed_diagonal", []], ["add", "theorem", "is_closed_eq", []], ["add", "theorem", "locally_compact_of_compact_nhds", []], ["add", "theorem", "normal_of_compact_t2", []], ["add", "theorem", "prod_subset_compl_diagonal_iff_disjoint", []]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["add", "theorem", "compact_iff_compact_image_of_embedding", []], ["add", "theorem", "compact_iff_compact_in_subtype", []], ["add", "theorem", "compact_iff_compact_space", []], ["add", "theorem", "compact_iff_compact_univ", []], ["mod", "theorem", "compact_image", []], ["add", "theorem", "compact_pi_infinite", []], ["add", "theorem", "compact_prod", []], ["mod", "theorem", "compact_range", []], ["add", "theorem", "generalized_tube_lemma", []], ["add", "theorem", "comm", ["nhds_contain_boxes"]], ["add", "theorem", "symm", ["nhds_contain_boxes"]], ["add", "def", "nhds_contain_boxes", []], ["add", "theorem", "nhds_contain_boxes_of_compact", []], ["add", "theorem", "nhds_contain_boxes_of_singleton", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1570904511, "sha": "92a9a780", "message": "fix(topology/continuous_on): avoid duplicate instance arguments (#1542)\nThis was broken by #1516, caught by sanity_check.", "changes": [{"oldPath": "src/topology/continuous_on.lean", "newPath": "src/topology/continuous_on.lean", "changes": []}]}, {"timestamp": 1570903526, "sha": "995add3a", "message": "fix(topology/algebra/group_completion): remove redundant instance parameters (#1543)", "changes": [{"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["mod", "theorem", "is_add_group_hom_map", ["uniform_space", "completion"]]]}]}, {"timestamp": 1570896173, "sha": "76090bee", "message": "chore(docs/install/debian): Remove old sentence [ci skip]", "changes": [{"oldPath": "docs/install/debian.md", "newPath": "docs/install/debian.md", "changes": []}]}, {"timestamp": 1570876088, "sha": "27515619", "message": "minor updates to the installation instructions (#1538)", "changes": [{"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1570816457, "sha": "d5de8037", "message": "refactor(ring_theory/algebra): alg_hom extends ring_hom and use curly brackets (#1529)\n* chore(algebra/ring): use curly brackets for ring_hom where possible\n* refactor(ring_theory/algebra): alg_hom extends ring_hom and use curly brackets\n* fix build\n* Update src/ring_theory/algebra.lean\nCo-Authored-By: Johan Commelin \n* fix build", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "comp_apply", ["ring_hom"]], ["add", "theorem", "id_apply", ["ring_hom"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "def", "comp", ["alg_hom"]]]}]}, {"timestamp": 1570799704, "sha": "6b7377aa", "message": "chore(algebra/ring): use curly brackets for ring_hom where possible (#1525)\n* chore(algebra/ring): use curly brackets for ring_hom where possible\n* add comments explaining motivation\n* move explanation to header\n* fix build\n* Update src/algebra/ring.lean\n* scott's suggestion", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "coe_add_monoid_hom", []], ["mod", "theorem", "coe_monoid_hom", []]]}]}, {"timestamp": 1570794531, "sha": "38a0ffe9", "message": "refactor(ring_theory/algebra): algebra should extend has_scalar not module (#1532)\n* refactor(ring_theory/algebra): algebra should extend has_scalar not module\n* fix build\n* fix build\n* Update algebra.lean\n* Update module.lean\n* fx build\n* fix build\n* fix again\n* fix build\n* fix build", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}]}, {"timestamp": 1570793189, "sha": "338146b7", "message": "fix(algebra/char_p): typo in docstring (#1537)\nI don't know anything about semirings but I do know there isn't a homomorphism from int to them in general. Do people talk about kernels? (this would be some semi-ideal or something). My change is probably better than what we had but someone who knows what a semiring is might want to check that my suggestion makes sense.", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}]}, {"timestamp": 1570765262, "sha": "eb230d3b", "message": "chore(algebra/group/hom): use curly brackets for instances where possible (#1524)\n* chore(algebra/group/hom): use curly brackets for instances where possible\n* add comments mentioning motivation behind brackets\n* move explanation to header\n* fix build\n* Update src/algebra/group/hom.lean", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}]}, {"timestamp": 1570759171, "sha": "364c26e9", "message": "chore(algebra/module): use curly brackets instead of square brackets in more places (#1523)\n* chore(algebra/module): use curly brackets instead of square brackets in more places\n* Add explanation behind implicit brackets\n* Update src/algebra/module.lean", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}]}, {"timestamp": 1570706076, "sha": "43d3dee0", "message": "chore(linear_algebra): rename type variables (#1521)\n* doc(linear_algebra/basis): add doc\n* doc(linear_algebra/basis): shorten docstrings\n* refactor(linear_algebra/basis): rename type vars\n* style(linear_algebra/basic): change variable names\n* chore(linear_algebra/dimension): rename type variables\n* remove commented code\n* style(linear_algebra/bilinear_form): change variable names\n* style(linear_algebra/direct_sum_module): change variable names\n* style(linear_algebra/matrix): change variable names\n* Rename variables in finsupp_vector_space.lean\n* style(linear_algebra/sesquilinear_form): change variable names\n* style(linear_algebra/tensor_product): change variable names\n* change kappas to bb k's\n* style(linear_algebra/finsupp): change variable names\n* change universe levels\n* change bb k to K", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "def", "to_linear_equiv", ["equiv"]], ["mod", "theorem", "smul_sum", ["finset"]], ["mod", "theorem", "smul_sum", ["finsupp"]], ["mod", "theorem", "is_linear_map_add", ["is_linear_map"]], ["mod", "theorem", "is_linear_map_sub", ["is_linear_map"]], ["mod", "theorem", "apply_symm_apply", ["linear_equiv"]], ["mod", "def", "arrow_congr", ["linear_equiv"]], ["mod", "theorem", "coe_apply", ["linear_equiv"]], ["mod", "def", "congr_right", ["linear_equiv"]], ["mod", "def", "conj", ["linear_equiv"]], ["mod", "theorem", "eq_bot_of_equiv", ["linear_equiv"]], ["mod", "theorem", "ext", ["linear_equiv"]], ["mod", "theorem", "of_bijective_apply", ["linear_equiv"]], ["mod", "def", "of_linear", ["linear_equiv"]], ["mod", "theorem", "of_linear_apply", ["linear_equiv"]], ["mod", "theorem", "of_linear_symm_apply", ["linear_equiv"]], ["mod", "def", "of_top", ["linear_equiv"]], ["mod", "theorem", "of_top_apply", ["linear_equiv"]], ["mod", "theorem", "of_top_symm_apply", ["linear_equiv"]], ["mod", "def", "refl", ["linear_equiv"]], ["mod", "def", "smul_of_ne_zero", ["linear_equiv"]], ["mod", "def", "smul_of_unit", ["linear_equiv"]], ["mod", "def", "symm", ["linear_equiv"]], ["mod", "theorem", "symm_apply_apply", ["linear_equiv"]], ["mod", "theorem", "to_equiv_injective", ["linear_equiv"]], ["mod", "def", "trans", ["linear_equiv"]], ["mod", "structure", "linear_equiv", []], ["mod", "theorem", "add_apply", ["linear_map"]], ["mod", "def", "cod_restrict", ["linear_map"]], ["mod", "theorem", "cod_restrict_apply", ["linear_map"]], ["mod", "theorem", "comap_cod_restrict", ["linear_map"]], ["mod", "theorem", "comap_injective", ["linear_map"]], ["mod", "theorem", "comap_le_comap_iff", ["linear_map"]], ["mod", "theorem", "comap_map_eq", ["linear_map"]], ["mod", "theorem", "comap_map_eq_self", ["linear_map"]], ["mod", "theorem", "comap_pair_prod", ["linear_map"]], ["mod", "theorem", "comp_assoc", ["linear_map"]], ["mod", "theorem", "comp_cod_restrict", ["linear_map"]], ["mod", "theorem", "comp_smul", ["linear_map"]], ["mod", "theorem", "comp_zero", ["linear_map"]], ["mod", "def", "congr_right", ["linear_map"]], ["mod", "def", "copair", ["linear_map"]], ["mod", "theorem", "copair_apply", ["linear_map"]], ["mod", "theorem", "copair_inl", ["linear_map"]], ["mod", "theorem", "copair_inl_inr", ["linear_map"]], ["mod", "theorem", "copair_inr", ["linear_map"]], ["mod", "def", "diag", ["linear_map"]], ["mod", "theorem", "disjoint_inl_inr", ["linear_map"]], ["mod", "theorem", "disjoint_ker'", ["linear_map"]], ["mod", "theorem", "disjoint_ker", ["linear_map"]], ["mod", "theorem", "finsupp_sum", ["linear_map"]], ["mod", "def", "fst", ["linear_map"]], ["mod", "theorem", "fst_apply", ["linear_map"]], ["mod", "theorem", "fst_eq_copair", ["linear_map"]], ["mod", "theorem", "fst_pair", ["linear_map"]], ["mod", "def", "general_linear_equiv", ["linear_map", "general_linear_group"]], ["mod", "theorem", "general_linear_equiv_to_linear_map", ["linear_map", "general_linear_group"]], ["mod", "def", "of_linear_equiv", ["linear_map", "general_linear_group"]], ["mod", "def", "to_linear_equiv", ["linear_map", "general_linear_group"]], ["mod", "def", "general_linear_group", ["linear_map"]], ["mod", "theorem", "infi_ker_proj", ["linear_map"]], ["mod", "theorem", "inj_of_disjoint_ker", ["linear_map"]], ["mod", "def", "inl", ["linear_map"]], ["mod", "theorem", "inl_apply", ["linear_map"]], ["mod", "theorem", "inl_eq_pair", ["linear_map"]], ["mod", "def", "inr", ["linear_map"]], ["mod", "theorem", "inr_apply", ["linear_map"]], ["mod", "theorem", "inr_eq_pair", ["linear_map"]], ["mod", "def", "inverse", ["linear_map"]], ["mod", "theorem", "is_linear_map_prod_iso", ["linear_map"]], ["mod", "def", "ker", ["linear_map"]], ["mod", "theorem", "ker_cod_restrict", ["linear_map"]], ["mod", "theorem", "ker_comp", ["linear_map"]], ["mod", "theorem", "ker_eq_bot'", ["linear_map"]], ["mod", "theorem", "ker_eq_bot", ["linear_map"]], ["mod", "theorem", "ker_eq_top", ["linear_map"]], ["mod", "theorem", "ker_id", ["linear_map"]], ["mod", "theorem", "ker_le_ker_comp", ["linear_map"]], ["mod", "theorem", "ker_pair", ["linear_map"]], ["mod", "theorem", "ker_pi", ["linear_map"]], ["mod", "theorem", "ker_smul'", ["linear_map"]], ["mod", "theorem", "ker_smul", ["linear_map"]], ["mod", "theorem", "ker_std_basis", ["linear_map"]], ["mod", "theorem", "ker_zero", ["linear_map"]], ["mod", "theorem", "le_ker_iff_map", ["linear_map"]], ["mod", "theorem", "map_cod_restrict", ["linear_map"]], ["mod", "theorem", "map_comap_eq", ["linear_map"]], ["mod", "theorem", "map_comap_eq_self", ["linear_map"]], ["mod", "theorem", "map_copair_prod", ["linear_map"]], ["mod", "theorem", "map_injective", ["linear_map"]], ["mod", "theorem", "map_le_map_iff", ["linear_map"]], ["mod", "theorem", "map_le_range", ["linear_map"]], ["mod", "theorem", "mem_ker", ["linear_map"]], ["mod", "theorem", "mem_range", ["linear_map"]], ["mod", "theorem", "mul_app", ["linear_map"]], ["mod", "theorem", "neg_apply", ["linear_map"]], ["mod", "theorem", "one_app", ["linear_map"]], ["mod", "def", "pair", ["linear_map"]], ["mod", "theorem", "pair_apply", ["linear_map"]], ["mod", "theorem", "pair_fst_snd", ["linear_map"]], ["mod", "def", "pi", ["linear_map"]], ["mod", "theorem", "pi_apply", ["linear_map"]], ["mod", "theorem", "pi_comp", ["linear_map"]], ["mod", "theorem", "pi_eq_zero", ["linear_map"]], ["mod", "theorem", "pi_zero", ["linear_map"]], ["mod", "def", "prod", ["linear_map"]], ["mod", "theorem", "prod_eq_inf_comap", ["linear_map"]], ["mod", "theorem", "prod_eq_sup_map", ["linear_map"]], ["mod", "def", "proj", ["linear_map"]], ["mod", "theorem", "proj_apply", ["linear_map"]], ["mod", "theorem", "proj_comp_std_basis", ["linear_map"]], ["mod", "theorem", "proj_pi", ["linear_map"]], ["mod", "theorem", "proj_std_basis_ne", ["linear_map"]], ["mod", "theorem", "proj_std_basis_same", ["linear_map"]], ["mod", "def", "range", ["linear_map"]], ["mod", "theorem", "range_cod_restrict", ["linear_map"]], ["mod", "theorem", "range_coe", ["linear_map"]], ["mod", "theorem", "range_comp", ["linear_map"]], ["mod", "theorem", "range_comp_le_range", ["linear_map"]], ["mod", "theorem", "range_eq_top", ["linear_map"]], ["mod", "theorem", "range_id", ["linear_map"]], ["mod", "theorem", "range_le_bot_iff", ["linear_map"]], ["mod", "theorem", "range_le_iff_comap", ["linear_map"]], ["mod", "theorem", "range_smul'", ["linear_map"]], ["mod", "theorem", "range_smul", ["linear_map"]], ["mod", "theorem", "range_zero", ["linear_map"]], ["mod", "def", "scalar_prod_space_iso", ["linear_map"]], ["mod", "theorem", "smul_apply", ["linear_map"]], ["mod", "theorem", "smul_comp", ["linear_map"]], ["mod", "def", "smul_right", ["linear_map"]], ["mod", "theorem", "smul_right_apply", ["linear_map"]], ["mod", "def", "snd", ["linear_map"]], ["mod", "theorem", "snd_apply", ["linear_map"]], ["mod", "theorem", "snd_eq_copair", ["linear_map"]], ["mod", "theorem", "snd_pair", ["linear_map"]], ["mod", "theorem", "span_inl_union_inr", ["linear_map"]], ["mod", "def", "std_basis", ["linear_map"]], ["mod", "theorem", "std_basis_apply", ["linear_map"]], ["mod", "theorem", "std_basis_eq_single", ["linear_map"]], ["mod", "theorem", "std_basis_ne", ["linear_map"]], ["mod", "theorem", "std_basis_same", ["linear_map"]], ["mod", "theorem", "sub_apply", ["linear_map"]], ["mod", "theorem", "sub_mem_ker_iff", ["linear_map"]], ["mod", "theorem", "subtype_comp_cod_restrict", ["linear_map"]], ["mod", "theorem", "sum_apply", ["linear_map"]], ["mod", "def", "sup_quotient_to_quotient_inf", ["linear_map"]], ["mod", "theorem", "supr_range_std_basis", ["linear_map"]], ["mod", "theorem", "update_apply", ["linear_map"]], ["mod", "theorem", "zero_apply", ["linear_map"]], ["mod", "theorem", "zero_comp", ["linear_map"]], ["mod", "theorem", "Inf_coe", ["submodule"]], ["mod", "theorem", "add_eq_sup", ["submodule"]], ["mod", "theorem", "bot_coe", ["submodule"]], ["mod", "def", "comap", ["submodule"]], ["mod", "theorem", "comap_bot", ["submodule"]], ["mod", "theorem", "comap_coe", ["submodule"]], ["mod", "theorem", "comap_comp", ["submodule"]], ["mod", "theorem", "comap_fst", ["submodule"]], ["mod", "theorem", "comap_inf", ["submodule"]], ["mod", "theorem", "comap_infi", ["submodule"]], ["mod", "theorem", "comap_liftq", ["submodule"]], ["mod", "theorem", "comap_mkq_embedding_eq", ["submodule"]], ["mod", "theorem", "comap_mono", ["submodule"]], ["mod", "theorem", "comap_smul'", ["submodule"]], ["mod", "theorem", "comap_smul", ["submodule"]], ["mod", "theorem", "comap_snd", ["submodule"]], ["mod", "theorem", "comap_top", ["submodule"]], ["mod", "theorem", "comap_zero", ["submodule"]], ["mod", "theorem", "disjoint_def", ["submodule"]], ["mod", "theorem", "disjoint_iff_comap_eq_bot", ["submodule"]], ["mod", "theorem", "eq_bot_of_zero_eq_one", ["submodule"]], ["mod", "theorem", "eq_top_iff'", ["submodule"]], ["mod", "theorem", "eq_zero_of_bot_submodule", ["submodule"]], ["mod", "theorem", "gc_map_comap", ["submodule"]], ["mod", "theorem", "inf_coe", ["submodule"]], ["mod", "theorem", "infi_coe", ["submodule"]], ["mod", "theorem", "ker_inl", ["submodule"]], ["mod", "theorem", "ker_inr", ["submodule"]], ["mod", "theorem", "ker_liftq", ["submodule"]], ["mod", "theorem", "ker_liftq_eq_bot", ["submodule"]], ["mod", "theorem", "ker_of_le", ["submodule"]], ["mod", "theorem", "le_comap_map", ["submodule"]], ["mod", "theorem", "le_comap_mkq", ["submodule"]], ["mod", "theorem", "le_def'", ["submodule"]], ["mod", "theorem", "le_def", ["submodule"]], ["mod", "def", "liftq", ["submodule"]], ["mod", "theorem", "liftq_apply", ["submodule"]], ["mod", "theorem", "liftq_mkq", ["submodule"]], ["mod", "theorem", "linear_eq_on", ["submodule"]], ["mod", "def", "map", ["submodule"]], ["mod", "theorem", "map_bot", ["submodule"]], ["mod", "theorem", "map_coe", ["submodule"]], ["mod", "theorem", "map_comap_le", ["submodule"]], ["mod", "theorem", "map_comp", ["submodule"]], ["mod", "theorem", "map_inf_eq_map_inf_comap", ["submodule"]], ["mod", "theorem", "map_inl", ["submodule"]], ["mod", "theorem", "map_inr", ["submodule"]], ["mod", "theorem", "map_le_iff_le_comap", ["submodule"]], ["mod", "theorem", "map_liftq", ["submodule"]], ["mod", "theorem", "map_mono", ["submodule"]], ["mod", "theorem", "map_smul'", ["submodule"]], ["mod", "theorem", "map_smul", ["submodule"]], ["mod", "theorem", "map_subtype_embedding_eq", ["submodule"]], ["mod", "theorem", "map_subtype_le", ["submodule"]], ["mod", "theorem", "map_sup", ["submodule"]], ["mod", "theorem", "map_supr", ["submodule"]], ["mod", "theorem", "map_top", ["submodule"]], ["mod", "theorem", "map_zero", ["submodule"]], ["mod", "def", "mapq", ["submodule"]], ["mod", "theorem", "mapq_apply", ["submodule"]], ["mod", "theorem", "mapq_mkq", ["submodule"]], ["mod", "theorem", "mem_Sup_of_directed", ["submodule"]], ["mod", "theorem", "mem_bot", ["submodule"]], ["mod", "theorem", "mem_comap", ["submodule"]], ["mod", "theorem", "mem_inf", ["submodule"]], ["mod", "theorem", "mem_infi", ["submodule"]], ["mod", "theorem", "mem_map", ["submodule"]], ["mod", "theorem", "mem_map_of_mem", ["submodule"]], ["mod", "theorem", "mem_prod", ["submodule"]], ["mod", "theorem", "mem_span", ["submodule"]], ["mod", "theorem", "mem_span_insert'", ["submodule"]], ["mod", "theorem", "mem_span_insert", ["submodule"]], ["mod", "theorem", "mem_span_singleton", ["submodule"]], ["mod", "theorem", "mem_supr_of_mem", ["submodule"]], ["mod", "theorem", "mem_top", ["submodule"]], ["mod", "def", "mkq", ["submodule"]], ["mod", "theorem", "mkq_apply", ["submodule"]], ["mod", "def", "of_le", ["submodule"]], ["mod", "theorem", "of_le_apply", ["submodule"]], ["mod", "def", "prod", ["submodule"]], ["mod", "theorem", "prod_bot", ["submodule"]], ["mod", "theorem", "prod_comap_inl", ["submodule"]], ["mod", "theorem", "prod_comap_inr", ["submodule"]], ["mod", "theorem", "prod_map_fst", ["submodule"]], ["mod", "theorem", "prod_map_snd", ["submodule"]], ["mod", "theorem", "prod_mono", ["submodule"]], ["mod", "theorem", "prod_top", ["submodule"]], ["mod", "theorem", "mk'_eq_mk", ["submodule", "quotient"]], ["mod", "def", "mk", ["submodule", "quotient"]], ["mod", "theorem", "mk_eq_mk", ["submodule", "quotient"]], ["mod", "theorem", "quot_mk_eq_mk", ["submodule", "quotient"]], ["mod", "def", "quotient_rel", ["submodule"]], ["mod", "theorem", "range_fst", ["submodule"]], ["mod", "theorem", "range_liftq", ["submodule"]], ["mod", "theorem", "range_of_le", ["submodule"]], ["mod", "theorem", "range_snd", ["submodule"]], ["mod", "def", "span", ["submodule"]], ["mod", "theorem", "span_Union", ["submodule"]], ["mod", "theorem", "span_empty", ["submodule"]], ["mod", "theorem", "span_eq", ["submodule"]], ["mod", "theorem", "span_eq_bot", ["submodule"]], ["mod", "theorem", "span_eq_of_le", ["submodule"]], ["mod", "theorem", "span_image", ["submodule"]], ["mod", "theorem", "span_induction", ["submodule"]], ["mod", "theorem", "span_insert_eq_span", ["submodule"]], ["mod", "theorem", "span_le", ["submodule"]], ["mod", "theorem", "span_mono", ["submodule"]], ["mod", "theorem", "span_prod_le", ["submodule"]], ["mod", "theorem", "span_singleton_eq_bot", ["submodule"]], ["mod", "theorem", "span_singleton_eq_range", ["submodule"]], ["mod", "theorem", "span_span", ["submodule"]], ["mod", "theorem", "span_union", ["submodule"]], ["mod", "theorem", "span_univ", ["submodule"]], ["mod", "theorem", "subset_span", ["submodule"]], ["mod", "theorem", "subtype_comp_of_le", ["submodule"]], ["mod", "theorem", "top_coe", ["submodule"]], ["mod", "theorem", "zero_eq_bot", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "constr_add", []], ["mod", "theorem", "constr_basis", []], ["mod", "theorem", "constr_eq", []], ["mod", "theorem", "constr_neg", []], ["mod", "theorem", "constr_range", []], ["mod", "theorem", "constr_self", []], ["mod", "theorem", "constr_smul", []], ["mod", "theorem", "constr_sub", []], ["mod", "theorem", "constr_zero", []], ["mod", "theorem", "disjoint_span_singleton", []], ["mod", "theorem", "eq_of_linear_independent_of_span_subtype", []], ["mod", "def", "equiv_fun_basis", []], ["mod", "def", "equiv_of_is_basis", []], ["mod", "theorem", "exists_is_basis", []], ["mod", "theorem", "exists_left_inverse_linear_map_of_injective", []], ["mod", "theorem", "exists_linear_independent", []], ["mod", "theorem", "exists_of_linear_independent_of_finite_span", []], ["mod", "theorem", "exists_right_inverse_linear_map_of_surjective", []], ["mod", "theorem", "exists_subset_is_basis", []], ["mod", "theorem", "comp", ["is_basis"]], ["mod", "def", "constr", ["is_basis"]], ["mod", "theorem", "constr_apply", ["is_basis"]], ["mod", "theorem", "ext", ["is_basis"]], ["mod", "theorem", "injective", ["is_basis"]], ["mod", "theorem", "mem_span", ["is_basis"]], ["mod", "def", "repr", ["is_basis"]], ["mod", "theorem", "repr_range", ["is_basis"]], ["mod", "theorem", "repr_total", ["is_basis"]], ["mod", "theorem", "total_comp_repr", ["is_basis"]], ["mod", "theorem", "total_repr", ["is_basis"]], ["mod", "def", "is_basis", []], ["mod", "theorem", "is_basis_empty", []], ["mod", "theorem", "is_basis_empty_bot", []], ["mod", "theorem", "is_basis_inl_union_inr", []], ["mod", "theorem", "is_basis_singleton_one", []], ["mod", "theorem", "is_basis_span", []], ["mod", "theorem", "le_of_span_le_span", []], ["mod", "theorem", "is_basis", ["linear_equiv"]], ["mod", "theorem", "image", ["linear_independent"]], ["mod", "theorem", "image_subtype", ["linear_independent"]], ["mod", "theorem", "injective", ["linear_independent"]], ["mod", "theorem", "insert", ["linear_independent"]], ["mod", "theorem", "mono", ["linear_independent"]], ["mod", "def", "repr", ["linear_independent"]], ["mod", "theorem", "total_comp_repr", ["linear_independent"]], ["mod", "def", "total_equiv", ["linear_independent"]], ["mod", "theorem", "total_repr", ["linear_independent"]], ["mod", "theorem", "unique", ["linear_independent"]], ["mod", "def", "linear_independent", []], ["mod", "theorem", "linear_independent_Union_finite_subtype", []], ["mod", "theorem", "linear_independent_bUnion_of_directed", []], ["mod", "theorem", "linear_independent_empty", []], ["mod", "theorem", "linear_independent_empty_type", []], ["mod", "theorem", "linear_independent_iff", []], ["mod", "theorem", "linear_independent_iff_not_mem_span", []], ["mod", "theorem", "linear_independent_iff_total_on", []], ["mod", "theorem", "linear_independent_inl_union_inr'", []], ["mod", "theorem", "linear_independent_inl_union_inr", []], ["mod", "theorem", "linear_independent_of_finite", []], ["mod", "theorem", "linear_independent_of_zero_eq_one", []], ["mod", "theorem", "linear_independent_sUnion_of_directed", []], ["mod", "theorem", "linear_independent_singleton", []], ["mod", "theorem", "linear_independent_span", []], ["mod", "theorem", "linear_independent_subtype", []], ["mod", "theorem", "linear_independent_subtype_disjoint", []], ["mod", "theorem", "linear_independent_union", []], ["mod", "theorem", "linear_independent_unique", []], ["mod", "theorem", "mem_span_insert_exchange", []], ["mod", "theorem", "card_fintype", ["module"]], ["mod", "def", "module_equiv_finsupp", []], ["mod", "theorem", "is_basis_fun", ["pi"]], ["mod", "theorem", "is_basis_fun₀", ["pi"]], ["mod", "theorem", "is_basis_std_basis", ["pi"]], ["mod", "theorem", "quotient_prod_linear_equiv", []], ["mod", "theorem", "span_le_span_iff", []], ["mod", "theorem", "card_fintype", ["vector_space"]]]}, {"oldPath": "src/linear_algebra/bilinear_form.lean", "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["mod", "def", "is_alt", ["alt_bilin_form"]], ["mod", "theorem", "neg", ["alt_bilin_form"]], ["mod", "theorem", "self_eq_zero", ["alt_bilin_form"]], ["mod", "theorem", "add_left", ["bilin_form"]], ["mod", "theorem", "add_right", ["bilin_form"]], ["mod", "def", "bilin_linear_map_equiv", ["bilin_form"]], ["mod", "theorem", "ext", ["bilin_form"]], ["mod", "def", "is_ortho", ["bilin_form"]], ["mod", "theorem", "neg_left", ["bilin_form"]], ["mod", "theorem", "neg_right", ["bilin_form"]], ["mod", "theorem", "ortho_smul_left", ["bilin_form"]], ["mod", "theorem", "ortho_smul_right", ["bilin_form"]], ["mod", "theorem", "ortho_zero", ["bilin_form"]], ["mod", "theorem", "smul_left", ["bilin_form"]], ["mod", "theorem", "smul_right", ["bilin_form"]], ["mod", "theorem", "sub_left", ["bilin_form"]], ["mod", "theorem", "sub_right", ["bilin_form"]], ["mod", "def", "to_linear_map", ["bilin_form"]], ["mod", "theorem", "zero_left", ["bilin_form"]], ["mod", "theorem", "zero_right", ["bilin_form"]], ["mod", "structure", "bilin_form", []], ["mod", "def", "to_bilin", ["linear_map"]], ["mod", "theorem", "eq_zero", ["refl_bilin_form"]], ["mod", "def", "is_refl", ["refl_bilin_form"]], ["mod", "theorem", "ortho_sym", ["refl_bilin_form"]], ["mod", "def", "is_sym", ["sym_bilin_form"]], ["mod", "theorem", "ortho_sym", ["sym_bilin_form"]], ["mod", "theorem", "sym", ["sym_bilin_form"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_add_le_dim_add_dim", []], ["mod", "theorem", "dim_bot", []], ["mod", "theorem", "dim_eq_injective", []], ["mod", "theorem", "dim_eq_surjective", []], ["mod", "theorem", "dim_fin_fun", []], ["mod", "theorem", "dim_fun'", []], ["mod", "theorem", "dim_fun", []], ["mod", "theorem", "dim_le_injective", []], ["mod", "theorem", "dim_le_of_submodule", []], ["mod", "theorem", "dim_le_surjective", []], ["mod", "theorem", "dim_map_le", []], ["mod", "theorem", "dim_of_field", []], ["mod", "theorem", "dim_pi", []], ["mod", "theorem", "dim_prod", []], ["mod", "theorem", "dim_quotient", []], ["mod", "theorem", "dim_range_add_dim_ker", []], ["mod", "theorem", "dim_range_le", []], ["mod", "theorem", "dim_range_of_surjective", []], ["mod", "theorem", "dim_span", []], ["mod", "theorem", "dim_span_le", []], ["mod", "theorem", "dim_span_of_finset", []], ["mod", "theorem", "dim_span_set", []], ["mod", "theorem", "dim_submodule_le", []], ["mod", "theorem", "dim_sup_add_dim_inf_eq", []], ["mod", "theorem", "dim_top", []], ["mod", "theorem", "exists_is_basis_fintype", []], ["mod", "theorem", "exists_mem_ne_zero_of_dim_pos", []], ["mod", "theorem", "exists_mem_ne_zero_of_ne_bot", []], ["mod", "theorem", "le_span", ["is_basis"]], ["mod", "theorem", "mk_eq_dim", ["is_basis"]], ["mod", "theorem", "mk_range_eq_dim", ["is_basis"]], ["mod", "theorem", "dim_eq", ["linear_equiv"]], ["mod", "theorem", "dim_eq_lift", ["linear_equiv"]], ["mod", "theorem", "mk_eq_mk_of_basis", []], ["mod", "def", "rank", []], ["mod", "theorem", "rank_add_le", []], ["mod", "theorem", "rank_comp_le1", []], ["mod", "theorem", "rank_comp_le2", []], ["mod", "theorem", "rank_finset_sum_le", []], ["mod", "theorem", "rank_le_domain", []], ["mod", "theorem", "rank_le_range", []], ["mod", "theorem", "rank_zero", []]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["mod", "theorem", "apply_eq_component", ["direct_sum"]], ["mod", "theorem", "lof_self", ["direct_sum", "component"]], ["mod", "theorem", "of", ["direct_sum", "component"]], ["mod", "def", "component", ["direct_sum"]], ["mod", "theorem", "ext", ["direct_sum"]], ["mod", "theorem", "ext_iff", ["direct_sum"]], ["mod", "def", "lmk", ["direct_sum"]], ["mod", "def", "lof", ["direct_sum"]], ["mod", "theorem", "lof_apply", ["direct_sum"]], ["mod", "theorem", "mk_smul", ["direct_sum"]], ["mod", "theorem", "of_smul", ["direct_sum"]], ["mod", "theorem", "single_eq_lof", ["direct_sum"]], ["mod", "theorem", "ext", ["direct_sum", "to_module"]], ["mod", "theorem", "unique", ["direct_sum", "to_module"]], ["mod", "def", "to_module", ["direct_sum"]], ["mod", "theorem", "to_module_lof", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "theorem", "infi_ker_lapply_le_bot", ["finsupp"]], ["mod", "theorem", "ker_lsingle", ["finsupp"]], ["mod", "def", "lapply", ["finsupp"]], ["mod", "theorem", "lapply_apply", ["finsupp"]], ["mod", "def", "lmap_domain", ["finsupp"]], ["mod", "theorem", "lmap_domain_apply", ["finsupp"]], ["mod", "theorem", "lmap_domain_id", ["finsupp"]], ["mod", "theorem", "lmap_domain_total", ["finsupp"]], ["mod", "def", "lsingle", ["finsupp"]], ["mod", "theorem", "lsingle_apply", ["finsupp"]], ["mod", "def", "lsubtype_domain", ["finsupp"]], ["mod", "theorem", "lsubtype_domain_apply", ["finsupp"]], ["mod", "def", "lsum", ["finsupp"]], ["mod", "theorem", "lsum_apply", ["finsupp"]], ["mod", "theorem", "mem_span_iff_total", ["finsupp"]], ["mod", "theorem", "mem_supported'", ["finsupp"]], ["mod", "theorem", "mem_supported", ["finsupp"]], ["mod", "theorem", "range_total", ["finsupp"]], ["mod", "def", "restrict_dom", ["finsupp"]], ["mod", "theorem", "restrict_dom_apply", ["finsupp"]], ["mod", "theorem", "single_mem_supported", ["finsupp"]], ["mod", "theorem", "span_single_image", ["finsupp"]], ["mod", "def", "supported", ["finsupp"]], ["mod", "theorem", "supported_empty", ["finsupp"]], ["mod", "theorem", "supported_eq_span_single", ["finsupp"]], ["mod", "theorem", "supported_univ", ["finsupp"]], ["mod", "theorem", "supr_lsingle_range", ["finsupp"]], ["mod", "theorem", "total_apply", ["finsupp"]], ["mod", "theorem", "total_emb_domain", ["finsupp"]], ["mod", "theorem", "total_map_domain", ["finsupp"]], ["mod", "theorem", "total_on_range", ["finsupp"]], ["mod", "theorem", "total_range", ["finsupp"]], ["mod", "theorem", "total_single", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["mod", "theorem", "cardinal_lt_omega_of_dim_lt_omega", []], ["mod", "theorem", "cardinal_mk_eq_cardinal_mk_field_pow_dim", []], ["mod", "theorem", "eq_bot_iff_dim_eq_zero", []], ["mod", "def", "equiv_of_dim_eq_dim", []], ["mod", "theorem", "dim_eq", ["finsupp"]], ["mod", "theorem", "is_basis_single", ["finsupp"]], ["mod", "theorem", "linear_independent_single", ["finsupp"]], ["mod", "theorem", "injective_of_surjective", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "def", "lin_equiv_matrix'", []], ["mod", "def", "lin_equiv_matrix", []], ["mod", "def", "to_matrix", ["linear_map"]], ["mod", "def", "to_matrixₗ", ["linear_map"]], ["mod", "theorem", "diagonal_comp_std_basis", ["matrix"]], ["mod", "theorem", "diagonal_to_lin", ["matrix"]], ["mod", "def", "eval", ["matrix"]], ["mod", "theorem", "ker_diagonal_to_lin", ["matrix"]], ["mod", "theorem", "mul_to_lin", ["matrix"]], ["mod", "theorem", "proj_diagonal", ["matrix"]], ["mod", "theorem", "range_diagonal", ["matrix"]], ["mod", "theorem", "rank_diagonal", ["matrix"]], ["mod", "theorem", "rank_vec_mul_vec", ["matrix"]], ["mod", "def", "to_lin", ["matrix"]], ["mod", "theorem", "to_lin_add", ["matrix"]], ["mod", "theorem", "to_lin_apply", ["matrix"]], ["mod", "theorem", "to_lin_zero", ["matrix"]], ["mod", "theorem", "to_lin_to_matrix", []], ["mod", "theorem", "to_matrix_to_lin", []]]}, {"oldPath": "src/linear_algebra/sesquilinear_form.lean", "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["mod", "def", "is_alt", ["alt_sesq_form"]], ["mod", "theorem", "neg", ["alt_sesq_form"]], ["mod", "theorem", "self_eq_zero", ["alt_sesq_form"]], ["mod", "theorem", "eq_zero", ["refl_sesq_form"]], ["mod", "def", "is_refl", ["refl_sesq_form"]], ["mod", "theorem", "ortho_sym", ["refl_sesq_form"]], ["mod", "theorem", "add_left", ["sesq_form"]], ["mod", "theorem", "add_right", ["sesq_form"]], ["mod", "theorem", "ext", ["sesq_form"]], ["mod", "def", "is_ortho", ["sesq_form"]], ["mod", "theorem", "neg_left", ["sesq_form"]], ["mod", "theorem", "neg_right", ["sesq_form"]], ["mod", "theorem", "ortho_smul_left", ["sesq_form"]], ["mod", "theorem", "ortho_smul_right", ["sesq_form"]], ["mod", "theorem", "ortho_zero", ["sesq_form"]], ["mod", "theorem", "smul_left", ["sesq_form"]], ["mod", "theorem", "smul_right", ["sesq_form"]], ["mod", "theorem", "sub_left", ["sesq_form"]], ["mod", "theorem", "sub_right", ["sesq_form"]], ["mod", "theorem", "zero_left", ["sesq_form"]], ["mod", "theorem", "zero_right", ["sesq_form"]], ["mod", "structure", "sesq_form", []], ["mod", "theorem", "is_refl", ["sym_sesq_form"]], ["mod", "def", "is_sym", ["sym_sesq_form"]], ["mod", "theorem", "ortho_sym", ["sym_sesq_form"]], ["mod", "theorem", "sym", ["sym_sesq_form"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "def", "direct_sum", ["tensor_product"]]]}]}, {"timestamp": 1570698038, "sha": "dc788a0b", "message": "feat(topology/sequences): every first-countable space is sequential (#1528)\n* feat(topology/sequences): every first-countable space is sequential\n* fixup style\n* fixup comments\n* remove redundant type ascription", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "countable_iff_exists_surjective_to_subtype", ["set"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "directed_of_mono", []]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_subtype'", ["lattice"]]]}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": [["add", "def", "has_countable_basis", ["filter"]], ["add", "theorem", "has_countable_basis_iff_mono_seq", ["filter"]], ["add", "theorem", "has_countable_basis_iff_seq", ["filter"]], ["add", "theorem", "has_countable_basis_of_seq", ["filter"]], ["add", "theorem", "mono_seq_of_has_countable_basis", ["filter"]], ["add", "theorem", "seq_of_has_countable_basis", ["filter"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1570650781, "sha": "7d792ec4", "message": "chore(ring_theory/adjoin_root): remove some unused decidable_eq (#1530)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["mod", "def", "adjoin_root", []]]}]}, {"timestamp": 1570636850, "sha": "a17a9a6a", "message": "fix(tactic/{use,ring}): instantiate metavariables in goal (#1520)\n`use` now tidies up the subgoals that it leaves behind after instantiating constructors.\n`ring` is sensitive to the presence of such metavariables, and we can't guarantee that it doesn't see any,\nso it should check for them before it runs.", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}]}, {"timestamp": 1570633194, "sha": "45633aa0", "message": "refactor(topology/algebra/polynomial): move topology.instances.polynomial (#1527)", "changes": [{"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/topology/instances/polynomial.lean", "newPath": "src/topology/algebra/polynomial.lean", "changes": []}]}, {"timestamp": 1570631059, "sha": "0ea83c09", "message": "docs(data/holor): some additional documentation (#1526)", "changes": [{"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}]}, {"timestamp": 1570598684, "sha": "6ccfe5a3", "message": "feat(algebra/ordered...): Two tiny lemmas (#1522)\n* feat(algebra/ordered...): Two tiny lemmas\n* style(src/algebra/ordered_field)\nCo-Authored-By: Reid Barton ", "changes": [{"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "lt_of_nat_ceil_lt", []], ["mod", "theorem", "nat_ceil_lt_add_one", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "one_div_lt", []]]}]}, {"timestamp": 1570552382, "sha": "7c560512", "message": "doc(linear_algebra/basis): add doc (#1503)\n* doc(linear_algebra/basis): add doc\n* doc(linear_algebra/basis): shorten docstrings", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}]}, {"timestamp": 1570550058, "sha": "6b15eb29", "message": "chore(analysis): put lemmas in normed_field namespace (#1517)\nThe motivation is to be able to state, say norm_mul for subrings of a\nnormed field, typically p-adic integers. That way we can have\npadic_int.norm_mul, open the padic_int namespace and have no ambiguous\nname.", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_int_of_nonneg", ["complex"]], ["del", "theorem", "exists_norm_lt_one", []], ["del", "theorem", "exists_one_lt_norm", []], ["del", "theorem", "norm_div", []], ["del", "theorem", "norm_fpow", []], ["del", "theorem", "norm_inv", []], ["del", "theorem", "norm_mul", []], ["del", "theorem", "norm_one", []], ["del", "theorem", "norm_pow", []], ["mod", "theorem", "norm_pow_le", []], ["del", "theorem", "norm_prod", []], ["add", "theorem", "exists_norm_lt_one", ["normed_field"]], ["add", "theorem", "exists_one_lt_norm", ["normed_field"]], ["add", "theorem", "norm_div", ["normed_field"]], ["add", "theorem", "norm_fpow", ["normed_field"]], ["add", "theorem", "norm_inv", ["normed_field"]], ["add", "theorem", "norm_mul", ["normed_field"]], ["add", "theorem", "norm_one", ["normed_field"]], ["add", "theorem", "norm_pow", ["normed_field"]], ["add", "theorem", "norm_prod", ["normed_field"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["mod", "theorem", "norm_one", ["padic_norm_z"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1570542719, "sha": "afda1a2c", "message": "refactor(topology/continuous_on): move continuous_{on,within_at} to own file (#1516)\n* refactor(topology/continuous_on): move continuous_{on,within_at} to own file\n* Update src/topology/continuous_on.lean", "changes": [{"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "continuous_at", ["continuous"]], ["add", "theorem", "comp", ["continuous_at"]], ["add", "theorem", "preimage_mem_nhds", ["continuous_at"]], ["del", "def", "continuous_on", []], ["del", "def", "continuous_within_at", []], ["del", "theorem", "inter_mem_nhds_within", []], ["del", "theorem", "map_nhds_within", []], ["del", "theorem", "mem_nhds_within", []], ["del", "def", "nhds_within", []], ["del", "theorem", "nhds_within_empty", []], ["del", "theorem", "nhds_within_eq", []], ["del", "theorem", "nhds_within_eq_nhds_within", []], ["del", "theorem", "nhds_within_eq_of_open", []], ["del", "theorem", "nhds_within_inter'", []], ["del", "theorem", "nhds_within_inter", []], ["del", "theorem", "nhds_within_le_of_mem", []], ["del", "theorem", "nhds_within_mono", []], ["del", "theorem", "nhds_within_restrict''", []], ["del", "theorem", "nhds_within_restrict'", []], ["del", "theorem", "nhds_within_restrict", []], ["del", "theorem", "nhds_within_union", []], ["del", "theorem", "nhds_within_univ", []], ["del", "theorem", "self_mem_nhds_within", []], ["del", "theorem", "tendsto_if_nhds_within", []], ["del", "theorem", "tendsto_nhds_within_mono_left", []], ["del", "theorem", "tendsto_nhds_within_mono_right", []], ["del", "theorem", "tendsto_nhds_within_of_tendsto_nhds", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["del", "theorem", "prod", ["continuous_on"]], ["del", "theorem", "prod", ["continuous_within_at"]]]}, {"oldPath": null, "newPath": "src/topology/continuous_on.lean", "changes": [["add", "theorem", "comp_continuous_on", ["continuous"]], ["add", "theorem", "continuous_on", ["continuous"]], ["add", "theorem", "continuous_within_at", ["continuous_at"]], ["add", "theorem", "continuous_iff_continuous_on_univ", []], ["add", "theorem", "comp", ["continuous_on"]], ["add", "theorem", "congr_mono", ["continuous_on"]], ["add", "theorem", "mono", ["continuous_on"]], ["add", "theorem", "preimage_closed_of_closed", ["continuous_on"]], ["add", "theorem", "preimage_interior_subset_interior_preimage", ["continuous_on"]], ["add", "theorem", "preimage_open_of_open", ["continuous_on"]], ["add", "theorem", "prod", ["continuous_on"]], ["add", "def", "continuous_on", []], ["add", "theorem", "continuous_on_const", []], ["add", "theorem", "continuous_on_iff'", []], ["add", "theorem", "continuous_on_iff", []], ["add", "theorem", "continuous_on_iff_continuous_restrict", []], ["add", "theorem", "continuous_on_iff_is_closed", []], ["add", "theorem", "continuous_on_of_locally_continuous_on", []], ["add", "theorem", "continuous_on_open_iff", []], ["add", "theorem", "continuous_on_open_of_generate_from", []], ["add", "theorem", "comp", ["continuous_within_at"]], ["add", "theorem", "congr_of_mem_nhds_within", ["continuous_within_at"]], ["add", "theorem", "continuous_at", ["continuous_within_at"]], ["add", "theorem", "mono", ["continuous_within_at"]], ["add", "theorem", "preimage_mem_nhds_within", ["continuous_within_at"]], ["add", "theorem", "prod", ["continuous_within_at"]], ["add", "theorem", "tendsto_nhds_within_image", ["continuous_within_at"]], ["add", "def", "continuous_within_at", []], ["add", "theorem", "continuous_within_at_iff_continuous_at_restrict", []], ["add", "theorem", "continuous_within_at_iff_ptendsto_res", []], ["add", "theorem", "continuous_within_at_inter'", []], ["add", "theorem", "continuous_within_at_inter", []], ["add", "theorem", "continuous_within_at_univ", []], ["add", "theorem", "inter_mem_nhds_within", []], ["add", "theorem", "map_nhds_within", []], ["add", "theorem", "mem_nhds_within", []], ["add", "theorem", "mem_nhds_within_subtype", []], ["add", "def", "nhds_within", []], ["add", "theorem", "nhds_within_empty", []], ["add", "theorem", "nhds_within_eq", []], ["add", "theorem", "nhds_within_eq_map_subtype_val", []], ["add", "theorem", "nhds_within_eq_nhds_within", []], ["add", "theorem", "nhds_within_eq_of_open", []], ["add", "theorem", "nhds_within_inter'", []], ["add", "theorem", "nhds_within_inter", []], ["add", "theorem", "nhds_within_le_comap", []], ["add", "theorem", "nhds_within_le_of_mem", []], ["add", "theorem", "nhds_within_mono", []], ["add", "theorem", "nhds_within_restrict''", []], ["add", "theorem", "nhds_within_restrict'", []], ["add", "theorem", "nhds_within_restrict", []], ["add", "theorem", "nhds_within_subtype", []], ["add", "theorem", "nhds_within_union", []], ["add", "theorem", "nhds_within_univ", []], ["add", "theorem", "principal_subtype", []], ["add", "theorem", "self_mem_nhds_within", []], ["add", "theorem", "tendsto_if_nhds_within", []], ["add", "theorem", "tendsto_nhds_within_iff_subtype", []], ["add", "theorem", "tendsto_nhds_within_mono_left", []], ["add", "theorem", "tendsto_nhds_within_mono_right", []], ["add", "theorem", "tendsto_nhds_within_of_tendsto_nhds", []]]}, {"oldPath": "src/topology/local_homeomorph.lean", "newPath": "src/topology/local_homeomorph.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["del", "theorem", "comp_continuous_on", ["continuous"]], ["del", "theorem", "continuous_at", ["continuous"]], ["del", "theorem", "continuous_on", ["continuous"]], ["del", "theorem", "comp", ["continuous_at"]], ["del", "theorem", "continuous_within_at", ["continuous_at"]], ["del", "theorem", "preimage_mem_nhds", ["continuous_at"]], ["del", "theorem", "continuous_iff_continuous_on_univ", []], ["del", "theorem", "comp", ["continuous_on"]], ["del", "theorem", "congr_mono", ["continuous_on"]], ["del", "theorem", "mono", ["continuous_on"]], ["del", "theorem", "preimage_closed_of_closed", ["continuous_on"]], ["del", "theorem", "preimage_interior_subset_interior_preimage", ["continuous_on"]], ["del", "theorem", "preimage_open_of_open", ["continuous_on"]], ["del", "theorem", "continuous_on_const", []], ["del", "theorem", "continuous_on_iff'", []], ["del", "theorem", "continuous_on_iff", []], ["del", "theorem", "continuous_on_iff_continuous_restrict", []], ["del", "theorem", "continuous_on_iff_is_closed", []], ["del", "theorem", "continuous_on_of_locally_continuous_on", []], ["del", "theorem", "continuous_on_open_iff", []], ["del", "theorem", "continuous_on_open_of_generate_from", []], ["del", "theorem", "comp", ["continuous_within_at"]], ["del", "theorem", "congr_of_mem_nhds_within", ["continuous_within_at"]], ["del", "theorem", "continuous_at", ["continuous_within_at"]], ["del", "theorem", "mono", ["continuous_within_at"]], ["del", "theorem", "preimage_mem_nhds_within", ["continuous_within_at"]], ["del", "theorem", "tendsto_nhds_within_image", ["continuous_within_at"]], ["del", "theorem", "continuous_within_at_iff_continuous_at_restrict", []], ["del", "theorem", "continuous_within_at_iff_ptendsto_res", []], ["del", "theorem", "continuous_within_at_inter'", []], ["del", "theorem", "continuous_within_at_inter", []], ["del", "theorem", "continuous_within_at_univ", []], ["del", "theorem", "mem_nhds_within_subtype", []], ["del", "theorem", "nhds_within_eq_map_subtype_val", []], ["del", "theorem", "nhds_within_le_comap", []], ["del", "theorem", "nhds_within_subtype", []], ["del", "theorem", "principal_subtype", []], ["del", "theorem", "tendsto_nhds_within_iff_subtype", []]]}]}, {"timestamp": 1570501584, "sha": "045d931e", "message": "feat(tactic/find): find defs as well as theorems (#1512)\n* feat(tactic/find): find defs as well as theorems\n* use env.mfold\n* use try", "changes": [{"oldPath": "src/tactic/find.lean", "newPath": "src/tactic/find.lean", "changes": []}]}, {"timestamp": 1570494529, "sha": "ef7248f7", "message": "feat(data/quot): define `quotient.map₂'`, use it for group quotient (#1507)", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1570488180, "sha": "bf224080", "message": "chore(topology/algebra/group_completion): missing namespace (#1518)", "changes": [{"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["del", "theorem", "coe_zero", []], ["add", "theorem", "coe_zero", ["uniform_space", "completion"]]]}]}, {"timestamp": 1570485179, "sha": "1bf831f2", "message": "refactor(topology/dense_embedding): move dense embeddings to new file (#1515)", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/dense_embedding.lean", "changes": [["add", "theorem", "inj_iff", ["dense_embedding"]], ["add", "theorem", "mk'", ["dense_embedding"]], ["add", "theorem", "to_embedding", ["dense_embedding"]], ["add", "structure", "dense_embedding", []], ["add", "theorem", "closure_image_nhds_of_nhds", ["dense_inducing"]], ["add", "theorem", "closure_range", ["dense_inducing"]], ["add", "theorem", "comap_nhds_neq_bot", ["dense_inducing"]], ["add", "theorem", "continuous_extend", ["dense_inducing"]], ["add", "def", "extend", ["dense_inducing"]], ["add", "theorem", "extend_e_eq", ["dense_inducing"]], ["add", "theorem", "extend_eq", ["dense_inducing"]], ["add", "theorem", "extend_eq_of_cont", ["dense_inducing"]], ["add", "theorem", "mk'", ["dense_inducing"]], ["add", "theorem", "nhds_eq_comap", ["dense_inducing"]], ["add", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_inducing"]], ["add", "theorem", "tendsto_comap_nhds_nhds", ["dense_inducing"]], ["add", "theorem", "tendsto_extend", ["dense_inducing"]], ["add", "structure", "dense_inducing", []], ["add", "theorem", "comp", ["dense_range"]], ["add", "def", "inhabited", ["dense_range"]], ["add", "theorem", "nonempty", ["dense_range"]], ["add", "def", "dense_range", []], ["add", "theorem", "dense_range_iff_closure_eq", []]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["del", "theorem", "inj_iff", ["dense_embedding"]], ["del", "theorem", "mk'", ["dense_embedding"]], ["del", "theorem", "to_embedding", ["dense_embedding"]], ["del", "structure", "dense_embedding", []], ["del", "theorem", "closure_image_nhds_of_nhds", ["dense_inducing"]], ["del", "theorem", "closure_range", ["dense_inducing"]], ["del", "theorem", "comap_nhds_neq_bot", ["dense_inducing"]], ["del", "theorem", "continuous_extend", ["dense_inducing"]], ["del", "def", "extend", ["dense_inducing"]], ["del", "theorem", "extend_e_eq", ["dense_inducing"]], ["del", "theorem", "extend_eq", ["dense_inducing"]], ["del", "theorem", "extend_eq_of_cont", ["dense_inducing"]], ["del", "theorem", "mk'", ["dense_inducing"]], ["del", "theorem", "nhds_eq_comap", ["dense_inducing"]], ["del", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_inducing"]], ["del", "theorem", "tendsto_comap_nhds_nhds", ["dense_inducing"]], ["del", "theorem", "tendsto_extend", ["dense_inducing"]], ["del", "structure", "dense_inducing", []], ["del", "theorem", "comp", ["dense_range"]], ["del", "def", "inhabited", ["dense_range"]], ["del", "theorem", "nonempty", ["dense_range"]], ["del", "def", "dense_range", []], ["del", "theorem", "dense_range_iff_closure_eq", []]]}]}, {"timestamp": 1570482386, "sha": "b3eb34d2", "message": "doc(topology/order): module and definition docstrings (#1505)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1570469086, "sha": "f519a125", "message": "refactor(topology/list): move topology of lists, vectors to new file (#1514)", "changes": [{"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["del", "theorem", "continuous_at_length", ["list"]], ["del", "theorem", "continuous_insert_nth", ["list"]], ["del", "theorem", "continuous_remove_nth", ["list"]], ["del", "theorem", "tendsto_cons'", ["list"]], ["del", "theorem", "tendsto_cons", ["list"]], ["del", "theorem", "tendsto_cons_iff", ["list"]], ["del", "theorem", "tendsto_insert_nth'", ["list"]], ["del", "theorem", "tendsto_insert_nth", ["list"]], ["del", "theorem", "tendsto_nhds", ["list"]], ["del", "theorem", "tendsto_remove_nth", ["list"]], ["del", "theorem", "cons_val", ["vector"]], ["del", "theorem", "continuous_at_remove_nth", ["vector"]], ["del", "theorem", "continuous_insert_nth'", ["vector"]], ["del", "theorem", "continuous_insert_nth", ["vector"]], ["del", "theorem", "continuous_remove_nth", ["vector"]], ["del", "theorem", "tendsto_cons", ["vector"]], ["del", "theorem", "tendsto_insert_nth", ["vector"]]]}, {"oldPath": null, "newPath": "src/topology/list.lean", "changes": [["add", "theorem", "continuous_at_length", ["list"]], ["add", "theorem", "continuous_insert_nth", ["list"]], ["add", "theorem", "continuous_remove_nth", ["list"]], ["add", "theorem", "tendsto_cons'", ["list"]], ["add", "theorem", "tendsto_cons", ["list"]], ["add", "theorem", "tendsto_cons_iff", ["list"]], ["add", "theorem", "tendsto_insert_nth'", ["list"]], ["add", "theorem", "tendsto_insert_nth", ["list"]], ["add", "theorem", "tendsto_nhds", ["list"]], ["add", "theorem", "tendsto_remove_nth", ["list"]], ["add", "theorem", "nhds_cons", []], ["add", "theorem", "nhds_list", []], ["add", "theorem", "nhds_nil", []], ["add", "theorem", "cons_val", ["vector"]], ["add", "theorem", "continuous_at_remove_nth", ["vector"]], ["add", "theorem", "continuous_insert_nth'", ["vector"]], ["add", "theorem", "continuous_insert_nth", ["vector"]], ["add", "theorem", "continuous_remove_nth", ["vector"]], ["add", "theorem", "tendsto_cons", ["vector"]], ["add", "theorem", "tendsto_insert_nth", ["vector"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["del", "theorem", "nhds_cons", []], ["del", "theorem", "nhds_list", []], ["del", "theorem", "nhds_nil", []]]}]}, {"timestamp": 1570466086, "sha": "ddbeb7eb", "message": "refactor(topology/maps): avoid repetition in dense embeddings (#1513)", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}]}, {"timestamp": 1570290257, "sha": "78a78efc", "message": "feat(group_theory/submonoid): define `subtype.comm_monoid` (#1511)", "changes": [{"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}]}, {"timestamp": 1570278029, "sha": "7df0e350", "message": "chore(topology): sanity_check pass (#1510)\n* chore(topology): sanity_check pass\n* fix(topology/uniform_space/separation): fix build\n* fix(topology/metric_space): some more namespace fixes", "changes": [{"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["mod", "theorem", "is_closed", ["open_subgroup"]], ["mod", "theorem", "is_open_of_nonempty_open_subset", ["open_subgroup"]], ["mod", "theorem", "is_open_of_open_subgroup", ["open_subgroup"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "is_open_prod_iff'", []]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["del", "def", "Kuratowski_embedding", ["Kuratowski_embedding"]], ["del", "theorem", "Kuratowski_embedding_isometry", ["Kuratowski_embedding"]], ["del", "def", "Kuratowski_embedding", ["Kuratowski_embedding", "nonempty_compacts"]], ["del", "def", "ℓ_infty_ℝ", ["Kuratowski_embedding"]], ["add", "def", "Kuratowski_embedding", []], ["add", "def", "Kuratowski_embedding", ["nonempty_compacts"]], ["add", "def", "ℓ_infty_ℝ", []]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1570252707, "sha": "98dbe27a", "message": "feat(algebra/opposites): add some trivial `@[simp]` lemmas (#1508)", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["add", "theorem", "op_add", ["opposite"]], ["add", "theorem", "op_inv", ["opposite"]], ["add", "theorem", "op_mul", ["opposite"]], ["add", "theorem", "op_neg", ["opposite"]], ["add", "theorem", "op_one", ["opposite"]], ["add", "theorem", "op_zero", ["opposite"]], ["add", "theorem", "unop_add", ["opposite"]], ["add", "theorem", "unop_inv", ["opposite"]], ["add", "theorem", "unop_mul", ["opposite"]], ["add", "theorem", "unop_neg", ["opposite"]], ["add", "theorem", "unop_one", ["opposite"]], ["add", "theorem", "unop_zero", ["opposite"]]]}]}, {"timestamp": 1570199115, "sha": "2f1bd1e5", "message": "fix(data/list/min_max): docs typo (#1504)", "changes": [{"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": []}]}, {"timestamp": 1570198107, "sha": "343237d1", "message": "feat(algebra/Module): the category of R-modules (#1420)\n* Adds Module category\n* Move punit module instance to punit_instances.lean\n* Minor formatting\n* Use coercions for Module morphisms to functions\n* Small formatting improvements to Module\n* Move module_id to id_apply\n* Be specific about the universe Modules live in\n* Minor indentation formatting\n* updates for #1380\n* oops\n* remove ext lemma, unnecessary\n* reverting changes in TopCommRing\n* Change name of `module_hom_comp`\nCo-Authored-By: Johan Commelin \n* Update todo in src/algebra/category/Module/basic.lean\nCo-Authored-By: Scott Morrison ", "changes": [{"oldPath": null, "newPath": "src/algebra/category/Module/basic.lean", "changes": [["add", "theorem", "coe_comp", ["Module"]], ["add", "theorem", "id_apply", ["Module"]], ["add", "def", "of", ["Module"]], ["add", "structure", "Module", []]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}]}, {"timestamp": 1570190215, "sha": "494132e1", "message": "feat(algebra): commuting elements (#1089)\n* Not sure how this works\n* Small refactor of geometric sums\n* Properties of commuting elements\n* Geometric sums moved to geom_sum.lean\n* Geometric sums, two commuting variables\n* Import geom_sum.lean\n* Cover commuting elements of noncommutative rings\n* Whitespace\n* Add file headers\n* Delete stray file\n* Sum/prod over range 0, range 1\n* Add simp lemmas\n* Various changes from PR review\n* Add semigroup case\n* Changes from PR review\n* Corrected all_commute to commute.all\n* Minor changes from PR review\n* Change line endings back to unix\n* `@[to_additive]` can't be a `local attribute`\n* Rename `add_pow_comm` to `add_pow_of_commute` as suggested by @jcommelin\n* Add a few missing instances\n* DRY\n* Notation for `gsmul` should go into `add_group`, not `group`\n* Prove `gsmul_one`\n* Reorder `algebra/commute`, add more lemmas\n* Add docs, rename `geom_sum₂_mul_add_comm` to `commute.geom_sum₂_mul_add`.\n* Rename, add a docstring\n* Fix a typo spotted by @ChrisHughes24\n* Move common args to `variables`\n* Rename `commute.mul` to `commute.mul_right` etc.\n* Add some `@[simp]` attributes.\n* More `@[simp]`\n* Add some `_iff` versions", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_range_one", ["finset"]], ["add", "theorem", "prod_range_zero", ["finset"]], ["add", "theorem", "sum_range_one", ["finset"]], ["del", "theorem", "geom_sum", []], ["del", "theorem", "geom_sum_inv", []], ["del", "theorem", "geom_sum_mul", []], ["del", "theorem", "geom_sum_mul_add", []]]}, {"oldPath": null, "newPath": "src/algebra/commute.lean", "changes": [["add", "theorem", "centralizer_closure", ["add_monoid"]], ["add", "theorem", "inter_units_is_subgroup", ["centralizer"]], ["add", "def", "centralizer", []], ["add", "theorem", "add_left", ["commute"]], ["add", "theorem", "add_right", ["commute"]], ["add", "theorem", "cast_int_left", ["commute"]], ["add", "theorem", "cast_int_right", ["commute"]], ["add", "theorem", "cast_nat_left", ["commute"]], ["add", "theorem", "cast_nat_right", ["commute"]], ["add", "theorem", "gpow_gpow", ["commute"]], ["add", "theorem", "gpow_gpow_self", ["commute"]], ["add", "theorem", "gpow_left", ["commute"]], ["add", "theorem", "gpow_right", ["commute"]], ["add", "theorem", "gpow_self", ["commute"]], ["add", "theorem", "gsmul_gsmul", ["commute"]], ["add", "theorem", "gsmul_left", ["commute"]], ["add", "theorem", "gsmul_right", ["commute"]], ["add", "theorem", "gsmul_self", ["commute"]], ["add", "theorem", "inv_inv", ["commute"]], ["add", "theorem", "inv_inv_iff", ["commute"]], ["add", "theorem", "inv_left", ["commute"]], ["add", "theorem", "inv_left_iff", ["commute"]], ["add", "theorem", "inv_right", ["commute"]], ["add", "theorem", "inv_right_iff", ["commute"]], ["add", "theorem", "list_prod_left", ["commute"]], ["add", "theorem", "list_prod_right", ["commute"]], ["add", "theorem", "mul_left", ["commute"]], ["add", "theorem", "mul_right", ["commute"]], ["add", "theorem", "neg_left", ["commute"]], ["add", "theorem", "neg_left_iff", ["commute"]], ["add", "theorem", "neg_one_left", ["commute"]], ["add", "theorem", "neg_one_right", ["commute"]], ["add", "theorem", "neg_right", ["commute"]], ["add", "theorem", "neg_right_iff", ["commute"]], ["add", "theorem", "one_left", ["commute"]], ["add", "theorem", "one_right", ["commute"]], ["add", "theorem", "pow_left", ["commute"]], ["add", "theorem", "pow_pow", ["commute"]], ["add", "theorem", "pow_pow_self", ["commute"]], ["add", "theorem", "pow_right", ["commute"]], ["add", "theorem", "pow_self", ["commute"]], ["add", "theorem", "self_gpow", ["commute"]], ["add", "theorem", "self_gsmul", ["commute"]], ["add", "theorem", "self_gsmul_gsmul", ["commute"]], ["add", "theorem", "self_pow", ["commute"]], ["add", "theorem", "self_smul", ["commute"]], ["add", "theorem", "self_smul_smul", ["commute"]], ["add", "theorem", "smul_left", ["commute"]], ["add", "theorem", "smul_right", ["commute"]], ["add", "theorem", "smul_self", ["commute"]], ["add", "theorem", "smul_smul", ["commute"]], ["add", "theorem", "sub_left", ["commute"]], ["add", "theorem", "sub_right", ["commute"]], ["add", "theorem", "units_coe", ["commute"]], ["add", "theorem", "units_inv_left", ["commute"]], ["add", "theorem", "units_inv_left_iff", ["commute"]], ["add", "theorem", "units_inv_right", ["commute"]], ["add", "theorem", "units_inv_right_iff", ["commute"]], ["add", "theorem", "zero_left", ["commute"]], ["add", "theorem", "zero_right", ["commute"]], ["add", "def", "commute", []], ["add", "theorem", "centralizer_closure", ["group"]], ["add", "theorem", "mem_centralizer", []], ["add", "theorem", "centralizer_closure", ["monoid"]], ["add", "theorem", "neg_pow", []], ["add", "theorem", "centralizer_closure", ["ring"]]]}, {"oldPath": null, "newPath": "src/algebra/geom_sum.lean", "changes": [["add", "def", "geom_series", []], ["add", "theorem", "geom_series_def", []], ["add", "theorem", "geom_series_one", []], ["add", "theorem", "geom_series_zero", []], ["add", "def", "geom_series₂", []], ["add", "theorem", "geom_series₂_def", []], ["add", "theorem", "geom_series₂_one", []], ["add", "theorem", "geom_series₂_with_one", []], ["add", "theorem", "geom_series₂_zero", []], ["add", "theorem", "geom_sum", []], ["add", "theorem", "geom_sum_inv", []], ["add", "theorem", "geom_sum_mul", []], ["add", "theorem", "geom_sum_mul_add", []], ["add", "theorem", "geom_sum_mul_neg", []], ["add", "theorem", "geom_sum₂_mul", []], ["add", "theorem", "geom_sum₂_mul_add", []], ["add", "theorem", "geom_sum₂_mul_comm", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "gsmul_one", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": [["mod", "theorem", "add_pow", []], ["add", "theorem", "add_pow", ["commute"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["del", "theorem", "inter", ["is_submonoid"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1570149914, "sha": "3c58f160", "message": "doc(linear_algebra/basic): add module and declaration doc strings (#1501)\n* doc(linear_algebra/basic): declaration doc strings\n* doc(linear_algebra/basic): improve module doc\n* Update src/linear_algebra/basic.lean\nCo-Authored-By: Floris van Doorn ", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1570132383, "sha": "f8543711", "message": "feat(tactic/squeeze_simp): better handling of private declarations (#1498)\n* feat(tactic/squeeze_simp): better handling of private declarations\n* Update core.lean", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1570124275, "sha": "4ca1e634", "message": "chore(*): fix errors in library and sanity_check (#1499)\n* chore(*): some cleanup by sanity_check\n* fix(is_auto_generated): also check for ginductives\n* fix(sanity_check): imp_intro is sanity_skip\n* fix(sanity_check): don't report names of instances\n* first errors\n* second errors\n* doc(logic/basic): add note\n* add link to note\n* mention letI", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_eq_one", ["finset"]], ["mod", "theorem", "sum_le_sum_of_ne_zero", ["finset"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "abs_add", []], ["del", "def", "abs_add", []], ["add", "theorem", "sub_abs_le_abs_sub", []], ["del", "def", "sub_abs_le_abs_sub", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["del", "def", "angle", ["real", "angle"]], ["add", "def", "angle", ["real"]]]}, {"oldPath": "src/category/functor.lean", "newPath": "src/category/functor.lean", "changes": [["mod", "def", "const", ["functor"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "inv_inv", ["category_theory", "is_iso"]], ["del", "theorem", "inv_inv", ["category_theory", "is_iso", "is_iso"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": [["add", "def", "{l}", ["turing", "TM2to1"]], ["del", "theorem", "{l}", ["turing", "TM2to1"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "card_le_card_of_inj_on", ["finset"]], ["mod", "theorem", "card_lt_card", ["finset"]], ["mod", "theorem", "fold_map", ["finset"]], ["mod", "theorem", "image_const", ["finset"]], ["mod", "theorem", "image_singleton", ["finset"]], ["mod", "theorem", "map_empty", ["finset"]], ["mod", "def", "empty", ["finset", "pi"]], ["mod", "theorem", "subset_image_iff", ["finset"]], ["mod", "theorem", "subset_insert", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["del", "def", "opposite", ["opposite"]], ["add", "def", "opposite", []]]}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": [["add", "theorem", "corec_eq", ["computation"]], ["del", "def", "corec_eq", ["computation"]], ["add", "theorem", "ret_left", ["computation", "lift_rel_aux"]], ["del", "def", "ret_left", ["computation", "lift_rel_aux"]], ["add", "theorem", "ret_right", ["computation", "lift_rel_aux"]], ["del", "def", "ret_right", ["computation", "lift_rel_aux"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "coe_to_finset'", ["finset"]], ["mod", "def", "fintype_of_fintype_image", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["mod", "theorem", "right_inv_on_of_eq_on_left", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "imp", ["Exists"]], ["del", "def", "imp", ["Exists"]], ["mod", "theorem", "exists_imp_exists'", []]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": [["add", "def", "has_prefix", ["name"]]]}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "theorem", "equiv_lt_apply", ["principal_seg"]], ["mod", "theorem", "equiv_lt_top", ["principal_seg"]], ["mod", "theorem", "lt_le_top", ["principal_seg"]], ["mod", "theorem", "of_element_top", ["principal_seg"]], ["mod", "theorem", "top_eq", ["principal_seg"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": [["mod", "theorem", "{u}", ["tactic", "interactive"]]]}, {"oldPath": "src/tactic/sanity_check.lean", "newPath": "src/tactic/sanity_check.lean", "changes": []}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": [["del", "def", "open_nhds", ["topological_space", "open_nhds"]], ["add", "def", "open_nhds", ["topological_space"]]]}, {"oldPath": "test/sanity_check.lean", "newPath": "test/sanity_check.lean", "changes": []}]}, {"timestamp": 1570095213, "sha": "4bb8d447", "message": "feat(data/equiv/algebra): automorphism groups for other structures (#1141)\n* Added automorphism groups to data/algebra/lean\n* feat(data/equiv/algebra):\nadded automorphism groups\n* feat(data/equiv/algebra)\nAdded automorphism groups\n* Minor formatting\n* feat(data/equiv/algebra): add automorphism groups\n* Changes based on comments\n* minor change\n* changes to namespaces and comments added\n* expanding comments\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>\n* Added monoid case\n* Changed Type to Type* also further up in the file\n* typo\n* I made it compile but not pretty\n* More changes\n* fixed typo\n* fix universes\n* update docs\n* minor change\n* use coercion rather than to_fun in ext lemmas\n* Use ≃+* and coercion in ring_equiv.ext\n* arguments of group.aut?\n* generalize ring_equiv.ext to semirings\n* Various changes\n* Use only `mul_aut`, `add_aut`, and `ring_aut` for automorphisms.\n* Make `*_equiv.ext` arguments agree with `equiv.ext`.\n* Adjust documentation.\n* Fix compile, add `add_aut.to_perm`", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "def", "to_perm", ["add_aut"]], ["add", "def", "to_perm", ["mul_aut"]], ["add", "def", "mul_aut", []], ["add", "theorem", "ext", ["mul_equiv"]], ["add", "def", "to_add_aut", ["ring_aut"]], ["add", "def", "to_mul_aut", ["ring_aut"]], ["add", "def", "to_perm", ["ring_aut"]], ["add", "def", "ring_aut", []], ["add", "theorem", "ext", ["ring_equiv"]]]}]}, {"timestamp": 1570034554, "sha": "bea1c20d", "message": "fix(dioph): remove global vector3 notation (#1502)\n* fix(dioph): remove global vector3 notation\nit overloads list notation, and then tries to find a coercion from vector3 to list\n* also make other notations in dioph local\n* undo localizing ++, overloading that is probably fine\n* add comment", "changes": [{"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}]}, {"timestamp": 1570037224, "sha": "39ca4f14", "message": "chore(.): delete CODEOWNERS", "changes": [{"oldPath": "CODEOWNERS", "newPath": null, "changes": []}]}, {"timestamp": 1569955693, "sha": "5ed5f594", "message": "feat(tactic/delta_instance): handle parameters and use in library (#1483)\n* feat(tactic/core): improve delta_instance handler\n* feat(*): use delta_instance derive handler\n* feat(tactic/delta_instance): cleaner handling of application under binders\n* Revert \"feat(tactic/delta_instance): cleaner handling of application under binders\"\nThis reverts commit 4005a2fad571bf922c98f94cbc1154666abc259d.\n* comment apply_under_pis\n* properly get unused name\n* feat(tactic/delta_instance): run with high priority and don't run on inductives\n* Update src/tactic/core.lean\nCo-Authored-By: Floris van Doorn ", "changes": [{"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["del", "def", "dual", ["module"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/compare_reals.lean", "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": [["mod", "def", "Q", ["compare_reals"]]]}, {"oldPath": "test/delta_instance.lean", "newPath": "test/delta_instance.lean", "changes": [["add", "inductive", "P", []], ["add", "def", "S", []], ["add", "def", "X", []], ["add", "def", "id_ring", []]]}]}, {"timestamp": 1569916420, "sha": "800dba4f", "message": "chore(linear_map): use curly brackets for type class in linear_map coe_to_fun (#1493)\n* chore(linear_map): use curly brackets for type class in linear_map coe_to_fun\n* fix", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}]}, {"timestamp": 1569853073, "sha": "374c290e", "message": "chore(linear_algebra): continue removing decidable_eq assumptions (#1404)\n* chore(linear_algebra): continue remocing decidable_eq assumptions\n* chore(data/mv_polynomial): get rid of unnecessary changes to instance depth\n* fix build\n* change class instance depth\n* class_instance depth\nt Please enter the commit message for your changes. Lines starting\n* delete some more decidable_eq\n* Update finite_dimensional.lean\n* Update finite_dimensional.lean\n* Update finite_dimensional.lean", "changes": [{"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["mod", "theorem", "std_basis_eq_single", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "constr_smul", []], ["mod", "theorem", "is_basis_singleton_one", []], ["mod", "theorem", "is_basis_std_basis", ["pi"]], ["mod", "theorem", "linear_independent_std_basis", ["pi"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_quotient", []], ["mod", "theorem", "dim_span", []], ["mod", "theorem", "dim_span_set", []], ["mod", "theorem", "exists_is_basis_fintype", []], ["mod", "theorem", "le_span", ["is_basis"]], ["mod", "theorem", "mk_eq_dim", ["is_basis"]], ["mod", "theorem", "mk_range_eq_dim", ["is_basis"]], ["mod", "theorem", "dim_eq_lift", ["linear_equiv"]], ["mod", "theorem", "mk_eq_mk_of_basis", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finite_dimensional.lean", "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["mod", "theorem", "card_eq_findim", ["finite_dimensional"]], ["mod", "theorem", "of_fg", ["finite_dimensional"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["mod", "def", "lin_equiv_matrix'", []], ["mod", "def", "lin_equiv_matrix", []], ["mod", "theorem", "rank_diagonal", ["matrix"]], ["mod", "theorem", "to_matrix_to_lin", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1569833758, "sha": "c6fab42c", "message": "feat(ring_theory/power_series): order (#1292)\n* First start on power_series\n* Innocent changes\n* Almost a comm_semiring\n* Defined hom from mv_polynomial to mv_power_series; sorrys remain\n* Attempt that seem to go nowhere\n* Working on coeff_mul for polynomials\n* Small progress\n* Finish mv_polynomial.coeff_mul\n* Cleaner proof of mv_polynomial.coeff_mul\n* Fix build\n* WIP\n* Finish proof of mul_assoc\n* WIP\n* Golfing coeff_mul\n* WIP\n* Crazy wf is crazy\n* mv_power_series over local ring is local\n* WIP\n* Add empty line\n* wip\n* wip\n* WIP\n* WIP\n* WIP\n* Add header comments\n* WIP\n* WIP\n* Fix finsupp build\n* Fix build, hopefully\n* Fix build: ideals\n* More docs\n* Update src/data/power_series.lean\nFix typo.\n* Fix build -- bump instance search depth\n* Make changes according to some of the review comments\n* Use 'formal' in the names\n* Use 'protected' in more places, remove '@simp's\n* Make 'inv_eq_zero' an iff\n* Generalize to non-commutative scalars\n* Order of a power series\n* Start on formal Laurent series\n* WIP\n* Remove file. It's for another PR.\n* Add stuff about order\n* Remove old file\n* Basics on order of power series\n* Lots of stuff\n* Move stuff on kernels\n* Move stuff on ker to the right place\n* Fix build\n* Add elim_cast attributes, update documentation\n* Bundle homs\n* Fix build\n* Remove duplicate trunc_C\n* Fix build", "changes": [{"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "ker_is_prime", ["is_ring_hom"]], ["add", "theorem", "mem_ker", ["is_ring_hom"]], ["add", "theorem", "not_one_mem_ker", ["is_ring_hom"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "theorem", "coe_C", ["mv_polynomial"]], ["add", "theorem", "coe_X", ["mv_polynomial"]], ["add", "theorem", "coe_add", ["mv_polynomial"]], ["add", "theorem", "coe_monomial", ["mv_polynomial"]], ["add", "theorem", "coe_mul", ["mv_polynomial"]], ["add", "theorem", "coe_one", ["mv_polynomial"]], ["add", "theorem", "coe_zero", ["mv_polynomial"]], ["add", "theorem", "coeff_coe", ["mv_polynomial"]], ["del", "def", "to_mv_power_series", ["mv_polynomial"]], ["del", "theorem", "to_mv_power_series_coeff", ["mv_polynomial"]], ["mod", "def", "C", ["mv_power_series"]], ["del", "theorem", "C_add", ["mv_power_series"]], ["del", "theorem", "C_mul", ["mv_power_series"]], ["del", "theorem", "C_one", ["mv_power_series"]], ["del", "theorem", "C_zero", ["mv_power_series"]], ["mod", "def", "X", ["mv_power_series"]], ["add", "theorem", "X_def", ["mv_power_series"]], ["add", "theorem", "X_dvd_iff", ["mv_power_series"]], ["add", "theorem", "X_inj", ["mv_power_series"]], ["add", "theorem", "X_pow_dvd_iff", ["mv_power_series"]], ["add", "theorem", "X_pow_eq", ["mv_power_series"]], ["mod", "def", "coeff", ["mv_power_series"]], ["del", "theorem", "coeff_C_zero", ["mv_power_series"]], ["del", "theorem", "coeff_X''", ["mv_power_series"]], ["del", "theorem", "coeff_X'", ["mv_power_series"]], ["add", "theorem", "coeff_X_pow", ["mv_power_series"]], ["del", "theorem", "coeff_add", ["mv_power_series"]], ["add", "theorem", "coeff_comp_monomial", ["mv_power_series"]], ["add", "theorem", "coeff_index_single_X", ["mv_power_series"]], ["add", "theorem", "coeff_index_single_self_X", ["mv_power_series"]], ["mod", "theorem", "coeff_inv", ["mv_power_series"]], ["mod", "theorem", "coeff_map", ["mv_power_series"]], ["mod", "theorem", "coeff_mul", ["mv_power_series"]], ["del", "theorem", "coeff_neg", ["mv_power_series"]], ["mod", "theorem", "coeff_one", ["mv_power_series"]], ["del", "theorem", "coeff_one_zero", ["mv_power_series"]], ["mod", "theorem", "coeff_trunc", ["mv_power_series"]], ["mod", "theorem", "coeff_zero", ["mv_power_series"]], ["add", "theorem", "coeff_zero_C", ["mv_power_series"]], ["add", "theorem", "coeff_zero_X", ["mv_power_series"]], ["add", "theorem", "coeff_zero_eq_constant_coeff", ["mv_power_series"]], ["add", "theorem", "coeff_zero_eq_constant_coeff_apply", ["mv_power_series"]], ["del", "theorem", "coeff_zero_inv", ["mv_power_series"]], ["del", "theorem", "coeff_zero_inv_of_unit", ["mv_power_series"]], ["add", "theorem", "coeff_zero_one", ["mv_power_series"]], ["add", "def", "constant_coeff", ["mv_power_series"]], ["add", "theorem", "constant_coeff_C", ["mv_power_series"]], ["add", "theorem", "constant_coeff_X", ["mv_power_series"]], ["add", "theorem", "constant_coeff_comp_C", ["mv_power_series"]], ["add", "theorem", "constant_coeff_inv", ["mv_power_series"]], ["add", "theorem", "constant_coeff_inv_of_unit", ["mv_power_series"]], ["add", "theorem", "constant_coeff_map", ["mv_power_series"]], ["add", "theorem", "constant_coeff_one", ["mv_power_series"]], ["add", "theorem", "constant_coeff_zero", ["mv_power_series"]], ["mod", "theorem", "ext", ["mv_power_series"]], ["mod", "theorem", "inv_of_unit_eq'", ["mv_power_series"]], ["mod", "theorem", "inv_of_unit_eq", ["mv_power_series"]], ["del", "theorem", "is_unit_coeff_zero", ["mv_power_series"]], ["add", "theorem", "is_unit_constant_coeff", ["mv_power_series"]], ["mod", "def", "map", ["mv_power_series"]], ["del", "theorem", "map_add", ["mv_power_series"]], ["mod", "theorem", "map_comp", ["mv_power_series"]], ["mod", "theorem", "map_id", ["mv_power_series"]], ["del", "theorem", "map_mul", ["mv_power_series"]], ["del", "theorem", "map_one", ["mv_power_series"]], ["del", "theorem", "map_zero", ["mv_power_series"]], ["mod", "def", "monomial", ["mv_power_series"]], ["del", "theorem", "monomial_add", ["mv_power_series"]], ["add", "theorem", "monomial_mul_monomial", ["mv_power_series"]], ["del", "theorem", "monomial_zero", ["mv_power_series"]], ["add", "theorem", "monomial_zero_eq_C", ["mv_power_series"]], ["add", "theorem", "monomial_zero_eq_C_apply", ["mv_power_series"]], ["mod", "theorem", "mul_inv_of_unit", ["mv_power_series"]], ["mod", "def", "trunc", ["mv_power_series"]], ["mod", "theorem", "trunc_C", ["mv_power_series"]], ["del", "theorem", "trunc_add", ["mv_power_series"]], ["add", "def", "trunc_fun", ["mv_power_series"]], ["mod", "theorem", "trunc_one", ["mv_power_series"]], ["del", "theorem", "trunc_zero", ["mv_power_series"]], ["add", "theorem", "coe_C", ["polynomial"]], ["add", "theorem", "coe_X", ["polynomial"]], ["add", "theorem", "coe_add", ["polynomial"]], ["add", "theorem", "coe_monomial", ["polynomial"]], ["add", "theorem", "coe_mul", ["polynomial"]], ["add", "theorem", "coe_one", ["polynomial"]], ["add", "theorem", "coe_zero", ["polynomial"]], ["add", "theorem", "coeff_coe", ["polynomial"]], ["add", "def", "monomial", ["polynomial"]], ["del", "def", "to_power_series", ["polynomial"]], ["del", "theorem", "to_power_series_coeff", ["polynomial"]], ["mod", "def", "C", ["power_series"]], ["del", "theorem", "C_add", ["power_series"]], ["del", "theorem", "C_mul", ["power_series"]], ["del", "theorem", "C_one", ["power_series"]], ["del", "theorem", "C_zero", ["power_series"]], ["add", "theorem", "X_dvd_iff", ["power_series"]], ["add", "theorem", "X_eq", ["power_series"]], ["add", "theorem", "X_pow_dvd_iff", ["power_series"]], ["add", "theorem", "X_pow_eq", ["power_series"]], ["add", "theorem", "X_prime", ["power_series"]], ["mod", "def", "coeff", ["power_series"]], ["del", "theorem", "coeff_C_zero", ["power_series"]], ["del", "theorem", "coeff_X'", ["power_series"]], ["add", "theorem", "coeff_X_pow", ["power_series"]], ["add", "theorem", "coeff_X_pow_self", ["power_series"]], ["del", "theorem", "coeff_add", ["power_series"]], ["add", "theorem", "coeff_comp_monomial", ["power_series"]], ["add", "theorem", "coeff_def", ["power_series"]], ["mod", "theorem", "coeff_mk", ["power_series"]], ["add", "theorem", "coeff_of_lt_order", ["power_series"]], ["add", "theorem", "coeff_one_X", ["power_series"]], ["del", "theorem", "coeff_one_zero", ["power_series"]], ["add", "theorem", "coeff_order", ["power_series"]], ["del", "theorem", "coeff_zero", ["power_series"]], ["add", "theorem", "coeff_zero_C", ["power_series"]], ["add", "theorem", "coeff_zero_X", ["power_series"]], ["add", "theorem", "coeff_zero_eq_constant_coeff", ["power_series"]], ["add", "theorem", "coeff_zero_eq_constant_coeff_apply", ["power_series"]], ["del", "theorem", "coeff_zero_inv", ["power_series"]], ["del", "theorem", "coeff_zero_inv_of_unit", ["power_series"]], ["add", "theorem", "coeff_zero_one", ["power_series"]], ["add", "def", "constant_coeff", ["power_series"]], ["add", "theorem", "constant_coeff_C", ["power_series"]], ["add", "theorem", "constant_coeff_X", ["power_series"]], ["add", "theorem", "constant_coeff_comp_C", ["power_series"]], ["add", "theorem", "constant_coeff_inv", ["power_series"]], ["add", "theorem", "constant_coeff_inv_of_unit", ["power_series"]], ["add", "theorem", "constant_coeff_one", ["power_series"]], ["add", "theorem", "constant_coeff_zero", ["power_series"]], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["power_series"]], ["mod", "theorem", "ext", ["power_series"]], ["mod", "theorem", "ext_iff", ["power_series"]], ["mod", "theorem", "inv_of_unit_eq'", ["power_series"]], ["mod", "theorem", "inv_of_unit_eq", ["power_series"]], ["add", "theorem", "is_unit_constant_coeff", ["power_series"]], ["mod", "def", "map", ["power_series"]], ["del", "theorem", "map_add", ["power_series"]], ["mod", "theorem", "map_comp", ["power_series"]], ["mod", "theorem", "map_id", ["power_series"]], ["del", "theorem", "map_mul", ["power_series"]], ["del", "theorem", "map_one", ["power_series"]], ["del", "theorem", "map_zero", ["power_series"]], ["mod", "def", "monomial", ["power_series"]], ["del", "theorem", "monomial_add", ["power_series"]], ["del", "theorem", "monomial_zero", ["power_series"]], ["add", "theorem", "monomial_zero_eq_C", ["power_series"]], ["add", "theorem", "monomial_zero_eq_C_apply", ["power_series"]], ["mod", "theorem", "mul_inv_of_unit", ["power_series"]], ["add", "def", "order", ["power_series"]], ["add", "theorem", "order_X", ["power_series"]], ["add", "theorem", "order_X_pow", ["power_series"]], ["add", "theorem", "order_add_ge", ["power_series"]], ["add", "theorem", "order_add_of_order_eq", ["power_series"]], ["add", "theorem", "order_eq", ["power_series"]], ["add", "theorem", "order_eq_nat", ["power_series"]], ["add", "theorem", "order_eq_top", ["power_series"]], ["add", "theorem", "order_finite_of_coeff_ne_zero", ["power_series"]], ["add", "theorem", "order_ge", ["power_series"]], ["add", "theorem", "order_ge_nat", ["power_series"]], ["add", "theorem", "order_le", ["power_series"]], ["add", "theorem", "order_monomial", ["power_series"]], ["add", "theorem", "order_monomial_of_ne_zero", ["power_series"]], ["add", "theorem", "order_mul", ["power_series"]], ["add", "theorem", "order_mul_ge", ["power_series"]], ["add", "theorem", "order_one", ["power_series"]], ["add", "theorem", "order_zero", ["power_series"]], ["add", "theorem", "span_X_is_prime", ["power_series"]], ["mod", "theorem", "trunc_C", ["power_series"]]]}]}, {"timestamp": 1569710656, "sha": "30aa8d2f", "message": "chore(order/basic): rename `monotone_comp` to `monotone.comp`, reorder arguments (#1497)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["del", "theorem", "monotone_comp", []]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1569625185, "sha": "708faa9f", "message": "feat(geometry/manifold/manifold): define manifolds (#1422)\n* feat(geometry/manifold/manifold): define manifolds\n* Update src/geometry/manifold/manifold.lean\nTypo\nCo-Authored-By: Johan Commelin \n* reviewer comments\n* notations, comments\n* Update src/geometry/manifold/manifold.lean\nCo-Authored-By: Scott Morrison \n* Update src/geometry/manifold/manifold.lean\nCo-Authored-By: Scott Morrison \n* manifolds: reviewers comments\n* comment on notation for composition\n* add documentation on atlases and structomorphisms", "changes": [{"oldPath": null, "newPath": "src/geometry/manifold/manifold.lean", "changes": [["add", "theorem", "chart_at_model_space_eq", []], ["add", "def", "continuous_groupoid", []], ["add", "def", "groupoid_of_pregroupoid", []], ["add", "theorem", "groupoid_of_pregroupoid_le", []], ["add", "theorem", "has_groupoid_of_le", []], ["add", "def", "id_groupoid", []], ["add", "def", "local_homeomorph", ["manifold_core"]], ["add", "theorem", "open_source'", ["manifold_core"]], ["add", "theorem", "open_target", ["manifold_core"]], ["add", "def", "to_manifold", ["manifold_core"]], ["add", "structure", "manifold_core", []], ["add", "theorem", "mem_groupoid_of_pregroupoid", []], ["add", "theorem", "model_space_atlas", []], ["add", "structure", "pregroupoid", []], ["add", "def", "refl", ["structomorph"]], ["add", "def", "symm", ["structomorph"]], ["add", "def", "trans", ["structomorph"]], ["add", "structure", "structomorph", []], ["add", "structure", "structure_groupoid", []]]}]}, {"timestamp": 1569607821, "sha": "e0c204ef", "message": "chore(algebra/group_power): move inv_one from group_power to field (#1495)\n* chore(algebra/group_power): move inv_one from group_power to field\n* fix", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "inv_one", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["del", "theorem", "inv_one", []]]}]}, {"timestamp": 1569600310, "sha": "74f09d0d", "message": "chore(algebra/char_p): remove some decidable_eq assumptions (#1492)\n* chore(algebra/char_p): remove some decidable_eq assumptions\n* fix build", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["mod", "theorem", "char_is_prime", ["char_p"]], ["mod", "theorem", "char_ne_zero_of_fintype", ["char_p"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["mod", "theorem", "not_injective_int_fintype", ["set"]], ["mod", "theorem", "not_injective_nat_fintype", ["set"]]]}]}, {"timestamp": 1569593425, "sha": "ce7c94fc", "message": "feat(reduce_projections): add reduce_projections attribute (#1402)\n* feat(reduce_projections): add attribute\nThis attribute automatically generates simp-lemmas for an instance of a structure stating what the projections of this instance are\n* add tactic doc\n* use lean code blocks\n* missing `lemma`\n* checkpoint\n* recursively apply reduce_projections and eta-reduce structures\n* reviewer comments, shorten name\nnew name is simps\n* avoid name clashes\n* remove recursive import\n* fix eta-expansion bug\n* typo\n* apply whnf to type\n* add test\n* replace nm by decl_name", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/simps.lean", "changes": []}, {"oldPath": null, "newPath": "test/simps.lean", "changes": [["add", "structure", "automorphism_plus_data", []], ["add", "def", "bar", []], ["add", "def", "baz", []], ["add", "def", "nested1", ["count_nested"]], ["add", "def", "nested2", ["count_nested"]], ["add", "structure", "equiv", []], ["add", "structure", "equiv_plus_data", []], ["add", "def", "bar1", ["foo"]], ["add", "def", "bar2", ["foo"]], ["add", "def", "foo", ["foo"]], ["add", "def", "my_equiv", []], ["add", "def", "name_clash", []], ["add", "def", "name_clash_fst", []], ["add", "def", "name_clash_snd", []], ["add", "def", "name_clash_snd_2", []], ["add", "structure", "partially_applied_str", []], ["add", "def", "partially_applied_term", []], ["add", "def", "refl_with_data'", []], ["add", "def", "refl_with_data", []], ["add", "def", "test", []], ["add", "structure", "very_partially_applied_str", []], ["add", "def", "very_partially_applied_term", []]]}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": [["add", "def", "dummy", []], ["add", "structure", "equiv", []], ["add", "def", "eta_expansion_test2", []], ["add", "def", "eta_expansion_test", []], ["add", "structure", "my_str", []], ["add", "def", "right_param", []], ["add", "def", "wrong_param", []]]}]}, {"timestamp": 1569584852, "sha": "efd5ab2d", "message": "feat(logic/function): define `function.involutive` (#1474)\n* feat(logic/function): define `function.involutive`\n* Prove that `inv`, `neg`, and `complex.conj` are involutive.\n* Move `inv_inv'` to `algebra/field`", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "inv_inv'", []], ["add", "theorem", "inv_involutive'", []]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "inv_involutive", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["del", "theorem", "inv_inv'", []]]}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "conj_bijective", ["complex"]], ["add", "theorem", "conj_involutive", ["complex"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "to_equiv", ["function", "involutive"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "inv_epsilon_eq_omega", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["mod", "theorem", "inv_inv", ["nnreal"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "def", "involutive", ["function"]], ["add", "theorem", "involutive_iff_iter_2_eq_id", ["function"]]]}]}, {"timestamp": 1569577004, "sha": "6a79f8a1", "message": "feat(data/int/basic): to_nat lemmas (#1479)\n* feat(data/int/basic): of_nat lemmas\n* Adding lt_of_to_nat_lt\n* reversing sides of <->", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "lt_of_to_nat_lt", ["int"]], ["add", "theorem", "lt_to_nat", ["int"]], ["mod", "theorem", "to_nat_le", ["int"]], ["add", "theorem", "to_nat_lt_to_nat", ["int"]]]}]}, {"timestamp": 1569567756, "sha": "0bc5de53", "message": "chore(*): drop some unused args reported by `#sanity_check_mathlib` (#1490)\n* Drop some unused arguments\n* Drop more unused arguments\n* Move `round` to the bottom of `algebra/archimedean`\nSuggested by @rwbarton", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["mod", "theorem", "exists_nat_one_div_lt", []], ["mod", "theorem", "exists_rat_near", []], ["mod", "theorem", "cast_round", ["rat"]]]}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["mod", "theorem", "dvd_eq_le", ["associates"]], ["mod", "theorem", "eq_of_mul_eq_mul_left", ["associates"]], ["mod", "theorem", "le_of_mul_le_mul_left", ["associates"]], ["mod", "theorem", "one_or_eq_of_le_of_prime", ["associates"]]]}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["mod", "theorem", "floor_ring_unique", []]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "divp_inv", []]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "theorem", "map_eq", ["with_one"]]]}, {"oldPath": "src/category/basic.lean", "newPath": "src/category/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "condition", ["category_theory", "limits", "cofork"]], ["del", "def", "condition", ["category_theory", "limits", "cofork"]], ["add", "theorem", "condition", ["category_theory", "limits", "fork"]], ["del", "def", "condition", ["category_theory", "limits", "fork"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["mod", "theorem", "condition", ["category_theory", "limits", "pullback"]], ["mod", "theorem", "condition", ["category_theory", "limits", "pushout"]]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["mod", "theorem", "coe_units_equiv_ne_zero", ["equiv"]], ["mod", "def", "units_equiv_ne_zero", ["equiv"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "theorem", "symm_trans_swap_trans", ["equiv"]]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "borel_eq_subtype", ["measure_theory"]], ["mod", "theorem", "borel_induced", ["measure_theory"]], ["mod", "theorem", "measurable_of_continuous2", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "is_measurable_inl_image", []], ["mod", "theorem", "is_measurable_inr_image", []], ["mod", "theorem", "is_measurable_range_inl", []], ["mod", "theorem", "is_measurable_range_inr", []]]}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "theorem", "eq_of_xn_modeq_lem1", ["pell"]]]}, {"oldPath": "src/topology/instances/polynomial.lean", "newPath": "src/topology/instances/polynomial.lean", "changes": [["mod", "theorem", "continuous_eval", ["polynomial"]]]}]}, {"timestamp": 1569530545, "sha": "15ed0392", "message": "fix(scripts/mk_all): ignore hidden files (#1488)\n* fix(scripts/mk_all): ignore hidden files\nEmacs sometimes creates temporary files with names like `.#name.lean`.\n* Fix comment\nCo-Authored-By: Floris van Doorn ", "changes": [{"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}]}, {"timestamp": 1569506155, "sha": "3cd33416", "message": "feat(field_theory/minimal_polynomial): Basics on minimal polynomials (#1449)\n* chore(ring_theory/algebra): make first type argument explicit in alg_hom\nNow this works, and it didn't work previously even with `@`\n```lean\nstructure alg_equiv (α β γ : Type*) [comm_ring α] [ring β] [ring γ]\n [algebra α β] [algebra α γ] extends alg_hom α β γ :=\n```\n* Update algebra.lean\n* feat(field_theory/algebraic_closure)\n* Remove sorries about minimal polynomials\n* Define alg_equiv.symm\n* typo\n* Remove another sorry, in base_extension\n* Work in progress\n* Remove a sorry in maximal_extension_chain\n* Merge two sorries\n* More sorries removed\n* More work on transitivity of algebraicity\n* WIP\n* Sorry-free definition of algebraic closure\n* More or less sorries\n* Removing some sorries\n* WIP\n* feat(field_theory/minimal_polynomial): Basics on minimal polynomials\n* Remove protected; add docstrings\n* Open classical locale\n* Stuff is broken\n* Rewrite the module doc a bit, revert change to classical\n* Little fixes\n* explicit-ify proof\n* feat(algebra/big_operators): simp lemmas\n* Remove decidable_eq instances\n* fix(ring_theory/algebra): get ris of dec_eq assumptions so simp triggers again\n* break as_sum into its constituent pieces\n* fix namespace\n* not sure if this is better or worse\n* Fix ext naming\n* More fixes\n* Fix some renaming issues", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "lt_add_one_iff", ["nat"]], ["add", "theorem", "lt_one_add_iff", ["nat"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "as_sum", ["polynomial"]], ["add", "theorem", "coeff_eq_zero_of_nat_degree_lt", ["polynomial"]], ["add", "theorem", "degree_eq_iff_nat_degree_eq", ["polynomial"]], ["add", "theorem", "degree_eq_iff_nat_degree_eq_of_pos", ["polynomial"]], ["mod", "theorem", "ext", ["polynomial"]], ["add", "theorem", "ext_iff", ["polynomial"]], ["add", "theorem", "finset_sum_coeff", ["polynomial"]], ["add", "theorem", "hom_eval₂", ["polynomial"]], ["add", "theorem", "ite_le_nat_degree_coeff", ["polynomial"]], ["mod", "theorem", "map_id", ["polynomial"]], ["add", "theorem", "leading_coeff", ["polynomial", "monic"]], ["add", "theorem", "zero_is_root_of_coeff_zero_eq_zero", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/field_theory/minimal_polynomial.lean", "changes": [["add", "theorem", "aeval", ["minimal_polynomial"]], ["add", "theorem", "algebra_map'", ["minimal_polynomial"]], ["add", "theorem", "coeff_zero_eq_zero", ["minimal_polynomial"]], ["add", "theorem", "coeff_zero_ne_zero", ["minimal_polynomial"]], ["add", "theorem", "degree_le_of_ne_zero", ["minimal_polynomial"]], ["add", "theorem", "degree_ne_zero", ["minimal_polynomial"]], ["add", "theorem", "degree_pos", ["minimal_polynomial"]], ["add", "theorem", "dvd", ["minimal_polynomial"]], ["add", "theorem", "irreducible", ["minimal_polynomial"]], ["add", "theorem", "min", ["minimal_polynomial"]], ["add", "theorem", "monic", ["minimal_polynomial"]], ["add", "theorem", "ne_zero", ["minimal_polynomial"]], ["add", "theorem", "not_is_unit", ["minimal_polynomial"]], ["add", "theorem", "one", ["minimal_polynomial"]], ["add", "theorem", "prime", ["minimal_polynomial"]], ["add", "theorem", "root", ["minimal_polynomial"]], ["add", "theorem", "unique", ["minimal_polynomial"]], ["add", "theorem", "zero", ["minimal_polynomial"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1569499461, "sha": "f92e8124", "message": "feat(data/setoid): create file about setoids (#1453)\n* setoid complete lattice\n* order iso and Galois insertion\n* added documentation\n* editing docstrings\n* not opening lattice twice\n* partitions\n* typo\n* minor edits\n* editing docstrings\n* applying review comments\n* editing implementation notes\n* partly applied review comments\n* moved length_scanl\n* whoops, and removed length_scanl from setoid\n* editing implementation notes\n* generalising `of_quotient` a bit more\n* style tweaks + reviewer changes\n* removing Bell numbers for now\n* revert docstring\n* applying review comments\n* generalising to_quotient\n* partly applying review comments\n* applying review comments\n* readding list length lemmas", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "exists_of_length_succ", ["list"]], ["add", "theorem", "last_eq_nth_le", ["list"]], ["add", "theorem", "length_pos_iff_ne_nil", ["list"]], ["add", "theorem", "length_pos_of_ne_nil", ["list"]], ["add", "theorem", "length_scanl", ["list"]], ["add", "theorem", "ne_nil_of_length_pos", ["list"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_left", ["set"]], ["add", "theorem", "disjoint_right", ["set"]], ["add", "theorem", "sUnion_eq_univ_iff", ["set"]]]}, {"oldPath": null, "newPath": "src/data/setoid.lean", "changes": [["add", "theorem", "eq_rel", ["quotient"]], ["add", "theorem", "Inf_def", ["setoid"]], ["add", "theorem", "Inf_le", ["setoid"]], ["add", "theorem", "Sup_def", ["setoid"]], ["add", "theorem", "Sup_eq_eqv_gen", ["setoid"]], ["add", "def", "classes", ["setoid"]], ["add", "theorem", "classes_eqv_classes", ["setoid"]], ["add", "theorem", "classes_inj", ["setoid"]], ["add", "theorem", "classes_mk_classes", ["setoid"]], ["add", "def", "comap", ["setoid"]], ["add", "def", "correspondence", ["setoid"]], ["add", "theorem", "empty_not_mem_classes", ["setoid"]], ["add", "theorem", "eq_eqv_class_of_mem", ["setoid"]], ["add", "theorem", "eq_iff_classes_eq", ["setoid"]], ["add", "theorem", "eq_iff_rel_eq", ["setoid"]], ["add", "theorem", "eq_of_mem_classes", ["setoid"]], ["add", "theorem", "eq_of_mem_eqv_class", ["setoid"]], ["add", "theorem", "eqv_class_mem", ["setoid"]], ["add", "theorem", "eqv_classes_disjoint", ["setoid"]], ["add", "theorem", "eqv_classes_of_disjoint_union", ["setoid"]], ["add", "theorem", "eqv_gen_eq", ["setoid"]], ["add", "theorem", "eqv_gen_idem", ["setoid"]], ["add", "theorem", "eqv_gen_le", ["setoid"]], ["add", "theorem", "eqv_gen_mono", ["setoid"]], ["add", "theorem", "eqv_gen_of_setoid", ["setoid"]], ["add", "theorem", "exists_of_mem_partition", ["setoid"]], ["add", "theorem", "ext'", ["setoid"]], ["add", "theorem", "ext_iff", ["setoid"]], ["add", "def", "gi", ["setoid"]], ["add", "theorem", "inf_def", ["setoid"]], ["add", "theorem", "inf_iff_and", ["setoid"]], ["add", "theorem", "injective_iff_ker_bot", ["setoid"]], ["add", "theorem", "injective_ker_lift", ["setoid"]], ["add", "def", "is_partition", ["setoid"]], ["add", "def", "ker", ["setoid"]], ["add", "theorem", "ker_apply_eq_preimage", ["setoid"]], ["add", "theorem", "ker_eq_lift_of_injective", ["setoid"]], ["add", "theorem", "ker_mk_eq", ["setoid"]], ["add", "theorem", "le_Inf", ["setoid"]], ["add", "theorem", "le_def", ["setoid"]], ["add", "theorem", "lift_unique", ["setoid"]], ["add", "def", "map", ["setoid"]], ["add", "def", "map_of_surjective", ["setoid"]], ["add", "theorem", "map_of_surjective_eq_map", ["setoid"]], ["add", "theorem", "mem_classes", ["setoid"]], ["add", "def", "mk_classes", ["setoid"]], ["add", "theorem", "mk_classes_classes", ["setoid"]], ["add", "theorem", "ne_empty_of_mem_partition", ["setoid"]], ["add", "def", "order_iso", ["setoid", "partition"]], ["add", "theorem", "refl'", ["setoid"]], ["add", "def", "rel", ["setoid"]], ["add", "def", "setoid_of_disjoint_union", ["setoid"]], ["add", "theorem", "sup_def", ["setoid"]], ["add", "theorem", "sup_eq_eqv_gen", ["setoid"]], ["add", "theorem", "symm'", ["setoid"]], ["add", "theorem", "trans'", ["setoid"]]]}, {"oldPath": "src/order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": [["add", "theorem", "to_galois_connection", ["order_iso"]]]}]}, {"timestamp": 1569483594, "sha": "7afdab63", "message": "refactor(data/equiv/algebra): rewrite `ring_equiv` using bundled homs (#1482)\n* refactor(data/equiv/algebra): rewrite `ring_equiv` using bundled homs\nFix some compile errors\n* Fix compile, add missing docs\n* Docstrings\n* Use less `ring_equiv.to_equiv` outside of `data/equiv/algebra`\n* Join lines", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "theorem", "map_sub", ["add_equiv"]], ["add", "theorem", "map_eq_one_iff", ["mul_equiv"]], ["add", "theorem", "map_inv", ["mul_equiv"]], ["add", "theorem", "map_ne_one_iff", ["mul_equiv"]], ["add", "theorem", "apply_symm_apply", ["ring_equiv"]], ["add", "theorem", "coe_add_equiv", ["ring_equiv"]], ["add", "theorem", "coe_mul_equiv", ["ring_equiv"]], ["add", "theorem", "image_eq_preimage", ["ring_equiv"]], ["add", "theorem", "map_add", ["ring_equiv"]], ["add", "theorem", "map_mul", ["ring_equiv"]], ["add", "theorem", "map_neg", ["ring_equiv"]], ["add", "theorem", "map_neg_one", ["ring_equiv"]], ["add", "theorem", "map_one", ["ring_equiv"]], ["add", "theorem", "map_sub", ["ring_equiv"]], ["add", "theorem", "map_zero", ["ring_equiv"]], ["add", "def", "of'", ["ring_equiv"]], ["add", "def", "of", ["ring_equiv"]], ["add", "theorem", "symm_apply_apply", ["ring_equiv"]], ["del", "def", "to_add_equiv", ["ring_equiv"]], ["del", "theorem", "to_equiv_symm", ["ring_equiv"]], ["del", "theorem", "to_equiv_symm_apply", ["ring_equiv"]], ["del", "def", "to_mul_equiv", ["ring_equiv"]], ["add", "def", "to_ring_hom", ["ring_equiv"]], ["mod", "structure", "ring_equiv", []]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "def", "option_equiv_left", ["mv_polynomial"]], ["mod", "def", "option_equiv_right", ["mv_polynomial"]], ["mod", "def", "pempty_ring_equiv", ["mv_polynomial"]], ["mod", "def", "punit_ring_equiv", ["mv_polynomial"]], ["mod", "def", "ring_equiv_congr", ["mv_polynomial"]], ["mod", "def", "ring_equiv_of_equiv", ["mv_polynomial"]], ["mod", "def", "sum_ring_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["mod", "def", "free_comm_ring_pempty_equiv_int", []], ["mod", "def", "free_comm_ring_punit_equiv_polynomial_int", []], ["mod", "def", "free_ring_pempty_equiv_int", []], ["mod", "def", "free_ring_punit_equiv_polynomial_int", []]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "def", "equiv_of_equiv", ["localization"]], ["mod", "def", "equiv_of_equiv", ["localization", "fraction_ring"]]]}, {"oldPath": "src/ring_theory/maps.lean", "newPath": "src/ring_theory/maps.lean", "changes": [["mod", "def", "anti_equiv_to_equiv", ["comm_ring"]], ["mod", "def", "equiv_to_anti_equiv", ["comm_ring"]], ["del", "theorem", "map_add", ["ring_equiv"]], ["del", "theorem", "map_mul", ["ring_equiv"]], ["del", "theorem", "map_neg", ["ring_equiv"]], ["del", "theorem", "map_neg_one", ["ring_equiv"]], ["del", "theorem", "map_one", ["ring_equiv"]], ["del", "theorem", "map_sub", ["ring_equiv"]], ["del", "theorem", "map_zero", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1569457767, "sha": "2e35a7aa", "message": "feat(int/basic): add simp-lemma int.of_nat_eq_coe (#1486)\n* feat(int/basic): add simp-lemma int.of_nat_eq_coe\n* fix errors\nin the process also add some lemmas about bxor to simplify proofs\n* use coercion in rat.mk", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "bxor_bnot_bnot", ["bool"]], ["add", "theorem", "bxor_bnot_left", ["bool"]], ["add", "theorem", "bxor_bnot_right", ["bool"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}]}, {"timestamp": 1569435073, "sha": "b39040ff", "message": "feat(sanity_check): improvements (#1487)\n* checkpoint\n* checkpoint\n* checkpoint\n* feat(sanity_check): improvements\n* Now check for classical.[some|choice] and [gt|ge] in theorem statements\n* Add [sanity_skip] attribute to skip checks\n* Add #sanity_check_all to check all declarations\n* Add `-` after command to only execute fast tests\n* Reduce code duplication\n* Make the performed checks configurable.\n* some cleanup\n* fix tests\n* clarification\n* reviewer comments\n* fix typo in docstring\n* reviewer comments\n* update docstring\n* Update tactics.md", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/sanity_check.lean", "newPath": "src/tactic/sanity_check.lean", "changes": []}, {"oldPath": "test/sanity_check.lean", "newPath": "test/sanity_check.lean", "changes": [["add", "def", "foo", ["bar"]], ["add", "theorem", "foo", ["foo"]], ["del", "theorem", "foo4", []]]}]}, {"timestamp": 1569386357, "sha": "3e5dc889", "message": "chore(scripts): add executable bit to scripts/mk_all.sh, and create/delete sanity_check_mathlib.lean (#1480)\n* chore(scripts): add executable bit to scripts/mk_all.sh\n* another\n* modify mk_all/rm_all to create a file containing #sanity_check_mathlib\n* add sanity_check_mathlib.lean to .gitignore\n* Update scripts/mk_all.sh\n* Update scripts/mk_all.sh\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": "scripts/mk_all.sh", "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": "scripts/rm_all.sh", "newPath": "scripts/rm_all.sh", "changes": []}]}, {"timestamp": 1569375042, "sha": "491a68ea", "message": "cleanup(*): use priority 10 for low priority (#1485)\nNow we can locally use priorities lower than this low-priority", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/category/bifunctor.lean", "newPath": "src/category/bifunctor.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["mod", "theorem", "hom_equiv_naturality_left_symm", ["category_theory", "adjunction"]], ["mod", "theorem", "hom_equiv_naturality_right", ["category_theory", "adjunction"]]]}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["mod", "theorem", "is_well_order", ["fintype", "linear_order"]], ["mod", "def", "fintype", ["unique"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/abstract_completion.lean", "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": []}]}, {"timestamp": 1569338171, "sha": "00d440a9", "message": "feat(tactic/import_private): make private definitions available outside of their scope (#1450)\n* new user command: `import_private`\n* test case\n* Update expr.lean\n* Update examples.lean\n* Update tactics.md\n* Update src/tactic/core.lean\nCo-Authored-By: Rob Lewis \n* Update tactics.md\n* Update examples.lean\n* Update core.lean\n* Update core.lean\n* Update src/meta/expr.lean\n* Update docs/tactics.md\n* Update examples.lean\n* Update examples.lean", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}]}, {"timestamp": 1569332191, "sha": "1eaa2928", "message": "feat(finset): add has_sep instance (#1477)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "filter_congr_decidable", ["finset"]], ["add", "theorem", "sep_def", ["finset"]]]}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}]}, {"timestamp": 1569314359, "sha": "5344da4c", "message": "feat(algebra/big_operators): simp lemmas (#1471)\n* feat(algebra/big_operators): simp lemmas\n* remove @[simp]", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_ite", ["finset"]], ["add", "theorem", "sum_boole_mul", ["finset"]], ["add", "theorem", "sum_mul_boole", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "filter_eq", ["finset"]]]}]}, {"timestamp": 1569312817, "sha": "201174d0", "message": "feat(algebra/continued_fractions): add basic defs/lemmas for continued fractions (#1433)\n* feat(algebra/continued_fractions): add basic defs/lemmas for continued fractions\n* Rename termiantes_at to terminated_at, use long names for cont. fracts.\n* Fix indentation, remove subfolders, fix docstrings", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/basic.lean", "changes": [["add", "theorem", "coe_to_generalized_continued_fraction", ["continued_fraction"]], ["add", "theorem", "coe_to_simple_continued_fraction", ["continued_fraction"]], ["add", "def", "continued_fraction", []], ["add", "theorem", "coe_to_generalized_continued_fraction", ["generalized_continued_fraction"]], ["add", "def", "continuants", ["generalized_continued_fraction"]], ["add", "def", "continuants_aux", ["generalized_continued_fraction"]], ["add", "def", "convergents'", ["generalized_continued_fraction"]], ["add", "def", "convergents'_aux", ["generalized_continued_fraction"]], ["add", "def", "convergents", ["generalized_continued_fraction"]], ["add", "def", "denominators", ["generalized_continued_fraction"]], ["add", "def", "is_simple_continued_fraction", ["generalized_continued_fraction"]], ["add", "def", "next_continuants", ["generalized_continued_fraction"]], ["add", "def", "next_denominator", ["generalized_continued_fraction"]], ["add", "def", "next_numerator", ["generalized_continued_fraction"]], ["add", "def", "numerators", ["generalized_continued_fraction"]], ["add", "theorem", "coe_to_generalized_continued_fraction_pair", ["generalized_continued_fraction", "pair"]], ["add", "def", "partial_denominators", ["generalized_continued_fraction"]], ["add", "def", "partial_numerators", ["generalized_continued_fraction"]], ["add", "def", "coe_to_seq", ["generalized_continued_fraction", "seq"]], ["add", "def", "terminated_at", ["generalized_continued_fraction"]], ["add", "def", "terminates", ["generalized_continued_fraction"]], ["add", "structure", "generalized_continued_fraction", []], ["add", "theorem", "coe_to_generalized_continued_fraction", ["simple_continued_fraction"]], ["add", "def", "is_regular_continued_fraction", ["simple_continued_fraction"]], ["add", "def", "simple_continued_fraction", []]]}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/continuants_recurrence.lean", "changes": [["add", "theorem", "continuants_aux_recurrence", ["generalized_continued_fraction"]], ["add", "theorem", "continuants_recurrence", ["generalized_continued_fraction"]], ["add", "theorem", "continuants_recurrence_aux", ["generalized_continued_fraction"]], ["add", "theorem", "denominators_recurrence", ["generalized_continued_fraction"]], ["add", "theorem", "numerators_recurrence", ["generalized_continued_fraction"]]]}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/continued_fractions/translations.lean", "changes": [["add", "theorem", "convergent_eq_conts_a_div_conts_b", ["generalized_continued_fraction"]], ["add", "theorem", "convergent_eq_num_div_denom", ["generalized_continued_fraction"]], ["add", "theorem", "denom_eq_conts_b", ["generalized_continued_fraction"]], ["add", "theorem", "first_continuant_aux_eq_h_one", ["generalized_continued_fraction"]], ["add", "theorem", "nth_cont_eq_succ_nth_cont_aux", ["generalized_continued_fraction"]], ["add", "theorem", "num_eq_conts_a", ["generalized_continued_fraction"]], ["add", "theorem", "obtain_conts_a_of_num", ["generalized_continued_fraction"]], ["add", "theorem", "obtain_conts_b_of_denom", ["generalized_continued_fraction"]], ["add", "theorem", "obtain_s_a_of_part_num", ["generalized_continued_fraction"]], ["add", "theorem", "obtain_s_b_of_part_denom", ["generalized_continued_fraction"]], ["add", "theorem", "part_denom_eq_s_b", ["generalized_continued_fraction"]], ["add", "theorem", "part_denom_none_iff_s_none", ["generalized_continued_fraction"]], ["add", "theorem", "part_num_eq_s_a", ["generalized_continued_fraction"]], ["add", "theorem", "part_num_none_iff_s_none", ["generalized_continued_fraction"]], ["add", "theorem", "terminated_at_iff_part_denom_none", ["generalized_continued_fraction"]], ["add", "theorem", "terminated_at_iff_part_num_none", ["generalized_continued_fraction"]], ["add", "theorem", "terminated_at_iff_s_none", ["generalized_continued_fraction"]], ["add", "theorem", "terminated_at_iff_s_terminated_at", ["generalized_continued_fraction"]], ["add", "theorem", "zeroth_continuant_aux_eq_one_zero", ["generalized_continued_fraction"]], ["add", "theorem", "zeroth_continuant_eq_h_one", ["generalized_continued_fraction"]], ["add", "theorem", "zeroth_convergent'_aux_eq_zero", ["generalized_continued_fraction"]], ["add", "theorem", "zeroth_convergent'_eq_h", ["generalized_continued_fraction"]], ["add", "theorem", "zeroth_convergent_eq_h", ["generalized_continued_fraction"]]]}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["add", "def", "terminated_at", ["seq"]], ["add", "theorem", "terminated_stable", ["seq"]], ["add", "def", "terminates", ["seq"]]]}]}, {"timestamp": 1569303995, "sha": "327098b4", "message": "feat(tactic/library_search): a more powerful library_search (#1470)\n* experimental extensions to library_search\n* upgrades to library_search\n* remove ! for a later PR\n* move `run_norm_num`\n* oops\n* Update src/tactic/library_search.lean\nCo-Authored-By: Floris van Doorn \n* remove run_norm_num for later", "changes": [{"oldPath": "src/tactic/library_search.lean", "newPath": "src/tactic/library_search.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": [["del", "def", "P", ["test", "library_search"]], ["del", "def", "Q", ["test", "library_search"]], ["del", "def", "f", ["test", "library_search"]], ["add", "def", "lt_one", ["test", "library_search"]], ["add", "theorem", "zero_lt_one", ["test", "library_search"]]]}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1569297095, "sha": "88f37b51", "message": "fix(tactic.lift): fix error messages (#1478)", "changes": [{"oldPath": "src/tactic/lift.lean", "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1569283249, "sha": "425644f8", "message": "refactor(algebra/*): Make `monoid_hom.ext` etc use `∀ x, f x = g x` as an assumption (#1476)", "changes": [{"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "coe_inj", ["monoid_hom"]], ["mod", "theorem", "ext", ["monoid_hom"]], ["add", "theorem", "ext_iff", ["monoid_hom"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "coe_inj", ["ring_hom"]], ["mod", "theorem", "ext", ["ring_hom"]], ["add", "theorem", "ext_iff", ["ring_hom"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}]}, {"timestamp": 1569276262, "sha": "604699b1", "message": "feat(data|set_theory): various new lemmas (#1466)\n* various changes\n* move section on map down\nI need some lemmas about nth for maps, and this seemed like the nicest way to do it\n* some lemmas\n* replace app by append in names\n* lemmas from various proving grounds problems\n* sanity_check on list.basic\n* small fixes in ordinal and cardinal\nalso open namespace equiv in ordinal\n* small changes\n* add docstring\n* fix\n* rename variable\n* simp caused a problem\n* update docstring\n* fix last two comments", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "lt_one_add", []]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": [["add", "def", "list_unit_equiv", ["equiv"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_one", ["fin"]], ["add", "theorem", "coe_two", ["fin"]], ["add", "theorem", "coe_zero", ["fin"]], ["mod", "theorem", "injective_cast_le", ["fin"]], ["add", "theorem", "injective_val", ["fin"]], ["add", "theorem", "val_one", ["fin"]], ["add", "theorem", "val_two", ["fin"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "app_subset_of_subset_of_subset", ["list"]], ["mod", "theorem", "append_sublist_append", ["list"]], ["add", "theorem", "append_subset_iff", ["list"]], ["add", "theorem", "append_subset_of_subset_of_subset", ["list"]], ["mod", "theorem", "bind_append", ["list"]], ["mod", "theorem", "bind_ret_eq_map", ["list"]], ["mod", "theorem", "iff_mem", ["list", "chain'"]], ["add", "theorem", "doubleton_eq", ["list"]], ["add", "theorem", "empty_eq", ["list"]], ["add", "theorem", "exists_le_of_sum_le", ["list"]], ["add", "theorem", "exists_lt_of_sum_lt", ["list"]], ["mod", "theorem", "ilast'_mem", ["list"]], ["add", "theorem", "injective_length", ["list"]], ["add", "theorem", "injective_length_iff", ["list"]], ["add", "theorem", "injective_map_iff", ["list"]], ["add", "theorem", "insert_neg", ["list"]], ["add", "theorem", "insert_pos", ["list"]], ["add", "theorem", "join_join", ["list"]], ["mod", "theorem", "length_attach", ["list"]], ["mod", "theorem", "length_insert_of_mem", ["list"]], ["mod", "theorem", "length_insert_of_not_mem", ["list"]], ["mod", "theorem", "map_eq_map", ["list"]], ["add", "theorem", "map_eq_map_iff", ["list"]], ["add", "theorem", "map_subset_iff", ["list"]], ["del", "theorem", "nodup_app_comm", ["list"]], ["add", "theorem", "nodup_append_comm", ["list"]], ["mod", "theorem", "nodup_append_of_nodup", ["list"]], ["mod", "theorem", "nth_le_attach", ["list"]], ["add", "theorem", "nth_le_map_rev", ["list"]], ["del", "theorem", "pairwise_app_comm", ["list"]], ["add", "theorem", "pairwise_append_comm", ["list"]], ["mod", "theorem", "rel_filter_map", ["list"]], ["add", "theorem", "singleton_eq", ["list"]], ["del", "theorem", "sublist_app_of_sublist_left", ["list"]], ["del", "theorem", "sublist_app_of_sublist_right", ["list"]], ["add", "theorem", "sublist_append_of_sublist_left", ["list"]], ["add", "theorem", "sublist_append_of_sublist_right", ["list"]], ["del", "theorem", "subset_app_of_subset_left", ["list"]], ["del", "theorem", "subset_app_of_subset_right", ["list"]], ["add", "theorem", "subset_append_of_subset_left", ["list"]], ["add", "theorem", "subset_append_of_subset_right", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "pred_eq_succ_iff", ["nat"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "set_of_app_iff", ["set"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "theorem", "forall'", ["subtype"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "add_lt_omega_iff", ["cardinal"]], ["add", "theorem", "lift_eq_nat_iff", ["cardinal"]], ["add", "theorem", "mk_image_le_lift", ["cardinal"]], ["add", "theorem", "mk_range_eq_lift", ["cardinal"]], ["add", "theorem", "mk_sum_compl", ["cardinal"]], ["add", "theorem", "mul_lt_omega_iff", ["cardinal"]], ["add", "theorem", "mul_lt_omega_iff_of_ne_zero", ["cardinal"]], ["add", "theorem", "nat_eq_lift_eq_iff", ["cardinal"]], ["add", "theorem", "power_le_max_power_one", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "add_eq_left", ["cardinal"]], ["add", "theorem", "add_eq_left_iff", ["cardinal"]], ["add", "theorem", "add_eq_right", ["cardinal"]], ["add", "theorem", "add_eq_right_iff", ["cardinal"]], ["add", "def", "aleph'_equiv", ["cardinal"]], ["del", "theorem", "aleph_is_limit", ["cardinal"]], ["add", "theorem", "eq_of_add_eq_of_omega_le", ["cardinal"]], ["add", "theorem", "extend_function", ["cardinal"]], ["add", "theorem", "extend_function_finite", ["cardinal"]], ["add", "theorem", "extend_function_of_lt", ["cardinal"]], ["add", "theorem", "le_mul_left", ["cardinal"]], ["add", "theorem", "le_mul_right", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_finite", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_finite_lift", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_finite_same", ["cardinal"]], ["add", "theorem", "mk_compl_eq_mk_compl_infinite", ["cardinal"]], ["add", "theorem", "mk_compl_finset_of_omega_le", ["cardinal"]], ["add", "theorem", "mk_compl_of_omega_le", ["cardinal"]], ["add", "theorem", "mul_eq_left", ["cardinal"]], ["add", "theorem", "mul_eq_left_iff", ["cardinal"]], ["add", "theorem", "mul_eq_right", ["cardinal"]], ["add", "theorem", "ord_aleph_is_limit", ["cardinal"]], ["mod", "theorem", "pow_le", ["cardinal"]], ["add", "theorem", "bsup_id", ["ordinal"]], ["add", "theorem", "is_limit_add_iff", ["ordinal"]], ["add", "theorem", "bsup_eq", ["ordinal", "is_normal"]], ["add", "theorem", "lt_bsup", ["ordinal"]], ["add", "theorem", "nfp_eq_self", ["ordinal"]], ["mod", "def", "equiv_lt", ["principal_seg"]], ["mod", "def", "lt_le", ["principal_seg"]], ["mod", "theorem", "lt_le_top", ["principal_seg"]], ["mod", "def", "of_element", ["principal_seg"]]]}]}, {"timestamp": 1569268638, "sha": "fd7840ad", "message": "feat(topology/constructions): is_open_prod_iff' (#1454)\n* feat(topology/constructions): open_prod_iff'\n* reviewer's comments\n* fix build\n* golfed; is_open_map_fst", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "prod_subset_prod_iff", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "is_open_map_fst", []], ["add", "theorem", "is_open_map_snd", []], ["add", "theorem", "is_open_prod_iff'", []]]}]}, {"timestamp": 1569260188, "sha": "87d1240f", "message": "feat(tactic/core): derive handler for simple instances (#1475)\n* feat(tactic/core): derive handler for simple algebraic instances\n* change comment\n* use mk_definition\n* Update src/tactic/core.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "test/delta_instance.lean", "changes": [["add", "def", "T", []], ["add", "def", "V", []]]}]}, {"timestamp": 1569126849, "sha": "61ccaf65", "message": "chore(*): fix various issues reported by `sanity_check_mathlib` (#1469)\n* chore(*): fix various issues reported by `sanity_check_mathlib`\n* Drop a misleading comment, fix the proof", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["add", "theorem", "directed_system", ["add_comm_group", "direct_limit"]], ["del", "def", "directed_system", ["add_comm_group", "direct_limit"]]]}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "mk0_inj", ["units"]], ["del", "theorem", "mk0_inj", ["units", "units"]]]}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "sub_sub_cancel", []], ["del", "def", "sub_sub_cancel", []]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "div_nonneg", []], ["del", "def", "div_nonneg", []], ["add", "theorem", "div_pos", []], ["del", "def", "div_pos", []], ["add", "theorem", "half_lt_self", []], ["del", "def", "half_lt_self", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["del", "def", "to_linear_nonneg_ring", ["nonneg_ring", "nonneg_ring"]], ["add", "def", "to_linear_nonneg_ring", ["nonneg_ring"]]]}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "pointwise_mul_image_is_semiring_hom", ["set"]], ["del", "def", "pointwise_mul_image_is_semiring_hom", ["set"]], ["add", "theorem", "is_monoid_hom", ["set", "singleton"]], ["del", "def", "is_monoid_hom", ["set", "singleton"]], ["add", "theorem", "is_mul_hom", ["set", "singleton"]], ["del", "def", "is_mul_hom", ["set", "singleton"]]]}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": [["del", "def", "monad_lift", ["cont_t", "cont_t"]], ["add", "def", "monad_lift", ["cont_t"]]]}, {"oldPath": "src/category/traversable/equiv.lean", "newPath": "src/category/traversable/equiv.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "app", ["category_theory", "nat_iso", "of_components"]], ["del", "def", "app", ["category_theory", "nat_iso", "of_components"]], ["add", "theorem", "hom_app", ["category_theory", "nat_iso", "of_components"]], ["del", "def", "hom_app", ["category_theory", "nat_iso", "of_components"]], ["add", "theorem", "inv_app", ["category_theory", "nat_iso", "of_components"]], ["del", "def", "inv_app", ["category_theory", "nat_iso", "of_components"]]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "theorem", "apply_symm_apply", ["mul_equiv"]], ["del", "def", "apply_symm_apply", ["mul_equiv"]], ["add", "theorem", "map_mul", ["mul_equiv"]], ["del", "def", "map_mul", ["mul_equiv"]], ["add", "theorem", "map_one", ["mul_equiv"]], ["del", "def", "map_one", ["mul_equiv"]], ["add", "theorem", "symm_apply_apply", ["mul_equiv"]], ["del", "def", "symm_apply_apply", ["mul_equiv"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subtype_quotient_equiv_quotient_subtype", ["equiv"]], ["del", "theorem", "subtype_quotient_equiv_quotient_subtype", ["equiv"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "def", "strong_induction_on", ["finset"]], ["del", "theorem", "strong_induction_on", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "lt_wf", ["finsupp"]], ["del", "def", "lt_wf", ["finsupp"]]]}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["add", "theorem", "is_add_monoid_hom_mul_right", ["matrix"]], ["del", "def", "is_add_monoid_hom_mul_right", ["matrix"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "map_eq_zero", ["multiset"]], ["del", "theorem", "map_eq_zero", ["multiset", "multiset"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "degrees_neg", ["mv_polynomial"]], ["mod", "theorem", "degrees_sub", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "def", "coeff_coe_to_fun", ["polynomial"]], ["add", "theorem", "degree_lt_wf", ["polynomial"]], ["del", "def", "degree_lt_wf", ["polynomial"]], ["del", "def", "has_coe_to_fun", ["polynomial", "polynomial"]]]}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "def", "{u}", ["rat"]], ["del", "theorem", "{u}", ["rat"]]]}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["add", "theorem", "inj", ["free_group", "to_word"]], ["del", "def", "inj", ["free_group", "to_word"]], ["add", "theorem", "mk", ["free_group", "to_word"]], ["del", "def", "mk", ["free_group", "to_word"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "def", "fixed_points_mul_left_cosets_equiv_quotient", ["sylow"]], ["del", "theorem", "fixed_points_mul_left_cosets_equiv_quotient", ["sylow"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["add", "def", "fin_dim_vectorspace_equiv", []], ["del", "theorem", "fin_dim_vectorspace_equiv", []]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "imp_intro", []], ["add", "def", "elim", ["not"]], ["del", "theorem", "elim", ["not"]], ["mod", "theorem", "not_of_not_imp", []]]}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["add", "theorem", "lift_rel_mk_mk", ["measure_theory", "ae_eq_fun"]], ["del", "def", "lift_rel_mk_mk", ["measure_theory", "ae_eq_fun"]]]}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": [["add", "theorem", "ext", ["poly"]], ["del", "def", "ext", ["poly"]], ["add", "theorem", "induction", ["poly"]], ["del", "def", "induction", ["poly"]], ["add", "theorem", "isp", ["poly"]], ["del", "def", "isp", ["poly"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "pointwise_add_map_is_add_monoid_hom", ["filter"]], ["del", "def", "pointwise_add_map_is_add_monoid_hom", ["filter"]], ["add", "theorem", "pointwise_mul_map_is_monoid_hom", ["filter"]], ["del", "def", "pointwise_mul_map_is_monoid_hom", ["filter"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "theorem", "is_coprime_def", ["ideal"]], ["mod", "theorem", "is_coprime_self", ["ideal"]], ["mod", "theorem", "mem_span_pair", ["ideal"]], ["add", "theorem", "zero_ne_one_of_proper", ["ideal"]], ["del", "def", "zero_ne_one_of_proper", ["ideal"]]]}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "theorem", "is_local_ring", ["mv_power_series"]], ["del", "def", "is_local_ring", ["mv_power_series"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "def", "embedding_to_cardinal", []], ["add", "theorem", "nonempty_embedding_to_cardinal", []], ["mod", "def", "div_def", ["ordinal"]]]}, {"oldPath": "src/set_theory/pgame.lean", "newPath": "src/set_theory/pgame.lean", "changes": [["add", "theorem", "add_zero_equiv", ["pgame"]], ["del", "def", "add_zero_equiv", ["pgame"]], ["add", "theorem", "left_move", ["pgame", "subsequent"]], ["del", "def", "left_move", ["pgame", "subsequent"]], ["add", "theorem", "right_move", ["pgame", "subsequent"]], ["del", "def", "right_move", ["pgame", "subsequent"]], ["add", "theorem", "zero_add_equiv", ["pgame"]], ["del", "def", "zero_add_equiv", ["pgame"]]]}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": [["add", "theorem", "move_left", ["pgame", "numeric"]], ["del", "def", "move_left", ["pgame", "numeric"]], ["add", "theorem", "move_right", ["pgame", "numeric"]], ["del", "def", "move_right", ["pgame", "numeric"]]]}, {"oldPath": "src/set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "src/tactic/doc_blame.lean", "newPath": "src/tactic/doc_blame.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": [["add", "def", "apply_rel", ["tactic", "interactive"]], ["del", "theorem", "apply_rel", ["tactic", "interactive"]]]}, {"oldPath": "src/tactic/omega/clause.lean", "newPath": "src/tactic/omega/clause.lean", "changes": [["add", "theorem", "holds_append", ["omega", "clause"]], ["del", "def", "holds_append", ["omega", "clause"]]]}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": [["add", "theorem", "val_between_set", ["omega", "coeffs"]], ["del", "def", "val_between_set", ["omega", "coeffs"]], ["add", "theorem", "val_except_add_eq", ["omega", "coeffs"]], ["del", "def", "val_except_add_eq", ["omega", "coeffs"]], ["add", "theorem", "val_set", ["omega", "coeffs"]], ["del", "def", "val_set", ["omega", "coeffs"]]]}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": [["add", "theorem", "holds_constant", ["omega", "nat", "form"]], ["del", "def", "holds_constant", ["omega", "nat", "form"]]]}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": [["add", "theorem", "val_constant", ["omega", "nat", "preterm"]], ["del", "def", "val_constant", ["omega", "nat", "preterm"]]]}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": [["mod", "theorem", "pow_add_rev", ["tactic", "ring"]]]}]}, {"timestamp": 1569046355, "sha": "65bf45c9", "message": "fix(category_theory/finite_limits): fix definition, and construct from finite products and equalizers (#1427)\n* chore(category_theory): require morphisms live in Type\n* move back to Type\n* fix(category_theory/finite_limits): fix definition, and construct from finite products and equalizers\n* fixes\n* fix duplicate name\n* make fin_category a mixin\n* fix\n* fix\n* oops\n* fixes\n* oops missing universe change\n* finish documentation\n* fix namespace\n* move variables to the right place\n* don't repeat yourself\n* update module doc-string now that the files have been merged\n* inlining has_limit instances", "changes": [{"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/finite_limits.lean", "newPath": null, "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": [["del", "def", "cones_hom", ["category_theory", "limits", "equalizer_diagram"]], ["del", "def", "cones_inv", ["category_theory", "limits", "equalizer_diagram"]], ["del", "def", "cones_iso", ["category_theory", "limits", "equalizer_diagram"]], ["del", "def", "equalizer_diagram", ["category_theory", "limits"]], ["add", "def", "finite_limits_from_equalizers_and_finite_products", ["category_theory", "limits"]], ["add", "def", "cones_hom", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["add", "def", "cones_inv", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["add", "def", "cones_iso", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]], ["add", "def", "diagram", ["category_theory", "limits", "has_limit_of_has_products_of_has_equalizers"]]]}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}]}, {"timestamp": 1569026837, "sha": "9c89fa56", "message": "feat(tactic/interactive): add fconstructor (#1467)", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1568977685, "sha": "708a28cc", "message": "chore(algebra/group/units): use `def to_units` instead of `has_lift` (#1431)\n* chore(algebra/group/units): use `def to_units` instead of `has_lift`\n* Move, upgrade to `mul_equiv`, add documentation", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "def", "to_units", []]]}]}, {"timestamp": 1568950138, "sha": "bfe9c6c1", "message": "chore(data/pfun): run `#sanity_check` (#1463)", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "ext'", ["pfun"]], ["del", "def", "ext'", ["pfun"]], ["add", "theorem", "ext", ["pfun"]], ["del", "def", "ext", ["pfun"]], ["add", "def", "fix_induction", ["pfun"]], ["del", "theorem", "fix_induction", ["pfun"]], ["add", "theorem", "mem_preimage", ["pfun"]], ["del", "def", "mem_preimage", ["pfun"]], ["add", "theorem", "ext'", ["roption"]], ["del", "def", "ext'", ["roption"]], ["add", "theorem", "ext", ["roption"]], ["del", "def", "ext", ["roption"]]]}]}, {"timestamp": 1568907124, "sha": "ce105fda", "message": "chore(algebra/group): rename `as_monoid_hom` into `monoid_hom.of`, define `ring_hom.of` (#1443)\n* chore(algebra/group): rename `as_monoid_hom` into `monoid_hom.of`\nThis is similar to `Mon.of` etc.\n* Fix compile\n* Docs, missing universe\n* Move variables declaration up as suggested by @jcommelin\n* doc-string", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "def", "as_monoid_hom", []], ["del", "theorem", "coe_as_monoid_hom", []], ["add", "theorem", "coe_of", ["monoid_hom"]], ["add", "def", "of", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "coe_of", ["ring_hom"]], ["mod", "def", "of", ["ring_hom"]]]}]}, {"timestamp": 1568899053, "sha": "d9102835", "message": "chore(category_theory/endomorphism): make `map_End` and `map_Aut` use bundled homs (#1461)\n* Migrate `functor.map_End` and `functor.map_Aut` to bundled homs\nAdjust implicit arguments of `iso.ext`\n* Add docstrings", "changes": [{"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["mod", "def", "map_Aut", ["category_theory", "functor"]], ["mod", "def", "map_End", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "map_iso_refl", ["category_theory", "functor"]], ["mod", "theorem", "ext", ["category_theory", "iso"]], ["mod", "theorem", "self_symm_id", ["category_theory", "iso"]], ["mod", "theorem", "symm_self_id", ["category_theory", "iso"]]]}]}, {"timestamp": 1568899295, "sha": "1b8285e1", "message": "chore(readme): Add new maintainers [ci skip]", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1568860698, "sha": "b11f0f14", "message": "refactor(category_theory): refactor concrete categories (#1380)\n* trying to use bundled homs\n* bundled monoids should use bundled homs\n* fixes\n* fixes\n* refactor(*): rewrite concrete categories\n* Add module documentation\n* local instance\n* Move files around; don't touch content yet\n* Move code around, fix some compile errors\n* Add `unbundled_hom.lean`\n* Turn `hom` into an argument of `(un)bundled_hom`\nFor some reason, it helps Lean find coercions from `Ring` category\nmorphisms to functions.\n* Define `unbundled_hom.mk_has_forget`; fix compile\n* Add some documentation\n* Fix compile\n* chore(category_theory): require morphisms live in Type\n* move back to Type\n* tweaks to doc-comments\n* fixing some formatting\n* Revert most of the changes to `data/mv_polynomials`\n* Drop unused argument, add a comment\n* Simplify universe levels in `concrete_category/basic`.\nStill fails to compile.\n* Simplify universe levels in `concrete_category/{un,}bundled_hom`\n* fixes\n* Fix an `import`\n* Doc cleanup\n* update post #1412\n* Drop `simp`\n* Rename variable\nCo-Authored-By: Johan Commelin \n* Rename variable\nCo-Authored-By: Johan Commelin \n* Fix more issues reported by @rwbarton\n* Rename variable\nCo-Authored-By: Reid Barton \n* Use `subtype.eq` instead of `subtype.ext.2`\n* Cleanup\n* Fix compile: now `ring_hom.ext` takes fewer explicit args\n* Fix compile\n* Run `sanity_check` on all files modified in this branch\n* Fix most of the issues reported\n* Except for the old ones in `mv_polynomial` (postponed to a separate\n PR) and a false positive in `single_obj`\n* Review `∀` vs `Π`\n* Remove some unnecessary parentheses\n* add comment\n* punit_instances: no need to explicitly provide constants and operations\n* Rename `has_forget` to `has_forget₂`\n* add comment, simplify comm_ring punit\n* Drop `private def free_obj`\n* documentation\n* fix comment\n* tweaks\n* comments\n* documentation on touched files\n* many doc-strings", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/category/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": [["mod", "def", "adj", ["CommRing"]], ["add", "theorem", "free_map_coe", ["CommRing"]], ["del", "theorem", "free_map_val", ["CommRing"]], ["add", "theorem", "free_obj_coe", ["CommRing"]], ["del", "theorem", "free_obj_α", ["CommRing"]], ["del", "def", "hom_equiv", ["CommRing"]]]}, {"oldPath": "src/algebra/category/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": [["del", "def", "cast", ["CommRing", "Int"]], ["del", "def", "hom_unique", ["CommRing", "Int"]], ["add", "theorem", "comp_eq", ["CommRing"]], ["del", "def", "forget", ["CommRing"]], ["add", "theorem", "forget_map_eq_coe", ["CommRing"]], ["add", "theorem", "forget_obj_eq_coe", ["CommRing"]], ["del", "def", "forget_to_CommMon", ["CommRing"]], ["add", "theorem", "id_eq", ["CommRing"]], ["del", "def", "is_comm_ring_hom", ["CommRing"]], ["mod", "def", "of", ["CommRing"]], ["del", "def", "to_Ring", ["CommRing"]], ["add", "def", "of", ["CommSemiRing"]], ["add", "def", "CommSemiRing", []], ["del", "def", "forget", ["Ring"]], ["mod", "def", "of", ["Ring"]], ["add", "def", "of", ["SemiRing"]], ["add", "def", "SemiRing", []]]}, {"oldPath": "src/algebra/category/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": [["mod", "def", "colimit", ["CommRing", "colimits"]], ["del", "theorem", "naturality_bundled", ["CommRing", "colimits"]]]}, {"oldPath": "src/algebra/category/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": [["del", "def", "limit", ["CommRing"]], ["del", "def", "limit_is_limit", ["CommRing"]]]}, {"oldPath": "src/algebra/category/Group.lean", "newPath": "src/algebra/category/Group.lean", "changes": [["del", "def", "forget_to_Group", ["AddCommGroup"]], ["del", "def", "is_add_comm_group_hom", ["AddCommGroup"]], ["del", "def", "of", ["AddCommGroup"]], ["del", "def", "AddCommGroup", []], ["add", "def", "of", ["CommGroup"]], ["add", "def", "CommGroup", []], ["mod", "def", "of", ["Group"]], ["mod", "def", "Group", []]]}, {"oldPath": "src/algebra/category/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": [["del", "def", "forget", ["CommMon"]], ["del", "def", "forget_to_Mon", ["CommMon"]], ["del", "def", "is_comm_monoid_hom", ["CommMon"]], ["mod", "def", "of", ["CommMon"]], ["mod", "def", "CommMon", []], ["del", "def", "forget", ["Mon"]], ["del", "def", "hom_equiv_monoid_hom", ["Mon"]], ["mod", "def", "of", ["Mon"]], ["mod", "def", "Mon", []]]}, {"oldPath": "src/algebra/category/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "of_semiring", ["is_ring_hom"]], ["del", "def", "of_semiring", ["is_ring_hom"]], ["add", "theorem", "coe_comp", ["ring_hom"]], ["add", "theorem", "coe_of", ["ring_hom"]], ["mod", "def", "comp", ["ring_hom"]], ["add", "def", "of", ["ring_hom"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": [["mod", "def", "of", ["category_theory", "Cat"]]]}, {"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": [["mod", "def", "of", ["category_theory", "Groupoid"]]]}, {"oldPath": "src/category_theory/concrete_category.lean", "newPath": null, "changes": [["del", "theorem", "bundled_hom_coe", ["category_theory", "bundled"]], ["del", "theorem", "coe_comp", ["category_theory", "bundled"]], ["del", "theorem", "coe_id", ["category_theory", "bundled"]], ["del", "theorem", "concrete_category_comp", ["category_theory", "bundled"]], ["del", "theorem", "concrete_category_id", ["category_theory", "bundled"]], ["del", "theorem", "hom_ext", ["category_theory", "bundled"]], ["del", "def", "map", ["category_theory", "bundled"]], ["del", "structure", "bundled", ["category_theory"]], ["del", "structure", "concrete_category", ["category_theory"]], ["del", "def", "concrete_functor", ["category_theory"]], ["del", "def", "forget", ["category_theory"]], ["del", "def", "mk_ob", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/concrete_category/basic.lean", "changes": [["add", "def", "forget", ["category_theory"]], ["add", "def", "forget₂", ["category_theory"]], ["add", "def", "mk'", ["category_theory", "has_forget₂"]]]}, {"oldPath": null, "newPath": "src/category_theory/concrete_category/bundled.lean", "changes": [["add", "def", "map", ["category_theory", "bundled"]], ["add", "def", "of", ["category_theory", "bundled"]], ["add", "structure", "bundled", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/concrete_category/bundled_hom.lean", "changes": [["add", "theorem", "coe_comp", ["category_theory", "bundled_hom"]], ["add", "theorem", "coe_id", ["category_theory", "bundled_hom"]], ["add", "def", "full_subcategory_has_forget₂", ["category_theory", "bundled_hom"]], ["add", "def", "has_coe_to_fun", ["category_theory", "bundled_hom"]], ["add", "def", "mk_has_forget₂", ["category_theory", "bundled_hom"]], ["add", "structure", "bundled_hom", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/concrete_category/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/concrete_category/unbundled_hom.lean", "changes": [["add", "def", "mk_has_forget₂", ["category_theory", "unbundled_hom"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "theorem", "div_comp", ["category_theory", "faithful"]], ["add", "theorem", "div_faithful", ["category_theory", "faithful"]], ["add", "theorem", "of_comp", ["category_theory", "faithful"]], ["add", "theorem", "of_comp_eq", ["category_theory", "faithful"]], ["add", "theorem", "injectivity", ["category_theory", "functor"]], ["del", "def", "injectivity", ["category_theory", "functor"]], ["add", "theorem", "preimage_iso_map_iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "def", "hom_equiv", ["mv_polynomial"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "theorem", "of_comp", ["function", "injective"]], ["add", "theorem", "of_comp", ["function", "surjective"]]]}, {"oldPath": "src/measure_theory/category/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": [["mod", "def", "Borel", []], ["mod", "def", "of", ["Meas"]]]}, {"oldPath": "src/topology/category/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": [["mod", "def", "adj₁", ["Top"]], ["mod", "def", "adj₂", ["Top"]]]}, {"oldPath": "src/topology/category/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": [["del", "def", "forget", ["Top"]], ["add", "theorem", "id_app", ["Top"]]]}, {"oldPath": "src/topology/category/Top/epi_mono.lean", "newPath": "src/topology/category/Top/epi_mono.lean", "changes": []}, {"oldPath": "src/topology/category/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/category/TopCommRing.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": [["del", "def", "forget", ["TopCommRing"]], ["del", "def", "forget_to_CommRing", ["TopCommRing"]], ["del", "def", "forget_to_Top", ["TopCommRing"]], ["del", "def", "forget_to_Type_via_CommRing", ["TopCommRing"]], ["del", "def", "forget_to_Type_via_Top", ["TopCommRing"]]]}, {"oldPath": "src/topology/category/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": [["del", "def", "forget", ["CpltSepUniformSpace"]], ["del", "def", "forget_to_Type_via_UniformSpace", ["CpltSepUniformSpace"]], ["del", "def", "forget_to_UniformSpace", ["CpltSepUniformSpace"]], ["add", "theorem", "coe_comp", ["UniformSpace"]], ["add", "theorem", "coe_id", ["UniformSpace"]], ["add", "theorem", "coe_mk", ["UniformSpace"]], ["mod", "def", "completion_hom", ["UniformSpace"]], ["del", "def", "forget", ["UniformSpace"]], ["del", "def", "forget_to_Top", ["UniformSpace"]], ["del", "def", "forget_to_Type_via_Top", ["UniformSpace"]], ["add", "theorem", "hom_ext", ["UniformSpace"]]]}, {"oldPath": "src/topology/sheaves/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": [["mod", "def", "CommRing_yoneda", ["Top"]], ["add", "theorem", "zero", ["Top", "continuous_functions"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "comp", ["uniform_continuous"]]]}]}, {"timestamp": 1568829584, "sha": "066d0535", "message": "chore(topology/maps): a few tweaks to open_embedding and closed embeddings (#1459)\n* chore(topology/maps): a few tweaks to open_embedding and closed\nembeddings\naligning them with recent modification to embedding. From the perfectoid\nproject.\n* chore(topology/maps): add missing empty line", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "theorem", "closed_iff_image_closed", ["closed_embedding"]], ["mod", "theorem", "closed_iff_preimage_closed", ["closed_embedding"]], ["add", "theorem", "continuous", ["closed_embedding"]], ["mod", "theorem", "is_closed_map", ["closed_embedding"]], ["add", "structure", "closed_embedding", []], ["del", "def", "closed_embedding", []], ["mod", "theorem", "closed_embedding_of_continuous_injective_closed", []], ["mod", "theorem", "closed_embedding_of_embedding_closed", []], ["add", "theorem", "comp", ["open_embedding"]], ["add", "theorem", "continuous", ["open_embedding"]], ["add", "structure", "open_embedding", []], ["del", "def", "open_embedding", []], ["del", "theorem", "open_embedding_compose", []], ["add", "theorem", "closed_embedding", ["subtype_val"]], ["add", "theorem", "open_embedding", ["subtype_val"]]]}]}, {"timestamp": 1568821617, "sha": "08390f54", "message": "refactor(algebra/big_operators,data/finset): use `finset.disjoint` in definitions (#1456)\n* Use `finset.disjoint` in `algebra/big_operators`\n* New lemma `disjoint_filter`\nIt should be a painless step from using `filter_inter_filter_neg_eq`\nto using this lemma\n* Update other dependencies of finset.prod_union and finset.prod_bind\n* Reformat some lines to make them fit within 100 characters\n* We can actually do away with two non-terminal `simp`s now", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_union", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "disjoint_filter", ["finset"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1568821381, "sha": "b51978df", "message": "chore(data/mllist): Typo in author name [ci skip] (#1458)", "changes": [{"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}]}, {"timestamp": 1568821220, "sha": "874a15a1", "message": "Update lattice.lean (#1457)", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}]}, {"timestamp": 1568743344, "sha": "b41277c7", "message": "feat(set_theory/game): the theory of combinatorial games (#1274)\n* correcting definition of addition, and splitting content into two files, one about games, one about surreals\n* add_le_zero_of_le_zero, but without well-foundedness\n* progress\n* Mario's well-foundedness proof\n* getting there!\n* success!\n* minor\n* almost there\n* progress\n* off to write some tactics\n* not quite there\n* hmmm\n* getting there!\n* domineering is hard\n* removing unneeded theorems\n* cleanup\n* add_semigroup surreal\n* cleanup\n* short proof\n* cleaning up\n* remove equiv_rw\n* move lemmas about pempty to logic.basic\n* slightly more comments; still lots to go\n* documentation\n* finishing documentation\n* typo\n* Update src/logic/basic.lean\nCo-Authored-By: Rob Lewis \n* fix references\n* oops\n* change statement of equiv.refl_symm\n* more card_erase lemmas; golf domineering proofs\n* style changes\n* fix comment\n* fixes after Reid's review\n* some improvements\n* golfing\n* subsingleton short\n* diagnosing decidable\n* hmmmhmmm\n* computational domineering\n* fix missing proofs (need golfing?)\n* minor\n* short_of_relabelling\n* abbreviating\n* various minor\n* removing short games and domineering from this PR\n* style / proof simplification / golfing\n* some minor golfing\n* adding Reid to the author line\n* add @[simp]\n* adding two lemmas characterising the order relation\n* separating out game and pgame, and discarding lame lemmas\n* comment\n* fixes", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "def", "mk'", ["ordered_comm_group"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "refl_symm", ["equiv"]], ["add", "theorem", "sum_congr_symm", ["equiv"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card_erase_le", ["finset"]], ["add", "theorem", "card_erase_lt_of_mem", ["finset"]], ["add", "theorem", "card_ne_zero_of_mem", ["finset"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "card_erase_le", ["multiset"]], ["add", "theorem", "card_erase_lt_of_mem", ["multiset"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_pempty", []], ["add", "theorem", "forall_pempty", []], ["del", "theorem", "nonempty_pempty", []], ["add", "theorem", "not_nonempty_pempty", []]]}, {"oldPath": null, "newPath": "src/set_theory/game.lean", "changes": [["add", "def", "add", ["game"]], ["add", "theorem", "add_assoc", ["game"]], ["add", "theorem", "add_comm", ["game"]], ["add", "theorem", "add_le_add_left", ["game"]], ["add", "theorem", "add_left_neg", ["game"]], ["add", "theorem", "add_zero", ["game"]], ["add", "def", "game_partial_order", ["game"]], ["add", "def", "le", ["game"]], ["add", "theorem", "le_antisymm", ["game"]], ["add", "theorem", "le_refl", ["game"]], ["add", "theorem", "le_trans", ["game"]], ["add", "def", "lt", ["game"]], ["add", "def", "neg", ["game"]], ["add", "theorem", "not_le", ["game"]], ["add", "def", "ordered_comm_group_game", ["game"]], ["add", "theorem", "zero_add", ["game"]], ["add", "def", "game", []]]}, {"oldPath": null, "newPath": "src/set_theory/pgame.lean", "changes": [["add", "def", "add", ["pgame"]], ["add", "theorem", "add_assoc_equiv", ["pgame"]], ["add", "def", "add_assoc_relabelling", ["pgame"]], ["add", "theorem", "add_comm_equiv", ["pgame"]], ["add", "theorem", "add_comm_le", ["pgame"]], ["add", "def", "add_comm_relabelling", ["pgame"]], ["add", "theorem", "add_congr", ["pgame"]], ["add", "theorem", "add_le_add_left", ["pgame"]], ["add", "theorem", "add_le_add_right", ["pgame"]], ["add", "theorem", "add_left_neg_equiv", ["pgame"]], ["add", "theorem", "add_left_neg_le_zero", ["pgame"]], ["add", "theorem", "add_lt_add_left", ["pgame"]], ["add", "theorem", "add_lt_add_right", ["pgame"]], ["add", "theorem", "add_move_left_inl", ["pgame"]], ["add", "theorem", "add_move_left_inr", ["pgame"]], ["add", "theorem", "add_move_right_inl", ["pgame"]], ["add", "theorem", "add_move_right_inr", ["pgame"]], ["add", "theorem", "add_right_neg_le_zero", ["pgame"]], ["add", "def", "add_zero_equiv", ["pgame"]], ["add", "def", "add_zero_relabelling", ["pgame"]], ["add", "def", "equiv", ["pgame"]], ["add", "theorem", "equiv_of_relabelling", ["pgame"]], ["add", "theorem", "equiv_refl", ["pgame"]], ["add", "theorem", "equiv_symm", ["pgame"]], ["add", "theorem", "equiv_trans", ["pgame"]], ["add", "theorem", "le_congr", ["pgame"]], ["add", "theorem", "le_def", ["pgame"]], ["add", "theorem", "le_def_lt", ["pgame"]], ["add", "theorem", "le_iff_neg_ge", ["pgame"]], ["add", "theorem", "le_iff_sub_nonneg", ["pgame"]], ["add", "def", "le_lt", ["pgame"]], ["add", "theorem", "le_of_equiv_of_le", ["pgame"]], ["add", "theorem", "le_of_le_of_equiv", ["pgame"]], ["add", "theorem", "le_of_relabelling", ["pgame"]], ["add", "theorem", "le_of_restricted", ["pgame"]], ["add", "theorem", "le_refl", ["pgame"]], ["add", "theorem", "le_trans", ["pgame"]], ["add", "theorem", "le_trans_aux", ["pgame"]], ["add", "theorem", "le_zero", ["pgame"]], ["add", "theorem", "le_zero_iff_zero_le_neg", ["pgame"]], ["add", "def", "left_moves", ["pgame"]], ["add", "def", "left_moves_add", ["pgame"]], ["add", "theorem", "left_moves_mk", ["pgame"]], ["add", "def", "left_moves_neg", ["pgame"]], ["add", "theorem", "left_response_spec", ["pgame"]], ["add", "theorem", "lt_congr", ["pgame"]], ["add", "theorem", "lt_def", ["pgame"]], ["add", "theorem", "lt_def_le", ["pgame"]], ["add", "theorem", "lt_iff_neg_gt", ["pgame"]], ["add", "theorem", "lt_iff_sub_pos", ["pgame"]], ["add", "theorem", "lt_irrefl", ["pgame"]], ["add", "theorem", "lt_mk_of_le", ["pgame"]], ["add", "theorem", "lt_of_equiv_of_lt", ["pgame"]], ["add", "theorem", "lt_of_le_mk", ["pgame"]], ["add", "theorem", "lt_of_le_of_lt", ["pgame"]], ["add", "theorem", "lt_of_lt_of_equiv", ["pgame"]], ["add", "theorem", "lt_of_lt_of_le", ["pgame"]], ["add", "theorem", "lt_of_mk_le", ["pgame"]], ["add", "theorem", "lt_zero", ["pgame"]], ["add", "theorem", "mk_add_move_left_inl", ["pgame"]], ["add", "theorem", "mk_add_move_left_inr", ["pgame"]], ["add", "theorem", "mk_add_move_right_inl", ["pgame"]], ["add", "theorem", "mk_add_move_right_inr", ["pgame"]], ["add", "theorem", "mk_le_mk", ["pgame"]], ["add", "theorem", "mk_lt_mk", ["pgame"]], ["add", "theorem", "mk_lt_of_le", ["pgame"]], ["add", "def", "move_left", ["pgame"]], ["add", "theorem", "move_left_mk", ["pgame"]], ["add", "theorem", "move_left_right_moves_neg", ["pgame"]], ["add", "theorem", "move_left_right_moves_neg_symm", ["pgame"]], ["add", "def", "move_right", ["pgame"]], ["add", "theorem", "move_right_left_moves_neg", ["pgame"]], ["add", "theorem", "move_right_mk", ["pgame"]], ["add", "theorem", "move_right_right_moves_neg_symm", ["pgame"]], ["add", "theorem", "ne_of_lt", ["pgame"]], ["add", "def", "neg", ["pgame"]], ["add", "theorem", "neg_add_le", ["pgame"]], ["add", "def", "neg_add_relabelling", ["pgame"]], ["add", "theorem", "neg_congr", ["pgame"]], ["add", "theorem", "neg_def", ["pgame"]], ["add", "theorem", "neg_neg", ["pgame"]], ["add", "theorem", "neg_zero", ["pgame"]], ["add", "theorem", "not_le", ["pgame"]], ["add", "theorem", "not_le_lt", ["pgame"]], ["add", "theorem", "not_lt", ["pgame"]], ["add", "def", "of_lists", ["pgame"]], ["add", "def", "omega", ["pgame"]], ["add", "theorem", "one_left_moves", ["pgame"]], ["add", "theorem", "one_move_left", ["pgame"]], ["add", "theorem", "one_right_moves", ["pgame"]], ["add", "def", "relabel", ["pgame"]], ["add", "theorem", "relabel_move_left'", ["pgame"]], ["add", "theorem", "relabel_move_left", ["pgame"]], ["add", "theorem", "relabel_move_right'", ["pgame"]], ["add", "theorem", "relabel_move_right", ["pgame"]], ["add", "def", "relabel_relabelling", ["pgame"]], ["add", "def", "refl", ["pgame", "relabelling"]], ["add", "def", "symm", ["pgame", "relabelling"]], ["add", "inductive", "relabelling", ["pgame"]], ["add", "def", "refl", ["pgame", "restricted"]], ["add", "inductive", "restricted", ["pgame"]], ["add", "def", "restricted_of_relabelling", ["pgame"]], ["add", "def", "right_moves", ["pgame"]], ["add", "def", "right_moves_add", ["pgame"]], ["add", "theorem", "right_moves_mk", ["pgame"]], ["add", "def", "right_moves_neg", ["pgame"]], ["add", "theorem", "right_response_spec", ["pgame"]], ["add", "def", "star", ["pgame"]], ["add", "theorem", "star_lt_zero", ["pgame"]], ["add", "def", "left_move", ["pgame", "subsequent"]], ["add", "def", "right_move", ["pgame", "subsequent"]], ["add", "inductive", "subsequent", ["pgame"]], ["add", "theorem", "wf_subsequent", ["pgame"]], ["add", "def", "zero_add_equiv", ["pgame"]], ["add", "def", "zero_add_relabelling", ["pgame"]], ["add", "theorem", "zero_le", ["pgame"]], ["add", "theorem", "zero_le_add_left_neg", ["pgame"]], ["add", "theorem", "zero_le_add_right_neg", ["pgame"]], ["add", "theorem", "zero_le_iff_neg_le_zero", ["pgame"]], ["add", "theorem", "zero_left_moves", ["pgame"]], ["add", "theorem", "zero_lt", ["pgame"]], ["add", "theorem", "zero_lt_star", ["pgame"]], ["add", "theorem", "zero_right_moves", ["pgame"]], ["add", "inductive", "pgame", []]]}, {"oldPath": "src/set_theory/surreal.lean", "newPath": "src/set_theory/surreal.lean", "changes": [["del", "def", "add", ["pSurreal"]], ["del", "def", "equiv", ["pSurreal"]], ["del", "theorem", "equiv_refl", ["pSurreal"]], ["del", "theorem", "equiv_symm", ["pSurreal"]], ["del", "theorem", "equiv_trans", ["pSurreal"]], ["del", "def", "inv'", ["pSurreal"]], ["del", "def", "inv_val", ["pSurreal"]], ["del", "theorem", "le_congr", ["pSurreal"]], ["del", "def", "le_lt", ["pSurreal"]], ["del", "theorem", "le_of_lt", ["pSurreal"]], ["del", "theorem", "le_refl", ["pSurreal"]], ["del", "theorem", "le_trans", ["pSurreal"]], ["del", "theorem", "le_trans_aux", ["pSurreal"]], ["del", "theorem", "lt_asymm", ["pSurreal"]], ["del", "theorem", "lt_congr", ["pSurreal"]], ["del", "theorem", "lt_iff_le_not_le", ["pSurreal"]], ["del", "theorem", "lt_irrefl", ["pSurreal"]], ["del", "theorem", "lt_mk_of_le", ["pSurreal"]], ["del", "theorem", "lt_of_le_mk", ["pSurreal"]], ["del", "theorem", "lt_of_mk_le", ["pSurreal"]], ["del", "theorem", "mk_le_mk", ["pSurreal"]], ["del", "theorem", "mk_lt_mk", ["pSurreal"]], ["del", "theorem", "mk_lt_of_le", ["pSurreal"]], ["del", "def", "mul", ["pSurreal"]], ["del", "theorem", "ne_of_lt", ["pSurreal"]], ["del", "def", "neg", ["pSurreal"]], ["del", "theorem", "not_le", ["pSurreal"]], ["del", "theorem", "not_le_lt", ["pSurreal"]], ["del", "theorem", "not_lt", ["pSurreal"]], ["del", "def", "ok", ["pSurreal"]], ["del", "theorem", "ok_rec", ["pSurreal"]], ["del", "def", "omega", ["pSurreal"]], ["del", "inductive", "{u}", ["pSurreal"]], ["add", "theorem", "add_lt_add", ["pgame"]], ["add", "def", "inv'", ["pgame"]], ["add", "inductive", "inv_ty", ["pgame"]], ["add", "def", "inv_val", ["pgame"]], ["add", "theorem", "le_of_lt", ["pgame"]], ["add", "theorem", "lt_asymm", ["pgame"]], ["add", "theorem", "lt_iff_le_not_le", ["pgame"]], ["add", "def", "mul", ["pgame"]], ["add", "theorem", "le_move_right", ["pgame", "numeric"]], ["add", "theorem", "lt_move_right", ["pgame", "numeric"]], ["add", "def", "move_left", ["pgame", "numeric"]], ["add", "theorem", "move_left_le", ["pgame", "numeric"]], ["add", "theorem", "move_left_lt", ["pgame", "numeric"]], ["add", "def", "move_right", ["pgame", "numeric"]], ["add", "def", "numeric", ["pgame"]], ["add", "theorem", "numeric_add", ["pgame"]], ["add", "theorem", "numeric_neg", ["pgame"]], ["add", "theorem", "numeric_one", ["pgame"]], ["add", "theorem", "numeric_rec", ["pgame"]], ["add", "theorem", "numeric_zero", ["pgame"]], ["add", "def", "add", ["surreal"]], ["add", "theorem", "add_assoc", ["surreal"]], ["mod", "def", "equiv", ["surreal"]], ["mod", "def", "lift", ["surreal"]], ["mod", "def", "lift₂", ["surreal"]], ["mod", "def", "mk", ["surreal"]], ["del", "inductive", "{u}", []]]}]}, {"timestamp": 1568735400, "sha": "19a246c4", "message": "fix(category_theory): require morphisms are in Type, again (#1412)\n* chore(category_theory): require morphisms live in Type\n* move back to Type\n* fixes", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/category/Groupoid.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/category/default.lean", "newPath": "src/category_theory/category/default.lean", "changes": [["mod", "def", "large_category", ["category_theory"]], ["mod", "def", "small_category", ["category_theory"]]]}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "def", "over", ["category_theory"]], ["mod", "def", "under", ["category_theory"]]]}, {"oldPath": "src/category_theory/conj.lean", "newPath": "src/category_theory/conj.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["mod", "def", "Aut", ["category_theory"]], ["mod", "def", "End", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["mod", "def", "large_groupoid", ["category_theory"]], ["mod", "def", "small_groupoid", ["category_theory"]]]}, {"oldPath": "src/category_theory/hom_functor.lean", "newPath": "src/category_theory/hom_functor.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "map_post", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "map_post", ["category_theory", "limits", "limit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_limits.lean", "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/finite_products.lean", "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["mod", "def", "μ_nat_iso", ["category_theory", "monoidal_functor"]]]}, {"oldPath": "src/category_theory/monoidal/of_has_finite_products.lean", "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["mod", "structure", "nat_trans", ["category_theory"]]]}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": [["mod", "def", "empty", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": []}, {"oldPath": "src/category_theory/products/basic.lean", "newPath": "src/category_theory/products/basic.lean", "changes": []}, {"oldPath": "src/category_theory/products/bifunctor.lean", "newPath": "src/category_theory/products/bifunctor.lean", "changes": []}, {"oldPath": "src/category_theory/sums/associator.lean", "newPath": "src/category_theory/sums/associator.lean", "changes": []}, {"oldPath": "src/category_theory/sums/basic.lean", "newPath": "src/category_theory/sums/basic.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["mod", "theorem", "types_comp", ["category_theory"]], ["mod", "theorem", "types_hom", ["category_theory"]], ["mod", "theorem", "types_id", ["category_theory"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["mod", "def", "coyoneda", ["category_theory"]], ["mod", "def", "yoneda", ["category_theory"]], ["mod", "def", "yoneda_sections", ["category_theory"]], ["mod", "def", "yoneda_sections_small", ["category_theory"]]]}, {"oldPath": "src/topology/category/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/category/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/sheaves/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/sheaves/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1568696769, "sha": "ab2c546d", "message": "feat(data/quot): define `quotient.map` and `quotient.map₂` (dep: 1441) (#1442)\n* chore(algebra/group,logic/relator): review some explicit/implicit arguments\n* ring_hom.ext too\n* feat(data/quot): define `quotient.map` and `quotient.map₂`\n* Add comments\n* Fix a typo\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}]}, {"timestamp": 1568688260, "sha": "d4cc1790", "message": "feat(logic/basic): eq_iff_eq_cancel (#1447)\n* feat(logic/basic): eq_iff_eq_cancel\nThese lemmas or not meant for `rw` but to be applied, as a sort of congruence lemma.\n* State lemmas as iff\n* Make'm simp", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "eq_iff_eq_cancel_left", []], ["add", "theorem", "eq_iff_eq_cancel_right", []]]}]}, {"timestamp": 1568681915, "sha": "c4125272", "message": "feat(data/list/sort): ordered_insert lemmas (#1437)\n* feat(data/list/sort): ordered_insert lemmas\n* add a lemma about L.tail.count", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "count_tail", ["list"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["add", "theorem", "ordered_insert_count", ["list"]], ["add", "theorem", "ordered_insert_length", ["list"]], ["add", "theorem", "ordered_insert_nil", ["list"]], ["add", "theorem", "tail", ["list", "sorted"]]]}]}, {"timestamp": 1568675270, "sha": "dd0ff1c4", "message": "feat(data/nat/basic): dvd_add_self_{left,right} (#1448)\n* feat(data/nat/basic): dvd_add_self_{left,right}\nTwo simp-lemmas of the form\n```lean\n@[simp] protected lemma dvd_add_self_left {m n : ℕ} :\n m ∣ m + n ↔ m ∣ n :=\ndvd_add_right (dvd_refl m)\n```\n* Oops, lemmas were protected\n* Provide version for rings", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "dvd_add_self_left", []], ["add", "theorem", "dvd_add_self_right", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}]}, {"timestamp": 1568674164, "sha": "929c1869", "message": "fix(docs/tutorial/category_theory): fix import (#1440)\n* fix(docs/tutorial/category_theory): fix import\n* fix(.travis.yml): Travis stages to build docs/\n* cache docs/ in travis build", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": []}]}, {"timestamp": 1568668049, "sha": "a3ccc7ac", "message": "chore(category_theory/notation): update notation for prod and coprod (#1413)\n* updating notation for categorical prod and coprod\n* update notation", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "def", "braiding", ["category_theory", "limits", "coprod"]], ["mod", "def", "desc", ["category_theory", "limits", "coprod"]], ["mod", "def", "inl", ["category_theory", "limits", "coprod"]], ["mod", "def", "inr", ["category_theory", "limits", "coprod"]], ["mod", "def", "braiding", ["category_theory", "limits", "prod"]], ["mod", "def", "fst", ["category_theory", "limits", "prod"]], ["mod", "def", "lift", ["category_theory", "limits", "prod"]], ["mod", "def", "snd", ["category_theory", "limits", "prod"]]]}]}, {"timestamp": 1568649664, "sha": "b2b0de46", "message": "feat(algebra/group/basic): mul_left_eq_self etc (#1446)\nSimp-lemmas for groups of the form a * b = b ↔ a = 1.", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "mul_left_eq_self", []], ["add", "theorem", "mul_right_eq_self", []]]}]}, {"timestamp": 1568626013, "sha": "d7f0e686", "message": "chore(algebra/group,logic/relator): review some explicit/implicit args (#1441)\n* chore(algebra/group,logic/relator): review some explicit/implicit arguments\n* ring_hom.ext too", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "ext", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["mod", "theorem", "divp_eq_iff_mul_eq", []], ["mod", "theorem", "divp_eq_one_iff_eq", []], ["mod", "theorem", "ext", ["units"]]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["mod", "theorem", "ext", ["ring_hom"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}]}, {"timestamp": 1568437240, "sha": "81a31ca4", "message": "chore(data/*): flipping inequalities (#1436)\n* chore(data/*): flipping inequalities\n* some more\n* Update src/algebra/order_functions.lean\n* fixing some names\n* fix\n* fixes\n* fixes\n* making names/comments uniform\n* fixes\n* fixes\n* fix\n* rename\n* fixes\n* fixes\n* fix\n* renames\n* I'm so bad at this\n* ...\n* fixes", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["del", "theorem", "pow_unbounded_of_gt_one", []], ["add", "theorem", "pow_unbounded_of_one_lt", []]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["del", "theorem", "fpow_ge_one_of_nonneg", []], ["mod", "theorem", "fpow_le_one_of_nonpos", []], ["mod", "theorem", "fpow_nonneg_of_nonneg", []], ["mod", "theorem", "fpow_pos_of_pos", []], ["add", "theorem", "one_le_fpow_of_nonneg", []], ["mod", "theorem", "one_lt_fpow", []], ["mod", "theorem", "one_lt_pow", []], ["mod", "theorem", "pow_le_max_of_min_le", []]]}, {"oldPath": "src/algebra/floor.lean", "newPath": "src/algebra/floor.lean", "changes": [["mod", "theorem", "ceil_nonneg", []]]}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": [["mod", "theorem", "gcd_pos_of_non_zero_left", ["int"]], ["mod", "theorem", "gcd_pos_of_non_zero_right", ["int"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "smul_sub", ["add_monoid"]], ["add", "theorem", "one_add_mul_le_pow", []], ["add", "theorem", "one_add_sub_mul_le_pow", []], ["del", "theorem", "pow_ge_one_add_mul", []], ["del", "theorem", "pow_ge_one_add_sub_mul", []], ["mod", "theorem", "pow_sub", []]]}, {"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["mod", "theorem", "ne_iff_lt_or_gt", ["decidable"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["mod", "theorem", "abs_eq", []]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "le_add_of_nonneg_left'", []], ["mod", "theorem", "le_add_of_nonneg_right'", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["mod", "theorem", "le_mul_iff_one_le_left", []], ["mod", "theorem", "le_mul_iff_one_le_right", []], ["del", "theorem", "le_mul_of_ge_one_left'", []], ["del", "theorem", "le_mul_of_ge_one_right'", []], ["add", "theorem", "le_mul_of_one_le_left'", []], ["add", "theorem", "le_mul_of_one_le_right'", []], ["mod", "theorem", "lt_mul_iff_one_lt_left", []], ["mod", "theorem", "lt_mul_iff_one_lt_right", []], ["del", "theorem", "lt_mul_of_gt_one_right'", []], ["add", "theorem", "lt_mul_of_one_lt_right'", []], ["mod", "theorem", "mul_le_iff_le_one_left", []], ["mod", "theorem", "mul_le_iff_le_one_right", []], ["mod", "theorem", "mul_lt_iff_lt_one_left", []], ["mod", "theorem", "mul_lt_iff_lt_one_right", []], ["add", "theorem", "mul_nonneg'", []], ["add", "theorem", "mul_pos'", []], ["del", "theorem", "zero_le_mul", []]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "add_nat_val", ["fin"]], ["mod", "def", "sub_nat", ["fin"]], ["mod", "theorem", "sub_nat_val", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["del", "theorem", "filter_ge", ["finset", "Ico"]], ["del", "theorem", "filter_ge_of_ge", ["finset", "Ico"]], ["del", "theorem", "filter_ge_of_le_bot", ["finset", "Ico"]], ["del", "theorem", "filter_ge_of_top_le", ["finset", "Ico"]], ["add", "theorem", "filter_le", ["finset", "Ico"]], ["add", "theorem", "filter_le_of_le", ["finset", "Ico"]], ["add", "theorem", "filter_le_of_le_bot", ["finset", "Ico"]], ["add", "theorem", "filter_le_of_top_le", ["finset", "Ico"]], ["mod", "theorem", "pred_singleton", ["finset", "Ico"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["del", "theorem", "exists_ne_of_card_gt_one", ["fintype"]], ["add", "theorem", "exists_ne_of_one_lt_card", ["fintype"]]]}, {"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "div_le_self", ["int"]], ["mod", "theorem", "div_neg'", ["int"]], ["mod", "theorem", "div_of_neg_of_pos", ["int"]], ["mod", "theorem", "div_pos_of_pos_of_dvd", ["int"]], ["mod", "theorem", "dvd_antisymm", ["int"]], ["mod", "theorem", "eq_one_of_dvd_one", ["int"]], ["mod", "theorem", "eq_one_of_mul_eq_one_left", ["int"]], ["mod", "theorem", "eq_one_of_mul_eq_one_right", ["int"]], ["mod", "theorem", "le_of_dvd", ["int"]], ["mod", "theorem", "lt_div_add_one_mul_self", ["int"]], ["mod", "theorem", "mod_lt_of_pos", ["int"]], ["mod", "theorem", "mod_nonneg", ["int"]], ["mod", "theorem", "mul_div_mul_of_pos", ["int"]], ["mod", "theorem", "mul_div_mul_of_pos_left", ["int"]], ["mod", "theorem", "mul_mod_mul_of_pos", ["int"]], ["mod", "theorem", "neg_succ_of_nat_div", ["int"]], ["mod", "theorem", "neg_succ_of_nat_mod", ["int"]]]}, {"oldPath": "src/data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": [["mod", "theorem", "exists_unique_equiv", ["int", "modeq"]], ["mod", "theorem", "exists_unique_equiv_nat", ["int", "modeq"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "filter_ge", ["list", "Ico"]], ["del", "theorem", "filter_ge_of_ge", ["list", "Ico"]], ["del", "theorem", "filter_ge_of_le_bot", ["list", "Ico"]], ["del", "theorem", "filter_ge_of_top_le", ["list", "Ico"]], ["add", "theorem", "filter_le", ["list", "Ico"]], ["add", "theorem", "filter_le_of_le", ["list", "Ico"]], ["add", "theorem", "filter_le_of_le_bot", ["list", "Ico"]], ["add", "theorem", "filter_le_of_top_le", ["list", "Ico"]], ["mod", "theorem", "pred_singleton", ["list", "Ico"]], ["del", "theorem", "nth_ge_len", ["list"]], ["add", "theorem", "nth_len_le", ["list"]], ["del", "theorem", "take_all_of_ge", ["list"]], ["add", "theorem", "take_all_of_le", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["del", "theorem", "filter_ge", ["multiset", "Ico"]], ["del", "theorem", "filter_ge_of_ge", ["multiset", "Ico"]], ["del", "theorem", "filter_ge_of_le_bot", ["multiset", "Ico"]], ["del", "theorem", "filter_ge_of_top_le", ["multiset", "Ico"]], ["add", "theorem", "filter_le", ["multiset", "Ico"]], ["add", "theorem", "filter_le_of_le", ["multiset", "Ico"]], ["add", "theorem", "filter_le_of_le_bot", ["multiset", "Ico"]], ["add", "theorem", "filter_le_of_top_le", ["multiset", "Ico"]], ["mod", "theorem", "pred_singleton", ["multiset", "Ico"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["mod", "theorem", "add_pos_iff_pos_or_pos", ["nat"]], ["mod", "theorem", "add_pos_left", ["nat"]], ["mod", "theorem", "add_pos_right", ["nat"]], ["mod", "theorem", "dvd_fact", ["nat"]], ["mod", "theorem", "fact_pos", ["nat"]], ["mod", "theorem", "le_induction", ["nat"]], ["mod", "theorem", "le_mul_of_pos_left", ["nat"]], ["mod", "theorem", "le_mul_of_pos_right", ["nat"]], ["mod", "theorem", "lt_pow_self", ["nat"]], ["mod", "theorem", "not_pos_pow_dvd", ["nat"]], ["mod", "theorem", "pos_iff_ne_zero", ["nat"]], ["mod", "theorem", "pow_lt_pow_succ", ["nat"]], ["mod", "theorem", "pow_pos", ["nat"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "cast_pred", ["nat"]]]}, {"oldPath": "src/data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": [["mod", "theorem", "dist_pos_of_ne", ["nat"]]]}, {"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["mod", "theorem", "coprime_div_gcd_div_gcd", ["nat"]], ["mod", "theorem", "coprime_of_dvd", ["nat"]], ["mod", "theorem", "exists_coprime'", ["nat"]], ["mod", "theorem", "exists_coprime", ["nat"]], ["mod", "theorem", "gcd_le_left", ["nat"]], ["mod", "theorem", "gcd_le_right", ["nat"]], ["mod", "theorem", "gcd_pos_of_pos_left", ["nat"]], ["mod", "theorem", "gcd_pos_of_pos_right", ["nat"]], ["mod", "theorem", "not_coprime_of_dvd_of_dvd", ["nat"]]]}, {"oldPath": "src/data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "src/data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": [["mod", "theorem", "unpair_lt", ["nat"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["mod", "theorem", "even_sub", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "dvd_prime_ge_two", ["nat"]], ["add", "theorem", "dvd_prime_two_le", ["nat"]], ["mod", "theorem", "exists_dvd_of_not_prime2", ["nat"]], ["mod", "theorem", "exists_dvd_of_not_prime", ["nat"]], ["mod", "theorem", "exists_infinite_primes", ["nat"]], ["mod", "theorem", "exists_prime_and_dvd", ["nat"]], ["mod", "theorem", "min_fac_aux_has_prop", ["nat"]], ["mod", "theorem", "min_fac_le", ["nat"]], ["mod", "theorem", "min_fac_le_of_dvd", ["nat"]], ["mod", "theorem", "min_fac_pos", ["nat"]], ["mod", "theorem", "not_prime_iff_min_fac_lt", ["nat"]], ["del", "theorem", "ge_two", ["nat", "prime"]], ["del", "theorem", "gt_one", ["nat", "prime"]], ["add", "theorem", "one_lt", ["nat", "prime"]], ["mod", "theorem", "pos", ["nat", "prime"]], ["mod", "theorem", "pred_pos", ["nat", "prime"]], ["add", "theorem", "two_le", ["nat", "prime"]], ["mod", "def", "prime", ["nat"]], ["mod", "theorem", "prime_def_le_sqrt", ["nat"]], ["mod", "theorem", "prime_def_lt'", ["nat"]], ["mod", "theorem", "prime_def_lt", ["nat"]], ["mod", "theorem", "prime_def_min_fac", ["nat"]]]}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": [["mod", "theorem", "sqrt_lt_self", ["nat"]], ["mod", "theorem", "sqrt_pos", ["nat"]]]}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": [["mod", "theorem", "cast_pos", ["pos_num"]], ["mod", "theorem", "to_nat_pos", ["pos_num"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["mod", "def", "to_pnat", ["nat"]], ["mod", "theorem", "pos", ["pnat"]], ["mod", "theorem", "sub_coe", ["pnat"]], ["mod", "theorem", "to_pnat'_coe", ["pnat"]], ["mod", "def", "pnat", []]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": [["mod", "theorem", "mk_nonneg", ["rat"]]]}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/basic.lean", "newPath": "src/data/zsqrtd/basic.lean", "changes": [["mod", "theorem", "not_sq_le_succ", ["zsqrtd"]]]}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1568360284, "sha": "e3234f04", "message": "feat(algebra/ring): add coercions from →+* to →* and →+ (#1435)\n* feat(algebra/ring): add coercions from →+* to →* and →+\n* two lemmas simplifying casts\n* add squash_cast attributes", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "coe_add_monoid_hom", []], ["add", "theorem", "coe_monoid_hom", []]]}]}, {"timestamp": 1568245876, "sha": "590fb896", "message": "chore(category_theory/functor_category): improve comment warning about hcomp_assoc [ci skip] (#1434)\n* expanding comment\n* no scare quotes", "changes": [{"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}]}, {"timestamp": 1568223761, "sha": "140a606a", "message": "feat(well_founded_tactics): patch default_dec_tac (#1419)\n* let simp flip inequalities\n* feat(well_founded_tactics): patch default_dec_tac\n* Keeley's suggested syntax, and adding to the docs\n* more\n* add docs", "changes": [{"oldPath": "docs/extras/well_founded_recursion.md", "newPath": "docs/extras/well_founded_recursion.md", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "succ_pos'", ["nat"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["mod", "theorem", "nth_map", ["vector"]]]}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/well_founded_tactics.lean", "changes": []}]}, {"timestamp": 1568205981, "sha": "e27142aa", "message": "chore(*): renaming files constructing category instances (#1432)", "changes": [{"oldPath": "src/algebra/CommRing/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/algebra/Mon/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/algebra/CommRing/adjunctions.lean", "newPath": "src/algebra/category/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/CommRing/basic.lean", "newPath": "src/algebra/category/CommRing/basic.lean", "changes": []}, {"oldPath": "src/algebra/CommRing/colimits.lean", "newPath": "src/algebra/category/CommRing/colimits.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/CommRing/default.lean", "changes": []}, {"oldPath": "src/algebra/CommRing/limits.lean", "newPath": "src/algebra/category/CommRing/limits.lean", "changes": []}, {"oldPath": "src/group_theory/category.lean", "newPath": "src/algebra/category/Group.lean", "changes": []}, {"oldPath": "src/algebra/Mon/basic.lean", "newPath": "src/algebra/category/Mon/basic.lean", "changes": []}, {"oldPath": "src/algebra/Mon/colimits.lean", "newPath": "src/algebra/category/Mon/colimits.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/category/Mon/default.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/category_theory/Cat.lean", "newPath": "src/category_theory/category/Cat.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid_category.lean", "newPath": "src/category_theory/category/Groupoid.lean", "changes": []}, {"oldPath": "src/category_theory/instances/kleisli.lean", "newPath": "src/category_theory/category/Kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/instances/rel.lean", "newPath": "src/category_theory/category/Rel.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category/default.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}, {"oldPath": "src/measure_theory/Meas.lean", "newPath": "src/measure_theory/category/Meas.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/topology/Top/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/topology/algebra/TopCommRing/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/topology/Top/adjunctions.lean", "newPath": "src/topology/category/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/Top/basic.lean", "newPath": "src/topology/category/Top/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/category/Top/default.lean", "changes": []}, {"oldPath": "src/topology/Top/epi_mono.lean", "newPath": "src/topology/category/Top/epi_mono.lean", "changes": []}, {"oldPath": "src/topology/Top/limits.lean", "newPath": "src/topology/category/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/Top/open_nhds.lean", "newPath": "src/topology/category/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/Top/opens.lean", "newPath": "src/topology/category/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/algebra/TopCommRing/basic.lean", "newPath": "src/topology/category/TopCommRing.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/UniformSpace.lean", "newPath": "src/topology/category/UniformSpace.lean", "changes": []}, {"oldPath": "src/topology/Top/presheaf.lean", "newPath": "src/topology/sheaves/presheaf.lean", "changes": []}, {"oldPath": "src/topology/Top/presheaf_of_functions.lean", "newPath": "src/topology/sheaves/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/Top/stalks.lean", "newPath": "src/topology/sheaves/stalks.lean", "changes": []}]}, {"timestamp": 1568173938, "sha": "8a5156fc", "message": "fix(algebra/*/colimits): avoid explicit `infer_instance` (#1430)\nWith an explicit universe level Lean can do it automatically.", "changes": [{"oldPath": "src/algebra/CommRing/colimits.lean", "newPath": "src/algebra/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/Mon/colimits.lean", "newPath": "src/algebra/Mon/colimits.lean", "changes": []}]}, {"timestamp": 1568166544, "sha": "45fe081f", "message": "feat(logic): make some decidability proofs [inline] (#1393)\n* feat(logic): make some decidability proofs [inline]\n* inline more decidability proofs\n* test\n* import logic.basic in test", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "test/logic_inline.lean", "changes": []}]}, {"timestamp": 1568158735, "sha": "8e46fa5a", "message": "chore(algebra/group/to_additive): map_namespace should make a meta constant (#1409)\n* chore(algebra/group/to_additive): map_namespace should make a meta constance\n`map_namespace` now produces a `meta constant` instead of a constant. This means that after importing `group_theory/coset` and typing `#print axioms`, `quotient_group._to_additive` is not in the list, since it is now a `meta constant`. This is a little bit neater, and it doesn't look like we're adding any axioms.\n* Update to_additive.lean\n* Update to_additive.lean", "changes": [{"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": []}]}, {"timestamp": 1568155462, "sha": "e2f904ec", "message": "feat(tactic/auto_cases): run auto_cases on false and psigma (#1428)", "changes": [{"oldPath": "src/tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}]}, {"timestamp": 1568145317, "sha": "c87ec0e4", "message": "feat(tactic/{abel,ring}): state conditions of tactics more precisely (#1423)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": null, "newPath": "test/abel.lean", "changes": []}]}, {"timestamp": 1568129609, "sha": "2dd6398e", "message": "let simp flip inequalities (#1418)", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "ge_iff_le", []], ["add", "theorem", "gt_iff_lt", []]]}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}]}, {"timestamp": 1568114797, "sha": "0935e8bf", "message": "feat(algebra/group/units): add some lemmas about `divp` (#1388)\n* feat(algebra/group/units): add some lemmas about `divp`\n* Rename lemmas, add new ones", "changes": [{"oldPath": "src/algebra/group/units.lean", "newPath": "src/algebra/group/units.lean", "changes": [["add", "theorem", "divp_divp_eq_divp_mul", []], ["add", "theorem", "divp_eq_divp_iff", []], ["add", "theorem", "divp_eq_iff_mul_eq", []], ["del", "theorem", "divp_eq_one", []], ["add", "theorem", "divp_eq_one_iff_eq", []], ["add", "theorem", "divp_inv", []], ["add", "theorem", "divp_mul_divp", []]]}]}, {"timestamp": 1568107950, "sha": "fe1575a0", "message": "chore(topology): sanity_check pass (#1416)\n* chore(topology): sanity_check pass\n* improvement\n* avoid _inst_3 to recover instance", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["mod", "theorem", "is_o_iff_tendsto", ["asymptotics"]]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": [["mod", "theorem", "convex_on_sum", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "theorem", "is_O_comp", ["is_bounded_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "is_O_comp", ["continuous_linear_map"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "ball_of_forall", []], ["mod", "theorem", "not_iff", []]]}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "antisymm_of_asymm", []], ["del", "def", "antisymm_of_asymm", []], ["mod", "theorem", "comp_le_comp_left_of_monotone", []], ["mod", "theorem", "dense_or_discrete", []]]}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["mod", "theorem", "coe_ne_top", ["with_top"]], ["mod", "theorem", "top_ne_coe", ["with_top"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "has_Inf_to_nonempty", ["lattice"]], ["del", "def", "has_Inf_to_nonempty", ["lattice"]], ["add", "theorem", "has_Sup_to_nonempty", ["lattice"]], ["del", "def", "has_Sup_to_nonempty", ["lattice"]], ["mod", "theorem", "insert_of_has_insert", ["lattice"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "cInf_interval", ["lattice"]], ["mod", "theorem", "cSup_interval", ["lattice"]]]}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": [["add", "theorem", "mem_pmap", ["filter"]], ["del", "def", "mem_pmap", ["filter"]], ["add", "theorem", "mem_rcomap'", ["filter"]], ["del", "def", "mem_rcomap'", ["filter"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["mod", "theorem", "liminf_le_liminf", ["filter"]], ["mod", "theorem", "liminf_le_limsup", ["filter"]], ["mod", "theorem", "limsup_le_limsup", ["filter"]]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "def", "nat_gt", ["order_embedding"]], ["del", "theorem", "nat_gt", ["order_embedding"]], ["add", "def", "nat_lt", ["order_embedding"]], ["del", "theorem", "nat_lt", ["order_embedding"]], ["mod", "theorem", "well_founded_iff_no_descending_seq", ["order_embedding"]], ["add", "def", "prod_lex_congr", ["order_iso"]], ["del", "theorem", "prod_lex_congr", ["order_iso"]], ["add", "def", "sum_lex_congr", ["order_iso"]], ["del", "theorem", "sum_lex_congr", ["order_iso"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "nhds_is_mul_hom", []], ["del", "def", "nhds_is_mul_hom", []], ["mod", "theorem", "quotient_group_saturate", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["mod", "theorem", "has_sum_hom", []]]}, {"oldPath": "src/topology/algebra/module.lean", "newPath": "src/topology/algebra/module.lean", "changes": [["mod", "theorem", "coe_add'", ["continuous_linear_map"]], ["mod", "theorem", "coe_add", ["continuous_linear_map"]], ["mod", "theorem", "coe_apply'", ["continuous_linear_map"]], ["mod", "theorem", "coe_apply", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg'", ["continuous_linear_map"]], ["mod", "theorem", "coe_neg", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub'", ["continuous_linear_map"]], ["mod", "theorem", "coe_sub", ["continuous_linear_map"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": [["mod", "theorem", "quotient_ring_saturate", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "mem_closure", []], ["mod", "theorem", "tendsto_pure_nhds", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "continuous_at_subtype_val", []], ["mod", "def", "subtype_emb", ["dense_embedding"]], ["mod", "theorem", "dense_range_prod", []], ["mod", "theorem", "diagonal_eq_range_diagonal_map", []], ["mod", "theorem", "is_closed_diagonal", []], ["mod", "theorem", "is_closed_eq", []], ["mod", "theorem", "is_closed_prod", []], ["mod", "theorem", "is_closed_property", []], ["mod", "theorem", "continuous_at_length", ["list"]], ["mod", "theorem", "tendsto_cons", ["list"]], ["mod", "theorem", "tendsto_cons_iff", ["list"]], ["mod", "theorem", "tendsto_insert_nth", ["list"]], ["mod", "theorem", "tendsto_nhds", ["list"]], ["mod", "theorem", "locally_compact_of_compact_nhds", []], ["mod", "theorem", "mem_closure2", []], ["mod", "theorem", "normal_of_compact_t2", []], ["mod", "theorem", "prod_eq_generate_from", []], ["mod", "theorem", "prod_generate_from_generate_from_eq", []], ["mod", "theorem", "prod_subset_compl_diagonal_iff_disjoint", []], ["mod", "theorem", "tendsto_subtype_rng", []]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "def", "inhabited", ["dense_range"]], ["del", "theorem", "inhabited", ["dense_range"]], ["mod", "theorem", "map_nhds_eq", ["embedding"]], ["add", "theorem", "mk'", ["embedding"]], ["del", "def", "mk'", ["embedding"]], ["mod", "theorem", "map_nhds_eq", ["inducing"]], ["mod", "theorem", "nhds_eq_comap", ["inducing"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "dist_eq", ["subtype"]]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": [["mod", "theorem", "B2_lim", ["sequentially_complete"]], ["mod", "theorem", "B2_pos", ["sequentially_complete"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "edist_eq", ["subtype"]]]}, {"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": [["mod", "theorem", "glue_dist_glued_points", ["metric"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "def", "isometric_on_range", ["isometry"]], ["del", "theorem", "isometric_on_range", ["isometry"]]]}, {"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "theorem", "gc", ["topological_space", "opens"]], ["del", "def", "gc", ["topological_space", "opens"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "continuous_iff_continuous_on_univ", []], ["del", "def", "continuous_iff_continuous_on_univ", []], ["mod", "theorem", "continuous_within_at_iff_ptendsto_res", []], ["mod", "theorem", "induced_compose", []], ["mod", "theorem", "principal_subtype", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": [["mod", "theorem", "compact_image", []], ["mod", "theorem", "compact_of_closed", []], ["mod", "theorem", "compact_range", []], ["mod", "theorem", "compact_univ", []]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1568080513, "sha": "72d6325a", "message": "feat(sanity_check): greatly improve performance (#1389)\n* feat(sanity_check): greatly improve performance\n* move and rename is_in_mathlib_aux\n* use boolean connectives in some other places\n* remove some whitespace\n* fix parentheses, fix tests\nthe tests correctly spotted a mistake I made\n* add ! as boolean negation\n* fix binding strength\n* undo the use of boolean connectives\n* add back notation ! for bnot", "changes": [{"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "mmap_filter", ["list"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/sanity_check.lean", "newPath": "src/tactic/sanity_check.lean", "changes": []}, {"oldPath": "test/sanity_check.lean", "newPath": "test/sanity_check.lean", "changes": []}]}, {"timestamp": 1568063473, "sha": "228d5bad", "message": "feat(algebra/big_operators): sum_eq_zero_iff_of_nonpos (#1424)\n* feat(algebra/big_operators): sum_eq_zero_iff_of_nonpos\n* more order_dual instances", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_eq_zero_iff_of_nonpos", ["finset"]]]}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1567960625, "sha": "313fe11b", "message": "feat(algebra/floor): Split floor from archimedean file. (#1372)\n* feat(algebra/floor): Split floor from archimedean file.\n* feat({algebra,rat}/floor): move lemmas/defs from rat.floor to algebra.floor", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["del", "theorem", "abs_sub_lt_one_of_floor_eq_floor", []], ["del", "def", "ceil", []], ["del", "theorem", "ceil_add_int", []], ["del", "theorem", "ceil_coe", []], ["del", "theorem", "ceil_le", []], ["del", "theorem", "ceil_lt_add_one", []], ["del", "theorem", "ceil_mono", []], ["del", "theorem", "ceil_nonneg", []], ["del", "theorem", "ceil_pos", []], ["del", "theorem", "ceil_sub_int", []], ["del", "theorem", "ceil_zero", []], ["del", "def", "floor", []], ["del", "theorem", "floor_add_fract", []], ["del", "theorem", "floor_add_int", []], ["del", "theorem", "floor_coe", []], ["del", "theorem", "floor_eq_iff", []], ["del", "theorem", "floor_fract", []], ["del", "theorem", "floor_le", []], ["del", "theorem", "floor_lt", []], ["del", "theorem", "floor_mono", []], ["del", "theorem", "floor_nonneg", []], ["del", "theorem", "floor_one", []], ["del", "theorem", "floor_sub_int", []], ["del", "theorem", "floor_zero", []], ["del", "def", "fract", []], ["del", "theorem", "fract_add", []], ["del", "theorem", "fract_add_floor", []], ["del", "theorem", "fract_coe", []], ["del", "theorem", "fract_eq_fract", []], ["del", "theorem", "fract_eq_iff", []], ["del", "theorem", "fract_floor", []], ["del", "theorem", "fract_fract", []], ["del", "theorem", "fract_lt_one", []], ["del", "theorem", "fract_mul_nat", []], ["del", "theorem", "fract_nonneg", []], ["del", "theorem", "fract_zero", []], ["del", "theorem", "le_ceil", []], ["del", "theorem", "le_floor", []], ["del", "theorem", "lt_ceil", []], ["del", "theorem", "lt_floor_add_one", []], ["del", "theorem", "lt_succ_floor", []], ["del", "theorem", "sub_one_lt_floor", []]]}, {"oldPath": null, "newPath": "src/algebra/floor.lean", "changes": [["add", "theorem", "abs_sub_lt_one_of_floor_eq_floor", []], ["add", "def", "ceil", []], ["add", "theorem", "ceil_add_int", []], ["add", "theorem", "ceil_coe", []], ["add", "theorem", "ceil_le", []], ["add", "theorem", "ceil_lt_add_one", []], ["add", "theorem", "ceil_mono", []], ["add", "theorem", "ceil_nonneg", []], ["add", "theorem", "ceil_pos", []], ["add", "theorem", "ceil_sub_int", []], ["add", "theorem", "ceil_zero", []], ["add", "def", "floor", []], ["add", "theorem", "floor_add_fract", []], ["add", "theorem", "floor_add_int", []], ["add", "theorem", "floor_coe", []], ["add", "theorem", "floor_eq_iff", []], ["add", "theorem", "floor_fract", []], ["add", "theorem", "floor_le", []], ["add", "theorem", "floor_lt", []], ["add", "theorem", "floor_mono", []], ["add", "theorem", "floor_nonneg", []], ["add", "theorem", "floor_one", []], ["add", "theorem", "floor_ring_unique", []], ["add", "theorem", "floor_sub_int", []], ["add", "theorem", "floor_zero", []], ["add", "def", "fract", []], ["add", "theorem", "fract_add", []], ["add", "theorem", "fract_add_floor", []], ["add", "theorem", "fract_coe", []], ["add", "theorem", "fract_eq_fract", []], ["add", "theorem", "fract_eq_iff", []], ["add", "theorem", "fract_floor", []], ["add", "theorem", "fract_fract", []], ["add", "theorem", "fract_lt_one", []], ["add", "theorem", "fract_mul_nat", []], ["add", "theorem", "fract_nonneg", []], ["add", "theorem", "fract_zero", []], ["add", "theorem", "le_ceil", []], ["add", "theorem", "le_floor", []], ["add", "theorem", "le_nat_ceil", []], ["add", "theorem", "lt_ceil", []], ["add", "theorem", "lt_floor_add_one", []], ["add", "theorem", "lt_nat_ceil", []], ["add", "theorem", "lt_succ_floor", []], ["add", "def", "nat_ceil", []], ["add", "theorem", "nat_ceil_add_nat", []], ["add", "theorem", "nat_ceil_coe", []], ["add", "theorem", "nat_ceil_le", []], ["add", "theorem", "nat_ceil_lt_add_one", []], ["add", "theorem", "nat_ceil_mono", []], ["add", "theorem", "nat_ceil_zero", []], ["add", "theorem", "sub_one_lt_floor", []]]}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": [["del", "def", "ceil", ["rat"]], ["del", "theorem", "ceil_add_int", ["rat"]], ["del", "theorem", "ceil_coe", ["rat"]], ["del", "theorem", "ceil_le", ["rat"]], ["del", "theorem", "ceil_mono", ["rat"]], ["del", "theorem", "ceil_sub_int", ["rat"]], ["del", "def", "floor", ["rat"]], ["del", "theorem", "floor_add_int", ["rat"]], ["del", "theorem", "floor_coe", ["rat"]], ["del", "theorem", "floor_def", ["rat"]], ["del", "theorem", "floor_le", ["rat"]], ["del", "theorem", "floor_lt", ["rat"]], ["del", "theorem", "floor_mono", ["rat"]], ["del", "theorem", "floor_sub_int", ["rat"]], ["del", "theorem", "le_ceil", ["rat"]], ["del", "theorem", "le_floor", ["rat"]], ["del", "theorem", "le_nat_ceil", ["rat"]], ["del", "theorem", "lt_nat_ceil", ["rat"]], ["del", "theorem", "lt_succ_floor", ["rat"]], ["del", "def", "nat_ceil", ["rat"]], ["del", "theorem", "nat_ceil_add_nat", ["rat"]], ["del", "theorem", "nat_ceil_coe", ["rat"]], ["del", "theorem", "nat_ceil_le", ["rat"]], ["del", "theorem", "nat_ceil_lt_add_one", ["rat"]], ["del", "theorem", "nat_ceil_mono", ["rat"]], ["del", "theorem", "nat_ceil_zero", ["rat"]]]}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1567944015, "sha": "37b67460", "message": "feat(data/list/basic): make chain.nil a simp lemma (#1414)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}]}, {"timestamp": 1567932457, "sha": "6f7224cc", "message": "feat(data/list/defs): move list.sum to list/defs.lean (#1415)\n* feat(data/list/defs): move list.sum to list/defs.lean\n* add comment", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "sum", ["list"]]]}]}, {"timestamp": 1567923745, "sha": "8bdb1474", "message": "feat(topology/local_homeomorph): local homeomorphisms (#1398)\n* feat(topology/local_homeomorph): local homeomorphisms\n* local_homeomorph: reviewer comments", "changes": [{"oldPath": null, "newPath": "src/topology/local_homeomorph.lean", "changes": [["add", "theorem", "refl_to_local_homeomorph", ["homeomorph"]], ["add", "theorem", "symm_to_local_homeomorph", ["homeomorph"]], ["add", "def", "to_local_homeomorph", ["homeomorph"]], ["add", "theorem", "to_local_homeomorph_inv_fun", ["homeomorph"]], ["add", "theorem", "to_local_homeomorph_source", ["homeomorph"]], ["add", "theorem", "to_local_homeomorph_target", ["homeomorph"]], ["add", "theorem", "to_local_homeomorph_to_fun", ["homeomorph"]], ["add", "theorem", "trans_to_local_homeomorph", ["homeomorph"]], ["add", "theorem", "apply_eq_of_eq_on_source", ["local_homeomorph"]], ["add", "theorem", "continuous_on_iff_continuous_on_comp_left", ["local_homeomorph"]], ["add", "theorem", "continuous_on_iff_continuous_on_comp_right", ["local_homeomorph"]], ["add", "theorem", "eq_of_eq_on_source_univ", ["local_homeomorph"]], ["add", "theorem", "eq_of_local_equiv_eq", ["local_homeomorph"]], ["add", "def", "eq_on_source", ["local_homeomorph"]], ["add", "theorem", "eq_on_source_iff", ["local_homeomorph"]], ["add", "theorem", "eq_on_source_refl", ["local_homeomorph"]], ["add", "theorem", "eq_on_source_restr", ["local_homeomorph"]], ["add", "theorem", "eq_on_source_symm", ["local_homeomorph"]], ["add", "theorem", "eq_on_source_trans", ["local_homeomorph"]], ["add", "theorem", "image_trans_source", ["local_homeomorph"]], ["add", "theorem", "inv_apply_eq_of_eq_on_source", ["local_homeomorph"]], ["add", "theorem", "inv_image_trans_target", ["local_homeomorph"]], ["add", "def", "of_set", ["local_homeomorph"]], ["add", "theorem", "of_set_inv_fun", ["local_homeomorph"]], ["add", "theorem", "of_set_source", ["local_homeomorph"]], ["add", "theorem", "of_set_symm", ["local_homeomorph"]], ["add", "theorem", "of_set_target", ["local_homeomorph"]], ["add", "theorem", "of_set_to_fun", ["local_homeomorph"]], ["add", "theorem", "of_set_to_local_equiv", ["local_homeomorph"]], ["add", "theorem", "of_set_trans'", ["local_homeomorph"]], ["add", "theorem", "of_set_trans", ["local_homeomorph"]], ["add", "theorem", "preimage_interior", ["local_homeomorph"]], ["add", "def", "prod", ["local_homeomorph"]], ["add", "theorem", "prod_inv_fun", ["local_homeomorph"]], ["add", "theorem", "prod_source", ["local_homeomorph"]], ["add", "theorem", "prod_target", ["local_homeomorph"]], ["add", "theorem", "prod_to_fun", ["local_homeomorph"]], ["add", "theorem", "prod_to_local_equiv", ["local_homeomorph"]], ["add", "theorem", "refl_inv_fun", ["local_homeomorph"]], ["add", "theorem", "refl_local_equiv", ["local_homeomorph"]], ["add", "theorem", "refl_source", ["local_homeomorph"]], ["add", "theorem", "refl_symm", ["local_homeomorph"]], ["add", "theorem", "refl_target", ["local_homeomorph"]], ["add", "theorem", "refl_to_fun", ["local_homeomorph"]], ["add", "theorem", "refl_trans", ["local_homeomorph"]], ["add", "theorem", "restr_eq_of_source_subset", ["local_homeomorph"]], ["add", "theorem", "restr_inv_fun", ["local_homeomorph"]], ["add", "theorem", "restr_open_source", ["local_homeomorph"]], ["add", "theorem", "restr_open_to_local_equiv", ["local_homeomorph"]], ["add", "theorem", "restr_source'", ["local_homeomorph"]], ["add", "theorem", "restr_source", ["local_homeomorph"]], ["add", "theorem", "restr_source_inter", ["local_homeomorph"]], ["add", "theorem", "restr_target", ["local_homeomorph"]], ["add", "theorem", "restr_to_fun", ["local_homeomorph"]], ["add", "theorem", "restr_to_local_equiv'", ["local_homeomorph"]], ["add", "theorem", "restr_to_local_equiv", ["local_homeomorph"]], ["add", "theorem", "restr_trans", ["local_homeomorph"]], ["add", "theorem", "restr_univ", ["local_homeomorph"]], ["add", "theorem", "source_eq_of_eq_on_source", ["local_homeomorph"]], ["add", "theorem", "symm_inv_fun", ["local_homeomorph"]], ["add", "theorem", "symm_source", ["local_homeomorph"]], ["add", "theorem", "symm_symm", ["local_homeomorph"]], ["add", "theorem", "symm_target", ["local_homeomorph"]], ["add", "theorem", "symm_to_fun", ["local_homeomorph"]], ["add", "theorem", "symm_to_local_equiv", ["local_homeomorph"]], ["add", "theorem", "target_eq_of_eq_on_source", ["local_homeomorph"]], ["add", "theorem", "trans_assoc", ["local_homeomorph"]], ["add", "theorem", "trans_inv_fun", ["local_homeomorph"]], ["add", "theorem", "trans_of_set'", ["local_homeomorph"]], ["add", "theorem", "trans_of_set", ["local_homeomorph"]], ["add", "theorem", "trans_refl", ["local_homeomorph"]], ["add", "theorem", "trans_self_symm", ["local_homeomorph"]], ["add", "theorem", "trans_source''", ["local_homeomorph"]], ["add", "theorem", "trans_source'", ["local_homeomorph"]], ["add", "theorem", "trans_source", ["local_homeomorph"]], ["add", "theorem", "trans_symm_eq_symm_trans_symm", ["local_homeomorph"]], ["add", "theorem", "trans_symm_self", ["local_homeomorph"]], ["add", "theorem", "trans_target''", ["local_homeomorph"]], ["add", "theorem", "trans_target'", ["local_homeomorph"]], ["add", "theorem", "trans_target", ["local_homeomorph"]], ["add", "theorem", "trans_to_fun", ["local_homeomorph"]], ["add", "theorem", "trans_to_local_equiv", ["local_homeomorph"]], ["add", "structure", "local_homeomorph", []]]}]}, {"timestamp": 1567834353, "sha": "10cb0d12", "message": "feat(topology/constructions): distributivity of products over sums (#1059)\n* feat(topology/constructions): distributivity of products over sums\n* Update src/topology/maps.lean\nCo-Authored-By: sgouezel \n* Reverse direction of sigma_prod_distrib", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "sigma_prod_distrib", ["equiv"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Union_image_preimage_sigma_mk_eq_self", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "def", "homeomorph_of_continuous_open", ["homeomorph"]], ["add", "def", "sigma_prod_distrib", ["homeomorph"]], ["add", "theorem", "is_open_map_sigma", []], ["add", "theorem", "open_embedding_sigma_mk", []]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "is_closed_map", ["closed_embedding"]], ["add", "theorem", "closed_embedding_of_embedding_closed", []], ["add", "theorem", "is_open_map", ["open_embedding"]], ["add", "theorem", "open_iff_image_open", ["open_embedding"]], ["add", "theorem", "open_iff_preimage_open", ["open_embedding"]], ["add", "def", "open_embedding", []], ["add", "theorem", "open_embedding_compose", []], ["add", "theorem", "open_embedding_id", []], ["add", "theorem", "open_embedding_of_continuous_injective_open", []], ["add", "theorem", "open_embedding_of_embedding_open", []]]}]}, {"timestamp": 1567833463, "sha": "d6a0ac58", "message": "refactor(category_theory/limits/shapes/pullbacks): proof golf (#1407)\n* refactor(category_theory/limits): make is_[co]limit not a class\n* refactor(category_theory/limits/shapes/pullbacks): proof golf", "changes": [{"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}]}, {"timestamp": 1567832400, "sha": "8eab714f", "message": "refactor(category_theory/limits): make is_[co]limit not a class (#1405)", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "is_colimit", ["category_theory", "limits", "colimit"]], ["add", "def", "is_limit", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/terminal.lean", "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": []}]}, {"timestamp": 1567808407, "sha": "a7f268b8", "message": "fix(category_theory/limits/shapes): doc typo [ci skip] (#1406)", "changes": [{"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}]}, {"timestamp": 1567773957, "sha": "a5fa162b", "message": "chore(data/mv_polynomial): use classical logic (#1391)\n* refactor(linear_algebra/lc): use families not sets\n* refactor(linear_algebra/lc): merge lc into finsupp\n* refactor(linear_algebra/lc): localize decidability\n* refactor(linear_algebra/lc): finsupp instances\n* refactor(linear_algebra/lc): use families instead of sets\n* refactor(linear_algebra/lc): remove set argument in lin_indep\n* refactor(linear_algebra/lc): clean up\n* refactor(linear_algebra/lc): more clean up\n* refactor(linear_algebra/lc): set_option in section\n* refactor(linear_algebra/lc): decidability proof\n* refactor(linear_algebra/lc): arrow precedence\n* refactor(linear_algebra/lc): more cleanup\n* make data.finsupp classical\n* trouble with data/polynomial\n* ...\n* more classical\n* merge\n* merge\n* merge\n* fix\n* removing more\n* minor\n* ?\n* progress, using convert\n* working?\n* remove some unnecessary converts\n* fixes\n* err\n* oops\n* various\n* various\n* fix free_comm_ring\n* remove test lines\n* fix linear_algebra/matrix.lean\n* Fix errors in power_series.lean\n* trying to turn instances back on\n* restore some instances\n* no joy\n* fix mv_polynomial errors\n* another convert", "changes": [{"oldPath": "src/algebra/CommRing/adjunctions.lean", "newPath": "src/algebra/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "theorem", "comap_domain_apply", ["finsupp"]], ["mod", "theorem", "count_to_multiset", ["finsupp"]], ["mod", "theorem", "eq_zero_of_comap_domain_eq_zero", ["finsupp"]], ["mod", "def", "equiv_fun_on_fintype", ["finsupp"]], ["mod", "def", "equiv_multiset", ["finsupp"]], ["mod", "def", "filter", ["finsupp"]], ["mod", "theorem", "filter_curry", ["finsupp"]], ["mod", "theorem", "filter_pos_add_filter_neg", ["finsupp"]], ["mod", "theorem", "filter_smul", ["finsupp"]], ["mod", "def", "finsupp_prod_equiv", ["finsupp"]], ["mod", "theorem", "map_domain_comap_domain", ["finsupp"]], ["mod", "theorem", "map_domain_finset_sum", ["finsupp"]], ["mod", "theorem", "map_domain_smul", ["finsupp"]], ["mod", "theorem", "map_range_add", ["finsupp"]], ["mod", "theorem", "map_range_finset_sum", ["finsupp"]], ["mod", "theorem", "mem_support_finset_sum", ["finsupp"]], ["mod", "theorem", "mem_support_multiset_sum", ["finsupp"]], ["mod", "theorem", "mem_support_single", ["finsupp"]], ["mod", "def", "of_multiset", ["finsupp"]], ["mod", "theorem", "of_multiset_apply", ["finsupp"]], ["mod", "theorem", "prod_finset_sum_index", ["finsupp"]], ["mod", "theorem", "prod_map_range_index", ["finsupp"]], ["mod", "theorem", "prod_single", ["finsupp"]], ["mod", "def", "restrict_support_equiv", ["finsupp"]], ["mod", "theorem", "single_finset_sum", ["finsupp"]], ["mod", "theorem", "single_multiset_sum", ["finsupp"]], ["mod", "theorem", "single_sum", ["finsupp"]], ["mod", "theorem", "single_swap", ["finsupp"]], ["mod", "theorem", "smul_single", ["finsupp"]], ["mod", "def", "subtype_domain", ["finsupp"]], ["mod", "theorem", "sum_comap_domain", ["finsupp"]], ["mod", "theorem", "support_curry", ["finsupp"]], ["mod", "theorem", "support_eq_empty", ["finsupp"]], ["mod", "theorem", "support_subset_iff", ["finsupp"]], ["mod", "theorem", "to_multiset_strict_mono", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "coeff_zero_X", ["mv_polynomial"]], ["mod", "theorem", "degrees_prod", ["mv_polynomial"]], ["mod", "theorem", "degrees_sum", ["mv_polynomial"]], ["mod", "theorem", "degrees_zero", ["mv_polynomial"]], ["mod", "theorem", "eval_assoc", ["mv_polynomial"]], ["mod", "theorem", "eval₂_assoc", ["mv_polynomial"]], ["mod", "theorem", "eval₂_cast_comp", ["mv_polynomial"]], ["mod", "theorem", "eval₂_hom_X", ["mv_polynomial"]], ["mod", "theorem", "eval₂_prod", ["mv_polynomial"]], ["mod", "theorem", "eval₂_sum", ["mv_polynomial"]], ["mod", "theorem", "map_eval₂", ["mv_polynomial"]], ["mod", "theorem", "map_map", ["mv_polynomial"]], ["mod", "theorem", "rename_sub", ["mv_polynomial"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "theorem", "coeff_C_zero", ["polynomial"]], ["mod", "theorem", "coeff_X", ["polynomial"]], ["mod", "theorem", "coeff_X_one", ["polynomial"]], ["mod", "theorem", "coeff_X_zero", ["polynomial"]], ["mod", "theorem", "coeff_one", ["polynomial"]], ["mod", "theorem", "coeff_one_zero", ["polynomial"]], ["mod", "theorem", "coeff_single", ["polynomial"]], ["mod", "theorem", "coeff_sum", ["polynomial"]], ["mod", "theorem", "degree_map'", ["polynomial"]], ["mod", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["mod", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["mod", "theorem", "degree_map_le", ["polynomial"]], ["mod", "theorem", "degree_sum_le", ["polynomial"]], ["del", "def", "div_mod_by_monic_aux", ["polynomial"]], ["mod", "theorem", "map_div_by_monic", ["polynomial"]], ["mod", "theorem", "map_map", ["polynomial"]], ["mod", "theorem", "map_mod_by_monic", ["polynomial"]], ["mod", "theorem", "map_mod_div_by_monic", ["polynomial"]], ["mod", "theorem", "map_neg", ["polynomial"]], ["mod", "theorem", "map_sub", ["polynomial"]], ["mod", "theorem", "monic_map", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["mod", "theorem", "nat_degree_map'", ["polynomial"]], ["add", "def", "nth_roots", ["polynomial"]], ["del", "def", "rec_on_horner", ["polynomial"]]]}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["mod", "def", "lsum", ["finsupp"]], ["mod", "theorem", "lsum_apply", ["finsupp"]], ["mod", "theorem", "range_restrict_dom", ["finsupp"]], ["mod", "def", "restrict_dom", ["finsupp"]], ["mod", "theorem", "restrict_dom_apply", ["finsupp"]], ["mod", "theorem", "restrict_dom_comp_subtype", ["finsupp"]], ["mod", "theorem", "supported_eq_span_single", ["finsupp"]], ["mod", "def", "supported_equiv_finsupp", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["mod", "theorem", "is_basis_single", ["finsupp"]], ["mod", "theorem", "linear_independent_single", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": [["mod", "theorem", "coeff_mk", ["power_series"]], ["mod", "theorem", "coeff_trunc", ["power_series"]], ["add", "theorem", "inv_eq_inv_aux", ["power_series"]], ["mod", "theorem", "monomial_zero", ["power_series"]], ["mod", "def", "trunc", ["power_series"]], ["mod", "theorem", "trunc_C", ["power_series"]], ["mod", "theorem", "trunc_add", ["power_series"]], ["mod", "theorem", "trunc_one", ["power_series"]], ["mod", "theorem", "trunc_zero", ["power_series"]]]}]}, {"timestamp": 1567719438, "sha": "1a0ed809", "message": "fix(naming): typo [ci skip] (#1401)\n* fix(naming): typo [ci skip]\n* more typos", "changes": [{"oldPath": "docs/contribute/naming.md", "newPath": "docs/contribute/naming.md", "changes": []}]}, {"timestamp": 1567681400, "sha": "b1920f59", "message": "chore(algebra/ordered_field): add simp attributes to inv_pos' and others (#1400)", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["mod", "theorem", "inv_neg'", []], ["mod", "theorem", "inv_nonneg", []], ["mod", "theorem", "inv_nonpos", []], ["mod", "theorem", "inv_pos'", []]]}]}, {"timestamp": 1567675362, "sha": "7f208430", "message": "chore(order/filter): rephrase filter.has_le (#1399)\nThe goal of this tiny refactor is to prevent `filter.sets` leaking when\nproving a filter g is finer than another one f. We want the goal to be\n`s ∈ f → s ∈ g` instead of the definitionaly equivalent\n`s ∈ f.sets ∈ g.sets`", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "mem_lift_iff", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1567651689, "sha": "28549094", "message": "feat(bounded_lattice/has_lt): add a `lt` relation independent from `l… (#1366)\n* feat(bounded_lattice/has_lt): add a `lt` relation independent from `le` for `has_top`\n* use priority 10 instead of 0", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": [["add", "theorem", "none_le", ["with_top"]], ["add", "theorem", "none_lt_some", ["with_top"]], ["mod", "theorem", "some_le_some", ["with_top"]], ["mod", "theorem", "some_lt_some", ["with_top"]]]}]}, {"timestamp": 1567644417, "sha": "62928251", "message": "feat(data/equiv/local_equiv): define local equivalences (#1359)\n* feat(data/equiv/local_equiv): define local equivalences\n* add doc\n* add extensionality attribute\n* sanity_check", "changes": [{"oldPath": null, "newPath": "src/data/equiv/local_equiv.lean", "changes": [["add", "theorem", "refl_to_local_equiv", ["equiv"]], ["add", "theorem", "symm_to_local_equiv", ["equiv"]], ["add", "def", "to_local_equiv", ["equiv"]], ["add", "theorem", "to_local_equiv_inv_fun", ["equiv"]], ["add", "theorem", "to_local_equiv_source", ["equiv"]], ["add", "theorem", "to_local_equiv_target", ["equiv"]], ["add", "theorem", "to_local_equiv_to_fun", ["equiv"]], ["add", "theorem", "trans_to_local_equiv", ["equiv"]], ["add", "theorem", "apply_eq_of_eq_on_source", ["local_equiv"]], ["add", "theorem", "bij_on_source", ["local_equiv"]], ["add", "theorem", "eq_of_eq_on_source_univ", ["local_equiv"]], ["add", "def", "eq_on_source", ["local_equiv"]], ["add", "theorem", "eq_on_source_preimage", ["local_equiv"]], ["add", "theorem", "eq_on_source_refl", ["local_equiv"]], ["add", "theorem", "eq_on_source_restr", ["local_equiv"]], ["add", "theorem", "eq_on_source_symm", ["local_equiv"]], ["add", "theorem", "eq_on_source_trans", ["local_equiv"]], ["add", "theorem", "image_eq_target_inter_inv_preimage", ["local_equiv"]], ["add", "theorem", "image_source_eq_target", ["local_equiv"]], ["add", "theorem", "image_trans_source", ["local_equiv"]], ["add", "theorem", "inv_apply_eq_of_eq_on_source", ["local_equiv"]], ["add", "theorem", "inv_image_eq_source_inter_preimage", ["local_equiv"]], ["add", "theorem", "inv_image_target_eq_source", ["local_equiv"]], ["add", "theorem", "inv_image_trans_target", ["local_equiv"]], ["add", "def", "of_set", ["local_equiv"]], ["add", "theorem", "of_set_inv_fun", ["local_equiv"]], ["add", "theorem", "of_set_source", ["local_equiv"]], ["add", "theorem", "of_set_symm", ["local_equiv"]], ["add", "theorem", "of_set_target", ["local_equiv"]], ["add", "theorem", "of_set_to_fun", ["local_equiv"]], ["add", "def", "prod", ["local_equiv"]], ["add", "theorem", "prod_inv_fun", ["local_equiv"]], ["add", "theorem", "prod_source", ["local_equiv"]], ["add", "theorem", "prod_target", ["local_equiv"]], ["add", "theorem", "prod_to_fun", ["local_equiv"]], ["add", "theorem", "refl_inv_fun", ["local_equiv"]], ["add", "theorem", "refl_restr_source", ["local_equiv"]], ["add", "theorem", "refl_restr_target", ["local_equiv"]], ["add", "theorem", "refl_source", ["local_equiv"]], ["add", "theorem", "refl_symm", ["local_equiv"]], ["add", "theorem", "refl_target", ["local_equiv"]], ["add", "theorem", "refl_to_fun", ["local_equiv"]], ["add", "theorem", "refl_trans", ["local_equiv"]], ["add", "theorem", "restr_eq_of_source_subset", ["local_equiv"]], ["add", "theorem", "restr_inv_fun", ["local_equiv"]], ["add", "theorem", "restr_source", ["local_equiv"]], ["add", "theorem", "restr_target", ["local_equiv"]], ["add", "theorem", "restr_to_fun", ["local_equiv"]], ["add", "theorem", "restr_trans", ["local_equiv"]], ["add", "theorem", "restr_univ", ["local_equiv"]], ["add", "theorem", "source_eq_of_eq_on_source", ["local_equiv"]], ["add", "theorem", "source_inter_preimage_inv_preimage", ["local_equiv"]], ["add", "theorem", "source_subset_preimage_target", ["local_equiv"]], ["add", "theorem", "symm_inv_fun", ["local_equiv"]], ["add", "theorem", "symm_source", ["local_equiv"]], ["add", "theorem", "symm_symm", ["local_equiv"]], ["add", "theorem", "symm_target", ["local_equiv"]], ["add", "theorem", "symm_to_fun", ["local_equiv"]], ["add", "theorem", "target_eq_of_eq_on_source", ["local_equiv"]], ["add", "theorem", "target_inter_inv_preimage_preimage", ["local_equiv"]], ["add", "theorem", "target_subset_preimage_source", ["local_equiv"]], ["add", "theorem", "trans_apply", ["local_equiv"]], ["add", "theorem", "trans_assoc", ["local_equiv"]], ["add", "theorem", "trans_inv_apply", ["local_equiv"]], ["add", "theorem", "trans_inv_fun", ["local_equiv"]], ["add", "theorem", "trans_refl", ["local_equiv"]], ["add", "theorem", "trans_refl_restr'", ["local_equiv"]], ["add", "theorem", "trans_refl_restr", ["local_equiv"]], ["add", "theorem", "trans_self_symm", ["local_equiv"]], ["add", "theorem", "trans_source''", ["local_equiv"]], ["add", "theorem", "trans_source'", ["local_equiv"]], ["add", "theorem", "trans_source", ["local_equiv"]], ["add", "theorem", "trans_symm_eq_symm_trans_symm", ["local_equiv"]], ["add", "theorem", "trans_symm_self", ["local_equiv"]], ["add", "theorem", "trans_target''", ["local_equiv"]], ["add", "theorem", "trans_target'", ["local_equiv"]], ["add", "theorem", "trans_target", ["local_equiv"]], ["add", "theorem", "trans_to_fun", ["local_equiv"]], ["add", "structure", "local_equiv", []]]}]}, {"timestamp": 1567637335, "sha": "79a1f841", "message": "fix(tactic/norm_num): bugfix bad proof application (#1387)\n* fix(tactic/norm_num): bugfix bad proof application\n* add test case that used to fail\n* add try_for\n* fix typecheck test\n* increase test timeout", "changes": [{"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "test/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}]}, {"timestamp": 1567630365, "sha": "3c224f0c", "message": "feat (logic/basic): exists_eq' (#1397)\nNot a great name, but `exists_eq_left` and `exists_eq_right` are taken, and it's unlikely to be used except in `simp`", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_eq'", []]]}]}, {"timestamp": 1567625337, "sha": "65ffb7b1", "message": "fix(topology/uniform_space): simplify continuity proof (#1396)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "continuous", ["uniform_continuous"]], ["mod", "theorem", "uniform_continuous_iff", []]]}]}, {"timestamp": 1567617721, "sha": "06cffebf", "message": "feat(order): add lemma (#1375)", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "theorem", "min_le_max", ["decidable"]]]}]}, {"timestamp": 1567601995, "sha": "5d59e8bd", "message": "feat(category_theory): finite products give a monoidal structure (#1340)\n* providing minimal API for limits of special shapes\n* apis for special shapes\n* start\n* fintype instances\n* copy-paste from monoidal-categories-reboot\n* associators, unitors, braidings for binary product\n* minor\n* minor\n* map\n* minor\n* instances\n* blah\n* chore(category_theory/monoidal): monoidal_category doesn't extend category\n* minor\n* minor\n* assoc lemma\n* coprod\n* done?\n* fix import\n* names\n* cleanup\n* fix reassoc\n* comments\n* comments", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "map_π", ["category_theory", "limits", "lim"]], ["mod", "theorem", "lift_π", ["category_theory", "limits", "limit"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/finite_limits.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/limits.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monoidal/of_has_finite_products.lean", "changes": [["add", "def", "monoidal_of_has_finite_coproducts", ["category_theory"]], ["add", "def", "monoidal_of_has_finite_products", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}]}, {"timestamp": 1567600022, "sha": "8cd16b97", "message": "feat(category_theory/sums): sums (disjoint unions) of categories (#1357)\n* feat(category_theory/sum): direct sums of categories\n* minor\n* tidying\n* Fix white space, remove old comments\n* rearranging, associator\n* add TODO comment about unitors\n* fix import\n* create /basic.lean files", "changes": [{"oldPath": null, "newPath": "src/category_theory/hom_functor.lean", "changes": [["add", "theorem", "hom_obj", ["category_theory", "functor"]], ["add", "theorem", "hom_pairing_map", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "hom_obj", ["category_theory", "functor"]], ["del", "theorem", "hom_pairing_map", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/products/basic.lean", "changes": [["add", "def", "evaluation", ["category_theory"]], ["add", "theorem", "evaluation_map_app", ["category_theory"]], ["add", "theorem", "evaluation_obj_map", ["category_theory"]], ["add", "theorem", "evaluation_obj_obj", ["category_theory"]], ["add", "def", "evaluation_uncurried", ["category_theory"]], ["add", "theorem", "evaluation_uncurried_map", ["category_theory"]], ["add", "theorem", "evaluation_uncurried_obj", ["category_theory"]], ["add", "def", "prod", ["category_theory", "functor"]], ["add", "theorem", "prod_map", ["category_theory", "functor"]], ["add", "theorem", "prod_obj", ["category_theory", "functor"]], ["add", "def", "prod", ["category_theory", "nat_trans"]], ["add", "theorem", "prod_app", ["category_theory", "nat_trans"]], ["add", "def", "braiding", ["category_theory", "prod"]], ["add", "def", "fst", ["category_theory", "prod"]], ["add", "theorem", "fst_map", ["category_theory", "prod"]], ["add", "theorem", "fst_obj", ["category_theory", "prod"]], ["add", "def", "inl", ["category_theory", "prod"]], ["add", "theorem", "inl_map", ["category_theory", "prod"]], ["add", "theorem", "inl_obj", ["category_theory", "prod"]], ["add", "def", "inr", ["category_theory", "prod"]], ["add", "theorem", "inr_map", ["category_theory", "prod"]], ["add", "theorem", "inr_obj", ["category_theory", "prod"]], ["add", "def", "snd", ["category_theory", "prod"]], ["add", "theorem", "snd_map", ["category_theory", "prod"]], ["add", "theorem", "snd_obj", ["category_theory", "prod"]], ["add", "def", "swap", ["category_theory", "prod"]], ["add", "theorem", "swap_map", ["category_theory", "prod"]], ["add", "theorem", "swap_obj", ["category_theory", "prod"]], ["add", "def", "symmetry", ["category_theory", "prod"]], ["add", "theorem", "prod_comp", ["category_theory"]], ["add", "theorem", "prod_comp_fst", ["category_theory"]], ["add", "theorem", "prod_comp_snd", ["category_theory"]], ["add", "theorem", "prod_id", ["category_theory"]], ["add", "theorem", "prod_id_fst", ["category_theory"]], ["add", "theorem", "prod_id_snd", ["category_theory"]]]}, {"oldPath": "src/category_theory/products/bifunctor.lean", "newPath": "src/category_theory/products/bifunctor.lean", "changes": []}, {"oldPath": "src/category_theory/products/default.lean", "newPath": "src/category_theory/products/default.lean", "changes": [["del", "def", "evaluation", ["category_theory"]], ["del", "theorem", "evaluation_map_app", ["category_theory"]], ["del", "theorem", "evaluation_obj_map", ["category_theory"]], ["del", "theorem", "evaluation_obj_obj", ["category_theory"]], ["del", "def", "evaluation_uncurried", ["category_theory"]], ["del", "theorem", "evaluation_uncurried_map", ["category_theory"]], ["del", "theorem", "evaluation_uncurried_obj", ["category_theory"]], ["del", "def", "prod", ["category_theory", "functor"]], ["del", "theorem", "prod_map", ["category_theory", "functor"]], ["del", "theorem", "prod_obj", ["category_theory", "functor"]], ["del", "def", "prod", ["category_theory", "nat_trans"]], ["del", "theorem", "prod_app", ["category_theory", "nat_trans"]], ["del", "def", "fst", ["category_theory", "prod"]], ["del", "theorem", "fst_map", ["category_theory", "prod"]], ["del", "theorem", "fst_obj", ["category_theory", "prod"]], ["del", "def", "inl", ["category_theory", "prod"]], ["del", "theorem", "inl_map", ["category_theory", "prod"]], ["del", "theorem", "inl_obj", ["category_theory", "prod"]], ["del", "def", "inr", ["category_theory", "prod"]], ["del", "theorem", "inr_map", ["category_theory", "prod"]], ["del", "theorem", "inr_obj", ["category_theory", "prod"]], ["del", "def", "snd", ["category_theory", "prod"]], ["del", "theorem", "snd_map", ["category_theory", "prod"]], ["del", "theorem", "snd_obj", ["category_theory", "prod"]], ["del", "def", "swap", ["category_theory", "prod"]], ["del", "theorem", "swap_map", ["category_theory", "prod"]], ["del", "theorem", "swap_obj", ["category_theory", "prod"]], ["del", "def", "symmetry", ["category_theory", "prod"]], ["del", "theorem", "prod_comp", ["category_theory"]], ["del", "theorem", "prod_comp_fst", ["category_theory"]], ["del", "theorem", "prod_comp_snd", ["category_theory"]], ["del", "theorem", "prod_id", ["category_theory"]], ["del", "theorem", "prod_id_fst", ["category_theory"]], ["del", "theorem", "prod_id_snd", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/sums/associator.lean", "changes": [["add", "def", "associativity", ["category_theory", "sum"]], ["add", "def", "associator", ["category_theory", "sum"]], ["add", "theorem", "associator_map_inl_inl", ["category_theory", "sum"]], ["add", "theorem", "associator_map_inl_inr", ["category_theory", "sum"]], ["add", "theorem", "associator_map_inr", ["category_theory", "sum"]], ["add", "theorem", "associator_obj_inl_inl", ["category_theory", "sum"]], ["add", "theorem", "associator_obj_inl_inr", ["category_theory", "sum"]], ["add", "theorem", "associator_obj_inr", ["category_theory", "sum"]], ["add", "def", "inverse_associator", ["category_theory", "sum"]], ["add", "theorem", "inverse_associator_map_inl", ["category_theory", "sum"]], ["add", "theorem", "inverse_associator_map_inr_inl", ["category_theory", "sum"]], ["add", "theorem", "inverse_associator_map_inr_inr", ["category_theory", "sum"]], ["add", "theorem", "inverse_associator_obj_inl", ["category_theory", "sum"]], ["add", "theorem", "inverse_associator_obj_inr_inl", ["category_theory", "sum"]], ["add", "theorem", "inverse_associator_obj_inr_inr", ["category_theory", "sum"]]]}, {"oldPath": null, "newPath": "src/category_theory/sums/basic.lean", "changes": [["add", "def", "sum", ["category_theory", "functor"]], ["add", "theorem", "sum_map_inl", ["category_theory", "functor"]], ["add", "theorem", "sum_map_inr", ["category_theory", "functor"]], ["add", "theorem", "sum_obj_inl", ["category_theory", "functor"]], ["add", "theorem", "sum_obj_inr", ["category_theory", "functor"]], ["add", "def", "sum", ["category_theory", "nat_trans"]], ["add", "theorem", "sum_app_inl", ["category_theory", "nat_trans"]], ["add", "theorem", "sum_app_inr", ["category_theory", "nat_trans"]], ["add", "def", "inl_", ["category_theory", "sum"]], ["add", "theorem", "inl_map", ["category_theory", "sum"]], ["add", "theorem", "inl_obj", ["category_theory", "sum"]], ["add", "def", "inr_", ["category_theory", "sum"]], ["add", "theorem", "inr_map", ["category_theory", "sum"]], ["add", "theorem", "inr_obj", ["category_theory", "sum"]], ["add", "def", "equivalence", ["category_theory", "sum", "swap"]], ["add", "def", "symmetry", ["category_theory", "sum", "swap"]], ["add", "def", "swap", ["category_theory", "sum"]], ["add", "theorem", "swap_map_inl", ["category_theory", "sum"]], ["add", "theorem", "swap_map_inr", ["category_theory", "sum"]], ["add", "theorem", "swap_obj_inl", ["category_theory", "sum"]], ["add", "theorem", "swap_obj_inr", ["category_theory", "sum"]], ["add", "theorem", "sum_comp_inl", ["category_theory"]], ["add", "theorem", "sum_comp_inr", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/sums/default.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1567578829, "sha": "b079298d", "message": "feat(tactic/doc_blame): Use is_auto_generated (#1395)", "changes": [{"oldPath": "src/tactic/doc_blame.lean", "newPath": "src/tactic/doc_blame.lean", "changes": [["del", "def", "is_not_auto", ["name"]]]}]}, {"timestamp": 1567544891, "sha": "ff47fa31", "message": "feat(measure_theory): prove that the Giry monad is a monad in the category_theory sense (#1259)\n* feat(measure_theory): prove that the Giry monad is a monad in the category_theory sense\n* Add spaces to fix alignment\n* document Measure\n* Add documentation\n* Add space before colon", "changes": [{"oldPath": "src/measure_theory/Meas.lean", "newPath": "src/measure_theory/Meas.lean", "changes": [["add", "def", "Integral", ["Meas"]], ["add", "def", "Measure", ["Meas"]]]}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": [["add", "theorem", "join_dirac", ["measure_theory", "measure"]], ["add", "theorem", "join_eq_bind", ["measure_theory", "measure"]], ["add", "theorem", "join_map_dirac", ["measure_theory", "measure"]], ["add", "theorem", "join_map_join", ["measure_theory", "measure"]], ["add", "theorem", "join_map_map", ["measure_theory", "measure"]], ["add", "theorem", "map_dirac", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_pi_apply", []], ["add", "theorem", "measurable_pi_lambda", []]]}]}, {"timestamp": 1567534958, "sha": "b5b40c74", "message": "chore(*): use localized command in mathlib (#1319)\n* chore(*): use localized command in mathlib\nremove some open_locale instances\nin files that do not import tactic.basic\nfix some errors\ntype class inference failure\nfix some more errors\ntypo\nfully specify all names in localized notation\nalso add some comments to the doc\none more localized import\ncheckpoint\nthere is something seriously wrong with type class inference + the transition from constructive to classical logic. Suppose you want to work purely classically, and state a lemma where the statement requires a proof of decidable equality on one of the types. For an abstract type, the only instance of this is classical.prop_decidable, unless you add explicitly an argument that the respective type has decidable equality (which you tend to not want to do if you only work classically). Now when you apply this lemma to a concrete type, where we can infer decidability of equality, type class inference will complain that we used the wrong instance (which is kinda insane: by unification it knows exactly which instance we want to use). A big problem with this, is that you have no idea you will run into this issues later when stating the lemma: Lean will happily accept it\n* add TODOs\n* fix some errors\n* update .gitignore\n* fix some timeouts\n* replace a couple more local notations", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/algebra/CommRing/adjunctions.lean", "newPath": "src/algebra/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": "src/data/matrix/pequiv.lean", "newPath": "src/data/matrix/pequiv.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": []}, {"oldPath": "src/measure_theory/ae_eq_fun.lean", "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": []}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "range_map", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/l1_space.lean", "newPath": "src/measure_theory/l1_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "src/set_theory/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "src/tactic/localized.lean", "newPath": "src/tactic/localized.lean", "changes": []}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": []}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1567533150, "sha": "4b6fcd90", "message": "perf(data/gaussian_int): speed up div and mod (#1394)\navoid using `int.cast`, and use `rat.of_int`.\nThis sped up `#eval (⟨1414,152⟩ : gaussian_int) % ⟨123,456⟩` from about 5 seconds to 2 milliseconds", "changes": [{"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}]}, {"timestamp": 1567531207, "sha": "974d413b", "message": "chore(linear_algebra/determinant): simplify det_mul proof (#1392)\n* chore(linear_algebra/determinant): simplify det_mul proof\nMinor improvement to the proof of `det_mul`\n* make det_mul_aux more readable", "changes": [{"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1567524996, "sha": "3a58b50f", "message": "feat(data/equiv/basic): add more functions for equivalences between complex types (#1384)\n* Add more `equiv` combinators\n* Fix compile\n* Minor fixes\n* Update src/data/equiv/basic.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "def", "equiv_fib", ["equiv"]], ["del", "def", "equiv_sigma_subtype", ["equiv"]], ["add", "def", "sigma_preimage_equiv", ["equiv"]], ["add", "def", "sigma_subtype_equiv_of_subset", ["equiv"]], ["add", "def", "sigma_subtype_preimage_equiv", ["equiv"]], ["add", "def", "sigma_subtype_preimage_equiv_subtype", ["equiv"]], ["mod", "def", "subtype_subtype_equiv_subtype", ["equiv"]], ["add", "def", "subtype_subtype_equiv_subtype_exists", ["equiv"]], ["add", "def", "subtype_subtype_equiv_subtype_inter", ["equiv"]], ["add", "def", "subtype_univ_equiv", ["equiv"]]]}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1567518177, "sha": "a199f856", "message": "feat(topology/uniform_space): Abstract completions (#1374)\n* feat(topology/uniform_space): Abstract completions\nDefine abstract completions, study their properties and derived\nconstructions. Use this study in the concrete completion files,\nand for comparing completions constructed at different level of\ngenerality, especially for real numbers.\nThis comes from the perfectoid spaces project.\n* Apply suggestions from code review by Johan\nCo-Authored-By: Johan Commelin \n* Fix build.\nWhen I created the PR, github complained it couldn't automatically\nmerge, and I was not careful enough when I merged...\n* chore(topology/uniform_space): rename completion_pkg\n* fix(compare_reals): create namespace\n* Fix build", "changes": [{"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["del", "theorem", "is_add_group_hom_prod", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "nonempty", ["dense_range"]]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/absolute_value.lean", "changes": [["add", "theorem", "mem_uniformity", ["is_absolute_value"]], ["add", "def", "uniform_space", ["is_absolute_value"]], ["add", "def", "uniform_space_core", ["is_absolute_value"]]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/abstract_completion.lean", "changes": [["add", "def", "compare", ["abstract_completion"]], ["add", "theorem", "compare_coe", ["abstract_completion"]], ["add", "def", "compare_equiv", ["abstract_completion"]], ["add", "theorem", "continuous_coe", ["abstract_completion"]], ["add", "theorem", "continuous_extend", ["abstract_completion"]], ["add", "theorem", "continuous_map", ["abstract_completion"]], ["add", "theorem", "continuous_map₂", ["abstract_completion"]], ["add", "theorem", "dense'", ["abstract_completion"]], ["add", "theorem", "dense_inducing", ["abstract_completion"]], ["add", "theorem", "extend_coe", ["abstract_completion"]], ["add", "theorem", "extend_comp_coe", ["abstract_completion"]], ["add", "theorem", "extend_def", ["abstract_completion"]], ["add", "theorem", "extend_map", ["abstract_completion"]], ["add", "theorem", "extend_unique", ["abstract_completion"]], ["add", "theorem", "extension₂_coe_coe", ["abstract_completion"]], ["add", "theorem", "induction_on", ["abstract_completion"]], ["add", "theorem", "inverse_compare", ["abstract_completion"]], ["add", "theorem", "map_coe", ["abstract_completion"]], ["add", "theorem", "map_comp", ["abstract_completion"]], ["add", "theorem", "map_id", ["abstract_completion"]], ["add", "theorem", "map_unique", ["abstract_completion"]], ["add", "theorem", "map₂_coe_coe", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_coe", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_compare", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_compare_equiv", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_compare_equiv_symm", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_extend", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_extension₂", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_map", ["abstract_completion"]], ["add", "theorem", "uniform_continuous_map₂", ["abstract_completion"]], ["add", "structure", "abstract_completion", []]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/compare_reals.lean", "changes": [["add", "def", "Bourbaki_pkg", ["compare_reals"]], ["add", "def", "Bourbakiℝ", ["compare_reals"]], ["add", "def", "Q", ["compare_reals"]], ["add", "theorem", "compare_uc", ["compare_reals"]], ["add", "theorem", "compare_uc_symm", ["compare_reals"]], ["add", "theorem", "uniform_space_eq", ["rat"]], ["add", "def", "rational_cau_seq_pkg", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["add", "def", "cpkg", ["uniform_space", "completion"]], ["del", "theorem", "prod_coe_coe", ["uniform_space", "completion"]], ["del", "theorem", "uniform_continuous_prod", ["uniform_space", "completion"]]]}]}, {"timestamp": 1567511503, "sha": "c7d36292", "message": "fix(restate_axiom): create lemmas from lemmas (#1390)", "changes": [{"oldPath": "src/tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}]}, {"timestamp": 1567502651, "sha": "94205c46", "message": "feat(data/fintype): prove `card (subtype p) ≤ card α` (#1383)\n* feat(data/fintype): prove `card (subtype p) ≤ card α`\n* Add `cardinal.mk_le_of_subtype`\n* Rename `mk_le_of_subtype` to `mk_subtype_le`, use it in `mk_set_le`\nEarlier both `mk_subtype_le` and `mk_set_le` took `set α` as an\nargument. Now `mk_subtype_le` takes `α → Prop`.", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "card_subtype_le", ["fintype"]]]}, {"oldPath": "src/data/real/cardinality.lean", "newPath": "src/data/real/cardinality.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "mk_subtype_le", ["cardinal"]], ["add", "theorem", "mk_subtype_le_of_subset", ["cardinal"]]]}]}, {"timestamp": 1567433989, "sha": "227b6821", "message": "feat(category_theory): define `iso.conj` and friends (#1381)\n* feat(category_theory): define `iso.conj` and friends\n* Drop 2 `@[simp]` attributes", "changes": [{"oldPath": null, "newPath": "src/category_theory/conj.lean", "changes": [["add", "theorem", "map_conj", ["category_theory", "functor"]], ["add", "theorem", "map_conj_Aut", ["category_theory", "functor"]], ["add", "theorem", "map_hom_congr", ["category_theory", "functor"]], ["add", "def", "conj", ["category_theory", "iso"]], ["add", "def", "conj_Aut", ["category_theory", "iso"]], ["add", "theorem", "conj_Aut_apply", ["category_theory", "iso"]], ["add", "theorem", "conj_Aut_gpow", ["category_theory", "iso"]], ["add", "theorem", "conj_Aut_hom", ["category_theory", "iso"]], ["add", "theorem", "conj_Aut_mul", ["category_theory", "iso"]], ["add", "theorem", "conj_Aut_pow", ["category_theory", "iso"]], ["add", "theorem", "conj_Aut_trans", ["category_theory", "iso"]], ["add", "theorem", "conj_apply", ["category_theory", "iso"]], ["add", "theorem", "conj_comp", ["category_theory", "iso"]], ["add", "theorem", "conj_id", ["category_theory", "iso"]], ["add", "theorem", "conj_pow", ["category_theory", "iso"]], ["add", "def", "hom_congr", ["category_theory", "iso"]], ["add", "theorem", "hom_congr_apply", ["category_theory", "iso"]], ["add", "theorem", "hom_congr_comp", ["category_theory", "iso"]], ["add", "theorem", "hom_congr_refl", ["category_theory", "iso"]], ["add", "theorem", "hom_congr_symm", ["category_theory", "iso"]], ["add", "theorem", "hom_congr_trans", ["category_theory", "iso"]], ["add", "theorem", "refl_conj", ["category_theory", "iso"]], ["add", "theorem", "self_symm_conj", ["category_theory", "iso"]], ["add", "theorem", "symm_self_conj", ["category_theory", "iso"]], ["add", "theorem", "trans_conj", ["category_theory", "iso"]], ["add", "theorem", "trans_conj_Aut", ["category_theory", "iso"]]]}]}, {"timestamp": 1567426718, "sha": "57d4b411", "message": "feat(category_theory/limits): construct limits from products and equalizers (#1362)\n* providing minimal API for limits of special shapes\n* apis for special shapes\n* fintype instances\n* associators, unitors, braidings for binary product\n* map\n* instances\n* assoc lemma\n* coprod\n* fix import\n* names\n* adding some docs\n* updating tutorial on limits\n* minor\n* uniqueness of morphisms to terminal object\n* better treatment of has_terminal\n* various\n* not there yet\n* deleting a dumb file\n* remove constructions for a later PR\n* getting there\n* oops\n* of_nat_iso\n* feat(category_theory/limits/of_nat_isp)\n* progress on limits from products and equalizers\n* Update src/category_theory/limits/limits.lean\nCo-Authored-By: Johan Commelin \n* Update src/category_theory/limits/limits.lean\nCo-Authored-By: Johan Commelin \n* use @[reassoc]\n* fixing after rename\n* use @[reassoc]\n* fix renaming\n* complete construction of limits from products and equalizers\n* cleanup\n* cleanup\n* name instance\n* whitespace\n* Update src/category_theory/limits/limits.lean\nCo-Authored-By: Johan Commelin \n* use simpa", "changes": [{"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": [["add", "theorem", "unop_functor_op_obj_map", ["category_theory", "functor", "const"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "equiv", ["category_theory", "limits", "cocone"]], ["add", "def", "equiv", ["category_theory", "limits", "cone"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "of_cocones_iso", ["category_theory", "limits", "has_colimit"]], ["add", "def", "of_cones_iso", ["category_theory", "limits", "has_limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/finite_products.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/limits_of_products_and_equalizers.lean", "changes": [["add", "def", "cones_hom", ["category_theory", "limits", "equalizer_diagram"]], ["add", "def", "cones_inv", ["category_theory", "limits", "equalizer_diagram"]], ["add", "def", "cones_iso", ["category_theory", "limits", "equalizer_diagram"]], ["add", "def", "equalizer_diagram", ["category_theory", "limits"]], ["add", "def", "limits_from_equalizers_and_products", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/pullbacks.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/constructions/sums.lean", "changes": []}]}, {"timestamp": 1567410876, "sha": "fe7695ba", "message": "chore(data/nat/gcd): remove pointless parentheses (#1386)", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["mod", "theorem", "gcd_eq_right_iff_dvd", ["nat"]]]}]}, {"timestamp": 1567404019, "sha": "d35dc135", "message": "feat(data/nat/gcd): add simple lemmas (#1382)\n* feat(data/nat/gcd): more simple lemmas\n* Prove `iff` instead of one side implication", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "gcd_both", ["nat", "coprime"]], ["add", "theorem", "gcd_left", ["nat", "coprime"]], ["add", "theorem", "gcd_mul", ["nat", "coprime"]], ["add", "theorem", "gcd_right", ["nat", "coprime"]], ["del", "theorem", "exists_eq_prod_and_dvd_and_dvd", ["nat"]], ["add", "theorem", "gcd_eq_left_iff_dvd", ["nat"]], ["add", "theorem", "gcd_eq_right_iff_dvd", ["nat"]], ["add", "theorem", "gcd_le_left", ["nat"]], ["add", "theorem", "gcd_le_right", ["nat"]], ["add", "theorem", "gcd_mul_dvd_mul_gcd", ["nat"]], ["add", "def", "prod_dvd_and_dvd_of_dvd_prod", ["nat"]]]}]}, {"timestamp": 1567337381, "sha": "6d2b3ed8", "message": "chore(category_theory/notation): consistently use notation for functor.id (#1378)\n* chore(category_theory/notation): consistently use notation for functor.id\n* oops, overzealous search-and-replace\n* more\n* more\n* more", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["mod", "def", "id", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "def", "map_left_id", ["category_theory", "comma"]], ["mod", "def", "map_right_id", ["category_theory", "comma"]], ["mod", "def", "over", ["category_theory"]], ["mod", "def", "under", ["category_theory"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "def", "fun_inv_id", ["category_theory", "functor"]], ["mod", "def", "inv_fun_id", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["mod", "theorem", "id_map", ["category_theory", "functor"]], ["mod", "theorem", "id_obj", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "precompose_id", ["category_theory", "limits", "cocones"]], ["mod", "def", "postcompose_id", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": [["mod", "theorem", "monad_η_app", ["category_theory", "adjunction"]], ["mod", "theorem", "monad_μ_app", ["category_theory", "adjunction"]], ["mod", "theorem", "comparison_map_f", ["category_theory", "monad"]], ["mod", "theorem", "comparison_obj_a", ["category_theory", "monad"]]]}, {"oldPath": "src/category_theory/monad/basic.lean", "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "def", "ulift_down_up", ["category_theory", "functor"]], ["mod", "def", "ulift_up_down", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/products/default.lean", "newPath": "src/category_theory/products/default.lean", "changes": [["mod", "def", "symmetry", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": [["mod", "def", "left_unitor", ["category_theory", "functor"]], ["mod", "def", "right_unitor", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/topology/Top/opens.lean", "newPath": "src/topology/Top/opens.lean", "changes": [["mod", "def", "map_id", ["topological_space", "opens"]]]}]}, {"timestamp": 1567291048, "sha": "df65dde5", "message": "feat(data/option/basic): eq_some_iff_get_eq (#1370)\n* feat(data/option/basic): eq_some_iff_get_eq\n* Update basic.lean", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "eq_some_iff_get_eq", ["option"]]]}]}, {"timestamp": 1567283910, "sha": "72ce940c", "message": "feat(category_theory/limits/of_nat_iso): missing parts of the limits API (#1355)\n* feat(category_theory/limits/of_nat_isp)\n* Update src/category_theory/limits/limits.lean\nCo-Authored-By: Johan Commelin \n* Update src/category_theory/limits/limits.lean\nCo-Authored-By: Johan Commelin \n* use @[reassoc]\n* fixing after rename\n* fix renaming", "changes": [{"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "iso_unique_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "cocone_fac", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "cocone_of_hom", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "theorem", "cocone_of_hom_fac", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "theorem", "cocone_of_hom_of_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "colimit_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "hom_of_cocone", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "theorem", "hom_of_cocone_of_hom", ["category_theory", "limits", "is_colimit", "of_nat_iso"]], ["add", "def", "of_nat_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "unique", ["category_theory", "limits", "is_colimit"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "is_colimit"]], ["del", "def", "is_colimit_iso_unique_cocone_morphism", ["category_theory", "limits"]], ["add", "def", "iso_unique_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "cone_fac", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "cone_of_hom", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "theorem", "cone_of_hom_fac", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "theorem", "cone_of_hom_of_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "hom_of_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "theorem", "hom_of_cone_of_hom", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "limit_cone", ["category_theory", "limits", "is_limit", "of_nat_iso"]], ["add", "def", "of_nat_iso", ["category_theory", "limits", "is_limit"]], ["del", "def", "unique", ["category_theory", "limits", "is_limit"]], ["add", "def", "unique_up_to_iso", ["category_theory", "limits", "is_limit"]], ["del", "def", "is_limit_iso_unique_cone_morphism", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}]}, {"timestamp": 1567195644, "sha": "455f0603", "message": "chore(unicode): improve arrows (#1373)\n* chore(unicode): improve arrows\n* grammar\nCo-Authored-By: Johan Commelin \n* moar", "changes": [{"oldPath": "docs/extras/simp.md", "newPath": "docs/extras/simp.md", "changes": []}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}, {"oldPath": "src/computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/tactic/apply.lean", "newPath": "src/tactic/apply.lean", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}]}, {"timestamp": 1567171012, "sha": "4c5c4dc7", "message": "doc(contribute): add detailed instructions for cache-olean [skip ci] (#1367)", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}]}, {"timestamp": 1567181639, "sha": "2db7fa45", "message": "feat(sanity_check): improve sanity_check (#1369)\n* feat(sanity_check): improve sanity_check\n- add hole command for sanity check (note: hole commands only work when an expression is expected, not when a command is expected, which is unfortunate)\n- print the type of the unused arguments\n- print whether an unused argument is a duplicate\n- better check to filter automatically generated declarations\n- do not print arguments of type `parse _`\n- The binding brackets from `tactic.where` are moved to `meta.expr`. The definition is changed so that strict implicit arguments are printed as `{{ ... }}`\n* typos\n* improve docstring\n* Also check for duplicated namespaces\nFun fact: I had to remove an unused argument from `decidable_chain'` for my function to work.", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": [["add", "def", "brackets", ["binder_info"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/sanity_check.lean", "newPath": "src/tactic/sanity_check.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}, {"oldPath": "test/sanity_check.lean", "newPath": "test/sanity_check.lean", "changes": []}]}, {"timestamp": 1567165726, "sha": "afe51c76", "message": "feat(category_theory/limits): special shapes (#1339)\n* providing minimal API for limits of special shapes\n* apis for special shapes\n* fintype instances\n* associators, unitors, braidings for binary product\n* map\n* instances\n* assoc lemma\n* coprod\n* fix import\n* names\n* adding some docs\n* updating tutorial on limits\n* minor\n* uniqueness of morphisms to terminal object\n* better treatment of has_terminal\n* various\n* not there yet\n* deleting a dumb file\n* remove constructions for a later PR\n* use @[reassoc]\n* Update src/category_theory/limits/shapes/finite_products.lean\nCo-Authored-By: Johan Commelin \n* improving the colimits tutorial\n* minor\n* notation for `prod_obj` and `sigma_obj`.\n* reverting to `condition`\n* implicit arguments\n* more implicit arguments\n* minor\n* notational for initial and terminal objects\n* various\n* fix notation priorities\n* remove unused case bash tactic\n* fix whitespace\n* comment\n* notations", "changes": [{"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": [["del", "def", "I_0", []], ["del", "def", "I_1", []], ["add", "def", "I₀", []], ["add", "def", "I₁", []], ["mod", "def", "X", []], ["mod", "def", "Y", []], ["mod", "def", "cylinder", []], ["del", "def", "cylinder_0", []], ["del", "def", "cylinder_1", []], ["add", "def", "cylinder₀", []], ["add", "def", "cylinder₁", []], ["del", "def", "d", []], ["mod", "def", "mapping_cone", []], ["mod", "def", "mapping_cylinder", []], ["del", "def", "mapping_cylinder_0", []], ["add", "def", "mapping_cylinder₀", []], ["del", "def", "w", []]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["mod", "def", "of_function", ["category_theory", "functor"]], ["add", "theorem", "of_function_map", ["category_theory", "functor"]], ["add", "theorem", "of_function_obj", ["category_theory", "functor"]], ["mod", "def", "of_isos", ["category_theory", "nat_iso"]], ["mod", "def", "of_function", ["category_theory", "nat_trans"]], ["add", "theorem", "of_function_app", ["category_theory", "nat_trans"]], ["mod", "def", "of_homs", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "map_π", ["category_theory", "limits", "lim"]], ["mod", "theorem", "lift_π", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "theorem", "mk_π_app_left", ["category_theory", "limits", "binary_cofan"]], ["add", "theorem", "mk_π_app_right", ["category_theory", "limits", "binary_cofan"]], ["add", "theorem", "mk_π_app_left", ["category_theory", "limits", "binary_fan"]], ["add", "theorem", "mk_π_app_right", ["category_theory", "limits", "binary_fan"]], ["add", "def", "associator", ["category_theory", "limits", "coprod"]], ["add", "def", "braiding", ["category_theory", "limits", "coprod"]], ["add", "def", "desc", ["category_theory", "limits", "coprod"]], ["add", "def", "inl", ["category_theory", "limits", "coprod"]], ["add", "def", "inr", ["category_theory", "limits", "coprod"]], ["add", "def", "left_unitor", ["category_theory", "limits", "coprod"]], ["add", "def", "map", ["category_theory", "limits", "coprod"]], ["add", "def", "right_unitor", ["category_theory", "limits", "coprod"]], ["add", "theorem", "symmetry", ["category_theory", "limits", "coprod"]], ["add", "def", "coprod", ["category_theory", "limits"]], ["add", "def", "map_pair", ["category_theory", "limits"]], ["add", "theorem", "map_pair_left", ["category_theory", "limits"]], ["add", "theorem", "map_pair_right", ["category_theory", "limits"]], ["add", "theorem", "pair_obj_left", ["category_theory", "limits"]], ["add", "theorem", "pair_obj_right", ["category_theory", "limits"]], ["add", "def", "associator", ["category_theory", "limits", "prod"]], ["add", "def", "braiding", ["category_theory", "limits", "prod"]], ["add", "def", "fst", ["category_theory", "limits", "prod"]], ["add", "def", "left_unitor", ["category_theory", "limits", "prod"]], ["add", "def", "lift", ["category_theory", "limits", "prod"]], ["add", "def", "map", ["category_theory", "limits", "prod"]], ["add", "def", "right_unitor", ["category_theory", "limits", "prod"]], ["add", "def", "snd", ["category_theory", "limits", "prod"]], ["add", "theorem", "symmetry", ["category_theory", "limits", "prod"]], ["add", "def", "prod", ["category_theory", "limits"]], ["mod", "inductive", "walking_pair", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/default.lean", "newPath": "src/category_theory/limits/shapes/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "theorem", "condition", ["category_theory", "limits", "coequalizer"]], ["add", "def", "desc", ["category_theory", "limits", "coequalizer"]], ["add", "def", "π", ["category_theory", "limits", "coequalizer"]], ["add", "def", "coequalizer", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "equalizer"]], ["add", "def", "lift", ["category_theory", "limits", "equalizer"]], ["add", "def", "ι", ["category_theory", "limits", "equalizer"]], ["add", "def", "equalizer", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/finite_limits.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/finite_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "theorem", "mk_π_app", ["category_theory", "limits", "cofan"]], ["add", "theorem", "mk_π_app", ["category_theory", "limits", "fan"]], ["add", "def", "lift", ["category_theory", "limits", "pi"]], ["add", "def", "map", ["category_theory", "limits", "pi"]], ["add", "def", "π", ["category_theory", "limits", "pi"]], ["add", "def", "pi_obj", ["category_theory", "limits"]], ["add", "def", "desc", ["category_theory", "limits", "sigma"]], ["add", "def", "map", ["category_theory", "limits", "sigma"]], ["add", "def", "ι", ["category_theory", "limits", "sigma"]], ["add", "def", "sigma_obj", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "theorem", "condition", ["category_theory", "limits", "pullback"]], ["add", "def", "fst", ["category_theory", "limits", "pullback"]], ["add", "def", "lift", ["category_theory", "limits", "pullback"]], ["add", "def", "snd", ["category_theory", "limits", "pullback"]], ["add", "def", "pullback", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "fst", ["category_theory", "limits", "pullback_cone"]], ["mod", "def", "mk", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "snd", ["category_theory", "limits", "pullback_cone"]], ["del", "def", "π₁", ["category_theory", "limits", "pullback_cone"]], ["del", "def", "π₂", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "condition", ["category_theory", "limits", "pushout"]], ["add", "def", "desc", ["category_theory", "limits", "pushout"]], ["add", "def", "inl", ["category_theory", "limits", "pushout"]], ["add", "def", "inr", ["category_theory", "limits", "pushout"]], ["add", "def", "pushout", ["category_theory", "limits"]], ["mod", "theorem", "condition", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "inl", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "inr", ["category_theory", "limits", "pushout_cocone"]], ["mod", "def", "mk", ["category_theory", "limits", "pushout_cocone"]], ["del", "def", "ι₁", ["category_theory", "limits", "pushout_cocone"]], ["del", "def", "ι₂", ["category_theory", "limits", "pushout_cocone"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/terminal.lean", "changes": [["add", "def", "to", ["category_theory", "limits", "initial"]], ["add", "def", "initial", ["category_theory", "limits"]], ["add", "def", "from", ["category_theory", "limits", "terminal"]], ["add", "def", "terminal", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": []}]}, {"timestamp": 1567114285, "sha": "1278efd6", "message": "Fix `tactic.exact` timeout in `apply'` (#1371)\nSometimes `tactic.exact` may timeout for no reason. See zulip discussion https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/.60apply'.60timeout/near/174415043", "changes": [{"oldPath": "src/tactic/apply.lean", "newPath": "src/tactic/apply.lean", "changes": []}]}, {"timestamp": 1567081884, "sha": "1ff35858", "message": "feat(analysis/calculus/times_cont_diff): adding a lemma (#1358)\n* feat(analysis/calculus/times_cont_diff): adding a lemma\n* doc\n* change k to \\bbk", "changes": [{"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "differentiable_on", ["times_cont_diff_on"]]]}]}, {"timestamp": 1567027886, "sha": "3b195032", "message": "refactor(category_theory/single_obj): migrate to bundled morphisms (#1330)\n* Define equivalence between `{ f // is_monoid_hom f }` and `monoid_hom`\n* Migrate `single_obj` to bundled homomorphisms\nFix a bug in `to_End`: the old implementation used a wrong monoid\nstructure on `End`.\n* Fix `Mon.hom_equiv_monoid_hom` as suggested by @jcommelin", "changes": [{"oldPath": "src/algebra/Mon/basic.lean", "newPath": "src/algebra/Mon/basic.lean", "changes": [["add", "def", "hom_equiv_monoid_hom", ["Mon"]]]}, {"oldPath": "src/category_theory/single_obj.lean", "newPath": "src/category_theory/single_obj.lean", "changes": [["mod", "def", "map_hom", ["category_theory", "single_obj"]], ["mod", "theorem", "map_hom_comp", ["category_theory", "single_obj"]], ["del", "def", "map_hom_equiv", ["category_theory", "single_obj"]], ["mod", "theorem", "map_hom_id", ["category_theory", "single_obj"]], ["mod", "def", "to_End", ["category_theory", "single_obj"]], ["mod", "theorem", "to_End_def", ["category_theory", "single_obj"]], ["del", "def", "to_End_equiv", ["category_theory", "single_obj"]], ["add", "theorem", "comp_to_functor", ["monoid_hom"]], ["add", "theorem", "id_to_functor", ["monoid_hom"]], ["add", "def", "to_functor", ["monoid_hom"]], ["add", "def", "to_Aut", ["units"]], ["add", "theorem", "to_Aut_hom", ["units"]], ["add", "theorem", "to_Aut_inv", ["units"]]]}]}, {"timestamp": 1567009258, "sha": "d4c1c0f6", "message": "fix(tactic.basic): add sanity_check import (#1365)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1566987249, "sha": "721d67a7", "message": "fix(topology/uniform_space): sanity_check pass (#1364)", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "mem_uniformity_is_closed", []], ["mod", "theorem", "uniformity", ["sum"]], ["mod", "theorem", "to_topological_space_prod", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "theorem", "cauchy_iff_exists_le_nhds", []], ["mod", "theorem", "cauchy_map_iff_exists_tendsto", []], ["mod", "def", "cauchy_seq", []], ["mod", "theorem", "cauchy_seq_tendsto_of_complete", []], ["mod", "theorem", "cauchy_seq_tendsto_of_is_complete", []], ["mod", "theorem", "totally_bounded_closure", []], ["mod", "theorem", "totally_bounded_empty", []], ["mod", "theorem", "totally_bounded_image", []], ["mod", "theorem", "totally_bounded_subset", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["mod", "theorem", "uniform_continuous_quotient_lift₂", ["uniform_space"]]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "mk'", ["uniform_inducing"]], ["del", "def", "mk'", ["uniform_inducing"]]]}]}, {"timestamp": 1566983850, "sha": "79dccba9", "message": "refactor: change field notation from k to \\bbk (#1363)\n* refactor: change field notation from k to \\bbK\n* change \\bbK to \\bbk", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["mod", "theorem", "comp", ["differentiable"]], ["mod", "theorem", "continuous", ["differentiable"]], ["mod", "theorem", "differentiable_on", ["differentiable"]], ["mod", "theorem", "mul", ["differentiable"]], ["mod", "theorem", "neg", ["differentiable"]], ["mod", "theorem", "prod", ["differentiable"]], ["mod", "theorem", "smul'", ["differentiable"]], ["mod", "theorem", "smul", ["differentiable"]], ["mod", "theorem", "congr_of_mem_nhds", ["differentiable_at"]], ["mod", "theorem", "continuous_at", ["differentiable_at"]], ["mod", "theorem", "has_fderiv_at", ["differentiable_at"]], ["mod", "theorem", "mul", ["differentiable_at"]], ["mod", "theorem", "neg", ["differentiable_at"]], ["mod", "theorem", "prod", ["differentiable_at"]], ["mod", "theorem", "smul'", ["differentiable_at"]], ["mod", "theorem", "smul", ["differentiable_at"]], ["mod", "theorem", "differentiable_at_const", []], ["mod", "theorem", "differentiable_at_id", []], ["mod", "theorem", "differentiable_const", []], ["mod", "theorem", "differentiable_id", []], ["mod", "theorem", "congr_mono", ["differentiable_on"]], ["mod", "theorem", "continuous_on", ["differentiable_on"]], ["mod", "theorem", "mono", ["differentiable_on"]], ["mod", "theorem", "mul", ["differentiable_on"]], ["mod", "theorem", "neg", ["differentiable_on"]], ["mod", "theorem", "prod", ["differentiable_on"]], ["mod", "theorem", "smul'", ["differentiable_on"]], ["mod", "theorem", "smul", ["differentiable_on"]], ["mod", "theorem", "differentiable_on_const", []], ["mod", "theorem", "differentiable_on_id", []], ["mod", "theorem", "congr_mono", ["differentiable_within_at"]], ["mod", "theorem", "continuous_within_at", ["differentiable_within_at"]], ["mod", "theorem", "fderiv_within_congr_mono", ["differentiable_within_at"]], ["mod", "theorem", "has_fderiv_within_at", ["differentiable_within_at"]], ["mod", "theorem", "mono", ["differentiable_within_at"]], ["mod", "theorem", "neg", ["differentiable_within_at"]], ["mod", "theorem", "smul", ["differentiable_within_at"]], ["mod", "theorem", "differentiable_within_at_const", []], ["mod", "theorem", "differentiable_within_at_id", []], ["mod", "def", "fderiv", []], ["mod", "theorem", "fderiv_const", []], ["mod", "theorem", "fderiv_id", []], ["mod", "theorem", "fderiv_mul", []], ["mod", "theorem", "fderiv_neg", []], ["mod", "theorem", "fderiv_smul'", []], ["mod", "theorem", "fderiv_smul", []], ["mod", "def", "fderiv_within", []], ["mod", "theorem", "fderiv_within_add", []], ["mod", "theorem", "fderiv_within_congr", []], ["mod", "theorem", "fderiv_within_congr_of_mem_nhds_within", []], ["mod", "theorem", "fderiv_within_const", []], ["mod", "theorem", "fderiv_within_id", []], ["mod", "theorem", "fderiv_within_inter", []], ["mod", "theorem", "fderiv_within_mul", []], ["mod", "theorem", "fderiv_within_neg", []], ["mod", "theorem", "fderiv_within_smul'", []], ["mod", "theorem", "fderiv_within_smul", []], ["mod", "theorem", "fderiv_within_sub", []], ["mod", "theorem", "fderiv_within_subset", []], ["mod", "theorem", "fderiv_within_univ", []], ["mod", "theorem", "comp", ["has_fderiv_at"]], ["mod", "theorem", "comp_has_fderiv_within_at", ["has_fderiv_at"]], ["mod", "theorem", "differentiable_at", ["has_fderiv_at"]], ["mod", "theorem", "fderiv", ["has_fderiv_at"]], ["mod", "theorem", "smul", ["has_fderiv_at"]], ["mod", "def", "has_fderiv_at", []], ["mod", "theorem", "comp", ["has_fderiv_at_filter"]], ["mod", "theorem", "smul", ["has_fderiv_at_filter"]], ["mod", "def", "has_fderiv_at_filter", []], ["mod", "theorem", "has_fderiv_at_id", []], ["mod", "theorem", "comp", ["has_fderiv_within_at"]], ["mod", "theorem", "smul", ["has_fderiv_within_at"]], ["mod", "def", "has_fderiv_within_at", []], ["mod", "theorem", "continuous", ["is_bounded_bilinear_map"]], ["mod", "theorem", "differentiable", ["is_bounded_bilinear_map"]], ["mod", "theorem", "differentiable_at", ["is_bounded_bilinear_map"]], ["mod", "theorem", "differentiable_on", ["is_bounded_bilinear_map"]], ["mod", "theorem", "differentiable_within_at", ["is_bounded_bilinear_map"]], ["mod", "theorem", "fderiv", ["is_bounded_bilinear_map"]], ["mod", "theorem", "fderiv_within", ["is_bounded_bilinear_map"]], ["mod", "theorem", "has_fderiv_at", ["is_bounded_bilinear_map"]], ["mod", "theorem", "has_fderiv_within_at", ["is_bounded_bilinear_map"]], ["mod", "theorem", "differentiable", ["is_bounded_linear_map"]], ["mod", "theorem", "differentiable_at", ["is_bounded_linear_map"]], ["mod", "theorem", "differentiable_on", ["is_bounded_linear_map"]], ["mod", "theorem", "differentiable_within_at", ["is_bounded_linear_map"]], ["mod", "theorem", "fderiv", ["is_bounded_linear_map"]], ["mod", "theorem", "fderiv_within", ["is_bounded_linear_map"]], ["mod", "theorem", "has_fderiv_at", ["is_bounded_linear_map"]], ["mod", "theorem", "has_fderiv_at_filter", ["is_bounded_linear_map"]], ["mod", "theorem", "has_fderiv_within_at", ["is_bounded_linear_map"]], ["mod", "theorem", "eq", ["unique_diff_on"]], ["mod", "theorem", "eq", ["unique_diff_within_at"]]]}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "unique_diff_on", ["is_open"]], ["mod", "theorem", "unique_diff_within_at", ["is_open"]], ["mod", "theorem", "lim_zero", ["tangent_cone_at"]], ["mod", "theorem", "tangent_cone_univ", []], ["mod", "theorem", "prod", ["unique_diff_on"]], ["mod", "theorem", "unique_diff_on_inter", []], ["mod", "theorem", "unique_diff_on_univ", []], ["mod", "theorem", "inter", ["unique_diff_within_at"]], ["mod", "theorem", "mono", ["unique_diff_within_at"]], ["mod", "theorem", "unique_diff_within_at_univ", []]]}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["mod", "theorem", "times_cont_diff", ["is_bounded_bilinear_map"]], ["mod", "theorem", "times_cont_diff", ["is_bounded_linear_map"]], ["mod", "def", "normed_group_rec", ["iterated_continuous_linear_map"]], ["mod", "def", "normed_space_rec", ["iterated_continuous_linear_map"]], ["mod", "def", "iterated_continuous_linear_map", []], ["mod", "def", "iterated_fderiv", []], ["mod", "def", "iterated_fderiv_within", []], ["mod", "theorem", "iterated_fderiv_within_congr", []], ["mod", "theorem", "continuous", ["times_cont_diff"]], ["mod", "theorem", "continuous_fderiv", ["times_cont_diff"]], ["mod", "theorem", "of_le", ["times_cont_diff"]], ["mod", "theorem", "of_succ", ["times_cont_diff"]], ["mod", "def", "times_cont_diff", []], ["mod", "theorem", "times_cont_diff_const", []], ["mod", "theorem", "times_cont_diff_fst", []], ["mod", "theorem", "times_cont_diff_id", []], ["mod", "theorem", "congr", ["times_cont_diff_on"]], ["mod", "theorem", "congr_mono'", ["times_cont_diff_on"]], ["mod", "theorem", "congr_mono", ["times_cont_diff_on"]], ["mod", "theorem", "continuous_on", ["times_cont_diff_on"]], ["mod", "theorem", "mono", ["times_cont_diff_on"]], ["mod", "theorem", "of_succ", ["times_cont_diff_on"]], ["mod", "def", "times_cont_diff_on", []], ["mod", "theorem", "differentiable_on", ["times_cont_diff_on_rec"]], ["mod", "theorem", "of_succ", ["times_cont_diff_on_rec"]], ["mod", "def", "times_cont_diff_on_rec", []], ["mod", "theorem", "continuous", ["times_cont_diff_rec"]], ["mod", "theorem", "differentiable", ["times_cont_diff_rec"]], ["mod", "theorem", "of_succ", ["times_cont_diff_rec"]], ["mod", "def", "times_cont_diff_rec", []], ["mod", "theorem", "times_cont_diff_snd", []], ["mod", "theorem", "times_cont_diff_top", []]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": [["mod", "theorem", "exists_preimage_norm_le", []], ["mod", "theorem", "is_bounded_inv", ["linear_equiv"]], ["mod", "theorem", "open_mapping", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "theorem", "is_bounded_linear_map", ["continuous_linear_map"]], ["mod", "theorem", "is_bounded_linear_map_comp_left", ["continuous_linear_map"]], ["mod", "theorem", "is_bounded_linear_map_comp_right", ["continuous_linear_map"]], ["mod", "def", "deriv", ["is_bounded_bilinear_map"]], ["mod", "theorem", "is_bounded_linear_map_deriv", ["is_bounded_bilinear_map"]], ["mod", "def", "linear_deriv", ["is_bounded_bilinear_map"]], ["mod", "theorem", "map_sub_left", ["is_bounded_bilinear_map"]], ["mod", "theorem", "map_sub_right", ["is_bounded_bilinear_map"]], ["mod", "theorem", "is_bounded_bilinear_map_deriv_coe", []], ["mod", "theorem", "add", ["is_bounded_linear_map"]], ["mod", "theorem", "continuous", ["is_bounded_linear_map"]], ["mod", "theorem", "fst", ["is_bounded_linear_map"]], ["mod", "theorem", "id", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_comp", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_id", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_sub", ["is_bounded_linear_map"]], ["mod", "theorem", "lim_zero_bounded_linear_map", ["is_bounded_linear_map"]], ["mod", "theorem", "neg", ["is_bounded_linear_map"]], ["mod", "theorem", "smul", ["is_bounded_linear_map"]], ["mod", "theorem", "snd", ["is_bounded_linear_map"]], ["mod", "theorem", "sub", ["is_bounded_linear_map"]], ["mod", "theorem", "tendsto", ["is_bounded_linear_map"]], ["mod", "def", "to_continuous_linear_map", ["is_bounded_linear_map"]], ["mod", "def", "to_linear_map", ["is_bounded_linear_map"]], ["mod", "theorem", "zero", ["is_bounded_linear_map"]], ["mod", "structure", "is_bounded_linear_map", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["mod", "theorem", "bounds_bdd_below", ["continuous_linear_map"]], ["mod", "theorem", "bounds_nonempty", ["continuous_linear_map"]], ["mod", "theorem", "is_O_comp", ["continuous_linear_map"]], ["mod", "theorem", "is_O_sub", ["continuous_linear_map"]], ["mod", "theorem", "norm_id", ["continuous_linear_map"]], ["mod", "theorem", "norm_zero", ["continuous_linear_map"]], ["mod", "theorem", "scalar_prod_space_iso_norm", ["continuous_linear_map"]], ["mod", "theorem", "continuous_of_bound", ["linear_map"]], ["mod", "def", "with_bound", ["linear_map"]], ["mod", "theorem", "linear_map_with_bound_apply", []], ["mod", "theorem", "linear_map_with_bound_coe", []]]}]}, {"timestamp": 1566947965, "sha": "45df75b3", "message": "fix(topology/algebra/uniform_group): tiny priority tweak", "changes": [{"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}]}, {"timestamp": 1566839467, "sha": "cc04ba7e", "message": "chore(algebra/ring): change semiring_hom to ring_hom (#1361)\n* added bundled ring homs\n* removed comment\n* Tidy and making docstrings consistent\n* fix spacing\n* fix typo\nCo-Authored-By: Johan Commelin \n* fix typo\nCo-Authored-By: Johan Commelin \n* whoops, actually removing instances\n* change semiring_hom to ring_hom\n* corrected docstring", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "def", "comp", ["ring_hom"]], ["add", "theorem", "ext", ["ring_hom"]], ["add", "def", "id", ["ring_hom"]], ["add", "theorem", "map_add", ["ring_hom"]], ["add", "theorem", "map_mul", ["ring_hom"]], ["add", "theorem", "map_neg", ["ring_hom"]], ["add", "theorem", "map_one", ["ring_hom"]], ["add", "theorem", "map_sub", ["ring_hom"]], ["add", "theorem", "map_zero", ["ring_hom"]], ["add", "def", "mk'", ["ring_hom"]], ["add", "structure", "ring_hom", []], ["del", "def", "comp", ["semiring_hom"]], ["del", "theorem", "ext", ["semiring_hom"]], ["del", "def", "id", ["semiring_hom"]], ["del", "theorem", "map_add", ["semiring_hom"]], ["del", "theorem", "map_mul", ["semiring_hom"]], ["del", "theorem", "map_neg", ["semiring_hom"]], ["del", "theorem", "map_one", ["semiring_hom"]], ["del", "theorem", "map_sub", ["semiring_hom"]], ["del", "theorem", "map_zero", ["semiring_hom"]], ["del", "def", "mk'", ["semiring_hom"]], ["del", "structure", "semiring_hom", []]]}]}, {"timestamp": 1566831025, "sha": "914c572e", "message": "feat(data/rat): add lt, le, and eq def lemmas, move casts into rat to basic (#1348)", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "coe_int_denom", ["rat"]], ["add", "theorem", "coe_int_eq_mk", ["rat"]], ["add", "theorem", "coe_int_eq_of_int", ["rat"]], ["add", "theorem", "coe_int_num", ["rat"]], ["add", "theorem", "coe_int_num_of_denom_eq_one", ["rat"]], ["add", "theorem", "coe_nat_denom", ["rat"]], ["add", "theorem", "coe_nat_eq_mk", ["rat"]], ["add", "theorem", "coe_nat_num", ["rat"]], ["add", "theorem", "eq_iff_mul_eq_mul", ["rat"]], ["add", "theorem", "inv_def'", ["rat"]], ["add", "theorem", "mk_eq_div", ["rat"]], ["add", "theorem", "mul_own_denom_eq_num", ["rat"]], ["mod", "theorem", "num_denom'", ["rat"]], ["mod", "theorem", "num_denom", ["rat"]], ["mod", "theorem", "of_int_eq_mk", ["rat"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["del", "theorem", "coe_int_denom", ["rat"]], ["del", "theorem", "coe_int_eq_mk", ["rat"]], ["del", "theorem", "coe_int_eq_of_int", ["rat"]], ["del", "theorem", "coe_int_num", ["rat"]], ["del", "theorem", "coe_int_num_of_denom_eq_one", ["rat"]], ["del", "theorem", "coe_nat_denom", ["rat"]], ["del", "theorem", "coe_nat_eq_mk", ["rat"]], ["del", "theorem", "coe_nat_num", ["rat"]], ["del", "theorem", "mk_eq_div", ["rat"]]]}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": [["add", "theorem", "div_lt_div_iff_mul_lt_mul", ["rat"]], ["add", "theorem", "lt_one_iff_num_lt_denom", ["rat"]]]}]}, {"timestamp": 1566807193, "sha": "7bc18a84", "message": "feat(data/fin): coe_eq_val and coe_mk (#1321)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "coe_eq_val", ["fin"]], ["add", "theorem", "coe_mk", ["fin"]], ["add", "theorem", "mk_val", ["fin"]], ["del", "def", "mk_val", ["fin"]]]}]}, {"timestamp": 1566562030, "sha": "253a9f7d", "message": "fix(docs/install): resize extensions icons for consistency [ci skip]", "changes": [{"oldPath": "docs/install/extensions-icon.png", "newPath": "docs/install/extensions-icon.png", "changes": []}, {"oldPath": "docs/install/new-extensions-icon.png", "newPath": "docs/install/new-extensions-icon.png", "changes": []}]}, {"timestamp": 1566561649, "sha": "91a9b4bb", "message": "doc(install/*): new VS-code icon [ci skip]", "changes": [{"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": null, "newPath": "docs/install/new-extensions-icon.png", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1566549941, "sha": "9a425726", "message": "feat(tactic/apply'): apply without unfolding type definitions (#1234)\n* feat(tactic/apply'): apply without unfolding type definitions\n* Update src/tactic/interactive.lean\nCo-Authored-By: Rob Lewis \n* improve doc\n* more doc\n* Update core.lean\n* add test case\n* add test case\n* improve treatment of type class instances for apply'\n* tweak application of instance resolution\n* fix\n* move `apply'` to its own file\n* adjust docs\n* import apply from tactic.default\n* fix import in test\n* Update tactics.lean", "changes": [{"oldPath": null, "newPath": "src/tactic/apply.lean", "changes": [["add", "def", "reorder_goals", ["tactic"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "test/apply.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1566498173, "sha": "f74cc70c", "message": "fix(tactic/tauto): use intro1 to deal with negations (#1354)\n* fix(tactic/tauto): use intro1 to deal with negations\n* test(tactic/tauto): add tests", "changes": [{"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "test/tauto.lean", "newPath": "test/tauto.lean", "changes": []}]}, {"timestamp": 1566487626, "sha": "40b09aab", "message": "feat(*): small lemmas from the sensitivity formalization (#1352)\n* feat(set_theory/cardinal): norm_cast attributes and extra lemma\n* feat(logic/basic): ne.symm_iff\n* feat(data/fin): succ_ne_zero\n* feat(data/bool): bxor_of_ne\n* feat(algebra/big_operators, data/fintype): {finset,fintype}.card_eq_sum_ones\n* feat(data/set): range_restrict\n* feat(data/finset): inter lemmas\n* Reid's corrections\n* fixes\n* fix cardinal power lemma\n* fixes\n* Update bool.lean", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "card_eq_sum_ones", ["finset"]]]}, {"oldPath": "src/data/bool.lean", "newPath": "src/data/bool.lean", "changes": [["add", "theorem", "bxor_iff_ne", ["bool"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "succ_ne_zero", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "inter_subset_inter", ["finset"]], ["add", "theorem", "inter_subset_inter_left", ["finset"]], ["add", "theorem", "inter_subset_inter_right", ["finset"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "card_eq_sum_ones", ["fintype"]], ["add", "theorem", "card_of_subsingleton", ["fintype"]], ["del", "theorem", "card_of_subsingleton", ["fintype", "fintype"]], ["del", "theorem", "univ_of_subsingleton", ["fintype", "fintype"]], ["add", "theorem", "univ_of_subsingleton", ["fintype"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "range_restrict", ["set"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "ne_comm", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["mod", "theorem", "nat_cast_inj", ["cardinal"]], ["mod", "theorem", "nat_cast_le", ["cardinal"]], ["mod", "theorem", "nat_cast_lt", ["cardinal"]], ["mod", "theorem", "nat_cast_pow", ["cardinal"]], ["mod", "theorem", "nat_succ", ["cardinal"]], ["add", "theorem", "pow_cast_right", ["cardinal"]]]}]}, {"timestamp": 1566469884, "sha": "f442a41a", "message": "docs(category/monad,bitraversable): add module docstrings #1260 (#1286)\n* docs(category/monad,bitraversable): add module docstrings\n* more docs\n* still more doc\n* doc about traversable", "changes": [{"oldPath": "src/category/bitraversable/basic.lean", "newPath": "src/category/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category/bitraversable/lemmas.lean", "newPath": "src/category/bitraversable/lemmas.lean", "changes": [["mod", "def", "tfst", ["bitraversable"]], ["mod", "def", "tsnd", ["bitraversable"]]]}, {"oldPath": "src/category/monad/basic.lean", "newPath": "src/category/monad/basic.lean", "changes": []}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}]}, {"timestamp": 1566466342, "sha": "a489719b", "message": "Rename Groupoid.lean to groupoid_category.lean (#1353)\nThis fixes a problem with `category_theory/groupoid` and `category_theory/Groupoid` having the same name except for the case of the first letter, which causes a problem on case insensitive file systems.", "changes": [{"oldPath": "src/category_theory/Groupoid.lean", "newPath": "src/category_theory/groupoid_category.lean", "changes": []}]}, {"timestamp": 1566416106, "sha": "8de4273b", "message": "feat(category_theory/Groupoid): category of groupoids (#1325)\n* feat(category_theory/Groupoid): category of groupoids\n* fix comment\n* more articles", "changes": [{"oldPath": null, "newPath": "src/category_theory/Groupoid.lean", "changes": [["add", "def", "forget_to_Cat", ["category_theory", "Groupoid"]], ["add", "def", "objects", ["category_theory", "Groupoid"]], ["add", "def", "of", ["category_theory", "Groupoid"]], ["add", "def", "Groupoid", ["category_theory"]]]}]}, {"timestamp": 1566389981, "sha": "35144f27", "message": "feat(conv/conv): conv tactics for zooming/saving state (#1351)\n* feat(conv/conv): conv tactics for zooming/saving state\n* rob's doc fixes\n* nicer docs", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/converter/interactive.lean", "newPath": "src/tactic/converter/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "test/conv/conv.lean", "changes": []}]}, {"timestamp": 1566385470, "sha": "3f915fc5", "message": "feat(archive): add the cubing a cube proof (#1343)\n* feat(archive): add the cubing a cube proof\n* rename file\n* add leanpkg configure to travis", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": null, "newPath": "archive/cubing_a_cube.lean", "changes": [["add", "theorem", "Ico_lemma", []], ["add", "theorem", "b_add_w_le_one", []], ["add", "theorem", "b_le_b", []], ["add", "def", "bcubes", []], ["add", "theorem", "bottom_mem_side", []], ["add", "theorem", "cannot_cube_a_cube", []], ["add", "def", "correct", []], ["add", "theorem", "b_lt_xm", ["cube"]], ["add", "theorem", "b_mem_bottom", ["cube"]], ["add", "theorem", "b_mem_side", ["cube"]], ["add", "theorem", "b_mem_to_set", ["cube"]], ["add", "theorem", "b_ne_xm", ["cube"]], ["add", "def", "bottom", ["cube"]], ["add", "theorem", "head_shift_up", ["cube"]], ["add", "theorem", "hw'", ["cube"]], ["add", "def", "shift_up", ["cube"]], ["add", "def", "side", ["cube"]], ["add", "theorem", "side_tail", ["cube"]], ["add", "theorem", "side_unit_cube", ["cube"]], ["add", "theorem", "tail_shift_up", ["cube"]], ["add", "def", "to_set", ["cube"]], ["add", "def", "to_set_disjoint", ["cube"]], ["add", "def", "to_set_subset", ["cube"]], ["add", "def", "unit_cube", ["cube"]], ["add", "def", "xm", ["cube"]], ["add", "structure", "cube", []], ["add", "def", "decreasing_sequence", []], ["add", "theorem", "exists_mi", []], ["add", "def", "mi", []], ["add", "theorem", "mi_mem_bcubes", []], ["add", "theorem", "mi_minimal", []], ["add", "theorem", "mi_not_on_boundary'", []], ["add", "theorem", "mi_not_on_boundary", []], ["add", "theorem", "mi_strict_minimal", []], ["add", "theorem", "mi_xm_ne_one", []], ["add", "theorem", "nonempty_bcubes", []], ["add", "theorem", "not_correct", []], ["add", "def", "on_boundary", []], ["add", "theorem", "shift_up_bottom_subset_bottoms", []], ["add", "theorem", "side_subset", []], ["add", "theorem", "smallest_on_boundary", []], ["add", "theorem", "strict_mono_sequence_of_cubes", []], ["add", "theorem", "t_le_t", []], ["add", "theorem", "tail_sub", []], ["add", "theorem", "to_set_subset_unit_cube", []], ["add", "theorem", "two_le_mk_bcubes", []], ["add", "def", "valley", []], ["add", "def", "valley_mi", []], ["add", "theorem", "valley_unit_cube", []], ["add", "theorem", "w_lt_w", []], ["add", "theorem", "w_ne_one", []], ["add", "theorem", "zero_le_b", []], ["add", "theorem", "zero_le_of_mem", []], ["add", "theorem", "zero_le_of_mem_side", []]]}]}, {"timestamp": 1566366175, "sha": "c5128756", "message": "refactor(*): rewrite `to_additive` attribute (#1345)\n* chore(algebra/group/to_additive): auto add structure fields\n* Snapshot\n* Rewrite `@[to_additive]`\n* Drop more explicit `name` arguments to `to_additive`\n* Drop more explicit arguments to `to_additive`\n* Map namespaces with `run_cmd to_additive.map_namespace`\n* fix(`group_theory/perm/sign`): fix compile\n* Fix handling of equational lemmas; fix warnings\n* Use `list.mmap'`", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["del", "theorem", "sum_hom", ["finset"]], ["del", "theorem", "finset_prod", ["is_group_hom"]], ["add", "theorem", "map_finset_prod", ["is_group_hom"]]]}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "def", "comp", ["add_monoid_hom"]], ["del", "def", "ext", ["add_monoid_hom"]], ["del", "def", "id", ["add_monoid_hom"]], ["del", "def", "map_add", ["add_monoid_hom"]], ["del", "theorem", "map_neg", ["add_monoid_hom"]], ["mod", "theorem", "map_sub", ["add_monoid_hom"]], ["del", "def", "map_zero", ["add_monoid_hom"]], ["del", "def", "mk'", ["add_monoid_hom"]], ["del", "def", "neg", ["add_monoid_hom"]], ["mod", "theorem", "coe_as_monoid_hom", []], ["add", "theorem", "ext", ["monoid_hom"]], ["del", "def", "ext", ["monoid_hom"]], ["del", "theorem", "map_div", ["monoid_hom"]], ["mod", "theorem", "map_inv", ["monoid_hom"]], ["mod", "theorem", "map_mul", ["monoid_hom"]], ["add", "theorem", "map_mul_inv", ["monoid_hom"]], ["mod", "theorem", "map_one", ["monoid_hom"]]]}, {"oldPath": "src/algebra/group/to_additive.lean", "newPath": "src/algebra/group/to_additive.lean", "changes": [["add", "structure", "value_type", ["to_additive"]]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["del", "def", "pointwise_add_add_monoid", ["set"]], ["del", "def", "pointwise_add_add_semigroup", ["set"]]]}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": [["mod", "theorem", "inv_eq", ["punit"]], ["mod", "theorem", "mul_eq", ["punit"]], ["mod", "theorem", "one_eq", ["punit"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["del", "def", "apply_symm_apply", ["add_equiv"]], ["del", "def", "map_add", ["add_equiv"]], ["del", "def", "map_zero", ["add_equiv"]], ["del", "def", "refl", ["add_equiv"]], ["del", "def", "symm", ["add_equiv"]], ["del", "def", "symm_apply_apply", ["add_equiv"]], ["del", "def", "to_add_monoid_hom", ["add_equiv"]], ["del", "theorem", "to_equiv_symm", ["add_equiv"]], ["del", "def", "trans", ["add_equiv"]], ["mod", "def", "apply_symm_apply", ["mul_equiv"]], ["mod", "def", "map_one", ["mul_equiv"]], ["mod", "def", "refl", ["mul_equiv"]], ["mod", "def", "symm", ["mul_equiv"]], ["mod", "def", "symm_apply_apply", ["mul_equiv"]], ["mod", "theorem", "to_equiv_symm", ["mul_equiv"]], ["mod", "def", "trans", ["mul_equiv"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "theorem", "coe_inv", ["quotient_group"]], ["mod", "theorem", "coe_mul", ["quotient_group"]], ["mod", "theorem", "coe_one", ["quotient_group"]], ["mod", "theorem", "ker_mk", ["quotient_group"]], ["mod", "theorem", "lift_mk'", ["quotient_group"]], ["mod", "theorem", "lift_mk", ["quotient_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["del", "def", "closure", ["add_group"]], ["del", "theorem", "closure_eq_mclosure", ["add_group"]], ["del", "theorem", "closure_subset", ["add_group"]], ["del", "theorem", "exists_list_of_mem_closure", ["add_group"]], ["del", "theorem", "gmultiples_eq_closure", ["add_group"]], ["del", "theorem", "image_closure", ["add_group"]], ["del", "theorem", "rec_on", ["add_group", "in_closure"]], ["add", "inductive", "in_closure", ["add_group"]], ["del", "theorem", "mem_closure", ["add_group"]], ["del", "theorem", "mem_closure_union_iff", ["add_group"]], ["add", "theorem", "gmultiples_subset", []], ["add", "theorem", "gpowers_subset", []], ["mod", "theorem", "closure_subgroup", ["group"]], ["del", "def", "center", ["is_add_subgroup"]], ["del", "def", "trivial", ["is_add_subgroup"]], ["mod", "theorem", "mem_trivial", ["is_subgroup"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["del", "def", "closure", ["add_monoid"]], ["del", "theorem", "closure_mono", ["add_monoid"]], ["del", "theorem", "closure_singleton", ["add_monoid"]], ["del", "theorem", "closure_subset", ["add_monoid"]], ["del", "theorem", "exists_list_of_mem_closure", ["add_monoid"]], ["del", "theorem", "image_closure", ["add_monoid"]], ["del", "theorem", "rec_on", ["add_monoid", "in_closure"]], ["add", "inductive", "in_closure", ["add_monoid"]], ["del", "theorem", "mem_closure_union_iff", ["add_monoid"]], ["del", "theorem", "subset_closure", ["add_monoid"]], ["del", "theorem", "is_add_submonoid_Union_of_directed", []], ["add", "theorem", "add_mem", ["multiples"]], ["add", "theorem", "mul_mem", ["powers"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": [["add", "def", "map_prefix", ["name"]]]}, {"oldPath": "src/order/filter/pointwise.lean", "newPath": "src/order/filter/pointwise.lean", "changes": [["del", "def", "pointwise_add", ["filter"]]]}, {"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/transport.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["del", "theorem", "coe_inf", ["open_add_subgroup"]], ["del", "theorem", "is_open_of_open_add_subgroup", ["open_add_subgroup"]], ["del", "theorem", "le_iff", ["open_add_subgroup"]], ["del", "theorem", "mem_nhds_zero", ["open_add_subgroup"]], ["del", "def", "prod", ["open_add_subgroup"]], ["mod", "theorem", "coe_inf", ["open_subgroup"]], ["mod", "theorem", "le_iff", ["open_subgroup"]]]}]}, {"timestamp": 1566358930, "sha": "733f616f", "message": "chore(gitignore): ignore files generated by mk_all script (#1328)", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}]}, {"timestamp": 1566351580, "sha": "80700498", "message": "feat(tactic/lift): add lift tactic (#1315)\n* start on lift_to tactic\n* finish lift tactic\n* add instance to lift rat to int\nthis required me to move some lemmas from rat/order to rat/basic which had nothing to do with the order on rat\n* move test to test/tactic.lean\n* add header and documentation\n* add more/better documentation\n* typo\n* more documentation\n* rewrite, minor\n* move import\n* remove can_lift attribute\nnow we automatically construct the simp set used to simplify\nThanks to @cipher1024 for the idea and writing the main part of this code\n* remove occurrence of [can_lift]", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "coe_int_num_of_denom_eq_one", ["rat"]]]}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/lift.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1566344333, "sha": "26a3e31d", "message": "chore(category_theory/monoidal): monoidal_category doesn't extend category (#1338)\n* chore(category_theory/monoidal): monoidal_category doesn't extend category\n* remove _aux file, simplifying\n* make notations global, and add doc-strings", "changes": [{"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["mod", "def", "tensor_iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/category_aux.lean", "newPath": null, "changes": [["del", "def", "assoc_natural", ["category_theory"]], ["del", "def", "assoc_obj", ["category_theory"]], ["del", "def", "left_unitor_natural", ["category_theory"]], ["del", "def", "left_unitor_obj", ["category_theory"]], ["del", "def", "pentagon", ["category_theory"]], ["del", "def", "right_unitor_natural", ["category_theory"]], ["del", "def", "right_unitor_obj", ["category_theory"]], ["del", "def", "tensor_hom_type", ["category_theory"]], ["del", "def", "tensor_obj_type", ["category_theory"]], ["del", "def", "triangle", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}]}, {"timestamp": 1566337052, "sha": "0dbe3a94", "message": "feat(algebra,equiv,logic): add various lemmas (#1342)\n* add various lemmas\n* add simp lemma\n* fix simp\n* rename to subtype_sigma_equiv", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "fn_min_add_fn_max", []], ["add", "theorem", "fn_min_mul_fn_max", []], ["add", "theorem", "min_add_max", []], ["add", "theorem", "min_mul_max", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_self_add_mul_self_eq_zero", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "Vieta_formula_quadratic", []], ["add", "theorem", "mul_self_eq_zero", []], ["add", "theorem", "zero_eq_mul_self", []]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subtype_sigma_equiv", ["equiv"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "tfae_singleton", ["list"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "congr_left", ["eq"]], ["add", "theorem", "congr_right", ["eq"]], ["add", "theorem", "eq_iff_iff", []]]}]}, {"timestamp": 1566315774, "sha": "14024a3e", "message": "feat(linear_algebra/bilinear_form, linear_algebra/sesquilinear_form, ring_theory/maps): bilinear/sesquilinear forms (#1300)\n* Create involution.lean\n* Update involution.lean\n* Update involution.lean\n* Rename involution.lean to maps.lean\n* Create bilinear_form.lean\n* Create sesquilinear_form.lean\n* Update sesquilinear_form.lean\n* Style fixes\n* Update sesquilinear_form.lean\n* Style fixes\n* fix typo", "changes": [{"oldPath": null, "newPath": "src/linear_algebra/bilinear_form.lean", "changes": [["add", "def", "is_alt", ["alt_bilin_form"]], ["add", "theorem", "neg", ["alt_bilin_form"]], ["add", "theorem", "self_eq_zero", ["alt_bilin_form"]], ["add", "theorem", "add_left", ["bilin_form"]], ["add", "theorem", "add_right", ["bilin_form"]], ["add", "def", "bilin_linear_map_equiv", ["bilin_form"]], ["add", "theorem", "ext", ["bilin_form"]], ["add", "def", "is_ortho", ["bilin_form"]], ["add", "theorem", "neg_left", ["bilin_form"]], ["add", "theorem", "neg_right", ["bilin_form"]], ["add", "theorem", "ortho_smul_left", ["bilin_form"]], ["add", "theorem", "ortho_smul_right", ["bilin_form"]], ["add", "theorem", "ortho_zero", ["bilin_form"]], ["add", "theorem", "smul_left", ["bilin_form"]], ["add", "theorem", "smul_right", ["bilin_form"]], ["add", "theorem", "sub_left", ["bilin_form"]], ["add", "theorem", "sub_right", ["bilin_form"]], ["add", "def", "to_linear_map", ["bilin_form"]], ["add", "theorem", "zero_left", ["bilin_form"]], ["add", "theorem", "zero_right", ["bilin_form"]], ["add", "structure", "bilin_form", []], ["add", "def", "to_bilin", ["linear_map"]], ["add", "theorem", "eq_zero", ["refl_bilin_form"]], ["add", "def", "is_refl", ["refl_bilin_form"]], ["add", "theorem", "ortho_sym", ["refl_bilin_form"]], ["add", "theorem", "is_refl", ["sym_bilin_form"]], ["add", "def", "is_sym", ["sym_bilin_form"]], ["add", "theorem", "ortho_sym", ["sym_bilin_form"]], ["add", "theorem", "sym", ["sym_bilin_form"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/sesquilinear_form.lean", "changes": [["add", "def", "is_alt", ["alt_sesq_form"]], ["add", "theorem", "neg", ["alt_sesq_form"]], ["add", "theorem", "self_eq_zero", ["alt_sesq_form"]], ["add", "theorem", "eq_zero", ["refl_sesq_form"]], ["add", "def", "is_refl", ["refl_sesq_form"]], ["add", "theorem", "ortho_sym", ["refl_sesq_form"]], ["add", "theorem", "add_left", ["sesq_form"]], ["add", "theorem", "add_right", ["sesq_form"]], ["add", "theorem", "ext", ["sesq_form"]], ["add", "def", "is_ortho", ["sesq_form"]], ["add", "theorem", "neg_left", ["sesq_form"]], ["add", "theorem", "neg_right", ["sesq_form"]], ["add", "theorem", "ortho_smul_left", ["sesq_form"]], ["add", "theorem", "ortho_smul_right", ["sesq_form"]], ["add", "theorem", "ortho_zero", ["sesq_form"]], ["add", "theorem", "smul_left", ["sesq_form"]], ["add", "theorem", "smul_right", ["sesq_form"]], ["add", "theorem", "sub_left", ["sesq_form"]], ["add", "theorem", "sub_right", ["sesq_form"]], ["add", "theorem", "zero_left", ["sesq_form"]], ["add", "theorem", "zero_right", ["sesq_form"]], ["add", "structure", "sesq_form", []], ["add", "theorem", "is_refl", ["sym_sesq_form"]], ["add", "def", "is_sym", ["sym_sesq_form"]], ["add", "theorem", "ortho_sym", ["sym_sesq_form"]], ["add", "theorem", "sym", ["sym_sesq_form"]]]}, {"oldPath": null, "newPath": "src/ring_theory/maps.lean", "changes": [["add", "def", "anti_equiv_to_equiv", ["comm_ring"]], ["add", "theorem", "anti_hom_to_hom", ["comm_ring"]], ["add", "def", "equiv_to_anti_equiv", ["comm_ring"]], ["add", "theorem", "hom_to_anti_hom", ["comm_ring"]], ["add", "theorem", "map_neg", ["is_ring_anti_hom"]], ["add", "theorem", "map_sub", ["is_ring_anti_hom"]], ["add", "theorem", "map_zero", ["is_ring_anti_hom"]], ["add", "theorem", "bijective", ["ring_anti_equiv"]], ["add", "theorem", "map_add", ["ring_anti_equiv"]], ["add", "theorem", "map_mul", ["ring_anti_equiv"]], ["add", "theorem", "map_neg", ["ring_anti_equiv"]], ["add", "theorem", "map_neg_one", ["ring_anti_equiv"]], ["add", "theorem", "map_one", ["ring_anti_equiv"]], ["add", "theorem", "map_sub", ["ring_anti_equiv"]], ["add", "theorem", "map_zero", ["ring_anti_equiv"]], ["add", "theorem", "map_zero_iff", ["ring_anti_equiv"]], ["add", "structure", "ring_anti_equiv", []], ["add", "theorem", "bijective", ["ring_equiv"]], ["add", "theorem", "map_add", ["ring_equiv"]], ["add", "theorem", "map_mul", ["ring_equiv"]], ["add", "theorem", "map_neg", ["ring_equiv"]], ["add", "theorem", "map_neg_one", ["ring_equiv"]], ["add", "theorem", "map_one", ["ring_equiv"]], ["add", "theorem", "map_sub", ["ring_equiv"]], ["add", "theorem", "map_zero", ["ring_equiv"]], ["add", "theorem", "map_zero_iff", ["ring_equiv"]], ["add", "theorem", "bijective", ["ring_invo"]], ["add", "theorem", "map_add", ["ring_invo"]], ["add", "theorem", "map_mul", ["ring_invo"]], ["add", "theorem", "map_neg", ["ring_invo"]], ["add", "theorem", "map_neg_one", ["ring_invo"]], ["add", "theorem", "map_one", ["ring_invo"]], ["add", "theorem", "map_sub", ["ring_invo"]], ["add", "theorem", "map_zero", ["ring_invo"]], ["add", "theorem", "map_zero_iff", ["ring_invo"]], ["add", "def", "to_ring_anti_equiv", ["ring_invo"]], ["add", "structure", "ring_invo", []]]}]}, {"timestamp": 1566306723, "sha": "6f747ec2", "message": "feat(data/vector2): nth_map (#1349)\n* feat(data/vector2): nth_map\n* Update vector2.lean\n* Update vector2.lean", "changes": [{"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["add", "theorem", "nth_map", ["vector"]]]}]}, {"timestamp": 1566303270, "sha": "87714320", "message": "doc(tactic/ring2): document parts of ring2 (#1208)\n* doc(tactic/ring2): document parts of ring2\n* feat(data/tree): refactor binary trees into their own module\n* feat(tactic/ring2): resolve correct correctness\n* chore(tactic/ring2): move copyright into comment\n* doc(tactic/ring2): wording", "changes": [{"oldPath": null, "newPath": "src/data/tree.lean", "changes": [["add", "def", "get", ["tree"]], ["add", "def", "get_or_else", ["tree"]], ["add", "def", "index_of", ["tree"]], ["add", "def", "map", ["tree"]], ["add", "def", "of_rbnode", ["tree"]], ["add", "def", "repr", ["tree"]], ["add", "inductive", "{u}", []]]}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": [["del", "def", "repr", ["linarith", "tree"]], ["del", "inductive", "{u}", ["linarith"]]]}, {"oldPath": "src/tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": [["del", "def", "repr", ["tactic", "ring2", "horner_expr"]], ["add", "def", "to_string", ["tactic", "ring2", "horner_expr"]], ["del", "def", "get", ["tactic", "ring2", "tree"]], ["del", "def", "index_of", ["tactic", "ring2", "tree"]], ["del", "def", "of_rbnode", ["tactic", "ring2", "tree"]], ["del", "inductive", "{u}", ["tactic", "ring2"]]]}]}, {"timestamp": 1566299619, "sha": "f3eb8c21", "message": "chore(data/matrix): simp attribute for transpose_tranpose (#1350)", "changes": [{"oldPath": "src/data/matrix/basic.lean", "newPath": "src/data/matrix/basic.lean", "changes": [["mod", "theorem", "transpose_transpose", ["matrix"]]]}]}, {"timestamp": 1566248701, "sha": "5a309a3a", "message": "fix(category_theory/eq_to_hom): remove bad simp lemmas (#1346)", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["mod", "theorem", "eq_to_hom_app", ["category_theory"]], ["mod", "theorem", "eq_to_hom_map", ["category_theory"]], ["mod", "theorem", "eq_to_iso_map", ["category_theory"]]]}]}, {"timestamp": 1566241297, "sha": "9eefd40e", "message": "refactor(data/list/min_max): use with_top for maximum and define argmax (#1320)\n* refactor(data/list/min_max): use option for maximum and define argmax\n* prove minimum_singleton\n* fix build\n* use with_bot for maximum\n* update comments", "changes": [{"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": [["add", "def", "argmax", ["list"]], ["add", "theorem", "argmax_concat", ["list"]], ["add", "theorem", "argmax_cons", ["list"]], ["add", "theorem", "argmax_eq_none", ["list"]], ["add", "theorem", "argmax_eq_some_iff", ["list"]], ["add", "theorem", "argmax_mem", ["list"]], ["add", "theorem", "argmax_nil", ["list"]], ["add", "theorem", "argmax_singleton", ["list"]], ["add", "theorem", "argmax_two_self", ["list"]], ["add", "def", "argmax₂", ["list"]], ["add", "def", "argmin", ["list"]], ["add", "theorem", "argmin_concat", ["list"]], ["add", "theorem", "argmin_cons", ["list"]], ["add", "theorem", "argmin_eq_none", ["list"]], ["add", "theorem", "argmin_eq_some_iff", ["list"]], ["add", "theorem", "argmin_le_of_mem", ["list"]], ["add", "theorem", "argmin_mem", ["list"]], ["add", "theorem", "argmin_nil", ["list"]], ["add", "theorem", "argmin_singleton", ["list"]], ["add", "theorem", "foldl_argmax₂_eq_none", ["list"]], ["add", "theorem", "index_of_argmax", ["list"]], ["add", "theorem", "index_of_argmin", ["list"]], ["add", "theorem", "le_argmax_of_mem", ["list"]], ["del", "theorem", "le_maximum_aux_of_mem", ["list"]], ["add", "theorem", "le_maximum_of_mem'", ["list"]], ["mod", "theorem", "le_maximum_of_mem", ["list"]], ["del", "theorem", "le_minimum_aux_of_mem", ["list"]], ["add", "theorem", "le_minimum_of_mem'", ["list"]], ["del", "theorem", "le_minimum_of_mem", ["list"]], ["del", "theorem", "le_of_foldl_max", ["list"]], ["del", "theorem", "le_of_foldl_min", ["list"]], ["del", "theorem", "le_of_foldr_max", ["list"]], ["del", "theorem", "le_of_foldr_min", ["list"]], ["mod", "def", "maximum", ["list"]], ["del", "def", "maximum_aux", ["list"]], ["del", "def", "maximum_aux_cons", ["list"]], ["add", "theorem", "maximum_concat", ["list"]], ["add", "theorem", "maximum_cons", ["list"]], ["del", "def", "maximum_cons", ["list"]], ["add", "theorem", "maximum_eq_coe_iff", ["list"]], ["add", "theorem", "maximum_eq_none", ["list"]], ["mod", "theorem", "maximum_mem", ["list"]], ["add", "theorem", "maximum_nil", ["list"]], ["add", "theorem", "maximum_singleton", ["list"]], ["del", "def", "maximum_singleton", ["list"]], ["add", "theorem", "mem_argmax_iff", ["list"]], ["add", "theorem", "mem_argmin_iff", ["list"]], ["del", "theorem", "mem_foldl_max", ["list"]], ["del", "theorem", "mem_foldl_min", ["list"]], ["del", "theorem", "mem_foldr_max", ["list"]], ["del", "theorem", "mem_foldr_min", ["list"]], ["del", "theorem", "mem_maximum_aux", ["list"]], ["del", "theorem", "mem_minimum_aux", ["list"]], ["mod", "def", "minimum", ["list"]], ["del", "def", "minimum_aux", ["list"]], ["del", "def", "minimum_aux_cons", ["list"]], ["add", "theorem", "minimum_concat", ["list"]], ["add", "theorem", "minimum_cons", ["list"]], ["del", "def", "minimum_cons", ["list"]], ["add", "theorem", "minimum_eq_coe_iff", ["list"]], ["add", "theorem", "minimum_eq_none", ["list"]], ["add", "theorem", "minimum_le_of_mem", ["list"]], ["mod", "theorem", "minimum_mem", ["list"]], ["add", "theorem", "minimum_nil", ["list"]], ["add", "theorem", "minimum_singleton", ["list"]], ["del", "def", "minimum_singleton", ["list"]]]}, {"oldPath": "src/tactic/omega/find_scalars.lean", "newPath": "src/tactic/omega/find_scalars.lean", "changes": []}]}, {"timestamp": 1566234584, "sha": "92fa24cf", "message": "feat(data/fin): val simp lemmas (#1347)\n* feat(data/fin): val simp lemmas\n* Update fin.lean", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "cast_add_val", ["fin"]], ["add", "theorem", "cast_le_val", ["fin"]], ["add", "theorem", "cast_lt_cast_succ", ["fin"]], ["add", "theorem", "last_val", ["fin"]]]}]}, {"timestamp": 1566207365, "sha": "6fbcc04a", "message": "feat(tactic/reassoc_axiom): produce associativity-friendly lemmas in category theory (#1341)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["mod", "theorem", "counit_naturality", ["category_theory", "adjunction"]], ["del", "theorem", "counit_naturality_assoc", ["category_theory", "adjunction"]], ["mod", "theorem", "left_triangle_components", ["category_theory", "adjunction"]], ["del", "theorem", "left_triangle_components_assoc", ["category_theory", "adjunction"]], ["mod", "theorem", "right_triangle_components", ["category_theory", "adjunction"]], ["del", "theorem", "right_triangle_components_assoc", ["category_theory", "adjunction"]], ["mod", "theorem", "unit_naturality", ["category_theory", "adjunction"]], ["del", "theorem", "unit_naturality_assoc", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["mod", "theorem", "eq_to_hom_trans", ["category_theory"]], ["del", "theorem", "eq_to_hom_trans_assoc", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["del", "theorem", "hom_inv_id_assoc", ["category_theory", "iso"]], ["del", "theorem", "inv_hom_id_assoc", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "ι_map", ["category_theory", "limits", "colim"]], ["del", "theorem", "ι_map_assoc", ["category_theory", "limits", "colim"]], ["mod", "theorem", "ι_desc", ["category_theory", "limits", "colimit"]], ["del", "theorem", "ι_desc_assoc", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "ι_post", ["category_theory", "limits", "colimit"]], ["del", "theorem", "ι_post_assoc", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "ι_pre", ["category_theory", "limits", "colimit"]], ["del", "theorem", "ι_pre_assoc", ["category_theory", "limits", "colimit"]]]}, {"oldPath": null, "newPath": "src/tactic/reassoc_axiom.lean", "changes": []}]}, {"timestamp": 1566220520, "sha": "8f09b0fb", "message": "fix(tactic/omega): simplify with mul_one and one_mul (#1344)\n* Simplify multiplication by one\n* Remove debug trace\n* Fix integer version of omega", "changes": [{"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1566213620, "sha": "9c1718ab", "message": "feat(tactic/obtain): make type argument optional (#1327)\n* feat(tactic/obtain): make type argument optional\n* fix(tactic/obtain): unnecessary steps\n* feat(tactic/obtain): simplify cases", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1566157431, "sha": "ab7d39b0", "message": "feat(data/vector2): update_nth (#1334)\n* feat(data/vector2): update_nth\n* naming and docstrings\n* remove double namespace fom vector.nth_mem", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "exists_iff", ["fin"]], ["mod", "theorem", "find_eq_some_iff", ["fin"]], ["add", "theorem", "forall_iff", ["fin"]], ["mod", "theorem", "mem_find_iff", ["fin"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nth_le_update_nth_eq", ["list"]], ["add", "theorem", "nth_le_update_nth_of_ne", ["list"]]]}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["add", "theorem", "mem_iff_nth", ["vector"]], ["add", "theorem", "nodup_iff_nth_inj", ["vector"]], ["add", "theorem", "nth_mem", ["vector"]], ["add", "theorem", "nth_update_nth_eq_if", ["vector"]], ["add", "theorem", "nth_update_nth_of_ne", ["vector"]], ["add", "theorem", "nth_update_nth_same", ["vector"]], ["add", "def", "update_nth", ["vector"]]]}]}, {"timestamp": 1566075004, "sha": "538d3f6f", "message": "feat(data/vector2): to_list_map (#1335)", "changes": [{"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": [["add", "theorem", "to_list_map", ["vector"]]]}]}, {"timestamp": 1566068140, "sha": "66fa499b", "message": "feat(data/list/basic): list.mem_insert_nth (#1336)\n* feat(data/list/basic): list.mem_insert_nth\n* Update src/data/list/basic.lean\nCo-Authored-By: Floris van Doorn ", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "mem_insert_nth", ["list"]]]}]}, {"timestamp": 1565950857, "sha": "a1dda1e9", "message": "feat(linear_algebra/matrix): linear maps are linearly equivalent to matrices (#1310)\n* linear map to matrix (WIP)\n* WIP\n* feat (linear_algebra/matrix): lin_equiv_matrix\n* feat (linear_algebra.basic): linear_equiv.arrow_congr, std_basis_eq_single\n* change unnecessary vector_space assumption for equiv_fun_basis to module\n* add docstrings and refactor\n* add docstrings\n* move instance to pi_instances\n* add docstrings + name change\n* remove duplicate instance", "changes": [{"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "arrow_congr", ["linear_equiv"]], ["mod", "def", "congr_right", ["linear_equiv"]], ["add", "def", "conj", ["linear_equiv"]], ["add", "theorem", "std_basis_eq_single", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "def", "equiv_fun_basis", []], ["add", "theorem", "card_fintype", ["module"]], ["del", "theorem", "card_fintype'", ["vector_space"]], ["mod", "theorem", "card_fintype", ["vector_space"]]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "def", "lin_equiv_matrix'", []], ["add", "def", "lin_equiv_matrix", []], ["add", "def", "to_matrix", ["linear_map"]], ["add", "def", "to_matrixₗ", ["linear_map"]], ["add", "theorem", "to_lin_to_matrix", []], ["add", "theorem", "to_matrix_to_lin", []]]}]}, {"timestamp": 1565921954, "sha": "2e76f364", "message": "feat(tactic/sanity_check): add #sanity_check command (#1318)\n* create a file sanity_check\nCurrently it contains a tactic that detects unused arguments in declarations\nIn the future I want to add other cleaning tactics\n* fix last tactic\n* update comment\n* checkpoint\n* checkpoint\n* rewrite sanity_check\n* update sanity_check\n* move results to appropriate files\n* move some declarations\nSome declarations in tactic.core made more sense in meta.expr\ntactic.core now imports string.defs (which adds very little)\nadd documentation\n* add entry to docs/tactic.md\n* fix errors\n* some extra documentation\n* add test\n* add doc to meta.expr", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "popn", ["string"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/sanity_check.lean", "changes": []}, {"oldPath": null, "newPath": "test/sanity_check.lean", "changes": [["add", "def", "foo1", []], ["add", "def", "foo2", []], ["add", "theorem", "foo3", []], ["add", "theorem", "foo4", []]]}]}, {"timestamp": 1565914773, "sha": "397c0169", "message": "feat(tactic/finish): parse ematch lemmas with `finish using ...` (#1326)\n* feat(tactic/finish): parse ematch lemmas with `finish using ...`\nAdd test\nAdd documentation\n* Add docstrings\n* Formatting and docstrings\n* Clean up test\n* Add even more docstrings\nclean up match expressions\nFix typo", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": null, "newPath": "test/finish4.lean", "changes": [["add", "def", "append1", []], ["add", "theorem", "hd_rev", []], ["add", "theorem", "log_mul'", []], ["add", "def", "rev", []]]}]}, {"timestamp": 1565908167, "sha": "2e90bed8", "message": "feat(analysis/complex/exponential): prove that rpow is continuous (#1306)\n* rpow is continuous\n* Update exponential.lean\n* Fix things\n* Fix things\n* Fix things\n* Fix things", "changes": [{"oldPath": "src/algebra/quadratic_discriminant.lean", "newPath": "src/algebra/quadratic_discriminant.lean", "changes": [["del", "theorem", "exists_le_mul", []], ["add", "theorem", "exists_le_mul_self", []], ["del", "theorem", "exists_lt_mul", []], ["add", "theorem", "exists_lt_mul_self", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["add", "theorem", "abs_rpow_le_abs_rpow", ["real"]], ["add", "theorem", "continuous_at_log", ["real"]], ["add", "theorem", "continuous_at_rpow_of_ne_zero", ["real"]], ["add", "theorem", "continuous_at_rpow_of_pos", ["real"]], ["add", "theorem", "continuous_log'", ["real"]], ["add", "theorem", "continuous_log", ["real"]], ["add", "theorem", "continuous_rpow", ["real"]], ["add", "theorem", "continuous_rpow_aux1", ["real"]], ["add", "theorem", "continuous_rpow_aux2", ["real"]], ["add", "theorem", "continuous_rpow_aux3", ["real"]], ["add", "theorem", "continuous_rpow_of_ne_zero", ["real"]], ["add", "theorem", "continuous_rpow_of_pos", ["real"]], ["add", "theorem", "continuous_sqrt", ["real"]], ["add", "theorem", "log_lt_log", ["real"]], ["add", "theorem", "log_lt_log_iff", ["real"]], ["add", "theorem", "log_neg", ["real"]], ["add", "theorem", "log_neg_iff", ["real"]], ["add", "theorem", "log_nonneg", ["real"]], ["add", "theorem", "log_nonpos", ["real"]], ["add", "theorem", "log_pos", ["real"]], ["add", "theorem", "log_pos_iff", ["real"]], ["add", "theorem", "one_lt_rpow", ["real"]], ["add", "theorem", "rpow_def_of_neg", ["real"]], ["add", "theorem", "rpow_def_of_nonpos", ["real"]], ["add", "theorem", "rpow_def_of_pos", ["real"]], ["add", "theorem", "rpow_le_rpow_of_exponent_ge", ["real"]], ["add", "theorem", "rpow_le_rpow_of_exponent_le", ["real"]], ["add", "theorem", "rpow_lt_one", ["real"]], ["add", "theorem", "rpow_lt_rpow", ["real"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_gt", ["real"]], ["add", "theorem", "rpow_lt_rpow_of_exponent_lt", ["real"]], ["add", "theorem", "sqrt_eq_rpow", ["real"]], ["add", "theorem", "tendsto_log_one_zero", ["real"]]]}, {"oldPath": "src/analysis/normed_space/real_inner_product.lean", "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "continuous_sqrt", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_lt_one_iff", ["real"]], ["add", "theorem", "one_lt_exp_iff", ["real"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["del", "theorem", "abs_sqrt_sub_sqrt_le_sqrt_abs", ["real"]]]}]}, {"timestamp": 1565900807, "sha": "74c25a57", "message": "feat(*): lemmas needed for two projects (#1294)\n* feat(multiplicity|enat): add facts needed for IMO 2019-4\n* feat(*): various lemmas needed for the cubing a cube proof\n* typo\n* some cleanup\n* fixes, add choose_two_right\n* projections for associated.prime and irreducible", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "le_or_le", ["associates", "prime"]], ["add", "theorem", "ne_one", ["associates", "prime"]], ["add", "theorem", "ne_zero", ["associates", "prime"]], ["add", "theorem", "is_unit_or_is_unit", ["irreducible"]], ["add", "theorem", "ne_zero", ["irreducible"]], ["add", "theorem", "not_unit", ["irreducible"]], ["del", "theorem", "ne_zero_of_irreducible", []], ["mod", "theorem", "not_prime_zero", []], ["add", "theorem", "pow_dvd_pow_iff", []], ["add", "theorem", "div_or_div", ["prime"]], ["add", "theorem", "ne_zero", ["prime"]], ["add", "theorem", "not_unit", ["prime"]]]}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_le_prod", ["finset"]], ["add", "theorem", "prod_nat_cast", ["finset"]], ["add", "theorem", "prod_nonneg", ["finset"]], ["add", "theorem", "prod_pos", ["finset"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "add_le_iff_nonpos_left", []], ["add", "theorem", "add_le_iff_nonpos_right", []], ["add", "theorem", "add_lt_iff_neg_left", []], ["add", "theorem", "add_lt_iff_neg_right", []]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "cons", ["fin"]], ["add", "theorem", "cons_succ", ["fin"]], ["add", "theorem", "cons_zero", ["fin"]], ["add", "theorem", "exists_fin_succ", ["fin"]], ["add", "theorem", "forall_fin_succ", ["fin"]], ["add", "def", "tail", ["fin"]], ["add", "theorem", "tail_cons", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "exists_min", ["finset"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "map_eq_zero", ["multiset", "multiset"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "choose_two_right", ["nat"]], ["add", "theorem", "fact_eq_one", ["nat"]], ["add", "theorem", "fact_inj", ["nat"]], ["add", "theorem", "fact_lt", ["nat"]], ["add", "theorem", "monotone_fact", ["nat"]], ["add", "theorem", "one_lt_fact", ["nat"]], ["add", "theorem", "triangle_succ", ["nat"]]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["add", "theorem", "add_one_le_iff_lt", ["enat"]], ["add", "theorem", "add_one_le_of_lt", ["enat"]], ["add", "theorem", "le_of_lt_add_one", ["enat"]], ["add", "theorem", "lt_add_one", ["enat"]], ["add", "theorem", "lt_add_one_iff_lt", ["enat"]], ["add", "theorem", "ne_top_iff", ["enat"]], ["add", "theorem", "ne_top_of_lt", ["enat"]], ["add", "theorem", "top_eq_none", ["enat"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "ne_none_iff", ["roption"]], ["add", "theorem", "some_ne_none", ["roption"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_min", ["set"]]]}, {"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": [["add", "theorem", "eq_of_Ico_disjoint", ["set"]], ["add", "theorem", "nonempty_Ico_sdiff", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "not_disjoint_iff", ["set"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "reflect_lt", []]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "prod", ["multiplicity", "finset"]], ["add", "theorem", "multiplicity_add_eq_min", ["multiplicity"]], ["add", "theorem", "multiplicity_add_of_gt", ["multiplicity"]], ["add", "theorem", "multiplicity_lt_iff_neg_dvd", ["multiplicity"]], ["add", "theorem", "multiplicity_pow_self", ["multiplicity"]], ["add", "theorem", "multiplicity_pow_self_of_prime", ["multiplicity"]], ["add", "theorem", "multiplicity_sub_of_gt", ["multiplicity"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1565893107, "sha": "fa68342d", "message": "feat(data/rat): move lemmas to right file, add nat cast lemmas, remove (#1333)\nredundant lemma", "changes": [{"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["add", "theorem", "of_int_eq_mk", ["rat"]]]}, {"oldPath": "src/data/rat/cast.lean", "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "coe_int_eq_mk", ["rat"]], ["add", "theorem", "coe_int_eq_of_int", ["rat"]], ["add", "theorem", "coe_nat_eq_mk", ["rat"]], ["add", "theorem", "mk_eq_div", ["rat"]]]}, {"oldPath": "src/data/rat/floor.lean", "newPath": "src/data/rat/floor.lean", "changes": []}, {"oldPath": "src/data/rat/order.lean", "newPath": "src/data/rat/order.lean", "changes": [["del", "theorem", "coe_int_eq_mk", ["rat"]], ["del", "theorem", "coe_int_eq_of_int", ["rat"]], ["del", "theorem", "mk_eq_div", ["rat"]], ["del", "theorem", "mk_le", ["rat"]], ["del", "theorem", "of_int_eq_mk", ["rat"]]]}]}, {"timestamp": 1565881748, "sha": "73cc56c5", "message": "refactor(data/fintype): shorten proof of card_eq (#1332)", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}]}, {"timestamp": 1565868421, "sha": "ebbbb76b", "message": "doc(contribute/style): remove outdated syntax [ci skip] (#1329)\n* doc(contribute/style): remove outdated syntax [ci skip]\n* doc(contribute/style): mistaken find/replace", "changes": [{"oldPath": "docs/contribute/style.md", "newPath": "docs/contribute/style.md", "changes": []}]}, {"timestamp": 1565864790, "sha": "3d512f79", "message": "chore(category_theory/isomorphism): docstring, DRY, add some trivial lemmas (#1309)\n- add module docstring;\n- use `as_iso` more aggressively to avoid repeating proofs;\n- add more trivial lemmas.", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "def", "as_iso", ["category_theory"]], ["mod", "theorem", "map_inv", ["category_theory", "functor"]], ["add", "theorem", "map_iso_symm", ["category_theory", "functor"]], ["del", "def", "inv", ["category_theory"]], ["mod", "theorem", "hom_inv_id", ["category_theory", "is_iso"]], ["mod", "theorem", "hom_inv_id_assoc", ["category_theory", "is_iso"]], ["mod", "theorem", "inv_comp", ["category_theory", "is_iso"]], ["mod", "theorem", "inv_hom_id", ["category_theory", "is_iso"]], ["mod", "theorem", "inv_hom_id_assoc", ["category_theory", "is_iso"]], ["mod", "theorem", "inv_id", ["category_theory", "is_iso"]], ["mod", "theorem", "inv_inv", ["category_theory", "is_iso", "is_iso"]], ["mod", "theorem", "inv_hom", ["category_theory", "is_iso", "iso"]], ["mod", "theorem", "inv_inv", ["category_theory", "is_iso", "iso"]], ["mod", "theorem", "refl_symm", ["category_theory", "iso"]], ["add", "theorem", "refl_trans", ["category_theory", "iso"]], ["add", "theorem", "self_symm_id", ["category_theory", "iso"]], ["add", "theorem", "self_symm_id_assoc", ["category_theory", "iso"]], ["add", "theorem", "symm_eq_iff", ["category_theory", "iso"]], ["add", "theorem", "symm_self_id", ["category_theory", "iso"]], ["add", "theorem", "symm_self_id_assoc", ["category_theory", "iso"]], ["add", "theorem", "symm_symm_eq", ["category_theory", "iso"]], ["add", "theorem", "trans_assoc", ["category_theory", "iso"]], ["add", "theorem", "trans_refl", ["category_theory", "iso"]], ["mod", "theorem", "trans_symm", ["category_theory", "iso"]]]}]}, {"timestamp": 1565845704, "sha": "e48ad0dc", "message": "chore(*): migrate `units.map` to bundled homs (#1331)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "map'", ["is_unit"]], ["add", "theorem", "map", ["is_unit"]], ["add", "theorem", "mk0", ["is_unit"]]]}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "def", "as_monoid_hom", []], ["add", "theorem", "coe_as_monoid_hom", []]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["add", "def", "coe_hom", ["units"]], ["add", "theorem", "coe_hom_apply", ["units"]], ["add", "theorem", "coe_map'", ["units"]], ["mod", "theorem", "coe_map", ["units"]], ["add", "def", "map'", ["units"]], ["add", "def", "map", ["units"]], ["mod", "theorem", "map_comp", ["units"]], ["mod", "theorem", "map_id", ["units"]]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/power_series.lean", "newPath": "src/ring_theory/power_series.lean", "changes": []}]}, {"timestamp": 1565805685, "sha": "02548ad6", "message": "fix(data/mllist): fix off-by-one bug in mllist.take (#1298)\n* Update mllist.lean\nChanged `n` to `n+1` in line 72. This fixes a bug in the `take` function for monadic lazy lists (mllist).\n* add a test showing correct behaviour of take", "changes": [{"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": "test/mllist.lean", "newPath": "test/mllist.lean", "changes": []}]}, {"timestamp": 1565798321, "sha": "0bc4a400", "message": "feat(data/pequiv): symm_single_apply (#1324)", "changes": [{"oldPath": "src/data/pequiv.lean", "newPath": "src/data/pequiv.lean", "changes": [["add", "theorem", "symm_single_apply", ["pequiv"]]]}]}, {"timestamp": 1565709177, "sha": "2a131d9f", "message": "fix(.github): typo (#1323)", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}]}, {"timestamp": 1565709585, "sha": "5796465f", "message": "fix(algebra/ring): fix typo in docstring (#1322)", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}]}, {"timestamp": 1565631735, "sha": "900c53ae", "message": "feat(scripts): add scripts to import all mathlib files (#1281)\n* add scripts to import all mathlib files\nmk_all makes a file all.lean in each subdirectory of src/, importing all files in that directory, including subdirectories\nrm_all removes the files all.lean\n* also delete all.olean files\n* remove unnecessary maxdepth\n* add comments, and generate comments", "changes": [{"oldPath": null, "newPath": "scripts/mk_all.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/rm_all.sh", "changes": []}]}, {"timestamp": 1565632756, "sha": "df1fb07d", "message": "doc(contribute): add link to doc requirements (#1317)", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}]}, {"timestamp": 1565623689, "sha": "92a54240", "message": "feat(data/fin): mem_find_iff (#1307)\n* feat(data/fin): mem_find_iff\n* add find_eq_some_iff (#1308)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "find_eq_some_iff", ["fin"]], ["add", "theorem", "mem_find_iff", ["fin"]]]}]}, {"timestamp": 1565617287, "sha": "f46b0dc6", "message": "feat(algebra/ordered_field): le_div_iff_of_neg (#1311)\n* feat(algebra/ordered_field): le_div_iff_of_neg\n* Update ordered_field.lean\n* Update ordered_field.lean\n* Update ordered_field.lean\n* Update ordered_field.lean", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "le_div_iff_of_neg", []]]}]}, {"timestamp": 1565610924, "sha": "3bd3dcd5", "message": "feat(data/option/basic): bind_eq_none' (#1312)\n* feat(data/option/basic): bind_eq_none'\n* Update basic.lean\n* fix build and add simp", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "bind_eq_none'", ["option"]], ["mod", "theorem", "bind_eq_none", ["option"]]]}]}, {"timestamp": 1565604880, "sha": "01cb33cb", "message": "feat(algebra/ordered_ring): pos_of_mul_neg_left and similar (#1313)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "neg_of_mul_pos_left", []], ["add", "theorem", "neg_of_mul_pos_right", []], ["add", "theorem", "nonneg_of_mul_nonpos_left", []], ["add", "theorem", "nonneg_of_mul_nonpos_right", []], ["add", "theorem", "nonpos_of_mul_nonneg_left", []], ["add", "theorem", "nonpos_of_mul_nonneg_right", []], ["add", "theorem", "pos_of_mul_neg_left", []], ["add", "theorem", "pos_of_mul_neg_right", []]]}]}, {"timestamp": 1565515267, "sha": "37d4edab", "message": "Delete repeated item (#1316)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}]}, {"timestamp": 1565409880, "sha": "3aad7f1e", "message": "feat(data/matrix/pequiv): partial equivalences to represent matrices (#1228)\n* feat(matrix/pequiv): partial equivalences to represent matrices\n* use notation for pequiv\n* correct imports\n* finish correcting imports\n* add some docs\n* Add documentation\n* improve documentation", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/matrix/pequiv.lean", "changes": [["add", "theorem", "matrix_mul_apply", ["pequiv"]], ["add", "theorem", "mul_matrix_apply", ["pequiv"]], ["add", "theorem", "single_mul_single", ["pequiv"]], ["add", "theorem", "single_mul_single_of_ne", ["pequiv"]], ["add", "theorem", "single_mul_single_right", ["pequiv"]], ["add", "def", "to_matrix", ["pequiv"]], ["add", "theorem", "to_matrix_bot", ["pequiv"]], ["add", "theorem", "to_matrix_injective", ["pequiv"]], ["add", "theorem", "to_matrix_refl", ["pequiv"]], ["add", "theorem", "to_matrix_swap", ["pequiv"]], ["add", "theorem", "to_matrix_symm", ["pequiv"]], ["add", "theorem", "to_matrix_trans", ["pequiv"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}]}, {"timestamp": 1565344658, "sha": "a79794ab", "message": "feat(archive): add archive (#1295)\n* feat(archive): add archive\n* reformulate sentence", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": null, "newPath": "archive/README.md", "changes": []}]}, {"timestamp": 1565273647, "sha": "dd4db5f4", "message": "fix(tactic/linarith): handle neq goals (#1303)", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1565231757, "sha": "9c4dd950", "message": "feat (analysis/normed_space): Define real inner product space (#1248)\n* Inner product space\n* Change the definition of inner_product_space\nThe original definition introduces an instance loop.\nSee Zulip talks: https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/ring.20tactic.20works.20at.20one.20place.2C.20fails.20at.20another\n* Orthogonal Projection\nProve the existence of orthogonal projections onto complete subspaces in an inner product space.\n* Fix names\n* small fixes", "changes": [{"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "one_div_le_one_div", ["nat"]], ["add", "theorem", "one_div_lt_one_div", ["nat"]]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_self_le_mul_self_of_le_of_neg_le", []]]}, {"oldPath": null, "newPath": "src/algebra/quadratic_discriminant.lean", "changes": [["add", "def", "discrim", []], ["add", "theorem", "discriminant_le_zero", []], ["add", "theorem", "discriminant_lt_zero", []], ["add", "theorem", "exist_quadratic_eq_zero", []], ["add", "theorem", "exists_le_mul", []], ["add", "theorem", "exists_lt_mul", []], ["add", "theorem", "quadratic_eq_zero_iff", []], ["add", "theorem", "quadratic_eq_zero_iff_discrim_eq_square", []], ["add", "theorem", "quadratic_eq_zero_iff_of_discrim_eq_zero", []], ["add", "theorem", "quadratic_ne_zero_of_discrim_ne_square", []]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": [["add", "theorem", "convex_submodule", []], ["add", "theorem", "convex_subspace", []]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/real_inner_product.lean", "changes": [["add", "theorem", "abs_inner_le_norm", []], ["add", "theorem", "exists_norm_eq_infi_of_complete_convex", []], ["add", "theorem", "exists_norm_eq_infi_of_complete_subspace", []], ["add", "theorem", "inner_add_add_self", []], ["add", "theorem", "inner_add_left", []], ["add", "theorem", "inner_add_right", []], ["add", "theorem", "inner_comm", []], ["add", "theorem", "inner_mul_inner_self_le", []], ["add", "theorem", "inner_neg_left", []], ["add", "theorem", "inner_neg_neg", []], ["add", "theorem", "inner_neg_right", []], ["add", "theorem", "inner_self_eq_norm_square", []], ["add", "theorem", "inner_self_eq_zero", []], ["add", "theorem", "inner_self_nonneg", []], ["add", "theorem", "inner_smul_left", []], ["add", "theorem", "inner_smul_right", []], ["add", "theorem", "inner_sub_left", []], ["add", "theorem", "inner_sub_right", []], ["add", "theorem", "inner_sub_sub_self", []], ["add", "theorem", "inner_zero_left", []], ["add", "theorem", "inner_zero_right", []], ["add", "theorem", "norm_add_mul_self", []], ["add", "theorem", "norm_add_pow_two", []], ["add", "theorem", "norm_eq_infi_iff_inner_eq_zero", []], ["add", "theorem", "norm_eq_infi_iff_inner_le_zero", []], ["add", "theorem", "norm_eq_sqrt_inner", []], ["add", "theorem", "norm_sub_mul_self", []], ["add", "theorem", "norm_sub_pow_two", []], ["add", "theorem", "parallelogram_law", []], ["add", "theorem", "parallelogram_law_with_norm", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "continuous_sqrt", ["real"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "theorem", "Sup_univ", ["real"]], ["add", "theorem", "abs_sqrt_sub_sqrt_le_sqrt_abs", ["real"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "exists_lt_of_cinfi_lt", ["lattice"]], ["add", "theorem", "exists_lt_of_lt_csupr", ["lattice"]]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "theorem", "cauchy_seq_tendsto_of_is_complete", []]]}]}, {"timestamp": 1565164247, "sha": "a2a867e8", "message": "feat(algebra/ring): bundled semiring homs (#1305)\n* added bundled ring homs\n* removed comment\n* Tidy and making docstrings consistent\n* fix spacing\n* fix typo\nCo-Authored-By: Johan Commelin \n* fix typo\nCo-Authored-By: Johan Commelin \n* whoops, actually removing instances", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "def", "comp", ["semiring_hom"]], ["add", "theorem", "ext", ["semiring_hom"]], ["add", "def", "id", ["semiring_hom"]], ["add", "theorem", "map_add", ["semiring_hom"]], ["add", "theorem", "map_mul", ["semiring_hom"]], ["add", "theorem", "map_neg", ["semiring_hom"]], ["add", "theorem", "map_one", ["semiring_hom"]], ["add", "theorem", "map_sub", ["semiring_hom"]], ["add", "theorem", "map_zero", ["semiring_hom"]], ["add", "def", "mk'", ["semiring_hom"]], ["add", "structure", "semiring_hom", []]]}]}, {"timestamp": 1565107085, "sha": "57c1d6d7", "message": "chore(data/matrix): protect some lemmas (#1304)", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": [["del", "theorem", "add_mul", ["matrix"]], ["del", "theorem", "mul_add", ["matrix"]], ["del", "theorem", "mul_zero", ["matrix"]], ["del", "theorem", "zero_mul", ["matrix"]]]}]}, {"timestamp": 1565041062, "sha": "88ad3cf5", "message": "feat(tactic/push_neg): add optional name argument to contrapose (#1302)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": []}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1565017281, "sha": "de832056", "message": "refactor(algebra/big_operators) delete duplicates and change names (#1301)\n* refactor(algebra/big_operators) delete duplicates and change names\n* fix build", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["del", "theorem", "sum_le_sum'", ["finset"]], ["del", "theorem", "sum_le_zero'", ["finset"]], ["del", "theorem", "sum_le_zero", ["finset"]], ["add", "theorem", "sum_nonneg", ["finset"]], ["add", "theorem", "sum_nonpos", ["finset"]], ["del", "theorem", "zero_le_sum'", ["finset"]], ["del", "theorem", "zero_le_sum", ["finset"]]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1564996559, "sha": "fc56c852", "message": "feat(algebra/order_functions): abs_nonpos_iff (#1299)\n* feat(algebra/ordered_group): abs_nonpos_iff\n* Update ordered_group.lean\n* move to order_functions", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "abs_nonpos_iff", []]]}]}, {"timestamp": 1564892468, "sha": "b46665fa", "message": "chore(ring_theory/algebra): make first type argument explicit in alg_hom (#1296)\n* chore(ring_theory/algebra): make first type argument explicit in alg_hom\nNow this works, and it didn't work previously even with `@`\n```lean\nstructure alg_equiv (α β γ : Type*) [comm_ring α] [ring β] [ring γ]\n [algebra α β] [algebra α γ] extends alg_hom α β γ :=\n```\n* Update algebra.lean", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "structure", "alg_hom", []]]}]}, {"timestamp": 1564805696, "sha": "27d34b31", "message": "feat(algebra/direct_limit): discrete_field (#1293)", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}]}, {"timestamp": 1564766107, "sha": "8fe73f38", "message": "feat(data/fintype): psigma.fintype (#1291)\n* feat(data/fintype): psigma.fintype\n* Update fintype.lean\n* Swap instance argument order", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}]}, {"timestamp": 1564758878, "sha": "3af92bef", "message": "feat(algebra/module): linear_map.coe_mk (#1290)", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "coe_mk", ["linear_map"]]]}]}, {"timestamp": 1564757538, "sha": "10612383", "message": "feat(topology): category of uniform spaces (#1275)\n* feat(category_theory): uniform spaces\n* feat(topology/uniform_spaces): CpltSepUniformSpace is a reflective subcategory", "changes": [{"oldPath": null, "newPath": "src/topology/uniform_space/UniformSpace.lean", "changes": [["add", "def", "forget", ["CpltSepUniformSpace"]], ["add", "def", "forget_to_Type_via_UniformSpace", ["CpltSepUniformSpace"]], ["add", "def", "forget_to_UniformSpace", ["CpltSepUniformSpace"]], ["add", "def", "of", ["CpltSepUniformSpace"]], ["add", "def", "to_UniformSpace", ["CpltSepUniformSpace"]], ["add", "structure", "CpltSepUniformSpace", []], ["add", "def", "completion_hom", ["UniformSpace"]], ["add", "theorem", "completion_hom_val", ["UniformSpace"]], ["add", "theorem", "extension_comp_coe", ["UniformSpace"]], ["add", "theorem", "extension_hom_val", ["UniformSpace"]], ["add", "def", "forget", ["UniformSpace"]], ["add", "def", "forget_to_Top", ["UniformSpace"]], ["add", "def", "forget_to_Type_via_Top", ["UniformSpace"]], ["add", "def", "of", ["UniformSpace"]], ["add", "def", "UniformSpace", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["add", "theorem", "extension_comp_coe", ["uniform_space", "completion"]], ["mod", "theorem", "map_id", ["uniform_space", "completion"]]]}]}, {"timestamp": 1564750134, "sha": "5b4b208c", "message": "feat(data/fintype): univ_unique (#1289)", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "univ_unique", []]]}]}, {"timestamp": 1564678875, "sha": "766807f6", "message": "feat(data/rat): refactor into smaller files and add documentation (#1284)", "changes": [{"oldPath": "docs/contribute/doc.md", "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/rat/basic.lean", "newPath": "src/data/rat/basic.lean", "changes": [["del", "theorem", "abs_def", ["rat"]], ["del", "theorem", "cast_abs", ["rat"]], ["del", "theorem", "cast_add", ["rat"]], ["del", "theorem", "cast_add_of_ne_zero", ["rat"]], ["del", "theorem", "cast_bit0", ["rat"]], ["del", "theorem", "cast_bit1", ["rat"]], ["del", "theorem", "cast_coe_int", ["rat"]], ["del", "theorem", "cast_coe_nat", ["rat"]], ["del", "theorem", "cast_div", ["rat"]], ["del", "theorem", "cast_div_of_ne_zero", ["rat"]], ["del", "theorem", "cast_eq_zero", ["rat"]], ["del", "theorem", "cast_id", ["rat"]], ["del", "theorem", "cast_inj", ["rat"]], ["del", "theorem", "cast_injective", ["rat"]], ["del", "theorem", "cast_inv", ["rat"]], ["del", "theorem", "cast_inv_of_ne_zero", ["rat"]], ["del", "theorem", "cast_le", ["rat"]], ["del", "theorem", "cast_lt", ["rat"]], ["del", "theorem", "cast_lt_zero", ["rat"]], ["del", "theorem", "cast_max", ["rat"]], ["del", "theorem", "cast_min", ["rat"]], ["del", "theorem", "cast_mk", ["rat"]], ["del", "theorem", "cast_mk_of_ne_zero", ["rat"]], ["del", "theorem", "cast_mul", ["rat"]], ["del", "theorem", "cast_mul_of_ne_zero", ["rat"]], ["del", "theorem", "cast_ne_zero", ["rat"]], ["del", "theorem", "cast_neg", ["rat"]], ["del", "theorem", "cast_nonneg", ["rat"]], ["del", "theorem", "cast_nonpos", ["rat"]], ["del", "theorem", "cast_of_int", ["rat"]], ["del", "theorem", "cast_one", ["rat"]], ["del", "theorem", "cast_pos", ["rat"]], ["del", "theorem", "cast_pow", ["rat"]], ["del", "theorem", "cast_sub", ["rat"]], ["del", "theorem", "cast_sub_of_ne_zero", ["rat"]], ["del", "theorem", "cast_zero", ["rat"]], ["del", "def", "ceil", ["rat"]], ["del", "theorem", "ceil_add_int", ["rat"]], ["del", "theorem", "ceil_coe", ["rat"]], ["del", "theorem", "ceil_le", ["rat"]], ["del", "theorem", "ceil_mono", ["rat"]], ["del", "theorem", "ceil_sub_int", ["rat"]], ["del", "theorem", "coe_int_denom", ["rat"]], ["del", "theorem", "coe_int_eq_mk", ["rat"]], ["del", "theorem", "coe_int_eq_of_int", ["rat"]], ["del", "theorem", "coe_int_num", ["rat"]], ["del", "theorem", "coe_nat_denom", ["rat"]], ["del", "theorem", "coe_nat_num", ["rat"]], ["del", "theorem", "eq_cast", ["rat"]], ["del", "theorem", "eq_cast_of_ne_zero", ["rat"]], ["del", "theorem", "exists_mul_self", ["rat"]], ["del", "def", "floor", ["rat"]], ["del", "theorem", "floor_add_int", ["rat"]], ["del", "theorem", "floor_coe", ["rat"]], ["del", "theorem", "floor_le", ["rat"]], ["del", "theorem", "floor_lt", ["rat"]], ["del", "theorem", "floor_mono", ["rat"]], ["del", "theorem", "floor_sub_int", ["rat"]], ["del", "theorem", "le_ceil", ["rat"]], ["del", "theorem", "le_floor", ["rat"]], ["del", "theorem", "le_nat_ceil", ["rat"]], ["del", "theorem", "lt_nat_ceil", ["rat"]], ["del", "theorem", "lt_succ_floor", ["rat"]], ["del", "theorem", "mk_eq_div", ["rat"]], ["del", "theorem", "mk_le", ["rat"]], ["del", "theorem", "mk_nonneg", ["rat"]], ["del", "theorem", "mul_cast_comm", ["rat"]], ["del", "def", "nat_ceil", ["rat"]], ["del", "theorem", "nat_ceil_add_nat", ["rat"]], ["del", "theorem", "nat_ceil_coe", ["rat"]], ["del", "theorem", "nat_ceil_le", ["rat"]], ["del", "theorem", "nat_ceil_lt_add_one", ["rat"]], ["del", "theorem", "nat_ceil_mono", ["rat"]], ["del", "theorem", "nat_ceil_zero", ["rat"]], ["del", "theorem", "nonneg_iff_zero_le", ["rat"]], ["del", "theorem", "num_nonneg_iff_zero_le", ["rat"]], ["del", "theorem", "num_pos_iff_pos", ["rat"]], ["del", "theorem", "of_int_eq_mk", ["rat"]], ["del", "def", "sqrt", ["rat"]], ["del", "theorem", "sqrt_eq", ["rat"]], ["del", "theorem", "sqrt_nonneg", ["rat"]]]}, {"oldPath": null, "newPath": "src/data/rat/cast.lean", "changes": [["add", "theorem", "cast_abs", ["rat"]], ["add", "theorem", "cast_add", ["rat"]], ["add", "theorem", "cast_add_of_ne_zero", ["rat"]], ["add", "theorem", "cast_bit0", ["rat"]], ["add", "theorem", "cast_bit1", ["rat"]], ["add", "theorem", "cast_coe_int", ["rat"]], ["add", "theorem", "cast_coe_nat", ["rat"]], ["add", "theorem", "cast_div", ["rat"]], ["add", "theorem", "cast_div_of_ne_zero", ["rat"]], ["add", "theorem", "cast_eq_zero", ["rat"]], ["add", "theorem", "cast_id", ["rat"]], ["add", "theorem", "cast_inj", ["rat"]], ["add", "theorem", "cast_injective", ["rat"]], ["add", "theorem", "cast_inv", ["rat"]], ["add", "theorem", "cast_inv_of_ne_zero", ["rat"]], ["add", "theorem", "cast_le", ["rat"]], ["add", "theorem", "cast_lt", ["rat"]], ["add", "theorem", "cast_lt_zero", ["rat"]], ["add", "theorem", "cast_max", ["rat"]], ["add", "theorem", "cast_min", ["rat"]], ["add", "theorem", "cast_mk", ["rat"]], ["add", "theorem", "cast_mk_of_ne_zero", ["rat"]], ["add", "theorem", "cast_mul", ["rat"]], ["add", "theorem", "cast_mul_of_ne_zero", ["rat"]], ["add", "theorem", "cast_ne_zero", ["rat"]], ["add", "theorem", "cast_neg", ["rat"]], ["add", "theorem", "cast_nonneg", ["rat"]], ["add", "theorem", "cast_nonpos", ["rat"]], ["add", "theorem", "cast_of_int", ["rat"]], ["add", "theorem", "cast_one", ["rat"]], ["add", "theorem", "cast_pos", ["rat"]], ["add", "theorem", "cast_pow", ["rat"]], ["add", "theorem", "cast_sub", ["rat"]], ["add", "theorem", "cast_sub_of_ne_zero", ["rat"]], ["add", "theorem", "cast_zero", ["rat"]], ["add", "theorem", "coe_int_denom", ["rat"]], ["add", "theorem", "coe_int_num", ["rat"]], ["add", "theorem", "coe_nat_denom", ["rat"]], ["add", "theorem", "coe_nat_num", ["rat"]], ["add", "theorem", "eq_cast", ["rat"]], ["add", "theorem", "eq_cast_of_ne_zero", ["rat"]], ["add", "theorem", "mul_cast_comm", ["rat"]]]}, {"oldPath": null, "newPath": "src/data/rat/default.lean", "changes": []}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rat/floor.lean", "changes": [["add", "def", "ceil", ["rat"]], ["add", "theorem", "ceil_add_int", ["rat"]], ["add", "theorem", "ceil_coe", ["rat"]], ["add", "theorem", "ceil_le", ["rat"]], ["add", "theorem", "ceil_mono", ["rat"]], ["add", "theorem", "ceil_sub_int", ["rat"]], ["add", "def", "floor", ["rat"]], ["add", "theorem", "floor_add_int", ["rat"]], ["add", "theorem", "floor_coe", ["rat"]], ["add", "theorem", "floor_def", ["rat"]], ["add", "theorem", "floor_le", ["rat"]], ["add", "theorem", "floor_lt", ["rat"]], ["add", "theorem", "floor_mono", ["rat"]], ["add", "theorem", "floor_sub_int", ["rat"]], ["add", "theorem", "le_ceil", ["rat"]], ["add", "theorem", "le_floor", ["rat"]], ["add", "theorem", "le_nat_ceil", ["rat"]], ["add", "theorem", "lt_nat_ceil", ["rat"]], ["add", "theorem", "lt_succ_floor", ["rat"]], ["add", "def", "nat_ceil", ["rat"]], ["add", "theorem", "nat_ceil_add_nat", ["rat"]], ["add", "theorem", "nat_ceil_coe", ["rat"]], ["add", "theorem", "nat_ceil_le", ["rat"]], ["add", "theorem", "nat_ceil_lt_add_one", ["rat"]], ["add", "theorem", "nat_ceil_mono", ["rat"]], ["add", "theorem", "nat_ceil_zero", ["rat"]]]}, {"oldPath": null, "newPath": "src/data/rat/order.lean", "changes": [["add", "theorem", "abs_def", ["rat"]], ["add", "theorem", "coe_int_eq_mk", ["rat"]], ["add", "theorem", "coe_int_eq_of_int", ["rat"]], ["add", "theorem", "exists_mul_self", ["rat"]], ["add", "theorem", "mk_eq_div", ["rat"]], ["add", "theorem", "mk_le", ["rat"]], ["add", "theorem", "mk_nonneg", ["rat"]], ["add", "theorem", "nonneg_iff_zero_le", ["rat"]], ["add", "theorem", "num_nonneg_iff_zero_le", ["rat"]], ["add", "theorem", "num_pos_iff_pos", ["rat"]], ["add", "theorem", "of_int_eq_mk", ["rat"]], ["add", "def", "sqrt", ["rat"]], ["add", "theorem", "sqrt_eq", ["rat"]], ["add", "theorem", "sqrt_nonneg", ["rat"]]]}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1564671746, "sha": "0d66c875", "message": "feat(data/seq): add ext proof, nats def, zip_with lemmas, and extract seq property (#1278)", "changes": [{"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": [["add", "theorem", "ge_stable", ["seq"]], ["add", "def", "nats", ["seq"]], ["add", "theorem", "nats_nth", ["seq"]], ["add", "theorem", "zip_with_nth_none'", ["seq"]], ["add", "theorem", "zip_with_nth_none", ["seq"]], ["add", "theorem", "zip_with_nth_some", ["seq"]], ["mod", "def", "seq", []], ["add", "def", "is_seq", ["stream"]]]}, {"oldPath": "src/data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}]}, {"timestamp": 1564591698, "sha": "49be50fb", "message": "doc(data/padics, data/real/cau_seq, algebra): add doc strings, remove unnecessary assumptions (#1283)\n* doc(data/padics): add doc strings, remove unnecessary prime assumptions\n* fix(data/real/cau_seq): remove unnecessary hypotheses\n* fix(algebra/{field, ordered_field}): remove unused assumptions\n* doc(data/real/cau_seq): document Cauchy sequences\n* fix(algebra/field): remove obsolete lemma\n* fix build\n* fix build\n* more unnecessary arguments\n* Update src/data/padics/padic_numbers.lean\n* Update src/data/padics/padic_numbers.lean\n* remove another unnecessary argument (suggested by @sgouezel)", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "div_mul_div_cancel", []], ["del", "theorem", "div_mul_div_cancel", ["field"]], ["mod", "theorem", "mk0_inj", ["units", "units"]]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["mod", "theorem", "inv_pos_of_nat", ["nat"]], ["mod", "theorem", "one_div_pos_of_nat", ["nat"]]]}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "coe_inj", ["padic"]]]}, {"oldPath": "src/data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}]}, {"timestamp": 1564583828, "sha": "88d60dcf", "message": "feat(data/pnat/basic): coe_bit0 and coe_bit1 (#1288)", "changes": [{"oldPath": "src/data/pnat/basic.lean", "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "coe_bit0", ["pnat"]], ["add", "theorem", "coe_bit1", ["pnat"]]]}]}, {"timestamp": 1564579738, "sha": "53680f96", "message": "feat(data/matrix): mul_sum and sum_mul (#1253)\n* feat(data/matrix): mul_sum and sum_mul\n* Update matrix.lean\n* add comment explaing funny proof", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": [["add", "theorem", "is_add_monoid_hom_mul_left", ["matrix"]], ["add", "def", "is_add_monoid_hom_mul_right", ["matrix"]]]}]}, {"timestamp": 1564569670, "sha": "da46b321", "message": "feat(tactic/symmetry_at): apply symmetry on assumptions (#1269)\n* feat(tactic/symmetry_at): apply symmetry on assumptions\n* add docstrings", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1564562276, "sha": "badeb48b", "message": "feat(data/equiv/algebra): change mul_equiv field to map_mul (#1287)\n* feat(data/equiv/algebra): bundle field for mul_equiv\n* adding docs\n* Update src/data/equiv/algebra.lean\n* Update src/data/equiv/algebra.lean\nCo-Authored-By: sgouezel ", "changes": [{"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "def", "apply_symm_apply", ["add_equiv"]], ["add", "def", "map_add", ["add_equiv"]], ["add", "def", "map_zero", ["add_equiv"]], ["add", "def", "refl", ["add_equiv"]], ["add", "def", "symm", ["add_equiv"]], ["add", "def", "symm_apply_apply", ["add_equiv"]], ["add", "def", "to_add_monoid_hom", ["add_equiv"]], ["add", "theorem", "to_equiv_symm", ["add_equiv"]], ["add", "def", "trans", ["add_equiv"]], ["add", "def", "apply_symm_apply", ["mul_equiv"]], ["add", "def", "map_mul", ["mul_equiv"]], ["add", "def", "map_one", ["mul_equiv"]], ["add", "def", "symm_apply_apply", ["mul_equiv"]], ["add", "theorem", "to_equiv_symm", ["mul_equiv"]], ["add", "def", "to_monoid_hom", ["mul_equiv"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1564487146, "sha": "9d589d7b", "message": "feat(data/nat/fib): add Fibonacci sequence (#1279)", "changes": [{"oldPath": null, "newPath": "src/data/nat/fib.lean", "changes": [["add", "def", "fib", ["nat"]], ["add", "theorem", "fib_le_fib_succ", ["nat"]], ["add", "theorem", "fib_mono", ["nat"]], ["add", "theorem", "fib_one", ["nat"]], ["add", "theorem", "fib_pos", ["nat"]], ["add", "theorem", "fib_succ_succ", ["nat"]], ["add", "theorem", "fib_zero", ["nat"]], ["add", "theorem", "le_fib_self", ["nat"]]]}]}, {"timestamp": 1564469904, "sha": "0b476751", "message": "feat(algebra,data/complex/exponential): add abs_neg_one_pow, remove hyp from div_le_div_of_le_left (#1280)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "inv_eq_zero", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "abs_neg_one_pow", []]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["mod", "theorem", "div_le_div_of_le_left", []]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}]}, {"timestamp": 1564434606, "sha": "132bc567", "message": "doc(windows.md): clarify windows instructions (#1165)\n* doc(windows.md): clarify windows instructions\n* fix headers\n* remove msys2 from windows installation instructions\n* fix sentence\n* typo\nCo-Authored-By: sgouezel \n* doc(windows.md): small changes\ntypos, and explicitly discourage msys2", "changes": [{"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1564417063, "sha": "363f1873", "message": "feat(tactic/extract_goal): create stand-alone examples out of current goal (#1233)\n* feat(tactic/extract_example): create stand-alone examples out of current goal\n* feat(tactic/extract_example): add formatting and options\n* feat(tactic/extract_goal): rename to `extract_goal`\n* Update src/tactic/interactive.lean\nCo-Authored-By: Rob Lewis \n* make instances anonymous when the name starts with `_`\n* add doc strings\n* feat(tactic/interactive): exact_goal works on defs", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "ilast'_mem", ["list"]], ["del", "theorem", "last'_mem", ["list"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "ilast'", ["list"]], ["mod", "def", "last'", ["list"]]]}, {"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "is_prefix_of", ["string"]], ["add", "def", "is_suffix_of", ["string"]]]}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1564409580, "sha": "ee15f68e", "message": "doc(category_theory): adding headers and basic comments to files without (#1264)\n* doc(category_theory): adding headers and basic comments to files without\n* Update src/category_theory/instances/rel.lean\nCo-Authored-By: Johan Commelin \n* fix imports\n* more comments, references\n* refs\n* Update src/category_theory/monad/adjunction.lean\nCo-Authored-By: Rob Lewis \n* fixing all the copyright headers\n* Update src/category_theory/monad/adjunction.lean\nCo-Authored-By: Rob Lewis \n* fix import", "changes": [{"oldPath": "docs/references.bib", "newPath": "docs/references.bib", "changes": []}, {"oldPath": "src/algebra/CommRing/colimits.lean", "newPath": "src/algebra/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/CommRing/limits.lean", "newPath": "src/algebra/CommRing/limits.lean", "changes": []}, {"oldPath": "src/algebra/Mon/colimits.lean", "newPath": "src/algebra/Mon/colimits.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/fully_faithful.lean", "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/instances/kleisli.lean", "newPath": "src/category_theory/instances/kleisli.lean", "changes": []}, {"oldPath": "src/category_theory/instances/rel.lean", "newPath": "src/category_theory/instances/rel.lean", "changes": [["add", "def", "Rel", ["category_theory"]], ["del", "def", "rel", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/lattice.lean", "newPath": "src/category_theory/limits/lattice.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/default.lean", "newPath": "src/category_theory/limits/shapes/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/monad/adjunction.lean", "newPath": "src/category_theory/monad/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/monad/algebra.lean", "newPath": "src/category_theory/monad/algebra.lean", "changes": []}, {"oldPath": "src/category_theory/monad/limits.lean", "newPath": "src/category_theory/monad/limits.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category_aux.lean", "newPath": "src/category_theory/monoidal/category_aux.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": []}, {"oldPath": "src/category_theory/products/bifunctor.lean", "newPath": "src/category_theory/products/bifunctor.lean", "changes": []}, {"oldPath": "src/category_theory/products/default.lean", "newPath": "src/category_theory/products/default.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/sparse.lean", "newPath": "src/category_theory/sparse.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}, {"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/library_search.lean", "newPath": "src/tactic/library_search.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/basic.lean", "newPath": "src/tactic/rewrite_all/basic.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/congr.lean", "newPath": "src/tactic/rewrite_all/congr.lean", "changes": []}, {"oldPath": "src/tactic/rewrite_all/default.lean", "newPath": "src/tactic/rewrite_all/default.lean", "changes": []}, {"oldPath": "src/tactic/slice.lean", "newPath": "src/tactic/slice.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/topology/Top/adjunctions.lean", "newPath": "src/topology/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/Top/basic.lean", "newPath": "src/topology/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/Top/default.lean", "newPath": "src/topology/Top/default.lean", "changes": []}, {"oldPath": "src/topology/Top/epi_mono.lean", "newPath": "src/topology/Top/epi_mono.lean", "changes": []}, {"oldPath": "src/topology/Top/limits.lean", "newPath": "src/topology/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/Top/open_nhds.lean", "newPath": "src/topology/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/topology/Top/opens.lean", "newPath": "src/topology/Top/opens.lean", "changes": []}, {"oldPath": "src/topology/Top/presheaf.lean", "newPath": "src/topology/Top/presheaf.lean", "changes": []}, {"oldPath": "src/topology/Top/presheaf_of_functions.lean", "newPath": "src/topology/Top/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/topology/Top/stalks.lean", "newPath": "src/topology/Top/stalks.lean", "changes": []}, {"oldPath": "src/topology/algebra/TopCommRing/basic.lean", "newPath": "src/topology/algebra/TopCommRing/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}, {"oldPath": "test/mllist.lean", "newPath": "test/mllist.lean", "changes": []}, {"oldPath": "test/rewrite_all.lean", "newPath": "test/rewrite_all.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": []}]}, {"timestamp": 1564399367, "sha": "5adeebf1", "message": "feat(algebra/group/hom): bundled monoid and group homs (#1271)\n* feat(algebra/group/hom): adding bundled group homs\n* adding module docstring\n* moving some group stuff into monoid\n* responding to PR comments\n* mk'' -> mk'\n* spaces before `}`\n* Update src/algebra/group/hom.lean\n* Update src/algebra/group/hom.lean\n* Update src/algebra/group/hom.lean\n* Update src/algebra/group/hom.lean\n* Update hom.lean", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["add", "def", "comp", ["add_monoid_hom"]], ["add", "def", "ext", ["add_monoid_hom"]], ["add", "def", "id", ["add_monoid_hom"]], ["add", "def", "map_add", ["add_monoid_hom"]], ["add", "theorem", "map_neg", ["add_monoid_hom"]], ["add", "theorem", "map_sub", ["add_monoid_hom"]], ["add", "def", "map_zero", ["add_monoid_hom"]], ["add", "def", "mk'", ["add_monoid_hom"]], ["add", "def", "neg", ["add_monoid_hom"]], ["add", "structure", "add_monoid_hom", []], ["add", "def", "comp", ["monoid_hom"]], ["add", "def", "ext", ["monoid_hom"]], ["add", "def", "id", ["monoid_hom"]], ["add", "theorem", "map_div", ["monoid_hom"]], ["add", "theorem", "map_inv", ["monoid_hom"]], ["add", "theorem", "map_mul", ["monoid_hom"]], ["add", "theorem", "map_one", ["monoid_hom"]], ["add", "def", "mk'", ["monoid_hom"]], ["add", "structure", "monoid_hom", []]]}]}, {"timestamp": 1564310105, "sha": "879da1cf", "message": "fix(algebraic_geometry/presheafedspace): fix lame proofs (#1273)\n* fix(algebraic_geometry/presheafedspace): fix lame proofs\n* fix\n* Update src/algebraic_geometry/presheafed_space.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["del", "theorem", "comp_c", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}]}, {"timestamp": 1564290796, "sha": "9689f4d5", "message": "feat(tactic/interactive): move `rotate` into interactive namespace (#1272)\nalso document `swap`\nAdd test", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1564063796, "sha": "d5a53939", "message": "doc(contribute/index.md): add line about large PRs [ci skip] (#1267)", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}]}, {"timestamp": 1564051250, "sha": "03c0d6c0", "message": "feat(algebra/group/basic): add_add_neg_cancel'_right (#1261)\n* feat(algebra/group/basic): add_add_neg_cancel'_right\n* fix build", "changes": [{"oldPath": "src/algebra/group/basic.lean", "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "add_add_neg_cancel'_right", []]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1564051708, "sha": "926467dc", "message": "doc(contribute/style.md): fix section on comments [ci skip] (#1265)", "changes": [{"oldPath": "docs/contribute/style.md", "newPath": "docs/contribute/style.md", "changes": []}]}, {"timestamp": 1564044356, "sha": "1000ae8d", "message": "doc(*): new documentation requirements (#1229)\n* feat(docs/contribute/doc): template for documentation\n* doc(data/padics/padic_norm): new doc style\n* doc(docs/contribute/code-review): add link to doc requirements\n* doc(.github/PULL_REQUEST_TEMPLATE): add link to doc requirements\n* doc(topology/basic): adds new style documentation\n* feat(tactic/doc_blame): a user command #doc_blame\nIt lists definitions without docstrings in the current file\n* perf(tactic/doc_blame): filter declarations earlier\n* doc(contribute/doc): More doc style explanations\n* doc(data/padics/padic_norm): finish documenting\n* doc(docs/contribute/docs): more text about documentation requirements\n* feat(tactic/doc_blame): add option to blame theorems also\n* doc(cardinal/ordinal): add some documentation\nadd header to cardinal.lean\nfix some information in topological_spaces.md (but not all)\n* fix(data/padics): remove leftover exit command\n* doc(*): update proposed doc style\n* doc(docs/contribute/doc.md): update doc style guide\n* feat(docs/references): add mathlib references bibtex\n* update doc style in times_cont_diff and add to list of examples\n* fix(docs/contribute/doc): clarify implementation notes\n* doc(tactic/doc_blame): add header", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": "docs/contribute/code-review.md", "newPath": "docs/contribute/code-review.md", "changes": []}, {"oldPath": null, "newPath": "docs/contribute/doc.md", "changes": []}, {"oldPath": null, "newPath": "docs/references.bib", "changes": []}, {"oldPath": "docs/theories/topological_spaces.md", "newPath": "docs/theories/topological_spaces.md", "changes": []}, {"oldPath": "src/analysis/calculus/times_cont_diff.lean", "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/doc_blame.lean", "changes": [["add", "def", "is_not_auto", ["name"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1563982335, "sha": "5125f11a", "message": "feat(data/matrix): smul_val (#1262)\n* feat(data/matrix): smul_val\n* Update src/data/matrix.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": [["add", "theorem", "smul_val", ["matrix"]]]}]}, {"timestamp": 1563966226, "sha": "ed579163", "message": "feat(category_theory): functions to convert is_lawful_functor and is_… (#1258)\n* feat(category_theory): functions to convert is_lawful_functor and is_lawful_monad to their corresponding category_theory concepts\n* Fix typo\n* feat(category): add mjoin_map_pure, mjoin_pure to the simpset (and use <$> notation)", "changes": [{"oldPath": "src/category/basic.lean", "newPath": "src/category/basic.lean", "changes": [["add", "theorem", "mjoin_map_map", []], ["add", "theorem", "mjoin_map_mjoin", []], ["add", "theorem", "mjoin_map_pure", []], ["add", "theorem", "mjoin_pure", []]]}, {"oldPath": "src/category_theory/monad/default.lean", "newPath": "src/category_theory/monad/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monad/types.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "def", "of_type_functor", ["category_theory"]], ["add", "theorem", "of_type_functor_map", ["category_theory"]], ["add", "theorem", "of_type_functor_obj", ["category_theory"]]]}]}, {"timestamp": 1563945288, "sha": "b0c52519", "message": "cleanup(category_theory/monoidal): use equiv on prod/punit intead of adding new constants (#1257)", "changes": [{"oldPath": "src/category_theory/monoidal/types.lean", "newPath": "src/category_theory/monoidal/types.lean", "changes": [["del", "def", "types_associator", ["category_theory", "monoidal"]], ["del", "def", "types_associator_inv", ["category_theory", "monoidal"]], ["del", "def", "types_braiding", ["category_theory", "monoidal"]], ["del", "def", "types_braiding_inv", ["category_theory", "monoidal"]], ["del", "def", "types_left_unitor", ["category_theory", "monoidal"]], ["del", "def", "types_left_unitor_inv", ["category_theory", "monoidal"]], ["del", "def", "types_right_unitor", ["category_theory", "monoidal"]], ["del", "def", "types_right_unitor_inv", ["category_theory", "monoidal"]]]}]}, {"timestamp": 1563880207, "sha": "4a5529a2", "message": "feat(data/array): add some simp attributes (#1255)", "changes": [{"oldPath": "src/data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": [["mod", "theorem", "read_foreach", ["array"]], ["mod", "theorem", "read_map₂", ["array"]]]}]}, {"timestamp": 1563824742, "sha": "a33315d5", "message": "feat(linear_algebra/dim): findim equivalence (#1217)\n* feat(linear_algebra/dim): findim equivalence\n* feat(linear_algebra/dim): two versions of dim_fun\n* feat(linear_algebra/dim): clean up", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_fin_fun", []], ["mod", "theorem", "dim_fun", []], ["add", "theorem", "dim_fun_eq_lift_mul", []]]}, {"oldPath": "src/linear_algebra/finsupp_vector_space.lean", "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["mod", "theorem", "eq_bot_iff_dim_eq_zero", []], ["add", "def", "equiv_of_dim_eq_dim", []], ["del", "theorem", "equiv_of_dim_eq_dim", []], ["add", "theorem", "equiv_of_dim_eq_lift_dim", []], ["add", "theorem", "fin_dim_vectorspace_equiv", []], ["mod", "theorem", "injective_of_surjective", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_prod", ["cardinal"]], ["add", "theorem", "sum_const_eq_lift_mul", ["cardinal"]]]}]}, {"timestamp": 1563812969, "sha": "3e77fec2", "message": "feat(linear_algebra/finite_dimensional): finite dimensional vector spaces (#1241)\n* feat(linear_algebra/finite_dimensional): finite dimensional vector spaces\n* rw `of_span_finite_eq_top` to `of_fg`\n* prove infinite.nat_embedding\n* generalize finite_of_linear_independent to noetherian modules\n* fix build\n* fix build (ring_theory/polynomial)", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "eq_of_linear_independent_of_span_subtype", []], ["add", "theorem", "le_of_span_le_span", []], ["add", "theorem", "span_le_span_iff", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_bot", []], ["add", "theorem", "dim_top", []]]}, {"oldPath": null, "newPath": "src/linear_algebra/finite_dimensional.lean", "changes": [["add", "theorem", "card_eq_findim", ["finite_dimensional"]], ["add", "theorem", "dim_lt_omega", ["finite_dimensional"]], ["add", "theorem", "eq_top_of_findim_eq", ["finite_dimensional"]], ["add", "theorem", "exists_is_basis_finite", ["finite_dimensional"]], ["add", "theorem", "findim_eq_dim", ["finite_dimensional"]], ["add", "theorem", "finite_dimensional_iff_dim_lt_omega", ["finite_dimensional"]], ["add", "theorem", "of_fg", ["finite_dimensional"]], ["add", "def", "finite_dimensional", []], ["add", "theorem", "injective_iff_surjective", ["linear_map"]], ["add", "theorem", "ker_eq_bot_iff_range_eq_top", ["linear_map"]], ["add", "theorem", "mul_eq_one_comm", ["linear_map"]], ["add", "theorem", "mul_eq_one_of_mul_eq_one", ["linear_map"]], ["add", "theorem", "surjective_of_injective", ["linear_map"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "finite_of_linear_independent", []], ["mod", "theorem", "well_founded_submodule_gt", []]]}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}]}, {"timestamp": 1563794431, "sha": "fd916604", "message": "feat(data/power_series): Add multivariate power series and prove basic API (#1244)\n* First start on power_series\n* Innocent changes\n* Almost a comm_semiring\n* Defined hom from mv_polynomial to mv_power_series; sorrys remain\n* Attempt that seem to go nowhere\n* Working on coeff_mul for polynomials\n* Small progress\n* Finish mv_polynomial.coeff_mul\n* Cleaner proof of mv_polynomial.coeff_mul\n* Fix build\n* WIP\n* Finish proof of mul_assoc\n* WIP\n* Golfing coeff_mul\n* WIP\n* Crazy wf is crazy\n* mv_power_series over local ring is local\n* WIP\n* Add empty line\n* wip\n* wip\n* WIP\n* WIP\n* WIP\n* Add header comments\n* WIP\n* WIP\n* Fix finsupp build\n* Fix build, hopefully\n* Fix build: ideals\n* More docs\n* Update src/data/power_series.lean\nFix typo.\n* Fix build -- bump instance search depth\n* Make changes according to some of the review comments\n* Use 'formal' in the names\n* Use 'protected' in more places, remove '@simp's\n* Make 'inv_eq_zero' an iff\n* Generalize to non-commutative scalars\n* Move file\n* Undo name change, back to 'power_series'\n* spelling mistake\n* spelling mistake", "changes": [{"oldPath": "src/analysis/calculus/mean_value.lean", "newPath": "src/analysis/calculus/mean_value.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "le_iff", ["finsupp"]], ["add", "def", "lt_wf", ["finsupp"]], ["add", "theorem", "single_eq_zero", ["finsupp"]], ["add", "theorem", "single_right_inj", ["finsupp"]], ["add", "theorem", "sum_id_lt_of_lt", ["finsupp"]], ["add", "theorem", "to_multiset_strict_mono", ["finsupp"]], ["add", "theorem", "unique_single_eq_iff", ["finsupp"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/power_series.lean", "changes": [["add", "def", "to_mv_power_series", ["mv_polynomial"]], ["add", "theorem", "to_mv_power_series_coeff", ["mv_polynomial"]], ["add", "def", "C", ["mv_power_series"]], ["add", "theorem", "C_add", ["mv_power_series"]], ["add", "theorem", "C_mul", ["mv_power_series"]], ["add", "theorem", "C_one", ["mv_power_series"]], ["add", "theorem", "C_zero", ["mv_power_series"]], ["add", "def", "X", ["mv_power_series"]], ["add", "def", "coeff", ["mv_power_series"]], ["add", "theorem", "coeff_C", ["mv_power_series"]], ["add", "theorem", "coeff_C_zero", ["mv_power_series"]], ["add", "theorem", "coeff_X''", ["mv_power_series"]], ["add", "theorem", "coeff_X'", ["mv_power_series"]], ["add", "theorem", "coeff_X", ["mv_power_series"]], ["add", "theorem", "coeff_add", ["mv_power_series"]], ["add", "theorem", "coeff_inv", ["mv_power_series"]], ["add", "theorem", "coeff_inv_aux", ["mv_power_series"]], ["add", "theorem", "coeff_inv_of_unit", ["mv_power_series"]], ["add", "theorem", "coeff_map", ["mv_power_series"]], ["add", "theorem", "coeff_monomial'", ["mv_power_series"]], ["add", "theorem", "coeff_monomial", ["mv_power_series"]], ["add", "theorem", "coeff_mul", ["mv_power_series"]], ["add", "theorem", "coeff_neg", ["mv_power_series"]], ["add", "theorem", "coeff_one", ["mv_power_series"]], ["add", "theorem", "coeff_one_zero", ["mv_power_series"]], ["add", "theorem", "coeff_trunc", ["mv_power_series"]], ["add", "theorem", "coeff_zero", ["mv_power_series"]], ["add", "theorem", "coeff_zero_inv", ["mv_power_series"]], ["add", "theorem", "coeff_zero_inv_of_unit", ["mv_power_series"]], ["add", "theorem", "ext", ["mv_power_series"]], ["add", "theorem", "ext_iff", ["mv_power_series"]], ["add", "theorem", "inv_eq_zero", ["mv_power_series"]], ["add", "def", "inv_of_unit", ["mv_power_series"]], ["add", "theorem", "inv_of_unit_eq'", ["mv_power_series"]], ["add", "theorem", "inv_of_unit_eq", ["mv_power_series"]], ["add", "def", "is_local_ring", ["mv_power_series"]], ["add", "theorem", "is_unit_coeff_zero", ["mv_power_series"]], ["add", "def", "map", ["mv_power_series"]], ["add", "theorem", "map_add", ["mv_power_series"]], ["add", "theorem", "map_comp", ["mv_power_series"]], ["add", "theorem", "map_id", ["mv_power_series"]], ["add", "theorem", "map_mul", ["mv_power_series"]], ["add", "theorem", "map_one", ["mv_power_series"]], ["add", "theorem", "map_zero", ["mv_power_series"]], ["add", "def", "monomial", ["mv_power_series"]], ["add", "theorem", "monomial_add", ["mv_power_series"]], ["add", "theorem", "monomial_zero", ["mv_power_series"]], ["add", "theorem", "mul_inv_of_unit", ["mv_power_series"]], ["add", "def", "trunc", ["mv_power_series"]], ["add", "theorem", "trunc_C", ["mv_power_series"]], ["add", "theorem", "trunc_add", ["mv_power_series"]], ["add", "theorem", "trunc_one", ["mv_power_series"]], ["add", "theorem", "trunc_zero", ["mv_power_series"]], ["add", "def", "mv_power_series", []], ["add", "def", "to_power_series", ["polynomial"]], ["add", "theorem", "to_power_series_coeff", ["polynomial"]], ["add", "def", "C", ["power_series"]], ["add", "theorem", "C_add", ["power_series"]], ["add", "theorem", "C_mul", ["power_series"]], ["add", "theorem", "C_one", ["power_series"]], ["add", "theorem", "C_zero", ["power_series"]], ["add", "def", "X", ["power_series"]], ["add", "def", "coeff", ["power_series"]], ["add", "theorem", "coeff_C", ["power_series"]], ["add", "theorem", "coeff_C_zero", ["power_series"]], ["add", "theorem", "coeff_X'", ["power_series"]], ["add", "theorem", "coeff_X", ["power_series"]], ["add", "theorem", "coeff_add", ["power_series"]], ["add", "theorem", "coeff_inv", ["power_series"]], ["add", "theorem", "coeff_inv_aux", ["power_series"]], ["add", "theorem", "coeff_inv_of_unit", ["power_series"]], ["add", "theorem", "coeff_map", ["power_series"]], ["add", "theorem", "coeff_mk", ["power_series"]], ["add", "theorem", "coeff_monomial'", ["power_series"]], ["add", "theorem", "coeff_monomial", ["power_series"]], ["add", "theorem", "coeff_mul", ["power_series"]], ["add", "theorem", "coeff_one", ["power_series"]], ["add", "theorem", "coeff_one_zero", ["power_series"]], ["add", "theorem", "coeff_trunc", ["power_series"]], ["add", "theorem", "coeff_zero", ["power_series"]], ["add", "theorem", "coeff_zero_inv", ["power_series"]], ["add", "theorem", "coeff_zero_inv_of_unit", ["power_series"]], ["add", "theorem", "ext", ["power_series"]], ["add", "theorem", "ext_iff", ["power_series"]], ["add", "theorem", "inv_eq_zero", ["power_series"]], ["add", "def", "inv_of_unit", ["power_series"]], ["add", "theorem", "inv_of_unit_eq'", ["power_series"]], ["add", "theorem", "inv_of_unit_eq", ["power_series"]], ["add", "theorem", "is_local_ring", ["power_series"]], ["add", "def", "map", ["power_series"]], ["add", "theorem", "map_add", ["power_series"]], ["add", "theorem", "map_comp", ["power_series"]], ["add", "theorem", "map_id", ["power_series"]], ["add", "theorem", "map_mul", ["power_series"]], ["add", "theorem", "map_one", ["power_series"]], ["add", "theorem", "map_zero", ["power_series"]], ["add", "def", "mk", ["power_series"]], ["add", "def", "monomial", ["power_series"]], ["add", "theorem", "monomial_add", ["power_series"]], ["add", "theorem", "monomial_eq_mk", ["power_series"]], ["add", "theorem", "monomial_zero", ["power_series"]], ["add", "theorem", "mul_inv_of_unit", ["power_series"]], ["add", "def", "trunc", ["power_series"]], ["add", "theorem", "trunc_C", ["power_series"]], ["add", "theorem", "trunc_add", ["power_series"]], ["add", "theorem", "trunc_one", ["power_series"]], ["add", "theorem", "trunc_zero", ["power_series"]], ["add", "def", "power_series", []]]}]}, {"timestamp": 1563782424, "sha": "7c09ed5e", "message": "feat(category_theory/*): define `Cat` and a fully faithful functor `Mon ⥤ Cat` (#1235)\n* feat(category_theory/*): define `Cat` and a fully faithful functor `Mon ⥤ Cat`\n* Drop 2 commas\n* Drop `functor.id_comp` etc, add `Cat.str` instance, adjust module-level comments\n* Make `α` and `β` arguments of `map_hom_equiv` explicit\nThis way `e α β f` is automatically interpreted as `(e α β).to_fun f`.", "changes": [{"oldPath": null, "newPath": "src/category_theory/Cat.lean", "changes": [["add", "def", "objects", ["category_theory", "Cat"]], ["add", "def", "of", ["category_theory", "Cat"]], ["add", "def", "Cat", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/single_obj.lean", "changes": [["add", "def", "to_Cat", ["Mon"]], ["add", "def", "map_hom", ["category_theory", "single_obj"]], ["add", "theorem", "map_hom_comp", ["category_theory", "single_obj"]], ["add", "def", "map_hom_equiv", ["category_theory", "single_obj"]], ["add", "theorem", "map_hom_id", ["category_theory", "single_obj"]], ["add", "def", "to_End", ["category_theory", "single_obj"]], ["add", "theorem", "to_End_def", ["category_theory", "single_obj"]], ["add", "def", "to_End_equiv", ["category_theory", "single_obj"]], ["add", "def", "single_obj", ["category_theory"]]]}]}, {"timestamp": 1563786792, "sha": "b5a641e8", "message": "chore(data/polynomial): clean up commented code (#1251)\nCommented code that wasn't removed after a refactor.", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1563759342, "sha": "f24dc98b", "message": "feat(logic/unique): forall_iff and exists_iff (#1249)\nMaybe these should be `@[simp]`. My use case in `fin 1` and it's slightly annoying to have `default (fin 1)` everwhere instead of `0`, but maybe that should also be a `@[simp]` lemma.", "changes": [{"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "exists_iff", ["unique"]], ["add", "theorem", "forall_iff", ["unique"]]]}]}, {"timestamp": 1563758005, "sha": "a8c29236", "message": "refactor(ring_theory/noetherian): change order of instance arguments (#1250)\nZulip discussion https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Type.20class.20failure\nThis change makes some type class searches work better.", "changes": [{"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1563648628, "sha": "93419b38", "message": "chore(data/equiv/algebra): add `ring.to_mul/add_equiv`, DRY (#1247)", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "def", "to_add_equiv", ["ring_equiv"]], ["add", "def", "to_mul_equiv", ["ring_equiv"]]]}]}, {"timestamp": 1563644026, "sha": "d371da68", "message": "fix(group_theory/subgroup): fix some typos introduced in 66a86ffe0 (#1246)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1563605377, "sha": "6e3516de", "message": "feat(category_theory/monad): monadic adjunctions (#1176)\n* feat(category_theory/limits): equivalences create limits\n* equivalence lemma\n* feat(category_theory/monad): monadic adjunctions\n* move file\n* fix\n* add @[simp]\n* use right_adjoint_preserves_limits\n* fix\n* fix\n* undo weird changes in topology files\n* formatting\n* do colimits too\n* missing proofs\n* convert monad to a typeclass decorating a functor\n* changing name\n* cleaning up\n* oops\n* minor", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "def", "left_adjoint", ["category_theory"]], ["add", "def", "right_adjoint", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/adjunction/fully_faithful.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monad/adjunction.lean", "changes": [["add", "theorem", "monad_η_app", ["category_theory", "adjunction"]], ["add", "theorem", "monad_μ_app", ["category_theory", "adjunction"]], ["add", "def", "comparison", ["category_theory", "monad"]], ["add", "def", "comparison_forget", ["category_theory", "monad"]], ["add", "theorem", "comparison_map_f", ["category_theory", "monad"]], ["add", "theorem", "comparison_obj_a", ["category_theory", "monad"]], ["add", "theorem", "comparison_ess_surj_aux", ["category_theory", "reflective"]]]}, {"oldPath": null, "newPath": "src/category_theory/monad/algebra.lean", "changes": [["add", "def", "adj", ["category_theory", "monad"]], ["add", "theorem", "comp_f", ["category_theory", "monad", "algebra"]], ["add", "def", "comp", ["category_theory", "monad", "algebra", "hom"]], ["add", "theorem", "comp_f", ["category_theory", "monad", "algebra", "hom"]], ["add", "theorem", "ext", ["category_theory", "monad", "algebra", "hom"]], ["add", "def", "id", ["category_theory", "monad", "algebra", "hom"]], ["add", "theorem", "id_f", ["category_theory", "monad", "algebra", "hom"]], ["add", "structure", "hom", ["category_theory", "monad", "algebra"]], ["add", "theorem", "id_f", ["category_theory", "monad", "algebra"]], ["add", "structure", "algebra", ["category_theory", "monad"]], ["add", "def", "forget", ["category_theory", "monad"]], ["add", "theorem", "forget_map", ["category_theory", "monad"]], ["add", "def", "free", ["category_theory", "monad"]], ["add", "theorem", "free_map_f", ["category_theory", "monad"]], ["add", "theorem", "free_obj_a", ["category_theory", "monad"]]]}, {"oldPath": null, "newPath": "src/category_theory/monad/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monad/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/monad/limits.lean", "changes": [["add", "def", "has_limits_of_reflective", ["category_theory"]], ["add", "def", "c", ["category_theory", "monad", "forget_creates_limits"]], ["add", "theorem", "c_π", ["category_theory", "monad", "forget_creates_limits"]], ["add", "def", "cone_point", ["category_theory", "monad", "forget_creates_limits"]], ["add", "theorem", "cone_point_a", ["category_theory", "monad", "forget_creates_limits"]], ["add", "def", "γ", ["category_theory", "monad", "forget_creates_limits"]], ["add", "theorem", "γ_app", ["category_theory", "monad", "forget_creates_limits"]], ["add", "def", "forget_creates_limits", ["category_theory", "monad"]], ["add", "def", "monadic_creates_limits", ["category_theory"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "def", "is_iso_app_of_is_iso", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/topology/algebra/TopCommRing/basic.lean", "newPath": "src/topology/algebra/TopCommRing/basic.lean", "changes": []}]}, {"timestamp": 1563556152, "sha": "9505e5b3", "message": "fix(data/matrix): use pi.module for the module structure (#1242)\n* fix(data/matrix): use pi.module for the module structure\n* Update matrix.lean\n* Update matrix.lean\n* Update matrix.lean", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": []}]}, {"timestamp": 1563547167, "sha": "07ae80f4", "message": "refactor(algebra/*): delete `free_monoid` from `algebra/free`, restore some functions in `algebra/group/with_one` (#1227)\n* refactor(algebra/*): Remove `free_monoid` from `algebra/free`, fixes #929\n* use `namespace with_one`\n* Add `with_one.coe_is_mul_hom`\n* Restore `with_one.lift` etc from `algebra/free` `free_monoid.lift` etc\n* Define `with_one.map` based on the deleted `free_monoid.map`\nDefine using `option.map`, and prove equivalence to `λ f, lift $ coe ∘ f`.", "changes": [{"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": [["del", "def", "lift", ["semigroup", "free_monoid"]], ["del", "theorem", "lift_mul", ["semigroup", "free_monoid"]], ["del", "theorem", "lift_of", ["semigroup", "free_monoid"]], ["del", "theorem", "lift_one", ["semigroup", "free_monoid"]], ["del", "theorem", "lift_unique", ["semigroup", "free_monoid"]], ["del", "def", "map", ["semigroup", "free_monoid"]], ["del", "theorem", "map_mul", ["semigroup", "free_monoid"]], ["del", "theorem", "map_of", ["semigroup", "free_monoid"]], ["del", "def", "of", ["semigroup", "free_monoid"]], ["del", "theorem", "of_mul", ["semigroup", "free_monoid"]], ["del", "def", "free_monoid", ["semigroup"]]]}, {"oldPath": "src/algebra/group/with_one.lean", "newPath": "src/algebra/group/with_one.lean", "changes": [["mod", "theorem", "coe_inj", ["with_one"]], ["mod", "theorem", "coe_ne_one", ["with_one"]], ["add", "def", "lift", ["with_one"]], ["add", "theorem", "lift_coe", ["with_one"]], ["add", "theorem", "lift_one", ["with_one"]], ["add", "theorem", "lift_unique", ["with_one"]], ["add", "def", "map", ["with_one"]], ["add", "theorem", "map_eq", ["with_one"]], ["mod", "theorem", "mul_coe", ["with_one"]], ["mod", "theorem", "ne_one_iff_exists", ["with_one"]], ["mod", "theorem", "one_ne_coe", ["with_one"]]]}]}, {"timestamp": 1563545342, "sha": "74754acb", "message": "feat(analysis/calculus/times_cont_diff): multiple differentiability (#1226)\n* feat(analysis/calculus/times_cont_diff): multiple differentiability\n* style\n* style\n* style and documentation\n* better wording", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/times_cont_diff.lean", "changes": [["add", "theorem", "times_cont_diff", ["is_bounded_bilinear_map"]], ["add", "theorem", "times_cont_diff", ["is_bounded_linear_map"]], ["add", "def", "normed_group_rec", ["iterated_continuous_linear_map"]], ["add", "def", "normed_space_rec", ["iterated_continuous_linear_map"]], ["add", "def", "iterated_continuous_linear_map", []], ["add", "def", "iterated_fderiv", []], ["add", "theorem", "iterated_fderiv_succ", []], ["add", "def", "iterated_fderiv_within", []], ["add", "theorem", "iterated_fderiv_within_congr", []], ["add", "theorem", "iterated_fderiv_within_inter", []], ["add", "theorem", "iterated_fderiv_within_inter_open", []], ["add", "theorem", "iterated_fderiv_within_succ", []], ["add", "theorem", "iterated_fderiv_within_univ", []], ["add", "theorem", "iterated_fderiv_within_zero", []], ["add", "theorem", "iterated_fderiv_zero", []], ["add", "theorem", "comp", ["times_cont_diff"]], ["add", "theorem", "comp_is_bounded_linear", ["times_cont_diff"]], ["add", "theorem", "continuous", ["times_cont_diff"]], ["add", "theorem", "continuous_fderiv", ["times_cont_diff"]], ["add", "theorem", "continuous_fderiv_apply", ["times_cont_diff"]], ["add", "theorem", "of_le", ["times_cont_diff"]], ["add", "theorem", "of_succ", ["times_cont_diff"]], ["add", "theorem", "prod", ["times_cont_diff"]], ["add", "theorem", "times_cont_diff_fderiv_apply", ["times_cont_diff"]], ["add", "theorem", "times_cont_diff_on", ["times_cont_diff"]], ["add", "def", "times_cont_diff", []], ["add", "theorem", "times_cont_diff_const", []], ["add", "theorem", "times_cont_diff_fst", []], ["add", "theorem", "times_cont_diff_id", []], ["add", "theorem", "times_cont_diff_iff_times_cont_diff_rec", []], ["add", "theorem", "comp", ["times_cont_diff_on"]], ["add", "theorem", "comp_is_bounded_linear", ["times_cont_diff_on"]], ["add", "theorem", "congr", ["times_cont_diff_on"]], ["add", "theorem", "congr_mono'", ["times_cont_diff_on"]], ["add", "theorem", "congr_mono", ["times_cont_diff_on"]], ["add", "theorem", "continuous_on", ["times_cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_within", ["times_cont_diff_on"]], ["add", "theorem", "continuous_on_fderiv_within_apply", ["times_cont_diff_on"]], ["add", "theorem", "mono", ["times_cont_diff_on"]], ["add", "theorem", "of_le", ["times_cont_diff_on"]], ["add", "theorem", "of_succ", ["times_cont_diff_on"]], ["add", "theorem", "prod", ["times_cont_diff_on"]], ["add", "def", "times_cont_diff_on", []], ["add", "theorem", "times_cont_diff_on_fderiv_within", []], ["add", "theorem", "times_cont_diff_on_fderiv_within_apply", []], ["add", "theorem", "times_cont_diff_on_fderiv_within_nat", []], ["add", "theorem", "times_cont_diff_on_iff_times_cont_diff_on_rec", []], ["add", "theorem", "times_cont_diff_on_of_locally_times_cont_diff_on", []], ["add", "theorem", "continuous_on_iterated_fderiv_within", ["times_cont_diff_on_rec"]], ["add", "theorem", "differentiable_on", ["times_cont_diff_on_rec"]], ["add", "theorem", "of_succ", ["times_cont_diff_on_rec"]], ["add", "def", "times_cont_diff_on_rec", []], ["add", "theorem", "times_cont_diff_on_rec_succ", []], ["add", "theorem", "times_cont_diff_on_rec_univ", []], ["add", "theorem", "times_cont_diff_on_rec_zero", []], ["add", "theorem", "times_cont_diff_on_succ", []], ["add", "theorem", "times_cont_diff_on_top", []], ["add", "theorem", "times_cont_diff_on_univ", []], ["add", "theorem", "times_cont_diff_on_zero", []], ["add", "theorem", "continuous", ["times_cont_diff_rec"]], ["add", "theorem", "differentiable", ["times_cont_diff_rec"]], ["add", "theorem", "of_succ", ["times_cont_diff_rec"]], ["add", "def", "times_cont_diff_rec", []], ["add", "theorem", "times_cont_diff_rec_succ", []], ["add", "theorem", "times_cont_diff_rec_zero", []], ["add", "theorem", "times_cont_diff_snd", []], ["add", "theorem", "times_cont_diff_succ", []], ["add", "theorem", "times_cont_diff_top", []], ["add", "theorem", "times_cont_diff_zero", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bounded_bilinear_map_apply", []], ["add", "theorem", "fst", ["is_bounded_linear_map"]], ["add", "theorem", "snd", ["is_bounded_linear_map"]]]}]}, {"timestamp": 1563462954, "sha": "8b102eb2", "message": "feat(topology/algebra/group): define filter pointwise addition (#1215)\n* Create .DS_Store\n* Revert \"Create .DS_Store\"\nThis reverts commit 5612886d493aef59205eddc5a34a75e6e5ba22c1.\n* feat (topology/algebral/uniform_group) : prove dense_embedding.extend extends continuous linear maps linearly\n* Update src/algebra/pointwise.lean\nCo-Authored-By: sgouezel \n* Fix styles\n* Add homomorphism instances; fix conflicting names\n* Update group.lean\n* Update uniform_group.lean\n* Add header; prove every topological group is regular\n* Fix headers and errors\n* Update pi_instances.lean", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "image_pointwise_mul", ["set"]], ["del", "theorem", "mul_subset_mul", ["set"]], ["add", "theorem", "pointwise_mul_eq_Union_mul_left", ["set"]], ["add", "theorem", "pointwise_mul_eq_Union_mul_right", ["set"]], ["add", "theorem", "pointwise_mul_ne_empty", ["set"]], ["add", "theorem", "preimage_pointwise_mul_preimage_subset", ["set"]], ["add", "theorem", "univ_pointwise_mul_univ", ["set"]]]}, {"oldPath": null, "newPath": "src/order/filter/pointwise.lean", "changes": [["add", "theorem", "comap_mul_comap_le", ["filter"]], ["add", "theorem", "map_pointwise_mul", ["filter"]], ["add", "theorem", "map_pointwise_one", ["filter"]], ["add", "theorem", "mem_pointwise_mul", ["filter"]], ["add", "theorem", "mem_pointwise_one", ["filter"]], ["add", "theorem", "mul_mem_pointwise_mul", ["filter"]], ["add", "def", "pointwise_add", ["filter"]], ["add", "def", "pointwise_add_map_is_add_monoid_hom", ["filter"]], ["add", "def", "pointwise_mul", ["filter"]], ["add", "theorem", "pointwise_mul_assoc", ["filter"]], ["add", "theorem", "pointwise_mul_le_mul", ["filter"]], ["add", "def", "pointwise_mul_map_is_monoid_hom", ["filter"]], ["add", "def", "pointwise_mul_monoid", ["filter"]], ["add", "theorem", "pointwise_mul_ne_bot", ["filter"]], ["add", "theorem", "pointwise_mul_one", ["filter"]], ["add", "def", "pointwise_one", ["filter"]], ["add", "theorem", "pointwise_one_mul", ["filter"]], ["add", "theorem", "tendsto_mul_mul", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "is_closed_map_mul_left", []], ["add", "theorem", "is_closed_map_mul_right", []], ["add", "theorem", "is_open_pointwise_mul_left", []], ["add", "theorem", "is_open_pointwise_mul_right", []], ["add", "def", "nhds_is_mul_hom", []], ["add", "theorem", "nhds_pointwise_mul", []], ["add", "theorem", "regular_space", ["topological_group"]], ["add", "theorem", "t1_space", ["topological_group"]], ["add", "theorem", "t2_space", ["topological_group"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1563431223, "sha": "e704f940", "message": "fix(data/{nat,int}/parity): fix definition of 'even' (#1240)", "changes": [{"oldPath": "src/data/int/parity.lean", "newPath": "src/data/int/parity.lean", "changes": [["mod", "def", "even", ["int"]]]}, {"oldPath": "src/data/nat/parity.lean", "newPath": "src/data/nat/parity.lean", "changes": [["mod", "def", "even", ["nat"]]]}]}, {"timestamp": 1563386226, "sha": "86e72876", "message": "fix(data/zmod/basic) remove unused argument from instance (#1239)", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}]}, {"timestamp": 1563357361, "sha": "d6fd044c", "message": "feat(*): add nat.antidiagonal and use it for polynomial.mul_coeff (#1237)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "def", "antidiagonal", ["finset", "nat"]], ["add", "theorem", "antidiagonal_zero", ["finset", "nat"]], ["add", "theorem", "card_antidiagonal", ["finset", "nat"]], ["add", "theorem", "mem_antidiagonal", ["finset", "nat"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "def", "antidiagonal", ["list", "nat"]], ["add", "theorem", "antidiagonal_zero", ["list", "nat"]], ["add", "theorem", "length_antidiagonal", ["list", "nat"]], ["add", "theorem", "mem_antidiagonal", ["list", "nat"]], ["add", "theorem", "nodup_antidiagonal", ["list", "nat"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "def", "antidiagonal", ["multiset", "nat"]], ["add", "theorem", "antidiagonal_zero", ["multiset", "nat"]], ["add", "theorem", "card_antidiagonal", ["multiset", "nat"]], ["add", "theorem", "mem_antidiagonal", ["multiset", "nat"]], ["add", "theorem", "nodup_antidiagonal", ["multiset", "nat"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "coeff_mul", ["polynomial"]], ["del", "theorem", "coeff_mul_left", ["polynomial"]], ["del", "theorem", "coeff_mul_right", ["polynomial"]]]}]}, {"timestamp": 1563314441, "sha": "8785bd0f", "message": "refactor(data/multiset): rename diagonal to antidiagonal (#1236)\n* refactor(data/multiset): rename diagonal to antidiagonal\n* Add docstrings\n* fix build\n* Fix build", "changes": []}, {"timestamp": 1563310909, "sha": "e186fbb7", "message": "feat(data/mv_polynomial): coeff_mul (#1216)\n* feat(data/mv_polynomial): coeff_mul\n* refactor(data/multiset): rename diagonal to antidiagonal\n* Rename diagonal to antidiagonal\n* Define antidiagonal as to_finsupp instead of to_finset\n* Add docstrings\n* fix build\n* Fix build", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "def", "antidiagonal", ["finsupp"]], ["add", "theorem", "antidiagonal_zero", ["finsupp"]], ["add", "theorem", "mem_antidiagonal_support", ["finsupp"]], ["add", "theorem", "swap_mem_antidiagonal_support", ["finsupp"]], ["add", "theorem", "to_multiset_to_finsupp", ["finsupp"]], ["add", "def", "to_finsupp", ["multiset"]], ["add", "theorem", "to_finsupp_add", ["multiset"]], ["add", "theorem", "to_finsupp_apply", ["multiset"]], ["add", "theorem", "to_finsupp_singleton", ["multiset"]], ["add", "theorem", "to_finsupp_support", ["multiset"]], ["add", "theorem", "to_finsupp_to_multiset", ["multiset"]], ["add", "theorem", "to_finsupp_zero", ["multiset"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "def", "antidiagonal", ["multiset"]], ["add", "theorem", "antidiagonal_coe'", ["multiset"]], ["add", "theorem", "antidiagonal_coe", ["multiset"]], ["add", "theorem", "antidiagonal_cons", ["multiset"]], ["add", "theorem", "antidiagonal_map_fst", ["multiset"]], ["add", "theorem", "antidiagonal_map_snd", ["multiset"]], ["add", "theorem", "antidiagonal_zero", ["multiset"]], ["add", "theorem", "card_antidiagonal", ["multiset"]], ["del", "theorem", "card_diagonal", ["multiset"]], ["del", "def", "diagonal", ["multiset"]], ["del", "theorem", "diagonal_coe'", ["multiset"]], ["del", "theorem", "diagonal_coe", ["multiset"]], ["del", "theorem", "diagonal_cons", ["multiset"]], ["del", "theorem", "diagonal_map_fst", ["multiset"]], ["del", "theorem", "diagonal_map_snd", ["multiset"]], ["del", "theorem", "diagonal_zero", ["multiset"]], ["add", "theorem", "mem_antidiagonal", ["multiset"]], ["del", "theorem", "mem_diagonal", ["multiset"]], ["mod", "theorem", "revzip_powerset_aux'", ["multiset"]], ["mod", "theorem", "revzip_powerset_aux", ["multiset"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "coeff_X'", ["mv_polynomial"]], ["mod", "theorem", "coeff_X", ["mv_polynomial"]], ["add", "theorem", "coeff_X_pow", ["mv_polynomial"]], ["add", "theorem", "coeff_mul", ["mv_polynomial"]], ["mod", "theorem", "coeff_mul_X'", ["mv_polynomial"]], ["mod", "theorem", "coeff_mul_X", ["mv_polynomial"]]]}]}, {"timestamp": 1563226536, "sha": "92ac50cb", "message": "chore(data/finset): rename le_min_of_mem to min_le_of_mem (#1231)\n* chore(data/finset): rename le_min_of_mem to min_le_of_mem\n* fix build", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["del", "theorem", "le_min_of_mem", ["finset"]], ["mod", "theorem", "min'_le", ["finset"]], ["add", "theorem", "min_le_of_mem", ["finset"]]]}]}, {"timestamp": 1563202132, "sha": "7217f134", "message": "feat(data/option/basic): bind_eq_none (#1232)\n* feat(data/option/basis): bind_eq_none\n* delete extra line", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "bind_eq_none", ["option"]]]}]}, {"timestamp": 1563196175, "sha": "46074fc1", "message": "chore(data/fintype): change `unique.fintype` to priority 0 (#1230)", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "def", "fintype", ["unique"]]]}]}, {"timestamp": 1563151490, "sha": "0e9ac849", "message": "feat(tactic/rcases): add obtain tactic (#1218)\n* feat(tactic/rcases): add obtain tactic\n* style(tactic/rcases): line break\n* doc(docs/tactics): document obtain\n* feat(tactic/obtain): support := syntax", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1563102854, "sha": "dcf01308", "message": "feat(data/pequiv): partial equivalences (#1206)\n* feat(data/pequiv): partial equivalences\n* Update src/data/pequiv.lean\nCo-Authored-By: Floris van Doorn \n* use notation", "changes": [{"oldPath": null, "newPath": "src/data/pequiv.lean", "changes": [["add", "def", "to_pequiv", ["equiv"]], ["add", "theorem", "to_pequiv_refl", ["equiv"]], ["add", "theorem", "to_pequiv_symm", ["equiv"]], ["add", "theorem", "to_pequiv_trans", ["equiv"]], ["add", "theorem", "bot_apply", ["pequiv"]], ["add", "theorem", "bot_trans", ["pequiv"]], ["add", "theorem", "coe_mk_apply", ["pequiv"]], ["add", "theorem", "eq_some_iff", ["pequiv"]], ["add", "theorem", "ext", ["pequiv"]], ["add", "theorem", "ext_iff", ["pequiv"]], ["add", "theorem", "injective_of_forall_is_some", ["pequiv"]], ["add", "theorem", "injective_of_forall_ne_is_some", ["pequiv"]], ["add", "theorem", "is_some_symm_get", ["pequiv"]], ["add", "theorem", "le_def", ["pequiv"]], ["add", "theorem", "mem_iff_mem", ["pequiv"]], ["add", "theorem", "mem_of_set_iff", ["pequiv"]], ["add", "theorem", "mem_of_set_self_iff", ["pequiv"]], ["add", "theorem", "mem_single", ["pequiv"]], ["add", "theorem", "mem_single_iff", ["pequiv"]], ["add", "theorem", "mem_trans", ["pequiv"]], ["add", "def", "of_set", ["pequiv"]], ["add", "theorem", "of_set_eq_refl", ["pequiv"]], ["add", "theorem", "of_set_eq_some_iff", ["pequiv"]], ["add", "theorem", "of_set_eq_some_self_iff", ["pequiv"]], ["add", "theorem", "of_set_symm", ["pequiv"]], ["add", "theorem", "of_set_univ", ["pequiv"]], ["add", "theorem", "refl_apply", ["pequiv"]], ["add", "theorem", "refl_trans", ["pequiv"]], ["add", "theorem", "refl_trans_apply", ["pequiv"]], ["add", "def", "single", ["pequiv"]], ["add", "theorem", "single_apply", ["pequiv"]], ["add", "theorem", "single_apply_of_ne", ["pequiv"]], ["add", "theorem", "single_subsingleton_eq_refl", ["pequiv"]], ["add", "theorem", "single_trans_of_eq_none", ["pequiv"]], ["add", "theorem", "single_trans_of_mem", ["pequiv"]], ["add", "theorem", "single_trans_single", ["pequiv"]], ["add", "theorem", "single_trans_single_of_ne", ["pequiv"]], ["add", "theorem", "symm_bot", ["pequiv"]], ["add", "theorem", "symm_injective", ["pequiv"]], ["add", "theorem", "symm_refl", ["pequiv"]], ["add", "theorem", "symm_refl_apply", ["pequiv"]], ["add", "theorem", "symm_single", ["pequiv"]], ["add", "theorem", "symm_symm", ["pequiv"]], ["add", "theorem", "symm_symm_apply", ["pequiv"]], ["add", "theorem", "symm_trans", ["pequiv"]], ["add", "theorem", "symm_trans_rev", ["pequiv"]], ["add", "theorem", "trans_assoc", ["pequiv"]], ["add", "theorem", "trans_bot", ["pequiv"]], ["add", "theorem", "trans_eq_none", ["pequiv"]], ["add", "theorem", "trans_eq_some", ["pequiv"]], ["add", "theorem", "trans_refl", ["pequiv"]], ["add", "theorem", "trans_refl_apply", ["pequiv"]], ["add", "theorem", "trans_single_of_eq_none", ["pequiv"]], ["add", "theorem", "trans_single_of_mem", ["pequiv"]], ["add", "theorem", "trans_symm", ["pequiv"]], ["add", "theorem", "trans_symm_eq_iff_forall_is_some", ["pequiv"]], ["add", "structure", "pequiv", []]]}]}, {"timestamp": 1563081905, "sha": "03e6d0ea", "message": "chore(algebra/group/hom): add `is_monoid_hom.of_mul`, use it (#1225)\n* Let `to_additive` generate `is_add_monoid_hom.map_add`\n* Converting `is_mul_hom` into `is_monoid_hom` doesn't require `α` to be a group\n* Simplify the proof of `is_add_group_hom.map_sub`\nAvoid `simp` (without `only`)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["del", "theorem", "map_add", ["is_add_monoid_hom"]], ["mod", "theorem", "map_one", ["is_group_hom"]], ["del", "theorem", "to_is_monoid_hom", ["is_group_hom"]], ["add", "theorem", "of_mul", ["is_monoid_hom"]]]}]}, {"timestamp": 1563051294, "sha": "51f26459", "message": "feat(pformat): provide `trace!` and `fail!` and allow tactic values (#1222)", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1563041826, "sha": "a1cfc5cc", "message": "feat(logic,data/equiv,prod): various lemmas (#1224)\n* feat(logic,data/equiv,prod): various lemmas\n* Update basic.lean\n* Update basic.lean", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "Pi_curry", ["equiv"]]]}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "map_fst'", ["prod"]], ["add", "theorem", "map_snd'", ["prod"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "exists_imp_exists'", []], ["mod", "theorem", "exists_swap", []], ["mod", "theorem", "forall_swap", []]]}]}, {"timestamp": 1563035107, "sha": "0eea0d9f", "message": "feat(data/{nat,int}/parity): the 'even' predicate on nat and int (#1219)\n* feat(data/{nat,int}/parity): the 'even' predicate on nat and int\n* fix(data/{nat,int}/parity): shorten proof\n* delete extra comma", "changes": [{"oldPath": null, "newPath": "src/data/int/parity.lean", "changes": [["add", "def", "even", ["int"]], ["add", "theorem", "even_add", ["int"]], ["add", "theorem", "even_bit0", ["int"]], ["add", "theorem", "even_coe_nat", ["int"]], ["add", "theorem", "even_iff", ["int"]], ["add", "theorem", "even_mul", ["int"]], ["add", "theorem", "even_pow", ["int"]], ["add", "theorem", "even_sub", ["int"]], ["add", "theorem", "even_zero", ["int"]], ["add", "theorem", "mod_two_ne_one", ["int"]], ["add", "theorem", "mod_two_ne_zero", ["int"]], ["add", "theorem", "not_even_bit1", ["int"]], ["add", "theorem", "not_even_one", ["int"]]]}, {"oldPath": null, "newPath": "src/data/nat/parity.lean", "changes": [["add", "def", "even", ["nat"]], ["add", "theorem", "even_add", ["nat"]], ["add", "theorem", "even_bit0", ["nat"]], ["add", "theorem", "even_iff", ["nat"]], ["add", "theorem", "even_mul", ["nat"]], ["add", "theorem", "even_pow", ["nat"]], ["add", "theorem", "even_sub", ["nat"]], ["add", "theorem", "even_succ", ["nat"]], ["add", "theorem", "even_zero", ["nat"]], ["add", "theorem", "mod_two_ne_one", ["nat"]], ["add", "theorem", "mod_two_ne_zero", ["nat"]], ["add", "theorem", "not_even_bit1", ["nat"]], ["add", "theorem", "not_even_one", ["nat"]]]}]}, {"timestamp": 1562982418, "sha": "6db58292", "message": "feat(data/finmap): extend the API (#1223)", "changes": [{"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["add", "def", "all", ["finmap"]], ["add", "def", "any", ["finmap"]], ["add", "theorem", "symm", ["finmap", "disjoint"]], ["add", "theorem", "symm_iff", ["finmap", "disjoint"]], ["add", "def", "disjoint", ["finmap"]], ["add", "theorem", "disjoint_empty", ["finmap"]], ["add", "theorem", "disjoint_union_left", ["finmap"]], ["add", "theorem", "disjoint_union_right", ["finmap"]], ["mod", "theorem", "empty_to_finmap", ["finmap"]], ["add", "theorem", "empty_union", ["finmap"]], ["add", "theorem", "erase_erase", ["finmap"]], ["add", "theorem", "erase_union_singleton", ["finmap"]], ["add", "theorem", "ext_lookup", ["finmap"]], ["add", "theorem", "insert_insert", ["finmap"]], ["add", "theorem", "insert_insert_of_ne", ["finmap"]], ["add", "theorem", "insert_singleton_eq", ["finmap"]], ["add", "theorem", "insert_union", ["finmap"]], ["add", "theorem", "lookup_insert_of_ne", ["finmap"]], ["add", "theorem", "lookup_list_to_finmap", ["finmap"]], ["add", "theorem", "lookup_singleton_eq", ["finmap"]], ["add", "theorem", "lookup_union_left_of_not_in", ["finmap"]], ["add", "theorem", "mem_iff", ["finmap"]], ["add", "theorem", "mem_list_to_finmap", ["finmap"]], ["add", "theorem", "mem_of_lookup_eq_some", ["finmap"]], ["add", "theorem", "mem_singleton", ["finmap"]], ["add", "theorem", "not_mem_erase_self", ["finmap"]], ["add", "def", "sdiff", ["finmap"]], ["add", "theorem", "to_finmap_cons", ["finmap"]], ["add", "theorem", "to_finmap_nil", ["finmap"]], ["add", "theorem", "union_assoc", ["finmap"]], ["add", "theorem", "union_cancel", ["finmap"]], ["add", "theorem", "union_comm_of_disjoint", ["finmap"]], ["add", "theorem", "union_empty", ["finmap"]], ["add", "def", "to_finmap", ["list"]]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["add", "def", "disjoint", ["alist"]], ["add", "theorem", "entries_to_alist", ["alist"]], ["add", "theorem", "erase_erase", ["alist"]], ["add", "theorem", "insert_insert", ["alist"]], ["add", "theorem", "insert_insert_of_ne", ["alist"]], ["add", "theorem", "insert_singleton_eq", ["alist"]], ["add", "theorem", "insert_union", ["alist"]], ["add", "theorem", "lookup_to_alist", ["alist"]], ["add", "theorem", "to_alist_cons", ["alist"]], ["add", "theorem", "union_assoc", ["alist"]], ["add", "theorem", "union_comm_of_disjoint", ["alist"]], ["add", "theorem", "union_erase", ["alist"]], ["add", "def", "to_alist", ["list"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "foldl_eq_foldr'", ["list"]], ["add", "theorem", "foldl_eq_of_comm'", ["list"]], ["add", "theorem", "foldr_eq_of_comm'", ["list"]], ["add", "theorem", "mem_enum_from", ["list"]], ["add", "theorem", "pw_filter_map", ["list"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["add", "def", "erase_dupkeys", ["list"]], ["add", "theorem", "erase_dupkeys_cons", ["list"]], ["add", "theorem", "kerase_kerase", ["list"]], ["add", "theorem", "lookup_erase_dupkeys", ["list"]], ["add", "theorem", "lookup_ext", ["list"]], ["add", "theorem", "mem_ext", ["list"]], ["add", "theorem", "nodupkeys_erase_dupkeys", ["list"]]]}]}, {"timestamp": 1562968033, "sha": "5a48be3e", "message": "chore(data/src/pending): remove unused folder (#1221)", "changes": [{"oldPath": "src/pending/default.lean", "newPath": null, "changes": []}]}, {"timestamp": 1562961955, "sha": "fb7dfa16", "message": "feat(data/{nat,int,zmod,finset}): add a few useful facts (#1220)\n* feat(data/finset): add a few useful facts\n* feat(data/zmod/basic): express neg in terms of residues\n* feat(data/{nat,int}): add theorem 'mod_mod_of_dvd'", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "bind_inter", ["finset"]], ["add", "theorem", "filter_insert", ["finset"]], ["add", "theorem", "filter_inter", ["finset"]], ["add", "theorem", "filter_singleton", ["finset"]], ["add", "theorem", "inter_bind", ["finset"]], ["add", "theorem", "inter_filter", ["finset"]], ["add", "theorem", "inter_sdiff", ["finset"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "mod_mod", ["int"]], ["add", "theorem", "mod_mod_of_dvd", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "mod_mod_of_dvd", ["nat"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "neg_val'", ["zmod"]], ["add", "theorem", "neg_val", ["zmod"]]]}]}, {"timestamp": 1562895802, "sha": "3d36966e", "message": "feat(analysis/calculus/mean_value): the mean value inequality (#1212)\n* feat(analysis/calculus/mean_value): the mean value inequality\n* remove blank lines", "changes": [{"oldPath": null, "newPath": "src/analysis/calculus/mean_value.lean", "changes": [["add", "theorem", "norm_image_sub_le_of_norm_deriv_le_convex", []], ["add", "theorem", "norm_image_sub_le_of_norm_deriv_le_segment", []]]}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": [["add", "theorem", "image_Icc_zero_one_eq_segment", []]]}]}, {"timestamp": 1562879036, "sha": "78065861", "message": "feat(analysis/calculus/deriv): extended API for derivatives (#1213)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["add", "theorem", "comp", ["differentiable"]], ["del", "theorem", "congr'", ["differentiable"]], ["del", "theorem", "congr", ["differentiable"]], ["mod", "theorem", "differentiable_on", ["differentiable"]], ["del", "theorem", "congr", ["differentiable_at"]], ["add", "theorem", "congr_of_mem_nhds", ["differentiable_at"]], ["del", "theorem", "fderiv_congr'", ["differentiable_at"]], ["del", "theorem", "fderiv_congr", ["differentiable_at"]], ["mod", "theorem", "mono", ["differentiable_on"]], ["add", "theorem", "congr_of_mem_nhds_within", ["differentiable_within_at"]], ["del", "theorem", "differentiable_at'", ["differentiable_within_at"]], ["mod", "theorem", "mono", ["differentiable_within_at"]], ["mod", "theorem", "differentiable_within_at_inter", []], ["add", "theorem", "differentiable_within_at_univ", []], ["del", "theorem", "differentiable_within_univ_at", []], ["add", "theorem", "fderiv_congr_of_mem_nhds", []], ["add", "theorem", "fderiv_within_congr", []], ["add", "theorem", "fderiv_within_congr_of_mem_nhds_within", []], ["add", "theorem", "fderiv_within_inter", []], ["add", "theorem", "fderiv_within_subset", []], ["del", "theorem", "congr", ["has_fderiv_at"]], ["add", "theorem", "congr_of_mem_nhds", ["has_fderiv_at"]], ["mod", "theorem", "fderiv", ["has_fderiv_at"]], ["del", "theorem", "has_fderiv_at_congr", []], ["del", "theorem", "congr'", ["has_fderiv_at_filter"]], ["del", "theorem", "congr", ["has_fderiv_at_filter"]], ["add", "theorem", "congr_of_mem_sets", ["has_fderiv_at_filter"]], ["del", "theorem", "has_fderiv_at_filter_congr'", []], ["del", "theorem", "has_fderiv_at_filter_congr", []], ["add", "theorem", "has_fderiv_at_filter_congr_of_mem_sets", []], ["del", "theorem", "congr", ["has_fderiv_within_at"]], ["add", "theorem", "congr_of_mem_nhds_within", ["has_fderiv_within_at"]], ["mod", "theorem", "fderiv_within", ["has_fderiv_within_at"]], ["del", "theorem", "has_fderiv_within_at_congr", []], ["add", "theorem", "has_fderiv_within_at_inter'", []], ["add", "theorem", "has_fderiv_within_at_inter", []], ["add", "theorem", "has_fderiv_within_at_univ", []], ["del", "theorem", "has_fderiv_within_univ_at", []]]}]}, {"timestamp": 1562869456, "sha": "2511faf4", "message": "feat(tactic/localized): localized notation (#1081)\n* first prototype of localized notation\n* update\n* add test file\n* shorten command, fix test\n* update documentation\n* rename files, add to tactic/default\n* typo\n* mention that we can use other commands\n* optimize\n* only use 1 attribute\n* add localized command classical instance\n* use rb_lmap\nThis changes the internal code to avoid import clashes and adds a test to that effect\n* move rb_lmap.of_list to correct file\nalso update docstring\n* rename open_notation to open_locale", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/localized.lean", "changes": [["add", "def", "string_hash", []]]}, {"oldPath": null, "newPath": "test/localized/import1.lean", "changes": []}, {"oldPath": null, "newPath": "test/localized/import2.lean", "changes": []}, {"oldPath": null, "newPath": "test/localized/import3.lean", "changes": []}, {"oldPath": null, "newPath": "test/localized/localized.lean", "changes": []}]}, {"timestamp": 1562853497, "sha": "c2cc9a99", "message": "refactor(*): change priority of \\simeq (#1210)\n* change priority of \\simeq\nAlso change priority of similar notations\nRemove many unnecessary parentheses\n* lower precedence on order_embedding and similar\nalso add parentheses in 1 place where they were needed\n* spacing\n* add parenthesis", "changes": [{"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": [["mod", "def", "associates_int_equiv_nat", []]]}, {"oldPath": "src/category_theory/endomorphism.lean", "newPath": "src/category_theory/endomorphism.lean", "changes": [["mod", "def", "units_End_eqv_Aut", ["category_theory", "Aut"]]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "arrow_prod_equiv_prod_arrow", ["equiv"]], ["mod", "def", "bool_equiv_punit_sum_punit", ["equiv"]], ["mod", "def", "bool_prod_equiv_sum", ["equiv"]], ["mod", "def", "empty_prod", ["equiv"]], ["mod", "def", "empty_sum", ["equiv"]], ["mod", "def", "int_equiv_nat_sum_nat", ["equiv"]], ["mod", "def", "nat_equiv_nat_sum_punit", ["equiv"]], ["mod", "def", "nat_sum_punit_equiv_nat", ["equiv"]], ["mod", "def", "option_equiv_sum_punit", ["equiv"]], ["mod", "def", "pempty_prod", ["equiv"]], ["mod", "def", "pempty_sum", ["equiv"]], ["mod", "def", "prod_assoc", ["equiv"]], ["mod", "def", "prod_comm", ["equiv"]], ["mod", "def", "prod_congr", ["equiv"]], ["mod", "def", "prod_empty", ["equiv"]], ["mod", "def", "prod_pempty", ["equiv"]], ["mod", "def", "prod_punit", ["equiv"]], ["mod", "def", "prod_sum_distrib", ["equiv"]], ["mod", "def", "psum_equiv_sum", ["equiv"]], ["mod", "def", "punit_prod", ["equiv"]], ["mod", "theorem", "refl_trans", ["equiv"]], ["mod", "def", "sigma_equiv_prod", ["equiv"]], ["mod", "def", "sigma_equiv_prod_of_equiv", ["equiv"]], ["mod", "def", "sum_arrow_equiv_prod_arrow", ["equiv"]], ["mod", "def", "sum_assoc", ["equiv"]], ["mod", "def", "sum_comm", ["equiv"]], ["mod", "def", "sum_congr", ["equiv"]], ["mod", "def", "sum_empty", ["equiv"]], ["mod", "def", "sum_equiv_sigma_bool", ["equiv"]], ["mod", "def", "sum_pempty", ["equiv"]], ["mod", "def", "sum_prod_distrib", ["equiv"]], ["mod", "theorem", "symm_symm", ["equiv"]], ["mod", "theorem", "symm_symm_apply", ["equiv"]], ["mod", "theorem", "trans_refl", ["equiv"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": [["mod", "def", "pair", ["denumerable"]]]}, {"oldPath": "src/data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": [["mod", "def", "fin_prod_fin_equiv", []], ["mod", "def", "sum_fin_sum_equiv", []]]}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": [["mod", "def", "bool_prod_nat_equiv_nat", ["equiv"]], ["mod", "def", "nat_prod_nat_equiv_nat", ["equiv"]], ["mod", "def", "nat_sum_nat_equiv_nat", ["equiv"]], ["mod", "def", "prod_equiv_of_equiv_nat", ["equiv"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "def", "equiv_multiset", ["finsupp"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "src/group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["mod", "def", "lt_or_eq", ["initial_seg"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "def", "prod_assoc", ["homeomorph"]], ["mod", "def", "prod_comm", ["homeomorph"]], ["mod", "def", "prod_congr", ["homeomorph"]]]}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}]}, {"timestamp": 1562839951, "sha": "86d0f292", "message": "refactor(*): make `is_group_hom` extend `is_mul_hom` (#1214)\n* map_mul/map_add: use explicit parameters\nPreparing to merge `is_mul_hom` with `is_group_hom`\n* make `is_group_hom` extend `is_mul_hom`, adjust many proof terms\n* Add a comment", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": [["mod", "theorem", "lift_add", ["add_comm_group", "direct_limit"]], ["mod", "theorem", "of_add", ["add_comm_group", "direct_limit"]]]}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/group/conj.lean", "newPath": "src/algebra/group/conj.lean", "changes": []}, {"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": [["mod", "theorem", "map_add", ["is_add_monoid_hom"]], ["mod", "theorem", "inv", ["is_group_hom"]], ["add", "theorem", "mk'", ["is_group_hom"]], ["mod", "theorem", "mul", ["is_group_hom"]], ["mod", "theorem", "map_mul", ["is_monoid_hom"]], ["del", "theorem", "comp'", ["is_mul_hom"]], ["del", "theorem", "comp", ["is_mul_hom"]], ["del", "theorem", "id", ["is_mul_hom"]], ["add", "theorem", "inv", ["is_mul_hom"]], ["add", "theorem", "mul", ["is_mul_hom"]]]}, {"oldPath": "src/algebra/group/units_hom.lean", "newPath": "src/algebra/group/units_hom.lean", "changes": [["del", "theorem", "map_comp'", ["units"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": []}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "add'", ["free_abelian_group", "lift"]]]}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/presented_group.lean", "newPath": "src/group_theory/presented_group.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1562830865, "sha": "1b1c64b0", "message": "perf(algebraic_geometry/presheafed_space): replace/optimize tidy scripts (#1204)\n* perf(algebraic_geometry/presheafed_space): replace/optimize tidy scripts\nThis file now takes 20 seconds to compile on my desktop instead of 160. This is a 9% speedup to mathlib overall.\n* doc(algebraic_geometry/presheafed_space): comments", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}]}, {"timestamp": 1562818720, "sha": "cc5870db", "message": "feat(algebra/ordered_ring): with_top.nat_induction (#1211)", "changes": [{"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": [["add", "theorem", "nat_induction", ["with_top"]]]}]}, {"timestamp": 1562794400, "sha": "5cdebb75", "message": "feat(*): Miscellaneous lemmas in algebra (#1188)\n* Trying things out\n* feat(ring_theory/*): Misc little lemmas\n* More little lemmas", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["del", "theorem", "closure_mono", ["add_group"]], ["del", "theorem", "mclosure_inv_subset", ["add_group"]], ["del", "theorem", "mclosure_subset", ["add_group"]], ["add", "theorem", "closure_subgroup", ["group"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "span_int_eq", []], ["add", "theorem", "span_int_eq_add_group_closure", []]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["add", "theorem", "mul_subset_mul", ["submodule"]], ["add", "theorem", "pow_subset_pow", ["submodule"]], ["add", "theorem", "smul_def", ["submodule"]], ["add", "theorem", "smul_le_smul", ["submodule"]], ["add", "theorem", "smul_singleton", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "map_quotient_self", ["ideal"]], ["add", "theorem", "pow_le_pow", ["ideal"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["add", "theorem", "eq_bot_of_prime", ["ideal"]], ["add", "theorem", "eq_bot_or_top", ["ideal"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_pow", ["submodule"]]]}]}, {"timestamp": 1562787564, "sha": "5aebdc43", "message": "fix(*): fix line endings (#1209)", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}]}, {"timestamp": 1562783132, "sha": "0bc4a50d", "message": "feat(tactic/apply_fun): adds `apply_fun` tactic (#1184)\n* feat(tactic/apply_fun): adds `apply_fun` tactic\n* move tests to test folder\n* elaborate function with expected type\n* fix merge mistake", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "src/tactic/apply_fun.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "test/apply_fun.lean", "changes": []}]}, {"timestamp": 1562774271, "sha": "d2b4380c", "message": "feat(data/list/basic): list.prod_range_succ, list.sum_range_succ (#1197)\n* feat(data/list/basic): list.prod_range_succ, list.sum_range_succ\n* changes from review\n* remove simp\n* shorten proof", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "prod_range_succ", ["list"]], ["mod", "theorem", "range_concat", ["list"]]]}]}, {"timestamp": 1562757753, "sha": "8939d951", "message": "docs(contribute/index.md): #1131 [skip ci]", "changes": [{"oldPath": "docs/contribute/index.md", "newPath": "docs/contribute/index.md", "changes": []}]}, {"timestamp": 1562749806, "sha": "b00460c0", "message": "doc(README): Add link to website", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1562737749, "sha": "fb1848bb", "message": "refactor(topology/algebra/open_subgroup) Finish TODO (#1202)\n* Create .DS_Store\n* Revert \"Create .DS_Store\"\nThis reverts commit 5612886d493aef59205eddc5a34a75e6e5ba22c1.\n* Finish TODO\n* Update src/topology/algebra/open_subgroup.lean\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}]}, {"timestamp": 1562725493, "sha": "e25a5970", "message": "feat(analysis/calculus/tangent_cone): more properties of the tangent cone (#1136)", "changes": [{"oldPath": "src/analysis/calculus/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": []}, {"oldPath": "src/analysis/calculus/tangent_cone.lean", "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["mod", "theorem", "unique_diff_within_at", ["is_open"]], ["add", "theorem", "mem_tangent_cone_of_segment_subset", []], ["add", "theorem", "subset_tangent_cone_prod_left", []], ["add", "theorem", "subset_tangent_cone_prod_right", []], ["mod", "theorem", "lim_zero", ["tangent_cone_at"]], ["add", "theorem", "tangent_cone_inter_nhds", []], ["del", "theorem", "tangent_cone_inter_open", []], ["add", "theorem", "prod", ["unique_diff_on"]], ["add", "theorem", "unique_diff_on_Icc_zero_one", []], ["add", "theorem", "unique_diff_on_convex", []], ["add", "theorem", "unique_diff_on_univ", []], ["add", "theorem", "inter", ["unique_diff_within_at"]], ["add", "theorem", "mono", ["unique_diff_within_at"]], ["add", "theorem", "prod", ["unique_diff_within_at"]], ["mod", "theorem", "unique_diff_within_at_inter", []], ["add", "theorem", "unique_diff_within_at_univ", []], ["del", "theorem", "unique_diff_within_univ_at", []]]}]}, {"timestamp": 1562717418, "sha": "0cd0d4ed", "message": "feat(meta/pformat): format! macro using `pp` instead of `to_fmt` (#1194)\n* feat(meta/pformat): format! macro which uses `pp` instead of `to_fmt`\n* Update core.lean", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}]}, {"timestamp": 1562711263, "sha": "60e4bb92", "message": "refactor(category_theory/endomorphism): move to a dedicated file; prove simple lemmas (#1195)\n* Move definitions of `End` and `Aut` to a dedicated file\n* Adjust some proofs, use `namespace`, add docstrings\n* `functor.map` and `functor.map_iso` define homomorphisms of `End/Aut`\n* Define `functor.map_End` and `functor.map_Aut`", "changes": [{"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["del", "theorem", "mul_def", ["category_theory", "End"]], ["del", "theorem", "one_def", ["category_theory", "End"]], ["del", "def", "End", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/endomorphism.lean", "changes": [["add", "def", "units_End_eqv_Aut", ["category_theory", "Aut"]], ["add", "def", "Aut", ["category_theory"]], ["add", "theorem", "mul_def", ["category_theory", "End"]], ["add", "theorem", "one_def", ["category_theory", "End"]], ["add", "def", "End", ["category_theory"]], ["add", "def", "map_Aut", ["category_theory", "functor"]], ["add", "def", "map_End", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["del", "def", "Aut", ["category_theory"]], ["add", "theorem", "map_iso_trans", ["category_theory", "functor"]]]}]}, {"timestamp": 1562704442, "sha": "3a7c661a", "message": "refactor(topology/*): define and use dense_inducing (#1193)\n* refactor(topology/*): define and dense_inducing\nTraditionally, topology extends functions defined on dense subspaces\n(equipped by the induced topology).\nIn mathlib, this was made type-theory-friendly by rather factoring\nthrough `dense_embedding` maps. A map `f : α → β` between topological\nspaces is a dense embedding if its image is dense, it is injective, and\nit pulls back the topology from `β` to the topology on `α`. It turns out\nthat the injectivity was never used in any serious way. It used not to\nbe used at all until we noticed it could be used to ensure the\nfactorization equation `dense_embedding.extend_e_eq` could be made to\nhold without any assumption on the map to be extended. But of course\nthis formalization trick is mathematically completely irrelevant.\nOn the other hand, assuming injectivity prevents direct use in uniform\nspaces completion, because the map from a space to its (separated)\ncompletion is injective only when the original space is separated. This\nis why mathlib ring completion currently assumes a separated topological\nring, and the perfectoid spaces project needed a lot of effort to drop\nthat assumption. This commit makes all this completely painless.\nAlong the way, we improve consistency and readability by turning\na couple of conjunctions into structures. It also introduces long\noverdue fix to `function.uncurry` (which suffered from abusive pattern\nmatching, similar to `prod.map`).\n* Apply suggestions from code review\nCo-Authored-By: Johan Commelin \nCo-Authored-By: sgouezel \n* minor fixes following review\n* Some more dot notation, consistent naming and field naming", "changes": [{"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "injective_prod", ["function"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "theorem", "curry_uncurry'", ["function"]], ["add", "def", "uncurry'", ["function"]], ["add", "theorem", "uncurry'_bicompr", ["function"]], ["add", "theorem", "uncurry'_curry", ["function"]]]}, {"oldPath": "src/measure_theory/bochner_integration.lean", "newPath": "src/measure_theory/bochner_integration.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": [["mod", "theorem", "coe_zero", []]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["del", "theorem", "continuous_extend_of_cauchy", ["dense_embedding"]], ["del", "theorem", "extend_Z_bilin", ["dense_embedding"]], ["add", "theorem", "extend_Z_bilin", ["dense_inducing"]]]}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["mod", "theorem", "continuous_mul'", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "dense_range_prod", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["mod", "theorem", "embedding_of_rat", []]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "comp", ["closed_embedding"]], ["del", "theorem", "closed_embedding_compose", []], ["del", "theorem", "closure_image_nhds_of_nhds", ["dense_embedding"]], ["del", "theorem", "closure_range", ["dense_embedding"]], ["del", "theorem", "comap_nhds_neq_bot", ["dense_embedding"]], ["del", "theorem", "continuous_extend", ["dense_embedding"]], ["del", "def", "extend", ["dense_embedding"]], ["del", "theorem", "extend_e_eq", ["dense_embedding"]], ["del", "theorem", "extend_eq", ["dense_embedding"]], ["mod", "theorem", "inj_iff", ["dense_embedding"]], ["del", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_embedding"]], ["del", "theorem", "tendsto_comap_nhds_nhds", ["dense_embedding"]], ["del", "theorem", "tendsto_extend", ["dense_embedding"]], ["add", "theorem", "to_embedding", ["dense_embedding"]], ["mod", "structure", "dense_embedding", []], ["add", "theorem", "closure_image_nhds_of_nhds", ["dense_inducing"]], ["add", "theorem", "closure_range", ["dense_inducing"]], ["add", "theorem", "comap_nhds_neq_bot", ["dense_inducing"]], ["add", "theorem", "continuous_extend", ["dense_inducing"]], ["add", "def", "extend", ["dense_inducing"]], ["add", "theorem", "extend_e_eq", ["dense_inducing"]], ["add", "theorem", "extend_eq", ["dense_inducing"]], ["add", "theorem", "extend_eq_of_cont", ["dense_inducing"]], ["add", "theorem", "mk'", ["dense_inducing"]], ["add", "theorem", "nhds_eq_comap", ["dense_inducing"]], ["add", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_inducing"]], ["add", "theorem", "tendsto_comap_nhds_nhds", ["dense_inducing"]], ["add", "theorem", "tendsto_extend", ["dense_inducing"]], ["add", "structure", "dense_inducing", []], ["add", "theorem", "comp", ["dense_range"]], ["add", "theorem", "inhabited", ["dense_range"]], ["add", "def", "dense_range", []], ["add", "theorem", "dense_range_iff_closure_eq", []], ["add", "theorem", "comp", ["embedding"]], ["add", "def", "mk'", ["embedding"]], ["add", "theorem", "prod_mk", ["embedding"]], ["add", "structure", "embedding", []], ["del", "def", "embedding", []], ["del", "theorem", "embedding_compose", []], ["del", "theorem", "embedding_prod_mk", []], ["add", "theorem", "comp", ["inducing"]], ["add", "theorem", "continuous", ["inducing"]], ["add", "theorem", "continuous_iff", ["inducing"]], ["add", "theorem", "map_nhds_eq", ["inducing"]], ["add", "theorem", "nhds_eq_comap", ["inducing"]], ["add", "theorem", "prod_mk", ["inducing"]], ["add", "theorem", "tendsto_nhds_iff", ["inducing"]], ["add", "structure", "inducing", []], ["add", "theorem", "inducing_id", []], ["add", "theorem", "inducing_is_closed", []], ["add", "theorem", "inducing_of_inducing_compose", []], ["add", "theorem", "inducing_open", []]]}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "induced_iff_nhds_eq", []], ["del", "theorem", "nhds_induced_eq_comap", []]]}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": [["add", "theorem", "dense_inducing_pure", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "comp", ["uniform_continuous₂"]], ["add", "def", "uniform_continuous₂", []], ["add", "theorem", "uniform_continuous₂_curry", []], ["add", "theorem", "uniform_continuous₂_def", []]]}, {"oldPath": "src/topology/uniform_space/complete_separated.lean", "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": [["add", "theorem", "continuous_extend_of_cauchy", ["dense_inducing"]], ["mod", "theorem", "is_closed_of_is_complete", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["add", "theorem", "dense_inducing_pure_cauchy", ["Cauchy"]], ["del", "def", "prod", ["Cauchy"]], ["del", "theorem", "prod_pure_cauchy_pure_cauchy", ["Cauchy"]], ["del", "theorem", "uniform_continuous_prod", ["Cauchy"]], ["add", "theorem", "uniform_inducing_pure_cauchy", ["Cauchy"]], ["add", "theorem", "dense_inducing_coe", ["uniform_space", "completion"]], ["add", "theorem", "extension_unique", ["uniform_space", "completion"]], ["add", "theorem", "extension₂_coe_coe", ["uniform_space", "completion"]], ["mod", "theorem", "map₂_coe_coe", ["uniform_space", "completion"]], ["add", "theorem", "nonempty_completion_iff", ["uniform_space", "completion"]], ["mod", "theorem", "prod_coe_coe", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_extension₂", ["uniform_space", "completion"]], ["del", "theorem", "uniform_continuous_map₂'", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_map₂", ["uniform_space", "completion"]], ["add", "theorem", "uniform_inducing_coe", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["del", "theorem", "closure_image_mem_nhds_of_uniform_embedding", []], ["add", "theorem", "closure_image_mem_nhds_of_uniform_inducing", []], ["mod", "theorem", "complete_space_extension", []], ["mod", "theorem", "is_complete_image_iff", []], ["mod", "theorem", "totally_bounded_preimage", []], ["add", "theorem", "comp", ["uniform_embedding"]], ["mod", "theorem", "dense_embedding", ["uniform_embedding"]], ["mod", "theorem", "embedding", ["uniform_embedding"]], ["mod", "theorem", "prod", ["uniform_embedding"]], ["del", "theorem", "uniform_continuous", ["uniform_embedding"]], ["del", "theorem", "uniform_continuous_iff", ["uniform_embedding"]], ["add", "structure", "uniform_embedding", []], ["del", "def", "uniform_embedding", []], ["mod", "theorem", "uniform_embedding_comap", []], ["mod", "theorem", "uniform_embedding_def'", []], ["mod", "theorem", "uniform_embedding_def", []], ["mod", "theorem", "uniform_embedding_subtype_emb", []], ["mod", "theorem", "uniform_extend_subtype", []], ["add", "theorem", "comp", ["uniform_inducing"]], ["add", "theorem", "dense_inducing", ["uniform_inducing"]], ["add", "theorem", "inducing", ["uniform_inducing"]], ["add", "def", "mk'", ["uniform_inducing"]], ["add", "theorem", "prod", ["uniform_inducing"]], ["add", "theorem", "uniform_continuous", ["uniform_inducing"]], ["add", "theorem", "uniform_continuous_iff", ["uniform_inducing"]], ["add", "structure", "uniform_inducing", []], ["del", "theorem", "uniformly_extend_of_emb", []], ["add", "theorem", "uniformly_extend_of_ind", []], ["mod", "theorem", "uniformly_extend_spec", []]]}]}, {"timestamp": 1562687754, "sha": "04608159", "message": "fix(docs/tactics): fix code block (#1201)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1562684651, "sha": "0099f067", "message": "perf(data/polynomial, field_theory/splitting_field): memory problems (#1200)\n* perf(data/polynomial): avoid bad instance search\n* perf(field_theory/splitting_field): local intance priority makes a big difference", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}]}, {"timestamp": 1562674539, "sha": "13f76d33", "message": "feat(tactic): add `convert_to` and `ac_change` (#944)\n* feat(tactic): add `convert_to` and `ac_change`\n* style fixes", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1562677507, "sha": "d50f6346", "message": "feat(data/matrix): simp attributes on one_mul and mul_one (#1199)", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": []}]}, {"timestamp": 1562670395, "sha": "6670e661", "message": "feat(data/matrix): simp attributes on zero_mul and mul_zero (#1198)", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": [["mod", "theorem", "mul_zero", ["matrix"]], ["mod", "theorem", "zero_mul", ["matrix"]]]}]}, {"timestamp": 1562662844, "sha": "90719698", "message": "feat(data/nat/basic): some nat inequalities (#1189)\n* feat(data/nat/basic): some inequalities\n* remove redundant lemmas\n* simplify proofs\n* make implicit\n* shorter proof\n* rename", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "not_succ_lt_self", ["nat"]], ["add", "theorem", "two_mul_ne_two_mul_add_one", ["nat"]]]}]}, {"timestamp": 1562619066, "sha": "7fc3283e", "message": "fix(README.md): Remove the AppVeyor badge [skip ci] (#1192)\nIt seems to me that we don't really care about whether the AppVeyor build fails or not. And I don't like the red badge. So I propose to remove it.", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1562631618, "sha": "0cc67a1a", "message": "chore(data/matrix): remove unnecessary decidable_eq (#1196)\nThis was generating annoying `decidable_eq (fin n)` goals when rewriting.", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": []}]}, {"timestamp": 1562532500, "sha": "89174191", "message": "chore(data/equiv/algebra): use `to_additive` (#1191)\n- Define `add_equiv` and `add_equiv.*` using `to_additive`\n- Simplify some instances", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["del", "def", "refl", ["add_equiv"]], ["del", "def", "symm", ["add_equiv"]], ["del", "def", "trans", ["add_equiv"]], ["del", "theorem", "one", ["mul_equiv"]]]}]}, {"timestamp": 1562452241, "sha": "55b0b80b", "message": "fix(src/logic/basic): add [symm] attribute to ne. (#1190)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}]}, {"timestamp": 1562412571, "sha": "ccf5636f", "message": "feat(data/option/basic): not_is_some_iff_eq_none and ne_none_iff_is_some (#1186)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "ne_none_iff_is_some", ["option"]], ["add", "theorem", "not_is_some_iff_eq_none", ["option"]]]}]}, {"timestamp": 1562358647, "sha": "12763b9e", "message": "chore(algebra/group/type_tags): add some missing instances (#1164)\n* chore(algebra/group/type_tags): add some missing instances\n* Drop an unused import", "changes": [{"oldPath": "src/algebra/group/type_tags.lean", "newPath": "src/algebra/group/type_tags.lean", "changes": []}]}, {"timestamp": 1562346224, "sha": "05283d26", "message": "fix(category_theory/limits): make is_limit a class, clean up proofs (#1187)\n* feat(category_theory/limits): equivalences create limits\n* equivalence lemma\n* add @[simp]\n* use right_adjoint_preserves_limits\n* blech\n* undo weird changes in topology files\n* formatting\n* do colimits too\n* working!\n* ?", "changes": [{"oldPath": "src/algebra/CommRing/colimits.lean", "newPath": "src/algebra/CommRing/colimits.lean", "changes": []}, {"oldPath": "src/algebra/Mon/colimits.lean", "newPath": "src/algebra/Mon/colimits.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["del", "structure", "is_left_adjoint", ["category_theory", "adjunction"]], ["del", "structure", "is_right_adjoint", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["del", "def", "is_colimit_map_cocone", ["category_theory", "adjunction"]], ["del", "def", "is_limit_map_cone", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["del", "def", "is_colimit", ["category_theory", "limits", "colimit"]], ["del", "def", "is_limit", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}]}, {"timestamp": 1562341462, "sha": "05550eac", "message": "feat(category_theory/limits): equivalences create limits (#1175)\n* feat(category_theory/limits): equivalences create limits\n* equivalence lemma\n* add @[simp]\n* use right_adjoint_preserves_limits\n* undo weird changes in topology files\n* formatting\n* do colimits too", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["del", "def", "to_adjunction", ["category_theory", "adjunction", "equivalence"]], ["add", "def", "to_adjunction", ["category_theory", "equivalence"]], ["add", "def", "adjunction", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["add", "def", "has_colimit_of_comp_equivalence", ["category_theory", "adjunction"]], ["add", "def", "has_limit_of_comp_equivalence", ["category_theory", "adjunction"]], ["add", "def", "is_colimit_map_cocone", ["category_theory", "adjunction"]], ["add", "def", "is_limit_map_cone", ["category_theory", "adjunction"]], ["del", "def", "left_adjoint_preserves_colimits", ["category_theory", "adjunction"]], ["del", "def", "right_adjoint_preserves_limits", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "theorem", "counit_inv_functor_comp", ["category_theory", "equivalence"]], ["mod", "theorem", "functor_unit_comp", ["category_theory", "equivalence"]], ["mod", "theorem", "inverse_counit_inv_comp", ["category_theory", "equivalence"]], ["mod", "theorem", "unit_inverse_comp", ["category_theory", "equivalence"]], ["add", "theorem", "counit_inv_functor_comp", ["category_theory", "is_equivalence"]], ["add", "theorem", "functor_unit_comp", ["category_theory", "is_equivalence"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "theorem", "map_cocone_X", ["category_theory", "functor"]], ["add", "theorem", "map_cone_X", ["category_theory", "functor"]], ["add", "def", "map_cone_inv", ["category_theory", "functor"]], ["add", "theorem", "map_cone_inv_X", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}]}, {"timestamp": 1562304667, "sha": "27ae77cd", "message": "feat(tactic/tidy): lower the priority of ext in tidy (#1178)\n* feat(category_theory/adjunction): additional simp lemmas\n* experimenting with deferring ext in tidy\n* abbreviate some proofs\n* refactoring CommRing/adjunctions\n* renaming", "changes": [{"oldPath": "src/algebra/CommRing/adjunctions.lean", "newPath": "src/algebra/CommRing/adjunctions.lean", "changes": [["add", "def", "adj", ["CommRing"]], ["add", "def", "free", ["CommRing"]], ["add", "theorem", "free_map_val", ["CommRing"]], ["add", "theorem", "free_obj_α", ["CommRing"]], ["add", "def", "hom_equiv", ["CommRing"]], ["del", "theorem", "polynomial_ring_map_val", ["CommRing"]], ["del", "theorem", "polynomial_ring_obj_α", ["CommRing"]]]}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1562302960, "sha": "4af39760", "message": "chore(category_theory): cleanup (#1173)\n* chore(category_theory): cleanup\n* oops\n* remove comment\n* more uniform?\n* fix stalks proof?\n* Update src/algebra/CommRing/basic.lean\nCo-Authored-By: Johan Commelin \n* Apply suggestions from code review\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/algebra/CommRing/basic.lean", "newPath": "src/algebra/CommRing/basic.lean", "changes": [["del", "theorem", "comp_val", ["CommRing"]], ["del", "theorem", "id_val", ["CommRing"]], ["mod", "def", "is_comm_ring_hom", ["CommRing"]]]}, {"oldPath": "src/algebra/CommRing/colimits.lean", "newPath": "src/algebra/CommRing/colimits.lean", "changes": [["mod", "theorem", "cocone_naturality_components", ["CommRing", "colimits"]]]}, {"oldPath": "src/algebra/Mon/colimits.lean", "newPath": "src/algebra/Mon/colimits.lean", "changes": [["mod", "theorem", "cocone_naturality_components", ["Mon", "colimits"]]]}, {"oldPath": "src/category_theory/concrete_category.lean", "newPath": "src/category_theory/concrete_category.lean", "changes": [["add", "theorem", "coe_comp", ["category_theory", "bundled"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "map_inv", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "def", "is_iso_of_op", ["category_theory"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/topology/Top/stalks.lean", "newPath": "src/topology/Top/stalks.lean", "changes": []}, {"oldPath": "src/topology/algebra/TopCommRing/basic.lean", "newPath": "src/topology/algebra/TopCommRing/basic.lean", "changes": [["mod", "def", "forget", ["TopCommRing"]]]}]}, {"timestamp": 1562269742, "sha": "569bcf99", "message": "feat(algebra/ordered_group): eq_of_abs_non_pos (#1185)\n* feat(algebra/ordered_group): decidable_linear_ordered_comm_group.eq_of_abs_non_pos\n* fix(algebra/ordered_group): new line and name", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "eq_of_abs_sub_nonpos", ["decidable_linear_ordered_comm_group"]]]}]}, {"timestamp": 1562264249, "sha": "c5d41401", "message": "feat(data/fin): fin.mk.inj_iff (#1182)\nQuite surprised this insn't already there.", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}]}, {"timestamp": 1562258859, "sha": "1723beef", "message": "chore(algebra/order_functions): some proofs work for semirings (#1183)\n* chore(algebra/order_functions): some proofs work for semirings, not only rings\n* Update order_functions.lean", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}]}, {"timestamp": 1562250671, "sha": "0818bb2a", "message": "feat(data/fin): mem_find_of_unique (#1181)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "mem_find_of_unique", ["fin"]]]}]}, {"timestamp": 1562242482, "sha": "32ce1213", "message": "chore(topology/maps.lean): Delete a redundant argument (#1179)\n* Create .DS_Store\n* Revert \"Create .DS_Store\"\nThis reverts commit 5612886d493aef59205eddc5a34a75e6e5ba22c1.\n* Redundant argument", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}]}, {"timestamp": 1562235893, "sha": "34d69b50", "message": "chore(data/set): set.mem_preimage_eq becomes an iff (#1174)\n* chore(data/set): set.mem_preimage_eq becomes an iff named set.mem_preimage\n* fix(measure_theory/measurable_space): proof broken by mem_preimage\nchange\n* fix(data/filter/basic)\n* fix(topology/uniform_space/separation)\n* fix(measure_theory/integration)", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "mem_preimage", ["set"]], ["del", "theorem", "mem_preimage_eq", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/simple_func_dense.lean", "newPath": "src/measure_theory/simple_func_dense.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/open_subgroup.lean", "newPath": "src/topology/algebra/open_subgroup.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/baire.lean", "newPath": "src/topology/metric_space/baire.lean", "changes": []}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1562229949, "sha": "6493bb6e", "message": "feat(data/list/basic): nodup_update_nth, mem_diff_iff_of_nodup (#1170)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "diff_eq_filter_of_nodup", ["list"]], ["add", "theorem", "mem_diff_iff_of_nodup", ["list"]], ["add", "theorem", "mem_or_eq_of_mem_update_nth", ["list"]], ["add", "theorem", "nodup_update_nth", ["list"]]]}]}, {"timestamp": 1562223444, "sha": "00de1cbb", "message": "feat(data/list/basic): list.nodup_diff (#1168)\n* feat(data/list/basic): list.nodup_diff\n* Update basic.lean\n* Update basic.lean", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "nodup_diff", ["list"]]]}]}, {"timestamp": 1562217393, "sha": "e6b9696a", "message": "feat(data/option): not_mem_none and bind_assoc (#1177)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "bind_assoc", ["option"]], ["add", "theorem", "not_mem_none", ["option"]]]}]}, {"timestamp": 1562211222, "sha": "4cca114a", "message": "feat(data/fin): fin.find (#1167)\n* feat(data/fin): fin.find\n* add nat_find_mem_find", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "find", ["fin"]], ["add", "theorem", "find_eq_none_iff", ["fin"]], ["add", "theorem", "find_min'", ["fin"]], ["add", "theorem", "find_min", ["fin"]], ["add", "theorem", "find_spec", ["fin"]], ["add", "theorem", "is_some_find_iff", ["fin"]], ["add", "theorem", "nat_find_mem_find", ["fin"]]]}]}, {"timestamp": 1562204396, "sha": "3ee1f857", "message": "feat(order/basic): order_dual.inhabited (#1163)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}]}, {"timestamp": 1562197970, "sha": "ae9615c8", "message": "feat(order/pilex): lexicographic ordering on pi types (#1157)\n* feat(order/pilex): lexicographic ordering on pi types\n* fix instance name\n* fix instance name properly\n* Update basic.lean\n* remove unnecessary import", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/pilex.lean", "changes": [["add", "def", "lex", ["pi"]], ["add", "def", "pilex", []]]}]}, {"timestamp": 1562191764, "sha": "992354c2", "message": "feat(data/fintype): well_foundedness lemmas on fintypes (#1156)\n* feat(data/fintype): well_foundedness lemmas on fintypes\n* Update fintype.lean\n* minor fixes", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "is_well_order", ["fintype", "linear_order"]], ["add", "theorem", "well_founded", ["fintype", "preorder"]], ["add", "theorem", "well_founded_of_trans_of_irrefl", ["fintype"]]]}]}, {"timestamp": 1562177452, "sha": "cb842345", "message": "feat(category_theory/yoneda): coyoneda lemmas (#1172)\n* feat(category_theory/yoneda): coyoneda lemmas\n* oops, didn't include everything I needed\n* oops\n* removing fully_faithful\n* missing underscore...", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "def", "is_iso_of_fully_faithful", ["category_theory"]], ["add", "theorem", "preimage_comp", ["category_theory"]], ["mod", "theorem", "preimage_id", ["category_theory"]], ["add", "theorem", "preimage_map", ["category_theory"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["add", "def", "is_iso", ["category_theory", "coyoneda"]], ["add", "theorem", "naturality", ["category_theory", "coyoneda"]], ["add", "def", "is_iso", ["category_theory", "yoneda"]]]}]}, {"timestamp": 1562167541, "sha": "e4ee18b8", "message": "feat(category_theory/adjunction): additional simp lemmas (#1143)\n* feat(category_theory/adjunction): additional simp lemmas\n* spaces\nCo-Authored-By: Johan Commelin ", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["add", "theorem", "counit_naturality", ["category_theory", "adjunction"]], ["add", "theorem", "counit_naturality_assoc", ["category_theory", "adjunction"]], ["add", "theorem", "left_triangle_components_assoc", ["category_theory", "adjunction"]], ["add", "theorem", "right_triangle_components_assoc", ["category_theory", "adjunction"]], ["add", "theorem", "unit_naturality", ["category_theory", "adjunction"]], ["add", "theorem", "unit_naturality_assoc", ["category_theory", "adjunction"]]]}]}, {"timestamp": 1562157872, "sha": "f1b54734", "message": "feat(data/list/basic): fin_range (#1159)\n* feat(data/list/basic): fin_range\nfin_range is like `list.range` but returns a `list (fin n)` instead of a `list nat`\n* Update basic.lean", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "def", "fin_range", ["list"]], ["add", "theorem", "length_fin_range", ["list"]], ["add", "theorem", "mem_fin_range", ["list"]], ["add", "theorem", "nodup_fin_range", ["list"]]]}]}, {"timestamp": 1562146920, "sha": "d2c5309d", "message": "refactor(linear_algebra/lc): use families not sets (#943)\n* refactor(linear_algebra/lc): use families not sets\n* refactor(linear_algebra/lc): merge lc into finsupp\n* refactor(linear_algebra/lc): localize decidability\n* refactor(linear_algebra/lc): finsupp instances\n* refactor(linear_algebra/lc): use families instead of sets\n* refactor(linear_algebra/lc): remove set argument in lin_indep\n* refactor(linear_algebra/lc): clean up\n* refactor(linear_algebra/lc): more clean up\n* refactor(linear_algebra/lc): set_option in section\n* refactor(linear_algebra/lc): decidability proof\n* refactor(linear_algebra/lc): arrow precedence\n* refactor(linear_algebra/lc): more cleanup\n* refactor(linear_algebra/lc): move finset.preimage\n* refactor(linear_algebra/lc): use families not sets\n* refactor(linear_algebra/lc): merge lc into finsupp\n* refactor(linear_algebra/lc): localize decidability\n* refactor(linear_algebra/lc): finsupp instances\n* refactor(linear_algebra/lc): use families instead of sets\n* refactor(linear_algebra/lc): remove set argument in lin_indep\n* refactor(linear_algebra/lc): clean up\n* refactor(linear_algebra/lc): more clean up\n* refactor(linear_algebra/lc): set_option in section\n* refactor(linear_algebra/lc): decidability proof\n* refactor(linear_algebra/lc): arrow precedence\n* refactor(linear_algebra/lc): more cleanup\n* refactor(linear_algebra/lc): move finset.preimage\n* tidying up. Remove unnecessary dec_eq from dim. Shorten finset.preimage.\n* fix build\n* make travis rebuild\n* fix build\n* shorten finsupp proofs\n* shorten more proofs\n* shorten more proofs\n* speed up dim_bot\n* fix build\n* shorten dimension proof", "changes": [{"oldPath": "src/algebra/direct_limit.lean", "newPath": "src/algebra/direct_limit.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "eq_zero_of_zero_eq_one", ["semimodule"]], ["add", "theorem", "subtype_eq_val", ["submodule"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "exists_mem_iff_ne_empty", ["finset"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "comap_domain_apply", ["finsupp"]], ["add", "theorem", "emb_domain_inj", ["finsupp"]], ["add", "theorem", "eq_zero_of_comap_domain_eq_zero", ["finsupp"]], ["add", "theorem", "map_domain_comap_domain", ["finsupp"]], ["add", "theorem", "mem_split_support_iff_nonzero", ["finsupp"]], ["add", "theorem", "sigma_sum", ["finsupp"]], ["add", "theorem", "sigma_support", ["finsupp"]], ["add", "theorem", "single_of_emb_domain_single", ["finsupp"]], ["add", "theorem", "single_swap", ["finsupp"]], ["add", "theorem", "split_apply", ["finsupp"]], ["add", "def", "split_support", ["finsupp"]], ["add", "theorem", "sum_comap_domain", ["finsupp"]], ["del", "def", "to_comm_ring", ["finsupp"]], ["del", "def", "to_comm_semiring", ["finsupp"]], ["del", "def", "to_has_scalar'", ["finsupp"]], ["del", "def", "to_has_scalar", ["finsupp"]], ["del", "def", "to_module", ["finsupp"]], ["del", "def", "to_ring", ["finsupp"]], ["del", "def", "to_semimodule", ["finsupp"]], ["del", "def", "to_semiring", ["finsupp"]], ["add", "theorem", "unique_single", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_comp_subset_range", ["set"]], ["add", "theorem", "elim_range", ["set", "sum"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "coe_preimage", ["finset"]], ["add", "theorem", "image_preimage", ["finset"]], ["add", "theorem", "mem_preimage", ["finset"]], ["add", "theorem", "prod_preimage", ["finset"]], ["mod", "theorem", "finite_of_finite_image", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inj_on_of_injective", ["set"]]]}, {"oldPath": "src/data/sum.lean", "newPath": "src/data/sum.lean", "changes": [["add", "theorem", "elim_injective", ["sum"]], ["add", "theorem", "elim_inl", ["sum"]], ["add", "theorem", "elim_inr", ["sum"]]]}, {"oldPath": "src/field_theory/finite_card.lean", "newPath": "src/field_theory/finite_card.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["add", "theorem", "dim_mv_polynomial", ["mv_polynomial"]], ["add", "theorem", "is_basis_monomials", ["mv_polynomial"]], ["add", "theorem", "map_range_eq_map", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_degree", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_degree_iff_sup", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_total_degree", ["mv_polynomial"]], ["add", "def", "restrict_degree", ["mv_polynomial"]], ["add", "def", "restrict_total_degree", ["mv_polynomial"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "disjoint_inl_inr", ["linear_map"]], ["add", "theorem", "map_le_range", ["linear_map"]], ["add", "theorem", "sup_range_inl_inr", ["linear_map"]], ["add", "theorem", "eq_bot_of_zero_eq_one", ["submodule"]], ["add", "theorem", "linear_eq_on", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "constr_add", []], ["mod", "theorem", "constr_basis", []], ["del", "theorem", "constr_congr", []], ["mod", "theorem", "constr_eq", []], ["mod", "theorem", "constr_neg", []], ["mod", "theorem", "constr_range", []], ["mod", "theorem", "constr_self", []], ["mod", "theorem", "constr_smul", []], ["mod", "theorem", "constr_sub", []], ["mod", "theorem", "constr_zero", []], ["del", "theorem", "eq_of_linear_independent_of_span", []], ["add", "theorem", "eq_of_linear_independent_of_span_subtype", []], ["mod", "def", "equiv_of_is_basis", []], ["mod", "theorem", "exists_is_basis", []], ["mod", "theorem", "exists_linear_independent", []], ["mod", "theorem", "exists_subset_is_basis", []], ["add", "theorem", "comp", ["is_basis"]], ["mod", "def", "constr", ["is_basis"]], ["mod", "theorem", "constr_apply", ["is_basis"]], ["mod", "theorem", "ext", ["is_basis"]], ["add", "theorem", "injective", ["is_basis"]], ["mod", "theorem", "mem_span", ["is_basis"]], ["mod", "def", "repr", ["is_basis"]], ["mod", "theorem", "repr_eq_single", ["is_basis"]], ["mod", "theorem", "repr_ker", ["is_basis"]], ["mod", "theorem", "repr_range", ["is_basis"]], ["del", "theorem", "repr_supported", ["is_basis"]], ["mod", "theorem", "repr_total", ["is_basis"]], ["mod", "theorem", "total_comp_repr", ["is_basis"]], ["mod", "theorem", "total_repr", ["is_basis"]], ["mod", "def", "is_basis", []], ["mod", "theorem", "is_basis_empty", []], ["mod", "theorem", "is_basis_empty_bot", []], ["del", "theorem", "is_basis_injective", []], ["mod", "theorem", "is_basis_inl_union_inr", []], ["mod", "theorem", "is_basis_singleton_one", []], ["mod", "theorem", "is_basis_span", []], ["mod", "theorem", "is_basis", ["linear_equiv"]], ["add", "theorem", "comp", ["linear_independent"]], ["del", "theorem", "disjoint_ker", ["linear_independent"]], ["mod", "theorem", "image", ["linear_independent"]], ["add", "theorem", "image_subtype", ["linear_independent"]], ["del", "theorem", "inj_span_iff_inj", ["linear_independent"]], ["add", "theorem", "injective", ["linear_independent"]], ["mod", "theorem", "insert", ["linear_independent"]], ["mod", "theorem", "mono", ["linear_independent"]], ["del", "theorem", "of_image", ["linear_independent"]], ["add", "theorem", "of_subtype_range", ["linear_independent"]], ["mod", "def", "repr", ["linear_independent"]], ["mod", "theorem", "repr_eq", ["linear_independent"]], ["del", "theorem", "repr_eq_repr_of_subset", ["linear_independent"]], ["mod", "theorem", "repr_eq_single", ["linear_independent"]], ["mod", "theorem", "repr_ker", ["linear_independent"]], ["mod", "theorem", "repr_range", ["linear_independent"]], ["del", "theorem", "repr_supported", ["linear_independent"]], ["add", "theorem", "restrict_of_comp_subtype", ["linear_independent"]], ["del", "theorem", "supported_disjoint_ker", ["linear_independent"]], ["add", "theorem", "to_subtype_range", ["linear_independent"]], ["mod", "theorem", "total_comp_repr", ["linear_independent"]], ["mod", "def", "total_equiv", ["linear_independent"]], ["mod", "theorem", "total_repr", ["linear_independent"]], ["mod", "theorem", "unique", ["linear_independent"]], ["mod", "def", "linear_independent", []], ["mod", "theorem", "linear_independent_Union_finite", []], ["add", "theorem", "linear_independent_Union_finite_subtype", []], ["mod", "theorem", "linear_independent_Union_of_directed", []], ["mod", "theorem", "linear_independent_bUnion_of_directed", []], ["add", "theorem", "linear_independent_comp_subtype", []], ["add", "theorem", "linear_independent_comp_subtype_disjoint", []], ["mod", "theorem", "linear_independent_empty", []], ["add", "theorem", "linear_independent_empty_type", []], ["mod", "theorem", "linear_independent_iff", []], ["mod", "theorem", "linear_independent_iff_not_mem_span", []], ["mod", "theorem", "linear_independent_iff_total_on", []], ["add", "theorem", "linear_independent_inl_union_inr'", []], ["mod", "theorem", "linear_independent_of_finite", []], ["add", "theorem", "linear_independent_of_zero_eq_one", []], ["mod", "theorem", "linear_independent_singleton", []], ["add", "theorem", "linear_independent_span", []], ["add", "theorem", "linear_independent_subtype", []], ["add", "theorem", "linear_independent_subtype_disjoint", []], ["add", "theorem", "linear_independent_unique", []], ["del", "theorem", "linear_independent_image_iff", ["linear_map"]], ["add", "def", "module_equiv_finsupp", []], ["del", "def", "module_equiv_lc", []], ["add", "theorem", "ne_zero_of_linear_independent", []], ["mod", "theorem", "is_basis_fun", ["pi"]], ["add", "theorem", "is_basis_fun₀", ["pi"]], ["mod", "theorem", "is_basis_std_basis", ["pi"]], ["mod", "theorem", "linear_independent_std_basis", ["pi"]], ["add", "theorem", "surjective_of_linear_independent_of_span", []], ["mod", "theorem", "card_fintype'", ["vector_space"]], ["mod", "theorem", "card_fintype", ["vector_space"]], ["del", "theorem", "zero_not_mem_of_linear_independent", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_fun'", []], ["mod", "theorem", "dim_le_injective", []], ["mod", "theorem", "dim_quotient", []], ["mod", "theorem", "dim_range_of_surjective", []], ["mod", "theorem", "dim_span", []], ["mod", "theorem", "dim_span_of_finset", []], ["add", "theorem", "dim_span_set", []], ["mod", "theorem", "exists_is_basis_fintype", []], ["mod", "theorem", "le_span", ["is_basis"]], ["mod", "theorem", "mk_eq_dim", ["is_basis"]], ["add", "theorem", "mk_range_eq_dim", ["is_basis"]], ["mod", "theorem", "dim_eq", ["linear_equiv"]], ["mod", "theorem", "dim_eq_lift", ["linear_equiv"]], ["mod", "theorem", "mk_eq_mk_of_basis", []], ["mod", "theorem", "rank_finset_sum_le", []]]}, {"oldPath": "src/linear_algebra/dual.lean", "newPath": "src/linear_algebra/dual.lean", "changes": [["mod", "def", "coord_fun", ["is_basis"]], ["mod", "theorem", "coord_fun_eq_repr", ["is_basis"]], ["mod", "def", "dual_basis", ["is_basis"]], ["mod", "theorem", "dual_basis_is_basis", ["is_basis"]], ["mod", "theorem", "dual_dim_eq", ["is_basis"]], ["add", "def", "eval_finsupp_at", ["is_basis"]], ["del", "def", "eval_lc_at", ["is_basis"]], ["mod", "theorem", "to_dual_apply", ["is_basis"]], ["mod", "theorem", "to_dual_eq_repr", ["is_basis"]], ["mod", "def", "to_dual_equiv", ["is_basis"]], ["mod", "theorem", "to_dual_range", ["is_basis"]], ["mod", "theorem", "to_dual_to_dual", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": [["del", "theorem", "cardinal_lt_omega_of_dim_lt_omega", []], ["del", "theorem", "cardinal_mk_eq_cardinal_mk_field_pow_dim", []], ["del", "theorem", "eq_bot_iff_dim_eq_zero", []], ["del", "theorem", "equiv_of_dim_eq_dim", []], ["del", "theorem", "dim_eq", ["finsupp"]], ["del", "theorem", "is_basis_single", ["finsupp"]], ["mod", "theorem", "ker_lsingle", ["finsupp"]], ["mod", "theorem", "lapply_apply", ["finsupp"]], ["del", "theorem", "linear_independent_single", ["finsupp"]], ["mod", "def", "lmap_domain", ["finsupp"]], ["mod", "theorem", "lmap_domain_apply", ["finsupp"]], ["add", "theorem", "lmap_domain_comp", ["finsupp"]], ["add", "theorem", "lmap_domain_disjoint_ker", ["finsupp"]], ["add", "theorem", "lmap_domain_id", ["finsupp"]], ["add", "theorem", "lmap_domain_supported", ["finsupp"]], ["add", "theorem", "lmap_domain_total", ["finsupp"]], ["mod", "theorem", "lsingle_apply", ["finsupp"]], ["add", "def", "lsum", ["finsupp"]], ["add", "theorem", "lsum_apply", ["finsupp"]], ["del", "theorem", "mem_restrict_dom", ["finsupp"]], ["add", "theorem", "mem_span_iff_total", ["finsupp"]], ["add", "theorem", "mem_supported'", ["finsupp"]], ["add", "theorem", "mem_supported", ["finsupp"]], ["add", "theorem", "range_restrict_dom", ["finsupp"]], ["add", "theorem", "range_total", ["finsupp"]], ["mod", "def", "restrict_dom", ["finsupp"]], ["add", "theorem", "restrict_dom_apply", ["finsupp"]], ["add", "theorem", "restrict_dom_comp_subtype", ["finsupp"]], ["del", "def", "restrict_dom_equiv_finsupp", ["finsupp"]], ["add", "theorem", "single_mem_supported", ["finsupp"]], ["add", "theorem", "span_eq_map_total", ["finsupp"]], ["add", "def", "supported", ["finsupp"]], ["add", "theorem", "supported_Inter", ["finsupp"]], ["add", "theorem", "supported_Union", ["finsupp"]], ["add", "theorem", "supported_comap_lmap_domain", ["finsupp"]], ["add", "theorem", "supported_empty", ["finsupp"]], ["add", "theorem", "supported_eq_span_single", ["finsupp"]], ["add", "def", "supported_equiv_finsupp", ["finsupp"]], ["add", "theorem", "supported_mono", ["finsupp"]], ["add", "theorem", "supported_union", ["finsupp"]], ["add", "theorem", "supported_univ", ["finsupp"]], ["add", "theorem", "total_apply", ["finsupp"]], ["add", "theorem", "total_comap_domain", ["finsupp"]], ["add", "theorem", "total_comp", ["finsupp"]], ["add", "theorem", "total_emb_domain", ["finsupp"]], ["add", "theorem", "total_map_domain", ["finsupp"]], ["add", "theorem", "total_on_range", ["finsupp"]], ["add", "theorem", "total_range", ["finsupp"]], ["add", "theorem", "total_single", ["finsupp"]], ["del", "theorem", "injective_of_surjective", []], ["del", "theorem", "dim_mv_polynomial", ["mv_polynomial"]], ["del", "theorem", "is_basis_monomials", ["mv_polynomial"]], ["del", "theorem", "map_range_eq_map", ["mv_polynomial"]], ["del", "theorem", "mem_restrict_degree", ["mv_polynomial"]], ["del", "theorem", "mem_restrict_degree_iff_sup", ["mv_polynomial"]], ["del", "theorem", "mem_restrict_total_degree", ["mv_polynomial"]], ["del", "def", "restrict_degree", ["mv_polynomial"]], ["del", "def", "restrict_total_degree", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/finsupp_vector_space.lean", "changes": [["add", "theorem", "cardinal_lt_omega_of_dim_lt_omega", []], ["add", "theorem", "cardinal_mk_eq_cardinal_mk_field_pow_dim", []], ["add", "theorem", "eq_bot_iff_dim_eq_zero", []], ["add", "theorem", "equiv_of_dim_eq_dim", []], ["add", "theorem", "dim_eq", ["finsupp"]], ["add", "theorem", "is_basis_single", ["finsupp"]], ["add", "theorem", "linear_independent_single", ["finsupp"]], ["add", "theorem", "injective_of_surjective", []]]}, {"oldPath": "src/linear_algebra/linear_combination.lean", "newPath": null, "changes": [["del", "def", "apply", ["lc"]], ["del", "theorem", "apply_apply", ["lc"]], ["del", "theorem", "lsum_apply", ["lc"]], ["del", "theorem", "map_apply", ["lc"]], ["del", "theorem", "map_comp", ["lc"]], ["del", "theorem", "map_disjoint_ker", ["lc"]], ["del", "theorem", "map_id", ["lc"]], ["del", "theorem", "map_supported", ["lc"]], ["del", "theorem", "map_total", ["lc"]], ["del", "theorem", "mem_supported'", ["lc"]], ["del", "theorem", "mem_supported", ["lc"]], ["del", "theorem", "range_restrict_dom", ["lc"]], ["del", "def", "restrict_dom", ["lc"]], ["del", "theorem", "restrict_dom_apply", ["lc"]], ["del", "theorem", "restrict_dom_comp_subtype", ["lc"]], ["del", "theorem", "single_mem_supported", ["lc"]], ["del", "def", "supported", ["lc"]], ["del", "theorem", "supported_Inter", ["lc"]], ["del", "theorem", "supported_Union", ["lc"]], ["del", "theorem", "supported_comap_map", ["lc"]], ["del", "theorem", "supported_empty", ["lc"]], ["del", "theorem", "supported_eq_span_single", ["lc"]], ["del", "theorem", "supported_mono", ["lc"]], ["del", "theorem", "supported_union", ["lc"]], ["del", "theorem", "supported_univ", ["lc"]], ["del", "theorem", "total_apply", ["lc"]], ["del", "def", "total_on", ["lc"]], ["del", "theorem", "total_on_range", ["lc"]], ["del", "theorem", "total_range", ["lc"]], ["del", "theorem", "total_single", ["lc"]], ["del", "def", "lc", []], ["del", "theorem", "linear_eq_on", []], ["del", "theorem", "mem_span_iff_lc", []], ["del", "theorem", "span_eq_map_lc", []]]}, {"oldPath": "src/linear_algebra/matrix.lean", "newPath": "src/linear_algebra/matrix.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "nonempty_pempty", []], ["mod", "theorem", "not_nonempty_iff_imp_false", []]]}, {"oldPath": "src/ring_theory/adjoin.lean", "newPath": "src/ring_theory/adjoin.lean", "changes": []}, {"oldPath": "src/ring_theory/integral_closure.lean", "newPath": "src/ring_theory/integral_closure.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "lift_max", ["cardinal"]], ["add", "theorem", "mk_range_eq_of_inj", ["cardinal"]]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1562144522, "sha": "9a338853", "message": "chore(data/matrix): rows and columns the right way around (#1171)\n* chore(data/matrix): rows and columns the right way around\n* update matrix.lean", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": [["mod", "def", "col", ["matrix"]], ["mod", "def", "minor", ["matrix"]], ["mod", "def", "row", ["matrix"]]]}]}, {"timestamp": 1562115499, "sha": "fd5617c1", "message": "feat(measure_theory): Define Bochner integration (#1149)\n* Create .DS_Store\n* Revert \"Create .DS_Store\"\nThis reverts commit 5612886d493aef59205eddc5a34a75e6e5ba22c1.\n* Define bochner integral\n* Define bochner integral\n* Headings\n* Change used names\n* Fix styles; Get rid of redundant lemmas\n* Delete dash lines\n* changes\n* Fix everything\nThings remaining:\n* extend comments in headings\n* `integrable` predicate should include measurability\n* better proofs for simple_func_dense.lean\n* Fix everything\nThings remaining:\n* extend comments in headings\n* `integrable` predicate should include measurability\n* better proofs for simple_func_dense.lean\n* Remove redundant lemma\n* Fix styles", "changes": [{"oldPath": "src/algebra/CommRing/colimits.lean", "newPath": "src/algebra/CommRing/colimits.lean", "changes": [["mod", "theorem", "cocone_naturality_components", ["CommRing", "colimits"]]]}, {"oldPath": "src/algebra/Mon/colimits.lean", "newPath": "src/algebra/Mon/colimits.lean", "changes": [["mod", "theorem", "cocone_naturality_components", ["Mon", "colimits"]]]}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_map", ["finset"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "theorem", "is_linear_map_smul'", ["is_linear_map"]], ["mod", "theorem", "is_linear_map_smul", ["is_linear_map"]]]}, {"oldPath": "src/algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": [["add", "theorem", "inv_pos_of_nat", ["nat"]], ["add", "theorem", "one_div_pos_of_nat", ["nat"]]]}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "mul_rpow", ["real"]], ["mod", "theorem", "rpow_le_rpow", ["real"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_eq_abs", ["real"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "theorem", "postcompose_map_hom", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "ι_map_assoc", ["category_theory", "limits", "colim"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "ι_post_assoc", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "ι_pre_assoc", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["mod", "theorem", "types_limit_lift", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "theorem", "cast_succ_cast_lt", ["fin"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "image_sub", ["finset", "Ico"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "theorem", "support_add_eq", ["finsupp"]]]}, {"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": [["mod", "theorem", "holor_index_cons_decomp", ["holor"]], ["mod", "theorem", "mul_assoc", ["holor"]], ["mod", "theorem", "slice_add", ["holor"]]]}, {"oldPath": "src/data/lazy_list2.lean", "newPath": "src/data/lazy_list2.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "map_sub", ["list", "Ico"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["mod", "theorem", "monomial_add_single", ["mv_polynomial"]], ["mod", "theorem", "monomial_single_add", ["mv_polynomial"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "find_greatest_eq_zero", ["nat"]], ["add", "theorem", "find_greatest_of_ne_zero", ["nat"]], ["mod", "theorem", "mul_left_eq_self_iff", ["nat"]], ["mod", "theorem", "mul_right_eq_self_iff", ["nat"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "cast_add_one_pos", ["nat"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["mod", "def", "decidable_dvd_monic", ["polynomial"]], ["mod", "theorem", "leading_coeff_comp", ["polynomial"]]]}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": [["mod", "theorem", "nonempty_quotient_iff", []], ["mod", "theorem", "lift_beta", ["quotient"]], ["mod", "theorem", "lift_on_beta", ["quotient"]]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "coe_nnreal_eq", ["ennreal"]], ["mod", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["add", "theorem", "le_of_real_iff_to_real_le", ["ennreal"]], ["add", "theorem", "lt_of_real_iff_to_real_lt", ["ennreal"]], ["add", "theorem", "mem_Iio_self_add", ["ennreal"]], ["add", "theorem", "mem_Ioo_self_sub_add", ["ennreal"]], ["add", "theorem", "not_mem_Ioo_self_sub", ["ennreal"]], ["add", "theorem", "of_real_eq_coe_nnreal", ["ennreal"]], ["add", "theorem", "of_real_le_iff_le_to_real", ["ennreal"]], ["add", "theorem", "of_real_lt_iff_lt_to_real", ["ennreal"]], ["add", "theorem", "of_real_mul", ["ennreal"]], ["mod", "theorem", "sub_left_inj", ["ennreal"]], ["add", "theorem", "sub_self", ["ennreal"]], ["add", "theorem", "to_real_of_real_mul", ["ennreal"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["mod", "theorem", "abs_lt_real_iff_infinitesimal", ["hyperreal"]], ["mod", "theorem", "epsilon_lt_pos", ["hyperreal"]], ["mod", "theorem", "exists_st_iff_not_infinite", ["hyperreal"]], ["mod", "theorem", "exists_st_of_not_infinite", ["hyperreal"]], ["mod", "theorem", "gt_of_neg_of_infinitesimal", ["hyperreal"]], ["mod", "theorem", "infinite_iff_abs_lt_abs", ["hyperreal"]], ["mod", "theorem", "infinite_iff_infinite_abs", ["hyperreal"]], ["mod", "theorem", "infinite_iff_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_iff_infinite_pos_abs", ["hyperreal"]], ["mod", "theorem", "infinite_iff_infinitesimal_inv", ["hyperreal"]], ["mod", "theorem", "infinite_iff_not_exists_st", ["hyperreal"]], ["mod", "theorem", "infinite_mul_infinite", ["hyperreal"]], ["mod", "theorem", "infinite_mul_of_infinite_not_infinitesimal", ["hyperreal"]], ["mod", "theorem", "infinite_mul_of_not_infinitesimal_infinite", ["hyperreal"]], ["mod", "theorem", "infinite_neg_add_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_add_not_infinite", ["hyperreal"]], ["mod", "theorem", "infinite_neg_add_not_infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_neg_iff_infinite_and_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_iff_infinite_of_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_iff_infinite_pos_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_iff_infinitesimal_inv_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_mul_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_mul_infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_neg_mul_of_infinite_neg_not_infinitesimal_pos", ["hyperreal"]], ["mod", "theorem", "infinite_neg_mul_of_infinite_pos_not_infinitesimal_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_mul_of_not_infinitesimal_neg_infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_neg_mul_of_not_infinitesimal_pos_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_neg_neg_of_infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_neg_of_tendsto_bot", ["hyperreal"]], ["mod", "theorem", "infinite_of_infinitesimal_inv", ["hyperreal"]], ["mod", "theorem", "infinite_omega", ["hyperreal"]], ["mod", "theorem", "infinite_pos_abs_iff_infinite_abs", ["hyperreal"]], ["mod", "theorem", "infinite_pos_add_infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_add_not_infinite", ["hyperreal"]], ["mod", "theorem", "infinite_pos_add_not_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinite_and_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinite_neg_neg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinite_of_nonneg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinite_of_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_iff_infinitesimal_inv_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_mul_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_mul_infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_mul_of_infinite_neg_not_infinitesimal_neg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_mul_of_infinite_pos_not_infinitesimal_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_mul_of_not_infinitesimal_neg_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_mul_of_not_infinitesimal_pos_infinite_pos", ["hyperreal"]], ["mod", "theorem", "infinite_pos_neg_of_infinite_neg", ["hyperreal"]], ["mod", "theorem", "infinite_pos_of_tendsto_top", ["hyperreal"]], ["mod", "theorem", "infinite_pos_omega", ["hyperreal"]], ["mod", "theorem", "infinitesimal_add", ["hyperreal"]], ["mod", "theorem", "infinitesimal_def", ["hyperreal"]], ["mod", "theorem", "infinitesimal_epsilon", ["hyperreal"]], ["mod", "theorem", "infinitesimal_iff_infinite_inv", ["hyperreal"]], ["mod", "theorem", "infinitesimal_inv_of_infinite", ["hyperreal"]], ["mod", "theorem", "infinitesimal_mul", ["hyperreal"]], ["mod", "theorem", "infinitesimal_neg", ["hyperreal"]], ["mod", "theorem", "infinitesimal_neg_iff", ["hyperreal"]], ["mod", "theorem", "infinitesimal_neg_iff_infinite_neg_inv", ["hyperreal"]], ["mod", "theorem", "infinitesimal_pos_iff_infinite_pos_inv", ["hyperreal"]], ["mod", "theorem", "infinitesimal_sub_is_st", ["hyperreal"]], ["mod", "theorem", "infinitesimal_sub_st", ["hyperreal"]], ["mod", "theorem", "is_st_Sup", ["hyperreal"]], ["mod", "theorem", "is_st_add", ["hyperreal"]], ["mod", "theorem", "is_st_iff_abs_sub_lt_delta", ["hyperreal"]], ["mod", "theorem", "is_st_inj_real", ["hyperreal"]], ["mod", "theorem", "is_st_inv", ["hyperreal"]], ["mod", "theorem", "is_st_mul", ["hyperreal"]], ["mod", "theorem", "is_st_neg", ["hyperreal"]], ["mod", "theorem", "is_st_real_iff_eq", ["hyperreal"]], ["mod", "theorem", "is_st_refl_real", ["hyperreal"]], ["mod", "theorem", "is_st_st'", ["hyperreal"]], ["mod", "theorem", "is_st_st", ["hyperreal"]], ["mod", "theorem", "is_st_st_of_is_st", ["hyperreal"]], ["mod", "theorem", "is_st_symm_real", ["hyperreal"]], ["mod", "theorem", "is_st_trans_real", ["hyperreal"]], ["mod", "theorem", "lt_neg_of_pos_of_infinitesimal", ["hyperreal"]], ["mod", "theorem", "lt_of_pos_of_infinitesimal", ["hyperreal"]], ["mod", "theorem", "lt_of_st_lt", ["hyperreal"]], ["mod", "theorem", "ne_zero_of_infinite", ["hyperreal"]], ["mod", "theorem", "not_infinite_add", ["hyperreal"]], ["mod", "theorem", "not_infinite_iff_exist_lt_gt", ["hyperreal"]], ["mod", "theorem", "not_infinite_mul", ["hyperreal"]], ["mod", "theorem", "not_infinite_neg", ["hyperreal"]], ["mod", "theorem", "not_infinite_neg_add_infinite_pos", ["hyperreal"]], ["mod", "theorem", "not_infinite_neg_of_infinite_pos", ["hyperreal"]], ["mod", "theorem", "not_infinite_of_exists_st", ["hyperreal"]], ["mod", "theorem", "not_infinite_of_infinitesimal", ["hyperreal"]], ["mod", "theorem", "not_infinite_pos_add_infinite_neg", ["hyperreal"]], ["mod", "theorem", "not_infinite_pos_of_infinite_neg", ["hyperreal"]], ["mod", "theorem", "not_infinitesimal_of_infinite", ["hyperreal"]], ["mod", "theorem", "not_infinitesimal_of_infinite_neg", ["hyperreal"]], ["mod", "theorem", "not_infinitesimal_of_infinite_pos", ["hyperreal"]], ["mod", "theorem", "not_real_of_infinite", ["hyperreal"]], ["mod", "theorem", "not_real_of_infinitesimal_ne_zero", ["hyperreal"]], ["mod", "theorem", "st_add", ["hyperreal"]], ["mod", "theorem", "st_infinite", ["hyperreal"]], ["mod", "theorem", "st_inv", ["hyperreal"]], ["mod", "theorem", "st_le_of_le", ["hyperreal"]], ["mod", "theorem", "st_mul", ["hyperreal"]], ["mod", "theorem", "st_neg", ["hyperreal"]], ["mod", "theorem", "st_of_is_st", ["hyperreal"]], ["mod", "theorem", "zero_iff_infinitesimal_real", ["hyperreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "le_of_real_iff_coe_le", ["nnreal"]], ["add", "theorem", "lt_of_real_iff_coe_lt", ["nnreal"]], ["add", "theorem", "of_real_le_iff_le_coe", ["nnreal"]], ["add", "theorem", "of_real_lt_iff_lt_coe", ["nnreal"]], ["add", "theorem", "of_real_mul", ["nnreal"]]]}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": [["mod", "theorem", "core_id", ["rel"]], ["mod", "def", "rel", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "range_coe_subtype", ["set"]], ["add", "theorem", "range_ite_subset'", ["set"]], ["add", "theorem", "range_ite_subset", ["set"]]]}, {"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "def", "enumerate_countable", ["set"]], ["add", "theorem", "subset_range_enumerate", ["set"]]]}, {"oldPath": "src/data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": [["add", "theorem", "disjoint_disjointed'", ["set"]], ["add", "theorem", "disjointed_subset", ["set"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_range_const", ["set"]], ["add", "theorem", "finite_range_find_greatest", ["set"]], ["add", "theorem", "finite_range_ite", ["set"]], ["add", "theorem", "range_find_greatest_subset", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["mod", "theorem", "Union_subset_iff", ["set"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_map_le", []]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["mod", "theorem", "restrict_eq", ["function"]]]}, {"oldPath": null, "newPath": "src/measure_theory/ae_eq_fun.lean", "changes": [["add", "def", "comp", ["measure_theory", "ae_eq_fun"]], ["add", "def", "comp_edist", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp_edist_self", ["measure_theory", "ae_eq_fun"]], ["add", "def", "comp₂", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "comp₂_mk_mk", ["measure_theory", "ae_eq_fun"]], ["add", "def", "const", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_eq_add_add", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_mk_mk'", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_mk_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "edist_smul", ["measure_theory", "ae_eq_fun"]], ["add", "def", "eintegral", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "eintegral_add", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "eintegral_eq_zero_iff", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "eintegral_le_eintegral", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "eintegral_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "eintegral_zero", ["measure_theory", "ae_eq_fun"]], ["add", "def", "lift_pred", ["measure_theory", "ae_eq_fun"]], ["add", "def", "lift_rel", ["measure_theory", "ae_eq_fun"]], ["add", "def", "lift_rel_mk_mk", ["measure_theory", "ae_eq_fun"]], ["add", "def", "mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_add_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "mk_le_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "neg_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "one_def", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "quot_mk_eq_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "smul_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "zero_def", ["measure_theory", "ae_eq_fun"]], ["add", "def", "ae_eq_fun", ["measure_theory"]]]}, {"oldPath": null, "newPath": "src/measure_theory/bochner_integration.lean", "changes": [["add", "def", "integral", ["measure_theory"]], ["add", "def", "integral", ["measure_theory", "l1"]], ["add", "theorem", "dense_embedding_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "exists_simple_func_near", ["measure_theory", "l1", "simple_func"]], ["add", "def", "integral", ["measure_theory", "l1", "simple_func"]], ["add", "def", "mk", ["measure_theory", "l1", "simple_func"]], ["add", "def", "to_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "uniform_continuous_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "theorem", "uniform_embedding_of_simple_func", ["measure_theory", "l1", "simple_func"]], ["add", "def", "simple_func", ["measure_theory", "l1"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_of_real", ["ennreal"]], ["add", "theorem", "is_measurable_ball", ["measure_theory"]], ["add", "theorem", "is_measurable_singleton", ["measure_theory"]], ["add", "theorem", "measurable_coe_nnnorm", ["measure_theory"]], ["add", "theorem", "measurable_dist'", ["measure_theory"]], ["add", "theorem", "measurable_dist", ["measure_theory"]], ["add", "theorem", "measurable_edist'", ["measure_theory"]], ["add", "theorem", "measurable_edist", ["measure_theory"]], ["add", "theorem", "measurable_nndist'", ["measure_theory"]], ["add", "theorem", "measurable_nndist", ["measure_theory"]], ["add", "theorem", "measurable_nnnorm'", ["measure_theory"]], ["add", "theorem", "measurable_nnnorm", ["measure_theory"]], ["add", "theorem", "measurable_norm'", ["measure_theory"]], ["add", "theorem", "measurable_norm", ["measure_theory"]], ["add", "theorem", "measurable_smul'", ["measure_theory"]], ["add", "theorem", "measurable_smul", ["measure_theory"]], ["add", "theorem", "measurable_of_real", ["nnreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/l1_space.lean", "changes": [["add", "def", "integrable", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_add", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_mk", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_neg", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_smul", ["measure_theory", "ae_eq_fun"]], ["add", "theorem", "integrable_zero", ["measure_theory", "ae_eq_fun"]], ["add", "def", "integrable", ["measure_theory"]], ["add", "theorem", "integrable_add", ["measure_theory"]], ["add", "theorem", "integrable_neg", ["measure_theory"]], ["add", "theorem", "integrable_smul", ["measure_theory"]], ["add", "theorem", "integrable_zero", ["measure_theory"]], ["add", "theorem", "add_def", ["measure_theory", "l1"]], ["add", "theorem", "dist_def", ["measure_theory", "l1"]], ["add", "def", "mk", ["measure_theory", "l1"]], ["add", "theorem", "norm_def", ["measure_theory", "l1"]], ["add", "theorem", "smul_def", ["measure_theory", "l1"]], ["add", "theorem", "zero_def", ["measure_theory", "l1"]], ["add", "def", "l1", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_add", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_neg", ["measure_theory"]], ["add", "theorem", "lintegral_nnnorm_zero", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_find_greatest", []], ["add", "theorem", "measurable_from_nat", []], ["add", "theorem", "measurable_to_nat", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": null, "newPath": "src/measure_theory/simple_func_dense.lean", "changes": [["add", "theorem", "simple_func_sequence_tendsto'", ["measure_theory"]], ["add", "theorem", "simple_func_sequence_tendsto", ["measure_theory"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "bdd_below_bot", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "mem_infi", ["filter"]], ["mod", "theorem", "mem_infi_finite", ["filter"]], ["mod", "theorem", "univ_mem_sets'", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "def", "of", ["filter", "filter_product"]], ["mod", "theorem", "of_inj", ["filter", "filter_product"]]]}, {"oldPath": "src/order/filter/lift.lean", "newPath": "src/order/filter/lift.lean", "changes": []}, {"oldPath": "src/order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["mod", "theorem", "degree_le_mono", ["polynomial"]]]}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/solve_by_elim.lean", "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "liminf_eq_of_tendsto", []], ["mod", "theorem", "limsup_eq_of_tendsto", []], ["mod", "theorem", "mem_of_is_glb_of_is_closed", []], ["mod", "theorem", "mem_of_is_lub_of_is_closed", []], ["mod", "theorem", "tendsto_of_liminf_eq_limsup", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "dense_of_subset_dense", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "Icc_mem_nhds", ["ennreal"]], ["add", "theorem", "is_open_Ico_zero", ["ennreal"]], ["add", "theorem", "nhds_of_ne_top", ["ennreal"]], ["add", "theorem", "nhds_top", ["ennreal"]], ["add", "theorem", "nhds_zero", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "tendsto_of_real", ["nnreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "continuous_nndist", []], ["add", "theorem", "mem_closure_range_iff", ["metric"]], ["add", "theorem", "mem_closure_range_iff_nat", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "ball_subset", ["emetric"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "uniformity_lift_le_comp", []]]}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": [["mod", "theorem", "uniform_continuous_map", ["uniform_space", "separation_quotient"]]]}, {"oldPath": "test/ext.lean", "newPath": "test/ext.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": [["mod", "def", "tidy_test_1", ["tidy", "test"]]]}]}, {"timestamp": 1562073069, "sha": "1ef2c2df", "message": "feat(data/list/basic): filter_true and filter_false (#1169)\n* feat(data/list/basic): filter_true and filter_false\n* Update basic.lean\n* Update basic.lean\n* Update basic.lean\n* Update basic.lean", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "filter_false", ["list"]], ["add", "theorem", "filter_true", ["list"]]]}]}, {"timestamp": 1562066903, "sha": "b4989a04", "message": "compute the cardinality of real (#1096)\n* compute the cardinality of real\n* minor improvements\n* fix(data/rat/denumerable): change namespace of of_rat\n* style(src/topology/algebra/infinite_sum): structure proof", "changes": [{"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": [["add", "def", "pnat_equiv_nat", ["equiv"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "not_nonempty_fintype", []]]}, {"oldPath": "src/data/rat/denumerable.lean", "newPath": "src/data/rat/denumerable.lean", "changes": [["add", "theorem", "mk_rat", ["cardinal"]]]}, {"oldPath": null, "newPath": "src/data/real/cardinality.lean", "changes": [["add", "def", "cantor_function", ["cardinal"]], ["add", "def", "cantor_function_aux", ["cardinal"]], ["add", "theorem", "cantor_function_aux_eq", ["cardinal"]], ["add", "theorem", "cantor_function_aux_ff", ["cardinal"]], ["add", "theorem", "cantor_function_aux_nonneg", ["cardinal"]], ["add", "theorem", "cantor_function_aux_succ", ["cardinal"]], ["add", "theorem", "cantor_function_aux_tt", ["cardinal"]], ["add", "theorem", "cantor_function_le", ["cardinal"]], ["add", "theorem", "cantor_function_succ", ["cardinal"]], ["add", "theorem", "increasing_cantor_function", ["cardinal"]], ["add", "theorem", "injective_cantor_function", ["cardinal"]], ["add", "theorem", "mk_real", ["cardinal"]], ["add", "theorem", "not_countable_real", ["cardinal"]], ["add", "theorem", "summable_cantor_function", ["cardinal"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "denumerable_iff", ["cardinal"]], ["add", "theorem", "infinite_iff", ["cardinal"]], ["add", "theorem", "mk_int", ["cardinal"]], ["add", "theorem", "mk_nat", ["cardinal"]], ["add", "theorem", "mk_pnat", ["cardinal"]], ["mod", "theorem", "mul_def", ["cardinal"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "power_self_eq", ["cardinal"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "tsum_eq_zero_add", []]]}]}, {"timestamp": 1562041746, "sha": "57b57b38", "message": "feat(data/equiv/basic): improve arrow_congr, define conj (#1119)\n* feat(data/equiv/basic): improve arrow_congr, define conj\n- redefine `equiv.arrow_congr` without an enclosing `match`\n- prove some trivial lemmas about `equiv.arrow_congr`\n- define `equiv.conj`, and prove trivial lemmas about it\n* chore(data/equiv/basic): add @[simp]\nAlso split some long lines, and swap lhs with rhs in a few lemmas.\n* Reorder, drop TODO", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "arrow_congr", ["equiv"]], ["add", "theorem", "arrow_congr_apply", ["equiv"]], ["add", "theorem", "arrow_congr_comp", ["equiv"]], ["add", "theorem", "arrow_congr_refl", ["equiv"]], ["add", "theorem", "arrow_congr_symm", ["equiv"]], ["add", "theorem", "arrow_congr_trans", ["equiv"]], ["add", "def", "conj", ["equiv"]], ["add", "theorem", "conj_apply", ["equiv"]], ["add", "theorem", "conj_comp", ["equiv"]], ["add", "theorem", "conj_refl", ["equiv"]], ["add", "theorem", "conj_symm", ["equiv"]], ["add", "theorem", "conj_trans", ["equiv"]]]}]}, {"timestamp": 1562009744, "sha": "a2c291de", "message": "feat(data/mv_polynomial): miscellaneous lemmas on eval, rename, etc (#1134)", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "C_eq_coe_nat", ["mv_polynomial"]], ["add", "theorem", "C_pow", ["mv_polynomial"]], ["mod", "theorem", "coeff_X", ["mv_polynomial"]], ["add", "theorem", "eval_rename_prodmk", ["mv_polynomial"]], ["add", "theorem", "eval₂_assoc", ["mv_polynomial"]], ["add", "theorem", "eval₂_congr", ["mv_polynomial"]], ["mod", "theorem", "eval₂_eta", ["mv_polynomial"]], ["mod", "theorem", "eval₂_mul", ["mv_polynomial"]], ["mod", "theorem", "eval₂_pow", ["mv_polynomial"]], ["add", "theorem", "eval₂_prod", ["mv_polynomial"]], ["add", "theorem", "eval₂_rename", ["mv_polynomial"]], ["add", "theorem", "eval₂_rename_prodmk", ["mv_polynomial"]], ["add", "theorem", "eval₂_sum", ["mv_polynomial"]], ["add", "theorem", "ext_iff", ["mv_polynomial"]], ["add", "theorem", "map_injective", ["mv_polynomial"]], ["add", "theorem", "map_pow", ["mv_polynomial"]], ["add", "theorem", "rename_eval₂", ["mv_polynomial"]], ["add", "theorem", "rename_prodmk_eval₂", ["mv_polynomial"]]]}]}, {"timestamp": 1562003858, "sha": "fcfa2a40", "message": "refactor(set_theory/ordinal): restate well_ordering_thm (#1115)\nDefine the relation rather than using an `exists` statement", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "def", "well_ordering_rel", []], ["del", "theorem", "well_ordering_thm", []]]}]}, {"timestamp": 1562000472, "sha": "f0bf43b6", "message": "feat(order/zorn): chain.image (#1084)\n* feat(order/zorn): chain.image\n* golf", "changes": [{"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": [["add", "theorem", "image", ["zorn", "chain"]]]}]}, {"timestamp": 1561827388, "sha": "469da294", "message": "feat(data/list/basic): map_nil and map_eq_nil (#1161)\n* feat(data/list/basic): map_nil and map_eq_nil\n* Update basic.lean\n* make Simon's changes", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "map_eq_nil", ["list"]]]}]}, {"timestamp": 1561814936, "sha": "0858157a", "message": "refactor(category_theory/category): reorder arguments of `End.has_mul` (#1128)\n* Reorder arguments of `End.has_mul` and `Aut.has_mul`, adjust `category/fold`\n* clean up proofs in `category.fold`", "changes": [{"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": [["add", "def", "get", ["monoid", "foldl"]], ["mod", "def", "mk", ["monoid", "foldl"]], ["mod", "def", "foldl", ["monoid"]], ["mod", "def", "get", ["monoid", "foldr"]], ["mod", "def", "mk", ["monoid", "foldr"]], ["mod", "def", "foldr", ["monoid"]], ["add", "def", "get", ["monoid", "mfoldl"]], ["mod", "def", "mk", ["monoid", "mfoldl"]], ["mod", "def", "mfoldl", ["monoid"]], ["mod", "def", "get", ["monoid", "mfoldr"]], ["mod", "def", "mk", ["monoid", "mfoldr"]], ["add", "theorem", "unop_of_free_monoid", ["traversable", "foldl"]], ["del", "theorem", "unop_of_free_monoid", ["traversable", "foldr"]], ["add", "theorem", "unop_of_free_monoid", ["traversable", "mfoldl"]], ["del", "theorem", "unop_of_free_monoid", ["traversable", "mfoldr"]]]}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["mod", "theorem", "mul_def", ["category_theory", "End"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": [["add", "theorem", "op_inj_iff", ["opposite"]], ["add", "theorem", "unop_inj_iff", ["opposite"]]]}]}, {"timestamp": 1561811473, "sha": "e3103498", "message": "refactor(ring_theory/ideals): refactor local rings, add local ring homs (#1102)\n* WIP\n* refactor(ring_theory/ideals): refactor local rings, add local ring homs\n* residue_field.map is a field hom\n* make is_local_ring_hom extends is_ring_hom\n* refactor local_ring\n* tiny changes\n* Bump instance search depth", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "theorem", "coe_subset_nonunits", []], ["add", "theorem", "exists_max_ideal_of_mem_nonunits", []], ["mod", "theorem", "is_coprime_def", ["ideal"]], ["mod", "theorem", "is_coprime_self", ["ideal"]], ["mod", "theorem", "mem_span_pair", ["ideal"]], ["del", "def", "zero_ne_one", ["is_local_ring"]], ["mod", "def", "is_local_ring", []], ["add", "theorem", "is_unit_of_map_unit", []], ["add", "def", "local_of_is_local_ring", []], ["add", "def", "local_of_nonunits_ideal", []], ["del", "theorem", "local_of_nonunits_ideal", []], ["add", "def", "local_of_unique_max_ideal", []], ["add", "def", "local_of_unit_or_unit_one_sub", []], ["add", "theorem", "is_unit_of_mem_nonunits_one_sub_self", ["local_ring"]], ["add", "theorem", "is_unit_one_sub_self_of_mem_nonunits", ["local_ring"]], ["add", "theorem", "is_unit_or_is_unit_one_sub_self", ["local_ring"]], ["add", "theorem", "max_ideal_unique", ["local_ring"]], ["add", "theorem", "mem_nonunits_ideal", ["local_ring"]], ["add", "theorem", "nonunits_add", ["local_ring"]], ["add", "def", "nonunits_ideal", ["local_ring"]], ["add", "def", "residue_field", ["local_ring"]], ["add", "theorem", "map_nonunit", []], ["del", "theorem", "mem_nonunits_ideal", []], ["mod", "theorem", "mem_nonunits_iff", []], ["mod", "theorem", "mul_mem_nonunits_left", []], ["mod", "theorem", "mul_mem_nonunits_right", []], ["mod", "def", "nonunits", []], ["del", "def", "nonunits_ideal", []], ["mod", "theorem", "one_not_mem_nonunits", []], ["mod", "theorem", "zero_mem_nonunits", []]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1561734660, "sha": "4a5a1a58", "message": "fix(data/list/min_max): correct names of mem_maximum and mem_minimum (#1162)\n* fix(data/list/min_max): correct names of mem_maximum and mem_minimum\n* Update denumerable.lean", "changes": [{"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": [["add", "theorem", "maximum_mem", ["list"]], ["del", "theorem", "mem_maximum", ["list"]], ["del", "theorem", "mem_minimum", ["list"]], ["add", "theorem", "minimum_mem", ["list"]]]}]}, {"timestamp": 1561712995, "sha": "7d56447e", "message": "feat(logic/unique): fin 1 is unique (#1158)", "changes": [{"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}]}, {"timestamp": 1561633949, "sha": "6bc930af", "message": "chore(src/tactic/interactive): `convert` docstring (#1148)\n* chore(src/tactic/interactive): `convert` docstring \nThe `using` option to `convert` was not mentioned in the docstring, and I often struggle to remember the (perhaps slightly exotic?) `using` catchphrase\n* Update src/tactic/interactive.lean\nCo-Authored-By: Johan Commelin \n* Update interactive.lean", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1561551093, "sha": "9b0fd362", "message": "feat(data/fintype): unique.fintype (#1154)", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}]}, {"timestamp": 1561473039, "sha": "7484ab44", "message": "fix(data/matrix): add brackets to mul_neg and neg_mul to correct statement (#1151)\n* fix(data/matrix): add brackets to mul_neg and neg_mul to correct statement\nEach side of `mul_neg` was identical.\n* fix", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": []}]}, {"timestamp": 1561467633, "sha": "a2aeabbb", "message": "feat(data/finset): length_sort (#1150)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "length_sort", ["finset"]]]}, {"oldPath": "src/data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": [["add", "theorem", "length_merge_sort", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "length_sort", ["multiset"]]]}]}, {"timestamp": 1561470842, "sha": "c4a4f795", "message": "feat(algebra/pi_instances): pi.ordered_comm_group (#1152)", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}]}, {"timestamp": 1561379631, "sha": "c7ee1104", "message": "feat(meta/expr): `simp` and `dsimp` an expr (#1147)\n* feat(meta/expr): `simp` and `dsimp` an expr\n* removing def that we don't need yet", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1561255316, "sha": "d7283d7f", "message": "feat(string): `split_on` a `char` (#1145)\n* lib: string\n* type", "changes": [{"oldPath": "src/data/string/defs.lean", "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "split_on", ["string"]]]}]}, {"timestamp": 1561019431, "sha": "a35d6824", "message": "feat(topology/order): more facts on continuous_on (#1140)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "inv", ["continuous_on"]], ["add", "theorem", "sub", ["continuous_on"]]]}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "mul", ["continuous_on"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "nhds_within_le_of_mem", []], ["add", "theorem", "nhds_within_restrict''", []], ["add", "theorem", "self_mem_nhds_within", []]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "comp_continuous_on", ["continuous"]], ["add", "theorem", "continuous_at", ["continuous"]], ["add", "theorem", "preimage_mem_nhds", ["continuous_at"]], ["add", "theorem", "preimage_closed_of_closed", ["continuous_on"]], ["add", "theorem", "continuous_on_iff_is_closed", []], ["add", "theorem", "continuous_on_open_iff", []], ["add", "theorem", "continuous_on_open_of_generate_from", []], ["add", "theorem", "congr_of_mem_nhds_within", ["continuous_within_at"]], ["add", "theorem", "continuous_at", ["continuous_within_at"]], ["add", "theorem", "preimage_mem_nhds_within", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_inter'", []], ["add", "theorem", "continuous_within_at_inter", []]]}]}, {"timestamp": 1560978028, "sha": "e598894d", "message": "chore(topology/*): reverse order on topological and uniform spaces (#1138)\n* chore(topology/*): reverse order on topological and uniform spaces\n* fix(topology/order): private lemma hiding partial order oscillation,\nfollowing Mario's suggestion\n* change a temporary name\nCo-Authored-By: Johan Commelin \n* forgotten rename", "changes": [{"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["mod", "theorem", "measurable_sub", ["ennreal"]], ["mod", "theorem", "measurable_add", ["nnreal"]], ["mod", "theorem", "measurable_mul", ["nnreal"]], ["mod", "theorem", "measurable_sub", ["nnreal"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_pair", ["lattice"]], ["add", "theorem", "supr_pair", ["lattice"]]]}, {"oldPath": "src/topology/Top/adjunctions.lean", "newPath": "src/topology/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/topology/Top/basic.lean", "newPath": "src/topology/Top/basic.lean", "changes": []}, {"oldPath": "src/topology/Top/limits.lean", "newPath": "src/topology/Top/limits.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "continuous_sub'", ["nnreal"]], ["mod", "theorem", "continuous_sub", ["nnreal"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "coinduced_bot", []], ["del", "theorem", "coinduced_inf", []], ["del", "theorem", "coinduced_infi", []], ["add", "theorem", "coinduced_le_iff_le_induced", []], ["add", "theorem", "coinduced_sup", []], ["add", "theorem", "coinduced_supr", []], ["del", "theorem", "coinduced_top", []], ["mod", "theorem", "continuous_Inf_dom", []], ["mod", "theorem", "continuous_Inf_rng", []], ["mod", "theorem", "continuous_Sup_dom", []], ["mod", "theorem", "continuous_Sup_rng", []], ["mod", "theorem", "continuous_bot", []], ["add", "theorem", "continuous_iff_coinduced_le", []], ["del", "theorem", "continuous_iff_induced_le", []], ["del", "theorem", "continuous_iff_le_coinduced", []], ["add", "theorem", "continuous_iff_le_induced", []], ["del", "theorem", "continuous_inf_dom", []], ["add", "theorem", "continuous_inf_dom_left", []], ["add", "theorem", "continuous_inf_dom_right", []], ["add", "theorem", "continuous_inf_rng", []], ["del", "theorem", "continuous_inf_rng_left", []], ["del", "theorem", "continuous_inf_rng_right", []], ["mod", "theorem", "continuous_infi_dom", []], ["mod", "theorem", "continuous_infi_rng", []], ["add", "theorem", "continuous_sup_dom", []], ["del", "theorem", "continuous_sup_dom_left", []], ["del", "theorem", "continuous_sup_dom_right", []], ["del", "theorem", "continuous_sup_rng", []], ["add", "theorem", "continuous_sup_rng_left", []], ["add", "theorem", "continuous_sup_rng_right", []], ["mod", "theorem", "continuous_supr_dom", []], ["mod", "theorem", "continuous_supr_rng", []], ["mod", "theorem", "continuous_top", []], ["add", "theorem", "eq_bot_of_singletons_open", []], ["mod", "theorem", "eq_of_nhds_eq_nhds", []], ["del", "theorem", "eq_top_of_singletons_open", []], ["add", "theorem", "gc_coinduced_induced", []], ["del", "theorem", "gc_induced_coinduced", []], ["del", "theorem", "generate_from_le", []], ["del", "theorem", "generate_from_le_iff_subset_is_open", []], ["del", "theorem", "induced_bot", []], ["add", "theorem", "induced_inf", []], ["add", "theorem", "induced_infi", []], ["del", "theorem", "induced_le_iff_le_coinduced", []], ["del", "theorem", "induced_sup", []], ["del", "theorem", "induced_supr", []], ["add", "theorem", "induced_top", []], ["mod", "theorem", "is_closed_infi_iff", []], ["del", "theorem", "is_open_infi_iff", []], ["add", "theorem", "is_open_supr_iff", []], ["add", "theorem", "le_generate_from", []], ["add", "theorem", "le_generate_from_iff_subset_is_open", []], ["mod", "theorem", "le_of_nhds_le_nhds", []], ["add", "theorem", "nhds_Inf", []], ["del", "theorem", "nhds_Sup", []], ["mod", "theorem", "nhds_bot", []], ["add", "theorem", "nhds_inf", []], ["add", "theorem", "nhds_infi", []], ["del", "theorem", "nhds_sup", []], ["del", "theorem", "nhds_supr", []], ["mod", "theorem", "nhds_top", []], ["add", "def", "tmp_complete_lattice", []], ["add", "def", "tmp_order", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": [["mod", "theorem", "dense_embedding_pure", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "inf_uniformity", []], ["add", "theorem", "infi_uniformity", []], ["del", "theorem", "sup_uniformity", []], ["del", "theorem", "supr_uniformity", []], ["add", "theorem", "to_topological_space_Inf", []], ["del", "theorem", "to_topological_space_Sup", []], ["mod", "theorem", "to_topological_space_bot", []], ["add", "theorem", "to_topological_space_inf", []], ["add", "theorem", "to_topological_space_infi", []], ["del", "theorem", "to_topological_space_sup", []], ["del", "theorem", "to_topological_space_supr", []], ["mod", "theorem", "to_topological_space_top", []]]}, {"oldPath": "src/topology/uniform_space/pi.lean", "newPath": "src/topology/uniform_space/pi.lean", "changes": []}]}, {"timestamp": 1560931398, "sha": "b1cb48d1", "message": "feat(data/set): simple lemmas, renaming (#1137)\n* feat(data/set): simple lemmas, renaming\n* improve projection lemmas\n* arguments order", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "fst_image_prod", ["set"]], ["add", "theorem", "fst_image_prod_subset", ["set"]], ["mod", "theorem", "preimage_id", ["set"]], ["add", "theorem", "snd_image_prod", ["set"]], ["add", "theorem", "snd_image_prod_subset", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "Inter_inter", ["set"]], ["add", "theorem", "Union_diff", ["set"]], ["add", "theorem", "Union_inter", ["set"]], ["add", "theorem", "Union_union", ["set"]], ["add", "theorem", "bUnion_inter", ["set"]], ["add", "theorem", "diff_Inter", ["set"]], ["del", "theorem", "diff_Inter_left", ["set"]], ["add", "theorem", "diff_Union", ["set"]], ["del", "theorem", "diff_Union_left", ["set"]], ["del", "theorem", "diff_Union_right", ["set"]], ["add", "theorem", "inter_Inter", ["set"]], ["del", "theorem", "inter_Inter_left", ["set"]], ["del", "theorem", "inter_Inter_right", ["set"]], ["add", "theorem", "inter_Union", ["set"]], ["del", "theorem", "inter_Union_left", ["set"]], ["del", "theorem", "inter_Union_right", ["set"]], ["add", "theorem", "inter_bUnion", ["set"]], ["add", "theorem", "union_Inter", ["set"]], ["del", "theorem", "union_Inter_left", ["set"]], ["add", "theorem", "union_Union", ["set"]], ["del", "theorem", "union_Union_left", ["set"]], ["del", "theorem", "union_Union_right", ["set"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "limsup_lintegral_le", ["measure_theory"]], ["mod", "theorem", "lintegral_supr_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "all_ae_of_all", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}]}, {"timestamp": 1560895590, "sha": "235b8992", "message": "fix(category_theory/types): rename lemma `ulift_functor.map` (#1133)\n* fix(category_theory/types): avoid shadowing `ulift_functor.map` by a lemma\nNow we can use `ulift_functor.map` in the sense `functor.map ulift_functor`.\n* `ulift_functor.map_spec` → `ulift_functor_map`\nas suggested by @semorrison in https://github.com/leanprover-community/mathlib/pull/1133#pullrequestreview-250179914", "changes": [{"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["del", "theorem", "map", ["category_theory", "ulift_functor"]], ["add", "theorem", "ulift_functor_map", ["category_theory"]]]}]}, {"timestamp": 1560776995, "sha": "d8d25e9a", "message": "refactor(analysis/normed_space/deriv): split and move to calculus folder (#1135)", "changes": [{"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/calculus/deriv.lean", "changes": [["del", "theorem", "unique_diff_on", ["is_open"]], ["del", "theorem", "unique_diff_within_at", ["is_open"]], ["del", "theorem", "lim_zero", ["tangent_cone_at"]], ["del", "def", "tangent_cone_at", []], ["del", "theorem", "tangent_cone_inter_open", []], ["del", "theorem", "tangent_cone_mono", []], ["del", "theorem", "tangent_cone_univ", []], ["del", "def", "unique_diff_on", []], ["del", "theorem", "unique_diff_on_inter", []], ["del", "def", "unique_diff_within_at", []], ["del", "theorem", "unique_diff_within_at_inter", []], ["del", "theorem", "unique_diff_within_univ_at", []]]}, {"oldPath": null, "newPath": "src/analysis/calculus/tangent_cone.lean", "changes": [["add", "theorem", "unique_diff_on", ["is_open"]], ["add", "theorem", "unique_diff_within_at", ["is_open"]], ["add", "theorem", "lim_zero", ["tangent_cone_at"]], ["add", "def", "tangent_cone_at", []], ["add", "theorem", "tangent_cone_inter_open", []], ["add", "theorem", "tangent_cone_mono", []], ["add", "theorem", "tangent_cone_univ", []], ["add", "def", "unique_diff_on", []], ["add", "theorem", "unique_diff_on_inter", []], ["add", "def", "unique_diff_within_at", []], ["add", "theorem", "unique_diff_within_at_inter", []], ["add", "theorem", "unique_diff_within_univ_at", []]]}]}, {"timestamp": 1560713323, "sha": "7b715eb6", "message": "Direct limit of modules, abelian groups, rings, and fields. (#754)\n* stuff\n* stuff\n* more stuff\n* pre merge commit\n* prove of_zero.exact\n* remove silly rewrite\n* slightly shorten proof\n* direct limit of modules\n* upgrade mathlib\n* direct limit of rings\n* direct limit of fields (WIP)\n* trying to prove zero_exact for rings\n* use sqrt 2 instead of F4\n* direct limit of field\n* cleanup for mathlib\n* remove ununsed lemmas\n* clean up\n* docstrings\n* local\n* fix build\n* Replace real with polynomial int in proof\n* Update basic.lean", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "exists_le", ["finset"]]]}, {"oldPath": null, "newPath": "src/algebra/direct_limit.lean", "changes": [["add", "def", "directed_system", ["add_comm_group", "direct_limit"]], ["add", "def", "lift", ["add_comm_group", "direct_limit"]], ["add", "theorem", "lift_add", ["add_comm_group", "direct_limit"]], ["add", "theorem", "lift_neg", ["add_comm_group", "direct_limit"]], ["add", "theorem", "lift_of", ["add_comm_group", "direct_limit"]], ["add", "theorem", "lift_sub", ["add_comm_group", "direct_limit"]], ["add", "theorem", "lift_unique", ["add_comm_group", "direct_limit"]], ["add", "theorem", "lift_zero", ["add_comm_group", "direct_limit"]], ["add", "theorem", "zero_exact", ["add_comm_group", "direct_limit", "of"]], ["add", "def", "of", ["add_comm_group", "direct_limit"]], ["add", "theorem", "of_add", ["add_comm_group", "direct_limit"]], ["add", "theorem", "of_f", ["add_comm_group", "direct_limit"]], ["add", "theorem", "of_neg", ["add_comm_group", "direct_limit"]], ["add", "theorem", "of_sub", ["add_comm_group", "direct_limit"]], ["add", "theorem", "of_zero", ["add_comm_group", "direct_limit"]], ["add", "def", "direct_limit", ["add_comm_group"]], ["add", "theorem", "exists_inv", ["field", "direct_limit"]], ["add", "theorem", "exists_of", ["module", "direct_limit"]], ["add", "def", "lift", ["module", "direct_limit"]], ["add", "theorem", "lift_of", ["module", "direct_limit"]], ["add", "theorem", "lift_unique", ["module", "direct_limit"]], ["add", "theorem", "zero_exact", ["module", "direct_limit", "of"]], ["add", "theorem", "zero_exact_aux", ["module", "direct_limit", "of"]], ["add", "def", "of", ["module", "direct_limit"]], ["add", "theorem", "of_f", ["module", "direct_limit"]], ["add", "theorem", "to_module_totalize_of_le", ["module", "direct_limit"]], ["add", "theorem", "totalize_apply", ["module", "direct_limit"]], ["add", "def", "direct_limit", ["module"]], ["add", "theorem", "exists_of", ["ring", "direct_limit"]], ["add", "theorem", "induction_on", ["ring", "direct_limit"]], ["add", "def", "lift", ["ring", "direct_limit"]], ["add", "theorem", "lift_add", ["ring", "direct_limit"]], ["add", "theorem", "lift_mul", ["ring", "direct_limit"]], ["add", "theorem", "lift_neg", ["ring", "direct_limit"]], ["add", "theorem", "lift_of", ["ring", "direct_limit"]], ["add", "theorem", "lift_one", ["ring", "direct_limit"]], ["add", "theorem", "lift_pow", ["ring", "direct_limit"]], ["add", "theorem", "lift_sub", ["ring", "direct_limit"]], ["add", "theorem", "lift_unique", ["ring", "direct_limit"]], ["add", "theorem", "lift_zero", ["ring", "direct_limit"]], ["add", "theorem", "zero_exact", ["ring", "direct_limit", "of"]], ["add", "theorem", "zero_exact_aux2", ["ring", "direct_limit", "of"]], ["add", "theorem", "zero_exact_aux", ["ring", "direct_limit", "of"]], ["add", "def", "of", ["ring", "direct_limit"]], ["add", "theorem", "of_add", ["ring", "direct_limit"]], ["add", "theorem", "of_f", ["ring", "direct_limit"]], ["add", "theorem", "of_inj", ["ring", "direct_limit"]], ["add", "theorem", "of_mul", ["ring", "direct_limit"]], ["add", "theorem", "of_neg", ["ring", "direct_limit"]], ["add", "theorem", "of_one", ["ring", "direct_limit"]], ["add", "theorem", "of_pow", ["ring", "direct_limit"]], ["add", "theorem", "of_sub", ["ring", "direct_limit"]], ["add", "theorem", "of_zero", ["ring", "direct_limit"]], ["add", "def", "direct_limit", ["ring"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "def", "to_linear_map", ["is_add_group_hom"]]]}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["add", "theorem", "support_smul", ["dfinsupp"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "int_cast_eq_C", ["polynomial"]], ["add", "theorem", "nat_cast_eq_C", ["polynomial"]], ["add", "theorem", "nat_degree_int_cast", ["polynomial"]], ["add", "theorem", "nat_degree_nat_cast", ["polynomial"]]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["add", "theorem", "apply_eq_component", ["direct_sum"]], ["add", "theorem", "lof_self", ["direct_sum", "component"]], ["add", "theorem", "of", ["direct_sum", "component"]], ["add", "def", "component", ["direct_sum"]], ["add", "theorem", "ext", ["direct_sum"]], ["add", "theorem", "ext_iff", ["direct_sum"]], ["add", "theorem", "lof_apply", ["direct_sum"]], ["add", "theorem", "single_eq_lof", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/ring_theory/free_comm_ring.lean", "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["add", "theorem", "exists_finite_support", ["free_comm_ring"]], ["add", "theorem", "exists_finset_support", ["free_comm_ring"]], ["add", "def", "is_supported", ["free_comm_ring"]], ["add", "theorem", "is_supported_add", ["free_comm_ring"]], ["add", "theorem", "is_supported_int", ["free_comm_ring"]], ["add", "theorem", "is_supported_mul", ["free_comm_ring"]], ["add", "theorem", "is_supported_neg", ["free_comm_ring"]], ["add", "theorem", "is_supported_of", ["free_comm_ring"]], ["add", "theorem", "is_supported_one", ["free_comm_ring"]], ["add", "theorem", "is_supported_sub", ["free_comm_ring"]], ["add", "theorem", "is_supported_upwards", ["free_comm_ring"]], ["add", "theorem", "is_supported_zero", ["free_comm_ring"]], ["add", "theorem", "map_subtype_val_restriction", ["free_comm_ring"]], ["add", "def", "restriction", ["free_comm_ring"]], ["add", "theorem", "restriction_add", ["free_comm_ring"]], ["add", "theorem", "restriction_mul", ["free_comm_ring"]], ["add", "theorem", "restriction_neg", ["free_comm_ring"]], ["add", "theorem", "restriction_of", ["free_comm_ring"]], ["add", "theorem", "restriction_one", ["free_comm_ring"]], ["add", "theorem", "restriction_sub", ["free_comm_ring"]], ["add", "theorem", "restriction_zero", ["free_comm_ring"]]]}, {"oldPath": "src/ring_theory/free_ring.lean", "newPath": "src/ring_theory/free_ring.lean", "changes": []}]}, {"timestamp": 1560711892, "sha": "38d5c120", "message": "feat(ring_theory/integral_closure): integral closure (#1087)\n* feat(ring_theory/integral_closure): integral closure\n* update", "changes": [{"oldPath": null, "newPath": "src/ring_theory/integral_closure.lean", "changes": [["add", "theorem", "fg_adjoin_of_finite", []], ["add", "theorem", "fg_adjoin_singleton_of_integral", []], ["add", "def", "integral_closure", []], ["add", "theorem", "integral_closure_idem", []], ["add", "def", "is_integral", []], ["add", "theorem", "is_integral_add", []], ["add", "theorem", "is_integral_algebra_map", []], ["add", "theorem", "is_integral_iff_is_integral_closure_finite", []], ["add", "theorem", "is_integral_mul", []], ["add", "theorem", "is_integral_neg", []], ["add", "theorem", "is_integral_of_mem_closure", []], ["add", "theorem", "is_integral_of_mem_of_fg", []], ["add", "theorem", "is_integral_of_noetherian'", []], ["add", "theorem", "is_integral_of_noetherian", []], ["add", "theorem", "is_integral_of_subring", []], ["add", "theorem", "is_integral_one", []], ["add", "theorem", "is_integral_sub", []], ["add", "theorem", "is_integral_zero", []], ["add", "theorem", "mem_integral_closure_iff_mem_fg", []]]}]}, {"timestamp": 1560562200, "sha": "3ad35223", "message": "feat(data/rat/denumerable): computable denumerability of Q (#1104)\n* feat(data/rat/denumerable): computable denumerability of Q\n* blah\n* fix build\n* remove unnecessary decidable_eq\n* add header\n* delete rat.lean and update imports\n* fix build\n* prove exists_not_mem_finset\n* massively speed up encode\n* minor change", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": [["add", "def", "of_encodable_of_infinite", ["denumerable"]], ["add", "def", "denumerable", ["nat", "subtype"]], ["add", "theorem", "exists_succ", ["nat", "subtype"]], ["add", "theorem", "le_succ_of_forall_lt_le", ["nat", "subtype"]], ["add", "theorem", "lt_succ_iff_le", ["nat", "subtype"]], ["add", "theorem", "lt_succ_self", ["nat", "subtype"]], ["add", "def", "of_nat", ["nat", "subtype"]], ["add", "theorem", "of_nat_surjective", ["nat", "subtype"]], ["add", "theorem", "of_nat_surjective_aux", ["nat", "subtype"]], ["add", "def", "succ", ["nat", "subtype"]], ["add", "theorem", "succ_le_of_lt", ["nat", "subtype"]]]}, {"oldPath": "src/data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": [["add", "def", "decidable_range_encode", ["encodable"]], ["add", "def", "equiv_range_encode", ["encodable"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "exists_not_mem_finset", ["infinite"]], ["add", "theorem", "of_injective", ["infinite"]], ["add", "theorem", "of_surjective", ["infinite"]]]}, {"oldPath": "src/data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "get_some", ["option"]], ["add", "theorem", "some_get", ["option"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/rat.lean", "newPath": "src/data/rat/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/rat/denumerable.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1560534058, "sha": "5040c81d", "message": "feat(measure_theory/integration): dominated convergence theorem (#1123)\n* Create .DS_Store\n* Revert \"Create .DS_Store\"\nThis reverts commit 5612886d493aef59205eddc5a34a75e6e5ba22c1.\n* feat(measure_theory/integration): dominated convergence theorem\n* Changes to styles\n* Update ordered.lean\n* Changes to styles\n* Update integration.lean\n* Changes to styles", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "sub_left_inj", ["ennreal"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_add", ["ennreal"]], ["add", "theorem", "measurable_sub", ["ennreal"]], ["add", "theorem", "infi_Prop", ["measure_theory", "measurable"]], ["add", "theorem", "supr_Prop", ["measure_theory", "measurable"]], ["add", "theorem", "measurable_add", ["nnreal"]], ["add", "theorem", "measurable_mul", ["nnreal"]], ["add", "theorem", "measurable_sub", ["nnreal"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "dominated_convergence_nn", ["measure_theory"]], ["add", "theorem", "limsup_lintegral_le", ["measure_theory"]], ["add", "theorem", "lintegral_infi_ae", ["measure_theory"]], ["add", "theorem", "lintegral_liminf_le", ["measure_theory"]], ["add", "theorem", "lintegral_sub", ["measure_theory"]], ["add", "theorem", "lintegral_supr_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "all_ae_of_all", ["measure_theory"]]]}, {"oldPath": "src/order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": [["add", "theorem", "liminf_eq_supr_infi_of_nat", ["filter"]], ["add", "theorem", "liminf_le_limsup", ["filter"]], ["add", "theorem", "limsup_eq_infi_supr_of_nat", ["filter"]]]}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["add", "theorem", "liminf_eq_of_tendsto", []], ["add", "theorem", "limsup_eq_of_tendsto", []], ["add", "theorem", "tendsto_of_liminf_eq_limsup", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["add", "theorem", "continuous_sub'", ["nnreal"]], ["add", "theorem", "continuous_sub", ["nnreal"]]]}]}, {"timestamp": 1560519352, "sha": "5a183f04", "message": "provide some proof terms explicitly (#1132)", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1560314745, "sha": "0c627fb3", "message": "chore(algebra/group/hom): drop unused section variables (#1130)", "changes": [{"oldPath": "src/algebra/group/hom.lean", "newPath": "src/algebra/group/hom.lean", "changes": []}]}, {"timestamp": 1560287199, "sha": "3492206f", "message": "feat(data/mv_polynomial): misc lemmas on rename, map, and eval2 (#1127)", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "coeff_X", ["mv_polynomial"]], ["add", "theorem", "eval₂_comp_right", ["mv_polynomial"]], ["add", "theorem", "map_eval₂", ["mv_polynomial"]], ["add", "theorem", "map_rename", ["mv_polynomial"]], ["add", "theorem", "rename_add", ["mv_polynomial"]], ["add", "theorem", "rename_mul", ["mv_polynomial"]], ["add", "theorem", "rename_one", ["mv_polynomial"]], ["add", "theorem", "rename_pow", ["mv_polynomial"]], ["add", "theorem", "rename_sub", ["mv_polynomial"]], ["add", "theorem", "rename_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1560280213, "sha": "953c612e", "message": "fix(category_theory): simplifying universes (#1122)", "changes": [{"oldPath": "src/category_theory/adjunction/basic.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction/limits.lean", "newPath": "src/category_theory/adjunction/limits.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["mod", "theorem", "assoc_symm", ["category_theory", "category"]], ["mod", "def", "large_category", ["category_theory"]], ["mod", "def", "small_category", ["category_theory"]]]}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "structure", "comma", ["category_theory"]]]}, {"oldPath": "src/category_theory/concrete_category.lean", "newPath": "src/category_theory/concrete_category.lean", "changes": [["mod", "structure", "bundled", ["category_theory"]], ["mod", "def", "forget", ["category_theory"]], ["mod", "def", "mk_ob", ["category_theory"]]]}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": [["mod", "def", "core", ["category_theory"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "structure", "equivalence", ["category_theory"]]]}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": [["mod", "def", "induced_category", ["category_theory"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["mod", "structure", "functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["mod", "def", "large_groupoid", ["category_theory"]], ["mod", "def", "small_groupoid", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "structure", "iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "map_post", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "map_post", ["category_theory", "limits", "limit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/binary_products.lean", "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["mod", "def", "pair_function", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/shapes/equalizers.lean", "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/pullbacks.lean", "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/category.lean", "newPath": "src/category_theory/monoidal/category.lean", "changes": [["mod", "def", "tensor_iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/monoidal/category_aux.lean", "newPath": "src/category_theory/monoidal/category_aux.lean", "changes": []}, {"oldPath": "src/category_theory/monoidal/functor.lean", "newPath": "src/category_theory/monoidal/functor.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["mod", "def", "app", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["mod", "structure", "nat_trans", ["category_theory"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/products/default.lean", "newPath": "src/category_theory/products/default.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/sparse.lean", "newPath": "src/category_theory/sparse.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1560275210, "sha": "98ece77e", "message": "refactor(algebra/group): split into smaller files (#1121)\n* rename `src/algebra/group.lean` → `src/algebra/group/default.lean`\n* Split algebra/group/default into smaller files\nNo code changes, except for variables declaration and imports\n* Fix compile\n* fix compile error: import `anti_hom` in `algebra/group/default`\n* Drop unused imports", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": null, "changes": [["del", "theorem", "add_add_sub_cancel", []], ["del", "theorem", "add_sub_cancel'", []], ["del", "theorem", "add_sub_cancel'_right", []], ["del", "theorem", "add_sub_sub_cancel", []], ["del", "def", "additive", []], ["del", "theorem", "bit0_zero", []], ["del", "theorem", "bit1_zero", []], ["del", "theorem", "conj_inv", []], ["del", "theorem", "conj_mul", []], ["del", "def", "divp", []], ["del", "theorem", "divp_assoc", []], ["del", "theorem", "divp_eq_one", []], ["del", "theorem", "divp_mul_cancel", []], ["del", "theorem", "divp_one", []], ["del", "theorem", "divp_right_inj", []], ["del", "theorem", "divp_self", []], ["del", "theorem", "eq_iff_eq_of_sub_eq_sub", []], ["del", "theorem", "eq_inv_iff_eq_inv", []], ["del", "theorem", "eq_inv_iff_mul_eq_one", []], ["del", "theorem", "eq_inv_mul_iff_mul_eq", []], ["del", "theorem", "eq_mul_inv_iff_mul_eq", []], ["del", "theorem", "eq_of_inv_eq_inv", []], ["del", "theorem", "eq_sub_iff_add_eq'", []], ["del", "theorem", "eq_sub_iff_add_eq", []], ["del", "theorem", "add_def", ["free_add_monoid"]], ["del", "theorem", "zero_def", ["free_add_monoid"]], ["del", "def", "free_add_monoid", []], ["del", "theorem", "mul_def", ["free_monoid"]], ["del", "theorem", "one_def", ["free_monoid"]], ["del", "def", "free_monoid", []], ["del", "theorem", "is_group_hom", ["inv"]], ["del", "theorem", "inv_comm_of_comm", []], ["del", "theorem", "inv_eq_iff_inv_eq", []], ["del", "theorem", "inv_eq_iff_mul_eq_one", []], ["del", "theorem", "inv_eq_one", []], ["del", "theorem", "inv_inj'", []], ["del", "theorem", "inv_is_group_anti_hom", []], ["del", "theorem", "inv_mul_eq_iff_eq_mul", []], ["del", "theorem", "inv_ne_one", []], ["del", "theorem", "map_sub", ["is_add_group_hom"]], ["del", "theorem", "sub", ["is_add_group_hom"]], ["del", "theorem", "map_add", ["is_add_monoid_hom"]], ["del", "def", "is_conj", []], ["del", "theorem", "is_conj_iff_eq", []], ["del", "theorem", "is_conj_one_left", []], ["del", "theorem", "is_conj_one_right", []], ["del", "theorem", "is_conj_refl", []], ["del", "theorem", "is_conj_symm", []], ["del", "theorem", "is_conj_trans", []], ["del", "theorem", "map_inv", ["is_group_anti_hom"]], ["del", "theorem", "map_one", ["is_group_anti_hom"]], ["del", "theorem", "injective_iff", ["is_group_hom"]], ["del", "theorem", "inv", ["is_group_hom"]], ["del", "theorem", "map_inv", ["is_group_hom"]], ["del", "theorem", "map_one", ["is_group_hom"]], ["del", "theorem", "mul", ["is_group_hom"]], ["del", "theorem", "to_is_monoid_hom", ["is_group_hom"]], ["del", "theorem", "map_mul", ["is_monoid_hom"]], ["del", "theorem", "comp'", ["is_mul_hom"]], ["del", "theorem", "comp", ["is_mul_hom"]], ["del", "theorem", "id", ["is_mul_hom"]], ["del", "theorem", "left_inverse_add_left_sub", []], ["del", "theorem", "left_inverse_add_right_neg_add", []], ["del", "theorem", "left_inverse_inv", []], ["del", "theorem", "left_inverse_neg_add_add_right", []], ["del", "theorem", "left_inverse_sub_add_left", []], ["del", "theorem", "mul_divp_cancel", []], ["del", "theorem", "mul_eq_one_iff_eq_inv", []], ["del", "theorem", "mul_eq_one_iff_inv_eq", []], ["del", "theorem", "mul_inv_eq_iff_eq_mul", []], ["del", "theorem", "mul_inv_eq_one", []], ["del", "theorem", "mul_left_inj", []], ["del", "theorem", "mul_mul_mul_comm", []], ["del", "theorem", "mul_right_inj", []], ["del", "theorem", "mul_self_iff_eq_one", []], ["del", "def", "multiplicative", []], ["del", "theorem", "units_eq_one", ["nat"]], ["del", "theorem", "neg_add'", []], ["del", "theorem", "neg_sub_neg", []], ["del", "theorem", "one_divp", []], ["del", "theorem", "sub_add_add_cancel", []], ["del", "theorem", "sub_add_sub_cancel'", []], ["del", "theorem", "sub_add_sub_cancel", []], ["del", "theorem", "sub_eq_iff_eq_add'", []], ["del", "theorem", "sub_eq_iff_eq_add", []], ["del", "theorem", "sub_eq_neg_add", []], ["del", "theorem", "sub_eq_sub_iff_sub_eq_sub", []], ["del", "theorem", "sub_eq_zero", []], ["del", "theorem", "sub_left_inj", []], ["del", "theorem", "sub_ne_zero", []], ["del", "theorem", "sub_right_comm", []], ["del", "theorem", "sub_right_inj", []], ["del", "def", "sub_sub_cancel", []], ["del", "theorem", "sub_sub_sub_cancel_left", []], ["del", "theorem", "sub_sub_sub_cancel_right", []], ["del", "theorem", "coe_inv", ["units"]], ["del", "theorem", "coe_map", ["units"]], ["del", "theorem", "coe_mul", ["units"]], ["del", "theorem", "coe_one", ["units"]], ["del", "theorem", "ext", ["units"]], ["del", "theorem", "ext_iff", ["units"]], ["del", "theorem", "inv_mul", ["units"]], ["del", "theorem", "inv_mul_cancel_left", ["units"]], ["del", "theorem", "inv_mul_cancel_right", ["units"]], ["del", "theorem", "map_comp'", ["units"]], ["del", "theorem", "map_comp", ["units"]], ["del", "theorem", "map_id", ["units"]], ["del", "def", "mk_of_mul_eq_one", ["units"]], ["del", "theorem", "mul_inv", ["units"]], ["del", "theorem", "mul_inv_cancel_left", ["units"]], ["del", "theorem", "mul_inv_cancel_right", ["units"]], ["del", "theorem", "mul_left_inj", ["units"]], ["del", "theorem", "mul_right_inj", ["units"]], ["del", "theorem", "val_coe", ["units"]], ["del", "structure", "units", []], ["del", "theorem", "coe_inj", ["with_one"]], ["del", "theorem", "coe_ne_one", ["with_one"]], ["del", "theorem", "mul_coe", ["with_one"]], ["del", "theorem", "ne_one_iff_exists", ["with_one"]], ["del", "theorem", "one_ne_coe", ["with_one"]], ["del", "def", "with_one", []], ["del", "theorem", "coe_one", ["with_zero"]], ["del", "theorem", "div_coe", ["with_zero"]], ["del", "theorem", "div_eq_div", ["with_zero"]], ["del", "theorem", "div_eq_iff_mul_eq", ["with_zero"]], ["del", "theorem", "div_mul_cancel", ["with_zero"]], ["del", "theorem", "div_one", ["with_zero"]], ["del", "theorem", "div_zero", ["with_zero"]], ["del", "theorem", "inv_coe", ["with_zero"]], ["del", "theorem", "inv_one", ["with_zero"]], ["del", "theorem", "inv_zero", ["with_zero"]], ["del", "theorem", "mul_coe", ["with_zero"]], ["del", "theorem", "mul_div_cancel", ["with_zero"]], ["del", "theorem", "mul_inv_rev", ["with_zero"]], ["del", "theorem", "mul_left_inv", ["with_zero"]], ["del", "theorem", "mul_right_inv", ["with_zero"]], ["del", "theorem", "one_div", ["with_zero"]], ["del", "theorem", "zero_div", ["with_zero"]]]}, {"oldPath": null, "newPath": "src/algebra/group/anti_hom.lean", "changes": [["add", "theorem", "inv_is_group_anti_hom", []], ["add", "theorem", "map_inv", ["is_group_anti_hom"]], ["add", "theorem", "map_one", ["is_group_anti_hom"]]]}, {"oldPath": null, "newPath": "src/algebra/group/basic.lean", "changes": [["add", "theorem", "add_add_sub_cancel", []], ["add", "theorem", "add_sub_cancel'", []], ["add", "theorem", "add_sub_cancel'_right", []], ["add", "theorem", "add_sub_sub_cancel", []], ["add", "theorem", "bit0_zero", []], ["add", "theorem", "bit1_zero", []], ["add", "theorem", "eq_iff_eq_of_sub_eq_sub", []], ["add", "theorem", "eq_inv_iff_eq_inv", []], ["add", "theorem", "eq_inv_iff_mul_eq_one", []], ["add", "theorem", "eq_inv_mul_iff_mul_eq", []], ["add", "theorem", "eq_mul_inv_iff_mul_eq", []], ["add", "theorem", "eq_of_inv_eq_inv", []], ["add", "theorem", "eq_sub_iff_add_eq'", []], ["add", "theorem", "eq_sub_iff_add_eq", []], ["add", "theorem", "inv_comm_of_comm", []], ["add", "theorem", "inv_eq_iff_inv_eq", []], ["add", "theorem", "inv_eq_iff_mul_eq_one", []], ["add", "theorem", "inv_eq_one", []], ["add", "theorem", "inv_inj'", []], ["add", "theorem", "inv_mul_eq_iff_eq_mul", []], ["add", "theorem", "inv_ne_one", []], ["add", "theorem", "left_inverse_add_left_sub", []], ["add", "theorem", "left_inverse_add_right_neg_add", []], ["add", "theorem", "left_inverse_inv", []], ["add", "theorem", "left_inverse_neg_add_add_right", []], ["add", "theorem", "left_inverse_sub_add_left", []], ["add", "theorem", "mul_eq_one_iff_eq_inv", []], ["add", "theorem", "mul_eq_one_iff_inv_eq", []], ["add", "theorem", "mul_inv_eq_iff_eq_mul", []], ["add", "theorem", "mul_inv_eq_one", []], ["add", "theorem", "mul_left_inj", []], ["add", "theorem", "mul_mul_mul_comm", []], ["add", "theorem", "mul_right_inj", []], ["add", "theorem", "mul_self_iff_eq_one", []], ["add", "theorem", "neg_add'", []], ["add", "theorem", "neg_sub_neg", []], ["add", "theorem", "sub_add_add_cancel", []], ["add", "theorem", "sub_add_sub_cancel'", []], ["add", "theorem", "sub_add_sub_cancel", []], ["add", "theorem", "sub_eq_iff_eq_add'", []], ["add", "theorem", "sub_eq_iff_eq_add", []], ["add", "theorem", "sub_eq_neg_add", []], ["add", "theorem", "sub_eq_sub_iff_sub_eq_sub", []], ["add", "theorem", "sub_eq_zero", []], ["add", "theorem", "sub_left_inj", []], ["add", "theorem", "sub_ne_zero", []], ["add", "theorem", "sub_right_comm", []], ["add", "theorem", "sub_right_inj", []], ["add", "def", "sub_sub_cancel", []], ["add", "theorem", "sub_sub_sub_cancel_left", []], ["add", "theorem", "sub_sub_sub_cancel_right", []]]}, {"oldPath": null, "newPath": "src/algebra/group/conj.lean", "changes": [["add", "theorem", "conj_inv", []], ["add", "theorem", "conj_mul", []], ["add", "def", "is_conj", []], ["add", "theorem", "is_conj_iff_eq", []], ["add", "theorem", "is_conj_one_left", []], ["add", "theorem", "is_conj_one_right", []], ["add", "theorem", "is_conj_refl", []], ["add", "theorem", "is_conj_symm", []], ["add", "theorem", "is_conj_trans", []]]}, {"oldPath": null, "newPath": "src/algebra/group/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group/free_monoid.lean", "changes": [["add", "theorem", "add_def", ["free_add_monoid"]], ["add", "theorem", "zero_def", ["free_add_monoid"]], ["add", "def", "free_add_monoid", []], ["add", "theorem", "mul_def", ["free_monoid"]], ["add", "theorem", "one_def", ["free_monoid"]], ["add", "def", "free_monoid", []]]}, {"oldPath": null, "newPath": "src/algebra/group/hom.lean", "changes": [["add", "theorem", "is_group_hom", ["inv"]], ["add", "theorem", "map_sub", ["is_add_group_hom"]], ["add", "theorem", "sub", ["is_add_group_hom"]], ["add", "theorem", "map_add", ["is_add_monoid_hom"]], ["add", "theorem", "injective_iff", ["is_group_hom"]], ["add", "theorem", "inv", ["is_group_hom"]], ["add", "theorem", "map_inv", ["is_group_hom"]], ["add", "theorem", "map_one", ["is_group_hom"]], ["add", "theorem", "mul", ["is_group_hom"]], ["add", "theorem", "to_is_monoid_hom", ["is_group_hom"]], ["add", "theorem", "map_mul", ["is_monoid_hom"]], ["add", "theorem", "comp'", ["is_mul_hom"]], ["add", "theorem", "comp", ["is_mul_hom"]], ["add", "theorem", "id", ["is_mul_hom"]]]}, {"oldPath": null, "newPath": "src/algebra/group/to_additive.lean", "changes": []}, {"oldPath": null, "newPath": "src/algebra/group/type_tags.lean", "changes": [["add", "def", "additive", []], ["add", "def", "multiplicative", []]]}, {"oldPath": null, "newPath": "src/algebra/group/units.lean", "changes": [["add", "def", "divp", []], ["add", "theorem", "divp_assoc", []], ["add", "theorem", "divp_eq_one", []], ["add", "theorem", "divp_mul_cancel", []], ["add", "theorem", "divp_one", []], ["add", "theorem", "divp_right_inj", []], ["add", "theorem", "divp_self", []], ["add", "theorem", "mul_divp_cancel", []], ["add", "theorem", "units_eq_one", ["nat"]], ["add", "theorem", "one_divp", []], ["add", "theorem", "coe_inv", ["units"]], ["add", "theorem", "coe_mul", ["units"]], ["add", "theorem", "coe_one", ["units"]], ["add", "theorem", "ext", ["units"]], ["add", "theorem", "ext_iff", ["units"]], ["add", "theorem", "inv_mul", ["units"]], ["add", "theorem", "inv_mul_cancel_left", ["units"]], ["add", "theorem", "inv_mul_cancel_right", ["units"]], ["add", "def", "mk_of_mul_eq_one", ["units"]], ["add", "theorem", "mul_inv", ["units"]], ["add", "theorem", "mul_inv_cancel_left", ["units"]], ["add", "theorem", "mul_inv_cancel_right", ["units"]], ["add", "theorem", "mul_left_inj", ["units"]], ["add", "theorem", "mul_right_inj", ["units"]], ["add", "theorem", "val_coe", ["units"]], ["add", "structure", "units", []]]}, {"oldPath": null, "newPath": "src/algebra/group/units_hom.lean", "changes": [["add", "theorem", "coe_map", ["units"]], ["add", "theorem", "map_comp'", ["units"]], ["add", "theorem", "map_comp", ["units"]], ["add", "theorem", "map_id", ["units"]]]}, {"oldPath": null, "newPath": "src/algebra/group/with_one.lean", "changes": [["add", "theorem", "coe_inj", ["with_one"]], ["add", "theorem", "coe_ne_one", ["with_one"]], ["add", "theorem", "mul_coe", ["with_one"]], ["add", "theorem", "ne_one_iff_exists", ["with_one"]], ["add", "theorem", "one_ne_coe", ["with_one"]], ["add", "def", "with_one", []], ["add", "theorem", "coe_one", ["with_zero"]], ["add", "theorem", "div_coe", ["with_zero"]], ["add", "theorem", "div_eq_div", ["with_zero"]], ["add", "theorem", "div_eq_iff_mul_eq", ["with_zero"]], ["add", "theorem", "div_mul_cancel", ["with_zero"]], ["add", "theorem", "div_one", ["with_zero"]], ["add", "theorem", "div_zero", ["with_zero"]], ["add", "theorem", "inv_coe", ["with_zero"]], ["add", "theorem", "inv_one", ["with_zero"]], ["add", "theorem", "inv_zero", ["with_zero"]], ["add", "theorem", "mul_coe", ["with_zero"]], ["add", "theorem", "mul_div_cancel", ["with_zero"]], ["add", "theorem", "mul_inv_rev", ["with_zero"]], ["add", "theorem", "mul_left_inv", ["with_zero"]], ["add", "theorem", "mul_right_inv", ["with_zero"]], ["add", "theorem", "one_div", ["with_zero"]], ["add", "theorem", "zero_div", ["with_zero"]]]}]}, {"timestamp": 1560257584, "sha": "8d0e719e", "message": "chore(mergify): don't dismiss reviews [ci-skip] (#1124)", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1560227979, "sha": "abfaf8d7", "message": "refactor(group_theory/abelianization): simplify abelianization (#1126)\n* feat(group_theory/conjugates) : define conjugates\ndefine group conjugates and normal closure\n* feat(algebra/order_functions): generalize strict_mono.monotone (#1022)\n* trying to merge\n* feat(group_theory\\presented_group): define presented groups\nPresented groups are defined as a quotient of a free group by the normal subgroup the relations generate.\n* feat(group_theory\\presented_group): define presented groups\nPresented groups are defined as a quotient of a free group by the normal subgroup the relations generate\n* Update src/group_theory/presented_group.lean\nCo-Authored-By: Keeley Hoek \n* Uniqueness of extension\n* Tidied up to_group.unique\n* Removed unnecessary line\n* Changed naming\n* refactor(group_theory/abelianization): simplify abelianization\nThe commutator of a group was previously defined using lists.\nNow it is defined using `normal_closure`.\nThis change simplifies some of the proofs", "changes": [{"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": [["add", "theorem", "commutator_subset_ker", ["abelianization"]], ["mod", "theorem", "of", ["abelianization", "lift"]]]}]}, {"timestamp": 1560173917, "sha": "bd2f35f3", "message": "feat(group_theory/presented_group): define presented groups (#1118)\n* feat(group_theory/conjugates) : define conjugates\ndefine group conjugates and normal closure\n* feat(algebra/order_functions): generalize strict_mono.monotone (#1022)\n* trying to merge\n* feat(group_theory\\presented_group): define presented groups\nPresented groups are defined as a quotient of a free group by the normal subgroup the relations generate.\n* feat(group_theory\\presented_group): define presented groups\nPresented groups are defined as a quotient of a free group by the normal subgroup the relations generate\n* Update src/group_theory/presented_group.lean\nCo-Authored-By: Keeley Hoek \n* Uniqueness of extension\n* Tidied up to_group.unique\n* Removed unnecessary line\n* Changed naming", "changes": [{"oldPath": null, "newPath": "src/group_theory/presented_group.lean", "changes": [["add", "theorem", "closure_rels_subset_ker", ["presented_group"]], ["add", "def", "of", ["presented_group"]], ["add", "theorem", "inv", ["presented_group", "to_group"]], ["add", "theorem", "mul", ["presented_group", "to_group"]], ["add", "theorem", "of", ["presented_group", "to_group"]], ["add", "theorem", "one", ["presented_group", "to_group"]], ["add", "theorem", "unique", ["presented_group", "to_group"]], ["add", "def", "to_group", ["presented_group"]], ["add", "theorem", "to_group_eq_one_of_mem_closure", ["presented_group"]], ["add", "def", "presented_group", []]]}]}, {"timestamp": 1560155932, "sha": "004e0b30", "message": "feat (data/pnat): extensions to pnat (#1073)\n* Extended API, especially divisibility and primes\n* Positive euclidean algorithm\n* Disambiguate overloaded ::\n* Tweak broken proof of flip_is_special\n* Change to mathlib style\n* Update src/data/pnat.lean\nCo-Authored-By: Johan Commelin \n* Update src/data/pnat.lean\nCo-Authored-By: Johan Commelin \n* Adjust style for mathlib\n* Moved and renamed\n* Move some material from basic.lean to prime.lean\n* Move some material from basic.lean to factors.lean\n* Update import to data.pnat.basic.\n* Update import to data.pnat.basic\n* Fix import of data.pnat.basic\n* Use monoid.pow instead of nat.pow\n* Fix pnat.pow_succ -> pow_succ; stylistic changes\n* More systematic use of coercion\n* More consistent use of coercion\n* Formatting; change flip' to prod.swap", "changes": [{"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "coe_nat_inj", ["nat", "primes"]], ["add", "def", "primes", ["nat"]]]}, {"oldPath": "src/data/pnat.lean", "newPath": null, "changes": [["del", "def", "succ_pnat", ["nat"]], ["del", "theorem", "succ_pnat_coe", ["nat"]], ["del", "def", "to_pnat'", ["nat"]], ["del", "def", "to_pnat", ["nat"]], ["del", "theorem", "add_coe", ["pnat"]], ["del", "theorem", "coe_to_pnat'", ["pnat"]], ["del", "theorem", "eq", ["pnat"]], ["del", "theorem", "mk_coe", ["pnat"]], ["del", "theorem", "mul_coe", ["pnat"]], ["del", "theorem", "ne_zero", ["pnat"]], ["del", "theorem", "one_coe", ["pnat"]], ["del", "theorem", "pos", ["pnat"]], ["del", "def", "pow", ["pnat"]], ["del", "theorem", "pow_coe", ["pnat"]], ["del", "theorem", "to_pnat'_coe", ["pnat"]], ["del", "def", "pnat", []]]}, {"oldPath": null, "newPath": "src/data/pnat/basic.lean", "changes": [["add", "theorem", "coe_pnat_inj", ["nat", "primes"]], ["add", "theorem", "coe_pnat_nat", ["nat", "primes"]], ["add", "def", "succ_pnat", ["nat"]], ["add", "theorem", "succ_pnat_coe", ["nat"]], ["add", "theorem", "succ_pnat_inj", ["nat"]], ["add", "def", "to_pnat'", ["nat"]], ["add", "theorem", "to_pnat'_coe", ["nat"]], ["add", "def", "to_pnat", ["nat"]], ["add", "theorem", "add_coe", ["pnat"]], ["add", "theorem", "add_sub_of_lt", ["pnat"]], ["add", "theorem", "coe_to_pnat'", ["pnat"]], ["add", "def", "div", ["pnat"]], ["add", "theorem", "div_coe", ["pnat"]], ["add", "def", "div_exact", ["pnat"]], ["add", "theorem", "dvd_antisymm", ["pnat"]], ["add", "theorem", "dvd_gcd", ["pnat"]], ["add", "theorem", "dvd_iff''", ["pnat"]], ["add", "theorem", "dvd_iff'", ["pnat"]], ["add", "theorem", "dvd_iff", ["pnat"]], ["add", "theorem", "dvd_intro", ["pnat"]], ["add", "theorem", "dvd_lcm_left", ["pnat"]], ["add", "theorem", "dvd_lcm_right", ["pnat"]], ["add", "theorem", "dvd_one_iff", ["pnat"]], ["add", "theorem", "dvd_refl", ["pnat"]], ["add", "theorem", "dvd_trans", ["pnat"]], ["add", "theorem", "eq", ["pnat"]], ["add", "def", "gcd", ["pnat"]], ["add", "theorem", "gcd_coe", ["pnat"]], ["add", "theorem", "gcd_dvd_left", ["pnat"]], ["add", "theorem", "gcd_dvd_right", ["pnat"]], ["add", "theorem", "gcd_mul_lcm", ["pnat"]], ["add", "def", "lcm", ["pnat"]], ["add", "theorem", "lcm_coe", ["pnat"]], ["add", "theorem", "lcm_dvd", ["pnat"]], ["add", "theorem", "mk_coe", ["pnat"]], ["add", "def", "mod", ["pnat"]], ["add", "theorem", "mod_add_div", ["pnat"]], ["add", "theorem", "mod_coe", ["pnat"]], ["add", "def", "mod_div", ["pnat"]], ["add", "def", "mod_div_aux", ["pnat"]], ["add", "theorem", "mod_div_aux_spec", ["pnat"]], ["add", "theorem", "mod_le", ["pnat"]], ["add", "theorem", "mul_coe", ["pnat"]], ["add", "theorem", "mul_div_exact", ["pnat"]], ["add", "theorem", "ne_zero", ["pnat"]], ["add", "theorem", "one_coe", ["pnat"]], ["add", "theorem", "one_dvd", ["pnat"]], ["add", "theorem", "pos", ["pnat"]], ["add", "theorem", "pow_coe", ["pnat"]], ["add", "def", "prime", ["pnat"]], ["add", "theorem", "sub_coe", ["pnat"]], ["add", "theorem", "to_pnat'_coe", ["pnat"]], ["add", "def", "pnat", []]]}, {"oldPath": null, "newPath": "src/data/pnat/factors.lean", "changes": [["add", "theorem", "coe_nat_factor_multiset", ["pnat"]], ["add", "theorem", "count_factor_multiset", ["pnat"]], ["add", "def", "factor_multiset", ["pnat"]], ["add", "def", "factor_multiset_equiv", ["pnat"]], ["add", "theorem", "factor_multiset_gcd", ["pnat"]], ["add", "theorem", "factor_multiset_lcm", ["pnat"]], ["add", "theorem", "factor_multiset_le_iff'", ["pnat"]], ["add", "theorem", "factor_multiset_le_iff", ["pnat"]], ["add", "theorem", "factor_multiset_mul", ["pnat"]], ["add", "theorem", "factor_multiset_of_prime", ["pnat"]], ["add", "theorem", "factor_multiset_one", ["pnat"]], ["add", "theorem", "factor_multiset_pow", ["pnat"]], ["add", "theorem", "prod_factor_multiset", ["pnat"]], ["add", "theorem", "add_sub_of_le", ["prime_multiset"]], ["add", "theorem", "card_of_prime", ["prime_multiset"]], ["add", "theorem", "coe_nat_inj", ["prime_multiset"]], ["add", "theorem", "coe_nat_of_prime", ["prime_multiset"]], ["add", "theorem", "coe_nat_prime", ["prime_multiset"]], ["add", "theorem", "coe_pnat_inj", ["prime_multiset"]], ["add", "theorem", "coe_pnat_nat", ["prime_multiset"]], ["add", "theorem", "coe_pnat_of_prime", ["prime_multiset"]], ["add", "theorem", "coe_pnat_prime", ["prime_multiset"]], ["add", "theorem", "coe_prod", ["prime_multiset"]], ["add", "theorem", "factor_multiset_prod", ["prime_multiset"]], ["add", "def", "of_nat_list", ["prime_multiset"]], ["add", "def", "of_nat_multiset", ["prime_multiset"]], ["add", "def", "of_pnat_list", ["prime_multiset"]], ["add", "def", "of_pnat_multiset", ["prime_multiset"]], ["add", "def", "of_prime", ["prime_multiset"]], ["add", "def", "prod", ["prime_multiset"]], ["add", "theorem", "prod_add", ["prime_multiset"]], ["add", "theorem", "prod_dvd_iff'", ["prime_multiset"]], ["add", "theorem", "prod_dvd_iff", ["prime_multiset"]], ["add", "theorem", "prod_inf", ["prime_multiset"]], ["add", "theorem", "prod_of_nat_list", ["prime_multiset"]], ["add", "theorem", "prod_of_nat_multiset", ["prime_multiset"]], ["add", "theorem", "prod_of_pnat_list", ["prime_multiset"]], ["add", "theorem", "prod_of_pnat_multiset", ["prime_multiset"]], ["add", "theorem", "prod_of_prime", ["prime_multiset"]], ["add", "theorem", "prod_smul", ["prime_multiset"]], ["add", "theorem", "prod_sup", ["prime_multiset"]], ["add", "theorem", "prod_zero", ["prime_multiset"]], ["add", "def", "to_nat_multiset", ["prime_multiset"]], ["add", "theorem", "to_of_nat_multiset", ["prime_multiset"]], ["add", "theorem", "to_of_pnat_multiset", ["prime_multiset"]], ["add", "def", "to_pnat_multiset", ["prime_multiset"]], ["add", "def", "prime_multiset", []]]}, {"oldPath": null, "newPath": "src/data/pnat/xgcd.lean", "changes": [["add", "def", "gcd_a'", ["pnat"]], ["add", "theorem", "gcd_a'_coe", ["pnat"]], ["add", "theorem", "gcd_a_eq", ["pnat"]], ["add", "def", "gcd_b'", ["pnat"]], ["add", "theorem", "gcd_b'_coe", ["pnat"]], ["add", "theorem", "gcd_b_eq", ["pnat"]], ["add", "def", "gcd_d", ["pnat"]], ["add", "theorem", "gcd_det_eq", ["pnat"]], ["add", "theorem", "gcd_eq", ["pnat"]], ["add", "theorem", "gcd_props", ["pnat"]], ["add", "theorem", "gcd_rel_left'", ["pnat"]], ["add", "theorem", "gcd_rel_left", ["pnat"]], ["add", "theorem", "gcd_rel_right'", ["pnat"]], ["add", "theorem", "gcd_rel_right", ["pnat"]], ["add", "def", "gcd_w", ["pnat"]], ["add", "def", "gcd_x", ["pnat"]], ["add", "def", "gcd_y", ["pnat"]], ["add", "def", "gcd_z", ["pnat"]], ["add", "def", "xgcd:", ["pnat"]], ["add", "def", "a", ["pnat", "xgcd_type"]], ["add", "def", "b", ["pnat", "xgcd_type"]], ["add", "def", "finish", ["pnat", "xgcd_type"]], ["add", "theorem", "finish_is_reduced", ["pnat", "xgcd_type"]], ["add", "theorem", "finish_is_special", ["pnat", "xgcd_type"]], ["add", "theorem", "finish_v", ["pnat", "xgcd_type"]], ["add", "def", "flip", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_a", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_b", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_is_reduced", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_is_special", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_v", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_w", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_x", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_y", ["pnat", "xgcd_type"]], ["add", "theorem", "flip_z", ["pnat", "xgcd_type"]], ["add", "def", "is_reduced'", ["pnat", "xgcd_type"]], ["add", "def", "is_reduced", ["pnat", "xgcd_type"]], ["add", "theorem", "is_reduced_iff", ["pnat", "xgcd_type"]], ["add", "def", "is_special'", ["pnat", "xgcd_type"]], ["add", "def", "is_special", ["pnat", "xgcd_type"]], ["add", "theorem", "is_special_iff", ["pnat", "xgcd_type"]], ["add", "def", "mk'", ["pnat", "xgcd_type"]], ["add", "def", "q", ["pnat", "xgcd_type"]], ["add", "def", "qp", ["pnat", "xgcd_type"]], ["add", "theorem", "qp_eq", ["pnat", "xgcd_type"]], ["add", "def", "r", ["pnat", "xgcd_type"]], ["add", "def", "reduce", ["pnat", "xgcd_type"]], ["add", "theorem", "reduce_a", ["pnat", "xgcd_type"]], ["add", "theorem", "reduce_b", ["pnat", "xgcd_type"]], ["add", "theorem", "reduce_reduced'", ["pnat", "xgcd_type"]], ["add", "theorem", "reduce_reduced", ["pnat", "xgcd_type"]], ["add", "theorem", "reduce_special'", ["pnat", "xgcd_type"]], ["add", "theorem", "reduce_special", ["pnat", "xgcd_type"]], ["add", "theorem", "reduce_v", ["pnat", "xgcd_type"]], ["add", "theorem", "rq_eq", ["pnat", "xgcd_type"]], ["add", "def", "start", ["pnat", "xgcd_type"]], ["add", "theorem", "start_is_special", ["pnat", "xgcd_type"]], ["add", "theorem", "start_v", ["pnat", "xgcd_type"]], ["add", "def", "step", ["pnat", "xgcd_type"]], ["add", "theorem", "step_is_special", ["pnat", "xgcd_type"]], ["add", "theorem", "step_v", ["pnat", "xgcd_type"]], ["add", "theorem", "step_wf", ["pnat", "xgcd_type"]], ["add", "def", "succ₂", ["pnat", "xgcd_type"]], ["add", "def", "v", ["pnat", "xgcd_type"]], ["add", "theorem", "v_eq_succ_vp", ["pnat", "xgcd_type"]], ["add", "def", "vp", ["pnat", "xgcd_type"]], ["add", "def", "w", ["pnat", "xgcd_type"]], ["add", "def", "z", ["pnat", "xgcd_type"]], ["add", "structure", "xgcd_type", ["pnat"]]]}, {"oldPath": "src/data/rat.lean", "newPath": "src/data/rat.lean", "changes": []}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1560035489, "sha": "3f9916e1", "message": "feat(tactic/rewrite_all): tactic to perform the nth occurrence of a rewrite (#999)\n* feat(tactic/rewrite_all): tactic to perform the nth occurrence of a rewrite\n* formatting\n* formatting\n* perhaps a little bit easier to read?\n* try renaming\n* there was a duplicate definition, just not the one lean complained about\n* Namespaces\n* I think kabstract works now\n* Fix\n* Test\n* Fix guard\n* updating test to reflect difference between congr and kabstract\n* oops\n* adding Keeley's example\n* remove kabstract implementation for now\n* cleanup test file\n* rename common to basic\n* Update src/tactic/rewrite_all/default.lean", "changes": [{"oldPath": "src/data/mllist.lean", "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rewrite_all/basic.lean", "changes": [["add", "def", "other", ["side"]], ["add", "def", "to_string", ["side"]], ["add", "inductive", "side", []]]}, {"oldPath": null, "newPath": "src/tactic/rewrite_all/congr.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/rewrite_all/default.lean", "changes": []}, {"oldPath": null, "newPath": "test/rewrite_all.lean", "changes": [["add", "structure", "F", []], ["add", "structure", "cat", []]]}]}, {"timestamp": 1559926479, "sha": "b55e44de", "message": "refactor(analysis/normed_space/basic): change normed_space definition (#1112)", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": [["mod", "theorem", "convex_ball", []], ["mod", "theorem", "convex_closed_ball", []], ["mod", "theorem", "convex_on_dist", []]]}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "structure", "core", ["normed_group"]], ["add", "theorem", "tendsto_nhds_zero", ["normed_group"]], ["del", "structure", "core", ["normed_space"]], ["del", "theorem", "tendsto_nhds_zero", ["normed_space"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "structure", "is_bounded_linear_map", []]]}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "op_norm_neg", ["continuous_linear_map"]]]}]}, {"timestamp": 1559920885, "sha": "85ed958b", "message": "feat(data/quot): quot.map: act on non-id maps (#1120)\n* old version renamed to `quot.map_right`\n* similar changes to `quot.congr` and `quotient.congr`", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1559839538, "sha": "f36fdfb4", "message": "refactor(category_theory/equivalence): simplify equivalence.trans (#1114)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}]}, {"timestamp": 1559721270, "sha": "a7524b63", "message": "refactor(analysis/normed_space/operator_norm): topological modules (#1085)\n* refactor(analysis/normed_space/operator_norm): topological modules\n* remove useless typeclass in definition of topological module\n* refactor(analysis/normed_space/operator_norm): style", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "continuous_smul", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["del", "theorem", "is_bounded_linear_map", ["bounded_linear_map"]], ["del", "theorem", "is_bounded_linear_map_comp_left", ["bounded_linear_map"]], ["del", "theorem", "is_bounded_linear_map_comp_right", ["bounded_linear_map"]], ["add", "theorem", "is_bounded_linear_map", ["continuous_linear_map"]], ["add", "theorem", "is_bounded_linear_map_comp_left", ["continuous_linear_map"]], ["add", "theorem", "is_bounded_linear_map_comp_right", ["continuous_linear_map"]], ["add", "def", "linear_deriv", ["is_bounded_bilinear_map"]], ["add", "theorem", "is_bounded_bilinear_map_deriv_coe", []], ["del", "def", "to_bounded_linear_map", ["is_bounded_linear_map"]], ["add", "def", "to_continuous_linear_map", ["is_bounded_linear_map"]], ["del", "theorem", "bounded_of_continuous_at", ["is_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "add_apply", ["bounded_linear_map"]], ["del", "theorem", "bounds_bdd_below", ["bounded_linear_map"]], ["del", "theorem", "bounds_nonempty", ["bounded_linear_map"]], ["del", "theorem", "coe_add'", ["bounded_linear_map"]], ["del", "theorem", "coe_add", ["bounded_linear_map"]], ["del", "theorem", "coe_apply'", ["bounded_linear_map"]], ["del", "theorem", "coe_apply", ["bounded_linear_map"]], ["del", "theorem", "coe_coe", ["bounded_linear_map"]], ["del", "theorem", "coe_comp'", ["bounded_linear_map"]], ["del", "theorem", "coe_comp", ["bounded_linear_map"]], ["del", "theorem", "coe_id'", ["bounded_linear_map"]], ["del", "theorem", "coe_id", ["bounded_linear_map"]], ["del", "theorem", "coe_neg'", ["bounded_linear_map"]], ["del", "theorem", "coe_neg", ["bounded_linear_map"]], ["del", "theorem", "coe_sub'", ["bounded_linear_map"]], ["del", "theorem", "coe_sub", ["bounded_linear_map"]], ["del", "theorem", "coe_zero'", ["bounded_linear_map"]], ["del", "theorem", "coe_zero", ["bounded_linear_map"]], ["del", "def", "comp", ["bounded_linear_map"]], ["del", "theorem", "continuous", ["bounded_linear_map"]], ["del", "theorem", "ext", ["bounded_linear_map"]], ["del", "theorem", "ext_iff", ["bounded_linear_map"]], ["del", "def", "id", ["bounded_linear_map"]], ["del", "theorem", "id_apply", ["bounded_linear_map"]], ["del", "theorem", "is_O_comp", ["bounded_linear_map"]], ["del", "theorem", "is_O_id", ["bounded_linear_map"]], ["del", "theorem", "is_O_sub", ["bounded_linear_map"]], ["del", "theorem", "le_op_norm", ["bounded_linear_map"]], ["del", "theorem", "lipschitz", ["bounded_linear_map"]], ["del", "theorem", "map_add", ["bounded_linear_map"]], ["del", "theorem", "map_neg", ["bounded_linear_map"]], ["del", "theorem", "map_smul", ["bounded_linear_map"]], ["del", "theorem", "map_sub", ["bounded_linear_map"]], ["del", "theorem", "map_zero", ["bounded_linear_map"]], ["del", "theorem", "neg_apply", ["bounded_linear_map"]], ["del", "def", "op_norm", ["bounded_linear_map"]], ["del", "theorem", "op_norm_comp_le", ["bounded_linear_map"]], ["del", "theorem", "op_norm_le_bound", ["bounded_linear_map"]], ["del", "theorem", "op_norm_nonneg", ["bounded_linear_map"]], ["del", "theorem", "op_norm_smul", ["bounded_linear_map"]], ["del", "theorem", "op_norm_triangle", ["bounded_linear_map"]], ["del", "theorem", "op_norm_zero_iff", ["bounded_linear_map"]], ["del", "def", "prod", ["bounded_linear_map"]], ["del", "theorem", "ratio_le_op_norm", ["bounded_linear_map"]], ["del", "def", "scalar_prod_space_iso", ["bounded_linear_map"]], ["del", "theorem", "smul_apply", ["bounded_linear_map"]], ["del", "theorem", "sub_apply", ["bounded_linear_map"]], ["del", "theorem", "unit_le_op_norm", ["bounded_linear_map"]], ["del", "def", "zero", ["bounded_linear_map"]], ["del", "theorem", "zero_apply", ["bounded_linear_map"]], ["del", "structure", "bounded_linear_map", []], ["add", "theorem", "bound", ["continuous_linear_map"]], ["add", "theorem", "bounds_bdd_below", ["continuous_linear_map"]], ["add", "theorem", "bounds_nonempty", ["continuous_linear_map"]], ["add", "theorem", "is_O_comp", ["continuous_linear_map"]], ["add", "theorem", "is_O_id", ["continuous_linear_map"]], ["add", "theorem", "is_O_sub", ["continuous_linear_map"]], ["add", "theorem", "le_op_norm", ["continuous_linear_map"]], ["add", "theorem", "lipschitz", ["continuous_linear_map"]], ["add", "theorem", "norm_id", ["continuous_linear_map"]], ["add", "theorem", "norm_zero", ["continuous_linear_map"]], ["add", "def", "op_norm", ["continuous_linear_map"]], ["add", "theorem", "op_norm_comp_le", ["continuous_linear_map"]], ["add", "theorem", "op_norm_le_bound", ["continuous_linear_map"]], ["add", "theorem", "op_norm_nonneg", ["continuous_linear_map"]], ["add", "theorem", "op_norm_smul", ["continuous_linear_map"]], ["add", "theorem", "op_norm_triangle", ["continuous_linear_map"]], ["add", "theorem", "op_norm_zero_iff", ["continuous_linear_map"]], ["add", "theorem", "ratio_le_op_norm", ["continuous_linear_map"]], ["add", "theorem", "scalar_prod_space_iso_norm", ["continuous_linear_map"]], ["add", "theorem", "unit_le_op_norm", ["continuous_linear_map"]], ["add", "theorem", "continuous_of_bound", ["linear_map"]], ["add", "def", "with_bound", ["linear_map"]], ["add", "theorem", "linear_map_with_bound_apply", []], ["add", "theorem", "linear_map_with_bound_coe", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/module.lean", "changes": [["add", "theorem", "add_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_add'", ["continuous_linear_map"]], ["add", "theorem", "coe_add", ["continuous_linear_map"]], ["add", "theorem", "coe_apply'", ["continuous_linear_map"]], ["add", "theorem", "coe_apply", ["continuous_linear_map"]], ["add", "theorem", "coe_coe", ["continuous_linear_map"]], ["add", "theorem", "coe_comp'", ["continuous_linear_map"]], ["add", "theorem", "coe_comp", ["continuous_linear_map"]], ["add", "theorem", "coe_id'", ["continuous_linear_map"]], ["add", "theorem", "coe_id", ["continuous_linear_map"]], ["add", "theorem", "coe_neg'", ["continuous_linear_map"]], ["add", "theorem", "coe_neg", ["continuous_linear_map"]], ["add", "theorem", "coe_sub'", ["continuous_linear_map"]], ["add", "theorem", "coe_sub", ["continuous_linear_map"]], ["add", "theorem", "coe_zero'", ["continuous_linear_map"]], ["add", "theorem", "coe_zero", ["continuous_linear_map"]], ["add", "def", "comp", ["continuous_linear_map"]], ["add", "theorem", "ext", ["continuous_linear_map"]], ["add", "theorem", "ext_iff", ["continuous_linear_map"]], ["add", "def", "id", ["continuous_linear_map"]], ["add", "theorem", "id_apply", ["continuous_linear_map"]], ["add", "theorem", "map_add", ["continuous_linear_map"]], ["add", "theorem", "map_neg", ["continuous_linear_map"]], ["add", "theorem", "map_smul", ["continuous_linear_map"]], ["add", "theorem", "map_sub", ["continuous_linear_map"]], ["add", "theorem", "map_zero", ["continuous_linear_map"]], ["add", "theorem", "neg_apply", ["continuous_linear_map"]], ["add", "def", "prod", ["continuous_linear_map"]], ["add", "def", "scalar_prod_space_iso", ["continuous_linear_map"]], ["add", "theorem", "smul_apply", ["continuous_linear_map"]], ["add", "theorem", "sub_apply", ["continuous_linear_map"]], ["add", "def", "zero", ["continuous_linear_map"]], ["add", "theorem", "zero_apply", ["continuous_linear_map"]], ["add", "structure", "continuous_linear_map", []], ["add", "theorem", "continuous_smul'", []], ["add", "theorem", "continuous_smul", []]]}]}, {"timestamp": 1559681346, "sha": "a152f3a6", "message": "chore(doc/install/macos): improve mac install instructions (#1106)\n* tweaking install instructions\n* minor\n* minor\n* minor\n* minor\n* small icon\n* improve instructions for installing the extension on all OSes\n* minor", "changes": [{"oldPath": "docs/install/debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": null, "newPath": "docs/install/extensions-icon.png", "changes": []}, {"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install/project.md", "newPath": "docs/install/project.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1559659737, "sha": "542d25d6", "message": "fix(data/logic/basic): Use a Sort for classical.some_spec2 (#1111)", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "some_spec2", ["classical"]]]}]}, {"timestamp": 1559599899, "sha": "dd832f03", "message": "feat(topology/basic): is_open_Inter and others (#1108)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "is_closed_Union", []], ["add", "theorem", "is_closed_Union_prop", []], ["add", "theorem", "is_closed_bUnion", []], ["add", "theorem", "is_open_Inter", []], ["add", "theorem", "is_open_Inter_prop", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": []}]}, {"timestamp": 1559594169, "sha": "504c0ad2", "message": "feat(data/set/basic): union_inter_distrib lemmas (#1107)\n* feat(data/set/basic): union_inter_distrib lemmas\n* add parentheses", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_union_distrib_left", ["set"]], ["add", "theorem", "inter_union_distrib_right", ["set"]], ["add", "theorem", "union_inter_distrib_left", ["set"]], ["add", "theorem", "union_inter_distrib_right", ["set"]]]}]}, {"timestamp": 1559585135, "sha": "4263b2be", "message": "fix(data/nat/gcd): correct order of arguments in nat.coprime_mul_iff_right (#1105)\n* Not sure how this works\n* Fix order for coprime_mul_iff_right\n* Remove spurious file", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["mod", "theorem", "coprime_mul_iff_right", ["nat"]]]}]}, {"timestamp": 1559421514, "sha": "38b80546", "message": "feat(data/mv_polynomial): add coeff for mv_polynomial (#1101)", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "nat_sub_apply", ["finsupp"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "def", "coeff", ["mv_polynomial"]], ["add", "theorem", "coeff_C", ["mv_polynomial"]], ["add", "theorem", "coeff_C_mul", ["mv_polynomial"]], ["add", "theorem", "coeff_add", ["mv_polynomial"]], ["add", "theorem", "coeff_map", ["mv_polynomial"]], ["add", "theorem", "coeff_monomial", ["mv_polynomial"]], ["add", "theorem", "coeff_mul_X'", ["mv_polynomial"]], ["add", "theorem", "coeff_mul_X", ["mv_polynomial"]], ["add", "theorem", "coeff_sub", ["mv_polynomial"]], ["add", "theorem", "coeff_sum", ["mv_polynomial"]], ["add", "theorem", "coeff_zero", ["mv_polynomial"]], ["add", "theorem", "coeff_zero_X", ["mv_polynomial"]], ["add", "theorem", "ext", ["mv_polynomial"]], ["add", "theorem", "monic_monomial_eq", ["mv_polynomial"]], ["add", "def", "coe", ["mv_polynomial", "tmp"]]]}]}, {"timestamp": 1559336387, "sha": "4f6307eb", "message": "feat(topology/algebra/open_subgroup): basics on open subgroups (#1067)\n* Dump the file into mathlib\n* feat(algebra/pi_instances): product of submonoids/groups/rings\nFrom the perfectoid project.\n* Small changes\n* feat(topology/algebra/open_subgroup): basics on open subgroups\n* Some proof compression\n* Update src/topology/algebra/open_subgroup.lean", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/open_subgroup.lean", "changes": [["add", "theorem", "is_open_of_open_subideal", ["ideal"]], ["add", "theorem", "coe_inf", ["open_add_subgroup"]], ["add", "theorem", "is_open_of_open_add_subgroup", ["open_add_subgroup"]], ["add", "theorem", "le_iff", ["open_add_subgroup"]], ["add", "theorem", "mem_nhds_zero", ["open_add_subgroup"]], ["add", "def", "prod", ["open_add_subgroup"]], ["add", "theorem", "coe_inf", ["open_subgroup"]], ["add", "theorem", "coe_injective", ["open_subgroup"]], ["add", "theorem", "ext'", ["open_subgroup"]], ["add", "theorem", "ext", ["open_subgroup"]], ["add", "theorem", "is_closed", ["open_subgroup"]], ["add", "theorem", "is_open_of_nonempty_open_subset", ["open_subgroup"]], ["add", "theorem", "is_open_of_open_subgroup", ["open_subgroup"]], ["add", "theorem", "le_iff", ["open_subgroup"]], ["add", "theorem", "mem_nhds_one", ["open_subgroup"]], ["add", "def", "prod", ["open_subgroup"]], ["add", "def", "open_subgroup", []], ["add", "theorem", "is_open_of_open_submodule", ["submodule"]]]}]}, {"timestamp": 1559332184, "sha": "62379393", "message": "fix(data/nat/enat): change [] to {} in some lemmas (#1054)\n* fix(data/nat/enat): change [] to {} in some lemmas\n* Update enat.lean\n* remove space", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "to_with_top_coe'", ["enat"]], ["mod", "theorem", "to_with_top_top'", ["enat"]], ["mod", "theorem", "to_with_top_zero'", ["enat"]]]}]}, {"timestamp": 1559323615, "sha": "8ebea315", "message": "feat(category_theory/monoidal): the monoidal category of types (#1100)\n* feat(category_theory/iso): missing lemmas\n* formatting\n* formatting\n* almost\n* oops\n* getting there\n* one more\n* sleep\n* good to go\n* monoidal category of types\n* fix names\n* renaming\n* linebreak\n* temporary notations\n* notations for associator, unitors?\n* more notation\n* names\n* more names\n* oops\n* renaming, and namespaces\n* comment\n* fix comment\n* remove unnecessary open, formatting\n* removing dsimps\n* replace with simp lemmas\n* fix\n* Update types.lean\n* fix namespace", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/types.lean", "changes": [["add", "def", "types_associator", ["category_theory", "monoidal"]], ["add", "def", "types_associator_inv", ["category_theory", "monoidal"]], ["add", "def", "types_braiding", ["category_theory", "monoidal"]], ["add", "def", "types_braiding_inv", ["category_theory", "monoidal"]], ["add", "def", "types_left_unitor", ["category_theory", "monoidal"]], ["add", "def", "types_left_unitor_inv", ["category_theory", "monoidal"]], ["add", "def", "types_right_unitor", ["category_theory", "monoidal"]], ["add", "def", "types_right_unitor_inv", ["category_theory", "monoidal"]]]}]}, {"timestamp": 1559285038, "sha": "2db435d8", "message": "chore(category_theory): move all instances (e.g. Top, CommRing, Meas) into the root namespace (#1074)\n* splitting adjunction.lean\n* chore(CommRing/adjunctions): refactor proofs\n* remove unnecessary assumptions\n* add helpful doc-string\n* cleanup\n* chore(category_theory): move all instances (e.g. Top, CommRing, Meas) to the root namespace\n* minor\n* breaking things, haven't finished yet\n* deterministic timeout\n* unfold_coes to the rescue\n* one more int.cast\n* yet another int.cast\n* fix merge\n* minor\n* merge\n* fix imports\n* fix merge\n* fix imports/namespaces\n* more namespace fixes\n* fixes\n* delete stray file", "changes": [{"oldPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": []}, {"oldPath": "src/category_theory/instances/CommRing/adjunctions.lean", "newPath": "src/algebra/CommRing/adjunctions.lean", "changes": [["add", "theorem", "polynomial_ring_map_val", ["CommRing"]], ["add", "theorem", "polynomial_ring_obj_α", ["CommRing"]], ["del", "theorem", "polynomial_ring_map_val", ["category_theory", "instances", "CommRing"]], ["del", "theorem", "polynomial_ring_obj_α", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": "src/category_theory/instances/CommRing/basic.lean", "newPath": "src/algebra/CommRing/basic.lean", "changes": [["add", "def", "cast", ["CommRing", "Int"]], ["add", "def", "hom_unique", ["CommRing", "Int"]], ["add", "theorem", "comp_val", ["CommRing"]], ["add", "def", "forget", ["CommRing"]], ["add", "def", "forget_to_CommMon", ["CommRing"]], ["add", "theorem", "id_val", ["CommRing"]], ["add", "def", "is_comm_ring_hom", ["CommRing"]], ["add", "def", "of", ["CommRing"]], ["add", "def", "to_Ring", ["CommRing"]], ["add", "def", "CommRing", []], ["add", "def", "forget", ["Ring"]], ["add", "def", "of", ["Ring"]], ["add", "def", "Ring", []], ["del", "def", "cast", ["category_theory", "instances", "CommRing", "Int"]], ["del", "def", "hom_unique", ["category_theory", "instances", "CommRing", "Int"]], ["del", "def", "Int", ["category_theory", "instances", "CommRing"]], ["del", "theorem", "comp_val", ["category_theory", "instances", "CommRing"]], ["del", "def", "forget", ["category_theory", "instances", "CommRing"]], ["del", "def", "forget_to_CommMon", ["category_theory", "instances", "CommRing"]], ["del", "theorem", "ext", ["category_theory", "instances", "CommRing", "hom"]], ["del", "theorem", "hom_coe_app", ["category_theory", "instances", "CommRing"]], ["del", "theorem", "id_val", ["category_theory", "instances", "CommRing"]], ["del", "def", "of", ["category_theory", "instances", "CommRing"]], ["del", "def", "to_Ring", ["category_theory", "instances", "CommRing"]], ["del", "def", "CommRing", ["category_theory", "instances"]], ["del", "def", "Ring", ["category_theory", "instances"]]]}, {"oldPath": "src/category_theory/instances/CommRing/colimits.lean", "newPath": "src/algebra/CommRing/colimits.lean", "changes": [["add", "def", "cocone_fun", ["CommRing", "colimits"]], ["add", "def", "cocone_morphism", ["CommRing", "colimits"]], ["add", "theorem", "cocone_naturality", ["CommRing", "colimits"]], ["add", "theorem", "cocone_naturality_components", ["CommRing", "colimits"]], ["add", "def", "colimit", ["CommRing", "colimits"]], ["add", "def", "colimit_cocone", ["CommRing", "colimits"]], ["add", "def", "colimit_is_colimit", ["CommRing", "colimits"]], ["add", "def", "colimit_setoid", ["CommRing", "colimits"]], ["add", "def", "colimit_type", ["CommRing", "colimits"]], ["add", "def", "desc_fun", ["CommRing", "colimits"]], ["add", "def", "desc_fun_lift", ["CommRing", "colimits"]], ["add", "def", "desc_morphism", ["CommRing", "colimits"]], ["add", "theorem", "naturality_bundled", ["CommRing", "colimits"]], ["add", "inductive", "prequotient", ["CommRing", "colimits"]], ["add", "theorem", "quot_add", ["CommRing", "colimits"]], ["add", "theorem", "quot_mul", ["CommRing", "colimits"]], ["add", "theorem", "quot_neg", ["CommRing", "colimits"]], ["add", "theorem", "quot_one", ["CommRing", "colimits"]], ["add", "theorem", "quot_zero", ["CommRing", "colimits"]], ["add", "inductive", "relation", ["CommRing", "colimits"]], ["del", "def", "cocone_fun", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "cocone_morphism", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "cocone_naturality", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "cocone_naturality_components", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "colimit", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "colimit_cocone", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "colimit_is_colimit", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "colimit_setoid", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "colimit_type", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "desc_fun", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "desc_fun_lift", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "def", "desc_morphism", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "naturality_bundled", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "inductive", "prequotient", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "quot_add", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "quot_mul", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "quot_neg", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "quot_one", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "theorem", "quot_zero", ["category_theory", "instances", "CommRing", "colimits"]], ["del", "inductive", "relation", ["category_theory", "instances", "CommRing", "colimits"]]]}, {"oldPath": "src/category_theory/instances/CommRing/default.lean", "newPath": "src/algebra/CommRing/default.lean", "changes": []}, {"oldPath": "src/category_theory/instances/CommRing/limits.lean", "newPath": "src/algebra/CommRing/limits.lean", "changes": [["add", "def", "limit", ["CommRing"]], ["add", "def", "limit_is_limit", ["CommRing"]], ["del", "def", "limit", ["category_theory", "instances", "CommRing"]], ["del", "def", "limit_is_limit", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": "src/category_theory/instances/Mon/basic.lean", "newPath": "src/algebra/Mon/basic.lean", "changes": [["add", "def", "forget", ["CommMon"]], ["add", "def", "forget_to_Mon", ["CommMon"]], ["add", "def", "is_comm_monoid_hom", ["CommMon"]], ["add", "def", "of", ["CommMon"]], ["add", "def", "CommMon", []], ["add", "def", "forget", ["Mon"]], ["add", "def", "of", ["Mon"]], ["add", "def", "Mon", []], ["del", "def", "forget_to_Mon", ["category_theory", "instances", "CommMon"]], ["del", "def", "CommMon", ["category_theory", "instances"]], ["del", "def", "Mon", ["category_theory", "instances"]], ["del", "def", "is_comm_monoid_hom", ["category_theory", "instances"]]]}, {"oldPath": "src/category_theory/instances/Mon/colimits.lean", "newPath": "src/algebra/Mon/colimits.lean", "changes": [["add", "def", "cocone_fun", ["Mon", "colimits"]], ["add", "def", "cocone_morphism", ["Mon", "colimits"]], ["add", "theorem", "cocone_naturality", ["Mon", "colimits"]], ["add", "theorem", "cocone_naturality_components", ["Mon", "colimits"]], ["add", "def", "colimit", ["Mon", "colimits"]], ["add", "def", "colimit_cocone", ["Mon", "colimits"]], ["add", "def", "colimit_is_colimit", ["Mon", "colimits"]], ["add", "def", "colimit_setoid", ["Mon", "colimits"]], ["add", "def", "colimit_type", ["Mon", "colimits"]], ["add", "def", "desc_fun", ["Mon", "colimits"]], ["add", "def", "desc_fun_lift", ["Mon", "colimits"]], ["add", "def", "desc_morphism", ["Mon", "colimits"]], ["add", "inductive", "prequotient", ["Mon", "colimits"]], ["add", "theorem", "quot_mul", ["Mon", "colimits"]], ["add", "theorem", "quot_one", ["Mon", "colimits"]], ["add", "inductive", "relation", ["Mon", "colimits"]], ["del", "def", "cocone_fun", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "cocone_morphism", ["category_theory", "instances", "Mon", "colimits"]], ["del", "theorem", "cocone_naturality", ["category_theory", "instances", "Mon", "colimits"]], ["del", "theorem", "cocone_naturality_components", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "colimit", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "colimit_cocone", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "colimit_is_colimit", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "colimit_setoid", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "colimit_type", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "desc_fun", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "desc_fun_lift", ["category_theory", "instances", "Mon", "colimits"]], ["del", "def", "desc_morphism", ["category_theory", "instances", "Mon", "colimits"]], ["del", "inductive", "prequotient", ["category_theory", "instances", "Mon", "colimits"]], ["del", "theorem", "quot_mul", ["category_theory", "instances", "Mon", "colimits"]], ["del", "theorem", "quot_one", ["category_theory", "instances", "Mon", "colimits"]], ["del", "inductive", "relation", ["category_theory", "instances", "Mon", "colimits"]]]}, {"oldPath": "src/category_theory/instances/Mon/default.lean", "newPath": "src/algebra/Mon/default.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/algebraic_geometry/stalks.lean", "newPath": "src/algebraic_geometry/stalks.lean", "changes": []}, {"oldPath": "src/category_theory/concrete_category.lean", "newPath": "src/category_theory/concrete_category.lean", "changes": [["del", "theorem", "ext", ["category_theory", "bundled", "bundled_hom"]], ["mod", "theorem", "concrete_category_id", ["category_theory", "bundled"]], ["add", "theorem", "hom_ext", ["category_theory", "bundled"]]]}, {"oldPath": "src/category_theory/instances/Top/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/category_theory/instances/TopCommRing/default.lean", "newPath": null, "changes": []}, {"oldPath": "src/category_theory/instances/groups.lean", "newPath": "src/group_theory/category.lean", "changes": [["add", "def", "forget_to_Group", ["AddCommGroup"]], ["add", "def", "is_add_comm_group_hom", ["AddCommGroup"]], ["add", "def", "of", ["AddCommGroup"]], ["add", "def", "AddCommGroup", []], ["add", "def", "of", ["Group"]], ["add", "def", "Group", []], ["del", "def", "forget_to_Group", ["category_theory", "instances", "AddCommGroup"]], ["del", "def", "AddCommGroup", ["category_theory", "instances"]], ["del", "def", "Group", ["category_theory", "instances"]], ["del", "def", "is_add_comm_group_hom", ["category_theory", "instances"]]]}, {"oldPath": "src/category_theory/instances/measurable_space.lean", "newPath": "src/measure_theory/Meas.lean", "changes": [["add", "def", "Borel", []], ["add", "def", "of", ["Meas"]], ["add", "def", "Meas", []], ["del", "def", "Borel", ["category_theory", "instances"]], ["del", "def", "Meas", ["category_theory", "instances"]]]}, {"oldPath": "src/category_theory/instances/Top/adjunctions.lean", "newPath": "src/topology/Top/adjunctions.lean", "changes": [["add", "def", "adj₁", ["Top"]], ["add", "def", "adj₂", ["Top"]], ["del", "def", "adj₁", ["category_theory", "instances", "Top"]], ["del", "def", "adj₂", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/instances/Top/basic.lean", "newPath": "src/topology/Top/basic.lean", "changes": [["add", "def", "discrete", ["Top"]], ["add", "def", "forget", ["Top"]], ["add", "def", "of", ["Top"]], ["add", "def", "trivial", ["Top"]], ["add", "def", "Top", []], ["del", "def", "discrete", ["category_theory", "instances", "Top"]], ["del", "def", "forget", ["category_theory", "instances", "Top"]], ["del", "def", "of", ["category_theory", "instances", "Top"]], ["del", "def", "trivial", ["category_theory", "instances", "Top"]], ["del", "def", "Top", ["category_theory", "instances"]]]}, {"oldPath": null, "newPath": "src/topology/Top/default.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/epi_mono.lean", "newPath": "src/topology/Top/epi_mono.lean", "changes": [["add", "theorem", "epi_iff_surjective", ["Top"]], ["add", "theorem", "mono_iff_injective", ["Top"]], ["del", "theorem", "epi_iff_surjective", ["category_theory", "instances", "Top"]], ["del", "theorem", "mono_iff_injective", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/instances/Top/limits.lean", "newPath": "src/topology/Top/limits.lean", "changes": [["add", "def", "colimit", ["Top"]], ["add", "def", "colimit_is_colimit", ["Top"]], ["add", "def", "limit", ["Top"]], ["add", "def", "limit_is_limit", ["Top"]], ["del", "def", "colimit", ["category_theory", "instances", "Top"]], ["del", "def", "colimit_is_colimit", ["category_theory", "instances", "Top"]], ["del", "def", "limit", ["category_theory", "instances", "Top"]], ["del", "def", "limit_is_limit", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/instances/Top/open_nhds.lean", "newPath": "src/topology/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/opens.lean", "newPath": "src/topology/Top/opens.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/presheaf.lean", "newPath": "src/topology/Top/presheaf.lean", "changes": [["add", "def", "comp", ["Top", "presheaf", "pushforward"]], ["add", "theorem", "comp_hom_app", ["Top", "presheaf", "pushforward"]], ["add", "theorem", "comp_inv_app", ["Top", "presheaf", "pushforward"]], ["add", "def", "id", ["Top", "presheaf", "pushforward"]], ["add", "theorem", "id_hom_app'", ["Top", "presheaf", "pushforward"]], ["add", "theorem", "id_hom_app", ["Top", "presheaf", "pushforward"]], ["add", "theorem", "id_inv_app'", ["Top", "presheaf", "pushforward"]], ["add", "def", "pushforward", ["Top", "presheaf"]], ["add", "def", "pushforward_eq", ["Top", "presheaf"]], ["add", "theorem", "pushforward_eq_eq", ["Top", "presheaf"]], ["add", "def", "presheaf", ["Top"]], ["del", "def", "comp", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["del", "theorem", "comp_hom_app", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["del", "theorem", "comp_inv_app", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["del", "def", "id", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["del", "theorem", "id_hom_app'", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["del", "theorem", "id_hom_app", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["del", "theorem", "id_inv_app'", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["del", "def", "pushforward", ["category_theory", "instances", "Top", "presheaf"]], ["del", "def", "pushforward_eq", ["category_theory", "instances", "Top", "presheaf"]], ["del", "theorem", "pushforward_eq_eq", ["category_theory", "instances", "Top", "presheaf"]], ["del", "def", "presheaf", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/instances/Top/presheaf_of_functions.lean", "newPath": "src/topology/Top/presheaf_of_functions.lean", "changes": [["add", "def", "CommRing_yoneda", ["Top"]], ["add", "theorem", "add", ["Top", "continuous_functions"]], ["add", "def", "map", ["Top", "continuous_functions"]], ["add", "theorem", "mul", ["Top", "continuous_functions"]], ["add", "theorem", "one", ["Top", "continuous_functions"]], ["add", "def", "pullback", ["Top", "continuous_functions"]], ["add", "def", "continuous_functions", ["Top"]], ["add", "def", "presheaf_to_Top", ["Top"]], ["add", "def", "presheaf_to_TopCommRing", ["Top"]], ["del", "def", "CommRing_yoneda", ["category_theory", "instances", "Top"]], ["del", "theorem", "add", ["category_theory", "instances", "Top", "continuous_functions"]], ["del", "def", "map", ["category_theory", "instances", "Top", "continuous_functions"]], ["del", "theorem", "mul", ["category_theory", "instances", "Top", "continuous_functions"]], ["del", "theorem", "one", ["category_theory", "instances", "Top", "continuous_functions"]], ["del", "def", "pullback", ["category_theory", "instances", "Top", "continuous_functions"]], ["del", "def", "continuous_functions", ["category_theory", "instances", "Top"]], ["del", "def", "presheaf_to_Top", ["category_theory", "instances", "Top"]], ["del", "def", "presheaf_to_TopCommRing", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/instances/Top/stalks.lean", "newPath": "src/topology/Top/stalks.lean", "changes": [["add", "def", "stalk", ["Top", "presheaf"]], ["add", "def", "stalk_functor", ["Top", "presheaf"]], ["add", "theorem", "stalk_functor_obj", ["Top", "presheaf"]], ["add", "theorem", "comp", ["Top", "presheaf", "stalk_pushforward"]], ["add", "theorem", "id", ["Top", "presheaf", "stalk_pushforward"]], ["add", "def", "stalk_pushforward", ["Top", "presheaf"]], ["del", "def", "stalk", ["category_theory", "instances", "Top", "presheaf"]], ["del", "def", "stalk_functor", ["category_theory", "instances", "Top", "presheaf"]], ["del", "theorem", "stalk_functor_obj", ["category_theory", "instances", "Top", "presheaf"]], ["del", "theorem", "comp", ["category_theory", "instances", "Top", "presheaf", "stalk_pushforward"]], ["del", "theorem", "id", ["category_theory", "instances", "Top", "presheaf", "stalk_pushforward"]], ["del", "def", "stalk_pushforward", ["category_theory", "instances", "Top", "presheaf"]]]}, {"oldPath": "src/category_theory/instances/TopCommRing/basic.lean", "newPath": "src/topology/algebra/TopCommRing/basic.lean", "changes": [["add", "def", "forget", ["TopCommRing"]], ["add", "def", "forget_to_CommRing", ["TopCommRing"]], ["add", "def", "forget_to_Top", ["TopCommRing"]], ["add", "def", "forget_to_Type_via_CommRing", ["TopCommRing"]], ["add", "def", "forget_to_Type_via_Top", ["TopCommRing"]], ["add", "def", "of", ["TopCommRing"]], ["add", "structure", "TopCommRing", []], ["del", "def", "forget", ["category_theory", "instances", "TopCommRing"]], ["del", "def", "forget_to_CommRing", ["category_theory", "instances", "TopCommRing"]], ["del", "def", "forget_to_Top", ["category_theory", "instances", "TopCommRing"]], ["del", "def", "forget_to_Type_via_CommRing", ["category_theory", "instances", "TopCommRing"]], ["del", "def", "forget_to_Type_via_Top", ["category_theory", "instances", "TopCommRing"]], ["del", "def", "of", ["category_theory", "instances", "TopCommRing"]], ["del", "structure", "TopCommRing", ["category_theory", "instances"]]]}, {"oldPath": null, "newPath": "src/topology/algebra/TopCommRing/default.lean", "changes": []}]}, {"timestamp": 1559220227, "sha": "c49ac06f", "message": "feat(category_theory/monoidal): monoidal categories, monoidal functors (#1002)\n* feat(category_theory/iso): missing lemmas\n* formatting\n* formatting\n* almost\n* oops\n* getting there\n* one more\n* sleep\n* good to go\n* fix names\n* renaming\n* linebreak\n* temporary notations\n* notations for associator, unitors?\n* more notation\n* names\n* more names\n* oops\n* renaming, and namespaces\n* comment\n* fix comment\n* remove unnecessary open, formatting\n* removing dsimps\n* replace with simp lemmas\n* fix", "changes": [{"oldPath": null, "newPath": "src/category_theory/monoidal/category.lean", "changes": [["add", "theorem", "associator_inv_naturality", ["category_theory", "monoidal_category"]], ["add", "def", "associator_nat_iso", ["category_theory", "monoidal_category"]], ["add", "theorem", "comp_tensor_id", ["category_theory", "monoidal_category"]], ["add", "theorem", "id_tensor_comp", ["category_theory", "monoidal_category"]], ["add", "theorem", "id_tensor_comp_tensor_id", ["category_theory", "monoidal_category"]], ["add", "theorem", "inv_tensor", ["category_theory", "monoidal_category"]], ["add", "def", "left_assoc_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_assoc_tensor_map", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_assoc_tensor_obj", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_inv_naturality", ["category_theory", "monoidal_category"]], ["add", "def", "left_unitor_nat_iso", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_product_aux", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_product_aux_perimeter", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_product_aux_square", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_product_aux_triangle", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "left_unitor_tensor_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "pentagon_inv", ["category_theory", "monoidal_category"]], ["add", "def", "right_assoc_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_assoc_tensor_map", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_assoc_tensor_obj", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_inv_naturality", ["category_theory", "monoidal_category"]], ["add", "def", "right_unitor_nat_iso", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_product_aux", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_product_aux_perimeter", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_product_aux_square", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_product_aux_triangle", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "right_unitor_tensor_inv", ["category_theory", "monoidal_category"]], ["add", "def", "tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_id_comp_id_tensor", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_left_iff", ["category_theory", "monoidal_category"]], ["add", "theorem", "tensor_right_iff", ["category_theory", "monoidal_category"]], ["add", "def", "tensor_unit_left", ["category_theory", "monoidal_category"]], ["add", "def", "tensor_unit_right", ["category_theory", "monoidal_category"]], ["add", "theorem", "triangle_assoc_comp_left", ["category_theory", "monoidal_category"]], ["add", "theorem", "triangle_assoc_comp_left_inv", ["category_theory", "monoidal_category"]], ["add", "theorem", "triangle_assoc_comp_right", ["category_theory", "monoidal_category"]], ["add", "theorem", "triangle_assoc_comp_right_inv", ["category_theory", "monoidal_category"]], ["add", "def", "tensor_iso", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/category_aux.lean", "changes": [["add", "def", "assoc_natural", ["category_theory"]], ["add", "def", "assoc_obj", ["category_theory"]], ["add", "def", "left_unitor_natural", ["category_theory"]], ["add", "def", "left_unitor_obj", ["category_theory"]], ["add", "def", "pentagon", ["category_theory"]], ["add", "def", "right_unitor_natural", ["category_theory"]], ["add", "def", "right_unitor_obj", ["category_theory"]], ["add", "def", "tensor_hom_type", ["category_theory"]], ["add", "def", "tensor_obj_type", ["category_theory"]], ["add", "def", "triangle", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/monoidal/functor.lean", "changes": [["add", "def", "comp", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "comp_map", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "comp_obj", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "comp_ε", ["category_theory", "lax_monoidal_functor"]], ["add", "theorem", "comp_μ", ["category_theory", "lax_monoidal_functor"]], ["add", "structure", "lax_monoidal_functor", ["category_theory"]], ["add", "def", "comp", ["category_theory", "monoidal_functor"]], ["add", "def", "id", ["category_theory", "monoidal_functor"]], ["add", "theorem", "id_map", ["category_theory", "monoidal_functor"]], ["add", "theorem", "id_obj", ["category_theory", "monoidal_functor"]], ["add", "theorem", "id_ε", ["category_theory", "monoidal_functor"]], ["add", "theorem", "id_μ", ["category_theory", "monoidal_functor"]], ["add", "def", "ε_iso", ["category_theory", "monoidal_functor"]], ["add", "def", "μ_iso", ["category_theory", "monoidal_functor"]], ["add", "def", "μ_nat_iso", ["category_theory", "monoidal_functor"]], ["add", "structure", "monoidal_functor", ["category_theory"]]]}]}, {"timestamp": 1559167560, "sha": "4845b663", "message": "feat(ring_theory): free_ring and free_comm_ring (#734)\n* feat(ring_theory): free_ring and free_comm_ring\n* Define isomorphism with mv_polynomial int\n* Ring hom free_ring -> free_comm_ring; 1 sorry left\n* Coe from free_ring to free_comm_ring is ring_hom\n* WIP\n* WIP\n* WIP\n* WIP\n* Refactoring a bunch of stuff\n* functor.map_equiv\n* Fix build\n* Fix build\n* Make multiset.subsingleton_equiv computable\n* Define specific equivs using general machinery\n* Fix build\n* Remove old commented code\n* feat(data/equiv/functor): map_equiv\n* fix(data/multiset): remove duplicate setoid instance\n* namespace changes", "changes": [{"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": null, "newPath": "src/ring_theory/free_comm_ring.lean", "changes": [["add", "def", "lift", ["free_comm_ring"]], ["add", "theorem", "lift_add", ["free_comm_ring"]], ["add", "theorem", "lift_comp_of", ["free_comm_ring"]], ["add", "theorem", "lift_mul", ["free_comm_ring"]], ["add", "theorem", "lift_neg", ["free_comm_ring"]], ["add", "theorem", "lift_of", ["free_comm_ring"]], ["add", "theorem", "lift_one", ["free_comm_ring"]], ["add", "theorem", "lift_pow", ["free_comm_ring"]], ["add", "theorem", "lift_sub", ["free_comm_ring"]], ["add", "theorem", "lift_zero", ["free_comm_ring"]], ["add", "def", "map", ["free_comm_ring"]], ["add", "theorem", "map_add", ["free_comm_ring"]], ["add", "theorem", "map_mul", ["free_comm_ring"]], ["add", "theorem", "map_neg", ["free_comm_ring"]], ["add", "theorem", "map_of", ["free_comm_ring"]], ["add", "theorem", "map_one", ["free_comm_ring"]], ["add", "theorem", "map_pow", ["free_comm_ring"]], ["add", "theorem", "map_sub", ["free_comm_ring"]], ["add", "theorem", "map_zero", ["free_comm_ring"]], ["add", "def", "of", ["free_comm_ring"]], ["add", "def", "free_comm_ring", []], ["add", "def", "free_comm_ring_equiv_mv_polynomial_int", []], ["add", "def", "free_comm_ring_pempty_equiv_int", []], ["add", "def", "free_comm_ring_punit_equiv_polynomial_int", []], ["add", "theorem", "coe_eq", ["free_ring"]], ["add", "def", "subsingleton_equiv_free_comm_ring", ["free_ring"]], ["add", "def", "to_free_comm_ring", ["free_ring"]], ["add", "def", "free_ring_pempty_equiv_int", []], ["add", "def", "free_ring_punit_equiv_polynomial_int", []]]}, {"oldPath": null, "newPath": "src/ring_theory/free_ring.lean", "changes": [["add", "def", "lift", ["free_ring"]], ["add", "theorem", "lift_add", ["free_ring"]], ["add", "theorem", "lift_comp_of", ["free_ring"]], ["add", "theorem", "lift_mul", ["free_ring"]], ["add", "theorem", "lift_neg", ["free_ring"]], ["add", "theorem", "lift_of", ["free_ring"]], ["add", "theorem", "lift_one", ["free_ring"]], ["add", "theorem", "lift_pow", ["free_ring"]], ["add", "theorem", "lift_sub", ["free_ring"]], ["add", "theorem", "lift_zero", ["free_ring"]], ["add", "def", "map", ["free_ring"]], ["add", "theorem", "map_add", ["free_ring"]], ["add", "theorem", "map_mul", ["free_ring"]], ["add", "theorem", "map_neg", ["free_ring"]], ["add", "theorem", "map_of", ["free_ring"]], ["add", "theorem", "map_one", ["free_ring"]], ["add", "theorem", "map_pow", ["free_ring"]], ["add", "theorem", "map_sub", ["free_ring"]], ["add", "theorem", "map_zero", ["free_ring"]], ["add", "def", "of", ["free_ring"]], ["add", "def", "free_ring", []]]}]}, {"timestamp": 1559128222, "sha": "d935bc31", "message": "feat(presheaves/stalks): stalks of presheafs, and presheafed spaces with extra structure on stalks (#1018)\n* feat(category_theory/colimits): missing simp lemmas\n* feat(category_theory): functor.map_nat_iso\n* define `functor.map_nat_iso`, and relate to whiskering\n* rename `functor.on_iso` to `functor.map_iso`\n* add some missing lemmas about whiskering\n* fix(category_theory): presheaves, unbundled and bundled, and pushforwards\n* restoring `(opens X)ᵒᵖ`\n* various changes from working on stalks\n* rename `nbhds` to `open_nhds`\n* fix introduced typo\n* typo\n* compactify a proof\n* rename `presheaf` to `presheaf_on_space`\n* fix(category_theory): turn `has_limits` classes into structures\n* naming instances to avoid collisions\n* breaking up instances.topological_spaces\n* fixing all the other pi-type typclasses\n* fix import\n* oops\n* fix import\n* feat(category_theory): stalks of sheaves\n* renaming\n* fixes after rebase\n* nothing\n* yay, got rid of the @s\n* attempting a very general version of structured stalks\n* missed one\n* typo\n* WIP\n* oops\n* the presheaf of continuous functions to ℂ\n* restoring eq_to_hom simp lemmas\n* removing unnecessary simp lemma\n* remove another superfluous lemma\n* removing the nat_trans and vcomp notations; use \\hom and \\gg\n* a simpler proposal\n* getting rid of vcomp\n* fix\n* splitting files\n* renaming\n* probably working again?\n* update notation\n* remove old lemma\n* fix\n* comment out unfinished stuff\n* cleanup\n* use iso_whisker_right instead of map_nat_iso\n* proofs magically got easier?\n* improve some proofs\n* moving instances\n* remove crap\n* tidy\n* minimise imports\n* chore(travis): disable the check for minimal imports\n* Update src/algebraic_geometry/presheafed_space.lean\nCo-Authored-By: semorrison \n* writing `op_induction` tactic, and improving proofs\n* squeeze_simping\n* cleanup\n* rearranging\n* cleanup\n* cleaning up\n* cleaning up\n* move\n* cleaning up\n* structured stalks\n* comment\n* structured stalks\n* more simp lemmas\n* formatting\n* Update src/category_theory/instances/Top/presheaf_of_functions.lean\nCo-Authored-By: Floris van Doorn \n* fixes in response to review\n* tidy regressions... :-(\n* oops\n* Update src/algebraic_geometry/presheafed_space.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebraic_geometry/presheafed_space.lean\nCo-Authored-By: Johan Commelin \n* Update src/algebraic_geometry/presheafed_space.lean\nCo-Authored-By: Johan Commelin \n* Update src/category_theory/instances/TopCommRing/basic.lean\nCo-Authored-By: Johan Commelin \n* def to lemma\n* remove useless lemma\n* explicit associator\n* broken\n* can't get proofs to work...\n* remove superfluous imports\n* missing headers\n* change example\n* reverting changes to tidy\n* remove presheaf_Z, as it doesn't work at the moment\n* fixes\n* fixes\n* fix\n* postponing stuff on structured stalks for a later PR\n* coercions\n* getting rid of all the `erw`\n* omitting some proofs\n* deleting more proofs\n* convert begin ... end to by\n* local", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "theorem", "as_coe", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "comp_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["del", "theorem", "comp_f", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "f_as_coe", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "hom_mk_coe", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "id_c_app", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "id_coe", ["algebraic_geometry", "PresheafedSpace"]], ["del", "theorem", "id_f", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "mk_coe", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": null, "newPath": "src/algebraic_geometry/stalks.lean", "changes": [["add", "def", "stalk", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "comp", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["add", "theorem", "id", ["algebraic_geometry", "PresheafedSpace", "stalk_map"]], ["add", "def", "stalk_map", ["algebraic_geometry", "PresheafedSpace"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["add", "theorem", "flip_map_app", ["category_theory", "functor"]], ["add", "theorem", "flip_obj_obj", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/instances/Top/basic.lean", "newPath": "src/category_theory/instances/Top/basic.lean", "changes": [["add", "def", "forget", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/instances/Top/open_nhds.lean", "newPath": "src/category_theory/instances/Top/open_nhds.lean", "changes": [["add", "theorem", "map_obj", ["topological_space", "open_nhds"]]]}, {"oldPath": "src/category_theory/instances/Top/opens.lean", "newPath": "src/category_theory/instances/Top/opens.lean", "changes": [["add", "theorem", "map_obj", ["topological_space", "opens"]]]}, {"oldPath": "src/category_theory/instances/Top/presheaf.lean", "newPath": "src/category_theory/instances/Top/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/presheaf_of_functions.lean", "newPath": "src/category_theory/instances/Top/presheaf_of_functions.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/stalks.lean", "changes": [["add", "def", "stalk", ["category_theory", "instances", "Top", "presheaf"]], ["add", "def", "stalk_functor", ["category_theory", "instances", "Top", "presheaf"]], ["add", "theorem", "stalk_functor_obj", ["category_theory", "instances", "Top", "presheaf"]], ["add", "theorem", "comp", ["category_theory", "instances", "Top", "presheaf", "stalk_pushforward"]], ["add", "theorem", "id", ["category_theory", "instances", "Top", "presheaf", "stalk_pushforward"]], ["add", "def", "stalk_pushforward", ["category_theory", "instances", "Top", "presheaf"]]]}, {"oldPath": "src/category_theory/instances/TopCommRing/basic.lean", "newPath": "src/category_theory/instances/TopCommRing/basic.lean", "changes": [["mod", "def", "forget_to_Type_via_CommRing", ["category_theory", "instances", "TopCommRing"]], ["mod", "def", "forget_to_Type_via_Top", ["category_theory", "instances", "TopCommRing"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/data/opposite.lean", "newPath": "src/data/opposite.lean", "changes": []}]}, {"timestamp": 1559109782, "sha": "0de4bba3", "message": "feat(ordered_group): add missing instance (#1094)", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "neg_neg_iff_pos", []]]}]}, {"timestamp": 1559055695, "sha": "b20b722b", "message": "fix(tactic/rcases): add parse desc to rcases/rintro (#1091)", "changes": [{"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "test/rcases.lean", "newPath": "test/rcases.lean", "changes": []}]}, {"timestamp": 1558901520, "sha": "d4343972", "message": "feat(group_theory/conjugates) : define conjugates (#1029)\n* feat(algebra/order_functions): generalize strict_mono.monotone (#1022)\n* moving stuff to where it belongs\n* removed unecessary import\n* Changed to union\n* Update src/group_theory/subgroup.lean\nCo-Authored-By: Johan Commelin \n* Stylistic changes\n* Added authorship\n* Moved mem_conjugates_of_set\n* Authorship\n* Trying fixes\n* Putting everything in the right order\n* removed import", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "conj_inv", []], ["add", "theorem", "conj_mul", []]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "conj_mem_conjugates_of_set", ["group"]], ["add", "def", "conjugates", ["group"]], ["add", "def", "conjugates_of_set", ["group"]], ["add", "theorem", "conjugates_of_set_mono", ["group"]], ["add", "theorem", "conjugates_of_set_subset", ["group"]], ["add", "theorem", "conjugates_of_set_subset_normal_closure", ["group"]], ["add", "theorem", "conjugates_subset", ["group"]], ["add", "theorem", "mem_conjugates_of_set_iff", ["group"]], ["add", "theorem", "mem_conjugates_self", ["group"]], ["add", "def", "normal_closure", ["group"]], ["add", "theorem", "normal_closure_mono", ["group"]], ["add", "theorem", "normal_closure_subset", ["group"]], ["add", "theorem", "normal_closure_subset_iff", ["group"]], ["add", "theorem", "subset_conjugates_of_set", ["group"]], ["add", "theorem", "subset_normal_closure", ["group"]]]}]}, {"timestamp": 1558675799, "sha": "c6a7f300", "message": "refactor(set_theory/ordinal): shorten proof of well_ordering_thm (#1078)\n* refactor(set_theory/ordinal): shorten proof of well_ordering_thm§\n* Update ordinal.lean\n* Update ordinal.lean\n* Update ordinal.lean\n* Improve readability\n* shorten proof\n* Shorten proof", "changes": [{"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["del", "theorem", "chain_ub", []], ["mod", "theorem", "well_ordering_thm", []]]}]}, {"timestamp": 1558619406, "sha": "62acd6b8", "message": "chore(CommRing/adjunctions): refactor proofs (#1049)\n* splitting adjunction.lean\n* chore(CommRing/adjunctions): refactor proofs\n* remove unnecessary assumptions\n* add helpful doc-string\n* cleanup\n* breaking things, haven't finished yet\n* deterministic timeout\n* unfold_coes to the rescue\n* one more int.cast\n* yet another int.cast\n* Update src/data/mv_polynomial.lean\nCo-Authored-By: Johan Commelin \n* Update src/data/mv_polynomial.lean\nCo-Authored-By: Johan Commelin \n* WIP\n* Fix build\n* Fix build", "changes": [{"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction/basic.lean", "changes": [["del", "def", "cocones_iso", ["category_theory", "adjunction"]], ["del", "def", "cones_iso", ["category_theory", "adjunction"]], ["del", "def", "functoriality_is_left_adjoint", ["category_theory", "adjunction"]], ["del", "def", "functoriality_is_right_adjoint", ["category_theory", "adjunction"]], ["del", "def", "left_adjoint_preserves_colimits", ["category_theory", "adjunction"]], ["del", "def", "right_adjoint_preserves_limits", ["category_theory", "adjunction"]]]}, {"oldPath": null, "newPath": "src/category_theory/adjunction/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/adjunction/limits.lean", "changes": [["add", "def", "cocones_iso", ["category_theory", "adjunction"]], ["add", "def", "cones_iso", ["category_theory", "adjunction"]], ["add", "def", "functoriality_is_left_adjoint", ["category_theory", "adjunction"]], ["add", "def", "functoriality_is_right_adjoint", ["category_theory", "adjunction"]], ["add", "def", "left_adjoint_preserves_colimits", ["category_theory", "adjunction"]], ["add", "def", "right_adjoint_preserves_limits", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/epi_mono.lean", "newPath": "src/category_theory/epi_mono.lean", "changes": []}, {"oldPath": "src/category_theory/instances/CommRing/adjunctions.lean", "newPath": "src/category_theory/instances/CommRing/adjunctions.lean", "changes": [["del", "theorem", "hom_coe_app'", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": "src/category_theory/instances/CommRing/basic.lean", "newPath": "src/category_theory/instances/CommRing/basic.lean", "changes": [["del", "def", "eq_cast'", ["category_theory", "instances", "CommRing", "int"]]]}, {"oldPath": "src/category_theory/instances/Top/adjunctions.lean", "newPath": "src/category_theory/instances/Top/adjunctions.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["mod", "theorem", "types_comp", ["category_theory"]], ["mod", "theorem", "types_id", ["category_theory"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "eq_cast'", ["int"]]]}, {"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "eval₂_cast_comp", ["mv_polynomial"]], ["add", "theorem", "eval₂_hom_X", ["mv_polynomial"]], ["add", "theorem", "hom_C", ["mv_polynomial"]], ["mod", "theorem", "rename_id", ["mv_polynomial"]], ["mod", "theorem", "rename_rename", ["mv_polynomial"]]]}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}]}, {"timestamp": 1558609680, "sha": "15fecbdd", "message": "doc(finsupp,category_theory): fixes (#1075)\n* doc\n* update emb_domain doc string\n* typo", "changes": [{"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}]}, {"timestamp": 1558551876, "sha": "d07e3b3e", "message": "feat(linear_algebra/basic): general_linear_group basics (#1064)\n* feat(linear_algebra/basic): general_linear_group basics\nThis patch proves that the general_linear_group (defined as units in the\nendomorphism ring) are equivalent to the group of linear equivalences.\n* shorten proof of ext\n* Add mul_equiv\n* Use coe\n* Fix stupid error", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ext", ["linear_equiv"]], ["add", "theorem", "to_equiv_injective", ["linear_equiv"]], ["add", "def", "general_linear_equiv", ["linear_map", "general_linear_group"]], ["add", "theorem", "general_linear_equiv_to_linear_map", ["linear_map", "general_linear_group"]], ["add", "def", "of_linear_equiv", ["linear_map", "general_linear_group"]], ["add", "def", "to_linear_equiv", ["linear_map", "general_linear_group"]]]}]}, {"timestamp": 1558542760, "sha": "f004d327", "message": "feat(data/nat): various lemmas (#1017)\n* feat(data/nat): various lemmas\n* protect a definition\n* fixes\n* Rob's suggestions\n* Mario’s proof\n(Working offline, let’s see what Travis says)\n* minigolf", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "div_eq_self", ["nat"]], ["add", "theorem", "div_le_div_left", ["nat"]], ["add", "theorem", "eq_of_dvd_quot_one", ["nat"]], ["add", "theorem", "eq_zero_of_double_le", ["nat"]], ["add", "theorem", "eq_zero_of_le_div", ["nat"]], ["add", "theorem", "eq_zero_of_le_half", ["nat"]], ["add", "theorem", "eq_zero_of_mul_le", ["nat"]], ["add", "theorem", "lt_mul_of_div_lt", ["nat"]]]}]}, {"timestamp": 1558474182, "sha": "971ddcc2", "message": "feat(*): image_closure (#1069)\nProve that the image of the closure is the closure of the image,\nfor submonoids/groups/rings.\nFrom the perfectoid project.", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "image_closure", ["add_group"]], ["add", "theorem", "image_closure", ["group"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "image_closure", ["add_monoid"]], ["add", "theorem", "image_closure", ["monoid"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "image_closure", ["ring"]]]}]}, {"timestamp": 1558454467, "sha": "34613996", "message": "refactor(integration.lean): changing `measure_space` to `measurable_space` (#1072)\nI've been using this file and `range_const` doesn't seem to require the spurious `measure_space` instance. `measurable_space` seems to suffice.", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "range_const", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1558380424, "sha": "cb30c97e", "message": "feat(algebra/pi_instances): product of submonoids/groups/rings (#1066)\nFrom the perfectoid project.", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}]}, {"timestamp": 1558377319, "sha": "0ab8a89d", "message": "feat(category_theory): limits in CommRing (#1006)\n* feat(category_theory): limits in CommRing\n* by\n* rename\n* sections\n* Update src/category_theory/types.lean\nCo-Authored-By: Johannes Hölzl ", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["del", "def", "is_ring_hom_pi", ["pi"]]]}, {"oldPath": "src/category_theory/instances/CommRing/basic.lean", "newPath": "src/category_theory/instances/CommRing/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/instances/CommRing/limits.lean", "changes": [["add", "def", "limit", ["category_theory", "instances", "CommRing"]], ["add", "def", "limit_is_limit", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "def", "sections", ["category_theory", "functor"]]]}]}, {"timestamp": 1558366619, "sha": "8cf7c4c8", "message": "chore(topology/algebra/monoid): continuous_mul_left/right (#1065)", "changes": [{"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "continuous_mul_left", []], ["add", "theorem", "continuous_mul_right", []]]}]}, {"timestamp": 1558365110, "sha": "593938cd", "message": "chore(ring_theory/algebra): simp-lemmas for alg_hom.to_linear_map (#1062)\n* chore(ring_theory/algebra): simp-lemmas for alg_hom.to_linear_map\nFrom the perfectoid project.\n* Stupid error\n* Update src/ring_theory/algebra.lean\nCo-Authored-By: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "comp_to_linear_map", ["alg_hom"]], ["add", "theorem", "id_to_linear_map", ["alg_hom"]]]}]}, {"timestamp": 1558353149, "sha": "d001abfd", "message": "feat(tactic/basic): adds `contrapose` tactic (#1015)\n* feat(tactic/basic): adds `contrapose` tactic\n* fix(tactic/push_neg): fix is_prop testing\n* Setup error message testing following Rob, add tests for `contrapose`\n* refactor(tactic/interactive): move noninteractive success_if_fail_with_msg to tactic/core", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": "src/tactic/push_neg.lean", "changes": [["add", "theorem", "imp_of_not_imp_not", []]]}, {"oldPath": "test/push_neg.lean", "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1558351013, "sha": "15a6af22", "message": "feat(topology/opens): continuous.comap : opens Y → opens X (#1061)\n* feat(topology/opens): continuous.comap : opens Y → opens X\nFrom the perfectoid project.\n* Update opens.lean", "changes": [{"oldPath": "src/topology/opens.lean", "newPath": "src/topology/opens.lean", "changes": [["add", "def", "comap", ["continuous"]], ["add", "theorem", "comap_id", ["continuous"]], ["add", "theorem", "comap_mono", ["continuous"]]]}]}, {"timestamp": 1558344419, "sha": "d4c7b7a6", "message": "feat(tactic/linarith): better input syntax linarith only [...] (#1056)\n* feat(tactic/ring, tactic/linarith): add reducibility parameter\n* fix(tactic/ring): interactive parsing for argument to ring1\n* feat(tactic/linarith): better input syntax linarith only [...]\n* fix(docs/tactics): fix linarith doc", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1558287609, "sha": "f2534017", "message": "refactor: coherent composition order (#1055)", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/banach.lean", "newPath": "src/analysis/normed_space/banach.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "inter_mem_nhds_within", []], ["add", "theorem", "nhds_within_restrict'", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "comp", ["continuous_at"]], ["mod", "theorem", "comp", ["continuous_on"]], ["add", "theorem", "comp", ["continuous_within_at"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}]}, {"timestamp": 1558273162, "sha": "cb4c9ee7", "message": "refactor(topology/metric/gromov_hausdorff): make Hausdorff_edist irreducible (#1052)\n* refactor(topology/metric/gromov_hausdorff): remove linarith calls\n* refactor(topology/metric/hausdorff_dist): make hausdorff_dist irreducible", "changes": [{"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "theorem", "Hausdorff_edist_def", ["emetric"]]]}]}, {"timestamp": 1558270076, "sha": "b9cb69c3", "message": "feat(topology/order): make nhds irreducible (#1043)\n* feat(topology/order): make nhds irreducible\n* move nhds irreducible to topology.basic", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "le_nhds_iff", []], ["add", "theorem", "nhds_def", []], ["add", "theorem", "nhds_le_of_le", []]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1558197404, "sha": "73c3f717", "message": "feat(tactic/squeeze): remove noise from output (#1047)", "changes": [{"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1558186077, "sha": "fa0e7570", "message": "refactor(data/complex/exponential): improve trig proofs (#1041)\n* fix(data/complex/exponential): make complex.exp irreducible\nSee discussion at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/-T50000.20challenge\nUsing `ring` (and other tactics) on terms involving `exp` can lead to some unpleasant and unnecessary unfolding.\n* refactor(data/complex/exponential): improve trig proofs\n* fix build\n* fix(algebra/group): prove lemma for comm_semigroup instead of comm_monoid", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "add_add_sub_cancel", []], ["add", "theorem", "add_sub_sub_cancel", []], ["add", "theorem", "mul_mul_mul_comm", []], ["add", "theorem", "sub_add_add_cancel", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "sq_sub_sq", []]]}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "theorem", "mul_self_sub_mul_self", []]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "I_sq", ["complex"]], ["add", "theorem", "eq_conj_iff_re", ["complex"]], ["mod", "theorem", "eq_conj_iff_real", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_add_sin_I", ["complex"]], ["add", "theorem", "cos_sub_sin_I", ["complex"]], ["add", "theorem", "cos_two_mul'", ["complex"]], ["add", "theorem", "cosh_add_sinh", ["complex"]], ["add", "theorem", "cosh_mul_I", ["complex"]], ["add", "theorem", "cosh_sq_sub_sinh_sq", ["complex"]], ["add", "theorem", "cosh_sub_sinh", ["complex"]], ["del", "theorem", "sin_pow_two_add_cos_pow_two", ["complex"]], ["add", "theorem", "sin_sq_add_cos_sq", ["complex"]], ["add", "theorem", "sinh_add_cosh", ["complex"]], ["add", "theorem", "sinh_mul_I", ["complex"]], ["add", "theorem", "two_cos", ["complex"]], ["add", "theorem", "two_cosh", ["complex"]], ["add", "theorem", "two_sin", ["complex"]], ["add", "theorem", "two_sinh", ["complex"]], ["del", "theorem", "cos_pow_two_le_one", ["real"]], ["add", "theorem", "cos_sq_le_one", ["real"]], ["mod", "theorem", "exp_injective", ["real"]], ["mod", "theorem", "exp_le_exp", ["real"]], ["mod", "theorem", "exp_lt_exp", ["real"]], ["add", "theorem", "exp_strict_mono", ["real"]], ["del", "theorem", "sin_pow_two_add_cos_pow_two", ["real"]], ["del", "theorem", "sin_pow_two_le_one", ["real"]], ["add", "theorem", "sin_sq_add_cos_sq", ["real"]], ["add", "theorem", "sin_sq_le_one", ["real"]]]}]}, {"timestamp": 1558124502, "sha": "5e5298b9", "message": "feat(adjointify): make definition easier for elaborator (#1045)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}]}, {"timestamp": 1558119221, "sha": "45afa86e", "message": "fix(topology/stone_cech): faster proof from @PatrickMassot (#1042)", "changes": [{"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}]}, {"timestamp": 1558114715, "sha": "901178e2", "message": "feat(set_theory/surreal): surreal numbers (#958)\n* feat(set_theory/surreal): surreal numbers\n* doc(set_theory/surreal): surreal docs\n* minor changes in surreal", "changes": [{"oldPath": null, "newPath": "src/set_theory/surreal.lean", "changes": [["add", "def", "add", ["pSurreal"]], ["add", "def", "equiv", ["pSurreal"]], ["add", "theorem", "equiv_refl", ["pSurreal"]], ["add", "theorem", "equiv_symm", ["pSurreal"]], ["add", "theorem", "equiv_trans", ["pSurreal"]], ["add", "def", "inv'", ["pSurreal"]], ["add", "def", "inv_val", ["pSurreal"]], ["add", "theorem", "le_congr", ["pSurreal"]], ["add", "def", "le_lt", ["pSurreal"]], ["add", "theorem", "le_of_lt", ["pSurreal"]], ["add", "theorem", "le_refl", ["pSurreal"]], ["add", "theorem", "le_trans", ["pSurreal"]], ["add", "theorem", "le_trans_aux", ["pSurreal"]], ["add", "theorem", "lt_asymm", ["pSurreal"]], ["add", "theorem", "lt_congr", ["pSurreal"]], ["add", "theorem", "lt_iff_le_not_le", ["pSurreal"]], ["add", "theorem", "lt_irrefl", ["pSurreal"]], ["add", "theorem", "lt_mk_of_le", ["pSurreal"]], ["add", "theorem", "lt_of_le_mk", ["pSurreal"]], ["add", "theorem", "lt_of_mk_le", ["pSurreal"]], ["add", "theorem", "mk_le_mk", ["pSurreal"]], ["add", "theorem", "mk_lt_mk", ["pSurreal"]], ["add", "theorem", "mk_lt_of_le", ["pSurreal"]], ["add", "def", "mul", ["pSurreal"]], ["add", "theorem", "ne_of_lt", ["pSurreal"]], ["add", "def", "neg", ["pSurreal"]], ["add", "theorem", "not_le", ["pSurreal"]], ["add", "theorem", "not_le_lt", ["pSurreal"]], ["add", "theorem", "not_lt", ["pSurreal"]], ["add", "def", "ok", ["pSurreal"]], ["add", "theorem", "ok_rec", ["pSurreal"]], ["add", "def", "omega", ["pSurreal"]], ["add", "inductive", "{u}", ["pSurreal"]], ["add", "def", "equiv", ["surreal"]], ["add", "def", "le", ["surreal"]], ["add", "def", "lift", ["surreal"]], ["add", "def", "lift₂", ["surreal"]], ["add", "def", "lt", ["surreal"]], ["add", "def", "mk", ["surreal"]], ["add", "theorem", "not_le", ["surreal"]], ["add", "def", "surreal", []], ["add", "inductive", "{u}", []]]}]}, {"timestamp": 1558109600, "sha": "0b350228", "message": "refactor: change variables order in some composition lemmas (#1035)", "changes": [{"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": "src/analysis/complex/polynomial.lean", "newPath": "src/analysis/complex/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["add", "theorem", "comp_has_fderiv_within_at", ["has_fderiv_at"]], ["del", "theorem", "comp_has_fderiv_at", ["has_fderiv_within_at"]]]}, {"oldPath": "src/category_theory/concrete_category.lean", "newPath": "src/category_theory/concrete_category.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "map_map", ["measure_theory", "measure"]]]}, {"oldPath": "src/topology/algebra/continuous_functions.lean", "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}, {"oldPath": "src/topology/algebra/ring.lean", "newPath": "src/topology/algebra/ring.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "comp", ["continuous"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": [["mod", "def", "induced", ["continuous_map"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["mod", "theorem", "embedding_compose", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/gromov_hausdorff.lean", "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["mod", "theorem", "comp", ["isometry"]]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["mod", "theorem", "map_comp", ["uniform_space", "completion"]]]}]}, {"timestamp": 1558104384, "sha": "f633c948", "message": "feat(tactic/basic): add tactic.rewrite, and sort list (#1039)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1558099221, "sha": "a6c1f377", "message": "fix(data/complex/exponential): make complex.exp irreducible (#1040)\nSee discussion at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/-T50000.20challenge\nUsing `ring` (and other tactics) on terms involving `exp` can lead to some unpleasant and unnecessary unfolding.", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}]}, {"timestamp": 1558076198, "sha": "96ea9b99", "message": "chore(opposites): merge two definitions of `opposite` (#1036)\n* chore(opposites): merge two definitions of `opposite`\n* merge `opposite.opposite` from `algebra/opposites` with\n `category_theory.opposite` from `category_theory/opposites`, and put\n it into `data/opposite`\n* main reasons: DRY, avoid confusion if both namespaces are open\n* see https://github.com/leanprover-community/mathlib/pull/538#issuecomment-459488227\n* Authors merged from `git blame` output on both original files;\n I assume my contribution to be trivial\n* Update opposite.lean", "changes": [{"oldPath": "src/algebra/opposites.lean", "newPath": "src/algebra/opposites.lean", "changes": [["del", "def", "op", ["opposite"]], ["del", "theorem", "op_inj", ["opposite"]], ["del", "theorem", "op_unop", ["opposite"]], ["del", "def", "unop", ["opposite"]], ["del", "theorem", "unop_inj", ["opposite"]], ["del", "theorem", "unop_op", ["opposite"]], ["del", "def", "opposite", []]]}, {"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/open_nhds.lean", "newPath": "src/category_theory/instances/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/opens.lean", "newPath": "src/category_theory/instances/Top/opens.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/presheaf.lean", "newPath": "src/category_theory/instances/Top/presheaf.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/presheaf_of_functions.lean", "newPath": "src/category_theory/instances/Top/presheaf_of_functions.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "def", "op", ["category_theory"]], ["del", "def", "op_induction", ["category_theory"]], ["del", "theorem", "op_inj", ["category_theory"]], ["del", "theorem", "op_unop", ["category_theory"]], ["del", "def", "opposite", ["category_theory"]], ["del", "def", "unop", ["category_theory"]], ["del", "theorem", "unop_inj", ["category_theory"]], ["del", "theorem", "unop_op", ["category_theory"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": null, "newPath": "src/data/opposite.lean", "changes": [["add", "def", "op", ["opposite"]], ["add", "def", "op_induction", ["opposite"]], ["add", "theorem", "op_inj", ["opposite"]], ["add", "theorem", "op_unop", ["opposite"]], ["add", "def", "opposite", ["opposite"]], ["add", "def", "unop", ["opposite"]], ["add", "theorem", "unop_inj", ["opposite"]], ["add", "theorem", "unop_op", ["opposite"]]]}]}, {"timestamp": 1558052199, "sha": "def48b06", "message": "feat(data/nat/basic): make decreasing induction eliminate to Sort (#1032)\n* add interface for decreasing_induction to Sort\n* make decreasing_induction a def\n* add simp tags and explicit type", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "decreasing_induction", ["nat"]], ["del", "theorem", "decreasing_induction", ["nat"]], ["add", "theorem", "decreasing_induction_self", ["nat"]], ["add", "theorem", "decreasing_induction_succ'", ["nat"]], ["add", "theorem", "decreasing_induction_succ", ["nat"]], ["add", "theorem", "decreasing_induction_succ_left", ["nat"]], ["add", "theorem", "decreasing_induction_trans", ["nat"]], ["add", "theorem", "le_rec_on_succ_left", ["nat"]]]}]}, {"timestamp": 1558011507, "sha": "ad0f42df", "message": "fix(data/nat/enat): Fix typo in lemma name (#1037)", "changes": [{"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["del", "theorem", "coe_ne_bot", ["enat"]], ["add", "theorem", "coe_ne_top", ["enat"]]]}]}, {"timestamp": 1557991452, "sha": "c75c096a", "message": "chore(*): reduce imports (#1033)\n* chore(*): reduce imports\n* restoring import in later file\n* fix import", "changes": [{"oldPath": "src/data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "hyperfilter_le_cofinite", ["filter"]], ["mod", "theorem", "is_ultrafilter_hyperfilter", ["filter"]], ["mod", "theorem", "tendsto_at_top_at_bot", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": []}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": []}, {"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": []}]}, {"timestamp": 1557940102, "sha": "b5aae18a", "message": "feat(category_theory): monos and epis in Type and Top (#1030)\n* feat(category_theory): monos and epis in Type and Top\n* imports\n* add file header\n* use notation for adjunction", "changes": [{"oldPath": null, "newPath": "src/category_theory/epi_mono.lean", "changes": [["add", "theorem", "faithful_reflects_epi", ["category_theory"]], ["add", "theorem", "faithful_reflects_mono", ["category_theory"]], ["add", "theorem", "left_adjoint_preserves_epi", ["category_theory"]], ["add", "theorem", "right_adjoint_preserves_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/instances/Top/default.lean", "newPath": "src/category_theory/instances/Top/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/epi_mono.lean", "changes": [["add", "theorem", "epi_iff_surjective", ["category_theory", "instances", "Top"]], ["add", "theorem", "mono_iff_injective", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "theorem", "epi_iff_surjective", ["category_theory"]], ["add", "def", "hom_of_element", ["category_theory"]], ["add", "theorem", "hom_of_element_eq_iff", ["category_theory"]], ["add", "theorem", "mono_iff_injective", ["category_theory"]]]}]}, {"timestamp": 1557926787, "sha": "136e67a6", "message": "refactor(topology): change continuous_at_within to continuous_within_at (#1034)", "changes": [{"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["del", "theorem", "continuous_at_within", ["differentiable_within_at"]], ["add", "theorem", "continuous_within_at", ["differentiable_within_at"]], ["del", "theorem", "continuous_at_within", ["has_fderiv_within_at"]], ["add", "theorem", "continuous_within_at", ["has_fderiv_within_at"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "def", "continuous_at_within", []], ["mod", "def", "continuous_on", []], ["add", "def", "continuous_within_at", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["del", "theorem", "prod", ["continuous_at_within"]], ["add", "theorem", "prod", ["continuous_within_at"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["del", "theorem", "continuous_at_within", ["continuous_at"]], ["add", "theorem", "continuous_within_at", ["continuous_at"]], ["del", "theorem", "mono", ["continuous_at_within"]], ["del", "theorem", "tendsto_nhds_within_image", ["continuous_at_within"]], ["del", "theorem", "continuous_at_within_iff_continuous_at_restrict", []], ["del", "theorem", "continuous_at_within_iff_ptendsto_res", []], ["del", "theorem", "continuous_at_within_univ", []], ["add", "theorem", "mono", ["continuous_within_at"]], ["add", "theorem", "tendsto_nhds_within_image", ["continuous_within_at"]], ["add", "theorem", "continuous_within_at_iff_continuous_at_restrict", []], ["add", "theorem", "continuous_within_at_iff_ptendsto_res", []], ["add", "theorem", "continuous_within_at_univ", []], ["mod", "theorem", "nhds_within_le_comap", []]]}]}, {"timestamp": 1557913465, "sha": "3022cafd", "message": "feat(tactic/terminal_goal): determine if other goals depend on the current one (#984)\n* feat(tactics): add \"terminal_goal\" tactic and relatives\n* fix(test/tactics): renaming test functions to avoid a name collision\n* fix(tactic): moving terminal_goal to tactic/basic.lean\n* fix(test/tactics): open tactics\n* touching a file, to prompt travis to try again\n* terminal_goal\n* fix\n* merge", "changes": [{"oldPath": "src/tactic/core.lean", "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": null, "newPath": "test/terminal_goal.lean", "changes": [["add", "structure", "C", []], ["add", "def", "f", []], ["add", "structure", "terminal_goal_struct'", []], ["add", "structure", "terminal_goal_struct", []], ["add", "def", "test_subsingleton_goal_1", []], ["add", "def", "test_subsingleton_goal_2", []], ["add", "def", "test_terminal_goal_1", []], ["add", "theorem", "test_terminal_goal_2", []], ["add", "def", "test_terminal_goal_3", []], ["add", "def", "test_terminal_goal_4", []]]}]}, {"timestamp": 1557865281, "sha": "7b579b79", "message": "feat(category_theory): adjoint equivalences and limits under equivalences (#986)\n* feat(category_theory): adjoint equivalences and limits\n* Define equivalences to be adjoint equivalences.\n * Show that one triangle law implies the other for equivalences\n * Prove that having a limit of shape `J` is preserved under an equivalence `J ≌ J'`.\n * Construct an adjoint equivalence from a (non-adjoint) equivalence\n* Put `nat_iso.app` in the `iso` namespace, so that we can write `α.app` for `α : F ≅ G`.\n* Add some basic lemmas about equivalences, isomorphisms.\n* Move some lemmas from `nat_trans` to `functor_category` and state them using `F ⟶ G` instead of `nat_trans F G` (maybe these files should just be merged?)\n* Some small tweaks, improvements\n* opposite of discrete is discrete\nThis also shows that C^op has coproducts if C has products and vice versa\nAlso fix rebase errors\n* fix error (I don't know what caused this to break)\n* Use tidy a bit more\n* construct an adjunction from an equivalence\nadd notation `⊣` for an adjunction.\nmake some arguments of adjunction constructors implicit\n* use adjunction notation\n* formatting\n* do adjointify_η as a natural iso directly, to avoid checking naturality\n* tersifying\n* fix errors, a bit of cleanup\n* fix elements.lean\n* fix error, address comments", "changes": [{"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": [["mod", "def", "adjunction_of_equiv_left", ["category_theory", "adjunction"]], ["mod", "def", "adjunction_of_equiv_right", ["category_theory", "adjunction"]], ["mod", "def", "comp", ["category_theory", "adjunction"]], ["add", "def", "to_adjunction", ["category_theory", "adjunction", "equivalence"]], ["mod", "def", "id", ["category_theory", "adjunction"]], ["mod", "def", "mk_of_hom_equiv", ["category_theory", "adjunction"]], ["mod", "def", "mk_of_unit_counit", ["category_theory", "adjunction"]]]}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["mod", "theorem", "assoc_symm", ["category_theory", "category"]]]}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/currying.lean", "newPath": "src/category_theory/currying.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": [["add", "theorem", "id_def", ["category_theory", "discrete"]], ["add", "def", "of_isos", ["category_theory", "nat_iso"]], ["add", "def", "of_homs", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/elements.lean", "newPath": "src/category_theory/elements.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["add", "def", "adjointify_η", ["category_theory", "equivalence"]], ["add", "theorem", "adjointify_η_ε", ["category_theory", "equivalence"]], ["add", "def", "counit", ["category_theory", "equivalence"]], ["add", "theorem", "counit_def", ["category_theory", "equivalence"]], ["add", "theorem", "counit_functor", ["category_theory", "equivalence"]], ["add", "def", "counit_inv", ["category_theory", "equivalence"]], ["add", "theorem", "counit_inv_def", ["category_theory", "equivalence"]], ["add", "theorem", "counit_inv_functor_comp", ["category_theory", "equivalence"]], ["add", "def", "fun_inv_id_assoc", ["category_theory", "equivalence"]], ["add", "theorem", "fun_inv_id_assoc_hom_app", ["category_theory", "equivalence"]], ["add", "theorem", "fun_inv_id_assoc_inv_app", ["category_theory", "equivalence"]], ["add", "theorem", "functor_unit", ["category_theory", "equivalence"]], ["add", "theorem", "functor_unit_comp", ["category_theory", "equivalence"]], ["add", "def", "inv_fun_id_assoc", ["category_theory", "equivalence"]], ["add", "theorem", "inv_fun_id_assoc_hom_app", ["category_theory", "equivalence"]], ["add", "theorem", "inv_fun_id_assoc_inv_app", ["category_theory", "equivalence"]], ["add", "theorem", "inverse_counit", ["category_theory", "equivalence"]], ["add", "theorem", "inverse_counit_inv_comp", ["category_theory", "equivalence"]], ["mod", "def", "refl", ["category_theory", "equivalence"]], ["add", "def", "unit", ["category_theory", "equivalence"]], ["add", "theorem", "unit_def", ["category_theory", "equivalence"]], ["add", "def", "unit_inv", ["category_theory", "equivalence"]], ["add", "theorem", "unit_inv_def", ["category_theory", "equivalence"]], ["add", "theorem", "unit_inverse", ["category_theory", "equivalence"]], ["add", "theorem", "unit_inverse_comp", ["category_theory", "equivalence"]], ["mod", "def", "fun_inv_id", ["category_theory", "functor"]], ["mod", "def", "inv_fun_id", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["del", "theorem", "comp_app", ["category_theory", "functor", "category"]], ["del", "theorem", "id_app", ["category_theory", "functor", "category"]], ["del", "theorem", "app_naturality", ["category_theory", "functor", "category", "nat_trans"]], ["del", "theorem", "naturality_app", ["category_theory", "functor", "category", "nat_trans"]], ["add", "theorem", "app_naturality", ["category_theory", "nat_trans"]], ["add", "theorem", "comp_app", ["category_theory", "nat_trans"]], ["add", "theorem", "congr_app", ["category_theory", "nat_trans"]], ["add", "theorem", "exchange", ["category_theory", "nat_trans"]], ["add", "def", "hcomp", ["category_theory", "nat_trans"]], ["add", "theorem", "hcomp_app", ["category_theory", "nat_trans"]], ["add", "theorem", "id_app", ["category_theory", "nat_trans"]], ["add", "theorem", "naturality_app", ["category_theory", "nat_trans"]], ["add", "theorem", "vcomp_eq_comp", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/instances/CommRing/adjunctions.lean", "newPath": "src/category_theory/instances/CommRing/adjunctions.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/adjunctions.lean", "newPath": "src/category_theory/instances/Top/adjunctions.lean", "changes": [["mod", "def", "adj₁", ["category_theory", "instances", "Top"]], ["mod", "def", "adj₂", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "inv_eq_inv", ["category_theory", "is_iso"]], ["add", "theorem", "comp_hom_eq_id", ["category_theory", "iso"]], ["add", "theorem", "hom_comp_eq_id", ["category_theory", "iso"]], ["add", "theorem", "hom_eq_inv", ["category_theory", "iso"]], ["add", "theorem", "inv_eq_inv", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "theorem", "ext_hom_hom", ["category_theory", "limits", "cocones"]], ["add", "def", "precompose_comp", ["category_theory", "limits", "cocones"]], ["add", "def", "precompose_equivalence", ["category_theory", "limits", "cocones"]], ["add", "def", "precompose_id", ["category_theory", "limits", "cocones"]], ["add", "theorem", "ext_hom_hom", ["category_theory", "limits", "cones"]], ["add", "def", "postcompose_comp", ["category_theory", "limits", "cones"]], ["add", "def", "postcompose_equivalence", ["category_theory", "limits", "cones"]], ["add", "def", "postcompose_id", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "pre_map'", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_map", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "colimit"]], ["add", "def", "has_colimit_of_equivalence_comp", ["category_theory", "limits"]], ["add", "def", "has_colimit_of_iso", ["category_theory", "limits"]], ["add", "def", "has_colimits_of_shape_of_equivalence", ["category_theory", "limits"]], ["add", "def", "has_limit_of_equivalence_comp", ["category_theory", "limits"]], ["add", "def", "has_limit_of_iso", ["category_theory", "limits"]], ["add", "def", "has_limits_of_shape_of_equivalence", ["category_theory", "limits"]], ["mod", "theorem", "map_pre'", ["category_theory", "limits", "limit"]], ["mod", "theorem", "map_pre", ["category_theory", "limits", "limit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/opposites.lean", "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/limits/shapes/products.lean", "newPath": "src/category_theory/limits/shapes/products.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "def", "app", ["category_theory", "iso"]], ["del", "def", "app", ["category_theory", "nat_iso"]], ["mod", "theorem", "app_hom", ["category_theory", "nat_iso"]], ["mod", "theorem", "app_inv", ["category_theory", "nat_iso"]], ["del", "theorem", "comp_app", ["category_theory", "nat_iso"]], ["add", "def", "hcomp", ["category_theory", "nat_iso"]], ["add", "def", "is_iso_of_is_iso_app", ["category_theory", "nat_iso"]], ["add", "theorem", "trans_app", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["del", "theorem", "congr_app", ["category_theory", "nat_trans"]], ["del", "theorem", "exchange", ["category_theory", "nat_trans"]], ["mod", "theorem", "ext", ["category_theory", "nat_trans"]], ["del", "def", "hcomp", ["category_theory", "nat_trans"]], ["del", "theorem", "hcomp_app", ["category_theory", "nat_trans"]], ["add", "theorem", "id_app'", ["category_theory", "nat_trans"]], ["del", "theorem", "id_app", ["category_theory", "nat_trans"]], ["del", "theorem", "vcomp_assoc", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/products/associator.lean", "newPath": "src/category_theory/products/associator.lean", "changes": [["mod", "def", "associativity", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/products/default.lean", "newPath": "src/category_theory/products/default.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1557857735, "sha": "ae8f197b", "message": "feat(data/nat/basic): decreasing induction (#1031)\n* feat(data/nat/basic): decreasing induction\n* feat(data/nat/basic): better proof of decreasing induction", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "decreasing_induction", ["nat"]], ["mod", "theorem", "lt_iff_add_one_le", ["nat"]], ["mod", "theorem", "zero_max", ["nat"]]]}]}, {"timestamp": 1557845189, "sha": "e7b64c55", "message": "feat(data/equiv/functor): map_equiv (#1026)\n* feat(data/equiv/functor): map_equiv\n* golf proofs", "changes": [{"oldPath": null, "newPath": "src/data/equiv/functor.lean", "changes": [["add", "def", "map_equiv", ["functor"]]]}]}, {"timestamp": 1557846392, "sha": "02857d56", "message": "fix(docs/tactics): fix layout, remove noise", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1557837799, "sha": "22790e06", "message": "feat(tactic): new tactics to normalize casts inside expressions (#988)\n* new tactics for normalizing casts\n* update using the norm_cast tactics\n* minor proof update\n* minor changes\n* moved a norm_cast lemma\n* minor changes\n* fix(doc/tactics): make headers uniform\n* nicer proof using discharger\n* fixed numerals handling by adding simp_cast lemmas\n* add documentation\n* fixed unnecessary normalizations in assumption_mod_cast\n* minor proof update\n* minor coding style update\n* documentation update\n* rename flip_equation to expr.flip_eq\n* update proofs to remove boiler plate code about casts\n* revert to old proof\n* fixed imports and moved attributes\n* add test file\n* new attribute system\n- the attribute norm_cast is split into norm_cast and norm_cast_rev\n- update of the equation flipping mechanism\n- update of the numerals handling\n* syntax fix\n* change attributes names\n* test update\n* small update\n* add elim_cast attribute\n* add examples for attributes\n* new examples", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": [["mod", "theorem", "cast_inj", ["nat"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "cast_pow", ["int"]], ["mod", "theorem", "coe_nat_pow", ["int"]], ["mod", "theorem", "cast_pow", ["nat"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["mod", "theorem", "abs_cast_nat", ["complex"]], ["mod", "theorem", "int_cast_im", ["complex"]], ["mod", "theorem", "int_cast_re", ["complex"]], ["mod", "theorem", "nat_cast_im", ["complex"]], ["mod", "theorem", "nat_cast_re", ["complex"]], ["mod", "theorem", "of_real_add", ["complex"]], ["mod", "theorem", "of_real_bit0", ["complex"]], ["mod", "theorem", "of_real_bit1", ["complex"]], ["mod", "theorem", "of_real_div", ["complex"]], ["mod", "theorem", "of_real_fpow", ["complex"]], ["mod", "theorem", "of_real_im", ["complex"]], ["mod", "theorem", "of_real_inj", ["complex"]], ["mod", "theorem", "of_real_int_cast", ["complex"]], ["mod", "theorem", "of_real_inv", ["complex"]], ["mod", "theorem", "of_real_mul", ["complex"]], ["mod", "theorem", "of_real_nat_cast", ["complex"]], ["mod", "theorem", "of_real_neg", ["complex"]], ["mod", "theorem", "of_real_one", ["complex"]], ["mod", "theorem", "of_real_pow", ["complex"]], ["mod", "theorem", "of_real_rat_cast", ["complex"]], ["mod", "theorem", "of_real_re", ["complex"]], ["mod", "theorem", "of_real_sub", ["complex"]], ["mod", "theorem", "of_real_zero", ["complex"]], ["mod", "theorem", "rat_cast_im", ["complex"]], ["mod", "theorem", "rat_cast_re", ["complex"]]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["mod", "theorem", "cast_abs", ["int"]], ["mod", "theorem", "cast_add", ["int"]], ["mod", "theorem", "cast_bit0", ["int"]], ["mod", "theorem", "cast_bit1", ["int"]], ["mod", "theorem", "cast_coe_nat", ["int"]], ["mod", "theorem", "cast_id", ["int"]], ["mod", "theorem", "cast_inj", ["int"]], ["mod", "theorem", "cast_le", ["int"]], ["mod", "theorem", "cast_lt", ["int"]], ["mod", "theorem", "cast_max", ["int"]], ["mod", "theorem", "cast_min", ["int"]], ["mod", "theorem", "cast_mul", ["int"]], ["mod", "theorem", "cast_neg", ["int"]], ["mod", "theorem", "cast_neg_of_nat", ["int"]], ["mod", "theorem", "cast_neg_succ_of_nat", ["int"]], ["mod", "theorem", "cast_one", ["int"]], ["mod", "theorem", "cast_sub", ["int"]], ["mod", "theorem", "cast_sub_nat_nat", ["int"]], ["mod", "theorem", "cast_zero", ["int"]], ["mod", "theorem", "coe_nat_abs", ["int"]], ["add", "theorem", "coe_nat_bit0", ["int"]], ["add", "theorem", "coe_nat_bit1", ["int"]], ["mod", "theorem", "coe_nat_div", ["int"]], ["mod", "theorem", "coe_nat_dvd", ["int"]], ["mod", "theorem", "coe_nat_inj'", ["int"]], ["mod", "theorem", "coe_nat_le", ["int"]], ["mod", "theorem", "coe_nat_lt", ["int"]]]}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["mod", "theorem", "abs_cast", ["nat"]], ["mod", "theorem", "cast_add", ["nat"]], ["mod", "theorem", "cast_bit0", ["nat"]], ["mod", "theorem", "cast_bit1", ["nat"]], ["mod", "theorem", "cast_id", ["nat"]], ["mod", "theorem", "cast_le", ["nat"]], ["mod", "theorem", "cast_lt", ["nat"]], ["mod", "theorem", "cast_max", ["nat"]], ["mod", "theorem", "cast_min", ["nat"]], ["mod", "theorem", "cast_mul", ["nat"]], ["mod", "theorem", "cast_one", ["nat"]], ["mod", "theorem", "cast_pred", ["nat"]], ["mod", "theorem", "cast_sub", ["nat"]], ["mod", "theorem", "cast_succ", ["nat"]], ["mod", "theorem", "cast_zero", ["nat"]]]}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": [["mod", "theorem", "coe_add", ["enat"]], ["mod", "theorem", "coe_get", ["enat"]], ["mod", "theorem", "coe_le_coe", ["enat"]], ["mod", "theorem", "coe_lt_coe", ["enat"]], ["mod", "theorem", "coe_one", ["enat"]], ["mod", "theorem", "coe_zero", ["enat"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": [["mod", "theorem", "cast_pow", ["padic_int"]], ["mod", "theorem", "coe_add", ["padic_int"]], ["mod", "theorem", "coe_coe", ["padic_int"]], ["mod", "theorem", "coe_mul", ["padic_int"]], ["mod", "theorem", "coe_neg", ["padic_int"]], ["mod", "theorem", "coe_one", ["padic_int"]], ["mod", "theorem", "coe_sub", ["padic_int"]], ["mod", "theorem", "coe_zero", ["padic_int"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": [["add", "theorem", "coe_add", ["padic"]], ["add", "theorem", "coe_div", ["padic"]], ["add", "theorem", "coe_inj", ["padic"]], ["add", "theorem", "coe_mul", ["padic"]], ["add", "theorem", "coe_neg", ["padic"]], ["add", "theorem", "coe_one", ["padic"]], ["add", "theorem", "coe_sub", ["padic"]], ["add", "theorem", "coe_zero", ["padic"]], ["mod", "theorem", "eq_padic_norm", ["padic_norm_e"]]]}, {"oldPath": "src/data/rat.lean", "newPath": "src/data/rat.lean", "changes": [["mod", "theorem", "cast_abs", ["rat"]], ["mod", "theorem", "cast_add", ["rat"]], ["mod", "theorem", "cast_add_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_bit0", ["rat"]], ["mod", "theorem", "cast_bit1", ["rat"]], ["mod", "theorem", "cast_coe_int", ["rat"]], ["mod", "theorem", "cast_coe_nat", ["rat"]], ["mod", "theorem", "cast_div", ["rat"]], ["mod", "theorem", "cast_div_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_id", ["rat"]], ["mod", "theorem", "cast_inj", ["rat"]], ["mod", "theorem", "cast_inv", ["rat"]], ["mod", "theorem", "cast_inv_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_le", ["rat"]], ["mod", "theorem", "cast_lt", ["rat"]], ["mod", "theorem", "cast_max", ["rat"]], ["mod", "theorem", "cast_min", ["rat"]], ["mod", "theorem", "cast_mk", ["rat"]], ["mod", "theorem", "cast_mk_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_mul", ["rat"]], ["mod", "theorem", "cast_mul_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_neg", ["rat"]], ["mod", "theorem", "cast_one", ["rat"]], ["mod", "theorem", "cast_pow", ["rat"]], ["mod", "theorem", "cast_sub", ["rat"]], ["mod", "theorem", "cast_sub_of_ne_zero", ["rat"]], ["mod", "theorem", "cast_zero", ["rat"]], ["mod", "theorem", "coe_int_denom", ["rat"]], ["mod", "theorem", "coe_int_num", ["rat"]], ["mod", "theorem", "coe_nat_denom", ["rat"]], ["mod", "theorem", "coe_nat_num", ["rat"]]]}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": [["add", "theorem", "coe_nat_multiplicity", ["multiplicity", "int"]], ["add", "theorem", "find_le", ["nat"]]]}, {"oldPath": null, "newPath": "src/tactic/norm_cast.lean", "changes": [["add", "theorem", "ge_from_le", []], ["add", "theorem", "gt_from_lt", []], ["add", "theorem", "ite_cast", []], ["add", "theorem", "ne_from_not_eq", []]]}, {"oldPath": null, "newPath": "test/norm_cast.lean", "changes": []}]}, {"timestamp": 1557832413, "sha": "fe19bdb4", "message": "fix(data/multiset): remove duplicate setoid instance (#1027)\n* fix(data/multiset): remove duplicate setoid instance\n* s/ : Type uu//", "changes": [{"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["mod", "theorem", "eqv", ["list", "perm"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "def", "subsingleton_equiv", ["multiset"]]]}]}, {"timestamp": 1557829491, "sha": "ade99c8c", "message": "feat(analysis/normed_space/deriv): more material on derivatives (#966)\n* feat(analysis/normed_space/deriv): more material on derivatives\n* feat(analysis/normed_space/deriv): minor improvements\n* feat(analysis/normed_space/deriv) rename fderiv_at_within to fderiv_within_at\n* feat(analysis/normed_space/deriv): more systematic renaming\n* feat(analysis/normed_space/deriv): fix style\n* modify travis.yml as advised by Simon Hudon\n* fix travis.yml, second try\n* feat(analysis/normed_space/deriv): add two missing lemmas", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "prod_rightl", ["asymptotics", "is_O"]], ["add", "theorem", "prod_rightr", ["asymptotics", "is_O"]], ["add", "theorem", "is_O_one_of_tendsto", ["asymptotics"]], ["add", "theorem", "is_O_prod_left", ["asymptotics"]], ["add", "theorem", "prod_rightl", ["asymptotics", "is_o"]], ["add", "theorem", "prod_rightr", ["asymptotics", "is_o"]], ["add", "theorem", "is_o_prod_left", ["asymptotics"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "tendsto_zero_iff_norm_tendsto_zero", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bounded_linear_map_comp_left", ["bounded_linear_map"]], ["add", "theorem", "is_bounded_linear_map_comp_right", ["bounded_linear_map"]], ["add", "def", "deriv", ["is_bounded_bilinear_map"]], ["add", "theorem", "is_bounded_linear_map_deriv", ["is_bounded_bilinear_map"]], ["add", "theorem", "map_sub_left", ["is_bounded_bilinear_map"]], ["add", "theorem", "map_sub_right", ["is_bounded_bilinear_map"]], ["add", "structure", "is_bounded_bilinear_map", []], ["add", "theorem", "is_bounded_bilinear_map_comp", []], ["add", "theorem", "is_bounded_bilinear_map_mul", []], ["add", "theorem", "is_bounded_bilinear_map_smul", []], ["add", "theorem", "is_bounded_linear_map_prod_iso", []]]}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["add", "theorem", "add", ["differentiable"]], ["add", "theorem", "congr'", ["differentiable"]], ["add", "theorem", "congr", ["differentiable"]], ["add", "theorem", "continuous", ["differentiable"]], ["add", "theorem", "differentiable_on", ["differentiable"]], ["add", "theorem", "fderiv_within", ["differentiable"]], ["add", "theorem", "mul", ["differentiable"]], ["add", "theorem", "neg", ["differentiable"]], ["add", "theorem", "prod", ["differentiable"]], ["add", "theorem", "smul'", ["differentiable"]], ["add", "theorem", "smul", ["differentiable"]], ["add", "theorem", "sub", ["differentiable"]], ["add", "def", "differentiable", []], ["add", "theorem", "add", ["differentiable_at"]], ["add", "theorem", "comp", ["differentiable_at"]], ["add", "theorem", "congr", ["differentiable_at"]], ["add", "theorem", "continuous_at", ["differentiable_at"]], ["add", "theorem", "differentiable_within_at", ["differentiable_at"]], ["add", "theorem", "fderiv_congr'", ["differentiable_at"]], ["add", "theorem", "fderiv_congr", ["differentiable_at"]], ["add", "theorem", "fderiv_prod", ["differentiable_at"]], ["add", "theorem", "fderiv_within_prod", ["differentiable_at"]], ["add", "theorem", "has_fderiv_at", ["differentiable_at"]], ["add", "theorem", "mul", ["differentiable_at"]], ["add", "theorem", "neg", ["differentiable_at"]], ["add", "theorem", "prod", ["differentiable_at"]], ["add", "theorem", "smul'", ["differentiable_at"]], ["add", "theorem", "smul", ["differentiable_at"]], ["add", "theorem", "sub", ["differentiable_at"]], ["add", "def", "differentiable_at", []], ["add", "theorem", "differentiable_at_const", []], ["add", "theorem", "differentiable_at_id", []], ["add", "theorem", "differentiable_const", []], ["add", "theorem", "differentiable_id", []], ["add", "theorem", "add", ["differentiable_on"]], ["add", "theorem", "comp", ["differentiable_on"]], ["add", "theorem", "congr_mono", ["differentiable_on"]], ["add", "theorem", "continuous_on", ["differentiable_on"]], ["add", "theorem", "mono", ["differentiable_on"]], ["add", "theorem", "mul", ["differentiable_on"]], ["add", "theorem", "neg", ["differentiable_on"]], ["add", "theorem", "prod", ["differentiable_on"]], ["add", "theorem", "smul'", ["differentiable_on"]], ["add", "theorem", "smul", ["differentiable_on"]], ["add", "theorem", "sub", ["differentiable_on"]], ["add", "def", "differentiable_on", []], ["add", "theorem", "differentiable_on_const", []], ["add", "theorem", "differentiable_on_id", []], ["add", "theorem", "differentiable_on_of_locally_differentiable_on", []], ["add", "theorem", "differentiable_on_univ", []], ["add", "theorem", "add", ["differentiable_within_at"]], ["add", "theorem", "comp", ["differentiable_within_at"]], ["add", "theorem", "congr_mono", ["differentiable_within_at"]], ["add", "theorem", "continuous_at_within", ["differentiable_within_at"]], ["add", "theorem", "differentiable_at'", ["differentiable_within_at"]], ["add", "theorem", "differentiable_at", ["differentiable_within_at"]], ["add", "theorem", "fderiv_within_congr_mono", ["differentiable_within_at"]], ["add", "theorem", "has_fderiv_within_at", ["differentiable_within_at"]], ["add", "theorem", "mono", ["differentiable_within_at"]], ["add", "theorem", "mul", ["differentiable_within_at"]], ["add", "theorem", "neg", ["differentiable_within_at"]], ["add", "theorem", "prod", ["differentiable_within_at"]], ["add", "theorem", "smul'", ["differentiable_within_at"]], ["add", "theorem", "smul", ["differentiable_within_at"]], ["add", "theorem", "sub", ["differentiable_within_at"]], ["add", "def", "differentiable_within_at", []], ["add", "theorem", "differentiable_within_at_const", []], ["add", "theorem", "differentiable_within_at_id", []], ["add", "theorem", "differentiable_within_at_inter", []], ["add", "theorem", "differentiable_within_univ_at", []], ["add", "theorem", "comp", ["fderiv"]], ["add", "def", "fderiv", []], ["add", "theorem", "fderiv_add", []], ["del", "theorem", "fderiv_at_filter_unique", []], ["del", "theorem", "fderiv_at_unique", []], ["del", "theorem", "fderiv_at_within_open_unique", []], ["add", "theorem", "fderiv_const", []], ["add", "theorem", "fderiv_id", []], ["add", "theorem", "fderiv_mul", []], ["add", "theorem", "fderiv_neg", []], ["add", "theorem", "fderiv_smul'", []], ["add", "theorem", "fderiv_smul", []], ["add", "theorem", "fderiv_sub", []], ["add", "theorem", "comp", ["fderiv_within"]], ["add", "def", "fderiv_within", []], ["add", "theorem", "fderiv_within_add", []], ["add", "theorem", "fderiv_within_const", []], ["add", "theorem", "fderiv_within_id", []], ["add", "theorem", "fderiv_within_mul", []], ["add", "theorem", "fderiv_within_neg", []], ["add", "theorem", "fderiv_within_smul'", []], ["add", "theorem", "fderiv_within_smul", []], ["add", "theorem", "fderiv_within_sub", []], ["add", "theorem", "fderiv_within_univ", []], ["add", "theorem", "add", ["has_fderiv_at"]], ["add", "theorem", "differentiable_at", ["has_fderiv_at"]], ["add", "theorem", "fderiv", ["has_fderiv_at"]], ["add", "theorem", "has_fderiv_at_filter", ["has_fderiv_at"]], ["add", "theorem", "has_fderiv_within_at", ["has_fderiv_at"]], ["add", "theorem", "mul", ["has_fderiv_at"]], ["add", "theorem", "neg", ["has_fderiv_at"]], ["add", "theorem", "prod", ["has_fderiv_at"]], ["add", "theorem", "smul'", ["has_fderiv_at"]], ["add", "theorem", "smul", ["has_fderiv_at"]], ["add", "theorem", "sub", ["has_fderiv_at"]], ["mod", "def", "has_fderiv_at", []], ["del", "theorem", "has_fderiv_at_add", []], ["add", "theorem", "add", ["has_fderiv_at_filter"]], ["add", "theorem", "congr'", ["has_fderiv_at_filter"]], ["mod", "theorem", "mono", ["has_fderiv_at_filter"]], ["add", "theorem", "neg", ["has_fderiv_at_filter"]], ["add", "theorem", "prod", ["has_fderiv_at_filter"]], ["add", "theorem", "smul", ["has_fderiv_at_filter"]], ["add", "theorem", "sub", ["has_fderiv_at_filter"]], ["mod", "def", "has_fderiv_at_filter", []], ["del", "theorem", "has_fderiv_at_filter_add", []], ["del", "theorem", "has_fderiv_at_filter_neg", []], ["del", "theorem", "has_fderiv_at_filter_of_has_fderiv_at", []], ["del", "theorem", "has_fderiv_at_filter_smul", []], ["del", "theorem", "has_fderiv_at_filter_sub", []], ["mod", "theorem", "has_fderiv_at_iff_tendsto", []], ["del", "theorem", "has_fderiv_at_neg", []], ["del", "theorem", "has_fderiv_at_smul", []], ["del", "theorem", "has_fderiv_at_sub", []], ["add", "theorem", "has_fderiv_at_unique", []], ["del", "theorem", "comp", ["has_fderiv_at_within"]], ["del", "theorem", "congr", ["has_fderiv_at_within"]], ["del", "theorem", "continuous_at_within", ["has_fderiv_at_within"]], ["del", "theorem", "mono", ["has_fderiv_at_within"]], ["del", "def", "has_fderiv_at_within", []], ["del", "theorem", "has_fderiv_at_within_add", []], ["del", "theorem", "has_fderiv_at_within_congr", []], ["del", "theorem", "has_fderiv_at_within_const", []], ["del", "theorem", "has_fderiv_at_within_id", []], ["del", "theorem", "has_fderiv_at_within_iff_tendsto", []], ["del", "theorem", "has_fderiv_at_within_neg", []], ["del", "theorem", "has_fderiv_at_within_of_has_fderiv_at", []], ["del", "theorem", "has_fderiv_at_within_smul", []], ["del", "theorem", "has_fderiv_at_within_sub", []], ["add", "theorem", "add", ["has_fderiv_within_at"]], ["add", "theorem", "comp", ["has_fderiv_within_at"]], ["add", "theorem", "comp_has_fderiv_at", ["has_fderiv_within_at"]], ["add", "theorem", "congr", ["has_fderiv_within_at"]], ["add", "theorem", "congr_mono", ["has_fderiv_within_at"]], ["add", "theorem", "continuous_at_within", ["has_fderiv_within_at"]], ["add", "theorem", "differentiable_within_at", ["has_fderiv_within_at"]], ["add", "theorem", "fderiv_within", ["has_fderiv_within_at"]], ["add", "theorem", "mono", ["has_fderiv_within_at"]], ["add", "theorem", "mul", ["has_fderiv_within_at"]], ["add", "theorem", "neg", ["has_fderiv_within_at"]], ["add", "theorem", "prod", ["has_fderiv_within_at"]], ["add", "theorem", "smul'", ["has_fderiv_within_at"]], ["add", "theorem", "smul", ["has_fderiv_within_at"]], ["add", "theorem", "sub", ["has_fderiv_within_at"]], ["add", "def", "has_fderiv_within_at", []], ["add", "theorem", "has_fderiv_within_at_congr", []], ["add", "theorem", "has_fderiv_within_at_const", []], ["add", "theorem", "has_fderiv_within_at_id", []], ["add", "theorem", "has_fderiv_within_at_iff_tendsto", []], ["add", "theorem", "has_fderiv_within_univ_at", []], ["add", "theorem", "continuous", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable_on", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable_within_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "fderiv", ["is_bounded_bilinear_map"]], ["add", "theorem", "fderiv_within", ["is_bounded_bilinear_map"]], ["add", "theorem", "has_fderiv_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "has_fderiv_within_at", ["is_bounded_bilinear_map"]], ["add", "theorem", "differentiable", ["is_bounded_linear_map"]], ["add", "theorem", "differentiable_at", ["is_bounded_linear_map"]], ["add", "theorem", "differentiable_on", ["is_bounded_linear_map"]], ["add", "theorem", "differentiable_within_at", ["is_bounded_linear_map"]], ["add", "theorem", "fderiv", ["is_bounded_linear_map"]], ["add", "theorem", "fderiv_within", ["is_bounded_linear_map"]], ["add", "theorem", "has_fderiv_at", ["is_bounded_linear_map"]], ["add", "theorem", "has_fderiv_at_filter", ["is_bounded_linear_map"]], ["add", "theorem", "has_fderiv_within_at", ["is_bounded_linear_map"]], ["add", "theorem", "unique_diff_on", ["is_open"]], ["add", "theorem", "unique_diff_within_at", ["is_open"]], ["add", "theorem", "lim_zero", ["tangent_cone_at"]], ["add", "def", "tangent_cone_at", []], ["add", "theorem", "tangent_cone_inter_open", []], ["add", "theorem", "tangent_cone_mono", []], ["add", "theorem", "tangent_cone_univ", []], ["add", "theorem", "eq", ["unique_diff_on"]], ["add", "def", "unique_diff_on", []], ["add", "theorem", "unique_diff_on_inter", []], ["add", "theorem", "eq", ["unique_diff_within_at"]], ["add", "def", "unique_diff_within_at", []], ["add", "theorem", "unique_diff_within_at_inter", []], ["add", "theorem", "unique_diff_within_univ_at", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "def", "prod", ["bounded_linear_map"]], ["add", "def", "scalar_prod_space_iso", ["bounded_linear_map"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "is_linear_map_prod_iso", ["linear_map"]], ["add", "def", "prod", ["linear_map"]], ["add", "def", "scalar_prod_space_iso", ["linear_map"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "prod", ["continuous_at"]], ["add", "theorem", "prod", ["continuous_at_within"]], ["mod", "theorem", "continuous_inclusion", []], ["add", "theorem", "prod", ["continuous_on"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "continuous_on", ["continuous"]], ["add", "theorem", "continuous_at_within", ["continuous_at"]], ["add", "theorem", "mono", ["continuous_at_within"]], ["add", "def", "continuous_iff_continuous_on_univ", []], ["add", "theorem", "comp", ["continuous_on"]], ["add", "theorem", "congr_mono", ["continuous_on"]], ["add", "theorem", "mono", ["continuous_on"]], ["add", "theorem", "preimage_interior_subset_interior_preimage", ["continuous_on"]], ["add", "theorem", "preimage_open_of_open", ["continuous_on"]], ["add", "theorem", "continuous_on_const", []], ["add", "theorem", "continuous_on_of_locally_continuous_on", []]]}]}, {"timestamp": 1557818680, "sha": "a72641be", "message": "squeeze_simp (#1019)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": []}]}, {"timestamp": 1557812117, "sha": "cefb9d43", "message": "feat(category_theory/opposites): iso.op (#1021)", "changes": [{"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "op_hom", ["category_theory", "iso"]], ["add", "theorem", "op_inv", ["category_theory", "iso"]]]}]}, {"timestamp": 1557796998, "sha": "6dc06824", "message": "feat(algebra/order_functions): generalize strict_mono.monotone (#1022)", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["mod", "theorem", "monotone", ["strict_mono"]]]}]}, {"timestamp": 1557791653, "sha": "07ba43ee", "message": "feat(topology/constructions): topology of sum types (#1016)", "changes": [{"oldPath": "src/data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": [["add", "theorem", "injective_sigma_map", []], ["add", "theorem", "injective_sigma_mk", []]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "closed_embedding_sigma_mk", []], ["add", "theorem", "continuous_sigma", []], ["add", "theorem", "continuous_sigma_map", []], ["add", "theorem", "continuous_sigma_mk", []], ["add", "theorem", "embedding_sigma_map", []], ["add", "theorem", "embedding_sigma_mk", []], ["add", "theorem", "is_closed_map_sigma_mk", []], ["add", "theorem", "is_closed_sigma_iff", []], ["add", "theorem", "is_closed_sigma_mk", []], ["add", "theorem", "is_open_map_sigma_mk", []], ["add", "theorem", "is_open_range_sigma_mk", []], ["add", "theorem", "is_open_sigma_iff", []]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["del", "theorem", "continuous_Prop", []], ["del", "theorem", "is_open_singleton_true", []]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "continuous_Prop", []], ["add", "theorem", "is_closed_infi_iff", []], ["add", "theorem", "is_open_infi_iff", []], ["add", "theorem", "is_open_singleton_true", []]]}]}, {"timestamp": 1557786503, "sha": "f8385b19", "message": "feat(data/equiv/basic): equiv.nonempty_iff_nonempty (#1020)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "nonempty_iff_nonempty", ["equiv"]]]}]}, {"timestamp": 1557779771, "sha": "01b345c1", "message": "feat(tactics/interactive): choose uses exists_prop (#1014)\n* feat(tactics/interactive): choose uses exists_prop\n* fix build", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "test/examples.lean", "newPath": "test/examples.lean", "changes": []}]}, {"timestamp": 1557777657, "sha": "c8a0bb6b", "message": "feat(category_theory/products): missing simp lemmas (#1003)\n* feat(category_theory/products): missing simp lemmas\n* cleanup proofs\n* fix proof\n* squeeze_simp", "changes": [{"oldPath": "src/category_theory/products/default.lean", "newPath": "src/category_theory/products/default.lean", "changes": [["mod", "def", "evaluation", ["category_theory"]], ["add", "theorem", "evaluation_map_app", ["category_theory"]], ["add", "theorem", "evaluation_obj_map", ["category_theory"]], ["add", "theorem", "evaluation_obj_obj", ["category_theory"]], ["mod", "def", "evaluation_uncurried", ["category_theory"]], ["add", "theorem", "evaluation_uncurried_map", ["category_theory"]], ["add", "theorem", "evaluation_uncurried_obj", ["category_theory"]], ["mod", "theorem", "prod_map", ["category_theory", "functor"]], ["mod", "theorem", "prod_obj", ["category_theory", "functor"]], ["add", "theorem", "fst_map", ["category_theory", "prod"]], ["add", "theorem", "fst_obj", ["category_theory", "prod"]], ["add", "theorem", "inl_map", ["category_theory", "prod"]], ["add", "theorem", "inl_obj", ["category_theory", "prod"]], ["add", "theorem", "inr_map", ["category_theory", "prod"]], ["add", "theorem", "inr_obj", ["category_theory", "prod"]], ["add", "theorem", "snd_map", ["category_theory", "prod"]], ["add", "theorem", "snd_obj", ["category_theory", "prod"]], ["add", "theorem", "swap_map", ["category_theory", "prod"]], ["add", "theorem", "swap_obj", ["category_theory", "prod"]]]}]}, {"timestamp": 1557776012, "sha": "6c35df0d", "message": "feat(category_theory/iso): missing lemmas (#1001)\n* feat(category_theory/iso): missing lemmas\n* formatting\n* formatting\n* oops\n* one more\n* sleep", "changes": [{"oldPath": "src/algebraic_geometry/presheafed_space.lean", "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["mod", "theorem", "cancel_epi", ["category_theory"]], ["mod", "theorem", "cancel_mono", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "eq_of_inv_eq_inv", ["category_theory"]], ["add", "theorem", "inv_comp", ["category_theory", "is_iso"]], ["add", "theorem", "inv_id", ["category_theory", "is_iso"]], ["add", "theorem", "inv_inv", ["category_theory", "is_iso", "is_iso"]], ["add", "theorem", "inv_hom", ["category_theory", "is_iso", "iso"]], ["add", "theorem", "inv_inv", ["category_theory", "is_iso", "iso"]]]}]}, {"timestamp": 1557772796, "sha": "82f151f5", "message": "document the change in scripts (#1024)", "changes": [{"oldPath": "docs/install/debian.md", "newPath": "docs/install/debian.md", "changes": []}, {"oldPath": "docs/install/debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": "docs/install/linux.md", "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": "docs/install/macos.md", "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install/windows.md", "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1557762121, "sha": "70cd00bc", "message": "feat(Top.presheaf_ℂ): presheaves of functions to topological commutative rings (#976)\n* feat(category_theory/colimits): missing simp lemmas\n* feat(category_theory): functor.map_nat_iso\n* define `functor.map_nat_iso`, and relate to whiskering\n* rename `functor.on_iso` to `functor.map_iso`\n* add some missing lemmas about whiskering\n* fix(category_theory): presheaves, unbundled and bundled, and pushforwards\n* restoring `(opens X)ᵒᵖ`\n* various changes from working on stalks\n* rename `nbhds` to `open_nhds`\n* fix introduced typo\n* typo\n* compactify a proof\n* rename `presheaf` to `presheaf_on_space`\n* fix(category_theory): turn `has_limits` classes into structures\n* naming instances to avoid collisions\n* breaking up instances.topological_spaces\n* fixing all the other pi-type typclasses\n* fix import\n* oops\n* fix import\n* missed one\n* typo\n* WIP\n* oops\n* the presheaf of continuous functions to ℂ\n* restoring eq_to_hom simp lemmas\n* removing unnecessary simp lemma\n* remove another superfluous lemma\n* removing the nat_trans and vcomp notations; use \\hom and \\gg\n* a simpler proposal\n* getting rid of vcomp\n* fix\n* splitting files\n* renaming\n* update notation\n* fix\n* cleanup\n* use iso_whisker_right instead of map_nat_iso\n* proofs magically got easier?\n* improve some proofs\n* moving instances\n* remove crap\n* tidy\n* minimise imports\n* chore(travis): disable the check for minimal imports\n* Update src/algebraic_geometry/presheafed_space.lean\nCo-Authored-By: semorrison \n* writing `op_induction` tactic, and improving proofs\n* squeeze_simping\n* cleanup\n* rearranging\n* cleanup\n* cleaning up\n* cleaning up\n* move\n* Update src/category_theory/instances/Top/presheaf_of_functions.lean\nCo-Authored-By: Floris van Doorn \n* fixes in response to review", "changes": [{"oldPath": "src/category_theory/instances/CommRing/basic.lean", "newPath": "src/category_theory/instances/CommRing/basic.lean", "changes": [["add", "def", "of", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": "src/category_theory/instances/Top/default.lean", "newPath": "src/category_theory/instances/Top/default.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/opens.lean", "newPath": "src/category_theory/instances/Top/opens.lean", "changes": [["add", "def", "to_Top", ["topological_space", "opens"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/presheaf_of_functions.lean", "changes": [["add", "def", "CommRing_yoneda", ["category_theory", "instances", "Top"]], ["add", "theorem", "add", ["category_theory", "instances", "Top", "continuous_functions"]], ["add", "def", "map", ["category_theory", "instances", "Top", "continuous_functions"]], ["add", "theorem", "mul", ["category_theory", "instances", "Top", "continuous_functions"]], ["add", "theorem", "one", ["category_theory", "instances", "Top", "continuous_functions"]], ["add", "def", "pullback", ["category_theory", "instances", "Top", "continuous_functions"]], ["add", "def", "continuous_functions", ["category_theory", "instances", "Top"]], ["add", "def", "presheaf_to_Top", ["category_theory", "instances", "Top"]], ["add", "def", "presheaf_to_TopCommRing", ["category_theory", "instances", "Top"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/TopCommRing/basic.lean", "changes": [["add", "def", "forget", ["category_theory", "instances", "TopCommRing"]], ["add", "def", "forget_to_CommRing", ["category_theory", "instances", "TopCommRing"]], ["add", "def", "forget_to_Top", ["category_theory", "instances", "TopCommRing"]], ["add", "def", "forget_to_Type_via_CommRing", ["category_theory", "instances", "TopCommRing"]], ["add", "def", "forget_to_Type_via_Top", ["category_theory", "instances", "TopCommRing"]], ["add", "def", "of", ["category_theory", "instances", "TopCommRing"]], ["add", "structure", "TopCommRing", ["category_theory", "instances"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/TopCommRing/default.lean", "changes": []}]}, {"timestamp": 1557746510, "sha": "b9b5bb4b", "message": "chore(Github): no need to wait for Appveyor anymopre", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1557745955, "sha": "e42d808b", "message": "chore(scripts): migrate scripts to own repo (#1011)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "appveyor.yml", "newPath": null, "changes": []}, {"oldPath": "scripts/auth_github.py", "newPath": null, "changes": []}, {"oldPath": "scripts/cache-olean.py", "newPath": null, "changes": []}, {"oldPath": "scripts/delayed_interrupt.py", "newPath": null, "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}, {"oldPath": "scripts/install_debian.sh", "newPath": null, "changes": []}, {"oldPath": "scripts/leanpkg-example.toml", "newPath": null, "changes": []}, {"oldPath": "scripts/post-checkout", "newPath": null, "changes": []}, {"oldPath": "scripts/post-commit", "newPath": null, "changes": []}, {"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": null, "changes": []}, {"oldPath": "scripts/setup-dev-scripts.sh", "newPath": null, "changes": []}, {"oldPath": "scripts/setup-lean-git-hooks.sh", "newPath": null, "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": null, "changes": []}]}, {"timestamp": 1557771620, "sha": "48645152", "message": "feat(category_theory): lemmas about cancellation (#1005)\n* feat(category_theory): lemmas about cancellation\n* rename hypotheses\n* Squeeze proofs", "changes": [{"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["add", "theorem", "eq_of_comp_left_eq'", ["category_theory"]], ["add", "theorem", "eq_of_comp_left_eq", ["category_theory"]], ["add", "theorem", "eq_of_comp_right_eq'", ["category_theory"]], ["add", "theorem", "eq_of_comp_right_eq", ["category_theory"]], ["add", "theorem", "id_of_comp_left_id", ["category_theory"]], ["add", "theorem", "id_of_comp_right_id", ["category_theory"]]]}]}, {"timestamp": 1557672695, "sha": "1e0761e5", "message": "feat(topology/maps): closed embeddings (#1013)\n* feat(topology/maps): closed embeddings\n* fix \"is_open_map\"", "changes": [{"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "closed_iff_image_closed", ["closed_embedding"]], ["add", "theorem", "closed_iff_preimage_closed", ["closed_embedding"]], ["add", "def", "closed_embedding", []], ["add", "theorem", "closed_embedding_compose", []], ["add", "theorem", "closed_embedding_id", []], ["add", "theorem", "closed_embedding_of_continuous_injective_closed", []], ["add", "theorem", "of_inverse", ["is_closed_map"]], ["add", "def", "is_closed_map", []]]}]}, {"timestamp": 1557624078, "sha": "de5d0387", "message": "feat(logic/function): comp₂ -- useful for binary operations (#993)\n* feat(logic/function): comp₂ -- useful for binary operations\nFor example, when working with topological groups\nit does not suffice to look at `mul : G → G → G`;\nwe need to require that `G × G → G` is continuous.\nThis lemma helps with rewriting back and forth\nbetween the curried and the uncurried versions.\n* Fix: we are already in the function namespace, duh\n* Replace comp₂ with a generalisation of bicompr\n* fix error in bitraversable\n* partially open function namespace in bitraversable", "changes": [{"oldPath": "src/category/bifunctor.lean", "newPath": "src/category/bifunctor.lean", "changes": [["del", "def", "bicompl", ["bifunctor"]], ["del", "def", "bicompr", ["bifunctor"]]]}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": [["mod", "def", "bitraverse", ["bicompl"]], ["mod", "def", "bitraverse", ["bicompr"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "def", "bicompl", ["function"]], ["add", "def", "bicompr", ["function"]], ["add", "theorem", "uncurry_bicompr", ["function"]]]}]}, {"timestamp": 1557598609, "sha": "a154dedc", "message": "fix(docs/*): docs reorganization [skip ci] (#1012)", "changes": [{"oldPath": ".github/PULL_REQUEST_TEMPLATE.md", "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "docs/code-review.md", "newPath": "docs/contribute/code-review.md", "changes": []}, {"oldPath": "docs/howto-contribute.md", "newPath": "docs/contribute/index.md", "changes": []}, {"oldPath": "docs/naming.md", "newPath": "docs/contribute/naming.md", "changes": []}, {"oldPath": "docs/style.md", "newPath": "docs/contribute/style.md", "changes": []}, {"oldPath": "docs/elan.md", "newPath": null, "changes": []}, {"oldPath": null, "newPath": "docs/install/debian.md", "changes": []}, {"oldPath": "docs/install_debian_details.md", "newPath": "docs/install/debian_details.md", "changes": []}, {"oldPath": null, "newPath": "docs/install/linux.md", "changes": []}, {"oldPath": null, "newPath": "docs/install/macos.md", "changes": []}, {"oldPath": "docs/install_debian.md", "newPath": "docs/install/project.md", "changes": []}, {"oldPath": null, "newPath": "docs/install/windows.md", "changes": []}]}, {"timestamp": 1557585323, "sha": "8e71ceec", "message": "chore(build): remove script testing on PRs [skip ci]", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1557581190, "sha": "e6d959df", "message": "docs(algebra/ring): document compatibility hack [skip ci]", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}]}, {"timestamp": 1557578791, "sha": "c7d870e8", "message": "chore(compatibility): compatibility with Lean 3.5.0c (#1007)", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "def", "has_div_of_division_ring", []]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["mod", "def", "bigly_equal", ["filter"]], ["mod", "theorem", "lt_def'", ["filter", "filter_product"]], ["mod", "theorem", "lt_def", ["filter", "filter_product"]], ["mod", "theorem", "max_def", ["filter", "filter_product"]], ["mod", "theorem", "min_def", ["filter", "filter_product"]], ["mod", "theorem", "of_abs", ["filter", "filter_product"]], ["mod", "theorem", "of_div", ["filter", "filter_product"]], ["mod", "theorem", "of_eq", ["filter", "filter_product"]], ["mod", "theorem", "of_lt", ["filter", "filter_product"]], ["mod", "theorem", "of_lt_of_lt", ["filter", "filter_product"]], ["mod", "theorem", "of_max", ["filter", "filter_product"]], ["mod", "theorem", "of_min", ["filter", "filter_product"]], ["mod", "theorem", "of_ne", ["filter", "filter_product"]], ["mod", "theorem", "of_rel", ["filter", "filter_product"]], ["mod", "theorem", "of_rel_of_rel", ["filter", "filter_product"]], ["mod", "theorem", "of_rel_of_rel₂", ["filter", "filter_product"]], ["mod", "theorem", "of_rel₂", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_add", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_fun", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_fun₂", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_mul", ["filter", "filter_product"]]]}]}, {"timestamp": 1557586803, "sha": "60da4f4d", "message": "feat(data/polynomial): degree_eq_one_of_irreducible_of_root (#1010)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "degree_eq_one_of_irreducible_of_root", ["polynomial"]]]}]}, {"timestamp": 1557580461, "sha": "8603e6b0", "message": "refactor(algebra/associated): rename nonzero_of_irreducible to ne_zero_of_irreducible (#1009)", "changes": [{"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["add", "theorem", "ne_zero_of_irreducible", []], ["del", "theorem", "nonzero_of_irreducible", []]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1557533381, "sha": "6858c2f7", "message": "fix(category/fold): use correct `opposite` (#1008)", "changes": [{"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": [["mod", "def", "foldr", ["monoid"]], ["mod", "def", "mfoldr", ["monoid"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "op_mul", ["category_theory", "opposite"]], ["del", "theorem", "op_one", ["category_theory", "opposite"]], ["del", "theorem", "unop_mul", ["category_theory", "opposite"]], ["del", "theorem", "unop_one", ["category_theory", "opposite"]]]}]}, {"timestamp": 1557455546, "sha": "91a7fc23", "message": "fix(tactic/basic): missing `conv` from tactic.basic (#1004)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1557449628, "sha": "e66e1f30", "message": "feat(set_theory): add to cardinal, ordinal, cofinality (#963)\n* feat(set_theory): add to cardinal, ordinal, cofinality\nThe main new fact is the infinite pigeonhole principle\nAlso includes many basic additions\n* fix name change in other files\n* address all of Mario's comments\n* use classical tactic in order/basic\nI did not use it for well_founded.succ, because that resulted in an error in lt_succ\n* fix error", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "not_bounded_iff", []], ["add", "theorem", "not_unbounded_iff", []], ["mod", "theorem", "has_min", ["well_founded"]], ["mod", "theorem", "min_mem", ["well_founded"]], ["mod", "theorem", "not_lt_min", ["well_founded"]]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "theorem", "ord''", ["order_iso"]], ["add", "theorem", "to_equiv_to_fun", ["order_iso"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "countable_iff", ["cardinal"]], ["add", "theorem", "finset_card_lt_omega", ["cardinal"]], ["add", "theorem", "le_mk_iff_exists_subset", ["cardinal"]], ["add", "theorem", "le_powerlt", ["cardinal"]], ["add", "theorem", "mk_Union_le", ["cardinal"]], ["add", "theorem", "mk_bUnion_le", ["cardinal"]], ["del", "theorem", "mk_eq_of_injective", ["cardinal"]], ["add", "theorem", "mk_image_eq", ["cardinal"]], ["add", "theorem", "mk_image_eq_lift", ["cardinal"]], ["add", "theorem", "mk_image_eq_of_inj_on", ["cardinal"]], ["add", "theorem", "mk_image_eq_of_inj_on_lift", ["cardinal"]], ["add", "theorem", "mk_preimage_of_injective", ["cardinal"]], ["add", "theorem", "mk_preimage_of_injective_lift", ["cardinal"]], ["add", "theorem", "mk_preimage_of_injective_of_subset_range", ["cardinal"]], ["add", "theorem", "mk_preimage_of_injective_of_subset_range_lift", ["cardinal"]], ["add", "theorem", "mk_preimage_of_subset_range", ["cardinal"]], ["add", "theorem", "mk_preimage_of_subset_range_lift", ["cardinal"]], ["add", "theorem", "mk_range_eq", ["cardinal"]], ["mod", "theorem", "mk_range_le", ["cardinal"]], ["add", "theorem", "mk_sUnion_le", ["cardinal"]], ["add", "theorem", "mk_sep", ["cardinal"]], ["add", "theorem", "mk_set_le", ["cardinal"]], ["add", "theorem", "mk_subset_ge_of_subset_image", ["cardinal"]], ["add", "theorem", "mk_subset_ge_of_subset_image_lift", ["cardinal"]], ["add", "theorem", "mk_subtype_mono", ["cardinal"]], ["add", "theorem", "mk_subtype_of_equiv", ["cardinal"]], ["add", "theorem", "out_embedding", ["cardinal"]], ["add", "theorem", "powerlt_aux", ["cardinal"]], ["add", "theorem", "powerlt_le", ["cardinal"]], ["add", "theorem", "powerlt_le_powerlt_left", ["cardinal"]], ["add", "theorem", "powerlt_max", ["cardinal"]], ["add", "theorem", "powerlt_succ", ["cardinal"]], ["add", "theorem", "powerlt_zero", ["cardinal"]], ["add", "theorem", "succ_ne_zero", ["cardinal"]], ["add", "theorem", "sup_eq_zero", ["cardinal"]], ["add", "theorem", "two_le_iff'", ["cardinal"]], ["add", "theorem", "two_le_iff", ["cardinal"]], ["add", "theorem", "zero_power_le", ["cardinal"]], ["add", "theorem", "zero_powerlt", ["cardinal"]]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": [["add", "theorem", "sup_lt_ord_of_is_regular", ["cardinal"]], ["mod", "def", "cof", ["order"]], ["add", "theorem", "cof_le", ["order"]], ["add", "theorem", "le_cof", ["order"]], ["add", "theorem", "cof_type", ["ordinal"]], ["add", "theorem", "infinite_pigeonhole", ["ordinal"]], ["add", "theorem", "infinite_pigeonhole_card", ["ordinal"]], ["add", "theorem", "infinite_pigeonhole_set", ["ordinal"]], ["add", "theorem", "sup_lt", ["ordinal"]], ["add", "theorem", "sup_lt_ord", ["ordinal"]], ["add", "theorem", "unbounded_of_unbounded_Union", ["ordinal"]], ["add", "theorem", "unbounded_of_unbounded_sUnion", ["ordinal"]], ["add", "def", "cof", ["strict_order"]]]}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": [["add", "theorem", "add_one_eq", ["cardinal"]], ["add", "theorem", "card_typein_lt", ["cardinal"]], ["add", "theorem", "card_typein_out_lt", ["cardinal"]], ["add", "theorem", "lt_ord_succ_card", ["cardinal"]], ["add", "theorem", "mk_bounded_set_le", ["cardinal"]], ["add", "theorem", "mk_bounded_set_le_of_omega_le", ["cardinal"]], ["add", "theorem", "mk_bounded_subset_le", ["cardinal"]], ["add", "theorem", "mk_ord_out", ["cardinal"]], ["add", "theorem", "mul_eq_max_of_omega_le_left", ["cardinal"]], ["add", "theorem", "mul_le_max_of_omega_le_left", ["cardinal"]], ["add", "theorem", "ord_injective", ["cardinal"]], ["add", "theorem", "power_nat_le", ["cardinal"]], ["add", "theorem", "powerlt_omega", ["cardinal"]], ["add", "theorem", "powerlt_omega_le", ["cardinal"]], ["add", "theorem", "card_typein", ["ordinal"]], ["add", "theorem", "enum_le_enum", ["ordinal"]], ["add", "theorem", "has_succ_of_is_limit", ["ordinal"]], ["add", "def", "initial_seg_out", ["ordinal"]], ["add", "theorem", "injective_typein", ["ordinal"]], ["add", "theorem", "mk_initial_seg", ["ordinal"]], ["add", "theorem", "order_iso_enum'", ["ordinal"]], ["add", "theorem", "order_iso_enum", ["ordinal"]], ["add", "def", "order_iso_out", ["ordinal"]], ["add", "def", "principal_seg_out", ["ordinal"]], ["add", "theorem", "sup_succ", ["ordinal"]], ["add", "theorem", "type_out", ["ordinal"]], ["add", "theorem", "type_subrel_lt", ["ordinal"]], ["add", "def", "typein_iso", ["ordinal"]], ["add", "theorem", "typein_le_typein", ["ordinal"]], ["add", "theorem", "unbounded_range_of_sup_ge", ["ordinal"]], ["add", "def", "lt_equiv", ["principal_seg"]], ["add", "theorem", "top_lt_top", ["principal_seg"]]]}]}, {"timestamp": 1557394160, "sha": "5329bf3a", "message": "feat(algebra/pointwise): More lemmas on pointwise multiplication (#997)\n* feat(algebra/pointwise): More lemmas on pointwise multiplication\n* Fix build, hopefully\n* Fix build\n* to_additive + fix formatting", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "mem_smul_set", ["set"]], ["add", "theorem", "mul_subset_mul", ["set"]], ["add", "def", "pointwise_add_fintype", ["set"]], ["add", "def", "pointwise_mul_action", ["set"]], ["add", "def", "pointwise_mul_fintype", ["set"]], ["add", "def", "pointwise_mul_image_is_semiring_hom", ["set"]], ["add", "theorem", "smul_set_eq_image", ["set"]]]}]}, {"timestamp": 1557380209, "sha": "df5eddeb", "message": "refactor(strict_mono): make definition + move to order_functions (#998)\n* refactor(strict_mono): make definition + move to order_functions\n* Weaken assumptions from preorder to has_lt", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["del", "theorem", "injective_of_strict_mono", []], ["del", "theorem", "le_iff_le_of_strict_mono", []], ["del", "theorem", "lt_iff_lt_of_strict_mono", []], ["del", "theorem", "compares_of_strict_mono", ["ordering"]]]}, {"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "compares", ["strict_mono"]], ["add", "theorem", "injective", ["strict_mono"]], ["add", "theorem", "le_iff_le", ["strict_mono"]], ["add", "theorem", "lt_iff_lt", ["strict_mono"]], ["add", "theorem", "monotone", ["strict_mono"]], ["add", "def", "strict_mono", []], ["add", "theorem", "strict_mono_of_monotone_of_injective", []]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1557355227, "sha": "8f5d2401", "message": "refactor(order/basic): make type class args explicit in {*}order.lift (#995)\n* refactor(order/basic): make type class arguments explicit for {*}order.lift\n* Let's try again\n* And another try\n* Silly typo\n* Fix error\n* Oops, missed this one", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["mod", "def", "lift", ["decidable_linear_order"]], ["mod", "def", "lift", ["linear_order"]], ["mod", "def", "lift", ["partial_order"]], ["mod", "def", "lift", ["preorder"]]]}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}]}, {"timestamp": 1557346816, "sha": "7f9717fd", "message": "feat(*): preorder instances for with_bot and with_zero (#996)\n* feat(*): preorder instances for with_bot and with_zero\n* Let's try again", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}]}, {"timestamp": 1557315720, "sha": "c9cfafc9", "message": "chore(tactics): splitting tactics and tests into more files (#985)\n* chore(tactics): splitting tactics and tests into more files, cleaning up dependencies\n* tweaking comment\n* introducing `tactic.basic` and fixing imports\n* fixes\n* fix copyright\n* fix some things", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": []}, {"oldPath": "src/category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "src/category/monad/basic.lean", "newPath": "src/category/monad/basic.lean", "changes": []}, {"oldPath": "src/category/monad/writer.lean", "newPath": "src/category/monad/writer.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["mod", "def", "add", ["list", "func"]], ["mod", "def", "neg", ["list", "func"]], ["mod", "def", "pointwise", ["list", "func"]], ["mod", "def", "sub", ["list", "func"]]]}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "src/logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}, {"oldPath": "src/tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/converter/interactive.lean", "newPath": "src/tactic/converter/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/core.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "src/tactic/find.lean", "newPath": "src/tactic/find.lean", "changes": []}, {"oldPath": "src/tactic/generalize_proofs.lean", "newPath": "src/tactic/generalize_proofs.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/library_search.lean", "newPath": "src/tactic/library_search.lean", "changes": []}, {"oldPath": "src/tactic/local_cache.lean", "newPath": "src/tactic/local_cache.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/default.lean", "newPath": "src/tactic/monotonicity/default.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "src/tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "src/tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "src/tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}, {"oldPath": "src/tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/solve_by_elim.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "src/tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": null, "newPath": "test/conv.lean", "changes": []}, {"oldPath": null, "newPath": "test/convert.lean", "changes": [["add", "theorem", "singleton_inter_singleton_eq_empty", []]]}, {"oldPath": null, "newPath": "test/ext.lean", "changes": [["add", "structure", "dependent_fields", []], ["add", "theorem", "ext", ["df"]], ["add", "def", "my_bar", []], ["add", "def", "my_foo", []], ["add", "theorem", "ext", ["unit"]]]}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}, {"oldPath": "test/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}, {"oldPath": "test/monotonicity/test_cases.lean", "newPath": "test/monotonicity/test_cases.lean", "changes": []}, {"oldPath": null, "newPath": "test/rcases.lean", "changes": []}, {"oldPath": null, "newPath": "test/rewrite.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": [["del", "structure", "dependent_fields", []], ["del", "theorem", "ext", ["df"]], ["del", "def", "my_bar", []], ["del", "def", "my_foo", []], ["del", "theorem", "ext", ["unit"]]]}, {"oldPath": null, "newPath": "test/tauto.lean", "changes": []}, {"oldPath": null, "newPath": "test/wlog.lean", "changes": []}]}, {"timestamp": 1557308834, "sha": "73a30da3", "message": "feat(group_theory/subgroup): is_subgroup.inter (#994)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "inter", ["is_submonoid"]]]}]}, {"timestamp": 1557261851, "sha": "87cf6e36", "message": "feat(category_theory/category_of_elements) (#990)\n* feat(category_theory/category_of_elements)\n* Update src/category_theory/elements.lean\nCo-Authored-By: semorrison \n* Update src/category_theory/elements.lean\nCo-Authored-By: semorrison \n* Update src/category_theory/elements.lean\nCo-Authored-By: semorrison \n* Update src/category_theory/punit.lean\nCo-Authored-By: semorrison \n* various\n* remaining simp lemmas", "changes": [{"oldPath": null, "newPath": "src/category_theory/elements.lean", "changes": [["add", "def", "comma_equivalence", ["category_theory", "category_of_elements"]], ["add", "def", "from_comma", ["category_theory", "category_of_elements"]], ["add", "theorem", "from_comma_map", ["category_theory", "category_of_elements"]], ["add", "theorem", "from_comma_obj", ["category_theory", "category_of_elements"]], ["add", "def", "to_comma", ["category_theory", "category_of_elements"]], ["add", "theorem", "to_comma_map", ["category_theory", "category_of_elements"]], ["add", "theorem", "to_comma_obj", ["category_theory", "category_of_elements"]], ["add", "def", "π", ["category_theory", "category_of_elements"]], ["add", "theorem", "π_map", ["category_theory", "category_of_elements"]], ["add", "theorem", "π_obj", ["category_theory", "category_of_elements"]], ["add", "def", "elements", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": [["add", "def", "star", ["category_theory", "functor"]], ["add", "theorem", "star_map", ["category_theory", "functor"]], ["add", "theorem", "star_obj", ["category_theory", "functor"]]]}]}, {"timestamp": 1557255826, "sha": "820bac36", "message": "building the hyperreal library (#835)\n* more instances\n* fix stuff that got weirded\n* fix stuff that got weird\n* fix stuff that became weird\n* build hyperreal library (with sorries)\n* fix weirdness, prettify etc.\n* spaces\n* st lt le lemmas fix type\n* Update src/data/real/hyperreal.lean\nCo-Authored-By: abhimanyupallavisudhir <43954672+abhimanyupallavisudhir@users.noreply.github.com>\n* if then\n* more stuff\n* Update hyperreal.lean\n* Update hyperreal.lean\n* Update basic.lean\n* Update basic.lean\n* Update hyperreal.lean\n* of_max, of_min, of_abs\n* Update filter_product.lean\n* Update hyperreal.lean\n* abs_def etc.\n* Update filter_product.lean\n* hole\n* Update hyperreal.lean\n* Update filter_product.lean\n* Update filter_product.lean\n* Update filter_product.lean\n* Update hyperreal.lean\n* Update hyperreal.lean\n* Update filter_product.lean\n* Update hyperreal.lean\n* Update hyperreal.lean\n* finally done with all sorries!\n* Update hyperreal.lean\n* fix (?)\n* fix (?) ring issue\n* real.Sup_univ\n* st is Sup\n* st_id_real spacebar\n* sup --> Sup\n* fix weirds\n* dollar signs\n* 100-column\n* 100 columns rule\n* Update hyperreal.lean\n* removing uparrows\n* uparrows\n* some stuff that got away\n* fix\n* lift_id\n* fix?\n* fix mono, hopefully\n* fix mono, hopefully\n* this should work\n* fix -- no more mono\n* fixes\n* fixes\n* fixes\n* fixes\n* ok, fixed", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "neg_neg_iff_pos", []]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["add", "theorem", "Sup_univ", ["real"]]]}, {"oldPath": "src/data/real/hyperreal.lean", "newPath": "src/data/real/hyperreal.lean", "changes": [["add", "theorem", "abs_lt_real_iff_infinitesimal", ["hyperreal"]], ["mod", "theorem", "epsilon_eq_inv_omega", ["hyperreal"]], ["mod", "theorem", "epsilon_lt_pos", ["hyperreal"]], ["add", "theorem", "eq_of_is_st_real", ["hyperreal"]], ["add", "theorem", "exists_st_iff_not_infinite", ["hyperreal"]], ["add", "theorem", "exists_st_of_not_infinite", ["hyperreal"]], ["add", "theorem", "gt_of_neg_of_infinitesimal", ["hyperreal"]], ["add", "def", "infinite", ["hyperreal"]], ["add", "theorem", "infinite_iff_abs_lt_abs", ["hyperreal"]], ["add", "theorem", "infinite_iff_infinite_abs", ["hyperreal"]], ["add", "theorem", "infinite_iff_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_iff_infinite_pos_abs", ["hyperreal"]], ["add", "theorem", "infinite_iff_infinitesimal_inv", ["hyperreal"]], ["add", "theorem", "infinite_iff_not_exists_st", ["hyperreal"]], ["add", "theorem", "infinite_mul_infinite", ["hyperreal"]], ["add", "theorem", "infinite_mul_of_infinite_not_infinitesimal", ["hyperreal"]], ["add", "theorem", "infinite_mul_of_not_infinitesimal_infinite", ["hyperreal"]], ["add", "def", "infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_add_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_add_not_infinite", ["hyperreal"]], ["add", "theorem", "infinite_neg_add_not_infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_neg_def", ["hyperreal"]], ["add", "theorem", "infinite_neg_iff_infinite_and_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_iff_infinite_of_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_iff_infinite_pos_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_iff_infinitesimal_inv_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_mul_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_mul_infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_neg_mul_of_infinite_neg_not_infinitesimal_pos", ["hyperreal"]], ["add", "theorem", "infinite_neg_mul_of_infinite_pos_not_infinitesimal_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_mul_of_not_infinitesimal_neg_infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_neg_mul_of_not_infinitesimal_pos_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_neg_neg_of_infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_neg_of_tendsto_bot", ["hyperreal"]], ["add", "theorem", "infinite_of_infinitesimal_inv", ["hyperreal"]], ["add", "theorem", "infinite_omega", ["hyperreal"]], ["add", "def", "infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_abs_iff_infinite_abs", ["hyperreal"]], ["add", "theorem", "infinite_pos_add_infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_add_not_infinite", ["hyperreal"]], ["add", "theorem", "infinite_pos_add_not_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_pos_def", ["hyperreal"]], ["add", "theorem", "infinite_pos_iff_infinite_and_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_iff_infinite_neg_neg", ["hyperreal"]], ["add", "theorem", "infinite_pos_iff_infinite_of_nonneg", ["hyperreal"]], ["add", "theorem", "infinite_pos_iff_infinite_of_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_iff_infinitesimal_inv_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_mul_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_pos_mul_infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_mul_of_infinite_neg_not_infinitesimal_neg", ["hyperreal"]], ["add", "theorem", "infinite_pos_mul_of_infinite_pos_not_infinitesimal_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_mul_of_not_infinitesimal_neg_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_pos_mul_of_not_infinitesimal_pos_infinite_pos", ["hyperreal"]], ["add", "theorem", "infinite_pos_neg_of_infinite_neg", ["hyperreal"]], ["add", "theorem", "infinite_pos_of_tendsto_top", ["hyperreal"]], ["add", "theorem", "infinite_pos_omega", ["hyperreal"]], ["add", "theorem", "infinitesimal_add", ["hyperreal"]], ["add", "theorem", "infinitesimal_def", ["hyperreal"]], ["mod", "theorem", "infinitesimal_epsilon", ["hyperreal"]], ["add", "theorem", "infinitesimal_iff_infinite_inv", ["hyperreal"]], ["add", "theorem", "infinitesimal_inv_of_infinite", ["hyperreal"]], ["add", "theorem", "infinitesimal_mul", ["hyperreal"]], ["add", "theorem", "infinitesimal_neg", ["hyperreal"]], ["add", "theorem", "infinitesimal_neg_iff", ["hyperreal"]], ["add", "theorem", "infinitesimal_neg_iff_infinite_neg_inv", ["hyperreal"]], ["mod", "theorem", "infinitesimal_of_tendsto_zero", ["hyperreal"]], ["add", "theorem", "infinitesimal_pos_iff_infinite_pos_inv", ["hyperreal"]], ["add", "theorem", "infinitesimal_sub_is_st", ["hyperreal"]], ["add", "theorem", "infinitesimal_sub_st", ["hyperreal"]], ["add", "theorem", "infinitesimal_zero", ["hyperreal"]], ["mod", "theorem", "inv_epsilon_eq_omega", ["hyperreal"]], ["add", "theorem", "is_st_Sup", ["hyperreal"]], ["add", "theorem", "is_st_add", ["hyperreal"]], ["add", "theorem", "is_st_iff_abs_sub_lt_delta", ["hyperreal"]], ["add", "theorem", "is_st_inj_real", ["hyperreal"]], ["add", "theorem", "is_st_inv", ["hyperreal"]], ["add", "theorem", "is_st_le_of_le", ["hyperreal"]], ["add", "theorem", "is_st_mul", ["hyperreal"]], ["add", "theorem", "is_st_neg", ["hyperreal"]], ["add", "theorem", "is_st_of_tendsto", ["hyperreal"]], ["add", "theorem", "is_st_real_iff_eq", ["hyperreal"]], ["add", "theorem", "is_st_refl_real", ["hyperreal"]], ["add", "theorem", "is_st_st'", ["hyperreal"]], ["add", "theorem", "is_st_st", ["hyperreal"]], ["add", "theorem", "is_st_st_of_exists_st", ["hyperreal"]], ["add", "theorem", "is_st_st_of_is_st", ["hyperreal"]], ["add", "theorem", "is_st_sub", ["hyperreal"]], ["add", "theorem", "is_st_symm_real", ["hyperreal"]], ["add", "theorem", "is_st_trans_real", ["hyperreal"]], ["mod", "theorem", "is_st_unique", ["hyperreal"]], ["add", "theorem", "lt_neg_of_pos_of_infinitesimal", ["hyperreal"]], ["add", "theorem", "lt_of_is_st_lt", ["hyperreal"]], ["add", "theorem", "lt_of_pos_of_infinitesimal", ["hyperreal"]], ["add", "theorem", "lt_of_st_lt", ["hyperreal"]], ["add", "theorem", "ne_zero_of_infinite", ["hyperreal"]], ["del", "theorem", "neg_lt_of_tendsto_zero_of_neg", ["hyperreal"]], ["add", "theorem", "neg_lt_of_tendsto_zero_of_pos", ["hyperreal"]], ["add", "theorem", "neg_of_infinite_neg", ["hyperreal"]], ["add", "theorem", "not_infinite_add", ["hyperreal"]], ["add", "theorem", "not_infinite_iff_exist_lt_gt", ["hyperreal"]], ["add", "theorem", "not_infinite_mul", ["hyperreal"]], ["add", "theorem", "not_infinite_neg", ["hyperreal"]], ["add", "theorem", "not_infinite_neg_add_infinite_pos", ["hyperreal"]], ["add", "theorem", "not_infinite_neg_of_infinite_pos", ["hyperreal"]], ["add", "theorem", "not_infinite_of_exists_st", ["hyperreal"]], ["add", "theorem", "not_infinite_of_infinitesimal", ["hyperreal"]], ["add", "theorem", "not_infinite_pos_add_infinite_neg", ["hyperreal"]], ["add", "theorem", "not_infinite_pos_of_infinite_neg", ["hyperreal"]], ["add", "theorem", "not_infinite_real", ["hyperreal"]], ["add", "theorem", "not_infinite_zero", ["hyperreal"]], ["add", "theorem", "not_infinitesimal_of_infinite", ["hyperreal"]], ["add", "theorem", "not_infinitesimal_of_infinite_neg", ["hyperreal"]], ["add", "theorem", "not_infinitesimal_of_infinite_pos", ["hyperreal"]], ["add", "theorem", "not_real_of_infinite", ["hyperreal"]], ["add", "theorem", "not_real_of_infinitesimal_ne_zero", ["hyperreal"]], ["add", "theorem", "pos_of_infinite_pos", ["hyperreal"]], ["add", "theorem", "st_add", ["hyperreal"]], ["add", "theorem", "st_eq_Sup", ["hyperreal"]], ["add", "theorem", "st_id_real", ["hyperreal"]], ["add", "theorem", "st_infinite", ["hyperreal"]], ["add", "theorem", "st_inv", ["hyperreal"]], ["add", "theorem", "st_le_of_le", ["hyperreal"]], ["add", "theorem", "st_mul", ["hyperreal"]], ["add", "theorem", "st_neg", ["hyperreal"]], ["add", "theorem", "st_of_is_st", ["hyperreal"]], ["add", "theorem", "zero_iff_infinitesimal_real", ["hyperreal"]], ["add", "theorem", "zero_of_infinitesimal_real", ["hyperreal"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_at_top_at_bot", ["filter"]]]}, {"oldPath": "src/order/filter/filter_product.lean", "newPath": "src/order/filter/filter_product.lean", "changes": [["add", "theorem", "abs_def", ["filter", "filter_product"]], ["add", "theorem", "lift_id", ["filter", "filter_product"]], ["mod", "theorem", "lt_def", ["filter", "filter_product"]], ["add", "theorem", "max_def", ["filter", "filter_product"]], ["add", "theorem", "min_def", ["filter", "filter_product"]], ["add", "theorem", "of_abs", ["filter", "filter_product"]], ["add", "theorem", "of_div", ["filter", "filter_product"]], ["mod", "theorem", "of_eq", ["filter", "filter_product"]], ["mod", "theorem", "of_eq_coe", ["filter", "filter_product"]], ["del", "theorem", "of_id", ["filter", "filter_product"]], ["mod", "theorem", "of_le", ["filter", "filter_product"]], ["mod", "theorem", "of_le_of_le", ["filter", "filter_product"]], ["mod", "theorem", "of_lt", ["filter", "filter_product"]], ["mod", "theorem", "of_lt_of_lt", ["filter", "filter_product"]], ["add", "theorem", "of_max", ["filter", "filter_product"]], ["add", "theorem", "of_min", ["filter", "filter_product"]], ["mod", "theorem", "of_ne", ["filter", "filter_product"]], ["mod", "theorem", "of_rel", ["filter", "filter_product"]], ["mod", "theorem", "of_rel_of_rel", ["filter", "filter_product"]], ["mod", "theorem", "of_rel_of_rel₂", ["filter", "filter_product"]], ["mod", "theorem", "of_rel₂", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_add", ["filter", "filter_product"]], ["mod", "theorem", "of_seq_mul", ["filter", "filter_product"]], ["add", "theorem", "of_sub", ["filter", "filter_product"]]]}]}, {"timestamp": 1557250075, "sha": "4a38d2e1", "message": "feat(scripts): add --build-new flag to cache-olean (#992)", "changes": [{"oldPath": "scripts/cache-olean.py", "newPath": "scripts/cache-olean.py", "changes": []}]}, {"timestamp": 1557226142, "sha": "717033e3", "message": "chore(build): cron build restarts from scratch", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1557218719, "sha": "c726c128", "message": "feat(category/monad/cont): monad_cont instances for state_t, reader_t, except_t and option_t (#733)\n* feat(category/monad/cont): monad_cont instances for state_t, reader_t,\nexcept_t and option_t\n* feat(category/monad/writer): writer monad transformer", "changes": [{"oldPath": null, "newPath": "src/category/monad/basic.lean", "changes": [["add", "theorem", "map_eq_bind_pure_comp", []]]}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": [["add", "def", "cont", []], ["add", "def", "monad_lift", ["cont_t", "cont_t"]], ["add", "def", "call_cc", ["except_t"]], ["add", "theorem", "goto_mk_label", ["except_t"]], ["add", "def", "mk_label", ["except_t"]], ["add", "def", "call_cc", ["option_t"]], ["add", "theorem", "goto_mk_label", ["option_t"]], ["add", "def", "mk_label", ["option_t"]], ["add", "def", "call_cc", ["reader_t"]], ["add", "theorem", "goto_mk_label", ["reader_t"]], ["add", "def", "mk_label", ["reader_t"]], ["add", "def", "call_cc", ["state_t"]], ["add", "theorem", "goto_mk_label", ["state_t"]], ["add", "def", "mk_label", ["state_t"]], ["add", "def", "call_cc", ["writer_t"]], ["add", "theorem", "goto_mk_label", ["writer_t"]], ["add", "def", "mk_label", ["writer_t"]]]}, {"oldPath": null, "newPath": "src/category/monad/writer.lean", "changes": [["add", "def", "pass_aux", ["except_t"]], ["add", "def", "pass_aux", ["option_t"]], ["add", "def", "swap_right", []], ["add", "def", "writer", []], ["add", "structure", "writer_t", []]]}]}, {"timestamp": 1557192354, "sha": "98ba07bc", "message": "chore(build): fix stages in cron job", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1557188930, "sha": "505f748b", "message": "chore(build): build against Lean 3.5 nightly build (#989)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1557161437, "sha": "6eba20b0", "message": "feat(category_theory): currying for functors (#981)\n* feat(category_theory): currying for functors\n* Update src/category_theory/currying.lean\nCo-Authored-By: semorrison \n* compacting\n* fix import\n* change from review\n* rfl on same line", "changes": [{"oldPath": null, "newPath": "src/category_theory/currying.lean", "changes": [["add", "theorem", "map_app_app", ["category_theory", "curry"]], ["add", "theorem", "obj_map_app", ["category_theory", "curry"]], ["add", "theorem", "obj_obj_map", ["category_theory", "curry"]], ["add", "theorem", "obj_obj_obj", ["category_theory", "curry"]], ["add", "def", "curry", ["category_theory"]], ["add", "def", "curry_obj", ["category_theory"]], ["add", "def", "currying", ["category_theory"]], ["add", "theorem", "map_app", ["category_theory", "uncurry"]], ["add", "theorem", "obj_map", ["category_theory", "uncurry"]], ["add", "theorem", "obj_obj", ["category_theory", "uncurry"]], ["add", "def", "uncurry", ["category_theory"]]]}]}, {"timestamp": 1557120898, "sha": "f536dac8", "message": "six(style.md): fix broken code (#987)", "changes": [{"oldPath": "docs/style.md", "newPath": "docs/style.md", "changes": []}]}, {"timestamp": 1557057450, "sha": "23270e71", "message": "feat(ring_theory/adjoin): adjoining elements to form subalgebras (#756)\n* feat(ring_theory/adjoin): adjoining elements to form subalgebras\n* Fix build\n* Change to_submodule into a coercion\n* Use pointwise_mul\n* add simp attribute to adjoin_empty", "changes": [{"oldPath": null, "newPath": "src/ring_theory/adjoin.lean", "changes": [["add", "theorem", "adjoin_empty", ["algebra"]], ["add", "theorem", "adjoin_eq_range", ["algebra"]], ["add", "theorem", "adjoin_eq_span", ["algebra"]], ["add", "theorem", "adjoin_int", ["algebra"]], ["add", "theorem", "adjoin_le", ["algebra"]], ["add", "theorem", "adjoin_le_iff", ["algebra"]], ["add", "theorem", "adjoin_mono", ["algebra"]], ["add", "theorem", "adjoin_singleton_eq_range", ["algebra"]], ["add", "theorem", "adjoin_union", ["algebra"]], ["add", "theorem", "adjoin_union_coe_submodule", ["algebra"]], ["add", "theorem", "fg_trans", ["algebra"]], ["add", "theorem", "subset_adjoin", ["algebra"]], ["add", "theorem", "is_noetherian_ring_closure", []], ["add", "theorem", "is_noetherian_ring_of_fg", []], ["add", "def", "fg", ["subalgebra"]], ["add", "theorem", "fg_bot", ["subalgebra"]], ["add", "theorem", "fg_def", ["subalgebra"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1557042610, "sha": "3f26ba88", "message": "feat(category_theory/products): associators (#982)", "changes": [{"oldPath": null, "newPath": "src/category_theory/products/associator.lean", "changes": [["add", "def", "associativity", ["category_theory", "prod"]], ["add", "def", "associator", ["category_theory", "prod"]], ["add", "theorem", "associator_map", ["category_theory", "prod"]], ["add", "theorem", "associator_obj", ["category_theory", "prod"]], ["add", "def", "inverse_associator", ["category_theory", "prod"]], ["add", "theorem", "inverse_associator_map", ["category_theory", "prod"]], ["add", "theorem", "inverse_associator_obj", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/bifunctor.lean", "newPath": "src/category_theory/products/bifunctor.lean", "changes": []}, {"oldPath": "src/category_theory/products.lean", "newPath": "src/category_theory/products/default.lean", "changes": []}]}, {"timestamp": 1557039765, "sha": "1e8f438c", "message": "feat(presheaves) (#886)\n* feat(category_theory/colimits): missing simp lemmas\n* feat(category_theory): functor.map_nat_iso\n* define `functor.map_nat_iso`, and relate to whiskering\n* rename `functor.on_iso` to `functor.map_iso`\n* add some missing lemmas about whiskering\n* fix(category_theory): presheaves, unbundled and bundled, and pushforwards\n* restoring `(opens X)ᵒᵖ`\n* various changes from working on stalks\n* rename `nbhds` to `open_nhds`\n* fix introduced typo\n* typo\n* compactify a proof\n* rename `presheaf` to `presheaf_on_space`\n* fix(category_theory): turn `has_limits` classes into structures\n* naming instances to avoid collisions\n* breaking up instances.topological_spaces\n* fixing all the other pi-type typclasses\n* fix import\n* oops\n* fix import\n* missed one\n* typo\n* restoring eq_to_hom simp lemmas\n* removing unnecessary simp lemma\n* remove another superfluous lemma\n* removing the nat_trans and vcomp notations; use \\hom and \\gg\n* a simpler proposal\n* getting rid of vcomp\n* fix\n* splitting files\n* update notation\n* fix\n* cleanup\n* use iso_whisker_right instead of map_nat_iso\n* proofs magically got easier?\n* improve some proofs\n* remove crap\n* minimise imports\n* chore(travis): disable the check for minimal imports\n* Update src/algebraic_geometry/presheafed_space.lean\nCo-Authored-By: semorrison \n* writing `op_induction` tactic, and improving proofs\n* squeeze_simping\n* cleanup\n* rearranging\n* Update src/category_theory/instances/Top/presheaf.lean\nCo-Authored-By: semorrison \n* fix `open` statements, and use `op_induction`\n* rename terms of PresheafedSpace to X Y Z. rename field from .X to .to_Top\n* forgetful functor\n* update comments about unfortunate proofs\n* add coercion from morphisms of PresheafedSpaces to morphisms in Top", "changes": [{"oldPath": null, "newPath": "src/algebraic_geometry/presheafed_space.lean", "changes": [["add", "def", "comp", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "comp_c", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "comp_coe", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "comp_f", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "ext", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "forget", ["algebraic_geometry", "PresheafedSpace"]], ["add", "structure", "hom", ["algebraic_geometry", "PresheafedSpace"]], ["add", "def", "id", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "id_c", ["algebraic_geometry", "PresheafedSpace"]], ["add", "theorem", "id_f", ["algebraic_geometry", "PresheafedSpace"]], ["add", "structure", "PresheafedSpace", ["algebraic_geometry"]], ["add", "def", "map_presheaf", ["category_theory", "functor"]], ["add", "theorem", "map_presheaf_map_c", ["category_theory", "functor"]], ["add", "theorem", "map_presheaf_map_f", ["category_theory", "functor"]], ["add", "theorem", "map_presheaf_obj_X", ["category_theory", "functor"]], ["add", "theorem", "map_presheaf_obj_𝒪", ["category_theory", "functor"]], ["add", "def", "on_presheaf", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/instances/Top/basic.lean", "newPath": "src/category_theory/instances/Top/basic.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/default.lean", "newPath": "src/category_theory/instances/Top/default.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/open_nhds.lean", "newPath": "src/category_theory/instances/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/opens.lean", "newPath": "src/category_theory/instances/Top/opens.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/presheaf.lean", "changes": [["add", "def", "comp", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["add", "theorem", "comp_hom_app", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["add", "theorem", "comp_inv_app", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["add", "def", "id", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["add", "theorem", "id_hom_app'", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["add", "theorem", "id_hom_app", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["add", "theorem", "id_inv_app'", ["category_theory", "instances", "Top", "presheaf", "pushforward"]], ["add", "def", "pushforward", ["category_theory", "instances", "Top", "presheaf"]], ["add", "def", "pushforward_eq", ["category_theory", "instances", "Top", "presheaf"]], ["add", "theorem", "pushforward_eq_eq", ["category_theory", "instances", "Top", "presheaf"]], ["add", "def", "presheaf", ["category_theory", "instances", "Top"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "op_hom", ["category_theory", "nat_iso"]], ["add", "theorem", "op_inv", ["category_theory", "nat_iso"]], ["add", "def", "op_induction", ["category_theory"]]]}]}, {"timestamp": 1557024054, "sha": "fc8b08b3", "message": "feat(data/set/basic): prod_subset_iff (#980)\n* feat(data/set/basic): prod_subset_iff\n* syntax", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "prod_subset_iff", ["set"]]]}]}, {"timestamp": 1557014210, "sha": "fbce6e4d", "message": "fix(data/set/finite): make fintype_seq an instance (#979)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["del", "def", "fintype_seq", ["set"]]]}]}, {"timestamp": 1557008199, "sha": "7dea60ba", "message": "feat(logic/basic): forall_iff_forall_surj (#977)\na lemma from the perfectoid project", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "forall_iff_forall_surj", []]]}]}, {"timestamp": 1557000093, "sha": "b4d483e2", "message": "feat(colimits): arbitrary colimits in Mon and CommRing (#910)\n* feat(category_theory): working in Sort rather than Type, as far as possible\n* missed one\n* adding a comment about working in Type\n* remove imax\n* removing `props`, it's covered by `types`.\n* fixing comment on `rel`\n* tweak comment\n* add matching extend_π lemma\n* remove unnecessary universe annotation\n* another missing s/Type/Sort/\n* feat(category_theory/shapes): basic shapes of cones and conversions\nminor tweaks\n* Moving into src. Everything is borked.\n* investigating sparse\n* blech\n* maybe working again?\n* removing terrible square/cosquare names\n* returning to filtered colimits\n* colimits in Mon\n* rename\n* actually jump through the final hoop\n* experiments\n* fixing use of ext\n* feat(colimits): colimits in Mon and CommRing\n* fixes\n* removing stuff I didn't mean to have in here\n* minor\n* fixes\n* merge\n* update after merge\n* fix import", "changes": [{"oldPath": "src/category_theory/concrete_category.lean", "newPath": "src/category_theory/concrete_category.lean", "changes": [["add", "theorem", "ext", ["category_theory", "bundled", "bundled_hom"]], ["mod", "theorem", "bundled_hom_coe", ["category_theory", "bundled"]]]}, {"oldPath": "src/category_theory/instances/CommRing/adjunctions.lean", "newPath": "src/category_theory/instances/CommRing/adjunctions.lean", "changes": [["add", "theorem", "hom_coe_app'", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": "src/category_theory/instances/CommRing/basic.lean", "newPath": "src/category_theory/instances/CommRing/basic.lean", "changes": [["add", "theorem", "ext", ["category_theory", "instances", "CommRing", "hom"]], ["mod", "theorem", "hom_coe_app", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/CommRing/colimits.lean", "changes": [["add", "def", "cocone_fun", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "cocone_morphism", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "cocone_naturality", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "cocone_naturality_components", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "colimit", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "colimit_cocone", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "colimit_is_colimit", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "colimit_setoid", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "colimit_type", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "desc_fun", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "desc_fun_lift", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "def", "desc_morphism", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "naturality_bundled", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "inductive", "prequotient", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "quot_add", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "quot_mul", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "quot_neg", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "quot_one", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "theorem", "quot_zero", ["category_theory", "instances", "CommRing", "colimits"]], ["add", "inductive", "relation", ["category_theory", "instances", "CommRing", "colimits"]]]}, {"oldPath": "src/category_theory/instances/CommRing/default.lean", "newPath": "src/category_theory/instances/CommRing/default.lean", "changes": []}, {"oldPath": "src/category_theory/instances/monoids.lean", "newPath": "src/category_theory/instances/Mon/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/instances/Mon/colimits.lean", "changes": [["add", "def", "cocone_fun", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "cocone_morphism", ["category_theory", "instances", "Mon", "colimits"]], ["add", "theorem", "cocone_naturality", ["category_theory", "instances", "Mon", "colimits"]], ["add", "theorem", "cocone_naturality_components", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "colimit", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "colimit_cocone", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "colimit_is_colimit", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "colimit_setoid", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "colimit_type", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "desc_fun", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "desc_fun_lift", ["category_theory", "instances", "Mon", "colimits"]], ["add", "def", "desc_morphism", ["category_theory", "instances", "Mon", "colimits"]], ["add", "inductive", "prequotient", ["category_theory", "instances", "Mon", "colimits"]], ["add", "theorem", "quot_mul", ["category_theory", "instances", "Mon", "colimits"]], ["add", "theorem", "quot_one", ["category_theory", "instances", "Mon", "colimits"]], ["add", "inductive", "relation", ["category_theory", "instances", "Mon", "colimits"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/Mon/default.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "theorem", "naturality_bundled", ["category_theory", "limits", "cocone"]], ["add", "theorem", "naturality_bundled", ["category_theory", "limits", "cone"]]]}]}, {"timestamp": 1556971564, "sha": "c7baf8ef", "message": "feat(option/injective_map) (#978)", "changes": [{"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": [["add", "theorem", "injective_map", ["option"]]]}]}, {"timestamp": 1556919269, "sha": "f98ffdef", "message": "feat(tactic/decl_mk_const): performance improvement for library_search (#967)\n* feat(tactic/decl_mk_const): auxiliary tactic for library_search [WIP]\n* use decl_mk_const in library_search\n* use decl_mk_const\n* move into tactic/basic.lean", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/library_search.lean", "newPath": "src/tactic/library_search.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": "test/library_search/ordered_ring.lean", "newPath": "test/library_search/ordered_ring.lean", "changes": []}, {"oldPath": "test/library_search/ring_theory.lean", "newPath": "test/library_search/ring_theory.lean", "changes": []}, {"oldPath": "test/mllist.lean", "newPath": "test/mllist.lean", "changes": []}]}, {"timestamp": 1556891886, "sha": "7b1105bf", "message": "chore(build): build only master and its related PRs", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1556890628, "sha": "e747c91c", "message": "chore(README): put the badges in the README on one line (#975)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1556886946, "sha": "f2db6369", "message": "feat(docs/install_debian): Debian startup guide (#974)\n* feat(docs/install_debian): Debian startup guide\n* feat(scripts/install_debian): One-line install for Debian [ci skip]\n* fix(docs/install_debian*): Typos pointed out by Johan\nAlso adds a summary of what will be installed", "changes": [{"oldPath": null, "newPath": "docs/install_debian.md", "changes": []}, {"oldPath": null, "newPath": "docs/install_debian_details.md", "changes": []}, {"oldPath": null, "newPath": "scripts/install_debian.sh", "changes": []}]}, {"timestamp": 1556883019, "sha": "f5060c40", "message": "feat(category_theory/limits): support for special shapes of (co)limits (#938)\nfeat(category_theory/limits): support for special shapes of (co)limits", "changes": [{"oldPath": null, "newPath": "docs/tutorial/category_theory/calculating_colimits_in_Top.lean", "changes": [["add", "def", "I", []], ["add", "def", "I_0", []], ["add", "def", "I_1", []], ["add", "def", "R", []], ["add", "def", "X", []], ["add", "def", "Y", []], ["add", "def", "cylinder", []], ["add", "def", "cylinder_0", []], ["add", "def", "cylinder_1", []], ["add", "def", "d", []], ["add", "def", "f", []], ["add", "def", "g", []], ["add", "def", "mapping_cone", []], ["add", "def", "mapping_cylinder", []], ["add", "def", "mapping_cylinder_0", []], ["add", "def", "pt", []], ["add", "def", "q", []], ["add", "def", "to_pt", []], ["add", "def", "w", []]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/basic.lean", "newPath": "src/category_theory/instances/Top/basic.lean", "changes": [["add", "def", "of", ["category_theory", "instances", "Top"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/binary_products.lean", "changes": [["add", "def", "mk", ["category_theory", "limits", "binary_cofan"]], ["add", "def", "binary_cofan", ["category_theory", "limits"]], ["add", "def", "mk", ["category_theory", "limits", "binary_fan"]], ["add", "def", "binary_fan", ["category_theory", "limits"]], ["add", "def", "pair", ["category_theory", "limits"]], ["add", "def", "pair_function", ["category_theory", "limits"]], ["add", "inductive", "walking_pair", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/equalizers.lean", "changes": [["add", "def", "of_cofork", ["category_theory", "limits", "cocone"]], ["add", "theorem", "of_cofork_ι", ["category_theory", "limits", "cocone"]], ["add", "def", "condition", ["category_theory", "limits", "cofork"]], ["add", "def", "of_cocone", ["category_theory", "limits", "cofork"]], ["add", "theorem", "of_cocone_ι", ["category_theory", "limits", "cofork"]], ["add", "def", "of_π", ["category_theory", "limits", "cofork"]], ["add", "def", "π", ["category_theory", "limits", "cofork"]], ["add", "def", "cofork", ["category_theory", "limits"]], ["add", "def", "of_fork", ["category_theory", "limits", "cone"]], ["add", "theorem", "of_fork_π", ["category_theory", "limits", "cone"]], ["add", "def", "condition", ["category_theory", "limits", "fork"]], ["add", "def", "of_cone", ["category_theory", "limits", "fork"]], ["add", "theorem", "of_cone_π", ["category_theory", "limits", "fork"]], ["add", "def", "of_ι", ["category_theory", "limits", "fork"]], ["add", "theorem", "of_ι_app_one", ["category_theory", "limits", "fork"]], ["add", "theorem", "of_ι_app_zero", ["category_theory", "limits", "fork"]], ["add", "def", "ι", ["category_theory", "limits", "fork"]], ["add", "def", "fork", ["category_theory", "limits"]], ["add", "def", "parallel_pair", ["category_theory", "limits"]], ["add", "theorem", "parallel_pair_functor_obj", ["category_theory", "limits"]], ["add", "theorem", "parallel_pair_map_left", ["category_theory", "limits"]], ["add", "theorem", "parallel_pair_map_right", ["category_theory", "limits"]], ["add", "inductive", "walking_parallel_pair", ["category_theory", "limits"]], ["add", "def", "comp", ["category_theory", "limits", "walking_parallel_pair_hom"]], ["add", "inductive", "walking_parallel_pair_hom", ["category_theory", "limits"]], ["add", "theorem", "walking_parallel_pair_hom_id", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/products.lean", "changes": [["add", "def", "mk", ["category_theory", "limits", "cofan"]], ["add", "def", "cofan", ["category_theory", "limits"]], ["add", "def", "mk", ["category_theory", "limits", "fan"]], ["add", "def", "fan", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/shapes/pullbacks.lean", "changes": [["add", "def", "of_pushout_cocone", ["category_theory", "limits", "cocone"]], ["add", "theorem", "of_pushout_cocone_ι", ["category_theory", "limits", "cocone"]], ["add", "def", "of_pullback_cone", ["category_theory", "limits", "cone"]], ["add", "theorem", "of_pullback_cone_π", ["category_theory", "limits", "cone"]], ["add", "def", "cospan", ["category_theory", "limits"]], ["add", "theorem", "cospan_left", ["category_theory", "limits"]], ["add", "theorem", "cospan_map_id", ["category_theory", "limits"]], ["add", "theorem", "cospan_map_inl", ["category_theory", "limits"]], ["add", "theorem", "cospan_map_inr", ["category_theory", "limits"]], ["add", "theorem", "cospan_one", ["category_theory", "limits"]], ["add", "theorem", "cospan_right", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "mk", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "of_cone", ["category_theory", "limits", "pullback_cone"]], ["add", "theorem", "of_cone_π", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "π₁", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "π₂", ["category_theory", "limits", "pullback_cone"]], ["add", "def", "pullback_cone", ["category_theory", "limits"]], ["add", "theorem", "condition", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "mk", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "of_cocone", ["category_theory", "limits", "pushout_cocone"]], ["add", "theorem", "of_cocone_ι", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "ι₁", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "ι₂", ["category_theory", "limits", "pushout_cocone"]], ["add", "def", "pushout_cocone", ["category_theory", "limits"]], ["add", "def", "span", ["category_theory", "limits"]], ["add", "theorem", "span_left", ["category_theory", "limits"]], ["add", "theorem", "span_map_fst", ["category_theory", "limits"]], ["add", "theorem", "span_map_id", ["category_theory", "limits"]], ["add", "theorem", "span_map_snd", ["category_theory", "limits"]], ["add", "theorem", "span_right", ["category_theory", "limits"]], ["add", "theorem", "span_zero", ["category_theory", "limits"]], ["add", "def", "comp", ["category_theory", "limits", "walking_cospan", "hom"]], ["add", "inductive", "hom", ["category_theory", "limits", "walking_cospan"]], ["add", "theorem", "hom_id", ["category_theory", "limits", "walking_cospan"]], ["add", "inductive", "walking_cospan", ["category_theory", "limits"]], ["add", "def", "comp", ["category_theory", "limits", "walking_span", "hom"]], ["add", "inductive", "hom", ["category_theory", "limits", "walking_span"]], ["add", "theorem", "hom_id", ["category_theory", "limits", "walking_span"]], ["add", "inductive", "walking_span", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/sparse.lean", "changes": [["add", "def", "sparse_category", ["category_theory"]]]}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1556897051, "sha": "219cb1a1", "message": "chore(travis): disable the check for minimal imports (#973)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1556892661, "sha": "44386cde", "message": "chore(docs): delete docs/wip.md (#972)\n* chore(docs): delete docs/wip.md\nlong outdated\n* remove link in README", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "docs/wip.md", "newPath": null, "changes": []}]}, {"timestamp": 1556881185, "sha": "3eb7ebca", "message": "remove code duplication (#971)", "changes": [{"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}]}, {"timestamp": 1556837752, "sha": "6956daa2", "message": "fix(data/polynomial): change instance order in polynomial.subsingleton (#970)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1556818329, "sha": "60b3c198", "message": "fix(scripts/remote-install-update-mathlib): apt shouldn't ask (#969)", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}]}, {"timestamp": 1556800174, "sha": "d2889058", "message": "fix(script/remote-install-update-mathlib) fix answer reading and requests/urllib3 version conflict (#968)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}]}, {"timestamp": 1556786453, "sha": "8a097f13", "message": "feat(ring_theory/ideal_operations): inj_iff_trivial_ker for ring homomorphisms (#951)\n* feat(ring_theory/ideal_operations): inj_iff_trivial_ker for ring homomorphisms\n* Update subgroup.lean\n* Update ideal_operations.lean", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "trivial_ker_iff_eq_one", ["is_group_hom"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "inj_iff_ker_eq_bot", ["is_ring_hom"]], ["add", "theorem", "injective_iff", ["is_ring_hom"]], ["add", "def", "ker", ["is_ring_hom"]], ["add", "theorem", "ker_eq", ["is_ring_hom"]], ["add", "theorem", "ker_eq_bot_iff_eq_zero", ["is_ring_hom"]]]}]}, {"timestamp": 1556784494, "sha": "ef11fb3d", "message": "feat(category_theory/limits/opposites): (co)limits in opposite categories (#926)\n* (co)limits in opposite categories\n* moving lemmas\n* moving stuff about complete lattices to separate PR\n* renaming category_of_preorder elsewhere\n* build limits functor/shape at a time\n* removing stray commas, and making one-liners\n* remove non-terminal simps", "changes": [{"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": [["add", "def", "op_obj_op", ["category_theory", "functor", "const"]], ["add", "theorem", "op_obj_op_hom_app", ["category_theory", "functor", "const"]], ["add", "theorem", "op_obj_op_inv_app", ["category_theory", "functor", "const"]], ["add", "def", "op_obj_unop", ["category_theory", "functor", "const"]], ["add", "theorem", "op_obj_unop_hom_app", ["category_theory", "functor", "const"]], ["add", "theorem", "op_obj_unop_inv_app", ["category_theory", "functor", "const"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "cocone_left_op_of_cone", ["category_theory", "limits"]], ["add", "theorem", "cocone_left_op_of_cone_X", ["category_theory", "limits"]], ["add", "theorem", "cocone_left_op_of_cone_ι_app", ["category_theory", "limits"]], ["add", "def", "cocone_of_cone_left_op", ["category_theory", "limits"]], ["add", "theorem", "cocone_of_cone_left_op_X", ["category_theory", "limits"]], ["add", "theorem", "cocone_of_cone_left_op_ι_app", ["category_theory", "limits"]], ["add", "def", "cone_left_op_of_cocone", ["category_theory", "limits"]], ["add", "theorem", "cone_left_op_of_cocone_X", ["category_theory", "limits"]], ["add", "theorem", "cone_left_op_of_cocone_π_app", ["category_theory", "limits"]], ["add", "def", "cone_of_cocone_left_op", ["category_theory", "limits"]], ["add", "theorem", "cone_of_cocone_left_op_X", ["category_theory", "limits"]], ["add", "theorem", "cone_of_cocone_left_op_π_app", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "src/category_theory/limits/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "left_op_map", ["category_theory", "functor"]], ["add", "theorem", "left_op_obj", ["category_theory", "functor"]], ["add", "theorem", "right_op_map", ["category_theory", "functor"]], ["add", "theorem", "right_op_obj", ["category_theory", "functor"]], ["add", "theorem", "left_op_app", ["category_theory", "nat_trans"]], ["add", "theorem", "op_app", ["category_theory", "nat_trans"]], ["add", "theorem", "right_op_app", ["category_theory", "nat_trans"]], ["add", "theorem", "unop_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1556771859, "sha": "69094fcf", "message": "fix(tactic/library_search): iff lemmas with universes (#935)\n* fix(tactic/library_search): iff lemmas with universes\n* cleaning up\n* add crossreference", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/library_search.lean", "newPath": "src/tactic/library_search.lean", "changes": []}, {"oldPath": "test/library_search/basic.lean", "newPath": "test/library_search/basic.lean", "changes": [["add", "def", "P", ["test", "library_search"]], ["add", "def", "Q", ["test", "library_search"]], ["add", "def", "f", ["test", "library_search"]]]}, {"oldPath": null, "newPath": "test/library_search/ordered_ring.lean", "changes": []}]}, {"timestamp": 1556764503, "sha": "9b7fb5fd", "message": "feat(category_theory/limits): complete lattices have (co)limits (#931)\n* feat(category_theory/limits): complete lattices have (co)limits\n* Update lattice.lean", "changes": [{"oldPath": null, "newPath": "src/category_theory/limits/lattice.lean", "changes": []}]}, {"timestamp": 1556700831, "sha": "b3433a51", "message": "feat(script/auth_github): improve messages [ci skip] (#965)", "changes": [{"oldPath": "scripts/auth_github.py", "newPath": "scripts/auth_github.py", "changes": []}]}, {"timestamp": 1556655437, "sha": "c8a2aa95", "message": "chore(category_theory): move small_category_of_preorder to preorder namespace (#932)", "changes": [{"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": []}]}, {"timestamp": 1556648551, "sha": "7c868148", "message": "fix(scripts/remote-install-update-mathlib): try again [ci skip]\nThe previous attempt to install setuptools seems to fails for timing\nreasons (PyGithub need setuptools after it's downloaded but before\nit is installed, this is probably also a packaging issue in PyGithub).", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}]}, {"timestamp": 1556637636, "sha": "a15fca5d", "message": "fix(scripts/remote-install-update-mathlib): missing dependency (#964)\nAlso add a `--upgrade` option to `pip install` in case something is\nalready there but outdated", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}]}, {"timestamp": 1556628805, "sha": "8dcce05f", "message": "feat(analysis/normed_space): open mapping (#900)\n* The Banach open mapping theorem\n* improve comments\n* feat(analysis/normed_space): rebase, fix build", "changes": [{"oldPath": null, "newPath": "src/analysis/normed_space/banach.lean", "changes": [["add", "theorem", "exists_preimage_norm_le", []], ["add", "theorem", "is_bounded_inv", ["linear_equiv"]], ["add", "theorem", "open_mapping", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "has_sum_geometric_two'", []], ["mod", "theorem", "has_sum_geometric_two", []], ["add", "theorem", "summable_geometric", []], ["add", "theorem", "summable_geometric_two", []], ["add", "theorem", "tsum_geometric", []], ["add", "theorem", "tsum_geometric_two", []]]}]}, {"timestamp": 1556568723, "sha": "00aaf05a", "message": "refactor(tactic/interactive): remove dependencies of (#878)\n`tactic/interactive` on many theories", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "src/algebra/associated.lean", "newPath": "src/algebra/associated.lean", "changes": []}, {"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "src/algebra/free.lean", "newPath": "src/algebra/free.lean", "changes": []}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/category/bitraversable/basic.lean", "newPath": "src/category/bitraversable/basic.lean", "changes": []}, {"oldPath": "src/category/monad/cont.lean", "newPath": "src/category/monad/cont.lean", "changes": []}, {"oldPath": "src/category/traversable/equiv.lean", "newPath": "src/category/traversable/equiv.lean", "changes": []}, {"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "src/category_theory/core.lean", "newPath": "src/category_theory/core.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/instances/CommRing/basic.lean", "newPath": "src/category_theory/instances/CommRing/basic.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/basic.lean", "newPath": "src/category_theory/instances/Top/basic.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/open_nhds.lean", "newPath": "src/category_theory/instances/Top/open_nhds.lean", "changes": []}, {"oldPath": "src/category_theory/instances/Top/opens.lean", "newPath": "src/category_theory/instances/Top/opens.lean", "changes": []}, {"oldPath": "src/category_theory/instances/groups.lean", "newPath": "src/category_theory/instances/groups.lean", "changes": []}, {"oldPath": "src/category_theory/instances/measurable_space.lean", "newPath": "src/category_theory/instances/measurable_space.lean", "changes": []}, {"oldPath": "src/category_theory/instances/monoids.lean", "newPath": "src/category_theory/instances/monoids.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "src/data/erased.lean", "newPath": "src/data/erased.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["mod", "theorem", "nil_subperm", ["list"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "src/data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "src/data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": []}, {"oldPath": "src/data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "src/data/rat.lean", "newPath": "src/data/rat.lean", "changes": []}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "src/data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "src/data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "src/data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": []}, {"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": []}, {"oldPath": "src/data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "src/data/zsqrtd/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["mod", "theorem", "iff_iff_not_or_and_or_not", ["classical"]]]}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}, {"oldPath": "src/logic/unique.lean", "newPath": "src/logic/unique.lean", "changes": []}, {"oldPath": "src/measure_theory/giry_monad.lean", "newPath": "src/measure_theory/giry_monad.lean", "changes": []}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/order/filter/default.lean", "newPath": "src/order/filter/default.lean", "changes": []}, {"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}, {"oldPath": "src/order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}, {"oldPath": "src/set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "src/tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "src/tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/polynomial.lean", "newPath": "src/topology/instances/polynomial.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/completion.lean", "newPath": "src/topology/metric_space/completion.lean", "changes": []}, {"oldPath": "src/topology/metric_space/hausdorff_distance.lean", "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": []}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1556541998, "sha": "9b3e91b0", "message": "Update elan.md", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1556311923, "sha": "53f98786", "message": "refactor(analysis/normed_space): use bundled type for `fderiv` (#956)\n* feat(analysis/normed_space): refactor fderiv to use bounded_linear_map\n- uniqueness remains sorry'd\n- more simp lemmas about bounded_linear_map\n* refactor uniqueness proof\n* fix(analysis/normed_space/operator_norm): rename `bound_le_op_norm` to `op_norm_le_bound`\n- so that the inequality goes the correct way.", "changes": [{"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["mod", "theorem", "fderiv_at_filter_unique", []], ["mod", "theorem", "fderiv_at_unique", []], ["mod", "theorem", "fderiv_at_within_open_unique", []], ["mod", "theorem", "comp", ["has_fderiv_at"]], ["mod", "theorem", "congr", ["has_fderiv_at"]], ["mod", "theorem", "continuous_at", ["has_fderiv_at"]], ["del", "theorem", "is_o", ["has_fderiv_at"]], ["mod", "def", "has_fderiv_at", []], ["mod", "theorem", "has_fderiv_at_add", []], ["mod", "theorem", "has_fderiv_at_congr", []], ["mod", "theorem", "comp", ["has_fderiv_at_filter"]], ["mod", "theorem", "congr", ["has_fderiv_at_filter"]], ["mod", "theorem", "is_O_sub", ["has_fderiv_at_filter"]], ["del", "theorem", "is_o", ["has_fderiv_at_filter"]], ["mod", "theorem", "mono", ["has_fderiv_at_filter"]], ["mod", "theorem", "tendsto_nhds", ["has_fderiv_at_filter"]], ["mod", "def", "has_fderiv_at_filter", []], ["mod", "theorem", "has_fderiv_at_filter_add", []], ["mod", "theorem", "has_fderiv_at_filter_congr'", []], ["mod", "theorem", "has_fderiv_at_filter_congr", []], ["mod", "theorem", "has_fderiv_at_filter_id", []], ["mod", "theorem", "has_fderiv_at_filter_iff_tendsto", []], ["mod", "theorem", "has_fderiv_at_filter_neg", []], ["mod", "theorem", "has_fderiv_at_filter_of_has_fderiv_at", []], ["mod", "theorem", "has_fderiv_at_filter_real_equiv", []], ["mod", "theorem", "has_fderiv_at_filter_smul", []], ["mod", "theorem", "has_fderiv_at_filter_sub", []], ["mod", "theorem", "has_fderiv_at_id", []], ["mod", "theorem", "has_fderiv_at_iff_tendsto", []], ["mod", "theorem", "has_fderiv_at_neg", []], ["mod", "theorem", "has_fderiv_at_smul", []], ["mod", "theorem", "has_fderiv_at_sub", []], ["mod", "theorem", "comp", ["has_fderiv_at_within"]], ["mod", "theorem", "congr", ["has_fderiv_at_within"]], ["mod", "theorem", "continuous_at_within", ["has_fderiv_at_within"]], ["mod", "theorem", "mono", ["has_fderiv_at_within"]], ["mod", "def", "has_fderiv_at_within", []], ["mod", "theorem", "has_fderiv_at_within_add", []], ["mod", "theorem", "has_fderiv_at_within_congr", []], ["mod", "theorem", "has_fderiv_at_within_id", []], ["mod", "theorem", "has_fderiv_at_within_iff_tendsto", []], ["mod", "theorem", "has_fderiv_at_within_neg", []], ["mod", "theorem", "has_fderiv_at_within_of_has_fderiv_at", []], ["mod", "theorem", "has_fderiv_at_within_smul", []], ["mod", "theorem", "has_fderiv_at_within_sub", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "bound_le_op_norm", ["bounded_linear_map"]], ["add", "theorem", "op_norm_le_bound", ["bounded_linear_map"]]]}]}, {"timestamp": 1556317625, "sha": "b49bf61c", "message": "fix(README): update maintainer list", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1556275966, "sha": "0444f9c2", "message": "feat(data/equiv/basic): sum_compl_apply and others (#961)\n* feat(data/equiv/basic): sum_congr_apply and others\n* Update basic.lean", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "theorem", "of_eq_apply", ["equiv", "set"]], ["add", "theorem", "of_eq_symm_apply", ["equiv", "set"]], ["add", "theorem", "sum_compl_apply_inl", ["equiv", "set"]], ["add", "theorem", "sum_compl_apply_inr", ["equiv", "set"]], ["add", "theorem", "sum_compl_symm_apply_of_mem", ["equiv", "set"]], ["add", "theorem", "sum_compl_symm_apply_of_not_mem", ["equiv", "set"]], ["add", "theorem", "union_apply_left", ["equiv", "set"]], ["add", "theorem", "union_apply_right", ["equiv", "set"]], ["add", "theorem", "univ_apply", ["equiv", "set"]], ["add", "theorem", "univ_symm_apply", ["equiv", "set"]], ["add", "theorem", "symm_symm_apply", ["equiv"]]]}]}, {"timestamp": 1556218682, "sha": "038f809c", "message": "refactor(analysis/normed_space/operator_norm): replace subspace with … (#955)\n* refactor(analysis/normed_space/operator_norm): replace subspace with structure\n* refactor(analysis/normed_space/operator_norm): add coercions", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bounded_linear_map", ["bounded_linear_map"]], ["add", "def", "to_bounded_linear_map", ["is_bounded_linear_map"]], ["del", "theorem", "mul_inv_eq'", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "add_apply", ["bounded_linear_map"]], ["add", "theorem", "coe_add'", ["bounded_linear_map"]], ["add", "theorem", "coe_add", ["bounded_linear_map"]], ["add", "theorem", "coe_apply'", ["bounded_linear_map"]], ["add", "theorem", "coe_apply", ["bounded_linear_map"]], ["add", "theorem", "coe_coe", ["bounded_linear_map"]], ["add", "theorem", "coe_comp'", ["bounded_linear_map"]], ["add", "theorem", "coe_comp", ["bounded_linear_map"]], ["add", "theorem", "coe_id'", ["bounded_linear_map"]], ["add", "theorem", "coe_id", ["bounded_linear_map"]], ["add", "theorem", "coe_neg'", ["bounded_linear_map"]], ["add", "theorem", "coe_neg", ["bounded_linear_map"]], ["add", "theorem", "coe_sub'", ["bounded_linear_map"]], ["add", "theorem", "coe_sub", ["bounded_linear_map"]], ["add", "theorem", "coe_zero'", ["bounded_linear_map"]], ["mod", "theorem", "coe_zero", ["bounded_linear_map"]], ["add", "theorem", "continuous", ["bounded_linear_map"]], ["add", "def", "id", ["bounded_linear_map"]], ["add", "theorem", "id_apply", ["bounded_linear_map"]], ["mod", "theorem", "is_O_sub", ["bounded_linear_map"]], ["mod", "theorem", "neg_apply", ["bounded_linear_map"]], ["del", "theorem", "one_smul", ["bounded_linear_map"]], ["add", "theorem", "sub_apply", ["bounded_linear_map"]], ["del", "theorem", "tendsto", ["bounded_linear_map"]], ["del", "def", "to_linear_map", ["bounded_linear_map"]], ["add", "def", "zero", ["bounded_linear_map"]], ["del", "theorem", "zero_smul", ["bounded_linear_map"]], ["add", "structure", "bounded_linear_map", []], ["del", "def", "bounded_linear_map", []], ["del", "def", "bounded_linear_map_subspace", []], ["add", "theorem", "exists_pos_bound_of_bound", []], ["del", "def", "to_bounded_linear_map", ["is_bounded_linear_map"]]]}]}, {"timestamp": 1556050547, "sha": "1d9ff681", "message": "feat(function/embedding): ext and ext_iff (#962)", "changes": [{"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": [["add", "theorem", "ext", ["function", "embedding"]], ["add", "theorem", "ext_iff", ["function", "embedding"]]]}]}, {"timestamp": 1556004125, "sha": "0d7b4195", "message": "fix(ring_theory/adjoin_root): move adjoin_root out of adjoin_root namespace (#960)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["del", "def", "adjoin_root", ["adjoin_root"]], ["add", "def", "adjoin_root", []]]}]}, {"timestamp": 1555976915, "sha": "45456cf1", "message": "refactor(data/equiv/basic): simplify definition of equiv.set.range (#959)\n* refactor(data/equiv/basic): simplify definition of equiv.set.range\n* delete duplicate", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}]}, {"timestamp": 1555945253, "sha": "63bbd1c3", "message": "feat(data/list/basic): index_of_inj (#954)\n* feat(data/list/basic): index_of_inj\n* make it an iff", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "index_of_inj", ["list"]]]}]}, {"timestamp": 1555826863, "sha": "3478f1f6", "message": "fix(tactic/interactive): allow `convert e using 0`", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1555785765, "sha": "9daa1a57", "message": "feat(tactic/clear_except): clear most of the assumptions in context (#957)", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1555790823, "sha": "4b9d94dc", "message": "feat(data/[fin]set): add some more basic properties of (finite) sets (#948)\n* feat(data/[fin]set): add some more basic properties of (finite) sets\n* update after reviews\n* fix error, move pairwise_disjoint to lattice as well\n* fix error", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "filter_union_right", ["finset"]], ["add", "theorem", "nonempty_iff_ne_empty", ["finset"]], ["add", "theorem", "subset_image_iff", ["finset"]], ["add", "theorem", "subset_union_elim", ["finset"]], ["add", "theorem", "to_set_injective", ["finset"]], ["add", "theorem", "to_set_sdiff", ["finset"]]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "compl_empty_iff", ["set"]], ["add", "theorem", "compl_univ_iff", ["set"]], ["add", "theorem", "diff_singleton_subset_iff", ["set"]], ["add", "theorem", "image_congr'", ["set"]], ["add", "theorem", "image_eq_range", ["set"]], ["add", "theorem", "image_id'", ["set"]], ["add", "theorem", "image_image", ["set"]], ["add", "theorem", "mem_diff_singleton", ["set"]], ["add", "theorem", "mem_diff_singleton_empty", ["set"]], ["add", "theorem", "nmem_singleton_empty", ["set"]], ["add", "theorem", "nonempty_compl", ["set"]], ["add", "theorem", "nonempty_image", ["set"]], ["add", "theorem", "preimage_eq_preimage'", ["set"]], ["add", "theorem", "preimage_subset_preimage_iff", ["set"]], ["add", "theorem", "subset_insert_diff", ["set"]], ["add", "theorem", "subset_insert_diff_singleton", ["set"]], ["add", "theorem", "subset_union_of_subset_left", ["set"]], ["add", "theorem", "subset_union_of_subset_right", ["set"]], ["add", "theorem", "exists_set_subtype", ["subtype"]], ["add", "theorem", "range_val", ["subtype"]]]}, {"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_finset_of_finite", ["set"]], ["add", "theorem", "coe_to_finset", ["set", "finite"]], ["add", "theorem", "finite_bUnion'", ["set"]]]}, {"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "inj_on_comp_of_injective_left", ["set"]], ["add", "theorem", "inj_on_preimage", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_self", []], ["add", "theorem", "ne_of_disjoint", []], ["add", "theorem", "Union_of_singleton", ["set"]], ["add", "theorem", "Union_range_eq_Union", ["set"]], ["add", "theorem", "Union_range_eq_sUnion", ["set"]], ["add", "def", "pairwise_disjoint", ["set"]], ["add", "theorem", "pairwise_disjoint_elim", ["set"]], ["add", "theorem", "pairwise_disjoint_range", ["set"]], ["add", "theorem", "pairwise_disjoint_subset", ["set"]], ["add", "theorem", "subset_sUnion_of_subset", ["set"]]]}]}, {"timestamp": 1555774799, "sha": "7370cbf2", "message": "feat(tactic/linarith): treat expr atoms up to defeq (#950)", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1555753635, "sha": "784a68c3", "message": "fix(topology/order): Missing Prop annotation (#952)", "changes": [{"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": []}]}, {"timestamp": 1555721361, "sha": "e4fc5afd", "message": "feat(tactic/ring): treat expr atoms up to defeq (#949)", "changes": [{"oldPath": "src/tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "test/ring.lean", "newPath": "test/ring.lean", "changes": []}]}, {"timestamp": 1555626797, "sha": "c1aff1b5", "message": "style(tactic/omega): whitespace and minor tweaks\nmissed the PR review cycle", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "add_nil", ["list", "func"]], ["mod", "theorem", "equiv_of_eq", ["list", "func"]], ["mod", "theorem", "equiv_symm", ["list", "func"]], ["mod", "theorem", "forall_val_of_forall_mem", ["list", "func"]], ["mod", "theorem", "get_map'", ["list", "func"]], ["mod", "theorem", "get_map", ["list", "func"]], ["mod", "theorem", "get_neg", ["list", "func"]], ["mod", "theorem", "get_nil", ["list", "func"]], ["mod", "theorem", "get_pointwise", ["list", "func"]], ["mod", "theorem", "get_sub", ["list", "func"]], ["mod", "theorem", "length_add", ["list", "func"]], ["mod", "theorem", "length_neg", ["list", "func"]], ["mod", "theorem", "length_pointwise", ["list", "func"]], ["mod", "theorem", "length_sub", ["list", "func"]], ["mod", "theorem", "nil_add", ["list", "func"]], ["mod", "theorem", "nil_pointwise", ["list", "func"]], ["mod", "theorem", "nil_sub", ["list", "func"]], ["mod", "theorem", "pointwise_nil", ["list", "func"]], ["mod", "theorem", "sub_nil", ["list", "func"]]]}, {"oldPath": "src/tactic/omega/coeffs.lean", "newPath": "src/tactic/omega/coeffs.lean", "changes": [["mod", "theorem", "val_between_map_div", ["omega", "coeffs"]], ["mod", "theorem", "val_except_update_set", ["omega", "coeffs"]]]}, {"oldPath": "src/tactic/omega/eq_elim.lean", "newPath": "src/tactic/omega/eq_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/find_ees.lean", "newPath": "src/tactic/omega/find_ees.lean", "changes": [["add", "structure", "ee_state", ["omega"]]]}, {"oldPath": "src/tactic/omega/int/dnf.lean", "newPath": "src/tactic/omega/int/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/form.lean", "newPath": "src/tactic/omega/int/form.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/main.lean", "newPath": "src/tactic/omega/int/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/int/preterm.lean", "newPath": "src/tactic/omega/int/preterm.lean", "changes": []}, {"oldPath": "src/tactic/omega/misc.lean", "newPath": "src/tactic/omega/misc.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/dnf.lean", "newPath": "src/tactic/omega/nat/dnf.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/form.lean", "newPath": "src/tactic/omega/nat/form.lean", "changes": [["mod", "def", "equiv", ["omega", "nat", "form"]], ["mod", "def", "fresh_index", ["omega", "nat", "form"]], ["mod", "def", "holds", ["omega", "nat", "form"]], ["mod", "def", "implies", ["omega", "nat", "form"]], ["mod", "def", "neg_free", ["omega", "nat", "form"]], ["mod", "def", "repr", ["omega", "nat", "form"]], ["mod", "def", "sat", ["omega", "nat", "form"]], ["mod", "def", "sub_free", ["omega", "nat", "form"]], ["mod", "def", "valid", ["omega", "nat", "form"]], ["mod", "inductive", "form", ["omega", "nat"]], ["mod", "def", "univ_close", ["omega", "nat"]], ["mod", "theorem", "univ_close_of_valid", ["omega", "nat"]], ["mod", "theorem", "valid_of_unsat_not", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/nat/main.lean", "newPath": "src/tactic/omega/nat/main.lean", "changes": []}, {"oldPath": "src/tactic/omega/nat/neg_elim.lean", "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": [["mod", "theorem", "implies_neg_elim_core", ["omega", "nat"]], ["mod", "def", "is_nnf", ["omega", "nat"]], ["mod", "theorem", "is_nnf_nnf", ["omega", "nat"]], ["mod", "theorem", "le_and_le_iff_eq", ["omega", "nat"]], ["mod", "def", "neg_elim_core", ["omega", "nat"]], ["mod", "theorem", "neg_free_neg_elim", ["omega", "nat"]], ["mod", "theorem", "neg_free_neg_elim_core", ["omega", "nat"]], ["mod", "def", "nnf", ["omega", "nat"]], ["mod", "def", "push_neg", ["omega", "nat"]], ["mod", "theorem", "push_neg_equiv", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/nat/preterm.lean", "newPath": "src/tactic/omega/nat/preterm.lean", "changes": [["mod", "def", "canonize", ["omega", "nat"]], ["mod", "def", "fresh_index", ["omega", "nat", "preterm"]], ["mod", "def", "repr", ["omega", "nat", "preterm"]], ["mod", "def", "sub_free", ["omega", "nat", "preterm"]], ["mod", "def", "val", ["omega", "nat", "preterm"]], ["mod", "theorem", "val_add", ["omega", "nat", "preterm"]], ["mod", "theorem", "val_sub", ["omega", "nat", "preterm"]], ["mod", "theorem", "val_canonize", ["omega", "nat"]]]}, {"oldPath": "src/tactic/omega/nat/sub_elim.lean", "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": []}, {"oldPath": "src/tactic/omega/term.lean", "newPath": "src/tactic/omega/term.lean", "changes": [["add", "def", "to_string", ["omega", "term"]]]}, {"oldPath": "test/omega.lean", "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1555618555, "sha": "d0140dd8", "message": "feat(group_theory/subgroup): additive version of inj_iff_trivial_ker (#947)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1555515231, "sha": "032400bd", "message": "feat(analysis/normed_space): more facts about operator norm (#927)\n* refactor(analysis/normed_space): refactor and additional lemmas\n- rename `bounded_linear_maps` to `bounded_linear_map`, `operator_norm` to `op_norm`.\n- refactor operator norm with an equivalent definition.\n- change some names and notation to be more consistent with conventions elsewhere\n in mathlib: replace `bounded_by_*` with `le_*`, `operator_norm_homogeneous` with\n `op_norm_smul`.\n- more simp lemmas for bounded_linear_map.\n- additional results: lipschitz continuity of the operator norm, also\n that it is submultiplicative.\n* chore(analysis/normed_space/operator_norm): add attribution\n* style(analysis/normed_space/operator_norm): use namespace `real`\n- open `real` instead of `lattice` and omit spurious prefixes.\n* feat(analysis/normed_space/operator_norm): coercion to linear_map\n* style(analysis/normed_space/bounded_linear_maps): minor edits\n- extract variables for brevity of theorem statements.\n- more consistent naming of variables.\n* feat(analysis/normed_space/operator_norm): add constructor of bounded_linear_map from is_bounded_linear_map\n* fix(analysis/normed_space/operator_norm): remove spurious explicit argument\n* fix(analysis/normed_space): type of bounded linear maps\n- change the definition of bounded_linear_map to be a type rather than\n the corresponding subspace, and mark it for unfolding.\n- rename `bounded_linear_map.from_is_bounded_linear_map` to `is_bounded_linear_map.to_bounded_linear_map`.\n* feat(analysis/normed_space): analysis results for bounded_linear_maps", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "theorem", "add", ["is_bounded_linear_map"]], ["mod", "theorem", "comp", ["is_bounded_linear_map"]], ["mod", "theorem", "continuous", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_comp", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_id", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_sub", ["is_bounded_linear_map"]], ["mod", "theorem", "lim_zero_bounded_linear_map", ["is_bounded_linear_map"]], ["mod", "theorem", "neg", ["is_bounded_linear_map"]], ["mod", "theorem", "smul", ["is_bounded_linear_map"]], ["mod", "theorem", "sub", ["is_bounded_linear_map"]], ["mod", "theorem", "tendsto", ["is_bounded_linear_map"]], ["mod", "structure", "is_bounded_linear_map", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["del", "theorem", "bdd_above_range_norm_image_div_norm", []], ["del", "theorem", "bounded_by_operator_norm", []], ["add", "theorem", "bound_le_op_norm", ["bounded_linear_map"]], ["add", "theorem", "bounds_bdd_below", ["bounded_linear_map"]], ["add", "theorem", "bounds_nonempty", ["bounded_linear_map"]], ["add", "theorem", "coe_zero", ["bounded_linear_map"]], ["add", "def", "comp", ["bounded_linear_map"]], ["add", "theorem", "ext", ["bounded_linear_map"]], ["add", "theorem", "ext_iff", ["bounded_linear_map"]], ["add", "theorem", "is_O_comp", ["bounded_linear_map"]], ["add", "theorem", "is_O_id", ["bounded_linear_map"]], ["add", "theorem", "is_O_sub", ["bounded_linear_map"]], ["add", "theorem", "le_op_norm", ["bounded_linear_map"]], ["add", "theorem", "lipschitz", ["bounded_linear_map"]], ["add", "theorem", "map_add", ["bounded_linear_map"]], ["add", "theorem", "map_neg", ["bounded_linear_map"]], ["add", "theorem", "map_smul", ["bounded_linear_map"]], ["add", "theorem", "map_sub", ["bounded_linear_map"]], ["add", "theorem", "map_zero", ["bounded_linear_map"]], ["add", "theorem", "neg_apply", ["bounded_linear_map"]], ["add", "theorem", "one_smul", ["bounded_linear_map"]], ["add", "def", "op_norm", ["bounded_linear_map"]], ["add", "theorem", "op_norm_comp_le", ["bounded_linear_map"]], ["add", "theorem", "op_norm_nonneg", ["bounded_linear_map"]], ["add", "theorem", "op_norm_smul", ["bounded_linear_map"]], ["add", "theorem", "op_norm_triangle", ["bounded_linear_map"]], ["add", "theorem", "op_norm_zero_iff", ["bounded_linear_map"]], ["add", "theorem", "ratio_le_op_norm", ["bounded_linear_map"]], ["add", "theorem", "smul_apply", ["bounded_linear_map"]], ["add", "theorem", "tendsto", ["bounded_linear_map"]], ["add", "def", "to_linear_map", ["bounded_linear_map"]], ["add", "theorem", "unit_le_op_norm", ["bounded_linear_map"]], ["add", "theorem", "zero_apply", ["bounded_linear_map"]], ["add", "theorem", "zero_smul", ["bounded_linear_map"]], ["add", "def", "bounded_linear_map", []], ["add", "def", "bounded_linear_map_subspace", []], ["del", "theorem", "coe_zero", ["bounded_linear_maps"]], ["del", "theorem", "map_zero", ["bounded_linear_maps"]], ["del", "theorem", "one_smul", ["bounded_linear_maps"]], ["del", "theorem", "smul_coe", ["bounded_linear_maps"]], ["del", "theorem", "zero_smul", ["bounded_linear_maps"]], ["del", "def", "bounded_linear_maps", []], ["del", "theorem", "exists_bound", []], ["del", "theorem", "ext", []], ["add", "def", "to_bounded_linear_map", ["is_bounded_linear_map"]], ["del", "theorem", "operator_norm_bounded_by", []], ["del", "theorem", "operator_norm_homogeneous", []], ["del", "theorem", "operator_norm_homogeneous_le", []], ["del", "theorem", "operator_norm_nonneg", []], ["del", "theorem", "operator_norm_triangle", []], ["del", "theorem", "operator_norm_zero_iff", []], ["del", "def", "to_linear_map", []]]}]}, {"timestamp": 1555494780, "sha": "8b23dadc", "message": "feat(scripts): use apt-get on ubuntu and support older Python versions (#945)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "scripts/setup-dev-scripts.sh", "newPath": "scripts/setup-dev-scripts.sh", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1555499025, "sha": "3f4b154a", "message": "feat(tactic/omega): tactic for linear integer & natural number arithmetic (#827)\n* feat(tactic/omega): tactic for discharging linear integer and natural number arithmetic goals\n* refactor(tactic/omega): clean up namespace and notations\n* Update src/data/list/func.lean\nCo-Authored-By: skbaek \n* Add changed files\n* Refactor val_between_map_div\n* Use default inhabitants for list.func", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "add_div_of_dvd", ["int"]], ["add", "theorem", "default_eq_zero", ["int"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "filter_ge", ["list", "Ico"]], ["add", "theorem", "add_nil", ["list", "func"]], ["add", "theorem", "eq_get_of_mem", ["list", "func"]], ["add", "theorem", "eq_of_equiv", ["list", "func"]], ["add", "theorem", "equiv_of_eq", ["list", "func"]], ["add", "theorem", "equiv_refl", ["list", "func"]], ["add", "theorem", "equiv_symm", ["list", "func"]], ["add", "theorem", "equiv_trans", ["list", "func"]], ["add", "theorem", "forall_val_of_forall_mem", ["list", "func"]], ["add", "theorem", "get_add", ["list", "func"]], ["add", "theorem", "get_eq_default_of_le", ["list", "func"]], ["add", "theorem", "get_map'", ["list", "func"]], ["add", "theorem", "get_map", ["list", "func"]], ["add", "theorem", "get_neg", ["list", "func"]], ["add", "theorem", "get_nil", ["list", "func"]], ["add", "theorem", "get_pointwise", ["list", "func"]], ["add", "theorem", "get_set", ["list", "func"]], ["add", "theorem", "get_set_eq_of_ne", ["list", "func"]], ["add", "theorem", "get_sub", ["list", "func"]], ["add", "theorem", "length_add", ["list", "func"]], ["add", "theorem", "length_neg", ["list", "func"]], ["add", "theorem", "length_pointwise", ["list", "func"]], ["add", "theorem", "length_set", ["list", "func"]], ["add", "theorem", "length_sub", ["list", "func"]], ["add", "theorem", "map_add_map", ["list", "func"]], ["add", "theorem", "mem_get_of_le", ["list", "func"]], ["add", "theorem", "mem_get_of_ne_zero", ["list", "func"]], ["add", "theorem", "nil_add", ["list", "func"]], ["add", "theorem", "nil_pointwise", ["list", "func"]], ["add", "theorem", "nil_sub", ["list", "func"]], ["add", "theorem", "pointwise_nil", ["list", "func"]], ["add", "theorem", "sub_nil", ["list", "func"]]]}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "add", ["list", "func"]], ["add", "def", "equiv", ["list", "func"]], ["add", "def", "get", ["list", "func"]], ["add", "def", "neg", ["list", "func"]], ["add", "def", "pointwise", ["list", "func"]], ["add", "def", "set", ["list", "func"]], ["add", "def", "sub", ["list", "func"]], ["add", "def", "map_with_index", ["list"]], ["add", "def", "map_with_index_core", ["list"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "lt_iff_add_one_le", ["nat"]], ["add", "theorem", "max_succ_succ", ["nat"]], ["add", "theorem", "zero_max", ["nat"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "iff_iff_not_or_and_or_not", ["classical"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/clause.lean", "changes": [["add", "def", "append", ["omega", "clause"]], ["add", "def", "holds", ["omega", "clause"]], ["add", "def", "holds_append", ["omega", "clause"]], ["add", "def", "sat", ["omega", "clause"]], ["add", "def", "unsat", ["omega", "clause"]], ["add", "def", "clause", ["omega"]], ["add", "def", "sat", ["omega", "clauses"]], ["add", "def", "unsat", ["omega", "clauses"]], ["add", "theorem", "unsat_cons", ["omega", "clauses"]], ["add", "theorem", "unsat_nil", ["omega", "clauses"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/coeffs.lean", "changes": [["add", "theorem", "dvd_val", ["omega", "coeffs"]], ["add", "theorem", "dvd_val_between", ["omega", "coeffs"]], ["add", "theorem", "forall_val_dvd_of_forall_mem_dvd", ["omega", "coeffs"]], ["add", "def", "val", ["omega", "coeffs"]], ["add", "theorem", "val_add", ["omega", "coeffs"]], ["add", "def", "val_between", ["omega", "coeffs"]], ["add", "theorem", "val_between_add", ["omega", "coeffs"]], ["add", "theorem", "val_between_add_val_between", ["omega", "coeffs"]], ["add", "theorem", "val_between_eq_of_le", ["omega", "coeffs"]], ["add", "theorem", "val_between_eq_val_between", ["omega", "coeffs"]], ["add", "theorem", "val_between_eq_zero", ["omega", "coeffs"]], ["add", "theorem", "val_between_map_div", ["omega", "coeffs"]], ["add", "theorem", "val_between_map_mul", ["omega", "coeffs"]], ["add", "theorem", "val_between_neg", ["omega", "coeffs"]], ["add", "theorem", "val_between_nil", ["omega", "coeffs"]], ["add", "def", "val_between_set", ["omega", "coeffs"]], ["add", "theorem", "val_between_sub", ["omega", "coeffs"]], ["add", "theorem", "val_eq_of_le", ["omega", "coeffs"]], ["add", "theorem", "val_eq_zero", ["omega", "coeffs"]], ["add", "def", "val_except", ["omega", "coeffs"]], ["add", "def", "val_except_add_eq", ["omega", "coeffs"]], ["add", "theorem", "val_except_eq_val_except", ["omega", "coeffs"]], ["add", "theorem", "val_except_update_set", ["omega", "coeffs"]], ["add", "theorem", "val_map_div", ["omega", "coeffs"]], ["add", "theorem", "val_neg", ["omega", "coeffs"]], ["add", "theorem", "val_nil", ["omega", "coeffs"]], ["add", "def", "val_set", ["omega", "coeffs"]], ["add", "theorem", "val_sub", ["omega", "coeffs"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/omega/eq_elim.lean", "changes": [["add", "def", "cancel", ["omega"]], ["add", "def", "coeffs_reduce", ["omega"]], ["add", "theorem", "coeffs_reduce_correct", ["omega"]], ["add", "def", "repr", ["omega", "ee"]], ["add", "inductive", "ee", ["omega"]], ["add", "def", "eq_elim", ["omega"]], ["add", "theorem", "mul_symdiv_eq", ["omega"]], ["add", "def", "rhs", ["omega"]], ["add", "theorem", "rhs_correct", ["omega"]], ["add", "theorem", "rhs_correct_aux", ["omega"]], ["add", "theorem", "sat_empty", ["omega"]], ["add", "theorem", "sat_eq_elim", ["omega"]], ["add", "def", "sgm", ["omega"]], ["add", "def", "subst", ["omega"]], ["add", "theorem", "subst_correct", ["omega"]], ["add", "def", "sym_sym", ["omega"]], ["add", "def", "symdiv", ["omega"]], ["add", "def", "symmod", ["omega"]], ["add", "theorem", "symmod_add_one_self", ["omega"]], ["add", "theorem", "symmod_eq", ["omega"]], ["add", "theorem", "unsat_of_unsat_eq_elim", ["omega"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/find_ees.lean", "changes": [["add", "def", "gcd", ["omega"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/find_scalars.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/omega/int/dnf.lean", "changes": [["add", "theorem", "clauses_sat_dnf_core", ["omega", "int"]], ["add", "def", "dnf", ["omega", "int"]], ["add", "def", "dnf_core", ["omega", "int"]], ["add", "theorem", "exists_clause_holds", ["omega", "int"]], ["add", "theorem", "implies_neg_elim", ["omega", "int"]], ["add", "def", "is_nnf", ["omega", "int"]], ["add", "theorem", "is_nnf_nnf", ["omega", "int"]], ["add", "theorem", "is_nnf_push_neg", ["omega", "int"]], ["add", "theorem", "le_and_le_iff_eq", ["omega", "int"]], ["add", "def", "neg_elim", ["omega", "int"]], ["add", "def", "neg_free", ["omega", "int"]], ["add", "theorem", "neg_free_neg_elim", ["omega", "int"]], ["add", "def", "nnf", ["omega", "int"]], ["add", "theorem", "nnf_equiv", ["omega", "int"]], ["add", "def", "push_neg", ["omega", "int"]], ["add", "theorem", "push_neg_equiv", ["omega", "int"]], ["add", "theorem", "unsat_of_clauses_unsat", ["omega", "int"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/int/form.lean", "changes": [["add", "def", "equiv", ["omega", "int", "form"]], ["add", "def", "fresh_index", ["omega", "int", "form"]], ["add", "def", "holds", ["omega", "int", "form"]], ["add", "def", "implies", ["omega", "int", "form"]], ["add", "def", "repr", ["omega", "int", "form"]], ["add", "def", "sat", ["omega", "int", "form"]], ["add", "theorem", "sat_of_implies_of_sat", ["omega", "int", "form"]], ["add", "theorem", "sat_or", ["omega", "int", "form"]], ["add", "def", "unsat", ["omega", "int", "form"]], ["add", "def", "valid", ["omega", "int", "form"]], ["add", "inductive", "form", ["omega", "int"]], ["add", "def", "univ_close", ["omega", "int"]], ["add", "theorem", "univ_close_of_valid", ["omega", "int"]], ["add", "theorem", "valid_of_unsat_not", ["omega", "int"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/int/main.lean", "changes": [["add", "theorem", "univ_close_of_unsat_clausify", ["omega", "int"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/int/preterm.lean", "changes": [["add", "def", "canonize", ["omega", "int"]], ["add", "def", "add_one", ["omega", "int", "preterm"]], ["add", "def", "fresh_index", ["omega", "int", "preterm"]], ["add", "def", "repr", ["omega", "int", "preterm"]], ["add", "def", "val", ["omega", "int", "preterm"]], ["add", "inductive", "preterm", ["omega", "int"]], ["add", "theorem", "val_canonize", ["omega", "int"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/lin_comb.lean", "changes": [["add", "def", "lin_comb", ["omega"]], ["add", "theorem", "lin_comb_holds", ["omega"]], ["add", "def", "unsat_lin_comb", ["omega"]], ["add", "theorem", "unsat_lin_comb_of", ["omega"]], ["add", "theorem", "unsat_of_unsat_lin_comb", ["omega"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/main.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/omega/misc.lean", "changes": [["add", "theorem", "fun_mono_2", ["omega"]], ["add", "theorem", "pred_mono_2'", ["omega"]], ["add", "theorem", "pred_mono_2", ["omega"]], ["add", "def", "update", ["omega"]], ["add", "theorem", "update_eq", ["omega"]], ["add", "theorem", "update_eq_of_ne", ["omega"]], ["add", "def", "update_zero", ["omega"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/nat/dnf.lean", "changes": [["add", "def", "or", ["omega", "nat", "bools"]], ["add", "def", "dnf", ["omega", "nat"]], ["add", "def", "dnf_core", ["omega", "nat"]], ["add", "theorem", "exists_clause_holds", ["omega", "nat"]], ["add", "theorem", "exists_clause_holds_core", ["omega", "nat"]], ["add", "theorem", "exists_clause_sat", ["omega", "nat"]], ["add", "theorem", "holds_nonneg_consts", ["omega", "nat"]], ["add", "theorem", "holds_nonneg_consts_core", ["omega", "nat"]], ["add", "def", "nonneg_consts", ["omega", "nat"]], ["add", "def", "nonneg_consts_core", ["omega", "nat"]], ["add", "def", "nonnegate", ["omega", "nat"]], ["add", "def", "vars", ["omega", "nat", "term"]], ["add", "def", "vars_core", ["omega", "nat", "term"]], ["add", "def", "vars", ["omega", "nat", "terms"]], ["add", "theorem", "unsat_of_unsat_dnf", ["omega", "nat"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/nat/form.lean", "changes": [["add", "def", "equiv", ["omega", "nat", "form"]], ["add", "def", "fresh_index", ["omega", "nat", "form"]], ["add", "def", "holds", ["omega", "nat", "form"]], ["add", "def", "holds_constant", ["omega", "nat", "form"]], ["add", "def", "implies", ["omega", "nat", "form"]], ["add", "def", "neg_free", ["omega", "nat", "form"]], ["add", "def", "repr", ["omega", "nat", "form"]], ["add", "def", "sat", ["omega", "nat", "form"]], ["add", "theorem", "sat_of_implies_of_sat", ["omega", "nat", "form"]], ["add", "theorem", "sat_or", ["omega", "nat", "form"]], ["add", "def", "sub_free", ["omega", "nat", "form"]], ["add", "def", "unsat", ["omega", "nat", "form"]], ["add", "def", "valid", ["omega", "nat", "form"]], ["add", "inductive", "form", ["omega", "nat"]], ["add", "def", "univ_close", ["omega", "nat"]], ["add", "theorem", "univ_close_of_valid", ["omega", "nat"]], ["add", "theorem", "valid_of_unsat_not", ["omega", "nat"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/nat/main.lean", "changes": [["add", "theorem", "univ_close_of_unsat_neg_elim_not", ["omega", "nat"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/nat/neg_elim.lean", "changes": [["add", "theorem", "implies_neg_elim", ["omega", "nat"]], ["add", "theorem", "implies_neg_elim_core", ["omega", "nat"]], ["add", "def", "is_nnf", ["omega", "nat"]], ["add", "theorem", "is_nnf_nnf", ["omega", "nat"]], ["add", "theorem", "is_nnf_push_neg", ["omega", "nat"]], ["add", "theorem", "le_and_le_iff_eq", ["omega", "nat"]], ["add", "def", "neg_elim", ["omega", "nat"]], ["add", "def", "neg_elim_core", ["omega", "nat"]], ["add", "theorem", "neg_free_neg_elim", ["omega", "nat"]], ["add", "theorem", "neg_free_neg_elim_core", ["omega", "nat"]], ["add", "def", "nnf", ["omega", "nat"]], ["add", "theorem", "nnf_equiv", ["omega", "nat"]], ["add", "def", "push_neg", ["omega", "nat"]], ["add", "theorem", "push_neg_equiv", ["omega", "nat"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/nat/preterm.lean", "changes": [["add", "def", "canonize", ["omega", "nat"]], ["add", "def", "add_one", ["omega", "nat", "preterm"]], ["add", "def", "fresh_index", ["omega", "nat", "preterm"]], ["add", "def", "repr", ["omega", "nat", "preterm"]], ["add", "def", "sub_free", ["omega", "nat", "preterm"]], ["add", "def", "val", ["omega", "nat", "preterm"]], ["add", "theorem", "val_add", ["omega", "nat", "preterm"]], ["add", "theorem", "val_const", ["omega", "nat", "preterm"]], ["add", "def", "val_constant", ["omega", "nat", "preterm"]], ["add", "theorem", "val_sub", ["omega", "nat", "preterm"]], ["add", "theorem", "val_var", ["omega", "nat", "preterm"]], ["add", "inductive", "preterm", ["omega", "nat"]], ["add", "theorem", "val_canonize", ["omega", "nat"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/nat/sub_elim.lean", "changes": [["add", "def", "sub_subst", ["omega", "nat", "form"]], ["add", "def", "sub_terms", ["omega", "nat", "form"]], ["add", "theorem", "holds_is_diff", ["omega", "nat"]], ["add", "def", "is_diff", ["omega", "nat"]], ["add", "def", "sub_subst", ["omega", "nat", "preterm"]], ["add", "def", "sub_terms", ["omega", "nat", "preterm"]], ["add", "theorem", "val_sub_subst", ["omega", "nat", "preterm"]], ["add", "theorem", "sat_sub_elim", ["omega", "nat"]], ["add", "def", "sub_elim", ["omega", "nat"]], ["add", "def", "sub_elim_core", ["omega", "nat"]], ["add", "def", "sub_fresh_index", ["omega", "nat"]], ["add", "theorem", "sub_subst_equiv", ["omega", "nat"]], ["add", "theorem", "unsat_of_unsat_sub_elim", ["omega", "nat"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/prove_unsats.lean", "changes": [["add", "theorem", "forall_mem_repeat_zero_eq_zero", ["omega"]]]}, {"oldPath": null, "newPath": "src/tactic/omega/term.lean", "changes": [["add", "def", "add", ["omega", "term"]], ["add", "def", "div", ["omega", "term"]], ["add", "def", "fresh_index", ["omega", "term"]], ["add", "def", "mul", ["omega", "term"]], ["add", "def", "neg", ["omega", "term"]], ["add", "def", "sub", ["omega", "term"]], ["add", "def", "val", ["omega", "term"]], ["add", "theorem", "val_add", ["omega", "term"]], ["add", "theorem", "val_div", ["omega", "term"]], ["add", "theorem", "val_mul", ["omega", "term"]], ["add", "theorem", "val_neg", ["omega", "term"]], ["add", "theorem", "val_sub", ["omega", "term"]], ["add", "def", "term", ["omega"]], ["add", "def", "fresh_index", ["omega", "terms"]]]}, {"oldPath": null, "newPath": "test/omega.lean", "changes": []}]}, {"timestamp": 1555450698, "sha": "4b8106b3", "message": "fix(test/local_cache): make the trace text explicit and quiet (#941)\n(by default)", "changes": [{"oldPath": "test/local_cache.lean", "newPath": "test/local_cache.lean", "changes": [["add", "def", "do_trace", []]]}]}, {"timestamp": 1555445539, "sha": "7bbbee1e", "message": "feat(*): various additions to low-level files (#904)\n* feat(*): various additions to low-level files\n* fix(data/fin): add missing universe", "changes": [{"oldPath": "src/algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": [["add", "def", "lt_by_cases", ["decidable"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subtype_congr_right", ["equiv"]], ["add", "theorem", "subtype_congr_right_mk", ["equiv"]]]}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "def", "{u}", []]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_sub_cancel_right", ["nat"]]]}, {"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["add", "def", "coind", ["subtype"]], ["add", "theorem", "coind_injective", ["subtype"]], ["add", "theorem", "map_injective", ["subtype"]], ["add", "def", "restrict", ["subtype"]], ["add", "theorem", "restrict_apply", ["subtype"]], ["add", "theorem", "restrict_def", ["subtype"]], ["add", "theorem", "restrict_injective", ["subtype"]], ["mod", "theorem", "val_injective", ["subtype"]]]}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "congr_arg2", []]]}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "def", "bounded", []], ["add", "theorem", "trans_trichotomous_left", []], ["add", "theorem", "trans_trichotomous_right", []], ["add", "def", "unbounded", []]]}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["add", "theorem", "injective_of_increasing", []]]}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1555438216, "sha": "22948763", "message": "feat(data/finset): powerset_len (subsets of a given size) (#899)\n* feat(data/finset): powerset_len (subsets of a given size)\n* fix build", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card_powerset_len", ["finset"]], ["add", "theorem", "mem_powerset_len", ["finset"]], ["add", "def", "powerset_len", ["finset"]], ["add", "theorem", "powerset_len_mono", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "append_sublist_append", ["list"]], ["add", "theorem", "length_of_sublists_len", ["list"]], ["add", "theorem", "length_sublists_len", ["list"]], ["add", "theorem", "mem_sublists_len", ["list"]], ["add", "theorem", "mem_sublists_len_self", ["list"]], ["add", "theorem", "nodup_sublists_len", ["list"]], ["add", "def", "sublists_len", ["list"]], ["add", "def", "sublists_len_aux", ["list"]], ["add", "theorem", "sublists_len_aux_append", ["list"]], ["add", "theorem", "sublists_len_aux_eq", ["list"]], ["add", "theorem", "sublists_len_aux_zero", ["list"]], ["add", "theorem", "sublists_len_sublist_of_sublist", ["list"]], ["add", "theorem", "sublists_len_sublist_sublists'", ["list"]], ["add", "theorem", "sublists_len_succ_cons", ["list"]], ["add", "theorem", "sublists_len_succ_nil", ["list"]], ["add", "theorem", "sublists_len_zero", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "card_powerset_len", ["multiset"]], ["add", "theorem", "mem_powerset_len", ["multiset"]], ["add", "theorem", "mem_powerset_len_aux", ["multiset"]], ["add", "theorem", "nodup_powerset_len", ["multiset"]], ["add", "def", "powerset_len", ["multiset"]], ["add", "def", "powerset_len_aux", ["multiset"]], ["add", "theorem", "powerset_len_aux_cons", ["multiset"]], ["add", "theorem", "powerset_len_aux_eq_map_coe", ["multiset"]], ["add", "theorem", "powerset_len_aux_nil", ["multiset"]], ["add", "theorem", "powerset_len_aux_perm", ["multiset"]], ["add", "theorem", "powerset_len_aux_zero", ["multiset"]], ["add", "theorem", "powerset_len_coe'", ["multiset"]], ["add", "theorem", "powerset_len_coe", ["multiset"]], ["add", "theorem", "powerset_len_cons", ["multiset"]], ["add", "theorem", "powerset_len_le_powerset", ["multiset"]], ["add", "theorem", "powerset_len_mono", ["multiset"]], ["add", "theorem", "powerset_len_zero_left", ["multiset"]], ["add", "theorem", "powerset_len_zero_right", ["multiset"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "choose", ["nat"]], ["add", "theorem", "choose_eq_fact_div_fact", ["nat"]], ["add", "theorem", "choose_eq_zero_of_lt", ["nat"]], ["add", "theorem", "choose_mul_fact_mul_fact", ["nat"]], ["add", "theorem", "choose_one_right", ["nat"]], ["add", "theorem", "choose_pos", ["nat"]], ["add", "theorem", "choose_self", ["nat"]], ["add", "theorem", "choose_succ_self", ["nat"]], ["add", "theorem", "choose_succ_succ", ["nat"]], ["add", "theorem", "choose_zero_right", ["nat"]], ["add", "theorem", "choose_zero_succ", ["nat"]], ["add", "theorem", "fact_mul_fact_dvd_fact", ["nat"]], ["add", "theorem", "succ_mul_choose_eq", ["nat"]]]}, {"oldPath": "src/data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": [["del", "def", "choose", []], ["del", "theorem", "choose_eq_fact_div_fact", []], ["del", "theorem", "choose_eq_zero_of_lt", []], ["del", "theorem", "choose_mul_fact_mul_fact", []], ["del", "theorem", "choose_one_right", []], ["del", "theorem", "choose_pos", []], ["del", "theorem", "choose_self", []], ["del", "theorem", "choose_succ_self", []], ["del", "theorem", "choose_succ_succ", []], ["del", "theorem", "choose_zero_right", []], ["del", "theorem", "choose_zero_succ", []], ["del", "theorem", "fact_mul_fact_dvd_fact", []], ["del", "theorem", "succ_mul_choose_eq", []]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}]}, {"timestamp": 1555432372, "sha": "8985a433", "message": "feat(data/set/intervals): some interval lemmas (#942)\n* feat(data/set/intervals): a few more lemmas\n* one-liners", "changes": [{"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": [["add", "theorem", "Ioc_self", ["set"]], ["add", "theorem", "Ioc_subset_Ioc", ["set"]], ["add", "theorem", "Ioc_subset_Ioc_left", ["set"]], ["add", "theorem", "Ioc_subset_Ioc_right", ["set"]], ["add", "theorem", "left_mem_Icc", ["set"]], ["add", "theorem", "left_mem_Ico", ["set"]], ["add", "theorem", "left_mem_Ioc", ["set"]], ["add", "theorem", "left_mem_Ioo", ["set"]], ["add", "theorem", "right_mem_Icc", ["set"]], ["add", "theorem", "right_mem_Ico", ["set"]], ["add", "theorem", "right_mem_Ioc", ["set"]], ["add", "theorem", "right_mem_Ioo", ["set"]]]}]}, {"timestamp": 1555399172, "sha": "361e2163", "message": "feature(category_theory/instances/Top/open[_nhds]): category of open sets, and open neighbourhoods of a point (merge #920 first) (#922)\n* rearrange Top\n* oops, import from the future\n* the categories of open sets and of open_nhds\n* missing import\n* restoring opens, adding headers\n* Update src/category_theory/instances/Top/open_nhds.lean\nCo-Authored-By: semorrison \n* use full_subcategory_inclusion", "changes": [{"oldPath": null, "newPath": "src/category_theory/instances/Top/adjunctions.lean", "changes": [["add", "def", "adj₁", ["category_theory", "instances", "Top"]], ["add", "def", "adj₂", ["category_theory", "instances", "Top"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/basic.lean", "changes": [["add", "def", "discrete", ["category_theory", "instances", "Top"]], ["add", "def", "trivial", ["category_theory", "instances", "Top"]], ["add", "def", "Top", ["category_theory", "instances"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/limits.lean", "changes": [["add", "def", "colimit", ["category_theory", "instances", "Top"]], ["add", "def", "colimit_is_colimit", ["category_theory", "instances", "Top"]], ["add", "def", "limit", ["category_theory", "instances", "Top"]], ["add", "def", "limit_is_limit", ["category_theory", "instances", "Top"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/open_nhds.lean", "changes": [["add", "def", "inclusion", ["topological_space", "open_nhds"]], ["add", "def", "inclusion_map_iso", ["topological_space", "open_nhds"]], ["add", "theorem", "inclusion_map_iso_hom", ["topological_space", "open_nhds"]], ["add", "theorem", "inclusion_map_iso_inv", ["topological_space", "open_nhds"]], ["add", "theorem", "inclusion_obj", ["topological_space", "open_nhds"]], ["add", "def", "map", ["topological_space", "open_nhds"]], ["add", "theorem", "map_id_obj'", ["topological_space", "open_nhds"]], ["add", "theorem", "map_id_obj", ["topological_space", "open_nhds"]], ["add", "theorem", "map_id_obj_unop", ["topological_space", "open_nhds"]], ["add", "theorem", "op_map_id_obj", ["topological_space", "open_nhds"]], ["add", "def", "open_nhds", ["topological_space", "open_nhds"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/Top/opens.lean", "changes": [["add", "def", "map", ["topological_space", "opens"]], ["add", "def", "map_comp", ["topological_space", "opens"]], ["add", "theorem", "map_comp_hom_app", ["topological_space", "opens"]], ["add", "theorem", "map_comp_inv_app", ["topological_space", "opens"]], ["add", "theorem", "map_comp_obj'", ["topological_space", "opens"]], ["add", "theorem", "map_comp_obj", ["topological_space", "opens"]], ["add", "theorem", "map_comp_obj_unop", ["topological_space", "opens"]], ["add", "def", "map_id", ["topological_space", "opens"]], ["add", "theorem", "map_id_hom_app", ["topological_space", "opens"]], ["add", "theorem", "map_id_inv_app", ["topological_space", "opens"]], ["add", "theorem", "map_id_obj'", ["topological_space", "opens"]], ["add", "theorem", "map_id_obj", ["topological_space", "opens"]], ["add", "theorem", "map_id_obj_unop", ["topological_space", "opens"]], ["add", "def", "map_iso", ["topological_space", "opens"]], ["add", "theorem", "map_iso_hom_app", ["topological_space", "opens"]], ["add", "theorem", "map_iso_inv_app", ["topological_space", "opens"]], ["add", "theorem", "map_iso_refl", ["topological_space", "opens"]], ["add", "theorem", "op_map_comp_obj", ["topological_space", "opens"]], ["add", "theorem", "op_map_id_obj", ["topological_space", "opens"]]]}, {"oldPath": "src/category_theory/instances/measurable_space.lean", "newPath": "src/category_theory/instances/measurable_space.lean", "changes": []}, {"oldPath": "src/category_theory/instances/topological_spaces.lean", "newPath": null, "changes": [["del", "def", "adj₁", ["category_theory", "instances", "Top"]], ["del", "def", "adj₂", ["category_theory", "instances", "Top"]], ["del", "def", "colimit", ["category_theory", "instances", "Top"]], ["del", "def", "colimit_is_colimit", ["category_theory", "instances", "Top"]], ["del", "def", "discrete", ["category_theory", "instances", "Top"]], ["del", "def", "limit", ["category_theory", "instances", "Top"]], ["del", "def", "limit_is_limit", ["category_theory", "instances", "Top"]], ["del", "def", "trivial", ["category_theory", "instances", "Top"]], ["del", "def", "Top", ["category_theory", "instances"]], ["del", "def", "nbhd", ["category_theory", "instances"]], ["del", "def", "nbhds", ["category_theory", "instances"]], ["del", "def", "map", ["topological_space", "opens"]], ["del", "def", "map_id", ["topological_space", "opens"]], ["del", "theorem", "map_id_obj", ["topological_space", "opens"]], ["del", "def", "map_iso", ["topological_space", "opens"]], ["del", "def", "map_iso_id", ["topological_space", "opens"]]]}]}, {"timestamp": 1555357300, "sha": "5f04e76e", "message": "feat(nat/basic): add some basic nat inequality lemmas (#937)\n* feat(nat/basic): add some basic nat inequality lemmas, useful as specific cases of existing ring cases since uses less hypothesis\n* feat(nat/basic): add some basic nat inequality lemmas, with convention fixes\n* feat(nat/basic): add some basic nat inequality lemmas, with convention fixes", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_mul_of_pos_left", ["nat"]], ["add", "theorem", "le_mul_of_pos_right", ["nat"]], ["add", "theorem", "lt_of_div_lt_div", ["nat"]]]}]}, {"timestamp": 1555355387, "sha": "d06eb858", "message": "feat(topology/algebra/continuous_functions): the ring of continuous functions (#923)\n* feat(topology/algebra/continuous_functions): the ring of continuous functions\n* filling in the hierarchy\n* use to_additive", "changes": [{"oldPath": null, "newPath": "src/topology/algebra/continuous_functions.lean", "changes": []}]}, {"timestamp": 1555269996, "sha": "ca5d4c1f", "message": "feat(scripts): disable testing the install scripts in external PRs (#936)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1555254988, "sha": "a1b7dcdf", "message": "fix(algebra/big_operators): change variables in finset.prod_map to remove spurious [comm_monoid β] (#934)\nThe old version involved maps α → β → γ and an instance [comm_monoid γ], but there was also a section variable [comm_monoid β]. In applications of this lemma it is not necessary, and not usually true, that β is a monoid. Change the statement to involve maps α → γ → β so that we already have a monoid structure on the last variable and we do not make spurious assumptions about the second one.", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_map", ["finset"]]]}]}, {"timestamp": 1555192601, "sha": "f01934c6", "message": "docs(elan): remove reference to nightly Lean (#928)\n* docs(elan): Remove reference to nightly Lean.", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1555182836, "sha": "49c3a049", "message": "fix(algebra.field): introduce division_ring_has_div' (#852)\n* fix division_ring_has_div\n* priority default\n* comment", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}]}, {"timestamp": 1555073954, "sha": "3fe449e1", "message": "feat(algebra/free): free magma, semigroup, monoid (#735)", "changes": [{"oldPath": null, "newPath": "src/algebra/free.lean", "changes": [["add", "def", "length", ["free_magma"]], ["add", "def", "lift", ["free_magma"]], ["add", "theorem", "lift_mul", ["free_magma"]], ["add", "theorem", "lift_of", ["free_magma"]], ["add", "theorem", "lift_unique", ["free_magma"]], ["add", "def", "map", ["free_magma"]], ["add", "theorem", "map_mul'", ["free_magma"]], ["add", "theorem", "map_mul", ["free_magma"]], ["add", "theorem", "map_of", ["free_magma"]], ["add", "theorem", "map_pure", ["free_magma"]], ["add", "theorem", "mul_bind", ["free_magma"]], ["add", "theorem", "mul_map_seq", ["free_magma"]], ["add", "theorem", "mul_seq", ["free_magma"]], ["add", "theorem", "pure_bind", ["free_magma"]], ["add", "theorem", "pure_seq", ["free_magma"]], ["add", "def", "repr'", ["free_magma"]], ["add", "theorem", "traverse_eq", ["free_magma"]], ["add", "theorem", "traverse_mul'", ["free_magma"]], ["add", "theorem", "traverse_mul", ["free_magma"]], ["add", "theorem", "traverse_pure'", ["free_magma"]], ["add", "theorem", "traverse_pure", ["free_magma"]], ["add", "inductive", "free_magma", []], ["add", "def", "lift'", ["free_semigroup"]], ["add", "def", "lift", ["free_semigroup"]], ["add", "theorem", "lift_mul", ["free_semigroup"]], ["add", "theorem", "lift_of", ["free_semigroup"]], ["add", "theorem", "lift_of_mul", ["free_semigroup"]], ["add", "theorem", "lift_unique", ["free_semigroup"]], ["add", "def", "map", ["free_semigroup"]], ["add", "theorem", "map_mul'", ["free_semigroup"]], ["add", "theorem", "map_mul", ["free_semigroup"]], ["add", "theorem", "map_of", ["free_semigroup"]], ["add", "theorem", "map_pure", ["free_semigroup"]], ["add", "theorem", "mul_bind", ["free_semigroup"]], ["add", "theorem", "mul_map_seq", ["free_semigroup"]], ["add", "theorem", "mul_seq", ["free_semigroup"]], ["add", "def", "of", ["free_semigroup"]], ["add", "theorem", "pure_bind", ["free_semigroup"]], ["add", "theorem", "pure_seq", ["free_semigroup"]], ["add", "def", "traverse'", ["free_semigroup"]], ["add", "theorem", "traverse_eq", ["free_semigroup"]], ["add", "theorem", "traverse_mul'", ["free_semigroup"]], ["add", "theorem", "traverse_mul", ["free_semigroup"]], ["add", "theorem", "traverse_pure'", ["free_semigroup"]], ["add", "theorem", "traverse_pure", ["free_semigroup"]], ["add", "def", "free_semigroup", []], ["add", "def", "free_semigroup_free_magma", []], ["add", "theorem", "free_semigroup_free_magma_mul", []], ["add", "def", "lift", ["magma", "free_semigroup"]], ["add", "theorem", "lift_mul", ["magma", "free_semigroup"]], ["add", "theorem", "lift_of", ["magma", "free_semigroup"]], ["add", "theorem", "lift_unique", ["magma", "free_semigroup"]], ["add", "def", "map", ["magma", "free_semigroup"]], ["add", "theorem", "map_mul", ["magma", "free_semigroup"]], ["add", "theorem", "map_of", ["magma", "free_semigroup"]], ["add", "def", "of", ["magma", "free_semigroup"]], ["add", "theorem", "of_mul", ["magma", "free_semigroup"]], ["add", "theorem", "of_mul_assoc", ["magma", "free_semigroup"]], ["add", "theorem", "of_mul_assoc_left", ["magma", "free_semigroup"]], ["add", "theorem", "of_mul_assoc_right", ["magma", "free_semigroup"]], ["add", "inductive", "r", ["magma", "free_semigroup"]], ["add", "def", "free_semigroup", ["magma"]], ["add", "def", "lift", ["semigroup", "free_monoid"]], ["add", "theorem", "lift_mul", ["semigroup", "free_monoid"]], ["add", "theorem", "lift_of", ["semigroup", "free_monoid"]], ["add", "theorem", "lift_one", ["semigroup", "free_monoid"]], ["add", "theorem", "lift_unique", ["semigroup", "free_monoid"]], ["add", "def", "map", ["semigroup", "free_monoid"]], ["add", "theorem", "map_mul", ["semigroup", "free_monoid"]], ["add", "theorem", "map_of", ["semigroup", "free_monoid"]], ["add", "def", "of", ["semigroup", "free_monoid"]], ["add", "theorem", "of_mul", ["semigroup", "free_monoid"]], ["add", "def", "free_monoid", ["semigroup"]]]}]}, {"timestamp": 1555009739, "sha": "be79f25b", "message": "refactor(data/int/basic): weaken hypotheses for int.induction_on (#887)\n* refactor(data/int/basic): weaken hypotheses for int.induction_on\n* fix build\n* fix build", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1554991860, "sha": "36f0c224", "message": "feat(submonoid, subgroup, subring): is_ring_hom instances for set.inclusion (#917)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1554955878, "sha": "c1e07a2e", "message": "fix(tactic/explode): more accurate may_be_proof (#924)", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}]}, {"timestamp": 1554943817, "sha": "22fcb4e9", "message": "minor changes (#921)", "changes": [{"oldPath": "src/category_theory/concrete_category.lean", "newPath": "src/category_theory/concrete_category.lean", "changes": [["add", "theorem", "coe_id", ["category_theory", "bundled"]]]}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": [["add", "theorem", "eq_to_hom_op", ["category_theory"]]]}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "hom_inv_id_app", ["category_theory", "nat_iso"]], ["add", "theorem", "inv_hom_id_app", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "op_id_unop", ["category_theory"]], ["add", "theorem", "unop_id_op", ["category_theory"]]]}]}, {"timestamp": 1554918567, "sha": "f5d43a95", "message": "feat(analysis/normed_space/deriv): show that the differential is unique (2) (#916)\n* Remove wrong simp attribute\n* fix typo\n* characterize convergence at_top in normed spaces\n* copy some changes from #829\n* small elements in normed fields go to zero\n* derivatives are unique\n* remove unnecessary lemma\n* update according to review\n* remove another empty line", "changes": [{"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["add", "theorem", "fderiv_at_filter_unique", []], ["add", "theorem", "fderiv_at_unique", []], ["add", "theorem", "fderiv_at_within_open_unique", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1_normed_field", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "nhds_within_eq_of_open", []], ["del", "theorem", "nhs_within_eq_of_open", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["mod", "theorem", "seq_tendsto_iff", ["topological_space"]]]}]}, {"timestamp": 1554916480, "sha": "41014e50", "message": "rename has_sum and is_sum to summable and has_sum (#912)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "has_sum_iff_vanishing_norm", []], ["del", "theorem", "has_sum_of_has_sum_norm", []], ["del", "theorem", "has_sum_of_norm_bounded", []], ["mod", "theorem", "norm_tsum_le_tsum_norm", []], ["add", "theorem", "summable_iff_vanishing_norm", []], ["add", "theorem", "summable_of_norm_bounded", []], ["add", "theorem", "summable_of_summable_norm", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "has_sum_geometric", []], ["add", "theorem", "has_sum_geometric_two", []], ["del", "theorem", "has_sum_of_absolute_convergence_real", []], ["del", "theorem", "is_sum_geometric", []], ["del", "theorem", "is_sum_geometric_two", []], ["add", "theorem", "summable_of_absolute_convergence_real", []]]}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["del", "theorem", "has_sum_coe", ["pmf"]], ["add", "theorem", "has_sum_coe_one", ["pmf"]], ["del", "theorem", "is_sum_coe_one", ["pmf"]], ["mod", "def", "pure", ["pmf"]], ["add", "theorem", "summable_coe", ["pmf"]], ["mod", "theorem", "tsum_coe", ["pmf"]], ["mod", "def", "{u}", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["del", "theorem", "cauchy_seq_of_has_sum_dist", []], ["add", "theorem", "cauchy_seq_of_summable_dist", []], ["mod", "def", "has_sum", []], ["mod", "theorem", "has_sum_add", []], ["del", "theorem", "has_sum_comp_of_has_sum_of_injective", []], ["add", "theorem", "has_sum_hom", []], ["del", "theorem", "has_sum_iff_cauchy", []], ["add", "theorem", "has_sum_iff_has_sum", []], ["del", "theorem", "has_sum_iff_has_sum_ne_zero", []], ["del", "theorem", "has_sum_iff_has_sum_ne_zero_bij", []], ["add", "theorem", "has_sum_iff_has_sum_of_iso", []], ["add", "theorem", "has_sum_iff_has_sum_of_ne_zero", []], ["add", "theorem", "has_sum_iff_has_sum_of_ne_zero_bij", []], ["add", "theorem", "has_sum_iff_of_summable", []], ["del", "theorem", "has_sum_iff_vanishing", []], ["add", "theorem", "has_sum_ite_eq", []], ["add", "theorem", "has_sum_le", []], ["add", "theorem", "has_sum_le_inj", []], ["mod", "theorem", "has_sum_mul_left", []], ["mod", "theorem", "has_sum_mul_right", []], ["mod", "theorem", "has_sum_neg", []], ["add", "theorem", "has_sum_of_has_sum", []], ["add", "theorem", "has_sum_of_has_sum_ne_zero", []], ["del", "theorem", "has_sum_of_has_sum_of_sub", []], ["add", "theorem", "has_sum_of_iso", []], ["mod", "theorem", "has_sum_sigma", []], ["del", "theorem", "has_sum_spec", []], ["mod", "theorem", "has_sum_sub", []], ["mod", "theorem", "has_sum_sum", []], ["mod", "theorem", "has_sum_sum_of_ne_finset_zero", []], ["add", "theorem", "has_sum_tsum", []], ["add", "theorem", "has_sum_unique", []], ["mod", "theorem", "has_sum_zero", []], ["del", "def", "is_sum", []], ["del", "theorem", "is_sum_add", []], ["del", "theorem", "is_sum_hom", []], ["del", "theorem", "is_sum_iff_is_sum", []], ["del", "theorem", "is_sum_iff_is_sum_of_iso", []], ["del", "theorem", "is_sum_iff_is_sum_of_ne_zero", []], ["del", "theorem", "is_sum_iff_is_sum_of_ne_zero_bij", []], ["del", "theorem", "is_sum_iff_of_has_sum", []], ["del", "theorem", "is_sum_ite_eq", []], ["del", "theorem", "is_sum_le", []], ["del", "theorem", "is_sum_le_inj", []], ["del", "theorem", "is_sum_mul_left", []], ["del", "theorem", "is_sum_mul_right", []], ["del", "theorem", "is_sum_neg", []], ["del", "theorem", "is_sum_of_is_sum", []], ["del", "theorem", "is_sum_of_is_sum_ne_zero", []], ["del", "theorem", "is_sum_of_iso", []], ["del", "theorem", "is_sum_sigma", []], ["del", "theorem", "is_sum_sub", []], ["del", "theorem", "is_sum_sum", []], ["del", "theorem", "is_sum_sum_of_ne_finset_zero", []], ["del", "theorem", "is_sum_tsum", []], ["del", "theorem", "is_sum_unique", []], ["del", "theorem", "is_sum_zero", []], ["add", "def", "summable", []], ["add", "theorem", "summable_add", []], ["add", "theorem", "summable_comp_of_summable_of_injective", []], ["add", "theorem", "summable_iff_cauchy", []], ["add", "theorem", "summable_iff_summable_ne_zero", []], ["add", "theorem", "summable_iff_summable_ne_zero_bij", []], ["add", "theorem", "summable_iff_vanishing", []], ["add", "theorem", "summable_mul_left", []], ["add", "theorem", "summable_mul_right", []], ["add", "theorem", "summable_neg", []], ["add", "theorem", "summable_of_summable_of_sub", []], ["add", "theorem", "summable_sigma", []], ["add", "theorem", "summable_spec", []], ["add", "theorem", "summable_sub", []], ["add", "theorem", "summable_sum", []], ["add", "theorem", "summable_sum_of_ne_finset_zero", []], ["add", "theorem", "summable_zero", []], ["add", "theorem", "tendsto_sum_nat_of_has_sum", []], ["del", "theorem", "tendsto_sum_nat_of_is_sum", []], ["mod", "def", "tsum", []], ["mod", "theorem", "tsum_add", []], ["add", "theorem", "tsum_eq_has_sum", []], ["del", "theorem", "tsum_eq_is_sum", []], ["add", "theorem", "tsum_eq_tsum_of_has_sum_iff_has_sum", []], ["del", "theorem", "tsum_eq_tsum_of_is_sum_iff_is_sum", []], ["mod", "theorem", "tsum_le_tsum", []], ["mod", "theorem", "tsum_mul_left", []], ["mod", "theorem", "tsum_mul_right", []], ["mod", "theorem", "tsum_neg", []], ["mod", "theorem", "tsum_sub", []], ["mod", "theorem", "tsum_sum", []], ["mod", "theorem", "tsum_zero", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "has_sum_iff_tendsto_nat", ["ennreal"]], ["del", "theorem", "is_sum_iff_tendsto_nat", ["ennreal"]], ["add", "theorem", "has_sum_iff_tendsto_nat_of_nonneg", []], ["del", "theorem", "has_sum_of_nonneg_of_le", []], ["del", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []], ["add", "theorem", "exists_le_has_sum_of_le", ["nnreal"]], ["del", "theorem", "exists_le_is_sum_of_le", ["nnreal"]], ["add", "theorem", "has_sum_iff_tendsto_nat", ["nnreal"]], ["del", "theorem", "has_sum_of_le", ["nnreal"]], ["del", "theorem", "is_sum_iff_tendsto_nat", ["nnreal"]], ["add", "theorem", "summable_of_le", ["nnreal"]], ["add", "theorem", "summable_of_nonneg_of_le", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": [["mod", "theorem", "has_sum_coe", ["nnreal"]], ["del", "theorem", "is_sum_coe", ["nnreal"]], ["add", "theorem", "summable_coe", ["nnreal"]], ["mod", "theorem", "tsum_coe", ["nnreal"]]]}]}, {"timestamp": 1554913443, "sha": "c4b65da1", "message": "fix(mergify): merge if either push or pr build passes. (#918)\n* fix(mergify): merge if either push or pr build passes.\n* Update .mergify.yml\n* Update .mergify.yml", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554889501, "sha": "49ccc9f7", "message": "refactor(order/lexicographic): use prod.lex and psigma.lex (#914)\n* refactor(order/lexicographic): use prod.lex and psigma.lex\n* update", "changes": [{"oldPath": "src/order/lexicographic.lean", "newPath": "src/order/lexicographic.lean", "changes": []}]}, {"timestamp": 1554880623, "sha": "89924726", "message": "fix(category_theory): make the `nat_trans` arrow `⟹` a synonym for the `hom` arrow (#907)\n* removing the nat_trans and vcomp notations; use \\hom and \\gg\n* a simpler proposal\n* getting rid of vcomp\n* fix\n* update notations in documentation\n* typo in docs", "changes": [{"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}, {"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "def", "map_left", ["category_theory", "comma"]], ["mod", "def", "map_left_comp", ["category_theory", "comma"]], ["mod", "def", "map_right", ["category_theory", "comma"]], ["mod", "def", "map_right_comp", ["category_theory", "comma"]], ["mod", "def", "nat_trans", ["category_theory", "comma"]]]}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": [["mod", "theorem", "id_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "app_naturality", ["category_theory", "functor", "category", "nat_trans"]], ["mod", "theorem", "naturality_app", ["category_theory", "functor", "category", "nat_trans"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "theorem", "cocones_obj", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "def", "hom_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "hom_iso", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": [["mod", "theorem", "types_colimit_map", ["category_theory", "limits", "types"]], ["mod", "theorem", "types_limit_map", ["category_theory", "limits", "types"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": [["del", "theorem", "hom_vcomp_inv", ["category_theory", "nat_iso"]], ["del", "theorem", "inv_vcomp_hom", ["category_theory", "nat_iso"]]]}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["mod", "theorem", "congr_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "exchange", ["category_theory", "nat_trans"]], ["mod", "theorem", "ext", ["category_theory", "nat_trans"]], ["mod", "def", "hcomp", ["category_theory", "nat_trans"]], ["mod", "theorem", "hcomp_app", ["category_theory", "nat_trans"]], ["mod", "def", "vcomp", ["category_theory", "nat_trans"]], ["mod", "theorem", "vcomp_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "vcomp_assoc", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/products.lean", "newPath": "src/category_theory/products.lean", "changes": [["mod", "def", "prod", ["category_theory", "nat_trans"]], ["mod", "theorem", "prod_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "theorem", "comp", ["category_theory", "functor_to_types"]], ["del", "theorem", "vcomp", ["category_theory", "functor_to_types"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": [["mod", "theorem", "app", ["category_theory", "whisker_left"]], ["mod", "def", "whisker_left", ["category_theory"]], ["add", "theorem", "whisker_left_comp", ["category_theory"]], ["mod", "theorem", "whisker_left_twice", ["category_theory"]], ["del", "theorem", "whisker_left_vcomp", ["category_theory"]], ["mod", "theorem", "app", ["category_theory", "whisker_right"]], ["mod", "def", "whisker_right", ["category_theory"]], ["add", "theorem", "whisker_right_comp", ["category_theory"]], ["mod", "theorem", "whisker_right_left", ["category_theory"]], ["mod", "theorem", "whisker_right_twice", ["category_theory"]], ["del", "theorem", "whisker_right_vcomp", ["category_theory"]], ["mod", "theorem", "whiskering_left_map_app_app", ["category_theory"]], ["mod", "theorem", "whiskering_left_obj_map", ["category_theory"]], ["mod", "theorem", "whiskering_right_map_app_app", ["category_theory"]], ["mod", "theorem", "whiskering_right_obj_map", ["category_theory"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["mod", "def", "yoneda_sections", ["category_theory"]], ["mod", "def", "yoneda_sections_small", ["category_theory"]]]}]}, {"timestamp": 1554878896, "sha": "f04535de", "message": "feat(category_theory): iso_whisker_(left|right) (#908)\n* feat(category_theory): iso_whisker_(left|right)\n* oops, use old notation for now\n* update after merge", "changes": [{"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": [["add", "def", "iso_whisker_left", ["category_theory"]], ["add", "theorem", "iso_whisker_left_hom", ["category_theory"]], ["add", "theorem", "iso_whisker_left_inv", ["category_theory"]], ["add", "def", "iso_whisker_right", ["category_theory"]], ["add", "theorem", "iso_whisker_right_hom", ["category_theory"]], ["add", "theorem", "iso_whisker_right_inv", ["category_theory"]]]}]}, {"timestamp": 1554862138, "sha": "86bd577c", "message": "refactor(algebra/group): is_monoid_hom extends is_mul_hom (#915)\n* refactor(algebra/group): is_monoid_hom extends is_mul_hom\n* Fix build", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "map_add", ["is_add_monoid_hom"]], ["add", "theorem", "map_mul", ["is_monoid_hom"]]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/algebra/punit_instances.lean", "newPath": "src/algebra/punit_instances.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/category/fold.lean", "newPath": "src/category/fold.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1554856805, "sha": "f1683a9e", "message": "feat(data/set/basic): inclusion map (#906)\n* feat(data/set/basic): inclusion map\n* add continuous_inclusion\n* minor style change", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "def", "inclusion", ["set"]], ["add", "theorem", "inclusion_inclusion", ["set"]], ["add", "theorem", "inclusion_injective", ["set"]], ["add", "theorem", "inclusion_self", ["set"]]]}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["add", "theorem", "continuous_inclusion", []]]}]}, {"timestamp": 1554855177, "sha": "96d748eb", "message": "refactor(category_theory): rename `functor.on_iso` to `functor.map_iso` (#893)\n* feat(category_theory): functor.map_nat_iso\n* define `functor.map_nat_iso`, and relate to whiskering\n* rename `functor.on_iso` to `functor.map_iso`\n* add some missing lemmas about whiskering\n* some more missing whiskering lemmas, while we're at it\n* removing map_nat_iso", "changes": [{"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "def", "map_iso", ["category_theory", "functor"]], ["add", "theorem", "map_iso_hom", ["category_theory", "functor"]], ["add", "theorem", "map_iso_inv", ["category_theory", "functor"]], ["del", "def", "on_iso", ["category_theory", "functor"]], ["del", "theorem", "on_iso_hom", ["category_theory", "functor"]], ["del", "theorem", "on_iso_inv", ["category_theory", "functor"]], ["add", "theorem", "symm_mk", ["category_theory", "iso"]], ["add", "theorem", "trans_mk", ["category_theory", "iso"]]]}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": [["add", "theorem", "whisker_left_id'", ["category_theory"]], ["add", "theorem", "whisker_right_id'", ["category_theory"]], ["add", "theorem", "whiskering_left_map_app_app", ["category_theory"]], ["add", "theorem", "whiskering_left_obj_map", ["category_theory"]], ["add", "theorem", "whiskering_left_obj_obj", ["category_theory"]], ["add", "theorem", "whiskering_right_map_app_app", ["category_theory"]], ["add", "theorem", "whiskering_right_obj_map", ["category_theory"]], ["add", "theorem", "whiskering_right_obj_obj", ["category_theory"]]]}]}, {"timestamp": 1554849844, "sha": "d692499e", "message": "reorganising category_theory/instances/rings.lean (#909)", "changes": [{"oldPath": null, "newPath": "src/category_theory/instances/CommRing/adjunctions.lean", "changes": [["add", "theorem", "polynomial_ring_map_val", ["category_theory", "instances", "CommRing"]], ["add", "theorem", "polynomial_ring_obj_α", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": "src/category_theory/instances/rings.lean", "newPath": "src/category_theory/instances/CommRing/basic.lean", "changes": [["del", "theorem", "polynomial_map_val", ["category_theory", "instances", "CommRing"]], ["del", "theorem", "polynomial_obj_α", ["category_theory", "instances", "CommRing"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/CommRing/default.lean", "changes": []}]}, {"timestamp": 1554839168, "sha": "4494001d", "message": "feat(field_theory/subfield): subfields are fields (#888)\n* feat(field_theory/subfield): subfield are fields\n* Update subfield.lean", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}]}, {"timestamp": 1554817106, "sha": "5c4f5f20", "message": "chore(build): allow PRs from separate repos to test deployment scripts", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "appveyor.yml", "newPath": "appveyor.yml", "changes": []}]}, {"timestamp": 1554805001, "sha": "c2d79f85", "message": "fix(mergify): require travis \"push\" check to push (#913)\nThis hopefully fixes an error where mergify does not merge a PR is the \"pr\" build succeeds before the \"push\" build. In these situations mergify does not merge, because the branch protection settings require both builds to pass.\nUnfortunately, there doesn't seem to be an option to change the branch protection settings to only require the \"pr\" build to pass", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554817854, "sha": "66a86ffe", "message": "refactor(*): rename is_group_hom.mul to map_mul (#911)\n* refactor(*): rename is_group_hom.mul to map_mul\n* Fix splits_mul", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "map_prod", ["is_group_anti_hom"]], ["del", "theorem", "prod", ["is_group_anti_hom"]], ["add", "theorem", "map_multiset_prod", ["is_group_hom"]], ["add", "theorem", "map_prod", ["is_group_hom"]], ["del", "theorem", "multiset_prod", ["is_group_hom"]], ["del", "theorem", "prod", ["is_group_hom"]]]}, {"oldPath": "src/algebra/direct_sum.lean", "newPath": "src/algebra/direct_sum.lean", "changes": []}, {"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "map_sub", ["is_add_group_hom"]], ["mod", "theorem", "sub", ["is_add_group_hom"]], ["del", "theorem", "is_add_group_hom_sub", []], ["del", "theorem", "inv", ["is_group_anti_hom"]], ["add", "theorem", "map_inv", ["is_group_anti_hom"]], ["add", "theorem", "map_one", ["is_group_anti_hom"]], ["del", "theorem", "one", ["is_group_anti_hom"]], ["mod", "theorem", "inv", ["is_group_hom"]], ["add", "theorem", "map_inv", ["is_group_hom"]], ["add", "theorem", "map_one", ["is_group_hom"]], ["add", "theorem", "mul", ["is_group_hom"]], ["del", "theorem", "one", ["is_group_hom"]], ["del", "theorem", "is_group_hom_inv", []], ["del", "theorem", "is_group_hom_mul", []]]}, {"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["mod", "theorem", "gsmul", ["is_add_group_hom"]], ["add", "theorem", "map_gsmul", ["is_add_group_hom"]], ["add", "theorem", "map_smul", ["is_add_group_hom"]], ["del", "theorem", "smul", ["is_add_group_hom"]], ["del", "theorem", "is_add_group_hom_gsmul", []], ["del", "theorem", "gpow", ["is_group_hom"]], ["add", "theorem", "map_gpow", ["is_group_hom"]], ["add", "theorem", "map_pow", ["is_group_hom"]], ["del", "theorem", "pow", ["is_group_hom"]]]}, {"oldPath": "src/analysis/complex/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": [["mod", "theorem", "coe_gsmul", ["real", "angle"]]]}, {"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/topology/algebra/group_completion.lean", "newPath": "src/topology/algebra/group_completion.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_ring.lean", "newPath": "src/topology/algebra/uniform_ring.lean", "changes": []}]}, {"timestamp": 1554784075, "sha": "eb024dc8", "message": "feat(order/lexicographic): lexicographic pre/partial/linear orders (#820)\n* remove prod.(*)order instances\n* feat(order/lexicographic): lexicographic pre/partial/linear orders\n* add lex_decidable_linear_order\n* identical constructions for dependent pairs\n* cleaning up\n* Update lexicographic.lean\nforgotten `instance`\n* restore product instances, and add lex type synonym for lexicographic instances\n* proofs in progress\n* * define lt\n* prove lt_iff_le_not_le\n* refactoring", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/lexicographic.lean", "changes": [["add", "def", "lex", []]]}]}, {"timestamp": 1554762336, "sha": "29507a4b", "message": "feat(group_theory/subgroup): subtype.add_comm_group (#903)", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1554743481, "sha": "ec51b6e1", "message": "feat(category_theory/colimits): missing simp lemmas (#894)", "changes": [{"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "theorem", "ι_map_assoc", ["category_theory", "limits", "colim"]], ["add", "theorem", "ι_desc_assoc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "ι_post_assoc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "ι_pre_assoc", ["category_theory", "limits", "colimit"]]]}]}, {"timestamp": 1554745791, "sha": "6d2cf4ae", "message": "fix(doc/extra/tactic_writing): rename mul_left (#902) [ci skip]\n* fix(doc/extra/tactic_writing): rename mul_left\n* one more fix", "changes": [{"oldPath": "docs/extras/tactic_writing.md", "newPath": "docs/extras/tactic_writing.md", "changes": []}]}, {"timestamp": 1554727822, "sha": "5f1329a2", "message": "feat(linear_algebra/dual): add dual vector spaces (#881)\n* feat(linear_algebra/dual): add dual vector spaces\nDefine dual modules and vector spaces and prove the basic theorems: the dual basis isomorphism and\nevaluation isomorphism in the finite dimensional case, and the corresponding (injectivity)\nstatements in the general case. A variant of `linear_map.ker_eq_bot` and the \"inverse\" of\n`is_basis.repr_total` are included.\nUniverse issues make an adaptation of `linear_equiv.dim_eq` necessary.\n* style(linear_algebra/dual): adapt to remarks from PR dsicussion\n* style(linear_algebra/dual): reformat proof of `ker_eq_bot'`", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ker_eq_bot'", ["linear_map"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "repr_total", ["is_basis"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "exists_is_basis_fintype", []], ["add", "theorem", "dim_eq_lift", ["linear_equiv"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/dual.lean", "changes": [["add", "def", "coord_fun", ["is_basis"]], ["add", "theorem", "coord_fun_eq_repr", ["is_basis"]], ["add", "def", "dual_basis", ["is_basis"]], ["add", "theorem", "dual_basis_is_basis", ["is_basis"]], ["add", "theorem", "dual_dim_eq", ["is_basis"]], ["add", "theorem", "dual_lin_independent", ["is_basis"]], ["add", "def", "eval_lc_at", ["is_basis"]], ["add", "def", "to_dual", ["is_basis"]], ["add", "theorem", "to_dual_apply", ["is_basis"]], ["add", "theorem", "to_dual_eq_repr", ["is_basis"]], ["add", "def", "to_dual_equiv", ["is_basis"]], ["add", "def", "to_dual_flip", ["is_basis"]], ["add", "theorem", "to_dual_inj", ["is_basis"]], ["add", "theorem", "to_dual_ker", ["is_basis"]], ["add", "theorem", "to_dual_range", ["is_basis"]], ["add", "theorem", "to_dual_swap_eq_to_dual", ["is_basis"]], ["add", "theorem", "to_dual_to_dual", ["is_basis"]], ["add", "def", "eval", ["module", "dual"]], ["add", "theorem", "eval_apply", ["module", "dual"]], ["add", "def", "dual", ["module"]], ["add", "theorem", "dual_dim_eq", ["vector_space"]], ["add", "def", "eval_equiv", ["vector_space"]], ["add", "theorem", "eval_ker", ["vector_space"]], ["add", "theorem", "eval_range", ["vector_space"]]]}]}, {"timestamp": 1554700887, "sha": "10490ea7", "message": "feat(analysis/complex/polynomial): fundamental theorem of algebra (#851)\n* feat(data/complex/polynomia): fundamental theorem of algebra\n* fix build\n* add docstring\n* add comment giving link to proof used.\n* spag\n* move to analysis/complex\n* fix data/real/pi\n* Update src/analysis/complex/polynomial.lean\nCo-Authored-By: ChrisHughes24 <33847686+ChrisHughes24@users.noreply.github.com>\n* make Reid's suggested changes\n* make Reid's suggested changes", "changes": [{"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/complex/exponential.lean", "changes": []}, {"oldPath": null, "newPath": "src/analysis/complex/polynomial.lean", "changes": [["add", "theorem", "exists_forall_abs_polynomial_eval_le", ["complex"]], ["add", "theorem", "exists_root", ["complex"]]]}, {"oldPath": "src/data/real/pi.lean", "newPath": "src/data/real/pi.lean", "changes": []}, {"oldPath": "src/topology/instances/polynomial.lean", "newPath": "src/topology/instances/polynomial.lean", "changes": [["add", "theorem", "tendsto_infinity", ["polynomial"]]]}]}, {"timestamp": 1554678306, "sha": "4fecb101", "message": "feat(topology/gromov_hausdorff): the Gromov-Hausdorff space (#883)", "changes": [{"oldPath": null, "newPath": "src/topology/metric_space/gromov_hausdorff.lean", "changes": [["add", "def", "GH_dist", ["Gromov_Hausdorff"]], ["add", "theorem", "GH_dist_eq_Hausdorff_dist", ["Gromov_Hausdorff"]], ["add", "theorem", "GH_dist_le_Hausdorff_dist", ["Gromov_Hausdorff"]], ["add", "theorem", "GH_dist_le_nonempty_compacts_dist", ["Gromov_Hausdorff"]], ["add", "theorem", "GH_dist_le_of_approx_subsets", ["Gromov_Hausdorff"]], ["add", "theorem", "to_GH_space_rep", ["Gromov_Hausdorff", "GH_space"]], ["add", "theorem", "Hausdorff_dist_optimal", ["Gromov_Hausdorff"]], ["add", "def", "aux_gluing", ["Gromov_Hausdorff"]], ["add", "structure", "aux_gluing_struct", ["Gromov_Hausdorff"]], ["add", "theorem", "dist_GH_dist", ["Gromov_Hausdorff"]], ["add", "theorem", "eq_to_GH_space", ["Gromov_Hausdorff"]], ["add", "theorem", "eq_to_GH_space_iff", ["Gromov_Hausdorff"]], ["add", "theorem", "second_countable", ["Gromov_Hausdorff"]], ["add", "theorem", "to_GH_space_continuous", ["Gromov_Hausdorff"]], ["add", "theorem", "to_GH_space_eq_to_GH_space_iff_isometric", ["Gromov_Hausdorff"]], ["add", "theorem", "to_GH_space_lipschitz", ["Gromov_Hausdorff"]], ["add", "theorem", "totally_bounded", ["Gromov_Hausdorff"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/gromov_hausdorff_realized.lean", "changes": [["add", "def", "HD", ["Gromov_Hausdorff"]], ["add", "theorem", "HD_below_aux1", ["Gromov_Hausdorff"]], ["add", "theorem", "HD_below_aux2", ["Gromov_Hausdorff"]], ["add", "theorem", "HD_candidates_b_dist_le", ["Gromov_Hausdorff"]], ["add", "theorem", "Hausdorff_dist_optimal_le_HD", ["Gromov_Hausdorff"]], ["add", "def", "candidates", ["Gromov_Hausdorff"]], ["add", "def", "candidates_b_dist", ["Gromov_Hausdorff"]], ["add", "theorem", "candidates_b_dist_mem_candidates_b", ["Gromov_Hausdorff"]], ["add", "def", "candidates_b_of_candidates", ["Gromov_Hausdorff"]], ["add", "theorem", "candidates_b_of_candidates_mem", ["Gromov_Hausdorff"]], ["add", "theorem", "isometry_optimal_GH_injl", ["Gromov_Hausdorff"]], ["add", "theorem", "isometry_optimal_GH_injr", ["Gromov_Hausdorff"]], ["add", "def", "optimal_GH_injl", ["Gromov_Hausdorff"]], ["add", "def", "optimal_GH_injr", ["Gromov_Hausdorff"]], ["add", "def", "premetric_optimal_GH_dist", ["Gromov_Hausdorff"]]]}, {"oldPath": "src/topology/metric_space/isometry.lean", "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "def", "Kuratowski_embedding", ["Kuratowski_embedding"]], ["add", "theorem", "Kuratowski_embedding_isometry", ["Kuratowski_embedding"]], ["add", "def", "embedding_of_subset", ["Kuratowski_embedding"]], ["add", "theorem", "embedding_of_subset_coe", ["Kuratowski_embedding"]], ["add", "theorem", "embedding_of_subset_dist_le", ["Kuratowski_embedding"]], ["add", "theorem", "embedding_of_subset_isometry", ["Kuratowski_embedding"]], ["add", "theorem", "exists_isometric_embedding", ["Kuratowski_embedding"]], ["add", "def", "Kuratowski_embedding", ["Kuratowski_embedding", "nonempty_compacts"]], ["add", "def", "ℓ_infty_ℝ", ["Kuratowski_embedding"]]]}]}, {"timestamp": 1554691310, "sha": "5d81ab17", "message": "trying to work out what was wrong with catching signals (#898)", "changes": [{"oldPath": "scripts/cache-olean.py", "newPath": "scripts/cache-olean.py", "changes": []}, {"oldPath": "scripts/setup-dev-scripts.sh", "newPath": "scripts/setup-dev-scripts.sh", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1554688778, "sha": "0a490302", "message": "fix(category_theory): turn `has_limits` classes into structures (#896)\n* fix(category_theory): turn `has_limits` classes into structures\n* fixing all the other pi-type typclasses\n* oops", "changes": [{"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/instances/topological_spaces.lean", "newPath": "src/category_theory/instances/topological_spaces.lean", "changes": []}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["del", "def", "has_colimits", ["category_theory", "limits"]], ["del", "def", "has_colimits_of_shape", ["category_theory", "limits"]], ["del", "def", "has_limits", ["category_theory", "limits"]], ["del", "def", "has_limits_of_shape", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": [["del", "def", "preserves_colimits", ["category_theory", "limits"]], ["del", "def", "preserves_colimits_of_shape", ["category_theory", "limits"]], ["del", "def", "preserves_limits", ["category_theory", "limits"]], ["del", "def", "preserves_limits_of_shape", ["category_theory", "limits"]], ["del", "def", "reflects_colimits", ["category_theory", "limits"]], ["del", "def", "reflects_colimits_of_shape", ["category_theory", "limits"]], ["del", "def", "reflects_limits", ["category_theory", "limits"]], ["del", "def", "reflects_limits_of_shape", ["category_theory", "limits"]]]}, {"oldPath": "src/category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}]}, {"timestamp": 1554665781, "sha": "483a6c23", "message": "feat(data/list/min_max): add minimum (#892)", "changes": [{"oldPath": "src/data/list/min_max.lean", "newPath": "src/data/list/min_max.lean", "changes": [["add", "theorem", "le_minimum_aux_of_mem", ["list"]], ["add", "theorem", "le_minimum_of_mem", ["list"]], ["add", "theorem", "le_of_foldl_min", ["list"]], ["add", "theorem", "le_of_foldr_min", ["list"]], ["add", "theorem", "mem_foldl_min", ["list"]], ["add", "theorem", "mem_foldr_min", ["list"]], ["add", "theorem", "mem_minimum", ["list"]], ["add", "theorem", "mem_minimum_aux", ["list"]], ["add", "def", "minimum", ["list"]], ["add", "def", "minimum_aux", ["list"]], ["add", "def", "minimum_aux_cons", ["list"]], ["add", "def", "minimum_cons", ["list"]], ["add", "def", "minimum_singleton", ["list"]]]}]}, {"timestamp": 1554654559, "sha": "891c0506", "message": "feat(subgroup, subring, subfield): directed Unions of subrings are subrings (#889)", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "theorem", "is_subfield_Union_of_directed", []]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "is_subgroup_Union_of_directed", []]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "is_add_submonoid_Union_of_directed", []], ["add", "theorem", "is_submonoid_Union_of_directed", []]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": [["add", "theorem", "is_subring_Union_of_directed", []]]}]}, {"timestamp": 1554632966, "sha": "bd524fc1", "message": "feat(field_theory/subfield): is_subfield instances (#891)", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "is_submonoid", ["image"]]]}, {"oldPath": "src/ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1554600856, "sha": "7e70ebd0", "message": "feat(data/nat/basic): b = c if b - a = c - a (#862)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "sub_cancel", ["nat"]]]}]}, {"timestamp": 1554584641, "sha": "3000f328", "message": "fix(build): external PRs can't use GitHub credentials", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1554596471, "sha": "e4d3ca31", "message": "fix(analysis/normed_space/bounded_linear_maps): fix build (#895)", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}]}, {"timestamp": 1554569071, "sha": "31ff5c5c", "message": "refactor(analysis/normed_space/bounded_linear_maps): nondiscrete normed field", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "map_add", ["is_linear_map"]], ["add", "theorem", "map_neg", ["is_linear_map"]], ["add", "theorem", "map_sub", ["is_linear_map"]], ["add", "theorem", "map_zero", ["is_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "exists_norm_lt_one", []], ["add", "theorem", "exists_one_lt_norm", []], ["add", "theorem", "norm_fpow", []], ["mod", "theorem", "norm_pos_iff", []], ["add", "theorem", "rescale_to_shell", []]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["del", "theorem", "bounded_continuous_linear_map", []], ["add", "theorem", "bounded_of_continuous_at", ["is_linear_map"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1554567601, "sha": "53e7d724", "message": "fix(appveyor): build every commit", "changes": [{"oldPath": "appveyor.yml", "newPath": "appveyor.yml", "changes": []}]}, {"timestamp": 1554567268, "sha": "ae8a1fb6", "message": "refactor(analysis/normed_space/bounded_linear_maps): nondiscrete normed field", "changes": [{"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "bdd_above_range_norm_image_div_norm", []], ["del", "theorem", "bounded_by_operator_norm_on_unit_ball", []], ["del", "theorem", "bounded_by_operator_norm_on_unit_vector", []], ["add", "theorem", "coe_zero", ["bounded_linear_maps"]], ["add", "theorem", "map_zero", ["bounded_linear_maps"]], ["add", "theorem", "one_smul", ["bounded_linear_maps"]], ["add", "theorem", "smul_coe", ["bounded_linear_maps"]], ["add", "theorem", "zero_smul", ["bounded_linear_maps"]], ["del", "theorem", "exists_bound'", []], ["mod", "theorem", "exists_bound", []], ["del", "theorem", "norm_of_unit_ball_bdd_above", []], ["mod", "theorem", "operator_norm_bounded_by", []], ["mod", "theorem", "operator_norm_homogeneous", []], ["add", "theorem", "operator_norm_homogeneous_le", []], ["mod", "theorem", "operator_norm_triangle", []], ["add", "def", "to_linear_map", []], ["del", "theorem", "zero_in_im_ball", []]]}]}, {"timestamp": 1554566160, "sha": "8831e0a7", "message": "chore(mergify): require the AppVeyor build to succeed", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554563302, "sha": "8fa071f4", "message": "fix(scripts): not all files were deployed through the curl command (#879)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "appveyor.yml", "changes": []}, {"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}, {"oldPath": "scripts/setup-dev-scripts.sh", "newPath": "scripts/setup-dev-scripts.sh", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1554576357, "sha": "8d45ccb7", "message": "feat(category_theory/bifunctor): simp lemmas (#867)\n* feat(category_theory/bifunctor): simp lemmas\n* remove need for @, thanks Kenny and Chris!", "changes": [{"oldPath": null, "newPath": "src/category_theory/bifunctor.lean", "changes": [["add", "theorem", "diagonal'", ["category_theory", "bifunctor"]], ["add", "theorem", "diagonal", ["category_theory", "bifunctor"]], ["add", "theorem", "map_comp_id", ["category_theory", "bifunctor"]], ["add", "theorem", "map_id", ["category_theory", "bifunctor"]], ["add", "theorem", "map_id_comp", ["category_theory", "bifunctor"]]]}]}, {"timestamp": 1554569531, "sha": "3360f98a", "message": "more general hypotheses for integer induction (#885)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1554548347, "sha": "d8a2bc51", "message": "feat(algebra/opposites): opposites of operators (#538)", "changes": [{"oldPath": null, "newPath": "src/algebra/opposites.lean", "changes": [["add", "def", "op", ["opposite"]], ["add", "theorem", "op_inj", ["opposite"]], ["add", "theorem", "op_unop", ["opposite"]], ["add", "def", "unop", ["opposite"]], ["add", "theorem", "unop_inj", ["opposite"]], ["add", "theorem", "unop_op", ["opposite"]], ["add", "def", "opposite", []]]}]}, {"timestamp": 1554473135, "sha": "e0e231da", "message": "fix(build): match build names", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1554471874, "sha": "d0f86077", "message": "fix(scripts): protect `leanpkg test` against timeouts", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1554463267, "sha": "e809df6d", "message": "fix(scripts): Mac Python's test support doesn't work on Travis", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1554462431, "sha": "d9ec8a82", "message": "fix(scripts): not all files were deployed through the curl command", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "scripts/cache-olean.py", "newPath": "scripts/cache-olean.py", "changes": []}, {"oldPath": null, "newPath": "scripts/leanpkg-example.toml", "changes": []}, {"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}, {"oldPath": "scripts/setup-dev-scripts.sh", "newPath": "scripts/setup-dev-scripts.sh", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1554475055, "sha": "78a08ebc", "message": "feat(data/mllist): monadic lazy lists (#865)\n* feat(data/mllist): monadic lazy lists\n* oops, fix header\n* shove into tactic namespace\n* make mllist into a monad (#880)\n* make mllist into a monad\n* looks good. add `take`, and some tests\n* update authors\n* cleanup test", "changes": [{"oldPath": null, "newPath": "src/data/mllist.lean", "changes": []}, {"oldPath": null, "newPath": "test/mllist.lean", "changes": [["add", "def", "F", []], ["add", "def", "S", []], ["add", "def", "append", []]]}]}, {"timestamp": 1554445813, "sha": "44d1c7aa", "message": "feat(list.split_on): [1,1,2,3,2,4,4].split_on 2 = [[1,1],[3],[4,4]] (#866)", "changes": [{"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": [["add", "def", "split_on", ["list"]], ["add", "def", "split_on_p", ["list"]], ["add", "def", "split_on_p_aux", ["list"]]]}]}, {"timestamp": 1554444700, "sha": "901bdbf4", "message": "feat(data/list/min_max): minimum and maximum over list (#884)\n* feat(data/list/min_max): minimum and maximum over list\n* Update min_max.lean\n* replace semicolons", "changes": [{"oldPath": null, "newPath": "src/data/list/min_max.lean", "changes": [["add", "theorem", "le_maximum_aux_of_mem", ["list"]], ["add", "theorem", "le_maximum_of_mem", ["list"]], ["add", "theorem", "le_of_foldl_max", ["list"]], ["add", "theorem", "le_of_foldr_max", ["list"]], ["add", "def", "maximum", ["list"]], ["add", "def", "maximum_aux", ["list"]], ["add", "def", "maximum_aux_cons", ["list"]], ["add", "def", "maximum_cons", ["list"]], ["add", "def", "maximum_singleton", ["list"]], ["add", "theorem", "mem_foldl_max", ["list"]], ["add", "theorem", "mem_foldr_max", ["list"]], ["add", "theorem", "mem_maximum", ["list"]], ["add", "theorem", "mem_maximum_aux", ["list"]]]}]}, {"timestamp": 1554436875, "sha": "858d111c", "message": "feat(data/matrix): more basic matrix lemmas (#873)\n* feat(data/matrix): more basic matrix lemmas\n* feat(data/matrix): transpose_add", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": [["mod", "theorem", "add_mul", ["matrix"]], ["mod", "theorem", "mul_add", ["matrix"]], ["add", "theorem", "mul_neg", ["matrix"]], ["add", "theorem", "mul_smul", ["matrix"]], ["mod", "theorem", "mul_zero", ["matrix"]], ["add", "theorem", "neg_mul", ["matrix"]], ["add", "theorem", "smul_mul", ["matrix"]], ["add", "theorem", "transpose_add", ["matrix"]], ["add", "theorem", "transpose_mul", ["matrix"]], ["add", "theorem", "transpose_neg", ["matrix"]], ["add", "theorem", "transpose_transpose", ["matrix"]], ["add", "theorem", "transpose_zero", ["matrix"]], ["mod", "theorem", "zero_mul", ["matrix"]]]}]}, {"timestamp": 1554434052, "sha": "0b7ee1b4", "message": "feat(category_theory): introduce the core of a category (#832)", "changes": [{"oldPath": null, "newPath": "src/category_theory/core.lean", "changes": [["add", "theorem", "comp_hom", ["category_theory", "core"]], ["add", "def", "forget_functor_to_core", ["category_theory", "core"]], ["add", "def", "functor_to_core", ["category_theory", "core"]], ["add", "theorem", "id_hom", ["category_theory", "core"]], ["add", "def", "inclusion", ["category_theory", "core"]], ["add", "def", "core", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "map_hom_inv", ["category_theory", "functor"]], ["add", "theorem", "map_inv_hom", ["category_theory", "functor"]]]}]}, {"timestamp": 1554410522, "sha": "b6c2be42", "message": "chore(mergify): delete head branch when merging", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554420466, "sha": "7aaccae7", "message": "feat(algebra/char_p,field_theory/finite_card): cardinality of finite fields (#819)\n* First lemma's added\n* fixed lemmas by switching arguments\n* vector_space card_fin\n* char p implies zmod p module\n* Finite field card\n* renaming\n* .\n* bug fix\n* move to_module to is_ring_hom.to_module\n* fix bug\n* remove unnecessary open\n* instance instead of thm and remove unnecessary variables\n* moved cast_is_ring_hom and zmod.to_module to char_p\n* removed redundent nat.prime\n* some char_p stuff inside namespace char_p\n* fix\n* Moved finite field card to a different file\n* Removed unnecessary import\n* Remove unnecessary lemmas\n* Update src/algebra/char_p.lean\nCo-Authored-By: CPutz \n* rename char_p lemmas\n* Minor changes", "changes": [{"oldPath": "src/algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": [["add", "theorem", "cast_eq_mod", ["char_p"]], ["add", "theorem", "char_is_prime", ["char_p"]], ["add", "theorem", "char_is_prime_of_ge_two", ["char_p"]], ["add", "theorem", "char_is_prime_or_zero", ["char_p"]], ["add", "theorem", "char_ne_one", ["char_p"]], ["add", "theorem", "char_ne_zero_of_fintype", ["char_p"]], ["add", "theorem", "char_p_to_char_zero", ["char_p"]]]}, {"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "def", "to_module", ["is_ring_hom"]]]}, {"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "def", "cast", ["zmod"]]]}, {"oldPath": null, "newPath": "src/field_theory/finite_card.lean", "changes": [["add", "theorem", "card'", ["finite_field"]], ["add", "theorem", "card", ["finite_field"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "card_fintype'", ["vector_space"]], ["add", "theorem", "card_fintype", ["vector_space"]]]}]}, {"timestamp": 1554395291, "sha": "3abfda0e", "message": "chore(github/pr): enable code owners", "changes": [{"oldPath": null, "newPath": "CODEOWNERS", "changes": []}]}, {"timestamp": 1554404688, "sha": "8183a5a6", "message": "feat(data/list/perm): nil_subperm (#882)", "changes": [{"oldPath": "src/data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": [["add", "theorem", "nil_subperm", ["list"]]]}]}, {"timestamp": 1554398178, "sha": "384c9be2", "message": "feat (analysis/normed_space/basic.lean): implement reverse triangle inequality (#831)\n* implement reverse triangle inequality\n* make parameters explicit", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_reverse_triangle'", []], ["add", "theorem", "norm_reverse_triangle", []]]}]}, {"timestamp": 1554366117, "sha": "07aa1e3e", "message": "fix(build): fix Lean version", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1554311950, "sha": "1c69b609", "message": "chore(mergify): fix config", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554308547, "sha": "7762bc4f", "message": "chore(mergify): fix config file", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554307566, "sha": "d4fd4b2b", "message": "chore(mergify): use team names instead of user names", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554303374, "sha": "2230934a", "message": "chore(mergify): disable `delete_head_branch`", "changes": [{"oldPath": ".mergify.yml", "newPath": ".mergify.yml", "changes": []}]}, {"timestamp": 1554309014, "sha": "840ddeb7", "message": "fix(README): fix mergify icon", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1554280686, "sha": "542d1790", "message": "chore(github/pr): mergify configuration (#871)", "changes": [{"oldPath": null, "newPath": ".mergify.yml", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1554279021, "sha": "a0cbe3be", "message": "feat(data/fin): add `fin.clamp` (#874)", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["mod", "def", "cast", ["fin"]], ["add", "theorem", "cast_val", ["fin"]], ["add", "def", "clamp", ["fin"]], ["add", "theorem", "clamp_val", ["fin"]]]}]}, {"timestamp": 1554269855, "sha": "2c735dc9", "message": "feat(ring_theory/algebra_operations): submodules form a semiring (#856)", "changes": [{"oldPath": "src/algebra/pointwise.lean", "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "pointwise_mul_finite", ["set"]]]}, {"oldPath": "src/ring_theory/algebra_operations.lean", "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["del", "theorem", "bot_mul", ["algebra"]], ["del", "theorem", "fg_mul", ["algebra"]], ["del", "theorem", "mul_bot", ["algebra"]], ["del", "theorem", "mul_le", ["algebra"]], ["del", "theorem", "mul_le_mul", ["algebra"]], ["del", "theorem", "mul_le_mul_left", ["algebra"]], ["del", "theorem", "mul_le_mul_right", ["algebra"]], ["del", "theorem", "mul_mem_mul", ["algebra"]], ["del", "theorem", "mul_mem_mul_rev", ["algebra"]], ["del", "theorem", "mul_sup", ["algebra"]], ["del", "theorem", "span_mul_span", ["algebra"]], ["del", "theorem", "sup_mul", ["algebra"]], ["add", "theorem", "bot_mul", ["submodule"]], ["add", "theorem", "mul_bot", ["submodule"]], ["add", "theorem", "mul_le", ["submodule"]], ["add", "theorem", "mul_le_mul", ["submodule"]], ["add", "theorem", "mul_le_mul_left", ["submodule"]], ["add", "theorem", "mul_le_mul_right", ["submodule"]], ["add", "theorem", "mul_mem_mul", ["submodule"]], ["add", "theorem", "mul_mem_mul_rev", ["submodule"]], ["add", "theorem", "mul_sup", ["submodule"]], ["add", "theorem", "one_eq_map_top", ["submodule"]], ["add", "theorem", "one_eq_span", ["submodule"]], ["add", "theorem", "one_le", ["submodule"]], ["add", "theorem", "span_mul_span", ["submodule"]], ["add", "theorem", "sup_mul", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["mod", "theorem", "one_eq_top", ["ideal"]], ["mod", "theorem", "bot_smul", ["submodule"]], ["mod", "theorem", "smul_bot", ["submodule"]], ["mod", "theorem", "top_smul", ["submodule"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "fg_mul", ["submodule"]]]}]}, {"timestamp": 1554269705, "sha": "b9e9328e", "message": "feat(topology/metric_space/completion): completion of metric spaces (#743)", "changes": [{"oldPath": null, "newPath": "src/topology/metric_space/completion.lean", "changes": [["add", "theorem", "coe_isometry", ["metric", "completion"]]]}]}, {"timestamp": 1554284295, "sha": "c3aba261", "message": "feat(topology/uniform_space/pi): indexed products of uniform spaces (#845)\n* feat(topology/uniform_space/pi): indexed products of uniform spaces\n* fix(topology/uniform_space/pi): defeq topology\n* fix(src/topology/uniform_space/pi): typo\nCo-Authored-By: PatrickMassot ", "changes": [{"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "uniformity_prod", []]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/pi.lean", "changes": [["add", "theorem", "uniform_continuous_proj", ["Pi"]], ["add", "theorem", "uniform_space_topology", ["Pi"]], ["add", "theorem", "uniformity", ["Pi"]]]}]}, {"timestamp": 1554258479, "sha": "7043a4ab", "message": "feat(algebra/pointwise): pointwise addition and multiplication of sets (#854)", "changes": [{"oldPath": null, "newPath": "src/algebra/pointwise.lean", "changes": [["add", "theorem", "empty_pointwise_mul", ["set"]], ["add", "theorem", "mem_pointwise_mul", ["set"]], ["add", "theorem", "mem_pointwise_one", ["set"]], ["add", "theorem", "mul_mem_pointwise_mul", ["set"]], ["add", "def", "pointwise_add_add_monoid", ["set"]], ["add", "def", "pointwise_add_add_semigroup", ["set"]], ["add", "def", "pointwise_inv", ["set"]], ["add", "def", "pointwise_mul", ["set"]], ["add", "def", "pointwise_mul_comm_semiring", ["set"]], ["add", "theorem", "pointwise_mul_empty", ["set"]], ["add", "theorem", "pointwise_mul_eq_image", ["set"]], ["add", "def", "pointwise_mul_monoid", ["set"]], ["add", "def", "pointwise_mul_semigroup", ["set"]], ["add", "def", "pointwise_mul_semiring", ["set"]], ["add", "theorem", "pointwise_mul_subset_mul", ["set"]], ["add", "theorem", "pointwise_mul_union", ["set"]], ["add", "def", "pointwise_one", ["set"]], ["add", "def", "is_monoid_hom", ["set", "singleton"]], ["add", "def", "is_mul_hom", ["set", "singleton"]], ["add", "theorem", "union_pointwise_mul", ["set"]]]}]}, {"timestamp": 1554239642, "sha": "f1120769", "message": "feat(tactic/basic): add `tactic.get_goal` (#876)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1554237914, "sha": "e96d6b75", "message": "fix(int/basic): change order of instances to int.cast (#877)\nAs discussed at https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Problem.20with.20type.20class.20search/near/161848744\nChanging the order of arguments lets type class inference fail quickly for `int -> nat` coercions, rather than repeatedly looking for `has_neg` on `nat`.", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}]}, {"timestamp": 1554230058, "sha": "ce92e8af", "message": "chore(.travis.yml): use Lean to determine the Lean version (#714)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": null, "newPath": "scripts/lean_version.lean", "changes": [["add", "def", "lean_version_string_core", []], ["add", "def", "main", []]]}, {"oldPath": "scripts/lean_version.py", "newPath": null, "changes": []}]}, {"timestamp": 1554230014, "sha": "6c559892", "message": "build(travis): interrupt the build at the first error message (#708)\nAlso make travis_long.sh print its progress messages to stderr.\nThis sidesteps a mysterious issue where piping the output of\ntravis_long.sh to another program caused that output to be lost\n(probably buffered somewhere?) so Travis would kill the build\nafter 10 minutes.", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": null, "newPath": "scripts/detect_errors.py", "changes": []}, {"oldPath": "travis_long.sh", "newPath": "travis_long.sh", "changes": []}]}, {"timestamp": 1554204164, "sha": "13034ba3", "message": "feat(tactic/local_cache): add tactic-block-local caching mechanism (#837)", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": [["add", "def", "from_components", ["name"]]]}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/local_cache.lean", "changes": [["add", "def", "FNV_OFFSET_BASIS", ["tactic", "local_cache", "internal", "def_local"]], ["add", "def", "FNV_PRIME", ["tactic", "local_cache", "internal", "def_local"]], ["add", "def", "RADIX", ["tactic", "local_cache", "internal", "def_local"]], ["add", "def", "hash_byte", ["tactic", "local_cache", "internal", "def_local"]], ["add", "def", "hash_string", ["tactic", "local_cache", "internal", "def_local"]]]}, {"oldPath": null, "newPath": "test/local_cache.lean", "changes": [["add", "def", "TEST_NS_1", ["block_local"]], ["add", "def", "TEST_NS_2", ["block_local"]], ["add", "structure", "dummy", ["block_local"]], ["add", "def", "my_def_1", ["block_local"]], ["add", "def", "my_def_2", ["block_local"]], ["add", "def", "my_definition'", ["block_local"]], ["add", "def", "my_definition", ["block_local"]], ["add", "theorem", "my_lemma'", ["block_local"]], ["add", "theorem", "my_lemma", ["block_local"]], ["add", "theorem", "my_lemma_1", ["block_local"]], ["add", "theorem", "my_lemma_2", ["block_local"]], ["add", "theorem", "my_lemma_3", ["block_local"]], ["add", "theorem", "my_test_ns", ["block_local"]], ["add", "theorem", "my_test_ps", ["block_local"]], ["add", "def", "TEST_NS", ["collision"]], ["add", "theorem", "my_lemma_1", ["collision"]], ["add", "theorem", "my_lemma_2", ["collision"]], ["add", "theorem", "my_lemma_3", ["collision"]], ["add", "theorem", "my_lemma_4", ["collision"]], ["add", "def", "TEST_NS_1", ["def_local"]], ["add", "def", "TEST_NS_2", ["def_local"]], ["add", "structure", "dummy", ["def_local"]], ["add", "def", "my_def_1", ["def_local"]], ["add", "def", "my_def_2", ["def_local"]], ["add", "def", "my_definition'", ["def_local"]], ["add", "def", "my_definition", ["def_local"]], ["add", "theorem", "my_lemma'", ["def_local"]], ["add", "theorem", "my_lemma", ["def_local"]], ["add", "theorem", "my_lemma_1", ["def_local"]], ["add", "theorem", "my_lemma_2", ["def_local"]], ["add", "theorem", "my_lemma_3", ["def_local"]], ["add", "theorem", "my_test_ns", ["def_local"]], ["add", "theorem", "my_test_ps", ["def_local"]]]}]}, {"timestamp": 1554201883, "sha": "7eac1785", "message": "fix(scripts/update-mathlib): protect file operations from interrupts (#864)", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": null, "newPath": "scripts/auth_github.py", "changes": []}, {"oldPath": "scripts/cache-olean.py", "newPath": "scripts/cache-olean.py", "changes": []}, {"oldPath": null, "newPath": "scripts/delayed_interrupt.py", "changes": []}, {"oldPath": "scripts/setup-dev-scripts.sh", "newPath": "scripts/setup-dev-scripts.sh", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1554193430, "sha": "f385ad6b", "message": "Inductive limit of metric spaces (#732)", "changes": [{"oldPath": "src/topology/metric_space/gluing.lean", "newPath": "src/topology/metric_space/gluing.lean", "changes": [["add", "def", "inductive_limit", ["metric"]], ["add", "def", "inductive_limit_dist", ["metric"]], ["add", "theorem", "inductive_limit_dist_eq_dist", ["metric"]], ["add", "def", "inductive_premetric", ["metric"]], ["add", "def", "to_inductive_limit", ["metric"]], ["add", "theorem", "to_inductive_limit_commute", ["metric"]], ["add", "theorem", "to_inductive_limit_isometry", ["metric"]]]}]}, {"timestamp": 1554191872, "sha": "727120cc", "message": "fix(build): improve compatibility of caching scripts with Sourcetree (#863)", "changes": [{"oldPath": "scripts/post-checkout", "newPath": "scripts/post-checkout", "changes": []}, {"oldPath": "scripts/post-commit", "newPath": "scripts/post-commit", "changes": []}]}, {"timestamp": 1554149098, "sha": "5694d152", "message": "feat(data/nat/basic): nat.le_rec_on (#585)", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "def", "le_rec_on", ["nat"]], ["add", "theorem", "le_rec_on_injective", ["nat"]], ["add", "theorem", "le_rec_on_self", ["nat"]], ["add", "theorem", "le_rec_on_succ'", ["nat"]], ["add", "theorem", "le_rec_on_succ", ["nat"]], ["add", "theorem", "le_rec_on_surjective", ["nat"]], ["add", "theorem", "le_rec_on_trans", ["nat"]], ["add", "theorem", "of_le_succ", ["nat"]]]}]}, {"timestamp": 1554144936, "sha": "8e4542da", "message": "Merge branch 'congr-2'", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/push_neg.lean", "changes": [["add", "theorem", "implies_iff_not_or", ["push_neg", "classical"]], ["add", "theorem", "not_and_eq", ["push_neg"]], ["add", "theorem", "not_eq", ["push_neg"]], ["add", "theorem", "not_exists_eq", ["push_neg"]], ["add", "theorem", "not_forall_eq", ["push_neg"]], ["add", "theorem", "not_implies_eq", ["push_neg"]], ["add", "theorem", "not_le_eq", ["push_neg"]], ["add", "theorem", "not_lt_eq", ["push_neg"]], ["add", "theorem", "not_not_eq", ["push_neg"]], ["add", "theorem", "not_or_eq", ["push_neg"]]]}, {"oldPath": null, "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1554144741, "sha": "ec0a4ea1", "message": "fix(tactic/congr'): some `\\iff` goals were erroneously rejected", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/push_neg.lean", "newPath": null, "changes": [["del", "theorem", "implies_iff_not_or", ["push_neg", "classical"]], ["del", "theorem", "not_and_eq", ["push_neg"]], ["del", "theorem", "not_eq", ["push_neg"]], ["del", "theorem", "not_exists_eq", ["push_neg"]], ["del", "theorem", "not_forall_eq", ["push_neg"]], ["del", "theorem", "not_implies_eq", ["push_neg"]], ["del", "theorem", "not_le_eq", ["push_neg"]], ["del", "theorem", "not_lt_eq", ["push_neg"]], ["del", "theorem", "not_not_eq", ["push_neg"]], ["del", "theorem", "not_or_eq", ["push_neg"]]]}, {"oldPath": "test/push_neg.lean", "newPath": null, "changes": []}]}, {"timestamp": 1554137333, "sha": "5fe470bb", "message": "feat(tactic/push_neg): a tactic pushing negations (#853)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/push_neg.lean", "changes": [["add", "theorem", "implies_iff_not_or", ["push_neg", "classical"]], ["add", "theorem", "not_and_eq", ["push_neg"]], ["add", "theorem", "not_eq", ["push_neg"]], ["add", "theorem", "not_exists_eq", ["push_neg"]], ["add", "theorem", "not_forall_eq", ["push_neg"]], ["add", "theorem", "not_implies_eq", ["push_neg"]], ["add", "theorem", "not_le_eq", ["push_neg"]], ["add", "theorem", "not_lt_eq", ["push_neg"]], ["add", "theorem", "not_not_eq", ["push_neg"]], ["add", "theorem", "not_or_eq", ["push_neg"]]]}, {"oldPath": null, "newPath": "test/push_neg.lean", "changes": []}]}, {"timestamp": 1554135669, "sha": "5995d460", "message": "fix(build): prevent leanchecker from timing out", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1554135238, "sha": "2f088fc1", "message": "feat(category_theory): working in Sort rather than Type (#824)", "changes": [{"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["mod", "theorem", "mul_def", ["category_theory", "End"]], ["mod", "theorem", "one_def", ["category_theory", "End"]], ["mod", "def", "large_category", ["category_theory"]], ["mod", "def", "small_category", ["category_theory"]]]}, {"oldPath": "src/category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": [["mod", "def", "over", ["category_theory"]], ["mod", "def", "under", ["category_theory"]]]}, {"oldPath": "src/category_theory/concrete_category.lean", "newPath": "src/category_theory/concrete_category.lean", "changes": [["mod", "structure", "bundled", ["category_theory"]], ["mod", "def", "forget", ["category_theory"]], ["mod", "def", "mk_ob", ["category_theory"]]]}, {"oldPath": "src/category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "src/category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "src/category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["mod", "structure", "equivalence", ["category_theory"]]]}, {"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": [["mod", "def", "induced_category", ["category_theory"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["mod", "structure", "functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": [["mod", "def", "large_groupoid", ["category_theory"]], ["mod", "def", "small_groupoid", ["category_theory"]]]}, {"oldPath": "src/category_theory/instances/monoids.lean", "newPath": "src/category_theory/instances/monoids.lean", "changes": []}, {"oldPath": null, "newPath": "src/category_theory/instances/rel.lean", "changes": [["add", "def", "rel", ["category_theory"]]]}, {"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["mod", "structure", "iso", ["category_theory"]]]}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "theorem", "extend_ι", ["category_theory", "limits", "cocone"]], ["add", "theorem", "extend_π", ["category_theory", "limits", "cone"]]]}, {"oldPath": "src/category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "theorem", "map_post", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "map_post", ["category_theory", "limits", "limit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "src/category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": [["mod", "structure", "nat_trans", ["category_theory"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["mod", "theorem", "hom_obj", ["category_theory", "functor"]], ["mod", "theorem", "hom_pairing_map", ["category_theory", "functor"]], ["mod", "theorem", "op_mul", ["category_theory", "opposite"]], ["mod", "theorem", "op_one", ["category_theory", "opposite"]], ["mod", "theorem", "unop_mul", ["category_theory", "opposite"]], ["mod", "theorem", "unop_one", ["category_theory", "opposite"]], ["mod", "def", "opposite", ["category_theory"]]]}, {"oldPath": "src/category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "src/category_theory/products.lean", "newPath": "src/category_theory/products.lean", "changes": []}, {"oldPath": "src/category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["mod", "theorem", "types_comp", ["category_theory"]], ["mod", "theorem", "types_hom", ["category_theory"]], ["mod", "theorem", "types_id", ["category_theory"]]]}, {"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["mod", "def", "coyoneda", ["category_theory"]], ["mod", "def", "yoneda", ["category_theory"]]]}]}, {"timestamp": 1554156448, "sha": "404e2c93", "message": "add tutorial about zmod37 (#767)\nReference to a mathlib file which no longer exists has been fixed, and a more user-friendly example of an equivalence relation has been added in a tutorial.", "changes": [{"oldPath": "docs/theories/relations.md", "newPath": "docs/theories/relations.md", "changes": []}, {"oldPath": null, "newPath": "docs/tutorial/Zmod37.lean", "changes": [["add", "theorem", "coe_add", ["Zmod37"]], ["add", "theorem", "coe_mul", ["Zmod37"]], ["add", "theorem", "coe_neg", ["Zmod37"]], ["add", "theorem", "congr_add", ["Zmod37"]], ["add", "theorem", "congr_neg", ["Zmod37"]], ["add", "theorem", "of_int_one", ["Zmod37"]], ["add", "theorem", "of_int_zero", ["Zmod37"]], ["add", "theorem", "cong_mod_equiv", []], ["add", "theorem", "cong_mod_refl", []], ["add", "theorem", "cong_mod_symm", []], ["add", "theorem", "cong_mod_trans", []]]}]}, {"timestamp": 1554155897, "sha": "867661e0", "message": "docs(tactics): add introduction to the instance cache tactic section", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1554155731, "sha": "59e05930", "message": "docs(tactics): minor rewrite of exactI, resetI etc\nI always found these tactics confusing, but I finally figured out what they do and so I rewrote the docs so that I understand them better.", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1554131302, "sha": "a1fe39b1", "message": "refactor(analysis/convex): make instance local (#869)", "changes": [{"oldPath": "src/analysis/convex.lean", "newPath": "src/analysis/convex.lean", "changes": []}]}, {"timestamp": 1554130086, "sha": "3bc0f00a", "message": "fix(scripts/cache-olean): only run the post-checkout hook if we actually changed branches (#857)", "changes": [{"oldPath": "scripts/post-checkout", "newPath": "scripts/post-checkout", "changes": []}]}, {"timestamp": 1554087681, "sha": "2851236b", "message": "feat(data/real/pi): Compute the first three digits of pi (#822)", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "pow_lt_pow", []]]}, {"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "theorem", "sin_gt_sub_cube", ["real"]], ["add", "theorem", "sin_lt", ["real"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "div_im", ["complex"]], ["add", "theorem", "div_re", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_square", ["complex"]], ["add", "theorem", "sin_square", ["complex"]], ["add", "theorem", "cos_square", ["real"]], ["add", "theorem", "sin_square", ["real"]]]}, {"oldPath": "src/data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": [["mod", "theorem", "le_mk_of_forall_le", ["real"]], ["add", "theorem", "le_sqrt'", ["real"]], ["add", "theorem", "le_sqrt", ["real"]], ["add", "theorem", "le_sqrt_of_sqr_le", ["real"]], ["mod", "theorem", "mul_self_sqrt", ["real"]], ["mod", "theorem", "sqr_sqrt", ["real"]], ["mod", "theorem", "sqrt_div", ["real"]], ["mod", "theorem", "sqrt_eq_iff_mul_self_eq", ["real"]], ["mod", "theorem", "sqrt_eq_iff_sqr_eq", ["real"]], ["mod", "theorem", "sqrt_eq_zero'", ["real"]], ["mod", "theorem", "sqrt_eq_zero", ["real"]], ["mod", "theorem", "sqrt_eq_zero_of_nonpos", ["real"]], ["mod", "theorem", "sqrt_inj", ["real"]], ["mod", "theorem", "sqrt_le", ["real"]], ["add", "theorem", "sqrt_le_left", ["real"]], ["add", "theorem", "sqrt_le_sqrt", ["real"]], ["mod", "theorem", "sqrt_lt", ["real"]], ["mod", "theorem", "sqrt_mul", ["real"]], ["mod", "theorem", "sqrt_mul_self", ["real"]], ["mod", "theorem", "sqrt_pos", ["real"]], ["mod", "theorem", "sqrt_sqr", ["real"]]]}, {"oldPath": null, "newPath": "src/data/real/pi.lean", "changes": [["add", "theorem", "cos_pi_div_eight", ["real"]], ["add", "theorem", "cos_pi_div_four", ["real"]], ["add", "theorem", "cos_pi_div_sixteen", ["real"]], ["add", "theorem", "cos_pi_div_thirty_two", ["real"]], ["add", "theorem", "cos_pi_over_two_pow", ["real"]], ["add", "theorem", "pi_gt_314", ["real"]], ["add", "theorem", "pi_gt_sqrt_two_add_series", ["real"]], ["add", "theorem", "pi_gt_three", ["real"]], ["add", "theorem", "pi_lt_315", ["real"]], ["add", "theorem", "pi_lt_sqrt_two_add_series", ["real"]], ["add", "theorem", "sin_pi_div_eight", ["real"]], ["add", "theorem", "sin_pi_div_four", ["real"]], ["add", "theorem", "sin_pi_div_sixteen", ["real"]], ["add", "theorem", "sin_pi_div_thirty_two", ["real"]], ["add", "theorem", "sin_pi_over_two_pow_succ", ["real"]], ["add", "theorem", "sin_square_pi_over_two_pow", ["real"]], ["add", "theorem", "sin_square_pi_over_two_pow_succ", ["real"]], ["add", "theorem", "sqrt_two_add_series_lt_two", ["real"]], ["add", "theorem", "sqrt_two_add_series_monotone_left", ["real"]], ["add", "theorem", "sqrt_two_add_series_nonneg", ["real"]], ["add", "theorem", "sqrt_two_add_series_one", ["real"]], ["add", "theorem", "sqrt_two_add_series_step_down", ["real"]], ["add", "theorem", "sqrt_two_add_series_step_up", ["real"]], ["add", "theorem", "sqrt_two_add_series_succ", ["real"]], ["add", "theorem", "sqrt_two_add_series_two", ["real"]], ["add", "theorem", "sqrt_two_add_series_zero", ["real"]], ["add", "theorem", "sqrt_two_add_series_zero_nonneg", ["real"]]]}]}, {"timestamp": 1554067983, "sha": "c91e6c2e", "message": "fix(ring_theory/algebra): remove duplicate theorems to fix build", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["del", "theorem", "smul_im:", ["complex"]], ["del", "theorem", "smul_re:", ["complex"]]]}]}, {"timestamp": 1554021359, "sha": "9480df50", "message": "refactor(computability): unpack fixed_point proof", "changes": [{"oldPath": "src/computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}]}, {"timestamp": 1554021321, "sha": "359cac1b", "message": "feat(computability): computable_iff_re_compl_re", "changes": [{"oldPath": "src/computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": [["add", "theorem", "computable_iff", ["computable_pred"]], ["add", "theorem", "computable_iff_re_compl_re", ["computable_pred"]], ["add", "theorem", "to_re", ["computable_pred"]]]}]}, {"timestamp": 1554021141, "sha": "514de772", "message": "feat(data/finset): to_finset_eq_empty", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "to_finset_eq_empty", ["multiset"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "erase_dup_eq_zero", ["multiset"]]]}]}, {"timestamp": 1554021099, "sha": "72634d2c", "message": "feat(data/complex/basic): smul_re,im", "changes": [{"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "smul_im", ["complex"]], ["add", "theorem", "smul_re", ["complex"]]]}]}, {"timestamp": 1553993321, "sha": "e1c035da", "message": "feat(data/polynomial): eval₂_neg", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "eval₂_neg", ["polynomial"]], ["add", "theorem", "eval₂_sub", ["polynomial"]]]}]}, {"timestamp": 1553903788, "sha": "c2bb4c5c", "message": "refactor(data/zsqrtd/basic): move zsqrtd out of pell and into data (#861)", "changes": [{"oldPath": null, "newPath": "src/data/zsqrtd/basic.lean", "changes": [["add", "def", "add", ["zsqrtd"]], ["add", "theorem", "add_def", ["zsqrtd"]], ["add", "theorem", "add_im", ["zsqrtd"]], ["add", "theorem", "add_re", ["zsqrtd"]], ["add", "theorem", "bit0_im", ["zsqrtd"]], ["add", "theorem", "bit0_re", ["zsqrtd"]], ["add", "theorem", "bit1_im", ["zsqrtd"]], ["add", "theorem", "bit1_re", ["zsqrtd"]], ["add", "theorem", "coe_int_im", ["zsqrtd"]], ["add", "theorem", "coe_int_re", ["zsqrtd"]], ["add", "theorem", "coe_int_val", ["zsqrtd"]], ["add", "theorem", "coe_nat_im", ["zsqrtd"]], ["add", "theorem", "coe_nat_re", ["zsqrtd"]], ["add", "theorem", "coe_nat_val", ["zsqrtd"]], ["add", "def", "conj", ["zsqrtd"]], ["add", "theorem", "conj_im", ["zsqrtd"]], ["add", "theorem", "conj_mul", ["zsqrtd"]], ["add", "theorem", "conj_re", ["zsqrtd"]], ["add", "theorem", "d_pos", ["zsqrtd"]], ["add", "theorem", "decompose", ["zsqrtd"]], ["add", "theorem", "divides_sq_eq_zero", ["zsqrtd"]], ["add", "theorem", "divides_sq_eq_zero_z", ["zsqrtd"]], ["add", "theorem", "ext", ["zsqrtd"]], ["add", "theorem", "le_antisymm", ["zsqrtd"]], ["add", "theorem", "le_arch", ["zsqrtd"]], ["add", "theorem", "le_of_le_le", ["zsqrtd"]], ["add", "theorem", "le_refl", ["zsqrtd"]], ["add", "def", "mul", ["zsqrtd"]], ["add", "theorem", "mul_conj", ["zsqrtd"]], ["add", "theorem", "mul_im", ["zsqrtd"]], ["add", "theorem", "mul_re", ["zsqrtd"]], ["add", "theorem", "muld_val", ["zsqrtd"]], ["add", "def", "neg", ["zsqrtd"]], ["add", "theorem", "neg_im", ["zsqrtd"]], ["add", "theorem", "neg_re", ["zsqrtd"]], ["add", "def", "nonneg", ["zsqrtd"]], ["add", "theorem", "nonneg_add", ["zsqrtd"]], ["add", "theorem", "nonneg_add_lem", ["zsqrtd"]], ["add", "theorem", "nonneg_antisymm", ["zsqrtd"]], ["add", "theorem", "nonneg_cases", ["zsqrtd"]], ["add", "theorem", "nonneg_iff_zero_le", ["zsqrtd"]], ["add", "theorem", "nonneg_mul", ["zsqrtd"]], ["add", "theorem", "nonneg_mul_lem", ["zsqrtd"]], ["add", "theorem", "nonneg_muld", ["zsqrtd"]], ["add", "theorem", "nonneg_smul", ["zsqrtd"]], ["add", "def", "nonnegg", ["zsqrtd"]], ["add", "theorem", "nonnegg_cases_left", ["zsqrtd"]], ["add", "theorem", "nonnegg_cases_right", ["zsqrtd"]], ["add", "theorem", "nonnegg_comm", ["zsqrtd"]], ["add", "theorem", "nonnegg_neg_pos", ["zsqrtd"]], ["add", "theorem", "nonnegg_pos_neg", ["zsqrtd"]], ["add", "def", "norm", ["zsqrtd"]], ["add", "theorem", "norm_eq_mul_conj", ["zsqrtd"]], ["add", "theorem", "norm_eq_one_iff", ["zsqrtd"]], ["add", "theorem", "norm_int_cast", ["zsqrtd"]], ["add", "theorem", "norm_mul", ["zsqrtd"]], ["add", "theorem", "norm_nat_cast", ["zsqrtd"]], ["add", "theorem", "norm_nonneg", ["zsqrtd"]], ["add", "theorem", "norm_one", ["zsqrtd"]], ["add", "theorem", "norm_zero", ["zsqrtd"]], ["add", "theorem", "not_divides_square", ["zsqrtd"]], ["add", "theorem", "not_sq_le_succ", ["zsqrtd"]], ["add", "def", "of_int", ["zsqrtd"]], ["add", "theorem", "of_int_eq_coe", ["zsqrtd"]], ["add", "theorem", "of_int_im", ["zsqrtd"]], ["add", "theorem", "of_int_re", ["zsqrtd"]], ["add", "def", "one", ["zsqrtd"]], ["add", "theorem", "one_im", ["zsqrtd"]], ["add", "theorem", "one_re", ["zsqrtd"]], ["add", "theorem", "smul_val", ["zsqrtd"]], ["add", "theorem", "smuld_val", ["zsqrtd"]], ["add", "def", "sq_le", ["zsqrtd"]], ["add", "theorem", "sq_le_add", ["zsqrtd"]], ["add", "theorem", "sq_le_add_mixed", ["zsqrtd"]], ["add", "theorem", "sq_le_cancel", ["zsqrtd"]], ["add", "theorem", "sq_le_mul", ["zsqrtd"]], ["add", "theorem", "sq_le_of_le", ["zsqrtd"]], ["add", "theorem", "sq_le_smul", ["zsqrtd"]], ["add", "def", "sqrtd", ["zsqrtd"]], ["add", "theorem", "sqrtd_im", ["zsqrtd"]], ["add", "theorem", "sqrtd_re", ["zsqrtd"]], ["add", "def", "zero", ["zsqrtd"]], ["add", "theorem", "zero_im", ["zsqrtd"]], ["add", "theorem", "zero_re", ["zsqrtd"]], ["add", "structure", "zsqrtd", []]]}, {"oldPath": "src/data/gaussian_int.lean", "newPath": "src/data/zsqrtd/gaussian_int.lean", "changes": []}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["del", "def", "add", ["zsqrtd"]], ["del", "theorem", "add_def", ["zsqrtd"]], ["del", "theorem", "add_im", ["zsqrtd"]], ["del", "theorem", "add_re", ["zsqrtd"]], ["del", "theorem", "bit0_im", ["zsqrtd"]], ["del", "theorem", "bit0_re", ["zsqrtd"]], ["del", "theorem", "bit1_im", ["zsqrtd"]], ["del", "theorem", "bit1_re", ["zsqrtd"]], ["del", "theorem", "coe_int_im", ["zsqrtd"]], ["del", "theorem", "coe_int_re", ["zsqrtd"]], ["del", "theorem", "coe_int_val", ["zsqrtd"]], ["del", "theorem", "coe_nat_im", ["zsqrtd"]], ["del", "theorem", "coe_nat_re", ["zsqrtd"]], ["del", "theorem", "coe_nat_val", ["zsqrtd"]], ["del", "def", "conj", ["zsqrtd"]], ["del", "theorem", "conj_im", ["zsqrtd"]], ["del", "theorem", "conj_mul", ["zsqrtd"]], ["del", "theorem", "conj_re", ["zsqrtd"]], ["del", "theorem", "d_pos", ["zsqrtd"]], ["del", "theorem", "decompose", ["zsqrtd"]], ["del", "theorem", "divides_sq_eq_zero", ["zsqrtd"]], ["del", "theorem", "divides_sq_eq_zero_z", ["zsqrtd"]], ["del", "theorem", "ext", ["zsqrtd"]], ["del", "theorem", "le_antisymm", ["zsqrtd"]], ["del", "theorem", "le_arch", ["zsqrtd"]], ["del", "theorem", "le_of_le_le", ["zsqrtd"]], ["del", "theorem", "le_refl", ["zsqrtd"]], ["del", "def", "mul", ["zsqrtd"]], ["del", "theorem", "mul_conj", ["zsqrtd"]], ["del", "theorem", "mul_im", ["zsqrtd"]], ["del", "theorem", "mul_re", ["zsqrtd"]], ["del", "theorem", "muld_val", ["zsqrtd"]], ["del", "def", "neg", ["zsqrtd"]], ["del", "theorem", "neg_im", ["zsqrtd"]], ["del", "theorem", "neg_re", ["zsqrtd"]], ["del", "def", "nonneg", ["zsqrtd"]], ["del", "theorem", "nonneg_add", ["zsqrtd"]], ["del", "theorem", "nonneg_add_lem", ["zsqrtd"]], ["del", "theorem", "nonneg_antisymm", ["zsqrtd"]], ["del", "theorem", "nonneg_cases", ["zsqrtd"]], ["del", "theorem", "nonneg_iff_zero_le", ["zsqrtd"]], ["del", "theorem", "nonneg_mul", ["zsqrtd"]], ["del", "theorem", "nonneg_mul_lem", ["zsqrtd"]], ["del", "theorem", "nonneg_muld", ["zsqrtd"]], ["del", "theorem", "nonneg_smul", ["zsqrtd"]], ["del", "def", "nonnegg", ["zsqrtd"]], ["del", "theorem", "nonnegg_cases_left", ["zsqrtd"]], ["del", "theorem", "nonnegg_cases_right", ["zsqrtd"]], ["del", "theorem", "nonnegg_comm", ["zsqrtd"]], ["del", "theorem", "nonnegg_neg_pos", ["zsqrtd"]], ["del", "theorem", "nonnegg_pos_neg", ["zsqrtd"]], ["del", "def", "norm", ["zsqrtd"]], ["del", "theorem", "norm_eq_mul_conj", ["zsqrtd"]], ["del", "theorem", "norm_eq_one_iff", ["zsqrtd"]], ["del", "theorem", "norm_int_cast", ["zsqrtd"]], ["del", "theorem", "norm_mul", ["zsqrtd"]], ["del", "theorem", "norm_nat_cast", ["zsqrtd"]], ["del", "theorem", "norm_nonneg", ["zsqrtd"]], ["del", "theorem", "norm_one", ["zsqrtd"]], ["del", "theorem", "norm_zero", ["zsqrtd"]], ["del", "theorem", "not_divides_square", ["zsqrtd"]], ["del", "theorem", "not_sq_le_succ", ["zsqrtd"]], ["del", "def", "of_int", ["zsqrtd"]], ["del", "theorem", "of_int_eq_coe", ["zsqrtd"]], ["del", "theorem", "of_int_im", ["zsqrtd"]], ["del", "theorem", "of_int_re", ["zsqrtd"]], ["del", "def", "one", ["zsqrtd"]], ["del", "theorem", "one_im", ["zsqrtd"]], ["del", "theorem", "one_re", ["zsqrtd"]], ["del", "theorem", "smul_val", ["zsqrtd"]], ["del", "theorem", "smuld_val", ["zsqrtd"]], ["del", "def", "sq_le", ["zsqrtd"]], ["del", "theorem", "sq_le_add", ["zsqrtd"]], ["del", "theorem", "sq_le_add_mixed", ["zsqrtd"]], ["del", "theorem", "sq_le_cancel", ["zsqrtd"]], ["del", "theorem", "sq_le_mul", ["zsqrtd"]], ["del", "theorem", "sq_le_of_le", ["zsqrtd"]], ["del", "theorem", "sq_le_smul", ["zsqrtd"]], ["del", "def", "sqrtd", ["zsqrtd"]], ["del", "theorem", "sqrtd_im", ["zsqrtd"]], ["del", "theorem", "sqrtd_re", ["zsqrtd"]], ["del", "def", "zero", ["zsqrtd"]], ["del", "theorem", "zero_im", ["zsqrtd"]], ["del", "theorem", "zero_re", ["zsqrtd"]], ["del", "structure", "zsqrtd", []]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1553871814, "sha": "dc7de460", "message": "feat(analysis/convex): convex sets and functions (#834)", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["add", "theorem", "is_linear_map_neg", ["is_linear_map"]], ["add", "theorem", "is_linear_map_smul'", ["is_linear_map"]], ["add", "theorem", "is_linear_map_smul", ["is_linear_map"]]]}, {"oldPath": null, "newPath": "src/analysis/convex.lean", "changes": [["add", "def", "convex", []], ["add", "theorem", "convex_Icc", []], ["add", "theorem", "convex_Ici", []], ["add", "theorem", "convex_Ico", []], ["add", "theorem", "convex_Iic", []], ["add", "theorem", "convex_Iio", []], ["add", "theorem", "convex_Inter", []], ["add", "theorem", "convex_Ioc", []], ["add", "theorem", "convex_Ioi", []], ["add", "theorem", "convex_Ioo", []], ["add", "theorem", "convex_add", []], ["add", "theorem", "convex_affinity", []], ["add", "theorem", "convex_ball", []], ["add", "theorem", "convex_closed_ball", []], ["add", "theorem", "convex_empty", []], ["add", "theorem", "convex_halfplane", []], ["add", "theorem", "convex_halfspace_ge", []], ["add", "theorem", "convex_halfspace_gt", []], ["add", "theorem", "convex_halfspace_im_gt", []], ["add", "theorem", "convex_halfspace_im_le", []], ["add", "theorem", "convex_halfspace_im_lge", []], ["add", "theorem", "convex_halfspace_im_lt", []], ["add", "theorem", "convex_halfspace_le", []], ["add", "theorem", "convex_halfspace_lt", []], ["add", "theorem", "convex_halfspace_re_gt", []], ["add", "theorem", "convex_halfspace_re_le", []], ["add", "theorem", "convex_halfspace_re_lge", []], ["add", "theorem", "convex_halfspace_re_lt", []], ["add", "theorem", "convex_iff:", []], ["add", "theorem", "convex_iff_div:", []], ["add", "theorem", "convex_inter", []], ["add", "theorem", "convex_le_of_convex_on", []], ["add", "theorem", "convex_linear_image'", []], ["add", "theorem", "convex_linear_image", []], ["add", "theorem", "convex_linear_preimage'", []], ["add", "theorem", "convex_linear_preimage", []], ["add", "theorem", "convex_lt_of_convex_on", []], ["add", "theorem", "convex_neg", []], ["add", "theorem", "convex_neg_preimage", []], ["add", "def", "convex_on", []], ["add", "theorem", "convex_on_add", []], ["add", "theorem", "convex_on_dist", []], ["add", "theorem", "convex_on_iff", []], ["add", "theorem", "convex_on_iff_div:", []], ["add", "theorem", "convex_on_linorder", []], ["add", "theorem", "convex_on_smul", []], ["add", "theorem", "convex_on_subset", []], ["add", "theorem", "convex_on_sum", []], ["add", "theorem", "convex_prod", []], ["add", "theorem", "convex_segment", []], ["add", "theorem", "convex_segment_iff", []], ["add", "theorem", "convex_singleton", []], ["add", "theorem", "convex_smul", []], ["add", "theorem", "convex_smul_preimage", []], ["add", "theorem", "convex_sub", []], ["add", "theorem", "convex_sum", []], ["add", "theorem", "convex_sum_iff", []], ["add", "theorem", "convex_translation", []], ["add", "theorem", "convex_univ", []], ["add", "theorem", "le_on_interval_of_convex_on", []], ["add", "theorem", "left_mem_segment", []], ["add", "theorem", "mem_segment_iff'", []], ["add", "theorem", "mem_segment_iff", []], ["add", "theorem", "right_mem_segment", []], ["add", "def", "segment", []], ["add", "theorem", "segment_eq_Icc", []], ["add", "theorem", "segment_symm", []], ["add", "theorem", "segment_translate", []], ["add", "theorem", "segment_translate_image", []]]}, {"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": [["add", "theorem", "image_neg_Iic", ["set"]], ["add", "theorem", "image_neg_Iio", ["set"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "is_linear_map_add", ["is_linear_map"]], ["add", "theorem", "is_linear_map_sub", ["is_linear_map"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "theorem", "smul_im:", ["complex"]], ["add", "theorem", "smul_re:", ["complex"]]]}]}, {"timestamp": 1553864909, "sha": "171e913a", "message": "fix(scripts/remote-install-update-mathlib): add GitPython dependency (#860)", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}]}, {"timestamp": 1553813761, "sha": "2e7f0099", "message": "fix(scripts/deploy_nightly): pushing to the `lean-3.4.2` branch is sometimes blocked (#859)", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1553811075, "sha": "a4fd55ca", "message": "feat(library_search): a simple library_search function (#839)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/library_search.lean", "changes": [["add", "def", "to_string", ["tactic", "library_search", "head_symbol_match"]], ["add", "inductive", "head_symbol_match", ["tactic", "library_search"]]]}, {"oldPath": null, "newPath": "test/library_search/basic.lean", "changes": []}, {"oldPath": null, "newPath": "test/library_search/ring_theory.lean", "changes": []}]}, {"timestamp": 1553803479, "sha": "59caf112", "message": "fix(scripts/update-mathlib): fix imports of python files", "changes": [{"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1553800294, "sha": "6cd336cb", "message": "fix(scripts/update-mathlib): github authentication", "changes": [{"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1553790720, "sha": "1c04a329", "message": "fix(scripts/update-mathlib): update-mathlib shouldn't need github authentication", "changes": [{"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1553781695, "sha": "48df3219", "message": "feat(category_theory/instances): category of groups (#749)", "changes": [{"oldPath": null, "newPath": "src/category_theory/instances/groups.lean", "changes": [["add", "def", "forget_to_Group", ["category_theory", "instances", "AddCommGroup"]], ["add", "def", "AddCommGroup", ["category_theory", "instances"]], ["add", "def", "Group", ["category_theory", "instances"]], ["add", "def", "is_add_comm_group_hom", ["category_theory", "instances"]]]}]}, {"timestamp": 1553790301, "sha": "179d4d08", "message": "refactor(*): unify group/monoid_action, make semimodule extend action (#850)\n* refactor(*): unify group/monoid_action, use standard names, make semimodule extend action\n* Rename action to mul_action\n* Generalize lemmas. Also, add class for multiplicative action on additive structure\n* Add pi-instances\n* Dirty hacky fix\n* Remove #print and set_option pp.all\n* clean up proof, avoid diamonds\n* Fix some build issues\n* Fix build\n* Rename mul_action_add to distrib_mul_action\n* Bump up the type class search depth in some places", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["del", "theorem", "mul_smul", []], ["del", "theorem", "one_smul", []], ["del", "theorem", "smul_add", []], ["del", "theorem", "smul_zero", []]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/field_theory/mv_polynomial.lean", "newPath": "src/field_theory/mv_polynomial.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["del", "theorem", "bijective", ["group_action"]], ["del", "def", "comp_hom", ["group_action"]], ["del", "def", "mul_left_cosets", ["group_action"]], ["del", "theorem", "orbit_eq_iff", ["group_action"]], ["del", "def", "orbit_rel", ["group_action"]], ["del", "def", "to_perm", ["group_action"]], ["del", "def", "comp_hom", ["monoid_action"]], ["del", "def", "fixed_points", ["monoid_action"]], ["del", "theorem", "mem_fixed_points'", ["monoid_action"]], ["del", "theorem", "mem_fixed_points", ["monoid_action"]], ["del", "theorem", "mem_orbit", ["monoid_action"]], ["del", "theorem", "mem_orbit_iff", ["monoid_action"]], ["del", "theorem", "mem_orbit_self", ["monoid_action"]], ["del", "theorem", "mem_stabilizer_iff", ["monoid_action"]], ["del", "def", "orbit", ["monoid_action"]], ["del", "def", "stabilizer", ["monoid_action"]], ["add", "theorem", "bijective", ["mul_action"]], ["add", "def", "comp_hom", ["mul_action"]], ["add", "def", "fixed_points", ["mul_action"]], ["add", "theorem", "mem_fixed_points'", ["mul_action"]], ["add", "theorem", "mem_fixed_points", ["mul_action"]], ["add", "theorem", "mem_orbit", ["mul_action"]], ["add", "theorem", "mem_orbit_iff", ["mul_action"]], ["add", "theorem", "mem_orbit_self", ["mul_action"]], ["add", "theorem", "mem_stabilizer_iff", ["mul_action"]], ["add", "def", "mul_left_cosets", ["mul_action"]], ["add", "def", "orbit", ["mul_action"]], ["add", "theorem", "orbit_eq_iff", ["mul_action"]], ["add", "def", "orbit_rel", ["mul_action"]], ["add", "def", "stabilizer", ["mul_action"]], ["add", "def", "to_perm", ["mul_action"]], ["add", "theorem", "mul_smul", []], ["add", "theorem", "one_smul", []], ["add", "theorem", "smul_add", []], ["add", "theorem", "smul_zero", []]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["del", "theorem", "card_modeq_card_fixed_points", ["group_action"]], ["del", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["group_action"]], ["add", "theorem", "card_modeq_card_fixed_points", ["mul_action"]], ["add", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["mul_action"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1553722119, "sha": "25bab564", "message": "feat(scripts/cache_olean): cache and fetch olean binaries (#766)\n* script setup and documentation\n* fetch mathlib nightly when relevant\n* use credentials to access `github.com`\n* locate correct git directory, and add prompt\n* add confirmation message to setup-dev-scripts\n* adding --build-all option", "changes": [{"oldPath": ".gitignore", "newPath": ".gitignore", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "docs/howto-contribute.md", "newPath": "docs/howto-contribute.md", "changes": []}, {"oldPath": null, "newPath": "scripts/cache-olean.py", "changes": []}, {"oldPath": null, "newPath": "scripts/post-checkout", "changes": []}, {"oldPath": null, "newPath": "scripts/post-commit", "changes": []}, {"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/setup-dev-scripts.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/setup-lean-git-hooks.sh", "changes": []}, {"oldPath": "scripts/setup-update-mathlib.sh", "newPath": null, "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1553723222, "sha": "8838ff35", "message": "feat(algebra/field_power): add fpow_one, one_fpow, fpow_mul, mul_fpow (closes #855)", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["mod", "theorem", "inv_eq_zero", []], ["add", "theorem", "neg_inv'", []], ["add", "theorem", "mk0_coe", ["units"]]]}, {"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "fpow_mul", []], ["add", "theorem", "fpow_one", []], ["add", "theorem", "mul_fpow", []], ["add", "theorem", "one_fpow", []]]}]}, {"timestamp": 1553717704, "sha": "84293543", "message": "feat(analysis): add real.rpow_le_one", "changes": [{"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "theorem", "rpow_le_one", ["real"]]]}]}, {"timestamp": 1553717704, "sha": "4305ad62", "message": "feat(analysis): add rpow_pos_of_pos", "changes": [{"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "theorem", "rpow_pos_of_pos", ["real"]]]}]}, {"timestamp": 1553680655, "sha": "02ca4942", "message": "Remove outparam in normed space (#844)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "theorem", "continuous", ["is_bounded_linear_map"]], ["mod", "theorem", "id", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_comp", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_id", ["is_bounded_linear_map"]], ["mod", "theorem", "is_O_sub", ["is_bounded_linear_map"]], ["mod", "theorem", "lim_zero_bounded_linear_map", ["is_bounded_linear_map"]], ["mod", "theorem", "neg", ["is_bounded_linear_map"]], ["mod", "theorem", "smul", ["is_bounded_linear_map"]], ["mod", "theorem", "sub", ["is_bounded_linear_map"]], ["mod", "theorem", "tendsto", ["is_bounded_linear_map"]], ["mod", "def", "to_linear_map", ["is_bounded_linear_map"]], ["mod", "theorem", "zero", ["is_bounded_linear_map"]], ["mod", "structure", "is_bounded_linear_map", []]]}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["mod", "theorem", "is_o", ["has_fderiv_at"]], ["mod", "theorem", "has_fderiv_at_filter_id", []], ["mod", "theorem", "has_fderiv_at_id", []], ["mod", "theorem", "has_fderiv_at_within_id", []]]}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}]}, {"timestamp": 1553674835, "sha": "52fddda2", "message": "feat(algebra/archimedean): lemmas about powers of elements (#802)", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "exists_int_pow_near", []], ["add", "theorem", "exists_nat_pow_near", []]]}]}, {"timestamp": 1553618147, "sha": "17e40bbe", "message": "feat(tactic/congr): apply to `iff` propositions (#833)", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/tactics.lean", "newPath": "test/tactics.lean", "changes": []}]}, {"timestamp": 1553637210, "sha": "c3a90285", "message": "fix(data/polynomial): (nat_)degree_map' assumed a comm_ring instead of a comm_semiring", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1553627238, "sha": "a0166524", "message": "feat(data/finset): add range_add_one'", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "range_add_one'", ["finset"]]]}]}, {"timestamp": 1553627238, "sha": "0ea37e90", "message": "feat(algebra/big_operators): add prod_map, sum_map", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_map", ["finset"]]]}]}, {"timestamp": 1553627238, "sha": "d3c68fc6", "message": "feat(analysis/normed_space): tendsto_zero_iff_norm_tendsto_zero", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "continuous_norm", []], ["mod", "theorem", "lim_norm", []], ["mod", "theorem", "lim_norm_zero", []], ["add", "theorem", "tendsto_zero_iff_norm_tendsto_zero", []]]}]}, {"timestamp": 1553627238, "sha": "df08058b", "message": "refactor(analysis/normed_space): rename norm_mul -> norm_mul_le; use norm_mul for the equality in normed fields; and norm_mul_le for the inequality in normed_rings", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_mul", []], ["add", "theorem", "norm_mul_le", []], ["mod", "theorem", "norm_pow", []], ["add", "theorem", "norm_pow_le", []], ["add", "theorem", "norm_prod", []], ["del", "theorem", "norm_pow", ["normed_field"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "abs_of_nat", ["complex"]]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}]}, {"timestamp": 1553624520, "sha": "bd21b0ed", "message": "feat(analyis/normed_space): add normed_field instance for ℂ", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_int", ["complex"]], ["add", "theorem", "norm_int_of_nonneg", ["complex"]], ["add", "theorem", "norm_nat", ["complex"]], ["add", "theorem", "norm_rat", ["complex"]], ["add", "theorem", "norm_real", ["complex"]]]}]}, {"timestamp": 1553624520, "sha": "a01cf868", "message": "feat(data/multiset,data/finset): add multiset./finset.le_sum_of_additive", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "abs_sum_le_sum_abs", ["finset"]], ["add", "theorem", "le_sum_of_subadditive", ["finset"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["mod", "theorem", "norm_triangle_sum", []]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "abs_sum_le_sum_abs", ["multiset"]], ["add", "theorem", "le_sum_of_subadditive", ["multiset"]]]}]}, {"timestamp": 1553624520, "sha": "c9122539", "message": "feat(algebra/group_power): add lt_of_pow_lt_pow", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "lt_of_pow_lt_pow", []], ["mod", "theorem", "pow_le_pow_of_le_left", []]]}]}, {"timestamp": 1553624520, "sha": "fd37f961", "message": "feat(data/fin): add injective_cast_le", "changes": [{"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": [["add", "theorem", "injective_cast_le", ["fin"]]]}]}, {"timestamp": 1553624520, "sha": "c0c2edb1", "message": "feat(algebra/big_operators): add Gauss' summation formula", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "sum_range_id", ["finset"]], ["add", "theorem", "sum_range_id_mul_two", ["finset"]]]}]}, {"timestamp": 1553624520, "sha": "cfeb887b", "message": "feat(data/polynomial): degree_map', nat_degree_map' semiring variant of degree_map, nat_degree_map", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "degree_map'", ["polynomial"]], ["add", "theorem", "nat_degree_map'", ["polynomial"]]]}]}, {"timestamp": 1553624520, "sha": "aa2c6e22", "message": "feat(data/mv_polynomial): more about renaming", "changes": [{"oldPath": "src/data/mv_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": [["add", "theorem", "injective_rename", ["mv_polynomial"]], ["add", "theorem", "rename_eq", ["mv_polynomial"]], ["add", "theorem", "rename_monomial", ["mv_polynomial"]], ["add", "theorem", "total_degree_rename_le", ["mv_polynomial"]]]}]}, {"timestamp": 1553624520, "sha": "5b73f46b", "message": "chore(data/mv_polynomial): use type name as filename", "changes": [{"oldPath": "src/category_theory/instances/rings.lean", "newPath": "src/category_theory/instances/rings.lean", "changes": []}, {"oldPath": "src/data/multivariate_polynomial.lean", "newPath": "src/data/mv_polynomial.lean", "changes": []}, {"oldPath": "src/linear_algebra/finsupp.lean", "newPath": "src/linear_algebra/finsupp.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}]}, {"timestamp": 1553624520, "sha": "8ccca3f7", "message": "feat(data/finsupp): add emb_domain", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "def", "emb_domain", ["finsupp"]], ["add", "theorem", "emb_domain_apply", ["finsupp"]], ["add", "theorem", "emb_domain_eq_map_domain", ["finsupp"]], ["add", "theorem", "emb_domain_map_range", ["finsupp"]], ["add", "theorem", "emb_domain_notin_range", ["finsupp"]], ["add", "theorem", "emb_domain_zero", ["finsupp"]], ["add", "theorem", "injective_map_domain", ["finsupp"]], ["add", "theorem", "support_emb_domain", ["finsupp"]]]}]}, {"timestamp": 1553624520, "sha": "d7bd41ff", "message": "feat(linear_algebra/dimension): add exists_mem_ne_zero_of_dim_pos", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "exists_mem_ne_zero_of_dim_pos", []], ["add", "theorem", "exists_mem_ne_zero_of_ne_bot", []]]}]}, {"timestamp": 1553624520, "sha": "22352ff2", "message": "feat(linear_algebra/dimension): add dim_span_le; add rank_finset_sum_le", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_span_le", []], ["add", "theorem", "dim_span_of_finset", []], ["add", "theorem", "rank_finset_sum_le", []], ["add", "theorem", "rank_zero", []]]}]}, {"timestamp": 1553622391, "sha": "f882b8b7", "message": "feat(data/polynomial): rec_on_horner (#739)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "coeff_mk", ["polynomial"]], ["add", "theorem", "degree_div_X_lt", ["polynomial"]], ["add", "theorem", "degree_le_zero_iff", ["polynomial"]], ["add", "theorem", "degree_lt_degree_mul_X", ["polynomial"]], ["add", "theorem", "degree_pos_induction_on", ["polynomial"]], ["add", "def", "div_X", ["polynomial"]], ["add", "theorem", "div_X_C", ["polynomial"]], ["add", "theorem", "div_X_add", ["polynomial"]], ["add", "theorem", "div_X_eq_zero_iff", ["polynomial"]], ["add", "theorem", "div_X_mul_X_add", ["polynomial"]], ["add", "def", "of_polynomial_ne", ["polynomial", "nonzero_comm_semiring"]], ["add", "def", "rec_on_horner", ["polynomial"]]]}]}, {"timestamp": 1553559079, "sha": "410ae5d9", "message": "feat(group_theory/subgroup): add inv_iff_ker' and related (#790)\n* feat(group_theory/subgroup): add inv_iff_ker' and related\n* correcting spacing and adding to_additive attribute\n* changing name to ker-mk", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["add", "theorem", "ker_mk", ["quotient_group"]]]}, {"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "inv_iff_ker'", ["is_group_hom"]], ["add", "theorem", "inv_ker_one'", ["is_group_hom"]], ["add", "theorem", "one_iff_ker_inv'", ["is_group_hom"]], ["add", "theorem", "one_ker_inv'", ["is_group_hom"]]]}]}, {"timestamp": 1553529815, "sha": "0bb64a21", "message": "feat(tactic/solve_by_elim): working with multiple goals (#838)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "test/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1553541709, "sha": "291a4f35", "message": "refactor(algebra/group_action): use notation for monoid/group actions (#846)\n* refactor(module_action): bundle and introduce notation\n* fix(linear_algebra/determinant): fix the coercion issue using a local notation\n* fix(linear_algebra/dimension): fix build", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": [["add", "theorem", "bijective", ["group_action"]], ["add", "def", "comp_hom", ["group_action"]], ["add", "def", "mul_left_cosets", ["group_action"]], ["add", "theorem", "orbit_eq_iff", ["group_action"]], ["add", "def", "orbit_rel", ["group_action"]], ["add", "def", "to_perm", ["group_action"]], ["del", "theorem", "bijective", ["is_group_action"]], ["del", "theorem", "comp_hom", ["is_group_action"]], ["del", "def", "mul_left_cosets", ["is_group_action"]], ["del", "theorem", "orbit_eq_iff", ["is_group_action"]], ["del", "def", "orbit_rel", ["is_group_action"]], ["del", "def", "to_perm", ["is_group_action"]], ["del", "theorem", "comp_hom", ["is_monoid_action"]], ["del", "def", "fixed_points", ["is_monoid_action"]], ["del", "theorem", "mem_fixed_points'", ["is_monoid_action"]], ["del", "theorem", "mem_fixed_points", ["is_monoid_action"]], ["del", "theorem", "mem_orbit", ["is_monoid_action"]], ["del", "theorem", "mem_orbit_iff", ["is_monoid_action"]], ["del", "theorem", "mem_orbit_self", ["is_monoid_action"]], ["del", "theorem", "mem_stabilizer_iff", ["is_monoid_action"]], ["del", "def", "orbit", ["is_monoid_action"]], ["del", "def", "stabilizer", ["is_monoid_action"]], ["add", "def", "comp_hom", ["monoid_action"]], ["add", "def", "fixed_points", ["monoid_action"]], ["add", "theorem", "mem_fixed_points'", ["monoid_action"]], ["add", "theorem", "mem_fixed_points", ["monoid_action"]], ["add", "theorem", "mem_orbit", ["monoid_action"]], ["add", "theorem", "mem_orbit_iff", ["monoid_action"]], ["add", "theorem", "mem_orbit_self", ["monoid_action"]], ["add", "theorem", "mem_stabilizer_iff", ["monoid_action"]], ["add", "def", "orbit", ["monoid_action"]], ["add", "def", "stabilizer", ["monoid_action"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": [["add", "theorem", "card_modeq_card_fixed_points", ["group_action"]], ["add", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["group_action"]], ["del", "theorem", "card_modeq_card_fixed_points", ["is_group_action"]], ["del", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["is_group_action"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}]}, {"timestamp": 1553538248, "sha": "a1158d84", "message": "feat(algebra/module): every abelian group is a Z-module (#848)", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}]}, {"timestamp": 1553533167, "sha": "cb5e185f", "message": "refactor(data/equiv): equiv_injective_surjective (#849)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "src/group_theory/perm/cycles.lean", "newPath": "src/group_theory/perm/cycles.lean", "changes": []}, {"oldPath": "src/group_theory/perm/sign.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "src/set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": []}]}, {"timestamp": 1553376496, "sha": "cd7402d6", "message": "Minor clarification to simpa doc (#842)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1553345814, "sha": "b0b33abe", "message": "fix(import): remove relative imports", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}]}, {"timestamp": 1553270534, "sha": "c29769f7", "message": "fix(ring_theory/multiplicity): correct spelling mistake in docstring", "changes": [{"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}]}, {"timestamp": 1553260963, "sha": "b5bb4469", "message": "fix(doc/extra/tactic_writing): fix a minor error (#841) [ci-skip]\n* fix(doc/extra/tactic_writing): fix a minor error\n* comma splice", "changes": [{"oldPath": "docs/extras/tactic_writing.md", "newPath": "docs/extras/tactic_writing.md", "changes": []}]}, {"timestamp": 1553214518, "sha": "989efaba", "message": "feat(data/equiv/algebra): add add_equiv and mul_equiv (#789)\n* feat(data/equiv/algebra): add monoid_equiv and group_equiv\n* refactor; now using mul_equiv; adding add_equiv\n* tidy\n* namechange broke my code; now fixed\n* next effort\n* switching is_mul_hom back to explicit args\n* removing more implicits\n* typo\n* switching back to implicits (to fix mathlib breakage)\n* Making is_mul_hom and is_add_hom classes\n* adding more to_additive", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "comp'", ["is_mul_hom"]], ["add", "theorem", "comp", ["is_mul_hom"]], ["add", "theorem", "id", ["is_mul_hom"]], ["add", "theorem", "map_comp'", ["units"]], ["add", "theorem", "map_comp", ["units"]], ["add", "theorem", "map_id", ["units"]]]}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "def", "refl", ["add_equiv"]], ["add", "def", "symm", ["add_equiv"]], ["add", "def", "trans", ["add_equiv"]], ["add", "structure", "add_equiv", []], ["add", "theorem", "one", ["mul_equiv"]], ["add", "def", "refl", ["mul_equiv"]], ["add", "def", "symm", ["mul_equiv"]], ["add", "def", "trans", ["mul_equiv"]], ["add", "structure", "mul_equiv", []], ["add", "def", "map_equiv", ["units"]]]}]}, {"timestamp": 1553211865, "sha": "798a08d4", "message": "feat(group_theory/submonoid): add closure_singleton (#810)\n* feat(group_theory/submonoid): add closure_singleton\n* adding some to_additive", "changes": [{"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "closure_singleton", ["add_monoid"]], ["add", "theorem", "closure_singleton", ["monoid"]], ["add", "theorem", "self_mem", ["multiples"]], ["add", "theorem", "zero_mem", ["multiples"]], ["add", "theorem", "one_mem", ["powers"]], ["add", "theorem", "self_mem", ["powers"]]]}]}, {"timestamp": 1553076968, "sha": "098c2cb1", "message": "feat(tactic/wlog): `discharger` defaults to classical `tauto` (#836)", "changes": [{"oldPath": "src/tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}]}, {"timestamp": 1552867469, "sha": "d60d1616", "message": "feat(linear_algebra/basic): add ring instance (#823)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "def", "endomorphism_ring", ["linear_map"]], ["mod", "def", "general_linear_group", ["linear_map"]]]}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}]}, {"timestamp": 1552856886, "sha": "9ff5e8d7", "message": "feat(algebra/punit_instances): punit instances (#828)", "changes": [{"oldPath": null, "newPath": "src/algebra/punit_instances.lean", "changes": [["add", "theorem", "Inf_eq", ["punit"]], ["add", "theorem", "Sup_eq", ["punit"]], ["add", "theorem", "add_eq", ["punit"]], ["add", "theorem", "bot_eq", ["punit"]], ["add", "theorem", "inf_eq", ["punit"]], ["add", "theorem", "inv_eq", ["punit"]], ["add", "theorem", "mul_eq", ["punit"]], ["add", "theorem", "neg_eq", ["punit"]], ["add", "theorem", "not_lt", ["punit"]], ["add", "theorem", "one_eq", ["punit"]], ["add", "theorem", "smul_eq", ["punit"]], ["add", "theorem", "sup_eq", ["punit"]], ["add", "theorem", "top_eq", ["punit"]], ["add", "theorem", "zero_eq", ["punit"]]]}]}, {"timestamp": 1552856834, "sha": "df996be4", "message": "fix(topology/algebra/group): fix binders for top group extensionality (#826)", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}]}, {"timestamp": 1552813653, "sha": "e8bdc7fc", "message": "feat(order/filter/filter_product): build hyperreals (#801)\nConstruction of filter products, ultraproducts, some instances, hyperreal numbers.", "changes": [{"oldPath": "src/algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": [["add", "theorem", "inv_eq_zero", []]]}, {"oldPath": null, "newPath": "src/data/real/hyperreal.lean", "changes": [["add", "theorem", "epsilon_eq_inv_omega", ["hyperreal"]], ["add", "theorem", "epsilon_lt_pos", ["hyperreal"]], ["add", "theorem", "epsilon_mul_omega", ["hyperreal"]], ["add", "theorem", "epsilon_ne_zero", ["hyperreal"]], ["add", "theorem", "epsilon_pos", ["hyperreal"]], ["add", "theorem", "gt_of_tendsto_zero_of_neg", ["hyperreal"]], ["add", "def", "infinitesimal", ["hyperreal"]], ["add", "theorem", "infinitesimal_epsilon", ["hyperreal"]], ["add", "theorem", "infinitesimal_of_tendsto_zero", ["hyperreal"]], ["add", "theorem", "inv_epsilon_eq_omega", ["hyperreal"]], ["add", "def", "is_st", ["hyperreal"]], ["add", "theorem", "is_st_unique", ["hyperreal"]], ["add", "theorem", "lt_of_tendsto_zero_of_pos", ["hyperreal"]], ["add", "theorem", "neg_lt_of_tendsto_zero_of_neg", ["hyperreal"]], ["add", "theorem", "omega_ne_zero", ["hyperreal"]], ["add", "theorem", "omega_pos", ["hyperreal"]], ["add", "def", "hyperreal", []]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["del", "theorem", "inv_eq_zero", []]]}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "set_of_eq_eq_singleton", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "cofinite_ne_bot", ["filter"]], ["add", "theorem", "compl_mem_hyperfilter_of_finite", ["filter"]], ["add", "theorem", "hyperfilter_le_cofinite", ["filter"]], ["add", "theorem", "is_ultrafilter_hyperfilter", ["filter"]], ["add", "theorem", "mem_hyperfilter_of_finite_compl", ["filter"]], ["add", "theorem", "nmem_hyperfilter_of_finite", ["filter"]]]}, {"oldPath": null, "newPath": "src/order/filter/filter_product.lean", "changes": [["add", "def", "bigly_equal", ["filter"]], ["add", "def", "lift", ["filter", "filter_product"]], ["add", "def", "lift_rel", ["filter", "filter_product"]], ["add", "def", "lift_rel₂", ["filter", "filter_product"]], ["add", "def", "lift₂", ["filter", "filter_product"]], ["add", "theorem", "lt_def'", ["filter", "filter_product"]], ["add", "theorem", "lt_def", ["filter", "filter_product"]], ["add", "def", "of", ["filter", "filter_product"]], ["add", "theorem", "of_add", ["filter", "filter_product"]], ["add", "theorem", "of_eq", ["filter", "filter_product"]], ["add", "theorem", "of_eq_coe", ["filter", "filter_product"]], ["add", "theorem", "of_eq_zero", ["filter", "filter_product"]], ["add", "theorem", "of_id", ["filter", "filter_product"]], ["add", "theorem", "of_inj", ["filter", "filter_product"]], ["add", "theorem", "of_inv", ["filter", "filter_product"]], ["add", "theorem", "of_le", ["filter", "filter_product"]], ["add", "theorem", "of_le_of_le", ["filter", "filter_product"]], ["add", "theorem", "of_lt", ["filter", "filter_product"]], ["add", "theorem", "of_lt_of_lt", ["filter", "filter_product"]], ["add", "theorem", "of_mul", ["filter", "filter_product"]], ["add", "theorem", "of_ne", ["filter", "filter_product"]], ["add", "theorem", "of_ne_zero", ["filter", "filter_product"]], ["add", "theorem", "of_neg", ["filter", "filter_product"]], ["add", "theorem", "of_one", ["filter", "filter_product"]], ["add", "theorem", "of_rel", ["filter", "filter_product"]], ["add", "theorem", "of_rel_of_rel", ["filter", "filter_product"]], ["add", "theorem", "of_rel_of_rel₂", ["filter", "filter_product"]], ["add", "theorem", "of_rel₂", ["filter", "filter_product"]], ["add", "def", "of_seq", ["filter", "filter_product"]], ["add", "theorem", "of_seq_add", ["filter", "filter_product"]], ["add", "theorem", "of_seq_fun", ["filter", "filter_product"]], ["add", "theorem", "of_seq_fun₂", ["filter", "filter_product"]], ["add", "theorem", "of_seq_inv", ["filter", "filter_product"]], ["add", "theorem", "of_seq_mul", ["filter", "filter_product"]], ["add", "theorem", "of_seq_neg", ["filter", "filter_product"]], ["add", "theorem", "of_seq_one", ["filter", "filter_product"]], ["add", "theorem", "of_seq_zero", ["filter", "filter_product"]], ["add", "theorem", "of_zero", ["filter", "filter_product"]], ["add", "def", "filterprod", ["filter"]]]}]}, {"timestamp": 1552728648, "sha": "0c2c2bdd", "message": "feat(group_theory/perm/cycles): cycle_factors (#815)", "changes": [{"oldPath": null, "newPath": "src/group_theory/perm/cycles.lean", "changes": [["add", "theorem", "apply_eq_self_iff_of_same_cycle", ["equiv", "perm"]], ["add", "def", "cycle_factors", ["equiv", "perm"]], ["add", "def", "cycle_factors_aux", ["equiv", "perm"]], ["add", "def", "cycle_of", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply_of_not_same_cycle", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply_of_same_cycle", ["equiv", "perm"]], ["add", "theorem", "cycle_of_apply_self", ["equiv", "perm"]], ["add", "theorem", "cycle_of_cycle", ["equiv", "perm"]], ["add", "theorem", "cycle_of_gpow_apply_self", ["equiv", "perm"]], ["add", "theorem", "cycle_of_inv", ["equiv", "perm"]], ["add", "theorem", "cycle_of_one", ["equiv", "perm"]], ["add", "theorem", "cycle_of_pow_apply_self", ["equiv", "perm"]], ["add", "theorem", "is_cycle_cycle_of", ["equiv", "perm"]], ["add", "theorem", "refl", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "symm", ["equiv", "perm", "same_cycle"]], ["add", "theorem", "trans", ["equiv", "perm", "same_cycle"]], ["add", "def", "same_cycle", ["equiv", "perm"]], ["add", "theorem", "same_cycle_apply", ["equiv", "perm"]], ["add", "theorem", "same_cycle_cycle", ["equiv", "perm"]], ["add", "theorem", "same_cycle_inv", ["equiv", "perm"]], ["add", "theorem", "same_cycle_inv_apply", ["equiv", "perm"]], ["add", "theorem", "same_cycle_of_is_cycle", ["equiv", "perm"]]]}, {"oldPath": "src/group_theory/perm.lean", "newPath": "src/group_theory/perm/sign.lean", "changes": [["add", "theorem", "card_support_swap_mul", ["equiv", "perm"]], ["add", "theorem", "symm", ["equiv", "perm", "disjoint"]], ["add", "def", "disjoint", ["equiv", "perm"]], ["add", "theorem", "disjoint_comm", ["equiv", "perm"]], ["add", "theorem", "disjoint_mul_comm", ["equiv", "perm"]], ["add", "theorem", "disjoint_mul_left", ["equiv", "perm"]], ["add", "theorem", "disjoint_mul_right", ["equiv", "perm"]], ["add", "theorem", "disjoint_one_left", ["equiv", "perm"]], ["add", "theorem", "disjoint_one_right", ["equiv", "perm"]], ["add", "theorem", "disjoint_prod_perm", ["equiv", "perm"]], ["add", "theorem", "disjoint_prod_right", ["equiv", "perm"]], ["add", "theorem", "exists_gpow_eq_of_is_cycle", ["equiv", "perm"]], ["del", "theorem", "exists_int_pow_eq_of_is_cycle", ["equiv", "perm"]], ["add", "theorem", "gpow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "gpow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["mod", "def", "is_cycle", ["equiv", "perm"]], ["mod", "theorem", "is_cycle_inv", ["equiv", "perm"]], ["add", "theorem", "ne_and_ne_of_swap_mul_apply_ne_self", ["equiv", "perm"]], ["add", "theorem", "of_subtype_one", ["equiv", "perm"]], ["add", "theorem", "pow_apply_eq_of_apply_apply_eq_self", ["equiv", "perm"]], ["del", "theorem", "pow_apply_eq_of_apply_apply_eq_self_int", ["equiv", "perm"]], ["del", "theorem", "pow_apply_eq_of_apply_apply_eq_self_nat", ["equiv", "perm"]], ["add", "theorem", "pow_apply_eq_self_of_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "subtype_perm_one", ["equiv", "perm"]], ["del", "theorem", "support_swap_mul", ["equiv", "perm"]], ["del", "theorem", "support_swap_mul_cycle", ["equiv", "perm"]], ["add", "theorem", "support_swap_mul_eq", ["equiv", "perm"]], ["add", "theorem", "swap_induction_on", ["equiv", "perm"]]]}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}]}, {"timestamp": 1552728521, "sha": "7b001c9c", "message": "feat(data/set/intervals): add missing intervals + some lemmas (#805)\nThe lemmas about Icc ⊆ I** are important for convexity", "changes": [{"oldPath": "src/data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": [["add", "theorem", "Icc_subset_Icc_iff", ["set"]], ["add", "theorem", "Icc_subset_Ici_iff", ["set"]], ["add", "theorem", "Icc_subset_Ico_iff", ["set"]], ["add", "theorem", "Icc_subset_Iic_iff", ["set"]], ["add", "theorem", "Icc_subset_Iio_iff", ["set"]], ["add", "theorem", "Icc_subset_Ioc_iff", ["set"]], ["add", "theorem", "Icc_subset_Ioi_iff", ["set"]], ["add", "theorem", "Icc_subset_Ioo_iff", ["set"]], ["add", "def", "Ici", ["set"]], ["add", "theorem", "Ici_ne_empty", ["set"]], ["add", "def", "Iic", ["set"]], ["add", "theorem", "Iic_ne_empty", ["set"]], ["add", "def", "Ioc", ["set"]], ["add", "theorem", "Ioc_eq_empty", ["set"]], ["add", "def", "Ioi", ["set"]], ["add", "theorem", "Ioi_ne_empty", ["set"]], ["add", "theorem", "mem_Ici", ["set"]], ["add", "theorem", "mem_Iic", ["set"]], ["add", "theorem", "mem_Ioc", ["set"]], ["add", "theorem", "mem_Ioi", ["set"]]]}]}, {"timestamp": 1552559561, "sha": "2bf44d31", "message": "refactor(*): rename metric_space_subtype to subtype.metric_space (#817)", "changes": [{"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}]}, {"timestamp": 1552559513, "sha": "c5afc52a", "message": "feat(topology/metric_space/baire): Baire theorem (#816)", "changes": [{"oldPath": "src/data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": [["add", "theorem", "countable_prod", ["set"]], ["add", "theorem", "exists_surjective_of_countable", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bInter_image", ["set"]], ["add", "theorem", "bInter_range", ["set"]], ["add", "theorem", "bUnion_image", ["set"]], ["add", "theorem", "bUnion_range", ["set"]], ["add", "theorem", "sInter_bUnion", ["set"]], ["add", "theorem", "sInter_range", ["set"]], ["add", "theorem", "sInter_union_sInter", ["set"]], ["add", "theorem", "sUnion_bUnion", ["set"]], ["add", "theorem", "sUnion_inter_sUnion", ["set"]], ["add", "theorem", "sUnion_range", ["set"]]]}, {"oldPath": "src/order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": [["add", "theorem", "Inf_sup_Inf", ["lattice"]], ["add", "theorem", "Inf_sup_eq", ["lattice"]], ["add", "theorem", "Sup_inf_Sup", ["lattice"]], ["add", "theorem", "Sup_inf_eq", ["lattice"]]]}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_le_infi_of_subset", ["lattice"]], ["add", "theorem", "supr_le_supr_of_subset", ["lattice"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "interior_frontier", []], ["add", "theorem", "is_closed_frontier", []]]}, {"oldPath": null, "newPath": "src/topology/metric_space/baire.lean", "changes": [["add", "theorem", "dense_Inter_of_Gδ", []], ["add", "theorem", "dense_Inter_of_open", []], ["add", "theorem", "dense_Inter_of_open_nat", []], ["add", "theorem", "dense_Union_interior_of_closed", []], ["add", "theorem", "dense_bInter_of_Gδ", []], ["add", "theorem", "dense_bInter_of_open", []], ["add", "theorem", "dense_bUnion_interior_of_closed", []], ["add", "theorem", "dense_sInter_of_Gδ", []], ["add", "theorem", "dense_sInter_of_open", []], ["add", "theorem", "dense_sUnion_interior_of_closed", []], ["add", "theorem", "union", ["is_Gδ"]], ["add", "def", "is_Gδ", []], ["add", "theorem", "is_Gδ_Inter_of_open", []], ["add", "theorem", "is_Gδ_bInter_of_open", []], ["add", "theorem", "is_Gδ_sInter", []], ["add", "theorem", "is_Gδ", ["is_open"]], ["add", "theorem", "nonempty_interior_of_Union_of_closed", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "mem_closed_ball_self", ["metric"]]]}]}, {"timestamp": 1552520707, "sha": "72100bd5", "message": "feat(tactic/squeeze,hole): remove needless qualifications in names", "changes": [{"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1552397866, "sha": "82f79a58", "message": "feat(data/list|multiset|finset): lemmas about intervals in nat (#795)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "image_add", ["finset", "Ico"]], ["add", "theorem", "image_sub", ["finset", "Ico"]], ["add", "theorem", "inter_consecutive", ["finset", "Ico"]], ["del", "theorem", "map_add", ["finset", "Ico"]], ["mod", "theorem", "pred_singleton", ["finset", "Ico"]], ["add", "theorem", "succ_top'", ["finset", "Ico"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "bag_inter_consecutive", ["list", "Ico"]], ["add", "theorem", "inter_consecutive", ["list", "Ico"]], ["add", "theorem", "map_sub", ["list", "Ico"]], ["mod", "theorem", "pred_singleton", ["list", "Ico"]], ["add", "theorem", "map_sub_range'", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "inter_consecutive", ["multiset", "Ico"]], ["add", "theorem", "map_sub", ["multiset", "Ico"]], ["mod", "theorem", "pred_singleton", ["multiset", "Ico"]]]}]}, {"timestamp": 1552398814, "sha": "2738f9b4", "message": "chore(topology/*): @uniformity α _ becomes 𝓤 α (#814)\nThis is a binder type change and a local notation", "changes": [{"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["mod", "theorem", "uniformity_eq_comap_nhds_zero'", []], ["mod", "theorem", "uniformity_eq_comap_nhds_zero", []], ["mod", "theorem", "uniformity_translate", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "uniformity_dist'", ["metric"]], ["mod", "theorem", "uniformity_dist", ["metric"]], ["mod", "theorem", "uniformity_edist", []]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "uniformity_edist''", []], ["mod", "theorem", "uniformity_edist'", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "comp_le_uniformity", []], ["mod", "theorem", "comp_mem_uniformity_sets", []], ["mod", "theorem", "comp_symm_of_uniformity", []], ["mod", "theorem", "interior_mem_uniformity", []], ["mod", "theorem", "mem_nhds_left", []], ["mod", "theorem", "mem_nhds_right", []], ["mod", "theorem", "mem_uniformity_is_closed", []], ["mod", "theorem", "nhds_eq_comap_uniformity", []], ["mod", "theorem", "nhds_eq_uniformity", []], ["mod", "theorem", "nhdset_of_mem_uniformity", []], ["mod", "theorem", "refl_le_uniformity", []], ["mod", "theorem", "refl_mem_uniformity", []], ["mod", "theorem", "symm_le_uniformity", []], ["mod", "theorem", "symm_of_uniformity", []], ["mod", "theorem", "tendsto_const_uniformity", []], ["mod", "theorem", "tendsto_left_nhds_uniformity", []], ["mod", "theorem", "tendsto_right_nhds_uniformity", []], ["mod", "theorem", "tendsto_swap_uniformity", []], ["mod", "def", "uniformity", []], ["mod", "theorem", "uniformity_eq_symm", []], ["mod", "theorem", "uniformity_eq_uniformity_closure", []], ["mod", "theorem", "uniformity_eq_uniformity_interior", []], ["mod", "theorem", "uniformity_le_symm", []]]}, {"oldPath": "src/topology/uniform_space/cauchy.lean", "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["mod", "def", "cauchy", []], ["mod", "theorem", "cauchy_iff", []], ["mod", "theorem", "cauchy_map_iff", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1552352694, "sha": "33602670", "message": "feat(tactic/basic): folding over the environment, to get all declarations (#798)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1552320712, "sha": "bde8690e", "message": "feat(data/alist,data/finmap): union (#750)", "changes": [{"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["add", "theorem", "ext_iff", ["finmap"]], ["add", "theorem", "induction_on₂", ["finmap"]], ["add", "theorem", "induction_on₃", ["finmap"]], ["add", "theorem", "keys_union", ["finmap"]], ["add", "theorem", "lookup_empty", ["finmap"]], ["add", "theorem", "lookup_union_left", ["finmap"]], ["add", "theorem", "lookup_union_right", ["finmap"]], ["mod", "theorem", "mem_insert", ["finmap"]], ["add", "theorem", "mem_lookup_union", ["finmap"]], ["add", "theorem", "mem_lookup_union_middle", ["finmap"]], ["add", "theorem", "mem_union", ["finmap"]], ["add", "def", "union", ["finmap"]], ["add", "theorem", "union_to_finmap", ["finmap"]]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["add", "theorem", "empty_entries", ["alist"]], ["add", "theorem", "empty_union", ["alist"]], ["add", "theorem", "lookup_empty", ["alist"]], ["mod", "theorem", "lookup_insert_ne", ["alist"]], ["add", "theorem", "lookup_union_left", ["alist"]], ["add", "theorem", "lookup_union_right", ["alist"]], ["mod", "theorem", "mem_insert", ["alist"]], ["add", "theorem", "mem_lookup_union", ["alist"]], ["add", "theorem", "mem_lookup_union_middle", ["alist"]], ["add", "theorem", "mem_union", ["alist"]], ["add", "theorem", "perm_union", ["alist"]], ["add", "theorem", "singleton_entries", ["alist"]], ["add", "def", "union", ["alist"]], ["add", "theorem", "union_empty", ["alist"]], ["add", "theorem", "union_entries", ["alist"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["add", "theorem", "kerase_append_left", ["list"]], ["add", "theorem", "kerase_append_right", ["list"]], ["add", "theorem", "kerase_comm", ["list"]], ["add", "def", "kunion", ["list"]], ["add", "theorem", "kunion_cons", ["list"]], ["add", "theorem", "kunion_kerase", ["list"]], ["add", "theorem", "kunion_nil", ["list"]], ["add", "theorem", "kunion_nodupkeys", ["list"]], ["mod", "theorem", "lookup_kinsert_ne", ["list"]], ["add", "theorem", "lookup_kunion_left", ["list"]], ["add", "theorem", "lookup_kunion_right", ["list"]], ["mod", "theorem", "mem_keys_kinsert", ["list"]], ["add", "theorem", "mem_keys_kunion", ["list"]], ["add", "theorem", "mem_lookup_kunion", ["list"]], ["add", "theorem", "mem_lookup_kunion_middle", ["list"]], ["add", "theorem", "nil_kunion", ["list"]], ["add", "theorem", "perm_kunion", ["list"]], ["add", "theorem", "perm_kunion_left", ["list"]], ["add", "theorem", "perm_kunion_right", ["list"]]]}]}, {"timestamp": 1552324150, "sha": "eb96a25d", "message": "feat(topology/algebra/group): extensionality for top group structure", "changes": [{"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "ext", ["topological_group"]]]}]}, {"timestamp": 1552313180, "sha": "69249d8b", "message": "feat(topology/algebra/monoid): add is_submonoid.mem_nhds_one (#809)", "changes": [{"oldPath": "src/topology/algebra/monoid.lean", "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "mem_nhds_one", ["is_submonoid"]]]}]}, {"timestamp": 1552153760, "sha": "51c31cea", "message": "refactor(data/list): rm redundant eq_nil_of_forall_not_mem (#804)", "changes": [{"oldPath": "src/data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["del", "theorem", "eq_nil_of_forall_not_mem", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}]}, {"timestamp": 1552131278, "sha": "e8818faf", "message": "feat(data/set/finite): add finite_lt_nat (#807)", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_lt_nat", ["set"]]]}]}, {"timestamp": 1552075850, "sha": "7de57e84", "message": "feat(ring_theory/noetherian): Nakayama's Lemma (#778)\n* feat(ring_theory/noetherian): Nakayama's Lemma\n* Update src/ring_theory/noetherian.lean\nCo-Authored-By: kckennylau ", "changes": [{"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "mem_smul_span_singleton", ["submodule"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul", ["submodule"]]]}]}, {"timestamp": 1552057305, "sha": "1159fa95", "message": "refactot(data/equiv/basic): rename apply_inverse_apply to apply_symm_apply (#800)", "changes": [{"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["del", "theorem", "apply_inverse_apply", ["equiv"]], ["add", "theorem", "apply_symm_apply", ["equiv"]], ["del", "theorem", "inverse_apply_apply", ["equiv"]], ["del", "theorem", "inverse_trans_apply", ["equiv"]], ["add", "theorem", "symm_apply_apply", ["equiv"]], ["add", "theorem", "symm_trans_apply", ["equiv"]]]}, {"oldPath": "src/data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "src/data/multivariate_polynomial.lean", "newPath": "src/data/multivariate_polynomial.lean", "changes": []}, {"oldPath": "src/field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "src/order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": [["del", "theorem", "apply_inverse_apply", ["order_iso"]], ["add", "theorem", "apply_symm_apply", ["order_iso"]], ["del", "theorem", "inverse_apply_apply", ["order_iso"]], ["add", "theorem", "symm_apply_apply", ["order_iso"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "src/set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1552052574, "sha": "b1af1402", "message": "style(data/list/basic): clean up count_bag_inter", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}]}, {"timestamp": 1552034818, "sha": "ffa6d699", "message": "feat(*): has_mem (set α) (filter α) (#799)", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": [["mod", "theorem", "mem_sets", ["filter", "realizer"]]]}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["mod", "theorem", "integral_congr", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["mod", "def", "all_ae", ["measure_theory"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "bind_mono", ["filter"]], ["mod", "theorem", "congr_sets", ["filter"]], ["mod", "theorem", "empty_in_sets_eq_bot", ["filter"]], ["mod", "theorem", "exists_sets_subset_iff", ["filter"]], ["mod", "theorem", "image_mem_map", ["filter"]], ["mod", "theorem", "inf_principal_eq_bot", ["filter"]], ["mod", "theorem", "infi_sets_induct", ["filter"]], ["mod", "theorem", "inhabited_of_mem_sets", ["filter"]], ["mod", "theorem", "inter_mem_sets", ["filter"]], ["mod", "theorem", "le_def", ["filter"]], ["mod", "theorem", "le_map", ["filter"]], ["mod", "theorem", "le_map_comap_of_surjective'", ["filter"]], ["mod", "theorem", "le_principal_iff", ["filter"]], ["mod", "theorem", "map_comap", ["filter"]], ["mod", "theorem", "map_comap_of_surjective'", ["filter"]], ["mod", "theorem", "map_cong", ["filter"]], ["mod", "theorem", "map_inf'", ["filter"]], ["mod", "theorem", "mem_at_top", ["filter"]], ["mod", "theorem", "mem_bot_sets", ["filter"]], ["mod", "theorem", "mem_comap_sets", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_left", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_right", ["filter"]], ["add", "theorem", "mem_infi", ["filter"]], ["add", "theorem", "mem_infi_finite", ["filter"]], ["mod", "theorem", "mem_infi_sets", ["filter"]], ["mod", "theorem", "mem_map", ["filter"]], ["mod", "theorem", "mem_map_sets_iff", ["filter"]], ["mod", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_principal_self", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["mod", "theorem", "mem_pure", ["filter"]], ["mod", "theorem", "mem_pure_iff", ["filter"]], ["mod", "theorem", "mem_sets_of_neq_bot", ["filter"]], ["mod", "theorem", "mem_sets_of_superset", ["filter"]], ["mod", "theorem", "mem_top_sets", ["filter"]], ["mod", "theorem", "mem_top_sets_iff_forall", ["filter"]], ["mod", "theorem", "monotone_mem_sets", ["filter"]], ["mod", "theorem", "mp_sets", ["filter"]], ["mod", "theorem", "preimage_mem_comap", ["filter"]], ["mod", "theorem", "range_mem_map", ["filter"]], ["mod", "theorem", "singleton_mem_pure_sets", ["filter"]], ["mod", "theorem", "univ_mem_sets'", ["filter"]], ["mod", "theorem", "univ_mem_sets", ["filter"]]]}, {"oldPath": "src/order/filter/partial.lean", "newPath": "src/order/filter/partial.lean", "changes": [["mod", "def", "mem_pmap", ["filter"]], ["mod", "theorem", "ptendsto'_of_ptendsto", ["filter"]]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["mod", "theorem", "exists_Z_half", ["add_group_with_zero_nhd"]], ["mod", "theorem", "exists_nhds_split4", []], ["mod", "theorem", "exists_nhds_split", []], ["mod", "theorem", "exists_nhds_split_inv", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/ordered.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["mod", "theorem", "ge_mem_nhds", []], ["mod", "theorem", "gt_mem_nhds", []], ["mod", "theorem", "le_mem_nhds", []], ["mod", "theorem", "lt_mem_nhds", []], ["mod", "theorem", "mem_nhds_orderable_dest", []]]}, {"oldPath": "src/topology/algebra/uniform_group.lean", "newPath": "src/topology/algebra/uniform_group.lean", "changes": []}, {"oldPath": "src/topology/bases.lean", "newPath": "src/topology/bases.lean", "changes": []}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["mod", "theorem", "is_open_iff_mem_nhds", []], ["mod", "theorem", "mem_closure_iff_nhds", []], ["mod", "theorem", "mem_of_nhds", []]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/constructions.lean", "newPath": "src/topology/constructions.lean", "changes": [["mod", "theorem", "map_nhds_subtype_val_eq", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["mod", "theorem", "coe_range_mem_nhds", ["ennreal"]]]}, {"oldPath": "src/topology/maps.lean", "newPath": "src/topology/maps.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "ball_mem_nhds", ["metric"]], ["mod", "theorem", "mem_nhds_iff", ["metric"]]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": [["mod", "theorem", "set_seq_of_cau_filter_mem_sets", ["sequentially_complete"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["mod", "theorem", "ball_mem_nhds", ["emetric"]], ["mod", "theorem", "mem_nhds_iff", ["emetric"]]]}, {"oldPath": "src/topology/order.lean", "newPath": "src/topology/order.lean", "changes": [["mod", "theorem", "map_nhds_induced_eq", []]]}, {"oldPath": "src/topology/separation.lean", "newPath": "src/topology/separation.lean", "changes": [["mod", "theorem", "compl_singleton_mem_nhds", []], ["mod", "theorem", "nhds_is_closed", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/topology/subset_properties.lean", "newPath": "src/topology/subset_properties.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["mod", "theorem", "comp_mem_uniformity_sets", []], ["mod", "theorem", "comp_symm_of_uniformity", []], ["mod", "theorem", "interior_mem_uniformity", []], ["add", "theorem", "mem_map_sets_iff'", []], ["mod", "theorem", "mem_uniformity_is_closed", []], ["mod", "theorem", "nhdset_of_mem_uniformity", []], ["mod", "theorem", "refl_mem_uniformity", []], ["mod", "theorem", "symm_of_uniformity", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/separation.lean", "newPath": "src/topology/uniform_space/separation.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/uniform_embedding.lean", "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": []}]}, {"timestamp": 1552001739, "sha": "7e779677", "message": "refactor(localization): shorten proofs (#796)\n* feat(algebra/group): units.coe_map\n* refactor(localization): shorten proofs\n* swap order of equality in ring_equiv.symm_to_equiv", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "theorem", "to_equiv_symm", ["ring_equiv"]], ["add", "theorem", "to_equiv_symm_apply", ["ring_equiv"]]]}, {"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "theorem", "lift'_apply_coe", ["localization"]], ["add", "theorem", "lift'_mk", ["localization"]], ["add", "theorem", "map_comp_map", ["localization"]], ["add", "theorem", "map_id", ["localization"]], ["add", "theorem", "map_map", ["localization"]]]}]}, {"timestamp": 1551953841, "sha": "26bd400b", "message": "feat(data/list): lemmas about count and bag_inter (#797)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "to_finset_inter", ["multiset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "bag_inter_nil_iff_inter_nil", ["list"]], ["add", "theorem", "count_bag_inter", ["list"]], ["add", "theorem", "count_erase_of_ne", ["list"]], ["add", "theorem", "count_erase_self", ["list"]], ["mod", "theorem", "mem_bag_inter", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "coe_inter", ["multiset"]]]}]}, {"timestamp": 1551902842, "sha": "181647bb", "message": "feat(tactic/basic): utility functions for names (#791)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1551913270, "sha": "48eaf05b", "message": "feat(algebra/group): units.coe_map", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "coe_map", ["units"]]]}]}, {"timestamp": 1551910302, "sha": "e286452d", "message": "feat(data/nat/basic): some lemmas (#792)\n* feat(data/nat/basic): some lemmas\n* fixing namespace, moving lemma", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_pred_of_lt", ["nat"]], ["add", "theorem", "one_le_of_lt", ["nat"]], ["add", "theorem", "pred_one_add", ["nat"]], ["add", "theorem", "sub_sub_sub_cancel_right", ["nat"]]]}]}, {"timestamp": 1551867394, "sha": "61e02dd2", "message": "feat(data/finset): missing fold_map lemma (#794)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "fold_map", ["finset"]]]}]}, {"timestamp": 1551882084, "sha": "cc753d7b", "message": "feat(ring_theory/localization): adds induced ring hom between fraction rings (#781)\n* feat(ring_theory/localization): adds induced ring hom between fraction rings\n* Break some extremely long lines\n* Put map in the fraction_ring namespace\n* Move global variable into statements\n* Rename rec to lift', make interface for lift, generalise map\n* Improve simp-lemmas, add docstrings\n* Rename circ to comp in lemma names", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "def", "at_prime", ["localization"]], ["add", "theorem", "lift_coe", ["localization", "away"]], ["add", "theorem", "lift_comp_of", ["localization", "away"]], ["add", "theorem", "lift_of", ["localization", "away"]], ["mod", "def", "away", ["localization"]], ["mod", "theorem", "coe_add", ["localization"]], ["add", "theorem", "coe_is_unit'", ["localization"]], ["add", "theorem", "coe_is_unit", ["localization"]], ["mod", "theorem", "coe_mul", ["localization"]], ["mod", "theorem", "coe_neg", ["localization"]], ["mod", "theorem", "coe_one", ["localization"]], ["mod", "theorem", "coe_pow", ["localization"]], ["mod", "theorem", "coe_sub", ["localization"]], ["mod", "theorem", "coe_zero", ["localization"]], ["del", "theorem", "eq_zero_of", ["localization"]], ["del", "theorem", "eq_zero_of_ne_zero_of_mul_eq_zero", ["localization"]], ["add", "def", "equiv_of_equiv", ["localization"]], ["add", "theorem", "eq_zero_of", ["localization", "fraction_ring"]], ["add", "theorem", "eq_zero_of_ne_zero_of_mul_eq_zero", ["localization", "fraction_ring"]], ["add", "def", "equiv_of_equiv", ["localization", "fraction_ring"]], ["add", "def", "inv_aux", ["localization", "fraction_ring"]], ["add", "def", "map", ["localization", "fraction_ring"]], ["add", "theorem", "map_coe", ["localization", "fraction_ring"]], ["add", "theorem", "map_comp_of", ["localization", "fraction_ring"]], ["add", "theorem", "map_of", ["localization", "fraction_ring"]], ["add", "theorem", "mem_non_zero_divisors_iff_ne_zero", ["localization", "fraction_ring"]], ["add", "theorem", "mk_eq_div'", ["localization", "fraction_ring"]], ["add", "theorem", "mk_eq_div", ["localization", "fraction_ring"]], ["add", "theorem", "mk_inv'", ["localization", "fraction_ring"]], ["add", "theorem", "mk_inv", ["localization", "fraction_ring"]], ["add", "theorem", "injective", ["localization", "fraction_ring", "of"]], ["mod", "def", "fraction_ring", ["localization"]], ["del", "def", "inv_aux", ["localization"]], ["add", "def", "lift'", ["localization"]], ["add", "theorem", "lift'_apply_coe", ["localization"]], ["add", "theorem", "lift'_coe", ["localization"]], ["add", "theorem", "lift'_comp_of", ["localization"]], ["add", "theorem", "lift'_of", ["localization"]], ["add", "theorem", "lift_apply_coe", ["localization"]], ["add", "theorem", "lift_coe", ["localization"]], ["add", "theorem", "lift_comp_of", ["localization"]], ["add", "theorem", "lift_of", ["localization"]], ["del", "def", "loc", ["localization"]], ["add", "def", "map", ["localization"]], ["add", "theorem", "map_coe", ["localization"]], ["mod", "theorem", "map_comap", ["localization"]], ["add", "theorem", "map_comp_of", ["localization"]], ["add", "theorem", "map_of", ["localization"]], ["del", "theorem", "mem_non_zero_divisors_of_ne_zero", ["localization"]], ["mod", "def", "mk", ["localization"]], ["add", "theorem", "mk_eq", ["localization"]], ["del", "theorem", "mk_eq_div", ["localization"]], ["del", "theorem", "ne_zero_of_mem_non_zero_divisors", ["localization"]], ["add", "theorem", "non_zero_divisors_one_val", ["localization"]], ["del", "theorem", "injective", ["localization", "of"]], ["mod", "def", "of", ["localization"]], ["mod", "theorem", "of_add", ["localization"]], ["add", "theorem", "of_is_unit'", ["localization"]], ["add", "theorem", "of_is_unit", ["localization"]], ["mod", "theorem", "of_mul", ["localization"]], ["mod", "theorem", "of_neg", ["localization"]], ["mod", "theorem", "of_one", ["localization"]], ["mod", "theorem", "of_pow", ["localization"]], ["mod", "theorem", "of_sub", ["localization"]], ["mod", "theorem", "of_zero", ["localization"]], ["add", "def", "to_units", ["localization"]], ["add", "theorem", "to_units_coe", ["localization"]], ["add", "def", "localization", []]]}]}, {"timestamp": 1551822919, "sha": "1ec0a1f4", "message": "fix(tactic/linarith): correctly parse 0*0", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1551795340, "sha": "581cf19b", "message": "feat(topology): split uniform_space and topological_structure", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/operator_norm.lean", "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": []}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "{u}", []]]}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": [["add", "theorem", "continuous_inv'", []], ["add", "theorem", "continuous_inv", []], ["add", "theorem", "continuous_sub'", []], ["add", "theorem", "continuous_sub", []], ["add", "theorem", "exists_nhds_split4", []], ["add", "theorem", "exists_nhds_split", []], ["add", "theorem", "exists_nhds_split_inv", []], ["add", "theorem", "is_open_map_mul_left", []], ["add", "theorem", "is_open_map_mul_right", []], ["add", "theorem", "nhds_one_symm", []], ["add", "theorem", "nhds_translation", []], ["add", "theorem", "nhds_translation_mul_inv", []], ["add", "theorem", "open_coe", ["quotient_group"]], ["add", "theorem", "quotient_group_saturate", []], ["add", "theorem", "tendsto_inv", []], ["add", "theorem", "tendsto_sub", []], ["del", "theorem", "to_uniform_space_eq", []], ["del", "def", "to_uniform_space", ["topological_add_group"]], ["del", "theorem", "topological_add_group_is_uniform", []], ["del", "theorem", "uniformity_eq_comap_nhds_zero'", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/group_completion.lean", "changes": [["add", "theorem", "coe_zero", []], ["add", "theorem", "coe_add", ["uniform_space", "completion"]], ["add", "theorem", "coe_neg", ["uniform_space", "completion"]], ["add", "theorem", "is_add_group_hom_extension", ["uniform_space", "completion"]], ["add", "theorem", "is_add_group_hom_map", ["uniform_space", "completion"]], ["add", "theorem", "is_add_group_hom_prod", ["uniform_space", "completion"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/algebra/monoid.lean", "changes": [["add", "theorem", "continuous_finset_prod", []], ["add", "theorem", "continuous_list_prod", []], ["add", "theorem", "continuous_mul'", []], ["add", "theorem", "continuous_mul", []], ["add", "theorem", "continuous_multiset_prod", []], ["add", "theorem", "continuous_pow", []], ["add", "theorem", "tendsto_finset_prod", []], ["add", "theorem", "tendsto_list_prod", []], ["add", "theorem", "tendsto_mul'", []], ["add", "theorem", "tendsto_mul", []], ["add", "theorem", "tendsto_multiset_prod", []]]}, {"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/ordered.lean", "changes": [["del", "theorem", "continuous_finset_prod", []], ["del", "theorem", "continuous_inv'", []], ["del", "theorem", "continuous_inv", []], ["del", "theorem", "continuous_list_prod", []], ["del", "theorem", "continuous_mul'", []], ["del", "theorem", "continuous_mul", []], ["del", "theorem", "continuous_multiset_prod", []], ["del", "theorem", "continuous_pow", []], ["del", "theorem", "continuous_sub'", []], ["del", "theorem", "continuous_sub", []], ["del", "theorem", "exists_nhds_split4", []], ["del", "theorem", "exists_nhds_split", []], ["del", "theorem", "exists_nhds_split_inv", []], ["del", "theorem", "group_separation_rel", []], ["del", "def", "closure", ["ideal"]], ["del", "theorem", "coe_closure", ["ideal"]], ["del", "theorem", "is_open_map_mul_left", []], ["del", "theorem", "is_open_map_mul_right", []], ["del", "theorem", "nhds_one_symm", []], ["del", "theorem", "nhds_translation", []], ["del", "theorem", "nhds_translation_mul_inv", []], ["del", "theorem", "tendsto_finset_prod", []], ["del", "theorem", "tendsto_inv", []], ["del", "theorem", "tendsto_list_prod", []], ["del", "theorem", "tendsto_mul'", []], ["del", "theorem", "tendsto_mul", []], ["del", "theorem", "tendsto_multiset_prod", []], ["del", "theorem", "tendsto_sub", []], ["del", "theorem", "mk'", ["uniform_add_group"]], ["del", "theorem", "uniform_continuous_add'", []], ["del", "theorem", "uniform_continuous_add", []], ["del", "theorem", "uniform_continuous_neg'", []], ["del", "theorem", "uniform_continuous_neg", []], ["del", "theorem", "uniform_continuous_of_continuous", []], ["del", "theorem", "uniform_continuous_of_tendsto_zero", []], ["del", "theorem", "uniform_continuous_sub'", []], ["del", "theorem", "uniform_continuous_sub", []], ["del", "theorem", "uniform_embedding_translate", []], ["del", "theorem", "uniformity_eq_comap_nhds_zero", []], ["del", "theorem", "uniformity_translate", []]]}, {"oldPath": "src/topology/algebra/quotient.lean", "newPath": null, "changes": [["del", "theorem", "open_coe", ["quotient_group"]], ["del", "theorem", "quotient_group_saturate", []], ["del", "theorem", "is_open_map_coe", ["quotient_ring"]], ["del", "theorem", "quotient_map_coe_coe", ["quotient_ring"]], ["del", "theorem", "quotient_ring_saturate", []], ["del", "theorem", "ring_sep_quot", ["uniform_space"]], ["del", "theorem", "ring_sep_rel", ["uniform_space"]], ["del", "def", "sep_quot_equiv_ring_quot", ["uniform_space"]], ["del", "theorem", "{u}", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/ring.lean", "changes": [["add", "def", "closure", ["ideal"]], ["add", "theorem", "coe_closure", ["ideal"]], ["add", "theorem", "is_open_map_coe", ["quotient_ring"]], ["add", "theorem", "quotient_map_coe_coe", ["quotient_ring"]], ["add", "theorem", "quotient_ring_saturate", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/uniform_group.lean", "changes": [["add", "theorem", "neg_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "neg_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "sub_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "sub_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "continuous_extend_of_cauchy", ["dense_embedding"]], ["add", "theorem", "extend_Z_bilin", ["dense_embedding"]], ["add", "theorem", "group_separation_rel", []], ["add", "theorem", "tendsto_zero_left", ["is_Z_bilin"]], ["add", "theorem", "tendsto_zero_right", ["is_Z_bilin"]], ["add", "theorem", "tendsto_sub_comap_self", []], ["add", "theorem", "to_uniform_space_eq", []], ["add", "def", "to_uniform_space", ["topological_add_group"]], ["add", "theorem", "topological_add_group_is_uniform", []], ["add", "theorem", "mk'", ["uniform_add_group"]], ["add", "theorem", "uniform_continuous_add'", []], ["add", "theorem", "uniform_continuous_add", []], ["add", "theorem", "uniform_continuous_neg'", []], ["add", "theorem", "uniform_continuous_neg", []], ["add", "theorem", "uniform_continuous_of_continuous", []], ["add", "theorem", "uniform_continuous_of_tendsto_zero", []], ["add", "theorem", "uniform_continuous_sub'", []], ["add", "theorem", "uniform_continuous_sub", []], ["add", "theorem", "uniform_embedding_translate", []], ["add", "theorem", "uniformity_eq_comap_nhds_zero'", []], ["add", "theorem", "uniformity_eq_comap_nhds_zero", []], ["add", "theorem", "uniformity_translate", []]]}, {"oldPath": null, "newPath": "src/topology/algebra/uniform_ring.lean", "changes": [["add", "theorem", "coe_mul", ["uniform_space", "completion"]], ["add", "theorem", "coe_one", ["uniform_space", "completion"]], ["add", "theorem", "continuous_mul'", ["uniform_space", "completion"]], ["add", "theorem", "continuous_mul", ["uniform_space", "completion"]], ["add", "theorem", "ring_sep_quot", ["uniform_space"]], ["add", "theorem", "ring_sep_rel", ["uniform_space"]], ["add", "def", "sep_quot_equiv_ring_quot", ["uniform_space"]]]}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/topology/instances/polynomial.lean", "newPath": "src/topology/instances/polynomial.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["del", "def", "cauchy", []], ["del", "theorem", "cauchy_comap", []], ["del", "theorem", "cauchy_downwards", []], ["del", "theorem", "cauchy_iff", []], ["del", "theorem", "cauchy_iff_exists_le_nhds", []], ["del", "theorem", "cauchy_map", []], ["del", "theorem", "cauchy_map_iff", []], ["del", "theorem", "cauchy_map_iff_exists_tendsto", []], ["del", "theorem", "cauchy_nhds", []], ["del", "theorem", "cauchy_of_totally_bounded_of_ultrafilter", []], ["del", "theorem", "cauchy_prod", []], ["del", "theorem", "cauchy_pure", []], ["del", "def", "cauchy_seq", []], ["del", "theorem", "cauchy_seq_iff_prod_map", []], ["del", "theorem", "cauchy_seq_tendsto_of_complete", []], ["del", "theorem", "closure_image_mem_nhds_of_uniform_embedding", []], ["del", "theorem", "compact_iff_totally_bounded_complete", []], ["del", "theorem", "compact_of_totally_bounded_is_closed", []], ["del", "theorem", "complete_space_extension", []], ["del", "theorem", "complete_space_of_is_complete_univ", []], ["del", "theorem", "complete_univ", []], ["del", "theorem", "continuous_extend_of_cauchy", ["dense_embedding"]], ["del", "theorem", "is_closed_of_is_complete", []], ["del", "def", "is_complete", []], ["del", "theorem", "is_complete_image_iff", []], ["del", "theorem", "is_complete_of_is_closed", []], ["del", "theorem", "le_nhds_iff_adhp_of_cauchy", []], ["del", "theorem", "le_nhds_lim_of_cauchy", []], ["del", "theorem", "le_nhds_of_cauchy_adhp", []], ["del", "def", "separated", []], ["del", "theorem", "separated_def'", []], ["del", "theorem", "separated_def", []], ["del", "theorem", "separated_equiv", []], ["del", "def", "totally_bounded", []], ["del", "theorem", "totally_bounded_closure", []], ["del", "theorem", "totally_bounded_empty", []], ["del", "theorem", "totally_bounded_iff_filter", []], ["del", "theorem", "totally_bounded_iff_subset", []], ["del", "theorem", "totally_bounded_iff_ultrafilter", []], ["del", "theorem", "totally_bounded_image", []], ["del", "theorem", "totally_bounded_preimage", []], ["del", "theorem", "totally_bounded_subset", []], ["del", "theorem", "uniform_continuous_uniformly_extend", []], ["del", "theorem", "dense_embedding", ["uniform_embedding"]], ["del", "theorem", "embedding", ["uniform_embedding"]], ["del", "theorem", "prod", ["uniform_embedding"]], ["del", "theorem", "uniform_continuous", ["uniform_embedding"]], ["del", "theorem", "uniform_continuous_iff", ["uniform_embedding"]], ["del", "def", "uniform_embedding", []], ["del", "theorem", "uniform_embedding_comap", []], ["del", "theorem", "uniform_embedding_def'", []], ["del", "theorem", "uniform_embedding_def", []], ["del", "theorem", "uniform_embedding_subtype_emb", []], ["del", "theorem", "uniform_extend_subtype", []], ["del", "theorem", "uniformly_extend_exists", []], ["del", "theorem", "uniformly_extend_of_emb", []], ["del", "theorem", "uniformly_extend_spec", []]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/cauchy.lean", "changes": [["add", "def", "cauchy", []], ["add", "theorem", "cauchy_comap", []], ["add", "theorem", "cauchy_downwards", []], ["add", "theorem", "cauchy_iff", []], ["add", "theorem", "cauchy_iff_exists_le_nhds", []], ["add", "theorem", "cauchy_map", []], ["add", "theorem", "cauchy_map_iff", []], ["add", "theorem", "cauchy_map_iff_exists_tendsto", []], ["add", "theorem", "cauchy_nhds", []], ["add", "theorem", "cauchy_of_totally_bounded_of_ultrafilter", []], ["add", "theorem", "cauchy_prod", []], ["add", "theorem", "cauchy_pure", []], ["add", "def", "cauchy_seq", []], ["add", "theorem", "cauchy_seq_iff_prod_map", []], ["add", "theorem", "cauchy_seq_tendsto_of_complete", []], ["add", "theorem", "compact_iff_totally_bounded_complete", []], ["add", "theorem", "compact_of_totally_bounded_is_closed", []], ["add", "theorem", "complete_space_of_is_complete_univ", []], ["add", "theorem", "complete_univ", []], ["add", "def", "is_complete", []], ["add", "theorem", "is_complete_of_is_closed", []], ["add", "theorem", "le_nhds_iff_adhp_of_cauchy", []], ["add", "theorem", "le_nhds_lim_of_cauchy", []], ["add", "theorem", "le_nhds_of_cauchy_adhp", []], ["add", "def", "totally_bounded", []], ["add", "theorem", "totally_bounded_closure", []], ["add", "theorem", "totally_bounded_empty", []], ["add", "theorem", "totally_bounded_iff_filter", []], ["add", "theorem", "totally_bounded_iff_subset", []], ["add", "theorem", "totally_bounded_iff_ultrafilter", []], ["add", "theorem", "totally_bounded_image", []], ["add", "theorem", "totally_bounded_subset", []]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/complete_separated.lean", "changes": [["add", "theorem", "is_closed_of_is_complete", []]]}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": [["del", "theorem", "neg_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "neg_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "sub_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "sub_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "extend_Z_bilin", ["dense_embedding"]], ["del", "theorem", "tendsto_zero_left", ["is_Z_bilin"]], ["del", "theorem", "tendsto_zero_right", ["is_Z_bilin"]], ["del", "theorem", "tendsto_sub_comap_self", []], ["del", "theorem", "comap_quotient_eq_uniformity", ["uniform_space"]], ["del", "theorem", "comap_quotient_le_uniformity", ["uniform_space"]], ["del", "theorem", "coe_add", ["uniform_space", "completion"]], ["del", "theorem", "coe_mul", ["uniform_space", "completion"]], ["del", "theorem", "coe_neg", ["uniform_space", "completion"]], ["del", "theorem", "coe_one", ["uniform_space", "completion"]], ["del", "theorem", "coe_zero", ["uniform_space", "completion"]], ["del", "theorem", "continuous_mul'", ["uniform_space", "completion"]], ["del", "theorem", "continuous_mul", ["uniform_space", "completion"]], ["del", "theorem", "is_add_group_hom_extension", ["uniform_space", "completion"]], ["del", "theorem", "is_add_group_hom_map", ["uniform_space", "completion"]], ["del", "theorem", "is_add_group_hom_prod", ["uniform_space", "completion"]], ["del", "theorem", "eq_of_separated_of_uniform_continuous", ["uniform_space"]], ["del", "theorem", "separated_of_uniform_continuous", ["uniform_space"]], ["del", "theorem", "separation_prod", ["uniform_space"]], ["del", "def", "lift", ["uniform_space", "separation_quotient"]], ["del", "theorem", "lift_mk", ["uniform_space", "separation_quotient"]], ["del", "def", "map", ["uniform_space", "separation_quotient"]], ["del", "theorem", "map_comp", ["uniform_space", "separation_quotient"]], ["del", "theorem", "map_id", ["uniform_space", "separation_quotient"]], ["del", "theorem", "map_mk", ["uniform_space", "separation_quotient"]], ["del", "theorem", "map_unique", ["uniform_space", "separation_quotient"]], ["del", "theorem", "uniform_continuous_lift", ["uniform_space", "separation_quotient"]], ["del", "theorem", "uniform_continuous_map", ["uniform_space", "separation_quotient"]], ["del", "def", "separation_quotient", ["uniform_space"]], ["del", "def", "separation_setoid", ["uniform_space"]], ["del", "theorem", "uniform_continuous_quotient", ["uniform_space"]], ["del", "theorem", "uniform_continuous_quotient_lift", ["uniform_space"]], ["del", "theorem", "uniform_continuous_quotient_lift₂", ["uniform_space"]], ["del", "theorem", "uniform_continuous_quotient_mk", ["uniform_space"]], ["del", "theorem", "uniformity_quotient", ["uniform_space"]]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/separation.lean", "changes": [["add", "def", "separated", []], ["add", "theorem", "separated_def'", []], ["add", "theorem", "separated_def", []], ["add", "theorem", "separated_equiv", []], ["add", "theorem", "comap_quotient_eq_uniformity", ["uniform_space"]], ["add", "theorem", "comap_quotient_le_uniformity", ["uniform_space"]], ["add", "theorem", "eq_of_separated_of_uniform_continuous", ["uniform_space"]], ["add", "theorem", "separated_of_uniform_continuous", ["uniform_space"]], ["add", "theorem", "separation_prod", ["uniform_space"]], ["add", "def", "lift", ["uniform_space", "separation_quotient"]], ["add", "theorem", "lift_mk", ["uniform_space", "separation_quotient"]], ["add", "def", "map", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_comp", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_id", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_mk", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_unique", ["uniform_space", "separation_quotient"]], ["add", "theorem", "uniform_continuous_lift", ["uniform_space", "separation_quotient"]], ["add", "theorem", "uniform_continuous_map", ["uniform_space", "separation_quotient"]], ["add", "def", "separation_quotient", ["uniform_space"]], ["add", "def", "separation_setoid", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient_lift", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient_lift₂", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient_mk", ["uniform_space"]], ["add", "theorem", "uniformity_quotient", ["uniform_space"]]]}, {"oldPath": null, "newPath": "src/topology/uniform_space/uniform_embedding.lean", "changes": [["add", "theorem", "closure_image_mem_nhds_of_uniform_embedding", []], ["add", "theorem", "complete_space_extension", []], ["add", "theorem", "is_complete_image_iff", []], ["add", "theorem", "totally_bounded_preimage", []], ["add", "theorem", "uniform_continuous_uniformly_extend", []], ["add", "theorem", "dense_embedding", ["uniform_embedding"]], ["add", "theorem", "embedding", ["uniform_embedding"]], ["add", "theorem", "prod", ["uniform_embedding"]], ["add", "theorem", "uniform_continuous", ["uniform_embedding"]], ["add", "theorem", "uniform_continuous_iff", ["uniform_embedding"]], ["add", "def", "uniform_embedding", []], ["add", "theorem", "uniform_embedding_comap", []], ["add", "theorem", "uniform_embedding_def'", []], ["add", "theorem", "uniform_embedding_def", []], ["add", "theorem", "uniform_embedding_subtype_emb", []], ["add", "theorem", "uniform_extend_subtype", []], ["add", "theorem", "uniformly_extend_exists", []], ["add", "theorem", "uniformly_extend_of_emb", []], ["add", "theorem", "uniformly_extend_spec", []]]}]}, {"timestamp": 1551779445, "sha": "708c0cfa", "message": "feat(data/multiset): add monad instance (#744)", "changes": [{"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}]}, {"timestamp": 1551779091, "sha": "3525d212", "message": "refactor(topology/metric_space/lipschitz): Simplify proof in banach contraction (#788)", "changes": [{"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["del", "theorem", "dist_bound_of_contraction", ["lipschitz_with"]]]}]}, {"timestamp": 1551777706, "sha": "b9f88d14", "message": "feat(data/finset): add card_sdiff", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "card_disjoint_union", ["finset"]], ["add", "theorem", "card_sdiff", ["finset"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}]}, {"timestamp": 1551777706, "sha": "682f4b5a", "message": "feat(linear_algebra): module (vector space) structure for finsupp, matrix, and mv polynomials", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "def", "equiv_fun_on_fintype", ["finsupp"]], ["add", "theorem", "ext_iff", ["finsupp"]], ["add", "theorem", "filter_curry", ["finsupp"]], ["add", "theorem", "filter_sum", ["finsupp"]], ["add", "theorem", "filter_zero", ["finsupp"]], ["add", "theorem", "injective_single", ["finsupp"]], ["add", "theorem", "map_domain_apply", ["finsupp"]], ["add", "theorem", "map_domain_notin_range", ["finsupp"]], ["add", "theorem", "map_range_finset_sum", ["finsupp"]], ["add", "theorem", "map_range_multiset_sum", ["finsupp"]], ["add", "def", "restrict_support_equiv", ["finsupp"]], ["add", "theorem", "single_eq_single_iff", ["finsupp"]], ["add", "theorem", "support_curry", ["finsupp"]]]}, {"oldPath": "src/data/multivariate_polynomial.lean", "newPath": "src/data/multivariate_polynomial.lean", "changes": [["add", "theorem", "smul_eq_C_mul", ["mv_polynomial"]], ["add", "theorem", "smul_eval", ["mv_polynomial"]]]}, {"oldPath": "src/field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": [["mod", "def", "field_of_integral_domain", ["finite_field"]], ["add", "theorem", "pow_card_sub_one_eq_one", ["finite_field"]]]}, {"oldPath": null, "newPath": "src/field_theory/mv_polynomial.lean", "changes": [["add", "def", "R", ["mv_polynomial"]], ["add", "theorem", "degrees_indicator", ["mv_polynomial"]], ["add", "theorem", "dim_R", ["mv_polynomial"]], ["add", "theorem", "eq_zero_of_eval_eq_zero", ["mv_polynomial"]], ["add", "theorem", "eval_indicator_apply_eq_one", ["mv_polynomial"]], ["add", "theorem", "eval_indicator_apply_eq_zero", ["mv_polynomial"]], ["add", "def", "evalᵢ", ["mv_polynomial"]], ["add", "def", "evalₗ", ["mv_polynomial"]], ["add", "theorem", "evalₗ_apply", ["mv_polynomial"]], ["add", "def", "indicator", ["mv_polynomial"]], ["add", "theorem", "indicator_mem_restrict_degree", ["mv_polynomial"]], ["add", "theorem", "ker_evalₗ", ["mv_polynomial"]], ["add", "theorem", "map_restrict_dom_evalₗ", ["mv_polynomial"]], ["add", "theorem", "range_evalᵢ", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/finsupp.lean", "changes": [["add", "theorem", "cardinal_lt_omega_of_dim_lt_omega", []], ["add", "theorem", "cardinal_mk_eq_cardinal_mk_field_pow_dim", []], ["add", "theorem", "eq_bot_iff_dim_eq_zero", []], ["add", "theorem", "equiv_of_dim_eq_dim", []], ["add", "theorem", "dim_eq", ["finsupp"]], ["add", "theorem", "disjoint_lsingle_lsingle", ["finsupp"]], ["add", "theorem", "infi_ker_lapply_le_bot", ["finsupp"]], ["add", "theorem", "is_basis_single", ["finsupp"]], ["add", "theorem", "ker_lsingle", ["finsupp"]], ["add", "def", "lapply", ["finsupp"]], ["add", "theorem", "lapply_apply", ["finsupp"]], ["add", "theorem", "linear_independent_single", ["finsupp"]], ["add", "def", "lmap_domain", ["finsupp"]], ["add", "theorem", "lmap_domain_apply", ["finsupp"]], ["add", "def", "lsingle", ["finsupp"]], ["add", "theorem", "lsingle_apply", ["finsupp"]], ["add", "theorem", "lsingle_range_le_ker_lapply", ["finsupp"]], ["add", "def", "lsubtype_domain", ["finsupp"]], ["add", "theorem", "lsubtype_domain_apply", ["finsupp"]], ["add", "theorem", "mem_restrict_dom", ["finsupp"]], ["add", "def", "restrict_dom", ["finsupp"]], ["add", "def", "restrict_dom_equiv_finsupp", ["finsupp"]], ["add", "theorem", "span_single_image", ["finsupp"]], ["add", "theorem", "supr_lsingle_range", ["finsupp"]], ["add", "theorem", "injective_of_surjective", []], ["add", "theorem", "dim_mv_polynomial", ["mv_polynomial"]], ["add", "theorem", "is_basis_monomials", ["mv_polynomial"]], ["add", "theorem", "map_range_eq_map", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_degree", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_degree_iff_sup", ["mv_polynomial"]], ["add", "theorem", "mem_restrict_total_degree", ["mv_polynomial"]], ["add", "def", "restrict_degree", ["mv_polynomial"]], ["add", "def", "restrict_total_degree", ["mv_polynomial"]]]}, {"oldPath": null, "newPath": "src/linear_algebra/matrix.lean", "changes": [["add", "theorem", "diagonal_comp_std_basis", ["matrix"]], ["add", "theorem", "diagonal_to_lin", ["matrix"]], ["add", "def", "eval", ["matrix"]], ["add", "theorem", "ker_diagonal_to_lin", ["matrix"]], ["add", "theorem", "mul_to_lin", ["matrix"]], ["add", "theorem", "proj_diagonal", ["matrix"]], ["add", "theorem", "range_diagonal", ["matrix"]], ["add", "theorem", "rank_diagonal", ["matrix"]], ["add", "theorem", "rank_vec_mul_vec", ["matrix"]], ["add", "def", "to_lin", ["matrix"]], ["add", "theorem", "to_lin_add", ["matrix"]], ["add", "theorem", "to_lin_apply", ["matrix"]], ["add", "theorem", "to_lin_zero", ["matrix"]]]}]}, {"timestamp": 1551777706, "sha": "738778aa", "message": "feat(data/matrix): basic definitions: transpose; row & column matrix; vector/matrix multiplication", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": [["add", "def", "col", ["matrix"]], ["add", "def", "mul_vec", ["matrix"]], ["add", "theorem", "mul_vec_diagonal", ["matrix"]], ["add", "def", "row", ["matrix"]], ["add", "def", "transpose", ["matrix"]], ["add", "def", "vec_mul", ["matrix"]], ["add", "def", "vec_mul_vec", ["matrix"]], ["add", "theorem", "vec_mul_vec_eq", ["matrix"]]]}]}, {"timestamp": 1551777706, "sha": "528ff933", "message": "refactor(linear_algebra): move multivariate_polynomial to data", "changes": [{"oldPath": "src/category_theory/instances/rings.lean", "newPath": "src/category_theory/instances/rings.lean", "changes": []}, {"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/data/multivariate_polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": []}]}, {"timestamp": 1551777706, "sha": "891a192f", "message": "refactor(ring_theory): move matrix to data and determinant to linear_algebra", "changes": [{"oldPath": "src/data/matrix.lean", "newPath": "src/data/matrix.lean", "changes": []}, {"oldPath": "src/linear_algebra/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1551777706, "sha": "10a586b1", "message": "feat(linear_algebra): add module (vector_space) structure for function spaces", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "def", "to_linear_equiv", ["equiv"]], ["add", "theorem", "eq_bot_of_equiv", ["linear_equiv"]], ["add", "def", "smul_of_ne_zero", ["linear_equiv"]], ["add", "def", "smul_of_unit", ["linear_equiv"]], ["add", "theorem", "comp_cod_restrict", ["linear_map"]], ["add", "def", "diag", ["linear_map"]], ["add", "theorem", "disjoint_std_basis_std_basis", ["linear_map"]], ["add", "theorem", "infi_ker_proj", ["linear_map"]], ["add", "def", "infi_ker_proj_equiv", ["linear_map"]], ["add", "theorem", "infi_ker_proj_le_supr_range_std_basis", ["linear_map"]], ["add", "theorem", "ker_pi", ["linear_map"]], ["add", "theorem", "ker_std_basis", ["linear_map"]], ["add", "def", "pi", ["linear_map"]], ["add", "theorem", "pi_apply", ["linear_map"]], ["add", "theorem", "pi_comp", ["linear_map"]], ["add", "theorem", "pi_eq_zero", ["linear_map"]], ["add", "theorem", "pi_zero", ["linear_map"]], ["add", "def", "proj", ["linear_map"]], ["add", "theorem", "proj_apply", ["linear_map"]], ["add", "theorem", "proj_comp_std_basis", ["linear_map"]], ["add", "theorem", "proj_pi", ["linear_map"]], ["add", "theorem", "proj_std_basis_ne", ["linear_map"]], ["add", "theorem", "proj_std_basis_same", ["linear_map"]], ["add", "def", "std_basis", ["linear_map"]], ["add", "theorem", "std_basis_apply", ["linear_map"]], ["add", "theorem", "std_basis_ne", ["linear_map"]], ["add", "theorem", "std_basis_same", ["linear_map"]], ["add", "theorem", "subtype_comp_cod_restrict", ["linear_map"]], ["add", "theorem", "supr_range_std_basis", ["linear_map"]], ["add", "theorem", "supr_range_std_basis_eq_infi_ker_proj", ["linear_map"]], ["add", "theorem", "supr_range_std_basis_le_infi_ker_proj", ["linear_map"]], ["add", "theorem", "update_apply", ["linear_map"]], ["add", "theorem", "disjoint_iff_comap_eq_bot", ["submodule"]], ["add", "theorem", "eq_zero_of_bot_submodule", ["submodule"]], ["add", "theorem", "mem_supr_of_mem", ["submodule"]], ["add", "theorem", "span_univ", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "linear_independent_Union_finite", []], ["add", "theorem", "is_basis_fun", ["pi"]], ["add", "theorem", "is_basis_std_basis", ["pi"]], ["add", "theorem", "linear_independent_std_basis", ["pi"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_fun'", []], ["add", "theorem", "dim_fun", []], ["add", "theorem", "dim_pi", []]]}]}, {"timestamp": 1551777706, "sha": "332121d4", "message": "feat(data/fintype): card_univ and card_univ_diff", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": [["add", "theorem", "card_univ", ["finset"]], ["add", "theorem", "card_univ_diff", ["finset"]]]}]}, {"timestamp": 1551777705, "sha": "c0b1eb19", "message": "refactor(data/finset): correct name sdiff_disjoint -> disjoint_sdiff; add sdiff_disjoint", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "disjoint_sdiff", ["finset"]], ["add", "theorem", "sdiff_disjoint", ["finset"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}]}, {"timestamp": 1551777705, "sha": "b3c749b4", "message": "remove superflous parameter from bot_eq_zero", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["mod", "theorem", "bot_eq_zero", []]]}]}, {"timestamp": 1551777705, "sha": "73f1a08d", "message": "feat(data/finset): add filter_empty, filter_subset_filter, prod_filter", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "prod_filter", ["finset"]]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "filter_empty", ["finset"]], ["add", "theorem", "filter_subset_filter", ["finset"]]]}]}, {"timestamp": 1551777705, "sha": "b9ead4d5", "message": "feat(data/finset): add disjoint_bind_left/right", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "disjoint_bind_left", ["finset"]], ["add", "theorem", "disjoint_bind_right", ["finset"]]]}]}, {"timestamp": 1551777705, "sha": "f82f5f2a", "message": "refactor(algebra): canonically_ordered_monoid extends order_bot", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": [["add", "theorem", "bot_eq_zero", []]]}, {"oldPath": "src/algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "src/data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1551777705, "sha": "f07a558d", "message": "feat(data/equiv): add subtype_pi_equiv_pi", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subtype_pi_equiv_pi", ["equiv"]]]}]}, {"timestamp": 1551777705, "sha": "8070c05c", "message": "feat(data/set/lattice): more rules for disjoint sets", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_compl", ["set"]], ["mod", "theorem", "disjoint_diff", ["set"]], ["add", "theorem", "disjoint_image_image", ["set"]], ["add", "theorem", "disjoint_singleton_left", ["set"]], ["add", "theorem", "disjoint_singleton_right", ["set"]]]}]}, {"timestamp": 1551777705, "sha": "c53ac415", "message": "feat(data/set): relate range and image to Union", "changes": [{"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "image_eq_Union", ["set"]], ["add", "theorem", "range_eq_Union", ["set"]]]}]}, {"timestamp": 1551777705, "sha": "41038bac", "message": "feat(data/set): add exists_maximal_wrt", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "exists_maximal_wrt", ["set", "finite"]]]}]}, {"timestamp": 1551777705, "sha": "146d73c6", "message": "feat(data/set): add finite_image_iff_on", "changes": [{"oldPath": "src/data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": [["add", "theorem", "finite_image_iff_on", ["set"]], ["mod", "theorem", "finite_of_finite_image", ["set"]], ["add", "theorem", "finite_of_finite_image_on", ["set"]]]}]}, {"timestamp": 1551777705, "sha": "84a5f4d3", "message": "feat(data/set): add subset_image_iff and subset_range_iff", "changes": [{"oldPath": "src/data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": [["add", "theorem", "subset_image_iff", ["set"]], ["add", "theorem", "subset_range_iff", ["set"]]]}]}, {"timestamp": 1551777705, "sha": "cbe2f617", "message": "feat(logic/function): add inv_fun_neg", "changes": [{"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "theorem", "inv_fun_neg", ["function"]]]}]}, {"timestamp": 1551777705, "sha": "73db4c7c", "message": "feat(logic/function): add injective.ne", "changes": [{"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "theorem", "ne", ["function", "injective"]]]}]}, {"timestamp": 1551777705, "sha": "c819617b", "message": "feat(logic): add plift.down_inj", "changes": [{"oldPath": "src/logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": [["add", "theorem", "down_inj", ["plift"]]]}]}, {"timestamp": 1551777705, "sha": "985445f6", "message": "feat(linear_algebra/multivariate_polynomial): relate total_degree to degrees, add, zero, mul", "changes": [{"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": [["add", "theorem", "total_degree_C", ["mv_polynomial"]], ["add", "theorem", "total_degree_add", ["mv_polynomial"]], ["add", "theorem", "total_degree_eq", ["mv_polynomial"]], ["add", "theorem", "total_degree_finset_prod", ["mv_polynomial"]], ["add", "theorem", "total_degree_le_degrees_card", ["mv_polynomial"]], ["add", "theorem", "total_degree_list_prod", ["mv_polynomial"]], ["add", "theorem", "total_degree_mul", ["mv_polynomial"]], ["add", "theorem", "total_degree_multiset_prod", ["mv_polynomial"]], ["add", "theorem", "total_degree_one", ["mv_polynomial"]], ["add", "theorem", "total_degree_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1551777705, "sha": "78fd58dd", "message": "feat(linear_algebra/multivariate_polynomial): add degrees", "changes": [{"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": [["mod", "def", "degree_of", ["mv_polynomial"]], ["add", "def", "degrees", ["mv_polynomial"]], ["add", "theorem", "degrees_C", ["mv_polynomial"]], ["add", "theorem", "degrees_X", ["mv_polynomial"]], ["add", "theorem", "degrees_add", ["mv_polynomial"]], ["add", "theorem", "degrees_monomial", ["mv_polynomial"]], ["add", "theorem", "degrees_monomial_eq", ["mv_polynomial"]], ["add", "theorem", "degrees_mul", ["mv_polynomial"]], ["add", "theorem", "degrees_neg", ["mv_polynomial"]], ["add", "theorem", "degrees_one", ["mv_polynomial"]], ["add", "theorem", "degrees_pow", ["mv_polynomial"]], ["add", "theorem", "degrees_prod", ["mv_polynomial"]], ["add", "theorem", "degrees_sub", ["mv_polynomial"]], ["add", "theorem", "degrees_sum", ["mv_polynomial"]], ["add", "theorem", "degrees_zero", ["mv_polynomial"]], ["mod", "def", "vars", ["mv_polynomial"]]]}]}, {"timestamp": 1551777705, "sha": "c2d8bc2d", "message": "feat(data/finsupp): relatie to_multiset to 0, +, single, card, map, prod, and to_finset", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "card_to_multiset", ["finsupp"]], ["add", "theorem", "prod_to_multiset", ["finsupp"]], ["add", "theorem", "to_finset_to_multiset", ["finsupp"]], ["add", "theorem", "to_multiset_add", ["finsupp"]], ["add", "theorem", "to_multiset_map", ["finsupp"]], ["add", "theorem", "to_multiset_single", ["finsupp"]], ["add", "theorem", "to_multiset_zero", ["finsupp"]]]}]}, {"timestamp": 1551777705, "sha": "857842d0", "message": "feat(data/finsupp): add support_mul", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["add", "theorem", "support_mul", ["finsupp"]]]}]}, {"timestamp": 1551777705, "sha": "a77797f9", "message": "feat(data/multiset): add prod_smul", "changes": [{"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "prod_smul", ["multiset"]]]}]}, {"timestamp": 1551777705, "sha": "e9247457", "message": "feat(data/finset): add multiset.count_sup", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "count_sup", ["multiset"]]]}]}, {"timestamp": 1551777705, "sha": "e07cac54", "message": "feat(data/finset): add to_finset_smul", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "to_finset_smul", ["multiset"]]]}]}, {"timestamp": 1551777705, "sha": "f24b01be", "message": "feat(algebra/group_power): smul and pow are monoid homs", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "map_smul", ["is_add_monoid_hom"]], ["add", "theorem", "map_pow", ["is_monoid_hom"]]]}]}, {"timestamp": 1551777705, "sha": "32642e17", "message": "feat(linear_algebra): add dim_sup_add_dim_inf_eq", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "range_of_le", ["submodule"]], ["add", "theorem", "subtype_comp_of_le", ["submodule"]]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_add_dim_split", []], ["add", "theorem", "dim_sup_add_dim_inf_eq", []]]}]}, {"timestamp": 1551716769, "sha": "f46f0a67", "message": "feat(tactic/fin_cases): case bashing on finset, list, and fintype hypotheses. (#775)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "add_def", ["int"]], ["add", "theorem", "mul_def", ["int"]]]}, {"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_def", ["nat"]], ["add", "theorem", "mul_def", ["nat"]]]}, {"oldPath": "src/tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "test/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}]}, {"timestamp": 1551703047, "sha": "6cd0341a", "message": "docs(extras/tactic_writing): add ``%%(reflect n)`` to the tactic writing guide (#786)", "changes": [{"oldPath": "docs/extras/tactic_writing.md", "newPath": "docs/extras/tactic_writing.md", "changes": []}]}, {"timestamp": 1551639912, "sha": "201413b9", "message": "chore(topology): Splits topology.basic and topology.continuity (#785)\nAlso, the most basic aspects of continuity are now in topology.basic", "changes": [{"oldPath": "src/category_theory/instances/topological_spaces.lean", "newPath": "src/category_theory/instances/topological_spaces.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/bases.lean", "changes": [["add", "theorem", "Union_basis_of_is_open", ["topological_space"]], ["add", "theorem", "is_open_Union_countable", ["topological_space"]], ["add", "theorem", "is_open_generated_countable_inter", ["topological_space"]], ["add", "theorem", "is_open_of_is_topological_basis", ["topological_space"]], ["add", "theorem", "is_open_sUnion_countable", ["topological_space"]], ["add", "def", "is_topological_basis", ["topological_space"]], ["add", "theorem", "is_topological_basis_of_open_of_nhds", ["topological_space"]], ["add", "theorem", "is_topological_basis_of_subbasis", ["topological_space"]], ["add", "theorem", "mem_basis_subset_of_mem_open", ["topological_space"]], ["add", "theorem", "mem_nhds_of_is_topological_basis", ["topological_space"]], ["add", "theorem", "sUnion_basis_of_is_open", ["topological_space"]], ["add", "theorem", "second_countable_topology_induced", ["topological_space"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "closure_singleton", []], ["del", "theorem", "coinduced_compose", []], ["del", "theorem", "coinduced_id", []], ["del", "theorem", "coinduced_inf", []], ["del", "theorem", "coinduced_infi", []], ["del", "theorem", "coinduced_mono", []], ["del", "theorem", "coinduced_top", []], ["del", "def", "compact", []], ["del", "theorem", "compact_Union_of_compact", []], ["del", "theorem", "compact_adherence_nhdset", []], ["del", "theorem", "compact_bUnion_of_compact", []], ["del", "theorem", "compact_diff", []], ["del", "theorem", "compact_elim_finite_subcover", []], ["del", "theorem", "compact_elim_finite_subcover_image", []], ["del", "theorem", "compact_empty", []], ["del", "theorem", "compact_iff_finite_subcover", []], ["del", "theorem", "compact_iff_ultrafilter_le_nhds", []], ["del", "theorem", "compact_inter", []], ["del", "theorem", "compact_of_closed", []], ["del", "theorem", "compact_of_finite", []], ["del", "theorem", "compact_of_finite_subcover", []], ["del", "theorem", "compact_of_is_closed_subset", []], ["del", "theorem", "compact_singleton", []], ["del", "theorem", "compact_union_of_compact", []], ["del", "theorem", "compact_univ", []], ["del", "theorem", "compl_singleton_mem_nhds", []], ["del", "def", "connected_component", []], ["add", "theorem", "comp", ["continuous"]], ["add", "theorem", "tendsto", ["continuous"]], ["add", "def", "continuous", []], ["add", "def", "continuous_at", []], ["add", "theorem", "continuous_at_iff_ultrafilter", []], ["add", "def", "continuous_at_within", []], ["add", "theorem", "continuous_const", []], ["add", "theorem", "continuous_id", []], ["add", "theorem", "continuous_if", []], ["add", "theorem", "continuous_iff_continuous_at", []], ["add", "theorem", "continuous_iff_is_closed", []], ["add", "theorem", "continuous_iff_ultrafilter", []], ["add", "def", "continuous_on", []], ["del", "theorem", "eq_irreducible_component", []], ["del", "theorem", "eq_of_nhds_eq_nhds", []], ["del", "theorem", "eq_of_nhds_neq_bot", []], ["del", "theorem", "eq_top_of_singletons_open", []], ["del", "theorem", "exists_irreducible", []], ["del", "theorem", "exists_mem_inter", []], ["del", "theorem", "exists_open_singleton_of_fintype", []], ["del", "theorem", "gc_induced_coinduced", []], ["del", "theorem", "gc_nhds", []], ["del", "theorem", "generate_from_le", []], ["del", "theorem", "generate_from_le_iff_subset_is_open", []], ["del", "theorem", "generate_from_mono", []], ["del", "def", "gi_generate_from", []], ["add", "theorem", "image_closure_subset_closure_image", []], ["del", "theorem", "induced_bot", []], ["del", "theorem", "induced_compose", []], ["del", "theorem", "induced_generate_from_eq", []], ["del", "theorem", "induced_id", []], ["del", "theorem", "induced_le_iff_le_coinduced", []], ["del", "theorem", "induced_mono", []], ["del", "theorem", "induced_sup", []], ["del", "theorem", "induced_supr", []], ["del", "def", "irreducible_component", []], ["del", "theorem", "irreducible_component_subset_connected_component", []], ["del", "theorem", "irreducible_exists_mem_inter", []], ["del", "def", "is_clopen", []], ["del", "theorem", "is_clopen_compl", []], ["del", "theorem", "is_clopen_compl_iff", []], ["del", "theorem", "is_clopen_diff", []], ["del", "theorem", "is_clopen_empty", []], ["del", "theorem", "is_clopen_iff", []], ["del", "theorem", "is_clopen_inter", []], ["del", "theorem", "is_clopen_union", []], ["del", "theorem", "is_clopen_univ", []], ["del", "theorem", "is_closed_connected_component", []], ["del", "theorem", "is_closed_induced_iff", []], ["del", "theorem", "is_closed_irreducible_component", []], ["del", "theorem", "is_closed_singleton", []], ["del", "def", "is_connected", []], ["del", "theorem", "is_connected_closure", []], ["del", "theorem", "is_connected_connected_component", []], ["del", "theorem", "is_connected_empty", []], ["del", "theorem", "is_connected_of_is_irreducible", []], ["del", "theorem", "is_connected_sUnion", []], ["del", "theorem", "is_connected_singleton", []], ["del", "theorem", "is_connected_union", []], ["del", "def", "is_irreducible", []], ["del", "theorem", "is_irreducible_closure", []], ["del", "theorem", "is_irreducible_empty", []], ["del", "theorem", "is_irreducible_irreducible_component", []], ["del", "theorem", "is_irreducible_singleton", []], ["del", "theorem", "is_open_coinduced", []], ["del", "theorem", "is_open_discrete", []], ["del", "theorem", "is_open_induced_iff", []], ["del", "def", "is_totally_disconnected", []], ["del", "theorem", "is_totally_disconnected_empty", []], ["del", "theorem", "is_totally_disconnected_of_is_totally_separated", []], ["del", "theorem", "is_totally_disconnected_singleton", []], ["del", "def", "is_totally_separated", []], ["del", "theorem", "is_totally_separated_empty", []], ["del", "theorem", "is_totally_separated_singleton", []], ["del", "theorem", "le_of_nhds_le_nhds", []], ["del", "theorem", "lim_eq", []], ["del", "theorem", "lim_nhds_eq", []], ["del", "theorem", "lim_nhds_eq_of_closure", []], ["del", "theorem", "map_nhds_induced_of_surjective", []], ["add", "theorem", "mem_closure", []], ["del", "theorem", "mem_connected_component", []], ["del", "theorem", "mem_irreducible_component", []], ["del", "theorem", "mem_nhds_induced", []], ["del", "theorem", "mem_nhds_subtype", []], ["del", "theorem", "mem_nhds_within_subtype", []], ["del", "theorem", "mk_of_closure_sets", []], ["del", "theorem", "nhds_Sup", []], ["del", "theorem", "nhds_bot", []], ["del", "theorem", "nhds_cons", []], ["del", "theorem", "nhds_discrete", []], ["del", "theorem", "nhds_eq_nhds_iff", []], ["del", "theorem", "nhds_induced", []], ["del", "theorem", "nhds_is_closed", []], ["del", "theorem", "nhds_le_nhds_iff", []], ["del", "theorem", "nhds_list", []], ["del", "theorem", "nhds_mono", []], ["del", "theorem", "nhds_nil", []], ["del", "theorem", "nhds_subtype", []], ["del", "theorem", "nhds_sup", []], ["del", "theorem", "nhds_supr", []], ["del", "theorem", "nhds_top", []], ["del", "theorem", "nhds_within_eq_map_subtype_val", []], ["del", "theorem", "nhds_within_subtype", []], ["del", "theorem", "normal_separation", []], ["add", "theorem", "open_dom_of_pcontinuous", []], ["add", "def", "pcontinuous", []], ["add", "theorem", "pcontinuous_iff'", []], ["del", "theorem", "principal_subtype", []], ["del", "theorem", "quotient_dense_of_dense", []], ["del", "theorem", "subset_connected_component", []], ["del", "theorem", "t2_iff_nhds", []], ["del", "theorem", "t2_iff_ultrafilter", []], ["del", "theorem", "t2_separation", []], ["del", "theorem", "tendsto_nhds_unique", []], ["del", "theorem", "tendsto_nhds_within_iff_subtype", []], ["del", "theorem", "Union_basis_of_is_open", ["topological_space"]], ["del", "def", "closeds", ["topological_space"]], ["del", "def", "coinduced", ["topological_space"]], ["del", "def", "generate_from", ["topological_space"]], ["del", "inductive", "generate_open", ["topological_space"]], ["del", "def", "induced", ["topological_space"]], ["del", "theorem", "is_open_Union_countable", ["topological_space"]], ["del", "theorem", "is_open_generated_countable_inter", ["topological_space"]], ["del", "theorem", "is_open_of_is_topological_basis", ["topological_space"]], ["del", "theorem", "is_open_sUnion_countable", ["topological_space"]], ["del", "def", "is_topological_basis", ["topological_space"]], ["del", "theorem", "is_topological_basis_of_open_of_nhds", ["topological_space"]], ["del", "theorem", "is_topological_basis_of_subbasis", ["topological_space"]], ["del", "theorem", "mem_basis_subset_of_mem_open", ["topological_space"]], ["del", "theorem", "mem_nhds_of_is_topological_basis", ["topological_space"]], ["del", "theorem", "nhds_generate_from", ["topological_space"]], ["del", "theorem", "nhds_mk_of_nhds", ["topological_space"]], ["del", "def", "nonempty_compacts", ["topological_space"]], ["del", "theorem", "Sup_s", ["topological_space", "opens"]], ["del", "theorem", "empty_eq", ["topological_space", "opens"]], ["del", "theorem", "ext", ["topological_space", "opens"]], ["del", "def", "gc", ["topological_space", "opens"]], ["del", "def", "gi", ["topological_space", "opens"]], ["del", "theorem", "gi_choice_val", ["topological_space", "opens"]], ["del", "theorem", "inter_eq", ["topological_space", "opens"]], ["del", "def", "interior", ["topological_space", "opens"]], ["del", "def", "is_basis", ["topological_space", "opens"]], ["del", "theorem", "is_basis_iff_cover", ["topological_space", "opens"]], ["del", "theorem", "is_basis_iff_nbhd", ["topological_space", "opens"]], ["del", "theorem", "union_eq", ["topological_space", "opens"]], ["del", "def", "opens", ["topological_space"]], ["del", "theorem", "sUnion_basis_of_is_open", ["topological_space"]], ["del", "theorem", "second_countable_topology_induced", ["topological_space"]], ["del", "theorem", "tendsto_nhds_generate_from", ["topological_space"]]]}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/constructions.lean", "changes": [["del", "theorem", "closure_induced", []], ["del", "theorem", "compact_image", []], ["del", "theorem", "compact_range", []], ["del", "theorem", "comp", ["continuous"]], ["del", "theorem", "tendsto", ["continuous"]], ["del", "def", "continuous", []], ["del", "theorem", "continuous_Inf_dom", []], ["del", "theorem", "continuous_Inf_rng", []], ["del", "theorem", "continuous_Prop", []], ["del", "theorem", "continuous_Sup_dom", []], ["del", "theorem", "continuous_Sup_rng", []], ["del", "def", "continuous_at", []], ["del", "theorem", "continuous_at_iff_ultrafilter", []], ["del", "theorem", "tendsto_nhds_within_image", ["continuous_at_within"]], ["del", "def", "continuous_at_within", []], ["del", "theorem", "continuous_at_within_iff_continuous_at_restrict", []], ["del", "theorem", "continuous_at_within_iff_ptendsto_res", []], ["del", "theorem", "continuous_at_within_univ", []], ["del", "theorem", "continuous_bot", []], ["del", "theorem", "continuous_coinduced_dom", []], ["del", "theorem", "continuous_coinduced_rng", []], ["del", "theorem", "continuous_const", []], ["del", "theorem", "continuous_generated_from", []], ["del", "theorem", "continuous_id", []], ["del", "theorem", "continuous_if", []], ["del", "theorem", "continuous_iff_continuous_at", []], ["del", "theorem", "continuous_iff_induced_le", []], ["del", "theorem", "continuous_iff_is_closed", []], ["del", "theorem", "continuous_iff_le_coinduced", []], ["del", "theorem", "continuous_iff_ultrafilter", []], ["del", "theorem", "continuous_induced_dom", []], ["del", "theorem", "continuous_induced_rng", []], ["del", "theorem", "continuous_inf_dom", []], ["del", "theorem", "continuous_inf_rng_left", []], ["del", "theorem", "continuous_inf_rng_right", []], ["del", "theorem", "continuous_infi_dom", []], ["del", "theorem", "continuous_infi_rng", []], ["del", "theorem", "continuous_le_dom", []], ["del", "theorem", "continuous_le_rng", []], ["del", "theorem", "continuous_of_discrete_topology", []], ["del", "def", "continuous_on", []], ["del", "theorem", "continuous_on_iff'", []], ["del", "theorem", "continuous_on_iff", []], ["del", "theorem", "continuous_on_iff_continuous_restrict", []], ["del", "theorem", "continuous_sup_dom_left", []], ["del", "theorem", "continuous_sup_dom_right", []], ["del", "theorem", "continuous_sup_rng", []], ["del", "theorem", "continuous_supr_dom", []], ["del", "theorem", "continuous_supr_rng", []], ["del", "theorem", "continuous_top", []], ["del", "theorem", "closure_image_nhds_of_nhds", ["dense_embedding"]], ["del", "theorem", "closure_range", ["dense_embedding"]], ["del", "theorem", "comap_nhds_neq_bot", ["dense_embedding"]], ["del", "theorem", "continuous_extend", ["dense_embedding"]], ["del", "def", "extend", ["dense_embedding"]], ["del", "theorem", "extend_e_eq", ["dense_embedding"]], ["del", "theorem", "extend_eq", ["dense_embedding"]], ["del", "theorem", "inj_iff", ["dense_embedding"]], ["del", "theorem", "mk'", ["dense_embedding"]], ["del", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_embedding"]], ["del", "theorem", "tendsto_comap_nhds_nhds", ["dense_embedding"]], ["del", "theorem", "tendsto_extend", ["dense_embedding"]], ["del", "structure", "dense_embedding", []], ["del", "theorem", "closure_eq_preimage_closure_image", ["embedding"]], ["del", "theorem", "continuous", ["embedding"]], ["del", "theorem", "continuous_iff", ["embedding"]], ["del", "theorem", "map_nhds_eq", ["embedding"]], ["del", "theorem", "tendsto_nhds_iff", ["embedding"]], ["del", "def", "embedding", []], ["del", "theorem", "embedding_compose", []], ["del", "theorem", "embedding_id", []], ["del", "theorem", "embedding_is_closed", []], ["del", "theorem", "embedding_of_embedding_compose", []], ["del", "theorem", "embedding_open", []], ["del", "theorem", "embedding_prod_mk", []], ["del", "theorem", "image_closure_subset_closure_image", []], ["del", "theorem", "is_open_induced", []], ["del", "theorem", "is_open_induced_eq", []], ["del", "theorem", "of_inverse", ["is_open_map"]], ["del", "theorem", "to_quotient_map", ["is_open_map"]], ["del", "def", "is_open_map", []], ["del", "theorem", "is_open_map_iff_nhds_le", []], ["del", "theorem", "is_open_singleton_true", []], ["del", "theorem", "map_nhds_induced_eq", []], ["del", "theorem", "mem_closure", []], ["del", "theorem", "nhds_induced_eq_comap", []], ["del", "theorem", "nhds_within_le_comap", []], ["del", "def", "to_closeds", ["nonempty_compacts"]], ["del", "theorem", "open_dom_of_pcontinuous", []], ["del", "def", "pcontinuous", []], ["del", "theorem", "pcontinuous_iff'", []], ["del", "def", "quotient_map", []]]}, {"oldPath": null, "newPath": "src/topology/maps.lean", "changes": [["add", "theorem", "continuous_Prop", []], ["add", "theorem", "closure_image_nhds_of_nhds", ["dense_embedding"]], ["add", "theorem", "closure_range", ["dense_embedding"]], ["add", "theorem", "comap_nhds_neq_bot", ["dense_embedding"]], ["add", "theorem", "continuous_extend", ["dense_embedding"]], ["add", "def", "extend", ["dense_embedding"]], ["add", "theorem", "extend_e_eq", ["dense_embedding"]], ["add", "theorem", "extend_eq", ["dense_embedding"]], ["add", "theorem", "inj_iff", ["dense_embedding"]], ["add", "theorem", "mk'", ["dense_embedding"]], ["add", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_embedding"]], ["add", "theorem", "tendsto_comap_nhds_nhds", ["dense_embedding"]], ["add", "theorem", "tendsto_extend", ["dense_embedding"]], ["add", "structure", "dense_embedding", []], ["add", "theorem", "closure_eq_preimage_closure_image", ["embedding"]], ["add", "theorem", "continuous", ["embedding"]], ["add", "theorem", "continuous_iff", ["embedding"]], ["add", "theorem", "map_nhds_eq", ["embedding"]], ["add", "theorem", "tendsto_nhds_iff", ["embedding"]], ["add", "def", "embedding", []], ["add", "theorem", "embedding_compose", []], ["add", "theorem", "embedding_id", []], ["add", "theorem", "embedding_is_closed", []], ["add", "theorem", "embedding_of_embedding_compose", []], ["add", "theorem", "embedding_open", []], ["add", "theorem", "embedding_prod_mk", []], ["add", "theorem", "of_inverse", ["is_open_map"]], ["add", "theorem", "to_quotient_map", ["is_open_map"]], ["add", "def", "is_open_map", []], ["add", "theorem", "is_open_map_iff_nhds_le", []], ["add", "theorem", "is_open_singleton_true", []], ["add", "def", "quotient_map", []]]}, {"oldPath": "src/topology/metric_space/closeds.lean", "newPath": "src/topology/metric_space/closeds.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/opens.lean", "changes": [["add", "def", "closeds", ["topological_space"]], ["add", "def", "to_closeds", ["topological_space", "nonempty_compacts"]], ["add", "def", "nonempty_compacts", ["topological_space"]], ["add", "theorem", "Sup_s", ["topological_space", "opens"]], ["add", "theorem", "empty_eq", ["topological_space", "opens"]], ["add", "theorem", "ext", ["topological_space", "opens"]], ["add", "def", "gc", ["topological_space", "opens"]], ["add", "def", "gi", ["topological_space", "opens"]], ["add", "theorem", "gi_choice_val", ["topological_space", "opens"]], ["add", "theorem", "inter_eq", ["topological_space", "opens"]], ["add", "def", "interior", ["topological_space", "opens"]], ["add", "def", "is_basis", ["topological_space", "opens"]], ["add", "theorem", "is_basis_iff_cover", ["topological_space", "opens"]], ["add", "theorem", "is_basis_iff_nbhd", ["topological_space", "opens"]], ["add", "theorem", "union_eq", ["topological_space", "opens"]], ["add", "def", "opens", ["topological_space"]]]}, {"oldPath": null, "newPath": "src/topology/order.lean", "changes": [["add", "theorem", "closure_induced", []], ["add", "theorem", "coinduced_compose", []], ["add", "theorem", "coinduced_id", []], ["add", "theorem", "coinduced_inf", []], ["add", "theorem", "coinduced_infi", []], ["add", "theorem", "coinduced_mono", []], ["add", "theorem", "coinduced_top", []], ["add", "theorem", "continuous_Inf_dom", []], ["add", "theorem", "continuous_Inf_rng", []], ["add", "theorem", "continuous_Sup_dom", []], ["add", "theorem", "continuous_Sup_rng", []], ["add", "theorem", "tendsto_nhds_within_image", ["continuous_at_within"]], ["add", "theorem", "continuous_at_within_iff_continuous_at_restrict", []], ["add", "theorem", "continuous_at_within_iff_ptendsto_res", []], ["add", "theorem", "continuous_at_within_univ", []], ["add", "theorem", "continuous_bot", []], ["add", "theorem", "continuous_coinduced_dom", []], ["add", "theorem", "continuous_coinduced_rng", []], ["add", "theorem", "continuous_generated_from", []], ["add", "theorem", "continuous_iff_induced_le", []], ["add", "theorem", "continuous_iff_le_coinduced", []], ["add", "theorem", "continuous_induced_dom", []], ["add", "theorem", "continuous_induced_rng", []], ["add", "theorem", "continuous_inf_dom", []], ["add", "theorem", "continuous_inf_rng_left", []], ["add", "theorem", "continuous_inf_rng_right", []], ["add", "theorem", "continuous_infi_dom", []], ["add", "theorem", "continuous_infi_rng", []], ["add", "theorem", "continuous_le_dom", []], ["add", "theorem", "continuous_le_rng", []], ["add", "theorem", "continuous_of_discrete_topology", []], ["add", "theorem", "continuous_on_iff'", []], ["add", "theorem", "continuous_on_iff", []], ["add", "theorem", "continuous_on_iff_continuous_restrict", []], ["add", "theorem", "continuous_sup_dom_left", []], ["add", "theorem", "continuous_sup_dom_right", []], ["add", "theorem", "continuous_sup_rng", []], ["add", "theorem", "continuous_supr_dom", []], ["add", "theorem", "continuous_supr_rng", []], ["add", "theorem", "continuous_top", []], ["add", "theorem", "eq_of_nhds_eq_nhds", []], ["add", "theorem", "eq_top_of_singletons_open", []], ["add", "theorem", "gc_induced_coinduced", []], ["add", "theorem", "gc_nhds", []], ["add", "theorem", "generate_from_le", []], ["add", "theorem", "generate_from_le_iff_subset_is_open", []], ["add", "theorem", "generate_from_mono", []], ["add", "def", "gi_generate_from", []], ["add", "theorem", "induced_bot", []], ["add", "theorem", "induced_compose", []], ["add", "theorem", "induced_generate_from_eq", []], ["add", "theorem", "induced_id", []], ["add", "theorem", "induced_le_iff_le_coinduced", []], ["add", "theorem", "induced_mono", []], ["add", "theorem", "induced_sup", []], ["add", "theorem", "induced_supr", []], ["add", "theorem", "is_closed_induced_iff", []], ["add", "theorem", "is_open_coinduced", []], ["add", "theorem", "is_open_discrete", []], ["add", "theorem", "is_open_induced", []], ["add", "theorem", "is_open_induced_eq", []], ["add", "theorem", "is_open_induced_iff", []], ["add", "theorem", "le_of_nhds_le_nhds", []], ["add", "theorem", "map_nhds_induced_eq", []], ["add", "theorem", "map_nhds_induced_of_surjective", []], ["add", "theorem", "mem_nhds_induced", []], ["add", "theorem", "mem_nhds_subtype", []], ["add", "theorem", "mem_nhds_within_subtype", []], ["add", "theorem", "mk_of_closure_sets", []], ["add", "theorem", "nhds_Sup", []], ["add", "theorem", "nhds_bot", []], ["add", "theorem", "nhds_cons", []], ["add", "theorem", "nhds_discrete", []], ["add", "theorem", "nhds_induced", []], ["add", "theorem", "nhds_induced_eq_comap", []], ["add", "theorem", "nhds_list", []], ["add", "theorem", "nhds_mono", []], ["add", "theorem", "nhds_nil", []], ["add", "theorem", "nhds_subtype", []], ["add", "theorem", "nhds_sup", []], ["add", "theorem", "nhds_supr", []], ["add", "theorem", "nhds_top", []], ["add", "theorem", "nhds_within_eq_map_subtype_val", []], ["add", "theorem", "nhds_within_le_comap", []], ["add", "theorem", "nhds_within_subtype", []], ["add", "theorem", "principal_subtype", []], ["add", "theorem", "quotient_dense_of_dense", []], ["add", "theorem", "tendsto_nhds_within_iff_subtype", []], ["add", "def", "coinduced", ["topological_space"]], ["add", "def", "generate_from", ["topological_space"]], ["add", "inductive", "generate_open", ["topological_space"]], ["add", "def", "induced", ["topological_space"]], ["add", "theorem", "nhds_generate_from", ["topological_space"]], ["add", "theorem", "nhds_mk_of_nhds", ["topological_space"]], ["add", "theorem", "tendsto_nhds_generate_from", ["topological_space"]]]}, {"oldPath": null, "newPath": "src/topology/separation.lean", "changes": [["add", "theorem", "closure_singleton", []], ["add", "theorem", "compl_singleton_mem_nhds", []], ["add", "theorem", "eq_of_nhds_neq_bot", []], ["add", "theorem", "exists_open_singleton_of_fintype", []], ["add", "theorem", "is_closed_singleton", []], ["add", "theorem", "lim_eq", []], ["add", "theorem", "lim_nhds_eq", []], ["add", "theorem", "lim_nhds_eq_of_closure", []], ["add", "theorem", "nhds_eq_nhds_iff", []], ["add", "theorem", "nhds_is_closed", []], ["add", "theorem", "nhds_le_nhds_iff", []], ["add", "theorem", "normal_separation", []], ["add", "theorem", "t2_iff_nhds", []], ["add", "theorem", "t2_iff_ultrafilter", []], ["add", "theorem", "t2_separation", []], ["add", "theorem", "tendsto_nhds_unique", []]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}, {"oldPath": "src/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": null, "newPath": "src/topology/subset_properties.lean", "changes": [["add", "def", "compact", []], ["add", "theorem", "compact_Union_of_compact", []], ["add", "theorem", "compact_adherence_nhdset", []], ["add", "theorem", "compact_bUnion_of_compact", []], ["add", "theorem", "compact_diff", []], ["add", "theorem", "compact_elim_finite_subcover", []], ["add", "theorem", "compact_elim_finite_subcover_image", []], ["add", "theorem", "compact_empty", []], ["add", "theorem", "compact_iff_finite_subcover", []], ["add", "theorem", "compact_iff_ultrafilter_le_nhds", []], ["add", "theorem", "compact_image", []], ["add", "theorem", "compact_inter", []], ["add", "theorem", "compact_of_closed", []], ["add", "theorem", "compact_of_finite", []], ["add", "theorem", "compact_of_finite_subcover", []], ["add", "theorem", "compact_of_is_closed_subset", []], ["add", "theorem", "compact_range", []], ["add", "theorem", "compact_singleton", []], ["add", "theorem", "compact_union_of_compact", []], ["add", "theorem", "compact_univ", []], ["add", "def", "connected_component", []], ["add", "theorem", "eq_irreducible_component", []], ["add", "theorem", "exists_irreducible", []], ["add", "theorem", "exists_mem_inter", []], ["add", "def", "irreducible_component", []], ["add", "theorem", "irreducible_component_subset_connected_component", []], ["add", "theorem", "irreducible_exists_mem_inter", []], ["add", "def", "is_clopen", []], ["add", "theorem", "is_clopen_compl", []], ["add", "theorem", "is_clopen_compl_iff", []], ["add", "theorem", "is_clopen_diff", []], ["add", "theorem", "is_clopen_empty", []], ["add", "theorem", "is_clopen_iff", []], ["add", "theorem", "is_clopen_inter", []], ["add", "theorem", "is_clopen_union", []], ["add", "theorem", "is_clopen_univ", []], ["add", "theorem", "is_closed_connected_component", []], ["add", "theorem", "is_closed_irreducible_component", []], ["add", "def", "is_connected", []], ["add", "theorem", "is_connected_closure", []], ["add", "theorem", "is_connected_connected_component", []], ["add", "theorem", "is_connected_empty", []], ["add", "theorem", "is_connected_of_is_irreducible", []], ["add", "theorem", "is_connected_sUnion", []], ["add", "theorem", "is_connected_singleton", []], ["add", "theorem", "is_connected_union", []], ["add", "def", "is_irreducible", []], ["add", "theorem", "is_irreducible_closure", []], ["add", "theorem", "is_irreducible_empty", []], ["add", "theorem", "is_irreducible_irreducible_component", []], ["add", "theorem", "is_irreducible_singleton", []], ["add", "def", "is_totally_disconnected", []], ["add", "theorem", "is_totally_disconnected_empty", []], ["add", "theorem", "is_totally_disconnected_of_is_totally_separated", []], ["add", "theorem", "is_totally_disconnected_singleton", []], ["add", "def", "is_totally_separated", []], ["add", "theorem", "is_totally_separated_empty", []], ["add", "theorem", "is_totally_separated_singleton", []], ["add", "theorem", "mem_connected_component", []], ["add", "theorem", "mem_irreducible_component", []], ["add", "theorem", "subset_connected_component", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1551610903, "sha": "10848687", "message": "feat(analysis/{specific_limits,infinite_sum}): Cauchy of geometric bound (#753)", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "cauchy_seq_of_le_geometric", []]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "cauchy_seq_of_has_sum_dist", []]]}]}, {"timestamp": 1551619175, "sha": "1f90e189", "message": "feat(ring_theory/ideal_operations): Chinese Remainder Theorem (#774)", "changes": [{"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "bijective_quotient_inf_to_pi_quotient", ["ideal"]], ["add", "theorem", "exists_sub_mem", ["ideal"]], ["add", "theorem", "exists_sub_one_mem_and_mem", ["ideal"]], ["add", "theorem", "is_ring_hom_quotient_inf_to_pi_quotient", ["ideal"]], ["add", "def", "quotient_inf_to_pi_quotient", ["ideal"]]]}]}, {"timestamp": 1551548534, "sha": "fb8001d6", "message": "hopefully fixed for good this time", "changes": [{"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "182b2a3f", "message": "fix properly", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_mul_self'", ["int"]]]}]}, {"timestamp": 1551548534, "sha": "a4cc8b72", "message": "fix build", "changes": [{"oldPath": "src/data/gaussian_int.lean", "newPath": "src/data/gaussian_int.lean", "changes": [["add", "theorem", "nat_abs_norm_eq", ["gaussian_int"]]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "a75d57cb", "message": "fix build", "changes": [{"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "8dcd0718", "message": "generalize norm to zsqrtd", "changes": [{"oldPath": "src/data/gaussian_int.lean", "newPath": "src/data/gaussian_int.lean", "changes": [["add", "theorem", "coe_nat_abs_norm", ["gaussian_int"]], ["add", "theorem", "nat_abs_norm_mod_lt", ["gaussian_int"]], ["add", "theorem", "nat_cast_nat_abs_norm", ["gaussian_int"]], ["del", "def", "norm", ["gaussian_int"]], ["del", "theorem", "norm_eq_one_iff", ["gaussian_int"]], ["add", "theorem", "norm_mod_lt", ["gaussian_int"]], ["del", "theorem", "norm_mul", ["gaussian_int"]], ["del", "theorem", "norm_nat_cast", ["gaussian_int"]], ["add", "theorem", "norm_nonneg", ["gaussian_int"]], ["del", "theorem", "norm_one", ["gaussian_int"]], ["del", "theorem", "norm_zero", ["gaussian_int"]]]}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["add", "def", "norm", ["zsqrtd"]], ["add", "theorem", "norm_eq_mul_conj", ["zsqrtd"]], ["add", "theorem", "norm_eq_one_iff", ["zsqrtd"]], ["add", "theorem", "norm_int_cast", ["zsqrtd"]], ["add", "theorem", "norm_mul", ["zsqrtd"]], ["add", "theorem", "norm_nat_cast", ["zsqrtd"]], ["add", "theorem", "norm_nonneg", ["zsqrtd"]], ["add", "theorem", "norm_one", ["zsqrtd"]], ["add", "theorem", "norm_zero", ["zsqrtd"]]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "d98cae7f", "message": "fix build", "changes": [{"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "5cbd7fa7", "message": "changing names", "changes": [{"oldPath": "src/data/gaussian_int.lean", "newPath": "src/data/gaussian_int.lean", "changes": [["del", "theorem", "int_cast_im", ["gaussian_int"]], ["del", "theorem", "int_cast_re", ["gaussian_int"]], ["del", "theorem", "to_complex_im'", ["gaussian_int"]], ["add", "theorem", "to_complex_im", ["gaussian_int"]], ["del", "theorem", "to_complex_re'", ["gaussian_int"]], ["add", "theorem", "to_complex_re", ["gaussian_int"]], ["add", "theorem", "to_real_im", ["gaussian_int"]], ["add", "theorem", "to_real_re", ["gaussian_int"]]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": [["add", "theorem", "exists_pow_two_eq_neg_one_iff_mod_four_ne_three", ["zmodp"]], ["add", "theorem", "exists_pow_two_eq_prime_iff_of_mod_four_eq_one", ["zmodp"]], ["add", "theorem", "exists_pow_two_eq_prime_iff_of_mod_four_eq_three", ["zmodp"]], ["del", "theorem", "is_square_iff_is_not_square_of_mod_four_eq_three", ["zmodp"]], ["del", "theorem", "is_square_iff_is_square_of_mod_four_eq_one", ["zmodp"]], ["del", "theorem", "neg_one_is_square_iff_mod_four_ne_three", ["zmodp"]]]}]}, {"timestamp": 1551548534, "sha": "a9dfabac", "message": "The year is 2019", "changes": [{"oldPath": "src/data/gaussian_int.lean", "newPath": "src/data/gaussian_int.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "c36470f7", "message": "put sum_two_squares in nat.prime namespace", "changes": [{"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": [["add", "theorem", "sum_two_squares", ["nat", "prime"]], ["del", "theorem", "sum_two_squares", []]]}]}, {"timestamp": 1551548534, "sha": "d8f0921a", "message": "move lemmas to correct places", "changes": [{"oldPath": null, "newPath": "src/data/gaussian_int.lean", "changes": [["add", "theorem", "div_def", ["gaussian_int"]], ["add", "theorem", "int_cast_im", ["gaussian_int"]], ["add", "theorem", "int_cast_re", ["gaussian_int"]], ["add", "theorem", "mod_def", ["gaussian_int"]], ["add", "theorem", "nat_cast_complex_norm", ["gaussian_int"]], ["add", "theorem", "nat_cast_real_norm", ["gaussian_int"]], ["add", "def", "norm", ["gaussian_int"]], ["add", "theorem", "norm_eq_one_iff", ["gaussian_int"]], ["add", "theorem", "norm_eq_zero", ["gaussian_int"]], ["add", "theorem", "norm_le_norm_mul_left", ["gaussian_int"]], ["add", "theorem", "norm_mul", ["gaussian_int"]], ["add", "theorem", "norm_nat_cast", ["gaussian_int"]], ["add", "theorem", "norm_one", ["gaussian_int"]], ["add", "theorem", "norm_pos", ["gaussian_int"]], ["add", "theorem", "norm_sq_div_sub_div_lt_one", ["gaussian_int"]], ["add", "theorem", "norm_sq_le_norm_sq_of_re_le_of_im_le", ["gaussian_int"]], ["add", "theorem", "norm_zero", ["gaussian_int"]], ["add", "def", "to_complex", ["gaussian_int"]], ["add", "theorem", "to_complex_add", ["gaussian_int"]], ["add", "theorem", "to_complex_def'", ["gaussian_int"]], ["add", "theorem", "to_complex_def", ["gaussian_int"]], ["add", "theorem", "to_complex_def₂", ["gaussian_int"]], ["add", "theorem", "to_complex_div_im", ["gaussian_int"]], ["add", "theorem", "to_complex_div_re", ["gaussian_int"]], ["add", "theorem", "to_complex_eq_zero", ["gaussian_int"]], ["add", "theorem", "to_complex_im'", ["gaussian_int"]], ["add", "theorem", "to_complex_inj", ["gaussian_int"]], ["add", "theorem", "to_complex_mul", ["gaussian_int"]], ["add", "theorem", "to_complex_neg", ["gaussian_int"]], ["add", "theorem", "to_complex_one", ["gaussian_int"]], ["add", "theorem", "to_complex_re'", ["gaussian_int"]], ["add", "theorem", "to_complex_sub", ["gaussian_int"]], ["add", "theorem", "to_complex_zero", ["gaussian_int"]], ["add", "def", "gaussian_int", []]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": [["del", "theorem", "div_def", ["gaussian_int"]], ["del", "theorem", "int_cast_im", ["gaussian_int"]], ["del", "theorem", "int_cast_re", ["gaussian_int"]], ["del", "theorem", "mod_def", ["gaussian_int"]], ["del", "theorem", "nat_cast_complex_norm", ["gaussian_int"]], ["del", "theorem", "nat_cast_real_norm", ["gaussian_int"]], ["del", "def", "norm", ["gaussian_int"]], ["del", "theorem", "norm_eq_one_iff", ["gaussian_int"]], ["del", "theorem", "norm_eq_zero", ["gaussian_int"]], ["del", "theorem", "norm_le_norm_mul_left", ["gaussian_int"]], ["del", "theorem", "norm_mul", ["gaussian_int"]], ["del", "theorem", "norm_nat_cast", ["gaussian_int"]], ["del", "theorem", "norm_one", ["gaussian_int"]], ["del", "theorem", "norm_pos", ["gaussian_int"]], ["del", "theorem", "norm_sq_div_sub_div_lt_one", ["gaussian_int"]], ["del", "theorem", "norm_sq_le_norm_sq_of_re_le_of_im_le", ["gaussian_int"]], ["del", "theorem", "norm_zero", ["gaussian_int"]], ["del", "def", "to_complex", ["gaussian_int"]], ["del", "theorem", "to_complex_add", ["gaussian_int"]], ["del", "theorem", "to_complex_def'", ["gaussian_int"]], ["del", "theorem", "to_complex_def", ["gaussian_int"]], ["del", "theorem", "to_complex_def₂", ["gaussian_int"]], ["del", "theorem", "to_complex_div_im", ["gaussian_int"]], ["del", "theorem", "to_complex_div_re", ["gaussian_int"]], ["del", "theorem", "to_complex_eq_zero", ["gaussian_int"]], ["del", "theorem", "to_complex_im'", ["gaussian_int"]], ["del", "theorem", "to_complex_inj", ["gaussian_int"]], ["del", "theorem", "to_complex_mul", ["gaussian_int"]], ["del", "theorem", "to_complex_neg", ["gaussian_int"]], ["del", "theorem", "to_complex_one", ["gaussian_int"]], ["del", "theorem", "to_complex_re'", ["gaussian_int"]], ["del", "theorem", "to_complex_sub", ["gaussian_int"]], ["del", "theorem", "to_complex_zero", ["gaussian_int"]], ["del", "def", "gaussian_int", []]]}]}, {"timestamp": 1551548534, "sha": "4e48324b", "message": "fix build", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "add_eq_one_iff", ["nat"]], ["mod", "theorem", "le_induction", ["nat"]], ["add", "theorem", "mul_eq_one_iff", ["nat"]], ["add", "theorem", "mul_left_eq_self_iff", ["nat"]], ["add", "theorem", "mul_right_eq_self_iff", ["nat"]]]}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["del", "theorem", "mul_eq_prime_pow_two", ["nat", "prime"]], ["add", "theorem", "mul_eq_prime_pow_two_iff", ["nat", "prime"]]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "9c9aee45", "message": "finish proof of sum two squares", "changes": [{"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": [["add", "theorem", "mul_eq_prime_pow_two", ["nat", "prime"]]]}, {"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": [["add", "theorem", "norm_eq_one_iff", ["gaussian_int"]], ["add", "theorem", "norm_le_norm_mul_left", ["gaussian_int"]], ["add", "theorem", "norm_nat_cast", ["gaussian_int"]], ["add", "theorem", "norm_one", ["gaussian_int"]], ["add", "theorem", "norm_zero", ["gaussian_int"]], ["add", "theorem", "sum_two_squares", []]]}]}, {"timestamp": 1551548534, "sha": "bd86c0da", "message": "commit properly", "changes": [{"oldPath": "src/data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": [["add", "theorem", "neg_one_is_square_iff_mod_four_ne_three", ["zmodp"]]]}, {"oldPath": "src/number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": [["mod", "structure", "zsqrtd", []]]}, {"oldPath": "src/number_theory/sum_two_squares.lean", "newPath": "src/number_theory/sum_two_squares.lean", "changes": []}]}, {"timestamp": 1551548534, "sha": "49a85f48", "message": "prove Z[i] is a euclidean_domain", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "abs_sub_round", []], ["add", "theorem", "cast_round", ["rat"]], ["add", "def", "round", []]]}, {"oldPath": null, "newPath": "src/number_theory/sum_two_squares.lean", "changes": [["add", "theorem", "div_def", ["gaussian_int"]], ["add", "theorem", "int_cast_im", ["gaussian_int"]], ["add", "theorem", "int_cast_re", ["gaussian_int"]], ["add", "theorem", "mod_def", ["gaussian_int"]], ["add", "theorem", "nat_cast_complex_norm", ["gaussian_int"]], ["add", "theorem", "nat_cast_real_norm", ["gaussian_int"]], ["add", "def", "norm", ["gaussian_int"]], ["add", "theorem", "norm_eq_zero", ["gaussian_int"]], ["add", "theorem", "norm_mul", ["gaussian_int"]], ["add", "theorem", "norm_pos", ["gaussian_int"]], ["add", "theorem", "norm_sq_div_sub_div_lt_one", ["gaussian_int"]], ["add", "theorem", "norm_sq_le_norm_sq_of_re_le_of_im_le", ["gaussian_int"]], ["add", "def", "to_complex", ["gaussian_int"]], ["add", "theorem", "to_complex_add", ["gaussian_int"]], ["add", "theorem", "to_complex_def'", ["gaussian_int"]], ["add", "theorem", "to_complex_def", ["gaussian_int"]], ["add", "theorem", "to_complex_def₂", ["gaussian_int"]], ["add", "theorem", "to_complex_div_im", ["gaussian_int"]], ["add", "theorem", "to_complex_div_re", ["gaussian_int"]], ["add", "theorem", "to_complex_eq_zero", ["gaussian_int"]], ["add", "theorem", "to_complex_im'", ["gaussian_int"]], ["add", "theorem", "to_complex_inj", ["gaussian_int"]], ["add", "theorem", "to_complex_mul", ["gaussian_int"]], ["add", "theorem", "to_complex_neg", ["gaussian_int"]], ["add", "theorem", "to_complex_one", ["gaussian_int"]], ["add", "theorem", "to_complex_re'", ["gaussian_int"]], ["add", "theorem", "to_complex_sub", ["gaussian_int"]], ["add", "theorem", "to_complex_zero", ["gaussian_int"]], ["add", "def", "gaussian_int", []]]}]}, {"timestamp": 1551556517, "sha": "1f4f2e42", "message": "refactor(*): move matrix.lean to data/ and determinant.lean to linear_algebra/ (#779)", "changes": [{"oldPath": "src/ring_theory/matrix.lean", "newPath": "src/data/matrix.lean", "changes": []}, {"oldPath": "src/ring_theory/determinant.lean", "newPath": "src/linear_algebra/determinant.lean", "changes": []}]}, {"timestamp": 1551479145, "sha": "8fbf296d", "message": "feat(topology/metric_space/hausdorff_distance): Hausdorff distance", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "def", "closeds", ["topological_space"]], ["add", "def", "nonempty_compacts", ["topological_space"]]]}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": [["add", "def", "to_closeds", ["nonempty_compacts"]]]}, {"oldPath": "src/topology/metric_space/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": [["add", "theorem", "cauchy_seq_of_edist_le_half_pow", ["ennreal"]], ["add", "theorem", "edist_le_two_mul_half_pow", ["ennreal"]], ["add", "theorem", "half_pow_add_succ", ["ennreal"]], ["add", "theorem", "half_pow_mono", ["ennreal"]], ["add", "theorem", "half_pow_pos", ["ennreal"]], ["add", "theorem", "half_pow_tendsto_zero", ["ennreal"]], ["add", "theorem", "B2_lim", ["sequentially_complete"]], ["add", "theorem", "B2_pos", ["sequentially_complete"]], ["del", "theorem", "FB_lim", ["sequentially_complete"]], ["del", "theorem", "FB_pos", ["sequentially_complete"]], ["del", "theorem", "F_lim", ["sequentially_complete"]], ["del", "theorem", "F_pos", ["sequentially_complete"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/closeds.lean", "changes": [["add", "theorem", "edist_eq", ["emetric", "closeds"]], ["add", "theorem", "continuous_inf_edist_Hausdorff_edist", ["emetric"]], ["add", "theorem", "is_closed_subsets_of_is_closed", ["emetric"]], ["add", "theorem", "is_closed_in_closeds", ["emetric", "nonempty_compacts"]], ["add", "theorem", "uniform_embedding", ["emetric", "nonempty_compacts", "to_closeds"]], ["add", "theorem", "dist_eq", ["metric", "nonempty_compacts"]], ["add", "theorem", "uniform_continuous_inf_dist_Hausdorff_dist", ["metric"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/hausdorff_distance.lean", "changes": [["add", "def", "Hausdorff_edist", ["emetric"]], ["add", "theorem", "Hausdorff_edist_closure", ["emetric"]], ["add", "theorem", "Hausdorff_edist_closure₁", ["emetric"]], ["add", "theorem", "Hausdorff_edist_closure₂", ["emetric"]], ["add", "theorem", "Hausdorff_edist_comm", ["emetric"]], ["add", "theorem", "Hausdorff_edist_empty", ["emetric"]], ["add", "theorem", "Hausdorff_edist_image", ["emetric"]], ["add", "theorem", "Hausdorff_edist_le_ediam", ["emetric"]], ["add", "theorem", "Hausdorff_edist_le_of_inf_edist", ["emetric"]], ["add", "theorem", "Hausdorff_edist_le_of_mem_edist", ["emetric"]], ["add", "theorem", "Hausdorff_edist_self", ["emetric"]], ["add", "theorem", "Hausdorff_edist_self_closure", ["emetric"]], ["add", "theorem", "Hausdorff_edist_triangle", ["emetric"]], ["add", "theorem", "Hausdorff_edist_zero_iff_closure_eq_closure", ["emetric"]], ["add", "theorem", "Hausdorff_edist_zero_iff_eq_of_closed", ["emetric"]], ["add", "theorem", "continuous_inf_edist", ["emetric"]], ["add", "theorem", "exists_edist_lt_of_Hausdorff_edist_lt", ["emetric"]], ["add", "theorem", "exists_edist_lt_of_inf_edist_lt", ["emetric"]], ["add", "def", "inf_edist", ["emetric"]], ["add", "theorem", "inf_edist_closure", ["emetric"]], ["add", "theorem", "inf_edist_empty", ["emetric"]], ["add", "theorem", "inf_edist_image", ["emetric"]], ["add", "theorem", "inf_edist_le_Hausdorff_edist_of_mem", ["emetric"]], ["add", "theorem", "inf_edist_le_edist_of_mem", ["emetric"]], ["add", "theorem", "inf_edist_le_inf_edist_add_Hausdorff_edist", ["emetric"]], ["add", "theorem", "inf_edist_le_inf_edist_add_edist", ["emetric"]], ["add", "theorem", "inf_edist_le_inf_edist_of_subset", ["emetric"]], ["add", "theorem", "inf_edist_singleton", ["emetric"]], ["add", "theorem", "inf_edist_union", ["emetric"]], ["add", "theorem", "inf_edist_zero_of_mem", ["emetric"]], ["add", "theorem", "mem_closure_iff_inf_edist_zero", ["emetric"]], ["add", "theorem", "mem_iff_ind_edist_zero_of_closed", ["emetric"]], ["add", "theorem", "ne_empty_of_Hausdorff_edist_ne_top", ["emetric"]], ["add", "def", "Hausdorff_dist", ["metric"]], ["add", "theorem", "Hausdorff_dist_closure", ["metric"]], ["add", "theorem", "Hausdorff_dist_closure₁", ["metric"]], ["add", "theorem", "Hausdorff_dist_closure₂", ["metric"]], ["add", "theorem", "Hausdorff_dist_comm", ["metric"]], ["add", "theorem", "Hausdorff_dist_empty'", ["metric"]], ["add", "theorem", "Hausdorff_dist_empty", ["metric"]], ["add", "theorem", "Hausdorff_dist_image", ["metric"]], ["add", "theorem", "Hausdorff_dist_le_diam", ["metric"]], ["add", "theorem", "Hausdorff_dist_le_of_inf_dist", ["metric"]], ["add", "theorem", "Hausdorff_dist_le_of_mem_dist", ["metric"]], ["add", "theorem", "Hausdorff_dist_nonneg", ["metric"]], ["add", "theorem", "Hausdorff_dist_self_closure", ["metric"]], ["add", "theorem", "Hausdorff_dist_self_zero", ["metric"]], ["add", "theorem", "Hausdorff_dist_triangle'", ["metric"]], ["add", "theorem", "Hausdorff_dist_triangle", ["metric"]], ["add", "theorem", "Hausdorff_dist_zero_iff_closure_eq_closure", ["metric"]], ["add", "theorem", "Hausdorff_dist_zero_iff_eq_of_closed", ["metric"]], ["add", "theorem", "Hausdorff_edist_ne_top_of_ne_empty_of_bounded", ["metric"]], ["add", "theorem", "continuous_inf_dist", ["metric"]], ["add", "theorem", "exists_dist_lt_of_Hausdorff_dist_lt'", ["metric"]], ["add", "theorem", "exists_dist_lt_of_Hausdorff_dist_lt", ["metric"]], ["add", "theorem", "exists_dist_lt_of_inf_dist_lt", ["metric"]], ["add", "def", "inf_dist", ["metric"]], ["add", "theorem", "inf_dist_empty", ["metric"]], ["add", "theorem", "inf_dist_eq_closure", ["metric"]], ["add", "theorem", "inf_dist_image", ["metric"]], ["add", "theorem", "inf_dist_le_Hausdorff_dist_of_mem", ["metric"]], ["add", "theorem", "inf_dist_le_dist_of_mem", ["metric"]], ["add", "theorem", "inf_dist_le_inf_dist_add_Hausdorff_dist", ["metric"]], ["add", "theorem", "inf_dist_le_inf_dist_add_dist", ["metric"]], ["add", "theorem", "inf_dist_le_inf_dist_of_subset", ["metric"]], ["add", "theorem", "inf_dist_nonneg", ["metric"]], ["add", "theorem", "inf_dist_singleton", ["metric"]], ["add", "theorem", "inf_dist_zero_of_mem", ["metric"]], ["add", "theorem", "inf_edist_ne_top", ["metric"]], ["add", "theorem", "mem_closure_iff_inf_dist_zero", ["metric"]], ["add", "theorem", "mem_iff_ind_dist_zero_of_closed", ["metric"]], ["add", "theorem", "uniform_continuous_inf_dist", ["metric"]]]}]}, {"timestamp": 1551475440, "sha": "be88ceca", "message": "feat(analysis/exponential): added inequality lemmas", "changes": [{"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "theorem", "log_le_log", ["real"]], ["add", "theorem", "mul_rpow", ["real"]], ["add", "theorem", "one_le_rpow", ["real"]], ["mod", "theorem", "pow_nat_rpow_nat_inv", ["real"]], ["add", "theorem", "rpow_le_rpow", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["mod", "theorem", "exp_le_exp", ["real"]]]}]}, {"timestamp": 1551474938, "sha": "0bb0cec5", "message": "feat(group_theory): free_group and free_abelian_group are lawful monads (#737)", "changes": [{"oldPath": "src/group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "add_bind", ["free_abelian_group"]], ["add", "theorem", "add_seq", ["free_abelian_group"]], ["add", "theorem", "map_add", ["free_abelian_group"]], ["add", "theorem", "map_neg", ["free_abelian_group"]], ["add", "theorem", "map_pure", ["free_abelian_group"]], ["add", "theorem", "map_sub", ["free_abelian_group"]], ["add", "theorem", "map_zero", ["free_abelian_group"]], ["add", "theorem", "neg_bind", ["free_abelian_group"]], ["add", "theorem", "neg_seq", ["free_abelian_group"]], ["add", "theorem", "pure_bind", ["free_abelian_group"]], ["add", "theorem", "pure_seq", ["free_abelian_group"]], ["add", "theorem", "seq_add", ["free_abelian_group"]], ["add", "theorem", "seq_neg", ["free_abelian_group"]], ["add", "theorem", "seq_sub", ["free_abelian_group"]], ["add", "theorem", "seq_zero", ["free_abelian_group"]], ["add", "theorem", "sub_bind", ["free_abelian_group"]], ["add", "theorem", "sub_seq", ["free_abelian_group"]], ["add", "theorem", "zero_bind", ["free_abelian_group"]], ["add", "theorem", "zero_seq", ["free_abelian_group"]]]}, {"oldPath": "src/group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": [["add", "theorem", "inv_bind", ["free_group"]], ["mod", "theorem", "comp", ["free_group", "map"]], ["add", "theorem", "map_inv", ["free_group"]], ["add", "theorem", "map_mul", ["free_group"]], ["add", "theorem", "map_one", ["free_group"]], ["add", "theorem", "map_pure", ["free_group"]], ["add", "theorem", "mul_bind", ["free_group"]], ["add", "theorem", "one_bind", ["free_group"]], ["add", "theorem", "pure_bind", ["free_group"]], ["mod", "theorem", "quot_lift_mk", ["free_group"]], ["mod", "theorem", "quot_lift_on_mk", ["free_group"]], ["mod", "theorem", "to_group_eq_prod_map", ["free_group"]], ["mod", "def", "free_group", []]]}]}, {"timestamp": 1551474881, "sha": "116cffff", "message": "feat(data/zmod/basic): cast_mod_nat' and cast_mod_int' (#783)\n* cast_mod_int'\n* cast_val_int'", "changes": [{"oldPath": "src/data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": [["add", "theorem", "cast_mod_int'", ["zmod"]], ["add", "theorem", "cast_mod_nat'", ["zmod"]], ["add", "theorem", "eq_iff_modeq_int'", ["zmod"]], ["add", "theorem", "eq_iff_modeq_nat'", ["zmod"]]]}]}, {"timestamp": 1551435626, "sha": "04b5f885", "message": "refactor(analysis/asymptotics): minor formatting changes", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["mod", "theorem", "add", ["asymptotics", "is_O"]], ["mod", "theorem", "sub", ["asymptotics", "is_O"]], ["mod", "theorem", "symm", ["asymptotics", "is_O"]], ["mod", "theorem", "is_O_const_mul_left", ["asymptotics"]], ["mod", "theorem", "is_O_const_smul_left_iff", ["asymptotics"]], ["mod", "theorem", "is_O_refl", ["asymptotics"]], ["mod", "theorem", "add", ["asymptotics", "is_o"]], ["mod", "theorem", "sub", ["asymptotics", "is_o"]], ["mod", "theorem", "symm", ["asymptotics", "is_o"]], ["mod", "theorem", "to_is_O", ["asymptotics", "is_o"]], ["mod", "theorem", "is_o_const_smul_left", ["asymptotics"]], ["mod", "theorem", "tendsto_nhds_zero_of_is_o", ["asymptotics"]]]}]}, {"timestamp": 1551435626, "sha": "6363212d", "message": "feat(analysis/normed_space/deriv): generalize to spaces over any normed field", "changes": [{"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["del", "theorem", "has_fderiv_at_filter_equiv_aux", []], ["add", "theorem", "has_fderiv_at_filter_real_equiv", []]]}]}, {"timestamp": 1551435626, "sha": "89b8915e", "message": "feat(analysis/normed_space/deriv): add readable proof of chain rule", "changes": [{"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}]}, {"timestamp": 1551435626, "sha": "5dd1ba58", "message": "feat(analysis/*): is_bigo -> is_O, is_littleo -> is_o", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "add", ["asymptotics", "is_O"]], ["add", "theorem", "comp", ["asymptotics", "is_O"]], ["add", "theorem", "congr", ["asymptotics", "is_O"]], ["add", "theorem", "congr_left", ["asymptotics", "is_O"]], ["add", "theorem", "congr_of_sub", ["asymptotics", "is_O"]], ["add", "theorem", "congr_right", ["asymptotics", "is_O"]], ["add", "theorem", "mono", ["asymptotics", "is_O"]], ["add", "theorem", "sub", ["asymptotics", "is_O"]], ["add", "theorem", "symm", ["asymptotics", "is_O"]], ["add", "theorem", "trans", ["asymptotics", "is_O"]], ["add", "theorem", "trans_is_o", ["asymptotics", "is_O"]], ["add", "theorem", "trans_tendsto", ["asymptotics", "is_O"]], ["add", "theorem", "tri", ["asymptotics", "is_O"]], ["add", "def", "is_O", ["asymptotics"]], ["add", "theorem", "is_O_comm", ["asymptotics"]], ["add", "theorem", "is_O_congr", ["asymptotics"]], ["add", "theorem", "is_O_congr_left", ["asymptotics"]], ["add", "theorem", "is_O_congr_right", ["asymptotics"]], ["add", "theorem", "is_O_const_mul_left", ["asymptotics"]], ["add", "theorem", "is_O_const_mul_left_iff", ["asymptotics"]], ["add", "theorem", "is_O_const_mul_right_iff", ["asymptotics"]], ["add", "theorem", "is_O_const_one", ["asymptotics"]], ["add", "theorem", "is_O_const_smul_left", ["asymptotics"]], ["add", "theorem", "is_O_const_smul_left_iff", ["asymptotics"]], ["add", "theorem", "is_O_const_smul_right", ["asymptotics"]], ["add", "theorem", "is_O_iff", ["asymptotics"]], ["add", "theorem", "is_O_join", ["asymptotics"]], ["add", "theorem", "is_O_mul", ["asymptotics"]], ["add", "theorem", "is_O_neg_left", ["asymptotics"]], ["add", "theorem", "is_O_neg_right", ["asymptotics"]], ["add", "theorem", "is_O_norm_left", ["asymptotics"]], ["add", "theorem", "is_O_norm_right", ["asymptotics"]], ["add", "theorem", "is_O_of_is_O_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_O_refl", ["asymptotics"]], ["add", "theorem", "is_O_refl_left", ["asymptotics"]], ["add", "theorem", "is_O_smul", ["asymptotics"]], ["add", "theorem", "is_O_zero", ["asymptotics"]], ["add", "theorem", "is_O_zero_right_iff", ["asymptotics"]], ["del", "theorem", "add", ["asymptotics", "is_bigo"]], ["del", "theorem", "comp", ["asymptotics", "is_bigo"]], ["del", "theorem", "congr", ["asymptotics", "is_bigo"]], ["del", "theorem", "congr_left", ["asymptotics", "is_bigo"]], ["del", "theorem", "congr_of_sub", ["asymptotics", "is_bigo"]], ["del", "theorem", "congr_right", ["asymptotics", "is_bigo"]], ["del", "theorem", "mono", ["asymptotics", "is_bigo"]], ["del", "theorem", "sub", ["asymptotics", "is_bigo"]], ["del", "theorem", "symm", ["asymptotics", "is_bigo"]], ["del", "theorem", "trans", ["asymptotics", "is_bigo"]], ["del", "theorem", "trans_is_littleo", ["asymptotics", "is_bigo"]], ["del", "theorem", "trans_tendsto", ["asymptotics", "is_bigo"]], ["del", "theorem", "tri", ["asymptotics", "is_bigo"]], ["del", "def", "is_bigo", ["asymptotics"]], ["del", "theorem", "is_bigo_comm", ["asymptotics"]], ["del", "theorem", "is_bigo_congr", ["asymptotics"]], ["del", "theorem", "is_bigo_congr_left", ["asymptotics"]], ["del", "theorem", "is_bigo_congr_right", ["asymptotics"]], ["del", "theorem", "is_bigo_const_mul_left", ["asymptotics"]], ["del", "theorem", "is_bigo_const_mul_left_iff", ["asymptotics"]], ["del", "theorem", "is_bigo_const_mul_right_iff", ["asymptotics"]], ["del", "theorem", "is_bigo_const_one", ["asymptotics"]], ["del", "theorem", "is_bigo_const_smul_left", ["asymptotics"]], ["del", "theorem", "is_bigo_const_smul_left_iff", ["asymptotics"]], ["del", "theorem", "is_bigo_const_smul_right", ["asymptotics"]], ["del", "theorem", "is_bigo_iff", ["asymptotics"]], ["del", "theorem", "is_bigo_join", ["asymptotics"]], ["del", "theorem", "is_bigo_mul", ["asymptotics"]], ["del", "theorem", "is_bigo_neg_left", ["asymptotics"]], ["del", "theorem", "is_bigo_neg_right", ["asymptotics"]], ["del", "theorem", "is_bigo_norm_left", ["asymptotics"]], ["del", "theorem", "is_bigo_norm_right", ["asymptotics"]], ["del", "theorem", "is_bigo_of_is_bigo_const_mul_right", ["asymptotics"]], ["del", "theorem", "is_bigo_refl", ["asymptotics"]], ["del", "theorem", "is_bigo_refl_left", ["asymptotics"]], ["del", "theorem", "is_bigo_smul", ["asymptotics"]], ["del", "theorem", "is_bigo_zero", ["asymptotics"]], ["del", "theorem", "is_bigo_zero_right_iff", ["asymptotics"]], ["del", "theorem", "add", ["asymptotics", "is_littleo"]], ["del", "theorem", "comp", ["asymptotics", "is_littleo"]], ["del", "theorem", "congr", ["asymptotics", "is_littleo"]], ["del", "theorem", "congr_left", ["asymptotics", "is_littleo"]], ["del", "theorem", "congr_of_sub", ["asymptotics", "is_littleo"]], ["del", "theorem", "congr_right", ["asymptotics", "is_littleo"]], ["del", "theorem", "mono", ["asymptotics", "is_littleo"]], ["del", "theorem", "sub", ["asymptotics", "is_littleo"]], ["del", "theorem", "symm", ["asymptotics", "is_littleo"]], ["del", "theorem", "to_is_bigo", ["asymptotics", "is_littleo"]], ["del", "theorem", "trans", ["asymptotics", "is_littleo"]], ["del", "theorem", "trans_is_bigo", ["asymptotics", "is_littleo"]], ["del", "theorem", "trans_tendsto", ["asymptotics", "is_littleo"]], ["del", "theorem", "tri", ["asymptotics", "is_littleo"]], ["del", "def", "is_littleo", ["asymptotics"]], ["del", "theorem", "is_littleo_comm", ["asymptotics"]], ["del", "theorem", "is_littleo_congr", ["asymptotics"]], ["del", "theorem", "is_littleo_congr_left", ["asymptotics"]], ["del", "theorem", "is_littleo_congr_right", ["asymptotics"]], ["del", "theorem", "is_littleo_const_mul_left", ["asymptotics"]], ["del", "theorem", "is_littleo_const_mul_left_iff", ["asymptotics"]], ["del", "theorem", "is_littleo_const_mul_right", ["asymptotics"]], ["del", "theorem", "is_littleo_const_smul_left", ["asymptotics"]], ["del", "theorem", "is_littleo_const_smul_left_iff", ["asymptotics"]], ["del", "theorem", "is_littleo_const_smul_right", ["asymptotics"]], ["del", "theorem", "is_littleo_iff_tendsto", ["asymptotics"]], ["del", "theorem", "is_littleo_join", ["asymptotics"]], ["del", "theorem", "is_littleo_mul", ["asymptotics"]], ["del", "theorem", "is_littleo_mul_left", ["asymptotics"]], ["del", "theorem", "is_littleo_mul_right", ["asymptotics"]], ["del", "theorem", "is_littleo_neg_left", ["asymptotics"]], ["del", "theorem", "is_littleo_neg_right", ["asymptotics"]], ["del", "theorem", "is_littleo_norm_left", ["asymptotics"]], ["del", "theorem", "is_littleo_norm_right", ["asymptotics"]], ["del", "theorem", "is_littleo_of_is_littleo_const_mul_right", ["asymptotics"]], ["del", "theorem", "is_littleo_one_iff", ["asymptotics"]], ["del", "theorem", "is_littleo_refl_left", ["asymptotics"]], ["del", "theorem", "is_littleo_smul", ["asymptotics"]], ["del", "theorem", "is_littleo_zero", ["asymptotics"]], ["del", "theorem", "is_littleo_zero_right_iff", ["asymptotics"]], ["add", "theorem", "add", ["asymptotics", "is_o"]], ["add", "theorem", "comp", ["asymptotics", "is_o"]], ["add", "theorem", "congr", ["asymptotics", "is_o"]], ["add", "theorem", "congr_left", ["asymptotics", "is_o"]], ["add", "theorem", "congr_of_sub", ["asymptotics", "is_o"]], ["add", "theorem", "congr_right", ["asymptotics", "is_o"]], ["add", "theorem", "mono", ["asymptotics", "is_o"]], ["add", "theorem", "sub", ["asymptotics", "is_o"]], ["add", "theorem", "symm", ["asymptotics", "is_o"]], ["add", "theorem", "to_is_O", ["asymptotics", "is_o"]], ["add", "theorem", "trans", ["asymptotics", "is_o"]], ["add", "theorem", "trans_is_O", ["asymptotics", "is_o"]], ["add", "theorem", "trans_tendsto", ["asymptotics", "is_o"]], ["add", "theorem", "tri", ["asymptotics", "is_o"]], ["add", "def", "is_o", ["asymptotics"]], ["add", "theorem", "is_o_comm", ["asymptotics"]], ["add", "theorem", "is_o_congr", ["asymptotics"]], ["add", "theorem", "is_o_congr_left", ["asymptotics"]], ["add", "theorem", "is_o_congr_right", ["asymptotics"]], ["add", "theorem", "is_o_const_mul_left", ["asymptotics"]], ["add", "theorem", "is_o_const_mul_left_iff", ["asymptotics"]], ["add", "theorem", "is_o_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_o_const_smul_left", ["asymptotics"]], ["add", "theorem", "is_o_const_smul_left_iff", ["asymptotics"]], ["add", "theorem", "is_o_const_smul_right", ["asymptotics"]], ["add", "theorem", "is_o_iff_tendsto", ["asymptotics"]], ["add", "theorem", "is_o_join", ["asymptotics"]], ["add", "theorem", "is_o_mul", ["asymptotics"]], ["add", "theorem", "is_o_mul_left", ["asymptotics"]], ["add", "theorem", "is_o_mul_right", ["asymptotics"]], ["add", "theorem", "is_o_neg_left", ["asymptotics"]], ["add", "theorem", "is_o_neg_right", ["asymptotics"]], ["add", "theorem", "is_o_norm_left", ["asymptotics"]], ["add", "theorem", "is_o_norm_right", ["asymptotics"]], ["add", "theorem", "is_o_of_is_o_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_o_one_iff", ["asymptotics"]], ["add", "theorem", "is_o_refl_left", ["asymptotics"]], ["add", "theorem", "is_o_smul", ["asymptotics"]], ["add", "theorem", "is_o_zero", ["asymptotics"]], ["add", "theorem", "is_o_zero_right_iff", ["asymptotics"]], ["del", "theorem", "tendsto_nhds_zero_of_is_littleo", ["asymptotics"]], ["add", "theorem", "tendsto_nhds_zero_of_is_o", ["asymptotics"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_O_comp", ["is_bounded_linear_map"]], ["add", "theorem", "is_O_id", ["is_bounded_linear_map"]], ["add", "theorem", "is_O_sub", ["is_bounded_linear_map"]], ["del", "theorem", "is_bigo_comp", ["is_bounded_linear_map"]], ["del", "theorem", "is_bigo_id", ["is_bounded_linear_map"]], ["del", "theorem", "is_bigo_sub", ["is_bounded_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["del", "theorem", "is_littleo", ["has_fderiv_at"]], ["add", "theorem", "is_o", ["has_fderiv_at"]], ["add", "theorem", "is_O_sub", ["has_fderiv_at_filter"]], ["del", "theorem", "is_bigo_sub", ["has_fderiv_at_filter"]], ["del", "theorem", "is_littleo", ["has_fderiv_at_filter"]], ["add", "theorem", "is_o", ["has_fderiv_at_filter"]]]}]}, {"timestamp": 1551435626, "sha": "49ecc7b0", "message": "fix(*): fix things from change tendsto_congr -> tendsto.congr'", "changes": [{"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "congr'r", ["filter", "tendsto"]], ["del", "theorem", "tendsto_congr", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1551435626, "sha": "d74804bd", "message": "add has_fderiv_at_filter", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "congr", ["asymptotics", "is_bigo"]], ["add", "theorem", "congr_of_sub", ["asymptotics", "is_bigo"]], ["add", "theorem", "symm", ["asymptotics", "is_bigo"]], ["add", "theorem", "trans_tendsto", ["asymptotics", "is_bigo"]], ["add", "theorem", "tri", ["asymptotics", "is_bigo"]], ["add", "theorem", "is_bigo_comm", ["asymptotics"]], ["add", "theorem", "is_bigo_congr", ["asymptotics"]], ["add", "theorem", "is_bigo_congr_left", ["asymptotics"]], ["add", "theorem", "is_bigo_congr_right", ["asymptotics"]], ["mod", "theorem", "is_bigo_neg_left", ["asymptotics"]], ["mod", "theorem", "is_bigo_norm_left", ["asymptotics"]], ["add", "theorem", "is_bigo_refl_left", ["asymptotics"]], ["add", "theorem", "congr", ["asymptotics", "is_littleo"]], ["add", "theorem", "congr_of_sub", ["asymptotics", "is_littleo"]], ["add", "theorem", "symm", ["asymptotics", "is_littleo"]], ["add", "theorem", "trans_tendsto", ["asymptotics", "is_littleo"]], ["add", "theorem", "tri", ["asymptotics", "is_littleo"]], ["add", "theorem", "is_littleo_comm", ["asymptotics"]], ["add", "theorem", "is_littleo_congr", ["asymptotics"]], ["add", "theorem", "is_littleo_congr_left", ["asymptotics"]], ["add", "theorem", "is_littleo_congr_right", ["asymptotics"]], ["mod", "theorem", "is_littleo_neg_left", ["asymptotics"]], ["mod", "theorem", "is_littleo_norm_left", ["asymptotics"]], ["add", "theorem", "is_littleo_refl_left", ["asymptotics"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bigo_comp", ["is_bounded_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["del", "theorem", "chain_rule", []], ["del", "theorem", "chain_rule_at_within", []], ["del", "theorem", "continuous_at_of_has_fderiv_at", []], ["del", "theorem", "continuous_at_within_of_has_fderiv_at_within", []], ["add", "theorem", "comp", ["has_fderiv_at"]], ["mod", "theorem", "congr", ["has_fderiv_at"]], ["add", "theorem", "continuous_at", ["has_fderiv_at"]], ["mod", "theorem", "has_fderiv_at_add", []], ["add", "theorem", "has_fderiv_at_congr", []], ["add", "theorem", "comp", ["has_fderiv_at_filter"]], ["add", "theorem", "congr", ["has_fderiv_at_filter"]], ["add", "theorem", "is_bigo_sub", ["has_fderiv_at_filter"]], ["add", "theorem", "is_littleo", ["has_fderiv_at_filter"]], ["add", "theorem", "mono", ["has_fderiv_at_filter"]], ["add", "theorem", "tendsto_nhds", ["has_fderiv_at_filter"]], ["add", "def", "has_fderiv_at_filter", []], ["add", "theorem", "has_fderiv_at_filter_add", []], ["add", "theorem", "has_fderiv_at_filter_congr'", []], ["add", "theorem", "has_fderiv_at_filter_congr", []], ["add", "theorem", "has_fderiv_at_filter_const", []], ["add", "theorem", "has_fderiv_at_filter_equiv_aux", []], ["add", "theorem", "has_fderiv_at_filter_id", []], ["add", "theorem", "has_fderiv_at_filter_iff_tendsto", []], ["add", "theorem", "has_fderiv_at_filter_neg", []], ["add", "theorem", "has_fderiv_at_filter_of_has_fderiv_at", []], ["add", "theorem", "has_fderiv_at_filter_smul", []], ["add", "theorem", "has_fderiv_at_filter_sub", []], ["mod", "theorem", "has_fderiv_at_neg", []], ["mod", "theorem", "has_fderiv_at_sub", []], ["add", "theorem", "comp", ["has_fderiv_at_within"]], ["add", "theorem", "continuous_at_within", ["has_fderiv_at_within"]], ["mod", "theorem", "has_fderiv_at_within_add", []], ["add", "theorem", "has_fderiv_at_within_congr", []], ["del", "theorem", "has_fderiv_at_within_equiv_aux", []], ["mod", "theorem", "has_fderiv_at_within_neg", []], ["mod", "theorem", "has_fderiv_at_within_of_has_fderiv_at", []], ["mod", "theorem", "has_fderiv_at_within_sub", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "congr_sets", ["filter"]], ["add", "theorem", "congr'", ["filter", "tendsto"]], ["del", "theorem", "tendsto_cong", ["filter"]], ["add", "theorem", "tendsto_congr", ["filter"]]]}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": [["add", "theorem", "tendsto_nhds_within_image", ["continuous_at_within"]]]}]}, {"timestamp": 1551435626, "sha": "21b1fcc8", "message": "fix(asymptotics, deriv): minor formatting fixes", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": []}]}, {"timestamp": 1551435626, "sha": "16033bb5", "message": "feat(analysis/asymptotics,analysis/normed_space/deriv): improvements and additions", "changes": [{"oldPath": "src/analysis/asymptotics.lean", "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "congr_left", ["asymptotics", "is_bigo"]], ["add", "theorem", "congr_right", ["asymptotics", "is_bigo"]], ["add", "theorem", "trans", ["asymptotics", "is_bigo"]], ["add", "theorem", "trans_is_littleo", ["asymptotics", "is_bigo"]], ["add", "theorem", "is_bigo_const_mul_left", ["asymptotics"]], ["add", "theorem", "is_bigo_const_mul_left_iff", ["asymptotics"]], ["add", "theorem", "is_bigo_const_mul_right_iff", ["asymptotics"]], ["add", "theorem", "is_bigo_const_one", ["asymptotics"]], ["add", "theorem", "is_bigo_const_smul_left", ["asymptotics"]], ["add", "theorem", "is_bigo_const_smul_left_iff", ["asymptotics"]], ["add", "theorem", "is_bigo_const_smul_right", ["asymptotics"]], ["add", "theorem", "is_bigo_iff", ["asymptotics"]], ["del", "theorem", "is_bigo_iff_pos", ["asymptotics"]], ["add", "theorem", "is_bigo_join", ["asymptotics"]], ["add", "theorem", "is_bigo_mul", ["asymptotics"]], ["del", "theorem", "is_bigo_mul_left", ["asymptotics"]], ["del", "theorem", "is_bigo_mul_right", ["asymptotics"]], ["add", "theorem", "is_bigo_of_is_bigo_const_mul_right", ["asymptotics"]], ["del", "theorem", "is_bigo_of_is_bigo_of_is_bigo", ["asymptotics"]], ["add", "theorem", "is_bigo_refl", ["asymptotics"]], ["add", "theorem", "is_bigo_smul", ["asymptotics"]], ["del", "theorem", "is_bigo_smul_left", ["asymptotics"]], ["del", "theorem", "is_bigo_smul_right", ["asymptotics"]], ["mod", "theorem", "is_bigo_zero", ["asymptotics"]], ["add", "theorem", "is_bigo_zero_right_iff", ["asymptotics"]], ["add", "theorem", "congr_left", ["asymptotics", "is_littleo"]], ["add", "theorem", "congr_right", ["asymptotics", "is_littleo"]], ["add", "theorem", "trans", ["asymptotics", "is_littleo"]], ["add", "theorem", "trans_is_bigo", ["asymptotics", "is_littleo"]], ["add", "theorem", "is_littleo_const_mul_left", ["asymptotics"]], ["add", "theorem", "is_littleo_const_mul_left_iff", ["asymptotics"]], ["add", "theorem", "is_littleo_const_mul_right", ["asymptotics"]], ["add", "theorem", "is_littleo_const_smul_left", ["asymptotics"]], ["add", "theorem", "is_littleo_const_smul_left_iff", ["asymptotics"]], ["add", "theorem", "is_littleo_const_smul_right", ["asymptotics"]], ["del", "theorem", "is_littleo_iff_pos", ["asymptotics"]], ["add", "theorem", "is_littleo_join", ["asymptotics"]], ["add", "theorem", "is_littleo_mul", ["asymptotics"]], ["mod", "theorem", "is_littleo_mul_left", ["asymptotics"]], ["mod", "theorem", "is_littleo_mul_right", ["asymptotics"]], ["del", "theorem", "is_littleo_of_is_bigo_of_is_littleo", ["asymptotics"]], ["add", "theorem", "is_littleo_of_is_littleo_const_mul_right", ["asymptotics"]], ["del", "theorem", "is_littleo_of_is_littleo_of_is_bigo", ["asymptotics"]], ["del", "theorem", "is_littleo_of_tendsto", ["asymptotics"]], ["add", "theorem", "is_littleo_one_iff", ["asymptotics"]], ["add", "theorem", "is_littleo_smul", ["asymptotics"]], ["del", "theorem", "is_littleo_smul_left", ["asymptotics"]], ["del", "theorem", "is_littleo_smul_right", ["asymptotics"]], ["mod", "theorem", "is_littleo_zero", ["asymptotics"]], ["add", "theorem", "is_littleo_zero_right_iff", ["asymptotics"]], ["mod", "theorem", "tendsto_nhds_zero_of_is_littleo", ["asymptotics"]]]}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["mod", "def", "to_linear_map", ["is_bounded_linear_map"]]]}, {"oldPath": "src/analysis/normed_space/deriv.lean", "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["mod", "theorem", "chain_rule", []], ["add", "theorem", "chain_rule_at_within", []], ["add", "theorem", "continuous_at_of_has_fderiv_at", []], ["add", "theorem", "continuous_at_within_of_has_fderiv_at_within", []], ["del", "theorem", "continuous_of_has_fderiv", []], ["del", "theorem", "has_fderiv_add", []], ["add", "theorem", "congr", ["has_fderiv_at"]], ["add", "theorem", "is_littleo", ["has_fderiv_at"]], ["add", "theorem", "has_fderiv_at_add", []], ["add", "theorem", "has_fderiv_at_const", []], ["add", "theorem", "has_fderiv_at_id", []], ["add", "theorem", "has_fderiv_at_iff_tendsto", []], ["add", "theorem", "has_fderiv_at_neg", []], ["add", "theorem", "has_fderiv_at_smul", []], ["add", "theorem", "has_fderiv_at_sub", []], ["mod", "theorem", "congr", ["has_fderiv_at_within"]], ["add", "theorem", "mono", ["has_fderiv_at_within"]], ["add", "theorem", "has_fderiv_at_within_add", []], ["add", "theorem", "has_fderiv_at_within_const", []], ["add", "theorem", "has_fderiv_at_within_equiv_aux", []], ["add", "theorem", "has_fderiv_at_within_id", []], ["add", "theorem", "has_fderiv_at_within_iff_tendsto", []], ["del", "def", "has_fderiv_at_within_mono", []], ["add", "theorem", "has_fderiv_at_within_neg", []], ["add", "theorem", "has_fderiv_at_within_of_has_fderiv_at", []], ["add", "theorem", "has_fderiv_at_within_smul", []], ["add", "theorem", "has_fderiv_at_within_sub", []], ["del", "theorem", "has_fderiv_const", []], ["del", "theorem", "has_fderiv_equiv_aux", []], ["del", "theorem", "has_fderiv_id", []], ["del", "theorem", "has_fderiv_iff_littleo", []], ["del", "theorem", "has_fderiv_neg", []], ["del", "theorem", "has_fderiv_smul", []], ["del", "theorem", "has_fderiv_sub", []]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": []}]}, {"timestamp": 1551435626, "sha": "6265d261", "message": "feat(analysis/normed_space/deriv): start on derivative", "changes": [{"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": [["add", "theorem", "is_bigo_id", ["is_bounded_linear_map"]], ["add", "theorem", "is_bigo_sub", ["is_bounded_linear_map"]], ["add", "def", "to_linear_map", ["is_bounded_linear_map"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/deriv.lean", "changes": [["add", "theorem", "chain_rule", []], ["add", "theorem", "continuous_of_has_fderiv", []], ["add", "theorem", "has_fderiv_add", []], ["add", "def", "has_fderiv_at", []], ["add", "theorem", "congr", ["has_fderiv_at_within"]], ["add", "def", "has_fderiv_at_within", []], ["add", "def", "has_fderiv_at_within_mono", []], ["add", "theorem", "has_fderiv_const", []], ["add", "theorem", "has_fderiv_equiv_aux", []], ["add", "theorem", "has_fderiv_id", []], ["add", "theorem", "has_fderiv_iff_littleo", []], ["add", "theorem", "has_fderiv_neg", []], ["add", "theorem", "has_fderiv_smul", []], ["add", "theorem", "has_fderiv_sub", []]]}]}, {"timestamp": 1551435626, "sha": "92a5e0b1", "message": "feat(analysis/asymptotics): start on bigo and littlo", "changes": [{"oldPath": null, "newPath": "src/analysis/asymptotics.lean", "changes": [["add", "theorem", "add", ["asymptotics", "is_bigo"]], ["add", "theorem", "comp", ["asymptotics", "is_bigo"]], ["add", "theorem", "mono", ["asymptotics", "is_bigo"]], ["add", "theorem", "sub", ["asymptotics", "is_bigo"]], ["add", "def", "is_bigo", ["asymptotics"]], ["add", "theorem", "is_bigo_iff_pos", ["asymptotics"]], ["add", "theorem", "is_bigo_mul_left", ["asymptotics"]], ["add", "theorem", "is_bigo_mul_right", ["asymptotics"]], ["add", "theorem", "is_bigo_neg_left", ["asymptotics"]], ["add", "theorem", "is_bigo_neg_right", ["asymptotics"]], ["add", "theorem", "is_bigo_norm_left", ["asymptotics"]], ["add", "theorem", "is_bigo_norm_right", ["asymptotics"]], ["add", "theorem", "is_bigo_of_is_bigo_of_is_bigo", ["asymptotics"]], ["add", "theorem", "is_bigo_smul_left", ["asymptotics"]], ["add", "theorem", "is_bigo_smul_right", ["asymptotics"]], ["add", "theorem", "is_bigo_zero", ["asymptotics"]], ["add", "theorem", "add", ["asymptotics", "is_littleo"]], ["add", "theorem", "comp", ["asymptotics", "is_littleo"]], ["add", "theorem", "mono", ["asymptotics", "is_littleo"]], ["add", "theorem", "sub", ["asymptotics", "is_littleo"]], ["add", "theorem", "to_is_bigo", ["asymptotics", "is_littleo"]], ["add", "def", "is_littleo", ["asymptotics"]], ["add", "theorem", "is_littleo_iff_pos", ["asymptotics"]], ["add", "theorem", "is_littleo_iff_tendsto", ["asymptotics"]], ["add", "theorem", "is_littleo_mul_left", ["asymptotics"]], ["add", "theorem", "is_littleo_mul_right", ["asymptotics"]], ["add", "theorem", "is_littleo_neg_left", ["asymptotics"]], ["add", "theorem", "is_littleo_neg_right", ["asymptotics"]], ["add", "theorem", "is_littleo_norm_left", ["asymptotics"]], ["add", "theorem", "is_littleo_norm_right", ["asymptotics"]], ["add", "theorem", "is_littleo_of_is_bigo_of_is_littleo", ["asymptotics"]], ["add", "theorem", "is_littleo_of_is_littleo_of_is_bigo", ["asymptotics"]], ["add", "theorem", "is_littleo_of_tendsto", ["asymptotics"]], ["add", "theorem", "is_littleo_smul_left", ["asymptotics"]], ["add", "theorem", "is_littleo_smul_right", ["asymptotics"]], ["add", "theorem", "is_littleo_zero", ["asymptotics"]], ["add", "theorem", "tendsto_nhds_zero_of_is_littleo", ["asymptotics"]]]}]}, {"timestamp": 1551435626, "sha": "206a7a11", "message": "feat(*): add various small lemmas", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_norm", []], ["add", "theorem", "tendsto_nhds_zero", ["normed_space"]], ["add", "theorem", "tendsto_smul_const", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "le_comap_top", ["filter"]], ["add", "theorem", "congr", ["filter", "tendsto"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["del", "theorem", "tendsto_at_within_iff_subtype", []], ["add", "theorem", "tendsto_nhds_within_iff_subtype", []], ["add", "theorem", "tendsto_nhds_within_mono_left", []], ["add", "theorem", "tendsto_nhds_within_mono_right", []], ["add", "theorem", "tendsto_nhds_within_of_tendsto_nhds", []]]}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": [["add", "theorem", "nhds_within_le_comap", []]]}]}, {"timestamp": 1551445817, "sha": "4f7853a1", "message": "feat(data/list/basic): mem_rotate", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "mem_rotate", ["list"]]]}]}, {"timestamp": 1551387323, "sha": "05449a06", "message": "refactor(ring_theory/localization): rename of to mk, and define of (#765)\n* refactor(ring_theory/localization): rename of to mk, and define of\n* Make submonoid implicit variable of 'of'", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["add", "theorem", "coe_mul_mk", ["localization"]], ["del", "theorem", "coe_mul_of", ["localization"]], ["add", "theorem", "eq_zero_of", ["localization"]], ["add", "def", "mk", ["localization"]], ["add", "theorem", "mk_eq_div", ["localization"]], ["add", "theorem", "mk_eq_mul_mk_one", ["localization"]], ["add", "theorem", "mk_mul_cancel_left", ["localization"]], ["add", "theorem", "mk_mul_cancel_right", ["localization"]], ["add", "theorem", "mk_mul_mk", ["localization"]], ["add", "theorem", "mk_self''", ["localization"]], ["add", "theorem", "mk_self'", ["localization"]], ["add", "theorem", "mk_self", ["localization"]], ["add", "theorem", "injective", ["localization", "of"]], ["mod", "def", "of", ["localization"]], ["mod", "theorem", "of_add", ["localization"]], ["del", "theorem", "of_eq_div", ["localization"]], ["del", "theorem", "of_eq_mul_of_one", ["localization"]], ["mod", "theorem", "of_mul", ["localization"]], ["del", "theorem", "of_mul_cancel_left", ["localization"]], ["del", "theorem", "of_mul_cancel_right", ["localization"]], ["del", "theorem", "of_mul_of", ["localization"]], ["mod", "theorem", "of_neg", ["localization"]], ["mod", "theorem", "of_one", ["localization"]], ["mod", "theorem", "of_pow", ["localization"]], ["del", "theorem", "of_self''", ["localization"]], ["del", "theorem", "of_self'", ["localization"]], ["del", "theorem", "of_self", ["localization"]], ["mod", "theorem", "of_sub", ["localization"]], ["mod", "theorem", "of_zero", ["localization"]]]}]}, {"timestamp": 1551381295, "sha": "eb033cfe", "message": "feat(ring_theory/ideals): make ideal.quotient.field a discrete_field (#777)", "changes": [{"oldPath": "src/ring_theory/adjoin_root.lean", "newPath": "src/ring_theory/adjoin_root.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}]}, {"timestamp": 1551374401, "sha": "e6a3ca81", "message": "refactor(algebra/group): generalise and extend the API for with_zero (#762)\n* refactor(algebra/group): generalise and extend the API for with_zero\n* Shorter proof. Thanks Chris\n* Travis, try your best", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "coe_inj", ["with_one"]], ["add", "theorem", "coe_ne_one", ["with_one"]], ["add", "theorem", "mul_coe", ["with_one"]], ["add", "theorem", "ne_one_iff_exists", ["with_one"]], ["add", "theorem", "one_ne_coe", ["with_one"]], ["add", "theorem", "coe_one", ["with_zero"]], ["add", "theorem", "div_coe", ["with_zero"]], ["add", "theorem", "div_eq_div", ["with_zero"]], ["add", "theorem", "div_eq_iff_mul_eq", ["with_zero"]], ["add", "theorem", "div_mul_cancel", ["with_zero"]], ["add", "theorem", "div_one", ["with_zero"]], ["add", "theorem", "div_zero", ["with_zero"]], ["add", "theorem", "inv_coe", ["with_zero"]], ["add", "theorem", "inv_one", ["with_zero"]], ["add", "theorem", "inv_zero", ["with_zero"]], ["add", "theorem", "mul_coe", ["with_zero"]], ["add", "theorem", "mul_div_cancel", ["with_zero"]], ["add", "theorem", "mul_inv_rev", ["with_zero"]], ["add", "theorem", "mul_left_inv", ["with_zero"]], ["add", "theorem", "mul_right_inv", ["with_zero"]], ["add", "theorem", "one_div", ["with_zero"]], ["add", "theorem", "zero_div", ["with_zero"]]]}]}, {"timestamp": 1551372944, "sha": "781d1875", "message": "feat(group_theory/quotient_group): define ker_lift and prove simp-lemmas (#764)\n* feat(group_theory/quotient_group): define ker_lift and prove simp-lemmas\n* Add docstring", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": [["mod", "theorem", "injective_ker_lift", ["quotient_group"]], ["add", "def", "ker_lift", ["quotient_group"]], ["add", "theorem", "ker_lift_mk'", ["quotient_group"]], ["add", "theorem", "ker_lift_mk", ["quotient_group"]]]}]}, {"timestamp": 1551352175, "sha": "81f85308", "message": "fix(tactic/linarith): typo", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}]}, {"timestamp": 1551350020, "sha": "08d4d17b", "message": "feat(topology/basic): Add instances for subset/inter/union for opens(X) (#763)\n* feat(topology/basic): Add instances for subset/inter/union for opens(X)", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "empty_eq", ["topological_space", "opens"]], ["add", "theorem", "inter_eq", ["topological_space", "opens"]], ["add", "theorem", "union_eq", ["topological_space", "opens"]]]}]}, {"timestamp": 1551311617, "sha": "477338d2", "message": "refactor(data/subtype): organise in namespaces, use variables, add two simp-lemmas (#760)", "changes": [{"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": [["mod", "theorem", "coe_eta", ["subtype"]], ["mod", "theorem", "coe_ext", ["subtype"]], ["mod", "theorem", "coe_mk", ["subtype"]], ["mod", "theorem", "exists", ["subtype"]], ["mod", "theorem", "ext", ["subtype"]], ["mod", "theorem", "forall", ["subtype"]], ["mod", "theorem", "mk_eq_mk", ["subtype"]], ["mod", "theorem", "val_injective", ["subtype"]], ["add", "theorem", "val_prop'", ["subtype"]], ["add", "theorem", "val_prop", ["subtype"]]]}]}, {"timestamp": 1551307612, "sha": "af2cf74a", "message": "feat(group_theory/quotient_group): map is a group hom (#761)", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1551307031, "sha": "dfa855c2", "message": "feat(data/finset) remove unnecessary assumption from card_eq_succ (#772)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "card_eq_succ", ["finset"]]]}]}, {"timestamp": 1551309243, "sha": "cfde449a", "message": "fix(doc/tactics): linarith doc is outdated [ci-skip]", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1551303182, "sha": "6c71ac0b", "message": "fix(tactic/linarith): fix bug in strengthening of strict nat/int inequalities", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1551281119, "sha": "4667d2c2", "message": "feat(ring_theory/ideal_operations): ideals form a commutative semiring (#771)", "changes": [{"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}]}, {"timestamp": 1551276384, "sha": "05d1d339", "message": "fix(algebra/archimedean): swap names of floor_add_fract and fract_add_floor (#770)", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["mod", "theorem", "floor_add_fract", []], ["mod", "theorem", "fract_add_floor", []]]}]}, {"timestamp": 1551268944, "sha": "42d1ed70", "message": "feat(linarith): improve handling of strict inequalities in nat and int (#769)\n* feat(linarith): perform slightly better on ℕ and ℤ by strengthening t < 0 hyps to t + 1 ≤ 0\n* remove already completed TODO item", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1551218685, "sha": "3f477395", "message": "fix(docs/howto-contribute): main repository has moved", "changes": [{"oldPath": "docs/howto-contribute.md", "newPath": "docs/howto-contribute.md", "changes": []}]}, {"timestamp": 1551185843, "sha": "7450cc55", "message": "fix(scripts/update_mathlib): improve python style and error handling (#759)", "changes": [{"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1551111656, "sha": "71a7e1c4", "message": "fix(scripts/update-mathlib): cached archived were never expanded", "changes": [{"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1551110495, "sha": "42224838", "message": "fix(scripts/update-mathlib): fix the commit check", "changes": [{"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1551052322, "sha": "e23553a4", "message": "doc(nat/decidable_prime): add docstrings explaining the two decidable_prime instances (#757)", "changes": [{"oldPath": "docs/theories/naturals.md", "newPath": "docs/theories/naturals.md", "changes": []}, {"oldPath": "src/data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}]}, {"timestamp": 1551022594, "sha": "f9220866", "message": "feat(ring_theory/polynomial): more operations on polynomials (#679)", "changes": [{"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["add", "theorem", "is_noetherian_ring_mv_polynomial_fin", []], ["add", "theorem", "is_noetherian_ring_mv_polynomial_of_fintype", []], ["add", "theorem", "coeff_restriction'", ["polynomial"]], ["add", "theorem", "coeff_restriction", ["polynomial"]], ["add", "theorem", "coeff_to_subring'", ["polynomial"]], ["add", "theorem", "coeff_to_subring", ["polynomial"]], ["add", "theorem", "degree_restriction", ["polynomial"]], ["add", "theorem", "degree_to_subring", ["polynomial"]], ["add", "theorem", "eval₂_restriction", ["polynomial"]], ["add", "theorem", "frange_of_subring", ["polynomial"]], ["add", "theorem", "monic_restriction", ["polynomial"]], ["add", "theorem", "monic_to_subring", ["polynomial"]], ["add", "theorem", "nat_degree_restriction", ["polynomial"]], ["add", "theorem", "nat_degree_to_subring", ["polynomial"]], ["add", "def", "of_subring", ["polynomial"]], ["add", "def", "restriction", ["polynomial"]], ["add", "theorem", "restriction_one", ["polynomial"]], ["add", "theorem", "restriction_zero", ["polynomial"]], ["add", "def", "to_subring", ["polynomial"]], ["add", "theorem", "to_subring_one", ["polynomial"]], ["add", "theorem", "to_subring_zero", ["polynomial"]]]}]}, {"timestamp": 1551009567, "sha": "c9b2d0ee", "message": "chore(linear_algebra/multivariate_polynomial): remove unnecessary decidable_eq assumption (#755)", "changes": [{"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": []}]}, {"timestamp": 1550921857, "sha": "ddc016c6", "message": "feat(*): polar co-ordinates, de moivre, trig identities, quotient group for angles (#745)\n* feat(algebra/group_power): re-PRing polar co-ords\n* Update group_power.lean\n* feat(analysis/exponential): re-PRing polar stuff\n* feat(data.complex.exponential): re-PR polar stuff\n* fix(analysis.exponential): stylistic\n* fix(data.complex.exponential): stylistic\n* fix(analysis/exponential.lean): angle_eq_iff_two_pi_dvd_sub\n* fix(analysis/exponential): angle_eq_iff_two_pi_dvd_sub", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "pow_lt_pow_of_lt_left", []], ["add", "theorem", "pow_right_inj", []]]}, {"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "def", "angle", ["real", "angle"]], ["add", "theorem", "angle_eq_iff_two_pi_dvd_sub", ["real", "angle"]], ["add", "theorem", "coe_add", ["real", "angle"]], ["add", "theorem", "coe_gsmul", ["real", "angle"]], ["add", "theorem", "coe_neg", ["real", "angle"]], ["add", "theorem", "coe_sub", ["real", "angle"]], ["add", "theorem", "coe_two_pi", ["real", "angle"]], ["add", "theorem", "coe_zero", ["real", "angle"]], ["add", "theorem", "cos_eq_iff_eq_or_eq_neg", ["real", "angle"]], ["add", "theorem", "cos_sin_inj", ["real", "angle"]], ["add", "theorem", "sin_eq_iff_eq_or_add_eq_pi", ["real", "angle"]], ["add", "theorem", "cos_eq_zero_iff", ["real"]], ["add", "theorem", "cos_sub_cos", ["real"]], ["add", "theorem", "sin_sub_sin", ["real"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "cos_add_sin_mul_I_pow", ["complex"]], ["add", "theorem", "exp_nat_mul", ["complex"]], ["add", "theorem", "exp_nat_mul", ["real"]]]}]}, {"timestamp": 1550882500, "sha": "63fa61db", "message": "fix(analysis/specific_limits): remove useless assumption (#751)", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["mod", "theorem", "has_sum_of_absolute_convergence_real", []]]}]}, {"timestamp": 1550784905, "sha": "e739cf50", "message": "feat(order_dual): instances for order_dual and shortening proofs (#746)\n* feat(order_bot): instances for order_bot and shortening proofs\n* fix(topological_structure); remove unused import", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": [["mod", "theorem", "Liminf_nhds", []], ["mod", "theorem", "Limsup_eq_of_le_nhds", []], ["mod", "theorem", "exists_forall_ge_of_compact_of_continuous", []], ["mod", "theorem", "gt_mem_sets_of_Liminf_gt", []], ["mod", "theorem", "is_glb_of_is_lub_of_tendsto", []], ["mod", "theorem", "is_glb_of_mem_nhds", []], ["add", "theorem", "is_lub_of_is_glb_of_tendsto", []], ["mod", "theorem", "nhds_principal_ne_bot_of_is_glb", []]]}]}, {"timestamp": 1550766287, "sha": "3c3a0521", "message": "feat(field_theory/subfield): closure of subset in field (#742)", "changes": [{"oldPath": "src/field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": [["add", "def", "closure", ["field"]], ["add", "theorem", "closure_mono", ["field"]], ["add", "theorem", "closure_subset", ["field"]], ["add", "theorem", "closure_subset_iff", ["field"]], ["add", "theorem", "mem_closure", ["field"]], ["add", "theorem", "ring_closure_subset", ["field"]], ["add", "theorem", "subset_closure", ["field"]]]}]}, {"timestamp": 1550686084, "sha": "96564857", "message": "feat(data/finmap): lift_on₂ (#716)\n* feat(data/finmap): define lift_on₂ with lift_on", "changes": [{"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["add", "def", "lift_on₂", ["finmap"]], ["add", "theorem", "lift_on₂_to_finmap", ["finmap"]]]}]}, {"timestamp": 1550683927, "sha": "8b8ae32c", "message": "fix(order/basic): give order_dual the correct lt (#741)", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}]}, {"timestamp": 1550665982, "sha": "c7202e57", "message": "feat(analysis/exponential): pow_nat_rpow_nat_inv (#740)", "changes": [{"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "theorem", "abs_cpow_inv_nat", ["complex"]], ["add", "theorem", "pow_nat_rpow_nat_inv", ["real"]]]}]}, {"timestamp": 1550513230, "sha": "78ce6e49", "message": "feat(data/fintype): fintype.of_injective", "changes": [{"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}]}, {"timestamp": 1550483301, "sha": "9a2c13ab", "message": "feat(data/alist,data/finmap): always insert key-value pair (#722)\n* Change {alist,finmap}.insert to always insert the key-value pair\n instead of doing nothing if the inserted key is found. This allows for\n useful theorems such as lookup_insert.\n* Add list.keys and used key membership instead of exists/forall. This\n makes proofs easier in some places.\n* Add a few other useful theorems such as lookup_eq_none,\n lookup_erase, lookup_erase_ne.", "changes": [{"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["del", "theorem", "insert_of_pos", ["finmap"]], ["add", "theorem", "lookup_eq_none", ["finmap"]], ["add", "theorem", "lookup_erase", ["finmap"]], ["add", "theorem", "lookup_erase_ne", ["finmap"]], ["add", "theorem", "lookup_insert", ["finmap"]], ["del", "theorem", "not_mem_empty_entries", ["finmap"]], ["add", "theorem", "coe_keys", ["multiset"]], ["add", "def", "keys", ["multiset"]]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["add", "theorem", "insert_entries", ["alist"]], ["mod", "theorem", "insert_entries_of_neg", ["alist"]], ["del", "theorem", "insert_of_pos", ["alist"]], ["mod", "def", "keys", ["alist"]], ["mod", "theorem", "keys_insert", ["alist"]], ["add", "theorem", "lookup_eq_none", ["alist"]], ["add", "theorem", "lookup_erase", ["alist"]], ["add", "theorem", "lookup_erase_ne", ["alist"]], ["add", "theorem", "lookup_insert", ["alist"]], ["add", "theorem", "lookup_insert_ne", ["alist"]], ["del", "theorem", "mem_def", ["alist"]], ["mod", "theorem", "mem_insert", ["alist"]], ["mod", "theorem", "mem_keys", ["alist"]], ["mod", "theorem", "not_mem_empty", ["alist"]], ["del", "theorem", "not_mem_empty_entries", ["alist"]], ["mod", "theorem", "perm_insert", ["alist"]]]}, {"oldPath": "src/data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": [["add", "theorem", "exists_of_kerase", ["list"]], ["add", "theorem", "exists_of_mem_keys", ["list"]], ["add", "theorem", "kerase_cons_eq", ["list"]], ["add", "theorem", "kerase_cons_ne", ["list"]], ["add", "theorem", "kerase_keys_subset", ["list"]], ["del", "theorem", "kerase_map_fst", ["list"]], ["add", "theorem", "kerase_nil", ["list"]], ["add", "theorem", "kerase_of_not_mem_keys", ["list"]], ["add", "def", "keys", ["list"]], ["add", "theorem", "keys_cons", ["list"]], ["add", "theorem", "keys_kerase", ["list"]], ["add", "theorem", "keys_kreplace", ["list"]], ["add", "theorem", "keys_nil", ["list"]], ["add", "def", "kinsert", ["list"]], ["add", "theorem", "kinsert_def", ["list"]], ["add", "theorem", "kinsert_nodupkeys", ["list"]], ["del", "theorem", "kreplace_map_fst", ["list"]], ["add", "theorem", "lookup_kerase", ["list"]], ["add", "theorem", "lookup_kerase_ne", ["list"]], ["add", "theorem", "lookup_kinsert", ["list"]], ["add", "theorem", "lookup_kinsert_ne", ["list"]], ["add", "theorem", "mem_keys", ["list"]], ["add", "theorem", "mem_keys_kerase_of_ne", ["list"]], ["add", "theorem", "mem_keys_kinsert", ["list"]], ["add", "theorem", "mem_keys_of_mem", ["list"]], ["add", "theorem", "mem_keys_of_mem_keys_kerase", ["list"]], ["add", "theorem", "mem_lookup", ["list"]], ["mod", "theorem", "nodupkeys_cons", ["list"]], ["add", "theorem", "not_eq_key", ["list"]], ["add", "theorem", "not_mem_keys", ["list"]], ["add", "theorem", "not_mem_keys_kerase", ["list"]], ["add", "theorem", "perm_kinsert", ["list"]]]}]}, {"timestamp": 1550483157, "sha": "6b4435be", "message": "feat(data/polynomial): create nonzero_comm_semiring and generalize nonzero_comm_ring lemmas (#736)", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "def", "of_ne", ["nonzero_comm_semiring"]], ["mod", "theorem", "coe_ne_zero", ["units"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1550352249, "sha": "c64b67ed", "message": "feat(ring_theory/localization): revamp, ideal embedding (#481)", "changes": [{"oldPath": "src/ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": [["mod", "def", "at_prime", ["localization"]], ["add", "def", "inv_self", ["localization", "away"]], ["mod", "def", "away", ["localization"]], ["add", "theorem", "coe_add", ["localization"]], ["add", "theorem", "coe_mul", ["localization"]], ["add", "theorem", "coe_mul_of", ["localization"]], ["add", "theorem", "coe_neg", ["localization"]], ["add", "theorem", "coe_one", ["localization"]], ["add", "theorem", "coe_pow", ["localization"]], ["add", "theorem", "coe_sub", ["localization"]], ["add", "theorem", "coe_zero", ["localization"]], ["add", "def", "fraction_ring", ["localization"]], ["mod", "def", "inv_aux", ["localization"]], ["add", "def", "le_order_embedding", ["localization"]], ["add", "theorem", "map_comap", ["localization"]], ["add", "def", "of", ["localization"]], ["add", "theorem", "of_add", ["localization"]], ["del", "def", "of_comm_ring", ["localization"]], ["add", "theorem", "of_eq_div", ["localization"]], ["add", "theorem", "of_eq_mul_of_one", ["localization"]], ["add", "theorem", "of_mul", ["localization"]], ["add", "theorem", "of_mul_cancel_left", ["localization"]], ["add", "theorem", "of_mul_cancel_right", ["localization"]], ["add", "theorem", "of_mul_of", ["localization"]], ["add", "theorem", "of_neg", ["localization"]], ["add", "theorem", "of_one", ["localization"]], ["add", "theorem", "of_pow", ["localization"]], ["add", "theorem", "of_self''", ["localization"]], ["add", "theorem", "of_self'", ["localization"]], ["add", "theorem", "of_self", ["localization"]], ["add", "theorem", "of_sub", ["localization"]], ["add", "theorem", "of_zero", ["localization"]], ["del", "def", "of_integral_domain", ["localization", "quotient_ring", "field"]], ["del", "def", "quotient_ring", ["localization"]], ["mod", "def", "r", ["localization"]], ["mod", "theorem", "r_of_eq", ["localization"]], ["mod", "theorem", "symm", ["localization"]]]}]}, {"timestamp": 1550251776, "sha": "17f9bef0", "message": "feat(category/monad/cont): continuation passing monad (#728)", "changes": [{"oldPath": null, "newPath": "src/category/monad/cont.lean", "changes": [["add", "def", "map", ["cont_t"]], ["add", "theorem", "monad_lift_bind", ["cont_t"]], ["add", "def", "run", ["cont_t"]], ["add", "theorem", "run_cont_t_map_cont_t", ["cont_t"]], ["add", "theorem", "run_with_cont_t", ["cont_t"]], ["add", "def", "with_cont_t", ["cont_t"]], ["add", "def", "cont_t", []], ["add", "def", "goto", ["monad_cont"]], ["add", "structure", "label", ["monad_cont"]]]}]}, {"timestamp": 1550259476, "sha": "0a6e7057", "message": "refactor(data/equiv/algebra): move polynomial lemmas from equiv/algebra to mv_polynomial (#731)\n* refactor(data/equiv/algebra): move polynomial lemma from equiv/algebra to mv_polynomial\n* remove update-mathlib.py", "changes": [{"oldPath": "src/category_theory/instances/rings.lean", "newPath": "src/category_theory/instances/rings.lean", "changes": []}, {"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["del", "def", "iter_to_sum", ["mv_polynomial"]], ["del", "theorem", "iter_to_sum_C_C", ["mv_polynomial"]], ["del", "theorem", "iter_to_sum_C_X", ["mv_polynomial"]], ["del", "theorem", "iter_to_sum_X", ["mv_polynomial"]], ["del", "def", "mv_polynomial_equiv_mv_polynomial", ["mv_polynomial"]], ["del", "def", "option_equiv_left", ["mv_polynomial"]], ["del", "def", "option_equiv_right", ["mv_polynomial"]], ["del", "def", "pempty_ring_equiv", ["mv_polynomial"]], ["del", "def", "punit_ring_equiv", ["mv_polynomial"]], ["del", "def", "ring_equiv_congr", ["mv_polynomial"]], ["del", "def", "ring_equiv_of_equiv", ["mv_polynomial"]], ["del", "def", "sum_ring_equiv", ["mv_polynomial"]], ["del", "def", "sum_to_iter", ["mv_polynomial"]], ["del", "theorem", "sum_to_iter_C", ["mv_polynomial"]], ["del", "theorem", "sum_to_iter_Xl", ["mv_polynomial"]], ["del", "theorem", "sum_to_iter_Xr", ["mv_polynomial"]]]}, {"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": [["add", "def", "iter_to_sum", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_C_C", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_C_X", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_X", ["mv_polynomial"]], ["add", "def", "mv_polynomial_equiv_mv_polynomial", ["mv_polynomial"]], ["add", "def", "option_equiv_left", ["mv_polynomial"]], ["add", "def", "option_equiv_right", ["mv_polynomial"]], ["add", "def", "pempty_ring_equiv", ["mv_polynomial"]], ["add", "def", "punit_ring_equiv", ["mv_polynomial"]], ["add", "def", "ring_equiv_congr", ["mv_polynomial"]], ["add", "def", "ring_equiv_of_equiv", ["mv_polynomial"]], ["add", "def", "sum_ring_equiv", ["mv_polynomial"]], ["add", "def", "sum_to_iter", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_C", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_Xl", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_Xr", ["mv_polynomial"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1550240785, "sha": "d80b03e6", "message": "chore(order/filter/basic): update documentation of filter_upwards", "changes": [{"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": []}]}, {"timestamp": 1550216409, "sha": "8730619b", "message": "chore(topology/algebra/topological_structures): remove unused import (#729)", "changes": [{"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": []}]}, {"timestamp": 1550168774, "sha": "ce580d7b", "message": "refactor(data/equiv): rename subtype_equiv_of_subtype to subtype_congr and subtype_congr to subtype_congr_prop", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "subtype_congr", ["equiv"]], ["add", "def", "subtype_congr_prop", ["equiv"]], ["del", "def", "subtype_equiv_of_subtype", ["equiv"]]]}]}, {"timestamp": 1550167491, "sha": "683519f3", "message": "feat(data/equiv/basic): generalise subtype_equiv_of_subtype (#724)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "subtype_equiv_of_subtype'", ["equiv"]], ["mod", "def", "subtype_equiv_of_subtype", ["equiv"]]]}]}, {"timestamp": 1550167464, "sha": "d4568a41", "message": "fix(data/subtype): don't use pattern matching in subtype.map (#725)", "changes": [{"oldPath": "src/data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}]}, {"timestamp": 1550087495, "sha": "5da8605f", "message": "chore(deploy): clean up deploy_nightly.sh (#720)", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1550100638, "sha": "a6150a32", "message": "refactor(data/real): move cau_seq_filter to analysis/metric_space (#723)", "changes": [{"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_filter.lean", "newPath": "src/topology/metric_space/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1550077268, "sha": "3fd0e60a", "message": "refactor(topology/algebra/infinite_sum): Cauchy condition for infinite sums generalized to complete topological groups", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "ball_0_eq", []], ["add", "theorem", "has_sum_iff_vanishing_norm", []], ["add", "theorem", "has_sum_of_has_sum_norm", []], ["add", "theorem", "has_sum_of_norm_bounded", []], ["add", "theorem", "norm_tsum_le_tsum_norm", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "has_sum_iff_cauchy", []], ["del", "theorem", "has_sum_of_has_sum_norm", []]]}, {"oldPath": "src/measure_theory/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": [["mod", "def", "pure", ["pmf"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_at_top'", ["filter"]], ["mod", "theorem", "tendsto_at_top", ["filter"]]]}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_comp_of_has_sum_of_injective", []], ["add", "theorem", "has_sum_iff_cauchy", []], ["add", "theorem", "has_sum_iff_has_sum_ne_zero_bij", []], ["add", "theorem", "has_sum_iff_vanishing", []], ["mod", "theorem", "has_sum_of_has_sum_of_sub", []], ["add", "theorem", "is_sum_iff_is_sum_of_ne_zero_bij", []], ["del", "theorem", "is_sum_ite", []], ["add", "theorem", "is_sum_ite_eq", []], ["add", "theorem", "is_sum_le_inj", []], ["add", "def", "cases_on'", ["option"]], ["del", "theorem", "tsum_ite", []], ["add", "theorem", "tsum_ite_eq", []]]}, {"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": [["add", "theorem", "exists_nhds_split_inv", []]]}]}, {"timestamp": 1550011480, "sha": "246c2809", "message": "feat(tactic/basic,tactic/interactive): improvements to set tactic (#712)\n* feat(tactic/basic,tactic/interactive): improvements to set tactic\n* feat(tactic/interactive): take optional explicit type in set tactic", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}]}, {"timestamp": 1549986635, "sha": "f6ca16e0", "message": "fix(nightly): improve conditional (#719)", "changes": [{"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}]}, {"timestamp": 1550002549, "sha": "a4afa904", "message": "refactor(analysis/specific_limits): generalize has_sum_of_absolute_convergence to normed_groups", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "norm_triangle_sub", []], ["add", "theorem", "norm_triangle_sum", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "has_sum_iff_cauchy", []], ["del", "theorem", "has_sum_of_absolute_convergence", []], ["add", "theorem", "has_sum_of_absolute_convergence_real", []], ["add", "theorem", "has_sum_of_has_sum_norm", []], ["del", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "disjoint_sdiff", ["finset"]]]}, {"oldPath": "src/measure_theory/decomposition.lean", "newPath": "src/measure_theory/decomposition.lean", "changes": []}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["del", "theorem", "tendsto_at_top_infi_nat", []], ["del", "theorem", "tendsto_at_top_supr_nat", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "tendsto_at_top_at_top", ["filter"]], ["add", "theorem", "tendsto_at_top_principal", ["filter"]]]}, {"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": [["add", "theorem", "infi_eq_of_tendsto", []], ["add", "theorem", "tendsto_at_top_infi_nat", []], ["add", "theorem", "tendsto_at_top_supr_nat", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "is_sum_iff_tendsto_nat", ["ennreal"]], ["mod", "theorem", "has_sum_of_nonneg_of_le", []], ["add", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []], ["mod", "theorem", "exists_le_is_sum_of_le", ["nnreal"]], ["add", "theorem", "is_sum_iff_tendsto_nat", ["nnreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["mod", "theorem", "tendsto_at_top", ["metric"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "cauchy_iff_exists_le_nhds", []], ["add", "theorem", "cauchy_map_iff", []], ["add", "theorem", "cauchy_map_iff_exists_tendsto", []]]}]}, {"timestamp": 1549964023, "sha": "503a4235", "message": "feat(update-mathlib): improve setup and error messages", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}, {"oldPath": "scripts/setup-update-mathlib.sh", "newPath": "scripts/setup-update-mathlib.sh", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1549985322, "sha": "b6a47633", "message": "refactor(order/filter): replace tendsto_comp_succ_at_top_iff by tendsto_add_at_top_iff_nat", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "tendsto_comp_succ_at_top_iff", []], ["mod", "theorem", "tendsto_one_div_add_at_top_nhds_0_nat", []], ["mod", "theorem", "tendsto_pow_at_top_at_top_of_gt_1_nat", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "tendsto_add_at_top_iff_nat", ["filter"]]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1549961213, "sha": "c4e84146", "message": "fix(update-mathlib): install from anywhere in your directory structure", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}]}, {"timestamp": 1549980582, "sha": "f5a85f10", "message": "refactor(order/filter): move lift and lift' to separate file", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "prod_eq_empty_iff", ["set"]]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["add", "theorem", "bot_prod", ["filter"]], ["del", "theorem", "comap_eq_lift'", ["filter"]], ["del", "theorem", "comap_lift'_eq2", ["filter"]], ["del", "theorem", "comap_lift'_eq", ["filter"]], ["del", "theorem", "comap_lift_eq2", ["filter"]], ["del", "theorem", "comap_lift_eq", ["filter"]], ["del", "theorem", "le_lift'", ["filter"]], ["del", "theorem", "le_lift", ["filter"]], ["del", "theorem", "lift'_cong", ["filter"]], ["del", "theorem", "lift'_id", ["filter"]], ["del", "theorem", "lift'_inf_principal_eq", ["filter"]], ["del", "theorem", "lift'_infi", ["filter"]], ["del", "theorem", "lift'_le", ["filter"]], ["del", "theorem", "lift'_lift'_assoc", ["filter"]], ["del", "theorem", "lift'_lift_assoc", ["filter"]], ["del", "theorem", "lift'_mono'", ["filter"]], ["del", "theorem", "lift'_mono", ["filter"]], ["del", "theorem", "lift'_neq_bot_iff", ["filter"]], ["del", "theorem", "lift'_principal", ["filter"]], ["del", "theorem", "lift_assoc", ["filter"]], ["del", "theorem", "lift_comm", ["filter"]], ["del", "theorem", "lift_const", ["filter"]], ["del", "theorem", "lift_inf", ["filter"]], ["del", "theorem", "lift_infi'", ["filter"]], ["del", "theorem", "lift_infi", ["filter"]], ["del", "theorem", "lift_le", ["filter"]], ["del", "theorem", "lift_lift'_assoc", ["filter"]], ["del", "theorem", "lift_lift'_same_eq_lift'", ["filter"]], ["del", "theorem", "lift_lift'_same_le_lift'", ["filter"]], ["del", "theorem", "lift_lift_same_eq_lift", ["filter"]], ["del", "theorem", "lift_lift_same_le_lift", ["filter"]], ["del", "theorem", "lift_mono'", ["filter"]], ["del", "theorem", "lift_mono", ["filter"]], ["del", "theorem", "lift_neq_bot_iff", ["filter"]], ["del", "theorem", "lift_principal2", ["filter"]], ["del", "theorem", "lift_principal", ["filter"]], ["del", "theorem", "lift_sets_eq", ["filter"]], ["del", "theorem", "map_lift'_eq2", ["filter"]], ["del", "theorem", "map_lift'_eq", ["filter"]], ["del", "theorem", "map_lift_eq2", ["filter"]], ["del", "theorem", "map_lift_eq", ["filter"]], ["del", "theorem", "mem_lift'", ["filter"]], ["del", "theorem", "mem_lift'_sets", ["filter"]], ["del", "theorem", "mem_lift", ["filter"]], ["del", "theorem", "mem_lift_sets", ["filter"]], ["del", "theorem", "mem_prod_same_iff", ["filter"]], ["del", "theorem", "monotone_lift'", ["filter"]], ["del", "theorem", "monotone_lift", ["filter"]], ["del", "theorem", "principal_le_lift'", ["filter"]], ["del", "theorem", "prod_bot1", ["filter"]], ["del", "theorem", "prod_bot2", ["filter"]], ["add", "theorem", "prod_bot", ["filter"]], ["del", "theorem", "prod_def", ["filter"]], ["add", "theorem", "prod_eq_bot", ["filter"]], ["del", "theorem", "prod_lift'_lift'", ["filter"]], ["del", "theorem", "prod_lift_lift", ["filter"]], ["del", "theorem", "prod_same_eq", ["filter"]], ["del", "theorem", "tendsto_prod_self_iff", ["filter"]]]}, {"oldPath": null, "newPath": "src/order/filter/lift.lean", "changes": [["add", "theorem", "comap_eq_lift'", ["filter"]], ["add", "theorem", "comap_lift'_eq2", ["filter"]], ["add", "theorem", "comap_lift'_eq", ["filter"]], ["add", "theorem", "comap_lift_eq2", ["filter"]], ["add", "theorem", "comap_lift_eq", ["filter"]], ["add", "theorem", "le_lift'", ["filter"]], ["add", "theorem", "le_lift", ["filter"]], ["add", "theorem", "lift'_cong", ["filter"]], ["add", "theorem", "lift'_id", ["filter"]], ["add", "theorem", "lift'_inf_principal_eq", ["filter"]], ["add", "theorem", "lift'_infi", ["filter"]], ["add", "theorem", "lift'_le", ["filter"]], ["add", "theorem", "lift'_lift'_assoc", ["filter"]], ["add", "theorem", "lift'_lift_assoc", ["filter"]], ["add", "theorem", "lift'_mono'", ["filter"]], ["add", "theorem", "lift'_mono", ["filter"]], ["add", "theorem", "lift'_neq_bot_iff", ["filter"]], ["add", "theorem", "lift'_principal", ["filter"]], ["add", "theorem", "lift_assoc", ["filter"]], ["add", "theorem", "lift_comm", ["filter"]], ["add", "theorem", "lift_const", ["filter"]], ["add", "theorem", "lift_inf", ["filter"]], ["add", "theorem", "lift_infi'", ["filter"]], ["add", "theorem", "lift_infi", ["filter"]], ["add", "theorem", "lift_le", ["filter"]], ["add", "theorem", "lift_lift'_assoc", ["filter"]], ["add", "theorem", "lift_lift'_same_eq_lift'", ["filter"]], ["add", "theorem", "lift_lift'_same_le_lift'", ["filter"]], ["add", "theorem", "lift_lift_same_eq_lift", ["filter"]], ["add", "theorem", "lift_lift_same_le_lift", ["filter"]], ["add", "theorem", "lift_mono'", ["filter"]], ["add", "theorem", "lift_mono", ["filter"]], ["add", "theorem", "lift_neq_bot_iff", ["filter"]], ["add", "theorem", "lift_principal2", ["filter"]], ["add", "theorem", "lift_principal", ["filter"]], ["add", "theorem", "lift_sets_eq", ["filter"]], ["add", "theorem", "map_lift'_eq2", ["filter"]], ["add", "theorem", "map_lift'_eq", ["filter"]], ["add", "theorem", "map_lift_eq2", ["filter"]], ["add", "theorem", "map_lift_eq", ["filter"]], ["add", "theorem", "mem_lift'", ["filter"]], ["add", "theorem", "mem_lift'_sets", ["filter"]], ["add", "theorem", "mem_lift", ["filter"]], ["add", "theorem", "mem_lift_sets", ["filter"]], ["add", "theorem", "mem_prod_same_iff", ["filter"]], ["add", "theorem", "monotone_lift'", ["filter"]], ["add", "theorem", "monotone_lift", ["filter"]], ["add", "theorem", "principal_le_lift'", ["filter"]], ["add", "theorem", "prod_def", ["filter"]], ["add", "theorem", "prod_lift'_lift'", ["filter"]], ["add", "theorem", "prod_lift_lift", ["filter"]], ["add", "theorem", "prod_same_eq", ["filter"]], ["add", "theorem", "tendsto_prod_self_iff", ["filter"]]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1549970246, "sha": "253fe33b", "message": "refactor(order/filter): generalize map_succ_at_top_eq to arbitrary Galois insertions; generalize tendsto_coe_iff to arbitary order-preserving embeddings", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "map_succ_at_top_eq", []], ["del", "theorem", "tendsto_coe_iff", []], ["mod", "theorem", "tendsto_comp_succ_at_top_iff", []]]}, {"oldPath": "src/order/filter/basic.lean", "newPath": "src/order/filter/basic.lean", "changes": [["mod", "theorem", "at_top_ne_bot", ["filter"]], ["add", "theorem", "map_add_at_top_eq_nat", ["filter"]], ["mod", "theorem", "map_at_top_eq", ["filter"]], ["add", "theorem", "map_at_top_eq_of_gc", ["filter"]], ["add", "theorem", "map_div_at_top_eq_nat", ["filter"]], ["add", "theorem", "map_sub_at_top_eq_nat", ["filter"]], ["mod", "theorem", "mem_at_top_sets", ["filter"]], ["add", "theorem", "tendso_add_at_top_nat", ["filter"]], ["add", "theorem", "tendso_sub_at_top_nat", ["filter"]], ["add", "theorem", "tendsto_at_top_embedding", ["filter"]]]}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "tendsto_coe_int_real_at_top_at_top", []], ["add", "theorem", "tendsto_coe_int_real_at_top_iff", []], ["add", "theorem", "tendsto_coe_nat_real_at_top_at_top", []], ["add", "theorem", "tendsto_coe_nat_real_at_top_iff", []], ["del", "theorem", "tendsto_of_nat_at_top_at_top", []]]}]}, {"timestamp": 1549970246, "sha": "c853c335", "message": "chore(analysis/specific_limits): replace mul_add_one_le_pow by pow_ge_one_add_mul", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "mul_add_one_le_pow", []]]}]}, {"timestamp": 1549962746, "sha": "41e3b6fa", "message": "refactor(data/list): add prop arg for easier usage (#715)", "changes": [{"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "exists_or_eq_self_of_erasep", ["list"]]]}]}, {"timestamp": 1549918097, "sha": "d1ef181c", "message": "feat(topology/metric_space/gluing): Gluing metric spaces (#695)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "def", "metric_space_sum", []], ["del", "theorem", "dist_eq", ["sum"]], ["del", "theorem", "one_dist_le'", ["sum"]], ["del", "theorem", "one_dist_le", ["sum"]]]}, {"oldPath": null, "newPath": "src/topology/metric_space/gluing.lean", "changes": [["add", "def", "glue_dist", ["metric"]], ["add", "theorem", "glue_dist_glued_points", ["metric"]], ["add", "def", "glue_metric_approx", ["metric"]], ["add", "def", "glue_premetric", ["metric"]], ["add", "def", "glue_space", ["metric"]], ["add", "theorem", "isometry_on_inl", ["metric"]], ["add", "theorem", "isometry_on_inr", ["metric"]], ["add", "def", "metric_space_sum", ["metric"]], ["add", "def", "dist", ["metric", "sum"]], ["add", "theorem", "dist_eq", ["metric", "sum"]], ["add", "theorem", "dist_eq_glue_dist", ["metric", "sum"]], ["add", "theorem", "one_dist_le'", ["metric", "sum"]], ["add", "theorem", "one_dist_le", ["metric", "sum"]], ["add", "theorem", "to_glue_commute", ["metric"]], ["add", "def", "to_glue_l", ["metric"]], ["add", "theorem", "to_glue_l_isometry", ["metric"]], ["add", "def", "to_glue_r", ["metric"]], ["add", "theorem", "to_glue_r_isometry", ["metric"]]]}]}, {"timestamp": 1549899816, "sha": "8243300b", "message": "build(nightly): fix nightly", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "scripts/deploy_nightly.sh", "newPath": "scripts/deploy_nightly.sh", "changes": []}, {"oldPath": "scripts/lean_version.py", "newPath": "scripts/lean_version.py", "changes": []}]}, {"timestamp": 1549903818, "sha": "fb7e42dc", "message": "fix(group_theory/quotient_group): remove duplicate group_hom instance (#713)", "changes": [{"oldPath": "src/group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1549880034, "sha": "4b84aac9", "message": "fix(data/finsupp): duplicated instance", "changes": [{"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "theorem", "mul_sum", ["finsupp"]]]}]}, {"timestamp": 1549835400, "sha": "091cad78", "message": "feat(algebra/gcd_domain): normalize (#668)", "changes": [{"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": [["add", "theorem", "associated_normalize", []], ["del", "theorem", "associated_of_dvd_of_dvd", []], ["del", "theorem", "norm_unit_out", ["associates"]], ["add", "theorem", "normalize_out", ["associates"]], ["mod", "theorem", "out_mk", ["associates"]], ["del", "theorem", "dvd_antisymm_of_norm", []], ["add", "theorem", "dvd_antisymm_of_normalize_eq", []], ["add", "theorem", "dvd_normalize_iff", []], ["mod", "theorem", "gcd_eq_left_iff", []], ["del", "theorem", "gcd_eq_mul_norm_unit", []], ["add", "theorem", "gcd_eq_normalize", []], ["mod", "theorem", "gcd_eq_right_iff", []], ["mod", "theorem", "gcd_mul_lcm", []], ["mod", "theorem", "gcd_mul_left", []], ["mod", "theorem", "gcd_mul_right", []], ["mod", "theorem", "gcd_same", []], ["mod", "theorem", "gcd_zero_left", []], ["mod", "theorem", "gcd_zero_right", []], ["del", "theorem", "coe_nat_abs_eq_mul_norm_unit", ["int"]], ["add", "theorem", "coe_nat_abs_eq_normalize", ["int"]], ["del", "theorem", "norm_unit_nat_coe", ["int"]], ["del", "theorem", "norm_unit_of_neg", ["int"]], ["del", "theorem", "norm_unit_of_nonneg", ["int"]], ["add", "theorem", "normalize_coe_nat", ["int"]], ["add", "theorem", "normalize_of_neg", ["int"]], ["add", "theorem", "normalize_of_nonneg", ["int"]], ["mod", "theorem", "lcm_eq_left_iff", []], ["del", "theorem", "lcm_eq_mul_norm_unit", []], ["add", "theorem", "lcm_eq_normalize", []], ["mod", "theorem", "lcm_eq_right_iff", []], ["mod", "theorem", "lcm_mul_left", []], ["mod", "theorem", "lcm_mul_right", []], ["mod", "theorem", "lcm_one_left", []], ["mod", "theorem", "lcm_one_right", []], ["mod", "theorem", "lcm_same", []], ["mod", "theorem", "lcm_units_coe_left", []], ["mod", "theorem", "lcm_units_coe_right", []], ["del", "theorem", "mul_norm_unit_eq_mul_norm_unit", []], ["del", "theorem", "norm_unit_gcd", []], ["del", "theorem", "norm_unit_lcm", []], ["add", "def", "normalize", []], ["add", "theorem", "normalize_associated", []], ["add", "theorem", "normalize_coe_units", []], ["add", "theorem", "normalize_dvd_iff", []], ["add", "theorem", "normalize_eq_normalize", []], ["add", "theorem", "normalize_eq_normalize_iff", []], ["add", "theorem", "normalize_eq_one", []], ["add", "theorem", "normalize_eq_zero", []], ["add", "theorem", "normalize_gcd", []], ["add", "theorem", "normalize_idem", []], ["add", "theorem", "normalize_lcm", []], ["add", "theorem", "normalize_mul", []], ["add", "theorem", "normalize_one", []], ["add", "theorem", "normalize_zero", []]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["del", "theorem", "monic_mul_norm_unit", ["polynomial"]], ["add", "theorem", "monic_normalize", ["polynomial"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1549802160, "sha": "cfe582ff", "message": "Automate the deployment of nightly builds (#707)\n* build(nightly): automate nightly releases of mathlib", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": null, "newPath": "scripts/deploy_nightly.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/lean_version.py", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1549817070, "sha": "9b28db07", "message": "refactor(*): refactor associates (#710)", "changes": [{"oldPath": "src/ring_theory/associated.lean", "newPath": "src/algebra/associated.lean", "changes": [["del", "theorem", "dvd_out_iff", ["associates"]], ["del", "theorem", "norm_unit_out", ["associates"]], ["del", "theorem", "out_dvd_iff", ["associates"]], ["del", "theorem", "out_mk", ["associates"]], ["del", "theorem", "out_mul", ["associates"]], ["del", "theorem", "out_one", ["associates"]], ["del", "theorem", "out_top", ["associates"]], ["del", "def", "associates_int_equiv_nat", []], ["del", "theorem", "irreducible_iff_nat_prime", []], ["del", "theorem", "prime_iff_prime", ["nat"]], ["del", "theorem", "prime_iff_prime_int", ["nat"]]]}, {"oldPath": "src/algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": [["add", "theorem", "dvd_out_iff", ["associates"]], ["add", "theorem", "norm_unit_out", ["associates"]], ["add", "theorem", "out_dvd_iff", ["associates"]], ["add", "theorem", "out_mk", ["associates"]], ["add", "theorem", "out_mul", ["associates"]], ["add", "theorem", "out_one", ["associates"]], ["add", "theorem", "out_top", ["associates"]], ["add", "def", "associates_int_equiv_nat", []], ["add", "theorem", "coe_gcd", ["int"]], ["add", "theorem", "coe_lcm", ["int"]], ["add", "theorem", "coe_nat_abs_eq_mul_norm_unit", ["int"]], ["add", "theorem", "dvd_gcd", ["int"]], ["add", "theorem", "dvd_lcm_left", ["int"]], ["add", "theorem", "dvd_lcm_right", ["int"]], ["add", "theorem", "gcd_assoc", ["int"]], ["add", "theorem", "gcd_comm", ["int"]], ["add", "theorem", "gcd_div", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_left", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_left_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_right_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_left", ["int"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_right", ["int"]], ["add", "theorem", "gcd_dvd_left", ["int"]], ["add", "theorem", "gcd_dvd_right", ["int"]], ["add", "theorem", "gcd_eq_left", ["int"]], ["add", "theorem", "gcd_eq_right", ["int"]], ["add", "theorem", "gcd_eq_zero_iff", ["int"]], ["add", "theorem", "gcd_mul_lcm", ["int"]], ["add", "theorem", "gcd_mul_left", ["int"]], ["add", "theorem", "gcd_mul_right", ["int"]], ["add", "theorem", "gcd_one_left", ["int"]], ["add", "theorem", "gcd_one_right", ["int"]], ["add", "theorem", "gcd_pos_of_non_zero_left", ["int"]], ["add", "theorem", "gcd_pos_of_non_zero_right", ["int"]], ["add", "theorem", "gcd_self", ["int"]], ["add", "theorem", "gcd_zero_left", ["int"]], ["add", "theorem", "gcd_zero_right", ["int"]], ["add", "def", "lcm", ["int"]], ["add", "theorem", "lcm_assoc", ["int"]], ["add", "theorem", "lcm_comm", ["int"]], ["add", "theorem", "lcm_def", ["int"]], ["add", "theorem", "lcm_dvd", ["int"]], ["add", "theorem", "lcm_one_left", ["int"]], ["add", "theorem", "lcm_one_right", ["int"]], ["add", "theorem", "lcm_self", ["int"]], ["add", "theorem", "lcm_zero_left", ["int"]], ["add", "theorem", "lcm_zero_right", ["int"]], ["add", "theorem", "nat_abs_gcd", ["int"]], ["add", "theorem", "nat_abs_lcm", ["int"]], ["add", "theorem", "norm_unit_nat_coe", ["int"]], ["add", "theorem", "norm_unit_of_neg", ["int"]], ["add", "theorem", "norm_unit_of_nonneg", ["int"]], ["add", "theorem", "irreducible_iff_nat_prime", []], ["add", "theorem", "prime_iff_prime", ["nat"]], ["add", "theorem", "prime_iff_prime_int", ["nat"]]]}, {"oldPath": "src/data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": [["del", "theorem", "coe_gcd", ["int"]], ["del", "theorem", "coe_lcm", ["int"]], ["del", "theorem", "coe_nat_abs_eq_mul_norm_unit", ["int"]], ["del", "theorem", "dvd_gcd", ["int"]], ["del", "theorem", "dvd_lcm_left", ["int"]], ["del", "theorem", "dvd_lcm_right", ["int"]], ["del", "theorem", "gcd_assoc", ["int"]], ["del", "theorem", "gcd_comm", ["int"]], ["del", "theorem", "gcd_div", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_left", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_left_right", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_right", ["int"]], ["del", "theorem", "gcd_dvd_gcd_mul_right_right", ["int"]], ["del", "theorem", "gcd_dvd_gcd_of_dvd_left", ["int"]], ["del", "theorem", "gcd_dvd_gcd_of_dvd_right", ["int"]], ["del", "theorem", "gcd_dvd_left", ["int"]], ["del", "theorem", "gcd_dvd_right", ["int"]], ["del", "theorem", "gcd_eq_left", ["int"]], ["del", "theorem", "gcd_eq_right", ["int"]], ["del", "theorem", "gcd_eq_zero_iff", ["int"]], ["del", "theorem", "gcd_mul_lcm", ["int"]], ["del", "theorem", "gcd_mul_left", ["int"]], ["del", "theorem", "gcd_mul_right", ["int"]], ["del", "theorem", "gcd_one_left", ["int"]], ["del", "theorem", "gcd_one_right", ["int"]], ["del", "theorem", "gcd_pos_of_non_zero_left", ["int"]], ["del", "theorem", "gcd_pos_of_non_zero_right", ["int"]], ["del", "theorem", "gcd_self", ["int"]], ["del", "theorem", "gcd_zero_left", ["int"]], ["del", "theorem", "gcd_zero_right", ["int"]], ["del", "def", "lcm", ["int"]], ["del", "theorem", "lcm_assoc", ["int"]], ["del", "theorem", "lcm_comm", ["int"]], ["del", "theorem", "lcm_def", ["int"]], ["del", "theorem", "lcm_dvd", ["int"]], ["del", "theorem", "lcm_one_left", ["int"]], ["del", "theorem", "lcm_one_right", ["int"]], ["del", "theorem", "lcm_self", ["int"]], ["del", "theorem", "lcm_zero_left", ["int"]], ["del", "theorem", "lcm_zero_right", ["int"]], ["del", "theorem", "nat_abs_gcd", ["int"]], ["del", "theorem", "nat_abs_lcm", ["int"]], ["del", "theorem", "norm_unit_nat_coe", ["int"]], ["del", "theorem", "norm_unit_of_neg", ["int"]], ["del", "theorem", "norm_unit_of_nonneg", ["int"]]]}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "src/ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "src/ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1549808705, "sha": "c25122bb", "message": "feat(algebra/archimedean): add fractional parts of floor_rings (#709)", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "floor_add_fract", []], ["add", "theorem", "floor_eq_iff", []], ["add", "theorem", "floor_fract", []], ["add", "def", "fract", []], ["add", "theorem", "fract_add", []], ["add", "theorem", "fract_add_floor", []], ["add", "theorem", "fract_coe", []], ["add", "theorem", "fract_eq_fract", []], ["add", "theorem", "fract_eq_iff", []], ["add", "theorem", "fract_floor", []], ["add", "theorem", "fract_fract", []], ["add", "theorem", "fract_lt_one", []], ["add", "theorem", "fract_mul_nat", []], ["add", "theorem", "fract_nonneg", []], ["add", "theorem", "fract_zero", []]]}, {"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "sub_eq_sub_iff_sub_eq_sub", []]]}]}, {"timestamp": 1549807262, "sha": "d6f84dae", "message": "feat(tactic/tidy): add `tidy?` syntax for reporting a tactic script (#704)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "test/tidy.lean", "newPath": "test/tidy.lean", "changes": [["mod", "structure", "B", ["tidy", "test"]], ["mod", "def", "d", ["tidy", "test"]], ["mod", "def", "tidy_test_0", ["tidy", "test"]], ["mod", "def", "tidy_test_1", ["tidy", "test"]]]}]}, {"timestamp": 1549795191, "sha": "ed4c536a", "message": "feat(data/polynomial): multiplicity of roots of polynomials (#656)\n* feat(data/polynomial): multiplicity of roots of polynomials\n* rename lemmas\n* use section\n* use `nonzero_comm_ring.of_ne`\n* refactor(polynomial): weaken decidablility hypothesis\n* indentation\n* swap order of arguments", "changes": [{"oldPath": "src/algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": [["add", "def", "of_ne", ["nonzero_comm_ring"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "def", "decidable_dvd_monic", ["polynomial"]], ["add", "theorem", "div_by_monic_mul_pow_root_multiplicity_eq", ["polynomial"]], ["add", "theorem", "eval_div_by_monic_pow_root_multiplicity_ne_zero", ["polynomial"]], ["add", "theorem", "monic_mul", ["polynomial"]], ["add", "theorem", "monic_pow", ["polynomial"]], ["add", "theorem", "multiplicity_X_sub_C_finite", ["polynomial"]], ["add", "theorem", "multiplicity_finite_of_degree_pos_of_monic", ["polynomial"]], ["add", "def", "of_polynomial_ne", ["polynomial", "nonzero_comm_ring"]], ["add", "theorem", "pow_root_multiplicity_dvd", ["polynomial"]], ["add", "def", "root_multiplicity", ["polynomial"]], ["add", "theorem", "root_multiplicity_eq_multiplicity", ["polynomial"]]]}]}, {"timestamp": 1549726900, "sha": "088f753a", "message": "refactor(geo_sum): remove duplicate proofs about geometric sums (#706)\n* feat(data/finset): add range_add_one\n* feat(algebra/big_operators): geometric sum for semiring, ring and division ring\n* refactor(geo_sum): remove duplicate proofs about geometric sums", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["mod", "theorem", "geom_sum", []], ["add", "theorem", "geom_sum_inv", []]]}, {"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["del", "theorem", "sum_geometric'", []], ["del", "theorem", "sum_geometric", []]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["del", "theorem", "inv_zero", ["complex"]], ["del", "theorem", "mul_inv_cancel", ["complex"]]]}, {"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["del", "theorem", "geo_sum_eq", []], ["del", "theorem", "geo_sum_inv_eq", []]]}]}, {"timestamp": 1549726717, "sha": "484d8648", "message": "add geometric sum (#701)\n* feat(data/finset): add range_add_one\n* feat(algebra/big_operators): geometric sum for semiring, ring and division ring", "changes": [{"oldPath": "src/algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": [["add", "theorem", "geom_sum", []], ["add", "theorem", "geom_sum_mul", []], ["add", "theorem", "geom_sum_mul_add", []]]}, {"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "range_add_one", ["finset"]]]}]}, {"timestamp": 1549659393, "sha": "22c71795", "message": "build(update-mathlib): adjust the header of python script", "changes": [{"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1549651277, "sha": "8b510176", "message": "build(update-mathlib): fix installation and documentation", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}, {"oldPath": "scripts/setup-update-mathlib.sh", "newPath": "scripts/setup-update-mathlib.sh", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1549645995, "sha": "650237b4", "message": "build(update-mathlib): install update-mathlib into `~/.mathlib/bin`", "changes": [{"oldPath": "scripts/remote-install-update-mathlib.sh", "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}, {"oldPath": "scripts/setup-update-mathlib.sh", "newPath": "scripts/setup-update-mathlib.sh", "changes": []}]}, {"timestamp": 1549645306, "sha": "814cb034", "message": "build(update-mathlib): fix installation and documentation", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "scripts/remote-install-update-mathlib.sh", "changes": []}]}, {"timestamp": 1549644919, "sha": "64065f40", "message": "build(update-mathlib): improve installation and documentation", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "scripts/update-mathlib.py", "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1549642305, "sha": "4227f5c6", "message": "Deploy olean (#697)\n* deploy(olean): deploy the olean files for every successful builds", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "scripts/setup-update-mathlib.sh", "changes": []}, {"oldPath": null, "newPath": "scripts/update-mathlib.py", "changes": []}]}, {"timestamp": 1549652745, "sha": "11e19d8c", "message": "refactor(ring_theory/noetherian): make is_noetherian and is_noetherian_ring classes (#689)\n* refactor(ring_theory/noetherian): make is_noetherian and is_noetherian_ring classes\n* correct spelling mistake.\n* add well_founded_submodule_gt", "changes": [{"oldPath": "src/field_theory/splitting_field.lean", "newPath": "src/field_theory/splitting_field.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["del", "def", "is_noetherian", []], ["del", "theorem", "is_noetherian_pi", []], ["del", "theorem", "is_noetherian_prod", []], ["mod", "def", "is_noetherian_ring", []], ["del", "theorem", "is_noetherian_ring_range", []], ["del", "theorem", "is_noetherian_of_fintype", ["ring"]], ["add", "theorem", "well_founded_submodule_gt", []]]}, {"oldPath": "src/ring_theory/polynomial.lean", "newPath": "src/ring_theory/polynomial.lean", "changes": [["mod", "theorem", "is_fg_degree_le", ["ideal"]], ["mod", "theorem", "is_noetherian_ring_polynomial", []]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": [["del", "theorem", "is_noetherian_ring", ["principal_ideal_domain"]]]}]}, {"timestamp": 1549631466, "sha": "1f50e0d8", "message": "fix(build): fix the output keeping travis builds alive (#702)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1549618982, "sha": "0f2562e8", "message": "fix(build): fix the output keeping travis builds alive (#700)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1549618084, "sha": "cfd2b75e", "message": "feat(order/filter): break filter into smaller files", "changes": [{"oldPath": "src/order/filter.lean", "newPath": "src/order/filter/basic.lean", "changes": [["del", "def", "mem_pmap", ["filter"]], ["del", "def", "mem_rcomap'", ["filter"]], ["del", "theorem", "mem_rmap", ["filter"]], ["del", "def", "pcomap'", ["filter"]], ["del", "def", "pmap", ["filter"]], ["del", "theorem", "pmap_res", ["filter"]], ["del", "def", "ptendsto'", ["filter"]], ["del", "theorem", "ptendsto'_def", ["filter"]], ["del", "theorem", "ptendsto'_of_ptendsto", ["filter"]], ["del", "def", "ptendsto", ["filter"]], ["del", "theorem", "ptendsto_def", ["filter"]], ["del", "theorem", "ptendsto_iff_rtendsto", ["filter"]], ["del", "theorem", "ptendsto_of_ptendsto'", ["filter"]], ["del", "def", "rcomap'", ["filter"]], ["del", "theorem", "rcomap'_compose", ["filter"]], ["del", "theorem", "rcomap'_rcomap'", ["filter"]], ["del", "theorem", "rcomap'_sets", ["filter"]], ["del", "def", "rcomap", ["filter"]], ["del", "theorem", "rcomap_compose", ["filter"]], ["del", "theorem", "rcomap_rcomap", ["filter"]], ["del", "theorem", "rcomap_sets", ["filter"]], ["del", "def", "rmap", ["filter"]], ["del", "theorem", "rmap_compose", ["filter"]], ["del", "theorem", "rmap_rmap", ["filter"]], ["del", "theorem", "rmap_sets", ["filter"]], ["del", "def", "rtendsto'", ["filter"]], ["del", "theorem", "rtendsto'_def", ["filter"]], ["del", "def", "rtendsto", ["filter"]], ["del", "theorem", "rtendsto_def", ["filter"]], ["del", "theorem", "rtendsto_iff_le_comap", ["filter"]], ["del", "theorem", "tendsto_iff_ptendsto", ["filter"]], ["del", "theorem", "tendsto_iff_ptendsto_univ", ["filter"]], ["del", "theorem", "tendsto_iff_rtendsto'", ["filter"]], ["del", "theorem", "tendsto_iff_rtendsto", ["filter"]]]}, {"oldPath": null, "newPath": "src/order/filter/default.lean", "changes": []}, {"oldPath": null, "newPath": "src/order/filter/partial.lean", "changes": [["add", "def", "mem_pmap", ["filter"]], ["add", "def", "mem_rcomap'", ["filter"]], ["add", "theorem", "mem_rmap", ["filter"]], ["add", "def", "pcomap'", ["filter"]], ["add", "def", "pmap", ["filter"]], ["add", "theorem", "pmap_res", ["filter"]], ["add", "def", "ptendsto'", ["filter"]], ["add", "theorem", "ptendsto'_def", ["filter"]], ["add", "theorem", "ptendsto'_of_ptendsto", ["filter"]], ["add", "def", "ptendsto", ["filter"]], ["add", "theorem", "ptendsto_def", ["filter"]], ["add", "theorem", "ptendsto_iff_rtendsto", ["filter"]], ["add", "theorem", "ptendsto_of_ptendsto'", ["filter"]], ["add", "def", "rcomap'", ["filter"]], ["add", "theorem", "rcomap'_compose", ["filter"]], ["add", "theorem", "rcomap'_rcomap'", ["filter"]], ["add", "theorem", "rcomap'_sets", ["filter"]], ["add", "def", "rcomap", ["filter"]], ["add", "theorem", "rcomap_compose", ["filter"]], ["add", "theorem", "rcomap_rcomap", ["filter"]], ["add", "theorem", "rcomap_sets", ["filter"]], ["add", "def", "rmap", ["filter"]], ["add", "theorem", "rmap_compose", ["filter"]], ["add", "theorem", "rmap_rmap", ["filter"]], ["add", "theorem", "rmap_sets", ["filter"]], ["add", "def", "rtendsto'", ["filter"]], ["add", "theorem", "rtendsto'_def", ["filter"]], ["add", "def", "rtendsto", ["filter"]], ["add", "theorem", "rtendsto_def", ["filter"]], ["add", "theorem", "rtendsto_iff_le_comap", ["filter"]], ["add", "theorem", "tendsto_iff_ptendsto", ["filter"]], ["add", "theorem", "tendsto_iff_ptendsto_univ", ["filter"]], ["add", "theorem", "tendsto_iff_rtendsto'", ["filter"]], ["add", "theorem", "tendsto_iff_rtendsto", ["filter"]]]}]}, {"timestamp": 1549618084, "sha": "8db042f0", "message": "feat(data/rel): galois_connection (image r) (core r)", "changes": [{"oldPath": "src/data/rel.lean", "newPath": "src/data/rel.lean", "changes": [["mod", "theorem", "core_comp", ["rel"]], ["add", "theorem", "core_preimage_gc", ["rel"]], ["add", "theorem", "image_subset_iff", ["rel"]], ["mod", "theorem", "preimage_comp", ["rel"]], ["mod", "def", "restrict_domain", ["rel"]], ["mod", "theorem", "preimage_eq", ["set"]]]}]}, {"timestamp": 1549618084, "sha": "b2ba37c7", "message": "chore(*): fix errors introduced by rebasing", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": null, "changes": [["del", "theorem", "abs_dist", []], ["del", "theorem", "abs_dist_sub_le", []], ["del", "def", "ball", []], ["del", "theorem", "ball_disjoint", []], ["del", "theorem", "ball_disjoint_same", []], ["del", "theorem", "ball_eq_empty_iff_nonpos", []], ["del", "theorem", "ball_half_subset", []], ["del", "theorem", "ball_mem_nhds", []], ["del", "theorem", "ball_subset", []], ["del", "theorem", "ball_subset_ball", []], ["del", "theorem", "ball_subset_closed_ball", []], ["del", "theorem", "cauchy_of_metric", []], ["del", "theorem", "cauchy_seq_metric'", []], ["del", "theorem", "cauchy_seq_metric", []], ["del", "def", "closed_ball", []], ["del", "theorem", "continuous_dist'", []], ["del", "theorem", "continuous_dist", []], ["del", "theorem", "continuous_of_metric", []], ["del", "theorem", "continuous_topo_metric", []], ["del", "theorem", "countable_closure_of_compact", []], ["del", "theorem", "dist_comm", []], ["del", "theorem", "dist_eq_edist", []], ["del", "theorem", "dist_eq_nndist", []], ["del", "theorem", "dist_eq_zero", []], ["del", "theorem", "dist_le_zero", []], ["del", "theorem", "dist_mem_uniformity", []], ["del", "theorem", "dist_nonneg", []], ["del", "theorem", "dist_pi_def", []], ["del", "theorem", "dist_pos", []], ["del", "theorem", "dist_self", []], ["del", "theorem", "dist_triangle", []], ["del", "theorem", "dist_triangle_left", []], ["del", "theorem", "dist_triangle_right", []], ["del", "theorem", "edist_dist", []], ["del", "theorem", "edist_eq_dist", []], ["del", "theorem", "edist_eq_nndist", []], ["del", "theorem", "edist_ne_top", []], ["del", "theorem", "eq_of_dist_eq_zero", []], ["del", "theorem", "eq_of_forall_dist_le", []], ["del", "theorem", "eq_of_nndist_eq_zero", []], ["del", "theorem", "exists_ball_subset_ball", []], ["del", "theorem", "exists_delta_of_continuous", []], ["del", "theorem", "finite_cover_balls_of_compact", []], ["del", "theorem", "is_closed_ball", []], ["del", "theorem", "is_open_ball", []], ["del", "theorem", "is_open_metric", []], ["del", "theorem", "lebesgue_number_lemma_of_metric", []], ["del", "theorem", "lebesgue_number_lemma_of_metric_sUnion", []], ["del", "theorem", "mem_ball'", []], ["del", "theorem", "mem_ball", []], ["del", "theorem", "mem_ball_comm", []], ["del", "theorem", "mem_ball_self", []], ["del", "theorem", "mem_closed_ball", []], ["del", "theorem", "mem_closure_iff'", []], ["del", "theorem", "mem_nhds_iff_metric", []], ["del", "theorem", "mem_uniformity_dist", []], ["del", "theorem", "mem_uniformity_dist_edist", []], ["del", "theorem", "mem_nhds_within", ["metric"]], ["del", "theorem", "ptendsto_nhds_within", ["metric"]], ["del", "theorem", "rtendsto'_nhds_within", ["metric"]], ["del", "theorem", "rtendsto_nhds_within", ["metric"]], ["del", "theorem", "tendsto_nhds_within", ["metric"]], ["del", "def", "induced", ["metric_space"]], ["del", "def", "replace_uniformity", ["metric_space"]], ["del", "def", "uniform_space_of_dist", ["metric_space"]], ["del", "theorem", "nhds_comap_dist", []], ["del", "theorem", "nhds_eq_metric", []], ["del", "def", "nndist", []], ["del", "theorem", "nndist_comm", []], ["del", "theorem", "nndist_eq_dist", []], ["del", "theorem", "nndist_eq_edist", []], ["del", "theorem", "nndist_eq_zero", []], ["del", "theorem", "nndist_self", []], ["del", "theorem", "nndist_triangle", []], ["del", "theorem", "nndist_triangle_left", []], ["del", "theorem", "nndist_triangle_right", []], ["del", "theorem", "pos_of_mem_ball", []], ["del", "theorem", "dist_0_eq_abs", ["real"]], ["del", "theorem", "dist_eq", ["real"]], ["del", "theorem", "second_countable_of_separable_metric_space", []], ["del", "theorem", "dist_eq", ["subtype"]], ["del", "theorem", "swap_dist", []], ["del", "theorem", "tendsto_at_top_metric", []], ["del", "theorem", "tendsto_dist", []], ["del", "theorem", "tendsto_iff_dist_tendsto_zero", []], ["del", "theorem", "tendsto_nhds_of_metric", []], ["del", "theorem", "tendsto_nhds_topo_metric", []], ["del", "theorem", "totally_bounded_of_metric", []], ["del", "theorem", "uniform_continuous_dist'", []], ["del", "theorem", "uniform_continuous_dist", []], ["del", "theorem", "uniform_continuous_of_metric", []], ["del", "theorem", "uniform_embedding_of_metric", []], ["del", "theorem", "uniformity_dist'", []], ["del", "theorem", "uniformity_dist", []], ["del", "theorem", "uniformity_edist'", []], ["del", "theorem", "uniformity_edist", []], ["del", "theorem", "zero_eq_dist", []], ["del", "theorem", "zero_eq_nndist", []]]}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": null, "changes": [["del", "theorem", "cau_seq_iff_cauchy_seq", []], ["del", "theorem", "cauchy_of_filter_cauchy", []], ["del", "theorem", "complete_of_cauchy_seq_tendsto", []], ["del", "theorem", "filter_cauchy_of_cauchy", []], ["del", "theorem", "cauchy_seq_of_dist_tendsto_0", ["sequentially_complete"]], ["del", "theorem", "le_nhds_cau_filter_lim", ["sequentially_complete"]], ["del", "theorem", "mono_of_mono_succ", ["sequentially_complete"]], ["del", "theorem", "seq_of_cau_filter_is_cauchy'", ["sequentially_complete"]], ["del", "theorem", "seq_of_cau_filter_is_cauchy", ["sequentially_complete"]], ["del", "theorem", "seq_of_cau_filter_mem_set_seq", ["sequentially_complete"]], ["del", "def", "set_seq_of_cau_filter", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_inhabited", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_mem_sets", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_monotone'", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_monotone", ["sequentially_complete"]], ["del", "theorem", "set_seq_of_cau_filter_spec", ["sequentially_complete"]], ["del", "theorem", "tendsto_div", ["sequentially_complete"]], ["del", "theorem", "tendsto_limit", []]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_filter.lean", "newPath": "src/data/real/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": [["mod", "def", "continuous_at_within", []], ["mod", "theorem", "continuous_at_within_iff_continuous_at_restrict", []], ["mod", "theorem", "continuous_at_within_univ", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1549618084, "sha": "8e4aafab", "message": "feat(analysis/metric): convergence wrt nhds_within", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "mem_nhds_within", ["metric"]], ["add", "theorem", "ptendsto_nhds_within", ["metric"]], ["add", "theorem", "rtendsto'_nhds_within", ["metric"]], ["add", "theorem", "rtendsto_nhds_within", ["metric"]], ["add", "theorem", "tendsto_nhds_within", ["metric"]]]}]}, {"timestamp": 1549618084, "sha": "f5d73bdd", "message": "feat(analysis/topology/continuity): add some variations", "changes": [{"oldPath": null, "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "abs_dist", []], ["add", "theorem", "abs_dist_sub_le", []], ["add", "def", "ball", []], ["add", "theorem", "ball_disjoint", []], ["add", "theorem", "ball_disjoint_same", []], ["add", "theorem", "ball_eq_empty_iff_nonpos", []], ["add", "theorem", "ball_half_subset", []], ["add", "theorem", "ball_mem_nhds", []], ["add", "theorem", "ball_subset", []], ["add", "theorem", "ball_subset_ball", []], ["add", "theorem", "ball_subset_closed_ball", []], ["add", "theorem", "cauchy_of_metric", []], ["add", "theorem", "cauchy_seq_metric'", []], ["add", "theorem", "cauchy_seq_metric", []], ["add", "def", "closed_ball", []], ["add", "theorem", "continuous_dist'", []], ["add", "theorem", "continuous_dist", []], ["add", "theorem", "continuous_of_metric", []], ["add", "theorem", "continuous_topo_metric", []], ["add", "theorem", "countable_closure_of_compact", []], ["add", "theorem", "dist_comm", []], ["add", "theorem", "dist_eq_edist", []], ["add", "theorem", "dist_eq_nndist", []], ["add", "theorem", "dist_eq_zero", []], ["add", "theorem", "dist_le_zero", []], ["add", "theorem", "dist_mem_uniformity", []], ["add", "theorem", "dist_nonneg", []], ["add", "theorem", "dist_pi_def", []], ["add", "theorem", "dist_pos", []], ["add", "theorem", "dist_self", []], ["add", "theorem", "dist_triangle", []], ["add", "theorem", "dist_triangle_left", []], ["add", "theorem", "dist_triangle_right", []], ["add", "theorem", "edist_dist", []], ["add", "theorem", "edist_eq_dist", []], ["add", "theorem", "edist_eq_nndist", []], ["add", "theorem", "edist_ne_top", []], ["add", "theorem", "eq_of_dist_eq_zero", []], ["add", "theorem", "eq_of_forall_dist_le", []], ["add", "theorem", "eq_of_nndist_eq_zero", []], ["add", "theorem", "exists_ball_subset_ball", []], ["add", "theorem", "exists_delta_of_continuous", []], ["add", "theorem", "finite_cover_balls_of_compact", []], ["add", "theorem", "is_closed_ball", []], ["add", "theorem", "is_open_ball", []], ["add", "theorem", "is_open_metric", []], ["add", "theorem", "lebesgue_number_lemma_of_metric", []], ["add", "theorem", "lebesgue_number_lemma_of_metric_sUnion", []], ["add", "theorem", "mem_ball'", []], ["add", "theorem", "mem_ball", []], ["add", "theorem", "mem_ball_comm", []], ["add", "theorem", "mem_ball_self", []], ["add", "theorem", "mem_closed_ball", []], ["add", "theorem", "mem_closure_iff'", []], ["add", "theorem", "mem_nhds_iff_metric", []], ["add", "theorem", "mem_uniformity_dist", []], ["add", "theorem", "mem_uniformity_dist_edist", []], ["add", "def", "induced", ["metric_space"]], ["add", "def", "replace_uniformity", ["metric_space"]], ["add", "def", "uniform_space_of_dist", ["metric_space"]], ["add", "theorem", "nhds_comap_dist", []], ["add", "theorem", "nhds_eq_metric", []], ["add", "def", "nndist", []], ["add", "theorem", "nndist_comm", []], ["add", "theorem", "nndist_eq_dist", []], ["add", "theorem", "nndist_eq_edist", []], ["add", "theorem", "nndist_eq_zero", []], ["add", "theorem", "nndist_self", []], ["add", "theorem", "nndist_triangle", []], ["add", "theorem", "nndist_triangle_left", []], ["add", "theorem", "nndist_triangle_right", []], ["add", "theorem", "pos_of_mem_ball", []], ["add", "theorem", "dist_0_eq_abs", ["real"]], ["add", "theorem", "dist_eq", ["real"]], ["add", "theorem", "second_countable_of_separable_metric_space", []], ["add", "theorem", "dist_eq", ["subtype"]], ["add", "theorem", "swap_dist", []], ["add", "theorem", "tendsto_at_top_metric", []], ["add", "theorem", "tendsto_dist", []], ["add", "theorem", "tendsto_iff_dist_tendsto_zero", []], ["add", "theorem", "tendsto_nhds_of_metric", []], ["add", "theorem", "tendsto_nhds_topo_metric", []], ["add", "theorem", "totally_bounded_of_metric", []], ["add", "theorem", "uniform_continuous_dist'", []], ["add", "theorem", "uniform_continuous_dist", []], ["add", "theorem", "uniform_continuous_of_metric", []], ["add", "theorem", "uniform_embedding_of_metric", []], ["add", "theorem", "uniformity_dist'", []], ["add", "theorem", "uniformity_dist", []], ["add", "theorem", "uniformity_edist'", []], ["add", "theorem", "uniformity_edist", []], ["add", "theorem", "zero_eq_dist", []], ["add", "theorem", "zero_eq_nndist", []]]}, {"oldPath": null, "newPath": "data/real/cau_seq_filter.lean", "changes": [["add", "theorem", "cau_seq_iff_cauchy_seq", []], ["add", "theorem", "cauchy_of_filter_cauchy", []], ["add", "theorem", "complete_of_cauchy_seq_tendsto", []], ["add", "theorem", "filter_cauchy_of_cauchy", []], ["add", "theorem", "cauchy_seq_of_dist_tendsto_0", ["sequentially_complete"]], ["add", "theorem", "le_nhds_cau_filter_lim", ["sequentially_complete"]], ["add", "theorem", "mono_of_mono_succ", ["sequentially_complete"]], ["add", "theorem", "seq_of_cau_filter_is_cauchy'", ["sequentially_complete"]], ["add", "theorem", "seq_of_cau_filter_is_cauchy", ["sequentially_complete"]], ["add", "theorem", "seq_of_cau_filter_mem_set_seq", ["sequentially_complete"]], ["add", "def", "set_seq_of_cau_filter", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_inhabited", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_mem_sets", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_monotone'", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_monotone", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_spec", ["sequentially_complete"]], ["add", "theorem", "tendsto_div", ["sequentially_complete"]], ["add", "theorem", "tendsto_limit", []]]}, {"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/topology/algebra/group.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/topology/algebra/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": []}, {"oldPath": "src/topology/compact_open.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": [["add", "def", "continuous_at", []], ["mod", "theorem", "continuous_at_iff_ultrafilter", []], ["add", "theorem", "continuous_at_subtype_val", []], ["add", "def", "continuous_at_within", []], ["add", "theorem", "continuous_at_within_iff_continuous_at_restrict", []], ["add", "theorem", "continuous_at_within_iff_ptendsto_res", []], ["add", "theorem", "continuous_at_within_univ", []], ["add", "theorem", "continuous_iff_continuous_at", []], ["del", "theorem", "continuous_iff_tendsto", []], ["add", "def", "continuous_on", []], ["add", "theorem", "continuous_on_iff'", []], ["add", "theorem", "continuous_on_iff", []], ["add", "theorem", "continuous_on_iff_continuous_restrict", []], ["add", "theorem", "continuous_at_length", ["list"]], ["del", "theorem", "tendsto_length", ["list"]], ["add", "theorem", "open_dom_of_pcontinuous", []], ["add", "def", "pcontinuous", []], ["add", "theorem", "pcontinuous_iff'", []], ["del", "theorem", "tendsto_subtype_val", []], ["add", "theorem", "continuous_at_remove_nth", ["vector"]], ["del", "theorem", "tendsto_remove_nth", ["vector"]]]}, {"oldPath": "src/topology/instances/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1549618084, "sha": "e0b82533", "message": "feat (analysis/topology/topological_space): properties of nhds, nhds_within", "changes": [{"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "all_mem_nhds", []], ["add", "theorem", "all_mem_nhds_filter", []], ["add", "theorem", "map_nhds_induced_of_surjective", []], ["add", "theorem", "map_nhds_within", []], ["add", "theorem", "mem_nhds_induced", []], ["add", "theorem", "mem_nhds_subtype", []], ["add", "theorem", "mem_nhds_within", []], ["add", "theorem", "mem_nhds_within_subtype", []], ["add", "theorem", "nhds_induced", []], ["add", "theorem", "nhds_subtype", []], ["add", "def", "nhds_within", []], ["add", "theorem", "nhds_within_empty", []], ["add", "theorem", "nhds_within_eq", []], ["add", "theorem", "nhds_within_eq_map_subtype_val", []], ["add", "theorem", "nhds_within_eq_nhds_within", []], ["add", "theorem", "nhds_within_inter'", []], ["add", "theorem", "nhds_within_inter", []], ["add", "theorem", "nhds_within_mono", []], ["add", "theorem", "nhds_within_restrict", []], ["add", "theorem", "nhds_within_subtype", []], ["add", "theorem", "nhds_within_union", []], ["add", "theorem", "nhds_within_univ", []], ["add", "theorem", "nhs_within_eq_of_open", []], ["add", "theorem", "principal_subtype", []], ["add", "theorem", "ptendsto'_nhds", []], ["add", "theorem", "ptendsto_nhds", []], ["add", "theorem", "rtendsto'_nhds", []], ["add", "theorem", "rtendsto_nhds", []], ["add", "theorem", "tendsto_at_within_iff_subtype", []], ["add", "theorem", "tendsto_if_nhds_within", []], ["mod", "theorem", "tendsto_nhds", []]]}]}, {"timestamp": 1549618084, "sha": "a96fa3be", "message": "feat(order/filter): convergence for relations and partial functions", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["mod", "def", "core", ["pfun"]], ["mod", "def", "graph'", ["pfun"]], ["mod", "theorem", "mem_core", ["pfun"]], ["mod", "theorem", "mem_core_res", ["pfun"]], ["mod", "theorem", "preimage_as_subtype", ["pfun"]], ["mod", "theorem", "mem_restrict", ["roption"]]]}, {"oldPath": "data/rel.lean", "newPath": "src/data/rel.lean", "changes": []}, {"oldPath": "src/order/filter.lean", "newPath": "src/order/filter.lean", "changes": [["add", "theorem", "le_map_comap_of_surjective'", ["filter"]], ["add", "theorem", "le_map_comap_of_surjective", ["filter"]], ["add", "theorem", "map_comap_of_surjective'", ["filter"]], ["add", "theorem", "map_comap_of_surjective", ["filter"]], ["add", "theorem", "mem_inf_principal", ["filter"]], ["add", "def", "mem_pmap", ["filter"]], ["add", "def", "mem_rcomap'", ["filter"]], ["add", "theorem", "mem_rmap", ["filter"]], ["add", "def", "pcomap'", ["filter"]], ["add", "def", "pmap", ["filter"]], ["add", "theorem", "pmap_res", ["filter"]], ["add", "def", "ptendsto'", ["filter"]], ["add", "theorem", "ptendsto'_def", ["filter"]], ["add", "theorem", "ptendsto'_of_ptendsto", ["filter"]], ["add", "def", "ptendsto", ["filter"]], ["add", "theorem", "ptendsto_def", ["filter"]], ["add", "theorem", "ptendsto_iff_rtendsto", ["filter"]], ["add", "theorem", "ptendsto_of_ptendsto'", ["filter"]], ["add", "def", "rcomap'", ["filter"]], ["add", "theorem", "rcomap'_compose", ["filter"]], ["add", "theorem", "rcomap'_rcomap'", ["filter"]], ["add", "theorem", "rcomap'_sets", ["filter"]], ["add", "def", "rcomap", ["filter"]], ["add", "theorem", "rcomap_compose", ["filter"]], ["add", "theorem", "rcomap_rcomap", ["filter"]], ["add", "theorem", "rcomap_sets", ["filter"]], ["add", "def", "rmap", ["filter"]], ["add", "theorem", "rmap_compose", ["filter"]], ["add", "theorem", "rmap_rmap", ["filter"]], ["add", "theorem", "rmap_sets", ["filter"]], ["add", "def", "rtendsto'", ["filter"]], ["add", "theorem", "rtendsto'_def", ["filter"]], ["add", "def", "rtendsto", ["filter"]], ["add", "theorem", "rtendsto_def", ["filter"]], ["add", "theorem", "rtendsto_iff_le_comap", ["filter"]], ["add", "theorem", "tendsto_if", ["filter"]], ["add", "theorem", "tendsto_iff_ptendsto", ["filter"]], ["add", "theorem", "tendsto_iff_ptendsto_univ", ["filter"]], ["add", "theorem", "tendsto_iff_rtendsto'", ["filter"]], ["add", "theorem", "tendsto_iff_rtendsto", ["filter"]]]}]}, {"timestamp": 1549618084, "sha": "4444464c", "message": "feat(data/pfun): add restrict, preimage, core, etc.", "changes": [{"oldPath": "src/data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": [["add", "theorem", "as_subtype_eq_of_mem", ["pfun"]], ["add", "theorem", "compl_dom_subset_core", ["pfun"]], ["add", "def", "core", ["pfun"]], ["add", "theorem", "core_def", ["pfun"]], ["add", "theorem", "core_eq", ["pfun"]], ["add", "theorem", "core_inter", ["pfun"]], ["add", "theorem", "core_mono", ["pfun"]], ["add", "theorem", "core_res", ["pfun"]], ["add", "theorem", "core_restrict", ["pfun"]], ["add", "theorem", "dom_eq", ["pfun"]], ["add", "def", "graph'", ["pfun"]], ["add", "def", "image", ["pfun"]], ["add", "theorem", "image_def", ["pfun"]], ["add", "theorem", "image_inter", ["pfun"]], ["add", "theorem", "image_mono", ["pfun"]], ["add", "theorem", "image_union", ["pfun"]], ["add", "theorem", "mem_core", ["pfun"]], ["add", "theorem", "mem_core_res", ["pfun"]], ["add", "theorem", "mem_dom", ["pfun"]], ["add", "theorem", "mem_image", ["pfun"]], ["add", "def", "mem_preimage", ["pfun"]], ["add", "theorem", "mem_res", ["pfun"]], ["add", "theorem", "mem_restrict", ["pfun"]], ["add", "def", "preimage", ["pfun"]], ["add", "theorem", "preimage_as_subtype", ["pfun"]], ["add", "theorem", "preimage_def", ["pfun"]], ["add", "theorem", "preimage_eq", ["pfun"]], ["add", "theorem", "preimage_inter", ["pfun"]], ["add", "theorem", "preimage_mono", ["pfun"]], ["add", "theorem", "preimage_subset_core", ["pfun"]], ["add", "theorem", "preimage_subset_dom", ["pfun"]], ["add", "theorem", "preimage_union", ["pfun"]], ["add", "theorem", "preimage_univ", ["pfun"]], ["add", "def", "res", ["pfun"]], ["add", "theorem", "res_univ", ["pfun"]], ["add", "theorem", "mem_eq", ["roption"]], ["add", "theorem", "mem_restrict", ["roption"]]]}]}, {"timestamp": 1549618084, "sha": "cae5c8b6", "message": "fix(data/rel): make composition local notation", "changes": [{"oldPath": "data/rel.lean", "newPath": "data/rel.lean", "changes": []}]}, {"timestamp": 1549618084, "sha": "4779af77", "message": "feat(data/rel): a type for binary relations", "changes": [{"oldPath": null, "newPath": "data/rel.lean", "changes": [["add", "def", "graph", ["function"]], ["add", "def", "codom", ["rel"]], ["add", "theorem", "codom_inv", ["rel"]], ["add", "def", "comp", ["rel"]], ["add", "theorem", "comp_assoc", ["rel"]], ["add", "theorem", "comp_left_id", ["rel"]], ["add", "theorem", "comp_right_id", ["rel"]], ["add", "def", "core", ["rel"]], ["add", "theorem", "core_comp", ["rel"]], ["add", "theorem", "core_id", ["rel"]], ["add", "theorem", "core_inter", ["rel"]], ["add", "theorem", "core_mono", ["rel"]], ["add", "theorem", "core_union", ["rel"]], ["add", "theorem", "core_univ", ["rel"]], ["add", "def", "dom", ["rel"]], ["add", "theorem", "dom_inv", ["rel"]], ["add", "def", "image", ["rel"]], ["add", "theorem", "image_comp", ["rel"]], ["add", "theorem", "image_id", ["rel"]], ["add", "theorem", "image_inter", ["rel"]], ["add", "theorem", "image_mono", ["rel"]], ["add", "theorem", "image_union", ["rel"]], ["add", "theorem", "image_univ", ["rel"]], ["add", "def", "inv", ["rel"]], ["add", "theorem", "inv_comp", ["rel"]], ["add", "theorem", "inv_def", ["rel"]], ["add", "theorem", "inv_id", ["rel"]], ["add", "theorem", "inv_inv", ["rel"]], ["add", "theorem", "mem_core", ["rel"]], ["add", "theorem", "mem_image", ["rel"]], ["add", "theorem", "mem_preimage", ["rel"]], ["add", "def", "preimage", ["rel"]], ["add", "theorem", "preimage_comp", ["rel"]], ["add", "theorem", "preimage_def", ["rel"]], ["add", "theorem", "preimage_id", ["rel"]], ["add", "theorem", "preimage_inter", ["rel"]], ["add", "theorem", "preimage_mono", ["rel"]], ["add", "theorem", "preimage_union", ["rel"]], ["add", "theorem", "preimage_univ", ["rel"]], ["add", "def", "restrict_domain", ["rel"]], ["add", "def", "rel", []], ["add", "theorem", "image_eq", ["set"]], ["add", "theorem", "preimage_eq", ["set"]], ["add", "theorem", "preimage_eq_core", ["set"]]]}]}, {"timestamp": 1549618084, "sha": "126d573a", "message": "feat(data/set/basic,logic/function): small additions and renamings", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "inter_subset", ["set"]], ["add", "theorem", "val_range", ["set", "subtype"]], ["del", "theorem", "subtype_val_image", ["set"]], ["del", "theorem", "subtype_val_range", ["set"]], ["add", "theorem", "image_preimage_val", ["subtype"]], ["add", "theorem", "preimage_val_eq_preimage_val_iff", ["subtype"]], ["add", "theorem", "val_image", ["subtype"]], ["add", "theorem", "val_image_subset", ["subtype"]], ["add", "theorem", "val_image_univ", ["subtype"]], ["add", "theorem", "val_range", ["subtype"]]]}, {"oldPath": "src/logic/function.lean", "newPath": "src/logic/function.lean", "changes": [["add", "def", "restrict", ["function"]], ["add", "theorem", "restrict_eq", ["function"]]]}, {"oldPath": "src/order/filter.lean", "newPath": "src/order/filter.lean", "changes": []}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": []}]}, {"timestamp": 1549578767, "sha": "1ed7ad11", "message": "feat(algebra/archimedean): abs_sub_lt_one_of_floor_eq_floor (#693)\n* abs_diff_lt_one_of_floor_eq_floor\n* better name", "changes": [{"oldPath": "src/algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": [["add", "theorem", "abs_sub_lt_one_of_floor_eq_floor", []]]}]}, {"timestamp": 1549568237, "sha": "177b5eb0", "message": "feat(linear_algebra): dimension of the base field is 1", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "is_basis_singleton_one", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_of_field", []]]}]}, {"timestamp": 1549568211, "sha": "0f240304", "message": "refactor(src/data/finset): supr/infi as a directed supr/infi of finite inf/sup", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "inf_congr", ["finset"]], ["add", "theorem", "sup_congr", ["finset"]], ["add", "theorem", "infi_eq_infi_finset", ["lattice"]], ["add", "theorem", "supr_eq_supr_finset", ["lattice"]], ["add", "theorem", "Inter_eq_Inter_finset", ["set"]], ["add", "theorem", "Union_eq_Union_finset", ["set"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "monotone_inter", ["set"]], ["add", "theorem", "monotone_set_of", ["set"]], ["add", "theorem", "monotone_union", ["set"]]]}, {"oldPath": "src/order/filter.lean", "newPath": "src/order/filter.lean", "changes": [["del", "theorem", "Inf_sets_eq_finite", ["filter"]], ["del", "theorem", "binfi_sup_eq", ["filter"]], ["mod", "theorem", "infi_sets_eq'", ["filter"]], ["add", "theorem", "infi_sets_eq_finite", ["filter"]], ["mod", "theorem", "infi_sup_eq", ["filter"]], ["mod", "theorem", "supr_join", ["filter"]], ["del", "theorem", "Inf_eq_finite_sets", ["lattice"]], ["del", "theorem", "inf_left_comm", ["lattice"]], ["del", "theorem", "infi_empty_finset", ["lattice"]], ["del", "theorem", "infi_insert_finset", ["lattice"]], ["del", "theorem", "monotone_inter", ["set"]], ["del", "theorem", "monotone_set_of", ["set"]]]}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": [["add", "theorem", "directed_of_inf", ["lattice"]], ["add", "theorem", "directed_of_sup", ["lattice"]], ["add", "theorem", "inf_left_comm", ["lattice"]], ["add", "theorem", "sup_left_comm", ["lattice"]]]}]}, {"timestamp": 1549554986, "sha": "eeed3218", "message": "chore(linear_algebra/basic): relate map/comap/ker/range/comp with 0 and smul; use map/comap Galois connection", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "comp_assoc", ["linear_map"]], ["mod", "theorem", "comp_id", ["linear_map"]], ["add", "theorem", "comp_smul", ["linear_map"]], ["add", "theorem", "comp_zero", ["linear_map"]], ["mod", "theorem", "id_comp", ["linear_map"]], ["add", "theorem", "ker_smul'", ["linear_map"]], ["add", "theorem", "ker_smul", ["linear_map"]], ["add", "theorem", "range_le_bot_iff", ["linear_map"]], ["add", "theorem", "range_smul'", ["linear_map"]], ["add", "theorem", "range_smul", ["linear_map"]], ["add", "theorem", "range_zero", ["linear_map"]], ["add", "theorem", "smul_comp", ["linear_map"]], ["add", "theorem", "zero_comp", ["linear_map"]], ["add", "theorem", "comap_inf", ["submodule"]], ["add", "theorem", "comap_infi", ["submodule"]], ["add", "theorem", "comap_smul'", ["submodule"]], ["add", "theorem", "comap_smul", ["submodule"]], ["add", "theorem", "comap_zero", ["submodule"]], ["add", "theorem", "gc_map_comap", ["submodule"]], ["add", "theorem", "map_smul'", ["submodule"]], ["add", "theorem", "map_smul", ["submodule"]], ["add", "theorem", "map_sup", ["submodule"]], ["add", "theorem", "map_supr", ["submodule"]], ["add", "theorem", "map_zero", ["submodule"]]]}]}, {"timestamp": 1549551505, "sha": "e98999ef", "message": "chore(algebra/pi_instances): generalize pi.list/multiset/finset_prod/sum_apply to dependent types", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["mod", "theorem", "finset_prod_apply", ["pi"]], ["mod", "theorem", "list_prod_apply", ["pi"]], ["mod", "theorem", "multiset_prod_apply", ["pi"]]]}]}, {"timestamp": 1549551505, "sha": "ad7ef864", "message": "refactor(set_theory/cardinal): split up mk_Union_le_mk_sigma, add mk_Union_eq_mk_sigma; add equiv congruence for subtype", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "set_congr", ["equiv"]], ["add", "def", "subtype_congr", ["equiv"]]]}, {"oldPath": "src/data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": [["add", "theorem", "bijective_sigma_to_Union", ["set"]], ["add", "theorem", "injective_sigma_to_Union", ["set"]], ["add", "def", "sigma_to_Union", ["set"]], ["add", "theorem", "surjective_sigma_to_Union", ["set"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_Union_eq_sum_mk", ["cardinal"]], ["mod", "theorem", "mk_eq_of_injective", ["cardinal"]]]}]}, {"timestamp": 1549545219, "sha": "8a1de249", "message": "feat(data/{list/alist,finmap}): implicit key type (#662)\n* feat(data/{list/alist,finmap}): implicit key type\nMake the key type α implicit in both alist and finmap. This brings these\ntypes into line with the underlying sigma and simplifies usage since α\nis inferred from the value function type β : α → Type v.\n* doc(data/list/alist): alist is stored as a linked list", "changes": [{"oldPath": "src/data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": [["mod", "def", "to_finmap", ["alist"]], ["mod", "theorem", "to_finmap_entries", ["alist"]], ["mod", "theorem", "to_finmap_eq", ["alist"]], ["mod", "theorem", "empty_to_finmap", ["finmap"]], ["mod", "def", "erase", ["finmap"]], ["mod", "theorem", "erase_to_finmap", ["finmap"]], ["mod", "theorem", "ext", ["finmap"]], ["mod", "def", "extract", ["finmap"]], ["mod", "theorem", "extract_eq_lookup_erase", ["finmap"]], ["mod", "def", "insert", ["finmap"]], ["mod", "theorem", "insert_entries_of_neg", ["finmap"]], ["mod", "theorem", "insert_of_pos", ["finmap"]], ["mod", "theorem", "insert_to_finmap", ["finmap"]], ["mod", "def", "keys", ["finmap"]], ["mod", "theorem", "keys_empty", ["finmap"]], ["mod", "theorem", "keys_erase", ["finmap"]], ["mod", "theorem", "keys_erase_to_finset", ["finmap"]], ["mod", "theorem", "keys_ext", ["finmap"]], ["mod", "theorem", "keys_replace", ["finmap"]], ["mod", "theorem", "keys_val", ["finmap"]], ["mod", "theorem", "lift_on_to_finmap", ["finmap"]], ["mod", "def", "lookup", ["finmap"]], ["mod", "theorem", "lookup_is_some", ["finmap"]], ["mod", "theorem", "lookup_to_finmap", ["finmap"]], ["mod", "theorem", "mem_def", ["finmap"]], ["mod", "theorem", "mem_erase", ["finmap"]], ["mod", "theorem", "mem_insert", ["finmap"]], ["mod", "theorem", "mem_keys", ["finmap"]], ["mod", "theorem", "mem_replace", ["finmap"]], ["mod", "theorem", "mem_to_finmap", ["finmap"]], ["mod", "theorem", "not_mem_empty", ["finmap"]], ["mod", "theorem", "not_mem_empty_entries", ["finmap"]], ["mod", "def", "replace", ["finmap"]], ["mod", "theorem", "replace_to_finmap", ["finmap"]], ["mod", "def", "singleton", ["finmap"]], ["mod", "structure", "finmap", []]]}, {"oldPath": "src/data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": [["mod", "def", "erase", ["alist"]], ["mod", "theorem", "ext", ["alist"]], ["mod", "def", "extract", ["alist"]], ["mod", "theorem", "extract_eq_lookup_erase", ["alist"]], ["mod", "def", "foldl", ["alist"]], ["mod", "def", "insert", ["alist"]], ["mod", "theorem", "insert_entries_of_neg", ["alist"]], ["mod", "theorem", "insert_of_pos", ["alist"]], ["mod", "def", "keys", ["alist"]], ["mod", "theorem", "keys_empty", ["alist"]], ["mod", "theorem", "keys_erase", ["alist"]], ["mod", "theorem", "keys_insert", ["alist"]], ["mod", "theorem", "keys_nodup", ["alist"]], ["mod", "theorem", "keys_replace", ["alist"]], ["mod", "def", "lookup", ["alist"]], ["mod", "theorem", "lookup_is_some", ["alist"]], ["mod", "theorem", "mem_def", ["alist"]], ["mod", "theorem", "mem_erase", ["alist"]], ["mod", "theorem", "mem_insert", ["alist"]], ["mod", "theorem", "mem_keys", ["alist"]], ["mod", "theorem", "mem_of_perm", ["alist"]], ["mod", "theorem", "mem_replace", ["alist"]], ["mod", "theorem", "not_mem_empty", ["alist"]], ["mod", "theorem", "not_mem_empty_entries", ["alist"]], ["mod", "theorem", "perm_erase", ["alist"]], ["mod", "theorem", "perm_insert", ["alist"]], ["mod", "theorem", "perm_lookup", ["alist"]], ["mod", "theorem", "perm_replace", ["alist"]], ["mod", "def", "replace", ["alist"]], ["mod", "def", "singleton", ["alist"]], ["mod", "structure", "alist", []]]}]}, {"timestamp": 1549544573, "sha": "46d10092", "message": "feat(analysis/metric_space): Isometries (#657)", "changes": [{"oldPath": null, "newPath": "src/topology/metric_space/isometry.lean", "changes": [["add", "theorem", "diam_image", ["emetric", "isometry"]], ["add", "theorem", "coe_eq_to_equiv", ["isometric"]], ["add", "theorem", "coe_eq_to_homeomorph", ["isometric"]], ["add", "theorem", "image_symm", ["isometric"]], ["add", "theorem", "preimage_symm", ["isometric"]], ["add", "theorem", "range_coe", ["isometric"]], ["add", "theorem", "self_comp_symm", ["isometric"]], ["add", "theorem", "symm_comp_self", ["isometric"]], ["add", "theorem", "to_homeomorph_to_equiv", ["isometric"]], ["add", "structure", "isometric", []], ["add", "theorem", "comp", ["isometry"]], ["add", "theorem", "continuous", ["isometry"]], ["add", "theorem", "dist_eq", ["isometry"]], ["add", "theorem", "edist_eq", ["isometry"]], ["add", "theorem", "injective", ["isometry"]], ["add", "theorem", "inv", ["isometry"]], ["add", "theorem", "isometric_on_range", ["isometry"]], ["add", "theorem", "isometric_on_range_apply", ["isometry"]], ["add", "theorem", "uniform_embedding", ["isometry"]], ["add", "def", "isometry", []], ["add", "theorem", "isometry_emetric_iff_metric", []], ["add", "theorem", "isometry_id", []], ["add", "theorem", "isometry_subsingleton", []], ["add", "theorem", "isometry_subtype_val", []], ["add", "theorem", "diam_image", ["metric", "isometry"]]]}]}, {"timestamp": 1549534933, "sha": "8911b8cd", "message": "feat(algebra/order_functions): max_lt_max and min_lt_min (#692)", "changes": [{"oldPath": "src/algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": [["add", "theorem", "max_lt_max", []], ["add", "theorem", "min_lt_min", []]]}]}, {"timestamp": 1549484147, "sha": "51f80a3f", "message": "feat(data/quot): quotient.ind' (#691)\n* feat(data/quot): quotient.ind'\n* correct elaborator tag; theorems not definitions", "changes": [{"oldPath": "src/data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}]}, {"timestamp": 1549450684, "sha": "9615b385", "message": "feat(data/real): completeness criterion for Cauchy sequences (closes #654)", "changes": [{"oldPath": "src/data/real/cau_seq_filter.lean", "newPath": "src/data/real/cau_seq_filter.lean", "changes": [["mod", "theorem", "complete_of_cauchy_seq_tendsto", []], ["add", "theorem", "complete_of_convergent_controlled_sequences", ["emetric"]], ["add", "theorem", "complete_of_convergent_controlled_sequences", ["metric"]], ["add", "theorem", "FB_lim", ["sequentially_complete"]], ["add", "theorem", "FB_pos", ["sequentially_complete"]], ["add", "theorem", "F_lim", ["sequentially_complete"]], ["add", "theorem", "F_pos", ["sequentially_complete"]], ["del", "theorem", "cauchy_seq_of_dist_tendsto_0", ["sequentially_complete"]], ["mod", "theorem", "le_nhds_cau_filter_lim", ["sequentially_complete"]], ["add", "theorem", "seq_of_cau_filter_bound", ["sequentially_complete"]], ["del", "theorem", "seq_of_cau_filter_is_cauchy'", ["sequentially_complete"]], ["mod", "theorem", "seq_of_cau_filter_mem_set_seq", ["sequentially_complete"]], ["mod", "theorem", "set_seq_of_cau_filter_inhabited", ["sequentially_complete"]], ["mod", "theorem", "set_seq_of_cau_filter_mem_sets", ["sequentially_complete"]]]}]}, {"timestamp": 1549449416, "sha": "3ac79673", "message": "feat(analysis/metric_space): add premetric spaces (closes #652)", "changes": [{"oldPath": null, "newPath": "src/topology/metric_space/premetric_space.lean", "changes": [["add", "def", "dist_setoid", ["premetric"]], ["add", "theorem", "metric_quot_dist_eq", ["premetric"]]]}]}, {"timestamp": 1549448972, "sha": "e93fa306", "message": "feat(category/fold): `foldl` and `foldr` for `traversable` structures (#376)", "changes": [{"oldPath": null, "newPath": "src/category/fold.lean", "changes": [["add", "def", "mk", ["monoid", "foldl"]], ["add", "def", "of_free_monoid", ["monoid", "foldl"]], ["add", "def", "foldl", ["monoid"]], ["add", "def", "get", ["monoid", "foldr"]], ["add", "def", "mk", ["monoid", "foldr"]], ["add", "def", "of_free_monoid", ["monoid", "foldr"]], ["add", "def", "foldr", ["monoid"]], ["add", "def", "mk", ["monoid", "mfoldl"]], ["add", "def", "of_free_monoid", ["monoid", "mfoldl"]], ["add", "def", "mfoldl", ["monoid"]], ["add", "def", "get", ["monoid", "mfoldr"]], ["add", "def", "mk", ["monoid", "mfoldr"]], ["add", "def", "of_free_monoid", ["monoid", "mfoldr"]], ["add", "def", "mfoldr", ["monoid"]], ["add", "def", "fold_map", ["traversable"]], ["add", "theorem", "fold_map_hom", ["traversable"]], ["add", "theorem", "fold_map_hom_free", ["traversable"]], ["add", "theorem", "fold_map_map", ["traversable"]], ["add", "theorem", "fold_mfoldl_cons", ["traversable"]], ["add", "theorem", "fold_mfoldr_cons", ["traversable"]], ["add", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "foldl"]], ["add", "def", "foldl", ["traversable"]], ["add", "theorem", "foldl_map", ["traversable"]], ["add", "theorem", "foldl_to_list", ["traversable"]], ["add", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "foldr"]], ["add", "theorem", "unop_of_free_monoid", ["traversable", "foldr"]], ["add", "def", "foldr", ["traversable"]], ["add", "theorem", "foldr_map", ["traversable"]], ["add", "theorem", "foldr_to_list", ["traversable"]], ["add", "def", "map", ["traversable", "free"]], ["add", "theorem", "map_eq_map", ["traversable", "free"]], ["add", "def", "mk", ["traversable", "free"]], ["add", "def", "length", ["traversable"]], ["add", "theorem", "length_to_list", ["traversable"]], ["add", "def", "map_fold", ["traversable"]], ["add", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "mfoldl"]], ["add", "def", "mfoldl", ["traversable"]], ["add", "theorem", "mfoldl_map", ["traversable"]], ["add", "theorem", "mfoldl_to_list", ["traversable"]], ["add", "theorem", "of_free_monoid_comp_free_mk", ["traversable", "mfoldr"]], ["add", "theorem", "unop_of_free_monoid", ["traversable", "mfoldr"]], ["add", "def", "mfoldr", ["traversable"]], ["add", "theorem", "mfoldr_map", ["traversable"]], ["add", "theorem", "mfoldr_to_list", ["traversable"]], ["add", "def", "to_list", ["traversable"]], ["add", "theorem", "to_list_eq_self", ["traversable"]], ["add", "theorem", "to_list_map", ["traversable"]], ["add", "theorem", "to_list_spec", ["traversable"]]]}]}, {"timestamp": 1549447169, "sha": "c82243a8", "message": "feat(analysis/normed_space): bounded linear maps with the operator norm form a normed space (closes #680)", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "structure", "core", ["normed_space"]]]}, {"oldPath": null, "newPath": "src/analysis/normed_space/operator_norm.lean", "changes": [["add", "theorem", "bounded_by_operator_norm", []], ["add", "theorem", "bounded_by_operator_norm_on_unit_ball", []], ["add", "theorem", "bounded_by_operator_norm_on_unit_vector", []], ["add", "def", "bounded_linear_maps", []], ["add", "theorem", "exists_bound'", []], ["add", "theorem", "exists_bound", []], ["add", "theorem", "ext", []], ["add", "theorem", "norm_of_unit_ball_bdd_above", []], ["add", "theorem", "operator_norm_bounded_by", []], ["add", "theorem", "operator_norm_homogeneous", []], ["add", "theorem", "operator_norm_nonneg", []], ["add", "theorem", "operator_norm_triangle", []], ["add", "theorem", "operator_norm_zero_iff", []], ["add", "theorem", "zero_in_im_ball", []]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cSup_intro'", ["lattice"]]]}]}, {"timestamp": 1549396028, "sha": "d5a1b468", "message": "to_nat_le_to_nat (#685)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "to_nat_le_to_nat", ["int"]]]}]}, {"timestamp": 1549376779, "sha": "9f79d2eb", "message": "fix(tactic/h_generalize): fix name resolution in h_generalize (#688)", "changes": [{"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1549376035, "sha": "a0d8ae1e", "message": "feat(tactic/replaceable): supplement `def_replacer` with attribute `replaceable`", "changes": [{"oldPath": "src/data/string.lean", "newPath": "src/data/string.lean", "changes": [["del", "def", "map_tokens", ["string"]]]}, {"oldPath": null, "newPath": "src/data/string/defs.lean", "changes": [["add", "def", "map_tokens", ["string"]], ["add", "def", "over_list", ["string"]]]}, {"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": [["add", "def", "append_suffix", ["name"]]]}, {"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}]}, {"timestamp": 1549308917, "sha": "178c09d7", "message": "feat(natural_isomorphism): componentwise isos are isos (#671)", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "theorem", "hom_inv_id", ["category_theory", "is_iso"]], ["del", "def", "hom_inv_id", ["category_theory", "is_iso"]], ["add", "theorem", "hom_inv_id_assoc", ["category_theory", "is_iso"]], ["add", "theorem", "inv_hom_id", ["category_theory", "is_iso"]], ["del", "def", "inv_hom_id", ["category_theory", "is_iso"]], ["add", "theorem", "inv_hom_id_assoc", ["category_theory", "is_iso"]]]}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}]}, {"timestamp": 1549313377, "sha": "9a8f1b06", "message": "feat(algebra/group_power): gpow_add_one (#683)\n* feat(algebra/group_power): gpow_add_one\n* feat(data/nat//basic): int.coe_nat_abs", "changes": [{"oldPath": "src/algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": [["add", "theorem", "add_one_gsmul", []], ["add", "theorem", "gpow_add_one", []], ["add", "theorem", "gpow_one_add", []], ["add", "theorem", "one_add_gsmul", []]]}, {"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_abs", ["int"]]]}]}, {"timestamp": 1549306817, "sha": "53952326", "message": "remove simp on set_coe_eq_subtype (#682)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["mod", "theorem", "set_coe_eq_subtype", ["set"]]]}, {"oldPath": "src/group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "src/tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}]}, {"timestamp": 1549277038, "sha": "5e5f1e25", "message": "fix(data/*/Ico): succ_top is too aggressive as a simp lemma (#678)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["mod", "theorem", "succ_top", ["finset", "Ico"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["mod", "theorem", "succ_top", ["list", "Ico"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["mod", "theorem", "succ_top", ["multiset", "Ico"]]]}]}, {"timestamp": 1549233070, "sha": "25392518", "message": "feat(data/nat/cast): abs_cast", "changes": [{"oldPath": "src/data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": [["add", "theorem", "abs_cast", ["nat"]]]}]}, {"timestamp": 1549213241, "sha": "d01e523e", "message": "feat(category_theory/kleisli): monoids, const applicative functor and kleisli categories (#660)\n* feat(category_theory/kleisli): monoids, const applicative functor and\nkleisli categories", "changes": [{"oldPath": "src/algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": [["add", "theorem", "add_def", ["free_add_monoid"]], ["add", "theorem", "zero_def", ["free_add_monoid"]], ["add", "def", "free_add_monoid", []], ["add", "theorem", "mul_def", ["free_monoid"]], ["add", "theorem", "one_def", ["free_monoid"]], ["add", "def", "free_monoid", []]]}, {"oldPath": "src/category/applicative.lean", "newPath": "src/category/applicative.lean", "changes": []}, {"oldPath": "src/category/basic.lean", "newPath": "src/category/basic.lean", "changes": [["add", "def", "fish", []], ["add", "theorem", "fish_assoc", []], ["add", "theorem", "fish_pipe", []], ["add", "theorem", "fish_pure", []]]}, {"oldPath": "src/category/functor.lean", "newPath": "src/category/functor.lean", "changes": [["add", "def", "mk", ["functor", "add_const"]], ["add", "def", "run", ["functor", "add_const"]], ["add", "def", "mk'", ["functor", "const"]]]}, {"oldPath": "src/category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["add", "theorem", "mul_def", ["category_theory", "End"]], ["add", "theorem", "one_def", ["category_theory", "End"]], ["mod", "def", "End", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/instances/kleisli.lean", "changes": [["add", "theorem", "comp_def", ["category_theory", "Kleisli"]], ["add", "theorem", "id_def", ["category_theory", "Kleisli"]], ["add", "def", "mk", ["category_theory", "Kleisli"]], ["add", "def", "Kleisli", ["category_theory"]]]}, {"oldPath": "src/category_theory/instances/rings.lean", "newPath": "src/category_theory/instances/rings.lean", "changes": []}, {"oldPath": "src/category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["add", "theorem", "op_inj", ["category_theory"]], ["add", "theorem", "op_mul", ["category_theory", "opposite"]], ["add", "theorem", "op_one", ["category_theory", "opposite"]], ["add", "theorem", "unop_mul", ["category_theory", "opposite"]], ["add", "theorem", "unop_one", ["category_theory", "opposite"]], ["add", "theorem", "unop_inj", ["category_theory"]]]}, {"oldPath": "src/data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}]}, {"timestamp": 1549213305, "sha": "f5bd340c", "message": "cleanup(*): removing uses of bare `have` (#676)", "changes": [{"oldPath": "src/data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1549160088, "sha": "544f35c3", "message": "Update README.md", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1549159588, "sha": "b3e1e6f3", "message": "fix(README): update URL for build status icon (#681)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1549156116, "sha": "044b6fae", "message": "feat(algebra/euclidean_domain): discrete field to euclidean domain (#674)", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}]}, {"timestamp": 1549134290, "sha": "3109c4b3", "message": "chore(purge_olean.sh): a few small improvements (#661)\n* purge empty directories\n* Only print if an .olean is rm'd. This reduces the noise and reduces the\nscript run time.\n* use git top-level dir to make the script relocatable\n* only affect src and test dirs\n* use bash instead of sed", "changes": [{"oldPath": "purge_olean.sh", "newPath": "purge_olean.sh", "changes": []}]}, {"timestamp": 1549133009, "sha": "8590ff2b", "message": "fix(functor_category): remove superfluous coercions (#670)", "changes": [{"oldPath": "src/category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}]}, {"timestamp": 1549132956, "sha": "a09dc9f2", "message": "cleanup(category_theory/cones): tidying up, after making opposites work better (#675)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "cones", ["category_theory", "functor"]], ["mod", "theorem", "cones_obj", ["category_theory", "functor"]]]}]}, {"timestamp": 1549132869, "sha": "b084cfcd", "message": "fix(category_theory/equivalence): duplicated namespace prefix (#669)", "changes": [{"oldPath": "src/category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": [["del", "def", "equivalence_of_fully_faithfully_ess_surj", ["category_theory", "category_theory", "equivalence"]], ["del", "def", "ess_surj_of_equivalence", ["category_theory", "category_theory", "equivalence"]], ["add", "def", "equivalence_of_fully_faithfully_ess_surj", ["category_theory", "equivalence"]], ["add", "def", "ess_surj_of_equivalence", ["category_theory", "equivalence"]]]}]}, {"timestamp": 1549130352, "sha": "e501d026", "message": "fix(replacer): better flow control in replacer when tactic fails (#673)\nThe main consequence is better error reporting.", "changes": [{"oldPath": "src/tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}]}, {"timestamp": 1549132932, "sha": "0393ccbd", "message": "feat(ring_theory/algebra): subalgebra_of_subring (#664)", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "alg_hom_int", []], ["del", "def", "to_ℤ_alg_hom", ["is_ring_hom"]], ["add", "theorem", "mem_subalgebra_of_subring", []], ["del", "def", "to_ℤ_algebra", ["ring"]], ["add", "def", "subalgebra_of_subring", []]]}]}, {"timestamp": 1549062055, "sha": "f529870e", "message": "feat(data/nat/gcd/coprime): some easy simp lemmas (#677)", "changes": [{"oldPath": "src/data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": [["add", "theorem", "coprime_one_left_iff", ["nat"]], ["add", "theorem", "coprime_one_right_iff", ["nat"]], ["add", "theorem", "coprime_self", ["nat"]], ["add", "theorem", "coprime_zero_left", ["nat"]], ["add", "theorem", "coprime_zero_right", ["nat"]]]}]}, {"timestamp": 1549071661, "sha": "6925e4dc", "message": "feat(algebra/euclidean_domain): lcm (#665)", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "dvd_lcm_left", ["euclidean_domain"]], ["add", "theorem", "dvd_lcm_right", ["euclidean_domain"]], ["add", "theorem", "gcd_mul_lcm", ["euclidean_domain"]], ["add", "def", "lcm", ["euclidean_domain"]], ["add", "theorem", "lcm_dvd", ["euclidean_domain"]], ["add", "theorem", "lcm_dvd_iff", ["euclidean_domain"]], ["add", "theorem", "lcm_eq_zero_iff", ["euclidean_domain"]], ["add", "theorem", "lcm_zero_left", ["euclidean_domain"]], ["add", "theorem", "lcm_zero_right", ["euclidean_domain"]]]}]}, {"timestamp": 1549051651, "sha": "fb601459", "message": "cleanup: replace `begin intros ...` with lambdas (#672)", "changes": [{"oldPath": "src/category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}]}, {"timestamp": 1549061290, "sha": "ed0d24af", "message": "feat(algebra/euclidean_domain): add quotient_zero axiom to euclidean_domain (#666)", "changes": [{"oldPath": "src/algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": [["add", "theorem", "div_zero", ["euclidean_domain"]], ["add", "theorem", "mul_div_assoc", ["euclidean_domain"]], ["mod", "theorem", "zero_div", ["euclidean_domain"]]]}, {"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["del", "theorem", "div_zero", ["polynomial"]]]}]}, {"timestamp": 1549023982, "sha": "d8f6dc46", "message": "feat(src/tactic/explode): improve printing of references", "changes": [{"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}]}, {"timestamp": 1549023982, "sha": "a32de36f", "message": "feat(src/tactic/explode): add printing for conclusions of sintros", "changes": [{"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}]}, {"timestamp": 1549023982, "sha": "a08c9a72", "message": "add printing for conclusions of sintros", "changes": [{"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}]}, {"timestamp": 1549023239, "sha": "c9e4f8ed", "message": "fix(tactic/inarith): fix denominator normalization of products", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "test/linarith.lean", "newPath": "test/linarith.lean", "changes": []}]}, {"timestamp": 1549023211, "sha": "52adfd73", "message": "feat(tactic,tactic/interactive): add set tactic, a variant of let", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}]}, {"timestamp": 1549014831, "sha": "89bc63c3", "message": "feat(ring_theory/noetherian): is_noetherian_ring_range", "changes": [{"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_ring_range", []]]}]}, {"timestamp": 1548981009, "sha": "8e381f6e", "message": "feat(ring_theory/algebra_operations): multiplication of submodules of an algebra (#658)", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "add_eq_sup", ["submodule"]], ["add", "theorem", "zero_eq_bot", ["submodule"]]]}, {"oldPath": null, "newPath": "src/ring_theory/algebra_operations.lean", "changes": [["add", "theorem", "bot_mul", ["algebra"]], ["add", "theorem", "fg_mul", ["algebra"]], ["add", "theorem", "mul_bot", ["algebra"]], ["add", "theorem", "mul_le", ["algebra"]], ["add", "theorem", "mul_le_mul", ["algebra"]], ["add", "theorem", "mul_le_mul_left", ["algebra"]], ["add", "theorem", "mul_le_mul_right", ["algebra"]], ["add", "theorem", "mul_mem_mul", ["algebra"]], ["add", "theorem", "mul_mem_mul_rev", ["algebra"]], ["add", "theorem", "mul_sup", ["algebra"]], ["add", "theorem", "span_mul_span", ["algebra"]], ["add", "theorem", "sup_mul", ["algebra"]]]}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["del", "theorem", "add_eq_sup", ["submodule"]], ["del", "theorem", "zero_eq_bot", ["submodule"]]]}]}, {"timestamp": 1548872441, "sha": "50a03f76", "message": "chore(test): fix test directory structure", "changes": [{"oldPath": "test/tests/coinductive.lean", "newPath": "test/coinductive.lean", "changes": []}, {"oldPath": "test/tests/examples.lean", "newPath": "test/examples.lean", "changes": []}, {"oldPath": "test/tests/fin_cases.lean", "newPath": "test/fin_cases.lean", "changes": []}, {"oldPath": "test/tests/finish1.lean", "newPath": "test/finish1.lean", "changes": []}, {"oldPath": "test/tests/finish2.lean", "newPath": "test/finish2.lean", "changes": []}, {"oldPath": "test/tests/finish3.lean", "newPath": "test/finish3.lean", "changes": []}, {"oldPath": "test/tests/linarith.lean", "newPath": "test/linarith.lean", "changes": []}, {"oldPath": "test/tests/mk_iff_of_inductive.lean", "newPath": "test/mk_iff_of_inductive.lean", "changes": []}, {"oldPath": "test/tests/monotonicity.lean", "newPath": "test/monotonicity.lean", "changes": []}, {"oldPath": "test/tests/monotonicity/test_cases.lean", "newPath": "test/monotonicity/test_cases.lean", "changes": []}, {"oldPath": "test/tests/norm_num.lean", "newPath": "test/norm_num.lean", "changes": []}, {"oldPath": "test/tests/replacer.lean", "newPath": "test/replacer.lean", "changes": []}, {"oldPath": "test/tests/restate_axiom.lean", "newPath": "test/restate_axiom.lean", "changes": []}, {"oldPath": "test/tests/ring.lean", "newPath": "test/ring.lean", "changes": []}, {"oldPath": "test/tests/solve_by_elim.lean", "newPath": "test/solve_by_elim.lean", "changes": []}, {"oldPath": "test/tests/split_ifs.lean", "newPath": "test/split_ifs.lean", "changes": []}, {"oldPath": "test/tests/tactics.lean", "newPath": "test/tactics.lean", "changes": []}, {"oldPath": "test/tests/tidy.lean", "newPath": "test/tidy.lean", "changes": []}]}, {"timestamp": 1548872441, "sha": "12be0aaa", "message": "refactor(category_theory/instances): rename `examples` to `instances`", "changes": [{"oldPath": "src/category_theory/examples/measurable_space.lean", "newPath": "src/category_theory/instances/measurable_space.lean", "changes": [["del", "def", "Borel", ["category_theory", "examples"]], ["del", "def", "Meas", ["category_theory", "examples"]], ["add", "def", "Borel", ["category_theory", "instances"]], ["add", "def", "Meas", ["category_theory", "instances"]]]}, {"oldPath": "src/category_theory/examples/monoids.lean", "newPath": "src/category_theory/instances/monoids.lean", "changes": [["del", "def", "forget_to_Mon", ["category_theory", "examples", "CommMon"]], ["del", "def", "CommMon", ["category_theory", "examples"]], ["del", "def", "Mon", ["category_theory", "examples"]], ["del", "def", "is_comm_monoid_hom", ["category_theory", "examples"]], ["add", "def", "forget_to_Mon", ["category_theory", "instances", "CommMon"]], ["add", "def", "CommMon", ["category_theory", "instances"]], ["add", "def", "Mon", ["category_theory", "instances"]], ["add", "def", "is_comm_monoid_hom", ["category_theory", "instances"]]]}, {"oldPath": "src/category_theory/examples/rings.lean", "newPath": "src/category_theory/instances/rings.lean", "changes": [["del", "def", "cast", ["category_theory", "examples", "CommRing", "Int"]], ["del", "def", "hom_unique", ["category_theory", "examples", "CommRing", "Int"]], ["del", "def", "Int", ["category_theory", "examples", "CommRing"]], ["del", "theorem", "comp_val", ["category_theory", "examples", "CommRing"]], ["del", "def", "forget", ["category_theory", "examples", "CommRing"]], ["del", "def", "forget_to_CommMon", ["category_theory", "examples", "CommRing"]], ["del", "theorem", "hom_coe_app", ["category_theory", "examples", "CommRing"]], ["del", "theorem", "id_val", ["category_theory", "examples", "CommRing"]], ["del", "def", "eq_cast'", ["category_theory", "examples", "CommRing", "int"]], ["del", "theorem", "polynomial_map_val", ["category_theory", "examples", "CommRing"]], ["del", "theorem", "polynomial_obj_α", ["category_theory", "examples", "CommRing"]], ["del", "def", "to_Ring", ["category_theory", "examples", "CommRing"]], ["del", "def", "CommRing", ["category_theory", "examples"]], ["del", "def", "Ring", ["category_theory", "examples"]], ["add", "def", "cast", ["category_theory", "instances", "CommRing", "Int"]], ["add", "def", "hom_unique", ["category_theory", "instances", "CommRing", "Int"]], ["add", "def", "Int", ["category_theory", "instances", "CommRing"]], ["add", "theorem", "comp_val", ["category_theory", "instances", "CommRing"]], ["add", "def", "forget", ["category_theory", "instances", "CommRing"]], ["add", "def", "forget_to_CommMon", ["category_theory", "instances", "CommRing"]], ["add", "theorem", "hom_coe_app", ["category_theory", "instances", "CommRing"]], ["add", "theorem", "id_val", ["category_theory", "instances", "CommRing"]], ["add", "def", "eq_cast'", ["category_theory", "instances", "CommRing", "int"]], ["add", "theorem", "polynomial_map_val", ["category_theory", "instances", "CommRing"]], ["add", "theorem", "polynomial_obj_α", ["category_theory", "instances", "CommRing"]], ["add", "def", "to_Ring", ["category_theory", "instances", "CommRing"]], ["add", "def", "CommRing", ["category_theory", "instances"]], ["add", "def", "Ring", ["category_theory", "instances"]]]}, {"oldPath": "src/category_theory/examples/topological_spaces.lean", "newPath": "src/category_theory/instances/topological_spaces.lean", "changes": [["del", "def", "adj₁", ["category_theory", "examples", "Top"]], ["del", "def", "adj₂", ["category_theory", "examples", "Top"]], ["del", "def", "colimit", ["category_theory", "examples", "Top"]], ["del", "def", "colimit_is_colimit", ["category_theory", "examples", "Top"]], ["del", "def", "discrete", ["category_theory", "examples", "Top"]], ["del", "def", "limit", ["category_theory", "examples", "Top"]], ["del", "def", "limit_is_limit", ["category_theory", "examples", "Top"]], ["del", "def", "trivial", ["category_theory", "examples", "Top"]], ["del", "def", "Top", ["category_theory", "examples"]], ["del", "def", "nbhd", ["category_theory", "examples"]], ["del", "def", "nbhds", ["category_theory", "examples"]], ["add", "def", "adj₁", ["category_theory", "instances", "Top"]], ["add", "def", "adj₂", ["category_theory", "instances", "Top"]], ["add", "def", "colimit", ["category_theory", "instances", "Top"]], ["add", "def", "colimit_is_colimit", ["category_theory", "instances", "Top"]], ["add", "def", "discrete", ["category_theory", "instances", "Top"]], ["add", "def", "limit", ["category_theory", "instances", "Top"]], ["add", "def", "limit_is_limit", ["category_theory", "instances", "Top"]], ["add", "def", "trivial", ["category_theory", "instances", "Top"]], ["add", "def", "Top", ["category_theory", "instances"]], ["add", "def", "nbhd", ["category_theory", "instances"]], ["add", "def", "nbhds", ["category_theory", "instances"]]]}]}, {"timestamp": 1548868523, "sha": "829b49bd", "message": "chore(.travis.yml): use git clean to clean out untracked files (#659)\n* chore(.travis.yml): use git clean to clean out untracked files and delete more obsolete olean files\nPR #641 involved renaming a directory. The old directory was still\npresent in the cache, and in this situation `git status` lists the\ndirectory as a whole as untracked, so the grep did not find any\n`.lean` files.", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": null, "newPath": "purge_olean.sh", "changes": []}]}, {"timestamp": 1548868038, "sha": "0eb9db6a", "message": "chore(linear_algebra/multivariate_polynomial): move rename to the right place", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["del", "theorem", "hom_eq_hom", ["mv_polynomial"]], ["del", "theorem", "is_id", ["mv_polynomial"]], ["del", "def", "rename", ["mv_polynomial"]], ["del", "theorem", "rename_C", ["mv_polynomial"]], ["del", "theorem", "rename_X", ["mv_polynomial"]], ["del", "theorem", "rename_id", ["mv_polynomial"]], ["del", "theorem", "rename_rename", ["mv_polynomial"]]]}, {"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": [["add", "theorem", "hom_eq_hom", ["mv_polynomial"]], ["add", "theorem", "is_id", ["mv_polynomial"]], ["add", "def", "rename", ["mv_polynomial"]], ["add", "theorem", "rename_C", ["mv_polynomial"]], ["add", "theorem", "rename_X", ["mv_polynomial"]], ["add", "theorem", "rename_id", ["mv_polynomial"]], ["add", "theorem", "rename_rename", ["mv_polynomial"]]]}]}, {"timestamp": 1548866238, "sha": "a480160a", "message": "feat(data/polynomial): generalize theorems from nonzero_comm_ring to comm_ring (#653)", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}]}, {"timestamp": 1548865935, "sha": "065f083b", "message": "feat(group_theory): monoid / group closure of union", "changes": [{"oldPath": "src/group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": [["add", "theorem", "closure_eq_mclosure", ["add_group"]], ["add", "theorem", "closure_mono", ["add_group"]], ["add", "theorem", "exists_list_of_mem_closure", ["add_group"]], ["add", "theorem", "mclosure_inv_subset", ["add_group"]], ["add", "theorem", "mclosure_subset", ["add_group"]], ["add", "theorem", "mem_closure_union_iff", ["add_group"]], ["add", "theorem", "closure_eq_mclosure", ["group"]], ["add", "theorem", "closure_mono", ["group"]], ["add", "theorem", "exists_list_of_mem_closure", ["group"]], ["add", "theorem", "mclosure_inv_subset", ["group"]], ["add", "theorem", "mclosure_subset", ["group"]], ["add", "theorem", "mem_closure_union_iff", ["group"]]]}, {"oldPath": "src/group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": [["add", "theorem", "closure_mono", ["add_monoid"]], ["add", "theorem", "mem_closure_union_iff", ["add_monoid"]], ["add", "theorem", "closure_mono", ["monoid"]], ["add", "theorem", "mem_closure_union_iff", ["monoid"]]]}]}, {"timestamp": 1548864991, "sha": "f7b9d6b4", "message": "refactor(data/equiv/algebra): mv_polynomial mv_polynomial (β ⊕ γ) α ≃r mv_polynomial β (mv_polynomial γ α)", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "theorem", "hom_eq_hom", ["mv_polynomial"]], ["add", "theorem", "is_id", ["mv_polynomial"]], ["add", "def", "iter_to_sum", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_C_C", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_C_X", ["mv_polynomial"]], ["add", "theorem", "iter_to_sum_X", ["mv_polynomial"]], ["add", "def", "mv_polynomial_equiv_mv_polynomial", ["mv_polynomial"]], ["del", "def", "of_option", ["mv_polynomial"]], ["del", "theorem", "of_option_C", ["mv_polynomial"]], ["del", "theorem", "of_option_X_none", ["mv_polynomial"]], ["del", "theorem", "of_option_X_some", ["mv_polynomial"]], ["del", "theorem", "of_option_add", ["mv_polynomial"]], ["del", "theorem", "of_option_mul", ["mv_polynomial"]], ["del", "theorem", "of_option_to_option", ["mv_polynomial"]], ["add", "def", "option_equiv_left", ["mv_polynomial"]], ["add", "def", "option_equiv_right", ["mv_polynomial"]], ["del", "def", "option_ring_equiv", ["mv_polynomial"]], ["add", "def", "punit_ring_equiv", ["mv_polynomial"]], ["add", "def", "rename", ["mv_polynomial"]], ["add", "theorem", "rename_C", ["mv_polynomial"]], ["add", "theorem", "rename_X", ["mv_polynomial"]], ["add", "theorem", "rename_id", ["mv_polynomial"]], ["add", "theorem", "rename_rename", ["mv_polynomial"]], ["add", "def", "ring_equiv_congr", ["mv_polynomial"]], ["add", "def", "sum_ring_equiv", ["mv_polynomial"]], ["add", "def", "sum_to_iter", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_C", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_Xl", ["mv_polynomial"]], ["add", "theorem", "sum_to_iter_Xr", ["mv_polynomial"]], ["del", "def", "to_option", ["mv_polynomial"]], ["del", "theorem", "to_option_C", ["mv_polynomial"]], ["del", "theorem", "to_option_C_C", ["mv_polynomial"]], ["del", "theorem", "to_option_C_X", ["mv_polynomial"]], ["del", "theorem", "to_option_X", ["mv_polynomial"]], ["del", "theorem", "to_option_add", ["mv_polynomial"]], ["del", "theorem", "to_option_mul", ["mv_polynomial"]], ["del", "theorem", "to_option_of_option", ["mv_polynomial"]]]}, {"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": [["add", "theorem", "eval₂_pow", ["mv_polynomial"]]]}]}, {"timestamp": 1548843968, "sha": "aa944bff", "message": "feat(analysis/exponential): real powers, `cpow_nat_inv_pow` (#647)", "changes": [{"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "theorem", "abs_cpow_real", ["complex"]], ["add", "theorem", "cpow_add", ["complex"]], ["add", "theorem", "cpow_def", ["complex"]], ["add", "theorem", "cpow_int_cast", ["complex"]], ["add", "theorem", "cpow_mul", ["complex"]], ["add", "theorem", "cpow_nat_cast", ["complex"]], ["add", "theorem", "cpow_nat_inv_pow", ["complex"]], ["add", "theorem", "cpow_neg", ["complex"]], ["add", "theorem", "cpow_one", ["complex"]], ["add", "theorem", "cpow_zero", ["complex"]], ["add", "theorem", "of_real_cpow", ["complex"]], ["add", "theorem", "one_cpow", ["complex"]], ["del", "theorem", "pow_add", ["complex"]], ["del", "theorem", "pow_def", ["complex"]], ["del", "theorem", "pow_int_cast", ["complex"]], ["del", "theorem", "pow_mul", ["complex"]], ["del", "theorem", "pow_nat_cast", ["complex"]], ["add", "theorem", "zero_cpow", ["complex"]], ["add", "theorem", "one_rpow", ["real"]], ["add", "theorem", "rpow_add", ["real"]], ["add", "theorem", "rpow_def", ["real"]], ["add", "theorem", "rpow_def_of_nonneg", ["real"]], ["add", "theorem", "rpow_int_cast", ["real"]], ["add", "theorem", "rpow_mul", ["real"]], ["add", "theorem", "rpow_nat_cast", ["real"]], ["add", "theorem", "rpow_neg", ["real"]], ["add", "theorem", "rpow_nonneg_of_nonneg", ["real"]], ["add", "theorem", "rpow_one", ["real"]], ["add", "theorem", "rpow_zero", ["real"]], ["add", "theorem", "zero_rpow", ["real"]]]}]}, {"timestamp": 1548842222, "sha": "626489ad", "message": "feat(topology/metric_space): diameter of a set in metric spaces (#651)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "bounded_iff_diam_ne_top", ["metric"]], ["add", "def", "diam", ["metric"]], ["add", "theorem", "diam_ball", ["metric"]], ["add", "theorem", "diam_closed_ball", ["metric"]], ["add", "theorem", "diam_empty", ["metric"]], ["add", "theorem", "diam_eq_zero_of_unbounded", ["metric"]], ["add", "theorem", "diam_le_of_forall_dist_le", ["metric"]], ["add", "theorem", "diam_mono", ["metric"]], ["add", "theorem", "diam_nonneg", ["metric"]], ["add", "theorem", "diam_singleton", ["metric"]], ["add", "theorem", "diam_union'", ["metric"]], ["add", "theorem", "diam_union", ["metric"]], ["add", "theorem", "dist_le_diam_of_mem", ["metric"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "def", "diam", ["emetric"]], ["add", "theorem", "diam_ball", ["emetric"]], ["add", "theorem", "diam_closed_ball", ["emetric"]], ["add", "theorem", "diam_empty", ["emetric"]], ["add", "theorem", "diam_le_of_forall_edist_le", ["emetric"]], ["add", "theorem", "diam_mono", ["emetric"]], ["add", "theorem", "diam_singleton", ["emetric"]], ["add", "theorem", "diam_union'", ["emetric"]], ["add", "theorem", "diam_union", ["emetric"]], ["add", "theorem", "edist_le_diam_of_mem", ["emetric"]]]}]}, {"timestamp": 1548842158, "sha": "ef35c6c3", "message": "second countability criteria in metric spaces", "changes": [{"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": [["add", "theorem", "compact_range", []]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "second_countable_of_almost_dense_set", ["metric"]], ["add", "theorem", "second_countable_of_countable_discretization", ["metric"]]]}]}, {"timestamp": 1548842074, "sha": "30649f55", "message": "cleanup instances/ennreal", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "continuous_edist'", []], ["add", "theorem", "continuous_edist", []], ["add", "theorem", "continuous_of_le_add_edist", []], ["add", "theorem", "edist_ne_top_of_mem_ball", []], ["add", "theorem", "cauchy_seq_iff_le_tendsto_0", ["emetric"]], ["del", "theorem", "continuous_edist", ["emetric"]], ["del", "theorem", "edist_ne_top_of_mem_ball", ["emetric"]], ["del", "def", "metric_space_emetric_ball", ["emetric"]], ["del", "theorem", "nhds_eq_nhds_emetric_ball", ["emetric"]], ["add", "def", "metric_space_emetric_ball", []], ["add", "theorem", "nhds_eq_nhds_emetric_ball", []], ["add", "theorem", "tendsto_edist", []]]}]}, {"timestamp": 1548841748, "sha": "afa535e7", "message": "feat(ring_theory/polynomial): hilbert basis theorem", "changes": [{"oldPath": null, "newPath": "src/ring_theory/polynomial.lean", "changes": [["add", "def", "degree_le", ["ideal"]], ["add", "theorem", "is_fg_degree_le", ["ideal"]], ["add", "def", "leading_coeff", ["ideal"]], ["add", "def", "leading_coeff_nth", ["ideal"]], ["add", "theorem", "leading_coeff_nth_mono", ["ideal"]], ["add", "theorem", "mem_leading_coeff", ["ideal"]], ["add", "theorem", "mem_leading_coeff_nth", ["ideal"]], ["add", "theorem", "mem_leading_coeff_nth_zero", ["ideal"]], ["add", "theorem", "mem_of_polynomial", ["ideal"]], ["add", "def", "of_polynomial", ["ideal"]], ["add", "theorem", "is_noetherian_ring_polynomial", []], ["add", "def", "degree_le", ["polynomial"]], ["add", "theorem", "degree_le_eq_span_X_pow", ["polynomial"]], ["add", "theorem", "degree_le_mono", ["polynomial"]], ["add", "theorem", "mem_degree_le", ["polynomial"]]]}]}, {"timestamp": 1548789218, "sha": "860eba67", "message": "chore(.): change occurrences of tests directory to test", "changes": [{"oldPath": "docs/mathlib-overview.md", "newPath": "docs/mathlib-overview.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1548788830, "sha": "247dcb2d", "message": "feat(linear_algebra): rules for kernel of `of_le`, `cod_restrict`, and `pair`", "changes": [{"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["add", "theorem", "ker_cod_restrict", ["linear_map"]], ["add", "theorem", "ker_pair", ["linear_map"]], ["add", "theorem", "range_cod_restrict", ["linear_map"]], ["add", "theorem", "ker_of_le", ["submodule"]]]}]}, {"timestamp": 1548786754, "sha": "4fb6c7dc", "message": "chore(test): rename the test directory so that `leanpkg` will find it", "changes": [{"oldPath": "tests/coinductive.lean", "newPath": "test/tests/coinductive.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "test/tests/examples.lean", "changes": []}, {"oldPath": "tests/fin_cases.lean", "newPath": "test/tests/fin_cases.lean", "changes": []}, {"oldPath": "tests/finish1.lean", "newPath": "test/tests/finish1.lean", "changes": []}, {"oldPath": "tests/finish2.lean", "newPath": "test/tests/finish2.lean", "changes": []}, {"oldPath": "tests/finish3.lean", "newPath": "test/tests/finish3.lean", "changes": []}, {"oldPath": "tests/linarith.lean", "newPath": "test/tests/linarith.lean", "changes": []}, {"oldPath": "tests/mk_iff_of_inductive.lean", "newPath": "test/tests/mk_iff_of_inductive.lean", "changes": []}, {"oldPath": "tests/monotonicity.lean", "newPath": "test/tests/monotonicity.lean", "changes": []}, {"oldPath": "tests/monotonicity/test_cases.lean", "newPath": "test/tests/monotonicity/test_cases.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "test/tests/norm_num.lean", "changes": []}, {"oldPath": "tests/replacer.lean", "newPath": "test/tests/replacer.lean", "changes": []}, {"oldPath": "tests/restate_axiom.lean", "newPath": "test/tests/restate_axiom.lean", "changes": []}, {"oldPath": "tests/ring.lean", "newPath": "test/tests/ring.lean", "changes": []}, {"oldPath": "tests/solve_by_elim.lean", "newPath": "test/tests/solve_by_elim.lean", "changes": []}, {"oldPath": "tests/split_ifs.lean", "newPath": "test/tests/split_ifs.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "test/tests/tactics.lean", "changes": []}, {"oldPath": "tests/tidy.lean", "newPath": "test/tests/tidy.lean", "changes": []}]}, {"timestamp": 1548782332, "sha": "fc529b6f", "message": "feat(data/complex/basic): of_real_fpow (#640)", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["add", "theorem", "map_fpow", ["is_field_hom"]]]}, {"oldPath": "src/data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": [["add", "theorem", "of_real_fpow", ["complex"]], ["mod", "theorem", "of_real_inv", ["complex"]]]}]}, {"timestamp": 1548782153, "sha": "d7d90fa6", "message": "docs(tactic/monotonicity/interactive): fix `mono` documentation [ci-skip]", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}]}, {"timestamp": 1548782130, "sha": "0924ac0e", "message": "fix build", "changes": [{"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1548782130, "sha": "a0e2de96", "message": "refactor(*): use decidable_linear_order.lift", "changes": [{"oldPath": "src/algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "src/data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1548782115, "sha": "7cfcce3d", "message": "feat(data/equiv/algebra): ring equiv for mv_polynomial", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "def", "of_option", ["mv_polynomial"]], ["add", "theorem", "of_option_C", ["mv_polynomial"]], ["add", "theorem", "of_option_X_none", ["mv_polynomial"]], ["add", "theorem", "of_option_X_some", ["mv_polynomial"]], ["add", "theorem", "of_option_add", ["mv_polynomial"]], ["add", "theorem", "of_option_mul", ["mv_polynomial"]], ["add", "theorem", "of_option_to_option", ["mv_polynomial"]], ["add", "def", "option_ring_equiv", ["mv_polynomial"]], ["add", "def", "pempty_ring_equiv", ["mv_polynomial"]], ["add", "def", "ring_equiv_of_equiv", ["mv_polynomial"]], ["add", "def", "to_option", ["mv_polynomial"]], ["add", "theorem", "to_option_C", ["mv_polynomial"]], ["add", "theorem", "to_option_C_C", ["mv_polynomial"]], ["add", "theorem", "to_option_C_X", ["mv_polynomial"]], ["add", "theorem", "to_option_X", ["mv_polynomial"]], ["add", "theorem", "to_option_add", ["mv_polynomial"]], ["add", "theorem", "to_option_mul", ["mv_polynomial"]], ["add", "theorem", "to_option_of_option", ["mv_polynomial"]]]}]}, {"timestamp": 1548768033, "sha": "54f4b291", "message": "feat(tactic/interactive.lean): clear_aux_decl", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "src/tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1548768013, "sha": "8faf8df0", "message": "feat(field_theory/splitting_field): splits predicate on polynomials", "changes": [{"oldPath": "src/data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": [["add", "theorem", "degree_eq_degree_of_associated", ["polynomial"]], ["add", "theorem", "eq_X_add_C_of_degree_eq_one", ["polynomial"]]]}, {"oldPath": null, "newPath": "src/field_theory/splitting_field.lean", "changes": [["add", "theorem", "exists_multiset_of_splits", ["polynomial"]], ["add", "theorem", "exists_root_of_splits", ["polynomial"]], ["add", "def", "splits", ["polynomial"]], ["add", "theorem", "splits_C", ["polynomial"]], ["add", "theorem", "splits_comp_of_splits", ["polynomial"]], ["add", "theorem", "splits_iff_exists_multiset", ["polynomial"]], ["add", "theorem", "splits_map_iff", ["polynomial"]], ["add", "theorem", "splits_mul", ["polynomial"]], ["add", "theorem", "splits_of_degree_eq_one", ["polynomial"]], ["add", "theorem", "splits_of_degree_le_one", ["polynomial"]], ["add", "theorem", "splits_of_exists_multiset", ["polynomial"]], ["add", "theorem", "splits_of_splits_id", ["polynomial"]], ["add", "theorem", "splits_of_splits_mul", ["polynomial"]], ["add", "theorem", "splits_zero", ["polynomial"]]]}, {"oldPath": "src/ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "exists_mem_factors_of_dvd", ["unique_factorization_domain"]]]}]}, {"timestamp": 1548767829, "sha": "8ee4f2da", "message": "move continuous_of_lipschitz around", "changes": [{"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["del", "theorem", "continuous_of_lipschitz", []]]}, {"oldPath": "src/topology/metric_space/lipschitz.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": [["add", "theorem", "continuous_of_lipschitz", []], ["add", "theorem", "uniform_continuous_of_le_add", []], ["add", "theorem", "uniform_continuous_of_lipschitz", []]]}]}, {"timestamp": 1548761985, "sha": "83edba46", "message": "feat(measure_theory): integral is equal and monotone almost-everywhere and for measurable functions it is a.e. strict at 0", "changes": [{"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_congr_ae", ["measure_theory"]], ["add", "theorem", "lintegral_eq_zero_iff", ["measure_theory"]], ["add", "theorem", "lintegral_le_lintegral_ae", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "def", "all_ae", ["measure_theory"]], ["add", "theorem", "all_ae_all_iff", ["measure_theory"]], ["add", "theorem", "all_ae_congr", ["measure_theory"]], ["add", "theorem", "all_ae_iff", ["measure_theory"]], ["add", "theorem", "exists_is_measurable_superset_of_measure_eq_zero", ["measure_theory"]], ["add", "theorem", "mem_a_e_iff", ["measure_theory", "measure"]]]}]}, {"timestamp": 1548754679, "sha": "cd41acab", "message": "Move tendsto_div to a better place", "changes": [{"oldPath": "src/analysis/specific_limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": [["add", "theorem", "tendsto_one_div_add_at_top_nhds_0_nat", []]]}, {"oldPath": "src/data/real/cau_seq_filter.lean", "newPath": "src/data/real/cau_seq_filter.lean", "changes": [["del", "theorem", "tendsto_div", ["sequentially_complete"]]]}, {"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": []}]}, {"timestamp": 1548706538, "sha": "042c290d", "message": "refactor(category_theory/opposites): Make `opposite` irreducible", "changes": [{"oldPath": "src/category_theory/adjunction.lean", "newPath": "src/category_theory/adjunction.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "theorem", "cocones_map", ["category_theory"]], ["mod", "theorem", "cocones_obj", ["category_theory"]], ["mod", "def", "cocones", ["category_theory", "functor"]], ["mod", "theorem", "cones_map_app", ["category_theory", "functor"]], ["mod", "theorem", "cones_obj", ["category_theory", "functor"]], ["mod", "def", "extensions", ["category_theory", "limits", "cocone"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["mod", "def", "nat_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "hom_iso", ["category_theory", "limits", "limit"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "op_comp_app", ["category_theory", "functor", "category"]], ["del", "theorem", "op_id_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "hom_obj", ["category_theory", "functor"]], ["mod", "theorem", "map_app", ["category_theory", "functor", "op_hom"]], ["mod", "theorem", "obj", ["category_theory", "functor", "op_hom"]], ["mod", "theorem", "obj", ["category_theory", "functor", "op_inv"]], ["mod", "theorem", "op_map", ["category_theory", "functor"]], ["mod", "theorem", "op_obj", ["category_theory", "functor"]], ["mod", "theorem", "unop_map", ["category_theory", "functor"]], ["mod", "theorem", "unop_obj", ["category_theory", "functor"]], ["add", "def", "op", ["category_theory", "has_hom", "hom"]], ["add", "theorem", "op_inj", ["category_theory", "has_hom", "hom"]], ["add", "theorem", "op_unop", ["category_theory", "has_hom", "hom"]], ["add", "def", "unop", ["category_theory", "has_hom", "hom"]], ["add", "theorem", "unop_inj", ["category_theory", "has_hom", "hom"]], ["add", "theorem", "unop_op", ["category_theory", "has_hom", "hom"]], ["mod", "def", "op", ["category_theory"]], ["add", "theorem", "op_comp", ["category_theory"]], ["add", "theorem", "op_id", ["category_theory"]], ["add", "theorem", "op_unop", ["category_theory"]], ["add", "def", "opposite", ["category_theory"]], ["add", "def", "unop", ["category_theory"]], ["add", "theorem", "unop_comp", ["category_theory"]], ["add", "theorem", "unop_id", ["category_theory"]], ["add", "theorem", "unop_op", ["category_theory"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["mod", "theorem", "map_app", ["category_theory", "coyoneda"]], ["mod", "theorem", "obj_map", ["category_theory", "coyoneda"]], ["mod", "theorem", "obj_obj", ["category_theory", "coyoneda"]], ["mod", "theorem", "map_app", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_map", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_map_id", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_obj", ["category_theory", "yoneda"]], ["mod", "def", "yoneda_sections", ["category_theory"]], ["mod", "def", "yoneda_sections_small", ["category_theory"]]]}]}, {"timestamp": 1548706276, "sha": "d1b7d914", "message": "feat(category_theory/limits/cones): forgetful functors", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "def", "forget", ["category_theory", "limits", "cocones"]], ["add", "theorem", "forget_map", ["category_theory", "limits", "cocones"]], ["add", "theorem", "forget_obj", ["category_theory", "limits", "cocones"]], ["add", "def", "forget", ["category_theory", "limits", "cones"]], ["add", "theorem", "forget_map", ["category_theory", "limits", "cones"]], ["add", "theorem", "forget_obj", ["category_theory", "limits", "cones"]]]}]}, {"timestamp": 1548705572, "sha": "b39d6d8a", "message": "feat(*) refactor module", "changes": [{"oldPath": "src/algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": [["mod", "def", "mk'", ["is_linear_map"]], ["mod", "theorem", "mk'_apply", ["is_linear_map"]], ["mod", "def", "comp", ["linear_map"]], ["mod", "theorem", "comp_apply", ["linear_map"]], ["mod", "theorem", "ext", ["linear_map"]], ["mod", "theorem", "ext_iff", ["linear_map"]], ["mod", "def", "id", ["linear_map"]], ["mod", "theorem", "is_linear", ["linear_map"]], ["mod", "structure", "linear_map", []], ["mod", "theorem", "one_smul", []], ["mod", "theorem", "neg_mem", ["submodule"]], ["mod", "structure", "submodule", []], ["mod", "theorem", "zero_smul", []]]}, {"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/normed_space/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": [["mod", "def", "lmk", ["dfinsupp"]], ["mod", "theorem", "lmk_apply", ["dfinsupp"]], ["mod", "def", "lsingle", ["dfinsupp"]], ["mod", "theorem", "lsingle_apply", ["dfinsupp"]], ["mod", "theorem", "mk_smul", ["dfinsupp"]]]}, {"oldPath": "src/data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": [["mod", "def", "to_has_scalar'", ["finsupp"]]]}, {"oldPath": "src/linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": [["del", "theorem", "some_spec3", ["classical"]], ["mod", "theorem", "apply_symm_apply", ["linear_equiv"]], ["mod", "theorem", "coe_apply", ["linear_equiv"]], ["mod", "def", "congr_right", ["linear_equiv"]], ["mod", "theorem", "of_bijective_apply", ["linear_equiv"]], ["mod", "def", "of_linear", ["linear_equiv"]], ["mod", "theorem", "of_linear_apply", ["linear_equiv"]], ["mod", "theorem", "of_linear_symm_apply", ["linear_equiv"]], ["mod", "def", "of_top", ["linear_equiv"]], ["mod", "def", "refl", ["linear_equiv"]], ["mod", "def", "symm", ["linear_equiv"]], ["mod", "theorem", "symm_apply_apply", ["linear_equiv"]], ["mod", "def", "trans", ["linear_equiv"]], ["mod", "structure", "linear_equiv", []], ["mod", "def", "cod_restrict", ["linear_map"]], ["mod", "theorem", "cod_restrict_apply", ["linear_map"]], ["mod", "theorem", "comap_cod_restrict", ["linear_map"]], ["mod", "theorem", "comap_injective", ["linear_map"]], ["mod", "theorem", "comap_le_comap_iff", ["linear_map"]], ["mod", "theorem", "comap_map_eq", ["linear_map"]], ["mod", "theorem", "comap_map_eq_self", ["linear_map"]], ["mod", "theorem", "comap_pair_prod", ["linear_map"]], ["mod", "theorem", "comp_id", ["linear_map"]], ["mod", "def", "congr_right", ["linear_map"]], ["mod", "def", "copair", ["linear_map"]], ["mod", "theorem", "copair_apply", ["linear_map"]], ["mod", "theorem", "copair_inl", ["linear_map"]], ["mod", "theorem", "copair_inl_inr", ["linear_map"]], ["mod", "theorem", "copair_inr", ["linear_map"]], ["mod", "theorem", "disjoint_ker'", ["linear_map"]], ["mod", "theorem", "disjoint_ker", ["linear_map"]], ["mod", "def", "endomorphism_ring", ["linear_map"]], ["mod", "def", "fst", ["linear_map"]], ["mod", "theorem", "fst_apply", ["linear_map"]], ["mod", "theorem", "fst_eq_copair", ["linear_map"]], ["mod", "theorem", "fst_pair", ["linear_map"]], ["mod", "theorem", "id_comp", ["linear_map"]], ["mod", "theorem", "inj_of_disjoint_ker", ["linear_map"]], ["mod", "def", "inl", ["linear_map"]], ["mod", "theorem", "inl_apply", ["linear_map"]], ["mod", "theorem", "inl_eq_pair", ["linear_map"]], ["mod", "def", "inr", ["linear_map"]], ["mod", "theorem", "inr_apply", ["linear_map"]], ["mod", "theorem", "inr_eq_pair", ["linear_map"]], ["mod", "def", "inverse", ["linear_map"]], ["mod", "def", "ker", ["linear_map"]], ["mod", "theorem", "ker_comp", ["linear_map"]], ["mod", "theorem", "ker_eq_bot", ["linear_map"]], ["mod", "theorem", "ker_eq_top", ["linear_map"]], ["mod", "theorem", "ker_id", ["linear_map"]], ["mod", "theorem", "ker_le_ker_comp", ["linear_map"]], ["mod", "theorem", "ker_zero", ["linear_map"]], ["mod", "theorem", "le_ker_iff_map", ["linear_map"]], ["mod", "theorem", "map_cod_restrict", ["linear_map"]], ["mod", "theorem", "map_comap_eq", ["linear_map"]], ["mod", "theorem", "map_comap_eq_self", ["linear_map"]], ["mod", "theorem", "map_copair_prod", ["linear_map"]], ["mod", "theorem", "map_injective", ["linear_map"]], ["mod", "theorem", "map_le_map_iff", ["linear_map"]], ["mod", "theorem", "mem_ker", ["linear_map"]], ["mod", "theorem", "mem_range", ["linear_map"]], ["mod", "theorem", "mul_app", ["linear_map"]], ["mod", "theorem", "one_app", ["linear_map"]], ["mod", "def", "pair", ["linear_map"]], ["mod", "theorem", "pair_apply", ["linear_map"]], ["mod", "theorem", "pair_fst_snd", ["linear_map"]], ["mod", "def", "range", ["linear_map"]], ["mod", "theorem", "range_coe", ["linear_map"]], ["mod", "theorem", "range_comp", ["linear_map"]], ["mod", "theorem", "range_comp_le_range", ["linear_map"]], ["mod", "theorem", "range_eq_top", ["linear_map"]], ["mod", "theorem", "range_id", ["linear_map"]], ["mod", "theorem", "range_le_iff_comap", ["linear_map"]], ["mod", "def", "smul_right", ["linear_map"]], ["mod", "theorem", "smul_right_apply", ["linear_map"]], ["mod", "def", "snd", ["linear_map"]], ["mod", "theorem", "snd_apply", ["linear_map"]], ["mod", "theorem", "snd_eq_copair", ["linear_map"]], ["mod", "theorem", "snd_pair", ["linear_map"]], ["mod", "theorem", "sub_mem_ker_iff", ["linear_map"]], ["mod", "theorem", "sum_apply", ["linear_map"]], ["add", "def", "sup_quotient_to_quotient_inf", ["linear_map"]], ["mod", "theorem", "zero_apply", ["linear_map"]], ["mod", "def", "comap", ["submodule"]], ["mod", "theorem", "comap_bot", ["submodule"]], ["mod", "theorem", "comap_coe", ["submodule"]], ["mod", "theorem", "comap_comp", ["submodule"]], ["mod", "theorem", "comap_fst", ["submodule"]], ["mod", "theorem", "comap_liftq", ["submodule"]], ["mod", "theorem", "comap_mono", ["submodule"]], ["mod", "theorem", "comap_snd", ["submodule"]], ["mod", "theorem", "comap_top", ["submodule"]], ["mod", "theorem", "ker_inl", ["submodule"]], ["mod", "theorem", "ker_inr", ["submodule"]], ["mod", "theorem", "ker_liftq", ["submodule"]], ["mod", "theorem", "ker_liftq_eq_bot", ["submodule"]], ["mod", "theorem", "le_comap_map", ["submodule"]], ["mod", "def", "liftq", ["submodule"]], ["mod", "theorem", "liftq_apply", ["submodule"]], ["mod", "theorem", "liftq_mkq", ["submodule"]], ["mod", "def", "map", ["submodule"]], ["mod", "theorem", "map_bot", ["submodule"]], ["mod", "theorem", "map_coe", ["submodule"]], ["mod", "theorem", "map_comap_le", ["submodule"]], ["mod", "theorem", "map_comp", ["submodule"]], ["mod", "theorem", "map_inf_eq_map_inf_comap", ["submodule"]], ["mod", "theorem", "map_inl", ["submodule"]], ["mod", "theorem", "map_inr", ["submodule"]], ["mod", "theorem", "map_le_iff_le_comap", ["submodule"]], ["add", "theorem", "map_liftq", ["submodule"]], ["mod", "theorem", "map_mono", ["submodule"]], ["mod", "theorem", "map_top", ["submodule"]], ["mod", "def", "mapq", ["submodule"]], ["mod", "theorem", "mapq_apply", ["submodule"]], ["mod", "theorem", "mapq_mkq", ["submodule"]], ["mod", "theorem", "mem_comap", ["submodule"]], ["mod", "theorem", "mem_map", ["submodule"]], ["mod", "theorem", "mem_map_of_mem", ["submodule"]], ["mod", "theorem", "mem_span", ["submodule"]], ["mod", "theorem", "mem_span_insert'", ["submodule"]], ["mod", "theorem", "mem_span_insert", ["submodule"]], ["mod", "theorem", "mem_span_singleton", ["submodule"]], ["mod", "def", "mkq", ["submodule"]], ["mod", "def", "of_le", ["submodule"]], ["mod", "theorem", "prod_comap_inl", ["submodule"]], ["mod", "theorem", "prod_comap_inr", ["submodule"]], ["mod", "theorem", "prod_map_fst", ["submodule"]], ["mod", "theorem", "prod_map_snd", ["submodule"]], ["mod", "theorem", "range_fst", ["submodule"]], ["add", "theorem", "range_liftq", ["submodule"]], ["mod", "theorem", "range_snd", ["submodule"]], ["mod", "theorem", "span_Union", ["submodule"]], ["mod", "theorem", "span_empty", ["submodule"]], ["mod", "theorem", "span_eq", ["submodule"]], ["mod", "theorem", "span_eq_bot", ["submodule"]], ["mod", "theorem", "span_eq_of_le", ["submodule"]], ["mod", "theorem", "span_image", ["submodule"]], ["mod", "theorem", "span_induction", ["submodule"]], ["mod", "theorem", "span_insert_eq_span", ["submodule"]], ["mod", "theorem", "span_le", ["submodule"]], ["mod", "theorem", "span_mono", ["submodule"]], ["mod", "theorem", "span_singleton_eq_bot", ["submodule"]], ["mod", "theorem", "span_singleton_eq_range", ["submodule"]], ["mod", "theorem", "span_span", ["submodule"]], ["mod", "theorem", "span_union", ["submodule"]], ["mod", "theorem", "subset_span", ["submodule"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["mod", "theorem", "constr_add", []], ["mod", "theorem", "constr_basis", []], ["mod", "theorem", "constr_congr", []], ["mod", "theorem", "constr_eq", []], ["mod", "theorem", "constr_neg", []], ["mod", "theorem", "constr_range", []], ["mod", "theorem", "constr_self", []], ["mod", "theorem", "constr_sub", []], ["mod", "theorem", "constr_zero", []], ["mod", "theorem", "exists_is_basis", []], ["mod", "theorem", "exists_left_inverse_linear_map_of_injective", []], ["mod", "theorem", "exists_linear_independent", []], ["mod", "theorem", "exists_right_inverse_linear_map_of_surjective", []], ["mod", "theorem", "exists_subset_is_basis", []], ["mod", "theorem", "ext", ["is_basis"]], ["mod", "theorem", "mem_span", ["is_basis"]], ["mod", "theorem", "repr_range", ["is_basis"]], ["mod", "theorem", "repr_supported", ["is_basis"]], ["mod", "theorem", "total_comp_repr", ["is_basis"]], ["mod", "theorem", "total_repr", ["is_basis"]], ["mod", "def", "is_basis", []], ["mod", "theorem", "is_basis_empty", []], ["mod", "theorem", "is_basis_empty_bot", []], ["mod", "theorem", "is_basis_injective", []], ["mod", "theorem", "is_basis_span", []], ["mod", "theorem", "is_basis", ["linear_equiv"]], ["mod", "theorem", "disjoint_ker", ["linear_independent"]], ["mod", "theorem", "image", ["linear_independent"]], ["mod", "theorem", "inj_span_iff_inj", ["linear_independent"]], ["mod", "theorem", "insert", ["linear_independent"]], ["mod", "theorem", "mono", ["linear_independent"]], ["mod", "theorem", "of_image", ["linear_independent"]], ["mod", "def", "repr", ["linear_independent"]], ["mod", "theorem", "repr_eq", ["linear_independent"]], ["mod", "theorem", "repr_range", ["linear_independent"]], ["mod", "theorem", "repr_supported", ["linear_independent"]], ["mod", "theorem", "total_comp_repr", ["linear_independent"]], ["mod", "def", "total_equiv", ["linear_independent"]], ["mod", "theorem", "total_repr", ["linear_independent"]], ["mod", "theorem", "unique", ["linear_independent"]], ["mod", "theorem", "linear_independent_empty", []], ["mod", "theorem", "linear_independent_iff", []], ["mod", "theorem", "linear_independent_iff_not_mem_span", []], ["mod", "theorem", "linear_independent_iff_total_on", []], ["mod", "theorem", "linear_independent_singleton", []], ["mod", "theorem", "mem_span_insert_exchange", []], ["mod", "def", "module_equiv_lc", []], ["mod", "theorem", "zero_not_mem_of_linear_independent", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["mod", "theorem", "dim_eq_injective", []], ["mod", "theorem", "dim_eq_surjective", []], ["mod", "theorem", "dim_le_injective", []], ["mod", "theorem", "dim_le_surjective", []], ["mod", "theorem", "dim_range_add_dim_ker", []], ["mod", "theorem", "dim_range_le", []], ["mod", "theorem", "dim_range_of_surjective", []], ["mod", "theorem", "dim_span", []], ["mod", "theorem", "le_span", ["is_basis"]], ["mod", "theorem", "mk_eq_dim", ["is_basis"]], ["mod", "theorem", "dim_eq", ["linear_equiv"]], ["mod", "theorem", "mk_eq_mk_of_basis", []], ["mod", "def", "rank", []], ["mod", "theorem", "rank_add_le", []], ["mod", "theorem", "rank_comp_le1", []], ["mod", "theorem", "rank_comp_le2", []], ["mod", "theorem", "rank_le_domain", []], ["mod", "theorem", "rank_le_range", []]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["mod", "def", "lmk", ["direct_sum"]], ["mod", "def", "lof", ["direct_sum"]], ["mod", "theorem", "mk_smul", ["direct_sum"]], ["mod", "theorem", "of_smul", ["direct_sum"]], ["mod", "theorem", "ext", ["direct_sum", "to_module"]], ["mod", "theorem", "unique", ["direct_sum", "to_module"]], ["mod", "def", "to_module", ["direct_sum"]], ["mod", "theorem", "to_module_lof", ["direct_sum"]]]}, {"oldPath": "src/linear_algebra/linear_combination.lean", "newPath": "src/linear_algebra/linear_combination.lean", "changes": [["mod", "theorem", "map_id", ["lc"]], ["mod", "theorem", "map_total", ["lc"]], ["mod", "theorem", "range_restrict_dom", ["lc"]], ["mod", "def", "restrict_dom", ["lc"]], ["mod", "theorem", "supported_empty", ["lc"]], ["mod", "theorem", "supported_univ", ["lc"]], ["mod", "def", "total_on", ["lc"]], ["mod", "theorem", "total_on_range", ["lc"]], ["mod", "theorem", "total_range", ["lc"]], ["mod", "theorem", "linear_eq_on", []], ["mod", "theorem", "mem_span_iff_lc", []], ["mod", "theorem", "span_eq_map_lc", []]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "def", "compl₂", ["linear_map"]], ["mod", "theorem", "compl₂_apply", ["linear_map"]], ["mod", "theorem", "compr₂_apply", ["linear_map"]], ["mod", "theorem", "ext₂", ["linear_map"]], ["mod", "theorem", "flip_inj", ["linear_map"]], ["mod", "def", "lcomp", ["linear_map"]], ["mod", "theorem", "lcomp_apply", ["linear_map"]], ["mod", "def", "lflip", ["linear_map"]], ["mod", "def", "llcomp", ["linear_map"]], ["mod", "theorem", "llcomp_apply", ["linear_map"]], ["mod", "theorem", "map_smul₂", ["linear_map"]], ["mod", "theorem", "add_tmul", ["tensor_product"]], ["mod", "def", "congr", ["tensor_product"]], ["mod", "def", "curry", ["tensor_product"]], ["mod", "theorem", "curry_apply", ["tensor_product"]], ["mod", "def", "direct_sum", ["tensor_product"]], ["mod", "theorem", "ext", ["tensor_product"]], ["mod", "def", "lcurry", ["tensor_product"]], ["mod", "theorem", "lcurry_apply", ["tensor_product"]], ["mod", "theorem", "unique", ["tensor_product", "lift"]], ["mod", "theorem", "smul", ["tensor_product", "lift_aux"]], ["mod", "def", "lift_aux", ["tensor_product"]], ["mod", "def", "map", ["tensor_product"]], ["mod", "theorem", "map_tmul", ["tensor_product"]], ["mod", "theorem", "neg_tmul", ["tensor_product"]], ["mod", "def", "aux", ["tensor_product", "smul"]], ["mod", "theorem", "smul_tmul", ["tensor_product"]], ["mod", "def", "tmul", ["tensor_product"]], ["mod", "theorem", "tmul_add", ["tensor_product"]], ["mod", "theorem", "tmul_neg", ["tensor_product"]], ["mod", "theorem", "tmul_smul", ["tensor_product"]], ["mod", "theorem", "tmul_zero", ["tensor_product"]], ["mod", "def", "uncurry", ["tensor_product"]], ["mod", "theorem", "uncurry_apply", ["tensor_product"]], ["mod", "theorem", "zero_tmul", ["tensor_product"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": []}, {"oldPath": "src/ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": [["mod", "theorem", "bot_smul", ["submodule"]], ["mod", "theorem", "span_smul_span", ["submodule"]], ["mod", "theorem", "top_smul", ["submodule"]]]}, {"oldPath": "src/ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": [["mod", "def", "span", ["ideal"]]]}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": [["mod", "theorem", "is_noetherian_of_linear_equiv", []], ["mod", "theorem", "is_noetherian_of_surjective", []], ["mod", "def", "fg", ["submodule"]]]}, {"oldPath": "src/ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1548705167, "sha": "fd3e5a12", "message": "fix(topology/instances/ennreal): fix merge", "changes": [{"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1548704047, "sha": "e62c534c", "message": "add ennreal.to_real", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "of_real_add", ["ennreal"]], ["add", "theorem", "of_real_eq_zero", ["ennreal"]], ["add", "theorem", "of_real_le_of_real", ["ennreal"]], ["add", "theorem", "of_real_le_of_real_iff", ["ennreal"]], ["add", "theorem", "of_real_lt_of_real_iff", ["ennreal"]], ["add", "theorem", "of_real_ne_top", ["ennreal"]], ["add", "theorem", "of_real_one", ["ennreal"]], ["add", "theorem", "of_real_pos", ["ennreal"]], ["add", "theorem", "of_real_to_real", ["ennreal"]], ["add", "theorem", "of_real_zero", ["ennreal"]], ["add", "theorem", "to_real_add", ["ennreal"]], ["add", "theorem", "to_real_eq_zero_iff", ["ennreal"]], ["add", "theorem", "to_real_le_to_real", ["ennreal"]], ["add", "theorem", "to_real_lt_to_real", ["ennreal"]], ["add", "theorem", "to_real_nonneg", ["ennreal"]], ["add", "theorem", "to_real_of_real", ["ennreal"]], ["add", "theorem", "top_ne_of_real", ["ennreal"]], ["add", "theorem", "top_to_real", ["ennreal"]], ["add", "theorem", "zero_to_real", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "of_real_one", ["nnreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "continuous_of_real", ["ennreal"]], ["add", "theorem", "tendsto_of_real", ["ennreal"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "dist_edist", []], ["del", "theorem", "dist_eq_edist", []], ["del", "theorem", "dist_eq_nndist", []], ["add", "theorem", "dist_nndist", []], ["mod", "theorem", "edist_dist", []], ["del", "theorem", "edist_eq_dist", []], ["del", "theorem", "edist_eq_nndist", []], ["add", "theorem", "edist_nndist", []], ["add", "def", "to_metric_space", ["emetric_space"]], ["add", "theorem", "emetric_ball", ["metric"]], ["add", "theorem", "emetric_closed_ball", ["metric"]], ["add", "theorem", "nndist_dist", []], ["add", "theorem", "nndist_edist", []], ["del", "theorem", "nndist_eq_dist", []], ["del", "theorem", "nndist_eq_edist", []], ["add", "theorem", "dist_eq", ["sum"]]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "ball_eq_empty_iff", ["emetric"]], ["add", "theorem", "mem_closed_ball_self", ["emetric"]]]}]}, {"timestamp": 1548695685, "sha": "8572c6b0", "message": "feat(topology): prove continuity of nndist and edist; `ball a r` is a metric space", "changes": [{"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["add", "theorem", "continuous_nnnorm", []], ["add", "theorem", "continuous_smul", []]]}, {"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "infi_ennreal", ["ennreal"]], ["add", "theorem", "mul_lt_top", ["ennreal"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["add", "theorem", "continuous_edist", ["emetric"]], ["add", "theorem", "edist_ne_top_of_mem_ball", ["emetric"]], ["add", "def", "metric_space_emetric_ball", ["emetric"]], ["add", "theorem", "nhds_eq_nhds_emetric_ball", ["emetric"]], ["add", "theorem", "infi_real_pos_eq_infi_nnreal_pos", []]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "continuous_nndist'", []], ["add", "theorem", "tendsto_nndist'", []], ["add", "theorem", "uniform_continuous_nndist'", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "uniformity_edist_nnreal", []]]}]}, {"timestamp": 1548670491, "sha": "afa31bed", "message": "refactor(linear_algebra/direct_sum_module): move to algebra/direct_sum", "changes": [{"oldPath": null, "newPath": "src/algebra/direct_sum.lean", "changes": [["add", "def", "mk", ["direct_sum"]], ["add", "theorem", "mk_add", ["direct_sum"]], ["add", "theorem", "mk_inj", ["direct_sum"]], ["add", "theorem", "mk_neg", ["direct_sum"]], ["add", "theorem", "mk_sub", ["direct_sum"]], ["add", "theorem", "mk_zero", ["direct_sum"]], ["add", "def", "of", ["direct_sum"]], ["add", "theorem", "of_add", ["direct_sum"]], ["add", "theorem", "of_inj", ["direct_sum"]], ["add", "theorem", "of_neg", ["direct_sum"]], ["add", "theorem", "of_sub", ["direct_sum"]], ["add", "theorem", "of_zero", ["direct_sum"]], ["add", "def", "set_to_set", ["direct_sum"]], ["add", "theorem", "unique", ["direct_sum", "to_group"]], ["add", "def", "to_group", ["direct_sum"]], ["add", "theorem", "to_group_add", ["direct_sum"]], ["add", "theorem", "to_group_neg", ["direct_sum"]], ["add", "theorem", "to_group_of", ["direct_sum"]], ["add", "theorem", "to_group_sub", ["direct_sum"]], ["add", "theorem", "to_group_zero", ["direct_sum"]], ["add", "def", "direct_sum", []]]}, {"oldPath": "src/linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": [["add", "def", "lmk", ["direct_sum"]], ["add", "def", "lof", ["direct_sum"]], ["add", "def", "lset_to_set", ["direct_sum"]], ["del", "def", "mk", ["direct_sum"]], ["del", "theorem", "mk_inj", ["direct_sum"]], ["add", "theorem", "mk_smul", ["direct_sum"]], ["del", "def", "of", ["direct_sum"]], ["del", "theorem", "of_inj", ["direct_sum"]], ["add", "theorem", "of_smul", ["direct_sum"]], ["del", "def", "set_to_set", ["direct_sum"]], ["mod", "theorem", "ext", ["direct_sum", "to_module"]], ["del", "theorem", "of", ["direct_sum", "to_module"]], ["mod", "theorem", "unique", ["direct_sum", "to_module"]], ["mod", "def", "to_module", ["direct_sum"]], ["del", "theorem", "to_module_apply", ["direct_sum"]], ["del", "theorem", "add", ["direct_sum", "to_module_aux"]], ["del", "theorem", "smul", ["direct_sum", "to_module_aux"]], ["del", "def", "to_module_aux", ["direct_sum"]], ["add", "theorem", "to_module_lof", ["direct_sum"]], ["del", "def", "direct_sum", []]]}, {"oldPath": "src/linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": [["mod", "def", "direct_sum", ["tensor_product"]]]}]}, {"timestamp": 1548662537, "sha": "7199bb36", "message": "chore(linear_algebra/dimension): simplify dim_add_le_dim_add_dim", "changes": [{"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "add_apply", ["measure_theory", "simple_func"]]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}]}, {"timestamp": 1548629442, "sha": "038e0b27", "message": "feat(ring_theory/algebra): remove out_param", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "def", "comap", ["alg_hom"]], ["mod", "theorem", "commutes", ["alg_hom"]], ["mod", "def", "comp", ["alg_hom"]], ["mod", "theorem", "comp_apply", ["alg_hom"]], ["mod", "theorem", "comp_assoc", ["alg_hom"]], ["mod", "theorem", "comp_id", ["alg_hom"]], ["mod", "theorem", "ext", ["alg_hom"]], ["mod", "theorem", "id_apply", ["alg_hom"]], ["mod", "theorem", "id_comp", ["alg_hom"]], ["mod", "theorem", "to_linear_map_inj", ["alg_hom"]], ["add", "def", "of_comap", ["algebra", "comap"]], ["add", "def", "to_comap", ["algebra", "comap"]], ["mod", "theorem", "lmul_apply", ["algebra"]], ["mod", "theorem", "lmul_left_apply", ["algebra"]], ["mod", "theorem", "lmul_right_apply", ["algebra"]], ["mod", "theorem", "map_add", ["algebra"]], ["mod", "theorem", "map_mul", ["algebra"]], ["mod", "theorem", "map_neg", ["algebra"]], ["mod", "theorem", "map_one", ["algebra"]], ["mod", "theorem", "map_sub", ["algebra"]], ["mod", "theorem", "map_zero", ["algebra"]], ["mod", "theorem", "mem_bot", ["algebra"]], ["mod", "theorem", "of_id_apply", ["algebra"]], ["del", "def", "of_subring", ["algebra"]], ["mod", "def", "to_comap", ["algebra"]], ["mod", "theorem", "to_comap_apply", ["algebra"]], ["mod", "def", "to_top", ["algebra"]], ["mod", "def", "algebra_map", []], ["mod", "def", "aeval", ["mv_polynomial"]], ["mod", "theorem", "eval_unique", ["mv_polynomial"]], ["mod", "def", "aeval", ["polynomial"]], ["mod", "theorem", "eval_unique", ["polynomial"]], ["mod", "def", "val", ["subalgebra"]]]}]}, {"timestamp": 1548629442, "sha": "af7a7ee3", "message": "feat(ring_theory/algebra): remove of_core", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["del", "structure", "core", ["algebra"]], ["add", "theorem", "mul_smul_comm", ["algebra"]], ["del", "def", "of_core", ["algebra"]], ["add", "def", "of_ring_hom", ["algebra"]], ["mod", "def", "of_subring", ["algebra"]], ["del", "theorem", "smul_mul", ["algebra"]], ["add", "theorem", "smul_mul_assoc", ["algebra"]], ["mod", "def", "to_ℤ_algebra", ["ring"]]]}]}, {"timestamp": 1548629442, "sha": "79ba61cc", "message": "feat(ring_theory/algebra): make algebra a class", "changes": [{"oldPath": "src/ring_theory/algebra.lean", "newPath": "src/ring_theory/algebra.lean", "changes": [["mod", "def", "comap", ["alg_hom"]], ["mod", "theorem", "commutes", ["alg_hom"]], ["mod", "def", "comp", ["alg_hom"]], ["mod", "theorem", "comp_apply", ["alg_hom"]], ["mod", "theorem", "comp_assoc", ["alg_hom"]], ["mod", "theorem", "comp_id", ["alg_hom"]], ["mod", "theorem", "ext", ["alg_hom"]], ["mod", "theorem", "id_apply", ["alg_hom"]], ["mod", "theorem", "id_comp", ["alg_hom"]], ["mod", "def", "to_linear_map", ["alg_hom"]], ["mod", "theorem", "to_linear_map_inj", ["alg_hom"]], ["mod", "structure", "alg_hom", []], ["mod", "def", "adjoin", ["algebra"]], ["mod", "def", "comap", ["algebra"]], ["mod", "theorem", "commutes", ["algebra"]], ["mod", "theorem", "left_comm", ["algebra"]], ["mod", "def", "lmul", ["algebra"]], ["mod", "theorem", "lmul_apply", ["algebra"]], ["mod", "def", "lmul_left", ["algebra"]], ["mod", "theorem", "lmul_left_apply", ["algebra"]], ["mod", "def", "lmul_right", ["algebra"]], ["mod", "theorem", "lmul_right_apply", ["algebra"]], ["mod", "theorem", "map_add", ["algebra"]], ["mod", "theorem", "map_mul", ["algebra"]], ["mod", "theorem", "map_neg", ["algebra"]], ["mod", "theorem", "map_one", ["algebra"]], ["mod", "theorem", "map_sub", ["algebra"]], ["mod", "theorem", "map_zero", ["algebra"]], ["mod", "theorem", "mem_bot", ["algebra"]], ["mod", "theorem", "mem_top", ["algebra"]], ["del", "def", "mv_polynomial", ["algebra"]], ["mod", "def", "of_id", ["algebra"]], ["mod", "theorem", "of_id_apply", ["algebra"]], ["del", "def", "polynomial", ["algebra"]], ["del", "def", "right", ["algebra"]], ["mod", "theorem", "smul_def", ["algebra"]], ["mod", "theorem", "smul_mul", ["algebra"]], ["mod", "def", "to_comap", ["algebra"]], ["mod", "theorem", "to_comap_apply", ["algebra"]], ["mod", "def", "to_top", ["algebra"]], ["del", "structure", "algebra", []], ["add", "def", "algebra_map", []], ["mod", "def", "aeval", ["mv_polynomial"]], ["mod", "theorem", "aeval_def", ["mv_polynomial"]], ["mod", "theorem", "eval_unique", ["mv_polynomial"]], ["mod", "def", "aeval", ["polynomial"]], ["mod", "theorem", "aeval_def", ["polynomial"]], ["mod", "theorem", "eval_unique", ["polynomial"]], ["mod", "theorem", "ext", ["subalgebra"]], ["mod", "theorem", "mem_coe", ["subalgebra"]], ["mod", "def", "to_submodule", ["subalgebra"]], ["mod", "def", "val", ["subalgebra"]], ["mod", "structure", "subalgebra", []]]}]}, {"timestamp": 1548629442, "sha": "a0b6cae4", "message": "feat(ring_theory/algebra): define algebra over a commutative ring", "changes": [{"oldPath": null, "newPath": "src/ring_theory/algebra.lean", "changes": [["add", "def", "comap", ["alg_hom"]], ["add", "theorem", "commutes", ["alg_hom"]], ["add", "def", "comp", ["alg_hom"]], ["add", "theorem", "comp_apply", ["alg_hom"]], ["add", "theorem", "comp_assoc", ["alg_hom"]], ["add", "theorem", "comp_id", ["alg_hom"]], ["add", "theorem", "ext", ["alg_hom"]], ["add", "theorem", "id_apply", ["alg_hom"]], ["add", "theorem", "id_comp", ["alg_hom"]], ["add", "theorem", "map_add", ["alg_hom"]], ["add", "theorem", "map_mul", ["alg_hom"]], ["add", "theorem", "map_neg", ["alg_hom"]], ["add", "theorem", "map_one", ["alg_hom"]], ["add", "theorem", "map_sub", ["alg_hom"]], ["add", "theorem", "map_zero", ["alg_hom"]], ["add", "def", "to_linear_map", ["alg_hom"]], ["add", "theorem", "to_linear_map_apply", ["alg_hom"]], ["add", "theorem", "to_linear_map_inj", ["alg_hom"]], ["add", "structure", "alg_hom", []], ["add", "def", "adjoin", ["algebra"]], ["add", "def", "comap", ["algebra"]], ["add", "theorem", "commutes", ["algebra"]], ["add", "structure", "core", ["algebra"]], ["add", "theorem", "left_comm", ["algebra"]], ["add", "def", "lmul", ["algebra"]], ["add", "theorem", "lmul_apply", ["algebra"]], ["add", "def", "lmul_left", ["algebra"]], ["add", "theorem", "lmul_left_apply", ["algebra"]], ["add", "def", "lmul_right", ["algebra"]], ["add", "theorem", "lmul_right_apply", ["algebra"]], ["add", "theorem", "map_add", ["algebra"]], ["add", "theorem", "map_mul", ["algebra"]], ["add", "theorem", "map_neg", ["algebra"]], ["add", "theorem", "map_one", ["algebra"]], ["add", "theorem", "map_sub", ["algebra"]], ["add", "theorem", "map_zero", ["algebra"]], ["add", "theorem", "mem_bot", ["algebra"]], ["add", "theorem", "mem_top", ["algebra"]], ["add", "def", "mv_polynomial", ["algebra"]], ["add", "def", "of_core", ["algebra"]], ["add", "def", "of_id", ["algebra"]], ["add", "theorem", "of_id_apply", ["algebra"]], ["add", "def", "of_subring", ["algebra"]], ["add", "def", "polynomial", ["algebra"]], ["add", "def", "right", ["algebra"]], ["add", "theorem", "smul_def", ["algebra"]], ["add", "theorem", "smul_mul", ["algebra"]], ["add", "def", "to_comap", ["algebra"]], ["add", "theorem", "to_comap_apply", ["algebra"]], ["add", "def", "to_top", ["algebra"]], ["add", "structure", "algebra", []], ["add", "def", "to_ℤ_alg_hom", ["is_ring_hom"]], ["add", "def", "aeval", ["mv_polynomial"]], ["add", "theorem", "aeval_def", ["mv_polynomial"]], ["add", "theorem", "eval_unique", ["mv_polynomial"]], ["add", "def", "aeval", ["polynomial"]], ["add", "theorem", "aeval_def", ["polynomial"]], ["add", "theorem", "eval_unique", ["polynomial"]], ["add", "def", "to_ℤ_algebra", ["ring"]], ["add", "def", "comap", ["subalgebra"]], ["add", "theorem", "ext", ["subalgebra"]], ["add", "theorem", "mem_coe", ["subalgebra"]], ["add", "def", "to_submodule", ["subalgebra"]], ["add", "def", "under", ["subalgebra"]], ["add", "def", "val", ["subalgebra"]], ["add", "structure", "subalgebra", []]]}]}, {"timestamp": 1548629090, "sha": "1d2eda7b", "message": "feat(category_theory/isomorphism): as_iso\nAlso clean up some proofs.", "changes": [{"oldPath": "src/category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": [["add", "def", "as_iso", ["category_theory"]], ["add", "theorem", "as_iso_hom", ["category_theory"]], ["add", "theorem", "as_iso_inv", ["category_theory"]], ["mod", "def", "on_iso", ["category_theory", "functor"]], ["mod", "theorem", "ext", ["category_theory", "iso"]]]}]}, {"timestamp": 1548629025, "sha": "ccd895f8", "message": "feat(category_theory/types): conversions between iso and equiv", "changes": [{"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["add", "def", "to_equiv", ["category_theory", "iso"]], ["add", "theorem", "to_equiv_fun", ["category_theory", "iso"]], ["add", "theorem", "to_equiv_symm_fun", ["category_theory", "iso"]], ["add", "def", "to_iso", ["equiv"]], ["add", "theorem", "to_iso_hom", ["equiv"]], ["add", "theorem", "to_iso_inv", ["equiv"]]]}]}, {"timestamp": 1548628973, "sha": "d074b51b", "message": "refactor(category_theory/concrete_category): move `bundled` to own file", "changes": [{"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["del", "structure", "bundled", ["category_theory"]], ["del", "theorem", "bundled_hom_coe", ["category_theory"]], ["del", "structure", "concrete_category", ["category_theory"]], ["del", "theorem", "concrete_category_comp", ["category_theory"]], ["del", "theorem", "concrete_category_id", ["category_theory"]], ["del", "def", "mk_ob", ["category_theory"]]]}, {"oldPath": null, "newPath": "src/category_theory/concrete_category.lean", "changes": [["add", "theorem", "bundled_hom_coe", ["category_theory", "bundled"]], ["add", "theorem", "concrete_category_comp", ["category_theory", "bundled"]], ["add", "theorem", "concrete_category_id", ["category_theory", "bundled"]], ["add", "def", "map", ["category_theory", "bundled"]], ["add", "structure", "bundled", ["category_theory"]], ["add", "structure", "concrete_category", ["category_theory"]], ["add", "def", "concrete_functor", ["category_theory"]], ["add", "def", "forget", ["category_theory"]], ["add", "def", "mk_ob", ["category_theory"]]]}, {"oldPath": "src/category_theory/examples/measurable_space.lean", "newPath": "src/category_theory/examples/measurable_space.lean", "changes": []}, {"oldPath": "src/category_theory/examples/monoids.lean", "newPath": "src/category_theory/examples/monoids.lean", "changes": []}, {"oldPath": "src/category_theory/examples/rings.lean", "newPath": "src/category_theory/examples/rings.lean", "changes": []}, {"oldPath": "src/category_theory/examples/topological_spaces.lean", "newPath": "src/category_theory/examples/topological_spaces.lean", "changes": []}, {"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": [["del", "def", "map", ["category_theory", "bundled"]], ["del", "def", "concrete_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["del", "def", "forget", ["category_theory"]]]}]}, {"timestamp": 1548628837, "sha": "50398e50", "message": "feat(category_theory/full_subcategory): induced categories", "changes": [{"oldPath": "src/category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": [["add", "theorem", "map", ["category_theory", "full_subcategory_inclusion"]], ["add", "theorem", "obj", ["category_theory", "full_subcategory_inclusion"]], ["mod", "def", "full_subcategory_inclusion", ["category_theory"]], ["add", "def", "induced_category", ["category_theory"]], ["add", "theorem", "hom", ["category_theory", "induced_functor"]], ["add", "theorem", "obj", ["category_theory", "induced_functor"]], ["add", "def", "induced_functor", ["category_theory"]]]}]}, {"timestamp": 1548628666, "sha": "19c2f68c", "message": "feat(analysis/exponential): complex powers", "changes": [{"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": [["add", "theorem", "exp_eq_exp_iff_exists_int", ["complex"]], ["add", "theorem", "exp_eq_exp_iff_exp_sub_eq_one", ["complex"]], ["add", "theorem", "exp_eq_one_iff", ["complex"]], ["add", "theorem", "pow_add", ["complex"]], ["add", "theorem", "pow_def", ["complex"]], ["add", "theorem", "pow_int_cast", ["complex"]], ["add", "theorem", "pow_mul", ["complex"]], ["add", "theorem", "pow_nat_cast", ["complex"]], ["add", "theorem", "log_mul", ["real"]]]}]}, {"timestamp": 1548628390, "sha": "c0577580", "message": "feat(data/complex/exponential): exp_eq_one_iff", "changes": [{"oldPath": "src/data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": [["add", "theorem", "exp_eq_one_iff", ["real"]]]}]}, {"timestamp": 1548628361, "sha": "db691737", "message": "refactor(algebra/field_power): notation for fpow", "changes": [{"oldPath": "src/algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": [["mod", "theorem", "fpow_add", []], ["mod", "theorem", "fpow_eq_gpow", []], ["mod", "theorem", "fpow_ge_one_of_nonneg", []], ["mod", "theorem", "fpow_inv", []], ["mod", "theorem", "fpow_le_of_le", []], ["mod", "theorem", "fpow_le_one_of_nonpos", []], ["mod", "theorem", "fpow_ne_zero_of_ne_zero", []], ["mod", "theorem", "fpow_neg", []], ["add", "theorem", "fpow_neg_succ_of_nat", []], ["mod", "theorem", "fpow_nonneg_of_nonneg", []], ["add", "theorem", "fpow_of_nat", []], ["mod", "theorem", "fpow_pos_of_pos", []], ["mod", "theorem", "fpow_sub", []], ["mod", "theorem", "fpow_zero", []], ["mod", "theorem", "zero_fpow", []]]}, {"oldPath": "src/data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["mod", "theorem", "le_of_dvd", ["padic_norm"]]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}]}, {"timestamp": 1548628304, "sha": "d359aa89", "message": "feat(order/conditionally_complete_lattice): cinfi_const (#634)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "range_const", ["set"]]]}, {"oldPath": "src/order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cinfi_const", ["lattice"]], ["mod", "theorem", "cinfi_le", ["lattice"]], ["add", "theorem", "csupr_const", ["lattice"]], ["mod", "theorem", "le_csupr", ["lattice"]]]}]}, {"timestamp": 1548628258, "sha": "06eba7f8", "message": "update authors on expr.lean (I don't know who's responsible for what)", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}]}, {"timestamp": 1548628258, "sha": "be5dba97", "message": "fix(tactic/norm_num): only check core norm_num output up to numeral structure", "changes": [{"oldPath": "src/meta/expr.lean", "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1548628258, "sha": "daa7684d", "message": "refactor(tactic/basic): move non-tactic decls to meta folder", "changes": [{"oldPath": null, "newPath": "src/meta/expr.lean", "changes": []}, {"oldPath": "src/meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1548628126, "sha": "6781ff0f", "message": "feat(tactic/linarith): prefer type of goal if there are multiple types", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1548628126, "sha": "8affebda", "message": "fix(tactic/linarith): remove unused code", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}]}, {"timestamp": 1548628126, "sha": "92508dcc", "message": "fix(tactic/linarith): properly handle problems with inequalities in multiple types\nWhen problems have inequalities over multiple types, it's almost safe to process everything at once, since none of the\nvariables overlap. But linarith deals with constants by homogenizing them and the \"constant\" variables do overlap.\nThis fix creates one call to linarith for each type that appears in a hypothesis.", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1548549353, "sha": "84d1c450", "message": "feat(tactic/match-stub): use Lean holes to create a pattern matching skeleton (#630)\n* feat(tactic/match-stub): use Lean holes to create a pattern matching skeleton\n* feat(tactic/match-stub): add hole for listing relevant constructors", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1548438612, "sha": "315a6427", "message": "feat(measure_theory): add Hahn decomposition", "changes": [{"oldPath": "src/data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": [["add", "theorem", "to_nnreal_add", ["ennreal"]]]}, {"oldPath": "src/data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": [["add", "theorem", "coe_nonneg", ["nnreal"]]]}, {"oldPath": null, "newPath": "src/measure_theory/decomposition.lean", "changes": [["add", "theorem", "hahn_decomposition", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "measure_eq_inter_diff", ["measure_theory"]], ["add", "theorem", "tendsto_measure_Inter", ["measure_theory"]], ["add", "theorem", "tendsto_measure_Union", ["measure_theory"]], ["add", "theorem", "tendsto_at_top_infi_nat", []], ["add", "theorem", "tendsto_at_top_supr_nat", []]]}]}, {"timestamp": 1548345762, "sha": "ed2ab1a3", "message": "feat(measure_theory): measures form a complete lattice", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "empty_diff", ["set"]]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "Inf_apply", ["measure_theory", "measure"]], ["add", "theorem", "Inf_caratheodory", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "Inf_eq_of_function_Inf_gen", ["measure_theory", "outer_measure"]], ["add", "def", "Inf_gen", ["measure_theory", "outer_measure"]], ["add", "theorem", "Inf_gen_empty", ["measure_theory", "outer_measure"]], ["add", "theorem", "Inf_gen_nonempty1", ["measure_theory", "outer_measure"]], ["add", "theorem", "Inf_gen_nonempty2", ["measure_theory", "outer_measure"]], ["add", "theorem", "top_caratheodory", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1548321512, "sha": "4aacae31", "message": "feat(data/equiv/algebra): instances for transporting algebra across an equiv (#618)", "changes": [{"oldPath": "src/data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": [["add", "theorem", "add_def", ["equiv"]], ["add", "theorem", "inv_def", ["equiv"]], ["add", "theorem", "mul_def", ["equiv"]], ["add", "theorem", "neg_def", ["equiv"]], ["add", "theorem", "one_def", ["equiv"]], ["add", "theorem", "zero_def", ["equiv"]]]}]}, {"timestamp": 1548321457, "sha": "c49e89df", "message": "feat(category_theory/adjunction): definitions, basic proofs, and examples (#619)", "changes": [{"oldPath": null, "newPath": "src/category_theory/adjunction.lean", "changes": [["add", "def", "adjunction_of_equiv_left", ["category_theory", "adjunction"]], ["add", "def", "adjunction_of_equiv_right", ["category_theory", "adjunction"]], ["add", "def", "cocones_iso", ["category_theory", "adjunction"]], ["add", "def", "comp", ["category_theory", "adjunction"]], ["add", "def", "cones_iso", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_naturality_left", ["category_theory", "adjunction", "core_hom_equiv"]], ["add", "theorem", "hom_equiv_naturality_right_symm", ["category_theory", "adjunction", "core_hom_equiv"]], ["add", "structure", "core_hom_equiv", ["category_theory", "adjunction"]], ["add", "structure", "core_unit_counit", ["category_theory", "adjunction"]], ["add", "def", "functoriality_is_left_adjoint", ["category_theory", "adjunction"]], ["add", "def", "functoriality_is_right_adjoint", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_naturality_left", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_naturality_left_symm", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_naturality_right", ["category_theory", "adjunction"]], ["add", "theorem", "hom_equiv_naturality_right_symm", ["category_theory", "adjunction"]], ["add", "def", "id", ["category_theory", "adjunction"]], ["add", "structure", "is_left_adjoint", ["category_theory", "adjunction"]], ["add", "structure", "is_right_adjoint", ["category_theory", "adjunction"]], ["add", "def", "left_adjoint_of_equiv", ["category_theory", "adjunction"]], ["add", "def", "left_adjoint_preserves_colimits", ["category_theory", "adjunction"]], ["add", "theorem", "left_triangle", ["category_theory", "adjunction"]], ["add", "theorem", "left_triangle_components", ["category_theory", "adjunction"]], ["add", "def", "mk_of_hom_equiv", ["category_theory", "adjunction"]], ["add", "def", "mk_of_unit_counit", ["category_theory", "adjunction"]], ["add", "def", "right_adjoint_of_equiv", ["category_theory", "adjunction"]], ["add", "def", "right_adjoint_preserves_limits", ["category_theory", "adjunction"]], ["add", "theorem", "right_triangle", ["category_theory", "adjunction"]], ["add", "theorem", "right_triangle_components", ["category_theory", "adjunction"]], ["add", "structure", "adjunction", ["category_theory"]]]}, {"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": [["mod", "theorem", "bundled_hom_coe", ["category_theory"]], ["mod", "theorem", "concrete_category_comp", ["category_theory"]], ["mod", "theorem", "concrete_category_id", ["category_theory"]]]}, {"oldPath": "src/category_theory/examples/monoids.lean", "newPath": "src/category_theory/examples/monoids.lean", "changes": []}, {"oldPath": "src/category_theory/examples/rings.lean", "newPath": "src/category_theory/examples/rings.lean", "changes": [["add", "def", "cast", ["category_theory", "examples", "CommRing", "Int"]], ["add", "def", "hom_unique", ["category_theory", "examples", "CommRing", "Int"]], ["add", "def", "Int", ["category_theory", "examples", "CommRing"]], ["add", "theorem", "comp_val", ["category_theory", "examples", "CommRing"]], ["add", "def", "forget", ["category_theory", "examples", "CommRing"]], ["mod", "def", "forget_to_CommMon", ["category_theory", "examples", "CommRing"]], ["add", "theorem", "hom_coe_app", ["category_theory", "examples", "CommRing"]], ["add", "theorem", "id_val", ["category_theory", "examples", "CommRing"]], ["add", "def", "eq_cast'", ["category_theory", "examples", "CommRing", "int"]], ["add", "theorem", "polynomial_map_val", ["category_theory", "examples", "CommRing"]], ["add", "theorem", "polynomial_obj_α", ["category_theory", "examples", "CommRing"]], ["add", "def", "to_Ring", ["category_theory", "examples", "CommRing"]], ["del", "theorem", "CommRing_hom_coe_app", ["category_theory", "examples"]]]}, {"oldPath": "src/category_theory/examples/topological_spaces.lean", "newPath": "src/category_theory/examples/topological_spaces.lean", "changes": [["add", "def", "adj₁", ["category_theory", "examples", "Top"]], ["add", "def", "adj₂", ["category_theory", "examples", "Top"]], ["add", "def", "discrete", ["category_theory", "examples", "Top"]], ["add", "def", "trivial", ["category_theory", "examples", "Top"]]]}, {"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["add", "theorem", "cocones_map_app", ["category_theory", "functor"]], ["add", "theorem", "cones_map_app", ["category_theory", "functor"]], ["del", "def", "precompose", ["category_theory", "limits", "cocone"]], ["add", "def", "precompose", ["category_theory", "limits", "cocones"]], ["add", "theorem", "precompose_map_hom", ["category_theory", "limits", "cocones"]], ["add", "theorem", "precompose_obj_X", ["category_theory", "limits", "cocones"]], ["add", "theorem", "precompose_obj_ι", ["category_theory", "limits", "cocones"]], ["del", "def", "postcompose", ["category_theory", "limits", "cone"]], ["add", "def", "postcompose", ["category_theory", "limits", "cones"]], ["add", "theorem", "postcompose_map_hom", ["category_theory", "limits", "cones"]], ["add", "theorem", "postcompose_obj_X", ["category_theory", "limits", "cones"]], ["add", "theorem", "postcompose_obj_π", ["category_theory", "limits", "cones"]]]}, {"oldPath": "src/category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": [["add", "def", "is_colimit_iso_unique_cocone_morphism", ["category_theory", "limits"]], ["add", "def", "is_limit_iso_unique_cone_morphism", ["category_theory", "limits"]]]}, {"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["mod", "def", "unique_of_equiv", ["equiv"]]]}]}, {"timestamp": 1548261339, "sha": "0e6c3589", "message": "feat(set_theory/cardinal): more lemmas on cardinality (#595)", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "def", "image_factorization", ["set"]], ["add", "theorem", "image_factorization_eq", ["set"]], ["add", "def", "range_factorization", ["set"]], ["add", "theorem", "range_factorization_eq", ["set"]], ["add", "theorem", "surjective_onto_image", ["set"]], ["add", "theorem", "surjective_onto_range", ["set"]]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_image_le", ["cardinal"]], ["add", "theorem", "mk_le_of_injective", ["cardinal"]], ["add", "theorem", "mk_le_of_surjective", ["cardinal"]], ["add", "theorem", "mk_quot_le", ["cardinal"]], ["add", "theorem", "mk_quotient_le", ["cardinal"]], ["add", "theorem", "mk_range_le", ["cardinal"]], ["add", "theorem", "mk_subtype_le", ["cardinal"]], ["add", "theorem", "mk_univ", ["cardinal"]]]}]}, {"timestamp": 1548253468, "sha": "9be8905e", "message": "refactor(topology/sequences): restructure proofs", "changes": [{"oldPath": "src/topology/sequences.lean", "newPath": "src/topology/sequences.lean", "changes": [["add", "theorem", "to_sequentially_continuous", ["continuous"]], ["add", "theorem", "continuous_iff_sequentially_continuous", []], ["add", "def", "is_seq_closed", []], ["add", "theorem", "is_seq_closed_iff_is_closed", []], ["add", "theorem", "is_seq_closed_of_def", []], ["add", "theorem", "is_seq_closed_of_is_closed", []], ["add", "theorem", "mem_of_is_closed_sequential", []], ["add", "theorem", "mem_of_is_seq_closed", []], ["del", "theorem", "const_seq_conv", ["sequence"]], ["del", "theorem", "cont_iff_seq_cont", ["sequence"]], ["del", "theorem", "cont_to_seq_cont", ["sequence"]], ["del", "theorem", "is_mem_of_conv_to_of_is_seq_closed", ["sequence"]], ["del", "theorem", "is_mem_of_is_closed_of_conv_to", ["sequence"]], ["del", "def", "is_seq_closed", ["sequence"]], ["del", "theorem", "is_seq_closed_iff_is_closed", ["sequence"]], ["del", "theorem", "is_seq_closed_of_def", ["sequence"]], ["del", "theorem", "is_seq_closed_of_is_closed", ["sequence"]], ["del", "theorem", "seq_tendsto_iff", ["sequence", "metric_space"]], ["del", "def", "sequential_closure", ["sequence"]], ["del", "theorem", "sequential_closure_subset_closure", ["sequence"]], ["del", "def", "sequentially_continuous", ["sequence"]], ["del", "theorem", "subset_seq_closure", ["sequence"]], ["del", "theorem", "seq_tendsto_iff", ["sequence", "topological_space"]], ["add", "def", "sequential_closure", []], ["add", "theorem", "sequential_closure_subset_closure", []], ["add", "def", "sequentially_continuous", []], ["add", "theorem", "subset_sequential_closure", []], ["add", "theorem", "seq_tendsto_iff", ["topological_space"]]]}]}, {"timestamp": 1548253452, "sha": "4018daff", "message": "feat(topology): sequences, sequential spaces, and sequential continuity (closes #440)\nCo-Authored-By: Reid Barton ", "changes": [{"oldPath": null, "newPath": "src/topology/sequences.lean", "changes": [["add", "theorem", "const_seq_conv", ["sequence"]], ["add", "theorem", "cont_iff_seq_cont", ["sequence"]], ["add", "theorem", "cont_to_seq_cont", ["sequence"]], ["add", "theorem", "is_mem_of_conv_to_of_is_seq_closed", ["sequence"]], ["add", "theorem", "is_mem_of_is_closed_of_conv_to", ["sequence"]], ["add", "def", "is_seq_closed", ["sequence"]], ["add", "theorem", "is_seq_closed_iff_is_closed", ["sequence"]], ["add", "theorem", "is_seq_closed_of_def", ["sequence"]], ["add", "theorem", "is_seq_closed_of_is_closed", ["sequence"]], ["add", "theorem", "seq_tendsto_iff", ["sequence", "metric_space"]], ["add", "def", "sequential_closure", ["sequence"]], ["add", "theorem", "sequential_closure_subset_closure", ["sequence"]], ["add", "def", "sequentially_continuous", ["sequence"]], ["add", "theorem", "subset_seq_closure", ["sequence"]], ["add", "theorem", "seq_tendsto_iff", ["sequence", "topological_space"]]]}]}, {"timestamp": 1548249871, "sha": "c06fb67c", "message": "refactor(category_theory/category): split off has_hom\nThis gives a little more flexibility when defining a category,\nwhich will be used for opposite categories. It should also be\nuseful for defining the free category on a graph.", "changes": [{"oldPath": "src/category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["mod", "theorem", "hom_obj", ["category_theory", "functor"]]]}]}, {"timestamp": 1548247960, "sha": "2c95d2a1", "message": "maintain(vscode): add ruler at 100 in editor", "changes": [{"oldPath": ".vscode/settings.json", "newPath": ".vscode/settings.json", "changes": []}]}, {"timestamp": 1548247960, "sha": "b2700dd3", "message": "maintain(.vscode): add default settings", "changes": [{"oldPath": null, "newPath": ".vscode/settings.json", "changes": []}]}, {"timestamp": 1548247523, "sha": "6da9b21f", "message": "le_induction", "changes": [{"oldPath": "src/data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": [["add", "theorem", "le_induction", ["nat"]]]}]}, {"timestamp": 1548247123, "sha": "60efaec1", "message": "chore(topology): move contraction_mapping to metric_space/lipschitz", "changes": [{"oldPath": "src/contraction_mapping.lean", "newPath": "src/topology/metric_space/lipschitz.lean", "changes": []}]}, {"timestamp": 1548244116, "sha": "5317b593", "message": "refactor(contraction_mapping): add more proves about Lipschitz continuous functions; cleanup proofs", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["del", "def", "prod_semilattice_sup", ["prod"]]]}, {"oldPath": "src/analysis/normed_space/basic.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": [["del", "theorem", "squeeze_zero", []]]}, {"oldPath": "src/contraction_mapping.lean", "newPath": "src/contraction_mapping.lean", "changes": [["del", "theorem", "continuous_prod_snd", []], ["del", "theorem", "dist_bound_of_contraction", []], ["del", "theorem", "dist_inequality_of_contraction", []], ["del", "theorem", "fixed_point_exists_of_contraction", []], ["del", "theorem", "fixed_point_of_iteration_limit", []], ["add", "theorem", "fixed_point_of_tendsto_iterate", []], ["del", "theorem", "fixed_point_unique_of_contraction", []], ["del", "theorem", "iterated_lipschitz_of_lipschitz", []], ["del", "def", "lipschitz", []], ["add", "theorem", "dist_bound_of_contraction", ["lipschitz_with"]], ["add", "theorem", "dist_inequality_of_contraction", ["lipschitz_with"]], ["add", "theorem", "exists_fixed_point_of_contraction", ["lipschitz_with"]], ["add", "theorem", "fixed_point_unique_of_contraction", ["lipschitz_with"]], ["add", "def", "lipschitz_with", []], ["del", "theorem", "tendsto_dist_bound_at_top_nhds_0", []], ["del", "theorem", "uniform_continuous_of_lipschitz", []]]}, {"oldPath": "src/order/filter.lean", "newPath": "src/order/filter.lean", "changes": []}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "dist_prod_eq_dist_0", []], ["add", "theorem", "uniformity_eq_comap_nhds_zero", ["metric"]], ["add", "theorem", "squeeze_zero", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}]}, {"timestamp": 1548244100, "sha": "96198b98", "message": "feat(contraction_mapping): proof the Banach fixed-point theorem (closes #553)", "changes": [{"oldPath": "src/algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": [["add", "def", "prod_semilattice_sup", ["prod"]]]}, {"oldPath": null, "newPath": "src/contraction_mapping.lean", "changes": [["add", "theorem", "continuous_prod_snd", []], ["add", "theorem", "dist_bound_of_contraction", []], ["add", "theorem", "dist_inequality_of_contraction", []], ["add", "theorem", "fixed_point_exists_of_contraction", []], ["add", "theorem", "fixed_point_of_iteration_limit", []], ["add", "theorem", "fixed_point_unique_of_contraction", []], ["add", "theorem", "iterated_lipschitz_of_lipschitz", []], ["add", "def", "lipschitz", []], ["add", "theorem", "tendsto_dist_bound_at_top_nhds_0", []], ["add", "theorem", "uniform_continuous_of_lipschitz", []]]}, {"oldPath": "src/data/prod.lean", "newPath": "src/data/prod.lean", "changes": [["add", "theorem", "map_def", ["prod"]]]}, {"oldPath": "src/order/filter.lean", "newPath": "src/order/filter.lean", "changes": [["add", "theorem", "prod_at_top_at_top_eq", ["filter"]], ["add", "theorem", "prod_map_at_top_eq", ["filter"]]]}, {"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["add", "theorem", "cauchy_seq_iff_tendsto_dist_at_top_0", []], ["add", "theorem", "dist_prod_eq_dist_0", []]]}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": [["add", "theorem", "cauchy_seq_iff_prod_map", []]]}]}, {"timestamp": 1548243803, "sha": "8a0fd0b0", "message": "feat(order): add order instances for prod", "changes": [{"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "src/order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "src/order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}]}, {"timestamp": 1548230944, "sha": "2ae2cf04", "message": "feat(linear_algebra/multivariate_polynomial): C_mul'", "changes": [{"oldPath": "src/linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": [["add", "theorem", "C_mul'", ["mv_polynomial"]]]}]}, {"timestamp": 1548177803, "sha": "8d44feeb", "message": "style(category_theory): adjust precedence of ⥤ (#616)", "changes": [{"oldPath": "src/category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/products.lean", "newPath": "src/category_theory/products.lean", "changes": [["mod", "def", "evaluation_uncurried", ["category_theory"]], ["mod", "def", "prod", ["category_theory", "functor"]], ["mod", "def", "fst", ["category_theory", "prod"]], ["mod", "def", "inl", ["category_theory", "prod"]], ["mod", "def", "inr", ["category_theory", "prod"]], ["mod", "def", "snd", ["category_theory", "prod"]], ["mod", "def", "swap", ["category_theory", "prod"]], ["mod", "def", "symmetry", ["category_theory", "prod"]]]}, {"oldPath": "src/category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": [["mod", "def", "ulift_functor", ["category_theory"]]]}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": [["mod", "def", "yoneda_evaluation", ["category_theory"]], ["mod", "def", "yoneda_pairing", ["category_theory"]]]}]}, {"timestamp": 1548177715, "sha": "c9a0b337", "message": "refactor(category_theory/fully_faithful): move preimage_id (#615)", "changes": [{"oldPath": "src/category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": [["add", "theorem", "preimage_id", ["category_theory"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": [["del", "theorem", "preimage_id", ["category_theory", "functor"]]]}]}, {"timestamp": 1548175764, "sha": "edfa2061", "message": "feat(linear_algebra/dimension): more dimension theorems; rank of a linear map", "changes": [{"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "image_preimage_eq_of_subset", ["set"]]]}, {"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": [["add", "theorem", "is_basis_empty", []], ["add", "theorem", "is_basis_empty_bot", []], ["add", "theorem", "is_basis_injective", []], ["add", "theorem", "is_basis_span", []]]}, {"oldPath": "src/linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_add_le_dim_add_dim", []], ["add", "theorem", "dim_bot", []], ["add", "theorem", "dim_eq_injective", []], ["add", "theorem", "dim_eq_surjective", []], ["add", "theorem", "dim_le_injective", []], ["add", "theorem", "dim_le_of_submodule", []], ["add", "theorem", "dim_le_surjective", []], ["add", "theorem", "dim_map_le", []], ["add", "theorem", "dim_range_le", []], ["add", "theorem", "dim_range_of_surjective", []], ["add", "theorem", "dim_span", []], ["add", "theorem", "dim_submodule_le", []], ["add", "def", "rank", []], ["add", "theorem", "rank_add_le", []], ["add", "theorem", "rank_comp_le1", []], ["add", "theorem", "rank_comp_le2", []], ["add", "theorem", "rank_le_domain", []], ["add", "theorem", "rank_le_range", []]]}, {"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": [["add", "theorem", "mk_le_mk_of_subset", ["cardinal"]]]}]}, {"timestamp": 1548172930, "sha": "6e4c9ba8", "message": "feat(linear_algebra/linear_combination): lc lifts vector spaces", "changes": [{"oldPath": "src/linear_algebra/linear_combination.lean", "newPath": "src/linear_algebra/linear_combination.lean", "changes": []}]}, {"timestamp": 1548172818, "sha": "d5a302ff", "message": "chore(linear_algebra): rename file lc to linear_combination", "changes": [{"oldPath": "src/linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "src/linear_algebra/lc.lean", "newPath": "src/linear_algebra/linear_combination.lean", "changes": []}, {"oldPath": "src/ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}]}, {"timestamp": 1548171169, "sha": "7baf093a", "message": "feat(data/list,data/multiset,data/finset): add Ico intervals (closes #496)", "changes": [{"oldPath": "src/data/finset.lean", "newPath": "src/data/finset.lean", "changes": [["add", "theorem", "card", ["finset", "Ico"]], ["add", "theorem", "diff_left", ["finset", "Ico"]], ["add", "theorem", "diff_right", ["finset", "Ico"]], ["add", "theorem", "eq_cons", ["finset", "Ico"]], ["add", "theorem", "eq_empty_iff", ["finset", "Ico"]], ["add", "theorem", "eq_empty_of_le", ["finset", "Ico"]], ["add", "theorem", "filter_ge", ["finset", "Ico"]], ["add", "theorem", "filter_ge_of_ge", ["finset", "Ico"]], ["add", "theorem", "filter_ge_of_le_bot", ["finset", "Ico"]], ["add", "theorem", "filter_ge_of_top_le", ["finset", "Ico"]], ["add", "theorem", "filter_lt", ["finset", "Ico"]], ["add", "theorem", "filter_lt_of_ge", ["finset", "Ico"]], ["add", "theorem", "filter_lt_of_le_bot", ["finset", "Ico"]], ["add", "theorem", "filter_lt_of_top_le", ["finset", "Ico"]], ["add", "theorem", "map_add", ["finset", "Ico"]], ["add", "theorem", "mem", ["finset", "Ico"]], ["add", "theorem", "not_mem_top", ["finset", "Ico"]], ["add", "theorem", "pred_singleton", ["finset", "Ico"]], ["add", "theorem", "self_eq_empty", ["finset", "Ico"]], ["add", "theorem", "succ_singleton", ["finset", "Ico"]], ["add", "theorem", "succ_top", ["finset", "Ico"]], ["add", "theorem", "to_finset", ["finset", "Ico"]], ["add", "theorem", "union_consecutive", ["finset", "Ico"]], ["add", "theorem", "val", ["finset", "Ico"]], ["add", "theorem", "zero_bot", ["finset", "Ico"]], ["add", "def", "Ico", ["finset"]]]}, {"oldPath": "src/data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": [["add", "theorem", "append_consecutive", ["list", "Ico"]], ["add", "theorem", "chain'_succ", ["list", "Ico"]], ["add", "theorem", "eq_cons", ["list", "Ico"]], ["add", "theorem", "eq_empty_iff", ["list", "Ico"]], ["add", "theorem", "eq_nil_of_le", ["list", "Ico"]], ["add", "theorem", "filter_ge", ["list", "Ico"]], ["add", "theorem", "filter_ge_of_ge", ["list", "Ico"]], ["add", "theorem", "filter_ge_of_le_bot", ["list", "Ico"]], ["add", "theorem", "filter_ge_of_top_le", ["list", "Ico"]], ["add", "theorem", "filter_lt", ["list", "Ico"]], ["add", "theorem", "filter_lt_of_ge", ["list", "Ico"]], ["add", "theorem", "filter_lt_of_le_bot", ["list", "Ico"]], ["add", "theorem", "filter_lt_of_top_le", ["list", "Ico"]], ["add", "theorem", "length", ["list", "Ico"]], ["add", "theorem", "map_add", ["list", "Ico"]], ["add", "theorem", "mem", ["list", "Ico"]], ["add", "theorem", "nodup", ["list", "Ico"]], ["add", "theorem", "not_mem_top", ["list", "Ico"]], ["add", "theorem", "pairwise_lt", ["list", "Ico"]], ["add", "theorem", "pred_singleton", ["list", "Ico"]], ["add", "theorem", "self_empty", ["list", "Ico"]], ["add", "theorem", "succ_singleton", ["list", "Ico"]], ["add", "theorem", "succ_top", ["list", "Ico"]], ["add", "theorem", "zero_bot", ["list", "Ico"]], ["add", "def", "Ico", ["list"]], ["mod", "theorem", "range'_append", ["list"]]]}, {"oldPath": "src/data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": [["add", "theorem", "add_consecutive", ["multiset", "Ico"]], ["add", "theorem", "card", ["multiset", "Ico"]], ["add", "theorem", "eq_cons", ["multiset", "Ico"]], ["add", "theorem", "eq_zero_iff", ["multiset", "Ico"]], ["add", "theorem", "eq_zero_of_le", ["multiset", "Ico"]], ["add", "theorem", "filter_ge", ["multiset", "Ico"]], ["add", "theorem", "filter_ge_of_ge", ["multiset", "Ico"]], ["add", "theorem", "filter_ge_of_le_bot", ["multiset", "Ico"]], ["add", "theorem", "filter_ge_of_top_le", ["multiset", "Ico"]], ["add", "theorem", "filter_lt", ["multiset", "Ico"]], ["add", "theorem", "filter_lt_of_ge", ["multiset", "Ico"]], ["add", "theorem", "filter_lt_of_le_bot", ["multiset", "Ico"]], ["add", "theorem", "filter_lt_of_top_le", ["multiset", "Ico"]], ["add", "theorem", "map_add", ["multiset", "Ico"]], ["add", "theorem", "mem", ["multiset", "Ico"]], ["add", "theorem", "nodup", ["multiset", "Ico"]], ["add", "theorem", "not_mem_top", ["multiset", "Ico"]], ["add", "theorem", "pred_singleton", ["multiset", "Ico"]], ["add", "theorem", "self_eq_zero", ["multiset", "Ico"]], ["add", "theorem", "succ_singleton", ["multiset", "Ico"]], ["add", "theorem", "succ_top", ["multiset", "Ico"]], ["add", "theorem", "zero_bot", ["multiset", "Ico"]], ["add", "def", "Ico", ["multiset"]], ["add", "theorem", "coe_eq_zero", ["multiset"]]]}]}, {"timestamp": 1548100921, "sha": "3dc9935a", "message": "fix(tactic/instance_stub): extend the applicability of instance_stub (#612)", "changes": [{"oldPath": "src/tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}]}, {"timestamp": 1548069170, "sha": "bc163a6e", "message": "fix(.travis.yml): produce mathlib.txt only from src/", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1548024648, "sha": "c1e594bc", "message": "feat(meta, logic, tactic): lean 3.4.2: migrate coinductive_predicates, transfer, relator (#610)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "src/data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "src/logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": [["add", "def", "bi_total", ["relator"]], ["add", "def", "left_total", ["relator"]], ["add", "def", "left_unique", ["relator"]], ["add", "theorem", "left_unique_of_rel_eq", ["relator"]], ["add", "def", "lift_fun", ["relator"]], ["add", "theorem", "rel_exists_of_left_total", ["relator"]], ["add", "theorem", "rel_exists_of_total", ["relator"]], ["add", "theorem", "rel_forall_of_right_total", ["relator"]], ["add", "theorem", "rel_forall_of_total", ["relator"]], ["add", "theorem", "rel_imp", ["relator"]], ["add", "theorem", "rel_not", ["relator"]], ["add", "def", "right_total", ["relator"]], ["add", "def", "right_unique", ["relator"]]]}, {"oldPath": null, "newPath": "src/meta/coinductive_predicates.lean", "changes": [["add", "theorem", "and", ["monotonicity"]], ["add", "theorem", "const", ["monotonicity"]], ["add", "theorem", "exists", ["monotonicity"]], ["add", "theorem", "false", ["monotonicity"]], ["add", "theorem", "imp", ["monotonicity"]], ["add", "theorem", "not", ["monotonicity"]], ["add", "theorem", "or", ["monotonicity"]], ["add", "theorem", "pi", ["monotonicity"]], ["add", "theorem", "true", ["monotonicity"]], ["add", "def", "last_string", ["name"]]]}, {"oldPath": "src/tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "src/tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "src/tactic/mk_iff_of_inductive_prop.lean", "newPath": "src/tactic/mk_iff_of_inductive_prop.lean", "changes": []}, {"oldPath": null, "newPath": "src/tactic/transfer.lean", "changes": []}, {"oldPath": null, "newPath": "tests/coinductive.lean", "changes": [["add", "inductive", "all_list", []], ["add", "theorem", "all_list", ["monotonicity"]]]}]}, {"timestamp": 1548016935, "sha": "2c5bc214", "message": "feat(topology/emetric_space): basic facts for emetric spaces (#608)", "changes": [{"oldPath": "src/topology/metric_space/basic.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": [["del", "theorem", "countable_closure_of_compact", []], ["del", "theorem", "second_countable_of_separable_metric_space", []]]}, {"oldPath": "src/topology/metric_space/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": [["add", "theorem", "edist_triangle4", []], ["add", "def", "ball", ["emetric"]], ["add", "theorem", "ball_disjoint", ["emetric"]], ["add", "theorem", "ball_mem_nhds", ["emetric"]], ["add", "theorem", "ball_subset", ["emetric"]], ["add", "theorem", "ball_subset_ball", ["emetric"]], ["add", "theorem", "ball_subset_closed_ball", ["emetric"]], ["del", "theorem", "cauchy_iff", ["emetric"]], ["add", "theorem", "cauchy_seq_iff'", ["emetric"]], ["add", "theorem", "cauchy_seq_iff", ["emetric"]], ["add", "def", "closed_ball", ["emetric"]], ["add", "theorem", "closed_ball_subset_closed_ball", ["emetric"]], ["add", "theorem", "countable_closure_of_compact", ["emetric"]], ["add", "theorem", "exists_ball_subset_ball", ["emetric"]], ["add", "theorem", "is_open_ball", ["emetric"]], ["add", "theorem", "is_open_iff", ["emetric"]], ["add", "theorem", "mem_ball'", ["emetric"]], ["add", "theorem", "mem_ball", ["emetric"]], ["add", "theorem", "mem_ball_comm", ["emetric"]], ["add", "theorem", "mem_ball_self", ["emetric"]], ["add", "theorem", "mem_closed_ball", ["emetric"]], ["add", "theorem", "mem_closure_iff'", ["emetric"]], ["add", "theorem", "mem_nhds_iff", ["emetric"]], ["add", "theorem", "nhds_eq", ["emetric"]], ["add", "theorem", "pos_of_mem_ball", ["emetric"]], ["add", "theorem", "second_countable_of_separable", ["emetric"]], ["add", "theorem", "tendsto_at_top", ["emetric"]], ["add", "theorem", "tendsto_nhds", ["emetric"]], ["add", "theorem", "totally_bounded_iff'", ["emetric"]], ["add", "theorem", "totally_bounded_iff", ["emetric"]]]}]}, {"timestamp": 1547923404, "sha": "fa2e3991", "message": "feat(topology/bounded_continuous_function): constructor in normed groups (#607)", "changes": [{"oldPath": "src/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": [["add", "def", "of_normed_group", ["bounded_continuous_function"]], ["add", "def", "of_normed_group_discrete", ["bounded_continuous_function"]]]}]}, {"timestamp": 1547841009, "sha": "3fcba7d0", "message": "feat(logic/basic): add class 'unique' for uniquely inhabited types (#605)", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": [["add", "def", "unique_congr", ["equiv"]], ["add", "def", "unique_of_equiv", ["equiv"]], ["add", "def", "equiv_of_unique_of_unique", []], ["add", "def", "equiv_punit_of_unique", []], ["add", "def", "unique_unique_equiv", []]]}, {"oldPath": null, "newPath": "src/logic/unique.lean", "changes": [["add", "theorem", "default_eq", ["unique"]], ["add", "theorem", "eq_default", ["unique"]], ["add", "def", "of_surjective", ["unique"]], ["add", "structure", "unique", []]]}]}, {"timestamp": 1547829023, "sha": "41b3fdd6", "message": "feat(topology/real): bounded iff bounded below above (#606)", "changes": [{"oldPath": "src/topology/instances/real.lean", "newPath": "src/topology/instances/real.lean", "changes": [["add", "theorem", "bounded_iff_bdd_below_bdd_above", ["real"]]]}]}, {"timestamp": 1547825800, "sha": "eb1253fe", "message": "feat(measure_theory): add Giry monad", "changes": [{"oldPath": null, "newPath": "src/measure_theory/giry_monad.lean", "changes": [["add", "def", "bind", ["measure_theory", "measure"]], ["add", "theorem", "bind_apply", ["measure_theory", "measure"]], ["add", "theorem", "bind_bind", ["measure_theory", "measure"]], ["add", "theorem", "bind_dirac", ["measure_theory", "measure"]], ["add", "theorem", "dirac_bind", ["measure_theory", "measure"]], ["add", "theorem", "integral_bind", ["measure_theory", "measure"]], ["add", "theorem", "integral_join", ["measure_theory", "measure"]], ["add", "def", "join", ["measure_theory", "measure"]], ["add", "theorem", "join_apply", ["measure_theory", "measure"]], ["add", "theorem", "measurable_bind'", ["measure_theory", "measure"]], ["add", "theorem", "measurable_coe", ["measure_theory", "measure"]], ["add", "theorem", "measurable_dirac", ["measure_theory", "measure"]], ["add", "theorem", "measurable_integral", ["measure_theory", "measure"]], ["add", "theorem", "measurable_join", ["measure_theory", "measure"]], ["add", "theorem", "measurable_map", ["measure_theory", "measure"]], ["add", "theorem", "measurable_of_measurable_coe", ["measure_theory", "measure"]]]}, {"oldPath": "src/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": [["add", "theorem", "le_sequence_of_directed", []], ["add", "theorem", "lintegral_finset_sum", ["measure_theory"]], ["add", "theorem", "lintegral_supr_directed", ["measure_theory"]], ["add", "theorem", "lintegral_tsum", ["measure_theory"]], ["add", "def", "integral", ["measure_theory", "measure"]], ["add", "theorem", "integral_dirac", ["measure_theory", "measure"]], ["add", "theorem", "integral_map", ["measure_theory", "measure"]], ["add", "theorem", "integral_zero", ["measure_theory", "measure"]], ["add", "def", "with_density", ["measure_theory", "measure"]], ["add", "theorem", "with_density_apply", ["measure_theory", "measure"]], ["add", "theorem", "approx_comp", ["measure_theory", "simple_func"]], ["add", "theorem", "eapprox_comp", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_map", ["measure_theory", "simple_func"]], ["add", "theorem", "monotone_sequence_of_directed", []], ["del", "theorem", "supr_eq_of_tendsto", []]]}, {"oldPath": "src/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": [["add", "theorem", "of_measurable_apply", ["measure_theory", "measure"]]]}, {"oldPath": "src/order/basic.lean", "newPath": "src/order/basic.lean", "changes": [["add", "theorem", "monotone_of_monotone_nat", []]]}, {"oldPath": "src/topology/algebra/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": [["add", "theorem", "supr_eq_of_tendsto", []]]}]}, {"timestamp": 1547820604, "sha": "739d28a6", "message": "refactor(ring_theory/multiplicity): replace padic_val with multiplicity (#495)", "changes": [{"oldPath": "src/data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": [["del", "theorem", "dvd_of_padic_val_pos", ["padic_val"]], ["del", "theorem", "is_greatest", ["padic_val"]], ["del", "theorem", "le_padic_val_of_pow_dvd", ["padic_val"]], ["del", "theorem", "min_le_padic_val_add", ["padic_val"]], ["del", "theorem", "padic_val_eq_zero_of_coprime", ["padic_val"]], ["del", "theorem", "padic_val_eq_zero_of_not_dvd'", ["padic_val"]], ["del", "theorem", "padic_val_eq_zero_of_not_dvd", ["padic_val"]], ["del", "theorem", "padic_val_self", ["padic_val"]], ["del", "theorem", "pow_dvd_iff_le_padic_val", ["padic_val"]], ["del", "theorem", "pow_dvd_of_le_padic_val", ["padic_val"]], ["del", "theorem", "spec", ["padic_val"]], ["del", "theorem", "unique", ["padic_val"]], ["del", "def", "padic_val", []], ["add", "theorem", "finite_int_prime_iff", ["padic_val_rat"]], ["add", "theorem", "le_padic_val_rat_add_of_le", ["padic_val_rat"]], ["mod", "theorem", "min_le_padic_val_rat_add", ["padic_val_rat"]], ["add", "theorem", "padic_val_rat_le_padic_val_rat_iff", ["padic_val_rat"]], ["mod", "theorem", "padic_val_rat_of_int", ["padic_val_rat"]], ["mod", "theorem", "padic_val_rat_self", ["padic_val_rat"]], ["add", "theorem", "padic_val_rat_def", []]]}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": [["add", "theorem", "irr_nrt_of_n_not_dvd_multiplicity", []], ["del", "theorem", "irr_nrt_of_n_not_dvd_padic_val", []], ["add", "theorem", "irr_sqrt_of_multiplicity_odd", []], ["del", "theorem", "irr_sqrt_of_padic_val_odd", []]]}]}, {"timestamp": 1547818117, "sha": "6144710d", "message": "feat(measure_theory): add equivalence of measurable spaces", "changes": [{"oldPath": "src/data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "src/data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": [["add", "theorem", "prod_eq", ["set"]], ["add", "theorem", "range_coe_subtype", ["set"]]]}, {"oldPath": "src/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": [["add", "def", "ennreal_equiv_nnreal", ["ennreal"]], ["add", "def", "ennreal_equiv_sum", ["ennreal"]], ["add", "theorem", "measurable_coe", ["ennreal"]], ["add", "theorem", "measurable_mul", ["ennreal"]], ["add", "theorem", "measurable_of_measurable_nnreal", ["ennreal"]], ["add", "theorem", "measurable_of_measurable_nnreal_nnreal", ["ennreal"]], ["add", "def", "to_measurable_equiv", ["homemorph"]], ["mod", "def", "borel", ["measure_theory"]], ["add", "theorem", "borel_eq_subtype", ["measure_theory"]], ["add", "theorem", "borel_induced", ["measure_theory"]], ["add", "theorem", "measurable_finset_sum", ["measure_theory"]], ["mod", "theorem", "measurable_of_continuous", ["measure_theory"]]]}, {"oldPath": "src/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_inl_image", []], ["add", "theorem", "is_measurable_inr_image", []], ["add", "theorem", "is_measurable_range_inl", []], ["add", "theorem", "is_measurable_range_inr", []], ["add", "theorem", "is_measurable_subtype_image", []], ["add", "theorem", "coe_eq", ["measurable_equiv"]], ["add", "def", "prod_comm", ["measurable_equiv"]], ["add", "def", "prod_congr", ["measurable_equiv"]], ["add", "def", "prod_sum_distrib", ["measurable_equiv"]], ["add", "def", "refl", ["measurable_equiv"]], ["add", "def", "prod", ["measurable_equiv", "set"]], ["add", "def", "range_inl", ["measurable_equiv", "set"]], ["add", "def", "range_inr", ["measurable_equiv", "set"]], ["add", "def", "singleton", ["measurable_equiv", "set"]], ["add", "def", "univ", ["measurable_equiv", "set"]], ["add", "def", "sum_congr", ["measurable_equiv"]], ["add", "def", "sum_prod_distrib", ["measurable_equiv"]], ["add", "def", "sum_prod_sum", ["measurable_equiv"]], ["add", "def", "symm", ["measurable_equiv"]], ["add", "theorem", "symm_to_equiv", ["measurable_equiv"]], ["add", "def", "trans", ["measurable_equiv"]], ["add", "theorem", "trans_to_equiv", ["measurable_equiv"]], ["add", "structure", "measurable_equiv", []], ["add", "theorem", "measurable_inl", []], ["add", "theorem", "measurable_inr", []], ["add", "theorem", "measurable_of_measurable_union_cover", []], ["add", "theorem", "measurable_sum", []], ["add", "theorem", "measurable_sum_rec", []], ["add", "theorem", "measurable_unit", []]]}]}, {"timestamp": 1547817992, "sha": "b352d2cb", "message": "refactor(topology): topological_space.induced resembles set.image; second_countable_topology on subtypes; simplify filter.map_comap", "changes": [{"oldPath": "src/order/filter.lean", "newPath": "src/order/filter.lean", "changes": [["del", "theorem", "le_map_comap'", ["filter"]], ["del", "theorem", "le_map_comap", ["filter"]], ["add", "theorem", "map_comap", ["filter"]], ["del", "theorem", "tendsto_comap''", ["filter"]], ["add", "theorem", "tendsto_comap'_iff", ["filter"]]]}, {"oldPath": "src/topology/basic.lean", "newPath": "src/topology/basic.lean", "changes": [["add", "theorem", "induced_generate_from_eq", []], ["add", "theorem", "second_countable_topology_induced", ["topological_space"]]]}, {"oldPath": "src/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": [["mod", "theorem", "map_nhds_eq", ["embedding"]], ["add", "theorem", "is_open_induced_eq", []], ["mod", "theorem", "map_nhds_induced_eq", []]]}, {"oldPath": "src/topology/instances/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": [["del", "theorem", "coe_image_univ_mem_nhds", ["ennreal"]], ["add", "theorem", "coe_range_mem_nhds", ["ennreal"]]]}, {"oldPath": "src/topology/instances/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/basic.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/topology/uniform_space/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1547817603, "sha": "6b6b04ac", "message": "feat(order/complete_lattice): add rules for supr/infi under image and under propositions", "changes": [{"oldPath": "src/order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": [["add", "theorem", "infi_eq_dif", ["lattice"]], ["add", "theorem", "infi_eq_if", ["lattice"]], ["add", "theorem", "infi_image", ["lattice"]], ["add", "theorem", "supr_eq_dif", ["lattice"]], ["add", "theorem", "supr_eq_if", ["lattice"]], ["add", "theorem", "supr_image", ["lattice"]]]}]}, {"timestamp": 1547809989, "sha": "f0f06ca1", "message": "refactor(*): analysis reorganization (#598)\n* split `measure_theory` and `topology` out of analysis\n* add `instances` sub directories for theories around type class instances", "changes": [{"oldPath": "docs/theories/topological_spaces.md", "newPath": "docs/theories/topological_spaces.md", "changes": []}, {"oldPath": "src/analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": []}, {"oldPath": "src/analysis/normed_space.lean", "newPath": "src/analysis/normed_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/bounded_linear_maps.lean", "newPath": "src/analysis/normed_space/bounded_linear_maps.lean", "changes": []}, {"oldPath": "src/analysis/limits.lean", "newPath": "src/analysis/specific_limits.lean", "changes": []}, {"oldPath": "src/category_theory/examples/measurable_space.lean", "newPath": "src/category_theory/examples/measurable_space.lean", "changes": []}, {"oldPath": "src/category_theory/examples/topological_spaces.lean", "newPath": "src/category_theory/examples/topological_spaces.lean", "changes": []}, {"oldPath": "src/data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "src/data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "src/data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "src/data/real/cau_seq_filter.lean", "newPath": "src/data/real/cau_seq_filter.lean", "changes": []}, {"oldPath": "src/analysis/measure_theory/borel_space.lean", "newPath": "src/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "src/analysis/measure_theory/integration.lean", "newPath": "src/measure_theory/integration.lean", "changes": []}, {"oldPath": "src/analysis/measure_theory/lebesgue_measure.lean", "newPath": "src/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "src/analysis/measure_theory/measurable_space.lean", "newPath": "src/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "src/analysis/measure_theory/measure_space.lean", "newPath": "src/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "src/analysis/measure_theory/outer_measure.lean", "newPath": "src/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "src/analysis/probability_mass_function.lean", "newPath": "src/measure_theory/probability_mass_function.lean", "changes": []}, {"oldPath": "src/analysis/topology/topological_groups.lean", "newPath": "src/topology/algebra/group.lean", "changes": []}, {"oldPath": "src/analysis/topology/infinite_sum.lean", "newPath": "src/topology/algebra/infinite_sum.lean", "changes": []}, {"oldPath": "src/analysis/topology/quotient_topological_structures.lean", "newPath": "src/topology/algebra/quotient.lean", "changes": []}, {"oldPath": "src/analysis/topology/topological_structures.lean", "newPath": "src/topology/algebra/topological_structures.lean", "changes": []}, {"oldPath": "src/analysis/topology/topological_space.lean", "newPath": "src/topology/basic.lean", "changes": []}, {"oldPath": "src/analysis/topology/bounded_continuous_function.lean", "newPath": "src/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "src/analysis/topology/continuous_map.lean", "newPath": "src/topology/compact_open.lean", "changes": []}, {"oldPath": "src/analysis/topology/continuity.lean", "newPath": "src/topology/continuity.lean", "changes": []}, {"oldPath": "src/analysis/complex.lean", "newPath": "src/topology/instances/complex.lean", "changes": []}, {"oldPath": "src/analysis/ennreal.lean", "newPath": "src/topology/instances/ennreal.lean", "changes": []}, {"oldPath": "src/analysis/nnreal.lean", "newPath": "src/topology/instances/nnreal.lean", "changes": []}, {"oldPath": "src/analysis/polynomial.lean", "newPath": "src/topology/instances/polynomial.lean", "changes": []}, {"oldPath": "src/analysis/real.lean", "newPath": "src/topology/instances/real.lean", "changes": []}, {"oldPath": "src/analysis/metric_space.lean", "newPath": "src/topology/metric_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/emetric_space.lean", "newPath": "src/topology/metric_space/emetric_space.lean", "changes": []}, {"oldPath": "src/analysis/topology/stone_cech.lean", "newPath": "src/topology/stone_cech.lean", "changes": []}, {"oldPath": "src/analysis/topology/uniform_space.lean", "newPath": "src/topology/uniform_space/basic.lean", "changes": []}, {"oldPath": "src/analysis/topology/completion.lean", "newPath": "src/topology/uniform_space/completion.lean", "changes": []}]}, {"timestamp": 1547752893, "sha": "c1f162ca", "message": "fix(tactic/linarith): don't reject expressions with division by variables (#604)\nnorm_hyp_aux should have succeeded (without changing the type of h') in the case where lhs contains 1/x. But mk_single_comp_zero_pf is too clever when given the coeff 1. norm_hyp_aux will still do unnecessary work when it finds e.g. 1/(2*x), but shouldn't fail.", "changes": [{"oldPath": "src/tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1547735858, "sha": "ae610a04", "message": "feat(ring_theory/adjoin_root): adjoin roots to polynomials (#603)", "changes": [{"oldPath": null, "newPath": "src/ring_theory/adjoin_root.lean", "changes": [["add", "def", "adjoin_root", ["adjoin_root"]], ["add", "theorem", "coe_injective", ["adjoin_root"]], ["add", "theorem", "eval₂_root", ["adjoin_root"]], ["add", "theorem", "is_root_root", ["adjoin_root"]], ["add", "def", "lift", ["adjoin_root"]], ["add", "theorem", "lift_mk", ["adjoin_root"]], ["add", "theorem", "lift_of", ["adjoin_root"]], ["add", "theorem", "lift_root", ["adjoin_root"]], ["add", "def", "mk", ["adjoin_root"]], ["add", "theorem", "mk_self", ["adjoin_root"]], ["add", "theorem", "mul_div_root_cancel", ["adjoin_root"]], ["add", "def", "of", ["adjoin_root"]], ["add", "def", "root", ["adjoin_root"]]]}]}, {"timestamp": 1547628638, "sha": "5c37507c", "message": "doc(elan.md): fix msys2 setup (#594) [ci-skip]\nFor me, adding the suggested line to .profile did not change my path, even after restarting the terminal.\nMoreover, elan is installed in $USERPROFILE/.elan/bin, not in $HOME/.elan/bin.\nAdding $USERPROFILE/.elan/bin to the path did not work for me, so I give the full path.", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1547627599, "sha": "5dd9998f", "message": "doc(docs/tactics): document `convert` (#601) [ci-skip]", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1547626484, "sha": "ab5849ed", "message": "style(category_theory/opposites): increase binding power of ᵒᵖ (#600)", "changes": [{"oldPath": "src/category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": [["mod", "def", "cones", ["category_theory", "functor"]]]}, {"oldPath": "src/category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "src/category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1547574216, "sha": "024da409", "message": "refactor(logic/schroeder_bernstein): move to set_theory/ (#599)", "changes": [{"oldPath": "src/set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "src/logic/schroeder_bernstein.lean", "newPath": "src/set_theory/schroeder_bernstein.lean", "changes": []}]}, {"timestamp": 1547553923, "sha": "d4f80f66", "message": "refactor(*): Try again moving everything to src (#597)", "changes": [{"oldPath": "category_theory/limits/over.lean", "newPath": "src/category_theory/limits/over.lean", "changes": []}, {"oldPath": "group_theory/sylow.lean", "newPath": "src/group_theory/sylow.lean", "changes": []}, {"oldPath": "ring_theory/euclidean_domain.lean", "newPath": "src/ring_theory/euclidean_domain.lean", "changes": []}]}, {"timestamp": 1547549464, "sha": "78f19497", "message": "refactor(*): move everything into `src` (#583)", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "algebra/archimedean.lean", "newPath": "src/algebra/archimedean.lean", "changes": []}, {"oldPath": "algebra/big_operators.lean", "newPath": "src/algebra/big_operators.lean", "changes": []}, {"oldPath": "algebra/char_p.lean", "newPath": "src/algebra/char_p.lean", "changes": []}, {"oldPath": "algebra/char_zero.lean", "newPath": "src/algebra/char_zero.lean", "changes": []}, {"oldPath": "algebra/default.lean", "newPath": "src/algebra/default.lean", "changes": []}, {"oldPath": "algebra/euclidean_domain.lean", "newPath": "src/algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "algebra/field.lean", "newPath": "src/algebra/field.lean", "changes": []}, {"oldPath": "algebra/field_power.lean", "newPath": "src/algebra/field_power.lean", "changes": []}, {"oldPath": "algebra/gcd_domain.lean", "newPath": "src/algebra/gcd_domain.lean", "changes": []}, {"oldPath": "algebra/group.lean", "newPath": "src/algebra/group.lean", "changes": []}, {"oldPath": "algebra/group_power.lean", "newPath": "src/algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/module.lean", "newPath": "src/algebra/module.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "src/algebra/order.lean", "changes": []}, {"oldPath": "algebra/order_functions.lean", "newPath": "src/algebra/order_functions.lean", "changes": []}, {"oldPath": "algebra/ordered_field.lean", "newPath": "src/algebra/ordered_field.lean", "changes": []}, {"oldPath": "algebra/ordered_group.lean", "newPath": "src/algebra/ordered_group.lean", "changes": []}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "src/algebra/ordered_ring.lean", "changes": []}, {"oldPath": "algebra/pi_instances.lean", "newPath": "src/algebra/pi_instances.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "src/algebra/ring.lean", "changes": []}, {"oldPath": "analysis/bounded_linear_maps.lean", "newPath": "src/analysis/bounded_linear_maps.lean", "changes": []}, {"oldPath": "analysis/complex.lean", "newPath": "src/analysis/complex.lean", "changes": []}, {"oldPath": "analysis/emetric_space.lean", "newPath": "src/analysis/emetric_space.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "src/analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/exponential.lean", "newPath": "src/analysis/exponential.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "src/analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "src/analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/integration.lean", "newPath": "src/analysis/measure_theory/integration.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "src/analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "src/analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "src/analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "src/analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "src/analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/nnreal.lean", "newPath": "src/analysis/nnreal.lean", "changes": []}, {"oldPath": "analysis/normed_space.lean", "newPath": "src/analysis/normed_space.lean", "changes": []}, {"oldPath": "analysis/polynomial.lean", "newPath": "src/analysis/polynomial.lean", "changes": []}, {"oldPath": "analysis/probability_mass_function.lean", "newPath": "src/analysis/probability_mass_function.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "src/analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/bounded_continuous_function.lean", "newPath": "src/analysis/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "analysis/topology/completion.lean", "newPath": "src/analysis/topology/completion.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "src/analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/continuous_map.lean", "newPath": "src/analysis/topology/continuous_map.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "src/analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/quotient_topological_structures.lean", "newPath": "src/analysis/topology/quotient_topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/stone_cech.lean", "newPath": "src/analysis/topology/stone_cech.lean", "changes": []}, {"oldPath": "analysis/topology/topological_groups.lean", "newPath": "src/analysis/topology/topological_groups.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "src/analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "src/analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "src/analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "category/applicative.lean", "newPath": "src/category/applicative.lean", "changes": []}, {"oldPath": "category/basic.lean", "newPath": "src/category/basic.lean", "changes": []}, {"oldPath": "category/bifunctor.lean", "newPath": "src/category/bifunctor.lean", "changes": []}, {"oldPath": "category/bitraversable/basic.lean", "newPath": "src/category/bitraversable/basic.lean", "changes": []}, {"oldPath": "category/bitraversable/instances.lean", "newPath": "src/category/bitraversable/instances.lean", "changes": []}, {"oldPath": "category/bitraversable/lemmas.lean", "newPath": "src/category/bitraversable/lemmas.lean", "changes": []}, {"oldPath": "category/functor.lean", "newPath": "src/category/functor.lean", "changes": []}, {"oldPath": "category/traversable/basic.lean", "newPath": "src/category/traversable/basic.lean", "changes": []}, {"oldPath": "category/traversable/default.lean", "newPath": "src/category/traversable/default.lean", "changes": []}, {"oldPath": "category/traversable/derive.lean", "newPath": "src/category/traversable/derive.lean", "changes": []}, {"oldPath": "category/traversable/equiv.lean", "newPath": "src/category/traversable/equiv.lean", "changes": []}, {"oldPath": "category/traversable/instances.lean", "newPath": "src/category/traversable/instances.lean", "changes": []}, {"oldPath": "category/traversable/lemmas.lean", "newPath": "src/category/traversable/lemmas.lean", "changes": []}, {"oldPath": "category_theory/category.lean", "newPath": "src/category_theory/category.lean", "changes": []}, {"oldPath": "category_theory/comma.lean", "newPath": "src/category_theory/comma.lean", "changes": []}, {"oldPath": "category_theory/const.lean", "newPath": "src/category_theory/const.lean", "changes": []}, {"oldPath": "category_theory/discrete_category.lean", "newPath": "src/category_theory/discrete_category.lean", "changes": []}, {"oldPath": "category_theory/eq_to_hom.lean", "newPath": "src/category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "category_theory/equivalence.lean", "newPath": "src/category_theory/equivalence.lean", "changes": []}, {"oldPath": "category_theory/examples/measurable_space.lean", "newPath": "src/category_theory/examples/measurable_space.lean", "changes": []}, {"oldPath": "category_theory/examples/monoids.lean", "newPath": "src/category_theory/examples/monoids.lean", "changes": []}, {"oldPath": "category_theory/examples/rings.lean", "newPath": "src/category_theory/examples/rings.lean", "changes": []}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "src/category_theory/examples/topological_spaces.lean", "changes": []}, {"oldPath": "category_theory/full_subcategory.lean", "newPath": "src/category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "category_theory/fully_faithful.lean", "newPath": "src/category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "category_theory/functor.lean", "newPath": "src/category_theory/functor.lean", "changes": []}, {"oldPath": "category_theory/functor_category.lean", "newPath": "src/category_theory/functor_category.lean", "changes": []}, {"oldPath": "category_theory/groupoid.lean", "newPath": "src/category_theory/groupoid.lean", "changes": []}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "src/category_theory/isomorphism.lean", "changes": []}, {"oldPath": "category_theory/limits/cones.lean", "newPath": "src/category_theory/limits/cones.lean", "changes": []}, {"oldPath": "category_theory/limits/functor_category.lean", "newPath": "src/category_theory/limits/functor_category.lean", "changes": []}, {"oldPath": "category_theory/limits/limits.lean", "newPath": "src/category_theory/limits/limits.lean", "changes": []}, {"oldPath": "category_theory/limits/preserves.lean", "newPath": "src/category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "category_theory/limits/types.lean", "newPath": "src/category_theory/limits/types.lean", "changes": []}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "src/category_theory/natural_isomorphism.lean", "changes": []}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "src/category_theory/natural_transformation.lean", "changes": []}, {"oldPath": "category_theory/opposites.lean", "newPath": "src/category_theory/opposites.lean", "changes": []}, {"oldPath": "category_theory/pempty.lean", "newPath": "src/category_theory/pempty.lean", "changes": []}, {"oldPath": "category_theory/products.lean", "newPath": "src/category_theory/products.lean", "changes": []}, {"oldPath": "category_theory/punit.lean", "newPath": "src/category_theory/punit.lean", "changes": []}, {"oldPath": "category_theory/types.lean", "newPath": "src/category_theory/types.lean", "changes": []}, {"oldPath": "category_theory/whiskering.lean", "newPath": "src/category_theory/whiskering.lean", "changes": []}, {"oldPath": "category_theory/yoneda.lean", "newPath": "src/category_theory/yoneda.lean", "changes": []}, {"oldPath": "computability/halting.lean", "newPath": "src/computability/halting.lean", "changes": []}, {"oldPath": "computability/partrec.lean", "newPath": "src/computability/partrec.lean", "changes": []}, {"oldPath": "computability/partrec_code.lean", "newPath": "src/computability/partrec_code.lean", "changes": []}, {"oldPath": "computability/primrec.lean", "newPath": "src/computability/primrec.lean", "changes": []}, {"oldPath": "computability/turing_machine.lean", "newPath": "src/computability/turing_machine.lean", "changes": []}, {"oldPath": "data/analysis/filter.lean", "newPath": "src/data/analysis/filter.lean", "changes": []}, {"oldPath": "data/analysis/topology.lean", "newPath": "src/data/analysis/topology.lean", "changes": []}, {"oldPath": "data/array/lemmas.lean", "newPath": "src/data/array/lemmas.lean", "changes": []}, {"oldPath": "data/bool.lean", "newPath": "src/data/bool.lean", "changes": []}, {"oldPath": "data/buffer/basic.lean", "newPath": "src/data/buffer/basic.lean", "changes": []}, {"oldPath": "data/char.lean", "newPath": "src/data/char.lean", "changes": []}, {"oldPath": "data/complex/basic.lean", "newPath": "src/data/complex/basic.lean", "changes": []}, {"oldPath": "data/complex/exponential.lean", "newPath": "src/data/complex/exponential.lean", "changes": []}, {"oldPath": "data/dfinsupp.lean", "newPath": "src/data/dfinsupp.lean", "changes": []}, {"oldPath": "data/dlist/basic.lean", "newPath": "src/data/dlist/basic.lean", "changes": []}, {"oldPath": "data/dlist/instances.lean", "newPath": "src/data/dlist/instances.lean", "changes": []}, {"oldPath": "data/equiv/algebra.lean", "newPath": "src/data/equiv/algebra.lean", "changes": []}, {"oldPath": "data/equiv/basic.lean", "newPath": "src/data/equiv/basic.lean", "changes": []}, {"oldPath": "data/equiv/denumerable.lean", "newPath": "src/data/equiv/denumerable.lean", "changes": []}, {"oldPath": "data/equiv/encodable.lean", "newPath": "src/data/equiv/encodable.lean", "changes": []}, {"oldPath": "data/equiv/fin.lean", "newPath": "src/data/equiv/fin.lean", "changes": []}, {"oldPath": "data/equiv/list.lean", "newPath": "src/data/equiv/list.lean", "changes": []}, {"oldPath": "data/equiv/nat.lean", "newPath": "src/data/equiv/nat.lean", "changes": []}, {"oldPath": "data/erased.lean", "newPath": "src/data/erased.lean", "changes": []}, {"oldPath": "data/fin.lean", "newPath": "src/data/fin.lean", "changes": []}, {"oldPath": "data/finmap.lean", "newPath": "src/data/finmap.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "src/data/finset.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "src/data/finsupp.lean", "changes": []}, {"oldPath": "data/fintype.lean", "newPath": "src/data/fintype.lean", "changes": []}, {"oldPath": "data/fp/basic.lean", "newPath": "src/data/fp/basic.lean", "changes": []}, {"oldPath": "data/hash_map.lean", "newPath": "src/data/hash_map.lean", "changes": []}, {"oldPath": "data/holor.lean", "newPath": "src/data/holor.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "src/data/int/basic.lean", "changes": []}, {"oldPath": "data/int/gcd.lean", "newPath": "src/data/int/gcd.lean", "changes": []}, {"oldPath": "data/int/modeq.lean", "newPath": "src/data/int/modeq.lean", "changes": []}, {"oldPath": "data/int/sqrt.lean", "newPath": "src/data/int/sqrt.lean", "changes": []}, {"oldPath": "data/lazy_list2.lean", "newPath": "src/data/lazy_list2.lean", "changes": []}, {"oldPath": "data/list/alist.lean", "newPath": "src/data/list/alist.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "src/data/list/basic.lean", "changes": []}, {"oldPath": "data/list/default.lean", "newPath": "src/data/list/default.lean", "changes": []}, {"oldPath": "data/list/defs.lean", "newPath": "src/data/list/defs.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "src/data/list/perm.lean", "changes": []}, {"oldPath": "data/list/sigma.lean", "newPath": "src/data/list/sigma.lean", "changes": []}, {"oldPath": "data/list/sort.lean", "newPath": "src/data/list/sort.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "src/data/multiset.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "src/data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/cast.lean", "newPath": "src/data/nat/cast.lean", "changes": []}, {"oldPath": "data/nat/choose.lean", "newPath": "src/data/nat/choose.lean", "changes": []}, {"oldPath": "data/nat/dist.lean", "newPath": "src/data/nat/dist.lean", "changes": []}, {"oldPath": "data/nat/enat.lean", "newPath": "src/data/nat/enat.lean", "changes": []}, {"oldPath": "data/nat/gcd.lean", "newPath": "src/data/nat/gcd.lean", "changes": []}, {"oldPath": "data/nat/modeq.lean", "newPath": "src/data/nat/modeq.lean", "changes": []}, {"oldPath": "data/nat/pairing.lean", "newPath": "src/data/nat/pairing.lean", "changes": []}, {"oldPath": "data/nat/prime.lean", "newPath": "src/data/nat/prime.lean", "changes": []}, {"oldPath": "data/nat/sqrt.lean", "newPath": "src/data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/nat/totient.lean", "newPath": "src/data/nat/totient.lean", "changes": []}, {"oldPath": "data/num/basic.lean", "newPath": "src/data/num/basic.lean", "changes": []}, {"oldPath": "data/num/bitwise.lean", "newPath": "src/data/num/bitwise.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "src/data/num/lemmas.lean", "changes": []}, {"oldPath": "data/option/basic.lean", "newPath": "src/data/option/basic.lean", "changes": []}, {"oldPath": "data/option/defs.lean", "newPath": "src/data/option/defs.lean", "changes": []}, {"oldPath": "data/padics/default.lean", "newPath": "src/data/padics/default.lean", "changes": []}, {"oldPath": "data/padics/hensel.lean", "newPath": "src/data/padics/hensel.lean", "changes": []}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "src/data/padics/padic_integers.lean", "changes": []}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "src/data/padics/padic_norm.lean", "changes": []}, {"oldPath": "data/padics/padic_numbers.lean", "newPath": "src/data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "data/pfun.lean", "newPath": "src/data/pfun.lean", "changes": []}, {"oldPath": "data/pnat.lean", "newPath": "src/data/pnat.lean", "changes": []}, {"oldPath": "data/polynomial.lean", "newPath": "src/data/polynomial.lean", "changes": []}, {"oldPath": "data/prod.lean", "newPath": "src/data/prod.lean", "changes": []}, {"oldPath": "data/quot.lean", "newPath": "src/data/quot.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "src/data/rat.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "src/data/real/basic.lean", "changes": []}, {"oldPath": "data/real/cau_seq.lean", "newPath": "src/data/real/cau_seq.lean", "changes": []}, {"oldPath": "data/real/cau_seq_completion.lean", "newPath": "src/data/real/cau_seq_completion.lean", "changes": []}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": "src/data/real/cau_seq_filter.lean", "changes": []}, {"oldPath": "data/real/ennreal.lean", "newPath": "src/data/real/ennreal.lean", "changes": []}, {"oldPath": "data/real/irrational.lean", "newPath": "src/data/real/irrational.lean", "changes": []}, {"oldPath": "data/real/nnreal.lean", "newPath": "src/data/real/nnreal.lean", "changes": []}, {"oldPath": "data/semiquot.lean", "newPath": "src/data/semiquot.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "src/data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "src/data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "src/data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "src/data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "src/data/set/basic.lean", "changes": []}, {"oldPath": "data/set/countable.lean", "newPath": "src/data/set/countable.lean", "changes": []}, {"oldPath": "data/set/default.lean", "newPath": "src/data/set/default.lean", "changes": []}, {"oldPath": "data/set/disjointed.lean", "newPath": "src/data/set/disjointed.lean", "changes": []}, {"oldPath": "data/set/enumerate.lean", "newPath": "src/data/set/enumerate.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "src/data/set/finite.lean", "changes": []}, {"oldPath": "data/set/function.lean", "newPath": "src/data/set/function.lean", "changes": []}, {"oldPath": "data/set/intervals.lean", "newPath": "src/data/set/intervals.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "src/data/set/lattice.lean", "changes": []}, {"oldPath": "data/sigma/basic.lean", "newPath": "src/data/sigma/basic.lean", "changes": []}, {"oldPath": "data/sigma/default.lean", "newPath": "src/data/sigma/default.lean", "changes": []}, {"oldPath": "data/stream/basic.lean", "newPath": "src/data/stream/basic.lean", "changes": []}, {"oldPath": "data/string.lean", "newPath": "src/data/string.lean", "changes": []}, {"oldPath": "data/subtype.lean", "newPath": "src/data/subtype.lean", "changes": []}, {"oldPath": "data/sum.lean", "newPath": "src/data/sum.lean", "changes": []}, {"oldPath": "data/ulift.lean", "newPath": "src/data/ulift.lean", "changes": []}, {"oldPath": "data/vector2.lean", "newPath": "src/data/vector2.lean", "changes": []}, {"oldPath": "data/zmod/basic.lean", "newPath": "src/data/zmod/basic.lean", "changes": []}, {"oldPath": "data/zmod/quadratic_reciprocity.lean", "newPath": "src/data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "field_theory/finite.lean", "newPath": "src/field_theory/finite.lean", "changes": []}, {"oldPath": "field_theory/perfect_closure.lean", "newPath": "src/field_theory/perfect_closure.lean", "changes": []}, {"oldPath": "field_theory/subfield.lean", "newPath": "src/field_theory/subfield.lean", "changes": []}, {"oldPath": "group_theory/abelianization.lean", "newPath": "src/group_theory/abelianization.lean", "changes": []}, {"oldPath": "group_theory/coset.lean", "newPath": "src/group_theory/coset.lean", "changes": []}, {"oldPath": "group_theory/eckmann_hilton.lean", "newPath": "src/group_theory/eckmann_hilton.lean", "changes": []}, {"oldPath": "group_theory/free_abelian_group.lean", "newPath": "src/group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "group_theory/free_group.lean", "newPath": "src/group_theory/free_group.lean", "changes": []}, {"oldPath": "group_theory/group_action.lean", "newPath": "src/group_theory/group_action.lean", "changes": []}, {"oldPath": "group_theory/order_of_element.lean", "newPath": "src/group_theory/order_of_element.lean", "changes": []}, {"oldPath": "group_theory/perm.lean", "newPath": "src/group_theory/perm.lean", "changes": []}, {"oldPath": "group_theory/quotient_group.lean", "newPath": "src/group_theory/quotient_group.lean", "changes": []}, {"oldPath": "group_theory/subgroup.lean", "newPath": "src/group_theory/subgroup.lean", "changes": []}, {"oldPath": "group_theory/submonoid.lean", "newPath": "src/group_theory/submonoid.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "src/linear_algebra/basic.lean", "changes": []}, {"oldPath": "linear_algebra/basis.lean", "newPath": "src/linear_algebra/basis.lean", "changes": []}, {"oldPath": "linear_algebra/default.lean", "newPath": "src/linear_algebra/default.lean", "changes": []}, {"oldPath": "linear_algebra/dimension.lean", "newPath": "src/linear_algebra/dimension.lean", "changes": []}, {"oldPath": "linear_algebra/direct_sum_module.lean", "newPath": "src/linear_algebra/direct_sum_module.lean", "changes": []}, {"oldPath": "linear_algebra/lc.lean", "newPath": "src/linear_algebra/lc.lean", "changes": []}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "src/linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "linear_algebra/tensor_product.lean", "newPath": "src/linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "src/logic/basic.lean", "changes": []}, {"oldPath": "logic/embedding.lean", "newPath": "src/logic/embedding.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "src/logic/function.lean", "changes": []}, {"oldPath": "logic/relation.lean", "newPath": "src/logic/relation.lean", "changes": []}, {"oldPath": "logic/relator.lean", "newPath": "src/logic/relator.lean", "changes": []}, {"oldPath": "logic/schroeder_bernstein.lean", "newPath": "src/logic/schroeder_bernstein.lean", "changes": []}, {"oldPath": "meta/rb_map.lean", "newPath": "src/meta/rb_map.lean", "changes": []}, {"oldPath": "number_theory/dioph.lean", "newPath": "src/number_theory/dioph.lean", "changes": []}, {"oldPath": "number_theory/pell.lean", "newPath": "src/number_theory/pell.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "src/order/basic.lean", "changes": []}, {"oldPath": "order/boolean_algebra.lean", "newPath": "src/order/boolean_algebra.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "src/order/bounded_lattice.lean", "changes": []}, {"oldPath": "order/bounds.lean", "newPath": "src/order/bounds.lean", "changes": []}, {"oldPath": "order/complete_boolean_algebra.lean", "newPath": "src/order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "src/order/complete_lattice.lean", "changes": []}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "src/order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "order/default.lean", "newPath": "src/order/default.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "src/order/filter.lean", "changes": []}, {"oldPath": "order/fixed_points.lean", "newPath": "src/order/fixed_points.lean", "changes": []}, {"oldPath": "order/galois_connection.lean", "newPath": "src/order/galois_connection.lean", "changes": []}, {"oldPath": "order/lattice.lean", "newPath": "src/order/lattice.lean", "changes": []}, {"oldPath": "order/liminf_limsup.lean", "newPath": "src/order/liminf_limsup.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "src/order/order_iso.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "src/order/zorn.lean", "changes": []}, {"oldPath": "pending/default.lean", "newPath": "src/pending/default.lean", "changes": []}, {"oldPath": "ring_theory/associated.lean", "newPath": "src/ring_theory/associated.lean", "changes": []}, {"oldPath": "ring_theory/determinant.lean", "newPath": "src/ring_theory/determinant.lean", "changes": []}, {"oldPath": "ring_theory/ideal_operations.lean", "newPath": "src/ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "ring_theory/ideals.lean", "newPath": "src/ring_theory/ideals.lean", "changes": []}, {"oldPath": "ring_theory/localization.lean", "newPath": "src/ring_theory/localization.lean", "changes": []}, {"oldPath": "ring_theory/matrix.lean", "newPath": "src/ring_theory/matrix.lean", "changes": []}, {"oldPath": "ring_theory/multiplicity.lean", "newPath": "src/ring_theory/multiplicity.lean", "changes": []}, {"oldPath": "ring_theory/noetherian.lean", "newPath": "src/ring_theory/noetherian.lean", "changes": []}, {"oldPath": "ring_theory/principal_ideal_domain.lean", "newPath": "src/ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "ring_theory/subring.lean", "newPath": "src/ring_theory/subring.lean", "changes": []}, {"oldPath": "ring_theory/unique_factorization_domain.lean", "newPath": "src/ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "src/set_theory/cardinal.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "src/set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/lists.lean", "newPath": "src/set_theory/lists.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "src/set_theory/ordinal.lean", "changes": []}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "src/set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "set_theory/zfc.lean", "newPath": "src/set_theory/zfc.lean", "changes": []}, {"oldPath": "tactic/abel.lean", "newPath": "src/tactic/abel.lean", "changes": []}, {"oldPath": "tactic/algebra.lean", "newPath": "src/tactic/algebra.lean", "changes": []}, {"oldPath": "tactic/alias.lean", "newPath": "src/tactic/alias.lean", "changes": []}, {"oldPath": "tactic/auto_cases.lean", "newPath": "src/tactic/auto_cases.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "src/tactic/basic.lean", "changes": []}, {"oldPath": "tactic/cache.lean", "newPath": "src/tactic/cache.lean", "changes": []}, {"oldPath": "tactic/chain.lean", "newPath": "src/tactic/chain.lean", "changes": []}, {"oldPath": "tactic/converter/binders.lean", "newPath": "src/tactic/converter/binders.lean", "changes": []}, {"oldPath": "tactic/converter/interactive.lean", "newPath": "src/tactic/converter/interactive.lean", "changes": []}, {"oldPath": "tactic/converter/old_conv.lean", "newPath": "src/tactic/converter/old_conv.lean", "changes": []}, {"oldPath": "tactic/default.lean", "newPath": "src/tactic/default.lean", "changes": []}, {"oldPath": "tactic/elide.lean", "newPath": "src/tactic/elide.lean", "changes": []}, {"oldPath": "tactic/explode.lean", "newPath": "src/tactic/explode.lean", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "src/tactic/ext.lean", "changes": []}, {"oldPath": "tactic/fin_cases.lean", "newPath": "src/tactic/fin_cases.lean", "changes": []}, {"oldPath": "tactic/find.lean", "newPath": "src/tactic/find.lean", "changes": []}, {"oldPath": "tactic/finish.lean", "newPath": "src/tactic/finish.lean", "changes": []}, {"oldPath": "tactic/generalize_proofs.lean", "newPath": "src/tactic/generalize_proofs.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "src/tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/linarith.lean", "newPath": "src/tactic/linarith.lean", "changes": []}, {"oldPath": "tactic/mk_iff_of_inductive_prop.lean", "newPath": "src/tactic/mk_iff_of_inductive_prop.lean", "changes": []}, {"oldPath": "tactic/monotonicity/basic.lean", "newPath": "src/tactic/monotonicity/basic.lean", "changes": []}, {"oldPath": "tactic/monotonicity/default.lean", "newPath": "src/tactic/monotonicity/default.lean", "changes": []}, {"oldPath": "tactic/monotonicity/interactive.lean", "newPath": "src/tactic/monotonicity/interactive.lean", "changes": []}, {"oldPath": "tactic/monotonicity/lemmas.lean", "newPath": "src/tactic/monotonicity/lemmas.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "src/tactic/norm_num.lean", "changes": []}, {"oldPath": "tactic/pi_instances.lean", "newPath": "src/tactic/pi_instances.lean", "changes": []}, {"oldPath": "tactic/rcases.lean", "newPath": "src/tactic/rcases.lean", "changes": []}, {"oldPath": "tactic/replacer.lean", "newPath": "src/tactic/replacer.lean", "changes": []}, {"oldPath": "tactic/restate_axiom.lean", "newPath": "src/tactic/restate_axiom.lean", "changes": []}, {"oldPath": "tactic/rewrite.lean", "newPath": "src/tactic/rewrite.lean", "changes": []}, {"oldPath": "tactic/ring.lean", "newPath": "src/tactic/ring.lean", "changes": []}, {"oldPath": "tactic/ring2.lean", "newPath": "src/tactic/ring2.lean", "changes": []}, {"oldPath": "tactic/scc.lean", "newPath": "src/tactic/scc.lean", "changes": []}, {"oldPath": "tactic/simpa.lean", "newPath": "src/tactic/simpa.lean", "changes": []}, {"oldPath": "tactic/slice.lean", "newPath": "src/tactic/slice.lean", "changes": []}, {"oldPath": "tactic/split_ifs.lean", "newPath": "src/tactic/split_ifs.lean", "changes": []}, {"oldPath": "tactic/squeeze.lean", "newPath": "src/tactic/squeeze.lean", "changes": []}, {"oldPath": "tactic/subtype_instance.lean", "newPath": "src/tactic/subtype_instance.lean", "changes": []}, {"oldPath": "tactic/tauto.lean", "newPath": "src/tactic/tauto.lean", "changes": []}, {"oldPath": "tactic/tfae.lean", "newPath": "src/tactic/tfae.lean", "changes": []}, {"oldPath": "tactic/tidy.lean", "newPath": "src/tactic/tidy.lean", "changes": []}, {"oldPath": "tactic/where.lean", "newPath": "src/tactic/where.lean", "changes": []}, {"oldPath": "tactic/wlog.lean", "newPath": "src/tactic/wlog.lean", "changes": []}]}, {"timestamp": 1547550957, "sha": "0c710160", "message": "feat(logic/basic): nonempty.map", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "map", ["nonempty"]]]}]}, {"timestamp": 1547477282, "sha": "667dcf37", "message": "feat(group_theory/sylow): first sylow theorem (closes #591)", "changes": [{"oldPath": "group_theory/group_action.lean", "newPath": "group_theory/group_action.lean", "changes": [["add", "theorem", "comp_hom", ["is_group_action"]], ["add", "def", "mul_left_cosets", ["is_group_action"]], ["add", "theorem", "comp_hom", ["is_monoid_action"]]]}, {"oldPath": "group_theory/sylow.lean", "newPath": "group_theory/sylow.lean", "changes": [["add", "theorem", "exists_subgroup_card_pow_prime", ["sylow"]], ["add", "theorem", "fixed_points_mul_left_cosets_equiv_quotient", ["sylow"]], ["add", "theorem", "mem_fixed_points_mul_left_cosets_iff_mem_normalizer", ["sylow"]]]}]}, {"timestamp": 1547474758, "sha": "f63fb54d", "message": "doc(tactic/simpa): rewrite simpa doc", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/simpa.lean", "newPath": "tactic/simpa.lean", "changes": []}]}, {"timestamp": 1547472882, "sha": "49c059a4", "message": "refactor(analysis): add metric namespace\ncombines changes from @sgouezel, @PatrickMassot, and @digama0", "changes": [{"oldPath": "analysis/bounded_linear_maps.lean", "newPath": "analysis/bounded_linear_maps.lean", "changes": []}, {"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": []}, {"oldPath": "analysis/emetric_space.lean", "newPath": "analysis/emetric_space.lean", "changes": [["add", "theorem", "edist_eq_zero", []], ["add", "theorem", "edist_mem_uniformity", []], ["add", "theorem", "edist_triangle_left", []], ["add", "theorem", "edist_triangle_right", []], ["add", "theorem", "cauchy_iff", ["emetric"]], ["add", "theorem", "uniform_continuous_iff", ["emetric"]], ["add", "theorem", "uniform_embedding_iff", ["emetric"]], ["del", "theorem", "cauchy_of_emetric", ["emetric_space"]], ["del", "theorem", "edist_eq_zero", ["emetric_space"]], ["del", "theorem", "edist_mem_uniformity", ["emetric_space"]], ["del", "theorem", "edist_triangle_left", ["emetric_space"]], ["del", "theorem", "edist_triangle_right", ["emetric_space"]], ["del", "theorem", "eq_of_forall_edist_le", ["emetric_space"]], ["mod", "def", "induced", ["emetric_space"]], ["del", "theorem", "mem_uniformity_edist", ["emetric_space"]], ["mod", "def", "replace_uniformity", ["emetric_space"]], ["del", "theorem", "edist_eq", ["emetric_space", "subtype"]], ["del", "theorem", "uniform_continuous_of_emetric", ["emetric_space"]], ["del", "theorem", "uniform_embedding_of_emetric", ["emetric_space"]], ["del", "def", "uniform_space_of_edist", ["emetric_space"]], ["del", "theorem", "uniformity_edist''", ["emetric_space"]], ["del", "theorem", "uniformity_edist'", ["emetric_space"]], ["del", "theorem", "zero_eq_edist", ["emetric_space"]], ["add", "theorem", "eq_of_forall_edist_le", []], ["add", "theorem", "mem_uniformity_edist", []], ["add", "theorem", "edist_eq", ["subtype"]], ["add", "def", "uniform_space_of_edist", []], ["add", "theorem", "uniformity_edist''", []], ["add", "theorem", "uniformity_edist'", []], ["add", "theorem", "zero_eq_edist", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/exponential.lean", "newPath": "analysis/exponential.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["del", "def", "ball", []], ["del", "theorem", "ball_disjoint", []], ["del", "theorem", "ball_disjoint_same", []], ["del", "theorem", "ball_eq_empty_iff_nonpos", []], ["del", "theorem", "ball_half_subset", []], ["del", "theorem", "ball_mem_nhds", []], ["del", "theorem", "ball_subset", []], ["del", "theorem", "ball_subset_ball", []], ["del", "theorem", "ball_subset_closed_ball", []], ["del", "theorem", "subset", ["bounded"]], ["del", "def", "bounded", []], ["del", "theorem", "bounded_bUnion", []], ["del", "theorem", "bounded_ball", []], ["del", "theorem", "bounded_closed_ball", []], ["del", "theorem", "bounded_empty", []], ["del", "theorem", "bounded_iff_mem_bounded", []], ["del", "theorem", "bounded_iff_subset_ball", []], ["del", "theorem", "bounded_of_compact", []], ["del", "theorem", "bounded_of_compact_space", []], ["del", "theorem", "bounded_of_finite", []], ["del", "theorem", "bounded_range_iff", []], ["del", "theorem", "bounded_singleton", []], ["del", "theorem", "bounded_union", []], ["del", "theorem", "cauchy_of_metric", []], ["del", "theorem", "cauchy_seq_metric'", []], ["del", "theorem", "cauchy_seq_metric", []], ["del", "def", "closed_ball", []], ["del", "theorem", "closed_ball_subset_closed_ball", []], ["del", "theorem", "compact_iff_closed_bounded", []], ["del", "theorem", "continuous_of_metric", []], ["del", "theorem", "continuous_topo_metric", []], ["del", "theorem", "dist_mem_uniformity", []], ["del", "theorem", "exists_ball_subset_ball", []], ["del", "theorem", "exists_delta_of_continuous", []], ["del", "theorem", "is_closed_ball", []], ["del", "theorem", "is_open_ball", []], ["del", "theorem", "is_open_metric", []], ["del", "theorem", "mem_ball'", []], ["del", "theorem", "mem_ball", []], ["del", "theorem", "mem_ball_comm", []], ["del", "theorem", "mem_ball_self", []], ["del", "theorem", "mem_closed_ball", []], ["del", "theorem", "mem_closure_iff'", []], ["del", "theorem", "mem_nhds_iff_metric", []], ["del", "theorem", "mem_of_closed'", []], ["del", "theorem", "mem_uniformity_dist", []], ["del", "theorem", "mem_uniformity_dist_edist", []], ["add", "def", "ball", ["metric"]], ["add", "theorem", "ball_disjoint", ["metric"]], ["add", "theorem", "ball_disjoint_same", ["metric"]], ["add", "theorem", "ball_eq_empty_iff_nonpos", ["metric"]], ["add", "theorem", "ball_half_subset", ["metric"]], ["add", "theorem", "ball_mem_nhds", ["metric"]], ["add", "theorem", "ball_subset", ["metric"]], ["add", "theorem", "ball_subset_ball", ["metric"]], ["add", "theorem", "ball_subset_closed_ball", ["metric"]], ["add", "theorem", "subset", ["metric", "bounded"]], ["add", "def", "bounded", ["metric"]], ["add", "theorem", "bounded_bUnion", ["metric"]], ["add", "theorem", "bounded_ball", ["metric"]], ["add", "theorem", "bounded_closed_ball", ["metric"]], ["add", "theorem", "bounded_empty", ["metric"]], ["add", "theorem", "bounded_iff_mem_bounded", ["metric"]], ["add", "theorem", "bounded_iff_subset_ball", ["metric"]], ["add", "theorem", "bounded_of_compact", ["metric"]], ["add", "theorem", "bounded_of_compact_space", ["metric"]], ["add", "theorem", "bounded_of_finite", ["metric"]], ["add", "theorem", "bounded_range_iff", ["metric"]], ["add", "theorem", "bounded_singleton", ["metric"]], ["add", "theorem", "bounded_union", ["metric"]], ["add", "theorem", "cauchy_seq_iff'", ["metric"]], ["add", "theorem", "cauchy_seq_iff", ["metric"]], ["add", "def", "closed_ball", ["metric"]], ["add", "theorem", "closed_ball_subset_closed_ball", ["metric"]], ["add", "theorem", "compact_iff_closed_bounded", ["metric"]], ["add", "theorem", "continuous_iff'", ["metric"]], ["add", "theorem", "continuous_iff", ["metric"]], ["add", "theorem", "dist_mem_uniformity", ["metric"]], ["add", "theorem", "exists_ball_subset_ball", ["metric"]], ["add", "theorem", "exists_delta_of_continuous", ["metric"]], ["add", "theorem", "is_closed_ball", ["metric"]], ["add", "theorem", "is_open_ball", ["metric"]], ["add", "theorem", "is_open_iff", ["metric"]], ["add", "theorem", "mem_ball'", ["metric"]], ["add", "theorem", "mem_ball", ["metric"]], ["add", "theorem", "mem_ball_comm", ["metric"]], ["add", "theorem", "mem_ball_self", ["metric"]], ["add", "theorem", "mem_closed_ball", ["metric"]], ["add", "theorem", "mem_closure_iff'", ["metric"]], ["add", "theorem", "mem_nhds_iff", ["metric"]], ["add", "theorem", "mem_of_closed'", ["metric"]], ["add", "theorem", "mem_uniformity_dist", ["metric"]], ["add", "theorem", "nhds_eq", ["metric"]], ["add", "theorem", "pos_of_mem_ball", ["metric"]], ["add", "theorem", "tendsto_at_top", ["metric"]], ["add", "theorem", "tendsto_nhds", ["metric"]], ["add", "theorem", "tendsto_nhds_nhds", ["metric"]], ["add", "theorem", "totally_bounded_iff", ["metric"]], ["add", "theorem", "totally_bounded_of_finite_discretization", ["metric"]], ["add", "theorem", "uniform_continuous_iff", ["metric"]], ["add", "theorem", "uniform_embedding_iff", ["metric"]], ["add", "theorem", "uniformity_dist'", ["metric"]], ["add", "theorem", "uniformity_dist", ["metric"]], ["del", "def", "uniform_space_of_dist", ["metric_space"]], ["del", "theorem", "nhds_eq_metric", []], ["del", "theorem", "pos_of_mem_ball", []], ["del", "theorem", "tendsto_at_top_metric", []], ["del", "theorem", "tendsto_nhds_of_metric", []], ["del", "theorem", "tendsto_nhds_topo_metric", []], ["del", "theorem", "totally_bounded_of_finite_discretization", []], ["del", "theorem", "totally_bounded_of_metric", []], ["del", "theorem", "uniform_continuous_of_metric", []], ["del", "theorem", "uniform_embedding_of_metric", []], ["add", "def", "uniform_space_of_dist", []], ["del", "theorem", "uniformity_dist'", []], ["del", "theorem", "uniformity_dist", []], ["del", "theorem", "uniformity_edist'", []]]}, {"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": []}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/bounded_continuous_function.lean", "newPath": "analysis/topology/bounded_continuous_function.lean", "changes": []}, {"oldPath": "data/padics/hensel.lean", "newPath": "data/padics/hensel.lean", "changes": []}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "data/padics/padic_integers.lean", "changes": []}, {"oldPath": "data/padics/padic_numbers.lean", "newPath": "data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1547472856, "sha": "2f9f3df7", "message": "doc(tactic/simpa): update simpa documentation", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/simpa.lean", "newPath": "tactic/simpa.lean", "changes": []}]}, {"timestamp": 1547472856, "sha": "263e8a02", "message": "fix(tactic/simpa): only try given expression in \"simpa using\"", "changes": [{"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": []}, {"oldPath": "tactic/simpa.lean", "newPath": "tactic/simpa.lean", "changes": []}]}, {"timestamp": 1547468832, "sha": "4de9682c", "message": "fix(PULL_REQUEST_TEMPLATE): use absolute urls\nThe relative urls do not resolve correctly.", "changes": [{"oldPath": null, "newPath": ".github/PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": "PULL_REQUEST_TEMPLATE.md", "newPath": null, "changes": []}]}, {"timestamp": 1547467408, "sha": "c7f13fd7", "message": "feat(.vscode): add copyright snippet", "changes": [{"oldPath": null, "newPath": ".vscode/copyright.code-snippets", "changes": []}]}, {"timestamp": 1547406125, "sha": "b03c0aac", "message": "feat(group_theory/sylow): Cauchy's theorem (#458)\n* feat(group_theory): adding add_subgroup and add_submonoid\n* feat(data/list/basic): rotate a list", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "theorem", "subtype_quotient_equiv_quotient_subtype", ["equiv"]]]}, {"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": []}, {"oldPath": "group_theory/group_action.lean", "newPath": "group_theory/group_action.lean", "changes": [["add", "def", "orbit_rel", ["is_group_action"]]]}, {"oldPath": null, "newPath": "group_theory/sylow.lean", "changes": [["add", "theorem", "card_modeq_card_fixed_points", ["is_group_action"]], ["add", "theorem", "mem_fixed_points_iff_card_orbit_eq_one", ["is_group_action"]], ["add", "theorem", "card_preimage_mk", ["quotient_group"]], ["add", "theorem", "exists_prime_order_of_dvd_card", ["sylow"]], ["add", "theorem", "mem_vectors_prod_eq_one", ["sylow"]], ["add", "theorem", "mem_vectors_prod_eq_one_iff", ["sylow"]], ["add", "def", "mk_vector_prod_eq_one", ["sylow"]], ["add", "theorem", "mk_vector_prod_eq_one_inj", ["sylow"]], ["add", "theorem", "one_mem_fixed_points_rotate", ["sylow"]], ["add", "theorem", "one_mem_vectors_prod_eq_one", ["sylow"]], ["add", "def", "rotate_vectors_prod_eq_one", ["sylow"]], ["add", "def", "vectors_prod_eq_one", ["sylow"]]]}]}, {"timestamp": 1547288358, "sha": "dc6c38a7", "message": "fix(field_theory/subfield): is_subfield should be a Prop (#588)", "changes": [{"oldPath": "field_theory/subfield.lean", "newPath": "field_theory/subfield.lean", "changes": []}]}, {"timestamp": 1547233299, "sha": "e61a4645", "message": "feat(ring_theory/euclidean_domain): add more specific Euclidean domain stuff (#527)", "changes": [{"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": [["add", "theorem", "eq_div_of_mul_eq_left", ["euclidean_domain"]], ["add", "theorem", "eq_div_of_mul_eq_right", ["euclidean_domain"]]]}, {"oldPath": null, "newPath": "ring_theory/euclidean_domain.lean", "changes": [["add", "theorem", "dvd_or_coprime", []], ["add", "theorem", "gcd_is_unit_iff", []], ["add", "theorem", "is_coprime_of_dvd", []], ["add", "theorem", "span_gcd", []]]}]}, {"timestamp": 1547233159, "sha": "5c323cdc", "message": "feat(category_theory): over and under categories (#549)", "changes": [{"oldPath": "category_theory/comma.lean", "newPath": "category_theory/comma.lean", "changes": [["mod", "theorem", "map_right_obj_hom", ["category_theory", "comma"]], ["add", "theorem", "comp_left", ["category_theory", "over"]], ["add", "def", "forget", ["category_theory", "over"]], ["add", "theorem", "forget_map", ["category_theory", "over"]], ["add", "theorem", "forget_obj", ["category_theory", "over"]], ["add", "def", "hom_mk", ["category_theory", "over"]], ["add", "theorem", "hom_mk_left", ["category_theory", "over"]], ["add", "theorem", "id_left", ["category_theory", "over"]], ["add", "def", "map", ["category_theory", "over"]], ["add", "theorem", "map_map_left", ["category_theory", "over"]], ["add", "theorem", "map_obj_hom", ["category_theory", "over"]], ["add", "theorem", "map_obj_left", ["category_theory", "over"]], ["add", "def", "mk", ["category_theory", "over"]], ["add", "theorem", "mk_hom", ["category_theory", "over"]], ["add", "theorem", "mk_left", ["category_theory", "over"]], ["add", "theorem", "ext", ["category_theory", "over", "over_morphism"]], ["add", "theorem", "over_morphism_right", ["category_theory", "over"]], ["add", "theorem", "over_right", ["category_theory", "over"]], ["add", "def", "post", ["category_theory", "over"]], ["add", "theorem", "w", ["category_theory", "over"]], ["add", "def", "over", ["category_theory"]], ["add", "theorem", "comp_right", ["category_theory", "under"]], ["add", "def", "forget", ["category_theory", "under"]], ["add", "theorem", "forget_map", ["category_theory", "under"]], ["add", "theorem", "forget_obj", ["category_theory", "under"]], ["add", "def", "hom_mk", ["category_theory", "under"]], ["add", "theorem", "hom_mk_right", ["category_theory", "under"]], ["add", "theorem", "id_right", ["category_theory", "under"]], ["add", "def", "map", ["category_theory", "under"]], ["add", "theorem", "map_map_right", ["category_theory", "under"]], ["add", "theorem", "map_obj_hom", ["category_theory", "under"]], ["add", "theorem", "map_obj_right", ["category_theory", "under"]], ["add", "def", "mk", ["category_theory", "under"]], ["add", "theorem", "mk_hom", ["category_theory", "under"]], ["add", "theorem", "mk_right", ["category_theory", "under"]], ["add", "def", "post", ["category_theory", "under"]], ["add", "theorem", "under_left", ["category_theory", "under"]], ["add", "theorem", "ext", ["category_theory", "under", "under_morphism"]], ["add", "theorem", "under_morphism_left", ["category_theory", "under"]], ["add", "theorem", "w", ["category_theory", "under"]], ["add", "def", "under", ["category_theory"]]]}, {"oldPath": null, "newPath": "category_theory/limits/over.lean", "changes": [["add", "def", "to_cocone", ["category_theory", "functor"]], ["add", "theorem", "to_cocone_X", ["category_theory", "functor"]], ["add", "theorem", "to_cocone_ι", ["category_theory", "functor"]], ["add", "def", "to_cone", ["category_theory", "functor"]], ["add", "theorem", "to_cone_X", ["category_theory", "functor"]], ["add", "theorem", "to_cone_π", ["category_theory", "functor"]], ["add", "def", "colimit", ["category_theory", "over"]], ["add", "theorem", "colimit_X_hom", ["category_theory", "over"]], ["add", "theorem", "colimit_ι_app", ["category_theory", "over"]], ["add", "def", "forget_colimit_is_colimit", ["category_theory", "over"]], ["add", "def", "forget_limit_is_limit", ["category_theory", "under"]], ["add", "def", "limit", ["category_theory", "under"]], ["add", "theorem", "limit_X_hom", ["category_theory", "under"]], ["add", "theorem", "limit_π_app", ["category_theory", "under"]]]}]}, {"timestamp": 1547230633, "sha": "c19b4bec", "message": "feat(meta/rb_map): add some monadic filtering", "changes": [{"oldPath": "meta/rb_map.lean", "newPath": "meta/rb_map.lean", "changes": []}]}, {"timestamp": 1547226362, "sha": "7a9b2e40", "message": "Update PULL_REQUEST_TEMPLATE.md", "changes": [{"oldPath": "PULL_REQUEST_TEMPLATE.md", "newPath": "PULL_REQUEST_TEMPLATE.md", "changes": []}]}, {"timestamp": 1547226298, "sha": "6516c34c", "message": "doc(README): elect new maintainers", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1547220942, "sha": "4f3f86d2", "message": "chore(ring_theory/subring): remove unused import", "changes": [{"oldPath": "ring_theory/subring.lean", "newPath": "ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1547206637, "sha": "45787967", "message": "feat(data/polynomial): various lemmas about degree and monic and coeff", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["mod", "theorem", "coeff_X", ["polynomial"]], ["mod", "theorem", "coeff_add", ["polynomial"]], ["mod", "theorem", "coeff_neg", ["polynomial"]], ["add", "theorem", "coeff_sub", ["polynomial"]], ["add", "theorem", "degree_C_mul_X_pow_le", ["polynomial"]], ["add", "theorem", "degree_X_le", ["polynomial"]], ["add", "theorem", "degree_X_pow_le", ["polynomial"]], ["add", "theorem", "degree_le_iff_coeff_zero", ["polynomial"]], ["add", "theorem", "degree_mod_by_monic_le", ["polynomial"]], ["add", "theorem", "leading_coeff_mul_X_pow", ["polynomial"]], ["add", "theorem", "monic_X_add_C", ["polynomial"]], ["add", "theorem", "monic_X_pow_add", ["polynomial"]], ["add", "theorem", "monic_X_pow_sub", ["polynomial"]], ["mod", "theorem", "monic_X_sub_C", ["polynomial"]], ["add", "theorem", "monic_of_degree_le", ["polynomial"]], ["add", "theorem", "nat_degree_le_of_degree_le", ["polynomial"]]]}]}, {"timestamp": 1547133990, "sha": "b1684fee", "message": "fix(principal_ideal_domain): correct spelling mistake (#582)", "changes": [{"oldPath": "ring_theory/principal_ideal_domain.lean", "newPath": "ring_theory/principal_ideal_domain.lean", "changes": [["del", "theorem", "associates_iredducible_iff_prime", ["principal_ideal_domain"]], ["add", "theorem", "associates_irreducible_iff_prime", ["principal_ideal_domain"]]]}]}, {"timestamp": 1547122284, "sha": "6e97721b", "message": "refactor(principal_ideal_domain): simplify proof of PID -> UFD", "changes": [{"oldPath": "ring_theory/noetherian.lean", "newPath": "ring_theory/noetherian.lean", "changes": [["add", "theorem", "exists_factors", ["is_noetherian_ring"]]]}, {"oldPath": "ring_theory/principal_ideal_domain.lean", "newPath": "ring_theory/principal_ideal_domain.lean", "changes": [["del", "theorem", "associated_of_associated_prod_prod", ["principal_ideal_domain"]], ["add", "theorem", "associates_iredducible_iff_prime", ["principal_ideal_domain"]], ["del", "theorem", "associates_prime_of_irreducible", ["principal_ideal_domain"]], ["del", "theorem", "eq_of_prod_eq_associates", ["principal_ideal_domain"]], ["del", "theorem", "exists_factors", ["principal_ideal_domain"]], ["add", "theorem", "irreducible_iff_prime", ["principal_ideal_domain"]], ["del", "theorem", "prime_of_irreducible", ["principal_ideal_domain"]]]}, {"oldPath": "ring_theory/unique_factorization_domain.lean", "newPath": "ring_theory/unique_factorization_domain.lean", "changes": [["mod", "theorem", "irreducible_factors", ["unique_factorization_domain"]]]}]}, {"timestamp": 1547122284, "sha": "f5bf2776", "message": "refactor(unique_factorization_domain): simplify definition of UFD", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "dvd_prod", ["multiset"]]]}, {"oldPath": "ring_theory/associated.lean", "newPath": "ring_theory/associated.lean", "changes": [["add", "theorem", "associated_mul_left_cancel", []], ["add", "theorem", "associated_mul_right_cancel", []], ["add", "theorem", "dvd_iff_dvd_of_rel_left", []], ["add", "theorem", "dvd_iff_dvd_of_rel_right", []], ["add", "theorem", "dvd_mul_unit_iff", []], ["add", "theorem", "eq_zero_iff_of_associated", []], ["add", "theorem", "exists_associated_mem_of_dvd_prod", []], ["add", "theorem", "irreducible_iff_of_associated", []], ["add", "theorem", "irreducible_of_associated", []], ["add", "theorem", "is_unit_iff_of_associated", []], ["add", "theorem", "is_unit_unit", []], ["add", "theorem", "mul_unit_dvd_iff", []], ["add", "theorem", "ne_zero_iff_of_associated", []], ["mod", "theorem", "not_prime_zero", []], ["add", "theorem", "prime_iff_of_associated", []], ["add", "theorem", "prime_of_associated", []], ["add", "theorem", "unit_mul_dvd_iff", []]]}, {"oldPath": "ring_theory/principal_ideal_domain.lean", "newPath": "ring_theory/principal_ideal_domain.lean", "changes": []}, {"oldPath": "ring_theory/unique_factorization_domain.lean", "newPath": "ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "factors_irreducible", ["unique_factorization_domain"]], ["add", "theorem", "induction_on_prime", ["unique_factorization_domain"]], ["add", "theorem", "irreducible_factors", ["unique_factorization_domain"]], ["add", "theorem", "irreducible_iff_prime", ["unique_factorization_domain"]], ["add", "def", "of_unique_irreducible_factorization", ["unique_factorization_domain"]], ["add", "theorem", "unique", ["unique_factorization_domain"]], ["add", "structure", "unique_irreducible_factorization", []]]}]}, {"timestamp": 1547113588, "sha": "8b66ebde", "message": "functions and cardinality (#556)", "changes": [{"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["add", "theorem", "countable_of_injective_of_countable_image", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_subsets_of_finite", ["set"]]]}, {"oldPath": "data/set/function.lean", "newPath": "data/set/function.lean", "changes": [["add", "theorem", "inv_fun_on_image", ["set"]], ["add", "theorem", "maps_to'", ["set"]], ["add", "theorem", "maps_to_image", ["set"]], ["add", "theorem", "maps_to_range", ["set"]]]}]}, {"timestamp": 1547028503, "sha": "f488635d", "message": "chore(tactic/monotonicity/interactive) use derive for has_reflect (#578)", "changes": [{"oldPath": "tactic/monotonicity/interactive.lean", "newPath": "tactic/monotonicity/interactive.lean", "changes": [["mod", "inductive", "rep_arity", ["tactic", "interactive"]]]}]}, {"timestamp": 1547028476, "sha": "af735a56", "message": "feat(field_theory/finite): field_of_integral_domain (#579)", "changes": [{"oldPath": "field_theory/finite.lean", "newPath": "field_theory/finite.lean", "changes": [["add", "def", "field_of_integral_domain", ["finite_field"]]]}]}, {"timestamp": 1547027315, "sha": "d0532c10", "message": "feat(data/polynomial): lemmas about map (#530)", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "injective", ["is_field_hom"]]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "injective_iff", ["is_group_hom"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "coeff_X", ["polynomial"]], ["add", "theorem", "degree_div_le", ["polynomial"]], ["add", "theorem", "degree_div_lt", ["polynomial"]], ["add", "theorem", "degree_map", ["polynomial"]], ["del", "theorem", "degree_map_eq", ["polynomial"]], ["add", "theorem", "degree_map_eq_of_injective", ["polynomial"]], ["add", "theorem", "degree_map_eq_of_leading_coeff_ne_zero", ["polynomial"]], ["mod", "theorem", "degree_mul_leading_coeff_inv", ["polynomial"]], ["add", "theorem", "div_mod_by_monic_unique", ["polynomial"]], ["add", "theorem", "div_zero", ["polynomial"]], ["add", "theorem", "eq_X_add_C_of_degree_le_one", ["polynomial"]], ["add", "theorem", "eval_map", ["polynomial"]], ["mod", "theorem", "eval_pow", ["polynomial"]], ["add", "theorem", "eval₂_hom", ["polynomial"]], ["add", "theorem", "eval₂_map", ["polynomial"]], ["add", "theorem", "exists_root_of_degree_eq_one", ["polynomial"]], ["add", "theorem", "leading_coeff_map", ["polynomial"]], ["add", "theorem", "map_div", ["polynomial"]], ["add", "theorem", "map_div_by_monic", ["polynomial"]], ["add", "theorem", "map_eq_zero", ["polynomial"]], ["add", "theorem", "map_id", ["polynomial"]], ["add", "theorem", "map_map", ["polynomial"]], ["add", "theorem", "map_mod", ["polynomial"]], ["add", "theorem", "map_mod_by_monic", ["polynomial"]], ["add", "theorem", "map_mod_div_by_monic", ["polynomial"]], ["add", "theorem", "map_neg", ["polynomial"]], ["add", "theorem", "map_sub", ["polynomial"]], ["add", "theorem", "monic_map", ["polynomial"]], ["mod", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["add", "theorem", "nat_degree_map", ["polynomial"]], ["add", "theorem", "ne_zero_of_monic_of_zero_ne_one", ["polynomial"]]]}]}, {"timestamp": 1546706467, "sha": "2e636352", "message": "feat(group_theory/subgroup): simple groups (#572)", "changes": [{"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "simple_add_group_iff", ["additive"]], ["add", "theorem", "eq_trivial_iff", ["is_subgroup"]], ["add", "theorem", "simple_group_iff", ["multiplicative"]], ["add", "theorem", "simple_add_group_of_surjective", []], ["add", "theorem", "simple_group_of_surjective", []]]}]}, {"timestamp": 1546706318, "sha": "d19c9bc0", "message": "feat(data/fintype): decidable_left_inverse_fintype (#575)", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}]}, {"timestamp": 1546706277, "sha": "395aaddd", "message": "feat(group_theory/sign): sign_surjective (#576)", "changes": [{"oldPath": "group_theory/perm.lean", "newPath": "group_theory/perm.lean", "changes": [["add", "theorem", "sign_surjective", ["equiv", "perm"]]]}]}, {"timestamp": 1546697945, "sha": "b9c5eb05", "message": "feat(ring_theory/multiplicity): multiplicity of elements of a ring (#523)", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "pow_dvd_pow", []]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "card_smul", ["multiset"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "add_num_denom", ["rat"]], ["add", "theorem", "denom_one", ["rat"]], ["add", "theorem", "num_one", ["rat"]]]}, {"oldPath": null, "newPath": "ring_theory/multiplicity.lean", "changes": [["add", "theorem", "dvd_of_multiplicity_pos", ["multiplicity"]], ["add", "theorem", "eq_some_iff", ["multiplicity"]], ["add", "theorem", "eq_top_iff", ["multiplicity"]], ["add", "theorem", "eq_top_iff_not_finite", ["multiplicity"]], ["add", "def", "finite", ["multiplicity"]], ["add", "theorem", "finite_def", ["multiplicity"]], ["add", "theorem", "finite_iff_dom", ["multiplicity"]], ["add", "theorem", "finite_int_iff", ["multiplicity"]], ["add", "theorem", "finite_int_iff_nat_abs_finite", ["multiplicity"]], ["add", "theorem", "finite_mul", ["multiplicity"]], ["add", "theorem", "finite_mul_aux", ["multiplicity"]], ["add", "theorem", "finite_mul_iff", ["multiplicity"]], ["add", "theorem", "finite_nat_iff", ["multiplicity"]], ["add", "theorem", "finite_of_finite_mul_left", ["multiplicity"]], ["add", "theorem", "finite_of_finite_mul_right", ["multiplicity"]], ["add", "theorem", "finite_pow", ["multiplicity"]], ["add", "theorem", "get_multiplicity_self", ["multiplicity"]], ["add", "theorem", "get_one_right", ["multiplicity"]], ["add", "theorem", "is_greatest'", ["multiplicity"]], ["add", "theorem", "is_greatest", ["multiplicity"]], ["add", "theorem", "le_multiplicity_of_pow_dvd", ["multiplicity"]], ["add", "theorem", "min_le_multiplicity_add", ["multiplicity"]], ["add", "theorem", "multiplicity_eq_zero_of_not_dvd", ["multiplicity"]], ["add", "theorem", "multiplicity_le_multiplicity_iff", ["multiplicity"]], ["add", "theorem", "multiplicity_self", ["multiplicity"]], ["add", "theorem", "multiplicity_unit", ["multiplicity"]], ["add", "theorem", "ne_zero_of_finite", ["multiplicity"]], ["add", "theorem", "not_finite_iff_forall", ["multiplicity"]], ["add", "theorem", "not_unit_of_finite", ["multiplicity"]], ["add", "theorem", "one_left", ["multiplicity"]], ["add", "theorem", "one_right", ["multiplicity"]], ["add", "theorem", "pow", ["multiplicity"]], ["add", "theorem", "pow_dvd_iff_le_multiplicity", ["multiplicity"]], ["add", "theorem", "pow_dvd_of_le_multiplicity", ["multiplicity"]], ["add", "theorem", "pow_multiplicity_dvd", ["multiplicity"]], ["add", "theorem", "unique'", ["multiplicity"]], ["add", "theorem", "unique", ["multiplicity"]], ["add", "def", "multiplicity", []], ["add", "theorem", "multiplicity_eq_zero_of_coprime", []]]}]}, {"timestamp": 1546697830, "sha": "bc96ecad", "message": "feat(group_theory/quotient_group): quotient_ker_equiv_range (#574)", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "group_theory/quotient_group.lean", "newPath": "group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1546697627, "sha": "3ff5e93e", "message": "feat(data/polynomial): polynomials over a field are a normalization domain (#560)", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "coe_norm_unit", ["polynomial"]], ["add", "theorem", "coeff_coe_units_zero_ne_zero", ["polynomial"]], ["add", "theorem", "coeff_inv_units", ["polynomial"]], ["add", "theorem", "degree_coe_units", ["polynomial"]], ["add", "theorem", "eq_C_of_degree_eq_zero", ["polynomial"]], ["add", "theorem", "monic_mul_norm_unit", ["polynomial"]], ["add", "theorem", "nat_degree_coe_units", ["polynomial"]]]}]}, {"timestamp": 1546697569, "sha": "87bf6184", "message": "feat(data/polynomial): C_neg and C_sub (#561)", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "C_neg", ["polynomial"]], ["add", "theorem", "C_sub", ["polynomial"]]]}]}, {"timestamp": 1546697545, "sha": "78d0ebf3", "message": "feat(data/multiset): prod_hom and exists_mem_of_rel_of_mem (#562)", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "exists_mem_of_rel_of_mem", ["multiset"]], ["add", "theorem", "prod_hom", ["multiset"]], ["add", "theorem", "sum_hom", ["multiset"]]]}]}, {"timestamp": 1546697518, "sha": "4e509a86", "message": "feat(ring_theory/noetherian): irreducible_induction_on (#563)", "changes": [{"oldPath": "ring_theory/associated.lean", "newPath": "ring_theory/associated.lean", "changes": [["del", "theorem", "zero_mul", ["associates"]], ["add", "theorem", "dvd_and_not_dvd_iff", []]]}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["add", "theorem", "span_singleton_lt_span_singleton", ["ideal"]]]}, {"oldPath": "ring_theory/noetherian.lean", "newPath": "ring_theory/noetherian.lean", "changes": [["add", "theorem", "exists_irreducible_factor", ["is_noetherian_ring"]], ["add", "theorem", "irreducible_induction_on", ["is_noetherian_ring"]], ["add", "theorem", "well_founded_dvd_not_unit", ["is_noetherian_ring"]]]}]}, {"timestamp": 1546697424, "sha": "ea0ff058", "message": "doc(category_theory): update `category_theory` documentation (#564) [ci-skip]", "changes": [{"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}]}, {"timestamp": 1546697358, "sha": "33df7ecc", "message": "feat(data/nat/enat): has_well_founded for enat (#565)", "changes": [{"oldPath": "data/nat/enat.lean", "newPath": "data/nat/enat.lean", "changes": [["add", "theorem", "coe_ne_bot", ["enat"]], ["add", "theorem", "lt_wf", ["enat"]], ["add", "def", "to_with_top", ["enat"]], ["add", "theorem", "to_with_top_coe'", ["enat"]], ["add", "theorem", "to_with_top_coe", ["enat"]], ["add", "theorem", "to_with_top_le", ["enat"]], ["add", "theorem", "to_with_top_lt", ["enat"]], ["add", "theorem", "to_with_top_top'", ["enat"]], ["add", "theorem", "to_with_top_top", ["enat"]], ["add", "theorem", "to_with_top_zero'", ["enat"]], ["add", "theorem", "to_with_top_zero", ["enat"]]]}]}, {"timestamp": 1546697199, "sha": "4bacdf21", "message": "feat(logic/basic): inhabited_of_nonempty with instance parameter (#566)", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}]}, {"timestamp": 1546697150, "sha": "125feb64", "message": "feat(data/multiset): forall_of_pairwise (#569)", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "forall_of_pairwise", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "forall_of_pairwise", ["multiset"]]]}]}, {"timestamp": 1546697130, "sha": "da6ec218", "message": "feat(algebra/group): is_conj_one_right (#570)", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "is_conj_one_left", []], ["add", "theorem", "is_conj_one_right", []], ["mod", "theorem", "is_conj_symm", []], ["mod", "theorem", "is_conj_trans", []]]}]}, {"timestamp": 1546697106, "sha": "a32fa18f", "message": "feat(data/finset): finset.card_eq_one (#571)", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "card_eq_one", ["finset"]]]}]}, {"timestamp": 1546663764, "sha": "40fa9ade", "message": "fix(analysis/measure_theory): fix build", "changes": [{"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["add", "theorem", "of_real_add_of_real", ["nnreal"]]]}]}, {"timestamp": 1546633701, "sha": "93a330e9", "message": "fix(data/real/cau_seq_filter): fix build", "changes": [{"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1546631023, "sha": "19e7b1f5", "message": "feat(analysis/topology): Bounded continuous functions (#464)", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "neg_sub_neg", []]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "subset", ["bounded"]], ["add", "def", "bounded", []], ["add", "theorem", "bounded_bUnion", []], ["add", "theorem", "bounded_ball", []], ["add", "theorem", "bounded_closed_ball", []], ["add", "theorem", "bounded_empty", []], ["add", "theorem", "bounded_iff_mem_bounded", []], ["add", "theorem", "bounded_iff_subset_ball", []], ["add", "theorem", "bounded_of_compact", []], ["add", "theorem", "bounded_of_compact_space", []], ["add", "theorem", "bounded_of_finite", []], ["add", "theorem", "bounded_range_iff", []], ["add", "theorem", "bounded_singleton", []], ["add", "theorem", "bounded_union", []], ["add", "theorem", "cauchy_seq_bdd", []], ["add", "theorem", "cauchy_seq_iff_le_tendsto_0", []], ["add", "theorem", "closed_ball_subset_closed_ball", []], ["add", "theorem", "compact_iff_closed_bounded", []], ["add", "theorem", "dist_triangle4", []], ["add", "theorem", "dist_triangle4_left", []], ["add", "theorem", "dist_triangle4_right", []], ["add", "theorem", "mem_of_closed'", []], ["mod", "theorem", "tendsto_at_top_metric", []], ["add", "theorem", "totally_bounded_of_finite_discretization", []]]}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": [["add", "def", "of_add_dist'", ["normed_group"]], ["add", "def", "of_add_dist", ["normed_group"]]]}, {"oldPath": null, "newPath": "analysis/topology/bounded_continuous_function.lean", "changes": [["add", "theorem", "abs_diff_coe_le_dist", ["bounded_continuous_function"]], ["add", "theorem", "arzela_ascoli", ["bounded_continuous_function"]], ["add", "theorem", "arzela_ascoli₁", ["bounded_continuous_function"]], ["add", "theorem", "arzela_ascoli₂", ["bounded_continuous_function"]], ["add", "theorem", "bounded_range", ["bounded_continuous_function"]], ["add", "def", "cod_restrict", ["bounded_continuous_function"]], ["add", "theorem", "coe_add", ["bounded_continuous_function"]], ["add", "theorem", "coe_diff", ["bounded_continuous_function"]], ["add", "theorem", "coe_le_coe_add_dist", ["bounded_continuous_function"]], ["add", "theorem", "coe_neg", ["bounded_continuous_function"]], ["add", "theorem", "coe_zero", ["bounded_continuous_function"]], ["add", "def", "comp", ["bounded_continuous_function"]], ["add", "def", "const", ["bounded_continuous_function"]], ["add", "theorem", "continuous_comp", ["bounded_continuous_function"]], ["add", "theorem", "continuous_eval", ["bounded_continuous_function"]], ["add", "theorem", "continuous_evalf", ["bounded_continuous_function"]], ["add", "theorem", "continuous_evalx", ["bounded_continuous_function"]], ["add", "theorem", "dist_coe_le_dist", ["bounded_continuous_function"]], ["add", "theorem", "dist_eq", ["bounded_continuous_function"]], ["add", "theorem", "dist_le", ["bounded_continuous_function"]], ["add", "theorem", "dist_set_exists", ["bounded_continuous_function"]], ["add", "theorem", "dist_zero_of_empty", ["bounded_continuous_function"]], ["add", "theorem", "equicontinuous_of_continuity_modulus", ["bounded_continuous_function"]], ["add", "theorem", "ext", ["bounded_continuous_function"]], ["add", "theorem", "forall_coe_zero_iff_zero", ["bounded_continuous_function"]], ["add", "def", "mk_of_compact", ["bounded_continuous_function"]], ["add", "def", "mk_of_discrete", ["bounded_continuous_function"]], ["add", "theorem", "norm_coe_le_norm", ["bounded_continuous_function"]], ["add", "theorem", "norm_def", ["bounded_continuous_function"]], ["add", "theorem", "norm_le", ["bounded_continuous_function"]], ["add", "def", "bounded_continuous_function", []], ["add", "theorem", "continuous_of_lipschitz", []], ["add", "theorem", "continuous_of_locally_uniform_limit_of_continuous", []], ["add", "theorem", "continuous_of_uniform_limit_of_continuous", []]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "compact_iff_compact_space", []], ["add", "theorem", "continuous_of_discrete_topology", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "totally_bounded_empty", []]]}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": [["add", "theorem", "coe_nonneg", ["ennreal"]], ["add", "theorem", "coe_pos", ["ennreal"]], ["add", "theorem", "lt_iff_exists_rat_btwn", ["ennreal"]], ["add", "theorem", "lt_iff_exists_real_btwn", ["ennreal"]]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["add", "theorem", "of_real_add", ["nnreal"]], ["del", "theorem", "of_real_add_of_real", ["nnreal"]], ["mod", "theorem", "of_real_eq_zero", ["nnreal"]], ["add", "theorem", "of_real_lt_of_real_iff'", ["nnreal"]], ["mod", "theorem", "of_real_lt_of_real_iff", ["nnreal"]], ["mod", "theorem", "of_real_of_nonpos", ["nnreal"]], ["add", "theorem", "of_real_pos", ["nnreal"]], ["del", "theorem", "zero_lt_of_real", ["nnreal"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "range_const_subset", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "of_fintype", ["set", "finite"]]]}]}, {"timestamp": 1546423937, "sha": "dcd0466d", "message": "feat(analysis/topology): complete sets, minor modifications (#557)", "changes": [{"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_closed_of_closure_subset", []], ["mod", "theorem", "mem_closure_of_tendsto", []], ["add", "theorem", "mem_of_closed_of_tendsto'", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["del", "theorem", "Inf_of_Inf_of_monotone_of_continuous", []], ["add", "theorem", "Inf_of_continuous'", []], ["add", "theorem", "Inf_of_continuous", []], ["del", "theorem", "Sup_of_Sup_of_monotone_of_continuous", []], ["add", "theorem", "Sup_of_continuous'", []], ["add", "theorem", "Sup_of_continuous", []], ["add", "theorem", "ge_of_tendsto", []], ["add", "theorem", "infi_of_continuous", []], ["del", "theorem", "infi_of_infi_of_monotone_of_continuous", []], ["mod", "theorem", "le_of_tendsto", []], ["add", "theorem", "le_of_tendsto_of_tendsto", []], ["add", "theorem", "supr_of_continuous", []], ["del", "theorem", "supr_of_supr_of_monotone_of_continuous", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "compact_iff_totally_bounded_complete", []], ["del", "theorem", "compact_of_totally_bounded_complete", []], ["del", "theorem", "complete_of_compact_set", []], ["del", "theorem", "complete_of_is_closed", []], ["add", "theorem", "complete_space_of_is_complete_univ", []], ["add", "theorem", "complete_univ", []], ["add", "theorem", "is_closed_of_is_complete", []], ["add", "def", "is_complete", []], ["add", "theorem", "is_complete_image_iff", []], ["add", "theorem", "is_complete_of_is_closed", []]]}]}, {"timestamp": 1546419450, "sha": "f59f5d55", "message": "feat(data/real/ennreal): minor additions to ennreal (#558)", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": [["add", "theorem", "add_lt_add_iff_right", ["ennreal"]], ["add", "theorem", "add_lt_top", ["ennreal"]], ["add", "theorem", "bit0_eq_top_iff", ["ennreal"]], ["add", "theorem", "bit0_eq_zero_iff", ["ennreal"]], ["add", "theorem", "bit0_inj", ["ennreal"]], ["add", "theorem", "bit1_eq_one_iff", ["ennreal"]], ["add", "theorem", "bit1_eq_top_iff", ["ennreal"]], ["add", "theorem", "bit1_inj", ["ennreal"]], ["add", "theorem", "bit1_ne_zero", ["ennreal"]], ["add", "theorem", "coe_bit0", ["ennreal"]], ["add", "theorem", "coe_bit1", ["ennreal"]], ["mod", "theorem", "coe_div", ["ennreal"]], ["add", "theorem", "coe_inv", ["ennreal"]], ["mod", "theorem", "div_le_iff_le_mul", ["ennreal"]], ["mod", "theorem", "div_pos_iff", ["ennreal"]], ["add", "theorem", "div_zero_iff", ["ennreal"]], ["add", "theorem", "exists_inv_nat_lt", ["ennreal"]], ["add", "theorem", "half_lt_self", ["ennreal"]], ["add", "theorem", "half_pos", ["ennreal"]], ["del", "theorem", "inv_coe", ["ennreal"]], ["mod", "theorem", "inv_eq_top", ["ennreal"]], ["mod", "theorem", "inv_eq_zero", ["ennreal"]], ["mod", "theorem", "inv_inv", ["ennreal"]], ["mod", "theorem", "inv_ne_top", ["ennreal"]], ["mod", "theorem", "inv_ne_zero", ["ennreal"]], ["add", "theorem", "mul_eq_top", ["ennreal"]], ["add", "theorem", "mul_eq_zero", ["ennreal"]], ["add", "theorem", "sub_eq_zero_iff_le", ["ennreal"]], ["add", "theorem", "zero_lt_sub_iff_lt", ["ennreal"]]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["mod", "theorem", "add_halves", ["nnreal"]], ["add", "theorem", "half_lt_self", ["nnreal"]], ["mod", "theorem", "of_real_le_of_real_iff", ["nnreal"]], ["add", "theorem", "of_real_lt_of_real_iff", ["nnreal"]]]}]}, {"timestamp": 1546411177, "sha": "50583b9e", "message": "feat(algebra/order): additional theorems on cmp", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "cmp_compares", []], ["add", "theorem", "cmp_swap", []], ["add", "theorem", "or_else_eq_lt", ["ordering"]], ["add", "theorem", "swap_or_else", ["ordering"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "def", "lift", ["decidable_linear_order"]]]}]}, {"timestamp": 1545965364, "sha": "17d62630", "message": "refactor(category_theory): minimize the amount of universe annotations in category_theory (#552)", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["mod", "theorem", "assoc_symm", ["category_theory", "category"]], ["mod", "def", "large_category", ["category_theory"]], ["mod", "def", "small_category", ["category_theory"]]]}, {"oldPath": "category_theory/comma.lean", "newPath": "category_theory/comma.lean", "changes": []}, {"oldPath": "category_theory/const.lean", "newPath": "category_theory/const.lean", "changes": []}, {"oldPath": "category_theory/discrete_category.lean", "newPath": "category_theory/discrete_category.lean", "changes": []}, {"oldPath": "category_theory/eq_to_hom.lean", "newPath": "category_theory/eq_to_hom.lean", "changes": []}, {"oldPath": "category_theory/equivalence.lean", "newPath": "category_theory/equivalence.lean", "changes": [["mod", "structure", "equivalence", ["category_theory"]], ["mod", "def", "obj_preimage", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": []}, {"oldPath": "category_theory/full_subcategory.lean", "newPath": "category_theory/full_subcategory.lean", "changes": []}, {"oldPath": "category_theory/fully_faithful.lean", "newPath": "category_theory/fully_faithful.lean", "changes": []}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["mod", "structure", "functor", ["category_theory"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": []}, {"oldPath": "category_theory/groupoid.lean", "newPath": "category_theory/groupoid.lean", "changes": [["mod", "def", "large_groupoid", ["category_theory"]], ["mod", "def", "small_groupoid", ["category_theory"]]]}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["mod", "structure", "iso", ["category_theory"]]]}, {"oldPath": "category_theory/limits/cones.lean", "newPath": "category_theory/limits/cones.lean", "changes": []}, {"oldPath": "category_theory/limits/functor_category.lean", "newPath": "category_theory/limits/functor_category.lean", "changes": [["mod", "def", "functor_category_is_colimit_cocone", ["category_theory", "limits"]]]}, {"oldPath": "category_theory/limits/limits.lean", "newPath": "category_theory/limits/limits.lean", "changes": [["mod", "theorem", "map_post", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_map'", ["category_theory", "limits", "colimit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_faithful", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "map_post", ["category_theory", "limits", "limit"]], ["mod", "theorem", "map_pre'", ["category_theory", "limits", "limit"]], ["mod", "theorem", "pre_post", ["category_theory", "limits", "limit"]]]}, {"oldPath": "category_theory/limits/preserves.lean", "newPath": "category_theory/limits/preserves.lean", "changes": []}, {"oldPath": "category_theory/limits/types.lean", "newPath": "category_theory/limits/types.lean", "changes": []}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "category_theory/natural_isomorphism.lean", "changes": [["mod", "def", "ulift_down_up", ["category_theory", "functor"]], ["mod", "def", "ulift_up_down", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": []}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": []}, {"oldPath": "category_theory/pempty.lean", "newPath": "category_theory/pempty.lean", "changes": []}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": []}, {"oldPath": "category_theory/punit.lean", "newPath": "category_theory/punit.lean", "changes": []}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": []}, {"oldPath": "category_theory/whiskering.lean", "newPath": "category_theory/whiskering.lean", "changes": []}, {"oldPath": "category_theory/yoneda.lean", "newPath": "category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1545853548, "sha": "a71628aa", "message": "feat(algebra/order,...): material on orders (#554)", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "le_of_forall_le'", []], ["add", "theorem", "le_of_forall_lt'", []]]}, {"oldPath": "algebra/order_functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["mod", "theorem", "le_max_iff", []], ["mod", "theorem", "le_min_iff", []], ["mod", "theorem", "lt_max_iff", []], ["mod", "theorem", "lt_min_iff", []], ["mod", "theorem", "max_le_iff", []], ["mod", "theorem", "max_lt_iff", []], ["mod", "theorem", "min_le_iff", []], ["mod", "theorem", "min_lt_iff", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "add_lt_add_iff_right", ["with_top"]], ["add", "theorem", "add_lt_top", ["with_top"]]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_eq_top_iff", ["with_top"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "ne_bot_of_gt", ["lattice"]], ["add", "theorem", "ne_top_of_lt", ["lattice"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["add", "theorem", "lt_inf_iff", ["lattice"]], ["add", "theorem", "sup_lt_iff", ["lattice"]]]}]}, {"timestamp": 1545682341, "sha": "a04c7e20", "message": "feat(analysis/topology): miscellaneous topology (#484)\n* miscellaneous topology\n* C is a proper metric space\n* Sum of metric spaces is a def instead of instance\n* refactor(analysis): shorten/simplify proofs", "changes": [{"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": [["add", "def", "real_prod_homeo", ["complex"]]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "closed_ball_Icc", []], ["add", "def", "metric_space_sum", []], ["add", "theorem", "dist_eq", ["prod"]], ["add", "theorem", "one_dist_le'", ["sum"]], ["add", "theorem", "one_dist_le", ["sum"]]]}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["del", "theorem", "compact_of_closed", []], ["add", "theorem", "compact_prod", []], ["del", "theorem", "compact_univ", []], ["add", "theorem", "compact_image", ["homeomorph"]], ["add", "theorem", "compact_preimage", ["homeomorph"]]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "compact_Union_of_compact", []], ["add", "theorem", "compact_of_closed", []], ["add", "theorem", "compact_union_of_compact", []], ["add", "theorem", "compact_univ", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "Inf_mem_closure", []], ["add", "theorem", "Inf_mem_of_is_closed", []], ["add", "theorem", "Inf_of_Inf_of_monotone_of_continuous", []], ["add", "theorem", "Sup_mem_closure", []], ["add", "theorem", "Sup_mem_of_is_closed", []], ["add", "theorem", "Sup_of_Sup_of_monotone_of_continuous", []], ["add", "theorem", "bdd_above_of_compact", []], ["add", "theorem", "bdd_below_of_compact", []], ["add", "theorem", "cInf_mem_closure", []], ["add", "theorem", "cInf_mem_of_is_closed", []], ["add", "theorem", "cInf_of_cInf_of_monotone_of_continuous", []], ["add", "theorem", "cSup_mem_closure", []], ["add", "theorem", "cSup_mem_of_is_closed", []], ["add", "theorem", "cSup_of_cSup_of_monotone_of_continuous", []], ["add", "theorem", "cinfi_of_cinfi_of_monotone_of_continuous", []], ["add", "theorem", "csupr_of_csupr_of_monotone_of_continuous", []], ["add", "theorem", "exists_forall_ge_of_compact_of_continuous", []], ["add", "theorem", "exists_forall_le_of_compact_of_continuous", []], ["add", "theorem", "infi_of_infi_of_monotone_of_continuous", []], ["add", "theorem", "mem_closure_of_is_glb", []], ["add", "theorem", "mem_closure_of_is_lub", []], ["add", "theorem", "mem_of_is_glb_of_is_closed", []], ["add", "theorem", "mem_of_is_lub_of_is_closed", []], ["add", "theorem", "supr_of_supr_of_monotone_of_continuous", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "open_of_uniformity_sum_aux", []], ["add", "theorem", "uniformity", ["sum"]], ["add", "def", "sum", ["uniform_space", "core"]], ["add", "theorem", "uniformity_sum_of_open_aux", []], ["add", "theorem", "union_mem_uniformity_sum", []]]}, {"oldPath": "data/complex/basic.lean", "newPath": "data/complex/basic.lean", "changes": [["add", "def", "real_prod_equiv", ["complex"]], ["add", "theorem", "real_prod_equiv_apply", ["complex"]], ["add", "theorem", "real_prod_equiv_symm_im", ["complex"]], ["add", "theorem", "real_prod_equiv_symm_re", ["complex"]]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["del", "theorem", "image_eq_empty", ["set"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "exists_mem_of_nonempty", ["set"]], ["add", "theorem", "image_eq_empty", ["set"]], ["add", "theorem", "range_eq_empty", ["set"]], ["add", "theorem", "univ_eq_empty_iff", ["set"]], ["add", "theorem", "univ_ne_empty", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_univ", ["set"]]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "def", "has_Inf_to_nonempty", ["lattice"]], ["add", "def", "has_Sup_to_nonempty", ["lattice"]]]}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "bdd_above_Int1", []], ["del", "theorem", "bdd_above_Int2", []], ["mod", "theorem", "bdd_above_empty", []], ["mod", "theorem", "bdd_above_finite", []], ["mod", "theorem", "bdd_above_finite_union", []], ["add", "theorem", "bdd_above_inter_left", []], ["add", "theorem", "bdd_above_inter_right", []], ["add", "theorem", "bdd_above_of_bdd_above_of_monotone", []], ["del", "theorem", "bdd_below_Int1", []], ["del", "theorem", "bdd_below_Int2", []], ["mod", "theorem", "bdd_below_empty", []], ["mod", "theorem", "bdd_below_finite", []], ["mod", "theorem", "bdd_below_finite_union", []], ["add", "theorem", "bdd_below_inter_left", []], ["add", "theorem", "bdd_below_inter_right", []], ["add", "theorem", "bdd_below_of_bdd_below_of_monotone", []], ["del", "theorem", "cInf_of_in_of_le", ["lattice"]], ["add", "theorem", "cInf_of_mem_of_le", ["lattice"]], ["del", "theorem", "cSup_of_in_of_le", ["lattice"]], ["add", "theorem", "cSup_of_mem_of_le", ["lattice"]], ["add", "theorem", "cinfi_le", ["lattice"]], ["add", "theorem", "cinfi_le_cinfi", ["lattice"]], ["add", "theorem", "csupr_le", ["lattice"]], ["add", "theorem", "csupr_le_csupr", ["lattice"]], ["add", "theorem", "is_glb_cInf", ["lattice"]], ["add", "theorem", "is_lub_cSup", ["lattice"]], ["add", "theorem", "le_cinfi", ["lattice"]], ["add", "theorem", "le_csupr", ["lattice"]]]}]}, {"timestamp": 1545441055, "sha": "3eb7424a", "message": "refactor(data/set/basic): remove unused hypotheses in union_inter_cancel_* (#551)", "changes": [{"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "union_inter_cancel_left", ["set"]], ["mod", "theorem", "union_inter_cancel_right", ["set"]]]}]}, {"timestamp": 1545365156, "sha": "cdab35d9", "message": "fix(category_theory/punit): fix regression (#550)", "changes": [{"oldPath": "category_theory/punit.lean", "newPath": "category_theory/punit.lean", "changes": [["add", "theorem", "map_app", ["category_theory", "functor", "of"]], ["add", "theorem", "obj_map", ["category_theory", "functor", "of"]], ["add", "theorem", "obj_obj", ["category_theory", "functor", "of"]], ["add", "def", "of", ["category_theory", "functor"]]]}]}, {"timestamp": 1545361921, "sha": "b11b83b2", "message": "feat(data/list/basic): rotate a list (#542)", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "drop_all", ["list"]], ["add", "theorem", "drop_append_of_le_length", ["list"]], ["add", "theorem", "length_rotate'", ["list"]], ["add", "theorem", "length_rotate", ["list"]], ["add", "theorem", "nth_append", ["list"]], ["add", "theorem", "nth_concat_length:", ["list"]], ["add", "theorem", "nth_le_append", ["list"]], ["add", "theorem", "nth_le_repeat", ["list"]], ["add", "theorem", "nth_le_singleton", ["list"]], ["add", "theorem", "prod_rotate_eq_one_of_prod_eq_one", ["list"]], ["add", "theorem", "rotate'_cons_succ", ["list"]], ["add", "theorem", "rotate'_eq_take_append_drop", ["list"]], ["add", "theorem", "rotate'_length", ["list"]], ["add", "theorem", "rotate'_length_mul", ["list"]], ["add", "theorem", "rotate'_mod", ["list"]], ["add", "theorem", "rotate'_nil", ["list"]], ["add", "theorem", "rotate'_rotate'", ["list"]], ["add", "theorem", "rotate'_zero", ["list"]], ["add", "theorem", "rotate_cons_succ", ["list"]], ["add", "theorem", "rotate_eq_rotate'", ["list"]], ["add", "theorem", "rotate_eq_take_append_drop", ["list"]], ["add", "theorem", "rotate_length", ["list"]], ["add", "theorem", "rotate_length_mul", ["list"]], ["add", "theorem", "rotate_mod", ["list"]], ["add", "theorem", "rotate_nil", ["list"]], ["add", "theorem", "rotate_rotate", ["list"]], ["add", "theorem", "rotate_zero", ["list"]], ["mod", "theorem", "take_all", ["list"]], ["add", "theorem", "take_append_of_le_length", ["list"]]]}, {"oldPath": "data/list/defs.lean", "newPath": "data/list/defs.lean", "changes": [["add", "def", "rotate'", ["list"]], ["add", "def", "rotate", ["list"]]]}, {"oldPath": "data/nat/modeq.lean", "newPath": "data/nat/modeq.lean", "changes": [["add", "theorem", "nth_rotate", ["list"]], ["add", "theorem", "rotate_eq_self_iff_eq_repeat", ["list"]]]}]}, {"timestamp": 1545359706, "sha": "d7cea061", "message": "feat (ring_theory/noetherian) various lemmas (#548)", "changes": [{"oldPath": "ring_theory/noetherian.lean", "newPath": "ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_of_fg_of_noetherian", []], ["add", "theorem", "is_noetherian_of_linear_equiv", []], ["add", "theorem", "is_noetherian_of_surjective", []], ["add", "theorem", "is_noetherian_pi", []], ["add", "theorem", "is_noetherian_prod", []], ["add", "theorem", "is_noetherian_ring_of_ring_equiv", []], ["add", "theorem", "is_noetherian_ring_of_surjective", []], ["add", "theorem", "is_noetherian_submodule", []], ["add", "theorem", "is_noetherian_submodule_left", []], ["add", "theorem", "is_noetherian_submodule_right", []], ["add", "theorem", "fg_bot", ["submodule"]], ["add", "theorem", "fg_map", ["submodule"]], ["add", "theorem", "fg_of_fg_map_of_fg_inf_ker", ["submodule"]], ["add", "theorem", "fg_prod", ["submodule"]], ["add", "theorem", "fg_sup", ["submodule"]]]}]}, {"timestamp": 1545347640, "sha": "3762d96a", "message": "feat(ring_theory/ideals): lift for quotient rings (#529)", "changes": [{"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["add", "theorem", "ext", ["ideal"]], ["add", "def", "is_coprime", ["ideal"]], ["add", "theorem", "is_coprime_def", ["ideal"]], ["add", "theorem", "is_coprime_self", ["ideal"]], ["add", "theorem", "mem_span_pair", ["ideal"]], ["add", "def", "lift", ["ideal", "quotient"]], ["add", "theorem", "lift_mk", ["ideal", "quotient"]]]}]}, {"timestamp": 1545347571, "sha": "73933b73", "message": "feat(category_theory): assorted small changes from the old limits PR (#512)", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": [["add", "def", "is_ring_hom_pi", ["pi"]]]}, {"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["add", "theorem", "bundled_hom_coe", ["category_theory"]], ["add", "theorem", "assoc_symm", ["category_theory", "category"]]]}, {"oldPath": null, "newPath": "category_theory/discrete_category.lean", "changes": [["add", "theorem", "functor_map_id", ["category_theory", "discrete"]], ["add", "def", "lift", ["category_theory", "discrete"]], ["add", "def", "discrete", ["category_theory"]], ["add", "def", "of_function", ["category_theory", "functor"]], ["add", "def", "of_function", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/examples/rings.lean", "newPath": "category_theory/examples/rings.lean", "changes": [["mod", "def", "forget_to_CommMon", ["category_theory", "examples", "CommRing"]], ["add", "theorem", "CommRing_hom_coe_app", ["category_theory", "examples"]], ["del", "def", "is_comm_ring_hom", ["category_theory", "examples"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["del", "def", "map", ["category_theory", "examples"]], ["del", "def", "map_id", ["category_theory", "examples"]], ["del", "theorem", "map_id_obj", ["category_theory", "examples"]], ["del", "def", "map_iso", ["category_theory", "examples"]], ["del", "def", "map_iso_id", ["category_theory", "examples"]], ["add", "def", "map", ["topological_space", "opens"]], ["add", "def", "map_id", ["topological_space", "opens"]], ["add", "theorem", "map_id_obj", ["topological_space", "opens"]], ["add", "def", "map_iso", ["topological_space", "opens"]], ["add", "def", "map_iso_id", ["topological_space", "opens"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": []}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": []}, {"oldPath": "category_theory/limits/cones.lean", "newPath": "category_theory/limits/cones.lean", "changes": []}, {"oldPath": "category_theory/limits/limits.lean", "newPath": "category_theory/limits/limits.lean", "changes": [["add", "theorem", "desc_extend", ["category_theory", "limits", "colimit"]], ["add", "theorem", "lift_extend", ["category_theory", "limits", "limit"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": []}, {"oldPath": "category_theory/pempty.lean", "newPath": "category_theory/pempty.lean", "changes": [["mod", "def", "empty", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/punit.lean", "newPath": "category_theory/punit.lean", "changes": [["del", "theorem", "map_app", ["category_theory", "functor", "of"]], ["del", "theorem", "obj_map", ["category_theory", "functor", "of"]], ["del", "theorem", "obj_obj", ["category_theory", "functor", "of"]], ["del", "def", "of", ["category_theory", "functor"]]]}, {"oldPath": null, "newPath": "data/ulift.lean", "changes": [["add", "theorem", "constant", ["plift", "rec"]], ["add", "theorem", "constant", ["ulift", "rec"]]]}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": [["add", "theorem", "ext", ["plift"]]]}]}, {"timestamp": 1545298282, "sha": "1854dd93", "message": "feat(group_theory/order_of_element): lemmas about card of subgroups and normalizer (#545)", "changes": [{"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": [["add", "theorem", "card_eq_card_quotient_mul_card_subgroup", []], ["add", "theorem", "card_quotient_dvd_card", []], ["add", "theorem", "card_subgroup_dvd_card", []], ["add", "theorem", "card_trivial", []], ["add", "theorem", "conj_inj", []], ["add", "theorem", "mem_normalizer_fintype", []], ["add", "theorem", "order_of_eq_one_iff", []], ["add", "theorem", "order_of_one", []]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["mod", "def", "gmultiples", []], ["mod", "def", "gpowers", []], ["add", "def", "normalizer", ["is_subgroup"]], ["add", "theorem", "subset_normalizer", ["is_subgroup"]]]}]}, {"timestamp": 1545298212, "sha": "95bdce8c", "message": "feat(data/set/finite): card_range_of_injective (#543)", "changes": [{"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "card_range_of_injective", ["set"]]]}]}, {"timestamp": 1545298175, "sha": "0882f8eb", "message": "feat(data/fintype): exists_ne_of_card_gt_one (#544)", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_vector", []], ["add", "theorem", "exists_ne_of_card_gt_one", ["fintype"]]]}]}, {"timestamp": 1545298109, "sha": "43353805", "message": "feat(data/vector2): vector_zero_subsingleton (#547)", "changes": [{"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": []}]}, {"timestamp": 1545293719, "sha": "402e71ef", "message": "feat(order/filter): tendsto_at_top_at_top (#540)", "changes": [{"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "tendsto_at_top_at_top", ["filter"]]]}]}, {"timestamp": 1545293686, "sha": "f64b9aae", "message": "feat(data/finsupp): frange (#537)", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "def", "frange", ["finsupp"]], ["add", "theorem", "frange_single", ["finsupp"]], ["add", "theorem", "mem_frange", ["finsupp"]], ["add", "theorem", "zero_not_mem_frange", ["finsupp"]]]}]}, {"timestamp": 1545293619, "sha": "bc21f62e", "message": "feat(ring_theory/ideal_operations): correspondence under surjection (#534)", "changes": [{"oldPath": "ring_theory/ideal_operations.lean", "newPath": "ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "comap_map_of_surjective", ["ideal"]], ["add", "def", "le_order_embedding_of_surjective", ["ideal"]], ["add", "def", "lt_order_embedding_of_surjective", ["ideal"]], ["add", "theorem", "map_comap_of_surjective", ["ideal"]], ["add", "theorem", "mem_image_of_mem_map_of_surjective", ["ideal"]], ["add", "def", "order_iso_of_surjective", ["ideal"]]]}]}, {"timestamp": 1545293572, "sha": "f7697ce3", "message": "feat(data/equiv/algebra): ring_equiv (#533)", "changes": [{"oldPath": "data/equiv/algebra.lean", "newPath": "data/equiv/algebra.lean", "changes": [["add", "structure", "ring_equiv", []]]}]}, {"timestamp": 1545293520, "sha": "fc90e009", "message": "feat(ring_theory/subring) various lemmas (#532)\nnew lemmas:\n- is_ring_hom.is_subring_set_range\n- ring.in_closure.rec_on\n- ring.closure_mono\nchanged:\n- ring.exists_list_of_mem_closure", "changes": [{"oldPath": "ring_theory/subring.lean", "newPath": "ring_theory/subring.lean", "changes": [["add", "theorem", "closure_mono", ["ring"]]]}]}, {"timestamp": 1545293459, "sha": "35ed7f4c", "message": "feat(data/int/basic) int.cast is ring hom (#531)", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}]}, {"timestamp": 1545281826, "sha": "ddd13762", "message": "fix(group_theory/coset): remove bad attributes", "changes": [{"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": []}]}, {"timestamp": 1545277245, "sha": "caa20760", "message": "feat(command): Add `#where` command, dumping environment info (#489)\nThe command tells you your current namespace (wherever you write it),\nthe current `include`s, and the current `variables` which have been\nused at least once.", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/where.lean", "changes": [["add", "def", "inflate", ["where"]], ["add", "def", "select_for_which", ["where"]]]}]}, {"timestamp": 1545094272, "sha": "293ba83f", "message": "feat(category_theory/examples/topological_spaces): limits and colimits (#518)", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": []}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["add", "def", "colimit", ["category_theory", "examples", "Top"]], ["add", "def", "colimit_is_colimit", ["category_theory", "examples", "Top"]], ["add", "def", "limit", ["category_theory", "examples", "Top"]], ["add", "def", "limit_is_limit", ["category_theory", "examples", "Top"]]]}, {"oldPath": "category_theory/limits/limits.lean", "newPath": "category_theory/limits/limits.lean", "changes": [["add", "def", "of_faithful", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_faithful", ["category_theory", "limits", "is_limit"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": []}]}, {"timestamp": 1545094132, "sha": "3d4297b3", "message": "feat(category_theory/eq_to_hom): equality of functors; more simp lemmas (#526)", "changes": [{"oldPath": null, "newPath": "category_theory/eq_to_hom.lean", "changes": [["add", "def", "eq_to_hom", ["category_theory"]], ["add", "theorem", "eq_to_hom_app", ["category_theory"]], ["add", "theorem", "eq_to_hom_map", ["category_theory"]], ["add", "theorem", "eq_to_hom_refl", ["category_theory"]], ["add", "theorem", "eq_to_hom_trans", ["category_theory"]], ["add", "theorem", "eq_to_hom_trans_assoc", ["category_theory"]], ["add", "theorem", "hom", ["category_theory", "eq_to_iso"]], ["add", "def", "eq_to_iso", ["category_theory"]], ["add", "theorem", "eq_to_iso_map", ["category_theory"]], ["add", "theorem", "eq_to_iso_refl", ["category_theory"]], ["add", "theorem", "eq_to_iso_trans", ["category_theory"]], ["add", "theorem", "congr_hom", ["category_theory", "functor"]], ["add", "theorem", "congr_obj", ["category_theory", "functor"]], ["add", "theorem", "ext", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": []}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["del", "def", "eq_to_hom", ["category_theory"]], ["del", "theorem", "eq_to_hom_refl", ["category_theory"]], ["del", "theorem", "eq_to_hom_trans", ["category_theory"]], ["del", "theorem", "hom", ["category_theory", "eq_to_iso"]], ["del", "def", "eq_to_iso", ["category_theory"]], ["del", "theorem", "eq_to_iso_refl", ["category_theory"]], ["del", "theorem", "eq_to_iso_trans", ["category_theory"]], ["del", "theorem", "eq_to_iso", ["category_theory", "functor"]]]}]}, {"timestamp": 1545093947, "sha": "76a4b157", "message": "feat(data/set/basic): make subtype_val_range a simp lemma (#524)", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "subtype_val_range", ["set"]]]}]}, {"timestamp": 1545059950, "sha": "2bc9354b", "message": "feat(data/nat/enat): extended natural numbers (#522)", "changes": [{"oldPath": null, "newPath": "data/nat/enat.lean", "changes": [["add", "theorem", "add_top", ["enat"]], ["add", "theorem", "coe_add", ["enat"]], ["add", "theorem", "coe_add_get", ["enat"]], ["add", "theorem", "coe_get", ["enat"]], ["add", "theorem", "coe_inj", ["enat"]], ["add", "theorem", "coe_le_coe", ["enat"]], ["add", "theorem", "coe_lt_coe", ["enat"]], ["add", "theorem", "coe_lt_top", ["enat"]], ["add", "theorem", "coe_one", ["enat"]], ["add", "theorem", "coe_zero", ["enat"]], ["add", "theorem", "dom_of_le_some", ["enat"]], ["add", "theorem", "get_add", ["enat"]], ["add", "theorem", "get_le_get", ["enat"]], ["add", "theorem", "get_one", ["enat"]], ["add", "theorem", "get_zero", ["enat"]], ["add", "theorem", "inf_eq_min", ["enat"]], ["add", "theorem", "pos_iff_one_le", ["enat"]], ["add", "theorem", "sup_eq_max", ["enat"]], ["add", "theorem", "top_add", ["enat"]], ["add", "def", "enat", []]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["add", "theorem", "get_eq_iff_eq_some", ["roption"]], ["add", "def", "get_or_else", ["roption"]], ["add", "theorem", "get_or_else_none", ["roption"]], ["add", "theorem", "get_or_else_some", ["roption"]], ["add", "theorem", "get_some", ["roption"]], ["add", "theorem", "some_get", ["roption"]], ["add", "theorem", "some_inj", ["roption"]]]}]}, {"timestamp": 1545059448, "sha": "418c1168", "message": "feat(data/polynomial): degree_map (#517)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_hom", ["finset"]], ["add", "theorem", "sum_hom", ["finset"]]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "is_group_hom", ["inv"]], ["add", "theorem", "to_is_monoid_hom", ["is_group_hom"]]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": [["add", "theorem", "is_group_hom", ["prod", "fst"]], ["add", "theorem", "is_monoid_hom", ["prod", "fst"]], ["add", "theorem", "is_group_hom", ["prod", "snd"]], ["add", "theorem", "is_monoid_hom", ["prod", "snd"]]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "data/complex/basic.lean", "newPath": "data/complex/basic.lean", "changes": []}, {"oldPath": "data/complex/exponential.lean", "newPath": "data/complex/exponential.lean", "changes": []}, {"oldPath": "data/dfinsupp.lean", "newPath": "data/dfinsupp.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": []}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "coeff_map", ["polynomial"]], ["mod", "theorem", "coeff_sum", ["polynomial"]], ["add", "theorem", "degree_map_eq", ["polynomial"]], ["add", "theorem", "degree_map_le", ["polynomial"]]]}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": []}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": []}, {"oldPath": "data/zmod/quadratic_reciprocity.lean", "newPath": "data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "linear_algebra/direct_sum_module.lean", "newPath": "linear_algebra/direct_sum_module.lean", "changes": []}]}, {"timestamp": 1545058025, "sha": "d947a3ae", "message": "refactor(analysis/topology/continuity): use subtype.val_injective (#525)", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}]}, {"timestamp": 1545050424, "sha": "21ce5318", "message": "fix(data/list): fix build", "changes": [{"oldPath": "data/equiv/list.lean", "newPath": "data/equiv/list.lean", "changes": []}, {"oldPath": "data/list/sigma.lean", "newPath": "data/list/sigma.lean", "changes": [["mod", "theorem", "nodupkeys_nil", ["list"]]]}]}, {"timestamp": 1545050103, "sha": "b4051585", "message": "feat(tactic/explode): improve readability & support proofs using 'suffices' (#516)\n* improve readability & support proofs using 'suffices'\n* feat(tactic/explode): improve readability & support proofs using 'suffices'", "changes": [{"oldPath": "tactic/explode.lean", "newPath": "tactic/explode.lean", "changes": []}]}, {"timestamp": 1545046544, "sha": "a4b699c7", "message": "feat(order/basic): antisymm_of_asymm", "changes": [{"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "def", "antisymm_of_asymm", []]]}]}, {"timestamp": 1545046542, "sha": "ebf3008b", "message": "feat(tactic/elide): hide subterms of complicated expressions", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "def", "hidden", []]]}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/elide.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1545046541, "sha": "b7d74c43", "message": "feat(data/list): list.chain' for empty chains", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "iff", ["list", "chain'"]], ["add", "theorem", "iff_mem", ["list", "chain'"]], ["add", "theorem", "imp", ["list", "chain'"]], ["add", "theorem", "chain'_iff_pairwise", ["list"]], ["add", "theorem", "chain'_map", ["list"]], ["add", "theorem", "chain'_map_of_chain'", ["list"]], ["add", "theorem", "chain'_of_chain'_map", ["list"]], ["add", "theorem", "chain'_of_pairwise", ["list"]], ["add", "theorem", "chain'_singleton", ["list"]], ["add", "theorem", "chain'_split", ["list"]], ["mod", "theorem", "iff_mem", ["list", "chain"]], ["mod", "theorem", "nodup_nil", ["list"]]]}, {"oldPath": "data/list/defs.lean", "newPath": "data/list/defs.lean", "changes": [["add", "def", "chain'", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": [["mod", "theorem", "sorted_nil", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "nodup_zero", ["multiset"]]]}]}, {"timestamp": 1545044510, "sha": "e9be5c18", "message": "fix(category/traversable/instances): fix build", "changes": [{"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": []}]}, {"timestamp": 1545043858, "sha": "53b08c1c", "message": "fix(*): untangle dependency hierarchy", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "category/traversable/basic.lean", "newPath": "category/traversable/basic.lean", "changes": []}, {"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": []}, {"oldPath": "core/data/list.lean", "newPath": null, "changes": [["del", "def", "partition_map", ["list"]]]}, {"oldPath": "core/default.lean", "newPath": null, "changes": []}, {"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["del", "inductive", "forall₂", ["list"]]]}, {"oldPath": "data/list/defs.lean", "newPath": "data/list/defs.lean", "changes": [["add", "inductive", "forall₂", ["list"]], ["add", "def", "partition_map", ["list"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option/basic.lean", "changes": [["del", "def", "filter", ["option"]], ["del", "def", "guard", ["option"]], ["del", "def", "iget", ["option"]], ["del", "theorem", "iget_some", ["option"]], ["del", "theorem", "is_none_iff_eq_none", ["option"]], ["del", "def", "lift_or_get", ["option"]], ["del", "theorem", "mem_def", ["option"]], ["del", "theorem", "mem_to_list", ["option"]], ["del", "inductive", "rel", ["option"]], ["del", "theorem", "some_inj", ["option"]], ["del", "def", "to_list", ["option"]]]}, {"oldPath": null, "newPath": "data/option/defs.lean", "changes": [["add", "def", "filter", ["option"]], ["add", "def", "guard", ["option"]], ["add", "def", "iget", ["option"]], ["add", "theorem", "iget_some", ["option"]], ["add", "theorem", "is_none_iff_eq_none", ["option"]], ["add", "def", "lift_or_get", ["option"]], ["add", "theorem", "mem_def", ["option"]], ["add", "theorem", "mem_to_list", ["option"]], ["add", "inductive", "rel", ["option"]], ["add", "theorem", "some_inj", ["option"]], ["add", "def", "to_list", ["option"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": []}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["mod", "theorem", "ext", ["prod"]]]}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": []}, {"oldPath": "meta/rb_map.lean", "newPath": "meta/rb_map.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": []}, {"oldPath": "tactic/auto_cases.lean", "newPath": "tactic/auto_cases.lean", "changes": []}, {"oldPath": "tactic/chain.lean", "newPath": "tactic/chain.lean", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/pi_instances.lean", "newPath": "tactic/pi_instances.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/simpa.lean", "changes": []}, {"oldPath": "tactic/squeeze.lean", "newPath": "tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1545038356, "sha": "3ee1071e", "message": "feat(data/polynomial): lemmas relating unit and irreducible with degree (#514)", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "coe_one", ["with_bot"]]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "one_lt_iff_ne_zero_and_ne_one", ["nat"]], ["add", "theorem", "add_eq_one_iff", ["nat", "with_bot"]], ["add", "theorem", "add_eq_zero_iff", ["nat", "with_bot"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "ne_one", ["nat", "prime"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "X_ne_zero", ["polynomial"]], ["add", "theorem", "coeff_X_zero", ["polynomial"]], ["add", "theorem", "coeff_mul_X_zero", ["polynomial"]], ["add", "theorem", "coeff_zero_eq_eval_zero", ["polynomial"]], ["add", "theorem", "degree_eq_zero_of_is_unit", ["polynomial"]], ["add", "theorem", "degree_pos_of_ne_zero_of_nonunit", ["polynomial"]], ["add", "theorem", "div_by_monic_one", ["polynomial"]], ["add", "theorem", "irreducible_of_degree_eq_one", ["polynomial"]], ["add", "theorem", "is_unit_iff_degree_eq_zero", ["polynomial"]], ["add", "theorem", "mod_by_monic_X", ["polynomial"]], ["add", "theorem", "mod_by_monic_one", ["polynomial"]], ["add", "theorem", "monic_X", ["polynomial"]], ["add", "theorem", "nat_degree_eq_of_degree_eq_some", ["polynomial"]], ["add", "theorem", "nat_degree_mul_eq", ["polynomial"]], ["add", "theorem", "zero_le_degree_iff", ["polynomial"]]]}, {"oldPath": "data/zmod/quadratic_reciprocity.lean", "newPath": "data/zmod/quadratic_reciprocity.lean", "changes": [["mod", "theorem", "prod_range_p_mul_q_filter_coprime_mod_p", ["quadratic_reciprocity_aux"]], ["mod", "theorem", "fermat_little", ["zmodp"]], ["mod", "def", "legendre_sym", ["zmodp"]], ["mod", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmodp"]], ["mod", "theorem", "legendre_sym_eq_pow", ["zmodp"]], ["mod", "theorem", "prod_range_prime_erase_zero", ["zmodp"]], ["mod", "theorem", "quadratic_reciprocity", ["zmodp"]], ["mod", "theorem", "wilsons_lemma", ["zmodp"]]]}, {"oldPath": "ring_theory/associated.lean", "newPath": "ring_theory/associated.lean", "changes": [["add", "theorem", "mk_one", ["associates"]], ["add", "theorem", "mk_pow", ["associates"]], ["add", "theorem", "irreducible_of_prime", []], ["add", "theorem", "is_unit_int", []], ["add", "theorem", "is_unit_pow", []], ["add", "theorem", "prime_iff_prime", ["nat"]], ["add", "theorem", "prime_iff_prime_int", ["nat"]], ["add", "theorem", "not_prime_one", []], ["add", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", []]]}]}, {"timestamp": 1545038128, "sha": "d4d05e35", "message": "feat(docs/extras/tactic_writing): Tactic writing tutorial (#513)", "changes": [{"oldPath": "docs/extras.md", "newPath": "docs/extras.md", "changes": []}, {"oldPath": null, "newPath": "docs/extras/tactic_writing.md", "changes": []}]}, {"timestamp": 1545038066, "sha": "e6065a7e", "message": "chore(tactic/interactive): make squeeze_simp available by default (#521)", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1545037733, "sha": "b140a079", "message": "chore(category_theory/limits/limits): Add missing lemmas (#520)", "changes": [{"oldPath": "category_theory/limits/limits.lean", "newPath": "category_theory/limits/limits.lean", "changes": [["add", "theorem", "pre_id", ["category_theory", "limits", "colimit"]], ["add", "theorem", "pre_map'", ["category_theory", "limits", "colimit"]], ["add", "theorem", "id_pre", ["category_theory", "limits", "limit"]], ["add", "theorem", "map_pre'", ["category_theory", "limits", "limit"]]]}]}, {"timestamp": 1545037168, "sha": "218fe1f4", "message": "feat(category_theory/opposites): opposites of full and faithful functors (#504)", "changes": [{"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": [["add", "theorem", "preimage_id", ["category_theory", "functor"]]]}]}, {"timestamp": 1544877223, "sha": "9506e6c6", "message": "feat(category_theory): functoriality of (co)cones (#507)", "changes": [{"oldPath": "category_theory/limits/cones.lean", "newPath": "category_theory/limits/cones.lean", "changes": [["add", "def", "cocones", ["category_theory"]], ["add", "theorem", "cocones_map", ["category_theory"]], ["add", "theorem", "cocones_obj", ["category_theory"]], ["add", "def", "cones", ["category_theory"]], ["add", "theorem", "cones_map", ["category_theory"]], ["add", "theorem", "cones_obj", ["category_theory"]], ["mod", "def", "cocones", ["category_theory", "functor"]], ["mod", "def", "cones", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/limits/limits.lean", "newPath": "category_theory/limits/limits.lean", "changes": [["add", "def", "colim_coyoneda", ["category_theory", "limits"]], ["add", "def", "lim_yoneda", ["category_theory", "limits"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": [["add", "theorem", "op_comp_app", ["category_theory", "functor", "category"]], ["add", "theorem", "op_id_app", ["category_theory", "functor", "category"]]]}]}, {"timestamp": 1544877126, "sha": "072e1ba5", "message": "feat(category_theory/const): Constant functor of object from punit (#508)", "changes": [{"oldPath": "category_theory/punit.lean", "newPath": "category_theory/punit.lean", "changes": [["add", "theorem", "map_app", ["category_theory", "functor", "of"]], ["add", "theorem", "obj_map", ["category_theory", "functor", "of"]], ["add", "theorem", "obj_obj", ["category_theory", "functor", "of"]], ["add", "def", "of", ["category_theory", "functor"]], ["del", "def", "of_obj", ["category_theory", "functor"]], ["del", "theorem", "of_obj_obj", ["category_theory", "functor"]]]}]}, {"timestamp": 1544877084, "sha": "b1d05010", "message": "fix(analysis/topology/topological_space): Improve the lattice structure on opens (#511)", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "gi_choice_val", ["topological_space", "opens"]]]}]}, {"timestamp": 1544876292, "sha": "1f72be1f", "message": "feat(category_theory/whiskering): simp-lemmas for unitors and associators (#505)", "changes": [{"oldPath": "category_theory/whiskering.lean", "newPath": "category_theory/whiskering.lean", "changes": [["add", "theorem", "associator_hom_app", ["category_theory", "functor"]], ["add", "theorem", "associator_inv_app", ["category_theory", "functor"]], ["add", "theorem", "left_unitor_hom_app", ["category_theory", "functor"]], ["add", "theorem", "left_unitor_inv_app", ["category_theory", "functor"]], ["add", "theorem", "right_unitor_hom_app", ["category_theory", "functor"]], ["add", "theorem", "right_unitor_inv_app", ["category_theory", "functor"]]]}]}, {"timestamp": 1544876269, "sha": "28909a89", "message": "feat(category_theory/commas): add simp-lemmas for comma categories (#503)", "changes": [{"oldPath": "category_theory/comma.lean", "newPath": "category_theory/comma.lean", "changes": [["add", "theorem", "comp_left", ["category_theory", "comma"]], ["add", "theorem", "comp_right", ["category_theory", "comma"]], ["add", "def", "map_left_comp", ["category_theory", "comma"]], ["add", "theorem", "map_left_comp_hom_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_left_comp_hom_app_right", ["category_theory", "comma"]], ["add", "theorem", "map_left_comp_inv_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_left_comp_inv_app_right", ["category_theory", "comma"]], ["add", "def", "map_left_id", ["category_theory", "comma"]], ["add", "theorem", "map_left_id_hom_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_left_id_hom_app_right", ["category_theory", "comma"]], ["add", "theorem", "map_left_id_inv_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_left_id_inv_app_right", ["category_theory", "comma"]], ["add", "theorem", "map_left_map_left", ["category_theory", "comma"]], ["add", "theorem", "map_left_map_right", ["category_theory", "comma"]], ["add", "theorem", "map_left_obj_hom", ["category_theory", "comma"]], ["add", "theorem", "map_left_obj_left", ["category_theory", "comma"]], ["add", "theorem", "map_left_obj_right", ["category_theory", "comma"]], ["add", "def", "map_right_comp", ["category_theory", "comma"]], ["add", "theorem", "map_right_comp_hom_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_right_comp_hom_app_right", ["category_theory", "comma"]], ["add", "theorem", "map_right_comp_inv_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_right_comp_inv_app_right", ["category_theory", "comma"]], ["add", "def", "map_right_id", ["category_theory", "comma"]], ["add", "theorem", "map_right_id_hom_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_right_id_hom_app_right", ["category_theory", "comma"]], ["add", "theorem", "map_right_id_inv_app_left", ["category_theory", "comma"]], ["add", "theorem", "map_right_id_inv_app_right", ["category_theory", "comma"]], ["add", "theorem", "map_right_map_left", ["category_theory", "comma"]], ["add", "theorem", "map_right_map_right", ["category_theory", "comma"]], ["add", "theorem", "map_right_obj_hom", ["category_theory", "comma"]], ["add", "theorem", "map_right_obj_left", ["category_theory", "comma"]], ["add", "theorem", "map_right_obj_right", ["category_theory", "comma"]]]}]}, {"timestamp": 1544463867, "sha": "3ddfc239", "message": "fix(order/basic): define preorder.lift lt by restriction\nThis makes it definitionally equal to `inv_image (<) f`, which appears\nfor example in the type of `inv_image.wf`.", "changes": [{"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}]}, {"timestamp": 1544013933, "sha": "257fd84f", "message": "doc(data/list/basic): improve docstrings [ci-skip]", "changes": [{"oldPath": "data/list/defs.lean", "newPath": "data/list/defs.lean", "changes": []}]}, {"timestamp": 1544000127, "sha": "b0d47ead", "message": "refactor(set_theory/ordinal): minor simplifications", "changes": [{"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["mod", "theorem", "aux", ["initial_seg", "antisymm"]], ["mod", "theorem", "enum_lt", ["ordinal"]]]}]}, {"timestamp": 1544000046, "sha": "843a1c3a", "message": "fix(tactic/norm_num): uninstantiated mvars can confuse things", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1543999371, "sha": "94d9ac13", "message": "fix(finset): removing bad simp lemmas (#491)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "comm", ["finset", "insert"]], ["add", "theorem", "range_one", ["finset"]], ["mod", "theorem", "range_succ", ["finset"]]]}, {"oldPath": "data/nat/choose.lean", "newPath": "data/nat/choose.lean", "changes": []}, {"oldPath": "data/zmod/quadratic_reciprocity.lean", "newPath": "data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1543772183, "sha": "58564593", "message": "fix(category_theory/limits): add subsingleton instances in preserves.lean", "changes": [{"oldPath": "category_theory/limits/preserves.lean", "newPath": "category_theory/limits/preserves.lean", "changes": []}]}, {"timestamp": 1543772183, "sha": "af6ee092", "message": "fix(category_theory/limits): adding Type annotations in preserves.lean", "changes": [{"oldPath": "category_theory/limits/preserves.lean", "newPath": "category_theory/limits/preserves.lean", "changes": [["mod", "def", "preserves_colimits", ["category_theory", "limits"]], ["mod", "def", "preserves_colimits_of_shape", ["category_theory", "limits"]], ["mod", "def", "preserves_limits", ["category_theory", "limits"]], ["mod", "def", "preserves_limits_of_shape", ["category_theory", "limits"]], ["mod", "def", "reflects_colimits", ["category_theory", "limits"]], ["mod", "def", "reflects_colimits_of_shape", ["category_theory", "limits"]], ["mod", "def", "reflects_limits", ["category_theory", "limits"]], ["mod", "def", "reflects_limits_of_shape", ["category_theory", "limits"]]]}]}, {"timestamp": 1543772183, "sha": "74b65e21", "message": "fix(category_theory/limits): change argument order on\ncones.precompose/whisker", "changes": [{"oldPath": "category_theory/limits/cones.lean", "newPath": "category_theory/limits/cones.lean", "changes": [["mod", "def", "precompose", ["category_theory", "limits", "cocone"]], ["mod", "def", "whisker", ["category_theory", "limits", "cocone"]], ["mod", "def", "postcompose", ["category_theory", "limits", "cone"]], ["mod", "def", "whisker", ["category_theory", "limits", "cone"]]]}]}, {"timestamp": 1543772183, "sha": "4b0a82c3", "message": "feat(category_theory): preservation of (co)limits, (co)limits in functor categories", "changes": [{"oldPath": null, "newPath": "category_theory/limits/functor_category.lean", "changes": [["add", "theorem", "functor_w", ["category_theory", "limits", "cocone"]], ["add", "theorem", "functor_w", ["category_theory", "limits", "cone"]], ["add", "def", "evaluate_functor_category_colimit_cocone", ["category_theory", "limits"]], ["add", "def", "evaluate_functor_category_limit_cone", ["category_theory", "limits"]], ["add", "def", "functor_category_colimit_cocone", ["category_theory", "limits"]], ["add", "def", "functor_category_is_colimit_cocone", ["category_theory", "limits"]], ["add", "def", "functor_category_is_limit_cone", ["category_theory", "limits"]], ["add", "def", "functor_category_limit_cone", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "category_theory/limits/preserves.lean", "changes": [["add", "def", "preserves_colimit_of_preserves_colimit_cocone", ["category_theory", "limits"]], ["add", "def", "preserves_colimits", ["category_theory", "limits"]], ["add", "def", "preserves_colimits_of_shape", ["category_theory", "limits"]], ["add", "def", "preserves_limit_of_preserves_limit_cone", ["category_theory", "limits"]], ["add", "def", "preserves_limits", ["category_theory", "limits"]], ["add", "def", "preserves_limits_of_shape", ["category_theory", "limits"]], ["add", "def", "reflects_colimits", ["category_theory", "limits"]], ["add", "def", "reflects_colimits_of_shape", ["category_theory", "limits"]], ["add", "def", "reflects_limits", ["category_theory", "limits"]], ["add", "def", "reflects_limits_of_shape", ["category_theory", "limits"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["add", "theorem", "congr_app", ["category_theory", "nat_trans"]]]}]}, {"timestamp": 1543772183, "sha": "62677179", "message": "fix(category_theory/limits): namespaces for is_(co)limit", "changes": [{"oldPath": "category_theory/limits/cones.lean", "newPath": "category_theory/limits/cones.lean", "changes": []}, {"oldPath": "category_theory/limits/limits.lean", "newPath": "category_theory/limits/limits.lean", "changes": [["mod", "def", "desc_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "hom_desc", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "hom_iso'", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "hom_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "mk_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "nat_iso", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "of_iso_colimit", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "uniq_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["mod", "def", "unique", ["category_theory", "limits", "is_colimit"]], ["mod", "theorem", "hom_ext", ["category_theory", "limits", "is_limit"]], ["mod", "def", "hom_iso'", ["category_theory", "limits", "is_limit"]], ["mod", "def", "hom_iso", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "hom_lift", ["category_theory", "limits", "is_limit"]], ["mod", "def", "lift_cone_morphism", ["category_theory", "limits", "is_limit"]], ["mod", "def", "mk_cone_morphism", ["category_theory", "limits", "is_limit"]], ["mod", "def", "nat_iso", ["category_theory", "limits", "is_limit"]], ["mod", "def", "of_iso_limit", ["category_theory", "limits", "is_limit"]], ["mod", "theorem", "uniq_cone_morphism", ["category_theory", "limits", "is_limit"]], ["mod", "def", "unique", ["category_theory", "limits", "is_limit"]]]}]}, {"timestamp": 1543772183, "sha": "de4f6897", "message": "feat(category_theory/limits): (co)limits, and (co)limits in Type", "changes": [{"oldPath": null, "newPath": "category_theory/limits/limits.lean", "changes": [["add", "theorem", "ι_map", ["category_theory", "limits", "colim"]], ["add", "def", "colim", ["category_theory", "limits"]], ["add", "def", "cocone", ["category_theory", "limits", "colimit"]], ["add", "def", "cocone_morphism", ["category_theory", "limits", "colimit"]], ["add", "theorem", "cocone_morphism_hom", ["category_theory", "limits", "colimit"]], ["add", "theorem", "cocone_ι", ["category_theory", "limits", "colimit"]], ["add", "def", "desc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "colimit"]], ["add", "def", "hom_iso'", ["category_theory", "limits", "colimit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "colimit"]], ["add", "theorem", "hom_iso_hom", ["category_theory", "limits", "colimit"]], ["add", "def", "is_colimit", ["category_theory", "limits", "colimit"]], ["add", "theorem", "is_colimit_desc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "map_desc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "map_post", ["category_theory", "limits", "colimit"]], ["add", "def", "post", ["category_theory", "limits", "colimit"]], ["add", "theorem", "post_desc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "post_post", ["category_theory", "limits", "colimit"]], ["add", "def", "pre", ["category_theory", "limits", "colimit"]], ["add", "theorem", "pre_desc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "pre_map", ["category_theory", "limits", "colimit"]], ["add", "theorem", "pre_post", ["category_theory", "limits", "colimit"]], ["add", "theorem", "pre_pre", ["category_theory", "limits", "colimit"]], ["add", "theorem", "w", ["category_theory", "limits", "colimit"]], ["add", "def", "ι", ["category_theory", "limits", "colimit"]], ["add", "theorem", "ι_cocone_morphism", ["category_theory", "limits", "colimit"]], ["add", "theorem", "ι_desc", ["category_theory", "limits", "colimit"]], ["add", "theorem", "ι_post", ["category_theory", "limits", "colimit"]], ["add", "theorem", "ι_pre", ["category_theory", "limits", "colimit"]], ["add", "def", "colimit", ["category_theory", "limits"]], ["add", "def", "has_colimits", ["category_theory", "limits"]], ["add", "def", "has_colimits_of_shape", ["category_theory", "limits"]], ["add", "def", "has_limits", ["category_theory", "limits"]], ["add", "def", "has_limits_of_shape", ["category_theory", "limits"]], ["add", "def", "desc_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "hom_desc", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "is_colimit"]], ["add", "def", "hom_iso'", ["category_theory", "limits", "is_colimit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_colimit"]], ["add", "def", "mk_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "def", "nat_iso", ["category_theory", "limits", "is_colimit"]], ["add", "def", "of_iso_colimit", ["category_theory", "limits", "is_colimit"]], ["add", "theorem", "uniq_cocone_morphism", ["category_theory", "limits", "is_colimit"]], ["add", "def", "unique", ["category_theory", "limits", "is_colimit"]], ["add", "structure", "is_colimit", ["category_theory", "limits"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "is_limit"]], ["add", "def", "hom_iso'", ["category_theory", "limits", "is_limit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "hom_iso_hom", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "hom_lift", ["category_theory", "limits", "is_limit"]], ["add", "def", "lift_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "def", "mk_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "def", "nat_iso", ["category_theory", "limits", "is_limit"]], ["add", "def", "of_iso_limit", ["category_theory", "limits", "is_limit"]], ["add", "theorem", "uniq_cone_morphism", ["category_theory", "limits", "is_limit"]], ["add", "def", "unique", ["category_theory", "limits", "is_limit"]], ["add", "structure", "is_limit", ["category_theory", "limits"]], ["add", "theorem", "map_π", ["category_theory", "limits", "lim"]], ["add", "def", "lim", ["category_theory", "limits"]], ["add", "def", "cone", ["category_theory", "limits", "limit"]], ["add", "def", "cone_morphism", ["category_theory", "limits", "limit"]], ["add", "theorem", "cone_morphism_hom", ["category_theory", "limits", "limit"]], ["add", "theorem", "cone_morphism_π", ["category_theory", "limits", "limit"]], ["add", "theorem", "cone_π", ["category_theory", "limits", "limit"]], ["add", "theorem", "hom_ext", ["category_theory", "limits", "limit"]], ["add", "def", "hom_iso'", ["category_theory", "limits", "limit"]], ["add", "def", "hom_iso", ["category_theory", "limits", "limit"]], ["add", "theorem", "hom_iso_hom", ["category_theory", "limits", "limit"]], ["add", "def", "is_limit", ["category_theory", "limits", "limit"]], ["add", "theorem", "is_limit_lift", ["category_theory", "limits", "limit"]], ["add", "def", "lift", ["category_theory", "limits", "limit"]], ["add", "theorem", "lift_map", ["category_theory", "limits", "limit"]], ["add", "theorem", "lift_post", ["category_theory", "limits", "limit"]], ["add", "theorem", "lift_pre", ["category_theory", "limits", "limit"]], ["add", "theorem", "lift_π", ["category_theory", "limits", "limit"]], ["add", "theorem", "map_post", ["category_theory", "limits", "limit"]], ["add", "theorem", "map_pre", ["category_theory", "limits", "limit"]], ["add", "def", "post", ["category_theory", "limits", "limit"]], ["add", "theorem", "post_post", ["category_theory", "limits", "limit"]], ["add", "theorem", "post_π", ["category_theory", "limits", "limit"]], ["add", "def", "pre", ["category_theory", "limits", "limit"]], ["add", "theorem", "pre_post", ["category_theory", "limits", "limit"]], ["add", "theorem", "pre_pre", ["category_theory", "limits", "limit"]], ["add", "theorem", "pre_π", ["category_theory", "limits", "limit"]], ["add", "theorem", "w", ["category_theory", "limits", "limit"]], ["add", "def", "π", ["category_theory", "limits", "limit"]], ["add", "def", "limit", ["category_theory", "limits"]]]}, {"oldPath": null, "newPath": "category_theory/limits/types.lean", "changes": [["add", "def", "colimit", ["category_theory", "limits", "types"]], ["add", "def", "colimit_is_colimit", ["category_theory", "limits", "types"]], ["add", "def", "limit", ["category_theory", "limits", "types"]], ["add", "def", "limit_is_limit", ["category_theory", "limits", "types"]], ["add", "theorem", "types_colimit", ["category_theory", "limits", "types"]], ["add", "theorem", "types_colimit_desc", ["category_theory", "limits", "types"]], ["add", "theorem", "types_colimit_map", ["category_theory", "limits", "types"]], ["add", "theorem", "types_colimit_pre", ["category_theory", "limits", "types"]], ["add", "theorem", "types_colimit_ι", ["category_theory", "limits", "types"]], ["add", "theorem", "types_limit", ["category_theory", "limits", "types"]], ["add", "theorem", "types_limit_lift", ["category_theory", "limits", "types"]], ["add", "theorem", "types_limit_map", ["category_theory", "limits", "types"]], ["add", "theorem", "types_limit_pre", ["category_theory", "limits", "types"]], ["add", "theorem", "types_limit_π", ["category_theory", "limits", "types"]]]}]}, {"timestamp": 1543772183, "sha": "a5e2ebe9", "message": "feat(category_theory/limits/cones): (co)cones on a diagram", "changes": [{"oldPath": null, "newPath": "category_theory/limits/cones.lean", "changes": [["add", "def", "cocones", ["category_theory", "functor"]], ["add", "theorem", "cocones_obj", ["category_theory", "functor"]], ["add", "def", "cones", ["category_theory", "functor"]], ["add", "theorem", "cones_obj", ["category_theory", "functor"]], ["add", "def", "map_cocone", ["category_theory", "functor"]], ["add", "def", "map_cocone_morphism", ["category_theory", "functor"]], ["add", "theorem", "map_cocone_ι", ["category_theory", "functor"]], ["add", "def", "map_cone", ["category_theory", "functor"]], ["add", "def", "map_cone_morphism", ["category_theory", "functor"]], ["add", "theorem", "map_cone_π", ["category_theory", "functor"]], ["add", "def", "extend", ["category_theory", "limits", "cocone"]], ["add", "def", "extensions", ["category_theory", "limits", "cocone"]], ["add", "def", "precompose", ["category_theory", "limits", "cocone"]], ["add", "theorem", "w", ["category_theory", "limits", "cocone"]], ["add", "def", "whisker", ["category_theory", "limits", "cocone"]], ["add", "theorem", "whisker_ι_app", ["category_theory", "limits", "cocone"]], ["add", "structure", "cocone", ["category_theory", "limits"]], ["add", "theorem", "ext", ["category_theory", "limits", "cocone_morphism"]], ["add", "structure", "cocone_morphism", ["category_theory", "limits"]], ["add", "theorem", "hom", ["category_theory", "limits", "cocones", "comp"]], ["add", "def", "ext", ["category_theory", "limits", "cocones"]], ["add", "def", "functoriality", ["category_theory", "limits", "cocones"]], ["add", "theorem", "hom", ["category_theory", "limits", "cocones", "id"]], ["add", "def", "extend", ["category_theory", "limits", "cone"]], ["add", "def", "extensions", ["category_theory", "limits", "cone"]], ["add", "def", "postcompose", ["category_theory", "limits", "cone"]], ["add", "theorem", "w", ["category_theory", "limits", "cone"]], ["add", "def", "whisker", ["category_theory", "limits", "cone"]], ["add", "theorem", "whisker_π_app", ["category_theory", "limits", "cone"]], ["add", "structure", "cone", ["category_theory", "limits"]], ["add", "theorem", "ext", ["category_theory", "limits", "cone_morphism"]], ["add", "structure", "cone_morphism", ["category_theory", "limits"]], ["add", "theorem", "hom", ["category_theory", "limits", "cones", "comp"]], ["add", "def", "ext", ["category_theory", "limits", "cones"]], ["add", "def", "functoriality", ["category_theory", "limits", "cones"]], ["add", "theorem", "hom", ["category_theory", "limits", "cones", "id"]]]}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "category_theory/natural_isomorphism.lean", "changes": [["del", "def", "assoc", ["category_theory", "functor"]], ["del", "def", "comp_id", ["category_theory", "functor"]], ["del", "def", "id_comp", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/yoneda.lean", "newPath": "category_theory/yoneda.lean", "changes": [["add", "theorem", "map_app", ["category_theory", "coyoneda"]], ["add", "theorem", "obj_map", ["category_theory", "coyoneda"]], ["add", "theorem", "obj_obj", ["category_theory", "coyoneda"]], ["add", "def", "coyoneda", ["category_theory"]], ["mod", "def", "yoneda", ["category_theory"]]]}]}, {"timestamp": 1543772183, "sha": "68c98eb7", "message": "feat(category_theory/isomorphism): lemmas for manipulating isomorphisms", "changes": [{"oldPath": "category_theory/equivalence.lean", "newPath": "category_theory/equivalence.lean", "changes": []}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["add", "theorem", "comp_inv_eq", ["category_theory", "iso"]], ["add", "theorem", "eq_comp_inv", ["category_theory", "iso"]], ["add", "theorem", "eq_inv_comp", ["category_theory", "iso"]], ["add", "theorem", "hom_inv_id_assoc", ["category_theory", "iso"]], ["add", "theorem", "inv_comp_eq", ["category_theory", "iso"]], ["add", "theorem", "inv_hom_id_assoc", ["category_theory", "iso"]]]}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "category_theory/natural_isomorphism.lean", "changes": []}]}, {"timestamp": 1543772183, "sha": "382abaf1", "message": "feat(category_theory/const): constant functors", "changes": [{"oldPath": null, "newPath": "category_theory/const.lean", "changes": [["add", "theorem", "map_app", ["category_theory", "functor", "const"]], ["add", "theorem", "obj_map", ["category_theory", "functor", "const"]], ["add", "theorem", "obj_obj", ["category_theory", "functor", "const"]], ["add", "def", "const", ["category_theory", "functor"]], ["add", "def", "const_comp", ["category_theory", "functor"]], ["add", "theorem", "const_comp_hom_app", ["category_theory", "functor"]], ["add", "theorem", "const_comp_inv_app", ["category_theory", "functor"]]]}]}, {"timestamp": 1543732918, "sha": "51afb41c", "message": "fix(category_theory/yoneda): add componentwise lemma (#480)", "changes": [{"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": [["add", "theorem", "map", ["category_theory", "ulift_functor"]], ["add", "def", "ulift_trivial", ["category_theory"]]]}, {"oldPath": "category_theory/yoneda.lean", "newPath": "category_theory/yoneda.lean", "changes": [["add", "def", "yoneda_sections", ["category_theory"]], ["add", "def", "yoneda_sections_small", ["category_theory"]]]}]}, {"timestamp": 1543529588, "sha": "2a86b06b", "message": "fix(order/filter): tendsto_at_top only requires preorder not partial_order", "changes": [{"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "tendsto_at_top", ["filter"]]]}]}, {"timestamp": 1543512818, "sha": "9e6572fa", "message": "fix(group_theory/group_action): make is_group_action Prop", "changes": [{"oldPath": "group_theory/group_action.lean", "newPath": "group_theory/group_action.lean", "changes": []}]}, {"timestamp": 1543381387, "sha": "1c0c39ce", "message": "fix(category_theory/equivalences): fixed import\n(and some docs, and some clumsy proofs)", "changes": [{"oldPath": "category_theory/equivalence.lean", "newPath": "category_theory/equivalence.lean", "changes": []}, {"oldPath": "category_theory/yoneda.lean", "newPath": "category_theory/yoneda.lean", "changes": []}]}, {"timestamp": 1543379781, "sha": "b02bea6e", "message": "feat(category_theory/equivalence): equivalences, slice tactic (#479)", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": []}, {"oldPath": null, "newPath": "category_theory/equivalence.lean", "changes": [["add", "def", "equivalence_of_fully_faithfully_ess_surj", ["category_theory", "category_theory", "equivalence"]], ["add", "def", "ess_surj_of_equivalence", ["category_theory", "category_theory", "equivalence"]], ["add", "theorem", "fun_inv_map", ["category_theory", "equivalence"]], ["add", "theorem", "inv_fun_map", ["category_theory", "equivalence"]], ["add", "def", "refl", ["category_theory", "equivalence"]], ["add", "def", "symm", ["category_theory", "equivalence"]], ["add", "def", "trans", ["category_theory", "equivalence"]], ["add", "structure", "equivalence", ["category_theory"]], ["add", "def", "as_equivalence", ["category_theory", "functor"]], ["add", "def", "fun_inv_id", ["category_theory", "functor"]], ["add", "def", "fun_obj_preimage_iso", ["category_theory", "functor"]], ["add", "def", "inv", ["category_theory", "functor"]], ["add", "def", "inv_fun_id", ["category_theory", "functor"]], ["add", "def", "obj_preimage", ["category_theory", "functor"]], ["add", "theorem", "fun_inv_map", ["category_theory", "is_equivalence"]], ["add", "theorem", "inv_fun_map", ["category_theory", "is_equivalence"]]]}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "category_theory/natural_isomorphism.lean", "changes": [["add", "theorem", "hom_app_inv_app_id", ["category_theory", "nat_iso"]], ["add", "theorem", "hom_vcomp_inv", ["category_theory", "nat_iso"]], ["add", "theorem", "inv_app_hom_app_id", ["category_theory", "nat_iso"]], ["add", "theorem", "inv_vcomp_hom", ["category_theory", "nat_iso"]]]}, {"oldPath": null, "newPath": "tactic/slice.lean", "changes": []}]}, {"timestamp": 1543368682, "sha": "131b46f1", "message": "feat(data/list): separate out list defs into `data.lists.defs`", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["del", "inductive", "chain", ["list"]], ["del", "theorem", "chain_cons", ["list"]], ["del", "def", "choose", ["list"]], ["del", "def", "choose_x", ["list"]], ["del", "def", "concat", ["list"]], ["del", "def", "count", ["list"]], ["del", "def", "countp", ["list"]], ["del", "def", "disjoint", ["list"]], ["del", "def", "erase_dup", ["list"]], ["del", "def", "erasep", ["list"]], ["del", "def", "extractp", ["list"]], ["del", "def", "find", ["list"]], ["del", "def", "find_indexes", ["list"]], ["del", "def", "find_indexes_aux", ["list"]], ["del", "def", "head'", ["list"]], ["del", "def", "indexes_of", ["list"]], ["del", "def", "inits", ["list"]], ["del", "def", "insert_nth", ["list"]], ["del", "def", "inth", ["list"]], ["del", "def", "is_infix", ["list"]], ["del", "def", "is_prefix", ["list"]], ["del", "def", "is_suffix", ["list"]], ["del", "def", "last'", ["list"]], ["del", "def", "lookmap", ["list"]], ["del", "def", "map_head", ["list"]], ["del", "def", "map_last", ["list"]], ["del", "def", "modify_head", ["list"]], ["del", "def", "modify_nth", ["list"]], ["del", "def", "modify_nth_tail", ["list"]], ["del", "def", "nodup", ["list"]], ["del", "def", "of_fn", ["list"]], ["del", "def", "of_fn_aux", ["list"]], ["del", "def", "of_fn_nth_val", ["list"]], ["del", "inductive", "pairwise", ["list"]], ["del", "theorem", "pairwise_cons", ["list"]], ["del", "def", "permutations", ["list"]], ["del", "def", "rec", ["list", "permutations_aux"]], ["del", "def", "permutations_aux2", ["list"]], ["del", "def", "permutations_aux", ["list"]], ["del", "def", "prod", ["list"]], ["del", "def", "product", ["list"]], ["del", "def", "pw_filter", ["list"]], ["del", "def", "range'", ["list"]], ["del", "def", "reduce_option", ["list"]], ["del", "def", "revzip", ["list"]], ["del", "def", "scanl", ["list"]], ["del", "def", "scanr", ["list"]], ["del", "def", "scanr_aux", ["list"]], ["del", "def", "sections", ["list"]], ["del", "def", "split_at", ["list"]], ["del", "def", "sublists'", ["list"]], ["del", "def", "sublists'_aux", ["list"]], ["del", "def", "sublists", ["list"]], ["del", "def", "sublists_aux", ["list"]], ["del", "def", "sublists_aux₁", ["list"]], ["del", "def", "tails", ["list"]], ["del", "def", "take'", ["list"]], ["del", "def", "take_while", ["list"]], ["del", "def", "tfae", ["list"]], ["del", "def", "to_array", ["list"]], ["del", "def", "transpose", ["list"]], ["del", "def", "transpose_aux", ["list"]]]}, {"oldPath": null, "newPath": "data/list/defs.lean", "changes": [["add", "inductive", "chain", ["list"]], ["add", "theorem", "chain_cons", ["list"]], ["add", "def", "choose", ["list"]], ["add", "def", "choose_x", ["list"]], ["add", "def", "concat", ["list"]], ["add", "def", "count", ["list"]], ["add", "def", "countp", ["list"]], ["add", "def", "disjoint", ["list"]], ["add", "def", "erase_dup", ["list"]], ["add", "def", "erasep", ["list"]], ["add", "def", "extractp", ["list"]], ["add", "def", "find", ["list"]], ["add", "def", "find_indexes", ["list"]], ["add", "def", "find_indexes_aux", ["list"]], ["add", "def", "head'", ["list"]], ["add", "def", "indexes_of", ["list"]], ["add", "def", "inits", ["list"]], ["add", "def", "insert_nth", ["list"]], ["add", "def", "inth", ["list"]], ["add", "def", "is_infix", ["list"]], ["add", "def", "is_prefix", ["list"]], ["add", "def", "is_suffix", ["list"]], ["add", "def", "last'", ["list"]], ["add", "def", "lookmap", ["list"]], ["add", "def", "map_head", ["list"]], ["add", "def", "map_last", ["list"]], ["add", "def", "modify_head", ["list"]], ["add", "def", "modify_nth", ["list"]], ["add", "def", "modify_nth_tail", ["list"]], ["add", "def", "nodup", ["list"]], ["add", "def", "of_fn", ["list"]], ["add", "def", "of_fn_aux", ["list"]], ["add", "def", "of_fn_nth_val", ["list"]], ["add", "inductive", "pairwise", ["list"]], ["add", "theorem", "pairwise_cons", ["list"]], ["add", "def", "permutations", ["list"]], ["add", "def", "rec", ["list", "permutations_aux"]], ["add", "def", "permutations_aux2", ["list"]], ["add", "def", "permutations_aux", ["list"]], ["add", "def", "prod", ["list"]], ["add", "def", "product", ["list"]], ["add", "def", "pw_filter", ["list"]], ["add", "def", "range'", ["list"]], ["add", "def", "reduce_option", ["list"]], ["add", "def", "revzip", ["list"]], ["add", "def", "scanl", ["list"]], ["add", "def", "scanr", ["list"]], ["add", "def", "scanr_aux", ["list"]], ["add", "def", "sections", ["list"]], ["add", "def", "split_at", ["list"]], ["add", "def", "sublists'", ["list"]], ["add", "def", "sublists'_aux", ["list"]], ["add", "def", "sublists", ["list"]], ["add", "def", "sublists_aux", ["list"]], ["add", "def", "sublists_aux₁", ["list"]], ["add", "def", "tails", ["list"]], ["add", "def", "take'", ["list"]], ["add", "def", "take_while", ["list"]], ["add", "def", "tfae", ["list"]], ["add", "def", "to_array", ["list"]], ["add", "def", "transpose", ["list"]], ["add", "def", "transpose_aux", ["list"]]]}]}, {"timestamp": 1543295968, "sha": "98eacf82", "message": "feat(tactic/basic,tactic/interactive): generalize use tactic (#497)", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1543031930, "sha": "452c9a29", "message": "feat(data/polynomial): nat_degree_comp (#477)", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "smul_le_smul", ["add_monoid"]], ["add", "theorem", "smul_le_smul_of_le_right", ["add_monoid"]], ["add", "theorem", "coe_smul", ["with_bot"]]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "coe_zero", ["with_bot"]], ["mod", "theorem", "coe_add", ["with_top"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "coeff_comp_degree_mul_degree", ["polynomial"]], ["add", "theorem", "leading_coeff_comp", ["polynomial"]], ["add", "theorem", "nat_degree_comp", ["polynomial"]], ["add", "theorem", "nat_degree_comp_le", ["polynomial"]], ["add", "theorem", "nat_degree_one", ["polynomial"]], ["add", "theorem", "nat_degree_pow_eq'", ["polynomial"]], ["add", "theorem", "nat_degree_pow_eq", ["polynomial"]]]}]}, {"timestamp": 1543031825, "sha": "e628a2c6", "message": "feat(data/finmap): finite maps (#487)\n* feat(data/list/basic): erasep\n* feat(data/list/basic): lookup, ndkeys\n* feat(data/list/sigma,alist): basic functions on association lists\n* feat(data/finmap): finite maps on multisets\n* doc(data/finmap): docstrings [ci-skip]\n* refactor(data/list/{alist,sigma},data/finmap): renaming\n* knodup -> nodupkeys\n* val -> entries\n* nd -> nodupkeys\n* feat(data/finmap): change keys to finset\n* fix(data/list/basic): fix build\n* fix(analysis/{emetric-space,measure-theory/integration}): fix build", "changes": [{"oldPath": "analysis/emetric_space.lean", "newPath": "analysis/emetric_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/integration.lean", "newPath": "analysis/measure_theory/integration.lean", "changes": []}, {"oldPath": null, "newPath": "data/finmap.lean", "changes": [["add", "def", "to_finmap", ["alist"]], ["add", "theorem", "to_finmap_entries", ["alist"]], ["add", "theorem", "to_finmap_eq", ["alist"]], ["add", "theorem", "empty_to_finmap", ["finmap"]], ["add", "def", "erase", ["finmap"]], ["add", "theorem", "erase_to_finmap", ["finmap"]], ["add", "theorem", "ext", ["finmap"]], ["add", "def", "extract", ["finmap"]], ["add", "theorem", "extract_eq_lookup_erase", ["finmap"]], ["add", "def", "foldl", ["finmap"]], ["add", "theorem", "induction_on", ["finmap"]], ["add", "def", "insert", ["finmap"]], ["add", "theorem", "insert_entries_of_neg", ["finmap"]], ["add", "theorem", "insert_of_pos", ["finmap"]], ["add", "theorem", "insert_to_finmap", ["finmap"]], ["add", "def", "keys", ["finmap"]], ["add", "theorem", "keys_empty", ["finmap"]], ["add", "theorem", "keys_erase", ["finmap"]], ["add", "theorem", "keys_erase_to_finset", ["finmap"]], ["add", "theorem", "keys_ext", ["finmap"]], ["add", "theorem", "keys_replace", ["finmap"]], ["add", "theorem", "keys_singleton", ["finmap"]], ["add", "theorem", "keys_val", ["finmap"]], ["add", "def", "lift_on", ["finmap"]], ["add", "theorem", "lift_on_to_finmap", ["finmap"]], ["add", "def", "lookup", ["finmap"]], ["add", "theorem", "lookup_is_some", ["finmap"]], ["add", "theorem", "lookup_to_finmap", ["finmap"]], ["add", "theorem", "mem_def", ["finmap"]], ["add", "theorem", "mem_erase", ["finmap"]], ["add", "theorem", "mem_insert", ["finmap"]], ["add", "theorem", "mem_keys", ["finmap"]], ["add", "theorem", "mem_replace", ["finmap"]], ["add", "theorem", "mem_to_finmap", ["finmap"]], ["add", "theorem", "not_mem_empty", ["finmap"]], ["add", "theorem", "not_mem_empty_entries", ["finmap"]], ["add", "def", "replace", ["finmap"]], ["add", "theorem", "replace_to_finmap", ["finmap"]], ["add", "def", "singleton", ["finmap"]], ["add", "structure", "finmap", []], ["add", "theorem", "coe_nodupkeys", ["multiset"]], ["add", "def", "nodupkeys", ["multiset"]]]}, {"oldPath": null, "newPath": "data/list/alist.lean", "changes": [["add", "def", "erase", ["alist"]], ["add", "theorem", "ext", ["alist"]], ["add", "def", "extract", ["alist"]], ["add", "theorem", "extract_eq_lookup_erase", ["alist"]], ["add", "def", "foldl", ["alist"]], ["add", "def", "insert", ["alist"]], ["add", "theorem", "insert_entries_of_neg", ["alist"]], ["add", "theorem", "insert_of_pos", ["alist"]], ["add", "def", "keys", ["alist"]], ["add", "theorem", "keys_empty", ["alist"]], ["add", "theorem", "keys_erase", ["alist"]], ["add", "theorem", "keys_insert", ["alist"]], ["add", "theorem", "keys_nodup", ["alist"]], ["add", "theorem", "keys_replace", ["alist"]], ["add", "theorem", "keys_singleton", ["alist"]], ["add", "def", "lookup", ["alist"]], ["add", "theorem", "lookup_is_some", ["alist"]], ["add", "theorem", "mem_def", ["alist"]], ["add", "theorem", "mem_erase", ["alist"]], ["add", "theorem", "mem_insert", ["alist"]], ["add", "theorem", "mem_keys", ["alist"]], ["add", "theorem", "mem_of_perm", ["alist"]], ["add", "theorem", "mem_replace", ["alist"]], ["add", "theorem", "not_mem_empty", ["alist"]], ["add", "theorem", "not_mem_empty_entries", ["alist"]], ["add", "theorem", "perm_erase", ["alist"]], ["add", "theorem", "perm_insert", ["alist"]], ["add", "theorem", "perm_lookup", ["alist"]], ["add", "theorem", "perm_replace", ["alist"]], ["add", "def", "replace", ["alist"]], ["add", "def", "singleton", ["alist"]], ["add", "structure", "alist", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "erase_append_left", ["list"]], ["mod", "theorem", "erase_append_right", ["list"]], ["add", "theorem", "erase_eq_erasep", ["list"]], ["mod", "theorem", "erase_sublist_erase", ["list"]], ["add", "def", "erasep", ["list"]], ["add", "theorem", "erasep_append_left", ["list"]], ["add", "theorem", "erasep_append_right", ["list"]], ["add", "theorem", "erasep_cons", ["list"]], ["add", "theorem", "erasep_cons_of_neg", ["list"]], ["add", "theorem", "erasep_cons_of_pos", ["list"]], ["add", "theorem", "erasep_map", ["list"]], ["add", "theorem", "erasep_nil", ["list"]], ["add", "theorem", "erasep_of_forall_not", ["list"]], ["add", "theorem", "erasep_sublist", ["list"]], ["add", "theorem", "erasep_sublist_erasep", ["list"]], ["add", "theorem", "erasep_subset", ["list"]], ["add", "theorem", "exists_of_erasep", ["list"]], ["add", "theorem", "exists_or_eq_self_of_erasep", ["list"]], ["add", "def", "extractp", ["list"]], ["add", "theorem", "extractp_eq_find_erasep", ["list"]], ["add", "theorem", "forall_of_forall_of_pairwise", ["list"]], ["add", "theorem", "length_erasep_of_mem", ["list"]], ["add", "theorem", "length_lookmap", ["list"]], ["add", "def", "lookmap", ["list"]], ["add", "theorem", "lookmap_congr", ["list"]], ["add", "theorem", "lookmap_cons_none", ["list"]], ["add", "theorem", "lookmap_cons_some", ["list"]], ["add", "theorem", "lookmap_id'", ["list"]], ["add", "theorem", "lookmap_map_eq", ["list"]], ["add", "theorem", "lookmap_nil", ["list"]], ["add", "theorem", "lookmap_none", ["list"]], ["add", "theorem", "lookmap_of_forall_not", ["list"]], ["add", "theorem", "lookmap_some", ["list"]], ["mod", "theorem", "map_erase", ["list"]], ["add", "theorem", "mem_erasep_of_neg", ["list"]], ["add", "theorem", "mem_of_mem_erasep", ["list"]], ["add", "theorem", "nodup_repeat", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "swap'", ["list", "perm"]], ["add", "theorem", "perm_erasep", ["list"]], ["add", "theorem", "perm_lookmap", ["list"]], ["add", "theorem", "perm_option_to_list", ["list"]]]}, {"oldPath": null, "newPath": "data/list/sigma.lean", "changes": [["add", "theorem", "head_lookup_all", ["list"]], ["add", "def", "kerase", ["list"]], ["add", "theorem", "kerase_map_fst", ["list"]], ["add", "theorem", "kerase_nodupkeys", ["list"]], ["add", "theorem", "kerase_sublist", ["list"]], ["add", "def", "kextract", ["list"]], ["add", "theorem", "kextract_eq_lookup_kerase", ["list"]], ["add", "def", "kreplace", ["list"]], ["add", "theorem", "kreplace_map_fst", ["list"]], ["add", "theorem", "kreplace_nodupkeys", ["list"]], ["add", "theorem", "kreplace_of_forall_not", ["list"]], ["add", "theorem", "kreplace_self", ["list"]], ["add", "def", "lookup", ["list"]], ["add", "def", "lookup_all", ["list"]], ["add", "theorem", "lookup_all_cons_eq", ["list"]], ["add", "theorem", "lookup_all_cons_ne", ["list"]], ["add", "theorem", "lookup_all_eq_lookup", ["list"]], ["add", "theorem", "lookup_all_eq_nil", ["list"]], ["add", "theorem", "lookup_all_length_le_one", ["list"]], ["add", "theorem", "lookup_all_nil", ["list"]], ["add", "theorem", "lookup_all_nodup", ["list"]], ["add", "theorem", "lookup_all_sublist", ["list"]], ["add", "theorem", "lookup_cons_eq", ["list"]], ["add", "theorem", "lookup_cons_ne", ["list"]], ["add", "theorem", "lookup_eq_none", ["list"]], ["add", "theorem", "lookup_is_some", ["list"]], ["add", "theorem", "lookup_nil", ["list"]], ["add", "theorem", "map_lookup_eq_find", ["list"]], ["add", "theorem", "mem_lookup_all", ["list"]], ["add", "theorem", "mem_lookup_iff", ["list"]], ["add", "theorem", "nodup_enum_map_fst", ["list"]], ["add", "theorem", "nodup_of_nodupkeys", ["list"]], ["add", "theorem", "eq_of_fst_eq", ["list", "nodupkeys"]], ["add", "theorem", "eq_of_mk_mem", ["list", "nodupkeys"]], ["add", "def", "nodupkeys", ["list"]], ["add", "theorem", "nodupkeys_cons", ["list"]], ["add", "theorem", "nodupkeys_iff_pairwise", ["list"]], ["add", "theorem", "nodupkeys_join", ["list"]], ["add", "theorem", "nodupkeys_nil", ["list"]], ["add", "theorem", "nodupkeys_of_sublist", ["list"]], ["add", "theorem", "nodupkeys_singleton", ["list"]], ["add", "theorem", "of_mem_lookup", ["list"]], ["add", "theorem", "perm_kerase", ["list"]], ["add", "theorem", "perm_kreplace", ["list"]], ["add", "theorem", "perm_lookup", ["list"]], ["add", "theorem", "perm_lookup_all", ["list"]], ["add", "theorem", "perm_nodupkeys", ["list"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["mod", "theorem", "ext", ["option"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "congr_arg_heq", []]]}]}, {"timestamp": 1543031792, "sha": "e19cd0f5", "message": "fix(*): adding a few @[simp] attributes (#492)\n* some additional simp lemmas\n* nat.add_sub_cancel", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "add_sub_cancel", ["multiset"]], ["mod", "theorem", "add_sub_cancel_left", ["multiset"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["mod", "theorem", "cast_pow", ["rat"]]]}, {"oldPath": "number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": []}]}, {"timestamp": 1543031632, "sha": "beff80a7", "message": "feat(category_theory): preliminaries for limits (#488)\n* style(category_theory): avoid long lines\n* style(category_theory): rename embedding -> fully_faithful\n* feat(category_theory/opposites): opposite of a functor\n* style(category_theory/yoneda): minor changes\n* make category argument implicit\n* reverse order of arguments in yoneda_lemma\n* avoid long lines\n* feat(category_theory/functor_category): functor.flip\n* feat(category_theory/isomorphism): eq_to_hom\n* feat(category_theory/comma): comma categories\n* feat(category_theory): pempty, punit categories\n* feat(category_theory/products): add curried evaluation bifunctor\nIt will be used later, to prove that (co)limits in diagram categories\nare computed pointwise.\n* fixing order of definitions in opposites\n* constructing fully_faithful instances", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["mod", "theorem", "concrete_category_comp", ["category_theory"]], ["mod", "theorem", "concrete_category_id", ["category_theory"]]]}, {"oldPath": null, "newPath": "category_theory/comma.lean", "changes": [["add", "def", "fst", ["category_theory", "comma"]], ["add", "theorem", "fst_map", ["category_theory", "comma"]], ["add", "theorem", "fst_obj", ["category_theory", "comma"]], ["add", "def", "map_left", ["category_theory", "comma"]], ["add", "def", "map_right", ["category_theory", "comma"]], ["add", "def", "nat_trans", ["category_theory", "comma"]], ["add", "def", "snd", ["category_theory", "comma"]], ["add", "theorem", "snd_map", ["category_theory", "comma"]], ["add", "theorem", "snd_obj", ["category_theory", "comma"]], ["add", "structure", "comma", ["category_theory"]], ["add", "theorem", "ext", ["category_theory", "comma_morphism"]], ["add", "structure", "comma_morphism", ["category_theory"]]]}, {"oldPath": "category_theory/examples/monoids.lean", "newPath": "category_theory/examples/monoids.lean", "changes": [["mod", "def", "forget_to_Mon", ["category_theory", "examples", "CommMon"]]]}, {"oldPath": "category_theory/examples/rings.lean", "newPath": "category_theory/examples/rings.lean", "changes": []}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": []}, {"oldPath": "category_theory/full_subcategory.lean", "newPath": "category_theory/full_subcategory.lean", "changes": [["del", "def", "full_subcategory_embedding", ["category_theory"]], ["add", "def", "full_subcategory_inclusion", ["category_theory"]]]}, {"oldPath": "category_theory/embedding.lean", "newPath": "category_theory/fully_faithful.lean", "changes": [["mod", "theorem", "image_preimage", ["category_theory", "functor"]], ["mod", "def", "preimage", ["category_theory", "functor"]], ["mod", "theorem", "preimage_iso_hom", ["category_theory"]], ["mod", "theorem", "preimage_iso_inv", ["category_theory"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["mod", "def", "map", ["category_theory", "bundled"]], ["mod", "structure", "functor", ["category_theory"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": [["add", "theorem", "flip_obj_map", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["add", "def", "eq_to_hom", ["category_theory"]], ["add", "theorem", "eq_to_hom_refl", ["category_theory"]], ["add", "theorem", "eq_to_hom_trans", ["category_theory"]], ["add", "theorem", "hom", ["category_theory", "eq_to_iso"]], ["mod", "def", "eq_to_iso", ["category_theory"]], ["mod", "theorem", "eq_to_iso_refl", ["category_theory"]], ["mod", "theorem", "eq_to_iso_trans", ["category_theory"]], ["mod", "theorem", "eq_to_iso", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": [["mod", "theorem", "hom_pairing_map", ["category_theory", "functor"]], ["add", "theorem", "map_app", ["category_theory", "functor", "op_hom"]], ["add", "theorem", "obj", ["category_theory", "functor", "op_hom"]], ["add", "theorem", "map_app", ["category_theory", "functor", "op_inv"]], ["add", "theorem", "obj", ["category_theory", "functor", "op_inv"]], ["add", "theorem", "op_map", ["category_theory", "functor"]], ["add", "theorem", "op_obj", ["category_theory", "functor"]], ["del", "theorem", "opposite_map", ["category_theory", "functor"]], ["del", "theorem", "opposite_obj", ["category_theory", "functor"]], ["add", "theorem", "unop_map", ["category_theory", "functor"]], ["add", "theorem", "unop_obj", ["category_theory", "functor"]], ["add", "def", "op_op", ["category_theory"]]]}, {"oldPath": null, "newPath": "category_theory/pempty.lean", "changes": [["add", "def", "empty", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["mod", "def", "evaluation", ["category_theory"]], ["add", "def", "evaluation_uncurried", ["category_theory"]], ["mod", "theorem", "prod_comp", ["category_theory"]], ["add", "theorem", "prod_comp_fst", ["category_theory"]], ["add", "theorem", "prod_comp_snd", ["category_theory"]], ["add", "theorem", "prod_id_fst", ["category_theory"]], ["add", "theorem", "prod_id_snd", ["category_theory"]]]}, {"oldPath": null, "newPath": "category_theory/punit.lean", "changes": [["add", "def", "of_obj", ["category_theory", "functor"]], ["add", "theorem", "of_obj_obj", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": []}, {"oldPath": "category_theory/yoneda.lean", "newPath": "category_theory/yoneda.lean", "changes": [["mod", "theorem", "map_app", ["category_theory", "yoneda"]], ["mod", "theorem", "naturality", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_map", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_map_id", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_obj", ["category_theory", "yoneda"]], ["mod", "def", "yoneda_evaluation", ["category_theory"]], ["mod", "def", "yoneda_lemma", ["category_theory"]], ["mod", "def", "yoneda_pairing", ["category_theory"]]]}, {"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}]}, {"timestamp": 1542930678, "sha": "de8985c9", "message": "fix(finsupp): remove superfluous typeclass argument (#490)", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["mod", "theorem", "filter_pos_add_filter_neg", ["finsupp"]]]}]}, {"timestamp": 1542794165, "sha": "e7939673", "message": "feat(tactic/interactive): add use tactic (#486)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1542779625, "sha": "0d56447e", "message": "fix(tactic/linarith): nat preprocessing was rejecting negated hypotheses (#485)", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1542643409, "sha": "bfe73188", "message": "* feat(tactic/mono): new mono and ac_mono tactics (#85)\n* feat(tactic/mono): new mono and ac_mono tactics\n* docs(tactic/mono): improve explanation, examples and syntax\n* feat(tactic/mono): cache the list of mono lemma to facilitate matching\n* fix(tactic/mono): fix conflict with `has_lt`\n* update mathlib\n* move lemmas from ordered ring to monotonicity\n* rename `monotonic` attribute to `mono`\n* address PR comments\n* fix build", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "le_implies_le_of_le_of_le", []]]}, {"oldPath": "algebra/order_functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["add", "theorem", "abs_le_abs", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["mod", "theorem", "is_none_iff_eq_none", ["option"]], ["add", "theorem", "not_is_some", ["option"]]]}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "imp_imp_imp", []]]}, {"oldPath": "meta/rb_map.lean", "newPath": "meta/rb_map.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["mod", "theorem", "some_lt_some", ["with_bot"]]]}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/default.lean", "newPath": "tactic/default.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/monotonicity/basic.lean", "changes": [["add", "def", "last_two", ["tactic", "interactive"]], ["add", "structure", "mono_cfg", ["tactic", "interactive"]], ["add", "def", "mono_key", ["tactic", "interactive"]], ["add", "inductive", "mono_selection", ["tactic", "interactive"]]]}, {"oldPath": null, "newPath": "tactic/monotonicity/default.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/monotonicity/interactive.lean", "changes": [["add", "theorem", "apply_rel", ["tactic", "interactive"]], ["add", "def", "minimum_on", ["tactic", "interactive", "list"]], ["add", "inductive", "rep_arity", ["tactic", "interactive"]]]}, {"oldPath": null, "newPath": "tactic/monotonicity/lemmas.lean", "changes": [["add", "theorem", "gt_of_mul_lt_mul_neg_right", []], ["add", "theorem", "mul_mono_nonneg", []], ["add", "theorem", "mul_mono_nonpos", []], ["add", "theorem", "sub_mono_left_strict", ["nat"]], ["add", "theorem", "sub_mono_right_strict", ["nat"]]]}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": null, "newPath": "tests/monotonicity.lean", "changes": [["add", "def", "P", []], ["add", "theorem", "P_mono", []], ["add", "def", "Q", []], ["add", "theorem", "Q_mono", []], ["add", "theorem", "bar_bar''", []], ["add", "theorem", "bar_bar'", []], ["add", "theorem", "bar_bar", []], ["add", "def", "le'", ["list"]], ["add", "theorem", "le_refl", ["list"]], ["add", "theorem", "le_trans", ["list"]], ["add", "theorem", "list_le_mono_left", []], ["add", "theorem", "list_le_mono_right", []]]}, {"oldPath": null, "newPath": "tests/monotonicity/test_cases.lean", "changes": []}]}, {"timestamp": 1542490626, "sha": "8c385bc4", "message": "feat(category_theory): associator and unitors for functors (#478)\nalso check pentagon and triangle", "changes": [{"oldPath": "category_theory/whiskering.lean", "newPath": "category_theory/whiskering.lean", "changes": [["add", "def", "associator", ["category_theory", "functor"]], ["add", "def", "left_unitor", ["category_theory", "functor"]], ["add", "theorem", "pentagon", ["category_theory", "functor"]], ["add", "def", "right_unitor", ["category_theory", "functor"]], ["add", "theorem", "triangle", ["category_theory", "functor"]]]}]}, {"timestamp": 1542397772, "sha": "1c60f5b8", "message": "fix(ring_theory/subring): unnecessary classical (#482)", "changes": [{"oldPath": "ring_theory/subring.lean", "newPath": "ring_theory/subring.lean", "changes": []}]}, {"timestamp": 1542323333, "sha": "47b3477e", "message": "feat(category_theory/whiskering): more whiskering lemmas", "changes": [{"oldPath": "category_theory/whiskering.lean", "newPath": "category_theory/whiskering.lean", "changes": [["add", "theorem", "whisker_left_id", ["category_theory"]], ["add", "theorem", "whisker_right_id", ["category_theory"]]]}]}, {"timestamp": 1542322963, "sha": "c834715a", "message": "style(category_theory/natural_transformation): fix hcomp/vcomp notation (#470)", "changes": [{"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["mod", "theorem", "vcomp_assoc", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/whiskering.lean", "newPath": "category_theory/whiskering.lean", "changes": []}]}, {"timestamp": 1542295776, "sha": "fce8e7c2", "message": "refactor(algebra/euclidean_domain): euclidean_domain extends nonzero_comm_ring (#476)\nThe euclidean domain axioms imply integral domain, given `nonzero_comm_ring`. Therefore it should extend `nonzero_comm_ring` instead, and an `integral_domain` instance is proven for Euclidean domains.", "changes": [{"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": []}]}, {"timestamp": 1542226634, "sha": "c7c0d2a1", "message": "fix(analysis/topology/topological_structures): remove useless decidability assumption (#475)", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}]}, {"timestamp": 1542209087, "sha": "baf59c8d", "message": "refactor(order/complete_lattice): define supr and infi with range (#474)", "changes": [{"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_range", ["lattice"]], ["mod", "theorem", "Sup_range", ["lattice"]], ["mod", "def", "infi", ["lattice"]], ["mod", "def", "supr", ["lattice"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}]}, {"timestamp": 1542134880, "sha": "291015d8", "message": "fix(tactic/basic): use `lean.parser.of_tactic'` instead of builtin", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/explode.lean", "newPath": "tactic/explode.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1542134711, "sha": "3e78b858", "message": "refactor(order/complete_lattice): make supr and infi available in has_Sup and has_Inf (#472)", "changes": [{"oldPath": "linear_algebra/lc.lean", "newPath": "linear_algebra/lc.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["mod", "def", "infi", ["lattice"]], ["mod", "theorem", "infi_congr_Prop", ["lattice"]], ["mod", "def", "supr", ["lattice"]], ["mod", "theorem", "supr_congr_Prop", ["lattice"]]]}]}, {"timestamp": 1541873797, "sha": "4a013fb0", "message": "feat(analysis): sequential completeness", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "cauchy_seq_metric'", []], ["add", "theorem", "cauchy_seq_metric", []], ["add", "theorem", "continuous_topo_metric", []], ["mod", "theorem", "exists_delta_of_continuous", []], ["add", "theorem", "tendsto_at_top_metric", []], ["add", "theorem", "tendsto_nhds_topo_metric", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "def", "cauchy_seq", []], ["add", "theorem", "cauchy_seq_tendsto_of_complete", []]]}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": [["del", "theorem", "cau_filter_lim_spec", []], ["add", "theorem", "cau_seq_iff_cauchy_seq", []], ["del", "theorem", "cau_seq_of_cau_filter_mem_set_seq", []], ["mod", "theorem", "cauchy_of_filter_cauchy", []], ["add", "theorem", "complete_of_cauchy_seq_tendsto", []], ["mod", "theorem", "filter_cauchy_of_cauchy", []], ["del", "theorem", "is_cau_seq_of_dist_tendsto_0", []], ["del", "theorem", "le_nhds_cau_filter_lim", []], ["del", "theorem", "mono_of_mono_succ", []], ["del", "theorem", "seq_of_cau_filter_is_cauchy'", []], ["del", "theorem", "seq_of_cau_filter_is_cauchy", []], ["del", "theorem", "seq_of_cau_filter_mem_set_seq", []], ["add", "theorem", "cauchy_seq_of_dist_tendsto_0", ["sequentially_complete"]], ["add", "theorem", "le_nhds_cau_filter_lim", ["sequentially_complete"]], ["add", "theorem", "mono_of_mono_succ", ["sequentially_complete"]], ["add", "theorem", "seq_of_cau_filter_is_cauchy'", ["sequentially_complete"]], ["add", "theorem", "seq_of_cau_filter_is_cauchy", ["sequentially_complete"]], ["add", "theorem", "seq_of_cau_filter_mem_set_seq", ["sequentially_complete"]], ["add", "def", "set_seq_of_cau_filter", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_inhabited", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_mem_sets", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_monotone'", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_monotone", ["sequentially_complete"]], ["add", "theorem", "set_seq_of_cau_filter_spec", ["sequentially_complete"]], ["add", "theorem", "tendsto_div", ["sequentially_complete"]], ["del", "def", "set_seq_of_cau_filter", []], ["del", "theorem", "set_seq_of_cau_filter_inhabited", []], ["del", "theorem", "set_seq_of_cau_filter_mem_sets", []], ["del", "theorem", "set_seq_of_cau_filter_monotone'", []], ["del", "theorem", "set_seq_of_cau_filter_monotone", []], ["del", "theorem", "set_seq_of_cau_filter_spec", []], ["del", "theorem", "tendsto_div", []], ["mod", "theorem", "tendsto_limit", []]]}]}, {"timestamp": 1541870726, "sha": "b83fe1ee", "message": "feat(analysis): metric spaces are first countable", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}]}, {"timestamp": 1541771493, "sha": "891dfbbe", "message": "chore(*): clean up uses of zorn", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "linear_algebra/basis.lean", "newPath": "linear_algebra/basis.lean", "changes": []}, {"oldPath": "logic/schroeder_bernstein.lean", "newPath": "logic/schroeder_bernstein.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": [["mod", "theorem", "zorn_partial_order₀", ["zorn"]]]}, {"oldPath": "ring_theory/ideal_operations.lean", "newPath": "ring_theory/ideal_operations.lean", "changes": []}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": []}]}, {"timestamp": 1541760181, "sha": "4fc67f8f", "message": "feat(data/fintype): add choose_unique and construct inverses to bijections (#421)", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "def", "choose", ["finset"]], ["add", "theorem", "choose_mem", ["finset"]], ["add", "theorem", "choose_property", ["finset"]], ["add", "theorem", "choose_spec", ["finset"]], ["add", "def", "choose_x", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "def", "bij_inv", ["fintype"]], ["add", "theorem", "bijective_bij_inv", ["fintype"]], ["add", "def", "choose", ["fintype"]], ["add", "theorem", "choose_spec", ["fintype"]], ["add", "def", "choose_x", ["fintype"]], ["add", "theorem", "left_inverse_bij_inv", ["fintype"]], ["add", "theorem", "right_inverse_bij_inv", ["fintype"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "def", "choose", ["list"]], ["add", "theorem", "choose_mem", ["list"]], ["add", "theorem", "choose_property", ["list"]], ["add", "theorem", "choose_spec", ["list"]], ["add", "def", "choose_x", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "def", "choose", ["multiset"]], ["add", "theorem", "choose_mem", ["multiset"]], ["add", "theorem", "choose_property", ["multiset"]], ["add", "theorem", "choose_spec", ["multiset"]], ["add", "def", "choose_x", ["multiset"]]]}]}, {"timestamp": 1541758928, "sha": "9f5099ec", "message": "refactor(analysis): add uniform_embedding_comap", "changes": [{"oldPath": "analysis/emetric_space.lean", "newPath": "analysis/emetric_space.lean", "changes": [["del", "theorem", "induced_uniform_embedding", ["emetric_space"]]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["del", "theorem", "induced_uniform_embedding", ["metric_space"]]]}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "uniform_embedding_comap", []]]}]}, {"timestamp": 1541758928, "sha": "6273837f", "message": "feat(analysis): add emetric spaces", "changes": [{"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "coe_nat", ["with_top"]], ["add", "theorem", "nat_ne_top", ["with_top"]], ["add", "theorem", "top_ne_nat", ["with_top"]]]}, {"oldPath": null, "newPath": "analysis/emetric_space.lean", "changes": [["add", "theorem", "cauchy_of_emetric", ["emetric_space"]], ["add", "theorem", "edist_eq_zero", ["emetric_space"]], ["add", "theorem", "edist_mem_uniformity", ["emetric_space"]], ["add", "theorem", "edist_triangle_left", ["emetric_space"]], ["add", "theorem", "edist_triangle_right", ["emetric_space"]], ["add", "theorem", "eq_of_forall_edist_le", ["emetric_space"]], ["add", "def", "induced", ["emetric_space"]], ["add", "theorem", "induced_uniform_embedding", ["emetric_space"]], ["add", "theorem", "mem_uniformity_edist", ["emetric_space"]], ["add", "def", "replace_uniformity", ["emetric_space"]], ["add", "theorem", "edist_eq", ["emetric_space", "subtype"]], ["add", "theorem", "uniform_continuous_of_emetric", ["emetric_space"]], ["add", "theorem", "uniform_embedding_of_emetric", ["emetric_space"]], ["add", "def", "uniform_space_of_edist", ["emetric_space"]], ["add", "theorem", "uniformity_edist''", ["emetric_space"]], ["add", "theorem", "uniformity_edist'", ["emetric_space"]], ["add", "theorem", "zero_eq_edist", ["emetric_space"]], ["add", "theorem", "uniformity_dist_of_mem_uniformity", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["del", "theorem", "coe_dist", []], ["add", "theorem", "dist_eq_edist", []], ["add", "theorem", "dist_eq_nndist", []], ["add", "theorem", "edist_dist", []], ["add", "theorem", "edist_eq_dist", []], ["add", "theorem", "edist_eq_nndist", []], ["add", "theorem", "edist_ne_top", []], ["add", "theorem", "mem_uniformity_dist_edist", []], ["add", "theorem", "nndist_eq_dist", []], ["add", "theorem", "nndist_eq_edist", []], ["del", "theorem", "uniformity_dist_of_mem_uniformity", []], ["add", "theorem", "uniformity_edist'", []], ["add", "theorem", "uniformity_edist", []]]}, {"oldPath": "data/complex/exponential.lean", "newPath": "data/complex/exponential.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "comp_inf_eq_inf_comp", ["finset"]], ["add", "theorem", "comp_sup_eq_sup_comp", ["finset"]], ["add", "theorem", "lt_inf", ["finset"]], ["add", "theorem", "sup_lt", ["finset"]]]}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["mod", "theorem", "cast_pos", ["nat"]]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": []}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": [["add", "theorem", "add_halves", ["ennreal"]], ["add", "theorem", "add_lt_add", ["ennreal"]], ["add", "theorem", "coe_div", ["ennreal"]], ["mod", "theorem", "coe_nat", ["ennreal"]], ["add", "theorem", "div_add_div_same", ["ennreal"]], ["add", "theorem", "div_pos_iff", ["ennreal"]], ["add", "theorem", "div_self", ["ennreal"]], ["add", "theorem", "nat_ne_top", ["ennreal"]], ["add", "theorem", "to_nnreal_eq_zero_iff", ["ennreal"]], ["add", "theorem", "top_ne_nat", ["ennreal"]], ["add", "theorem", "zero_to_nnreal", ["ennreal"]]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["add", "theorem", "add_halves", ["nnreal"]], ["add", "theorem", "div_add_div_same", ["nnreal"]], ["add", "theorem", "of_real_eq_zero", ["nnreal"]]]}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_lt_iff_ne_bot", ["lattice"]], ["add", "theorem", "lt_top_iff_ne_top", ["lattice"]]]}]}, {"timestamp": 1541756392, "sha": "ff8bd5b2", "message": "fix(data/multiset): remove unused argument from `range_zero` (#466)", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "range_zero", ["multiset"]]]}]}, {"timestamp": 1541672163, "sha": "b0564b2b", "message": "feat(category_theory): propose removing coercions from category_theory/ (#463)", "changes": [{"oldPath": "category_theory/embedding.lean", "newPath": "category_theory/embedding.lean", "changes": [["mod", "theorem", "image_preimage", ["category_theory", "functor"]], ["mod", "def", "preimage", ["category_theory", "functor"]], ["mod", "def", "preimage_iso", ["category_theory"]], ["del", "theorem", "preimage_iso_coe", ["category_theory"]], ["add", "theorem", "preimage_iso_hom", ["category_theory"]], ["add", "theorem", "preimage_iso_inv", ["category_theory"]], ["del", "theorem", "preimage_iso_symm_coe", ["category_theory"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["mod", "theorem", "map_id_obj", ["category_theory", "examples"]]]}, {"oldPath": "category_theory/full_subcategory.lean", "newPath": "category_theory/full_subcategory.lean", "changes": [["mod", "def", "full_subcategory_embedding", ["category_theory"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["mod", "theorem", "comp_obj", ["category_theory", "functor"]], ["mod", "theorem", "id_obj", ["category_theory", "functor"]], ["del", "def", "map", ["category_theory", "functor"]], ["del", "theorem", "map_comp", ["category_theory", "functor"]], ["del", "theorem", "map_id", ["category_theory", "functor"]], ["del", "theorem", "mk_map", ["category_theory", "functor"]], ["del", "theorem", "mk_obj", ["category_theory", "functor"]], ["del", "theorem", "obj_eq_coe", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": [["mod", "theorem", "comp_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "id_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "app_naturality", ["category_theory", "functor", "category", "nat_trans"]], ["mod", "theorem", "naturality_app", ["category_theory", "functor", "category", "nat_trans"]]]}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["mod", "def", "on_iso", ["category_theory", "functor"]], ["mod", "theorem", "on_iso_hom", ["category_theory", "functor"]], ["mod", "theorem", "on_iso_inv", ["category_theory", "functor"]], ["del", "theorem", "hom_eq_coe", ["category_theory", "iso"]], ["del", "theorem", "hom_inv_id", ["category_theory", "iso"]], ["del", "theorem", "inv_eq_coe", ["category_theory", "iso"]], ["del", "theorem", "inv_hom_id", ["category_theory", "iso"]], ["del", "theorem", "refl_coe", ["category_theory", "iso"]], ["add", "theorem", "refl_hom", ["category_theory", "iso"]], ["add", "theorem", "refl_inv", ["category_theory", "iso"]], ["mod", "theorem", "refl_symm", ["category_theory", "iso"]], ["del", "theorem", "refl_symm_coe", ["category_theory", "iso"]], ["add", "theorem", "symm_hom", ["category_theory", "iso"]], ["add", "theorem", "symm_inv", ["category_theory", "iso"]], ["del", "theorem", "trans_coe", ["category_theory", "iso"]], ["add", "theorem", "trans_hom", ["category_theory", "iso"]], ["add", "theorem", "trans_inv", ["category_theory", "iso"]], ["mod", "theorem", "trans_symm", ["category_theory", "iso"]], ["del", "theorem", "trans_symm_coe", ["category_theory", "iso"]]]}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "category_theory/natural_isomorphism.lean", "changes": [["mod", "def", "assoc", ["category_theory", "functor"]], ["mod", "def", "comp_id", ["category_theory", "functor"]], ["mod", "def", "id_comp", ["category_theory", "functor"]], ["mod", "def", "app", ["category_theory", "nat_iso"]], ["add", "theorem", "app_hom", ["category_theory", "nat_iso"]], ["add", "theorem", "app_inv", ["category_theory", "nat_iso"]], ["mod", "theorem", "comp_app", ["category_theory", "nat_iso"]], ["del", "theorem", "hom_eq_coe", ["category_theory", "nat_iso"]], ["del", "theorem", "inv_eq_symm_coe", ["category_theory", "nat_iso"]], ["del", "theorem", "mk_app'", ["category_theory", "nat_iso"]], ["del", "theorem", "mk_app", ["category_theory", "nat_iso"]], ["mod", "theorem", "naturality_1", ["category_theory", "nat_iso"]], ["mod", "theorem", "naturality_2", ["category_theory", "nat_iso"]], ["mod", "def", "app", ["category_theory", "nat_iso", "of_components"]], ["mod", "def", "hom_app", ["category_theory", "nat_iso", "of_components"]], ["mod", "def", "inv_app", ["category_theory", "nat_iso", "of_components"]], ["mod", "def", "of_components", ["category_theory", "nat_iso"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["del", "theorem", "app_eq_coe", ["category_theory", "nat_trans"]], ["mod", "theorem", "exchange", ["category_theory", "nat_trans"]], ["mod", "theorem", "ext", ["category_theory", "nat_trans"]], ["mod", "theorem", "hcomp_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "id_app", ["category_theory", "nat_trans"]], ["del", "theorem", "mk_app", ["category_theory", "nat_trans"]], ["del", "theorem", "naturality", ["category_theory", "nat_trans"]], ["mod", "theorem", "vcomp_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": [["mod", "theorem", "hom_obj", ["category_theory", "functor"]], ["mod", "theorem", "opposite_obj", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["mod", "def", "evaluation", ["category_theory"]], ["mod", "theorem", "prod_map", ["category_theory", "functor"]], ["mod", "theorem", "prod_obj", ["category_theory", "functor"]], ["mod", "theorem", "prod_app", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": [["mod", "def", "forget", ["category_theory"]], ["mod", "theorem", "hcomp", ["category_theory", "functor_to_types"]], ["mod", "theorem", "map_comp", ["category_theory", "functor_to_types"]], ["mod", "theorem", "map_id", ["category_theory", "functor_to_types"]], ["mod", "theorem", "naturality", ["category_theory", "functor_to_types"]], ["mod", "theorem", "vcomp", ["category_theory", "functor_to_types"]], ["del", "theorem", "iso_mk_coe", ["category_theory", "types"]]]}, {"oldPath": "category_theory/whiskering.lean", "newPath": "category_theory/whiskering.lean", "changes": [["mod", "theorem", "app", ["category_theory", "whisker_left"]], ["mod", "theorem", "whisker_left_vcomp", ["category_theory"]], ["mod", "def", "whisker_right", ["category_theory"]], ["mod", "theorem", "whisker_right_vcomp", ["category_theory"]], ["mod", "def", "whiskering_left", ["category_theory"]]]}, {"oldPath": "category_theory/yoneda.lean", "newPath": "category_theory/yoneda.lean", "changes": [["mod", "theorem", "map_app", ["category_theory", "yoneda"]], ["mod", "theorem", "naturality", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_map", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_map_id", ["category_theory", "yoneda"]], ["mod", "theorem", "obj_obj", ["category_theory", "yoneda"]], ["mod", "def", "yoneda", ["category_theory"]], ["mod", "def", "yoneda_evaluation", ["category_theory"]], ["mod", "def", "yoneda_lemma", ["category_theory"]], ["mod", "def", "yoneda_pairing", ["category_theory"]]]}, {"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}]}, {"timestamp": 1541669380, "sha": "2f38ed7a", "message": "feat(ring_theory/ideal_operations): define ideal operations (multiplication and radical) (#462)", "changes": [{"oldPath": "group_theory/free_abelian_group.lean", "newPath": "group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": [["add", "theorem", "mem_Sup_of_directed", ["submodule"]], ["add", "theorem", "mem_map_of_mem", ["submodule"]]]}, {"oldPath": "linear_algebra/tensor_product.lean", "newPath": "linear_algebra/tensor_product.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": [["add", "theorem", "zorn_partial_order₀", ["zorn"]]]}, {"oldPath": null, "newPath": "ring_theory/ideal_operations.lean", "changes": [["add", "theorem", "add_eq_sup", ["ideal"]], ["add", "theorem", "bot_mul", ["ideal"]], ["add", "def", "comap", ["ideal"]], ["add", "theorem", "comap_inf", ["ideal"]], ["add", "theorem", "comap_mono", ["ideal"]], ["add", "theorem", "comap_ne_top", ["ideal"]], ["add", "theorem", "comap_radical", ["ideal"]], ["add", "theorem", "comap_top", ["ideal"]], ["add", "theorem", "radical", ["ideal", "is_prime"]], ["add", "theorem", "radical_le_iff", ["ideal", "is_prime"]], ["add", "theorem", "le_comap_mul", ["ideal"]], ["add", "theorem", "le_comap_sup", ["ideal"]], ["add", "theorem", "le_radical", ["ideal"]], ["add", "def", "map", ["ideal"]], ["add", "theorem", "map_bot", ["ideal"]], ["add", "theorem", "map_inf_le", ["ideal"]], ["add", "theorem", "map_le_iff_le_comap", ["ideal"]], ["add", "theorem", "map_mono", ["ideal"]], ["add", "theorem", "map_mul", ["ideal"]], ["add", "theorem", "map_radical_le", ["ideal"]], ["add", "theorem", "map_sup", ["ideal"]], ["add", "theorem", "map_top", ["ideal"]], ["add", "theorem", "mem_comap", ["ideal"]], ["add", "theorem", "mem_map_of_mem", ["ideal"]], ["add", "theorem", "mul_bot", ["ideal"]], ["add", "theorem", "mul_eq_inf_of_coprime", ["ideal"]], ["add", "theorem", "mul_le", ["ideal"]], ["add", "theorem", "mul_le_inf", ["ideal"]], ["add", "theorem", "mul_mem_mul", ["ideal"]], ["add", "theorem", "mul_mem_mul_rev", ["ideal"]], ["add", "theorem", "mul_mono", ["ideal"]], ["add", "theorem", "mul_mono_left", ["ideal"]], ["add", "theorem", "mul_mono_right", ["ideal"]], ["add", "theorem", "mul_sup", ["ideal"]], ["add", "theorem", "mul_top", ["ideal"]], ["add", "theorem", "one_eq_top", ["ideal"]], ["add", "def", "radical", ["ideal"]], ["add", "theorem", "radical_eq_Inf", ["ideal"]], ["add", "theorem", "radical_eq_top", ["ideal"]], ["add", "theorem", "radical_idem", ["ideal"]], ["add", "theorem", "radical_inf", ["ideal"]], ["add", "theorem", "radical_mono", ["ideal"]], ["add", "theorem", "radical_mul", ["ideal"]], ["add", "theorem", "radical_pow", ["ideal"]], ["add", "theorem", "radical_sup", ["ideal"]], ["add", "theorem", "radical_top", ["ideal"]], ["add", "theorem", "span_mul_span", ["ideal"]], ["add", "theorem", "sup_mul", ["ideal"]], ["add", "theorem", "top_mul", ["ideal"]], ["add", "theorem", "zero_eq_bot", ["ideal"]], ["add", "theorem", "add_eq_sup", ["submodule"]], ["add", "def", "annihilator", ["submodule"]], ["add", "theorem", "annihilator_bot", ["submodule"]], ["add", "theorem", "annihilator_eq_top_iff", ["submodule"]], ["add", "theorem", "annihilator_mono", ["submodule"]], ["add", "theorem", "annihilator_supr", ["submodule"]], ["add", "theorem", "bot_smul", ["submodule"]], ["add", "def", "colon", ["submodule"]], ["add", "theorem", "colon_mono", ["submodule"]], ["add", "theorem", "infi_colon_supr", ["submodule"]], ["add", "theorem", "mem_annihilator'", ["submodule"]], ["add", "theorem", "mem_annihilator", ["submodule"]], ["add", "theorem", "mem_colon'", ["submodule"]], ["add", "theorem", "mem_colon", ["submodule"]], ["add", "theorem", "smul_assoc", ["submodule"]], ["add", "theorem", "smul_bot", ["submodule"]], ["add", "theorem", "smul_induction_on", ["submodule"]], ["add", "theorem", "smul_le", ["submodule"]], ["add", "theorem", "smul_le_right", ["submodule"]], ["add", "theorem", "smul_mem_smul", ["submodule"]], ["add", "theorem", "smul_mono", ["submodule"]], ["add", "theorem", "smul_mono_left", ["submodule"]], ["add", "theorem", "smul_mono_right", ["submodule"]], ["add", "theorem", "smul_sup", ["submodule"]], ["add", "theorem", "span_smul_span", ["submodule"]], ["add", "theorem", "sup_smul", ["submodule"]], ["add", "theorem", "top_smul", ["submodule"]], ["add", "theorem", "zero_eq_bot", ["submodule"]]]}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["del", "def", "comap", ["ideal"]], ["del", "theorem", "comap_ne_top", ["ideal"]], ["add", "theorem", "mem_of_pow_mem", ["ideal", "is_prime"]], ["del", "theorem", "mem_comap", ["ideal"]]]}]}, {"timestamp": 1541669307, "sha": "41e8eb32", "message": "feat(ring_theory/localization): quotient ring of integral domain is discrete field", "changes": [{"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": [["mod", "def", "of_integral_domain", ["localization", "quotient_ring", "field"]]]}]}, {"timestamp": 1541508058, "sha": "89431cf4", "message": "feat(linear_algebra): direct sum", "changes": [{"oldPath": null, "newPath": "data/dfinsupp.lean", "changes": [["add", "def", "decidable_zero_symm", []], ["add", "theorem", "add_apply", ["dfinsupp"]], ["add", "theorem", "eq_mk_support", ["dfinsupp"]], ["add", "def", "erase", ["dfinsupp"]], ["add", "theorem", "erase_add_single", ["dfinsupp"]], ["add", "theorem", "erase_apply", ["dfinsupp"]], ["add", "theorem", "erase_def", ["dfinsupp"]], ["add", "theorem", "erase_ne", ["dfinsupp"]], ["add", "theorem", "erase_same", ["dfinsupp"]], ["add", "theorem", "ext", ["dfinsupp"]], ["add", "def", "filter", ["dfinsupp"]], ["add", "theorem", "filter_apply", ["dfinsupp"]], ["add", "theorem", "filter_apply_neg", ["dfinsupp"]], ["add", "theorem", "filter_apply_pos", ["dfinsupp"]], ["add", "theorem", "filter_def", ["dfinsupp"]], ["add", "theorem", "filter_pos_add_filter_neg", ["dfinsupp"]], ["add", "theorem", "finite_supp", ["dfinsupp"]], ["add", "theorem", "induction₂", ["dfinsupp"]], ["add", "def", "lmk", ["dfinsupp"]], ["add", "theorem", "lmk_apply", ["dfinsupp"]], ["add", "def", "lsingle", ["dfinsupp"]], ["add", "theorem", "lsingle_apply", ["dfinsupp"]], ["add", "def", "map_range", ["dfinsupp"]], ["add", "theorem", "map_range_apply", ["dfinsupp"]], ["add", "theorem", "map_range_def", ["dfinsupp"]], ["add", "theorem", "map_range_single", ["dfinsupp"]], ["add", "theorem", "mem_support_iff", ["dfinsupp"]], ["add", "theorem", "mem_support_to_fun", ["dfinsupp"]], ["add", "def", "mk", ["dfinsupp"]], ["add", "theorem", "mk_add", ["dfinsupp"]], ["add", "theorem", "mk_apply", ["dfinsupp"]], ["add", "theorem", "mk_inj", ["dfinsupp"]], ["add", "theorem", "mk_neg", ["dfinsupp"]], ["add", "theorem", "mk_smul", ["dfinsupp"]], ["add", "theorem", "mk_sub", ["dfinsupp"]], ["add", "theorem", "mk_zero", ["dfinsupp"]], ["add", "theorem", "neg_apply", ["dfinsupp"]], ["add", "structure", "pre", ["dfinsupp"]], ["add", "def", "prod", ["dfinsupp"]], ["add", "theorem", "prod_add_index", ["dfinsupp"]], ["add", "theorem", "prod_finset_sum_index", ["dfinsupp"]], ["add", "theorem", "prod_map_range_index", ["dfinsupp"]], ["add", "theorem", "prod_neg_index", ["dfinsupp"]], ["add", "theorem", "prod_single_index", ["dfinsupp"]], ["add", "theorem", "prod_subtype_domain_index", ["dfinsupp"]], ["add", "theorem", "prod_sum_index", ["dfinsupp"]], ["add", "theorem", "prod_zero_index", ["dfinsupp"]], ["add", "def", "single", ["dfinsupp"]], ["add", "theorem", "single_add", ["dfinsupp"]], ["add", "theorem", "single_add_erase", ["dfinsupp"]], ["add", "theorem", "single_apply", ["dfinsupp"]], ["add", "theorem", "single_eq_of_ne", ["dfinsupp"]], ["add", "theorem", "single_eq_same", ["dfinsupp"]], ["add", "theorem", "single_smul", ["dfinsupp"]], ["add", "theorem", "single_zero", ["dfinsupp"]], ["add", "theorem", "smul_apply", ["dfinsupp"]], ["add", "theorem", "sub_apply", ["dfinsupp"]], ["add", "def", "subtype_domain", ["dfinsupp"]], ["add", "theorem", "subtype_domain_add", ["dfinsupp"]], ["add", "theorem", "subtype_domain_apply", ["dfinsupp"]], ["add", "theorem", "subtype_domain_def", ["dfinsupp"]], ["add", "theorem", "subtype_domain_finsupp_sum", ["dfinsupp"]], ["add", "theorem", "subtype_domain_neg", ["dfinsupp"]], ["add", "theorem", "subtype_domain_sub", ["dfinsupp"]], ["add", "theorem", "subtype_domain_sum", ["dfinsupp"]], ["add", "theorem", "subtype_domain_zero", ["dfinsupp"]], ["add", "def", "sum", ["dfinsupp"]], ["add", "theorem", "sum_add", ["dfinsupp"]], ["add", "theorem", "sum_apply", ["dfinsupp"]], ["add", "theorem", "sum_neg", ["dfinsupp"]], ["add", "theorem", "sum_single", ["dfinsupp"]], ["add", "theorem", "sum_sub_index", ["dfinsupp"]], ["add", "theorem", "sum_zero", ["dfinsupp"]], ["add", "def", "support", ["dfinsupp"]], ["add", "theorem", "support_add", ["dfinsupp"]], ["add", "theorem", "support_eq_empty", ["dfinsupp"]], ["add", "theorem", "support_erase", ["dfinsupp"]], ["add", "theorem", "support_filter", ["dfinsupp"]], ["add", "theorem", "support_map_range", ["dfinsupp"]], ["add", "theorem", "support_mk_subset", ["dfinsupp"]], ["add", "theorem", "support_neg", ["dfinsupp"]], ["add", "theorem", "support_single_ne_zero", ["dfinsupp"]], ["add", "theorem", "support_single_subset", ["dfinsupp"]], ["add", "theorem", "support_subset_iff", ["dfinsupp"]], ["add", "theorem", "support_subtype_domain", ["dfinsupp"]], ["add", "theorem", "support_sum", ["dfinsupp"]], ["add", "theorem", "support_zero", ["dfinsupp"]], ["add", "theorem", "support_zip_with", ["dfinsupp"]], ["add", "def", "to_has_scalar", ["dfinsupp"]], ["add", "def", "to_module", ["dfinsupp"]], ["add", "theorem", "zero_apply", ["dfinsupp"]], ["add", "def", "zip_with", ["dfinsupp"]], ["add", "theorem", "zip_with_apply", ["dfinsupp"]], ["add", "theorem", "zip_with_def", ["dfinsupp"]], ["add", "def", "dfinsupp", []]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "to_finset_add", ["multiset"]], ["add", "theorem", "to_finset_zero", ["multiset"]]]}, {"oldPath": null, "newPath": "linear_algebra/direct_sum_module.lean", "changes": [["add", "def", "mk", ["direct_sum"]], ["add", "theorem", "mk_inj", ["direct_sum"]], ["add", "def", "of", ["direct_sum"]], ["add", "theorem", "of_inj", ["direct_sum"]], ["add", "def", "set_to_set", ["direct_sum"]], ["add", "theorem", "ext", ["direct_sum", "to_module"]], ["add", "theorem", "of", ["direct_sum", "to_module"]], ["add", "theorem", "unique", ["direct_sum", "to_module"]], ["add", "def", "to_module", ["direct_sum"]], ["add", "theorem", "to_module_apply", ["direct_sum"]], ["add", "theorem", "add", ["direct_sum", "to_module_aux"]], ["add", "theorem", "smul", ["direct_sum", "to_module_aux"]], ["add", "def", "to_module_aux", ["direct_sum"]], ["add", "def", "direct_sum", []]]}, {"oldPath": "linear_algebra/tensor_product.lean", "newPath": "linear_algebra/tensor_product.lean", "changes": [["add", "def", "direct_sum", ["tensor_product"]]]}]}, {"timestamp": 1541424756, "sha": "09632904", "message": "fix(data/real/irrational): fix build", "changes": [{"oldPath": "data/real/irrational.lean", "newPath": "data/real/irrational.lean", "changes": []}]}, {"timestamp": 1541440726, "sha": "21d4d1c2", "message": "feat(field_theory/perfect_closure): define the perfect closure of a field", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "iterate_cancel", ["nat"]], ["add", "theorem", "iterate_inj", ["nat"]], ["add", "theorem", "iterate₀", ["nat"]], ["add", "theorem", "iterate₁", ["nat"]], ["add", "theorem", "iterate₂", ["nat"]]]}, {"oldPath": null, "newPath": "field_theory/perfect_closure.lean", "changes": [["add", "theorem", "frobenius_pth_root", []], ["add", "theorem", "pth_root", ["is_ring_hom"]], ["add", "def", "UMP", ["perfect_closure"]], ["add", "theorem", "eq_iff'", ["perfect_closure"]], ["add", "theorem", "eq_iff", ["perfect_closure"]], ["add", "theorem", "eq_pth_root", ["perfect_closure"]], ["add", "def", "frobenius_equiv", ["perfect_closure"]], ["add", "theorem", "frobenius_equiv_apply", ["perfect_closure"]], ["add", "theorem", "frobenius_mk", ["perfect_closure"]], ["add", "theorem", "int_cast", ["perfect_closure"]], ["add", "theorem", "mk_zero", ["perfect_closure"]], ["add", "theorem", "nat_cast", ["perfect_closure"]], ["add", "theorem", "nat_cast_eq_iff", ["perfect_closure"]], ["add", "def", "of", ["perfect_closure"]], ["add", "theorem", "sound", ["perfect_closure", "r"]], ["add", "inductive", "r", ["perfect_closure"]], ["add", "def", "perfect_closure", []], ["add", "theorem", "pth_root_frobenius", []]]}]}, {"timestamp": 1541440726, "sha": "8eac03c6", "message": "feat(algebra/char_p): define the characteristic of a semiring", "changes": [{"oldPath": null, "newPath": "algebra/char_p.lean", "changes": [["add", "theorem", "add_pow_char", []], ["add", "theorem", "cast_eq_zero", ["char_p"]], ["add", "theorem", "eq", ["char_p"]], ["add", "theorem", "exists", ["char_p"]], ["add", "theorem", "exists_unique", ["char_p"]], ["add", "def", "frobenius", []], ["add", "theorem", "frobenius_add", []], ["add", "theorem", "frobenius_def", []], ["add", "theorem", "frobenius_inj", []], ["add", "theorem", "frobenius_mul", []], ["add", "theorem", "frobenius_nat_cast", []], ["add", "theorem", "frobenius_neg", []], ["add", "theorem", "frobenius_one", []], ["add", "theorem", "frobenius_sub", []], ["add", "theorem", "frobenius_zero", []], ["add", "theorem", "map_frobenius", ["is_monoid_hom"]], ["add", "theorem", "eq", ["ring_char"]], ["add", "theorem", "spec", ["ring_char"]]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "pow_eq_zero", []]]}]}, {"timestamp": 1541439995, "sha": "53d4883f", "message": "refactor(cau_seq): unify real.lim, complex.lim and cau_seq.lim (#433)", "changes": [{"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "data/complex/basic.lean", "newPath": "data/complex/basic.lean", "changes": [["del", "theorem", "eq_lim_of_const_equiv", ["complex"]], ["del", "theorem", "equiv_lim", ["complex"]], ["add", "theorem", "equiv_lim_aux", ["complex"]], ["del", "theorem", "im_const_equiv_of_const_equiv", ["complex"]], ["mod", "theorem", "is_cau_seq_conj", ["complex"]], ["mod", "theorem", "lim_abs", ["complex"]], ["del", "theorem", "lim_add", ["complex"]], ["mod", "theorem", "lim_conj", ["complex"]], ["del", "theorem", "lim_const", ["complex"]], ["add", "theorem", "lim_eq_lim_im_add_lim_re", ["complex"]], ["del", "theorem", "lim_eq_lim_of_equiv", ["complex"]], ["del", "theorem", "lim_eq_of_equiv_const", ["complex"]], ["del", "theorem", "lim_eq_zero_iff", ["complex"]], ["add", "theorem", "lim_im", ["complex"]], ["del", "theorem", "lim_inv", ["complex"]], ["del", "theorem", "lim_mul", ["complex"]], ["del", "theorem", "lim_mul_lim", ["complex"]], ["del", "theorem", "lim_neg", ["complex"]], ["add", "theorem", "lim_re", ["complex"]], ["del", "theorem", "re_const_equiv_of_const_equiv", ["complex"]]]}, {"oldPath": "data/complex/exponential.lean", "newPath": "data/complex/exponential.lean", "changes": []}, {"oldPath": "data/padics/hensel.lean", "newPath": "data/padics/hensel.lean", "changes": []}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "data/padics/padic_integers.lean", "changes": []}, {"oldPath": "data/padics/padic_numbers.lean", "newPath": "data/padics/padic_numbers.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["del", "theorem", "eq_lim_of_const_equiv", ["real"]], ["del", "theorem", "equiv_lim", ["real"]], ["del", "theorem", "le_lim", ["real"]], ["del", "theorem", "lim_add", ["real"]], ["del", "theorem", "lim_const", ["real"]], ["del", "theorem", "lim_eq_lim_of_equiv", ["real"]], ["del", "theorem", "lim_eq_of_equiv_const", ["real"]], ["del", "theorem", "lim_eq_zero_iff", ["real"]], ["del", "theorem", "lim_inv", ["real"]], ["del", "theorem", "lim_le", ["real"]], ["del", "theorem", "lim_lt", ["real"]], ["del", "theorem", "lim_mul", ["real"]], ["del", "theorem", "lim_mul_lim", ["real"]], ["del", "theorem", "lim_neg", ["real"]], ["del", "theorem", "lt_lim", ["real"]]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": [["mod", "theorem", "const_equiv", ["cau_seq"]], ["del", "theorem", "mul_lim_zero", ["cau_seq"]], ["add", "theorem", "mul_lim_zero_left", ["cau_seq"]], ["add", "theorem", "mul_lim_zero_right", ["cau_seq"]]]}, {"oldPath": "data/real/cau_seq_completion.lean", "newPath": "data/real/cau_seq_completion.lean", "changes": [["mod", "theorem", "complete", ["cau_seq"]], ["add", "theorem", "eq_lim_of_const_equiv", ["cau_seq"]], ["add", "theorem", "equiv_lim", ["cau_seq"]], ["add", "theorem", "le_lim", ["cau_seq"]], ["add", "theorem", "lim_add", ["cau_seq"]], ["add", "theorem", "lim_const", ["cau_seq"]], ["add", "theorem", "lim_eq_lim_of_equiv", ["cau_seq"]], ["add", "theorem", "lim_eq_of_equiv_const", ["cau_seq"]], ["add", "theorem", "lim_eq_zero_iff", ["cau_seq"]], ["add", "theorem", "lim_inv", ["cau_seq"]], ["add", "theorem", "lim_le", ["cau_seq"]], ["add", "theorem", "lim_lt", ["cau_seq"]], ["add", "theorem", "lim_mul", ["cau_seq"]], ["add", "theorem", "lim_mul_lim", ["cau_seq"]], ["add", "theorem", "lim_neg", ["cau_seq"]], ["del", "theorem", "lim_spec", ["cau_seq"]], ["add", "theorem", "lt_lim", ["cau_seq"]]]}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": []}]}, {"timestamp": 1541439841, "sha": "17da2776", "message": "feat(group_theory/eckmann_hilton): add Eckmann-Hilton (#335)", "changes": [{"oldPath": null, "newPath": "group_theory/eckmann_hilton.lean", "changes": [["add", "def", "comm_group", ["eckmann_hilton"]], ["add", "def", "comm_monoid", ["eckmann_hilton"]], ["add", "theorem", "is_unital", ["eckmann_hilton", "group"]], ["add", "theorem", "mul", ["eckmann_hilton"]], ["add", "theorem", "mul_assoc", ["eckmann_hilton"]], ["add", "theorem", "mul_comm", ["eckmann_hilton"]], ["add", "theorem", "one", ["eckmann_hilton"]]]}]}, {"timestamp": 1541439657, "sha": "efcb1fb8", "message": "feat(analysis/topology/topological_space): more about discrete spaces", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "eq_top_of_singletons_open", []]]}]}, {"timestamp": 1541439631, "sha": "1a4d938a", "message": "hotifx(analysis/topology/continuity): difference with disjoint and `s ∩ t = ∅`", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}]}, {"timestamp": 1541437244, "sha": "14d99a37", "message": "hotfix(data/real/irrational): cast problem", "changes": [{"oldPath": "data/real/irrational.lean", "newPath": "data/real/irrational.lean", "changes": [["mod", "theorem", "irr_sqrt_two", []]]}]}, {"timestamp": 1541414824, "sha": "a12d5a19", "message": "feat(linear_algebra,ring_theory): refactoring modules (#456)\nCo-authored with Kenny Lau. See also\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/module.20refactoring for discussion.\nMajor changes made:\n- `semimodule α β` and `module α β` and `vector_space α β` now take one more argument, that `β` is an `add_comm_group`, i.e. before making an instance of a module, you need to prove that it's an abelian group first.\n- vector space is no longer over a field, but a discrete field.\n- The idiom for making an instance `module α β` (after proving that `β` is an abelian group) is `module.of_core { smul := sorry, smul_add := sorry, add_smul := sorry, mul_smul := sorry, one_smul := sorry }`.\n- `is_linear_map` and `linear_map` are now both structures, and they are independent, meaning that `linear_map` is no longer defined as `subtype is_linear_map`. The idiom for making `linear_map` from `is_linear_map` is `is_linear_map.mk' (f : M -> N) (sorry : is_linear_map f)`, and the idiom for making `is_linear_map` from `linear_map` is `f.is_linear` (i.e. `linear_map.is_linear f`).\n- `is_linear_map.add` etc no longer exist. instead, you can now add two linear maps together, etc.\n- the class`is_submodule` is gone, replaced by the structure `submodule` which contains a carrier, i.e. if `N : submodule R M` then `N.carrier` is a type. And there is an instance `module R N` in the same situation.\n- similarly, the class `is_ideal` is gone, replaced by the structure `ideal`, which also contains a carrier.\n- endomorphism ring and general linear group are defined.\n- submodules form a complete lattice. the trivial ideal is now idiomatically the bottom element, and the universal ideal the top element.\n- `linear_algebra/quotient_module.lean` is deleted, and it's now `submodule.quotient` (so if `N : submodule R M` then `submodule R N.quotient`) Similarly, `quotient_ring.quotient` is replaced by `ideal.quotient`. The canonical map from `N` to `N.quotient` is `submodule.quotient.mk`, and the canonical map from the ideal `I` to `I.quotient` is `ideal.quotient.mk I`.\n- `linear_equiv` is now based on a linear map and an equiv, and the difference being that now you need to prove that the inverse is also linear, and there is currently no interface to get around that.\n- Everything you want to know about linear independence and basis is now in the newly created file `linear_algebra/basis.lean`.\n- Everything you want to know about linear combinations is now in the newly created file `linear_algebra/lc.lean`.\n- `linear_algebra/linear_map_module.lean` and `linear_algebra/prod_module.lean` and `linear_algebra/quotient_module.lean` and `linear_algebra/submodule.lean` and `linear_algebra/subtype_module.lean` are deleted (with their contents placed elsewhere).\nsquashed commits:\n* feat(linear_algebra/basic): product modules, cat/lat structure\n* feat(linear_algebra/basic): refactoring quotient_module\n* feat(linear_algebra/basic): merge in submodule.lean\n* feat(linear_algebra/basic): merge in linear_map_module.lean\n* refactor(linear_algebra/dimension): update for new modules\n* feat(ring_theory/ideals): convert ideals\n* refactor tensor product\n* simplify local ring proof for Zp\n* refactor(ring_theory/noetherian)\n* refactor(ring_theory/localization)\n* refactor(linear_algebra/tensor_product)\n* feat(data/polynomial): lcoeff", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["del", "theorem", "add_smul'", []], ["mod", "theorem", "add_smul", []], ["add", "theorem", "add_mem_iff_left", ["ideal"]], ["add", "theorem", "add_mem_iff_right", ["ideal"]], ["add", "theorem", "mul_mem_left", ["ideal"]], ["add", "theorem", "mul_mem_right", ["ideal"]], ["add", "theorem", "neg_mem_iff", ["ideal"]], ["add", "def", "ideal", []], ["del", "theorem", "comp", ["is_linear_map"]], ["del", "theorem", "id", ["is_linear_map"]], ["del", "theorem", "inverse", ["is_linear_map"]], ["del", "theorem", "map_add", ["is_linear_map"]], ["del", "theorem", "map_neg", ["is_linear_map"]], ["del", "theorem", "map_smul_left", ["is_linear_map"]], ["del", "theorem", "map_smul_right", ["is_linear_map"]], ["del", "theorem", "map_sub", ["is_linear_map"]], ["del", "theorem", "map_sum", ["is_linear_map"]], ["del", "theorem", "map_zero", ["is_linear_map"]], ["add", "def", "mk'", ["is_linear_map"]], ["add", "theorem", "mk'_apply", ["is_linear_map"]], ["del", "theorem", "neg", ["is_linear_map"]], ["del", "theorem", "sub", ["is_linear_map"]], ["del", "theorem", "sum", ["is_linear_map"]], ["del", "theorem", "zero", ["is_linear_map"]], ["del", "structure", "is_linear_map", []], ["del", "theorem", "Inter_submodule", ["is_submodule"]], ["del", "theorem", "add", ["is_submodule"]], ["del", "theorem", "eq_univ_of_contains_unit", ["is_submodule"]], ["del", "theorem", "neg", ["is_submodule"]], ["del", "theorem", "smul_ne_0", ["is_submodule"]], ["del", "theorem", "sub", ["is_submodule"]], ["del", "theorem", "sum", ["is_submodule"]], ["del", "theorem", "univ_of_one_mem", ["is_submodule"]], ["del", "theorem", "zero", ["is_submodule"]], ["add", "def", "comp", ["linear_map"]], ["add", "theorem", "comp_apply", ["linear_map"]], ["add", "theorem", "ext", ["linear_map"]], ["add", "theorem", "ext_iff", ["linear_map"]], ["add", "def", "id", ["linear_map"]], ["add", "theorem", "id_apply", ["linear_map"]], ["add", "theorem", "is_linear", ["linear_map"]], ["add", "theorem", "map_add", ["linear_map"]], ["add", "theorem", "map_neg", ["linear_map"]], ["add", "theorem", "map_smul", ["linear_map"]], ["add", "theorem", "map_sub", ["linear_map"]], ["add", "theorem", "map_sum", ["linear_map"]], ["add", "theorem", "map_zero", ["linear_map"]], ["add", "structure", "linear_map", []], ["add", "structure", "core", ["module"]], ["add", "def", "of_core", ["module"]], ["del", "theorem", "mul_smul'", []], ["mod", "theorem", "mul_smul", []], ["del", "theorem", "one_smul'", []], ["mod", "theorem", "one_smul", []], ["del", "theorem", "smul_add'", []], ["mod", "theorem", "smul_add", []], ["del", "theorem", "smul_eq_mul'", []], ["mod", "theorem", "smul_eq_mul", []], ["del", "theorem", "smul_smul'", []], ["mod", "theorem", "smul_smul", []], ["del", "theorem", "smul_zero'", []], ["mod", "theorem", "smul_zero", []], ["add", "theorem", "add_mem", ["submodule"]], ["add", "theorem", "add_mem_iff_left", ["submodule"]], ["add", "theorem", "add_mem_iff_right", ["submodule"]], ["add", "theorem", "coe_add", ["submodule"]], ["add", "theorem", "coe_neg", ["submodule"]], ["add", "theorem", "coe_smul", ["submodule"]], ["add", "theorem", "coe_sub", ["submodule"]], ["add", "theorem", "coe_zero", ["submodule"]], ["add", "theorem", "ext'", ["submodule"]], ["add", "theorem", "ext", ["submodule"]], ["add", "theorem", "mem_coe", ["submodule"]], ["add", "theorem", "neg_mem", ["submodule"]], ["add", "theorem", "neg_mem_iff", ["submodule"]], ["add", "theorem", "smul_mem", ["submodule"]], ["add", "theorem", "smul_mem_iff", ["submodule"]], ["add", "theorem", "sub_mem", ["submodule"]], ["add", "theorem", "subtype_apply", ["submodule"]], ["add", "theorem", "sum_mem", ["submodule"]], ["add", "theorem", "zero_mem", ["submodule"]], ["add", "structure", "submodule", []], ["mod", "def", "subspace", []], ["del", "theorem", "zero_smul'", []], ["mod", "theorem", "zero_smul", []]]}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "eq_iff_le_not_lt", []]]}, {"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": [["add", "theorem", "inv_mk", ["prod"]], ["add", "theorem", "mk_mul_mk", ["prod"]], ["add", "theorem", "one_eq_mk", ["prod"]], ["add", "theorem", "smul_fst", ["prod"]], ["add", "theorem", "smul_mk", ["prod"]], ["add", "theorem", "smul_snd", ["prod"]]]}, {"oldPath": "analysis/bounded_linear_maps.lean", "newPath": "analysis/bounded_linear_maps.lean", "changes": [["mod", "theorem", "tendsto", ["is_bounded_linear_map"]]]}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": []}, {"oldPath": "analysis/topology/quotient_topological_structures.lean", "newPath": "analysis/topology/quotient_topological_structures.lean", "changes": [["mod", "theorem", "is_open_map_coe", ["quotient_ring"]], ["mod", "theorem", "quotient_map_coe_coe", ["quotient_ring"]]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "def", "closure", ["ideal"]], ["add", "theorem", "coe_closure", ["ideal"]]]}, {"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "def", "prop_equiv_punit", ["equiv"]], ["mod", "def", "true_equiv_punit", ["equiv"]]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "filter_add", ["finsupp"]], ["mod", "theorem", "filter_pos_add_filter_neg", ["finsupp"]], ["add", "theorem", "filter_single_of_neg", ["finsupp"]], ["add", "theorem", "filter_single_of_pos", ["finsupp"]], ["add", "theorem", "filter_smul", ["finsupp"]], ["mod", "theorem", "map_domain_id", ["finsupp"]], ["add", "theorem", "map_domain_smul", ["finsupp"]], ["mod", "theorem", "map_domain_zero", ["finsupp"]], ["add", "theorem", "map_range_add", ["finsupp"]], ["add", "theorem", "map_range_zero", ["finsupp"]], ["mod", "theorem", "smul_apply'", ["finsupp"]], ["add", "theorem", "smul_single", ["finsupp"]], ["mod", "theorem", "sum_single", ["finsupp"]], ["add", "theorem", "support_smul", ["finsupp"]], ["mod", "def", "to_has_scalar'", ["finsupp"]], ["mod", "def", "to_has_scalar", ["finsupp"]], ["mod", "def", "to_module", ["finsupp"]], ["add", "def", "to_semimodule", ["finsupp"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_of_subsingleton", ["fintype", "fintype"]], ["add", "theorem", "univ_of_subsingleton", ["fintype", "fintype"]], ["add", "def", "of_subsingleton", ["fintype"]]]}, {"oldPath": "data/holor.lean", "newPath": "data/holor.lean", "changes": []}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "data/padics/padic_integers.lean", "changes": [["add", "theorem", "is_unit_iff", ["padic_int"]], ["del", "def", "maximal_ideal", ["padic_int"]], ["del", "theorem", "maximal_ideal_add", ["padic_int"]], ["del", "theorem", "maximal_ideal_eq_nonunits", ["padic_int"]], ["del", "theorem", "maximal_ideal_eq_or_univ_of_subset", ["padic_int"]], ["del", "theorem", "maximal_ideal_mul", ["padic_int"]], ["del", "theorem", "maximal_ideal_ne_univ", ["padic_int"]], ["del", "theorem", "maximal_ideal_unique", ["padic_int"]], ["add", "theorem", "mem_nonunits", ["padic_int"]], ["add", "theorem", "norm_lt_one_add", ["padic_int"]], ["add", "theorem", "norm_lt_one_mul", ["padic_int"]]]}, {"oldPath": "data/padics/padic_numbers.lean", "newPath": "data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "rat_dense'", ["padic"]], ["mod", "theorem", "rat_dense", ["padic"]], ["mod", "def", "padic", []], ["mod", "def", "padic_norm_e", []]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["del", "theorem", "coeff_is_linear", ["polynomial"]], ["add", "def", "lcoeff", ["polynomial"]], ["add", "theorem", "lcoeff_apply", ["polynomial"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "coe_nonempty_iff_ne_empty", ["set"]], ["add", "theorem", "mono'", ["set", "pairwise_on"]], ["add", "theorem", "mono", ["set", "pairwise_on"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["mod", "theorem", "disjoint_bot_left", []], ["mod", "theorem", "disjoint_bot_right", []]]}, {"oldPath": "group_theory/free_abelian_group.lean", "newPath": "group_theory/free_abelian_group.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": [["add", "theorem", "some_spec3", ["classical"]], ["del", "theorem", "constr_add", []], ["del", "theorem", "constr_basis", []], ["del", "theorem", "constr_congr", []], ["del", "theorem", "constr_eq", []], ["del", "theorem", "constr_im_eq_span", []], ["del", "theorem", "constr_mem_span", []], ["del", "theorem", "constr_neg", []], ["del", "theorem", "constr_smul", []], ["del", "theorem", "constr_sub", []], ["del", "theorem", "constr_zero", []], ["del", "theorem", "eq_of_linear_independent_of_span", []], ["del", "def", "equiv_of_is_basis", []], ["del", "theorem", "exists_finite_card_le_of_finite_of_linear_independent_of_span", []], ["del", "theorem", "exists_is_basis", []], ["del", "theorem", "exists_left_inverse_linear_map_of_injective", []], ["del", "theorem", "exists_linear_independent", []], ["del", "theorem", "exists_of_linear_independent_of_finite_span", []], ["del", "theorem", "exists_right_inverse_linear_map_of_surjective", []], ["del", "theorem", "exists_subset_is_basis", []], ["mod", "theorem", "smul_sum", ["finset"]], ["mod", "theorem", "smul_sum", ["finsupp"]], ["del", "def", "constr", ["is_basis"]], ["del", "theorem", "eq_linear_map", ["is_basis"]], ["del", "theorem", "linear_equiv", ["is_basis"]], ["del", "theorem", "map_constr", ["is_basis"]], ["del", "theorem", "map_repr", ["is_basis"]], ["del", "def", "is_basis", []], ["del", "theorem", "finsupp_sum", ["is_linear_map"]], ["del", "theorem", "is_submodule_range_smul", []], ["del", "theorem", "is_linear_map_sum", ["lc"]], ["del", "def", "lc", []], ["del", "theorem", "linear_eq_on", []], ["add", "theorem", "apply_symm_apply", ["linear_equiv"]], ["add", "theorem", "coe_apply", ["linear_equiv"]], ["add", "def", "congr_right", ["linear_equiv"]], ["del", "theorem", "linear_inv", ["linear_equiv"]], ["add", "theorem", "of_bijective_apply", ["linear_equiv"]], ["add", "def", "of_linear", ["linear_equiv"]], ["add", "theorem", "of_linear_apply", ["linear_equiv"]], ["add", "theorem", "of_linear_symm_apply", ["linear_equiv"]], ["add", "def", "of_top", ["linear_equiv"]], ["add", "theorem", "of_top_apply", ["linear_equiv"]], ["add", "theorem", "of_top_symm_apply", ["linear_equiv"]], ["mod", "def", "refl", ["linear_equiv"]], ["mod", "def", "symm", ["linear_equiv"]], ["add", "theorem", "symm_apply_apply", ["linear_equiv"]], ["mod", "structure", "linear_equiv", []], ["del", "theorem", "eq_0_of_span", ["linear_independent"]], ["del", "theorem", "image", ["linear_independent"]], ["del", "theorem", "inj_span_iff_inj", ["linear_independent"]], ["del", "theorem", "insert", ["linear_independent"]], ["del", "theorem", "mono", ["linear_independent"]], ["del", "theorem", "of_image", ["linear_independent"]], ["del", "def", "repr", ["linear_independent"]], ["del", "theorem", "unique", ["linear_independent"]], ["del", "def", "linear_independent", []], ["del", "theorem", "linear_independent_Union_of_directed", []], ["del", "theorem", "linear_independent_bUnion_of_directed", []], ["del", "theorem", "linear_independent_empty", []], ["del", "theorem", "linear_independent_iff_not_mem_span", []], ["del", "theorem", "linear_independent_singleton", []], ["del", "theorem", "linear_independent_union", []], ["add", "theorem", "add_apply", ["linear_map"]], ["add", "def", "cod_restrict", ["linear_map"]], ["add", "theorem", "cod_restrict_apply", ["linear_map"]], ["add", "theorem", "comap_cod_restrict", ["linear_map"]], ["add", "theorem", "comap_injective", ["linear_map"]], ["add", "theorem", "comap_le_comap_iff", ["linear_map"]], ["add", "theorem", "comap_map_eq", ["linear_map"]], ["add", "theorem", "comap_map_eq_self", ["linear_map"]], ["add", "theorem", "comap_pair_prod", ["linear_map"]], ["add", "theorem", "comp_id", ["linear_map"]], ["add", "def", "congr_right", ["linear_map"]], ["add", "def", "copair", ["linear_map"]], ["add", "theorem", "copair_apply", ["linear_map"]], ["add", "theorem", "copair_inl", ["linear_map"]], ["add", "theorem", "copair_inl_inr", ["linear_map"]], ["add", "theorem", "copair_inr", ["linear_map"]], ["add", "theorem", "disjoint_ker'", ["linear_map"]], ["add", "theorem", "disjoint_ker", ["linear_map"]], ["add", "def", "endomorphism_ring", ["linear_map"]], ["add", "theorem", "finsupp_sum", ["linear_map"]], ["add", "def", "fst", ["linear_map"]], ["add", "theorem", "fst_apply", ["linear_map"]], ["add", "theorem", "fst_eq_copair", ["linear_map"]], ["add", "theorem", "fst_pair", ["linear_map"]], ["add", "def", "general_linear_group", ["linear_map"]], ["add", "theorem", "id_comp", ["linear_map"]], ["add", "theorem", "inj_of_disjoint_ker", ["linear_map"]], ["add", "def", "inl", ["linear_map"]], ["add", "theorem", "inl_apply", ["linear_map"]], ["add", "theorem", "inl_eq_pair", ["linear_map"]], ["add", "def", "inr", ["linear_map"]], ["add", "theorem", "inr_apply", ["linear_map"]], ["add", "theorem", "inr_eq_pair", ["linear_map"]], ["add", "def", "inverse", ["linear_map"]], ["add", "def", "ker", ["linear_map"]], ["add", "theorem", "ker_comp", ["linear_map"]], ["add", "theorem", "ker_eq_bot", ["linear_map"]], ["add", "theorem", "ker_eq_top", ["linear_map"]], ["add", "theorem", "ker_id", ["linear_map"]], ["add", "theorem", "ker_le_ker_comp", ["linear_map"]], ["add", "theorem", "ker_zero", ["linear_map"]], ["add", "theorem", "le_ker_iff_map", ["linear_map"]], ["del", "theorem", "linear_independent_image_iff", ["linear_map"]], ["add", "theorem", "map_cod_restrict", ["linear_map"]], ["add", "theorem", "map_comap_eq", ["linear_map"]], ["add", "theorem", "map_comap_eq_self", ["linear_map"]], ["add", "theorem", "map_copair_prod", ["linear_map"]], ["add", "theorem", "map_injective", ["linear_map"]], ["add", "theorem", "map_le_map_iff", ["linear_map"]], ["add", "theorem", "mem_ker", ["linear_map"]], ["add", "theorem", "mem_range", ["linear_map"]], ["add", "theorem", "mul_app", ["linear_map"]], ["add", "theorem", "neg_apply", ["linear_map"]], ["add", "theorem", "one_app", ["linear_map"]], ["add", "def", "pair", ["linear_map"]], ["add", "theorem", "pair_apply", ["linear_map"]], ["add", "theorem", "pair_fst_snd", ["linear_map"]], ["add", "theorem", "prod_eq_inf_comap", ["linear_map"]], ["add", "theorem", "prod_eq_sup_map", ["linear_map"]], ["add", "def", "range", ["linear_map"]], ["add", "theorem", "range_coe", ["linear_map"]], ["add", "theorem", "range_comp", ["linear_map"]], ["add", "theorem", "range_comp_le_range", ["linear_map"]], ["add", "theorem", "range_eq_top", ["linear_map"]], ["add", "theorem", "range_id", ["linear_map"]], ["add", "theorem", "range_le_iff_comap", ["linear_map"]], ["add", "theorem", "smul_apply", ["linear_map"]], ["add", "def", "smul_right", ["linear_map"]], ["add", "theorem", "smul_right_apply", ["linear_map"]], ["add", "def", "snd", ["linear_map"]], ["add", "theorem", "snd_apply", ["linear_map"]], ["add", "theorem", "snd_eq_copair", ["linear_map"]], ["add", "theorem", "snd_pair", ["linear_map"]], ["add", "theorem", "span_inl_union_inr", ["linear_map"]], ["add", "theorem", "sub_apply", ["linear_map"]], ["add", "theorem", "sub_mem_ker_iff", ["linear_map"]], ["add", "theorem", "sum_apply", ["linear_map"]], ["add", "theorem", "zero_apply", ["linear_map"]], ["del", "theorem", "mem_span_insert", []], ["del", "theorem", "mem_span_insert_exchange", []], ["del", "def", "module_equiv_lc", []], ["del", "theorem", "repr_add", []], ["del", "theorem", "repr_eq", []], ["del", "theorem", "repr_eq_repr_of_subset", []], ["del", "theorem", "repr_eq_single", []], ["del", "theorem", "repr_eq_zero", []], ["del", "theorem", "repr_finsupp_sum", []], ["del", "theorem", "repr_neg", []], ["del", "theorem", "repr_not_span", []], ["del", "theorem", "repr_smul", []], ["del", "theorem", "repr_spec", []], ["del", "theorem", "repr_sub", []], ["del", "theorem", "repr_sum", []], ["del", "theorem", "repr_sum_eq", []], ["del", "theorem", "repr_support", []], ["del", "theorem", "repr_zero", []], ["del", "def", "span", []], ["del", "theorem", "span_empty", []], ["del", "theorem", "span_eq", []], ["del", "theorem", "span_eq_of_is_submodule", []], ["del", "theorem", "span_image_of_linear_map", []], ["del", "theorem", "span_insert", []], ["del", "theorem", "span_insert_eq_span", []], ["del", "theorem", "span_minimal", []], ["del", "theorem", "span_mono", []], ["del", "theorem", "span_singleton", []], ["del", "theorem", "span_span", []], ["del", "theorem", "span_union", []], ["add", "theorem", "Inf_coe", ["submodule"]], ["add", "theorem", "Union_coe_of_directed", ["submodule"]], ["add", "theorem", "bot_coe", ["submodule"]], ["add", "def", "comap", ["submodule"]], ["add", "theorem", "comap_bot", ["submodule"]], ["add", "theorem", "comap_coe", ["submodule"]], ["add", "theorem", "comap_comp", ["submodule"]], ["add", "theorem", "comap_fst", ["submodule"]], ["add", "theorem", "comap_id", ["submodule"]], ["add", "theorem", "comap_liftq", ["submodule"]], ["add", "theorem", "comap_map_mkq", ["submodule"]], ["add", "def", "le_order_embedding", ["submodule", "comap_mkq"]], ["add", "def", "lt_order_embedding", ["submodule", "comap_mkq"]], ["add", "def", "order_iso", ["submodule", "comap_mkq"]], ["add", "theorem", "comap_mkq_embedding_eq", ["submodule"]], ["add", "theorem", "comap_mono", ["submodule"]], ["add", "theorem", "comap_snd", ["submodule"]], ["add", "theorem", "comap_top", ["submodule"]], ["add", "theorem", "disjoint_def", ["submodule"]], ["add", "theorem", "eq_top_iff'", ["submodule"]], ["add", "theorem", "inf_coe", ["submodule"]], ["add", "theorem", "infi_coe", ["submodule"]], ["add", "theorem", "ker_inl", ["submodule"]], ["add", "theorem", "ker_inr", ["submodule"]], ["add", "theorem", "ker_liftq", ["submodule"]], ["add", "theorem", "ker_liftq_eq_bot", ["submodule"]], ["add", "theorem", "ker_mkq", ["submodule"]], ["add", "theorem", "ker_subtype", ["submodule"]], ["add", "theorem", "le_comap_map", ["submodule"]], ["add", "theorem", "le_comap_mkq", ["submodule"]], ["add", "theorem", "le_def'", ["submodule"]], ["add", "theorem", "le_def", ["submodule"]], ["add", "def", "liftq", ["submodule"]], ["add", "theorem", "liftq_apply", ["submodule"]], ["add", "theorem", "liftq_mkq", ["submodule"]], ["add", "def", "map", ["submodule"]], ["add", "theorem", "map_bot", ["submodule"]], ["add", "theorem", "map_coe", ["submodule"]], ["add", "theorem", "map_comap_le", ["submodule"]], ["add", "theorem", "map_comap_subtype", ["submodule"]], ["add", "theorem", "map_comp", ["submodule"]], ["add", "theorem", "map_id", ["submodule"]], ["add", "theorem", "map_inf_eq_map_inf_comap", ["submodule"]], ["add", "theorem", "map_inl", ["submodule"]], ["add", "theorem", "map_inr", ["submodule"]], ["add", "theorem", "map_le_iff_le_comap", ["submodule"]], ["add", "theorem", "map_mono", ["submodule"]], ["add", "def", "le_order_embedding", ["submodule", "map_subtype"]], ["add", "def", "lt_order_embedding", ["submodule", "map_subtype"]], ["add", "def", "order_iso", ["submodule", "map_subtype"]], ["add", "theorem", "map_subtype_embedding_eq", ["submodule"]], ["add", "theorem", "map_subtype_le", ["submodule"]], ["add", "theorem", "map_top", ["submodule"]], ["add", "def", "mapq", ["submodule"]], ["add", "theorem", "mapq_apply", ["submodule"]], ["add", "theorem", "mapq_mkq", ["submodule"]], ["add", "theorem", "mem_bot", ["submodule"]], ["add", "theorem", "mem_comap", ["submodule"]], ["add", "theorem", "mem_inf", ["submodule"]], ["add", "theorem", "mem_infi", ["submodule"]], ["add", "theorem", "mem_map", ["submodule"]], ["add", "theorem", "mem_prod", ["submodule"]], ["add", "theorem", "mem_span", ["submodule"]], ["add", "theorem", "mem_span_insert'", ["submodule"]], ["add", "theorem", "mem_span_insert", ["submodule"]], ["add", "theorem", "mem_span_singleton", ["submodule"]], ["add", "theorem", "mem_sup", ["submodule"]], ["add", "theorem", "mem_supr_of_directed", ["submodule"]], ["add", "theorem", "mem_top", ["submodule"]], ["add", "def", "mkq", ["submodule"]], ["add", "theorem", "mkq_apply", ["submodule"]], ["add", "theorem", "mkq_map_self", ["submodule"]], ["add", "def", "of_le", ["submodule"]], ["add", "theorem", "of_le_apply", ["submodule"]], ["add", "def", "prod", ["submodule"]], ["add", "theorem", "prod_bot", ["submodule"]], ["add", "theorem", "prod_coe", ["submodule"]], ["add", "theorem", "prod_comap_inl", ["submodule"]], ["add", "theorem", "prod_comap_inr", ["submodule"]], ["add", "theorem", "prod_inf_prod", ["submodule"]], ["add", "theorem", "prod_map_fst", ["submodule"]], ["add", "theorem", "prod_map_snd", ["submodule"]], ["add", "theorem", "prod_mono", ["submodule"]], ["add", "theorem", "prod_sup_prod", ["submodule"]], ["add", "theorem", "prod_top", ["submodule"]], ["add", "theorem", "mk'_eq_mk", ["submodule", "quotient"]], ["add", "def", "mk", ["submodule", "quotient"]], ["add", "theorem", "mk_add", ["submodule", "quotient"]], ["add", "theorem", "mk_eq_mk", ["submodule", "quotient"]], ["add", "theorem", "mk_eq_zero", ["submodule", "quotient"]], ["add", "theorem", "mk_neg", ["submodule", "quotient"]], ["add", "theorem", "mk_smul", ["submodule", "quotient"]], ["add", "theorem", "mk_zero", ["submodule", "quotient"]], ["add", "theorem", "quot_mk_eq_mk", ["submodule", "quotient"]], ["add", "def", "quotient", ["submodule"]], ["add", "def", "quotient_rel", ["submodule"]], ["add", "theorem", "range_fst", ["submodule"]], ["add", "theorem", "range_mkq", ["submodule"]], ["add", "theorem", "range_snd", ["submodule"]], ["add", "theorem", "range_subtype", ["submodule"]], ["add", "def", "span", ["submodule"]], ["add", "theorem", "span_Union", ["submodule"]], ["add", "theorem", "span_empty", ["submodule"]], ["add", "theorem", "span_eq", ["submodule"]], ["add", "theorem", "span_eq_bot", ["submodule"]], ["add", "theorem", "span_eq_of_le", ["submodule"]], ["add", "theorem", "span_image", ["submodule"]], ["add", "theorem", "span_induction", ["submodule"]], ["add", "theorem", "span_insert_eq_span", ["submodule"]], ["add", "theorem", "span_le", ["submodule"]], ["add", "theorem", "span_mono", ["submodule"]], ["add", "theorem", "span_prod_le", ["submodule"]], ["add", "theorem", "span_singleton_eq_bot", ["submodule"]], ["add", "theorem", "span_singleton_eq_range", ["submodule"]], ["add", "theorem", "span_span", ["submodule"]], ["add", "theorem", "span_union", ["submodule"]], ["add", "theorem", "subset_span", ["submodule"]], ["add", "theorem", "top_coe", ["submodule"]], ["del", "theorem", "subset_span", []], ["del", "theorem", "zero_not_mem_of_linear_independent", []]]}, {"oldPath": null, "newPath": "linear_algebra/basis.lean", "changes": [["add", "theorem", "constr_add", []], ["add", "theorem", "constr_basis", []], ["add", "theorem", "constr_congr", []], ["add", "theorem", "constr_eq", []], ["add", "theorem", "constr_neg", []], ["add", "theorem", "constr_range", []], ["add", "theorem", "constr_self", []], ["add", "theorem", "constr_smul", []], ["add", "theorem", "constr_sub", []], ["add", "theorem", "constr_zero", []], ["add", "theorem", "disjoint_span_singleton", []], ["add", "theorem", "eq_of_linear_independent_of_span", []], ["add", "def", "equiv_of_is_basis", []], ["add", "theorem", "exists_finite_card_le_of_finite_of_linear_independent_of_span", []], ["add", "theorem", "exists_is_basis", []], ["add", "theorem", "exists_left_inverse_linear_map_of_injective", []], ["add", "theorem", "exists_linear_independent", []], ["add", "theorem", "exists_of_linear_independent_of_finite_span", []], ["add", "theorem", "exists_right_inverse_linear_map_of_surjective", []], ["add", "theorem", "exists_subset_is_basis", []], ["add", "def", "constr", ["is_basis"]], ["add", "theorem", "constr_apply", ["is_basis"]], ["add", "theorem", "ext", ["is_basis"]], ["add", "theorem", "mem_span", ["is_basis"]], ["add", "def", "repr", ["is_basis"]], ["add", "theorem", "repr_eq_single", ["is_basis"]], ["add", "theorem", "repr_ker", ["is_basis"]], ["add", "theorem", "repr_range", ["is_basis"]], ["add", "theorem", "repr_supported", ["is_basis"]], ["add", "theorem", "total_comp_repr", ["is_basis"]], ["add", "theorem", "total_repr", ["is_basis"]], ["add", "def", "is_basis", []], ["add", "theorem", "is_basis_inl_union_inr", []], ["add", "theorem", "is_basis", ["linear_equiv"]], ["add", "theorem", "disjoint_ker", ["linear_independent"]], ["add", "theorem", "image", ["linear_independent"]], ["add", "theorem", "inj_span_iff_inj", ["linear_independent"]], ["add", "theorem", "insert", ["linear_independent"]], ["add", "theorem", "mono", ["linear_independent"]], ["add", "theorem", "of_image", ["linear_independent"]], ["add", "def", "repr", ["linear_independent"]], ["add", "theorem", "repr_eq", ["linear_independent"]], ["add", "theorem", "repr_eq_repr_of_subset", ["linear_independent"]], ["add", "theorem", "repr_eq_single", ["linear_independent"]], ["add", "theorem", "repr_ker", ["linear_independent"]], ["add", "theorem", "repr_range", ["linear_independent"]], ["add", "theorem", "repr_supported", ["linear_independent"]], ["add", "theorem", "supported_disjoint_ker", ["linear_independent"]], ["add", "theorem", "total_comp_repr", ["linear_independent"]], ["add", "def", "total_equiv", ["linear_independent"]], ["add", "theorem", "total_repr", ["linear_independent"]], ["add", "theorem", "unique", ["linear_independent"]], ["add", "def", "linear_independent", []], ["add", "theorem", "linear_independent_Union_of_directed", []], ["add", "theorem", "linear_independent_bUnion_of_directed", []], ["add", "theorem", "linear_independent_empty", []], ["add", "theorem", "linear_independent_iff", []], ["add", "theorem", "linear_independent_iff_not_mem_span", []], ["add", "theorem", "linear_independent_iff_not_smul_mem_span", []], ["add", "theorem", "linear_independent_iff_total_on", []], ["add", "theorem", "linear_independent_inl_union_inr", []], ["add", "theorem", "linear_independent_of_finite", []], ["add", "theorem", "linear_independent_sUnion_of_directed", []], ["add", "theorem", "linear_independent_singleton", []], ["add", "theorem", "linear_independent_union", []], ["add", "theorem", "linear_independent_image_iff", ["linear_map"]], ["add", "theorem", "mem_span_insert_exchange", []], ["add", "def", "module_equiv_lc", []], ["add", "theorem", "quotient_prod_linear_equiv", []], ["add", "theorem", "zero_not_mem_of_linear_independent", []]]}, {"oldPath": "linear_algebra/dimension.lean", "newPath": "linear_algebra/dimension.lean", "changes": [["add", "theorem", "dim_prod", []], ["add", "theorem", "dim_quotient", []], ["add", "theorem", "dim_range_add_dim_ker", []], ["add", "theorem", "le_span", ["is_basis"]], ["add", "theorem", "mk_eq_dim", ["is_basis"]], ["add", "theorem", "dim_eq", ["linear_equiv"]], ["add", "theorem", "mk_eq_mk_of_basis", []], ["del", "theorem", "basis_le_span", ["vector_space"]], ["mod", "def", "dim", ["vector_space"]], ["del", "theorem", "dim_eq_of_linear_equiv", ["vector_space"]], ["del", "theorem", "dim_im_add_dim_ker", ["vector_space"]], ["del", "theorem", "dim_prod", ["vector_space"]], ["del", "theorem", "dim_quotient", ["vector_space"]], ["del", "theorem", "mk_basis", ["vector_space"]], ["del", "theorem", "mk_eq_mk_of_basis", ["vector_space"]]]}, {"oldPath": null, "newPath": "linear_algebra/lc.lean", "changes": [["add", "def", "apply", ["lc"]], ["add", "theorem", "apply_apply", ["lc"]], ["add", "theorem", "lsum_apply", ["lc"]], ["add", "theorem", "map_apply", ["lc"]], ["add", "theorem", "map_comp", ["lc"]], ["add", "theorem", "map_disjoint_ker", ["lc"]], ["add", "theorem", "map_id", ["lc"]], ["add", "theorem", "map_supported", ["lc"]], ["add", "theorem", "map_total", ["lc"]], ["add", "theorem", "mem_supported'", ["lc"]], ["add", "theorem", "mem_supported", ["lc"]], ["add", "theorem", "range_restrict_dom", ["lc"]], ["add", "def", "restrict_dom", ["lc"]], ["add", "theorem", "restrict_dom_apply", ["lc"]], ["add", "theorem", "restrict_dom_comp_subtype", ["lc"]], ["add", "theorem", "single_mem_supported", ["lc"]], ["add", "def", "supported", ["lc"]], ["add", "theorem", "supported_Inter", ["lc"]], ["add", "theorem", "supported_Union", ["lc"]], ["add", "theorem", "supported_comap_map", ["lc"]], ["add", "theorem", "supported_empty", ["lc"]], ["add", "theorem", "supported_eq_span_single", ["lc"]], ["add", "theorem", "supported_mono", ["lc"]], ["add", "theorem", "supported_union", ["lc"]], ["add", "theorem", "supported_univ", ["lc"]], ["add", "theorem", "total_apply", ["lc"]], ["add", "def", "total_on", ["lc"]], ["add", "theorem", "total_on_range", ["lc"]], ["add", "theorem", "total_range", ["lc"]], ["add", "theorem", "total_single", ["lc"]], ["add", "def", "lc", []], ["add", "theorem", "linear_eq_on", []], ["add", "theorem", "mem_span_iff_lc", []], ["add", "theorem", "span_eq_map_lc", []]]}, {"oldPath": "linear_algebra/linear_map_module.lean", "newPath": null, "changes": [["del", "theorem", "add_app", ["linear_map"]], ["del", "theorem", "ext", ["linear_map"]], ["del", "def", "im", ["linear_map"]], ["del", "theorem", "inj_of_trivial_ker", ["linear_map"]], ["del", "theorem", "is_linear_map_coe", ["linear_map"]], ["del", "theorem", "add_left_iff", ["linear_map", "is_submodule"]], ["del", "theorem", "neg_iff", ["linear_map", "is_submodule"]], ["del", "def", "ker", ["linear_map"]], ["del", "theorem", "ker_of_map_eq_map", ["linear_map"]], ["del", "theorem", "map_add", ["linear_map"]], ["del", "theorem", "map_neg", ["linear_map"]], ["del", "theorem", "map_smul", ["linear_map"]], ["del", "theorem", "map_sub", ["linear_map"]], ["del", "theorem", "map_zero", ["linear_map"]], ["del", "theorem", "mem_im", ["linear_map"]], ["del", "theorem", "mem_ker", ["linear_map"]], ["del", "theorem", "neg_app", ["linear_map"]], ["del", "def", "quot_ker_equiv_im", ["linear_map"]], ["del", "theorem", "smul_app", ["linear_map"]], ["del", "theorem", "sub_ker", ["linear_map"]], ["del", "def", "union_quotient_equiv_quotient_inter", ["linear_map"]], ["del", "theorem", "zero_app", ["linear_map"]], ["del", "def", "linear_map", []], ["del", "def", "endomorphism_ring", ["module"]], ["del", "def", "general_linear_group", ["module"]], ["del", "theorem", "mul_app", ["module"]], ["del", "theorem", "one_app", ["module"]]]}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "linear_algebra/prod_module.lean", "newPath": null, "changes": [["del", "theorem", "is_basis_inl_union_inr", ["prod"]], ["del", "theorem", "is_linear_map_prod_fst", ["prod"]], ["del", "theorem", "is_linear_map_prod_inl", ["prod"]], ["del", "theorem", "is_linear_map_prod_inr", ["prod"]], ["del", "theorem", "is_linear_map_prod_mk", ["prod"]], ["del", "theorem", "is_linear_map_prod_snd", ["prod"]], ["del", "theorem", "linear_independent_inl_union_inr", ["prod"]], ["del", "theorem", "span_inl_union_inr", ["prod"]], ["del", "theorem", "span_prod", ["prod"]]]}, {"oldPath": "linear_algebra/quotient_module.lean", "newPath": null, "changes": [["del", "def", "quotient_rel", ["is_submodule"]], ["del", "theorem", "coe_add", ["quotient_module"]], ["del", "theorem", "coe_eq_zero", ["quotient_module"]], ["del", "theorem", "coe_smul", ["quotient_module"]], ["del", "theorem", "coe_zero", ["quotient_module"]], ["del", "theorem", "is_linear_map_quotient_lift", ["quotient_module"]], ["del", "theorem", "is_linear_map_quotient_mk", ["quotient_module"]], ["del", "def", "mk", ["quotient_module"]], ["del", "theorem", "exists_rep", ["quotient_module", "quotient"]], ["del", "theorem", "injective_lift", ["quotient_module", "quotient"]], ["del", "def", "lift", ["quotient_module", "quotient"]], ["del", "theorem", "lift_mk", ["quotient_module", "quotient"]], ["del", "def", "quotient", ["quotient_module"]], ["del", "theorem", "quotient_prod_linear_equiv", ["quotient_module"]]]}, {"oldPath": "linear_algebra/submodule.lean", "newPath": null, "changes": [["del", "def", "le_order_embedding", ["quotient_module"]], ["del", "def", "lt_order_embedding", ["quotient_module"]], ["del", "theorem", "Union_set_of_directed", ["submodule"]], ["del", "theorem", "bot_set", ["submodule"]], ["del", "theorem", "coe_comap", ["submodule"]], ["del", "theorem", "coe_map", ["submodule"]], ["del", "theorem", "coe_prod", ["submodule"]], ["del", "def", "comap", ["submodule"]], ["del", "theorem", "comap_comp", ["submodule"]], ["del", "theorem", "comap_id", ["submodule"]], ["del", "theorem", "comap_map_eq", ["submodule"]], ["del", "def", "order_iso", ["submodule", "comap_quotient"]], ["del", "def", "comap_quotient", ["submodule"]], ["del", "theorem", "ext", ["submodule"]], ["del", "theorem", "injective_comap", ["submodule"]], ["del", "theorem", "injective_map", ["submodule"]], ["del", "def", "lt_order_embedding", ["submodule"]], ["del", "def", "map", ["submodule"]], ["del", "theorem", "map_comp", ["submodule"]], ["del", "theorem", "map_id", ["submodule"]], ["del", "def", "le_order_embedding", ["submodule", "map_subtype"]], ["del", "def", "order_iso", ["submodule", "map_subtype"]], ["del", "def", "map_subtype", ["submodule"]], ["del", "theorem", "map_subtype_embedding_eq", ["submodule"]], ["del", "theorem", "map_subtype_subset", ["submodule"]], ["del", "theorem", "mem_coe", ["submodule"]], ["del", "theorem", "mem_span_singleton", ["submodule"]], ["del", "def", "prod", ["submodule"]], ["del", "theorem", "sInter_set", ["submodule"]], ["del", "def", "span", ["submodule"]], ["del", "theorem", "span_empty", ["submodule"]], ["del", "theorem", "span_singleton_subset", ["submodule"]], ["del", "theorem", "span_subset_iff", ["submodule"]], ["del", "theorem", "span_union", ["submodule"]], ["del", "theorem", "subset_comap_quotient", ["submodule"]], ["del", "theorem", "top_set", ["submodule"]], ["del", "structure", "{u", []]]}, {"oldPath": "linear_algebra/subtype_module.lean", "newPath": null, "changes": [["del", "theorem", "coe_add", ["is_submodule"]], ["del", "theorem", "coe_neg", ["is_submodule"]], ["del", "theorem", "coe_smul", ["is_submodule"]], ["del", "theorem", "coe_zero", ["is_submodule"]], ["del", "theorem", "is_linear_map_coe", ["is_submodule"]], ["del", "theorem", "is_linear_map_subtype_mk", ["is_submodule"]], ["del", "theorem", "is_linear_map_subtype_val", ["is_submodule"]], ["del", "theorem", "sub_val", ["is_submodule"]]]}, {"oldPath": "linear_algebra/tensor_product.lean", "newPath": "linear_algebra/tensor_product.lean", "changes": [["del", "theorem", "comm", ["is_bilinear_map"]], ["del", "theorem", "comp", ["is_bilinear_map"]], ["del", "theorem", "linear_left", ["is_bilinear_map"]], ["del", "theorem", "linear_right", ["is_bilinear_map"]], ["del", "theorem", "neg_left", ["is_bilinear_map"]], ["del", "theorem", "neg_right", ["is_bilinear_map"]], ["del", "theorem", "zero_left", ["is_bilinear_map"]], ["del", "theorem", "zero_right", ["is_bilinear_map"]], ["del", "structure", "is_bilinear_map", []], ["add", "def", "compl₂", ["linear_map"]], ["add", "theorem", "compl₂_apply", ["linear_map"]], ["add", "def", "compr₂", ["linear_map"]], ["add", "theorem", "compr₂_apply", ["linear_map"]], ["add", "theorem", "ext₂", ["linear_map"]], ["add", "def", "flip", ["linear_map"]], ["add", "theorem", "flip_apply", ["linear_map"]], ["add", "theorem", "flip_inj", ["linear_map"]], ["add", "def", "lcomp", ["linear_map"]], ["add", "theorem", "lcomp_apply", ["linear_map"]], ["add", "def", "lflip", ["linear_map"]], ["add", "theorem", "lflip_apply", ["linear_map"]], ["add", "def", "llcomp", ["linear_map"]], ["add", "theorem", "llcomp_apply", ["linear_map"]], ["add", "def", "lsmul", ["linear_map"]], ["add", "theorem", "lsmul_apply", ["linear_map"]], ["add", "theorem", "map_add₂", ["linear_map"]], ["add", "theorem", "map_neg₂", ["linear_map"]], ["add", "theorem", "map_smul₂", ["linear_map"]], ["add", "theorem", "map_zero₂", ["linear_map"]], ["add", "def", "mk₂", ["linear_map"]], ["add", "theorem", "mk₂_apply", ["linear_map"]], ["mod", "theorem", "add_tmul", ["tensor_product"]], ["del", "theorem", "bilinear", ["tensor_product"]], ["add", "def", "congr", ["tensor_product"]], ["add", "def", "curry", ["tensor_product"]], ["add", "theorem", "curry_apply", ["tensor_product"]], ["add", "theorem", "ext", ["tensor_product"]], ["add", "def", "lcurry", ["tensor_product"]], ["add", "theorem", "lcurry_apply", ["tensor_product"]], ["add", "def", "equiv", ["tensor_product", "lift"]], ["add", "theorem", "tmul'", ["tensor_product", "lift"]], ["add", "theorem", "tmul", ["tensor_product", "lift"]], ["add", "theorem", "unique", ["tensor_product", "lift"]], ["add", "def", "lift", ["tensor_product"]], ["add", "theorem", "add", ["tensor_product", "lift_aux"]], ["add", "theorem", "smul", ["tensor_product", "lift_aux"]], ["add", "def", "lift_aux", ["tensor_product"]], ["add", "theorem", "lift_compr₂", ["tensor_product"]], ["add", "theorem", "lift_mk", ["tensor_product"]], ["add", "theorem", "lift_mk_compr₂", ["tensor_product"]], ["add", "def", "map", ["tensor_product"]], ["add", "theorem", "map_tmul", ["tensor_product"]], ["add", "def", "mk", ["tensor_product"]], ["add", "theorem", "mk_apply", ["tensor_product"]], ["add", "theorem", "mk_compr₂_inj", ["tensor_product"]], ["add", "theorem", "neg_tmul", ["tensor_product"]], ["mod", "def", "aux", ["tensor_product", "smul"]], ["del", "theorem", "is_add_group_hom", ["tensor_product", "smul"]], ["del", "def", "smul", ["tensor_product"]], ["mod", "theorem", "smul_tmul", ["tensor_product"]], ["del", "theorem", "add_left", ["tensor_product", "tmul"]], ["del", "theorem", "add_right", ["tensor_product", "tmul"]], ["del", "theorem", "smul", ["tensor_product", "tmul"]], ["mod", "theorem", "tmul_add", ["tensor_product"]], ["add", "theorem", "tmul_neg", ["tensor_product"]], ["add", "theorem", "tmul_zero", ["tensor_product"]], ["del", "theorem", "add", ["tensor_product", "to_module"]], ["del", "def", "equiv", ["tensor_product", "to_module"]], ["del", "theorem", "ext", ["tensor_product", "to_module"]], ["del", "def", "linear", ["tensor_product", "to_module"]], ["del", "theorem", "smul", ["tensor_product", "to_module"]], ["del", "theorem", "tmul", ["tensor_product", "to_module"]], ["del", "theorem", "unique", ["tensor_product", "to_module"]], ["del", "def", "to_module", ["tensor_product"]], ["add", "def", "uncurry", ["tensor_product"]], ["add", "theorem", "uncurry_apply", ["tensor_product"]], ["add", "theorem", "zero_tmul", ["tensor_product"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": [["add", "theorem", "mono", ["zorn", "chain"]], ["add", "theorem", "zorn_subset₀", ["zorn"]]]}, {"oldPath": "ring_theory/associated.lean", "newPath": "ring_theory/associated.lean", "changes": [["add", "theorem", "is_unit_iff_exists_inv'", []], ["add", "theorem", "is_unit_iff_exists_inv", []], ["add", "theorem", "is_unit_of_mul_is_unit_left", []], ["add", "theorem", "is_unit_of_mul_is_unit_right", []], ["add", "theorem", "is_unit_zero_iff", []], ["add", "theorem", "mul_dvd_of_is_unit_left", []], ["add", "theorem", "mul_dvd_of_is_unit_right", []], ["add", "theorem", "nonzero_of_irreducible", []], ["mod", "theorem", "not_is_unit_zero", []]]}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["add", "theorem", "coe_subset_nonunits", []], ["add", "def", "comap", ["ideal"]], ["add", "theorem", "comap_ne_top", ["ideal"]], ["add", "theorem", "eq_top_iff_one", ["ideal"]], ["add", "theorem", "eq_top_of_is_unit_mem", ["ideal"]], ["add", "theorem", "eq_top_of_unit_mem", ["ideal"]], ["add", "theorem", "exists_le_maximal", ["ideal"]], ["add", "theorem", "eq_of_le", ["ideal", "is_maximal"]], ["add", "theorem", "exists_inv", ["ideal", "is_maximal"]], ["add", "theorem", "is_prime", ["ideal", "is_maximal"]], ["add", "def", "is_maximal", ["ideal"]], ["add", "theorem", "is_maximal_iff", ["ideal"]], ["add", "theorem", "mem_or_mem", ["ideal", "is_prime"]], ["add", "theorem", "mem_or_mem_of_mul_eq_zero", ["ideal", "is_prime"]], ["add", "def", "is_prime", ["ideal"]], ["add", "theorem", "mem_comap", ["ideal"]], ["add", "theorem", "mem_span_insert'", ["ideal"]], ["add", "theorem", "mem_span_insert", ["ideal"]], ["add", "theorem", "mem_span_singleton'", ["ideal"]], ["add", "theorem", "mem_span_singleton", ["ideal"]], ["add", "theorem", "ne_top_iff_one", ["ideal"]], ["add", "theorem", "eq_zero_iff_mem", ["ideal", "quotient"]], ["add", "theorem", "exists_inv", ["ideal", "quotient"]], ["add", "def", "map_mk", ["ideal", "quotient"]], ["add", "def", "mk", ["ideal", "quotient"]], ["add", "theorem", "mk_add", ["ideal", "quotient"]], ["add", "theorem", "mk_mul", ["ideal", "quotient"]], ["add", "theorem", "mk_neg", ["ideal", "quotient"]], ["add", "theorem", "mk_one", ["ideal", "quotient"]], ["add", "theorem", "mk_pow", ["ideal", "quotient"]], ["add", "theorem", "mk_sub", ["ideal", "quotient"]], ["add", "theorem", "mk_zero", ["ideal", "quotient"]], ["add", "theorem", "zero_eq_one_iff", ["ideal", "quotient"]], ["add", "theorem", "zero_ne_one_iff", ["ideal", "quotient"]], ["add", "def", "quotient", ["ideal"]], ["add", "def", "span", ["ideal"]], ["add", "theorem", "span_eq", ["ideal"]], ["add", "theorem", "span_eq_bot", ["ideal"]], ["add", "theorem", "span_le", ["ideal"]], ["add", "theorem", "span_mono", ["ideal"]], ["add", "theorem", "span_singleton_eq_bot", ["ideal"]], ["add", "theorem", "span_singleton_eq_top", ["ideal"]], ["add", "theorem", "span_singleton_le_span_singleton", ["ideal"]], ["add", "theorem", "span_singleton_one", ["ideal"]], ["add", "theorem", "span_singleton_prime", ["ideal"]], ["add", "theorem", "subset_span", ["ideal"]], ["add", "def", "zero_ne_one_of_proper", ["ideal"]], ["del", "theorem", "mem_trivial", ["is_ideal"]], ["del", "theorem", "mul_left", ["is_ideal"]], ["del", "theorem", "mul_right", ["is_ideal"]], ["del", "theorem", "neg_iff", ["is_ideal"]], ["del", "def", "trivial", ["is_ideal"]], ["add", "def", "zero_ne_one", ["is_local_ring"]], ["add", "def", "is_local_ring", []], ["del", "theorem", "mk", ["is_maximal_ideal"]], ["del", "theorem", "is_proper_ideal_iff_one_not_mem", []], ["add", "theorem", "local_of_nonunits_ideal", []], ["del", "def", "local_of_nonunits_ideal", []], ["add", "theorem", "mem_nonunits_ideal", []], ["add", "theorem", "mem_nonunits_iff", []], ["del", "theorem", "mem_or_mem_of_mul_eq_zero", []], ["add", "theorem", "mul_mem_nonunits_left", []], ["add", "theorem", "mul_mem_nonunits_right", []], ["mod", "def", "nonunits", []], ["add", "def", "nonunits_ideal", []], ["del", "theorem", "not_unit_of_mem_proper_ideal", []], ["add", "theorem", "one_not_mem_nonunits", []], ["del", "theorem", "coe_add", ["quotient_ring"]], ["del", "theorem", "coe_mul", ["quotient_ring"]], ["del", "theorem", "coe_neg", ["quotient_ring"]], ["del", "theorem", "coe_one", ["quotient_ring"]], ["del", "theorem", "coe_pow", ["quotient_ring"]], ["del", "theorem", "coe_sub", ["quotient_ring"]], ["del", "theorem", "coe_zero", ["quotient_ring"]], ["del", "theorem", "eq_zero_iff_mem", ["quotient_ring"]], ["del", "theorem", "exists_inv", ["quotient_ring"]], ["del", "def", "mk", ["quotient_ring"]], ["del", "def", "quotient", ["quotient_ring"]], ["del", "def", "quotient_rel", ["quotient_ring"]], ["add", "theorem", "zero_mem_nonunits", []]]}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": [["mod", "theorem", "ne_zero_of_mem_non_zero_divisors", ["localization"]]]}, {"oldPath": "ring_theory/matrix.lean", "newPath": "ring_theory/matrix.lean", "changes": []}, {"oldPath": "ring_theory/noetherian.lean", "newPath": "ring_theory/noetherian.lean", "changes": [["del", "def", "is_fg", []], ["mod", "def", "is_noetherian", []], ["mod", "theorem", "is_noetherian_of_quotient_of_noetherian", []], ["mod", "theorem", "is_noetherian_of_submodule_of_noetherian", []], ["mod", "theorem", "is_noetherian_of_fintype", ["ring"]], ["mod", "def", "fg", ["submodule"]]]}, {"oldPath": "ring_theory/principal_ideal_domain.lean", "newPath": "ring_theory/principal_ideal_domain.lean", "changes": [["add", "theorem", "eq_bot_iff_generator_eq_zero", ["ideal", "is_principal"]], ["add", "theorem", "generator_mem", ["ideal", "is_principal"]], ["add", "theorem", "mem_iff_generator_dvd", ["ideal", "is_principal"]], ["add", "theorem", "span_singleton_generator", ["ideal", "is_principal"]], ["add", "theorem", "to_maximal_ideal", ["is_prime"]], ["del", "theorem", "to_maximal_ideal", ["is_prime_ideal"]], ["del", "theorem", "eq_trivial_iff_generator_eq_zero", ["is_principal_ideal"]], ["del", "theorem", "generator_generates", ["is_principal_ideal"]], ["del", "theorem", "generator_mem", ["is_principal_ideal"]], ["del", "theorem", "mem_iff_generator_dvd", ["is_principal_ideal"]], ["mod", "theorem", "mod_mem_iff", []], ["del", "theorem", "is_maximal_ideal_of_irreducible", ["principal_ideal_domain"]], ["add", "theorem", "is_maximal_of_irreducible", ["principal_ideal_domain"]]]}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["del", "theorem", "mk_empty'", ["cardinal"]], ["add", "theorem", "mk_emptyc", ["cardinal"]], ["del", "theorem", "mk_plift_false", ["cardinal"]], ["add", "theorem", "mk_plift_of_false", ["cardinal"]], ["add", "theorem", "mk_plift_of_true", ["cardinal"]], ["del", "theorem", "mk_plift_true", ["cardinal"]], ["del", "theorem", "mk_union_of_disjiont", ["cardinal"]], ["add", "theorem", "mk_union_of_disjoint", ["cardinal"]]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1541412532, "sha": "37c0d539", "message": "refactor(field_theory/finite): generalize proofs (#429)", "changes": [{"oldPath": "data/equiv/algebra.lean", "newPath": "data/equiv/algebra.lean", "changes": [["add", "theorem", "coe_units_equiv_ne_zero", ["equiv"]], ["add", "def", "units_equiv_ne_zero", ["equiv"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["add", "theorem", "gcd_gcd_self_left_left", ["nat"]], ["add", "theorem", "gcd_gcd_self_left_right", ["nat"]], ["add", "theorem", "gcd_gcd_self_right_left", ["nat"]], ["add", "theorem", "gcd_gcd_self_right_right", ["nat"]], ["add", "theorem", "gcd_mul_left_left", ["nat"]], ["add", "theorem", "gcd_mul_left_right", ["nat"]], ["add", "theorem", "gcd_mul_right_left", ["nat"]], ["add", "theorem", "gcd_mul_right_right", ["nat"]]]}, {"oldPath": "data/zmod/quadratic_reciprocity.lean", "newPath": "data/zmod/quadratic_reciprocity.lean", "changes": []}, {"oldPath": "field_theory/finite.lean", "newPath": "field_theory/finite.lean", "changes": [["add", "theorem", "card_nth_roots_subgroup_units", []], ["del", "theorem", "coe_units_equiv_ne_zero", []], ["del", "theorem", "card_nth_roots_units", ["finite_field"]], ["del", "theorem", "card_order_of_eq_totient", ["finite_field"]], ["del", "theorem", "card_pow_eq_one_eq_order_of", ["finite_field"]], ["mod", "theorem", "card_units", ["finite_field"]], ["mod", "theorem", "prod_univ_units_id_eq_neg_one", ["finite_field"]], ["del", "theorem", "order_of_pow", []], ["del", "def", "units_equiv_ne_zero", []]]}, {"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": [["add", "theorem", "card_order_of_eq_totient_aux₂", []], ["add", "theorem", "card_pow_eq_one_eq_order_of_aux", []], ["add", "theorem", "card_order_of_eq_totient", ["is_cyclic"]], ["add", "theorem", "card_pow_eq_one_le", ["is_cyclic"]], ["add", "def", "comm_group", ["is_cyclic"]], ["add", "theorem", "is_cyclic_of_card_pow_eq_one_le", []], ["add", "theorem", "order_of_eq_card_of_forall_mem_gpowers", []], ["del", "theorem", "order_of_eq_card_of_forall_mem_gppowers", []], ["add", "theorem", "order_of_pow", []], ["add", "theorem", "pow_gcd_card_eq_one_iff", []]]}]}, {"timestamp": 1541411793, "sha": "a64be8dc", "message": "feat(category/bifunctor): Bifunctor and bitraversable (#255)", "changes": [{"oldPath": "category/applicative.lean", "newPath": "category/applicative.lean", "changes": []}, {"oldPath": null, "newPath": "category/bifunctor.lean", "changes": [["add", "def", "bicompl", ["bifunctor"]], ["add", "def", "bicompr", ["bifunctor"]], ["add", "theorem", "comp_fst", ["bifunctor"]], ["add", "theorem", "comp_snd", ["bifunctor"]], ["add", "def", "fst", ["bifunctor"]], ["add", "theorem", "fst_snd", ["bifunctor"]], ["add", "theorem", "id_fst", ["bifunctor"]], ["add", "theorem", "id_snd", ["bifunctor"]], ["add", "def", "snd", ["bifunctor"]], ["add", "theorem", "snd_fst", ["bifunctor"]]]}, {"oldPath": null, "newPath": "category/bitraversable/basic.lean", "changes": [["add", "def", "bisequence", []]]}, {"oldPath": null, "newPath": "category/bitraversable/instances.lean", "changes": [["add", "def", "bitraverse", ["bicompl"]], ["add", "def", "bitraverse", ["bicompr"]], ["add", "def", "bitraverse", ["const"]], ["add", "def", "bitraverse", ["flip"]], ["add", "def", "bitraverse", ["prod"]], ["add", "def", "bitraverse", ["sum"]]]}, {"oldPath": null, "newPath": "category/bitraversable/lemmas.lean", "changes": [["add", "theorem", "comp_tfst", ["bitraversable"]], ["add", "theorem", "comp_tsnd", ["bitraversable"]], ["add", "theorem", "id_tfst", ["bitraversable"]], ["add", "theorem", "id_tsnd", ["bitraversable"]], ["add", "def", "tfst", ["bitraversable"]], ["add", "theorem", "tfst_eq_fst_id", ["bitraversable"]], ["add", "theorem", "tfst_tsnd", ["bitraversable"]], ["add", "def", "tsnd", ["bitraversable"]], ["add", "theorem", "tsnd_eq_snd_id", ["bitraversable"]], ["add", "theorem", "tsnd_tfst", ["bitraversable"]]]}, {"oldPath": "category/functor.lean", "newPath": "category/functor.lean", "changes": [["add", "def", "add_const", ["functor"]], ["add", "def", "mk", ["functor", "const"]], ["add", "def", "run", ["functor", "const"]], ["add", "def", "const", ["functor"]]]}, {"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": []}, {"oldPath": "data/sum.lean", "newPath": "data/sum.lean", "changes": [["del", "def", "map", ["sum"]]]}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1541411404, "sha": "d556d6af", "message": "refactor(topology/topological_space): rename open_set to opens and unbundle it (#427)", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "Sup_s", ["topological_space", "opens"]], ["add", "theorem", "ext", ["topological_space", "opens"]], ["add", "def", "gc", ["topological_space", "opens"]], ["add", "def", "gi", ["topological_space", "opens"]], ["add", "def", "interior", ["topological_space", "opens"]], ["add", "def", "is_basis", ["topological_space", "opens"]], ["add", "theorem", "is_basis_iff_cover", ["topological_space", "opens"]], ["add", "theorem", "is_basis_iff_nbhd", ["topological_space", "opens"]], ["add", "def", "opens", ["topological_space"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["add", "def", "map", ["category_theory", "examples"]], ["add", "def", "map_id", ["category_theory", "examples"]], ["add", "theorem", "map_id_obj", ["category_theory", "examples"]], ["add", "def", "map_iso", ["category_theory", "examples"]], ["add", "def", "map_iso_id", ["category_theory", "examples"]], ["add", "def", "nbhd", ["category_theory", "examples"]], ["add", "def", "nbhds", ["category_theory", "examples"]], ["del", "def", "map", ["category_theory", "examples", "open_set"]], ["del", "def", "map_id", ["category_theory", "examples", "open_set"]], ["del", "theorem", "map_id_obj", ["category_theory", "examples", "open_set"]], ["del", "def", "map_iso", ["category_theory", "examples", "open_set"]], ["del", "def", "map_iso_id", ["category_theory", "examples", "open_set"]], ["del", "def", "nbhd", ["category_theory", "examples", "open_set"]], ["del", "def", "nbhds", ["category_theory", "examples", "open_set"]], ["del", "structure", "open_set", ["category_theory", "examples"]]]}]}, {"timestamp": 1541411032, "sha": "dcd90a3a", "message": "feat(order/filter): ultrafilter monad and the Stone-Cech compactification (#434)\n* feat(order/filter): simplify theory of ultrafilters slightly\nIntroduce an alternate characterization of ultrafilters, and use it\nto prove ultrafilter_map and ultrafilter_pure.\n* chore(*): rename ultrafilter to is_ultrafilter\n* feat(order/filter): the ultrafilter monad\n* feat(analysis/topology): closure, continuous maps and T2 spaces via ultrafilters\nFor these, first prove that a filter is the intersection of the ultrafilters\ncontaining it.\n* feat(analysis/topology): Normal spaces. Compact Hausdorff spaces are normal.\n* feat(analysis/topology/stone_cech): the Stone-Čech compactification", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "compact_of_closed", []], ["add", "theorem", "continuous_at_iff_ultrafilter", []], ["add", "theorem", "continuous_iff_ultrafilter", []], ["add", "theorem", "normal_of_compact_t2", []]]}, {"oldPath": null, "newPath": "analysis/topology/stone_cech.lean", "changes": [["add", "theorem", "continuous_stone_cech_extend", []], ["add", "theorem", "continuous_stone_cech_unit", []], ["add", "theorem", "continuous_ultrafilter_extend", []], ["add", "theorem", "convergent_eqv_pure", []], ["add", "theorem", "dense_embedding_pure", []], ["add", "def", "stone_cech", []], ["add", "def", "stone_cech_extend", []], ["add", "theorem", "stone_cech_extend_extends", []], ["add", "def", "stone_cech_unit", []], ["add", "theorem", "stone_cech_unit_dense", []], ["add", "def", "extend", ["ultrafilter"]], ["add", "def", "ultrafilter_basis", []], ["add", "theorem", "ultrafilter_basis_is_basis", []], ["add", "theorem", "ultrafilter_comap_pure_nhds", []], ["add", "theorem", "ultrafilter_converges_iff", []], ["add", "theorem", "ultrafilter_extend_eq_iff", []], ["add", "theorem", "ultrafilter_extend_extends", []], ["add", "theorem", "ultrafilter_is_closed_basic", []], ["add", "theorem", "ultrafilter_is_open_basic", []], ["add", "theorem", "ultrafilter_pure_injective", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "mem_closure_iff_ultrafilter", []], ["add", "theorem", "t2_iff_nhds", []], ["add", "theorem", "t2_iff_ultrafilter", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "exists_ultrafilter", ["filter"]], ["add", "theorem", "exists_ultrafilter_iff", ["filter"]], ["add", "def", "is_ultrafilter", ["filter"]], ["mod", "theorem", "le_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_of_finite_sUnion_ultrafilter", ["filter"]], ["mod", "theorem", "mem_or_compl_mem_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["add", "theorem", "range_mem_map", ["filter"]], ["add", "theorem", "sup_of_ultrafilters", ["filter"]], ["add", "theorem", "tendsto_iff_ultrafilter", ["filter"]], ["add", "def", "bind", ["filter", "ultrafilter"]], ["add", "theorem", "eq_iff_val_le_val", ["filter", "ultrafilter"]], ["add", "def", "map", ["filter", "ultrafilter"]], ["add", "def", "pure", ["filter", "ultrafilter"]], ["mod", "def", "ultrafilter", ["filter"]], ["add", "theorem", "ultrafilter_bind", ["filter"]], ["add", "theorem", "ultrafilter_iff_compl_mem_iff_not_mem", ["filter"]], ["mod", "theorem", "ultrafilter_map", ["filter"]], ["mod", "theorem", "ultrafilter_of_spec", ["filter"]], ["del", "theorem", "ultrafilter_of_split", ["filter"]], ["mod", "theorem", "ultrafilter_of_ultrafilter", ["filter"]], ["mod", "theorem", "ultrafilter_pure", ["filter"]], ["mod", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["mod", "theorem", "ultrafilter_unique", ["filter"]]]}]}, {"timestamp": 1541410797, "sha": "62538c8c", "message": "feat(analysis/metric_spaces): Compact and proper spaces (#430)", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "ball_subset_closed_ball", []], ["add", "theorem", "countable_closure_of_compact", []], ["add", "theorem", "finite_cover_balls_of_compact", []], ["add", "theorem", "mem_closure_iff'", []], ["add", "theorem", "second_countable_of_separable_metric_space", []]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "compact_univ", []], ["del", "theorem", "locally_compact_of_compact", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "complete_of_compact_set", []]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["add", "theorem", "le_of_forall_epsilon_le", ["real"]]]}]}, {"timestamp": 1541408625, "sha": "47a0a22d", "message": "fix(algebra/ordered_group): make instances defeq (#442)", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1541408595, "sha": "8ae3fb86", "message": "feat(ring_theory/subring): ring.closure (#444)", "changes": [{"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "rec_on", ["add_group", "in_closure"]]]}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": [["add", "theorem", "rec_on", ["add_monoid", "in_closure"]]]}, {"oldPath": "ring_theory/subring.lean", "newPath": "ring_theory/subring.lean", "changes": [["add", "def", "closure", ["ring"]], ["add", "theorem", "closure_subset", ["ring"]], ["add", "theorem", "closure_subset_iff", ["ring"]], ["add", "theorem", "exists_list_of_mem_closure", ["ring"]], ["add", "theorem", "mem_closure", ["ring"]], ["add", "theorem", "subset_closure", ["ring"]]]}]}, {"timestamp": 1541408517, "sha": "849d2a41", "message": "feat(analysis/topology/topological_space): define T0 spaces, T4 spaces, connected and irreducible sets and components (#448)", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "closure_singleton", []], ["add", "def", "connected_component", []], ["add", "theorem", "eq_irreducible_component", []], ["add", "theorem", "exists_irreducible", []], ["add", "theorem", "exists_mem_inter", []], ["add", "theorem", "exists_open_singleton_of_fintype", []], ["add", "def", "irreducible_component", []], ["add", "theorem", "irreducible_component_subset_connected_component", []], ["add", "theorem", "irreducible_exists_mem_inter", []], ["add", "def", "is_clopen", []], ["add", "theorem", "is_clopen_compl", []], ["add", "theorem", "is_clopen_compl_iff", []], ["add", "theorem", "is_clopen_diff", []], ["add", "theorem", "is_clopen_empty", []], ["add", "theorem", "is_clopen_iff", []], ["add", "theorem", "is_clopen_inter", []], ["add", "theorem", "is_clopen_union", []], ["add", "theorem", "is_clopen_univ", []], ["add", "theorem", "is_closed_connected_component", []], ["mod", "theorem", "is_closed_imp", []], ["add", "theorem", "is_closed_irreducible_component", []], ["add", "def", "is_connected", []], ["add", "theorem", "is_connected_closure", []], ["add", "theorem", "is_connected_connected_component", []], ["add", "theorem", "is_connected_empty", []], ["add", "theorem", "is_connected_of_is_irreducible", []], ["add", "theorem", "is_connected_sUnion", []], ["add", "theorem", "is_connected_singleton", []], ["add", "theorem", "is_connected_union", []], ["add", "def", "is_irreducible", []], ["add", "theorem", "is_irreducible_closure", []], ["add", "theorem", "is_irreducible_empty", []], ["add", "theorem", "is_irreducible_irreducible_component", []], ["add", "theorem", "is_irreducible_singleton", []], ["add", "def", "is_totally_disconnected", []], ["add", "theorem", "is_totally_disconnected_empty", []], ["add", "theorem", "is_totally_disconnected_of_is_totally_separated", []], ["add", "theorem", "is_totally_disconnected_singleton", []], ["add", "def", "is_totally_separated", []], ["add", "theorem", "is_totally_separated_empty", []], ["add", "theorem", "is_totally_separated_singleton", []], ["add", "theorem", "mem_connected_component", []], ["add", "theorem", "mem_irreducible_component", []], ["add", "theorem", "normal_separation", []], ["add", "theorem", "subset_connected_component", []]]}]}, {"timestamp": 1541408368, "sha": "8898f0e2", "message": "feat(data/real/irrational): add basic irrational facts (#453)\nJoint work by Abhimanyu Pallavi Sudhir, Jean Lo, Calle Sönne, Kenny Lau, and Chris Hughes", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "nat_abs_pow", ["int"]]]}, {"oldPath": null, "newPath": "data/int/sqrt.lean", "changes": [["add", "theorem", "exists_mul_self", ["int"]], ["add", "def", "sqrt", ["int"]], ["add", "theorem", "sqrt_eq", ["int"]], ["add", "theorem", "sqrt_nonneg", ["int"]]]}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": [["add", "theorem", "exists_mul_self", ["nat"]]]}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "abs_def", ["rat"]], ["add", "theorem", "cast_pow", ["rat"]], ["add", "theorem", "exists_mul_self", ["rat"]], ["add", "theorem", "mk_pnat_denom", ["rat"]], ["add", "theorem", "mk_pnat_num", ["rat"]], ["add", "theorem", "mul_denom", ["rat"]], ["add", "theorem", "mul_num", ["rat"]], ["add", "theorem", "mul_self_denom", ["rat"]], ["add", "theorem", "mul_self_num", ["rat"]], ["add", "def", "sqrt", ["rat"]], ["add", "theorem", "sqrt_eq", ["rat"]], ["add", "theorem", "sqrt_nonneg", ["rat"]]]}, {"oldPath": "data/real/irrational.lean", "newPath": "data/real/irrational.lean", "changes": [["add", "theorem", "irr_add_rat_iff_irr", []], ["add", "theorem", "irr_mul_rat_iff_irr", []], ["add", "theorem", "irr_neg", []], ["add", "theorem", "irr_nrt_of_n_not_dvd_padic_val", []], ["add", "theorem", "irr_nrt_of_notint_nrt", []], ["add", "theorem", "irr_of_irr_mul_self", []], ["add", "theorem", "irr_rat_add_iff_irr", []], ["add", "theorem", "irr_rat_add_of_irr", []], ["add", "theorem", "irr_sqrt_of_padic_val_odd", []], ["add", "theorem", "irr_sqrt_of_prime", []], ["add", "theorem", "irr_sqrt_rat_iff", []], ["add", "theorem", "irr_sqrt_two", []], ["del", "theorem", "sqrt_two_irrational", []]]}]}, {"timestamp": 1541408224, "sha": "94b09d65", "message": "refactor(data/real/basic): make real irreducible (#454)", "changes": [{"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": [["mod", "theorem", "tendsto_pow_at_top_at_top_of_gt_1_nat", []]]}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "data/complex/basic.lean", "newPath": "data/complex/basic.lean", "changes": [["mod", "theorem", "I_mul_I", ["complex"]], ["mod", "theorem", "conj_I", ["complex"]], ["mod", "theorem", "conj_neg_I", ["complex"]], ["mod", "theorem", "conj_of_real", ["complex"]], ["mod", "theorem", "conj_one", ["complex"]], ["mod", "theorem", "conj_zero", ["complex"]], ["mod", "theorem", "norm_sq_I", ["complex"]], ["mod", "theorem", "norm_sq_one", ["complex"]], ["mod", "theorem", "norm_sq_zero", ["complex"]], ["mod", "theorem", "of_real_add", ["complex"]], ["mod", "theorem", "of_real_bit0", ["complex"]], ["mod", "theorem", "of_real_bit1", ["complex"]], ["mod", "theorem", "of_real_neg", ["complex"]], ["mod", "theorem", "of_real_sub", ["complex"]]]}, {"oldPath": "data/complex/exponential.lean", "newPath": "data/complex/exponential.lean", "changes": []}, {"oldPath": "data/padics/hensel.lean", "newPath": "data/padics/hensel.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["add", "def", "comm_ring_aux", ["real"]], ["add", "def", "mk", ["real"]], ["add", "theorem", "mk_eq", ["real"]], ["add", "theorem", "mk_eq_mk", ["real"]], ["add", "theorem", "quotient_mk_eq_mk", ["real"]]]}]}, {"timestamp": 1541408178, "sha": "c57a9a6d", "message": "fix(category_theory/isomorphism): use `category_theory.inv` in simp lemmas\n`category_theory.is_iso.inv` is not the preferred name for this.", "changes": [{"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["mod", "def", "hom_inv_id", ["category_theory", "is_iso"]], ["mod", "def", "inv_hom_id", ["category_theory", "is_iso"]]]}]}, {"timestamp": 1541408021, "sha": "354d59e1", "message": "feat(data/nat/basic,algebra/ring): adding two lemmas about division (#385)", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "dvd_add_left", []], ["add", "theorem", "dvd_add_right", []]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}]}, {"timestamp": 1541425621, "sha": "279b9eda", "message": "feat(ring_theory/matrix): add minor, sub_[left|right|up|down], sub_[left|right]_[up][down] (#389)\nAlso add fin.nat_add.", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "nat_add", ["fin"]]]}, {"oldPath": "ring_theory/matrix.lean", "newPath": "ring_theory/matrix.lean", "changes": [["add", "def", "minor", ["matrix"]], ["add", "def", "sub_down", ["matrix"]], ["add", "def", "sub_down_left", ["matrix"]], ["add", "def", "sub_down_right", ["matrix"]], ["add", "def", "sub_left", ["matrix"]], ["add", "def", "sub_right", ["matrix"]], ["add", "def", "sub_up", ["matrix"]], ["add", "def", "sub_up_left", ["matrix"]], ["add", "def", "sub_up_right", ["matrix"]]]}]}, {"timestamp": 1541418333, "sha": "c56bb3b8", "message": "feat(tactic/norm_num): permit `norm_num(1)` inside `conv`", "changes": [{"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1541418333, "sha": "b092755c", "message": "doc(docs/conv): document additions", "changes": [{"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1541418333, "sha": "fb57843d", "message": "feat(tactic/ring(2)): permit `ring` and `ring2` inside `conv`", "changes": [{"oldPath": "tactic/converter/interactive.lean", "newPath": "tactic/converter/interactive.lean", "changes": []}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}, {"oldPath": "tactic/ring2.lean", "newPath": "tactic/ring2.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1541418333, "sha": "d5604310", "message": "feat(tactic/basic): add `lock_tactic_state`\nFor state-preserving tactic invocations (extracting the result)", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1541418333, "sha": "350e6e24", "message": "feat(tactic/conv): add `erw`, `conv_lhs`, and `conv_rhs`", "changes": [{"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/converter/interactive.lean", "newPath": "tactic/converter/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1541395308, "sha": "aed8194c", "message": "feat(docs/extras) add doc about coercions between number types (#443)", "changes": [{"oldPath": null, "newPath": "docs/extras/casts.md", "changes": []}]}, {"timestamp": 1541395229, "sha": "072a11ee", "message": "feat(data/polynomial): polynomial.comp (#441)", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "C_comp", ["polynomial"]], ["add", "theorem", "C_pow", ["polynomial"]], ["add", "theorem", "X_comp", ["polynomial"]], ["add", "theorem", "add_comp", ["polynomial"]], ["add", "def", "comp", ["polynomial"]], ["add", "theorem", "comp_C", ["polynomial"]], ["add", "theorem", "comp_X", ["polynomial"]], ["add", "theorem", "comp_one", ["polynomial"]], ["add", "theorem", "comp_zero", ["polynomial"]], ["mod", "theorem", "degree_sum_le", ["polynomial"]], ["add", "theorem", "eval_comp", ["polynomial"]], ["add", "theorem", "eval₂_comp", ["polynomial"]], ["add", "theorem", "eval₂_sum", ["polynomial"]], ["add", "theorem", "mul_comp", ["polynomial"]], ["add", "theorem", "one_comp", ["polynomial"]], ["add", "theorem", "zero_comp", ["polynomial"]]]}]}, {"timestamp": 1541395140, "sha": "1cadd482", "message": "feat(data/list): mfoldl, mfoldr theorems; reverse_foldl", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "mfoldl_append", ["list"]], ["add", "theorem", "mfoldl_cons", ["list"]], ["add", "theorem", "mfoldl_nil", ["list"]], ["add", "theorem", "mfoldr_append", ["list"]], ["add", "theorem", "mfoldr_cons", ["list"]], ["add", "theorem", "mfoldr_nil", ["list"]], ["add", "theorem", "reverse_foldl", ["list"]]]}]}, {"timestamp": 1541394465, "sha": "b934956c", "message": "feat(data/int/basic): make coe_nat_le, coe_nat_lt, coe_nat_inj' into simp lemmas", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "coe_nat_inj'", ["int"]], ["mod", "theorem", "coe_nat_le", ["int"]], ["mod", "theorem", "coe_nat_lt", ["int"]]]}]}, {"timestamp": 1541394424, "sha": "f5ce71f0", "message": "fix(tactic/eval_expr): often crashes when reflecting expressions (#358)", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/replacer.lean", "newPath": "tactic/replacer.lean", "changes": []}]}, {"timestamp": 1541394202, "sha": "f00ed774", "message": "feat(data/complex/basic): I_ne_zero and cast_re, cast_im lemmas", "changes": [{"oldPath": "data/complex/basic.lean", "newPath": "data/complex/basic.lean", "changes": [["add", "theorem", "I_ne_zero", ["complex"]], ["add", "theorem", "int_cast_im", ["complex"]], ["add", "theorem", "int_cast_re", ["complex"]], ["add", "theorem", "nat_cast_im", ["complex"]], ["add", "theorem", "nat_cast_re", ["complex"]], ["add", "theorem", "rat_cast_im", ["complex"]], ["add", "theorem", "rat_cast_re", ["complex"]]]}]}, {"timestamp": 1541276362, "sha": "3f5ec68c", "message": "fix(*): make three `trans_apply`s rfl-lemmas", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["mod", "theorem", "trans_apply", ["equiv"]]]}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": [["mod", "theorem", "trans_apply", ["order_embedding"]]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["mod", "theorem", "trans_apply", ["initial_seg"]]]}]}, {"timestamp": 1541020646, "sha": "74ae8ce7", "message": "fix(data/real,data/rat): make orders on real and rat irreducible", "changes": [{"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}]}, {"timestamp": 1540902415, "sha": "58909bd4", "message": "feat(*): monovariate and multivariate eval\\2 now do not take is_semiring_hom as an argument", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": []}]}, {"timestamp": 1540902275, "sha": "90982d7c", "message": "feat(tactic/fin_cases): a tactic to case bash on `fin n` (#352)\n* feat(tactic/fin_cases): a tactic to case bash on `fin n`\n* using core is_numeral\n* removing guard\njust rely on eval_expr to decide if we have an explicit nat\n* add parsing, tests, documentation\n* don't fail if the rewrite fails\n* fixes", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "mk_val", ["fin"]]]}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "tactic/fin_cases.lean", "changes": []}, {"oldPath": null, "newPath": "tests/fin_cases.lean", "changes": []}]}, {"timestamp": 1540902230, "sha": "e585bed2", "message": "feat(data/int/basic): bounded forall is decidable for integers", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "mem_range_iff", ["int"]], ["add", "def", "range", ["int"]]]}]}, {"timestamp": 1540902184, "sha": "489050b8", "message": "feat(tactic/tauto): add an option for `tauto` to work in classical logic", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/tauto.lean", "newPath": "tactic/tauto.lean", "changes": []}, {"oldPath": "tactic/wlog.lean", "newPath": "tactic/wlog.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1539908070, "sha": "ed842981", "message": "feat(analysis/topology): add continuity rules for list and vector insert/remove_nth", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "continuous_insert_nth", ["list"]], ["add", "theorem", "continuous_remove_nth", ["list"]], ["add", "theorem", "tendsto_cons'", ["list"]], ["add", "theorem", "tendsto_cons", ["list"]], ["add", "theorem", "tendsto_cons_iff", ["list"]], ["add", "theorem", "tendsto_insert_nth'", ["list"]], ["add", "theorem", "tendsto_insert_nth", ["list"]], ["add", "theorem", "tendsto_length", ["list"]], ["add", "theorem", "tendsto_nhds", ["list"]], ["add", "theorem", "tendsto_remove_nth", ["list"]], ["add", "theorem", "tendsto_subtype_rng", []], ["add", "theorem", "tendsto_subtype_val", []], ["add", "theorem", "cons_val", ["vector"]], ["add", "theorem", "continuous_insert_nth'", ["vector"]], ["add", "theorem", "continuous_insert_nth", ["vector"]], ["add", "theorem", "continuous_remove_nth", ["vector"]], ["add", "theorem", "tendsto_cons", ["vector"]], ["add", "theorem", "tendsto_insert_nth", ["vector"]], ["add", "theorem", "tendsto_remove_nth", ["vector"]]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "nhds_cons", []], ["add", "theorem", "nhds_nil", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1539907388, "sha": "f6812d5a", "message": "feat(analysis/topology): add type class for discrete topological spaces", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_open_discrete", []], ["del", "theorem", "is_open_top", []], ["add", "theorem", "nhds_discrete", []], ["add", "theorem", "nhds_top", []], ["del", "theorem", "t2_space_top", []], ["add", "theorem", "tendsto_pure_nhds", []]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "map_prod", ["filter"]], ["add", "theorem", "mem_map_seq_iff", ["filter"]], ["add", "theorem", "mem_pure_iff", ["filter"]], ["add", "theorem", "prod_eq", ["filter"]], ["add", "theorem", "tendsto_const_pure", ["filter"]], ["add", "theorem", "tendsto_pure_pure", ["filter"]]]}]}, {"timestamp": 1539903900, "sha": "99e14cd4", "message": "feat(group_theory/quotient_group): add map : quotient N -> quotient M", "changes": [{"oldPath": "group_theory/quotient_group.lean", "newPath": "group_theory/quotient_group.lean", "changes": [["add", "def", "map", ["quotient_group"]]]}]}, {"timestamp": 1539903723, "sha": "f52d2cc2", "message": "chore(group_theory/free_abelian_group, abelianization): rename to_comm_group, to_add_comm_group -> lift", "changes": [{"oldPath": "group_theory/abelianization.lean", "newPath": "group_theory/abelianization.lean", "changes": [["add", "theorem", "of", ["abelianization", "lift"]], ["add", "theorem", "unique", ["abelianization", "lift"]], ["add", "def", "lift", ["abelianization"]], ["del", "def", "is_group_hom", ["abelianization", "to_comm_group"]], ["del", "theorem", "of", ["abelianization", "to_comm_group"]], ["del", "theorem", "unique", ["abelianization", "to_comm_group"]], ["del", "def", "to_comm_group", ["abelianization"]]]}, {"oldPath": "group_theory/free_abelian_group.lean", "newPath": "group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "map_hom", ["free_abelian_group", "lift"]], ["add", "def", "universal", ["free_abelian_group", "lift"]], ["add", "def", "lift", ["free_abelian_group"]], ["del", "def", "UMP", ["free_abelian_group", "to_add_comm_group"]], ["del", "def", "to_add_comm_group", ["free_abelian_group"]]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "closure_subset_iff", ["group"]]]}, {"oldPath": "linear_algebra/tensor_product.lean", "newPath": "linear_algebra/tensor_product.lean", "changes": []}]}, {"timestamp": 1539870494, "sha": "c3e489c4", "message": "chore(data/fin): add cast_add", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "cast_add", ["fin"]], ["mod", "def", "cast_le", ["fin"]], ["mod", "def", "cast_succ", ["fin"]]]}]}, {"timestamp": 1539855781, "sha": "f2beca80", "message": "feat(ring_theory): prove principal_ideal_domain is unique factorization domain", "changes": [{"oldPath": "linear_algebra/submodule.lean", "newPath": "linear_algebra/submodule.lean", "changes": [["add", "theorem", "mem_span_singleton", ["submodule"]], ["add", "theorem", "span_singleton_subset", ["submodule"]]]}, {"oldPath": "ring_theory/associated.lean", "newPath": "ring_theory/associated.lean", "changes": [["del", "theorem", "associated_of_dvd_dvd", ["associated"]], ["del", "theorem", "associated_one_iff_is_unit", ["associated"]], ["del", "theorem", "associated_one_of_associated_mul_one", ["associated"]], ["del", "theorem", "associated_one_of_mul_eq_one", ["associated"]], ["del", "theorem", "associated_zero_iff_eq_zero", ["associated"]], ["del", "theorem", "unit_associated_one", ["associated"]], ["add", "theorem", "associated_mul_mul", []], ["add", "theorem", "associated_of_dvd_dvd", []], ["add", "theorem", "associated_one_iff_is_unit", []], ["add", "theorem", "associated_one_of_associated_mul_one", []], ["add", "theorem", "associated_one_of_mul_eq_one", []], ["add", "theorem", "associated_zero_iff_eq_zero", []], ["add", "theorem", "dvd_eq_le", ["associates"]], ["add", "theorem", "eq_of_mul_eq_mul_left", ["associates"]], ["add", "theorem", "exists_mem_multiset_le_of_prime", ["associates"]], ["add", "theorem", "le_of_mul_le_mul_left", ["associates"]], ["add", "theorem", "one_or_eq_of_le_of_prime", ["associates"]], ["add", "def", "prime", ["associates"]], ["add", "theorem", "prime_mk", ["associates"]], ["add", "theorem", "exists_mem_multiset_dvd_of_prime", []], ["mod", "theorem", "is_unit_iff_dvd_one", []], ["mod", "theorem", "is_unit_iff_forall_dvd", []], ["del", "theorem", "is_unit_mul_units", []], ["add", "theorem", "is_unit_of_dvd_one", []], ["add", "theorem", "is_unit_of_mul_one", []], ["add", "theorem", "not_prime_zero", []], ["add", "def", "prime", []], ["add", "theorem", "unit_associated_one", []], ["add", "theorem", "is_unit_mul_units", ["units"]], ["del", "theorem", "is_unit_of_mul_one", ["units"]]]}, {"oldPath": "ring_theory/principal_ideal_domain.lean", "newPath": "ring_theory/principal_ideal_domain.lean", "changes": [["mod", "theorem", "to_maximal_ideal", ["is_prime_ideal"]], ["mod", "theorem", "mod_mem_iff", []], ["add", "theorem", "associated_of_associated_prod_prod", ["principal_ideal_domain"]], ["add", "theorem", "associates_prime_of_irreducible", ["principal_ideal_domain"]], ["add", "theorem", "eq_of_prod_eq_associates", ["principal_ideal_domain"]], ["add", "theorem", "exists_factors", ["principal_ideal_domain"]], ["add", "theorem", "factors_decreasing", ["principal_ideal_domain"]], ["add", "theorem", "factors_spec", ["principal_ideal_domain"]], ["add", "theorem", "is_maximal_ideal_of_irreducible", ["principal_ideal_domain"]], ["add", "theorem", "is_noetherian_ring", ["principal_ideal_domain"]], ["add", "theorem", "prime_of_irreducible", ["principal_ideal_domain"]]]}]}, {"timestamp": 1539855660, "sha": "7b876a2b", "message": "cleanup(data/nat/choose,binomial): move binomial into choose", "changes": [{"oldPath": "data/complex/exponential.lean", "newPath": "data/complex/exponential.lean", "changes": []}, {"oldPath": "data/nat/binomial.lean", "newPath": null, "changes": [["del", "theorem", "add_pow", []]]}, {"oldPath": "data/nat/choose.lean", "newPath": "data/nat/choose.lean", "changes": [["add", "theorem", "add_pow", []]]}, {"oldPath": "data/padics/hensel.lean", "newPath": "data/padics/hensel.lean", "changes": []}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}]}, {"timestamp": 1539853734, "sha": "a46e8f7a", "message": "cleanup(ring_theory/principal_ideal_domain): restructure", "changes": [{"oldPath": "ring_theory/principal_ideal_domain.lean", "newPath": "ring_theory/principal_ideal_domain.lean", "changes": [["mod", "theorem", "to_maximal_ideal", ["is_prime_ideal"]]]}]}, {"timestamp": 1539822822, "sha": "a3ac630e", "message": "feat(algebra,group_theory): add various closure properties of subgroup and is_group_hom w.r.t gsmul, prod, sum", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "gsmul_sum", ["finset"]], ["add", "theorem", "prod_eq_one", ["finset"]], ["add", "theorem", "finset_prod", ["is_group_hom"]], ["add", "theorem", "multiset_prod", ["is_group_hom"]], ["add", "theorem", "is_group_hom_finset_prod", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "is_add_group_hom_sub", []], ["add", "theorem", "is_group_hom_inv", []], ["add", "theorem", "is_group_hom_mul", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "gsmul_neg", []], ["add", "theorem", "gsmul_sub", []], ["add", "theorem", "gsmul", ["is_add_group_hom"]], ["add", "theorem", "smul", ["is_add_group_hom"]], ["add", "theorem", "is_add_group_hom_gsmul", []]]}, {"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": [["add", "theorem", "finset_prod_apply", ["pi"]], ["add", "theorem", "list_prod_apply", ["pi"]], ["add", "theorem", "multiset_prod_apply", ["pi"]]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "sub_mem", ["is_add_subgroup"]]]}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": [["add", "theorem", "finset_prod_mem", ["is_submonoid"]], ["mod", "theorem", "list_prod_mem", ["is_submonoid"]], ["add", "theorem", "multiset_prod_mem", ["is_submonoid"]]]}]}, {"timestamp": 1539817263, "sha": "ea962a75", "message": "chore(analysis/topology/continuity): locally_compact_space is Prop", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}]}, {"timestamp": 1539816566, "sha": "bac655d3", "message": "feature(data/vector2, data/list): add insert_nth for vectors and lists", "changes": [{"oldPath": "data/equiv/fin.lean", "newPath": "data/equiv/fin.lean", "changes": []}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "theorem", "cast_succ_inj", ["fin"]], ["add", "theorem", "eq_iff_veq", ["fin"]], ["add", "theorem", "pred_inj", ["fin"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "def", "insert_nth", ["list"]], ["add", "theorem", "insert_nth_comm", ["list"]], ["add", "theorem", "insert_nth_nil", ["list"]], ["add", "theorem", "insert_nth_remove_nth_of_ge", ["list"]], ["add", "theorem", "insert_nth_remove_nth_of_le", ["list"]], ["add", "theorem", "length_insert_nth", ["list"]], ["add", "theorem", "modify_nth_tail_id", ["list"]], ["add", "theorem", "modify_nth_tail_modify_nth_tail", ["list"]], ["add", "theorem", "modify_nth_tail_modify_nth_tail_le", ["list"]], ["add", "theorem", "modify_nth_tail_modify_nth_tail_same", ["list"]], ["add", "theorem", "remove_nth_insert_nth", ["list"]]]}, {"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": [["add", "def", "insert_nth", ["vector"]], ["add", "theorem", "insert_nth_comm", ["vector"]], ["add", "theorem", "insert_nth_val", ["vector"]], ["add", "def", "m_of_fn", ["vector"]], ["add", "def", "mmap", ["vector"]], ["add", "theorem", "remove_nth_insert_nth", ["vector"]], ["add", "theorem", "remove_nth_insert_nth_ne", ["vector"]], ["add", "theorem", "remove_nth_val", ["vector"]], ["del", "def", "{u}", ["vector"]]]}]}, {"timestamp": 1539809856, "sha": "085b1bcf", "message": "cleanup(algebra/group_power): remove inactive to_additive", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}]}, {"timestamp": 1539809805, "sha": "1008f082", "message": "cleanup(tactic): remove example", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1539792746, "sha": "5a8e28d2", "message": "doc(docs/tactic): unify choose doc (#426)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1539784202, "sha": "72308d85", "message": "chore(data/fin): use uniform names; restructure", "changes": [{"oldPath": "data/equiv/fin.lean", "newPath": "data/equiv/fin.lean", "changes": [["add", "def", "fin_one_equiv", []], ["add", "def", "fin_two_equiv", []], ["add", "def", "fin_zero_equiv", []]]}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["mod", "def", "add_nat", ["fin"]], ["add", "theorem", "add_nat_val", ["fin"]], ["del", "def", "ascend", ["fin"]], ["del", "theorem", "ascend_descend", ["fin"]], ["del", "theorem", "ascend_ne", ["fin"]], ["mod", "def", "cases", ["fin"]], ["mod", "theorem", "cases_succ", ["fin"]], ["mod", "theorem", "cases_zero", ["fin"]], ["add", "def", "cast", ["fin"]], ["add", "def", "cast_le", ["fin"]], ["add", "def", "cast_lt", ["fin"]], ["add", "theorem", "cast_lt_val", ["fin"]], ["add", "def", "cast_succ", ["fin"]], ["add", "theorem", "cast_succ_cast_lt", ["fin"]], ["add", "theorem", "cast_succ_val", ["fin"]], ["del", "def", "descend", ["fin"]], ["del", "theorem", "descend_ascend", ["fin"]], ["del", "theorem", "eq_of_lt_succ_of_not_lt", ["fin"]], ["del", "theorem", "raise_val", ["fin", "fin"]], ["del", "def", "fin_zero_elim", ["fin"]], ["add", "theorem", "le_iff_val_le_val", ["fin"]], ["del", "def", "lower", ["fin"]], ["del", "def", "lower_left", ["fin"]], ["del", "def", "lower_right", ["fin"]], ["del", "theorem", "lower_val", ["fin"]], ["add", "theorem", "lt_iff_val_lt_val", ["fin"]], ["del", "def", "nat_add", ["fin"]], ["add", "def", "pred_above", ["fin"]], ["add", "theorem", "pred_above_succ_above", ["fin"]], ["del", "def", "raise", ["fin"]], ["del", "theorem", "raise_lower", ["fin"]], ["del", "def", "raise_nat", ["fin"]], ["del", "theorem", "raise_val", ["fin"]], ["add", "def", "sub_nat", ["fin"]], ["add", "theorem", "sub_nat_val", ["fin"]], ["add", "def", "succ_above", ["fin"]], ["add", "theorem", "succ_above_descend", ["fin"]], ["add", "theorem", "succ_above_ne", ["fin"]], ["mod", "theorem", "succ_rec_on_succ", ["fin"]], ["mod", "theorem", "succ_rec_on_zero", ["fin"]], ["add", "theorem", "zero_le", ["fin"]], ["add", "def", "fin_zero_elim", []]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "eq_of_lt_succ_of_not_lt", ["nat"]]]}]}, {"timestamp": 1539784202, "sha": "d2b39404", "message": "feat(data/fin): ascend / descend for fin", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["del", "theorem", "eq_of_lt_succ_of_not_lt", []], ["add", "def", "ascend", ["fin"]], ["add", "theorem", "ascend_descend", ["fin"]], ["add", "theorem", "ascend_ne", ["fin"]], ["mod", "def", "cases", ["fin"]], ["mod", "theorem", "cases_succ", ["fin"]], ["mod", "theorem", "cases_zero", ["fin"]], ["add", "def", "descend", ["fin"]], ["add", "theorem", "descend_ascend", ["fin"]], ["add", "theorem", "eq_of_lt_succ_of_not_lt", ["fin"]], ["add", "theorem", "raise_val", ["fin", "fin"]], ["add", "def", "fin_zero_elim", ["fin"]], ["add", "def", "lower", ["fin"]], ["add", "def", "lower_left", ["fin"]], ["add", "def", "lower_right", ["fin"]], ["add", "theorem", "lower_val", ["fin"]], ["add", "theorem", "pred_succ", ["fin"]], ["add", "theorem", "raise_lower", ["fin"]], ["add", "def", "raise_nat", ["fin"]], ["add", "theorem", "raise_val", ["fin"]], ["add", "theorem", "succ_pred", ["fin"]], ["mod", "def", "succ_rec", ["fin"]], ["mod", "def", "succ_rec_on", ["fin"]], ["mod", "theorem", "succ_rec_on_succ", ["fin"]], ["mod", "theorem", "succ_rec_on_zero", ["fin"]], ["del", "def", "lower_left", []], ["del", "def", "lower_right", []], ["del", "def", "raise_nat", []]]}]}, {"timestamp": 1539784202, "sha": "f7899692", "message": "feat(data/finset): add min' / max' for non-empty finset", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "filter_true", ["finset"]], ["add", "theorem", "le_max'", ["finset"]], ["add", "theorem", "le_min'", ["finset"]], ["add", "theorem", "lt_wf", ["finset"]], ["add", "def", "max'", ["finset"]], ["add", "theorem", "max'_le", ["finset"]], ["add", "theorem", "max'_mem", ["finset"]], ["add", "def", "min'", ["finset"]], ["add", "theorem", "min'_le", ["finset"]], ["add", "theorem", "min'_lt_max'", ["finset"]], ["add", "theorem", "min'_mem", ["finset"]]]}]}, {"timestamp": 1539784202, "sha": "ef9566d3", "message": "feat(data/equiv): equivalences for fin * fin and fin + fin", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["del", "theorem", "apply_eq_iff_eq_inverse_apply", ["equiv"]], ["add", "theorem", "eq_symm_apply", ["equiv"]], ["mod", "theorem", "ext", ["equiv"]], ["add", "theorem", "ext", ["equiv", "perm"]], ["add", "theorem", "symm_apply_eq", ["equiv"]]]}, {"oldPath": null, "newPath": "data/equiv/fin.lean", "changes": [["add", "def", "fin_prod_fin_equiv", []], ["add", "def", "sum_fin_sum_equiv", []]]}]}, {"timestamp": 1539784202, "sha": "b0859155", "message": "feat(data/list): length_attach, nth_le_attach, nth_le_range, of_fn_eq_pmap, nodup_of_fn (by @kckennylau)", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["mod", "theorem", "coe_univ", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "length_attach", ["list"]], ["mod", "theorem", "length_of_fn", ["list"]], ["add", "theorem", "nodup_of_fn", ["list"]], ["add", "theorem", "nth_le_attach", ["list"]], ["mod", "theorem", "nth_le_of_fn", ["list"]], ["add", "theorem", "nth_le_range", ["list"]], ["add", "theorem", "of_fn_eq_pmap", ["list"]]]}]}, {"timestamp": 1539784202, "sha": "b454daed", "message": "feat(group_theory/perm): swap_mul_swal / swap_swap_apply (by @kckennylau)", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "pred_eq_of_eq_succ", ["nat"]]]}, {"oldPath": "group_theory/perm.lean", "newPath": "group_theory/perm.lean", "changes": [["mod", "theorem", "eq_sign_of_surjective_hom", ["equiv", "perm"]], ["mod", "theorem", "sign_aux3_symm_trans_trans", ["equiv", "perm"]], ["mod", "theorem", "sign_bij", ["equiv", "perm"]], ["mod", "theorem", "sign_eq_of_is_swap", ["equiv", "perm"]], ["mod", "theorem", "sign_eq_sign_of_equiv", ["equiv", "perm"]], ["mod", "theorem", "sign_inv", ["equiv", "perm"]], ["mod", "theorem", "sign_mul", ["equiv", "perm"]], ["mod", "theorem", "sign_of_subtype", ["equiv", "perm"]], ["mod", "theorem", "sign_one", ["equiv", "perm"]], ["mod", "theorem", "sign_prod_list_swap", ["equiv", "perm"]], ["add", "theorem", "sign_refl", ["equiv", "perm"]], ["mod", "theorem", "sign_subtype_perm", ["equiv", "perm"]], ["add", "theorem", "sign_swap'", ["equiv", "perm"]], ["mod", "theorem", "sign_swap", ["equiv", "perm"]], ["mod", "theorem", "sign_symm_trans_trans", ["equiv", "perm"]], ["add", "theorem", "swap_mul_self", ["equiv", "perm"]], ["add", "theorem", "swap_swap_apply", ["equiv", "perm"]]]}]}, {"timestamp": 1539769614, "sha": "530e1d13", "message": "refactor (data/finset): explicit arguments for subset_union_* and inter_subset_*\nThis change makes them a little easier to apply, and also makes them consistent with their analogues in set.basic.", "changes": [{"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "inter_subset_left", ["finset"]], ["mod", "theorem", "inter_subset_right", ["finset"]], ["mod", "theorem", "subset_union_left", ["finset"]], ["mod", "theorem", "subset_union_right", ["finset"]]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": []}]}, {"timestamp": 1539768302, "sha": "b5cd9746", "message": "feat(*): trigonometric functions: exp, log, sin, cos, tan, sinh, cosh, tanh, pi, arcsin, argcos, arg (#386)\n* `floor_ring` now is parameterized on a `linear_ordered_ring` instead of extending it.\n*", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": [["add", "theorem", "sub_floor_div_mul_lt", []], ["add", "theorem", "sub_floor_div_mul_nonneg", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "inv_pow'", []], ["add", "theorem", "pow_le_one", []]]}, {"oldPath": "algebra/ordered_field.lean", "newPath": "algebra/ordered_field.lean", "changes": [["add", "theorem", "div_le_div_of_le_left", []], ["add", "theorem", "one_le_inv", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_le_of_le_one_left", []], ["add", "theorem", "mul_le_of_le_one_right", []], ["add", "theorem", "mul_lt_one_of_nonneg_of_lt_one_left", []], ["add", "theorem", "mul_lt_one_of_nonneg_of_lt_one_right", []], ["add", "theorem", "one_lt_mul_of_le_of_lt", []], ["add", "theorem", "one_lt_mul_of_lt_of_le", []]]}, {"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": [["add", "theorem", "continuous_im", ["complex"]], ["del", "theorem", "continuous_mul", ["complex"]], ["add", "theorem", "continuous_of_real", ["complex"]], ["add", "theorem", "continuous_re", ["complex"]], ["add", "theorem", "uniform_continuous_im", ["complex"]], ["add", "theorem", "uniform_continuous_of_real", ["complex"]], ["add", "theorem", "uniform_continuous_re", ["complex"]]]}, {"oldPath": null, "newPath": "analysis/exponential.lean", "changes": [["add", "theorem", "arg_I", ["complex"]], ["add", "theorem", "arg_cos_add_sin_mul_I", ["complex"]], ["add", "theorem", "arg_eq_arg_iff", ["complex"]], ["add", "theorem", "arg_eq_arg_neg_add_pi_of_im_nonneg_of_re_neg", ["complex"]], ["add", "theorem", "arg_eq_arg_neg_sub_pi_of_im_neg_of_re_neg", ["complex"]], ["add", "theorem", "arg_le_pi", ["complex"]], ["add", "theorem", "arg_neg_I", ["complex"]], ["add", "theorem", "arg_neg_one", ["complex"]], ["add", "theorem", "arg_of_real_of_neg", ["complex"]], ["add", "theorem", "arg_of_real_of_nonneg", ["complex"]], ["add", "theorem", "arg_one", ["complex"]], ["add", "theorem", "arg_real_mul", ["complex"]], ["add", "theorem", "arg_zero", ["complex"]], ["add", "theorem", "continuous_cos", ["complex"]], ["add", "theorem", "continuous_cosh", ["complex"]], ["add", "theorem", "continuous_exp", ["complex"]], ["add", "theorem", "continuous_sin", ["complex"]], ["add", "theorem", "continuous_sinh", ["complex"]], ["add", "theorem", "continuous_tan", ["complex"]], ["add", "theorem", "cos_add_pi", ["complex"]], ["add", "theorem", "cos_add_pi_div_two", ["complex"]], ["add", "theorem", "cos_add_two_pi", ["complex"]], ["add", "theorem", "cos_arg", ["complex"]], ["add", "theorem", "cos_int_mul_two_pi", ["complex"]], ["add", "theorem", "cos_int_mul_two_pi_add_pi", ["complex"]], ["add", "theorem", "cos_nat_mul_two_pi", ["complex"]], ["add", "theorem", "cos_pi", ["complex"]], ["add", "theorem", "cos_pi_div_two", ["complex"]], ["add", "theorem", "cos_pi_div_two_sub", ["complex"]], ["add", "theorem", "cos_pi_sub", ["complex"]], ["add", "theorem", "cos_sub_pi_div_two", ["complex"]], ["add", "theorem", "cos_two_pi", ["complex"]], ["add", "theorem", "exp_inj_of_neg_pi_lt_of_le_pi", ["complex"]], ["add", "theorem", "exp_log", ["complex"]], ["add", "theorem", "ext_abs_arg", ["complex"]], ["add", "theorem", "log_I", ["complex"]], ["add", "theorem", "log_exp", ["complex"]], ["add", "theorem", "log_im", ["complex"]], ["add", "theorem", "log_neg_I", ["complex"]], ["add", "theorem", "log_neg_one", ["complex"]], ["add", "theorem", "log_one", ["complex"]], ["add", "theorem", "log_re", ["complex"]], ["add", "theorem", "log_zero", ["complex"]], ["add", "theorem", "neg_pi_lt_arg", ["complex"]], ["add", "theorem", "of_real_log", ["complex"]], ["add", "theorem", "sin_add_pi", ["complex"]], ["add", "theorem", "sin_add_pi_div_two", ["complex"]], ["add", "theorem", "sin_add_two_pi", ["complex"]], ["add", "theorem", "sin_arg", ["complex"]], ["add", "theorem", "sin_int_mul_pi", ["complex"]], ["add", "theorem", "sin_nat_mul_pi", ["complex"]], ["add", "theorem", "sin_pi", ["complex"]], ["add", "theorem", "sin_pi_div_two", ["complex"]], ["add", "theorem", "sin_pi_div_two_sub", ["complex"]], ["add", "theorem", "sin_pi_sub", ["complex"]], ["add", "theorem", "sin_sub_pi_div_two", ["complex"]], ["add", "theorem", "sin_two_pi", ["complex"]], ["add", "theorem", "tan_arg", ["complex"]], ["add", "theorem", "tendsto_exp_zero_one", ["complex"]], ["add", "theorem", "abs_div_sqrt_one_add_lt", ["real"]], ["add", "theorem", "arccos_cos", ["real"]], ["add", "theorem", "arccos_eq_pi_div_two_sub_arcsin", ["real"]], ["add", "theorem", "arccos_inj", ["real"]], ["add", "theorem", "arccos_le_pi", ["real"]], ["add", "theorem", "arccos_neg", ["real"]], ["add", "theorem", "arccos_neg_one", ["real"]], ["add", "theorem", "arccos_nonneg", ["real"]], ["add", "theorem", "arccos_one", ["real"]], ["add", "theorem", "arccos_zero", ["real"]], ["add", "theorem", "arcsin_eq_pi_div_two_sub_arccos", ["real"]], ["add", "theorem", "arcsin_eq_zero_iff", ["real"]], ["add", "theorem", "arcsin_inj", ["real"]], ["add", "theorem", "arcsin_le_pi_div_two", ["real"]], ["add", "theorem", "arcsin_neg", ["real"]], ["add", "theorem", "arcsin_neg_one", ["real"]], ["add", "theorem", "arcsin_nonneg", ["real"]], ["add", "theorem", "arcsin_nonpos", ["real"]], ["add", "theorem", "arcsin_one", ["real"]], ["add", "theorem", "arcsin_pos", ["real"]], ["add", "theorem", "arcsin_sin", ["real"]], ["add", "theorem", "arcsin_zero", ["real"]], ["add", "theorem", "arctan_lt_pi_div_two", ["real"]], ["add", "theorem", "arctan_neg", ["real"]], ["add", "theorem", "arctan_tan", ["real"]], ["add", "theorem", "arctan_zero", ["real"]], ["add", "theorem", "continuous_cos", ["real"]], ["add", "theorem", "continuous_cosh", ["real"]], ["add", "theorem", "continuous_exp", ["real"]], ["add", "theorem", "continuous_sin", ["real"]], ["add", "theorem", "continuous_sinh", ["real"]], ["add", "theorem", "continuous_tan", ["real"]], ["add", "theorem", "cos_add_pi", ["real"]], ["add", "theorem", "cos_add_pi_div_two", ["real"]], ["add", "theorem", "cos_add_two_pi", ["real"]], ["add", "theorem", "cos_arccos", ["real"]], ["add", "theorem", "cos_arcsin", ["real"]], ["add", "theorem", "cos_arcsin_nonneg", ["real"]], ["add", "theorem", "cos_arctan", ["real"]], ["add", "theorem", "cos_eq_one_iff", ["real"]], ["add", "theorem", "cos_eq_one_iff_of_lt_of_lt", ["real"]], ["add", "theorem", "cos_inj_of_nonneg_of_le_pi", ["real"]], ["add", "theorem", "cos_int_mul_two_pi", ["real"]], ["add", "theorem", "cos_int_mul_two_pi_add_pi", ["real"]], ["add", "theorem", "cos_le_cos_of_nonneg_of_le_pi", ["real"]], ["add", "theorem", "cos_lt_cos_of_nonneg_of_le_pi", ["real"]], ["add", "theorem", "cos_lt_cos_of_nonneg_of_le_pi_div_two", ["real"]], ["add", "theorem", "cos_nat_mul_two_pi", ["real"]], ["add", "theorem", "cos_neg_of_pi_div_two_lt_of_lt", ["real"]], ["add", "theorem", "cos_nonneg_of_neg_pi_div_two_le_of_le_pi_div_two", ["real"]], ["add", "theorem", "cos_nonpos_of_pi_div_two_le_of_le", ["real"]], ["add", "theorem", "cos_pi", ["real"]], ["add", "theorem", "cos_pi_div_two", ["real"]], ["add", "theorem", "cos_pi_div_two_sub", ["real"]], ["add", "theorem", "cos_pi_sub", ["real"]], ["add", "theorem", "cos_pos_of_neg_pi_div_two_lt_of_lt_pi_div_two", ["real"]], ["add", "theorem", "cos_sub_pi_div_two", ["real"]], ["add", "theorem", "cos_two_pi", ["real"]], ["add", "theorem", "div_sqrt_one_add_lt_one", ["real"]], ["add", "theorem", "exists_cos_eq_zero", ["real"]], ["add", "theorem", "exists_exp_eq_of_pos", ["real"]], ["add", "theorem", "exists_sin_eq", ["real"]], ["add", "theorem", "exp_log", ["real"]], ["add", "theorem", "log_exp", ["real"]], ["add", "theorem", "log_one", ["real"]], ["add", "theorem", "log_zero", ["real"]], ["add", "theorem", "neg_one_lt_div_sqrt_one_add", ["real"]], ["add", "theorem", "neg_pi_div_two_le_arcsin", ["real"]], ["add", "theorem", "neg_pi_div_two_lt_arctan", ["real"]], ["add", "theorem", "one_le_pi_div_two", ["real"]], ["add", "theorem", "pi_div_two_le_two", ["real"]], ["add", "theorem", "pi_div_two_pos", ["real"]], ["add", "theorem", "pi_le_four", ["real"]], ["add", "theorem", "pi_pos", ["real"]], ["add", "theorem", "sin_add_pi", ["real"]], ["add", "theorem", "sin_add_pi_div_two", ["real"]], ["add", "theorem", "sin_add_two_pi", ["real"]], ["add", "theorem", "sin_arccos", ["real"]], ["add", "theorem", "sin_arcsin", ["real"]], ["add", "theorem", "sin_arctan", ["real"]], ["add", "theorem", "sin_eq_zero_iff", ["real"]], ["add", "theorem", "sin_eq_zero_iff_cos_eq", ["real"]], ["add", "theorem", "sin_eq_zero_iff_of_lt_of_lt", ["real"]], ["add", "theorem", "sin_inj_of_le_of_le_pi_div_two", ["real"]], ["add", "theorem", "sin_int_mul_pi", ["real"]], ["add", "theorem", "sin_le_sin_of_le_of_le_pi_div_two", ["real"]], ["add", "theorem", "sin_lt_sin_of_le_of_le_pi_div_two", ["real"]], ["add", "theorem", "sin_nat_mul_pi", ["real"]], ["add", "theorem", "sin_neg_of_neg_of_neg_pi_lt", ["real"]], ["add", "theorem", "sin_nonneg_of_nonneg_of_le_pi", ["real"]], ["add", "theorem", "sin_nonpos_of_nonnpos_of_neg_pi_le", ["real"]], ["add", "theorem", "sin_pi", ["real"]], ["add", "theorem", "sin_pi_div_two", ["real"]], ["add", "theorem", "sin_pi_div_two_sub", ["real"]], ["add", "theorem", "sin_pi_sub", ["real"]], ["add", "theorem", "sin_pos_of_pos_of_lt_pi", ["real"]], ["add", "theorem", "sin_sub_pi_div_two", ["real"]], ["add", "theorem", "sin_two_pi", ["real"]], ["add", "theorem", "tan_arctan", ["real"]], ["add", "theorem", "tan_inj_of_lt_of_lt_pi_div_two", ["real"]], ["add", "theorem", "tan_lt_tan_of_lt_of_lt_pi_div_two", ["real"]], ["add", "theorem", "tan_lt_tan_of_nonneg_of_lt_pi_div_two", ["real"]], ["add", "theorem", "tan_neg_of_neg_of_pi_div_two_lt", ["real"]], ["add", "theorem", "tan_nonneg_of_nonneg_of_le_pi_div_two", ["real"]], ["add", "theorem", "tan_nonpos_of_nonpos_of_neg_pi_div_two_le", ["real"]], ["add", "theorem", "tan_pos_of_pos_of_lt_pi_div_two", ["real"]], ["add", "theorem", "tan_surjective", ["real"]], ["add", "theorem", "two_le_pi", ["real"]], ["add", "theorem", "two_pi_pos", ["real"]]]}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["del", "theorem", "continuous_mul", ["real"]], ["add", "theorem", "intermediate_value'", ["real"]], ["add", "theorem", "intermediate_value", ["real"]]]}, {"oldPath": "data/complex/basic.lean", "newPath": "data/complex/basic.lean", "changes": [["add", "theorem", "I_mul_I", ["complex"]], ["add", "theorem", "abs_cast_nat", ["complex"]], ["add", "theorem", "abs_im_div_abs_le_one", ["complex"]], ["add", "theorem", "abs_re_div_abs_le_one", ["complex"]], ["add", "theorem", "abs_two", ["complex"]], ["add", "theorem", "bit0_im", ["complex"]], ["add", "theorem", "bit0_re", ["complex"]], ["add", "theorem", "bit1_im", ["complex"]], ["add", "theorem", "bit1_re", ["complex"]], ["add", "theorem", "conj_neg_I", ["complex"]], ["add", "theorem", "conj_pow", ["complex"]], ["add", "theorem", "conj_sub", ["complex"]], ["add", "theorem", "conj_two", ["complex"]], ["add", "theorem", "eq_lim_of_const_equiv", ["complex"]], ["add", "theorem", "im_const_equiv_of_const_equiv", ["complex"]], ["add", "theorem", "is_cau_seq_abs", ["complex"]], ["add", "theorem", "is_cau_seq_conj", ["complex"]], ["add", "theorem", "lim_abs", ["complex"]], ["add", "theorem", "lim_add", ["complex"]], ["add", "theorem", "lim_conj", ["complex"]], ["add", "theorem", "lim_const", ["complex"]], ["add", "theorem", "lim_eq_lim_of_equiv", ["complex"]], ["add", "theorem", "lim_eq_of_equiv_const", ["complex"]], ["add", "theorem", "lim_eq_zero_iff", ["complex"]], ["add", "theorem", "lim_inv", ["complex"]], ["add", "theorem", "lim_mul", ["complex"]], ["add", "theorem", "lim_mul_lim", ["complex"]], ["add", "theorem", "lim_neg", ["complex"]], ["add", "theorem", "norm_sq_eq_abs", ["complex"]], ["add", "theorem", "of_real_pow", ["complex"]], ["mod", "theorem", "of_real_zero", ["complex"]], ["add", "theorem", "re_const_equiv_of_const_equiv", ["complex"]]]}, {"oldPath": null, "newPath": "data/complex/exponential.lean", "changes": [["add", "theorem", "abv_sum_le_sum_abv", []], ["add", "theorem", "cauchy_product", []], ["add", "theorem", "abs_cos_add_sin_mul_I", ["complex"]], ["add", "theorem", "abs_exp_eq_iff_re_eq", ["complex"]], ["add", "theorem", "abs_exp_of_real", ["complex"]], ["add", "theorem", "abs_exp_sub_one_le", ["complex"]], ["add", "def", "cos", ["complex"]], ["add", "theorem", "cos_add", ["complex"]], ["add", "theorem", "cos_conj", ["complex"]], ["add", "theorem", "cos_neg", ["complex"]], ["add", "theorem", "cos_of_real_im", ["complex"]], ["add", "theorem", "cos_of_real_re", ["complex"]], ["add", "theorem", "cos_sub", ["complex"]], ["add", "theorem", "cos_two_mul", ["complex"]], ["add", "theorem", "cos_zero", ["complex"]], ["add", "def", "cosh", ["complex"]], ["add", "theorem", "cosh_add", ["complex"]], ["add", "theorem", "cosh_conj", ["complex"]], ["add", "theorem", "cosh_neg", ["complex"]], ["add", "theorem", "cosh_of_real_im", ["complex"]], ["add", "theorem", "cosh_of_real_re", ["complex"]], ["add", "theorem", "cosh_sub", ["complex"]], ["add", "theorem", "cosh_zero", ["complex"]], ["add", "def", "exp'", ["complex"]], ["add", "def", "exp", ["complex"]], ["add", "theorem", "exp_add", ["complex"]], ["add", "theorem", "exp_add_mul_I", ["complex"]], ["add", "theorem", "exp_bound", ["complex"]], ["add", "theorem", "exp_conj", ["complex"]], ["add", "theorem", "exp_eq_exp_re_mul_sin_add_cos", ["complex"]], ["add", "theorem", "exp_mul_I", ["complex"]], ["add", "theorem", "exp_ne_zero", ["complex"]], ["add", "theorem", "exp_neg", ["complex"]], ["add", "theorem", "exp_of_real_im", ["complex"]], ["add", "theorem", "exp_of_real_re", ["complex"]], ["add", "theorem", "exp_sub", ["complex"]], ["add", "theorem", "exp_zero", ["complex"]], ["add", "theorem", "is_cau_abs_exp", ["complex"]], ["add", "theorem", "is_cau_exp", ["complex"]], ["add", "theorem", "of_real_cos", ["complex"]], ["add", "theorem", "of_real_cos_of_real_re", ["complex"]], ["add", "theorem", "of_real_cosh", ["complex"]], ["add", "theorem", "of_real_cosh_of_real_re", ["complex"]], ["add", "theorem", "of_real_exp", ["complex"]], ["add", "theorem", "of_real_exp_of_real_re", ["complex"]], ["add", "theorem", "of_real_sin", ["complex"]], ["add", "theorem", "of_real_sin_of_real_re", ["complex"]], ["add", "theorem", "of_real_sinh", ["complex"]], ["add", "theorem", "of_real_sinh_of_real_re", ["complex"]], ["add", "theorem", "of_real_tan", ["complex"]], ["add", "theorem", "of_real_tan_of_real_re", ["complex"]], ["add", "theorem", "of_real_tanh", ["complex"]], ["add", "theorem", "of_real_tanh_of_real_re", ["complex"]], ["add", "def", "sin", ["complex"]], ["add", "theorem", "sin_add", ["complex"]], ["add", "theorem", "sin_conj", ["complex"]], ["add", "theorem", "sin_neg", ["complex"]], ["add", "theorem", "sin_of_real_im", ["complex"]], ["add", "theorem", "sin_of_real_re", ["complex"]], ["add", "theorem", "sin_pow_two_add_cos_pow_two", ["complex"]], ["add", "theorem", "sin_sub", ["complex"]], ["add", "theorem", "sin_two_mul", ["complex"]], ["add", "theorem", "sin_zero", ["complex"]], ["add", "def", "sinh", ["complex"]], ["add", "theorem", "sinh_add", ["complex"]], ["add", "theorem", "sinh_conj", ["complex"]], ["add", "theorem", "sinh_neg", ["complex"]], ["add", "theorem", "sinh_of_real_im", ["complex"]], ["add", "theorem", "sinh_of_real_re", ["complex"]], ["add", "theorem", "sinh_sub", ["complex"]], ["add", "theorem", "sinh_zero", ["complex"]], ["add", "theorem", "sum_div_fact_le", ["complex"]], ["add", "def", "tan", ["complex"]], ["add", "theorem", "tan_conj", ["complex"]], ["add", "theorem", "tan_eq_sin_div_cos", ["complex"]], ["add", "theorem", "tan_neg", ["complex"]], ["add", "theorem", "tan_of_real_im", ["complex"]], ["add", "theorem", "tan_of_real_re", ["complex"]], ["add", "theorem", "tan_zero", ["complex"]], ["add", "def", "tanh", ["complex"]], ["add", "theorem", "tanh_conj", ["complex"]], ["add", "theorem", "tanh_eq_sinh_div_cosh", ["complex"]], ["add", "theorem", "tanh_neg", ["complex"]], ["add", "theorem", "tanh_of_real_im", ["complex"]], ["add", "theorem", "tanh_of_real_re", ["complex"]], ["add", "theorem", "tanh_zero", ["complex"]], ["add", "theorem", "forall_ge_le_of_forall_le_succ", []], ["add", "theorem", "geo_sum_eq", []], ["add", "theorem", "geo_sum_inv_eq", []], ["add", "theorem", "is_cau_geo_series", []], ["add", "theorem", "is_cau_geo_series_const", []], ["add", "theorem", "is_cau_of_decreasing_bounded", []], ["add", "theorem", "is_cau_of_mono_bounded", []], ["add", "theorem", "is_cau_series_of_abv_cau", []], ["add", "theorem", "is_cau_series_of_abv_le_cau", []], ["add", "theorem", "abs_cos_le_one", ["real"]], ["add", "theorem", "abs_exp", ["real"]], ["add", "theorem", "abs_sin_le_one", ["real"]], ["add", "theorem", "add_one_le_exp_of_nonneg", ["real"]], ["add", "def", "cos", ["real"]], ["add", "theorem", "cos_add", ["real"]], ["add", "theorem", "cos_bound", ["real"]], ["add", "theorem", "cos_le_one", ["real"]], ["add", "theorem", "cos_neg", ["real"]], ["add", "theorem", "cos_one_le", ["real"]], ["add", "theorem", "cos_one_pos", ["real"]], ["add", "theorem", "cos_pos_of_le_one", ["real"]], ["add", "theorem", "cos_pow_two_le_one", ["real"]], ["add", "theorem", "cos_sub", ["real"]], ["add", "theorem", "cos_two_mul", ["real"]], ["add", "theorem", "cos_two_neg", ["real"]], ["add", "theorem", "cos_zero", ["real"]], ["add", "def", "cosh", ["real"]], ["add", "theorem", "cosh_add", ["real"]], ["add", "theorem", "cosh_neg", ["real"]], ["add", "theorem", "cosh_sub", ["real"]], ["add", "theorem", "cosh_zero", ["real"]], ["add", "def", "exp", ["real"]], ["add", "theorem", "exp_add", ["real"]], ["add", "theorem", "exp_injective", ["real"]], ["add", "theorem", "exp_le_exp", ["real"]], ["add", "theorem", "exp_lt_exp", ["real"]], ["add", "theorem", "exp_ne_zero", ["real"]], ["add", "theorem", "exp_neg", ["real"]], ["add", "theorem", "exp_pos", ["real"]], ["add", "theorem", "exp_sub", ["real"]], ["add", "theorem", "exp_zero", ["real"]], ["add", "theorem", "neg_one_le_cos", ["real"]], ["add", "theorem", "neg_one_le_sin", ["real"]], ["add", "theorem", "one_le_exp", ["real"]], ["add", "def", "sin", ["real"]], ["add", "theorem", "sin_add", ["real"]], ["add", "theorem", "sin_bound", ["real"]], ["add", "theorem", "sin_le_one", ["real"]], ["add", "theorem", "sin_neg", ["real"]], ["add", "theorem", "sin_pos_of_pos_of_le_one", ["real"]], ["add", "theorem", "sin_pos_of_pos_of_le_two", ["real"]], ["add", "theorem", "sin_pow_two_add_cos_pow_two", ["real"]], ["add", "theorem", "sin_pow_two_le_one", ["real"]], ["add", "theorem", "sin_sub", ["real"]], ["add", "theorem", "sin_two_mul", ["real"]], ["add", "theorem", "sin_zero", ["real"]], ["add", "def", "sinh", ["real"]], ["add", "theorem", "sinh_add", ["real"]], ["add", "theorem", "sinh_neg", ["real"]], ["add", "theorem", "sinh_sub", ["real"]], ["add", "theorem", "sinh_zero", ["real"]], ["add", "def", "tan", ["real"]], ["add", "theorem", "tan_eq_sin_div_cos", ["real"]], ["add", "theorem", "tan_neg", ["real"]], ["add", "theorem", "tan_zero", ["real"]], ["add", "def", "tanh", ["real"]], ["add", "theorem", "tanh_eq_sinh_div_cosh", ["real"]], ["add", "theorem", "tanh_neg", ["real"]], ["add", "theorem", "tanh_zero", ["real"]], ["add", "theorem", "series_ratio_test", []], ["add", "theorem", "sum_range_diag_flip", []], ["add", "theorem", "sum_range_sub_sum_range", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "cast_two", ["int"]], ["add", "theorem", "mod_two_eq_zero_or_one", ["int"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "fact_mul_pow_le_fact", ["nat"]]]}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["add", "theorem", "cast_two", ["nat"]]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["add", "theorem", "le_lim", ["real"]], ["add", "theorem", "lim_le", ["real"]], ["add", "theorem", "lim_lt", ["real"]], ["add", "theorem", "lt_lim", ["real"]]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": [["add", "theorem", "le_of_eq_of_le", ["cau_seq"]], ["add", "theorem", "le_of_exists", ["cau_seq"]], ["add", "theorem", "le_of_le_of_eq", ["cau_seq"]], ["add", "theorem", "abv_pow", ["is_absolute_value"]]]}]}, {"timestamp": 1539695270, "sha": "792c6731", "message": "feat(order/galois_connection): make arguemnts to dual implicit", "changes": [{"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}]}, {"timestamp": 1539624069, "sha": "80d688e3", "message": "feat(data/nat/choose): nat.prime.dvd_choose (#419)\n* feat(data/nat/choose): nat/prime.dvd_choose\n* use nat namespace\n* Update prime.lean\n* improve readability", "changes": [{"oldPath": "data/nat/choose.lean", "newPath": "data/nat/choose.lean", "changes": [["add", "theorem", "dvd_choose", ["nat", "prime"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "dvd_fact", ["nat", "prime"]]]}]}, {"timestamp": 1539616343, "sha": "c5930f57", "message": "feat(group_theory.order_of_element): subgroups of cyclic groups are cyclic (#423)\n* feat(group_theory.order_of_element): subgroups of cyclic groups are cyclic\n* delete new line", "changes": [{"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": []}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "gsmul_coe", ["is_add_subgroup"]], ["add", "theorem", "coe_gpow", ["is_subgroup"]], ["add", "theorem", "coe_inv", ["is_subgroup"]]]}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": [["add", "theorem", "smul_coe", ["is_add_submonoid"]], ["add", "theorem", "coe_mul", ["is_submonoid"]], ["add", "theorem", "coe_one", ["is_submonoid"]], ["add", "theorem", "coe_pow", ["is_submonoid"]]]}]}, {"timestamp": 1539610764, "sha": "a33ab129", "message": "refactor(analysis/topology): move separation ring to quotient_topological_structures", "changes": [{"oldPath": "analysis/topology/completion.lean", "newPath": "analysis/topology/completion.lean", "changes": [["del", "theorem", "eq_mpr_heq", ["uniform_space"]], ["del", "theorem", "ring_sep_quot", ["uniform_space"]], ["del", "theorem", "ring_sep_rel", ["uniform_space"]]]}, {"oldPath": "analysis/topology/quotient_topological_structures.lean", "newPath": "analysis/topology/quotient_topological_structures.lean", "changes": [["del", "theorem", "is_open_map_mul_left", []], ["del", "theorem", "is_open_map_mul_right", []], ["del", "theorem", "quotient_map", ["quotient_ring"]], ["add", "theorem", "quotient_map_coe_coe", ["quotient_ring"]], ["add", "theorem", "ring_sep_quot", ["uniform_space"]], ["add", "theorem", "ring_sep_rel", ["uniform_space"]], ["add", "def", "sep_quot_equiv_ring_quot", ["uniform_space"]], ["add", "theorem", "{u}", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "is_open_map_mul_left", []], ["add", "theorem", "is_open_map_mul_right", []]]}]}, {"timestamp": 1539610764, "sha": "13080776", "message": "feature(data/equiv/algebra): add mul left/right and inverse as equivalences", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": null, "newPath": "data/equiv/algebra.lean", "changes": []}, {"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": []}]}, {"timestamp": 1539610764, "sha": "c8ecae8f", "message": "feature(analysis/topology/continuity): start homeomorphism", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "coe_eq_to_equiv", ["homeomorph"]], ["add", "theorem", "coinduced_eq", ["homeomorph"]], ["add", "theorem", "image_symm", ["homeomorph"]], ["add", "theorem", "induced_eq", ["homeomorph"]], ["add", "theorem", "preimage_symm", ["homeomorph"]], ["add", "def", "prod_assoc", ["homeomorph"]], ["add", "def", "prod_comm", ["homeomorph"]], ["add", "def", "prod_congr", ["homeomorph"]], ["add", "theorem", "range_coe", ["homeomorph"]], ["add", "theorem", "self_comp_symm", ["homeomorph"]], ["add", "theorem", "symm_comp_self", ["homeomorph"]], ["add", "structure", "homeomorph", []]]}, {"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["mod", "def", "prod_congr", ["equiv"]]]}]}, {"timestamp": 1539610764, "sha": "af434b54", "message": "refactor(analysis/topology): move is_open_map to continuity", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "of_inverse", ["is_open_map"]], ["add", "theorem", "to_quotient_map", ["is_open_map"]], ["add", "def", "is_open_map", []], ["add", "theorem", "is_open_map_iff_nhds_le", []], ["del", "theorem", "continuous", ["quotient_map"]], ["del", "theorem", "continuous_iff", ["quotient_map"]], ["del", "theorem", "quotient_map_compose", []], ["del", "theorem", "quotient_map_id", []], ["del", "theorem", "quotient_map_of_quotient_map_compose", []]]}, {"oldPath": "analysis/topology/quotient_topological_structures.lean", "newPath": "analysis/topology/quotient_topological_structures.lean", "changes": [["del", "theorem", "is_open_coinduced", []], ["del", "theorem", "of_inverse", ["is_open_map"]], ["del", "theorem", "to_quotient_map", ["is_open_map"]], ["del", "def", "is_open_map", []], ["del", "theorem", "is_open_map_iff_nhds_le", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_open_coinduced", []], ["add", "theorem", "is_open_induced_iff", []]]}]}, {"timestamp": 1539610764, "sha": "29675ad2", "message": "refactor(analysis/topology/topological_structures): use to_additive to derive topological_add_monoid and topological_add_group", "changes": [{"oldPath": "analysis/topology/quotient_topological_structures.lean", "newPath": "analysis/topology/quotient_topological_structures.lean", "changes": [["del", "theorem", "continuous_inv'", []], ["del", "theorem", "continuous_inv", []], ["del", "theorem", "is_open_add_translate", []], ["add", "theorem", "is_open_coinduced", []], ["mod", "theorem", "of_inverse", ["is_open_map"]], ["del", "theorem", "quotient_map_of_open_of_surj_of_cont", ["is_open_map"]], ["add", "theorem", "to_quotient_map", ["is_open_map"]], ["del", "theorem", "is_open_map_iff_nhds_sets", []], ["add", "theorem", "is_open_map_mul_left", []], ["add", "theorem", "is_open_map_mul_right", []], ["del", "theorem", "is_open_ring_add_translate", []], ["del", "theorem", "is_open_translate", []], ["del", "theorem", "open_coe", ["quotient_add_group"]], ["del", "theorem", "quotient_add_group_saturate", []], ["del", "theorem", "is_open_map", ["quotient_ring"]], ["add", "theorem", "is_open_map_coe", ["quotient_ring"]], ["del", "theorem", "open_coe", ["quotient_ring"]], ["add", "theorem", "quotient_map", ["quotient_ring"]]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["del", "theorem", "continuous_add'", []], ["del", "theorem", "continuous_add", []], ["del", "theorem", "continuous_finset_sum", []], ["add", "theorem", "continuous_inv'", []], ["add", "theorem", "continuous_inv", []], ["del", "theorem", "continuous_list_sum", []], ["del", "theorem", "continuous_multiset_sum", []], ["del", "theorem", "continuous_neg'", []], ["del", "theorem", "continuous_neg", []], ["del", "theorem", "exists_nhds_half", []], ["del", "theorem", "exists_nhds_quarter", []], ["add", "theorem", "exists_nhds_split4", []], ["add", "theorem", "exists_nhds_split", []], ["add", "theorem", "nhds_one_symm", []], ["add", "theorem", "nhds_translation_mul_inv", []], ["del", "theorem", "nhds_zero_symm", []], ["del", "theorem", "tendsto_add'", []], ["del", "theorem", "tendsto_add", []], ["del", "theorem", "tendsto_finset_sum", []], ["add", "theorem", "tendsto_inv", []], ["del", "theorem", "tendsto_list_sum", []], ["del", "theorem", "tendsto_multiset_sum", []], ["del", "theorem", "tendsto_neg", []]]}]}, {"timestamp": 1539610764, "sha": "75046c2b", "message": "chore(data/quot): add setoid.ext", "changes": [{"oldPath": "analysis/topology/completion.lean", "newPath": "analysis/topology/completion.lean", "changes": []}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["add", "theorem", "ext", ["setoid"]]]}]}, {"timestamp": 1539610764, "sha": "2395183b", "message": "feat(analysis/topology/quotient_topological_structures): endow quotient\nof topological groups, add groups and rings with a topological whatever\nstructure\nThis is not yet sorted. I'd like to push completions before cleaning\nthis.", "changes": [{"oldPath": "analysis/topology/completion.lean", "newPath": "analysis/topology/completion.lean", "changes": [["add", "theorem", "eq_mpr_heq", ["uniform_space"]], ["add", "theorem", "ring_sep_quot", ["uniform_space"]], ["add", "theorem", "ring_sep_rel", ["uniform_space"]]]}, {"oldPath": null, "newPath": "analysis/topology/quotient_topological_structures.lean", "changes": [["add", "theorem", "continuous_inv'", []], ["add", "theorem", "continuous_inv", []], ["add", "theorem", "is_open_add_translate", []], ["add", "theorem", "of_inverse", ["is_open_map"]], ["add", "theorem", "quotient_map_of_open_of_surj_of_cont", ["is_open_map"]], ["add", "def", "is_open_map", []], ["add", "theorem", "is_open_map_iff_nhds_le", []], ["add", "theorem", "is_open_map_iff_nhds_sets", []], ["add", "theorem", "is_open_ring_add_translate", []], ["add", "theorem", "is_open_translate", []], ["add", "theorem", "open_coe", ["quotient_add_group"]], ["add", "theorem", "quotient_add_group_saturate", []], ["add", "theorem", "open_coe", ["quotient_group"]], ["add", "theorem", "quotient_group_saturate", []], ["add", "theorem", "is_open_map", ["quotient_ring"]], ["add", "theorem", "open_coe", ["quotient_ring"]], ["add", "theorem", "quotient_ring_saturate", []]]}]}, {"timestamp": 1539610549, "sha": "73586053", "message": "feat(analysis/topology/completion): comm_ring on separation quotient, completion (separation_quotient A) is equivalent to completion A", "changes": [{"oldPath": "analysis/topology/completion.lean", "newPath": "analysis/topology/completion.lean", "changes": [["del", "theorem", "prod_pure_pure", ["filter"]], ["del", "theorem", "cauchy_prod", ["uniform_space"]], ["del", "theorem", "complete_space_separation", ["uniform_space"]], ["add", "def", "completion_separation_quotient_equiv", ["uniform_space", "completion"]], ["add", "theorem", "ext", ["uniform_space", "completion"]], ["add", "theorem", "extension_map", ["uniform_space", "completion"]], ["add", "theorem", "map_comp", ["uniform_space", "completion"]], ["add", "theorem", "map_id", ["uniform_space", "completion"]], ["add", "theorem", "map_unique", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_completion_separation_quotient_equiv", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_completion_separation_quotient_equiv_symm", ["uniform_space", "completion"]], ["del", "theorem", "separated_separation", ["uniform_space"]], ["add", "def", "lift", ["uniform_space", "separation_quotient"]], ["add", "theorem", "lift_mk", ["uniform_space", "separation_quotient"]], ["add", "def", "map", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_comp", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_id", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_mk", ["uniform_space", "separation_quotient"]], ["add", "theorem", "map_unique", ["uniform_space", "separation_quotient"]], ["add", "theorem", "uniform_continuous_lift", ["uniform_space", "separation_quotient"]], ["add", "theorem", "uniform_continuous_map", ["uniform_space", "separation_quotient"]], ["add", "def", "separation_quotient", ["uniform_space"]], ["del", "theorem", "uniform_continuous_of_const", ["uniform_space"]]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "mem_closure2", []], ["add", "theorem", "mem_closure", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["del", "theorem", "is_ideal_iff", []]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["add", "theorem", "nonempty_quotient_iff", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["del", "theorem", "image_subset_iff'", ["set"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "prod_pure_pure", ["filter"]]]}]}, {"timestamp": 1539610385, "sha": "13be74f7", "message": "feat(analysis/topology/topological_structure): ideal closure is ideal", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "is_ideal_iff", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_subset_iff'", ["set"]]]}]}, {"timestamp": 1539610385, "sha": "7697a84d", "message": "feat(analysis/topology/topological_groups): construct topologies out of a group and a neighbourhood filter at 0", "changes": [{"oldPath": "analysis/topology/complete_groups.lean", "newPath": null, "changes": [["del", "theorem", "neg_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "neg_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "sub_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "sub_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero_left", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "zero_right", ["add_comm_group", "is_Z_bilin"]], ["del", "theorem", "extend_Z_bilin", ["dense_embedding"]], ["del", "theorem", "tendsto_zero_left", ["is_Z_bilin"]], ["del", "theorem", "tendsto_zero_right", ["is_Z_bilin"]], ["del", "theorem", "tendsto_sub_comap_self", []]]}, {"oldPath": "analysis/topology/completion.lean", "newPath": "analysis/topology/completion.lean", "changes": [["add", "theorem", "neg_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "neg_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "sub_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "sub_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "extend_Z_bilin", ["dense_embedding"]], ["add", "theorem", "tendsto_zero_left", ["is_Z_bilin"]], ["add", "theorem", "tendsto_zero_right", ["is_Z_bilin"]], ["add", "theorem", "tendsto_sub_comap_self", []], ["add", "theorem", "coe_mul", ["uniform_space", "completion"]], ["add", "theorem", "coe_one", ["uniform_space", "completion"]], ["add", "theorem", "continuous_mul'", ["uniform_space", "completion"]], ["add", "theorem", "continuous_mul", ["uniform_space", "completion"]], ["mod", "theorem", "dense", ["uniform_space", "completion"]], ["add", "theorem", "dense_embedding_coe", ["uniform_space", "completion"]]]}, {"oldPath": "analysis/topology/topological_groups.lean", "newPath": "analysis/topology/topological_groups.lean", "changes": [["add", "theorem", "add_Z", ["add_group_with_zero_nhd"]], ["add", "theorem", "exists_Z_half", ["add_group_with_zero_nhd"]], ["add", "theorem", "neg_Z", ["add_group_with_zero_nhd"]], ["add", "theorem", "nhds_eq", ["add_group_with_zero_nhd"]], ["add", "theorem", "nhds_zero_eq_Z", ["add_group_with_zero_nhd"]], ["del", "theorem", "half_nhd", []], ["del", "theorem", "nhds_translation", []], ["del", "theorem", "nhds_zero_symm", []], ["del", "theorem", "quarter_nhd", []], ["add", "theorem", "to_uniform_space_eq", []], ["add", "theorem", "topological_add_group_is_uniform", []], ["add", "theorem", "uniformity_eq_comap_nhds_zero'", []], ["del", "theorem", "uniformity_eq_comap_nhds_zero", []], ["del", "def", "Δ", []], ["del", "def", "δ", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "exists_nhds_half", []], ["add", "theorem", "exists_nhds_quarter", []], ["add", "theorem", "nhds_translation", []], ["add", "theorem", "nhds_zero_symm", []]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "comap_eq_of_inverse", ["filter"]], ["add", "theorem", "map_eq_of_inverse", ["filter"]]]}]}, {"timestamp": 1539610385, "sha": "96d3f950", "message": "doc(analysis/topology/completion): document changed organization", "changes": [{"oldPath": "analysis/topology/completion.lean", "newPath": "analysis/topology/completion.lean", "changes": []}]}, {"timestamp": 1539610385, "sha": "fbb6e9bc", "message": "feat(analysis/topology): group completion", "changes": [{"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["del", "theorem", "Cauchy_eq", ["real"]]]}, {"oldPath": null, "newPath": "analysis/topology/complete_groups.lean", "changes": [["add", "theorem", "neg_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "neg_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "sub_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "sub_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero_left", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "zero_right", ["add_comm_group", "is_Z_bilin"]], ["add", "theorem", "extend_Z_bilin", ["dense_embedding"]], ["add", "theorem", "tendsto_zero_left", ["is_Z_bilin"]], ["add", "theorem", "tendsto_zero_right", ["is_Z_bilin"]], ["add", "theorem", "tendsto_sub_comap_self", []]]}, {"oldPath": null, "newPath": "analysis/topology/completion.lean", "changes": [["add", "theorem", "Cauchy_eq", ["Cauchy"]], ["add", "theorem", "dense_embedding_pure_cauchy", ["Cauchy"]], ["add", "def", "extend", ["Cauchy"]], ["add", "theorem", "extend_pure_cauchy", ["Cauchy"]], ["add", "def", "gen", ["Cauchy"]], ["add", "theorem", "injective_separated_pure_cauchy", ["Cauchy"]], ["add", "theorem", "mem_uniformity'", ["Cauchy"]], ["add", "theorem", "mem_uniformity", ["Cauchy"]], ["add", "theorem", "monotone_gen", ["Cauchy"]], ["add", "theorem", "nonempty_Cauchy_iff", ["Cauchy"]], ["add", "def", "prod", ["Cauchy"]], ["add", "theorem", "prod_pure_cauchy_pure_cauchy", ["Cauchy"]], ["add", "def", "pure_cauchy", ["Cauchy"]], ["add", "theorem", "pure_cauchy_dense", ["Cauchy"]], ["add", "theorem", "uniform_continuous_extend", ["Cauchy"]], ["add", "theorem", "uniform_continuous_prod", ["Cauchy"]], ["add", "theorem", "uniform_embedding_pure_cauchy", ["Cauchy"]], ["add", "def", "Cauchy", []], ["add", "theorem", "prod_pure_pure", ["filter"]], ["add", "theorem", "cauchy_prod", ["uniform_space"]], ["add", "theorem", "comap_quotient_eq_uniformity", ["uniform_space"]], ["add", "theorem", "comap_quotient_le_uniformity", ["uniform_space"]], ["add", "theorem", "complete_space_separation", ["uniform_space"]], ["add", "theorem", "coe_add", ["uniform_space", "completion"]], ["add", "theorem", "coe_neg", ["uniform_space", "completion"]], ["add", "theorem", "coe_zero", ["uniform_space", "completion"]], ["add", "theorem", "comap_coe_eq_uniformity", ["uniform_space", "completion"]], ["add", "theorem", "continuous_coe", ["uniform_space", "completion"]], ["add", "theorem", "continuous_extension", ["uniform_space", "completion"]], ["add", "theorem", "continuous_map", ["uniform_space", "completion"]], ["add", "theorem", "continuous_map₂", ["uniform_space", "completion"]], ["add", "theorem", "dense", ["uniform_space", "completion"]], ["add", "theorem", "dense₂", ["uniform_space", "completion"]], ["add", "theorem", "dense₃", ["uniform_space", "completion"]], ["add", "theorem", "extension_coe", ["uniform_space", "completion"]], ["add", "theorem", "induction_on", ["uniform_space", "completion"]], ["add", "theorem", "induction_on₂", ["uniform_space", "completion"]], ["add", "theorem", "induction_on₃", ["uniform_space", "completion"]], ["add", "theorem", "induction_on₄", ["uniform_space", "completion"]], ["add", "theorem", "is_add_group_hom_extension", ["uniform_space", "completion"]], ["add", "theorem", "is_add_group_hom_map", ["uniform_space", "completion"]], ["add", "theorem", "is_add_group_hom_prod", ["uniform_space", "completion"]], ["add", "theorem", "map_coe", ["uniform_space", "completion"]], ["add", "theorem", "map₂_coe_coe", ["uniform_space", "completion"]], ["add", "theorem", "prod_coe_coe", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_coe", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_extension", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_map", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_map₂'", ["uniform_space", "completion"]], ["add", "theorem", "uniform_continuous_prod", ["uniform_space", "completion"]], ["add", "theorem", "uniform_embedding_coe", ["uniform_space", "completion"]], ["add", "def", "completion", ["uniform_space"]], ["add", "theorem", "eq_of_separated_of_uniform_continuous", ["uniform_space"]], ["add", "theorem", "separated_of_uniform_continuous", ["uniform_space"]], ["add", "theorem", "separated_separation", ["uniform_space"]], ["add", "theorem", "separation_prod", ["uniform_space"]], ["add", "def", "separation_setoid", ["uniform_space"]], ["add", "theorem", "uniform_continuous_of_const", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient_lift", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient_lift₂", ["uniform_space"]], ["add", "theorem", "uniform_continuous_quotient_mk", ["uniform_space"]], ["add", "theorem", "uniformity_quotient", ["uniform_space"]]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "theorem", "extend_e_eq", ["dense_embedding"]], ["mod", "theorem", "extend_eq", ["dense_embedding"]], ["add", "theorem", "closure_eq_preimage_closure_image", ["embedding"]]]}, {"oldPath": null, "newPath": "analysis/topology/topological_groups.lean", "changes": [["add", "theorem", "half_nhd", []], ["add", "theorem", "nhds_translation", []], ["add", "theorem", "nhds_zero_symm", []], ["add", "theorem", "quarter_nhd", []], ["add", "def", "to_uniform_space", ["topological_add_group"]], ["add", "theorem", "uniformity_eq_comap_nhds_zero", []], ["add", "def", "Δ", []], ["add", "def", "δ", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["del", "theorem", "dense_or_discrete", []], ["add", "theorem", "group_separation_rel", []], ["mod", "theorem", "uniform_continuous_add'", []], ["mod", "theorem", "uniform_continuous_add", []], ["mod", "theorem", "uniform_continuous_neg'", []], ["mod", "theorem", "uniform_continuous_neg", []], ["add", "theorem", "uniform_continuous_of_continuous", []], ["add", "theorem", "uniform_continuous_of_tendsto_zero", []], ["mod", "theorem", "uniform_continuous_sub'", []], ["mod", "theorem", "uniform_continuous_sub", []], ["add", "theorem", "uniform_embedding_translate", []], ["add", "theorem", "uniformity_eq_comap_nhds_zero", []], ["add", "theorem", "uniformity_translate", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["del", "def", "gen", ["Cauchy"]], ["del", "theorem", "injective_separated_pure_cauchy", ["Cauchy"]], ["del", "theorem", "mem_uniformity'", ["Cauchy"]], ["del", "theorem", "mem_uniformity", ["Cauchy"]], ["del", "theorem", "monotone_gen", ["Cauchy"]], ["del", "def", "pure_cauchy", ["Cauchy"]], ["del", "theorem", "pure_cauchy_dense", ["Cauchy"]], ["del", "theorem", "uniform_embedding_pure_cauchy", ["Cauchy"]], ["del", "def", "Cauchy", []], ["add", "theorem", "cauchy_prod", []], ["del", "theorem", "comap_quotient_eq_uniformity", []], ["del", "theorem", "comap_quotient_le_uniformity", []], ["del", "theorem", "complete_space_separation", []], ["add", "theorem", "continuous_extend_of_cauchy", ["dense_embedding"]], ["del", "theorem", "eq_of_separated_of_uniform_continuous", []], ["add", "theorem", "mem_uniformity_of_uniform_continuous_invarant", []], ["del", "theorem", "separated_of_uniform_continuous", []], ["del", "theorem", "separated_separation", []], ["del", "theorem", "separation_prod", []], ["add", "theorem", "uniform_continuous_of_const", []], ["del", "theorem", "uniform_continuous_quotient", []], ["del", "theorem", "uniform_continuous_quotient_lift", []], ["del", "theorem", "uniform_continuous_quotient_lift₂", []], ["del", "theorem", "uniform_continuous_quotient_mk", []], ["mod", "theorem", "uniform_continuous_uniformly_extend", []], ["add", "theorem", "embedding", ["uniform_embedding"]], ["del", "theorem", "uniformity_quotient", []], ["mod", "theorem", "uniformly_extend_exists", []], ["mod", "theorem", "uniformly_extend_of_emb", []], ["mod", "theorem", "uniformly_extend_spec", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "prod_quotient_preimage_eq_image", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "preimage_Inter", ["set"]], ["add", "theorem", "preimage_bInter", ["set"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "theorem", "dense_or_discrete", []]]}]}, {"timestamp": 1539559624, "sha": "8150f191", "message": "feat(logic/basic): classical.not_not (#418)\n* feat(logic/basic): classical.not_not\n* mark as protected", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}]}, {"timestamp": 1539388798, "sha": "019b2364", "message": "fix(category_theory/open_set): Restore the correct order on open_set", "changes": [{"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": []}]}, {"timestamp": 1539341725, "sha": "131cf148", "message": "feat(group_theory/quotient_group): add to_additive attribute", "changes": [{"oldPath": "group_theory/quotient_group.lean", "newPath": "group_theory/quotient_group.lean", "changes": []}]}, {"timestamp": 1539341698, "sha": "c8d3c964", "message": "feat(tactic/interactive): congr' tries harder", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1539247991, "sha": "62451d3e", "message": "cleanup(data/polynomial): simplify proof of coeff_mul_left (#414)", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}]}, {"timestamp": 1539264163, "sha": "0fe28491", "message": "chore(analysis/measure_theory): finish characterization of lintegral", "changes": [{"oldPath": "analysis/measure_theory/integration.lean", "newPath": "analysis/measure_theory/integration.lean", "changes": [["add", "theorem", "lintegral_const_mul", ["measure_theory"]], ["add", "theorem", "lintegral_supr_const", ["measure_theory"]], ["mod", "theorem", "bind_const", ["measure_theory", "simple_func"]], ["mod", "def", "const", ["measure_theory", "simple_func"]], ["mod", "theorem", "const_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "const_mul_eq_map", ["measure_theory", "simple_func"]], ["mod", "def", "map", ["measure_theory", "simple_func"]]]}]}, {"timestamp": 1539211806, "sha": "40f55657", "message": "feat(analysis/measure_theory): lower Lebesgue integral under addition, supremum", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_hom_rel", ["finset"]], ["add", "theorem", "prod_image'", ["finset"]]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["del", "theorem", "coe_nat", ["ennreal"]], ["add", "theorem", "finset_sum_supr_nat", ["ennreal"]], ["add", "theorem", "mul_Sup", ["ennreal"]], ["add", "theorem", "mul_supr", ["ennreal"]], ["mod", "theorem", "supr_add_supr", ["ennreal"]], ["add", "theorem", "supr_add_supr_of_monotone", ["ennreal"]], ["add", "theorem", "supr_mul", ["ennreal"]], ["add", "theorem", "tendsto_coe_nnreal_nhds_top", ["ennreal"]]]}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": [["add", "theorem", "measurable_coe_int_real", ["measure_theory"]], ["add", "theorem", "measurable_le", ["measure_theory"]]]}, {"oldPath": "analysis/measure_theory/integration.lean", "newPath": "analysis/measure_theory/integration.lean", "changes": [["del", "def", "size", ["measure_theory", "indicator"]], ["del", "def", "to_fun", ["measure_theory", "indicator"]], ["del", "theorem", "to_fun_val", ["measure_theory", "indicator"]], ["del", "structure", "indicator", ["measure_theory"]], ["add", "def", "lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_add", ["measure_theory"]], ["add", "theorem", "lintegral_eq_nnreal", ["measure_theory"]], ["add", "theorem", "lintegral_eq_supr_eapprox_integral", ["measure_theory"]], ["add", "theorem", "lintegral_le_lintegral", ["measure_theory"]], ["add", "theorem", "lintegral_supr", ["measure_theory"]], ["add", "theorem", "lintegral_zero", ["measure_theory"]], ["del", "def", "bind", ["measure_theory", "simple_func'"]], ["del", "theorem", "bind_apply", ["measure_theory", "simple_func'"]], ["del", "theorem", "bind_const", ["measure_theory", "simple_func'"]], ["del", "theorem", "bind_itg", ["measure_theory", "simple_func'"]], ["del", "theorem", "bind_sum_measure", ["measure_theory", "simple_func'"]], ["del", "theorem", "coe_def", ["measure_theory", "simple_func'"]], ["del", "theorem", "coe_le_coe", ["measure_theory", "simple_func'"]], ["del", "def", "const", ["measure_theory", "simple_func'"]], ["del", "theorem", "const_apply", ["measure_theory", "simple_func'"]], ["del", "theorem", "ext", ["measure_theory", "simple_func'"]], ["del", "theorem", "is_measurable_cut", ["measure_theory", "simple_func'"]], ["del", "def", "ite", ["measure_theory", "simple_func'"]], ["del", "theorem", "ite_apply", ["measure_theory", "simple_func'"]], ["del", "def", "itg", ["measure_theory", "simple_func'"]], ["del", "theorem", "le_def", ["measure_theory", "simple_func'"]], ["del", "def", "map", ["measure_theory", "simple_func'"]], ["del", "theorem", "map_apply", ["measure_theory", "simple_func'"]], ["del", "theorem", "map_itg", ["measure_theory", "simple_func'"]], ["del", "theorem", "measurable", ["measure_theory", "simple_func'"]], ["del", "theorem", "mem_range", ["measure_theory", "simple_func'"]], ["del", "def", "pair", ["measure_theory", "simple_func'"]], ["del", "theorem", "preimage_measurable", ["measure_theory", "simple_func'"]], ["del", "def", "restrict", ["measure_theory", "simple_func'"]], ["del", "theorem", "restrict_apply", ["measure_theory", "simple_func'"]], ["del", "theorem", "restrict_preimage", ["measure_theory", "simple_func'"]], ["del", "def", "seq", ["measure_theory", "simple_func'"]], ["del", "theorem", "seq_itg", ["measure_theory", "simple_func'"]], ["del", "theorem", "add_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "add_eq_map₂", ["measure_theory", "simple_func"]], ["add", "theorem", "add_integral", ["measure_theory", "simple_func"]], ["del", "theorem", "add_sub_cancel_of_le", ["measure_theory", "simple_func"]], ["add", "def", "approx", ["measure_theory", "simple_func"]], ["add", "theorem", "approx_apply", ["measure_theory", "simple_func"]], ["add", "def", "bind", ["measure_theory", "simple_func"]], ["add", "theorem", "bind_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "bind_const", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_add", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_def", ["measure_theory", "simple_func"]], ["del", "theorem", "coe_le_coe", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_map", ["measure_theory", "simple_func"]], ["add", "def", "const", ["measure_theory", "simple_func"]], ["add", "theorem", "const_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "const_mul_eq_map", ["measure_theory", "simple_func"]], ["add", "theorem", "const_mul_integral", ["measure_theory", "simple_func"]], ["add", "def", "eapprox", ["measure_theory", "simple_func"]], ["add", "def", "ennreal_rat_embed", ["measure_theory", "simple_func"]], ["add", "theorem", "ennreal_rat_embed_encode", ["measure_theory", "simple_func"]], ["del", "theorem", "equiv_def", ["measure_theory", "simple_func"]], ["del", "theorem", "equiv_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "ext", ["measure_theory", "simple_func"]], ["del", "theorem", "finite_range", ["measure_theory", "simple_func"]], ["add", "theorem", "finset_sup_apply", ["measure_theory", "simple_func"]], ["add", "def", "integral", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_le_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "integral_sup_le", ["measure_theory", "simple_func"]], ["add", "theorem", "is_measurable_cut", ["measure_theory", "simple_func"]], ["add", "def", "ite", ["measure_theory", "simple_func"]], ["add", "theorem", "ite_apply", ["measure_theory", "simple_func"]], ["del", "def", "itg'", ["measure_theory", "simple_func"]], ["del", "theorem", "itg'_add", ["measure_theory", "simple_func"]], ["del", "theorem", "itg'_eq_sum", ["measure_theory", "simple_func"]], ["del", "theorem", "itg'_eq_sum_of_subset", ["measure_theory", "simple_func"]], ["del", "theorem", "itg'_indicator", ["measure_theory", "simple_func"]], ["del", "theorem", "itg'_mono", ["measure_theory", "simple_func"]], ["del", "theorem", "itg'_zero", ["measure_theory", "simple_func"]], ["del", "def", "itg", ["measure_theory", "simple_func"]], ["del", "theorem", "itg_add", ["measure_theory", "simple_func"]], ["del", "theorem", "itg_mono", ["measure_theory", "simple_func"]], ["del", "theorem", "itg_zero", ["measure_theory", "simple_func"]], ["del", "theorem", "le_antisymm", ["measure_theory", "simple_func"]], ["del", "theorem", "le_antisymm_iff", ["measure_theory", "simple_func"]], ["del", "theorem", "le_def", ["measure_theory", "simple_func"]], ["del", "theorem", "le_iff_exists_add", ["measure_theory", "simple_func"]], ["del", "theorem", "le_of_multiset_le", ["measure_theory", "simple_func"]], ["del", "def", "lift₂", ["measure_theory", "simple_func"]], ["del", "theorem", "lift₂_finite", ["measure_theory", "simple_func"]], ["del", "theorem", "lift₂_is_measurable", ["measure_theory", "simple_func"]], ["del", "theorem", "lift₂_val", ["measure_theory", "simple_func"]], ["add", "theorem", "lintegral_eq_integral", ["measure_theory", "simple_func"]], ["add", "def", "map", ["measure_theory", "simple_func"]], ["add", "theorem", "map_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "map_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "map_map", ["measure_theory", "simple_func"]], ["mod", "theorem", "measurable", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_range", ["measure_theory", "simple_func"]], ["add", "theorem", "mem_restrict_range", ["measure_theory", "simple_func"]], ["add", "theorem", "monotone_approx", ["measure_theory", "simple_func"]], ["add", "theorem", "monotone_eapprox", ["measure_theory", "simple_func"]], ["add", "theorem", "mul_apply", ["measure_theory", "simple_func"]], ["del", "def", "of_fun", ["measure_theory", "simple_func"]], ["del", "theorem", "of_fun_apply", ["measure_theory", "simple_func"]], ["del", "theorem", "of_fun_val", ["measure_theory", "simple_func"]], ["add", "def", "pair", ["measure_theory", "simple_func"]], ["add", "theorem", "pair_apply", ["measure_theory", "simple_func"]], ["mod", "theorem", "preimage_measurable", ["measure_theory", "simple_func"]], ["add", "theorem", "range_const", ["measure_theory", "simple_func"]], ["add", "theorem", "range_map", ["measure_theory", "simple_func"]], ["add", "def", "restrict", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_const_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_integral", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_preimage'", ["measure_theory", "simple_func"]], ["add", "theorem", "restrict_preimage", ["measure_theory", "simple_func"]], ["add", "def", "seq", ["measure_theory", "simple_func"]], ["del", "theorem", "sub_add_cancel_of_le", ["measure_theory", "simple_func"]], ["del", "theorem", "sub_val", ["measure_theory", "simple_func"]], ["add", "theorem", "sup_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "sup_eq_map₂", ["measure_theory", "simple_func"]], ["add", "theorem", "supr_approx_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "supr_eapprox_apply", ["measure_theory", "simple_func"]], ["del", "def", "to_fun", ["measure_theory", "simple_func"]], ["add", "theorem", "zero_integral", ["measure_theory", "simple_func"]], ["del", "def", "simple_func", ["measure_theory"]], ["del", "theorem", "simple_itg_eq", ["measure_theory"]], ["del", "def", "upper_itg", ["measure_theory"]], ["del", "theorem", "upper_itg_add_le", ["measure_theory"]], ["del", "def", "upper_itg_def_subtype", ["measure_theory"]], ["del", "theorem", "upper_itg_simple", ["measure_theory"]], ["mod", "structure", "{u", ["measure_theory"]], ["add", "theorem", "supr_eq_of_tendsto", []]]}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_const", []]]}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": [["add", "theorem", "volume_bUnion_finset", ["measure_theory"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "image_bind_filter_eq", ["finset"]], ["add", "theorem", "inf_eq_infi", ["finset"]], ["add", "theorem", "sup_eq_supr", ["finset"]]]}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": [["add", "theorem", "coe_nat", ["ennreal"]], ["add", "theorem", "coe_to_nnreal_le_self", ["ennreal"]], ["add", "theorem", "le_of_forall_lt_one_mul_lt", ["ennreal"]], ["add", "theorem", "mul_inv_cancel", ["ennreal"]], ["add", "theorem", "mul_le_if_le_inv", ["ennreal"]], ["add", "theorem", "supr_coe_nat", ["ennreal"]]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["add", "theorem", "le_of_forall_lt_one_mul_lt", ["nnreal"]], ["add", "theorem", "lt_inv_iff_mul_lt", ["nnreal"]], ["add", "theorem", "mul_le_if_le_inv", ["nnreal"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "compl_set_of", ["set"]], ["add", "theorem", "exists_range_iff", ["set"]]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_eq_bot", ["lattice"]], ["mod", "theorem", "infi_eq_bot", ["lattice"]], ["add", "theorem", "supr_eq_bot", ["lattice"]], ["add", "theorem", "supr_eq_top", ["lattice"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "tendsto_at_top", ["filter"]]]}]}, {"timestamp": 1539211806, "sha": "a25e4a81", "message": "feat(analysis/measure_theory/integration): lebesgue integration [WIP]", "changes": [{"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": [["add", "theorem", "borel_eq_generate_Iio", ["measure_theory"]], ["add", "theorem", "borel_eq_generate_Ioi", ["measure_theory"]], ["add", "theorem", "infi", ["measure_theory", "measurable"]], ["add", "theorem", "is_glb", ["measure_theory", "measurable"]], ["add", "theorem", "is_lub", ["measure_theory", "measurable"]], ["add", "theorem", "supr", ["measure_theory", "measurable"]]]}, {"oldPath": null, "newPath": "analysis/measure_theory/integration.lean", "changes": [["add", "def", "size", ["measure_theory", "indicator"]], ["add", "def", "to_fun", ["measure_theory", "indicator"]], ["add", "theorem", "to_fun_val", ["measure_theory", "indicator"]], ["add", "structure", "indicator", ["measure_theory"]], ["add", "def", "bind", ["measure_theory", "simple_func'"]], ["add", "theorem", "bind_apply", ["measure_theory", "simple_func'"]], ["add", "theorem", "bind_const", ["measure_theory", "simple_func'"]], ["add", "theorem", "bind_itg", ["measure_theory", "simple_func'"]], ["add", "theorem", "bind_sum_measure", ["measure_theory", "simple_func'"]], ["add", "theorem", "coe_def", ["measure_theory", "simple_func'"]], ["add", "theorem", "coe_le_coe", ["measure_theory", "simple_func'"]], ["add", "def", "const", ["measure_theory", "simple_func'"]], ["add", "theorem", "const_apply", ["measure_theory", "simple_func'"]], ["add", "theorem", "ext", ["measure_theory", "simple_func'"]], ["add", "theorem", "is_measurable_cut", ["measure_theory", "simple_func'"]], ["add", "def", "ite", ["measure_theory", "simple_func'"]], ["add", "theorem", "ite_apply", ["measure_theory", "simple_func'"]], ["add", "def", "itg", ["measure_theory", "simple_func'"]], ["add", "theorem", "le_def", ["measure_theory", "simple_func'"]], ["add", "def", "map", ["measure_theory", "simple_func'"]], ["add", "theorem", "map_apply", ["measure_theory", "simple_func'"]], ["add", "theorem", "map_itg", ["measure_theory", "simple_func'"]], ["add", "theorem", "measurable", ["measure_theory", "simple_func'"]], ["add", "theorem", "mem_range", ["measure_theory", "simple_func'"]], ["add", "def", "pair", ["measure_theory", "simple_func'"]], ["add", "theorem", "preimage_measurable", ["measure_theory", "simple_func'"]], ["add", "def", "restrict", ["measure_theory", "simple_func'"]], ["add", "theorem", "restrict_apply", ["measure_theory", "simple_func'"]], ["add", "theorem", "restrict_preimage", ["measure_theory", "simple_func'"]], ["add", "def", "seq", ["measure_theory", "simple_func'"]], ["add", "theorem", "seq_itg", ["measure_theory", "simple_func'"]], ["add", "theorem", "add_congr", ["measure_theory", "simple_func"]], ["add", "theorem", "add_sub_cancel_of_le", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_add", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_def", ["measure_theory", "simple_func"]], ["add", "theorem", "coe_le_coe", ["measure_theory", "simple_func"]], ["add", "theorem", "equiv_def", ["measure_theory", "simple_func"]], ["add", "theorem", "equiv_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "finite_range", ["measure_theory", "simple_func"]], ["add", "def", "itg'", ["measure_theory", "simple_func"]], ["add", "theorem", "itg'_add", ["measure_theory", "simple_func"]], ["add", "theorem", "itg'_eq_sum", ["measure_theory", "simple_func"]], ["add", "theorem", "itg'_eq_sum_of_subset", ["measure_theory", "simple_func"]], ["add", "theorem", "itg'_indicator", ["measure_theory", "simple_func"]], ["add", "theorem", "itg'_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "itg'_zero", ["measure_theory", "simple_func"]], ["add", "def", "itg", ["measure_theory", "simple_func"]], ["add", "theorem", "itg_add", ["measure_theory", "simple_func"]], ["add", "theorem", "itg_mono", ["measure_theory", "simple_func"]], ["add", "theorem", "itg_zero", ["measure_theory", "simple_func"]], ["add", "theorem", "le_antisymm", ["measure_theory", "simple_func"]], ["add", "theorem", "le_antisymm_iff", ["measure_theory", "simple_func"]], ["add", "theorem", "le_def", ["measure_theory", "simple_func"]], ["add", "theorem", "le_iff_exists_add", ["measure_theory", "simple_func"]], ["add", "theorem", "le_of_multiset_le", ["measure_theory", "simple_func"]], ["add", "def", "lift₂", ["measure_theory", "simple_func"]], ["add", "theorem", "lift₂_finite", ["measure_theory", "simple_func"]], ["add", "theorem", "lift₂_is_measurable", ["measure_theory", "simple_func"]], ["add", "theorem", "lift₂_val", ["measure_theory", "simple_func"]], ["add", "theorem", "measurable", ["measure_theory", "simple_func"]], ["add", "def", "of_fun", ["measure_theory", "simple_func"]], ["add", "theorem", "of_fun_apply", ["measure_theory", "simple_func"]], ["add", "theorem", "of_fun_val", ["measure_theory", "simple_func"]], ["add", "theorem", "preimage_measurable", ["measure_theory", "simple_func"]], ["add", "theorem", "sub_add_cancel_of_le", ["measure_theory", "simple_func"]], ["add", "theorem", "sub_val", ["measure_theory", "simple_func"]], ["add", "def", "to_fun", ["measure_theory", "simple_func"]], ["add", "def", "simple_func", ["measure_theory"]], ["add", "theorem", "simple_itg_eq", ["measure_theory"]], ["add", "def", "upper_itg", ["measure_theory"]], ["add", "theorem", "upper_itg_add_le", ["measure_theory"]], ["add", "def", "upper_itg_def_subtype", ["measure_theory"]], ["add", "theorem", "upper_itg_simple", ["measure_theory"]], ["add", "structure", "{u", ["measure_theory"]]]}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": [["del", "def", "lebesgue", ["measure_theory"]], ["del", "theorem", "lebesgue_Icc", ["measure_theory"]], ["del", "theorem", "lebesgue_Ico", ["measure_theory"]], ["del", "theorem", "lebesgue_Ioo", ["measure_theory"]], ["del", "theorem", "lebesgue_singleton", ["measure_theory"]], ["mod", "theorem", "lebesgue_to_outer_measure", ["measure_theory"]], ["del", "theorem", "lebesgue_val", ["measure_theory"]], ["add", "theorem", "volume_Icc", ["measure_theory", "real"]], ["add", "theorem", "volume_Ico", ["measure_theory", "real"]], ["add", "theorem", "volume_Ioo", ["measure_theory", "real"]], ["add", "theorem", "volume_singleton", ["measure_theory", "real"]], ["add", "theorem", "volume_val", ["measure_theory", "real"]]]}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "Inter_Prop", ["is_measurable"]], ["add", "theorem", "Union_Prop", ["is_measurable"]], ["add", "theorem", "const", ["is_measurable"]], ["add", "theorem", "univ", ["is_measurable"]], ["del", "theorem", "is_measurable_univ", []]]}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": [["add", "def", "a_e", ["measure_theory", "measure"]], ["mod", "theorem", "measure_sUnion", ["measure_theory"]], ["add", "def", "volume", ["measure_theory"]], ["add", "theorem", "volume_Union", ["measure_theory"]], ["add", "theorem", "volume_Union_le", ["measure_theory"]], ["add", "theorem", "volume_Union_null", ["measure_theory"]], ["add", "theorem", "volume_bUnion", ["measure_theory"]], ["add", "theorem", "volume_diff", ["measure_theory"]], ["add", "theorem", "volume_empty", ["measure_theory"]], ["add", "theorem", "volume_mono", ["measure_theory"]], ["add", "theorem", "volume_mono_null", ["measure_theory"]], ["add", "theorem", "volume_sUnion", ["measure_theory"]], ["add", "theorem", "volume_union", ["measure_theory"]], ["add", "theorem", "volume_union_le", ["measure_theory"]], ["add", "theorem", "volume_union_null", ["measure_theory"]]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_open_Union_countable", ["topological_space"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_subset_range", ["set"]], ["add", "theorem", "preimage_image_preimage", ["set"]], ["add", "theorem", "preimage_inter_range", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["mod", "theorem", "finite_bUnion", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "bUnion_of_singleton", ["set"]], ["add", "theorem", "bUnion_subset_Union", ["set"]], ["add", "theorem", "preimage_bUnion", ["set"]]]}, {"oldPath": "order/bounds.lean", "newPath": "order/bounds.lean", "changes": [["mod", "theorem", "is_glb_Inf", []], ["add", "theorem", "is_glb_lt_iff", []], ["mod", "theorem", "is_lub_Sup", []], ["add", "theorem", "is_lub_le_iff", []], ["add", "theorem", "le_is_glb_iff", []], ["add", "theorem", "lower_bounds_mono", []], ["add", "theorem", "lt_is_lub_iff", []], ["add", "theorem", "upper_bounds_mono", []]]}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": [["add", "theorem", "preimage_equivalence", []]]}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1539176004, "sha": "4dbe0cdf", "message": "doc(elan): further improvements to installation instructions (#412) [ci-skip]", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1539144294, "sha": "979e2383", "message": "fix(*): fix build continued", "changes": [{"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": []}, {"oldPath": "set_theory/lists.lean", "newPath": "set_theory/lists.lean", "changes": []}]}, {"timestamp": 1539142038, "sha": "1a4156da", "message": "fix(data/nat): fix build", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "coe_nat_nonneg", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/nat/choose.lean", "newPath": "data/nat/choose.lean", "changes": []}]}, {"timestamp": 1539140589, "sha": "fedee983", "message": "feat(data/nat/basic): a few choiceless proofs\nnot sure I can take this much farther without modifying core...", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "eq_or_lt_of_le", ["decidable"]], ["add", "theorem", "le_iff_le_iff_lt_iff_lt", ["decidable"]], ["add", "theorem", "le_iff_lt_or_eq", ["decidable"]], ["add", "theorem", "le_imp_le_iff_lt_imp_lt", ["decidable"]], ["add", "theorem", "le_imp_le_of_lt_imp_lt", ["decidable"]], ["add", "theorem", "le_of_not_lt", ["decidable"]], ["add", "theorem", "le_or_lt", ["decidable"]], ["add", "theorem", "lt_or_eq_of_le", ["decidable"]], ["add", "theorem", "lt_or_gt_of_ne", ["decidable"]], ["add", "theorem", "lt_or_le", ["decidable"]], ["add", "theorem", "lt_trichotomy", ["decidable"]], ["add", "theorem", "ne_iff_lt_or_gt", ["decidable"]], ["add", "theorem", "not_lt", ["decidable"]], ["add", "theorem", "le_imp_le_of_lt_imp_lt", []], ["add", "theorem", "lt_iff_lt_of_le_iff_le'", []], ["add", "theorem", "lt_iff_lt_of_le_iff_le", []], ["add", "theorem", "lt_iff_not_ge'", []], ["add", "theorem", "lt_imp_lt_of_le_imp_le", []], ["add", "theorem", "lt_of_le_of_ne'", []], ["add", "theorem", "lt_of_not_ge'", []], ["mod", "theorem", "not_le", []]]}, {"oldPath": "algebra/ordered_field.lean", "newPath": "algebra/ordered_field.lean", "changes": []}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_le_mul_left", ["decidable"]], ["add", "theorem", "mul_le_mul_right", ["decidable"]]]}, {"oldPath": "computability/partrec.lean", "newPath": "computability/partrec.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "div_lt_iff_lt_mul'", ["nat"]], ["add", "theorem", "div_mul_le_self'", ["nat"]], ["add", "theorem", "le_div_iff_mul_le'", ["nat"]]]}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1539140494, "sha": "1daf4a81", "message": "fix(data/set/lattice): fixing simp lemmas for set monad", "changes": [{"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["mod", "theorem", "fmap_eq_image", ["set"]], ["mod", "theorem", "mem_seq_iff", ["set"]], ["mod", "theorem", "pure_def", ["set"]], ["mod", "theorem", "seq_eq_set_seq", ["set"]]]}]}, {"timestamp": 1539125955, "sha": "d8672405", "message": "feat(data/set/finite): finiteness of set monad ops", "changes": [{"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_bUnion", ["set"]], ["add", "theorem", "finite_bind", ["set"]], ["add", "theorem", "finite_map", ["set"]], ["add", "theorem", "finite_pure", ["set"]], ["add", "theorem", "finite_seq", ["set"]], ["add", "def", "fintype_bUnion", ["set"]], ["add", "def", "fintype_bind", ["set"]], ["add", "def", "fintype_seq", ["set"]]]}]}, {"timestamp": 1539047655, "sha": "5c209edb", "message": "fix(linear_algebra/dimension): fix build", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "linear_algebra/dimension.lean", "newPath": "linear_algebra/dimension.lean", "changes": []}]}, {"timestamp": 1539011871, "sha": "2c116419", "message": "refactor(data/polynomial): consistently use coeff not apply (#409)", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["del", "theorem", "C_apply", ["polynomial"]], ["del", "theorem", "C_apply_zero", ["polynomial"]], ["del", "theorem", "C_mul_apply", ["polynomial"]], ["del", "theorem", "X_apply_one", ["polynomial"]], ["del", "theorem", "X_pow_apply", ["polynomial"]], ["del", "theorem", "add_apply", ["polynomial"]], ["add", "theorem", "apply_eq_coeff", ["polynomial"]], ["del", "theorem", "apply_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["mod", "def", "coeff", ["polynomial"]], ["mod", "theorem", "coeff_C", ["polynomial"]], ["add", "theorem", "coeff_C_mul", ["polynomial"]], ["add", "theorem", "coeff_C_zero", ["polynomial"]], ["del", "theorem", "coeff_X", ["polynomial"]], ["add", "theorem", "coeff_X_one", ["polynomial"]], ["mod", "theorem", "coeff_add", ["polynomial"]], ["add", "theorem", "coeff_derivative", ["polynomial"]], ["add", "theorem", "coeff_eq_zero_of_degree_lt", ["polynomial"]], ["mod", "theorem", "coeff_is_linear", ["polynomial"]], ["add", "theorem", "coeff_mul_degree_add_degree", ["polynomial"]], ["add", "theorem", "coeff_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["add", "theorem", "coeff_neg", ["polynomial"]], ["add", "theorem", "coeff_one_zero", ["polynomial"]], ["add", "theorem", "coeff_single", ["polynomial"]], ["add", "theorem", "coeff_sum", ["polynomial"]], ["mod", "theorem", "degree_le_degree", ["polynomial"]], ["del", "theorem", "derivative_apply", ["polynomial"]], ["mod", "theorem", "eq_C_of_degree_le_zero", ["polynomial"]], ["del", "theorem", "eq_zero_of_degree_lt", ["polynomial"]], ["mod", "theorem", "ext", ["polynomial"]], ["mod", "theorem", "le_degree_of_ne_zero", ["polynomial"]], ["mod", "theorem", "le_nat_degree_of_ne_zero", ["polynomial"]], ["mod", "def", "leading_coeff", ["polynomial"]], ["del", "theorem", "mul_apply_degree_add_degree", ["polynomial"]], ["del", "theorem", "neg_apply", ["polynomial"]], ["del", "theorem", "one_apply_zero", ["polynomial"]], ["add", "def", "has_coe_to_fun", ["polynomial", "polynomial"]], ["del", "theorem", "zero_apply", ["polynomial"]]]}]}, {"timestamp": 1539010289, "sha": "a694628c", "message": "fix(tactic/rcases): declare ? token", "changes": [{"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}]}, {"timestamp": 1539009013, "sha": "3aeb64ca", "message": "refactor(*): touching up proofs from 'faster' branch", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["del", "theorem", "inv_sub_inv_eq", []]]}, {"oldPath": "algebra/gcd_domain.lean", "newPath": "algebra/gcd_domain.lean", "changes": [["mod", "theorem", "dvd_lcm_left", []], ["mod", "theorem", "dvd_lcm_right", []], ["mod", "theorem", "lcm_dvd_iff", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["mod", "theorem", "neg_one_pow_eq_or", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "add_eq_zero_iff'", []], ["del", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg'", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "card_insert_of_not_mem", ["finset"]], ["mod", "theorem", "coe_empty", ["finset"]], ["mod", "theorem", "coe_singleton", ["finset"]], ["mod", "theorem", "fold_singleton", ["finset"]], ["mod", "theorem", "max_singleton'", ["finset"]], ["mod", "theorem", "max_singleton", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "min_empty", ["finset"]], ["mod", "theorem", "min_singleton", ["finset"]], ["mod", "theorem", "to_finset_card_of_nodup", ["list"]]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["mod", "theorem", "mem_support_iff", ["finsupp"]], ["add", "theorem", "not_mem_support_iff", ["finsupp"]], ["mod", "theorem", "single_apply", ["finsupp"]], ["mod", "theorem", "single_eq_of_ne", ["finsupp"]], ["mod", "theorem", "single_eq_same", ["finsupp"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "count_singleton", ["list"]], ["mod", "theorem", "forall_mem_nil", ["list"]], ["mod", "theorem", "join_eq_nil", ["list"]], ["mod", "theorem", "not_exists_mem_nil", ["list"]], ["mod", "theorem", "take_zero", ["list"]], ["mod", "theorem", "to_list_nodup", ["option"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "succ_inj'", ["nat"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["mod", "theorem", "nat_degree_zero", ["polynomial"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "sInter_pair", ["set"]], ["add", "theorem", "sUnion_pair", ["set"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": [["mod", "theorem", "bdd_above_finite", []], ["mod", "theorem", "bdd_above_subset", []], ["mod", "theorem", "bdd_below_subset", []]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1539009012, "sha": "f02a88b8", "message": "chore(*): replace rec_on with induction and match for readability", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1539009012, "sha": "cc2e1ece", "message": "refactor(*): making mathlib faster again", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": []}, {"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "sum_le_zero'", ["finset"]], ["mod", "theorem", "sum_le_zero", ["finset"]], ["mod", "theorem", "zero_le_sum'", ["finset"]], ["mod", "theorem", "zero_le_sum", ["finset"]]]}, {"oldPath": "algebra/char_zero.lean", "newPath": "algebra/char_zero.lean", "changes": []}, {"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": []}, {"oldPath": "algebra/field_power.lean", "newPath": "algebra/field_power.lean", "changes": []}, {"oldPath": "algebra/gcd_domain.lean", "newPath": "algebra/gcd_domain.lean", "changes": []}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["mod", "theorem", "bit1_zero", []], ["mod", "theorem", "divp_one", []], ["mod", "theorem", "divp_self", []], ["mod", "theorem", "is_conj_refl", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["mod", "theorem", "smul_eq_mul'", ["add_monoid"]], ["mod", "theorem", "gpow_neg_one", []], ["mod", "theorem", "inv_pow", []], ["mod", "theorem", "prod_repeat", ["list"]], ["mod", "theorem", "mul_pow", []], ["mod", "theorem", "neg_one_gsmul", []], ["mod", "theorem", "neg_one_pow_eq_or", []], ["mod", "theorem", "one_div_pow", []], ["mod", "theorem", "pow_mul", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "is_closed_empty", []], ["mod", "theorem", "is_closed_univ", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": []}, {"oldPath": "data/complex/basic.lean", "newPath": "data/complex/basic.lean", "changes": [["mod", "theorem", "conj_I", ["complex"]], ["mod", "theorem", "conj_neg", ["complex"]], ["mod", "theorem", "conj_of_real", ["complex"]], ["mod", "theorem", "conj_one", ["complex"]], ["mod", "theorem", "conj_zero", ["complex"]], ["mod", "theorem", "norm_sq_I", ["complex"]], ["mod", "theorem", "norm_sq_one", ["complex"]], ["mod", "theorem", "norm_sq_zero", ["complex"]], ["mod", "theorem", "of_real_neg", ["complex"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "coe_image", ["finset"]], ["mod", "theorem", "coe_inter", ["finset"]], ["mod", "theorem", "coe_union", ["finset"]], ["mod", "theorem", "empty_inter", ["finset"]], ["mod", "theorem", "empty_union", ["finset"]], ["mod", "theorem", "image_id", ["finset"]], ["mod", "theorem", "image_to_finset", ["finset"]], ["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "inter_assoc", ["finset"]], ["mod", "theorem", "inter_comm", ["finset"]], ["mod", "theorem", "inter_distrib_left", ["finset"]], ["mod", "theorem", "inter_distrib_right", ["finset"]], ["mod", "theorem", "inter_empty", ["finset"]], ["mod", "theorem", "inter_left_comm", ["finset"]], ["mod", "theorem", "inter_right_comm", ["finset"]], ["mod", "theorem", "inter_self", ["finset"]], ["mod", "theorem", "map_refl", ["finset"]], ["mod", "theorem", "max_empty", ["finset"]], ["mod", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["mod", "theorem", "mem_image", ["finset"]], ["mod", "theorem", "mem_insert_of_mem", ["finset"]], ["mod", "theorem", "mem_insert_self", ["finset"]], ["mod", "theorem", "mem_map", ["finset"]], ["mod", "theorem", "mem_singleton_self", ["finset"]], ["mod", "theorem", "mem_union_left", ["finset"]], ["mod", "theorem", "mem_union_right", ["finset"]], ["mod", "theorem", "ne_of_mem_erase", ["finset"]], ["mod", "theorem", "not_mem_erase", ["finset"]], ["mod", "theorem", "not_mem_singleton", ["finset"]], ["mod", "theorem", "range_succ", ["finset"]], ["mod", "theorem", "sigma_mono", ["finset"]], ["mod", "theorem", "singleton_inter_of_mem", ["finset"]], ["mod", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["mod", "theorem", "union_comm", ["finset"]], ["mod", "theorem", "union_distrib_left", ["finset"]], ["mod", "theorem", "union_distrib_right", ["finset"]], ["mod", "theorem", "union_empty", ["finset"]], ["mod", "theorem", "union_idempotent", ["finset"]], ["mod", "theorem", "union_right_comm", ["finset"]], ["mod", "theorem", "union_self", ["finset"]]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "concat_cons", ["list"]], ["mod", "theorem", "index_of_eq_length", ["list"]], ["mod", "theorem", "nil_diff", ["list"]], ["mod", "theorem", "prefix_concat", ["list"]], ["mod", "theorem", "take_zero", ["list"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["mod", "theorem", "C_0", ["polynomial"]]]}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "singleton_mem_pure_sets", ["filter"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["mod", "theorem", "aleph_zero", ["cardinal"]], ["mod", "theorem", "lift_type_fin", ["ordinal"]], ["mod", "theorem", "one_lt_omega", ["ordinal"]]]}, {"oldPath": "tactic/squeeze.lean", "newPath": "tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1538971644, "sha": "136ef254", "message": "feat(ring_theory/determinants): det is a monoid_hom (#406)", "changes": [{"oldPath": "ring_theory/determinant.lean", "newPath": "ring_theory/determinant.lean", "changes": []}]}, {"timestamp": 1538968048, "sha": "61d87760", "message": "fix(ring_theory/determinant): remove #print (#405)", "changes": [{"oldPath": "ring_theory/determinant.lean", "newPath": "ring_theory/determinant.lean", "changes": []}]}, {"timestamp": 1538959770, "sha": "13febeec", "message": "fix(group_theory/perm): fix to_additive use", "changes": [{"oldPath": "group_theory/perm.lean", "newPath": "group_theory/perm.lean", "changes": [["add", "theorem", "sum_univ_perm", ["finset"]]]}]}, {"timestamp": 1538947740, "sha": "73f51b8e", "message": "feat(ring_theory/determinant): determinants (#404)\n* clean up determinant PR\n* remove unnecessary type annotations\n* update copyright\n* add additive version of prod_attach_univ", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "theorem", "swap_apply_self", ["equiv"]], ["add", "theorem", "swap_mul_self", ["equiv"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "prod_attach_univ", ["finset"]]]}, {"oldPath": "group_theory/perm.lean", "newPath": "group_theory/perm.lean", "changes": [["add", "theorem", "prod_univ_perm", ["finset"]]]}, {"oldPath": null, "newPath": "ring_theory/determinant.lean", "changes": [["add", "theorem", "det_diagonal", ["matrix"]], ["add", "theorem", "det_mul", ["matrix"]], ["add", "theorem", "det_mul_aux", ["matrix"]], ["add", "theorem", "det_one", ["matrix"]], ["add", "theorem", "det_zero", ["matrix"]]]}]}, {"timestamp": 1538947640, "sha": "04d8c15f", "message": "feat(solve_by_elim): improve backtracking behaviour when there are multiple subgoals (#393)", "changes": [{"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tests/solve_by_elim.lean", "newPath": "tests/solve_by_elim.lean", "changes": []}]}, {"timestamp": 1538904144, "sha": "8c68fd17", "message": "feat(tactic/auto_cases): split `iff`s into two implications (#344)\n* feat(tactic/auto_cases): split `iff`s into two implications\n* add Johan's test case", "changes": [{"oldPath": "tactic/auto_cases.lean", "newPath": "tactic/auto_cases.lean", "changes": []}, {"oldPath": "tests/tidy.lean", "newPath": "tests/tidy.lean", "changes": [["add", "def", "g", ["tidy", "test"]]]}]}, {"timestamp": 1538903860, "sha": "49fea313", "message": "feat(tactics/solve_by_elim): add or remove lemmas from the set to apply, with `simp`-like parsing (#382)\n* feat(tactic/solve_by_elim): modify set of lemmas to apply using `simp`-like syntax\n* update to syntax: use `with attr` to request all lemmas tagged with an attribute\n* use non-interactive solve_by_elim in tfae\n* fix parser", "changes": [{"oldPath": "category_theory/examples/rings.lean", "newPath": "category_theory/examples/rings.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/tfae.lean", "newPath": "tactic/tfae.lean", "changes": []}, {"oldPath": "tactic/wlog.lean", "newPath": "tactic/wlog.lean", "changes": []}, {"oldPath": null, "newPath": "tests/solve_by_elim.lean", "changes": [["add", "def", "f", []]]}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1538903560, "sha": "3b091519", "message": "feat(tactic/squeeze): squeeze_simp tactic (#396)\n* feat(tactic/squeeze): just the squeeze_simp tactic\n* docs(tactic/squeeze): add header comments and documentation\n* Provide a means for other tactics to use squeeze", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/squeeze.lean", "changes": []}]}, {"timestamp": 1538903389, "sha": "c1f13c03", "message": "fix(data/int.basic): rename sub_one_le_iff (#394)", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "dvd_of_pow_dvd", ["int"]], ["del", "theorem", "sub_one_le_iff", ["int"]], ["add", "theorem", "sub_one_lt_iff", ["int"]]]}]}, {"timestamp": 1538903368, "sha": "d1e34fda", "message": "fix(algebra/big_operators): remove `comm_monoid` assumption from `sum_nat_cast` (#401)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}]}, {"timestamp": 1538903332, "sha": "276c4723", "message": "fix(algebra/ring): delete duplicate lemma zero_dvd_iff_eq_zero (#399)", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["del", "theorem", "zero_dvd_iff_eq_zero", []]]}]}, {"timestamp": 1538896574, "sha": "e4ce4691", "message": "fix(docs/elan): fix homebrew instructions for macOS (#395)", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1538896556, "sha": "64431ae8", "message": "doc(hole/instance_stub) (#400)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "docs/holes.md", "changes": []}]}, {"timestamp": 1538894155, "sha": "46a37a73", "message": "feat(hole/instance_stub): tool support for providing snippets (#397)", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1538879298, "sha": "0ddb58cf", "message": "workaround(tactic/tfae): tfae is broken, comment out its tests (#398)", "changes": [{"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1538865660, "sha": "2bf7b4bc", "message": "refactor(tactic/tfae): minor tfae modifications", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "tactic/tfae.lean", "newPath": "tactic/tfae.lean", "changes": []}]}, {"timestamp": 1538865232, "sha": "568e405d", "message": "feat(data/finset): embedding properties of finset.map", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "def", "map_embedding", ["finset"]], ["add", "theorem", "map_embedding_apply", ["finset"]], ["add", "theorem", "map_inj", ["finset"]], ["mod", "theorem", "map_subset_map", ["finset"]], ["add", "theorem", "mem_map'", ["finset"]], ["mod", "theorem", "mem_map_of_mem", ["finset"]], ["add", "theorem", "antisymm_iff", ["finset", "subset"]]]}]}, {"timestamp": 1538705936, "sha": "74f52f1e", "message": "Expand and contract fin (#387)", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "nat_add", ["fin"]], ["add", "def", "lower_left", []], ["add", "def", "lower_right", []], ["add", "def", "raise_nat", []]]}]}, {"timestamp": 1538665699, "sha": "9ec21e44", "message": "perf(tactic/scc): produce smaller proofs", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "tfae_of_forall", ["list"]]]}, {"oldPath": "tactic/scc.lean", "newPath": "tactic/scc.lean", "changes": []}, {"oldPath": "tactic/tfae.lean", "newPath": "tactic/tfae.lean", "changes": []}]}, {"timestamp": 1538665699, "sha": "025b73ab", "message": "chore(tactic/scc): small cleanup", "changes": [{"oldPath": "tactic/scc.lean", "newPath": "tactic/scc.lean", "changes": []}]}, {"timestamp": 1538665699, "sha": "ff12b355", "message": "docs(tactic/tfae): move doc string", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}]}, {"timestamp": 1538665699, "sha": "d935519f", "message": "docs(tactic/tfae): fix oversights", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/scc.lean", "newPath": "tactic/scc.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1538665699, "sha": "b7d314f3", "message": "feat(tactic/tfae): tactic for decomposing a proof into a set of\nequivalent propositions which can be proved equivalent by cyclical\nimplications", "changes": [{"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "def", "mmap_accuml", ["list"]], ["add", "def", "mmap_accumr", ["list"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "def", "last'", ["list"]], ["add", "theorem", "last'_mem", ["list"]], ["add", "theorem", "out", ["list", "tfae"]], ["add", "def", "tfae", ["list"]], ["add", "theorem", "tfae_cons_cons", ["list"]], ["add", "theorem", "tfae_cons_of_mem", ["list"]], ["add", "theorem", "tfae_nil", ["list"]], ["add", "theorem", "tfae_of_cycle", ["list"]], ["add", "theorem", "tfae_singleton", ["list"]]]}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "tactic/scc.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/tfae.lean", "changes": [["add", "inductive", "arrow", ["tactic", "tfae"]]]}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1538571285, "sha": "a243126e", "message": "chore(*): replace more axiom_of_choice, classical.some and classical.choice using the choose tactic", "changes": [{"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1538565890, "sha": "c1f9f2e2", "message": "refactor(tactics/interactive, *): rename choice to choose and change syntax; use chooose instead of cases of axiom_of_choice", "changes": [{"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "ring_theory/noetherian.lean", "newPath": "ring_theory/noetherian.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1538559054, "sha": "0cfbf5a7", "message": "feat(tactic/linarith): handle negations of linear hypotheses", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1538518647, "sha": "fff12f58", "message": "chore(analysis/topology): remove duplicate theorems interior_compl_eq and closure_compl_eq (as discovered by @kckennylau)", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "closure_compl", []], ["del", "theorem", "closure_compl_eq", []], ["mod", "theorem", "interior_compl", []], ["del", "theorem", "interior_compl_eq", []]]}]}, {"timestamp": 1538518439, "sha": "c2df6b1f", "message": "feat(tactics/interactive): add choice (closes #38)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1538493129, "sha": "b84e2dbb", "message": "feat(docs/theories): document padics development (close #337)\n(it hurts to write \"maths in lean\")", "changes": [{"oldPath": null, "newPath": "docs/theories/padics.md", "changes": []}]}, {"timestamp": 1538489314, "sha": "1562cc2c", "message": "feat(data/padics): use prime typeclass", "changes": [{"oldPath": null, "newPath": "analysis/polynomial.lean", "changes": [["add", "theorem", "continuous_eval", ["polynomial"]]]}, {"oldPath": "data/padics/hensel.lean", "newPath": "data/padics/hensel.lean", "changes": [["mod", "theorem", "hensels_lemma", []], ["mod", "theorem", "limit_zero_of_norm_tendsto_zero", []], ["mod", "theorem", "padic_polynomial_dist", []]]}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "data/padics/padic_integers.lean", "changes": [["mod", "def", "add", ["padic_int"]], ["mod", "theorem", "add_def", ["padic_int"]], ["mod", "theorem", "cast_pow", ["padic_int"]], ["del", "def", "cau_seq_lim", ["padic_int"]], ["del", "theorem", "cau_seq_lim_spec", ["padic_int"]], ["mod", "theorem", "coe_add", ["padic_int"]], ["mod", "theorem", "coe_coe", ["padic_int"]], ["mod", "theorem", "coe_mul", ["padic_int"]], ["mod", "theorem", "coe_neg", ["padic_int"]], ["mod", "theorem", "coe_one", ["padic_int"]], ["mod", "theorem", "coe_sub", ["padic_int"]], ["mod", "theorem", "coe_zero", ["padic_int"]], ["mod", "def", "inv", ["padic_int"]], ["mod", "theorem", "inv_mul", ["padic_int"]], ["mod", "def", "maximal_ideal", ["padic_int"]], ["mod", "theorem", "maximal_ideal_add", ["padic_int"]], ["mod", "theorem", "maximal_ideal_eq_nonunits", ["padic_int"]], ["mod", "theorem", "maximal_ideal_eq_or_univ_of_subset", ["padic_int"]], ["mod", "theorem", "maximal_ideal_mul", ["padic_int"]], ["mod", "theorem", "maximal_ideal_ne_univ", ["padic_int"]], ["mod", "theorem", "maximal_ideal_unique", ["padic_int"]], ["mod", "theorem", "mk_coe", ["padic_int"]], ["mod", "theorem", "mk_zero", ["padic_int"]], ["mod", "def", "mul", ["padic_int"]], ["mod", "theorem", "mul_def", ["padic_int"]], ["mod", "theorem", "mul_inv", ["padic_int"]], ["mod", "def", "neg", ["padic_int"]], ["del", "theorem", "tendsto_limit", ["padic_int"]], ["mod", "theorem", "val_eq_coe", ["padic_int"]], ["mod", "theorem", "zero_def", ["padic_int"]], ["mod", "def", "padic_int", []], ["mod", "theorem", "add_eq_max_of_ne", ["padic_norm_z"]], ["mod", "theorem", "eq_of_norm_add_lt_left", ["padic_norm_z"]], ["mod", "theorem", "eq_of_norm_add_lt_right", ["padic_norm_z"]], ["mod", "theorem", "le_one", ["padic_norm_z"]], ["mod", "theorem", "mul", ["padic_norm_z"]], ["mod", "theorem", "nonarchimedean", ["padic_norm_z"]], ["mod", "theorem", "norm_one", ["padic_norm_z"]], ["mod", "theorem", "one", ["padic_norm_z"]], ["mod", "theorem", "padic_norm_e_of_padic_int", ["padic_norm_z"]], ["mod", "theorem", "padic_norm_z_eq_padic_norm_e", ["padic_norm_z"]], ["mod", "theorem", "pow", ["padic_norm_z"]], ["mod", "def", "padic_norm_z", []]]}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": [["mod", "theorem", "add_eq_max_of_ne", ["padic_norm"]], ["mod", "theorem", "le_of_dvd", ["padic_norm"]], ["mod", "theorem", "triangle_ineq", ["padic_norm"]], ["mod", "theorem", "zero_of_padic_norm_eq_zero", ["padic_norm"]], ["mod", "def", "padic_norm", []]]}, {"oldPath": "data/padics/padic_numbers.lean", "newPath": "data/padics/padic_numbers.lean", "changes": [["mod", "theorem", "cast_eq_of_rat", ["padic"]], ["mod", "theorem", "cast_eq_of_rat_of_int", ["padic"]], ["mod", "theorem", "cast_eq_of_rat_of_nat", ["padic"]], ["del", "def", "cau_seq_lim", ["padic"]], ["del", "theorem", "cau_seq_lim_spec", ["padic"]], ["mod", "theorem", "complete'", ["padic"]], ["mod", "theorem", "const_equiv", ["padic"]], ["mod", "theorem", "exi_rat_seq_conv_cauchy", ["padic"]], ["mod", "def", "mk", ["padic"]], ["mod", "theorem", "mk_eq", ["padic"]], ["mod", "def", "of_rat", ["padic"]], ["mod", "theorem", "of_rat_add", ["padic"]], ["mod", "theorem", "of_rat_div", ["padic"]], ["mod", "theorem", "of_rat_eq", ["padic"]], ["mod", "theorem", "of_rat_mul", ["padic"]], ["mod", "theorem", "of_rat_neg", ["padic"]], ["mod", "theorem", "of_rat_one", ["padic"]], ["mod", "theorem", "of_rat_sub", ["padic"]], ["mod", "theorem", "of_rat_zero", ["padic"]], ["mod", "theorem", "padic_norm_e_lim_le", ["padic"]], ["mod", "theorem", "rat_dense'", ["padic"]], ["mod", "theorem", "rat_dense", ["padic"]], ["del", "theorem", "tendsto_limit", ["padic"]], ["mod", "def", "padic", []], ["mod", "theorem", "add_eq_max_of_ne'", ["padic_norm_e"]], ["mod", "theorem", "add_eq_max_of_ne", ["padic_norm_e"]], ["mod", "theorem", "defn", ["padic_norm_e"]], ["mod", "theorem", "eq_of_norm_add_lt_left", ["padic_norm_e"]], ["mod", "theorem", "eq_of_norm_add_lt_right", ["padic_norm_e"]], ["mod", "theorem", "eq_padic_norm'", ["padic_norm_e"]], ["mod", "theorem", "eq_padic_norm", ["padic_norm_e"]], ["mod", "theorem", "eq_rat_norm", ["padic_norm_e"]], ["mod", "theorem", "nonarchimedean'", ["padic_norm_e"]], ["mod", "theorem", "nonarchimedean", ["padic_norm_e"]], ["mod", "theorem", "norm_rat_le_one", ["padic_norm_e"]], ["mod", "def", "rat_norm", ["padic_norm_e"]], ["mod", "theorem", "sub_rev", ["padic_norm_e"]], ["mod", "theorem", "triangle_ineq", ["padic_norm_e"]], ["mod", "theorem", "zero_def", ["padic_norm_e"]], ["mod", "theorem", "zero_iff", ["padic_norm_e"]], ["mod", "def", "padic_norm_e", []], ["mod", "theorem", "add_eq_max_of_ne", ["padic_seq"]], ["mod", "theorem", "eq_zero_iff_equiv_zero", ["padic_seq"]], ["mod", "theorem", "equiv_zero_of_val_eq_of_equiv_zero", ["padic_seq"]], ["mod", "theorem", "lift_index_left", ["padic_seq"]], ["mod", "theorem", "lift_index_left_left", ["padic_seq"]], ["mod", "theorem", "lift_index_right", ["padic_seq"]], ["mod", "theorem", "ne_zero_iff_nequiv_zero", ["padic_seq"]], ["mod", "def", "norm", ["padic_seq"]], ["mod", "theorem", "norm_const", ["padic_seq"]], ["mod", "theorem", "norm_eq", ["padic_seq"]], ["mod", "theorem", "norm_eq_norm_app_of_nonzero", ["padic_seq"]], ["mod", "theorem", "norm_eq_of_add_equiv_zero", ["padic_seq"]], ["mod", "theorem", "norm_equiv", ["padic_seq"]], ["mod", "theorem", "norm_image", ["padic_seq"]], ["mod", "theorem", "norm_mul", ["padic_seq"]], ["mod", "theorem", "norm_neg", ["padic_seq"]], ["mod", "theorem", "norm_nonarchimedean", ["padic_seq"]], ["mod", "theorem", "norm_nonneg", ["padic_seq"]], ["mod", "theorem", "norm_nonzero_of_not_equiv_zero", ["padic_seq"]], ["mod", "theorem", "norm_one", ["padic_seq"]], ["mod", "theorem", "norm_zero_iff", ["padic_seq"]], ["mod", "theorem", "not_equiv_zero_const_of_nonzero", ["padic_seq"]], ["mod", "theorem", "not_lim_zero_const_of_nonzero", ["padic_seq"]], ["mod", "theorem", "stationary", ["padic_seq"]], ["mod", "def", "stationary_point", ["padic_seq"]], ["mod", "theorem", "stationary_point_spec", ["padic_seq"]], ["mod", "def", "padic_seq", []]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["del", "theorem", "continuous_eval", ["polynomial"]]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["mod", "theorem", "lim_add", ["real"]], ["mod", "theorem", "lim_const", ["real"]], ["mod", "theorem", "lim_eq_lim_of_equiv", ["real"]], ["mod", "theorem", "lim_mul_lim", ["real"]]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": [["add", "theorem", "lim_zero_sub_rev", ["cau_seq"]]]}, {"oldPath": "data/real/cau_seq_completion.lean", "newPath": "data/real/cau_seq_completion.lean", "changes": [["add", "theorem", "complete", ["cau_seq"]], ["add", "theorem", "lim_spec", ["cau_seq"]]]}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": [["mod", "theorem", "cau_filter_lim_spec", []], ["del", "theorem", "cau_seq_lim_spec", []], ["del", "theorem", "complete_space_of_cauchy_complete", []], ["add", "theorem", "le_nhds_cau_filter_lim", []], ["del", "theorem", "le_nhds_cau_seq_lim", []], ["mod", "theorem", "set_seq_of_cau_filter_monotone", []], ["add", "theorem", "tendsto_limit", []]]}]}, {"timestamp": 1538489314, "sha": "e6a1bc35", "message": "feat(data/real/cau_seq): relate cauchy sequence completeness and filter completeness", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": [["add", "theorem", "exists_nat_one_div_lt", []]]}, {"oldPath": "algebra/field_power.lean", "newPath": "algebra/field_power.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": [["add", "theorem", "tendsto_inverse_at_top_nhds_0_nat", []], ["add", "theorem", "tendsto_one_div_at_top_nhds_0_nat", []]]}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "data/padics/padic_integers.lean", "changes": [["mod", "def", "cau_seq_lim", ["padic_int"]], ["del", "theorem", "complete", ["padic_int"]]]}, {"oldPath": "data/padics/padic_numbers.lean", "newPath": "data/padics/padic_numbers.lean", "changes": [["mod", "def", "cau_seq_lim", ["padic"]], ["mod", "theorem", "cau_seq_lim_spec", ["padic"]], ["mod", "theorem", "padic_norm_e_lim_le", ["padic"]]]}, {"oldPath": "data/real/cau_seq_completion.lean", "newPath": "data/real/cau_seq_completion.lean", "changes": [["mod", "def", "Cauchy", ["cau_seq", "completion"]], ["mod", "theorem", "cau_seq_zero_ne_one", ["cau_seq", "completion"]]]}, {"oldPath": "data/real/cau_seq_filter.lean", "newPath": "data/real/cau_seq_filter.lean", "changes": [["add", "theorem", "cau_filter_lim_spec", []], ["add", "theorem", "cau_seq_lim_spec", []], ["add", "theorem", "cau_seq_of_cau_filter_mem_set_seq", []], ["add", "theorem", "complete_space_of_cauchy_complete", []], ["add", "theorem", "is_cau_seq_of_dist_tendsto_0", []], ["add", "theorem", "le_nhds_cau_seq_lim", []], ["add", "theorem", "mono_of_mono_succ", []], ["add", "theorem", "seq_of_cau_filter_is_cauchy'", []], ["add", "theorem", "seq_of_cau_filter_is_cauchy", []], ["add", "theorem", "seq_of_cau_filter_mem_set_seq", []], ["add", "def", "set_seq_of_cau_filter", []], ["add", "theorem", "set_seq_of_cau_filter_inhabited", []], ["add", "theorem", "set_seq_of_cau_filter_mem_sets", []], ["add", "theorem", "set_seq_of_cau_filter_monotone'", []], ["add", "theorem", "set_seq_of_cau_filter_monotone", []], ["add", "theorem", "set_seq_of_cau_filter_spec", []], ["add", "theorem", "tendsto_div", []]]}]}, {"timestamp": 1538489314, "sha": "e0b0c537", "message": "feat(data/padics): prove Hensel's lemma", "changes": [{"oldPath": "algebra/field_power.lean", "newPath": "algebra/field_power.lean", "changes": [["add", "theorem", "fpow_ge_one_of_nonneg", []], ["add", "theorem", "fpow_le_one_of_nonpos", []], ["add", "theorem", "fpow_neg", []], ["add", "theorem", "fpow_pos_of_pos", []], ["add", "theorem", "fpow_sub", []], ["add", "theorem", "one_lt_fpow", []], ["add", "theorem", "one_lt_pow", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "div_sq_cancel", []], ["add", "theorem", "neg_square", []], ["add", "theorem", "pow_le_pow_of_le_left", []], ["add", "theorem", "pow_le_pow_of_le_one", []], ["add", "theorem", "pow_lt_pow_of_lt_one", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_le_iff_le_one_left", []], ["add", "theorem", "mul_le_iff_le_one_right", []], ["add", "theorem", "mul_lt_iff_lt_one_left", []], ["add", "theorem", "mul_lt_iff_lt_one_right", []]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": [["add", "theorem", "tendsto_coe_iff", []], ["add", "theorem", "tendsto_pow_at_top_at_top_of_gt_1_nat", []]]}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": [["mod", "theorem", "norm_div", []], ["mod", "theorem", "norm_inv", []], ["mod", "theorem", "norm_one", []], ["add", "theorem", "norm_pow", []], ["add", "theorem", "norm_pow", ["normed_field"]]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "continuous_pow", []]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "sum_sub", ["finsupp"]]]}, {"oldPath": "data/int/modeq.lean", "newPath": "data/int/modeq.lean", "changes": [["add", "theorem", "exists_unique_equiv", ["int", "modeq"]], ["add", "theorem", "exists_unique_equiv_nat", ["int", "modeq"]], ["add", "theorem", "mod_coprime", ["int", "modeq"]], ["add", "theorem", "modeq_add_fac", ["int", "modeq"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["mod", "theorem", "dvd_of_pow_dvd", ["nat"]], ["add", "theorem", "exists_eq_add_of_le", ["nat"]], ["add", "theorem", "exists_eq_add_of_lt", ["nat"]]]}, {"oldPath": null, "newPath": "data/padics/default.lean", "changes": []}, {"oldPath": null, "newPath": "data/padics/hensel.lean", "changes": [["add", "theorem", "hensels_lemma", []], ["add", "theorem", "limit_zero_of_norm_tendsto_zero", []], ["add", "theorem", "padic_polynomial_dist", []]]}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "data/padics/padic_integers.lean", "changes": [["mod", "theorem", "add_def", ["padic_int"]], ["add", "theorem", "cast_pow", ["padic_int"]], ["add", "def", "cau_seq_lim", ["padic_int"]], ["add", "theorem", "cau_seq_lim_spec", ["padic_int"]], ["mod", "theorem", "coe_add", ["padic_int"]], ["mod", "theorem", "coe_mul", ["padic_int"]], ["mod", "theorem", "coe_one", ["padic_int"]], ["mod", "theorem", "coe_sub", ["padic_int"]], ["add", "theorem", "coe_zero", ["padic_int"]], ["add", "theorem", "complete", ["padic_int"]], ["mod", "theorem", "inv_mul", ["padic_int"]], ["mod", "theorem", "maximal_ideal_add", ["padic_int"]], ["mod", "theorem", "maximal_ideal_mul", ["padic_int"]], ["mod", "theorem", "maximal_ideal_ne_univ", ["padic_int"]], ["mod", "theorem", "mul_def", ["padic_int"]], ["mod", "theorem", "mul_inv", ["padic_int"]], ["add", "theorem", "tendsto_limit", ["padic_int"]], ["mod", "theorem", "zero_def", ["padic_int"]], ["add", "theorem", "add_eq_max_of_ne", ["padic_norm_z"]], ["add", "theorem", "eq_of_norm_add_lt_left", ["padic_norm_z"]], ["add", "theorem", "eq_of_norm_add_lt_right", ["padic_norm_z"]], ["mod", "theorem", "le_one", ["padic_norm_z"]], ["mod", "theorem", "norm_one", ["padic_norm_z"]], ["add", "theorem", "one", ["padic_norm_z"]], ["add", "theorem", "padic_norm_e_of_padic_int", ["padic_norm_z"]], ["add", "theorem", "padic_norm_z_eq_padic_norm_e", ["padic_norm_z"]], ["add", "theorem", "padic_val_of_cong_pow_p", ["padic_norm_z"]], ["add", "theorem", "pow", ["padic_norm_z"]]]}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": [["add", "theorem", "le_of_dvd", ["padic_norm"]], ["mod", "theorem", "padic_val_eq_zero_of_coprime", ["padic_val"]], ["add", "theorem", "pow_dvd_iff_le_padic_val", ["padic_val"]], ["add", "theorem", "pow_dvd_of_le_padic_val", ["padic_val"]], ["add", "theorem", "padic_val_rat_of_int", ["padic_val_rat"]]]}, {"oldPath": "data/padics/padic_rationals.lean", "newPath": "data/padics/padic_numbers.lean", "changes": [["add", "def", "cau_seq_lim", ["padic"]], ["add", "theorem", "cau_seq_lim_spec", ["padic"]], ["mod", "theorem", "complete'", ["padic"]], ["add", "theorem", "padic_norm_e_lim_le", ["padic"]], ["add", "theorem", "tendsto_limit", ["padic"]], ["add", "theorem", "add_eq_max_of_ne'", ["padic_norm_e"]], ["add", "theorem", "add_eq_max_of_ne", ["padic_norm_e"]], ["mod", "theorem", "defn", ["padic_norm_e"]], ["add", "theorem", "eq_of_norm_add_lt_left", ["padic_norm_e"]], ["add", "theorem", "eq_of_norm_add_lt_right", ["padic_norm_e"]], ["add", "theorem", "norm_rat_le_one", ["padic_norm_e"]], ["add", "theorem", "add_eq_max_of_ne", ["padic_seq"]], ["add", "theorem", "lift_index_left", ["padic_seq"]], ["add", "theorem", "lift_index_left_left", ["padic_seq"]], ["add", "theorem", "lift_index_right", ["padic_seq"]], ["add", "theorem", "norm_eq_of_add_equiv_zero", ["padic_seq"]], ["mod", "theorem", "norm_nonarchimedean", ["padic_seq"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "def", "binom_expansion", ["polynomial"]], ["add", "theorem", "continuous_eval", ["polynomial"]], ["add", "theorem", "derivative_eval", ["polynomial"]], ["add", "def", "eval_sub_factor", ["polynomial"]], ["add", "theorem", "eval_sum", ["polynomial"]], ["add", "def", "pow_add_expansion", ["polynomial"]], ["add", "def", "pow_sub_pow_factor", ["polynomial"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "div_num_denom", ["rat"]], ["add", "theorem", "zero_iff_num_zero", ["rat"]]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": []}, {"oldPath": null, "newPath": "data/real/cau_seq_filter.lean", "changes": [["add", "theorem", "cauchy_of_filter_cauchy", []], ["add", "theorem", "filter_cauchy_of_cauchy", []]]}]}, {"timestamp": 1538488943, "sha": "f040aef2", "message": "feat(data/padics): use has_norm typeclasses for padics", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": [["mod", "theorem", "ceil_nonneg", []], ["add", "theorem", "ceil_zero", []]]}, {"oldPath": "algebra/field_power.lean", "newPath": "algebra/field_power.lean", "changes": []}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": [["add", "theorem", "norm_div", []], ["add", "theorem", "norm_inv", []], ["add", "theorem", "norm_one", []], ["add", "theorem", "norm_sub_rev", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "dvd_of_pow_dvd", ["int"]], ["del", "theorem", "pow_div_of_le_of_pow_div_int", ["int"]], ["add", "theorem", "pow_dvd_of_le_of_pow_dvd", ["int"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "div_mul_div", ["nat"]], ["add", "theorem", "dvd_of_pow_dvd", ["nat"]], ["del", "theorem", "div_mul_div", ["nat", "nat"]], ["del", "theorem", "pow_div_of_le_of_pow_div", ["nat"]], ["add", "theorem", "pow_dvd_of_le_of_pow_dvd", ["nat"]]]}, {"oldPath": "data/padics/padic_integers.lean", "newPath": "data/padics/padic_integers.lean", "changes": [["add", "theorem", "add_def", ["padic_int"]], ["add", "theorem", "coe_add", ["padic_int"]], ["add", "theorem", "coe_coe", ["padic_int"]], ["add", "theorem", "coe_mul", ["padic_int"]], ["add", "theorem", "coe_neg", ["padic_int"]], ["add", "theorem", "coe_one", ["padic_int"]], ["add", "theorem", "coe_sub", ["padic_int"]], ["add", "def", "inv", ["padic_int"]], ["add", "theorem", "inv_mul", ["padic_int"]], ["add", "def", "maximal_ideal", ["padic_int"]], ["add", "theorem", "maximal_ideal_add", ["padic_int"]], ["add", "theorem", "maximal_ideal_eq_nonunits", ["padic_int"]], ["add", "theorem", "maximal_ideal_eq_or_univ_of_subset", ["padic_int"]], ["add", "theorem", "maximal_ideal_mul", ["padic_int"]], ["add", "theorem", "maximal_ideal_ne_univ", ["padic_int"]], ["add", "theorem", "maximal_ideal_unique", ["padic_int"]], ["add", "theorem", "mk_coe", ["padic_int"]], ["add", "theorem", "mk_zero", ["padic_int"]], ["add", "theorem", "mul_def", ["padic_int"]], ["add", "theorem", "mul_inv", ["padic_int"]], ["add", "theorem", "val_eq_coe", ["padic_int"]], ["add", "theorem", "zero_def", ["padic_int"]], ["mod", "def", "padic_int", []], ["add", "theorem", "le_one", ["padic_norm_z"]], ["add", "theorem", "mul", ["padic_norm_z"]], ["add", "theorem", "nonarchimedean", ["padic_norm_z"]], ["add", "theorem", "norm_one", ["padic_norm_z"]], ["add", "def", "padic_norm_z", []]]}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": [["add", "theorem", "dvd_of_padic_val_pos", ["padic_val"]], ["del", "theorem", "le_padic_val_of_pow_div", ["padic_val"]], ["add", "theorem", "le_padic_val_of_pow_dvd", ["padic_val"]], ["add", "theorem", "padic_val_eq_zero_of_coprime", ["padic_val"]], ["add", "theorem", "padic_val_eq_zero_of_not_dvd'", ["padic_val"]], ["add", "theorem", "padic_val_eq_zero_of_not_dvd", ["padic_val"]]]}, {"oldPath": "data/padics/padic_rationals.lean", "newPath": "data/padics/padic_rationals.lean", "changes": [["add", "theorem", "complete'", ["padic"]], ["del", "theorem", "complete", ["padic"]], ["mod", "def", "lim_seq", ["padic"]], ["add", "theorem", "rat_dense'", ["padic"]], ["mod", "theorem", "rat_dense", ["padic"]], ["mod", "def", "padic", []], ["add", "theorem", "eq_padic_norm'", ["padic_norm_e"]], ["mod", "theorem", "eq_padic_norm", ["padic_norm_e"]], ["add", "theorem", "eq_rat_norm", ["padic_norm_e"]], ["add", "theorem", "nonarchimedean'", ["padic_norm_e"]], ["mod", "theorem", "nonarchimedean", ["padic_norm_e"]], ["add", "def", "rat_norm", ["padic_norm_e"]], ["add", "theorem", "triangle_ineq", ["padic_norm_e"]], ["mod", "theorem", "norm_equiv", ["padic_seq"]], ["mod", "theorem", "norm_mul", ["padic_seq"]]]}]}, {"timestamp": 1538487525, "sha": "963fc835", "message": "doc(docs/elan.md): instructions for building all of a dependency\nCloses #308.", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1538487485, "sha": "9339754c", "message": "docs(elan): updating documentation on installing via elan (#371)\n* updating documentation for elan\n* minor\n* further update of elan docs\n* update instructions for elan 0.7.1\n* noting additional prerequisite on macOS", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1538487369, "sha": "28443c8b", "message": "feat(ring_theory/noetherian): zero ring (and finite rings) are Noetherian (closes #341)", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "eq_zero_of_zero_eq_one", []], ["add", "theorem", "subsingleton_of_zero_eq_one", []]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "leading_coeff_eq_zero_iff_deg_eq_bot", ["polynomial"]]]}, {"oldPath": "ring_theory/noetherian.lean", "newPath": "ring_theory/noetherian.lean", "changes": [["add", "theorem", "is_noetherian_of_fintype", ["ring"]], ["add", "theorem", "is_noetherian_of_zero_eq_one", ["ring"]]]}]}, {"timestamp": 1538480064, "sha": "44b55e69", "message": "feat(category_theory/groupoid): groupoids", "changes": [{"oldPath": null, "newPath": "category_theory/groupoid.lean", "changes": [["add", "def", "large_groupoid", ["category_theory"]], ["add", "def", "small_groupoid", ["category_theory"]]]}]}, {"timestamp": 1538480044, "sha": "efa94590", "message": "feat(category_theory/whiskering): whiskering nat_trans by functors (#360)\n* feat(category_theory/whiskering): whiskering nat_trans by functors\n* simplify whiskering", "changes": [{"oldPath": null, "newPath": "category_theory/whiskering.lean", "changes": [["add", "theorem", "app", ["category_theory", "whisker_left"]], ["add", "def", "whisker_left", ["category_theory"]], ["add", "theorem", "whisker_left_twice", ["category_theory"]], ["add", "theorem", "whisker_left_vcomp", ["category_theory"]], ["add", "theorem", "app", ["category_theory", "whisker_right"]], ["add", "def", "whisker_right", ["category_theory"]], ["add", "theorem", "whisker_right_left", ["category_theory"]], ["add", "theorem", "whisker_right_twice", ["category_theory"]], ["add", "theorem", "whisker_right_vcomp", ["category_theory"]], ["add", "def", "whiskering_left", ["category_theory"]], ["add", "def", "whiskering_right", ["category_theory"]]]}]}, {"timestamp": 1538467506, "sha": "470b6daa", "message": "feat(data/sum): add monad instance", "changes": [{"oldPath": "category/applicative.lean", "newPath": "category/applicative.lean", "changes": []}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": []}, {"oldPath": "category/functor.lean", "newPath": "category/functor.lean", "changes": []}, {"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": []}]}, {"timestamp": 1538427229, "sha": "dbb3ff0b", "message": "feat(data/zmod/quadratic_reciprocity): quadratic reciprocity (#327)\n* multiplicative group of finite field is cyclic\n* more stuff\n* change chinese remainder to def\n* get rid of nonsense\n* delete extra line break\n* one prod_bij left\n* move lemmas to correct places\n* delete prod_instances\n* almost done\n* move lamms to correct places\n* more moving lemmas\n* finished off moving lemmas\n* fix build\n* move quadratic reciprocity to zmod\n* improve readability\n* remove unnecessary alphas\n* move `prod_range_id`\n* fix build\n* fix build\n* fix build\n* fix build\n* delete mk_of_ne_zero\n* move odd_mul_odd_div_two\n* extra a few lemmas\n* improving readability\n* delete duplicate lemmas\n* forgot to save\n* delete duplicate lemma\n* indent calc proofs\n* fix build\n* fix build\n* forgot to save\n* fix build", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "card_bind", ["finset"]], ["add", "theorem", "card_bind_le", ["finset"]], ["mod", "theorem", "prod_const", ["finset"]], ["mod", "theorem", "prod_image", ["finset"]], ["add", "theorem", "prod_involution", ["finset"]], ["add", "theorem", "prod_nat_pow", ["finset"]], ["add", "theorem", "prod_pow", ["finset"]], ["add", "theorem", "prod_range_id_eq_fact", ["finset"]], ["mod", "theorem", "sum_const", ["finset"]], ["add", "theorem", "sum_smul", ["finset"]]]}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "mk0_inj", ["units", "units"]]]}, {"oldPath": "algebra/field_power.lean", "newPath": "algebra/field_power.lean", "changes": []}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "coe_inv", ["units"]], ["add", "theorem", "coe_mul", ["units"]], ["add", "theorem", "coe_one", ["units"]], ["del", "theorem", "inv_coe", ["units"]], ["del", "theorem", "mul_coe", ["units"]], ["del", "theorem", "one_coe", ["units"]]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "neg_one_pow_eq_pow_mod_two", []], ["add", "theorem", "coe_pow", ["units"]]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "one_lt_mul", []]]}, {"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": [["add", "theorem", "prod_mk_prod", ["finset"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "coe_ne_zero", ["units"]], ["add", "theorem", "inv_eq_self_iff", ["units"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "card_attach", ["finset"]], ["add", "theorem", "card_congr", ["finset"]], ["mod", "theorem", "card_range", ["finset"]], ["add", "theorem", "card_union_add_card_inter", ["finset"]], ["add", "theorem", "card_union_le", ["finset"]], ["mod", "theorem", "fold_image", ["finset"]], ["add", "theorem", "surj_on_of_inj_on_of_card_le", ["finset"]]]}, {"oldPath": "data/int/modeq.lean", "newPath": "data/int/modeq.lean", "changes": [["add", "theorem", "mod_mul_left_mod", ["int"]], ["add", "theorem", "mod_mul_right_mod", ["int"]], ["add", "theorem", "gcd_a_modeq", ["int", "modeq"]], ["add", "theorem", "mod_modeq", ["int", "modeq"]], ["add", "theorem", "modeq_and_modeq_iff_modeq_mul", ["int", "modeq"]], ["add", "theorem", "modeq_of_modeq_mul_left", ["int", "modeq"]], ["add", "theorem", "modeq_of_modeq_mul_right", ["int", "modeq"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "div_dvd_of_dvd", ["nat"]], ["add", "theorem", "mod_mul_left_div_self", ["nat"]], ["add", "theorem", "mod_mul_right_div_self", ["nat"]], ["add", "theorem", "pred_eq_sub_one", ["nat"]], ["add", "theorem", "succ_le_iff", ["nat"]], ["add", "theorem", "two_mul_odd_div_two", ["nat"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["add", "theorem", "mul_dvd_of_dvd_of_dvd", ["nat", "coprime"]], ["add", "theorem", "coprime_mul_iff_left", ["nat"]], ["add", "theorem", "coprime_mul_iff_right", ["nat"]]]}, {"oldPath": "data/nat/modeq.lean", "newPath": "data/nat/modeq.lean", "changes": [["add", "theorem", "mod_mul_left_mod", ["nat"]], ["add", "theorem", "mod_mul_right_mod", ["nat"]], ["add", "def", "chinese_remainder", ["nat", "modeq"]], ["del", "theorem", "chinese_remainder", ["nat", "modeq"]], ["add", "theorem", "coprime_of_mul_modeq_one", ["nat", "modeq"]], ["add", "theorem", "modeq_and_modeq_iff_modeq_mul", ["nat", "modeq"]], ["add", "theorem", "modeq_of_modeq_mul_left", ["nat", "modeq"]], ["add", "theorem", "modeq_of_modeq_mul_right", ["nat", "modeq"]], ["add", "theorem", "odd_mul_odd", ["nat"]], ["add", "theorem", "odd_mul_odd_div_two", ["nat"]], ["add", "theorem", "odd_of_mod_four_eq_one", ["nat"]], ["add", "theorem", "odd_of_mod_four_eq_three", ["nat"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "eq_two_or_odd", ["nat", "prime"]]]}, {"oldPath": null, "newPath": "data/nat/totient.lean", "changes": [["add", "theorem", "sum_totient", ["nat"]], ["add", "def", "totient", ["nat"]], ["add", "theorem", "totient_le", ["nat"]], ["add", "theorem", "totient_pos", ["nat"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["mod", "theorem", "mk_out'", ["quotient"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "card_le_of_subset", ["set"]], ["add", "theorem", "eq_of_subset_of_card_le", ["set"]]]}, {"oldPath": "data/zmod.lean", "newPath": "data/zmod/basic.lean", "changes": [["add", "theorem", "cast_mul_left_val_cast", ["zmod"]], ["add", "theorem", "cast_mul_right_val_cast", ["zmod"]], ["add", "theorem", "cast_val_cast_of_dvd", ["zmod"]], ["add", "theorem", "coe_val_cast_int", ["zmod"]], ["add", "theorem", "eq_zero_iff_dvd_int", ["zmod"]], ["add", "theorem", "eq_zero_iff_dvd_nat", ["zmod"]], ["add", "theorem", "le_div_two_iff_lt_neg", ["zmod"]], ["add", "theorem", "ne_neg_self", ["zmod"]], ["add", "def", "units_equiv_coprime", ["zmod"]], ["add", "theorem", "card_zmodp", ["zmodp"]], ["add", "theorem", "coe_val_cast_int", ["zmodp"]], ["add", "theorem", "eq_zero_iff_dvd_int", ["zmodp"]], ["add", "theorem", "eq_zero_iff_dvd_nat", ["zmodp"]], ["del", "theorem", "gcd_a_modeq", ["zmodp"]], ["add", "theorem", "le_div_two_iff_lt_neg", ["zmodp"]], ["add", "theorem", "ne_neg_self", ["zmodp"]], ["add", "theorem", "prime_ne_zero", ["zmodp"]]]}, {"oldPath": null, "newPath": "data/zmod/quadratic_reciprocity.lean", "changes": [["add", "theorem", "card_range_p_mul_q_filter_not_coprime", ["quadratic_reciprocity_aux"]], ["add", "theorem", "filter_range_p_mul_q_div_two_eq", ["quadratic_reciprocity_aux"]], ["add", "theorem", "prod_filter_range_p_mul_q_div_two_eq", ["quadratic_reciprocity_aux"]], ["add", "theorem", "prod_filter_range_p_mul_q_div_two_eq_prod_product", ["quadratic_reciprocity_aux"]], ["add", "theorem", "prod_filter_range_p_mul_q_div_two_mod_p_eq", ["quadratic_reciprocity_aux"]], ["add", "theorem", "prod_filter_range_p_mul_q_not_coprime_eq", ["quadratic_reciprocity_aux"]], ["add", "theorem", "prod_range_div_two_erase_zero", ["quadratic_reciprocity_aux"]], ["add", "theorem", "prod_range_p_mul_q_div_two_ite_eq", ["quadratic_reciprocity_aux"]], ["add", "theorem", "prod_range_p_mul_q_filter_coprime_mod_p", ["quadratic_reciprocity_aux"]], ["add", "theorem", "range_p_product_range_q_div_two_prod", ["quadratic_reciprocity_aux"]], ["add", "theorem", "card_units_zmodp", ["zmodp"]], ["add", "theorem", "euler_criterion", ["zmodp"]], ["add", "theorem", "euler_criterion_units", ["zmodp"]], ["add", "theorem", "fermat_little", ["zmodp"]], ["add", "theorem", "is_square_iff_is_not_square_of_mod_four_eq_three", ["zmodp"]], ["add", "theorem", "is_square_iff_is_square_of_mod_four_eq_one", ["zmodp"]], ["add", "def", "legendre_sym", ["zmodp"]], ["add", "theorem", "legendre_sym_eq_one_or_neg_one", ["zmodp"]], ["add", "theorem", "legendre_sym_eq_pow", ["zmodp"]], ["add", "theorem", "pow_div_two_eq_neg_one_or_one", ["zmodp"]], ["add", "theorem", "prod_range_prime_erase_zero", ["zmodp"]], ["add", "theorem", "quadratic_reciprocity", ["zmodp"]], ["add", "theorem", "wilsons_lemma", ["zmodp"]]]}, {"oldPath": null, "newPath": "field_theory/finite.lean", "changes": [["add", "theorem", "coe_units_equiv_ne_zero", []], ["add", "theorem", "card_nth_roots_units", ["finite_field"]], ["add", "theorem", "card_order_of_eq_totient", ["finite_field"]], ["add", "theorem", "card_pow_eq_one_eq_order_of", ["finite_field"]], ["add", "theorem", "card_units", ["finite_field"]], ["add", "theorem", "prod_univ_units_id_eq_neg_one", ["finite_field"]], ["add", "theorem", "order_of_pow", []], ["add", "def", "units_equiv_ne_zero", []]]}, {"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": [["add", "theorem", "is_cyclic_of_order_of_eq_card", []], ["add", "theorem", "order_of_dvd_of_pow_eq_one", []], ["add", "theorem", "order_of_eq_card_of_forall_mem_gppowers", []], ["add", "theorem", "order_of_le_of_pow_eq_one", []], ["add", "theorem", "pow_card_eq_one", []], ["add", "theorem", "powers_eq_gpowers", []], ["add", "theorem", "sum_card_order_of_eq_card_pow_eq_one", []]]}, {"oldPath": "number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": []}, {"oldPath": "ring_theory/associated.lean", "newPath": "ring_theory/associated.lean", "changes": []}]}, {"timestamp": 1538426110, "sha": "f3850c22", "message": "feat(algebra/group): add units.map and prove that it is a group hom (#374)", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}]}, {"timestamp": 1538426054, "sha": "decb0302", "message": "style(tactic/*): minor simplifications to tidy-related tactics", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/chain.lean", "newPath": "tactic/chain.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/tidy.lean", "newPath": "tactic/tidy.lean", "changes": []}]}, {"timestamp": 1538425592, "sha": "87a963be", "message": "feat(tactic/ext): add apply_cfg argument to ext1 (#346)\n* feat(tactics/ext): use `applyc _ {new_goals := new_goals.all}`\nThis causes goals to appear in the same order they appear as hypotheses of the\n`@[extensionality]` lemma, rather than being reordered to put dependent\ngoals first.\nThis doesn't appear to affect any uses of `ext` in mathlib,\nbut is occasionally helpful in the development of category theory.\n(Indeed, I have been running into tactic mode proofs that fail to\ntypecheck, when using ext, and this avoids the problem)\n* adding configuration to non-interactive ext1\nand a wrapper so tidy can sometimes produce shorter tactic scripts", "changes": [{"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}, {"oldPath": "tactic/tidy.lean", "newPath": "tactic/tidy.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": [["add", "structure", "dependent_fields", []], ["add", "theorem", "ext", ["df"]]]}]}, {"timestamp": 1538425482, "sha": "1923c235", "message": "feat(data/polynomial): interface general coefficients of a polynomial (#339)\n* feat(data/polynomial): interface general coefficients of a polynomial\n* fix(data/polynomial): fixing the code I broke when defining polynomial.ext\n* fix(data/polynomial): tidy up comments\n* Update polynomial.lean\n* adding interface for scalar multiplication and coefficients\n* feat(data/polynomial): coeff is R-linear", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "C_mul'", ["polynomial"]], ["add", "def", "coeff", ["polynomial"]], ["add", "theorem", "coeff_C", ["polynomial"]], ["add", "theorem", "coeff_C_mul_X", ["polynomial"]], ["add", "theorem", "coeff_X", ["polynomial"]], ["add", "theorem", "coeff_X_pow", ["polynomial"]], ["add", "theorem", "coeff_add", ["polynomial"]], ["add", "theorem", "coeff_is_linear", ["polynomial"]], ["add", "theorem", "coeff_mul_X", ["polynomial"]], ["add", "theorem", "coeff_mul_X_pow", ["polynomial"]], ["add", "theorem", "coeff_mul_left", ["polynomial"]], ["add", "theorem", "coeff_mul_right", ["polynomial"]], ["add", "theorem", "coeff_one", ["polynomial"]], ["add", "theorem", "coeff_smul", ["polynomial"]], ["add", "theorem", "coeff_zero", ["polynomial"]], ["add", "theorem", "ext", ["polynomial"]], ["add", "theorem", "mul_X_pow_eq_zero", ["polynomial"]]]}]}, {"timestamp": 1538425199, "sha": "282754c2", "message": "fix(tactic/linarith): symmetric case", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": [["add", "theorem", "coe_nat_mul_bit0", ["linarith", "int"]], ["add", "theorem", "coe_nat_mul_bit1", ["linarith", "int"]], ["add", "theorem", "coe_nat_mul_one", ["linarith", "int"]], ["add", "theorem", "coe_nat_mul_zero", ["linarith", "int"]]]}]}, {"timestamp": 1538425199, "sha": "31ef46a9", "message": "feat(tactic/linarith): don't reject nonlinear hypotheses", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": [["add", "theorem", "coe_nat_bit0_mul", ["linarith", "int"]], ["add", "theorem", "coe_nat_bit1_mul", ["linarith", "int"]], ["add", "theorem", "coe_nat_one_mul", ["linarith", "int"]], ["add", "theorem", "coe_nat_zero_mul", ["linarith", "int"]]]}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1538417417, "sha": "4ba7f234", "message": "cleanup(data/holor)", "changes": [{"oldPath": "data/holor.lean", "newPath": "data/holor.lean", "changes": [["mod", "theorem", "cast_type", ["holor"]], ["mod", "def", "holor", []], ["mod", "theorem", "cast_type", ["holor_index"]], ["mod", "def", "holor_index", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "drop_drop", ["list"]]]}]}, {"timestamp": 1538405502, "sha": "7c361fa0", "message": "feat(data/holor): holor library", "changes": [{"oldPath": null, "newPath": "data/holor.lean", "changes": [["add", "def", "assoc_left", ["holor"]], ["add", "def", "assoc_right", ["holor"]], ["add", "theorem", "cast_type", ["holor"]], ["add", "inductive", "cprank_max1", ["holor"]], ["add", "inductive", "cprank_max", ["holor"]], ["add", "theorem", "cprank_max_1", ["holor"]], ["add", "theorem", "cprank_max_add", ["holor"]], ["add", "theorem", "cprank_max_mul", ["holor"]], ["add", "theorem", "cprank_max_nil", ["holor"]], ["add", "theorem", "cprank_max_sum", ["holor"]], ["add", "theorem", "cprank_max_upper_bound", ["holor"]], ["add", "theorem", "cprank_upper_bound", ["holor"]], ["add", "theorem", "holor_index_cons_decomp", ["holor"]], ["add", "def", "mul", ["holor"]], ["add", "theorem", "mul_assoc0", ["holor"]], ["add", "theorem", "mul_assoc", ["holor"]], ["add", "theorem", "mul_left_distrib", ["holor"]], ["add", "theorem", "mul_right_distrib", ["holor"]], ["add", "theorem", "mul_scalar_mul", ["holor"]], ["add", "theorem", "mul_zero", ["holor"]], ["add", "def", "slice", ["holor"]], ["add", "theorem", "slice_add", ["holor"]], ["add", "theorem", "slice_eq", ["holor"]], ["add", "theorem", "slice_sum", ["holor"]], ["add", "theorem", "slice_unit_vec_mul", ["holor"]], ["add", "theorem", "slice_zero", ["holor"]], ["add", "theorem", "sum_unit_vec_mul_slice", ["holor"]], ["add", "def", "unit_vec", ["holor"]], ["add", "theorem", "zero_mul", ["holor"]], ["add", "def", "holor", []], ["add", "def", "assoc_left", ["holor_index"]], ["add", "def", "assoc_right", ["holor_index"]], ["add", "theorem", "cast_type", ["holor_index"]], ["add", "def", "drop", ["holor_index"]], ["add", "theorem", "drop_drop", ["holor_index"]], ["add", "theorem", "drop_take", ["holor_index"]], ["add", "def", "take", ["holor_index"]], ["add", "theorem", "take_take", ["holor_index"]], ["add", "def", "holor_index", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "drop_drop", ["list"]], ["add", "theorem", "drop_take", ["list"]], ["add", "theorem", "forall₂_drop", ["list"]], ["add", "theorem", "forall₂_drop_append", ["list"]], ["add", "theorem", "forall₂_take", ["list"]], ["add", "theorem", "forall₂_take_append", ["list"]]]}]}, {"timestamp": 1538404827, "sha": "b66614d1", "message": "refactor(analysis/topology): renamed compact_open to continuous_map; moved locally_compact to a more general position", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "locally_compact_of_compact", []], ["add", "theorem", "locally_compact_of_compact_nhds", []]]}, {"oldPath": "analysis/topology/compact_open.lean", "newPath": "analysis/topology/continuous_map.lean", "changes": [["del", "def", "coev", []], ["del", "def", "compact_open", []], ["del", "def", "compact_open_gen", []], ["del", "theorem", "continuous_coev", []], ["del", "theorem", "continuous_ev", []], ["del", "theorem", "continuous_induced", []], ["add", "def", "coev", ["continuous_map"]], ["add", "def", "gen", ["continuous_map", "compact_open"]], ["add", "theorem", "continuous_coev", ["continuous_map"]], ["add", "theorem", "continuous_ev", ["continuous_map"]], ["add", "theorem", "continuous_induced", ["continuous_map"]], ["add", "def", "ev", ["continuous_map"]], ["add", "theorem", "image_coev", ["continuous_map"]], ["mod", "def", "induced", ["continuous_map"]], ["add", "def", "continuous_map", []], ["del", "def", "ev", []], ["del", "theorem", "image_coev", []], ["del", "theorem", "locally_compact_of_compact", []], ["del", "theorem", "locally_compact_of_compact_nhds", []]]}]}, {"timestamp": 1538213575, "sha": "b5d8fbe8", "message": "fix(data/nat/prime): fix build, add simp attr", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": []}]}, {"timestamp": 1538207323, "sha": "6997cafb", "message": "feat(data/nat/basic): remove superfluous assumptions", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "lt_pred_iff", ["nat"]], ["del", "theorem", "lt_pred_of_succ_lt", ["nat"]], ["add", "theorem", "pred_le_iff", ["nat"]], ["mod", "theorem", "sub_le_left_iff_le_add", ["nat"]], ["mod", "theorem", "sub_le_right_iff_le_add", ["nat"]]]}]}, {"timestamp": 1537824685, "sha": "6434658c", "message": "feat(analysis/topology): locally compact spaces and the compact-open topology", "changes": [{"oldPath": null, "newPath": "analysis/topology/compact_open.lean", "changes": [["add", "def", "coev", []], ["add", "def", "compact_open", []], ["add", "def", "compact_open_gen", []], ["add", "theorem", "continuous_coev", []], ["add", "theorem", "continuous_ev", []], ["add", "theorem", "continuous_induced", []], ["add", "def", "induced", ["continuous_map"]], ["add", "def", "ev", []], ["add", "theorem", "image_coev", []], ["add", "theorem", "locally_compact_of_compact", []], ["add", "theorem", "locally_compact_of_compact_nhds", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "compact_diff", []], ["add", "theorem", "compact_inter", []]]}]}, {"timestamp": 1537803215, "sha": "68acd760", "message": "feat(group_theory/perm): perm.fintype and card_perm (closed #366)", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_perms_of_finset", []], ["add", "theorem", "card_equiv", ["fintype"]], ["add", "theorem", "card_perm", ["fintype"]], ["add", "def", "fintype_perm", []], ["add", "theorem", "length_perms_of_list", []], ["add", "theorem", "mem_of_mem_perms_of_list", []], ["add", "theorem", "mem_perms_of_finset_iff", []], ["add", "theorem", "mem_perms_of_list_iff", []], ["add", "theorem", "mem_perms_of_list_of_mem", []], ["add", "theorem", "nodup_perms_of_list", []], ["add", "def", "perms_of_finset", []], ["add", "def", "perms_of_list", []]]}, {"oldPath": "group_theory/perm.lean", "newPath": "group_theory/perm.lean", "changes": []}]}, {"timestamp": 1537778889, "sha": "cbfe372d", "message": "fix(category_theory/functor): make obj_eq_coe a rfl-lemma\nThis is needed to, for example, let `dsimp` turn `𝟙 (F.obj X)` into `𝟙 (F X)`.", "changes": [{"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["mod", "theorem", "obj_eq_coe", ["category_theory", "functor"]]]}]}, {"timestamp": 1537732483, "sha": "ce43eae8", "message": "fix(topological_structures): fix imports", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}]}, {"timestamp": 1537728903, "sha": "8c76cace", "message": "fix(*): tweaks to 7944cc", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "linear_algebra/submodule.lean", "newPath": "linear_algebra/submodule.lean", "changes": [["add", "def", "le_order_embedding", ["quotient_module"]], ["add", "def", "lt_order_embedding", ["quotient_module"]], ["del", "def", "submodule_lt_equiv", ["submodule"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": [["add", "def", "lt_embedding_of_le_embedding", ["order_embedding"]]]}]}, {"timestamp": 1537695657, "sha": "e7c75527", "message": "feat(analysis/topology/continuity): compactness and embeddings", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "compact_iff_compact_image_of_embedding", []], ["add", "theorem", "compact_iff_compact_in_subtype", []], ["add", "theorem", "compact_iff_compact_univ", []], ["add", "theorem", "continuous", ["embedding"]], ["add", "theorem", "continuous", ["quotient_map"]]]}]}, {"timestamp": 1537695657, "sha": "ab20b5ff", "message": "style(analysis/topology/continuity): minor reorganizations", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "theorem", "closure_subtype", []], ["mod", "theorem", "tendsto_nhds_iff", ["embedding"]]]}]}, {"timestamp": 1537552627, "sha": "ca7f1180", "message": "fix(docs/tactics.md): missing backquote, formatting\nI think I never previewed when I updated the `linarith` doc before, sorry.", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1537552007, "sha": "9a7a611c", "message": "feat(analysis/topology, order/filter): theorems for the applicative structure on filter; add list topology", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "nhds_list", []], ["mod", "theorem", "quotient_dense_of_dense", []], ["add", "theorem", "nhds_mk_of_nhds", ["topological_space"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "comap_Sup", ["filter"]], ["add", "theorem", "comap_supr", ["filter"]], ["add", "theorem", "le_map", ["filter"]], ["add", "theorem", "le_seq", ["filter"]], ["add", "theorem", "map_pure", ["filter"]], ["add", "theorem", "mem_map_sets_iff", ["filter"]], ["add", "theorem", "mem_seq_sets_def", ["filter"]], ["add", "theorem", "mem_seq_sets_iff", ["filter"]], ["add", "theorem", "mem_traverse_sets", ["filter"]], ["add", "theorem", "mem_traverse_sets_iff", ["filter"]], ["add", "theorem", "prod_map_seq_comm", ["filter"]], ["add", "theorem", "pure_seq_eq_map", ["filter"]], ["add", "theorem", "seq_assoc", ["filter"]], ["add", "theorem", "seq_mem_seq_sets", ["filter"]], ["mod", "theorem", "seq_mono", ["filter"]], ["add", "theorem", "seq_pure", ["filter"]], ["add", "theorem", "sequence_mono", ["filter"]], ["add", "theorem", "singleton_mem_pure_sets", ["filter"]], ["add", "theorem", "{l}", ["filter"]]]}]}, {"timestamp": 1537552007, "sha": "568a15f8", "message": "refactor(category/traversable): proofs about list instance for traverse, simplify multiset.traverse", "changes": [{"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": [["add", "theorem", "mem_traverse", ["list"]], ["add", "theorem", "traverse_append", ["list"]], ["add", "theorem", "traverse_cons", ["list"]], ["add", "theorem", "traverse_nil", ["list"]], ["del", "theorem", "traverse_append", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "flip", ["list", "forall₂"]], ["add", "theorem", "mp", ["list", "forall₂"]], ["add", "theorem", "forall₂_and_left", ["list"]], ["del", "theorem", "forall₂_flip", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["del", "theorem", "coe_append_eq_add_coe", ["multiset"]], ["del", "theorem", "coe_list_cons_eq_cons_coe", ["multiset"]], ["del", "theorem", "coe_traverse_cons", ["multiset"]], ["del", "theorem", "coe_traverse_cons_swap", ["multiset"]], ["mod", "def", "traverse", ["multiset"]]]}]}, {"timestamp": 1537552007, "sha": "618aac90", "message": "feat(data/set): add set.seq (use it for the appliative.seq instance for set)", "changes": [{"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "image_seq", ["set"]], ["mod", "theorem", "mem_seq_iff", ["set"]], ["add", "theorem", "prod_eq_seq", ["set"]], ["add", "theorem", "prod_image_seq_comm", ["set"]], ["add", "theorem", "pure_def", ["set"]], ["add", "def", "seq", ["set"]], ["add", "theorem", "seq_def", ["set"]], ["add", "theorem", "seq_eq_set_seq", ["set"]], ["add", "theorem", "seq_mono", ["set"]], ["add", "theorem", "seq_seq", ["set"]], ["add", "theorem", "seq_singleton", ["set"]], ["add", "theorem", "seq_subset", ["set"]], ["add", "theorem", "singleton_seq", ["set"]]]}]}, {"timestamp": 1537552007, "sha": "a62ec36d", "message": "refactor(order/filter): remove monad instance on filters; add applicative instance inducing the expected products", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["del", "theorem", "mem_return_sets", ["filter"]], ["add", "def", "seq", ["filter"]]]}]}, {"timestamp": 1537552007, "sha": "f53c776c", "message": "feat(analysis/topology): pi-spaces: topolopgy generation, prove second countability", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "is_open_set_pi", []], ["add", "theorem", "pi_eq_generate_from", []], ["add", "theorem", "pi_generate_from_eq", []], ["add", "theorem", "pi_generate_from_eq_fintype", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "generate_from_mono", []]]}]}, {"timestamp": 1537552007, "sha": "da7bbd7f", "message": "feat(data/set): add set.pi", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "def", "pi_equiv_subtype_sigma", ["equiv"]]]}, {"oldPath": "data/equiv/list.lean", "newPath": "data/equiv/list.lean", "changes": [["add", "def", "fintype_arrow", ["encodable"]], ["add", "def", "fintype_pi", ["encodable"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "set_of_mem", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "coe_univ", ["finset"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "def", "pi", ["set"]], ["add", "theorem", "pi_empty_index", ["set"]], ["add", "theorem", "pi_if", ["set"]], ["add", "theorem", "pi_insert_index", ["set"]], ["add", "theorem", "pi_singleton_index", ["set"]], ["add", "theorem", "sep_set_of", ["set"]], ["add", "theorem", "sep_univ", ["set"]], ["add", "theorem", "set_of_mem", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["add", "theorem", "countable_pi", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "pi_def", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "rec_heq_of_heq", []]]}]}, {"timestamp": 1537552007, "sha": "7944cc55", "message": "fix(*): fix some problems introduced with 98152392bcd4b3f783602d030a5ab6a9e47e0088 and 9aec1d18d3c4cbad400d7ddcdd63b94d647b0a01", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "linear_algebra/submodule.lean", "newPath": "linear_algebra/submodule.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": [["mod", "theorem", "coe_coe_fn", ["order_iso"]]]}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["mod", "theorem", "coe_coe_fn", ["initial_seg"]], ["mod", "theorem", "coe_coe_fn'", ["principal_seg"]], ["mod", "theorem", "coe_coe_fn", ["principal_seg"]]]}]}, {"timestamp": 1537488544, "sha": "2485d8e9", "message": "fix(*): fix build", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "linear_algebra/submodule.lean", "newPath": "linear_algebra/submodule.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["mod", "theorem", "inv_fun_on_eq'", ["function"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["mod", "def", "preimage", ["order"]]]}]}, {"timestamp": 1537472808, "sha": "a4108eb4", "message": "fix(algebra/pi_instances): bugfix", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": []}, {"oldPath": "linear_algebra/prod_module.lean", "newPath": "linear_algebra/prod_module.lean", "changes": [["del", "theorem", "is_basis_inl_union_inr", []], ["del", "theorem", "is_linear_map_prod_fst", []], ["del", "theorem", "is_linear_map_prod_inl", []], ["del", "theorem", "is_linear_map_prod_inr", []], ["del", "theorem", "is_linear_map_prod_mk", []], ["del", "theorem", "is_linear_map_prod_snd", []], ["del", "theorem", "linear_independent_inl_union_inr", []], ["add", "theorem", "is_basis_inl_union_inr", ["prod"]], ["add", "theorem", "is_linear_map_prod_fst", ["prod"]], ["add", "theorem", "is_linear_map_prod_inl", ["prod"]], ["add", "theorem", "is_linear_map_prod_inr", ["prod"]], ["add", "theorem", "is_linear_map_prod_mk", ["prod"]], ["add", "theorem", "is_linear_map_prod_snd", ["prod"]], ["add", "theorem", "linear_independent_inl_union_inr", ["prod"]], ["add", "theorem", "span_inl_union_inr", ["prod"]], ["add", "theorem", "span_prod", ["prod"]], ["del", "theorem", "span_inl_union_inr", []], ["del", "theorem", "span_prod", []]]}]}, {"timestamp": 1537471262, "sha": "9aec1d18", "message": "refactor(algebra/pi_instances): move prod instances to pi_instances file", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": [["add", "theorem", "fst_inl", ["prod"]], ["add", "theorem", "fst_inr", ["prod"]], ["add", "theorem", "fst_inv", ["prod"]], ["add", "theorem", "fst_mul", ["prod"]], ["add", "theorem", "fst_one", ["prod"]], ["add", "theorem", "fst_prod", ["prod"]], ["add", "theorem", "injective_inl", ["prod"]], ["add", "theorem", "injective_inr", ["prod"]], ["add", "def", "inl", ["prod"]], ["add", "theorem", "inl_eq_inl", ["prod"]], ["add", "theorem", "inl_eq_inr", ["prod"]], ["add", "def", "inr", ["prod"]], ["add", "theorem", "inr_eq_inl", ["prod"]], ["add", "theorem", "inr_eq_inr", ["prod"]], ["add", "theorem", "snd_inl", ["prod"]], ["add", "theorem", "snd_inr", ["prod"]], ["add", "theorem", "snd_inv", ["prod"]], ["add", "theorem", "snd_mul", ["prod"]], ["add", "theorem", "snd_one", ["prod"]], ["add", "theorem", "snd_prod", ["prod"]]]}, {"oldPath": "linear_algebra/prod_module.lean", "newPath": "linear_algebra/prod_module.lean", "changes": [["add", "theorem", "is_basis_inl_union_inr", []], ["add", "theorem", "is_linear_map_prod_fst", []], ["add", "theorem", "is_linear_map_prod_inl", []], ["add", "theorem", "is_linear_map_prod_inr", []], ["add", "theorem", "is_linear_map_prod_mk", []], ["add", "theorem", "is_linear_map_prod_snd", []], ["add", "theorem", "linear_independent_inl_union_inr", []], ["del", "theorem", "fst_inl", ["prod"]], ["del", "theorem", "fst_inr", ["prod"]], ["del", "theorem", "fst_inv", ["prod"]], ["del", "theorem", "fst_mul", ["prod"]], ["del", "theorem", "fst_one", ["prod"]], ["del", "theorem", "fst_prod", ["prod"]], ["del", "theorem", "injective_inl", ["prod"]], ["del", "theorem", "injective_inr", ["prod"]], ["del", "def", "inl", ["prod"]], ["del", "theorem", "inl_eq_inl", ["prod"]], ["del", "theorem", "inl_eq_inr", ["prod"]], ["del", "def", "inr", ["prod"]], ["del", "theorem", "inr_eq_inl", ["prod"]], ["del", "theorem", "inr_eq_inr", ["prod"]], ["del", "theorem", "is_basis_inl_union_inr", ["prod"]], ["del", "theorem", "is_linear_map_prod_fst", ["prod"]], ["del", "theorem", "is_linear_map_prod_inl", ["prod"]], ["del", "theorem", "is_linear_map_prod_inr", ["prod"]], ["del", "theorem", "is_linear_map_prod_mk", ["prod"]], ["del", "theorem", "is_linear_map_prod_snd", ["prod"]], ["del", "theorem", "linear_independent_inl_union_inr", ["prod"]], ["del", "theorem", "snd_inl", ["prod"]], ["del", "theorem", "snd_inr", ["prod"]], ["del", "theorem", "snd_inv", ["prod"]], ["del", "theorem", "snd_mul", ["prod"]], ["del", "theorem", "snd_one", ["prod"]], ["del", "theorem", "snd_prod", ["prod"]], ["del", "theorem", "span_inl_union_inr", ["prod"]], ["del", "theorem", "span_prod", ["prod"]], ["add", "theorem", "span_inl_union_inr", []], ["add", "theorem", "span_prod", []]]}]}, {"timestamp": 1537465780, "sha": "3ba4e827", "message": "feat(data/set/finite): finite_subset_Union, disjoint_mono", "changes": [{"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_range", ["set"]], ["add", "theorem", "finite_subset_Union", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_mono", []], ["add", "theorem", "disjoint_mono_left", []], ["add", "theorem", "disjoint_mono_right", []]]}]}, {"timestamp": 1537465733, "sha": "bd26b065", "message": "refactor(linear_algebra/basic): move some lemmas to the right place", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "zero_ne_one_or_forall_eq_0", []]]}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "diff_self", ["set"]]]}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": [["del", "theorem", "diff_self", ["set"]], ["del", "theorem", "zero_ne_one_or_forall_eq_0", []]]}]}, {"timestamp": 1537465598, "sha": "17580925", "message": "feat(data/subtype): subtype.coe_ext", "changes": [{"oldPath": "data/subtype.lean", "newPath": "data/subtype.lean", "changes": [["add", "theorem", "coe_ext", ["subtype"]]]}]}, {"timestamp": 1537465533, "sha": "98152392", "message": "feat(logic/basic): more coe_trans instances", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "coe_fn_coe_base", []], ["add", "theorem", "coe_fn_coe_trans", []], ["add", "theorem", "coe_sort_coe_base", []], ["add", "theorem", "coe_sort_coe_trans", []]]}]}, {"timestamp": 1537465482, "sha": "0d6bae76", "message": "refactor(order/filter): move directed to order.basic, swap definition\ndirected means containing upper bounds, not lower bounds", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "finset_le", ["directed"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "def", "directed", []], ["add", "theorem", "directed_comp", []], ["add", "theorem", "directed_mono", []], ["add", "def", "directed_on", []], ["add", "theorem", "directed_on_iff_directed", []], ["add", "theorem", "swap", ["is_antisymm"]], ["add", "theorem", "swap", ["is_asymm"]], ["mod", "theorem", "swap", ["is_irrefl"]], ["add", "theorem", "swap", ["is_linear_order"]], ["add", "theorem", "swap", ["is_partial_order"]], ["add", "theorem", "swap", ["is_preorder"]], ["add", "theorem", "swap", ["is_refl"]], ["add", "theorem", "swap", ["is_total"]], ["add", "theorem", "swap", ["is_total_preorder"]], ["add", "def", "preimage", ["order"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["del", "def", "directed", []], ["mod", "theorem", "directed_of_chain", []], ["del", "def", "directed_on", []], ["mod", "theorem", "directed_on_Union", []], ["mod", "theorem", "infi_sets_eq'", ["filter"]], ["mod", "theorem", "infi_sets_eq", ["filter"]], ["mod", "theorem", "map_infi_eq", ["filter"]]]}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": [["del", "def", "preimage", ["order"]]]}]}, {"timestamp": 1537465278, "sha": "e0542773", "message": "feat(order/bounded_lattice): eq_top_mono", "changes": [{"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "eq_bot_mono", ["lattice"]], ["add", "theorem", "eq_top_mono", ["lattice"]]]}]}, {"timestamp": 1537465257, "sha": "84024be2", "message": "feat(order/zorn): more zorn's lemma variants", "changes": [{"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": [["add", "theorem", "directed_on", ["zorn", "chain"]], ["add", "theorem", "zorn_subset", ["zorn"]]]}]}, {"timestamp": 1537459207, "sha": "1da8cc51", "message": "feat(analysis/topology/uniform_structure): uniform_space.comap extra\nlemmas", "changes": [{"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "uniform_continuous_iff", []], ["add", "theorem", "comap_comap_comp", ["uniform_space"]], ["add", "theorem", "uniform_space_comap_id", []]]}]}, {"timestamp": 1537440352, "sha": "d0f1b21a", "message": "feat(data/prod): add id_prod", "changes": [{"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["add", "theorem", "id_prod", ["prod"]]]}]}, {"timestamp": 1537356265, "sha": "318ec36d", "message": "feat(group_theory/perm): sign_cycle and sign_bij (#347)", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "units_pow_eq_pow_mod_two", ["int"]], ["add", "theorem", "units_pow_two", ["int"]]]}, {"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["mod", "theorem", "swap_apply_left", ["equiv"]], ["mod", "theorem", "swap_apply_right", ["equiv"]], ["mod", "theorem", "swap_swap", ["equiv"]]]}, {"oldPath": "group_theory/perm.lean", "newPath": "group_theory/perm.lean", "changes": [["add", "theorem", "card_support_swap", ["equiv", "perm"]], ["add", "theorem", "eq_inv_iff_eq", ["equiv", "perm"]], ["add", "theorem", "eq_swap_of_is_cycle_of_apply_apply_eq_self", ["equiv", "perm"]], ["add", "theorem", "exists_int_pow_eq_of_is_cycle", ["equiv", "perm"]], ["add", "theorem", "inv_eq_iff_eq", ["equiv", "perm"]], ["add", "def", "is_cycle", ["equiv", "perm"]], ["add", "theorem", "is_cycle_inv", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap_mul", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap_mul_aux₁", ["equiv", "perm"]], ["add", "theorem", "is_cycle_swap_mul_aux₂", ["equiv", "perm"]], ["add", "theorem", "is_swap_of_subtype", ["equiv", "perm"]], ["add", "theorem", "mem_iff_of_subtype_apply_mem", ["equiv", "perm"]], ["add", "theorem", "mem_support", ["equiv", "perm"]], ["add", "theorem", "mul_swap_eq_swap_mul", ["equiv", "perm"]], ["add", "def", "of_subtype", ["equiv", "perm"]], ["add", "theorem", "of_subtype_apply_of_not_mem", ["equiv", "perm"]], ["add", "theorem", "of_subtype_subtype_perm", ["equiv", "perm"]], ["add", "theorem", "pow_apply_eq_of_apply_apply_eq_self_int", ["equiv", "perm"]], ["add", "theorem", "pow_apply_eq_of_apply_apply_eq_self_nat", ["equiv", "perm"]], ["add", "theorem", "sign_aux3_symm_trans_trans", ["equiv", "perm"]], ["add", "theorem", "sign_bij", ["equiv", "perm"]], ["add", "theorem", "sign_cycle", ["equiv", "perm"]], ["add", "theorem", "sign_eq_sign_of_equiv", ["equiv", "perm"]], ["add", "theorem", "sign_inv", ["equiv", "perm"]], ["add", "theorem", "sign_mul", ["equiv", "perm"]], ["add", "theorem", "sign_of_subtype", ["equiv", "perm"]], ["add", "theorem", "sign_one", ["equiv", "perm"]], ["add", "theorem", "sign_prod_list_swap", ["equiv", "perm"]], ["add", "theorem", "sign_subtype_perm", ["equiv", "perm"]], ["add", "theorem", "sign_symm_trans_trans", ["equiv", "perm"]], ["add", "def", "subtype_perm", ["equiv", "perm"]], ["add", "theorem", "subtype_perm_of_subtype", ["equiv", "perm"]], ["add", "def", "support", ["equiv", "perm"]], ["add", "theorem", "support_swap", ["equiv", "perm"]], ["add", "theorem", "support_swap_mul_cycle", ["equiv", "perm"]], ["add", "theorem", "swap_mul_eq_mul_swap", ["equiv", "perm"]]]}]}, {"timestamp": 1537355941, "sha": "ad9309f7", "message": "feat(data/polynomial): C_inj and dvd_iff_is_root (#359)", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "C_inj", ["polynomial"]], ["add", "theorem", "dvd_iff_is_root", ["polynomial"]]]}]}, {"timestamp": 1537312022, "sha": "ae0da3d3", "message": "feat(algebra/group_power): zero_pow et al\nwritten by Chris Hughes", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "zero_pow", []]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "injective_iff_bijective", ["fintype"]], ["add", "theorem", "surjective_iff_bijective", ["fintype"]]]}]}, {"timestamp": 1537295243, "sha": "61d0c65a", "message": "refactor(ring_theory/matrix): use pi instances", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": []}, {"oldPath": "ring_theory/matrix.lean", "newPath": "ring_theory/matrix.lean", "changes": [["mod", "theorem", "add_val", ["matrix"]], ["mod", "theorem", "neg_val", ["matrix"]], ["mod", "theorem", "zero_val", ["matrix"]]]}]}, {"timestamp": 1537290231, "sha": "5260ab8e", "message": "feat(ring_theory/matrix): diagonal matrices\nJoint work with Johan Commelin", "changes": [{"oldPath": "ring_theory/matrix.lean", "newPath": "ring_theory/matrix.lean", "changes": [["add", "def", "diagonal", ["matrix"]], ["add", "theorem", "diagonal_add", ["matrix"]], ["add", "theorem", "diagonal_mul", ["matrix"]], ["add", "theorem", "diagonal_mul_diagonal'", ["matrix"]], ["add", "theorem", "diagonal_mul_diagonal", ["matrix"]], ["add", "theorem", "diagonal_neg", ["matrix"]], ["add", "theorem", "diagonal_one", ["matrix"]], ["add", "theorem", "diagonal_val_eq", ["matrix"]], ["add", "theorem", "diagonal_val_ne'", ["matrix"]], ["add", "theorem", "diagonal_val_ne", ["matrix"]], ["add", "theorem", "diagonal_zero", ["matrix"]], ["add", "theorem", "mul_diagonal", ["matrix"]], ["add", "theorem", "mul_eq_mul", ["matrix"]], ["mod", "theorem", "mul_val'", ["matrix"]], ["mod", "theorem", "mul_val", ["matrix"]], ["mod", "theorem", "one_val_eq", ["matrix"]], ["mod", "theorem", "one_val_ne'", ["matrix"]], ["mod", "theorem", "one_val_ne", ["matrix"]]]}]}, {"timestamp": 1537276122, "sha": "a72807fa", "message": "feat(ring_theory/matrix): (finally!) adding matrices (#334)\nJoint work by: Ellen Arlt, Blair Shi, Sean Leather, Scott Morrison, Johan Commelin, Kenny Lau, Johannes Hölzl, Mario Carneiro", "changes": [{"oldPath": null, "newPath": "ring_theory/matrix.lean", "changes": [["add", "theorem", "add_mul", ["matrix"]], ["add", "theorem", "add_val", ["matrix"]], ["add", "theorem", "ext", ["matrix"]], ["add", "theorem", "ext_iff", ["matrix"]], ["add", "theorem", "mul_add", ["matrix"]], ["add", "theorem", "mul_val'", ["matrix"]], ["add", "theorem", "mul_val", ["matrix"]], ["add", "theorem", "mul_zero", ["matrix"]], ["add", "theorem", "neg_val", ["matrix"]], ["add", "theorem", "one_val", ["matrix"]], ["add", "theorem", "one_val_eq", ["matrix"]], ["add", "theorem", "one_val_ne'", ["matrix"]], ["add", "theorem", "one_val_ne", ["matrix"]], ["add", "theorem", "zero_mul", ["matrix"]], ["add", "theorem", "zero_val", ["matrix"]], ["add", "def", "matrix", []]]}]}, {"timestamp": 1537284004, "sha": "7dedf3ca", "message": "feat(analysis/topology): injective_separated_pure_cauchy", "changes": [{"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "injective_separated_pure_cauchy", ["Cauchy"]]]}, {"oldPath": "docs/extras/well_founded_recursion.md", "newPath": "docs/extras/well_founded_recursion.md", "changes": []}]}, {"timestamp": 1537195215, "sha": "2e204f29", "message": "feat(category/functor): make `sum` `functor` instance more universe polymorphic", "changes": [{"oldPath": "category/functor.lean", "newPath": "category/functor.lean", "changes": []}]}, {"timestamp": 1537195176, "sha": "9d28f8b6", "message": "feat(tactic/ext): remove lambda abstractions when inferring a type's name", "changes": [{"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}]}, {"timestamp": 1537190746, "sha": "62c69b76", "message": "feat(tactic/linarith): option to prove arbitrary goals by exfalso, enabled by default", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1537185499, "sha": "e9af59de", "message": "feat(algebra/order_functions): add simp rules for min/max_eq_left/right (closes #306)", "changes": [{"oldPath": "algebra/field_power.lean", "newPath": "algebra/field_power.lean", "changes": [["mod", "def", "fpow", []], ["mod", "theorem", "fpow_add", []], ["mod", "theorem", "fpow_inv", []], ["mod", "theorem", "pow_le_max_of_min_le", []]]}, {"oldPath": "algebra/order_functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["mod", "theorem", "min_add", []], ["mod", "theorem", "min_sub", []]]}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "computability/partrec_code.lean", "newPath": "computability/partrec_code.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}]}, {"timestamp": 1537175723, "sha": "cf260cab", "message": "feat(category_theory/*): some lemmas about universes", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": []}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["add", "def", "ulift_down", ["category_theory", "functor"]], ["add", "def", "ulift_up", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "category_theory/natural_isomorphism.lean", "changes": [["add", "def", "ulift_down_up", ["category_theory", "functor"]], ["add", "def", "ulift_up_down", ["category_theory", "functor"]]]}]}, {"timestamp": 1537032609, "sha": "04c4abf1", "message": "fix(algebra/group): fix bit0_zero to use (0 : alpha) not (0 : nat)", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["mod", "theorem", "bit0_zero", []], ["mod", "theorem", "bit1_zero", []]]}]}, {"timestamp": 1537032552, "sha": "39bab47f", "message": "feat(linear_algebra): dimension theorem (#345)\n* dimension theorem\n* more theorems about dimension\n* cardinal stuff\n* fix error\n* move A/S x S = A to quotient_module.lean\n* remove pempty_equiv_empty", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "def", "arrow_punit_equiv_punit", ["equiv"]], ["del", "def", "arrow_unit_equiv_unit", ["equiv"]], ["add", "def", "bool_equiv_punit_sum_punit", ["equiv"]], ["del", "def", "bool_equiv_unit_sum_unit", ["equiv"]], ["add", "def", "empty_arrow_equiv_punit", ["equiv"]], ["del", "def", "empty_arrow_equiv_unit", ["equiv"]], ["add", "def", "empty_equiv_pempty", ["equiv"]], ["add", "def", "equiv_sigma_subtype", ["equiv"]], ["add", "def", "false_arrow_equiv_punit", ["equiv"]], ["del", "def", "false_arrow_equiv_unit", ["equiv"]], ["add", "def", "nat_equiv_nat_sum_punit", ["equiv"]], ["del", "def", "nat_equiv_nat_sum_unit", ["equiv"]], ["add", "def", "nat_sum_punit_equiv_nat", ["equiv"]], ["del", "def", "nat_sum_unit_equiv_nat", ["equiv"]], ["add", "def", "option_equiv_sum_punit", ["equiv"]], ["del", "def", "option_equiv_sum_unit", ["equiv"]], ["add", "def", "pempty_arrow_equiv_punit", ["equiv"]], ["del", "def", "pempty_arrow_equiv_unit", ["equiv"]], ["add", "def", "pempty_of_not_nonempty", ["equiv"]], ["add", "def", "prod_punit", ["equiv"]], ["add", "theorem", "prod_punit_apply", ["equiv"]], ["del", "def", "prod_unit", ["equiv"]], ["del", "theorem", "prod_unit_apply", ["equiv"]], ["add", "def", "punit_arrow_equiv", ["equiv"]], ["add", "def", "punit_prod", ["equiv"]], ["add", "theorem", "punit_prod_apply", ["equiv"]], ["add", "def", "true_equiv_punit", ["equiv"]], ["del", "def", "unit_arrow_equiv", ["equiv"]], ["del", "def", "unit_prod", ["equiv"]], ["del", "theorem", "unit_prod_apply", ["equiv"]]]}, {"oldPath": "data/equiv/encodable.lean", "newPath": "data/equiv/encodable.lean", "changes": []}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_punit", ["fintype"]], ["add", "theorem", "univ_punit", ["fintype"]]]}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": [["add", "theorem", "linear_equiv", ["is_basis"]]]}, {"oldPath": "linear_algebra/dimension.lean", "newPath": "linear_algebra/dimension.lean", "changes": [["add", "theorem", "basis_le_span", ["vector_space"]], ["add", "theorem", "dim_eq_of_linear_equiv", ["vector_space"]], ["add", "theorem", "dim_im_add_dim_ker", ["vector_space"]], ["add", "theorem", "dim_prod", ["vector_space"]], ["add", "theorem", "dim_quotient", ["vector_space"]], ["add", "theorem", "mk_basis", ["vector_space"]], ["add", "theorem", "mk_eq_mk_of_basis", ["vector_space"]]]}, {"oldPath": "linear_algebra/quotient_module.lean", "newPath": "linear_algebra/quotient_module.lean", "changes": [["add", "theorem", "quotient_prod_linear_equiv", ["quotient_module"]]]}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["add", "theorem", "finset_card", ["cardinal"]], ["add", "theorem", "mk_Prop", ["cardinal"]], ["add", "theorem", "mk_Union_le_sum_mk", ["cardinal"]], ["add", "theorem", "mk_bool", ["cardinal"]], ["add", "theorem", "mk_empty'", ["cardinal"]], ["add", "theorem", "mk_empty", ["cardinal"]], ["add", "theorem", "mk_eq_of_injective", ["cardinal"]], ["add", "theorem", "mk_list_eq_sum_pow", ["cardinal"]], ["add", "theorem", "mk_option", ["cardinal"]], ["add", "theorem", "mk_pempty", ["cardinal"]], ["add", "theorem", "mk_plift_false", ["cardinal"]], ["add", "theorem", "mk_plift_true", ["cardinal"]], ["add", "theorem", "mk_punit", ["cardinal"]], ["add", "theorem", "mk_singleton", ["cardinal"]], ["add", "theorem", "mk_union_add_mk_inter", ["cardinal"]], ["add", "theorem", "mk_union_of_disjiont", ["cardinal"]], ["add", "theorem", "mk_unit", ["cardinal"]]]}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["add", "theorem", "mk_list_eq_mk", ["cardinal"]], ["add", "theorem", "pow_le", ["cardinal"]]]}]}, {"timestamp": 1536937078, "sha": "52bc8b69", "message": "fix(analysis/normed_space): Add instance showing that normed field is a normed space over itself", "changes": [{"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": []}]}, {"timestamp": 1536936693, "sha": "9daf78bc", "message": "feat(tactic/linarith): basic support for nat (#343)\n* feat(tactic/linarith): basic support for nats\n* fix(tactic/linarith): typo", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": [["add", "theorem", "coe_nat_bit0", ["linarith", "int"]], ["add", "theorem", "coe_nat_bit1", ["linarith", "int"]], ["add", "theorem", "nat_eq_subst", ["linarith"]], ["add", "theorem", "nat_le_subst", ["linarith"]], ["add", "theorem", "nat_lt_subst", ["linarith"]]]}, {"oldPath": "tests/linarith.lean", "newPath": "tests/linarith.lean", "changes": []}]}, {"timestamp": 1536936462, "sha": "21233b7a", "message": "fix(category_theory/*): several minor fixes, preparatory to presheaves (#342)\n* fix(category_theory/*): several minor fixes, preparatory to PR’ing the category of presheaves\nIn category.lean, better proofs in `instance [preorder α] : small_category α := …`.\nIn natural_isomorphism.lean, some rfl lemmas, natural isomorphisms describing functor composition, and formatting\nIn examples/topological_spaces.lean, deciding to reverse the arrows in `open_set X` (the category of open sets, with restrictions), to reduce using opposites later, as well as describing the functoriality of `open_set`.\n* additional simp lemmas", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["add", "theorem", "concrete_category_comp", ["category_theory"]], ["add", "theorem", "concrete_category_id", ["category_theory"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["add", "def", "map", ["category_theory", "examples", "open_set"]], ["add", "def", "map_id", ["category_theory", "examples", "open_set"]], ["add", "theorem", "map_id_obj", ["category_theory", "examples", "open_set"]], ["add", "def", "map_iso", ["category_theory", "examples", "open_set"]], ["add", "def", "map_iso_id", ["category_theory", "examples", "open_set"]], ["mod", "def", "nbhd", ["category_theory", "examples", "open_set"]], ["mod", "def", "nbhds", ["category_theory", "examples", "open_set"]], ["mod", "structure", "open_set", ["category_theory", "examples"]]]}, {"oldPath": "category_theory/natural_isomorphism.lean", "newPath": "category_theory/natural_isomorphism.lean", "changes": [["add", "def", "assoc", ["category_theory", "functor"]], ["add", "def", "comp_id", ["category_theory", "functor"]], ["add", "def", "id_comp", ["category_theory", "functor"]], ["add", "theorem", "mk_app'", ["category_theory", "nat_iso"]], ["add", "theorem", "mk_app", ["category_theory", "nat_iso"]], ["mod", "theorem", "naturality_1", ["category_theory", "nat_iso"]], ["mod", "theorem", "naturality_2", ["category_theory", "nat_iso"]], ["add", "def", "app", ["category_theory", "nat_iso", "of_components"]], ["add", "def", "hom_app", ["category_theory", "nat_iso", "of_components"]], ["add", "def", "inv_app", ["category_theory", "nat_iso", "of_components"]], ["mod", "def", "of_components", ["category_theory", "nat_iso"]]]}]}, {"timestamp": 1536846172, "sha": "a770ee5a", "message": "fix(data/padics/padic_rationals): fix proof", "changes": [{"oldPath": "data/padics/padic_rationals.lean", "newPath": "data/padics/padic_rationals.lean", "changes": [["mod", "theorem", "cast_eq_of_rat", ["padic"]], ["mod", "theorem", "complete", ["padic"]], ["mod", "theorem", "exi_rat_seq_conv", ["padic"]], ["mod", "def", "mk", ["padic"]], ["mod", "theorem", "rat_dense", ["padic"]], ["mod", "theorem", "nonarchimedean", ["padic_norm_e"]], ["mod", "theorem", "sub_rev", ["padic_norm_e"]], ["mod", "theorem", "zero_def", ["padic_norm_e"]], ["mod", "def", "padic_norm_e", []], ["mod", "theorem", "norm_equiv", ["padic_seq"]], ["mod", "theorem", "norm_nonzero_of_not_equiv_zero", ["padic_seq"]], ["mod", "theorem", "stationary", ["padic_seq"]]]}]}, {"timestamp": 1536841722, "sha": "46502df9", "message": "feat(algebra/ordered_ring): mul_self_pos", "changes": [{"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["mod", "theorem", "mul_le_one", []], ["add", "theorem", "mul_self_pos", []]]}]}, {"timestamp": 1536840461, "sha": "bebe1707", "message": "feat(data/int/order): delete int.order and prove all commented out lemmas (#348)", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_succ_pos", ["int"]], ["add", "theorem", "units_inv_eq_self", ["int"]]]}, {"oldPath": "data/int/order.lean", "newPath": null, "changes": [["del", "theorem", "le_of_of_nat_le_of_nat", ["int"]], ["del", "theorem", "of_nat_le_of_nat_of_le", ["int"]]]}]}, {"timestamp": 1536671107, "sha": "12063562", "message": "fix(doc/tactics): fix typo in documentation of `ext`", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1536662433, "sha": "36a82cb5", "message": "feat(tactic/ext): use `rcases` patterns to intro `ext` variables", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/pi_instances.lean", "newPath": "tactic/pi_instances.lean", "changes": []}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1536660479, "sha": "ffc6bc07", "message": "feat(tactic/ext): add support for propext", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}]}, {"timestamp": 1536660479, "sha": "c25ca3b5", "message": "feat(tactic/ext): address reviewers' comments", "changes": [{"oldPath": "core/data/list.lean", "newPath": "core/data/list.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}]}, {"timestamp": 1536660479, "sha": "4e3b89c3", "message": "feat(tactic/ext): make the attribute incremental", "changes": [{"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": []}, {"oldPath": null, "newPath": "core/data/list.lean", "changes": [["add", "def", "partition_map", ["list"]]]}, {"oldPath": null, "newPath": "core/default.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "erase_diff_erase_sublist_of_sublist", ["list"]], ["mod", "theorem", "index_of_eq_length", ["list"]]]}, {"oldPath": "data/sum.lean", "newPath": "data/sum.lean", "changes": [["add", "def", "map", ["sum"]]]}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": [["add", "def", "ext_param_type", []]]}, {"oldPath": "tactic/pi_instances.lean", "newPath": "tactic/pi_instances.lean", "changes": []}]}, {"timestamp": 1536660479, "sha": "6557f513", "message": "feat(tactic/ext): add indexing of extensionality lemmas", "changes": [{"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["mod", "def", "inv", ["category_theory"]], ["mod", "def", "hom_inv_id", ["category_theory", "is_iso"]], ["mod", "def", "inv_hom_id", ["category_theory", "is_iso"]], ["mod", "theorem", "hom_inv_id", ["category_theory", "iso"]], ["mod", "theorem", "inv_hom_id", ["category_theory", "iso"]], ["mod", "def", "refl", ["category_theory", "iso"]], ["mod", "def", "symm", ["category_theory", "iso"]], ["mod", "def", "trans", ["category_theory", "iso"]]]}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}]}, {"timestamp": 1536660479, "sha": "4efdbdb0", "message": "feat(tactic/ext): match extensionality lemma more exactly", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1536660439, "sha": "ba7bd742", "message": "feat(category_theory): Yoneda, basic facts about natural isomorphisms, and an extensionality lemma using Yoneda lemma (#326)\n* feat(category_theory/yoneda_lemma)\n* feat(category_theory/natural_isomorphisms): basic facts about natural isomorphisms, and an extensionality lemma using Yoneda", "changes": [{"oldPath": null, "newPath": "category_theory/natural_isomorphism.lean", "changes": [["add", "def", "app", ["category_theory", "nat_iso"]], ["add", "theorem", "comp_app", ["category_theory", "nat_iso"]], ["add", "theorem", "hom_eq_coe", ["category_theory", "nat_iso"]], ["add", "theorem", "inv_eq_symm_coe", ["category_theory", "nat_iso"]], ["add", "theorem", "naturality_1", ["category_theory", "nat_iso"]], ["add", "theorem", "naturality_2", ["category_theory", "nat_iso"]], ["add", "def", "of_components", ["category_theory", "nat_iso"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": [["add", "theorem", "iso_mk_coe", ["category_theory", "types"]]]}, {"oldPath": null, "newPath": "category_theory/yoneda.lean", "changes": [["add", "def", "ext", ["category_theory", "yoneda"]], ["add", "theorem", "map_app", ["category_theory", "yoneda"]], ["add", "theorem", "naturality", ["category_theory", "yoneda"]], ["add", "theorem", "obj_map", ["category_theory", "yoneda"]], ["add", "theorem", "obj_map_id", ["category_theory", "yoneda"]], ["add", "theorem", "obj_obj", ["category_theory", "yoneda"]], ["add", "def", "yoneda", ["category_theory"]], ["add", "def", "yoneda_evaluation", ["category_theory"]], ["add", "theorem", "yoneda_evaluation_map_down", ["category_theory"]], ["add", "def", "yoneda_lemma", ["category_theory"]], ["add", "def", "yoneda_pairing", ["category_theory"]], ["add", "theorem", "yoneda_pairing_map", ["category_theory"]]]}]}, {"timestamp": 1536612608, "sha": "40a365ac", "message": "feat(tactic/replacer): add support for parameters in replacer", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/replacer.lean", "newPath": "tactic/replacer.lean", "changes": []}, {"oldPath": "tests/replacer.lean", "newPath": "tests/replacer.lean", "changes": []}]}, {"timestamp": 1536619583, "sha": "a7995c96", "message": "fix(set_theory/cofinality): fix type of omega_is_regular", "changes": [{"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": [["mod", "theorem", "omega_is_regular", ["cardinal"]]]}]}, {"timestamp": 1536619482, "sha": "0e069447", "message": "feat(data/equiv/basic): quot_equiv_of_quot(')\nquot_equiv_of_quot matches matches the existing subtype_equiv_of_subtype,\nbut quot_equiv_of_quot' is useful in practice and this definition is careful\nto use eq.rec only in proofs.", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "def", "quot_equiv_of_quot'", ["equiv"]], ["add", "def", "quot_equiv_of_quot", ["equiv"]]]}]}, {"timestamp": 1536619231, "sha": "61f4827d", "message": "fix(logic/basic): remove unnecessary hypothesis from proof_irrel_heq", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["mod", "theorem", "proof_irrel_heq", []]]}]}, {"timestamp": 1536587875, "sha": "b33764d9", "message": "feat(algebra/module): semimodules", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "add_smul'", []], ["add", "theorem", "mul_smul'", []], ["mod", "theorem", "mul_smul", []], ["add", "theorem", "one_smul'", []], ["add", "theorem", "smul_add'", []], ["add", "theorem", "smul_eq_mul'", []], ["add", "theorem", "smul_smul'", []], ["add", "theorem", "smul_zero'", []], ["add", "theorem", "zero_smul'", []]]}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": [["del", "theorem", "add_smul", ["measure_theory", "outer_measure"]], ["del", "theorem", "mul_smul", ["measure_theory", "outer_measure"]], ["del", "theorem", "one_smul", ["measure_theory", "outer_measure"]], ["del", "def", "smul", ["measure_theory", "outer_measure"]], ["del", "theorem", "smul_add", ["measure_theory", "outer_measure"]], ["del", "theorem", "smul_zero", ["measure_theory", "outer_measure"]], ["del", "theorem", "zero_smul", ["measure_theory", "outer_measure"]]]}, {"oldPath": "tactic/abel.lean", "newPath": "tactic/abel.lean", "changes": []}]}, {"timestamp": 1536549838, "sha": "56c4919a", "message": "feat(tactic/abel): decision procedure for comm groups", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "gsmul_add", []], ["add", "theorem", "gsmul_zero", []], ["add", "theorem", "mul_gpow", []], ["mod", "theorem", "one_gpow", []]]}, {"oldPath": null, "newPath": "tactic/abel.lean", "changes": [["add", "theorem", "const_add_term", ["tactic", "abel"]], ["add", "theorem", "const_add_termg", ["tactic", "abel"]], ["add", "inductive", "normalize_mode", ["tactic", "abel"]], ["add", "def", "smul", ["tactic", "abel"]], ["add", "def", "smulg", ["tactic", "abel"]], ["add", "theorem", "subst_into_smul", ["tactic", "abel"]], ["add", "theorem", "subst_into_smulg", ["tactic", "abel"]], ["add", "def", "term", ["tactic", "abel"]], ["add", "theorem", "term_add_const", ["tactic", "abel"]], ["add", "theorem", "term_add_constg", ["tactic", "abel"]], ["add", "theorem", "term_add_term", ["tactic", "abel"]], ["add", "theorem", "term_add_termg", ["tactic", "abel"]], ["add", "theorem", "term_atom", ["tactic", "abel"]], ["add", "theorem", "term_atomg", ["tactic", "abel"]], ["add", "theorem", "term_neg", ["tactic", "abel"]], ["add", "theorem", "term_smul", ["tactic", "abel"]], ["add", "theorem", "term_smulg", ["tactic", "abel"]], ["add", "def", "termg", ["tactic", "abel"]], ["add", "theorem", "unfold_gsmul", ["tactic", "abel"]], ["add", "theorem", "unfold_smul", ["tactic", "abel"]], ["add", "theorem", "unfold_smulg", ["tactic", "abel"]], ["add", "theorem", "unfold_sub", ["tactic", "abel"]], ["add", "theorem", "zero_smul", ["tactic", "abel"]], ["add", "theorem", "zero_smulg", ["tactic", "abel"]], ["add", "theorem", "zero_term", ["tactic", "abel"]], ["add", "theorem", "zero_termg", ["tactic", "abel"]]]}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": [["add", "theorem", "subst_into_neg", ["norm_num"]]]}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": [["del", "def", "horner", []], ["mod", "theorem", "add_neg_eq_sub", ["tactic", "ring"]], ["add", "def", "horner", ["tactic", "ring"]], ["del", "theorem", "subst_into_neg", ["tactic", "ring"]]]}, {"oldPath": "tactic/ring2.lean", "newPath": "tactic/ring2.lean", "changes": []}]}, {"timestamp": 1536535439, "sha": "f10e7adb", "message": "refactor(tactic/ring): remove unnecessary rat from horner_expr", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}]}, {"timestamp": 1536535433, "sha": "eab064e8", "message": "refactor(tactic/ring): use horner_expr instead of destruct on expr", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}]}, {"timestamp": 1536535425, "sha": "484afdf3", "message": "test(tests/ring): add test file for ring", "changes": [{"oldPath": "tests/linarith_tests.lean", "newPath": "tests/linarith.lean", "changes": []}, {"oldPath": null, "newPath": "tests/ring.lean", "changes": []}]}, {"timestamp": 1536525905, "sha": "181905e0", "message": "refactor(tactic/linarith): refactoring", "changes": [{"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": []}, {"oldPath": "meta/rb_map.lean", "newPath": "meta/rb_map.lean", "changes": []}, {"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": [["mod", "theorem", "add_subst", ["linarith"]], ["del", "def", "alist_lt", ["linarith"]], ["mod", "def", "is_lt", ["linarith", "ineq"]], ["mod", "def", "to_string", ["linarith", "ineq"]], ["mod", "theorem", "mul_subst", ["linarith"]], ["del", "def", "reduce_pair_option", ["linarith"]], ["mod", "theorem", "sub_subst", ["linarith"]]]}]}, {"timestamp": 1536518067, "sha": "4be1ef1a", "message": "fix", "changes": [{"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": []}]}, {"timestamp": 1536518067, "sha": "5b7edecf", "message": "feat(category_theory): redesign of concrete categories\nAlso exercising it further with `def forget_to_Mon : CommRing ⥤ Mon := …`", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["add", "structure", "bundled", ["category_theory"]], ["mod", "structure", "concrete_category", ["category_theory"]], ["add", "def", "mk_ob", ["category_theory"]]]}, {"oldPath": "category_theory/embedding.lean", "newPath": "category_theory/embedding.lean", "changes": [["add", "theorem", "image_preimage", ["category_theory", "functor"]], ["add", "def", "injectivity", ["category_theory", "functor"]], ["add", "def", "preimage", ["category_theory", "functor"]], ["del", "theorem", "image_preimage", ["category_theory"]], ["del", "def", "preimage", ["category_theory"]], ["mod", "theorem", "preimage_iso_coe", ["category_theory"]], ["mod", "theorem", "preimage_iso_symm_coe", ["category_theory"]]]}, {"oldPath": "category_theory/examples/measurable_space.lean", "newPath": "category_theory/examples/measurable_space.lean", "changes": [["mod", "def", "Meas", ["category_theory", "examples"]]]}, {"oldPath": null, "newPath": "category_theory/examples/monoids.lean", "changes": [["add", "def", "forget_to_Mon", ["category_theory", "examples", "CommMon"]], ["add", "def", "CommMon", ["category_theory", "examples"]], ["add", "def", "Mon", ["category_theory", "examples"]], ["add", "def", "is_comm_monoid_hom", ["category_theory", "examples"]]]}, {"oldPath": "category_theory/examples/rings.lean", "newPath": "category_theory/examples/rings.lean", "changes": [["add", "def", "forget_to_CommMon", ["category_theory", "examples", "CommRing"]], ["add", "def", "CommRing", ["category_theory", "examples"]], ["add", "def", "Ring", ["category_theory", "examples"]], ["del", "theorem", "map_add", ["category_theory", "examples", "comm_ring_hom"]], ["del", "theorem", "map_mul", ["category_theory", "examples", "comm_ring_hom"]], ["del", "theorem", "map_one", ["category_theory", "examples", "comm_ring_hom"]], ["del", "def", "{u}", ["category_theory", "examples"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["mod", "def", "Top", ["category_theory", "examples"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["add", "def", "map", ["category_theory", "bundled"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": [["mod", "def", "forget", ["category_theory"]]]}]}, {"timestamp": 1536517922, "sha": "aaa113a9", "message": "fix(tactic/linarith): improve earlier fix", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith_tests.lean", "newPath": "tests/linarith_tests.lean", "changes": []}]}, {"timestamp": 1536517922, "sha": "fa747b08", "message": "fix(tactic/linarith): proper handling of 0 coefficients in input", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": []}]}, {"timestamp": 1536517922, "sha": "675c2357", "message": "fix(tactic/linarith): make more use of equality hypotheses", "changes": [{"oldPath": "tactic/linarith.lean", "newPath": "tactic/linarith.lean", "changes": []}, {"oldPath": "tests/linarith_tests.lean", "newPath": "tests/linarith_tests.lean", "changes": []}]}, {"timestamp": 1536505278, "sha": "53cc7ced", "message": "refactor(data/polynomial): generalize leading_coeff_X_pow (#329)\nGeneralize `leading_coeff_X_pow` to `comm_semiring`", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}]}, {"timestamp": 1536434706, "sha": "fc1fd3dc", "message": "feat(set_theory/cofinality): sum_lt_of_is_regular", "changes": [{"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["mod", "theorem", "sup_le", ["cardinal"]]]}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": [["add", "theorem", "sum_lt_of_is_regular", ["cardinal"]], ["add", "theorem", "sup_lt_of_is_regular", ["cardinal"]]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["add", "theorem", "add_lt_of_lt", ["cardinal"]], ["add", "theorem", "mul_lt_of_lt", ["cardinal"]], ["add", "theorem", "sup_ord", ["ordinal"]]]}]}, {"timestamp": 1536440061, "sha": "73abe2e1", "message": "fix(category_theory/products): fix types of inl/inr/fst/snd (#320)", "changes": [{"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["mod", "def", "fst", ["category_theory", "prod"]], ["mod", "def", "inl", ["category_theory", "prod"]], ["mod", "def", "inr", ["category_theory", "prod"]], ["mod", "def", "snd", ["category_theory", "prod"]]]}]}, {"timestamp": 1536437846, "sha": "5613d2ec", "message": "feat(tactic): add support for quotients to rcases", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["mod", "theorem", "continuous_multiset_sum", []], ["mod", "theorem", "tendsto_multiset_sum", []]]}, {"oldPath": "data/equiv/encodable.lean", "newPath": "data/equiv/encodable.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "cons_inj_right", ["multiset"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["mod", "theorem", "exact'", ["quotient"]]]}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "group_theory/free_group.lean", "newPath": "group_theory/free_group.lean", "changes": [["mod", "def", "inj", ["free_group", "to_word"]], ["mod", "def", "mk", ["free_group", "to_word"]]]}, {"oldPath": "ring_theory/associated.lean", "newPath": "ring_theory/associated.lean", "changes": [["mod", "theorem", "mul_zero", ["associates"]], ["mod", "theorem", "zero_mul", ["associates"]]]}, {"oldPath": "ring_theory/unique_factorization_domain.lean", "newPath": "ring_theory/unique_factorization_domain.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["mod", "theorem", "add_le_add", ["cardinal"]], ["mod", "theorem", "cantor", ["cardinal"]], ["mod", "theorem", "mul_le_mul", ["cardinal"]], ["mod", "theorem", "power_le_power_left", ["cardinal"]], ["mod", "theorem", "zero_le", ["cardinal"]]]}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}]}, {"timestamp": 1536407046, "sha": "1b9b1396", "message": "refactor(linear_algebra/prod_module): move prod.ring (#322)", "changes": [{"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": []}, {"oldPath": "linear_algebra/prod_module.lean", "newPath": "linear_algebra/prod_module.lean", "changes": []}]}, {"timestamp": 1536342236, "sha": "5aa65d6d", "message": "order(filter): rename `vmap` to `comap`", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "nhds_comap_dist", []], ["del", "theorem", "nhds_vmap_dist", []]]}, {"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "comap_nhds_neq_bot", ["dense_embedding"]], ["add", "theorem", "tendsto_comap_nhds_nhds", ["dense_embedding"]], ["del", "theorem", "tendsto_vmap_nhds_nhds", ["dense_embedding"]], ["del", "theorem", "vmap_nhds_neq_bot", ["dense_embedding"]], ["add", "theorem", "nhds_induced_eq_comap", []], ["del", "theorem", "nhds_induced_eq_vmap", []], ["add", "theorem", "nhds_subtype_eq_comap", []], ["del", "theorem", "nhds_subtype_eq_vmap", []]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["mod", "theorem", "map_neg", ["filter"]]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "cauchy_comap", []], ["del", "theorem", "cauchy_vmap", []], ["add", "theorem", "comap_quotient_eq_uniformity", []], ["add", "theorem", "comap_quotient_le_uniformity", []], ["mod", "theorem", "eq_of_separated_of_uniform_continuous", []], ["add", "theorem", "nhds_eq_comap_uniformity", []], ["del", "theorem", "nhds_eq_vmap_uniformity", []], ["mod", "theorem", "separated_of_uniform_continuous", []], ["add", "theorem", "to_topological_space_comap", []], ["del", "theorem", "to_topological_space_vmap", []], ["mod", "theorem", "prod_mk", ["uniform_continuous"]], ["add", "theorem", "uniform_continuous_comap'", []], ["add", "theorem", "uniform_continuous_comap", []], ["del", "theorem", "uniform_continuous_vmap'", []], ["del", "theorem", "uniform_continuous_vmap", []], ["add", "def", "comap", ["uniform_space"]], ["del", "def", "vmap", ["uniform_space"]], ["del", "theorem", "vmap_quotient_eq_uniformity", []], ["del", "theorem", "vmap_quotient_le_uniformity", []]]}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "def", "comap", ["filter"]], ["add", "theorem", "comap_bot", ["filter"]], ["add", "theorem", "comap_comap_comp", ["filter"]], ["add", "theorem", "comap_eq_lift'", ["filter"]], ["add", "theorem", "comap_eq_of_inverse", ["filter"]], ["add", "theorem", "comap_id", ["filter"]], ["add", "theorem", "comap_inf", ["filter"]], ["add", "theorem", "comap_infi", ["filter"]], ["add", "theorem", "comap_lift'_eq2", ["filter"]], ["add", "theorem", "comap_lift'_eq", ["filter"]], ["add", "theorem", "comap_lift_eq2", ["filter"]], ["add", "theorem", "comap_lift_eq", ["filter"]], ["add", "theorem", "comap_map", ["filter"]], ["add", "theorem", "comap_mono", ["filter"]], ["add", "theorem", "comap_neq_bot", ["filter"]], ["add", "theorem", "comap_neq_bot_of_surj", ["filter"]], ["add", "theorem", "comap_principal", ["filter"]], ["add", "theorem", "comap_sup", ["filter"]], ["add", "theorem", "comap_top", ["filter"]], ["add", "theorem", "gc_map_comap", ["filter"]], ["del", "theorem", "gc_map_vmap", ["filter"]], ["add", "theorem", "le_comap_map", ["filter"]], ["add", "theorem", "le_map_comap'", ["filter"]], ["add", "theorem", "le_map_comap", ["filter"]], ["del", "theorem", "le_map_vmap'", ["filter"]], ["del", "theorem", "le_map_vmap", ["filter"]], ["del", "theorem", "le_vmap_map", ["filter"]], ["mod", "theorem", "map_bot", ["filter"]], ["add", "theorem", "map_comap_le", ["filter"]], ["add", "theorem", "map_eq_comap_of_inverse", ["filter"]], ["del", "theorem", "map_eq_vmap_of_inverse", ["filter"]], ["add", "theorem", "map_le_iff_le_comap", ["filter"]], ["del", "theorem", "map_le_iff_le_vmap", ["filter"]], ["mod", "theorem", "map_mono", ["filter"]], ["mod", "theorem", "map_sup", ["filter"]], ["add", "theorem", "map_swap_eq_comap_swap", ["filter"]], ["del", "theorem", "map_swap_eq_vmap_swap", ["filter"]], ["del", "theorem", "map_vmap_le", ["filter"]], ["add", "theorem", "mem_comap_sets", ["filter"]], ["del", "theorem", "mem_vmap_sets", ["filter"]], ["add", "theorem", "monotone_comap", ["filter"]], ["del", "theorem", "monotone_vmap", ["filter"]], ["add", "theorem", "preimage_mem_comap", ["filter"]], ["del", "theorem", "preimage_mem_vmap", ["filter"]], ["add", "theorem", "prod_comap_comap_eq", ["filter"]], ["mod", "theorem", "prod_comm'", ["filter"]], ["del", "theorem", "prod_vmap_vmap_eq", ["filter"]], ["add", "theorem", "sInter_comap_sets", ["filter"]], ["del", "theorem", "sInter_vmap_sets", ["filter"]], ["add", "theorem", "tendsto_comap''", ["filter"]], ["add", "theorem", "tendsto_comap", ["filter"]], ["add", "theorem", "tendsto_comap_iff", ["filter"]], ["add", "theorem", "tendsto_iff_comap", ["filter"]], ["del", "theorem", "tendsto_iff_vmap", ["filter"]], ["del", "theorem", "tendsto_vmap''", ["filter"]], ["del", "theorem", "tendsto_vmap", ["filter"]], ["del", "theorem", "tendsto_vmap_iff", ["filter"]], ["del", "def", "vmap", ["filter"]], ["del", "theorem", "vmap_bot", ["filter"]], ["del", "theorem", "vmap_eq_lift'", ["filter"]], ["del", "theorem", "vmap_eq_of_inverse", ["filter"]], ["del", "theorem", "vmap_id", ["filter"]], ["del", "theorem", "vmap_inf", ["filter"]], ["del", "theorem", "vmap_infi", ["filter"]], ["del", "theorem", "vmap_lift'_eq2", ["filter"]], ["del", "theorem", "vmap_lift'_eq", ["filter"]], ["del", "theorem", "vmap_lift_eq2", ["filter"]], ["del", "theorem", "vmap_lift_eq", ["filter"]], ["del", "theorem", "vmap_map", ["filter"]], ["del", "theorem", "vmap_mono", ["filter"]], ["del", "theorem", "vmap_neq_bot", ["filter"]], ["del", "theorem", "vmap_neq_bot_of_surj", ["filter"]], ["del", "theorem", "vmap_principal", ["filter"]], ["del", "theorem", "vmap_sup", ["filter"]], ["del", "theorem", "vmap_top", ["filter"]], ["del", "theorem", "vmap_vmap_comp", ["filter"]]]}]}, {"timestamp": 1536341543, "sha": "2524dbad", "message": "fix(algebra/big_operators): change name of `sum_attach` to `finset.sum_attach`", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}]}, {"timestamp": 1536341425, "sha": "8f893244", "message": "style(linear_algebra/submodule): changed import order; added product construction", "changes": [{"oldPath": "linear_algebra/submodule.lean", "newPath": "linear_algebra/submodule.lean", "changes": [["add", "theorem", "coe_prod", ["submodule"]], ["add", "def", "prod", ["submodule"]]]}]}, {"timestamp": 1536341425, "sha": "085c0125", "message": "refactor(linear_algebra, ring_theory): rework submodules; move them to linear_algebra", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_eq_image", ["set"]], ["add", "theorem", "image_subset_image_iff", ["set"]], ["add", "theorem", "injective_image", ["set"]], ["add", "theorem", "preimage_eq_preimage", ["set"]], ["del", "theorem", "exists", ["set", "set_coe"]], ["del", "theorem", "forall", ["set", "set_coe"]], ["del", "theorem", "set_coe_cast", ["set"]], ["mod", "theorem", "set_coe_eq_subtype", ["set"]], ["add", "theorem", "surjective_preimage", ["set"]], ["add", "theorem", "exists", ["set_coe"]], ["add", "theorem", "ext", ["set_coe"]], ["add", "theorem", "ext_iff", ["set_coe"]], ["add", "theorem", "forall", ["set_coe"]], ["add", "theorem", "set_coe_cast", []], ["add", "theorem", "mem", ["subtype"]]]}, {"oldPath": "linear_algebra/linear_map_module.lean", "newPath": "linear_algebra/linear_map_module.lean", "changes": [["del", "theorem", "some_spec2", ["classical"]]]}, {"oldPath": "linear_algebra/quotient_module.lean", "newPath": "linear_algebra/quotient_module.lean", "changes": [["add", "theorem", "coe_eq_zero", ["quotient_module"]]]}, {"oldPath": null, "newPath": "linear_algebra/submodule.lean", "changes": [["add", "theorem", "Union_set_of_directed", ["submodule"]], ["add", "theorem", "bot_set", ["submodule"]], ["add", "theorem", "coe_comap", ["submodule"]], ["add", "theorem", "coe_map", ["submodule"]], ["add", "def", "comap", ["submodule"]], ["add", "theorem", "comap_comp", ["submodule"]], ["add", "theorem", "comap_id", ["submodule"]], ["add", "theorem", "comap_map_eq", ["submodule"]], ["add", "def", "order_iso", ["submodule", "comap_quotient"]], ["add", "def", "comap_quotient", ["submodule"]], ["add", "theorem", "ext", ["submodule"]], ["add", "theorem", "injective_comap", ["submodule"]], ["add", "theorem", "injective_map", ["submodule"]], ["add", "def", "lt_order_embedding", ["submodule"]], ["add", "def", "map", ["submodule"]], ["add", "theorem", "map_comp", ["submodule"]], ["add", "theorem", "map_id", ["submodule"]], ["add", "def", "le_order_embedding", ["submodule", "map_subtype"]], ["add", "def", "order_iso", ["submodule", "map_subtype"]], ["add", "def", "map_subtype", ["submodule"]], ["add", "theorem", "map_subtype_embedding_eq", ["submodule"]], ["add", "theorem", "map_subtype_subset", ["submodule"]], ["add", "theorem", "mem_coe", ["submodule"]], ["add", "theorem", "sInter_set", ["submodule"]], ["add", "def", "span", ["submodule"]], ["add", "theorem", "span_empty", ["submodule"]], ["add", "theorem", "span_subset_iff", ["submodule"]], ["add", "theorem", "span_union", ["submodule"]], ["add", "def", "submodule_lt_equiv", ["submodule"]], ["add", "theorem", "subset_comap_quotient", ["submodule"]], ["add", "theorem", "top_set", ["submodule"]], ["add", "structure", "{u", []]]}, {"oldPath": "linear_algebra/subtype_module.lean", "newPath": "linear_algebra/subtype_module.lean", "changes": [["del", "theorem", "add_val", []], ["del", "theorem", "is_linear_map_subtype_mk", []], ["del", "theorem", "is_linear_map_subtype_val", []], ["add", "theorem", "coe_add", ["is_submodule"]], ["add", "theorem", "coe_neg", ["is_submodule"]], ["add", "theorem", "coe_smul", ["is_submodule"]], ["add", "theorem", "coe_zero", ["is_submodule"]], ["add", "theorem", "is_linear_map_coe", ["is_submodule"]], ["del", "theorem", "is_linear_map_inclusion", ["is_submodule"]], ["add", "theorem", "is_linear_map_subtype_mk", ["is_submodule"]], ["add", "theorem", "is_linear_map_subtype_val", ["is_submodule"]], ["add", "theorem", "sub_val", ["is_submodule"]], ["del", "theorem", "neg_val", []], ["del", "theorem", "smul_val", []], ["del", "theorem", "sub_val", []], ["del", "theorem", "zero_val", []]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "some_spec2", ["classical"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "def", "lift", ["linear_order"]], ["add", "def", "lift", ["partial_order"]], ["add", "def", "lift", ["preorder"]]]}, {"oldPath": "ring_theory/correspondence_theorem.lean", "newPath": null, "changes": []}, {"oldPath": "ring_theory/noetherian.lean", "newPath": "ring_theory/noetherian.lean", "changes": [["del", "def", "univ", ["submodule"]]]}, {"oldPath": "ring_theory/submodule.lean", "newPath": null, "changes": [["del", "theorem", "Union_set_of_directed", ["submodule"]], ["del", "theorem", "bot_set", ["submodule"]], ["del", "theorem", "embedding_eq", ["submodule"]], ["del", "theorem", "eq", ["submodule"]], ["del", "theorem", "ext", ["submodule"]], ["del", "theorem", "mem_coe", ["submodule"]], ["del", "def", "pullback_injective_of_surjective", ["submodule"]], ["del", "def", "pushforward_injective_of_injective", ["submodule"]], ["del", "theorem", "sInter_set", ["submodule"]], ["del", "def", "span", ["submodule"]], ["del", "theorem", "span_empty", ["submodule"]], ["del", "theorem", "span_subset_iff", ["submodule"]], ["del", "theorem", "span_union", ["submodule"]], ["del", "theorem", "top_set", ["submodule"]], ["del", "structure", "{u", []]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1536341425, "sha": "4421f46d", "message": "feat(ring_theory): submodules and quotients of Noetherian modules are Noetherian", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "le_iff_le_of_strict_mono", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "singleton_union", ["set"]], ["mod", "theorem", "union_singleton", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "exists_finset_coe", ["set", "finite"]]]}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "linear_algebra/quotient_module.lean", "newPath": "linear_algebra/quotient_module.lean", "changes": [["add", "theorem", "exists_rep", ["quotient_module", "quotient"]]]}, {"oldPath": "linear_algebra/subtype_module.lean", "newPath": "linear_algebra/subtype_module.lean", "changes": [["add", "theorem", "is_linear_map_inclusion", ["is_submodule"]]]}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": null, "newPath": "ring_theory/correspondence_theorem.lean", "changes": []}, {"oldPath": null, "newPath": "ring_theory/noetherian.lean", "changes": [["add", "def", "is_fg", []], ["add", "def", "is_noetherian", []], ["add", "theorem", "is_noetherian_iff_well_founded", []], ["add", "theorem", "is_noetherian_of_quotient_of_noetherian", []], ["add", "theorem", "is_noetherian_of_submodule_of_noetherian", []], ["add", "def", "is_noetherian_ring", []], ["add", "def", "fg", ["submodule"]], ["add", "theorem", "fg_def", ["submodule"]], ["add", "def", "univ", ["submodule"]]]}, {"oldPath": null, "newPath": "ring_theory/submodule.lean", "changes": [["add", "theorem", "Union_set_of_directed", ["submodule"]], ["add", "theorem", "bot_set", ["submodule"]], ["add", "theorem", "embedding_eq", ["submodule"]], ["add", "theorem", "eq", ["submodule"]], ["add", "theorem", "ext", ["submodule"]], ["add", "theorem", "mem_coe", ["submodule"]], ["add", "def", "pullback_injective_of_surjective", ["submodule"]], ["add", "def", "pushforward_injective_of_injective", ["submodule"]], ["add", "theorem", "sInter_set", ["submodule"]], ["add", "def", "span", ["submodule"]], ["add", "theorem", "span_empty", ["submodule"]], ["add", "theorem", "span_subset_iff", ["submodule"]], ["add", "theorem", "span_union", ["submodule"]], ["add", "theorem", "top_set", ["submodule"]], ["add", "structure", "{u", []]]}]}, {"timestamp": 1536341258, "sha": "dce0e649", "message": "fix(algebra/big_operators): change name of `sum_eq_single` to `finset.sum_eq_single` (#321)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}]}, {"timestamp": 1536320545, "sha": "4085ca13", "message": "feat(category_theory): add measurable space example", "changes": [{"oldPath": null, "newPath": "category_theory/examples/measurable_space.lean", "changes": [["add", "def", "Borel", ["category_theory", "examples"]], ["add", "def", "Meas", ["category_theory", "examples"]]]}]}, {"timestamp": 1536320545, "sha": "c2a4cf9e", "message": "feat(category_theory): lift morphism map proof to concrete categories", "changes": [{"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["add", "def", "Top", ["category_theory", "examples"]], ["add", "def", "nbhd", ["category_theory", "examples", "open_set"]], ["add", "def", "nbhds", ["category_theory", "examples", "open_set"]], ["add", "structure", "open_set", ["category_theory", "examples"]], ["del", "def", "Top", ["category_theory", "examples", "topological_spaces"]], ["del", "def", "nbhd", ["category_theory", "examples", "topological_spaces"]], ["del", "def", "nbhds", ["category_theory", "examples", "topological_spaces"]], ["del", "structure", "open_set", ["category_theory", "examples", "topological_spaces"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["add", "def", "concrete_functor", ["category_theory"]]]}]}, {"timestamp": 1536320545, "sha": "93e90432", "message": "style(category_theory): concrete categories as type class", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["add", "structure", "concrete_category", ["category_theory"]], ["del", "def", "concrete_category", ["category_theory"]]]}, {"oldPath": "category_theory/examples/rings.lean", "newPath": "category_theory/examples/rings.lean", "changes": [["del", "def", "CommRing", ["category_theory", "examples"]], ["del", "def", "comp", ["category_theory", "examples", "comm_ring_hom"]], ["del", "theorem", "comp_map", ["category_theory", "examples", "comm_ring_hom"]], ["del", "theorem", "ext", ["category_theory", "examples", "comm_ring_hom"]], ["del", "def", "id", ["category_theory", "examples", "comm_ring_hom"]], ["del", "theorem", "id_map", ["category_theory", "examples", "comm_ring_hom"]], ["mod", "theorem", "map_add", ["category_theory", "examples", "comm_ring_hom"]], ["mod", "theorem", "map_mul", ["category_theory", "examples", "comm_ring_hom"]], ["mod", "theorem", "map_one", ["category_theory", "examples", "comm_ring_hom"]], ["del", "structure", "comm_ring_hom", ["category_theory", "examples"]], ["add", "def", "is_comm_ring_hom", ["category_theory", "examples"]], ["add", "def", "{u}", ["category_theory", "examples"]]]}, {"oldPath": "category_theory/examples/topological_spaces.lean", "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["mod", "def", "Top", ["category_theory", "examples", "topological_spaces"]], ["del", "theorem", "ext", ["category_theory", "examples", "topological_spaces", "continuous_map"]], ["del", "structure", "continuous_map", ["category_theory", "examples", "topological_spaces"]], ["mod", "structure", "open_set", ["category_theory", "examples", "topological_spaces"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["mod", "theorem", "comp_map", ["category_theory", "functor"]], ["mod", "theorem", "map_comp", ["category_theory", "functor"]], ["mod", "theorem", "map_id", ["category_theory", "functor"]], ["mod", "theorem", "mk_map", ["category_theory", "functor"]], ["mod", "theorem", "mk_obj", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": [["add", "def", "forget", ["category_theory"]], ["mod", "theorem", "map_id", ["category_theory", "functor_to_types"]], ["mod", "theorem", "naturality", ["category_theory", "functor_to_types"]], ["mod", "theorem", "types_hom", ["category_theory"]], ["add", "def", "ulift_functor", ["category_theory"]]]}]}, {"timestamp": 1536320545, "sha": "5c484898", "message": "feat(category_theory): construction for a concrete category", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["mod", "theorem", "cancel_epi", ["category_theory"]], ["mod", "theorem", "cancel_mono", ["category_theory"]], ["add", "def", "concrete_category", ["category_theory"]]]}]}, {"timestamp": 1536320545, "sha": "840a733c", "message": "removing unnecessary class", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}]}, {"timestamp": 1536320545, "sha": "d91428c2", "message": "feat(category_theory): the category of topological spaces, and of neighbourhoods of a point. also the category of commutative rings", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": null, "newPath": "category_theory/examples/rings.lean", "changes": [["add", "def", "CommRing", ["category_theory", "examples"]], ["add", "def", "comp", ["category_theory", "examples", "comm_ring_hom"]], ["add", "theorem", "comp_map", ["category_theory", "examples", "comm_ring_hom"]], ["add", "theorem", "ext", ["category_theory", "examples", "comm_ring_hom"]], ["add", "def", "id", ["category_theory", "examples", "comm_ring_hom"]], ["add", "theorem", "id_map", ["category_theory", "examples", "comm_ring_hom"]], ["add", "theorem", "map_add", ["category_theory", "examples", "comm_ring_hom"]], ["add", "theorem", "map_mul", ["category_theory", "examples", "comm_ring_hom"]], ["add", "theorem", "map_one", ["category_theory", "examples", "comm_ring_hom"]], ["add", "structure", "comm_ring_hom", ["category_theory", "examples"]]]}, {"oldPath": null, "newPath": "category_theory/examples/topological_spaces.lean", "changes": [["add", "def", "Top", ["category_theory", "examples", "topological_spaces"]], ["add", "theorem", "ext", ["category_theory", "examples", "topological_spaces", "continuous_map"]], ["add", "structure", "continuous_map", ["category_theory", "examples", "topological_spaces"]], ["add", "def", "nbhd", ["category_theory", "examples", "topological_spaces"]], ["add", "def", "nbhds", ["category_theory", "examples", "topological_spaces"]], ["add", "structure", "open_set", ["category_theory", "examples", "topological_spaces"]]]}]}, {"timestamp": 1536312027, "sha": "e95111d3", "message": "fix(tactic/tidy): fix interactive tidy ignoring cfg", "changes": [{"oldPath": "tactic/tidy.lean", "newPath": "tactic/tidy.lean", "changes": []}]}, {"timestamp": 1536249581, "sha": "77e104ce", "message": "fix(tests/tactics): remove test\nI don't think this test demonstrates reasonable/expected behavior of `wlog`, and it is not maintained by the modification, so I've removed it.", "changes": [{"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1536248395, "sha": "ea61c212", "message": "fix(tactic/wlog): fix segfault", "changes": [{"oldPath": "tactic/wlog.lean", "newPath": "tactic/wlog.lean", "changes": []}]}, {"timestamp": 1536265693, "sha": "38422449", "message": "fix(linear_algebra/subtype): simplify lifted operations by using projections instead of match", "changes": [{"oldPath": "linear_algebra/subtype_module.lean", "newPath": "linear_algebra/subtype_module.lean", "changes": [["mod", "theorem", "add_val", []], ["mod", "theorem", "neg_val", []], ["mod", "theorem", "smul_val", []]]}]}, {"timestamp": 1536195868, "sha": "f262a07c", "message": "fix(linear_algebra/quotient_module): ring parameter for base ring of quotient module needs to be implicit, otherwise type class search loops", "changes": [{"oldPath": "linear_algebra/quotient_module.lean", "newPath": "linear_algebra/quotient_module.lean", "changes": []}]}, {"timestamp": 1536191163, "sha": "e24f54e8", "message": "fix(linear_algebra/prod): field is implicit parameter of the module / vector space product instances", "changes": [{"oldPath": "linear_algebra/prod_module.lean", "newPath": "linear_algebra/prod_module.lean", "changes": []}]}, {"timestamp": 1536183880, "sha": "016f5386", "message": "fix(algebra/module): add out_param to base field of vector spaces", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}]}, {"timestamp": 1536158010, "sha": "3a3249ea", "message": "feat(data/finsupp): multiset_map_sum/_sum_sum/_index", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["mod", "theorem", "map_domain_finset_sum", ["finsupp"]], ["add", "theorem", "multiset_map_sum", ["finsupp"]], ["add", "theorem", "multiset_sum_sum", ["finsupp"]], ["add", "theorem", "multiset_sum_sum_index", ["finsupp"]], ["mod", "theorem", "prod_finset_sum_index", ["finsupp"]], ["mod", "theorem", "prod_single", ["finsupp"]]]}]}, {"timestamp": 1536157176, "sha": "92b9a00d", "message": "feat(data/finsupp): to_/of_multiset, curry/uncurry", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "mem_subtype", ["finset"]]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["del", "theorem", "mem_subtype", ["finset"]], ["add", "theorem", "count_to_multiset", ["finsupp"]], ["add", "def", "equiv_multiset", ["finsupp"]], ["add", "def", "finsupp_prod_equiv", ["finsupp"]], ["mod", "theorem", "map_domain_finset_sum", ["finsupp"]], ["add", "theorem", "mem_support_finset_sum", ["finsupp"]], ["add", "theorem", "mem_support_multiset_sum", ["finsupp"]], ["add", "theorem", "mem_support_single", ["finsupp"]], ["add", "def", "of_multiset", ["finsupp"]], ["add", "theorem", "of_multiset_apply", ["finsupp"]], ["mod", "theorem", "prod_add_index", ["finsupp"]], ["mod", "theorem", "prod_finset_sum_index", ["finsupp"]], ["mod", "theorem", "prod_map_domain_index", ["finsupp"]], ["mod", "theorem", "prod_sum_index", ["finsupp"]], ["add", "theorem", "single_finset_sum", ["finsupp"]], ["add", "theorem", "single_multiset_sum", ["finsupp"]], ["add", "theorem", "single_sum", ["finsupp"]], ["mod", "theorem", "sum_add", ["finsupp"]], ["add", "theorem", "sum_curry_index", ["finsupp"]], ["mod", "theorem", "sum_neg", ["finsupp"]], ["mod", "theorem", "sum_sub_index", ["finsupp"]], ["mod", "theorem", "sum_zero", ["finsupp"]], ["add", "def", "to_multiset", ["finsupp"]], ["mod", "structure", "finsupp", []]]}]}, {"timestamp": 1536156350, "sha": "e105c9ea", "message": "feat(data/multiset): add prod_map_add", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "prod_map_add", ["multiset"]]]}]}, {"timestamp": 1536156294, "sha": "abd6ab59", "message": "refactor(data/prod): add map_fst, map_snd", "changes": [{"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["add", "theorem", "map_fst", ["prod"]], ["add", "theorem", "map_snd", ["prod"]]]}]}, {"timestamp": 1536153342, "sha": "ac4f7b16", "message": "Revert \"doc(docs/elan.md): Clarify instructions for leanpkg build\"\nThis reverts commit 89e8cfee313b8bffe70362949577bd575cd09ea5.", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1536148447, "sha": "9ea38e1e", "message": "feat(data/finset): option.to_finset", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "mem_to_finset", ["option"]], ["add", "def", "to_finset", ["option"]], ["add", "theorem", "to_finset_none", ["option"]], ["add", "theorem", "to_finset_some", ["option"]]]}]}, {"timestamp": 1536148416, "sha": "2997ce6d", "message": "feat(logic/embedding): embedding into option", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "injective_some", ["option"]]]}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": []}]}, {"timestamp": 1536148367, "sha": "a2acc611", "message": "doc(docs/howto-contribute.md): fix broken links", "changes": [{"oldPath": "docs/howto-contribute.md", "newPath": "docs/howto-contribute.md", "changes": []}]}, {"timestamp": 1536148306, "sha": "89e8cfee", "message": "doc(docs/elan.md): Clarify instructions for leanpkg build", "changes": [{"oldPath": "docs/elan.md", "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1536148278, "sha": "97cd01b0", "message": "refactor(linear_algebra/quotient_module): avoid using type class inference for setoids (#310)\nContinuation of #212 . Avoid using type class inference for quotient modules, and introduce a version of `quotient.mk` specifically for quotient modules, whose output type is `quotient β s` rather than `quotient (quotient_rel s)`, which should help type class inference.", "changes": [{"oldPath": "linear_algebra/linear_map_module.lean", "newPath": "linear_algebra/linear_map_module.lean", "changes": []}, {"oldPath": "linear_algebra/quotient_module.lean", "newPath": "linear_algebra/quotient_module.lean", "changes": [["del", "theorem", "is_linear_map_quotient_lift", ["is_submodule"]], ["del", "theorem", "is_linear_map_quotient_mk", ["is_submodule"]], ["del", "theorem", "injective_lift", ["is_submodule", "quotient"]], ["del", "def", "lift", ["is_submodule", "quotient"]], ["del", "theorem", "lift_mk", ["is_submodule", "quotient"]], ["del", "def", "quotient", ["is_submodule"]], ["del", "theorem", "quotient_rel_eq", ["is_submodule"]], ["add", "theorem", "coe_add", ["quotient_module"]], ["add", "theorem", "coe_smul", ["quotient_module"]], ["add", "theorem", "coe_zero", ["quotient_module"]], ["add", "theorem", "is_linear_map_quotient_lift", ["quotient_module"]], ["add", "theorem", "is_linear_map_quotient_mk", ["quotient_module"]], ["add", "def", "mk", ["quotient_module"]], ["add", "theorem", "injective_lift", ["quotient_module", "quotient"]], ["add", "def", "lift", ["quotient_module", "quotient"]], ["add", "theorem", "lift_mk", ["quotient_module", "quotient"]], ["add", "def", "quotient", ["quotient_module"]]]}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": []}]}, {"timestamp": 1536148144, "sha": "681c98f3", "message": "feat(category_theory): full subcategories, preorders, Aut, and End", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["add", "def", "End", ["category_theory"]]]}, {"oldPath": null, "newPath": "category_theory/full_subcategory.lean", "changes": [["add", "def", "full_subcategory_embedding", ["category_theory"]]]}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["add", "def", "Aut", ["category_theory"]]]}]}, {"timestamp": 1536138530, "sha": "600d3cf6", "message": "cleanup(data/polynomial): shorten some proofs", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "support_add_eq", ["finsupp"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "apply_nat_degree_eq_zero_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_le_degree", ["polynomial"]], ["add", "theorem", "degree_le_nat_degree", ["polynomial"]], ["add", "theorem", "le_nat_degree_of_ne_zero", ["polynomial"]]]}]}, {"timestamp": 1536090983, "sha": "76de588d", "message": "feat(data/polynomial): prove degree_derivative_eq", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_eq_single", ["finset"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "degree_derivative_eq", ["polynomial"]], ["add", "theorem", "derivative_apply", ["polynomial"]], ["add", "theorem", "mem_support_derivative", ["polynomial"]], ["add", "theorem", "nat_degree_zero", ["polynomial"]]]}]}, {"timestamp": 1536057813, "sha": "eb20fd05", "message": "feat(data/polynomial): derivative on polynomials", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "def", "derivative", ["polynomial"]], ["add", "theorem", "derivative_C", ["polynomial"]], ["add", "theorem", "derivative_X", ["polynomial"]], ["add", "theorem", "derivative_add", ["polynomial"]], ["add", "theorem", "derivative_monomial", ["polynomial"]], ["add", "theorem", "derivative_mul", ["polynomial"]], ["add", "theorem", "derivative_one", ["polynomial"]], ["add", "theorem", "derivative_sum", ["polynomial"]], ["add", "theorem", "derivative_zero", ["polynomial"]], ["add", "theorem", "sum_C_mul_X_eq", ["polynomial"]]]}]}, {"timestamp": 1536027920, "sha": "fd43fe08", "message": "fix(data/polynomial): fix proofs", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["mod", "theorem", "map_C", ["polynomial"]], ["mod", "theorem", "map_X", ["polynomial"]]]}]}, {"timestamp": 1536026018, "sha": "7a4125bc", "message": "feat(algebra/field): field homs", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "map_div'", ["is_field_hom"]], ["add", "theorem", "map_div", ["is_field_hom"]], ["add", "theorem", "map_eq_zero", ["is_field_hom"]], ["add", "theorem", "map_inv'", ["is_field_hom"]], ["add", "theorem", "map_inv", ["is_field_hom"]], ["add", "theorem", "map_ne_zero", ["is_field_hom"]], ["add", "def", "is_field_hom", []]]}]}, {"timestamp": 1536025792, "sha": "2dd78b8d", "message": "feat(data/polynomial): add eval2 for univariate polys", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["mod", "theorem", "coe_nat_pow", ["int"]], ["add", "theorem", "map_pow", ["is_semiring_hom"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["mod", "def", "eval", ["polynomial"]], ["mod", "theorem", "eval_C", ["polynomial"]], ["mod", "theorem", "eval_X", ["polynomial"]], ["mod", "theorem", "eval_add", ["polynomial"]], ["mod", "theorem", "eval_mul", ["polynomial"]], ["mod", "theorem", "eval_one", ["polynomial"]], ["mod", "theorem", "eval_pow", ["polynomial"]], ["mod", "theorem", "eval_zero", ["polynomial"]], ["add", "def", "eval₂", ["polynomial"]], ["add", "theorem", "eval₂_C", ["polynomial"]], ["add", "theorem", "eval₂_X", ["polynomial"]], ["add", "theorem", "eval₂_add", ["polynomial"]], ["add", "theorem", "eval₂_mul", ["polynomial"]], ["add", "theorem", "eval₂_one", ["polynomial"]], ["add", "theorem", "eval₂_pow", ["polynomial"]], ["add", "theorem", "eval₂_zero", ["polynomial"]], ["add", "def", "map", ["polynomial"]], ["add", "theorem", "map_C", ["polynomial"]], ["add", "theorem", "map_X", ["polynomial"]], ["add", "theorem", "map_add", ["polynomial"]], ["add", "theorem", "map_mul", ["polynomial"]], ["add", "theorem", "map_one", ["polynomial"]], ["add", "theorem", "map_pow", ["polynomial"]], ["add", "theorem", "map_zero", ["polynomial"]]]}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": []}]}, {"timestamp": 1536021350, "sha": "b8ea49bd", "message": "fix(ring_theory/ufd): fix simpa uses", "changes": [{"oldPath": "ring_theory/unique_factorization_domain.lean", "newPath": "ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1535999494, "sha": "4de119e5", "message": "fix(*): fix simpa uses", "changes": [{"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": []}, {"oldPath": "data/zmod.lean", "newPath": "data/zmod.lean", "changes": []}]}, {"timestamp": 1535993935, "sha": "2021a1be", "message": "perf(tactic/ring): don't do any implicit unfolds", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": [["add", "theorem", "unfold_div", ["tactic", "ring"]], ["add", "theorem", "unfold_sub", ["tactic", "ring"]]]}]}, {"timestamp": 1535993918, "sha": "1edb79ae", "message": "refactor(ring_theory/associated): rename associated_elements", "changes": [{"oldPath": "ring_theory/associated_elements.lean", "newPath": "ring_theory/associated.lean", "changes": [["mod", "def", "irreducible", []], ["add", "theorem", "irreducible_or_factor", []], ["add", "theorem", "is_unit_iff_dvd_one", []], ["add", "theorem", "is_unit_iff_forall_dvd", []], ["add", "theorem", "is_unit_of_dvd_unit", []], ["add", "theorem", "of_irreducible_mul", []]]}, {"oldPath": "ring_theory/unique_factorization_domain.lean", "newPath": "ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1535993918, "sha": "956398c7", "message": "refactor(tactic/interactive): improve error reporting for simpa\nalso make simpa fail on no goals or when applied where simp will work", "changes": [{"oldPath": "algebra/gcd_domain.lean", "newPath": "algebra/gcd_domain.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/int/gcd.lean", "newPath": "data/int/gcd.lean", "changes": []}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["mod", "theorem", "denom_neg_eq_denom", ["rat"]], ["mod", "theorem", "num_denom_mk", ["rat"]], ["mod", "theorem", "num_zero", ["rat"]]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1535978034, "sha": "36dd78ee", "message": "feat(category_theory): full and faithful functors, switching products\nalso the evaluation functor, and replace the ↝ arrow with ⥤, by request", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": []}, {"oldPath": null, "newPath": "category_theory/embedding.lean", "changes": [["add", "theorem", "image_preimage", ["category_theory"]], ["add", "def", "preimage", ["category_theory"]], ["add", "def", "preimage_iso", ["category_theory"]], ["add", "theorem", "preimage_iso_coe", ["category_theory"]], ["add", "theorem", "preimage_iso_symm_coe", ["category_theory"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["mod", "def", "comp", ["category_theory", "functor"]], ["mod", "theorem", "comp_map", ["category_theory", "functor"]], ["mod", "theorem", "comp_obj", ["category_theory", "functor"]], ["mod", "def", "map", ["category_theory", "functor"]], ["mod", "theorem", "map_comp", ["category_theory", "functor"]], ["mod", "theorem", "map_id", ["category_theory", "functor"]], ["mod", "theorem", "obj_eq_coe", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": [["mod", "theorem", "comp_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "id_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "app_naturality", ["category_theory", "functor", "category", "nat_trans"]], ["mod", "theorem", "naturality_app", ["category_theory", "functor", "category", "nat_trans"]]]}, {"oldPath": "category_theory/isomorphism.lean", "newPath": "category_theory/isomorphism.lean", "changes": [["mod", "theorem", "eq_to_iso", ["category_theory", "functor"]], ["mod", "def", "on_iso", ["category_theory", "functor"]], ["mod", "theorem", "on_iso_hom", ["category_theory", "functor"]], ["mod", "theorem", "on_iso_inv", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["mod", "theorem", "app_eq_coe", ["category_theory", "nat_trans"]], ["mod", "theorem", "exchange", ["category_theory", "nat_trans"]], ["mod", "def", "hcomp", ["category_theory", "nat_trans"]], ["mod", "theorem", "hcomp_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "id_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "mk_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "naturality", ["category_theory", "nat_trans"]], ["mod", "structure", "nat_trans", ["category_theory"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": [["mod", "theorem", "opposite_map", ["category_theory", "functor"]], ["mod", "theorem", "opposite_obj", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["add", "def", "evaluation", ["category_theory"]], ["mod", "def", "prod", ["category_theory", "functor"]], ["mod", "theorem", "prod_map", ["category_theory", "functor"]], ["mod", "theorem", "prod_obj", ["category_theory", "functor"]], ["mod", "def", "prod", ["category_theory", "nat_trans"]], ["mod", "theorem", "prod_app", ["category_theory", "nat_trans"]], ["mod", "def", "fst", ["category_theory", "prod"]], ["mod", "def", "inl", ["category_theory", "prod"]], ["mod", "def", "inr", ["category_theory", "prod"]], ["mod", "def", "snd", ["category_theory", "prod"]], ["add", "def", "swap", ["category_theory", "prod"]], ["add", "def", "symmetry", ["category_theory", "prod"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": []}, {"oldPath": "docs/theories/category_theory.md", "newPath": "docs/theories/category_theory.md", "changes": []}]}, {"timestamp": 1535977924, "sha": "6ddc3fc0", "message": "feat(data/finset): max_of_ne_empty, min_of_ne_empty", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "max_of_ne_empty", ["finset"]], ["add", "theorem", "min_of_ne_empty", ["finset"]]]}]}, {"timestamp": 1535938048, "sha": "7ee76148", "message": "feat(category_theory/isomorphisms): introduce isomorphisms (#278)\n* refactor(category_theory): renaming `ulift` to `ulift_functor` to avoid name clashes\n* feat(category_theory): introduce isomorphisms\n* doc(category_theory): rewrite\n* Resolving issues raised by Johannes\n* moving heterogenous_identity.lean into isomorphism.lean\n* remove unnecessary `obviously` replacement\n* refactor(category_theory): using tidy in the category theory library", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": [["add", "theorem", "cancel_epi", ["category_theory"]], ["add", "theorem", "cancel_mono", ["category_theory"]]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["add", "theorem", "obj_eq_coe", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": []}, {"oldPath": null, "newPath": "category_theory/isomorphism.lean", "changes": [["add", "def", "eq_to_iso", ["category_theory"]], ["add", "theorem", "eq_to_iso_refl", ["category_theory"]], ["add", "theorem", "eq_to_iso_trans", ["category_theory"]], ["add", "theorem", "eq_to_iso", ["category_theory", "functor"]], ["add", "def", "on_iso", ["category_theory", "functor"]], ["add", "theorem", "on_iso_hom", ["category_theory", "functor"]], ["add", "theorem", "on_iso_inv", ["category_theory", "functor"]], ["add", "def", "inv", ["category_theory"]], ["add", "def", "hom_inv_id", ["category_theory", "is_iso"]], ["add", "def", "inv_hom_id", ["category_theory", "is_iso"]], ["add", "theorem", "ext", ["category_theory", "iso"]], ["add", "theorem", "hom_eq_coe", ["category_theory", "iso"]], ["add", "theorem", "hom_inv_id", ["category_theory", "iso"]], ["add", "theorem", "inv_eq_coe", ["category_theory", "iso"]], ["add", "theorem", "inv_hom_id", ["category_theory", "iso"]], ["add", "def", "refl", ["category_theory", "iso"]], ["add", "theorem", "refl_coe", ["category_theory", "iso"]], ["add", "theorem", "refl_symm", ["category_theory", "iso"]], ["add", "theorem", "refl_symm_coe", ["category_theory", "iso"]], ["add", "def", "symm", ["category_theory", "iso"]], ["add", "def", "trans", ["category_theory", "iso"]], ["add", "theorem", "trans_coe", ["category_theory", "iso"]], ["add", "theorem", "trans_symm", ["category_theory", "iso"]], ["add", "theorem", "trans_symm_coe", ["category_theory", "iso"]], ["add", "structure", "iso", ["category_theory"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["add", "theorem", "app_eq_coe", ["category_theory", "nat_trans"]], ["mod", "theorem", "vcomp_assoc", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": []}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": []}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": []}, {"oldPath": "docs/theories.md", "newPath": "docs/theories.md", "changes": []}, {"oldPath": "docs/theories/categories.md", "newPath": "docs/theories/category_theory.md", "changes": []}]}, {"timestamp": 1535933415, "sha": "0df6f778", "message": "style(linear_algebra/tensor_product): rename of -> tmul and ⊗ₛ -> ⊗ₜ; some cleanup in free_abelian_group", "changes": [{"oldPath": "group_theory/free_abelian_group.lean", "newPath": "group_theory/free_abelian_group.lean", "changes": [["del", "def", "UMP", ["free_abelian_group"]], ["del", "theorem", "coe_def", ["free_abelian_group"]], ["add", "def", "UMP", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "add", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "coe", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "ext", ["free_abelian_group", "to_add_comm_group"]], ["del", "def", "is_add_group_hom", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "neg", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "of", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "sub", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "unique", ["free_abelian_group", "to_add_comm_group"]], ["del", "theorem", "zero", ["free_abelian_group", "to_add_comm_group"]], ["mod", "def", "to_add_comm_group", ["free_abelian_group"]]]}, {"oldPath": "linear_algebra/tensor_product.lean", "newPath": "linear_algebra/tensor_product.lean", "changes": [["del", "theorem", "add_of", ["tensor_product"]], ["add", "theorem", "add_tmul", ["tensor_product"]], ["mod", "theorem", "bilinear", ["tensor_product"]], ["del", "theorem", "add_left", ["tensor_product", "of"]], ["del", "theorem", "add_right", ["tensor_product", "of"]], ["del", "theorem", "smul", ["tensor_product", "of"]], ["del", "def", "of", ["tensor_product"]], ["del", "theorem", "of_add", ["tensor_product"]], ["del", "theorem", "of_smul", ["tensor_product"]], ["del", "theorem", "smul_of", ["tensor_product"]], ["add", "theorem", "smul_tmul", ["tensor_product"]], ["add", "theorem", "add_left", ["tensor_product", "tmul"]], ["add", "theorem", "add_right", ["tensor_product", "tmul"]], ["add", "theorem", "smul", ["tensor_product", "tmul"]], ["add", "def", "tmul", ["tensor_product"]], ["add", "theorem", "tmul_add", ["tensor_product"]], ["add", "theorem", "tmul_smul", ["tensor_product"]], ["del", "theorem", "of", ["tensor_product", "to_module"]], ["add", "theorem", "tmul", ["tensor_product", "to_module"]]]}]}, {"timestamp": 1535932176, "sha": "40ef7a2b", "message": "doc(ring_theory/unique_factorization_domain): add document strings", "changes": [{"oldPath": "ring_theory/unique_factorization_domain.lean", "newPath": "ring_theory/unique_factorization_domain.lean", "changes": []}]}, {"timestamp": 1535906113, "sha": "b3afef56", "message": "perf(tactic/ring): fix long-running mk_app invocations", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}]}, {"timestamp": 1535921434, "sha": "dd0c0aee", "message": "feat(ring_theory): add unique factorization domain", "changes": [{"oldPath": null, "newPath": "ring_theory/unique_factorization_domain.lean", "changes": [["add", "theorem", "eq_of_factors_eq_factors", ["associates"]], ["add", "theorem", "eq_of_prod_eq_prod", ["associates"]], ["add", "theorem", "coe_add", ["associates", "factor_set"]], ["add", "def", "prod", ["associates", "factor_set"]], ["add", "theorem", "sup_add_inf_eq_add", ["associates", "factor_set"]], ["add", "def", "factors'", ["associates"]], ["add", "theorem", "factors'_cong", ["associates"]], ["add", "def", "factors", ["associates"]], ["add", "theorem", "factors_0", ["associates"]], ["add", "theorem", "factors_le", ["associates"]], ["add", "theorem", "factors_mk", ["associates"]], ["add", "theorem", "factors_mono", ["associates"]], ["add", "theorem", "factors_mul", ["associates"]], ["add", "theorem", "factors_prod", ["associates"]], ["add", "theorem", "map_subtype_val_factors'", ["associates"]], ["add", "theorem", "prod_add", ["associates"]], ["add", "theorem", "prod_coe", ["associates"]], ["add", "theorem", "prod_factors", ["associates"]], ["add", "theorem", "prod_le", ["associates"]], ["add", "theorem", "prod_le_prod_iff_le", ["associates"]], ["add", "theorem", "prod_mono", ["associates"]], ["add", "theorem", "prod_top", ["associates"]], ["add", "theorem", "sup_mul_inf", ["associates"]], ["add", "theorem", "unique'", ["associates"]], ["add", "def", "{u}", ["associates"]], ["add", "def", "to_gcd_domain", ["unique_factorization_domain"]]]}]}, {"timestamp": 1535921434, "sha": "5f8fafcf", "message": "feat(ring_theory): add associated elements", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["mod", "theorem", "mul_eq_zero", []], ["add", "theorem", "zero_eq_mul", []]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "exists_multiset_eq_map_quot_mk", ["multiset"]], ["add", "theorem", "induction_on_multiset_quot", ["multiset"]], ["add", "theorem", "injective_map", ["multiset"]], ["add", "theorem", "map_eq_map", ["multiset"]], ["add", "theorem", "map_mk_eq_map_mk_of_rel", ["multiset"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "coe_inf", ["with_top"]], ["add", "theorem", "coe_sup", ["with_top"]]]}, {"oldPath": null, "newPath": "ring_theory/associated_elements.lean", "changes": [["add", "theorem", "associated_of_dvd_dvd", ["associated"]], ["add", "theorem", "associated_one_iff_is_unit", ["associated"]], ["add", "theorem", "associated_one_of_associated_mul_one", ["associated"]], ["add", "theorem", "associated_one_of_mul_eq_one", ["associated"]], ["add", "theorem", "associated_zero_iff_eq_zero", ["associated"]], ["add", "theorem", "unit_associated_one", ["associated"]], ["add", "def", "associated", []], ["add", "theorem", "coe_unit_eq_one", ["associates"]], ["add", "theorem", "dvd_of_mk_le_mk", ["associates"]], ["add", "theorem", "dvd_out_iff", ["associates"]], ["add", "theorem", "forall_associated", ["associates"]], ["add", "theorem", "irreducible_mk_iff", ["associates"]], ["add", "theorem", "is_unit_iff_eq_one", ["associates"]], ["add", "theorem", "is_unit_mk", ["associates"]], ["add", "theorem", "le_mul_left", ["associates"]], ["add", "theorem", "le_mul_right", ["associates"]], ["add", "theorem", "mk_eq_mk_iff_associated", ["associates"]], ["add", "theorem", "mk_eq_zero_iff_eq_zero", ["associates"]], ["add", "theorem", "mk_le_mk_iff_dvd_iff", ["associates"]], ["add", "theorem", "mk_le_mk_of_dvd", ["associates"]], ["add", "theorem", "mk_mul_mk", ["associates"]], ["add", "theorem", "mk_zero_eq", ["associates"]], ["add", "theorem", "mul_eq_one_iff", ["associates"]], ["add", "theorem", "mul_eq_zero_iff", ["associates"]], ["add", "theorem", "mul_mono", ["associates"]], ["add", "theorem", "mul_zero", ["associates"]], ["add", "theorem", "norm_unit_out", ["associates"]], ["add", "theorem", "one_eq_mk_one", ["associates"]], ["add", "theorem", "one_le", ["associates"]], ["add", "theorem", "out_dvd_iff", ["associates"]], ["add", "theorem", "out_mk", ["associates"]], ["add", "theorem", "out_mul", ["associates"]], ["add", "theorem", "out_one", ["associates"]], ["add", "theorem", "out_top", ["associates"]], ["add", "theorem", "prod_eq_one_iff", ["associates"]], ["add", "theorem", "prod_eq_zero_iff", ["associates"]], ["add", "theorem", "prod_le_prod", ["associates"]], ["add", "theorem", "prod_mk", ["associates"]], ["add", "theorem", "quot_mk_eq_mk", ["associates"]], ["add", "theorem", "quotient_mk_eq_mk", ["associates"]], ["add", "theorem", "rel_associated_iff_map_eq_map", ["associates"]], ["add", "theorem", "zero_mul", ["associates"]], ["add", "theorem", "zero_ne_one", ["associates"]], ["add", "def", "associates", []], ["add", "def", "associates_int_equiv_nat", []], ["add", "def", "irreducible", []], ["add", "theorem", "irreducible_iff_nat_prime", []], ["add", "def", "is_unit", []], ["add", "theorem", "is_unit_mul_units", []], ["add", "theorem", "is_unit_nat", []], ["add", "theorem", "is_unit_one", []], ["add", "theorem", "not_irreducible_one", []], ["add", "theorem", "not_irreducible_zero", []], ["add", "theorem", "not_is_unit_zero", []], ["add", "theorem", "is_unit_of_mul_one", ["units"]]]}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1535918833, "sha": "059f9374", "message": "feat(tactic): add linear arithmetic tactic (#301)\n* feat(data/list, tactic): small helper functions\n* feat(meta/rb_map): extra operations on native rb_maps\n* feat(tactic/linarith): add tactic for solving linear arithmetic goals\n* doc(tactic/linarith): add documentation and tests\n* chore(tactic/linarith): add copyright\n* feat(tactic/linarith): allow products of coefficients\n* feat(tactic/linarith): cut off search early if contradiction is found\n* feat(tests/linarith_tests): add test\n* doc(doc/tactics): update doc\n* feat(tactic/linarith): add config options\n* feat(tactic/linarith): support equality goals\n* chore(tactic/linarith): move non-tactic code out of tactic monad\n* feat(tactic/linarith): support rational coefficients\n* doc(tactic/linarith): update doc\n* feat(tactic/linarith): fix obvious inefficiency in canceling denoms\n* feat(tactic/linarith): efficiency improvements\n* fix(tactic/linarith): remove unnecessary import and dead code\n* fix(data/list/basic, meta/rb_map): shorter proofs", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "index_of_eq_length", ["list"]], ["add", "def", "reduce_option", ["list"]]]}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "meta/rb_map.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/linarith.lean", "changes": [["add", "theorem", "add_subst", ["linarith"]], ["add", "def", "alist_lt", ["linarith"]], ["add", "theorem", "div_subst", ["linarith"]], ["add", "theorem", "eq_of_eq_of_eq", ["linarith"]], ["add", "theorem", "eq_of_not_lt_of_not_gt", ["linarith"]], ["add", "def", "is_lt", ["linarith", "ineq"]], ["add", "def", "max", ["linarith", "ineq"]], ["add", "def", "to_string", ["linarith", "ineq"]], ["add", "inductive", "ineq", ["linarith"]], ["add", "theorem", "le_of_eq_of_le", ["linarith"]], ["add", "theorem", "le_of_le_of_eq", ["linarith"]], ["add", "theorem", "lt_of_eq_of_lt", ["linarith"]], ["add", "theorem", "lt_of_lt_of_eq", ["linarith"]], ["add", "theorem", "mul_eq", ["linarith"]], ["add", "theorem", "mul_neg", ["linarith"]], ["add", "theorem", "mul_nonpos", ["linarith"]], ["add", "theorem", "mul_subst", ["linarith"]], ["add", "theorem", "neg_subst", ["linarith"]], ["add", "def", "reduce_pair_option", ["linarith"]], ["add", "theorem", "sub_into_lt", ["linarith"]], ["add", "theorem", "sub_subst", ["linarith"]], ["add", "def", "repr", ["linarith", "tree"]], ["add", "inductive", "{u}", ["linarith"]]]}, {"oldPath": null, "newPath": "tests/linarith_tests.lean", "changes": []}]}, {"timestamp": 1535918321, "sha": "8c19da7e", "message": "feat(data/polynomial): has_repr for polynomials (#302)\nNot sure if I should change this so that it will always return a string that will not cause any problems if copied and pasted into a lemma. It does this for rationals and integers, although for rationals, it returns something equal to the polynomial you would like, but probably not the polynomial you actually want, i.e. `(2 / 3 : polynomial ℚ)` more or less gives you `(C 2 / C 3)`, rather than `C (2 / 3)`. These expressions are def eq, but not in any reasonable amount of time as soon as the size gets slightly larger.", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}]}, {"timestamp": 1535918062, "sha": "2594f48f", "message": "style(linear_algebra/tensor_product): renaming and changing some proofs", "changes": [{"oldPath": "group_theory/free_abelian_group.lean", "newPath": "group_theory/free_abelian_group.lean", "changes": [["add", "theorem", "coe", ["free_abelian_group", "to_add_comm_group"]], ["add", "theorem", "sub", ["free_abelian_group", "to_add_comm_group"]]]}, {"oldPath": "linear_algebra/tensor_product.lean", "newPath": "linear_algebra/tensor_product.lean", "changes": [["mod", "theorem", "comm", ["is_bilinear_map"]], ["mod", "theorem", "comp", ["is_bilinear_map"]], ["add", "theorem", "linear_left", ["is_bilinear_map"]], ["del", "theorem", "linear_pair", ["is_bilinear_map"]], ["add", "theorem", "linear_right", ["is_bilinear_map"]], ["add", "theorem", "neg_left", ["is_bilinear_map"]], ["del", "theorem", "neg_pair", ["is_bilinear_map"]], ["add", "theorem", "neg_right", ["is_bilinear_map"]], ["del", "theorem", "pair_linear", ["is_bilinear_map"]], ["del", "theorem", "pair_neg", ["is_bilinear_map"]], ["del", "theorem", "pair_zero", ["is_bilinear_map"]], ["add", "theorem", "zero_left", ["is_bilinear_map"]], ["del", "theorem", "zero_pair", ["is_bilinear_map"]], ["add", "theorem", "zero_right", ["is_bilinear_map"]], ["mod", "structure", "is_bilinear_map", []], ["mod", "theorem", "add_of", ["tensor_product"]], ["add", "theorem", "add_left", ["tensor_product", "of"]], ["add", "theorem", "add_right", ["tensor_product", "of"]], ["add", "theorem", "smul", ["tensor_product", "of"]], ["mod", "theorem", "of_add", ["tensor_product"]], ["mod", "theorem", "of_smul", ["tensor_product"]], ["add", "theorem", "is_add_group_hom", ["tensor_product", "smul"]], ["del", "def", "is_add_group_hom", ["tensor_product", "smul"]], ["mod", "theorem", "smul_of", ["tensor_product"]], ["mod", "def", "tensor_product", []]]}]}, {"timestamp": 1535918062, "sha": "4b5ad0ea", "message": "feat(linear_algebra,group_theory): add tensor product and supporting material", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": null, "newPath": "group_theory/abelianization.lean", "changes": [["add", "def", "of", ["abelianization"]], ["add", "def", "is_group_hom", ["abelianization", "to_comm_group"]], ["add", "theorem", "of", ["abelianization", "to_comm_group"]], ["add", "theorem", "unique", ["abelianization", "to_comm_group"]], ["add", "def", "to_comm_group", ["abelianization"]], ["add", "def", "abelianization", []], ["add", "def", "commutator", []]]}, {"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["add", "theorem", "induction_on'", ["quotient_group"]], ["add", "theorem", "induction_on", ["quotient_group"]]]}, {"oldPath": null, "newPath": "group_theory/free_abelian_group.lean", "changes": [["add", "def", "UMP", ["free_abelian_group"]], ["add", "theorem", "coe_def", ["free_abelian_group"]], ["add", "def", "of", ["free_abelian_group"]], ["add", "theorem", "add", ["free_abelian_group", "to_add_comm_group"]], ["add", "theorem", "ext", ["free_abelian_group", "to_add_comm_group"]], ["add", "def", "is_add_group_hom", ["free_abelian_group", "to_add_comm_group"]], ["add", "theorem", "neg", ["free_abelian_group", "to_add_comm_group"]], ["add", "theorem", "of", ["free_abelian_group", "to_add_comm_group"]], ["add", "theorem", "unique", ["free_abelian_group", "to_add_comm_group"]], ["add", "theorem", "zero", ["free_abelian_group", "to_add_comm_group"]], ["add", "def", "to_add_comm_group", ["free_abelian_group"]], ["add", "def", "free_abelian_group", []]]}, {"oldPath": "group_theory/quotient_group.lean", "newPath": "group_theory/quotient_group.lean", "changes": []}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": []}, {"oldPath": null, "newPath": "linear_algebra/tensor_product.lean", "changes": [["add", "theorem", "comm", ["is_bilinear_map"]], ["add", "theorem", "comp", ["is_bilinear_map"]], ["add", "theorem", "linear_pair", ["is_bilinear_map"]], ["add", "theorem", "neg_pair", ["is_bilinear_map"]], ["add", "theorem", "pair_linear", ["is_bilinear_map"]], ["add", "theorem", "pair_neg", ["is_bilinear_map"]], ["add", "theorem", "pair_zero", ["is_bilinear_map"]], ["add", "theorem", "zero_pair", ["is_bilinear_map"]], ["add", "structure", "is_bilinear_map", []], ["add", "theorem", "add_of", ["tensor_product"]], ["add", "theorem", "bilinear", ["tensor_product"]], ["add", "def", "of", ["tensor_product"]], ["add", "theorem", "of_add", ["tensor_product"]], ["add", "theorem", "of_smul", ["tensor_product"]], ["add", "def", "relators", ["tensor_product"]], ["add", "def", "aux", ["tensor_product", "smul"]], ["add", "def", "is_add_group_hom", ["tensor_product", "smul"]], ["add", "def", "smul", ["tensor_product"]], ["add", "theorem", "smul_of", ["tensor_product"]], ["add", "theorem", "add", ["tensor_product", "to_module"]], ["add", "def", "equiv", ["tensor_product", "to_module"]], ["add", "theorem", "ext", ["tensor_product", "to_module"]], ["add", "def", "linear", ["tensor_product", "to_module"]], ["add", "theorem", "of", ["tensor_product", "to_module"]], ["add", "theorem", "smul", ["tensor_product", "to_module"]], ["add", "theorem", "unique", ["tensor_product", "to_module"]], ["add", "def", "to_module", ["tensor_product"]], ["add", "def", "tensor_product", []]]}]}, {"timestamp": 1535895403, "sha": "dd6b0351", "message": "feat(data/option): add simp lemmas for orelse", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "none_orelse'", ["option"]], ["add", "theorem", "none_orelse", ["option"]], ["mod", "theorem", "orelse_none'", ["option"]], ["mod", "theorem", "orelse_none", ["option"]], ["del", "theorem", "orelse_some'", ["option"]], ["del", "theorem", "orelse_some", ["option"]], ["add", "theorem", "some_orelse'", ["option"]], ["add", "theorem", "some_orelse", ["option"]]]}]}, {"timestamp": 1535908882, "sha": "3de3cfb3", "message": "feat(tactic/subtype_instance): generating subtype instances", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "def", "map_head", ["list"]], ["add", "def", "map_last", ["list"]]]}, {"oldPath": "data/string.lean", "newPath": "data/string.lean", "changes": [["add", "def", "map_tokens", ["string"]]]}, {"oldPath": null, "newPath": "field_theory/subfield.lean", "changes": []}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": []}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": []}, {"oldPath": null, "newPath": "ring_theory/subring.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/algebra.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/subtype_instance.lean", "changes": [["add", "def", "mk_mem_name", ["tactic"]]]}]}, {"timestamp": 1535807414, "sha": "b7b05fbb", "message": "style(ring_theory): rename PID to principal_ideal_domain", "changes": [{"oldPath": "ring_theory/PID.lean", "newPath": "ring_theory/principal_ideal_domain.lean", "changes": []}]}, {"timestamp": 1535737705, "sha": "20b41439", "message": "feat(algebra): add normalization and GCD domain; setup for int", "changes": [{"oldPath": null, "newPath": "algebra/gcd_domain.lean", "changes": [["add", "theorem", "associated_of_dvd_of_dvd", []], ["add", "theorem", "dvd_antisymm_of_norm", []], ["add", "theorem", "dvd_gcd_iff", []], ["add", "theorem", "dvd_lcm_left", []], ["add", "theorem", "dvd_lcm_right", []], ["add", "theorem", "gcd_assoc", []], ["add", "theorem", "gcd_comm", []], ["add", "theorem", "gcd_dvd_gcd", []], ["add", "theorem", "gcd_dvd_gcd_mul_left", []], ["add", "theorem", "gcd_dvd_gcd_mul_left_right", []], ["add", "theorem", "gcd_dvd_gcd_mul_right", []], ["add", "theorem", "gcd_dvd_gcd_mul_right_right", []], ["add", "theorem", "gcd_eq_left_iff", []], ["add", "theorem", "gcd_eq_mul_norm_unit", []], ["add", "theorem", "gcd_eq_right_iff", []], ["add", "theorem", "gcd_eq_zero_iff", []], ["add", "theorem", "gcd_mul_lcm", []], ["add", "theorem", "gcd_mul_left", []], ["add", "theorem", "gcd_mul_right", []], ["add", "theorem", "gcd_one_left", []], ["add", "theorem", "gcd_one_right", []], ["add", "theorem", "gcd_same", []], ["add", "theorem", "gcd_zero_left", []], ["add", "theorem", "gcd_zero_right", []], ["add", "theorem", "lcm_assoc", []], ["add", "theorem", "lcm_comm", []], ["add", "theorem", "lcm_dvd", []], ["add", "theorem", "lcm_dvd_iff", []], ["add", "theorem", "lcm_dvd_lcm", []], ["add", "theorem", "lcm_dvd_lcm_mul_left", []], ["add", "theorem", "lcm_dvd_lcm_mul_left_right", []], ["add", "theorem", "lcm_dvd_lcm_mul_right", []], ["add", "theorem", "lcm_dvd_lcm_mul_right_right", []], ["add", "theorem", "lcm_eq_left_iff", []], ["add", "theorem", "lcm_eq_mul_norm_unit", []], ["add", "theorem", "lcm_eq_one_iff", []], ["add", "theorem", "lcm_eq_right_iff", []], ["add", "theorem", "lcm_eq_zero_iff", []], ["add", "theorem", "lcm_mul_left", []], ["add", "theorem", "lcm_mul_right", []], ["add", "theorem", "lcm_one_left", []], ["add", "theorem", "lcm_one_right", []], ["add", "theorem", "lcm_same", []], ["add", "theorem", "lcm_units_coe_left", []], ["add", "theorem", "lcm_units_coe_right", []], ["add", "theorem", "mul_norm_unit_eq_mul_norm_unit", []], ["add", "theorem", "norm_unit_gcd", []], ["add", "theorem", "norm_unit_lcm", []], ["add", "theorem", "norm_unit_mul_norm_unit", []], ["add", "theorem", "norm_unit_one", []]]}, {"oldPath": "data/int/gcd.lean", "newPath": "data/int/gcd.lean", "changes": [["add", "theorem", "coe_gcd", ["int"]], ["add", "theorem", "coe_lcm", ["int"]], ["add", "theorem", "coe_nat_abs_eq_mul_norm_unit", ["int"]], ["mod", "theorem", "dvd_gcd", ["int"]], ["del", "theorem", "eq_zero_of_gcd_eq_zero_left", ["int"]], ["del", "theorem", "eq_zero_of_gcd_eq_zero_right", ["int"]], ["mod", "theorem", "gcd_assoc", ["int"]], ["mod", "theorem", "gcd_comm", ["int"]], ["del", "theorem", "gcd_dvd", ["int"]], ["add", "theorem", "gcd_eq_zero_iff", ["int"]], ["mod", "theorem", "gcd_one_right", ["int"]], ["mod", "theorem", "gcd_self", ["int"]], ["mod", "theorem", "gcd_zero_right", ["int"]], ["mod", "def", "lcm", ["int"]], ["mod", "theorem", "lcm_def", ["int"]], ["mod", "theorem", "lcm_dvd", ["int"]], ["mod", "theorem", "lcm_one_left", ["int"]], ["mod", "theorem", "lcm_one_right", ["int"]], ["mod", "theorem", "lcm_self", ["int"]], ["mod", "theorem", "lcm_zero_left", ["int"]], ["mod", "theorem", "lcm_zero_right", ["int"]], ["add", "theorem", "nat_abs_gcd", ["int"]], ["add", "theorem", "nat_abs_lcm", ["int"]], ["add", "theorem", "norm_unit_nat_coe", ["int"]], ["add", "theorem", "norm_unit_of_neg", ["int"]], ["add", "theorem", "norm_unit_of_nonneg", ["int"]]]}]}, {"timestamp": 1535737705, "sha": "5df7cacb", "message": "refactor(data/int/gcd): move int gcd proofs to the GCD theory", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["del", "theorem", "nat_abs_div", ["int"]], ["del", "theorem", "nat_abs_dvd_abs_iff", ["int"]], ["del", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", ["int"]], ["del", "def", "gcd_a", ["nat"]], ["del", "def", "gcd_b", ["nat"]], ["del", "theorem", "gcd_eq_gcd_ab", ["nat"]], ["del", "def", "xgcd", ["nat"]], ["del", "def", "xgcd_aux", ["nat"]], ["del", "theorem", "xgcd_aux_P", ["nat"]], ["del", "theorem", "xgcd_aux_fst", ["nat"]], ["del", "theorem", "xgcd_aux_rec", ["nat"]], ["del", "theorem", "xgcd_aux_val", ["nat"]], ["del", "theorem", "xgcd_val", ["nat"]], ["del", "theorem", "xgcd_zero_left", ["nat"]]]}, {"oldPath": "data/int/gcd.lean", "newPath": "data/int/gcd.lean", "changes": [["mod", "theorem", "gcd_comm", ["int"]], ["mod", "theorem", "gcd_dvd", ["int"]], ["mod", "theorem", "gcd_dvd_left", ["int"]], ["mod", "theorem", "gcd_mul_right", ["int"]], ["mod", "theorem", "lcm_one_right", ["int"]], ["add", "theorem", "nat_abs_div", ["int"]], ["add", "theorem", "nat_abs_dvd_abs_iff", ["int"]], ["add", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", ["int"]], ["add", "def", "gcd_a", ["nat"]], ["add", "def", "gcd_b", ["nat"]], ["add", "theorem", "gcd_eq_gcd_ab", ["nat"]], ["add", "def", "xgcd", ["nat"]], ["add", "def", "xgcd_aux", ["nat"]], ["add", "theorem", "xgcd_aux_P", ["nat"]], ["add", "theorem", "xgcd_aux_fst", ["nat"]], ["add", "theorem", "xgcd_aux_rec", ["nat"]], ["add", "theorem", "xgcd_aux_val", ["nat"]], ["add", "theorem", "xgcd_val", ["nat"]], ["add", "theorem", "xgcd_zero_left", ["nat"]]]}, {"oldPath": "data/nat/modeq.lean", "newPath": "data/nat/modeq.lean", "changes": []}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": []}, {"oldPath": "data/zmod.lean", "newPath": "data/zmod.lean", "changes": []}]}, {"timestamp": 1535737705, "sha": "a89f28e0", "message": "feat(data/int/gcd): extended gcd to integers (#218)\nResurrected by @johoelzl. The original commit was not available anymore.", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "nat_abs_div", ["int"]], ["add", "theorem", "nat_abs_dvd_abs_iff", ["int"]], ["mod", "theorem", "nat_abs_neg_of_nat", ["int"]]]}, {"oldPath": null, "newPath": "data/int/gcd.lean", "changes": [["add", "theorem", "dvd_gcd", ["int"]], ["add", "theorem", "dvd_lcm_left", ["int"]], ["add", "theorem", "dvd_lcm_right", ["int"]], ["add", "theorem", "dvd_of_mul_dvd_mul_left", ["int"]], ["add", "theorem", "dvd_of_mul_dvd_mul_right", ["int"]], ["add", "theorem", "eq_zero_of_gcd_eq_zero_left", ["int"]], ["add", "theorem", "eq_zero_of_gcd_eq_zero_right", ["int"]], ["add", "theorem", "gcd_assoc", ["int"]], ["add", "theorem", "gcd_comm", ["int"]], ["add", "theorem", "gcd_div", ["int"]], ["add", "theorem", "gcd_dvd", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_left", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_left_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_mul_right_right", ["int"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_left", ["int"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_right", ["int"]], ["add", "theorem", "gcd_dvd_left", ["int"]], ["add", "theorem", "gcd_dvd_right", ["int"]], ["add", "theorem", "gcd_eq_left", ["int"]], ["add", "theorem", "gcd_eq_right", ["int"]], ["add", "theorem", "gcd_mul_lcm", ["int"]], ["add", "theorem", "gcd_mul_left", ["int"]], ["add", "theorem", "gcd_mul_right", ["int"]], ["add", "theorem", "gcd_one_left", ["int"]], ["add", "theorem", "gcd_one_right", ["int"]], ["add", "theorem", "gcd_pos_of_non_zero_left", ["int"]], ["add", "theorem", "gcd_pos_of_non_zero_right", ["int"]], ["add", "theorem", "gcd_self", ["int"]], ["add", "theorem", "gcd_zero_left", ["int"]], ["add", "theorem", "gcd_zero_right", ["int"]], ["add", "def", "lcm", ["int"]], ["add", "theorem", "lcm_assoc", ["int"]], ["add", "theorem", "lcm_comm", ["int"]], ["add", "theorem", "lcm_def", ["int"]], ["add", "theorem", "lcm_dvd", ["int"]], ["add", "theorem", "lcm_one_left", ["int"]], ["add", "theorem", "lcm_one_right", ["int"]], ["add", "theorem", "lcm_self", ["int"]], ["add", "theorem", "lcm_zero_left", ["int"]], ["add", "theorem", "lcm_zero_right", ["int"]]]}]}, {"timestamp": 1535726698, "sha": "ee9bf5c9", "message": "feat(data/equiv): equiv_congr and perm_congr", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "def", "equiv_congr", ["equiv"]], ["add", "def", "perm_congr", ["equiv"]], ["add", "theorem", "trans_assoc", ["equiv"]]]}]}, {"timestamp": 1535706874, "sha": "4068d005", "message": "feat(data/nat): simp rules for find_greatest", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "find_greatest_eq", ["nat"]], ["add", "theorem", "find_greatest_of_not", ["nat"]], ["add", "theorem", "find_greatest_zero", ["nat"]]]}]}, {"timestamp": 1535679914, "sha": "2946088e", "message": "feat(tactic/explode): line by line proof display for proof terms", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/explode.lean", "changes": [["add", "def", "head'", ["tactic", "explode"]], ["add", "inductive", "status", ["tactic", "explode"]]]}]}, {"timestamp": 1535654388, "sha": "86c955eb", "message": "feat(data/nat): find_greatest is always bounded", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "find_greatest_le", ["nat"]]]}]}, {"timestamp": 1535650219, "sha": "c238aadb", "message": "refactor(data/nat): simplify find_greatest; fix namespace nat.nat.find_greatest -> nat.find_greatest", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "find_greatest_is_greatest", ["nat"]], ["add", "theorem", "find_greatest_spec", ["nat"]], ["add", "theorem", "find_greatest_spec_and_le", ["nat"]], ["add", "theorem", "le_find_greatest", ["nat"]], ["mod", "theorem", "mul_pow", ["nat"]], ["mod", "theorem", "div_mul_div", ["nat", "nat"]], ["del", "theorem", "find_greatest_is_greatest", ["nat", "nat"]], ["del", "theorem", "find_greatest_spec", ["nat", "nat"]]]}]}, {"timestamp": 1535643285, "sha": "83edcc06", "message": "refactor(data/nat,int): separate int from nat, i.e. do not import any int theory in nat", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_dvd_left", ["int"]], ["add", "theorem", "coe_nat_dvd_right", ["int"]], ["mod", "theorem", "dvd_nat_abs_of_of_nat_dvd", ["int"]], ["mod", "theorem", "pow_div_of_le_of_pow_div_int", ["int"]], ["add", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", ["int"]], ["add", "def", "gcd_a", ["nat"]], ["add", "def", "gcd_b", ["nat"]], ["add", "theorem", "gcd_eq_gcd_ab", ["nat"]], ["add", "def", "xgcd", ["nat"]], ["add", "def", "xgcd_aux", ["nat"]], ["add", "theorem", "xgcd_aux_P", ["nat"]], ["add", "theorem", "xgcd_aux_fst", ["nat"]], ["add", "theorem", "xgcd_aux_rec", ["nat"]], ["add", "theorem", "xgcd_aux_val", ["nat"]], ["add", "theorem", "xgcd_val", ["nat"]], ["add", "theorem", "xgcd_zero_left", ["nat"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["del", "def", "gcd_a", ["nat"]], ["del", "def", "gcd_b", ["nat"]], ["del", "theorem", "gcd_eq_gcd_ab", ["nat"]], ["del", "def", "xgcd", ["nat"]], ["del", "def", "xgcd_aux", ["nat"]], ["del", "theorem", "xgcd_aux_P", ["nat"]], ["del", "theorem", "xgcd_aux_fst", ["nat"]], ["del", "theorem", "xgcd_aux_rec", ["nat"]], ["del", "theorem", "xgcd_aux_val", ["nat"]], ["del", "theorem", "xgcd_val", ["nat"]], ["del", "theorem", "xgcd_zero_left", ["nat"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["del", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul_int", ["nat"]]]}, {"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": []}, {"oldPath": "data/zmod.lean", "newPath": "data/zmod.lean", "changes": []}]}, {"timestamp": 1535640956, "sha": "d2451658", "message": "refactor(algebra): add more facts about units", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["del", "theorem", "ne_zero", ["units"]]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "def", "mk_of_mul_eq_one", ["units"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "coe_dvd", ["units"]], ["add", "theorem", "coe_mul_dvd", ["units"]], ["add", "theorem", "dvd_coe", ["units"]], ["add", "theorem", "dvd_coe_mul", ["units"]], ["add", "theorem", "ne_zero", ["units"]], ["add", "theorem", "zero_dvd_iff_eq_zero", []]]}]}, {"timestamp": 1535635627, "sha": "b4b05dd2", "message": "feat(logic/basic): introduce pempty", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["del", "def", "arrow_empty_unit", ["equiv"]], ["add", "def", "equiv_pempty", ["equiv"]], ["add", "def", "false_equiv_pempty", ["equiv"]], ["add", "def", "pempty_arrow_equiv_unit", ["equiv"]], ["add", "def", "pempty_equiv_pempty", ["equiv"]], ["add", "def", "pempty_prod", ["equiv"]], ["add", "def", "pempty_sum", ["equiv"]], ["add", "def", "prod_pempty", ["equiv"]], ["add", "def", "sum_pempty", ["equiv"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_pempty", ["fintype"]], ["add", "theorem", "univ_pempty", ["fintype"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "def", "elim", ["pempty"]], ["add", "inductive", "{u}", []]]}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "tactic/auto_cases.lean", "newPath": "tactic/auto_cases.lean", "changes": []}]}, {"timestamp": 1535555231, "sha": "afd1c063", "message": "feat(algebra/group): is_add_group_hom", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "sub", ["is_add_group_hom"]]]}]}, {"timestamp": 1535554087, "sha": "b0aadaaa", "message": "cleanup(analysis/bounded_linear_maps): some reorganization", "changes": [{"oldPath": null, "newPath": "analysis/bounded_linear_maps.lean", "changes": [["add", "theorem", "bounded_continuous_linear_map", []], ["add", "theorem", "add", ["is_bounded_linear_map"]], ["add", "theorem", "comp", ["is_bounded_linear_map"]], ["add", "theorem", "continuous", ["is_bounded_linear_map"]], ["add", "theorem", "id", ["is_bounded_linear_map"]], ["add", "theorem", "lim_zero_bounded_linear_map", ["is_bounded_linear_map"]], ["add", "theorem", "neg", ["is_bounded_linear_map"]], ["add", "theorem", "smul", ["is_bounded_linear_map"]], ["add", "theorem", "sub", ["is_bounded_linear_map"]], ["add", "theorem", "tendsto", ["is_bounded_linear_map"]], ["add", "theorem", "zero", ["is_bounded_linear_map"]], ["add", "structure", "is_bounded_linear_map", []], ["add", "theorem", "with_bound", ["is_linear_map"]], ["add", "theorem", "mul_inv_eq'", []]]}, {"oldPath": "analysis/continuous_linear_maps.lean", "newPath": null, "changes": [["del", "theorem", "bounded_continuous_linear_map", []], ["del", "theorem", "add", ["is_bounded_linear_map"]], ["del", "theorem", "comp", ["is_bounded_linear_map"]], ["del", "theorem", "continuous", ["is_bounded_linear_map"]], ["del", "theorem", "id", ["is_bounded_linear_map"]], ["del", "theorem", "lim_zero_bounded_linear_map", ["is_bounded_linear_map"]], ["del", "theorem", "neg", ["is_bounded_linear_map"]], ["del", "theorem", "smul", ["is_bounded_linear_map"]], ["del", "theorem", "sub", ["is_bounded_linear_map"]], ["del", "theorem", "zero", ["is_bounded_linear_map"]], ["del", "def", "is_bounded_linear_map", []]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "exists_delta_of_continuous", []]]}, {"oldPath": "analysis/normed_space.lean", "newPath": "analysis/normed_space.lean", "changes": [["add", "theorem", "norm_eq_abs", ["real"]]]}]}, {"timestamp": 1535554087, "sha": "21a93552", "message": "feat(analysis/continuous_linear_maps)", "changes": [{"oldPath": null, "newPath": "analysis/continuous_linear_maps.lean", "changes": [["add", "theorem", "bounded_continuous_linear_map", []], ["add", "theorem", "add", ["is_bounded_linear_map"]], ["add", "theorem", "comp", ["is_bounded_linear_map"]], ["add", "theorem", "continuous", ["is_bounded_linear_map"]], ["add", "theorem", "id", ["is_bounded_linear_map"]], ["add", "theorem", "lim_zero_bounded_linear_map", ["is_bounded_linear_map"]], ["add", "theorem", "neg", ["is_bounded_linear_map"]], ["add", "theorem", "smul", ["is_bounded_linear_map"]], ["add", "theorem", "sub", ["is_bounded_linear_map"]], ["add", "theorem", "zero", ["is_bounded_linear_map"]], ["add", "def", "is_bounded_linear_map", []]]}]}, {"timestamp": 1535553512, "sha": "49f700c7", "message": "feat(analysis/topology/uniform_space): prepare for completions (#297)", "changes": [{"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "eq_of_separated_of_uniform_continuous", []], ["add", "theorem", "separated_of_uniform_continuous", []], ["add", "theorem", "separation_prod", []], ["mod", "theorem", "prod_mk", ["uniform_continuous"]], ["add", "theorem", "prod_mk_left", ["uniform_continuous"]], ["add", "theorem", "prod_mk_right", ["uniform_continuous"]], ["add", "theorem", "uniform_continuous_quotient", []], ["add", "theorem", "uniform_continuous_quotient_lift", []], ["add", "theorem", "uniform_continuous_quotient_lift₂", []], ["add", "theorem", "uniformity_quotient", []]]}]}, {"timestamp": 1535511313, "sha": "0c11112c", "message": "feat(logic/function): adds uncurry_def (#293)", "changes": [{"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "uncurry_def", ["function"]]]}]}, {"timestamp": 1535511222, "sha": "b82ba3c1", "message": "feat(data/multiset): multisets are traversable using commutative, applicative functors (#220)", "changes": [{"oldPath": "category/applicative.lean", "newPath": "category/applicative.lean", "changes": []}, {"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": [["del", "theorem", "comp_traverse", ["list"]], ["del", "theorem", "id_traverse", ["list"]], ["del", "theorem", "naturality", ["list"]], ["del", "theorem", "traverse_eq_map_id", ["list"]], ["add", "theorem", "traverse_append", []]]}, {"oldPath": "category/traversable/lemmas.lean", "newPath": "category/traversable/lemmas.lean", "changes": [["add", "theorem", "map_traverse'", ["traversable"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "coe_append_eq_add_coe", ["multiset"]], ["add", "theorem", "coe_list_cons_eq_cons_coe", ["multiset"]], ["add", "theorem", "coe_traverse_cons", ["multiset"]], ["add", "theorem", "coe_traverse_cons_swap", ["multiset"]], ["add", "theorem", "comp_traverse", ["multiset"]], ["add", "theorem", "id_traverse", ["multiset"]], ["add", "theorem", "lift_beta", ["multiset"]], ["add", "theorem", "map_comp_coe", ["multiset"]], ["add", "theorem", "map_traverse", ["multiset"]], ["add", "theorem", "naturality", ["multiset"]], ["add", "def", "traverse", ["multiset"]], ["add", "theorem", "traverse_map", ["multiset"]]]}]}, {"timestamp": 1535510813, "sha": "3e38b733", "message": "feat(analysis/topology): density and continuity lemmas (#292)\nStill from the perfectoid project", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "closure_image_nhds_of_nhds", ["dense_embedding"]], ["add", "theorem", "self_sub_closure_image_preimage_of_open", ["dense_embedding"]], ["add", "theorem", "tendsto_vmap_nhds_nhds", ["dense_embedding"]]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "dense_iff_inter_open", []], ["add", "theorem", "quotient_dense_of_dense", []]]}]}, {"timestamp": 1535510715, "sha": "4eca29f3", "message": "doc(docs/howto-contribute.md): How to contribute to mathlib (#291)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "docs/howto-contribute.md", "changes": []}]}, {"timestamp": 1535510559, "sha": "79bb95c5", "message": "feat(analysis/topology, data/set): some zerology (#295)", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "closure_empty_iff", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "nonempty_iff_univ_ne_empty", ["set"]], ["add", "theorem", "nonempty_of_nonempty_range", ["set"]]]}]}, {"timestamp": 1535509564, "sha": "49fb2db3", "message": "fix(docs/style): precise a style rule and fixes a github markdown issue (#290)", "changes": [{"oldPath": "docs/style.md", "newPath": "docs/style.md", "changes": []}]}, {"timestamp": 1535502483, "sha": "bab38133", "message": "feat(ring_theory/PID): PIDs and xgcd for ED (#298)", "changes": [{"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": [["add", "def", "gcd_a", ["euclidean_domain"]], ["add", "def", "gcd_b", ["euclidean_domain"]], ["add", "theorem", "gcd_eq_gcd_ab", ["euclidean_domain"]], ["add", "theorem", "mod_eq_sub_mul_div", ["euclidean_domain"]], ["add", "def", "xgcd", ["euclidean_domain"]], ["add", "def", "xgcd_aux", ["euclidean_domain"]], ["add", "theorem", "xgcd_aux_P", ["euclidean_domain"]], ["add", "theorem", "xgcd_aux_fst", ["euclidean_domain"]], ["add", "theorem", "xgcd_aux_rec", ["euclidean_domain"]], ["add", "theorem", "xgcd_aux_val", ["euclidean_domain"]], ["add", "theorem", "xgcd_val", ["euclidean_domain"]], ["add", "theorem", "xgcd_zero_left", ["euclidean_domain"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "zero_dvd_iff", []]]}, {"oldPath": null, "newPath": "ring_theory/PID.lean", "changes": [["add", "theorem", "to_maximal_ideal", ["is_prime_ideal"]], ["add", "theorem", "eq_trivial_iff_generator_eq_zero", ["is_principal_ideal"]], ["add", "theorem", "generator_generates", ["is_principal_ideal"]], ["add", "theorem", "generator_mem", ["is_principal_ideal"]], ["add", "theorem", "mem_iff_generator_dvd", ["is_principal_ideal"]], ["add", "theorem", "mod_mem_iff", []]]}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["add", "theorem", "mem_trivial", ["is_ideal"]], ["mod", "theorem", "mk", ["is_maximal_ideal"]], ["mod", "theorem", "is_proper_ideal_iff_one_not_mem", []], ["mod", "theorem", "eq_zero_iff_mem", ["quotient_ring"]]]}]}, {"timestamp": 1535487013, "sha": "cd731156", "message": "refactor(data/set/basic): clean up #288 and #289", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["del", "theorem", "mem_prod'", ["set"]], ["add", "theorem", "mk_mem_prod", ["set"]], ["mod", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["del", "theorem", "inter_vmap_sets", ["filter"]], ["add", "theorem", "sInter_vmap_sets", ["filter"]], ["mod", "theorem", "vmap_eq_of_inverse", ["filter"]]]}]}, {"timestamp": 1535486993, "sha": "8d3bd80b", "message": "feat(tactic/tidy): add tidy tactic (#285)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "tactic/auto_cases.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/chain.lean", "changes": [["add", "inductive", "tactic_script", ["tactic"]]]}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/tidy.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}, {"oldPath": null, "newPath": "tests/tidy.lean", "changes": [["add", "structure", "A", ["tidy", "test"]], ["add", "structure", "B", ["tidy", "test"]], ["add", "structure", "C", ["tidy", "test"]], ["add", "structure", "D", ["tidy", "test"]], ["add", "def", "d", ["tidy", "test"]], ["add", "def", "f", ["tidy", "test"]], ["add", "def", "tidy_test_0", ["tidy", "test"]], ["add", "def", "tidy_test_1", ["tidy", "test"]]]}]}, {"timestamp": 1535485210, "sha": "9ad32e72", "message": "feat(order/filter): More lemmas from perfectoid project (#289)", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "prod_sub_preimage_iff", ["set"]], ["del", "theorem", "sub_preimage_iff", ["set"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "inter_vmap_sets", ["filter"]], ["add", "theorem", "tendsto_prod_iff", ["filter"]], ["add", "theorem", "tendsto_prod_self_iff", ["filter"]], ["add", "theorem", "vmap_eq_of_inverse", ["filter"]]]}]}, {"timestamp": 1535485138, "sha": "3f65a930", "message": "fix(tactic/restate_axiom): change default naming in restate_axiom (#286)\n* beginning renaming\n* modifying names in restate_axiom\n* removing ematch attributes from category_theory\n* improving behaviour of `restate_axiom`, documenting and testing\n* oops", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": []}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["add", "theorem", "map_comp", ["category_theory", "functor"]], ["del", "theorem", "map_comp_lemma", ["category_theory", "functor"]], ["add", "theorem", "map_id", ["category_theory", "functor"]], ["del", "theorem", "map_id_lemma", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": [["mod", "theorem", "comp_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "id_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "app_naturality", ["category_theory", "functor", "category", "nat_trans"]], ["mod", "theorem", "naturality_app", ["category_theory", "functor", "category", "nat_trans"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["mod", "theorem", "exchange", ["category_theory", "nat_trans"]], ["add", "theorem", "naturality", ["category_theory", "nat_trans"]], ["del", "theorem", "naturality_lemma", ["category_theory", "nat_trans"]], ["mod", "theorem", "vcomp_assoc", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": []}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["mod", "theorem", "prod_map", ["category_theory", "functor"]], ["mod", "theorem", "prod_obj", ["category_theory", "functor"]], ["mod", "theorem", "prod_app", ["category_theory", "nat_trans"]], ["mod", "theorem", "prod_comp", ["category_theory"]], ["mod", "theorem", "prod_id", ["category_theory"]]]}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": [["mod", "theorem", "map_comp", ["category_theory", "functor_to_types"]], ["mod", "theorem", "map_id", ["category_theory", "functor_to_types"]], ["mod", "theorem", "naturality", ["category_theory", "functor_to_types"]]]}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/restate_axiom.lean", "newPath": "tactic/restate_axiom.lean", "changes": []}, {"oldPath": null, "newPath": "tests/restate_axiom.lean", "changes": [["add", "structure", "A", []]]}]}, {"timestamp": 1535477594, "sha": "ed5a3389", "message": "feat(data/set/basic): some more basic set lemmas (#288)", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "inter_singleton_ne_empty", ["set"]], ["add", "theorem", "mem_prod'", ["set"]], ["add", "theorem", "preimage_subset_iff", ["set"]], ["add", "theorem", "sub_preimage_iff", ["set"]]]}]}, {"timestamp": 1535468917, "sha": "39ffeab1", "message": "feat(analysis): add normed spaces", "changes": [{"oldPath": null, "newPath": "analysis/normed_space.lean", "changes": [["add", "theorem", "abs_norm_sub_norm_le", []], ["add", "theorem", "coe_nnnorm", []], ["add", "theorem", "continuous_norm", []], ["add", "theorem", "dist_eq_norm", []], ["add", "theorem", "dist_norm_norm_le", []], ["add", "theorem", "dist_zero_right", []], ["add", "theorem", "lim_norm", []], ["add", "theorem", "lim_norm_zero", []], ["add", "theorem", "nndist_eq_nnnorm", []], ["add", "theorem", "nndist_nnnorm_nnnorm_le", []], ["add", "def", "nnnorm", []], ["add", "theorem", "nnnorm_eq_zero", []], ["add", "theorem", "nnnorm_neg", []], ["add", "theorem", "nnnorm_smul", []], ["add", "theorem", "nnnorm_triangle", []], ["add", "theorem", "nnnorm_zero", []], ["add", "theorem", "norm_eq_zero", []], ["add", "theorem", "norm_fst_le", []], ["add", "theorem", "norm_le_zero_iff", []], ["add", "theorem", "norm_mul", []], ["add", "theorem", "norm_neg", []], ["add", "theorem", "norm_nonneg", []], ["add", "theorem", "norm_pos_iff", []], ["add", "theorem", "norm_smul", []], ["add", "theorem", "norm_snd_le", []], ["add", "theorem", "norm_triangle", []], ["add", "theorem", "norm_zero", []], ["add", "theorem", "squeeze_zero", []], ["add", "theorem", "tendsto_iff_norm_tendsto_zero", []], ["add", "theorem", "tendsto_smul", []]]}]}, {"timestamp": 1535468742, "sha": "2b9c9a80", "message": "refactor(analysis): add nndist; add finite product of metric spaces; prepare for normed spaces", "changes": [{"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["del", "theorem", "nhds_swap", ["topological_space"]], ["del", "theorem", "prod_mem_nhds_sets", ["topological_space"]], ["del", "theorem", "tendsto_nhds_generate_from", ["topological_space"]], ["del", "theorem", "tendsto_prod_mk_nhds", ["topological_space"]]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "coe_dist", []], ["del", "def", "dist", []], ["add", "theorem", "dist_pi_def", []], ["add", "theorem", "eq_of_nndist_eq_zero", []], ["add", "def", "nndist", []], ["add", "theorem", "nndist_comm", []], ["add", "theorem", "nndist_eq_zero", []], ["add", "theorem", "nndist_self", []], ["add", "theorem", "nndist_triangle", []], ["add", "theorem", "nndist_triangle_left", []], ["add", "theorem", "nndist_triangle_right", []], ["add", "theorem", "zero_eq_nndist", []]]}, {"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "map_nhds_eq", ["embedding"]], ["add", "theorem", "nhds_swap", []], ["add", "theorem", "prod_mem_nhds_sets", []], ["add", "theorem", "tendsto_prod_mk_nhds", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "tendsto_nhds_generate_from", ["topological_space"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "image_const", ["finset"]], ["mod", "theorem", "inf_insert", ["finset"]], ["mod", "theorem", "inf_singleton", ["finset"]], ["mod", "theorem", "inf_union", ["finset"]], ["add", "theorem", "le_inf_iff", ["finset"]], ["add", "theorem", "max_singleton'", ["finset"]], ["mod", "theorem", "sup_insert", ["finset"]], ["add", "theorem", "sup_le_iff", ["finset"]], ["mod", "theorem", "sup_singleton", ["finset"]], ["mod", "theorem", "sup_union", ["finset"]]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["add", "theorem", "bot_eq_zero", ["nnreal"]], ["add", "theorem", "mul_finset_sup", ["nnreal"]], ["add", "theorem", "mul_sup", ["nnreal"]]]}]}, {"timestamp": 1535468742, "sha": "41f56748", "message": "fix(algebra/pi_modules): pi instance for module shouldn't search for the ring structure", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": []}]}, {"timestamp": 1535467143, "sha": "5c221a31", "message": "feat(order/conditionally_complete_lattic): nat is a conditionally complete linear order with bottom", "changes": [{"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": []}, {"oldPath": "data/equiv/list.lean", "newPath": "data/equiv/list.lean", "changes": []}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "Inf_nat_def", ["lattice"]], ["add", "theorem", "Sup_nat_def", ["lattice"]]]}]}, {"timestamp": 1535451745, "sha": "de67f542", "message": "feat(data/real): cauchy sequence limit lemmas (#61)", "changes": [{"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["add", "theorem", "eq_lim_of_const_equiv", ["real"]], ["add", "theorem", "lim_add", ["real"]], ["add", "theorem", "lim_const", ["real"]], ["add", "theorem", "lim_eq_lim_of_equiv", ["real"]], ["add", "theorem", "lim_eq_of_equiv_const", ["real"]], ["add", "theorem", "lim_eq_zero_iff", ["real"]], ["add", "theorem", "lim_inv", ["real"]], ["add", "theorem", "lim_mul", ["real"]], ["add", "theorem", "lim_mul_lim", ["real"]], ["add", "theorem", "lim_neg", ["real"]]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": [["add", "theorem", "const_inv", ["cau_seq"]]]}]}, {"timestamp": 1535414930, "sha": "c420885d", "message": "fix(tactic/interactive): try reflexivity after substs (#275)\nThis brings `substs` closer to being equivalent to a sequence of `subst`.", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1535414807, "sha": "bca8d491", "message": "chore(data/array, data/buffer): Array and buffer cleanup (#277)", "changes": [{"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": [["mod", "theorem", "def", ["array", "mem"]], ["mod", "theorem", "mem_rev_list", ["array"]], ["add", "theorem", "mem_rev_list_aux", ["array"]], ["del", "theorem", "mem_rev_list_core", ["array"]], ["mod", "theorem", "mem_to_list", ["array"]], ["mod", "theorem", "mem_to_list_enum", ["array"]], ["mod", "theorem", "push_back_rev_list", ["array"]], ["add", "theorem", "push_back_rev_list_aux", ["array"]], ["del", "theorem", "push_back_rev_list_core", ["array"]], ["mod", "theorem", "push_back_to_list", ["array"]], ["mod", "theorem", "read_foreach", ["array"]], ["mod", "theorem", "read_foreach_aux", ["array"]], ["mod", "theorem", "read_map", ["array"]], ["mod", "theorem", "read_map₂", ["array"]], ["mod", "theorem", "rev_list_foldr", ["array"]], ["mod", "theorem", "rev_list_foldr_aux", ["array"]], ["mod", "theorem", "rev_list_length_aux", ["array"]], ["mod", "theorem", "rev_list_reverse", ["array"]], ["add", "theorem", "rev_list_reverse_aux", ["array"]], ["del", "theorem", "rev_list_reverse_core", ["array"]], ["mod", "theorem", "to_list_foldl", ["array"]], ["mod", "theorem", "to_list_nth", ["array"]], ["mod", "theorem", "to_list_nth_le'", ["array"]], ["mod", "theorem", "to_list_nth_le", ["array"]], ["add", "theorem", "to_list_nth_le_aux", ["array"]], ["del", "theorem", "to_list_nth_le_core", ["array"]], ["mod", "theorem", "to_list_of_heq", ["array"]], ["mod", "theorem", "to_list_reverse", ["array"]], ["mod", "theorem", "write_to_list", ["array"]], ["mod", "def", "d_array_equiv_fin", ["equiv"]]]}, {"oldPath": "data/buffer/basic.lean", "newPath": "data/buffer/basic.lean", "changes": [["mod", "theorem", "ext", ["buffer"]], ["mod", "theorem", "to_list_append_list", ["buffer"]]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}]}, {"timestamp": 1535410979, "sha": "c52b317f", "message": "refactor(data/finsupp): generalise finsupp.to_module (#284)", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "smul_apply'", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]], ["add", "def", "to_has_scalar'", ["finsupp"]], ["mod", "def", "to_has_scalar", ["finsupp"]], ["mod", "def", "to_module", ["finsupp"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": []}]}, {"timestamp": 1535388539, "sha": "9aa2bb0c", "message": "feat(data/fin): last (#273)", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "last", ["fin"]], ["add", "theorem", "le_last", ["fin"]]]}]}, {"timestamp": 1535388509, "sha": "a3a9e249", "message": "bug(tactic/interactive): make `solve_by_elim` fail on no goals (#279)", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1535388373, "sha": "c13a7711", "message": "feat(data/list): join_eq_nil, join_repeat_nil (#274)", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "join_eq_nil", ["list"]], ["add", "theorem", "join_repeat_nil", ["list"]]]}]}, {"timestamp": 1535380657, "sha": "92e9d64c", "message": "feat(category_theory): restating functor.map and nat_trans.app (#268)", "changes": [{"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["del", "theorem", "coe_def", ["category_theory", "functor"]], ["mod", "theorem", "comp_map", ["category_theory", "functor"]], ["add", "def", "map", ["category_theory", "functor"]], ["add", "theorem", "map_comp_lemma", ["category_theory", "functor"]], ["add", "theorem", "map_id_lemma", ["category_theory", "functor"]], ["add", "theorem", "mk_map", ["category_theory", "functor"]], ["add", "theorem", "mk_obj", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": [["mod", "theorem", "comp_app", ["category_theory", "functor", "category"]], ["mod", "theorem", "app_naturality", ["category_theory", "functor", "category", "nat_trans"]], ["mod", "theorem", "naturality_app", ["category_theory", "functor", "category", "nat_trans"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["del", "theorem", "coe_def", ["category_theory", "nat_trans"]], ["mod", "theorem", "exchange", ["category_theory", "nat_trans"]], ["mod", "theorem", "hcomp_app", ["category_theory", "nat_trans"]], ["add", "theorem", "mk_app", ["category_theory", "nat_trans"]], ["add", "theorem", "naturality_lemma", ["category_theory", "nat_trans"]], ["mod", "theorem", "vcomp_assoc", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/opposites.lean", "newPath": "category_theory/opposites.lean", "changes": []}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": []}, {"oldPath": "category_theory/types.lean", "newPath": "category_theory/types.lean", "changes": []}]}, {"timestamp": 1535379530, "sha": "e9558974", "message": "fix(travis.yml): adding a third stage to the travis build (#281)", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1534967416, "sha": "58cfe9f8", "message": "bug(ext): failure on ext lemmas with no hypotheses (#269)", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": [["add", "theorem", "ext", ["unit"]]]}]}, {"timestamp": 1534967286, "sha": "d18a3a82", "message": "doc(docs/tactics): add information on congr' (#270) [ci-skip]", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1534967217, "sha": "0934d7d9", "message": "refactor(data/nat/prime): mem_factors_iff_dvd (#272)", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "dvd_prod", ["list"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "mem_factors_iff_dvd", ["nat"]], ["del", "theorem", "mem_factors_of_dvd", ["nat"]]]}]}, {"timestamp": 1534966632, "sha": "974987ce", "message": "refactor(data/nat/prime): cleanup exists_infinite_primes (#271)\n* removing unnecessary initial step\n* giving names to ambiguous copies of `this`", "changes": [{"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["mod", "theorem", "exists_infinite_primes", ["nat"]], ["mod", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", ["nat"]], ["mod", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul_int", ["nat"]]]}]}, {"timestamp": 1534889108, "sha": "b3fc8013", "message": "refactor(data/real/nnreal): derive order structure for ennreal from with_top nnreal", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "le_add_left", []], ["add", "theorem", "le_add_right", []], ["del", "theorem", "bot_lt_some", ["with_bot"]], ["del", "theorem", "coe_lt_coe", ["with_bot"]], ["add", "theorem", "add_eq_top", ["with_top"]], ["add", "theorem", "add_lt_add_iff_left", ["with_top"]], ["del", "theorem", "coe_ne_top", ["with_top"]], ["del", "theorem", "top_ne_coe", ["with_top"]], ["add", "theorem", "zero_lt_coe", ["with_top"]], ["add", "theorem", "zero_lt_top", ["with_top"]]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["mod", "theorem", "mul_le_one", []], ["del", "theorem", "bind_comm", ["option"]], ["add", "theorem", "coe_mul", ["with_top"]], ["del", "theorem", "coe_mul_coe", ["with_top"]], ["del", "theorem", "none_eq_top", ["with_top"]], ["del", "theorem", "some_eq_coe", ["with_top"]], ["add", "theorem", "top_mul_top", ["with_top"]]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["del", "theorem", "Inf_add", ["ennreal"]], ["del", "theorem", "add_infi", ["ennreal"]], ["del", "theorem", "coe_eq_coe", ["ennreal"]], ["add", "theorem", "coe_image_univ_mem_nhds", ["ennreal"]], ["del", "theorem", "coe_mul", ["ennreal"]], ["add", "theorem", "coe_nat", ["ennreal"]], ["del", "theorem", "coe_one", ["ennreal"]], ["add", "theorem", "continuous_coe", ["ennreal"]], ["del", "theorem", "continuous_of_real", ["ennreal"]], ["add", "theorem", "embedding_coe", ["ennreal"]], ["del", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["del", "theorem", "infi_add", ["ennreal"]], ["del", "theorem", "infi_add_infi", ["ennreal"]], ["del", "theorem", "infi_of_real", ["ennreal"]], ["del", "theorem", "infi_sum", ["ennreal"]], ["add", "theorem", "is_open_ne_top", ["ennreal"]], ["add", "theorem", "nhds_coe", ["ennreal"]], ["add", "theorem", "nhds_coe_coe", ["ennreal"]], ["del", "theorem", "nhds_of_real_eq_map_of_real_nhds", ["ennreal"]], ["del", "theorem", "nhds_of_real_eq_map_of_real_nhds_nonneg", ["ennreal"]], ["del", "theorem", "sub_infi", ["ennreal"]], ["mod", "theorem", "sub_supr", ["ennreal"]], ["del", "theorem", "supr_of_real", ["ennreal"]], ["add", "theorem", "tendsto_coe", ["ennreal"]], ["del", "theorem", "tendsto_coe_iff", ["ennreal"]], ["add", "theorem", "tendsto_nhds_top", ["ennreal"]], ["del", "theorem", "tendsto_of_ennreal", ["ennreal"]], ["del", "theorem", "tendsto_of_real", ["ennreal"]], ["del", "theorem", "tendsto_of_real_iff", ["ennreal"]], ["add", "theorem", "tendsto_to_nnreal", ["ennreal"]], ["mod", "theorem", "has_sum_of_nonneg_of_le", []], ["add", "theorem", "exists_le_is_sum_of_le", ["nnreal"]], ["mod", "theorem", "has_sum_of_le", ["nnreal"]], ["add", "theorem", "nhds_swap", ["topological_space"]], ["add", "theorem", "prod_mem_nhds_sets", ["topological_space"]], ["add", "theorem", "tendsto_nhds_generate_from", ["topological_space"]], ["add", "theorem", "tendsto_prod_mk_nhds", ["topological_space"]]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": [["add", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["add", "theorem", "exists_pos_sum_of_encodable", ["nnreal"]]]}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": [["add", "theorem", "continuous_coe", ["nnreal"]], ["add", "theorem", "continuous_of_real", ["nnreal"]], ["add", "theorem", "tendsto_of_real", ["nnreal"]], ["add", "theorem", "tendsto_sub", ["nnreal"]], ["add", "theorem", "tsum_coe", ["nnreal"]]]}, {"oldPath": "analysis/probability_mass_function.lean", "newPath": "analysis/probability_mass_function.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "theorem", "tendsto_nhds_iff", ["embedding"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "bind_comm", ["option"]]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["add", "theorem", "Inf_empty", ["real"]], ["add", "theorem", "Inf_of_not_bdd_below", ["real"]], ["add", "theorem", "Sup_empty", ["real"]], ["add", "theorem", "Sup_of_not_bdd_above", ["real"]], ["mod", "def", "of_rat", ["real"]]]}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": [["add", "theorem", "Inf_add", ["ennreal"]], ["add", "theorem", "add_eq_top", ["ennreal"]], ["add", "theorem", "add_infi", ["ennreal"]], ["del", "theorem", "add_infty", ["ennreal"]], ["add", "theorem", "add_lt_add_iff_left", ["ennreal"]], ["mod", "theorem", "add_sub_self", ["ennreal"]], ["add", "theorem", "add_top", ["ennreal"]], ["add", "theorem", "bot_eq_zero", ["ennreal"]], ["add", "theorem", "coe_Inf", ["ennreal"]], ["add", "theorem", "coe_Sup", ["ennreal"]], ["add", "theorem", "coe_add", ["ennreal"]], ["add", "theorem", "coe_eq_coe", ["ennreal"]], ["add", "theorem", "coe_eq_one", ["ennreal"]], ["add", "theorem", "coe_eq_zero", ["ennreal"]], ["add", "theorem", "coe_finset_prod", ["ennreal"]], ["add", "theorem", "coe_finset_sum", ["ennreal"]], ["add", "theorem", "coe_le_coe", ["ennreal"]], ["add", "theorem", "coe_le_iff", ["ennreal"]], ["add", "theorem", "coe_le_one_iff", ["ennreal"]], ["add", "theorem", "coe_lt_coe", ["ennreal"]], ["add", "theorem", "coe_lt_one_iff", ["ennreal"]], ["add", "theorem", "coe_lt_top", ["ennreal"]], ["add", "theorem", "coe_mem_upper_bounds", ["ennreal"]], ["add", "theorem", "coe_mul", ["ennreal"]], ["add", "theorem", "coe_ne_top", ["ennreal"]], ["add", "theorem", "coe_one", ["ennreal"]], ["add", "theorem", "coe_sub", ["ennreal"]], ["add", "theorem", "coe_to_nnreal", ["ennreal"]], ["add", "theorem", "coe_zero", ["ennreal"]], ["add", "theorem", "div_def", ["ennreal"]], ["add", "theorem", "div_le_iff_le_mul", ["ennreal"]], ["mod", "theorem", "forall_ennreal", ["ennreal"]], ["add", "theorem", "infi_add", ["ennreal"]], ["add", "theorem", "infi_add_infi", ["ennreal"]], ["add", "theorem", "infi_sum", ["ennreal"]], ["del", "theorem", "infty_add", ["ennreal"]], ["del", "theorem", "infty_le_iff", ["ennreal"]], ["del", "theorem", "infty_mem_upper_bounds", ["ennreal"]], ["del", "theorem", "infty_mul", ["ennreal"]], ["del", "theorem", "infty_mul_of_real", ["ennreal"]], ["del", "theorem", "infty_ne_of_real", ["ennreal"]], ["del", "theorem", "infty_ne_zero", ["ennreal"]], ["del", "theorem", "infty_sub_of_real", ["ennreal"]], ["add", "theorem", "inv_coe", ["ennreal"]], ["add", "theorem", "inv_eq_top", ["ennreal"]], ["add", "theorem", "inv_eq_zero", ["ennreal"]], ["del", "theorem", "inv_infty", ["ennreal"]], ["mod", "theorem", "inv_inv", ["ennreal"]], ["add", "theorem", "inv_le_iff_le_mul", ["ennreal"]], ["add", "theorem", "inv_ne_top", ["ennreal"]], ["add", "theorem", "inv_ne_zero", ["ennreal"]], ["del", "theorem", "inv_of_real", ["ennreal"]], ["add", "theorem", "inv_top", ["ennreal"]], ["del", "theorem", "is_lub_of_real", ["ennreal"]], ["del", "theorem", "le_add_left", ["ennreal"]], ["del", "theorem", "le_add_right", ["ennreal"]], ["add", "theorem", "le_coe_iff", ["ennreal"]], ["del", "theorem", "le_def", ["ennreal"]], ["add", "theorem", "le_div_iff_mul_le", ["ennreal"]], ["del", "theorem", "le_infty", ["ennreal"]], ["add", "theorem", "le_inv_iff_mul_le", ["ennreal"]], ["mod", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["del", "theorem", "le_of_real_iff", ["ennreal"]], ["del", "theorem", "le_zero_iff_eq", ["ennreal"]], ["mod", "theorem", "lt_add_right", ["ennreal"]], ["add", "theorem", "lt_iff_exists_coe", ["ennreal"]], ["del", "theorem", "lt_iff_exists_of_real", ["ennreal"]], ["add", "theorem", "mul_eq_mul_left", ["ennreal"]], ["del", "theorem", "mul_infty", ["ennreal"]], ["del", "theorem", "mul_le_mul", ["ennreal"]], ["add", "theorem", "mul_le_mul_left", ["ennreal"]], ["add", "theorem", "mul_top", ["ennreal"]], ["add", "theorem", "none_eq_top", ["ennreal"]], ["del", "theorem", "not_infty_lt", ["ennreal"]], ["mod", "theorem", "not_lt_zero", ["ennreal"]], ["add", "theorem", "not_top_le_coe", ["ennreal"]], ["del", "def", "of_ennreal", ["ennreal"]], ["del", "theorem", "of_ennreal_of_real", ["ennreal"]], ["del", "theorem", "of_nonneg_real_eq_of_real", ["ennreal"]], ["del", "def", "of_real", ["ennreal"]], ["del", "theorem", "of_real_add", ["ennreal"]], ["del", "theorem", "of_real_add_le", ["ennreal"]], ["del", "theorem", "of_real_eq_of_real_of", ["ennreal"]], ["del", "theorem", "of_real_eq_one_iff", ["ennreal"]], ["del", "theorem", "of_real_eq_zero_iff", ["ennreal"]], ["del", "theorem", "of_real_le_of_real", ["ennreal"]], ["del", "theorem", "of_real_le_of_real_iff", ["ennreal"]], ["del", "theorem", "of_real_lt_infty", ["ennreal"]], ["del", "theorem", "of_real_lt_of_real_iff", ["ennreal"]], ["del", "theorem", "of_real_lt_of_real_iff_cases", ["ennreal"]], ["del", "theorem", "of_real_mem_upper_bounds", ["ennreal"]], ["del", "theorem", "of_real_mul_infty", ["ennreal"]], ["del", "theorem", "of_real_mul_of_real", ["ennreal"]], ["del", "theorem", "of_real_ne_infty", ["ennreal"]], ["del", "theorem", "of_real_ne_of_real_of", ["ennreal"]], ["del", "theorem", "of_real_of_ennreal", ["ennreal"]], ["del", "theorem", "of_real_of_nonpos", ["ennreal"]], ["del", "theorem", "of_real_of_not_nonneg", ["ennreal"]], ["del", "theorem", "of_real_one", ["ennreal"]], ["del", "theorem", "of_real_sub_of_real", ["ennreal"]], ["del", "theorem", "of_real_zero", ["ennreal"]], ["add", "theorem", "one_eq_coe", ["ennreal"]], ["del", "theorem", "one_eq_of_real_iff", ["ennreal"]], ["add", "theorem", "one_le_coe_iff", ["ennreal"]], ["del", "theorem", "one_le_of_real_iff", ["ennreal"]], ["add", "theorem", "one_lt_zero_iff", ["ennreal"]], ["add", "theorem", "one_ne_top", ["ennreal"]], ["add", "theorem", "some_eq_coe", ["ennreal"]], ["mod", "theorem", "sub_add_cancel_of_le", ["ennreal"]], ["add", "theorem", "sub_infi", ["ennreal"]], ["del", "theorem", "sum_of_real", ["ennreal"]], ["add", "theorem", "supr_sub", ["ennreal"]], ["add", "theorem", "to_nnreal_coe", ["ennreal"]], ["add", "theorem", "top_add", ["ennreal"]], ["add", "theorem", "top_mem_upper_bounds", ["ennreal"]], ["add", "theorem", "top_mul", ["ennreal"]], ["add", "theorem", "top_mul_top", ["ennreal"]], ["add", "theorem", "top_ne_coe", ["ennreal"]], ["add", "theorem", "top_ne_one", ["ennreal"]], ["add", "theorem", "top_ne_zero", ["ennreal"]], ["add", "theorem", "top_sub_coe", ["ennreal"]], ["add", "theorem", "top_to_nnreal", ["ennreal"]], ["add", "theorem", "zero_eq_coe", ["ennreal"]], ["del", "theorem", "zero_eq_of_real_iff", ["ennreal"]], ["del", "theorem", "zero_le_of_ennreal", ["ennreal"]], ["add", "theorem", "zero_lt_coe_iff", ["ennreal"]], ["del", "theorem", "zero_lt_of_real_iff", ["ennreal"]], ["del", "theorem", "zero_ne_infty", ["ennreal"]], ["add", "theorem", "zero_ne_top", ["ennreal"]]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": [["add", "theorem", "inv_eq_zero", []], ["add", "theorem", "add_sub_cancel'", ["nnreal"]], ["add", "theorem", "add_sub_cancel", ["nnreal"]], ["add", "theorem", "bdd_above_coe", ["nnreal"]], ["add", "theorem", "bdd_below_coe", ["nnreal"]], ["add", "theorem", "coe_Inf", ["nnreal"]], ["add", "theorem", "coe_Sup", ["nnreal"]], ["add", "theorem", "coe_of_real", ["nnreal"]], ["add", "theorem", "div_def", ["nnreal"]], ["add", "theorem", "inv_eq_zero", ["nnreal"]], ["add", "theorem", "inv_inv", ["nnreal"]], ["add", "theorem", "inv_le", ["nnreal"]], ["add", "theorem", "inv_le_of_le_mul", ["nnreal"]], ["add", "theorem", "inv_mul_cancel", ["nnreal"]], ["add", "theorem", "inv_pos", ["nnreal"]], ["add", "theorem", "inv_zero", ["nnreal"]], ["add", "theorem", "le_inv_iff_mul_le", ["nnreal"]], ["add", "theorem", "le_of_forall_epsilon_le", ["nnreal"]], ["add", "theorem", "lt_iff_exists_rat_btwn", ["nnreal"]], ["add", "theorem", "mul_eq_mul_left", ["nnreal"]], ["add", "theorem", "mul_inv_cancel", ["nnreal"]], ["add", "theorem", "of_real_add_le", ["nnreal"]], ["add", "theorem", "of_real_add_of_real", ["nnreal"]], ["add", "theorem", "of_real_coe", ["nnreal"]], ["add", "theorem", "of_real_le_of_real", ["nnreal"]], ["add", "theorem", "of_real_le_of_real_iff", ["nnreal"]], ["add", "theorem", "of_real_of_nonpos", ["nnreal"]], ["add", "theorem", "of_real_zero", ["nnreal"]], ["add", "theorem", "prod_coe", ["nnreal"]], ["add", "theorem", "smul_coe", ["nnreal"]], ["add", "theorem", "sub_add_cancel_of_le", ["nnreal"]], ["add", "theorem", "sub_eq_zero", ["nnreal"]], ["add", "theorem", "sub_le_iff_le_add", ["nnreal"]], ["mod", "theorem", "sum_coe", ["nnreal"]], ["add", "theorem", "zero_le_coe", ["nnreal"]], ["add", "theorem", "zero_lt_of_real", ["nnreal"]], ["add", "theorem", "image_eq_empty", ["set"]]]}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_lt_coe", ["with_bot"]], ["add", "theorem", "bot_lt_some", ["with_bot"]], ["add", "theorem", "coe_eq_coe", ["with_bot"]], ["add", "theorem", "coe_lt_coe", ["with_bot"]], ["add", "theorem", "none_eq_bot", ["with_bot"]], ["add", "theorem", "some_eq_coe", ["with_bot"]], ["add", "theorem", "coe_eq_coe", ["with_top"]], ["add", "theorem", "coe_le_iff", ["with_top"]], ["add", "theorem", "coe_lt_coe", ["with_top"]], ["add", "theorem", "coe_lt_top", ["with_top"]], ["add", "theorem", "coe_ne_top", ["with_top"]], ["add", "theorem", "le_coe_iff", ["with_top"]], ["add", "theorem", "lt_iff_exists_coe", ["with_top"]], ["add", "theorem", "none_eq_top", ["with_top"]], ["add", "theorem", "not_top_le_coe", ["with_top"]], ["add", "theorem", "some_eq_coe", ["with_top"]], ["add", "theorem", "top_ne_coe", ["with_top"]]]}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": [["del", "theorem", "bdd_above_bot", []], ["add", "theorem", "bdd_below_bot", []], ["add", "theorem", "cSup_empty", ["lattice"]], ["add", "theorem", "coe_Inf", ["with_top"]], ["add", "theorem", "coe_Sup", ["with_top"]], ["add", "theorem", "has_glb", ["with_top"]], ["add", "theorem", "has_lub", ["with_top"]], ["add", "theorem", "is_glb_Inf", ["with_top"]], ["add", "theorem", "is_lub_Sup", ["with_top"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "tendsto_map'_iff", ["filter"]]]}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}]}, {"timestamp": 1534886523, "sha": "82512ee8", "message": "refactor(analysis/ennreal): use canonically_ordered_comm_semiring (with_top α)", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "add_top", ["with_top"]], ["add", "theorem", "coe_add", ["with_top"]], ["add", "theorem", "coe_ne_top", ["with_top"]], ["add", "theorem", "top_add", ["with_top"]], ["add", "theorem", "top_ne_coe", ["with_top"]]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_le_mul", ["canonically_ordered_semiring"]], ["add", "theorem", "bind_comm", ["option"]], ["add", "theorem", "coe_eq_zero", ["with_top"]], ["add", "theorem", "coe_mul_coe", ["with_top"]], ["add", "theorem", "coe_zero", ["with_top"]], ["add", "theorem", "mul_coe", ["with_top"]], ["add", "theorem", "mul_def", ["with_top"]], ["add", "theorem", "mul_top", ["with_top"]], ["add", "theorem", "none_eq_top", ["with_top"]], ["add", "theorem", "some_eq_coe", ["with_top"]], ["add", "theorem", "top_mul", ["with_top"]], ["add", "theorem", "top_ne_zero", ["with_top"]], ["add", "theorem", "zero_eq_coe", ["with_top"]], ["add", "theorem", "zero_ne_top", ["with_top"]]]}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": [["mod", "theorem", "infty_ne_of_real", ["ennreal"]], ["mod", "theorem", "infty_ne_zero", ["ennreal"]], ["mod", "theorem", "of_real_ne_infty", ["ennreal"]], ["mod", "theorem", "zero_ne_infty", ["ennreal"]], ["add", "def", "ennreal", []], ["del", "inductive", "ennreal", []]]}, {"oldPath": "data/real/nnreal.lean", "newPath": "data/real/nnreal.lean", "changes": []}]}, {"timestamp": 1534886523, "sha": "6f316375", "message": "refactor(analysis/nnreal): split up into data.real and analysis part", "changes": [{"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": [["del", "theorem", "sum_coe", ["nnreal"]], ["del", "def", "nnreal", []]]}, {"oldPath": null, "newPath": "data/real/nnreal.lean", "changes": [["add", "theorem", "sum_coe", ["nnreal"]], ["add", "def", "nnreal", []]]}]}, {"timestamp": 1534886523, "sha": "ca1b2d1d", "message": "refactor(analysis/measure_theory/measurable_space): derive complete lattice structure from Galois insertion", "changes": [{"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "generate_from_le_iff", ["measurable_space"]], ["add", "def", "gi_generate_from", ["measurable_space"]], ["add", "theorem", "is_measurable_bot_iff", ["measurable_space"]], ["add", "theorem", "is_measurable_top", ["measurable_space"]], ["add", "theorem", "mk_of_closure_sets", ["measurable_space"]]]}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}]}, {"timestamp": 1534596912, "sha": "29ad1c8f", "message": "feat(order/complete_lattice): add rewrite rules for Inf/Sup/infi/supr for pi and Prop", "changes": [{"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_Prop_eq", ["lattice"]], ["add", "theorem", "Inf_apply", ["lattice"]], ["add", "theorem", "Sup_Prop_eq", ["lattice"]], ["add", "theorem", "Sup_apply", ["lattice"]], ["add", "theorem", "infi_Prop_eq", ["lattice"]], ["add", "theorem", "infi_apply", ["lattice"]], ["add", "theorem", "supr_Prop_eq", ["lattice"]], ["add", "theorem", "supr_apply", ["lattice"]]]}]}, {"timestamp": 1534596912, "sha": "202ac15b", "message": "refactor(analysis/topology/topological_space): simplify proof of nhds_supr using Galois connection", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "gc_nhds", []], ["add", "theorem", "nhds_Sup", []], ["add", "theorem", "nhds_bot", []], ["mod", "theorem", "nhds_mono", []], ["mod", "theorem", "nhds_supr", []], ["add", "theorem", "pure_le_nhds", []], ["del", "theorem", "return_le_nhds", []], ["del", "theorem", "sup_eq_generate_from", []], ["del", "theorem", "supr_eq_generate_from", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1534596912, "sha": "6cab92ee", "message": "refactor(analysis/topology/topological_space): derive complete lattice structure from Galois insertion", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["del", "theorem", "coinduced_compose", []], ["del", "theorem", "coinduced_id", []], ["del", "theorem", "induced_compose", []], ["del", "theorem", "induced_id", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "coinduced_compose", []], ["add", "theorem", "coinduced_id", []], ["add", "theorem", "generate_from_le_iff_subset_is_open", []], ["add", "def", "gi_generate_from", []], ["add", "theorem", "induced_compose", []], ["add", "theorem", "induced_id", []], ["add", "theorem", "is_open_fold", []], ["add", "theorem", "is_open_top", []], ["add", "theorem", "mk_of_closure_sets", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": [["add", "theorem", "l_u_eq", ["galois_insertion"]]]}]}, {"timestamp": 1534596912, "sha": "f9434fa1", "message": "refactor(order/filter): derive complete lattice structure from Galois insertion", "changes": [{"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "Sup_sets_eq", ["filter"]], ["add", "theorem", "bot_sets_eq", ["filter"]], ["add", "def", "generate", ["filter"]], ["add", "theorem", "generate_Union", ["filter"]], ["add", "theorem", "generate_empty", ["filter"]], ["add", "inductive", "generate_sets", ["filter"]], ["add", "theorem", "generate_union", ["filter"]], ["add", "theorem", "generate_univ", ["filter"]], ["add", "def", "gi_generate", ["filter"]], ["mod", "theorem", "mem_Sup_sets", ["filter"]], ["mod", "theorem", "mem_supr_sets", ["filter"]], ["add", "theorem", "mem_top_sets", ["filter"]], ["del", "theorem", "mem_top_sets_iff", ["filter"]], ["add", "theorem", "mem_top_sets_iff_forall", ["filter"]], ["add", "theorem", "mk_of_closure_sets", ["filter"]], ["mod", "theorem", "principal_empty", ["filter"]], ["mod", "theorem", "principal_univ", ["filter"]], ["add", "theorem", "sets_iff_generate", ["filter"]], ["add", "theorem", "sup_sets_eq", ["filter"]], ["add", "def", "copy", ["lattice", "complete_lattice"]]]}]}, {"timestamp": 1534596912, "sha": "a423cc75", "message": "refactor(order/filter): simplify filter structure", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["del", "theorem", "ext", ["filter", "filter"]], ["mod", "theorem", "inter_mem_sets", ["filter"]], ["add", "theorem", "mem_sets_of_superset", ["filter"]], ["mod", "structure", "filter", []]]}, {"oldPath": "order/liminf_limsup.lean", "newPath": "order/liminf_limsup.lean", "changes": []}]}, {"timestamp": 1534596912, "sha": "849ed4f9", "message": "feat(order/galois_connection): add Galois insertion and lattice lifts along a Galois insertion", "changes": [{"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": [["mod", "theorem", "comap_map_le", ["measurable_space"]], ["mod", "theorem", "le_map_comap", ["measurable_space"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "le_vmap_map", ["filter"]], ["mod", "theorem", "map_vmap_le", ["filter"]]]}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": [["del", "theorem", "decreasing_l_u", ["galois_connection"]], ["del", "theorem", "increasing_u_l", ["galois_connection"]], ["add", "theorem", "l_Sup", ["galois_connection"]], ["add", "theorem", "l_u_le", ["galois_connection"]], ["add", "theorem", "le_u_l", ["galois_connection"]], ["add", "def", "lift_order_bot", ["galois_connection"]], ["add", "theorem", "u_Inf", ["galois_connection"]], ["add", "def", "lift_bounded_lattice", ["galois_insertion"]], ["add", "def", "lift_complete_lattice", ["galois_insertion"]], ["add", "def", "lift_lattice", ["galois_insertion"]], ["add", "def", "lift_order_top", ["galois_insertion"]], ["add", "def", "lift_semilattice_inf", ["galois_insertion"]], ["add", "def", "lift_semilattice_sup", ["galois_insertion"]], ["add", "structure", "galois_insertion", []]]}]}, {"timestamp": 1534554147, "sha": "0ff11df2", "message": "refactor(group_theory/order_of_element): use gpowers instead of range (#265)", "changes": [{"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": [["mod", "theorem", "exists_pow_eq_one", []], ["add", "theorem", "mem_gpowers_iff_mem_range_order_of", []], ["del", "theorem", "mem_range_gpow_iff_mem_range_order_of", []], ["add", "theorem", "order_eq_card_gpowers", []], ["del", "theorem", "order_eq_card_range_gpow", []], ["del", "theorem", "order_of_ne_zero", []], ["add", "theorem", "order_of_pos", []]]}]}, {"timestamp": 1534554059, "sha": "29508f27", "message": "doc(tactic/solve_by_elim): update doc (#266) [ci-skip]", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1534554024, "sha": "157004cd", "message": "feat(data/list/basic): some more theorems about sublist (#264)", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "erase_diff_erase_sublist_of_sublist", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "erase_subperm", ["list"]], ["add", "theorem", "erase_subperm_erase", ["list"]]]}]}, {"timestamp": 1534553872, "sha": "dfc9f8ee", "message": "chore(build): prune deleted .lean files and their .olean files", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1534553717, "sha": "cfb27cbe", "message": "feat(category_theory): opposites, and the category of types (#249)", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": []}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": []}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": []}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": []}, {"oldPath": null, "newPath": "category_theory/opposites.lean", "changes": [["add", "theorem", "hom_obj", ["category_theory", "functor"]], ["add", "theorem", "hom_pairing_map", ["category_theory", "functor"]], ["add", "theorem", "opposite_map", ["category_theory", "functor"]], ["add", "theorem", "opposite_obj", ["category_theory", "functor"]], ["add", "def", "op", ["category_theory"]]]}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["mod", "theorem", "prod_map", ["category_theory", "functor"]], ["mod", "theorem", "prod_obj", ["category_theory", "functor"]], ["mod", "theorem", "prod_app", ["category_theory", "nat_trans"]]]}, {"oldPath": null, "newPath": "category_theory/types.lean", "changes": [["add", "theorem", "hcomp", ["category_theory", "functor_to_types"]], ["add", "theorem", "map_comp", ["category_theory", "functor_to_types"]], ["add", "theorem", "map_id", ["category_theory", "functor_to_types"]], ["add", "theorem", "naturality", ["category_theory", "functor_to_types"]], ["add", "theorem", "vcomp", ["category_theory", "functor_to_types"]], ["add", "theorem", "types_comp", ["category_theory"]], ["add", "theorem", "types_hom", ["category_theory"]], ["add", "theorem", "types_id", ["category_theory"]]]}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": [["add", "theorem", "ext", ["ulift"]]]}]}, {"timestamp": 1534419159, "sha": "12d103c2", "message": "fix(padics/padic_norm): remove spurious import", "changes": [{"oldPath": "data/padics/padic_norm.lean", "newPath": "data/padics/padic_norm.lean", "changes": [["mod", "theorem", "add_eq_max_of_ne", ["padic_norm"]], ["mod", "theorem", "is_greatest", ["padic_val"]], ["mod", "theorem", "le_padic_val_of_pow_div", ["padic_val"]], ["mod", "theorem", "min_le_padic_val_add", ["padic_val"]], ["mod", "theorem", "spec", ["padic_val"]], ["mod", "theorem", "unique", ["padic_val"]], ["mod", "def", "padic_val", []]]}]}, {"timestamp": 1534419117, "sha": "1bca59b0", "message": "refactor(tactic/basic): simplify definition", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1534418584, "sha": "93817f17", "message": "feat(data/padics): p-adic numbers (#262)", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": [["add", "theorem", "ceil_nonneg", []], ["add", "theorem", "ceil_pos", []]]}, {"oldPath": null, "newPath": "algebra/field_power.lean", "changes": [["add", "def", "fpow", []], ["add", "theorem", "fpow_add", []], ["add", "theorem", "fpow_eq_gpow", []], ["add", "theorem", "fpow_inv", []], ["add", "theorem", "fpow_le_of_le", []], ["add", "theorem", "fpow_ne_zero_of_ne_zero", []], ["add", "theorem", "fpow_nonneg_of_nonneg", []], ["add", "theorem", "fpow_zero", []], ["add", "theorem", "pow_le_max_of_min_le", []], ["add", "theorem", "unit_pow", []], ["add", "theorem", "zero_fpow", []], ["add", "theorem", "zero_gpow", []]]}, {"oldPath": "algebra/order_functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["add", "theorem", "le_of_max_le_left", []], ["add", "theorem", "le_of_max_le_right", []], ["add", "theorem", "max_le_add_of_nonneg", []], ["add", "theorem", "min_add", []], ["add", "theorem", "min_le_add_of_nonneg_left", []], ["add", "theorem", "min_le_add_of_nonneg_right", []], ["add", "theorem", "min_sub", []]]}, {"oldPath": "algebra/ordered_field.lean", "newPath": "algebra/ordered_field.lean", "changes": [["add", "theorem", "inv_le_one", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_le_one", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "dvd_nat_abs_of_of_nat_dvd", ["int"]], ["add", "theorem", "eq_mul_div_of_mul_eq_mul_of_dvd_left", ["int"]], ["add", "theorem", "nat_abs_ne_zero_of_ne_zero", ["int"]], ["add", "theorem", "of_nat_dvd_of_dvd_nat_abs", ["int"]], ["add", "theorem", "pow_div_of_le_of_pow_div_int", ["int"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "dvd_div_of_mul_dvd", ["nat"]], ["add", "theorem", "lt_pow_self", ["nat"]], ["add", "theorem", "mul_dvd_of_dvd_div", ["nat"]], ["add", "theorem", "div_mul_div", ["nat", "nat"]], ["add", "theorem", "find_greatest_is_greatest", ["nat", "nat"]], ["add", "theorem", "find_greatest_spec", ["nat", "nat"]], ["add", "theorem", "not_pos_pow_dvd", ["nat"]], ["add", "theorem", "one_pow", ["nat"]], ["add", "theorem", "pow_div_of_le_of_pow_div", ["nat"]], ["add", "theorem", "pow_eq_mul_pow_sub", ["nat"]], ["add", "theorem", "pow_lt_pow_succ", ["nat"]], ["add", "theorem", "pow_pos", ["nat"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "ne_zero", ["nat", "prime"]], ["add", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul", ["nat"]], ["add", "theorem", "succ_dvd_or_succ_dvd_of_succ_sum_dvd_mul_int", ["nat"]]]}, {"oldPath": null, "newPath": "data/padics/padic_integers.lean", "changes": [["add", "def", "add", ["padic_int"]], ["add", "def", "mul", ["padic_int"]], ["add", "def", "neg", ["padic_int"]], ["add", "def", "padic_int", []]]}, {"oldPath": null, "newPath": "data/padics/padic_norm.lean", "changes": [["add", "theorem", "add_eq_max_of_ne", ["padic_norm"]], ["add", "theorem", "triangle_ineq", ["padic_norm"]], ["add", "theorem", "zero_of_padic_norm_eq_zero", ["padic_norm"]], ["add", "def", "padic_norm", []], ["add", "theorem", "is_greatest", ["padic_val"]], ["add", "theorem", "le_padic_val_of_pow_div", ["padic_val"]], ["add", "theorem", "min_le_padic_val_add", ["padic_val"]], ["add", "theorem", "padic_val_self", ["padic_val"]], ["add", "theorem", "spec", ["padic_val"]], ["add", "theorem", "unique", ["padic_val"]], ["add", "def", "padic_val", []], ["add", "theorem", "min_le_padic_val_rat_add", ["padic_val_rat"]], ["add", "theorem", "padic_val_rat_self", ["padic_val_rat"]], ["add", "def", "padic_val_rat", []]]}, {"oldPath": null, "newPath": "data/padics/padic_rationals.lean", "changes": [["add", "theorem", "cast_eq_of_rat", ["padic"]], ["add", "theorem", "cast_eq_of_rat_of_int", ["padic"]], ["add", "theorem", "cast_eq_of_rat_of_nat", ["padic"]], ["add", "theorem", "complete", ["padic"]], ["add", "theorem", "const_equiv", ["padic"]], ["add", "theorem", "exi_rat_seq_conv", ["padic"]], ["add", "theorem", "exi_rat_seq_conv_cauchy", ["padic"]], ["add", "def", "lim_seq", ["padic"]], ["add", "def", "mk", ["padic"]], ["add", "theorem", "mk_eq", ["padic"]], ["add", "def", "of_rat", ["padic"]], ["add", "theorem", "of_rat_add", ["padic"]], ["add", "theorem", "of_rat_div", ["padic"]], ["add", "theorem", "of_rat_eq", ["padic"]], ["add", "theorem", "of_rat_mul", ["padic"]], ["add", "theorem", "of_rat_neg", ["padic"]], ["add", "theorem", "of_rat_one", ["padic"]], ["add", "theorem", "of_rat_sub", ["padic"]], ["add", "theorem", "of_rat_zero", ["padic"]], ["add", "theorem", "rat_dense", ["padic"]], ["add", "def", "padic", []], ["add", "theorem", "defn", ["padic_norm_e"]], ["add", "theorem", "eq_padic_norm", ["padic_norm_e"]], ["add", "theorem", "nonarchimedean", ["padic_norm_e"]], ["add", "theorem", "sub_rev", ["padic_norm_e"]], ["add", "theorem", "zero_def", ["padic_norm_e"]], ["add", "theorem", "zero_iff", ["padic_norm_e"]], ["add", "def", "padic_norm_e", []], ["add", "theorem", "eq_zero_iff_equiv_zero", ["padic_seq"]], ["add", "theorem", "equiv_zero_of_val_eq_of_equiv_zero", ["padic_seq"]], ["add", "theorem", "ne_zero_iff_nequiv_zero", ["padic_seq"]], ["add", "def", "norm", ["padic_seq"]], ["add", "theorem", "norm_const", ["padic_seq"]], ["add", "theorem", "norm_eq", ["padic_seq"]], ["add", "theorem", "norm_eq_norm_app_of_nonzero", ["padic_seq"]], ["add", "theorem", "norm_equiv", ["padic_seq"]], ["add", "theorem", "norm_image", ["padic_seq"]], ["add", "theorem", "norm_mul", ["padic_seq"]], ["add", "theorem", "norm_neg", ["padic_seq"]], ["add", "theorem", "norm_nonarchimedean", ["padic_seq"]], ["add", "theorem", "norm_nonneg", ["padic_seq"]], ["add", "theorem", "norm_nonzero_of_not_equiv_zero", ["padic_seq"]], ["add", "theorem", "norm_one", ["padic_seq"]], ["add", "theorem", "norm_zero_iff", ["padic_seq"]], ["add", "theorem", "not_equiv_zero_const_of_nonzero", ["padic_seq"]], ["add", "theorem", "not_lim_zero_const_of_nonzero", ["padic_seq"]], ["add", "theorem", "stationary", ["padic_seq"]], ["add", "def", "stationary_point", ["padic_seq"]], ["add", "theorem", "stationary_point_spec", ["padic_seq"]], ["add", "def", "padic_seq", []]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "denom_ne_zero", ["rat"]], ["add", "theorem", "denom_neg_eq_denom", ["rat"]], ["add", "theorem", "mk_denom_ne_zero_of_ne_zero", ["rat"]], ["add", "theorem", "mk_ne_zero_of_ne_zero", ["rat"]], ["add", "theorem", "mk_num_ne_zero_of_ne_zero", ["rat"]], ["add", "theorem", "mul_num_denom", ["rat"]], ["add", "theorem", "num_denom_mk", ["rat"]], ["mod", "theorem", "num_dvd", ["rat"]], ["add", "theorem", "num_ne_zero_of_ne_zero", ["rat"]], ["add", "theorem", "num_neg_eq_neg_num", ["rat"]], ["add", "theorem", "num_zero", ["rat"]], ["add", "theorem", "zero_of_num_zero", ["rat"]]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["del", "theorem", "inv_mk", ["real"]], ["del", "theorem", "inv_zero", ["real"]], ["del", "def", "mk", ["real"]], ["del", "theorem", "mk_add", ["real"]], ["del", "theorem", "mk_eq", ["real"]], ["del", "theorem", "mk_eq_mk", ["real"]], ["del", "theorem", "mk_eq_zero", ["real"]], ["del", "theorem", "mk_mul", ["real"]], ["del", "theorem", "mk_neg", ["real"]], ["mod", "def", "of_rat", ["real"]], ["del", "theorem", "of_rat_add", ["real"]], ["del", "theorem", "of_rat_mul", ["real"]], ["del", "theorem", "of_rat_neg", ["real"]], ["del", "theorem", "of_rat_one", ["real"]], ["del", "theorem", "of_rat_zero", ["real"]], ["mod", "def", "real", []]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": [["add", "theorem", "mul_equiv_zero'", ["cau_seq"]], ["add", "theorem", "mul_equiv_zero", ["cau_seq"]], ["add", "theorem", "mul_not_equiv_zero", ["cau_seq"]], ["add", "theorem", "not_lim_zero_of_not_congr_zero", ["cau_seq"]], ["add", "theorem", "one_not_equiv_zero", ["cau_seq"]]]}, {"oldPath": null, "newPath": "data/real/cau_seq_completion.lean", "changes": [["add", "def", "Cauchy", ["cau_seq", "completion"]], ["add", "theorem", "cau_seq_zero_ne_one", ["cau_seq", "completion"]], ["add", "theorem", "inv_mk", ["cau_seq", "completion"]], ["add", "theorem", "inv_zero", ["cau_seq", "completion"]], ["add", "def", "mk", ["cau_seq", "completion"]], ["add", "theorem", "mk_add", ["cau_seq", "completion"]], ["add", "theorem", "mk_eq", ["cau_seq", "completion"]], ["add", "theorem", "mk_eq_mk", ["cau_seq", "completion"]], ["add", "theorem", "mk_eq_zero", ["cau_seq", "completion"]], ["add", "theorem", "mk_mul", ["cau_seq", "completion"]], ["add", "theorem", "mk_neg", ["cau_seq", "completion"]], ["add", "def", "of_rat", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_add", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_div", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_inv", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_mul", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_neg", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_one", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_sub", ["cau_seq", "completion"]], ["add", "theorem", "of_rat_zero", ["cau_seq", "completion"]], ["add", "theorem", "zero_ne_one", ["cau_seq", "completion"]]]}]}, {"timestamp": 1534403373, "sha": "47a377d2", "message": "refactor(group_theory/quotient_group): remove duplicate definition (#259)", "changes": [{"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["del", "theorem", "coe_gpow", ["left_cosets"]], ["del", "theorem", "coe_inv", ["left_cosets"]], ["del", "theorem", "coe_mul", ["left_cosets"]], ["del", "theorem", "coe_one", ["left_cosets"]], ["del", "theorem", "coe_pow", ["left_cosets"]], ["del", "theorem", "eq_class_eq_left_coset", ["left_cosets"]], ["del", "def", "mk", ["left_cosets"]], ["del", "def", "left_cosets", []], ["del", "def", "left_rel", []], ["add", "theorem", "eq_class_eq_left_coset", ["quotient_group"]], ["add", "def", "left_rel", ["quotient_group"]], ["add", "def", "mk", ["quotient_group"]], ["add", "def", "quotient", ["quotient_group"]]]}, {"oldPath": "group_theory/group_action.lean", "newPath": "group_theory/group_action.lean", "changes": [["mod", "theorem", "orbit_eq_iff", ["is_group_action"]]]}, {"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": []}, {"oldPath": "group_theory/quotient_group.lean", "newPath": "group_theory/quotient_group.lean", "changes": [["del", "theorem", "injective_ker_lift", ["group", "quotient"]], ["del", "def", "lift", ["group", "quotient"]], ["del", "theorem", "lift_mk'", ["group", "quotient"]], ["del", "theorem", "lift_mk", ["group", "quotient"]], ["del", "def", "mk", ["group", "quotient"]], ["add", "theorem", "coe_gpow", ["quotient_group"]], ["add", "theorem", "coe_inv", ["quotient_group"]], ["add", "theorem", "coe_mul", ["quotient_group"]], ["add", "theorem", "coe_one", ["quotient_group"]], ["add", "theorem", "coe_pow", ["quotient_group"]], ["add", "theorem", "injective_ker_lift", ["quotient_group"]], ["add", "def", "lift", ["quotient_group"]], ["add", "theorem", "lift_mk'", ["quotient_group"]], ["add", "theorem", "lift_mk", ["quotient_group"]]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "normal_subgroup_of_comm_group", []]]}]}, {"timestamp": 1534402695, "sha": "032e21de", "message": "feat(topological_structures): frontier_lt_subset_eq\nBased on a suggestion by Luca Gerolla", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "frontier_compl", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "frontier_lt_subset_eq", []]]}]}, {"timestamp": 1534366448, "sha": "d468921e", "message": "fix(tactic/basic): fix build", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1534366028, "sha": "bde21328", "message": "feat(category/traversable): derive traversable instances\nAuthors: Simon Hudon, Mario Carneiro", "changes": [{"oldPath": "category/applicative.lean", "newPath": "category/applicative.lean", "changes": [["add", "theorem", "ext", ["applicative"]], ["mod", "theorem", "map_seq_map", ["applicative"]], ["mod", "theorem", "pure_seq_eq_map'", ["applicative"]], ["add", "theorem", "applicative_comp_id", ["comp"]], ["add", "theorem", "applicative_id_comp", ["comp"]], ["mod", "theorem", "map_pure", ["comp"]], ["mod", "theorem", "pure_seq_eq_map", ["comp"]], ["mod", "theorem", "seq_assoc", ["comp"]], ["mod", "theorem", "seq_pure", ["comp"]]]}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "def", "mpartition", ["list"]], ["mod", "theorem", "map_seq", []], ["mod", "def", "mtry", []], ["mod", "def", "mzip_with'", []], ["mod", "theorem", "pure_id'_seq", []], ["mod", "theorem", "seq_map_assoc", []], ["mod", "def", "succeeds", []]]}, {"oldPath": "category/functor.lean", "newPath": "category/functor.lean", "changes": [["add", "theorem", "functor_comp_id", ["functor", "comp"]], ["add", "theorem", "functor_id_comp", ["functor", "comp"]], ["mod", "theorem", "map_mk", ["functor", "comp"]], ["add", "def", "mk", ["functor", "comp"]], ["add", "def", "run", ["functor", "comp"]], ["add", "def", "comp", ["functor"]], ["del", "structure", "comp", ["functor"]], ["add", "theorem", "ext", ["functor"]]]}, {"oldPath": "category/traversable/basic.lean", "newPath": "category/traversable/basic.lean", "changes": [["mod", "theorem", "preserves_map", ["applicative_transformation"]], ["mod", "theorem", "preserves_pure", ["applicative_transformation"]], ["mod", "def", "sequence", []]]}, {"oldPath": null, "newPath": "category/traversable/derive.lean", "changes": []}, {"oldPath": "category/traversable/equiv.lean", "newPath": "category/traversable/equiv.lean", "changes": []}, {"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": [["del", "theorem", "comp_traverse", ["id"]], ["del", "theorem", "id_traverse", ["id"]], ["del", "theorem", "map_traverse", ["id"]], ["del", "theorem", "naturality", ["id"]], ["del", "theorem", "traverse_map", ["id"]], ["mod", "theorem", "comp_traverse", ["list"]], ["mod", "theorem", "id_traverse", ["list"]], ["del", "theorem", "map_traverse", ["list"]], ["mod", "theorem", "naturality", ["list"]], ["add", "theorem", "traverse_eq_map_id", ["list"]], ["del", "theorem", "traverse_map", ["list"]], ["mod", "theorem", "comp_traverse", ["option"]], ["mod", "theorem", "id_traverse", ["option"]], ["del", "theorem", "map_traverse", ["option"]], ["mod", "theorem", "naturality", ["option"]], ["add", "theorem", "traverse_eq_map_id", ["option"]], ["del", "theorem", "traverse_map", ["option"]]]}, {"oldPath": "category/traversable/lemmas.lean", "newPath": "category/traversable/lemmas.lean", "changes": [["mod", "theorem", "comp_sequence", ["traversable"]], ["add", "theorem", "map_eq_traverse_id", ["traversable"]], ["add", "theorem", "map_traverse", ["traversable"]], ["mod", "theorem", "naturality'", ["traversable"]], ["add", "theorem", "naturality_pf", ["traversable"]], ["mod", "def", "pure_transformation", ["traversable"]], ["add", "theorem", "pure_transformation_apply", ["traversable"]], ["add", "theorem", "pure_traverse", ["traversable"]], ["del", "theorem", "purity", ["traversable"]], ["add", "theorem", "traverse_comp", ["traversable"]], ["add", "theorem", "traverse_eq_map_id'", ["traversable"]], ["del", "theorem", "traverse_eq_map_ident", ["traversable"]], ["add", "theorem", "traverse_id", ["traversable"]], ["add", "theorem", "traverse_map'", ["traversable"]], ["add", "theorem", "traverse_map", ["traversable"]]]}, {"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": [["add", "def", "to_array", ["vector"]]]}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/wlog.lean", "newPath": "tactic/wlog.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": [["add", "inductive", "either", []], ["add", "structure", "my_struct2", []], ["add", "structure", "my_struct", []], ["add", "inductive", "rec_data3", []]]}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1534364973, "sha": "d288f07d", "message": "feat(docs/*): Docs theories (#251)\nAuthors: Patrick Massot, Kevin Buzzard, Chris Hughes, Scott Morrison", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "docs/extras.md", "newPath": "docs/extras.md", "changes": []}, {"oldPath": null, "newPath": "docs/mathlib-overview.md", "changes": []}, {"oldPath": "docs/theories.md", "newPath": "docs/theories.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/linear_algebra.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/measure.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/number_theory.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/polynomials.md", "changes": []}, {"oldPath": "docs/theories/quotients.md", "newPath": null, "changes": []}, {"oldPath": "docs/theories/relations.md", "newPath": "docs/theories/relations.md", "changes": []}, {"oldPath": "docs/wip.md", "newPath": "docs/wip.md", "changes": []}]}, {"timestamp": 1534364734, "sha": "5d791c6b", "message": "feat(data/polynomial): nth_roots (#260)", "changes": [{"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "C_add", ["polynomial"]], ["add", "theorem", "C_mul", ["polynomial"]], ["del", "theorem", "C_mul_C", ["polynomial"]], ["add", "theorem", "X_pow_sub_C_ne_zero", ["polynomial"]], ["add", "theorem", "card_nth_roots", ["polynomial"]], ["add", "theorem", "card_roots_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "degree_X_pow", ["polynomial"]], ["add", "theorem", "degree_X_pow_sub_C", ["polynomial"]], ["add", "theorem", "eval_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_X_pow", ["polynomial"]], ["add", "theorem", "mem_nth_roots", ["polynomial"]]]}]}, {"timestamp": 1534364567, "sha": "6e21c48e", "message": "feat(data/multiset): count_filter", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "count_filter", ["list"]], ["add", "theorem", "countp_filter", ["list"]], ["mod", "theorem", "filter_filter", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "count_filter", ["multiset"]], ["add", "theorem", "countp_filter", ["multiset"]]]}]}, {"timestamp": 1534358632, "sha": "46229d2a", "message": "feat(data/multiset): filter_congr, filter_filter", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "filter_congr", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "filter_filter", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "filter_add_filter", ["multiset"]], ["add", "theorem", "filter_add_not", ["multiset"]], ["add", "theorem", "filter_congr", ["multiset"]], ["add", "theorem", "filter_filter", ["multiset"]]]}]}, {"timestamp": 1534357040, "sha": "4c843f20", "message": "refactor(category/basic): move {list,option}.traverse to category.basic", "changes": [{"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": []}, {"oldPath": "category/traversable/instances.lean", "newPath": "category/traversable/instances.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1534356977, "sha": "1aae37cb", "message": "refactor(tactic/basic): move meta.expr to tactic.basic, cleanup", "changes": [{"oldPath": "meta/expr.lean", "newPath": null, "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/rewrite.lean", "newPath": "tactic/rewrite.lean", "changes": []}]}, {"timestamp": 1534356841, "sha": "0738d4e0", "message": "feat(tactic/basic): environment.is_structure", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1534348047, "sha": "4a7103dd", "message": "refactor(topology/uniform_space): proof simplification / extension", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["del", "theorem", "lebesgue_number_lemma", []], ["add", "theorem", "lebesgue_number_lemma_of_metric", []], ["add", "theorem", "lebesgue_number_lemma_of_metric_sUnion", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["del", "theorem", "assoc_comp_rel", []], ["add", "theorem", "comp_rel_assoc", []], ["del", "theorem", "lebesgue_entourage_lemma", []], ["add", "theorem", "lebesgue_number_lemma", []], ["add", "theorem", "lebesgue_number_lemma_sUnion", []]]}]}, {"timestamp": 1534328197, "sha": "b4dc0a55", "message": "feat(analysis/metric_space): Lebesgue number lemma for uniform spaces and metric spaces (#237)", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "lebesgue_number_lemma", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "assoc_comp_rel", []], ["add", "theorem", "lebesgue_entourage_lemma", []]]}]}, {"timestamp": 1534252453, "sha": "7c1d3b4d", "message": "refactor(data/equiv/basic): simplify definition of `equiv.of_bijective`", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["mod", "theorem", "of_bijective_to_fun", ["equiv"]]]}]}, {"timestamp": 1534263097, "sha": "add16e97", "message": "feat(order): add order_dual (similar to with_top/with_bot) and dual order instances", "changes": [{"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["del", "theorem", "le_dual_eq_le", []], ["add", "def", "order_dual", []], ["del", "def", "dual", ["partial_order"]], ["del", "def", "dual", ["preorder"]]]}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_eq_top", ["lattice"]], ["add", "theorem", "Sup_eq_bot", ["lattice"]], ["mod", "theorem", "infi_const", ["lattice"]], ["add", "theorem", "infi_eq_bot", ["lattice"]], ["add", "theorem", "infi_eq_top", ["lattice"]], ["mod", "theorem", "infi_top", ["lattice"]], ["add", "def", "ord_continuous", ["lattice"]], ["add", "theorem", "ord_continuous_mono", ["lattice"]], ["add", "theorem", "ord_continuous_sup", ["lattice"]], ["mod", "theorem", "supr_bot", ["lattice"]], ["mod", "theorem", "supr_const", ["lattice"]], ["del", "def", "ord_continuous", []], ["del", "theorem", "ord_continuous_mono", []], ["del", "theorem", "ord_continuous_sup", []]]}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}]}, {"timestamp": 1534223680, "sha": "f81c764e", "message": "doc(data/rat): todo [ci-skip]", "changes": [{"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}]}, {"timestamp": 1534223225, "sha": "6359010c", "message": "feat(data/list/perm): subperm_cons_diff and subset_cons_diff (#256)", "changes": [{"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "subperm_cons_diff", ["list"]], ["add", "theorem", "subset_cons_diff", ["list"]]]}]}, {"timestamp": 1534222795, "sha": "e53c2bbb", "message": "perf(data/rat): add more extra typeclass instances", "changes": [{"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1534211056, "sha": "638b7fd4", "message": "feat(set_theory/cardinal): finite lower bound on cardinality", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_coe", ["fintype"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "exists_finset", ["set", "finite"]]]}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["add", "theorem", "card_le_of_finset", ["cardinal"]]]}]}, {"timestamp": 1534210949, "sha": "9699f8dc", "message": "feat(data/multiset): some more theorems about diagonal", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "diagonal_coe'", ["multiset"]], ["mod", "theorem", "diagonal_coe", ["multiset"]], ["add", "theorem", "diagonal_cons", ["multiset"]], ["add", "theorem", "diagonal_zero", ["multiset"]], ["add", "theorem", "revzip_powerset_aux'", ["multiset"]], ["mod", "theorem", "revzip_powerset_aux", ["multiset"]], ["del", "theorem", "revzip_powerset_aux_eq_map", ["multiset"]], ["add", "theorem", "revzip_powerset_aux_lemma", ["multiset"]], ["add", "theorem", "revzip_powerset_aux_perm_aux'", ["multiset"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": []}]}, {"timestamp": 1534210909, "sha": "d016186f", "message": "fix(tactic/norm_num): make norm_num only apply to current goal", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1534146788, "sha": "8692959b", "message": "feat(data/list/basic): diff_sublist_of_sublist", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "diff_sublist_of_sublist", ["list"]]]}]}, {"timestamp": 1534159534, "sha": "4bc22871", "message": "fix(.): fix up ext usages (c.f. 7cfc299fcdcae715dc0ac33cba0cd1aefa9777cd)", "changes": [{"oldPath": "data/buffer/basic.lean", "newPath": "data/buffer/basic.lean", "changes": []}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1534132200, "sha": "89d71ad0", "message": "fix(tactic/basic): make `try_intros` not fail given too few names", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1534129501, "sha": "9ea93241", "message": "fix(category/basic): change \"try\" to \"mtry\"", "changes": [{"oldPath": "category/applicative.lean", "newPath": "category/applicative.lean", "changes": []}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "def", "mtry", []], ["del", "def", "try", []]]}, {"oldPath": "tactic/converter/old_conv.lean", "newPath": "tactic/converter/old_conv.lean", "changes": []}]}, {"timestamp": 1534128811, "sha": "77146324", "message": "fix(category/basic): fix build", "changes": [{"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["mod", "def", "try", []]]}]}, {"timestamp": 1534128405, "sha": "7cfc299f", "message": "refactor(tactic/interactive): minor cleanup, change `ext` notation", "changes": [{"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "def", "succeeds", []], ["add", "def", "try", []]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/converter/old_conv.lean", "newPath": "tactic/converter/old_conv.lean", "changes": []}, {"oldPath": "tactic/ext.lean", "newPath": "tactic/ext.lean", "changes": []}, {"oldPath": "tactic/replacer.lean", "newPath": "tactic/replacer.lean", "changes": []}]}, {"timestamp": 1534063976, "sha": "522d3ea7", "message": "refactor(data/list/basic): simplify proof", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "mem_diff_of_mem", ["list"]]]}]}, {"timestamp": 1534093762, "sha": "26ef0a02", "message": "feat(data/list/basic): diff_subset and mem_diff_of_mem", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "diff_subset", ["list"]], ["add", "theorem", "mem_diff_of_mem", ["list"]]]}]}, {"timestamp": 1533959991, "sha": "6bf879d2", "message": "fix(category_theory): consistent use of coercions, consistent naming (#248)", "changes": [{"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["mod", "theorem", "comp_obj", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["del", "theorem", "comp", ["category_theory", "prod", "category"]], ["del", "def", "fst", ["category_theory", "prod", "category"]], ["del", "theorem", "id", ["category_theory", "prod", "category"]], ["del", "def", "inl", ["category_theory", "prod", "category"]], ["del", "def", "inr", ["category_theory", "prod", "category"]], ["del", "def", "snd", ["category_theory", "prod", "category"]], ["add", "def", "fst", ["category_theory", "prod"]], ["add", "def", "inl", ["category_theory", "prod"]], ["add", "def", "inr", ["category_theory", "prod"]], ["add", "def", "snd", ["category_theory", "prod"]], ["add", "theorem", "prod_comp", ["category_theory"]], ["add", "theorem", "prod_id", ["category_theory"]]]}]}, {"timestamp": 1533909753, "sha": "e34fec87", "message": "fix(tests/examples): fix test", "changes": [{"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1533905078, "sha": "57194fa5", "message": "fix(tactic/wlog): fix issue causing segfault", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "data/stream/basic.lean", "newPath": "data/stream/basic.lean", "changes": []}, {"oldPath": "logic/relation.lean", "newPath": "logic/relation.lean", "changes": []}, {"oldPath": "tactic/wlog.lean", "newPath": "tactic/wlog.lean", "changes": []}]}, {"timestamp": 1533905078, "sha": "a679c984", "message": "refactor(data/multiset): shorten proof", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}]}, {"timestamp": 1533895503, "sha": "24aeeaff", "message": "feat(data/zmod): integers mod n (#159)", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_ne_zero_iff_pos", ["int"]], ["add", "theorem", "coe_nat_nonneg", ["int"]], ["add", "theorem", "mod_mod", ["int"]]]}, {"oldPath": "data/int/modeq.lean", "newPath": "data/int/modeq.lean", "changes": [["mod", "theorem", "coe_nat_modeq_iff", ["int", "modeq"]]]}, {"oldPath": null, "newPath": "data/zmod.lean", "changes": [["add", "theorem", "add_val", ["zmod"]], ["add", "theorem", "card_zmod", ["zmod"]], ["add", "theorem", "cast_mod_int", ["zmod"]], ["add", "theorem", "cast_mod_nat", ["zmod"]], ["add", "theorem", "cast_self_eq_zero", ["zmod"]], ["add", "theorem", "cast_val", ["zmod"]], ["add", "theorem", "eq_iff_modeq_int", ["zmod"]], ["add", "theorem", "eq_iff_modeq_nat", ["zmod"]], ["add", "theorem", "mk_eq_cast", ["zmod"]], ["add", "theorem", "mul_val", ["zmod"]], ["add", "theorem", "one_val", ["zmod"]], ["add", "theorem", "val_cast_int", ["zmod"]], ["add", "theorem", "val_cast_nat", ["zmod"]], ["add", "theorem", "val_cast_of_lt", ["zmod"]], ["add", "theorem", "zero_val", ["zmod"]], ["add", "def", "zmod", []], ["add", "theorem", "add_val", ["zmodp"]], ["add", "theorem", "cast_mod_int", ["zmodp"]], ["add", "theorem", "cast_mod_nat", ["zmodp"]], ["add", "theorem", "cast_self_eq_zero:", ["zmodp"]], ["add", "theorem", "cast_val", ["zmodp"]], ["add", "theorem", "eq_iff_modeq_int", ["zmodp"]], ["add", "theorem", "eq_iff_modeq_nat", ["zmodp"]], ["add", "theorem", "gcd_a_modeq", ["zmodp"]], ["add", "theorem", "mk_eq_cast", ["zmodp"]], ["add", "theorem", "mul_inv_eq_gcd", ["zmodp"]], ["add", "theorem", "mul_val", ["zmodp"]], ["add", "theorem", "one_val", ["zmodp"]], ["add", "theorem", "val_cast_int", ["zmodp"]], ["add", "theorem", "val_cast_nat", ["zmodp"]], ["add", "theorem", "val_cast_of_lt", ["zmodp"]], ["add", "theorem", "zero_val", ["zmodp"]], ["add", "def", "zmodp", []]]}]}, {"timestamp": 1533894260, "sha": "e1312b4d", "message": "feat(group_theory/perm): signatures of permutations (#231)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod", ["is_group_anti_hom"]], ["mod", "theorem", "prod", ["is_group_hom"]]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "def", "is_conj", []], ["add", "theorem", "is_conj_iff_eq", []], ["add", "theorem", "is_conj_refl", []], ["add", "theorem", "is_conj_symm", []], ["add", "theorem", "is_conj_trans", []]]}, {"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["mod", "theorem", "inverse_trans_apply", ["equiv"]], ["add", "theorem", "refl_trans", ["equiv"]], ["add", "theorem", "swap_inv", ["equiv"]], ["add", "theorem", "symm_trans", ["equiv"]], ["add", "theorem", "symm_trans_swap_trans", ["equiv"]], ["add", "theorem", "trans_refl", ["equiv"]], ["add", "theorem", "trans_symm", ["equiv"]]]}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "def", "attach_fin", ["finset"]], ["add", "theorem", "card_attach_fin", ["finset"]], ["add", "theorem", "eq_empty_iff_forall_not_mem", ["finset"]], ["add", "theorem", "mem_attach_fin", ["finset"]], ["add", "theorem", "mem_sort", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_units_int", ["fintype"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "mem_sort", ["multiset"]]]}, {"oldPath": null, "newPath": "group_theory/perm.lean", "changes": [["add", "theorem", "eq_sign_of_surjective_hom", ["equiv", "perm"]], ["add", "def", "fin_pairs_lt", ["equiv", "perm"]], ["add", "theorem", "is_conj_swap", ["equiv", "perm"]], ["add", "def", "is_swap", ["equiv", "perm"]], ["add", "theorem", "mem_fin_pairs_lt", ["equiv", "perm"]], ["add", "def", "sign", ["equiv", "perm"]], ["add", "def", "sign_aux2", ["equiv", "perm"]], ["add", "def", "sign_aux3", ["equiv", "perm"]], ["add", "theorem", "sign_aux3_mul_and_swap", ["equiv", "perm"]], ["add", "def", "sign_aux", ["equiv", "perm"]], ["add", "theorem", "sign_aux_eq_sign_aux2", ["equiv", "perm"]], ["add", "theorem", "sign_aux_inv", ["equiv", "perm"]], ["add", "theorem", "sign_aux_mul", ["equiv", "perm"]], ["add", "theorem", "sign_aux_one", ["equiv", "perm"]], ["add", "theorem", "sign_aux_swap", ["equiv", "perm"]], ["add", "def", "sign_bij_aux", ["equiv", "perm"]], ["add", "theorem", "sign_bij_aux_inj", ["equiv", "perm"]], ["add", "theorem", "sign_bij_aux_mem", ["equiv", "perm"]], ["add", "theorem", "sign_bij_aux_surj", ["equiv", "perm"]], ["add", "theorem", "sign_eq_of_is_swap", ["equiv", "perm"]], ["add", "theorem", "sign_swap", ["equiv", "perm"]], ["add", "theorem", "support_swap_mul", ["equiv", "perm"]], ["add", "def", "swap_factors", ["equiv", "perm"]], ["add", "def", "swap_factors_aux", ["equiv", "perm"]], ["add", "theorem", "swap_mul_swap_mul_swap", ["equiv", "perm"]], ["add", "def", "trunc_swap_factors", ["equiv", "perm"]]]}]}, {"timestamp": 1533892459, "sha": "251a8c36", "message": "feat(tactic/assoc_rewrite): new tactic for implicitly applying associativity before rewriting (#228)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "tactic/rewrite.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1533892040, "sha": "ff250839", "message": "feat(data/list/basic): nil_diff and diff_sublist (#235)", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "diff_sublist", ["list"]], ["add", "theorem", "nil_diff", ["list"]], ["add", "def", "reverse_rec_on", ["list"]], ["del", "theorem", "reverse_rec_on", ["list"]]]}]}, {"timestamp": 1533892001, "sha": "26ef4192", "message": "feat(data/fintype): fintype and decidable_eq for partial functions (#236)", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": []}]}, {"timestamp": 1533891855, "sha": "e2521c31", "message": "feat(data/set/finite): card_image_of_injective and other minor lemmas (#245)", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "coe_ssubset", ["finset"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "ssubset_iff_subset_not_subset", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "coe_to_finset'", ["finset"]], ["add", "theorem", "card_image_of_inj_on", ["set"]], ["add", "theorem", "card_image_of_injective", ["set"]], ["add", "theorem", "card_lt_card", ["set"]]]}]}, {"timestamp": 1533891154, "sha": "d4005101", "message": "feat(data/nat/binomial): the binomial theorem (#214)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_range_succ'", ["finset"]], ["add", "theorem", "prod_range_succ", ["finset"]], ["add", "theorem", "sum_range_succ'", ["finset"]]]}, {"oldPath": null, "newPath": "data/nat/binomial.lean", "changes": [["add", "theorem", "add_pow", []]]}]}, {"timestamp": 1533891052, "sha": "54ce15b5", "message": "refactor(ring_theory/ideals): avoid using type class inference for setoids in quotient rings and groups (#212)", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "gpow", ["is_group_hom"]], ["add", "theorem", "pow", ["is_group_hom"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["add", "theorem", "exact'", ["quotient"]], ["add", "theorem", "mk_out'", ["quotient"]], ["add", "theorem", "out_eq'", ["quotient"]], ["add", "theorem", "sound'", ["quotient"]]]}, {"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["add", "theorem", "coe_gpow", ["left_cosets"]], ["add", "theorem", "coe_inv", ["left_cosets"]], ["add", "theorem", "coe_mul", ["left_cosets"]], ["add", "theorem", "coe_one", ["left_cosets"]], ["add", "theorem", "coe_pow", ["left_cosets"]], ["mod", "theorem", "eq_class_eq_left_coset", ["left_cosets"]], ["add", "def", "mk", ["left_cosets"]]]}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["del", "theorem", "exists_inv", ["is_ideal"]], ["del", "def", "quotient", ["is_ideal"]], ["del", "theorem", "quotient_eq_zero_iff_mem", ["is_ideal"]], ["del", "def", "quotient_rel", ["is_ideal"]], ["add", "def", "trivial", ["is_ideal"]], ["add", "theorem", "coe_add", ["quotient_ring"]], ["add", "theorem", "coe_mul", ["quotient_ring"]], ["add", "theorem", "coe_neg", ["quotient_ring"]], ["add", "theorem", "coe_one", ["quotient_ring"]], ["add", "theorem", "coe_pow", ["quotient_ring"]], ["add", "theorem", "coe_sub", ["quotient_ring"]], ["add", "theorem", "coe_zero", ["quotient_ring"]], ["add", "theorem", "eq_zero_iff_mem", ["quotient_ring"]], ["add", "theorem", "exists_inv", ["quotient_ring"]], ["add", "def", "mk", ["quotient_ring"]], ["add", "def", "quotient", ["quotient_ring"]], ["add", "def", "quotient_rel", ["quotient_ring"]]]}]}, {"timestamp": 1533885149, "sha": "5b9914b5", "message": "style(group_theory/quotient_group): code style", "changes": [{"oldPath": "group_theory/quotient_group.lean", "newPath": "group_theory/quotient_group.lean", "changes": [["mod", "def", "lift", ["group", "quotient"]], ["mod", "theorem", "lift_mk'", ["group", "quotient"]], ["mod", "theorem", "lift_mk", ["group", "quotient"]]]}]}, {"timestamp": 1533884733, "sha": "d279ddb9", "message": "feat(group_theory): adding basic theory of quotient groups", "changes": [{"oldPath": null, "newPath": "group_theory/quotient_group.lean", "changes": [["add", "theorem", "injective_ker_lift", ["group", "quotient"]], ["add", "def", "lift", ["group", "quotient"]], ["add", "theorem", "lift_mk'", ["group", "quotient"]], ["add", "theorem", "lift_mk", ["group", "quotient"]], ["add", "def", "mk", ["group", "quotient"]]]}]}, {"timestamp": 1533884640, "sha": "0f42b279", "message": "feat(group_theory/submonoid,subgroup): merge with add_* versions", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "group_theory/add_subgroup.lean", "newPath": null, "changes": [["del", "def", "closure", ["add_group"]], ["del", "theorem", "closure_subset", ["add_group"]], ["del", "theorem", "gmultiples_eq_closure", ["add_group"]], ["del", "inductive", "in_closure", ["add_group"]], ["del", "theorem", "mem_closure", ["add_group"]], ["del", "theorem", "subset_closure", ["add_group"]], ["del", "def", "gmultiples", []], ["del", "theorem", "injective_add", []], ["del", "theorem", "add_mem_cancel_left", ["is_add_subgroup"]], ["del", "theorem", "add_mem_cancel_right", ["is_add_subgroup"]], ["del", "def", "center", ["is_add_subgroup"]], ["del", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["del", "theorem", "mem_center", ["is_add_subgroup"]], ["del", "theorem", "mem_norm_comm", ["is_add_subgroup"]], ["del", "theorem", "mem_norm_comm_iff", ["is_add_subgroup"]], ["del", "theorem", "mem_trivial", ["is_add_subgroup"]], ["del", "theorem", "neg_mem_iff", ["is_add_subgroup"]], ["del", "theorem", "of_sub", ["is_add_subgroup"]], ["del", "def", "trivial", ["is_add_subgroup"]], ["del", "theorem", "trivial_eq_closure", ["is_add_subgroup"]], ["del", "theorem", "mem_gmultiples", []]]}, {"oldPath": "group_theory/add_submonoid.lean", "newPath": null, "changes": [["del", "def", "closure", ["add_monoid"]], ["del", "theorem", "closure_subset", ["add_monoid"]], ["del", "theorem", "exists_list_of_mem_closure", ["add_monoid"]], ["del", "inductive", "in_closure", ["add_monoid"]], ["del", "theorem", "subset_closure", ["add_monoid"]], ["del", "theorem", "list_sum_mem", ["is_add_submonoid"]], ["del", "theorem", "multiple_subset", ["is_add_submonoid"]], ["del", "theorem", "smul_mem", ["is_add_submonoid"]], ["del", "def", "multiples", []]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "def", "closure", ["add_group"]], ["add", "theorem", "closure_subset", ["add_group"]], ["add", "theorem", "gmultiples_eq_closure", ["add_group"]], ["add", "theorem", "mem_closure", ["add_group"]], ["add", "theorem", "is_add_subgroup_iff", ["additive"]], ["add", "theorem", "normal_add_subgroup_iff", ["additive"]], ["add", "def", "gmultiples", []], ["mod", "theorem", "subset_closure", ["group"]], ["add", "def", "center", ["is_add_subgroup"]], ["add", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["add", "theorem", "of_sub", ["is_add_subgroup"]], ["add", "def", "trivial", ["is_add_subgroup"]], ["mod", "theorem", "mem_center", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm_iff", ["is_subgroup"]], ["mod", "theorem", "of_div", ["is_subgroup"]], ["add", "theorem", "mem_gmultiples", []], ["mod", "theorem", "mem_gpowers", []], ["add", "theorem", "is_subgroup_iff", ["multiplicative"]], ["add", "theorem", "normal_subgroup_iff", ["multiplicative"]]]}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": [["add", "def", "closure", ["add_monoid"]], ["add", "theorem", "closure_subset", ["add_monoid"]], ["add", "theorem", "exists_list_of_mem_closure", ["add_monoid"]], ["add", "theorem", "subset_closure", ["add_monoid"]], ["add", "theorem", "is_add_submonoid_iff", ["additive"]], ["add", "theorem", "multiple_subset", ["is_add_submonoid"]], ["add", "theorem", "smul_mem", ["is_add_submonoid"]], ["mod", "theorem", "pow_mem", ["is_submonoid"]], ["add", "def", "multiples", []], ["add", "theorem", "is_submonoid_iff", ["multiplicative"]]]}]}, {"timestamp": 1533884640, "sha": "1d5dd0d4", "message": "feat(group_theory): adding add_subgroup and add_submonoid", "changes": [{"oldPath": null, "newPath": "group_theory/add_subgroup.lean", "changes": [["add", "def", "closure", ["add_group"]], ["add", "theorem", "closure_subset", ["add_group"]], ["add", "theorem", "gmultiples_eq_closure", ["add_group"]], ["add", "inductive", "in_closure", ["add_group"]], ["add", "theorem", "mem_closure", ["add_group"]], ["add", "theorem", "subset_closure", ["add_group"]], ["add", "def", "gmultiples", []], ["add", "theorem", "injective_add", []], ["add", "theorem", "add_mem_cancel_left", ["is_add_subgroup"]], ["add", "theorem", "add_mem_cancel_right", ["is_add_subgroup"]], ["add", "def", "center", ["is_add_subgroup"]], ["add", "theorem", "gsmul_mem", ["is_add_subgroup"]], ["add", "theorem", "mem_center", ["is_add_subgroup"]], ["add", "theorem", "mem_norm_comm", ["is_add_subgroup"]], ["add", "theorem", "mem_norm_comm_iff", ["is_add_subgroup"]], ["add", "theorem", "mem_trivial", ["is_add_subgroup"]], ["add", "theorem", "neg_mem_iff", ["is_add_subgroup"]], ["add", "theorem", "of_sub", ["is_add_subgroup"]], ["add", "def", "trivial", ["is_add_subgroup"]], ["add", "theorem", "trivial_eq_closure", ["is_add_subgroup"]], ["add", "theorem", "mem_gmultiples", []]]}, {"oldPath": null, "newPath": "group_theory/add_submonoid.lean", "changes": [["add", "def", "closure", ["add_monoid"]], ["add", "theorem", "closure_subset", ["add_monoid"]], ["add", "theorem", "exists_list_of_mem_closure", ["add_monoid"]], ["add", "inductive", "in_closure", ["add_monoid"]], ["add", "theorem", "subset_closure", ["add_monoid"]], ["add", "theorem", "list_sum_mem", ["is_add_submonoid"]], ["add", "theorem", "multiple_subset", ["is_add_submonoid"]], ["add", "theorem", "smul_mem", ["is_add_submonoid"]], ["add", "def", "multiples", []]]}]}, {"timestamp": 1533879433, "sha": "e1d92c27", "message": "fix(tactic/replacer): fix tests", "changes": [{"oldPath": "tactic/replacer.lean", "newPath": "tactic/replacer.lean", "changes": []}, {"oldPath": "tests/replacer.lean", "newPath": "tests/replacer.lean", "changes": []}]}, {"timestamp": 1533816547, "sha": "bf3dde12", "message": "refactor(set_theory/cardinal): remove noncomputable theory", "changes": [{"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["del", "def", "min", ["cardinal"]], ["del", "def", "succ", ["cardinal"]], ["del", "def", "sup", ["cardinal"]]]}]}, {"timestamp": 1533816547, "sha": "a995a3ad", "message": "perf(tactic/replacer): use if instead of match", "changes": [{"oldPath": "tactic/replacer.lean", "newPath": "tactic/replacer.lean", "changes": []}]}, {"timestamp": 1533816387, "sha": "55c2cfd1", "message": "fix(docs/theories/integers): typo pointed out by Bryan Gin-ge Chen (#244)", "changes": [{"oldPath": "docs/theories/integers.md", "newPath": "docs/theories/integers.md", "changes": []}]}, {"timestamp": 1533782517, "sha": "a52c2400", "message": "doc(replacer): documentation and test (#243)", "changes": [{"oldPath": "category_theory/category.lean", "newPath": "category_theory/category.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "tests/replacer.lean", "changes": []}]}, {"timestamp": 1533739198, "sha": "a9178103", "message": "refactor(tactic/interactive): merge rcases_hint -> rcases?", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": [["del", "structure", "rcases_config", ["tactic", "interactive"]]]}]}, {"timestamp": 1533725490, "sha": "8a19a984", "message": "feat(tactic/replacer): replaceable tactics", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/replacer.lean", "changes": []}]}, {"timestamp": 1533711457, "sha": "732ec0ef", "message": "feat(tactic/rcases): rcases_hint, rintro_hint", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": [["add", "structure", "rcases_config", ["tactic", "interactive"]], ["del", "def", "rcases_patt_inverted", ["tactic", "interactive"]]]}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": [["add", "def", "merge_list", ["tactic"]], ["del", "def", "name", ["tactic", "rcases_patt"]], ["del", "inductive", "rcases_patt", ["tactic"]]]}]}, {"timestamp": 1533689077, "sha": "fe7cd33c", "message": "refactor(category_theory/products): tweak PR after merge", "changes": [{"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": [["add", "def", "nnreal", []]]}, {"oldPath": "category_theory/functor.lean", "newPath": "category_theory/functor.lean", "changes": [["add", "def", "comp", ["category_theory", "functor"]]]}, {"oldPath": "category_theory/functor_category.lean", "newPath": "category_theory/functor_category.lean", "changes": [["add", "theorem", "comp_app", ["category_theory", "functor", "category"]], ["add", "theorem", "id_app", ["category_theory", "functor", "category"]], ["add", "theorem", "app_naturality", ["category_theory", "functor", "category", "nat_trans"]], ["add", "theorem", "naturality_app", ["category_theory", "functor", "category", "nat_trans"]], ["del", "theorem", "comp_app", ["category_theory", "functor_category"]], ["del", "theorem", "id_app", ["category_theory", "functor_category"]], ["del", "theorem", "app_naturality", ["category_theory", "functor_category", "nat_trans"]], ["del", "theorem", "naturality_app", ["category_theory", "functor_category", "nat_trans"]]]}, {"oldPath": "category_theory/natural_transformation.lean", "newPath": "category_theory/natural_transformation.lean", "changes": [["mod", "theorem", "exchange", ["category_theory", "nat_trans"]], ["add", "def", "hcomp", ["category_theory", "nat_trans"]], ["add", "def", "vcomp", ["category_theory", "nat_trans"]]]}, {"oldPath": "category_theory/products.lean", "newPath": "category_theory/products.lean", "changes": [["add", "def", "prod", ["category_theory", "functor"]], ["add", "theorem", "prod_map", ["category_theory", "functor"]], ["add", "theorem", "prod_obj", ["category_theory", "functor"]], ["del", "theorem", "product_map", ["category_theory", "functor"]], ["del", "theorem", "product_obj", ["category_theory", "functor"]], ["add", "def", "prod", ["category_theory", "nat_trans"]], ["add", "theorem", "prod_app", ["category_theory", "nat_trans"]], ["del", "theorem", "product_app", ["category_theory", "nat_trans"]], ["add", "theorem", "comp", ["category_theory", "prod", "category"]], ["add", "def", "fst", ["category_theory", "prod", "category"]], ["add", "theorem", "id", ["category_theory", "prod", "category"]], ["add", "def", "inl", ["category_theory", "prod", "category"]], ["add", "def", "inr", ["category_theory", "prod", "category"]], ["add", "def", "snd", ["category_theory", "prod", "category"]], ["del", "theorem", "comp", ["category_theory", "product_category"]], ["del", "theorem", "id", ["category_theory", "product_category"]]]}, {"oldPath": "order/bounds.lean", "newPath": "order/bounds.lean", "changes": [["add", "def", "is_glb", []], ["add", "def", "is_greatest", []], ["add", "def", "is_least", []], ["add", "def", "is_lub", []], ["add", "def", "lower_bounds", []], ["add", "def", "upper_bounds", []]]}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1533688330, "sha": "02cf7a61", "message": "feat(category_theory): product categories and functor categories (#239)", "changes": [{"oldPath": null, "newPath": "category_theory/functor_category.lean", "changes": [["add", "theorem", "comp_app", ["category_theory", "functor_category"]], ["add", "theorem", "id_app", ["category_theory", "functor_category"]], ["add", "theorem", "app_naturality", ["category_theory", "functor_category", "nat_trans"]], ["add", "theorem", "naturality_app", ["category_theory", "functor_category", "nat_trans"]]]}, {"oldPath": null, "newPath": "category_theory/products.lean", "changes": [["add", "theorem", "product_map", ["category_theory", "functor"]], ["add", "theorem", "product_obj", ["category_theory", "functor"]], ["add", "theorem", "product_app", ["category_theory", "nat_trans"]], ["add", "theorem", "comp", ["category_theory", "product_category"]], ["add", "theorem", "id", ["category_theory", "product_category"]]]}]}, {"timestamp": 1533688179, "sha": "47a6a6fb", "message": "fix(tactic/interactive): try_for should fail if the tactic fails", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1533688179, "sha": "417f29ae", "message": "fix(linear_algebra/multivariate_polynomial): remove some @[simp]", "changes": [{"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["mod", "theorem", "C_mul_monomial", ["mv_polynomial"]], ["mod", "theorem", "eval_monomial", ["mv_polynomial"]], ["mod", "theorem", "eval₂_mul_monomial", ["mv_polynomial"]]]}]}, {"timestamp": 1533673730, "sha": "bd7f1b06", "message": "feat(data/fintype): injective_iff_surjective (#240)", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["mod", "theorem", "card_le_of_injective", ["fintype"]], ["add", "theorem", "injective_iff_surjective", ["fintype"]], ["add", "theorem", "injective_iff_surjective_of_equiv", ["fintype"]]]}]}, {"timestamp": 1533624197, "sha": "9b1be732", "message": "feat(category_theory): basic definitions (#152)\n* feat(category_theory): basic definitions\n* fixing formatting in documentation\n* corrections from review\n* removing second ematch attribute on associativity_lemma\n* being slightly more careful about variables\n(I don't think there were any actual errors,\nbut I was sometimes using an argument\nwhen there was a variable of the same\nname available.)\n* fix(notation): transformation components\nUsing `@>` per @rwbarton's suggestion.\n* fix(notation): more conventional notation for composition\n* adjusting namespaces, capitalisation, and headers\n* move functor/default.lean to functor.lean\n(Later PRs will add more files to the functor/ directory, but that can wait.)\n* oops\n* fixing indentation\n* namespace for instances\n* removing unnecessary `@>` notation for natural transformations\n* renaming, namespacing, and removing a spurious attribute\n* better naming, namespaces, and coercions\n* updating documentation\n* renaming id\n* reordering definitions\n* rfl lemmas for has_one\n* formatting\n* formatting\n* renaming: snake_case\n* renaming coe rfl lemmas\n* functoriality -> map_comp\n* rfl lemmas for identity C and identity F (reducing both to `1`)\n* renaming ext lemma to `ext`\n* rename `natural_transformation` to `nat_trans`\n* rename `make_lemma` to `restate_axiom`\n* renaming nat_trans.components to nat_trans.app\n* oops, fix import\n* adding doc_comments, and `protected`\n* formatting\n* removing `has_one` instances, per zulip chat, and adding a `vcomp.assoc` lemma\n* removing the attribute that `restate_axiom` used to add\n(it was causing a problem on travis, but not locally? anyway it's useless)\n* fixing names", "changes": [{"oldPath": null, "newPath": "category_theory/category.lean", "changes": [["add", "def", "large_category", ["category_theory"]], ["add", "def", "small_category", ["category_theory"]]]}, {"oldPath": null, "newPath": "category_theory/functor.lean", "changes": [["add", "theorem", "coe_def", ["category_theory", "functor"]], ["add", "theorem", "comp_map", ["category_theory", "functor"]], ["add", "theorem", "comp_obj", ["category_theory", "functor"]], ["add", "theorem", "id_map", ["category_theory", "functor"]], ["add", "theorem", "id_obj", ["category_theory", "functor"]], ["add", "structure", "functor", ["category_theory"]]]}, {"oldPath": null, "newPath": "category_theory/natural_transformation.lean", "changes": [["add", "theorem", "coe_def", ["category_theory", "nat_trans"]], ["add", "theorem", "exchange", ["category_theory", "nat_trans"]], ["add", "theorem", "ext", ["category_theory", "nat_trans"]], ["add", "theorem", "hcomp_app", ["category_theory", "nat_trans"]], ["add", "theorem", "id_app", ["category_theory", "nat_trans"]], ["add", "theorem", "vcomp_app", ["category_theory", "nat_trans"]], ["add", "theorem", "vcomp_assoc", ["category_theory", "nat_trans"]], ["add", "structure", "nat_trans", ["category_theory"]]]}, {"oldPath": null, "newPath": "docs/theories/categories.md", "changes": []}, {"oldPath": null, "newPath": "tactic/restate_axiom.lean", "changes": []}]}, {"timestamp": 1533621080, "sha": "235129a8", "message": "feat(linear_algebra/multivariate_polynomial): Add `_sub` and `_neg` lemmas, and make them simp. (#238)", "changes": [{"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["mod", "theorem", "C_add", ["mv_polynomial"]], ["mod", "theorem", "C_mul", ["mv_polynomial"]], ["add", "theorem", "C_neg", ["mv_polynomial"]], ["add", "theorem", "C_sub", ["mv_polynomial"]], ["mod", "theorem", "eval_add", ["mv_polynomial"]], ["mod", "theorem", "eval_monomial", ["mv_polynomial"]], ["mod", "theorem", "eval_mul", ["mv_polynomial"]], ["add", "theorem", "eval_neg", ["mv_polynomial"]], ["add", "theorem", "eval_sub", ["mv_polynomial"]], ["mod", "theorem", "eval₂_add", ["mv_polynomial"]], ["mod", "theorem", "eval₂_monomial", ["mv_polynomial"]], ["mod", "theorem", "eval₂_mul_monomial", ["mv_polynomial"]], ["add", "theorem", "eval₂_neg", ["mv_polynomial"]], ["add", "theorem", "eval₂_sub", ["mv_polynomial"]], ["add", "theorem", "map_neg", ["mv_polynomial"]], ["add", "theorem", "map_sub", ["mv_polynomial"]]]}]}, {"timestamp": 1533585915, "sha": "8dc0393c", "message": "feat(data/multiset): adding two lemmas about singletons (#234)", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "erase_dup_singleton", ["multiset"]], ["add", "theorem", "powerset_cons", ["multiset"]], ["add", "theorem", "powerset_zero", ["multiset"]], ["add", "theorem", "repeat_one", ["multiset"]], ["add", "theorem", "repeat_succ", ["multiset"]], ["add", "theorem", "repeat_zero", ["multiset"]]]}]}, {"timestamp": 1533553542, "sha": "18bd6148", "message": "feat(algebra/group_power): adding various cast power lemmas for nat and int (#230)", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "cast_pow", ["int"]], ["add", "theorem", "coe_nat_pow", ["int"]], ["add", "theorem", "cast_pow", ["nat"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "pow_two", ["nat"]]]}]}, {"timestamp": 1533537782, "sha": "cf0bf2af", "message": "fix(data/seq/wseq): fix build", "changes": [{"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}]}, {"timestamp": 1533532106, "sha": "8d13bb9d", "message": "feat(list/basic,multiset): list.revzip, multiset.diagonal", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "imp", ["list", "forall₂"]], ["add", "theorem", "length_revzip", ["list"]], ["add", "theorem", "length_zip", ["list"]], ["add", "theorem", "mem_zip", ["list"]], ["add", "theorem", "reverse_revzip", ["list"]], ["add", "def", "revzip", ["list"]], ["add", "theorem", "revzip_map_fst", ["list"]], ["add", "theorem", "revzip_map_snd", ["list"]], ["add", "theorem", "revzip_swap", ["list"]], ["add", "theorem", "unzip_eq_map", ["list"]], ["add", "theorem", "unzip_left", ["list"]], ["add", "theorem", "unzip_revzip", ["list"]], ["add", "theorem", "unzip_right", ["list"]], ["add", "theorem", "unzip_swap", ["list"]], ["add", "theorem", "unzip_zip", ["list"]], ["add", "theorem", "unzip_zip_left", ["list"]], ["add", "theorem", "unzip_zip_right", ["list"]], ["add", "theorem", "zip_append", ["list"]], ["add", "theorem", "zip_map'", ["list"]], ["add", "theorem", "zip_map", ["list"]], ["add", "theorem", "zip_map_left", ["list"]], ["add", "theorem", "zip_map_right", ["list"]], ["add", "theorem", "zip_swap", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "revzip_sublists'", ["list"]], ["add", "theorem", "revzip_sublists", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "card_diagonal", ["multiset"]], ["mod", "theorem", "coe_eq_coe", ["multiset"]], ["add", "def", "diagonal", ["multiset"]], ["add", "theorem", "diagonal_coe", ["multiset"]], ["add", "theorem", "diagonal_map_fst", ["multiset"]], ["add", "theorem", "diagonal_map_snd", ["multiset"]], ["add", "theorem", "mem_diagonal", ["multiset"]], ["add", "theorem", "mem_powerset_aux", ["multiset"]], ["add", "theorem", "revzip_powerset_aux", ["multiset"]], ["add", "theorem", "revzip_powerset_aux_eq_map", ["multiset"]], ["add", "theorem", "revzip_powerset_aux_perm", ["multiset"]]]}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": []}]}, {"timestamp": 1533509573, "sha": "e4b652f6", "message": "refactor(data/real/basic): rename for consistency", "changes": [{"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["del", "theorem", "exists_supremum_real", []]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["del", "theorem", "Sup_is_lub", ["real"]]]}, {"oldPath": "data/real/ennreal.lean", "newPath": "data/real/ennreal.lean", "changes": []}]}, {"timestamp": 1533509426, "sha": "e7f11031", "message": "fix(topology/topological_structures): remove decidability assumption", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}]}, {"timestamp": 1533509327, "sha": "599df281", "message": "feat(linear_algebra/mv_polynomial): composition lemmas", "changes": [{"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["mod", "def", "eval", ["mv_polynomial"]], ["mod", "theorem", "eval_C", ["mv_polynomial"]], ["mod", "theorem", "eval_X", ["mv_polynomial"]], ["mod", "theorem", "eval_add", ["mv_polynomial"]], ["add", "theorem", "eval_assoc", ["mv_polynomial"]], ["mod", "theorem", "eval_mul", ["mv_polynomial"]], ["mod", "theorem", "eval_zero", ["mv_polynomial"]], ["add", "def", "eval₂", ["mv_polynomial"]], ["add", "theorem", "eval₂_C", ["mv_polynomial"]], ["add", "theorem", "eval₂_X", ["mv_polynomial"]], ["add", "theorem", "eval₂_add", ["mv_polynomial"]], ["add", "theorem", "eval₂_comp_left", ["mv_polynomial"]], ["add", "theorem", "eval₂_eq_eval_map", ["mv_polynomial"]], ["add", "theorem", "eval₂_eta", ["mv_polynomial"]], ["add", "theorem", "eval₂_monomial", ["mv_polynomial"]], ["add", "theorem", "eval₂_mul", ["mv_polynomial"]], ["add", "theorem", "eval₂_mul_monomial", ["mv_polynomial"]], ["add", "theorem", "eval₂_one", ["mv_polynomial"]], ["add", "theorem", "eval₂_zero", ["mv_polynomial"]], ["mod", "def", "map", ["mv_polynomial"]], ["mod", "theorem", "map_C", ["mv_polynomial"]], ["mod", "theorem", "map_X", ["mv_polynomial"]], ["add", "theorem", "map_id", ["mv_polynomial"]], ["add", "theorem", "map_map", ["mv_polynomial"]], ["mod", "theorem", "map_one", ["mv_polynomial"]], ["del", "def", "map₂", ["mv_polynomial"]], ["del", "theorem", "map₂_C", ["mv_polynomial"]], ["del", "theorem", "map₂_X", ["mv_polynomial"]], ["del", "theorem", "map₂_add", ["mv_polynomial"]], ["del", "theorem", "map₂_monomial", ["mv_polynomial"]], ["del", "theorem", "map₂_mul", ["mv_polynomial"]], ["del", "theorem", "map₂_mul_monomial", ["mv_polynomial"]], ["del", "theorem", "map₂_one", ["mv_polynomial"]], ["del", "theorem", "map₂_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1533412395, "sha": "2d0eb8cc", "message": "feat(linear_algebra/mv_polynomial): map function, map2", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "map_range_single", ["finsupp"]]]}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["add", "theorem", "C_add", ["mv_polynomial"]], ["add", "theorem", "C_mul", ["mv_polynomial"]], ["mod", "def", "eval", ["mv_polynomial"]], ["mod", "theorem", "eval_C", ["mv_polynomial"]], ["mod", "theorem", "eval_X", ["mv_polynomial"]], ["mod", "theorem", "eval_add", ["mv_polynomial"]], ["mod", "theorem", "eval_mul", ["mv_polynomial"]], ["del", "theorem", "eval_mul_monomial", ["mv_polynomial"]], ["mod", "theorem", "eval_zero", ["mv_polynomial"]], ["add", "def", "map", ["mv_polynomial"]], ["add", "theorem", "map_C", ["mv_polynomial"]], ["add", "theorem", "map_X", ["mv_polynomial"]], ["add", "theorem", "map_add", ["mv_polynomial"]], ["add", "theorem", "map_monomial", ["mv_polynomial"]], ["add", "theorem", "map_mul", ["mv_polynomial"]], ["add", "theorem", "map_one", ["mv_polynomial"]], ["add", "def", "map₂", ["mv_polynomial"]], ["add", "theorem", "map₂_C", ["mv_polynomial"]], ["add", "theorem", "map₂_X", ["mv_polynomial"]], ["add", "theorem", "map₂_add", ["mv_polynomial"]], ["add", "theorem", "map₂_monomial", ["mv_polynomial"]], ["add", "theorem", "map₂_mul", ["mv_polynomial"]], ["add", "theorem", "map₂_mul_monomial", ["mv_polynomial"]], ["add", "theorem", "map₂_one", ["mv_polynomial"]], ["add", "theorem", "map₂_zero", ["mv_polynomial"]]]}]}, {"timestamp": 1533408435, "sha": "1b937197", "message": "feat(algebra/ring): units.neg and associated matter", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "units_eq_one", ["nat"]], ["mod", "theorem", "ext", ["units"]], ["add", "theorem", "ext_iff", ["units"]], ["mod", "theorem", "inv_coe", ["units"]], ["mod", "theorem", "inv_mul", ["units"]], ["mod", "theorem", "inv_mul_cancel_left", ["units"]], ["mod", "theorem", "inv_mul_cancel_right", ["units"]], ["mod", "theorem", "mul_coe", ["units"]], ["mod", "theorem", "mul_inv", ["units"]], ["mod", "theorem", "mul_inv_cancel_left", ["units"]], ["mod", "theorem", "mul_inv_cancel_right", ["units"]], ["mod", "theorem", "mul_left_inj", ["units"]], ["mod", "theorem", "mul_right_inj", ["units"]], ["mod", "theorem", "one_coe", ["units"]], ["mod", "theorem", "val_coe", ["units"]]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "coe_le_coe", ["units"]], ["add", "theorem", "coe_lt_coe", ["units"]], ["add", "theorem", "max_coe", ["units"]], ["add", "theorem", "min_coe", ["units"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["mod", "theorem", "bit0_eq_two_mul", []], ["mod", "theorem", "mul_two", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "units_eq_one_or", ["int"]], ["add", "theorem", "units_nat_abs", ["int"]]]}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": [["add", "def", "inv_aux", ["localization"]]]}]}, {"timestamp": 1533408231, "sha": "e40bee56", "message": "feat(algebra/ring): semiring homs", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "def", "of_semiring", ["is_ring_hom"]]]}]}, {"timestamp": 1533408037, "sha": "7ec5e87f", "message": "feat(set_theory/lists): finite ZFA", "changes": [{"oldPath": null, "newPath": "set_theory/lists.lean", "changes": [["add", "def", "finsets", []], ["add", "def", "cons", ["lists'"]], ["add", "theorem", "cons_subset", ["lists'"]], ["add", "theorem", "mem_cons", ["lists'"]], ["add", "theorem", "mem_def", ["lists'"]], ["add", "theorem", "mem_equiv_left", ["lists'"]], ["add", "theorem", "mem_of_subset'", ["lists'"]], ["add", "theorem", "mem_of_subset", ["lists'"]], ["add", "def", "of_list", ["lists'"]], ["add", "theorem", "of_list_subset", ["lists'"]], ["add", "theorem", "of_to_list", ["lists'"]], ["add", "theorem", "refl", ["lists'", "subset"]], ["add", "theorem", "trans", ["lists'", "subset"]], ["add", "theorem", "subset_def", ["lists'"]], ["add", "theorem", "subset_nil", ["lists'"]], ["add", "def", "to_list", ["lists'"]], ["add", "theorem", "to_list_cons", ["lists'"]], ["add", "theorem", "to_of_list", ["lists'"]], ["add", "def", "atom", ["lists"]], ["add", "theorem", "antisymm_iff", ["lists", "equiv"]], ["add", "def", "decidable_meas", ["lists", "equiv"]], ["add", "theorem", "symm", ["lists", "equiv"]], ["add", "theorem", "trans", ["lists", "equiv"]], ["add", "theorem", "equiv_atom", ["lists"]], ["add", "def", "induction_mut", ["lists"]], ["add", "def", "is_list", ["lists"]], ["add", "theorem", "is_list_of_mem", ["lists"]], ["add", "theorem", "is_list_to_list", ["lists"]], ["add", "theorem", "lt_sizeof_cons'", ["lists"]], ["add", "def", "mem", ["lists"]], ["add", "def", "of'", ["lists"]], ["add", "def", "of_list", ["lists"]], ["add", "theorem", "of_to_list", ["lists"]], ["add", "theorem", "sizeof_pos", ["lists"]], ["add", "def", "to_list", ["lists"]], ["add", "theorem", "to_of_list", ["lists"]], ["add", "def", "lists", []], ["add", "inductive", "{u}", []]]}, {"oldPath": "set_theory/zfc.lean", "newPath": "set_theory/zfc.lean", "changes": []}]}, {"timestamp": 1533275609, "sha": "87317898", "message": "feat(data/vector2): vector.ext (#232)", "changes": [{"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": [["add", "theorem", "ext", ["vector"]]]}]}, {"timestamp": 1532982912, "sha": "cecbf2b9", "message": "doc(tactics/pi_instance): add description in `tactics.md` (#229)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/pi_instances.lean", "newPath": "tactic/pi_instances.lean", "changes": []}]}, {"timestamp": 1532952109, "sha": "fed6c587", "message": "feat(algebra/euclidean_domain): change definition of ED and instance for polynomials (#211)", "changes": [{"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": [["add", "theorem", "lt_one", ["euclidean_domain"]], ["add", "theorem", "mod_lt", ["euclidean_domain"]], ["add", "theorem", "mul_right_not_lt", ["euclidean_domain"]], ["mod", "theorem", "val_dvd_le", ["euclidean_domain"]], ["del", "theorem", "val_le_mul_right", ["euclidean_domain"]], ["del", "theorem", "val_lt_one", ["euclidean_domain"]], ["del", "theorem", "val_mod_lt", ["euclidean_domain"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "degree_add_div", ["polynomial"]], ["add", "theorem", "degree_le_mul_left", ["polynomial"]], ["add", "theorem", "div_def", ["polynomial"]], ["add", "theorem", "div_eq_zero_iff", ["polynomial"]], ["add", "theorem", "mod_def", ["polynomial"]], ["add", "theorem", "mod_eq_self_iff", ["polynomial"]]]}]}, {"timestamp": 1532951334, "sha": "08e0e1d3", "message": "feat(category/traversable): instances for various collections (#217)", "changes": [{"oldPath": null, "newPath": "category/traversable/equiv.lean", "changes": []}, {"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": [["add", "theorem", "to_list_of_heq", ["array"]], ["add", "def", "vector_equiv_array", ["equiv"]], ["add", "def", "vector_equiv_fin", ["equiv"]]]}, {"oldPath": null, "newPath": "data/buffer/basic.lean", "changes": [["add", "theorem", "append_list_mk_buffer", ["buffer"]], ["add", "theorem", "ext", ["buffer"]], ["add", "def", "list_equiv_buffer", ["buffer"]], ["add", "theorem", "to_list_append_list", ["buffer"]]]}, {"oldPath": null, "newPath": "data/dlist/instances.lean", "changes": [["add", "def", "list_equiv_dlist", ["dlist"]]]}, {"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": []}, {"oldPath": null, "newPath": "data/lazy_list2.lean", "changes": [["add", "def", "list_equiv_lazy_list", ["lazy_list"]], ["add", "def", "mk", ["lazy_list", "thunk"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": [["del", "def", "vector_equiv_array", ["equiv"]], ["del", "def", "vector_equiv_fin", ["equiv"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "heq_of_eq_mp", []]]}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1532950067, "sha": "7dc1f5d2", "message": "feat(algebra/pi_instances): more automation (#222)", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": []}, {"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": []}, {"oldPath": "meta/expr.lean", "newPath": "meta/expr.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/pi_instances.lean", "changes": []}]}, {"timestamp": 1532948802, "sha": "fc88dd41", "message": "fix(tactic/split_ifs): do not process the same condition twice (#224)", "changes": [{"oldPath": "tactic/split_ifs.lean", "newPath": "tactic/split_ifs.lean", "changes": []}]}, {"timestamp": 1532948469, "sha": "22d811d1", "message": "chore(doc/style): mention how to handle ';'", "changes": [{"oldPath": "docs/style.md", "newPath": "docs/style.md", "changes": []}]}, {"timestamp": 1532948167, "sha": "0371f6e9", "message": "feat(data/equiv/basic): basic equiv lemmas and decidable_eq (#225)", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "theorem", "inverse_trans_apply", ["equiv"]], ["add", "theorem", "apply_inv_self", ["equiv", "perm"]], ["add", "theorem", "inv_apply_self", ["equiv", "perm"]], ["add", "theorem", "inv_def", ["equiv", "perm"]], ["add", "theorem", "mul_apply", ["equiv", "perm"]], ["add", "theorem", "mul_def", ["equiv", "perm"]], ["del", "theorem", "mul_val", ["equiv", "perm"]], ["add", "theorem", "one_apply", ["equiv", "perm"]], ["add", "theorem", "one_def", ["equiv", "perm"]], ["del", "theorem", "one_val", ["equiv", "perm"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}]}, {"timestamp": 1532947305, "sha": "e67f2adf", "message": "chore(analysis/topology/uniform_space): remove redundant prod_uniformity (redundant to uniformity_prod)", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["del", "theorem", "prod_uniformity", []], ["mod", "theorem", "uniformity_prod", []]]}]}, {"timestamp": 1532946310, "sha": "8d4f582c", "message": "chore(data/list): add prod.erase; cleanup", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "eq_or_ne_mem_of_mem", ["list"]], ["add", "theorem", "prod_erase", ["list"]], ["mod", "theorem", "take'_eq_take", ["list"]]]}]}, {"timestamp": 1532735465, "sha": "460df5ef", "message": "feat(tactic/norm_num): add support for primality proving", "changes": [{"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["add", "theorem", "exists_coprime'", ["nat"]], ["mod", "theorem", "exists_eq_prod_and_dvd_and_dvd", ["nat"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["mod", "theorem", "min_fac_eq", ["nat"]], ["mod", "theorem", "min_fac_le_of_dvd", ["nat"]], ["add", "theorem", "not_prime_mul", ["nat"]]]}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": [["add", "theorem", "is_prime_helper", ["norm_num"]], ["add", "theorem", "min_fac_bit0", ["norm_num"]], ["add", "theorem", "n_pos", ["norm_num", "min_fac_helper"]], ["add", "def", "min_fac_helper", ["norm_num"]], ["add", "theorem", "min_fac_helper_0", ["norm_num"]], ["add", "theorem", "min_fac_helper_1", ["norm_num"]], ["add", "theorem", "min_fac_helper_2", ["norm_num"]], ["add", "theorem", "min_fac_helper_3", ["norm_num"]], ["add", "theorem", "min_fac_helper_4", ["norm_num"]], ["add", "theorem", "min_fac_helper_5", ["norm_num"]], ["add", "theorem", "min_fac_ne_bit0", ["norm_num"]], ["add", "theorem", "not_prime_helper", ["norm_num"]]]}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}]}, {"timestamp": 1532697675, "sha": "4d8ce7e0", "message": "feat(data/fin): linear order and eta (#223)", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": []}]}, {"timestamp": 1532545548, "sha": "85bc75aa", "message": "fix(data/list/basic): typo in pariwise_iff", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}]}, {"timestamp": 1532450008, "sha": "f9cf9d39", "message": "feat(category/traversable): basic classes for traversable collections", "changes": [{"oldPath": null, "newPath": "category/traversable/basic.lean", "changes": [["add", "theorem", "preserves_map", ["applicative_transformation"]], ["add", "theorem", "preserves_pure", ["applicative_transformation"]], ["add", "theorem", "preserves_seq", ["applicative_transformation"]], ["add", "structure", "applicative_transformation", []], ["add", "def", "sequence", []]]}, {"oldPath": null, "newPath": "category/traversable/default.lean", "changes": []}, {"oldPath": null, "newPath": "category/traversable/instances.lean", "changes": [["add", "theorem", "comp_traverse", ["id"]], ["add", "theorem", "id_traverse", ["id"]], ["add", "theorem", "map_traverse", ["id"]], ["add", "theorem", "naturality", ["id"]], ["add", "theorem", "traverse_map", ["id"]], ["add", "theorem", "comp_traverse", ["list"]], ["add", "theorem", "id_traverse", ["list"]], ["add", "theorem", "map_traverse", ["list"]], ["add", "theorem", "naturality", ["list"]], ["add", "theorem", "traverse_map", ["list"]], ["add", "theorem", "comp_traverse", ["option"]], ["add", "theorem", "id_traverse", ["option"]], ["add", "theorem", "map_traverse", ["option"]], ["add", "theorem", "naturality", ["option"]], ["add", "theorem", "traverse_map", ["option"]]]}, {"oldPath": null, "newPath": "category/traversable/lemmas.lean", "changes": [["add", "theorem", "comp_sequence", ["traversable"]], ["add", "theorem", "id_sequence", ["traversable"]], ["add", "theorem", "naturality'", ["traversable"]], ["add", "def", "pure_transformation", ["traversable"]], ["add", "theorem", "purity", ["traversable"]], ["add", "theorem", "traverse_eq_map_ident", ["traversable"]]]}]}, {"timestamp": 1532409331, "sha": "8270475f", "message": "doc(wip): finite map (#215) [ci-skip]", "changes": [{"oldPath": "docs/wip.md", "newPath": "docs/wip.md", "changes": []}]}, {"timestamp": 1532376380, "sha": "6abb0d4c", "message": "feat(algebra/pi_instances): more pi instances", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": []}]}, {"timestamp": 1532271829, "sha": "e74ff76c", "message": "refactor(data/nat/gcd): simplify proof of pow_dvd_pow_iff", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "pow_dvd_pow_of_dvd", ["nat"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["del", "theorem", "dvd_of_pow_dvd_pow", ["nat"]], ["add", "theorem", "pow_dvd_pow_iff", ["nat"]]]}]}, {"timestamp": 1532270231, "sha": "ffb72292", "message": "feat(data/nat/gcd): dvd_of_pow_dvd_pow", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "mul_pow", ["nat"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["add", "theorem", "dvd_of_pow_dvd_pow", ["nat"]]]}]}, {"timestamp": 1532182990, "sha": "e429aace", "message": "fix(computability/turing_machine): missed a spot", "changes": [{"oldPath": "computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": []}]}, {"timestamp": 1532181733, "sha": "8bf72b2f", "message": "chore(tactic/interactive): change swap so it does what it says\nit is supposed to move the nth goal to the front, not rotate all the goals", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1532181482, "sha": "682025f0", "message": "fix(*): fix build, use rw consistently", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "computability/primrec.lean", "newPath": "computability/primrec.lean", "changes": []}, {"oldPath": "data/int/order.lean", "newPath": "data/int/order.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}]}, {"timestamp": 1532175036, "sha": "e7321bbd", "message": "fix(data/option): fix universe levels in option.map_some etc.", "changes": [{"oldPath": "computability/partrec.lean", "newPath": "computability/partrec.lean", "changes": []}, {"oldPath": "computability/partrec_code.lean", "newPath": "computability/partrec_code.lean", "changes": []}, {"oldPath": "computability/primrec.lean", "newPath": "computability/primrec.lean", "changes": []}, {"oldPath": "computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": []}, {"oldPath": "data/equiv/denumerable.lean", "newPath": "data/equiv/denumerable.lean", "changes": []}, {"oldPath": "data/equiv/encodable.lean", "newPath": "data/equiv/encodable.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["mod", "theorem", "bind_eq_some", ["option"]], ["mod", "theorem", "map_eq_some", ["option"]], ["mod", "theorem", "map_none", ["option"]], ["mod", "theorem", "map_some", ["option"]], ["mod", "theorem", "none_bind", ["option"]], ["mod", "inductive", "rel", ["option"]], ["mod", "theorem", "seq_some", ["option"]], ["mod", "theorem", "some_bind", ["option"]]]}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}]}, {"timestamp": 1532138993, "sha": "fb952fe4", "message": "refactor(analysis/ennreal): split and move to data.real", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["del", "theorem", "add_infty", ["ennreal"]], ["del", "theorem", "add_left_inj", ["ennreal"]], ["del", "theorem", "add_right_inj", ["ennreal"]], ["del", "theorem", "add_sub_cancel_of_le", ["ennreal"]], ["del", "theorem", "add_sub_self'", ["ennreal"]], ["del", "theorem", "add_sub_self", ["ennreal"]], ["del", "theorem", "forall_ennreal", ["ennreal"]], ["del", "theorem", "infty_add", ["ennreal"]], ["del", "theorem", "infty_le_iff", ["ennreal"]], ["del", "theorem", "infty_mem_upper_bounds", ["ennreal"]], ["del", "theorem", "infty_mul", ["ennreal"]], ["del", "theorem", "infty_mul_of_real", ["ennreal"]], ["del", "theorem", "infty_ne_of_real", ["ennreal"]], ["del", "theorem", "infty_ne_zero", ["ennreal"]], ["del", "theorem", "infty_sub_of_real", ["ennreal"]], ["del", "theorem", "inv_infty", ["ennreal"]], ["del", "theorem", "inv_inv", ["ennreal"]], ["del", "theorem", "inv_of_real", ["ennreal"]], ["del", "theorem", "inv_zero", ["ennreal"]], ["del", "theorem", "is_lub_of_real", ["ennreal"]], ["del", "theorem", "le_add_left", ["ennreal"]], ["del", "theorem", "le_add_right", ["ennreal"]], ["del", "theorem", "le_def", ["ennreal"]], ["del", "theorem", "le_infty", ["ennreal"]], ["del", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["del", "theorem", "le_of_real_iff", ["ennreal"]], ["del", "theorem", "le_zero_iff_eq", ["ennreal"]], ["del", "theorem", "lt_add_right", ["ennreal"]], ["del", "theorem", "lt_iff_exists_of_real", ["ennreal"]], ["del", "theorem", "mul_infty", ["ennreal"]], ["del", "theorem", "mul_le_mul", ["ennreal"]], ["del", "theorem", "not_infty_lt", ["ennreal"]], ["del", "theorem", "not_lt_zero", ["ennreal"]], ["del", "def", "of_ennreal", ["ennreal"]], ["del", "theorem", "of_ennreal_of_real", ["ennreal"]], ["del", "theorem", "of_nonneg_real_eq_of_real", ["ennreal"]], ["del", "def", "of_real", ["ennreal"]], ["del", "theorem", "of_real_add", ["ennreal"]], ["del", "theorem", "of_real_add_le", ["ennreal"]], ["del", "theorem", "of_real_eq_of_real_of", ["ennreal"]], ["del", "theorem", "of_real_eq_one_iff", ["ennreal"]], ["del", "theorem", "of_real_eq_zero_iff", ["ennreal"]], ["del", "theorem", "of_real_le_of_real", ["ennreal"]], ["del", "theorem", "of_real_le_of_real_iff", ["ennreal"]], ["del", "theorem", "of_real_lt_infty", ["ennreal"]], ["del", "theorem", "of_real_lt_of_real_iff", ["ennreal"]], ["del", "theorem", "of_real_lt_of_real_iff_cases", ["ennreal"]], ["del", "theorem", "of_real_mem_upper_bounds", ["ennreal"]], ["del", "theorem", "of_real_mul_infty", ["ennreal"]], ["del", "theorem", "of_real_mul_of_real", ["ennreal"]], ["del", "theorem", "of_real_ne_infty", ["ennreal"]], ["del", "theorem", "of_real_ne_of_real_of", ["ennreal"]], ["del", "theorem", "of_real_of_ennreal", ["ennreal"]], ["del", "theorem", "of_real_of_nonpos", ["ennreal"]], ["del", "theorem", "of_real_of_not_nonneg", ["ennreal"]], ["del", "theorem", "of_real_one", ["ennreal"]], ["del", "theorem", "of_real_sub_of_real", ["ennreal"]], ["del", "theorem", "of_real_zero", ["ennreal"]], ["del", "theorem", "one_eq_of_real_iff", ["ennreal"]], ["del", "theorem", "one_le_of_real_iff", ["ennreal"]], ["del", "theorem", "sub_add_cancel_of_le", ["ennreal"]], ["del", "theorem", "sub_add_self_eq_max", ["ennreal"]], ["del", "theorem", "sub_eq_zero_of_le", ["ennreal"]], ["del", "theorem", "sub_infty", ["ennreal"]], ["del", "theorem", "sub_le_self", ["ennreal"]], ["del", "theorem", "sub_le_sub", ["ennreal"]], ["del", "theorem", "sub_sub_cancel", ["ennreal"]], ["del", "theorem", "sub_zero", ["ennreal"]], ["del", "theorem", "sum_of_real", ["ennreal"]], ["del", "theorem", "zero_eq_of_real_iff", ["ennreal"]], ["del", "theorem", "zero_le_of_ennreal", ["ennreal"]], ["del", "theorem", "zero_lt_of_real_iff", ["ennreal"]], ["del", "theorem", "zero_ne_infty", ["ennreal"]], ["del", "theorem", "zero_sub", ["ennreal"]], ["del", "inductive", "ennreal", []]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["add", "theorem", "Sup_is_lub", ["real"]]]}, {"oldPath": null, "newPath": "data/real/ennreal.lean", "changes": [["add", "theorem", "add_infty", ["ennreal"]], ["add", "theorem", "add_left_inj", ["ennreal"]], ["add", "theorem", "add_right_inj", ["ennreal"]], ["add", "theorem", "add_sub_cancel_of_le", ["ennreal"]], ["add", "theorem", "add_sub_self'", ["ennreal"]], ["add", "theorem", "add_sub_self", ["ennreal"]], ["add", "theorem", "forall_ennreal", ["ennreal"]], ["add", "theorem", "infty_add", ["ennreal"]], ["add", "theorem", "infty_le_iff", ["ennreal"]], ["add", "theorem", "infty_mem_upper_bounds", ["ennreal"]], ["add", "theorem", "infty_mul", ["ennreal"]], ["add", "theorem", "infty_mul_of_real", ["ennreal"]], ["add", "theorem", "infty_ne_of_real", ["ennreal"]], ["add", "theorem", "infty_ne_zero", ["ennreal"]], ["add", "theorem", "infty_sub_of_real", ["ennreal"]], ["add", "theorem", "inv_infty", ["ennreal"]], ["add", "theorem", "inv_inv", ["ennreal"]], ["add", "theorem", "inv_of_real", ["ennreal"]], ["add", "theorem", "inv_zero", ["ennreal"]], ["add", "theorem", "is_lub_of_real", ["ennreal"]], ["add", "theorem", "le_add_left", ["ennreal"]], ["add", "theorem", "le_add_right", ["ennreal"]], ["add", "theorem", "le_def", ["ennreal"]], ["add", "theorem", "le_infty", ["ennreal"]], ["add", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["add", "theorem", "le_of_real_iff", ["ennreal"]], ["add", "theorem", "le_zero_iff_eq", ["ennreal"]], ["add", "theorem", "lt_add_right", ["ennreal"]], ["add", "theorem", "lt_iff_exists_of_real", ["ennreal"]], ["add", "theorem", "mul_infty", ["ennreal"]], ["add", "theorem", "mul_le_mul", ["ennreal"]], ["add", "theorem", "not_infty_lt", ["ennreal"]], ["add", "theorem", "not_lt_zero", ["ennreal"]], ["add", "def", "of_ennreal", ["ennreal"]], ["add", "theorem", "of_ennreal_of_real", ["ennreal"]], ["add", "theorem", "of_nonneg_real_eq_of_real", ["ennreal"]], ["add", "def", "of_real", ["ennreal"]], ["add", "theorem", "of_real_add", ["ennreal"]], ["add", "theorem", "of_real_add_le", ["ennreal"]], ["add", "theorem", "of_real_eq_of_real_of", ["ennreal"]], ["add", "theorem", "of_real_eq_one_iff", ["ennreal"]], ["add", "theorem", "of_real_eq_zero_iff", ["ennreal"]], ["add", "theorem", "of_real_le_of_real", ["ennreal"]], ["add", "theorem", "of_real_le_of_real_iff", ["ennreal"]], ["add", "theorem", "of_real_lt_infty", ["ennreal"]], ["add", "theorem", "of_real_lt_of_real_iff", ["ennreal"]], ["add", "theorem", "of_real_lt_of_real_iff_cases", ["ennreal"]], ["add", "theorem", "of_real_mem_upper_bounds", ["ennreal"]], ["add", "theorem", "of_real_mul_infty", ["ennreal"]], ["add", "theorem", "of_real_mul_of_real", ["ennreal"]], ["add", "theorem", "of_real_ne_infty", ["ennreal"]], ["add", "theorem", "of_real_ne_of_real_of", ["ennreal"]], ["add", "theorem", "of_real_of_ennreal", ["ennreal"]], ["add", "theorem", "of_real_of_nonpos", ["ennreal"]], ["add", "theorem", "of_real_of_not_nonneg", ["ennreal"]], ["add", "theorem", "of_real_one", ["ennreal"]], ["add", "theorem", "of_real_sub_of_real", ["ennreal"]], ["add", "theorem", "of_real_zero", ["ennreal"]], ["add", "theorem", "one_eq_of_real_iff", ["ennreal"]], ["add", "theorem", "one_le_of_real_iff", ["ennreal"]], ["add", "theorem", "sub_add_cancel_of_le", ["ennreal"]], ["add", "theorem", "sub_add_self_eq_max", ["ennreal"]], ["add", "theorem", "sub_eq_zero_of_le", ["ennreal"]], ["add", "theorem", "sub_infty", ["ennreal"]], ["add", "theorem", "sub_le_self", ["ennreal"]], ["add", "theorem", "sub_le_sub", ["ennreal"]], ["add", "theorem", "sub_sub_cancel", ["ennreal"]], ["add", "theorem", "sub_zero", ["ennreal"]], ["add", "theorem", "sum_of_real", ["ennreal"]], ["add", "theorem", "zero_eq_of_real_iff", ["ennreal"]], ["add", "theorem", "zero_le_of_ennreal", ["ennreal"]], ["add", "theorem", "zero_lt_of_real_iff", ["ennreal"]], ["add", "theorem", "zero_ne_infty", ["ennreal"]], ["add", "theorem", "zero_sub", ["ennreal"]], ["add", "inductive", "ennreal", []]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "def", "kern_image", ["set"]]]}, {"oldPath": "order/bounds.lean", "newPath": "order/bounds.lean", "changes": []}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": [["del", "def", "kern_image", ["set"]]]}]}, {"timestamp": 1532049441, "sha": "23a5591f", "message": "feat(tactic/h_generalize): remove `cast` expressions from goal (#198)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1532014484, "sha": "29639b31", "message": "feat(analysis/measure_theory): optimize proofs; trim, is_complete", "changes": [{"oldPath": "algebra/ordered_field.lean", "newPath": "algebra/ordered_field.lean", "changes": [["add", "theorem", "one_half_lt_one", []], ["add", "theorem", "one_half_pos", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["add", "theorem", "add_left_inj", ["ennreal"]], ["add", "theorem", "add_right_inj", ["ennreal"]], ["add", "theorem", "add_sub_self'", ["ennreal"]], ["add", "theorem", "add_supr", ["ennreal"]], ["add", "theorem", "exists_pos_sum_of_encodable", ["ennreal"]], ["add", "theorem", "of_real_add_le", ["ennreal"]], ["add", "theorem", "sub_infi", ["ennreal"]], ["add", "theorem", "sub_le_self", ["ennreal"]], ["add", "theorem", "sub_sub_cancel", ["ennreal"]], ["mod", "theorem", "sub_supr", ["ennreal"]], ["add", "theorem", "supr_add_supr", ["ennreal"]]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": [["add", "theorem", "is_sum_geometric_two", []], ["add", "def", "pos_sum_of_encodable", []]]}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": [["add", "def", "borel", ["measure_theory"]], ["del", "theorem", "borel_eq_generate_from_Iio_rat", ["measure_theory"]], ["del", "theorem", "borel_eq_generate_from_Ioo_rat", ["measure_theory"]], ["add", "theorem", "borel_prod_le", ["measure_theory"]], ["del", "theorem", "is_topological_basis_Ioo_rat", ["measure_theory"]], ["add", "theorem", "borel_eq_generate_from_Iio_rat", ["real"]], ["add", "theorem", "borel_eq_generate_from_Ioo_rat", ["real"]]]}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": [["add", "theorem", "is_lebesgue_measurable_Iio", ["measure_theory"]], ["del", "theorem", "le_lebesgue_length", ["measure_theory"]], ["mod", "def", "lebesgue", ["measure_theory"]], ["add", "theorem", "lebesgue_Icc", ["measure_theory"]], ["mod", "def", "lebesgue_length", ["measure_theory"]], ["add", "theorem", "lebesgue_length_Icc", ["measure_theory"]], ["del", "theorem", "lebesgue_length_Ico'", ["measure_theory"]], ["mod", "theorem", "lebesgue_length_Ico", ["measure_theory"]], ["add", "theorem", "lebesgue_length_Ioo", ["measure_theory"]], ["add", "theorem", "lebesgue_length_eq_infi_Icc", ["measure_theory"]], ["add", "theorem", "lebesgue_length_eq_infi_Ioo", ["measure_theory"]], ["add", "theorem", "lebesgue_length_mono", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_Icc", ["measure_theory"]], ["mod", "theorem", "lebesgue_outer_Ico", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_Ioo", ["measure_theory"]], ["del", "theorem", "lebesgue_outer_is_measurable_Iio", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_le_length", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_singleton", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_trim", ["measure_theory"]], ["mod", "theorem", "lebesgue_singleton", ["measure_theory"]], ["add", "theorem", "lebesgue_to_outer_measure", ["measure_theory"]], ["add", "theorem", "lebesgue_val", ["measure_theory"]], ["del", "theorem", "tendsto_of_nat_at_top_at_top", ["measure_theory"]]]}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "Union_decode2", ["encodable"]], ["add", "theorem", "Union_decode2_cases", ["encodable"]], ["add", "theorem", "Inter", ["is_measurable"]], ["add", "theorem", "Union", ["is_measurable"]], ["add", "theorem", "bInter", ["is_measurable"]], ["add", "theorem", "bUnion", ["is_measurable"]], ["add", "theorem", "compl", ["is_measurable"]], ["add", "theorem", "compl_iff", ["is_measurable"]], ["add", "theorem", "diff", ["is_measurable"]], ["add", "theorem", "disjointed", ["is_measurable"]], ["add", "theorem", "empty", ["is_measurable"]], ["add", "theorem", "inter", ["is_measurable"]], ["add", "theorem", "sInter", ["is_measurable"]], ["add", "theorem", "sUnion", ["is_measurable"]], ["add", "theorem", "sub", ["is_measurable"]], ["add", "theorem", "union", ["is_measurable"]], ["mod", "def", "is_measurable", []], ["del", "theorem", "is_measurable_Inter", []], ["del", "theorem", "is_measurable_Union", []], ["del", "theorem", "is_measurable_Union_nat", []], ["del", "theorem", "is_measurable_bInter", []], ["del", "theorem", "is_measurable_bUnion", []], ["del", "theorem", "is_measurable_compl", []], ["del", "theorem", "is_measurable_disjointed", []], ["del", "theorem", "is_measurable_empty", []], ["del", "theorem", "is_measurable_inter", []], ["del", "theorem", "is_measurable_sInter", []], ["del", "theorem", "is_measurable_sUnion", []], ["del", "theorem", "is_measurable_sdiff", []], ["del", "theorem", "is_measurable_sub", []], ["del", "theorem", "is_measurable_union", []], ["add", "theorem", "comp", ["measurable"]], ["add", "theorem", "if", ["measurable"]], ["add", "theorem", "preimage", ["measurable"]], ["add", "theorem", "prod", ["measurable"]], ["del", "theorem", "measurable_comp", []], ["del", "theorem", "measurable_if", []], ["del", "theorem", "measurable_prod", []], ["add", "theorem", "Union_decode2_disjoint_on", ["measurable_space"]], ["del", "theorem", "dynkin_system_eq", ["measurable_space", "dynkin_system"]], ["add", "theorem", "ext", ["measurable_space", "dynkin_system"]], ["mod", "theorem", "generate_le", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_Union", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_compl_iff", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_diff", ["measurable_space", "dynkin_system"]], ["del", "theorem", "has_sdiff", ["measurable_space", "dynkin_system"]], ["mod", "theorem", "has_union", ["measurable_space", "dynkin_system"]], ["mod", "def", "restrict_on", ["measurable_space", "dynkin_system"]], ["add", "theorem", "ext", ["measurable_space"]], ["add", "theorem", "is_measurable_Inf", ["measurable_space"]], ["add", "theorem", "is_measurable_inf", ["measurable_space"]], ["add", "theorem", "is_measurable_infi", ["measurable_space"]], ["del", "theorem", "measurable_space_eq", []]]}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": [["add", "def", "completion", []], ["add", "theorem", "diff_null", ["is_measurable"]], ["add", "theorem", "is_null_measurable", ["is_measurable"]], ["add", "theorem", "Union_nat", ["is_null_measurable"]], ["add", "theorem", "compl", ["is_null_measurable"]], ["add", "theorem", "diff_null", ["is_null_measurable"]], ["add", "theorem", "union_null", ["is_null_measurable"]], ["add", "def", "is_null_measurable", []], ["add", "theorem", "is_null_measurable_iff", []], ["add", "theorem", "is_null_measurable_measure_eq", []], ["add", "theorem", "is_null_measurable_of_complete", []], ["mod", "theorem", "le_to_outer_measure_caratheodory", ["measure_theory"]], ["add", "def", "measure'", ["measure_theory"]], ["add", "theorem", "measure'_Union", ["measure_theory"]], ["add", "theorem", "measure'_Union_le_tsum_nat'", ["measure_theory"]], ["add", "theorem", "measure'_Union_le_tsum_nat", ["measure_theory"]], ["add", "theorem", "measure'_Union_nat", ["measure_theory"]], ["add", "theorem", "measure'_empty", ["measure_theory"]], ["add", "theorem", "measure'_eq", ["measure_theory"]], ["add", "theorem", "measure'_mono", ["measure_theory"]], ["add", "theorem", "measure'_union", ["measure_theory"]], ["add", "theorem", "add_apply", ["measure_theory", "measure"]], ["add", "theorem", "add_to_outer_measure", ["measure_theory", "measure"]], ["add", "def", "count", ["measure_theory", "measure"]], ["add", "def", "dirac", ["measure_theory", "measure"]], ["add", "theorem", "dirac_apply", ["measure_theory", "measure"]], ["add", "theorem", "ext", ["measure_theory", "measure"]], ["add", "def", "is_complete", ["measure_theory", "measure"]], ["add", "theorem", "le_iff'", ["measure_theory", "measure"]], ["add", "theorem", "le_iff", ["measure_theory", "measure"]], ["add", "def", "map", ["measure_theory", "measure"]], ["add", "theorem", "map_apply", ["measure_theory", "measure"]], ["add", "theorem", "map_id", ["measure_theory", "measure"]], ["add", "theorem", "map_map", ["measure_theory", "measure"]], ["add", "def", "of_measurable", ["measure_theory", "measure"]], ["add", "def", "sum", ["measure_theory", "measure"]], ["add", "theorem", "to_outer_measure_le", ["measure_theory", "measure"]], ["add", "theorem", "zero_apply", ["measure_theory", "measure"]], ["add", "theorem", "zero_to_outer_measure", ["measure_theory", "measure"]], ["add", "structure", "measure", ["measure_theory"]], ["add", "theorem", "measure_Union", ["measure_theory"]], ["add", "theorem", "measure_Union_le", ["measure_theory"]], ["del", "theorem", "measure_Union_le_tsum_nat", ["measure_theory"]], ["del", "theorem", "measure_Union_nat", ["measure_theory"]], ["add", "theorem", "measure_Union_null", ["measure_theory"]], ["mod", "theorem", "measure_bUnion", ["measure_theory"]], ["add", "theorem", "measure_diff", ["measure_theory"]], ["mod", "theorem", "measure_empty", ["measure_theory"]], ["add", "theorem", "measure_eq_infi", ["measure_theory"]], ["add", "theorem", "measure_eq_measure'", ["measure_theory"]], ["add", "theorem", "measure_eq_outer_measure'", ["measure_theory"]], ["add", "theorem", "measure_eq_trim", ["measure_theory"]], ["mod", "theorem", "measure_mono", ["measure_theory"]], ["add", "theorem", "measure_mono_null", ["measure_theory"]], ["mod", "theorem", "measure_sUnion", ["measure_theory"]], ["del", "theorem", "measure_sdiff", ["measure_theory"]], ["del", "def", "count", ["measure_theory", "measure_space"]], ["del", "def", "dirac", ["measure_theory", "measure_space"]], ["del", "def", "map", ["measure_theory", "measure_space"]], ["del", "theorem", "map_comp", ["measure_theory", "measure_space"]], ["del", "theorem", "map_id", ["measure_theory", "measure_space"]], ["del", "theorem", "map_measure", ["measure_theory", "measure_space"]], ["del", "def", "sum", ["measure_theory", "measure_space"]], ["del", "structure", "measure_space", ["measure_theory"]], ["del", "theorem", "measure_space_eq", ["measure_theory"]], ["del", "theorem", "measure_space_eq_of", ["measure_theory"]], ["add", "theorem", "measure_union_le", ["measure_theory"]], ["add", "theorem", "measure_union_null", ["measure_theory"]], ["add", "def", "outer_measure'", ["measure_theory"]], ["add", "theorem", "outer_measure'_eq", ["measure_theory"]], ["add", "theorem", "outer_measure'_eq_measure'", ["measure_theory"]], ["add", "theorem", "le_trim_iff", ["measure_theory", "outer_measure"]], ["mod", "def", "to_measure", ["measure_theory", "outer_measure"]], ["add", "def", "trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_add", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_congr", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_eq", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_eq_infi'", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_eq_infi", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_ge", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_le_trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_sum_ge", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_trim", ["measure_theory", "outer_measure"]], ["add", "theorem", "trim_zero", ["measure_theory", "outer_measure"]], ["add", "theorem", "to_measure_apply", ["measure_theory"]], ["add", "theorem", "to_measure_to_outer_measure", ["measure_theory"]], ["add", "theorem", "to_outer_measure_apply", ["measure_theory"]], ["add", "theorem", "to_outer_measure_eq_outer_measure'", ["measure_theory"]], ["mod", "theorem", "to_outer_measure_to_measure", ["measure_theory"]], ["add", "theorem", "null_is_null_measurable", []], ["add", "def", "null_measurable", []]]}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "Sup_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "Union_aux", ["measure_theory", "outer_measure"]], ["add", "theorem", "Union_null", ["measure_theory", "outer_measure"]], ["add", "theorem", "add_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "add_smul", ["measure_theory", "outer_measure"]], ["del", "theorem", "caratheodory_is_measurable_eq", ["measure_theory", "outer_measure"]], ["add", "def", "dirac", ["measure_theory", "outer_measure"]], ["add", "theorem", "dirac_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "dirac_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "empty'", ["measure_theory", "outer_measure"]], ["add", "theorem", "ext", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "is_caratheodory_le", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_add_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_of_function", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_smul_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "le_sum_caratheodory", ["measure_theory", "outer_measure"]], ["add", "def", "map", ["measure_theory", "outer_measure"]], ["add", "theorem", "map_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "map_id", ["measure_theory", "outer_measure"]], ["add", "theorem", "map_map", ["measure_theory", "outer_measure"]], ["add", "theorem", "mono'", ["measure_theory", "outer_measure"]], ["add", "theorem", "mul_smul", ["measure_theory", "outer_measure"]], ["add", "theorem", "one_smul", ["measure_theory", "outer_measure"]], ["del", "theorem", "outer_measure_eq", ["measure_theory", "outer_measure"]], ["add", "def", "smul", ["measure_theory", "outer_measure"]], ["add", "theorem", "smul_add", ["measure_theory", "outer_measure"]], ["add", "theorem", "smul_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "smul_dirac_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "smul_zero", ["measure_theory", "outer_measure"]], ["del", "theorem", "subadditive", ["measure_theory", "outer_measure"]], ["add", "def", "sum", ["measure_theory", "outer_measure"]], ["add", "theorem", "sum_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "sup_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "supr_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "top_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "union_null", ["measure_theory", "outer_measure"]], ["add", "theorem", "zero_apply", ["measure_theory", "outer_measure"]], ["add", "theorem", "zero_caratheodory", ["measure_theory", "outer_measure"]], ["add", "theorem", "zero_smul", ["measure_theory", "outer_measure"]]]}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["add", "theorem", "compact_Icc", []], ["del", "theorem", "compact_ivl", []], ["mod", "theorem", "totally_bounded_Icc", ["rat"]], ["add", "theorem", "is_topological_basis_Ioo_rat", ["real"]], ["mod", "theorem", "totally_bounded_Icc", ["real"]], ["add", "theorem", "tendsto_of_nat_at_top_at_top", []]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": [["mod", "theorem", "has_sum_mul_left", []], ["mod", "theorem", "has_sum_mul_right", []], ["mod", "theorem", "is_sum_mul_left", []], ["mod", "theorem", "is_sum_mul_right", []], ["add", "theorem", "tsum_equiv", []], ["add", "theorem", "tsum_fintype", []], ["mod", "theorem", "tsum_mul_left", []], ["mod", "theorem", "tsum_mul_right", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_open_sUnion_countable", ["topological_space"]]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["mod", "theorem", "closure_le_eq", []], ["add", "theorem", "is_closed_Icc", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "mem_diff", ["set"]], ["del", "theorem", "mem_diff_eq", ["set"]], ["del", "theorem", "mem_diff_iff", ["set"]], ["add", "theorem", "mem_diff_of_mem", ["set"]], ["add", "theorem", "union_diff_distrib", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": [["add", "theorem", "pairwise_disjoint_on_bool", []], ["add", "theorem", "pairwise_on_bool", []], ["add", "theorem", "Inter_lt_succ", ["set"]], ["add", "theorem", "Union_disjointed", ["set"]], ["add", "theorem", "Union_disjointed_of_mono", ["set"]], ["add", "theorem", "Union_lt_succ", ["set"]], ["del", "theorem", "disjointed_Union", ["set"]]]}, {"oldPath": "data/set/intervals.lean", "newPath": "data/set/intervals.lean", "changes": [["add", "def", "Icc", ["set"]], ["add", "theorem", "Icc_diff_Ico_eq_singleton", ["set"]], ["add", "theorem", "Icc_eq_empty", ["set"]], ["add", "theorem", "Icc_eq_empty_iff", ["set"]], ["add", "theorem", "Icc_self", ["set"]], ["add", "theorem", "Icc_subset_Icc", ["set"]], ["add", "theorem", "Icc_subset_Icc_left", ["set"]], ["add", "theorem", "Icc_subset_Icc_right", ["set"]], ["add", "theorem", "Icc_subset_Ico_right", ["set"]], ["add", "theorem", "Ico_diff_Iio", ["set"]], ["add", "theorem", "Ico_diff_Ioo_eq_singleton", ["set"]], ["mod", "theorem", "Ico_eq_Ico_iff", ["set"]], ["mod", "theorem", "Ico_eq_empty", ["set"]], ["mod", "theorem", "Ico_eq_empty_iff", ["set"]], ["add", "theorem", "Ico_inter_Iio", ["set"]], ["del", "theorem", "Ico_inter_Iio_eq", ["set"]], ["del", "theorem", "Ico_sdiff_Iio_eq", ["set"]], ["del", "theorem", "Ico_sdiff_Ioo_eq_singleton", ["set"]], ["mod", "theorem", "Ico_self", ["set"]], ["add", "theorem", "Ico_subset_Icc_self", ["set"]], ["add", "theorem", "Ico_subset_Ico", ["set"]], ["mod", "theorem", "Ico_subset_Ico_iff", ["set"]], ["mod", "theorem", "Ico_subset_Ico_left", ["set"]], ["mod", "theorem", "Ico_subset_Ico_right", ["set"]], ["mod", "theorem", "Ico_subset_Iio_self", ["set"]], ["add", "theorem", "Iio_ne_empty", ["set"]], ["add", "theorem", "Ioo_eq_empty", ["set"]], ["add", "theorem", "Ioo_eq_empty_iff", ["set"]], ["del", "theorem", "Ioo_eq_empty_of_ge", ["set"]], ["mod", "theorem", "Ioo_self", ["set"]], ["add", "theorem", "Ioo_subset_Icc_self", ["set"]], ["mod", "theorem", "Ioo_subset_Ico_self", ["set"]], ["add", "theorem", "Ioo_subset_Ioo", ["set"]], ["add", "theorem", "Ioo_subset_Ioo_iff", ["set"]], ["add", "theorem", "Ioo_subset_Ioo_left", ["set"]], ["add", "theorem", "Ioo_subset_Ioo_right", ["set"]], ["add", "theorem", "mem_Icc", ["set"]], ["add", "theorem", "mem_Ico", ["set"]], ["add", "theorem", "mem_Iio", ["set"]], ["add", "theorem", "mem_Ioo", ["set"]]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["mod", "theorem", "infi_and", ["lattice"]], ["mod", "theorem", "infi_prod", ["lattice"]], ["mod", "theorem", "infi_sigma", ["lattice"]], ["mod", "theorem", "infi_subtype", ["lattice"]], ["mod", "theorem", "supr_and", ["lattice"]], ["mod", "theorem", "supr_prod", ["lattice"]], ["mod", "theorem", "supr_sigma", ["lattice"]], ["mod", "theorem", "supr_subtype", ["lattice"]]]}]}, {"timestamp": 1531995059, "sha": "bd90a935", "message": "fix(group_theory/group_action): move is_group_action out of namespace", "changes": [{"oldPath": "group_theory/group_action.lean", "newPath": "group_theory/group_action.lean", "changes": []}]}, {"timestamp": 1531992564, "sha": "2b9780ad", "message": "feat(data/finset): disjoint_val (#206)", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "disjoint_val", ["finset"]]]}]}, {"timestamp": 1531992564, "sha": "1e0c38b0", "message": "feat(data/multiset): sup and inf for multisets", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "inf_val", ["finset"]], ["add", "theorem", "sup_val", ["finset"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "def", "inf", ["multiset"]], ["add", "theorem", "inf_add", ["multiset"]], ["add", "theorem", "inf_cons", ["multiset"]], ["add", "theorem", "inf_erase_dup", ["multiset"]], ["add", "theorem", "inf_le", ["multiset"]], ["add", "theorem", "inf_mono", ["multiset"]], ["add", "theorem", "inf_ndinsert", ["multiset"]], ["add", "theorem", "inf_ndunion", ["multiset"]], ["add", "theorem", "inf_singleton", ["multiset"]], ["add", "theorem", "inf_union", ["multiset"]], ["add", "theorem", "inf_zero", ["multiset"]], ["add", "theorem", "le_inf", ["multiset"]], ["add", "theorem", "le_sup", ["multiset"]], ["add", "theorem", "prod_singleton", ["multiset"]], ["add", "def", "sup", ["multiset"]], ["add", "theorem", "sup_add", ["multiset"]], ["add", "theorem", "sup_cons", ["multiset"]], ["add", "theorem", "sup_erase_dup", ["multiset"]], ["add", "theorem", "sup_le", ["multiset"]], ["add", "theorem", "sup_mono", ["multiset"]], ["add", "theorem", "sup_ndinsert", ["multiset"]], ["add", "theorem", "sup_ndunion", ["multiset"]], ["add", "theorem", "sup_singleton", ["multiset"]], ["add", "theorem", "sup_union", ["multiset"]], ["add", "theorem", "sup_zero", ["multiset"]]]}]}, {"timestamp": 1531983278, "sha": "50f18e68", "message": "feat(group_theory/group_action): group actions and orbit stabilizer (#204)", "changes": [{"oldPath": null, "newPath": "group_theory/group_action.lean", "changes": [["add", "theorem", "bijective", ["is_group_action"]], ["add", "theorem", "orbit_eq_iff", ["is_group_action"]], ["add", "def", "to_perm", ["is_group_action"]], ["add", "def", "fixed_points", ["is_monoid_action"]], ["add", "theorem", "mem_fixed_points'", ["is_monoid_action"]], ["add", "theorem", "mem_fixed_points", ["is_monoid_action"]], ["add", "theorem", "mem_orbit", ["is_monoid_action"]], ["add", "theorem", "mem_orbit_iff", ["is_monoid_action"]], ["add", "theorem", "mem_orbit_self", ["is_monoid_action"]], ["add", "theorem", "mem_stabilizer_iff", ["is_monoid_action"]], ["add", "def", "orbit", ["is_monoid_action"]], ["add", "def", "stabilizer", ["is_monoid_action"]]]}]}, {"timestamp": 1531972590, "sha": "9f793091", "message": "fix(data/multiset): fix build, cleanup mem_pi", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "mem_singleton", ["multiset"]], ["mod", "theorem", "pi_zero", ["multiset"]], ["add", "theorem", "singleton_eq_singleton", ["multiset"]]]}]}, {"timestamp": 1531970289, "sha": "37f3e323", "message": "fix(algebra/big_operators): fix build", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "card_pi", ["finset"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "card_singleton", ["finset"]], ["mod", "theorem", "insert_empty_eq_singleton", ["finset"]], ["mod", "theorem", "pi_empty", ["finset"]], ["mod", "theorem", "singleton_eq_singleton", ["finset"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "card_singleton", ["multiset"]], ["mod", "theorem", "pi_zero", ["multiset"]]]}]}, {"timestamp": 1531967809, "sha": "aedbc12e", "message": "feat(data/fintype): card lemmas (#168)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "card_pi", ["finset"]], ["add", "theorem", "prod_const", ["finset"]], ["add", "theorem", "sum_const", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_eq_one_iff", ["fintype"]], ["add", "theorem", "card_eq_zero_iff", ["fintype"]], ["add", "theorem", "card_fun", ["fintype"]], ["add", "theorem", "card_le_of_injective", ["fintype"]], ["add", "theorem", "card_le_one_iff", ["fintype"]], ["add", "theorem", "card_pi", ["fintype"]], ["add", "theorem", "card_pos_iff", ["fintype"]]]}]}, {"timestamp": 1531959914, "sha": "c2f54ad0", "message": "fix(tactic/refine_struct): fix support for source structures", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1531923050, "sha": "9a302352", "message": "chore(data/polynomial): move auxiliary definitions/theorems to appropriate places", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "add_bot", ["with_bot"]], ["add", "theorem", "bot_add", ["with_bot"]], ["add", "theorem", "bot_lt_some", ["with_bot"]], ["add", "theorem", "coe_add", ["with_bot"]], ["add", "theorem", "coe_lt_coe", ["with_bot"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "mul_sum", ["finsupp"]], ["add", "theorem", "sum_mul", ["finsupp"]]]}, {"oldPath": "data/polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["del", "theorem", "mul_sum", ["finsupp"]], ["del", "theorem", "sum_mul", ["finsupp"]], ["del", "theorem", "add_bot", ["with_bot"]], ["del", "theorem", "bot_add", ["with_bot"]], ["del", "theorem", "bot_lt_some", ["with_bot"]], ["del", "theorem", "coe_add", ["with_bot"]], ["del", "theorem", "coe_lt_coe", ["with_bot"]]]}]}, {"timestamp": 1531923050, "sha": "d9daeff0", "message": "refactor(data/polynomial): move polynomials to data; replace monomial by `C a * X^n`", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": []}, {"oldPath": "linear_algebra/univariate_polynomial.lean", "newPath": "data/polynomial.lean", "changes": [["add", "theorem", "mul_sum", ["finsupp"]], ["add", "theorem", "sum_mul", ["finsupp"]], ["mod", "def", "C", ["polynomial"]], ["mod", "theorem", "C_0", ["polynomial"]], ["del", "theorem", "C_mul_monomial", ["polynomial"]], ["mod", "def", "X", ["polynomial"]], ["mod", "theorem", "X_apply_one", ["polynomial"]], ["add", "theorem", "X_pow_apply", ["polynomial"]], ["del", "theorem", "X_pow_eq_monomial", ["polynomial"]], ["mod", "theorem", "add_apply", ["polynomial"]], ["mod", "theorem", "degree_C", ["polynomial"]], ["add", "theorem", "degree_C_le", ["polynomial"]], ["mod", "theorem", "degree_X", ["polynomial"]], ["mod", "theorem", "degree_add_div_by_monic", ["polynomial"]], ["mod", "theorem", "degree_div_by_monic_lt", ["polynomial"]], ["mod", "def", "degree_lt_wf", ["polynomial"]], ["mod", "theorem", "degree_mod_by_monic_lt", ["polynomial"]], ["mod", "theorem", "degree_monomial", ["polynomial"]], ["mod", "theorem", "degree_monomial_le", ["polynomial"]], ["add", "theorem", "degree_one_le", ["polynomial"]], ["mod", "theorem", "degree_pow_eq", ["polynomial"]], ["mod", "def", "div", ["polynomial"]], ["mod", "def", "div_mod_by_monic_aux", ["polynomial"]], ["del", "theorem", "eval_monomial", ["polynomial"]], ["del", "theorem", "eval_mul_monomial", ["polynomial"]], ["add", "theorem", "eval_one", ["polynomial"]], ["del", "theorem", "induction_on", ["polynomial"]], ["mod", "theorem", "leading_coeff_X", ["polynomial"]], ["mod", "theorem", "leading_coeff_monomial", ["polynomial"]], ["mod", "theorem", "leading_coeff_mul", ["polynomial"]], ["mod", "theorem", "leading_coeff_one", ["polynomial"]], ["mod", "theorem", "mod_by_monic_add_div", ["polynomial"]], ["mod", "theorem", "monic_mul_leading_coeff_inv", ["polynomial"]], ["del", "def", "monomial", ["polynomial"]], ["del", "theorem", "monomial_add_left", ["polynomial"]], ["del", "theorem", "monomial_add_right", ["polynomial"]], ["del", "theorem", "monomial_apply", ["polynomial"]], ["del", "theorem", "monomial_apply_self", ["polynomial"]], ["del", "theorem", "monomial_eq", ["polynomial"]], ["del", "theorem", "monomial_induction_on", ["polynomial"]], ["del", "theorem", "monomial_mul_monomial", ["polynomial"]], ["del", "theorem", "monomial_zero_right", ["polynomial"]], ["mod", "theorem", "mul_div_by_monic_eq_iff_is_root", ["polynomial"]], ["mod", "def", "nat_degree", ["polynomial"]], ["mod", "theorem", "ne_zero_of_monic", ["polynomial"]], ["mod", "theorem", "ne_zero_of_ne_zero_of_monic", ["polynomial"]], ["mod", "theorem", "root_X_sub_C", ["polynomial"]], ["add", "theorem", "single_eq_C_mul_X", ["polynomial"]], ["mod", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["mod", "theorem", "coe_add", ["with_bot"]]]}]}, {"timestamp": 1531923050, "sha": "ce990c59", "message": "feat(linear_algebra/univariate_polynomial): univariate polynomials", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "max_eq_none", ["finset"]], ["add", "theorem", "min_eq_none", ["finset"]]]}, {"oldPath": null, "newPath": "linear_algebra/univariate_polynomial.lean", "changes": [["add", "def", "C", ["polynomial"]], ["add", "theorem", "C_0", ["polynomial"]], ["add", "theorem", "C_1", ["polynomial"]], ["add", "theorem", "C_apply", ["polynomial"]], ["add", "theorem", "C_apply_zero", ["polynomial"]], ["add", "theorem", "C_mul_C", ["polynomial"]], ["add", "theorem", "C_mul_apply", ["polynomial"]], ["add", "theorem", "C_mul_monomial", ["polynomial"]], ["add", "def", "X", ["polynomial"]], ["add", "theorem", "X_apply_one", ["polynomial"]], ["add", "theorem", "X_pow_eq_monomial", ["polynomial"]], ["add", "theorem", "add_apply", ["polynomial"]], ["add", "theorem", "card_roots", ["polynomial"]], ["add", "def", "degree", ["polynomial"]], ["add", "theorem", "degree_C", ["polynomial"]], ["add", "theorem", "degree_X", ["polynomial"]], ["add", "theorem", "degree_X_sub_C", ["polynomial"]], ["add", "theorem", "degree_add_div_by_monic", ["polynomial"]], ["add", "theorem", "degree_add_eq_of_degree_lt", ["polynomial"]], ["add", "theorem", "degree_add_eq_of_leading_coeff_add_ne_zero", ["polynomial"]], ["add", "theorem", "degree_add_le", ["polynomial"]], ["add", "theorem", "degree_div_by_monic_le", ["polynomial"]], ["add", "theorem", "degree_div_by_monic_lt", ["polynomial"]], ["add", "theorem", "degree_eq_bot", ["polynomial"]], ["add", "theorem", "degree_eq_nat_degree", ["polynomial"]], ["add", "theorem", "degree_erase_le", ["polynomial"]], ["add", "theorem", "degree_erase_lt", ["polynomial"]], ["add", "def", "degree_lt_wf", ["polynomial"]], ["add", "theorem", "degree_mod_by_monic_lt", ["polynomial"]], ["add", "theorem", "degree_monomial", ["polynomial"]], ["add", "theorem", "degree_monomial_le", ["polynomial"]], ["add", "theorem", "degree_mul_eq'", ["polynomial"]], ["add", "theorem", "degree_mul_eq", ["polynomial"]], ["add", "theorem", "degree_mul_le", ["polynomial"]], ["add", "theorem", "degree_mul_leading_coeff_inv", ["polynomial"]], ["add", "theorem", "degree_neg", ["polynomial"]], ["add", "theorem", "degree_one", ["polynomial"]], ["add", "theorem", "degree_pos_of_root", ["polynomial"]], ["add", "theorem", "degree_pow_eq'", ["polynomial"]], ["add", "theorem", "degree_pow_eq", ["polynomial"]], ["add", "theorem", "degree_pow_le", ["polynomial"]], ["add", "theorem", "degree_sub_lt", ["polynomial"]], ["add", "theorem", "degree_sum_le", ["polynomial"]], ["add", "theorem", "degree_zero", ["polynomial"]], ["add", "def", "div", ["polynomial"]], ["add", "def", "div_by_monic", ["polynomial"]], ["add", "theorem", "div_by_monic_eq_div", ["polynomial"]], ["add", "theorem", "div_by_monic_eq_of_not_monic", ["polynomial"]], ["add", "theorem", "div_by_monic_eq_zero_iff", ["polynomial"]], ["add", "theorem", "div_by_monic_zero", ["polynomial"]], ["add", "def", "div_mod_by_monic_aux", ["polynomial"]], ["add", "theorem", "div_wf_lemma", ["polynomial"]], ["add", "theorem", "dvd_iff_mod_by_monic_eq_zero", ["polynomial"]], ["add", "theorem", "eq_C_of_degree_le_zero", ["polynomial"]], ["add", "theorem", "eq_zero_of_degree_lt", ["polynomial"]], ["add", "def", "eval", ["polynomial"]], ["add", "theorem", "eval_C", ["polynomial"]], ["add", "theorem", "eval_X", ["polynomial"]], ["add", "theorem", "eval_add", ["polynomial"]], ["add", "theorem", "eval_monomial", ["polynomial"]], ["add", "theorem", "eval_mul", ["polynomial"]], ["add", "theorem", "eval_mul_monomial", ["polynomial"]], ["add", "theorem", "eval_neg", ["polynomial"]], ["add", "theorem", "eval_sub", ["polynomial"]], ["add", "theorem", "eval_zero", ["polynomial"]], ["add", "theorem", "exists_finset_roots", ["polynomial"]], ["add", "theorem", "induction_on", ["polynomial"]], ["add", "theorem", "def", ["polynomial", "is_root"]], ["add", "def", "is_root", ["polynomial"]], ["add", "theorem", "le_degree_of_ne_zero", ["polynomial"]], ["add", "def", "leading_coeff", ["polynomial"]], ["add", "theorem", "leading_coeff_C", ["polynomial"]], ["add", "theorem", "leading_coeff_X", ["polynomial"]], ["add", "theorem", "leading_coeff_add_of_degree_eq", ["polynomial"]], ["add", "theorem", "leading_coeff_add_of_degree_lt", ["polynomial"]], ["add", "theorem", "leading_coeff_eq_zero", ["polynomial"]], ["add", "theorem", "leading_coeff_monomial", ["polynomial"]], ["add", "theorem", "leading_coeff_mul'", ["polynomial"]], ["add", "theorem", "leading_coeff_mul", ["polynomial"]], ["add", "theorem", "leading_coeff_one", ["polynomial"]], ["add", "theorem", "leading_coeff_pow'", ["polynomial"]], ["add", "theorem", "leading_coeff_pow", ["polynomial"]], ["add", "theorem", "leading_coeff_zero", ["polynomial"]], ["add", "theorem", "mem_roots", ["polynomial"]], ["add", "def", "mod", ["polynomial"]], ["add", "theorem", "mod_X_sub_C_eq_C_eval", ["polynomial"]], ["add", "def", "mod_by_monic", ["polynomial"]], ["add", "theorem", "mod_by_monic_X_sub_C_eq_C_eval", ["polynomial"]], ["add", "theorem", "mod_by_monic_add_div", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_mod", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_of_not_monic", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_self_iff", ["polynomial"]], ["add", "theorem", "mod_by_monic_eq_sub_mul_div", ["polynomial"]], ["add", "theorem", "mod_by_monic_zero", ["polynomial"]], ["add", "theorem", "def", ["polynomial", "monic"]], ["add", "def", "monic", ["polynomial"]], ["add", "theorem", "monic_X_sub_C", ["polynomial"]], ["add", "theorem", "monic_mul_leading_coeff_inv", ["polynomial"]], ["add", "theorem", "monic_one", ["polynomial"]], ["add", "def", "monomial", ["polynomial"]], ["add", "theorem", "monomial_add_left", ["polynomial"]], ["add", "theorem", "monomial_add_right", ["polynomial"]], ["add", "theorem", "monomial_apply", ["polynomial"]], ["add", "theorem", "monomial_apply_self", ["polynomial"]], ["add", "theorem", "monomial_eq", ["polynomial"]], ["add", "theorem", "monomial_induction_on", ["polynomial"]], ["add", "theorem", "monomial_mul_monomial", ["polynomial"]], ["add", "theorem", "monomial_zero_right", ["polynomial"]], ["add", "theorem", "mul_apply_degree_add_degree", ["polynomial"]], ["add", "theorem", "mul_div_by_monic_eq_iff_is_root", ["polynomial"]], ["add", "theorem", "mul_div_eq_iff_is_root", ["polynomial"]], ["add", "def", "nat_degree", ["polynomial"]], ["add", "theorem", "nat_degree_C", ["polynomial"]], ["add", "theorem", "nat_degree_eq_of_degree_eq", ["polynomial"]], ["add", "theorem", "nat_degree_mul_eq'", ["polynomial"]], ["add", "theorem", "ne_zero_of_degree_gt", ["polynomial"]], ["add", "theorem", "ne_zero_of_monic", ["polynomial"]], ["add", "theorem", "ne_zero_of_ne_zero_of_monic", ["polynomial"]], ["add", "theorem", "neg_apply", ["polynomial"]], ["add", "theorem", "not_monic_zero", ["polynomial"]], ["add", "theorem", "one_apply_zero", ["polynomial"]], ["add", "theorem", "root_X_sub_C", ["polynomial"]], ["add", "theorem", "root_mul_left_of_is_root", ["polynomial"]], ["add", "theorem", "root_mul_right_of_is_root", ["polynomial"]], ["add", "theorem", "root_or_root_of_root_mul", ["polynomial"]], ["add", "theorem", "subsingleton_of_monic_zero", ["polynomial"]], ["add", "theorem", "support_zero", ["polynomial"]], ["add", "theorem", "zero_apply", ["polynomial"]], ["add", "theorem", "zero_div_by_monic", ["polynomial"]], ["add", "theorem", "zero_mod_by_monic", ["polynomial"]], ["add", "def", "polynomial", []], ["add", "theorem", "add_bot", ["with_bot"]], ["add", "theorem", "bot_add", ["with_bot"]], ["add", "theorem", "bot_lt_some", ["with_bot"]], ["add", "theorem", "coe_add", ["with_bot"]], ["add", "theorem", "coe_lt_coe", ["with_bot"]]]}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "well_founded_lt", ["with_bot"]], ["add", "theorem", "well_founded_lt", ["with_top"]]]}]}, {"timestamp": 1531867381, "sha": "a0dd286a", "message": "fix(*): fix build", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": []}]}, {"timestamp": 1531850459, "sha": "7f8b0880", "message": "feat(tactic/basic): fix environment.in_current_file", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}]}, {"timestamp": 1531847815, "sha": "980a01e8", "message": "feat(ring_theory/ideals): quotient rings (#196)", "changes": [{"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["add", "theorem", "exists_inv", ["is_ideal"]], ["add", "theorem", "mul_left", ["is_ideal"]], ["add", "theorem", "mul_right", ["is_ideal"]], ["add", "theorem", "neg_iff", ["is_ideal"]], ["add", "def", "quotient", ["is_ideal"]], ["add", "theorem", "quotient_eq_zero_iff_mem", ["is_ideal"]], ["add", "def", "quotient_rel", ["is_ideal"]], ["add", "theorem", "is_proper_ideal_iff_one_not_mem", []], ["del", "theorem", "not_unit_of_mem_maximal_ideal", []], ["add", "theorem", "not_unit_of_mem_proper_ideal", []]]}]}, {"timestamp": 1531791145, "sha": "421a1cda", "message": "fix(measure_theory/measure_space): fix build", "changes": [{"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}]}, {"timestamp": 1531787702, "sha": "f92d2394", "message": "chore(travis.yml): checkout old files in both stages", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1531787454, "sha": "b267edc3", "message": "refactor(data/set/countable): define countable in terms of encodable", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "computability/halting.lean", "newPath": "computability/halting.lean", "changes": []}, {"oldPath": "data/equiv/encodable.lean", "newPath": "data/equiv/encodable.lean", "changes": [["add", "theorem", "decode2_is_partial_inv", ["encodable"]], ["add", "theorem", "mem_decode2'", ["encodable"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["add", "def", "to_encodable", ["set", "countable"]], ["del", "theorem", "to_encodable", ["set", "countable"]], ["mod", "def", "countable", ["set"]], ["mod", "theorem", "countable_encodable'", ["set"]], ["mod", "theorem", "countable_encodable", ["set"]], ["add", "theorem", "countable_iff_exists_inj_on", ["set"]], ["add", "theorem", "countable_iff_exists_injective", ["set"]], ["mod", "theorem", "countable_image", ["set"]], ["add", "theorem", "countable_range", ["set"]], ["mod", "theorem", "countable_set_of_finite_subset", ["set"]], ["mod", "theorem", "countable_singleton", ["set"]]]}, {"oldPath": "data/set/function.lean", "newPath": "data/set/function.lean", "changes": [["add", "theorem", "inj_on_iff_injective", ["set"]], ["add", "theorem", "surj_on_iff_surjective", ["set"]]]}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "is_partial_inv_left", ["function"]], ["add", "theorem", "partial_inv_left", ["function"]]]}]}, {"timestamp": 1531783026, "sha": "ee4ff473", "message": "chore(travis.yml): update lean files before pre-build", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1531779238, "sha": "95a3c47e", "message": "fix(.): fix build", "changes": [{"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "disjoint_empty_left", ["finset"]], ["mod", "theorem", "disjoint_empty_right", ["finset"]], ["add", "theorem", "inf_eq_inter", ["finset"]], ["add", "theorem", "sup_eq_union", ["finset"]]]}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": []}]}, {"timestamp": 1531773971, "sha": "bdc90f6c", "message": "feat(data/set/basic): more set theorems, normalize naming", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["del", "theorem", "sInter_eq_Inter", ["set"]]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "is_open_diff", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/analysis/topology.lean", "newPath": "data/analysis/topology.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "compl_subset_compl", ["set"]], ["add", "theorem", "diff_eq_empty", ["set"]], ["add", "theorem", "diff_eq_self", ["set"]], ["add", "theorem", "diff_inter_self", ["set"]], ["del", "theorem", "diff_neq_empty", ["set"]], ["del", "theorem", "diff_right_antimono", ["set"]], ["add", "theorem", "diff_singleton_eq_self", ["set"]], ["add", "theorem", "diff_subset_diff_left", ["set"]], ["add", "theorem", "diff_subset_diff_right", ["set"]], ["add", "theorem", "diff_union_self", ["set"]], ["add", "theorem", "insert_diff", ["set"]], ["add", "theorem", "insert_diff_singleton", ["set"]], ["del", "theorem", "insert_sdiff", ["set"]], ["add", "theorem", "inter_diff_assoc", ["set"]], ["add", "theorem", "inter_diff_self", ["set"]], ["mod", "theorem", "inter_subset_inter_left", ["set"]], ["mod", "theorem", "inter_subset_inter_right", ["set"]], ["add", "theorem", "inter_union_diff", ["set"]], ["add", "theorem", "union_diff_cancel_left", ["set"]], ["add", "theorem", "union_diff_cancel_right", ["set"]], ["add", "theorem", "union_diff_left", ["set"]], ["add", "theorem", "union_diff_right", ["set"]], ["add", "theorem", "union_diff_self", ["set"]], ["add", "theorem", "union_inter_cancel_left", ["set"]], ["add", "theorem", "union_inter_cancel_right", ["set"]], ["mod", "theorem", "union_subset_union", ["set"]], ["add", "theorem", "union_subset_union_left", ["set"]], ["add", "theorem", "union_subset_union_right", ["set"]]]}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "comm", ["disjoint"]], ["add", "theorem", "eq_bot", ["disjoint"]], ["add", "theorem", "symm", ["disjoint"]], ["mod", "def", "disjoint", []], ["mod", "theorem", "disjoint_bot_left", []], ["mod", "theorem", "disjoint_bot_right", []], ["del", "theorem", "disjoint_comm", []], ["add", "theorem", "disjoint_iff", []], ["del", "theorem", "disjoint_symm", []], ["add", "theorem", "Inter_const", ["set"]], ["mod", "theorem", "Inter_eq_comp_Union_comp", ["set"]], ["del", "theorem", "Inter_eq_sInter_image", ["set"]], ["add", "theorem", "Inter_eq_sInter_range", ["set"]], ["add", "theorem", "Inter_inter_distrib", ["set"]], ["add", "theorem", "Inter_subset", ["set"]], ["add", "theorem", "Union_const", ["set"]], ["mod", "theorem", "Union_eq_comp_Inter_comp", ["set"]], ["add", "theorem", "Union_eq_range_sigma", ["set"]], ["del", "theorem", "Union_eq_sUnion_image", ["set"]], ["add", "theorem", "Union_eq_sUnion_range", ["set"]], ["add", "theorem", "Union_union_distrib", ["set"]], ["add", "theorem", "bInter_eq_Inter", ["set"]], ["add", "theorem", "bUnion_eq_Union", ["set"]], ["mod", "theorem", "compl_Inter", ["set"]], ["mod", "theorem", "compl_Union", ["set"]], ["del", "theorem", "compl_subset_compl_iff_subset", ["set"]], ["add", "theorem", "diff_Inter_left", ["set"]], ["add", "theorem", "diff_Union_left", ["set"]], ["add", "theorem", "diff_Union_right", ["set"]], ["add", "theorem", "disjoint_diff", ["set"]], ["del", "theorem", "insert_sdiff_singleton", ["set"]], ["add", "theorem", "inter_Inter_left", ["set"]], ["add", "theorem", "inter_Inter_right", ["set"]], ["add", "theorem", "inter_Union_left", ["set"]], ["add", "theorem", "inter_Union_right", ["set"]], ["del", "theorem", "inter_distrib_Union_left", ["set"]], ["del", "theorem", "inter_distrib_Union_right", ["set"]], ["add", "theorem", "inter_eq_Inter", ["set"]], ["mod", "theorem", "mem_Inter", ["set"]], ["del", "theorem", "mem_Inter_eq", ["set"]], ["add", "theorem", "mem_Inter_of_mem", ["set"]], ["add", "theorem", "mem_Union", ["set"]], ["del", "theorem", "mem_Union_eq", ["set"]], ["mod", "theorem", "mem_sInter", ["set"]], ["del", "theorem", "mem_sInter_eq", ["set"]], ["mod", "theorem", "mem_sUnion", ["set"]], ["del", "theorem", "mem_sUnion_eq", ["set"]], ["add", "theorem", "mem_sUnion_of_mem", ["set"]], ["add", "theorem", "range_sigma_eq_Union_range", ["set"]], ["add", "theorem", "sInter_eq_Inter", ["set"]], ["add", "theorem", "sInter_eq_bInter", ["set"]], ["mod", "theorem", "sInter_subset_of_mem", ["set"]], ["add", "theorem", "sInter_subset_sInter", ["set"]], ["del", "theorem", "sUnion_eq_Union'", ["set"]], ["mod", "theorem", "sUnion_eq_Union", ["set"]], ["add", "theorem", "sUnion_eq_bUnion", ["set"]], ["mod", "theorem", "sUnion_subset_iff", ["set"]], ["add", "theorem", "sUnion_subset_sUnion", ["set"]], ["del", "theorem", "sdiff_empty", ["set"]], ["del", "theorem", "sdiff_eq:", ["set"]], ["del", "theorem", "sdiff_inter_same", ["set"]], ["del", "theorem", "sdiff_singleton_eq_same", ["set"]], ["del", "theorem", "sdiff_subset_sdiff", ["set"]], ["del", "theorem", "sdiff_union_same", ["set"]], ["add", "theorem", "sub_eq_diff", ["set"]], ["mod", "theorem", "subset_Union", ["set"]], ["mod", "theorem", "subset_sUnion_of_mem", ["set"]], ["add", "theorem", "union_Inter_left", ["set"]], ["add", "theorem", "union_Union_left", ["set"]], ["add", "theorem", "union_Union_right", ["set"]], ["del", "theorem", "union_distrib_Inter_left", ["set"]], ["add", "theorem", "union_eq_Union", ["set"]], ["del", "theorem", "union_of_subset_right", ["set"]], ["del", "theorem", "union_same_compl", ["set"]], ["del", "theorem", "union_sdiff_left", ["set"]], ["del", "theorem", "union_sdiff_right", ["set"]], ["del", "theorem", "union_sdiff_same", ["set"]]]}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "logic/schroeder_bernstein.lean", "newPath": "logic/schroeder_bernstein.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}]}, {"timestamp": 1531772242, "sha": "9f6bcd09", "message": "refactor(data/bool): decidable forall bool", "changes": [{"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["del", "theorem", "absurd_of_eq_ff_of_eq_tt", ["bool"]], ["mod", "theorem", "band_assoc", ["bool"]], ["mod", "theorem", "band_comm", ["bool"]], ["mod", "theorem", "band_elim_left", ["bool"]], ["mod", "theorem", "band_elim_right", ["bool"]], ["mod", "theorem", "band_intro", ["bool"]], ["mod", "theorem", "band_left_comm", ["bool"]], ["mod", "theorem", "bor_assoc", ["bool"]], ["mod", "theorem", "bor_comm", ["bool"]], ["mod", "theorem", "bor_left_comm", ["bool"]], ["mod", "theorem", "bxor_assoc", ["bool"]], ["mod", "theorem", "bxor_comm", ["bool"]], ["mod", "theorem", "bxor_left_comm", ["bool"]], ["mod", "theorem", "eq_ff_of_bnot_eq_tt", ["bool"]], ["mod", "theorem", "eq_ff_of_ne_tt", ["bool"]], ["mod", "theorem", "eq_tt_of_bnot_eq_ff", ["bool"]], ["mod", "theorem", "eq_tt_of_ne_ff", ["bool"]], ["add", "theorem", "exists_bool", ["bool"]], ["add", "theorem", "forall_bool", ["bool"]]]}]}, {"timestamp": 1531772184, "sha": "8685bf2d", "message": "refactor(topology/continuity): remove inhabited from dense extend", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["del", "theorem", "continuous_ext", ["dense_embedding"]], ["add", "theorem", "continuous_extend", ["dense_embedding"]], ["del", "def", "ext", ["dense_embedding"]], ["del", "theorem", "ext_e_eq", ["dense_embedding"]], ["del", "theorem", "ext_eq", ["dense_embedding"]], ["add", "def", "extend", ["dense_embedding"]], ["add", "theorem", "extend_e_eq", ["dense_embedding"]], ["add", "theorem", "extend_eq", ["dense_embedding"]], ["del", "theorem", "tendsto_ext", ["dense_embedding"]], ["add", "theorem", "tendsto_extend", ["dense_embedding"]]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1531771393, "sha": "57f07e07", "message": "refactor(data/set/basic): rename set.set_eq_def -> set.ext_iff", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "coe_image", ["finset"]], ["mod", "theorem", "coe_inter", ["finset"]], ["mod", "theorem", "coe_union", ["finset"]]]}, {"oldPath": "data/semiquot.lean", "newPath": "data/semiquot.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "ext_iff", ["set"]], ["del", "theorem", "set_eq_def", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": []}, {"oldPath": "set_theory/zfc.lean", "newPath": "set_theory/zfc.lean", "changes": []}]}, {"timestamp": 1531770774, "sha": "4c6d7e29", "message": "feat(tactic/interactive): add apply_rules tactic (#190)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1531770271, "sha": "6495c205", "message": "feat(algebra/order_functions): abs_eq", "changes": [{"oldPath": "algebra/order_functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["add", "theorem", "abs_eq", []]]}]}, {"timestamp": 1531770161, "sha": "b0de694c", "message": "feat(tactic/tauto): improve coverage and performances of tauto (#180)", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "iff_iff_and_or_not_and_not", []]]}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/tauto.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1531770028, "sha": "c3e24f34", "message": "docs(code-review): add check list (#195) [ci-skip]", "changes": [{"oldPath": null, "newPath": "PULL_REQUEST_TEMPLATE.md", "changes": []}, {"oldPath": null, "newPath": "docs/code-review.md", "changes": []}]}, {"timestamp": 1531769957, "sha": "3a79975e", "message": "feat(data/quot): quot.hrec_on₂, quotient.hrec_on₂ (#197)", "changes": [{"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": []}]}, {"timestamp": 1531769661, "sha": "dd6cc576", "message": "chore(build): make travis build fail quicker when errors are found", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": null, "newPath": "travis_long.sh", "changes": []}]}, {"timestamp": 1531769589, "sha": "631207be", "message": "feat(data/multiset,...): card_eq_one\nbased on #200", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "neg_one_pow_eq_or", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "length_eq_one", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "card_eq_one", ["multiset"]], ["add", "theorem", "empty_eq_zero", ["multiset"]], ["add", "theorem", "strong_induction_eq", ["multiset"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "congr_right_iff", ["and"]]]}]}, {"timestamp": 1531769102, "sha": "ab8813a8", "message": "feat(tactic/interactive): alias \"rintros\" for \"rintro\"", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1531753889, "sha": "df8fc18f", "message": "feat(data/list/perm): extract cons_subperm_of_mem from subperm_of_subset_nodup (#173)", "changes": [{"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "cons_subperm_of_mem", ["list"]]]}]}, {"timestamp": 1531750015, "sha": "20fca1ce", "message": "feat(data/finset): disjoint finsets", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "card_disjoint_union", ["finset"]], ["add", "theorem", "disjoint_empty_left", ["finset"]], ["add", "theorem", "disjoint_empty_right", ["finset"]], ["add", "theorem", "disjoint_iff_inter_eq_empty", ["finset"]], ["add", "theorem", "disjoint_iff_ne", ["finset"]], ["add", "theorem", "disjoint_insert_left", ["finset"]], ["add", "theorem", "disjoint_insert_right", ["finset"]], ["add", "theorem", "disjoint_left", ["finset"]], ["add", "theorem", "disjoint_of_subset_left", ["finset"]], ["add", "theorem", "disjoint_of_subset_right", ["finset"]], ["add", "theorem", "disjoint_right", ["finset"]], ["add", "theorem", "disjoint_singleton", ["finset"]], ["add", "theorem", "disjoint_union_left", ["finset"]], ["add", "theorem", "disjoint_union_right", ["finset"]], ["del", "theorem", "inter_eq_empty_iff_disjoint", ["finset"]], ["add", "theorem", "singleton_disjoint", ["finset"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "disjoint_comm", []]]}]}, {"timestamp": 1531745975, "sha": "844c665b", "message": "feat(category/applicative): `id` and `comp` functors; proofs by `norm` (#184)", "changes": [{"oldPath": null, "newPath": "category/applicative.lean", "changes": [["add", "theorem", "map_seq_map", ["applicative"]], ["add", "theorem", "pure_seq_eq_map'", ["applicative"]], ["add", "theorem", "map_pure", ["comp"]], ["add", "theorem", "pure_seq_eq_map", ["comp"]], ["add", "theorem", "seq_assoc", ["comp"]], ["add", "theorem", "seq_mk", ["comp"]], ["add", "theorem", "seq_pure", ["comp"]]]}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["del", "theorem", "map_map", []], ["del", "def", "mmap₂", []], ["add", "def", "mzip_with'", []], ["add", "def", "mzip_with", []]]}, {"oldPath": null, "newPath": "category/functor.lean", "changes": [["add", "theorem", "map_mk", ["functor", "comp"]], ["add", "structure", "comp", ["functor"]], ["add", "theorem", "map_comp_map", ["functor"]], ["add", "theorem", "map_id", ["functor"]], ["add", "def", "mk", ["id"]]]}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/ext.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1531418566, "sha": "8dda9cdc", "message": "fix(analysis/topology/continuity): remove an extraneous constraint", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "theorem", "continuous_subtype_is_closed_cover", []]]}]}, {"timestamp": 1531418411, "sha": "42ba0983", "message": "feat(data/set/basic): diff_subset_iff, diff_subset_comm", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "diff_subset_comm", ["set"]], ["add", "theorem", "diff_subset_iff", ["set"]]]}]}, {"timestamp": 1531418345, "sha": "17bf1ae2", "message": "feat(analysis/topology/continuity): embedding_inl, embedding_inr", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "embedding_inl", []], ["add", "theorem", "embedding_inr", []]]}]}, {"timestamp": 1531384923, "sha": "21b918b3", "message": "feat(data/fintype): decidable forall and exists (#189)", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "def", "decidable_exists_multiset", ["multiset"]]]}]}, {"timestamp": 1531342856, "sha": "b1a314fc", "message": "chore(build): Break build process into two parts", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1531272817, "sha": "8d72f62c", "message": "Revert \"chore(build): Break build process into two parts\"\nThis reverts commit 890847df6618c5559a4170c36d61bf693f57086d.", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1531267723, "sha": "890847df", "message": "chore(build): Break build process into two parts", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1531063607, "sha": "c8ad5cfd", "message": "fix(computability/turing_machine): fix import", "changes": [{"oldPath": "computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": []}]}, {"timestamp": 1531060797, "sha": "e5d5abd9", "message": "feat(data/pfun,...): add some isomorphism theorems", "changes": [{"oldPath": "data/equiv/basic.lean", "newPath": "data/equiv/basic.lean", "changes": [["add", "def", "set_value", ["equiv"]], ["add", "theorem", "set_value_eq", ["equiv"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "filter_of_map", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "def", "strong_induction_on", ["multiset"]], ["del", "theorem", "strong_induction_on", ["multiset"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["add", "def", "equiv_subtype", ["pfun"]], ["add", "theorem", "eta", ["roption"]], ["add", "theorem", "of_option_dom", ["roption"]], ["add", "theorem", "of_option_eq_get", ["roption"]]]}]}, {"timestamp": 1530929024, "sha": "71953e0b", "message": "feat(order/basic): add extensionality for order structures", "changes": [{"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "theorem", "ext", ["linear_order"]], ["add", "theorem", "ext", ["partial_order"]], ["add", "theorem", "ext", ["preorder"]]]}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "ext", ["lattice", "bounded_lattice"]], ["add", "theorem", "ext", ["lattice", "order_bot"]], ["add", "theorem", "ext_bot", ["lattice", "order_bot"]], ["add", "theorem", "ext", ["lattice", "order_top"]], ["add", "theorem", "ext_top", ["lattice", "order_top"]], ["add", "theorem", "inf_eq_min", ["with_bot"]], ["add", "theorem", "lattice_eq_DLO", ["with_bot"]], ["add", "theorem", "sup_eq_max", ["with_bot"]], ["add", "theorem", "inf_eq_min", ["with_top"]], ["add", "theorem", "lattice_eq_DLO", ["with_top"]], ["add", "theorem", "sup_eq_max", ["with_top"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["add", "theorem", "inf_eq_min", ["lattice"]], ["add", "theorem", "ext", ["lattice", "lattice"]], ["add", "theorem", "ext", ["lattice", "semilattice_inf"]], ["add", "theorem", "ext_inf", ["lattice", "semilattice_inf"]], ["add", "theorem", "ext", ["lattice", "semilattice_sup"]], ["add", "theorem", "ext_sup", ["lattice", "semilattice_sup"]], ["add", "theorem", "sup_eq_max", ["lattice"]]]}]}, {"timestamp": 1530867857, "sha": "ab1861ab", "message": "feat(data/subtype): setoid (subtype p)", "changes": [{"oldPath": "data/subtype.lean", "newPath": "data/subtype.lean", "changes": [["add", "theorem", "equiv_iff", ["subtype"]], ["add", "theorem", "equivalence", ["subtype"]]]}]}, {"timestamp": 1530867857, "sha": "d54950a8", "message": "refactor(data/subtype): move out of data/sigma/basic.lean", "changes": [{"oldPath": "data/equiv/denumerable.lean", "newPath": "data/equiv/denumerable.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": [["del", "theorem", "coe_eta", ["subtype"]], ["del", "theorem", "coe_mk", ["subtype"]], ["del", "theorem", "exists", ["subtype"]], ["del", "theorem", "ext", ["subtype"]], ["del", "theorem", "forall", ["subtype"]], ["del", "def", "map", ["subtype"]], ["del", "theorem", "map_comp", ["subtype"]], ["del", "theorem", "map_id", ["subtype"]], ["del", "theorem", "mk_eq_mk", ["subtype"]], ["del", "theorem", "val_injective", ["subtype"]]]}, {"oldPath": null, "newPath": "data/subtype.lean", "changes": [["add", "theorem", "coe_eta", ["subtype"]], ["add", "theorem", "coe_mk", ["subtype"]], ["add", "theorem", "exists", ["subtype"]], ["add", "theorem", "ext", ["subtype"]], ["add", "theorem", "forall", ["subtype"]], ["add", "def", "map", ["subtype"]], ["add", "theorem", "map_comp", ["subtype"]], ["add", "theorem", "map_id", ["subtype"]], ["add", "theorem", "mk_eq_mk", ["subtype"]], ["add", "theorem", "val_injective", ["subtype"]]]}, {"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}]}, {"timestamp": 1530848794, "sha": "d194f389", "message": "refactor(tactic/rcases): use haveI in tactic.cache", "changes": [{"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}]}, {"timestamp": 1530848663, "sha": "28e011d4", "message": "feat(tactic/cache): split cache related tactics off from `tactic.interactive`", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "not_iff", []]]}, {"oldPath": null, "newPath": "tactic/cache.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": [["del", "theorem", "trans", ["tactic", "interactive", "iff"]], ["del", "theorem", "swap", ["tactic", "interactive", "imp"]], ["del", "theorem", "imp_not_comm", ["tactic", "interactive"]], ["del", "theorem", "not_and_distrib'", ["tactic", "interactive"]], ["del", "theorem", "not_and_distrib", ["tactic", "interactive"]], ["del", "theorem", "not_and_of_not_or_not", ["tactic", "interactive"]], ["del", "theorem", "not_or_distrib", ["tactic", "interactive"]], ["del", "theorem", "or_iff_not_imp_left", ["tactic", "interactive"]], ["del", "theorem", "or_iff_not_imp_right", ["tactic", "interactive"]]]}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1530848663, "sha": "06f47783", "message": "feat(tactic/tauto): handle `or` in goal", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": [["add", "theorem", "trans", ["tactic", "interactive", "iff"]], ["add", "theorem", "swap", ["tactic", "interactive", "imp"]], ["add", "theorem", "imp_not_comm", ["tactic", "interactive"]], ["add", "theorem", "not_and_distrib'", ["tactic", "interactive"]], ["add", "theorem", "not_and_distrib", ["tactic", "interactive"]], ["add", "theorem", "not_and_of_not_or_not", ["tactic", "interactive"]], ["add", "theorem", "not_or_distrib", ["tactic", "interactive"]], ["add", "theorem", "or_iff_not_imp_left", ["tactic", "interactive"]], ["add", "theorem", "or_iff_not_imp_right", ["tactic", "interactive"]]]}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1530844272, "sha": "b4a85486", "message": "feat(tactic/rcases): add rintro tactic", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}]}, {"timestamp": 1530709710, "sha": "a7846022", "message": "feat(tactic/tauto): consider `true` and `false`", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1530557442, "sha": "a2e847d2", "message": "fix(algebra/ordered_group): define (0:with_bot) to unfold correctly", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1530516136, "sha": "ff4eeed7", "message": "feat(computability/turing_machine): reduce to 2-symbol TMs", "changes": [{"oldPath": "computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": [["add", "def", "map", ["turing", "TM0", "cfg"]], ["mod", "def", "init", ["turing", "TM0"]], ["add", "def", "map", ["turing", "TM0", "machine"]], ["add", "theorem", "map_respects", ["turing", "TM0", "machine"]], ["add", "theorem", "map_step", ["turing", "TM0", "machine"]], ["add", "theorem", "map_init", ["turing", "TM0"]], ["mod", "theorem", "step_supports", ["turing", "TM0"]], ["add", "def", "map", ["turing", "TM0", "stmt"]], ["mod", "def", "supports", ["turing", "TM0"]], ["add", "theorem", "univ_supports", ["turing", "TM0"]], ["add", "def", "tr", ["turing", "TM0to1"]], ["add", "def", "tr_cfg", ["turing", "TM0to1"]], ["add", "theorem", "tr_respects", ["turing", "TM0to1"]], ["add", "inductive", "Λ'", ["turing", "TM0to1"]], ["mod", "def", "init", ["turing", "TM1"]], ["mod", "def", "step_aux", ["turing", "TM1"]], ["mod", "def", "tr_cfg", ["turing", "TM1to0"]], ["mod", "theorem", "tr_supports", ["turing", "TM1to0"]], ["add", "theorem", "exists_enc_dec", ["turing", "TM1to1"]], ["add", "def", "move", ["turing", "TM1to1"]], ["add", "def", "read", ["turing", "TM1to1"]], ["add", "def", "read_aux", ["turing", "TM1to1"]], ["add", "theorem", "step_aux_move", ["turing", "TM1to1"]], ["add", "theorem", "step_aux_read", ["turing", "TM1to1"]], ["add", "theorem", "step_aux_write", ["turing", "TM1to1"]], ["add", "theorem", "supports_stmt_move", ["turing", "TM1to1"]], ["add", "theorem", "supports_stmt_read", ["turing", "TM1to1"]], ["add", "theorem", "supports_stmt_write", ["turing", "TM1to1"]], ["add", "def", "tr", ["turing", "TM1to1"]], ["add", "def", "tr_cfg", ["turing", "TM1to1"]], ["add", "def", "tr_normal", ["turing", "TM1to1"]], ["add", "theorem", "tr_respects", ["turing", "TM1to1"]], ["add", "theorem", "tr_supports", ["turing", "TM1to1"]], ["add", "def", "tr_tape'", ["turing", "TM1to1"]], ["add", "theorem", "tr_tape'_move_left", ["turing", "TM1to1"]], ["add", "theorem", "tr_tape'_move_right", ["turing", "TM1to1"]], ["add", "def", "tr_tape", ["turing", "TM1to1"]], ["add", "theorem", "tr_tape_drop_right", ["turing", "TM1to1"]], ["add", "theorem", "tr_tape_take_right", ["turing", "TM1to1"]], ["add", "def", "write", ["turing", "TM1to1"]], ["add", "inductive", "Λ'", ["turing", "TM1to1"]], ["mod", "def", "init", ["turing", "TM2"]], ["mod", "def", "step_aux", ["turing", "TM2"]], ["mod", "theorem", "tr_respects_aux₃", ["turing", "TM2to1"]], ["del", "def", "Λ'_inh", ["turing", "TM2to1"]], ["add", "def", "pointed_map", ["turing"]], ["add", "theorem", "to₀", ["turing", "reaches"]], ["add", "theorem", "head", ["turing", "reaches₀"]], ["add", "theorem", "refl", ["turing", "reaches₀"]], ["add", "theorem", "single", ["turing", "reaches₀"]], ["add", "theorem", "tail'", ["turing", "reaches₀"]], ["add", "theorem", "tail", ["turing", "reaches₀"]], ["add", "theorem", "trans", ["turing", "reaches₀"]], ["add", "def", "reaches₀", ["turing"]], ["add", "theorem", "reaches₀_eq", ["turing"]], ["add", "theorem", "to₀", ["turing", "reaches₁"]], ["add", "theorem", "reaches₁_fwd", ["turing"]], ["add", "def", "map", ["turing", "tape"]], ["add", "theorem", "map_fst", ["turing", "tape"]], ["add", "theorem", "map_mk", ["turing", "tape"]], ["add", "theorem", "map_move", ["turing", "tape"]], ["add", "theorem", "map_write", ["turing", "tape"]], ["add", "def", "mk'", ["turing", "tape"]]]}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["add", "theorem", "default_bool", ["bool"]], ["add", "theorem", "to_bool_eq", ["bool"]]]}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "add_nat", ["fin"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "coe_empty", ["finset"]], ["add", "theorem", "coe_erase", ["finset"]], ["add", "theorem", "coe_filter", ["finset"]], ["add", "theorem", "coe_image", ["finset"]], ["add", "theorem", "coe_inj", ["finset"]], ["add", "theorem", "coe_insert", ["finset"]], ["add", "theorem", "coe_inter", ["finset"]], ["add", "theorem", "coe_sdiff", ["finset"]], ["add", "theorem", "coe_singleton", ["finset"]], ["add", "theorem", "coe_subset", ["finset"]], ["add", "theorem", "coe_union", ["finset"]], ["add", "theorem", "mem_coe", ["finset"]], ["add", "def", "to_set", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "bind_append", ["list"]], ["add", "theorem", "drop_add", ["list"]], ["add", "theorem", "drop_left'", ["list"]], ["add", "theorem", "drop_left", ["list"]], ["add", "theorem", "drop_one", ["list"]], ["add", "theorem", "ne_nil_of_mem", ["list"]], ["add", "theorem", "reverse_repeat", ["list"]], ["add", "def", "take'", ["list"]], ["add", "theorem", "take'_eq_take", ["list"]], ["add", "theorem", "take'_left'", ["list"]], ["add", "theorem", "take'_left", ["list"]], ["add", "theorem", "take'_length", ["list"]], ["add", "theorem", "take'_nil", ["list"]], ["add", "theorem", "take_left'", ["list"]], ["add", "theorem", "take_left", ["list"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["del", "theorem", "coe_empty", ["finset"]], ["del", "theorem", "coe_eq_coe", ["finset"]], ["del", "theorem", "coe_erase", ["finset"]], ["del", "theorem", "coe_filter", ["finset"]], ["del", "theorem", "coe_image", ["finset"]], ["del", "theorem", "coe_insert", ["finset"]], ["del", "theorem", "coe_inter", ["finset"]], ["del", "theorem", "coe_sdiff", ["finset"]], ["del", "theorem", "coe_singleton", ["finset"]], ["del", "theorem", "coe_subseteq_coe", ["finset"]], ["del", "theorem", "coe_union", ["finset"]], ["del", "theorem", "mem_coe", ["finset"]], ["del", "def", "to_set", ["finset"]]]}, {"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": [["mod", "theorem", "mk_to_list", ["vector"]], ["add", "def", "reverse", ["vector"]]]}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": [["add", "theorem", "set_value_eq", ["function", "embedding"]]]}]}, {"timestamp": 1530537111, "sha": "b5e07ad7", "message": "fix(analysis/topology): prod.ext is now prod.ext_iff", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}]}, {"timestamp": 1530532031, "sha": "3f66b3a2", "message": "feat(analysis/topology/continuity): generalized tube lemma and some corollaries", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "closed_of_compact", []], ["add", "theorem", "compact_compact_separated", []], ["add", "theorem", "continuous_swap", []], ["add", "theorem", "diagonal_eq_range_diagonal_map", []], ["add", "theorem", "generalized_tube_lemma", []], ["add", "theorem", "comm", ["nhds_contain_boxes"]], ["add", "theorem", "symm", ["nhds_contain_boxes"]], ["add", "def", "nhds_contain_boxes", []], ["add", "theorem", "nhds_contain_boxes_of_compact", []], ["add", "theorem", "nhds_contain_boxes_of_singleton", []], ["add", "theorem", "prod_subset_compl_diagonal_iff_disjoint", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_open_bInter", []], ["add", "theorem", "is_open_bUnion", []]]}]}, {"timestamp": 1530532031, "sha": "225dd84e", "message": "feat(data/set/lattice): add more lemmas pertaining to bInter, bUnion", "changes": [{"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "bInter_subset_bInter_right", ["set"]], ["add", "theorem", "bUnion_subset_bUnion_right", ["set"]], ["add", "theorem", "compl_bInter", ["set"]], ["add", "theorem", "compl_bUnion", ["set"]]]}]}, {"timestamp": 1530399880, "sha": "7b0c1508", "message": "refactor(data/equiv): reorganize data.equiv deps", "changes": [{"oldPath": "computability/primrec.lean", "newPath": "computability/primrec.lean", "changes": []}, {"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": [["add", "def", "array_equiv_fin", ["equiv"]], ["add", "def", "d_array_equiv_fin", ["equiv"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv/basic.lean", "changes": [["del", "def", "array_equiv_fin", ["equiv"]], ["del", "def", "bool_prod_nat_equiv_nat", ["equiv"]], ["del", "def", "d_array_equiv_fin", ["equiv"]], ["del", "def", "int_equiv_nat", ["equiv"]], ["del", "def", "nat_prod_nat_equiv_nat", ["equiv"]], ["del", "def", "nat_sum_bool_equiv_nat", ["equiv"]], ["del", "def", "nat_sum_nat_equiv_nat", ["equiv"]], ["del", "def", "prod_equiv_of_equiv_nat", ["equiv"]], ["del", "def", "vector_equiv_array", ["equiv"]], ["del", "def", "vector_equiv_fin", ["equiv"]], ["del", "theorem", "comp", ["function", "left_inverse"]], ["del", "theorem", "f_g_eq_id", ["function", "left_inverse"]], ["del", "theorem", "comp", ["function", "right_inverse"]], ["del", "theorem", "g_f_eq_id", ["function", "right_inverse"]]]}, {"oldPath": null, "newPath": "data/equiv/denumerable.lean", "changes": [["add", "theorem", "decode_eq_of_nat", ["denumerable"]], ["add", "theorem", "decode_is_some", ["denumerable"]], ["add", "theorem", "encode_of_nat", ["denumerable"]], ["add", "def", "equiv₂", ["denumerable"]], ["add", "def", "eqv", ["denumerable"]], ["add", "def", "mk'", ["denumerable"]], ["add", "def", "of_equiv", ["denumerable"]], ["add", "theorem", "of_equiv_of_nat", ["denumerable"]], ["add", "def", "of_nat", ["denumerable"]], ["add", "theorem", "of_nat_encode", ["denumerable"]], ["add", "theorem", "of_nat_nat", ["denumerable"]], ["add", "theorem", "of_nat_of_decode", ["denumerable"]], ["add", "def", "pair", ["denumerable"]], ["add", "theorem", "prod_nat_of_nat", ["denumerable"]], ["add", "theorem", "prod_of_nat_val", ["denumerable"]], ["add", "theorem", "sigma_of_nat_val", ["denumerable"]]]}, {"oldPath": "data/encodable.lean", "newPath": "data/equiv/encodable.lean", "changes": [["del", "def", "decode_list", ["encodable"]], ["del", "theorem", "decode_list_succ", ["encodable"]], ["del", "theorem", "decode_list_zero", ["encodable"]], ["del", "def", "decode_multiset", ["encodable"]], ["del", "def", "encodable_of_list", ["encodable"]], ["del", "def", "encode_list", ["encodable"]], ["del", "theorem", "encode_list_cons", ["encodable"]], ["del", "theorem", "encode_list_nil", ["encodable"]], ["del", "def", "encode_multiset", ["encodable"]], ["del", "theorem", "length_le_encode", ["encodable"]], ["del", "def", "trunc_encodable_of_fintype", ["encodable"]]]}, {"oldPath": "data/denumerable.lean", "newPath": "data/equiv/list.lean", "changes": [["del", "theorem", "decode_eq_of_nat", ["denumerable"]], ["del", "theorem", "decode_is_some", ["denumerable"]], ["del", "theorem", "encode_of_nat", ["denumerable"]], ["del", "def", "equiv₂", ["denumerable"]], ["del", "def", "eqv", ["denumerable"]], ["del", "def", "mk'", ["denumerable"]], ["del", "def", "of_equiv", ["denumerable"]], ["del", "theorem", "of_equiv_of_nat", ["denumerable"]], ["del", "def", "of_nat", ["denumerable"]], ["del", "theorem", "of_nat_encode", ["denumerable"]], ["del", "theorem", "of_nat_nat", ["denumerable"]], ["del", "theorem", "of_nat_of_decode", ["denumerable"]], ["del", "def", "pair", ["denumerable"]], ["del", "theorem", "prod_nat_of_nat", ["denumerable"]], ["del", "theorem", "prod_of_nat_val", ["denumerable"]], ["del", "theorem", "sigma_of_nat_val", ["denumerable"]], ["add", "def", "decode_list", ["encodable"]], ["add", "theorem", "decode_list_succ", ["encodable"]], ["add", "theorem", "decode_list_zero", ["encodable"]], ["add", "def", "decode_multiset", ["encodable"]], ["add", "def", "encodable_of_list", ["encodable"]], ["add", "def", "encode_list", ["encodable"]], ["add", "theorem", "encode_list_cons", ["encodable"]], ["add", "theorem", "encode_list_nil", ["encodable"]], ["add", "def", "encode_multiset", ["encodable"]], ["add", "theorem", "length_le_encode", ["encodable"]], ["add", "def", "trunc_encodable_of_fintype", ["encodable"]]]}, {"oldPath": null, "newPath": "data/equiv/nat.lean", "changes": [["add", "def", "bool_prod_nat_equiv_nat", ["equiv"]], ["add", "def", "int_equiv_nat", ["equiv"]], ["add", "def", "nat_prod_nat_equiv_nat", ["equiv"]], ["add", "def", "nat_sum_nat_equiv_nat", ["equiv"]], ["add", "def", "prod_equiv_of_equiv_nat", ["equiv"]]]}, {"oldPath": "data/erased.lean", "newPath": "data/erased.lean", "changes": []}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_congr", ["set"]], ["add", "theorem", "subtype_val_image", ["set"]], ["add", "theorem", "subtype_val_range", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["del", "theorem", "image_congr", ["set"]], ["del", "theorem", "subtype_val_image", ["set"]], ["del", "theorem", "subtype_val_range", ["set"]]]}, {"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": [["add", "def", "vector_equiv_array", ["equiv"]], ["add", "def", "vector_equiv_fin", ["equiv"]]]}, {"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": []}, {"oldPath": "group_theory/free_group.lean", "newPath": "group_theory/free_group.lean", "changes": []}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "comp", ["function", "left_inverse"]], ["add", "theorem", "comp_eq_id", ["function", "left_inverse"]], ["add", "theorem", "comp", ["function", "right_inverse"]], ["add", "theorem", "comp_eq_id", ["function", "right_inverse"]]]}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}]}, {"timestamp": 1530319416, "sha": "913f702a", "message": "feat(computability/turing_machine): rework proofs, simplify TM lang", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": [["mod", "def", "eval", ["turing", "TM0"]], ["add", "def", "init", ["turing", "TM0"]], ["mod", "def", "eval", ["turing", "TM1"]], ["add", "def", "init", ["turing", "TM1"]], ["del", "def", "reaches", ["turing", "TM1"]], ["add", "def", "step_aux", ["turing", "TM1"]], ["del", "def", "tr'", ["turing", "TM1to0"]], ["mod", "def", "tr", ["turing", "TM1to0"]], ["add", "def", "tr_aux", ["turing", "TM1to0"]], ["mod", "def", "tr_cfg", ["turing", "TM1to0"]], ["add", "theorem", "tr_eval", ["turing", "TM1to0"]], ["del", "theorem", "tr_reaches", ["turing", "TM1to0"]], ["add", "theorem", "tr_respects", ["turing", "TM1to0"]], ["mod", "theorem", "tr_supports", ["turing", "TM1to0"]], ["mod", "def", "Λ'", ["turing", "TM1to0"]], ["mod", "def", "eval", ["turing", "TM2"]], ["add", "def", "init", ["turing", "TM2"]], ["del", "theorem", "move_until_left_reaches₁", ["turing", "TM2"]], ["del", "theorem", "move_until_right_reaches₁", ["turing", "TM2"]], ["del", "def", "reaches₁", ["turing", "TM2"]], ["del", "theorem", "reaches₁_step", ["turing", "TM2"]], ["add", "inductive", "st_act", ["turing", "TM2to1"]], ["add", "def", "st_run", ["turing", "TM2to1"]], ["add", "def", "st_var", ["turing", "TM2to1"]], ["add", "def", "st_write", ["turing", "TM2to1"]], ["add", "def", "get", ["turing", "TM2to1", "stackel"]], ["add", "def", "is_bottom", ["turing", "TM2to1", "stackel"]], ["add", "def", "is_top", ["turing", "TM2to1", "stackel"]], ["add", "inductive", "stackel", ["turing", "TM2to1"]], ["add", "def", "stackel_equiv", ["turing", "TM2to1"]], ["add", "theorem", "step_run", ["turing", "TM2to1"]], ["add", "theorem", "supports_run", ["turing", "TM2to1"]], ["del", "def", "tr'", ["turing", "TM2to1"]], ["add", "inductive", "tr_cfg", ["turing", "TM2to1"]], ["del", "def", "tr_cfg", ["turing", "TM2to1"]], ["add", "theorem", "tr_cfg_init", ["turing", "TM2to1"]], ["add", "theorem", "tr_eval", ["turing", "TM2to1"]], ["add", "theorem", "tr_eval_dom", ["turing", "TM2to1"]], ["add", "def", "tr_init", ["turing", "TM2to1"]], ["add", "def", "tr_normal", ["turing", "TM2to1"]], ["add", "theorem", "tr_normal_run", ["turing", "TM2to1"]], ["del", "theorem", "tr_reaches", ["turing", "TM2to1"]], ["add", "theorem", "tr_respects", ["turing", "TM2to1"]], ["add", "theorem", "tr_respects_aux", ["turing", "TM2to1"]], ["add", "theorem", "tr_respects_aux₁", ["turing", "TM2to1"]], ["add", "theorem", "tr_respects_aux₂", ["turing", "TM2to1"]], ["add", "theorem", "tr_respects_aux₃", ["turing", "TM2to1"]], ["add", "def", "tr_st_act", ["turing", "TM2to1"]], ["add", "def", "tr_stk", ["turing", "TM2to1"]], ["add", "theorem", "tr_stmts₁_run", ["turing", "TM2to1"]], ["add", "theorem", "{l}", ["turing", "TM2to1"]], ["add", "def", "Γ'", ["turing", "TM2to1"]], ["add", "inductive", "Λ'", ["turing", "TM2to1"]], ["del", "def", "Λ'", ["turing", "TM2to1"]], ["add", "def", "Λ'_inh", ["turing", "TM2to1"]], ["del", "structure", "cfg", ["turing", "TM3"]], ["del", "def", "eval", ["turing", "TM3"]], ["del", "def", "reaches", ["turing", "TM3"]], ["del", "def", "step", ["turing", "TM3"]], ["del", "def", "step_aux", ["turing", "TM3"]], ["del", "theorem", "step_supports", ["turing", "TM3"]], ["del", "inductive", "stmt", ["turing", "TM3"]], ["del", "theorem", "stmts_supports_stmt", ["turing", "TM3"]], ["del", "theorem", "stmts_trans", ["turing", "TM3"]], ["del", "theorem", "stmts₁_self", ["turing", "TM3"]], ["del", "theorem", "stmts₁_supports_stmt_mono", ["turing", "TM3"]], ["del", "theorem", "stmts₁_trans", ["turing", "TM3"]], ["del", "def", "supports", ["turing", "TM3"]], ["del", "def", "supports_stmt", ["turing", "TM3"]], ["del", "def", "at_stack", ["turing", "TM3to2"]], ["del", "def", "get", ["turing", "TM3to2", "stackel"]], ["del", "def", "is_bottom", ["turing", "TM3to2", "stackel"]], ["del", "def", "is_top", ["turing", "TM3to2", "stackel"]], ["del", "inductive", "stackel", ["turing", "TM3to2"]], ["del", "def", "stackel_equiv", ["turing", "TM3to2"]], ["del", "def", "tr", ["turing", "TM3to2"]], ["del", "inductive", "tr_cfg", ["turing", "TM3to2"]], ["del", "theorem", "tr_reaches", ["turing", "TM3to2"]], ["del", "def", "tr_stk", ["turing", "TM3to2"]], ["del", "theorem", "tr_supports", ["turing", "TM3to2"]], ["del", "def", "Γ'", ["turing", "TM3to2"]], ["del", "def", "Λ'", ["turing", "TM3to2"]], ["del", "def", "rev", ["turing", "dir"]], ["add", "theorem", "eval_maximal", ["turing"]], ["add", "theorem", "eval_maximal₁", ["turing"]], ["add", "def", "frespects", ["turing"]], ["add", "theorem", "frespects_eq", ["turing"]], ["add", "theorem", "fun_respects", ["turing"]], ["add", "theorem", "mem_eval", ["turing"]], ["add", "def", "reaches", ["turing"]], ["add", "theorem", "reaches_eval", ["turing"]], ["add", "theorem", "reaches_total", ["turing"]], ["add", "def", "reaches₁", ["turing"]], ["add", "theorem", "reaches₁_eq", ["turing"]], ["add", "def", "respects", ["turing"]], ["add", "theorem", "tr_eval'", ["turing"]], ["add", "theorem", "tr_eval", ["turing"]], ["add", "theorem", "tr_eval_dom", ["turing"]], ["add", "theorem", "tr_eval_rev", ["turing"]], ["add", "theorem", "tr_reaches", ["turing"]], ["add", "theorem", "tr_reaches_rev", ["turing"]], ["add", "theorem", "tr_reaches₁", ["turing"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "def", "insert_none", ["finset"]], ["add", "theorem", "mem_insert_none", ["finset"]], ["add", "theorem", "some_mem_insert_none", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "map_repeat", ["list"]], ["add", "theorem", "map_reverse_core", ["list"]], ["add", "theorem", "map_tail", ["list"]], ["mod", "theorem", "repeat_add", ["list"]], ["add", "theorem", "repeat_succ", ["list"]], ["add", "theorem", "reverse_core_eq", ["list"]], ["add", "theorem", "tail_repeat", ["list"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "eq_none_iff_forall_not_mem", ["option"]], ["add", "theorem", "mem_unique", ["option"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["mod", "theorem", "fix_induction", ["pfun"]]]}, {"oldPath": "logic/relation.lean", "newPath": "logic/relation.lean", "changes": [["add", "theorem", "total_of_right_unique", ["relation", "refl_trans_gen"]]]}]}, {"timestamp": 1530319015, "sha": "cfb5dfda", "message": "refactor(data/finset): use partial_order to define lattice structure", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}]}, {"timestamp": 1530318987, "sha": "ddbb8138", "message": "feat(data/fintype): finite choices, computably", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "def", "fin_choice", ["quotient"]], ["add", "def", "fin_choice_aux", ["quotient"]], ["add", "theorem", "fin_choice_aux_eq", ["quotient"]], ["add", "theorem", "fin_choice_eq", ["quotient"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["add", "theorem", "choice_eq", ["quotient"]]]}]}, {"timestamp": 1529957143, "sha": "a7b749f0", "message": "fix(order/boolean_algebra): neg_unique: replace rsimp proof, speed up build", "changes": [{"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": []}]}, {"timestamp": 1529905548, "sha": "97a1d1b7", "message": "feat(data/fintype): more fintype instances (#145)", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}]}, {"timestamp": 1529905406, "sha": "90aeb8e8", "message": "feat(tactic/solve_by_elim): writing a symm_apply tactic for solve_by_elim (#164)\nwriting a symm_apply tactic, and have solve_by_elim use it, per discussion with @SimonHudon", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1529905350, "sha": "a39c5ca6", "message": "correcting comment", "changes": [{"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": []}]}, {"timestamp": 1529905261, "sha": "0a13c050", "message": "feat(list/basic): map_subset\nfrom #166", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "map_subset", ["list"]]]}]}, {"timestamp": 1529904922, "sha": "4ec65f53", "message": "fix(data/list/basic): simplify last_append, speed up build", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}]}, {"timestamp": 1529904551, "sha": "516b254d", "message": "feat(tactic/ring2): alternative ring tactic", "changes": [{"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["mod", "theorem", "cast_sub'", ["num"]], ["add", "theorem", "to_znum_inj", ["num"]], ["add", "theorem", "abs_to_znum", ["znum"]]]}, {"oldPath": null, "newPath": "tactic/ring2.lean", "changes": [["add", "theorem", "correctness", ["tactic", "ring2"]], ["add", "def", "eval", ["tactic", "ring2", "csring_expr"]], ["add", "inductive", "csring_expr", ["tactic", "ring2"]], ["add", "def", "add", ["tactic", "ring2", "horner_expr"]], ["add", "def", "add_aux", ["tactic", "ring2", "horner_expr"]], ["add", "def", "add_const", ["tactic", "ring2", "horner_expr"]], ["add", "def", "atom", ["tactic", "ring2", "horner_expr"]], ["add", "def", "cseval", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_add", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_add_const", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_atom", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_horner'", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_mul", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_mul_const", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_of_csexpr", ["tactic", "ring2", "horner_expr"]], ["add", "theorem", "cseval_pow", ["tactic", "ring2", "horner_expr"]], ["add", "def", "horner'", ["tactic", "ring2", "horner_expr"]], ["add", "def", "inv", ["tactic", "ring2", "horner_expr"]], ["add", "def", "is_cs", ["tactic", "ring2", "horner_expr"]], ["add", "def", "mul", ["tactic", "ring2", "horner_expr"]], ["add", "def", "mul_aux", ["tactic", "ring2", "horner_expr"]], ["add", "def", "mul_const", ["tactic", "ring2", "horner_expr"]], ["add", "def", "neg", ["tactic", "ring2", "horner_expr"]], ["add", "def", "of_csexpr", ["tactic", "ring2", "horner_expr"]], ["add", "def", "pow", ["tactic", "ring2", "horner_expr"]], ["add", "def", "repr", ["tactic", "ring2", "horner_expr"]], ["add", "inductive", "horner_expr", ["tactic", "ring2"]], ["add", "def", "get", ["tactic", "ring2", "tree"]], ["add", "def", "index_of", ["tactic", "ring2", "tree"]], ["add", "def", "of_rbnode", ["tactic", "ring2", "tree"]], ["add", "inductive", "{u}", ["tactic", "ring2"]]]}]}, {"timestamp": 1529568412, "sha": "4082136e", "message": "feat(tactic/refine_struct): match `{ .. }` in subexpressions (#162)", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": [["add", "def", "my_bar", []], ["add", "def", "my_foo", []]]}]}, {"timestamp": 1529568327, "sha": "aa55cbaf", "message": "fix(order/lattice): typo", "changes": [{"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}]}, {"timestamp": 1529534538, "sha": "905345a2", "message": "fix(data/array/lemmas,...): fix build", "changes": [{"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1529530977, "sha": "a30b7c77", "message": "feat(data/string): fix string_lt, add repr for multiset, pnat", "changes": [{"oldPath": null, "newPath": "data/char.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "append_left", ["list", "lex"]], ["add", "theorem", "append_right", ["list", "lex"]], ["add", "theorem", "cons_iff", ["list", "lex"]], ["mod", "theorem", "imp", ["list", "lex"]], ["add", "theorem", "ne_iff", ["list", "lex"]], ["add", "theorem", "to_ne", ["list", "lex"]], ["mod", "inductive", "lex", ["list"]], ["del", "theorem", "lex_append_left", ["list"]], ["del", "theorem", "lex_append_right", ["list"]], ["del", "theorem", "lex_ne_iff", ["list"]], ["del", "theorem", "ne_of_lex_ne", ["list"]], ["add", "theorem", "nil_lt_cons", ["list"]], ["mod", "theorem", "reverse_cons'", ["list"]], ["mod", "theorem", "reverse_cons", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": []}, {"oldPath": null, "newPath": "data/string.lean", "changes": [["add", "theorem", "le_iff_to_list_le", ["string"]], ["add", "theorem", "lt_iff_to_list_lt", ["string"]], ["add", "def", "ltb", ["string"]], ["add", "theorem", "to_list_inj", ["string"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["mod", "theorem", "neg_trans", ["is_order_connected"]], ["mod", "theorem", "is_strict_weak_order_of_is_order_connected", []]]}]}, {"timestamp": 1529418742, "sha": "fbe1047b", "message": "feat(tactic/refine_struct): add `refine_struct` to use goal tags (#147)", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": []}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "def", "mmap₂", []]]}, {"oldPath": null, "newPath": "data/dlist/basic.lean", "changes": [["add", "def", "join", ["dlist"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1529402025, "sha": "2216460c", "message": "Merge branch 'master' of github.com:leanprover/mathlib", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "theorem", "id_map'", []], ["add", "theorem", "commutative_map", ["is_comm_applicative"]], ["add", "theorem", "map_map", []], ["add", "theorem", "map_seq", []], ["add", "theorem", "pure_id'_seq", []], ["add", "theorem", "seq_map_assoc", []]]}, {"oldPath": "computability/partrec.lean", "newPath": "computability/partrec.lean", "changes": [["mod", "theorem", "comp", ["partrec"]]]}]}, {"timestamp": 1529396755, "sha": "f22285c5", "message": "feat(algebra/pi_instances): add apply lemmas (#149)", "changes": [{"oldPath": "algebra/pi_instances.lean", "newPath": "algebra/pi_instances.lean", "changes": [["add", "theorem", "add_apply", ["pi"]], ["add", "theorem", "inv_apply", ["pi"]], ["add", "theorem", "mul_apply", ["pi"]], ["add", "theorem", "neg_apply", ["pi"]], ["add", "theorem", "one_apply", ["pi"]], ["add", "theorem", "smul_apply", ["pi"]], ["add", "theorem", "zero_apply", ["pi"]]]}]}, {"timestamp": 1529396389, "sha": "0a0e8a53", "message": "feat(tactic/ext): `ext` now applies to `prod`; fix `ext` on function types (#158)", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["mod", "theorem", "ext", ["prod"]], ["add", "theorem", "ext_iff", ["prod"]]]}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1529396272, "sha": "0087c2ce", "message": "feat(analysis/topology): quotient spaces and quotient maps (#155)\n* style(analysis/topology): simplify induced_mono and induced_sup\n* style(analysis/topology/topological_space): reorganize section constructions\n* feat(analysis/topology/topological_space): add more galois connection lemmas\n* feat(analysis/topology): quotient spaces and quotient maps", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "coinduced_compose", []], ["add", "theorem", "coinduced_id", []], ["add", "theorem", "continuous_quot_lift", []], ["add", "theorem", "continuous_quot_mk", []], ["add", "theorem", "continuous_quotient_lift", []], ["add", "theorem", "continuous_quotient_mk", []], ["del", "theorem", "induced_mono", []], ["del", "theorem", "induced_sup", []], ["add", "theorem", "continuous_iff", ["quotient_map"]], ["add", "def", "quotient_map", []], ["add", "theorem", "quotient_map_compose", []], ["add", "theorem", "quotient_map_id", []], ["add", "theorem", "quotient_map_of_quotient_map_compose", []], ["add", "theorem", "quotient_map_quot_mk", []], ["add", "theorem", "quotient_map_quotient_mk", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "coinduced_inf", []], ["add", "theorem", "coinduced_infi", []], ["add", "theorem", "coinduced_mono", []], ["add", "theorem", "coinduced_top", []], ["add", "theorem", "gc_induced_coinduced", []], ["add", "theorem", "induced_bot", []], ["add", "theorem", "induced_mono", []], ["add", "theorem", "induced_sup", []], ["add", "theorem", "induced_supr", []]]}]}, {"timestamp": 1529396011, "sha": "5e0b1378", "message": "feat (group_theory/coset): quotient by normal subgroup is a group", "changes": [{"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": []}]}, {"timestamp": 1529395959, "sha": "8609a3d3", "message": "feat(split_ifs): fail if no progress (#153)", "changes": [{"oldPath": "tactic/split_ifs.lean", "newPath": "tactic/split_ifs.lean", "changes": []}, {"oldPath": "tests/split_ifs.lean", "newPath": "tests/split_ifs.lean", "changes": []}]}, {"timestamp": 1529395885, "sha": "f8e39656", "message": "blah", "changes": [{"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}]}, {"timestamp": 1529395767, "sha": "4e2aea5b", "message": "feat(data/option): is_some and is_none simp theorems", "changes": [{"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "is_none_none", ["option"]], ["add", "theorem", "is_none_some", ["option"]], ["add", "theorem", "is_some_none", ["option"]], ["add", "theorem", "is_some_some", ["option"]]]}]}, {"timestamp": 1529395716, "sha": "e1f795d0", "message": "chore(data/list/basic): minor cleanup of find variables (#137)", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["del", "theorem", "id_map'", []], ["del", "theorem", "commutative_map", ["is_comm_applicative"]], ["del", "theorem", "map_map", []], ["del", "theorem", "map_seq", []], ["del", "theorem", "pure_id'_seq", []], ["del", "theorem", "seq_map_assoc", []]]}, {"oldPath": "computability/partrec.lean", "newPath": "computability/partrec.lean", "changes": [["mod", "theorem", "comp", ["partrec"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "def", "find", ["list"]], ["mod", "theorem", "find_cons_of_neg", ["list"]], ["mod", "theorem", "find_cons_of_pos", ["list"]], ["mod", "theorem", "find_eq_none", ["list"]], ["mod", "theorem", "find_mem", ["list"]], ["mod", "theorem", "find_nil", ["list"]], ["mod", "theorem", "find_some", ["list"]]]}]}, {"timestamp": 1529230807, "sha": "896455c3", "message": "feat(category): add functor_norm simp_attr, and class is_comm_applicative", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "theorem", "id_map'", []], ["add", "theorem", "commutative_map", ["is_comm_applicative"]], ["add", "theorem", "map_map", []], ["add", "theorem", "map_seq", []], ["add", "theorem", "pure_id'_seq", []], ["add", "theorem", "seq_map_assoc", []]]}, {"oldPath": "computability/partrec.lean", "newPath": "computability/partrec.lean", "changes": [["mod", "theorem", "comp", ["partrec"]]]}]}, {"timestamp": 1529170743, "sha": "85bc56ad", "message": "feat(computability/turing_machine): finish stack machine proof", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": [["del", "theorem", "move_until_left_reaches", ["turing", "TM2"]], ["add", "theorem", "move_until_left_reaches₁", ["turing", "TM2"]], ["del", "theorem", "move_until_right_reaches", ["turing", "TM2"]], ["add", "theorem", "move_until_right_reaches₁", ["turing", "TM2"]], ["add", "def", "reaches₁", ["turing", "TM2"]], ["add", "theorem", "reaches₁_step", ["turing", "TM2"]], ["mod", "def", "eval", ["turing", "TM3"]], ["mod", "def", "at_stack", ["turing", "TM3to2"]], ["del", "theorem", "at_stack_supports", ["turing", "TM3to2"]], ["del", "def", "pop", ["turing", "TM3to2"]], ["del", "def", "push", ["turing", "TM3to2"]], ["del", "def", "stack_val", ["turing", "TM3to2"]], ["mod", "def", "get", ["turing", "TM3to2", "stackel"]], ["mod", "def", "is_bottom", ["turing", "TM3to2", "stackel"]], ["mod", "def", "is_top", ["turing", "TM3to2", "stackel"]], ["mod", "inductive", "stackel", ["turing", "TM3to2"]], ["mod", "def", "stackel_equiv", ["turing", "TM3to2"]], ["add", "theorem", "tr_reaches", ["turing", "TM3to2"]], ["add", "def", "tr_stk", ["turing", "TM3to2"]], ["del", "def", "tr_tape", ["turing", "TM3to2"]], ["del", "def", "write_stack", ["turing", "TM3to2", "Γ'"]], ["add", "def", "Γ'", ["turing", "TM3to2"]], ["del", "structure", "Γ'", ["turing", "TM3to2"]], ["del", "def", "Γ'_equiv", ["turing", "TM3to2"]], ["add", "def", "dwrite", ["turing"]], ["add", "theorem", "dwrite_eq", ["turing"]], ["add", "theorem", "dwrite_ne", ["turing"]], ["add", "theorem", "dwrite_self", ["turing"]], ["mod", "theorem", "move_left_nth", ["turing", "tape"]], ["mod", "theorem", "move_right_nth", ["turing", "tape"]], ["add", "theorem", "nth_zero", ["turing", "tape"]], ["mod", "theorem", "write_nth", ["turing", "tape"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "map_eq_append_split", ["list"]], ["add", "theorem", "repeat_add", ["list"]]]}, {"oldPath": "group_theory/free_group.lean", "newPath": "group_theory/free_group.lean", "changes": []}, {"oldPath": "logic/relation.lean", "newPath": "logic/relation.lean", "changes": [["add", "theorem", "refl_trans_gen_iff_eq_or_trans_gen", ["relation"]], ["add", "theorem", "head'", ["relation", "trans_gen"]], ["add", "theorem", "head'_iff", ["relation", "trans_gen"]], ["add", "theorem", "head", ["relation", "trans_gen"]], ["add", "theorem", "tail'", ["relation", "trans_gen"]], ["add", "theorem", "tail'_iff", ["relation", "trans_gen"]], ["add", "theorem", "to_refl", ["relation", "trans_gen"]], ["add", "theorem", "trans", ["relation", "trans_gen"]], ["add", "theorem", "trans_left", ["relation", "trans_gen"]], ["add", "theorem", "trans_right", ["relation", "trans_gen"]], ["add", "inductive", "trans_gen", ["relation"]]]}]}, {"timestamp": 1529039468, "sha": "fba4d892", "message": "fix(analysis/topology/continuity): remove unused code", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "theorem", "continuous_apply", []]]}]}, {"timestamp": 1528853336, "sha": "fe590ca2", "message": "fix(data/num/lemmas): fix formatting", "changes": [{"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["mod", "theorem", "cast_one'", ["pos_num"]], ["mod", "theorem", "cast_one", ["pos_num"]], ["add", "theorem", "one_add", ["pos_num"]]]}]}, {"timestamp": 1528849943, "sha": "4f32a4bc", "message": "feat(data/num/basic): to_nat' function for efficient nat -> num in VM", "changes": [{"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": [["add", "def", "of_nat'", ["num"]], ["add", "def", "of_int'", ["znum"]]]}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["add", "theorem", "cast_zero'", ["num"]], ["add", "theorem", "of_nat'_eq", ["num"]], ["add", "theorem", "of_nat_cast", ["num"]], ["add", "theorem", "cast_one'", ["pos_num"]], ["add", "theorem", "cast_zero'", ["znum"]], ["add", "theorem", "of_int'_eq", ["znum"]], ["add", "theorem", "of_int_cast", ["znum"]], ["add", "theorem", "of_nat_cast", ["znum"]]]}]}, {"timestamp": 1528843028, "sha": "99101eac", "message": "feat(data/num/basic): add div,mod,gcd for num,znum", "changes": [{"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_lt_mul''", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_div", ["int"]], ["add", "theorem", "mem_to_nat'", ["int"]], ["mod", "theorem", "neg_succ_of_nat_div", ["int"]], ["mod", "theorem", "of_nat_div", ["int"]], ["add", "def", "to_nat'", ["int"]]]}, {"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": [["add", "def", "div2", ["num"]], ["add", "def", "div", ["num"]], ["add", "def", "gcd", ["num"]], ["add", "def", "gcd_aux", ["num"]], ["add", "def", "mod", ["num"]], ["add", "def", "nat_size", ["num"]], ["add", "def", "div'", ["pos_num"]], ["add", "def", "divmod", ["pos_num"]], ["add", "def", "divmod_aux", ["pos_num"]], ["add", "def", "mod'", ["pos_num"]], ["add", "def", "nat_size", ["pos_num"]], ["add", "def", "sqrt_aux1", ["pos_num"]], ["add", "def", "sqrt_aux", ["pos_num"]], ["add", "def", "abs", ["znum"]], ["add", "def", "div", ["znum"]], ["add", "def", "gcd", ["znum"]], ["add", "def", "mod", ["znum"]]]}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["add", "theorem", "cast_bit0", ["num"]], ["add", "theorem", "cast_bit1", ["num"]], ["add", "theorem", "cast_of_znum", ["num"]], ["add", "theorem", "cast_pos", ["num"]], ["add", "theorem", "div_to_nat", ["num"]], ["add", "theorem", "dvd_iff_mod_eq_zero", ["num"]], ["add", "theorem", "dvd_to_nat", ["num"]], ["add", "theorem", "gcd_to_nat", ["num"]], ["add", "theorem", "gcd_to_nat_aux", ["num"]], ["add", "theorem", "mem_of_znum'", ["num"]], ["add", "theorem", "mod_to_nat", ["num"]], ["add", "theorem", "nat_size_to_nat", ["num"]], ["mod", "theorem", "of_nat_to_znum", ["num"]], ["mod", "theorem", "of_nat_to_znum_neg", ["num"]], ["add", "theorem", "of_znum'_to_nat", ["num"]], ["add", "theorem", "of_znum_to_nat", ["num"]], ["add", "theorem", "size_eq_nat_size", ["num"]], ["add", "theorem", "size_to_nat", ["num"]], ["add", "theorem", "sub_to_nat", ["num"]], ["add", "theorem", "to_nat_to_int", ["num"]], ["mod", "theorem", "cast_inj", ["pos_num"]], ["add", "theorem", "div'_to_nat", ["pos_num"]], ["add", "theorem", "divmod_to_nat", ["pos_num"]], ["add", "theorem", "divmod_to_nat_aux", ["pos_num"]], ["add", "theorem", "mod'_to_nat", ["pos_num"]], ["add", "theorem", "nat_size_pos", ["pos_num"]], ["add", "theorem", "nat_size_to_nat", ["pos_num"]], ["add", "theorem", "size_eq_nat_size", ["pos_num"]], ["add", "theorem", "to_int_eq_succ_pred", ["pos_num"]], ["add", "theorem", "to_nat_eq_succ_pred", ["pos_num"]], ["add", "theorem", "to_nat_to_int", ["pos_num"]], ["add", "theorem", "abs_to_nat", ["znum"]], ["add", "theorem", "div_to_int", ["znum"]], ["add", "theorem", "dvd_iff_mod_eq_zero", ["znum"]], ["add", "theorem", "dvd_to_int", ["znum"]], ["add", "theorem", "gcd_to_nat", ["znum"]], ["add", "theorem", "mod_to_int", ["znum"]]]}]}, {"timestamp": 1528843028, "sha": "3c554a34", "message": "refactor(data/equiv): move subtype.map", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "def", "decidable_eq_of_equiv", ["equiv"]], ["mod", "def", "inhabited_of_equiv", ["equiv"]], ["del", "def", "map", ["subtype"]], ["del", "theorem", "map_comp", ["subtype"]], ["del", "theorem", "map_id", ["subtype"]]]}, {"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": [["add", "def", "map", ["subtype"]], ["add", "theorem", "map_comp", ["subtype"]], ["add", "theorem", "map_id", ["subtype"]]]}]}, {"timestamp": 1528843028, "sha": "0865bce5", "message": "fix(tactic/ring): fix normalization bugs\nfixes #84", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": [["mod", "theorem", "horner_add_horner_gt", ["tactic", "ring"]], ["mod", "theorem", "horner_add_horner_lt", ["tactic", "ring"]]]}]}, {"timestamp": 1528725937, "sha": "90fc9125", "message": "feat(data/list): add parametricity for perm", "changes": [{"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "forall₂_comp_perm_eq_perm_comp_forall₂", ["list"]], ["add", "theorem", "perm_comp_forall₂", ["list"]], ["add", "theorem", "perm_comp_perm", ["list"]], ["add", "theorem", "rel_perm", ["list"]], ["add", "theorem", "rel_perm_imp", ["list"]]]}]}, {"timestamp": 1528725937, "sha": "9546e625", "message": "feat(data/list): add parametricity rules for list operations", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "bi_unique_forall₂", ["list"]], ["add", "theorem", "filter_map_cons", ["list"]], ["add", "theorem", "forall₂_cons_left_iff", ["list"]], ["add", "theorem", "forall₂_cons_right_iff", ["list"]], ["add", "theorem", "forall₂_eq_eq_eq", ["list"]], ["add", "theorem", "forall₂_flip", ["list"]], ["add", "theorem", "forall₂_map_left_iff", ["list"]], ["add", "theorem", "forall₂_map_right_iff", ["list"]], ["del", "theorem", "forall₂_nil_left", ["list"]], ["add", "theorem", "forall₂_nil_left_iff", ["list"]], ["del", "theorem", "forall₂_nil_right", ["list"]], ["add", "theorem", "forall₂_nil_right_iff", ["list"]], ["add", "theorem", "forall₂_refl", ["list"]], ["add", "theorem", "forall₂_same", ["list"]], ["add", "theorem", "left_unique_forall₂", ["list"]], ["add", "theorem", "rel_append", ["list"]], ["add", "theorem", "rel_bind", ["list"]], ["add", "theorem", "rel_filter", ["list"]], ["add", "theorem", "rel_filter_map", ["list"]], ["add", "theorem", "rel_foldl", ["list"]], ["add", "theorem", "rel_foldr", ["list"]], ["add", "theorem", "rel_join", ["list"]], ["add", "theorem", "rel_map", ["list"]], ["add", "theorem", "rel_mem", ["list"]], ["add", "theorem", "rel_nodup", ["list"]], ["add", "theorem", "rel_prod", ["list"]], ["add", "theorem", "rel_sections", ["list"]], ["add", "theorem", "right_unique_forall₂", ["list"]]]}]}, {"timestamp": 1528725909, "sha": "1416ebbb", "message": "feat(data/option): add relator option.rel", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "inductive", "rel", ["option"]]]}]}, {"timestamp": 1528725884, "sha": "205e3b4e", "message": "feat(logic/relation): add relation composition, map, and bi_unique", "changes": [{"oldPath": "logic/relation.lean", "newPath": "logic/relation.lean", "changes": [["add", "def", "comp", ["relation"]], ["add", "theorem", "comp_assoc", ["relation"]], ["add", "theorem", "comp_eq", ["relation"]], ["add", "theorem", "comp_iff", ["relation"]], ["add", "theorem", "eq_comp", ["relation"]], ["add", "theorem", "flip_comp", ["relation"]], ["add", "theorem", "iff_comp", ["relation"]]]}, {"oldPath": null, "newPath": "logic/relator.lean", "changes": [["add", "def", "bi_unique", ["relator"]], ["add", "theorem", "left_unique_flip", ["relator"]], ["add", "theorem", "rel_and", ["relator"]], ["add", "theorem", "rel_eq", ["relator"]], ["add", "theorem", "rel_iff", ["relator"]], ["add", "theorem", "rel_or", ["relator"]]]}]}, {"timestamp": 1527935781, "sha": "344192a9", "message": "refactor(computability): move out of data directory", "changes": [{"oldPath": "data/computability/halting.lean", "newPath": "computability/halting.lean", "changes": []}, {"oldPath": "data/computability/partrec.lean", "newPath": "computability/partrec.lean", "changes": []}, {"oldPath": "data/computability/partrec_code.lean", "newPath": "computability/partrec_code.lean", "changes": []}, {"oldPath": "data/computability/primrec.lean", "newPath": "computability/primrec.lean", "changes": []}, {"oldPath": "data/computability/turing_machine.lean", "newPath": "computability/turing_machine.lean", "changes": []}]}, {"timestamp": 1527935776, "sha": "56035953", "message": "feat(computability/turing_machine): proving the TM reductions", "changes": [{"oldPath": "data/computability/turing_machine.lean", "newPath": "data/computability/turing_machine.lean", "changes": [["add", "structure", "cfg", ["turing", "TM0"]], ["add", "def", "eval", ["turing", "TM0"]], ["add", "def", "machine", ["turing", "TM0"]], ["del", "structure", "machine", ["turing", "TM0"]], ["add", "def", "reaches", ["turing", "TM0"]], ["del", "structure", "state", ["turing", "TM0"]], ["mod", "def", "step", ["turing", "TM0"]], ["add", "structure", "cfg", ["turing", "TM1"]], ["add", "def", "eval", ["turing", "TM1"]], ["add", "def", "reaches", ["turing", "TM1"]], ["del", "structure", "state", ["turing", "TM1"]], ["mod", "def", "step", ["turing", "TM1"]], ["mod", "theorem", "step_supports", ["turing", "TM1"]], ["add", "theorem", "stmts_supports_stmt", ["turing", "TM1"]], ["add", "theorem", "stmts_trans", ["turing", "TM1"]], ["mod", "theorem", "stmts₁_self", ["turing", "TM1"]], ["add", "theorem", "stmts₁_supports_stmt_mono", ["turing", "TM1"]], ["add", "theorem", "stmts₁_trans", ["turing", "TM1"]], ["mod", "def", "supports", ["turing", "TM1"]], ["mod", "def", "supports_stmt", ["turing", "TM1"]], ["add", "def", "tr'", ["turing", "TM1to0"]], ["add", "def", "tr", ["turing", "TM1to0"]], ["add", "def", "tr_cfg", ["turing", "TM1to0"]], ["add", "theorem", "tr_reaches", ["turing", "TM1to0"]], ["add", "theorem", "tr_supports", ["turing", "TM1to0"]], ["del", "def", "trans", ["turing", "TM1to0"]], ["del", "def", "translate", ["turing", "TM1to0"]], ["add", "def", "Λ'", ["turing", "TM1to0"]], ["add", "structure", "cfg", ["turing", "TM2"]], ["add", "def", "eval", ["turing", "TM2"]], ["add", "theorem", "move_until_left_reaches", ["turing", "TM2"]], ["add", "theorem", "move_until_right_reaches", ["turing", "TM2"]], ["add", "def", "reaches", ["turing", "TM2"]], ["del", "structure", "state", ["turing", "TM2"]], ["mod", "def", "step", ["turing", "TM2"]], ["mod", "def", "step_aux", ["turing", "TM2"]], ["add", "theorem", "step_supports", ["turing", "TM2"]], ["add", "theorem", "stmts_supports_stmt", ["turing", "TM2"]], ["add", "theorem", "stmts_trans", ["turing", "TM2"]], ["add", "theorem", "stmts₁_self", ["turing", "TM2"]], ["add", "theorem", "stmts₁_supports_stmt_mono", ["turing", "TM2"]], ["add", "theorem", "stmts₁_trans", ["turing", "TM2"]], ["add", "def", "supports", ["turing", "TM2"]], ["add", "def", "supports_stmt", ["turing", "TM2"]], ["add", "def", "tr'", ["turing", "TM2to1"]], ["add", "def", "tr", ["turing", "TM2to1"]], ["add", "def", "tr_cfg", ["turing", "TM2to1"]], ["add", "theorem", "tr_reaches", ["turing", "TM2to1"]], ["add", "theorem", "tr_supports", ["turing", "TM2to1"]], ["del", "def", "translate'", ["turing", "TM2to1"]], ["del", "def", "translate", ["turing", "TM2to1"]], ["add", "def", "Λ'", ["turing", "TM2to1"]], ["add", "structure", "cfg", ["turing", "TM3"]], ["add", "def", "eval", ["turing", "TM3"]], ["del", "structure", "machine", ["turing", "TM3"]], ["add", "def", "reaches", ["turing", "TM3"]], ["del", "structure", "state", ["turing", "TM3"]], ["mod", "def", "step", ["turing", "TM3"]], ["mod", "def", "step_aux", ["turing", "TM3"]], ["add", "theorem", "step_supports", ["turing", "TM3"]], ["add", "theorem", "stmts_supports_stmt", ["turing", "TM3"]], ["add", "theorem", "stmts_trans", ["turing", "TM3"]], ["add", "theorem", "stmts₁_self", ["turing", "TM3"]], ["add", "theorem", "stmts₁_supports_stmt_mono", ["turing", "TM3"]], ["add", "theorem", "stmts₁_trans", ["turing", "TM3"]], ["add", "def", "supports", ["turing", "TM3"]], ["add", "def", "supports_stmt", ["turing", "TM3"]], ["del", "structure", "alph", ["turing", "TM3to2"]], ["add", "theorem", "at_stack_supports", ["turing", "TM3to2"]], ["add", "def", "stack_val", ["turing", "TM3to2"]], ["add", "def", "tr", ["turing", "TM3to2"]], ["add", "inductive", "tr_cfg", ["turing", "TM3to2"]], ["add", "theorem", "tr_supports", ["turing", "TM3to2"]], ["add", "def", "tr_tape", ["turing", "TM3to2"]], ["del", "def", "translate", ["turing", "TM3to2"]], ["add", "def", "write_stack", ["turing", "TM3to2", "Γ'"]], ["add", "structure", "Γ'", ["turing", "TM3to2"]], ["add", "def", "Γ'_equiv", ["turing", "TM3to2"]], ["add", "def", "Λ'", ["turing", "TM3to2"]], ["add", "def", "eval", ["turing"]], ["del", "def", "move_tape", ["turing"]], ["add", "def", "mk", ["turing", "tape"]], ["add", "def", "move", ["turing", "tape"]], ["add", "theorem", "move_left_nth", ["turing", "tape"]], ["add", "theorem", "move_right_nth", ["turing", "tape"]], ["add", "def", "nth", ["turing", "tape"]], ["add", "def", "write", ["turing", "tape"]], ["add", "theorem", "write_nth", ["turing", "tape"]], ["add", "theorem", "write_self", ["turing", "tape"]], ["add", "def", "tape", ["turing"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "def", "d_array_equiv_fin", ["equiv"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "pi_insert", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_option", ["fintype"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["del", "theorem", "exists_eq'", []], ["mod", "theorem", "exists_eq", []], ["add", "theorem", "exists_eq_left'", []], ["add", "theorem", "exists_eq_left", []]]}, {"oldPath": "logic/relation.lean", "newPath": "logic/relation.lean", "changes": [["add", "theorem", "refl_trans_gen_closed", ["relation"]], ["add", "theorem", "refl_trans_gen_eq_self", ["relation"]], ["add", "theorem", "refl_trans_gen_idem", ["relation"]], ["add", "theorem", "refl_trans_gen_lift'", ["relation"]], ["del", "theorem", "refl_trans_gen_refl_trans_gen", ["relation"]]]}]}, {"timestamp": 1527893369, "sha": "dd1c5586", "message": "feat(algebra/ordered_group): with_bot as an ordered monoid", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}]}, {"timestamp": 1527893329, "sha": "372bdab5", "message": "feat(algebra/archimedean): some more floor thms", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": [["add", "theorem", "floor_one", []], ["add", "theorem", "floor_zero", []], ["add", "theorem", "cast_floor", ["rat"]]]}]}, {"timestamp": 1527735624, "sha": "b3752640", "message": "feat(computability/turing_machine): add TMs and reductions", "changes": [{"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": []}, {"oldPath": "data/computability/halting.lean", "newPath": "data/computability/halting.lean", "changes": []}, {"oldPath": null, "newPath": "data/computability/turing_machine.lean", "changes": [["add", "structure", "machine", ["turing", "TM0"]], ["add", "structure", "state", ["turing", "TM0"]], ["add", "def", "step", ["turing", "TM0"]], ["add", "theorem", "step_supports", ["turing", "TM0"]], ["add", "inductive", "stmt", ["turing", "TM0"]], ["add", "def", "supports", ["turing", "TM0"]], ["add", "structure", "state", ["turing", "TM1"]], ["add", "def", "step", ["turing", "TM1"]], ["add", "theorem", "step_supports", ["turing", "TM1"]], ["add", "inductive", "stmt", ["turing", "TM1"]], ["add", "theorem", "stmts₁_self", ["turing", "TM1"]], ["add", "def", "supports", ["turing", "TM1"]], ["add", "def", "supports_stmt", ["turing", "TM1"]], ["add", "def", "trans", ["turing", "TM1to0"]], ["add", "def", "translate", ["turing", "TM1to0"]], ["add", "structure", "state", ["turing", "TM2"]], ["add", "def", "step", ["turing", "TM2"]], ["add", "def", "step_aux", ["turing", "TM2"]], ["add", "inductive", "stmt", ["turing", "TM2"]], ["add", "def", "translate'", ["turing", "TM2to1"]], ["add", "def", "translate", ["turing", "TM2to1"]], ["add", "structure", "machine", ["turing", "TM3"]], ["add", "structure", "state", ["turing", "TM3"]], ["add", "def", "step", ["turing", "TM3"]], ["add", "def", "step_aux", ["turing", "TM3"]], ["add", "inductive", "stmt", ["turing", "TM3"]], ["add", "structure", "alph", ["turing", "TM3to2"]], ["add", "def", "at_stack", ["turing", "TM3to2"]], ["add", "def", "pop", ["turing", "TM3to2"]], ["add", "def", "push", ["turing", "TM3to2"]], ["add", "def", "get", ["turing", "TM3to2", "stackel"]], ["add", "def", "is_bottom", ["turing", "TM3to2", "stackel"]], ["add", "def", "is_top", ["turing", "TM3to2", "stackel"]], ["add", "inductive", "stackel", ["turing", "TM3to2"]], ["add", "def", "stackel_equiv", ["turing", "TM3to2"]], ["add", "def", "translate", ["turing", "TM3to2"]], ["add", "def", "rev", ["turing", "dir"]], ["add", "inductive", "dir", ["turing"]], ["add", "def", "move_tape", ["turing"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["mod", "def", "real", []]]}, {"oldPath": "data/sum.lean", "newPath": "data/sum.lean", "changes": []}]}, {"timestamp": 1527694183, "sha": "bdd54acd", "message": "feat(data/computablility): reduced partrec", "changes": [{"oldPath": "data/computability/halting.lean", "newPath": "data/computability/halting.lean", "changes": [["add", "theorem", "comp'", ["nat", "partrec'"]], ["add", "theorem", "comp₁", ["nat", "partrec'"]], ["add", "theorem", "head", ["nat", "partrec'"]], ["add", "theorem", "idv", ["nat", "partrec'"]], ["add", "theorem", "of_eq", ["nat", "partrec'"]], ["add", "theorem", "of_part", ["nat", "partrec'"]], ["add", "theorem", "of_prim", ["nat", "partrec'"]], ["add", "theorem", "part_iff", ["nat", "partrec'"]], ["add", "theorem", "part_iff₁", ["nat", "partrec'"]], ["add", "theorem", "part_iff₂", ["nat", "partrec'"]], ["add", "theorem", "rfind_opt", ["nat", "partrec'"]], ["add", "theorem", "tail", ["nat", "partrec'"]], ["add", "theorem", "to_part", ["nat", "partrec'"]], ["add", "theorem", "prim", ["nat", "partrec'", "vec"]], ["add", "def", "vec", ["nat", "partrec'"]], ["add", "theorem", "vec_iff", ["nat", "partrec'"]], ["add", "inductive", "partrec'", ["nat"]]]}, {"oldPath": "data/computability/partrec.lean", "newPath": "data/computability/partrec.lean", "changes": [["add", "theorem", "fin_app", ["computable"]], ["add", "theorem", "list_of_fn", ["computable"]], ["add", "theorem", "vector_cons", ["computable"]], ["add", "theorem", "vector_head", ["computable"]], ["add", "theorem", "vector_length", ["computable"]], ["add", "theorem", "vector_nth'", ["computable"]], ["add", "theorem", "vector_nth", ["computable"]], ["add", "theorem", "vector_of_fn'", ["computable"]], ["add", "theorem", "vector_of_fn", ["computable"]], ["add", "theorem", "vector_tail", ["computable"]], ["add", "theorem", "vector_to_list", ["computable"]], ["add", "theorem", "vector_m_of_fn", ["partrec"]], ["add", "theorem", "m_of_fn_roption_some", ["vector"]]]}, {"oldPath": "data/computability/partrec_code.lean", "newPath": "data/computability/partrec_code.lean", "changes": [["add", "theorem", "eval_eq_rfind_opt", ["nat", "partrec", "code"]]]}, {"oldPath": "data/computability/primrec.lean", "newPath": "data/computability/primrec.lean", "changes": [["mod", "theorem", "idv", ["nat", "primrec'"]], ["del", "def", "primvec", ["nat", "primrec'"]], ["del", "theorem", "primvec_iff", ["nat", "primrec'"]], ["add", "def", "vec", ["nat", "primrec'"]], ["add", "theorem", "vec_iff", ["nat", "primrec'"]]]}, {"oldPath": "data/vector2.lean", "newPath": "data/vector2.lean", "changes": [["add", "theorem", "m_of_fn_pure", ["vector"]], ["add", "theorem", "mmap_cons", ["vector"]], ["add", "theorem", "mmap_nil", ["vector"]], ["add", "def", "{u}", ["vector"]]]}]}, {"timestamp": 1527620269, "sha": "00a2eb41", "message": "feat(algebra/group_power): mul_two_nonneg", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "pow_two_nonneg", []]]}]}, {"timestamp": 1527614424, "sha": "40bd9478", "message": "feat(computability/primrec): add traditional primrec definition\nThis shows that the pairing function with its square roots does not give any additional power.", "changes": [{"oldPath": "data/computability/primrec.lean", "newPath": "data/computability/primrec.lean", "changes": [["add", "theorem", "add", ["nat", "primrec'"]], ["add", "theorem", "comp'", ["nat", "primrec'"]], ["add", "theorem", "comp₁", ["nat", "primrec'"]], ["add", "theorem", "comp₂", ["nat", "primrec'"]], ["add", "theorem", "const", ["nat", "primrec'"]], ["add", "theorem", "head", ["nat", "primrec'"]], ["add", "theorem", "idv", ["nat", "primrec'"]], ["add", "theorem", "if_lt", ["nat", "primrec'"]], ["add", "theorem", "mkpair", ["nat", "primrec'"]], ["add", "theorem", "mul", ["nat", "primrec'"]], ["add", "theorem", "of_eq", ["nat", "primrec'"]], ["add", "theorem", "of_prim", ["nat", "primrec'"]], ["add", "theorem", "prec'", ["nat", "primrec'"]], ["add", "theorem", "pred", ["nat", "primrec'"]], ["add", "theorem", "prim_iff", ["nat", "primrec'"]], ["add", "theorem", "prim_iff₁", ["nat", "primrec'"]], ["add", "theorem", "prim_iff₂", ["nat", "primrec'"]], ["add", "def", "primvec", ["nat", "primrec'"]], ["add", "theorem", "primvec_iff", ["nat", "primrec'"]], ["add", "theorem", "sqrt", ["nat", "primrec'"]], ["add", "theorem", "sub", ["nat", "primrec'"]], ["add", "theorem", "tail", ["nat", "primrec'"]], ["add", "theorem", "to_prim", ["nat", "primrec'"]], ["add", "theorem", "unpair₁", ["nat", "primrec'"]], ["add", "theorem", "unpair₂", ["nat", "primrec'"]], ["add", "inductive", "primrec'", ["nat"]], ["add", "def", "subtype", ["primcodable"]], ["add", "theorem", "fin_app", ["primrec"]], ["add", "theorem", "fin_curry", ["primrec"]], ["add", "theorem", "fin_curry₁", ["primrec"]], ["add", "theorem", "fin_succ", ["primrec"]], ["add", "theorem", "fin_val", ["primrec"]], ["add", "theorem", "fin_val_iff", ["primrec"]], ["add", "theorem", "list_head'", ["primrec"]], ["add", "theorem", "list_head", ["primrec"]], ["add", "theorem", "list_of_fn", ["primrec"]], ["add", "theorem", "list_tail", ["primrec"]], ["add", "theorem", "nat_lt", ["primrec"]], ["add", "theorem", "nat_sqrt", ["primrec"]], ["add", "theorem", "of_equiv", ["primrec"]], ["add", "theorem", "of_equiv_iff", ["primrec"]], ["add", "theorem", "of_equiv_symm", ["primrec"]], ["add", "theorem", "of_equiv_symm_iff", ["primrec"]], ["add", "theorem", "subtype_val", ["primrec"]], ["add", "theorem", "subtype_val_iff", ["primrec"]], ["add", "theorem", "vector_cons", ["primrec"]], ["add", "theorem", "vector_head", ["primrec"]], ["add", "theorem", "vector_length", ["primrec"]], ["add", "theorem", "vector_nth'", ["primrec"]], ["add", "theorem", "vector_nth", ["primrec"]], ["add", "theorem", "vector_of_fn'", ["primrec"]], ["add", "theorem", "vector_of_fn", ["primrec"]], ["add", "theorem", "vector_tail", ["primrec"]], ["add", "theorem", "vector_to_list", ["primrec"]], ["add", "theorem", "vector_to_list_iff", ["primrec"]]]}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "def", "array_equiv_fin", ["equiv"]], ["add", "def", "d_array_equiv_fin", ["equiv"]], ["add", "def", "fin_equiv_subtype", ["equiv"]], ["add", "def", "vector_equiv_array", ["equiv"]], ["add", "def", "vector_equiv_fin", ["equiv"]]]}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "cases", ["fin"]], ["add", "theorem", "cases_succ", ["fin"]], ["add", "theorem", "cases_zero", ["fin"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "array_eq_of_fn", ["list"]], ["mod", "theorem", "cons_head_tail", ["list"]], ["add", "def", "head'", ["list"]], ["mod", "theorem", "head_append", ["list"]], ["mod", "theorem", "head_cons", ["list"]], ["add", "theorem", "head_eq_head'", ["list"]], ["add", "theorem", "length_of_fn", ["list"]], ["add", "theorem", "length_of_fn_aux", ["list"]], ["add", "theorem", "nth_le_of_fn", ["list"]], ["add", "theorem", "nth_of_fn", ["list"]], ["add", "theorem", "nth_of_fn_aux", ["list"]], ["add", "def", "of_fn", ["list"]], ["add", "def", "of_fn_aux", ["list"]], ["add", "theorem", "of_fn_nth_le", ["list"]], ["add", "def", "of_fn_nth_val", ["list"]], ["add", "theorem", "of_fn_succ", ["list"]], ["add", "theorem", "of_fn_zero", ["list"]]]}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": [["add", "theorem", "eq_sqrt", ["nat"]], ["add", "theorem", "sqrt_succ_le_succ_sqrt", ["nat"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "image_empty", ["set"]], ["mod", "theorem", "image_id", ["set"]]]}, {"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": [["add", "theorem", "ext", ["subtype"]], ["add", "theorem", "val_injective", ["subtype"]]]}, {"oldPath": null, "newPath": "data/vector2.lean", "changes": [["add", "theorem", "head'_to_list", ["vector"]], ["add", "theorem", "head_of_fn", ["vector"]], ["add", "theorem", "mk_to_list", ["vector"]], ["add", "theorem", "nth_cons_succ", ["vector"]], ["add", "theorem", "nth_cons_zero", ["vector"]], ["add", "theorem", "nth_eq_nth_le", ["vector"]], ["add", "theorem", "nth_of_fn", ["vector"]], ["add", "theorem", "nth_tail", ["vector"]], ["add", "theorem", "nth_zero", ["vector"]], ["add", "theorem", "of_fn_nth", ["vector"]], ["add", "theorem", "tail_of_fn", ["vector"]], ["add", "theorem", "to_list_injective", ["vector"]], ["add", "theorem", "to_list_of_fn", ["vector"]]]}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": []}]}, {"timestamp": 1527614424, "sha": "5fea16e6", "message": "feat(category/basic): $< notation for reversed application", "changes": [{"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": []}]}, {"timestamp": 1527608934, "sha": "a2d2537c", "message": "feat(analysis/probability_mass_function): add bernoulli", "changes": [{"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": []}, {"oldPath": "analysis/probability_mass_function.lean", "newPath": "analysis/probability_mass_function.lean", "changes": [["add", "def", "bernoulli", ["pmf"]], ["add", "def", "of_fintype", ["pmf"]]]}]}, {"timestamp": 1527606523, "sha": "4f9e951f", "message": "feat(analysis): add probability mass functions", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "sum_nat_cast", ["finset"]], ["add", "theorem", "to_finset_sum_count_eq", ["multiset"]]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["add", "theorem", "coe_eq_coe", ["ennreal"]], ["add", "theorem", "coe_mul", ["ennreal"]], ["add", "theorem", "coe_one", ["ennreal"]], ["add", "theorem", "tendsto_coe_iff", ["ennreal"]], ["add", "theorem", "tendsto_of_real_iff", ["ennreal"]], ["add", "theorem", "has_sum_of_nonneg_of_le", []], ["add", "theorem", "has_sum_of_le", ["nnreal"]]]}, {"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": [["add", "theorem", "has_sum_coe", ["nnreal"]], ["add", "theorem", "is_sum_coe", ["nnreal"]], ["add", "theorem", "sum_coe", ["nnreal"]], ["add", "theorem", "tendsto_coe", ["nnreal"]]]}, {"oldPath": null, "newPath": "analysis/probability_mass_function.lean", "changes": [["add", "def", "bind", ["pmf"]], ["add", "theorem", "bind_apply", ["pmf"]], ["add", "theorem", "bind_bind", ["pmf"]], ["add", "theorem", "bind_comm", ["pmf"]], ["add", "theorem", "bind_pure", ["pmf"]], ["add", "theorem", "bind_pure_comp", ["pmf"]], ["add", "theorem", "coe_bind_apply", ["pmf"]], ["add", "theorem", "coe_le_one", ["pmf"]], ["add", "theorem", "has_sum_coe", ["pmf"]], ["add", "theorem", "is_sum_coe_one", ["pmf"]], ["add", "def", "map", ["pmf"]], ["add", "theorem", "map_comp", ["pmf"]], ["add", "theorem", "map_id", ["pmf"]], ["add", "def", "of_multiset", ["pmf"]], ["add", "def", "pure", ["pmf"]], ["add", "theorem", "pure_apply", ["pmf"]], ["add", "theorem", "pure_bind", ["pmf"]], ["add", "theorem", "pure_map", ["pmf"]], ["add", "def", "seq", ["pmf"]], ["add", "def", "support", ["pmf"]], ["add", "theorem", "tsum_coe", ["pmf"]], ["add", "def", "{u}", []]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": [["add", "theorem", "is_sum_iff_of_has_sum", []], ["add", "theorem", "is_sum_ite", []], ["add", "theorem", "tsum_ite", []]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "to_finset_cons", ["multiset"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "count_eq_zero_of_not_mem", ["multiset"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "le_of_map_le_map_inj_iff", ["filter"]]]}]}, {"timestamp": 1527567594, "sha": "eaa1b931", "message": "feat(data.list.basic): forall_mem_singleton, forall_mem_append", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "forall_mem_append", ["list"]], ["add", "theorem", "forall_mem_singleton", ["list"]]]}]}, {"timestamp": 1527565666, "sha": "a6be5235", "message": "feat(data/list/basic): map_erase, map_diff, map_union", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "map_diff", ["list"]], ["add", "theorem", "map_erase", ["list"]], ["add", "theorem", "map_foldl_erase", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "map_union", ["multiset"]]]}]}, {"timestamp": 1527521779, "sha": "00220680", "message": "fix(tactics/wlog): allow union instead of disjunction; assume disjunction in strict associcated order; fix discharger", "changes": [{"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": []}, {"oldPath": "tactic/wlog.lean", "newPath": "tactic/wlog.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1527517841, "sha": "1dbd8c6d", "message": "feat(data/equiv): image, preimage under equivalences; simp rules for perm.val (#102)", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "left_inverse_symm", ["equiv"]], ["add", "theorem", "mul_val", ["equiv", "perm"]], ["add", "theorem", "one_val", ["equiv", "perm"]], ["add", "theorem", "right_inverse_symm", ["equiv"]], ["add", "theorem", "symm_image_image", ["equiv"]]]}]}, {"timestamp": 1527461442, "sha": "c53f9f17", "message": "refactor(algebra/euclidean_domain): clean up proofs", "changes": [{"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": [["add", "theorem", "div_add_mod", ["euclidean_domain"]], ["mod", "theorem", "div_self", ["euclidean_domain"]], ["del", "theorem", "dvd_mod", ["euclidean_domain"]], ["add", "theorem", "dvd_mod_iff", ["euclidean_domain"]], ["del", "theorem", "dvd_mod_self", ["euclidean_domain"]], ["mod", "theorem", "induction", ["euclidean_domain", "gcd"]], ["del", "theorem", "gcd_decreasing", ["euclidean_domain"]], ["mod", "theorem", "gcd_dvd", ["euclidean_domain"]], ["add", "theorem", "gcd_eq_left", ["euclidean_domain"]], ["del", "theorem", "gcd_next", ["euclidean_domain"]], ["add", "theorem", "gcd_val", ["euclidean_domain"]], ["add", "theorem", "mod_eq_zero", ["euclidean_domain"]], ["del", "theorem", "mod_lt", ["euclidean_domain"]], ["mod", "theorem", "mod_zero", ["euclidean_domain"]], ["add", "theorem", "mul_div_cancel", ["euclidean_domain"]], ["add", "theorem", "mul_div_cancel_left", ["euclidean_domain"]], ["del", "theorem", "neq_zero_lt_mod_lt", ["euclidean_domain"]], ["add", "theorem", "val_le_mul_right", ["euclidean_domain"]], ["add", "theorem", "val_mod_lt", ["euclidean_domain"]], ["mod", "theorem", "zero_div", ["euclidean_domain"]]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["del", "theorem", "single_induction_on", ["finsupp"]]]}]}, {"timestamp": 1527450476, "sha": "9f0d1d8c", "message": "fix(analysis/limits): fix ambiguous import (fin)set.range", "changes": [{"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}]}, {"timestamp": 1527444930, "sha": "ad92a9ba", "message": "feat(algebra/group,...): add with_zero, with_one structures\nother ways to add an element to an algebraic structure:\n* Add a top or bottom to an order (with_top, with_bot)\n* add a unit to a semigroup (with_zero, with_one)\n* add a zero to a multiplicative semigroup (with_zero)\n* add an infinite element to an additive semigroup (with_top)", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "def", "with_one", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "def", "ordered_comm_monoid", ["with_zero"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["del", "theorem", "some_le", ["lattice", "with_bot"]], ["del", "theorem", "some_le_some", ["lattice", "with_bot"]], ["del", "def", "with_bot", ["lattice"]], ["del", "theorem", "le_some", ["lattice", "with_top"]], ["del", "theorem", "some_le_some", ["lattice", "with_top"]], ["del", "def", "with_top", ["lattice"]], ["add", "theorem", "coe_le", ["with_bot"]], ["add", "theorem", "coe_le_coe", ["with_bot"]], ["add", "theorem", "some_le_some", ["with_bot"]], ["add", "theorem", "some_lt_some", ["with_bot"]], ["add", "def", "with_bot", []], ["add", "theorem", "coe_le_coe", ["with_top"]], ["add", "theorem", "le_coe", ["with_top"]], ["add", "theorem", "some_le_some", ["with_top"]], ["add", "theorem", "some_lt_some", ["with_top"]], ["add", "def", "with_top", []]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}]}, {"timestamp": 1527444930, "sha": "431d997a", "message": "feat(nat/basic): mod_mod", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "mod_mod", ["nat"]]]}, {"oldPath": "data/nat/modeq.lean", "newPath": "data/nat/modeq.lean", "changes": [["add", "theorem", "mod_modeq", ["nat", "modeq"]]]}]}, {"timestamp": 1527444930, "sha": "4c1a8268", "message": "refactor(data/set/finite): use hypotheses for fintype assumptions\nin simp rules", "changes": [{"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["mod", "theorem", "card_insert", ["set"]], ["add", "theorem", "empty_card'", ["set"]], ["mod", "theorem", "empty_card", ["set"]]]}, {"oldPath": "number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": []}]}, {"timestamp": 1527444930, "sha": "f563ac80", "message": "chore(data/pnat): remove nat -> pnat coercion", "changes": [{"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["del", "theorem", "max_eq_inf_with_top", ["finset"]], ["add", "theorem", "min_eq_inf_with_top", ["finset"]]]}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": [["del", "theorem", "coe_nat_coe", ["pnat"]], ["add", "theorem", "coe_to_pnat'", ["pnat"]], ["del", "theorem", "nat_coe_coe", ["pnat"]]]}]}, {"timestamp": 1527444930, "sha": "b7012fb8", "message": "fix(tactic/norm_num): use norm_num to discharge simp goals", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1527264906, "sha": "6811f139", "message": "fix(data/list/perm): remove unused code (#143)", "changes": [{"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["del", "theorem", "xswap", ["list"]]]}]}, {"timestamp": 1527227859, "sha": "bcec475a", "message": "chore(leanpkg.toml): update version to 3.4.1", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1527227741, "sha": "1991869f", "message": "feat(order/bounded_lattice): with_bot, with_top structures", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "def", "inf", ["finset"]], ["add", "theorem", "inf_empty", ["finset"]], ["add", "theorem", "inf_insert", ["finset"]], ["add", "theorem", "inf_le", ["finset"]], ["add", "theorem", "inf_mono", ["finset"]], ["add", "theorem", "inf_mono_fun", ["finset"]], ["add", "theorem", "inf_singleton", ["finset"]], ["add", "theorem", "inf_union", ["finset"]], ["add", "theorem", "le_inf", ["finset"]], ["add", "theorem", "le_sup", ["finset"]], ["add", "theorem", "max_eq_inf_with_top", ["finset"]], ["add", "theorem", "max_eq_sup_with_bot", ["finset"]], ["add", "theorem", "singleton_bind", ["finset"]], ["mod", "theorem", "subset_iff", ["finset"]], ["add", "def", "sup", ["finset"]], ["add", "theorem", "sup_empty", ["finset"]], ["add", "theorem", "sup_insert", ["finset"]], ["add", "theorem", "sup_le", ["finset"]], ["add", "theorem", "sup_mono", ["finset"]], ["add", "theorem", "sup_mono_fun", ["finset"]], ["add", "theorem", "sup_singleton", ["finset"]], ["add", "theorem", "sup_union", ["finset"]]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "erase_add_single", ["finsupp"]], ["add", "theorem", "induction₂", ["finsupp"]], ["mod", "theorem", "single_add_erase", ["finsupp"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "ext", ["option"]]]}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["del", "theorem", "bind_singleton2", ["finset"]], ["del", "theorem", "le_sup", ["finset"]], ["del", "def", "sup", ["finset"]], ["del", "theorem", "sup_empty", ["finset"]], ["del", "theorem", "sup_insert", ["finset"]], ["del", "theorem", "sup_le", ["finset"]], ["del", "theorem", "sup_mono", ["finset"]], ["del", "theorem", "sup_mono_fun", ["finset"]], ["del", "theorem", "sup_singleton", ["finset"]], ["del", "theorem", "sup_union", ["finset"]]]}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "some_le", ["lattice", "with_bot"]], ["add", "theorem", "some_le_some", ["lattice", "with_bot"]], ["add", "def", "with_bot", ["lattice"]], ["add", "theorem", "le_some", ["lattice", "with_top"]], ["add", "theorem", "some_le_some", ["lattice", "with_top"]], ["add", "def", "with_top", ["lattice"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}]}, {"timestamp": 1527210853, "sha": "94dc0677", "message": "refactor(order/lattice): move top/bot to bounded_lattice", "changes": [{"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "bot_inf_eq", ["lattice"]], ["add", "theorem", "bot_le", ["lattice"]], ["add", "theorem", "bot_sup_eq", ["lattice"]], ["add", "theorem", "bot_unique", ["lattice"]], ["add", "theorem", "eq_bot_iff", ["lattice"]], ["add", "theorem", "eq_top_iff", ["lattice"]], ["add", "theorem", "inf_bot_eq", ["lattice"]], ["add", "theorem", "inf_eq_top_iff", ["lattice"]], ["add", "theorem", "inf_top_eq", ["lattice"]], ["add", "theorem", "le_bot_iff", ["lattice"]], ["add", "theorem", "le_top", ["lattice"]], ["add", "theorem", "neq_bot_of_le_neq_bot", ["lattice"]], ["add", "theorem", "not_lt_bot", ["lattice"]], ["add", "theorem", "not_top_lt", ["lattice"]], ["add", "theorem", "sup_bot_eq", ["lattice"]], ["add", "theorem", "sup_eq_bot_iff", ["lattice"]], ["add", "theorem", "sup_top_eq", ["lattice"]], ["add", "theorem", "top_inf_eq", ["lattice"]], ["add", "theorem", "top_le_iff", ["lattice"]], ["add", "theorem", "top_sup_eq", ["lattice"]], ["add", "theorem", "top_unique", ["lattice"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["del", "theorem", "bot_inf_eq", ["lattice"]], ["del", "theorem", "bot_le", ["lattice"]], ["del", "theorem", "bot_sup_eq", ["lattice"]], ["del", "theorem", "bot_unique", ["lattice"]], ["del", "theorem", "eq_bot_iff", ["lattice"]], ["del", "theorem", "eq_top_iff", ["lattice"]], ["del", "theorem", "inf_bot_eq", ["lattice"]], ["del", "theorem", "inf_eq_top_iff", ["lattice"]], ["del", "theorem", "inf_top_eq", ["lattice"]], ["del", "theorem", "le_bot_iff", ["lattice"]], ["del", "theorem", "le_top", ["lattice"]], ["del", "theorem", "neq_bot_of_le_neq_bot", ["lattice"]], ["del", "theorem", "not_lt_bot", ["lattice"]], ["del", "theorem", "not_top_lt", ["lattice"]], ["del", "theorem", "sup_bot_eq", ["lattice"]], ["del", "theorem", "sup_eq_bot_iff", ["lattice"]], ["del", "theorem", "sup_top_eq", ["lattice"]], ["del", "theorem", "top_inf_eq", ["lattice"]], ["del", "theorem", "top_le_iff", ["lattice"]], ["del", "theorem", "top_sup_eq", ["lattice"]], ["del", "theorem", "top_unique", ["lattice"]]]}]}, {"timestamp": 1527210853, "sha": "4117ff40", "message": "refactor(algebra/order_functions): reorganize new lemmas", "changes": [{"oldPath": "algebra/order_functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["add", "theorem", "max_choice", []], ["add", "theorem", "min_choice", []]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["del", "theorem", "if_choice", []], ["del", "theorem", "max_choice", []], ["del", "theorem", "min_choice", []]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}]}, {"timestamp": 1527177326, "sha": "9303bc02", "message": "feat(analysis/ennreal): add further type class instances for nonnegative reals", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "le_zero_iff_eq", []]]}, {"oldPath": "analysis/nnreal.lean", "newPath": "analysis/nnreal.lean", "changes": [["del", "theorem", "add_val", ["nnreal"]], ["del", "theorem", "le_zero_iff_eq", ["nnreal"]], ["del", "theorem", "mul_val", ["nnreal"]], ["del", "theorem", "val_one", ["nnreal"]], ["del", "theorem", "val_zero", ["nnreal"]]]}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1527177326, "sha": "02f8f481", "message": "feat(analysis/nnreal): define the nonnegative reals\nNB: This file has a lot in common with `ennreal.lean`, the extended nonnegative reals.", "changes": [{"oldPath": null, "newPath": "analysis/nnreal.lean", "changes": [["add", "theorem", "add_val", ["nnreal"]], ["add", "theorem", "le_zero_iff_eq", ["nnreal"]], ["add", "theorem", "mul_val", ["nnreal"]], ["add", "theorem", "val_one", ["nnreal"]], ["add", "theorem", "val_zero", ["nnreal"]]]}]}, {"timestamp": 1527154781, "sha": "2c94668b", "message": "fix(data/fin): rename raise_fin -> fin.raise; simp lemmas for fin (#138)", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "theorem", "pred_val", ["fin"]], ["add", "def", "raise", ["fin"]], ["add", "theorem", "succ_val", ["fin"]], ["del", "def", "raise_fin", []]]}]}, {"timestamp": 1527103255, "sha": "d91a267f", "message": "fix(data/list/basic): protected list.sigma (#140)", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["del", "def", "sigma", ["list"]]]}]}, {"timestamp": 1527103225, "sha": "94a4b074", "message": "doc(docs/extras): some notes on well founded recursion (#127)", "changes": [{"oldPath": null, "newPath": "docs/extras/well_founded_recursion.md", "changes": []}]}, {"timestamp": 1527103002, "sha": "23bd3f2e", "message": "doc(docs/extra/simp): adding reference to simpa (#106)", "changes": [{"oldPath": "docs/extras/simp.md", "newPath": "docs/extras/simp.md", "changes": []}]}, {"timestamp": 1527101675, "sha": "add172dd", "message": "chore(tactic/default): move split_ifs import to tactic.interactive", "changes": [{"oldPath": "tactic/default.lean", "newPath": "tactic/default.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1527101675, "sha": "d4429076", "message": "fix(tactic/split_if): clarify behavior", "changes": [{"oldPath": "tactic/split_ifs.lean", "newPath": "tactic/split_ifs.lean", "changes": []}]}, {"timestamp": 1527101675, "sha": "509934ff", "message": "feat(tactic/split_ifs): add if-splitter", "changes": [{"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "tactic/default.lean", "newPath": "tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/split_ifs.lean", "changes": []}, {"oldPath": null, "newPath": "tests/split_ifs.lean", "changes": []}]}, {"timestamp": 1527096572, "sha": "f458eef3", "message": "feat(analysis/topology): add tendsto and continuity rules for big operators", "changes": [{"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["mod", "theorem", "continuous_add'", []], ["mod", "theorem", "continuous_add", []], ["add", "theorem", "continuous_finset_prod", []], ["add", "theorem", "continuous_finset_sum", []], ["add", "theorem", "continuous_list_prod", []], ["add", "theorem", "continuous_list_sum", []], ["add", "theorem", "continuous_mul'", []], ["mod", "theorem", "continuous_mul", []], ["add", "theorem", "continuous_multiset_prod", []], ["add", "theorem", "continuous_multiset_sum", []], ["mod", "theorem", "tendsto_add'", []], ["mod", "theorem", "tendsto_add", []], ["add", "theorem", "tendsto_finset_prod", []], ["add", "theorem", "tendsto_finset_sum", []], ["add", "theorem", "tendsto_list_prod", []], ["add", "theorem", "tendsto_list_sum", []], ["add", "theorem", "tendsto_mul'", []], ["mod", "theorem", "tendsto_mul", []], ["add", "theorem", "tendsto_multiset_prod", []], ["add", "theorem", "tendsto_multiset_sum", []], ["del", "theorem", "tendsto_sum", []]]}]}, {"timestamp": 1527095876, "sha": "a54be050", "message": "feat(analysis/topology): add continuity rules for supr, Sup, and pi spaces", "changes": [{"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "theorem", "compact_pi_infinite", []], ["mod", "theorem", "continuous_Inf_rng", []], ["add", "theorem", "continuous_Sup_dom", []], ["add", "theorem", "continuous_Sup_rng", []], ["add", "theorem", "continuous_apply", []], ["mod", "theorem", "continuous_infi_rng", []], ["add", "theorem", "continuous_pi", []], ["mod", "theorem", "continuous_subtype_nhds_cover", []], ["add", "theorem", "continuous_supr_dom", []], ["add", "theorem", "continuous_supr_rng", []], ["mod", "theorem", "nhds_pi", []]]}]}, {"timestamp": 1527088929, "sha": "cff886bb", "message": "feat(data/finset): max and min", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "le_max_of_mem", ["finset"]], ["add", "theorem", "le_min_of_mem", ["finset"]], ["add", "theorem", "max_empty", ["finset"]], ["add", "theorem", "max_insert", ["finset"]], ["add", "theorem", "max_of_mem", ["finset"]], ["add", "theorem", "max_singleton", ["finset"]], ["add", "theorem", "mem_of_max", ["finset"]], ["add", "theorem", "mem_of_min", ["finset"]], ["add", "theorem", "min_empty", ["finset"]], ["add", "theorem", "min_insert", ["finset"]], ["add", "theorem", "min_of_mem", ["finset"]], ["add", "theorem", "min_singleton", ["finset"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "lift_or_get_choice", ["option"]], ["del", "theorem", "lift_or_get_is_some_left", ["option"]], ["del", "theorem", "lift_or_get_is_some_right", ["option"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "if_choice", []], ["add", "theorem", "max_choice", []], ["add", "theorem", "min_choice", []]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}]}, {"timestamp": 1527088929, "sha": "d1ea2726", "message": "feat(data/option): lift_or_get", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "def", "lift_or_get", ["option"]], ["add", "theorem", "lift_or_get_is_some_left", ["option"]], ["add", "theorem", "lift_or_get_is_some_right", ["option"]]]}]}, {"timestamp": 1526966801, "sha": "d62bf560", "message": "feat(computability/halting): halting problem", "changes": [{"oldPath": null, "newPath": "data/computability/halting.lean", "changes": [["add", "theorem", "halting_problem", ["computable_pred"]], ["add", "theorem", "of_eq", ["computable_pred"]], ["add", "theorem", "rice", ["computable_pred"]], ["add", "theorem", "rice₂", ["computable_pred"]], ["add", "def", "computable_pred", []], ["add", "theorem", "merge'", ["nat", "partrec"]], ["add", "theorem", "cond", ["partrec"]], ["add", "theorem", "merge'", ["partrec"]], ["add", "theorem", "merge", ["partrec"]], ["add", "theorem", "sum_cases", ["partrec"]], ["add", "def", "re_pred", []]]}, {"oldPath": "data/computability/partrec.lean", "newPath": "data/computability/partrec.lean", "changes": [["add", "def", "rfind_opt", ["nat"]], ["add", "theorem", "rfind_opt_dom", ["nat"]], ["add", "theorem", "rfind_opt_mono", ["nat"]], ["add", "theorem", "rfind_opt_spec", ["nat"]], ["add", "theorem", "bind_decode2_iff", ["partrec"]], ["add", "theorem", "map_encode_iff", ["partrec"]], ["add", "theorem", "rfind_opt", ["partrec"]], ["add", "theorem", "to_comp", ["primrec₂"]]]}, {"oldPath": "data/computability/partrec_code.lean", "newPath": "data/computability/partrec_code.lean", "changes": [["add", "theorem", "const_prim", ["nat", "partrec", "code"]], ["add", "def", "curry", ["nat", "partrec", "code"]], ["add", "theorem", "curry_prim", ["nat", "partrec", "code"]], ["add", "theorem", "eval_const", ["nat", "partrec", "code"]], ["add", "theorem", "eval_curry", ["nat", "partrec", "code"]], ["add", "theorem", "eval_id", ["nat", "partrec", "code"]], ["add", "theorem", "fixed_point", ["nat", "partrec", "code"]], ["add", "theorem", "fixed_point₂", ["nat", "partrec", "code"]]]}, {"oldPath": "data/computability/primrec.lean", "newPath": "data/computability/primrec.lean", "changes": [["add", "theorem", "option_guard", ["primrec"]], ["mod", "theorem", "option_is_some", ["primrec"]], ["add", "theorem", "option_orelse", ["primrec"]]]}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["add", "def", "decode2", ["encodable"]], ["add", "theorem", "decode2_inj", ["encodable"]], ["add", "theorem", "encodek2", ["encodable"]], ["add", "theorem", "mem_decode2", ["encodable"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "orelse_none'", ["option"]], ["add", "theorem", "orelse_none", ["option"]], ["add", "theorem", "orelse_some'", ["option"]], ["add", "theorem", "orelse_some", ["option"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["add", "theorem", "bind_some_right", ["roption"]], ["add", "theorem", "eq_none_iff'", ["roption"]], ["add", "theorem", "get_eq_of_mem", ["roption"]], ["add", "theorem", "get_mem", ["roption"]]]}]}, {"timestamp": 1526903077, "sha": "f0bcba56", "message": "feat(computability/partrec_code): Kleene normal form theorem\namong other things", "changes": [{"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["add", "theorem", "guard_false", []], ["add", "theorem", "guard_true", []]]}, {"oldPath": "data/computability/partrec.lean", "newPath": "data/computability/partrec.lean", "changes": [["add", "theorem", "bind_decode_iff", ["computable"]], ["add", "theorem", "cond", ["computable"]], ["add", "theorem", "encode_iff", ["computable"]], ["add", "theorem", "list_append", ["computable"]], ["add", "theorem", "list_concat", ["computable"]], ["add", "theorem", "list_cons", ["computable"]], ["add", "theorem", "list_length", ["computable"]], ["add", "theorem", "list_nth", ["computable"]], ["add", "theorem", "list_reverse", ["computable"]], ["add", "theorem", "map_decode_iff", ["computable"]], ["add", "theorem", "nat_bodd", ["computable"]], ["add", "theorem", "nat_cases", ["computable"]], ["add", "theorem", "nat_div2", ["computable"]], ["add", "theorem", "nat_strong_rec", ["computable"]], ["add", "theorem", "option_bind", ["computable"]], ["add", "theorem", "option_cases", ["computable"]], ["add", "theorem", "option_map", ["computable"]], ["add", "theorem", "option_some", ["computable"]], ["add", "theorem", "option_some_iff", ["computable"]], ["add", "theorem", "pred", ["computable"]], ["add", "theorem", "succ", ["computable"]], ["add", "theorem", "sum_cases", ["computable"]], ["add", "theorem", "sum_inl", ["computable"]], ["add", "theorem", "sum_inr", ["computable"]], ["add", "theorem", "unpair", ["computable"]], ["del", "theorem", "comp_prim", ["nat", "partrec", "code"]], ["del", "def", "encode_code", ["nat", "partrec", "code"]], ["del", "def", "eval", ["nat", "partrec", "code"]], ["del", "def", "evaln", ["nat", "partrec", "code"]], ["del", "theorem", "exists_code", ["nat", "partrec", "code"]], ["del", "def", "of_nat_code", ["nat", "partrec", "code"]], ["del", "theorem", "pair_prim", ["nat", "partrec", "code"]], ["del", "theorem", "prec_prim", ["nat", "partrec", "code"]], ["del", "theorem", "rec_prim", ["nat", "partrec", "code"]], ["del", "theorem", "rfind_prim", ["nat", "partrec", "code"]], ["del", "inductive", "code", ["nat", "partrec"]], ["del", "theorem", "rfind'", ["nat", "partrec"]], ["add", "theorem", "fix", ["partrec"]], ["add", "theorem", "nat_cases_right", ["partrec"]], ["add", "theorem", "option_cases_right", ["partrec"]], ["add", "theorem", "option_some_iff", ["partrec"]], ["add", "theorem", "sum_cases_left", ["partrec"]], ["add", "theorem", "sum_cases_right", ["partrec"]]]}, {"oldPath": null, "newPath": "data/computability/partrec_code.lean", "changes": [["add", "theorem", "comp_prim", ["nat", "partrec", "code"]], ["add", "def", "encode_code", ["nat", "partrec", "code"]], ["add", "theorem", "encode_code_eq", ["nat", "partrec", "code"]], ["add", "theorem", "encode_lt_comp", ["nat", "partrec", "code"]], ["add", "theorem", "encode_lt_pair", ["nat", "partrec", "code"]], ["add", "theorem", "encode_lt_prec", ["nat", "partrec", "code"]], ["add", "theorem", "encode_lt_rfind'", ["nat", "partrec", "code"]], ["add", "def", "eval", ["nat", "partrec", "code"]], ["add", "theorem", "eval_part", ["nat", "partrec", "code"]], ["add", "def", "evaln", ["nat", "partrec", "code"]], ["add", "theorem", "evaln_bound", ["nat", "partrec", "code"]], ["add", "theorem", "evaln_complete", ["nat", "partrec", "code"]], ["add", "theorem", "evaln_mono", ["nat", "partrec", "code"]], ["add", "theorem", "evaln_prim", ["nat", "partrec", "code"]], ["add", "theorem", "evaln_sound", ["nat", "partrec", "code"]], ["add", "theorem", "exists_code", ["nat", "partrec", "code"]], ["add", "def", "of_nat_code", ["nat", "partrec", "code"]], ["add", "theorem", "of_nat_code_eq", ["nat", "partrec", "code"]], ["add", "theorem", "pair_prim", ["nat", "partrec", "code"]], ["add", "theorem", "prec_prim", ["nat", "partrec", "code"]], ["add", "theorem", "rec_computable", ["nat", "partrec", "code"]], ["add", "theorem", "rec_prim'", ["nat", "partrec", "code"]], ["add", "theorem", "rec_prim", ["nat", "partrec", "code"]], ["add", "theorem", "rfind_prim", ["nat", "partrec", "code"]], ["add", "inductive", "code", ["nat", "partrec"]], ["add", "theorem", "rfind'", ["nat", "partrec"]]]}, {"oldPath": "data/computability/primrec.lean", "newPath": "data/computability/primrec.lean", "changes": [["add", "theorem", "list_range", ["primrec"]], ["add", "theorem", "nat_max", ["primrec"]], ["add", "theorem", "nat_min", ["primrec"]], ["add", "theorem", "option_is_some", ["primrec"]]]}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["add", "theorem", "mkpair_lt_mkpair_left", ["nat"]], ["add", "theorem", "mkpair_lt_mkpair_right", ["nat"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "bind_eq_some'", ["option"]], ["add", "theorem", "guard_eq_some'", ["option"]], ["add", "theorem", "map_eq_some'", ["option"]], ["add", "theorem", "none_bind'", ["option"]], ["add", "theorem", "some_bind'", ["option"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["add", "theorem", "fix_induction", ["pfun"]], ["mod", "theorem", "mem_fix_iff", ["pfun"]], ["add", "theorem", "bind_dom", ["roption"]], ["add", "theorem", "mem_coe", ["roption"]]]}]}, {"timestamp": 1526902900, "sha": "fe5c86c0", "message": "fix(tactic/interactive): fix congr bug, rename congr_n to congr'", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "proof_irrel_heq", []]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1526798232, "sha": "741469ab", "message": "fix(tactic/interactive): make rcases handle nested constructors correctly\nThe line changed by this commit was wrong because `k` might contain\nfurther constructors, which also need to be \"inverted\".\nFixes #56.\n* doc(tactic): Internal documentation for rcases\n* style(tactic/rcases): eliminate an unused recursive parameter\n* style(*): use rcases more", "changes": [{"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "group_theory/free_group.lean", "newPath": "group_theory/free_group.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": [["add", "def", "rcases_patt_inverted", ["tactic", "interactive"]]]}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": [["add", "def", "list_Pi", ["tactic"]], ["add", "def", "list_Sigma", ["tactic"]]]}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1526765306, "sha": "fc20442e", "message": "feat(computability/partrec): partial recursion, Godel numbering", "changes": [{"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["add", "theorem", "ff_eq_to_bool_iff", ["bool"]], ["add", "theorem", "tt_eq_to_bool_iff", ["bool"]]]}, {"oldPath": "data/computability/partrec.lean", "newPath": "data/computability/partrec.lean", "changes": [["add", "theorem", "comp", ["computable"]], ["add", "theorem", "comp₂", ["computable"]], ["add", "theorem", "const", ["computable"]], ["add", "theorem", "fst", ["computable"]], ["add", "theorem", "nat_elim", ["computable"]], ["add", "theorem", "of_eq", ["computable"]], ["add", "theorem", "of_option", ["computable"]], ["add", "theorem", "pair", ["computable"]], ["add", "theorem", "part", ["computable"]], ["add", "theorem", "snd", ["computable"]], ["add", "theorem", "to₂", ["computable"]], ["add", "def", "computable", []], ["add", "theorem", "comp", ["computable₂"]], ["add", "theorem", "comp₂", ["computable₂"]], ["add", "theorem", "part", ["computable₂"]], ["add", "def", "computable₂", []], ["add", "theorem", "mem_rfind", ["nat"]], ["add", "theorem", "comp_prim", ["nat", "partrec", "code"]], ["add", "def", "encode_code", ["nat", "partrec", "code"]], ["add", "def", "eval", ["nat", "partrec", "code"]], ["add", "def", "evaln", ["nat", "partrec", "code"]], ["add", "theorem", "exists_code", ["nat", "partrec", "code"]], ["add", "def", "of_nat_code", ["nat", "partrec", "code"]], ["add", "theorem", "pair_prim", ["nat", "partrec", "code"]], ["add", "theorem", "prec_prim", ["nat", "partrec", "code"]], ["add", "theorem", "rec_prim", ["nat", "partrec", "code"]], ["add", "theorem", "rfind_prim", ["nat", "partrec", "code"]], ["add", "inductive", "code", ["nat", "partrec"]], ["add", "theorem", "none", ["nat", "partrec"]], ["mod", "theorem", "of_eq", ["nat", "partrec"]], ["add", "theorem", "of_eq_tot", ["nat", "partrec"]], ["add", "theorem", "of_primrec", ["nat", "partrec"]], ["add", "theorem", "ppred", ["nat", "partrec"]], ["add", "theorem", "prec'", ["nat", "partrec"]], ["del", "theorem", "prim", ["nat", "partrec"]], ["add", "theorem", "rfind'", ["nat", "partrec"]], ["add", "def", "rfind", ["nat"]], ["add", "theorem", "rfind_dom'", ["nat"]], ["add", "theorem", "rfind_dom", ["nat"]], ["add", "theorem", "rfind_min'", ["nat"]], ["add", "theorem", "rfind_min", ["nat"]], ["add", "theorem", "rfind_spec", ["nat"]], ["add", "def", "rfind_x", ["nat"]], ["add", "theorem", "rfind_zero_none", ["nat"]], ["add", "theorem", "comp", ["partrec"]], ["add", "theorem", "const'", ["partrec"]], ["add", "theorem", "map", ["partrec"]], ["add", "theorem", "nat_elim", ["partrec"]], ["add", "theorem", "nat_iff", ["partrec"]], ["add", "theorem", "none", ["partrec"]], ["add", "theorem", "of_eq", ["partrec"]], ["add", "theorem", "of_eq_tot", ["partrec"]], ["add", "theorem", "rfind", ["partrec"]], ["add", "theorem", "to₂", ["partrec"]], ["add", "def", "partrec", []], ["add", "theorem", "comp", ["partrec₂"]], ["add", "theorem", "comp₂", ["partrec₂"]], ["add", "theorem", "unpaired'", ["partrec₂"]], ["add", "theorem", "unpaired", ["partrec₂"]], ["add", "def", "partrec₂", []], ["add", "theorem", "to_comp", ["primrec"]]]}, {"oldPath": "data/computability/primrec.lean", "newPath": "data/computability/primrec.lean", "changes": [["mod", "theorem", "of_eq", ["nat", "primrec"]], ["mod", "theorem", "comp", ["primrec"]], ["add", "theorem", "list_concat", ["primrec"]], ["add", "theorem", "nat_strong_rec", ["primrec"]], ["mod", "theorem", "of_eq", ["primrec"]], ["mod", "theorem", "of_eq", ["primrec₂"]]]}, {"oldPath": "data/denumerable.lean", "newPath": "data/denumerable.lean", "changes": [["add", "def", "list_equiv_self_of_equiv_nat", ["equiv"]], ["add", "def", "list_nat_equiv_nat", ["equiv"]]]}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["add", "theorem", "decode_nat", ["encodable"]], ["add", "theorem", "encode_nat", ["encodable"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["del", "def", "list_equiv_self_of_equiv_nat", ["equiv"]], ["del", "def", "list_nat_equiv_nat", ["equiv"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "bodd_bit0", ["nat"]], ["add", "theorem", "bodd_bit1", ["nat"]], ["add", "theorem", "div2_bit0", ["nat"]], ["add", "theorem", "div2_bit1", ["nat"]]]}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["add", "theorem", "le_mkpair_right", ["nat"]], ["del", "theorem", "unpair_le", ["nat"]], ["add", "theorem", "unpair_le_left", ["nat"]], ["add", "theorem", "unpair_le_right", ["nat"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["mod", "theorem", "bind_defined", ["pfun"]], ["add", "theorem", "dom_of_mem_fix", ["pfun"]], ["add", "def", "fix", ["pfun"]], ["add", "theorem", "mem_fix_iff", ["pfun"]], ["mod", "def", "pfun", []], ["del", "def", "bind", ["roption"]], ["add", "theorem", "bind_map", ["roption"]], ["add", "theorem", "bind_none", ["roption"]], ["mod", "theorem", "bind_some_eq_map", ["roption"]], ["add", "theorem", "coe_none", ["roption"]], ["add", "theorem", "coe_some", ["roption"]], ["mod", "theorem", "dom_iff_mem", ["roption"]], ["add", "theorem", "eq_none_iff", ["roption"]], ["add", "theorem", "eq_some_iff", ["roption"]], ["del", "theorem", "eq_some_of_mem", ["roption"]], ["add", "theorem", "map_bind", ["roption"]], ["add", "theorem", "map_id'", ["roption"]], ["add", "theorem", "map_map", ["roption"]], ["add", "theorem", "map_none", ["roption"]], ["add", "theorem", "mem_assert", ["roption"]], ["add", "theorem", "mem_assert_iff", ["roption"]], ["add", "theorem", "not_mem_none", ["roption"]], ["del", "structure", "roption", []], ["add", "structure", "{u}", []]]}]}, {"timestamp": 1526620459, "sha": "38d55369", "message": "feat(computability/partrec): starting work on partial recursive funcs", "changes": [{"oldPath": null, "newPath": "data/computability/partrec.lean", "changes": [["add", "theorem", "of_eq", ["nat", "partrec"]], ["add", "theorem", "prim", ["nat", "partrec"]], ["add", "inductive", "partrec", ["nat"]]]}, {"oldPath": "data/computability/primrec.lean", "newPath": "data/computability/primrec.lean", "changes": [["mod", "def", "unpaired", ["nat"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["add", "def", "bind", ["pfun"]], ["add", "theorem", "coe_val", ["pfun"]], ["add", "def", "ext'", ["pfun"]], ["add", "def", "ext", ["pfun"]], ["add", "theorem", "lift_eq_coe", ["pfun"]], ["add", "def", "map", ["pfun"]], ["add", "def", "bind", ["roption"]], ["add", "theorem", "bind_eq_bind", ["roption"]], ["add", "theorem", "bind_some", ["roption"]], ["del", "theorem", "eq_ret_of_mem", ["roption"]], ["add", "theorem", "eq_some_of_mem", ["roption"]], ["del", "theorem", "exists_of_mem_bind", ["roption"]], ["add", "def", "ext'", ["roption"]], ["add", "def", "ext", ["roption"]], ["add", "def", "map", ["roption"]], ["add", "theorem", "map_eq_map", ["roption"]], ["add", "theorem", "map_some", ["roption"]], ["add", "theorem", "mem_bind_iff", ["roption"]], ["add", "theorem", "mem_map", ["roption"]], ["add", "theorem", "mem_map_iff", ["roption"]], ["add", "theorem", "mem_of_option", ["roption"]], ["del", "theorem", "mem_ret", ["roption"]], ["del", "theorem", "mem_ret_iff", ["roption"]], ["mod", "theorem", "mem_some", ["roption"]], ["add", "theorem", "mem_some_iff", ["roption"]], ["add", "theorem", "mem_to_option", ["roption"]], ["add", "def", "none", ["roption"]], ["mod", "theorem", "of_to_option", ["roption"]], ["add", "theorem", "ret_eq_some", ["roption"]], ["add", "def", "some", ["roption"]], ["del", "theorem", "some_bind", ["roption"]], ["mod", "theorem", "to_of_option", ["roption"]]]}]}, {"timestamp": 1526620204, "sha": "92feaf95", "message": "feat(computability/primrec): list definitions are primrec", "changes": [{"oldPath": "data/computability/primrec.lean", "newPath": "data/computability/primrec.lean", "changes": [["add", "theorem", "list_append", ["primrec"]], ["add", "theorem", "list_cases", ["primrec"]], ["add", "theorem", "list_cons", ["primrec"]], ["mod", "theorem", "list_find_index", ["primrec"]], ["add", "theorem", "list_find_index₁", ["primrec"]], ["add", "theorem", "list_foldl", ["primrec"]], ["add", "theorem", "list_foldr", ["primrec"]], ["mod", "theorem", "list_index_of", ["primrec"]], ["add", "theorem", "list_index_of₁", ["primrec"]], ["mod", "theorem", "list_inth", ["primrec"]], ["add", "theorem", "list_join", ["primrec"]], ["add", "theorem", "list_length", ["primrec"]], ["add", "theorem", "list_map", ["primrec"]], ["mod", "theorem", "list_nth", ["primrec"]], ["add", "theorem", "list_nth₁", ["primrec"]], ["add", "theorem", "list_rec", ["primrec"]], ["add", "theorem", "list_reverse", ["primrec"]], ["del", "theorem", "nat_cases1", ["primrec"]], ["add", "theorem", "nat_cases₁", ["primrec"]], ["del", "theorem", "nat_elim1", ["primrec"]], ["add", "theorem", "nat_elim₁", ["primrec"]], ["add", "theorem", "nat_iterate", ["primrec"]], ["del", "theorem", "option_bind1", ["primrec"]], ["add", "theorem", "option_bind₁", ["primrec"]], ["del", "theorem", "option_map1", ["primrec"]], ["add", "theorem", "option_map₁", ["primrec"]], ["add", "theorem", "sum_cases", ["primrec"]], ["add", "theorem", "sum_inl", ["primrec"]], ["add", "theorem", "sum_inr", ["primrec"]], ["add", "theorem", "to₂", ["primrec"]]]}, {"oldPath": "data/denumerable.lean", "newPath": "data/denumerable.lean", "changes": [["add", "theorem", "list_of_nat_succ", ["denumerable"]], ["add", "theorem", "list_of_nat_zero", ["denumerable"]]]}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["add", "theorem", "decode_list_succ", ["encodable"]], ["add", "theorem", "decode_list_zero", ["encodable"]], ["add", "theorem", "decode_sum_val", ["encodable"]], ["add", "theorem", "encode_inl", ["encodable"]], ["add", "theorem", "encode_inr", ["encodable"]], ["add", "theorem", "encode_list_cons", ["encodable"]], ["add", "theorem", "encode_list_nil", ["encodable"]], ["add", "theorem", "length_le_encode", ["encodable"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "drop_nil", ["list"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["del", "def", "foldl", ["nat"]], ["del", "def", "foldr", ["nat"]], ["add", "theorem", "iterate_add", ["nat"]], ["add", "theorem", "iterate_succ'", ["nat"]], ["add", "theorem", "iterate_succ", ["nat"]], ["add", "theorem", "iterate_zero", ["nat"]]]}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["add", "theorem", "le_mkpair_left", ["nat"]], ["mod", "def", "mkpair", ["nat"]], ["mod", "theorem", "mkpair_unpair", ["nat"]], ["mod", "def", "unpair", ["nat"]], ["mod", "theorem", "unpair_le", ["nat"]], ["mod", "theorem", "unpair_lt", ["nat"]], ["mod", "theorem", "unpair_mkpair", ["nat"]]]}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["del", "theorem", "foldr_le_nfp", ["ordinal"]], ["add", "theorem", "iterate_le_nfp", ["ordinal"]]]}]}, {"timestamp": 1526530988, "sha": "e017f0f1", "message": "feat(data/computability): primrec, denumerable", "changes": [{"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "Union_basis_of_is_open", ["topological_space"]], ["add", "theorem", "sUnion_basis_of_is_open", ["topological_space"]]]}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["mod", "theorem", "cond_ff", ["bool"]], ["add", "theorem", "cond_to_bool", ["bool"]], ["mod", "theorem", "cond_tt", ["bool"]], ["add", "theorem", "to_bool_and", ["bool"]], ["add", "theorem", "to_bool_not", ["bool"]], ["add", "theorem", "to_bool_or", ["bool"]]]}, {"oldPath": null, "newPath": "data/computability/primrec.lean", "changes": [["add", "def", "cases", ["nat"]], ["add", "theorem", "cases_succ", ["nat"]], ["add", "theorem", "cases_zero", ["nat"]], ["add", "def", "elim", ["nat"]], ["add", "theorem", "elim_succ", ["nat"]], ["add", "theorem", "elim_zero", ["nat"]], ["add", "theorem", "add", ["nat", "primrec"]], ["add", "theorem", "cases1", ["nat", "primrec"]], ["add", "theorem", "cases", ["nat", "primrec"]], ["add", "theorem", "const", ["nat", "primrec"]], ["add", "theorem", "mul", ["nat", "primrec"]], ["add", "theorem", "of_eq", ["nat", "primrec"]], ["add", "theorem", "pow", ["nat", "primrec"]], ["add", "theorem", "prec1", ["nat", "primrec"]], ["add", "theorem", "pred", ["nat", "primrec"]], ["add", "theorem", "sub", ["nat", "primrec"]], ["add", "theorem", "swap'", ["nat", "primrec"]], ["add", "inductive", "primrec", ["nat"]], ["add", "def", "unpaired", ["nat"]], ["add", "def", "of_equiv", ["primcodable"]], ["add", "theorem", "bind_decode_iff", ["primrec"]], ["add", "theorem", "comp", ["primrec"]], ["add", "theorem", "comp₂", ["primrec"]], ["add", "theorem", "cond", ["primrec"]], ["add", "theorem", "const", ["primrec"]], ["add", "theorem", "dom_bool", ["primrec"]], ["add", "theorem", "dom_bool₂", ["primrec"]], ["add", "theorem", "dom_denumerable", ["primrec"]], ["add", "theorem", "dom_fintype", ["primrec"]], ["add", "theorem", "encdec", ["primrec"]], ["add", "theorem", "encode_iff", ["primrec"]], ["add", "theorem", "fst", ["primrec"]], ["add", "theorem", "ite", ["primrec"]], ["add", "theorem", "list_find_index", ["primrec"]], ["add", "theorem", "list_index_of", ["primrec"]], ["add", "theorem", "list_inth", ["primrec"]], ["add", "theorem", "list_nth", ["primrec"]], ["add", "theorem", "map_decode_iff", ["primrec"]], ["add", "theorem", "nat_add", ["primrec"]], ["add", "theorem", "nat_bit0", ["primrec"]], ["add", "theorem", "nat_bit1", ["primrec"]], ["add", "theorem", "nat_bit", ["primrec"]], ["add", "theorem", "nat_bodd", ["primrec"]], ["add", "theorem", "nat_bodd_div2", ["primrec"]], ["add", "theorem", "nat_cases'", ["primrec"]], ["add", "theorem", "nat_cases1", ["primrec"]], ["add", "theorem", "nat_cases", ["primrec"]], ["add", "theorem", "nat_div2", ["primrec"]], ["add", "theorem", "nat_div", ["primrec"]], ["add", "theorem", "nat_div_mod", ["primrec"]], ["add", "theorem", "nat_elim'", ["primrec"]], ["add", "theorem", "nat_elim1", ["primrec"]], ["add", "theorem", "nat_elim", ["primrec"]], ["add", "theorem", "nat_iff", ["primrec"]], ["add", "theorem", "nat_le", ["primrec"]], ["add", "theorem", "nat_mod", ["primrec"]], ["add", "theorem", "nat_mul", ["primrec"]], ["add", "theorem", "nat_sub", ["primrec"]], ["add", "theorem", "of_eq", ["primrec"]], ["add", "theorem", "of_nat_iff", ["primrec"]], ["add", "theorem", "option_bind1", ["primrec"]], ["add", "theorem", "option_bind", ["primrec"]], ["add", "theorem", "option_cases", ["primrec"]], ["add", "theorem", "option_iget", ["primrec"]], ["add", "theorem", "option_map1", ["primrec"]], ["add", "theorem", "option_map", ["primrec"]], ["add", "theorem", "option_some", ["primrec"]], ["add", "theorem", "option_some_iff", ["primrec"]], ["add", "theorem", "pair", ["primrec"]], ["add", "theorem", "pred", ["primrec"]], ["add", "theorem", "snd", ["primrec"]], ["add", "theorem", "succ", ["primrec"]], ["add", "theorem", "unpair", ["primrec"]], ["add", "def", "primrec", []], ["add", "theorem", "comp", ["primrec_pred"]], ["add", "theorem", "of_eq", ["primrec_pred"]], ["add", "def", "primrec_pred", []], ["add", "theorem", "comp", ["primrec_rel"]], ["add", "theorem", "comp₂", ["primrec_rel"]], ["add", "theorem", "of_eq", ["primrec_rel"]], ["add", "def", "primrec_rel", []], ["add", "theorem", "comp", ["primrec₂"]], ["add", "theorem", "comp₂", ["primrec₂"]], ["add", "theorem", "const", ["primrec₂"]], ["add", "theorem", "curry", ["primrec₂"]], ["add", "theorem", "encode_iff", ["primrec₂"]], ["add", "theorem", "left", ["primrec₂"]], ["add", "theorem", "mkpair", ["primrec₂"]], ["add", "theorem", "nat_iff'", ["primrec₂"]], ["add", "theorem", "nat_iff", ["primrec₂"]], ["add", "theorem", "of_eq", ["primrec₂"]], ["add", "theorem", "of_nat_iff", ["primrec₂"]], ["add", "theorem", "option_some_iff", ["primrec₂"]], ["add", "theorem", "right", ["primrec₂"]], ["add", "theorem", "swap", ["primrec₂"]], ["add", "theorem", "uncurry", ["primrec₂"]], ["add", "theorem", "unpaired'", ["primrec₂"]], ["add", "theorem", "unpaired", ["primrec₂"]], ["add", "def", "primrec₂", []]]}, {"oldPath": null, "newPath": "data/denumerable.lean", "changes": [["add", "theorem", "decode_eq_of_nat", ["denumerable"]], ["add", "theorem", "decode_is_some", ["denumerable"]], ["add", "theorem", "denumerable_list_aux", ["denumerable"]], ["add", "theorem", "encode_of_nat", ["denumerable"]], ["add", "def", "equiv₂", ["denumerable"]], ["add", "def", "eqv", ["denumerable"]], ["add", "def", "lower'", ["denumerable"]], ["add", "def", "lower", ["denumerable"]], ["add", "theorem", "lower_raise'", ["denumerable"]], ["add", "theorem", "lower_raise", ["denumerable"]], ["add", "def", "mk'", ["denumerable"]], ["add", "def", "of_equiv", ["denumerable"]], ["add", "theorem", "of_equiv_of_nat", ["denumerable"]], ["add", "def", "of_nat", ["denumerable"]], ["add", "theorem", "of_nat_encode", ["denumerable"]], ["add", "theorem", "of_nat_nat", ["denumerable"]], ["add", "theorem", "of_nat_of_decode", ["denumerable"]], ["add", "def", "pair", ["denumerable"]], ["add", "theorem", "prod_nat_of_nat", ["denumerable"]], ["add", "theorem", "prod_of_nat_val", ["denumerable"]], ["add", "def", "raise'", ["denumerable"]], ["add", "theorem", "raise'_chain", ["denumerable"]], ["add", "def", "raise'_finset", ["denumerable"]], ["add", "theorem", "raise'_sorted", ["denumerable"]], ["add", "def", "raise", ["denumerable"]], ["add", "theorem", "raise_chain", ["denumerable"]], ["add", "theorem", "raise_lower'", ["denumerable"]], ["add", "theorem", "raise_lower", ["denumerable"]], ["add", "theorem", "raise_sorted", ["denumerable"]], ["add", "theorem", "sigma_of_nat_val", ["denumerable"]]]}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["add", "def", "decidable_eq_of_encodable", ["encodable"]], ["add", "theorem", "decode_ge_two", ["encodable"]], ["add", "def", "decode_list", ["encodable"]], ["add", "def", "decode_multiset", ["encodable"]], ["add", "theorem", "decode_of_equiv", ["encodable"]], ["add", "theorem", "decode_one", ["encodable"]], ["add", "theorem", "decode_option_succ", ["encodable"]], ["add", "theorem", "decode_option_zero", ["encodable"]], ["add", "theorem", "decode_prod_val", ["encodable"]], ["add", "def", "decode_sigma", ["encodable"]], ["add", "theorem", "decode_sigma_val", ["encodable"]], ["add", "def", "decode_subtype", ["encodable"]], ["add", "def", "decode_sum", ["encodable"]], ["add", "theorem", "decode_unit_succ", ["encodable"]], ["add", "theorem", "decode_unit_zero", ["encodable"]], ["add", "theorem", "decode_zero", ["encodable"]], ["add", "def", "encodable_of_list", ["encodable"]], ["add", "theorem", "encode_ff", ["encodable"]], ["add", "theorem", "encode_injective", ["encodable"]], ["add", "def", "encode_list", ["encodable"]], ["add", "def", "encode_multiset", ["encodable"]], ["add", "theorem", "encode_none", ["encodable"]], ["add", "theorem", "encode_of_equiv", ["encodable"]], ["add", "theorem", "encode_prod_val", ["encodable"]], ["add", "def", "encode_sigma", ["encodable"]], ["add", "theorem", "encode_sigma_val", ["encodable"]], ["add", "theorem", "encode_some", ["encodable"]], ["add", "theorem", "encode_star", ["encodable"]], ["add", "def", "encode_subtype", ["encodable"]], ["add", "def", "encode_sum", ["encodable"]], ["add", "theorem", "encode_tt", ["encodable"]], ["add", "def", "of_equiv", ["encodable"]], ["add", "def", "of_left_injection", ["encodable"]], ["add", "def", "of_left_inverse", ["encodable"]], ["add", "def", "trunc_encodable_of_fintype", ["encodable"]], ["del", "def", "encodable_of_equiv", []], ["del", "def", "encodable_of_left_injection", []], ["del", "def", "encodable_of_list", []], ["del", "theorem", "encode_injective", []], ["del", "def", "trunc_encodable_of_fintype", []]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "symm_symm", ["equiv"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "attach_map_val", ["finset"]], ["add", "def", "map", ["finset"]], ["add", "theorem", "map_empty", ["finset"]], ["add", "theorem", "map_eq_empty", ["finset"]], ["add", "theorem", "map_eq_image", ["finset"]], ["add", "theorem", "map_filter", ["finset"]], ["add", "theorem", "map_insert", ["finset"]], ["add", "theorem", "map_inter", ["finset"]], ["add", "theorem", "map_map", ["finset"]], ["add", "theorem", "map_refl", ["finset"]], ["add", "theorem", "map_singleton", ["finset"]], ["add", "theorem", "map_subset_map", ["finset"]], ["add", "theorem", "map_to_finset", ["finset"]], ["add", "theorem", "map_union", ["finset"]], ["add", "theorem", "map_val", ["finset"]], ["add", "theorem", "mem_map", ["finset"]], ["add", "theorem", "mem_map_of_mem", ["finset"]], ["add", "theorem", "sort_sorted_lt", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "exists_univ_list", ["fintype"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "filter_congr", ["list"]], ["add", "theorem", "foldl_ext", ["list"]], ["add", "theorem", "foldr_ext", ["list"]], ["add", "theorem", "map_add_range'", ["list"]], ["add", "theorem", "nth_le_map'", ["list"]], ["add", "theorem", "nth_le_map", ["list"]], ["add", "theorem", "nth_map", ["list"]], ["add", "theorem", "and", ["list", "pairwise"]], ["add", "theorem", "imp₂", ["list", "pairwise"]], ["add", "theorem", "range'_eq_map_range", ["list"]], ["add", "theorem", "range_succ_eq_map", ["list"]], ["add", "theorem", "reverse_range'", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": [["mod", "theorem", "eq_of_sorted_of_perm", ["list"]], ["add", "theorem", "merge_sort_eq_self", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["mod", "theorem", "mkpair_unpair", ["nat"]], ["mod", "theorem", "unpair_mkpair", ["nat"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "map_none'", ["option"]], ["add", "theorem", "map_some'", ["option"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/semiquot.lean", "newPath": "data/semiquot.lean", "changes": [["add", "theorem", "min", ["semiquot", "is_pure"]], ["add", "theorem", "mono", ["semiquot", "is_pure"]], ["add", "theorem", "is_pure_iff", ["semiquot"]], ["add", "theorem", "pure_inj", ["semiquot"]]]}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "right_comm", ["and"]], ["add", "theorem", "rotate", ["and"]]]}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": [["add", "def", "subtype", ["function", "embedding"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}]}, {"timestamp": 1526465782, "sha": "fe7d5738", "message": "refactor(data/set/enumerate): proof enumeration_inj using wlog", "changes": [{"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": [["mod", "theorem", "enumerate_inj", ["set"]]]}]}, {"timestamp": 1526465782, "sha": "d8c33e84", "message": "feat(tactic): generalize wlog to support multiple variables and cases, allow to provide case rule", "changes": [{"oldPath": "tactic/default.lean", "newPath": "tactic/default.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/wlog.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1525966187, "sha": "2cd640a5", "message": "feat(data/multiset): add sections", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "bind_map", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "bind_add", ["multiset"]], ["add", "theorem", "bind_assoc", ["multiset"]], ["mod", "theorem", "bind_bind", ["multiset"]], ["add", "theorem", "bind_cons", ["multiset"]], ["add", "theorem", "bind_map", ["multiset"]], ["add", "theorem", "bind_map_comm", ["multiset"]], ["add", "theorem", "bind_zero", ["multiset"]], ["add", "theorem", "card_sections", ["multiset"]], ["add", "theorem", "coe_sections", ["multiset"]], ["mod", "theorem", "map_bind", ["multiset"]], ["add", "theorem", "map_id'", ["multiset"]], ["add", "theorem", "mem_sections", ["multiset"]], ["add", "theorem", "prod_map_one", ["multiset"]], ["add", "theorem", "prod_map_sum", ["multiset"]], ["add", "theorem", "rel_bind", ["multiset"]], ["add", "def", "sections", ["multiset"]], ["add", "theorem", "sections_add", ["multiset"]], ["add", "theorem", "sections_cons", ["multiset"]], ["add", "theorem", "sections_zero", ["multiset"]], ["add", "theorem", "sum_map_mul_left", ["multiset"]], ["add", "theorem", "sum_map_mul_right", ["multiset"]], ["add", "theorem", "sum_map_zero", ["multiset"]]]}]}, {"timestamp": 1525966169, "sha": "62833ca5", "message": "feat(data/multiset): add relator", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "card_eq_card_of_rel", ["multiset"]], ["add", "theorem", "cons_eq_cons", ["multiset"]], ["add", "theorem", "cons_ne_zero", ["multiset"]], ["add", "theorem", "add", ["multiset", "rel"]], ["add", "theorem", "mono", ["multiset", "rel"]], ["add", "inductive", "rel", ["multiset"]], ["add", "theorem", "rel_add_left", ["multiset"]], ["add", "theorem", "rel_add_right", ["multiset"]], ["add", "theorem", "rel_cons_left", ["multiset"]], ["add", "theorem", "rel_cons_right", ["multiset"]], ["add", "theorem", "rel_eq", ["multiset"]], ["add", "theorem", "rel_eq_refl", ["multiset"]], ["add", "theorem", "rel_flip", ["multiset"]], ["add", "theorem", "rel_flip_eq", ["multiset"]], ["add", "theorem", "rel_join", ["multiset"]], ["add", "theorem", "rel_map", ["multiset"]], ["add", "theorem", "rel_map_left", ["multiset"]], ["add", "theorem", "rel_map_right", ["multiset"]], ["add", "theorem", "rel_zero_left", ["multiset"]], ["add", "theorem", "rel_zero_right", ["multiset"]], ["add", "theorem", "zero_ne_cons", ["multiset"]]]}, {"oldPath": "tests/mk_iff_of_inductive.lean", "newPath": "tests/mk_iff_of_inductive.lean", "changes": [["del", "inductive", "rel", ["multiset"]]]}]}, {"timestamp": 1525954345, "sha": "d10c3bb2", "message": "fix(order/complete_boolean_algebra): replace finish proof by simp (finish was very slow)", "changes": [{"oldPath": "order/complete_boolean_algebra.lean", "newPath": "order/complete_boolean_algebra.lean", "changes": []}]}, {"timestamp": 1525846786, "sha": "fc6f57af", "message": "feat(data/list/basic): list.forall2, list.sections", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "inductive", "forall₂", ["list"]], ["add", "theorem", "forall₂_cons", ["list"]], ["add", "theorem", "forall₂_iff_zip", ["list"]], ["add", "theorem", "forall₂_length_eq", ["list"]], ["add", "theorem", "forall₂_nil_left", ["list"]], ["add", "theorem", "forall₂_nil_right", ["list"]], ["add", "theorem", "forall₂_zip", ["list"]], ["add", "theorem", "mem_sections", ["list"]], ["add", "theorem", "mem_sections_length", ["list"]], ["add", "def", "sections", ["list"]]]}]}, {"timestamp": 1525845878, "sha": "42f5ea06", "message": "feat(data/semiquot): semiquotient types", "changes": [{"oldPath": "data/fp/basic.lean", "newPath": "data/fp/basic.lean", "changes": [["del", "def", "default_nan", ["fp", "float"]], ["del", "structure", "nan_pl", ["fp"]], ["del", "def", "shift2", ["fp"]], ["add", "def", "shift2", ["int"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["add", "theorem", "true_equivalence", []], ["add", "def", "bind", ["trunc"]], ["add", "def", "map", ["trunc"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "num_nonneg_iff_zero_le", ["rat"]], ["add", "theorem", "num_pos_iff_pos", ["rat"]]]}, {"oldPath": null, "newPath": "data/semiquot.lean", "changes": [["add", "def", "bind", ["semiquot"]], ["add", "def", "blur'", ["semiquot"]], ["add", "def", "blur", ["semiquot"]], ["add", "theorem", "blur_eq_blur'", ["semiquot"]], ["add", "theorem", "eq_mk_of_mem", ["semiquot"]], ["add", "theorem", "eq_pure", ["semiquot"]], ["add", "theorem", "exists_mem", ["semiquot"]], ["add", "theorem", "ext", ["semiquot"]], ["add", "theorem", "ext_s", ["semiquot"]], ["add", "def", "get", ["semiquot"]], ["add", "theorem", "get_mem", ["semiquot"]], ["add", "def", "is_pure", ["semiquot"]], ["add", "theorem", "is_pure_of_subsingleton", ["semiquot"]], ["add", "theorem", "is_pure_univ", ["semiquot"]], ["add", "def", "lift_on", ["semiquot"]], ["add", "theorem", "lift_on_of_mem", ["semiquot"]], ["add", "def", "map", ["semiquot"]], ["add", "theorem", "mem_bind", ["semiquot"]], ["add", "theorem", "mem_blur'", ["semiquot"]], ["add", "theorem", "mem_map", ["semiquot"]], ["add", "theorem", "mem_pure'", ["semiquot"]], ["add", "theorem", "mem_pure", ["semiquot"]], ["add", "theorem", "mem_pure_self", ["semiquot"]], ["add", "theorem", "mem_univ", ["semiquot"]], ["add", "def", "mk", ["semiquot"]], ["add", "theorem", "ne_empty", ["semiquot"]], ["add", "def", "of_trunc", ["semiquot"]], ["add", "theorem", "pure_is_pure", ["semiquot"]], ["add", "theorem", "pure_le", ["semiquot"]], ["add", "def", "to_trunc", ["semiquot"]], ["add", "def", "univ", ["semiquot"]], ["add", "theorem", "univ_unique", ["semiquot"]], ["add", "structure", "{u}", []]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "mem_bInter_iff", ["set"]], ["add", "theorem", "mem_bUnion_iff", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "eq_equivalence", []]]}]}, {"timestamp": 1525845878, "sha": "b31c30db", "message": "refactor(logic/function): constructive proof of cantor_injective", "changes": [{"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["mod", "theorem", "cantor_injective", ["function"]]]}]}, {"timestamp": 1525866091, "sha": "54df4d9c", "message": "feat(linear_algebra/multivariate_polynomial): change order of eval arguments; show that eval is ring homomorphism\n(closes https://github.com/leanprover/mathlib/pull/134)", "changes": [{"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["mod", "def", "eval", ["mv_polynomial"]]]}]}, {"timestamp": 1525862763, "sha": "b5eddd80", "message": "fix(data/set/basic): mark subset.refl as @[refl]", "changes": [{"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "refl", ["set", "subset"]]]}]}, {"timestamp": 1525450227, "sha": "e4c64fd9", "message": "feat(tactic/mk_iff_of_inductive_prop): add tactic to represent inductives using logical connectives", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "logic/relation.lean", "newPath": "logic/relation.lean", "changes": [["mod", "theorem", "to_refl_trans_gen", ["relation", "refl_gen"]], ["mod", "theorem", "cases_tail", ["relation", "refl_trans_gen"]], ["del", "theorem", "cases_tail_iff", ["relation", "refl_trans_gen"]]]}, {"oldPath": "tactic/default.lean", "newPath": "tactic/default.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/mk_iff_of_inductive_prop.lean", "changes": []}, {"oldPath": null, "newPath": "tests/mk_iff_of_inductive.lean", "changes": [["add", "inductive", "rel", ["multiset"]], ["add", "inductive", "is_true", ["test"]]]}]}, {"timestamp": 1525355212, "sha": "fa7a180c", "message": "feat(tactic/solve_by_elim): make solve_by_elim easier to use correctly (#131)", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1525358495, "sha": "ef43edfd", "message": "feat(data/finset): add list.to_finset theorems", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "to_finset_card_of_nodup", ["list"]], ["add", "theorem", "to_finset_cons", ["list"]], ["add", "theorem", "to_finset_nil", ["list"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "erase_dup_idempotent", ["list"]], ["add", "theorem", "pw_filter_idempotent", ["list"]]]}]}, {"timestamp": 1525346590, "sha": "02c2b56a", "message": "feat(analysis/topology/topological_space): t2 instances for constructions of limit type", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}]}, {"timestamp": 1524965232, "sha": "a97101d2", "message": "fix(docs/naming): use names in use (#122)", "changes": [{"oldPath": "docs/naming.md", "newPath": "docs/naming.md", "changes": []}]}, {"timestamp": 1524767350, "sha": "48485a2e", "message": "refactor(logic/relation,group_theory/free_group): add theory for reflextive/transitive relations & use them for the free group reduction", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "append_eq_append_iff", ["list"]], ["add", "theorem", "append_eq_cons_iff", ["list"]], ["add", "theorem", "append_eq_has_append", ["list"]], ["add", "theorem", "cons_eq_append_iff", ["list"]], ["add", "theorem", "infix_cons", ["list"]], ["add", "theorem", "nil_eq_append_iff", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "group_theory/free_group.lean", "newPath": "group_theory/free_group.lean", "changes": [["del", "theorem", "church_rosser", ["free_group"]], ["del", "theorem", "church_rosser_1", ["free_group"]], ["add", "theorem", "equivalence_join_red", ["free_group"]], ["add", "theorem", "eqv_gen_step_iff_join_red", ["free_group"]], ["del", "def", "inv", ["free_group"]], ["add", "theorem", "inv_mk", ["free_group"]], ["add", "theorem", "join_red_of_step", ["free_group"]], ["mod", "theorem", "comp", ["free_group", "map"]], ["add", "theorem", "one_eq_mk", ["free_group"]], ["mod", "theorem", "antisymm", ["free_group", "red"]], ["del", "theorem", "append", ["free_group", "red"]], ["add", "theorem", "append_append", ["free_group", "red"]], ["add", "theorem", "append_append_left_iff", ["free_group", "red"]], ["del", "theorem", "bnot", ["free_group", "red"]], ["add", "theorem", "church_rosser", ["free_group", "red"]], ["del", "theorem", "cons", ["free_group", "red"]], ["del", "theorem", "cons_bnot", ["free_group", "red"]], ["del", "theorem", "cons_bnot_rev", ["free_group", "red"]], ["add", "theorem", "cons_cons", ["free_group", "red"]], ["add", "theorem", "cons_cons_iff", ["free_group", "red"]], ["del", "theorem", "cons_iff", ["free_group", "red"]], ["add", "theorem", "cons_nil_iff_singleton", ["free_group", "red"]], ["add", "theorem", "exact", ["free_group", "red"]], ["del", "theorem", "aux", ["free_group", "red", "inv_of_red_nil"]], ["del", "theorem", "inv_of_red_nil", ["free_group", "red"]], ["del", "theorem", "aux", ["free_group", "red", "inv_of_red_of_ne"]], ["mod", "theorem", "inv_of_red_of_ne", ["free_group", "red"]], ["mod", "theorem", "length", ["free_group", "red"]], ["del", "theorem", "aux", ["free_group", "red", "nil"]], ["del", "theorem", "nil", ["free_group", "red"]], ["add", "theorem", "nil_iff", ["free_group", "red"]], ["add", "theorem", "not_step_nil", ["free_group", "red"]], ["add", "theorem", "not_step_singleton", ["free_group", "red"]], ["del", "theorem", "of_cons", ["free_group", "red"]], ["del", "theorem", "of_step", ["free_group", "red"]], ["add", "theorem", "red_iff_irreducible", ["free_group", "red"]], ["add", "theorem", "refl", ["free_group", "red"]], ["del", "theorem", "aux", ["free_group", "red", "singleton"]], ["del", "theorem", "singleton", ["free_group", "red"]], ["add", "theorem", "singleton_iff", ["free_group", "red"]], ["del", "theorem", "sizeof", ["free_group", "red"]], ["add", "theorem", "sizeof_of_step", ["free_group", "red"]], ["mod", "theorem", "append_left", ["free_group", "red", "step"]], ["add", "theorem", "append_left_iff", ["free_group", "red", "step"]], ["mod", "theorem", "append_right", ["free_group", "red", "step"]], ["mod", "theorem", "bnot_rev", ["free_group", "red", "step"]], ["del", "theorem", "aux2", ["free_group", "red", "step", "church_rosser"]], ["del", "theorem", "aux", ["free_group", "red", "step", "church_rosser"]], ["del", "theorem", "church_rosser", ["free_group", "red", "step"]], ["mod", "theorem", "cons", ["free_group", "red", "step"]], ["mod", "theorem", "cons_bnot", ["free_group", "red", "step"]], ["add", "theorem", "cons_bnot_rev", ["free_group", "red", "step"]], ["add", "theorem", "cons_cons_iff", ["free_group", "red", "step"]], ["add", "theorem", "cons_left_iff", ["free_group", "red", "step"]], ["add", "theorem", "diamond", ["free_group", "red", "step"]], ["del", "theorem", "eqv_gen_of_red", ["free_group", "red", "step"]], ["del", "theorem", "exact", ["free_group", "red", "step"]], ["del", "theorem", "inv", ["free_group", "red", "step"]], ["mod", "theorem", "length", ["free_group", "red", "step"]], ["del", "theorem", "sound", ["free_group", "red", "step"]], ["mod", "theorem", "sublist", ["free_group", "red", "step"]], ["add", "theorem", "to_red", ["free_group", "red", "step"]], ["mod", "theorem", "sublist", ["free_group", "red"]], ["add", "theorem", "to_append_iff", ["free_group", "red"]], ["del", "theorem", "to_group", ["free_group", "red"]], ["del", "theorem", "aux", ["free_group", "red", "trans"]], ["mod", "theorem", "trans", ["free_group", "red"]], ["add", "def", "red", ["free_group"]], ["del", "inductive", "red", ["free_group"]], ["mod", "theorem", "not", ["free_group", "reduce"]], ["mod", "theorem", "to_group_eq_prod_map", ["free_group"]], ["mod", "def", "free_group", []], ["del", "theorem", "append_eq_has_append", ["list"]], ["del", "theorem", "infix_cons", ["list"]]]}, {"oldPath": null, "newPath": "logic/relation.lean", "changes": [["add", "theorem", "church_rosser", ["relation"]], ["add", "theorem", "equivalence_join", ["relation"]], ["add", "theorem", "equivalence_join_refl_trans_gen", ["relation"]], ["add", "theorem", "eqv_gen_iff_of_equivalence", ["relation"]], ["add", "theorem", "eqv_gen_mono", ["relation"]], ["add", "def", "join", ["relation"]], ["add", "theorem", "join_of_equivalence", ["relation"]], ["add", "theorem", "join_of_single", ["relation"]], ["add", "theorem", "to_refl_trans_gen", ["relation", "refl_gen"]], ["add", "inductive", "refl_gen", ["relation"]], ["add", "theorem", "cases_head", ["relation", "refl_trans_gen"]], ["add", "theorem", "cases_head_iff", ["relation", "refl_trans_gen"]], ["add", "theorem", "cases_tail", ["relation", "refl_trans_gen"]], ["add", "theorem", "cases_tail_iff", ["relation", "refl_trans_gen"]], ["add", "theorem", "head", ["relation", "refl_trans_gen"]], ["add", "theorem", "head_induction_on", ["relation", "refl_trans_gen"]], ["add", "theorem", "single", ["relation", "refl_trans_gen"]], ["add", "theorem", "trans", ["relation", "refl_trans_gen"]], ["add", "theorem", "trans_induction_on", ["relation", "refl_trans_gen"]], ["add", "inductive", "refl_trans_gen", ["relation"]], ["add", "theorem", "refl_trans_gen_iff_eq", ["relation"]], ["add", "theorem", "refl_trans_gen_lift", ["relation"]], ["add", "theorem", "refl_trans_gen_mono", ["relation"]], ["add", "theorem", "refl_trans_gen_of_equivalence", ["relation"]], ["add", "theorem", "refl_trans_gen_of_transitive_reflexive", ["relation"]], ["add", "theorem", "refl_trans_gen_refl_trans_gen", ["relation"]], ["add", "theorem", "reflexive_join", ["relation"]], ["add", "theorem", "reflexive_refl_trans_gen", ["relation"]], ["add", "theorem", "symmetric_join", ["relation"]], ["add", "theorem", "transitive_join", ["relation"]], ["add", "theorem", "transitive_refl_trans_gen", ["relation"]]]}]}, {"timestamp": 1524666958, "sha": "5df2ee70", "message": "style(group_theory): move free_group from algebra to group_theory", "changes": [{"oldPath": "algebra/free_group.lean", "newPath": "group_theory/free_group.lean", "changes": [["mod", "theorem", "aux", ["free_group", "red", "inv_of_red_of_ne"]]]}]}, {"timestamp": 1524666501, "sha": "716decc0", "message": "feat(algebra): add free groups (#89)", "changes": [{"oldPath": null, "newPath": "algebra/free_group.lean", "changes": [["add", "theorem", "church_rosser", ["free_group"]], ["add", "theorem", "church_rosser_1", ["free_group"]], ["add", "def", "free_group_congr", ["free_group"]], ["add", "def", "free_group_empty_equiv_unit", ["free_group"]], ["add", "def", "free_group_unit_equiv_int", ["free_group"]], ["add", "def", "inv", ["free_group"]], ["add", "def", "aux", ["free_group", "map"]], ["add", "theorem", "comp", ["free_group", "map"]], ["add", "theorem", "id'", ["free_group", "map"]], ["add", "theorem", "id", ["free_group", "map"]], ["add", "theorem", "inv", ["free_group", "map"]], ["add", "theorem", "mk", ["free_group", "map"]], ["add", "theorem", "mul", ["free_group", "map"]], ["add", "theorem", "of", ["free_group", "map"]], ["add", "theorem", "one", ["free_group", "map"]], ["add", "theorem", "unique", ["free_group", "map"]], ["add", "def", "map", ["free_group"]], ["add", "theorem", "map_eq_to_group", ["free_group"]], ["add", "def", "mk", ["free_group"]], ["add", "theorem", "mul_mk", ["free_group"]], ["add", "theorem", "inj", ["free_group", "of"]], ["add", "def", "of", ["free_group"]], ["add", "theorem", "inv", ["free_group", "prod"]], ["add", "theorem", "mul", ["free_group", "prod"]], ["add", "theorem", "of", ["free_group", "prod"]], ["add", "theorem", "one", ["free_group", "prod"]], ["add", "theorem", "unique", ["free_group", "prod"]], ["add", "def", "prod", ["free_group"]], ["add", "theorem", "prod_mk", ["free_group"]], ["add", "theorem", "quot_lift_mk", ["free_group"]], ["add", "theorem", "quot_lift_on_mk", ["free_group"]], ["add", "theorem", "quot_mk_eq_mk", ["free_group"]], ["add", "theorem", "antisymm", ["free_group", "red"]], ["add", "theorem", "append", ["free_group", "red"]], ["add", "theorem", "bnot", ["free_group", "red"]], ["add", "theorem", "cons", ["free_group", "red"]], ["add", "theorem", "cons_bnot", ["free_group", "red"]], ["add", "theorem", "cons_bnot_rev", ["free_group", "red"]], ["add", "theorem", "cons_iff", ["free_group", "red"]], ["add", "theorem", "complete", ["free_group", "red", "enum"]], ["add", "theorem", "sound", ["free_group", "red", "enum"]], ["add", "def", "enum", ["free_group", "red"]], ["add", "theorem", "aux", ["free_group", "red", "inv_of_red_nil"]], ["add", "theorem", "inv_of_red_nil", ["free_group", "red"]], ["add", "theorem", "aux", ["free_group", "red", "inv_of_red_of_ne"]], ["add", "theorem", "inv_of_red_of_ne", ["free_group", "red"]], ["add", "theorem", "length", ["free_group", "red"]], ["add", "theorem", "aux", ["free_group", "red", "nil"]], ["add", "theorem", "nil", ["free_group", "red"]], ["add", "theorem", "of_cons", ["free_group", "red"]], ["add", "theorem", "of_step", ["free_group", "red"]], ["add", "theorem", "aux", ["free_group", "red", "singleton"]], ["add", "theorem", "singleton", ["free_group", "red"]], ["add", "theorem", "sizeof", ["free_group", "red"]], ["add", "theorem", "append_left", ["free_group", "red", "step"]], ["add", "theorem", "append_right", ["free_group", "red", "step"]], ["add", "theorem", "bnot_rev", ["free_group", "red", "step"]], ["add", "theorem", "aux2", ["free_group", "red", "step", "church_rosser"]], ["add", "theorem", "aux", ["free_group", "red", "step", "church_rosser"]], ["add", "theorem", "church_rosser", ["free_group", "red", "step"]], ["add", "theorem", "cons", ["free_group", "red", "step"]], ["add", "theorem", "cons_bnot", ["free_group", "red", "step"]], ["add", "theorem", "eqv_gen_of_red", ["free_group", "red", "step"]], ["add", "theorem", "exact", ["free_group", "red", "step"]], ["add", "theorem", "inv", ["free_group", "red", "step"]], ["add", "theorem", "length", ["free_group", "red", "step"]], ["add", "theorem", "sound", ["free_group", "red", "step"]], ["add", "theorem", "sublist", ["free_group", "red", "step"]], ["add", "theorem", "to_group", ["free_group", "red", "step"]], ["add", "inductive", "step", ["free_group", "red"]], ["add", "theorem", "sublist", ["free_group", "red"]], ["add", "theorem", "to_group", ["free_group", "red"]], ["add", "theorem", "aux", ["free_group", "red", "trans"]], ["add", "theorem", "trans", ["free_group", "red"]], ["add", "inductive", "red", ["free_group"]], ["add", "def", "church_rosser", ["free_group", "reduce"]], ["add", "theorem", "cons", ["free_group", "reduce"]], ["add", "theorem", "eq_of_red", ["free_group", "reduce"]], ["add", "theorem", "exact", ["free_group", "reduce"]], ["add", "theorem", "idem", ["free_group", "reduce"]], ["add", "theorem", "min", ["free_group", "reduce"]], ["add", "theorem", "not", ["free_group", "reduce"]], ["add", "theorem", "red", ["free_group", "reduce"]], ["add", "theorem", "rev", ["free_group", "reduce"]], ["add", "theorem", "self", ["free_group", "reduce"]], ["add", "theorem", "sound", ["free_group", "reduce"]], ["add", "theorem", "eq", ["free_group", "reduce", "step"]], ["add", "def", "reduce", ["free_group"]], ["add", "theorem", "inv", ["free_group", "sum"]], ["add", "theorem", "of", ["free_group", "sum"]], ["add", "theorem", "one", ["free_group", "sum"]], ["add", "theorem", "sum", ["free_group", "sum"]], ["add", "def", "sum", ["free_group"]], ["add", "theorem", "sum_mk", ["free_group"]], ["add", "def", "aux", ["free_group", "to_group"]], ["add", "theorem", "inv", ["free_group", "to_group"]], ["add", "theorem", "mk", ["free_group", "to_group"]], ["add", "theorem", "mul", ["free_group", "to_group"]], ["add", "theorem", "of", ["free_group", "to_group"]], ["add", "theorem", "of_eq", ["free_group", "to_group"]], ["add", "theorem", "one", ["free_group", "to_group"]], ["add", "theorem", "range_eq_closure", ["free_group", "to_group"]], ["add", "theorem", "range_subset", ["free_group", "to_group"]], ["add", "theorem", "unique", ["free_group", "to_group"]], ["add", "def", "to_group", ["free_group"]], ["add", "theorem", "to_group_eq_prod_map", ["free_group"]], ["add", "def", "inj", ["free_group", "to_word"]], ["add", "def", "mk", ["free_group", "to_word"]], ["add", "def", "to_word", ["free_group"]], ["add", "def", "free_group", []], ["add", "theorem", "append_eq_has_append", ["list"]], ["add", "theorem", "infix_cons", ["list"]]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": []}]}, {"timestamp": 1524663847, "sha": "e6264eb4", "message": "feat(order/conditionally_complete_lattice): add instance complete_linear_order -> conditionally_complete_linear_order; add cSup/cInf_interval", "changes": [{"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_interval", ["lattice"]], ["add", "theorem", "cSup_interval", ["lattice"]]]}]}, {"timestamp": 1524661609, "sha": "bf041275", "message": "feat(order): add liminf and limsup over filters (c.f. Sébastien Gouëzel's #115)", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "Liminf_eq_of_le_nhds", []], ["add", "theorem", "Liminf_nhds", []], ["add", "theorem", "Limsup_eq_of_le_nhds", []], ["add", "theorem", "Limsup_nhds", []], ["add", "theorem", "gt_mem_sets_of_Liminf_gt", []], ["add", "theorem", "is_bounded_ge_nhds", []], ["add", "theorem", "is_bounded_le_nhds", []], ["add", "theorem", "is_bounded_under_ge_of_tendsto", []], ["add", "theorem", "is_bounded_under_le_of_tendsto", []], ["add", "theorem", "is_cobounded_ge_nhds", []], ["add", "theorem", "is_cobounded_le_nhds", []], ["add", "theorem", "is_cobounded_under_ge_of_tendsto", []], ["add", "theorem", "is_cobounded_under_le_of_tendsto", []], ["add", "theorem", "le_nhds_of_Limsup_eq_Liminf", []], ["add", "theorem", "lt_mem_sets_of_Limsup_lt", []]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "exists_true_iff_nonempty", []]]}, {"oldPath": "order/conditionally_complete_lattice.lean", "newPath": "order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "cInf_lower_bounds_eq_cSup", ["lattice"]], ["add", "theorem", "cSup_upper_bounds_eq_cInf", ["lattice"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["add", "theorem", "forall_le_or_exists_lt_inf", ["lattice"]], ["add", "theorem", "forall_le_or_exists_lt_sup", ["lattice"]]]}, {"oldPath": null, "newPath": "order/liminf_limsup.lean", "changes": [["add", "def", "Liminf", ["filter"]], ["add", "theorem", "Liminf_bot", ["filter"]], ["add", "theorem", "Liminf_eq_supr_Inf", ["filter"]], ["add", "theorem", "Liminf_le_Liminf", ["filter"]], ["add", "theorem", "Liminf_le_Liminf_of_le", ["filter"]], ["add", "theorem", "Liminf_le_Limsup", ["filter"]], ["add", "theorem", "Liminf_le_of_le", ["filter"]], ["add", "theorem", "Liminf_principal", ["filter"]], ["add", "theorem", "Liminf_top", ["filter"]], ["add", "def", "Limsup", ["filter"]], ["add", "theorem", "Limsup_bot", ["filter"]], ["add", "theorem", "Limsup_eq_infi_Sup", ["filter"]], ["add", "theorem", "Limsup_le_Limsup", ["filter"]], ["add", "theorem", "Limsup_le_Limsup_of_le", ["filter"]], ["add", "theorem", "Limsup_le_of_le", ["filter"]], ["add", "theorem", "Limsup_principal", ["filter"]], ["add", "theorem", "Limsup_top", ["filter"]], ["add", "def", "is_bounded", ["filter"]], ["add", "theorem", "is_bounded_bot", ["filter"]], ["add", "theorem", "is_bounded_ge_of_bot", ["filter"]], ["add", "theorem", "is_bounded_iff", ["filter"]], ["add", "theorem", "is_bounded_le_of_top", ["filter"]], ["add", "theorem", "is_bounded_of_le", ["filter"]], ["add", "theorem", "is_bounded_principal", ["filter"]], ["add", "theorem", "is_bounded_sup", ["filter"]], ["add", "theorem", "is_bounded_top", ["filter"]], ["add", "def", "is_bounded_under", ["filter"]], ["add", "theorem", "is_bounded_under_inf", ["filter"]], ["add", "theorem", "is_bounded_under_of", ["filter"]], ["add", "theorem", "is_bounded_under_of_is_bounded", ["filter"]], ["add", "theorem", "is_bounded_under_sup", ["filter"]], ["add", "theorem", "mk", ["filter", "is_cobounded"]], ["add", "def", "is_cobounded", ["filter"]], ["add", "theorem", "is_cobounded_bot", ["filter"]], ["add", "theorem", "is_cobounded_ge_of_top", ["filter"]], ["add", "theorem", "is_cobounded_le_of_bot", ["filter"]], ["add", "theorem", "is_cobounded_of_is_bounded", ["filter"]], ["add", "theorem", "is_cobounded_of_le", ["filter"]], ["add", "theorem", "is_cobounded_principal", ["filter"]], ["add", "theorem", "is_cobounded_top", ["filter"]], ["add", "def", "is_cobounded_under", ["filter"]], ["add", "theorem", "le_Liminf_of_le", ["filter"]], ["add", "theorem", "le_Limsup_of_le", ["filter"]], ["add", "def", "liminf", ["filter"]], ["add", "theorem", "liminf_eq", ["filter"]], ["add", "theorem", "liminf_eq_supr_infi", ["filter"]], ["add", "theorem", "liminf_le_liminf", ["filter"]], ["add", "def", "limsup", ["filter"]], ["add", "theorem", "limsup_eq", ["filter"]], ["add", "theorem", "limsup_eq_infi_supr", ["filter"]], ["add", "theorem", "limsup_le_limsup", ["filter"]]]}]}, {"timestamp": 1524608329, "sha": "78d28c5c", "message": "fix(*): update to lean", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "insert_val_of_not_mem", ["finset"]], ["mod", "theorem", "mem_pi", ["finset"]], ["mod", "def", "empty", ["finset", "pi"]], ["add", "theorem", "pi_val", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "append_eq_nil", ["list"]]]}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "set_theory/zfc.lean", "newPath": "set_theory/zfc.lean", "changes": [["add", "theorem", "eval_val", ["pSet", "resp"]], ["del", "def", "eval_val", ["pSet", "resp"]]]}]}, {"timestamp": 1524604289, "sha": "44271cff", "message": "feat(tactic/interactive): add `clean` tactic\nfor removing identity junk and annotations added to terms by common tactics like dsimp", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1524601072, "sha": "e4c09d4e", "message": "feat(analysis/topology/topological_space): a finite union of compact sets is compact (#117)", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "compact_bUnion_of_compact", []], ["add", "theorem", "compact_of_finite", []]]}]}, {"timestamp": 1524600970, "sha": "e4e46592", "message": "feat(tactic/generalize_hyp): a version of `generalize` that also applies to assumptions (#110)", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": [["add", "theorem", "{u}", ["tactic", "interactive"]]]}, {"oldPath": "tests/tactics.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1524589219, "sha": "f87135b3", "message": "feat(algebra/pi_instances): Adds pi instances for common algebraic structures", "changes": [{"oldPath": null, "newPath": "algebra/pi_instances.lean", "changes": []}]}, {"timestamp": 1524585426, "sha": "3b73ea11", "message": "feat(tactic/convert): tactic similar to `refine` (#116)\n... but which generates equality proof obligations for every discrepancy between the goal and\nthe type of the rule", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/wlog.lean", "newPath": "tests/tactics.lean", "changes": []}]}, {"timestamp": 1524580220, "sha": "7dcd6f51", "message": "feat(tactic/interactive): adding a discharger argument to solve_by_elim (#108)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1524579992, "sha": "009968ea", "message": "feat(docs/tactic): document congr_n and unfold_coes (#105)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1524579948, "sha": "44391c95", "message": "doc(docs/elan.md): a short setup guide\nA short guide on getting started with Lean, mathlib and elan.\nAdds a link to docs/elan.md in README.md", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "docs/elan.md", "changes": []}]}, {"timestamp": 1524579899, "sha": "23c07fd7", "message": "feat(docs/extras/cc) Documents the cc tactic\nFrom explanations and experiments by Simon, Gabriel and Kenny at\nhttps://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/cc.20is.20so.20powerful", "changes": [{"oldPath": "docs/extras.md", "newPath": "docs/extras.md", "changes": []}, {"oldPath": null, "newPath": "docs/extras/cc.md", "changes": []}]}, {"timestamp": 1524579755, "sha": "e2c74215", "message": "feat(tactic/ext): new `ext` tactic and corresponding `extensionality` attribute", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "ext'", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "ext'", ["multiset"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": null, "newPath": "data/stream/basic.lean", "changes": []}, {"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1524579355, "sha": "d862939b", "message": "fix(tactic/wlog): in the proof of completeness, useful assumptions were not visible", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tests/wlog.lean", "newPath": "tests/wlog.lean", "changes": []}]}, {"timestamp": 1524127767, "sha": "c13c5ea7", "message": "fix(ordinal): fix looping simp", "changes": [{"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1524124716, "sha": "2d935cbc", "message": "refactor(lebesgue_measure): clean up proofs", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "lt_sub", []], ["del", "theorem", "lt_sub_iff", []], ["del", "theorem", "sub_lt_iff", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": [["mod", "theorem", "le_lebesgue_length", ["measure_theory"]], ["mod", "theorem", "lebesgue_Ico", ["measure_theory"]], ["mod", "theorem", "lebesgue_Ioo", ["measure_theory"]], ["add", "theorem", "lebesgue_length_Ico'", ["measure_theory"]], ["mod", "theorem", "lebesgue_length_Ico", ["measure_theory"]], ["del", "theorem", "lebesgue_length_Ico_le_lebesgue_length_Ico", ["measure_theory"]], ["mod", "theorem", "lebesgue_outer_Ico", ["measure_theory"]]]}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "of_function_le", ["measure_theory", "outer_measure"]]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/set/intervals.lean", "newPath": "data/set/intervals.lean", "changes": [["add", "theorem", "Ico_sdiff_Ioo_eq_singleton", ["set"]], ["add", "theorem", "Ico_self", ["set"]], ["add", "theorem", "Ico_subset_Ico_left", ["set"]], ["add", "theorem", "Ico_subset_Ico_right", ["set"]], ["add", "theorem", "Ico_subset_Iio_self", ["set"]], ["add", "theorem", "Ico_subset_Ioo_left", ["set"]], ["add", "theorem", "Ioo_self", ["set"]], ["add", "theorem", "Ioo_subset_Ico_self", ["set"]]]}]}, {"timestamp": 1524112828, "sha": "7d1ab388", "message": "feat(list/basic,...): minor modifications & additions\nbased on Zulip conversations and requests", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["del", "def", "nonunits", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "append_inj_left'", ["list"]], ["mod", "theorem", "append_inj_left", ["list"]], ["mod", "theorem", "append_inj_right'", ["list"]], ["mod", "theorem", "append_inj_right", ["list"]], ["mod", "theorem", "append_left_cancel", ["list"]], ["add", "theorem", "append_left_inj", ["list"]], ["mod", "theorem", "append_right_cancel", ["list"]], ["add", "theorem", "append_right_inj", ["list"]], ["add", "theorem", "drop_suffix", ["list"]], ["add", "theorem", "prefix_append_left_inj", ["list"]], ["add", "theorem", "prefix_cons_inj", ["list"]], ["add", "theorem", "prefix_iff_eq_append", ["list"]], ["add", "theorem", "prefix_iff_eq_take", ["list"]], ["add", "theorem", "suffix_iff_eq_append", ["list"]], ["add", "theorem", "suffix_iff_eq_drop", ["list"]], ["add", "theorem", "take_prefix", ["list"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "image_preimage_eq", ["set"]], ["mod", "theorem", "preimage_image_eq", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["mod", "def", "decidable_of_iff'", []], ["mod", "def", "decidable_of_iff", []], ["add", "theorem", "exists_prop_of_false", []], ["add", "theorem", "exists_prop_of_true", []], ["add", "theorem", "forall_prop_of_false", []], ["add", "theorem", "forall_prop_of_true", []], ["mod", "theorem", "not_and_not_right", []], ["mod", "theorem", "not_and_of_not_or_not", []], ["mod", "theorem", "not_imp_of_and_not", []], ["add", "theorem", "not_nonempty_iff_imp_false", []]]}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["add", "def", "nonunits", []]]}]}, {"timestamp": 1523999322, "sha": "ed098676", "message": "feat(data/list/basic): prefix_or_prefix", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "nil_infix", ["list"]], ["add", "theorem", "nil_prefix", ["list"]], ["add", "theorem", "nil_suffix", ["list"]], ["add", "theorem", "prefix_of_prefix_length_le", ["list"]], ["add", "theorem", "prefix_or_prefix_of_prefix", ["list"]], ["add", "theorem", "reverse_prefix", ["list"]], ["add", "theorem", "reverse_suffix", ["list"]], ["add", "theorem", "suffix_of_suffix_length_le", ["list"]], ["add", "theorem", "suffix_or_suffix_of_suffix", ["list"]]]}]}, {"timestamp": 1523930033, "sha": "d9daa102", "message": "chore(group_theory): fixups", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["del", "theorem", "mul", ["is_group_anti_hom"]], ["del", "def", "is_group_anti_hom", []], ["del", "theorem", "mul", ["is_group_hom"]], ["del", "def", "is_group_hom", []]]}, {"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["add", "def", "left_rel", []]]}, {"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": []}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["mod", "theorem", "inj_iff_trivial_ker", ["is_group_hom"]], ["mod", "theorem", "trivial_ker_of_inj", ["is_group_hom"]], ["mod", "theorem", "trivial_eq_closure", ["is_subgroup"]]]}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": []}]}, {"timestamp": 1523907545, "sha": "4f42fbf1", "message": "feat(data/option): more option stuff", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["mod", "def", "is_group_hom", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "to_list_nodup", ["option"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["mod", "theorem", "bind_eq_some", ["option"]], ["mod", "theorem", "bind_some", ["option"]], ["add", "theorem", "get_mem", ["option"]], ["add", "theorem", "get_of_mem", ["option"]], ["mod", "theorem", "guard_eq_some", ["option"]], ["add", "theorem", "iget_mem", ["option"]], ["add", "theorem", "iget_of_mem", ["option"]], ["add", "theorem", "iget_some", ["option"]], ["mod", "theorem", "is_none_iff_eq_none", ["option"]], ["mod", "theorem", "is_some_iff_exists", ["option"]], ["mod", "theorem", "map_eq_some", ["option"]], ["mod", "theorem", "map_id'", ["option"]], ["mod", "theorem", "map_none", ["option"]], ["mod", "theorem", "map_some", ["option"]], ["mod", "theorem", "mem_def", ["option"]], ["add", "theorem", "mem_to_list", ["option"]], ["mod", "theorem", "none_bind", ["option"]], ["mod", "theorem", "seq_some", ["option"]], ["mod", "theorem", "some_bind", ["option"]], ["mod", "theorem", "some_inj", ["option"]]]}]}, {"timestamp": 1523905304, "sha": "d5c73c0b", "message": "chore(*): trailing spaces", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": [["mod", "theorem", "pow_unbounded_of_gt_one", []]]}, {"oldPath": "algebra/euclidean_domain.lean", "newPath": "algebra/euclidean_domain.lean", "changes": [["mod", "theorem", "gcd_one_left", ["euclidean_domain"]], ["mod", "theorem", "gcd_zero_left", ["euclidean_domain"]], ["mod", "theorem", "mod_one", ["euclidean_domain"]], ["mod", "theorem", "mod_zero", ["euclidean_domain"]]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "data/int/modeq.lean", "newPath": "data/int/modeq.lean", "changes": [["mod", "theorem", "modeq_neg", ["int", "modeq"]]]}, {"oldPath": "data/nat/choose.lean", "newPath": "data/nat/choose.lean", "changes": [["mod", "theorem", "choose_succ_self", []]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["mod", "theorem", "mem_list_primes_of_dvd_prod", ["nat"]], ["mod", "theorem", "prod_factors", ["nat"]]]}, {"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": []}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/function.lean", "newPath": "data/set/function.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["mod", "theorem", "hfunext", ["function"]]]}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": [["mod", "theorem", "cof_eq_one_iff_is_succ", ["ordinal"]], ["mod", "theorem", "cof_eq_zero", ["ordinal"]], ["mod", "theorem", "cof_succ", ["ordinal"]], ["mod", "theorem", "cof_zero", ["ordinal"]]]}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": [["mod", "theorem", "split_eq_scale_split'", ["onote"]]]}, {"oldPath": "tactic/alias.lean", "newPath": "tactic/alias.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": []}]}, {"timestamp": 1523905213, "sha": "b7db5080", "message": "feat(analysis/topology/topological_space): basis elements are open", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_open_of_is_topological_basis", ["topological_space"]], ["add", "theorem", "mem_basis_subset_of_mem_open", ["topological_space"]]]}]}, {"timestamp": 1523905213, "sha": "6dd2bc0e", "message": "feat(data/option): more option decidability", "changes": [{"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["add", "theorem", "not_ff", ["bool"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "is_none_iff_eq_none", ["option"]], ["mod", "def", "to_list", ["option"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "def", "decidable_of_bool", []]]}]}, {"timestamp": 1523910557, "sha": "f2361dc2", "message": "fix(group_theory/coset): left_cosets.left_cosets -> left_cosets.eq_class_eq_left_coset is now a theorem", "changes": [{"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["add", "theorem", "eq_class_eq_left_coset", ["left_cosets"]], ["del", "def", "left_coset", ["left_cosets"]]]}]}, {"timestamp": 1523909390, "sha": "910de7ec", "message": "refactor(group_theory/coset): left_cosets is now a quotient (#103)", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "def", "equiv_fib", ["equiv"]]]}, {"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["del", "theorem", "Union_left_cosets_eq_univ", ["is_subgroup"]], ["del", "theorem", "group_equiv_left_cosets_times_subgroup", ["is_subgroup"]], ["add", "def", "left_coset_equiv_subgroup", ["is_subgroup"]], ["del", "theorem", "left_cosets_disjoint", ["is_subgroup"]], ["del", "theorem", "left_cosets_equiv_subgroup", ["is_subgroup"]], ["del", "theorem", "pairwise_left_cosets_disjoint", ["is_subgroup"]], ["del", "theorem", "subgroup_mem_left_cosets", ["is_subgroup"]], ["add", "def", "left_coset", ["left_cosets"]], ["mod", "def", "left_cosets", []]]}, {"oldPath": "group_theory/order_of_element.lean", "newPath": "group_theory/order_of_element.lean", "changes": []}]}, {"timestamp": 1523815093, "sha": "479a1226", "message": "doc(doc): add topological space doc (#101)", "changes": [{"oldPath": null, "newPath": "docs/theories/topological_spaces.md", "changes": []}]}, {"timestamp": 1523814117, "sha": "c34f2027", "message": "Adding some notes on calc", "changes": [{"oldPath": "docs/extras.md", "newPath": "docs/extras.md", "changes": []}, {"oldPath": null, "newPath": "docs/extras/calc.md", "changes": []}]}, {"timestamp": 1523813943, "sha": "21d56182", "message": "feat(docs/styles): Some more indentation guidelines (#95)\nFixed also a typo pointed out by Scott", "changes": [{"oldPath": "docs/style.md", "newPath": "docs/style.md", "changes": []}]}, {"timestamp": 1523813819, "sha": "f1179bd9", "message": "feat(algebra/big_operators): update prod_bij_ne_one (#100)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1523647549, "sha": "56052335", "message": "feat(algebra/big_operators): add prod_sum (equating the product over a sum to the sum of all combinations)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_sum", ["finset"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "attach_empty", ["finset"]], ["add", "theorem", "attach_insert", ["finset"]], ["add", "theorem", "injective_pi_cons", ["finset"]], ["add", "def", "cons", ["finset", "pi"]], ["add", "theorem", "cons_ne", ["finset", "pi"]], ["add", "theorem", "cons_same", ["finset", "pi"]], ["add", "def", "empty", ["finset", "pi"]], ["add", "theorem", "pi_empty", ["finset"]], ["add", "theorem", "pi_insert", ["finset"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "attach_ndinsert", ["multiset"]], ["add", "theorem", "disjoint_map_map", ["multiset"]], ["add", "theorem", "injective_pi_cons", ["multiset"]], ["add", "theorem", "map_id", ["multiset"]], ["add", "theorem", "map_singleton", ["multiset"]], ["add", "theorem", "nodup_bind", ["multiset"]], ["add", "theorem", "nodup_pi", ["multiset"]], ["add", "def", "pairwise", ["multiset"]], ["add", "theorem", "pairwise_coe_iff_pairwise", ["multiset"]], ["add", "theorem", "pairwise_of_nodup", ["multiset"]], ["add", "theorem", "pmap_cons", ["multiset"]], ["add", "theorem", "pmap_zero", ["multiset"]], ["add", "theorem", "prod_bind", ["multiset"]]]}]}, {"timestamp": 1523466679, "sha": "f1e46e1f", "message": "fix(.travis.yml): fix some elan", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1523464867, "sha": "b13f4046", "message": "chore(.travis.yml): show some elan", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1523459850, "sha": "5f360e3e", "message": "feat(group_theory): add group.closure, the subgroup generated by a set", "changes": [{"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "def", "closure", ["group"]], ["add", "theorem", "closure_subset", ["group"]], ["add", "theorem", "gpowers_eq_closure", ["group"]], ["add", "inductive", "in_closure", ["group"]], ["add", "theorem", "mem_closure", ["group"]], ["add", "theorem", "subset_closure", ["group"]], ["add", "theorem", "trivial_eq_closure", ["is_subgroup"]], ["add", "theorem", "mem_gpowers", []]]}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": []}]}, {"timestamp": 1523458186, "sha": "fea24916", "message": "chore(group_theory): move order_of into its own file; base costes on left_coset", "changes": [{"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["add", "theorem", "Union_left_cosets_eq_univ", ["is_subgroup"]], ["add", "theorem", "group_equiv_left_cosets_times_subgroup", ["is_subgroup"]], ["add", "theorem", "left_cosets_disjoint", ["is_subgroup"]], ["add", "theorem", "left_cosets_equiv_subgroup", ["is_subgroup"]], ["add", "theorem", "pairwise_left_cosets_disjoint", ["is_subgroup"]], ["add", "theorem", "subgroup_mem_left_cosets", ["is_subgroup"]], ["mod", "def", "left_coset", []], ["mod", "theorem", "left_coset_assoc", []], ["mod", "def", "left_coset_equiv", []], ["mod", "theorem", "left_coset_equiv_rel", []], ["mod", "theorem", "left_coset_mem_left_coset", []], ["mod", "theorem", "left_coset_right_coset", []], ["add", "def", "left_cosets", []], ["mod", "theorem", "mem_left_coset", []], ["mod", "theorem", "mem_left_coset_iff", []], ["mod", "theorem", "mem_left_coset_left_coset", []], ["mod", "theorem", "mem_own_left_coset", []], ["mod", "theorem", "mem_own_right_coset", []], ["mod", "theorem", "mem_right_coset", []], ["mod", "theorem", "mem_right_coset_iff", []], ["mod", "theorem", "mem_right_coset_right_coset", []], ["mod", "theorem", "normal_of_eq_cosets", []], ["mod", "def", "right_coset", []], ["mod", "theorem", "right_coset_assoc", []], ["mod", "theorem", "right_coset_mem_right_coset", []]]}, {"oldPath": null, "newPath": "group_theory/order_of_element.lean", "changes": [["add", "theorem", "exists_gpow_eq_one", []], ["add", "theorem", "exists_pow_eq_one", []], ["add", "theorem", "mem_range_iff_mem_finset_range_of_mod_eq", ["finset"]], ["add", "theorem", "gpow_eq_mod_order_of", []], ["add", "theorem", "mem_range_gpow_iff_mem_range_order_of", []], ["add", "theorem", "order_eq_card_range_gpow", []], ["add", "def", "order_of", []], ["add", "theorem", "order_of_dvd_card_univ", []], ["add", "theorem", "order_of_le_card_univ", []], ["add", "theorem", "order_of_ne_zero", []], ["add", "theorem", "pow_eq_mod_order_of", []], ["add", "theorem", "pow_injective_of_lt_order_of", []], ["add", "theorem", "pow_order_of_eq_one", []]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["del", "def", "cosets", []], ["del", "theorem", "exists_gpow_eq_one", []], ["del", "theorem", "exists_pow_eq_one", []], ["del", "theorem", "mem_range_iff_mem_finset_range_of_mod_eq", ["finset"]], ["del", "theorem", "gpow_eq_mod_order_of", []], ["mod", "theorem", "injective_mul", []], ["del", "theorem", "Union_cosets_eq_univ", ["is_subgroup"]], ["del", "theorem", "cosets_disjoint", ["is_subgroup"]], ["del", "theorem", "cosets_equiv_subgroup", ["is_subgroup"]], ["del", "theorem", "group_equiv_cosets_times_subgroup", ["is_subgroup"]], ["del", "theorem", "mul_image", ["is_subgroup"]], ["del", "theorem", "pairwise_cosets_disjoint", ["is_subgroup"]], ["del", "theorem", "subgroup_mem_cosets", ["is_subgroup"]], ["del", "theorem", "mem_range_gpow_iff_mem_range_order_of", []], ["del", "theorem", "order_eq_card_range_gpow", []], ["del", "def", "order_of", []], ["del", "theorem", "order_of_dvd_card_univ", []], ["del", "theorem", "order_of_le_card_univ", []], ["del", "theorem", "order_of_ne_zero", []], ["del", "theorem", "pow_eq_mod_order_of", []], ["del", "theorem", "pow_injective_of_lt_order_of", []], ["del", "theorem", "pow_order_of_eq_one", []]]}]}, {"timestamp": 1523454633, "sha": "d2ab199f", "message": "chore(group_theory): simplify proofs; generalize some theorems", "changes": [{"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["mod", "theorem", "eq_cosets_of_normal", []], ["mod", "theorem", "left_coset_assoc", []], ["mod", "theorem", "left_coset_right_coset", []], ["add", "theorem", "mem_left_coset_iff", []], ["del", "theorem", "mem_mem_left_coset", []], ["add", "theorem", "mem_right_coset_iff", []], ["mod", "theorem", "normal_of_eq_cosets", []], ["mod", "theorem", "one_left_coset", []], ["del", "theorem", "one_right_coset", []], ["mod", "theorem", "right_coset_assoc", []], ["add", "theorem", "right_coset_one", []]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "inj_iff_trivial_ker", ["is_group_hom"]], ["del", "theorem", "inj_iff_trivial_kernel", ["is_group_hom"]], ["add", "theorem", "inj_of_trivial_ker", ["is_group_hom"]], ["del", "theorem", "inj_of_trivial_kernel", ["is_group_hom"]], ["mod", "theorem", "inv_iff_ker", ["is_group_hom"]], ["del", "theorem", "inv_ker", ["is_group_hom"]], ["add", "def", "ker", ["is_group_hom"]], ["del", "theorem", "ker_inv", ["is_group_hom"]], ["del", "def", "kernel", ["is_group_hom"]], ["add", "theorem", "mem_ker", ["is_group_hom"]], ["del", "theorem", "mem_ker_one", ["is_group_hom"]], ["mod", "theorem", "one_ker_inv", ["is_group_hom"]], ["add", "theorem", "trivial_ker_of_inj", ["is_group_hom"]], ["del", "theorem", "trivial_kernel_of_inj", ["is_group_hom"]], ["del", "theorem", "eq_one_of_trivial_mem", ["is_subgroup"]], ["add", "theorem", "mem_center", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm", ["is_subgroup"]], ["add", "theorem", "mem_norm_comm_iff", ["is_subgroup"]], ["add", "theorem", "mem_trivial", ["is_subgroup"]], ["del", "theorem", "trivial_mem_of_eq_one", ["is_subgroup"]]]}]}, {"timestamp": 1523442321, "sha": "ea0fb11b", "message": "style(group_theory): try to follow conventions (calc indentation, lowercase names, ...)", "changes": [{"oldPath": "group_theory/coset.lean", "newPath": "group_theory/coset.lean", "changes": [["mod", "theorem", "eq_cosets_of_normal", []], ["mod", "def", "left_coset", []], ["mod", "theorem", "left_coset_assoc", []], ["mod", "def", "left_coset_equiv", []], ["mod", "theorem", "left_coset_equiv_rel", []], ["mod", "theorem", "left_coset_mem_left_coset", []], ["mod", "theorem", "left_coset_right_coset", []], ["mod", "theorem", "mem_left_coset", []], ["mod", "theorem", "mem_left_coset_left_coset", []], ["mod", "theorem", "mem_mem_left_coset", []], ["mod", "theorem", "mem_own_left_coset", []], ["mod", "theorem", "mem_own_right_coset", []], ["mod", "theorem", "mem_right_coset", []], ["mod", "theorem", "mem_right_coset_right_coset", []], ["mod", "theorem", "normal_iff_eq_cosets", []], ["mod", "theorem", "normal_of_eq_cosets", []], ["mod", "theorem", "one_left_coset", []], ["mod", "theorem", "one_right_coset", []], ["mod", "def", "right_coset", []], ["mod", "theorem", "right_coset_assoc", []], ["mod", "theorem", "right_coset_mem_right_coset", []]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["mod", "def", "cosets", []], ["mod", "theorem", "injective_mul", []], ["mod", "theorem", "inj_iff_trivial_kernel", ["is_group_hom"]], ["mod", "theorem", "inj_of_trivial_kernel", ["is_group_hom"]], ["mod", "theorem", "inv_iff_ker", ["is_group_hom"]], ["mod", "theorem", "inv_ker", ["is_group_hom"]], ["mod", "theorem", "inv_ker_one", ["is_group_hom"]], ["mod", "theorem", "ker_inv", ["is_group_hom"]], ["mod", "def", "kernel", ["is_group_hom"]], ["mod", "theorem", "mem_ker_one", ["is_group_hom"]], ["mod", "theorem", "one_iff_ker_inv", ["is_group_hom"]], ["mod", "theorem", "one_ker_inv", ["is_group_hom"]], ["mod", "theorem", "trivial_kernel_of_inj", ["is_group_hom"]], ["mod", "def", "center", ["is_subgroup"]], ["mod", "theorem", "eq_one_of_trivial_mem", ["is_subgroup"]], ["mod", "theorem", "mem_norm_comm", ["is_subgroup"]], ["mod", "def", "trivial", ["is_subgroup"]], ["mod", "theorem", "trivial_mem_of_eq_one", ["is_subgroup"]]]}]}, {"timestamp": 1523442273, "sha": "fa86d349", "message": "feat(group_theory): add left/right cosets and normal subgroups", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod", ["is_group_anti_hom"]], ["mod", "theorem", "prod", ["is_group_hom"]]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["mod", "theorem", "inv", ["is_group_anti_hom"]], ["mod", "theorem", "mul", ["is_group_anti_hom"]], ["mod", "theorem", "inv", ["is_group_hom"]], ["mod", "theorem", "mul", ["is_group_hom"]], ["mod", "def", "is_group_hom", []]]}, {"oldPath": null, "newPath": "group_theory/coset.lean", "changes": [["add", "theorem", "eq_cosets_of_normal", []], ["add", "def", "left_coset", []], ["add", "theorem", "left_coset_assoc", []], ["add", "def", "left_coset_equiv", []], ["add", "theorem", "left_coset_equiv_rel", []], ["add", "theorem", "left_coset_mem_left_coset", []], ["add", "theorem", "left_coset_right_coset", []], ["add", "theorem", "mem_left_coset", []], ["add", "theorem", "mem_left_coset_left_coset", []], ["add", "theorem", "mem_mem_left_coset", []], ["add", "theorem", "mem_own_left_coset", []], ["add", "theorem", "mem_own_right_coset", []], ["add", "theorem", "mem_right_coset", []], ["add", "theorem", "mem_right_coset_right_coset", []], ["add", "theorem", "normal_iff_eq_cosets", []], ["add", "theorem", "normal_of_eq_cosets", []], ["add", "theorem", "one_left_coset", []], ["add", "theorem", "one_right_coset", []], ["add", "def", "right_coset", []], ["add", "theorem", "right_coset_assoc", []], ["add", "theorem", "right_coset_mem_right_coset", []]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "theorem", "inj_iff_trivial_kernel", ["is_group_hom"]], ["add", "theorem", "inj_of_trivial_kernel", ["is_group_hom"]], ["add", "theorem", "inv_iff_ker", ["is_group_hom"]], ["add", "theorem", "inv_ker", ["is_group_hom"]], ["add", "theorem", "inv_ker_one", ["is_group_hom"]], ["add", "theorem", "ker_inv", ["is_group_hom"]], ["add", "def", "kernel", ["is_group_hom"]], ["add", "theorem", "mem_ker_one", ["is_group_hom"]], ["add", "theorem", "one_iff_ker_inv", ["is_group_hom"]], ["add", "theorem", "one_ker_inv", ["is_group_hom"]], ["add", "theorem", "trivial_kernel_of_inj", ["is_group_hom"]], ["add", "def", "center", ["is_subgroup"]], ["add", "theorem", "eq_one_of_trivial_mem", ["is_subgroup"]], ["add", "theorem", "mem_norm_comm", ["is_subgroup"]], ["add", "def", "trivial", ["is_subgroup"]], ["add", "theorem", "trivial_mem_of_eq_one", ["is_subgroup"]]]}]}, {"timestamp": 1523371136, "sha": "f85330a8", "message": "feat(group_theory/submonoid): relate monoid closure to list product", "changes": [{"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": [["add", "theorem", "list_prod_mem", ["is_submonoid"]], ["mod", "theorem", "pow_mem", ["is_submonoid"]], ["add", "theorem", "power_subset", ["is_submonoid"]], ["add", "theorem", "exists_list_of_mem_closure", ["monoid"]]]}]}, {"timestamp": 1523368717, "sha": "4a155031", "message": "refactor(ring_theory): unify monoid closure in ring theory with the one in group theory", "changes": [{"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": [["add", "theorem", "closure_subset", ["monoid"]], ["del", "theorem", "is_submonoid_closure", ["monoid"]], ["add", "theorem", "subset_closure", ["monoid"]]]}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": [["del", "def", "closure", ["localization"]], ["del", "inductive", "in_closure", ["localization"]], ["del", "theorem", "subset_closure", ["localization"]]]}]}, {"timestamp": 1523366032, "sha": "ec185633", "message": "feat(group_theory): add subtype instanes for group and monoid; monoid closure", "changes": [{"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": []}, {"oldPath": "group_theory/submonoid.lean", "newPath": "group_theory/submonoid.lean", "changes": [["add", "def", "closure", ["monoid"]], ["add", "inductive", "in_closure", ["monoid"]], ["add", "theorem", "is_submonoid_closure", ["monoid"]]]}]}, {"timestamp": 1523365363, "sha": "88960f08", "message": "refactor(algebra): move is_submonoid to group_theory and base is_subgroup on is_submonoid", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["mod", "theorem", "inv_is_group_anti_hom", []], ["mod", "def", "is_group_anti_hom", []], ["mod", "def", "is_group_hom", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["del", "def", "powers", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["add", "def", "gpowers", []], ["add", "theorem", "injective_mul", []], ["mod", "theorem", "cosets_disjoint", ["is_subgroup"]], ["add", "theorem", "gpow_mem", ["is_subgroup"]], ["del", "theorem", "injective_mul", ["is_subgroup"]], ["del", "theorem", "inv_mem", ["is_subgroup"]], ["mod", "theorem", "inv_mem_iff", ["is_subgroup"]], ["mod", "theorem", "mul_image", ["is_subgroup"]], ["del", "theorem", "mul_mem", ["is_subgroup"]], ["add", "theorem", "mul_mem_cancel_left", ["is_subgroup"]], ["add", "theorem", "mul_mem_cancel_right", ["is_subgroup"]], ["add", "theorem", "of_div", ["is_subgroup"]], ["mod", "theorem", "subgroup_mem_cosets", ["is_subgroup"]], ["del", "structure", "is_subgroup", []], ["del", "theorem", "is_subgroup_range_gpow", []]]}, {"oldPath": null, "newPath": "group_theory/submonoid.lean", "changes": [["add", "theorem", "pow_mem", ["is_submonoid"]], ["add", "def", "powers", []]]}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1523284752, "sha": "bd0a555d", "message": "fix(algebra/group_power): remove has_smul\nThis was causing notation overload problems with module smul", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": []}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["mod", "theorem", "mul_smul'", ["add_monoid"]], ["mod", "theorem", "neg_smul", ["add_monoid"]], ["mod", "theorem", "smul_add", ["add_monoid"]], ["mod", "theorem", "smul_neg_comm", ["add_monoid"]], ["mod", "theorem", "smul_nonneg", ["add_monoid"]], ["mod", "theorem", "gpow_coe_nat", []], ["mod", "theorem", "gpow_neg_succ", []], ["mod", "theorem", "gpow_of_nat", []], ["mod", "theorem", "gsmul_add_comm", []], ["mod", "theorem", "gsmul_coe_nat", []], ["mod", "theorem", "gsmul_eq_mul'", []], ["mod", "theorem", "gsmul_eq_mul", []], ["mod", "theorem", "gsmul_neg_succ", []], ["mod", "theorem", "gsmul_of_nat", []], ["mod", "theorem", "mul_gsmul_assoc", []], ["mod", "theorem", "mul_gsmul_left", []]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}]}, {"timestamp": 1523273540, "sha": "b02733df", "message": "fix(data/finset): change argument order of finset.induction(_on) so that the induction tactic accepts them", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}]}, {"timestamp": 1523269813, "sha": "018cfddb", "message": "feat(linear_algebra/multivariate_polynomial): make theory computational", "changes": [{"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": [["mod", "theorem", "bind_singleton2", ["finset"]], ["mod", "theorem", "single_induction_on", ["finsupp"]]]}]}, {"timestamp": 1523149254, "sha": "2bd5e215", "message": "feat(data/int/modeq): Modular arithmetic for integers", "changes": [{"oldPath": null, "newPath": "data/int/modeq.lean", "changes": [["add", "theorem", "coe_nat_modeq_iff", ["int", "modeq"]], ["add", "theorem", "modeq_add", ["int", "modeq"]], ["add", "theorem", "modeq_add_cancel_left", ["int", "modeq"]], ["add", "theorem", "modeq_add_cancel_right", ["int", "modeq"]], ["add", "theorem", "modeq_iff_dvd", ["int", "modeq"]], ["add", "theorem", "modeq_mul", ["int", "modeq"]], ["add", "theorem", "modeq_mul_left'", ["int", "modeq"]], ["add", "theorem", "modeq_mul_left", ["int", "modeq"]], ["add", "theorem", "modeq_mul_right'", ["int", "modeq"]], ["add", "theorem", "modeq_mul_right", ["int", "modeq"]], ["add", "theorem", "modeq_neg", ["int", "modeq"]], ["add", "theorem", "modeq_of_dvd_of_modeq", ["int", "modeq"]], ["add", "theorem", "modeq_sub", ["int", "modeq"]], ["add", "theorem", "modeq_zero_iff", ["int", "modeq"]], ["add", "def", "modeq", ["int"]]]}]}, {"timestamp": 1523148325, "sha": "68158304", "message": "chore(measure_theory/measure_space): add coe_fn instance", "changes": [{"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": [["mod", "theorem", "lebesgue_Ico", ["measure_theory"]], ["mod", "theorem", "lebesgue_Ioo", ["measure_theory"]], ["mod", "theorem", "lebesgue_singleton", ["measure_theory"]]]}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": [["mod", "theorem", "measure_Union_le_tsum_nat", ["measure_theory"]], ["mod", "theorem", "measure_empty", ["measure_theory"]], ["mod", "theorem", "measure_mono", ["measure_theory"]], ["mod", "theorem", "measure_space_eq", ["measure_theory"]]]}]}, {"timestamp": 1523147755, "sha": "03d5bd97", "message": "fix(*): update to lean", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["mod", "theorem", "div_pow", []], ["mod", "theorem", "inv_pow", ["division_ring"]], ["mod", "theorem", "inv_gpow", []], ["mod", "theorem", "inv_pow", []], ["mod", "theorem", "mul_pow", []], ["mod", "theorem", "one_div_pow", []], ["mod", "theorem", "pow_abs", []], ["mod", "theorem", "pow_inv", []], ["mod", "theorem", "pow_inv_comm", []], ["mod", "def", "powers", []]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "shiftl_eq_mul_pow", ["int"]], ["mod", "theorem", "shiftr_eq_div_pow", ["int"]]]}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": [["mod", "theorem", "pow_coe", ["pnat"]]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["mod", "theorem", "exists_pow_eq_one", []], ["mod", "theorem", "is_subgroup_range_gpow", []], ["mod", "theorem", "order_eq_card_range_gpow", []], ["mod", "theorem", "pow_eq_mod_order_of", []], ["mod", "theorem", "pow_order_of_eq_one", []]]}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["mod", "theorem", "nat_cast_pow", ["cardinal"]]]}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["mod", "theorem", "mul_omega_power_power", ["ordinal"]], ["mod", "theorem", "nat_cast_power", ["ordinal"]]]}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": [["add", "theorem", "power_def", ["onote"]], ["mod", "theorem", "repr_power", ["onote"]]]}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": [["mod", "theorem", "pow_add_rev", ["tactic", "ring"]], ["mod", "theorem", "pow_add_rev_right", ["tactic", "ring"]]]}]}, {"timestamp": 1523140730, "sha": "e9b9014b", "message": "feat(data/erased): VM-erased data type", "changes": [{"oldPath": null, "newPath": "data/erased.lean", "changes": [["add", "def", "bind", ["erased"]], ["add", "theorem", "bind_eq_out", ["erased"]], ["add", "def", "choice", ["erased"]], ["add", "def", "join", ["erased"]], ["add", "theorem", "join_eq_out", ["erased"]], ["add", "def", "mk", ["erased"]], ["add", "theorem", "mk_out", ["erased"]], ["add", "theorem", "nonempty_iff", ["erased"]], ["add", "theorem", "out_mk", ["erased"]], ["add", "theorem", "out_proof", ["erased"]], ["add", "def", "out_type", ["erased"]], ["add", "def", "erased", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "mem_singleton_iff", ["set"]]]}]}, {"timestamp": 1522891774, "sha": "22e671c5", "message": "fix(travis.yml): fix travis setup for new nightlies", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1522890302, "sha": "81264ec7", "message": "fix(leanpkg.toml): remove lean_version\nI will keep marking the nightly version here, but I will leave it commented out until I can figure out how to make travis work with it", "changes": [{"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1522889992, "sha": "08f19fde", "message": "chore(data/nat/prime): style and minor modifications", "changes": [{"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "factors_lemma", ["nat"]], ["mod", "theorem", "perm_of_prod_eq_prod", ["nat"]]]}]}, {"timestamp": 1522888523, "sha": "efa4f92e", "message": "feat(data/nat/prime): lemmas about nat.factors", "changes": [{"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "factors_unique", ["nat"]], ["add", "theorem", "mem_factors", ["nat"]], ["add", "theorem", "mem_factors_of_dvd", ["nat"]], ["add", "theorem", "mem_list_primes_of_dvd_prod", ["nat"]], ["add", "theorem", "perm_of_prod_eq_prod", ["nat"]], ["add", "theorem", "prod_factors", ["nat"]]]}]}, {"timestamp": 1522887765, "sha": "2d370e9d", "message": "feat(algebra/euclidean_domain): euclidean domains / euclidean algorithm", "changes": [{"oldPath": null, "newPath": "algebra/euclidean_domain.lean", "changes": [["add", "theorem", "div_self", ["euclidean_domain"]], ["add", "theorem", "dvd_gcd", ["euclidean_domain"]], ["add", "theorem", "dvd_mod", ["euclidean_domain"]], ["add", "theorem", "dvd_mod_self", ["euclidean_domain"]], ["add", "theorem", "induction", ["euclidean_domain", "gcd"]], ["add", "def", "gcd", ["euclidean_domain"]], ["add", "theorem", "gcd_decreasing", ["euclidean_domain"]], ["add", "theorem", "gcd_dvd", ["euclidean_domain"]], ["add", "theorem", "gcd_dvd_left", ["euclidean_domain"]], ["add", "theorem", "gcd_dvd_right", ["euclidean_domain"]], ["add", "theorem", "gcd_next", ["euclidean_domain"]], ["add", "theorem", "gcd_one_left", ["euclidean_domain"]], ["add", "theorem", "gcd_self", ["euclidean_domain"]], ["add", "theorem", "gcd_zero_left", ["euclidean_domain"]], ["add", "theorem", "gcd_zero_right", ["euclidean_domain"]], ["add", "theorem", "mod_lt", ["euclidean_domain"]], ["add", "theorem", "mod_one", ["euclidean_domain"]], ["add", "theorem", "mod_self", ["euclidean_domain"]], ["add", "theorem", "mod_zero", ["euclidean_domain"]], ["add", "theorem", "neq_zero_lt_mod_lt", ["euclidean_domain"]], ["add", "theorem", "val_dvd_le", ["euclidean_domain"]], ["add", "theorem", "val_lt_one", ["euclidean_domain"]], ["add", "theorem", "zero_div", ["euclidean_domain"]], ["add", "theorem", "zero_mod", ["euclidean_domain"]]]}]}, {"timestamp": 1522887394, "sha": "467f60ff", "message": "feat(data/nat/basic): add div_le_div_right\nBased on #91 by @MonoidMusician", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}]}, {"timestamp": 1522887236, "sha": "47f1384b", "message": "doc(docs/extras): Adding notes on simp", "changes": [{"oldPath": null, "newPath": "docs/extras/simp.md", "changes": []}]}, {"timestamp": 1522887129, "sha": "73d481a2", "message": "adding explanation of \"change\"", "changes": [{"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}]}, {"timestamp": 1522886873, "sha": "c87f1e6e", "message": "fix(*): finish lean update", "changes": [{"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": [["mod", "def", "pow", ["pnat"]], ["add", "theorem", "pow_coe", ["pnat"]]]}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1522790606, "sha": "5717986f", "message": "fix(*): update to lean\nalso add mathlib nightly version to leanpkg.toml", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": []}, {"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_const_one", ["finset"]], ["add", "theorem", "sum_const_zero", ["finset"]]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "def", "additive", []], ["add", "def", "multiplicative", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "add_gsmul", []], ["mod", "theorem", "add_smul", ["add_monoid"]], ["add", "theorem", "mul_smul'", ["add_monoid"]], ["add", "theorem", "mul_smul", ["add_monoid"]], ["mod", "theorem", "mul_smul_assoc", ["add_monoid"]], ["add", "theorem", "mul_smul_left", ["add_monoid"]], ["del", "theorem", "mul_smul_right", ["add_monoid"]], ["mod", "theorem", "neg_smul", ["add_monoid"]], ["mod", "theorem", "one_smul", ["add_monoid"]], ["add", "def", "smul", ["add_monoid"]], ["add", "theorem", "smul_add", ["add_monoid"]], ["mod", "theorem", "smul_eq_mul'", ["add_monoid"]], ["mod", "theorem", "smul_eq_mul", ["add_monoid"]], ["del", "theorem", "smul_mul", ["add_monoid"]], ["add", "theorem", "smul_neg_comm", ["add_monoid"]], ["mod", "theorem", "smul_nonneg", ["add_monoid"]], ["mod", "theorem", "smul_one", ["add_monoid"]], ["add", "theorem", "smul_sub", ["add_monoid"]], ["add", "theorem", "smul_zero", ["add_monoid"]], ["mod", "theorem", "zero_smul", ["add_monoid"]], ["add", "theorem", "bit0_gsmul", []], ["add", "theorem", "bit0_smul", []], ["add", "theorem", "bit1_gsmul", []], ["add", "theorem", "bit1_smul", []], ["mod", "def", "gpow", []], ["mod", "theorem", "gpow_add", []], ["mod", "theorem", "gpow_bit0", []], ["mod", "theorem", "gpow_bit1", []], ["mod", "theorem", "gpow_coe_nat", []], ["add", "theorem", "gpow_mul'", []], ["mod", "theorem", "gpow_mul", []], ["mod", "theorem", "gpow_mul_comm", []], ["mod", "theorem", "gpow_neg", []], ["mod", "theorem", "gpow_neg_one", []], ["add", "theorem", "gpow_neg_succ", []], ["add", "theorem", "gpow_of_nat", []], ["mod", "theorem", "gpow_one", []], ["mod", "theorem", "gpow_zero", []], ["add", "def", "gsmul", []], ["add", "theorem", "gsmul_add_comm", []], ["del", "theorem", "gsmul_bit1", []], ["add", "theorem", "gsmul_coe_nat", []], ["mod", "theorem", "gsmul_eq_mul'", []], ["mod", "theorem", "gsmul_eq_mul", []], ["add", "theorem", "gsmul_mul'", []], ["mod", "theorem", "gsmul_mul", []], ["del", "theorem", "gsmul_neg", []], ["del", "theorem", "gsmul_neg_one", []], ["add", "theorem", "gsmul_neg_succ", []], ["add", "theorem", "gsmul_of_nat", []], ["del", "theorem", "gsmul_one", []], ["mod", "theorem", "inv_gpow", []], ["mod", "theorem", "sum_repeat", ["list"]], ["mod", "theorem", "mul_gsmul_assoc", []], ["add", "theorem", "mul_gsmul_left", []], ["del", "theorem", "mul_gsmul_right", []], ["mod", "theorem", "pow_eq_pow", ["nat"]], ["add", "theorem", "neg_gsmul", []], ["add", "theorem", "neg_one_gsmul", []], ["mod", "theorem", "one_gpow", []], ["add", "theorem", "one_gsmul", []], ["mod", "theorem", "pow_abs", []], ["add", "theorem", "pow_mul'", []], ["mod", "theorem", "pow_mul_comm", []], ["mod", "theorem", "pow_zero", []], ["add", "theorem", "smul_add_comm'", []], ["add", "theorem", "smul_add_comm", []], ["del", "theorem", "smul_bit1", []], ["del", "theorem", "smul_succ'", []], ["del", "theorem", "smul_succ", []], ["del", "theorem", "smul_two", []], ["add", "theorem", "succ_smul'", []], ["add", "theorem", "succ_smul", []], ["add", "theorem", "two_smul", []], ["add", "theorem", "zero_gsmul", []]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "shiftl_eq_mul_pow", ["int"]], ["mod", "theorem", "shiftr_eq_div_pow", ["int"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "count_smul", ["multiset"]], ["mod", "theorem", "prod_repeat", ["multiset"]], ["add", "theorem", "sum_map_sum_map", ["multiset"]], ["add", "theorem", "sum_repeat", ["multiset"]]]}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["del", "theorem", "antisymm_iff", ["set", "subset"]]]}, {"oldPath": "group_theory/subgroup.lean", "newPath": "group_theory/subgroup.lean", "changes": [["mod", "theorem", "exists_gpow_eq_one", []], ["mod", "theorem", "exists_pow_eq_one", []], ["mod", "theorem", "gpow_eq_mod_order_of", []], ["mod", "theorem", "is_subgroup_range_gpow", []], ["mod", "theorem", "order_eq_card_range_gpow", []], ["mod", "theorem", "pow_eq_mod_order_of", []], ["mod", "theorem", "pow_order_of_eq_one", []]]}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}, {"oldPath": "linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": []}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["mod", "theorem", "nat_cast_pow", ["cardinal"]]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["mod", "theorem", "nat_cast_power", ["ordinal"]]]}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1522620637, "sha": "777f6b40", "message": "feat(data/set/basic): add some more set lemmas", "changes": [{"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "compl_subset_comm", ["set"]], ["add", "theorem", "compl_subset_iff_union", ["set"]], ["del", "theorem", "compl_subset_of_compl_subset", ["set"]], ["mod", "theorem", "compl_union_self", ["set"]], ["mod", "theorem", "eq_empty_of_subset_empty", ["set"]], ["mod", "theorem", "eq_univ_of_univ_subset", ["set"]], ["mod", "theorem", "exists_mem_of_ne_empty", ["set"]], ["add", "theorem", "image_compl_eq", ["set"]], ["add", "theorem", "image_compl_subset", ["set"]], ["mod", "theorem", "image_empty", ["set"]], ["mod", "theorem", "image_inter", ["set"]], ["add", "theorem", "image_univ_of_surjective", ["set"]], ["add", "theorem", "mem_compl_image", ["set"]], ["del", "theorem", "mem_image_compl", ["set"]], ["mod", "theorem", "mem_univ", ["set"]], ["del", "theorem", "mem_univ_eq", ["set"]], ["del", "theorem", "mem_univ_iff", ["set"]], ["add", "theorem", "antisymm_iff", ["set", "subset"]], ["add", "theorem", "subset_compl_comm", ["set"]], ["add", "theorem", "subset_compl_iff_disjoint", ["set"]], ["add", "theorem", "subset_image_compl", ["set"]], ["mod", "theorem", "union_compl_self", ["set"]], ["add", "theorem", "univ_subset_iff", ["set"]]]}]}, {"timestamp": 1522618217, "sha": "d80ca592", "message": "feat(data/fin): add fz/fs recursor for fin", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["add", "def", "succ_rec", ["fin"]], ["add", "def", "succ_rec_on", ["fin"]], ["add", "theorem", "succ_rec_on_succ", ["fin"]], ["add", "theorem", "succ_rec_on_zero", ["fin"]]]}]}, {"timestamp": 1522418743, "sha": "162edc3f", "message": "feat(order): add complete lattice of fixed points (Knaster-Tarski) by Kenny Lau https://github.com/leanprover/mathlib/pull/88", "changes": [{"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "theorem", "ge_of_eq", []]]}, {"oldPath": "order/fixed_points.lean", "newPath": "order/fixed_points.lean", "changes": [["del", "theorem", "ge_of_eq", []], ["add", "theorem", "Sup_le_f_of_fixed_points", ["lattice", "fixed_points"]], ["add", "theorem", "f_le_Inf_of_fixed_points", ["lattice", "fixed_points"]], ["add", "theorem", "f_le_inf_of_fixed_points", ["lattice", "fixed_points"]], ["add", "def", "next", ["lattice", "fixed_points"]], ["add", "theorem", "next_eq", ["lattice", "fixed_points"]], ["add", "def", "next_fixed", ["lattice", "fixed_points"]], ["add", "theorem", "next_le", ["lattice", "fixed_points"]], ["add", "def", "prev", ["lattice", "fixed_points"]], ["add", "theorem", "prev_eq", ["lattice", "fixed_points"]], ["add", "def", "prev_fixed", ["lattice", "fixed_points"]], ["add", "theorem", "prev_le", ["lattice", "fixed_points"]], ["add", "theorem", "sup_le_f_of_fixed_points", ["lattice", "fixed_points"]], ["add", "def", "fixed_points", ["lattice"]]]}]}, {"timestamp": 1522344226, "sha": "c54d431d", "message": "fix(.): unit is now an abbreviation: unit := punit.{1}", "changes": [{"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "def", "arrow_empty_unit", ["equiv"]], ["mod", "def", "arrow_unit_equiv_unit", ["equiv"]], ["mod", "def", "bool_equiv_unit_sum_unit", ["equiv"]], ["mod", "def", "empty_arrow_equiv_unit", ["equiv"]], ["mod", "def", "false_arrow_equiv_unit", ["equiv"]], ["mod", "def", "nat_equiv_nat_sum_unit", ["equiv"]], ["mod", "def", "nat_sum_unit_equiv_nat", ["equiv"]], ["mod", "def", "option_equiv_sum_unit", ["equiv"]], ["mod", "def", "prod_unit", ["equiv"]], ["mod", "theorem", "prod_unit_apply", ["equiv"]], ["add", "def", "punit_equiv_punit", ["equiv"]], ["mod", "def", "unit_arrow_equiv", ["equiv"]], ["mod", "def", "unit_prod", ["equiv"]], ["mod", "theorem", "unit_prod_apply", ["equiv"]]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["mod", "theorem", "limit_le", ["ordinal", "is_normal"]]]}]}, {"timestamp": 1522007980, "sha": "d84af03b", "message": "fix(data/option): revert to lean commit 28f414", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": []}]}, {"timestamp": 1521727682, "sha": "e5c1c5e1", "message": "fix(number_theory/dipoh): has_map.map -> functor.map", "changes": [{"oldPath": "number_theory/dioph.lean", "newPath": "number_theory/dioph.lean", "changes": []}]}, {"timestamp": 1521718044, "sha": "a357b795", "message": "feat(analysis): measurable_if", "changes": [{"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": [["add", "theorem", "measurable_if", []]]}]}, {"timestamp": 1521660664, "sha": "868bbc6e", "message": "fix(*): update to lean", "changes": [{"oldPath": "category/basic.lean", "newPath": "category/basic.lean", "changes": [["del", "theorem", "bind_assoc", []], ["del", "theorem", "pure_seq_eq_map", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "map_id'", ["option"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "tactic/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": []}, {"oldPath": "tactic/converter/old_conv.lean", "newPath": "tactic/converter/old_conv.lean", "changes": []}]}, {"timestamp": 1521660664, "sha": "638265c0", "message": "fix(set_theory/zfc): improve pSet.equiv.eq\nI claimed in the comment that this converse was not provable, but it is (because equiv is embedded in the definition of mem). Thanks to Vinoth Kumar Raman for bringing this to my attention.", "changes": [{"oldPath": "set_theory/zfc.lean", "newPath": "set_theory/zfc.lean", "changes": [["mod", "theorem", "eq", ["pSet", "equiv"]], ["add", "theorem", "equiv_iff_mem", ["pSet"]]]}]}, {"timestamp": 1521660664, "sha": "f3660dfc", "message": "chore(logic/basic): protect classical logic theorems\nYou can't use these theorems with `open classical` anyway, because of disambiguation with the `_root_` theorems of the same name.", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["del", "theorem", "forall_or_distrib_left", ["classical"]], ["del", "theorem", "not_forall", ["classical"]], ["del", "theorem", "or_iff_not_imp_left", ["classical"]], ["del", "theorem", "or_iff_not_imp_right", ["classical"]]]}]}, {"timestamp": 1521658583, "sha": "486e4ed9", "message": "fix(test suite): remove `sorry` warning in test suite", "changes": [{"oldPath": "tests/wlog.lean", "newPath": "tests/wlog.lean", "changes": []}]}, {"timestamp": 1521075440, "sha": "f7977ff5", "message": "feat(data/finset): add finset.powerset", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "card_powerset", ["finset"]], ["add", "theorem", "empty_mem_powerset", ["finset"]], ["add", "theorem", "mem_powerset", ["finset"]], ["add", "theorem", "mem_powerset_self", ["finset"]], ["add", "def", "powerset", ["finset"]], ["add", "theorem", "powerset_mono", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "length_sublists'", ["list"]], ["mod", "theorem", "length_sublists", ["list"]], ["add", "theorem", "map_sublists'_aux", ["list"]], ["add", "theorem", "mem_sublists'", ["list"]], ["mod", "theorem", "nodup_map", ["list"]], ["add", "theorem", "nodup_map_iff", ["list"]], ["add", "theorem", "nodup_sublists'", ["list"]], ["add", "theorem", "pairwise_sublists'", ["list"]], ["mod", "theorem", "pairwise_sublists", ["list"]], ["add", "theorem", "reverse_injective", ["list"]], ["add", "def", "sublists'", ["list"]], ["add", "def", "sublists'_aux", ["list"]], ["add", "theorem", "sublists'_aux_append", ["list"]], ["add", "theorem", "sublists'_aux_eq_sublists'", ["list"]], ["add", "theorem", "sublists'_cons", ["list"]], ["add", "theorem", "sublists'_eq_sublists", ["list"]], ["add", "theorem", "sublists'_nil", ["list"]], ["add", "theorem", "sublists'_reverse", ["list"]], ["add", "theorem", "sublists'_singleton", ["list"]], ["add", "theorem", "sublists_eq_sublists'", ["list"]], ["add", "theorem", "sublists_reverse", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "perm_ext_sublist_nodup", ["list"]], ["add", "theorem", "sublists_cons_perm_append", ["list"]], ["add", "theorem", "sublists_perm_sublists'", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "card_powerset", ["multiset"]], ["add", "theorem", "map_single_le_powerset", ["multiset"]], ["add", "theorem", "mem_powerset", ["multiset"]], ["add", "theorem", "nodup_powerset", ["multiset"]], ["mod", "def", "pmap", ["multiset"]], ["add", "def", "powerset", ["multiset"]], ["add", "def", "powerset_aux'", ["multiset"]], ["add", "theorem", "powerset_aux'_cons", ["multiset"]], ["add", "theorem", "powerset_aux'_nil", ["multiset"]], ["add", "theorem", "powerset_aux'_perm", ["multiset"]], ["add", "def", "powerset_aux", ["multiset"]], ["add", "theorem", "powerset_aux_eq_map_coe", ["multiset"]], ["add", "theorem", "powerset_aux_perm", ["multiset"]], ["add", "theorem", "powerset_aux_perm_powerset_aux'", ["multiset"]], ["add", "theorem", "powerset_coe'", ["multiset"]], ["add", "theorem", "powerset_coe", ["multiset"]]]}]}, {"timestamp": 1520920669, "sha": "4ceb545f", "message": "feat(data/list/basic): stuff about `list.sublists`", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "bind_eq_bind", ["list"]], ["add", "theorem", "bind_ret_eq_map", ["list"]], ["add", "theorem", "cons_subset", ["list"]], ["mod", "theorem", "cons_subset_of_subset_of_mem", ["list"]], ["add", "theorem", "length_eq_zero", ["list"]], ["add", "theorem", "length_sublists", ["list"]], ["add", "theorem", "imp", ["list", "lex"]], ["add", "inductive", "lex", ["list"]], ["add", "theorem", "lex_append_left", ["list"]], ["add", "theorem", "lex_append_right", ["list"]], ["add", "theorem", "lex_ne_iff", ["list"]], ["add", "theorem", "map_eq_map", ["list"]], ["add", "theorem", "map_ret_sublist_sublists", ["list"]], ["mod", "theorem", "mem_sublists", ["list"]], ["add", "theorem", "ne_of_lex_ne", ["list"]], ["add", "theorem", "nodup_sublists", ["list"]], ["add", "theorem", "pairwise_sublists", ["list"]], ["add", "theorem", "reverse_eq_nil", ["list"]], ["add", "theorem", "reverse_inj", ["list"]], ["mod", "theorem", "reverse_nil", ["list"]], ["add", "theorem", "reverse_rec_on", ["list"]], ["mod", "theorem", "reverse_singleton", ["list"]], ["add", "theorem", "sublists_append", ["list"]], ["add", "theorem", "sublists_aux_cons_append", ["list"]], ["add", "theorem", "sublists_aux_cons_eq_sublists_aux₁", ["list"]], ["del", "theorem", "sublists_aux_eq_foldl", ["list"]], ["add", "theorem", "aux", ["list", "sublists_aux_eq_foldr"]], ["add", "theorem", "sublists_aux_eq_foldr", ["list"]], ["add", "theorem", "sublists_aux_ne_nil", ["list"]], ["add", "def", "sublists_aux₁", ["list"]], ["add", "theorem", "sublists_aux₁_append", ["list"]], ["add", "theorem", "sublists_aux₁_bind", ["list"]], ["add", "theorem", "sublists_aux₁_concat", ["list"]], ["add", "theorem", "sublists_aux₁_eq_sublists_aux", ["list"]], ["add", "theorem", "sublists_concat", ["list"]], ["add", "theorem", "sublists_nil", ["list"]], ["add", "theorem", "sublists_singleton", ["list"]], ["add", "theorem", "subset_def", ["list"]]]}]}, {"timestamp": 1520887543, "sha": "5f8c26ce", "message": "feat(analysis/measure_theory): measures are embedded in outer measures; add map, dirac, and sum measures", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["add", "theorem", "tsum_supr_eq", ["ennreal"]]]}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": [["del", "def", "count", ["measure_theory"]], ["add", "theorem", "le_to_outer_measure_caratheodory", ["measure_theory"]], ["add", "def", "count", ["measure_theory", "measure_space"]], ["add", "def", "dirac", ["measure_theory", "measure_space"]], ["add", "def", "map", ["measure_theory", "measure_space"]], ["add", "theorem", "map_comp", ["measure_theory", "measure_space"]], ["add", "theorem", "map_id", ["measure_theory", "measure_space"]], ["add", "theorem", "map_measure", ["measure_theory", "measure_space"]], ["add", "def", "sum", ["measure_theory", "measure_space"]], ["add", "theorem", "to_outer_measure_to_measure", ["measure_theory"]]]}]}, {"timestamp": 1520874571, "sha": "36a061b6", "message": "feat(analysis/measure_theory): outer_measures form a complete lattice", "changes": [{"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": [["add", "theorem", "outer_measure_eq", ["measure_theory", "outer_measure"]], ["mod", "theorem", "subadditive", ["measure_theory", "outer_measure"]]]}]}, {"timestamp": 1520778365, "sha": "64a8d564", "message": "chore(order/filter): simplify definition of filter.prod; cleanup", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "nhds_sup", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["mod", "theorem", "uniformity_le_symm", []]]}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "le_lift", ["filter"]], ["add", "theorem", "lift_const", ["filter"]], ["add", "theorem", "lift_inf", ["filter"]], ["add", "theorem", "lift_principal2", ["filter"]], ["mod", "theorem", "map_lift_eq", ["filter"]], ["add", "theorem", "map_swap_eq_vmap_swap", ["filter"]], ["del", "theorem", "map_swap_vmap_swap_eq", ["filter"]], ["add", "theorem", "mem_prod_iff", ["filter"]], ["del", "theorem", "mem_prod_sets", ["filter"]], ["add", "theorem", "prod_bot1", ["filter"]], ["add", "theorem", "prod_bot2", ["filter"]], ["add", "theorem", "prod_comm'", ["filter"]], ["mod", "theorem", "prod_def", ["filter"]], ["mod", "theorem", "prod_mem_prod", ["filter"]], ["mod", "theorem", "prod_neq_bot", ["filter"]], ["mod", "theorem", "prod_principal_principal", ["filter"]], ["mod", "theorem", "vmap_lift_eq", ["filter"]]]}]}, {"timestamp": 1520714273, "sha": "b1540929", "message": "feat(data/finsupp): make finsupp computable; add induction rule; removed comap_domain", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "mem_subtype", ["finset"]], ["mod", "theorem", "add_apply", ["finsupp"]], ["del", "def", "comap_domain", ["finsupp"]], ["del", "theorem", "comap_domain_add", ["finsupp"]], ["del", "theorem", "comap_domain_apply", ["finsupp"]], ["del", "theorem", "comap_domain_finsupp_sum", ["finsupp"]], ["del", "theorem", "comap_domain_neg", ["finsupp"]], ["del", "theorem", "comap_domain_sub", ["finsupp"]], ["del", "theorem", "comap_domain_sum", ["finsupp"]], ["del", "theorem", "comap_domain_zero", ["finsupp"]], ["add", "def", "erase", ["finsupp"]], ["add", "theorem", "erase_ne", ["finsupp"]], ["add", "theorem", "erase_same", ["finsupp"]], ["mod", "def", "filter", ["finsupp"]], ["mod", "theorem", "filter_pos_add_filter_neg", ["finsupp"]], ["mod", "theorem", "finite_supp", ["finsupp"]], ["mod", "theorem", "map_domain_finset_sum", ["finsupp"]], ["mod", "def", "map_range", ["finsupp"]], ["mod", "theorem", "map_range_apply", ["finsupp"]], ["mod", "theorem", "mem_support_iff", ["finsupp"]], ["add", "def", "on_finset", ["finsupp"]], ["add", "theorem", "on_finset_apply", ["finsupp"]], ["del", "theorem", "prod_comap_domain_index", ["finsupp"]], ["mod", "theorem", "prod_finset_sum_index", ["finsupp"]], ["mod", "theorem", "prod_map_range_index", ["finsupp"]], ["mod", "theorem", "prod_neg_index", ["finsupp"]], ["mod", "theorem", "prod_single", ["finsupp"]], ["mod", "theorem", "prod_single_index", ["finsupp"]], ["mod", "theorem", "prod_sum_index", ["finsupp"]], ["mod", "theorem", "single_add", ["finsupp"]], ["add", "theorem", "single_add_erase", ["finsupp"]], ["mod", "theorem", "single_apply", ["finsupp"]], ["mod", "theorem", "single_eq_of_ne", ["finsupp"]], ["mod", "theorem", "single_eq_same", ["finsupp"]], ["mod", "theorem", "single_zero", ["finsupp"]], ["mod", "def", "subtype_domain", ["finsupp"]], ["mod", "theorem", "subtype_domain_zero", ["finsupp"]], ["mod", "theorem", "sum_apply", ["finsupp"]], ["del", "def", "support", ["finsupp"]], ["mod", "theorem", "support_add", ["finsupp"]], ["add", "theorem", "support_eq_empty", ["finsupp"]], ["add", "theorem", "support_erase", ["finsupp"]], ["mod", "theorem", "support_map_range", ["finsupp"]], ["add", "theorem", "support_on_finset_subset", ["finsupp"]], ["mod", "theorem", "support_single_ne_zero", ["finsupp"]], ["mod", "theorem", "support_single_subset", ["finsupp"]], ["mod", "theorem", "support_subset_iff", ["finsupp"]], ["add", "theorem", "support_subtype_domain", ["finsupp"]], ["mod", "theorem", "support_sum", ["finsupp"]], ["mod", "theorem", "support_zero", ["finsupp"]], ["mod", "theorem", "support_zip_with", ["finsupp"]], ["mod", "def", "zip_with", ["finsupp"]], ["mod", "theorem", "zip_with_apply", ["finsupp"]], ["add", "structure", "finsupp", []], ["del", "def", "finsupp", []]]}, {"oldPath": "linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}]}, {"timestamp": 1520689139, "sha": "b97b7c38", "message": "feat(group_theory): add a little bit of group theory; prove of Lagrange's theorem", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "def", "subtype_subtype_equiv_subtype", ["equiv"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "card_attach", ["finset"]], ["add", "theorem", "card_eq_of_bijective", ["finset"]], ["add", "theorem", "card_le_card_of_inj_on", ["finset"]], ["add", "theorem", "card_le_of_inj_on", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "def", "fintype_prod_left", ["fintype"]], ["add", "def", "fintype_prod_right", ["fintype"]]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "card_attach", ["multiset"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "infinite_univ_nat", ["set"]], ["add", "theorem", "not_injective_int_fintype", ["set"]], ["add", "theorem", "not_injective_nat_fintype", ["set"]]]}, {"oldPath": null, "newPath": "group_theory/subgroup.lean", "changes": [["add", "def", "cosets", []], ["add", "theorem", "exists_gpow_eq_one", []], ["add", "theorem", "exists_pow_eq_one", []], ["add", "theorem", "mem_range_iff_mem_finset_range_of_mod_eq", ["finset"]], ["add", "theorem", "gpow_eq_mod_order_of", []], ["add", "theorem", "Union_cosets_eq_univ", ["is_subgroup"]], ["add", "theorem", "cosets_disjoint", ["is_subgroup"]], ["add", "theorem", "cosets_equiv_subgroup", ["is_subgroup"]], ["add", "theorem", "group_equiv_cosets_times_subgroup", ["is_subgroup"]], ["add", "theorem", "injective_mul", ["is_subgroup"]], ["add", "theorem", "inv_mem", ["is_subgroup"]], ["add", "theorem", "inv_mem_iff", ["is_subgroup"]], ["add", "theorem", "mul_image", ["is_subgroup"]], ["add", "theorem", "mul_mem", ["is_subgroup"]], ["add", "theorem", "pairwise_cosets_disjoint", ["is_subgroup"]], ["add", "theorem", "subgroup_mem_cosets", ["is_subgroup"]], ["add", "structure", "is_subgroup", []], ["add", "theorem", "is_subgroup_range_gpow", []], ["add", "theorem", "mem_range_gpow_iff_mem_range_order_of", []], ["add", "theorem", "order_eq_card_range_gpow", []], ["add", "def", "order_of", []], ["add", "theorem", "order_of_dvd_card_univ", []], ["add", "theorem", "order_of_le_card_univ", []], ["add", "theorem", "order_of_ne_zero", []], ["add", "theorem", "pow_eq_mod_order_of", []], ["add", "theorem", "pow_injective_of_lt_order_of", []], ["add", "theorem", "pow_order_of_eq_one", []]]}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}]}, {"timestamp": 1520685578, "sha": "d010717f", "message": "chore(linear_algebra): flatten hierarchy, move algebra/linear_algebra to linear_algebra", "changes": [{"oldPath": "algebra/linear_algebra/default.lean", "newPath": null, "changes": []}, {"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "linear_algebra/basic.lean", "changes": []}, {"oldPath": null, "newPath": "linear_algebra/default.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/dimension.lean", "newPath": "linear_algebra/dimension.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/linear_map_module.lean", "newPath": "linear_algebra/linear_map_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/multivariate_polynomial.lean", "newPath": "linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/prod_module.lean", "newPath": "linear_algebra/prod_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/quotient_module.lean", "newPath": "linear_algebra/quotient_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/subtype_module.lean", "newPath": "linear_algebra/subtype_module.lean", "changes": []}]}, {"timestamp": 1520610909, "sha": "d78c8ea2", "message": "chore(ring_theory): cleaned up ideals", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "exists_of_ssubset", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "or_iff_not_imp_left", ["classical"]], ["add", "theorem", "or_iff_not_imp_right", ["classical"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}, {"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": [["mod", "theorem", "mk", ["is_maximal_ideal"]], ["mod", "def", "local_of_nonunits_ideal", []], ["mod", "theorem", "not_unit_of_mem_maximal_ideal", []]]}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1520606382, "sha": "06c54b33", "message": "chore(ring_theory): introduce r_of_eq for localization", "changes": [{"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": [["mod", "def", "of_comm_ring", ["localization"]], ["add", "theorem", "r_of_eq", ["localization"]], ["mod", "theorem", "refl", ["localization"]]]}]}, {"timestamp": 1520606382, "sha": "e658d369", "message": "chore(ring_theory): fix indentation", "changes": [{"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1520526062, "sha": "a6960f53", "message": "chore(ring_theory): add copyright headers", "changes": [{"oldPath": "ring_theory/ideals.lean", "newPath": "ring_theory/ideals.lean", "changes": []}, {"oldPath": "ring_theory/localization.lean", "newPath": "ring_theory/localization.lean", "changes": []}]}, {"timestamp": 1520517436, "sha": "fe0f2a34", "message": "fix(analysis/topology/topological_structures): remove unnecessary hypothesis", "changes": [{"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["mod", "theorem", "tendsto_of_tendsto_of_tendsto_of_le_of_le", []]]}]}, {"timestamp": 1520509504, "sha": "a7d8c5f8", "message": "feat(tactic): add `wlog` (without loss of generality), `tauto`, `auto` and `xassumption`\n* `tauto`: for simple tautologies;\n* `auto`: discharging the goals that follow directly from a few assumption applications;\n* `xassumption`: similar to `assumption` but matches against the head of assumptions instead of the whole thing", "changes": [{"oldPath": "meta/expr.lean", "newPath": "meta/expr.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tests/wlog.lean", "changes": []}]}, {"timestamp": 1520508328, "sha": "c852939f", "message": "feat(ring_theory): move localization", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "def", "powers", []]]}, {"oldPath": "algebra/localization.lean", "newPath": null, "changes": [["del", "def", "add", ["loc"]], ["del", "def", "add_aux", ["loc"]], ["del", "def", "loc", ["loc"]], ["del", "def", "mul", ["loc"]], ["del", "def", "mul_aux", ["loc"]], ["del", "def", "neg", ["loc"]], ["del", "def", "neg_aux", ["loc"]]]}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "eq_univ_of_contains_unit", ["is_submodule"]], ["add", "theorem", "univ_of_one_mem", ["is_submodule"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "map_neg", ["is_ring_hom"]], ["add", "theorem", "map_sub", ["is_ring_hom"]], ["add", "theorem", "map_zero", ["is_ring_hom"]], ["add", "def", "nonunits", []]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["add", "theorem", "lift_beta", ["quotient"]], ["add", "theorem", "lift_on_beta", ["quotient"]]]}, {"oldPath": null, "newPath": "ring_theory/ideals.lean", "changes": [["add", "theorem", "mk", ["is_maximal_ideal"]], ["add", "def", "local_of_nonunits_ideal", []], ["add", "theorem", "mem_or_mem_of_mul_eq_zero", []], ["add", "theorem", "not_unit_of_mem_maximal_ideal", []]]}, {"oldPath": null, "newPath": "ring_theory/localization.lean", "changes": [["add", "def", "at_prime", ["localization"]], ["add", "def", "away", ["localization"]], ["add", "def", "closure", ["localization"]], ["add", "theorem", "eq_zero_of_ne_zero_of_mul_eq_zero", ["localization"]], ["add", "inductive", "in_closure", ["localization"]], ["add", "def", "loc", ["localization"]], ["add", "theorem", "mem_non_zero_divisors_of_ne_zero", ["localization"]], ["add", "theorem", "ne_zero_of_mem_non_zero_divisors", ["localization"]], ["add", "def", "non_zero_divisors", ["localization"]], ["add", "def", "of_comm_ring", ["localization"]], ["add", "def", "of_integral_domain", ["localization", "quotient_ring", "field"]], ["add", "def", "quotient_ring", ["localization"]], ["add", "def", "r", ["localization"]], ["add", "theorem", "refl", ["localization"]], ["add", "theorem", "subset_closure", ["localization"]], ["add", "theorem", "symm", ["localization"]], ["add", "theorem", "trans", ["localization"]]]}]}, {"timestamp": 1520505748, "sha": "0b81b249", "message": "feat(analysis/topological_structures): add tendsto_of_tendsto_of_tendsto_of_le_of_le", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "tendsto_of_tendsto_of_tendsto_of_le_of_le", []], ["mod", "theorem", "tendsto_orderable", []]]}]}, {"timestamp": 1520502942, "sha": "353c4948", "message": "fix(docs): more converter -> conversion", "changes": [{"oldPath": "docs/extras.md", "newPath": "docs/extras.md", "changes": []}, {"oldPath": "docs/extras/conv.md", "newPath": "docs/extras/conv.md", "changes": []}]}, {"timestamp": 1520502663, "sha": "fa255396", "message": "feat(docs/extras/conv): Documents conv mode (#73)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "docs/extras.md", "changes": []}, {"oldPath": null, "newPath": "docs/extras/conv.md", "changes": []}]}, {"timestamp": 1520430424, "sha": "22237f41", "message": "feat(data/fintype): pi is closed under fintype & decidable_eq", "changes": [{"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}]}, {"timestamp": 1520430420, "sha": "e6afbf54", "message": "feat(data/finset): add Cartesian product over dependent functions", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "mem_pi", ["finset"]], ["add", "def", "pi", ["finset"]]]}]}, {"timestamp": 1520430414, "sha": "10cf239e", "message": "feat(data/multiset): add Cartesian product over dependent functions", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["mod", "theorem", "bind_bind", ["multiset"]], ["mod", "theorem", "bind_hcongr", ["multiset"]], ["add", "theorem", "card_pi", ["multiset"]], ["mod", "theorem", "map_hcongr", ["multiset"]], ["add", "theorem", "mem_pi", ["multiset"]], ["add", "def", "cons", ["multiset", "pi"]], ["add", "theorem", "cons_ne", ["multiset", "pi"]], ["add", "theorem", "cons_same", ["multiset", "pi"]], ["add", "theorem", "cons_swap", ["multiset", "pi"]], ["add", "def", "empty", ["multiset", "pi"]], ["add", "def", "pi", ["multiset"]], ["add", "theorem", "pi_cons", ["multiset"]], ["add", "theorem", "pi_zero", ["multiset"]]]}]}, {"timestamp": 1520430414, "sha": "be4a35fd", "message": "feat(data/multiset): add dependent recursor for multisets", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "rec_heq_of_perm", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "rec_on_0", ["multiset"]], ["add", "theorem", "rec_on_cons", ["multiset"]]]}]}, {"timestamp": 1520430399, "sha": "eef3a4d5", "message": "feat(data/multiset): add map_hcongr, bind_hcongr, bind_bind, attach_zero, and attach_cons", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "attach_cons", ["multiset"]], ["add", "theorem", "attach_zero", ["multiset"]], ["add", "theorem", "bind_bind", ["multiset"]], ["add", "theorem", "bind_congr", ["multiset"]], ["add", "theorem", "bind_hcongr", ["multiset"]], ["add", "theorem", "card_singleton", ["multiset"]], ["add", "theorem", "count_bind", ["multiset"]], ["add", "theorem", "map_bind", ["multiset"]], ["add", "theorem", "map_hcongr", ["multiset"]], ["add", "theorem", "mem_cons_of_mem", ["multiset"]], ["add", "theorem", "prod_map_mul", ["multiset"]], ["add", "theorem", "prod_map_prod_map", ["multiset"]]]}]}, {"timestamp": 1520430399, "sha": "bbd0203b", "message": "feat(data/multiset): decidable equality for functions whose domain is bounded by multisets", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}]}, {"timestamp": 1520430392, "sha": "dc8c35f7", "message": "feat(logic/function): add hfunext and funext_iff", "changes": [{"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "funext_iff", ["function"]], ["add", "theorem", "hfunext", ["function"]]]}]}, {"timestamp": 1520352766, "sha": "33be7dcc", "message": "doc(docs/theories): Description of other set-like types\nFrom #75", "changes": [{"oldPath": "docs/theories.md", "newPath": "docs/theories.md", "changes": []}, {"oldPath": "docs/theories/sets.md", "newPath": "docs/theories/sets.md", "changes": []}]}, {"timestamp": 1520287116, "sha": "65cab910", "message": "doc(order/filter): add documentation for `filter_upward`", "changes": [{"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "tendsto_vmap_iff", ["filter"]]]}]}, {"timestamp": 1520273918, "sha": "5193194e", "message": "feat(order/filter): reorder filter theory; add filter_upwards tactic", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "Inter_mem_sets", ["filter"]], ["mod", "theorem", "exists_sets_subset_iff", ["filter"]], ["mod", "theorem", "ext", ["filter", "filter"]], ["mod", "theorem", "filter_eq_iff", ["filter"]], ["mod", "theorem", "inter_mem_sets", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_left", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_right", ["filter"]], ["add", "theorem", "mp_sets", ["filter"]], ["add", "theorem", "tendsto_inf_left", ["filter"]], ["add", "theorem", "tendsto_inf_right", ["filter"]], ["mod", "theorem", "univ_mem_sets'", ["filter"]], ["mod", "theorem", "univ_mem_sets", ["filter"]]]}]}, {"timestamp": 1520272559, "sha": "0487a320", "message": "chore(*): cleanup", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "comp_apply", ["function"]], ["add", "def", "update", ["function"]], ["add", "theorem", "update_noteq", ["function"]], ["add", "theorem", "update_same", ["function"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "binfi_sup_eq", ["filter"]], ["mod", "theorem", "infi_sup_eq", ["filter"]], ["add", "theorem", "inf_left_comm", ["lattice"]], ["add", "theorem", "infi_empty_finset", ["lattice"]], ["add", "theorem", "infi_insert_finset", ["lattice"]]]}]}, {"timestamp": 1520266282, "sha": "ec9dac3a", "message": "chore(*): update to Lean d6d44a19", "changes": [{"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "exists_of_mem_bind", ["list"]], ["mod", "theorem", "length_bind", ["list"]], ["mod", "theorem", "mem_bind", ["list"]], ["mod", "theorem", "mem_bind_of_mem", ["list"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "seq_some", ["option"]]]}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["del", "theorem", "eta", ["prod", "mk"]]]}, {"oldPath": "tactic/converter/old_conv.lean", "newPath": "tactic/converter/old_conv.lean", "changes": []}]}, {"timestamp": 1519673613, "sha": "f98626c5", "message": "chore(.travis.yml): add notification hook", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1519548114, "sha": "8f680d08", "message": "fix(docs/tactics): update instance cache tactics doc (#70)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1519535388, "sha": "14e10bbd", "message": "fix(*): update to lean", "changes": [{"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "topological_space_eq", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1519517310, "sha": "c88a9e61", "message": "doc(docs/tactics): Document the find command (#67)", "changes": [{"oldPath": "docs/tactics.md", "newPath": "docs/tactics.md", "changes": []}]}, {"timestamp": 1519328523, "sha": "16307258", "message": "feat(data/finset): insert_union_distrib (#66)\n* chore(data/finset): match style guide\n* feat(data/finset): insert_union_distrib", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "insert_union", ["finset"]], ["add", "theorem", "insert_union_distrib", ["finset"]], ["mod", "theorem", "union_insert", ["finset"]]]}]}, {"timestamp": 1519312466, "sha": "49b196c4", "message": "feat(data/multiset): erase_lt", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "erase_lt", ["multiset"]]]}]}, {"timestamp": 1519308537, "sha": "d68c8ae0", "message": "feat(set_theory/cardinal): some missing power theorems", "changes": [{"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["add", "theorem", "nat_cast_pow", ["cardinal"]], ["add", "theorem", "power_add", ["cardinal"]], ["add", "theorem", "power_lt_omega", ["cardinal"]], ["add", "theorem", "power_one", ["cardinal"]], ["del", "theorem", "power_sum", ["cardinal"]]]}]}, {"timestamp": 1519244085, "sha": "22a52c39", "message": "fix(tactic/find): update to lean", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/find.lean", "newPath": "tactic/find.lean", "changes": []}]}, {"timestamp": 1519187369, "sha": "8ae1cefb", "message": "feat(tactic/find): add @Kha's #find command", "changes": [{"oldPath": null, "newPath": "tactic/find.lean", "changes": []}]}, {"timestamp": 1519164863, "sha": "e2a562a8", "message": "refactor(analysis/topology): simplify is_topological_basis_of_open_of_nhds", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_attach", ["finset"]], ["mod", "theorem", "prod_bij", ["finset"]], ["mod", "theorem", "prod_bij_ne_one", ["finset"]]]}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "def", "set_fintype", []]]}]}, {"timestamp": 1519164738, "sha": "ebcbb6bb", "message": "doc(.): MD documentation (#58)", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": null, "newPath": "docs/naming.md", "changes": []}, {"oldPath": "style.md", "newPath": "docs/style.md", "changes": []}, {"oldPath": null, "newPath": "docs/tactics.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/functions.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/groups.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/integers.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/naturals.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/orders.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/quotients.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/relations.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/rings_fields.md", "changes": []}, {"oldPath": null, "newPath": "docs/theories/sets.md", "changes": []}, {"oldPath": null, "newPath": "docs/wip.md", "changes": []}]}, {"timestamp": 1519141009, "sha": "140c6728", "message": "feat(algebra/order_functions): add abs_le_max_abs_abs; and relations between mul and max / min (suggested by @PatrickMassot)", "changes": [{"oldPath": "algebra/order_functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["add", "theorem", "abs_le_max_abs_abs", []], ["add", "theorem", "max_mul_mul_le_max_mul_max", []], ["add", "theorem", "monotone_mul_of_nonneg", []], ["add", "theorem", "mul_max_of_nonneg", []], ["add", "theorem", "mul_min_of_nonneg", []]]}]}, {"timestamp": 1519140156, "sha": "3e683f41", "message": "chore(algebra,order): cleanup min / max using the lattice theory", "changes": [{"oldPath": "algebra/default.lean", "newPath": "algebra/default.lean", "changes": []}, {"oldPath": "algebra/functions.lean", "newPath": "algebra/order_functions.lean", "changes": [["add", "theorem", "le_max_iff", []], ["del", "theorem", "le_max_left_iff_true", []], ["add", "theorem", "le_max_left_of_le", []], ["del", "theorem", "le_max_right_iff_true", []], ["add", "theorem", "le_max_right_of_le", []], ["mod", "theorem", "le_min_iff", []], ["add", "theorem", "max_distrib_of_monotone", []], ["mod", "theorem", "max_le_iff", []], ["add", "theorem", "max_le_max", []], ["mod", "theorem", "max_min_distrib_left", []], ["mod", "theorem", "max_min_distrib_right", []], ["add", "theorem", "min_distrib_of_monotone", []], ["add", "theorem", "min_le_iff", []], ["add", "theorem", "min_le_left_of_le", []], ["add", "theorem", "min_le_min", []], ["add", "theorem", "min_le_right_of_le", []], ["add", "theorem", "min_lt_iff", []], ["mod", "theorem", "min_max_distrib_left", []], ["mod", "theorem", "min_max_distrib_right", []]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/set/intervals.lean", "newPath": "data/set/intervals.lean", "changes": []}, {"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": [["del", "theorem", "eq_of_sup_eq_inf_eq", ["lattice"]], ["del", "theorem", "inf_eq_bot_iff_le_compl", ["lattice"]], ["del", "theorem", "inf_sup_left", ["lattice"]], ["del", "theorem", "inf_sup_right", ["lattice"]], ["del", "theorem", "le_sup_inf", ["lattice"]], ["del", "theorem", "sup_inf_left", ["lattice"]], ["del", "theorem", "sup_inf_right", ["lattice"]]]}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": [["add", "theorem", "inf_eq_bot_iff_le_compl", ["lattice"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["add", "theorem", "eq_of_sup_eq_inf_eq", ["lattice"]], ["add", "theorem", "inf_sup_left", ["lattice"]], ["add", "theorem", "inf_sup_right", ["lattice"]], ["add", "theorem", "le_sup_inf", ["lattice"]], ["add", "theorem", "sup_inf_left", ["lattice"]], ["add", "theorem", "sup_inf_right", ["lattice"]]]}]}, {"timestamp": 1519123409, "sha": "504a2dc8", "message": "Create choose.lean (#48)\ndeat(data/nat): add choose function to compute the binomial coefficients", "changes": [{"oldPath": null, "newPath": "data/nat/choose.lean", "changes": [["add", "def", "choose", []], ["add", "theorem", "choose_eq_fact_div_fact", []], ["add", "theorem", "choose_eq_zero_of_lt", []], ["add", "theorem", "choose_mul_fact_mul_fact", []], ["add", "theorem", "choose_one_right", []], ["add", "theorem", "choose_pos", []], ["add", "theorem", "choose_self", []], ["add", "theorem", "choose_succ_self", []], ["add", "theorem", "choose_succ_succ", []], ["add", "theorem", "choose_zero_right", []], ["add", "theorem", "choose_zero_succ", []], ["add", "theorem", "fact_mul_fact_dvd_fact", []], ["add", "theorem", "succ_mul_choose_eq", []]]}]}, {"timestamp": 1519038025, "sha": "3c25d94a", "message": "feat(algebra/archimedean): pow_unbounded_of_gt_one (#50)", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": [["add", "theorem", "pow_unbounded_of_gt_one", []]]}]}, {"timestamp": 1519037746, "sha": "500dcc92", "message": "feat(analysis/metric_space): add tendsto_iff_dist_tendsto_zero", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "abs_dist", []], ["add", "theorem", "nhds_vmap_dist", []], ["add", "theorem", "dist_0_eq_abs", ["real"]], ["add", "theorem", "tendsto_iff_dist_tendsto_zero", []]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["del", "theorem", "le_vmap_iff_map_le", ["filter"]], ["add", "theorem", "map_le_iff_le_vmap", ["filter"]], ["del", "theorem", "map_le_iff_vmap_le", ["filter"]], ["del", "theorem", "tendsto_vmap'", ["filter"]], ["add", "theorem", "tendsto_vmap_iff", ["filter"]]]}]}, {"timestamp": 1519036692, "sha": "3ef7c7df", "message": "fix(analysis/metric_space): remove unnecessary topological_space assumption from tendsto_dist", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["mod", "theorem", "tendsto_dist", []]]}]}, {"timestamp": 1518912970, "sha": "9b306b2e", "message": "feat(option.to_list)", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "def", "to_list", ["option"]]]}]}, {"timestamp": 1518693693, "sha": "ff4af0d4", "message": "feat(data/list): add append_eq_nil and update_nth_eq_nil", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "append_eq_nil", ["list"]], ["add", "theorem", "update_nth_eq_nil", ["list"]]]}]}, {"timestamp": 1518691392, "sha": "c0153c11", "message": "feat(data/multiset): add smielattie_sup_bot instance; add disjoint_union_left/_right", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "disjoint_union_left", ["multiset"]], ["add", "theorem", "disjoint_union_right", ["multiset"]]]}]}, {"timestamp": 1518687261, "sha": "8741b647", "message": "feat(algebra/group_power): add pow_inv and pow_abs", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "pow_abs", []], ["add", "theorem", "pow_inv", []]]}]}, {"timestamp": 1518615197, "sha": "eb32bfb1", "message": "feat(data/multiset): disjoint_ndinsert theorems", "changes": [{"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "disjoint_ndinsert_left", ["multiset"]], ["add", "theorem", "disjoint_ndinsert_right", ["multiset"]]]}]}, {"timestamp": 1518419467, "sha": "6ff5f3ed", "message": "feat(data/equiv): generalize list_equiv_of_equiv over universes (#52)", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "def", "list_equiv_of_equiv", ["equiv"]]]}]}, {"timestamp": 1518130208, "sha": "5dd34192", "message": "feat(order/conditionally_complete_lattice): Conditionally complete lattices", "changes": [{"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["mod", "theorem", "exists_floor", ["real"]], ["mod", "theorem", "mk_add", ["real"]], ["mod", "theorem", "mk_mul", ["real"]], ["mod", "theorem", "mk_neg", ["real"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "inter_univ", ["set"]], ["mod", "theorem", "subset_union_left", ["set"]], ["mod", "theorem", "subset_union_right", ["set"]], ["add", "theorem", "union_empty_iff", ["set"]], ["mod", "theorem", "union_subset_iff", ["set"]], ["mod", "theorem", "univ_inter", ["set"]]]}, {"oldPath": null, "newPath": "order/conditionally_complete_lattice.lean", "changes": [["add", "theorem", "mk", ["bdd_above"]], ["add", "def", "bdd_above", []], ["add", "theorem", "bdd_above_Int1", []], ["add", "theorem", "bdd_above_Int2", []], ["add", "theorem", "bdd_above_bot", []], ["add", "theorem", "bdd_above_empty", []], ["add", "theorem", "bdd_above_finite", []], ["add", "theorem", "bdd_above_finite_union", []], ["add", "theorem", "bdd_above_insert", []], ["add", "theorem", "bdd_above_singleton", []], ["add", "theorem", "bdd_above_subset", []], ["add", "theorem", "bdd_above_top", []], ["add", "theorem", "bdd_above_union", []], ["add", "theorem", "mk", ["bdd_below"]], ["add", "def", "bdd_below", []], ["add", "theorem", "bdd_below_Int1", []], ["add", "theorem", "bdd_below_Int2", []], ["add", "theorem", "bdd_below_empty", []], ["add", "theorem", "bdd_below_finite", []], ["add", "theorem", "bdd_below_finite_union", []], ["add", "theorem", "bdd_below_insert", []], ["add", "theorem", "bdd_below_singleton", []], ["add", "theorem", "bdd_below_subset", []], ["add", "theorem", "bdd_below_union", []], ["add", "theorem", "cInf_insert", ["lattice"]], ["add", "theorem", "cInf_intro", ["lattice"]], ["add", "theorem", "cInf_le", ["lattice"]], ["add", "theorem", "cInf_le_cInf", ["lattice"]], ["add", "theorem", "cInf_le_cSup", ["lattice"]], ["add", "theorem", "cInf_le_of_le", ["lattice"]], ["add", "theorem", "cInf_lt_of_lt", ["lattice"]], ["add", "theorem", "cInf_of_in_of_le", ["lattice"]], ["add", "theorem", "cInf_singleton", ["lattice"]], ["add", "theorem", "cInf_union", ["lattice"]], ["add", "theorem", "cSup_insert", ["lattice"]], ["add", "theorem", "cSup_inter_le", ["lattice"]], ["add", "theorem", "cSup_intro", ["lattice"]], ["add", "theorem", "cSup_le", ["lattice"]], ["add", "theorem", "cSup_le_cSup", ["lattice"]], ["add", "theorem", "cSup_le_iff", ["lattice"]], ["add", "theorem", "cSup_of_in_of_le", ["lattice"]], ["add", "theorem", "cSup_singleton", ["lattice"]], ["add", "theorem", "cSup_union", ["lattice"]], ["add", "theorem", "exists_lt_of_cInf_lt", ["lattice"]], ["add", "theorem", "exists_lt_of_lt_cSup", ["lattice"]], ["add", "theorem", "le_cInf", ["lattice"]], ["add", "theorem", "le_cInf_iff", ["lattice"]], ["add", "theorem", "le_cInf_inter", ["lattice"]], ["add", "theorem", "le_cSup", ["lattice"]], ["add", "theorem", "le_cSup_of_le", ["lattice"]], ["add", "theorem", "lt_cSup_of_lt", ["lattice"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["mod", "theorem", "inf_le_left", ["lattice"]], ["mod", "theorem", "inf_le_right", ["lattice"]], ["mod", "theorem", "le_sup_left", ["lattice"]], ["mod", "theorem", "le_sup_right", ["lattice"]]]}]}, {"timestamp": 1518129563, "sha": "6ef721ea", "message": "feat(data/finset): not_mem theorems\nAdapted from #44", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "not_mem_singleton", ["finset"]], ["add", "theorem", "not_mem_union", ["finset"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "ne_of_mem_of_not_mem", []]]}]}, {"timestamp": 1517936610, "sha": "14a19bf3", "message": "fix(*): update to lean\nAdding typeclasses to the context must now be done with `haveI`, `introsI`, etc.", "changes": [{"oldPath": "algebra/archimedean.lean", "newPath": "algebra/archimedean.lean", "changes": []}, {"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/linear_map_module.lean", "newPath": "algebra/linear_algebra/linear_map_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/subtype_module.lean", "newPath": "algebra/linear_algebra/subtype_module.lean", "changes": []}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["mod", "theorem", "one_smul", []]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "def", "mk'", ["uniform_space"]]]}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "data/analysis/topology.lean", "newPath": "data/analysis/topology.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "data/sum.lean", "newPath": "data/sum.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "set_theory/zfc.lean", "newPath": "set_theory/zfc.lean", "changes": []}, {"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}]}, {"timestamp": 1517795262, "sha": "5da3eb03", "message": "Fix universe parameter in permutation group", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}]}, {"timestamp": 1517795262, "sha": "cb4449f1", "message": "Permutation group instance for any type", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "ext", ["equiv"]]]}]}, {"timestamp": 1517523266, "sha": "03fefd43", "message": "Create localization.lean", "changes": [{"oldPath": null, "newPath": "algebra/localization.lean", "changes": [["add", "def", "add", ["loc"]], ["add", "def", "add_aux", ["loc"]], ["add", "def", "loc", ["loc"]], ["add", "def", "mul", ["loc"]], ["add", "def", "mul_aux", ["loc"]], ["add", "def", "neg", ["loc"]], ["add", "def", "neg_aux", ["loc"]]]}]}, {"timestamp": 1517514207, "sha": "e0539dd9", "message": "fix(data/hash_map,...): update to lean", "changes": [{"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": []}]}, {"timestamp": 1516936501, "sha": "edd62de5", "message": "fix(set_theory/zfc): update to lean", "changes": [{"oldPath": "set_theory/zfc.lean", "newPath": "set_theory/zfc.lean", "changes": [["mod", "def", "fval", ["Class"]], ["mod", "theorem", "mem_hom_left", ["Class"]], ["mod", "theorem", "mem_hom_right", ["Class"]]]}]}, {"timestamp": 1516935133, "sha": "f46d32b0", "message": "feat(algebra/archimedean): generalize real thms to archimedean fields", "changes": [{"oldPath": null, "newPath": "algebra/archimedean.lean", "changes": [["add", "theorem", "archimedean_iff_nat_le", []], ["add", "theorem", "archimedean_iff_nat_lt", []], ["add", "theorem", "archimedean_iff_rat_le", []], ["add", "theorem", "archimedean_iff_rat_lt", []], ["add", "def", "ceil", []], ["add", "theorem", "ceil_add_int", []], ["add", "theorem", "ceil_coe", []], ["add", "theorem", "ceil_le", []], ["add", "theorem", "ceil_lt_add_one", []], ["add", "theorem", "ceil_mono", []], ["add", "theorem", "ceil_sub_int", []], ["add", "theorem", "exists_floor", []], ["add", "theorem", "exists_int_gt", []], ["add", "theorem", "exists_int_lt", []], ["add", "theorem", "exists_nat_gt", []], ["add", "theorem", "exists_pos_rat_lt", []], ["add", "theorem", "exists_rat_btwn", []], ["add", "theorem", "exists_rat_gt", []], ["add", "theorem", "exists_rat_lt", []], ["add", "theorem", "exists_rat_near", []], ["add", "def", "floor", []], ["add", "theorem", "floor_add_int", []], ["add", "theorem", "floor_coe", []], ["add", "theorem", "floor_le", []], ["add", "theorem", "floor_lt", []], ["add", "theorem", "floor_mono", []], ["add", "theorem", "floor_nonneg", []], ["add", "theorem", "floor_sub_int", []], ["add", "theorem", "le_ceil", []], ["add", "theorem", "le_floor", []], ["add", "theorem", "lt_ceil", []], ["add", "theorem", "lt_floor_add_one", []], ["add", "theorem", "lt_succ_floor", []], ["add", "theorem", "sub_one_lt_floor", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "mul_smul_assoc", ["add_monoid"]], ["add", "theorem", "mul_smul_right", ["add_monoid"]], ["add", "theorem", "one_smul", ["add_monoid"]], ["add", "theorem", "smul_eq_mul'", ["add_monoid"]], ["add", "theorem", "smul_eq_mul", ["add_monoid"]], ["add", "theorem", "smul_nonneg", ["add_monoid"]], ["add", "theorem", "gsmul_eq_mul'", []], ["add", "theorem", "gsmul_eq_mul", []], ["add", "theorem", "mul_gsmul_assoc", []], ["add", "theorem", "mul_gsmul_right", []], ["add", "theorem", "one_le_pow_of_one_le", []], ["add", "theorem", "pow_ge_one_add_mul", []], ["add", "theorem", "pow_ge_one_add_sub_mul", []], ["del", "theorem", "pow_ge_one_of_ge_one", []], ["mod", "theorem", "pow_nonneg", []], ["mod", "theorem", "pow_pos", []]]}, {"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "data/complex.lean", "newPath": "data/complex/basic.lean", "changes": [["add", "theorem", "abs_le_abs_re_add_abs_im", ["complex"]], ["add", "theorem", "equiv_lim", ["complex"]], ["add", "theorem", "is_cau_seq_im", ["complex"]], ["add", "theorem", "is_cau_seq_re", ["complex"]], ["add", "theorem", "re_add_im", ["complex"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "coe_int_denom", ["rat"]], ["add", "theorem", "coe_int_num", ["rat"]], ["add", "theorem", "coe_nat_denom", ["rat"]], ["add", "theorem", "coe_nat_num", ["rat"]]]}, {"oldPath": "data/real/basic.lean", "newPath": "data/real/basic.lean", "changes": [["del", "theorem", "ceil_add_int", ["real"]], ["del", "theorem", "ceil_coe", ["real"]], ["del", "theorem", "ceil_le", ["real"]], ["del", "theorem", "ceil_lt_add_one", ["real"]], ["del", "theorem", "ceil_mono", ["real"]], ["del", "theorem", "ceil_sub_int", ["real"]], ["del", "theorem", "exists_int_gt", ["real"]], ["del", "theorem", "exists_int_lt", ["real"]], ["del", "theorem", "exists_nat_gt", ["real"]], ["del", "theorem", "exists_pos_rat_lt", ["real"]], ["del", "theorem", "exists_rat_btwn", ["real"]], ["del", "theorem", "exists_rat_gt", ["real"]], ["del", "theorem", "exists_rat_lt", ["real"]], ["del", "theorem", "exists_rat_near'", ["real"]], ["del", "theorem", "exists_rat_near", ["real"]], ["del", "theorem", "floor_add_int", ["real"]], ["del", "theorem", "floor_coe", ["real"]], ["del", "theorem", "floor_le", ["real"]], ["del", "theorem", "floor_lt", ["real"]], ["del", "theorem", "floor_mono", ["real"]], ["del", "theorem", "floor_nonneg", ["real"]], ["del", "theorem", "floor_sub_int", ["real"]], ["del", "theorem", "le_ceil", ["real"]], ["del", "theorem", "le_floor", ["real"]], ["mod", "theorem", "le_mk_of_forall_le", ["real"]], ["del", "theorem", "lt_ceil", ["real"]], ["del", "theorem", "lt_floor_add_one", ["real"]], ["del", "theorem", "lt_succ_floor", ["real"]], ["mod", "theorem", "mk_le_of_forall_le", ["real"]], ["mod", "theorem", "mk_near_of_forall_near", ["real"]], ["del", "theorem", "sub_one_lt_floor", ["real"]]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": [["add", "theorem", "is_cau", ["cau_seq"]], ["add", "theorem", "mk_to_fun", ["cau_seq"]]]}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1516844088, "sha": "0e421874", "message": "fix(algebra/module): fix module typeclass resolution\nBefore this change, any looping typeclass instance on `ring` (like `ring A -> ring (f A)`) would cause unrelated typeclass problems such as `has_add B` to search for `module ?M B` and then `ring ?M`, leading to an infinite number of applications of the looping ring instance. leanprover/lean#1881 promises to fix this, but until then here is a workaround.", "changes": [{"oldPath": "algebra/linear_algebra/linear_map_module.lean", "newPath": "algebra/linear_algebra/linear_map_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/prod_module.lean", "newPath": "algebra/linear_algebra/prod_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/quotient_module.lean", "newPath": "algebra/linear_algebra/quotient_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/subtype_module.lean", "newPath": "algebra/linear_algebra/subtype_module.lean", "changes": []}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}]}, {"timestamp": 1516803932, "sha": "7fba1afa", "message": "fix(analysis/metric_space): remove superfluous typeclass assumptions", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["mod", "theorem", "continuous_of_metric", []], ["mod", "theorem", "tendsto_dist", []], ["mod", "theorem", "tendsto_nhds_of_metric", []], ["mod", "theorem", "uniform_continuous_of_metric", []], ["mod", "theorem", "uniform_embedding_of_metric", []]]}]}, {"timestamp": 1516678258, "sha": "acb9093f", "message": "feat(analysis/complex): complex numbers are a top ring", "changes": [{"oldPath": "analysis/complex.lean", "newPath": "analysis/complex.lean", "changes": [["add", "theorem", "continuous_abs", ["complex"]], ["add", "theorem", "continuous_inv'", ["complex"]], ["add", "theorem", "continuous_inv", ["complex"]], ["add", "theorem", "continuous_mul", ["complex"]], ["mod", "theorem", "dist_eq", ["complex"]], ["add", "theorem", "tendsto_inv", ["complex"]], ["add", "theorem", "uniform_continuous_abs", ["complex"]], ["add", "theorem", "uniform_continuous_add", ["complex"]], ["add", "theorem", "uniform_continuous_inv", ["complex"]], ["add", "theorem", "uniform_continuous_mul", ["complex"]], ["add", "theorem", "uniform_continuous_mul_const", ["complex"]], ["add", "theorem", "uniform_continuous_neg", ["complex"]]]}, {"oldPath": "data/complex.lean", "newPath": "data/complex.lean", "changes": [["add", "theorem", "abs_abs_sub_le_abs_sub", ["complex"]]]}, {"oldPath": "data/real/cau_seq.lean", "newPath": "data/real/cau_seq.lean", "changes": [["add", "theorem", "abs_abv_sub_le_abv_sub", ["is_absolute_value"]], ["add", "theorem", "sub_abv_le_abv_sub", ["is_absolute_value"]]]}]}, {"timestamp": 1516676872, "sha": "65c5cb92", "message": "refactor(data/real): generalize cau_seq to arbitrary metrics\nthe intent is to use this also for the complex numbers", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "data/complex.lean", "newPath": "data/complex.lean", "changes": [["add", "theorem", "abs_div", ["complex"]], ["add", "theorem", "abs_inv", ["complex"]], ["mod", "theorem", "abs_neg", ["complex"]], ["mod", "theorem", "abs_pos", ["complex"]], ["mod", "theorem", "abs_sub", ["complex"]], ["mod", "theorem", "abs_sub_le", ["complex"]]]}, {"oldPath": "data/real.lean", "newPath": "data/real/basic.lean", "changes": [["del", "theorem", "abs_pos_of_not_lim_zero", ["cau_seq"]], ["del", "theorem", "add_apply", ["cau_seq"]], ["del", "theorem", "add_lim_zero", ["cau_seq"]], ["del", "theorem", "add_pos", ["cau_seq"]], ["del", "theorem", "bounded'", ["cau_seq"]], ["del", "theorem", "bounded", ["cau_seq"]], ["del", "theorem", "cauchy", ["cau_seq"]], ["del", "theorem", "cauchy₂", ["cau_seq"]], ["del", "theorem", "cauchy₃", ["cau_seq"]], ["del", "def", "const", ["cau_seq"]], ["del", "theorem", "const_add", ["cau_seq"]], ["del", "theorem", "const_apply", ["cau_seq"]], ["del", "theorem", "const_equiv", ["cau_seq"]], ["del", "theorem", "const_inj", ["cau_seq"]], ["del", "theorem", "const_le", ["cau_seq"]], ["del", "theorem", "const_lim_zero", ["cau_seq"]], ["del", "theorem", "const_lt", ["cau_seq"]], ["del", "theorem", "const_mul", ["cau_seq"]], ["del", "theorem", "const_neg", ["cau_seq"]], ["del", "theorem", "const_pos", ["cau_seq"]], ["del", "theorem", "const_sub", ["cau_seq"]], ["del", "theorem", "equiv_def₃", ["cau_seq"]], ["del", "theorem", "exists_gt", ["cau_seq"]], ["del", "theorem", "exists_lt", ["cau_seq"]], ["del", "theorem", "ext", ["cau_seq"]], ["del", "def", "inv", ["cau_seq"]], ["del", "theorem", "inv_apply", ["cau_seq"]], ["del", "theorem", "inv_aux", ["cau_seq"]], ["del", "theorem", "inv_mul_cancel", ["cau_seq"]], ["del", "theorem", "le_antisymm", ["cau_seq"]], ["del", "theorem", "le_total", ["cau_seq"]], ["del", "def", "lim_zero", ["cau_seq"]], ["del", "theorem", "lim_zero_congr", ["cau_seq"]], ["del", "theorem", "lt_irrefl", ["cau_seq"]], ["del", "theorem", "lt_of_eq_of_lt", ["cau_seq"]], ["del", "theorem", "lt_of_lt_of_eq", ["cau_seq"]], ["del", "theorem", "lt_total", ["cau_seq"]], ["del", "theorem", "lt_trans", ["cau_seq"]], ["del", "theorem", "mul_apply", ["cau_seq"]], ["del", "theorem", "mul_lim_zero", ["cau_seq"]], ["del", "theorem", "mul_pos", ["cau_seq"]], ["del", "theorem", "neg_apply", ["cau_seq"]], ["del", "theorem", "neg_lim_zero", ["cau_seq"]], ["del", "theorem", "not_lim_zero_of_pos", ["cau_seq"]], ["del", "def", "of_eq", ["cau_seq"]], ["del", "theorem", "of_near", ["cau_seq"]], ["del", "theorem", "one_apply", ["cau_seq"]], ["del", "def", "pos", ["cau_seq"]], ["del", "theorem", "pos_add_lim_zero", ["cau_seq"]], ["del", "theorem", "sub_apply", ["cau_seq"]], ["del", "theorem", "sub_lim_zero", ["cau_seq"]], ["del", "theorem", "trichotomy", ["cau_seq"]], ["del", "theorem", "zero_apply", ["cau_seq"]], ["del", "theorem", "zero_lim_zero", ["cau_seq"]], ["del", "def", "cau_seq", []], ["del", "theorem", "exists_forall_ge_and", []], ["del", "theorem", "cauchy₂", ["is_cau_seq"]], ["del", "theorem", "cauchy₃", ["is_cau_seq"]], ["del", "def", "is_cau_seq", []], ["del", "theorem", "rat_add_continuous_lemma", []], ["del", "theorem", "rat_inv_continuous_lemma", []], ["del", "theorem", "rat_mul_continuous_lemma", []], ["mod", "theorem", "cau_seq_converges", ["real"]], ["mod", "theorem", "equiv_lim", ["real"]], ["del", "def", "irrational", ["real"]], ["mod", "theorem", "is_cau_seq_iff_lift", ["real"]], ["mod", "theorem", "le_mk_of_forall_le", ["real"]], ["mod", "def", "mk", ["real"]], ["mod", "theorem", "mk_add", ["real"]], ["mod", "theorem", "mk_le", ["real"]], ["mod", "theorem", "mk_le_of_forall_le", ["real"]], ["mod", "theorem", "mk_lt", ["real"]], ["mod", "theorem", "mk_mul", ["real"]], ["mod", "theorem", "mk_near_of_forall_near", ["real"]], ["mod", "theorem", "mk_neg", ["real"]], ["mod", "theorem", "mk_pos", ["real"]], ["mod", "def", "of_rat", ["real"]], ["mod", "def", "sqrt_aux", ["real"]], ["mod", "theorem", "sqrt_aux_nonneg", ["real"]], ["del", "theorem", "sqrt_two_irrational", ["real"]], ["mod", "def", "real", []]]}, {"oldPath": null, "newPath": "data/real/cau_seq.lean", "changes": [["add", "theorem", "abv_pos_of_not_lim_zero", ["cau_seq"]], ["add", "theorem", "add_apply", ["cau_seq"]], ["add", "theorem", "add_lim_zero", ["cau_seq"]], ["add", "theorem", "add_pos", ["cau_seq"]], ["add", "theorem", "bounded'", ["cau_seq"]], ["add", "theorem", "bounded", ["cau_seq"]], ["add", "theorem", "cauchy", ["cau_seq"]], ["add", "theorem", "cauchy₂", ["cau_seq"]], ["add", "theorem", "cauchy₃", ["cau_seq"]], ["add", "def", "const", ["cau_seq"]], ["add", "theorem", "const_add", ["cau_seq"]], ["add", "theorem", "const_apply", ["cau_seq"]], ["add", "theorem", "const_equiv", ["cau_seq"]], ["add", "theorem", "const_inj", ["cau_seq"]], ["add", "theorem", "const_le", ["cau_seq"]], ["add", "theorem", "const_lim_zero", ["cau_seq"]], ["add", "theorem", "const_lt", ["cau_seq"]], ["add", "theorem", "const_mul", ["cau_seq"]], ["add", "theorem", "const_neg", ["cau_seq"]], ["add", "theorem", "const_pos", ["cau_seq"]], ["add", "theorem", "const_sub", ["cau_seq"]], ["add", "theorem", "equiv_def₃", ["cau_seq"]], ["add", "theorem", "exists_gt", ["cau_seq"]], ["add", "theorem", "exists_lt", ["cau_seq"]], ["add", "theorem", "ext", ["cau_seq"]], ["add", "def", "inv", ["cau_seq"]], ["add", "theorem", "inv_apply", ["cau_seq"]], ["add", "theorem", "inv_aux", ["cau_seq"]], ["add", "theorem", "inv_mul_cancel", ["cau_seq"]], ["add", "theorem", "le_antisymm", ["cau_seq"]], ["add", "theorem", "le_total", ["cau_seq"]], ["add", "def", "lim_zero", ["cau_seq"]], ["add", "theorem", "lim_zero_congr", ["cau_seq"]], ["add", "theorem", "lt_irrefl", ["cau_seq"]], ["add", "theorem", "lt_of_eq_of_lt", ["cau_seq"]], ["add", "theorem", "lt_of_lt_of_eq", ["cau_seq"]], ["add", "theorem", "lt_total", ["cau_seq"]], ["add", "theorem", "lt_trans", ["cau_seq"]], ["add", "theorem", "mul_apply", ["cau_seq"]], ["add", "theorem", "mul_lim_zero", ["cau_seq"]], ["add", "theorem", "mul_pos", ["cau_seq"]], ["add", "theorem", "neg_apply", ["cau_seq"]], ["add", "theorem", "neg_lim_zero", ["cau_seq"]], ["add", "theorem", "not_lim_zero_of_pos", ["cau_seq"]], ["add", "def", "of_eq", ["cau_seq"]], ["add", "theorem", "of_near", ["cau_seq"]], ["add", "theorem", "one_apply", ["cau_seq"]], ["add", "def", "pos", ["cau_seq"]], ["add", "theorem", "pos_add_lim_zero", ["cau_seq"]], ["add", "theorem", "sub_apply", ["cau_seq"]], ["add", "theorem", "sub_lim_zero", ["cau_seq"]], ["add", "theorem", "trichotomy", ["cau_seq"]], ["add", "theorem", "zero_apply", ["cau_seq"]], ["add", "theorem", "zero_lim_zero", ["cau_seq"]], ["add", "def", "cau_seq", []], ["add", "theorem", "exists_forall_ge_and", []], ["add", "theorem", "abv_div", ["is_absolute_value"]], ["add", "theorem", "abv_inv", ["is_absolute_value"]], ["add", "theorem", "abv_neg", ["is_absolute_value"]], ["add", "theorem", "abv_one'", ["is_absolute_value"]], ["add", "theorem", "abv_one", ["is_absolute_value"]], ["add", "theorem", "abv_pos", ["is_absolute_value"]], ["add", "theorem", "abv_sub", ["is_absolute_value"]], ["add", "theorem", "abv_sub_le", ["is_absolute_value"]], ["add", "theorem", "abv_zero", ["is_absolute_value"]], ["add", "theorem", "cauchy₂", ["is_cau_seq"]], ["add", "theorem", "cauchy₃", ["is_cau_seq"]], ["add", "def", "is_cau_seq", []], ["add", "theorem", "rat_add_continuous_lemma", []], ["add", "theorem", "rat_inv_continuous_lemma", []], ["add", "theorem", "rat_mul_continuous_lemma", []]]}, {"oldPath": null, "newPath": "data/real/irrational.lean", "changes": [["add", "def", "irrational", []], ["add", "theorem", "sqrt_two_irrational", []]]}]}, {"timestamp": 1516666460, "sha": "5fe8fbf1", "message": "feat(data/complex): properties of the complex absolute value function", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": []}, {"oldPath": null, "newPath": "analysis/complex.lean", "changes": [["add", "theorem", "dist_eq", ["complex"]]]}, {"oldPath": "data/complex.lean", "newPath": "data/complex.lean", "changes": [["add", "theorem", "abs_I", ["complex"]], ["add", "theorem", "abs_abs", ["complex"]], ["add", "theorem", "abs_add", ["complex"]], ["add", "theorem", "abs_conj", ["complex"]], ["add", "theorem", "abs_eq_zero", ["complex"]], ["add", "theorem", "abs_im_le_abs", ["complex"]], ["add", "theorem", "abs_mul", ["complex"]], ["add", "theorem", "abs_neg", ["complex"]], ["add", "theorem", "abs_nonneg", ["complex"]], ["add", "theorem", "abs_of_nonneg", ["complex"]], ["add", "theorem", "abs_of_real", ["complex"]], ["add", "theorem", "abs_one", ["complex"]], ["add", "theorem", "abs_pos", ["complex"]], ["add", "theorem", "abs_re_le_abs", ["complex"]], ["add", "theorem", "abs_sub", ["complex"]], ["add", "theorem", "abs_sub_le", ["complex"]], ["add", "theorem", "abs_zero", ["complex"]], ["add", "theorem", "conj_I", ["complex"]], ["add", "theorem", "conj_add", ["complex"]], ["add", "theorem", "conj_bijective", ["complex"]], ["add", "theorem", "conj_conj", ["complex"]], ["add", "theorem", "conj_div", ["complex"]], ["add", "theorem", "conj_eq_zero", ["complex"]], ["add", "theorem", "conj_inj", ["complex"]], ["add", "theorem", "conj_inv", ["complex"]], ["add", "theorem", "conj_mul", ["complex"]], ["add", "theorem", "conj_neg", ["complex"]], ["add", "theorem", "conj_one", ["complex"]], ["add", "theorem", "conj_zero", ["complex"]], ["add", "theorem", "im_le_abs", ["complex"]], ["add", "theorem", "im_sq_le_norm_sq", ["complex"]], ["add", "theorem", "mul_self_abs", ["complex"]], ["add", "theorem", "norm_sq_I", ["complex"]], ["add", "theorem", "norm_sq_add", ["complex"]], ["add", "theorem", "norm_sq_conj", ["complex"]], ["add", "theorem", "norm_sq_div", ["complex"]], ["add", "theorem", "norm_sq_inv", ["complex"]], ["add", "theorem", "norm_sq_mul", ["complex"]], ["add", "theorem", "norm_sq_neg", ["complex"]], ["mod", "theorem", "norm_sq_one", ["complex"]], ["add", "theorem", "norm_sq_sub", ["complex"]], ["mod", "theorem", "norm_sq_zero", ["complex"]], ["add", "theorem", "re_le_abs", ["complex"]], ["add", "theorem", "re_sq_le_norm_sq", ["complex"]]]}, {"oldPath": "data/real.lean", "newPath": "data/real.lean", "changes": [["add", "theorem", "sqrt_mul_self_eq_abs", ["real"]], ["add", "theorem", "sqrt_sqr_eq_abs", ["real"]]]}]}, {"timestamp": 1516579062, "sha": "5a652123", "message": "feat(data/real): real square root function, sqrt 2 is irrational", "changes": [{"oldPath": null, "newPath": "algebra/char_zero.lean", "changes": [["add", "theorem", "char_zero_of_inj_zero", ["add_group"]], ["add", "theorem", "add_halves'", []], ["add", "theorem", "add_self_eq_zero", []], ["add", "theorem", "bit0_eq_zero", []], ["add", "theorem", "char_zero_of_inj_zero", []], ["add", "theorem", "half_add_self", []], ["add", "theorem", "half_sub", []], ["add", "theorem", "cast_eq_zero", ["nat"]], ["add", "theorem", "cast_inj", ["nat"]], ["add", "theorem", "cast_injective", ["nat"]], ["add", "theorem", "cast_ne_zero", ["nat"]], ["add", "theorem", "char_zero_of_inj_zero", ["ordered_cancel_comm_monoid"]], ["add", "theorem", "sub_half", []], ["add", "theorem", "two_ne_zero'", []]]}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "div_eq_iff_mul_eq", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "pow_two", []], ["add", "theorem", "smul_two", []]]}, {"oldPath": "algebra/ordered_field.lean", "newPath": "algebra/ordered_field.lean", "changes": [["add", "theorem", "div_nonneg'", []], ["add", "theorem", "inv_lt_zero", []], ["add", "theorem", "inv_neg'", []], ["add", "theorem", "inv_nonneg", []], ["add", "theorem", "inv_nonpos", []], ["add", "theorem", "inv_pos'", []], ["add", "theorem", "mul_self_inj_of_nonneg", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "bit0_eq_two_mul", []]]}, {"oldPath": "data/complex.lean", "newPath": "data/complex.lean", "changes": [["add", "theorem", "add_conj", ["complex"]], ["add", "theorem", "eq_conj_iff_real", ["complex"]], ["add", "theorem", "of_real_bit0", ["complex"]], ["add", "theorem", "of_real_bit1", ["complex"]], ["add", "theorem", "of_real_div", ["complex"]], ["add", "theorem", "re_eq_add_conj", ["complex"]], ["add", "theorem", "sub_conj", ["complex"]]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["del", "theorem", "char_zero_of_inj_zero", ["add_group"]], ["del", "theorem", "char_zero_of_inj_zero", []], ["del", "theorem", "cast_eq_zero", ["nat"]], ["del", "theorem", "cast_inj", ["nat"]], ["del", "theorem", "cast_injective", ["nat"]], ["del", "theorem", "cast_ne_zero", ["nat"]], ["del", "theorem", "char_zero_of_inj_zero", ["ordered_cancel_comm_monoid"]]]}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["del", "theorem", "dvd_of_prime_of_dvd_pow", ["nat"]], ["add", "theorem", "dvd_of_dvd_pow", ["nat", "prime"]]]}, {"oldPath": "data/real.lean", "newPath": "data/real.lean", "changes": [["mod", "theorem", "cauchy₂", ["cau_seq"]], ["mod", "theorem", "cauchy₃", ["cau_seq"]], ["del", "def", "mk_of_near", ["cau_seq"]], ["del", "theorem", "mk_of_near_equiv", ["cau_seq"]], ["del", "theorem", "mk_of_near_fun", ["cau_seq"]], ["add", "theorem", "of_near", ["cau_seq"]], ["mod", "def", "cau_seq", []], ["add", "theorem", "cauchy₂", ["is_cau_seq"]], ["add", "theorem", "cauchy₃", ["is_cau_seq"]], ["add", "def", "is_cau_seq", []], ["add", "def", "irrational", ["real"]], ["add", "theorem", "is_cau_seq_iff_lift", ["real"]], ["add", "theorem", "mk_near_of_forall_near", ["real"]], ["add", "theorem", "mul_self_sqrt", ["real"]], ["add", "theorem", "of_near", ["real"]], ["add", "theorem", "sqr_sqrt", ["real"]], ["add", "def", "sqrt_aux", ["real"]], ["add", "theorem", "sqrt_aux_nonneg", ["real"]], ["add", "theorem", "sqrt_div", ["real"]], ["add", "theorem", "sqrt_eq_iff_mul_self_eq", ["real"]], ["add", "theorem", "sqrt_eq_iff_sqr_eq", ["real"]], ["add", "theorem", "sqrt_eq_zero'", ["real"]], ["add", "theorem", "sqrt_eq_zero", ["real"]], ["add", "theorem", "sqrt_eq_zero_of_nonpos", ["real"]], ["add", "theorem", "sqrt_exists", ["real"]], ["add", "theorem", "sqrt_inj", ["real"]], ["add", "theorem", "sqrt_inv", ["real"]], ["add", "theorem", "sqrt_le", ["real"]], ["add", "theorem", "sqrt_lt", ["real"]], ["add", "theorem", "sqrt_mul'", ["real"]], ["add", "theorem", "sqrt_mul", ["real"]], ["add", "theorem", "sqrt_mul_self", ["real"]], ["add", "theorem", "sqrt_nonneg", ["real"]], ["add", "theorem", "sqrt_one", ["real"]], ["add", "theorem", "sqrt_pos", ["real"]], ["add", "theorem", "sqrt_prop", ["real"]], ["add", "theorem", "sqrt_sqr", ["real"]], ["add", "theorem", "sqrt_two_irrational", ["real"]], ["add", "theorem", "sqrt_zero", ["real"]]]}]}, {"timestamp": 1516483723, "sha": "ffafdc69", "message": "feat(tactic/ring): extend ring tactic to allow division by constants", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}]}, {"timestamp": 1516467837, "sha": "bcbf0d56", "message": "refactor(data/complex): clean up proofs", "changes": [{"oldPath": "data/complex.lean", "newPath": "data/complex.lean", "changes": [["mod", "def", "I", ["complex"]], ["mod", "theorem", "I_im", ["complex"]], ["mod", "theorem", "I_re", ["complex"]], ["mod", "theorem", "add_im", ["complex"]], ["mod", "theorem", "add_re", ["complex"]], ["del", "theorem", "coe_im", ["complex"]], ["del", "theorem", "coe_re", ["complex"]], ["add", "def", "conj", ["complex"]], ["mod", "theorem", "conj_im", ["complex"]], ["add", "theorem", "conj_of_real", ["complex"]], ["mod", "theorem", "conj_re", ["complex"]], ["del", "def", "conjugate", ["complex"]], ["del", "theorem", "eq_iff_re_eq_and_im_eq", ["complex"]], ["del", "theorem", "eq_of_re_eq_and_im_eq", ["complex"]], ["mod", "theorem", "eta", ["complex"]], ["add", "theorem", "ext", ["complex"]], ["add", "theorem", "ext_iff", ["complex"]], ["del", "theorem", "im_eq_zero_of_complex_nat", ["complex"]], ["add", "theorem", "inv_def", ["complex"]], ["add", "theorem", "inv_im", ["complex"]], ["add", "theorem", "inv_re", ["complex"]], ["add", "theorem", "inv_zero", ["complex"]], ["add", "theorem", "mk_eq_add_mul_I", ["complex"]], ["add", "theorem", "mul_conj", ["complex"]], ["mod", "theorem", "mul_im", ["complex"]], ["add", "theorem", "mul_inv_cancel", ["complex"]], ["mod", "theorem", "mul_re", ["complex"]], ["mod", "theorem", "neg_im", ["complex"]], ["mod", "theorem", "neg_re", ["complex"]], ["add", "def", "norm_sq", ["complex"]], ["add", "theorem", "norm_sq_eq_zero", ["complex"]], ["add", "theorem", "norm_sq_nonneg", ["complex"]], ["add", "theorem", "norm_sq_of_real", ["complex"]], ["add", "theorem", "norm_sq_one", ["complex"]], ["add", "theorem", "norm_sq_pos", ["complex"]], ["add", "theorem", "norm_sq_zero", ["complex"]], ["del", "def", "norm_squared", ["complex"]], ["del", "theorem", "norm_squared_pos_of_nonzero", ["complex"]], ["mod", "def", "of_real", ["complex"]], ["del", "theorem", "of_real_abs_squared", ["complex"]], ["mod", "theorem", "of_real_add", ["complex"]], ["mod", "theorem", "of_real_eq_coe", ["complex"]], ["add", "theorem", "of_real_eq_zero", ["complex"]], ["add", "theorem", "of_real_im", ["complex"]], ["add", "theorem", "of_real_inj", ["complex"]], ["del", "theorem", "of_real_injective", ["complex"]], ["add", "theorem", "of_real_int_cast", ["complex"]], ["del", "theorem", "of_real_int_eq_complex_int", ["complex"]], ["mod", "theorem", "of_real_inv", ["complex"]], ["mod", "theorem", "of_real_mul", ["complex"]], ["add", "theorem", "of_real_nat_cast", ["complex"]], ["del", "theorem", "of_real_nat_eq_complex_nat", ["complex"]], ["add", "theorem", "of_real_ne_zero", ["complex"]], ["mod", "theorem", "of_real_neg", ["complex"]], ["mod", "theorem", "of_real_one", ["complex"]], ["add", "theorem", "of_real_rat_cast", ["complex"]], ["add", "theorem", "of_real_re", ["complex"]], ["mod", "theorem", "of_real_sub", ["complex"]], ["mod", "theorem", "of_real_zero", ["complex"]], ["mod", "theorem", "one_im", ["complex"]], ["mod", "theorem", "one_re", ["complex"]], ["del", "theorem", "proj_im", ["complex"]], ["del", "theorem", "proj_re", ["complex"]], ["mod", "theorem", "sub_im", ["complex"]], ["mod", "theorem", "sub_re", ["complex"]], ["mod", "theorem", "zero_im", ["complex"]], ["mod", "theorem", "zero_re", ["complex"]]]}, {"oldPath": "data/real.lean", "newPath": "data/real.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}]}, {"timestamp": 1516381543, "sha": "baa4b09e", "message": "feat(analysis/real): swap out the definition of real, shorten proofs", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["del", "theorem", "abs_real_eq_abs", []], ["del", "theorem", "closure_of_rat_image_le_eq", []], ["del", "theorem", "closure_of_rat_image_le_le_eq", []], ["add", "theorem", "closure_of_rat_image_lt", []], ["del", "theorem", "coe_rat_eq_of_rat", []], ["mod", "theorem", "compact_ivl", []], ["del", "theorem", "continuous_abs_rat", []], ["del", "theorem", "continuous_abs_real", []], ["del", "theorem", "continuous_inv_real'", []], ["del", "theorem", "continuous_inv_real", []], ["del", "theorem", "continuous_mul_real'", []], ["del", "theorem", "continuous_mul_real", []], ["add", "theorem", "continuous_of_rat", []], ["mod", "theorem", "dense_embedding_of_rat", []], ["del", "theorem", "dense_embedding_of_rat_of_rat", []], ["add", "theorem", "embedding_of_rat", []], ["del", "theorem", "exists_gt_of_rat", []], ["del", "theorem", "exists_lt_nat", []], ["del", "theorem", "exists_lt_of_rat", []], ["del", "theorem", "exists_lt_rat", []], ["del", "theorem", "exists_pos_of_rat", []], ["del", "theorem", "exists_rat_btwn", []], ["del", "theorem", "exists_rat_lt", []], ["del", "def", "lift_rat_fun", []], ["del", "theorem", "lift_rat_fun_of_rat", []], ["del", "def", "lift_rat_op", []], ["del", "theorem", "lift_rat_op_of_rat_of_rat", []], ["del", "theorem", "map_neg_rat", []], ["del", "theorem", "map_neg_real", []], ["del", "theorem", "max_of_rat", []], ["del", "theorem", "mem_nonneg_of_continuous2", []], ["del", "theorem", "mem_uniformity_rat", []], ["del", "theorem", "mem_uniformity_real_iff", []], ["del", "theorem", "mem_zero_nhd", []], ["del", "theorem", "mem_zero_nhd_iff", []], ["del", "theorem", "mem_zero_nhd_le", []], ["del", "theorem", "min_of_rat", []], ["del", "theorem", "nhds_0_eq_zero_nhd", []], ["del", "theorem", "nhds_eq_map_zero_nhd", []], ["del", "theorem", "nhds_eq_real", []], ["del", "def", "nonneg", []], ["del", "theorem", "nonneg_antisymm", []], ["del", "def", "of_rat", []], ["del", "theorem", "of_rat_abs", []], ["del", "theorem", "of_rat_add", []], ["del", "theorem", "of_rat_inj", []], ["del", "theorem", "of_rat_injective", []], ["del", "theorem", "of_rat_inv", []], ["del", "theorem", "of_rat_le", []], ["del", "theorem", "of_rat_lt", []], ["del", "theorem", "of_rat_mem_nonneg", []], ["del", "theorem", "of_rat_mem_nonneg_iff", []], ["del", "theorem", "of_rat_mul", []], ["del", "theorem", "of_rat_neg", []], ["del", "theorem", "of_rat_one", []], ["del", "theorem", "of_rat_sub", []], ["del", "theorem", "of_rat_zero", []], ["del", "theorem", "preimage_neg_rat", []], ["del", "theorem", "pure_zero_le_zero_nhd", []], ["add", "theorem", "continuous_abs", ["rat"]], ["add", "theorem", "continuous_mul", ["rat"]], ["add", "theorem", "dist_eq", ["rat"]], ["add", "theorem", "totally_bounded_Icc", ["rat"]], ["add", "theorem", "uniform_continuous_abs", ["rat"]], ["add", "theorem", "uniform_continuous_add", ["rat"]], ["add", "theorem", "uniform_continuous_neg", ["rat"]], ["add", "theorem", "Cauchy_eq", ["real"]], ["add", "theorem", "Ioo_eq_ball", ["real"]], ["add", "theorem", "ball_eq_Ioo", ["real"]], ["add", "theorem", "continuous_abs", ["real"]], ["add", "theorem", "continuous_inv'", ["real"]], ["add", "theorem", "continuous_inv", ["real"]], ["add", "theorem", "continuous_mul", ["real"]], ["del", "theorem", "le_def", ["real"]], ["del", "theorem", "neg_preimage_closure", ["real"]], ["add", "theorem", "tendsto_inv", ["real"]], ["add", "theorem", "totally_bounded_Icc", ["real"]], ["add", "theorem", "totally_bounded_Ico", ["real"]], ["add", "theorem", "totally_bounded_Ioo", ["real"]], ["add", "theorem", "totally_bounded_ball", ["real"]], ["add", "theorem", "uniform_continuous_abs", ["real"]], ["add", "theorem", "uniform_continuous_add", ["real"]], ["add", "theorem", "uniform_continuous_inv", ["real"]], ["add", "theorem", "uniform_continuous_mul", ["real"]], ["add", "theorem", "uniform_continuous_mul_const", ["real"]], ["add", "theorem", "uniform_continuous_neg", ["real"]], ["del", "def", "real", []], ["del", "theorem", "tendsto_add_rat_zero'", []], ["del", "theorem", "tendsto_add_rat_zero", []], ["del", "theorem", "tendsto_inv_pos_rat", []], ["del", "theorem", "tendsto_inv_rat", []], ["del", "theorem", "tendsto_inv_real", []], ["del", "theorem", "tendsto_mul_bnd_rat'", []], ["del", "theorem", "tendsto_mul_bnd_rat", []], ["del", "theorem", "tendsto_mul_rat'", []], ["del", "theorem", "tendsto_neg_rat_zero", []], ["del", "theorem", "tendsto_sub_rat'", []], ["del", "theorem", "tendsto_sub_uniformity_zero_nhd'", []], ["del", "theorem", "tendsto_sub_uniformity_zero_nhd", []], ["del", "theorem", "tendsto_zero_nhds", []], ["del", "theorem", "totally_bounded_01_rat", []], ["del", "theorem", "two_eq_of_rat_two", []], ["del", "theorem", "uniform_continuous_abs_rat", []], ["del", "theorem", "uniform_continuous_abs_real", []], ["del", "theorem", "uniform_continuous_add_rat", []], ["del", "theorem", "uniform_continuous_add_real", []], ["del", "theorem", "uniform_continuous_inv_pos_rat", []], ["del", "theorem", "uniform_continuous_mul_rat", []], ["del", "theorem", "uniform_continuous_neg_rat", []], ["del", "theorem", "uniform_continuous_neg_real", []], ["add", "theorem", "uniform_continuous_of_rat", []], ["del", "theorem", "uniform_continuous_rat'", []], ["del", "theorem", "uniform_continuous_rat", []], ["del", "theorem", "uniform_embedding_add_rat", []], ["del", "theorem", "uniform_embedding_mul_rat", []], ["mod", "theorem", "uniform_embedding_of_rat", []], ["del", "theorem", "uniformity_rat", []], ["del", "theorem", "zero_le_iff_nonneg", []], ["del", "def", "zero_nhd", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["mod", "theorem", "is_closed_ge'", []], ["mod", "theorem", "is_closed_le'", []]]}, {"oldPath": "analysis/complex.lean", "newPath": "data/complex.lean", "changes": []}]}, {"timestamp": 1516378720, "sha": "bb1a9f2c", "message": "feat(data/real,*): supporting material for metric spaces", "changes": [{"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "abs_abs_sub_le_abs_sub", []], ["add", "theorem", "abs_sub_le_iff", []], ["add", "theorem", "abs_sub_lt_iff", []], ["add", "def", "sub_abs_le_abs_sub", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "sub_right_comm", []], ["add", "def", "sub_sub_cancel", []], ["del", "theorem", "sub_sub_swap", []]]}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/ordered_field.lean", "newPath": "algebra/ordered_field.lean", "changes": [["add", "theorem", "div_le_iff'", []], ["add", "theorem", "div_lt_iff'", []], ["add", "theorem", "le_div_iff'", []], ["add", "theorem", "lt_div_iff'", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "add_neg_le_iff_le_add'", []], ["add", "theorem", "add_neg_le_iff_le_add", []], ["add", "theorem", "le_sub_iff_add_le'", []], ["add", "theorem", "le_sub_iff_add_le", []], ["del", "theorem", "le_sub_left_iff_add_le", []], ["del", "theorem", "le_sub_right_iff_add_le", []], ["add", "theorem", "lt_sub_iff_add_lt'", []], ["add", "theorem", "lt_sub_iff_add_lt", []], ["del", "theorem", "lt_sub_left_iff_add_lt", []], ["del", "theorem", "lt_sub_right_iff_add_lt", []], ["add", "theorem", "neg_add_le_iff_le_add'", []], ["del", "theorem", "neg_add_le_iff_le_add_right", []], ["add", "theorem", "neg_le_sub_iff_le_add'", []], ["del", "theorem", "neg_le_sub_iff_le_add_left", []], ["add", "theorem", "neg_lt_sub_iff_lt_add'", []], ["del", "theorem", "neg_lt_sub_iff_lt_add_left", []], ["add", "theorem", "sub_le_iff_le_add'", []], ["add", "theorem", "sub_le_iff_le_add", []], ["del", "theorem", "sub_left_le_iff_le_add", []], ["del", "theorem", "sub_left_lt_iff_lt_add", []], ["add", "theorem", "sub_lt_iff_lt_add'", []], ["add", "theorem", "sub_lt_iff_lt_add", []], ["del", "theorem", "sub_right_le_iff_le_add", []], ["del", "theorem", "sub_right_lt_iff_lt_add", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "abs_dist_sub_le", []], ["add", "def", "ball", []], ["add", "theorem", "ball_disjoint", []], ["add", "theorem", "ball_disjoint_same", []], ["add", "theorem", "ball_eq_empty_iff_nonpos", []], ["add", "theorem", "ball_half_subset", []], ["add", "theorem", "ball_mem_nhds", []], ["add", "theorem", "ball_subset", []], ["add", "theorem", "ball_subset_ball", []], ["add", "theorem", "cauchy_of_metric", []], ["add", "theorem", "continuous_of_metric", []], ["add", "theorem", "dist_eq_zero", []], ["del", "theorem", "dist_eq_zero_iff", []], ["add", "theorem", "dist_le_zero", []], ["del", "theorem", "dist_le_zero_iff", []], ["add", "theorem", "dist_mem_uniformity", []], ["add", "theorem", "dist_pos", []], ["del", "theorem", "dist_pos_of_ne", []], ["add", "theorem", "dist_triangle_left", []], ["add", "theorem", "dist_triangle_right", []], ["add", "theorem", "exists_ball_subset_ball", []], ["add", "theorem", "is_closed_ball", []], ["del", "theorem", "is_closed_closed_ball", []], ["add", "theorem", "is_open_ball", []], ["mod", "theorem", "is_open_metric", []], ["del", "theorem", "is_open_open_ball", []], ["add", "theorem", "mem_ball'", []], ["add", "theorem", "mem_ball", []], ["add", "theorem", "mem_ball_comm", []], ["add", "theorem", "mem_ball_self", []], ["add", "theorem", "mem_closed_ball", []], ["add", "theorem", "mem_nhds_iff_metric", []], ["del", "theorem", "mem_nhds_sets_iff_metric", []], ["del", "theorem", "mem_open_ball", []], ["add", "def", "induced", ["metric_space"]], ["add", "theorem", "induced_uniform_embedding", ["metric_space"]], ["add", "def", "replace_uniformity", ["metric_space"]], ["del", "theorem", "ne_of_dist_pos", []], ["mod", "theorem", "nhds_eq_metric", []], ["del", "def", "open_ball", []], ["del", "theorem", "open_ball_eq_empty_of_nonpos", []], ["del", "theorem", "open_ball_subset_open_ball_of_le", []], ["add", "theorem", "pos_of_mem_ball", []], ["del", "theorem", "pos_of_mem_open_ball", []], ["add", "theorem", "dist_eq", ["real"]], ["add", "theorem", "dist_eq", ["subtype"]], ["add", "theorem", "swap_dist", []], ["add", "theorem", "tendsto_nhds_of_metric", []], ["add", "theorem", "totally_bounded_of_metric", []], ["add", "theorem", "uniform_continuous_of_metric", []], ["add", "theorem", "uniform_embedding_of_metric", []], ["add", "theorem", "uniformity_dist_of_mem_uniformity", []], ["add", "theorem", "zero_eq_dist", []], ["del", "theorem", "zero_eq_dist_iff", []]]}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["del", "theorem", "neg_preimage_closure", []], ["del", "theorem", "preimage_neg_real", []], ["add", "theorem", "neg_preimage_closure", ["real"]], ["del", "theorem", "tendsto_of_uniform_continuous_subtype", []]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["add", "theorem", "comp", ["continuous"]], ["add", "theorem", "prod_mk", ["continuous"]], ["add", "theorem", "tendsto", ["continuous"]], ["del", "theorem", "continuous_compose", []], ["del", "theorem", "continuous_eq_le_coinduced", []], ["add", "theorem", "continuous_iff_le_coinduced", []], ["del", "theorem", "continuous_iff_of_embedding", []], ["mod", "theorem", "continuous_inf_rng_left", []], ["mod", "theorem", "continuous_inf_rng_right", []], ["add", "theorem", "continuous_le_dom", []], ["add", "theorem", "continuous_le_rng", []], ["del", "theorem", "continuous_prod_mk", []], ["mod", "theorem", "continuous_sup_dom_left", []], ["mod", "theorem", "continuous_sup_dom_right", []], ["del", "theorem", "closure_image_univ", ["dense_embedding"]], ["add", "theorem", "closure_range", ["dense_embedding"]], ["mod", "theorem", "inj_iff", ["dense_embedding"]], ["add", "theorem", "mk'", ["dense_embedding"]], ["add", "theorem", "continuous_iff", ["embedding"]], ["add", "theorem", "tendsto_nhds_iff", ["embedding"]], ["mod", "theorem", "is_open_prod", []], ["del", "theorem", "tendsto_nhds_iff_of_embedding", []]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "mem_closure_iff", []], ["add", "theorem", "mem_closure_iff_nhds", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": [["add", "theorem", "map_neg", ["filter"]], ["add", "theorem", "induced_orderable_topology'", []], ["add", "theorem", "induced_orderable_topology", []], ["add", "theorem", "neg_preimage_closure", []], ["add", "theorem", "preimage_neg", []], ["add", "theorem", "mk'", ["uniform_add_group"]]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "mem_uniformity'", ["Cauchy"]], ["add", "theorem", "mem_uniformity", ["Cauchy"]], ["mod", "theorem", "pure_cauchy_dense", ["Cauchy"]], ["del", "theorem", "continuous_of_uniform", []], ["del", "theorem", "dense_embedding_of_uniform_embedding", []], ["add", "theorem", "id_rel_subset", []], ["add", "theorem", "le_nhds_lim_of_cauchy", []], ["add", "theorem", "mem_comp_rel", []], ["add", "theorem", "mem_id_rel", []], ["mod", "theorem", "mem_nhds_left", []], ["mod", "theorem", "mem_nhds_right", []], ["add", "def", "separated", []], ["add", "theorem", "separated_def'", []], ["add", "theorem", "separated_def", []], ["add", "theorem", "tendsto_of_uniform_continuous_subtype", []], ["add", "theorem", "totally_bounded_iff_subset", []], ["add", "theorem", "totally_bounded_preimage", []], ["add", "theorem", "comp", ["uniform_continuous"]], ["add", "theorem", "continuous", ["uniform_continuous"]], ["add", "theorem", "prod_mk", ["uniform_continuous"]], ["add", "def", "uniform_continuous", []], ["del", "theorem", "uniform_continuous_compose", []], ["add", "theorem", "uniform_continuous_def", []], ["del", "theorem", "uniform_continuous_of_embedding", []], ["del", "theorem", "uniform_continuous_prod_mk", []], ["add", "theorem", "dense_embedding", ["uniform_embedding"]], ["add", "theorem", "prod", ["uniform_embedding"]], ["add", "theorem", "uniform_continuous", ["uniform_embedding"]], ["add", "theorem", "uniform_continuous_iff", ["uniform_embedding"]], ["add", "def", "uniform_embedding", []], ["add", "theorem", "uniform_embedding_def'", []], ["add", "theorem", "uniform_embedding_def", []], ["del", "theorem", "uniform_embedding_prod", []], ["add", "def", "mk'", ["uniform_space", "core"]]]}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/fp/basic.lean", "newPath": "data/fp/basic.lean", "changes": []}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "cast_injective", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["add", "theorem", "cast_injective", ["nat"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "cast_injective", ["rat"]]]}, {"oldPath": "data/real.lean", "newPath": "data/real.lean", "changes": [["del", "theorem", "Inf_le", ["NEW", "real"]], ["del", "theorem", "Sup_le", ["NEW", "real"]], ["del", "theorem", "Sup_le_ub", ["NEW", "real"]], ["del", "theorem", "add_lt_add_iff_left", ["NEW", "real"]], ["del", "theorem", "ceil_add_int", ["NEW", "real"]], ["del", "theorem", "ceil_coe", ["NEW", "real"]], ["del", "theorem", "ceil_le", ["NEW", "real"]], ["del", "theorem", "ceil_lt_add_one", ["NEW", "real"]], ["del", "theorem", "ceil_mono", ["NEW", "real"]], ["del", "theorem", "ceil_sub_int", ["NEW", "real"]], ["del", "theorem", "exists_floor", ["NEW", "real"]], ["del", "theorem", "exists_int_gt", ["NEW", "real"]], ["del", "theorem", "exists_int_lt", ["NEW", "real"]], ["del", "theorem", "exists_nat_gt", ["NEW", "real"]], ["del", "theorem", "exists_pos_rat_lt", ["NEW", "real"]], ["del", "theorem", "exists_rat_btwn", ["NEW", "real"]], ["del", "theorem", "exists_rat_gt", ["NEW", "real"]], ["del", "theorem", "exists_rat_lt", ["NEW", "real"]], ["del", "theorem", "exists_rat_near'", ["NEW", "real"]], ["del", "theorem", "exists_rat_near", ["NEW", "real"]], ["del", "theorem", "exists_sup", ["NEW", "real"]], ["del", "theorem", "floor_add_int", ["NEW", "real"]], ["del", "theorem", "floor_coe", ["NEW", "real"]], ["del", "theorem", "floor_le", ["NEW", "real"]], ["del", "theorem", "floor_lt", ["NEW", "real"]], ["del", "theorem", "floor_mono", ["NEW", "real"]], ["del", "theorem", "floor_sub_int", ["NEW", "real"]], ["del", "theorem", "inv_mk", ["NEW", "real"]], ["del", "theorem", "inv_zero", ["NEW", "real"]], ["del", "theorem", "lb_le_Inf", ["NEW", "real"]], ["del", "theorem", "le_Inf", ["NEW", "real"]], ["del", "theorem", "le_Sup", ["NEW", "real"]], ["del", "theorem", "le_ceil", ["NEW", "real"]], ["del", "theorem", "le_floor", ["NEW", "real"]], ["del", "theorem", "le_mk_of_forall_le", ["NEW", "real"]], ["del", "theorem", "lt_ceil", ["NEW", "real"]], ["del", "theorem", "lt_floor_add_one", ["NEW", "real"]], ["del", "theorem", "lt_succ_floor", ["NEW", "real"]], ["del", "def", "mk", ["NEW", "real"]], ["del", "theorem", "mk_add", ["NEW", "real"]], ["del", "theorem", "mk_eq", ["NEW", "real"]], ["del", "theorem", "mk_eq_mk", ["NEW", "real"]], ["del", "theorem", "mk_eq_zero", ["NEW", "real"]], ["del", "theorem", "mk_le", ["NEW", "real"]], ["del", "theorem", "mk_le_of_forall_le", ["NEW", "real"]], ["del", "theorem", "mk_lt", ["NEW", "real"]], ["del", "theorem", "mk_mul", ["NEW", "real"]], ["del", "theorem", "mk_neg", ["NEW", "real"]], ["del", "theorem", "mk_pos", ["NEW", "real"]], ["del", "def", "of_rat", ["NEW", "real"]], ["del", "theorem", "of_rat_add", ["NEW", "real"]], ["del", "theorem", "of_rat_eq_cast", ["NEW", "real"]], ["del", "theorem", "of_rat_lt", ["NEW", "real"]], ["del", "theorem", "of_rat_mul", ["NEW", "real"]], ["del", "theorem", "of_rat_neg", ["NEW", "real"]], ["del", "theorem", "of_rat_one", ["NEW", "real"]], ["del", "theorem", "of_rat_sub", ["NEW", "real"]], ["del", "theorem", "of_rat_zero", ["NEW", "real"]], ["del", "theorem", "sub_one_lt_floor", ["NEW", "real"]], ["del", "def", "real", ["NEW"]], ["add", "theorem", "abs_pos_of_not_lim_zero", ["cau_seq"]], ["add", "theorem", "add_apply", ["cau_seq"]], ["add", "theorem", "add_lim_zero", ["cau_seq"]], ["add", "theorem", "add_pos", ["cau_seq"]], ["add", "theorem", "bounded'", ["cau_seq"]], ["add", "theorem", "bounded", ["cau_seq"]], ["add", "theorem", "cauchy", ["cau_seq"]], ["add", "theorem", "cauchy₂", ["cau_seq"]], ["add", "theorem", "cauchy₃", ["cau_seq"]], ["add", "def", "const", ["cau_seq"]], ["add", "theorem", "const_add", ["cau_seq"]], ["add", "theorem", "const_apply", ["cau_seq"]], ["add", "theorem", "const_equiv", ["cau_seq"]], ["add", "theorem", "const_inj", ["cau_seq"]], ["add", "theorem", "const_le", ["cau_seq"]], ["add", "theorem", "const_lim_zero", ["cau_seq"]], ["add", "theorem", "const_lt", ["cau_seq"]], ["add", "theorem", "const_mul", ["cau_seq"]], ["add", "theorem", "const_neg", ["cau_seq"]], ["add", "theorem", "const_pos", ["cau_seq"]], ["add", "theorem", "const_sub", ["cau_seq"]], ["add", "theorem", "equiv_def₃", ["cau_seq"]], ["add", "theorem", "exists_gt", ["cau_seq"]], ["add", "theorem", "exists_lt", ["cau_seq"]], ["add", "theorem", "ext", ["cau_seq"]], ["add", "def", "inv", ["cau_seq"]], ["add", "theorem", "inv_apply", ["cau_seq"]], ["add", "theorem", "inv_aux", ["cau_seq"]], ["add", "theorem", "inv_mul_cancel", ["cau_seq"]], ["add", "theorem", "le_antisymm", ["cau_seq"]], ["add", "theorem", "le_total", ["cau_seq"]], ["add", "def", "lim_zero", ["cau_seq"]], ["add", "theorem", "lim_zero_congr", ["cau_seq"]], ["add", "theorem", "lt_irrefl", ["cau_seq"]], ["add", "theorem", "lt_of_eq_of_lt", ["cau_seq"]], ["add", "theorem", "lt_of_lt_of_eq", ["cau_seq"]], ["add", "theorem", "lt_total", ["cau_seq"]], ["add", "theorem", "lt_trans", ["cau_seq"]], ["add", "def", "mk_of_near", ["cau_seq"]], ["add", "theorem", "mk_of_near_equiv", ["cau_seq"]], ["add", "theorem", "mk_of_near_fun", ["cau_seq"]], ["add", "theorem", "mul_apply", ["cau_seq"]], ["add", "theorem", "mul_lim_zero", ["cau_seq"]], ["add", "theorem", "mul_pos", ["cau_seq"]], ["add", "theorem", "neg_apply", ["cau_seq"]], ["add", "theorem", "neg_lim_zero", ["cau_seq"]], ["add", "theorem", "not_lim_zero_of_pos", ["cau_seq"]], ["add", "def", "of_eq", ["cau_seq"]], ["add", "theorem", "one_apply", ["cau_seq"]], ["add", "def", "pos", ["cau_seq"]], ["add", "theorem", "pos_add_lim_zero", ["cau_seq"]], ["add", "theorem", "sub_apply", ["cau_seq"]], ["add", "theorem", "sub_lim_zero", ["cau_seq"]], ["add", "theorem", "trichotomy", ["cau_seq"]], ["add", "theorem", "zero_apply", ["cau_seq"]], ["add", "theorem", "zero_lim_zero", ["cau_seq"]], ["add", "def", "cau_seq", []], ["del", "theorem", "abs_pos_of_not_lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "add_apply", ["rat", "cau_seq"]], ["del", "theorem", "add_lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "add_pos", ["rat", "cau_seq"]], ["del", "theorem", "bounded'", ["rat", "cau_seq"]], ["del", "theorem", "bounded", ["rat", "cau_seq"]], ["del", "theorem", "cauchy", ["rat", "cau_seq"]], ["del", "theorem", "cauchy₂", ["rat", "cau_seq"]], ["del", "theorem", "cauchy₃", ["rat", "cau_seq"]], ["del", "theorem", "ext", ["rat", "cau_seq"]], ["del", "def", "inv", ["rat", "cau_seq"]], ["del", "theorem", "inv_apply", ["rat", "cau_seq"]], ["del", "theorem", "inv_aux", ["rat", "cau_seq"]], ["del", "theorem", "inv_mul_cancel", ["rat", "cau_seq"]], ["del", "theorem", "le_antisymm", ["rat", "cau_seq"]], ["del", "theorem", "le_total", ["rat", "cau_seq"]], ["del", "def", "lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "lim_zero_congr", ["rat", "cau_seq"]], ["del", "theorem", "lt_irrefl", ["rat", "cau_seq"]], ["del", "theorem", "lt_of_eq_of_lt", ["rat", "cau_seq"]], ["del", "theorem", "lt_of_lt_of_eq", ["rat", "cau_seq"]], ["del", "theorem", "lt_trans", ["rat", "cau_seq"]], ["del", "theorem", "mul_apply", ["rat", "cau_seq"]], ["del", "theorem", "mul_lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "mul_pos", ["rat", "cau_seq"]], ["del", "theorem", "neg_apply", ["rat", "cau_seq"]], ["del", "theorem", "neg_lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "not_lim_zero_of_pos", ["rat", "cau_seq"]], ["del", "def", "of_eq", ["rat", "cau_seq"]], ["del", "def", "of_rat", ["rat", "cau_seq"]], ["del", "theorem", "of_rat_add", ["rat", "cau_seq"]], ["del", "theorem", "of_rat_apply", ["rat", "cau_seq"]], ["del", "theorem", "of_rat_lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "of_rat_mul", ["rat", "cau_seq"]], ["del", "theorem", "of_rat_neg", ["rat", "cau_seq"]], ["del", "theorem", "of_rat_pos", ["rat", "cau_seq"]], ["del", "theorem", "of_rat_sub", ["rat", "cau_seq"]], ["del", "theorem", "one_apply", ["rat", "cau_seq"]], ["del", "def", "pos", ["rat", "cau_seq"]], ["del", "theorem", "pos_add_lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "sub_apply", ["rat", "cau_seq"]], ["del", "theorem", "sub_lim_zero", ["rat", "cau_seq"]], ["del", "theorem", "trichotomy", ["rat", "cau_seq"]], ["del", "theorem", "zero_apply", ["rat", "cau_seq"]], ["del", "theorem", "zero_lim_zero", ["rat", "cau_seq"]], ["del", "def", "cau_seq", ["rat"]], ["add", "theorem", "rat_add_continuous_lemma", []], ["add", "theorem", "rat_inv_continuous_lemma", []], ["add", "theorem", "rat_mul_continuous_lemma", []], ["add", "theorem", "Inf_le", ["real"]], ["add", "theorem", "Inf_lt", ["real"]], ["add", "theorem", "Sup_le", ["real"]], ["add", "theorem", "Sup_le_ub", ["real"]], ["add", "theorem", "add_lt_add_iff_left", ["real"]], ["add", "theorem", "cau_seq_converges", ["real"]], ["add", "theorem", "ceil_add_int", ["real"]], ["add", "theorem", "ceil_coe", ["real"]], ["add", "theorem", "ceil_le", ["real"]], ["add", "theorem", "ceil_lt_add_one", ["real"]], ["add", "theorem", "ceil_mono", ["real"]], ["add", "theorem", "ceil_sub_int", ["real"]], ["add", "theorem", "equiv_lim", ["real"]], ["add", "theorem", "exists_floor", ["real"]], ["add", "theorem", "exists_int_gt", ["real"]], ["add", "theorem", "exists_int_lt", ["real"]], ["add", "theorem", "exists_nat_gt", ["real"]], ["add", "theorem", "exists_pos_rat_lt", ["real"]], ["add", "theorem", "exists_rat_btwn", ["real"]], ["add", "theorem", "exists_rat_gt", ["real"]], ["add", "theorem", "exists_rat_lt", ["real"]], ["add", "theorem", "exists_rat_near'", ["real"]], ["add", "theorem", "exists_rat_near", ["real"]], ["add", "theorem", "exists_sup", ["real"]], ["add", "theorem", "floor_add_int", ["real"]], ["add", "theorem", "floor_coe", ["real"]], ["add", "theorem", "floor_le", ["real"]], ["add", "theorem", "floor_lt", ["real"]], ["add", "theorem", "floor_mono", ["real"]], ["add", "theorem", "floor_nonneg", ["real"]], ["add", "theorem", "floor_sub_int", ["real"]], ["add", "theorem", "inv_mk", ["real"]], ["add", "theorem", "inv_zero", ["real"]], ["add", "theorem", "lb_le_Inf", ["real"]], ["add", "theorem", "le_Inf", ["real"]], ["add", "theorem", "le_Sup", ["real"]], ["add", "theorem", "le_ceil", ["real"]], ["add", "theorem", "le_floor", ["real"]], ["add", "theorem", "le_mk_of_forall_le", ["real"]], ["add", "theorem", "lt_Sup", ["real"]], ["add", "theorem", "lt_ceil", ["real"]], ["add", "theorem", "lt_floor_add_one", ["real"]], ["add", "theorem", "lt_succ_floor", ["real"]], ["add", "def", "mk", ["real"]], ["add", "theorem", "mk_add", ["real"]], ["add", "theorem", "mk_eq", ["real"]], ["add", "theorem", "mk_eq_mk", ["real"]], ["add", "theorem", "mk_eq_zero", ["real"]], ["add", "theorem", "mk_le", ["real"]], ["add", "theorem", "mk_le_of_forall_le", ["real"]], ["add", "theorem", "mk_lt", ["real"]], ["add", "theorem", "mk_mul", ["real"]], ["add", "theorem", "mk_neg", ["real"]], ["add", "theorem", "mk_pos", ["real"]], ["add", "def", "of_rat", ["real"]], ["add", "theorem", "of_rat_add", ["real"]], ["add", "theorem", "of_rat_eq_cast", ["real"]], ["add", "theorem", "of_rat_lt", ["real"]], ["add", "theorem", "of_rat_mul", ["real"]], ["add", "theorem", "of_rat_neg", ["real"]], ["add", "theorem", "of_rat_one", ["real"]], ["add", "theorem", "of_rat_sub", ["real"]], ["add", "theorem", "of_rat_zero", ["real"]], ["add", "theorem", "sub_one_lt_floor", ["real"]], ["add", "def", "real", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_preimage_eq_inter_range", ["set"]], ["del", "theorem", "image_preimage_eq_inter_rng", ["set"]], ["add", "theorem", "image_univ", ["set"]], ["mod", "theorem", "mem_range", ["set"]], ["mod", "theorem", "preimage_image_eq", ["set"]], ["add", "theorem", "prod_range_range_eq", ["set"]], ["del", "theorem", "quot_mk_image_univ_eq", ["set"]], ["add", "theorem", "quot_mk_range_eq", ["set"]], ["add", "theorem", "range_comp", ["set"]], ["del", "theorem", "range_compose", ["set"]], ["del", "theorem", "range_eq_image", ["set"]], ["add", "theorem", "range_subset_iff", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_preimage", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["mod", "theorem", "Inter_eq_sInter_image", ["set"]], ["mod", "theorem", "Union_eq_sUnion_image", ["set"]], ["add", "theorem", "bInter_subset_bInter_left", ["set"]], ["add", "theorem", "bUnion_subset_bUnion_left", ["set"]], ["add", "theorem", "subtype_val_range", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "def", "imp", ["Exists"]], ["del", "theorem", "exists_of_exists", []], ["del", "theorem", "forall_of_forall", []]]}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "bijective_iff_has_inverse", ["function"]], ["add", "theorem", "injective_iff_has_left_inverse", ["function"]], ["add", "theorem", "left_inverse_surj_inv", ["function"]], ["add", "theorem", "surjective_iff_has_right_inverse", ["function"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "ext", ["filter", "filter"]], ["add", "theorem", "filter_eq_iff", ["filter"]], ["add", "theorem", "le_def", ["filter"]], ["add", "theorem", "mem_Sup_sets", ["filter"]], ["del", "theorem", "mem_at_top_iff", ["filter"]], ["add", "theorem", "mem_at_top_sets", ["filter"]], ["mod", "theorem", "mem_bind_sets", ["filter"]], ["del", "theorem", "mem_lift'_iff", ["filter"]], ["add", "theorem", "mem_lift'_sets", ["filter"]], ["del", "theorem", "mem_lift_iff", ["filter"]], ["add", "theorem", "mem_lift_sets", ["filter"]], ["mod", "theorem", "mem_map", ["filter"]], ["add", "theorem", "mem_principal_self", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["del", "theorem", "mem_prod_iff", ["filter"]], ["add", "theorem", "mem_prod_sets", ["filter"]], ["add", "theorem", "mem_pure_sets", ["filter"]], ["mod", "theorem", "mem_return_sets", ["filter"]], ["add", "theorem", "mem_supr_sets", ["filter"]], ["del", "theorem", "mem_vmap", ["filter"]], ["add", "theorem", "mem_vmap_sets", ["filter"]], ["mod", "theorem", "monotone_map", ["filter"]], ["mod", "theorem", "monotone_vmap", ["filter"]], ["add", "theorem", "pure_neq_bot", ["filter"]], ["del", "theorem", "return_neq_bot", ["filter"]], ["add", "theorem", "comp", ["filter", "tendsto"]], ["add", "theorem", "prod_mk", ["filter", "tendsto"]], ["del", "theorem", "tendsto_compose", ["filter"]], ["add", "theorem", "tendsto_def", ["filter"]], ["add", "theorem", "tendsto_iff_vmap", ["filter"]], ["mod", "theorem", "tendsto_inf", ["filter"]], ["del", "theorem", "tendsto_inf_left", ["filter"]], ["mod", "theorem", "tendsto_infi'", ["filter"]], ["mod", "theorem", "tendsto_infi", ["filter"]], ["add", "theorem", "tendsto_le_left", ["filter"]], ["add", "theorem", "tendsto_le_right", ["filter"]], ["mod", "theorem", "tendsto_principal", ["filter"]], ["mod", "theorem", "tendsto_principal_principal", ["filter"]], ["del", "theorem", "tendsto_prod_mk", ["filter"]]]}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}]}, {"timestamp": 1516211632, "sha": "0ac694c0", "message": "fix(tactic/interactive): update to lean", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1516118930, "sha": "e11da6ec", "message": "feat(data/real): variants on archimedean property", "changes": [{"oldPath": "data/real.lean", "newPath": "data/real.lean", "changes": [["del", "theorem", "archimedean", ["NEW", "real"]], ["add", "theorem", "exists_int_gt", ["NEW", "real"]], ["add", "theorem", "exists_int_lt", ["NEW", "real"]], ["add", "theorem", "exists_nat_gt", ["NEW", "real"]], ["add", "theorem", "exists_rat_gt", ["NEW", "real"]], ["add", "theorem", "exists_rat_lt", ["NEW", "real"]]]}]}, {"timestamp": 1516080584, "sha": "d84dfb17", "message": "feat(data/real): completeness of the (new) real numbers", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["del", "theorem", "le_sub_iff_add_le", []], ["add", "theorem", "sub_add_sub_cancel'", []], ["del", "theorem", "sub_le_iff_le_add", []]]}, {"oldPath": "algebra/ordered_field.lean", "newPath": "algebra/ordered_field.lean", "changes": [["add", "theorem", "inv_le", []], ["del", "theorem", "inv_le_inv'", []], ["mod", "theorem", "inv_le_inv", []], ["add", "theorem", "inv_le_inv_of_le", []], ["add", "theorem", "inv_lt", []], ["add", "theorem", "le_inv", []], ["add", "theorem", "lt_inv", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["mod", "theorem", "le_neg_add_iff_add_le", []], ["add", "theorem", "le_sub", []], ["mod", "theorem", "le_sub_right_iff_add_le", []], ["mod", "theorem", "lt_sub_right_iff_add_lt", []], ["mod", "theorem", "sub_right_le_iff_le_add", []], ["mod", "theorem", "sub_right_lt_iff_lt_add", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "sub_one_lt", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "add_one_le_iff", ["int"]], ["add", "theorem", "exists_greatest_of_bdd", ["int"]], ["add", "theorem", "exists_least_of_bdd", ["int"]], ["add", "theorem", "le_sub_one_iff", ["int"]], ["add", "theorem", "lt_add_one_iff", ["int"]], ["mod", "theorem", "of_nat_add_neg_succ_of_nat_of_ge", ["int"]], ["mod", "theorem", "of_nat_add_neg_succ_of_nat_of_lt", ["int"]], ["add", "theorem", "sub_one_le_iff", ["int"]]]}, {"oldPath": "data/int/order.lean", "newPath": "data/int/order.lean", "changes": [["del", "theorem", "exists_greatest_of_bdd", ["int"]], ["del", "theorem", "exists_least_of_bdd", ["int"]]]}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": [["add", "theorem", "coe_nat_coe", ["pnat"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/real.lean", "newPath": "data/real.lean", "changes": [["add", "theorem", "Inf_le", ["NEW", "real"]], ["add", "theorem", "Sup_le", ["NEW", "real"]], ["add", "theorem", "Sup_le_ub", ["NEW", "real"]], ["add", "theorem", "ceil_add_int", ["NEW", "real"]], ["add", "theorem", "ceil_coe", ["NEW", "real"]], ["add", "theorem", "ceil_le", ["NEW", "real"]], ["add", "theorem", "ceil_lt_add_one", ["NEW", "real"]], ["add", "theorem", "ceil_mono", ["NEW", "real"]], ["add", "theorem", "ceil_sub_int", ["NEW", "real"]], ["add", "theorem", "exists_floor", ["NEW", "real"]], ["add", "theorem", "exists_sup", ["NEW", "real"]], ["add", "theorem", "floor_add_int", ["NEW", "real"]], ["add", "theorem", "floor_coe", ["NEW", "real"]], ["add", "theorem", "floor_le", ["NEW", "real"]], ["add", "theorem", "floor_lt", ["NEW", "real"]], ["add", "theorem", "floor_mono", ["NEW", "real"]], ["add", "theorem", "floor_sub_int", ["NEW", "real"]], ["add", "theorem", "lb_le_Inf", ["NEW", "real"]], ["add", "theorem", "le_Inf", ["NEW", "real"]], ["add", "theorem", "le_Sup", ["NEW", "real"]], ["add", "theorem", "le_ceil", ["NEW", "real"]], ["add", "theorem", "le_floor", ["NEW", "real"]], ["add", "theorem", "le_mk_of_forall_le", ["NEW", "real"]], ["add", "theorem", "lt_ceil", ["NEW", "real"]], ["add", "theorem", "lt_floor_add_one", ["NEW", "real"]], ["add", "theorem", "lt_succ_floor", ["NEW", "real"]], ["add", "theorem", "mk_le_of_forall_le", ["NEW", "real"]], ["add", "theorem", "sub_one_lt_floor", ["NEW", "real"]]]}]}, {"timestamp": 1516003199, "sha": "04cac958", "message": "feat(data/real): reals from first principles\nThis is beginning work on a simpler implementation of real numbers, based on Cauchy sequences, to help alleviate some of the issues we have seen with loading times and timeouts when working with real numbers. If everything goes according to plan, `analysis/real.lean` will be the development for the topology of the reals, but the initial construction will have no topology prerequisites.", "changes": [{"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "abs_pos_iff", []]]}, {"oldPath": null, "newPath": "algebra/linear_algebra/dimension.lean", "changes": [["add", "def", "dim", ["vector_space"]]]}, {"oldPath": "algebra/linear_algebra/linear_map_module.lean", "newPath": "algebra/linear_algebra/linear_map_module.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["add", "theorem", "of_to_bool_iff", ["bool"]]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "cast_id", ["int"]], ["add", "theorem", "eq_cast", ["int"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["mod", "theorem", "cast_id", ["nat"]], ["add", "theorem", "eq_cast'", ["nat"]], ["add", "theorem", "eq_cast", ["nat"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "eq_cast", ["rat"]], ["add", "theorem", "eq_cast_of_ne_zero", ["rat"]]]}, {"oldPath": null, "newPath": "data/real.lean", "changes": [["add", "theorem", "add_lt_add_iff_left", ["NEW", "real"]], ["add", "theorem", "archimedean", ["NEW", "real"]], ["add", "theorem", "exists_pos_rat_lt", ["NEW", "real"]], ["add", "theorem", "exists_rat_btwn", ["NEW", "real"]], ["add", "theorem", "exists_rat_near'", ["NEW", "real"]], ["add", "theorem", "exists_rat_near", ["NEW", "real"]], ["add", "theorem", "inv_mk", ["NEW", "real"]], ["add", "theorem", "inv_zero", ["NEW", "real"]], ["add", "def", "mk", ["NEW", "real"]], ["add", "theorem", "mk_add", ["NEW", "real"]], ["add", "theorem", "mk_eq", ["NEW", "real"]], ["add", "theorem", "mk_eq_mk", ["NEW", "real"]], ["add", "theorem", "mk_eq_zero", ["NEW", "real"]], ["add", "theorem", "mk_le", ["NEW", "real"]], ["add", "theorem", "mk_lt", ["NEW", "real"]], ["add", "theorem", "mk_mul", ["NEW", "real"]], ["add", "theorem", "mk_neg", ["NEW", "real"]], ["add", "theorem", "mk_pos", ["NEW", "real"]], ["add", "def", "of_rat", ["NEW", "real"]], ["add", "theorem", "of_rat_add", ["NEW", "real"]], ["add", "theorem", "of_rat_eq_cast", ["NEW", "real"]], ["add", "theorem", "of_rat_lt", ["NEW", "real"]], ["add", "theorem", "of_rat_mul", ["NEW", "real"]], ["add", "theorem", "of_rat_neg", ["NEW", "real"]], ["add", "theorem", "of_rat_one", ["NEW", "real"]], ["add", "theorem", "of_rat_sub", ["NEW", "real"]], ["add", "theorem", "of_rat_zero", ["NEW", "real"]], ["add", "def", "real", ["NEW"]], ["add", "theorem", "exists_forall_ge_and", []], ["add", "theorem", "abs_pos_of_not_lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "add_apply", ["rat", "cau_seq"]], ["add", "theorem", "add_lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "add_pos", ["rat", "cau_seq"]], ["add", "theorem", "bounded'", ["rat", "cau_seq"]], ["add", "theorem", "bounded", ["rat", "cau_seq"]], ["add", "theorem", "cauchy", ["rat", "cau_seq"]], ["add", "theorem", "cauchy₂", ["rat", "cau_seq"]], ["add", "theorem", "cauchy₃", ["rat", "cau_seq"]], ["add", "theorem", "ext", ["rat", "cau_seq"]], ["add", "def", "inv", ["rat", "cau_seq"]], ["add", "theorem", "inv_apply", ["rat", "cau_seq"]], ["add", "theorem", "inv_aux", ["rat", "cau_seq"]], ["add", "theorem", "inv_mul_cancel", ["rat", "cau_seq"]], ["add", "theorem", "le_antisymm", ["rat", "cau_seq"]], ["add", "theorem", "le_total", ["rat", "cau_seq"]], ["add", "def", "lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "lim_zero_congr", ["rat", "cau_seq"]], ["add", "theorem", "lt_irrefl", ["rat", "cau_seq"]], ["add", "theorem", "lt_of_eq_of_lt", ["rat", "cau_seq"]], ["add", "theorem", "lt_of_lt_of_eq", ["rat", "cau_seq"]], ["add", "theorem", "lt_trans", ["rat", "cau_seq"]], ["add", "theorem", "mul_apply", ["rat", "cau_seq"]], ["add", "theorem", "mul_lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "mul_pos", ["rat", "cau_seq"]], ["add", "theorem", "neg_apply", ["rat", "cau_seq"]], ["add", "theorem", "neg_lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "not_lim_zero_of_pos", ["rat", "cau_seq"]], ["add", "def", "of_eq", ["rat", "cau_seq"]], ["add", "def", "of_rat", ["rat", "cau_seq"]], ["add", "theorem", "of_rat_add", ["rat", "cau_seq"]], ["add", "theorem", "of_rat_apply", ["rat", "cau_seq"]], ["add", "theorem", "of_rat_lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "of_rat_mul", ["rat", "cau_seq"]], ["add", "theorem", "of_rat_neg", ["rat", "cau_seq"]], ["add", "theorem", "of_rat_pos", ["rat", "cau_seq"]], ["add", "theorem", "of_rat_sub", ["rat", "cau_seq"]], ["add", "theorem", "one_apply", ["rat", "cau_seq"]], ["add", "def", "pos", ["rat", "cau_seq"]], ["add", "theorem", "pos_add_lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "sub_apply", ["rat", "cau_seq"]], ["add", "theorem", "sub_lim_zero", ["rat", "cau_seq"]], ["add", "theorem", "trichotomy", ["rat", "cau_seq"]], ["add", "theorem", "zero_apply", ["rat", "cau_seq"]], ["add", "theorem", "zero_lim_zero", ["rat", "cau_seq"]], ["add", "def", "cau_seq", ["rat"]]]}, {"oldPath": "pending/default.lean", "newPath": "pending/default.lean", "changes": [["del", "theorem", "of_to_bool_iff", []]]}, {"oldPath": "tactic/alias.lean", "newPath": "tactic/alias.lean", "changes": []}]}, {"timestamp": 1515967190, "sha": "65db9668", "message": "feat(algebra/field): more division lemmas", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "single_le_sum", ["finset"]]]}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["del", "theorem", "abs_inv", []], ["add", "theorem", "add_div", []], ["add", "theorem", "div_div_cancel", []], ["add", "theorem", "div_div_div_cancel_right", []], ["add", "theorem", "div_eq_div_iff", []], ["add", "theorem", "div_eq_mul_inv", []], ["add", "theorem", "div_eq_zero_iff", []], ["del", "theorem", "div_le_iff_le_mul_of_pos", []], ["add", "theorem", "div_mul_comm", []], ["add", "theorem", "div_mul_div_cancel", []], ["add", "theorem", "div_ne_zero", []], ["add", "theorem", "div_ne_zero_iff", []], ["add", "theorem", "div_neg", []], ["add", "theorem", "div_right_comm", []], ["add", "theorem", "div_right_inj", []], ["mod", "theorem", "inv_comm_of_comm", ["division_ring"]], ["del", "theorem", "inv_div", ["division_ring"]], ["add", "theorem", "inv_eq_iff", ["division_ring"]], ["add", "theorem", "inv_inj", ["division_ring"]], ["del", "theorem", "neg_inv", ["division_ring"]], ["add", "theorem", "divp_eq_div", []], ["add", "theorem", "divp_mk0", []], ["add", "theorem", "div_div_cancel", ["field"]], ["add", "theorem", "div_div_div_cancel_right", ["field"]], ["add", "theorem", "div_mul_div_cancel", ["field"]], ["add", "theorem", "div_right_comm", ["field"]], ["add", "theorem", "inv_add_inv", []], ["add", "theorem", "inv_div", []], ["add", "theorem", "inv_div_left", []], ["del", "theorem", "inv_le_inv", []], ["del", "theorem", "inv_lt_one", []], ["del", "theorem", "inv_neg", []], ["del", "theorem", "inv_pos", []], ["add", "theorem", "inv_sub_inv", []], ["del", "theorem", "ivl_stretch", []], ["del", "theorem", "ivl_translate", []], ["del", "theorem", "le_div_iff_mul_le_of_pos", []], ["del", "theorem", "lt_div_iff", []], ["add", "theorem", "mul_comm_div", []], ["add", "theorem", "mul_div_comm", []], ["add", "theorem", "mul_div_right_comm", []], ["add", "theorem", "neg_inv", []], ["del", "theorem", "one_lt_inv", []], ["add", "theorem", "sub_div", []], ["add", "theorem", "inv_eq_inv", ["units"]], ["add", "def", "mk0", ["units"]], ["add", "theorem", "mk0_inv", ["units"]], ["add", "theorem", "mk0_val", ["units"]], ["add", "theorem", "ne_zero", ["units"]]]}, {"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "def", "abs_add", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "def", "divp", []], ["add", "theorem", "divp_assoc", []], ["add", "theorem", "divp_eq_one", []], ["add", "theorem", "divp_mul_cancel", []], ["add", "theorem", "divp_one", []], ["add", "theorem", "divp_right_inj", []], ["add", "theorem", "divp_self", []], ["add", "theorem", "mul_divp_cancel", []], ["mod", "theorem", "mul_left_inj", []], ["mod", "theorem", "mul_right_inj", []], ["add", "theorem", "one_divp", []], ["add", "theorem", "ext", ["units"]], ["add", "theorem", "inv_coe", ["units"]], ["add", "theorem", "inv_mul", ["units"]], ["add", "theorem", "inv_mul_cancel_left", ["units"]], ["add", "theorem", "inv_mul_cancel_right", ["units"]], ["add", "theorem", "mul_coe", ["units"]], ["add", "theorem", "mul_inv", ["units"]], ["add", "theorem", "mul_inv_cancel_left", ["units"]], ["add", "theorem", "mul_inv_cancel_right", ["units"]], ["add", "theorem", "mul_left_inj", ["units"]], ["add", "theorem", "mul_right_inj", ["units"]], ["add", "theorem", "one_coe", ["units"]], ["add", "theorem", "val_coe", ["units"]], ["add", "structure", "units", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": [["del", "theorem", "is_submodule_span", []]]}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "exists_ge_of_linear", []]]}, {"oldPath": null, "newPath": "algebra/ordered_field.lean", "changes": [["add", "theorem", "abs_inv", []], ["add", "theorem", "div_le_div_left", []], ["add", "theorem", "div_le_div_right", []], ["add", "theorem", "div_le_div_right_of_neg", []], ["add", "theorem", "div_le_iff", []], ["add", "theorem", "div_le_iff_of_neg", []], ["add", "theorem", "div_le_one_iff_le", []], ["add", "theorem", "div_lt_div'", []], ["add", "theorem", "div_lt_div", []], ["add", "theorem", "div_lt_div_iff", []], ["add", "theorem", "div_lt_div_left", []], ["add", "theorem", "div_lt_div_right", []], ["add", "theorem", "div_lt_div_right_of_neg", []], ["add", "theorem", "div_lt_iff", []], ["add", "theorem", "div_lt_iff_of_neg", []], ["add", "theorem", "div_lt_one_iff_lt", []], ["add", "def", "div_nonneg", []], ["add", "def", "div_pos", []], ["add", "def", "half_lt_self", []], ["add", "theorem", "half_pos", []], ["add", "theorem", "inv_le_inv'", []], ["add", "theorem", "inv_le_inv", []], ["add", "theorem", "inv_lt_inv", []], ["add", "theorem", "inv_lt_one", []], ["add", "theorem", "inv_neg", []], ["add", "theorem", "inv_pos", []], ["add", "theorem", "ivl_stretch", []], ["add", "theorem", "ivl_translate", []], ["add", "theorem", "le_div_iff", []], ["add", "theorem", "lt_div_iff", []], ["add", "theorem", "one_div_le_one_div", []], ["add", "theorem", "one_div_lt_one_div", []], ["add", "theorem", "one_le_div_iff_le", []], ["add", "theorem", "one_lt_div_iff_lt", []], ["add", "theorem", "one_lt_inv", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "lt_add_one", []], ["mod", "theorem", "one_lt_two", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["del", "theorem", "add_div", []], ["del", "theorem", "div_eq_mul_inv", []], ["del", "theorem", "neg_inv", []], ["del", "theorem", "ext", ["units"]], ["del", "theorem", "inv_coe", ["units"]], ["del", "theorem", "inv_mul", ["units"]], ["del", "theorem", "mul_coe", ["units"]], ["del", "theorem", "mul_inv", ["units"]], ["del", "theorem", "one_coe", ["units"]], ["del", "theorem", "val_coe", ["units"]], ["del", "structure", "units", []]]}]}, {"timestamp": 1515951373, "sha": "0d6d12aa", "message": "feat(tactic/interactive): replace tactic", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1515894784, "sha": "edde6f57", "message": "feat(tactic/ring): use `ring` for rewriting into pretty print format", "changes": [{"oldPath": "tactic/basic.lean", "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": [["add", "theorem", "add_neg_eq_sub", ["tactic", "ring"]], ["add", "theorem", "horner_def'", ["tactic", "ring"]], ["add", "theorem", "mul_assoc_rev", ["tactic", "ring"]], ["add", "inductive", "normalize_mode", ["tactic", "ring"]], ["add", "theorem", "pow_add_rev", ["tactic", "ring"]], ["add", "theorem", "pow_add_rev_right", ["tactic", "ring"]]]}]}, {"timestamp": 1515872621, "sha": "c75b0721", "message": "fix(*): update to lean", "changes": [{"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["del", "theorem", "none_ne_some", ["option"]], ["mod", "theorem", "some_inj", ["option"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "tactic/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": []}]}, {"timestamp": 1515838966, "sha": "df7175f3", "message": "fix(tactic/ring): bugfix", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": []}]}, {"timestamp": 1515817967, "sha": "341fd517", "message": "fix(tactic/ring): bugfix", "changes": [{"oldPath": "tactic/ring.lean", "newPath": "tactic/ring.lean", "changes": [["mod", "theorem", "horner_add_horner_eq", ["tactic", "ring"]]]}]}, {"timestamp": 1515813935, "sha": "2e2d89ba", "message": "feat(tactic/ring): tactic for ring equality", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["mod", "theorem", "smul_one", ["add_monoid"]], ["mod", "theorem", "pow_one", []]]}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": [["mod", "def", "to_pnat", ["nat"]]]}, {"oldPath": null, "newPath": "tactic/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/ring.lean", "changes": [["add", "def", "horner", []], ["add", "theorem", "const_add_horner", ["tactic", "ring"]], ["add", "theorem", "horner_add_const", ["tactic", "ring"]], ["add", "theorem", "horner_add_horner_eq", ["tactic", "ring"]], ["add", "theorem", "horner_add_horner_gt", ["tactic", "ring"]], ["add", "theorem", "horner_add_horner_lt", ["tactic", "ring"]], ["add", "theorem", "horner_atom", ["tactic", "ring"]], ["add", "theorem", "horner_const_mul", ["tactic", "ring"]], ["add", "theorem", "horner_horner", ["tactic", "ring"]], ["add", "theorem", "horner_mul_const", ["tactic", "ring"]], ["add", "theorem", "horner_mul_horner", ["tactic", "ring"]], ["add", "theorem", "horner_mul_horner_zero", ["tactic", "ring"]], ["add", "theorem", "horner_neg", ["tactic", "ring"]], ["add", "theorem", "horner_pow", ["tactic", "ring"]], ["add", "theorem", "subst_into_neg", ["tactic", "ring"]], ["add", "theorem", "subst_into_pow", ["tactic", "ring"]], ["add", "theorem", "zero_horner", ["tactic", "ring"]]]}]}, {"timestamp": 1515762528, "sha": "c39b43fb", "message": "feat(analysis/metric_space): sup metric for product of metric spaces", "changes": [{"oldPath": "algebra/linear_algebra/multivariate_polynomial.lean", "newPath": "algebra/linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "theorem", "dist_le_zero_iff", []]]}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "theorem", "prod_uniformity", []]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["add", "theorem", "ext", ["prod"]], ["mod", "theorem", "eta", ["prod", "mk"]]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["mod", "theorem", "infi_inf_eq", ["lattice"]]]}]}, {"timestamp": 1515712952, "sha": "1dddcf69", "message": "doc(*): blurbs galore\nDocument all `def`, `class`, and `inductive` that are reasonably public-facing", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/linear_map_module.lean", "newPath": "algebra/linear_algebra/linear_map_module.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/multivariate_polynomial.lean", "newPath": "algebra/linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/quotient_module.lean", "newPath": "algebra/linear_algebra/quotient_module.lean", "changes": []}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": []}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "def", "continuous", []], ["mod", "theorem", "is_open_induced", []]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "tendsto_nhds", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": [["add", "def", "cauchy", []]]}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "data/analysis/topology.lean", "newPath": "data/analysis/topology.lean", "changes": []}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["mod", "theorem", "comap_domain_apply", ["finsupp"]], ["mod", "theorem", "comap_domain_zero", ["finsupp"]], ["mod", "theorem", "one_def", ["finsupp"]], ["mod", "theorem", "smul_apply", ["finsupp"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/fp/basic.lean", "newPath": "data/fp/basic.lean", "changes": []}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": [["mod", "def", "modify", ["bucket_array"]], ["mod", "def", "write", ["bucket_array"]], ["mod", "def", "of_list", ["hash_map"]]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": []}, {"oldPath": "data/nat/dist.lean", "newPath": "data/nat/dist.lean", "changes": []}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": []}, {"oldPath": "data/nat/modeq.lean", "newPath": "data/nat/modeq.lean", "changes": []}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": []}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": []}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": [["mod", "theorem", "bit_one", ["snum"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": []}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": []}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": []}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["mod", "theorem", "fst_swap", ["prod"]], ["mod", "theorem", "snd_swap", ["prod"]], ["mod", "def", "swap", ["prod"]], ["mod", "theorem", "swap_swap", ["prod"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": [["mod", "def", "destruct", ["computation"]], ["add", "theorem", "eq_thinkN'", ["computation"]], ["del", "def", "eq_thinkN'", ["computation"]], ["add", "theorem", "eq_thinkN", ["computation"]], ["del", "def", "eq_thinkN", ["computation"]], ["mod", "def", "equiv", ["computation"]], ["add", "theorem", "exists_results_of_mem", ["computation"]], ["del", "def", "exists_results_of_mem", ["computation"]], ["add", "theorem", "get_eq_of_mem", ["computation"]], ["del", "def", "get_eq_of_mem", ["computation"]], ["add", "theorem", "get_eq_of_promises", ["computation"]], ["del", "def", "get_eq_of_promises", ["computation"]], ["mod", "theorem", "get_equiv", ["computation"]], ["add", "theorem", "get_mem", ["computation"]], ["del", "def", "get_mem", ["computation"]], ["add", "theorem", "get_promises", ["computation"]], ["del", "def", "get_promises", ["computation"]], ["mod", "theorem", "lift_eq_iff_equiv", ["computation"]], ["add", "theorem", "equiv", ["computation", "lift_rel"]], ["del", "def", "equiv", ["computation", "lift_rel"]], ["add", "theorem", "imp", ["computation", "lift_rel"]], ["del", "def", "imp", ["computation", "lift_rel"]], ["add", "theorem", "refl", ["computation", "lift_rel"]], ["del", "def", "refl", ["computation", "lift_rel"]], ["add", "theorem", "symm", ["computation", "lift_rel"]], ["del", "def", "symm", ["computation", "lift_rel"]], ["add", "theorem", "trans", ["computation", "lift_rel"]], ["del", "def", "trans", ["computation", "lift_rel"]], ["add", "theorem", "mem_of_get_eq", ["computation"]], ["del", "def", "mem_of_get_eq", ["computation"]], ["add", "theorem", "mem_of_promises", ["computation"]], ["del", "def", "mem_of_promises", ["computation"]], ["mod", "def", "orelse", ["computation"]], ["mod", "theorem", "orelse_ret", ["computation"]], ["mod", "theorem", "orelse_think", ["computation"]], ["mod", "theorem", "promises_congr", ["computation"]], ["add", "theorem", "rel_of_lift_rel", ["computation"]], ["del", "def", "rel_of_lift_rel", ["computation"]], ["add", "theorem", "len_unique", ["computation", "results"]], ["del", "def", "len_unique", ["computation", "results"]], ["add", "theorem", "length", ["computation", "results"]], ["del", "def", "length", ["computation", "results"]], ["add", "theorem", "mem", ["computation", "results"]], ["del", "def", "mem", ["computation", "results"]], ["add", "theorem", "terminates", ["computation", "results"]], ["del", "def", "terminates", ["computation", "results"]], ["add", "theorem", "val_unique", ["computation", "results"]], ["del", "def", "val_unique", ["computation", "results"]], ["add", "theorem", "results_of_terminates'", ["computation"]], ["del", "def", "results_of_terminates'", ["computation"]], ["add", "theorem", "results_of_terminates", ["computation"]], ["del", "def", "results_of_terminates", ["computation"]], ["mod", "theorem", "ret_orelse", ["computation"]], ["mod", "theorem", "terminates_congr", ["computation"]], ["add", "theorem", "terminates_of_lift_rel", ["computation"]], ["del", "def", "terminates_of_lift_rel", ["computation"]]]}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": [["add", "theorem", "corec_eq", ["seq"]], ["del", "def", "corec_eq", ["seq"]], ["add", "theorem", "mem_append_left", ["seq"]], ["del", "def", "mem_append_left", ["seq"]], ["add", "theorem", "of_list_append", ["seq"]], ["del", "def", "of_list_append", ["seq"]], ["add", "theorem", "of_list_cons", ["seq"]], ["del", "def", "of_list_cons", ["seq"]], ["add", "theorem", "of_list_nil", ["seq"]], ["del", "def", "of_list_nil", ["seq"]], ["add", "theorem", "of_mem_append", ["seq"]], ["del", "def", "of_mem_append", ["seq"]], ["add", "theorem", "of_stream_append", ["seq"]], ["del", "def", "of_stream_append", ["seq"]], ["add", "theorem", "of_stream_cons", ["seq"]], ["del", "def", "of_stream_cons", ["seq"]], ["mod", "def", "omap", ["seq"]]]}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": [["mod", "def", "bisim_o", ["wseq"]], ["mod", "def", "aux", ["wseq", "destruct_append"]], ["mod", "def", "aux", ["wseq", "destruct_join"]], ["mod", "def", "aux", ["wseq", "drop"]], ["add", "theorem", "aux_none", ["wseq", "drop"]], ["del", "def", "aux_none", ["wseq", "drop"]], ["add", "theorem", "join_cons", ["wseq"]], ["del", "def", "join_cons", ["wseq"]], ["add", "theorem", "join_nil", ["wseq"]], ["del", "def", "join_nil", ["wseq"]], ["add", "theorem", "join_think", ["wseq"]], ["del", "def", "join_think", ["wseq"]], ["add", "theorem", "equiv", ["wseq", "lift_rel"]], ["del", "def", "equiv", ["wseq", "lift_rel"]], ["add", "theorem", "refl", ["wseq", "lift_rel"]], ["del", "def", "refl", ["wseq", "lift_rel"]], ["add", "theorem", "swap", ["wseq", "lift_rel"]], ["del", "def", "swap", ["wseq", "lift_rel"]], ["add", "theorem", "swap_lem", ["wseq", "lift_rel"]], ["del", "def", "swap_lem", ["wseq", "lift_rel"]], ["add", "theorem", "symm", ["wseq", "lift_rel"]], ["del", "def", "symm", ["wseq", "lift_rel"]], ["add", "theorem", "trans", ["wseq", "lift_rel"]], ["del", "def", "trans", ["wseq", "lift_rel"]], ["add", "theorem", "lift_rel_cons", ["wseq"]], ["del", "def", "lift_rel_cons", ["wseq"]], ["add", "theorem", "lift_rel_nil", ["wseq"]], ["del", "def", "lift_rel_nil", ["wseq"]], ["add", "theorem", "swap", ["wseq", "lift_rel_o"]], ["del", "def", "swap", ["wseq", "lift_rel_o"]], ["mod", "def", "lift_rel_o", ["wseq"]], ["add", "theorem", "lift_rel_think_left", ["wseq"]], ["del", "def", "lift_rel_think_left", ["wseq"]], ["add", "theorem", "lift_rel_think_right", ["wseq"]], ["del", "def", "lift_rel_think_right", ["wseq"]], ["add", "theorem", "mem_append_left", ["wseq"]], ["del", "def", "mem_append_left", ["wseq"]], ["add", "theorem", "of_list_cons", ["wseq"]], ["del", "def", "of_list_cons", ["wseq"]], ["add", "theorem", "of_list_nil", ["wseq"]], ["del", "def", "of_list_nil", ["wseq"]], ["add", "theorem", "of_mem_append", ["wseq"]], ["del", "def", "of_mem_append", ["wseq"]], ["mod", "def", "aux", ["wseq", "tail"]], ["add", "theorem", "to_list'_cons", ["wseq"]], ["del", "def", "to_list'_cons", ["wseq"]], ["add", "theorem", "to_list'_map", ["wseq"]], ["del", "def", "to_list'_map", ["wseq"]], ["add", "theorem", "to_list'_nil", ["wseq"]], ["del", "def", "to_list'_nil", ["wseq"]], ["add", "theorem", "to_list'_think", ["wseq"]], ["del", "def", "to_list'_think", ["wseq"]], ["add", "theorem", "to_list_cons", ["wseq"]], ["del", "def", "to_list_cons", ["wseq"]], ["add", "theorem", "to_list_nil", ["wseq"]], ["del", "def", "to_list_nil", ["wseq"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "mem_image_elim", ["set"]], ["del", "def", "mem_image_elim", ["set"]], ["add", "theorem", "mem_image_elim_on", ["set"]], ["del", "def", "mem_image_elim_on", ["set"]]]}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "data/set/function.lean", "newPath": "data/set/function.lean", "changes": [["mod", "def", "maps_to", ["set"]], ["add", "theorem", "maps_to_univ", ["set"]], ["del", "theorem", "maps_to_univ_univ", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": []}, {"oldPath": "data/sum.lean", "newPath": "data/sum.lean", "changes": [["mod", "def", "swap", ["sum"]]]}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": []}, {"oldPath": "number_theory/dioph.lean", "newPath": "number_theory/dioph.lean", "changes": [["add", "theorem", "proj_dioph_of_nat", ["dioph"]], ["del", "def", "proj_dioph_of_nat", ["dioph"]], ["mod", "def", "add", ["fin2"]], ["mod", "def", "elim0", ["fin2"]], ["mod", "def", "insert_perm", ["fin2"]], ["mod", "def", "left", ["fin2"]], ["mod", "def", "of_nat'", ["fin2"]], ["mod", "def", "opt_of_nat", ["fin2"]], ["mod", "def", "remap_left", ["fin2"]], ["add", "def", "to_nat", ["fin2"]], ["mod", "theorem", "eq_nat_abs_iff_mul", ["int"]], ["mod", "def", "list_all", []], ["mod", "def", "cons", ["option"]], ["add", "theorem", "cons_head_tail", ["option"]], ["del", "def", "cons_head_tail", ["option"]], ["del", "def", "pow", ["poly"]], ["mod", "def", "join", ["sum"]], ["mod", "def", "append", ["vector3"]], ["mod", "theorem", "append_add", ["vector3"]], ["mod", "theorem", "append_cons", ["vector3"]], ["mod", "theorem", "append_insert", ["vector3"]], ["mod", "theorem", "append_left", ["vector3"]], ["mod", "theorem", "append_nil", ["vector3"]], ["mod", "def", "cons", ["vector3"]], ["mod", "def", "cons_elim", ["vector3"]], ["mod", "theorem", "cons_elim_cons", ["vector3"]], ["mod", "theorem", "cons_fs", ["vector3"]], ["mod", "theorem", "cons_fz", ["vector3"]], ["mod", "theorem", "cons_head_tail", ["vector3"]], ["mod", "theorem", "eq_nil", ["vector3"]], ["mod", "def", "head", ["vector3"]], ["mod", "def", "insert", ["vector3"]], ["mod", "theorem", "insert_fs", ["vector3"]], ["mod", "theorem", "insert_fz", ["vector3"]], ["mod", "def", "nil", ["vector3"]], ["mod", "def", "nil_elim", ["vector3"]], ["mod", "def", "nth", ["vector3"]], ["mod", "def", "of_fn", ["vector3"]], ["mod", "theorem", "rec_on_cons", ["vector3"]], ["mod", "theorem", "rec_on_nil", ["vector3"]], ["mod", "def", "tail", ["vector3"]]]}, {"oldPath": "number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": [["add", "theorem", "is_pell_conj", ["pell"]], ["del", "def", "is_pell_conj", ["pell"]], ["add", "theorem", "is_pell_mul", ["pell"]], ["del", "def", "is_pell_mul", ["pell"]], ["add", "theorem", "is_pell_nat", ["pell"]], ["del", "def", "is_pell_nat", ["pell"]], ["add", "theorem", "is_pell_norm", ["pell"]], ["del", "def", "is_pell_norm", ["pell"]], ["add", "theorem", "is_pell_one", ["pell"]], ["del", "def", "is_pell_one", ["pell"]], ["add", "theorem", "is_pell_pell_zd", ["pell"]], ["del", "def", "is_pell_pell_zd", ["pell"]], ["add", "theorem", "n_lt_a_pow", ["pell"]], ["del", "def", "n_lt_a_pow", ["pell"]], ["mod", "def", "pell", ["pell"]], ["add", "theorem", "xn_ge_a_pow", ["pell"]], ["del", "def", "xn_ge_a_pow", ["pell"]], ["add", "theorem", "nonnegg_cases_left", ["zsqrtd"]], ["del", "def", "nonnegg_cases_left", ["zsqrtd"]], ["add", "theorem", "nonnegg_cases_right", ["zsqrtd"]], ["del", "def", "nonnegg_cases_right", ["zsqrtd"]], ["add", "theorem", "nonnegg_comm", ["zsqrtd"]], ["del", "def", "nonnegg_comm", ["zsqrtd"]], ["add", "theorem", "nonnegg_neg_pos", ["zsqrtd"]], ["del", "def", "nonnegg_neg_pos", ["zsqrtd"]], ["add", "theorem", "nonnegg_pos_neg", ["zsqrtd"]], ["del", "def", "nonnegg_pos_neg", ["zsqrtd"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "theorem", "swap", ["is_irrefl"]], ["del", "def", "swap", ["is_irrefl"]], ["add", "theorem", "is_irrefl_of_is_asymm", []], ["del", "def", "is_irrefl_of_is_asymm", []], ["add", "theorem", "swap", ["is_strict_order"]], ["del", "def", "swap", ["is_strict_order"]], ["add", "theorem", "swap", ["is_strict_total_order'"]], ["del", "def", "swap", ["is_strict_total_order'"]], ["add", "theorem", "is_strict_weak_order_of_is_order_connected", []], ["del", "def", "is_strict_weak_order_of_is_order_connected", []], ["add", "theorem", "swap", ["is_trans"]], ["del", "def", "swap", ["is_trans"]], ["add", "theorem", "swap", ["is_trichotomous"]], ["del", "def", "swap", ["is_trichotomous"]]]}, {"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": []}, {"oldPath": "order/complete_boolean_algebra.lean", "newPath": "order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_le", ["lattice"]], ["mod", "theorem", "le_Sup", ["lattice"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "def", "directed", []], ["mod", "def", "directed_on", []], ["mod", "theorem", "lift_le", ["filter"]], ["mod", "def", "tendsto", ["filter"]], ["del", "def", "upwards", []]]}, {"oldPath": "order/fixed_points.lean", "newPath": "order/fixed_points.lean", "changes": []}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "set_theory/cofinality.lean", "newPath": "set_theory/cofinality.lean", "changes": [["mod", "theorem", "lt_cof_power", ["cardinal"]]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["add", "theorem", "unique_of_extensional", ["initial_seg"]], ["del", "def", "unique_of_extensional", ["initial_seg"]], ["mod", "theorem", "collapse_apply", ["order_embedding"]], ["mod", "def", "typein", ["ordinal"]], ["mod", "def", "cod_restrict", ["principal_seg"]]]}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}, {"oldPath": "set_theory/zfc.lean", "newPath": "set_theory/zfc.lean", "changes": [["mod", "def", "Class_to_Cong", ["Class"]], ["mod", "def", "Cong_to_Class", ["Class"]], ["mod", "def", "Union", ["Class"]], ["mod", "theorem", "Union_hom", ["Class"]], ["mod", "theorem", "diff_hom", ["Class"]], ["mod", "theorem", "empty_hom", ["Class"]], ["mod", "def", "fval", ["Class"]], ["mod", "theorem", "fval_ex", ["Class"]], ["mod", "theorem", "insert_hom", ["Class"]], ["mod", "theorem", "inter_hom", ["Class"]], ["mod", "def", "iota", ["Class"]], ["mod", "theorem", "iota_ex", ["Class"]], ["mod", "theorem", "iota_val", ["Class"]], ["mod", "theorem", "mem_hom_left", ["Class"]], ["mod", "theorem", "mem_hom_right", ["Class"]], ["mod", "theorem", "mem_univ", ["Class"]], ["mod", "theorem", "inj", ["Class", "of_Set"]], ["mod", "def", "of_Set", ["Class"]], ["mod", "def", "powerset", ["Class"]], ["mod", "theorem", "powerset_hom", ["Class"]], ["mod", "theorem", "sep_hom", ["Class"]], ["mod", "theorem", "subset_hom", ["Class"]], ["mod", "def", "to_Set", ["Class"]], ["mod", "theorem", "to_Set_of_Set", ["Class"]], ["mod", "theorem", "union_hom", ["Class"]], ["mod", "def", "univ", ["Class"]], ["mod", "def", "Union", ["Set"]], ["mod", "theorem", "Union_lem", ["Set"]], ["mod", "theorem", "Union_singleton", ["Set"]], ["add", "theorem", "choice_is_func", ["Set"]], ["del", "def", "choice_is_func", ["Set"]], ["add", "theorem", "choice_mem", ["Set"]], ["del", "def", "choice_mem", ["Set"]], ["add", "theorem", "choice_mem_aux", ["Set"]], ["del", "def", "choice_mem_aux", ["Set"]], ["mod", "def", "empty", ["Set"]], ["add", "theorem", "eq_empty", ["Set"]], ["del", "def", "eq_empty", ["Set"]], ["add", "theorem", "ext", ["Set"]], ["del", "def", "ext", ["Set"]], ["add", "theorem", "ext_iff", ["Set"]], ["del", "def", "ext_iff", ["Set"]], ["mod", "def", "funs", ["Set"]], ["add", "theorem", "mk", ["Set", "image"]], ["del", "def", "mk", ["Set", "image"]], ["mod", "def", "image", ["Set"]], ["mod", "theorem", "induction_on", ["Set"]], ["mod", "def", "is_func", ["Set"]], ["add", "theorem", "map_fval", ["Set"]], ["del", "def", "map_fval", ["Set"]], ["mod", "theorem", "map_is_func", ["Set"]], ["mod", "theorem", "map_unique", ["Set"]], ["mod", "def", "mem", ["Set"]], ["mod", "theorem", "mem_Union", ["Set"]], ["mod", "theorem", "mem_diff", ["Set"]], ["add", "theorem", "mem_empty", ["Set"]], ["del", "def", "mem_empty", ["Set"]], ["add", "theorem", "mem_funs", ["Set"]], ["del", "def", "mem_funs", ["Set"]], ["add", "theorem", "mem_image", ["Set"]], ["del", "def", "mem_image", ["Set"]], ["add", "theorem", "mem_insert", ["Set"]], ["del", "def", "mem_insert", ["Set"]], ["mod", "theorem", "mem_inter", ["Set"]], ["mod", "theorem", "mem_map", ["Set"]], ["mod", "theorem", "mem_pair", ["Set"]], ["mod", "theorem", "mem_pair_sep", ["Set"]], ["mod", "theorem", "mem_powerset", ["Set"]], ["add", "theorem", "mem_prod", ["Set"]], ["del", "def", "mem_prod", ["Set"]], ["mod", "theorem", "mem_sep", ["Set"]], ["mod", "theorem", "mem_singleton'", ["Set"]], ["mod", "theorem", "mem_singleton", ["Set"]], ["mod", "theorem", "mem_union", ["Set"]], ["add", "def", "mk", ["Set"]], ["add", "theorem", "mk_eq", ["Set"]], ["mod", "def", "omega", ["Set"]], ["mod", "theorem", "omega_succ", ["Set"]], ["mod", "theorem", "omega_zero", ["Set"]], ["mod", "def", "pair", ["Set"]], ["add", "theorem", "pair_inj", ["Set"]], ["del", "def", "pair_inj", ["Set"]], ["add", "theorem", "pair_mem_prod", ["Set"]], ["del", "def", "pair_mem_prod", ["Set"]], ["mod", "def", "pair_sep", ["Set"]], ["mod", "def", "powerset", ["Set"]], ["mod", "def", "prod", ["Set"]], ["mod", "theorem", "regularity", ["Set"]], ["mod", "theorem", "singleton_inj", ["Set"]], ["mod", "theorem", "subset_iff", ["Set"]], ["mod", "def", "to_set", ["Set"]], ["mod", "def", "Union", ["pSet"]], ["mod", "def", "equiv", ["pSet", "arity"]], ["add", "theorem", "eq", ["pSet", "definable"]], ["del", "def", "eq", ["pSet", "definable"]], ["mod", "def", "eq_mk", ["pSet", "definable"]], ["mod", "def", "resp", ["pSet", "definable"]], ["mod", "inductive", "definable", ["pSet"]], ["mod", "def", "embed", ["pSet"]], ["add", "theorem", "eq", ["pSet", "equiv"]], ["del", "def", "eq", ["pSet", "equiv"]], ["add", "theorem", "euc", ["pSet", "equiv"]], ["del", "def", "euc", ["pSet", "equiv"]], ["add", "theorem", "ext", ["pSet", "equiv"]], ["del", "def", "ext", ["pSet", "equiv"]], ["add", "theorem", "refl", ["pSet", "equiv"]], ["del", "def", "refl", ["pSet", "equiv"]], ["add", "theorem", "symm", ["pSet", "equiv"]], ["del", "def", "symm", ["pSet", "equiv"]], ["add", "theorem", "trans", ["pSet", "equiv"]], ["del", "def", "trans", ["pSet", "equiv"]], ["mod", "def", "equiv", ["pSet"]], ["mod", "def", "func", ["pSet"]], ["mod", "def", "image", ["pSet"]], ["add", "theorem", "lift_mem_embed", ["pSet"]], ["del", "def", "lift_mem_embed", ["pSet"]], ["add", "theorem", "congr_left", ["pSet", "mem"]], ["del", "def", "congr_left", ["pSet", "mem"]], ["add", "theorem", "congr_right", ["pSet", "mem"]], ["del", "def", "congr_right", ["pSet", "mem"]], ["add", "theorem", "ext", ["pSet", "mem"]], ["del", "def", "ext", ["pSet", "mem"]], ["add", "theorem", "mk", ["pSet", "mem"]], ["del", "def", "mk", ["pSet", "mem"]], ["mod", "def", "mem", ["pSet"]], ["mod", "theorem", "mem_Union", ["pSet"]], ["add", "theorem", "mem_empty", ["pSet"]], ["del", "def", "mem_empty", ["pSet"]], ["add", "theorem", "mem_image", ["pSet"]], ["del", "def", "mem_image", ["pSet"]], ["mod", "theorem", "mem_powerset", ["pSet"]], ["add", "theorem", "mk_type_func", ["pSet"]], ["del", "def", "mk_type_func", ["pSet"]], ["mod", "def", "of_nat", ["pSet"]], ["mod", "def", "omega", ["pSet"]], ["mod", "def", "powerset", ["pSet"]], ["mod", "def", "equiv", ["pSet", "resp"]], ["add", "theorem", "euc", ["pSet", "resp"]], ["del", "def", "euc", ["pSet", "resp"]], ["mod", "def", "eval", ["pSet", "resp"]], ["mod", "def", "eval_aux", ["pSet", "resp"]], ["mod", "def", "eval_val", ["pSet", "resp"]], ["mod", "def", "f", ["pSet", "resp"]], ["add", "theorem", "refl", ["pSet", "resp"]], ["del", "def", "refl", ["pSet", "resp"]], ["mod", "def", "resp", ["pSet"]], ["add", "theorem", "congr_left", ["pSet", "subset"]], ["del", "def", "congr_left", ["pSet", "subset"]], ["add", "theorem", "congr_right", ["pSet", "subset"]], ["del", "def", "congr_right", ["pSet", "subset"]], ["mod", "def", "to_set", ["pSet"]], ["mod", "def", "type", ["pSet"]]]}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}]}, {"timestamp": 1515687968, "sha": "2ffd72ce", "message": "refactor(order/basic): remove \"increasing/decreasing\" unusual defs", "changes": [{"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "def", "dual", ["partial_order"]], ["del", "def", "partial_order_dual", []], ["add", "def", "dual", ["preorder"]], ["del", "def", "preorder_dual", []]]}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": [["mod", "theorem", "decreasing_l_u", ["galois_connection"]], ["mod", "theorem", "increasing_u_l", ["galois_connection"]], ["add", "def", "kern_image", ["set"]]]}]}, {"timestamp": 1515687681, "sha": "09e08991", "message": "fix(analysis/ennreal): fix long-running proofs", "changes": [{"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["mod", "theorem", "abs_le", []], ["mod", "theorem", "abs_lt", []]]}, {"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["add", "theorem", "of_real_add", ["ennreal"]], ["del", "theorem", "of_real_add_of_real", ["ennreal"]]]}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": []}]}, {"timestamp": 1515673407, "sha": "7fd7ea8c", "message": "fix(analysis/real): more irreducible", "changes": [{"oldPath": "algebra/linear_algebra/prod_module.lean", "newPath": "algebra/linear_algebra/prod_module.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["add", "theorem", "max_of_rat", []], ["del", "theorem", "max_of_rat_of_rat", []], ["add", "theorem", "min_of_rat", []], ["del", "theorem", "min_of_rat_of_rat", []], ["add", "theorem", "of_rat_le", []], ["del", "theorem", "of_rat_le_of_rat", []], ["add", "theorem", "le_def", ["real"]], ["mod", "theorem", "two_eq_of_rat_two", []]]}]}, {"timestamp": 1515653839, "sha": "27920e9b", "message": "fix(data/list/basic,...): update to lean", "changes": [{"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}]}, {"timestamp": 1515553419, "sha": "dc285736", "message": "fix(number_theory/pell,...): update to lean", "changes": [{"oldPath": "number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": []}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1515335528, "sha": "5ff51dc6", "message": "feat(analysis/complex): complex numbers as a field", "changes": [{"oldPath": null, "newPath": "analysis/complex.lean", "changes": [["add", "def", "I", ["complex"]], ["add", "theorem", "I_im", ["complex"]], ["add", "theorem", "I_re", ["complex"]], ["add", "theorem", "add_im", ["complex"]], ["add", "theorem", "add_re", ["complex"]], ["add", "theorem", "coe_im", ["complex"]], ["add", "theorem", "coe_re", ["complex"]], ["add", "theorem", "conj_im", ["complex"]], ["add", "theorem", "conj_re", ["complex"]], ["add", "def", "conjugate", ["complex"]], ["add", "theorem", "eq_iff_re_eq_and_im_eq", ["complex"]], ["add", "theorem", "eq_of_re_eq_and_im_eq", ["complex"]], ["add", "theorem", "eta", ["complex"]], ["add", "theorem", "im_eq_zero_of_complex_nat", ["complex"]], ["add", "theorem", "mul_im", ["complex"]], ["add", "theorem", "mul_re", ["complex"]], ["add", "theorem", "neg_im", ["complex"]], ["add", "theorem", "neg_re", ["complex"]], ["add", "def", "norm_squared", ["complex"]], ["add", "theorem", "norm_squared_pos_of_nonzero", ["complex"]], ["add", "def", "of_real", ["complex"]], ["add", "theorem", "of_real_abs_squared", ["complex"]], ["add", "theorem", "of_real_add", ["complex"]], ["add", "theorem", "of_real_eq_coe", ["complex"]], ["add", "theorem", "of_real_injective", ["complex"]], ["add", "theorem", "of_real_int_eq_complex_int", ["complex"]], ["add", "theorem", "of_real_inv", ["complex"]], ["add", "theorem", "of_real_mul", ["complex"]], ["add", "theorem", "of_real_nat_eq_complex_nat", ["complex"]], ["add", "theorem", "of_real_neg", ["complex"]], ["add", "theorem", "of_real_one", ["complex"]], ["add", "theorem", "of_real_sub", ["complex"]], ["add", "theorem", "of_real_zero", ["complex"]], ["add", "theorem", "one_im", ["complex"]], ["add", "theorem", "one_re", ["complex"]], ["add", "theorem", "proj_im", ["complex"]], ["add", "theorem", "proj_re", ["complex"]], ["add", "theorem", "sub_im", ["complex"]], ["add", "theorem", "sub_re", ["complex"]], ["add", "theorem", "zero_im", ["complex"]], ["add", "theorem", "zero_re", ["complex"]], ["add", "structure", "complex", []]]}]}, {"timestamp": 1515265045, "sha": "182c3035", "message": "feat(set_theory/cofinality): regular/inaccessible cards, Konig's theorem, next fixpoint function", "changes": [{"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "abs_one", []]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "def", "Pi_congr_right", ["equiv"]]]}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": [["add", "def", "Pi_congr_right", ["function", "embedding"]], ["add", "def", "sigma_congr_right", ["function", "embedding"]]]}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "inv_fun_surjective", ["function"]]]}, {"oldPath": "set_theory/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": [["add", "theorem", "add_def", ["cardinal"]], ["add", "theorem", "cantor'", ["cardinal"]], ["add", "theorem", "lift_id'", ["cardinal"]], ["mod", "theorem", "lift_id", ["cardinal"]], ["add", "theorem", "lift_succ", ["cardinal"]], ["add", "theorem", "lift_two_power", ["cardinal"]], ["add", "theorem", "lt_succ", ["cardinal"]], ["add", "theorem", "mk_out", ["cardinal"]], ["add", "theorem", "mul_def", ["cardinal"]], ["add", "theorem", "omega_pos", ["cardinal"]], ["add", "theorem", "one_le_iff_ne_zero", ["cardinal"]], ["add", "theorem", "one_le_iff_pos", ["cardinal"]], ["add", "theorem", "pos_iff_ne_zero", ["cardinal"]], ["add", "theorem", "power_def", ["cardinal"]], ["add", "theorem", "power_ne_zero", ["cardinal"]], ["add", "def", "prod", ["cardinal"]], ["add", "theorem", "prod_const", ["cardinal"]], ["add", "theorem", "prod_eq_zero", ["cardinal"]], ["add", "theorem", "prod_le_prod", ["cardinal"]], ["add", "theorem", "prod_mk", ["cardinal"]], ["add", "theorem", "prod_ne_zero", ["cardinal"]], ["mod", "def", "sum", ["cardinal"]], ["add", "theorem", "sum_const", ["cardinal"]], ["add", "theorem", "sum_le_sum", ["cardinal"]], ["add", "theorem", "sum_le_sup", ["cardinal"]], ["add", "theorem", "sum_lt_prod", ["cardinal"]], ["add", "theorem", "sum_mk", ["cardinal"]], ["add", "theorem", "sup_le_sum", ["cardinal"]], ["add", "theorem", "sup_le_sup", ["cardinal"]]]}, {"oldPath": null, "newPath": "set_theory/cofinality.lean", "changes": [["add", "theorem", "cof_is_regular", ["cardinal"]], ["add", "theorem", "mk", ["cardinal", "is_inaccessible"]], ["add", "def", "is_inaccessible", ["cardinal"]], ["add", "def", "is_limit", ["cardinal"]], ["add", "def", "is_regular", ["cardinal"]], ["add", "theorem", "is_limit", ["cardinal", "is_strong_limit"]], ["add", "def", "is_strong_limit", ["cardinal"]], ["add", "theorem", "lt_cof_power", ["cardinal"]], ["add", "theorem", "lt_power_cof", ["cardinal"]], ["add", "theorem", "omega_is_regular", ["cardinal"]], ["add", "theorem", "succ_is_regular", ["cardinal"]], ["add", "theorem", "univ_inaccessible", ["cardinal"]], ["add", "def", "cof", ["order"]], ["add", "theorem", "aux", ["order_iso", "cof"]], ["add", "theorem", "cof", ["order_iso"]], ["add", "def", "cof", ["ordinal"]], ["add", "theorem", "cof_add", ["ordinal"]], ["add", "theorem", "cof_bsup_le", ["ordinal"]], ["add", "theorem", "cof_bsup_le_lift", ["ordinal"]], ["add", "theorem", "cof_cof", ["ordinal"]], ["add", "theorem", "cof_eq'", ["ordinal"]], ["add", "theorem", "cof_eq", ["ordinal"]], ["add", "theorem", "cof_eq_one_iff_is_succ", ["ordinal"]], ["add", "theorem", "cof_eq_zero", ["ordinal"]], ["add", "theorem", "cof_le_card", ["ordinal"]], ["add", "theorem", "cof_omega", ["ordinal"]], ["add", "theorem", "cof_ord_le", ["ordinal"]], ["add", "theorem", "cof_succ", ["ordinal"]], ["add", "theorem", "cof_sup_le", ["ordinal"]], ["add", "theorem", "cof_sup_le_lift", ["ordinal"]], ["add", "theorem", "cof_type_le", ["ordinal"]], ["add", "theorem", "cof_univ", ["ordinal"]], ["add", "theorem", "cof_zero", ["ordinal"]], ["add", "theorem", "le_cof_type", ["ordinal"]], ["add", "theorem", "lift_cof", ["ordinal"]], ["add", "theorem", "lt_cof_type", ["ordinal"]], ["add", "theorem", "omega_le_cof", ["ordinal"]], ["add", "theorem", "ord_cof_eq", ["ordinal"]]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["add", "theorem", "lift_lt_univ'", ["cardinal"]], ["add", "theorem", "lift_lt_univ", ["cardinal"]], ["add", "theorem", "lift_univ", ["cardinal"]], ["add", "theorem", "lt_univ'", ["cardinal"]], ["add", "theorem", "lt_univ", ["cardinal"]], ["add", "theorem", "mk_cardinal", ["cardinal"]], ["add", "theorem", "ord_univ", ["cardinal"]], ["add", "theorem", "type_cardinal", ["cardinal"]], ["add", "def", "univ", ["cardinal"]], ["add", "theorem", "univ_id", ["cardinal"]], ["add", "theorem", "univ_umax", ["cardinal"]], ["del", "def", "cof", []], ["del", "def", "cof", ["order"]], ["del", "theorem", "aux", ["order_iso", "cof"]], ["del", "theorem", "cof", ["order_iso"]], ["add", "theorem", "card_univ", ["ordinal"]], ["del", "theorem", "cof_add", ["ordinal"]], ["del", "theorem", "cof_bsup_le", ["ordinal"]], ["del", "theorem", "cof_bsup_le_lift", ["ordinal"]], ["del", "theorem", "cof_cof", ["ordinal"]], ["del", "theorem", "cof_eq", ["ordinal"]], ["del", "theorem", "cof_eq_one_iff_is_succ", ["ordinal"]], ["del", "theorem", "cof_eq_zero", ["ordinal"]], ["del", "theorem", "cof_le_card", ["ordinal"]], ["del", "theorem", "cof_succ", ["ordinal"]], ["del", "theorem", "cof_sup_le", ["ordinal"]], ["del", "theorem", "cof_sup_le_lift", ["ordinal"]], ["del", "theorem", "cof_type_le", ["ordinal"]], ["del", "theorem", "cof_zero", ["ordinal"]], ["add", "def", "deriv", ["ordinal"]], ["add", "theorem", "deriv_is_normal", ["ordinal"]], ["add", "theorem", "deriv_limit", ["ordinal"]], ["add", "theorem", "deriv_succ", ["ordinal"]], ["add", "theorem", "deriv_zero", ["ordinal"]], ["add", "theorem", "foldr_le_nfp", ["ordinal"]], ["add", "theorem", "bsup", ["ordinal", "is_normal"]], ["add", "theorem", "deriv_fp", ["ordinal", "is_normal"]], ["add", "theorem", "fp_iff_deriv", ["ordinal", "is_normal"]], ["add", "theorem", "le_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "lt_nfp", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_fp", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_le", ["ordinal", "is_normal"]], ["add", "theorem", "nfp_le_fp", ["ordinal", "is_normal"]], ["add", "theorem", "sup", ["ordinal", "is_normal"]], ["del", "theorem", "le_cof_type", ["ordinal"]], ["add", "theorem", "le_nfp_self", ["ordinal"]], ["mod", "theorem", "principal_seg_top", ["ordinal", "lift"]], ["add", "theorem", "lift_id'", ["ordinal"]], ["mod", "theorem", "lift_id", ["ordinal"]], ["add", "theorem", "lift_type", ["ordinal"]], ["add", "theorem", "lift_univ", ["ordinal"]], ["del", "theorem", "lt_cof_type", ["ordinal"]], ["add", "theorem", "lt_sup", ["ordinal"]], ["add", "def", "nfp", ["ordinal"]], ["add", "theorem", "not_zero_is_limit", ["ordinal"]], ["del", "theorem", "ord_cof_eq", ["ordinal"]], ["add", "def", "univ", ["ordinal"]], ["add", "theorem", "univ_id", ["ordinal"]], ["add", "theorem", "univ_umax", ["ordinal"]]]}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": []}]}, {"timestamp": 1515199812, "sha": "4f7835eb", "message": "feat(analysis): add default setup for uniform space of metric space", "changes": [{"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": [["add", "def", "uniform_space_of_dist", ["metric_space"]]]}]}, {"timestamp": 1515056750, "sha": "0b7b912a", "message": "feat(set_theory/ordinal_notation): correctness of ordinal power", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["mod", "theorem", "le_or_lt", []]]}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": [["add", "theorem", "succ_pnat_coe", ["nat"]], ["add", "theorem", "add_coe", ["pnat"]], ["add", "theorem", "eq", ["pnat"]], ["add", "theorem", "mk_coe", ["pnat"]], ["add", "theorem", "mul_coe", ["pnat"]], ["add", "theorem", "nat_coe_coe", ["pnat"]], ["del", "theorem", "nat_coe_val", ["pnat"]], ["mod", "theorem", "ne_zero", ["pnat"]], ["add", "theorem", "one_coe", ["pnat"]], ["add", "theorem", "pos", ["pnat"]], ["add", "def", "pow", ["pnat"]], ["del", "theorem", "to_pnat'_val", ["pnat"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "coe_coe", []]]}, {"oldPath": "set_theory/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["add", "theorem", "add_le_add_iff_right", ["ordinal"]], ["add", "theorem", "add_lt_omega_power", ["ordinal"]], ["add", "theorem", "add_right_cancel", ["ordinal"]], ["add", "theorem", "add_sub_add_cancel", ["ordinal"]], ["add", "theorem", "dvd_add", ["ordinal"]], ["add", "theorem", "dvd_add_iff", ["ordinal"]], ["add", "theorem", "dvd_antisymm", ["ordinal"]], ["add", "theorem", "dvd_mul_of_dvd", ["ordinal"]], ["add", "theorem", "dvd_trans", ["ordinal"]], ["add", "theorem", "is_limit_iff_omega_dvd", ["ordinal"]], ["add", "theorem", "limit_le", ["ordinal", "is_normal"]], ["add", "theorem", "le_of_dvd", ["ordinal"]], ["add", "theorem", "lt_limit", ["ordinal"]], ["del", "theorem", "mul_assoc", ["ordinal"]], ["add", "theorem", "mul_is_limit_left", ["ordinal"]], ["add", "theorem", "mul_lt_omega_power", ["ordinal"]], ["add", "theorem", "mul_omega_dvd", ["ordinal"]], ["del", "theorem", "mul_omega_power", ["ordinal"]], ["del", "theorem", "mul_one", ["ordinal"]], ["add", "theorem", "mul_sub", ["ordinal"]], ["add", "theorem", "nat_cast_succ", ["ordinal"]], ["del", "theorem", "one_mul", ["ordinal"]], ["add", "theorem", "power_dvd_power", ["ordinal"]], ["add", "theorem", "power_dvd_power_iff", ["ordinal"]], ["add", "theorem", "power_lt_omega", ["ordinal"]], ["add", "theorem", "power_omega", ["ordinal"]], ["add", "theorem", "sub_eq_of_add_eq", ["ordinal"]], ["add", "theorem", "sub_is_limit", ["ordinal"]], ["add", "theorem", "sub_sub", ["ordinal"]], ["del", "theorem", "succ_nat_cast", ["ordinal"]], ["mod", "theorem", "zero_dvd", ["ordinal"]]]}, {"oldPath": "set_theory/ordinal_notation.lean", "newPath": "set_theory/ordinal_notation.lean", "changes": [["add", "def", "below", ["nonote"]], ["add", "def", "mk", ["nonote"]], ["add", "def", "oadd", ["nonote"]], ["add", "def", "power", ["nonote"]], ["add", "def", "rec_on", ["nonote"]], ["mod", "theorem", "repr_add", ["nonote"]], ["mod", "theorem", "repr_mul", ["nonote"]], ["add", "theorem", "repr_power", ["nonote"]], ["add", "theorem", "repr_sub", ["nonote"]], ["add", "theorem", "below_of_lt'", ["onote", "NF"]], ["mod", "theorem", "below_of_lt", ["onote", "NF"]], ["mod", "theorem", "fst", ["onote", "NF"]], ["mod", "theorem", "oadd", ["onote", "NF"]], ["add", "theorem", "of_dvd_omega", ["onote", "NF"]], ["add", "theorem", "of_dvd_omega_power", ["onote", "NF"]], ["mod", "theorem", "snd'", ["onote", "NF"]], ["mod", "theorem", "snd", ["onote", "NF"]], ["del", "theorem", "zero", ["onote", "NF"]], ["add", "theorem", "zero_of_zero", ["onote", "NF"]], ["mod", "def", "NF", ["onote"]], ["mod", "theorem", "fst", ["onote", "NF_below"]], ["mod", "theorem", "lt", ["onote", "NF_below"]], ["mod", "theorem", "oadd", ["onote", "NF_below"]], ["mod", "theorem", "repr_lt", ["onote", "NF_below"]], ["mod", "theorem", "snd", ["onote", "NF_below"]], ["mod", "theorem", "NF_below_iff_top_below", ["onote"]], ["del", "theorem", "NF_of_nat", ["onote"]], ["add", "theorem", "NF_repr_split'", ["onote"]], ["add", "theorem", "NF_repr_split", ["onote"]], ["del", "theorem", "add_NF", ["onote"]], ["mod", "theorem", "cmp_compares", ["onote"]], ["mod", "theorem", "le_def", ["onote"]], ["mod", "theorem", "lt_def", ["onote"]], ["del", "theorem", "mul_NF", ["onote"]], ["add", "def", "mul_nat", ["onote"]], ["add", "theorem", "mul_nat_eq_mul", ["onote"]], ["add", "theorem", "mul_zero", ["onote"]], ["add", "theorem", "oadd_add", ["onote"]], ["mod", "theorem", "oadd_lt_oadd_3", ["onote"]], ["add", "theorem", "oadd_mul", ["onote"]], ["mod", "theorem", "oadd_pos", ["onote"]], ["add", "def", "omega", ["onote"]], ["mod", "theorem", "omega_le_oadd", ["onote"]], ["mod", "def", "power_aux", ["onote"]], ["add", "def", "repr'", ["onote"]], ["mod", "theorem", "repr_add", ["onote"]], ["mod", "theorem", "repr_inj", ["onote"]], ["mod", "theorem", "repr_mul", ["onote"]], ["add", "theorem", "repr_power", ["onote"]], ["add", "theorem", "repr_power_aux₁", ["onote"]], ["add", "theorem", "repr_power_aux₂", ["onote"]], ["add", "theorem", "repr_scale", ["onote"]], ["add", "theorem", "repr_sub", ["onote"]], ["mod", "def", "scale", ["onote"]], ["add", "theorem", "scale_eq_mul", ["onote"]], ["add", "theorem", "scale_power_aux", ["onote"]], ["mod", "def", "split'", ["onote"]], ["mod", "def", "split", ["onote"]], ["add", "theorem", "split_add_lt", ["onote"]], ["add", "theorem", "split_dvd", ["onote"]], ["add", "theorem", "split_eq_scale_split'", ["onote"]], ["add", "theorem", "sub_NF_below", ["onote"]], ["add", "def", "to_string", ["onote"]], ["add", "def", "to_string_aux1", ["onote"]], ["add", "theorem", "zero_add", ["onote"]], ["add", "theorem", "zero_mul", ["onote"]]]}]}, {"timestamp": 1515056702, "sha": "3f2435e5", "message": "refactor(algebra/group): clean up PR commit", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["del", "theorem", "anti_mph_prod", []], ["mod", "theorem", "inv_prod", []], ["add", "theorem", "prod", ["is_group_anti_hom"]], ["add", "theorem", "prod", ["is_group_hom"]], ["del", "theorem", "mph_prod", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["del", "theorem", "inv", ["group_anti_hom"]], ["del", "theorem", "inv_is_group_anti_hom", ["group_anti_hom"]], ["del", "theorem", "one", ["group_anti_hom"]], ["del", "theorem", "inv", ["group_hom"]], ["del", "theorem", "one", ["group_hom"]], ["add", "theorem", "inv_is_group_anti_hom", []], ["add", "theorem", "inv", ["is_group_anti_hom"]], ["add", "theorem", "mul", ["is_group_anti_hom"]], ["add", "theorem", "one", ["is_group_anti_hom"]], ["add", "theorem", "inv", ["is_group_hom"]], ["add", "theorem", "mul", ["is_group_hom"]], ["add", "theorem", "one", ["is_group_hom"]]]}]}, {"timestamp": 1514911969, "sha": "12bd22bf", "message": "Group morphisms (#30)\n* feat(algebra/group): morphisms and antimorphisms\nDefinitions, image of one and inverses,\nand computation on a product of more than two elements in big_operators.", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "anti_mph_prod", []], ["add", "theorem", "inv_prod", []], ["add", "theorem", "mph_prod", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "inv", ["group_anti_hom"]], ["add", "theorem", "inv_is_group_anti_hom", ["group_anti_hom"]], ["add", "theorem", "one", ["group_anti_hom"]], ["add", "theorem", "inv", ["group_hom"]], ["add", "theorem", "one", ["group_hom"]], ["add", "def", "is_group_anti_hom", []], ["add", "def", "is_group_hom", []]]}]}, {"timestamp": 1514867281, "sha": "37c31209", "message": "feat(set_theory/ordinal_notation): ordinal notations for ordinals < e0\nThis allows us to compute with small countable ordinals using trees of nats.", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "injective_of_strict_mono", []], ["mod", "theorem", "lt_iff_lt_of_strict_mono", []], ["add", "theorem", "eq_eq", ["ordering", "compares"]], ["add", "theorem", "eq_gt", ["ordering", "compares"]], ["add", "theorem", "eq_lt", ["ordering", "compares"]], ["add", "theorem", "inj", ["ordering", "compares"]], ["add", "def", "compares", ["ordering"]], ["add", "theorem", "compares_of_strict_mono", ["ordering"]]]}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["mod", "theorem", "cast_add_one", ["nat"]]]}, {"oldPath": "data/pnat.lean", "newPath": "data/pnat.lean", "changes": [["mod", "def", "succ_pnat", ["nat"]], ["mod", "def", "to_pnat'", ["nat"]], ["mod", "def", "to_pnat", ["nat"]], ["mod", "theorem", "nat_coe_val", ["pnat"]], ["add", "theorem", "ne_zero", ["pnat"]], ["mod", "theorem", "to_pnat'_coe", ["pnat"]], ["mod", "theorem", "to_pnat'_val", ["pnat"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "imp_or_distrib'", []], ["add", "theorem", "imp_or_distrib", []]]}, {"oldPath": "theories/number_theory/dioph.lean", "newPath": "number_theory/dioph.lean", "changes": []}, {"oldPath": "theories/number_theory/pell.lean", "newPath": "number_theory/pell.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "set_theory/cardinal.lean", "changes": []}, {"oldPath": "data/ordinal.lean", "newPath": "set_theory/ordinal.lean", "changes": [["add", "theorem", "add_mul_limit", ["ordinal"]], ["add", "theorem", "add_mul_limit_aux", ["ordinal"]], ["add", "theorem", "add_mul_succ", ["ordinal"]], ["add", "theorem", "bsup_type", ["ordinal"]], ["add", "theorem", "cof_bsup_le", ["ordinal"]], ["add", "theorem", "cof_bsup_le_lift", ["ordinal"]], ["add", "theorem", "nat_cast_pos", ["ordinal"]]]}, {"oldPath": null, "newPath": "set_theory/ordinal_notation.lean", "changes": [["add", "def", "cmp", ["nonote"]], ["add", "theorem", "cmp_compares", ["nonote"]], ["add", "def", "of_nat", ["nonote"]], ["add", "theorem", "repr_add", ["nonote"]], ["add", "theorem", "repr_mul", ["nonote"]], ["add", "def", "nonote", []], ["add", "theorem", "below_of_lt", ["onote", "NF"]], ["add", "theorem", "fst", ["onote", "NF"]], ["add", "theorem", "oadd", ["onote", "NF"]], ["add", "theorem", "snd'", ["onote", "NF"]], ["add", "theorem", "snd", ["onote", "NF"]], ["add", "theorem", "zero", ["onote", "NF"]], ["add", "def", "NF", ["onote"]], ["add", "theorem", "fst", ["onote", "NF_below"]], ["add", "theorem", "lt", ["onote", "NF_below"]], ["add", "theorem", "mono", ["onote", "NF_below"]], ["add", "theorem", "oadd", ["onote", "NF_below"]], ["add", "theorem", "repr_lt", ["onote", "NF_below"]], ["add", "theorem", "snd", ["onote", "NF_below"]], ["add", "inductive", "NF_below", ["onote"]], ["add", "theorem", "NF_below_iff_top_below", ["onote"]], ["add", "theorem", "NF_below_of_nat", ["onote"]], ["add", "theorem", "NF_below_zero", ["onote"]], ["add", "theorem", "NF_of_nat", ["onote"]], ["add", "def", "add", ["onote"]], ["add", "theorem", "add_NF", ["onote"]], ["add", "theorem", "add_NF_below", ["onote"]], ["add", "def", "cmp", ["onote"]], ["add", "theorem", "cmp_compares", ["onote"]], ["add", "theorem", "eq_of_cmp_eq", ["onote"]], ["add", "theorem", "le_def", ["onote"]], ["add", "theorem", "lt_def", ["onote"]], ["add", "def", "mul", ["onote"]], ["add", "theorem", "mul_NF", ["onote"]], ["add", "theorem", "oadd_lt_oadd_1", ["onote"]], ["add", "theorem", "oadd_lt_oadd_2", ["onote"]], ["add", "theorem", "oadd_lt_oadd_3", ["onote"]], ["add", "theorem", "oadd_mul_NF_below", ["onote"]], ["add", "theorem", "oadd_pos", ["onote"]], ["add", "def", "of_nat", ["onote"]], ["add", "theorem", "of_nat_one", ["onote"]], ["add", "theorem", "omega_le_oadd", ["onote"]], ["add", "def", "power", ["onote"]], ["add", "def", "power_aux", ["onote"]], ["add", "theorem", "repr_add", ["onote"]], ["add", "theorem", "repr_inj", ["onote"]], ["add", "theorem", "repr_mul", ["onote"]], ["add", "theorem", "repr_of_nat", ["onote"]], ["add", "theorem", "repr_one", ["onote"]], ["add", "def", "scale", ["onote"]], ["add", "def", "split'", ["onote"]], ["add", "def", "split", ["onote"]], ["add", "def", "sub", ["onote"]], ["add", "def", "top_below", ["onote"]], ["add", "theorem", "zero_def", ["onote"]], ["add", "theorem", "zero_lt_one", ["onote"]], ["add", "inductive", "onote", []]]}, {"oldPath": "theories/set_theory.lean", "newPath": "set_theory/zfc.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1514739218, "sha": "1bc2ac7a", "message": "feat(data/ordinal): is_normal, omin, power/log, CNF, indecomposables,\naddition and multiplication of infinite cardinals", "changes": [{"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": []}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "lt_iff_lt_of_strict_mono", []]]}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "add_le_add", ["cardinal"]], ["add", "theorem", "add_le_add_left", ["cardinal"]], ["add", "theorem", "add_le_add_right", ["cardinal"]], ["add", "theorem", "add_lt_omega", ["cardinal"]], ["del", "theorem", "add_mono", ["cardinal"]], ["add", "theorem", "le_add_left", ["cardinal"]], ["add", "theorem", "le_add_right", ["cardinal"]], ["mod", "theorem", "le_iff_exists_add", ["cardinal"]], ["mod", "theorem", "le_zero", ["cardinal"]], ["add", "theorem", "mul_le_mul", ["cardinal"]], ["add", "theorem", "mul_le_mul_left", ["cardinal"]], ["add", "theorem", "mul_le_mul_right", ["cardinal"]], ["add", "theorem", "mul_lt_omega", ["cardinal"]], ["del", "theorem", "mul_mono", ["cardinal"]], ["add", "theorem", "omega_le", ["cardinal"]], ["add", "theorem", "one_lt_omega", ["cardinal"]], ["add", "theorem", "power_le_power_left", ["cardinal"]], ["add", "theorem", "power_le_power_right", ["cardinal"]], ["del", "theorem", "power_mono_left", ["cardinal"]], ["del", "theorem", "power_mono_right", ["cardinal"]], ["mod", "theorem", "zero_le", ["cardinal"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["add", "theorem", "add_eq_max", ["cardinal"]], ["add", "theorem", "add_eq_self", ["cardinal"]], ["add", "def", "order_iso", ["cardinal", "aleph'"]], ["add", "theorem", "order_iso_coe", ["cardinal", "aleph'"]], ["add", "def", "aleph'", ["cardinal"]], ["add", "theorem", "aleph'_aleph_idx", ["cardinal"]], ["add", "theorem", "aleph'_is_normal", ["cardinal"]], ["add", "theorem", "aleph'_le", ["cardinal"]], ["add", "theorem", "aleph'_le_of_limit", ["cardinal"]], ["add", "theorem", "aleph'_lt", ["cardinal"]], ["add", "theorem", "aleph'_nat", ["cardinal"]], ["add", "theorem", "aleph'_omega", ["cardinal"]], ["add", "theorem", "aleph'_succ", ["cardinal"]], ["add", "theorem", "aleph'_zero", ["cardinal"]], ["add", "def", "aleph", ["cardinal"]], ["add", "theorem", "aleph_idx_aleph'", ["cardinal"]], ["add", "theorem", "aleph_is_limit", ["cardinal"]], ["add", "theorem", "aleph_is_normal", ["cardinal"]], ["add", "theorem", "aleph_le", ["cardinal"]], ["add", "theorem", "aleph_lt", ["cardinal"]], ["add", "theorem", "aleph_succ", ["cardinal"]], ["add", "theorem", "aleph_zero", ["cardinal"]], ["add", "theorem", "exists_aleph", ["cardinal"]], ["add", "theorem", "mul_eq_max", ["cardinal"]], ["add", "theorem", "mul_eq_self", ["cardinal"]], ["add", "theorem", "omega_le_aleph'", ["cardinal"]], ["add", "theorem", "omega_le_aleph", ["cardinal"]], ["add", "theorem", "ord_card_le", ["cardinal"]], ["add", "def", "cof", []], ["add", "def", "CNF", ["ordinal"]], ["add", "theorem", "CNF_aux", ["ordinal"]], ["add", "theorem", "CNF_foldr", ["ordinal"]], ["add", "theorem", "CNF_fst_le", ["ordinal"]], ["add", "theorem", "CNF_fst_le_log", ["ordinal"]], ["add", "theorem", "CNF_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_pairwise", ["ordinal"]], ["add", "theorem", "CNF_pairwise_aux", ["ordinal"]], ["add", "theorem", "CNF_rec_ne_zero", ["ordinal"]], ["add", "theorem", "CNF_rec_zero", ["ordinal"]], ["add", "theorem", "CNF_snd_lt", ["ordinal"]], ["add", "theorem", "CNF_sorted", ["ordinal"]], ["add", "theorem", "CNF_zero", ["ordinal"]], ["add", "theorem", "add_absorp", ["ordinal"]], ["add", "theorem", "add_absorp_iff", ["ordinal"]], ["mod", "theorem", "add_is_limit", ["ordinal"]], ["add", "theorem", "add_is_normal", ["ordinal"]], ["mod", "theorem", "add_le_add_iff_left", ["ordinal"]], ["mod", "theorem", "add_le_add_left", ["ordinal"]], ["add", "theorem", "add_left_cancel", ["ordinal"]], ["add", "theorem", "add_lt_omega", ["ordinal"]], ["add", "theorem", "add_omega", ["ordinal"]], ["add", "theorem", "add_omega_power", ["ordinal"]], ["del", "def", "order_iso", ["ordinal", "aleph'"]], ["del", "theorem", "order_iso_coe", ["ordinal", "aleph'"]], ["del", "def", "aleph'", ["ordinal"]], ["del", "theorem", "aleph'_aleph_idx", ["ordinal"]], ["del", "theorem", "aleph'_le", ["ordinal"]], ["del", "theorem", "aleph'_lt", ["ordinal"]], ["del", "theorem", "aleph'_succ", ["ordinal"]], ["del", "def", "aleph", ["ordinal"]], ["del", "theorem", "aleph_idx_aleph'", ["ordinal"]], ["del", "def", "cof", ["ordinal"]], ["add", "theorem", "cof_sup_le", ["ordinal"]], ["add", "theorem", "cof_sup_le_lift", ["ordinal"]], ["add", "theorem", "nat_lt", ["ordinal", "is_limit"]], ["add", "theorem", "one_lt", ["ordinal", "is_limit"]], ["add", "theorem", "pos", ["ordinal", "is_limit"]], ["add", "theorem", "inj", ["ordinal", "is_normal"]], ["add", "theorem", "is_limit", ["ordinal", "is_normal"]], ["add", "theorem", "le_iff", ["ordinal", "is_normal"]], ["add", "theorem", "le_self", ["ordinal", "is_normal"]], ["add", "theorem", "le_set'", ["ordinal", "is_normal"]], ["add", "theorem", "le_set", ["ordinal", "is_normal"]], ["add", "theorem", "limit_lt", ["ordinal", "is_normal"]], ["add", "theorem", "lt_iff", ["ordinal", "is_normal"]], ["add", "theorem", "refl", ["ordinal", "is_normal"]], ["add", "theorem", "trans", ["ordinal", "is_normal"]], ["add", "def", "is_normal", ["ordinal"]], ["mod", "theorem", "le_add_right", ["ordinal"]], ["add", "theorem", "le_log", ["ordinal"]], ["add", "theorem", "le_omin", ["ordinal"]], ["add", "theorem", "le_power_self", ["ordinal"]], ["mod", "theorem", "le_sup", ["ordinal"]], ["add", "def", "log", ["ordinal"]], ["add", "theorem", "log_def", ["ordinal"]], ["add", "theorem", "log_le_log", ["ordinal"]], ["add", "theorem", "log_le_self", ["ordinal"]], ["add", "theorem", "log_lt", ["ordinal"]], ["add", "theorem", "log_not_one_lt", ["ordinal"]], ["add", "theorem", "log_zero", ["ordinal"]], ["add", "theorem", "lt_mul_of_limit", ["ordinal"]], ["add", "theorem", "lt_power_of_limit", ["ordinal"]], ["add", "theorem", "lt_power_succ_log", ["ordinal"]], ["add", "theorem", "mul_add_one", ["ordinal"]], ["add", "theorem", "mul_is_normal", ["ordinal"]], ["add", "theorem", "mul_le_mul", ["ordinal"]], ["add", "theorem", "mul_lt_omega", ["ordinal"]], ["add", "theorem", "mul_ne_zero", ["ordinal"]], ["add", "theorem", "mul_omega", ["ordinal"]], ["add", "theorem", "mul_omega_power", ["ordinal"]], ["add", "theorem", "mul_omega_power_power", ["ordinal"]], ["mod", "theorem", "mul_succ", ["ordinal"]], ["add", "theorem", "nat_cast_div", ["ordinal"]], ["add", "theorem", "nat_cast_eq_zero", ["ordinal"]], ["add", "theorem", "nat_cast_mod", ["ordinal"]], ["add", "theorem", "nat_cast_mul", ["ordinal"]], ["add", "theorem", "nat_cast_ne_zero", ["ordinal"]], ["add", "theorem", "nat_cast_power", ["ordinal"]], ["add", "theorem", "nat_cast_sub", ["ordinal"]], ["add", "theorem", "omega_ne_zero", ["ordinal"]], ["add", "theorem", "omega_pos", ["ordinal"]], ["add", "def", "omin", ["ordinal"]], ["add", "theorem", "omin_le", ["ordinal"]], ["add", "theorem", "omin_mem", ["ordinal"]], ["add", "theorem", "one_CNF", ["ordinal"]], ["add", "theorem", "one_le_iff_ne_zero", ["ordinal"]], ["add", "theorem", "one_le_iff_pos", ["ordinal"]], ["add", "theorem", "one_lt_omega", ["ordinal"]], ["add", "theorem", "one_power", ["ordinal"]], ["del", "theorem", "ord_card_le", ["ordinal"]], ["del", "theorem", "pos_of_is_limit", ["ordinal"]], ["add", "theorem", "power_add", ["ordinal"]], ["add", "theorem", "power_is_limit", ["ordinal"]], ["add", "theorem", "power_is_limit_left", ["ordinal"]], ["add", "theorem", "power_is_normal", ["ordinal"]], ["mod", "theorem", "power_le_of_limit", ["ordinal"]], ["add", "theorem", "power_le_power_iff_right", ["ordinal"]], ["add", "theorem", "power_le_power_left", ["ordinal"]], ["add", "theorem", "power_le_power_right", ["ordinal"]], ["mod", "theorem", "power_limit", ["ordinal"]], ["add", "theorem", "power_log_le", ["ordinal"]], ["add", "theorem", "power_lt_power_iff_right", ["ordinal"]], ["add", "theorem", "power_lt_power_left_of_succ", ["ordinal"]], ["add", "theorem", "power_mul", ["ordinal"]], ["add", "theorem", "power_ne_zero", ["ordinal"]], ["add", "theorem", "power_one", ["ordinal"]], ["add", "theorem", "power_pos", ["ordinal"]], ["add", "theorem", "power_right_inj", ["ordinal"]], ["mod", "theorem", "power_succ", ["ordinal"]], ["mod", "theorem", "power_zero", ["ordinal"]], ["add", "theorem", "sub_eq_zero_iff_le", ["ordinal"]], ["add", "theorem", "succ_eq_add_one", ["ordinal"]], ["mod", "theorem", "succ_le", ["ordinal"]], ["add", "theorem", "succ_log_def", ["ordinal"]], ["mod", "theorem", "succ_ne_zero", ["ordinal"]], ["add", "theorem", "succ_pos", ["ordinal"]], ["add", "theorem", "zero_CNF", ["ordinal"]], ["add", "theorem", "zero_lt_one", ["ordinal"]], ["add", "theorem", "zero_power'", ["ordinal"]], ["add", "theorem", "zero_power", ["ordinal"]]]}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": []}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "compl_image_set_of", ["set"]], ["mod", "theorem", "compl_subset_of_compl_subset", ["set"]], ["mod", "theorem", "diff_diff", ["set"]], ["mod", "theorem", "diff_empty", ["set"]], ["mod", "theorem", "diff_neq_empty", ["set"]], ["mod", "theorem", "diff_right_antimono", ["set"]], ["mod", "theorem", "diff_subset_diff", ["set"]], ["mod", "theorem", "empty_prod", ["set"]], ["mod", "theorem", "forall_range_iff", ["set"]], ["mod", "theorem", "image_inter", ["set"]], ["mod", "theorem", "image_inter_on", ["set"]], ["mod", "theorem", "image_preimage_eq_inter_rng", ["set"]], ["mod", "theorem", "image_singleton", ["set"]], ["mod", "theorem", "image_swap_prod", ["set"]], ["mod", "theorem", "insert_prod", ["set"]], ["mod", "theorem", "insert_subset", ["set"]], ["mod", "theorem", "insert_subset_insert", ["set"]], ["mod", "theorem", "insert_union", ["set"]], ["mod", "theorem", "inter_assoc", ["set"]], ["mod", "theorem", "inter_comm", ["set"]], ["mod", "theorem", "inter_left_comm", ["set"]], ["add", "theorem", "inter_singleton_eq_empty", ["set"]], ["mod", "theorem", "mem_image_of_injective", ["set"]], ["mod", "theorem", "mem_of_mem_of_subset", ["set"]], ["mod", "theorem", "mem_prod", ["set"]], ["mod", "theorem", "mem_prod_eq", ["set"]], ["mod", "theorem", "mem_range", ["set"]], ["mod", "theorem", "mem_range_self", ["set"]], ["mod", "theorem", "ne_empty_iff_exists_mem", ["set"]], ["mod", "theorem", "not_eq_empty_iff_exists", ["set"]], ["mod", "theorem", "not_not_mem", ["set"]], ["mod", "theorem", "not_subset", ["set"]], ["mod", "theorem", "prod_empty", ["set"]], ["mod", "theorem", "prod_image_image_eq", ["set"]], ["mod", "theorem", "prod_insert", ["set"]], ["mod", "theorem", "prod_inter_prod", ["set"]], ["mod", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["mod", "theorem", "prod_mono", ["set"]], ["mod", "theorem", "prod_neq_empty_iff", ["set"]], ["mod", "theorem", "prod_singleton_singleton", ["set"]], ["mod", "theorem", "quot_mk_image_univ_eq", ["set"]], ["mod", "theorem", "range_compose", ["set"]], ["mod", "theorem", "range_eq_image", ["set"]], ["mod", "theorem", "range_id", ["set"]], ["mod", "theorem", "range_iff_surjective", ["set"]], ["mod", "theorem", "set_compr_eq_eq_singleton", ["set"]], ["mod", "theorem", "set_of_mem_eq", ["set"]], ["add", "theorem", "singleton_inter_eq_empty", ["set"]], ["mod", "theorem", "union_assoc", ["set"]], ["mod", "theorem", "union_comm", ["set"]], ["mod", "theorem", "union_insert", ["set"]], ["del", "theorem", "union_insert_eq", ["set"]], ["mod", "theorem", "union_left_comm", ["set"]], ["add", "theorem", "union_singleton", ["set"]], ["mod", "theorem", "univ_eq_true_false", ["set"]], ["mod", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "logic/embedding.lean", "newPath": "logic/embedding.lean", "changes": [["add", "def", "embedding_of_subset", ["set"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "def", "decidable_linear_order_of_STO'", []], ["add", "def", "linear_order_of_STO'", []], ["add", "def", "partial_order_of_SO", []]]}]}, {"timestamp": 1514023578, "sha": "0abe0860", "message": "feat(data/ordinal): mul, div, mod, dvd, sub, power", "changes": [{"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "le_zero", ["cardinal"]], ["add", "theorem", "omega_ne_zero", ["cardinal"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "prod_assoc_apply", ["equiv"]], ["add", "theorem", "prod_sum_distrib_apply_left", ["equiv"]], ["add", "theorem", "prod_sum_distrib_apply_right", ["equiv"]], ["add", "theorem", "prod_unit_apply", ["equiv"]], ["add", "theorem", "sum_prod_distrib_apply_left", ["equiv"]], ["add", "theorem", "sum_prod_distrib_apply_right", ["equiv"]], ["add", "theorem", "unit_prod_apply", ["equiv"]]]}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["add", "theorem", "add_one_of_omega_le", ["cardinal"]], ["add", "theorem", "ord_is_limit", ["cardinal"]], ["add", "theorem", "add_is_limit", ["ordinal"]], ["add", "theorem", "add_le_of_limit", ["ordinal"]], ["add", "theorem", "add_sub_cancel_of_le", ["ordinal"]], ["add", "theorem", "card_mul", ["ordinal"]], ["add", "theorem", "card_succ", ["ordinal"]], ["add", "theorem", "div_add_mod", ["ordinal"]], ["add", "def", "div_def", ["ordinal"]], ["add", "theorem", "div_eq_zero_of_lt", ["ordinal"]], ["add", "theorem", "div_le", ["ordinal"]], ["add", "theorem", "div_le_of_le_mul", ["ordinal"]], ["add", "theorem", "div_lt", ["ordinal"]], ["add", "theorem", "div_mul_cancel", ["ordinal"]], ["add", "theorem", "div_one", ["ordinal"]], ["add", "theorem", "div_self", ["ordinal"]], ["add", "theorem", "div_zero", ["ordinal"]], ["add", "theorem", "dvd_def", ["ordinal"]], ["add", "theorem", "dvd_mul", ["ordinal"]], ["add", "theorem", "dvd_zero", ["ordinal"]], ["add", "theorem", "le_div", ["ordinal"]], ["add", "theorem", "le_of_mul_le_mul_left", ["ordinal"]], ["add", "theorem", "le_succ_of_is_limit", ["ordinal"]], ["add", "theorem", "le_zero", ["ordinal"]], ["add", "theorem", "limit_le", ["ordinal"]], ["add", "theorem", "limit_rec_on_limit", ["ordinal"]], ["add", "theorem", "limit_rec_on_succ", ["ordinal"]], ["add", "theorem", "limit_rec_on_zero", ["ordinal"]], ["add", "theorem", "lt_div", ["ordinal"]], ["add", "theorem", "lt_mul_div_add", ["ordinal"]], ["add", "theorem", "lt_mul_succ_div", ["ordinal"]], ["add", "theorem", "lt_succ", ["ordinal"]], ["add", "theorem", "mod_def", ["ordinal"]], ["add", "theorem", "mod_eq_of_lt", ["ordinal"]], ["add", "theorem", "mod_lt", ["ordinal"]], ["add", "theorem", "mod_one", ["ordinal"]], ["add", "theorem", "mod_self", ["ordinal"]], ["add", "theorem", "mod_zero", ["ordinal"]], ["add", "theorem", "mul_add", ["ordinal"]], ["add", "theorem", "mul_add_div", ["ordinal"]], ["add", "theorem", "mul_assoc", ["ordinal"]], ["add", "theorem", "mul_div_cancel", ["ordinal"]], ["add", "theorem", "mul_div_le", ["ordinal"]], ["add", "theorem", "mul_is_limit", ["ordinal"]], ["add", "theorem", "mul_le_mul_iff_left", ["ordinal"]], ["add", "theorem", "mul_le_mul_left", ["ordinal"]], ["add", "theorem", "mul_le_mul_right", ["ordinal"]], ["add", "theorem", "mul_le_of_limit", ["ordinal"]], ["add", "theorem", "mul_left_inj", ["ordinal"]], ["add", "theorem", "mul_lt_mul_iff_left", ["ordinal"]], ["add", "theorem", "mul_lt_mul_of_pos_left", ["ordinal"]], ["add", "theorem", "mul_lt_of_lt_div", ["ordinal"]], ["add", "theorem", "mul_one", ["ordinal"]], ["add", "theorem", "mul_pos", ["ordinal"]], ["add", "theorem", "mul_succ", ["ordinal"]], ["add", "theorem", "mul_zero", ["ordinal"]], ["add", "theorem", "not_succ_is_limit", ["ordinal"]], ["add", "theorem", "not_succ_of_is_limit", ["ordinal"]], ["add", "theorem", "one_add_of_omega_le", ["ordinal"]], ["add", "theorem", "one_add_omega", ["ordinal"]], ["add", "theorem", "one_dvd", ["ordinal"]], ["add", "theorem", "one_eq_lift_type_unit", ["ordinal"]], ["add", "theorem", "one_eq_type_unit", ["ordinal"]], ["add", "theorem", "one_mul", ["ordinal"]], ["add", "theorem", "pos_iff_ne_zero", ["ordinal"]], ["add", "def", "power", ["ordinal"]], ["add", "theorem", "power_le_of_limit", ["ordinal"]], ["add", "theorem", "power_limit", ["ordinal"]], ["add", "theorem", "power_succ", ["ordinal"]], ["add", "theorem", "power_zero", ["ordinal"]], ["add", "theorem", "sub_le_self", ["ordinal"]], ["add", "theorem", "sub_self", ["ordinal"]], ["add", "theorem", "sub_zero", ["ordinal"]], ["add", "theorem", "succ_lt_of_is_limit", ["ordinal"]], ["add", "theorem", "type_add", ["ordinal"]], ["add", "theorem", "type_eq_zero_iff_empty", ["ordinal"]], ["add", "theorem", "type_mul", ["ordinal"]], ["add", "theorem", "typein_apply", ["ordinal"]], ["add", "theorem", "zero_div", ["ordinal"]], ["add", "theorem", "zero_dvd", ["ordinal"]], ["add", "theorem", "zero_eq_lift_type_empty", ["ordinal"]], ["add", "theorem", "zero_eq_type_empty", ["ordinal"]], ["add", "theorem", "zero_mod", ["ordinal"]], ["add", "theorem", "zero_mul", ["ordinal"]], ["add", "theorem", "zero_sub", ["ordinal"]]]}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["add", "theorem", "lex_def", ["prod"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": [["add", "theorem", "mk_eq_mk", ["subtype"]]]}, {"oldPath": "data/sum.lean", "newPath": "data/sum.lean", "changes": [["add", "theorem", "inl_ne_inr", ["sum"]], ["add", "theorem", "inr_ne_inl", ["sum"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["del", "def", "is_well_order", ["empty_relation"]]]}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": [["add", "theorem", "nat_gt", ["order_embedding"]], ["add", "theorem", "order_embedding_apply", ["subrel"]], ["add", "theorem", "subrel_val", []]]}]}, {"timestamp": 1513839094, "sha": "5f4d8909", "message": "feat(data/ordinal): omega is least limit ordinal", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["mod", "theorem", "le_iff_le_iff_lt_iff_lt", []], ["mod", "theorem", "le_imp_le_iff_lt_imp_lt", []]]}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "le_lift_iff", ["cardinal"]], ["add", "theorem", "lift_omega", ["cardinal"]], ["add", "theorem", "lt_lift_iff", ["cardinal"]], ["add", "theorem", "lt_omega_iff_finite", ["cardinal"]], ["add", "theorem", "lt_omega_iff_fintype", ["cardinal"]]]}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["mod", "theorem", "card_ord", ["cardinal"]], ["add", "theorem", "lift_ord", ["cardinal"]], ["mod", "theorem", "ord_le_ord", ["cardinal"]], ["mod", "theorem", "ord_lt_ord", ["cardinal"]], ["mod", "theorem", "ord_nat", ["cardinal"]], ["add", "theorem", "ord_omega", ["cardinal"]], ["add", "theorem", "card_eq_nat", ["ordinal"]], ["add", "theorem", "card_le_nat", ["ordinal"]], ["add", "theorem", "card_lt_nat", ["ordinal"]], ["add", "theorem", "fintype_card", ["ordinal"]], ["add", "theorem", "le_lift_iff", ["ordinal"]], ["add", "theorem", "lift_down'", ["ordinal"]], ["mod", "theorem", "lift_down", ["ordinal"]], ["add", "theorem", "lift_nat_cast", ["ordinal"]], ["add", "theorem", "lift_type_fin", ["ordinal"]], ["add", "theorem", "lt_lift_iff", ["ordinal"]], ["add", "theorem", "lt_omega", ["ordinal"]], ["add", "theorem", "nat_cast_inj", ["ordinal"]], ["add", "theorem", "nat_cast_le", ["ordinal"]], ["add", "theorem", "nat_cast_lt", ["ordinal"]], ["add", "theorem", "nat_le_card", ["ordinal"]], ["add", "theorem", "nat_lt_card", ["ordinal"]], ["add", "theorem", "nat_lt_limit", ["ordinal"]], ["add", "theorem", "nat_lt_omega", ["ordinal"]], ["add", "theorem", "omega_is_limit", ["ordinal"]], ["add", "theorem", "omega_le", ["ordinal"]], ["add", "theorem", "omega_le_of_is_limit", ["ordinal"]], ["add", "theorem", "type_fin", ["ordinal"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "false_ne_true", []], ["del", "theorem", "false_neq_true", []], ["mod", "theorem", "iff_of_eq", []]]}, {"oldPath": "logic/schroeder_bernstein.lean", "newPath": "logic/schroeder_bernstein.lean", "changes": [["mod", "theorem", "injective_min", ["function", "embedding"]]]}, {"oldPath": "order/order_iso.lean", "newPath": "order/order_iso.lean", "changes": [["add", "def", "order_embedding", ["fin", "val"]], ["add", "def", "order_embedding", ["fin_fin"]], ["add", "def", "to_order_embedding", ["order_iso"]]]}]}, {"timestamp": 1513812317, "sha": "49a63b74", "message": "refactor(data/ordinal): rearrange files, more cofinality", "changes": [{"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["del", "theorem", "antisymm", ["cardinal", "embedding"]], ["del", "def", "arrow_congr_left", ["cardinal", "embedding"]], ["del", "def", "arrow_congr_right", ["cardinal", "embedding"]], ["del", "theorem", "coe_fn_mk", ["cardinal", "embedding"]], ["del", "theorem", "inj'", ["cardinal", "embedding"]], ["del", "theorem", "injective_min", ["cardinal", "embedding"]], ["del", "def", "prod_congr", ["cardinal", "embedding"]], ["del", "theorem", "refl_apply", ["cardinal", "embedding"]], ["del", "theorem", "schroeder_bernstein", ["cardinal", "embedding"]], ["del", "def", "sum_congr", ["cardinal", "embedding"]], ["del", "theorem", "sum_congr_apply_inl", ["cardinal", "embedding"]], ["del", "theorem", "sum_congr_apply_inr", ["cardinal", "embedding"]], ["del", "theorem", "to_fun_eq_coe", ["cardinal", "embedding"]], ["del", "theorem", "total", ["cardinal", "embedding"]], ["del", "theorem", "trans_apply", ["cardinal", "embedding"]], ["del", "structure", "embedding", ["cardinal"]], ["add", "theorem", "lift_down", ["cardinal"]], ["add", "theorem", "lt_omega", ["cardinal"]], ["del", "theorem", "to_embedding_coe_fn", ["equiv"]]]}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["del", "def", "is_well_order", ["empty_relation"]], ["del", "def", "swap", ["is_irrefl"]], ["del", "def", "is_irrefl_of_is_asymm", []], ["del", "def", "swap", ["is_strict_order"]], ["del", "def", "swap", ["is_strict_total_order'"]], ["del", "def", "is_strict_weak_order_of_is_order_connected", []], ["del", "def", "swap", ["is_trans"]], ["del", "def", "swap", ["is_trichotomous"]], ["del", "def", "preimage", ["order"]], ["del", "def", "cod_restrict", ["order_embedding"]], ["del", "theorem", "cod_restrict_apply", ["order_embedding"]], ["del", "theorem", "coe_fn_mk", ["order_embedding"]], ["del", "theorem", "coe_fn_to_embedding", ["order_embedding"]], ["del", "theorem", "eq_of_to_fun_eq", ["order_embedding"]], ["del", "theorem", "eq_preimage", ["order_embedding"]], ["del", "theorem", "nat_lt", ["order_embedding"]], ["del", "def", "of_monotone", ["order_embedding"]], ["del", "theorem", "of_monotone_coe", ["order_embedding"]], ["del", "theorem", "ord'", ["order_embedding"]], ["del", "def", "preimage", ["order_embedding"]], ["del", "theorem", "refl_apply", ["order_embedding"]], ["del", "def", "rsymm", ["order_embedding"]], ["del", "theorem", "trans_apply", ["order_embedding"]], ["del", "theorem", "well_founded_iff_no_descending_seq", ["order_embedding"]], ["del", "structure", "order_embedding", []], ["del", "theorem", "apply_inverse_apply", ["order_iso"]], ["del", "theorem", "coe_coe_fn", ["order_iso"]], ["del", "theorem", "coe_fn_mk", ["order_iso"]], ["del", "theorem", "coe_fn_symm_mk", ["order_iso"]], ["del", "theorem", "coe_fn_to_equiv", ["order_iso"]], ["del", "theorem", "eq_of_to_fun_eq", ["order_iso"]], ["del", "theorem", "inverse_apply_apply", ["order_iso"]], ["del", "def", "of_surjective", ["order_iso"]], ["del", "theorem", "of_surjective_coe", ["order_iso"]], ["del", "theorem", "ord'", ["order_iso"]], ["del", "def", "preimage", ["order_iso"]], ["del", "theorem", "prod_lex_congr", ["order_iso"]], ["del", "theorem", "refl_apply", ["order_iso"]], ["del", "theorem", "sum_lex_congr", ["order_iso"]], ["del", "theorem", "trans_apply", ["order_iso"]], ["del", "structure", "order_iso", []], ["mod", "theorem", "card_omega", ["ordinal"]], ["add", "theorem", "cof_add", ["ordinal"]], ["add", "theorem", "cof_cof", ["ordinal"]], ["add", "theorem", "cof_eq", ["ordinal"]], ["mod", "theorem", "cof_eq_one_iff_is_succ", ["ordinal"]], ["del", "theorem", "exists_of_cof", ["ordinal"]], ["add", "theorem", "lift_card", ["ordinal"]], ["add", "theorem", "lift_is_limit", ["ordinal"]], ["add", "theorem", "lift_is_succ", ["ordinal"]], ["add", "theorem", "lift_pred", ["ordinal"]], ["add", "theorem", "lift_succ", ["ordinal"]], ["add", "theorem", "ord_cof_eq", ["ordinal"]], ["add", "theorem", "type_ne_zero_iff_nonempty", ["ordinal"]], ["del", "def", "set_coe_embedding", []], ["del", "def", "subrel", []], ["del", "theorem", "has_min", ["well_founded"]], ["del", "def", "min", ["well_founded"]], ["del", "theorem", "min_mem", ["well_founded"]], ["del", "theorem", "not_lt_min", ["well_founded"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["mod", "theorem", "finite_image", ["set"]]]}, {"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": [["mod", "theorem", "inj_iff", ["psigma", "mk"]], ["add", "theorem", "coe_eta", ["subtype"]], ["add", "theorem", "coe_mk", ["subtype"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "fst", ["Exists"]], ["add", "theorem", "snd", ["Exists"]]]}, {"oldPath": null, "newPath": "logic/embedding.lean", "changes": [["add", "theorem", "to_embedding_coe_fn", ["equiv"]], ["add", "def", "arrow_congr_left", ["function", "embedding"]], ["add", "def", "cod_restrict", ["function", "embedding"]], ["add", "theorem", "cod_restrict_apply", ["function", "embedding"]], ["add", "theorem", "coe_fn_mk", ["function", "embedding"]], ["add", "theorem", "inj'", ["function", "embedding"]], ["add", "def", "prod_congr", ["function", "embedding"]], ["add", "theorem", "refl_apply", ["function", "embedding"]], ["add", "def", "sum_congr", ["function", "embedding"]], ["add", "theorem", "sum_congr_apply_inl", ["function", "embedding"]], ["add", "theorem", "sum_congr_apply_inr", ["function", "embedding"]], ["add", "theorem", "to_fun_eq_coe", ["function", "embedding"]], ["add", "theorem", "trans_apply", ["function", "embedding"]], ["add", "structure", "embedding", ["function"]]]}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["mod", "def", "decidable_eq", ["function", "injective"]], ["mod", "theorem", "eq_iff", ["function", "injective"]], ["mod", "theorem", "injective_of_partial_inv", ["function"]], ["mod", "theorem", "injective_of_partial_inv_right", ["function"]], ["mod", "def", "is_partial_inv", ["function"]], ["mod", "theorem", "partial_inv_of_injective", ["function"]], ["mod", "theorem", "surj_inv_eq", ["function"]]]}, {"oldPath": null, "newPath": "logic/schroeder_bernstein.lean", "changes": [["add", "theorem", "antisymm", ["function", "embedding"]], ["add", "theorem", "injective_min", ["function", "embedding"]], ["add", "theorem", "schroeder_bernstein", ["function", "embedding"]], ["add", "theorem", "total", ["function", "embedding"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "def", "is_well_order", ["empty_relation"]], ["add", "def", "swap", ["is_irrefl"]], ["add", "def", "is_irrefl_of_is_asymm", []], ["add", "theorem", "neg_trans", ["is_order_connected"]], ["add", "def", "swap", ["is_strict_order"]], ["add", "def", "swap", ["is_strict_total_order'"]], ["add", "def", "is_strict_weak_order_of_is_order_connected", []], ["add", "def", "swap", ["is_trans"]], ["add", "def", "swap", ["is_trichotomous"]], ["add", "theorem", "has_min", ["well_founded"]], ["add", "theorem", "min_mem", ["well_founded"]], ["add", "theorem", "not_lt_min", ["well_founded"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": null, "newPath": "order/order_iso.lean", "changes": [["add", "def", "preimage", ["order"]], ["add", "def", "cod_restrict", ["order_embedding"]], ["add", "theorem", "cod_restrict_apply", ["order_embedding"]], ["add", "theorem", "coe_fn_mk", ["order_embedding"]], ["add", "theorem", "coe_fn_to_embedding", ["order_embedding"]], ["add", "theorem", "eq_of_to_fun_eq", ["order_embedding"]], ["add", "theorem", "eq_preimage", ["order_embedding"]], ["add", "theorem", "nat_lt", ["order_embedding"]], ["add", "def", "of_monotone", ["order_embedding"]], ["add", "theorem", "of_monotone_coe", ["order_embedding"]], ["add", "theorem", "ord'", ["order_embedding"]], ["add", "def", "preimage", ["order_embedding"]], ["add", "theorem", "refl_apply", ["order_embedding"]], ["add", "def", "rsymm", ["order_embedding"]], ["add", "theorem", "trans_apply", ["order_embedding"]], ["add", "theorem", "well_founded_iff_no_descending_seq", ["order_embedding"]], ["add", "structure", "order_embedding", []], ["add", "theorem", "apply_inverse_apply", ["order_iso"]], ["add", "theorem", "coe_coe_fn", ["order_iso"]], ["add", "theorem", "coe_fn_mk", ["order_iso"]], ["add", "theorem", "coe_fn_symm_mk", ["order_iso"]], ["add", "theorem", "coe_fn_to_equiv", ["order_iso"]], ["add", "theorem", "eq_of_to_fun_eq", ["order_iso"]], ["add", "theorem", "inverse_apply_apply", ["order_iso"]], ["add", "theorem", "of_surjective_coe", ["order_iso"]], ["add", "theorem", "ord'", ["order_iso"]], ["add", "def", "preimage", ["order_iso"]], ["add", "theorem", "prod_lex_congr", ["order_iso"]], ["add", "theorem", "refl_apply", ["order_iso"]], ["add", "theorem", "sum_lex_congr", ["order_iso"]], ["add", "theorem", "trans_apply", ["order_iso"]], ["add", "structure", "order_iso", []], ["add", "def", "set_coe_embedding", []], ["add", "def", "subrel", []]]}]}, {"timestamp": 1513659583, "sha": "7726a92f", "message": "feat(data/ordinal): sup, cofinality, subtraction", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "le_of_forall_le", []], ["add", "theorem", "le_of_forall_lt", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "zero_le_mul", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["del", "theorem", "zero_le_mul", []]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["mod", "theorem", "le_min", ["cardinal"]], ["add", "theorem", "le_one_iff_subsingleton", ["cardinal"]], ["mod", "theorem", "lift_min", ["cardinal"]], ["mod", "def", "min", ["cardinal"]], ["mod", "theorem", "min_eq", ["cardinal"]], ["mod", "theorem", "min_le", ["cardinal"]], ["add", "theorem", "nat_lt_omega", ["cardinal"]], ["del", "theorem", "nat_lt_ω", ["cardinal"]], ["mod", "theorem", "ne_zero_iff_nonempty", ["cardinal"]], ["add", "def", "omega", ["cardinal"]], ["mod", "theorem", "prop_eq_two", ["cardinal"]], ["add", "theorem", "succ_zero", ["cardinal"]], ["add", "theorem", "zero_lt_one", ["cardinal"]], ["del", "def", "ω", ["cardinal"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "card_of_subtype", ["fintype"]], ["add", "theorem", "subtype_card", ["fintype"]]]}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["add", "def", "ord_eq_min", ["cardinal"]], ["del", "theorem", "ord_eq_min", ["cardinal"]], ["add", "theorem", "ord_nat", ["cardinal"]], ["add", "theorem", "aux", ["order_iso", "cof"]], ["add", "theorem", "cof", ["order_iso"]], ["add", "theorem", "add_le_add_right", ["ordinal"]], ["add", "theorem", "add_lt_add_iff_left", ["ordinal"]], ["add", "theorem", "add_sub_cancel", ["ordinal"]], ["add", "theorem", "aleph'_succ", ["ordinal"]], ["mod", "def", "aleph", ["ordinal"]], ["add", "def", "bsup", ["ordinal"]], ["add", "theorem", "bsup_le", ["ordinal"]], ["add", "theorem", "card_eq_zero", ["ordinal"]], ["add", "theorem", "card_omega", ["ordinal"]], ["add", "def", "cof", ["ordinal"]], ["add", "theorem", "cof_eq_one_iff_is_succ", ["ordinal"]], ["add", "theorem", "cof_eq_zero", ["ordinal"]], ["add", "theorem", "cof_le_card", ["ordinal"]], ["add", "theorem", "cof_succ", ["ordinal"]], ["add", "theorem", "cof_type_le", ["ordinal"]], ["add", "theorem", "cof_zero", ["ordinal"]], ["add", "theorem", "exists_of_cof", ["ordinal"]], ["add", "def", "is_limit", ["ordinal"]], ["mod", "theorem", "le_add_left", ["ordinal"]], ["add", "theorem", "le_add_sub", ["ordinal"]], ["add", "theorem", "le_bsup", ["ordinal"]], ["add", "theorem", "le_cof_type", ["ordinal"]], ["mod", "theorem", "le_min", ["ordinal"]], ["add", "theorem", "le_sup", ["ordinal"]], ["mod", "theorem", "le_total", ["ordinal"]], ["mod", "theorem", "lift_min", ["ordinal"]], ["add", "theorem", "lift_omega", ["ordinal"]], ["del", "theorem", "lift_ω", ["ordinal"]], ["add", "def", "limit_rec_on", ["ordinal"]], ["add", "theorem", "lt_cof_type", ["ordinal"]], ["add", "theorem", "lt_of_add_lt_add_right", ["ordinal"]], ["add", "theorem", "lt_pred", ["ordinal"]], ["add", "theorem", "lt_sub", ["ordinal"]], ["mod", "def", "min", ["ordinal"]], ["mod", "theorem", "min_eq", ["ordinal"]], ["mod", "theorem", "min_le", ["ordinal"]], ["add", "def", "omega", ["ordinal"]], ["add", "theorem", "pos_of_is_limit", ["ordinal"]], ["add", "def", "pred", ["ordinal"]], ["add", "theorem", "pred_eq_iff_not_succ", ["ordinal"]], ["add", "theorem", "pred_le", ["ordinal"]], ["add", "theorem", "pred_le_self", ["ordinal"]], ["add", "theorem", "pred_lt_iff_is_succ", ["ordinal"]], ["add", "theorem", "pred_succ", ["ordinal"]], ["add", "def", "sub", ["ordinal"]], ["add", "theorem", "sub_le", ["ordinal"]], ["add", "theorem", "succ_inj", ["ordinal"]], ["add", "theorem", "succ_le", ["ordinal"]], ["add", "theorem", "succ_le_succ", ["ordinal"]], ["add", "theorem", "succ_lt_of_not_succ", ["ordinal"]], ["add", "theorem", "succ_lt_succ", ["ordinal"]], ["add", "theorem", "succ_nat_cast", ["ordinal"]], ["add", "theorem", "succ_ne_zero", ["ordinal"]], ["add", "theorem", "succ_pred_iff_is_succ", ["ordinal"]], ["add", "theorem", "succ_zero", ["ordinal"]], ["add", "def", "sup", ["ordinal"]], ["add", "theorem", "sup_le", ["ordinal"]], ["add", "theorem", "zero_or_succ_or_limit", ["ordinal"]], ["del", "def", "ω", ["ordinal"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "card_fintype_insert'", ["set"]], ["add", "theorem", "card_fintype_of_finset'", ["set"]], ["add", "theorem", "card_fintype_of_finset", ["set"]], ["add", "theorem", "card_insert", ["set"]], ["add", "theorem", "card_singleton", ["set"]], ["add", "theorem", "empty_card", ["set"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["del", "theorem", "eq_of_le_of_forall_ge", []], ["add", "theorem", "eq_of_le_of_forall_ge_of_dense", []], ["del", "theorem", "eq_of_le_of_forall_le", []], ["add", "theorem", "eq_of_le_of_forall_le_of_dense", []], ["del", "theorem", "le_of_forall_ge", []], ["add", "theorem", "le_of_forall_ge_of_dense", []], ["del", "theorem", "le_of_forall_le", []], ["add", "theorem", "le_of_forall_le_of_dense", []]]}]}, {"timestamp": 1513586321, "sha": "f6bbca71", "message": "feat(data/ordinal): universe lifts, alephs", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "card_sigma", ["finset"]]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "smul_eq_mul", ["nat"]]]}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "add_one_le_succ", ["cardinal"]], ["add", "theorem", "fintype_card", ["cardinal"]], ["add", "theorem", "le_mk_iff_exists_set", ["cardinal"]], ["add", "def", "lift", ["cardinal"]], ["add", "theorem", "lift_add", ["cardinal"]], ["add", "theorem", "lift_id", ["cardinal"]], ["add", "theorem", "lift_inj", ["cardinal"]], ["add", "theorem", "lift_le", ["cardinal"]], ["add", "theorem", "lift_lift", ["cardinal"]], ["add", "theorem", "lift_lt", ["cardinal"]], ["add", "theorem", "lift_min", ["cardinal"]], ["add", "theorem", "lift_mk", ["cardinal"]], ["add", "theorem", "lift_mk_eq", ["cardinal"]], ["add", "theorem", "lift_mk_fin", ["cardinal"]], ["add", "theorem", "lift_mk_le", ["cardinal"]], ["add", "theorem", "lift_mul", ["cardinal"]], ["add", "theorem", "lift_nat_cast", ["cardinal"]], ["add", "theorem", "lift_one", ["cardinal"]], ["add", "theorem", "lift_power", ["cardinal"]], ["add", "theorem", "lift_umax", ["cardinal"]], ["add", "theorem", "lift_zero", ["cardinal"]], ["add", "theorem", "lt_succ_self", ["cardinal"]], ["add", "theorem", "mk_def", ["cardinal"]], ["add", "theorem", "mk_fin", ["cardinal"]], ["add", "theorem", "nat_cast_inj", ["cardinal"]], ["add", "theorem", "nat_cast_le", ["cardinal"]], ["add", "theorem", "nat_cast_lt", ["cardinal"]], ["add", "theorem", "nat_lt_ω", ["cardinal"]], ["add", "theorem", "nat_succ", ["cardinal"]], ["add", "def", "succ", ["cardinal"]], ["add", "theorem", "succ_le", ["cardinal"]], ["mod", "def", "ω", ["cardinal"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "bind_mono", ["finset"]], ["add", "theorem", "card_image_of_inj_on", ["finset"]], ["add", "theorem", "card_image_of_injective", ["finset"]], ["add", "theorem", "card_product", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "theorem", "eq_univ_iff_forall", ["finset"]], ["mod", "theorem", "mem_univ", ["finset"]], ["mod", "theorem", "mem_univ_val", ["finset"]], ["add", "theorem", "card_bool", ["fintype"]], ["add", "theorem", "card_congr", ["fintype"]], ["add", "theorem", "card_empty", ["fintype"]], ["add", "theorem", "card_eq", ["fintype"]], ["add", "theorem", "card_fin", ["fintype"]], ["add", "theorem", "card_prod", ["fintype"]], ["add", "theorem", "card_sigma", ["fintype"]], ["add", "theorem", "card_sum", ["fintype"]], ["add", "theorem", "card_ulift", ["fintype"]], ["add", "theorem", "card_unit", ["fintype"]], ["mod", "def", "of_equiv", ["fintype"]], ["add", "theorem", "of_equiv_card", ["fintype"]], ["add", "theorem", "univ_bool", ["fintype"]], ["add", "theorem", "univ_empty", ["fintype"]], ["add", "theorem", "univ_unit", ["fintype"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "length_pmap", ["list"]], ["add", "theorem", "nth_le_index_of", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "card_bind", ["multiset"]], ["add", "theorem", "card_join", ["multiset"]], ["add", "theorem", "card_map", ["multiset"]], ["add", "theorem", "card_pmap", ["multiset"]], ["add", "theorem", "card_product", ["multiset"]], ["add", "theorem", "card_sigma", ["multiset"]]]}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["add", "theorem", "init", ["cardinal", "aleph_idx"]], ["add", "def", "initial_seg", ["cardinal", "aleph_idx"]], ["add", "theorem", "initial_seg_coe", ["cardinal", "aleph_idx"]], ["add", "def", "order_iso", ["cardinal", "aleph_idx"]], ["add", "theorem", "order_iso_coe", ["cardinal", "aleph_idx"]], ["add", "def", "aleph_idx", ["cardinal"]], ["add", "theorem", "aleph_idx_le", ["cardinal"]], ["add", "theorem", "aleph_idx_lt", ["cardinal"]], ["add", "theorem", "card_ord", ["cardinal"]], ["add", "theorem", "lt_ord", ["cardinal"]], ["add", "def", "order_embedding", ["cardinal", "ord"]], ["add", "theorem", "order_embedding_coe", ["cardinal", "ord"]], ["mod", "theorem", "ord_eq_min", ["cardinal"]], ["mod", "theorem", "ord_le", ["cardinal"]], ["mod", "theorem", "ord_le_ord", ["cardinal"]], ["add", "theorem", "ord_le_type", ["cardinal"]], ["add", "theorem", "ord_lt_ord", ["cardinal"]], ["add", "theorem", "ord_zero", ["cardinal"]], ["add", "def", "cof", ["order"]], ["del", "theorem", "of_surjective_apply", ["order_iso"]], ["add", "theorem", "of_surjective_coe", ["order_iso"]], ["add", "theorem", "prod_lex_congr", ["order_iso"]], ["add", "theorem", "sum_lex_congr", ["order_iso"]], ["add", "def", "order_iso", ["ordinal", "aleph'"]], ["add", "theorem", "order_iso_coe", ["ordinal", "aleph'"]], ["add", "def", "aleph'", ["ordinal"]], ["add", "theorem", "aleph'_aleph_idx", ["ordinal"]], ["add", "theorem", "aleph'_le", ["ordinal"]], ["add", "theorem", "aleph'_lt", ["ordinal"]], ["add", "def", "aleph", ["ordinal"]], ["add", "theorem", "aleph_idx_aleph'", ["ordinal"]], ["add", "theorem", "card_nat", ["ordinal"]], ["add", "theorem", "card_type", ["ordinal"]], ["add", "def", "initial_seg", ["ordinal", "lift"]], ["add", "theorem", "initial_seg_coe", ["ordinal", "lift"]], ["add", "def", "principal_seg", ["ordinal", "lift"]], ["add", "theorem", "principal_seg_coe", ["ordinal", "lift"]], ["add", "theorem", "principal_seg_top'", ["ordinal", "lift"]], ["add", "theorem", "principal_seg_top", ["ordinal", "lift"]], ["add", "def", "lift", ["ordinal"]], ["add", "theorem", "lift_add", ["ordinal"]], ["add", "theorem", "lift_down", ["ordinal"]], ["add", "theorem", "lift_id", ["ordinal"]], ["add", "theorem", "lift_inj", ["ordinal"]], ["add", "theorem", "lift_le", ["ordinal"]], ["add", "theorem", "lift_lift", ["ordinal"]], ["add", "theorem", "lift_lt", ["ordinal"]], ["add", "theorem", "lift_min", ["ordinal"]], ["add", "theorem", "lift_mul", ["ordinal"]], ["add", "theorem", "lift_one", ["ordinal"]], ["add", "theorem", "lift_type_eq", ["ordinal"]], ["add", "theorem", "lift_type_le", ["ordinal"]], ["add", "theorem", "lift_type_lt", ["ordinal"]], ["add", "theorem", "lift_umax", ["ordinal"]], ["add", "theorem", "lift_zero", ["ordinal"]], ["add", "theorem", "lift_ω", ["ordinal"]], ["add", "theorem", "lt_succ_self", ["ordinal"]], ["add", "theorem", "ord_card_le", ["ordinal"]], ["add", "theorem", "type_le'", ["ordinal"]], ["del", "theorem", "type_le_of_order_embedding", ["ordinal"]], ["add", "def", "principal_seg", ["ordinal", "typein"]], ["add", "theorem", "principal_seg_coe", ["ordinal", "typein"]], ["add", "def", "ω", ["ordinal"]]]}]}, {"timestamp": 1513519902, "sha": "52330fa0", "message": "fix(data/ordinal): update to lean", "changes": [{"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": []}]}, {"timestamp": 1513486065, "sha": "dba8d0e5", "message": "fix(data/ordinal): fix unsound proof\nhere's hoping lean will notice that the last proof is not correct", "changes": [{"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": []}]}, {"timestamp": 1513478725, "sha": "b19c222c", "message": "feat(data/ordinal): ordinal collapse, ordinals ordering,", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "sum_congr_apply_inl", ["cardinal", "embedding"]], ["add", "theorem", "sum_congr_apply_inr", ["cardinal", "embedding"]], ["add", "def", "mk", ["cardinal"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "def", "empty_prod", ["equiv"]], ["add", "def", "empty_sum", ["equiv"]], ["add", "theorem", "prod_congr_apply", ["equiv"]], ["add", "def", "prod_empty", ["equiv"]], ["del", "def", "prod_empty_left", ["equiv"]], ["del", "def", "prod_empty_right", ["equiv"]], ["add", "def", "prod_unit", ["equiv"]], ["del", "def", "prod_unit_left", ["equiv"]], ["del", "def", "prod_unit_right", ["equiv"]], ["add", "theorem", "sum_assoc_apply_in1", ["equiv"]], ["add", "theorem", "sum_assoc_apply_in2", ["equiv"]], ["add", "theorem", "sum_assoc_apply_in3", ["equiv"]], ["add", "theorem", "sum_congr_apply_inl", ["equiv"]], ["add", "theorem", "sum_congr_apply_inr", ["equiv"]], ["add", "def", "sum_empty", ["equiv"]], ["del", "def", "sum_empty_left", ["equiv"]], ["del", "def", "sum_empty_right", ["equiv"]], ["add", "def", "unit_prod", ["equiv"]]]}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["add", "def", "ord", ["cardinal"]], ["add", "theorem", "ord_eq", ["cardinal"]], ["add", "theorem", "ord_eq_min", ["cardinal"]], ["add", "theorem", "ord_le", ["cardinal"]], ["add", "theorem", "ord_le_ord", ["cardinal"]], ["add", "def", "le_add", ["initial_seg"]], ["add", "theorem", "le_add_apply", ["initial_seg"]], ["add", "def", "collapse", ["order_embedding"]], ["add", "theorem", "lt", ["order_embedding", "collapse_F"]], ["add", "theorem", "not_lt", ["order_embedding", "collapse_F"]], ["add", "def", "collapse_F", ["order_embedding"]], ["add", "theorem", "collapse_apply", ["order_embedding"]], ["add", "def", "of_monotone", ["order_embedding"]], ["del", "theorem", "of_monotone", ["order_embedding"]], ["add", "theorem", "of_monotone_coe", ["order_embedding"]], ["add", "def", "preimage", ["order_embedding"]], ["add", "theorem", "add_le_add_iff_left", ["ordinal"]], ["add", "theorem", "add_le_add_left", ["ordinal"]], ["add", "theorem", "add_succ", ["ordinal"]], ["add", "theorem", "card_add", ["ordinal"]], ["add", "theorem", "card_le_card", ["ordinal"]], ["add", "theorem", "card_one", ["ordinal"]], ["add", "theorem", "card_zero", ["ordinal"]], ["add", "theorem", "le_add_left", ["ordinal"]], ["add", "theorem", "le_add_right", ["ordinal"]], ["add", "theorem", "le_min", ["ordinal"]], ["add", "theorem", "le_total", ["ordinal"]], ["add", "def", "min", ["ordinal"]], ["add", "theorem", "min_eq", ["ordinal"]], ["add", "theorem", "min_le", ["ordinal"]], ["add", "def", "succ", ["ordinal"]], ["add", "theorem", "type_le_of_order_embedding", ["ordinal"]], ["add", "theorem", "zero_le", ["ordinal"]], ["del", "def", "is_well_order", ["prod", "lex"]], ["del", "def", "is_well_order", ["sum", "lex"]], ["add", "theorem", "has_min", ["well_founded"]], ["add", "def", "min", ["well_founded"]], ["add", "theorem", "min_mem", ["well_founded"]], ["add", "theorem", "not_lt_min", ["well_founded"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "mem_range", ["set"]], ["add", "theorem", "mem_range_self", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "def", "elim", ["empty"]], ["del", "theorem", "elim", ["empty"]]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": []}, {"oldPath": "tactic/alias.lean", "newPath": "tactic/alias.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1513377911, "sha": "95507bfb", "message": "chore(algebra/module): update to lean\ninout => out_param", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}]}, {"timestamp": 1513345209, "sha": "01f1d230", "message": "refactor(style.md): copy naming conventions from the library_dev repository.", "changes": [{"oldPath": "style.md", "newPath": "style.md", "changes": []}]}, {"timestamp": 1513286954, "sha": "79483182", "message": "feat(logic/basic): add rewrite rules for nonempty", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "nonempty_pi", ["classical"]], ["add", "theorem", "exists", ["nonempty"]], ["add", "theorem", "forall", ["nonempty"]], ["add", "theorem", "nonempty_Prop", []], ["add", "theorem", "nonempty_empty", []], ["add", "theorem", "nonempty_plift", []], ["add", "theorem", "nonempty_pprod", []], ["add", "theorem", "nonempty_prod", []], ["add", "theorem", "nonempty_psigma", []], ["add", "theorem", "nonempty_psum", []], ["add", "theorem", "nonempty_sigma", []], ["add", "theorem", "nonempty_subtype", []], ["add", "theorem", "nonempty_sum", []], ["add", "theorem", "nonempty_ulift", []]]}]}, {"timestamp": 1513255811, "sha": "d27f7ac4", "message": "chore(style.md): rename and some cleanup", "changes": [{"oldPath": "library_style.md", "newPath": "style.md", "changes": []}]}, {"timestamp": 1513255371, "sha": "f8476fd9", "message": "feat(library_style): resurrecting Jeremy's library_style.org as md file", "changes": [{"oldPath": null, "newPath": "library_style.md", "changes": []}]}, {"timestamp": 1513251548, "sha": "0f50ba7a", "message": "feat(.travis.yml): export and run leanchecker\nThis should detect multiple definitions with the same name as in #27.", "changes": [{"oldPath": ".travis.yml", "newPath": ".travis.yml", "changes": []}]}, {"timestamp": 1513249981, "sha": "86e494d9", "message": "fix(data/encodable): make decidable_eq_of_encodable priority 0", "changes": [{"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}]}, {"timestamp": 1513249721, "sha": "2dbf07a8", "message": "chore(.): adapt to change `by_cases t with h` to `by_cases h : t` 746134d11ceec378a53ffd3b7ab8626fb291f3bd", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "theorem", "image_apply", ["equiv", "set"]], ["mod", "theorem", "range_apply", ["equiv", "set"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": []}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/modeq.lean", "newPath": "data/nat/modeq.lean", "changes": []}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": []}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": []}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}]}, {"timestamp": 1513186462, "sha": "ea197760", "message": "refactor(data/finsupp): generalize module construction for finsupp", "changes": [{"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": [["del", "theorem", "smul_apply", ["lc"]], ["del", "theorem", "sum_smul_index", ["lc"]]]}, {"oldPath": "algebra/linear_algebra/multivariate_polynomial.lean", "newPath": "algebra/linear_algebra/multivariate_polynomial.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["mod", "theorem", "neg_apply", ["finsupp"]], ["mod", "def", "prod", ["finsupp"]], ["mod", "theorem", "prod_map_range_index", ["finsupp"]], ["mod", "theorem", "prod_neg_index", ["finsupp"]], ["mod", "theorem", "prod_single_index", ["finsupp"]], ["mod", "theorem", "prod_zero_index", ["finsupp"]], ["add", "theorem", "smul_apply", ["finsupp"]], ["mod", "theorem", "sub_apply", ["finsupp"]], ["mod", "def", "sum", ["finsupp"]], ["add", "theorem", "sum_smul_index", ["finsupp"]], ["add", "def", "to_has_scalar", ["finsupp"]], ["add", "def", "to_module", ["finsupp"]]]}]}, {"timestamp": 1513183953, "sha": "b29ab1b5", "message": "feat(data/finsupp): add support_neg", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "support_neg", ["finsupp"]]]}]}, {"timestamp": 1513170594, "sha": "a2d61482", "message": "feat(algebra/linear_algebra): add multivariate polynomials", "changes": [{"oldPath": null, "newPath": "algebra/linear_algebra/multivariate_polynomial.lean", "changes": [["add", "theorem", "bind_singleton2", ["finset"]], ["add", "theorem", "le_sup", ["finset"]], ["add", "def", "sup", ["finset"]], ["add", "theorem", "sup_empty", ["finset"]], ["add", "theorem", "sup_insert", ["finset"]], ["add", "theorem", "sup_le", ["finset"]], ["add", "theorem", "sup_mono", ["finset"]], ["add", "theorem", "sup_mono_fun", ["finset"]], ["add", "theorem", "sup_singleton", ["finset"]], ["add", "theorem", "sup_union", ["finset"]], ["add", "theorem", "single_induction_on", ["finsupp"]], ["add", "def", "C", ["mv_polynomial"]], ["add", "theorem", "C_0", ["mv_polynomial"]], ["add", "theorem", "C_1", ["mv_polynomial"]], ["add", "theorem", "C_mul_monomial", ["mv_polynomial"]], ["add", "def", "X", ["mv_polynomial"]], ["add", "theorem", "X_pow_eq_single", ["mv_polynomial"]], ["add", "def", "degree_of", ["mv_polynomial"]], ["add", "def", "eval", ["mv_polynomial"]], ["add", "theorem", "eval_C", ["mv_polynomial"]], ["add", "theorem", "eval_X", ["mv_polynomial"]], ["add", "theorem", "eval_add", ["mv_polynomial"]], ["add", "theorem", "eval_monomial", ["mv_polynomial"]], ["add", "theorem", "eval_mul", ["mv_polynomial"]], ["add", "theorem", "eval_mul_monomial", ["mv_polynomial"]], ["add", "theorem", "eval_zero", ["mv_polynomial"]], ["add", "theorem", "induction_on", ["mv_polynomial"]], ["add", "def", "monomial", ["mv_polynomial"]], ["add", "theorem", "monomial_add_single", ["mv_polynomial"]], ["add", "theorem", "monomial_eq", ["mv_polynomial"]], ["add", "theorem", "monomial_single_add", ["mv_polynomial"]], ["add", "def", "total_degree", ["mv_polynomial"]], ["add", "def", "vars", ["mv_polynomial"]], ["add", "theorem", "vars_0", ["mv_polynomial"]], ["add", "theorem", "vars_C", ["mv_polynomial"]], ["add", "theorem", "vars_X", ["mv_polynomial"]], ["add", "theorem", "vars_monomial", ["mv_polynomial"]], ["add", "def", "mv_polynomial", []]]}]}, {"timestamp": 1513170557, "sha": "8369c7d8", "message": "feat(data/finsupp): big product over finsupp (big sum is now derived from it)", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "def", "prod", ["finsupp"]], ["add", "theorem", "prod_add_index", ["finsupp"]], ["add", "theorem", "prod_comap_domain_index", ["finsupp"]], ["add", "theorem", "prod_finset_sum_index", ["finsupp"]], ["add", "theorem", "prod_map_domain_index", ["finsupp"]], ["add", "theorem", "prod_map_range_index", ["finsupp"]], ["add", "theorem", "prod_neg_index", ["finsupp"]], ["add", "theorem", "prod_single_index", ["finsupp"]], ["add", "theorem", "prod_subtype_domain_index", ["finsupp"]], ["add", "theorem", "prod_sum_index", ["finsupp"]], ["add", "theorem", "prod_zero_index", ["finsupp"]], ["del", "theorem", "sum_add_index", ["finsupp"]], ["del", "theorem", "sum_comap_domain_index", ["finsupp"]], ["del", "theorem", "sum_finset_sum_index", ["finsupp"]], ["del", "theorem", "sum_map_domain_index", ["finsupp"]], ["del", "theorem", "sum_map_range_index", ["finsupp"]], ["del", "theorem", "sum_neg_index", ["finsupp"]], ["del", "theorem", "sum_single_index", ["finsupp"]], ["del", "theorem", "sum_subtype_domain_index", ["finsupp"]], ["del", "theorem", "sum_sum_index", ["finsupp"]], ["del", "theorem", "sum_zero_index", ["finsupp"]]]}]}, {"timestamp": 1513167705, "sha": "421c332e", "message": "fix(algebra/big_operators): congruence rules need to provide equations for all rewritable positions", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_congr", ["finset"]]]}, {"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": []}]}, {"timestamp": 1513167705, "sha": "81908b04", "message": "chore(algebra/linear_algebra): second isomorphism proof", "changes": [{"oldPath": "algebra/linear_algebra/linear_map_module.lean", "newPath": "algebra/linear_algebra/linear_map_module.lean", "changes": []}]}, {"timestamp": 1513139516, "sha": "a2437102", "message": "feat(data/ordinal): well ordering theorem\nNote to self: this proof seems more cumbersome than it should be. I will see if the proof is easier if we bypass Zorn's lemma.", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "coe_fn_mk", ["cardinal", "embedding"]]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["add", "theorem", "chain_ub", []], ["add", "def", "is_well_order", ["empty_relation"]], ["add", "def", "is_well_order", ["prod", "lex"]], ["add", "def", "is_well_order", ["sum", "lex"]], ["add", "theorem", "well_ordering_thm", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "set_of_subset_set_of", ["set"]]]}, {"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": [["add", "theorem", "inj_iff", ["psigma", "mk"]], ["del", "theorem", "mk_eq_mk_iff", ["psigma"]], ["add", "theorem", "exists", ["sigma"]], ["add", "theorem", "forall", ["sigma"]], ["add", "theorem", "inj_iff", ["sigma", "mk"]], ["del", "theorem", "mk_eq_mk_iff", ["sigma"]], ["add", "theorem", "exists", ["subtype"]], ["add", "theorem", "forall", ["subtype"]]]}, {"oldPath": null, "newPath": "data/sum.lean", "changes": [["add", "theorem", "exists", ["sum"]], ["add", "theorem", "forall", ["sum"]], ["add", "theorem", "inj_iff", ["sum", "inl"]], ["add", "theorem", "inj_iff", ["sum", "inr"]], ["add", "inductive", "lex", ["sum"]], ["add", "theorem", "lex_acc_inl", ["sum"]], ["add", "theorem", "lex_acc_inr", ["sum"]], ["add", "theorem", "lex_inl_inl", ["sum"]], ["add", "theorem", "lex_inr_inl", ["sum"]], ["add", "theorem", "lex_inr_inr", ["sum"]], ["add", "theorem", "lex_wf", ["sum"]], ["add", "def", "swap", ["sum"]], ["add", "theorem", "swap_left_inverse", ["sum"]], ["add", "theorem", "swap_right_inverse", ["sum"]], ["add", "theorem", "swap_swap", ["sum"]], ["add", "theorem", "swap_swap_eq", ["sum"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["del", "theorem", "eq_iff_le_and_le", []], ["del", "theorem", "set_of_subset_set_of", []], ["del", "theorem", "exists", ["sigma"]], ["del", "theorem", "forall", ["sigma"]], ["del", "theorem", "inj_iff", ["sigma", "mk"]], ["del", "theorem", "exists", ["subtype"]], ["del", "theorem", "forall", ["subtype"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": [["add", "theorem", "directed", ["zorn", "chain"]], ["mod", "theorem", "total", ["zorn", "chain"]], ["add", "theorem", "total_of_refl", ["zorn", "chain"]]]}]}, {"timestamp": 1513094786, "sha": "bd99ad7e", "message": "feat(data/fin): fin.succ.inj", "changes": [{"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": []}]}, {"timestamp": 1513035289, "sha": "d3149bad", "message": "fix(*): update to lean", "changes": [{"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": []}, {"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}]}, {"timestamp": 1512994747, "sha": "6b10d8d6", "message": "chore(tests/finish3): rename definition with same name", "changes": [{"oldPath": "tests/finish3.lean", "newPath": "tests/finish3.lean", "changes": [["add", "theorem", "foo':", []], ["del", "theorem", "foo:", []]]}]}, {"timestamp": 1512994747, "sha": "be79f9f3", "message": "chore(data/cardinal): put embedding into cardinal namespace", "changes": [{"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "antisymm", ["cardinal", "embedding"]], ["add", "def", "arrow_congr_left", ["cardinal", "embedding"]], ["add", "def", "arrow_congr_right", ["cardinal", "embedding"]], ["add", "theorem", "inj'", ["cardinal", "embedding"]], ["add", "theorem", "injective_min", ["cardinal", "embedding"]], ["add", "def", "prod_congr", ["cardinal", "embedding"]], ["add", "theorem", "refl_apply", ["cardinal", "embedding"]], ["add", "theorem", "schroeder_bernstein", ["cardinal", "embedding"]], ["add", "def", "sum_congr", ["cardinal", "embedding"]], ["add", "theorem", "to_fun_eq_coe", ["cardinal", "embedding"]], ["add", "theorem", "total", ["cardinal", "embedding"]], ["add", "theorem", "trans_apply", ["cardinal", "embedding"]], ["add", "structure", "embedding", ["cardinal"]], ["del", "theorem", "antisymm", ["embedding"]], ["del", "def", "arrow_congr_left", ["embedding"]], ["del", "def", "arrow_congr_right", ["embedding"]], ["del", "theorem", "inj'", ["embedding"]], ["del", "theorem", "injective_min", ["embedding"]], ["del", "def", "prod_congr", ["embedding"]], ["del", "theorem", "refl_apply", ["embedding"]], ["del", "theorem", "schroeder_bernstein", ["embedding"]], ["del", "def", "sum_congr", ["embedding"]], ["del", "theorem", "to_fun_eq_coe", ["embedding"]], ["del", "theorem", "total", ["embedding"]], ["del", "theorem", "trans_apply", ["embedding"]], ["del", "structure", "embedding", []]]}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": []}]}, {"timestamp": 1513001368, "sha": "ee7ede9e", "message": "feat(algebra/linear_algebra): proof first and second isomorphism laws", "changes": [{"oldPath": "algebra/linear_algebra/linear_map_module.lean", "newPath": "algebra/linear_algebra/linear_map_module.lean", "changes": [["add", "theorem", "some_spec2", ["classical"]], ["add", "theorem", "add_left_iff", ["linear_map", "is_submodule"]], ["add", "theorem", "neg_iff", ["linear_map", "is_submodule"]], ["add", "def", "quot_ker_equiv_im", ["linear_map"]], ["add", "def", "union_quotient_equiv_quotient_inter", ["linear_map"]]]}, {"oldPath": "algebra/linear_algebra/quotient_module.lean", "newPath": "algebra/linear_algebra/quotient_module.lean", "changes": [["add", "theorem", "lift_mk", ["is_submodule", "quotient"]], ["add", "theorem", "quotient_rel_eq", ["is_submodule"]]]}, {"oldPath": "algebra/linear_algebra/subtype_module.lean", "newPath": "algebra/linear_algebra/subtype_module.lean", "changes": [["mod", "theorem", "is_linear_map_subtype_mk", []], ["mod", "theorem", "sub_val", []]]}]}, {"timestamp": 1513001368, "sha": "01c3b8f3", "message": "feature(algebra/linear_algebra): define linear equivalence", "changes": [{"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": [["add", "def", "equiv_of_is_basis", []], ["add", "theorem", "linear_inv", ["linear_equiv"]], ["add", "def", "refl", ["linear_equiv"]], ["add", "def", "symm", ["linear_equiv"]], ["add", "def", "trans", ["linear_equiv"]], ["add", "structure", "linear_equiv", []], ["add", "theorem", "linear_independent_singleton", []], ["add", "theorem", "mem_span_insert", []], ["add", "theorem", "diff_self", ["set"]]]}]}, {"timestamp": 1513001368, "sha": "85a16677", "message": "refactor(data/equiv): state refl, symm, and trans rules for equiv using projection. This gives more powerful rfl rules", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "comp", ["function", "left_inverse"]], ["add", "theorem", "comp", ["function", "right_inverse"]]]}]}, {"timestamp": 1512968866, "sha": "03074f19", "message": "feat(data/ordinal): more ordinals", "changes": [{"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": []}, {"oldPath": "data/ordinal.lean", "newPath": "data/ordinal.lean", "changes": [["add", "def", "cod_restrict", ["initial_seg"]], ["add", "theorem", "cod_restrict_apply", ["initial_seg"]], ["add", "theorem", "coe_coe_fn", ["initial_seg"]], ["add", "def", "le_lt", ["initial_seg"]], ["add", "theorem", "le_lt_apply", ["initial_seg"]], ["add", "def", "lt_or_eq", ["initial_seg"]], ["add", "theorem", "lt_or_eq_apply_left", ["initial_seg"]], ["add", "theorem", "lt_or_eq_apply_right", ["initial_seg"]], ["add", "def", "cod_restrict", ["order_embedding"]], ["add", "theorem", "cod_restrict_apply", ["order_embedding"]], ["add", "def", "enum", ["ordinal"]], ["add", "theorem", "enum_lt", ["ordinal"]], ["add", "theorem", "enum_type", ["ordinal"]], ["add", "theorem", "enum_typein", ["ordinal"]], ["add", "theorem", "induction_on", ["ordinal"]], ["del", "def", "le", ["ordinal"]], ["add", "def", "type", ["ordinal"]], ["add", "theorem", "type_def'", ["ordinal"]], ["add", "theorem", "type_def", ["ordinal"]], ["add", "theorem", "type_eq", ["ordinal"]], ["add", "theorem", "type_le", ["ordinal"]], ["add", "theorem", "type_lt", ["ordinal"]], ["add", "def", "typein", ["ordinal"]], ["add", "theorem", "typein_enum", ["ordinal"]], ["add", "theorem", "typein_inj", ["ordinal"]], ["add", "theorem", "typein_lt_type", ["ordinal"]], ["add", "theorem", "typein_lt_typein", ["ordinal"]], ["add", "theorem", "typein_surj", ["ordinal"]], ["add", "theorem", "typein_top", ["ordinal"]], ["add", "theorem", "wf", ["ordinal"]], ["add", "def", "cod_restrict", ["principal_seg"]], ["add", "theorem", "cod_restrict_apply", ["principal_seg"]], ["add", "theorem", "cod_restrict_top", ["principal_seg"]], ["add", "theorem", "equiv_lt_top", ["principal_seg"]], ["del", "def", "le_lt", ["principal_seg"]], ["del", "theorem", "le_lt_apply", ["principal_seg"]], ["add", "theorem", "lt_le_top", ["principal_seg"]], ["add", "theorem", "lt_top", ["principal_seg"]], ["add", "def", "of_element", ["principal_seg"]], ["add", "theorem", "of_element_apply", ["principal_seg"]], ["add", "theorem", "of_element_top", ["principal_seg"]], ["add", "theorem", "top_eq", ["principal_seg"]], ["add", "theorem", "trans_top", ["principal_seg"]], ["mod", "def", "set_coe_embedding", []], ["add", "def", "subrel", []]]}]}, {"timestamp": 1512894992, "sha": "a758ffb3", "message": "feat(data/ordinal): ordinal numbers", "changes": [{"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["mod", "theorem", "add_mono", ["cardinal"]], ["mod", "theorem", "le_iff_exists_add", ["cardinal"]], ["mod", "theorem", "mul_mono", ["cardinal"]], ["mod", "theorem", "mul_power", ["cardinal"]], ["mod", "theorem", "one_power", ["cardinal"]], ["mod", "theorem", "power_mono_left", ["cardinal"]], ["mod", "theorem", "power_mono_right", ["cardinal"]], ["mod", "theorem", "power_mul", ["cardinal"]], ["mod", "theorem", "power_sum", ["cardinal"]], ["mod", "theorem", "power_zero", ["cardinal"]], ["mod", "theorem", "prop_eq_two", ["cardinal"]], ["mod", "theorem", "zero_le", ["cardinal"]], ["mod", "theorem", "zero_power", ["cardinal"]], ["mod", "theorem", "antisymm", ["embedding"]], ["add", "theorem", "inj'", ["embedding"]], ["add", "theorem", "refl_apply", ["embedding"]], ["mod", "theorem", "schroeder_bernstein", ["embedding"]], ["add", "theorem", "to_fun_eq_coe", ["embedding"]], ["mod", "theorem", "total", ["embedding"]], ["add", "theorem", "trans_apply", ["embedding"]], ["del", "theorem", "of_bijective", ["equiv"]], ["add", "theorem", "to_embedding_coe_fn", ["equiv"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "cast_apply", ["equiv"]], ["del", "theorem", "comp_apply", ["equiv"]], ["del", "def", "id", ["equiv"]], ["del", "theorem", "id_apply", ["equiv"]], ["add", "theorem", "of_bijective_to_fun", ["equiv"]], ["add", "theorem", "refl_apply", ["equiv"]], ["add", "theorem", "image_apply", ["equiv", "set"]], ["add", "theorem", "range_apply", ["equiv", "set"]], ["mod", "theorem", "swap_self", ["equiv"]], ["mod", "theorem", "swap_swap", ["equiv"]], ["add", "theorem", "trans_apply", ["equiv"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "def", "foldl", ["nat"]], ["add", "def", "foldr", ["nat"]]]}, {"oldPath": null, "newPath": "data/ordinal.lean", "changes": [["add", "structure", "Well_order", []], ["add", "theorem", "aux", ["initial_seg", "antisymm"]], ["add", "def", "antisymm", ["initial_seg"]], ["add", "theorem", "antisymm_symm", ["initial_seg"]], ["add", "theorem", "antisymm_to_fun", ["initial_seg"]], ["add", "theorem", "coe_fn_mk", ["initial_seg"]], ["add", "theorem", "coe_fn_to_order_embedding", ["initial_seg"]], ["add", "theorem", "eq_or_principal", ["initial_seg"]], ["add", "theorem", "init'", ["initial_seg"]], ["add", "theorem", "init_iff", ["initial_seg"]], ["add", "def", "of_iso", ["initial_seg"]], ["add", "theorem", "of_iso_apply", ["initial_seg"]], ["add", "theorem", "refl_apply", ["initial_seg"]], ["add", "theorem", "trans_apply", ["initial_seg"]], ["add", "def", "unique_of_extensional", ["initial_seg"]], ["add", "structure", "initial_seg", []], ["add", "def", "swap", ["is_irrefl"]], ["add", "def", "is_irrefl_of_is_asymm", []], ["add", "def", "swap", ["is_strict_order"]], ["add", "def", "swap", ["is_strict_total_order'"]], ["add", "def", "is_strict_weak_order_of_is_order_connected", []], ["add", "def", "swap", ["is_trans"]], ["add", "def", "swap", ["is_trichotomous"]], ["add", "def", "preimage", ["order"]], ["add", "theorem", "coe_fn_mk", ["order_embedding"]], ["add", "theorem", "coe_fn_to_embedding", ["order_embedding"]], ["add", "theorem", "eq_of_to_fun_eq", ["order_embedding"]], ["add", "theorem", "eq_preimage", ["order_embedding"]], ["add", "theorem", "nat_lt", ["order_embedding"]], ["add", "theorem", "of_monotone", ["order_embedding"]], ["add", "theorem", "ord'", ["order_embedding"]], ["add", "theorem", "refl_apply", ["order_embedding"]], ["add", "def", "rsymm", ["order_embedding"]], ["add", "theorem", "trans_apply", ["order_embedding"]], ["add", "theorem", "well_founded_iff_no_descending_seq", ["order_embedding"]], ["add", "structure", "order_embedding", []], ["add", "theorem", "apply_inverse_apply", ["order_iso"]], ["add", "theorem", "coe_coe_fn", ["order_iso"]], ["add", "theorem", "coe_fn_mk", ["order_iso"]], ["add", "theorem", "coe_fn_symm_mk", ["order_iso"]], ["add", "theorem", "coe_fn_to_equiv", ["order_iso"]], ["add", "theorem", "eq_of_to_fun_eq", ["order_iso"]], ["add", "theorem", "inverse_apply_apply", ["order_iso"]], ["add", "def", "of_surjective", ["order_iso"]], ["add", "theorem", "of_surjective_apply", ["order_iso"]], ["add", "theorem", "ord'", ["order_iso"]], ["add", "def", "preimage", ["order_iso"]], ["add", "theorem", "refl_apply", ["order_iso"]], ["add", "theorem", "trans_apply", ["order_iso"]], ["add", "structure", "order_iso", []], ["add", "def", "card", ["ordinal"]], ["add", "def", "le", ["ordinal"]], ["add", "def", "lt", ["ordinal"]], ["add", "def", "ordinal", []], ["add", "theorem", "coe_coe_fn'", ["principal_seg"]], ["add", "theorem", "coe_coe_fn", ["principal_seg"]], ["add", "theorem", "coe_fn_mk", ["principal_seg"]], ["add", "theorem", "coe_fn_to_order_embedding", ["principal_seg"]], ["add", "theorem", "down'", ["principal_seg"]], ["add", "def", "equiv_lt", ["principal_seg"]], ["add", "theorem", "equiv_lt_apply", ["principal_seg"]], ["add", "theorem", "init", ["principal_seg"]], ["add", "theorem", "init_iff", ["principal_seg"]], ["add", "theorem", "irrefl", ["principal_seg"]], ["add", "def", "le_lt", ["principal_seg"]], ["add", "theorem", "le_lt_apply", ["principal_seg"]], ["add", "def", "lt_le", ["principal_seg"]], ["add", "theorem", "lt_le_apply", ["principal_seg"]], ["add", "theorem", "trans_apply", ["principal_seg"]], ["add", "structure", "principal_seg", []], ["add", "def", "set_coe_embedding", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "set_coe_cast", ["set"]]]}]}, {"timestamp": 1512857672, "sha": "aef5c88d", "message": "feat(algebra/group_power): more gpow lemmas", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["mod", "theorem", "neg_smul", ["add_monoid"]], ["add", "theorem", "div_pow", []], ["add", "theorem", "inv_pow", ["division_ring"]], ["mod", "def", "gpow", []], ["add", "theorem", "gpow_bit0", []], ["add", "theorem", "gpow_bit1", []], ["add", "theorem", "gpow_coe_nat", []], ["add", "theorem", "gpow_mul", []], ["add", "theorem", "gpow_neg", []], ["add", "theorem", "gpow_neg_one", []], ["add", "theorem", "gpow_one", []], ["add", "theorem", "gpow_zero", []], ["add", "theorem", "gsmul_bit1", []], ["add", "theorem", "gsmul_mul", []], ["add", "theorem", "gsmul_neg", []], ["add", "theorem", "gsmul_neg_one", []], ["add", "theorem", "gsmul_one", []], ["add", "theorem", "inv_gpow", []], ["mod", "theorem", "inv_pow", []], ["add", "theorem", "one_div_pow", []], ["add", "theorem", "one_gpow", []], ["del", "theorem", "pow_inv", []], ["mod", "theorem", "pow_ne_zero", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_mul_neg_succ", ["int"]], ["add", "theorem", "neg_succ_mul_coe_nat", ["int"]], ["add", "theorem", "neg_succ_mul_neg_succ", ["int"]]]}]}, {"timestamp": 1512754157, "sha": "8cfcef09", "message": "feat(algebra/linear_algebra): add product construction for modules", "changes": [{"oldPath": null, "newPath": "algebra/linear_algebra/prod_module.lean", "changes": [["add", "theorem", "fst_inl", ["prod"]], ["add", "theorem", "fst_inr", ["prod"]], ["add", "theorem", "fst_inv", ["prod"]], ["add", "theorem", "fst_mul", ["prod"]], ["add", "theorem", "fst_one", ["prod"]], ["add", "theorem", "fst_prod", ["prod"]], ["add", "theorem", "injective_inl", ["prod"]], ["add", "theorem", "injective_inr", ["prod"]], ["add", "def", "inl", ["prod"]], ["add", "theorem", "inl_eq_inl", ["prod"]], ["add", "theorem", "inl_eq_inr", ["prod"]], ["add", "def", "inr", ["prod"]], ["add", "theorem", "inr_eq_inl", ["prod"]], ["add", "theorem", "inr_eq_inr", ["prod"]], ["add", "theorem", "is_basis_inl_union_inr", ["prod"]], ["add", "theorem", "is_linear_map_prod_fst", ["prod"]], ["add", "theorem", "is_linear_map_prod_inl", ["prod"]], ["add", "theorem", "is_linear_map_prod_inr", ["prod"]], ["add", "theorem", "is_linear_map_prod_mk", ["prod"]], ["add", "theorem", "is_linear_map_prod_snd", ["prod"]], ["add", "theorem", "linear_independent_inl_union_inr", ["prod"]], ["add", "theorem", "snd_inl", ["prod"]], ["add", "theorem", "snd_inr", ["prod"]], ["add", "theorem", "snd_inv", ["prod"]], ["add", "theorem", "snd_mul", ["prod"]], ["add", "theorem", "snd_one", ["prod"]], ["add", "theorem", "snd_prod", ["prod"]], ["add", "theorem", "span_inl_union_inr", ["prod"]], ["add", "theorem", "span_prod", ["prod"]]]}]}, {"timestamp": 1512754157, "sha": "8fab107c", "message": "refactor(algebra/module): split of type constructions and move quotient, subtype and linear_map to their own theories in algebra/linear_algebra", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": [["add", "theorem", "linear_independent_union", []]]}, {"oldPath": null, "newPath": "algebra/linear_algebra/linear_map_module.lean", "changes": [["add", "theorem", "add_app", ["linear_map"]], ["add", "theorem", "ext", ["linear_map"]], ["add", "def", "im", ["linear_map"]], ["add", "theorem", "inj_of_trivial_ker", ["linear_map"]], ["add", "theorem", "is_linear_map_coe", ["linear_map"]], ["add", "def", "ker", ["linear_map"]], ["add", "theorem", "ker_of_map_eq_map", ["linear_map"]], ["add", "theorem", "map_add", ["linear_map"]], ["add", "theorem", "map_neg", ["linear_map"]], ["add", "theorem", "map_smul", ["linear_map"]], ["add", "theorem", "map_sub", ["linear_map"]], ["add", "theorem", "map_zero", ["linear_map"]], ["add", "theorem", "mem_im", ["linear_map"]], ["add", "theorem", "mem_ker", ["linear_map"]], ["add", "theorem", "neg_app", ["linear_map"]], ["add", "theorem", "smul_app", ["linear_map"]], ["add", "theorem", "sub_ker", ["linear_map"]], ["add", "theorem", "zero_app", ["linear_map"]], ["add", "def", "linear_map", []], ["add", "def", "endomorphism_ring", ["module"]], ["add", "def", "general_linear_group", ["module"]], ["add", "theorem", "mul_app", ["module"]], ["add", "theorem", "one_app", ["module"]]]}, {"oldPath": null, "newPath": "algebra/linear_algebra/quotient_module.lean", "changes": [["add", "theorem", "is_linear_map_quotient_lift", ["is_submodule"]], ["add", "theorem", "is_linear_map_quotient_mk", ["is_submodule"]], ["add", "theorem", "injective_lift", ["is_submodule", "quotient"]], ["add", "def", "lift", ["is_submodule", "quotient"]], ["add", "def", "quotient", ["is_submodule"]], ["add", "def", "quotient_rel", ["is_submodule"]]]}, {"oldPath": null, "newPath": "algebra/linear_algebra/subtype_module.lean", "changes": [["add", "theorem", "add_val", []], ["add", "theorem", "is_linear_map_subtype_mk", []], ["add", "theorem", "is_linear_map_subtype_val", []], ["add", "theorem", "neg_val", []], ["add", "theorem", "smul_val", []], ["add", "theorem", "sub_val", []], ["add", "theorem", "zero_val", []]]}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["del", "theorem", "add_val", ["is_submodule"]], ["del", "theorem", "is_linear_map_quotient_lift", ["is_submodule"]], ["del", "theorem", "is_linear_map_quotient_mk", ["is_submodule"]], ["del", "theorem", "is_linear_map_subtype_mk", ["is_submodule"]], ["del", "theorem", "is_linear_map_subtype_val", ["is_submodule"]], ["del", "theorem", "neg_val", ["is_submodule"]], ["del", "theorem", "injective_lift", ["is_submodule", "quotient"]], ["del", "def", "lift", ["is_submodule", "quotient"]], ["del", "def", "quotient", ["is_submodule"]], ["del", "def", "quotient_rel", ["is_submodule"]], ["del", "theorem", "smul_val", ["is_submodule"]], ["del", "theorem", "sub_val", ["is_submodule"]], ["del", "theorem", "zero_val", ["is_submodule"]], ["del", "theorem", "add_app", ["linear_map"]], ["del", "theorem", "ext", ["linear_map"]], ["del", "def", "im", ["linear_map"]], ["del", "theorem", "inj_of_trivial_ker", ["linear_map"]], ["del", "theorem", "is_linear_map_coe", ["linear_map"]], ["del", "def", "ker", ["linear_map"]], ["del", "theorem", "ker_of_map_eq_map", ["linear_map"]], ["del", "theorem", "map_add", ["linear_map"]], ["del", "theorem", "map_neg", ["linear_map"]], ["del", "theorem", "map_smul", ["linear_map"]], ["del", "theorem", "map_sub", ["linear_map"]], ["del", "theorem", "map_zero", ["linear_map"]], ["del", "theorem", "mem_im", ["linear_map"]], ["del", "theorem", "mem_ker", ["linear_map"]], ["del", "theorem", "neg_app", ["linear_map"]], ["del", "theorem", "smul_app", ["linear_map"]], ["del", "theorem", "sub_ker", ["linear_map"]], ["del", "theorem", "zero_app", ["linear_map"]], ["del", "def", "linear_map", []], ["del", "def", "endomorphism_ring", ["module"]], ["del", "def", "general_linear_group", ["module"]], ["del", "theorem", "mul_app", ["module"]], ["del", "theorem", "one_app", ["module"]]]}, {"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": [["add", "def", "filter", ["finsupp"]], ["add", "theorem", "filter_apply_neg", ["finsupp"]], ["add", "theorem", "filter_apply_pos", ["finsupp"]], ["add", "theorem", "filter_pos_add_filter_neg", ["finsupp"]], ["add", "theorem", "support_filter", ["finsupp"]], ["add", "theorem", "support_subset_iff", ["finsupp"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "mem_image_of_injective", ["set"]]]}]}, {"timestamp": 1512754157, "sha": "fccc5d32", "message": "refactor(algebra/linear_algebra): move zero_not_mem_of_linear_independent from vector_space to module (zero_ne_one should be a typeclass in Prop not in Type)", "changes": [{"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": [["add", "theorem", "zero_ne_one_or_forall_eq_0", []], ["mod", "theorem", "zero_not_mem_of_linear_independent", []]]}]}, {"timestamp": 1512721933, "sha": "bd013e80", "message": "feat(data/dardinal): wellordering of cardinals", "changes": [{"oldPath": "algebra/linear_algebra/basic.lean", "newPath": "algebra/linear_algebra/basic.lean", "changes": [["mod", "theorem", "exists_is_basis", []], ["add", "theorem", "exists_subset_is_basis", []]]}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["add", "theorem", "to_bool_coe", ["bool"]]]}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "cantor", ["cardinal"]], ["add", "theorem", "le_iff_exists_add", ["cardinal"]], ["add", "theorem", "le_min", ["cardinal"]], ["add", "theorem", "le_sum", ["cardinal"]], ["add", "theorem", "le_sup", ["cardinal"]], ["add", "def", "min", ["cardinal"]], ["add", "theorem", "min_eq", ["cardinal"]], ["add", "theorem", "min_le", ["cardinal"]], ["mod", "theorem", "mul_power", ["cardinal"]], ["add", "theorem", "ne_zero_iff_nonempty", ["cardinal"]], ["mod", "theorem", "one_power", ["cardinal"]], ["mod", "theorem", "power_mono_left", ["cardinal"]], ["mod", "theorem", "power_mono_right", ["cardinal"]], ["mod", "theorem", "power_mul", ["cardinal"]], ["mod", "theorem", "power_sum", ["cardinal"]], ["mod", "theorem", "power_zero", ["cardinal"]], ["add", "theorem", "prop_eq_two", ["cardinal"]], ["add", "def", "sum", ["cardinal"]], ["add", "def", "sup", ["cardinal"]], ["add", "theorem", "sup_le", ["cardinal"]], ["add", "theorem", "zero_le", ["cardinal"]], ["mod", "theorem", "zero_power", ["cardinal"]], ["del", "theorem", "exists_injective_or_surjective", ["embedding"]], ["add", "theorem", "injective_min", ["embedding"]], ["del", "def", "Sup", ["embedding", "option"]], ["del", "theorem", "Sup_le", ["embedding", "option"]], ["del", "theorem", "eq_of_le_some", ["embedding", "option"]], ["del", "inductive", "le", ["embedding", "option"]], ["del", "theorem", "le_Sup", ["embedding", "option"]], ["del", "theorem", "mem_of_Sup_eq_some", ["embedding", "option"]], ["del", "def", "strict_partial_order", ["embedding", "option"]], ["del", "def", "partial_order", ["embedding", "pfun"]], ["del", "def", "pfun", ["embedding"]], ["mod", "theorem", "total", ["embedding"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "case_strong_induction_on", ["finset"]], ["add", "theorem", "le_iff_subset", ["finset"]], ["add", "theorem", "lt_iff_ssubset", ["finset"]], ["mod", "theorem", "strong_induction_on", ["finset"]], ["add", "theorem", "val_lt_iff", ["finset"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "case_strong_induction_on", ["multiset"]], ["add", "theorem", "strong_induction_on", ["multiset"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "empty_prod", ["set"]], ["add", "theorem", "eq_empty_iff_forall_not_mem", ["set"]], ["del", "theorem", "eq_empty_of_forall_not_mem", ["set"]], ["add", "theorem", "image_swap_eq_preimage_swap", ["set"]], ["add", "theorem", "image_swap_prod", ["set"]], ["add", "theorem", "insert_prod", ["set"]], ["mod", "theorem", "mem_insert_iff", ["set"]], ["add", "theorem", "mem_prod", ["set"]], ["add", "theorem", "mem_prod_eq", ["set"]], ["add", "theorem", "prod_empty", ["set"]], ["add", "theorem", "prod_image_image_eq", ["set"]], ["add", "theorem", "prod_insert", ["set"]], ["add", "theorem", "prod_inter_prod", ["set"]], ["add", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["add", "theorem", "prod_mono", ["set"]], ["add", "theorem", "prod_neq_empty_iff", ["set"]], ["add", "theorem", "prod_preimage_eq", ["set"]], ["add", "theorem", "prod_singleton_singleton", ["set"]], ["add", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": "data/set/default.lean", "newPath": "data/set/default.lean", "changes": []}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": []}, {"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "data/set/intervals.lean", "newPath": "data/set/intervals.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["del", "theorem", "bind_def", []], ["del", "theorem", "fmap_eq_image", []], ["del", "theorem", "image_Union", []], ["del", "theorem", "image_congr", []], ["del", "theorem", "mem_seq_iff", []], ["del", "theorem", "monotone_preimage", []], ["del", "theorem", "preimage_Union", []], ["del", "theorem", "preimage_sUnion", []], ["add", "theorem", "bind_def", ["set"]], ["add", "theorem", "fmap_eq_image", ["set"]], ["add", "theorem", "image_Union", ["set"]], ["add", "theorem", "image_congr", ["set"]], ["add", "theorem", "mem_seq_iff", ["set"]], ["add", "theorem", "monotone_preimage", ["set"]], ["add", "theorem", "monotone_prod", ["set"]], ["add", "theorem", "preimage_Union", ["set"]], ["add", "theorem", "preimage_sUnion", ["set"]], ["add", "theorem", "subtype_val_image", ["set"]], ["add", "theorem", "univ_subtype", ["set"]], ["del", "theorem", "subtype_val_image", []], ["del", "theorem", "univ_subtype", []]]}, {"oldPath": "data/set/prod.lean", "newPath": null, "changes": [["del", "theorem", "empty_prod", ["set"]], ["del", "theorem", "image_swap_eq_preimage_swap", ["set"]], ["del", "theorem", "image_swap_prod", ["set"]], ["del", "theorem", "insert_prod", ["set"]], ["del", "theorem", "mem_prod", ["set"]], ["del", "theorem", "mem_prod_eq", ["set"]], ["del", "theorem", "monotone_prod", ["set"]], ["del", "theorem", "prod_empty", ["set"]], ["del", "theorem", "prod_image_image_eq", ["set"]], ["del", "theorem", "prod_insert", ["set"]], ["del", "theorem", "prod_inter_prod", ["set"]], ["del", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["del", "theorem", "prod_mono", ["set"]], ["del", "theorem", "prod_neq_empty_iff", ["set"]], ["del", "theorem", "prod_preimage_eq", ["set"]], ["del", "theorem", "prod_singleton_singleton", ["set"]], ["del", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "elim", ["empty"]]]}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "cantor_injective", ["function"]], ["add", "theorem", "cantor_surjective", ["function"]]]}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": [["add", "theorem", "total", ["zorn", "chain"]]]}, {"oldPath": "theories/number_theory/dioph.lean", "newPath": "theories/number_theory/dioph.lean", "changes": [["del", "def", "arity", []], ["del", "def", "curry", []], ["del", "def", "uncurry", []], ["add", "theorem", "append_add", ["vector3"]], ["del", "def", "append_add", ["vector3"]], ["add", "theorem", "append_cons", ["vector3"]], ["del", "def", "append_cons", ["vector3"]], ["add", "theorem", "append_left", ["vector3"]], ["del", "def", "append_left", ["vector3"]], ["add", "theorem", "append_nil", ["vector3"]], ["del", "def", "append_nil", ["vector3"]], ["add", "theorem", "cons_fs", ["vector3"]], ["del", "def", "cons_fs", ["vector3"]], ["add", "theorem", "cons_fz", ["vector3"]], ["del", "def", "cons_fz", ["vector3"]], ["add", "theorem", "insert_fs", ["vector3"]], ["del", "def", "insert_fs", ["vector3"]]]}]}, {"timestamp": 1512730302, "sha": "b547de03", "message": "chore(data/finsupp): replace { n with ... } syntax with { ..., .. n } (the former is deprecated)", "changes": [{"oldPath": "data/finsupp.lean", "newPath": "data/finsupp.lean", "changes": []}]}, {"timestamp": 1512730134, "sha": "e1e80b49", "message": "chore(.): replace ginduction by induction; changed in lean revision 49e7a642c35e83ed16cbc573deef5bd3b6dfc627", "changes": [{"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "theories/set_theory.lean", "newPath": "theories/set_theory.lean", "changes": []}]}, {"timestamp": 1512667525, "sha": "c32d01d7", "message": "feat(algebra/linear_algebra): add basic theory on linear algebra", "changes": [{"oldPath": null, "newPath": "algebra/linear_algebra/basic.lean", "changes": [["add", "theorem", "constr_add", []], ["add", "theorem", "constr_basis", []], ["add", "theorem", "constr_congr", []], ["add", "theorem", "constr_eq", []], ["add", "theorem", "constr_im_eq_span", []], ["add", "theorem", "constr_mem_span", []], ["add", "theorem", "constr_neg", []], ["add", "theorem", "constr_smul", []], ["add", "theorem", "constr_sub", []], ["add", "theorem", "constr_zero", []], ["add", "theorem", "eq_of_linear_independent_of_span", []], ["add", "theorem", "exists_finite_card_le_of_finite_of_linear_independent_of_span", []], ["add", "theorem", "exists_is_basis", []], ["add", "theorem", "exists_left_inverse_linear_map_of_injective", []], ["add", "theorem", "exists_linear_independent", []], ["add", "theorem", "exists_of_linear_independent_of_finite_span", []], ["add", "theorem", "exists_right_inverse_linear_map_of_surjective", []], ["add", "theorem", "smul_sum", ["finset"]], ["add", "theorem", "smul_sum", ["finsupp"]], ["add", "def", "constr", ["is_basis"]], ["add", "theorem", "eq_linear_map", ["is_basis"]], ["add", "theorem", "map_constr", ["is_basis"]], ["add", "theorem", "map_repr", ["is_basis"]], ["add", "def", "is_basis", []], ["add", "theorem", "finsupp_sum", ["is_linear_map"]], ["add", "theorem", "is_submodule_range_smul", []], ["add", "theorem", "is_submodule_span", []], ["add", "theorem", "is_linear_map_sum", ["lc"]], ["add", "theorem", "smul_apply", ["lc"]], ["add", "theorem", "sum_smul_index", ["lc"]], ["add", "def", "lc", []], ["add", "theorem", "linear_eq_on", []], ["add", "theorem", "eq_0_of_span", ["linear_independent"]], ["add", "theorem", "image", ["linear_independent"]], ["add", "theorem", "inj_span_iff_inj", ["linear_independent"]], ["add", "theorem", "insert", ["linear_independent"]], ["add", "theorem", "mono", ["linear_independent"]], ["add", "theorem", "of_image", ["linear_independent"]], ["add", "def", "repr", ["linear_independent"]], ["add", "theorem", "unique", ["linear_independent"]], ["add", "def", "linear_independent", []], ["add", "theorem", "linear_independent_Union_of_directed", []], ["add", "theorem", "linear_independent_bUnion_of_directed", []], ["add", "theorem", "linear_independent_empty", []], ["add", "theorem", "linear_independent_iff_not_mem_span", []], ["add", "theorem", "linear_independent_image_iff", ["linear_map"]], ["add", "theorem", "mem_span_insert_exchange", []], ["add", "def", "module_equiv_lc", []], ["add", "theorem", "repr_add", []], ["add", "theorem", "repr_eq", []], ["add", "theorem", "repr_eq_repr_of_subset", []], ["add", "theorem", "repr_eq_single", []], ["add", "theorem", "repr_eq_zero", []], ["add", "theorem", "repr_finsupp_sum", []], ["add", "theorem", "repr_neg", []], ["add", "theorem", "repr_not_span", []], ["add", "theorem", "repr_smul", []], ["add", "theorem", "repr_spec", []], ["add", "theorem", "repr_sub", []], ["add", "theorem", "repr_sum", []], ["add", "theorem", "repr_sum_eq", []], ["add", "theorem", "repr_support", []], ["add", "theorem", "repr_zero", []], ["add", "def", "span", []], ["add", "theorem", "span_empty", []], ["add", "theorem", "span_eq", []], ["add", "theorem", "span_eq_of_is_submodule", []], ["add", "theorem", "span_image_of_linear_map", []], ["add", "theorem", "span_insert", []], ["add", "theorem", "span_insert_eq_span", []], ["add", "theorem", "span_minimal", []], ["add", "theorem", "span_mono", []], ["add", "theorem", "span_singleton", []], ["add", "theorem", "span_span", []], ["add", "theorem", "span_union", []], ["add", "theorem", "subset_span", []], ["add", "theorem", "zero_not_mem_of_linear_independent", []]]}, {"oldPath": null, "newPath": "algebra/linear_algebra/default.lean", "changes": []}]}, {"timestamp": 1512667470, "sha": "f09abb1c", "message": "feat(data/finsupp): add type of functions with finite support", "changes": [{"oldPath": null, "newPath": "data/finsupp.lean", "changes": [["add", "theorem", "add_apply", ["finsupp"]], ["add", "def", "comap_domain", ["finsupp"]], ["add", "theorem", "comap_domain_add", ["finsupp"]], ["add", "theorem", "comap_domain_apply", ["finsupp"]], ["add", "theorem", "comap_domain_finsupp_sum", ["finsupp"]], ["add", "theorem", "comap_domain_neg", ["finsupp"]], ["add", "theorem", "comap_domain_sub", ["finsupp"]], ["add", "theorem", "comap_domain_sum", ["finsupp"]], ["add", "theorem", "comap_domain_zero", ["finsupp"]], ["add", "theorem", "ext", ["finsupp"]], ["add", "theorem", "finite_supp", ["finsupp"]], ["add", "def", "map_domain", ["finsupp"]], ["add", "theorem", "map_domain_add", ["finsupp"]], ["add", "theorem", "map_domain_comp", ["finsupp"]], ["add", "theorem", "map_domain_congr", ["finsupp"]], ["add", "theorem", "map_domain_finset_sum", ["finsupp"]], ["add", "theorem", "map_domain_id", ["finsupp"]], ["add", "theorem", "map_domain_single", ["finsupp"]], ["add", "theorem", "map_domain_sum", ["finsupp"]], ["add", "theorem", "map_domain_support", ["finsupp"]], ["add", "theorem", "map_domain_zero", ["finsupp"]], ["add", "def", "map_range", ["finsupp"]], ["add", "theorem", "map_range_apply", ["finsupp"]], ["add", "theorem", "mem_support_iff", ["finsupp"]], ["add", "theorem", "mul_def", ["finsupp"]], ["add", "theorem", "neg_apply", ["finsupp"]], ["add", "theorem", "one_def", ["finsupp"]], ["add", "theorem", "prod_single", ["finsupp"]], ["add", "def", "single", ["finsupp"]], ["add", "theorem", "single_add", ["finsupp"]], ["add", "theorem", "single_apply", ["finsupp"]], ["add", "theorem", "single_eq_of_ne", ["finsupp"]], ["add", "theorem", "single_eq_same", ["finsupp"]], ["add", "theorem", "single_mul_single", ["finsupp"]], ["add", "theorem", "single_zero", ["finsupp"]], ["add", "theorem", "sub_apply", ["finsupp"]], ["add", "def", "subtype_domain", ["finsupp"]], ["add", "theorem", "subtype_domain_add", ["finsupp"]], ["add", "theorem", "subtype_domain_apply", ["finsupp"]], ["add", "theorem", "subtype_domain_finsupp_sum", ["finsupp"]], ["add", "theorem", "subtype_domain_neg", ["finsupp"]], ["add", "theorem", "subtype_domain_sub", ["finsupp"]], ["add", "theorem", "subtype_domain_sum", ["finsupp"]], ["add", "theorem", "subtype_domain_zero", ["finsupp"]], ["add", "def", "sum", ["finsupp"]], ["add", "theorem", "sum_add", ["finsupp"]], ["add", "theorem", "sum_add_index", ["finsupp"]], ["add", "theorem", "sum_apply", ["finsupp"]], ["add", "theorem", "sum_comap_domain_index", ["finsupp"]], ["add", "theorem", "sum_finset_sum_index", ["finsupp"]], ["add", "theorem", "sum_map_domain_index", ["finsupp"]], ["add", "theorem", "sum_map_range_index", ["finsupp"]], ["add", "theorem", "sum_neg", ["finsupp"]], ["add", "theorem", "sum_neg_index", ["finsupp"]], ["add", "theorem", "sum_single", ["finsupp"]], ["add", "theorem", "sum_single_index", ["finsupp"]], ["add", "theorem", "sum_sub_index", ["finsupp"]], ["add", "theorem", "sum_subtype_domain_index", ["finsupp"]], ["add", "theorem", "sum_sum_index", ["finsupp"]], ["add", "theorem", "sum_zero", ["finsupp"]], ["add", "theorem", "sum_zero_index", ["finsupp"]], ["add", "def", "support", ["finsupp"]], ["add", "theorem", "support_add", ["finsupp"]], ["add", "theorem", "support_map_range", ["finsupp"]], ["add", "theorem", "support_single_ne_zero", ["finsupp"]], ["add", "theorem", "support_single_subset", ["finsupp"]], ["add", "theorem", "support_sum", ["finsupp"]], ["add", "theorem", "support_zero", ["finsupp"]], ["add", "theorem", "support_zip_with", ["finsupp"]], ["add", "def", "to_comm_ring", ["finsupp"]], ["add", "def", "to_comm_semiring", ["finsupp"]], ["add", "def", "to_ring", ["finsupp"]], ["add", "def", "to_semiring", ["finsupp"]], ["add", "theorem", "zero_apply", ["finsupp"]], ["add", "def", "zip_with", ["finsupp"]], ["add", "theorem", "zip_with_apply", ["finsupp"]], ["add", "def", "finsupp", []]]}]}, {"timestamp": 1512667357, "sha": "fcf0bfa8", "message": "feat(data/set/finite): add finite_to_set, finset.coe_to_finset", "changes": [{"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["mod", "theorem", "coe_filter", ["finset"]], ["add", "theorem", "coe_to_finset", ["finset"]], ["add", "theorem", "finite_to_set", ["finset"]]]}]}, {"timestamp": 1512667134, "sha": "5e42425d", "message": "fix(algebra/module): fix type universes in is_linear_map.sum", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["mod", "theorem", "sum", ["is_linear_map"]]]}]}, {"timestamp": 1512657729, "sha": "0995ac19", "message": "feat(algebra/module): the inverse of a linear map is linear", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "inverse", ["is_linear_map"]], ["add", "theorem", "smul_ne_0", ["is_submodule"]]]}]}, {"timestamp": 1512655464, "sha": "645bf604", "message": "core(algebra/module): generalize map_smul_left; add is_submodule.range", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["mod", "theorem", "map_smul_left", ["is_linear_map"]]]}]}, {"timestamp": 1512607172, "sha": "5f642d83", "message": "refactor(*): remove local simp AC lemmas\nUsing local simp lemmas everywhere for mul_assoc and friends defeats the purpose of the change in core. Now theorems are proven with only the AC lemmas actually used in the proof.", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "div_eq_inv_mul", []]]}, {"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "le_max_left_iff_true", []], ["add", "theorem", "le_max_right_iff_true", []], ["add", "theorem", "left_comm", ["max"]], ["add", "theorem", "right_comm", ["max"]], ["add", "theorem", "min_right_comm", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["mod", "theorem", "le_of_not_lt", []], ["add", "theorem", "le_or_lt", []], ["add", "theorem", "lt_or_le", []], ["mod", "theorem", "not_le", []], ["mod", "theorem", "not_lt", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": [["add", "theorem", "le_def", ["ennreal"]], ["mod", "theorem", "of_real_lt_of_real_iff_cases", ["ennreal"]]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["del", "theorem", "eq_0_of_nonneg_of_neg_nonneg", []], ["add", "theorem", "nonneg_antisymm", []], ["mod", "theorem", "uniform_embedding_mul_rat", []]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "is_closed_iff_nhds", []], ["add", "theorem", "is_open_iff_forall_mem_open", []], ["mod", "theorem", "is_open_iff_mem_nhds", []], ["mod", "theorem", "is_open_iff_nhds", []], ["add", "theorem", "mem_interior", []], ["add", "theorem", "subset_interior_iff_open", []]]}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "data/analysis/topology.lean", "newPath": "data/analysis/topology.lean", "changes": []}, {"oldPath": "data/cardinal.lean", "newPath": "data/cardinal.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "insert_subset", ["finset"]], ["mod", "theorem", "insert_union", ["finset"]], ["mod", "theorem", "inter_assoc", ["finset"]], ["mod", "theorem", "inter_comm", ["finset"]], ["mod", "theorem", "inter_left_comm", ["finset"]], ["mod", "theorem", "inter_right_comm", ["finset"]], ["mod", "theorem", "union_assoc", ["finset"]], ["mod", "theorem", "union_comm", ["finset"]], ["mod", "theorem", "union_insert", ["finset"]], ["mod", "theorem", "union_left_comm", ["finset"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/disjointed.lean", "newPath": "data/set/disjointed.lean", "changes": []}, {"oldPath": "data/set/intervals.lean", "newPath": "data/set/intervals.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["del", "theorem", "le_max_left_iff_true", []], ["del", "theorem", "le_max_right_iff_true", []], ["del", "theorem", "left_comm", ["max"]], ["del", "theorem", "right_comm", ["max"]], ["del", "theorem", "min_right_comm", []], ["del", "theorem", "not_le_iff", []], ["del", "theorem", "not_lt_iff", []]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}, {"oldPath": "tactic/converter/interactive.lean", "newPath": "tactic/converter/interactive.lean", "changes": []}, {"oldPath": "theories/number_theory/dioph.lean", "newPath": "theories/number_theory/dioph.lean", "changes": []}, {"oldPath": "theories/number_theory/pell.lean", "newPath": "theories/number_theory/pell.lean", "changes": []}]}, {"timestamp": 1512580574, "sha": "a3a2faa9", "message": "feat(algebra/big_operators): add renameing rules under bijection", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_attach", ["finset"]], ["add", "theorem", "prod_bij", ["finset"]], ["add", "theorem", "prod_bij_ne_one", ["finset"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "attach_image_val", ["finset"]]]}]}, {"timestamp": 1512578918, "sha": "e5c4eb1b", "message": "feat(data/set): add lift converting finset to set", "changes": [{"oldPath": "data/set/default.lean", "newPath": "data/set/default.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "coe_bind", ["finset"]], ["add", "theorem", "coe_empty", ["finset"]], ["add", "theorem", "coe_eq_coe", ["finset"]], ["add", "theorem", "coe_erase", ["finset"]], ["add", "theorem", "coe_filter", ["finset"]], ["add", "theorem", "coe_image", ["finset"]], ["add", "theorem", "coe_insert", ["finset"]], ["add", "theorem", "coe_inter", ["finset"]], ["add", "theorem", "coe_sdiff", ["finset"]], ["add", "theorem", "coe_singleton", ["finset"]], ["add", "theorem", "coe_subseteq_coe", ["finset"]], ["add", "theorem", "coe_union", ["finset"]], ["add", "theorem", "mem_coe", ["finset"]], ["add", "def", "to_set", ["finset"]]]}]}, {"timestamp": 1512578540, "sha": "7f9dd51f", "message": "feat(data/finset): add strong induction rules for finset", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "card_eq_succ", ["finset"]], ["add", "theorem", "card_le_of_subset", ["finset"]], ["add", "theorem", "card_lt_card", ["finset"]], ["add", "theorem", "case_strong_induction_on", ["finset"]], ["add", "theorem", "eq_of_subset_of_card_le", ["finset"]], ["add", "theorem", "strong_induction_on", ["finset"]]]}]}, {"timestamp": 1512577301, "sha": "81e53e83", "message": "feat(data/finset): add ssubset", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "erase_ssubset", ["finset"]], ["add", "theorem", "ssubset_iff", ["finset"]], ["add", "theorem", "ssubset_insert", ["finset"]]]}]}, {"timestamp": 1512567050, "sha": "f9b39eb1", "message": "feature(.): add various theorems", "changes": [{"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["add", "theorem", "bind_mono", ["finset"]], ["add", "theorem", "bind_singleton", ["finset"]]]}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["add", "theorem", "eq_iff_fst_eq_snd_eq", ["prod"]], ["add", "theorem", "exists", ["prod"]], ["add", "theorem", "forall", ["prod"]], ["mod", "theorem", "fst_swap", ["prod"]], ["mod", "theorem", "eta", ["prod", "mk"]], ["add", "theorem", "inj_iff", ["prod", "mk"]], ["mod", "theorem", "snd_swap", ["prod"]], ["mod", "def", "swap", ["prod"]], ["mod", "theorem", "swap_left_inverse", ["prod"]], ["mod", "theorem", "swap_prod_mk", ["prod"]], ["mod", "theorem", "swap_right_inverse", ["prod"]], ["mod", "theorem", "swap_swap", ["prod"]], ["mod", "theorem", "swap_swap_eq", ["prod"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "diff_diff", ["set"]], ["add", "theorem", "insert_sdiff", ["set"]], ["add", "theorem", "insert_subset", ["set"]], ["add", "theorem", "insert_subset_insert", ["set"]], ["add", "theorem", "insert_union", ["set"]], ["mod", "theorem", "nonempty_of_inter_nonempty_left", ["set"]], ["mod", "theorem", "nonempty_of_inter_nonempty_right", ["set"]], ["mod", "theorem", "not_not_mem", ["set"]], ["add", "theorem", "not_subset", ["set"]], ["mod", "theorem", "ssubset_def", ["set"]], ["add", "theorem", "union_insert", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "dinduction_on", ["set", "finite"]], ["add", "theorem", "to_finset_insert", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["del", "theorem", "exists", ["prod"]], ["del", "theorem", "forall", ["prod"]], ["del", "theorem", "inj_iff", ["prod", "mk"]]]}]}, {"timestamp": 1512540146, "sha": "fd803b66", "message": "chore(.): adapt to change bc89ebc19c93392419b7bab8b68271db12855dc5 (improve how induction hypotheses are named)", "changes": [{"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "tests/finish3.lean", "newPath": "tests/finish3.lean", "changes": []}]}, {"timestamp": 1512487433, "sha": "c43e0132", "message": "fix(theories/number_theory/pell,*): fix broken proofs, less simp AC", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["mod", "theorem", "add_val", ["is_submodule"]], ["mod", "theorem", "neg_val", ["is_submodule"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["add", "theorem", "coe_to_bool", ["bool"]], ["del", "theorem", "to_bool_bool", ["bool"]]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": []}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "data/set/prod.lean", "newPath": "data/set/prod.lean", "changes": []}, {"oldPath": "theories/number_theory/dioph.lean", "newPath": "theories/number_theory/dioph.lean", "changes": []}, {"oldPath": "theories/number_theory/pell.lean", "newPath": "theories/number_theory/pell.lean", "changes": []}, {"oldPath": "theories/set_theory.lean", "newPath": "theories/set_theory.lean", "changes": []}]}, {"timestamp": 1512499168, "sha": "e9e51dba", "message": "fix(data/sigma): use Sort for psigma", "changes": [{"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": []}]}, {"timestamp": 1512497612, "sha": "0e3b1567", "message": "fix(algebra/module): remove instance endomorphism_ring, it breaks real.lean", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "def", "endomorphism_ring", ["module"]], ["mod", "def", "general_linear_group", ["module"]]]}]}, {"timestamp": 1512497012, "sha": "394d7213", "message": "feat(algebra/module): add quotient module", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "is_linear_map_quotient_lift", ["is_submodule"]], ["add", "theorem", "is_linear_map_quotient_mk", ["is_submodule"]], ["add", "theorem", "injective_lift", ["is_submodule", "quotient"]], ["add", "def", "lift", ["is_submodule", "quotient"]], ["add", "def", "quotient", ["is_submodule"]], ["add", "def", "quotient_rel", ["is_submodule"]]]}]}, {"timestamp": 1512494676, "sha": "dcfb9a01", "message": "refactor(algebra/module): add is_linear_map as predicate", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "comp", ["is_linear_map"]], ["add", "theorem", "id", ["is_linear_map"]], ["add", "theorem", "map_add", ["is_linear_map"]], ["add", "theorem", "map_neg", ["is_linear_map"]], ["add", "theorem", "map_smul_left", ["is_linear_map"]], ["add", "theorem", "map_smul_right", ["is_linear_map"]], ["add", "theorem", "map_sub", ["is_linear_map"]], ["add", "theorem", "map_sum", ["is_linear_map"]], ["add", "theorem", "map_zero", ["is_linear_map"]], ["add", "theorem", "neg", ["is_linear_map"]], ["add", "theorem", "sub", ["is_linear_map"]], ["add", "theorem", "sum", ["is_linear_map"]], ["add", "theorem", "zero", ["is_linear_map"]], ["add", "structure", "is_linear_map", []], ["add", "theorem", "Inter_submodule", ["is_submodule"]], ["add", "theorem", "is_linear_map_subtype_mk", ["is_submodule"]], ["add", "theorem", "is_linear_map_subtype_val", ["is_submodule"]], ["mod", "theorem", "sub_val", ["is_submodule"]], ["mod", "theorem", "add_app", ["linear_map"]], ["mod", "theorem", "ext", ["linear_map"]], ["mod", "def", "im", ["linear_map"]], ["add", "theorem", "is_linear_map_coe", ["linear_map"]], ["mod", "def", "ker", ["linear_map"]], ["add", "theorem", "map_add", ["linear_map"]], ["del", "theorem", "map_add_app", ["linear_map"]], ["mod", "theorem", "map_neg", ["linear_map"]], ["add", "theorem", "map_smul", ["linear_map"]], ["del", "theorem", "map_smul_app", ["linear_map"]], ["mod", "theorem", "map_sub", ["linear_map"]], ["mod", "theorem", "map_zero", ["linear_map"]], ["mod", "theorem", "mem_im", ["linear_map"]], ["mod", "theorem", "neg_app", ["linear_map"]], ["mod", "theorem", "smul_app", ["linear_map"]], ["mod", "theorem", "zero_app", ["linear_map"]], ["add", "def", "linear_map", []], ["del", "structure", "linear_map", []], ["del", "def", "endomorphism_ring", ["module"]], ["mod", "def", "general_linear_group", ["module"]], ["mod", "theorem", "mul_app", ["module"]], ["mod", "theorem", "one_app", ["module"]], ["add", "theorem", "sInter_eq_Inter", ["set"]], ["add", "theorem", "smul_eq_mul", []]]}]}, {"timestamp": 1512484549, "sha": "88202b6c", "message": "refactor(algebra/module): clean up is_submodule projections", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "add", ["is_submodule"]], ["mod", "theorem", "add_val", ["is_submodule"]], ["mod", "theorem", "neg", ["is_submodule"]], ["mod", "theorem", "neg_val", ["is_submodule"]], ["mod", "theorem", "sub", ["is_submodule"]], ["add", "theorem", "sub_val", ["is_submodule"]], ["add", "theorem", "sum", ["is_submodule"]], ["add", "theorem", "zero", ["is_submodule"]]]}]}, {"timestamp": 1512483307, "sha": "90ed0ab1", "message": "refactor(algebra/module): rename submodule -> is_submodule, smul_left_distrib -> smul_add, smul_right_distrib -> add_smul, smul_sub_left_distrib -> smul_sub, sub_smul_right_distrib -> sub_smul", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "add_smul", []], ["add", "theorem", "add_val", ["is_submodule"]], ["add", "theorem", "neg", ["is_submodule"]], ["add", "theorem", "neg_val", ["is_submodule"]], ["add", "theorem", "smul_val", ["is_submodule"]], ["add", "theorem", "sub", ["is_submodule"]], ["add", "theorem", "zero_val", ["is_submodule"]], ["add", "theorem", "smul_add", []], ["del", "theorem", "smul_left_distrib", []], ["del", "theorem", "smul_right_distrib", []], ["add", "theorem", "smul_sub", []], ["del", "theorem", "smul_sub_left_distrib", []], ["add", "theorem", "sub_smul", []], ["del", "theorem", "sub_smul_right_distrib", []], ["del", "theorem", "add_val", ["submodule"]], ["del", "theorem", "neg", ["submodule"]], ["del", "theorem", "neg_val", ["submodule"]], ["del", "theorem", "smul_val", ["submodule"]], ["del", "theorem", "sub", ["submodule"]], ["del", "theorem", "zero_val", ["submodule"]]]}]}, {"timestamp": 1512477235, "sha": "6ebe286e", "message": "refactor(.): use new funext tactic", "changes": [{"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/analysis/topology.lean", "newPath": "data/analysis/topology.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "mod_add_cancel_right", ["int"]], ["mod", "theorem", "mod_sub_cancel_right", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}]}, {"timestamp": 1512475486, "sha": "82735363", "message": "chore(.): adapt to change 6d96741010f5f36f2f4f046e4b2b8276eb2b04d4 (provide names for constructor arguments)", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": []}, {"oldPath": "tests/finish3.lean", "newPath": "tests/finish3.lean", "changes": []}]}, {"timestamp": 1512473053, "sha": "f6474f0c", "message": "chore(.): adapt to change b7322e28c12d274ccec992b7fc49d35b2e56a2a4 (remove AC simp rules)", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": []}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/analysis/filter.lean", "newPath": "data/analysis/filter.lean", "changes": []}, {"oldPath": "data/analysis/topology.lean", "newPath": "data/analysis/topology.lean", "changes": []}, {"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": []}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "def", "fold", ["finset"]]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "diff_nil", ["list"]], ["mod", "theorem", "pw_filter_nil", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": [["add", "theorem", "quot_mk_to_coe''", ["multiset"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": []}, {"oldPath": "data/nat/modeq.lean", "newPath": "data/nat/modeq.lean", "changes": []}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "data/set/prod.lean", "newPath": "data/set/prod.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}, {"oldPath": "pending/default.lean", "newPath": "pending/default.lean", "changes": [["add", "theorem", "of_to_bool_iff", []]]}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": []}, {"oldPath": "tests/finish3.lean", "newPath": "tests/finish3.lean", "changes": []}, {"oldPath": "theories/number_theory/dioph.lean", "newPath": "theories/number_theory/dioph.lean", "changes": [["mod", "theorem", "dioph_comp", ["dioph"]], ["mod", "theorem", "dioph_fn_comp", ["dioph"]]]}, {"oldPath": "theories/number_theory/pell.lean", "newPath": "theories/number_theory/pell.lean", "changes": []}, {"oldPath": "theories/set_theory.lean", "newPath": "theories/set_theory.lean", "changes": []}]}, {"timestamp": 1512429841, "sha": "2dadfdbb", "message": "feat(tactic/norm_num): add {nat,int}.mod", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": [["add", "theorem", "int_mod_helper", ["norm_num"]], ["add", "theorem", "nat_mod_helper", ["norm_num"]]]}]}, {"timestamp": 1512428757, "sha": "8d27f70b", "message": "feat(tactic/norm_num): add support for {nat,int}.div", "changes": [{"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": [["add", "theorem", "int_div_helper", ["norm_num"]], ["add", "theorem", "nat_div_helper", ["norm_num"]]]}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1512422591, "sha": "b1981c94", "message": "chore(theories/number_theory/dioph): cleanup", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "theories/number_theory/dioph.lean", "newPath": "theories/number_theory/dioph.lean", "changes": [["mod", "theorem", "abs_poly_dioph", ["dioph"]], ["mod", "theorem", "of_no_dummies", ["dioph"]], ["mod", "theorem", "add_eval", ["poly"]], ["del", "theorem", "add_val", ["poly"]], ["mod", "theorem", "const_eval", ["poly"]], ["del", "def", "eval", ["poly"]], ["mod", "def", "ext", ["poly"]], ["mod", "def", "isp", ["poly"]], ["mod", "theorem", "mul_eval", ["poly"]], ["del", "theorem", "mul_val", ["poly"]], ["mod", "theorem", "neg_eval", ["poly"]], ["del", "theorem", "neg_val", ["poly"]], ["mod", "theorem", "one_eval", ["poly"]], ["del", "theorem", "one_val", ["poly"]], ["mod", "theorem", "proj_eval", ["poly"]], ["mod", "theorem", "remap_eval", ["poly"]], ["mod", "theorem", "sub_eval", ["poly"]], ["del", "theorem", "sub_val", ["poly"]], ["mod", "def", "subst", ["poly"]], ["mod", "theorem", "subst_eval", ["poly"]], ["mod", "theorem", "sumsq_eq_zero", ["poly"]], ["mod", "theorem", "sumsq_nonneg", ["poly"]], ["mod", "theorem", "zero_eval", ["poly"]], ["del", "theorem", "zero_val", ["poly"]], ["del", "inductive", "vector2", []]]}]}, {"timestamp": 1512115335, "sha": "7191e391", "message": "feat(theories/number_theory/dioph): Pell equation, diophantine equations", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "bit0_zero", []], ["add", "theorem", "bit1_zero", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_mod", ["int"]], ["add", "theorem", "mod_add_cancel_left", ["int"]], ["add", "theorem", "mod_add_cancel_right", ["int"]], ["add", "theorem", "mod_eq_mod_iff_mod_sub_eq_zero", ["int"]], ["del", "theorem", "mod_eq_mod_of_add_mod_eq_add_mod_left", ["int"]], ["del", "theorem", "mod_eq_mod_of_add_mod_eq_add_mod_right", ["int"]], ["add", "theorem", "mod_sub_cancel_right", ["int"]], ["add", "theorem", "to_nat_coe_nat", ["int"]], ["add", "theorem", "to_nat_of_nonneg", ["int"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["mod", "theorem", "gcd_eq_one", ["nat", "coprime"]], ["mod", "theorem", "symm", ["nat", "coprime"]], ["add", "def", "gcd_a", ["nat"]], ["add", "def", "gcd_b", ["nat"]], ["add", "theorem", "gcd_eq_gcd_ab", ["nat"]], ["add", "def", "xgcd", ["nat"]], ["add", "def", "xgcd_aux", ["nat"]], ["add", "theorem", "xgcd_aux_P", ["nat"]], ["add", "theorem", "xgcd_aux_fst", ["nat"]], ["add", "theorem", "xgcd_aux_rec", ["nat"]], ["add", "theorem", "xgcd_aux_val", ["nat"]], ["add", "theorem", "xgcd_val", ["nat"]], ["add", "theorem", "xgcd_zero_left", ["nat"]]]}, {"oldPath": null, "newPath": "data/nat/modeq.lean", "changes": [["add", "theorem", "chinese_remainder", ["nat", "modeq"]], ["add", "theorem", "dvd_of_modeq", ["nat", "modeq"]], ["add", "theorem", "modeq_add", ["nat", "modeq"]], ["add", "theorem", "modeq_add_cancel_left", ["nat", "modeq"]], ["add", "theorem", "modeq_add_cancel_right", ["nat", "modeq"]], ["add", "theorem", "modeq_iff_dvd", ["nat", "modeq"]], ["add", "theorem", "modeq_mul", ["nat", "modeq"]], ["add", "theorem", "modeq_mul_left'", ["nat", "modeq"]], ["add", "theorem", "modeq_mul_left", ["nat", "modeq"]], ["add", "theorem", "modeq_mul_right'", ["nat", "modeq"]], ["add", "theorem", "modeq_mul_right", ["nat", "modeq"]], ["add", "theorem", "modeq_of_dvd", ["nat", "modeq"]], ["add", "theorem", "modeq_of_dvd_of_modeq", ["nat", "modeq"]], ["add", "theorem", "modeq_zero_iff", ["nat", "modeq"]], ["add", "def", "modeq", ["nat"]]]}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": [["mod", "def", "graph", ["pfun"]], ["add", "theorem", "lift_graph", ["pfun"]]]}, {"oldPath": null, "newPath": "theories/number_theory/dioph.lean", "changes": [["add", "def", "arity", []], ["add", "def", "curry", []], ["add", "theorem", "abs_poly_dioph", ["dioph"]], ["add", "theorem", "add_dioph", ["dioph"]], ["add", "theorem", "and_dioph", ["dioph"]], ["add", "theorem", "const_dioph", ["dioph"]], ["add", "theorem", "dioph_comp2", ["dioph"]], ["add", "theorem", "dioph_comp", ["dioph"]], ["add", "def", "dioph_fn", ["dioph"]], ["add", "theorem", "dioph_fn_comp1", ["dioph"]], ["add", "theorem", "dioph_fn_comp2", ["dioph"]], ["add", "theorem", "dioph_fn_comp", ["dioph"]], ["add", "theorem", "dioph_fn_compn", ["dioph"]], ["add", "theorem", "dioph_fn_iff_pfun", ["dioph"]], ["add", "theorem", "dioph_fn_vec", ["dioph"]], ["add", "theorem", "dioph_fn_vec_comp1", ["dioph"]], ["add", "theorem", "dioph_list_all", ["dioph"]], ["add", "def", "dioph_pfun", ["dioph"]], ["add", "theorem", "dioph_pfun_comp1", ["dioph"]], ["add", "theorem", "dioph_pfun_vec", ["dioph"]], ["add", "theorem", "div_dioph", ["dioph"]], ["add", "theorem", "dom_dioph", ["dioph"]], ["add", "theorem", "dvd_dioph", ["dioph"]], ["add", "theorem", "eq_dioph", ["dioph"]], ["add", "theorem", "ex1_dioph", ["dioph"]], ["add", "theorem", "ex_dioph", ["dioph"]], ["add", "theorem", "ext", ["dioph"]], ["add", "theorem", "inject_dummies", ["dioph"]], ["add", "theorem", "inject_dummies_lem", ["dioph"]], ["add", "theorem", "le_dioph", ["dioph"]], ["add", "theorem", "lt_dioph", ["dioph"]], ["add", "theorem", "mod_dioph", ["dioph"]], ["add", "theorem", "modeq_dioph", ["dioph"]], ["add", "theorem", "mul_dioph", ["dioph"]], ["add", "theorem", "ne_dioph", ["dioph"]], ["add", "theorem", "of_no_dummies", ["dioph"]], ["add", "theorem", "or_dioph", ["dioph"]], ["add", "theorem", "pell_dioph", ["dioph"]], ["add", "theorem", "pow_dioph", ["dioph"]], ["add", "theorem", "proj_dioph", ["dioph"]], ["add", "def", "proj_dioph_of_nat", ["dioph"]], ["add", "theorem", "reindex_dioph", ["dioph"]], ["add", "theorem", "reindex_dioph_fn", ["dioph"]], ["add", "theorem", "sub_dioph", ["dioph"]], ["add", "theorem", "vec_ex1_dioph", ["dioph"]], ["add", "theorem", "xn_dioph", ["dioph"]], ["add", "def", "dioph", []], ["add", "theorem", "exists_vector_succ", []], ["add", "theorem", "exists_vector_zero", []], ["add", "def", "add", ["fin2"]], ["add", "def", "elim0", ["fin2"]], ["add", "def", "insert_perm", ["fin2"]], ["add", "def", "left", ["fin2"]], ["add", "def", "of_nat'", ["fin2"]], ["add", "def", "opt_of_nat", ["fin2"]], ["add", "def", "remap_left", ["fin2"]], ["add", "inductive", "fin2", []], ["add", "theorem", "eq_nat_abs_iff_mul", ["int"]], ["add", "inductive", "is_poly", []], ["add", "theorem", "imp", ["list_all"]], ["add", "def", "list_all", []], ["add", "theorem", "list_all_congr", []], ["add", "theorem", "list_all_cons", []], ["add", "theorem", "list_all_iff_forall", []], ["add", "theorem", "list_all_map", []], ["add", "def", "cons", ["option"]], ["add", "def", "cons_head_tail", ["option"]], ["add", "def", "add", ["poly"]], ["add", "theorem", "add_eval", ["poly"]], ["add", "theorem", "add_val", ["poly"]], ["add", "def", "const", ["poly"]], ["add", "theorem", "const_eval", ["poly"]], ["add", "def", "eval", ["poly"]], ["add", "def", "ext", ["poly"]], ["add", "def", "induction", ["poly"]], ["add", "def", "isp", ["poly"]], ["add", "def", "mul", ["poly"]], ["add", "theorem", "mul_eval", ["poly"]], ["add", "theorem", "mul_val", ["poly"]], ["add", "def", "neg", ["poly"]], ["add", "theorem", "neg_eval", ["poly"]], ["add", "theorem", "neg_val", ["poly"]], ["add", "def", "one", ["poly"]], ["add", "theorem", "one_eval", ["poly"]], ["add", "theorem", "one_val", ["poly"]], ["add", "def", "pow", ["poly"]], ["add", "def", "proj", ["poly"]], ["add", "theorem", "proj_eval", ["poly"]], ["add", "def", "remap", ["poly"]], ["add", "theorem", "remap_eval", ["poly"]], ["add", "def", "sub", ["poly"]], ["add", "theorem", "sub_eval", ["poly"]], ["add", "theorem", "sub_val", ["poly"]], ["add", "def", "subst", ["poly"]], ["add", "theorem", "subst_eval", ["poly"]], ["add", "def", "sumsq", ["poly"]], ["add", "theorem", "sumsq_eq_zero", ["poly"]], ["add", "theorem", "sumsq_nonneg", ["poly"]], ["add", "def", "zero", ["poly"]], ["add", "theorem", "zero_eval", ["poly"]], ["add", "theorem", "zero_val", ["poly"]], ["add", "def", "poly", []], ["add", "def", "join", ["sum"]], ["add", "def", "uncurry", []], ["add", "inductive", "vector2", []], ["add", "def", "append", ["vector3"]], ["add", "def", "append_add", ["vector3"]], ["add", "def", "append_cons", ["vector3"]], ["add", "theorem", "append_insert", ["vector3"]], ["add", "def", "append_left", ["vector3"]], ["add", "def", "append_nil", ["vector3"]], ["add", "def", "cons", ["vector3"]], ["add", "def", "cons_elim", ["vector3"]], ["add", "theorem", "cons_elim_cons", ["vector3"]], ["add", "def", "cons_fs", ["vector3"]], ["add", "def", "cons_fz", ["vector3"]], ["add", "theorem", "cons_head_tail", ["vector3"]], ["add", "theorem", "eq_nil", ["vector3"]], ["add", "def", "head", ["vector3"]], ["add", "def", "insert", ["vector3"]], ["add", "def", "insert_fs", ["vector3"]], ["add", "theorem", "insert_fz", ["vector3"]], ["add", "def", "nil", ["vector3"]], ["add", "def", "nil_elim", ["vector3"]], ["add", "def", "nth", ["vector3"]], ["add", "def", "of_fn", ["vector3"]], ["add", "theorem", "rec_on_cons", ["vector3"]], ["add", "theorem", "rec_on_nil", ["vector3"]], ["add", "def", "tail", ["vector3"]], ["add", "def", "vector3", []], ["add", "def", "vector_all", []], ["add", "theorem", "vector_all_iff_forall", []], ["add", "theorem", "imp", ["vector_allp"]], ["add", "def", "vector_allp", []], ["add", "theorem", "vector_allp_cons", []], ["add", "theorem", "vector_allp_iff_forall", []], ["add", "theorem", "vector_allp_nil", []], ["add", "theorem", "vector_allp_singleton", []], ["add", "def", "vector_ex", []], ["add", "theorem", "vector_ex_iff_exists", []]]}, {"oldPath": null, "newPath": "theories/number_theory/pell.lean", "changes": [["add", "theorem", "asq_pos", ["pell"]], ["add", "def", "az", ["pell"]], ["add", "theorem", "d_pos", ["pell"]], ["add", "theorem", "dvd_of_ysq_dvd", ["pell"]], ["add", "theorem", "dz_val", ["pell"]], ["add", "theorem", "eq_of_xn_modeq'", ["pell"]], ["add", "theorem", "eq_of_xn_modeq", ["pell"]], ["add", "theorem", "eq_of_xn_modeq_le", ["pell"]], ["add", "theorem", "eq_of_xn_modeq_lem1", ["pell"]], ["add", "theorem", "eq_of_xn_modeq_lem2", ["pell"]], ["add", "theorem", "eq_of_xn_modeq_lem3", ["pell"]], ["add", "theorem", "eq_pell", ["pell"]], ["add", "theorem", "eq_pell_lem", ["pell"]], ["add", "theorem", "eq_pell_zd", ["pell"]], ["add", "theorem", "eq_pow_of_pell", ["pell"]], ["add", "theorem", "eq_pow_of_pell_lem", ["pell"]], ["add", "def", "is_pell", ["pell"]], ["add", "def", "is_pell_conj", ["pell"]], ["add", "def", "is_pell_mul", ["pell"]], ["add", "def", "is_pell_nat", ["pell"]], ["add", "def", "is_pell_norm", ["pell"]], ["add", "def", "is_pell_one", ["pell"]], ["add", "def", "is_pell_pell_zd", ["pell"]], ["add", "theorem", "matiyasevic", ["pell"]], ["add", "theorem", "modeq_of_xn_modeq", ["pell"]], ["add", "def", "n_lt_a_pow", ["pell"]], ["add", "theorem", "n_lt_xn", ["pell"]], ["add", "def", "pell", ["pell"]], ["add", "theorem", "pell_eq", ["pell"]], ["add", "theorem", "pell_eqz", ["pell"]], ["add", "theorem", "pell_val", ["pell"]], ["add", "def", "pell_zd", ["pell"]], ["add", "theorem", "pell_zd_add", ["pell"]], ["add", "theorem", "pell_zd_im", ["pell"]], ["add", "theorem", "pell_zd_re", ["pell"]], ["add", "theorem", "pell_zd_sub", ["pell"]], ["add", "theorem", "pell_zd_succ", ["pell"]], ["add", "theorem", "pell_zd_succ_succ", ["pell"]], ["add", "theorem", "x_increasing", ["pell"]], ["add", "theorem", "x_pos", ["pell"]], ["add", "theorem", "x_sub_y_dvd_pow", ["pell"]], ["add", "theorem", "x_sub_y_dvd_pow_lem", ["pell"]], ["add", "def", "xn", ["pell"]], ["add", "theorem", "xn_add", ["pell"]], ["add", "def", "xn_ge_a_pow", ["pell"]], ["add", "theorem", "xn_modeq_x2n_add", ["pell"]], ["add", "theorem", "xn_modeq_x2n_add_lem", ["pell"]], ["add", "theorem", "xn_modeq_x2n_sub", ["pell"]], ["add", "theorem", "xn_modeq_x2n_sub_lem", ["pell"]], ["add", "theorem", "xn_modeq_x4n_add", ["pell"]], ["add", "theorem", "xn_modeq_x4n_sub", ["pell"]], ["add", "theorem", "xn_one", ["pell"]], ["add", "theorem", "xn_succ", ["pell"]], ["add", "theorem", "xn_succ_succ", ["pell"]], ["add", "theorem", "xn_zero", ["pell"]], ["add", "theorem", "xy_coprime", ["pell"]], ["add", "theorem", "xy_modeq_of_modeq", ["pell"]], ["add", "theorem", "xy_modeq_yn", ["pell"]], ["add", "theorem", "xy_succ_succ", ["pell"]], ["add", "def", "xz", ["pell"]], ["add", "theorem", "xz_sub", ["pell"]], ["add", "theorem", "xz_succ", ["pell"]], ["add", "theorem", "xz_succ_succ", ["pell"]], ["add", "theorem", "y_dvd_iff", ["pell"]], ["add", "theorem", "y_increasing", ["pell"]], ["add", "theorem", "y_mul_dvd", ["pell"]], ["add", "def", "yn", ["pell"]], ["add", "theorem", "yn_add", ["pell"]], ["add", "theorem", "yn_ge_n", ["pell"]], ["add", "theorem", "yn_modeq_a_sub_one", ["pell"]], ["add", "theorem", "yn_modeq_two", ["pell"]], ["add", "theorem", "yn_one", ["pell"]], ["add", "theorem", "yn_succ", ["pell"]], ["add", "theorem", "yn_succ_succ", ["pell"]], ["add", "theorem", "yn_zero", ["pell"]], ["add", "theorem", "ysq_dvd_yy", ["pell"]], ["add", "def", "yz", ["pell"]], ["add", "theorem", "yz_sub", ["pell"]], ["add", "theorem", "yz_succ", ["pell"]], ["add", "theorem", "yz_succ_succ", ["pell"]], ["add", "def", "add", ["zsqrtd"]], ["add", "theorem", "add_def", ["zsqrtd"]], ["add", "theorem", "add_im", ["zsqrtd"]], ["add", "theorem", "add_re", ["zsqrtd"]], ["add", "theorem", "bit0_im", ["zsqrtd"]], ["add", "theorem", "bit0_re", ["zsqrtd"]], ["add", "theorem", "bit1_im", ["zsqrtd"]], ["add", "theorem", "bit1_re", ["zsqrtd"]], ["add", "theorem", "coe_int_im", ["zsqrtd"]], ["add", "theorem", "coe_int_re", ["zsqrtd"]], ["add", "theorem", "coe_int_val", ["zsqrtd"]], ["add", "theorem", "coe_nat_im", ["zsqrtd"]], ["add", "theorem", "coe_nat_re", ["zsqrtd"]], ["add", "theorem", "coe_nat_val", ["zsqrtd"]], ["add", "def", "conj", ["zsqrtd"]], ["add", "theorem", "conj_im", ["zsqrtd"]], ["add", "theorem", "conj_mul", ["zsqrtd"]], ["add", "theorem", "conj_re", ["zsqrtd"]], ["add", "theorem", "d_pos", ["zsqrtd"]], ["add", "theorem", "decompose", ["zsqrtd"]], ["add", "theorem", "divides_sq_eq_zero", ["zsqrtd"]], ["add", "theorem", "divides_sq_eq_zero_z", ["zsqrtd"]], ["add", "theorem", "ext", ["zsqrtd"]], ["add", "theorem", "le_antisymm", ["zsqrtd"]], ["add", "theorem", "le_arch", ["zsqrtd"]], ["add", "theorem", "le_of_le_le", ["zsqrtd"]], ["add", "theorem", "le_refl", ["zsqrtd"]], ["add", "def", "mul", ["zsqrtd"]], ["add", "theorem", "mul_conj", ["zsqrtd"]], ["add", "theorem", "mul_im", ["zsqrtd"]], ["add", "theorem", "mul_re", ["zsqrtd"]], ["add", "theorem", "muld_val", ["zsqrtd"]], ["add", "def", "neg", ["zsqrtd"]], ["add", "theorem", "neg_im", ["zsqrtd"]], ["add", "theorem", "neg_re", ["zsqrtd"]], ["add", "def", "nonneg", ["zsqrtd"]], ["add", "theorem", "nonneg_add", ["zsqrtd"]], ["add", "theorem", "nonneg_add_lem", ["zsqrtd"]], ["add", "theorem", "nonneg_antisymm", ["zsqrtd"]], ["add", "theorem", "nonneg_cases", ["zsqrtd"]], ["add", "theorem", "nonneg_iff_zero_le", ["zsqrtd"]], ["add", "theorem", "nonneg_mul", ["zsqrtd"]], ["add", "theorem", "nonneg_mul_lem", ["zsqrtd"]], ["add", "theorem", "nonneg_muld", ["zsqrtd"]], ["add", "theorem", "nonneg_smul", ["zsqrtd"]], ["add", "def", "nonnegg", ["zsqrtd"]], ["add", "def", "nonnegg_cases_left", ["zsqrtd"]], ["add", "def", "nonnegg_cases_right", ["zsqrtd"]], ["add", "def", "nonnegg_comm", ["zsqrtd"]], ["add", "def", "nonnegg_neg_pos", ["zsqrtd"]], ["add", "def", "nonnegg_pos_neg", ["zsqrtd"]], ["add", "theorem", "not_divides_square", ["zsqrtd"]], ["add", "theorem", "not_sq_le_succ", ["zsqrtd"]], ["add", "def", "of_int", ["zsqrtd"]], ["add", "theorem", "of_int_eq_coe", ["zsqrtd"]], ["add", "theorem", "of_int_im", ["zsqrtd"]], ["add", "theorem", "of_int_re", ["zsqrtd"]], ["add", "def", "one", ["zsqrtd"]], ["add", "theorem", "one_im", ["zsqrtd"]], ["add", "theorem", "one_re", ["zsqrtd"]], ["add", "theorem", "smul_val", ["zsqrtd"]], ["add", "theorem", "smuld_val", ["zsqrtd"]], ["add", "def", "sq_le", ["zsqrtd"]], ["add", "theorem", "sq_le_add", ["zsqrtd"]], ["add", "theorem", "sq_le_add_mixed", ["zsqrtd"]], ["add", "theorem", "sq_le_cancel", ["zsqrtd"]], ["add", "theorem", "sq_le_mul", ["zsqrtd"]], ["add", "theorem", "sq_le_of_le", ["zsqrtd"]], ["add", "theorem", "sq_le_smul", ["zsqrtd"]], ["add", "def", "sqrtd", ["zsqrtd"]], ["add", "theorem", "sqrtd_im", ["zsqrtd"]], ["add", "theorem", "sqrtd_re", ["zsqrtd"]], ["add", "def", "zero", ["zsqrtd"]], ["add", "theorem", "zero_im", ["zsqrtd"]], ["add", "theorem", "zero_re", ["zsqrtd"]], ["add", "structure", "zsqrtd", []]]}]}, {"timestamp": 1512079819, "sha": "f57e59f4", "message": "feat(data/analysis): calculations with filters / topologies + misc", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "exists_ne_one_of_prod_ne_one", ["finset"]], ["mod", "theorem", "prod_bind", ["finset"]], ["add", "theorem", "prod_eq_fold", ["finset"]], ["mod", "theorem", "prod_image", ["finset"]], ["mod", "theorem", "prod_insert", ["finset"]], ["mod", "theorem", "prod_sdiff", ["finset"]], ["mod", "theorem", "prod_sigma", ["finset"]], ["mod", "theorem", "prod_singleton", ["finset"]], ["mod", "theorem", "prod_union", ["finset"]], ["mod", "theorem", "prod_union_inter", ["finset"]]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["mod", "theorem", "zero_le", []]]}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["add", "theorem", "is_open_iff_mem_nhds", []], ["add", "theorem", "mem_interior_iff_mem_nhds", []], ["mod", "theorem", "mem_nhds_of_is_topological_basis", ["topological_space"]]]}, {"oldPath": null, "newPath": "data/analysis/filter.lean", "changes": [["add", "theorem", "coe_mk", ["cfilter"]], ["add", "theorem", "mem_to_filter_sets", ["cfilter"]], ["add", "def", "of_equiv", ["cfilter"]], ["add", "theorem", "of_equiv_val", ["cfilter"]], ["add", "def", "to_filter", ["cfilter"]], ["add", "structure", "cfilter", []], ["add", "theorem", "bot_F", ["filter", "realizer"]], ["add", "theorem", "bot_σ", ["filter", "realizer"]], ["add", "theorem", "le_iff", ["filter", "realizer"]], ["add", "theorem", "map_F", ["filter", "realizer"]], ["add", "theorem", "map_σ", ["filter", "realizer"]], ["add", "theorem", "mem_sets", ["filter", "realizer"]], ["add", "theorem", "ne_bot_iff", ["filter", "realizer"]], ["add", "def", "of_eq", ["filter", "realizer"]], ["add", "def", "of_equiv", ["filter", "realizer"]], ["add", "theorem", "of_equiv_F", ["filter", "realizer"]], ["add", "theorem", "of_equiv_σ", ["filter", "realizer"]], ["add", "def", "of_filter", ["filter", "realizer"]], ["add", "theorem", "principal_F", ["filter", "realizer"]], ["add", "theorem", "principal_σ", ["filter", "realizer"]], ["add", "theorem", "tendsto_iff", ["filter", "realizer"]], ["add", "theorem", "top_F", ["filter", "realizer"]], ["add", "theorem", "top_σ", ["filter", "realizer"]], ["add", "structure", "realizer", ["filter"]]]}, {"oldPath": null, "newPath": "data/analysis/topology.lean", "changes": [["add", "def", "realizer", ["compact"]], ["add", "theorem", "coe_mk", ["ctop"]], ["add", "theorem", "mem_nhds_to_topsp", ["ctop"]], ["add", "def", "of_equiv", ["ctop"]], ["add", "theorem", "of_equiv_val", ["ctop"]], ["add", "theorem", "ext'", ["ctop", "realizer"]], ["add", "theorem", "ext", ["ctop", "realizer"]], ["add", "theorem", "is_closed_iff", ["ctop", "realizer"]], ["add", "theorem", "is_open_iff", ["ctop", "realizer"]], ["add", "theorem", "mem_interior_iff", ["ctop", "realizer"]], ["add", "theorem", "nhds_F", ["ctop", "realizer"]], ["add", "theorem", "nhds_σ", ["ctop", "realizer"]], ["add", "def", "of_equiv", ["ctop", "realizer"]], ["add", "theorem", "of_equiv_F", ["ctop", "realizer"]], ["add", "theorem", "of_equiv_σ", ["ctop", "realizer"]], ["add", "theorem", "tendsto_nhds_iff", ["ctop", "realizer"]], ["add", "structure", "realizer", ["ctop"]], ["add", "theorem", "to_topsp_is_topological_basis", ["ctop"]], ["add", "structure", "ctop", []], ["add", "theorem", "to_locally_finite", ["locally_finite", "realizer"]], ["add", "structure", "realizer", ["locally_finite"]], ["add", "theorem", "locally_finite_iff_exists_realizer", []]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["equiv"]], ["mod", "theorem", "apply_inverse_apply", ["equiv"]], ["mod", "theorem", "inverse_apply_apply", ["equiv"]]]}, {"oldPath": "data/finset.lean", "newPath": "data/finset.lean", "changes": [["mod", "theorem", "fold_image", ["finset"]], ["mod", "theorem", "fold_insert", ["finset"]], ["mod", "theorem", "fold_insert_idem", ["finset"]], ["mod", "theorem", "fold_singleton", ["finset"]], ["mod", "theorem", "fold_union_inter", ["finset"]], ["mod", "theorem", "image_singleton", ["finset"]], ["add", "theorem", "insert_empty_eq_singleton", ["finset"]], ["del", "theorem", "insert_singelton_self_eq", ["finset"]], ["add", "theorem", "insert_singleton_self_eq", ["finset"]], ["add", "theorem", "inter_eq_empty_iff_disjoint", ["finset"]], ["mod", "theorem", "inter_singleton_of_mem", ["finset"]], ["mod", "theorem", "inter_singleton_of_not_mem", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_self", ["finset"]], ["add", "def", "singleton", ["finset"]], ["add", "theorem", "singleton_eq_singleton", ["finset"]], ["mod", "theorem", "singleton_inj", ["finset"]], ["mod", "theorem", "singleton_inter_of_mem", ["finset"]], ["mod", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["mod", "theorem", "singleton_val", ["finset"]]]}, {"oldPath": "data/fintype.lean", "newPath": "data/fintype.lean", "changes": [["add", "def", "card", ["fintype"]], ["add", "def", "equiv_fin", ["fintype"]], ["add", "theorem", "exists_equiv_fin", ["fintype"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "nodup_iff_nth_le_inj", ["list"]], ["add", "theorem", "pairwise_iff_nth_le", ["list"]]]}, {"oldPath": "data/multiset.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/nat/prime.lean", "newPath": "data/nat/prime.lean", "changes": [["add", "def", "factors", ["nat"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["add", "theorem", "nonempty_of_trunc", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "eq_univ_iff_forall", ["set"]], ["mod", "theorem", "eq_univ_of_forall", ["set"]], ["mod", "theorem", "inter_subset_left", ["set"]], ["mod", "theorem", "inter_subset_right", ["set"]], ["mod", "theorem", "range_id", ["set"]], ["add", "theorem", "range_iff_surjective", ["set"]], ["del", "theorem", "range_of_surjective", ["set"]], ["mod", "theorem", "subset_empty_iff", ["set"]], ["add", "theorem", "subset_eq_empty", ["set"]], ["add", "theorem", "subset_inter_iff", ["set"]], ["add", "theorem", "subset_ne_empty", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["del", "inductive", "finite'", ["set"]], ["add", "theorem", "finite_mem_finset", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "iff_iff_eq", []], ["add", "theorem", "iff_of_eq", []]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["mod", "def", "monotone", []]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "def", "bind", ["filter"]], ["mod", "theorem", "bind_def", ["filter"]], ["mod", "theorem", "bind_mono2", ["filter"]], ["mod", "theorem", "bind_mono", ["filter"]], ["mod", "theorem", "bind_sup", ["filter"]], ["del", "theorem", "fmap_principal", ["filter"]], ["add", "theorem", "map_def", ["filter"]], ["mod", "theorem", "mem_bind_sets", ["filter"]], ["mod", "theorem", "principal_bind", ["filter"]]]}]}, {"timestamp": 1512079819, "sha": "b207991b", "message": "refactor(data/multiset): move multiset, finset, ordered_monoid", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "algebra/default.lean", "newPath": "algebra/default.lean", "changes": []}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "add_eq_zero_iff", []], ["add", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg'", []], ["add", "theorem", "add_le_add'", []], ["add", "theorem", "add_le_add_left'", []], ["add", "theorem", "add_le_add_right'", []], ["add", "theorem", "add_le_of_le_of_nonpos'", []], ["add", "theorem", "add_le_of_nonpos_of_le'", []], ["add", "theorem", "add_lt_of_lt_of_neg'", []], ["add", "theorem", "add_lt_of_lt_of_nonpos'", []], ["add", "theorem", "add_lt_of_neg_of_lt'", []], ["add", "theorem", "add_lt_of_nonpos_of_lt'", []], ["add", "theorem", "add_neg'", []], ["add", "theorem", "add_neg_of_neg_of_nonpos'", []], ["add", "theorem", "add_neg_of_nonpos_of_neg'", []], ["add", "theorem", "add_nonneg'", []], ["add", "theorem", "add_nonpos'", []], ["add", "theorem", "add_pos'", []], ["add", "theorem", "add_pos_of_nonneg_of_pos'", []], ["add", "theorem", "add_pos_of_pos_of_nonneg'", []], ["add", "theorem", "le_add_of_le_of_nonneg'", []], ["add", "theorem", "le_add_of_nonneg_left'", []], ["add", "theorem", "le_add_of_nonneg_of_le'", []], ["add", "theorem", "le_add_of_nonneg_right'", []], ["add", "theorem", "le_iff_exists_add", []], ["add", "theorem", "lt_add_of_lt_of_nonneg'", []], ["add", "theorem", "lt_add_of_lt_of_pos'", []], ["add", "theorem", "lt_add_of_nonneg_of_lt'", []], ["add", "theorem", "lt_add_of_pos_of_lt'", []], ["add", "theorem", "lt_of_add_lt_add_left'", []], ["add", "theorem", "lt_of_add_lt_add_right'", []], ["add", "theorem", "zero_le", []]]}, {"oldPath": "algebra/ordered_monoid.lean", "newPath": null, "changes": [["del", "theorem", "add_eq_zero_iff", []], ["del", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg'", []], ["del", "theorem", "add_le_add'", []], ["del", "theorem", "add_le_add_left'", []], ["del", "theorem", "add_le_add_right'", []], ["del", "theorem", "add_le_of_le_of_nonpos'", []], ["del", "theorem", "add_le_of_nonpos_of_le'", []], ["del", "theorem", "add_lt_of_lt_of_neg'", []], ["del", "theorem", "add_lt_of_lt_of_nonpos'", []], ["del", "theorem", "add_lt_of_neg_of_lt'", []], ["del", "theorem", "add_lt_of_nonpos_of_lt'", []], ["del", "theorem", "add_neg'", []], ["del", "theorem", "add_neg_of_neg_of_nonpos'", []], ["del", "theorem", "add_neg_of_nonpos_of_neg'", []], ["del", "theorem", "add_nonneg'", []], ["del", "theorem", "add_nonpos'", []], ["del", "theorem", "add_pos'", []], ["del", "theorem", "add_pos_of_nonneg_of_pos'", []], ["del", "theorem", "add_pos_of_pos_of_nonneg'", []], ["del", "theorem", "le_add_of_le_of_nonneg'", []], ["del", "theorem", "le_add_of_nonneg_left'", []], ["del", "theorem", "le_add_of_nonneg_of_le'", []], ["del", "theorem", "le_add_of_nonneg_right'", []], ["del", "theorem", "le_iff_exists_add", []], ["del", "theorem", "lt_add_of_lt_of_nonneg'", []], ["del", "theorem", "lt_add_of_lt_of_pos'", []], ["del", "theorem", "lt_add_of_nonneg_of_lt'", []], ["del", "theorem", "lt_add_of_pos_of_lt'", []], ["del", "theorem", "lt_of_add_lt_add_left'", []], ["del", "theorem", "lt_of_add_lt_add_right'", []], ["del", "theorem", "zero_le", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset.lean", "changes": []}, {"oldPath": "data/finset/default.lean", "newPath": null, "changes": []}, {"oldPath": "data/finset/fintype.lean", "newPath": "data/fintype.lean", "changes": []}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}]}, {"timestamp": 1512079819, "sha": "f9b66717", "message": "Revert \"fix(algebra/group): workaround for #1871\"\nThis reverts commit b9dcc64a998c417551d95f3b0d9b8ee8b690d21b.", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}]}, {"timestamp": 1511896445, "sha": "67aecac0", "message": "fix(data/option): adapt to https://github.com/leanprover/lean/commit/f6b113849b367d49fc4a506f0698c7f1e062851e", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": []}]}, {"timestamp": 1511500922, "sha": "2c84af16", "message": "feat(data/set/finite): unify fintype and finite developments\nHere fintype is the \"constructive\" one, which exhibits a list enumerating the set (quotiented over permutations), while \"finite\" merely states the existence of such a list.", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": [["mod", "theorem", "is_open_sInter", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": []}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["add", "def", "encodable_of_list", []], ["add", "def", "trunc_encodable_of_fintype", []]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": []}, {"oldPath": "data/finset/fintype.lean", "newPath": "data/finset/fintype.lean", "changes": [["add", "theorem", "mem_univ_val", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "nodup_filter_map", ["list"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "mem_def", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["mod", "theorem", "to_encodable", ["set", "countable"]], ["mod", "theorem", "countable_encodable'", ["set"]], ["mod", "theorem", "countable_finite", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "inductive", "finite'", ["set"]], ["add", "theorem", "induction_on", ["set", "finite"]], ["add", "theorem", "mem_to_finset", ["set", "finite"]], ["add", "def", "finite", ["set"]], ["del", "inductive", "finite", ["set"]], ["add", "theorem", "finite_Union", ["set"]], ["add", "theorem", "finite_empty", ["set"]], ["mod", "theorem", "finite_image", ["set"]], ["mod", "theorem", "finite_insert", ["set"]], ["mod", "theorem", "finite_le_nat", ["set"]], ["mod", "theorem", "finite_prod", ["set"]], ["mod", "theorem", "finite_sUnion", ["set"]], ["mod", "theorem", "finite_singleton", ["set"]], ["mod", "theorem", "finite_subset", ["set"]], ["mod", "theorem", "finite_union", ["set"]], ["add", "def", "fintype_insert'", ["set"]], ["add", "def", "fintype_of_finset", ["set"]], ["add", "def", "fintype_of_fintype_image", ["set"]], ["add", "def", "fintype_subset", ["set"]], ["add", "theorem", "mem_to_finset", ["set"]], ["add", "theorem", "mem_to_finset_val", ["set"]], ["add", "def", "to_finset", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "sUnion_eq_Union'", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "injective_of_partial_inv", ["function"]], ["add", "theorem", "injective_of_partial_inv_right", ["function"]], ["add", "def", "is_partial_inv", ["function"]], ["del", "theorem", "partial_inv_eq", ["function"]], ["del", "theorem", "partial_inv_eq_of_eq", ["function"]], ["add", "theorem", "partial_inv_of_injective", ["function"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "tests/finish3.lean", "newPath": "tests/finish3.lean", "changes": []}]}, {"timestamp": 1511500775, "sha": "e5764291", "message": "feat(data/multiset): filter_map", "changes": [{"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": [["add", "theorem", "coe_filter_map", ["multiset"]], ["add", "theorem", "filter_filter_map", ["multiset"]], ["add", "def", "filter_map", ["multiset"]], ["add", "theorem", "filter_map_cons_none", ["multiset"]], ["add", "theorem", "filter_map_cons_some", ["multiset"]], ["add", "theorem", "filter_map_eq_filter", ["multiset"]], ["add", "theorem", "filter_map_eq_map", ["multiset"]], ["add", "theorem", "filter_map_filter", ["multiset"]], ["add", "theorem", "filter_map_filter_map", ["multiset"]], ["add", "theorem", "filter_map_le_filter_map", ["multiset"]], ["add", "theorem", "filter_map_map", ["multiset"]], ["add", "theorem", "filter_map_some", ["multiset"]], ["add", "theorem", "filter_map_zero", ["multiset"]], ["add", "theorem", "map_filter_map", ["multiset"]], ["add", "theorem", "map_filter_map_of_inv", ["multiset"]], ["add", "theorem", "mem_filter_map", ["multiset"]], ["add", "theorem", "nodup_filter_map", ["multiset"]]]}]}, {"timestamp": 1511500730, "sha": "bade51a0", "message": "feat(data/quot): add trunc type (like nonempty in Type)\nIt is named after the propositional truncation operator in HoTT, although of course the behavior is a bit different in a proof irrelevant setting.", "changes": [{"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["mod", "theorem", "forall_quotient_iff", []], ["add", "theorem", "out_eq", ["quot"]], ["add", "theorem", "mk_out", ["quotient"]], ["add", "theorem", "out_eq", ["quotient"]], ["add", "theorem", "exists_rep", ["trunc"]], ["add", "theorem", "ind", ["trunc"]], ["add", "def", "lift", ["trunc"]], ["add", "def", "mk", ["trunc"]], ["add", "theorem", "out_eq", ["trunc"]], ["add", "def", "{u}", []]]}]}, {"timestamp": 1511479989, "sha": "16d40d74", "message": "feat(data/finset): fintype, multiset.sort, list.pmap", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_bind", ["finset"]], ["mod", "theorem", "prod_product", ["finset"]]]}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["equiv"]], ["mod", "theorem", "apply_eq_iff_eq_inverse_apply", ["equiv"]], ["mod", "theorem", "apply_inverse_apply", ["equiv"]], ["add", "def", "arrow_empty_unit", ["equiv"]], ["del", "theorem", "arrow_empty_unit", ["equiv"]], ["mod", "theorem", "coe_fn_mk", ["equiv"]], ["mod", "theorem", "coe_fn_symm_mk", ["equiv"]], ["mod", "theorem", "comp_apply", ["equiv"]], ["add", "def", "empty_of_not_nonempty", ["equiv"]], ["del", "theorem", "empty_of_not_nonempty", ["equiv"]], ["del", "theorem", "eq_iff_eq_of_injective", ["equiv"]], ["mod", "theorem", "eq_of_to_fun_eq", ["equiv"]], ["mod", "theorem", "id_apply", ["equiv"]], ["mod", "theorem", "inverse_apply_apply", ["equiv"]], ["add", "def", "sum_equiv_sigma_bool", ["equiv"]], ["mod", "theorem", "swap_apply_def", ["equiv"]], ["mod", "theorem", "swap_apply_left", ["equiv"]], ["mod", "theorem", "swap_apply_of_ne_of_ne", ["equiv"]], ["mod", "theorem", "swap_apply_right", ["equiv"]], ["mod", "theorem", "swap_comm", ["equiv"]], ["mod", "theorem", "swap_comp_apply", ["equiv"]], ["mod", "theorem", "swap_core_comm", ["equiv"]], ["mod", "theorem", "swap_core_self", ["equiv"]], ["mod", "theorem", "swap_core_swap_core", ["equiv"]], ["mod", "theorem", "swap_self", ["equiv"]], ["mod", "theorem", "swap_swap", ["equiv"]], ["mod", "theorem", "f_g_eq_id", ["function", "left_inverse"]], ["mod", "theorem", "g_f_eq_id", ["function", "right_inverse"]], ["mod", "theorem", "map_comp", ["subtype"]], ["mod", "theorem", "map_id", ["subtype"]]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["add", "def", "attach", ["finset"]], ["add", "theorem", "attach_val", ["finset"]], ["add", "theorem", "bind_empty", ["finset"]], ["add", "theorem", "bind_image", ["finset"]], ["add", "theorem", "bind_insert", ["finset"]], ["add", "theorem", "bind_to_finset", ["finset"]], ["add", "theorem", "bind_val", ["finset"]], ["add", "def", "fold", ["finset"]], ["add", "theorem", "fold_congr", ["finset"]], ["add", "theorem", "fold_empty", ["finset"]], ["add", "theorem", "fold_hom", ["finset"]], ["add", "theorem", "fold_image", ["finset"]], ["add", "theorem", "fold_insert", ["finset"]], ["add", "theorem", "fold_insert_idem", ["finset"]], ["add", "theorem", "fold_op_distrib", ["finset"]], ["add", "theorem", "fold_singleton", ["finset"]], ["add", "theorem", "fold_union_inter", ["finset"]], ["add", "theorem", "image_bind", ["finset"]], ["add", "theorem", "mem_attach", ["finset"]], ["add", "theorem", "mem_bind", ["finset"]], ["add", "theorem", "mem_mk", ["finset"]], ["add", "theorem", "mem_product", ["finset"]], ["add", "theorem", "mem_sigma", ["finset"]], ["del", "theorem", "mem_univ", ["finset"]], ["add", "theorem", "product_eq_bind", ["finset"]], ["add", "theorem", "product_val", ["finset"]], ["add", "theorem", "sigma_eq_bind", ["finset"]], ["add", "theorem", "sigma_mono", ["finset"]], ["add", "def", "sort", ["finset"]], ["add", "theorem", "sort_eq", ["finset"]], ["add", "theorem", "sort_nodup", ["finset"]], ["add", "theorem", "sort_sorted", ["finset"]], ["add", "theorem", "sort_to_finset", ["finset"]], ["del", "theorem", "subset_univ", ["finset"]], ["del", "def", "univ", ["finset"]], ["del", "def", "of_list", ["fintype"]], ["del", "def", "of_multiset", ["fintype"]]]}, {"oldPath": "data/finset/default.lean", "newPath": "data/finset/default.lean", "changes": []}, {"oldPath": null, "newPath": "data/finset/fintype.lean", "changes": [["add", "theorem", "mem_univ", ["finset"]], ["add", "theorem", "subset_univ", ["finset"]], ["add", "def", "univ", ["finset"]], ["add", "def", "of_bijective", ["fintype"]], ["add", "def", "of_equiv", ["fintype"]], ["add", "def", "of_list", ["fintype"]], ["add", "def", "of_multiset", ["fintype"]], ["add", "def", "of_surjective", ["fintype"]]]}, {"oldPath": "data/finset/fold.lean", "newPath": null, "changes": [["del", "theorem", "bind_empty", ["finset"]], ["del", "theorem", "bind_image", ["finset"]], ["del", "theorem", "bind_insert", ["finset"]], ["del", "theorem", "bind_to_finset", ["finset"]], ["del", "def", "fold", ["finset"]], ["del", "theorem", "fold_congr", ["finset"]], ["del", "theorem", "fold_empty", ["finset"]], ["del", "theorem", "fold_hom", ["finset"]], ["del", "theorem", "fold_image", ["finset"]], ["del", "theorem", "fold_insert", ["finset"]], ["del", "theorem", "fold_insert_idem", ["finset"]], ["del", "theorem", "fold_op_distrib", ["finset"]], ["del", "theorem", "fold_singleton", ["finset"]], ["del", "theorem", "fold_union_inter", ["finset"]], ["del", "theorem", "image_bind", ["finset"]], ["del", "theorem", "mem_bind", ["finset"]], ["del", "theorem", "mem_product", ["finset"]], ["del", "theorem", "mem_sigma", ["finset"]], ["del", "theorem", "product_eq_bind", ["finset"]], ["del", "theorem", "product_val", ["finset"]], ["del", "theorem", "sigma_mono", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "def", "attach", ["list"]], ["add", "theorem", "attach_map_val", ["list"]], ["add", "theorem", "length_sigma", ["list"]], ["add", "theorem", "map_pmap", ["list"]], ["add", "theorem", "mem_attach", ["list"]], ["add", "theorem", "mem_pmap", ["list"]], ["add", "theorem", "mem_sigma", ["list"]], ["add", "theorem", "nil_sigma", ["list"]], ["add", "theorem", "nodup_attach", ["list"]], ["add", "theorem", "nodup_pmap", ["list"]], ["add", "theorem", "nodup_sigma", ["list"]], ["add", "def", "pmap", ["list"]], ["add", "theorem", "pmap_congr", ["list"]], ["add", "theorem", "pmap_eq_map", ["list"]], ["add", "theorem", "pmap_eq_map_attach", ["list"]], ["add", "def", "sigma", ["list"]], ["add", "theorem", "sigma_cons", ["list"]], ["add", "theorem", "sigma_nil", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "perm_pmap", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": [["mod", "def", "split", ["list"]]]}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": [["add", "theorem", "add_sigma", ["multiset"]], ["add", "def", "attach", ["multiset"]], ["add", "theorem", "attach_map_val", ["multiset"]], ["add", "theorem", "coe_attach", ["multiset"]], ["add", "theorem", "coe_pmap", ["multiset"]], ["add", "theorem", "coe_sigma", ["multiset"]], ["add", "theorem", "coe_sort", ["multiset"]], ["add", "theorem", "cons_sigma", ["multiset"]], ["add", "theorem", "count_smul", ["multiset"]], ["add", "theorem", "le_smul_erase_dup", ["multiset"]], ["add", "theorem", "map_pmap", ["multiset"]], ["add", "theorem", "mem_attach", ["multiset"]], ["add", "theorem", "mem_pmap", ["multiset"]], ["add", "theorem", "mem_sigma", ["multiset"]], ["add", "theorem", "nodup_attach", ["multiset"]], ["add", "theorem", "nodup_pmap", ["multiset"]], ["add", "theorem", "nodup_sigma", ["multiset"]], ["add", "def", "pmap", ["multiset"]], ["add", "theorem", "pmap_congr", ["multiset"]], ["add", "theorem", "pmap_eq_map", ["multiset"]], ["add", "theorem", "pmap_eq_map_attach", ["multiset"]], ["add", "theorem", "prod_repeat", ["multiset"]], ["add", "theorem", "sigma_add", ["multiset"]], ["add", "theorem", "sigma_singleton", ["multiset"]], ["add", "def", "sort", ["multiset"]], ["add", "theorem", "sort_eq", ["multiset"]], ["add", "theorem", "sort_sorted", ["multiset"]], ["add", "theorem", "zero_sigma", ["multiset"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["mod", "theorem", "and_iff_left_of_imp", []], ["mod", "theorem", "and_iff_right_of_imp", []], ["mod", "theorem", "cases", ["classical"]], ["mod", "theorem", "or_not", ["classical"]], ["mod", "theorem", "false_neq_true", []], ["mod", "theorem", "forall_2_true_iff", []], ["mod", "theorem", "forall_3_true_iff", []], ["mod", "theorem", "forall_true_iff'", []], ["mod", "theorem", "heq_iff_eq", []]]}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "def", "decidable_eq", ["function", "injective"]], ["mod", "theorem", "eq_iff", ["function", "injective"]]]}]}, {"timestamp": 1511474985, "sha": "c03c16d6", "message": "feat(algebra/group_power): remove overloaded ^ notation, add smul", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "inv_comm_of_comm", ["division_ring"]], ["del", "theorem", "inv_comm_of_comm", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "inv_comm_of_comm", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "add_smul", ["add_monoid"]], ["add", "theorem", "neg_smul", ["add_monoid"]], ["add", "theorem", "smul_mul", ["add_monoid"]], ["add", "theorem", "smul_one", ["add_monoid"]], ["add", "theorem", "zero_smul", ["add_monoid"]], ["del", "theorem", "has_pow_nat_eq_pow_nat", []], ["add", "theorem", "sum_repeat", ["list"]], ["mod", "def", "pow", ["monoid"]], ["add", "theorem", "pow_eq_pow", ["nat"]], ["del", "theorem", "pow_eq_pow_nat", ["nat"]], ["del", "def", "pow_int", []], ["mod", "theorem", "pow_inv_comm", []], ["del", "def", "pow_nat", []], ["mod", "theorem", "pow_one", []], ["mod", "theorem", "pow_zero", []], ["add", "theorem", "smul_bit1", []], ["add", "theorem", "smul_succ'", []], ["add", "theorem", "smul_succ", []]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1511419837, "sha": "33aa50bf", "message": "feat(tactic/generalize_proofs): generalize proofs tactic\nBorrowed from leanprover/lean#1704", "changes": [{"oldPath": null, "newPath": "tactic/generalize_proofs.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1511328839, "sha": "902b94d3", "message": "refactor(data/finset): redefine finsets as subtype of multisets", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["del", "theorem", "prod_to_finset_of_nodup", ["finset"]]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": [["mod", "structure", "dense_embedding", []]]}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "def", "card", ["finset"]], ["add", "theorem", "card_def", ["finset"]], ["add", "theorem", "card_eq_zero", ["finset"]], ["mod", "theorem", "card_erase_of_mem", ["finset"]], ["mod", "theorem", "card_insert_le", ["finset"]], ["mod", "theorem", "card_insert_of_not_mem", ["finset"]], ["add", "theorem", "card_pos", ["finset"]], ["mod", "theorem", "card_range", ["finset"]], ["mod", "theorem", "empty_inter", ["finset"]], ["mod", "theorem", "empty_subset", ["finset"]], ["mod", "theorem", "empty_union", ["finset"]], ["add", "theorem", "empty_val", ["finset"]], ["del", "theorem", "eq_empty_of_card_eq_zero", ["finset"]], ["mod", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["del", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["add", "theorem", "eq_of_veq", ["finset"]], ["mod", "def", "erase", ["finset"]], ["add", "theorem", "erase_dup_eq_self", ["finset"]], ["del", "theorem", "erase_dup_map_erase_dup_eq", ["finset"]], ["mod", "theorem", "erase_empty", ["finset"]], ["mod", "theorem", "erase_eq_of_not_mem", ["finset"]], ["mod", "theorem", "erase_insert", ["finset"]], ["mod", "theorem", "erase_insert_subset", ["finset"]], ["mod", "theorem", "erase_subset", ["finset"]], ["mod", "theorem", "erase_subset_erase", ["finset"]], ["del", "theorem", "erase_subset_of_subset_insert", ["finset"]], ["add", "theorem", "erase_val", ["finset"]], ["mod", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["mod", "theorem", "exists_nat_subset_range", ["finset"]], ["mod", "theorem", "ext", ["finset"]], ["add", "def", "filter", ["finset"]], ["add", "theorem", "filter_and", ["finset"]], ["mod", "theorem", "filter_false", ["finset"]], ["mod", "theorem", "filter_filter", ["finset"]], ["mod", "theorem", "filter_inter_filter_neg_eq", ["finset"]], ["add", "theorem", "filter_not", ["finset"]], ["add", "theorem", "filter_or", ["finset"]], ["mod", "theorem", "filter_subset", ["finset"]], ["mod", "theorem", "filter_union", ["finset"]], ["mod", "theorem", "filter_union_filter_neg_eq", ["finset"]], ["add", "theorem", "filter_val", ["finset"]], ["del", "theorem", "forall_of_forall_insert", ["finset"]], ["add", "theorem", "has_insert_eq_insert", ["finset"]], ["add", "def", "image", ["finset"]], ["mod", "theorem", "image_empty", ["finset"]], ["add", "theorem", "image_eq_empty", ["finset"]], ["del", "theorem", "image_eq_empty_iff", ["finset"]], ["mod", "theorem", "image_filter", ["finset"]], ["mod", "theorem", "image_id", ["finset"]], ["mod", "theorem", "image_image", ["finset"]], ["mod", "theorem", "image_insert", ["finset"]], ["mod", "theorem", "image_inter", ["finset"]], ["mod", "theorem", "image_singleton", ["finset"]], ["mod", "theorem", "image_subset_image", ["finset"]], ["mod", "theorem", "image_to_finset", ["finset"]], ["del", "theorem", "image_to_finset_of_nodup", ["finset"]], ["mod", "theorem", "image_union", ["finset"]], ["add", "theorem", "image_val", ["finset"]], ["add", "theorem", "image_val_of_inj_on", ["finset"]], ["mod", "theorem", "comm", ["finset", "insert"]], ["add", "theorem", "insert_def", ["finset"]], ["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "insert_eq_of_mem", ["finset"]], ["mod", "theorem", "insert_erase", ["finset"]], ["mod", "theorem", "insert_erase_subset", ["finset"]], ["mod", "theorem", "insert_idem", ["finset"]], ["mod", "theorem", "insert_ne_empty", ["finset"]], ["mod", "theorem", "insert_singelton_self_eq", ["finset"]], ["add", "theorem", "insert_subset", ["finset"]], ["mod", "theorem", "insert_subset_insert", ["finset"]], ["mod", "theorem", "insert_union", ["finset"]], ["add", "theorem", "insert_val'", ["finset"]], ["add", "theorem", "insert_val", ["finset"]], ["mod", "theorem", "inter_assoc", ["finset"]], ["mod", "theorem", "inter_comm", ["finset"]], ["mod", "theorem", "inter_empty", ["finset"]], ["mod", "theorem", "inter_left_comm", ["finset"]], ["mod", "theorem", "inter_right_comm", ["finset"]], ["add", "theorem", "inter_sdiff_self", ["finset"]], ["mod", "theorem", "inter_self", ["finset"]], ["mod", "theorem", "inter_subset_left", ["finset"]], ["mod", "theorem", "inter_subset_right", ["finset"]], ["add", "theorem", "inter_val", ["finset"]], ["add", "theorem", "inter_val_nd", ["finset"]], ["del", "def", "mem", ["finset"]], ["add", "theorem", "mem_def", ["finset"]], ["mod", "theorem", "mem_erase", ["finset"]], ["mod", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["mod", "theorem", "mem_filter", ["finset"]], ["add", "theorem", "mem_image", ["finset"]], ["del", "theorem", "mem_image_iff", ["finset"]], ["add", "theorem", "mem_image_of_mem", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["mod", "theorem", "mem_insert_of_mem", ["finset"]], ["mod", "theorem", "mem_insert_self", ["finset"]], ["mod", "theorem", "mem_inter", ["finset"]], ["del", "theorem", "mem_list_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_erase", ["finset"]], ["mod", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["mod", "theorem", "mem_of_mem_inter_left", ["finset"]], ["mod", "theorem", "mem_of_mem_inter_right", ["finset"]], ["del", "theorem", "mem_of_mem_list", ["finset"]], ["add", "theorem", "mem_of_subset", ["finset"]], ["del", "theorem", "mem_of_subset_of_mem", ["finset"]], ["del", "theorem", "mem_or_mem_of_mem_union", ["finset"]], ["mod", "theorem", "mem_range", ["finset"]], ["add", "theorem", "mem_sdiff", ["finset"]], ["del", "theorem", "mem_sdiff_iff", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_self", ["finset"]], ["del", "theorem", "mem_to_finset", ["finset"]], ["del", "theorem", "mem_to_finset_of_mem", ["finset"]], ["del", "theorem", "mem_to_finset_of_nodup_eq", ["finset"]], ["mod", "theorem", "mem_union", ["finset"]], ["mod", "theorem", "mem_union_left", ["finset"]], ["mod", "theorem", "mem_union_right", ["finset"]], ["add", "theorem", "mem_univ", ["finset"]], ["del", "theorem", "ne_empty_of_card_eq_succ", ["finset"]], ["add", "theorem", "ne_empty_of_mem", ["finset"]], ["mod", "theorem", "ne_of_mem_erase", ["finset"]], ["mod", "theorem", "not_mem_empty", ["finset"]], ["mod", "theorem", "not_mem_erase", ["finset"]], ["mod", "theorem", "not_mem_range_self", ["finset"]], ["mod", "def", "range", ["finset"]], ["mod", "theorem", "range_subset", ["finset"]], ["mod", "theorem", "range_succ", ["finset"]], ["add", "theorem", "range_val", ["finset"]], ["add", "theorem", "sdiff_eq_filter", ["finset"]], ["mod", "theorem", "sdiff_inter_self", ["finset"]], ["mod", "theorem", "sdiff_subset_sdiff", ["finset"]], ["mod", "theorem", "sdiff_union_of_subset", ["finset"]], ["mod", "theorem", "singleton_inj", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["add", "theorem", "singleton_val", ["finset"]], ["mod", "theorem", "refl", ["finset", "subset"]], ["mod", "theorem", "trans", ["finset", "subset"]], ["add", "theorem", "subset_def", ["finset"]], ["add", "theorem", "subset_empty", ["finset"]], ["del", "theorem", "subset_empty_iff", ["finset"]], ["mod", "theorem", "subset_iff", ["finset"]], ["mod", "theorem", "subset_insert", ["finset"]], ["mod", "theorem", "subset_insert_iff", ["finset"]], ["del", "theorem", "subset_insert_of_erase_subset", ["finset"]], ["mod", "theorem", "subset_union_left", ["finset"]], ["mod", "theorem", "subset_union_right", ["finset"]], ["add", "theorem", "subset_univ", ["finset"]], ["del", "def", "to_finset", ["finset"]], ["del", "theorem", "to_finset_eq_of_nodup", ["finset"]], ["del", "def", "to_finset_of_nodup", ["finset"]], ["mod", "theorem", "union_assoc", ["finset"]], ["mod", "theorem", "union_comm", ["finset"]], ["mod", "theorem", "union_empty", ["finset"]], ["mod", "theorem", "union_idempotent", ["finset"]], ["mod", "theorem", "union_insert", ["finset"]], ["mod", "theorem", "union_left_comm", ["finset"]], ["mod", "theorem", "union_right_comm", ["finset"]], ["add", "theorem", "union_sdiff_of_subset", ["finset"]], ["mod", "theorem", "union_self", ["finset"]], ["mod", "theorem", "union_subset", ["finset"]], ["add", "theorem", "union_val", ["finset"]], ["add", "theorem", "union_val_nd", ["finset"]], ["add", "def", "univ", ["finset"]], ["add", "theorem", "val_eq_zero", ["finset"]], ["add", "theorem", "val_inj", ["finset"]], ["add", "theorem", "val_le_iff", ["finset"]], ["add", "structure", "finset", []], ["add", "def", "of_list", ["fintype"]], ["add", "def", "of_multiset", ["fintype"]], ["add", "theorem", "mem_to_finset", ["list"]], ["add", "def", "to_finset", ["list"]], ["add", "theorem", "to_finset_eq", ["list"]], ["add", "theorem", "to_finset_val", ["list"]], ["add", "theorem", "mem_to_finset", ["multiset"]], ["add", "def", "to_finset", ["multiset"]], ["add", "theorem", "to_finset_eq", ["multiset"]], ["add", "theorem", "to_finset_val", ["multiset"]], ["del", "def", "nodup_list", []], ["del", "def", "to_nodup_list", []], ["del", "def", "to_nodup_list_of_nodup", []], ["del", "def", "{u}", []]]}, {"oldPath": "data/finset/fold.lean", "newPath": "data/finset/fold.lean", "changes": [["mod", "theorem", "bind_empty", ["finset"]], ["mod", "theorem", "bind_image", ["finset"]], ["mod", "theorem", "bind_insert", ["finset"]], ["add", "theorem", "bind_to_finset", ["finset"]], ["mod", "def", "fold", ["finset"]], ["mod", "theorem", "fold_congr", ["finset"]], ["mod", "theorem", "fold_empty", ["finset"]], ["mod", "theorem", "fold_hom", ["finset"]], ["mod", "theorem", "fold_image", ["finset"]], ["mod", "theorem", "fold_insert", ["finset"]], ["mod", "theorem", "fold_insert_idem", ["finset"]], ["mod", "theorem", "fold_op_distrib", ["finset"]], ["mod", "theorem", "fold_singleton", ["finset"]], ["del", "theorem", "fold_to_finset_of_nodup", ["finset"]], ["mod", "theorem", "fold_union_inter", ["finset"]], ["mod", "theorem", "image_bind", ["finset"]], ["add", "theorem", "mem_bind", ["finset"]], ["del", "theorem", "mem_bind_iff", ["finset"]], ["add", "theorem", "mem_product", ["finset"]], ["del", "theorem", "mem_product_iff", ["finset"]], ["add", "theorem", "mem_sigma", ["finset"]], ["del", "theorem", "mem_sigma_iff", ["finset"]], ["add", "theorem", "product_eq_bind", ["finset"]], ["add", "theorem", "product_val", ["finset"]], ["mod", "theorem", "sigma_mono", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "map_sublist_map", ["list"]], ["add", "theorem", "range_concat", ["list"]]]}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": [["mod", "theorem", "add_inter_distrib", ["multiset"]], ["mod", "theorem", "add_union_distrib", ["multiset"]], ["add", "theorem", "card_eq_zero", ["multiset"]], ["add", "theorem", "card_pos", ["multiset"]], ["add", "theorem", "coe_fold_l", ["multiset"]], ["add", "theorem", "coe_fold_r", ["multiset"]], ["add", "theorem", "cons_inter_distrib", ["multiset"]], ["add", "theorem", "cons_union_distrib", ["multiset"]], ["add", "theorem", "erase_dup_cons", ["multiset"]], ["add", "theorem", "erase_dup_ext", ["multiset"]], ["add", "theorem", "erase_dup_map_erase_dup_eq", ["multiset"]], ["add", "theorem", "erase_dup_subset'", ["multiset"]], ["add", "def", "fold", ["multiset"]], ["add", "theorem", "fold_add", ["multiset"]], ["add", "theorem", "fold_cons'_left", ["multiset"]], ["add", "theorem", "fold_cons'_right", ["multiset"]], ["add", "theorem", "fold_cons_left", ["multiset"]], ["add", "theorem", "fold_cons_right", ["multiset"]], ["add", "theorem", "fold_distrib", ["multiset"]], ["add", "theorem", "fold_eq_foldl", ["multiset"]], ["add", "theorem", "fold_eq_foldr", ["multiset"]], ["add", "theorem", "fold_erase_dup_idem", ["multiset"]], ["add", "theorem", "fold_hom", ["multiset"]], ["add", "theorem", "fold_singleton", ["multiset"]], ["add", "theorem", "fold_union_inter", ["multiset"]], ["add", "theorem", "fold_zero", ["multiset"]], ["mod", "theorem", "inter_add_distrib", ["multiset"]], ["add", "theorem", "map_congr", ["multiset"]], ["add", "theorem", "map_le_map", ["multiset"]], ["add", "theorem", "map_subset_map", ["multiset"]], ["add", "theorem", "mem_bind", ["multiset"]], ["add", "theorem", "mem_join", ["multiset"]], ["add", "theorem", "mem_product", ["multiset"]], ["add", "theorem", "mem_sub_of_nodup", ["multiset"]], ["mod", "theorem", "nodup_erase_dup", ["multiset"]], ["add", "theorem", "nodup_inter_left", ["multiset"]], ["del", "theorem", "nodup_inter_of_nodup", ["multiset"]], ["add", "theorem", "nodup_inter_right", ["multiset"]], ["mod", "theorem", "nodup_ndinsert", ["multiset"]], ["add", "theorem", "nodup_union", ["multiset"]], ["add", "theorem", "product_singleton", ["multiset"]], ["add", "theorem", "range_succ", ["multiset"]], ["add", "theorem", "range_zero", ["multiset"]], ["add", "theorem", "singleton_le", ["multiset"]], ["add", "theorem", "subset_erase_dup'", ["multiset"]], ["add", "theorem", "subset_zero", ["multiset"]], ["del", "theorem", "subset_zero_iff", ["multiset"]], ["mod", "theorem", "union_add_distrib", ["multiset"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["mod", "theorem", "sub_le_right_iff_le_add", ["nat"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}]}, {"timestamp": 1511328767, "sha": "df546eb0", "message": "feat(data/set/basic): add coercion from set to type", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "exists", ["set", "set_coe"]], ["add", "theorem", "forall", ["set", "set_coe"]], ["add", "theorem", "set_coe_eq_subtype", ["set"]]]}]}, {"timestamp": 1511328387, "sha": "d5487255", "message": "feat(tactic/rcases): support 'rfl' in rcases patterns for subst\nUsing the special keyword `rfl` in an rcases pattern, as in `rcases h with ⟨a, rfl⟩ | b`, will now perform `subst` on the indicated argument, when it is an equality.", "changes": [{"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}]}, {"timestamp": 1511210186, "sha": "b9dcc64a", "message": "fix(algebra/group): workaround for #1871\nCurrently, user attributes are not stored in `olean` files, which leads to segfault issues when referencing them using `user_attribute.get_param`. To work around this, we duplicate the stored data in an extra `def`, which *is* stored in the `olean` file.", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}]}, {"timestamp": 1511141451, "sha": "40d2b505", "message": "fix(algebra/order): update to lean\nThe new `not_lt_of_lt` in core is not substitutable for this one because it is in the new algebraic hierarchy and mathlib is still on the old one. But this isn't used anywhere, so I'll just remove it instead of renaming.", "changes": [{"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["del", "theorem", "not_lt_of_lt", []]]}]}, {"timestamp": 1511140161, "sha": "f467c816", "message": "feat(data/multiset): disjoint, nodup, finset ops", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "def", "disjoint", ["list"]], ["del", "theorem", "disjoint_append_of_disjoint_left", ["list"]], ["mod", "theorem", "erase_dup_append", ["list"]], ["mod", "theorem", "sublist_suffix_of_union", ["list"]]]}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": [["mod", "def", "card", ["multiset"]], ["mod", "theorem", "card_cons", ["multiset"]], ["del", "theorem", "card_empty", ["multiset"]], ["mod", "theorem", "card_erase_of_mem", ["multiset"]], ["del", "theorem", "card_insert_le", ["multiset"]], ["del", "theorem", "card_insert_of_not_mem", ["multiset"]], ["mod", "theorem", "card_range", ["multiset"]], ["add", "theorem", "coe_disjoint", ["multiset"]], ["add", "theorem", "coe_erase_dup", ["multiset"]], ["add", "theorem", "coe_ndinsert", ["multiset"]], ["add", "theorem", "coe_ndinter", ["multiset"]], ["add", "theorem", "coe_ndunion", ["multiset"]], ["add", "theorem", "coe_nodup", ["multiset"]], ["add", "theorem", "coe_subset", ["multiset"]], ["add", "theorem", "cons_erase", ["multiset"]], ["add", "theorem", "cons_ndinter_of_mem", ["multiset"]], ["add", "theorem", "cons_ndunion", ["multiset"]], ["add", "theorem", "cons_subset", ["multiset"]], ["add", "theorem", "count_eq_one_of_mem", ["multiset"]], ["add", "theorem", "symm", ["multiset", "disjoint"]], ["add", "def", "disjoint", ["multiset"]], ["add", "theorem", "disjoint_add_left", ["multiset"]], ["add", "theorem", "disjoint_add_right", ["multiset"]], ["add", "theorem", "disjoint_comm", ["multiset"]], ["add", "theorem", "disjoint_cons_left", ["multiset"]], ["add", "theorem", "disjoint_cons_right", ["multiset"]], ["add", "theorem", "disjoint_iff_ne", ["multiset"]], ["add", "theorem", "disjoint_left", ["multiset"]], ["add", "theorem", "disjoint_of_le_left", ["multiset"]], ["add", "theorem", "disjoint_of_le_right", ["multiset"]], ["add", "theorem", "disjoint_of_nodup_add", ["multiset"]], ["add", "theorem", "disjoint_of_subset_left", ["multiset"]], ["add", "theorem", "disjoint_of_subset_right", ["multiset"]], ["add", "theorem", "disjoint_right", ["multiset"]], ["add", "theorem", "disjoint_singleton", ["multiset"]], ["del", "theorem", "empty_inter", ["multiset"]], ["del", "theorem", "eq_cons_erase", ["multiset"]], ["del", "theorem", "eq_empty_of_card_eq_zero", ["multiset"]], ["del", "theorem", "eq_zero_of_le_zero", ["multiset"]], ["mod", "def", "erase", ["multiset"]], ["add", "def", "erase_dup", ["multiset"]], ["add", "theorem", "erase_dup_add", ["multiset"]], ["add", "theorem", "erase_dup_cons_of_mem", ["multiset"]], ["add", "theorem", "erase_dup_cons_of_not_mem", ["multiset"]], ["add", "theorem", "erase_dup_eq_self", ["multiset"]], ["add", "theorem", "erase_dup_le", ["multiset"]], ["del", "theorem", "erase_dup_map_erase_dup_eq", ["multiset"]], ["add", "theorem", "erase_dup_subset", ["multiset"]], ["add", "theorem", "erase_dup_zero", ["multiset"]], ["del", "theorem", "erase_empty", ["multiset"]], ["del", "theorem", "erase_eq_of_not_mem", ["multiset"]], ["del", "theorem", "erase_insert", ["multiset"]], ["del", "theorem", "erase_insert_subset", ["multiset"]], ["mod", "theorem", "erase_subset", ["multiset"]], ["del", "theorem", "erase_subset_erase", ["multiset"]], ["del", "theorem", "erase_subset_of_subset_insert", ["multiset"]], ["del", "theorem", "exists_mem_empty_iff", ["multiset"]], ["del", "theorem", "exists_mem_insert", ["multiset"]], ["del", "theorem", "exists_nat_subset_range", ["multiset"]], ["del", "theorem", "filter_false", ["multiset"]], ["del", "theorem", "filter_filter", ["multiset"]], ["del", "theorem", "filter_inter_filter_neg_eq", ["multiset"]], ["mod", "theorem", "filter_subset", ["multiset"]], ["mod", "theorem", "filter_union", ["multiset"]], ["del", "theorem", "filter_union_filter_neg_eq", ["multiset"]], ["del", "theorem", "forall_mem_empty_iff", ["multiset"]], ["del", "theorem", "forall_mem_insert", ["multiset"]], ["add", "theorem", "forall_mem_ne", ["multiset"]], ["del", "theorem", "image_empty", ["multiset"]], ["del", "theorem", "image_eq_empty_iff", ["multiset"]], ["del", "theorem", "image_filter", ["multiset"]], ["del", "theorem", "image_id", ["multiset"]], ["del", "theorem", "image_image", ["multiset"]], ["del", "theorem", "image_insert", ["multiset"]], ["del", "theorem", "image_inter", ["multiset"]], ["del", "theorem", "image_singleton", ["multiset"]], ["del", "theorem", "image_subset_image", ["multiset"]], ["del", "theorem", "image_to_multiset", ["multiset"]], ["del", "theorem", "image_to_multiset_of_nodup", ["multiset"]], ["del", "theorem", "image_union", ["multiset"]], ["del", "theorem", "insert_erase", ["multiset"]], ["del", "theorem", "insert_erase_subset", ["multiset"]], ["del", "theorem", "insert_inter_of_mem", ["multiset"]], ["del", "theorem", "insert_inter_of_not_mem", ["multiset"]], ["del", "theorem", "inter_assoc", ["multiset"]], ["mod", "theorem", "inter_comm", ["multiset"]], ["del", "theorem", "inter_distrib_left", ["multiset"]], ["del", "theorem", "inter_distrib_right", ["multiset"]], ["del", "theorem", "inter_empty", ["multiset"]], ["add", "theorem", "inter_eq_zero_iff_disjoint", ["multiset"]], ["del", "theorem", "inter_insert_of_mem", ["multiset"]], ["del", "theorem", "inter_insert_of_not_mem", ["multiset"]], ["add", "theorem", "inter_le_ndinter", ["multiset"]], ["del", "theorem", "inter_left_comm", ["multiset"]], ["del", "theorem", "inter_right_comm", ["multiset"]], ["del", "theorem", "inter_self", ["multiset"]], ["del", "theorem", "inter_singleton_of_mem", ["multiset"]], ["del", "theorem", "inter_singleton_of_not_mem", ["multiset"]], ["del", "theorem", "inter_subset_left", ["multiset"]], ["del", "theorem", "inter_subset_right", ["multiset"]], ["add", "theorem", "le_erase_dup", ["multiset"]], ["add", "theorem", "le_iff_subset", ["multiset"]], ["add", "theorem", "le_inter_iff", ["multiset"]], ["add", "theorem", "le_ndinsert_self", ["multiset"]], ["add", "theorem", "le_ndinter", ["multiset"]], ["add", "theorem", "le_ndunion_left", ["multiset"]], ["add", "theorem", "le_ndunion_right", ["multiset"]], ["add", "theorem", "le_zero", ["multiset"]], ["add", "theorem", "length_ndinsert_of_mem", ["multiset"]], ["add", "theorem", "length_ndinsert_of_not_mem", ["multiset"]], ["add", "theorem", "mem_add", ["multiset"]], ["del", "theorem", "mem_erase", ["multiset"]], ["add", "theorem", "mem_erase_dup", ["multiset"]], ["add", "theorem", "mem_erase_iff_of_nodup", ["multiset"]], ["del", "theorem", "mem_erase_of_ne_of_mem", ["multiset"]], ["add", "theorem", "mem_erase_of_nodup", ["multiset"]], ["mod", "theorem", "mem_filter", ["multiset"]], ["del", "theorem", "mem_image_iff", ["multiset"]], ["mod", "theorem", "mem_inter", ["multiset"]], ["del", "theorem", "mem_inter_of_mem", ["multiset"]], ["add", "theorem", "mem_ndinsert", ["multiset"]], ["add", "theorem", "mem_ndinsert_of_mem", ["multiset"]], ["add", "theorem", "mem_ndinsert_self", ["multiset"]], ["add", "theorem", "mem_ndinter", ["multiset"]], ["add", "theorem", "mem_ndunion", ["multiset"]], ["mod", "theorem", "mem_of_le", ["multiset"]], ["mod", "theorem", "mem_of_mem_erase", ["multiset"]], ["del", "theorem", "mem_of_mem_inter_left", ["multiset"]], ["del", "theorem", "mem_of_mem_inter_right", ["multiset"]], ["mod", "theorem", "mem_of_subset", ["multiset"]], ["mod", "theorem", "mem_range", ["multiset"]], ["del", "theorem", "mem_sdiff_iff", ["multiset"]], ["add", "theorem", "mem_union", ["multiset"]], ["add", "theorem", "ndinsert_le", ["multiset"]], ["add", "theorem", "ndinsert_of_mem", ["multiset"]], ["add", "theorem", "ndinsert_of_not_mem", ["multiset"]], ["add", "theorem", "ndinsert_zero", ["multiset"]], ["add", "def", "ndinter", ["multiset"]], ["add", "theorem", "ndinter_cons_of_not_mem", ["multiset"]], ["add", "theorem", "ndinter_eq_inter", ["multiset"]], ["add", "theorem", "ndinter_eq_zero_iff_disjoint", ["multiset"]], ["add", "theorem", "ndinter_le_left", ["multiset"]], ["add", "theorem", "ndinter_le_right", ["multiset"]], ["add", "theorem", "ndinter_subset_right", ["multiset"]], ["add", "def", "ndunion", ["multiset"]], ["add", "theorem", "ndunion_eq_union", ["multiset"]], ["add", "theorem", "ndunion_le", ["multiset"]], ["add", "theorem", "ndunion_le_add", ["multiset"]], ["add", "theorem", "ndunion_le_union", ["multiset"]], ["del", "theorem", "ne_empty_of_card_eq_succ", ["multiset"]], ["del", "theorem", "ne_of_mem_erase", ["multiset"]], ["add", "theorem", "nodup_add", ["multiset"]], ["add", "theorem", "nodup_add_of_nodup", ["multiset"]], ["add", "theorem", "nodup_cons", ["multiset"]], ["add", "theorem", "nodup_cons_of_nodup", ["multiset"]], ["add", "theorem", "nodup_erase_dup", ["multiset"]], ["add", "theorem", "nodup_erase_eq_filter", ["multiset"]], ["add", "theorem", "nodup_erase_of_nodup", ["multiset"]], ["add", "theorem", "nodup_ext", ["multiset"]], ["add", "theorem", "nodup_filter", ["multiset"]], ["add", "theorem", "nodup_iff_count_le_one", ["multiset"]], ["add", "theorem", "nodup_iff_le", ["multiset"]], ["add", "theorem", "nodup_inter_of_nodup", ["multiset"]], ["add", "theorem", "nodup_map", ["multiset"]], ["add", "theorem", "nodup_map_on", ["multiset"]], ["add", "theorem", "nodup_ndinsert", ["multiset"]], ["add", "theorem", "nodup_ndinter", ["multiset"]], ["add", "theorem", "nodup_ndunion", ["multiset"]], ["add", "theorem", "nodup_of_le", ["multiset"]], ["add", "theorem", "nodup_of_nodup_cons", ["multiset"]], ["add", "theorem", "nodup_of_nodup_map", ["multiset"]], ["add", "theorem", "nodup_product", ["multiset"]], ["add", "theorem", "nodup_range", ["multiset"]], ["add", "theorem", "nodup_singleton", ["multiset"]], ["add", "theorem", "nodup_zero", ["multiset"]], ["del", "theorem", "not_mem_erase", ["multiset"]], ["add", "theorem", "not_mem_of_nodup_cons", ["multiset"]], ["mod", "theorem", "not_mem_range_self", ["multiset"]], ["add", "theorem", "not_nodup_pair", ["multiset"]], ["mod", "def", "range", ["multiset"]], ["add", "theorem", "range_le", ["multiset"]], ["mod", "theorem", "range_subset", ["multiset"]], ["del", "theorem", "range_succ", ["multiset"]], ["del", "theorem", "range_zero", ["multiset"]], ["del", "theorem", "sdiff_inter_self", ["multiset"]], ["del", "theorem", "sdiff_subset_sdiff", ["multiset"]], ["del", "theorem", "sdiff_union_of_subset", ["multiset"]], ["add", "theorem", "singleton_disjoint", ["multiset"]], ["del", "theorem", "singleton_inter_of_mem", ["multiset"]], ["del", "theorem", "singleton_inter_of_not_mem", ["multiset"]], ["add", "theorem", "sub_le_self", ["multiset"]], ["mod", "theorem", "refl", ["multiset", "subset"]], ["mod", "theorem", "trans", ["multiset", "subset"]], ["add", "theorem", "subset_erase_dup", ["multiset"]], ["mod", "theorem", "subset_iff", ["multiset"]], ["del", "theorem", "subset_insert_iff", ["multiset"]], ["del", "theorem", "subset_insert_of_erase_subset", ["multiset"]], ["del", "theorem", "subset_inter", ["multiset"]], ["add", "theorem", "subset_ndunion_left", ["multiset"]], ["mod", "theorem", "subset_of_le", ["multiset"]], ["add", "theorem", "union_def", ["multiset"]], ["del", "theorem", "union_distrib_left", ["multiset"]], ["del", "theorem", "union_distrib_right", ["multiset"]], ["add", "theorem", "union_le_add", ["multiset"]], ["add", "theorem", "union_le_iff", ["multiset"]], ["add", "theorem", "zero_disjoint", ["multiset"]], ["add", "theorem", "zero_ndinter", ["multiset"]], ["add", "theorem", "zero_ndunion", ["multiset"]], ["mod", "theorem", "zero_subset", ["multiset"]]]}]}, {"timestamp": 1511126077, "sha": "76a5fea5", "message": "fix(*): finish converting structure notation to {, ..s} style", "changes": [{"oldPath": "analysis/measure_theory/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": []}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}, {"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": []}, {"oldPath": "order/bounded_lattice.lean", "newPath": "order/bounded_lattice.lean", "changes": []}, {"oldPath": "order/complete_boolean_algebra.lean", "newPath": "order/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": []}, {"oldPath": "tactic/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": []}, {"oldPath": "tactic/converter/old_conv.lean", "newPath": "tactic/converter/old_conv.lean", "changes": []}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": []}]}, {"timestamp": 1511120942, "sha": "5d65b0a2", "message": "fix(algebra/ring): update to lean", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}]}, {"timestamp": 1511070828, "sha": "8067812e", "message": "feat(data/multiset): filter, count, distrib lattice", "changes": [{"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["del", "theorem", "count_cons_ge_count", ["list"]], ["add", "theorem", "count_le_count_cons", ["list"]], ["mod", "theorem", "count_pos", ["list"]], ["del", "theorem", "count_pos_of_mem", ["list"]], ["add", "theorem", "countp_pos", ["list"]], ["del", "theorem", "countp_pos_of_mem", ["list"]], ["add", "theorem", "diff_append", ["list"]], ["add", "theorem", "eq_of_sublist_of_length_le", ["list"]], ["del", "theorem", "exists_mem_of_countp_pos", ["list"]], ["add", "theorem", "length_pos_iff_exists_mem", ["list"]], ["mod", "theorem", "map_const", ["list"]], ["del", "theorem", "mem_of_count_pos", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": [["add", "theorem", "add_inter_distrib", ["multiset"]], ["add", "theorem", "add_union_distrib", ["multiset"]], ["mod", "theorem", "card_add", ["multiset"]], ["add", "theorem", "card_pos_iff_exists_mem", ["multiset"]], ["add", "theorem", "card_repeat", ["multiset"]], ["add", "theorem", "card_sub", ["multiset"]], ["add", "theorem", "coe_count", ["multiset"]], ["add", "theorem", "coe_countp", ["multiset"]], ["add", "theorem", "coe_filter", ["multiset"]], ["add", "def", "count", ["multiset"]], ["add", "theorem", "count_add", ["multiset"]], ["add", "theorem", "count_cons_of_ne", ["multiset"]], ["add", "theorem", "count_cons_self", ["multiset"]], ["add", "theorem", "count_eq_zero", ["multiset"]], ["add", "theorem", "count_eq_zero_of_not_mem", ["multiset"]], ["add", "theorem", "count_erase_of_ne", ["multiset"]], ["add", "theorem", "count_erase_self", ["multiset"]], ["add", "theorem", "count_inter", ["multiset"]], ["add", "theorem", "count_le_count_cons", ["multiset"]], ["add", "theorem", "count_le_of_le", ["multiset"]], ["add", "theorem", "count_pos", ["multiset"]], ["add", "theorem", "count_repeat", ["multiset"]], ["add", "theorem", "count_singleton", ["multiset"]], ["add", "theorem", "count_sub", ["multiset"]], ["add", "theorem", "count_union", ["multiset"]], ["add", "theorem", "count_zero", ["multiset"]], ["add", "def", "countp", ["multiset"]], ["add", "theorem", "countp_add", ["multiset"]], ["add", "theorem", "countp_cons_of_neg", ["multiset"]], ["add", "theorem", "countp_cons_of_pos", ["multiset"]], ["add", "theorem", "countp_eq_card_filter", ["multiset"]], ["add", "theorem", "countp_le_of_le", ["multiset"]], ["add", "theorem", "countp_pos", ["multiset"]], ["add", "theorem", "countp_pos_of_mem", ["multiset"]], ["add", "theorem", "countp_sub", ["multiset"]], ["add", "theorem", "countp_zero", ["multiset"]], ["del", "theorem", "empty_subset", ["multiset"]], ["del", "theorem", "eq_empty_of_forall_not_mem", ["multiset"]], ["del", "theorem", "eq_empty_of_subset_empty", ["multiset"]], ["mod", "theorem", "eq_of_le_of_card_le", ["multiset"]], ["add", "theorem", "eq_of_mem_map_const", ["multiset"]], ["add", "theorem", "eq_of_mem_repeat", ["multiset"]], ["add", "theorem", "eq_repeat'", ["multiset"]], ["add", "theorem", "eq_repeat", ["multiset"]], ["add", "theorem", "eq_repeat_of_mem", ["multiset"]], ["add", "theorem", "eq_zero_of_forall_not_mem", ["multiset"]], ["mod", "theorem", "eq_zero_of_le_zero", ["multiset"]], ["add", "theorem", "eq_zero_of_subset_zero", ["multiset"]], ["del", "theorem", "exists_mem_of_ne_empty", ["multiset"]], ["add", "theorem", "exists_mem_of_ne_zero", ["multiset"]], ["add", "theorem", "ext", ["multiset"]], ["add", "def", "filter", ["multiset"]], ["add", "theorem", "filter_add", ["multiset"]], ["add", "theorem", "filter_cons_of_neg", ["multiset"]], ["add", "theorem", "filter_cons_of_pos", ["multiset"]], ["add", "theorem", "filter_eq_nil", ["multiset"]], ["add", "theorem", "filter_eq_self", ["multiset"]], ["add", "theorem", "filter_inter", ["multiset"]], ["add", "theorem", "filter_le", ["multiset"]], ["add", "theorem", "filter_le_filter", ["multiset"]], ["add", "theorem", "filter_sub", ["multiset"]], ["mod", "theorem", "filter_subset", ["multiset"]], ["mod", "theorem", "filter_union", ["multiset"]], ["add", "theorem", "filter_zero", ["multiset"]], ["add", "theorem", "inf_eq_inter", ["multiset"]], ["add", "theorem", "inter_add_distrib", ["multiset"]], ["add", "theorem", "le_count_iff_repeat_le", ["multiset"]], ["add", "theorem", "le_filter", ["multiset"]], ["add", "theorem", "le_iff_count", ["multiset"]], ["add", "theorem", "map_const", ["multiset"]], ["mod", "theorem", "mem_filter", ["multiset"]], ["add", "theorem", "mem_filter_of_mem", ["multiset"]], ["add", "theorem", "mem_of_mem_filter", ["multiset"]], ["del", "theorem", "not_mem_empty", ["multiset"]], ["add", "theorem", "not_mem_zero", ["multiset"]], ["add", "theorem", "of_mem_filter", ["multiset"]], ["add", "def", "repeat", ["multiset"]], ["add", "theorem", "repeat_le_coe", ["multiset"]], ["add", "theorem", "repeat_subset_singleton", ["multiset"]], ["mod", "theorem", "singleton_coe", ["multiset"]], ["add", "theorem", "sub_add'", ["multiset"]], ["add", "theorem", "sub_add_inter", ["multiset"]], ["add", "theorem", "sub_inter", ["multiset"]], ["del", "theorem", "subset_empty_iff", ["multiset"]], ["add", "theorem", "subset_zero_iff", ["multiset"]], ["add", "theorem", "sup_eq_union", ["multiset"]], ["add", "theorem", "union_add_distrib", ["multiset"]], ["add", "theorem", "union_add_inter", ["multiset"]], ["add", "theorem", "zero_subset", ["multiset"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "pred_sub", ["nat"]], ["add", "theorem", "sub_add_eq_max", ["nat"]], ["add", "theorem", "sub_add_min", ["nat"]], ["add", "theorem", "sub_min", ["nat"]]]}]}, {"timestamp": 1511052074, "sha": "f9de1839", "message": "feat(data/multiset): working on multisets, fix rcases bug", "changes": [{"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "max_min_distrib_left", []], ["add", "theorem", "max_min_distrib_right", []], ["add", "theorem", "min_max_distrib_left", []], ["add", "theorem", "min_max_distrib_right", []]]}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "bag_inter_nil", ["list"]], ["add", "theorem", "bag_inter_sublist_left", ["list"]], ["add", "theorem", "cons_bag_inter_of_neg", ["list"]], ["add", "theorem", "cons_bag_inter_of_pos", ["list"]], ["add", "theorem", "length_bind", ["list"]], ["add", "theorem", "length_join", ["list"]], ["add", "theorem", "mem_bag_inter", ["list"]], ["add", "theorem", "mem_erase_of_ne", ["list"]], ["del", "theorem", "mem_erase_of_ne_of_mem", ["list"]], ["add", "theorem", "nil_bag_inter", ["list"]], ["add", "theorem", "nth_range'", ["list"]], ["add", "theorem", "nth_range", ["list"]], ["del", "def", "F", ["list", "permutations_aux"]], ["del", "def", "eqn_1", ["list", "permutations_aux"]], ["del", "def", "eqn_2", ["list", "permutations_aux"]], ["add", "def", "rec", ["list", "permutations_aux"]], ["mod", "def", "permutations_aux2", ["list"]], ["mod", "def", "permutations_aux", ["list"]], ["add", "theorem", "permutations_aux_cons", ["list"]], ["add", "theorem", "permutations_aux_nil", ["list"]], ["add", "theorem", "sum_const_nat", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "foldr_permutations_aux2", ["list"]], ["add", "theorem", "length_foldr_permutations_aux2'", ["list"]], ["add", "theorem", "length_foldr_permutations_aux2", ["list"]], ["add", "theorem", "length_permutations", ["list"]], ["add", "theorem", "length_permutations_aux2", ["list"]], ["add", "theorem", "length_permutations_aux", ["list"]], ["add", "theorem", "mem_foldr_permutations_aux2", ["list"]], ["add", "theorem", "mem_permutations", ["list"]], ["add", "theorem", "mem_permutations_aux2'", ["list"]], ["add", "theorem", "mem_permutations_aux2", ["list"]], ["add", "theorem", "mem_permutations_aux_of_perm", ["list"]], ["add", "theorem", "mem_permutations_of_perm_lemma", ["list"]], ["add", "theorem", "perm_bag_inter_left", ["list"]], ["add", "theorem", "perm_bag_inter_right", ["list"]], ["mod", "theorem", "perm_diff_right", ["list"]], ["add", "theorem", "perm_nil", ["list"]], ["add", "theorem", "perm_of_mem_permutations", ["list"]], ["add", "theorem", "perm_of_mem_permutations_aux", ["list"]], ["add", "theorem", "permutations_aux2_append", ["list"]], ["add", "theorem", "permutations_aux2_fst", ["list"]], ["add", "theorem", "permutations_aux2_snd_cons", ["list"]], ["add", "theorem", "permutations_aux2_snd_nil", ["list"]]]}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": [["add", "theorem", "add_bind", ["multiset"]], ["add", "theorem", "add_product", ["multiset"]], ["add", "def", "bind", ["multiset"]], ["add", "theorem", "coe_bind", ["multiset"]], ["mod", "theorem", "coe_eq_coe", ["multiset"]], ["mod", "theorem", "coe_foldl", ["multiset"]], ["mod", "theorem", "coe_foldr", ["multiset"]], ["add", "theorem", "coe_map", ["multiset"]], ["add", "theorem", "coe_prod", ["multiset"]], ["add", "theorem", "coe_product", ["multiset"]], ["add", "theorem", "cons_bind", ["multiset"]], ["add", "theorem", "cons_inter_of_neg", ["multiset"]], ["add", "theorem", "cons_inter_of_pos", ["multiset"]], ["add", "theorem", "cons_product", ["multiset"]], ["add", "theorem", "foldl_add", ["multiset"]], ["add", "theorem", "foldl_cons", ["multiset"]], ["add", "theorem", "foldl_zero", ["multiset"]], ["add", "theorem", "foldr_add", ["multiset"]], ["add", "theorem", "foldr_cons", ["multiset"]], ["add", "theorem", "foldr_zero", ["multiset"]], ["add", "def", "inter", ["multiset"]], ["mod", "theorem", "inter_comm", ["multiset"]], ["add", "theorem", "inter_le_left", ["multiset"]], ["add", "theorem", "inter_le_right", ["multiset"]], ["add", "theorem", "inter_zero", ["multiset"]], ["add", "theorem", "join_add", ["multiset"]], ["add", "theorem", "join_cons", ["multiset"]], ["add", "theorem", "join_zero", ["multiset"]], ["add", "theorem", "le_inter", ["multiset"]], ["mod", "theorem", "le_union_left", ["multiset"]], ["mod", "theorem", "le_union_right", ["multiset"]], ["add", "theorem", "map_add", ["multiset"]], ["add", "theorem", "map_cons", ["multiset"]], ["add", "theorem", "map_map", ["multiset"]], ["add", "theorem", "map_zero", ["multiset"]], ["add", "theorem", "mem_erase_of_ne", ["multiset"]], ["mod", "theorem", "mem_erase_of_ne_of_mem", ["multiset"]], ["add", "theorem", "prod_add", ["multiset"]], ["add", "theorem", "prod_cons", ["multiset"]], ["add", "theorem", "prod_eq_foldl", ["multiset"]], ["del", "def", "prod_eq_foldl", ["multiset"]], ["add", "theorem", "prod_eq_foldr", ["multiset"]], ["del", "def", "prod_eq_foldr", ["multiset"]], ["add", "theorem", "prod_zero", ["multiset"]], ["add", "def", "product", ["multiset"]], ["add", "theorem", "product_add", ["multiset"]], ["del", "def", "sum", ["multiset"]], ["mod", "theorem", "union_comm", ["multiset"]], ["add", "theorem", "zero_bind", ["multiset"]], ["add", "theorem", "zero_inter", ["multiset"]], ["add", "theorem", "zero_product", ["multiset"]]]}, {"oldPath": "data/quot.lean", "newPath": "data/quot.lean", "changes": [["del", "theorem", "quot_mk_image_univ_eq", []], ["add", "theorem", "eq", ["quotient"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "quot_mk_image_univ_eq", ["set"]]]}, {"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": []}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["add", "theorem", "sup_le_sup_left", ["lattice"]], ["add", "theorem", "sup_le_sup_right", ["lattice"]]]}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}, {"oldPath": "theories/set_theory.lean", "newPath": "theories/set_theory.lean", "changes": [["mod", "inductive", "definable", ["pSet"]]]}]}, {"timestamp": 1511047112, "sha": "d579a56f", "message": "fix(*): update to lean", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": []}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}]}, {"timestamp": 1510753953, "sha": "6e9d2d52", "message": "fix(data/num): update to lean", "changes": [{"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}]}, {"timestamp": 1510313535, "sha": "afddab63", "message": "chore(algebra/module): hide ring parameters, vector_space is no a proper class, remove dual, change variables to implicits\nthe ring type is often unnecessary it can be computed from the module instance. Also a lot of parameters to lemmas should be implicits as they can be computed from assumptions or the expteced type..\n@kckennylau: I removed `dual` as it does not make sense to take about all possible *module structures* possible on the function space `linear_map α β α`. I guess `dual` should be just `linear_map α β α`.", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["mod", "def", "im", ["linear_map"]], ["mod", "def", "ker", ["linear_map"]], ["mod", "theorem", "ker_of_map_eq_map", ["linear_map"]], ["mod", "theorem", "mem_ker", ["linear_map"]], ["mod", "structure", "linear_map", []], ["del", "def", "dual", ["module"]], ["mod", "theorem", "mul_app", ["module"]], ["mod", "theorem", "smul_smul", []], ["mod", "theorem", "neg", ["submodule"]], ["mod", "theorem", "sub", ["submodule"]], ["mod", "def", "subspace", []], ["del", "def", "vector_space", []]]}]}, {"timestamp": 1510291602, "sha": "0f8a5c8d", "message": "refactor(algebra/group): Use a user attr for to_additive\nParts of this commit are redundant pending leanprover/lean#1857 .", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_congr", ["finset"]], ["mod", "theorem", "prod_const_one", ["finset"]], ["mod", "theorem", "prod_empty", ["finset"]], ["mod", "theorem", "prod_image", ["finset"]], ["mod", "theorem", "prod_insert", ["finset"]], ["mod", "theorem", "prod_inv_distrib", ["finset"]], ["mod", "theorem", "prod_singleton", ["finset"]], ["mod", "theorem", "prod_to_finset_of_nodup", ["finset"]], ["del", "theorem", "prod_append", ["list"]], ["del", "theorem", "prod_cons", ["list"]], ["del", "theorem", "prod_eq_of_perm", ["list"]], ["del", "theorem", "prod_join", ["list"]], ["del", "theorem", "prod_nil", ["list"]], ["del", "theorem", "prod_repeat", ["list"]], ["del", "theorem", "prod_reverse", ["list"]]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["mod", "theorem", "inv_eq_one", []], ["mod", "theorem", "inv_inj'", []], ["mod", "theorem", "inv_ne_one", []], ["mod", "theorem", "mul_left_inj", []], ["mod", "theorem", "mul_right_inj", []], ["mod", "theorem", "mul_self_iff_eq_one", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "prod_repeat", ["list"]]]}, {"oldPath": "data/finset/fold.lean", "newPath": "data/finset/fold.lean", "changes": [["del", "theorem", "fold_op_eq_of_perm", ["list"]], ["del", "theorem", "foldl_assoc", ["list"]], ["del", "theorem", "foldl_assoc_comm_cons", ["list"]], ["del", "theorem", "foldl_op_eq_op_foldr_assoc", ["list"]], ["del", "theorem", "map_congr", ["list"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "foldl_assoc", ["list"]], ["add", "theorem", "foldl_assoc_comm_cons", ["list"]], ["add", "theorem", "foldl_op_eq_op_foldr_assoc", ["list"]], ["add", "theorem", "map_congr", ["list"]], ["add", "theorem", "prod_append", ["list"]], ["add", "theorem", "prod_cons", ["list"]], ["add", "theorem", "prod_join", ["list"]], ["add", "theorem", "prod_nil", ["list"]], ["del", "def", "sum", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "fold_op_eq_of_perm", ["list"]], ["add", "theorem", "prod_eq_of_perm", ["list"]], ["add", "theorem", "prod_reverse", ["list"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["mod", "theorem", "size_one", ["nat"]]]}]}, {"timestamp": 1510230780, "sha": "04dd1327", "message": "feat(algebra/big_operators): exists_ne_(one|zero)_of_(prod|sum)_ne_(one|zero)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "exists_ne_one_of_prod_ne_one", ["finset"]]]}]}, {"timestamp": 1510230780, "sha": "5923cd09", "message": "feat(data/set/finite): finite_of_finite_image", "changes": [{"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_of_finite_image", ["set"]]]}, {"oldPath": "logic/function.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "inv_fun_comp", ["function"]]]}]}, {"timestamp": 1510082764, "sha": "d95bff06", "message": "refactor(data/hash_map): improve hash_map proof\nDecrease dependence on implementation details of `array`", "changes": [{"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": [["mod", "theorem", "rev_list_length", ["array"]], ["mod", "theorem", "rev_list_reverse", ["array"]], ["mod", "theorem", "to_list_length", ["array"]], ["add", "theorem", "to_list_nth_le'", ["array"]], ["mod", "theorem", "to_list_reverse", ["array"]], ["add", "theorem", "write_to_list", ["array"]]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": [["mod", "def", "as_list", ["bucket_array"]], ["del", "theorem", "foldl_eq_lem", ["bucket_array"]], ["add", "theorem", "mk_valid", ["hash_map"]], ["del", "theorem", "as_list_length", ["hash_map", "valid"]], ["del", "theorem", "eq'", ["hash_map", "valid"]], ["del", "theorem", "eq", ["hash_map", "valid"]], ["mod", "theorem", "find_aux_iff", ["hash_map", "valid"]], ["add", "theorem", "idx_enum", ["hash_map", "valid"]], ["add", "theorem", "idx_enum_1", ["hash_map", "valid"]], ["del", "theorem", "mk", ["hash_map", "valid"]], ["mod", "theorem", "modify", ["hash_map", "valid"]], ["del", "theorem", "nodup", ["hash_map", "valid"]], ["del", "theorem", "nodupd", ["hash_map", "valid"]], ["add", "structure", "valid", ["hash_map"]], ["del", "def", "valid", ["hash_map"]], ["del", "theorem", "eq", ["hash_map", "valid_aux"]], ["del", "theorem", "nodup", ["hash_map", "valid_aux"]], ["del", "theorem", "unfold_cons", ["hash_map", "valid_aux"]], ["del", "inductive", "valid_aux", ["hash_map"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "drop_eq_nth_le_cons", ["list"]], ["add", "theorem", "join_append", ["list"]], ["add", "theorem", "modify_nth_eq_take_cons_drop", ["list"]], ["add", "theorem", "modify_nth_length", ["list"]], ["add", "theorem", "modify_nth_tail_length", ["list"]], ["mod", "theorem", "nth_update_nth_of_lt", ["list"]], ["add", "theorem", "update_nth_eq_take_cons_drop", ["list"]], ["add", "theorem", "update_nth_length", ["list"]]]}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1510034981, "sha": "4ae6a578", "message": "fix(data/array): update to lean", "changes": [{"oldPath": "data/array/lemmas.lean", "newPath": "data/array/lemmas.lean", "changes": [["add", "theorem", "def", ["array", "mem"]], ["del", "theorem", "mem_iff_list_mem", ["array"]], ["del", "theorem", "mem_iff_rev_list_mem", ["array"]], ["del", "theorem", "mem_iff_rev_list_mem_core", ["array"]], ["add", "theorem", "mem_rev_list", ["array"]], ["add", "theorem", "mem_rev_list_core", ["array"]], ["add", "theorem", "mem_to_list", ["array"]], ["add", "theorem", "mem_to_list_enum", ["array"]], ["mod", "theorem", "push_back_rev_list", ["array"]], ["mod", "theorem", "push_back_rev_list_core", ["array"]], ["mod", "theorem", "push_back_to_list", ["array"]], ["add", "theorem", "read_foreach", ["array"]], ["del", "def", "read_foreach", ["array"]], ["add", "theorem", "read_foreach_aux", ["array"]], ["del", "def", "read_foreach_aux", ["array"]], ["add", "theorem", "read_map", ["array"]], ["del", "def", "read_map", ["array"]], ["add", "theorem", "read_map₂", ["array"]], ["del", "def", "read_map₂", ["array"]], ["del", "theorem", "read_write", ["array"]], ["del", "theorem", "read_write_eq", ["array"]], ["del", "theorem", "read_write_ne", ["array"]], ["add", "theorem", "rev_list_foldr", ["array"]], ["add", "theorem", "rev_list_foldr_aux", ["array"]], ["mod", "theorem", "rev_list_length", ["array"]], ["mod", "theorem", "rev_list_length_aux", ["array"]], ["mod", "theorem", "rev_list_reverse", ["array"]], ["mod", "theorem", "rev_list_reverse_core", ["array"]], ["add", "theorem", "to_list_foldl", ["array"]], ["mod", "theorem", "to_list_length", ["array"]], ["mod", "theorem", "to_list_nth", ["array"]], ["del", "theorem", "to_list_nth_core", ["array"]], ["add", "theorem", "to_list_nth_le", ["array"]], ["add", "theorem", "to_list_nth_le_core", ["array"]], ["mod", "theorem", "to_list_reverse", ["array"]], ["mod", "theorem", "to_list_to_array", ["array"]]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": [["add", "theorem", "nodupd", ["hash_map", "valid"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "enum_from_map_fst", ["list"]], ["add", "theorem", "enum_from_map_snd", ["list"]], ["add", "theorem", "enum_from_nth", ["list"]], ["add", "theorem", "enum_map_fst", ["list"]], ["add", "theorem", "enum_map_snd", ["list"]], ["add", "theorem", "enum_nth", ["list"]], ["mod", "theorem", "eq_nil_of_map_eq_nil", ["list"]], ["mod", "theorem", "ext", ["list"]], ["mod", "theorem", "foldl_append", ["list"]], ["add", "theorem", "foldl_join", ["list"]], ["add", "theorem", "foldr_join", ["list"]], ["add", "theorem", "infix_of_mem_join", ["list"]], ["add", "theorem", "length_enum", ["list"]], ["add", "theorem", "length_enum_from", ["list"]], ["add", "theorem", "map_join", ["list"]], ["add", "theorem", "mem_iff_nth", ["list"]], ["add", "theorem", "mem_iff_nth_le", ["list"]], ["add", "def", "modify_head", ["list"]], ["add", "def", "modify_nth", ["list"]], ["add", "theorem", "modify_nth_eq_take_drop", ["list"]], ["add", "theorem", "modify_nth_eq_update_nth", ["list"]], ["add", "def", "modify_nth_tail", ["list"]], ["add", "theorem", "modify_nth_tail_eq_take_drop", ["list"]], ["add", "theorem", "nth_eq_some", ["list"]], ["mod", "theorem", "nth_ge_len", ["list"]], ["add", "theorem", "nth_le_mem", ["list"]], ["mod", "theorem", "nth_le_nth", ["list"]], ["add", "theorem", "nth_le_of_mem", ["list"]], ["mod", "theorem", "nth_le_reverse_aux1", ["list"]], ["mod", "theorem", "nth_le_reverse_aux2", ["list"]], ["add", "theorem", "nth_mem", ["list"]], ["add", "theorem", "nth_modify_nth", ["list"]], ["add", "theorem", "nth_modify_nth_eq", ["list"]], ["add", "theorem", "nth_modify_nth_ne", ["list"]], ["add", "theorem", "nth_of_mem", ["list"]], ["add", "theorem", "nth_update_nth_eq", ["list"]], ["add", "theorem", "nth_update_nth_ne", ["list"]], ["add", "theorem", "nth_update_nth_of_lt", ["list"]], ["add", "theorem", "and_mem", ["list", "pairwise"]], ["del", "theorem", "iff_mem", ["list", "pairwise"]], ["add", "theorem", "iff_of_mem", ["list", "pairwise"]], ["add", "theorem", "imp_mem", ["list", "pairwise"]], ["add", "theorem", "imp_of_mem", ["list", "pairwise"]], ["add", "theorem", "remove_nth_eq_nth_tail", ["list"]], ["mod", "def", "to_array", ["list"]], ["add", "theorem", "update_nth_eq_modify_nth", ["list"]]]}]}, {"timestamp": 1509968136, "sha": "2bc7fd48", "message": "feat(data/cardinal): theory for cardinal arithmetic", "changes": [{"oldPath": null, "newPath": "data/cardinal.lean", "changes": [["add", "theorem", "add_mono", ["cardinal"]], ["add", "theorem", "mul_mono", ["cardinal"]], ["add", "theorem", "mul_power", ["cardinal"]], ["add", "theorem", "one_power", ["cardinal"]], ["add", "theorem", "power_mono_left", ["cardinal"]], ["add", "theorem", "power_mono_right", ["cardinal"]], ["add", "theorem", "power_mul", ["cardinal"]], ["add", "theorem", "power_sum", ["cardinal"]], ["add", "theorem", "power_zero", ["cardinal"]], ["add", "theorem", "zero_power", ["cardinal"]], ["add", "def", "ω", ["cardinal"]], ["add", "def", "cardinal", []], ["add", "theorem", "antisymm", ["embedding"]], ["add", "def", "arrow_congr_left", ["embedding"]], ["add", "def", "arrow_congr_right", ["embedding"]], ["add", "theorem", "exists_injective_or_surjective", ["embedding"]], ["add", "def", "Sup", ["embedding", "option"]], ["add", "theorem", "Sup_le", ["embedding", "option"]], ["add", "theorem", "eq_of_le_some", ["embedding", "option"]], ["add", "inductive", "le", ["embedding", "option"]], ["add", "theorem", "le_Sup", ["embedding", "option"]], ["add", "theorem", "mem_of_Sup_eq_some", ["embedding", "option"]], ["add", "def", "strict_partial_order", ["embedding", "option"]], ["add", "def", "partial_order", ["embedding", "pfun"]], ["add", "def", "pfun", ["embedding"]], ["add", "def", "prod_congr", ["embedding"]], ["add", "theorem", "schroeder_bernstein", ["embedding"]], ["add", "def", "sum_congr", ["embedding"]], ["add", "theorem", "total", ["embedding"]], ["add", "structure", "embedding", []], ["add", "theorem", "of_bijective", ["equiv"]]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "arrow_empty_unit", ["equiv"]], ["add", "theorem", "empty_of_not_nonempty", ["equiv"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "image_congr", []]]}]}, {"timestamp": 1509938918, "sha": "d62cefd4", "message": "refactor(algebra/module): clean up PR commit", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["del", "theorem", "eq_zero_of_add_self_eq", []], ["mod", "theorem", "add_app", ["linear_map"]], ["mod", "theorem", "ext", ["linear_map"]], ["del", "theorem", "add_im", ["linear_map", "im"]], ["del", "theorem", "mem_im", ["linear_map", "im"]], ["del", "theorem", "neg_im", ["linear_map", "im"]], ["del", "theorem", "smul_im", ["linear_map", "im"]], ["del", "theorem", "zero_im", ["linear_map", "im"]], ["mod", "def", "im", ["linear_map"]], ["add", "theorem", "inj_of_trivial_ker", ["linear_map"]], ["del", "theorem", "inj_of_trivial_ker", ["linear_map", "ker"]], ["del", "theorem", "ker_of_map_eq_map", ["linear_map", "ker"]], ["del", "theorem", "mem_ker", ["linear_map", "ker"]], ["del", "theorem", "sub_ker", ["linear_map", "ker"]], ["mod", "def", "ker", ["linear_map"]], ["add", "theorem", "ker_of_map_eq_map", ["linear_map"]], ["mod", "theorem", "map_add_app", ["linear_map"]], ["mod", "theorem", "map_neg", ["linear_map"]], ["mod", "theorem", "map_smul_app", ["linear_map"]], ["mod", "theorem", "map_sub", ["linear_map"]], ["add", "theorem", "mem_im", ["linear_map"]], ["add", "theorem", "mem_ker", ["linear_map"]], ["mod", "theorem", "neg_app", ["linear_map"]], ["mod", "theorem", "smul_app", ["linear_map"]], ["add", "theorem", "sub_ker", ["linear_map"]], ["mod", "theorem", "zero_app", ["linear_map"]], ["mod", "structure", "linear_map", []], ["del", "theorem", "add_comp", ["module"]], ["del", "theorem", "comp_add", ["module"]], ["del", "theorem", "comp_app", ["module"]], ["del", "theorem", "comp_assoc", ["module"]], ["del", "theorem", "comp_id", ["module"]], ["mod", "def", "dual", ["module"]], ["mod", "def", "endomorphism_ring", ["module"]], ["mod", "def", "general_linear_group", ["module"]], ["del", "def", "id", ["module"]], ["del", "theorem", "id_app", ["module"]], ["del", "theorem", "id_comp", ["module"]], ["add", "theorem", "mul_app", ["module"]], ["add", "theorem", "one_app", ["module"]], ["mod", "theorem", "mul_smul", []], ["add", "theorem", "neg_one_smul", []], ["mod", "theorem", "neg_smul", []], ["mod", "theorem", "one_smul", []], ["mod", "theorem", "smul_left_distrib", []], ["mod", "theorem", "smul_neg", []], ["mod", "theorem", "smul_right_distrib", []], ["mod", "theorem", "smul_smul", []], ["mod", "theorem", "smul_sub_left_distrib", []], ["mod", "theorem", "smul_zero", []], ["mod", "theorem", "sub_smul_right_distrib", []], ["mod", "theorem", "add_val", ["submodule"]], ["add", "theorem", "neg", ["submodule"]], ["mod", "theorem", "neg_val", ["submodule"]], ["mod", "theorem", "smul_val", ["submodule"]], ["mod", "theorem", "sub", ["submodule"]], ["mod", "theorem", "zero_val", ["submodule"]], ["add", "def", "subspace", []], ["add", "def", "vector_space", []], ["mod", "theorem", "zero_smul", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "ext", ["units"]], ["del", "def", "ext", ["units"]], ["add", "theorem", "inv_coe", ["units"]], ["mod", "theorem", "inv_mul", ["units"]], ["del", "theorem", "inv_val'", ["units"]], ["add", "theorem", "mul_coe", ["units"]], ["del", "theorem", "mul_four", ["units"]], ["add", "theorem", "mul_inv", ["units"]], ["del", "theorem", "mul_val", ["units"]], ["add", "theorem", "one_coe", ["units"]], ["del", "theorem", "one_val", ["units"]], ["add", "theorem", "val_coe", ["units"]]]}, {"oldPath": "algebra/vector_space.lean", "newPath": null, "changes": [["del", "def", "dual", ["vector_space"]], ["del", "def", "general_linear_group", ["vector_space"]]]}]}, {"timestamp": 1509931861, "sha": "5cb7fb08", "message": "feat(algebra/vector_space): modules and vector spaces, linear spaces", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["add", "theorem", "eq_zero_of_add_self_eq", []], ["add", "theorem", "add_app", ["linear_map"]], ["add", "theorem", "ext", ["linear_map"]], ["add", "theorem", "add_im", ["linear_map", "im"]], ["add", "theorem", "mem_im", ["linear_map", "im"]], ["add", "theorem", "neg_im", ["linear_map", "im"]], ["add", "theorem", "smul_im", ["linear_map", "im"]], ["add", "theorem", "zero_im", ["linear_map", "im"]], ["add", "def", "im", ["linear_map"]], ["add", "theorem", "inj_of_trivial_ker", ["linear_map", "ker"]], ["add", "theorem", "ker_of_map_eq_map", ["linear_map", "ker"]], ["add", "theorem", "mem_ker", ["linear_map", "ker"]], ["add", "theorem", "sub_ker", ["linear_map", "ker"]], ["add", "def", "ker", ["linear_map"]], ["add", "theorem", "map_add_app", ["linear_map"]], ["add", "theorem", "map_neg", ["linear_map"]], ["add", "theorem", "map_smul_app", ["linear_map"]], ["add", "theorem", "map_sub", ["linear_map"]], ["add", "theorem", "map_zero", ["linear_map"]], ["add", "theorem", "neg_app", ["linear_map"]], ["add", "theorem", "smul_app", ["linear_map"]], ["add", "theorem", "zero_app", ["linear_map"]], ["add", "structure", "linear_map", []], ["add", "theorem", "add_comp", ["module"]], ["add", "theorem", "comp_add", ["module"]], ["add", "theorem", "comp_app", ["module"]], ["add", "theorem", "comp_assoc", ["module"]], ["add", "theorem", "comp_id", ["module"]], ["add", "def", "dual", ["module"]], ["add", "def", "endomorphism_ring", ["module"]], ["add", "def", "general_linear_group", ["module"]], ["add", "def", "id", ["module"]], ["add", "theorem", "id_app", ["module"]], ["add", "theorem", "id_comp", ["module"]], ["del", "def", "to_module", ["ring"]], ["add", "theorem", "smul_smul", []], ["add", "theorem", "add_val", ["submodule"]], ["add", "theorem", "neg_val", ["submodule"]], ["add", "theorem", "smul_val", ["submodule"]], ["add", "theorem", "sub", ["submodule"]], ["add", "theorem", "zero_val", ["submodule"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "def", "ext", ["units"]], ["add", "theorem", "inv_mul", ["units"]], ["add", "theorem", "inv_val'", ["units"]], ["add", "theorem", "mul_four", ["units"]], ["add", "theorem", "mul_val", ["units"]], ["add", "theorem", "one_val", ["units"]], ["add", "structure", "units", []]]}, {"oldPath": null, "newPath": "algebra/vector_space.lean", "changes": [["add", "def", "dual", ["vector_space"]], ["add", "def", "general_linear_group", ["vector_space"]]]}]}, {"timestamp": 1509931618, "sha": "0947f962", "message": "feat(data/multiset): working on multiset.union", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "mul_sign", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "erase_sublist_erase", ["list"]], ["add", "theorem", "sublist_or_mem_of_sublist", ["list"]]]}, {"oldPath": "data/multiset/basic.lean", "newPath": "data/multiset/basic.lean", "changes": [["mod", "theorem", "add_cons", ["multiset"]], ["add", "theorem", "add_sub_cancel", ["multiset"]], ["add", "theorem", "add_sub_cancel_left", ["multiset"]], ["mod", "theorem", "add_sub_of_le", ["multiset"]], ["add", "theorem", "cons_add", ["multiset"]], ["mod", "theorem", "eq_cons_erase", ["multiset"]], ["add", "theorem", "eq_union_left", ["multiset"]], ["add", "theorem", "eq_union_right", ["multiset"]], ["add", "theorem", "erase_le_erase", ["multiset"]], ["add", "theorem", "erase_le_iff_le_cons", ["multiset"]], ["add", "theorem", "insert_eq_cons", ["multiset"]], ["add", "theorem", "le_cons_erase", ["multiset"]], ["add", "theorem", "le_cons_of_not_mem", ["multiset"]], ["add", "theorem", "le_sub_add", ["multiset"]], ["add", "theorem", "le_union_left", ["multiset"]], ["add", "theorem", "le_union_right", ["multiset"]], ["mod", "theorem", "mem_singleton", ["multiset"]], ["mod", "theorem", "mem_singleton_self", ["multiset"]], ["add", "def", "ndinsert", ["multiset"]], ["add", "def", "nodup", ["multiset"]], ["mod", "theorem", "singleton_inj", ["multiset"]], ["mod", "theorem", "singleton_ne_zero", ["multiset"]], ["mod", "theorem", "sub_add_cancel", ["multiset"]], ["add", "theorem", "sub_le_iff_le_add", ["multiset"]], ["add", "theorem", "sub_le_sub_left", ["multiset"]], ["add", "theorem", "sub_le_sub_right", ["multiset"]], ["add", "def", "union", ["multiset"]], ["add", "theorem", "union_comm", ["multiset"]], ["add", "theorem", "union_le", ["multiset"]], ["add", "theorem", "union_le_union_left", ["multiset"]], ["add", "theorem", "union_le_union_right", ["multiset"]]]}]}, {"timestamp": 1509903766, "sha": "2aa6c877", "message": "feat(tactic/norm_num): add support for inv and locations in norm_num", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1509845421, "sha": "d743fdfa", "message": "feat(data/sigma): duplicate sigma basics for psigma", "changes": [{"oldPath": "data/sigma/basic.lean", "newPath": "data/sigma/basic.lean", "changes": [["add", "def", "map", ["psigma"]], ["add", "theorem", "mk_eq_mk_iff", ["psigma"]], ["mod", "def", "map", ["sigma"]], ["mod", "theorem", "mk_eq_mk_iff", ["sigma"]]]}]}, {"timestamp": 1509841799, "sha": "8e99f987", "message": "fix(algebra/field): update to lean", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["del", "theorem", "inv_inv", ["division_ring"]], ["del", "theorem", "one_div_div", ["division_ring"]], ["del", "theorem", "inv_ne_zero", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "mul_neg_one", []], ["del", "theorem", "mul_neg_one_eq_neg", []], ["add", "theorem", "neg_one_mul", []]]}]}, {"timestamp": 1509642823, "sha": "2da9bef0", "message": "feat(data/nat/cast,...): add char_zero typeclass for cast_inj\nAs pointed out by @kbuzzard, the complex numbers are an important example of an unordered characteristic zero field for which we will want cast_inj to be available.", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "cast_eq_zero", ["int"]], ["mod", "theorem", "cast_inj", ["int"]], ["mod", "theorem", "cast_ne_zero", ["int"]]]}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["add", "theorem", "char_zero_of_inj_zero", ["add_group"]], ["add", "theorem", "char_zero_of_inj_zero", []], ["mod", "theorem", "cast_eq_zero", ["nat"]], ["mod", "theorem", "cast_inj", ["nat"]], ["mod", "theorem", "cast_ne_zero", ["nat"]], ["add", "theorem", "char_zero_of_inj_zero", ["ordered_cancel_comm_monoid"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["mod", "theorem", "cast_add", ["rat"]], ["mod", "theorem", "cast_bit0", ["rat"]], ["mod", "theorem", "cast_bit1", ["rat"]], ["mod", "theorem", "cast_div", ["rat"]], ["mod", "theorem", "cast_eq_zero", ["rat"]], ["mod", "theorem", "cast_inj", ["rat"]], ["mod", "theorem", "cast_inv", ["rat"]], ["mod", "theorem", "cast_mk", ["rat"]], ["mod", "theorem", "cast_mul", ["rat"]], ["mod", "theorem", "cast_ne_zero", ["rat"]], ["mod", "theorem", "cast_sub", ["rat"]]]}]}, {"timestamp": 1509589957, "sha": "2883c1bb", "message": "feat(data/num/lemmas): finish znum isomorphism proof", "changes": [{"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["add", "theorem", "cast_add", ["num"]], ["mod", "theorem", "cast_inj", ["num"]], ["mod", "theorem", "cast_le", ["num"]], ["mod", "theorem", "cast_lt", ["num"]], ["mod", "theorem", "cast_mul", ["num"]], ["mod", "theorem", "cast_inj", ["pos_num"]], ["mod", "theorem", "cast_le", ["pos_num"]], ["mod", "theorem", "cast_lt", ["pos_num"]], ["mod", "theorem", "cast_mul", ["pos_num"]], ["del", "theorem", "add_of_nat", ["znum"]], ["mod", "theorem", "cast_add", ["znum"]], ["add", "theorem", "cast_inj", ["znum"]], ["add", "theorem", "cast_le", ["znum"]], ["add", "theorem", "cast_lt", ["znum"]], ["add", "theorem", "cast_mul", ["znum"]], ["add", "theorem", "cast_succ", ["znum"]], ["add", "theorem", "cmp_to_int", ["znum"]], ["add", "theorem", "le_to_int", ["znum"]], ["add", "theorem", "lt_to_int", ["znum"]], ["add", "theorem", "mul_to_int", ["znum"]], ["add", "theorem", "to_int_inj", ["znum"]], ["add", "theorem", "to_of_int", ["znum"]]]}]}, {"timestamp": 1509581197, "sha": "efb37f8d", "message": "fix(theories/set_theory): workaround for noncomputability bug in lean", "changes": [{"oldPath": "theories/set_theory.lean", "newPath": "theories/set_theory.lean", "changes": []}]}, {"timestamp": 1509574793, "sha": "0c0c007d", "message": "test(tests/norm_num): more tests from #16", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1509574454, "sha": "7339f59b", "message": "fix(tactic/norm_num): bugfix", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1509571432, "sha": "5a262df2", "message": "fix(tactic/norm_num): fix performance bug in norm_num", "changes": [{"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": []}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1509511013, "sha": "6eedc0e7", "message": "feat(tactic/norm_num): rewrite norm_num to use simp instead of reflection", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/norm_num.lean", "newPath": "tactic/norm_num.lean", "changes": [["del", "theorem", "bit0_le_one", ["norm_num"]], ["del", "theorem", "bit0_le_zero", ["norm_num"]], ["add", "theorem", "bit0_zero", ["norm_num"]], ["del", "theorem", "bit1_le_bit0", ["norm_num"]], ["del", "theorem", "bit1_le_one", ["norm_num"]], ["del", "theorem", "bit1_le_zero", ["norm_num"]], ["add", "theorem", "bit1_zero", ["norm_num"]], ["add", "theorem", "lt_add_of_pos_helper", ["norm_num"]], ["del", "theorem", "one_le_bit0", ["norm_num"]], ["del", "theorem", "one_le_bit1", ["norm_num"]], ["del", "theorem", "one_le_one", ["norm_num"]], ["del", "theorem", "pow_bit0", ["norm_num"]], ["mod", "theorem", "pow_bit0_helper", ["norm_num"]], ["del", "theorem", "pow_bit1", ["norm_num"]], ["mod", "theorem", "pow_bit1_helper", ["norm_num"]], ["del", "theorem", "pow_eq_pow_nat", ["norm_num"]], ["del", "theorem", "pow_eq_pow_nat_helper", ["norm_num"]], ["del", "theorem", "pow_one", ["norm_num"]], ["del", "theorem", "pow_zero", ["norm_num"]], ["del", "theorem", "zero_le_bit0", ["norm_num"]], ["del", "theorem", "zero_le_bit1", ["norm_num"]], ["del", "theorem", "zero_le_one", ["norm_num"]], ["del", "theorem", "zero_le_zero", ["norm_num"]], ["del", "def", "add1", ["num"]], ["del", "def", "add_n", ["num"]], ["del", "theorem", "bit0_le_bit0", ["num"]], ["del", "theorem", "denote_add1", ["num"]], ["del", "theorem", "denote_le_denote_of_num_le", ["num"]], ["del", "theorem", "denote_le_denote_of_pos_num_le", ["num"]], ["del", "theorem", "denote_le_denote_of_znum_le", ["num"]], ["del", "def", "num_le", ["num"]], ["del", "theorem", "one_le_denote", ["num"]], ["del", "def", "pos_le", ["num"]], ["del", "theorem", "zero_le_denote", ["num"]], ["del", "def", "znum_le", ["num"]], ["del", "inductive", "denotation", ["tactic", "interactive"]], ["del", "def", "to_neg", ["tactic", "interactive", "znum"]], ["del", "def", "to_pos", ["tactic", "interactive", "znum"]]]}, {"oldPath": "tests/norm_num.lean", "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1509510913, "sha": "0663945f", "message": "feat(data/num,data/multiset): more properties of binary numbers, begin multisets", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "inv_div", ["division_ring"]], ["add", "theorem", "inv_inv", ["division_ring"]], ["add", "theorem", "one_div_div", ["division_ring"]], ["add", "theorem", "inv_ne_zero", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "has_pow_nat_eq_pow_nat", []], ["add", "theorem", "pow_bit0", []], ["add", "theorem", "pow_bit1", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "bit0_pos", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "bit1_pos'", []], ["add", "theorem", "bit1_pos", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "cast_coe_nat'", ["int"]]]}, {"oldPath": null, "newPath": "data/multiset/basic.lean", "changes": [["add", "theorem", "add_cons", ["multiset"]], ["add", "theorem", "add_sub_of_le", ["multiset"]], ["add", "def", "card", ["multiset"]], ["add", "theorem", "card_add", ["multiset"]], ["add", "theorem", "card_cons", ["multiset"]], ["add", "theorem", "card_empty", ["multiset"]], ["add", "theorem", "card_erase_of_mem", ["multiset"]], ["add", "theorem", "card_insert_le", ["multiset"]], ["add", "theorem", "card_insert_of_not_mem", ["multiset"]], ["add", "theorem", "card_le_of_le", ["multiset"]], ["add", "theorem", "card_lt_of_lt", ["multiset"]], ["add", "theorem", "card_range", ["multiset"]], ["add", "theorem", "card_zero", ["multiset"]], ["add", "theorem", "coe_add", ["multiset"]], ["add", "theorem", "coe_card", ["multiset"]], ["add", "theorem", "coe_eq_coe", ["multiset"]], ["add", "theorem", "coe_erase", ["multiset"]], ["add", "theorem", "coe_foldl", ["multiset"]], ["add", "theorem", "coe_foldr", ["multiset"]], ["add", "theorem", "coe_foldr_swap", ["multiset"]], ["add", "theorem", "coe_join", ["multiset"]], ["add", "theorem", "coe_le", ["multiset"]], ["add", "theorem", "coe_nil_eq_zero", ["multiset"]], ["add", "theorem", "coe_reverse", ["multiset"]], ["add", "theorem", "coe_sub", ["multiset"]], ["add", "def", "cons", ["multiset"]], ["add", "theorem", "cons_coe", ["multiset"]], ["add", "theorem", "cons_inj_left", ["multiset"]], ["add", "theorem", "cons_inj_right", ["multiset"]], ["add", "theorem", "cons_le_cons", ["multiset"]], ["add", "theorem", "cons_le_cons_iff", ["multiset"]], ["add", "theorem", "cons_swap", ["multiset"]], ["add", "theorem", "empty_inter", ["multiset"]], ["add", "theorem", "empty_subset", ["multiset"]], ["add", "theorem", "eq_cons_erase", ["multiset"]], ["add", "theorem", "eq_empty_of_card_eq_zero", ["multiset"]], ["add", "theorem", "eq_empty_of_forall_not_mem", ["multiset"]], ["add", "theorem", "eq_empty_of_subset_empty", ["multiset"]], ["add", "theorem", "eq_of_le_of_card_le", ["multiset"]], ["add", "theorem", "eq_zero_of_le_zero", ["multiset"]], ["add", "def", "erase", ["multiset"]], ["add", "theorem", "erase_add_left_neg", ["multiset"]], ["add", "theorem", "erase_add_left_pos", ["multiset"]], ["add", "theorem", "erase_add_right_neg", ["multiset"]], ["add", "theorem", "erase_add_right_pos", ["multiset"]], ["add", "theorem", "erase_comm", ["multiset"]], ["add", "theorem", "erase_cons_head", ["multiset"]], ["add", "theorem", "erase_cons_tail", ["multiset"]], ["add", "theorem", "erase_dup_map_erase_dup_eq", ["multiset"]], ["add", "theorem", "erase_empty", ["multiset"]], ["add", "theorem", "erase_eq_of_not_mem", ["multiset"]], ["add", "theorem", "erase_insert", ["multiset"]], ["add", "theorem", "erase_insert_subset", ["multiset"]], ["add", "theorem", "erase_le", ["multiset"]], ["add", "theorem", "erase_of_not_mem", ["multiset"]], ["add", "theorem", "erase_subset", ["multiset"]], ["add", "theorem", "erase_subset_erase", ["multiset"]], ["add", "theorem", "erase_subset_of_subset_insert", ["multiset"]], ["add", "theorem", "erase_zero", ["multiset"]], ["add", "theorem", "exists_cons_of_mem", ["multiset"]], ["add", "theorem", "exists_mem_empty_iff", ["multiset"]], ["add", "theorem", "exists_mem_insert", ["multiset"]], ["add", "theorem", "exists_mem_of_ne_empty", ["multiset"]], ["add", "theorem", "exists_nat_subset_range", ["multiset"]], ["add", "theorem", "filter_false", ["multiset"]], ["add", "theorem", "filter_filter", ["multiset"]], ["add", "theorem", "filter_inter_filter_neg_eq", ["multiset"]], ["add", "theorem", "filter_subset", ["multiset"]], ["add", "theorem", "filter_union", ["multiset"]], ["add", "theorem", "filter_union_filter_neg_eq", ["multiset"]], ["add", "def", "foldl", ["multiset"]], ["add", "theorem", "foldl_swap", ["multiset"]], ["add", "def", "foldr", ["multiset"]], ["add", "theorem", "foldr_swap", ["multiset"]], ["add", "theorem", "forall_mem_empty_iff", ["multiset"]], ["add", "theorem", "forall_mem_insert", ["multiset"]], ["add", "theorem", "image_empty", ["multiset"]], ["add", "theorem", "image_eq_empty_iff", ["multiset"]], ["add", "theorem", "image_filter", ["multiset"]], ["add", "theorem", "image_id", ["multiset"]], ["add", "theorem", "image_image", ["multiset"]], ["add", "theorem", "image_insert", ["multiset"]], ["add", "theorem", "image_inter", ["multiset"]], ["add", "theorem", "image_singleton", ["multiset"]], ["add", "theorem", "image_subset_image", ["multiset"]], ["add", "theorem", "image_to_multiset", ["multiset"]], ["add", "theorem", "image_to_multiset_of_nodup", ["multiset"]], ["add", "theorem", "image_union", ["multiset"]], ["add", "theorem", "insert_erase", ["multiset"]], ["add", "theorem", "insert_erase_subset", ["multiset"]], ["add", "theorem", "insert_inter_of_mem", ["multiset"]], ["add", "theorem", "insert_inter_of_not_mem", ["multiset"]], ["add", "theorem", "inter_assoc", ["multiset"]], ["add", "theorem", "inter_comm", ["multiset"]], ["add", "theorem", "inter_distrib_left", ["multiset"]], ["add", "theorem", "inter_distrib_right", ["multiset"]], ["add", "theorem", "inter_empty", ["multiset"]], ["add", "theorem", "inter_insert_of_mem", ["multiset"]], ["add", "theorem", "inter_insert_of_not_mem", ["multiset"]], ["add", "theorem", "inter_left_comm", ["multiset"]], ["add", "theorem", "inter_right_comm", ["multiset"]], ["add", "theorem", "inter_self", ["multiset"]], ["add", "theorem", "inter_singleton_of_mem", ["multiset"]], ["add", "theorem", "inter_singleton_of_not_mem", ["multiset"]], ["add", "theorem", "inter_subset_left", ["multiset"]], ["add", "theorem", "inter_subset_right", ["multiset"]], ["add", "def", "join", ["multiset"]], ["add", "theorem", "le_add_left", ["multiset"]], ["add", "theorem", "le_add_right", ["multiset"]], ["add", "theorem", "le_cons_self", ["multiset"]], ["add", "theorem", "le_iff_exists_add", ["multiset"]], ["add", "theorem", "le_induction_on", ["multiset"]], ["add", "theorem", "lt_cons_self", ["multiset"]], ["add", "theorem", "lt_iff_cons_le", ["multiset"]], ["add", "def", "map", ["multiset"]], ["add", "def", "mem", ["multiset"]], ["add", "theorem", "mem_coe", ["multiset"]], ["add", "theorem", "mem_cons", ["multiset"]], ["add", "theorem", "mem_cons_self", ["multiset"]], ["add", "theorem", "mem_erase", ["multiset"]], ["add", "theorem", "mem_erase_of_ne_of_mem", ["multiset"]], ["add", "theorem", "mem_filter", ["multiset"]], ["add", "theorem", "mem_image_iff", ["multiset"]], ["add", "theorem", "mem_inter", ["multiset"]], ["add", "theorem", "mem_inter_of_mem", ["multiset"]], ["add", "theorem", "mem_map", ["multiset"]], ["add", "theorem", "mem_map_of_inj", ["multiset"]], ["add", "theorem", "mem_map_of_mem", ["multiset"]], ["add", "theorem", "mem_of_le", ["multiset"]], ["add", "theorem", "mem_of_mem_erase", ["multiset"]], ["add", "theorem", "mem_of_mem_inter_left", ["multiset"]], ["add", "theorem", "mem_of_mem_inter_right", ["multiset"]], ["add", "theorem", "mem_of_subset", ["multiset"]], ["add", "theorem", "mem_range", ["multiset"]], ["add", "theorem", "mem_sdiff_iff", ["multiset"]], ["add", "theorem", "mem_singleton", ["multiset"]], ["add", "theorem", "mem_singleton_self", ["multiset"]], ["add", "theorem", "ne_empty_of_card_eq_succ", ["multiset"]], ["add", "theorem", "ne_of_mem_erase", ["multiset"]], ["add", "theorem", "not_mem_empty", ["multiset"]], ["add", "theorem", "not_mem_erase", ["multiset"]], ["add", "theorem", "not_mem_range_self", ["multiset"]], ["add", "def", "prod", ["multiset"]], ["add", "def", "prod_eq_foldl", ["multiset"]], ["add", "def", "prod_eq_foldr", ["multiset"]], ["add", "theorem", "quot_mk_to_coe'", ["multiset"]], ["add", "theorem", "quot_mk_to_coe", ["multiset"]], ["add", "def", "range", ["multiset"]], ["add", "theorem", "range_subset", ["multiset"]], ["add", "theorem", "range_succ", ["multiset"]], ["add", "theorem", "range_zero", ["multiset"]], ["add", "theorem", "sdiff_inter_self", ["multiset"]], ["add", "theorem", "sdiff_subset_sdiff", ["multiset"]], ["add", "theorem", "sdiff_union_of_subset", ["multiset"]], ["add", "theorem", "singleton_add", ["multiset"]], ["add", "theorem", "singleton_coe", ["multiset"]], ["add", "theorem", "singleton_inj", ["multiset"]], ["add", "theorem", "singleton_inter_of_mem", ["multiset"]], ["add", "theorem", "singleton_inter_of_not_mem", ["multiset"]], ["add", "theorem", "singleton_ne_zero", ["multiset"]], ["add", "theorem", "sub_add_cancel", ["multiset"]], ["add", "theorem", "sub_cons", ["multiset"]], ["add", "theorem", "sub_eq_fold_erase", ["multiset"]], ["add", "theorem", "sub_zero", ["multiset"]], ["add", "theorem", "refl", ["multiset", "subset"]], ["add", "theorem", "trans", ["multiset", "subset"]], ["add", "theorem", "subset_empty_iff", ["multiset"]], ["add", "theorem", "subset_iff", ["multiset"]], ["add", "theorem", "subset_insert_iff", ["multiset"]], ["add", "theorem", "subset_insert_of_erase_subset", ["multiset"]], ["add", "theorem", "subset_inter", ["multiset"]], ["add", "theorem", "subset_of_le", ["multiset"]], ["add", "def", "sum", ["multiset"]], ["add", "theorem", "union_distrib_left", ["multiset"]], ["add", "theorem", "union_distrib_right", ["multiset"]], ["add", "theorem", "zero_le", ["multiset"]], ["add", "def", "{u}", []]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "def", "ppred", ["nat"]], ["add", "theorem", "ppred_eq_none", ["nat"]], ["add", "theorem", "ppred_eq_pred", ["nat"]], ["add", "theorem", "ppred_eq_some", ["nat"]], ["add", "theorem", "pred_eq_ppred", ["nat"]], ["add", "def", "psub", ["nat"]], ["add", "theorem", "psub_add", ["nat"]], ["add", "theorem", "psub_eq_none", ["nat"]], ["add", "theorem", "psub_eq_some", ["nat"]], ["add", "theorem", "psub_eq_sub", ["nat"]], ["add", "theorem", "size_one", ["nat"]], ["add", "theorem", "sub_eq_psub", ["nat"]]]}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["mod", "theorem", "cast_bit0", ["nat"]], ["mod", "theorem", "cast_bit1", ["nat"]]]}, {"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": [["del", "def", "of_nat", ["num"]], ["add", "def", "of_znum'", ["num"]], ["add", "def", "of_znum", ["num"]], ["add", "def", "ppred", ["num"]], ["add", "def", "psub", ["num"]], ["add", "def", "sub'", ["num"]], ["add", "def", "to_znum_neg", ["num"]], ["add", "def", "of_znum'", ["pos_num"]], ["add", "def", "of_znum", ["pos_num"]], ["mod", "def", "pred'", ["pos_num"]], ["mod", "def", "pred", ["pos_num"]], ["del", "def", "psub", ["pos_num"]], ["add", "def", "sub'", ["pos_num"]]]}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["mod", "theorem", "add_of_nat", ["num"]], ["add", "theorem", "add_one", ["num"]], ["add", "theorem", "add_to_nat", ["num"]], ["add", "theorem", "add_to_znum", ["num"]], ["add", "theorem", "bit0_of_bit0", ["num"]], ["add", "theorem", "bit1_of_bit1", ["num"]], ["del", "theorem", "cast_add", ["num"]], ["del", "theorem", "cast_cmp'", ["num"]], ["del", "theorem", "cast_cmp", ["num"]], ["mod", "theorem", "cast_one", ["num"]], ["add", "theorem", "cast_sub'", ["num"]], ["mod", "theorem", "cast_succ'", ["num"]], ["add", "theorem", "cast_to_int", ["num"]], ["add", "theorem", "cast_to_nat", ["num"]], ["add", "theorem", "cast_to_znum", ["num"]], ["add", "theorem", "cast_to_znum_neg", ["num"]], ["mod", "theorem", "cast_zero", ["num"]], ["add", "theorem", "cmp_to_nat", ["num"]], ["add", "theorem", "le_to_nat", ["num"]], ["add", "theorem", "lt_to_nat", ["num"]], ["add", "theorem", "mul_to_nat", ["num"]], ["mod", "theorem", "of_nat_inj", ["num"]], ["add", "theorem", "of_nat_to_znum", ["num"]], ["add", "theorem", "of_nat_to_znum_neg", ["num"]], ["add", "theorem", "ppred_to_nat", ["num"]], ["add", "theorem", "succ'_to_nat", ["num"]], ["add", "theorem", "succ_to_nat", ["num"]], ["mod", "theorem", "to_nat_inj", ["num"]], ["add", "theorem", "zneg_to_znum", ["num"]], ["add", "theorem", "zneg_to_znum_neg", ["num"]], ["add", "theorem", "add_to_nat", ["pos_num"]], ["mod", "theorem", "cast_add", ["pos_num"]], ["del", "theorem", "cast_add_comm", ["pos_num"]], ["del", "theorem", "cast_add_comm_lemma_1", ["pos_num"]], ["del", "theorem", "cast_add_comm_lemma_2", ["pos_num"]], ["del", "theorem", "cast_add_one_comm", ["pos_num"]], ["add", "theorem", "cast_bit0", ["pos_num"]], ["add", "theorem", "cast_bit1", ["pos_num"]], ["del", "theorem", "cast_cmp'", ["pos_num"]], ["del", "theorem", "cast_cmp", ["pos_num"]], ["mod", "theorem", "cast_mul", ["pos_num"]], ["mod", "theorem", "cast_one", ["pos_num"]], ["add", "theorem", "cast_sub'", ["pos_num"]], ["mod", "theorem", "cast_succ", ["pos_num"]], ["add", "theorem", "cast_to_int", ["pos_num"]], ["add", "theorem", "cast_to_nat", ["pos_num"]], ["add", "theorem", "cast_to_num", ["pos_num"]], ["add", "theorem", "cast_to_znum", ["pos_num"]], ["add", "theorem", "cmp_to_nat", ["pos_num"]], ["add", "theorem", "cmp_to_nat_lemma", ["pos_num"]], ["add", "theorem", "le_to_nat", ["pos_num"]], ["add", "theorem", "lt_to_nat", ["pos_num"]], ["add", "theorem", "mul_to_nat", ["pos_num"]], ["mod", "theorem", "of_to_nat", ["pos_num"]], ["del", "theorem", "one_add", ["pos_num"]], ["mod", "theorem", "one_le_cast", ["pos_num"]], ["add", "theorem", "one_sub'", ["pos_num"]], ["add", "theorem", "pred'_succ'", ["pos_num"]], ["mod", "theorem", "pred'_to_nat", ["pos_num"]], ["add", "theorem", "size_to_nat", ["pos_num"]], ["add", "theorem", "sub'_one", ["pos_num"]], ["add", "theorem", "succ'_pred'", ["pos_num"]], ["add", "theorem", "succ_to_nat", ["pos_num"]], ["mod", "theorem", "to_nat_inj", ["pos_num"]], ["add", "theorem", "to_nat_pos", ["pos_num"]], ["add", "theorem", "add_of_nat", ["znum"]], ["add", "theorem", "add_one", ["znum"]], ["add", "theorem", "add_zero", ["znum"]], ["add", "theorem", "bit0_of_bit0", ["znum"]], ["add", "theorem", "bit1_of_bit1", ["znum"]], ["add", "theorem", "cast_add", ["znum"]], ["add", "theorem", "cast_bit0", ["znum"]], ["add", "theorem", "cast_bit1", ["znum"]], ["add", "theorem", "cast_bitm1", ["znum"]], ["add", "theorem", "cast_neg", ["znum"]], ["mod", "theorem", "cast_one", ["znum"]], ["add", "theorem", "cast_pos", ["znum"]], ["add", "theorem", "cast_to_int", ["znum"]], ["mod", "theorem", "cast_zero", ["znum"]], ["add", "theorem", "cast_zneg", ["znum"]], ["add", "theorem", "neg_of_int", ["znum"]], ["add", "theorem", "neg_zero", ["znum"]], ["add", "theorem", "of_to_int", ["znum"]], ["add", "theorem", "zero_add", ["znum"]], ["add", "theorem", "zneg_bit1", ["znum"]], ["add", "theorem", "zneg_bitm1", ["znum"]], ["add", "theorem", "zneg_neg", ["znum"]], ["add", "theorem", "zneg_pos", ["znum"]], ["add", "theorem", "zneg_pred", ["znum"]], ["add", "theorem", "zneg_succ", ["znum"]], ["add", "theorem", "zneg_zneg", ["znum"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["del", "theorem", "bind_none", ["option"]], ["mod", "theorem", "bind_some", ["option"]], ["add", "theorem", "none_bind", ["option"]], ["add", "theorem", "some_bind", ["option"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "cast_div", ["rat"]], ["add", "theorem", "cast_div_of_ne_zero", ["rat"]], ["add", "theorem", "cast_inv", ["rat"]], ["add", "theorem", "cast_inv_of_ne_zero", ["rat"]]]}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}]}, {"timestamp": 1508970296, "sha": "ff436915", "message": "fix(analysis/real): remove import for old file\nnote: exists_subtype is now subtype.exists in logic/basic", "changes": [{"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}]}, {"timestamp": 1508968510, "sha": "3cd62290", "message": "refactor(analysis/real): use more coe instead of of_rat", "changes": [{"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": [["del", "theorem", "borel_eq_generate_from_Iio_of_rat", ["measure_theory"]], ["add", "theorem", "borel_eq_generate_from_Iio_rat", ["measure_theory"]], ["del", "theorem", "borel_eq_generate_from_Ioo_of_rat_of_rat", ["measure_theory"]], ["add", "theorem", "borel_eq_generate_from_Ioo_rat", ["measure_theory"]], ["del", "theorem", "is_topological_basis_Ioo_of_rat_of_rat", ["measure_theory"]], ["add", "theorem", "is_topological_basis_Ioo_rat", ["measure_theory"]]]}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["del", "theorem", "exists_lt_of_rat_of_rat_gt", []], ["add", "theorem", "exists_lt_rat", []], ["add", "theorem", "exists_rat_btwn", []], ["add", "theorem", "exists_rat_lt", []]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "cast_abs", ["int"]], ["add", "theorem", "cast_max", ["int"]], ["add", "theorem", "cast_min", ["int"]]]}, {"oldPath": "data/nat/cast.lean", "newPath": "data/nat/cast.lean", "changes": [["add", "theorem", "cast_max", ["nat"]], ["add", "theorem", "cast_min", ["nat"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "cast_abs", ["rat"]], ["add", "theorem", "cast_max", ["rat"]], ["add", "theorem", "cast_min", ["rat"]]]}, {"oldPath": "data/subtype.lean", "newPath": null, "changes": [["del", "theorem", "exists_subtype", []], ["del", "theorem", "forall_subtype", []]]}]}, {"timestamp": 1508885842, "sha": "2dd035a6", "message": "Merge remote-tracking branch 'cipher1024/master'", "changes": [{"oldPath": null, "newPath": "meta/expr.lean", "changes": []}, {"oldPath": null, "newPath": "tactic/norm_num.lean", "changes": [["add", "theorem", "bit0_le_one", ["norm_num"]], ["add", "theorem", "bit0_le_zero", ["norm_num"]], ["add", "theorem", "bit1_le_bit0", ["norm_num"]], ["add", "theorem", "bit1_le_one", ["norm_num"]], ["add", "theorem", "bit1_le_zero", ["norm_num"]], ["add", "theorem", "one_le_bit0", ["norm_num"]], ["add", "theorem", "one_le_bit1", ["norm_num"]], ["add", "theorem", "one_le_one", ["norm_num"]], ["add", "theorem", "pow_bit0", ["norm_num"]], ["add", "theorem", "pow_bit0_helper", ["norm_num"]], ["add", "theorem", "pow_bit1", ["norm_num"]], ["add", "theorem", "pow_bit1_helper", ["norm_num"]], ["add", "theorem", "pow_eq_pow_nat", ["norm_num"]], ["add", "theorem", "pow_eq_pow_nat_helper", ["norm_num"]], ["add", "theorem", "pow_one", ["norm_num"]], ["add", "theorem", "pow_zero", ["norm_num"]], ["add", "theorem", "zero_le_bit0", ["norm_num"]], ["add", "theorem", "zero_le_bit1", ["norm_num"]], ["add", "theorem", "zero_le_one", ["norm_num"]], ["add", "theorem", "zero_le_zero", ["norm_num"]], ["add", "def", "add1", ["num"]], ["add", "def", "add_n", ["num"]], ["add", "theorem", "bit0_le_bit0", ["num"]], ["add", "theorem", "denote_add1", ["num"]], ["add", "theorem", "denote_le_denote_of_num_le", ["num"]], ["add", "theorem", "denote_le_denote_of_pos_num_le", ["num"]], ["add", "theorem", "denote_le_denote_of_znum_le", ["num"]], ["add", "def", "num_le", ["num"]], ["add", "theorem", "one_le_denote", ["num"]], ["add", "def", "pos_le", ["num"]], ["add", "theorem", "zero_le_denote", ["num"]], ["add", "def", "znum_le", ["num"]], ["add", "inductive", "denotation", ["tactic", "interactive"]], ["add", "def", "to_neg", ["tactic", "interactive", "znum"]], ["add", "def", "to_pos", ["tactic", "interactive", "znum"]]]}, {"oldPath": null, "newPath": "tests/norm_num.lean", "changes": []}]}, {"timestamp": 1508884272, "sha": "dd9f766f", "message": "feat(data/num,data/nat/cast,...): nat,num,int,rat.cast, list stuff", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "inv_comm_of_comm", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "eq_inv_iff_mul_eq_one", []], ["mod", "theorem", "eq_inv_mul_iff_mul_eq", []], ["mod", "theorem", "eq_mul_inv_iff_mul_eq", []], ["mod", "theorem", "eq_sub_iff_add_eq", []], ["add", "theorem", "inv_eq_iff_mul_eq_one", []], ["mod", "theorem", "inv_mul_eq_iff_eq_mul", []], ["mod", "theorem", "mul_inv_eq_iff_eq_mul", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "pow_eq_pow_nat", ["nat"]]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "mul_nonneg_iff_right_nonneg_of_pos", []]]}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": [["mod", "theorem", "mul_add_one_le_pow", []]]}, {"oldPath": "analysis/measure_theory/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": [["mod", "theorem", "tendsto_of_nat_at_top_at_top", ["measure_theory"]]]}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/of_nat.lean", "newPath": null, "changes": [["del", "theorem", "exists_lt_of_nat", []], ["del", "theorem", "int_of_nat_eq_of_nat", []], ["del", "def", "of_nat", []], ["del", "theorem", "of_nat_add", []], ["del", "theorem", "of_nat_bit0", []], ["del", "theorem", "of_nat_bit1", []], ["del", "theorem", "of_nat_le_of_nat", []], ["del", "theorem", "of_nat_le_of_nat_iff", []], ["del", "theorem", "of_nat_mul", []], ["del", "theorem", "of_nat_one", []], ["del", "theorem", "of_nat_pos", []], ["del", "theorem", "of_nat_sub", []], ["del", "theorem", "rat_coe_eq_of_nat", []], ["del", "theorem", "rat_of_nat_eq_of_nat", []], ["del", "theorem", "real_of_rat_of_nat_eq_of_nat", []], ["del", "theorem", "zero_le_of_nat", []]]}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["add", "theorem", "coe_rat_eq_of_rat", []], ["add", "theorem", "exists_lt_nat", []], ["mod", "def", "lift_rat_fun", []], ["mod", "def", "lift_rat_op", []]]}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["mod", "def", "encodable_of_equiv", []]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "theorem", "apply_inverse_apply", ["equiv"]], ["add", "def", "int_equiv_nat", ["equiv"]], ["add", "def", "int_equiv_nat_sum_nat", ["equiv"]], ["add", "def", "psigma_equiv_sigma", ["equiv"]], ["add", "def", "psum_equiv_sum", ["equiv"]], ["add", "def", "sigma_congr_left", ["equiv"]], ["add", "def", "sigma_congr_right", ["equiv"]], ["add", "def", "sigma_equiv_prod", ["equiv"]], ["add", "def", "sigma_equiv_prod_of_equiv", ["equiv"]]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "cast_add", ["int"]], ["add", "theorem", "cast_bit0", ["int"]], ["add", "theorem", "cast_bit1", ["int"]], ["add", "theorem", "cast_coe_nat", ["int"]], ["add", "theorem", "cast_eq_zero", ["int"]], ["add", "theorem", "cast_id", ["int"]], ["add", "theorem", "cast_inj", ["int"]], ["add", "theorem", "cast_le", ["int"]], ["add", "theorem", "cast_lt", ["int"]], ["add", "theorem", "cast_lt_zero", ["int"]], ["add", "theorem", "cast_mul", ["int"]], ["add", "theorem", "cast_ne_zero", ["int"]], ["add", "theorem", "cast_neg", ["int"]], ["add", "theorem", "cast_neg_of_nat", ["int"]], ["add", "theorem", "cast_neg_succ_of_nat", ["int"]], ["add", "theorem", "cast_nonneg", ["int"]], ["add", "theorem", "cast_nonpos", ["int"]], ["add", "theorem", "cast_of_nat", ["int"]], ["add", "theorem", "cast_one", ["int"]], ["add", "theorem", "cast_pos", ["int"]], ["add", "theorem", "cast_sub", ["int"]], ["add", "theorem", "cast_sub_nat_nat", ["int"]], ["add", "theorem", "cast_zero", ["int"]], ["add", "theorem", "coe_nat_dvd", ["int"]], ["del", "theorem", "coe_nat_dvd_coe_nat_iff", ["int"]], ["del", "theorem", "coe_nat_dvd_coe_nat_of_dvd", ["int"]], ["del", "theorem", "coe_nat_dvd_left", ["int"]], ["del", "theorem", "coe_nat_dvd_right", ["int"]], ["add", "theorem", "coe_nat_eq_zero", ["int"]], ["add", "theorem", "coe_nat_inj'", ["int"]], ["add", "theorem", "coe_nat_le", ["int"]], ["add", "theorem", "coe_nat_lt", ["int"]], ["add", "theorem", "coe_nat_ne_zero", ["int"]], ["add", "theorem", "coe_nat_pos", ["int"]], ["add", "theorem", "dvd_nat_abs", ["int"]], ["del", "theorem", "dvd_of_coe_nat_dvd_coe_nat", ["int"]], ["add", "theorem", "mul_cast_comm", ["int"]], ["add", "theorem", "nat_abs_dvd", ["int"]], ["add", "theorem", "nat_cast_eq_coe_nat", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "diff_cons", ["list"]], ["add", "theorem", "diff_eq_foldl", ["list"]], ["add", "theorem", "diff_nil", ["list"]], ["add", "theorem", "erase_comm", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "count_le_of_subperm", ["list"]], ["add", "theorem", "countp_le_of_subperm", ["list"]], ["add", "theorem", "exists_perm_append_of_sublist", ["list"]], ["del", "theorem", "exists_sublist_perm_of_subset_nodup", ["list"]], ["add", "theorem", "length_le_of_subperm", ["list"]], ["del", "theorem", "mem_iff_mem_of_perm", ["list"]], ["mod", "theorem", "mem_of_perm", ["list"]], ["add", "theorem", "subperm_left", ["list", "perm"]], ["add", "theorem", "subperm_right", ["list", "perm"]], ["del", "theorem", "perm_app_inv_right", ["list"]], ["add", "theorem", "perm_app_right_iff", ["list"]], ["add", "theorem", "perm_diff_left", ["list"]], ["add", "theorem", "perm_diff_right", ["list"]], ["add", "theorem", "perm_subset", ["list"]], ["add", "theorem", "antisymm", ["list", "subperm"]], ["add", "theorem", "exists_of_length_lt", ["list", "subperm"]], ["add", "theorem", "perm_of_length_le", ["list", "subperm"]], ["add", "theorem", "refl", ["list", "subperm"]], ["add", "theorem", "trans", ["list", "subperm"]], ["add", "def", "subperm", ["list"]], ["add", "theorem", "subperm_app_left", ["list"]], ["add", "theorem", "subperm_app_right", ["list"]], ["add", "theorem", "subperm_cons", ["list"]], ["add", "theorem", "subperm_of_perm", ["list"]], ["add", "theorem", "subperm_of_sublist", ["list"]], ["add", "theorem", "subperm_of_subset_nodup", ["list"]], ["add", "theorem", "subset_of_subperm", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": null, "newPath": "data/nat/cast.lean", "changes": [["add", "theorem", "cast_add", ["nat"]], ["add", "theorem", "cast_add_one", ["nat"]], ["add", "theorem", "cast_bit0", ["nat"]], ["add", "theorem", "cast_bit1", ["nat"]], ["add", "theorem", "cast_eq_zero", ["nat"]], ["add", "theorem", "cast_id", ["nat"]], ["add", "theorem", "cast_inj", ["nat"]], ["add", "theorem", "cast_le", ["nat"]], ["add", "theorem", "cast_lt", ["nat"]], ["add", "theorem", "cast_mul", ["nat"]], ["add", "theorem", "cast_ne_zero", ["nat"]], ["add", "theorem", "cast_nonneg", ["nat"]], ["add", "theorem", "cast_one", ["nat"]], ["add", "theorem", "cast_pos", ["nat"]], ["add", "theorem", "cast_pred", ["nat"]], ["add", "theorem", "cast_sub", ["nat"]], ["add", "theorem", "cast_succ", ["nat"]], ["add", "theorem", "cast_zero", ["nat"]], ["add", "theorem", "mul_cast_comm", ["nat"]]]}, {"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": [["del", "def", "of_znum", ["int"]], ["del", "def", "znum_coe", ["int"]], ["del", "def", "of_num", ["nat"]], ["del", "def", "of_pos_num", ["nat"]], ["del", "def", "nat_num_coe", ["num"]], ["mod", "def", "drec'", ["nzsnum"]], ["mod", "def", "drec'", ["snum"]], ["add", "def", "cmp", ["znum"]]]}, {"oldPath": "data/num/bitwise.lean", "newPath": "data/num/bitwise.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["del", "theorem", "add_to_nat", ["num"]], ["add", "theorem", "cast_add", ["num"]], ["add", "theorem", "cast_cmp'", ["num"]], ["add", "theorem", "cast_cmp", ["num"]], ["add", "theorem", "cast_inj", ["num"]], ["add", "theorem", "cast_le", ["num"]], ["add", "theorem", "cast_lt", ["num"]], ["add", "theorem", "cast_mul", ["num"]], ["add", "theorem", "cast_one", ["num"]], ["add", "theorem", "cast_succ'", ["num"]], ["add", "theorem", "cast_succ", ["num"]], ["add", "theorem", "cast_zero", ["num"]], ["del", "theorem", "cmp_dec", ["num"]], ["add", "theorem", "cmp_eq", ["num"]], ["mod", "theorem", "lt_iff_cmp", ["num"]], ["del", "theorem", "mul_to_nat", ["num"]], ["del", "theorem", "one_to_nat", ["num"]], ["del", "theorem", "succ'_to_nat", ["num"]], ["del", "theorem", "succ_to_nat", ["num"]], ["del", "theorem", "zero_to_nat", ["num"]], ["del", "theorem", "add_to_nat", ["pos_num"]], ["add", "theorem", "cast_add", ["pos_num"]], ["add", "theorem", "cast_add_comm", ["pos_num"]], ["add", "theorem", "cast_add_comm_lemma_1", ["pos_num"]], ["add", "theorem", "cast_add_comm_lemma_2", ["pos_num"]], ["add", "theorem", "cast_add_one_comm", ["pos_num"]], ["add", "theorem", "cast_cmp'", ["pos_num"]], ["add", "theorem", "cast_cmp", ["pos_num"]], ["add", "theorem", "cast_inj", ["pos_num"]], ["add", "theorem", "cast_le", ["pos_num"]], ["add", "theorem", "cast_lt", ["pos_num"]], ["add", "theorem", "cast_mul", ["pos_num"]], ["add", "theorem", "cast_one", ["pos_num"]], ["add", "theorem", "cast_pos", ["pos_num"]], ["add", "theorem", "cast_succ", ["pos_num"]], ["del", "theorem", "cmp_dec", ["pos_num"]], ["del", "theorem", "cmp_dec_theorem", ["pos_num"]], ["add", "theorem", "cmp_eq", ["pos_num"]], ["mod", "theorem", "lt_iff_cmp", ["pos_num"]], ["del", "theorem", "mul_to_nat", ["pos_num"]], ["add", "theorem", "one_le_cast", ["pos_num"]], ["del", "theorem", "one_to_nat", ["pos_num"]], ["del", "theorem", "succ_to_nat", ["pos_num"]], ["mod", "theorem", "to_nat_inj", ["pos_num"]], ["del", "theorem", "to_nat_pos", ["pos_num"]], ["add", "theorem", "cast_one", ["znum"]], ["add", "theorem", "cast_zero", ["znum"]]]}, {"oldPath": "data/num/norm_num.lean", "newPath": null, "changes": [["del", "theorem", "bit0_le_one", ["norm_num"]], ["del", "theorem", "bit0_le_zero", ["norm_num"]], ["del", "theorem", "bit1_le_bit0", ["norm_num"]], ["del", "theorem", "bit1_le_one", ["norm_num"]], ["del", "theorem", "bit1_le_zero", ["norm_num"]], ["del", "theorem", "one_le_bit0", ["norm_num"]], ["del", "theorem", "one_le_bit1", ["norm_num"]], ["del", "theorem", "one_le_one", ["norm_num"]], ["del", "theorem", "pow_bit0", ["norm_num"]], ["del", "theorem", "pow_bit0_helper", ["norm_num"]], ["del", "theorem", "pow_bit1", ["norm_num"]], ["del", "theorem", "pow_bit1_helper", ["norm_num"]], ["del", "theorem", "pow_eq_pow_nat", ["norm_num"]], ["del", "theorem", "pow_eq_pow_nat_helper", ["norm_num"]], ["del", "theorem", "pow_one", ["norm_num"]], ["del", "theorem", "pow_zero", ["norm_num"]], ["del", "theorem", "zero_le_bit0", ["norm_num"]], ["del", "theorem", "zero_le_bit1", ["norm_num"]], ["del", "theorem", "zero_le_one", ["norm_num"]], ["del", "theorem", "zero_le_zero", ["norm_num"]], ["del", "def", "add1", ["num"]], ["del", "def", "add_n", ["num"]], ["del", "theorem", "bit0_le_bit0", ["num"]], ["del", "theorem", "denote_add1", ["num"]], ["del", "theorem", "denote_le_denote_of_num_le", ["num"]], ["del", "theorem", "denote_le_denote_of_pos_num_le", ["num"]], ["del", "theorem", "denote_le_denote_of_znum_le", ["num"]], ["del", "def", "num_le", ["num"]], ["del", "theorem", "one_le_denote", ["num"]], ["del", "def", "pos_le", ["num"]], ["del", "theorem", "zero_le_denote", ["num"]], ["del", "def", "znum_le", ["num"]], ["del", "inductive", "denotation", ["tactic", "interactive"]], ["del", "def", "to_neg", ["tactic", "interactive", "znum"]], ["del", "def", "to_pos", ["tactic", "interactive", "znum"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "bind_eq_some", ["option"]], ["add", "theorem", "bind_none", ["option"]], ["mod", "theorem", "bind_some", ["option"]], ["mod", "def", "filter", ["option"]], ["mod", "def", "guard", ["option"]], ["mod", "theorem", "guard_eq_some", ["option"]], ["mod", "def", "iget", ["option"]], ["add", "theorem", "is_some_iff_exists", ["option"]], ["add", "theorem", "map_eq_some", ["option"]], ["add", "theorem", "map_none", ["option"]], ["add", "theorem", "map_some", ["option"]], ["mod", "theorem", "mem_def", ["option"]], ["add", "theorem", "none_ne_some", ["option"]], ["mod", "theorem", "some_inj", ["option"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["del", "def", "linear_order_cases_on", []], ["del", "theorem", "linear_order_cases_on_eq", []], ["del", "theorem", "linear_order_cases_on_gt", []], ["del", "theorem", "linear_order_cases_on_lt", []], ["del", "theorem", "mul_nonneg_iff_right_nonneg_of_pos", []], ["add", "theorem", "cast_add", ["rat"]], ["add", "theorem", "cast_add_of_ne_zero", ["rat"]], ["add", "theorem", "cast_bit0", ["rat"]], ["add", "theorem", "cast_bit1", ["rat"]], ["add", "theorem", "cast_coe_int", ["rat"]], ["add", "theorem", "cast_coe_nat", ["rat"]], ["add", "theorem", "cast_eq_zero", ["rat"]], ["add", "theorem", "cast_id", ["rat"]], ["add", "theorem", "cast_inj", ["rat"]], ["add", "theorem", "cast_le", ["rat"]], ["add", "theorem", "cast_lt", ["rat"]], ["add", "theorem", "cast_lt_zero", ["rat"]], ["add", "theorem", "cast_mk", ["rat"]], ["add", "theorem", "cast_mk_of_ne_zero", ["rat"]], ["add", "theorem", "cast_mul", ["rat"]], ["add", "theorem", "cast_mul_of_ne_zero", ["rat"]], ["add", "theorem", "cast_ne_zero", ["rat"]], ["add", "theorem", "cast_neg", ["rat"]], ["add", "theorem", "cast_nonneg", ["rat"]], ["add", "theorem", "cast_nonpos", ["rat"]], ["add", "theorem", "cast_of_int", ["rat"]], ["add", "theorem", "cast_one", ["rat"]], ["add", "theorem", "cast_pos", ["rat"]], ["add", "theorem", "cast_sub", ["rat"]], ["add", "theorem", "cast_sub_of_ne_zero", ["rat"]], ["add", "theorem", "cast_zero", ["rat"]], ["del", "theorem", "coe_int_add", ["rat"]], ["mod", "theorem", "coe_int_eq_mk", ["rat"]], ["add", "theorem", "coe_int_eq_of_int", ["rat"]], ["del", "theorem", "coe_int_inj", ["rat"]], ["del", "theorem", "coe_int_le", ["rat"]], ["del", "theorem", "coe_int_lt", ["rat"]], ["del", "theorem", "coe_int_mul", ["rat"]], ["del", "theorem", "coe_int_neg", ["rat"]], ["del", "theorem", "coe_int_one", ["rat"]], ["del", "theorem", "coe_int_sub", ["rat"]], ["del", "theorem", "coe_nat_rat_eq_mk", ["rat"]], ["add", "theorem", "denom_dvd", ["rat"]], ["add", "theorem", "mk_eq_div", ["rat"]], ["add", "theorem", "mul_cast_comm", ["rat"]], ["add", "theorem", "num_dvd", ["rat"]], ["add", "theorem", "of_int_eq_mk", ["rat"]]]}, {"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": []}, {"oldPath": "meta/expr.lean", "newPath": null, "changes": []}]}, {"timestamp": 1508198523, "sha": "2e7651aa", "message": "feat(data/num): add tactics for evaluating arithmetic expressions made of literals, including `x \\le y` and `x ^ y`", "changes": [{"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": [["add", "def", "cast_znum", []], ["add", "def", "znum_coe", ["int"]], ["add", "def", "nat_num_coe", ["num"]]]}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": null, "newPath": "data/num/norm_num.lean", "changes": [["add", "theorem", "bit0_le_one", ["norm_num"]], ["add", "theorem", "bit0_le_zero", ["norm_num"]], ["add", "theorem", "bit1_le_bit0", ["norm_num"]], ["add", "theorem", "bit1_le_one", ["norm_num"]], ["add", "theorem", "bit1_le_zero", ["norm_num"]], ["add", "theorem", "one_le_bit0", ["norm_num"]], ["add", "theorem", "one_le_bit1", ["norm_num"]], ["add", "theorem", "one_le_one", ["norm_num"]], ["add", "theorem", "pow_bit0", ["norm_num"]], ["add", "theorem", "pow_bit0_helper", ["norm_num"]], ["add", "theorem", "pow_bit1", ["norm_num"]], ["add", "theorem", "pow_bit1_helper", ["norm_num"]], ["add", "theorem", "pow_eq_pow_nat", ["norm_num"]], ["add", "theorem", "pow_eq_pow_nat_helper", ["norm_num"]], ["add", "theorem", "pow_one", ["norm_num"]], ["add", "theorem", "pow_zero", ["norm_num"]], ["add", "theorem", "zero_le_bit0", ["norm_num"]], ["add", "theorem", "zero_le_bit1", ["norm_num"]], ["add", "theorem", "zero_le_one", ["norm_num"]], ["add", "theorem", "zero_le_zero", ["norm_num"]], ["add", "def", "add1", ["num"]], ["add", "def", "add_n", ["num"]], ["add", "theorem", "bit0_le_bit0", ["num"]], ["add", "theorem", "denote_add1", ["num"]], ["add", "theorem", "denote_le_denote_of_num_le", ["num"]], ["add", "theorem", "denote_le_denote_of_pos_num_le", ["num"]], ["add", "theorem", "denote_le_denote_of_znum_le", ["num"]], ["add", "def", "num_le", ["num"]], ["add", "theorem", "one_le_denote", ["num"]], ["add", "def", "pos_le", ["num"]], ["add", "theorem", "zero_le_denote", ["num"]], ["add", "def", "znum_le", ["num"]], ["add", "inductive", "denotation", ["tactic", "interactive"]], ["add", "def", "to_neg", ["tactic", "interactive", "znum"]], ["add", "def", "to_pos", ["tactic", "interactive", "znum"]]]}, {"oldPath": null, "newPath": "meta/expr.lean", "changes": []}]}, {"timestamp": 1508034384, "sha": "5ad8020f", "message": "Merge remote-tracking branch 'minchaowu/master'", "changes": [{"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_subset_iff", ["set"]], ["del", "theorem", "image_subset_iff_subset_preimage", ["set"]], ["add", "theorem", "inter_preimage_subset", ["set"]], ["add", "theorem", "preimage_diff", ["set"]], ["add", "theorem", "subset_image_union", ["set"]], ["add", "theorem", "union_preimage_subset", ["set"]]]}, {"oldPath": null, "newPath": "data/set/function.lean", "changes": [["add", "theorem", "mk", ["set", "bij_on"]], ["add", "def", "bij_on", ["set"]], ["add", "theorem", "bij_on_comp", ["set"]], ["add", "theorem", "bij_on_of_eq_on", ["set"]], ["add", "theorem", "bij_on_of_inv_on", ["set"]], ["add", "theorem", "bijective_iff_bij_on_univ", ["set"]], ["add", "theorem", "eq_on_of_left_inv_of_right_inv", ["set"]], ["add", "theorem", "image_eq_of_bij_on", ["set"]], ["add", "theorem", "image_eq_of_maps_to_of_surj_on", ["set"]], ["add", "theorem", "image_subset_of_maps_to", ["set"]], ["add", "theorem", "image_subset_of_maps_to_of_subset", ["set"]], ["add", "def", "inj_on", ["set"]], ["add", "theorem", "inj_on_comp", ["set"]], ["add", "theorem", "inj_on_empty", ["set"]], ["add", "theorem", "inj_on_of_bij_on", ["set"]], ["add", "theorem", "inj_on_of_eq_on", ["set"]], ["add", "theorem", "inj_on_of_inj_on_of_subset", ["set"]], ["add", "theorem", "inj_on_of_left_inv_on", ["set"]], ["add", "theorem", "injective_iff_inj_on_univ", ["set"]], ["add", "def", "inv_on", ["set"]], ["add", "def", "left_inv_on", ["set"]], ["add", "theorem", "left_inv_on_comp", ["set"]], ["add", "theorem", "left_inv_on_of_eq_on_left", ["set"]], ["add", "theorem", "left_inv_on_of_eq_on_right", ["set"]], ["add", "theorem", "left_inv_on_of_surj_on_right_inv_on", ["set"]], ["add", "def", "maps_to", ["set"]], ["add", "theorem", "maps_to_comp", ["set"]], ["add", "theorem", "maps_to_of_bij_on", ["set"]], ["add", "theorem", "maps_to_of_eq_on", ["set"]], ["add", "theorem", "maps_to_univ_univ", ["set"]], ["add", "def", "right_inv_on", ["set"]], ["add", "theorem", "right_inv_on_comp", ["set"]], ["add", "theorem", "right_inv_on_of_eq_on_left", ["set"]], ["add", "theorem", "right_inv_on_of_eq_on_right", ["set"]], ["add", "theorem", "right_inv_on_of_inj_on_of_left_inv_on", ["set"]], ["add", "def", "surj_on", ["set"]], ["add", "theorem", "surj_on_comp", ["set"]], ["add", "theorem", "surj_on_of_bij_on", ["set"]], ["add", "theorem", "surj_on_of_eq_on", ["set"]], ["add", "theorem", "surj_on_of_right_inv_on", ["set"]], ["add", "theorem", "surjective_iff_surj_on_univ", ["set"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/galois_connection.lean", "newPath": "order/galois_connection.lean", "changes": []}]}, {"timestamp": 1508032738, "sha": "8f4327ae", "message": "feat(*): working on list/basic, robusting simp proofs", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_repeat", ["list"]], ["del", "theorem", "prod_replicate", ["list"]]]}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "neg_inv", ["division_ring"]]]}, {"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "lt_max_iff", []]]}, {"oldPath": "analysis/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "analysis/limits.lean", "newPath": "analysis/limits.lean", "changes": []}, {"oldPath": "analysis/measure_theory/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/measure_space.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "analysis/measure_theory/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "analysis/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "analysis/of_nat.lean", "newPath": "analysis/of_nat.lean", "changes": []}, {"oldPath": "analysis/real.lean", "newPath": "analysis/real.lean", "changes": [["add", "theorem", "of_rat_inj", []], ["add", "theorem", "of_rat_injective", []], ["add", "theorem", "of_rat_lt", []], ["del", "theorem", "of_rat_lt_of_rat", []]]}, {"oldPath": "analysis/topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "analysis/topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": []}, {"oldPath": "analysis/topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "analysis/topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "analysis/topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["del", "theorem", "band_eq_ff", ["bool"]], ["del", "theorem", "band_eq_tt", ["bool"]], ["del", "theorem", "band_ff", ["bool"]], ["del", "theorem", "band_self", ["bool"]], ["del", "theorem", "band_tt", ["bool"]], ["del", "theorem", "bnot_bnot", ["bool"]], ["del", "theorem", "bor_eq_ff", ["bool"]], ["del", "theorem", "bor_eq_tt", ["bool"]], ["del", "theorem", "bor_ff", ["bool"]], ["mod", "theorem", "bor_inl", ["bool"]], ["mod", "theorem", "bor_inr", ["bool"]], ["del", "theorem", "bor_tt", ["bool"]], ["del", "def", "bxor", ["bool"]], ["del", "theorem", "bxor_ff", ["bool"]], ["del", "theorem", "bxor_self", ["bool"]], ["del", "theorem", "bxor_tt", ["bool"]], ["add", "theorem", "coe_sort_ff", ["bool"]], ["add", "theorem", "coe_sort_tt", ["bool"]], ["del", "theorem", "coe_tt", ["bool"]], ["del", "theorem", "ff_band", ["bool"]], ["del", "theorem", "ff_bor", ["bool"]], ["del", "theorem", "ff_bxor", ["bool"]], ["del", "theorem", "ff_bxor_ff", ["bool"]], ["del", "theorem", "ff_bxor_tt", ["bool"]], ["del", "theorem", "or_of_bor_eq", ["bool"]], ["add", "theorem", "to_bool_bool", ["bool"]], ["add", "theorem", "to_bool_false", ["bool"]], ["add", "theorem", "to_bool_true", ["bool"]], ["del", "theorem", "tt_band", ["bool"]], ["del", "theorem", "tt_bor", ["bool"]], ["del", "theorem", "tt_bxor", ["bool"]], ["del", "theorem", "tt_bxor_ff", ["bool"]], ["del", "theorem", "tt_bxor_tt", ["bool"]]]}, {"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["add", "theorem", "encode_injective", []]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "def", "list_equiv_of_equiv", ["equiv"]], ["add", "def", "list_equiv_self_of_equiv_nat", ["equiv"]], ["add", "def", "list_nat_equiv_nat", ["equiv"]]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["add", "theorem", "card_range", ["finset"]], ["del", "theorem", "card_upto", ["finset"]], ["add", "theorem", "exists_mem_insert", ["finset"]], ["del", "theorem", "exists_mem_insert_iff", ["finset"]], ["add", "theorem", "exists_nat_subset_range", ["finset"]], ["del", "theorem", "exists_nat_subset_upto", ["finset"]], ["add", "theorem", "forall_mem_insert", ["finset"]], ["del", "theorem", "forall_mem_insert_iff", ["finset"]], ["del", "theorem", "lt_of_mem_upto", ["finset"]], ["del", "theorem", "mem_empty_iff", ["finset"]], ["add", "theorem", "mem_erase", ["finset"]], ["del", "theorem", "mem_erase_iff", ["finset"]], ["add", "theorem", "mem_filter", ["finset"]], ["del", "theorem", "mem_filter_iff", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["del", "theorem", "mem_insert_iff", ["finset"]], ["add", "theorem", "mem_insert_self", ["finset"]], ["mod", "theorem", "mem_inter", ["finset"]], ["del", "theorem", "mem_inter_iff", ["finset"]], ["add", "theorem", "mem_inter_of_mem", ["finset"]], ["mod", "theorem", "mem_list_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_list", ["finset"]], ["add", "theorem", "mem_range", ["finset"]], ["mod", "theorem", "mem_sdiff_iff", ["finset"]], ["mod", "theorem", "mem_singleton_self", ["finset"]], ["mod", "theorem", "mem_to_finset", ["finset"]], ["del", "theorem", "mem_to_finset_iff", ["finset"]], ["add", "theorem", "mem_to_finset_of_mem", ["finset"]], ["add", "theorem", "mem_union", ["finset"]], ["del", "theorem", "mem_union_iff", ["finset"]], ["del", "theorem", "mem_upto_iff", ["finset"]], ["del", "theorem", "mem_upto_of_lt", ["finset"]], ["del", "theorem", "mem_upto_succ_of_mem_upto", ["finset"]], ["mod", "theorem", "not_mem_empty", ["finset"]], ["add", "theorem", "not_mem_range_self", ["finset"]], ["del", "theorem", "not_mem_upto", ["finset"]], ["add", "def", "range", ["finset"]], ["add", "theorem", "range_subset", ["finset"]], ["add", "theorem", "range_succ", ["finset"]], ["add", "theorem", "range_zero", ["finset"]], ["del", "def", "upto", ["finset"]], ["del", "theorem", "upto_subset_upto_iff", ["finset"]], ["del", "theorem", "upto_succ", ["finset"]], ["del", "theorem", "upto_zero", ["finset"]], ["del", "theorem", "lt_max_iff", []]]}, {"oldPath": "data/finset/fold.lean", "newPath": "data/finset/fold.lean", "changes": [["del", "theorem", "heq_iff_eq", []]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": [["mod", "theorem", "mem_as_list", ["bucket_array"]], ["mod", "theorem", "contains_aux_iff", ["hash_map"]], ["mod", "theorem", "find_aux_iff", ["hash_map"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "all_cons", ["list"]], ["add", "theorem", "all_iff_forall", ["list"]], ["add", "theorem", "all_iff_forall_prop", ["list"]], ["add", "theorem", "all_nil", ["list"]], ["add", "theorem", "any_cons", ["list"]], ["add", "theorem", "any_iff_exists", ["list"]], ["add", "theorem", "any_iff_exists_prop", ["list"]], ["add", "theorem", "any_nil", ["list"]], ["add", "theorem", "any_of_mem", ["list"]], ["add", "theorem", "append_inj'", ["list"]], ["add", "theorem", "append_inj_left'", ["list"]], ["add", "theorem", "append_inj_right'", ["list"]], ["add", "theorem", "append_left_cancel", ["list"]], ["add", "theorem", "append_right_cancel", ["list"]], ["del", "theorem", "append_right_inj", ["list"]], ["add", "theorem", "append_sublist_append_left", ["list"]], ["add", "theorem", "append_sublist_append_of_sublist_right", ["list"]], ["add", "theorem", "append_sublist_append_right", ["list"]], ["add", "theorem", "iff", ["list", "chain"]], ["add", "theorem", "iff_mem", ["list", "chain"]], ["add", "theorem", "imp", ["list", "chain"]], ["add", "inductive", "chain", ["list"]], ["add", "theorem", "chain_cons", ["list"]], ["add", "theorem", "chain_iff_pairwise", ["list"]], ["add", "theorem", "chain_lt_range'", ["list"]], ["add", "theorem", "chain_map", ["list"]], ["add", "theorem", "chain_map_of_chain", ["list"]], ["add", "theorem", "chain_of_chain_cons", ["list"]], ["add", "theorem", "chain_of_chain_map", ["list"]], ["add", "theorem", "chain_of_pairwise", ["list"]], ["add", "theorem", "chain_singleton", ["list"]], ["add", "theorem", "chain_split", ["list"]], ["add", "theorem", "chain_succ_range'", ["list"]], ["mod", "def", "concat", ["list"]], ["mod", "theorem", "concat_eq_append", ["list"]], ["add", "theorem", "cons_inj'", ["list"]], ["mod", "theorem", "cons_inj", ["list"]], ["add", "theorem", "cons_sublist_cons_iff", ["list"]], ["add", "theorem", "cons_union", ["list"]], ["mod", "def", "count", ["list"]], ["mod", "theorem", "count_append", ["list"]], ["add", "theorem", "count_eq_one_of_mem", ["list"]], ["add", "theorem", "count_le_of_sublist", ["list"]], ["add", "theorem", "count_pos", ["list"]], ["mod", "theorem", "count_pos_of_mem", ["list"]], ["add", "theorem", "count_repeat", ["list"]], ["add", "def", "countp", ["list"]], ["add", "theorem", "countp_append", ["list"]], ["add", "theorem", "countp_cons_of_neg", ["list"]], ["add", "theorem", "countp_cons_of_pos", ["list"]], ["add", "theorem", "countp_eq_length_filter", ["list"]], ["add", "theorem", "countp_le_of_sublist", ["list"]], ["add", "theorem", "countp_nil", ["list"]], ["add", "theorem", "countp_pos_of_mem", ["list"]], ["add", "theorem", "symm", ["list", "disjoint"]], ["add", "def", "disjoint", ["list"]], ["add", "theorem", "disjoint_append_left", ["list"]], ["add", "theorem", "disjoint_append_of_disjoint_left", ["list"]], ["add", "theorem", "disjoint_append_right", ["list"]], ["add", "theorem", "disjoint_comm", ["list"]], ["add", "theorem", "disjoint_cons_left", ["list"]], ["add", "theorem", "disjoint_cons_right", ["list"]], ["add", "theorem", "disjoint_iff_ne", ["list"]], ["add", "theorem", "disjoint_left", ["list"]], ["add", "theorem", "disjoint_nil_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_left_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_left_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_right_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_right_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_cons_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_cons_right", ["list"]], ["add", "theorem", "disjoint_of_nodup_append", ["list"]], ["add", "theorem", "disjoint_of_subset_left", ["list"]], ["add", "theorem", "disjoint_of_subset_right", ["list"]], ["add", "theorem", "disjoint_right", ["list"]], ["add", "theorem", "disjoint_singleton", ["list"]], ["add", "theorem", "eq_nil_iff_forall_not_mem", ["list"]], ["mod", "theorem", "eq_nil_of_infix_nil", ["list"]], ["mod", "theorem", "eq_nil_of_prefix_nil", ["list"]], ["mod", "theorem", "eq_nil_of_suffix_nil", ["list"]], ["add", "theorem", "eq_of_infix_of_length_eq", ["list"]], ["del", "theorem", "eq_of_map_const", ["list"]], ["add", "theorem", "eq_of_mem_map_const", ["list"]], ["add", "theorem", "eq_of_mem_repeat", ["list"]], ["add", "theorem", "eq_of_mem_singleton", ["list"]], ["add", "theorem", "eq_of_prefix_of_length_eq", ["list"]], ["add", "theorem", "eq_of_sublist_of_length_eq", ["list"]], ["add", "theorem", "eq_of_suffix_of_length_eq", ["list"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["list"]], ["add", "theorem", "eq_repeat'", ["list"]], ["add", "theorem", "eq_repeat", ["list"]], ["add", "theorem", "eq_repeat_of_mem", ["list"]], ["add", "theorem", "erase_append_left", ["list"]], ["add", "theorem", "erase_append_right", ["list"]], ["add", "theorem", "erase_cons", ["list"]], ["add", "theorem", "erase_cons_head", ["list"]], ["add", "theorem", "erase_cons_tail", ["list"]], ["add", "def", "erase_dup", ["list"]], ["add", "theorem", "erase_dup_append", ["list"]], ["add", "theorem", "erase_dup_cons_of_mem'", ["list"]], ["add", "theorem", "erase_dup_cons_of_mem", ["list"]], ["add", "theorem", "erase_dup_cons_of_not_mem'", ["list"]], ["add", "theorem", "erase_dup_cons_of_not_mem", ["list"]], ["add", "theorem", "erase_dup_eq_self", ["list"]], ["add", "theorem", "erase_dup_nil", ["list"]], ["add", "theorem", "erase_dup_sublist", ["list"]], ["add", "theorem", "erase_dup_subset", ["list"]], ["add", "theorem", "erase_nil", ["list"]], ["add", "theorem", "erase_of_not_mem", ["list"]], ["add", "theorem", "erase_sublist", ["list"]], ["add", "theorem", "erase_subset", ["list"]], ["add", "theorem", "exists_erase_eq", ["list"]], ["add", "theorem", "exists_mem_cons_iff", ["list"]], ["add", "theorem", "exists_mem_cons_of", ["list"]], ["add", "theorem", "exists_mem_cons_of_exists", ["list"]], ["add", "theorem", "exists_mem_of_countp_pos", ["list"]], ["add", "theorem", "exists_mem_of_length_pos", ["list"]], ["mod", "theorem", "exists_of_mem_bind", ["list"]], ["add", "theorem", "filter_eq_nil", ["list"]], ["add", "theorem", "filter_eq_self", ["list"]], ["add", "theorem", "filter_filter_map", ["list"]], ["add", "theorem", "filter_map_cons_none", ["list"]], ["add", "theorem", "filter_map_cons_some", ["list"]], ["add", "theorem", "filter_map_eq_filter", ["list"]], ["add", "theorem", "filter_map_eq_map", ["list"]], ["add", "theorem", "filter_map_filter", ["list"]], ["add", "theorem", "filter_map_filter_map", ["list"]], ["add", "theorem", "filter_map_map", ["list"]], ["add", "theorem", "filter_map_nil", ["list"]], ["add", "theorem", "filter_map_some", ["list"]], ["add", "theorem", "filter_map_sublist_filter_map", ["list"]], ["add", "theorem", "filter_sublist_filter", ["list"]], ["mod", "theorem", "filter_subset", ["list"]], ["mod", "def", "find", ["list"]], ["add", "theorem", "find_cons_of_neg", ["list"]], ["add", "theorem", "find_cons_of_pos", ["list"]], ["add", "theorem", "find_eq_none", ["list"]], ["add", "theorem", "find_mem", ["list"]], ["add", "theorem", "find_nil", ["list"]], ["add", "theorem", "find_some", ["list"]], ["add", "theorem", "foldl1_eq_foldr1", ["list"]], ["add", "theorem", "foldl_append", ["list"]], ["add", "theorem", "foldl_cons", ["list"]], ["add", "theorem", "foldl_eq_foldr", ["list"]], ["add", "theorem", "foldl_eq_of_comm_of_assoc", ["list"]], ["add", "theorem", "foldl_nil", ["list"]], ["add", "theorem", "foldl_reverse", ["list"]], ["add", "theorem", "foldr_append", ["list"]], ["add", "theorem", "foldr_cons", ["list"]], ["mod", "theorem", "foldr_eta", ["list"]], ["add", "theorem", "foldr_nil", ["list"]], ["add", "theorem", "foldr_reverse", ["list"]], ["add", "theorem", "forall_mem_cons'", ["list"]], ["add", "theorem", "forall_mem_cons", ["list"]], ["add", "theorem", "forall_mem_inter_of_forall_left", ["list"]], ["add", "theorem", "forall_mem_inter_of_forall_right", ["list"]], ["add", "theorem", "forall_mem_ne", ["list"]], ["add", "theorem", "forall_mem_nil", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_cons", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_union_left", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_union_right", ["list"]], ["add", "theorem", "forall_mem_pw_filter", ["list"]], ["add", "theorem", "forall_mem_union", ["list"]], ["mod", "theorem", "head_eq_of_cons_eq", ["list"]], ["mod", "theorem", "infix_append", ["list"]], ["mod", "theorem", "infix_iff_prefix_suffix", ["list"]], ["mod", "theorem", "infix_of_prefix", ["list"]], ["mod", "theorem", "infix_of_suffix", ["list"]], ["mod", "theorem", "infix_refl", ["list"]], ["mod", "def", "inits", ["list"]], ["add", "theorem", "def", ["list", "insert"]], ["add", "theorem", "insert_nil", ["list"]], ["add", "theorem", "insert_of_mem", ["list"]], ["add", "theorem", "insert_of_not_mem", ["list"]], ["add", "theorem", "inter_cons_of_mem", ["list"]], ["add", "theorem", "inter_cons_of_not_mem", ["list"]], ["add", "theorem", "inter_eq_nil_iff_disjoint", ["list"]], ["add", "theorem", "inter_nil", ["list"]], ["add", "theorem", "inter_subset_left", ["list"]], ["add", "theorem", "inter_subset_right", ["list"]], ["mod", "def", "inth", ["list"]], ["add", "theorem", "iota_eq_reverse_range'", ["list"]], ["add", "theorem", "trans", ["list", "is_infix"]], ["add", "theorem", "trans", ["list", "is_prefix"]], ["add", "theorem", "trans", ["list", "is_suffix"]], ["add", "theorem", "le_count_iff_repeat_sublist", ["list"]], ["mod", "theorem", "length_concat", ["list"]], ["add", "theorem", "length_erase_of_mem", ["list"]], ["add", "theorem", "length_insert_of_mem", ["list"]], ["add", "theorem", "length_insert_of_not_mem", ["list"]], ["add", "theorem", "length_iota", ["list"]], ["mod", "theorem", "length_le_of_infix", ["list"]], ["add", "theorem", "length_product", ["list"]], ["add", "theorem", "length_range'", ["list"]], ["add", "theorem", "length_range", ["list"]], ["mod", "theorem", "map_concat", ["list"]], ["add", "theorem", "map_const", ["list"]], ["add", "theorem", "map_filter_map", ["list"]], ["add", "theorem", "map_filter_map_of_inv", ["list"]], ["add", "theorem", "map₂_nil", ["list"]], ["mod", "theorem", "mem_bind", ["list"]], ["del", "theorem", "mem_bind_iff", ["list"]], ["add", "theorem", "mem_bind_of_mem", ["list"]], ["add", "theorem", "mem_erase_dup", ["list"]], ["add", "theorem", "mem_erase_iff_of_nodup", ["list"]], ["add", "theorem", "mem_erase_of_ne_of_mem", ["list"]], ["add", "theorem", "mem_erase_of_nodup", ["list"]], ["add", "theorem", "mem_filter", ["list"]], ["del", "theorem", "mem_filter_iff", ["list"]], ["add", "theorem", "mem_filter_map", ["list"]], ["mod", "theorem", "mem_filter_of_mem", ["list"]], ["del", "theorem", "mem_iff_count_pos", ["list"]], ["mod", "theorem", "mem_inits", ["list"]], ["add", "theorem", "mem_insert_iff", ["list"]], ["add", "theorem", "mem_insert_of_mem", ["list"]], ["add", "theorem", "mem_insert_self", ["list"]], ["add", "theorem", "mem_inter", ["list"]], ["add", "theorem", "mem_inter_of_mem_of_mem", ["list"]], ["add", "theorem", "mem_iota", ["list"]], ["mod", "theorem", "mem_join", ["list"]], ["del", "theorem", "mem_join_iff", ["list"]], ["add", "theorem", "mem_join_of_mem", ["list"]], ["mod", "theorem", "mem_map", ["list"]], ["del", "theorem", "mem_map_iff", ["list"]], ["add", "theorem", "mem_map_of_inj", ["list"]], ["add", "theorem", "mem_map_of_mem", ["list"]], ["mod", "theorem", "mem_of_count_pos", ["list"]], ["add", "theorem", "mem_of_mem_erase", ["list"]], ["mod", "theorem", "mem_of_mem_filter", ["list"]], ["add", "theorem", "mem_of_mem_inter_left", ["list"]], ["add", "theorem", "mem_of_mem_inter_right", ["list"]], ["add", "theorem", "mem_product", ["list"]], ["add", "theorem", "mem_range'", ["list"]], ["add", "theorem", "mem_range", ["list"]], ["mod", "theorem", "mem_reverse", ["list"]], ["mod", "theorem", "mem_singleton", ["list"]], ["del", "theorem", "mem_singleton_iff", ["list"]], ["add", "theorem", "mem_singleton_self", ["list"]], ["mod", "theorem", "mem_split", ["list"]], ["mod", "theorem", "mem_sublists", ["list"]], ["mod", "theorem", "mem_tails", ["list"]], ["add", "theorem", "mem_union", ["list"]], ["add", "theorem", "mem_union_left", ["list"]], ["add", "theorem", "mem_union_right", ["list"]], ["add", "theorem", "nil_map₂", ["list"]], ["add", "theorem", "nil_product", ["list"]], ["add", "theorem", "nil_union", ["list"]], ["add", "def", "nodup", ["list"]], ["add", "theorem", "nodup_app_comm", ["list"]], ["add", "theorem", "nodup_append", ["list"]], ["add", "theorem", "nodup_append_of_nodup", ["list"]], ["add", "theorem", "nodup_bind", ["list"]], ["add", "theorem", "nodup_concat", ["list"]], ["add", "theorem", "nodup_cons", ["list"]], ["add", "theorem", "nodup_cons_of_nodup", ["list"]], ["add", "theorem", "nodup_erase_dup", ["list"]], ["add", "theorem", "nodup_erase_eq_filter", ["list"]], ["add", "theorem", "nodup_erase_of_nodup", ["list"]], ["add", "theorem", "nodup_filter", ["list"]], ["add", "theorem", "nodup_filter_map", ["list"]], ["add", "theorem", "nodup_iff_count_le_one", ["list"]], ["add", "theorem", "nodup_iff_sublist", ["list"]], ["add", "theorem", "nodup_insert", ["list"]], ["add", "theorem", "nodup_inter_of_nodup", ["list"]], ["add", "theorem", "nodup_iota", ["list"]], ["add", "theorem", "nodup_join", ["list"]], ["add", "theorem", "nodup_map", ["list"]], ["add", "theorem", "nodup_map_on", ["list"]], ["add", "theorem", "nodup_middle", ["list"]], ["add", "theorem", "nodup_nil", ["list"]], ["add", "theorem", "nodup_of_nodup_append_left", ["list"]], ["add", "theorem", "nodup_of_nodup_append_right", ["list"]], ["add", "theorem", "nodup_of_nodup_cons", ["list"]], ["add", "theorem", "nodup_of_nodup_map", ["list"]], ["add", "theorem", "nodup_of_sublist", ["list"]], ["add", "theorem", "nodup_product", ["list"]], ["add", "theorem", "nodup_range'", ["list"]], ["add", "theorem", "nodup_range", ["list"]], ["add", "theorem", "nodup_reverse", ["list"]], ["add", "theorem", "nodup_singleton", ["list"]], ["add", "theorem", "nodup_union", ["list"]], ["add", "theorem", "not_exists_mem_nil", ["list"]], ["mod", "theorem", "not_mem_append", ["list"]], ["add", "theorem", "not_mem_of_nodup_cons", ["list"]], ["add", "theorem", "not_mem_range_self", ["list"]], ["add", "theorem", "not_nodup_cons_of_mem", ["list"]], ["add", "theorem", "not_nodup_pair", ["list"]], ["mod", "theorem", "of_mem_filter", ["list"]], ["add", "theorem", "or_exists_of_exists_mem_cons", ["list"]], ["add", "theorem", "iff", ["list", "pairwise"]], ["add", "theorem", "iff_mem", ["list", "pairwise"]], ["add", "theorem", "imp", ["list", "pairwise"]], ["add", "inductive", "pairwise", ["list"]], ["add", "theorem", "pairwise_app_comm", ["list"]], ["add", "theorem", "pairwise_append", ["list"]], ["add", "theorem", "pairwise_cons", ["list"]], ["add", "theorem", "pairwise_filter", ["list"]], ["add", "theorem", "pairwise_filter_map", ["list"]], ["add", "theorem", "pairwise_filter_map_of_pairwise", ["list"]], ["add", "theorem", "pairwise_filter_of_pairwise", ["list"]], ["add", "theorem", "pairwise_gt_iota", ["list"]], ["add", "theorem", "pairwise_join", ["list"]], ["add", "theorem", "pairwise_lt_range'", ["list"]], ["add", "theorem", "pairwise_lt_range", ["list"]], ["add", "theorem", "pairwise_map", ["list"]], ["add", "theorem", "pairwise_map_of_pairwise", ["list"]], ["add", "theorem", "pairwise_middle", ["list"]], ["add", "theorem", "pairwise_of_forall", ["list"]], ["add", "theorem", "pairwise_of_pairwise_cons", ["list"]], ["add", "theorem", "pairwise_of_pairwise_map", ["list"]], ["add", "theorem", "pairwise_of_sublist", ["list"]], ["add", "theorem", "pairwise_pair", ["list"]], ["add", "theorem", "pairwise_pw_filter", ["list"]], ["add", "theorem", "pairwise_reverse", ["list"]], ["add", "theorem", "pairwise_singleton", ["list"]], ["mod", "theorem", "prefix_append", ["list"]], ["add", "theorem", "prefix_concat", ["list"]], ["mod", "theorem", "prefix_refl", ["list"]], ["add", "def", "prod", ["list"]], ["add", "def", "product", ["list"]], ["add", "theorem", "product_cons", ["list"]], ["add", "theorem", "product_nil", ["list"]], ["add", "def", "pw_filter", ["list"]], ["add", "theorem", "pw_filter_cons_of_neg", ["list"]], ["add", "theorem", "pw_filter_cons_of_pos", ["list"]], ["add", "theorem", "pw_filter_eq_self", ["list"]], ["add", "theorem", "pw_filter_nil", ["list"]], ["add", "theorem", "pw_filter_sublist", ["list"]], ["add", "theorem", "pw_filter_subset", ["list"]], ["add", "def", "range'", ["list"]], ["add", "theorem", "range'_append", ["list"]], ["add", "theorem", "range'_concat", ["list"]], ["add", "theorem", "range'_sublist_right", ["list"]], ["add", "theorem", "range'_subset_right", ["list"]], ["add", "theorem", "range_core_range'", ["list"]], ["add", "theorem", "range_eq_range'", ["list"]], ["add", "theorem", "range_sublist", ["list"]], ["add", "theorem", "range_subset", ["list"]], ["add", "theorem", "rel_of_chain_cons", ["list"]], ["add", "theorem", "rel_of_pairwise_cons", ["list"]], ["add", "theorem", "repeat_sublist_repeat", ["list"]], ["add", "theorem", "repeat_subset_singleton", ["list"]], ["add", "theorem", "reverse_cons'", ["list"]], ["add", "theorem", "reverse_sublist", ["list"]], ["add", "theorem", "reverse_sublist_iff", ["list"]], ["mod", "theorem", "scanr_aux_cons", ["list"]], ["mod", "theorem", "scanr_cons", ["list"]], ["mod", "theorem", "scanr_nil", ["list"]], ["add", "theorem", "singleton_disjoint", ["list"]], ["add", "theorem", "singleton_sublist", ["list"]], ["mod", "theorem", "span_eq_take_drop", ["list"]], ["add", "theorem", "sublist_antisymm", ["list"]], ["mod", "theorem", "sublist_app_of_sublist_left", ["list"]], ["mod", "theorem", "sublist_app_of_sublist_right", ["list"]], ["mod", "theorem", "sublist_of_infix", ["list"]], ["add", "theorem", "sublist_of_prefix", ["list"]], ["add", "theorem", "sublist_of_suffix", ["list"]], ["add", "theorem", "sublist_suffix_of_union", ["list"]], ["mod", "theorem", "sublists_aux_cons_cons", ["list"]], ["mod", "theorem", "sublists_aux_eq_foldl", ["list"]], ["add", "theorem", "subset_erase_dup", ["list"]], ["add", "theorem", "subset_inter", ["list"]], ["mod", "theorem", "suffix_append", ["list"]], ["add", "theorem", "suffix_cons", ["list"]], ["add", "theorem", "suffix_insert", ["list"]], ["mod", "theorem", "suffix_refl", ["list"]], ["add", "theorem", "suffix_union_right", ["list"]], ["mod", "def", "sum", ["list"]], ["mod", "theorem", "tail_eq_of_cons_eq", ["list"]], ["mod", "def", "tails", ["list"]], ["mod", "theorem", "take_while_append_drop", ["list"]], ["add", "theorem", "union_sublist_append", ["list"]], ["add", "theorem", "unzip_cons", ["list"]], ["add", "theorem", "unzip_nil", ["list"]], ["add", "theorem", "zip_cons_cons", ["list"]], ["add", "theorem", "zip_nil_left", ["list"]], ["add", "theorem", "zip_nil_right", ["list"]], ["add", "theorem", "zip_unzip", ["list"]]]}, {"oldPath": "data/list/comb.lean", "newPath": null, "changes": [["del", "theorem", "all_cons", ["list"]], ["del", "theorem", "all_eq_tt_iff", ["list"]], ["del", "theorem", "all_eq_tt_of_forall", ["list"]], ["del", "theorem", "all_nil", ["list"]], ["del", "theorem", "any_cons", ["list"]], ["del", "theorem", "any_eq_tt_iff", ["list"]], ["del", "theorem", "any_nil", ["list"]], ["del", "theorem", "any_of_mem", ["list"]], ["del", "def", "dinj", ["list"]], ["del", "def", "dinj₁", ["list"]], ["del", "def", "dmap", ["list"]], ["del", "theorem", "dmap_cons_of_neg", ["list"]], ["del", "theorem", "dmap_cons_of_pos", ["list"]], ["del", "theorem", "dmap_nil", ["list"]], ["del", "theorem", "eq_of_mem_map_pair₁", ["list"]], ["del", "theorem", "exists_mem_cons_iff", ["list"]], ["del", "theorem", "exists_mem_cons_of", ["list"]], ["del", "theorem", "exists_mem_cons_of_exists", ["list"]], ["del", "theorem", "exists_of_any_eq_tt", ["list"]], ["del", "theorem", "exists_of_mem_dmap", ["list"]], ["del", "def", "flat", ["list"]], ["del", "theorem", "foldl_append", ["list"]], ["del", "theorem", "foldl_cons", ["list"]], ["del", "theorem", "foldl_eq_foldr", ["list"]], ["del", "theorem", "foldl_eq_of_comm_of_assoc", ["list"]], ["del", "theorem", "foldl_nil", ["list"]], ["del", "theorem", "foldl_reverse", ["list"]], ["del", "theorem", "foldr_append", ["list"]], ["del", "theorem", "foldr_cons", ["list"]], ["del", "theorem", "foldr_nil", ["list"]], ["del", "theorem", "foldr_reverse", ["list"]], ["del", "theorem", "forall_mem_cons", ["list"]], ["del", "theorem", "forall_mem_cons_iff", ["list"]], ["del", "theorem", "forall_mem_eq_tt_of_all_eq_tt", ["list"]], ["del", "theorem", "forall_mem_nil", ["list"]], ["del", "theorem", "forall_mem_of_forall_mem_cons", ["list"]], ["del", "theorem", "length_mapAccumR", ["list"]], ["del", "theorem", "length_mapAccumR₂", ["list"]], ["del", "theorem", "length_product", ["list"]], ["del", "theorem", "length_replicate", ["list"]], ["del", "def", "mapAccumR", ["list"]], ["del", "def", "mapAccumR₂", ["list"]], ["del", "theorem", "map_dmap_of_inv_of_pos", ["list"]], ["del", "theorem", "map₂_nil1", ["list"]], ["del", "theorem", "map₂_nil2", ["list"]], ["del", "theorem", "mem_dmap", ["list"]], ["del", "theorem", "mem_of_dinj_of_mem_dmap", ["list"]], ["del", "theorem", "mem_of_mem_map_pair₁", ["list"]], ["del", "theorem", "mem_of_mem_product_left", ["list"]], ["del", "theorem", "mem_of_mem_product_right", ["list"]], ["del", "theorem", "mem_product", ["list"]], ["del", "theorem", "nil_product", ["list"]], ["del", "theorem", "not_exists_mem_nil", ["list"]], ["del", "theorem", "not_mem_dmap_of_dinj_of_not_mem", ["list"]], ["del", "theorem", "of_forall_mem_cons", ["list"]], ["del", "theorem", "or_exists_of_exists_mem_cons", ["list"]], ["del", "def", "product", ["list"]], ["del", "theorem", "product_cons", ["list"]], ["del", "theorem", "product_nil", ["list"]], ["del", "def", "replicate", ["list"]], ["del", "theorem", "unzip_cons'", ["list"]], ["del", "theorem", "unzip_cons", ["list"]], ["del", "theorem", "unzip_nil", ["list"]], ["del", "theorem", "zip_cons_cons", ["list"]], ["del", "theorem", "zip_nil_left", ["list"]], ["del", "theorem", "zip_nil_right", ["list"]], ["del", "theorem", "zip_unzip", ["list"]]]}, {"oldPath": "data/list/default.lean", "newPath": "data/list/default.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "concat_perm", ["list"]], ["add", "theorem", "cons_perm_iff_perm_erase", ["list"]], ["add", "theorem", "eq_nil_of_perm_nil", ["list"]], ["add", "theorem", "eq_singleton_of_perm", ["list"]], ["add", "theorem", "eq_singleton_of_perm_inv", ["list"]], ["add", "theorem", "erase_perm_erase", ["list"]], ["add", "theorem", "exists_perm_sublist", ["list"]], ["add", "theorem", "exists_sublist_perm_of_subset_nodup", ["list"]], ["add", "theorem", "foldl_eq_of_perm", ["list"]], ["add", "theorem", "foldr_eq_of_perm", ["list"]], ["add", "theorem", "mem_iff_mem_of_perm", ["list"]], ["add", "theorem", "mem_of_perm", ["list"]], ["add", "theorem", "not_perm_nil_cons", ["list"]], ["del", "theorem", "count_eq_count_of_perm", ["list", "perm"]], ["del", "def", "decidable_perm", ["list", "perm"]], ["del", "def", "decidable_perm_aux", ["list", "perm"]], ["del", "theorem", "eq_nil_of_perm_nil", ["list", "perm"]], ["del", "theorem", "eq_singleton_of_perm", ["list", "perm"]], ["del", "theorem", "eq_singleton_of_perm_inv", ["list", "perm"]], ["mod", "theorem", "eqv", ["list", "perm"]], ["del", "theorem", "erase_perm_erase_of_perm", ["list", "perm"]], ["del", "theorem", "foldl_eq_of_perm", ["list", "perm"]], ["del", "theorem", "foldr_eq_of_perm", ["list", "perm"]], ["del", "theorem", "length_eq_length_of_perm", ["list", "perm"]], ["del", "theorem", "length_eq_of_qeq", ["list", "perm"]], ["del", "theorem", "mem_cons_of_qeq", ["list", "perm"]], ["del", "theorem", "mem_head_of_qeq", ["list", "perm"]], ["del", "theorem", "mem_iff_mem_of_perm", ["list", "perm"]], ["del", "theorem", "mem_of_perm", ["list", "perm"]], ["del", "theorem", "mem_tail_of_qeq", ["list", "perm"]], ["del", "theorem", "nodup_of_perm_of_nodup", ["list", "perm"]], ["del", "theorem", "not_mem_of_perm", ["list", "perm"]], ["del", "theorem", "not_perm_nil_cons", ["list", "perm"]], ["del", "theorem", "perm_app", ["list", "perm"]], ["del", "theorem", "perm_app_comm", ["list", "perm"]], ["del", "theorem", "perm_app_cons", ["list", "perm"]], ["del", "theorem", "perm_app_inv", ["list", "perm"]], ["del", "theorem", "perm_app_inv_left", ["list", "perm"]], ["del", "theorem", "perm_app_inv_right", ["list", "perm"]], ["del", "theorem", "perm_app_left", ["list", "perm"]], ["del", "theorem", "perm_app_right", ["list", "perm"]], ["del", "theorem", "perm_cons_app", ["list", "perm"]], ["del", "theorem", "perm_cons_app_cons", ["list", "perm"]], ["del", "theorem", "perm_cons_app_simp", ["list", "perm"]], ["del", "theorem", "perm_cons_inv", ["list", "perm"]], ["del", "theorem", "perm_erase", ["list", "perm"]], ["del", "theorem", "perm_erase_dup_of_perm", ["list", "perm"]], ["del", "theorem", "perm_ext", ["list", "perm"]], ["del", "theorem", "perm_filter", ["list", "perm"]], ["del", "theorem", "perm_iff_forall_count_eq_count", ["list", "perm"]], ["del", "theorem", "perm_iff_forall_mem_count_eq_count", ["list", "perm"]], ["del", "theorem", "perm_induction_on", ["list", "perm"]], ["del", "theorem", "perm_insert", ["list", "perm"]], ["del", "theorem", "perm_insert_insert", ["list", "perm"]], ["del", "theorem", "perm_inter", ["list", "perm"]], ["del", "theorem", "perm_inter_left", ["list", "perm"]], ["del", "theorem", "perm_inter_right", ["list", "perm"]], ["del", "theorem", "perm_inv_core", ["list", "perm"]], ["del", "theorem", "perm_map", ["list", "perm"]], ["del", "theorem", "perm_middle", ["list", "perm"]], ["del", "theorem", "perm_middle_simp", ["list", "perm"]], ["del", "theorem", "perm_of_forall_count_eq", ["list", "perm"]], ["del", "theorem", "perm_of_qeq", ["list", "perm"]], ["del", "theorem", "perm_product", ["list", "perm"]], ["del", "theorem", "perm_product_left", ["list", "perm"]], ["del", "theorem", "perm_product_right", ["list", "perm"]], ["del", "theorem", "perm_rev", ["list", "perm"]], ["del", "theorem", "perm_rev_simp", ["list", "perm"]], ["del", "theorem", "perm_union", ["list", "perm"]], ["del", "theorem", "perm_union_left", ["list", "perm"]], ["del", "theorem", "perm_union_right", ["list", "perm"]], ["del", "inductive", "qeq", ["list", "perm"]], ["del", "theorem", "qeq_app", ["list", "perm"]], ["del", "theorem", "qeq_of_mem", ["list", "perm"]], ["del", "theorem", "qeq_split", ["list", "perm"]], ["del", "theorem", "subset_of_mem_of_subset_of_qeq", ["list", "perm"]], ["del", "theorem", "xswap", ["list", "perm"]], ["add", "theorem", "perm_app", ["list"]], ["add", "theorem", "perm_app_comm", ["list"]], ["add", "theorem", "perm_app_cons", ["list"]], ["add", "theorem", "perm_app_inv_right", ["list"]], ["add", "theorem", "perm_app_left", ["list"]], ["add", "theorem", "perm_app_left_iff", ["list"]], ["add", "theorem", "perm_app_right", ["list"]], ["add", "theorem", "perm_bind_left", ["list"]], ["add", "theorem", "perm_bind_right", ["list"]], ["add", "theorem", "perm_cons", ["list"]], ["add", "theorem", "perm_cons_app", ["list"]], ["add", "theorem", "perm_cons_app_cons", ["list"]], ["add", "theorem", "perm_cons_inv", ["list"]], ["add", "theorem", "perm_count", ["list"]], ["add", "theorem", "perm_countp", ["list"]], ["add", "theorem", "perm_erase", ["list"]], ["add", "theorem", "perm_erase_dup_of_perm", ["list"]], ["add", "theorem", "perm_ext", ["list"]], ["add", "theorem", "perm_filter", ["list"]], ["add", "theorem", "perm_filter_map", ["list"]], ["add", "theorem", "perm_iff_count", ["list"]], ["add", "theorem", "perm_induction_on", ["list"]], ["add", "theorem", "perm_insert", ["list"]], ["add", "theorem", "perm_insert_swap", ["list"]], ["add", "theorem", "perm_inter", ["list"]], ["add", "theorem", "perm_inter_left", ["list"]], ["add", "theorem", "perm_inter_right", ["list"]], ["add", "theorem", "perm_inv_core", ["list"]], ["add", "theorem", "perm_length", ["list"]], ["add", "theorem", "perm_map", ["list"]], ["add", "theorem", "perm_middle", ["list"]], ["add", "theorem", "perm_nodup", ["list"]], ["add", "theorem", "perm_pairwise", ["list"]], ["add", "theorem", "perm_product", ["list"]], ["add", "theorem", "perm_product_left", ["list"]], ["add", "theorem", "perm_product_right", ["list"]], ["add", "theorem", "perm_repeat", ["list"]], ["add", "theorem", "perm_union", ["list"]], ["add", "theorem", "perm_union_left", ["list"]], ["add", "theorem", "perm_union_right", ["list"]], ["add", "theorem", "reverse_perm", ["list"]], ["add", "theorem", "xswap", ["list"]]]}, {"oldPath": "data/list/set.lean", "newPath": null, "changes": [["del", "theorem", "cons_union", ["list"]], ["del", "theorem", "symm", ["list", "disjoint"]], ["del", "def", "disjoint", ["list"]], ["del", "theorem", "disjoint_append_of_disjoint_left", ["list"]], ["del", "theorem", "disjoint_comm", ["list"]], ["del", "theorem", "disjoint_cons_of_not_mem_of_disjoint", ["list"]], ["del", "theorem", "disjoint_left", ["list"]], ["del", "theorem", "disjoint_nil_left", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_left_left", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_left_right", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_right_left", ["list"]], ["del", "theorem", "disjoint_of_disjoint_append_right_right", ["list"]], ["del", "theorem", "disjoint_of_disjoint_cons_left", ["list"]], ["del", "theorem", "disjoint_of_disjoint_cons_right", ["list"]], ["del", "theorem", "disjoint_of_nodup_append", ["list"]], ["del", "theorem", "disjoint_of_subset_left", ["list"]], ["del", "theorem", "disjoint_of_subset_right", ["list"]], ["del", "theorem", "disjoint_right", ["list"]], ["del", "theorem", "disjoint_singleton", ["list"]], ["del", "theorem", "dmap_nodup_of_dinj", ["list"]], ["del", "theorem", "eq_or_mem_of_mem_insert", ["list"]], ["del", "theorem", "erase_append_left", ["list"]], ["del", "theorem", "erase_append_right", ["list"]], ["del", "theorem", "erase_cons_head", ["list"]], ["del", "theorem", "erase_cons_tail", ["list"]], ["del", "def", "erase_dup", ["list"]], ["del", "theorem", "erase_dup_cons_of_mem", ["list"]], ["del", "theorem", "erase_dup_cons_of_not_mem", ["list"]], ["del", "theorem", "erase_dup_eq_of_nodup", ["list"]], ["del", "theorem", "erase_dup_nil", ["list"]], ["del", "theorem", "erase_dup_sublist", ["list"]], ["del", "theorem", "erase_dup_subset", ["list"]], ["del", "theorem", "erase_nil", ["list"]], ["del", "theorem", "erase_of_not_mem", ["list"]], ["del", "theorem", "erase_sublist", ["list"]], ["del", "theorem", "erase_subset", ["list"]], ["del", "theorem", "forall_mem_insert_of_forall_mem", ["list"]], ["del", "theorem", "forall_mem_inter_of_forall_left", ["list"]], ["del", "theorem", "forall_mem_inter_of_forall_right", ["list"]], ["del", "theorem", "forall_mem_of_forall_mem_union_left", ["list"]], ["del", "theorem", "forall_mem_of_forall_mem_union_right", ["list"]], ["del", "theorem", "forall_mem_union", ["list"]], ["del", "theorem", "def", ["list", "insert"]], ["del", "theorem", "insert_nil", ["list"]], ["del", "theorem", "insert_of_mem", ["list"]], ["del", "theorem", "insert_of_not_mem", ["list"]], ["del", "theorem", "inter_cons_of_mem", ["list"]], ["del", "theorem", "inter_cons_of_not_mem", ["list"]], ["del", "theorem", "inter_eq_nil_of_disjoint", ["list"]], ["del", "theorem", "inter_nil", ["list"]], ["del", "theorem", "length_erase_of_mem", ["list"]], ["del", "theorem", "length_erase_of_not_mem", ["list"]], ["del", "theorem", "length_insert_of_mem", ["list"]], ["del", "theorem", "length_insert_of_not_mem", ["list"]], ["del", "theorem", "length_upto", ["list"]], ["del", "theorem", "lt_of_mem_upto", ["list"]], ["del", "theorem", "mem_erase_dup", ["list"]], ["del", "theorem", "mem_erase_iff_of_nodup", ["list"]], ["del", "theorem", "mem_erase_of_ne_of_mem", ["list"]], ["del", "theorem", "mem_erase_of_nodup", ["list"]], ["del", "theorem", "mem_insert_iff", ["list"]], ["del", "theorem", "mem_insert_of_mem", ["list"]], ["del", "theorem", "mem_insert_self", ["list"]], ["del", "theorem", "mem_inter_iff", ["list"]], ["del", "theorem", "mem_inter_of_mem_of_mem", ["list"]], ["del", "theorem", "mem_of_mem_erase", ["list"]], ["del", "theorem", "mem_of_mem_inter_left", ["list"]], ["del", "theorem", "mem_of_mem_inter_right", ["list"]], ["del", "theorem", "mem_or_mem_of_mem_union", ["list"]], ["del", "theorem", "mem_union_iff", ["list"]], ["del", "theorem", "mem_union_left", ["list"]], ["del", "theorem", "mem_union_right", ["list"]], ["del", "theorem", "mem_upto_of_lt", ["list"]], ["del", "theorem", "mem_upto_succ_of_mem_upto", ["list"]], ["del", "theorem", "nil_union", ["list"]], ["del", "inductive", "nodup", ["list"]], ["del", "theorem", "nodup_app_comm", ["list"]], ["del", "theorem", "nodup_append", ["list"]], ["del", "theorem", "nodup_concat", ["list"]], ["del", "theorem", "nodup_cons", ["list"]], ["del", "theorem", "nodup_erase_dup", ["list"]], ["del", "theorem", "nodup_erase_of_nodup", ["list"]], ["del", "theorem", "nodup_filter", ["list"]], ["del", "theorem", "nodup_head", ["list"]], ["del", "theorem", "nodup_insert", ["list"]], ["del", "theorem", "nodup_inter_of_nodup", ["list"]], ["del", "theorem", "nodup_map", ["list"]], ["del", "theorem", "nodup_map_on", ["list"]], ["del", "theorem", "nodup_middle", ["list"]], ["del", "theorem", "nodup_nil", ["list"]], ["del", "theorem", "nodup_of_nodup_append_left", ["list"]], ["del", "theorem", "nodup_of_nodup_append_right", ["list"]], ["del", "theorem", "nodup_of_nodup_cons", ["list"]], ["del", "theorem", "nodup_of_nodup_map", ["list"]], ["del", "theorem", "nodup_of_sublist", ["list"]], ["del", "theorem", "nodup_product", ["list"]], ["del", "theorem", "nodup_singleton", ["list"]], ["del", "theorem", "nodup_union", ["list"]], ["del", "theorem", "nodup_upto", ["list"]], ["del", "theorem", "not_mem_of_nodup_cons", ["list"]], ["del", "theorem", "not_nodup_cons_of_mem", ["list"]], ["del", "theorem", "not_nodup_cons_of_not_nodup", ["list"]], ["del", "theorem", "singleton_disjoint", ["list"]], ["del", "theorem", "subset_erase_dup", ["list"]], ["del", "def", "upto", ["list"]], ["del", "theorem", "upto_ne_nil_of_ne_zero", ["list"]], ["del", "theorem", "upto_nil", ["list"]], ["del", "theorem", "upto_step", ["list"]], ["del", "theorem", "upto_succ", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": [["mod", "theorem", "eq_of_sorted_of_perm", ["list"]], ["del", "theorem", "forall_mem_rel_of_sorted_cons", ["list"]], ["mod", "def", "insertion_sort", ["list"]], ["mod", "def", "ordered_insert", ["list"]], ["add", "theorem", "rel_of_sorted_cons", ["list"]], ["mod", "def", "sorted", ["list"]], ["mod", "theorem", "sorted_cons", ["list"]], ["mod", "theorem", "sorted_nil", ["list"]], ["mod", "theorem", "sorted_of_sorted_cons", ["list"]], ["mod", "theorem", "sorted_singleton", ["list"]]]}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["add", "theorem", "mkpair_unpair'", ["nat"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["mod", "def", "filter", ["option"]], ["add", "def", "guard", ["option"]], ["add", "theorem", "guard_eq_some", ["option"]], ["mod", "def", "iget", ["option"]], ["add", "theorem", "mem_def", ["option"]], ["add", "theorem", "some_inj", ["option"]]]}, {"oldPath": "data/prod.lean", "newPath": "data/prod.lean", "changes": [["add", "theorem", "swap_left_inverse", ["prod"]], ["add", "theorem", "swap_right_inverse", ["prod"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "ball_image_iff", ["set"]], ["add", "theorem", "compl_image", ["set"]], ["mod", "theorem", "forall_range_iff", ["set"]], ["mod", "theorem", "image_eq_preimage_of_inverse", ["set"]], ["add", "theorem", "image_preimage_eq", ["set"]], ["del", "theorem", "image_subset_eq", ["set"]], ["add", "theorem", "image_subset_preimage_of_inverse", ["set"]], ["del", "theorem", "image_union_supset", ["set"]], ["del", "theorem", "inter_preimage_subset", ["set"]], ["mod", "theorem", "mem_image", ["set"]], ["add", "theorem", "mem_image_iff_bex", ["set"]], ["mod", "theorem", "mem_image_iff_of_inverse", ["set"]], ["mod", "theorem", "mem_of_eq_of_mem", ["set"]], ["mod", "def", "pairwise_on", ["set"]], ["del", "theorem", "preimage_diff", ["set"]], ["mod", "theorem", "preimage_image_eq", ["set"]], ["add", "theorem", "preimage_subset_image_of_inverse", ["set"]], ["mod", "theorem", "range_of_surjective", ["set"]], ["mod", "theorem", "trans", ["set", "subset"]], ["mod", "theorem", "subset_preimage_image", ["set"]], ["del", "theorem", "union_preimage_subset", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["mod", "def", "countable", ["set"]], ["del", "def", "encodable_of_inj", ["set"]]]}, {"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": []}, {"oldPath": "data/set/function.lean", "newPath": null, "changes": [["del", "theorem", "mk", ["set", "bij_on"]], ["del", "def", "bij_on", ["set"]], ["del", "theorem", "bij_on_comp", ["set"]], ["del", "theorem", "bij_on_of_eq_on", ["set"]], ["del", "theorem", "bij_on_of_inv_on", ["set"]], ["del", "theorem", "bijective_iff_bij_on_univ", ["set"]], ["del", "theorem", "eq_on_of_left_inv_of_right_inv", ["set"]], ["del", "theorem", "image_eq_of_bij_on", ["set"]], ["del", "theorem", "image_eq_of_maps_to_of_surj_on", ["set"]], ["del", "theorem", "image_subset_of_maps_to", ["set"]], ["del", "theorem", "image_subset_of_maps_to_of_subset", ["set"]], ["del", "def", "inj_on", ["set"]], ["del", "theorem", "inj_on_comp", ["set"]], ["del", "theorem", "inj_on_empty", ["set"]], ["del", "theorem", "inj_on_of_bij_on", ["set"]], ["del", "theorem", "inj_on_of_eq_on", ["set"]], ["del", "theorem", "inj_on_of_inj_on_of_subset", ["set"]], ["del", "theorem", "inj_on_of_left_inv_on", ["set"]], ["del", "theorem", "injective_iff_inj_on_univ", ["set"]], ["del", "def", "inv_on", ["set"]], ["del", "def", "left_inv_on", ["set"]], ["del", "theorem", "left_inv_on_comp", ["set"]], ["del", "theorem", "left_inv_on_of_eq_on_left", ["set"]], ["del", "theorem", "left_inv_on_of_eq_on_right", ["set"]], ["del", "theorem", "left_inv_on_of_surj_on_right_inv_on", ["set"]], ["del", "def", "maps_to", ["set"]], ["del", "theorem", "maps_to_comp", ["set"]], ["del", "theorem", "maps_to_of_bij_on", ["set"]], ["del", "theorem", "maps_to_of_eq_on", ["set"]], ["del", "theorem", "maps_to_univ_univ", ["set"]], ["del", "def", "right_inv_on", ["set"]], ["del", "theorem", "right_inv_on_comp", ["set"]], ["del", "theorem", "right_inv_on_of_eq_on_left", ["set"]], ["del", "theorem", "right_inv_on_of_eq_on_right", ["set"]], ["del", "theorem", "right_inv_on_of_inj_on_of_left_inv_on", ["set"]], ["del", "def", "surj_on", ["set"]], ["del", "theorem", "surj_on_comp", ["set"]], ["del", "theorem", "surj_on_of_bij_on", ["set"]], ["del", "theorem", "surj_on_of_eq_on", ["set"]], ["del", "theorem", "surj_on_of_right_inv_on", ["set"]], ["del", "theorem", "surjective_iff_surj_on_univ", ["set"]]]}, {"oldPath": "data/set/prod.lean", "newPath": "data/set/prod.lean", "changes": [["add", "theorem", "mem_prod", ["set"]], ["mod", "theorem", "mem_prod_eq", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "and_iff_left_of_imp", []], ["add", "theorem", "and_iff_right_of_imp", []], ["add", "theorem", "exists_and_distrib_right", []], ["add", "theorem", "heq_iff_eq", []], ["add", "theorem", "exists", ["sigma"]], ["add", "theorem", "forall", ["sigma"]], ["add", "theorem", "inj_iff", ["sigma", "mk"]], ["add", "theorem", "exists", ["subtype"]], ["add", "theorem", "forall", ["subtype"]]]}, {"oldPath": "logic/function_inverse.lean", "newPath": "logic/function.lean", "changes": [["add", "theorem", "eq_iff", ["function", "injective"]], ["add", "theorem", "has_left_inverse", ["function", "injective"]], ["add", "theorem", "injective_surj_inv", ["function"]], ["add", "theorem", "inv_fun_eq", ["function"]], ["add", "theorem", "inv_fun_eq_of_injective_of_right_inverse", ["function"]], ["add", "theorem", "inv_fun_on_eq'", ["function"]], ["add", "theorem", "inv_fun_on_eq", ["function"]], ["add", "theorem", "inv_fun_on_mem", ["function"]], ["add", "theorem", "inv_fun_on_neg", ["function"]], ["add", "theorem", "inv_fun_on_pos", ["function"]], ["add", "theorem", "left_inverse_inv_fun", ["function"]], ["add", "theorem", "partial_inv_eq", ["function"]], ["add", "theorem", "partial_inv_eq_of_eq", ["function"]], ["add", "theorem", "right_inverse_inv_fun", ["function"]], ["add", "theorem", "right_inverse_surj_inv", ["function"]], ["add", "theorem", "surj_inv_eq", ["function"]], ["add", "theorem", "has_right_inverse", ["function", "surjective"]], ["del", "theorem", "has_left_inverse", ["set"]], ["del", "theorem", "has_right_inverse", ["set"]], ["del", "theorem", "injective_surj_inv", ["set"]], ["del", "def", "inv_fun", ["set"]], ["del", "theorem", "inv_fun_eq", ["set"]], ["del", "theorem", "inv_fun_eq_of_injective_of_right_inverse", ["set"]], ["del", "def", "inv_fun_on", ["set"]], ["del", "theorem", "inv_fun_on_eq'", ["set"]], ["del", "theorem", "inv_fun_on_eq", ["set"]], ["del", "theorem", "inv_fun_on_mem", ["set"]], ["del", "theorem", "inv_fun_on_neg", ["set"]], ["del", "theorem", "inv_fun_on_pos", ["set"]], ["del", "theorem", "left_inverse_inv_fun", ["set"]], ["del", "theorem", "right_inverse_inv_fun", ["set"]], ["del", "theorem", "right_inverse_surj_inv", ["set"]], ["del", "def", "surj_inv", ["set"]], ["del", "theorem", "surj_inv_eq", ["set"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}]}, {"timestamp": 1506902787, "sha": "e951a752", "message": "Merge branch 'master' into master", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_preimage_subset", ["set"]], ["add", "theorem", "image_subset_eq", ["set"]], ["add", "theorem", "image_union_supset", ["set"]], ["add", "theorem", "inter_preimage_subset", ["set"]], ["add", "theorem", "preimage_diff", ["set"]], ["add", "theorem", "subset_preimage_image", ["set"]], ["add", "theorem", "union_preimage_subset", ["set"]]]}, {"oldPath": null, "newPath": "data/set/function.lean", "changes": [["add", "theorem", "mk", ["set", "bij_on"]], ["add", "def", "bij_on", ["set"]], ["add", "theorem", "bij_on_comp", ["set"]], ["add", "theorem", "bij_on_of_eq_on", ["set"]], ["add", "theorem", "bij_on_of_inv_on", ["set"]], ["add", "theorem", "bijective_iff_bij_on_univ", ["set"]], ["add", "theorem", "eq_on_of_left_inv_of_right_inv", ["set"]], ["add", "theorem", "image_eq_of_bij_on", ["set"]], ["add", "theorem", "image_eq_of_maps_to_of_surj_on", ["set"]], ["add", "theorem", "image_subset_of_maps_to", ["set"]], ["add", "theorem", "image_subset_of_maps_to_of_subset", ["set"]], ["add", "def", "inj_on", ["set"]], ["add", "theorem", "inj_on_comp", ["set"]], ["add", "theorem", "inj_on_empty", ["set"]], ["add", "theorem", "inj_on_of_bij_on", ["set"]], ["add", "theorem", "inj_on_of_eq_on", ["set"]], ["add", "theorem", "inj_on_of_inj_on_of_subset", ["set"]], ["add", "theorem", "inj_on_of_left_inv_on", ["set"]], ["add", "theorem", "injective_iff_inj_on_univ", ["set"]], ["add", "def", "inv_on", ["set"]], ["add", "def", "left_inv_on", ["set"]], ["add", "theorem", "left_inv_on_comp", ["set"]], ["add", "theorem", "left_inv_on_of_eq_on_left", ["set"]], ["add", "theorem", "left_inv_on_of_eq_on_right", ["set"]], ["add", "theorem", "left_inv_on_of_surj_on_right_inv_on", ["set"]], ["add", "def", "maps_to", ["set"]], ["add", "theorem", "maps_to_comp", ["set"]], ["add", "theorem", "maps_to_of_bij_on", ["set"]], ["add", "theorem", "maps_to_of_eq_on", ["set"]], ["add", "theorem", "maps_to_univ_univ", ["set"]], ["add", "def", "right_inv_on", ["set"]], ["add", "theorem", "right_inv_on_comp", ["set"]], ["add", "theorem", "right_inv_on_of_eq_on_left", ["set"]], ["add", "theorem", "right_inv_on_of_eq_on_right", ["set"]], ["add", "theorem", "right_inv_on_of_inj_on_of_left_inv_on", ["set"]], ["add", "def", "surj_on", ["set"]], ["add", "theorem", "surj_on_comp", ["set"]], ["add", "theorem", "surj_on_of_bij_on", ["set"]], ["add", "theorem", "surj_on_of_eq_on", ["set"]], ["add", "theorem", "surj_on_of_right_inv_on", ["set"]], ["add", "theorem", "surjective_iff_surj_on_univ", ["set"]]]}]}, {"timestamp": 1506626880, "sha": "e7b2a0f7", "message": "style(analysis): renames the topology directory to analysis and introduced topology and measure_theory subdirectories", "changes": [{"oldPath": "topology/ennreal.lean", "newPath": "analysis/ennreal.lean", "changes": []}, {"oldPath": "topology/limits.lean", "newPath": "analysis/limits.lean", "changes": [["add", "theorem", "has_sum_of_absolute_convergence", []], ["add", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []]]}, {"oldPath": "topology/borel_space.lean", "newPath": "analysis/measure_theory/borel_space.lean", "changes": []}, {"oldPath": "topology/lebesgue_measure.lean", "newPath": "analysis/measure_theory/lebesgue_measure.lean", "changes": []}, {"oldPath": "topology/measurable_space.lean", "newPath": "analysis/measure_theory/measurable_space.lean", "changes": []}, {"oldPath": "topology/measure.lean", "newPath": "analysis/measure_theory/measure_space.lean", "changes": []}, {"oldPath": "topology/outer_measure.lean", "newPath": "analysis/measure_theory/outer_measure.lean", "changes": []}, {"oldPath": "topology/metric_space.lean", "newPath": "analysis/metric_space.lean", "changes": []}, {"oldPath": "topology/of_nat.lean", "newPath": "analysis/of_nat.lean", "changes": []}, {"oldPath": "topology/real.lean", "newPath": "analysis/real.lean", "changes": []}, {"oldPath": "topology/continuity.lean", "newPath": "analysis/topology/continuity.lean", "changes": []}, {"oldPath": "topology/infinite_sum.lean", "newPath": "analysis/topology/infinite_sum.lean", "changes": [["del", "theorem", "has_sum_of_absolute_convergence", []], ["del", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "analysis/topology/topological_space.lean", "changes": []}, {"oldPath": "topology/topological_structures.lean", "newPath": "analysis/topology/topological_structures.lean", "changes": []}, {"oldPath": "topology/uniform_space.lean", "newPath": "analysis/topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1506626196, "sha": "afefdcbb", "message": "chore(topology): move general theorems to the corresponding theories", "changes": [{"oldPath": null, "newPath": "algebra/default.lean", "changes": []}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "inv_le_inv", []], ["add", "theorem", "one_lt_inv", []]]}, {"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "lt_sub_iff", []], ["add", "theorem", "sub_lt_iff", []]]}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "one_lt_two", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "add_div", []], ["add", "theorem", "div_eq_mul_inv", []], ["add", "theorem", "neg_inv", []]]}, {"oldPath": null, "newPath": "data/quot.lean", "changes": [["add", "theorem", "forall_quotient_iff", []], ["add", "theorem", "quot_mk_image_univ_eq", []]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_preimage_eq_inter_rng", ["set"]]]}, {"oldPath": null, "newPath": "data/set/disjointed.lean", "changes": [["add", "def", "pairwise", []], ["add", "theorem", "disjoint_disjointed", ["set"]], ["add", "def", "disjointed", ["set"]], ["add", "theorem", "disjointed_Union", ["set"]], ["add", "theorem", "disjointed_induct", ["set"]], ["add", "theorem", "disjointed_of_mono", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "subtype_val_image", []]]}, {"oldPath": "data/set/prod.lean", "newPath": "data/set/prod.lean", "changes": [["add", "theorem", "univ_prod_univ", ["set"]]]}, {"oldPath": null, "newPath": "data/subtype.lean", "changes": [["add", "theorem", "exists_subtype", []], ["add", "theorem", "forall_subtype", []]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "binfi_inf", ["lattice"]], ["add", "theorem", "infi_bool_eq", ["lattice"]], ["add", "theorem", "supr_bool_eq", ["lattice"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "at_top_ne_bot", ["filter"]], ["add", "theorem", "inf_principal_eq_bot", ["filter"]], ["add", "theorem", "map_at_top_eq", ["filter"]], ["add", "theorem", "mem_at_top", ["filter"]], ["add", "theorem", "mem_at_top_iff", ["filter"]], ["add", "theorem", "mem_infi_sets_finset", ["filter"]], ["add", "theorem", "tendsto_finset_image_at_top_at_top", ["filter"]]]}, {"oldPath": "topology/borel_space.lean", "newPath": "topology/borel_space.lean", "changes": [["add", "theorem", "borel_eq_generate_from_Iio_of_rat", ["measure_theory"]], ["add", "theorem", "borel_eq_generate_from_Ioo_of_rat_of_rat", ["measure_theory"]], ["add", "theorem", "is_topological_basis_Ioo_of_rat_of_rat", ["measure_theory"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["add", "theorem", "continuous_if", []], ["del", "theorem", "image_preimage_eq_inter_rng", []], ["del", "theorem", "val_image", ["subtype"]], ["del", "theorem", "univ_prod_univ", []]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["del", "theorem", "supr_bool_eq", []]]}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["del", "theorem", "add_div", []], ["del", "theorem", "at_top_ne_bot", []], ["del", "theorem", "cauchy_iff", []], ["del", "theorem", "mem_at_top", ["filter"]], ["del", "theorem", "mem_infi_sets_finset", ["filter"]], ["del", "theorem", "forall_and_distrib'", []], ["del", "theorem", "map_at_top_eq", []], ["del", "theorem", "mem_at_top_iff", []], ["del", "theorem", "mem_closure_of_tendsto", []], ["del", "theorem", "tendsto_finset_image_at_top_at_top", []]]}, {"oldPath": "topology/lebesgue_measure.lean", "newPath": "topology/lebesgue_measure.lean", "changes": [["del", "theorem", "borel_eq_generate_from_Iio_of_rat", []], ["del", "theorem", "borel_eq_generate_from_Ioo_of_rat_of_rat", []], ["del", "theorem", "inv_le_inv", []], ["del", "theorem", "is_topological_basis_Ioo_of_rat_of_rat", []], ["del", "theorem", "is_topological_basis_of_open_of_nhds", []], ["del", "theorem", "max_of_rat_of_rat", []], ["del", "theorem", "min_of_rat_of_rat", []]]}, {"oldPath": "topology/limits.lean", "newPath": "topology/limits.lean", "changes": [["del", "theorem", "div_eq_mul_inv", []], ["del", "theorem", "exists_lt_of_nat", []], ["del", "theorem", "int_of_nat_eq_of_nat", []], ["del", "theorem", "neg_inv", []], ["del", "def", "of_nat", []], ["del", "theorem", "of_nat_add", []], ["del", "theorem", "of_nat_bit0", []], ["del", "theorem", "of_nat_bit1", []], ["del", "theorem", "of_nat_le_of_nat", []], ["del", "theorem", "of_nat_le_of_nat_iff", []], ["del", "theorem", "of_nat_mul", []], ["del", "theorem", "of_nat_one", []], ["del", "theorem", "of_nat_pos", []], ["del", "theorem", "of_nat_sub", []], ["del", "theorem", "one_lt_inv", []], ["del", "theorem", "rat_coe_eq_of_nat", []], ["del", "theorem", "rat_of_nat_eq_of_nat", []], ["del", "theorem", "real_of_rat_of_nat_eq_of_nat", []], ["del", "theorem", "zero_le_of_nat", []]]}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": [["del", "def", "pairwise", []], ["del", "theorem", "disjoint_disjointed", ["set"]], ["del", "def", "disjointed", ["set"]], ["del", "theorem", "disjointed_Union", ["set"]], ["del", "theorem", "disjointed_induct", ["set"]], ["del", "theorem", "disjointed_of_mono", ["set"]]]}, {"oldPath": "topology/metric_space.lean", "newPath": "topology/metric_space.lean", "changes": [["del", "theorem", "exists_subtype", []]]}, {"oldPath": null, "newPath": "topology/of_nat.lean", "changes": [["add", "theorem", "exists_lt_of_nat", []], ["add", "theorem", "int_of_nat_eq_of_nat", []], ["add", "def", "of_nat", []], ["add", "theorem", "of_nat_add", []], ["add", "theorem", "of_nat_bit0", []], ["add", "theorem", "of_nat_bit1", []], ["add", "theorem", "of_nat_le_of_nat", []], ["add", "theorem", "of_nat_le_of_nat_iff", []], ["add", "theorem", "of_nat_mul", []], ["add", "theorem", "of_nat_one", []], ["add", "theorem", "of_nat_pos", []], ["add", "theorem", "of_nat_sub", []], ["add", "theorem", "rat_coe_eq_of_nat", []], ["add", "theorem", "rat_of_nat_eq_of_nat", []], ["add", "theorem", "real_of_rat_of_nat_eq_of_nat", []], ["add", "theorem", "zero_le_of_nat", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "forall_subtype_iff", []], ["del", "theorem", "lt_sub_iff", []], ["add", "theorem", "max_of_rat_of_rat", []], ["add", "theorem", "min_of_rat_of_rat", []], ["del", "theorem", "one_lt_two", []], ["del", "theorem", "orderable_topology_of_nhds_abs", []], ["del", "theorem", "quot_mk_image_univ_eq", []], ["del", "theorem", "sub_lt_iff", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["add", "theorem", "closure_compl", []], ["add", "def", "frontier", []], ["add", "theorem", "frontier_eq_closure_inter_closure", []], ["add", "theorem", "interior_compl", []], ["add", "theorem", "mem_closure_of_tendsto", []], ["add", "theorem", "is_topological_basis_of_open_of_nhds", ["topological_space"]]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["del", "theorem", "binfi_inf", []], ["del", "theorem", "closure_compl", []], ["del", "theorem", "continuous_if", []], ["del", "def", "frontier", []], ["del", "theorem", "frontier_eq_closure_inter_closure", []], ["del", "theorem", "inf_principal_eq_bot", []], ["del", "theorem", "interior_compl", []], ["add", "theorem", "orderable_topology_of_nhds_abs", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["add", "theorem", "cauchy_iff", []], ["del", "theorem", "forall_quotient_iff", []]]}]}, {"timestamp": 1506622604, "sha": "7e7c6f58", "message": "feat(topology): various additions (preparation for the nonnegative integral)", "changes": [{"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_prod", ["set"]]]}, {"oldPath": "data/set/prod.lean", "newPath": "data/set/prod.lean", "changes": [["add", "theorem", "empty_prod", ["set"]], ["add", "theorem", "insert_prod", ["set"]], ["add", "theorem", "prod_empty", ["set"]], ["add", "theorem", "prod_insert", ["set"]]]}, {"oldPath": "topology/borel_space.lean", "newPath": "topology/borel_space.lean", "changes": [["mod", "theorem", "borel_prod", ["measure_theory"]], ["mod", "theorem", "measurable_add", ["measure_theory"]], ["mod", "theorem", "measurable_mul", ["measure_theory"]], ["mod", "theorem", "measurable_neg", ["measure_theory"]], ["mod", "theorem", "measurable_of_continuous2", ["measure_theory"]], ["mod", "theorem", "measurable_of_continuous", ["measure_theory"]], ["mod", "theorem", "measurable_sub", ["measure_theory"]]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": []}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["add", "theorem", "tsum_eq_single", []]]}]}, {"timestamp": 1506622103, "sha": "c3aeb53b", "message": "feat(topology): add Lebesgue measure", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "inv_lt_one", []]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "range_eq_image", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["mod", "theorem", "countable_Union", ["set"]], ["add", "theorem", "countable_Union_Prop", ["set"]], ["add", "theorem", "countable_bUnion", ["set"]]]}, {"oldPath": "data/set/default.lean", "newPath": "data/set/default.lean", "changes": []}, {"oldPath": null, "newPath": "data/set/intervals.lean", "changes": [["add", "def", "Ico", ["set"]], ["add", "theorem", "Ico_eq_Ico_iff", ["set"]], ["add", "theorem", "Ico_eq_empty", ["set"]], ["add", "theorem", "Ico_eq_empty_iff", ["set"]], ["add", "theorem", "Ico_inter_Iio_eq", ["set"]], ["add", "theorem", "Ico_sdiff_Iio_eq", ["set"]], ["add", "theorem", "Ico_subset_Ico_iff", ["set"]], ["add", "def", "Iio", ["set"]], ["add", "def", "Ioo", ["set"]], ["add", "theorem", "Ioo_eq_empty_of_ge", ["set"]], ["add", "theorem", "Ioo_inter_Ioo", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "sdiff_inter_same", ["set"]], ["add", "theorem", "sdiff_union_same", ["set"]], ["add", "theorem", "antisymm_iff", ["set", "subset"]], ["add", "theorem", "union_of_subset_right", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "or_not", ["classical"]]]}, {"oldPath": "order/bounds.lean", "newPath": "order/bounds.lean", "changes": [["add", "theorem", "ne_empty_of_is_glb", []], ["add", "theorem", "ne_empty_of_is_lub", []]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "Inf_lt_iff", ["lattice"]], ["add", "theorem", "Sup_eq_top", ["lattice"]], ["add", "theorem", "infi_lt_iff", ["lattice"]], ["add", "theorem", "lt_Sup_iff", ["lattice"]], ["add", "theorem", "lt_supr_iff", ["lattice"]]]}, {"oldPath": "topology/borel_space.lean", "newPath": "topology/borel_space.lean", "changes": [["add", "theorem", "is_measurable_Ico", ["measure_theory"]], ["add", "theorem", "is_measurable_Iio", ["measure_theory"]], ["add", "theorem", "is_measurable_Ioo", ["measure_theory"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["add", "theorem", "prod_generate_from_generate_from_eq", []]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["del", "theorem", "Inf_lt_iff", []], ["del", "theorem", "Sup_eq_top", []], ["add", "theorem", "add_infi", ["ennreal"]], ["add", "theorem", "add_sub_self", ["ennreal"]], ["add", "theorem", "infi_add", ["ennreal"]], ["add", "theorem", "infi_add_infi", ["ennreal"]], ["add", "theorem", "infi_of_real", ["ennreal"]], ["add", "theorem", "infi_sum", ["ennreal"]], ["add", "theorem", "infty_sub_of_real", ["ennreal"]], ["del", "theorem", "le_sub_iff_add_le", ["ennreal"]], ["add", "theorem", "of_real_le_of_real", ["ennreal"]], ["add", "theorem", "of_real_sub_of_real", ["ennreal"]], ["add", "theorem", "sub_supr", ["ennreal"]], ["add", "theorem", "supr_of_real", ["ennreal"]], ["del", "theorem", "infi_lt_iff", []], ["del", "theorem", "lt_Sup_iff", []], ["del", "theorem", "lt_supr_iff", []], ["add", "theorem", "supr_bool_eq", []]]}, {"oldPath": "topology/lebesgue_measure.lean", "newPath": "topology/lebesgue_measure.lean", "changes": [["del", "def", "Ico", []], ["del", "theorem", "Ico_eq_Ico_iff", []], ["del", "theorem", "Ico_eq_empty", []], ["del", "theorem", "Ico_eq_empty_iff", []], ["del", "theorem", "Ico_inter_Iio_eq", []], ["del", "theorem", "Ico_sdiff_Iio_eq", []], ["del", "theorem", "Ico_subset_Ico_iff", []], ["del", "def", "Iio", []], ["add", "theorem", "borel_eq_generate_from_Iio_of_rat", []], ["add", "theorem", "borel_eq_generate_from_Ioo_of_rat_of_rat", []], ["add", "theorem", "inv_le_inv", []], ["del", "theorem", "is_lub_of_is_lub_of_tendsto", []], ["add", "theorem", "is_topological_basis_Ioo_of_rat_of_rat", []], ["add", "theorem", "is_topological_basis_of_open_of_nhds", []], ["add", "theorem", "max_of_rat_of_rat", []], ["add", "def", "lebesgue", ["measure_theory"]], ["add", "theorem", "lebesgue_Ico", ["measure_theory"]], ["add", "theorem", "lebesgue_Ioo", ["measure_theory"]], ["add", "theorem", "lebesgue_singleton", ["measure_theory"]], ["add", "theorem", "tendsto_of_nat_at_top_at_top", ["measure_theory"]], ["add", "theorem", "min_of_rat_of_rat", []], ["del", "theorem", "nhds_principal_ne_top_of_is_lub", []], ["del", "theorem", "antisymm_iff", ["set", "subset"]]]}, {"oldPath": "topology/limits.lean", "newPath": "topology/limits.lean", "changes": [["add", "theorem", "of_nat_pos", []]]}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_set_prod", []], ["add", "theorem", "measurable_fst", []], ["add", "theorem", "measurable_prod", []], ["add", "theorem", "measurable_prod_mk", []], ["add", "theorem", "measurable_snd", []], ["add", "theorem", "comap_generate_from", ["measurable_space"]], ["add", "theorem", "generate_from_le_generate_from", ["measurable_space"]], ["add", "theorem", "generate_from_sup_generate_from", ["measurable_space"]], ["add", "theorem", "measurable_subtype_mk", []], ["add", "theorem", "measurable_subtype_val", []], ["add", "theorem", "disjointed_of_mono", ["set"]]]}, {"oldPath": "topology/measure.lean", "newPath": "topology/measure.lean", "changes": [["add", "theorem", "measure_Inter_eq_infi_nat", ["measure_theory"]], ["add", "theorem", "measure_Union_eq_supr_nat", ["measure_theory"]], ["del", "theorem", "measure_Union_le_nat", ["measure_theory"]], ["add", "theorem", "measure_Union_le_tsum_nat", ["measure_theory"]], ["mod", "theorem", "measure_empty", ["measure_theory"]], ["del", "theorem", "measure_eq_measure_of", ["measure_theory"]], ["mod", "theorem", "measure_mono", ["measure_theory"]], ["add", "theorem", "measure_sdiff", ["measure_theory"]], ["del", "def", "measure", ["measure_theory", "measure_space"]], ["mod", "theorem", "measure_union", ["measure_theory"]], ["add", "def", "to_measure", ["measure_theory", "outer_measure"]], ["del", "theorem", "supr_bool_eq", []]]}, {"oldPath": "topology/outer_measure.lean", "newPath": "topology/outer_measure.lean", "changes": [["del", "theorem", "or_not", ["classical"]], ["del", "theorem", "add_infi", ["ennreal"]], ["del", "theorem", "infi_add", ["ennreal"]], ["del", "theorem", "infi_add_infi", ["ennreal"]], ["del", "theorem", "infi_sum", ["ennreal"]], ["del", "theorem", "inv_lt_one", []], ["add", "theorem", "caratheodory_is_measurable", ["measure_theory", "outer_measure"]], ["add", "theorem", "caratheodory_is_measurable_eq", ["measure_theory", "outer_measure"]], ["del", "def", "inf", ["measure_theory", "outer_measure"]], ["del", "theorem", "inf_space_is_measurable", ["measure_theory", "outer_measure"]], ["del", "def", "measure", ["measure_theory", "outer_measure"]], ["del", "def", "space", ["measure_theory", "outer_measure"]], ["del", "theorem", "space_is_measurable_eq", ["measure_theory", "outer_measure"]]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["add", "theorem", "exists_gt_of_rat", []], ["add", "theorem", "exists_lt_of_rat_of_rat_gt", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["add", "theorem", "induced_le_iff_le_coinduced", []], ["add", "def", "is_topological_basis", ["topological_space"]], ["add", "theorem", "is_topological_basis_of_subbasis", ["topological_space"]], ["add", "theorem", "mem_nhds_of_is_topological_basis", ["topological_space"]]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "closure_compl", []], ["add", "theorem", "closure_le_eq", []], ["add", "theorem", "continuous_if", []], ["add", "theorem", "continuous_max", []], ["add", "theorem", "continuous_min", []], ["add", "theorem", "continuous_sub'", []], ["add", "def", "frontier", []], ["add", "theorem", "frontier_eq_closure_inter_closure", []], ["add", "theorem", "frontier_le_subset_eq", []], ["add", "theorem", "interior_compl", []], ["add", "theorem", "is_glb_of_is_glb_of_tendsto", []], ["add", "theorem", "is_glb_of_is_lub_of_tendsto", []], ["add", "theorem", "is_glb_of_mem_nhds", []], ["add", "theorem", "is_lub_of_is_lub_of_tendsto", []], ["add", "theorem", "is_lub_of_mem_nhds", []], ["add", "theorem", "is_open_Iio", []], ["add", "theorem", "is_open_Ioo", []], ["add", "theorem", "nhds_principal_ne_bot_of_is_glb", []], ["add", "theorem", "nhds_principal_ne_bot_of_is_lub", []], ["add", "theorem", "tendsto_max", []], ["add", "theorem", "tendsto_min", []]]}]}, {"timestamp": 1506622063, "sha": "4297eebb", "message": "feat(topology): add Borel spaces", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["del", "theorem", "image_preimage_subset", ["set"]], ["del", "theorem", "image_subset_eq", ["set"]], ["del", "theorem", "image_union_supset", ["set"]], ["del", "theorem", "inter_preimage_subset", ["set"]], ["del", "theorem", "preimage_diff", ["set"]], ["del", "theorem", "subset_preimage_image", ["set"]], ["del", "theorem", "union_preimage_subset", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["mod", "theorem", "countable_empty", ["set"]], ["add", "theorem", "countable_set_of_finite_subset", ["set"]], ["mod", "theorem", "countable_singleton", ["set"]]]}, {"oldPath": "data/set/function.lean", "newPath": null, "changes": [["del", "theorem", "mk", ["set", "bij_on"]], ["del", "def", "bij_on", ["set"]], ["del", "theorem", "bij_on_comp", ["set"]], ["del", "theorem", "bij_on_of_eq_on", ["set"]], ["del", "theorem", "bij_on_of_inv_on", ["set"]], ["del", "theorem", "bijective_iff_bij_on_univ", ["set"]], ["del", "theorem", "eq_on_of_left_inv_of_right_inv", ["set"]], ["del", "theorem", "image_eq_of_bij_on", ["set"]], ["del", "theorem", "image_eq_of_maps_to_of_surj_on", ["set"]], ["del", "theorem", "image_subset_of_maps_to", ["set"]], ["del", "theorem", "image_subset_of_maps_to_of_subset", ["set"]], ["del", "def", "inj_on", ["set"]], ["del", "theorem", "inj_on_comp", ["set"]], ["del", "theorem", "inj_on_empty", ["set"]], ["del", "theorem", "inj_on_of_bij_on", ["set"]], ["del", "theorem", "inj_on_of_eq_on", ["set"]], ["del", "theorem", "inj_on_of_inj_on_of_subset", ["set"]], ["del", "theorem", "inj_on_of_left_inv_on", ["set"]], ["del", "theorem", "injective_iff_inj_on_univ", ["set"]], ["del", "def", "inv_on", ["set"]], ["del", "def", "left_inv_on", ["set"]], ["del", "theorem", "left_inv_on_comp", ["set"]], ["del", "theorem", "left_inv_on_of_eq_on_left", ["set"]], ["del", "theorem", "left_inv_on_of_eq_on_right", ["set"]], ["del", "theorem", "left_inv_on_of_surj_on_right_inv_on", ["set"]], ["del", "def", "maps_to", ["set"]], ["del", "theorem", "maps_to_comp", ["set"]], ["del", "theorem", "maps_to_of_bij_on", ["set"]], ["del", "theorem", "maps_to_of_eq_on", ["set"]], ["del", "theorem", "maps_to_univ_univ", ["set"]], ["del", "def", "right_inv_on", ["set"]], ["del", "theorem", "right_inv_on_comp", ["set"]], ["del", "theorem", "right_inv_on_of_eq_on_left", ["set"]], ["del", "theorem", "right_inv_on_of_eq_on_right", ["set"]], ["del", "theorem", "right_inv_on_of_inj_on_of_left_inv_on", ["set"]], ["del", "def", "surj_on", ["set"]], ["del", "theorem", "surj_on_comp", ["set"]], ["del", "theorem", "surj_on_of_bij_on", ["set"]], ["del", "theorem", "surj_on_of_eq_on", ["set"]], ["del", "theorem", "surj_on_of_right_inv_on", ["set"]], ["del", "theorem", "surjective_iff_surj_on_univ", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "bind_def", []], ["add", "def", "disjoint", []], ["add", "theorem", "disjoint_bot_left", []], ["add", "theorem", "disjoint_bot_right", []], ["add", "theorem", "disjoint_symm", []], ["add", "theorem", "fmap_eq_image", []], ["add", "theorem", "image_Union", []], ["add", "theorem", "mem_seq_iff", []], ["add", "theorem", "monotone_preimage", []], ["add", "theorem", "preimage_Union", []], ["add", "theorem", "preimage_sUnion", []], ["add", "theorem", "Inter_neg", ["set"]], ["add", "theorem", "Inter_pos", ["set"]], ["add", "theorem", "Inter_univ", ["set"]], ["add", "theorem", "Union_empty", ["set"]], ["add", "theorem", "Union_neg", ["set"]], ["add", "theorem", "Union_pos", ["set"]], ["del", "theorem", "bind_def", ["set"]], ["del", "def", "disjoint", ["set"]], ["del", "theorem", "disjoint_bot_left", ["set"]], ["del", "theorem", "disjoint_bot_right", ["set"]], ["del", "theorem", "disjoint_symm", ["set"]], ["del", "theorem", "fmap_eq_image", ["set"]], ["del", "theorem", "image_Union", ["set"]], ["del", "theorem", "mem_seq_iff", ["set"]], ["del", "theorem", "monotone_preimage", ["set"]], ["del", "theorem", "preimage_Union", ["set"]], ["del", "theorem", "preimage_sUnion", ["set"]], ["add", "theorem", "sdiff_empty", ["set"]], ["add", "theorem", "sdiff_eq:", ["set"]], ["add", "theorem", "union_sdiff_left", ["set"]], ["add", "theorem", "union_sdiff_right", ["set"]], ["del", "theorem", "univ_subtype", ["set"]], ["add", "theorem", "univ_subtype", []]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "infi_neg", ["lattice"]], ["add", "theorem", "infi_pos", ["lattice"]], ["add", "theorem", "supr_neg", ["lattice"]], ["add", "theorem", "supr_pos", ["lattice"]]]}, {"oldPath": null, "newPath": "topology/borel_space.lean", "changes": [["add", "theorem", "borel_comap", ["measure_theory"]], ["add", "theorem", "borel_eq_generate_from_of_subbasis", ["measure_theory"]], ["add", "theorem", "borel_prod", ["measure_theory"]], ["add", "theorem", "is_measurable_closure", ["measure_theory"]], ["add", "theorem", "is_measurable_interior", ["measure_theory"]], ["add", "theorem", "is_measurable_of_is_closed", ["measure_theory"]], ["add", "theorem", "is_measurable_of_is_open", ["measure_theory"]], ["add", "theorem", "measurable_add", ["measure_theory"]], ["add", "theorem", "measurable_mul", ["measure_theory"]], ["add", "theorem", "measurable_neg", ["measure_theory"]], ["add", "theorem", "measurable_of_continuous2", ["measure_theory"]], ["add", "theorem", "measurable_of_continuous", ["measure_theory"]], ["add", "theorem", "measurable_sub", ["measure_theory"]]]}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": []}, {"oldPath": "topology/outer_measure.lean", "newPath": "topology/outer_measure.lean", "changes": [["del", "theorem", "Inter_neg", []], ["del", "theorem", "Inter_pos", []], ["del", "theorem", "Inter_univ", []], ["del", "theorem", "Union_empty", []], ["del", "theorem", "Union_neg", []], ["del", "theorem", "Union_pos", []], ["del", "theorem", "sdiff_empty", []], ["del", "theorem", "sdiff_eq:", []], ["del", "theorem", "union_sdiff_left", []], ["del", "theorem", "union_sdiff_right", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["add", "theorem", "is_open_sInter", []], ["add", "theorem", "is_open_generated_countable_inter", ["topological_space"]]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["del", "theorem", "infi_neg", []], ["del", "theorem", "infi_pos", []], ["del", "theorem", "supr_neg", []], ["del", "theorem", "supr_pos", []]]}]}, {"timestamp": 1506084727, "sha": "865ba360", "message": "feat(data/set): add functions over sets", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_preimage_subset", ["set"]], ["add", "theorem", "image_subset_eq", ["set"]], ["add", "theorem", "image_union_supset", ["set"]], ["add", "theorem", "inter_preimage_subset", ["set"]], ["add", "theorem", "preimage_diff", ["set"]], ["add", "theorem", "subset_preimage_image", ["set"]], ["add", "theorem", "union_preimage_subset", ["set"]]]}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["mod", "theorem", "countable_empty", ["set"]], ["del", "theorem", "countable_set_of_finite_subset", ["set"]], ["mod", "theorem", "countable_singleton", ["set"]]]}, {"oldPath": null, "newPath": "data/set/function.lean", "changes": [["add", "theorem", "mk", ["set", "bij_on"]], ["add", "def", "bij_on", ["set"]], ["add", "theorem", "bij_on_comp", ["set"]], ["add", "theorem", "bij_on_of_eq_on", ["set"]], ["add", "theorem", "bij_on_of_inv_on", ["set"]], ["add", "theorem", "bijective_iff_bij_on_univ", ["set"]], ["add", "theorem", "eq_on_of_left_inv_of_right_inv", ["set"]], ["add", "theorem", "image_eq_of_bij_on", ["set"]], ["add", "theorem", "image_eq_of_maps_to_of_surj_on", ["set"]], ["add", "theorem", "image_subset_of_maps_to", ["set"]], ["add", "theorem", "image_subset_of_maps_to_of_subset", ["set"]], ["add", "def", "inj_on", ["set"]], ["add", "theorem", "inj_on_comp", ["set"]], ["add", "theorem", "inj_on_empty", ["set"]], ["add", "theorem", "inj_on_of_bij_on", ["set"]], ["add", "theorem", "inj_on_of_eq_on", ["set"]], ["add", "theorem", "inj_on_of_inj_on_of_subset", ["set"]], ["add", "theorem", "inj_on_of_left_inv_on", ["set"]], ["add", "theorem", "injective_iff_inj_on_univ", ["set"]], ["add", "def", "inv_on", ["set"]], ["add", "def", "left_inv_on", ["set"]], ["add", "theorem", "left_inv_on_comp", ["set"]], ["add", "theorem", "left_inv_on_of_eq_on_left", ["set"]], ["add", "theorem", "left_inv_on_of_eq_on_right", ["set"]], ["add", "theorem", "left_inv_on_of_surj_on_right_inv_on", ["set"]], ["add", "def", "maps_to", ["set"]], ["add", "theorem", "maps_to_comp", ["set"]], ["add", "theorem", "maps_to_of_bij_on", ["set"]], ["add", "theorem", "maps_to_of_eq_on", ["set"]], ["add", "theorem", "maps_to_univ_univ", ["set"]], ["add", "def", "right_inv_on", ["set"]], ["add", "theorem", "right_inv_on_comp", ["set"]], ["add", "theorem", "right_inv_on_of_eq_on_left", ["set"]], ["add", "theorem", "right_inv_on_of_eq_on_right", ["set"]], ["add", "theorem", "right_inv_on_of_inj_on_of_left_inv_on", ["set"]], ["add", "def", "surj_on", ["set"]], ["add", "theorem", "surj_on_comp", ["set"]], ["add", "theorem", "surj_on_of_bij_on", ["set"]], ["add", "theorem", "surj_on_of_eq_on", ["set"]], ["add", "theorem", "surj_on_of_right_inv_on", ["set"]], ["add", "theorem", "surjective_iff_surj_on_univ", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["del", "theorem", "bind_def", []], ["del", "def", "disjoint", []], ["del", "theorem", "disjoint_bot_left", []], ["del", "theorem", "disjoint_bot_right", []], ["del", "theorem", "disjoint_symm", []], ["del", "theorem", "fmap_eq_image", []], ["del", "theorem", "image_Union", []], ["del", "theorem", "mem_seq_iff", []], ["del", "theorem", "monotone_preimage", []], ["del", "theorem", "preimage_Union", []], ["del", "theorem", "preimage_sUnion", []], ["del", "theorem", "Inter_neg", ["set"]], ["del", "theorem", "Inter_pos", ["set"]], ["del", "theorem", "Inter_univ", ["set"]], ["del", "theorem", "Union_empty", ["set"]], ["del", "theorem", "Union_neg", ["set"]], ["del", "theorem", "Union_pos", ["set"]], ["add", "theorem", "bind_def", ["set"]], ["add", "def", "disjoint", ["set"]], ["add", "theorem", "disjoint_bot_left", ["set"]], ["add", "theorem", "disjoint_bot_right", ["set"]], ["add", "theorem", "disjoint_symm", ["set"]], ["add", "theorem", "fmap_eq_image", ["set"]], ["add", "theorem", "image_Union", ["set"]], ["add", "theorem", "mem_seq_iff", ["set"]], ["add", "theorem", "monotone_preimage", ["set"]], ["add", "theorem", "preimage_Union", ["set"]], ["add", "theorem", "preimage_sUnion", ["set"]], ["del", "theorem", "sdiff_empty", ["set"]], ["del", "theorem", "sdiff_eq:", ["set"]], ["del", "theorem", "union_sdiff_left", ["set"]], ["del", "theorem", "union_sdiff_right", ["set"]], ["add", "theorem", "univ_subtype", ["set"]], ["del", "theorem", "univ_subtype", []]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["del", "theorem", "infi_neg", ["lattice"]], ["del", "theorem", "infi_pos", ["lattice"]], ["del", "theorem", "supr_neg", ["lattice"]], ["del", "theorem", "supr_pos", ["lattice"]]]}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": []}, {"oldPath": "topology/outer_measure.lean", "newPath": "topology/outer_measure.lean", "changes": [["add", "theorem", "Inter_neg", []], ["add", "theorem", "Inter_pos", []], ["add", "theorem", "Inter_univ", []], ["add", "theorem", "Union_empty", []], ["add", "theorem", "Union_neg", []], ["add", "theorem", "Union_pos", []], ["add", "theorem", "sdiff_empty", []], ["add", "theorem", "sdiff_eq:", []], ["add", "theorem", "union_sdiff_left", []], ["add", "theorem", "union_sdiff_right", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["del", "theorem", "is_open_sInter", []], ["del", "theorem", "is_open_generated_countable_inter", ["topological_space"]]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "infi_neg", []], ["add", "theorem", "infi_pos", []], ["add", "theorem", "supr_neg", []], ["add", "theorem", "supr_pos", []]]}]}, {"timestamp": 1506083479, "sha": "e0abdabe", "message": "feat(topology/topological_space): add countablility and separability axioms for topological spaces", "changes": [{"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["mod", "theorem", "countable_empty", ["set"]], ["add", "theorem", "countable_set_of_finite_subset", ["set"]], ["mod", "theorem", "countable_singleton", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "bind_def", []], ["add", "def", "disjoint", []], ["add", "theorem", "disjoint_bot_left", []], ["add", "theorem", "disjoint_bot_right", []], ["add", "theorem", "disjoint_symm", []], ["add", "theorem", "fmap_eq_image", []], ["add", "theorem", "image_Union", []], ["add", "theorem", "mem_seq_iff", []], ["add", "theorem", "monotone_preimage", []], ["add", "theorem", "preimage_Union", []], ["add", "theorem", "preimage_sUnion", []], ["add", "theorem", "Inter_neg", ["set"]], ["add", "theorem", "Inter_pos", ["set"]], ["add", "theorem", "Inter_univ", ["set"]], ["add", "theorem", "Union_empty", ["set"]], ["add", "theorem", "Union_neg", ["set"]], ["add", "theorem", "Union_pos", ["set"]], ["del", "theorem", "bind_def", ["set"]], ["del", "def", "disjoint", ["set"]], ["del", "theorem", "disjoint_bot_left", ["set"]], ["del", "theorem", "disjoint_bot_right", ["set"]], ["del", "theorem", "disjoint_symm", ["set"]], ["del", "theorem", "fmap_eq_image", ["set"]], ["del", "theorem", "image_Union", ["set"]], ["del", "theorem", "mem_seq_iff", ["set"]], ["del", "theorem", "monotone_preimage", ["set"]], ["del", "theorem", "preimage_Union", ["set"]], ["del", "theorem", "preimage_sUnion", ["set"]], ["add", "theorem", "sdiff_empty", ["set"]], ["add", "theorem", "sdiff_eq:", ["set"]], ["add", "theorem", "union_sdiff_left", ["set"]], ["add", "theorem", "union_sdiff_right", ["set"]], ["del", "theorem", "univ_subtype", ["set"]], ["add", "theorem", "univ_subtype", []]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "infi_neg", ["lattice"]], ["add", "theorem", "infi_pos", ["lattice"]], ["add", "theorem", "supr_neg", ["lattice"]], ["add", "theorem", "supr_pos", ["lattice"]]]}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": []}, {"oldPath": "topology/outer_measure.lean", "newPath": "topology/outer_measure.lean", "changes": [["del", "theorem", "Inter_neg", []], ["del", "theorem", "Inter_pos", []], ["del", "theorem", "Inter_univ", []], ["del", "theorem", "Union_empty", []], ["del", "theorem", "Union_neg", []], ["del", "theorem", "Union_pos", []], ["del", "theorem", "sdiff_empty", []], ["del", "theorem", "sdiff_eq:", []], ["del", "theorem", "union_sdiff_left", []], ["del", "theorem", "union_sdiff_right", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["add", "theorem", "is_open_sInter", []], ["add", "theorem", "is_open_generated_countable_inter", ["topological_space"]]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["del", "theorem", "infi_neg", []], ["del", "theorem", "infi_pos", []], ["del", "theorem", "supr_neg", []], ["del", "theorem", "supr_pos", []]]}]}, {"timestamp": 1506006653, "sha": "d5e009f9", "message": "Merge branch 'master' of https://github.com/leanprover/mathlib", "changes": []}, {"timestamp": 1506000164, "sha": "5bb145ef", "message": "feat(topology/lebesgue_measure): add Lebesgue outer measure; show that the lower half open interval is measurable", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "abs_sum_le_sum_abs", ["finset"]], ["add", "theorem", "prod_sdiff", ["finset"]]]}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "inv_pos", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "inv_inv'", []], ["add", "theorem", "inv_one", []], ["mod", "theorem", "pow_ge_one_of_ge_one", []], ["add", "theorem", "pow_inv", []], ["add", "theorem", "pow_le_pow", []], ["add", "theorem", "pow_ne_zero", []], ["add", "theorem", "pow_nonneg", []], ["mod", "theorem", "pow_pos", []], ["mod", "theorem", "pow_succ'", []]]}, {"oldPath": "algebra/ordered_monoid.lean", "newPath": "algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["add", "theorem", "exists_nat_subset_upto", ["finset"]], ["add", "theorem", "not_mem_upto", ["finset"]], ["add", "theorem", "sdiff_subset_sdiff", ["finset"]], ["mod", "theorem", "refl", ["finset", "subset"]], ["add", "theorem", "upto_subset_upto_iff", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]], ["mod", "theorem", "upto_zero", ["finset"]], ["add", "theorem", "lt_max_iff", []]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "sdiff_subset_sdiff", ["set"]], ["add", "theorem", "subset_Union", ["set"]]]}, {"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": [["add", "theorem", "sub_le_sub", ["lattice"]]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["add", "theorem", "Inf_lt_iff", []], ["add", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["add", "theorem", "lt_add_right", ["ennreal"]], ["add", "theorem", "sum_of_real", ["ennreal"]], ["add", "theorem", "supr_add", ["ennreal"]], ["add", "theorem", "infi_lt_iff", []], ["del", "theorem", "inv_inv'", []], ["del", "theorem", "inv_pos", []]]}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["add", "theorem", "add_div", []], ["add", "theorem", "mem_at_top", ["filter"]], ["add", "theorem", "has_sum_of_absolute_convergence", []], ["add", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []], ["add", "theorem", "tendsto_sum_nat_of_is_sum", []]]}, {"oldPath": null, "newPath": "topology/lebesgue_measure.lean", "changes": [["add", "def", "Ico", []], ["add", "theorem", "Ico_eq_Ico_iff", []], ["add", "theorem", "Ico_eq_empty", []], ["add", "theorem", "Ico_eq_empty_iff", []], ["add", "theorem", "Ico_inter_Iio_eq", []], ["add", "theorem", "Ico_sdiff_Iio_eq", []], ["add", "theorem", "Ico_subset_Ico_iff", []], ["add", "def", "Iio", []], ["add", "theorem", "is_lub_of_is_lub_of_tendsto", []], ["add", "theorem", "le_lebesgue_length", ["measure_theory"]], ["add", "def", "lebesgue_length", ["measure_theory"]], ["add", "theorem", "lebesgue_length_Ico", ["measure_theory"]], ["add", "theorem", "lebesgue_length_Ico_le_lebesgue_length_Ico", ["measure_theory"]], ["add", "theorem", "lebesgue_length_empty", ["measure_theory"]], ["add", "theorem", "lebesgue_length_subadditive", ["measure_theory"]], ["add", "def", "lebesgue_outer", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_Ico", ["measure_theory"]], ["add", "theorem", "lebesgue_outer_is_measurable_Iio", ["measure_theory"]], ["add", "theorem", "nhds_principal_ne_top_of_is_lub", []], ["add", "theorem", "antisymm_iff", ["set", "subset"]]]}, {"oldPath": null, "newPath": "topology/limits.lean", "changes": [["add", "theorem", "div_eq_mul_inv", []], ["add", "theorem", "exists_lt_of_nat", []], ["add", "theorem", "int_of_nat_eq_of_nat", []], ["add", "theorem", "is_sum_geometric", []], ["add", "theorem", "map_succ_at_top_eq", []], ["add", "theorem", "mul_add_one_le_pow", []], ["add", "theorem", "neg_inv", []], ["add", "def", "of_nat", []], ["add", "theorem", "of_nat_add", []], ["add", "theorem", "of_nat_bit0", []], ["add", "theorem", "of_nat_bit1", []], ["add", "theorem", "of_nat_le_of_nat", []], ["add", "theorem", "of_nat_le_of_nat_iff", []], ["add", "theorem", "of_nat_mul", []], ["add", "theorem", "of_nat_one", []], ["add", "theorem", "of_nat_sub", []], ["add", "theorem", "one_lt_inv", []], ["add", "theorem", "rat_coe_eq_of_nat", []], ["add", "theorem", "rat_of_nat_eq_of_nat", []], ["add", "theorem", "real_of_rat_of_nat_eq_of_nat", []], ["add", "theorem", "sum_geometric'", []], ["add", "theorem", "sum_geometric", []], ["add", "theorem", "tendsto_comp_succ_at_top_iff", []], ["add", "theorem", "tendsto_inverse_at_top_nhds_0", []], ["add", "theorem", "tendsto_pow_at_top_at_top_of_gt_1", []], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", []], ["add", "theorem", "zero_le_of_nat", []]]}, {"oldPath": "topology/measure.lean", "newPath": "topology/measure.lean", "changes": []}, {"oldPath": "topology/metric_space.lean", "newPath": "topology/metric_space.lean", "changes": [["add", "theorem", "mem_uniformity_dist", []]]}, {"oldPath": null, "newPath": "topology/outer_measure.lean", "changes": [["add", "theorem", "Inter_neg", []], ["add", "theorem", "Inter_pos", []], ["add", "theorem", "Inter_univ", []], ["add", "theorem", "Union_empty", []], ["add", "theorem", "Union_neg", []], ["add", "theorem", "Union_pos", []], ["add", "theorem", "or_not", ["classical"]], ["add", "theorem", "add_infi", ["ennreal"]], ["add", "theorem", "infi_add", ["ennreal"]], ["add", "theorem", "infi_add_infi", ["ennreal"]], ["add", "theorem", "infi_sum", ["ennreal"]], ["add", "theorem", "inv_lt_one", []], ["add", "def", "inf", ["measure_theory", "outer_measure"]], ["add", "theorem", "inf_space_is_measurable", ["measure_theory", "outer_measure"]], ["add", "def", "measure", ["measure_theory", "outer_measure"]], ["add", "def", "space", ["measure_theory", "outer_measure"]], ["add", "theorem", "space_is_measurable_eq", ["measure_theory", "outer_measure"]], ["add", "theorem", "subadditive", ["measure_theory", "outer_measure"]], ["add", "structure", "outer_measure", ["measure_theory"]], ["add", "theorem", "sdiff_empty", []], ["add", "theorem", "sdiff_eq:", []], ["add", "theorem", "union_sdiff_left", []], ["add", "theorem", "union_sdiff_right", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["mod", "theorem", "one_lt_two", []]]}]}, {"timestamp": 1505990003, "sha": "d9865aee", "message": "Merge branch 'master' of https://github.com/leanprover/mathlib", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["del", "theorem", "abs_sum_le_sum_abs", ["finset"]], ["del", "theorem", "prod_sdiff", ["finset"]]]}, {"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["del", "theorem", "inv_pos", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["del", "theorem", "inv_inv'", []], ["del", "theorem", "inv_one", []], ["mod", "theorem", "pow_ge_one_of_ge_one", []], ["del", "theorem", "pow_inv", []], ["del", "theorem", "pow_le_pow", []], ["del", "theorem", "pow_ne_zero", []], ["del", "theorem", "pow_nonneg", []], ["mod", "theorem", "pow_pos", []], ["mod", "theorem", "pow_succ'", []]]}, {"oldPath": "algebra/ordered_monoid.lean", "newPath": "algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["del", "theorem", "exists_nat_subset_upto", ["finset"]], ["del", "theorem", "not_mem_upto", ["finset"]], ["del", "theorem", "sdiff_subset_sdiff", ["finset"]], ["mod", "theorem", "refl", ["finset", "subset"]], ["del", "theorem", "upto_subset_upto_iff", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]], ["mod", "theorem", "upto_zero", ["finset"]], ["del", "theorem", "lt_max_iff", []]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["del", "theorem", "sdiff_subset_sdiff", ["set"]], ["del", "theorem", "subset_Union", ["set"]]]}, {"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": [["del", "theorem", "sub_le_sub", ["lattice"]]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["del", "theorem", "Inf_lt_iff", []], ["del", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["del", "theorem", "lt_add_right", ["ennreal"]], ["del", "theorem", "sum_of_real", ["ennreal"]], ["del", "theorem", "supr_add", ["ennreal"]], ["del", "theorem", "infi_lt_iff", []], ["add", "theorem", "inv_inv'", []], ["add", "theorem", "inv_pos", []]]}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["del", "theorem", "add_div", []], ["del", "theorem", "mem_at_top", ["filter"]], ["del", "theorem", "has_sum_of_absolute_convergence", []], ["del", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []], ["del", "theorem", "tendsto_sum_nat_of_is_sum", []]]}, {"oldPath": "topology/limits.lean", "newPath": null, "changes": [["del", "theorem", "div_eq_mul_inv", []], ["del", "theorem", "exists_lt_of_nat", []], ["del", "theorem", "int_of_nat_eq_of_nat", []], ["del", "theorem", "is_sum_geometric", []], ["del", "theorem", "map_succ_at_top_eq", []], ["del", "theorem", "mul_add_one_le_pow", []], ["del", "theorem", "neg_inv", []], ["del", "def", "of_nat", []], ["del", "theorem", "of_nat_add", []], ["del", "theorem", "of_nat_bit0", []], ["del", "theorem", "of_nat_bit1", []], ["del", "theorem", "of_nat_le_of_nat", []], ["del", "theorem", "of_nat_le_of_nat_iff", []], ["del", "theorem", "of_nat_mul", []], ["del", "theorem", "of_nat_one", []], ["del", "theorem", "of_nat_sub", []], ["del", "theorem", "one_lt_inv", []], ["del", "theorem", "rat_coe_eq_of_nat", []], ["del", "theorem", "rat_of_nat_eq_of_nat", []], ["del", "theorem", "real_of_rat_of_nat_eq_of_nat", []], ["del", "theorem", "sum_geometric'", []], ["del", "theorem", "sum_geometric", []], ["del", "theorem", "tendsto_comp_succ_at_top_iff", []], ["del", "theorem", "tendsto_inverse_at_top_nhds_0", []], ["del", "theorem", "tendsto_pow_at_top_at_top_of_gt_1", []], ["del", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", []], ["del", "theorem", "zero_le_of_nat", []]]}, {"oldPath": "topology/measure.lean", "newPath": "topology/measure.lean", "changes": []}, {"oldPath": "topology/metric_space.lean", "newPath": "topology/metric_space.lean", "changes": [["del", "theorem", "mem_uniformity_dist", []]]}, {"oldPath": "topology/outer_measure.lean", "newPath": null, "changes": [["del", "theorem", "Inter_neg", []], ["del", "theorem", "Inter_pos", []], ["del", "theorem", "Inter_univ", []], ["del", "theorem", "Union_empty", []], ["del", "theorem", "Union_neg", []], ["del", "theorem", "Union_pos", []], ["del", "theorem", "or_not", ["classical"]], ["del", "theorem", "add_infi", ["ennreal"]], ["del", "theorem", "infi_add", ["ennreal"]], ["del", "theorem", "infi_add_infi", ["ennreal"]], ["del", "theorem", "infi_sum", ["ennreal"]], ["del", "theorem", "inv_lt_one", []], ["del", "def", "inf", ["measure_theory", "outer_measure"]], ["del", "theorem", "inf_space_is_measurable", ["measure_theory", "outer_measure"]], ["del", "def", "measure", ["measure_theory", "outer_measure"]], ["del", "def", "space", ["measure_theory", "outer_measure"]], ["del", "theorem", "space_is_measurable_eq", ["measure_theory", "outer_measure"]], ["del", "theorem", "subadditive", ["measure_theory", "outer_measure"]], ["del", "structure", "outer_measure", ["measure_theory"]], ["del", "theorem", "sdiff_empty", []], ["del", "theorem", "sdiff_eq:", []], ["del", "theorem", "union_sdiff_left", []], ["del", "theorem", "union_sdiff_right", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["mod", "theorem", "one_lt_two", []]]}]}, {"timestamp": 1505937724, "sha": "42355947", "message": "feat(topology/outer_measure): add outer measures and tools for Caratheodorys extension method", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": [["add", "theorem", "inv_pos", []]]}, {"oldPath": "algebra/ordered_monoid.lean", "newPath": "algebra/ordered_monoid.lean", "changes": []}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "refl", ["finset", "subset"]], ["mod", "theorem", "upto_succ", ["finset"]], ["mod", "theorem", "upto_zero", ["finset"]], ["add", "theorem", "lt_max_iff", []]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "sdiff_subset_sdiff", ["set"]], ["add", "theorem", "subset_Union", ["set"]]]}, {"oldPath": "order/boolean_algebra.lean", "newPath": "order/boolean_algebra.lean", "changes": [["add", "theorem", "sub_le_sub", ["lattice"]]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["add", "theorem", "Inf_lt_iff", []], ["add", "theorem", "le_of_forall_epsilon_le", ["ennreal"]], ["add", "theorem", "lt_add_right", ["ennreal"]], ["add", "theorem", "sum_of_real", ["ennreal"]], ["add", "theorem", "supr_add", ["ennreal"]], ["add", "theorem", "infi_lt_iff", []], ["del", "theorem", "inv_inv'", []], ["del", "theorem", "inv_pos", []]]}, {"oldPath": "topology/limits.lean", "newPath": "topology/limits.lean", "changes": [["del", "theorem", "inv_pos", []]]}, {"oldPath": "topology/measure.lean", "newPath": "topology/measure.lean", "changes": []}, {"oldPath": null, "newPath": "topology/outer_measure.lean", "changes": [["add", "theorem", "Inter_neg", []], ["add", "theorem", "Inter_pos", []], ["add", "theorem", "Inter_univ", []], ["add", "theorem", "Union_empty", []], ["add", "theorem", "Union_neg", []], ["add", "theorem", "Union_pos", []], ["add", "theorem", "or_not", ["classical"]], ["add", "theorem", "add_infi", ["ennreal"]], ["add", "theorem", "infi_add", ["ennreal"]], ["add", "theorem", "infi_add_infi", ["ennreal"]], ["add", "theorem", "infi_sum", ["ennreal"]], ["add", "theorem", "inv_lt_one", []], ["add", "def", "inf", ["measure_theory", "outer_measure"]], ["add", "theorem", "inf_space_is_measurable", ["measure_theory", "outer_measure"]], ["add", "def", "measure", ["measure_theory", "outer_measure"]], ["add", "def", "space", ["measure_theory", "outer_measure"]], ["add", "theorem", "space_is_measurable_eq", ["measure_theory", "outer_measure"]], ["add", "theorem", "subadditive", ["measure_theory", "outer_measure"]], ["add", "structure", "outer_measure", ["measure_theory"]], ["add", "theorem", "sdiff_empty", []], ["add", "theorem", "sdiff_eq:", []], ["add", "theorem", "union_sdiff_left", []], ["add", "theorem", "union_sdiff_right", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["mod", "theorem", "one_lt_two", []]]}]}, {"timestamp": 1505932146, "sha": "46988284", "message": "feat(topology): prove geometric series", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "abs_sum_le_sum_abs", ["finset"]], ["add", "theorem", "prod_sdiff", ["finset"]]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["add", "theorem", "inv_inv'", []], ["add", "theorem", "inv_one", []], ["mod", "theorem", "pow_ge_one_of_ge_one", []], ["add", "theorem", "pow_inv", []], ["add", "theorem", "pow_le_pow", []], ["add", "theorem", "pow_ne_zero", []], ["add", "theorem", "pow_nonneg", []], ["mod", "theorem", "pow_pos", []], ["mod", "theorem", "pow_succ'", []]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["add", "theorem", "exists_nat_subset_upto", ["finset"]], ["add", "theorem", "not_mem_upto", ["finset"]], ["add", "theorem", "sdiff_subset_sdiff", ["finset"]], ["add", "theorem", "upto_subset_upto_iff", ["finset"]]]}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["add", "theorem", "add_div", []], ["add", "theorem", "mem_at_top", ["filter"]], ["add", "theorem", "has_sum_of_absolute_convergence", []], ["add", "theorem", "is_sum_iff_tendsto_nat_of_nonneg", []], ["add", "theorem", "tendsto_sum_nat_of_is_sum", []]]}, {"oldPath": null, "newPath": "topology/limits.lean", "changes": [["add", "theorem", "div_eq_mul_inv", []], ["add", "theorem", "exists_lt_of_nat", []], ["add", "theorem", "int_of_nat_eq_of_nat", []], ["add", "theorem", "inv_pos", []], ["add", "theorem", "is_sum_geometric", []], ["add", "theorem", "map_succ_at_top_eq", []], ["add", "theorem", "mul_add_one_le_pow", []], ["add", "theorem", "neg_inv", []], ["add", "def", "of_nat", []], ["add", "theorem", "of_nat_add", []], ["add", "theorem", "of_nat_bit0", []], ["add", "theorem", "of_nat_bit1", []], ["add", "theorem", "of_nat_le_of_nat", []], ["add", "theorem", "of_nat_le_of_nat_iff", []], ["add", "theorem", "of_nat_mul", []], ["add", "theorem", "of_nat_one", []], ["add", "theorem", "of_nat_sub", []], ["add", "theorem", "one_lt_inv", []], ["add", "theorem", "rat_coe_eq_of_nat", []], ["add", "theorem", "rat_of_nat_eq_of_nat", []], ["add", "theorem", "real_of_rat_of_nat_eq_of_nat", []], ["add", "theorem", "sum_geometric'", []], ["add", "theorem", "sum_geometric", []], ["add", "theorem", "tendsto_comp_succ_at_top_iff", []], ["add", "theorem", "tendsto_inverse_at_top_nhds_0", []], ["add", "theorem", "tendsto_pow_at_top_at_top_of_gt_1", []], ["add", "theorem", "tendsto_pow_at_top_nhds_0_of_lt_1", []], ["add", "theorem", "zero_le_of_nat", []]]}, {"oldPath": "topology/metric_space.lean", "newPath": "topology/metric_space.lean", "changes": [["add", "theorem", "mem_uniformity_dist", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}]}, {"timestamp": 1505789714, "sha": "6b93e932", "message": "refactor(data/equiv,encodable): refactor/simplify proofs", "changes": [{"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["mod", "def", "choose", ["encodable"]], ["mod", "theorem", "choose_spec", ["encodable"]], ["add", "def", "choose_x", ["encodable"]], ["del", "def", "pn", ["encodable"]], ["del", "theorem", "succ_ne_zero", []]]}, {"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq_inverse_apply", ["equiv"]], ["mod", "def", "bool_prod_equiv_sum", ["equiv"]], ["add", "def", "bool_prod_nat_equiv_nat", ["equiv"]], ["mod", "theorem", "coe_fn_symm_mk", ["equiv"]], ["add", "def", "equiv_empty", ["equiv"]], ["mod", "def", "false_equiv_empty", ["equiv"]], ["mod", "theorem", "inverse_apply_apply", ["equiv"]], ["mod", "def", "nat_equiv_nat_sum_unit", ["equiv"]], ["mod", "def", "nat_prod_nat_equiv_nat", ["equiv"]], ["mod", "def", "nat_sum_bool_equiv_nat", ["equiv"]], ["add", "def", "nat_sum_nat_equiv_nat", ["equiv"]], ["mod", "def", "nat_sum_unit_equiv_nat", ["equiv"]], ["add", "def", "option_equiv_sum_unit", ["equiv"]], ["add", "def", "prod_equiv_of_equiv_nat", ["equiv"]], ["mod", "def", "subtype_equiv_of_subtype", ["equiv"]]]}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "bodd_div2_eq", ["nat"]]]}, {"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "theorem", "bind_some", ["option"]]]}, {"oldPath": "data/set/enumerate.lean", "newPath": "data/set/enumerate.lean", "changes": [["del", "theorem", "bind_some", ["option"]]]}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1505774501, "sha": "1e4c869d", "message": "doc(tactic/interactive): rename simpf -> simpa, document rcases and simpa", "changes": [{"oldPath": "algebra/ordered_group.lean", "newPath": "algebra/ordered_group.lean", "changes": []}, {"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": []}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": []}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": []}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1505772522, "sha": "cb4a92e3", "message": "chore(algebra/ordered_ring): fix names, update to lean", "changes": [{"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": []}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["add", "theorem", "unpair_le", ["nat"]], ["mod", "theorem", "unpair_lt", ["nat"]], ["del", "theorem", "unpair_lt_aux", ["nat"]]]}]}, {"timestamp": 1505771868, "sha": "06e797b4", "message": "refactor(data/nat/pairing): improve proof readability\nin response to review comments on 0acdf1c", "changes": [{"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["mod", "theorem", "unpair_lt", ["nat"]]]}]}, {"timestamp": 1505662683, "sha": "0acdf1cc", "message": "feat(data/nat): better sqrt + pairing, prime numbers, renames...", "changes": [{"oldPath": "algebra/functions.lean", "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "lt_min_iff", []], ["add", "theorem", "max_lt_iff", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "eq_or_lt_of_le", []], ["add", "theorem", "lt_iff_le_and_ne", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "mul_dvd_mul_iff_left", []], ["add", "theorem", "mul_dvd_mul_iff_right", []]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "bit0_le_bit", ["nat"]], ["add", "theorem", "bit_le", ["nat"]], ["add", "theorem", "bit_le_bit1", ["nat"]], ["add", "theorem", "bit_lt_bit0", ["nat"]], ["add", "theorem", "bit_lt_bit", ["nat"]], ["add", "theorem", "bit_ne_zero", ["nat"]], ["add", "theorem", "dvd_fact", ["nat"]], ["add", "def", "fact", ["nat"]], ["add", "theorem", "fact_dvd_fact", ["nat"]], ["add", "theorem", "fact_le", ["nat"]], ["add", "theorem", "fact_ne_zero", ["nat"]], ["add", "theorem", "fact_one", ["nat"]], ["add", "theorem", "fact_pos", ["nat"]], ["add", "theorem", "fact_succ", ["nat"]], ["add", "theorem", "fact_zero", ["nat"]], ["mod", "theorem", "le_add_one_iff", ["nat"]], ["mod", "theorem", "le_zero_iff", ["nat"]], ["add", "theorem", "lt_pred_of_succ_lt", ["nat"]], ["add", "theorem", "lt_size", ["nat"]], ["add", "theorem", "lt_size_self", ["nat"]], ["add", "theorem", "lt_succ_iff", ["nat"]], ["del", "theorem", "lt_succ_iff_le", ["nat"]], ["add", "theorem", "lt_succ_iff_lt_or_eq", ["nat"]], ["add", "theorem", "mul_self_inj", ["nat"]], ["add", "theorem", "pos_iff_ne_zero'", ["nat"]], ["add", "theorem", "pos_iff_ne_zero", ["nat"]], ["add", "theorem", "pow_add", ["nat"]], ["add", "theorem", "pow_dvd_pow", ["nat"]], ["add", "theorem", "shiftl'_ne_zero_left", ["nat"]], ["add", "theorem", "shiftl'_tt_ne_zero", ["nat"]], ["add", "theorem", "size_bit0", ["nat"]], ["add", "theorem", "size_bit1", ["nat"]], ["add", "theorem", "size_bit", ["nat"]], ["add", "theorem", "size_eq_zero", ["nat"]], ["add", "theorem", "size_le", ["nat"]], ["add", "theorem", "size_le_size", ["nat"]], ["add", "theorem", "size_pos", ["nat"]], ["add", "theorem", "size_pow", ["nat"]], ["add", "theorem", "size_shiftl'", ["nat"]], ["add", "theorem", "size_shiftl", ["nat"]], ["add", "theorem", "size_zero", ["nat"]], ["add", "theorem", "sub_le_left_iff_le_add", ["nat"]], ["add", "theorem", "sub_le_right_iff_le_add", ["nat"]], ["mod", "theorem", "succ_le_succ_iff", ["nat"]]]}, {"oldPath": "data/nat/bquant.lean", "newPath": null, "changes": [["del", "def", "ball'", []], ["del", "def", "ball", []], ["del", "theorem", "ball_of_ball_succ'", []], ["del", "theorem", "ball_of_ball_succ", []], ["del", "theorem", "ball_succ_of_ball", []], ["del", "theorem", "ball_zero'", []], ["del", "theorem", "ball_zero", []], ["del", "theorem", "not_ball_of_not", []], ["del", "theorem", "not_ball_succ_of_not_ball", []], ["del", "def", "step_p", []]]}, {"oldPath": "data/nat/sub.lean", "newPath": "data/nat/dist.lean", "changes": []}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["add", "theorem", "coprime_dvd_left", ["nat", "coprime"]], ["add", "theorem", "coprime_dvd_right", ["nat", "coprime"]], ["add", "theorem", "coprime_mul_left", ["nat", "coprime"]], ["add", "theorem", "coprime_mul_left_right", ["nat", "coprime"]], ["add", "theorem", "coprime_mul_right", ["nat", "coprime"]], ["add", "theorem", "coprime_mul_right_right", ["nat", "coprime"]], ["add", "theorem", "dvd_of_dvd_mul_left", ["nat", "coprime"]], ["add", "theorem", "dvd_of_dvd_mul_right", ["nat", "coprime"]], ["add", "theorem", "eq_one_of_dvd", ["nat", "coprime"]], ["add", "theorem", "gcd_eq_one", ["nat", "coprime"]], ["add", "theorem", "gcd_mul_left_cancel", ["nat", "coprime"]], ["add", "theorem", "gcd_mul_left_cancel_right", ["nat", "coprime"]], ["add", "theorem", "gcd_mul_right_cancel", ["nat", "coprime"]], ["add", "theorem", "gcd_mul_right_cancel_right", ["nat", "coprime"]], ["add", "theorem", "mul", ["nat", "coprime"]], ["add", "theorem", "mul_right", ["nat", "coprime"]], ["add", "theorem", "pow", ["nat", "coprime"]], ["add", "theorem", "pow_left", ["nat", "coprime"]], ["add", "theorem", "pow_right", ["nat", "coprime"]], ["add", "theorem", "symm", ["nat", "coprime"]], ["del", "theorem", "coprime_mul", ["nat"]], ["del", "theorem", "coprime_mul_right", ["nat"]], ["del", "theorem", "coprime_of_coprime_dvd_left", ["nat"]], ["del", "theorem", "coprime_of_coprime_dvd_right", ["nat"]], ["del", "theorem", "coprime_of_coprime_mul_left", ["nat"]], ["del", "theorem", "coprime_of_coprime_mul_left_right", ["nat"]], ["del", "theorem", "coprime_of_coprime_mul_right", ["nat"]], ["del", "theorem", "coprime_of_coprime_mul_right_right", ["nat"]], ["del", "theorem", "coprime_pow", ["nat"]], ["del", "theorem", "coprime_pow_left", ["nat"]], ["del", "theorem", "coprime_pow_right", ["nat"]], ["del", "theorem", "coprime_swap", ["nat"]], ["del", "theorem", "dvd_of_coprime_of_dvd_mul_left", ["nat"]], ["del", "theorem", "dvd_of_coprime_of_dvd_mul_right", ["nat"]], ["add", "theorem", "gcd_eq_left", ["nat"]], ["del", "theorem", "gcd_eq_one_of_coprime", ["nat"]], ["add", "theorem", "gcd_eq_right", ["nat"]], ["del", "theorem", "gcd_mul_left_cancel_of_coprime", ["nat"]], ["del", "theorem", "gcd_mul_left_cancel_of_coprime_right", ["nat"]], ["del", "theorem", "gcd_mul_right_cancel_of_coprime", ["nat"]], ["del", "theorem", "gcd_mul_right_cancel_of_coprime_right", ["nat"]]]}, {"oldPath": "data/nat/pairing.lean", "newPath": "data/nat/pairing.lean", "changes": [["mod", "theorem", "unpair_lt", ["nat"]], ["mod", "theorem", "unpair_lt_aux", ["nat"]]]}, {"oldPath": null, "newPath": "data/nat/prime.lean", "changes": [["add", "theorem", "coprime_or_dvd_of_prime", ["nat"]], ["add", "theorem", "coprime_pow_primes", ["nat"]], ["add", "theorem", "coprime_primes", ["nat"]], ["add", "def", "decidable_prime_1", ["nat"]], ["add", "theorem", "dvd_of_prime_of_dvd_pow", ["nat"]], ["add", "theorem", "dvd_prime", ["nat"]], ["add", "theorem", "dvd_prime_ge_two", ["nat"]], ["add", "theorem", "dvd_prime_pow", ["nat"]], ["add", "theorem", "exists_dvd_of_not_prime2", ["nat"]], ["add", "theorem", "exists_dvd_of_not_prime", ["nat"]], ["add", "theorem", "exists_infinite_primes", ["nat"]], ["add", "theorem", "exists_prime_and_dvd", ["nat"]], ["add", "def", "min_fac", ["nat"]], ["add", "def", "min_fac_aux", ["nat"]], ["add", "theorem", "min_fac_aux_has_prop", ["nat"]], ["add", "theorem", "min_fac_dvd", ["nat"]], ["add", "theorem", "min_fac_eq", ["nat"]], ["add", "theorem", "min_fac_has_prop", ["nat"]], ["add", "theorem", "min_fac_le", ["nat"]], ["add", "theorem", "min_fac_le_of_dvd", ["nat"]], ["add", "theorem", "min_fac_one", ["nat"]], ["add", "theorem", "min_fac_pos", ["nat"]], ["add", "theorem", "min_fac_prime", ["nat"]], ["add", "theorem", "min_fac_zero", ["nat"]], ["add", "theorem", "not_prime_iff_min_fac_lt", ["nat"]], ["add", "theorem", "not_prime_one", ["nat"]], ["add", "theorem", "not_prime_zero", ["nat"]], ["add", "theorem", "coprime_iff_not_dvd", ["nat", "prime"]], ["add", "theorem", "coprime_pow_of_not_dvd", ["nat", "prime"]], ["add", "theorem", "dvd_iff_not_coprime", ["nat", "prime"]], ["add", "theorem", "dvd_mul", ["nat", "prime"]], ["add", "theorem", "ge_two", ["nat", "prime"]], ["add", "theorem", "gt_one", ["nat", "prime"]], ["add", "theorem", "not_dvd_mul", ["nat", "prime"]], ["add", "theorem", "not_dvd_one", ["nat", "prime"]], ["add", "theorem", "pos", ["nat", "prime"]], ["add", "theorem", "pred_pos", ["nat", "prime"]], ["add", "def", "prime", ["nat"]], ["add", "theorem", "prime_def_le_sqrt", ["nat"]], ["add", "theorem", "prime_def_lt'", ["nat"]], ["add", "theorem", "prime_def_lt", ["nat"]], ["add", "theorem", "prime_def_min_fac", ["nat"]], ["add", "theorem", "prime_three", ["nat"]], ["add", "theorem", "prime_two", ["nat"]], ["add", "theorem", "succ_pred_prime", ["nat"]]]}, {"oldPath": "data/nat/sqrt.lean", "newPath": "data/nat/sqrt.lean", "changes": [["del", "theorem", "eq_zero_of_sqrt_eq_zero", ["nat"]], ["add", "theorem", "le_sqrt", ["nat"]], ["mod", "theorem", "le_three_of_sqrt_eq_one", ["nat"]], ["add", "theorem", "lt_succ_sqrt", ["nat"]], ["del", "theorem", "mul_square_cancel", ["nat"]], ["add", "def", "sqrt", ["nat"]], ["add", "theorem", "sqrt_add_eq", ["nat"]], ["add", "def", "sqrt_aux", ["nat"]], ["add", "theorem", "sqrt_aux_0", ["nat"]], ["add", "theorem", "sqrt_aux_1", ["nat"]], ["add", "theorem", "sqrt_aux_2", ["nat"]], ["add", "theorem", "sqrt_aux_dec", ["nat"]], ["mod", "theorem", "sqrt_eq", ["nat"]], ["add", "theorem", "sqrt_eq_zero", ["nat"]], ["add", "theorem", "sqrt_le", ["nat"]], ["add", "theorem", "sqrt_le_add", ["nat"]], ["add", "theorem", "sqrt_le_self", ["nat"]], ["add", "theorem", "sqrt_le_sqrt", ["nat"]], ["del", "theorem", "sqrt_lower", ["nat"]], ["mod", "theorem", "sqrt_lt", ["nat"]], ["add", "theorem", "sqrt_lt_self", ["nat"]], ["del", "theorem", "sqrt_mono", ["nat"]], ["del", "theorem", "sqrt_mul_eq", ["nat"]], ["add", "theorem", "sqrt_pos", ["nat"]], ["del", "theorem", "sqrt_pos_of_pos", ["nat"]], ["del", "theorem", "sqrt_upper", ["nat"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "imp", ["not"]]]}, {"oldPath": "tactic/rcases.lean", "newPath": "tactic/rcases.lean", "changes": []}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": [["del", "theorem", "lt_succ_iff", ["nat"]]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["del", "theorem", "lt_min_iff", []], ["del", "theorem", "max_lt_iff", []]]}]}, {"timestamp": 1505532414, "sha": "f542d423", "message": "chore(algebra/ordered_ring): update to lean", "changes": [{"oldPath": "algebra/ordered_ring.lean", "newPath": "algebra/ordered_ring.lean", "changes": [["del", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["linear_ordered_ring"]]]}]}, {"timestamp": 1505530501, "sha": "fe1ad4b0", "message": "feat(data/rat): derive properties of rat floor and ceil", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "le_to_nat", ["int"]], ["add", "theorem", "lt_succ_self", ["int"]], ["add", "theorem", "pred_self_lt", ["int"]], ["add", "theorem", "to_nat_eq_max", ["int"]], ["add", "theorem", "to_nat_le", ["int"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "ceil_add_int", ["rat"]], ["add", "theorem", "ceil_coe", ["rat"]], ["add", "theorem", "ceil_le", ["rat"]], ["add", "theorem", "ceil_mono", ["rat"]], ["add", "theorem", "ceil_sub_int", ["rat"]], ["mod", "theorem", "coe_int_add", ["rat"]], ["mod", "theorem", "coe_int_eq_mk", ["rat"]], ["add", "theorem", "coe_int_inj", ["rat"]], ["add", "theorem", "coe_int_le", ["rat"]], ["add", "theorem", "coe_int_lt", ["rat"]], ["add", "theorem", "coe_int_mul", ["rat"]], ["add", "theorem", "coe_int_neg", ["rat"]], ["mod", "theorem", "coe_int_one", ["rat"]], ["mod", "theorem", "coe_int_sub", ["rat"]], ["mod", "theorem", "coe_nat_rat_eq_mk", ["rat"]], ["del", "theorem", "exists_upper_nat_bound", ["rat"]], ["add", "theorem", "floor_add_int", ["rat"]], ["add", "theorem", "floor_coe", ["rat"]], ["add", "theorem", "floor_le", ["rat"]], ["add", "theorem", "floor_lt", ["rat"]], ["add", "theorem", "floor_mono", ["rat"]], ["add", "theorem", "floor_sub_int", ["rat"]], ["add", "theorem", "le_ceil", ["rat"]], ["add", "theorem", "le_floor", ["rat"]], ["add", "theorem", "le_nat_ceil", ["rat"]], ["del", "theorem", "le_of_of_int_le_of_int", ["rat"]], ["add", "theorem", "lt_nat_ceil", ["rat"]], ["add", "theorem", "lt_succ_floor", ["rat"]], ["add", "theorem", "mk_le", ["rat"]], ["mod", "def", "nat_ceil", ["rat"]], ["add", "theorem", "nat_ceil_add_nat", ["rat"]], ["del", "theorem", "nat_ceil_add_one_eq", ["rat"]], ["add", "theorem", "nat_ceil_coe", ["rat"]], ["add", "theorem", "nat_ceil_le", ["rat"]], ["mod", "theorem", "nat_ceil_lt_add_one", ["rat"]], ["del", "theorem", "nat_ceil_min", ["rat"]], ["mod", "theorem", "nat_ceil_mono", ["rat"]], ["del", "theorem", "nat_ceil_spec", ["rat"]], ["mod", "theorem", "nat_ceil_zero", ["rat"]], ["add", "theorem", "sub_def", ["rat"]]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}]}, {"timestamp": 1505530433, "sha": "a1c3e2de", "message": "feat(algebra): new algebra theorems (more iff)", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": null, "newPath": "algebra/functions.lean", "changes": [["add", "theorem", "abs_eq_zero", []], ["add", "theorem", "abs_le", []], ["add", "theorem", "abs_lt", []], ["add", "theorem", "le_min_iff", []], ["add", "theorem", "max_le_iff", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["del", "theorem", "abs_eq_zero_iff", []], ["del", "theorem", "abs_le_iff", []], ["del", "theorem", "abs_lt_iff", []], ["add", "theorem", "add_sub_cancel'", []], ["add", "theorem", "add_sub_cancel'_right", []], ["del", "theorem", "eq_iff_sub_eq_zero", []], ["mod", "theorem", "eq_inv_iff_eq_inv", []], ["add", "theorem", "eq_inv_mul_iff_mul_eq", []], ["add", "theorem", "eq_mul_inv_iff_mul_eq", []], ["add", "theorem", "eq_of_inv_eq_inv", []], ["del", "theorem", "eq_of_mul_inv_eq_one", []], ["del", "theorem", "eq_one_of_inv_eq_one", []], ["add", "theorem", "eq_sub_iff_add_eq'", []], ["mod", "theorem", "eq_sub_iff_add_eq", []], ["add", "theorem", "inv_eq_iff_inv_eq", []], ["del", "theorem", "inv_eq_inv_iff_eq", []], ["add", "theorem", "inv_eq_one", []], ["del", "theorem", "inv_eq_one_iff_eq_one", []], ["add", "theorem", "inv_inj'", []], ["add", "theorem", "inv_mul_eq_iff_eq_mul", []], ["add", "theorem", "inv_ne_one", []], ["mod", "theorem", "le_sub_iff_add_le", []], ["mod", "theorem", "left_inverse_inv", []], ["del", "theorem", "mul_eq_iff_eq_inv_mul", []], ["del", "theorem", "mul_eq_iff_eq_mul_inv", []], ["add", "theorem", "mul_eq_one_iff_eq_inv", []], ["add", "theorem", "mul_eq_one_iff_inv_eq", []], ["add", "theorem", "mul_inv_eq_iff_eq_mul", []], ["add", "theorem", "mul_inv_eq_one", []], ["add", "theorem", "mul_left_inj", []], ["add", "theorem", "mul_right_inj", []], ["add", "theorem", "mul_self_iff_eq_one", []], ["add", "theorem", "neg_add'", []], ["add", "theorem", "sub_add_sub_cancel", []], ["add", "theorem", "sub_eq_iff_eq_add'", []], ["mod", "theorem", "sub_eq_iff_eq_add", []], ["add", "theorem", "sub_eq_neg_add", []], ["add", "theorem", "sub_eq_zero", []], ["mod", "theorem", "sub_le_iff_le_add", []], ["add", "theorem", "sub_left_inj", []], ["add", "theorem", "sub_ne_zero", []], ["add", "theorem", "sub_right_inj", []], ["add", "theorem", "sub_sub_sub_cancel_left", []], ["add", "theorem", "sub_sub_sub_cancel_right", []], ["add", "theorem", "sub_sub_swap", []]]}, {"oldPath": null, "newPath": "algebra/order.lean", "changes": [["add", "theorem", "eq_of_forall_ge_iff", []], ["add", "theorem", "eq_of_forall_le_iff", []], ["add", "theorem", "le_iff_eq_or_lt", []], ["add", "theorem", "le_iff_le_iff_lt_iff_lt", []], ["add", "theorem", "le_imp_le_iff_lt_imp_lt", []], ["add", "theorem", "le_of_not_lt", []], ["add", "theorem", "not_le", []], ["add", "theorem", "not_le_of_lt", []], ["add", "theorem", "not_lt", []], ["add", "theorem", "not_lt_iff_eq_or_lt", []], ["add", "theorem", "not_lt_of_le", []], ["add", "theorem", "not_lt_of_lt", []]]}, {"oldPath": null, "newPath": "algebra/ordered_group.lean", "changes": [["add", "theorem", "add_eq_zero_iff_eq_zero_of_nonneg", []], ["add", "theorem", "add_le_add_iff_left", []], ["add", "theorem", "add_le_add_iff_right", []], ["add", "theorem", "add_lt_add_iff_left", []], ["add", "theorem", "add_lt_add_iff_right", []], ["add", "theorem", "le_add_iff_nonneg_left", []], ["add", "theorem", "le_add_iff_nonneg_right", []], ["add", "theorem", "le_neg", []], ["add", "theorem", "le_neg_add_iff_add_le", []], ["add", "theorem", "le_sub_left_iff_add_le", []], ["add", "theorem", "le_sub_right_iff_add_le", []], ["add", "theorem", "lt_add_iff_pos_left", []], ["add", "theorem", "lt_add_iff_pos_right", []], ["add", "theorem", "lt_neg", []], ["add", "theorem", "lt_neg_add_iff_add_lt", []], ["add", "theorem", "lt_sub_left_iff_add_lt", []], ["add", "theorem", "lt_sub_right_iff_add_lt", []], ["add", "theorem", "neg_add_le_iff_le_add", []], ["add", "theorem", "neg_add_le_iff_le_add_right", []], ["add", "theorem", "neg_add_lt_iff_lt_add", []], ["add", "theorem", "neg_add_lt_iff_lt_add_right", []], ["add", "theorem", "neg_le", []], ["add", "theorem", "neg_le_neg_iff", []], ["add", "theorem", "neg_le_sub_iff_le_add", []], ["add", "theorem", "neg_le_sub_iff_le_add_left", []], ["add", "theorem", "neg_lt", []], ["add", "theorem", "neg_lt_neg_iff", []], ["add", "theorem", "neg_lt_sub_iff_lt_add", []], ["add", "theorem", "neg_lt_sub_iff_lt_add_left", []], ["add", "theorem", "neg_lt_zero", []], ["add", "theorem", "neg_nonneg", []], ["add", "theorem", "neg_nonpos", []], ["add", "theorem", "neg_pos", []], ["add", "theorem", "nonneg_def", ["nonneg_comm_group"]], ["add", "theorem", "nonneg_total_iff", ["nonneg_comm_group"]], ["add", "theorem", "not_zero_pos", ["nonneg_comm_group"]], ["add", "theorem", "pos_def", ["nonneg_comm_group"]], ["add", "def", "to_decidable_linear_ordered_comm_group", ["nonneg_comm_group"]], ["add", "theorem", "zero_lt_iff_nonneg_nonneg", ["nonneg_comm_group"]], ["add", "theorem", "sub_le", []], ["add", "theorem", "sub_le_self_iff", []], ["add", "theorem", "sub_le_sub_iff_left", []], ["add", "theorem", "sub_le_sub_iff_right", []], ["add", "theorem", "sub_left_le_iff_le_add", []], ["add", "theorem", "sub_left_lt_iff_lt_add", []], ["add", "theorem", "sub_lt", []], ["add", "theorem", "sub_lt_self_iff", []], ["add", "theorem", "sub_lt_sub_iff_left", []], ["add", "theorem", "sub_lt_sub_iff_right", []], ["add", "theorem", "sub_lt_zero", []], ["add", "theorem", "sub_nonneg", []], ["add", "theorem", "sub_nonpos", []], ["add", "theorem", "sub_pos", []], ["add", "theorem", "sub_right_le_iff_le_add", []], ["add", "theorem", "sub_right_lt_iff_lt_add", []]]}, {"oldPath": null, "newPath": "algebra/ordered_ring.lean", "changes": [["add", "theorem", "le_mul_iff_one_le_left", []], ["add", "theorem", "le_mul_iff_one_le_right", []], ["add", "theorem", "le_mul_of_ge_one_left'", []], ["add", "theorem", "le_mul_of_ge_one_right'", []], ["add", "theorem", "eq_zero_or_eq_zero_of_mul_eq_zero", ["linear_ordered_ring"]], ["add", "theorem", "lt_mul_iff_one_lt_left", []], ["add", "theorem", "lt_mul_iff_one_lt_right", []], ["add", "theorem", "lt_mul_of_gt_one_right'", []], ["add", "theorem", "mul_le_mul_left", []], ["add", "theorem", "mul_le_mul_left_of_neg", []], ["add", "theorem", "mul_le_mul_right", []], ["add", "theorem", "mul_le_mul_right_of_neg", []], ["add", "theorem", "mul_lt_mul_left", []], ["add", "theorem", "mul_lt_mul_left_of_neg", []], ["add", "theorem", "mul_lt_mul_right", []], ["add", "theorem", "mul_lt_mul_right_of_neg", []], ["add", "def", "to_linear_nonneg_ring", ["nonneg_ring", "nonneg_ring"]]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "mul_left_inj", ["domain"]], ["add", "theorem", "mul_right_inj", ["domain"]], ["add", "theorem", "dvd_neg", []], ["mod", "theorem", "eq_of_mul_eq_mul_left_of_ne_zero", []], ["mod", "theorem", "eq_of_mul_eq_mul_right_of_ne_zero", []], ["add", "theorem", "eq_zero_of_mul_eq_self_left'", []], ["add", "theorem", "eq_zero_of_mul_eq_self_right'", []], ["add", "theorem", "mul_eq_zero", []], ["add", "theorem", "mul_ne_zero'", []], ["add", "theorem", "mul_ne_zero_comm'", []], ["add", "theorem", "mul_two", []], ["mod", "theorem", "ne_zero_and_ne_zero_of_mul_ne_zero", []], ["add", "theorem", "neg_dvd", []]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": []}, {"oldPath": "topology/metric_space.lean", "newPath": "topology/metric_space.lean", "changes": []}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}]}, {"timestamp": 1505530310, "sha": "a967d8d8", "message": "feat(tactic/interactive): allow exprs in simpf, interactive try_for", "changes": [{"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}]}, {"timestamp": 1505324052, "sha": "f705963c", "message": "feat(topology/measure): introduce measures", "changes": [{"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["mod", "theorem", "Union_subset_Union2", ["set"]], ["mod", "theorem", "inter_distrib_Union_left", ["set"]], ["add", "theorem", "inter_distrib_Union_right", ["set"]]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["del", "theorem", "add_le_add", ["ennreal"]], ["del", "theorem", "lt_of_add_lt_add_left", ["ennreal"]], ["add", "theorem", "lt_supr_iff", []]]}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["add", "theorem", "has_sum_sigma", []], ["add", "theorem", "is_sum_iff_is_sum_of_iso", []], ["add", "theorem", "is_sum_le", []], ["add", "theorem", "tsum_eq_sum", []], ["add", "theorem", "tsum_eq_tsum_of_is_sum_iff_is_sum", []], ["add", "theorem", "tsum_eq_tsum_of_iso", []], ["add", "theorem", "tsum_eq_tsum_of_ne_zero_bij", []], ["add", "theorem", "tsum_le_tsum", []], ["add", "theorem", "tsum_sigma", []]]}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_disjointed", []], ["add", "def", "pairwise", []], ["mod", "theorem", "disjoint_disjointed", ["set"]], ["add", "theorem", "disjointed_induct", ["set"]]]}, {"oldPath": null, "newPath": "topology/measure.lean", "changes": [["add", "def", "count", ["measure_theory"]], ["add", "theorem", "measure_Union_le_nat", ["measure_theory"]], ["add", "theorem", "measure_Union_nat", ["measure_theory"]], ["add", "theorem", "measure_bUnion", ["measure_theory"]], ["add", "theorem", "measure_empty", ["measure_theory"]], ["add", "theorem", "measure_eq_measure_of", ["measure_theory"]], ["add", "theorem", "measure_mono", ["measure_theory"]], ["add", "theorem", "measure_sUnion", ["measure_theory"]], ["add", "def", "measure", ["measure_theory", "measure_space"]], ["add", "structure", "measure_space", ["measure_theory"]], ["add", "theorem", "measure_space_eq", ["measure_theory"]], ["add", "theorem", "measure_space_eq_of", ["measure_theory"]], ["add", "theorem", "measure_union", ["measure_theory"]], ["add", "theorem", "supr_bool_eq", []]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["mod", "theorem", "binfi_inf", []], ["add", "theorem", "inf_principal_eq_bot", []], ["add", "theorem", "infi_neg", []], ["add", "theorem", "infi_pos", []], ["mod", "theorem", "le_of_tendsto", []], ["del", "theorem", "mem_nhds_lattice_unbounded", []], ["add", "theorem", "mem_nhds_orderable_dest", []], ["add", "theorem", "mem_nhds_unbounded", []], ["add", "theorem", "supr_neg", []], ["add", "theorem", "supr_pos", []]]}]}, {"timestamp": 1505312442, "sha": "0b163365", "message": "feat(topology/infinite_sum): strengten bijection proof", "changes": [{"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["add", "theorem", "tsum_eq_tsum_of_ne_zero", []], ["mod", "theorem", "tsum_zero", []]]}]}, {"timestamp": 1505312390, "sha": "e9b077c3", "message": "chore(data/equiv): use has_coe_to_fun", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["mod", "theorem", "apply_eq_iff_eq", ["equiv"]], ["mod", "theorem", "apply_eq_iff_eq_inverse_apply", ["equiv"]], ["add", "theorem", "coe_fn_mk", ["equiv"]], ["add", "theorem", "coe_fn_symm_mk", ["equiv"]], ["mod", "theorem", "comp_apply", ["equiv"]], ["mod", "theorem", "eq_of_to_fun_eq", ["equiv"]], ["del", "def", "fn", ["equiv"]], ["mod", "theorem", "id_apply", ["equiv"]], ["del", "def", "inv", ["equiv"]], ["mod", "theorem", "inverse_apply_apply", ["equiv"]], ["mod", "def", "subtype_equiv_of_subtype", ["equiv"]], ["mod", "theorem", "swap_apply_def", ["equiv"]], ["mod", "theorem", "swap_apply_left", ["equiv"]], ["mod", "theorem", "swap_apply_of_ne_of_ne", ["equiv"]], ["mod", "theorem", "swap_apply_right", ["equiv"]]]}]}, {"timestamp": 1505166900, "sha": "bf58bf44", "message": "feat(topology/measurable_space): induction rule for sigma-algebras with intersection-stable generators; uses Dynkin systems", "changes": [{"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_univ", []], ["add", "theorem", "measurable_generate_from", []], ["add", "theorem", "dynkin_system_eq", ["measurable_space", "dynkin_system"]], ["add", "def", "generate", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_from_eq", ["measurable_space", "dynkin_system"]], ["add", "inductive", "generate_has", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_inter", ["measurable_space", "dynkin_system"]], ["add", "theorem", "generate_le", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_sdiff", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_union", ["measurable_space", "dynkin_system"]], ["add", "theorem", "has_univ", ["measurable_space", "dynkin_system"]], ["add", "def", "of_measurable_space", ["measurable_space", "dynkin_system"]], ["add", "theorem", "of_measurable_space_le_of_measurable_space_iff", ["measurable_space", "dynkin_system"]], ["add", "theorem", "of_measurable_space_to_measurable_space", ["measurable_space", "dynkin_system"]], ["add", "def", "restrict_on", ["measurable_space", "dynkin_system"]], ["add", "def", "to_measurable_space", ["measurable_space", "dynkin_system"]], ["add", "structure", "dynkin_system", ["measurable_space"]], ["add", "def", "generate_from", ["measurable_space"]], ["add", "theorem", "generate_from_le", ["measurable_space"]], ["add", "inductive", "generate_measurable", ["measurable_space"]], ["add", "theorem", "induction_on_inter", ["measurable_space"]], ["add", "theorem", "is_measurable_generate_from", ["measurable_space"]], ["add", "theorem", "lt_succ_iff", ["nat"]], ["add", "theorem", "disjoint_disjointed", ["set"]], ["add", "def", "disjointed", ["set"]], ["add", "theorem", "disjointed_Union", ["set"]]]}]}, {"timestamp": 1505141875, "sha": "74c3e6e9", "message": "feat(topology/measurable_space): measurable sets invariant under (countable) set operations", "changes": [{"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": [["add", "theorem", "is_measurable_Inter", []], ["mod", "theorem", "is_measurable_Union", []], ["add", "theorem", "is_measurable_Union_nat", []], ["add", "theorem", "is_measurable_bInter", []], ["add", "theorem", "is_measurable_bUnion", []], ["add", "theorem", "is_measurable_inter", []], ["add", "theorem", "is_measurable_sInter", []], ["add", "theorem", "is_measurable_sUnion", []], ["add", "theorem", "is_measurable_sdiff", []], ["add", "theorem", "is_measurable_sub", []], ["add", "theorem", "is_measurable_union", []]]}]}, {"timestamp": 1505138166, "sha": "b8904250", "message": "feat(topology/ennreal): ennreal forms a topological monoid", "changes": [{"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "tendsto_inf_left", ["filter"]]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["add", "theorem", "nhds_of_real_eq_map_of_real_nhds_nonneg", ["ennreal"]]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "ge_mem_nhds", []], ["del", "theorem", "gt_mem_nhds", []], ["del", "theorem", "le_mem_nhds", []], ["del", "theorem", "lt_mem_nhds", []]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "ge_mem_nhds", []], ["add", "theorem", "gt_mem_nhds", []], ["add", "theorem", "le_mem_nhds", []], ["add", "theorem", "lt_mem_nhds", []]]}]}, {"timestamp": 1505131096, "sha": "8ed673d0", "message": "feat(data/set/countable): finite sets are countable", "changes": [{"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["add", "theorem", "countable_Union", ["set"]], ["add", "theorem", "countable_finite", ["set"]], ["add", "theorem", "countable_insert", ["set"]], ["add", "theorem", "countable_union", ["set"]]]}]}, {"timestamp": 1505129545, "sha": "28b46a21", "message": "fix(data/set/countable): finish proof countable_sUnion", "changes": [{"oldPath": "data/set/countable.lean", "newPath": "data/set/countable.lean", "changes": [["del", "theorem", "bind_some", ["option"]], ["mod", "theorem", "countable_sUnion", ["set"]], ["del", "def", "enumerate", ["set"]], ["del", "theorem", "enumerate_eq_none", ["set"]], ["del", "theorem", "enumerate_eq_none_of_sel", ["set"]], ["del", "theorem", "enumerate_inj", ["set"]], ["del", "theorem", "enumerate_mem", ["set"]]]}, {"oldPath": null, "newPath": "data/set/enumerate.lean", "changes": [["add", "theorem", "bind_some", ["option"]], ["add", "def", "enumerate", ["set"]], ["add", "theorem", "enumerate_eq_none", ["set"]], ["add", "theorem", "enumerate_eq_none_of_sel", ["set"]], ["add", "theorem", "enumerate_inj", ["set"]], ["add", "theorem", "enumerate_mem", ["set"]]]}]}, {"timestamp": 1505086121, "sha": "8ee26290", "message": "feat(data/set): add countable sets", "changes": [{"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": []}, {"oldPath": null, "newPath": "data/set/countable.lean", "changes": [["add", "theorem", "bind_some", ["option"]], ["add", "theorem", "to_encodable", ["set", "countable"]], ["add", "def", "countable", ["set"]], ["add", "theorem", "countable_empty", ["set"]], ["add", "theorem", "countable_encodable'", ["set"]], ["add", "theorem", "countable_encodable", ["set"]], ["add", "theorem", "countable_iff_exists_surjective", ["set"]], ["add", "theorem", "countable_image", ["set"]], ["add", "theorem", "countable_sUnion", ["set"]], ["add", "theorem", "countable_singleton", ["set"]], ["add", "theorem", "countable_subset", ["set"]], ["add", "def", "encodable_of_inj", ["set"]], ["add", "def", "enumerate", ["set"]], ["add", "theorem", "enumerate_eq_none", ["set"]], ["add", "theorem", "enumerate_eq_none_of_sel", ["set"]], ["add", "theorem", "enumerate_inj", ["set"]], ["add", "theorem", "enumerate_mem", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "def", "infinite", ["set"]]]}, {"oldPath": "logic/function_inverse.lean", "newPath": "logic/function_inverse.lean", "changes": [["add", "theorem", "inv_fun_on_eq'", ["set"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}]}, {"timestamp": 1505075596, "sha": "7e06124c", "message": "feat(logic): add small theory on inverse functions", "changes": [{"oldPath": null, "newPath": "logic/function_inverse.lean", "changes": [["add", "theorem", "has_left_inverse", ["set"]], ["add", "theorem", "has_right_inverse", ["set"]], ["add", "theorem", "injective_surj_inv", ["set"]], ["add", "def", "inv_fun", ["set"]], ["add", "theorem", "inv_fun_eq", ["set"]], ["add", "theorem", "inv_fun_eq_of_injective_of_right_inverse", ["set"]], ["add", "def", "inv_fun_on", ["set"]], ["add", "theorem", "inv_fun_on_eq", ["set"]], ["add", "theorem", "inv_fun_on_mem", ["set"]], ["add", "theorem", "inv_fun_on_neg", ["set"]], ["add", "theorem", "inv_fun_on_pos", ["set"]], ["add", "theorem", "left_inverse_inv_fun", ["set"]], ["add", "theorem", "right_inverse_inv_fun", ["set"]], ["add", "theorem", "right_inverse_surj_inv", ["set"]], ["add", "def", "surj_inv", ["set"]], ["add", "theorem", "surj_inv_eq", ["set"]]]}]}, {"timestamp": 1504961302, "sha": "a5f32d27", "message": "feat(data/encodable): port countable choice from Lean2", "changes": [{"oldPath": "data/encodable.lean", "newPath": "data/encodable.lean", "changes": [["add", "theorem", "axiom_of_choice", ["encodable"]], ["add", "def", "choose", ["encodable"]], ["add", "theorem", "choose_spec", ["encodable"]], ["add", "def", "pn", ["encodable"]], ["add", "theorem", "skolem", ["encodable"]], ["add", "def", "encodable_quotient", ["quot"]], ["add", "def", "rep", ["quot"]], ["add", "theorem", "rep_spec", ["quot"]]]}]}, {"timestamp": 1504901186, "sha": "3399baa9", "message": "feat(data/encodable): ported data/encodable.lean from Lean2", "changes": [{"oldPath": null, "newPath": "data/encodable.lean", "changes": [["add", "def", "encodable_of_equiv", []], ["add", "def", "encodable_of_left_injection", []], ["add", "theorem", "succ_ne_zero", []]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": [["add", "theorem", "eq_of_sorted_of_perm", ["list"]], ["del", "theorem", "sorted_insert_sort", ["list"]], ["add", "theorem", "sorted_insertion_sort", ["list"]]]}]}, {"timestamp": 1504894044, "sha": "741065bc", "message": "chore(data/equiv): using nat pairing", "changes": [{"oldPath": "data/equiv.lean", "newPath": "data/equiv.lean", "changes": [["add", "def", "nat_prod_nat_equiv_nat", ["equiv"]]]}]}, {"timestamp": 1504893953, "sha": "22c8faed", "message": "feat(data/nat/pairing): ported data/nat/pairing.lean from Lean2", "changes": [{"oldPath": null, "newPath": "data/nat/pairing.lean", "changes": [["add", "def", "mkpair", ["nat"]], ["add", "theorem", "mkpair_unpair", ["nat"]], ["add", "def", "unpair", ["nat"]], ["add", "theorem", "unpair_lt", ["nat"]], ["add", "theorem", "unpair_lt_aux", ["nat"]], ["add", "theorem", "unpair_mkpair", ["nat"]]]}]}, {"timestamp": 1504891157, "sha": "7c67c296", "message": "feat(data/nat/sqrt): ported data/nat/sqrt.lean from Lean2", "changes": [{"oldPath": null, "newPath": "data/nat/sqrt.lean", "changes": [["add", "theorem", "eq_zero_of_sqrt_eq_zero", ["nat"]], ["add", "theorem", "le_three_of_sqrt_eq_one", ["nat"]], ["add", "theorem", "mul_square_cancel", ["nat"]], ["add", "theorem", "sqrt_eq", ["nat"]], ["add", "theorem", "sqrt_lower", ["nat"]], ["add", "theorem", "sqrt_lt", ["nat"]], ["add", "theorem", "sqrt_mono", ["nat"]], ["add", "theorem", "sqrt_mul_eq", ["nat"]], ["add", "theorem", "sqrt_pos_of_pos", ["nat"]], ["add", "theorem", "sqrt_upper", ["nat"]]]}]}, {"timestamp": 1504882251, "sha": "445a5a45", "message": "fix(topology/real): remove (unnecessary) admit", "changes": [{"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}]}, {"timestamp": 1504882147, "sha": "8ef8f819", "message": "feat(data/equiv): port data/equiv.lean from Lean2", "changes": [{"oldPath": null, "newPath": "data/equiv.lean", "changes": [["add", "theorem", "apply_eq_iff_eq", ["equiv"]], ["add", "theorem", "apply_eq_iff_eq_inverse_apply", ["equiv"]], ["add", "def", "arrow_arrow_equiv_prod_arrow", ["equiv"]], ["add", "def", "arrow_congr", ["equiv"]], ["add", "def", "arrow_prod_equiv_prod_arrow", ["equiv"]], ["add", "def", "arrow_unit_equiv_unit", ["equiv"]], ["add", "def", "bool_equiv_unit_sum_unit", ["equiv"]], ["add", "def", "bool_prod_equiv_sum", ["equiv"]], ["add", "theorem", "comp_apply", ["equiv"]], ["add", "def", "decidable_eq_of_equiv", ["equiv"]], ["add", "def", "empty_arrow_equiv_unit", ["equiv"]], ["add", "theorem", "eq_iff_eq_of_injective", ["equiv"]], ["add", "theorem", "eq_of_to_fun_eq", ["equiv"]], ["add", "def", "false_arrow_equiv_unit", ["equiv"]], ["add", "def", "false_equiv_empty", ["equiv"]], ["add", "def", "fn", ["equiv"]], ["add", "def", "id", ["equiv"]], ["add", "theorem", "id_apply", ["equiv"]], ["add", "def", "inhabited_of_equiv", ["equiv"]], ["add", "def", "inv", ["equiv"]], ["add", "theorem", "inverse_apply_apply", ["equiv"]], ["add", "def", "nat_equiv_nat_sum_unit", ["equiv"]], ["add", "def", "nat_sum_bool_equiv_nat", ["equiv"]], ["add", "def", "nat_sum_unit_equiv_nat", ["equiv"]], ["add", "def", "perm", ["equiv"]], ["add", "def", "prod_assoc", ["equiv"]], ["add", "def", "prod_comm", ["equiv"]], ["add", "def", "prod_congr", ["equiv"]], ["add", "def", "prod_empty_left", ["equiv"]], ["add", "def", "prod_empty_right", ["equiv"]], ["add", "def", "prod_sum_distrib", ["equiv"]], ["add", "def", "prod_unit_left", ["equiv"]], ["add", "def", "prod_unit_right", ["equiv"]], ["add", "def", "subtype_equiv_of_subtype", ["equiv"]], ["add", "def", "sum_arrow_equiv_prod_arrow", ["equiv"]], ["add", "def", "sum_assoc", ["equiv"]], ["add", "def", "sum_comm", ["equiv"]], ["add", "def", "sum_congr", ["equiv"]], ["add", "def", "sum_empty_left", ["equiv"]], ["add", "def", "sum_empty_right", ["equiv"]], ["add", "def", "sum_prod_distrib", ["equiv"]], ["add", "def", "swap", ["equiv"]], ["add", "theorem", "swap_apply_def", ["equiv"]], ["add", "theorem", "swap_apply_left", ["equiv"]], ["add", "theorem", "swap_apply_of_ne_of_ne", ["equiv"]], ["add", "theorem", "swap_apply_right", ["equiv"]], ["add", "theorem", "swap_comm", ["equiv"]], ["add", "theorem", "swap_comp_apply", ["equiv"]], ["add", "def", "swap_core", ["equiv"]], ["add", "theorem", "swap_core_comm", ["equiv"]], ["add", "theorem", "swap_core_self", ["equiv"]], ["add", "theorem", "swap_core_swap_core", ["equiv"]], ["add", "theorem", "swap_self", ["equiv"]], ["add", "theorem", "swap_swap", ["equiv"]], ["add", "def", "unit_arrow_equiv", ["equiv"]], ["add", "structure", "equiv", []], ["add", "theorem", "f_g_eq_id", ["function", "left_inverse"]], ["add", "theorem", "g_f_eq_id", ["function", "right_inverse"]], ["add", "def", "map", ["subtype"]], ["add", "theorem", "map_comp", ["subtype"]], ["add", "theorem", "map_id", ["subtype"]]]}]}, {"timestamp": 1504816713, "sha": "ddeefb87", "message": "feat(topology/topological_structures,ennreal): show continuity of of_ennreal and of_real", "changes": [{"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_inter_on", ["set"]], ["mod", "theorem", "mem_range", ["set"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["add", "theorem", "eq_of_map_eq_map_inj'", ["filter"]], ["add", "theorem", "le_of_map_le_map_inj'", ["filter"]], ["mod", "theorem", "map_binfi_eq", ["filter"]], ["add", "theorem", "map_inf'", ["filter"]], ["add", "theorem", "tendsto_principal", ["filter"]]]}, {"oldPath": "order/lattice.lean", "newPath": "order/lattice.lean", "changes": [["add", "theorem", "not_lt_bot", ["lattice"]], ["add", "theorem", "not_top_lt", ["lattice"]]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["add", "theorem", "nhds_of_real_eq_map_of_real_nhds", ["ennreal"]], ["add", "theorem", "tendsto_of_ennreal", ["ennreal"]], ["add", "theorem", "tendsto_of_real", ["ennreal"]]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["add", "theorem", "is_open_neg", []]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "binfi_inf", []], ["add", "theorem", "is_closed_ge'", []], ["add", "theorem", "is_closed_le'", []], ["mod", "theorem", "is_open_gt'", []], ["mod", "theorem", "is_open_lt'", []], ["add", "theorem", "lt_min_iff", []], ["add", "theorem", "max_lt_iff", []], ["add", "theorem", "mem_nhds_lattice_unbounded", []], ["add", "theorem", "nhds_bot_orderable", []], ["add", "theorem", "nhds_eq_orderable", []], ["add", "theorem", "nhds_orderable_unbounded", []], ["add", "theorem", "nhds_top_orderable", []], ["add", "theorem", "tendsto_orderable", []], ["add", "theorem", "tendsto_orderable_unbounded", []]]}]}, {"timestamp": 1504726277, "sha": "32f3f452", "message": "feat(topology): restructure order topologies; (start) proof that ennreal is a topological monoid", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "abs_lt_iff", []]]}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["add", "theorem", "continuous_of_real", ["ennreal"]], ["add", "theorem", "inv_infty", ["ennreal"]], ["add", "theorem", "inv_inv", ["ennreal"]], ["add", "theorem", "inv_of_real", ["ennreal"]], ["add", "theorem", "inv_zero", ["ennreal"]], ["add", "theorem", "not_lt_zero", ["ennreal"]], ["add", "theorem", "of_real_lt_of_real_iff_cases", ["ennreal"]], ["add", "theorem", "of_real_of_nonpos", ["ennreal"]], ["add", "theorem", "of_real_of_not_nonneg", ["ennreal"]], ["add", "theorem", "one_le_of_real_iff", ["ennreal"]], ["add", "theorem", "zero_lt_of_real_iff", ["ennreal"]], ["add", "theorem", "inv_inv'", []], ["add", "theorem", "inv_pos", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "is_closed_imp", []], ["add", "theorem", "lt_sub_iff", []], ["add", "theorem", "nhds_eq_real", []], ["add", "theorem", "orderable_topology_of_nhds_abs", []], ["add", "theorem", "sub_lt_iff", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["mod", "theorem", "closure_diff", []], ["add", "theorem", "is_closed_imp", []], ["add", "theorem", "is_open_and", []], ["add", "theorem", "is_open_const", []], ["add", "theorem", "mem_of_closed_of_tendsto", []]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "is_open_gt'", []], ["add", "theorem", "is_open_iff_generate_intervals", []], ["add", "theorem", "is_open_lt'", []], ["del", "theorem", "is_open_lt_fst_snd", []], ["add", "theorem", "le_of_tendsto", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["add", "theorem", "nhds_eq_vmap_uniformity", []]]}]}, {"timestamp": 1504714742, "sha": "17e48db6", "message": "fix(data/list/comb): implement fix from rlewis1988", "changes": [{"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": []}]}, {"timestamp": 1504651087, "sha": "f80ae1f8", "message": "feat(topology/infinite_sum): add tsum (with ∑ notation) and has_sum; add lemmas for different algebraic structures", "changes": [{"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["mod", "theorem", "continuous_const", []]]}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["del", "theorem", "exists_is_sum_of_is_sum", []], ["add", "def", "has_sum", []], ["add", "theorem", "has_sum_add", []], ["add", "theorem", "has_sum_iff_has_sum_ne_zero", []], ["add", "theorem", "has_sum_mul_left", []], ["add", "theorem", "has_sum_mul_right", []], ["add", "theorem", "has_sum_neg", []], ["add", "theorem", "has_sum_of_has_sum_of_sub", []], ["add", "theorem", "has_sum_spec", []], ["add", "theorem", "has_sum_sub", []], ["add", "theorem", "has_sum_sum", []], ["add", "theorem", "has_sum_sum_of_ne_finset_zero", []], ["add", "theorem", "has_sum_zero", []], ["mod", "theorem", "is_sum_hom", []], ["add", "theorem", "is_sum_mul_left", []], ["add", "theorem", "is_sum_mul_right", []], ["add", "theorem", "is_sum_neg", []], ["add", "theorem", "is_sum_sub", []], ["add", "theorem", "is_sum_sum_of_ne_finset_zero", []], ["del", "theorem", "is_sum_sum_of_ne_zero", []], ["add", "theorem", "is_sum_tsum", []], ["add", "theorem", "is_sum_unique", []], ["add", "def", "tsum", []], ["add", "theorem", "tsum_add", []], ["add", "theorem", "tsum_eq_is_sum", []], ["add", "theorem", "tsum_mul_left", []], ["add", "theorem", "tsum_mul_right", []], ["add", "theorem", "tsum_neg", []], ["add", "theorem", "tsum_sub", []], ["add", "theorem", "tsum_sum", []], ["add", "theorem", "tsum_zero", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["mod", "theorem", "continuous_mul", []], ["mod", "theorem", "tendsto_mul", []]]}]}, {"timestamp": 1504640905, "sha": "1e4f6cce", "message": "chore(data/seq,data/hash_map): adapt to changes in injection tactic (https://github.com/leanprover/lean/commit/8a10d4c72c948cd1b7af02f316e553e202b1368f)", "changes": [{"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}]}, {"timestamp": 1504639951, "sha": "c6747eea", "message": "chore(topology/uniform_space): use Type* and Sort*", "changes": [{"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["mod", "def", "id_rel", []], ["mod", "theorem", "supr_uniformity", []], ["mod", "theorem", "to_topological_space_supr", []], ["mod", "theorem", "uniform_embedding_prod", []], ["mod", "theorem", "uniform_embedding_subtype_emb", []], ["mod", "theorem", "uniform_extend_subtype", []]]}]}, {"timestamp": 1504639951, "sha": "7c38416b", "message": "feat(data/sigma,data/finset,algebra): add support for the sigma type to finset and big operators", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_sigma", ["finset"]]]}, {"oldPath": "data/finset/fold.lean", "newPath": "data/finset/fold.lean", "changes": [["add", "theorem", "mem_sigma_iff", ["finset"]], ["add", "theorem", "sigma_mono", ["finset"]], ["add", "theorem", "heq_iff_eq", []]]}, {"oldPath": null, "newPath": "data/sigma/basic.lean", "changes": [["add", "def", "map", ["sigma"]], ["add", "theorem", "mk_eq_mk_iff", ["sigma"]]]}, {"oldPath": null, "newPath": "data/sigma/default.lean", "changes": []}, {"oldPath": "topology/infinite_sum.lean", "newPath": "topology/infinite_sum.lean", "changes": [["mod", "theorem", "is_sum_sigma", []]]}]}, {"timestamp": 1504639496, "sha": "7d8e3f3a", "message": "feat(algebra): add ordered (non-cancellative) additive monoid; use for sum-big operator", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "sum_eq_zero_iff_of_nonneg", ["finset"]], ["add", "theorem", "sum_le_sum'", ["finset"]], ["add", "theorem", "sum_le_sum_of_ne_zero", ["finset"]], ["add", "theorem", "sum_le_sum_of_subset", ["finset"]], ["add", "theorem", "sum_le_sum_of_subset_of_nonneg", ["finset"]], ["add", "theorem", "sum_le_zero'", ["finset"]], ["add", "theorem", "zero_le_sum'", ["finset"]]]}, {"oldPath": null, "newPath": "algebra/ordered_monoid.lean", "changes": [["add", "theorem", "add_eq_zero_iff", []], ["add", "theorem", "add_eq_zero_iff_eq_zero_and_eq_zero_of_nonneg_of_nonneg'", []], ["add", "theorem", "add_le_add'", []], ["add", "theorem", "add_le_add_left'", []], ["add", "theorem", "add_le_add_right'", []], ["add", "theorem", "add_le_of_le_of_nonpos'", []], ["add", "theorem", "add_le_of_nonpos_of_le'", []], ["add", "theorem", "add_lt_of_lt_of_neg'", []], ["add", "theorem", "add_lt_of_lt_of_nonpos'", []], ["add", "theorem", "add_lt_of_neg_of_lt'", []], ["add", "theorem", "add_lt_of_nonpos_of_lt'", []], ["add", "theorem", "add_neg'", []], ["add", "theorem", "add_neg_of_neg_of_nonpos'", []], ["add", "theorem", "add_neg_of_nonpos_of_neg'", []], ["add", "theorem", "add_nonneg'", []], ["add", "theorem", "add_nonpos'", []], ["add", "theorem", "add_pos'", []], ["add", "theorem", "add_pos_of_nonneg_of_pos'", []], ["add", "theorem", "add_pos_of_pos_of_nonneg'", []], ["add", "theorem", "le_add_of_le_of_nonneg'", []], ["add", "theorem", "le_add_of_nonneg_left'", []], ["add", "theorem", "le_add_of_nonneg_of_le'", []], ["add", "theorem", "le_add_of_nonneg_right'", []], ["add", "theorem", "le_iff_exists_add", []], ["add", "theorem", "lt_add_of_lt_of_nonneg'", []], ["add", "theorem", "lt_add_of_lt_of_pos'", []], ["add", "theorem", "lt_add_of_nonneg_of_lt'", []], ["add", "theorem", "lt_add_of_pos_of_lt'", []], ["add", "theorem", "lt_of_add_lt_add_left'", []], ["add", "theorem", "lt_of_add_lt_add_right'", []], ["add", "theorem", "zero_le", []]]}]}, {"timestamp": 1504624181, "sha": "fde992f0", "message": "chore(*): use `induction generalizing`", "changes": [{"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "of_nat_add_neg_succ_of_nat_of_ge", ["int"]], ["mod", "theorem", "of_nat_add_neg_succ_of_nat_of_lt", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}]}, {"timestamp": 1504623929, "sha": "a8a1a91b", "message": "chore(topology/uniform_space): simplify proof (suggested by @gebner)", "changes": [{"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1504620901, "sha": "ba95269a", "message": "feat(topology): introduce infinite sums on topological monoids", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_bind", ["finset"]], ["add", "theorem", "prod_comm", ["finset"]], ["add", "theorem", "prod_product", ["finset"]], ["add", "theorem", "prod_subset", ["finset"]]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["add", "theorem", "filter_false", ["finset"]], ["add", "theorem", "filter_filter", ["finset"]], ["add", "theorem", "filter_inter_filter_neg_eq", ["finset"]], ["add", "theorem", "filter_subset", ["finset"]], ["add", "theorem", "filter_union", ["finset"]], ["add", "theorem", "filter_union_filter_neg_eq", ["finset"]], ["add", "theorem", "image_empty", ["finset"]], ["add", "theorem", "image_eq_empty_iff", ["finset"]], ["add", "theorem", "image_filter", ["finset"]], ["add", "theorem", "image_insert", ["finset"]], ["add", "theorem", "image_inter", ["finset"]], ["add", "theorem", "image_singleton", ["finset"]], ["add", "theorem", "image_subset_image", ["finset"]], ["add", "theorem", "image_union", ["finset"]], ["add", "theorem", "inter_subset_left", ["finset"]], ["add", "theorem", "inter_subset_right", ["finset"]], ["add", "theorem", "mem_filter_iff", ["finset"]], ["add", "theorem", "mem_image_iff", ["finset"]], ["add", "theorem", "mem_sdiff_iff", ["finset"]], ["add", "theorem", "mem_to_finset_iff", ["finset"]], ["add", "theorem", "sdiff_inter_self", ["finset"]], ["add", "theorem", "sdiff_union_of_subset", ["finset"]], ["add", "theorem", "subset_inter", ["finset"]], ["add", "theorem", "subset_union_left", ["finset"]], ["add", "theorem", "subset_union_right", ["finset"]], ["add", "theorem", "union_idempotent", ["finset"]], ["add", "theorem", "union_subset", ["finset"]], ["del", "def", "finset", []], ["mod", "def", "nodup_list", []], ["add", "def", "{u}", []]]}, {"oldPath": "data/finset/fold.lean", "newPath": "data/finset/fold.lean", "changes": [["add", "theorem", "bind_empty", ["finset"]], ["add", "theorem", "bind_image", ["finset"]], ["add", "theorem", "bind_insert", ["finset"]], ["add", "theorem", "fold_insert_idem", ["finset"]], ["add", "theorem", "image_bind", ["finset"]], ["add", "theorem", "mem_bind_iff", ["finset"]], ["add", "theorem", "mem_product_iff", ["finset"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "mem_filter_iff", ["list"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["add", "theorem", "infi_top", ["lattice"]], ["add", "theorem", "supr_bot", ["lattice"]]]}, {"oldPath": null, "newPath": "topology/infinite_sum.lean", "changes": [["add", "theorem", "at_top_ne_bot", []], ["add", "theorem", "cauchy_iff", []], ["add", "theorem", "exists_is_sum_of_is_sum", []], ["add", "theorem", "mem_infi_sets_finset", ["filter"]], ["add", "theorem", "forall_and_distrib'", []], ["add", "def", "is_sum", []], ["add", "theorem", "is_sum_add", []], ["add", "theorem", "is_sum_hom", []], ["add", "theorem", "is_sum_iff_is_sum", []], ["add", "theorem", "is_sum_iff_is_sum_of_ne_zero", []], ["add", "theorem", "is_sum_of_is_sum", []], ["add", "theorem", "is_sum_of_is_sum_ne_zero", []], ["add", "theorem", "is_sum_of_iso", []], ["add", "theorem", "is_sum_sigma", []], ["add", "theorem", "is_sum_sum", []], ["add", "theorem", "is_sum_sum_of_ne_zero", []], ["add", "theorem", "is_sum_zero", []], ["add", "theorem", "map_at_top_eq", []], ["add", "theorem", "mem_at_top_iff", []], ["add", "theorem", "mem_closure_of_tendsto", []], ["add", "theorem", "tendsto_finset_image_at_top_at_top", []]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "tendsto_add'", []], ["add", "theorem", "tendsto_sum", []], ["add", "theorem", "uniform_continuous_add'", []], ["add", "theorem", "uniform_continuous_add", []], ["add", "theorem", "uniform_continuous_neg'", []], ["add", "theorem", "uniform_continuous_neg", []], ["add", "theorem", "uniform_continuous_sub'", []], ["add", "theorem", "uniform_continuous_sub", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["add", "theorem", "uniform_continuous_id", []]]}]}, {"timestamp": 1504615669, "sha": "6c321fee", "message": "Merge branch 'master' of https://github.com/leanprover/mathlib", "changes": []}, {"timestamp": 1504607600, "sha": "c7a3c75d", "message": "fix(data/seq): option_bind, option_map -> option.bind, option.map (changed in Lean)", "changes": [{"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": [["mod", "theorem", "map_nth", ["seq"]]]}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": [["mod", "def", "map", ["wseq"]]]}]}, {"timestamp": 1504528381, "sha": "80e14742", "message": "fix(logic/basic): fix simp performance issue\nHaving `forall_true_iff'` as a simp lemma caused way too much backtracking, so only the 2 and 3 implication versions are added as simp lemmas, and the user can add `forall_true_iff'` to their simp set if they need to reduce more.", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "forall_2_true_iff", []], ["add", "theorem", "forall_3_true_iff", []], ["mod", "theorem", "forall_true_iff'", []], ["add", "theorem", "swap", ["imp"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}]}, {"timestamp": 1504480380, "sha": "086ac36f", "message": "feat(tactic/interactive): simpf tactic, more logic refactor", "changes": [{"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["del", "theorem", "imp_of_not_or", []], ["add", "theorem", "not_and'", []], ["add", "theorem", "not_and", []], ["del", "theorem", "not_and_iff_imp'", []], ["del", "theorem", "not_and_iff_imp", []], ["add", "theorem", "not_and_not_right", []]]}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}, {"oldPath": "tactic/interactive.lean", "newPath": "tactic/interactive.lean", "changes": []}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": []}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": []}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1504472123, "sha": "8faac5f8", "message": "refactor(logic/basic): refactor logic theorems", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["del", "theorem", "exists_false", []]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["del", "theorem", "eq_of_mem_singleton", ["finset"]], ["del", "theorem", "eq_of_singleton_eq", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["del", "theorem", "mem_singleton_iff", ["finset"]], ["del", "theorem", "mem_singleton_of_eq", ["finset"]], ["add", "theorem", "mem_singleton_self", ["finset"]], ["add", "theorem", "singleton_inj", ["finset"]], ["add", "theorem", "subset_iff", ["finset"]], ["del", "theorem", "subset_of_forall", ["finset"]], ["del", "theorem", "or_self_or", []], ["del", "theorem", "perm_insert_cons_of_not_mem", []]]}, {"oldPath": "data/finset/fold.lean", "newPath": "data/finset/fold.lean", "changes": [["mod", "theorem", "fold_congr", ["finset"]], ["mod", "theorem", "map_congr", ["list"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "ball_empty_iff", ["set"]], ["add", "theorem", "ball_image_iff", ["set"]], ["add", "theorem", "ball_image_of_ball", ["set"]], ["add", "theorem", "ball_insert_iff", ["set"]], ["del", "theorem", "bounded_forall_empty_iff", ["set"]], ["del", "theorem", "bounded_forall_image_iff", ["set"]], ["del", "theorem", "bounded_forall_image_of_bounded_forall", ["set"]], ["del", "theorem", "bounded_forall_insert_iff", ["set"]], ["add", "theorem", "mem_union", ["set"]], ["del", "theorem", "mem_union_iff", ["set"]], ["add", "theorem", "not_not_mem", ["set"]], ["del", "theorem", "not_not_mem_iff", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "imp_left", ["and"]], ["add", "theorem", "imp_right", ["and"]], ["del", "theorem", "and_distrib", []], ["del", "theorem", "and_distrib_right", []], ["mod", "theorem", "and_iff_not_or_not", []], ["add", "theorem", "and_imp", []], ["del", "theorem", "and_imp_iff", []], ["del", "theorem", "and_implies_iff", []], ["del", "theorem", "and_implies_left", []], ["del", "theorem", "and_implies_right", []], ["del", "theorem", "and_not_of_not_implies", []], ["del", "theorem", "and_of_and_of_imp_left", []], ["del", "theorem", "and_of_and_of_imp_right", []], ["del", "theorem", "and_of_and_of_implies_of_implies", []], ["add", "theorem", "and_or_distrib_left", []], ["add", "theorem", "and_or_distrib_right", []], ["add", "theorem", "imp_left", ["ball"]], ["add", "theorem", "imp_right", ["ball"]], ["add", "theorem", "ball_and_distrib", []], ["add", "theorem", "ball_congr", []], ["add", "theorem", "ball_of_forall", []], ["add", "theorem", "ball_true_iff", []], ["add", "theorem", "elim", ["bex"]], ["add", "theorem", "imp_left", ["bex"]], ["add", "theorem", "imp_right", ["bex"]], ["add", "theorem", "intro", ["bex"]], ["add", "theorem", "bex_congr", []], ["add", "theorem", "bex_def", []], ["add", "theorem", "bex_imp_distrib", []], ["add", "theorem", "bex_of_exists", []], ["add", "theorem", "bex_or_distrib", []], ["del", "theorem", "elim", ["bexists"]], ["del", "theorem", "intro", ["bexists"]], ["del", "theorem", "bexists_congr", []], ["del", "theorem", "bexists_def", []], ["del", "theorem", "bexists_implies_distrib", []], ["del", "theorem", "bexists_implies_of_bforall_implies", []], ["del", "theorem", "bexists_not_of_not_bforall", []], ["del", "theorem", "bexists_of_bexists", []], ["del", "theorem", "bexists_of_exists", []], ["del", "theorem", "bexists_or_distrib", []], ["del", "theorem", "bforall_and_distrib", []], ["del", "theorem", "bforall_congr", []], ["del", "theorem", "bforall_implies_of_bexists_implies", []], ["del", "theorem", "bforall_not_of_not_bexists", []], ["del", "theorem", "bforall_of_bforall", []], ["del", "theorem", "bforall_of_forall", []], ["del", "theorem", "bforall_true_iff", []], ["del", "theorem", "bexists_not_of_not_bforall", ["classical"]], ["del", "theorem", "exists_not_of_not_forall", ["classical"]], ["add", "theorem", "not_ball", ["classical"]], ["del", "theorem", "not_bforall_iff_bexists_not", ["classical"]], ["add", "theorem", "not_forall", ["classical"]], ["del", "theorem", "not_forall_iff", ["classical"]], ["add", "def", "decidable_of_iff'", []], ["add", "def", "decidable_of_iff", []], ["mod", "theorem", "eq_iff_le_and_le", []], ["add", "theorem", "exists_const", []], ["add", "theorem", "exists_eq'", []], ["add", "theorem", "exists_eq", []], ["add", "theorem", "exists_eq_right'", []], ["add", "theorem", "exists_eq_right", []], ["add", "theorem", "exists_false", []], ["add", "theorem", "exists_imp_distrib", []], ["del", "theorem", "exists_implies_distrib", []], ["del", "theorem", "exists_implies_of_forall_implies", []], ["del", "theorem", "exists_not_of_not_forall", []], ["add", "theorem", "exists_of_bex", []], ["del", "theorem", "exists_of_bexists", []], ["mod", "theorem", "exists_of_exists", []], ["mod", "theorem", "exists_or_distrib", []], ["del", "theorem", "exists_p_iff_p", []], ["add", "theorem", "exists_prop", []], ["del", "theorem", "exists_prop_iff", []], ["add", "theorem", "exists_swap", []], ["mod", "theorem", "forall_and_distrib", []], ["add", "theorem", "forall_const", []], ["add", "theorem", "forall_eq'", []], ["mod", "theorem", "forall_eq", []], ["del", "theorem", "forall_implies_of_exists_implies", []], ["add", "theorem", "forall_of_ball", []], ["del", "theorem", "forall_of_bforall", []], ["mod", "theorem", "forall_of_forall", []], ["add", "theorem", "forall_or_of_or_forall", []], ["del", "theorem", "forall_p_iff_p", []], ["add", "theorem", "forall_swap", []], ["add", "theorem", "forall_true_iff'", []], ["mod", "theorem", "forall_true_iff", []], ["add", "theorem", "iff_def'", []], ["mod", "theorem", "iff_def", []], ["add", "theorem", "iff_false_left", []], ["add", "theorem", "iff_false_right", []], ["add", "theorem", "iff_not_comm", []], ["add", "theorem", "iff_of_false", []], ["add", "theorem", "iff_of_true", []], ["add", "theorem", "iff_true_left", []], ["add", "theorem", "iff_true_right", []], ["add", "theorem", "imp_and_distrib", []], ["add", "theorem", "imp_false", []], ["add", "theorem", "imp_iff_not_or", []], ["add", "theorem", "imp_iff_right", []], ["add", "theorem", "imp_intro", []], ["add", "theorem", "imp_not_comm", []], ["add", "theorem", "imp_of_not_or", []], ["add", "theorem", "imp_self", []], ["add", "theorem", "imp_true_iff", []], ["del", "theorem", "implies_and_iff", []], ["del", "theorem", "implies_false_iff", []], ["del", "theorem", "implies_iff", []], ["del", "theorem", "implies_iff_not_or", []], ["del", "theorem", "implies_intro", []], ["del", "theorem", "implies_of_not_or", []], ["del", "theorem", "implies_self", []], ["add", "theorem", "elim", ["not"]], ["add", "theorem", "imp_symm", ["not"]], ["add", "theorem", "not_and_distrib'", []], ["add", "theorem", "not_and_distrib", []], ["del", "theorem", "not_and_iff", []], ["add", "theorem", "not_and_iff_imp'", []], ["add", "theorem", "not_and_iff_imp", []], ["del", "theorem", "not_and_iff_imp_not", []], ["del", "theorem", "not_and_not_of_not_or", []], ["add", "theorem", "not_ball", []], ["add", "theorem", "not_ball_of_bex_not", []], ["add", "theorem", "not_bex", []], ["del", "theorem", "not_bexists_iff_bforall_not", []], ["del", "theorem", "not_bexists_of_bforall_not", []], ["del", "theorem", "not_bforall_iff_bexists_not", []], ["del", "theorem", "not_bforall_of_bexists_not", []], ["add", "theorem", "not_exists", []], ["del", "theorem", "not_exists_iff", []], ["add", "theorem", "not_exists_not", []], ["add", "theorem", "not_forall", []], ["del", "theorem", "not_forall_iff", []], ["add", "theorem", "not_forall_not", []], ["mod", "theorem", "not_forall_of_exists_not", []], ["add", "theorem", "not_iff_comm", []], ["add", "theorem", "not_iff_not", []], ["add", "theorem", "not_imp", []], ["add", "theorem", "not_imp_comm", []], ["del", "theorem", "not_imp_iff_not_imp", []], ["add", "theorem", "not_imp_not", []], ["add", "theorem", "not_imp_of_and_not", []], ["del", "theorem", "not_implies_iff", []], ["del", "theorem", "not_implies_of_and_not", []], ["add", "theorem", "not_not", []], ["del", "theorem", "not_not_elim", []], ["del", "theorem", "not_not_iff", []], ["add", "theorem", "not_not_of_not_imp", []], ["del", "theorem", "not_not_of_not_implies", []], ["add", "theorem", "not_of_not_imp", []], ["del", "theorem", "not_of_not_implies", []], ["add", "theorem", "not_or_distrib", []], ["del", "theorem", "not_or_iff", []], ["del", "theorem", "not_or_not_of_not_and'", []], ["del", "theorem", "not_or_not_of_not_and", []], ["add", "theorem", "not_or_of_imp", []], ["del", "theorem", "not_or_of_implies", []], ["del", "theorem", "not_or_of_not_and_not", []], ["add", "theorem", "of_not_imp", []], ["del", "theorem", "of_not_implies", []], ["add", "theorem", "of_not_not", []], ["add", "theorem", "or_and_distrib_left", []], ["add", "theorem", "or_and_distrib_right", []], ["del", "theorem", "or_distrib", []], ["del", "theorem", "or_distrib_right", []], ["mod", "theorem", "or_iff_not_and_not", []], ["add", "theorem", "or_iff_not_imp_left", []], ["add", "theorem", "or_iff_not_imp_right", []], ["del", "theorem", "or_iff_or", []], ["add", "theorem", "or_imp_distrib", []], ["del", "theorem", "or_imp_iff_and_imp", []], ["del", "theorem", "or_implies_distrib", []], ["del", "theorem", "or_of_not_implies'", []], ["del", "theorem", "or_of_not_implies", []], ["add", "theorem", "or_of_or_of_imp_left", []], ["add", "theorem", "or_of_or_of_imp_of_imp", []], ["add", "theorem", "or_of_or_of_imp_right", []], ["del", "theorem", "or_of_or_of_implies_left", []], ["del", "theorem", "or_of_or_of_implies_of_implies", []], ["del", "theorem", "or_of_or_of_implies_right", []], ["del", "theorem", "or_resolve_left", []], ["del", "theorem", "or_resolve_right", []], ["mod", "theorem", "exists", ["prod"]], ["mod", "theorem", "forall", ["prod"]], ["mod", "theorem", "inj_iff", ["prod", "mk"]], ["del", "theorem", "{u", []], ["del", "theorem", "{u}", []]]}, {"oldPath": "order/bounds.lean", "newPath": "order/bounds.lean", "changes": []}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": []}, {"oldPath": "order/zorn.lean", "newPath": "order/zorn.lean", "changes": []}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": [["mod", "theorem", "implies_iff_not_or", ["auto", "classical"]], ["mod", "theorem", "not_and_eq", ["auto"]], ["mod", "theorem", "not_exists_eq", ["auto"]], ["mod", "theorem", "not_forall_eq", ["auto"]], ["mod", "theorem", "not_implies_eq", ["auto"]], ["mod", "theorem", "not_not_eq", ["auto"]], ["mod", "theorem", "not_or_eq", ["auto"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": []}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": []}, {"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": []}, {"oldPath": "topology/metric_space.lean", "newPath": "topology/metric_space.lean", "changes": [["mod", "theorem", "continuous_dist'", []], ["mod", "theorem", "continuous_dist", []], ["mod", "theorem", "dist_comm", []], ["mod", "theorem", "dist_eq_zero_iff", []], ["mod", "theorem", "dist_nonneg", []], ["mod", "theorem", "dist_pos_of_ne", []], ["mod", "theorem", "dist_self", []], ["mod", "theorem", "dist_triangle", []], ["mod", "theorem", "eq_of_dist_eq_zero", []], ["mod", "theorem", "eq_of_forall_dist_le", []], ["mod", "theorem", "exists_subtype", []], ["mod", "theorem", "ne_of_dist_pos", []], ["mod", "theorem", "open_ball_subset_open_ball_of_le", []], ["mod", "theorem", "tendsto_dist", []], ["mod", "theorem", "uniform_continuous_dist'", []], ["mod", "theorem", "uniform_continuous_dist", []], ["mod", "theorem", "uniformity_dist'", []], ["mod", "theorem", "uniformity_dist", []], ["mod", "theorem", "zero_eq_dist_iff", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": []}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": []}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1504382177, "sha": "74cfa934", "message": "fix(data/list/perm): fix broken match\nThis reverts commit 3d817686fdb02eba0f51ab303a4d5b50ac2a9f5e.", "changes": [{"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}]}, {"timestamp": 1504123940, "sha": "dbc8f869", "message": "feat(topology/measurable_space): measurability is closed under id and comp", "changes": [{"oldPath": "topology/measurable_space.lean", "newPath": "topology/measurable_space.lean", "changes": [["mod", "def", "measurable", []], ["add", "theorem", "measurable_comp", []], ["add", "theorem", "measurable_id", []]]}]}, {"timestamp": 1504118038, "sha": "4ef0ea8a", "message": "feat(topology/ennreal): add subtraction", "changes": [{"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": []}, {"oldPath": "topology/ennreal.lean", "newPath": "topology/ennreal.lean", "changes": [["add", "theorem", "Sup_eq_top", []], ["add", "theorem", "Inf_add", ["ennreal"]], ["add", "theorem", "Sup_add", ["ennreal"]], ["add", "theorem", "add_sub_cancel_of_le", ["ennreal"]], ["add", "theorem", "le_add_left", ["ennreal"]], ["add", "theorem", "le_add_right", ["ennreal"]], ["add", "theorem", "le_sub_iff_add_le", ["ennreal"]], ["add", "theorem", "lt_iff_exists_of_real", ["ennreal"]], ["add", "theorem", "lt_of_add_lt_add_left", ["ennreal"]], ["add", "theorem", "not_infty_lt", ["ennreal"]], ["add", "theorem", "of_real_lt_infty", ["ennreal"]], ["mod", "theorem", "of_real_lt_of_real_iff", ["ennreal"]], ["add", "theorem", "sub_add_cancel_of_le", ["ennreal"]], ["add", "theorem", "sub_add_self_eq_max", ["ennreal"]], ["add", "theorem", "sub_eq_zero_of_le", ["ennreal"]], ["add", "theorem", "sub_infty", ["ennreal"]], ["add", "theorem", "sub_le_sub", ["ennreal"]], ["add", "theorem", "sub_zero", ["ennreal"]], ["add", "theorem", "zero_sub", ["ennreal"]], ["add", "theorem", "lt_Sup_iff", []]]}]}, {"timestamp": 1504091827, "sha": "f93f7e77", "message": "Merge branch 'master' of https://github.com/leanprover/mathlib", "changes": []}, {"timestamp": 1504050045, "sha": "cb7fb9ba", "message": "feat(topology): basic setup for measurable spaces", "changes": [{"oldPath": null, "newPath": "topology/measurable_space.lean", "changes": [["add", "def", "is_measurable", []], ["add", "theorem", "is_measurable_Union", []], ["add", "theorem", "is_measurable_compl", []], ["add", "theorem", "is_measurable_empty", []], ["add", "def", "measurable", []], ["add", "theorem", "comap_bot", ["measurable_space"]], ["add", "theorem", "comap_comp", ["measurable_space"]], ["add", "theorem", "comap_id", ["measurable_space"]], ["add", "theorem", "comap_le_iff_le_map", ["measurable_space"]], ["add", "theorem", "comap_map_le", ["measurable_space"]], ["add", "theorem", "comap_mono", ["measurable_space"]], ["add", "theorem", "comap_sup", ["measurable_space"]], ["add", "theorem", "comap_supr", ["measurable_space"]], ["add", "theorem", "gc_comap_map", ["measurable_space"]], ["add", "theorem", "le_map_comap", ["measurable_space"]], ["add", "theorem", "map_comp", ["measurable_space"]], ["add", "theorem", "map_id", ["measurable_space"]], ["add", "theorem", "map_inf", ["measurable_space"]], ["add", "theorem", "map_infi", ["measurable_space"]], ["add", "theorem", "map_mono", ["measurable_space"]], ["add", "theorem", "map_top", ["measurable_space"]], ["add", "theorem", "monotone_comap", ["measurable_space"]], ["add", "theorem", "monotone_map", ["measurable_space"]], ["add", "structure", "measurable_space", []], ["add", "theorem", "measurable_space_eq", []]]}]}, {"timestamp": 1504034411, "sha": "51042cde", "message": "feat(topology/ennreal): add extended non-negative real numbers", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": []}, {"oldPath": null, "newPath": "topology/ennreal.lean", "changes": [["add", "theorem", "add_infty", ["ennreal"]], ["add", "theorem", "add_le_add", ["ennreal"]], ["add", "theorem", "forall_ennreal", ["ennreal"]], ["add", "theorem", "infty_add", ["ennreal"]], ["add", "theorem", "infty_le_iff", ["ennreal"]], ["add", "theorem", "infty_mem_upper_bounds", ["ennreal"]], ["add", "theorem", "infty_mul", ["ennreal"]], ["add", "theorem", "infty_mul_of_real", ["ennreal"]], ["add", "theorem", "infty_ne_of_real", ["ennreal"]], ["add", "theorem", "infty_ne_zero", ["ennreal"]], ["add", "theorem", "is_lub_of_real", ["ennreal"]], ["add", "theorem", "le_infty", ["ennreal"]], ["add", "theorem", "le_of_real_iff", ["ennreal"]], ["add", "theorem", "le_zero_iff_eq", ["ennreal"]], ["add", "theorem", "mul_infty", ["ennreal"]], ["add", "theorem", "mul_le_mul", ["ennreal"]], ["add", "def", "of_ennreal", ["ennreal"]], ["add", "theorem", "of_ennreal_of_real", ["ennreal"]], ["add", "theorem", "of_nonneg_real_eq_of_real", ["ennreal"]], ["add", "def", "of_real", ["ennreal"]], ["add", "theorem", "of_real_add_of_real", ["ennreal"]], ["add", "theorem", "of_real_eq_of_real_of", ["ennreal"]], ["add", "theorem", "of_real_eq_one_iff", ["ennreal"]], ["add", "theorem", "of_real_eq_zero_iff", ["ennreal"]], ["add", "theorem", "of_real_le_of_real_iff", ["ennreal"]], ["add", "theorem", "of_real_lt_of_real_iff", ["ennreal"]], ["add", "theorem", "of_real_mem_upper_bounds", ["ennreal"]], ["add", "theorem", "of_real_mul_infty", ["ennreal"]], ["add", "theorem", "of_real_mul_of_real", ["ennreal"]], ["add", "theorem", "of_real_ne_infty", ["ennreal"]], ["add", "theorem", "of_real_ne_of_real_of", ["ennreal"]], ["add", "theorem", "of_real_of_ennreal", ["ennreal"]], ["add", "theorem", "of_real_one", ["ennreal"]], ["add", "theorem", "of_real_zero", ["ennreal"]], ["add", "theorem", "one_eq_of_real_iff", ["ennreal"]], ["add", "theorem", "zero_eq_of_real_iff", ["ennreal"]], ["add", "theorem", "zero_le_of_ennreal", ["ennreal"]], ["add", "theorem", "zero_ne_infty", ["ennreal"]], ["add", "inductive", "ennreal", []], ["add", "theorem", "zero_le_mul", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["mod", "theorem", "exists_supremum_real", []]]}]}, {"timestamp": 1503956087, "sha": "76ae12c7", "message": "fix(algbera/big_operators): remove simp attr for sum/mul-distributivity rules", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "mul_sum", ["finset"]], ["mod", "theorem", "sum_mul", ["finset"]]]}]}, {"timestamp": 1503955800, "sha": "edfbf3cf", "message": "feat(algebra/big_operators): add semiring and integral_domain rules", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "exists_false", []], ["add", "theorem", "mul_sum", ["finset"]], ["add", "theorem", "prod_const_one", ["finset"]], ["add", "theorem", "prod_eq_zero", ["finset"]], ["add", "theorem", "prod_eq_zero_iff", ["finset"]], ["mod", "theorem", "prod_hom", ["finset"]], ["mod", "theorem", "prod_inv_distrib", ["finset"]], ["add", "theorem", "sum_le_sum", ["finset"]], ["add", "theorem", "sum_le_zero", ["finset"]], ["add", "theorem", "sum_mul", ["finset"]], ["mod", "theorem", "sum_sub_distrib", ["finset"]], ["add", "theorem", "zero_le_sum", ["finset"]]]}]}, {"timestamp": 1503948870, "sha": "50ed0e4c", "message": "feat(algebra/big_operators): add congruence rule and morphism laws", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_congr", ["finset"]], ["mod", "theorem", "prod_empty", ["finset"]], ["add", "theorem", "prod_hom", ["finset"]], ["mod", "theorem", "prod_image", ["finset"]], ["mod", "theorem", "prod_insert", ["finset"]], ["add", "theorem", "prod_inv_distrib", ["finset"]], ["mod", "theorem", "prod_mul_distrib", ["finset"]], ["mod", "theorem", "prod_singleton", ["finset"]], ["mod", "theorem", "prod_to_finset_of_nodup", ["finset"]], ["add", "theorem", "sum_sub_distrib", ["finset"]]]}, {"oldPath": "data/finset/fold.lean", "newPath": "data/finset/fold.lean", "changes": [["add", "theorem", "fold_congr", ["finset"]], ["mod", "theorem", "fold_hom", ["finset"]], ["mod", "theorem", "fold_image", ["finset"]], ["mod", "theorem", "fold_insert", ["finset"]], ["mod", "theorem", "fold_op_distrib", ["finset"]], ["mod", "theorem", "fold_singleton", ["finset"]], ["add", "theorem", "map_congr", ["list"]]]}]}, {"timestamp": 1503945273, "sha": "4ed43d95", "message": "feat(data/finset): add fold; add simp rules for insert, empty, singleton and mem", "changes": [{"oldPath": "algebra/big_operators.lean", "newPath": "algebra/big_operators.lean", "changes": [["mod", "theorem", "prod_insert", ["finset"]], ["del", "theorem", "prod_to_finset", ["finset"]], ["add", "theorem", "prod_to_finset_of_nodup", ["finset"]], ["add", "theorem", "prod_union_inter", ["finset"]], ["del", "theorem", "prod_union_inter_eq", ["finset"]], ["del", "theorem", "foldl_mul_assoc", []], ["del", "theorem", "foldl_mul_eq_mul_foldr", []], ["add", "theorem", "prod_append", ["list"]], ["add", "theorem", "prod_cons", ["list"]], ["add", "theorem", "prod_eq_of_perm", ["list"]], ["add", "theorem", "prod_join", ["list"]], ["add", "theorem", "prod_nil", ["list"]], ["add", "theorem", "prod_replicate", ["list"]], ["add", "theorem", "prod_reverse", ["list"]], ["del", "theorem", "prod_append", []], ["del", "theorem", "prod_cons", []], ["del", "theorem", "prod_eq_of_perm", []], ["del", "theorem", "prod_join", []], ["del", "theorem", "prod_nil", []], ["del", "theorem", "prod_replicate", []]]}, {"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "card_empty", ["finset"]], ["mod", "theorem", "card_erase_of_mem", ["finset"]], ["del", "theorem", "card_erase_of_not_mem", ["finset"]], ["mod", "theorem", "card_insert_le", ["finset"]], ["del", "theorem", "card_insert_of_mem", ["finset"]], ["mod", "theorem", "card_insert_of_not_mem", ["finset"]], ["mod", "theorem", "card_upto", ["finset"]], ["mod", "theorem", "empty_inter", ["finset"]], ["mod", "theorem", "empty_subset", ["finset"]], ["mod", "theorem", "empty_union", ["finset"]], ["mod", "theorem", "eq_empty_of_card_eq_zero", ["finset"]], ["mod", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["mod", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["mod", "theorem", "eq_of_mem_singleton", ["finset"]], ["mod", "theorem", "eq_of_singleton_eq", ["finset"]], ["del", "theorem", "eq_of_subset_of_subset", ["finset"]], ["del", "theorem", "eq_or_mem_of_mem_insert", ["finset"]], ["mod", "theorem", "erase_empty", ["finset"]], ["mod", "theorem", "erase_eq_of_not_mem", ["finset"]], ["mod", "theorem", "erase_insert", ["finset"]], ["mod", "theorem", "erase_insert_subset", ["finset"]], ["mod", "theorem", "erase_subset", ["finset"]], ["mod", "theorem", "erase_subset_erase", ["finset"]], ["mod", "theorem", "erase_subset_of_subset_insert", ["finset"]], ["mod", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["mod", "theorem", "forall_of_forall_insert", ["finset"]], ["mod", "theorem", "comm", ["finset", "insert"]], ["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "insert_eq_of_mem", ["finset"]], ["mod", "theorem", "insert_erase", ["finset"]], ["mod", "theorem", "insert_erase_subset", ["finset"]], ["add", "theorem", "insert_idem", ["finset"]], ["mod", "theorem", "insert_inter_of_mem", ["finset"]], ["mod", "theorem", "insert_inter_of_not_mem", ["finset"]], ["add", "theorem", "insert_ne_empty", ["finset"]], ["add", "theorem", "insert_singelton_self_eq", ["finset"]], ["mod", "theorem", "insert_subset_insert", ["finset"]], ["mod", "theorem", "insert_union", ["finset"]], ["mod", "theorem", "inter_assoc", ["finset"]], ["mod", "theorem", "inter_comm", ["finset"]], ["mod", "theorem", "inter_empty", ["finset"]], ["add", "theorem", "inter_insert_of_mem", ["finset"]], ["add", "theorem", "inter_insert_of_not_mem", ["finset"]], ["mod", "theorem", "inter_left_comm", ["finset"]], ["mod", "theorem", "inter_right_comm", ["finset"]], ["mod", "theorem", "inter_self", ["finset"]], ["add", "theorem", "inter_singleton_of_mem", ["finset"]], ["add", "theorem", "inter_singleton_of_not_mem", ["finset"]], ["mod", "theorem", "lt_of_mem_upto", ["finset"]], ["mod", "theorem", "mem_empty_iff", ["finset"]], ["mod", "theorem", "mem_erase_iff", ["finset"]], ["mod", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["mod", "theorem", "mem_insert_iff", ["finset"]], ["mod", "theorem", "mem_insert_of_mem", ["finset"]], ["mod", "theorem", "mem_inter_iff", ["finset"]], ["mod", "theorem", "mem_of_mem_erase", ["finset"]], ["mod", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_iff", ["finset"]], ["mod", "theorem", "mem_singleton_of_eq", ["finset"]], ["del", "theorem", "mem_to_finset_of_nodup", ["finset"]], ["add", "theorem", "mem_to_finset_of_nodup_eq", ["finset"]], ["mod", "theorem", "mem_union_iff", ["finset"]], ["del", "theorem", "mem_union_l", ["finset"]], ["del", "theorem", "mem_union_r", ["finset"]], ["mod", "theorem", "mem_upto_iff", ["finset"]], ["mod", "theorem", "mem_upto_of_lt", ["finset"]], ["mod", "theorem", "mem_upto_succ_of_mem_upto", ["finset"]], ["mod", "theorem", "ne_empty_of_card_eq_succ", ["finset"]], ["mod", "theorem", "ne_of_mem_erase", ["finset"]], ["mod", "theorem", "not_mem_empty", ["finset"]], ["mod", "theorem", "not_mem_erase", ["finset"]], ["del", "theorem", "pair_eq_singleton", ["finset"]], ["del", "theorem", "perm_insert_cons_of_not_mem", ["finset"]], ["mod", "theorem", "singleton_inter_of_mem", ["finset"]], ["mod", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["mod", "theorem", "subset_insert", ["finset"]], ["mod", "theorem", "subset_insert_of_erase_subset", ["finset"]], ["mod", "theorem", "union_assoc", ["finset"]], ["mod", "theorem", "union_comm", ["finset"]], ["mod", "theorem", "union_empty", ["finset"]], ["add", "theorem", "union_insert", ["finset"]], ["mod", "theorem", "union_self", ["finset"]], ["mod", "def", "upto", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]], ["add", "theorem", "or_self_or", []], ["add", "theorem", "perm_insert_cons_of_not_mem", []]]}, {"oldPath": null, "newPath": "data/finset/default.lean", "changes": []}, {"oldPath": null, "newPath": "data/finset/fold.lean", "changes": [["add", "def", "fold", ["finset"]], ["add", "theorem", "fold_empty", ["finset"]], ["add", "theorem", "fold_hom", ["finset"]], ["add", "theorem", "fold_image", ["finset"]], ["add", "theorem", "fold_insert", ["finset"]], ["add", "theorem", "fold_op_distrib", ["finset"]], ["add", "theorem", "fold_singleton", ["finset"]], ["add", "theorem", "fold_to_finset_of_nodup", ["finset"]], ["add", "theorem", "fold_union_inter", ["finset"]], ["add", "theorem", "fold_op_eq_of_perm", ["list"]], ["add", "theorem", "foldl_assoc", ["list"]], ["add", "theorem", "foldl_assoc_comm_cons", ["list"]], ["add", "theorem", "foldl_op_eq_op_foldr_assoc", ["list"]]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["add", "theorem", "mem_erase_iff_of_nodup", ["list"]], ["mod", "theorem", "mem_erase_of_nodup", ["list"]]]}]}, {"timestamp": 1503924985, "sha": "1aa7efa3", "message": "Merge remote-tracking branch 'upstream/master'", "changes": []}, {"timestamp": 1503867510, "sha": "b031441f", "message": "feat(algebra): add small theory of big operators on commutative monoids", "changes": [{"oldPath": null, "newPath": "algebra/big_operators.lean", "changes": [["add", "theorem", "prod_empty", ["finset"]], ["add", "theorem", "prod_image", ["finset"]], ["add", "theorem", "prod_insert", ["finset"]], ["add", "theorem", "prod_mul_distrib", ["finset"]], ["add", "theorem", "prod_singleton", ["finset"]], ["add", "theorem", "prod_to_finset", ["finset"]], ["add", "theorem", "prod_union", ["finset"]], ["add", "theorem", "prod_union_inter_eq", ["finset"]], ["add", "theorem", "foldl_mul_assoc", []], ["add", "theorem", "foldl_mul_eq_mul_foldr", []], ["add", "theorem", "prod_append", []], ["add", "theorem", "prod_cons", []], ["add", "theorem", "prod_eq_of_perm", []], ["add", "theorem", "prod_join", []], ["add", "theorem", "prod_nil", []], ["add", "theorem", "prod_replicate", []]]}]}, {"timestamp": 1503867479, "sha": "c17d11b7", "message": "fix(data/finset): use the type class projections for insert; hide most constants using protected; add image of finset", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "card_empty", ["finset"]], ["del", "def", "empty", ["finset"]], ["mod", "theorem", "empty_inter", ["finset"]], ["mod", "theorem", "empty_subset", ["finset"]], ["mod", "theorem", "empty_union", ["finset"]], ["mod", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["mod", "theorem", "eq_of_mem_singleton", ["finset"]], ["mod", "theorem", "eq_of_singleton_eq", ["finset"]], ["add", "theorem", "erase_dup_map_erase_dup_eq", ["finset"]], ["mod", "theorem", "erase_insert", ["finset"]], ["mod", "theorem", "erase_insert_subset", ["finset"]], ["add", "theorem", "image_id", ["finset"]], ["add", "theorem", "image_image", ["finset"]], ["add", "theorem", "image_to_finset", ["finset"]], ["add", "theorem", "image_to_finset_of_nodup", ["finset"]], ["mod", "theorem", "comm", ["finset", "insert"]], ["del", "def", "insert", ["finset"]], ["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "insert_eq_of_mem", ["finset"]], ["add", "theorem", "insert_inter_of_mem", ["finset"]], ["add", "theorem", "insert_inter_of_not_mem", ["finset"]], ["mod", "theorem", "insert_subset_insert", ["finset"]], ["mod", "theorem", "insert_union", ["finset"]], ["del", "def", "inter", ["finset"]], ["mod", "theorem", "inter_empty", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["mod", "theorem", "mem_insert_iff", ["finset"]], ["mod", "theorem", "mem_singleton_iff", ["finset"]], ["mod", "theorem", "perm_insert_cons_of_not_mem", ["finset"]], ["mod", "theorem", "singleton_inter_of_mem", ["finset"]], ["mod", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["del", "def", "subset", ["finset"]], ["del", "def", "subset_aux", ["finset"]], ["mod", "theorem", "subset_empty_iff", ["finset"]], ["del", "def", "union", ["finset"]], ["mod", "theorem", "union_empty", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]], ["mod", "theorem", "upto_zero", ["finset"]], ["mod", "def", "to_nodup_list_of_nodup", []]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["mod", "theorem", "length_erase_of_not_mem", ["list"]], ["mod", "theorem", "nodup_map", ["list"]], ["add", "theorem", "nodup_map_on", ["list"]]]}]}, {"timestamp": 1503840787, "sha": "f2b4d2e8", "message": "refactor(data/finset): use generic set notation for finsets", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "erase_insert", ["finset"]], ["mod", "theorem", "erase_insert_subset", ["finset"]], ["mod", "theorem", "exists_mem_empty_iff", ["finset"]], ["mod", "theorem", "exists_mem_insert_iff", ["finset"]], ["mod", "theorem", "forall_mem_empty_iff", ["finset"]], ["mod", "theorem", "forall_mem_insert_iff", ["finset"]], ["mod", "theorem", "comm", ["finset", "insert"]], ["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "insert_eq_of_mem", ["finset"]], ["mod", "theorem", "insert_subset_insert", ["finset"]], ["mod", "theorem", "insert_union", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["mod", "theorem", "mem_insert_iff", ["finset"]], ["mod", "theorem", "mem_list_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_list", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_iff", ["finset"]], ["mod", "theorem", "mem_singleton_of_eq", ["finset"]], ["mod", "theorem", "pair_eq_singleton", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]]]}]}, {"timestamp": 1503840787, "sha": "79ed1c39", "message": "refactor(data/finset): add type class instances", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "eq_of_mem_singleton", ["finset"]], ["mod", "theorem", "eq_of_singleton_eq", ["finset"]], ["del", "theorem", "exists_mem_empty_eq", ["finset"]], ["mod", "theorem", "exists_mem_empty_iff", ["finset"]], ["del", "theorem", "exists_mem_insert_eq", ["finset"]], ["mod", "theorem", "exists_mem_insert_iff", ["finset"]], ["del", "theorem", "forall_mem_empty_eq", ["finset"]], ["mod", "theorem", "forall_mem_empty_iff", ["finset"]], ["del", "theorem", "forall_mem_insert_eq", ["finset"]], ["mod", "theorem", "forall_mem_insert_iff", ["finset"]], ["mod", "theorem", "forall_of_forall_insert", ["finset"]], ["mod", "theorem", "insert_eq", ["finset"]], ["del", "theorem", "mem_empty_eq", ["finset"]], ["del", "theorem", "mem_erase_eq", ["finset"]], ["del", "theorem", "mem_insert_eq", ["finset"]], ["del", "theorem", "mem_inter_eq", ["finset"]], ["mod", "theorem", "mem_list_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_list", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_iff", ["finset"]], ["mod", "theorem", "mem_singleton_of_eq", ["finset"]], ["del", "theorem", "mem_union_eq", ["finset"]], ["del", "theorem", "mem_upto_eq", ["finset"]], ["mod", "theorem", "pair_eq_singleton", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]]]}]}, {"timestamp": 1503840787, "sha": "73ae11bc", "message": "refactor(data/finset): fix formatting issues", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "mem_empty_iff", ["finset"]], ["mod", "theorem", "not_mem_empty", ["finset"]], ["mod", "def", "subset_aux", ["finset"]], ["mod", "def", "finset", []], ["mod", "def", "nodup_list", []]]}]}, {"timestamp": 1503840787, "sha": "8dbee5b1", "message": "feat(data/finset): add basics for finsets", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "eq_of_mem_singleton", ["finset"]], ["mod", "theorem", "eq_of_singleton_eq", ["finset"]], ["mod", "theorem", "erase_insert", ["finset"]], ["mod", "theorem", "erase_insert_subset", ["finset"]], ["add", "theorem", "exists_mem_empty_eq", ["finset"]], ["mod", "theorem", "exists_mem_empty_iff", ["finset"]], ["add", "theorem", "exists_mem_insert_eq", ["finset"]], ["mod", "theorem", "exists_mem_insert_iff", ["finset"]], ["add", "theorem", "forall_mem_empty_eq", ["finset"]], ["mod", "theorem", "forall_mem_empty_iff", ["finset"]], ["add", "theorem", "forall_mem_insert_eq", ["finset"]], ["mod", "theorem", "forall_mem_insert_iff", ["finset"]], ["mod", "theorem", "forall_of_forall_insert", ["finset"]], ["mod", "theorem", "comm", ["finset", "insert"]], ["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "insert_eq_of_mem", ["finset"]], ["mod", "theorem", "insert_subset_insert", ["finset"]], ["mod", "theorem", "insert_union", ["finset"]], ["add", "theorem", "mem_empty_eq", ["finset"]], ["mod", "theorem", "mem_empty_iff", ["finset"]], ["add", "theorem", "mem_erase_eq", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["add", "theorem", "mem_insert_eq", ["finset"]], ["mod", "theorem", "mem_insert_iff", ["finset"]], ["add", "theorem", "mem_inter_eq", ["finset"]], ["mod", "theorem", "mem_list_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_list", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_iff", ["finset"]], ["mod", "theorem", "mem_singleton_of_eq", ["finset"]], ["add", "theorem", "mem_union_eq", ["finset"]], ["add", "theorem", "mem_upto_eq", ["finset"]], ["mod", "theorem", "not_mem_empty", ["finset"]], ["mod", "theorem", "pair_eq_singleton", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["mod", "def", "subset_aux", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]], ["mod", "def", "finset", []], ["mod", "def", "nodup_list", []]]}]}, {"timestamp": 1503837011, "sha": "e6785319", "message": "refactor(data/finset): use generic set notation for finsets", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "eq_of_mem_singleton", ["finset"]], ["mod", "theorem", "eq_of_singleton_eq", ["finset"]]]}]}, {"timestamp": 1503835534, "sha": "b64eb68e", "message": "refactor(data/finset): use generic set notation for finsets", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "erase_insert", ["finset"]], ["mod", "theorem", "erase_insert_subset", ["finset"]], ["mod", "theorem", "exists_mem_empty_iff", ["finset"]], ["mod", "theorem", "exists_mem_insert_iff", ["finset"]], ["mod", "theorem", "forall_mem_empty_iff", ["finset"]], ["mod", "theorem", "forall_mem_insert_iff", ["finset"]], ["mod", "theorem", "comm", ["finset", "insert"]], ["mod", "theorem", "insert_eq", ["finset"]], ["mod", "theorem", "insert_eq_of_mem", ["finset"]], ["mod", "theorem", "insert_subset_insert", ["finset"]], ["mod", "theorem", "insert_union", ["finset"]], ["mod", "theorem", "mem_insert", ["finset"]], ["mod", "theorem", "mem_insert_iff", ["finset"]], ["mod", "theorem", "mem_list_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_list", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_iff", ["finset"]], ["mod", "theorem", "mem_singleton_of_eq", ["finset"]], ["mod", "theorem", "pair_eq_singleton", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]]]}]}, {"timestamp": 1503835500, "sha": "5292cf1f", "message": "Merge branch 'master' of https://github.com/leanprover/mathlib", "changes": [{"oldPath": null, "newPath": "data/finset/basic.lean", "changes": [["add", "def", "card", ["finset"]], ["add", "theorem", "card_empty", ["finset"]], ["add", "theorem", "card_erase_of_mem", ["finset"]], ["add", "theorem", "card_erase_of_not_mem", ["finset"]], ["add", "theorem", "card_insert_le", ["finset"]], ["add", "theorem", "card_insert_of_mem", ["finset"]], ["add", "theorem", "card_insert_of_not_mem", ["finset"]], ["add", "theorem", "card_upto", ["finset"]], ["add", "def", "empty", ["finset"]], ["add", "theorem", "empty_inter", ["finset"]], ["add", "theorem", "empty_subset", ["finset"]], ["add", "theorem", "empty_union", ["finset"]], ["add", "theorem", "eq_empty_of_card_eq_zero", ["finset"]], ["add", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["add", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["add", "theorem", "eq_of_mem_singleton", ["finset"]], ["add", "theorem", "eq_of_singleton_eq", ["finset"]], ["add", "theorem", "eq_of_subset_of_subset", ["finset"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["finset"]], ["add", "def", "erase", ["finset"]], ["add", "theorem", "erase_empty", ["finset"]], ["add", "theorem", "erase_eq_of_not_mem", ["finset"]], ["add", "theorem", "erase_insert", ["finset"]], ["add", "theorem", "erase_insert_subset", ["finset"]], ["add", "theorem", "erase_subset", ["finset"]], ["add", "theorem", "erase_subset_erase", ["finset"]], ["add", "theorem", "erase_subset_of_subset_insert", ["finset"]], ["add", "theorem", "exists_mem_empty_iff", ["finset"]], ["add", "theorem", "exists_mem_insert_iff", ["finset"]], ["add", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["add", "theorem", "ext", ["finset"]], ["add", "theorem", "forall_mem_empty_iff", ["finset"]], ["add", "theorem", "forall_mem_insert_iff", ["finset"]], ["add", "theorem", "forall_of_forall_insert", ["finset"]], ["add", "theorem", "comm", ["finset", "insert"]], ["add", "def", "insert", ["finset"]], ["add", "theorem", "insert_eq", ["finset"]], ["add", "theorem", "insert_eq_of_mem", ["finset"]], ["add", "theorem", "insert_erase", ["finset"]], ["add", "theorem", "insert_erase_subset", ["finset"]], ["add", "theorem", "insert_subset_insert", ["finset"]], ["add", "theorem", "insert_union", ["finset"]], ["add", "def", "inter", ["finset"]], ["add", "theorem", "inter_assoc", ["finset"]], ["add", "theorem", "inter_comm", ["finset"]], ["add", "theorem", "inter_distrib_left", ["finset"]], ["add", "theorem", "inter_distrib_right", ["finset"]], ["add", "theorem", "inter_empty", ["finset"]], ["add", "theorem", "inter_left_comm", ["finset"]], ["add", "theorem", "inter_right_comm", ["finset"]], ["add", "theorem", "inter_self", ["finset"]], ["add", "theorem", "lt_of_mem_upto", ["finset"]], ["add", "def", "mem", ["finset"]], ["add", "theorem", "mem_empty_iff", ["finset"]], ["add", "theorem", "mem_erase_iff", ["finset"]], ["add", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["add", "theorem", "mem_insert", ["finset"]], ["add", "theorem", "mem_insert_iff", ["finset"]], ["add", "theorem", "mem_insert_of_mem", ["finset"]], ["add", "theorem", "mem_inter", ["finset"]], ["add", "theorem", "mem_inter_iff", ["finset"]], ["add", "theorem", "mem_list_of_mem", ["finset"]], ["add", "theorem", "mem_of_mem_erase", ["finset"]], ["add", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["add", "theorem", "mem_of_mem_inter_left", ["finset"]], ["add", "theorem", "mem_of_mem_inter_right", ["finset"]], ["add", "theorem", "mem_of_mem_list", ["finset"]], ["add", "theorem", "mem_of_subset_of_mem", ["finset"]], ["add", "theorem", "mem_or_mem_of_mem_union", ["finset"]], ["add", "theorem", "mem_singleton", ["finset"]], ["add", "theorem", "mem_singleton_iff", ["finset"]], ["add", "theorem", "mem_singleton_of_eq", ["finset"]], ["add", "theorem", "mem_to_finset", ["finset"]], ["add", "theorem", "mem_to_finset_of_nodup", ["finset"]], ["add", "theorem", "mem_union_iff", ["finset"]], ["add", "theorem", "mem_union_l", ["finset"]], ["add", "theorem", "mem_union_left", ["finset"]], ["add", "theorem", "mem_union_r", ["finset"]], ["add", "theorem", "mem_union_right", ["finset"]], ["add", "theorem", "mem_upto_iff", ["finset"]], ["add", "theorem", "mem_upto_of_lt", ["finset"]], ["add", "theorem", "mem_upto_succ_of_mem_upto", ["finset"]], ["add", "theorem", "ne_empty_of_card_eq_succ", ["finset"]], ["add", "theorem", "ne_of_mem_erase", ["finset"]], ["add", "theorem", "not_mem_empty", ["finset"]], ["add", "theorem", "not_mem_erase", ["finset"]], ["add", "theorem", "pair_eq_singleton", ["finset"]], ["add", "theorem", "perm_insert_cons_of_not_mem", ["finset"]], ["add", "theorem", "singleton_inter_of_mem", ["finset"]], ["add", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["add", "theorem", "singleton_ne_empty", ["finset"]], ["add", "theorem", "antisymm", ["finset", "subset"]], ["add", "theorem", "refl", ["finset", "subset"]], ["add", "theorem", "trans", ["finset", "subset"]], ["add", "def", "subset", ["finset"]], ["add", "def", "subset_aux", ["finset"]], ["add", "theorem", "subset_empty_iff", ["finset"]], ["add", "theorem", "subset_insert", ["finset"]], ["add", "theorem", "subset_insert_iff", ["finset"]], ["add", "theorem", "subset_insert_of_erase_subset", ["finset"]], ["add", "theorem", "subset_of_forall", ["finset"]], ["add", "def", "to_finset", ["finset"]], ["add", "theorem", "to_finset_eq_of_nodup", ["finset"]], ["add", "def", "to_finset_of_nodup", ["finset"]], ["add", "def", "union", ["finset"]], ["add", "theorem", "union_assoc", ["finset"]], ["add", "theorem", "union_comm", ["finset"]], ["add", "theorem", "union_distrib_left", ["finset"]], ["add", "theorem", "union_distrib_right", ["finset"]], ["add", "theorem", "union_empty", ["finset"]], ["add", "theorem", "union_left_comm", ["finset"]], ["add", "theorem", "union_right_comm", ["finset"]], ["add", "theorem", "union_self", ["finset"]], ["add", "def", "upto", ["finset"]], ["add", "theorem", "upto_succ", ["finset"]], ["add", "theorem", "upto_zero", ["finset"]], ["add", "def", "finset", []], ["add", "def", "nodup_list", []], ["add", "def", "to_nodup_list", []], ["add", "def", "to_nodup_list_of_nodup", []]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["add", "theorem", "length_erase_of_not_mem", ["list"]]]}]}, {"timestamp": 1503836802, "sha": "1f992c92", "message": "fix(.): adapt to Lean changes: type class parameters to structures are now type class parameters in the projections and constructor", "changes": [{"oldPath": "algebra/module.lean", "newPath": "algebra/module.lean", "changes": [["mod", "theorem", "mul_smul", []], ["mod", "theorem", "smul_left_distrib", []], ["mod", "theorem", "smul_right_distrib", []]]}, {"oldPath": "data/fp/basic.lean", "newPath": "data/fp/basic.lean", "changes": [["mod", "def", "default_nan", ["fp", "float"]]]}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": []}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["mod", "theorem", "t2_separation", []]]}, {"oldPath": "topology/topological_structures.lean", "newPath": "topology/topological_structures.lean", "changes": []}]}, {"timestamp": 1503762007, "sha": "5b3b136a", "message": "feat(topology): port metric space from lean2", "changes": [{"oldPath": "algebra/field.lean", "newPath": "algebra/field.lean", "changes": []}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "abs_eq_zero_iff", []]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "order/basic.lean", "newPath": "order/basic.lean", "changes": [["add", "theorem", "dense", []], ["add", "theorem", "eq_of_le_of_forall_ge", []], ["add", "theorem", "eq_of_le_of_forall_le", []], ["add", "theorem", "le_of_forall_ge", []], ["add", "theorem", "le_of_forall_le", []], ["add", "theorem", "no_bot", []], ["add", "theorem", "no_top", []]]}, {"oldPath": "order/complete_lattice.lean", "newPath": "order/complete_lattice.lean", "changes": [["del", "theorem", "foo'", ["lattice"]], ["del", "theorem", "foo", ["lattice"]], ["add", "theorem", "inf_infi", ["lattice"]], ["add", "theorem", "infi_inf", ["lattice"]]]}, {"oldPath": "order/filter.lean", "newPath": "order/filter.lean", "changes": [["mod", "theorem", "mem_prod_iff", ["filter"]], ["mod", "theorem", "mem_prod_same_iff", ["filter"]], ["mod", "theorem", "prod_comm", ["filter"]], ["add", "theorem", "prod_def", ["filter"]], ["add", "theorem", "prod_infi_left", ["filter"]], ["add", "theorem", "prod_infi_right", ["filter"]], ["mod", "theorem", "prod_mem_prod", ["filter"]], ["mod", "theorem", "prod_same_eq", ["filter"]], ["add", "theorem", "tendsto_infi'", ["filter"]], ["add", "theorem", "tendsto_infi", ["filter"]], ["add", "theorem", "tendsto_principal_principal", ["filter"]]]}, {"oldPath": null, "newPath": "topology/metric_space.lean", "changes": [["add", "def", "closed_ball", []], ["add", "theorem", "continuous_dist'", []], ["add", "theorem", "continuous_dist", []], ["add", "def", "dist", []], ["add", "theorem", "dist_comm", []], ["add", "theorem", "dist_eq_zero_iff", []], ["add", "theorem", "dist_nonneg", []], ["add", "theorem", "dist_pos_of_ne", []], ["add", "theorem", "dist_self", []], ["add", "theorem", "dist_triangle", []], ["add", "theorem", "eq_of_dist_eq_zero", []], ["add", "theorem", "eq_of_forall_dist_le", []], ["add", "theorem", "exists_subtype", []], ["add", "theorem", "is_closed_closed_ball", []], ["add", "theorem", "is_open_metric", []], ["add", "theorem", "is_open_open_ball", []], ["add", "theorem", "mem_nhds_sets_iff_metric", []], ["add", "theorem", "mem_open_ball", []], ["add", "theorem", "ne_of_dist_pos", []], ["add", "theorem", "nhds_eq_metric", []], ["add", "def", "open_ball", []], ["add", "theorem", "open_ball_eq_empty_of_nonpos", []], ["add", "theorem", "open_ball_subset_open_ball_of_le", []], ["add", "theorem", "pos_of_mem_open_ball", []], ["add", "theorem", "tendsto_dist", []], ["add", "theorem", "uniform_continuous_dist'", []], ["add", "theorem", "uniform_continuous_dist", []], ["add", "theorem", "uniformity_dist'", []], ["add", "theorem", "uniformity_dist", []], ["add", "theorem", "zero_eq_dist_iff", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "zero_lt_two", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["add", "theorem", "uniformity_prod_eq_prod", []]]}]}, {"timestamp": 1503762007, "sha": "f1fba68d", "message": "feat(algebra): porting modules from lean2", "changes": [{"oldPath": null, "newPath": "algebra/module.lean", "changes": [["add", "theorem", "mul_smul", []], ["add", "theorem", "neg_smul", []], ["add", "theorem", "one_smul", []], ["add", "def", "to_module", ["ring"]], ["add", "theorem", "smul_left_distrib", []], ["add", "theorem", "smul_neg", []], ["add", "theorem", "smul_right_distrib", []], ["add", "theorem", "smul_sub_left_distrib", []], ["add", "theorem", "smul_zero", []], ["add", "theorem", "sub_smul_right_distrib", []], ["add", "theorem", "zero_smul", []]]}]}, {"timestamp": 1503762007, "sha": "d1cbb8f0", "message": "fix(algebra/group): add every transport theorem from main Lean repository", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "data/finset/basic.lean", "newPath": null, "changes": [["del", "def", "card", ["finset"]], ["del", "theorem", "card_empty", ["finset"]], ["del", "theorem", "card_erase_of_mem", ["finset"]], ["del", "theorem", "card_erase_of_not_mem", ["finset"]], ["del", "theorem", "card_insert_le", ["finset"]], ["del", "theorem", "card_insert_of_mem", ["finset"]], ["del", "theorem", "card_insert_of_not_mem", ["finset"]], ["del", "theorem", "card_upto", ["finset"]], ["del", "def", "empty", ["finset"]], ["del", "theorem", "empty_inter", ["finset"]], ["del", "theorem", "empty_subset", ["finset"]], ["del", "theorem", "empty_union", ["finset"]], ["del", "theorem", "eq_empty_of_card_eq_zero", ["finset"]], ["del", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["del", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["del", "theorem", "eq_of_mem_singleton", ["finset"]], ["del", "theorem", "eq_of_singleton_eq", ["finset"]], ["del", "theorem", "eq_of_subset_of_subset", ["finset"]], ["del", "theorem", "eq_or_mem_of_mem_insert", ["finset"]], ["del", "def", "erase", ["finset"]], ["del", "theorem", "erase_empty", ["finset"]], ["del", "theorem", "erase_eq_of_not_mem", ["finset"]], ["del", "theorem", "erase_insert", ["finset"]], ["del", "theorem", "erase_insert_subset", ["finset"]], ["del", "theorem", "erase_subset", ["finset"]], ["del", "theorem", "erase_subset_erase", ["finset"]], ["del", "theorem", "erase_subset_of_subset_insert", ["finset"]], ["del", "theorem", "exists_mem_empty_iff", ["finset"]], ["del", "theorem", "exists_mem_insert_iff", ["finset"]], ["del", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["del", "theorem", "ext", ["finset"]], ["del", "theorem", "forall_mem_empty_iff", ["finset"]], ["del", "theorem", "forall_mem_insert_iff", ["finset"]], ["del", "theorem", "forall_of_forall_insert", ["finset"]], ["del", "theorem", "comm", ["finset", "insert"]], ["del", "def", "insert", ["finset"]], ["del", "theorem", "insert_eq", ["finset"]], ["del", "theorem", "insert_eq_of_mem", ["finset"]], ["del", "theorem", "insert_erase", ["finset"]], ["del", "theorem", "insert_erase_subset", ["finset"]], ["del", "theorem", "insert_subset_insert", ["finset"]], ["del", "theorem", "insert_union", ["finset"]], ["del", "def", "inter", ["finset"]], ["del", "theorem", "inter_assoc", ["finset"]], ["del", "theorem", "inter_comm", ["finset"]], ["del", "theorem", "inter_distrib_left", ["finset"]], ["del", "theorem", "inter_distrib_right", ["finset"]], ["del", "theorem", "inter_empty", ["finset"]], ["del", "theorem", "inter_left_comm", ["finset"]], ["del", "theorem", "inter_right_comm", ["finset"]], ["del", "theorem", "inter_self", ["finset"]], ["del", "theorem", "lt_of_mem_upto", ["finset"]], ["del", "def", "mem", ["finset"]], ["del", "theorem", "mem_empty_iff", ["finset"]], ["del", "theorem", "mem_erase_iff", ["finset"]], ["del", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["del", "theorem", "mem_insert", ["finset"]], ["del", "theorem", "mem_insert_iff", ["finset"]], ["del", "theorem", "mem_insert_of_mem", ["finset"]], ["del", "theorem", "mem_inter", ["finset"]], ["del", "theorem", "mem_inter_iff", ["finset"]], ["del", "theorem", "mem_list_of_mem", ["finset"]], ["del", "theorem", "mem_of_mem_erase", ["finset"]], ["del", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["del", "theorem", "mem_of_mem_inter_left", ["finset"]], ["del", "theorem", "mem_of_mem_inter_right", ["finset"]], ["del", "theorem", "mem_of_mem_list", ["finset"]], ["del", "theorem", "mem_of_subset_of_mem", ["finset"]], ["del", "theorem", "mem_or_mem_of_mem_union", ["finset"]], ["del", "theorem", "mem_singleton", ["finset"]], ["del", "theorem", "mem_singleton_iff", ["finset"]], ["del", "theorem", "mem_singleton_of_eq", ["finset"]], ["del", "theorem", "mem_to_finset", ["finset"]], ["del", "theorem", "mem_to_finset_of_nodup", ["finset"]], ["del", "theorem", "mem_union_iff", ["finset"]], ["del", "theorem", "mem_union_l", ["finset"]], ["del", "theorem", "mem_union_left", ["finset"]], ["del", "theorem", "mem_union_r", ["finset"]], ["del", "theorem", "mem_union_right", ["finset"]], ["del", "theorem", "mem_upto_iff", ["finset"]], ["del", "theorem", "mem_upto_of_lt", ["finset"]], ["del", "theorem", "mem_upto_succ_of_mem_upto", ["finset"]], ["del", "theorem", "ne_empty_of_card_eq_succ", ["finset"]], ["del", "theorem", "ne_of_mem_erase", ["finset"]], ["del", "theorem", "not_mem_empty", ["finset"]], ["del", "theorem", "not_mem_erase", ["finset"]], ["del", "theorem", "pair_eq_singleton", ["finset"]], ["del", "theorem", "perm_insert_cons_of_not_mem", ["finset"]], ["del", "theorem", "singleton_inter_of_mem", ["finset"]], ["del", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["del", "theorem", "singleton_ne_empty", ["finset"]], ["del", "theorem", "antisymm", ["finset", "subset"]], ["del", "theorem", "refl", ["finset", "subset"]], ["del", "theorem", "trans", ["finset", "subset"]], ["del", "def", "subset", ["finset"]], ["del", "def", "subset_aux", ["finset"]], ["del", "theorem", "subset_empty_iff", ["finset"]], ["del", "theorem", "subset_insert", ["finset"]], ["del", "theorem", "subset_insert_iff", ["finset"]], ["del", "theorem", "subset_insert_of_erase_subset", ["finset"]], ["del", "theorem", "subset_of_forall", ["finset"]], ["del", "def", "to_finset", ["finset"]], ["del", "theorem", "to_finset_eq_of_nodup", ["finset"]], ["del", "def", "to_finset_of_nodup", ["finset"]], ["del", "def", "union", ["finset"]], ["del", "theorem", "union_assoc", ["finset"]], ["del", "theorem", "union_comm", ["finset"]], ["del", "theorem", "union_distrib_left", ["finset"]], ["del", "theorem", "union_distrib_right", ["finset"]], ["del", "theorem", "union_empty", ["finset"]], ["del", "theorem", "union_left_comm", ["finset"]], ["del", "theorem", "union_right_comm", ["finset"]], ["del", "theorem", "union_self", ["finset"]], ["del", "def", "upto", ["finset"]], ["del", "theorem", "upto_succ", ["finset"]], ["del", "theorem", "upto_zero", ["finset"]], ["del", "def", "finset", []], ["del", "def", "nodup_list", []], ["del", "def", "to_nodup_list", []], ["del", "def", "to_nodup_list_of_nodup", []]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["del", "theorem", "length_erase_of_not_mem", ["list"]]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": []}]}, {"timestamp": 1503752620, "sha": "67a2f398", "message": "refactor(data/finset): add type class instances", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": "data/finset/basic.lean", "changes": [["mod", "theorem", "eq_of_mem_singleton", ["finset"]], ["mod", "theorem", "eq_of_singleton_eq", ["finset"]], ["del", "theorem", "exists_mem_empty_eq", ["finset"]], ["mod", "theorem", "exists_mem_empty_iff", ["finset"]], ["del", "theorem", "exists_mem_insert_eq", ["finset"]], ["mod", "theorem", "exists_mem_insert_iff", ["finset"]], ["del", "theorem", "forall_mem_empty_eq", ["finset"]], ["mod", "theorem", "forall_mem_empty_iff", ["finset"]], ["del", "theorem", "forall_mem_insert_eq", ["finset"]], ["mod", "theorem", "forall_mem_insert_iff", ["finset"]], ["mod", "theorem", "forall_of_forall_insert", ["finset"]], ["mod", "theorem", "insert_eq", ["finset"]], ["del", "theorem", "mem_empty_eq", ["finset"]], ["del", "theorem", "mem_erase_eq", ["finset"]], ["del", "theorem", "mem_insert_eq", ["finset"]], ["del", "theorem", "mem_inter_eq", ["finset"]], ["mod", "theorem", "mem_list_of_mem", ["finset"]], ["mod", "theorem", "mem_of_mem_list", ["finset"]], ["mod", "theorem", "mem_singleton", ["finset"]], ["mod", "theorem", "mem_singleton_iff", ["finset"]], ["mod", "theorem", "mem_singleton_of_eq", ["finset"]], ["del", "theorem", "mem_union_eq", ["finset"]], ["del", "theorem", "mem_upto_eq", ["finset"]], ["mod", "theorem", "pair_eq_singleton", ["finset"]], ["mod", "theorem", "singleton_ne_empty", ["finset"]], ["mod", "theorem", "upto_succ", ["finset"]]]}]}, {"timestamp": 1503750298, "sha": "cde1bd87", "message": "Merge branch 'master' of https://github.com/leanprover/mathlib", "changes": [{"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["add", "theorem", "is_open_prod", []], ["add", "theorem", "is_open_prod_iff", []], ["del", "theorem", "is_open_set_prod", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "continuous_add_rat", []], ["del", "theorem", "continuous_add_real'", []], ["del", "theorem", "continuous_add_real", []], ["del", "theorem", "continuous_neg_rat", []], ["del", "theorem", "continuous_neg_real", []], ["del", "theorem", "continuous_sub_real", []], ["mod", "theorem", "exists_supremum_real", []], ["del", "theorem", "is_closed_ge", []], ["del", "theorem", "is_closed_le", []], ["del", "theorem", "is_closed_le_real", []], ["del", "theorem", "is_open_gt", []], ["del", "theorem", "is_open_lt", []], ["del", "theorem", "is_open_lt_real", []], ["del", "theorem", "tendsto_add_rat", []], ["del", "theorem", "tendsto_mul_rat", []], ["del", "theorem", "tendsto_neg_rat", []]]}, {"oldPath": null, "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "continuous_add'", []], ["add", "theorem", "continuous_add", []], ["add", "theorem", "continuous_mul", []], ["add", "theorem", "continuous_neg'", []], ["add", "theorem", "continuous_neg", []], ["add", "theorem", "continuous_sub", []], ["add", "theorem", "dense_or_discrete", []], ["add", "theorem", "is_closed_le", []], ["add", "theorem", "is_open_lt", []], ["add", "theorem", "is_open_lt_fst_snd", []], ["add", "theorem", "order_separated", []], ["add", "theorem", "tendsto_add", []], ["add", "theorem", "tendsto_mul", []], ["add", "theorem", "tendsto_neg", []], ["add", "theorem", "tendsto_sub", []]]}]}, {"timestamp": 1503666017, "sha": "dff0ffd6", "message": "refactor(data/finset): fix formatting issues", "changes": [{"oldPath": null, "newPath": "data/finset/basic.lean", "changes": [["add", "def", "card", ["finset"]], ["add", "theorem", "card_empty", ["finset"]], ["add", "theorem", "card_erase_of_mem", ["finset"]], ["add", "theorem", "card_erase_of_not_mem", ["finset"]], ["add", "theorem", "card_insert_le", ["finset"]], ["add", "theorem", "card_insert_of_mem", ["finset"]], ["add", "theorem", "card_insert_of_not_mem", ["finset"]], ["add", "theorem", "card_upto", ["finset"]], ["add", "def", "empty", ["finset"]], ["add", "theorem", "empty_inter", ["finset"]], ["add", "theorem", "empty_subset", ["finset"]], ["add", "theorem", "empty_union", ["finset"]], ["add", "theorem", "eq_empty_of_card_eq_zero", ["finset"]], ["add", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["add", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["add", "theorem", "eq_of_mem_singleton", ["finset"]], ["add", "theorem", "eq_of_singleton_eq", ["finset"]], ["add", "theorem", "eq_of_subset_of_subset", ["finset"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["finset"]], ["add", "def", "erase", ["finset"]], ["add", "theorem", "erase_empty", ["finset"]], ["add", "theorem", "erase_eq_of_not_mem", ["finset"]], ["add", "theorem", "erase_insert", ["finset"]], ["add", "theorem", "erase_insert_subset", ["finset"]], ["add", "theorem", "erase_subset", ["finset"]], ["add", "theorem", "erase_subset_erase", ["finset"]], ["add", "theorem", "erase_subset_of_subset_insert", ["finset"]], ["add", "theorem", "exists_mem_empty_eq", ["finset"]], ["add", "theorem", "exists_mem_empty_iff", ["finset"]], ["add", "theorem", "exists_mem_insert_eq", ["finset"]], ["add", "theorem", "exists_mem_insert_iff", ["finset"]], ["add", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["add", "theorem", "ext", ["finset"]], ["add", "theorem", "forall_mem_empty_eq", ["finset"]], ["add", "theorem", "forall_mem_empty_iff", ["finset"]], ["add", "theorem", "forall_mem_insert_eq", ["finset"]], ["add", "theorem", "forall_mem_insert_iff", ["finset"]], ["add", "theorem", "forall_of_forall_insert", ["finset"]], ["add", "theorem", "comm", ["finset", "insert"]], ["add", "def", "insert", ["finset"]], ["add", "theorem", "insert_eq", ["finset"]], ["add", "theorem", "insert_eq_of_mem", ["finset"]], ["add", "theorem", "insert_erase", ["finset"]], ["add", "theorem", "insert_erase_subset", ["finset"]], ["add", "theorem", "insert_subset_insert", ["finset"]], ["add", "theorem", "insert_union", ["finset"]], ["add", "def", "inter", ["finset"]], ["add", "theorem", "inter_assoc", ["finset"]], ["add", "theorem", "inter_comm", ["finset"]], ["add", "theorem", "inter_distrib_left", ["finset"]], ["add", "theorem", "inter_distrib_right", ["finset"]], ["add", "theorem", "inter_empty", ["finset"]], ["add", "theorem", "inter_left_comm", ["finset"]], ["add", "theorem", "inter_right_comm", ["finset"]], ["add", "theorem", "inter_self", ["finset"]], ["add", "theorem", "lt_of_mem_upto", ["finset"]], ["add", "def", "mem", ["finset"]], ["add", "theorem", "mem_empty_eq", ["finset"]], ["add", "theorem", "mem_empty_iff", ["finset"]], ["add", "theorem", "mem_erase_eq", ["finset"]], ["add", "theorem", "mem_erase_iff", ["finset"]], ["add", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["add", "theorem", "mem_insert", ["finset"]], ["add", "theorem", "mem_insert_eq", ["finset"]], ["add", "theorem", "mem_insert_iff", ["finset"]], ["add", "theorem", "mem_insert_of_mem", ["finset"]], ["add", "theorem", "mem_inter", ["finset"]], ["add", "theorem", "mem_inter_eq", ["finset"]], ["add", "theorem", "mem_inter_iff", ["finset"]], ["add", "theorem", "mem_list_of_mem", ["finset"]], ["add", "theorem", "mem_of_mem_erase", ["finset"]], ["add", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["add", "theorem", "mem_of_mem_inter_left", ["finset"]], ["add", "theorem", "mem_of_mem_inter_right", ["finset"]], ["add", "theorem", "mem_of_mem_list", ["finset"]], ["add", "theorem", "mem_of_subset_of_mem", ["finset"]], ["add", "theorem", "mem_or_mem_of_mem_union", ["finset"]], ["add", "theorem", "mem_singleton", ["finset"]], ["add", "theorem", "mem_singleton_iff", ["finset"]], ["add", "theorem", "mem_singleton_of_eq", ["finset"]], ["add", "theorem", "mem_to_finset", ["finset"]], ["add", "theorem", "mem_to_finset_of_nodup", ["finset"]], ["add", "theorem", "mem_union_eq", ["finset"]], ["add", "theorem", "mem_union_iff", ["finset"]], ["add", "theorem", "mem_union_l", ["finset"]], ["add", "theorem", "mem_union_left", ["finset"]], ["add", "theorem", "mem_union_r", ["finset"]], ["add", "theorem", "mem_union_right", ["finset"]], ["add", "theorem", "mem_upto_eq", ["finset"]], ["add", "theorem", "mem_upto_iff", ["finset"]], ["add", "theorem", "mem_upto_of_lt", ["finset"]], ["add", "theorem", "mem_upto_succ_of_mem_upto", ["finset"]], ["add", "theorem", "ne_empty_of_card_eq_succ", ["finset"]], ["add", "theorem", "ne_of_mem_erase", ["finset"]], ["add", "theorem", "not_mem_empty", ["finset"]], ["add", "theorem", "not_mem_erase", ["finset"]], ["add", "theorem", "pair_eq_singleton", ["finset"]], ["add", "theorem", "perm_insert_cons_of_not_mem", ["finset"]], ["add", "theorem", "singleton_inter_of_mem", ["finset"]], ["add", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["add", "theorem", "singleton_ne_empty", ["finset"]], ["add", "theorem", "antisymm", ["finset", "subset"]], ["add", "theorem", "refl", ["finset", "subset"]], ["add", "theorem", "trans", ["finset", "subset"]], ["add", "def", "subset", ["finset"]], ["add", "def", "subset_aux", ["finset"]], ["add", "theorem", "subset_empty_iff", ["finset"]], ["add", "theorem", "subset_insert", ["finset"]], ["add", "theorem", "subset_insert_iff", ["finset"]], ["add", "theorem", "subset_insert_of_erase_subset", ["finset"]], ["add", "theorem", "subset_of_forall", ["finset"]], ["add", "def", "to_finset", ["finset"]], ["add", "theorem", "to_finset_eq_of_nodup", ["finset"]], ["add", "def", "to_finset_of_nodup", ["finset"]], ["add", "def", "union", ["finset"]], ["add", "theorem", "union_assoc", ["finset"]], ["add", "theorem", "union_comm", ["finset"]], ["add", "theorem", "union_distrib_left", ["finset"]], ["add", "theorem", "union_distrib_right", ["finset"]], ["add", "theorem", "union_empty", ["finset"]], ["add", "theorem", "union_left_comm", ["finset"]], ["add", "theorem", "union_right_comm", ["finset"]], ["add", "theorem", "union_self", ["finset"]], ["add", "def", "upto", ["finset"]], ["add", "theorem", "upto_succ", ["finset"]], ["add", "theorem", "upto_zero", ["finset"]], ["add", "def", "finset", []], ["add", "def", "nodup_list", []], ["add", "def", "to_nodup_list", []], ["add", "def", "to_nodup_list_of_nodup", []]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["add", "theorem", "length_erase_of_not_mem", ["list"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["del", "theorem", "is_open_prod", []], ["del", "theorem", "is_open_prod_iff", []], ["add", "theorem", "is_open_set_prod", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["add", "theorem", "continuous_add_rat", []], ["add", "theorem", "continuous_add_real'", []], ["add", "theorem", "continuous_add_real", []], ["add", "theorem", "continuous_neg_rat", []], ["add", "theorem", "continuous_neg_real", []], ["add", "theorem", "continuous_sub_real", []], ["mod", "theorem", "exists_supremum_real", []], ["add", "theorem", "is_closed_ge", []], ["add", "theorem", "is_closed_le", []], ["add", "theorem", "is_closed_le_real", []], ["add", "theorem", "is_open_gt", []], ["add", "theorem", "is_open_lt", []], ["add", "theorem", "is_open_lt_real", []], ["add", "theorem", "tendsto_add_rat", []], ["add", "theorem", "tendsto_mul_rat", []], ["add", "theorem", "tendsto_neg_rat", []]]}, {"oldPath": "topology/topological_structures.lean", "newPath": null, "changes": [["del", "theorem", "continuous_add'", []], ["del", "theorem", "continuous_add", []], ["del", "theorem", "continuous_mul", []], ["del", "theorem", "continuous_neg'", []], ["del", "theorem", "continuous_neg", []], ["del", "theorem", "continuous_sub", []], ["del", "theorem", "dense_or_discrete", []], ["del", "theorem", "is_closed_le", []], ["del", "theorem", "is_open_lt", []], ["del", "theorem", "is_open_lt_fst_snd", []], ["del", "theorem", "order_separated", []], ["del", "theorem", "tendsto_add", []], ["del", "theorem", "tendsto_mul", []], ["del", "theorem", "tendsto_neg", []], ["del", "theorem", "tendsto_sub", []]]}]}, {"timestamp": 1503601776, "sha": "7c72de2b", "message": "feat(topology): add topological structures for groups, ring, and linear orders; add instances for rat and real", "changes": [{"oldPath": "data/finset/basic.lean", "newPath": null, "changes": [["del", "def", "card", ["finset"]], ["del", "theorem", "card_empty", ["finset"]], ["del", "theorem", "card_erase_of_mem", ["finset"]], ["del", "theorem", "card_erase_of_not_mem", ["finset"]], ["del", "theorem", "card_insert_le", ["finset"]], ["del", "theorem", "card_insert_of_mem", ["finset"]], ["del", "theorem", "card_insert_of_not_mem", ["finset"]], ["del", "theorem", "card_upto", ["finset"]], ["del", "def", "empty", ["finset"]], ["del", "theorem", "empty_inter", ["finset"]], ["del", "theorem", "empty_subset", ["finset"]], ["del", "theorem", "empty_union", ["finset"]], ["del", "theorem", "eq_empty_of_card_eq_zero", ["finset"]], ["del", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["del", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["del", "theorem", "eq_of_mem_singleton", ["finset"]], ["del", "theorem", "eq_of_singleton_eq", ["finset"]], ["del", "theorem", "eq_of_subset_of_subset", ["finset"]], ["del", "theorem", "eq_or_mem_of_mem_insert", ["finset"]], ["del", "def", "erase", ["finset"]], ["del", "theorem", "erase_empty", ["finset"]], ["del", "theorem", "erase_eq_of_not_mem", ["finset"]], ["del", "theorem", "erase_insert", ["finset"]], ["del", "theorem", "erase_insert_subset", ["finset"]], ["del", "theorem", "erase_subset", ["finset"]], ["del", "theorem", "erase_subset_erase", ["finset"]], ["del", "theorem", "erase_subset_of_subset_insert", ["finset"]], ["del", "theorem", "exists_mem_empty_eq", ["finset"]], ["del", "theorem", "exists_mem_empty_iff", ["finset"]], ["del", "theorem", "exists_mem_insert_eq", ["finset"]], ["del", "theorem", "exists_mem_insert_iff", ["finset"]], ["del", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["del", "theorem", "ext", ["finset"]], ["del", "theorem", "forall_mem_empty_eq", ["finset"]], ["del", "theorem", "forall_mem_empty_iff", ["finset"]], ["del", "theorem", "forall_mem_insert_eq", ["finset"]], ["del", "theorem", "forall_mem_insert_iff", ["finset"]], ["del", "theorem", "forall_of_forall_insert", ["finset"]], ["del", "theorem", "comm", ["finset", "insert"]], ["del", "def", "insert", ["finset"]], ["del", "theorem", "insert_eq", ["finset"]], ["del", "theorem", "insert_eq_of_mem", ["finset"]], ["del", "theorem", "insert_erase", ["finset"]], ["del", "theorem", "insert_erase_subset", ["finset"]], ["del", "theorem", "insert_subset_insert", ["finset"]], ["del", "theorem", "insert_union", ["finset"]], ["del", "def", "inter", ["finset"]], ["del", "theorem", "inter_assoc", ["finset"]], ["del", "theorem", "inter_comm", ["finset"]], ["del", "theorem", "inter_distrib_left", ["finset"]], ["del", "theorem", "inter_distrib_right", ["finset"]], ["del", "theorem", "inter_empty", ["finset"]], ["del", "theorem", "inter_left_comm", ["finset"]], ["del", "theorem", "inter_right_comm", ["finset"]], ["del", "theorem", "inter_self", ["finset"]], ["del", "theorem", "lt_of_mem_upto", ["finset"]], ["del", "def", "mem", ["finset"]], ["del", "theorem", "mem_empty_eq", ["finset"]], ["del", "theorem", "mem_empty_iff", ["finset"]], ["del", "theorem", "mem_erase_eq", ["finset"]], ["del", "theorem", "mem_erase_iff", ["finset"]], ["del", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["del", "theorem", "mem_insert", ["finset"]], ["del", "theorem", "mem_insert_eq", ["finset"]], ["del", "theorem", "mem_insert_iff", ["finset"]], ["del", "theorem", "mem_insert_of_mem", ["finset"]], ["del", "theorem", "mem_inter", ["finset"]], ["del", "theorem", "mem_inter_eq", ["finset"]], ["del", "theorem", "mem_inter_iff", ["finset"]], ["del", "theorem", "mem_list_of_mem", ["finset"]], ["del", "theorem", "mem_of_mem_erase", ["finset"]], ["del", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["del", "theorem", "mem_of_mem_inter_left", ["finset"]], ["del", "theorem", "mem_of_mem_inter_right", ["finset"]], ["del", "theorem", "mem_of_mem_list", ["finset"]], ["del", "theorem", "mem_of_subset_of_mem", ["finset"]], ["del", "theorem", "mem_or_mem_of_mem_union", ["finset"]], ["del", "theorem", "mem_singleton", ["finset"]], ["del", "theorem", "mem_singleton_iff", ["finset"]], ["del", "theorem", "mem_singleton_of_eq", ["finset"]], ["del", "theorem", "mem_to_finset", ["finset"]], ["del", "theorem", "mem_to_finset_of_nodup", ["finset"]], ["del", "theorem", "mem_union_eq", ["finset"]], ["del", "theorem", "mem_union_iff", ["finset"]], ["del", "theorem", "mem_union_l", ["finset"]], ["del", "theorem", "mem_union_left", ["finset"]], ["del", "theorem", "mem_union_r", ["finset"]], ["del", "theorem", "mem_union_right", ["finset"]], ["del", "theorem", "mem_upto_eq", ["finset"]], ["del", "theorem", "mem_upto_iff", ["finset"]], ["del", "theorem", "mem_upto_of_lt", ["finset"]], ["del", "theorem", "mem_upto_succ_of_mem_upto", ["finset"]], ["del", "theorem", "ne_empty_of_card_eq_succ", ["finset"]], ["del", "theorem", "ne_of_mem_erase", ["finset"]], ["del", "theorem", "not_mem_empty", ["finset"]], ["del", "theorem", "not_mem_erase", ["finset"]], ["del", "theorem", "pair_eq_singleton", ["finset"]], ["del", "theorem", "perm_insert_cons_of_not_mem", ["finset"]], ["del", "theorem", "singleton_inter_of_mem", ["finset"]], ["del", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["del", "theorem", "singleton_ne_empty", ["finset"]], ["del", "theorem", "antisymm", ["finset", "subset"]], ["del", "theorem", "refl", ["finset", "subset"]], ["del", "theorem", "trans", ["finset", "subset"]], ["del", "def", "subset", ["finset"]], ["del", "def", "subset_aux", ["finset"]], ["del", "theorem", "subset_empty_iff", ["finset"]], ["del", "theorem", "subset_insert", ["finset"]], ["del", "theorem", "subset_insert_iff", ["finset"]], ["del", "theorem", "subset_insert_of_erase_subset", ["finset"]], ["del", "theorem", "subset_of_forall", ["finset"]], ["del", "def", "to_finset", ["finset"]], ["del", "theorem", "to_finset_eq_of_nodup", ["finset"]], ["del", "def", "to_finset_of_nodup", ["finset"]], ["del", "def", "union", ["finset"]], ["del", "theorem", "union_assoc", ["finset"]], ["del", "theorem", "union_comm", ["finset"]], ["del", "theorem", "union_distrib_left", ["finset"]], ["del", "theorem", "union_distrib_right", ["finset"]], ["del", "theorem", "union_empty", ["finset"]], ["del", "theorem", "union_left_comm", ["finset"]], ["del", "theorem", "union_right_comm", ["finset"]], ["del", "theorem", "union_self", ["finset"]], ["del", "def", "upto", ["finset"]], ["del", "theorem", "upto_succ", ["finset"]], ["del", "theorem", "upto_zero", ["finset"]], ["del", "def", "finset", []], ["del", "def", "nodup_list", []], ["del", "def", "to_nodup_list", []], ["del", "def", "to_nodup_list_of_nodup", []]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["del", "theorem", "length_erase_of_not_mem", ["list"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["add", "theorem", "is_open_prod", []], ["add", "theorem", "is_open_prod_iff", []], ["del", "theorem", "is_open_set_prod", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "continuous_add_rat", []], ["del", "theorem", "continuous_add_real'", []], ["del", "theorem", "continuous_add_real", []], ["del", "theorem", "continuous_neg_rat", []], ["del", "theorem", "continuous_neg_real", []], ["del", "theorem", "continuous_sub_real", []], ["mod", "theorem", "exists_supremum_real", []], ["del", "theorem", "is_closed_ge", []], ["del", "theorem", "is_closed_le", []], ["del", "theorem", "is_closed_le_real", []], ["del", "theorem", "is_open_gt", []], ["del", "theorem", "is_open_lt", []], ["del", "theorem", "is_open_lt_real", []], ["del", "theorem", "tendsto_add_rat", []], ["del", "theorem", "tendsto_mul_rat", []], ["del", "theorem", "tendsto_neg_rat", []]]}, {"oldPath": null, "newPath": "topology/topological_structures.lean", "changes": [["add", "theorem", "continuous_add'", []], ["add", "theorem", "continuous_add", []], ["add", "theorem", "continuous_mul", []], ["add", "theorem", "continuous_neg'", []], ["add", "theorem", "continuous_neg", []], ["add", "theorem", "continuous_sub", []], ["add", "theorem", "dense_or_discrete", []], ["add", "theorem", "is_closed_le", []], ["add", "theorem", "is_open_lt", []], ["add", "theorem", "is_open_lt_fst_snd", []], ["add", "theorem", "order_separated", []], ["add", "theorem", "tendsto_add", []], ["add", "theorem", "tendsto_mul", []], ["add", "theorem", "tendsto_neg", []], ["add", "theorem", "tendsto_sub", []]]}]}, {"timestamp": 1503591661, "sha": "7df585ef", "message": "feat(data/finset): add basics for finsets", "changes": [{"oldPath": null, "newPath": "data/finset/basic.lean", "changes": [["add", "def", "card", ["finset"]], ["add", "theorem", "card_empty", ["finset"]], ["add", "theorem", "card_erase_of_mem", ["finset"]], ["add", "theorem", "card_erase_of_not_mem", ["finset"]], ["add", "theorem", "card_insert_le", ["finset"]], ["add", "theorem", "card_insert_of_mem", ["finset"]], ["add", "theorem", "card_insert_of_not_mem", ["finset"]], ["add", "theorem", "card_upto", ["finset"]], ["add", "def", "empty", ["finset"]], ["add", "theorem", "empty_inter", ["finset"]], ["add", "theorem", "empty_subset", ["finset"]], ["add", "theorem", "empty_union", ["finset"]], ["add", "theorem", "eq_empty_of_card_eq_zero", ["finset"]], ["add", "theorem", "eq_empty_of_forall_not_mem", ["finset"]], ["add", "theorem", "eq_empty_of_subset_empty", ["finset"]], ["add", "theorem", "eq_of_mem_singleton", ["finset"]], ["add", "theorem", "eq_of_singleton_eq", ["finset"]], ["add", "theorem", "eq_of_subset_of_subset", ["finset"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["finset"]], ["add", "def", "erase", ["finset"]], ["add", "theorem", "erase_empty", ["finset"]], ["add", "theorem", "erase_eq_of_not_mem", ["finset"]], ["add", "theorem", "erase_insert", ["finset"]], ["add", "theorem", "erase_insert_subset", ["finset"]], ["add", "theorem", "erase_subset", ["finset"]], ["add", "theorem", "erase_subset_erase", ["finset"]], ["add", "theorem", "erase_subset_of_subset_insert", ["finset"]], ["add", "theorem", "exists_mem_empty_eq", ["finset"]], ["add", "theorem", "exists_mem_empty_iff", ["finset"]], ["add", "theorem", "exists_mem_insert_eq", ["finset"]], ["add", "theorem", "exists_mem_insert_iff", ["finset"]], ["add", "theorem", "exists_mem_of_ne_empty", ["finset"]], ["add", "theorem", "ext", ["finset"]], ["add", "theorem", "forall_mem_empty_eq", ["finset"]], ["add", "theorem", "forall_mem_empty_iff", ["finset"]], ["add", "theorem", "forall_mem_insert_eq", ["finset"]], ["add", "theorem", "forall_mem_insert_iff", ["finset"]], ["add", "theorem", "forall_of_forall_insert", ["finset"]], ["add", "theorem", "comm", ["finset", "insert"]], ["add", "def", "insert", ["finset"]], ["add", "theorem", "insert_eq", ["finset"]], ["add", "theorem", "insert_eq_of_mem", ["finset"]], ["add", "theorem", "insert_erase", ["finset"]], ["add", "theorem", "insert_erase_subset", ["finset"]], ["add", "theorem", "insert_subset_insert", ["finset"]], ["add", "theorem", "insert_union", ["finset"]], ["add", "def", "inter", ["finset"]], ["add", "theorem", "inter_assoc", ["finset"]], ["add", "theorem", "inter_comm", ["finset"]], ["add", "theorem", "inter_distrib_left", ["finset"]], ["add", "theorem", "inter_distrib_right", ["finset"]], ["add", "theorem", "inter_empty", ["finset"]], ["add", "theorem", "inter_left_comm", ["finset"]], ["add", "theorem", "inter_right_comm", ["finset"]], ["add", "theorem", "inter_self", ["finset"]], ["add", "theorem", "lt_of_mem_upto", ["finset"]], ["add", "def", "mem", ["finset"]], ["add", "theorem", "mem_empty_eq", ["finset"]], ["add", "theorem", "mem_empty_iff", ["finset"]], ["add", "theorem", "mem_erase_eq", ["finset"]], ["add", "theorem", "mem_erase_iff", ["finset"]], ["add", "theorem", "mem_erase_of_ne_of_mem", ["finset"]], ["add", "theorem", "mem_insert", ["finset"]], ["add", "theorem", "mem_insert_eq", ["finset"]], ["add", "theorem", "mem_insert_iff", ["finset"]], ["add", "theorem", "mem_insert_of_mem", ["finset"]], ["add", "theorem", "mem_inter", ["finset"]], ["add", "theorem", "mem_inter_eq", ["finset"]], ["add", "theorem", "mem_inter_iff", ["finset"]], ["add", "theorem", "mem_list_of_mem", ["finset"]], ["add", "theorem", "mem_of_mem_erase", ["finset"]], ["add", "theorem", "mem_of_mem_insert_of_ne", ["finset"]], ["add", "theorem", "mem_of_mem_inter_left", ["finset"]], ["add", "theorem", "mem_of_mem_inter_right", ["finset"]], ["add", "theorem", "mem_of_mem_list", ["finset"]], ["add", "theorem", "mem_of_subset_of_mem", ["finset"]], ["add", "theorem", "mem_or_mem_of_mem_union", ["finset"]], ["add", "theorem", "mem_singleton", ["finset"]], ["add", "theorem", "mem_singleton_iff", ["finset"]], ["add", "theorem", "mem_singleton_of_eq", ["finset"]], ["add", "theorem", "mem_to_finset", ["finset"]], ["add", "theorem", "mem_to_finset_of_nodup", ["finset"]], ["add", "theorem", "mem_union_eq", ["finset"]], ["add", "theorem", "mem_union_iff", ["finset"]], ["add", "theorem", "mem_union_l", ["finset"]], ["add", "theorem", "mem_union_left", ["finset"]], ["add", "theorem", "mem_union_r", ["finset"]], ["add", "theorem", "mem_union_right", ["finset"]], ["add", "theorem", "mem_upto_eq", ["finset"]], ["add", "theorem", "mem_upto_iff", ["finset"]], ["add", "theorem", "mem_upto_of_lt", ["finset"]], ["add", "theorem", "mem_upto_succ_of_mem_upto", ["finset"]], ["add", "theorem", "ne_empty_of_card_eq_succ", ["finset"]], ["add", "theorem", "ne_of_mem_erase", ["finset"]], ["add", "theorem", "not_mem_empty", ["finset"]], ["add", "theorem", "not_mem_erase", ["finset"]], ["add", "theorem", "pair_eq_singleton", ["finset"]], ["add", "theorem", "perm_insert_cons_of_not_mem", ["finset"]], ["add", "theorem", "singleton_inter_of_mem", ["finset"]], ["add", "theorem", "singleton_inter_of_not_mem", ["finset"]], ["add", "theorem", "singleton_ne_empty", ["finset"]], ["add", "theorem", "antisymm", ["finset", "subset"]], ["add", "theorem", "refl", ["finset", "subset"]], ["add", "theorem", "trans", ["finset", "subset"]], ["add", "def", "subset", ["finset"]], ["add", "def", "subset_aux", ["finset"]], ["add", "theorem", "subset_empty_iff", ["finset"]], ["add", "theorem", "subset_insert", ["finset"]], ["add", "theorem", "subset_insert_iff", ["finset"]], ["add", "theorem", "subset_insert_of_erase_subset", ["finset"]], ["add", "theorem", "subset_of_forall", ["finset"]], ["add", "def", "to_finset", ["finset"]], ["add", "theorem", "to_finset_eq_of_nodup", ["finset"]], ["add", "def", "to_finset_of_nodup", ["finset"]], ["add", "def", "union", ["finset"]], ["add", "theorem", "union_assoc", ["finset"]], ["add", "theorem", "union_comm", ["finset"]], ["add", "theorem", "union_distrib_left", ["finset"]], ["add", "theorem", "union_distrib_right", ["finset"]], ["add", "theorem", "union_empty", ["finset"]], ["add", "theorem", "union_left_comm", ["finset"]], ["add", "theorem", "union_right_comm", ["finset"]], ["add", "theorem", "union_self", ["finset"]], ["add", "def", "upto", ["finset"]], ["add", "theorem", "upto_succ", ["finset"]], ["add", "theorem", "upto_zero", ["finset"]], ["add", "def", "finset", []], ["add", "def", "nodup_list", []], ["add", "def", "to_nodup_list", []], ["add", "def", "to_nodup_list_of_nodup", []]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["add", "theorem", "length_erase_of_not_mem", ["list"]]]}]}, {"timestamp": 1503582609, "sha": "33b22b0a", "message": "data/option: add filter", "changes": [{"oldPath": "data/option.lean", "newPath": "data/option.lean", "changes": [["add", "def", "filter", ["option"]]]}]}, {"timestamp": 1503582394, "sha": "4320c417", "message": "chore(*): rename stdlib to mathlib", "changes": [{"oldPath": "README.md", "newPath": "README.md", "changes": []}, {"oldPath": "leanpkg.toml", "newPath": "leanpkg.toml", "changes": []}]}, {"timestamp": 1503581685, "sha": "9566a5bf", "message": "Merge pull request #10 from johoelzl/repair\nrat is order-dense in real; cleanup continuity proof for inv", "changes": []}, {"timestamp": 1503506556, "sha": "963bcad8", "message": "rat is order-dense in real; cleanup continuity proof for inv", "changes": [{"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "closure_of_rat_image_eq", []], ["add", "theorem", "closure_of_rat_image_le_eq", []], ["add", "theorem", "closure_of_rat_image_le_le_eq", []], ["add", "theorem", "exists_pos_of_rat", []], ["add", "theorem", "ge_mem_nhds", []], ["add", "theorem", "le_mem_nhds", []], ["add", "theorem", "mem_zero_nhd_le", []], ["mod", "theorem", "tendsto_mul_bnd_rat", []]]}]}, {"timestamp": 1503506508, "sha": "d7084898", "message": "adapt to Lean changes", "changes": [{"oldPath": "theories/set_theory.lean", "newPath": "theories/set_theory.lean", "changes": [["mod", "def", "eval_val", ["pSet", "resp"]]]}]}, {"timestamp": 1503421396, "sha": "3d817686", "message": "fix(data/list/perm): replace broken match with cases proof", "changes": [{"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}]}, {"timestamp": 1503419784, "sha": "2780e70e", "message": "Adapt to changes in equation compiler:\n* Names are not necessary propagated when `rfl` is eliminated on two\n variables. Replace `rfl` by `eq.refl n`.\n* it looks like that delta, beta, eta conversion rules are applied later now,\n so some statements of the form `assume tendsto", "changes": [{"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["add", "def", "tendsto", ["filter"]], ["add", "theorem", "tendsto_compose", ["filter"]], ["add", "theorem", "tendsto_cong", ["filter"]], ["add", "theorem", "tendsto_fst", ["filter"]], ["add", "theorem", "tendsto_id'", ["filter"]], ["add", "theorem", "tendsto_id", ["filter"]], ["add", "theorem", "tendsto_inf", ["filter"]], ["add", "theorem", "tendsto_map'", ["filter"]], ["add", "theorem", "tendsto_map", ["filter"]], ["add", "theorem", "tendsto_prod_mk", ["filter"]], ["add", "theorem", "tendsto_snd", ["filter"]], ["add", "theorem", "tendsto_vmap''", ["filter"]], ["add", "theorem", "tendsto_vmap'", ["filter"]], ["add", "theorem", "tendsto_vmap", ["filter"]], ["del", "def", "towards", ["filter"]], ["del", "theorem", "towards_compose", ["filter"]], ["del", "theorem", "towards_cong", ["filter"]], ["del", "theorem", "towards_fst", ["filter"]], ["del", "theorem", "towards_id'", ["filter"]], ["del", "theorem", "towards_id", ["filter"]], ["del", "theorem", "towards_inf", ["filter"]], ["del", "theorem", "towards_map'", ["filter"]], ["del", "theorem", "towards_map", ["filter"]], ["del", "theorem", "towards_prod_mk", ["filter"]], ["del", "theorem", "towards_snd", ["filter"]], ["del", "theorem", "towards_vmap''", ["filter"]], ["del", "theorem", "towards_vmap'", ["filter"]], ["del", "theorem", "towards_vmap", ["filter"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["add", "theorem", "continuous_iff_tendsto", []], ["del", "theorem", "continuous_iff_towards", []], ["add", "theorem", "tendsto_ext", ["dense_embedding"]], ["del", "theorem", "towards_ext", ["dense_embedding"]], ["add", "theorem", "tendsto_nhds_iff_of_embedding", []], ["del", "theorem", "towards_nhds_iff_of_embedding", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["mod", "theorem", "lift_rat_fun_of_rat", []], ["mod", "theorem", "of_rat_add", []], ["mod", "theorem", "of_rat_inv", []], ["mod", "theorem", "of_rat_mul", []], ["mod", "theorem", "of_rat_neg", []], ["mod", "theorem", "of_rat_one", []], ["mod", "theorem", "of_rat_sub", []], ["mod", "theorem", "of_rat_zero", []], ["add", "theorem", "tendsto_add_rat", []], ["add", "theorem", "tendsto_add_rat_zero'", []], ["add", "theorem", "tendsto_add_rat_zero", []], ["add", "theorem", "tendsto_inv_pos_rat", []], ["add", "theorem", "tendsto_inv_rat", []], ["add", "theorem", "tendsto_inv_real", []], ["add", "theorem", "tendsto_mul_bnd_rat'", []], ["add", "theorem", "tendsto_mul_bnd_rat", []], ["add", "theorem", "tendsto_mul_rat'", []], ["add", "theorem", "tendsto_mul_rat", []], ["add", "theorem", "tendsto_neg_rat", []], ["add", "theorem", "tendsto_neg_rat_zero", []], ["add", "theorem", "tendsto_of_uniform_continuous_subtype", []], ["add", "theorem", "tendsto_sub_rat'", []], ["add", "theorem", "tendsto_sub_uniformity_zero_nhd'", []], ["add", "theorem", "tendsto_sub_uniformity_zero_nhd", []], ["add", "theorem", "tendsto_zero_nhds", []], ["del", "theorem", "towards_add_rat", []], ["del", "theorem", "towards_add_rat_zero'", []], ["del", "theorem", "towards_add_rat_zero", []], ["del", "theorem", "towards_inv_pos_rat", []], ["del", "theorem", "towards_inv_rat", []], ["del", "theorem", "towards_inv_real", []], ["del", "theorem", "towards_mul_bnd_rat'", []], ["del", "theorem", "towards_mul_bnd_rat", []], ["del", "theorem", "towards_mul_rat'", []], ["del", "theorem", "towards_mul_rat", []], ["del", "theorem", "towards_neg_rat", []], ["del", "theorem", "towards_neg_rat_zero", []], ["del", "theorem", "towards_of_uniform_continuous_subtype", []], ["del", "theorem", "towards_sub_rat'", []], ["del", "theorem", "towards_sub_uniformity_zero_nhd'", []], ["del", "theorem", "towards_sub_uniformity_zero_nhd", []], ["del", "theorem", "towards_zero_nhds", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["add", "theorem", "tendsto_const_nhds", []], ["add", "theorem", "tendsto_nhds", []], ["add", "theorem", "tendsto_nhds_unique", []], ["del", "theorem", "towards_const_nhds", []], ["del", "theorem", "towards_nhds", []], ["del", "theorem", "towards_nhds_unique", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["add", "theorem", "tendsto_const_uniformity", []], ["add", "theorem", "tendsto_left_nhds_uniformity", []], ["add", "theorem", "tendsto_prod_uniformity_fst", []], ["add", "theorem", "tendsto_prod_uniformity_snd", []], ["add", "theorem", "tendsto_right_nhds_uniformity", []], ["add", "theorem", "tendsto_swap_uniformity", []], ["del", "theorem", "towards_const_uniformity", []], ["del", "theorem", "towards_left_nhds_uniformity", []], ["del", "theorem", "towards_prod_uniformity_fst", []], ["del", "theorem", "towards_prod_uniformity_snd", []], ["del", "theorem", "towards_right_nhds_uniformity", []], ["del", "theorem", "towards_swap_uniformity", []]]}]}, {"timestamp": 1502383263, "sha": "2ac1f20a", "message": "rename open -> is_open, closed -> is_closed", "changes": [{"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["del", "theorem", "closed_diagonal", []], ["del", "theorem", "closed_eq", []], ["del", "theorem", "closed_prod", []], ["del", "theorem", "closed_property2", []], ["del", "theorem", "closed_property3", []], ["del", "theorem", "closed_property", []], ["mod", "def", "continuous", []], ["mod", "theorem", "continuous_Prop", []], ["del", "theorem", "continuous_iff_closed", []], ["add", "theorem", "continuous_iff_is_closed", []], ["del", "theorem", "continuous_subtype_closed_cover", []], ["add", "theorem", "continuous_subtype_is_closed_cover", []], ["del", "theorem", "embedding_closed", []], ["add", "theorem", "embedding_is_closed", []], ["add", "theorem", "is_closed_diagonal", []], ["add", "theorem", "is_closed_eq", []], ["add", "theorem", "is_closed_prod", []], ["add", "theorem", "is_closed_property2", []], ["add", "theorem", "is_closed_property3", []], ["add", "theorem", "is_closed_property", []], ["add", "theorem", "is_open_induced", []], ["add", "theorem", "is_open_set_prod", []], ["add", "theorem", "is_open_singleton_true", []], ["del", "theorem", "open_induced", []], ["del", "theorem", "open_set_prod", []], ["del", "theorem", "open_singleton_true", []]]}, {"oldPath": "topology/real.lean", "newPath": "topology/real.lean", "changes": [["del", "theorem", "closed_ge", []], ["del", "theorem", "closed_imp", []], ["del", "theorem", "closed_le", []], ["del", "theorem", "closed_le_real", []], ["add", "theorem", "is_closed_ge", []], ["add", "theorem", "is_closed_imp", []], ["add", "theorem", "is_closed_le", []], ["add", "theorem", "is_closed_le_real", []], ["add", "theorem", "is_open_gt", []], ["add", "theorem", "is_open_lt", []], ["add", "theorem", "is_open_lt_real", []], ["del", "theorem", "open_gt", []], ["del", "theorem", "open_lt", []], ["del", "theorem", "open_lt_real", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["del", "def", "closed", []], ["del", "theorem", "closed_Inter", []], ["del", "theorem", "closed_Union", []], ["del", "theorem", "closed_Union_of_locally_finite", []], ["del", "theorem", "closed_closure", []], ["del", "theorem", "closed_compl_iff", []], ["del", "theorem", "closed_empty", []], ["del", "theorem", "closed_iff_nhds", []], ["del", "theorem", "closed_induced_iff", []], ["del", "theorem", "closed_inter", []], ["del", "theorem", "closed_sInter", []], ["del", "theorem", "closed_singleton", []], ["del", "theorem", "closed_union", []], ["del", "theorem", "closed_univ", []], ["mod", "def", "closure", []], ["del", "theorem", "closure_eq_iff_closed", []], ["add", "theorem", "closure_eq_iff_is_closed", []], ["del", "theorem", "closure_eq_of_closed", []], ["add", "theorem", "closure_eq_of_is_closed", []], ["mod", "theorem", "closure_inter_open", []], ["mod", "theorem", "closure_minimal", []], ["del", "theorem", "closure_subset_iff_subset_of_closed", []], ["add", "theorem", "closure_subset_iff_subset_of_is_closed", []], ["del", "theorem", "compact_of_closed_subset", []], ["add", "theorem", "compact_of_is_closed_subset", []], ["mod", "theorem", "generate_from_le", []], ["mod", "def", "interior", []], ["mod", "theorem", "interior_eq_iff_open", []], ["mod", "theorem", "interior_eq_of_open", []], ["mod", "theorem", "interior_maximal", []], ["del", "theorem", "interior_union_closed_of_interior_empty", []], ["add", "theorem", "interior_union_is_closed_of_interior_empty", []], ["add", "def", "is_closed", []], ["add", "theorem", "is_closed_Inter", []], ["add", "theorem", "is_closed_Union", []], ["add", "theorem", "is_closed_Union_of_locally_finite", []], ["add", "theorem", "is_closed_closure", []], ["add", "theorem", "is_closed_compl_iff", []], ["add", "theorem", "is_closed_empty", []], ["add", "theorem", "is_closed_iff_nhds", []], ["add", "theorem", "is_closed_induced_iff", []], ["add", "theorem", "is_closed_inter", []], ["add", "theorem", "is_closed_sInter", []], ["add", "theorem", "is_closed_singleton", []], ["add", "theorem", "is_closed_union", []], ["add", "theorem", "is_closed_univ", []], ["add", "def", "is_open", []], ["add", "theorem", "is_open_Union", []], ["add", "theorem", "is_open_compl_iff", []], ["add", "theorem", "is_open_diff", []], ["add", "theorem", "is_open_empty", []], ["add", "theorem", "is_open_iff_nhds", []], ["add", "theorem", "is_open_inter", []], ["add", "theorem", "is_open_interior", []], ["add", "theorem", "is_open_sUnion", []], ["add", "theorem", "is_open_union", []], ["add", "theorem", "is_open_univ", []], ["mod", "theorem", "mem_nhds_sets", []], ["mod", "def", "nhds", []], ["del", "theorem", "nhds_closed", []], ["add", "theorem", "nhds_is_closed", []], ["mod", "theorem", "nhds_sets", []], ["del", "def", "open'", []], ["del", "theorem", "open_Union", []], ["del", "theorem", "open_compl_iff", []], ["del", "theorem", "open_diff", []], ["del", "theorem", "open_empty", []], ["del", "theorem", "open_iff_nhds", []], ["del", "theorem", "open_inter", []], ["del", "theorem", "open_interior", []], ["del", "theorem", "open_sUnion", []], ["del", "theorem", "open_union", []], ["del", "theorem", "open_univ", []], ["mod", "theorem", "subset_interior_iff_subset_of_open", []], ["mod", "theorem", "topological_space_eq", []], ["mod", "theorem", "towards_nhds", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["del", "theorem", "compact_of_totally_bounded_closed", []], ["add", "theorem", "compact_of_totally_bounded_is_closed", []], ["del", "theorem", "complete_of_closed", []], ["add", "theorem", "complete_of_is_closed", []], ["add", "theorem", "is_open_uniformity", []], ["del", "theorem", "mem_uniformity_closed", []], ["add", "theorem", "mem_uniformity_is_closed", []], ["del", "theorem", "open_uniformity", []]]}]}, {"timestamp": 1502383019, "sha": "7882677d", "message": "construct reals as complete, linear ordered field", "changes": [{"oldPath": null, "newPath": "algebra/field.lean", "changes": [["add", "theorem", "abs_inv", []], ["add", "theorem", "div_le_iff_le_mul_of_pos", []], ["add", "theorem", "inv_neg", []], ["add", "theorem", "inv_sub_inv_eq", []], ["add", "theorem", "ivl_stretch", []], ["add", "theorem", "ivl_translate", []], ["add", "theorem", "le_div_iff_mul_le_of_pos", []], ["add", "theorem", "lt_div_iff", []]]}, {"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["add", "theorem", "abs_le_iff", []], ["add", "theorem", "le_sub_iff_add_le", []], ["add", "theorem", "sub_le_iff_le_add", []]]}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": [["add", "def", "ord_continuous", []], ["add", "theorem", "ord_continuous_mono", []], ["add", "theorem", "ord_continuous_sup", []]]}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "Union_subset_Union2", []], ["mod", "theorem", "Union_subset_Union", []], ["mod", "theorem", "Union_subset_Union_const", []], ["mod", "theorem", "bind_assoc", []], ["add", "theorem", "cases", ["classical"]], ["mod", "theorem", "compl_image_set_of", []], ["mod", "theorem", "diff_empty", []], ["mod", "theorem", "diff_neq_empty", []], ["mod", "theorem", "directed_on_Union", []], ["mod", "theorem", "eq_of_sup_eq_inf_eq", []], ["add", "theorem", "false_neq_true", []], ["mod", "theorem", "Inf_sets_eq_finite", ["filter"]], ["mod", "theorem", "Inter_mem_sets", ["filter"]], ["mod", "theorem", "bind_def", ["filter"]], ["mod", "theorem", "bind_mono2", ["filter"]], ["mod", "theorem", "bind_mono", ["filter"]], ["mod", "theorem", "bind_sup", ["filter"]], ["mod", "theorem", "binfi_sup_eq", ["filter"]], ["mod", "theorem", "empty_in_sets_eq_bot", ["filter"]], ["mod", "theorem", "exists_sets_subset_iff", ["filter"]], ["mod", "theorem", "exists_ultrafilter", ["filter"]], ["mod", "theorem", "filter_eq", ["filter"]], ["mod", "theorem", "filter_eq_bot_of_not_nonempty", ["filter"]], ["mod", "theorem", "fmap_principal", ["filter"]], ["mod", "theorem", "forall_sets_neq_empty_iff_neq_bot", ["filter"]], ["mod", "theorem", "image_mem_map", ["filter"]], ["mod", "theorem", "inf_principal", ["filter"]], ["mod", "theorem", "infi_neq_bot_iff_of_directed", ["filter"]], ["mod", "theorem", "infi_neq_bot_of_directed", ["filter"]], ["mod", "theorem", "infi_sets_eq'", ["filter"]], ["mod", "theorem", "infi_sets_eq", ["filter"]], ["mod", "theorem", "infi_sets_induct", ["filter"]], ["mod", "theorem", "infi_sup_eq", ["filter"]], ["mod", "theorem", "inhabited_of_mem_sets", ["filter"]], ["add", "theorem", "inter_mem_inf_sets", ["filter"]], ["mod", "theorem", "inter_mem_sets", ["filter"]], ["mod", "theorem", "join_principal_eq_Sup", ["filter"]], ["mod", "theorem", "le_lift'", ["filter"]], ["add", "theorem", "le_map_vmap'", ["filter"]], ["mod", "theorem", "le_map_vmap", ["filter"]], ["mod", "theorem", "le_of_ultrafilter", ["filter"]], ["mod", "theorem", "le_principal_iff", ["filter"]], ["mod", "theorem", "le_vmap_iff_map_le", ["filter"]], ["mod", "theorem", "le_vmap_map", ["filter"]], ["mod", "theorem", "lift'_cong", ["filter"]], ["mod", "theorem", "lift'_id", ["filter"]], ["mod", "theorem", "lift'_inf_principal_eq", ["filter"]], ["mod", "theorem", "lift'_infi", ["filter"]], ["add", "theorem", "lift'_le", ["filter"]], ["mod", "theorem", "lift'_lift'_assoc", ["filter"]], ["mod", "theorem", "lift'_lift_assoc", ["filter"]], ["mod", "theorem", "lift'_mono'", ["filter"]], ["mod", "theorem", "lift'_mono", ["filter"]], ["mod", "theorem", "lift'_neq_bot_iff", ["filter"]], ["mod", "theorem", "lift'_principal", ["filter"]], ["mod", "theorem", "lift_assoc", ["filter"]], ["mod", "theorem", "lift_comm", ["filter"]], ["mod", "theorem", "lift_infi'", ["filter"]], ["mod", "theorem", "lift_infi", ["filter"]], ["add", "theorem", "lift_le", ["filter"]], ["mod", "theorem", "lift_lift'_assoc", ["filter"]], ["mod", "theorem", "lift_lift'_same_eq_lift'", ["filter"]], ["mod", "theorem", "lift_lift'_same_le_lift'", ["filter"]], ["mod", "theorem", "lift_lift_same_eq_lift", ["filter"]], ["mod", "theorem", "lift_lift_same_le_lift", ["filter"]], ["mod", "theorem", "lift_mono'", ["filter"]], ["mod", "theorem", "lift_mono", ["filter"]], ["mod", "theorem", "lift_neq_bot_iff", ["filter"]], ["mod", "theorem", "lift_principal", ["filter"]], ["mod", "theorem", "lift_sets_eq", ["filter"]], ["mod", "theorem", "map_binfi_eq", ["filter"]], ["mod", "theorem", "map_bot", ["filter"]], ["mod", "theorem", "map_compose", ["filter"]], ["add", "theorem", "map_cong", ["filter"]], ["mod", "theorem", "map_eq_bot_iff", ["filter"]], ["mod", "theorem", "map_eq_vmap_of_inverse", ["filter"]], ["mod", "theorem", "map_id", ["filter"]], ["add", "theorem", "map_inf", ["filter"]], ["mod", "theorem", "map_infi_eq", ["filter"]], ["mod", "theorem", "map_infi_le", ["filter"]], ["add", "theorem", "map_inj", ["filter"]], ["mod", "theorem", "map_lift'_eq2", ["filter"]], ["mod", "theorem", "map_lift'_eq", ["filter"]], ["mod", "theorem", "map_lift_eq2", ["filter"]], ["mod", "theorem", "map_lift_eq", ["filter"]], ["add", "theorem", "map_map", ["filter"]], ["mod", "theorem", "map_mono", ["filter"]], ["add", "theorem", "map_ne_bot", ["filter"]], ["mod", "theorem", "map_principal", ["filter"]], ["mod", "theorem", "map_sup", ["filter"]], ["mod", "theorem", "map_swap_vmap_swap_eq", ["filter"]], ["mod", "theorem", "map_vmap_le", ["filter"]], ["mod", "theorem", "mem_bind_sets", ["filter"]], ["mod", "theorem", "mem_bot_sets", ["filter"]], ["mod", "theorem", "mem_inf_sets", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_left", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_right", ["filter"]], ["mod", "theorem", "mem_infi_sets", ["filter"]], ["mod", "theorem", "mem_join_sets", ["filter"]], ["mod", "theorem", "mem_lift'", ["filter"]], ["mod", "theorem", "mem_lift'_iff", ["filter"]], ["mod", "theorem", "mem_lift", ["filter"]], ["mod", "theorem", "mem_lift_iff", ["filter"]], ["mod", "theorem", "mem_map", ["filter"]], ["mod", "theorem", "mem_of_finite_Union_ultrafilter", ["filter"]], ["mod", "theorem", "mem_of_finite_sUnion_ultrafilter", ["filter"]], ["mod", "theorem", "mem_or_compl_mem_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["mod", "theorem", "mem_prod_iff", ["filter"]], ["mod", "theorem", "mem_prod_same_iff", ["filter"]], ["mod", "theorem", "mem_pure", ["filter"]], ["mod", "theorem", "mem_return_sets", ["filter"]], ["mod", "theorem", "mem_sets_of_neq_bot", ["filter"]], ["mod", "theorem", "mem_sup_sets", ["filter"]], ["mod", "theorem", "mem_top_sets_iff", ["filter"]], ["add", "theorem", "mem_vmap", ["filter"]], ["del", "theorem", "mem_vmap_of_mem", ["filter"]], ["mod", "theorem", "monotone_map", ["filter"]], ["mod", "theorem", "monotone_mem_sets", ["filter"]], ["mod", "theorem", "monotone_principal", ["filter"]], ["mod", "theorem", "monotone_vmap", ["filter"]], ["mod", "theorem", "preimage_mem_vmap", ["filter"]], ["mod", "theorem", "principal_bind", ["filter"]], ["mod", "theorem", "principal_empty", ["filter"]], ["mod", "theorem", "principal_eq_bot_iff", ["filter"]], ["mod", "theorem", "principal_eq_iff_eq", ["filter"]], ["mod", "theorem", "principal_le_lift'", ["filter"]], ["mod", "theorem", "principal_mono", ["filter"]], ["mod", "theorem", "principal_univ", ["filter"]], ["mod", "theorem", "prod_comm", ["filter"]], ["mod", "theorem", "prod_inf_prod", ["filter"]], ["mod", "theorem", "prod_lift'_lift'", ["filter"]], ["mod", "theorem", "prod_lift_lift", ["filter"]], ["mod", "theorem", "prod_map_map_eq", ["filter"]], ["mod", "theorem", "prod_mem_prod", ["filter"]], ["mod", "theorem", "prod_mono", ["filter"]], ["mod", "theorem", "prod_neq_bot", ["filter"]], ["mod", "theorem", "prod_principal_principal", ["filter"]], ["mod", "theorem", "prod_same_eq", ["filter"]], ["mod", "theorem", "prod_vmap_vmap_eq", ["filter"]], ["mod", "theorem", "pure_def", ["filter"]], ["mod", "theorem", "return_neq_bot", ["filter"]], ["mod", "theorem", "seq_mono", ["filter"]], ["mod", "theorem", "sup_join", ["filter"]], ["mod", "theorem", "sup_principal", ["filter"]], ["mod", "theorem", "supr_join", ["filter"]], ["mod", "theorem", "supr_map", ["filter"]], ["mod", "theorem", "supr_principal", ["filter"]], ["mod", "theorem", "supr_sets_eq", ["filter"]], ["add", "theorem", "towards_compose", ["filter"]], ["add", "theorem", "towards_cong", ["filter"]], ["add", "theorem", "towards_fst", ["filter"]], ["add", "theorem", "towards_id'", ["filter"]], ["add", "theorem", "towards_id", ["filter"]], ["add", "theorem", "towards_inf", ["filter"]], ["add", "theorem", "towards_map'", ["filter"]], ["add", "theorem", "towards_map", ["filter"]], ["add", "theorem", "towards_prod_mk", ["filter"]], ["add", "theorem", "towards_snd", ["filter"]], ["add", "theorem", "towards_vmap''", ["filter"]], ["add", "theorem", "towards_vmap'", ["filter"]], ["add", "theorem", "towards_vmap", ["filter"]], ["mod", "theorem", "ultrafilter_map", ["filter"]], ["mod", "theorem", "ultrafilter_of_le", ["filter"]], ["mod", "theorem", "ultrafilter_of_spec", ["filter"]], ["mod", "theorem", "ultrafilter_of_split", ["filter"]], ["mod", "theorem", "ultrafilter_of_ultrafilter", ["filter"]], ["mod", "theorem", "ultrafilter_pure", ["filter"]], ["mod", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["mod", "theorem", "ultrafilter_unique", ["filter"]], ["mod", "theorem", "univ_mem_sets'", ["filter"]], ["mod", "theorem", "univ_mem_sets", ["filter"]], ["add", "theorem", "vmap_bot", ["filter"]], ["add", "theorem", "vmap_inf", ["filter"]], ["add", "theorem", "vmap_infi", ["filter"]], ["mod", "theorem", "vmap_lift_eq", ["filter"]], ["mod", "theorem", "vmap_map", ["filter"]], ["mod", "theorem", "vmap_mono", ["filter"]], ["mod", "theorem", "vmap_neq_bot", ["filter"]], ["mod", "theorem", "vmap_neq_bot_of_surj", ["filter"]], ["add", "theorem", "vmap_sup", ["filter"]], ["mod", "theorem", "vmap_vmap_comp", ["filter"]], ["mod", "theorem", "implies_implies_true_iff", []], ["mod", "theorem", "inf_eq_bot_iff_le_compl", []], ["mod", "theorem", "Inf_eq_finite_sets", ["lattice"]], ["mod", "theorem", "map_bind", []], ["mod", "theorem", "neg_subset_neg_iff_subset", []], ["mod", "theorem", "not_not_mem_iff", []], ["add", "theorem", "not_or_iff_implies", []], ["mod", "theorem", "fst_swap", ["prod"]], ["mod", "theorem", "eta", ["prod", "mk"]], ["mod", "theorem", "snd_swap", ["prod"]], ["mod", "theorem", "swap_prod_mk", ["prod"]], ["mod", "theorem", "swap_swap", ["prod"]], ["mod", "theorem", "swap_swap_eq", ["prod"]], ["mod", "theorem", "pure_seq_eq_map", []], ["mod", "theorem", "sUnion_eq_Union", []], ["mod", "theorem", "sUnion_mono", []], ["mod", "theorem", "seq_bind_eq", []], ["mod", "theorem", "seq_eq_bind_map", []], ["mod", "theorem", "bind_def", ["set"]], ["mod", "theorem", "diff_right_antimono", ["set"]], ["mod", "theorem", "fmap_eq_image", ["set"]], ["add", "theorem", "image_Union", ["set"]], ["del", "theorem", "image_eq_preimage_of_inverse", ["set"]], ["add", "theorem", "image_inter", ["set"]], ["add", "theorem", "image_singleton", ["set"]], ["mod", "theorem", "image_swap_prod", ["set"]], ["del", "theorem", "mem_image_iff_of_inverse", ["set"]], ["mod", "theorem", "mem_prod_eq", ["set"]], ["mod", "theorem", "mem_seq_iff", ["set"]], ["mod", "theorem", "ne_empty_iff_exists_mem", ["set"]], ["add", "theorem", "not_eq_empty_iff_exists", ["set"]], ["mod", "theorem", "prod_image_image_eq", ["set"]], ["mod", "theorem", "prod_inter_prod", ["set"]], ["mod", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["mod", "theorem", "prod_mono", ["set"]], ["mod", "theorem", "prod_neq_empty_iff", ["set"]], ["mod", "theorem", "prod_singleton_singleton", ["set"]], ["mod", "theorem", "set_of_mem_eq", ["set"]], ["add", "theorem", "univ_eq_true_false", ["set"]], ["mod", "theorem", "singleton_neq_emptyset", []]]}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["add", "theorem", "not_le_iff", []], ["add", "theorem", "not_lt_iff", []], ["add", "def", "partial_order_dual", []], ["del", "def", "weak_order_dual", []]]}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "data/int/order.lean", "newPath": "data/int/order.lean", "changes": [["add", "theorem", "le_of_of_nat_le_of_nat", ["int"]], ["add", "theorem", "of_nat_le_of_nat_of_le", ["int"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "le_add_one_iff", ["nat"]], ["add", "theorem", "le_zero_iff", ["nat"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["add", "theorem", "coe_int_add", ["rat"]], ["add", "theorem", "coe_int_eq_mk", ["rat"]], ["add", "theorem", "coe_int_one", ["rat"]], ["add", "theorem", "coe_int_sub", ["rat"]], ["add", "theorem", "coe_nat_rat_eq_mk", ["rat"]], ["add", "theorem", "exists_upper_nat_bound", ["rat"]], ["add", "theorem", "le_of_of_int_le_of_int", ["rat"]], ["add", "def", "nat_ceil", ["rat"]], ["add", "theorem", "nat_ceil_add_one_eq", ["rat"]], ["add", "theorem", "nat_ceil_lt_add_one", ["rat"]], ["add", "theorem", "nat_ceil_min", ["rat"]], ["add", "theorem", "nat_ceil_mono", ["rat"]], ["add", "theorem", "nat_ceil_spec", ["rat"]], ["add", "theorem", "nat_ceil_zero", ["rat"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "image_eq_preimage_of_inverse", ["set"]], ["add", "theorem", "mem_image_iff_of_inverse", ["set"]], ["add", "theorem", "mem_of_eq_of_mem", ["set"]], ["add", "theorem", "set_compr_eq_eq_singleton", ["set"]], ["mod", "theorem", "trans", ["set", "subset"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["add", "theorem", "finite_le_nat", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "monotone_image", ["set"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["del", "theorem", "cases", ["classical"]], ["add", "theorem", "closed_diagonal", []], ["add", "theorem", "closed_eq", []], ["add", "theorem", "closed_prod", []], ["add", "theorem", "closed_property2", []], ["add", "theorem", "closed_property3", []], ["add", "theorem", "closed_property", []], ["add", "theorem", "closure_induced", []], ["mod", "theorem", "closure_prod_eq", []], ["add", "theorem", "closure_subtype", []], ["add", "theorem", "compact_image", []], ["mod", "theorem", "compact_pi_infinite", []], ["mod", "theorem", "continuous_Inf_dom", []], ["mod", "theorem", "continuous_Inf_rng", []], ["mod", "theorem", "continuous_Prop", []], ["mod", "theorem", "continuous_bot", []], ["mod", "theorem", "continuous_coinduced_dom", []], ["mod", "theorem", "continuous_coinduced_rng", []], ["mod", "theorem", "continuous_compose", []], ["add", "theorem", "continuous_const", []], ["mod", "theorem", "continuous_eq_le_coinduced", []], ["mod", "theorem", "continuous_fst", []], ["mod", "theorem", "continuous_id", []], ["add", "theorem", "continuous_iff_closed", []], ["mod", "theorem", "continuous_iff_induced_le", []], ["add", "theorem", "continuous_iff_of_embedding", []], ["mod", "theorem", "continuous_iff_towards", []], ["mod", "theorem", "continuous_induced_dom", []], ["mod", "theorem", "continuous_induced_rng", []], ["mod", "theorem", "continuous_inf_dom", []], ["mod", "theorem", "continuous_inf_rng_left", []], ["mod", "theorem", "continuous_inf_rng_right", []], ["mod", "theorem", "continuous_infi_dom", []], ["mod", "theorem", "continuous_infi_rng", []], ["mod", "theorem", "continuous_inl", []], ["mod", "theorem", "continuous_inr", []], ["mod", "theorem", "continuous_prod_mk", []], ["mod", "theorem", "continuous_snd", []], ["add", "theorem", "continuous_subtype_closed_cover", []], ["mod", "theorem", "continuous_subtype_mk", []], ["mod", "theorem", "continuous_subtype_nhds_cover", []], ["mod", "theorem", "continuous_subtype_val", []], ["mod", "theorem", "continuous_sum_rec", []], ["mod", "theorem", "continuous_sup_dom_left", []], ["mod", "theorem", "continuous_sup_dom_right", []], ["mod", "theorem", "continuous_sup_rng", []], ["mod", "theorem", "continuous_top", []], ["add", "theorem", "closure_image_univ", ["dense_embedding"]], ["add", "theorem", "continuous_ext", ["dense_embedding"]], ["add", "def", "ext", ["dense_embedding"]], ["add", "theorem", "ext_e_eq", ["dense_embedding"]], ["add", "theorem", "ext_eq", ["dense_embedding"]], ["add", "theorem", "inj_iff", ["dense_embedding"]], ["add", "def", "subtype_emb", ["dense_embedding"]], ["add", "theorem", "towards_ext", ["dense_embedding"]], ["add", "theorem", "vmap_nhds_neq_bot", ["dense_embedding"]], ["add", "structure", "dense_embedding", []], ["add", "def", "embedding", []], ["add", "theorem", "embedding_closed", []], ["add", "theorem", "embedding_compose", []], ["add", "theorem", "embedding_graph", []], ["add", "theorem", "embedding_id", []], ["add", "theorem", "embedding_of_embedding_compose", []], ["add", "theorem", "embedding_open", []], ["add", "theorem", "embedding_prod_mk", []], ["add", "theorem", "embedding_subtype_val", []], ["del", "theorem", "false_neq_true", []], ["add", "theorem", "image_closure_subset_closure_image", []], ["add", "theorem", "image_preimage_eq_inter_rng", []], ["add", "theorem", "induced_compose", []], ["add", "theorem", "induced_id", []], ["add", "theorem", "induced_mono", []], ["add", "theorem", "induced_sup", []], ["mod", "theorem", "map_nhds_induced_eq", []], ["mod", "theorem", "map_nhds_subtype_val_eq", []], ["add", "theorem", "mem_closure_of_continuous2", []], ["add", "theorem", "mem_closure_of_continuous", []], ["mod", "theorem", "nhds_induced_eq_vmap", []], ["mod", "theorem", "nhds_pi", []], ["mod", "theorem", "nhds_prod_eq", []], ["add", "theorem", "nhds_subtype_eq_vmap", []], ["mod", "theorem", "open_set_prod", []], ["mod", "theorem", "open_singleton_true", []], ["mod", "theorem", "prod_eq_generate_from", []], ["mod", "theorem", "val_image", ["subtype"]], ["add", "theorem", "towards_nhds_iff_of_embedding", []], ["del", "theorem", "univ_eq_true_false", []], ["add", "theorem", "univ_prod_univ", []]]}, {"oldPath": null, "newPath": "topology/real.lean", "changes": [["add", "theorem", "abs_real_eq_abs", []], ["add", "theorem", "closed_ge", []], ["add", "theorem", "closed_imp", []], ["add", "theorem", "closed_le", []], ["add", "theorem", "closed_le_real", []], ["add", "theorem", "closure_of_rat_image_eq", []], ["add", "theorem", "compact_ivl", []], ["add", "theorem", "continuous_abs_rat", []], ["add", "theorem", "continuous_abs_real", []], ["add", "theorem", "continuous_add_rat", []], ["add", "theorem", "continuous_add_real'", []], ["add", "theorem", "continuous_add_real", []], ["add", "theorem", "continuous_inv_real'", []], ["add", "theorem", "continuous_inv_real", []], ["add", "theorem", "continuous_mul_real'", []], ["add", "theorem", "continuous_mul_real", []], ["add", "theorem", "continuous_neg_rat", []], ["add", "theorem", "continuous_neg_real", []], ["add", "theorem", "continuous_sub_real", []], ["add", "theorem", "dense_embedding_of_rat", []], ["add", "theorem", "dense_embedding_of_rat_of_rat", []], ["add", "theorem", "eq_0_of_nonneg_of_neg_nonneg", []], ["add", "theorem", "exists_lt_of_rat", []], ["add", "theorem", "exists_supremum_real", []], ["add", "theorem", "forall_subtype_iff", []], ["add", "theorem", "gt_mem_nhds", []], ["add", "def", "lift_rat_fun", []], ["add", "theorem", "lift_rat_fun_of_rat", []], ["add", "def", "lift_rat_op", []], ["add", "theorem", "lift_rat_op_of_rat_of_rat", []], ["add", "theorem", "lt_mem_nhds", []], ["add", "theorem", "map_neg_rat", []], ["add", "theorem", "map_neg_real", []], ["add", "theorem", "mem_nonneg_of_continuous2", []], ["add", "theorem", "mem_uniformity_rat", []], ["add", "theorem", "mem_uniformity_real_iff", []], ["add", "theorem", "mem_zero_nhd", []], ["add", "theorem", "mem_zero_nhd_iff", []], ["add", "theorem", "neg_preimage_closure", []], ["add", "theorem", "nhds_0_eq_zero_nhd", []], ["add", "theorem", "nhds_eq_map_zero_nhd", []], ["add", "def", "nonneg", []], ["add", "def", "of_rat", []], ["add", "theorem", "of_rat_abs", []], ["add", "theorem", "of_rat_add", []], ["add", "theorem", "of_rat_inv", []], ["add", "theorem", "of_rat_le_of_rat", []], ["add", "theorem", "of_rat_lt_of_rat", []], ["add", "theorem", "of_rat_mem_nonneg", []], ["add", "theorem", "of_rat_mem_nonneg_iff", []], ["add", "theorem", "of_rat_mul", []], ["add", "theorem", "of_rat_neg", []], ["add", "theorem", "of_rat_one", []], ["add", "theorem", "of_rat_sub", []], ["add", "theorem", "of_rat_zero", []], ["add", "theorem", "one_lt_two", []], ["add", "theorem", "open_gt", []], ["add", "theorem", "open_lt", []], ["add", "theorem", "open_lt_real", []], ["add", "theorem", "preimage_neg_rat", []], ["add", "theorem", "preimage_neg_real", []], ["add", "theorem", "pure_zero_le_zero_nhd", []], ["add", "theorem", "quot_mk_image_univ_eq", []], ["add", "def", "real", []], ["add", "theorem", "totally_bounded_01_rat", []], ["add", "theorem", "towards_add_rat", []], ["add", "theorem", "towards_add_rat_zero'", []], ["add", "theorem", "towards_add_rat_zero", []], ["add", "theorem", "towards_inv_pos_rat", []], ["add", "theorem", "towards_inv_rat", []], ["add", "theorem", "towards_inv_real", []], ["add", "theorem", "towards_mul_bnd_rat'", []], ["add", "theorem", "towards_mul_bnd_rat", []], ["add", "theorem", "towards_mul_rat'", []], ["add", "theorem", "towards_mul_rat", []], ["add", "theorem", "towards_neg_rat", []], ["add", "theorem", "towards_neg_rat_zero", []], ["add", "theorem", "towards_of_uniform_continuous_subtype", []], ["add", "theorem", "towards_sub_rat'", []], ["add", "theorem", "towards_sub_uniformity_zero_nhd'", []], ["add", "theorem", "towards_sub_uniformity_zero_nhd", []], ["add", "theorem", "towards_zero_nhds", []], ["add", "theorem", "two_eq_of_rat_two", []], ["add", "theorem", "uniform_continuous_abs_rat", []], ["add", "theorem", "uniform_continuous_abs_real", []], ["add", "theorem", "uniform_continuous_add_rat", []], ["add", "theorem", "uniform_continuous_add_real", []], ["add", "theorem", "uniform_continuous_inv_pos_rat", []], ["add", "theorem", "uniform_continuous_mul_rat", []], ["add", "theorem", "uniform_continuous_neg_rat", []], ["add", "theorem", "uniform_continuous_neg_real", []], ["add", "theorem", "uniform_continuous_rat'", []], ["add", "theorem", "uniform_continuous_rat", []], ["add", "theorem", "uniform_embedding_add_rat", []], ["add", "theorem", "uniform_embedding_mul_rat", []], ["add", "theorem", "uniform_embedding_of_rat", []], ["add", "theorem", "uniformity_rat", []], ["add", "theorem", "zero_le_iff_nonneg", []], ["add", "theorem", "zero_lt_two", []], ["add", "def", "zero_nhd", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["mod", "theorem", "closed_Inter", []], ["add", "theorem", "closed_Union", []], ["mod", "theorem", "closed_Union_of_locally_finite", []], ["mod", "theorem", "closed_closure", []], ["add", "theorem", "closed_compl_iff", []], ["del", "theorem", "closed_compl_iff_open", []], ["mod", "theorem", "closed_empty", []], ["mod", "theorem", "closed_iff_nhds", []], ["add", "theorem", "closed_induced_iff", []], ["add", "theorem", "closed_inter", []], ["mod", "theorem", "closed_sInter", []], ["add", "theorem", "closed_singleton", []], ["mod", "theorem", "closed_union", []], ["mod", "theorem", "closed_univ", []], ["mod", "theorem", "closure_closure", []], ["mod", "theorem", "closure_compl_eq", []], ["add", "theorem", "closure_diff", []], ["mod", "theorem", "closure_empty", []], ["mod", "theorem", "closure_eq_compl_interior_compl", []], ["mod", "theorem", "closure_eq_iff_closed", []], ["mod", "theorem", "closure_eq_nhds", []], ["mod", "theorem", "closure_eq_of_closed", []], ["add", "theorem", "closure_inter_open", []], ["mod", "theorem", "closure_minimal", []], ["mod", "theorem", "closure_mono", []], ["add", "theorem", "closure_singleton", []], ["mod", "theorem", "closure_subset_iff_subset_of_closed", []], ["mod", "theorem", "closure_union", []], ["mod", "theorem", "closure_univ", []], ["mod", "def", "compact", []], ["mod", "theorem", "compact_adherence_nhdset", []], ["add", "theorem", "compact_elim_finite_subcover", []], ["add", "theorem", "compact_elim_finite_subcover_image", []], ["add", "theorem", "compact_empty", []], ["add", "theorem", "compact_iff_finite_subcover", []], ["mod", "theorem", "compact_iff_ultrafilter_le_nhds", []], ["add", "theorem", "compact_of_closed_subset", []], ["add", "theorem", "compact_of_finite_subcover", []], ["add", "theorem", "compact_singleton", []], ["add", "theorem", "compl_singleton_mem_nhds", []], ["add", "theorem", "compl_subset_of_compl_subset", []], ["add", "theorem", "diff_subset_diff", []], ["mod", "theorem", "eq_of_nhds_eq_nhds", []], ["mod", "theorem", "eq_of_nhds_neq_bot", []], ["del", "theorem", "finite_subcover_of_compact", []], ["mod", "theorem", "generate_from_le", []], ["mod", "theorem", "interior_compl_eq", []], ["mod", "theorem", "interior_empty", []], ["mod", "theorem", "interior_eq_iff_open", []], ["mod", "theorem", "interior_eq_nhds", []], ["mod", "theorem", "interior_eq_of_open", []], ["mod", "theorem", "interior_inter", []], ["mod", "theorem", "interior_interior", []], ["mod", "theorem", "interior_maximal", []], ["mod", "theorem", "interior_mono", []], ["mod", "theorem", "interior_subset", []], ["mod", "theorem", "interior_subset_closure", []], ["mod", "theorem", "interior_union_closed_of_interior_empty", []], ["mod", "theorem", "interior_univ", []], ["mod", "theorem", "le_of_nhds_le_nhds", []], ["add", "theorem", "lim_eq", []], ["add", "theorem", "lim_nhds_eq", []], ["add", "theorem", "lim_nhds_eq_of_closure", []], ["add", "theorem", "lim_spec", []], ["add", "theorem", "locally_finite_of_finite", []], ["add", "theorem", "locally_finite_subset", []], ["mod", "theorem", "map_nhds", []], ["mod", "theorem", "mem_nhds_sets", []], ["mod", "theorem", "mem_nhds_sets_iff", []], ["add", "theorem", "mem_of_mem_of_subset", []], ["add", "theorem", "mem_of_nhds", []], ["add", "theorem", "nhds_closed", []], ["add", "theorem", "nhds_eq_nhds_iff", []], ["add", "theorem", "nhds_le_nhds_iff", []], ["mod", "theorem", "nhds_mono", []], ["mod", "theorem", "nhds_neq_bot", []], ["mod", "theorem", "nhds_sets", []], ["mod", "theorem", "nhds_supr", []], ["add", "theorem", "not_and_iff_imp_not", []], ["del", "theorem", "not_eq_empty_iff_exists", []], ["mod", "theorem", "open_Union", []], ["add", "theorem", "open_compl_iff", []], ["del", "theorem", "open_compl_iff_closed", []], ["mod", "theorem", "open_diff", []], ["mod", "theorem", "open_empty", []], ["mod", "theorem", "open_iff_nhds", []], ["mod", "theorem", "open_inter", []], ["mod", "theorem", "open_interior", []], ["mod", "theorem", "open_sUnion", []], ["add", "theorem", "open_union", []], ["mod", "theorem", "open_univ", []], ["mod", "theorem", "return_le_nhds", []], ["mod", "theorem", "subset_closure", []], ["mod", "theorem", "subset_interior_iff_subset_of_open", []], ["mod", "theorem", "sup_eq_generate_from", []], ["mod", "theorem", "supr_eq_generate_from", []], ["add", "theorem", "t2_separation", []], ["mod", "theorem", "t2_space_top", []], ["mod", "theorem", "nhds_generate_from", ["topological_space"]], ["mod", "theorem", "topological_space_eq", []], ["add", "theorem", "towards_const_nhds", []], ["add", "theorem", "towards_nhds", []], ["add", "theorem", "towards_nhds_unique", []], ["add", "theorem", "univ_subtype", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["mod", "theorem", "monotone_gen", ["Cauchy"]], ["mod", "theorem", "pure_cauchy_dense", ["Cauchy"]], ["mod", "theorem", "uniform_embedding_pure_cauchy", ["Cauchy"]], ["del", "def", "cauchy", []], ["mod", "theorem", "cauchy_downwards", []], ["mod", "theorem", "cauchy_map", []], ["mod", "theorem", "cauchy_nhds", []], ["mod", "theorem", "cauchy_of_totally_bounded_of_ultrafilter", []], ["mod", "theorem", "cauchy_pure", []], ["mod", "theorem", "cauchy_vmap", []], ["mod", "theorem", "closure_eq_inter_uniformity", []], ["add", "theorem", "closure_image_mem_nhds_of_uniform_embedding", []], ["mod", "theorem", "comp_le_uniformity3", []], ["mod", "theorem", "comp_le_uniformity", []], ["mod", "theorem", "comp_mem_uniformity_sets", []], ["mod", "def", "comp_rel", []], ["mod", "theorem", "comp_symm_of_uniformity", []], ["mod", "theorem", "compact_of_totally_bounded_closed", []], ["mod", "theorem", "compact_of_totally_bounded_complete", []], ["mod", "theorem", "complete_of_closed", []], ["mod", "theorem", "complete_space_extension", []], ["mod", "theorem", "complete_space_separation", []], ["mod", "theorem", "continuous_of_uniform", []], ["add", "theorem", "dense_embedding_of_uniform_embedding", []], ["add", "theorem", "forall_quotient_iff", []], ["mod", "theorem", "id_comp_rel", []], ["mod", "theorem", "interior_mem_uniformity", []], ["mod", "theorem", "le_nhds_iff_adhp_of_cauchy", []], ["mod", "theorem", "le_nhds_of_cauchy_adhp", []], ["mod", "theorem", "lift_nhds_left", []], ["mod", "theorem", "lift_nhds_right", []], ["mod", "theorem", "mem_nhds_left", []], ["mod", "theorem", "mem_nhds_right", []], ["mod", "theorem", "mem_nhds_uniformity_iff", []], ["add", "theorem", "mem_uniform_prod", []], ["add", "theorem", "mem_uniformity_closed", []], ["mod", "theorem", "nhds_eq_uniformity", []], ["mod", "theorem", "nhds_eq_uniformity_prod", []], ["mod", "theorem", "nhds_nhds_eq_uniformity_uniformity_prod", []], ["mod", "theorem", "nhdset_of_mem_uniformity", []], ["add", "theorem", "open_uniformity", []], ["mod", "theorem", "prod_mk_mem_comp_rel", []], ["mod", "theorem", "refl_le_uniformity", []], ["mod", "theorem", "refl_mem_uniformity", []], ["del", "def", "separated", []], ["mod", "theorem", "separated_equiv", []], ["add", "theorem", "separated_separation", []], ["add", "theorem", "sup_uniformity", []], ["mod", "theorem", "supr_uniformity", []], ["mod", "theorem", "symm_le_uniformity", []], ["mod", "theorem", "symm_of_uniformity", []], ["add", "theorem", "to_topological_space_Sup", []], ["mod", "theorem", "to_topological_space_bot", []], ["mod", "theorem", "to_topological_space_mono", []], ["add", "theorem", "to_topological_space_prod", []], ["add", "theorem", "to_topological_space_subtype", []], ["add", "theorem", "to_topological_space_sup", []], ["mod", "theorem", "to_topological_space_supr", []], ["mod", "theorem", "to_topological_space_top", []], ["add", "theorem", "totally_bounded_closure", []], ["mod", "theorem", "totally_bounded_iff_filter", []], ["mod", "theorem", "totally_bounded_iff_ultrafilter", []], ["add", "theorem", "totally_bounded_image", []], ["add", "theorem", "totally_bounded_subset", []], ["add", "theorem", "towards_const_uniformity", []], ["add", "theorem", "towards_left_nhds_uniformity", []], ["add", "theorem", "towards_prod_uniformity_fst", []], ["add", "theorem", "towards_prod_uniformity_snd", []], ["add", "theorem", "towards_right_nhds_uniformity", []], ["add", "theorem", "towards_swap_uniformity", []], ["del", "def", "uniform_continuous", []], ["add", "theorem", "uniform_continuous_compose", []], ["add", "theorem", "uniform_continuous_const", []], ["add", "theorem", "uniform_continuous_fst", []], ["mod", "theorem", "uniform_continuous_of_embedding", []], ["add", "theorem", "uniform_continuous_prod_mk", []], ["mod", "theorem", "uniform_continuous_quotient_mk", []], ["add", "theorem", "uniform_continuous_snd", []], ["add", "theorem", "uniform_continuous_subtype_mk", []], ["add", "theorem", "uniform_continuous_subtype_val", []], ["mod", "theorem", "uniform_continuous_uniformly_extend", []], ["add", "theorem", "uniform_continuous_vmap'", []], ["mod", "theorem", "uniform_continuous_vmap", []], ["del", "def", "uniform_embedding", []], ["add", "theorem", "uniform_embedding_prod", []], ["add", "theorem", "uniform_embedding_subtype_emb", []], ["add", "theorem", "uniform_extend_subtype", []], ["add", "def", "to_topological_space", ["uniform_space", "core"]], ["add", "structure", "core", ["uniform_space"]], ["add", "theorem", "core_eq", ["uniform_space"]], ["add", "def", "of_core", ["uniform_space"]], ["add", "def", "of_core_eq", ["uniform_space"]], ["add", "theorem", "of_core_eq_to_core", ["uniform_space"]], ["add", "theorem", "to_core_to_topological_space", ["uniform_space"]], ["mod", "theorem", "uniform_space_eq", []], ["mod", "def", "uniformity", []], ["mod", "theorem", "uniformity_eq_symm", []], ["mod", "theorem", "uniformity_eq_uniformity_closure", []], ["mod", "theorem", "uniformity_eq_uniformity_interior", []], ["mod", "theorem", "uniformity_le_symm", []], ["mod", "theorem", "uniformity_lift_le_comp", []], ["add", "theorem", "uniformity_prod", []], ["add", "theorem", "uniformity_subtype", []], ["add", "theorem", "uniformly_extend_exists", []], ["mod", "theorem", "uniformly_extend_of_emb", []], ["mod", "theorem", "uniformly_extend_spec", []], ["del", "theorem", "uniformly_extend_unique", []], ["add", "theorem", "vmap_quotient_eq_uniformity", []], ["mod", "theorem", "vmap_quotient_le_uniformity", []]]}]}, {"timestamp": 1501713167, "sha": "64b61515", "message": "refactor(data/set/basic,*): vimage -> preimage, add notation", "changes": [{"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "mem_vmap_of_mem", ["filter"]], ["add", "theorem", "preimage_mem_vmap", ["filter"]], ["del", "theorem", "vimage_mem_vmap", ["filter"]], ["mod", "theorem", "vmap_principal", ["filter"]], ["add", "theorem", "image_eq_preimage_of_inverse", ["set"]], ["del", "theorem", "image_eq_vimage_of_inverse", ["set"]], ["add", "theorem", "image_swap_eq_preimage_swap", ["set"]], ["del", "theorem", "image_swap_eq_vimage_swap", ["set"]], ["add", "theorem", "preimage_set_of_eq", ["set"]], ["add", "theorem", "prod_preimage_eq", ["set"]], ["del", "theorem", "prod_vimage_eq", ["set"]], ["del", "theorem", "vimage_set_of_eq", ["set"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "eq_preimage_subtype_val_iff", ["set"]], ["del", "theorem", "eq_vimage_subtype_val_iff", ["set"]], ["mod", "theorem", "image_comp", ["set"]], ["mod", "theorem", "image_empty", ["set"]], ["mod", "theorem", "image_id", ["set"]], ["mod", "theorem", "image_subset", ["set"]], ["add", "theorem", "image_subset_iff_subset_preimage", ["set"]], ["del", "theorem", "image_subset_iff_subset_vimage", ["set"]], ["mod", "def", "mem_image_elim_on", ["set"]], ["mod", "theorem", "mem_image_eq", ["set"]], ["mod", "theorem", "mem_image_of_mem", ["set"]], ["add", "theorem", "mem_preimage_eq", ["set"]], ["del", "theorem", "mem_vimage_eq", ["set"]], ["mod", "theorem", "mono_image", ["set"]], ["add", "def", "preimage", ["set"]], ["add", "theorem", "preimage_comp", ["set"]], ["add", "theorem", "preimage_compl", ["set"]], ["add", "theorem", "preimage_empty", ["set"]], ["add", "theorem", "preimage_id", ["set"]], ["add", "theorem", "preimage_image_eq", ["set"]], ["add", "theorem", "preimage_inter", ["set"]], ["add", "theorem", "preimage_mono", ["set"]], ["add", "theorem", "preimage_union", ["set"]], ["add", "theorem", "preimage_univ", ["set"]], ["del", "def", "vimage", ["set"]], ["del", "theorem", "vimage_comp", ["set"]], ["del", "theorem", "vimage_compl", ["set"]], ["del", "theorem", "vimage_empty", ["set"]], ["del", "theorem", "vimage_id", ["set"]], ["del", "theorem", "vimage_image_eq", ["set"]], ["del", "theorem", "vimage_inter", ["set"]], ["del", "theorem", "vimage_mono", ["set"]], ["del", "theorem", "vimage_union", ["set"]], ["del", "theorem", "vimage_univ", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["add", "theorem", "monotone_preimage", ["set"]], ["del", "theorem", "monotone_vimage", ["set"]], ["add", "theorem", "preimage_Union", ["set"]], ["add", "theorem", "preimage_sUnion", ["set"]], ["del", "theorem", "vimage_Union", ["set"]], ["del", "theorem", "vimage_sUnion", ["set"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["mod", "def", "continuous", []], ["mod", "theorem", "open_induced", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": []}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1501712256, "sha": "41a23769", "message": "refactor(algebra/group,group_power): clean up proofs", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": [["mod", "theorem", "eq_iff_eq_of_sub_eq_sub", []], ["mod", "theorem", "eq_iff_sub_eq_zero", []], ["mod", "theorem", "eq_inv_iff_eq_inv", []], ["mod", "theorem", "eq_of_mul_inv_eq_one", []], ["mod", "theorem", "eq_one_of_inv_eq_one", []], ["mod", "theorem", "eq_sub_iff_add_eq", []], ["mod", "theorem", "inv_eq_inv_iff_eq", []], ["mod", "theorem", "inv_eq_one_iff_eq_one", []], ["mod", "theorem", "left_inverse_add_left_sub", []], ["mod", "theorem", "left_inverse_add_right_neg_add", []], ["mod", "theorem", "left_inverse_inv", []], ["mod", "theorem", "left_inverse_neg_add_add_right", []], ["mod", "theorem", "left_inverse_sub_add_left", []], ["mod", "theorem", "mul_eq_iff_eq_inv_mul", []], ["mod", "theorem", "mul_eq_iff_eq_mul_inv", []], ["mod", "theorem", "sub_eq_iff_eq_add", []]]}, {"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": [["del", "theorem", "gpow_comm", []], ["add", "theorem", "gpow_mul_comm", []], ["mod", "theorem", "one_pow", []], ["mod", "theorem", "pow_add", []], ["del", "theorem", "pow_comm", []], ["mod", "def", "pow_int", []], ["add", "theorem", "pow_mul_comm'", []], ["add", "theorem", "pow_mul_comm", []], ["mod", "def", "pow_nat", []], ["mod", "theorem", "pow_succ'", []], ["mod", "theorem", "pow_succ", []]]}]}, {"timestamp": 1501691042, "sha": "3e9e4b68", "message": "refactor(*): move theorems and do minor polishing", "changes": [{"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "concat_cons", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": [["del", "theorem", "add_pos_iff_pos_or_pos", ["nat"]], ["del", "theorem", "add_pos_left", ["nat"]], ["del", "theorem", "add_pos_right", ["nat"]], ["del", "theorem", "lt_succ_iff_le", ["nat"]], ["del", "theorem", "succ_le_succ_iff", ["nat"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["add", "theorem", "add_pos_iff_pos_or_pos", ["nat"]], ["add", "theorem", "add_pos_left", ["nat"]], ["add", "theorem", "add_pos_right", ["nat"]], ["add", "theorem", "lt_succ_iff_le", ["nat"]], ["add", "theorem", "succ_le_succ_iff", ["nat"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["add", "theorem", "and_implies_iff", []], ["add", "theorem", "bexists_def", []], ["add", "theorem", "iff_def", []], ["add", "theorem", "implies_and_iff", []]]}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": [["del", "theorem", "curry_iff", []], ["del", "theorem", "iff_def", []], ["del", "theorem", "implies_and_iff", []], ["del", "theorem", "{u}", []]]}]}, {"timestamp": 1501690884, "sha": "da0c346b", "message": "fix(*): fix wrt changes in lean", "changes": [{"oldPath": "algebra/lattice/bounded_lattice.lean", "newPath": "algebra/lattice/bounded_lattice.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": [["del", "theorem", "Inf_le_iff", ["lattice"]], ["add", "theorem", "Sup_le_iff", ["lattice"]], ["add", "theorem", "le_Inf_iff", ["lattice"]], ["del", "theorem", "le_Sup_iff", ["lattice"]]]}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "directed_of_chain", []], ["mod", "def", "at_bot", ["filter"]], ["mod", "def", "at_top", ["filter"]], ["mod", "theorem", "monotone_lift'", ["filter"]], ["mod", "theorem", "monotone_lift", ["filter"]], ["del", "theorem", "Sup_le_iff", ["lattice"]], ["mod", "theorem", "monotone_inter", ["set"]], ["mod", "theorem", "monotone_prod", ["set"]], ["mod", "theorem", "monotone_set_of", ["set"]]]}, {"oldPath": "algebra/lattice/fixed_points.lean", "newPath": "algebra/lattice/fixed_points.lean", "changes": [["mod", "theorem", "ge_of_eq", []]]}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["mod", "theorem", "comp_le_comp_left_of_monotone", []]]}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "mem_set_of_eq", ["set"]]]}, {"oldPath": "tactic/alias.lean", "newPath": "tactic/alias.lean", "changes": [["del", "def", "alias_attr", ["tactic", "alias"]]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["mod", "theorem", "monotone_comp_rel", []]]}]}, {"timestamp": 1501687473, "sha": "6392b05a", "message": "refactor(*): switch from order_pair to partial_order", "changes": [{"oldPath": "algebra/lattice/basic.lean", "newPath": "algebra/lattice/basic.lean", "changes": [["mod", "theorem", "le_antisymm'", []]]}, {"oldPath": "algebra/lattice/bounded_lattice.lean", "newPath": "algebra/lattice/bounded_lattice.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": []}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "directed_of_chain", []], ["mod", "def", "at_bot", ["filter"]], ["mod", "def", "at_top", ["filter"]], ["mod", "theorem", "monotone_lift'", ["filter"]], ["mod", "theorem", "monotone_lift", ["filter"]], ["mod", "theorem", "monotone_inter", ["set"]], ["mod", "theorem", "monotone_prod", ["set"]], ["mod", "theorem", "monotone_set_of", ["set"]]]}, {"oldPath": "algebra/lattice/fixed_points.lean", "newPath": "algebra/lattice/fixed_points.lean", "changes": [["mod", "theorem", "ge_of_eq", []], ["mod", "theorem", "gfp_comp", ["lattice"]], ["mod", "theorem", "lfp_comp", ["lattice"]]]}, {"oldPath": "algebra/lattice/zorn.lean", "newPath": "algebra/lattice/zorn.lean", "changes": [["add", "theorem", "zorn_partial_order", ["zorn"]], ["del", "theorem", "zorn_weak_order", ["zorn"]]]}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["mod", "theorem", "comp_le_comp_left_of_monotone", []], ["mod", "theorem", "le_dual_eq_le", []], ["mod", "def", "weak_order_dual", []]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["mod", "def", "mk_nat", ["rat"]], ["mod", "def", "mk_pnat", ["rat"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["mod", "theorem", "eq_iff_le_and_le", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": []}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["mod", "theorem", "monotone_comp_rel", []]]}]}, {"timestamp": 1501559040, "sha": "fe811868", "message": "fix(tactic/alias): autogenerated alias names", "changes": [{"oldPath": "tactic/alias.lean", "newPath": "tactic/alias.lean", "changes": []}]}, {"timestamp": 1501554649, "sha": "1191b4d3", "message": "feat(tactic/alias): support biconditional aliases", "changes": [{"oldPath": "tactic/alias.lean", "newPath": "tactic/alias.lean", "changes": [["del", "def", "alias_attr", []], ["add", "def", "alias_attr", ["tactic", "alias"]]]}]}, {"timestamp": 1501548805, "sha": "fb21c1ae", "message": "feat(tactic/alias): alias command", "changes": [{"oldPath": null, "newPath": "tactic/alias.lean", "changes": [["add", "def", "alias_attr", []]]}]}, {"timestamp": 1501375804, "sha": "8f654965", "message": "feat(data/fp): first pass at a floating point model\nHopefully this will be eventually moved to init so it can get a native representation.", "changes": [{"oldPath": null, "newPath": "data/fp/basic.lean", "changes": [["add", "def", "div_nat_lt_two_pow", ["fp"]], ["add", "def", "emax", ["fp"]], ["add", "def", "emin", ["fp"]], ["add", "def", "default_nan", ["fp", "float"]], ["add", "def", "is_finite", ["fp", "float"]], ["add", "theorem", "valid", ["fp", "float", "zero"]], ["add", "def", "zero", ["fp", "float"]], ["add", "inductive", "float", ["fp"]], ["add", "structure", "nan_pl", ["fp"]], ["add", "def", "prec", ["fp"]], ["add", "inductive", "rmode", ["fp"]], ["add", "def", "shift2", ["fp"]], ["add", "def", "to_rat", ["fp"]], ["add", "def", "valid_finite", ["fp"]]]}]}, {"timestamp": 1501375682, "sha": "bce43b3c", "message": "feat(data/rat): new rat representation using canonical elements\nThis yields better performance in long rational computations provided the numbers can be simplified.", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "coe_nat_dvd_left", ["int"]], ["add", "theorem", "coe_nat_dvd_right", ["int"]], ["add", "theorem", "div_sign", ["int"]], ["add", "theorem", "nat_abs_add_le", ["int"]], ["add", "theorem", "nat_abs_mul", ["int"]], ["add", "theorem", "nat_abs_neg_of_nat", ["int"]], ["add", "theorem", "nat_succ_eq_int_succ", ["int"]], ["add", "theorem", "neg_nat_succ", ["int"]], ["add", "theorem", "neg_pred", ["int"]], ["add", "theorem", "neg_succ", ["int"]], ["add", "theorem", "neg_succ_of_nat_eq'", ["int"]], ["add", "def", "pred", ["int"]], ["add", "theorem", "pred_nat_succ", ["int"]], ["add", "theorem", "pred_neg_pred", ["int"]], ["add", "theorem", "pred_succ", ["int"]], ["add", "theorem", "sign_mul", ["int"]], ["add", "def", "succ", ["int"]], ["add", "theorem", "succ_neg_nat_succ", ["int"]], ["add", "theorem", "succ_neg_succ", ["int"]], ["add", "theorem", "succ_pred", ["int"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": []}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["del", "theorem", "comprime_one_left", ["nat"]], ["del", "theorem", "comprime_one_right", ["nat"]], ["add", "theorem", "coprime_one_left", ["nat"]], ["add", "theorem", "coprime_one_right", ["nat"]]]}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["mod", "theorem", "linear_order_cases_on_eq", []], ["mod", "theorem", "linear_order_cases_on_gt", []], ["mod", "theorem", "linear_order_cases_on_lt", []], ["del", "theorem", "not_antimono", []], ["add", "theorem", "add_def", ["rat"]], ["add", "def", "ceil", ["rat"]], ["add", "theorem", "div_mk_div_cancel_left", ["rat"]], ["add", "def", "floor", ["rat"]], ["add", "theorem", "inv_def", ["rat"]], ["add", "theorem", "lift_binop_eq", ["rat"]], ["add", "def", "mk", ["rat"]], ["add", "theorem", "mk_eq", ["rat"]], ["add", "theorem", "mk_eq_zero", ["rat"]], ["add", "def", "mk_nat", ["rat"]], ["add", "theorem", "mk_nat_eq", ["rat"]], ["add", "theorem", "mk_nonneg", ["rat"]], ["add", "def", "mk_pnat", ["rat"]], ["add", "theorem", "mk_pnat_eq", ["rat"]], ["add", "theorem", "mk_zero", ["rat"]], ["add", "theorem", "mul_def", ["rat"]], ["add", "theorem", "neg_def", ["rat"]], ["add", "theorem", "nonneg_iff_zero_le", ["rat"]], ["add", "theorem", "num_denom'", ["rat"]], ["add", "theorem", "num_denom", ["rat"]], ["add", "def", "of_int", ["rat"]], ["add", "theorem", "zero_mk", ["rat"]], ["add", "theorem", "zero_mk_nat", ["rat"]], ["add", "theorem", "zero_mk_pnat", ["rat"]], ["add", "theorem", "{u}", ["rat"]], ["add", "structure", "rat", []], ["del", "def", "rat", []]]}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": []}, {"oldPath": "pending/default.lean", "newPath": "pending/default.lean", "changes": []}, {"oldPath": "tactic/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": [["mod", "theorem", "mem_image", []]]}]}, {"timestamp": 1501260977, "sha": "bfe2db7f", "message": "fix(*): adapt to lean", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["del", "def", "filter_map", ["list"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "pending/default.lean", "newPath": "pending/default.lean", "changes": [["del", "theorem", "shiftl_succ", ["nat"]], ["del", "theorem", "shiftl_zero", ["nat"]]]}, {"oldPath": "tactic/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": []}]}, {"timestamp": 1501164177, "sha": "b37966e0", "message": "chore(.travis.yml): add Travis CI support", "changes": [{"oldPath": null, "newPath": ".travis.yml", "changes": []}, {"oldPath": "README.md", "newPath": "README.md", "changes": []}]}, {"timestamp": 1501079109, "sha": "b8ea20f7", "message": "fix(data): bitvec and vector are in the main repo", "changes": [{"oldPath": "data/bitvec.lean", "newPath": null, "changes": [["del", "def", "adc", ["bitvec"]], ["del", "def", "add_lsb", ["bitvec"]], ["del", "def", "and", ["bitvec"]], ["del", "def", "append", ["bitvec"]], ["del", "def", "bits_to_nat", ["bitvec"]], ["del", "theorem", "bits_to_nat_to_bool", ["bitvec"]], ["del", "theorem", "bits_to_nat_to_list", ["bitvec"]], ["del", "def", "fill_shr", ["bitvec"]], ["del", "def", "not", ["bitvec"]], ["del", "theorem", "of_nat_succ", ["bitvec"]], ["del", "def", "or", ["bitvec"]], ["del", "def", "sbb", ["bitvec"]], ["del", "def", "sborrow", ["bitvec"]], ["del", "def", "sge", ["bitvec"]], ["del", "def", "sgt", ["bitvec"]], ["del", "def", "shl", ["bitvec"]], ["del", "def", "sle", ["bitvec"]], ["del", "def", "slt", ["bitvec"]], ["del", "def", "sshr", ["bitvec"]], ["del", "theorem", "to_nat_append", ["bitvec"]], ["del", "theorem", "to_nat_of_nat", ["bitvec"]], ["del", "def", "uborrow", ["bitvec"]], ["del", "def", "uge", ["bitvec"]], ["del", "def", "ugt", ["bitvec"]], ["del", "def", "ule", ["bitvec"]], ["del", "def", "ult", ["bitvec"]], ["del", "def", "ushr", ["bitvec"]], ["del", "def", "xor", ["bitvec"]], ["del", "def", "bitvec", []]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["del", "theorem", "eq_nil_of_length_eq_zero", ["list"]], ["del", "theorem", "length_map₂", ["list"]], ["del", "theorem", "length_remove_nth", ["list"]], ["del", "theorem", "length_take", ["list"]], ["del", "theorem", "length_take_le", ["list"]], ["del", "def", "map₂", ["list"]], ["del", "theorem", "ne_nil_of_length_eq_succ", ["list"]], ["del", "def", "nth_le", ["list"]], ["del", "def", "remove_nth", ["list"]], ["del", "def", "update_nth", ["list"]]]}, {"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": [["del", "theorem", "length_map_accumr", ["list"]], ["del", "theorem", "length_map_accumr₂", ["list"]], ["del", "def", "map_accumr", ["list"]], ["del", "def", "map_accumr₂", ["list"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["del", "theorem", "add_div_left", ["nat"]], ["del", "theorem", "add_div_right", ["nat"]], ["del", "theorem", "add_mod_left", ["nat"]], ["del", "theorem", "add_mod_right", ["nat"]], ["del", "theorem", "add_mul_div_left", ["nat"]], ["del", "theorem", "add_mul_div_right", ["nat"]], ["del", "theorem", "add_mul_mod_self_left", ["nat"]], ["del", "theorem", "add_mul_mod_self_right", ["nat"]], ["del", "theorem", "add_one_ne_zero", ["nat"]], ["del", "theorem", "binary_rec_eq", ["nat"]], ["del", "theorem", "bitwise_bit", ["nat"]], ["del", "theorem", "bitwise_bit_aux", ["nat"]], ["del", "theorem", "bitwise_swap", ["nat"]], ["del", "theorem", "bitwise_zero", ["nat"]], ["del", "theorem", "bitwise_zero_left", ["nat"]], ["del", "theorem", "bitwise_zero_right", ["nat"]], ["del", "theorem", "bodd_bit", ["nat"]], ["del", "theorem", "cond_to_bool_mod_two", ["nat"]], ["del", "theorem", "discriminate", ["nat"]], ["del", "theorem", "div2_bit", ["nat"]], ["del", "theorem", "div_mul_le_self", ["nat"]], ["del", "theorem", "dvd_antisymm", ["nat"]], ["del", "theorem", "dvd_iff_mod_eq_zero", ["nat"]], ["del", "theorem", "dvd_mod_iff", ["nat"]], ["del", "theorem", "dvd_of_mod_eq_zero", ["nat"]], ["del", "theorem", "dvd_of_mul_dvd_mul_left", ["nat"]], ["del", "theorem", "dvd_of_mul_dvd_mul_right", ["nat"]], ["del", "theorem", "dvd_sub", ["nat"]], ["del", "theorem", "eq_one_of_dvd_one", ["nat"]], ["del", "theorem", "eq_zero_of_add_eq_zero", ["nat"]], ["del", "theorem", "eq_zero_of_mul_eq_zero", ["nat"]], ["del", "theorem", "eq_zero_or_eq_succ_pred", ["nat"]], ["del", "theorem", "exists_eq_succ_of_ne_zero", ["nat"]], ["del", "def", "iterate", ["nat"]], ["del", "theorem", "land_bit", ["nat"]], ["del", "theorem", "ldiff_bit", ["nat"]], ["del", "theorem", "le_lt_antisymm", ["nat"]], ["del", "theorem", "le_mul_self", ["nat"]], ["del", "theorem", "le_of_dvd", ["nat"]], ["del", "theorem", "le_succ_of_pred_le", ["nat"]], ["del", "theorem", "lor_bit", ["nat"]], ["del", "theorem", "lt_le_antisymm", ["nat"]], ["del", "theorem", "lt_succ_of_lt", ["nat"]], ["del", "theorem", "lxor_bit", ["nat"]], ["del", "theorem", "min_succ_succ", ["nat"]], ["del", "theorem", "mod_eq_zero_of_dvd", ["nat"]], ["del", "theorem", "mod_le", ["nat"]], ["del", "theorem", "mod_pow_succ", ["nat"]], ["del", "theorem", "mul_div_left", ["nat"]], ["del", "theorem", "mul_div_right", ["nat"]], ["del", "theorem", "mul_mod_left", ["nat"]], ["del", "theorem", "mul_mod_mul_left", ["nat"]], ["del", "theorem", "mul_mod_mul_right", ["nat"]], ["del", "theorem", "mul_mod_right", ["nat"]], ["del", "theorem", "mul_pred_left", ["nat"]], ["del", "theorem", "mul_pred_right", ["nat"]], ["del", "theorem", "mul_self_le_mul_self", ["nat"]], ["del", "theorem", "mul_self_le_mul_self_iff", ["nat"]], ["del", "theorem", "mul_self_lt_mul_self", ["nat"]], ["del", "theorem", "mul_self_lt_mul_self_iff", ["nat"]], ["del", "theorem", "mul_sub_div", ["nat"]], ["del", "theorem", "one_add", ["nat"]], ["del", "def", "one_pos", ["nat"]], ["del", "theorem", "one_shiftl", ["nat"]], ["del", "theorem", "one_succ_zero", ["nat"]], ["del", "theorem", "pos_of_dvd_of_pos", ["nat"]], ["del", "theorem", "pos_pow_of_pos", ["nat"]], ["del", "theorem", "pow_le_pow_of_le_left", ["nat"]], ["del", "theorem", "pow_le_pow_of_le_right", ["nat"]], ["del", "theorem", "pow_lt_pow_of_lt_left", ["nat"]], ["del", "theorem", "pow_lt_pow_of_lt_right", ["nat"]], ["del", "theorem", "pow_one", ["nat"]], ["del", "theorem", "pred_inj", ["nat"]], ["del", "theorem", "shiftl'_add", ["nat"]], ["del", "theorem", "shiftl'_sub", ["nat"]], ["del", "theorem", "shiftl'_tt_eq_mul_pow", ["nat"]], ["del", "theorem", "shiftl_add", ["nat"]], ["del", "theorem", "shiftl_eq_mul_pow", ["nat"]], ["del", "theorem", "shiftl_sub", ["nat"]], ["del", "theorem", "shiftr_add", ["nat"]], ["del", "theorem", "shiftr_eq_div_pow", ["nat"]], ["del", "theorem", "sub_add_min_cancel", ["nat"]], ["del", "theorem", "sub_eq_sub_min", ["nat"]], ["del", "theorem", "sub_induction", ["nat"]], ["del", "theorem", "sub_mul_div", ["nat"]], ["del", "theorem", "sub_mul_mod", ["nat"]], ["del", "theorem", "sub_one_sub_lt", ["nat"]], ["del", "theorem", "succ_add_eq_succ_add", ["nat"]], ["del", "theorem", "succ_inj", ["nat"]], ["del", "theorem", "succ_mul_succ_eq", ["nat"]], ["del", "theorem", "succ_sub", ["nat"]], ["del", "theorem", "succ_sub_sub_succ", ["nat"]], ["del", "theorem", "test_bit_bitwise", ["nat"]], ["del", "theorem", "test_bit_land", ["nat"]], ["del", "theorem", "test_bit_ldiff", ["nat"]], ["del", "theorem", "test_bit_lor", ["nat"]], ["del", "theorem", "test_bit_lxor", ["nat"]], ["del", "theorem", "test_bit_succ", ["nat"]], ["del", "theorem", "test_bit_zero", ["nat"]], ["del", "theorem", "two_step_induction", ["nat"]], ["del", "theorem", "zero_pow", ["nat"]], ["del", "theorem", "zero_shiftl", ["nat"]], ["del", "theorem", "zero_shiftr", ["nat"]]]}, {"oldPath": "data/num/basic.lean", "newPath": "data/num/basic.lean", "changes": []}, {"oldPath": "data/vector.lean", "newPath": null, "changes": [["del", "def", "append", ["vector"]], ["del", "def", "cons", ["vector"]], ["del", "theorem", "cons_head_tail", ["vector"]], ["del", "def", "drop", ["vector"]], ["del", "def", "elim", ["vector"]], ["del", "def", "head", ["vector"]], ["del", "theorem", "head_cons", ["vector"]], ["del", "def", "length", ["vector"]], ["del", "def", "map", ["vector"]], ["del", "def", "map_accumr", ["vector"]], ["del", "def", "map_accumr₂", ["vector"]], ["del", "theorem", "map_cons", ["vector"]], ["del", "theorem", "map_nil", ["vector"]], ["del", "def", "map₂", ["vector"]], ["del", "def", "nil", ["vector"]], ["del", "def", "nth", ["vector"]], ["del", "def", "of_fn", ["vector"]], ["del", "def", "remove_nth", ["vector"]], ["del", "def", "repeat", ["vector"]], ["del", "def", "tail", ["vector"]], ["del", "theorem", "tail_cons", ["vector"]], ["del", "def", "take", ["vector"]], ["del", "def", "to_list", ["vector"]], ["del", "theorem", "to_list_append", ["vector"]], ["del", "theorem", "to_list_cons", ["vector"]], ["del", "theorem", "to_list_drop", ["vector"]], ["del", "theorem", "to_list_length", ["vector"]], ["del", "theorem", "to_list_mk", ["vector"]], ["del", "theorem", "to_list_nil", ["vector"]], ["del", "theorem", "to_list_take", ["vector"]], ["del", "def", "vector", []]]}]}, {"timestamp": 1500990699, "sha": "94510873", "message": "refactor(*): move in list lemmas, adapt to change in list.union", "changes": [{"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": [["add", "theorem", "insert_lemma", ["hash_map"]], ["del", "theorem", "insert_theorem", ["hash_map"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "def", "concat", ["list"]], ["add", "theorem", "concat_eq_append", ["list"]], ["add", "def", "filter_map", ["list"]], ["add", "def", "find", ["list"]], ["add", "def", "find_indexes", ["list"]], ["add", "def", "find_indexes_aux", ["list"]], ["add", "theorem", "index_of_cons_eq", ["list"]], ["add", "theorem", "index_of_cons_ne", ["list"]], ["del", "theorem", "index_of_cons_of_eq", ["list"]], ["del", "theorem", "index_of_cons_of_ne", ["list"]], ["add", "theorem", "index_of_cons_self", ["list"]], ["add", "theorem", "index_of_eq_length", ["list"]], ["mod", "theorem", "index_of_lt_length", ["list"]], ["mod", "theorem", "index_of_nth", ["list"]], ["add", "theorem", "index_of_nth_le", ["list"]], ["mod", "theorem", "index_of_of_not_mem", ["list"]], ["add", "def", "indexes_of", ["list"]], ["add", "def", "inits", ["list"]], ["add", "def", "is_infix", ["list"]], ["add", "def", "is_prefix", ["list"]], ["add", "def", "is_suffix", ["list"]], ["add", "theorem", "length_concat", ["list"]], ["add", "theorem", "map_concat", ["list"]], ["add", "def", "map₂", ["list"]], ["del", "theorem", "mem_append_of_mem_or_mem", ["list"]], ["del", "theorem", "mem_or_mem_of_mem_append", ["list"]], ["mod", "theorem", "mem_split", ["list"]], ["mod", "theorem", "not_mem_append", ["list"]], ["del", "theorem", "not_mem_of_index_of_eq_length", ["list"]], ["del", "theorem", "not_mem_of_not_mem_append_left", ["list"]], ["del", "theorem", "not_mem_of_not_mem_append_right", ["list"]], ["add", "def", "nth_le", ["list"]], ["add", "def", "remove_nth", ["list"]], ["add", "def", "scanl", ["list"]], ["add", "def", "scanr", ["list"]], ["add", "def", "scanr_aux", ["list"]], ["add", "def", "split_at", ["list"]], ["mod", "theorem", "refl", ["list", "sublist"]], ["mod", "theorem", "trans", ["list", "sublist"]], ["add", "def", "sublists", ["list"]], ["add", "def", "sublists_aux", ["list"]], ["add", "def", "sum", ["list"]], ["add", "def", "tails", ["list"]], ["add", "def", "take_while", ["list"]], ["add", "def", "to_array", ["list"]], ["add", "def", "transpose", ["list"]], ["add", "def", "transpose_aux", ["list"]], ["add", "def", "update_nth", ["list"]]]}, {"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["mod", "theorem", "perm_insert", ["list", "perm"]], ["mod", "theorem", "perm_insert_insert", ["list", "perm"]]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["add", "theorem", "cons_union", ["list"]], ["del", "theorem", "comm", ["list", "disjoint"]], ["add", "theorem", "symm", ["list", "disjoint"]], ["add", "theorem", "disjoint_comm", ["list"]], ["del", "theorem", "disjoint_nil_right", ["list"]], ["add", "theorem", "disjoint_singleton", ["list"]], ["del", "theorem", "erase_cons", ["list"]], ["mod", "theorem", "erase_dup_cons_of_mem", ["list"]], ["mod", "theorem", "erase_dup_cons_of_not_mem", ["list"]], ["mod", "theorem", "erase_dup_eq_of_nodup", ["list"]], ["mod", "theorem", "erase_dup_nil", ["list"]], ["mod", "theorem", "erase_nil", ["list"]], ["mod", "theorem", "def", ["list", "insert"]], ["mod", "theorem", "insert_of_not_mem", ["list"]], ["mod", "theorem", "mem_erase_dup", ["list"]], ["del", "theorem", "mem_erase_dup_iff", ["list"]], ["mod", "theorem", "mem_insert_iff", ["list"]], ["del", "theorem", "mem_of_mem_erase_dup", ["list"]], ["mod", "theorem", "mem_or_mem_of_mem_union", ["list"]], ["mod", "theorem", "mem_union_iff", ["list"]], ["add", "theorem", "nil_union", ["list"]], ["add", "theorem", "nodup_append", ["list"]], ["del", "theorem", "nodup_append_of_nodup_of_nodup_of_disjoint", ["list"]], ["add", "theorem", "nodup_union", ["list"]], ["del", "theorem", "nodup_union_of_nodup_of_nodup", ["list"]], ["add", "theorem", "singleton_disjoint", ["list"]], ["del", "theorem", "union_cons", ["list"]], ["del", "theorem", "union_nil", ["list"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "mem_empty_eq", ["set"]], ["mod", "theorem", "mem_image_eq", ["set"]], ["mod", "theorem", "mem_sep_eq", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["mod", "theorem", "set_of_subset_set_of", []]]}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": []}]}, {"timestamp": 1500856940, "sha": "aa78466d", "message": "refactor(*): move in some nat lemmas\nand other lemmas from init", "changes": [{"oldPath": null, "newPath": "data/array/lemmas.lean", "changes": [["add", "theorem", "mem_iff_list_mem", ["array"]], ["add", "theorem", "mem_iff_rev_list_mem", ["array"]], ["add", "theorem", "mem_iff_rev_list_mem_core", ["array"]], ["add", "theorem", "push_back_rev_list", ["array"]], ["add", "theorem", "push_back_rev_list_core", ["array"]], ["add", "theorem", "push_back_to_list", ["array"]], ["add", "def", "read_foreach", ["array"]], ["add", "def", "read_foreach_aux", ["array"]], ["add", "def", "read_map", ["array"]], ["add", "def", "read_map₂", ["array"]], ["add", "theorem", "read_write", ["array"]], ["add", "theorem", "read_write_eq", ["array"]], ["add", "theorem", "read_write_ne", ["array"]], ["add", "theorem", "rev_list_length", ["array"]], ["add", "theorem", "rev_list_length_aux", ["array"]], ["add", "theorem", "rev_list_reverse", ["array"]], ["add", "theorem", "rev_list_reverse_core", ["array"]], ["add", "theorem", "to_array_to_list", ["array"]], ["add", "theorem", "to_list_length", ["array"]], ["add", "theorem", "to_list_nth", ["array"]], ["add", "theorem", "to_list_nth_core", ["array"]], ["add", "theorem", "to_list_reverse", ["array"]], ["add", "theorem", "to_list_to_array", ["array"]]]}, {"oldPath": "data/bitvec.lean", "newPath": "data/bitvec.lean", "changes": []}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["del", "theorem", "lt_succ_of_lt", []]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "abs_div_le_abs", ["int"]], ["add", "theorem", "add_mod_eq_add_mod_left", ["int"]], ["add", "theorem", "add_mod_eq_add_mod_right", ["int"]], ["add", "theorem", "add_mod_mod", ["int"]], ["add", "theorem", "add_mod_self", ["int"]], ["add", "theorem", "add_mod_self_left", ["int"]], ["add", "theorem", "add_mul_mod_self", ["int"]], ["add", "theorem", "add_mul_mod_self_left", ["int"]], ["add", "theorem", "bit0_val", ["int"]], ["add", "theorem", "bit1_val", ["int"]], ["add", "theorem", "bit_coe_nat", ["int"]], ["add", "theorem", "bit_decomp", ["int"]], ["add", "theorem", "bit_neg_succ", ["int"]], ["add", "theorem", "bit_val", ["int"]], ["add", "theorem", "bit_zero", ["int"]], ["add", "theorem", "bitwise_and", ["int"]], ["add", "theorem", "bitwise_bit", ["int"]], ["add", "theorem", "bitwise_diff", ["int"]], ["add", "theorem", "bitwise_or", ["int"]], ["add", "theorem", "bitwise_xor", ["int"]], ["add", "theorem", "bodd_add", ["int"]], ["add", "theorem", "bodd_add_div2", ["int"]], ["add", "theorem", "bodd_bit", ["int"]], ["add", "theorem", "bodd_mul", ["int"]], ["add", "theorem", "bodd_neg", ["int"]], ["add", "theorem", "bodd_neg_of_nat", ["int"]], ["add", "theorem", "bodd_one", ["int"]], ["add", "theorem", "bodd_sub_nat_nat", ["int"]], ["add", "theorem", "bodd_two", ["int"]], ["add", "theorem", "bodd_zero", ["int"]], ["add", "theorem", "coe_nat_dvd_coe_nat_iff", ["int"]], ["add", "theorem", "coe_nat_dvd_coe_nat_of_dvd", ["int"]], ["add", "theorem", "div2_bit", ["int"]], ["add", "theorem", "div2_val", ["int"]], ["add", "theorem", "div_dvd_div", ["int"]], ["add", "theorem", "div_eq_div_of_mul_eq_mul", ["int"]], ["add", "theorem", "div_eq_zero_of_lt", ["int"]], ["add", "theorem", "div_eq_zero_of_lt_abs", ["int"]], ["add", "theorem", "div_le_self", ["int"]], ["add", "theorem", "div_mul_cancel_of_mod_eq_zero", ["int"]], ["add", "theorem", "div_neg'", ["int"]], ["add", "theorem", "div_of_neg_of_pos", ["int"]], ["add", "theorem", "div_pos_of_pos_of_dvd", ["int"]], ["add", "theorem", "dvd_antisymm", ["int"]], ["add", "theorem", "dvd_iff_mod_eq_zero", ["int"]], ["add", "theorem", "dvd_of_coe_nat_dvd_coe_nat", ["int"]], ["add", "theorem", "dvd_of_mod_eq_zero", ["int"]], ["add", "theorem", "eq_one_of_dvd_one", ["int"]], ["add", "theorem", "eq_one_of_mul_eq_one_left", ["int"]], ["add", "theorem", "eq_one_of_mul_eq_one_right", ["int"]], ["add", "theorem", "land_bit", ["int"]], ["add", "theorem", "ldiff_bit", ["int"]], ["add", "theorem", "le_of_dvd", ["int"]], ["add", "theorem", "lnot_bit", ["int"]], ["add", "theorem", "lor_bit", ["int"]], ["add", "theorem", "lt_div_add_one_mul_self", ["int"]], ["add", "theorem", "lxor_bit", ["int"]], ["add", "theorem", "mod_abs", ["int"]], ["add", "theorem", "mod_add_div", ["int"]], ["add", "theorem", "mod_add_div_aux", ["int"]], ["add", "theorem", "mod_add_mod", ["int"]], ["add", "theorem", "mod_def", ["int"]], ["add", "theorem", "mod_eq_mod_of_add_mod_eq_add_mod_left", ["int"]], ["add", "theorem", "mod_eq_mod_of_add_mod_eq_add_mod_right", ["int"]], ["add", "theorem", "mod_eq_of_lt", ["int"]], ["add", "theorem", "mod_eq_zero_of_dvd", ["int"]], ["add", "theorem", "mod_lt", ["int"]], ["add", "theorem", "mod_lt_of_pos", ["int"]], ["add", "theorem", "mod_neg", ["int"]], ["add", "theorem", "mod_nonneg", ["int"]], ["add", "theorem", "mod_one", ["int"]], ["add", "theorem", "mod_self", ["int"]], ["add", "theorem", "mod_zero", ["int"]], ["add", "theorem", "mul_div_cancel_of_mod_eq_zero", ["int"]], ["add", "theorem", "mul_div_mul_of_pos", ["int"]], ["add", "theorem", "mul_div_mul_of_pos_left", ["int"]], ["add", "theorem", "mul_mod_left", ["int"]], ["add", "theorem", "mul_mod_mul_of_pos", ["int"]], ["add", "theorem", "mul_mod_right", ["int"]], ["add", "theorem", "neg_div_of_dvd", ["int"]], ["add", "theorem", "neg_succ_of_nat_div", ["int"]], ["add", "theorem", "neg_succ_of_nat_mod", ["int"]], ["add", "theorem", "of_nat_div", ["int"]], ["add", "theorem", "of_nat_mod", ["int"]], ["add", "theorem", "one_shiftl", ["int"]], ["add", "theorem", "shiftl_add", ["int"]], ["add", "theorem", "shiftl_coe_nat", ["int"]], ["add", "theorem", "shiftl_eq_mul_pow", ["int"]], ["add", "theorem", "shiftl_neg", ["int"]], ["add", "theorem", "shiftl_neg_succ", ["int"]], ["add", "theorem", "shiftl_sub", ["int"]], ["add", "theorem", "shiftr_add", ["int"]], ["add", "theorem", "shiftr_coe_nat", ["int"]], ["add", "theorem", "shiftr_eq_div_pow", ["int"]], ["add", "theorem", "shiftr_neg", ["int"]], ["add", "theorem", "shiftr_neg_succ", ["int"]], ["add", "theorem", "test_bit_bitwise", ["int"]], ["add", "theorem", "test_bit_land", ["int"]], ["add", "theorem", "test_bit_ldiff", ["int"]], ["add", "theorem", "test_bit_lnot", ["int"]], ["add", "theorem", "test_bit_lor", ["int"]], ["add", "theorem", "test_bit_lxor", ["int"]], ["add", "theorem", "test_bit_succ", ["int"]], ["add", "theorem", "test_bit_zero", ["int"]], ["add", "theorem", "zero_mod", ["int"]], ["add", "theorem", "zero_shiftl", ["int"]], ["add", "theorem", "zero_shiftr", ["int"]], ["add", "def", "{u}", ["int"]], ["del", "def", "nat_succ_eq_int_succ", []], ["del", "theorem", "neg_nat_succ", []], ["del", "theorem", "neg_pred", []], ["del", "theorem", "neg_succ", []], ["del", "theorem", "neg_succ_of_nat_eq'", []], ["del", "theorem", "of_nat_sub", []], ["del", "def", "pred", []], ["del", "theorem", "pred_nat_succ", []], ["del", "theorem", "pred_neg_pred", []], ["del", "theorem", "pred_succ", []], ["del", "def", "rec_nat_on", []], ["del", "theorem", "rec_nat_on_neg", []], ["del", "def", "succ", []], ["del", "theorem", "succ_neg_nat_succ", []], ["del", "theorem", "succ_neg_succ", []], ["del", "theorem", "succ_pred", []]]}, {"oldPath": "data/int/order.lean", "newPath": "data/int/order.lean", "changes": [["add", "theorem", "exists_greatest_of_bdd", ["int"]], ["add", "theorem", "exists_least_of_bdd", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "app_subset_of_subset_of_subset", ["list"]], ["del", "theorem", "assoc", ["list", "append"]], ["add", "theorem", "append_foldl", ["list"]], ["add", "theorem", "append_foldr", ["list"]], ["add", "theorem", "append_inj", ["list"]], ["add", "theorem", "append_inj_left", ["list"]], ["add", "theorem", "append_inj_right", ["list"]], ["add", "theorem", "append_ne_nil_of_ne_nil_left", ["list"]], ["add", "theorem", "append_ne_nil_of_ne_nil_right", ["list"]], ["add", "theorem", "append_right_inj", ["list"]], ["add", "theorem", "concat_eq_reverse_cons", ["list"]], ["add", "theorem", "cons_head_tail", ["list"]], ["mod", "theorem", "cons_ne_nil", ["list"]], ["add", "theorem", "cons_sublist_cons", ["list"]], ["add", "theorem", "cons_subset_of_subset_of_mem", ["list"]], ["add", "theorem", "eq_nil_of_forall_not_mem", ["list"]], ["add", "theorem", "eq_nil_of_infix_nil", ["list"]], ["add", "theorem", "eq_nil_of_length_eq_zero", ["list"]], ["add", "theorem", "eq_nil_of_map_eq_nil", ["list"]], ["add", "theorem", "eq_nil_of_prefix_nil", ["list"]], ["add", "theorem", "eq_nil_of_sublist_nil", ["list"]], ["add", "theorem", "eq_nil_of_subset_nil", ["list"]], ["add", "theorem", "eq_nil_of_suffix_nil", ["list"]], ["add", "theorem", "eq_of_map_const", ["list"]], ["add", "theorem", "exists_of_mem_bind", ["list"]], ["add", "theorem", "exists_of_mem_join", ["list"]], ["add", "theorem", "exists_of_mem_map", ["list"]], ["add", "theorem", "ext", ["list"]], ["add", "theorem", "ext_le", ["list"]], ["add", "theorem", "filter_subset", ["list"]], ["add", "theorem", "foldl_hom", ["list"]], ["add", "theorem", "foldl_map", ["list"]], ["add", "theorem", "foldr_eta", ["list"]], ["add", "theorem", "foldr_hom", ["list"]], ["add", "theorem", "foldr_map", ["list"]], ["add", "theorem", "head_append", ["list"]], ["add", "theorem", "infix_append", ["list"]], ["add", "theorem", "infix_iff_prefix_suffix", ["list"]], ["add", "theorem", "infix_of_prefix", ["list"]], ["add", "theorem", "infix_of_suffix", ["list"]], ["add", "theorem", "infix_refl", ["list"]], ["mod", "def", "inth", ["list"]], ["del", "theorem", "inth_succ", ["list"]], ["del", "theorem", "inth_zero", ["list"]], ["del", "def", "ith", ["list"]], ["del", "theorem", "ith_succ", ["list"]], ["del", "theorem", "ith_zero", ["list"]], ["add", "theorem", "last_append", ["list"]], ["add", "theorem", "last_concat", ["list"]], ["add", "theorem", "last_cons", ["list"]], ["add", "theorem", "length_le_of_infix", ["list"]], ["add", "theorem", "length_map₂", ["list"]], ["add", "theorem", "length_pos_of_mem", ["list"]], ["add", "theorem", "length_remove_nth", ["list"]], ["add", "theorem", "length_reverse", ["list"]], ["add", "theorem", "length_take", ["list"]], ["add", "theorem", "length_take_le", ["list"]], ["del", "theorem", "length_taken_le", ["list"]], ["add", "theorem", "map_id'", ["list"]], ["add", "theorem", "map_reverse", ["list"]], ["add", "theorem", "mem_append_of_mem_or_mem", ["list"]], ["add", "theorem", "mem_bind", ["list"]], ["add", "theorem", "mem_bind_iff", ["list"]], ["add", "theorem", "mem_filter_of_mem", ["list"]], ["add", "theorem", "mem_inits", ["list"]], ["add", "theorem", "mem_join", ["list"]], ["add", "theorem", "mem_join_iff", ["list"]], ["add", "theorem", "mem_map", ["list"]], ["add", "theorem", "mem_map_iff", ["list"]], ["add", "theorem", "mem_of_mem_cons_of_mem", ["list"]], ["add", "theorem", "mem_of_mem_filter", ["list"]], ["add", "theorem", "mem_of_ne_of_mem", ["list"]], ["add", "theorem", "mem_or_mem_of_mem_append", ["list"]], ["add", "theorem", "mem_reverse", ["list"]], ["add", "theorem", "mem_singleton", ["list"]], ["add", "theorem", "mem_singleton_iff", ["list"]], ["add", "theorem", "mem_split", ["list"]], ["add", "theorem", "mem_sublists", ["list"]], ["add", "theorem", "mem_tails", ["list"]], ["add", "theorem", "ne_and_not_mem_of_not_mem_cons", ["list"]], ["add", "theorem", "ne_nil_of_length_eq_succ", ["list"]], ["add", "theorem", "ne_of_not_mem_cons", ["list"]], ["add", "theorem", "nil_sublist", ["list"]], ["add", "theorem", "not_mem_append", ["list"]], ["add", "theorem", "not_mem_cons_of_ne_of_not_mem", ["list"]], ["add", "theorem", "not_mem_of_not_mem_append_left", ["list"]], ["add", "theorem", "not_mem_of_not_mem_append_right", ["list"]], ["add", "theorem", "not_mem_of_not_mem_cons", ["list"]], ["del", "theorem", "nth_eq_some", ["list"]], ["add", "theorem", "nth_ge_len", ["list"]], ["add", "theorem", "nth_le_nth", ["list"]], ["add", "theorem", "nth_le_reverse", ["list"]], ["add", "theorem", "nth_le_reverse_aux1", ["list"]], ["add", "theorem", "nth_le_reverse_aux2", ["list"]], ["add", "theorem", "of_mem_filter", ["list"]], ["add", "theorem", "prefix_append", ["list"]], ["add", "theorem", "prefix_refl", ["list"]], ["add", "theorem", "reverse_append", ["list"]], ["add", "theorem", "reverse_cons", ["list"]], ["add", "theorem", "reverse_nil", ["list"]], ["add", "theorem", "reverse_reverse", ["list"]], ["add", "theorem", "reverse_singleton", ["list"]], ["add", "theorem", "scanr_aux_cons", ["list"]], ["add", "theorem", "scanr_cons", ["list"]], ["add", "theorem", "scanr_nil", ["list"]], ["add", "theorem", "span_eq_take_drop", ["list"]], ["add", "theorem", "split_at_eq_take_drop", ["list"]], ["add", "theorem", "refl", ["list", "sublist"]], ["add", "theorem", "trans", ["list", "sublist"]], ["add", "theorem", "sublist_app_of_sublist_left", ["list"]], ["add", "theorem", "sublist_app_of_sublist_right", ["list"]], ["add", "theorem", "sublist_append_left", ["list"]], ["add", "theorem", "sublist_append_right", ["list"]], ["add", "theorem", "sublist_cons", ["list"]], ["add", "theorem", "sublist_cons_of_sublist", ["list"]], ["add", "theorem", "sublist_of_cons_sublist", ["list"]], ["add", "theorem", "sublist_of_cons_sublist_cons", ["list"]], ["add", "theorem", "sublist_of_infix", ["list"]], ["add", "theorem", "sublists_aux_cons_cons", ["list"]], ["add", "theorem", "sublists_aux_eq_foldl", ["list"]], ["add", "theorem", "subset_app_of_subset_left", ["list"]], ["add", "theorem", "subset_app_of_subset_right", ["list"]], ["add", "theorem", "subset_of_sublist", ["list"]], ["add", "theorem", "suffix_append", ["list"]], ["add", "theorem", "suffix_refl", ["list"]], ["add", "theorem", "take_all", ["list"]], ["add", "theorem", "take_all_of_ge", ["list"]], ["add", "theorem", "take_append_drop", ["list"]], ["add", "theorem", "take_cons", ["list"]], ["add", "theorem", "take_nil", ["list"]], ["add", "theorem", "take_take", ["list"]], ["add", "theorem", "take_while_append_drop", ["list"]], ["add", "theorem", "take_zero", ["list"]], ["del", "theorem", "taken_all", ["list"]], ["del", "theorem", "taken_all_of_ge", ["list"]], ["del", "theorem", "taken_cons", ["list"]], ["del", "theorem", "taken_nil", ["list"]], ["del", "theorem", "taken_zero", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["del", "def", "iterate", []], ["add", "theorem", "add_div_left", ["nat"]], ["add", "theorem", "add_div_right", ["nat"]], ["add", "theorem", "add_mod_left", ["nat"]], ["add", "theorem", "add_mod_right", ["nat"]], ["add", "theorem", "add_mul_div_left", ["nat"]], ["add", "theorem", "add_mul_div_right", ["nat"]], ["add", "theorem", "add_mul_mod_self_left", ["nat"]], ["add", "theorem", "add_mul_mod_self_right", ["nat"]], ["del", "theorem", "add_one", ["nat"]], ["add", "theorem", "binary_rec_eq", ["nat"]], ["add", "theorem", "bitwise_bit", ["nat"]], ["add", "theorem", "bitwise_bit_aux", ["nat"]], ["add", "theorem", "bitwise_swap", ["nat"]], ["add", "theorem", "bitwise_zero", ["nat"]], ["add", "theorem", "bitwise_zero_left", ["nat"]], ["add", "theorem", "bitwise_zero_right", ["nat"]], ["add", "theorem", "bodd_bit", ["nat"]], ["add", "theorem", "cond_to_bool_mod_two", ["nat"]], ["mod", "theorem", "discriminate", ["nat"]], ["add", "theorem", "div2_bit", ["nat"]], ["add", "theorem", "div_mul_le_self", ["nat"]], ["add", "theorem", "dvd_antisymm", ["nat"]], ["add", "theorem", "dvd_iff_mod_eq_zero", ["nat"]], ["add", "theorem", "dvd_mod_iff", ["nat"]], ["add", "theorem", "dvd_of_mod_eq_zero", ["nat"]], ["add", "theorem", "dvd_of_mul_dvd_mul_left", ["nat"]], ["add", "theorem", "dvd_of_mul_dvd_mul_right", ["nat"]], ["add", "theorem", "dvd_sub", ["nat"]], ["add", "theorem", "eq_one_of_dvd_one", ["nat"]], ["add", "theorem", "eq_zero_of_mul_eq_zero", ["nat"]], ["add", "def", "iterate", ["nat"]], ["add", "theorem", "land_bit", ["nat"]], ["add", "theorem", "ldiff_bit", ["nat"]], ["add", "theorem", "le_lt_antisymm", ["nat"]], ["add", "theorem", "le_mul_self", ["nat"]], ["add", "theorem", "le_of_dvd", ["nat"]], ["add", "theorem", "le_succ_of_pred_le", ["nat"]], ["add", "theorem", "lor_bit", ["nat"]], ["add", "theorem", "lt_le_antisymm", ["nat"]], ["add", "theorem", "lt_succ_of_lt", ["nat"]], ["add", "theorem", "lxor_bit", ["nat"]], ["add", "theorem", "min_succ_succ", ["nat"]], ["add", "theorem", "mod_eq_zero_of_dvd", ["nat"]], ["add", "theorem", "mod_le", ["nat"]], ["add", "theorem", "mod_pow_succ", ["nat"]], ["add", "theorem", "mul_div_left", ["nat"]], ["add", "theorem", "mul_div_right", ["nat"]], ["add", "theorem", "mul_mod_left", ["nat"]], ["add", "theorem", "mul_mod_mul_left", ["nat"]], ["add", "theorem", "mul_mod_mul_right", ["nat"]], ["add", "theorem", "mul_mod_right", ["nat"]], ["add", "theorem", "mul_pred_left", ["nat"]], ["add", "theorem", "mul_pred_right", ["nat"]], ["add", "theorem", "mul_self_le_mul_self", ["nat"]], ["add", "theorem", "mul_self_le_mul_self_iff", ["nat"]], ["add", "theorem", "mul_self_lt_mul_self", ["nat"]], ["add", "theorem", "mul_self_lt_mul_self_iff", ["nat"]], ["add", "theorem", "mul_sub_div", ["nat"]], ["add", "def", "one_pos", ["nat"]], ["add", "theorem", "one_shiftl", ["nat"]], ["add", "theorem", "pos_of_dvd_of_pos", ["nat"]], ["add", "theorem", "pos_pow_of_pos", ["nat"]], ["add", "theorem", "pow_le_pow_of_le_left", ["nat"]], ["add", "theorem", "pow_le_pow_of_le_right", ["nat"]], ["add", "theorem", "pow_lt_pow_of_lt_left", ["nat"]], ["add", "theorem", "pow_lt_pow_of_lt_right", ["nat"]], ["add", "theorem", "pow_one", ["nat"]], ["add", "theorem", "pred_inj", ["nat"]], ["add", "theorem", "shiftl'_add", ["nat"]], ["add", "theorem", "shiftl'_sub", ["nat"]], ["add", "theorem", "shiftl'_tt_eq_mul_pow", ["nat"]], ["add", "theorem", "shiftl_add", ["nat"]], ["add", "theorem", "shiftl_eq_mul_pow", ["nat"]], ["add", "theorem", "shiftl_sub", ["nat"]], ["add", "theorem", "shiftr_add", ["nat"]], ["add", "theorem", "shiftr_eq_div_pow", ["nat"]], ["add", "theorem", "sub_add_min_cancel", ["nat"]], ["add", "theorem", "sub_eq_sub_min", ["nat"]], ["add", "theorem", "sub_mul_div", ["nat"]], ["add", "theorem", "sub_mul_mod", ["nat"]], ["add", "theorem", "sub_one_sub_lt", ["nat"]], ["add", "theorem", "succ_mul_succ_eq", ["nat"]], ["add", "theorem", "succ_sub", ["nat"]], ["add", "theorem", "succ_sub_sub_succ", ["nat"]], ["add", "theorem", "test_bit_bitwise", ["nat"]], ["add", "theorem", "test_bit_land", ["nat"]], ["add", "theorem", "test_bit_ldiff", ["nat"]], ["add", "theorem", "test_bit_lor", ["nat"]], ["add", "theorem", "test_bit_lxor", ["nat"]], ["add", "theorem", "test_bit_succ", ["nat"]], ["add", "theorem", "test_bit_zero", ["nat"]], ["add", "theorem", "zero_pow", ["nat"]], ["add", "theorem", "zero_shiftl", ["nat"]], ["add", "theorem", "zero_shiftr", ["nat"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": []}, {"oldPath": "data/nat/sub.lean", "newPath": "data/nat/sub.lean", "changes": []}, {"oldPath": null, "newPath": "data/option.lean", "changes": [["add", "def", "iget", ["option"]]]}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": []}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/stream.lean", "newPath": "data/stream.lean", "changes": []}]}, {"timestamp": 1500836577, "sha": "1b6322ff", "message": "chore(*): rfl-lemmas on same line", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "join_principal_eq_Sup", ["filter"]], ["mod", "theorem", "mem_join_sets", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["mod", "theorem", "principal_empty", ["filter"]], ["mod", "theorem", "principal_univ", ["filter"]], ["mod", "theorem", "fmap_eq_image", ["set"]], ["mod", "theorem", "set_of_mem_eq", ["set"]]]}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": []}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["mod", "theorem", "bnot_false", ["bool"]], ["mod", "theorem", "bnot_true", ["bool"]], ["mod", "theorem", "cond_ff", ["bool"]], ["mod", "theorem", "cond_tt", ["bool"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "count_nil", ["list"]], ["mod", "theorem", "head_cons", ["list"]], ["mod", "theorem", "index_of_cons", ["list"]], ["mod", "theorem", "index_of_nil", ["list"]], ["mod", "theorem", "inth_succ", ["list"]], ["mod", "theorem", "inth_zero", ["list"]], ["mod", "theorem", "ith_zero", ["list"]], ["mod", "theorem", "last_singleton", ["list"]], ["mod", "theorem", "tail_cons", ["list"]], ["mod", "theorem", "tail_nil", ["list"]]]}, {"oldPath": "data/stream.lean", "newPath": "data/stream.lean", "changes": [["mod", "theorem", "all_def", ["stream"]], ["mod", "theorem", "any_def", ["stream"]], ["mod", "theorem", "approx_succ", ["stream"]], ["mod", "theorem", "approx_zero", ["stream"]], ["mod", "theorem", "composition", ["stream"]], ["mod", "theorem", "cons_append_stream", ["stream"]], ["mod", "theorem", "corec_def", ["stream"]], ["mod", "theorem", "corec_id_f_eq_iterate", ["stream"]], ["mod", "theorem", "drop_succ", ["stream"]], ["mod", "theorem", "even_tail", ["stream"]], ["mod", "theorem", "head_cons", ["stream"]], ["mod", "theorem", "head_even", ["stream"]], ["mod", "theorem", "head_iterate", ["stream"]], ["mod", "theorem", "head_map", ["stream"]], ["mod", "theorem", "head_zip", ["stream"]], ["mod", "theorem", "homomorphism", ["stream"]], ["mod", "theorem", "identity", ["stream"]], ["mod", "theorem", "inits_tail", ["stream"]], ["mod", "theorem", "interchange", ["stream"]], ["mod", "theorem", "map_const", ["stream"]], ["mod", "theorem", "map_eq_apply", ["stream"]], ["mod", "theorem", "map_id", ["stream"]], ["mod", "theorem", "map_map", ["stream"]], ["mod", "theorem", "map_tail", ["stream"]], ["mod", "theorem", "nil_append_stream", ["stream"]], ["mod", "theorem", "nth_const", ["stream"]], ["mod", "theorem", "nth_drop", ["stream"]], ["mod", "theorem", "nth_map", ["stream"]], ["mod", "theorem", "nth_nats", ["stream"]], ["mod", "theorem", "nth_succ", ["stream"]], ["mod", "theorem", "nth_zero_cons", ["stream"]], ["mod", "theorem", "nth_zero_iterate", ["stream"]], ["mod", "theorem", "nth_zip", ["stream"]], ["mod", "theorem", "odd_eq", ["stream"]], ["mod", "theorem", "tail_cons", ["stream"]], ["mod", "theorem", "tail_eq_drop", ["stream"]], ["mod", "theorem", "tail_zip", ["stream"]], ["mod", "theorem", "tails_eq_iterate", ["stream"]]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": []}]}, {"timestamp": 1500836379, "sha": "4a285354", "message": "refactor(*): attributes on same line", "changes": [{"oldPath": "algebra/lattice/boolean_algebra.lean", "newPath": "algebra/lattice/boolean_algebra.lean", "changes": [["mod", "theorem", "inf_neg_eq_bot", ["lattice"]], ["mod", "theorem", "neg_bot", ["lattice"]], ["mod", "theorem", "neg_eq_neg_iff", ["lattice"]], ["mod", "theorem", "neg_inf", ["lattice"]], ["mod", "theorem", "neg_inf_eq_bot", ["lattice"]], ["mod", "theorem", "neg_neg", ["lattice"]], ["mod", "theorem", "neg_sup", ["lattice"]], ["mod", "theorem", "neg_sup_eq_top", ["lattice"]], ["mod", "theorem", "neg_top", ["lattice"]], ["mod", "theorem", "sup_neg_eq_top", ["lattice"]]]}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_empty", ["lattice"]], ["mod", "theorem", "Inf_insert", ["lattice"]], ["mod", "theorem", "Inf_le", ["lattice"]], ["mod", "theorem", "Inf_le_iff", ["lattice"]], ["mod", "theorem", "Inf_singleton", ["lattice"]], ["mod", "theorem", "Inf_univ", ["lattice"]], ["mod", "theorem", "Sup_empty", ["lattice"]], ["mod", "theorem", "Sup_insert", ["lattice"]], ["mod", "theorem", "Sup_singleton", ["lattice"]], ["mod", "theorem", "Sup_univ", ["lattice"]], ["mod", "theorem", "foo'", ["lattice"]], ["mod", "theorem", "foo", ["lattice"]], ["mod", "theorem", "infi_congr_Prop", ["lattice"]], ["mod", "theorem", "infi_const", ["lattice"]], ["mod", "theorem", "infi_empty", ["lattice"]], ["mod", "theorem", "infi_emptyset", ["lattice"]], ["mod", "theorem", "infi_exists", ["lattice"]], ["mod", "theorem", "infi_false", ["lattice"]], ["mod", "theorem", "infi_infi_eq_left", ["lattice"]], ["mod", "theorem", "infi_infi_eq_right", ["lattice"]], ["mod", "theorem", "infi_insert", ["lattice"]], ["mod", "theorem", "infi_le'", ["lattice"]], ["mod", "theorem", "infi_singleton", ["lattice"]], ["mod", "theorem", "infi_true", ["lattice"]], ["mod", "theorem", "infi_union", ["lattice"]], ["mod", "theorem", "infi_unit", ["lattice"]], ["mod", "theorem", "infi_univ", ["lattice"]], ["mod", "theorem", "le_Sup", ["lattice"]], ["mod", "theorem", "le_Sup_iff", ["lattice"]], ["mod", "theorem", "le_infi_iff", ["lattice"]], ["mod", "theorem", "le_supr'", ["lattice"]], ["mod", "theorem", "supr_congr_Prop", ["lattice"]], ["mod", "theorem", "supr_const", ["lattice"]], ["mod", "theorem", "supr_empty", ["lattice"]], ["mod", "theorem", "supr_emptyset", ["lattice"]], ["mod", "theorem", "supr_exists", ["lattice"]], ["mod", "theorem", "supr_false", ["lattice"]], ["mod", "theorem", "supr_insert", ["lattice"]], ["mod", "theorem", "supr_le_iff", ["lattice"]], ["mod", "theorem", "supr_singleton", ["lattice"]], ["mod", "theorem", "supr_supr_eq_left", ["lattice"]], ["mod", "theorem", "supr_supr_eq_right", ["lattice"]], ["mod", "theorem", "supr_true", ["lattice"]], ["mod", "theorem", "supr_union", ["lattice"]], ["mod", "theorem", "supr_unit", ["lattice"]], ["mod", "theorem", "supr_univ", ["lattice"]]]}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "diff_empty", []], ["mod", "theorem", "fmap_principal", ["filter"]], ["mod", "theorem", "inf_principal", ["filter"]], ["mod", "theorem", "infi_sets_induct", ["filter"]], ["mod", "theorem", "join_principal_eq_Sup", ["filter"]], ["mod", "theorem", "le_principal_iff", ["filter"]], ["mod", "theorem", "lift'_id", ["filter"]], ["mod", "theorem", "map_bot", ["filter"]], ["mod", "theorem", "map_compose", ["filter"]], ["mod", "theorem", "map_eq_bot_iff", ["filter"]], ["mod", "theorem", "map_id", ["filter"]], ["mod", "theorem", "map_principal", ["filter"]], ["mod", "theorem", "map_sup", ["filter"]], ["mod", "theorem", "mem_bot_sets", ["filter"]], ["mod", "theorem", "mem_inf_sets", ["filter"]], ["mod", "theorem", "mem_join_sets", ["filter"]], ["mod", "theorem", "mem_map", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["mod", "theorem", "mem_pure", ["filter"]], ["mod", "theorem", "mem_sup_sets", ["filter"]], ["mod", "theorem", "mem_top_sets_iff", ["filter"]], ["mod", "theorem", "principal_eq_bot_iff", ["filter"]], ["mod", "theorem", "principal_eq_iff_eq", ["filter"]], ["mod", "theorem", "sup_join", ["filter"]], ["mod", "theorem", "sup_principal", ["filter"]], ["mod", "theorem", "supr_join", ["filter"]], ["mod", "theorem", "supr_map", ["filter"]], ["mod", "theorem", "supr_principal", ["filter"]], ["mod", "theorem", "vmap_principal", ["filter"]], ["mod", "theorem", "not_not_mem_iff", []], ["mod", "theorem", "fst_swap", ["prod"]], ["mod", "theorem", "snd_swap", ["prod"]], ["mod", "theorem", "swap_prod_mk", ["prod"]], ["mod", "theorem", "swap_swap", ["prod"]], ["mod", "theorem", "swap_swap_eq", ["prod"]], ["mod", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["mod", "theorem", "prod_singleton_singleton", ["set"]], ["mod", "theorem", "set_of_mem_eq", ["set"]], ["mod", "theorem", "vimage_set_of_eq", ["set"]], ["mod", "theorem", "singleton_neq_emptyset", []]]}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["mod", "theorem", "absurd_of_eq_ff_of_eq_tt", ["bool"]], ["mod", "theorem", "band_assoc", ["bool"]], ["mod", "theorem", "band_comm", ["bool"]], ["mod", "theorem", "band_elim_left", ["bool"]], ["mod", "theorem", "band_elim_right", ["bool"]], ["mod", "theorem", "band_eq_ff", ["bool"]], ["mod", "theorem", "band_eq_tt", ["bool"]], ["mod", "theorem", "band_ff", ["bool"]], ["mod", "theorem", "band_intro", ["bool"]], ["mod", "theorem", "band_left_comm", ["bool"]], ["mod", "theorem", "band_self", ["bool"]], ["mod", "theorem", "band_tt", ["bool"]], ["mod", "theorem", "bnot_bnot", ["bool"]], ["mod", "theorem", "bnot_false", ["bool"]], ["mod", "theorem", "bnot_true", ["bool"]], ["mod", "theorem", "bor_assoc", ["bool"]], ["mod", "theorem", "bor_comm", ["bool"]], ["mod", "theorem", "bor_eq_ff", ["bool"]], ["mod", "theorem", "bor_eq_tt", ["bool"]], ["mod", "theorem", "bor_ff", ["bool"]], ["mod", "theorem", "bor_inl", ["bool"]], ["mod", "theorem", "bor_inr", ["bool"]], ["mod", "theorem", "bor_left_comm", ["bool"]], ["mod", "theorem", "bor_tt", ["bool"]], ["mod", "def", "bxor", ["bool"]], ["mod", "theorem", "bxor_assoc", ["bool"]], ["mod", "theorem", "bxor_comm", ["bool"]], ["mod", "theorem", "bxor_ff", ["bool"]], ["mod", "theorem", "bxor_left_comm", ["bool"]], ["mod", "theorem", "bxor_self", ["bool"]], ["mod", "theorem", "bxor_tt", ["bool"]], ["mod", "theorem", "coe_tt", ["bool"]], ["mod", "theorem", "cond_ff", ["bool"]], ["mod", "theorem", "cond_tt", ["bool"]], ["mod", "theorem", "dichotomy", ["bool"]], ["mod", "theorem", "eq_ff_of_bnot_eq_tt", ["bool"]], ["mod", "theorem", "eq_ff_of_ne_tt", ["bool"]], ["mod", "theorem", "eq_tt_of_bnot_eq_ff", ["bool"]], ["mod", "theorem", "eq_tt_of_ne_ff", ["bool"]], ["mod", "theorem", "ff_band", ["bool"]], ["mod", "theorem", "ff_bor", ["bool"]], ["mod", "theorem", "ff_bxor", ["bool"]], ["mod", "theorem", "ff_bxor_ff", ["bool"]], ["mod", "theorem", "ff_bxor_tt", ["bool"]], ["mod", "theorem", "or_of_bor_eq", ["bool"]], ["mod", "theorem", "tt_band", ["bool"]], ["mod", "theorem", "tt_bor", ["bool"]], ["mod", "theorem", "tt_bxor", ["bool"]], ["mod", "theorem", "tt_bxor_ff", ["bool"]], ["mod", "theorem", "tt_bxor_tt", ["bool"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "assoc", ["list", "append"]], ["mod", "theorem", "concat_append", ["list"]], ["mod", "theorem", "concat_ne_nil", ["list"]], ["mod", "theorem", "cons_ne_nil", ["list"]], ["mod", "theorem", "count_append", ["list"]], ["mod", "theorem", "count_concat", ["list"]], ["mod", "theorem", "count_cons_of_ne", ["list"]], ["mod", "theorem", "count_cons_self", ["list"]], ["mod", "theorem", "count_eq_zero_of_not_mem", ["list"]], ["mod", "theorem", "count_nil", ["list"]], ["mod", "theorem", "head_cons", ["list"]], ["mod", "theorem", "index_of_cons_of_eq", ["list"]], ["mod", "theorem", "index_of_cons_of_ne", ["list"]], ["mod", "theorem", "index_of_nil", ["list"]], ["mod", "theorem", "index_of_of_not_mem", ["list"]], ["mod", "theorem", "ith_succ", ["list"]], ["mod", "theorem", "ith_zero", ["list"]], ["mod", "theorem", "last_cons_cons", ["list"]], ["mod", "theorem", "last_singleton", ["list"]], ["mod", "theorem", "tail_cons", ["list"]], ["mod", "theorem", "tail_nil", ["list"]], ["mod", "theorem", "taken_nil", ["list"]], ["mod", "theorem", "taken_zero", ["list"]]]}, {"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": [["mod", "theorem", "all_cons", ["list"]], ["mod", "theorem", "all_nil", ["list"]], ["mod", "theorem", "any_cons", ["list"]], ["mod", "theorem", "any_nil", ["list"]], ["del", "def", "decidable_exists_mem", ["list"]], ["del", "def", "decidable_forall_mem", ["list"]], ["mod", "theorem", "exists_mem_cons_iff", ["list"]], ["mod", "theorem", "foldl_append", ["list"]], ["mod", "theorem", "foldl_cons", ["list"]], ["mod", "theorem", "foldl_nil", ["list"]], ["mod", "theorem", "foldr_append", ["list"]], ["mod", "theorem", "foldr_cons", ["list"]], ["mod", "theorem", "foldr_nil", ["list"]], ["mod", "theorem", "forall_mem_cons_iff", ["list"]], ["mod", "theorem", "length_map_accumr", ["list"]], ["mod", "theorem", "length_map_accumr₂", ["list"]], ["mod", "theorem", "length_replicate", ["list"]], ["mod", "theorem", "unzip_cons", ["list"]], ["mod", "theorem", "unzip_nil", ["list"]], ["mod", "theorem", "zip_cons_cons", ["list"]], ["mod", "theorem", "zip_nil_left", ["list"]], ["mod", "theorem", "zip_nil_right", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["mod", "theorem", "perm_app_comm", ["list", "perm"]], ["mod", "theorem", "perm_cons_app_simp", ["list", "perm"]], ["mod", "theorem", "perm_induction_on", ["list", "perm"]], ["mod", "theorem", "perm_map", ["list", "perm"]], ["mod", "theorem", "perm_rev_simp", ["list", "perm"]]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["mod", "theorem", "erase_cons_head", ["list"]], ["mod", "theorem", "erase_cons_tail", ["list"]], ["mod", "theorem", "erase_nil", ["list"]], ["mod", "theorem", "erase_of_not_mem", ["list"]], ["mod", "theorem", "insert_nil", ["list"]], ["mod", "theorem", "insert_of_mem", ["list"]], ["mod", "theorem", "insert_of_not_mem", ["list"]], ["mod", "theorem", "inter_cons_of_mem", ["list"]], ["mod", "theorem", "inter_cons_of_not_mem", ["list"]], ["mod", "theorem", "inter_nil", ["list"]], ["mod", "theorem", "length_erase_of_mem", ["list"]], ["mod", "theorem", "length_insert_of_mem", ["list"]], ["mod", "theorem", "length_insert_of_not_mem", ["list"]], ["mod", "theorem", "length_upto", ["list"]], ["mod", "theorem", "mem_erase_dup_iff", ["list"]], ["mod", "theorem", "mem_insert_iff", ["list"]], ["mod", "theorem", "mem_insert_of_mem", ["list"]], ["mod", "theorem", "mem_insert_self", ["list"]], ["mod", "theorem", "mem_inter_iff", ["list"]], ["mod", "theorem", "mem_union_iff", ["list"]], ["mod", "theorem", "union_cons", ["list"]], ["mod", "theorem", "union_nil", ["list"]], ["mod", "theorem", "upto_nil", ["list"]], ["mod", "theorem", "upto_succ", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["mod", "theorem", "succ_add_eq_succ_add", ["nat"]]]}, {"oldPath": "data/nat/sub.lean", "newPath": "data/nat/sub.lean", "changes": [["mod", "theorem", "dist_comm", ["nat"]], ["mod", "theorem", "dist_self", ["nat"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["del", "def", "decidable_nonneg", ["rat"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "insert_eq_of_mem", ["set"]], ["mod", "theorem", "mem_insert_iff", ["set"]], ["mod", "theorem", "mem_sep_eq", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["mod", "theorem", "finite_insert", ["set"]], ["mod", "theorem", "finite_singleton", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["mod", "def", "Inter", ["set"]], ["mod", "def", "Union", ["set"]], ["mod", "theorem", "bInter_empty", ["set"]], ["mod", "theorem", "bInter_insert", ["set"]], ["mod", "theorem", "bInter_singleton", ["set"]], ["mod", "theorem", "bInter_univ", ["set"]], ["mod", "theorem", "bUnion_empty", ["set"]], ["mod", "theorem", "bUnion_insert", ["set"]], ["mod", "theorem", "bUnion_singleton", ["set"]], ["mod", "theorem", "bUnion_univ", ["set"]], ["mod", "theorem", "insert_sdiff_singleton", ["set"]], ["mod", "theorem", "mem_Inter_eq", ["set"]], ["mod", "theorem", "mem_Union_eq", ["set"]], ["mod", "theorem", "mem_sInter_eq", ["set"]], ["mod", "theorem", "mem_sUnion_eq", ["set"]], ["mod", "def", "sInter", ["set"]], ["mod", "theorem", "sInter_empty", ["set"]], ["mod", "theorem", "sInter_image", ["set"]], ["mod", "theorem", "sInter_insert", ["set"]], ["mod", "theorem", "sInter_singleton", ["set"]], ["mod", "theorem", "sUnion_empty", ["set"]], ["mod", "theorem", "sUnion_image", ["set"]], ["mod", "theorem", "sUnion_insert", ["set"]], ["mod", "theorem", "sUnion_singleton", ["set"]], ["mod", "theorem", "sdiff_singleton_eq_same", ["set"]], ["mod", "theorem", "union_same_compl", ["set"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["mod", "theorem", "exists", ["prod"]], ["mod", "theorem", "forall", ["prod"]], ["mod", "theorem", "inj_iff", ["prod", "mk"]], ["mod", "theorem", "set_of_subset_set_of", []]]}, {"oldPath": "tactic/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": [["mod", "theorem", "mem_image", []]]}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": [["mod", "theorem", "mem_set_of", []]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["mod", "theorem", "false_neq_true", []], ["mod", "theorem", "open_singleton_true", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["mod", "theorem", "closed_closure", []], ["mod", "theorem", "closed_compl_iff_open", []], ["mod", "theorem", "closed_empty", []], ["mod", "theorem", "closed_univ", []], ["mod", "theorem", "closure_closure", []], ["mod", "theorem", "closure_compl_eq", []], ["mod", "theorem", "closure_empty", []], ["mod", "theorem", "closure_union", []], ["mod", "theorem", "closure_univ", []], ["mod", "theorem", "interior_compl_eq", []], ["mod", "theorem", "interior_empty", []], ["mod", "theorem", "interior_inter", []], ["mod", "theorem", "interior_interior", []], ["mod", "theorem", "interior_univ", []], ["mod", "theorem", "nhds_neq_bot", []], ["mod", "theorem", "open_compl_iff_closed", []], ["mod", "theorem", "open_empty", []], ["mod", "theorem", "open_interior", []], ["mod", "theorem", "open_univ", []]]}]}, {"timestamp": 1500835191, "sha": "a4b157b9", "message": "chore(data/nat): remove addl", "changes": [{"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["del", "theorem", "add_eq_addl", ["nat"]], ["del", "def", "addl", ["nat"]], ["del", "theorem", "addl_succ_left", ["nat"]], ["del", "theorem", "addl_succ_right", ["nat"]], ["del", "theorem", "addl_zero_left", ["nat"]], ["del", "theorem", "addl_zero_right", ["nat"]], ["del", "theorem", "zero_has_zero", ["nat"]]]}]}, {"timestamp": 1500834556, "sha": "5816424b", "message": "refactor(*): use 'lemma' iff statement is private", "changes": [{"oldPath": "algebra/lattice/basic.lean", "newPath": "algebra/lattice/basic.lean", "changes": [["mod", "theorem", "bot_inf_eq", ["lattice"]], ["mod", "theorem", "bot_le", ["lattice"]], ["mod", "theorem", "bot_sup_eq", ["lattice"]], ["mod", "theorem", "bot_unique", ["lattice"]], ["mod", "theorem", "eq_bot_iff", ["lattice"]], ["mod", "theorem", "eq_top_iff", ["lattice"]], ["mod", "theorem", "inf_assoc", ["lattice"]], ["mod", "theorem", "inf_bot_eq", ["lattice"]], ["mod", "theorem", "inf_comm", ["lattice"]], ["mod", "theorem", "inf_eq_top_iff", ["lattice"]], ["mod", "theorem", "inf_idem", ["lattice"]], ["mod", "theorem", "inf_le_inf", ["lattice"]], ["mod", "theorem", "inf_le_left'", ["lattice"]], ["mod", "theorem", "inf_le_left", ["lattice"]], ["mod", "theorem", "inf_le_left_of_le", ["lattice"]], ["mod", "theorem", "inf_le_right'", ["lattice"]], ["mod", "theorem", "inf_le_right", ["lattice"]], ["mod", "theorem", "inf_le_right_of_le", ["lattice"]], ["mod", "theorem", "inf_of_le_left", ["lattice"]], ["mod", "theorem", "inf_of_le_right", ["lattice"]], ["mod", "theorem", "inf_sup_self", ["lattice"]], ["mod", "theorem", "inf_top_eq", ["lattice"]], ["mod", "theorem", "le_bot_iff", ["lattice"]], ["mod", "theorem", "le_inf", ["lattice"]], ["mod", "theorem", "le_inf_iff", ["lattice"]], ["mod", "theorem", "le_inf_sup", ["lattice"]], ["mod", "theorem", "le_of_inf_eq", ["lattice"]], ["mod", "theorem", "le_of_sup_eq", ["lattice"]], ["mod", "theorem", "le_sup_left'", ["lattice"]], ["mod", "theorem", "le_sup_left", ["lattice"]], ["mod", "theorem", "le_sup_left_of_le", ["lattice"]], ["mod", "theorem", "le_sup_right'", ["lattice"]], ["mod", "theorem", "le_sup_right", ["lattice"]], ["mod", "theorem", "le_sup_right_of_le", ["lattice"]], ["mod", "theorem", "le_top", ["lattice"]], ["mod", "theorem", "neq_bot_of_le_neq_bot", ["lattice"]], ["mod", "theorem", "sup_assoc", ["lattice"]], ["mod", "theorem", "sup_bot_eq", ["lattice"]], ["mod", "theorem", "sup_comm", ["lattice"]], ["mod", "theorem", "sup_eq_bot_iff", ["lattice"]], ["mod", "theorem", "sup_idem", ["lattice"]], ["mod", "theorem", "sup_inf_le", ["lattice"]], ["mod", "theorem", "sup_inf_self", ["lattice"]], ["mod", "theorem", "sup_le", ["lattice"]], ["mod", "theorem", "sup_le_iff", ["lattice"]], ["mod", "theorem", "sup_le_sup", ["lattice"]], ["mod", "theorem", "sup_of_le_left", ["lattice"]], ["mod", "theorem", "sup_of_le_right", ["lattice"]], ["mod", "theorem", "sup_top_eq", ["lattice"]], ["mod", "theorem", "top_inf_eq", ["lattice"]], ["mod", "theorem", "top_le_iff", ["lattice"]], ["mod", "theorem", "top_sup_eq", ["lattice"]], ["mod", "theorem", "top_unique", ["lattice"]], ["mod", "theorem", "le_antisymm'", []]]}, {"oldPath": "algebra/lattice/boolean_algebra.lean", "newPath": "algebra/lattice/boolean_algebra.lean", "changes": [["mod", "theorem", "inf_neg_eq_bot", ["lattice"]], ["mod", "theorem", "inf_sup_left", ["lattice"]], ["mod", "theorem", "inf_sup_right", ["lattice"]], ["mod", "theorem", "le_neg_of_le_neg", ["lattice"]], ["mod", "theorem", "le_sup_inf", ["lattice"]], ["mod", "theorem", "neg_bot", ["lattice"]], ["mod", "theorem", "neg_eq_neg_iff", ["lattice"]], ["mod", "theorem", "neg_eq_neg_of_eq", ["lattice"]], ["mod", "theorem", "neg_inf", ["lattice"]], ["mod", "theorem", "neg_inf_eq_bot", ["lattice"]], ["mod", "theorem", "neg_le_iff_neg_le", ["lattice"]], ["mod", "theorem", "neg_le_neg", ["lattice"]], ["mod", "theorem", "neg_le_neg_iff_le", ["lattice"]], ["mod", "theorem", "neg_le_of_neg_le", ["lattice"]], ["mod", "theorem", "neg_neg", ["lattice"]], ["mod", "theorem", "neg_sup", ["lattice"]], ["mod", "theorem", "neg_sup_eq_top", ["lattice"]], ["mod", "theorem", "neg_top", ["lattice"]], ["mod", "theorem", "neg_unique", ["lattice"]], ["mod", "theorem", "sub_eq", ["lattice"]], ["mod", "theorem", "sub_eq_left", ["lattice"]], ["mod", "theorem", "sup_inf_left", ["lattice"]], ["mod", "theorem", "sup_inf_right", ["lattice"]], ["mod", "theorem", "sup_neg_eq_top", ["lattice"]], ["mod", "theorem", "sup_sub_same", ["lattice"]]]}, {"oldPath": "algebra/lattice/bounded_lattice.lean", "newPath": "algebra/lattice/bounded_lattice.lean", "changes": [["mod", "theorem", "monotone_and", ["lattice"]], ["mod", "theorem", "monotone_or", ["lattice"]]]}, {"oldPath": "algebra/lattice/complete_boolean_algebra.lean", "newPath": "algebra/lattice/complete_boolean_algebra.lean", "changes": [["mod", "theorem", "inf_Sup_eq", ["lattice"]], ["mod", "theorem", "neg_Inf", ["lattice"]], ["mod", "theorem", "neg_Sup", ["lattice"]], ["mod", "theorem", "neg_infi", ["lattice"]], ["mod", "theorem", "neg_supr", ["lattice"]], ["mod", "theorem", "sup_Inf_eq", ["lattice"]]]}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": [["mod", "theorem", "Inf_empty", ["lattice"]], ["mod", "theorem", "Inf_eq_infi", ["lattice"]], ["mod", "theorem", "Inf_image", ["lattice"]], ["mod", "theorem", "Inf_insert", ["lattice"]], ["mod", "theorem", "Inf_le", ["lattice"]], ["mod", "theorem", "Inf_le_Inf", ["lattice"]], ["mod", "theorem", "Inf_le_Sup", ["lattice"]], ["mod", "theorem", "Inf_le_iff", ["lattice"]], ["mod", "theorem", "Inf_le_of_le", ["lattice"]], ["mod", "theorem", "Inf_singleton", ["lattice"]], ["mod", "theorem", "Inf_union", ["lattice"]], ["mod", "theorem", "Inf_univ", ["lattice"]], ["mod", "theorem", "Sup_empty", ["lattice"]], ["mod", "theorem", "Sup_eq_supr", ["lattice"]], ["mod", "theorem", "Sup_image", ["lattice"]], ["mod", "theorem", "Sup_insert", ["lattice"]], ["mod", "theorem", "Sup_inter_le", ["lattice"]], ["mod", "theorem", "Sup_le", ["lattice"]], ["mod", "theorem", "Sup_le_Sup", ["lattice"]], ["mod", "theorem", "Sup_singleton", ["lattice"]], ["mod", "theorem", "Sup_union", ["lattice"]], ["mod", "theorem", "Sup_univ", ["lattice"]], ["mod", "theorem", "foo'", ["lattice"]], ["mod", "theorem", "foo", ["lattice"]], ["mod", "theorem", "infi_and", ["lattice"]], ["mod", "theorem", "infi_comm", ["lattice"]], ["mod", "theorem", "infi_congr_Prop", ["lattice"]], ["mod", "theorem", "infi_const", ["lattice"]], ["mod", "theorem", "infi_empty", ["lattice"]], ["mod", "theorem", "infi_emptyset", ["lattice"]], ["mod", "theorem", "infi_exists", ["lattice"]], ["mod", "theorem", "infi_false", ["lattice"]], ["mod", "theorem", "infi_inf_eq", ["lattice"]], ["mod", "theorem", "infi_infi_eq_left", ["lattice"]], ["mod", "theorem", "infi_infi_eq_right", ["lattice"]], ["mod", "theorem", "infi_insert", ["lattice"]], ["mod", "theorem", "infi_le'", ["lattice"]], ["mod", "theorem", "infi_le", ["lattice"]], ["mod", "theorem", "infi_le_infi2", ["lattice"]], ["mod", "theorem", "infi_le_infi", ["lattice"]], ["mod", "theorem", "infi_le_infi_const", ["lattice"]], ["mod", "theorem", "infi_le_of_le", ["lattice"]], ["mod", "theorem", "infi_or", ["lattice"]], ["mod", "theorem", "infi_prod", ["lattice"]], ["mod", "theorem", "infi_sigma", ["lattice"]], ["mod", "theorem", "infi_singleton", ["lattice"]], ["mod", "theorem", "infi_subtype", ["lattice"]], ["mod", "theorem", "infi_sum", ["lattice"]], ["mod", "theorem", "infi_true", ["lattice"]], ["mod", "theorem", "infi_union", ["lattice"]], ["mod", "theorem", "infi_unit", ["lattice"]], ["mod", "theorem", "infi_univ", ["lattice"]], ["mod", "theorem", "le_Inf", ["lattice"]], ["mod", "theorem", "le_Inf_inter", ["lattice"]], ["mod", "theorem", "le_Sup", ["lattice"]], ["mod", "theorem", "le_Sup_iff", ["lattice"]], ["mod", "theorem", "le_Sup_of_le", ["lattice"]], ["mod", "theorem", "le_infi", ["lattice"]], ["mod", "theorem", "le_infi_iff", ["lattice"]], ["mod", "theorem", "le_supr'", ["lattice"]], ["mod", "theorem", "le_supr", ["lattice"]], ["mod", "theorem", "le_supr_of_le", ["lattice"]], ["mod", "theorem", "monotone_Inf_of_monotone", ["lattice"]], ["mod", "theorem", "monotone_Sup_of_monotone", ["lattice"]], ["mod", "theorem", "supr_and", ["lattice"]], ["mod", "theorem", "supr_comm", ["lattice"]], ["mod", "theorem", "supr_congr_Prop", ["lattice"]], ["mod", "theorem", "supr_const", ["lattice"]], ["mod", "theorem", "supr_empty", ["lattice"]], ["mod", "theorem", "supr_emptyset", ["lattice"]], ["mod", "theorem", "supr_exists", ["lattice"]], ["mod", "theorem", "supr_false", ["lattice"]], ["mod", "theorem", "supr_insert", ["lattice"]], ["mod", "theorem", "supr_le", ["lattice"]], ["mod", "theorem", "supr_le_iff", ["lattice"]], ["mod", "theorem", "supr_le_supr2", ["lattice"]], ["mod", "theorem", "supr_le_supr", ["lattice"]], ["mod", "theorem", "supr_le_supr_const", ["lattice"]], ["mod", "theorem", "supr_or", ["lattice"]], ["mod", "theorem", "supr_prod", ["lattice"]], ["mod", "theorem", "supr_sigma", ["lattice"]], ["mod", "theorem", "supr_singleton", ["lattice"]], ["mod", "theorem", "supr_subtype", ["lattice"]], ["mod", "theorem", "supr_sum", ["lattice"]], ["mod", "theorem", "supr_sup_eq", ["lattice"]], ["mod", "theorem", "supr_supr_eq_left", ["lattice"]], ["mod", "theorem", "supr_supr_eq_right", ["lattice"]], ["mod", "theorem", "supr_true", ["lattice"]], ["mod", "theorem", "supr_union", ["lattice"]], ["mod", "theorem", "supr_unit", ["lattice"]], ["mod", "theorem", "supr_univ", ["lattice"]]]}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "Union_subset_Union2", []], ["mod", "theorem", "Union_subset_Union", []], ["mod", "theorem", "Union_subset_Union_const", []], ["mod", "theorem", "compl_image_set_of", []], ["mod", "theorem", "diff_empty", []], ["mod", "theorem", "diff_neq_empty", []], ["mod", "theorem", "directed_of_chain", []], ["mod", "theorem", "directed_on_Union", []], ["mod", "theorem", "eq_of_sup_eq_inf_eq", []], ["mod", "theorem", "Inf_sets_eq_finite", ["filter"]], ["mod", "theorem", "Inter_mem_sets", ["filter"]], ["mod", "theorem", "bind_mono2", ["filter"]], ["mod", "theorem", "bind_mono", ["filter"]], ["mod", "theorem", "bind_sup", ["filter"]], ["mod", "theorem", "binfi_sup_eq", ["filter"]], ["mod", "theorem", "empty_in_sets_eq_bot", ["filter"]], ["mod", "theorem", "exists_sets_subset_iff", ["filter"]], ["mod", "theorem", "exists_ultrafilter", ["filter"]], ["mod", "theorem", "filter_eq", ["filter"]], ["mod", "theorem", "filter_eq_bot_of_not_nonempty", ["filter"]], ["mod", "theorem", "fmap_principal", ["filter"]], ["mod", "theorem", "forall_sets_neq_empty_iff_neq_bot", ["filter"]], ["mod", "theorem", "image_mem_map", ["filter"]], ["mod", "theorem", "inf_principal", ["filter"]], ["mod", "theorem", "infi_neq_bot_iff_of_directed", ["filter"]], ["mod", "theorem", "infi_neq_bot_of_directed", ["filter"]], ["mod", "theorem", "infi_sets_eq'", ["filter"]], ["mod", "theorem", "infi_sets_eq", ["filter"]], ["mod", "theorem", "infi_sets_induct", ["filter"]], ["mod", "theorem", "infi_sup_eq", ["filter"]], ["mod", "theorem", "inhabited_of_mem_sets", ["filter"]], ["mod", "theorem", "inter_mem_sets", ["filter"]], ["mod", "theorem", "join_principal_eq_Sup", ["filter"]], ["mod", "theorem", "le_lift'", ["filter"]], ["mod", "theorem", "le_map_vmap", ["filter"]], ["mod", "theorem", "le_of_ultrafilter", ["filter"]], ["mod", "theorem", "le_principal_iff", ["filter"]], ["mod", "theorem", "le_vmap_iff_map_le", ["filter"]], ["mod", "theorem", "le_vmap_map", ["filter"]], ["mod", "theorem", "lift'_cong", ["filter"]], ["mod", "theorem", "lift'_id", ["filter"]], ["mod", "theorem", "lift'_inf_principal_eq", ["filter"]], ["mod", "theorem", "lift'_infi", ["filter"]], ["mod", "theorem", "lift'_lift'_assoc", ["filter"]], ["mod", "theorem", "lift'_lift_assoc", ["filter"]], ["mod", "theorem", "lift'_mono'", ["filter"]], ["mod", "theorem", "lift'_mono", ["filter"]], ["mod", "theorem", "lift'_neq_bot_iff", ["filter"]], ["mod", "theorem", "lift'_principal", ["filter"]], ["mod", "theorem", "lift_assoc", ["filter"]], ["mod", "theorem", "lift_comm", ["filter"]], ["mod", "theorem", "lift_infi'", ["filter"]], ["mod", "theorem", "lift_infi", ["filter"]], ["mod", "theorem", "lift_lift'_assoc", ["filter"]], ["mod", "theorem", "lift_lift'_same_eq_lift'", ["filter"]], ["mod", "theorem", "lift_lift'_same_le_lift'", ["filter"]], ["mod", "theorem", "lift_lift_same_eq_lift", ["filter"]], ["mod", "theorem", "lift_lift_same_le_lift", ["filter"]], ["mod", "theorem", "lift_mono'", ["filter"]], ["mod", "theorem", "lift_mono", ["filter"]], ["mod", "theorem", "lift_neq_bot_iff", ["filter"]], ["mod", "theorem", "lift_principal", ["filter"]], ["mod", "theorem", "lift_sets_eq", ["filter"]], ["mod", "theorem", "map_binfi_eq", ["filter"]], ["mod", "theorem", "map_bot", ["filter"]], ["mod", "theorem", "map_compose", ["filter"]], ["mod", "theorem", "map_eq_bot_iff", ["filter"]], ["mod", "theorem", "map_eq_vmap_of_inverse", ["filter"]], ["mod", "theorem", "map_id", ["filter"]], ["mod", "theorem", "map_infi_eq", ["filter"]], ["mod", "theorem", "map_infi_le", ["filter"]], ["mod", "theorem", "map_lift'_eq2", ["filter"]], ["mod", "theorem", "map_lift'_eq", ["filter"]], ["mod", "theorem", "map_lift_eq2", ["filter"]], ["mod", "theorem", "map_lift_eq", ["filter"]], ["mod", "theorem", "map_mono", ["filter"]], ["mod", "theorem", "map_principal", ["filter"]], ["mod", "theorem", "map_sup", ["filter"]], ["mod", "theorem", "map_swap_vmap_swap_eq", ["filter"]], ["mod", "theorem", "map_vmap_le", ["filter"]], ["mod", "theorem", "mem_bind_sets", ["filter"]], ["mod", "theorem", "mem_bot_sets", ["filter"]], ["mod", "theorem", "mem_inf_sets", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_left", ["filter"]], ["mod", "theorem", "mem_inf_sets_of_right", ["filter"]], ["mod", "theorem", "mem_infi_sets", ["filter"]], ["mod", "theorem", "mem_join_sets", ["filter"]], ["mod", "theorem", "mem_lift'", ["filter"]], ["mod", "theorem", "mem_lift'_iff", ["filter"]], ["mod", "theorem", "mem_lift", ["filter"]], ["mod", "theorem", "mem_lift_iff", ["filter"]], ["mod", "theorem", "mem_map", ["filter"]], ["mod", "theorem", "mem_of_finite_Union_ultrafilter", ["filter"]], ["mod", "theorem", "mem_of_finite_sUnion_ultrafilter", ["filter"]], ["mod", "theorem", "mem_or_compl_mem_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["mod", "theorem", "mem_prod_iff", ["filter"]], ["mod", "theorem", "mem_prod_same_iff", ["filter"]], ["mod", "theorem", "mem_pure", ["filter"]], ["mod", "theorem", "mem_return_sets", ["filter"]], ["mod", "theorem", "mem_sets_of_neq_bot", ["filter"]], ["mod", "theorem", "mem_sup_sets", ["filter"]], ["mod", "theorem", "mem_top_sets_iff", ["filter"]], ["mod", "theorem", "mem_vmap_of_mem", ["filter"]], ["mod", "theorem", "monotone_lift'", ["filter"]], ["mod", "theorem", "monotone_lift", ["filter"]], ["mod", "theorem", "monotone_map", ["filter"]], ["mod", "theorem", "monotone_mem_sets", ["filter"]], ["mod", "theorem", "monotone_principal", ["filter"]], ["mod", "theorem", "monotone_vmap", ["filter"]], ["mod", "theorem", "principal_bind", ["filter"]], ["mod", "theorem", "principal_empty", ["filter"]], ["mod", "theorem", "principal_eq_bot_iff", ["filter"]], ["mod", "theorem", "principal_eq_iff_eq", ["filter"]], ["mod", "theorem", "principal_le_lift'", ["filter"]], ["mod", "theorem", "principal_mono", ["filter"]], ["mod", "theorem", "principal_univ", ["filter"]], ["mod", "theorem", "prod_comm", ["filter"]], ["mod", "theorem", "prod_inf_prod", ["filter"]], ["mod", "theorem", "prod_lift'_lift'", ["filter"]], ["mod", "theorem", "prod_lift_lift", ["filter"]], ["mod", "theorem", "prod_map_map_eq", ["filter"]], ["mod", "theorem", "prod_mem_prod", ["filter"]], ["mod", "theorem", "prod_mono", ["filter"]], ["mod", "theorem", "prod_neq_bot", ["filter"]], ["mod", "theorem", "prod_principal_principal", ["filter"]], ["mod", "theorem", "prod_same_eq", ["filter"]], ["mod", "theorem", "prod_vmap_vmap_eq", ["filter"]], ["mod", "theorem", "return_neq_bot", ["filter"]], ["mod", "theorem", "seq_mono", ["filter"]], ["mod", "theorem", "sup_join", ["filter"]], ["mod", "theorem", "sup_principal", ["filter"]], ["mod", "theorem", "supr_join", ["filter"]], ["mod", "theorem", "supr_map", ["filter"]], ["mod", "theorem", "supr_principal", ["filter"]], ["mod", "theorem", "supr_sets_eq", ["filter"]], ["mod", "theorem", "ultrafilter_map", ["filter"]], ["mod", "theorem", "ultrafilter_of_le", ["filter"]], ["mod", "theorem", "ultrafilter_of_spec", ["filter"]], ["mod", "theorem", "ultrafilter_of_split", ["filter"]], ["mod", "theorem", "ultrafilter_of_ultrafilter", ["filter"]], ["mod", "theorem", "ultrafilter_pure", ["filter"]], ["mod", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["mod", "theorem", "ultrafilter_unique", ["filter"]], ["mod", "theorem", "univ_mem_sets'", ["filter"]], ["mod", "theorem", "univ_mem_sets", ["filter"]], ["mod", "theorem", "vimage_mem_vmap", ["filter"]], ["mod", "theorem", "vmap_eq_lift'", ["filter"]], ["mod", "theorem", "vmap_lift'_eq2", ["filter"]], ["mod", "theorem", "vmap_lift'_eq", ["filter"]], ["mod", "theorem", "vmap_lift_eq2", ["filter"]], ["mod", "theorem", "vmap_lift_eq", ["filter"]], ["mod", "theorem", "vmap_map", ["filter"]], ["mod", "theorem", "vmap_mono", ["filter"]], ["mod", "theorem", "vmap_neq_bot", ["filter"]], ["mod", "theorem", "vmap_neq_bot_of_surj", ["filter"]], ["mod", "theorem", "vmap_principal", ["filter"]], ["mod", "theorem", "vmap_vmap_comp", ["filter"]], ["mod", "theorem", "implies_implies_true_iff", []], ["mod", "theorem", "inf_eq_bot_iff_le_compl", []], ["mod", "theorem", "Inf_eq_finite_sets", ["lattice"]], ["mod", "theorem", "Sup_le_iff", ["lattice"]], ["mod", "theorem", "neg_subset_neg_iff_subset", []], ["mod", "theorem", "not_not_mem_iff", []], ["mod", "theorem", "fst_swap", ["prod"]], ["mod", "theorem", "eta", ["prod", "mk"]], ["mod", "theorem", "snd_swap", ["prod"]], ["mod", "theorem", "swap_prod_mk", ["prod"]], ["mod", "theorem", "swap_swap", ["prod"]], ["mod", "theorem", "swap_swap_eq", ["prod"]], ["mod", "theorem", "pure_seq_eq_map", []], ["mod", "theorem", "sUnion_eq_Union", []], ["mod", "theorem", "sUnion_mono", []], ["mod", "theorem", "diff_right_antimono", ["set"]], ["mod", "theorem", "fmap_eq_image", ["set"]], ["mod", "theorem", "image_eq_vimage_of_inverse", ["set"]], ["mod", "theorem", "image_swap_eq_vimage_swap", ["set"]], ["mod", "theorem", "image_swap_prod", ["set"]], ["mod", "theorem", "mem_image_iff_of_inverse", ["set"]], ["mod", "theorem", "mem_prod_eq", ["set"]], ["mod", "theorem", "mem_seq_iff", ["set"]], ["mod", "theorem", "monotone_inter", ["set"]], ["mod", "theorem", "monotone_prod", ["set"]], ["mod", "theorem", "monotone_set_of", ["set"]], ["mod", "theorem", "prod_image_image_eq", ["set"]], ["mod", "theorem", "prod_inter_prod", ["set"]], ["mod", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["mod", "theorem", "prod_mono", ["set"]], ["mod", "theorem", "prod_neq_empty_iff", ["set"]], ["mod", "theorem", "prod_singleton_singleton", ["set"]], ["mod", "theorem", "prod_vimage_eq", ["set"]], ["mod", "theorem", "set_of_mem_eq", ["set"]], ["mod", "theorem", "vimage_set_of_eq", ["set"]], ["mod", "theorem", "singleton_neq_emptyset", []]]}, {"oldPath": "algebra/lattice/fixed_points.lean", "newPath": "algebra/lattice/fixed_points.lean", "changes": [["mod", "theorem", "ge_of_eq", []], ["mod", "theorem", "gfp_comp", ["lattice"]], ["mod", "theorem", "gfp_eq", ["lattice"]], ["mod", "theorem", "gfp_gfp", ["lattice"]], ["mod", "theorem", "gfp_induct", ["lattice"]], ["mod", "theorem", "gfp_le", ["lattice"]], ["mod", "theorem", "le_gfp", ["lattice"]], ["mod", "theorem", "le_lfp", ["lattice"]], ["mod", "theorem", "lfp_comp", ["lattice"]], ["mod", "theorem", "lfp_eq", ["lattice"]], ["mod", "theorem", "lfp_induct", ["lattice"]], ["mod", "theorem", "lfp_le", ["lattice"]], ["mod", "theorem", "lfp_lfp", ["lattice"]], ["mod", "theorem", "monotone_gfp", ["lattice"]], ["mod", "theorem", "monotone_lfp", ["lattice"]]]}, {"oldPath": "algebra/lattice/zorn.lean", "newPath": "algebra/lattice/zorn.lean", "changes": [["mod", "theorem", "chain_chain_closure", ["zorn"]], ["mod", "theorem", "chain_closure_closure", ["zorn"]], ["mod", "theorem", "chain_closure_empty", ["zorn"]], ["mod", "theorem", "chain_closure_succ_fixpoint", ["zorn"]], ["mod", "theorem", "chain_closure_succ_fixpoint_iff", ["zorn"]], ["mod", "theorem", "chain_closure_total", ["zorn"]], ["mod", "theorem", "chain_insert", ["zorn"]], ["mod", "theorem", "chain_succ", ["zorn"]], ["mod", "theorem", "max_chain_spec", ["zorn"]], ["mod", "theorem", "succ_increasing", ["zorn"]], ["mod", "theorem", "succ_spec", ["zorn"]], ["mod", "theorem", "super_of_not_max", ["zorn"]], ["mod", "theorem", "zorn", ["zorn"]], ["mod", "theorem", "zorn_weak_order", ["zorn"]]]}, {"oldPath": "algebra/order.lean", "newPath": "algebra/order.lean", "changes": [["mod", "theorem", "comp_le_comp_left_of_monotone", []], ["mod", "theorem", "le_dual_eq_le", []], ["mod", "theorem", "monotone_app", []], ["mod", "theorem", "monotone_comp", []], ["mod", "theorem", "monotone_const", []], ["mod", "theorem", "monotone_id", []], ["mod", "theorem", "monotone_lam", []]]}, {"oldPath": "data/bitvec.lean", "newPath": "data/bitvec.lean", "changes": [["mod", "theorem", "bits_to_nat_to_list", ["bitvec"]], ["mod", "theorem", "of_nat_succ", ["bitvec"]]]}, {"oldPath": "data/bool.lean", "newPath": "data/bool.lean", "changes": [["mod", "theorem", "bxor_assoc", ["bool"]], ["mod", "theorem", "bxor_comm", ["bool"]], ["mod", "theorem", "bxor_ff", ["bool"]], ["mod", "theorem", "bxor_left_comm", ["bool"]], ["mod", "theorem", "bxor_self", ["bool"]], ["mod", "theorem", "bxor_tt", ["bool"]], ["mod", "theorem", "ff_bxor", ["bool"]], ["mod", "theorem", "ff_bxor_ff", ["bool"]], ["mod", "theorem", "ff_bxor_tt", ["bool"]], ["mod", "theorem", "tt_bxor", ["bool"]], ["mod", "theorem", "tt_bxor_ff", ["bool"]], ["mod", "theorem", "tt_bxor_tt", ["bool"]]]}, {"oldPath": "data/fin.lean", "newPath": "data/fin.lean", "changes": [["mod", "theorem", "eq_of_lt_succ_of_not_lt", []], ["mod", "theorem", "lt_succ_of_lt", []]]}, {"oldPath": "data/hash_map.lean", "newPath": "data/hash_map.lean", "changes": [["mod", "theorem", "foldl_eq_lem", ["bucket_array"]], ["del", "theorem", "append_of_modify_aux", ["hash_map"]], ["del", "theorem", "insert_lemma", ["hash_map"]], ["add", "theorem", "insert_theorem", ["hash_map"]], ["del", "theorem", "modify_aux1", ["hash_map", "valid"]], ["del", "theorem", "modify_aux2", ["hash_map", "valid"]], ["del", "theorem", "insert_lemma1", ["hash_map", "valid_aux"]]]}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": [["mod", "theorem", "neg_add_neg", ["int"]]]}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": [["mod", "theorem", "cons_inj", ["list"]], ["mod", "theorem", "cons_ne_nil", ["list"]], ["mod", "theorem", "count_append", ["list"]], ["mod", "theorem", "count_concat", ["list"]], ["mod", "theorem", "count_cons'", ["list"]], ["mod", "theorem", "count_cons", ["list"]], ["mod", "theorem", "count_cons_ge_count", ["list"]], ["mod", "theorem", "count_cons_of_ne", ["list"]], ["mod", "theorem", "count_cons_self", ["list"]], ["mod", "theorem", "count_eq_zero_of_not_mem", ["list"]], ["mod", "theorem", "count_nil", ["list"]], ["mod", "theorem", "count_pos_of_mem", ["list"]], ["mod", "theorem", "count_singleton", ["list"]], ["mod", "theorem", "head_eq_of_cons_eq", ["list"]], ["mod", "theorem", "index_of_le_length", ["list"]], ["mod", "theorem", "index_of_lt_length", ["list"]], ["mod", "theorem", "ith_succ", ["list"]], ["mod", "theorem", "ith_zero", ["list"]], ["mod", "theorem", "last_cons_cons", ["list"]], ["mod", "theorem", "last_singleton", ["list"]], ["mod", "theorem", "length_taken_le", ["list"]], ["mod", "theorem", "mem_iff_count_pos", ["list"]], ["mod", "theorem", "mem_of_count_pos", ["list"]], ["mod", "theorem", "not_mem_of_count_eq_zero", ["list"]], ["mod", "theorem", "not_mem_of_index_of_eq_length", ["list"]], ["mod", "theorem", "tail_eq_of_cons_eq", ["list"]], ["mod", "theorem", "taken_all", ["list"]], ["mod", "theorem", "taken_all_of_ge", ["list"]], ["mod", "theorem", "taken_cons", ["list"]], ["mod", "theorem", "taken_nil", ["list"]], ["mod", "theorem", "taken_zero", ["list"]]]}, {"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": [["mod", "theorem", "dmap_cons_of_neg", ["list"]], ["mod", "theorem", "dmap_cons_of_pos", ["list"]], ["mod", "theorem", "dmap_nil", ["list"]], ["mod", "theorem", "exists_of_mem_dmap", ["list"]], ["mod", "theorem", "map_dmap_of_inv_of_pos", ["list"]], ["mod", "theorem", "mem_dmap", ["list"]], ["mod", "theorem", "mem_of_dinj_of_mem_dmap", ["list"]], ["mod", "theorem", "not_mem_dmap_of_dinj_of_not_mem", ["list"]]]}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": [["mod", "theorem", "perm_insert_insert", ["list", "perm"]], ["mod", "theorem", "perm_of_qeq", ["list", "perm"]]]}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": [["mod", "theorem", "comm", ["list", "disjoint"]], ["mod", "theorem", "disjoint_append_of_disjoint_left", ["list"]], ["mod", "theorem", "disjoint_cons_of_not_mem_of_disjoint", ["list"]], ["mod", "theorem", "disjoint_left", ["list"]], ["mod", "theorem", "disjoint_nil_left", ["list"]], ["mod", "theorem", "disjoint_nil_right", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_left_left", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_left_right", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_right_left", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_append_right_right", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_cons_left", ["list"]], ["mod", "theorem", "disjoint_of_disjoint_cons_right", ["list"]], ["mod", "theorem", "disjoint_of_subset_left", ["list"]], ["mod", "theorem", "disjoint_of_subset_right", ["list"]], ["mod", "theorem", "disjoint_right", ["list"]], ["mod", "theorem", "dmap_nodup_of_dinj", ["list"]], ["mod", "theorem", "erase_append_left", ["list"]], ["mod", "theorem", "erase_append_right", ["list"]], ["mod", "theorem", "erase_cons", ["list"]], ["mod", "theorem", "erase_cons_head", ["list"]], ["mod", "theorem", "erase_cons_tail", ["list"]], ["mod", "theorem", "erase_nil", ["list"]], ["mod", "theorem", "erase_of_not_mem", ["list"]], ["mod", "theorem", "erase_sublist", ["list"]], ["mod", "theorem", "erase_subset", ["list"]], ["mod", "theorem", "length_erase_of_mem", ["list"]], ["mod", "theorem", "upto_step", ["list"]]]}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": [["mod", "theorem", "lt_succ_iff_le", ["nat"]], ["mod", "theorem", "succ_le_succ_iff", ["nat"]]]}, {"oldPath": "data/nat/basic.lean", "newPath": "data/nat/basic.lean", "changes": [["mod", "theorem", "addl_succ_left", ["nat"]], ["mod", "theorem", "addl_zero_left", ["nat"]], ["mod", "theorem", "one_succ_zero", ["nat"]], ["mod", "theorem", "zero_has_zero", ["nat"]]]}, {"oldPath": "data/nat/gcd.lean", "newPath": "data/nat/gcd.lean", "changes": [["mod", "theorem", "gcd_eq_one_of_coprime", ["nat"]]]}, {"oldPath": "data/nat/sub.lean", "newPath": "data/nat/sub.lean", "changes": [["mod", "theorem", "dist_pos_of_ne", ["nat"]], ["mod", "theorem", "dist_succ_succ", ["nat"]]]}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": [["mod", "theorem", "bitwise_to_nat", ["num"]], ["mod", "theorem", "land_to_nat", ["num"]], ["mod", "theorem", "ldiff_to_nat", ["num"]], ["mod", "theorem", "lor_to_nat", ["num"]], ["mod", "theorem", "lxor_to_nat", ["num"]], ["mod", "theorem", "shiftl_to_nat", ["num"]], ["mod", "theorem", "shiftr_to_nat", ["num"]], ["mod", "theorem", "test_bit_to_nat", ["num"]], ["del", "theorem", "cmp_dec_lemma", ["pos_num"]], ["add", "theorem", "cmp_dec_theorem", ["pos_num"]]]}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": [["mod", "theorem", "linear_order_cases_on_eq", []], ["mod", "theorem", "linear_order_cases_on_gt", []], ["mod", "theorem", "linear_order_cases_on_lt", []], ["mod", "theorem", "mul_nonneg_iff_right_nonneg_of_pos", []], ["mod", "theorem", "not_antimono", []]]}, {"oldPath": "data/seq/computation.lean", "newPath": "data/seq/computation.lean", "changes": [["mod", "theorem", "destruct_map", ["computation"]], ["mod", "theorem", "eq_of_bisim", ["computation"]], ["mod", "theorem", "lem", ["computation", "lift_rel_rec"]], ["mod", "theorem", "map_comp", ["computation"]], ["mod", "theorem", "map_ret'", ["computation"]], ["mod", "theorem", "map_ret", ["computation"]], ["mod", "theorem", "map_think'", ["computation"]], ["mod", "theorem", "map_think", ["computation"]], ["mod", "theorem", "ret_bind", ["computation"]], ["mod", "theorem", "return_def", ["computation"]], ["mod", "theorem", "think_bind", ["computation"]]]}, {"oldPath": "data/seq/parallel.lean", "newPath": "data/seq/parallel.lean", "changes": [["mod", "theorem", "map_parallel", ["computation"]], ["mod", "theorem", "parallel_congr_lem", ["computation"]], ["mod", "theorem", "aux", ["computation", "terminates_parallel"]]]}, {"oldPath": "data/seq/seq.lean", "newPath": "data/seq/seq.lean", "changes": [["mod", "theorem", "append_assoc", ["seq"]], ["mod", "theorem", "append_nil", ["seq"]], ["mod", "theorem", "coinduction2", ["seq"]], ["mod", "theorem", "coinduction", ["seq"]], ["mod", "theorem", "cons_append", ["seq"]], ["mod", "theorem", "eq_of_bisim", ["seq"]], ["mod", "theorem", "eq_or_mem_of_mem_cons", ["seq"]], ["mod", "theorem", "exists_of_mem_map", ["seq"]], ["mod", "theorem", "join_append", ["seq"]], ["mod", "theorem", "join_cons", ["seq"]], ["mod", "theorem", "join_cons_cons", ["seq"]], ["mod", "theorem", "join_cons_nil", ["seq"]], ["mod", "theorem", "join_nil", ["seq"]], ["mod", "theorem", "map_comp", ["seq"]], ["mod", "theorem", "map_cons", ["seq"]], ["mod", "theorem", "map_id", ["seq"]], ["mod", "theorem", "map_nil", ["seq"]], ["mod", "theorem", "map_nth", ["seq"]], ["mod", "theorem", "map_tail", ["seq"]], ["mod", "theorem", "mem_cons", ["seq"]], ["mod", "theorem", "mem_cons_iff", ["seq"]], ["mod", "theorem", "mem_cons_of_mem", ["seq"]], ["mod", "theorem", "nil_append", ["seq"]], ["mod", "theorem", "join_cons", ["seq1"]], ["mod", "theorem", "join_nil", ["seq1"]]]}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": [["mod", "theorem", "append_assoc", ["wseq"]], ["mod", "theorem", "append_nil", ["wseq"]], ["mod", "theorem", "cons_append", ["wseq"]], ["mod", "theorem", "destruct_append", ["wseq"]], ["mod", "theorem", "destruct_join", ["wseq"]], ["mod", "theorem", "destruct_map", ["wseq"]], ["mod", "theorem", "exists_of_mem_map", ["wseq"]], ["mod", "theorem", "join_append", ["wseq"]], ["mod", "theorem", "map_comp", ["wseq"]], ["mod", "theorem", "map_cons", ["wseq"]], ["mod", "theorem", "map_nil", ["wseq"]], ["mod", "theorem", "map_think", ["wseq"]], ["mod", "theorem", "nil_append", ["wseq"]], ["mod", "theorem", "think_append", ["wseq"]]]}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["mod", "theorem", "set_of_false", ["set"]]]}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": [["mod", "theorem", "finite_image", ["set"]], ["mod", "theorem", "finite_insert", ["set"]], ["mod", "theorem", "finite_sUnion", ["set"]], ["mod", "theorem", "finite_singleton", ["set"]], ["mod", "theorem", "finite_subset", ["set"]], ["mod", "theorem", "finite_union", ["set"]]]}, {"oldPath": "data/stream.lean", "newPath": "data/stream.lean", "changes": [["mod", "theorem", "all_def", ["stream"]], ["mod", "theorem", "any_def", ["stream"]], ["mod", "theorem", "append_append_stream", ["stream"]], ["mod", "theorem", "append_approx_drop", ["stream"]], ["mod", "theorem", "append_stream_head_tail", ["stream"]], ["mod", "theorem", "approx_succ", ["stream"]], ["mod", "theorem", "approx_zero", ["stream"]], ["mod", "theorem", "bisim_simple", ["stream"]], ["mod", "theorem", "coinduction", ["stream"]], ["mod", "theorem", "composition", ["stream"]], ["mod", "theorem", "cons_append_stream", ["stream"]], ["mod", "theorem", "cons_nth_inits_core", ["stream"]], ["mod", "theorem", "const_eq", ["stream"]], ["mod", "theorem", "corec'_eq", ["stream"]], ["mod", "theorem", "corec_def", ["stream"]], ["mod", "theorem", "corec_eq", ["stream"]], ["mod", "theorem", "corec_id_f_eq_iterate", ["stream"]], ["mod", "theorem", "corec_id_id_eq_const", ["stream"]], ["mod", "theorem", "cycle_eq", ["stream"]], ["mod", "theorem", "cycle_singleton", ["stream"]], ["mod", "theorem", "drop_append_stream", ["stream"]], ["mod", "theorem", "drop_const", ["stream"]], ["mod", "theorem", "drop_drop", ["stream"]], ["mod", "theorem", "drop_map", ["stream"]], ["mod", "theorem", "drop_succ", ["stream"]], ["mod", "theorem", "drop_zip", ["stream"]], ["mod", "theorem", "eq_of_bisim", ["stream"]], ["mod", "theorem", "eq_or_mem_of_mem_cons", ["stream"]], ["mod", "theorem", "even_cons_cons", ["stream"]], ["mod", "theorem", "even_interleave", ["stream"]], ["mod", "theorem", "even_tail", ["stream"]], ["mod", "theorem", "exists_of_mem_map", ["stream"]], ["mod", "theorem", "head_cons", ["stream"]], ["mod", "theorem", "head_even", ["stream"]], ["mod", "theorem", "head_iterate", ["stream"]], ["mod", "theorem", "head_map", ["stream"]], ["mod", "theorem", "head_zip", ["stream"]], ["mod", "theorem", "homomorphism", ["stream"]], ["mod", "theorem", "identity", ["stream"]], ["mod", "theorem", "inits_core_eq", ["stream"]], ["mod", "theorem", "inits_eq", ["stream"]], ["mod", "theorem", "inits_tail", ["stream"]], ["mod", "theorem", "interchange", ["stream"]], ["mod", "theorem", "interleave_eq", ["stream"]], ["mod", "theorem", "interleave_even_odd", ["stream"]], ["mod", "theorem", "interleave_tail_tail", ["stream"]], ["mod", "theorem", "iterate_eq", ["stream"]], ["mod", "theorem", "iterate_id", ["stream"]], ["mod", "theorem", "map_append_stream", ["stream"]], ["mod", "theorem", "map_cons", ["stream"]], ["mod", "theorem", "map_const", ["stream"]], ["mod", "theorem", "map_eq", ["stream"]], ["mod", "theorem", "map_eq_apply", ["stream"]], ["mod", "theorem", "map_id", ["stream"]], ["mod", "theorem", "map_iterate", ["stream"]], ["mod", "theorem", "map_map", ["stream"]], ["mod", "theorem", "map_tail", ["stream"]], ["mod", "theorem", "mem_append_stream_left", ["stream"]], ["mod", "theorem", "mem_append_stream_right", ["stream"]], ["mod", "theorem", "mem_cons", ["stream"]], ["mod", "theorem", "mem_cons_of_mem", ["stream"]], ["mod", "theorem", "mem_const", ["stream"]], ["mod", "theorem", "mem_cycle", ["stream"]], ["mod", "theorem", "mem_interleave_left", ["stream"]], ["mod", "theorem", "mem_interleave_right", ["stream"]], ["mod", "theorem", "mem_map", ["stream"]], ["mod", "theorem", "mem_of_mem_even", ["stream"]], ["mod", "theorem", "mem_of_mem_odd", ["stream"]], ["mod", "theorem", "mem_of_nth_eq", ["stream"]], ["mod", "theorem", "nats_eq", ["stream"]], ["mod", "theorem", "nil_append_stream", ["stream"]], ["mod", "theorem", "nth_approx", ["stream"]], ["mod", "theorem", "nth_const", ["stream"]], ["mod", "theorem", "nth_drop", ["stream"]], ["mod", "theorem", "nth_even", ["stream"]], ["mod", "theorem", "nth_inits", ["stream"]], ["mod", "theorem", "nth_interleave_left", ["stream"]], ["mod", "theorem", "nth_interleave_right", ["stream"]], ["mod", "theorem", "nth_map", ["stream"]], ["mod", "theorem", "nth_nats", ["stream"]], ["mod", "theorem", "nth_odd", ["stream"]], ["mod", "theorem", "nth_of_bisim", ["stream"]], ["mod", "theorem", "nth_succ", ["stream"]], ["mod", "theorem", "nth_succ_iterate", ["stream"]], ["mod", "theorem", "nth_tails", ["stream"]], ["mod", "theorem", "nth_unfolds_head_tail", ["stream"]], ["mod", "theorem", "nth_zero_cons", ["stream"]], ["mod", "theorem", "nth_zero_iterate", ["stream"]], ["mod", "theorem", "nth_zip", ["stream"]], ["mod", "theorem", "odd_eq", ["stream"]], ["mod", "theorem", "tail_cons", ["stream"]], ["mod", "theorem", "tail_const", ["stream"]], ["mod", "theorem", "tail_drop", ["stream"]], ["mod", "theorem", "tail_eq_drop", ["stream"]], ["mod", "theorem", "tail_even", ["stream"]], ["mod", "theorem", "tail_inits", ["stream"]], ["mod", "theorem", "tail_interleave", ["stream"]], ["mod", "theorem", "tail_iterate", ["stream"]], ["mod", "theorem", "tail_map", ["stream"]], ["mod", "theorem", "tail_zip", ["stream"]], ["mod", "theorem", "tails_eq", ["stream"]], ["mod", "theorem", "tails_eq_iterate", ["stream"]], ["del", "theorem", "take_lemma", ["stream"]], ["add", "theorem", "take_theorem", ["stream"]], ["mod", "theorem", "unfolds_eq", ["stream"]], ["mod", "theorem", "unfolds_head_eq", ["stream"]], ["mod", "theorem", "zip_eq", ["stream"]], ["mod", "theorem", "zip_inits_tails", ["stream"]]]}, {"oldPath": "data/vector.lean", "newPath": "data/vector.lean", "changes": [["mod", "theorem", "map_cons", ["vector"]], ["mod", "theorem", "map_nil", ["vector"]], ["mod", "theorem", "to_list_append", ["vector"]], ["mod", "theorem", "to_list_cons", ["vector"]], ["mod", "theorem", "to_list_drop", ["vector"]], ["mod", "theorem", "to_list_length", ["vector"]], ["mod", "theorem", "to_list_mk", ["vector"]], ["mod", "theorem", "to_list_nil", ["vector"]], ["mod", "theorem", "to_list_take", ["vector"]]]}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": [["mod", "theorem", "eq_iff_le_and_le", []], ["mod", "theorem", "forall_eq", []], ["mod", "theorem", "not_imp_iff_not_imp", []], ["mod", "theorem", "or_imp_iff_and_imp", []], ["mod", "theorem", "or_of_not_implies'", []], ["mod", "theorem", "or_of_not_implies", []], ["mod", "theorem", "exists", ["prod"]], ["mod", "theorem", "forall", ["prod"]], ["mod", "theorem", "inj_iff", ["prod", "mk"]], ["mod", "theorem", "set_of_subset_set_of", []]]}, {"oldPath": "tactic/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": [["mod", "theorem", "Inf_image", []], ["mod", "theorem", "Sup_image", []], ["mod", "theorem", "mem_image", []], ["mod", "theorem", "{u", []]]}, {"oldPath": "tests/examples.lean", "newPath": "tests/examples.lean", "changes": [["mod", "theorem", "mem_set_of", []]]}, {"oldPath": "tests/finish2.lean", "newPath": "tests/finish2.lean", "changes": [["mod", "theorem", "NoMember", []]]}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["mod", "theorem", "closure_prod_eq", []], ["mod", "theorem", "compact_pi_infinite", []], ["mod", "theorem", "continuous_Inf_dom", []], ["mod", "theorem", "continuous_Inf_rng", []], ["mod", "theorem", "continuous_Prop", []], ["mod", "theorem", "continuous_bot", []], ["mod", "theorem", "continuous_coinduced_dom", []], ["mod", "theorem", "continuous_coinduced_rng", []], ["mod", "theorem", "continuous_compose", []], ["mod", "theorem", "continuous_eq_le_coinduced", []], ["mod", "theorem", "continuous_fst", []], ["mod", "theorem", "continuous_generated_from", []], ["mod", "theorem", "continuous_id", []], ["mod", "theorem", "continuous_iff_induced_le", []], ["mod", "theorem", "continuous_iff_towards", []], ["mod", "theorem", "continuous_induced_dom", []], ["mod", "theorem", "continuous_induced_rng", []], ["mod", "theorem", "continuous_inf_dom", []], ["mod", "theorem", "continuous_inf_rng_left", []], ["mod", "theorem", "continuous_inf_rng_right", []], ["mod", "theorem", "continuous_infi_dom", []], ["mod", "theorem", "continuous_infi_rng", []], ["mod", "theorem", "continuous_inl", []], ["mod", "theorem", "continuous_inr", []], ["mod", "theorem", "continuous_prod_mk", []], ["mod", "theorem", "continuous_snd", []], ["mod", "theorem", "continuous_subtype_mk", []], ["mod", "theorem", "continuous_subtype_nhds_cover", []], ["mod", "theorem", "continuous_subtype_val", []], ["mod", "theorem", "continuous_sum_rec", []], ["mod", "theorem", "continuous_sup_dom_left", []], ["mod", "theorem", "continuous_sup_dom_right", []], ["mod", "theorem", "continuous_sup_rng", []], ["mod", "theorem", "continuous_top", []], ["mod", "theorem", "false_neq_true", []], ["mod", "theorem", "map_nhds_induced_eq", []], ["mod", "theorem", "map_nhds_subtype_val_eq", []], ["mod", "theorem", "nhds_induced_eq_vmap", []], ["mod", "theorem", "nhds_pi", []], ["mod", "theorem", "nhds_prod_eq", []], ["mod", "theorem", "open_induced", []], ["mod", "theorem", "open_set_prod", []], ["mod", "theorem", "open_singleton_true", []], ["mod", "theorem", "prod_eq_generate_from", []], ["mod", "theorem", "val_image", ["subtype"]], ["mod", "theorem", "univ_eq_true_false", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["mod", "theorem", "closed_Inter", []], ["mod", "theorem", "closed_Union_of_locally_finite", []], ["mod", "theorem", "closed_closure", []], ["mod", "theorem", "closed_compl_iff_open", []], ["mod", "theorem", "closed_empty", []], ["mod", "theorem", "closed_iff_nhds", []], ["mod", "theorem", "closed_sInter", []], ["mod", "theorem", "closed_union", []], ["mod", "theorem", "closed_univ", []], ["mod", "theorem", "closure_closure", []], ["mod", "theorem", "closure_compl_eq", []], ["mod", "theorem", "closure_empty", []], ["mod", "theorem", "closure_eq_compl_interior_compl", []], ["mod", "theorem", "closure_eq_iff_closed", []], ["mod", "theorem", "closure_eq_nhds", []], ["mod", "theorem", "closure_eq_of_closed", []], ["mod", "theorem", "closure_minimal", []], ["mod", "theorem", "closure_mono", []], ["mod", "theorem", "closure_subset_iff_subset_of_closed", []], ["mod", "theorem", "closure_union", []], ["mod", "theorem", "closure_univ", []], ["mod", "theorem", "compact_adherence_nhdset", []], ["mod", "theorem", "compact_iff_ultrafilter_le_nhds", []], ["mod", "theorem", "eq_of_nhds_eq_nhds", []], ["mod", "theorem", "eq_of_nhds_neq_bot", []], ["mod", "theorem", "finite_subcover_of_compact", []], ["mod", "theorem", "generate_from_le", []], ["mod", "theorem", "interior_compl_eq", []], ["mod", "theorem", "interior_empty", []], ["mod", "theorem", "interior_eq_iff_open", []], ["mod", "theorem", "interior_eq_nhds", []], ["mod", "theorem", "interior_eq_of_open", []], ["mod", "theorem", "interior_inter", []], ["mod", "theorem", "interior_interior", []], ["mod", "theorem", "interior_maximal", []], ["mod", "theorem", "interior_mono", []], ["mod", "theorem", "interior_subset", []], ["mod", "theorem", "interior_subset_closure", []], ["mod", "theorem", "interior_union_closed_of_interior_empty", []], ["mod", "theorem", "interior_univ", []], ["mod", "theorem", "le_of_nhds_le_nhds", []], ["mod", "theorem", "map_nhds", []], ["mod", "theorem", "mem_nhds_sets", []], ["mod", "theorem", "mem_nhds_sets_iff", []], ["mod", "theorem", "nhds_mono", []], ["mod", "theorem", "nhds_neq_bot", []], ["mod", "theorem", "nhds_sets", []], ["mod", "theorem", "nhds_supr", []], ["mod", "theorem", "open_Union", []], ["mod", "theorem", "open_compl_iff_closed", []], ["mod", "theorem", "open_diff", []], ["mod", "theorem", "open_empty", []], ["mod", "theorem", "open_iff_nhds", []], ["mod", "theorem", "open_inter", []], ["mod", "theorem", "open_interior", []], ["mod", "theorem", "open_sUnion", []], ["mod", "theorem", "open_univ", []], ["mod", "theorem", "return_le_nhds", []], ["mod", "theorem", "subset_closure", []], ["mod", "theorem", "subset_interior_iff_subset_of_open", []], ["mod", "theorem", "sup_eq_generate_from", []], ["mod", "theorem", "supr_eq_generate_from", []], ["mod", "theorem", "t2_space_top", []], ["mod", "theorem", "nhds_generate_from", ["topological_space"]], ["mod", "theorem", "topological_space_eq", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": [["mod", "theorem", "monotone_gen", ["Cauchy"]], ["mod", "theorem", "pure_cauchy_dense", ["Cauchy"]], ["mod", "theorem", "uniform_embedding_pure_cauchy", ["Cauchy"]], ["mod", "theorem", "cauchy_downwards", []], ["mod", "theorem", "cauchy_map", []], ["mod", "theorem", "cauchy_nhds", []], ["mod", "theorem", "cauchy_of_totally_bounded_of_ultrafilter", []], ["mod", "theorem", "cauchy_pure", []], ["mod", "theorem", "cauchy_vmap", []], ["mod", "theorem", "closure_eq_inter_uniformity", []], ["mod", "theorem", "comp_le_uniformity3", []], ["mod", "theorem", "comp_le_uniformity", []], ["mod", "theorem", "comp_mem_uniformity_sets", []], ["mod", "theorem", "comp_symm_of_uniformity", []], ["mod", "theorem", "compact_of_totally_bounded_closed", []], ["mod", "theorem", "compact_of_totally_bounded_complete", []], ["mod", "theorem", "complete_of_closed", []], ["mod", "theorem", "complete_space_extension", []], ["mod", "theorem", "complete_space_separation", []], ["mod", "theorem", "continuous_of_uniform", []], ["mod", "theorem", "id_comp_rel", []], ["mod", "theorem", "interior_mem_uniformity", []], ["mod", "theorem", "le_nhds_iff_adhp_of_cauchy", []], ["mod", "theorem", "le_nhds_of_cauchy_adhp", []], ["mod", "theorem", "lift_nhds_left", []], ["mod", "theorem", "lift_nhds_right", []], ["mod", "theorem", "mem_nhds_left", []], ["mod", "theorem", "mem_nhds_right", []], ["mod", "theorem", "mem_nhds_uniformity_iff", []], ["mod", "theorem", "monotone_comp_rel", []], ["mod", "theorem", "nhds_eq_uniformity", []], ["mod", "theorem", "nhds_eq_uniformity_prod", []], ["mod", "theorem", "nhds_nhds_eq_uniformity_uniformity_prod", []], ["mod", "theorem", "nhdset_of_mem_uniformity", []], ["mod", "theorem", "prod_mk_mem_comp_rel", []], ["mod", "theorem", "refl_le_uniformity", []], ["mod", "theorem", "refl_mem_uniformity", []], ["mod", "theorem", "separated_equiv", []], ["mod", "theorem", "supr_uniformity", []], ["mod", "theorem", "swap_id_rel", []], ["mod", "theorem", "symm_le_uniformity", []], ["mod", "theorem", "symm_of_uniformity", []], ["mod", "theorem", "to_topological_space_bot", []], ["mod", "theorem", "to_topological_space_mono", []], ["mod", "theorem", "to_topological_space_supr", []], ["mod", "theorem", "to_topological_space_top", []], ["mod", "theorem", "to_topological_space_vmap", []], ["mod", "theorem", "totally_bounded_iff_filter", []], ["mod", "theorem", "totally_bounded_iff_ultrafilter", []], ["mod", "theorem", "uniform_continuous_of_embedding", []], ["mod", "theorem", "uniform_continuous_quotient_mk", []], ["mod", "theorem", "uniform_continuous_uniformly_extend", []], ["mod", "theorem", "uniform_continuous_vmap", []], ["mod", "theorem", "uniform_space_eq", []], ["mod", "theorem", "uniformity_eq_symm", []], ["mod", "theorem", "uniformity_eq_uniformity_closure", []], ["mod", "theorem", "uniformity_eq_uniformity_interior", []], ["mod", "theorem", "uniformity_le_symm", []], ["mod", "theorem", "uniformity_lift_le_comp", []], ["mod", "theorem", "uniformity_lift_le_swap", []], ["mod", "theorem", "uniformly_extend_of_emb", []], ["mod", "theorem", "uniformly_extend_spec", []], ["mod", "theorem", "uniformly_extend_unique", []], ["mod", "theorem", "vmap_quotient_le_uniformity", []]]}]}, {"timestamp": 1500833617, "sha": "b9f1d641", "message": "refactor(*): use . instead of ^.", "changes": [{"oldPath": "algebra/group.lean", "newPath": "algebra/group.lean", "changes": []}, {"oldPath": "algebra/lattice/basic.lean", "newPath": "algebra/lattice/basic.lean", "changes": []}, {"oldPath": "algebra/lattice/boolean_algebra.lean", "newPath": "algebra/lattice/boolean_algebra.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_boolean_algebra.lean", "newPath": "algebra/lattice/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": []}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": [["mod", "theorem", "bind_mono", ["filter"]], ["mod", "theorem", "empty_in_sets_eq_bot", ["filter"]], ["mod", "theorem", "filter_eq", ["filter"]], ["mod", "theorem", "inhabited_of_mem_sets", ["filter"]], ["mod", "theorem", "inter_mem_sets", ["filter"]], ["mod", "theorem", "le_principal_iff", ["filter"]], ["mod", "theorem", "lift'_cong", ["filter"]], ["mod", "theorem", "lift'_mono'", ["filter"]], ["mod", "theorem", "lift'_mono", ["filter"]], ["mod", "theorem", "lift'_neq_bot_iff", ["filter"]], ["mod", "theorem", "lift_mono'", ["filter"]], ["mod", "theorem", "lift_mono", ["filter"]], ["mod", "theorem", "lift_neq_bot_iff", ["filter"]], ["mod", "theorem", "lift_sets_eq", ["filter"]], ["mod", "theorem", "map_lift'_eq", ["filter"]], ["mod", "theorem", "mem_bot_sets", ["filter"]], ["mod", "theorem", "mem_join_sets", ["filter"]], ["mod", "theorem", "mem_lift'", ["filter"]], ["mod", "theorem", "mem_lift'_iff", ["filter"]], ["mod", "theorem", "mem_lift", ["filter"]], ["mod", "theorem", "mem_principal_sets", ["filter"]], ["mod", "theorem", "mem_return_sets", ["filter"]], ["mod", "theorem", "monotone_mem_sets", ["filter"]], ["mod", "theorem", "principal_le_lift'", ["filter"]], ["mod", "theorem", "prod_same_eq", ["filter"]], ["mod", "theorem", "supr_sets_eq", ["filter"]], ["mod", "theorem", "univ_mem_sets'", ["filter"]], ["mod", "theorem", "univ_mem_sets", ["filter"]]]}, {"oldPath": "algebra/lattice/fixed_points.lean", "newPath": "algebra/lattice/fixed_points.lean", "changes": []}, {"oldPath": "algebra/ring.lean", "newPath": "algebra/ring.lean", "changes": []}, {"oldPath": "data/list/basic.lean", "newPath": "data/list/basic.lean", "changes": []}, {"oldPath": "data/list/comb.lean", "newPath": "data/list/comb.lean", "changes": []}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": []}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": "data/rat.lean", "newPath": "data/rat.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "logic/basic.lean", "newPath": "logic/basic.lean", "changes": []}, {"oldPath": "tactic/finish.lean", "newPath": "tactic/finish.lean", "changes": []}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": [["mod", "theorem", "map_nhds_induced_eq", []], ["mod", "theorem", "map_nhds_subtype_val_eq", []]]}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": [["mod", "theorem", "nhds_sets", []], ["mod", "theorem", "topological_space_eq", []]]}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1500833269, "sha": "9d01cb8b", "message": "refactor(algebra/lattice): use *experiment files, move set.lattice to .basic", "changes": [{"oldPath": "algebra/lattice/basic.lean", "newPath": "algebra/lattice/basic.lean", "changes": [["mod", "theorem", "bot_inf_eq", ["lattice"]], ["mod", "theorem", "bot_le", ["lattice"]], ["mod", "theorem", "bot_sup_eq", ["lattice"]], ["mod", "theorem", "inf_bot_eq", ["lattice"]], ["mod", "theorem", "inf_eq_top_iff", ["lattice"]], ["mod", "theorem", "inf_idem", ["lattice"]], ["add", "theorem", "inf_le_left'", ["lattice"]], ["add", "theorem", "inf_le_right'", ["lattice"]], ["mod", "theorem", "inf_top_eq", ["lattice"]], ["add", "theorem", "le_bot_iff", ["lattice"]], ["mod", "theorem", "le_inf_iff", ["lattice"]], ["add", "theorem", "le_sup_left'", ["lattice"]], ["add", "theorem", "le_sup_right'", ["lattice"]], ["mod", "theorem", "le_top", ["lattice"]], ["mod", "theorem", "sup_bot_eq", ["lattice"]], ["mod", "theorem", "sup_eq_bot_iff", ["lattice"]], ["mod", "theorem", "sup_idem", ["lattice"]], ["mod", "theorem", "sup_le_iff", ["lattice"]], ["mod", "theorem", "sup_top_eq", ["lattice"]], ["mod", "theorem", "top_inf_eq", ["lattice"]], ["add", "theorem", "top_le_iff", ["lattice"]], ["mod", "theorem", "top_sup_eq", ["lattice"]], ["add", "theorem", "le_antisymm'", []]]}, {"oldPath": "algebra/lattice/basic_experiment.lean", "newPath": null, "changes": [["del", "theorem", "bot_inf_eq", ["lattice"]], ["del", "theorem", "bot_le", ["lattice"]], ["del", "theorem", "bot_sup_eq", ["lattice"]], ["del", "theorem", "bot_unique", ["lattice"]], ["del", "theorem", "eq_bot_iff", ["lattice"]], ["del", "theorem", "eq_top_iff", ["lattice"]], ["del", "def", "imp", ["lattice"]], ["del", "theorem", "inf_assoc", ["lattice"]], ["del", "theorem", "inf_bot_eq", ["lattice"]], ["del", "theorem", "inf_comm", ["lattice"]], ["del", "theorem", "inf_eq_top_iff", ["lattice"]], ["del", "theorem", "inf_idem", ["lattice"]], ["del", "theorem", "inf_le_inf", ["lattice"]], ["del", "theorem", "inf_le_left'", ["lattice"]], ["del", "theorem", "inf_le_left", ["lattice"]], ["del", "theorem", "inf_le_left_of_le", ["lattice"]], ["del", "theorem", "inf_le_right'", ["lattice"]], ["del", "theorem", "inf_le_right", ["lattice"]], ["del", "theorem", "inf_le_right_of_le", ["lattice"]], ["del", "theorem", "inf_of_le_left", ["lattice"]], ["del", "theorem", "inf_of_le_right", ["lattice"]], ["del", "theorem", "inf_sup_self", ["lattice"]], ["del", "theorem", "inf_top_eq", ["lattice"]], ["del", "theorem", "le_bot_iff", ["lattice"]], ["del", "theorem", "le_inf", ["lattice"]], ["del", "theorem", "le_inf_iff", ["lattice"]], ["del", "theorem", "le_inf_sup", ["lattice"]], ["del", "theorem", "le_of_inf_eq", ["lattice"]], ["del", "theorem", "le_of_sup_eq", ["lattice"]], ["del", "theorem", "le_sup_left'", ["lattice"]], ["del", "theorem", "le_sup_left", ["lattice"]], ["del", "theorem", "le_sup_left_of_le", ["lattice"]], ["del", "theorem", "le_sup_right'", ["lattice"]], ["del", "theorem", "le_sup_right", ["lattice"]], ["del", "theorem", "le_sup_right_of_le", ["lattice"]], ["del", "theorem", "le_top", ["lattice"]], ["del", "theorem", "neq_bot_of_le_neq_bot", ["lattice"]], ["del", "theorem", "sup_assoc", ["lattice"]], ["del", "theorem", "sup_bot_eq", ["lattice"]], ["del", "theorem", "sup_comm", ["lattice"]], ["del", "theorem", "sup_eq_bot_iff", ["lattice"]], ["del", "theorem", "sup_idem", ["lattice"]], ["del", "theorem", "sup_inf_le", ["lattice"]], ["del", "theorem", "sup_inf_self", ["lattice"]], ["del", "theorem", "sup_le", ["lattice"]], ["del", "theorem", "sup_le_iff", ["lattice"]], ["del", "theorem", "sup_le_sup", ["lattice"]], ["del", "theorem", "sup_of_le_left", ["lattice"]], ["del", "theorem", "sup_of_le_right", ["lattice"]], ["del", "theorem", "sup_top_eq", ["lattice"]], ["del", "theorem", "top_inf_eq", ["lattice"]], ["del", "theorem", "top_le_iff", ["lattice"]], ["del", "theorem", "top_sup_eq", ["lattice"]], ["del", "theorem", "top_unique", ["lattice"]], ["del", "theorem", "le_antisymm'", []]]}, {"oldPath": "algebra/lattice/bounded_lattice.lean", "newPath": "algebra/lattice/bounded_lattice.lean", "changes": []}, {"oldPath": "algebra/lattice/bounded_lattice_experiment.lean", "newPath": null, "changes": [["del", "theorem", "monotone_and", ["lattice"]], ["del", "theorem", "monotone_or", ["lattice"]]]}, {"oldPath": "algebra/lattice/complete_boolean_algebra.lean", "newPath": "algebra/lattice/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": [["add", "theorem", "foo'", ["lattice"]], ["add", "theorem", "foo", ["lattice"]], ["add", "theorem", "infi_le'", ["lattice"]], ["add", "theorem", "le_supr'", ["lattice"]], ["del", "theorem", "subset_union_left", ["set"]], ["del", "theorem", "subset_union_right", ["set"]]]}, {"oldPath": "algebra/lattice/complete_lattice_experiment.lean", "newPath": null, "changes": [["del", "theorem", "insert_def", []], ["del", "theorem", "insert_eq_of_mem", []], ["del", "theorem", "insert_of_has_insert", []], ["del", "theorem", "inter_def", []], ["del", "theorem", "inter_left_comm", []], ["del", "def", "Inf", ["lattice"]], ["del", "theorem", "Inf_empty", ["lattice"]], ["del", "theorem", "Inf_eq_infi", ["lattice"]], ["del", "theorem", "Inf_image", ["lattice"]], ["del", "theorem", "Inf_insert", ["lattice"]], ["del", "theorem", "Inf_le", ["lattice"]], ["del", "theorem", "Inf_le_Inf", ["lattice"]], ["del", "theorem", "Inf_le_Sup", ["lattice"]], ["del", "theorem", "Inf_le_iff", ["lattice"]], ["del", "theorem", "Inf_le_of_le", ["lattice"]], ["del", "theorem", "Inf_singleton", ["lattice"]], ["del", "theorem", "Inf_union", ["lattice"]], ["del", "theorem", "Inf_univ", ["lattice"]], ["del", "def", "Sup", ["lattice"]], ["del", "theorem", "Sup_empty", ["lattice"]], ["del", "theorem", "Sup_eq_supr", ["lattice"]], ["del", "theorem", "Sup_image", ["lattice"]], ["del", "theorem", "Sup_insert", ["lattice"]], ["del", "theorem", "Sup_inter_le", ["lattice"]], ["del", "theorem", "Sup_le", ["lattice"]], ["del", "theorem", "Sup_le_Sup", ["lattice"]], ["del", "theorem", "Sup_singleton", ["lattice"]], ["del", "theorem", "Sup_union", ["lattice"]], ["del", "theorem", "Sup_univ", ["lattice"]], ["del", "theorem", "foo'", ["lattice"]], ["del", "theorem", "foo", ["lattice"]], ["del", "def", "infi", ["lattice"]], ["del", "theorem", "infi_and", ["lattice"]], ["del", "theorem", "infi_comm", ["lattice"]], ["del", "theorem", "infi_congr_Prop", ["lattice"]], ["del", "theorem", "infi_const", ["lattice"]], ["del", "theorem", "infi_empty", ["lattice"]], ["del", "theorem", "infi_emptyset", ["lattice"]], ["del", "theorem", "infi_exists", ["lattice"]], ["del", "theorem", "infi_false", ["lattice"]], ["del", "theorem", "infi_inf_eq", ["lattice"]], ["del", "theorem", "infi_infi_eq_left", ["lattice"]], ["del", "theorem", "infi_infi_eq_right", ["lattice"]], ["del", "theorem", "infi_insert", ["lattice"]], ["del", "theorem", "infi_le'", ["lattice"]], ["del", "theorem", "infi_le", ["lattice"]], ["del", "theorem", "infi_le_infi2", ["lattice"]], ["del", "theorem", "infi_le_infi", ["lattice"]], ["del", "theorem", "infi_le_infi_const", ["lattice"]], ["del", "theorem", "infi_le_of_le", ["lattice"]], ["del", "theorem", "infi_or", ["lattice"]], ["del", "theorem", "infi_prod", ["lattice"]], ["del", "theorem", "infi_sigma", ["lattice"]], ["del", "theorem", "infi_singleton", ["lattice"]], ["del", "theorem", "infi_subtype", ["lattice"]], ["del", "theorem", "infi_sum", ["lattice"]], ["del", "theorem", "infi_true", ["lattice"]], ["del", "theorem", "infi_union", ["lattice"]], ["del", "theorem", "infi_unit", ["lattice"]], ["del", "theorem", "infi_univ", ["lattice"]], ["del", "theorem", "insert_of_has_insert", ["lattice"]], ["del", "theorem", "le_Inf", ["lattice"]], ["del", "theorem", "le_Inf_inter", ["lattice"]], ["del", "theorem", "le_Sup", ["lattice"]], ["del", "theorem", "le_Sup_iff", ["lattice"]], ["del", "theorem", "le_Sup_of_le", ["lattice"]], ["del", "theorem", "le_infi", ["lattice"]], ["del", "theorem", "le_infi_iff", ["lattice"]], ["del", "theorem", "le_supr'", ["lattice"]], ["del", "theorem", "le_supr", ["lattice"]], ["del", "theorem", "le_supr_of_le", ["lattice"]], ["del", "theorem", "monotone_Inf_of_monotone", ["lattice"]], ["del", "theorem", "monotone_Sup_of_monotone", ["lattice"]], ["del", "def", "supr", ["lattice"]], ["del", "theorem", "supr_and", ["lattice"]], ["del", "theorem", "supr_comm", ["lattice"]], ["del", "theorem", "supr_congr_Prop", ["lattice"]], ["del", "theorem", "supr_const", ["lattice"]], ["del", "theorem", "supr_empty", ["lattice"]], ["del", "theorem", "supr_emptyset", ["lattice"]], ["del", "theorem", "supr_exists", ["lattice"]], ["del", "theorem", "supr_false", ["lattice"]], ["del", "theorem", "supr_insert", ["lattice"]], ["del", "theorem", "supr_le", ["lattice"]], ["del", "theorem", "supr_le_iff", ["lattice"]], ["del", "theorem", "supr_le_supr2", ["lattice"]], ["del", "theorem", "supr_le_supr", ["lattice"]], ["del", "theorem", "supr_le_supr_const", ["lattice"]], ["del", "theorem", "supr_or", ["lattice"]], ["del", "theorem", "supr_prod", ["lattice"]], ["del", "theorem", "supr_sigma", ["lattice"]], ["del", "theorem", "supr_singleton", ["lattice"]], ["del", "theorem", "supr_subtype", ["lattice"]], ["del", "theorem", "supr_sum", ["lattice"]], ["del", "theorem", "supr_sup_eq", ["lattice"]], ["del", "theorem", "supr_supr_eq_left", ["lattice"]], ["del", "theorem", "supr_supr_eq_right", ["lattice"]], ["del", "theorem", "supr_true", ["lattice"]], ["del", "theorem", "supr_union", ["lattice"]], ["del", "theorem", "supr_unit", ["lattice"]], ["del", "theorem", "supr_univ", ["lattice"]], ["del", "theorem", "mem_insert_iff", []], ["del", "theorem", "mem_inter_eq", []], ["del", "theorem", "mem_set_of", []], ["del", "theorem", "mem_set_of_eq", []], ["del", "theorem", "mem_singleton", []], ["del", "theorem", "mem_singleton_iff", []], ["del", "theorem", "mem_union_eq", []], ["del", "theorem", "mem_univ_eq", []], ["del", "theorem", "nmem_set_of_eq", []], ["del", "theorem", "set_eq_def", []], ["del", "theorem", "set_of_false", []], ["del", "theorem", "singleton_def", []], ["del", "theorem", "singleton_eq_singleton_iff", []], ["del", "theorem", "subset_def", []], ["del", "theorem", "subset_insert", []], ["del", "theorem", "subset_univ", []], ["del", "theorem", "union_def", []], ["del", "theorem", "union_left_comm", []]]}, {"oldPath": "data/seq/wseq.lean", "newPath": "data/seq/wseq.lean", "changes": []}, {"oldPath": "data/set/basic.lean", "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "bounded_forall_empty_iff", ["set"]], ["add", "theorem", "bounded_forall_image_iff", ["set"]], ["add", "theorem", "bounded_forall_image_of_bounded_forall", ["set"]], ["add", "theorem", "bounded_forall_insert_iff", ["set"]], ["add", "theorem", "compl_comp_compl", ["set"]], ["add", "theorem", "compl_compl", ["set"]], ["add", "theorem", "compl_compl_image", ["set"]], ["add", "theorem", "compl_empty", ["set"]], ["add", "theorem", "compl_eq_univ_diff", ["set"]], ["add", "theorem", "compl_inter", ["set"]], ["add", "theorem", "compl_inter_self", ["set"]], ["add", "theorem", "compl_union", ["set"]], ["add", "theorem", "compl_union_self", ["set"]], ["add", "theorem", "compl_univ", ["set"]], ["add", "theorem", "diff_eq", ["set"]], ["add", "theorem", "diff_subset", ["set"]], ["add", "theorem", "empty_def", ["set"]], ["mod", "theorem", "empty_inter", ["set"]], ["add", "theorem", "empty_ne_univ", ["set"]], ["mod", "theorem", "empty_subset", ["set"]], ["mod", "theorem", "empty_union", ["set"]], ["mod", "theorem", "eq_empty_of_forall_not_mem", ["set"]], ["mod", "theorem", "eq_empty_of_subset_empty", ["set"]], ["add", "theorem", "eq_of_mem_singleton", ["set"]], ["mod", "theorem", "eq_of_subset_of_subset", ["set"]], ["add", "def", "eq_on", ["set"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["set"]], ["add", "theorem", "eq_sep_of_subset", ["set"]], ["add", "theorem", "eq_univ_of_forall", ["set"]], ["add", "theorem", "eq_univ_of_univ_subset", ["set"]], ["add", "theorem", "eq_vimage_subtype_val_iff", ["set"]], ["add", "theorem", "exists_mem_of_ne_empty", ["set"]], ["mod", "theorem", "ext", ["set"]], ["add", "theorem", "fix_set_compl", ["set"]], ["add", "theorem", "forall_insert_of_forall", ["set"]], ["add", "theorem", "forall_not_of_sep_empty", ["set"]], ["add", "theorem", "forall_of_forall_insert", ["set"]], ["add", "theorem", "image_comp", ["set"]], ["add", "theorem", "image_empty", ["set"]], ["add", "theorem", "image_eq_image_of_eq_on", ["set"]], ["add", "theorem", "image_id", ["set"]], ["add", "theorem", "image_insert_eq", ["set"]], ["add", "theorem", "image_subset", ["set"]], ["add", "theorem", "image_subset_iff_subset_vimage", ["set"]], ["add", "theorem", "image_union", ["set"]], ["add", "theorem", "insert_comm", ["set"]], ["add", "theorem", "insert_def", ["set"]], ["add", "theorem", "insert_eq", ["set"]], ["add", "theorem", "insert_eq_of_mem", ["set"]], ["add", "theorem", "insert_ne_empty", ["set"]], ["add", "theorem", "insert_of_has_insert", ["set"]], ["mod", "theorem", "inter_assoc", ["set"]], ["mod", "theorem", "inter_comm", ["set"]], ["add", "theorem", "inter_compl_self", ["set"]], ["add", "theorem", "inter_def", ["set"]], ["add", "theorem", "inter_distrib_left", ["set"]], ["add", "theorem", "inter_distrib_right", ["set"]], ["mod", "theorem", "inter_empty", ["set"]], ["add", "theorem", "inter_eq_compl_compl_union_compl", ["set"]], ["add", "theorem", "inter_eq_self_of_subset_left", ["set"]], ["add", "theorem", "inter_eq_self_of_subset_right", ["set"]], ["add", "theorem", "inter_left_comm", ["set"]], ["add", "theorem", "inter_right_comm", ["set"]], ["mod", "theorem", "inter_self", ["set"]], ["add", "theorem", "inter_subset_inter", ["set"]], ["add", "theorem", "inter_subset_inter_left", ["set"]], ["add", "theorem", "inter_subset_inter_right", ["set"]], ["add", "theorem", "inter_subset_left", ["set"]], ["add", "theorem", "inter_subset_right", ["set"]], ["add", "theorem", "inter_univ", ["set"]], ["add", "theorem", "mem_compl", ["set"]], ["add", "theorem", "mem_compl_eq", ["set"]], ["add", "theorem", "mem_compl_iff", ["set"]], ["add", "theorem", "mem_diff", ["set"]], ["add", "theorem", "mem_diff_eq", ["set"]], ["add", "theorem", "mem_diff_iff", ["set"]], ["mod", "theorem", "mem_empty_eq", ["set"]], ["add", "theorem", "mem_image", ["set"]], ["add", "theorem", "mem_image_compl", ["set"]], ["add", "def", "mem_image_elim", ["set"]], ["add", "def", "mem_image_elim_on", ["set"]], ["add", "theorem", "mem_image_eq", ["set"]], ["add", "theorem", "mem_image_of_mem", ["set"]], ["add", "theorem", "mem_insert", ["set"]], ["add", "theorem", "mem_insert_iff", ["set"]], ["add", "theorem", "mem_insert_of_mem", ["set"]], ["add", "theorem", "mem_inter", ["set"]], ["add", "theorem", "mem_inter_eq", ["set"]], ["add", "theorem", "mem_inter_iff", ["set"]], ["add", "theorem", "mem_of_mem_diff", ["set"]], ["add", "theorem", "mem_of_mem_insert_of_ne", ["set"]], ["add", "theorem", "mem_of_mem_inter_left", ["set"]], ["add", "theorem", "mem_of_mem_inter_right", ["set"]], ["mod", "theorem", "mem_of_subset_of_mem", ["set"]], ["add", "theorem", "mem_or_mem_of_mem_union", ["set"]], ["add", "theorem", "mem_powerset", ["set"]], ["add", "theorem", "mem_powerset_iff", ["set"]], ["add", "theorem", "mem_sep", ["set"]], ["add", "theorem", "mem_sep_eq", ["set"]], ["add", "theorem", "mem_sep_iff", ["set"]], ["add", "theorem", "mem_set_of_eq", ["set"]], ["add", "theorem", "mem_singleton", ["set"]], ["add", "theorem", "mem_singleton_iff", ["set"]], ["add", "theorem", "mem_singleton_of_eq", ["set"]], ["add", "theorem", "elim", ["set", "mem_union"]], ["add", "theorem", "mem_union_eq", ["set"]], ["add", "theorem", "mem_union_iff", ["set"]], ["add", "theorem", "mem_union_left", ["set"]], ["add", "theorem", "mem_union_right", ["set"]], ["add", "theorem", "mem_univ", ["set"]], ["add", "theorem", "mem_univ_eq", ["set"]], ["add", "theorem", "mem_univ_iff", ["set"]], ["add", "theorem", "mem_vimage_eq", ["set"]], ["add", "theorem", "mono_image", ["set"]], ["mod", "theorem", "ne_empty_of_mem", ["set"]], ["add", "theorem", "nmem_set_of_eq", ["set"]], ["add", "theorem", "nonempty_of_inter_nonempty_left", ["set"]], ["add", "theorem", "nonempty_of_inter_nonempty_right", ["set"]], ["mod", "theorem", "not_mem_empty", ["set"]], ["add", "theorem", "not_mem_of_mem_compl", ["set"]], ["add", "theorem", "not_mem_of_mem_diff", ["set"]], ["add", "theorem", "pair_eq_singleton", ["set"]], ["add", "def", "pairwise_on", ["set"]], ["add", "theorem", "sep_subset", ["set"]], ["add", "theorem", "set_eq_def", ["set"]], ["add", "theorem", "set_of_false", ["set"]], ["add", "theorem", "singleton_def", ["set"]], ["add", "theorem", "singleton_eq_singleton_iff", ["set"]], ["add", "theorem", "singleton_ne_empty", ["set"]], ["add", "theorem", "singleton_subset_iff", ["set"]], ["add", "theorem", "ssubset_def", ["set"]], ["add", "theorem", "ssubset_insert", ["set"]], ["add", "def", "strict_subset", ["set"]], ["mod", "theorem", "antisymm", ["set", "subset"]], ["mod", "theorem", "refl", ["set", "subset"]], ["mod", "theorem", "trans", ["set", "subset"]], ["add", "theorem", "subset_def", ["set"]], ["add", "theorem", "subset_empty_iff", ["set"]], ["add", "theorem", "subset_insert", ["set"]], ["add", "theorem", "subset_inter", ["set"]], ["add", "theorem", "subset_of_mem_powerset", ["set"]], ["add", "theorem", "subset_union_left", ["set"]], ["add", "theorem", "subset_union_right", ["set"]], ["add", "theorem", "subset_univ", ["set"]], ["mod", "theorem", "union_assoc", ["set"]], ["mod", "theorem", "union_comm", ["set"]], ["add", "theorem", "union_compl_self", ["set"]], ["add", "theorem", "union_def", ["set"]], ["add", "theorem", "union_diff_cancel", ["set"]], ["add", "theorem", "union_distrib_left", ["set"]], ["add", "theorem", "union_distrib_right", ["set"]], ["mod", "theorem", "union_empty", ["set"]], ["add", "theorem", "union_eq_compl_compl_inter_compl", ["set"]], ["add", "theorem", "union_eq_self_of_subset_left", ["set"]], ["add", "theorem", "union_eq_self_of_subset_right", ["set"]], ["add", "theorem", "union_insert_eq", ["set"]], ["add", "theorem", "union_left_comm", ["set"]], ["add", "theorem", "union_right_comm", ["set"]], ["mod", "theorem", "union_self", ["set"]], ["add", "theorem", "union_subset", ["set"]], ["add", "theorem", "union_subset_iff", ["set"]], ["add", "theorem", "union_subset_union", ["set"]], ["add", "theorem", "univ_def", ["set"]], ["add", "theorem", "univ_inter", ["set"]], ["add", "def", "vimage", ["set"]], ["add", "theorem", "vimage_comp", ["set"]], ["add", "theorem", "vimage_compl", ["set"]], ["add", "theorem", "vimage_empty", ["set"]], ["add", "theorem", "vimage_id", ["set"]], ["add", "theorem", "vimage_image_eq", ["set"]], ["add", "theorem", "vimage_inter", ["set"]], ["add", "theorem", "vimage_mono", ["set"]], ["add", "theorem", "vimage_union", ["set"]], ["add", "theorem", "vimage_univ", ["set"]]]}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": [["del", "theorem", "bounded_forall_empty_iff", ["set"]], ["del", "theorem", "bounded_forall_image_iff", ["set"]], ["del", "theorem", "bounded_forall_image_of_bounded_forall", ["set"]], ["del", "theorem", "bounded_forall_insert_iff", ["set"]], ["del", "theorem", "compl_comp_compl", ["set"]], ["del", "theorem", "compl_compl", ["set"]], ["del", "theorem", "compl_compl_image", ["set"]], ["del", "theorem", "compl_empty", ["set"]], ["del", "theorem", "compl_eq_univ_diff", ["set"]], ["del", "theorem", "compl_inter", ["set"]], ["del", "theorem", "compl_inter_self", ["set"]], ["del", "theorem", "compl_union", ["set"]], ["del", "theorem", "compl_union_self", ["set"]], ["del", "theorem", "compl_univ", ["set"]], ["del", "theorem", "diff_eq", ["set"]], ["del", "theorem", "diff_subset", ["set"]], ["mod", "theorem", "disjoint_bot_left", ["set"]], ["mod", "theorem", "disjoint_bot_right", ["set"]], ["mod", "theorem", "disjoint_symm", ["set"]], ["del", "theorem", "empty_ne_univ", ["set"]], ["del", "theorem", "eq_of_mem_singleton", ["set"]], ["del", "def", "eq_on", ["set"]], ["del", "theorem", "eq_or_mem_of_mem_insert", ["set"]], ["del", "theorem", "eq_sep_of_subset", ["set"]], ["del", "theorem", "eq_univ_of_forall", ["set"]], ["del", "theorem", "eq_univ_of_univ_subset", ["set"]], ["del", "theorem", "eq_vimage_subtype_val_iff", ["set"]], ["del", "theorem", "exists_mem_of_ne_empty", ["set"]], ["del", "theorem", "fix_set_compl", ["set"]], ["del", "theorem", "forall_insert_of_forall", ["set"]], ["del", "theorem", "forall_not_of_sep_empty", ["set"]], ["del", "theorem", "forall_of_forall_insert", ["set"]], ["del", "theorem", "image_comp", ["set"]], ["del", "theorem", "image_empty", ["set"]], ["del", "theorem", "image_eq_image_of_eq_on", ["set"]], ["del", "theorem", "image_id", ["set"]], ["del", "theorem", "image_insert_eq", ["set"]], ["del", "theorem", "image_subset", ["set"]], ["del", "theorem", "image_subset_iff_subset_vimage", ["set"]], ["del", "theorem", "image_union", ["set"]], ["del", "theorem", "insert_comm", ["set"]], ["del", "theorem", "insert_def", ["set"]], ["del", "theorem", "insert_eq", ["set"]], ["del", "theorem", "insert_eq_of_mem", ["set"]], ["del", "theorem", "insert_ne_empty", ["set"]], ["del", "theorem", "insert_of_has_insert", ["set"]], ["mod", "theorem", "insert_sdiff_singleton", ["set"]], ["del", "theorem", "inter_compl_self", ["set"]], ["del", "theorem", "inter_def", ["set"]], ["del", "theorem", "inter_distrib_left", ["set"]], ["del", "theorem", "inter_distrib_right", ["set"]], ["del", "theorem", "inter_eq_compl_compl_union_compl", ["set"]], ["del", "theorem", "inter_eq_self_of_subset_left", ["set"]], ["del", "theorem", "inter_eq_self_of_subset_right", ["set"]], ["del", "theorem", "inter_left_comm", ["set"]], ["del", "theorem", "inter_right_comm", ["set"]], ["del", "theorem", "inter_subset_inter", ["set"]], ["del", "theorem", "inter_subset_inter_left", ["set"]], ["del", "theorem", "inter_subset_inter_right", ["set"]], ["del", "theorem", "inter_subset_left", ["set"]], ["del", "theorem", "inter_subset_right", ["set"]], ["del", "theorem", "inter_univ", ["set"]], ["del", "theorem", "mem_compl", ["set"]], ["del", "theorem", "mem_compl_eq", ["set"]], ["del", "theorem", "mem_compl_iff", ["set"]], ["del", "theorem", "mem_diff", ["set"]], ["del", "theorem", "mem_diff_eq", ["set"]], ["del", "theorem", "mem_diff_iff", ["set"]], ["del", "theorem", "mem_image", ["set"]], ["del", "theorem", "mem_image_compl", ["set"]], ["del", "def", "mem_image_elim", ["set"]], ["del", "def", "mem_image_elim_on", ["set"]], ["del", "theorem", "mem_image_eq", ["set"]], ["del", "theorem", "mem_image_of_mem", ["set"]], ["del", "theorem", "mem_insert", ["set"]], ["del", "theorem", "mem_insert_iff", ["set"]], ["del", "theorem", "mem_insert_of_mem", ["set"]], ["del", "theorem", "mem_inter", ["set"]], ["del", "theorem", "mem_inter_eq", ["set"]], ["del", "theorem", "mem_inter_iff", ["set"]], ["del", "theorem", "mem_of_mem_diff", ["set"]], ["del", "theorem", "mem_of_mem_insert_of_ne", ["set"]], ["del", "theorem", "mem_of_mem_inter_left", ["set"]], ["del", "theorem", "mem_of_mem_inter_right", ["set"]], ["del", "theorem", "mem_or_mem_of_mem_union", ["set"]], ["del", "theorem", "mem_powerset", ["set"]], ["del", "theorem", "mem_powerset_iff", ["set"]], ["del", "theorem", "mem_sep", ["set"]], ["del", "theorem", "mem_sep_eq", ["set"]], ["del", "theorem", "mem_sep_iff", ["set"]], ["del", "theorem", "mem_set_of", ["set"]], ["del", "theorem", "mem_set_of_eq", ["set"]], ["del", "theorem", "mem_singleton", ["set"]], ["del", "theorem", "mem_singleton_iff", ["set"]], ["del", "theorem", "mem_singleton_of_eq", ["set"]], ["del", "theorem", "elim", ["set", "mem_union"]], ["del", "theorem", "mem_union_eq", ["set"]], ["del", "theorem", "mem_union_iff", ["set"]], ["del", "theorem", "mem_union_left", ["set"]], ["del", "theorem", "mem_union_right", ["set"]], ["del", "theorem", "mem_unionl", ["set"]], ["del", "theorem", "mem_unionr", ["set"]], ["del", "theorem", "mem_univ", ["set"]], ["del", "theorem", "mem_univ_eq", ["set"]], ["del", "theorem", "mem_univ_iff", ["set"]], ["del", "theorem", "mem_vimage_eq", ["set"]], ["del", "theorem", "mono_image", ["set"]], ["mod", "theorem", "monotone_vimage", ["set"]], ["del", "theorem", "nmem_set_of_eq", ["set"]], ["del", "theorem", "nonempty_of_inter_nonempty_left", ["set"]], ["del", "theorem", "nonempty_of_inter_nonempty_right", ["set"]], ["del", "theorem", "not_mem_of_mem_compl", ["set"]], ["del", "theorem", "not_mem_of_mem_diff", ["set"]], ["del", "theorem", "pair_eq_singleton", ["set"]], ["del", "def", "pairwise_on", ["set"]], ["mod", "theorem", "sdiff_singleton_eq_same", ["set"]], ["del", "theorem", "sep_subset", ["set"]], ["del", "theorem", "set_eq_def", ["set"]], ["del", "theorem", "set_of_false", ["set"]], ["del", "theorem", "singleton_def", ["set"]], ["del", "theorem", "singleton_eq_singleton_iff", ["set"]], ["del", "theorem", "singleton_ne_empty", ["set"]], ["del", "theorem", "singleton_subset_iff", ["set"]], ["del", "theorem", "ssubset_def", ["set"]], ["del", "theorem", "ssubset_insert", ["set"]], ["del", "def", "strict_subset", ["set"]], ["del", "theorem", "subset_def", ["set"]], ["del", "theorem", "subset_empty_iff", ["set"]], ["del", "theorem", "subset_insert", ["set"]], ["del", "theorem", "subset_inter", ["set"]], ["del", "theorem", "subset_of_mem_powerset", ["set"]], ["del", "theorem", "subset_univ", ["set"]], ["del", "theorem", "union_compl_self", ["set"]], ["del", "theorem", "union_def", ["set"]], ["del", "theorem", "union_diff_cancel", ["set"]], ["del", "theorem", "union_distrib_left", ["set"]], ["del", "theorem", "union_distrib_right", ["set"]], ["del", "theorem", "union_eq_compl_compl_inter_compl", ["set"]], ["del", "theorem", "union_eq_self_of_subset_left", ["set"]], ["del", "theorem", "union_eq_self_of_subset_right", ["set"]], ["del", "theorem", "union_insert_eq", ["set"]], ["del", "theorem", "union_left_comm", ["set"]], ["del", "theorem", "union_right_comm", ["set"]], ["mod", "theorem", "union_same_compl", ["set"]], ["mod", "theorem", "union_sdiff_same", ["set"]], ["del", "theorem", "union_subset", ["set"]], ["del", "theorem", "union_subset_iff", ["set"]], ["del", "theorem", "union_subset_union", ["set"]], ["del", "theorem", "univ_def", ["set"]], ["del", "theorem", "univ_inter", ["set"]], ["del", "def", "vimage", ["set"]], ["mod", "theorem", "vimage_Union", ["set"]], ["del", "theorem", "vimage_comp", ["set"]], ["del", "theorem", "vimage_compl", ["set"]], ["del", "theorem", "vimage_empty", ["set"]], ["del", "theorem", "vimage_id", ["set"]], ["del", "theorem", "vimage_image_eq", ["set"]], ["del", "theorem", "vimage_inter", ["set"]], ["del", "theorem", "vimage_mono", ["set"]], ["mod", "theorem", "vimage_sUnion", ["set"]], ["del", "theorem", "vimage_union", ["set"]], ["del", "theorem", "vimage_univ", ["set"]]]}, {"oldPath": "tests/finish_set_basic.lean", "newPath": null, "changes": [["del", "theorem", "bounded_forall_empty_iff", ["set"]], ["del", "theorem", "bounded_forall_image_iff", ["set"]], ["del", "theorem", "bounded_forall_image_of_bounded_forall", ["set"]], ["del", "theorem", "bounded_forall_insert_iff", ["set"]], ["del", "theorem", "compl_comp_compl", ["set"]], ["del", "theorem", "compl_compl", ["set"]], ["del", "theorem", "compl_compl_image", ["set"]], ["del", "theorem", "compl_empty", ["set"]], ["del", "theorem", "compl_eq_univ_diff", ["set"]], ["del", "theorem", "compl_inter", ["set"]], ["del", "theorem", "compl_inter_self", ["set"]], ["del", "theorem", "compl_union", ["set"]], ["del", "theorem", "compl_union_self", ["set"]], ["del", "theorem", "compl_univ", ["set"]], ["del", "theorem", "diff_eq", ["set"]], ["del", "theorem", "diff_subset", ["set"]], ["del", "theorem", "empty_def", ["set"]], ["del", "theorem", "empty_ne_univ", ["set"]], ["del", "theorem", "eq_of_mem_singleton", ["set"]], ["del", "def", "eq_on", ["set"]], ["del", "theorem", "eq_or_mem_of_mem_insert", ["set"]], ["del", "theorem", "eq_sep_of_subset", ["set"]], ["del", "theorem", "eq_univ_of_forall", ["set"]], ["del", "theorem", "eq_univ_of_univ_subset", ["set"]], ["del", "theorem", "exists_mem_of_ne_empty", ["set"]], ["del", "theorem", "fix_set_compl", ["set"]], ["del", "theorem", "forall_insert_of_forall", ["set"]], ["del", "theorem", "forall_not_of_sep_empty", ["set"]], ["del", "theorem", "forall_of_forall_insert", ["set"]], ["del", "theorem", "image_comp", ["set"]], ["del", "theorem", "image_empty", ["set"]], ["del", "theorem", "image_eq_image_of_eq_on", ["set"]], ["del", "theorem", "image_id", ["set"]], ["del", "theorem", "image_insert_eq", ["set"]], ["del", "theorem", "image_subset", ["set"]], ["del", "theorem", "image_union", ["set"]], ["del", "theorem", "insert_comm", ["set"]], ["del", "theorem", "insert_def", ["set"]], ["del", "theorem", "insert_eq", ["set"]], ["del", "theorem", "insert_eq_of_mem", ["set"]], ["del", "theorem", "insert_ne_empty", ["set"]], ["del", "theorem", "insert_of_has_insert", ["set"]], ["del", "theorem", "inter_compl_self", ["set"]], ["del", "theorem", "inter_def", ["set"]], ["del", "theorem", "inter_distrib_left", ["set"]], ["del", "theorem", "inter_distrib_right", ["set"]], ["del", "theorem", "inter_eq_compl_compl_union_compl", ["set"]], ["del", "theorem", "inter_eq_self_of_subset_left", ["set"]], ["del", "theorem", "inter_eq_self_of_subset_right", ["set"]], ["del", "theorem", "inter_left_comm", ["set"]], ["del", "theorem", "inter_right_comm", ["set"]], ["del", "theorem", "inter_subset_inter_left", ["set"]], ["del", "theorem", "inter_subset_inter_right", ["set"]], ["del", "theorem", "inter_subset_left", ["set"]], ["del", "theorem", "inter_subset_right", ["set"]], ["del", "theorem", "inter_univ", ["set"]], ["del", "theorem", "mem_compl", ["set"]], ["del", "theorem", "mem_compl_eq", ["set"]], ["del", "theorem", "mem_compl_iff", ["set"]], ["del", "theorem", "mem_diff", ["set"]], ["del", "theorem", "mem_diff_eq", ["set"]], ["del", "theorem", "mem_diff_iff", ["set"]], ["del", "theorem", "mem_image", ["set"]], ["del", "theorem", "mem_image_compl", ["set"]], ["del", "def", "mem_image_elim", ["set"]], ["del", "def", "mem_image_elim_on", ["set"]], ["del", "theorem", "mem_image_eq", ["set"]], ["del", "theorem", "mem_image_of_mem", ["set"]], ["del", "theorem", "mem_insert", ["set"]], ["del", "theorem", "mem_insert_iff", ["set"]], ["del", "theorem", "mem_insert_of_mem", ["set"]], ["del", "theorem", "mem_inter", ["set"]], ["del", "theorem", "mem_inter_eq", ["set"]], ["del", "theorem", "mem_inter_iff", ["set"]], ["del", "theorem", "mem_of_mem_diff", ["set"]], ["del", "theorem", "mem_of_mem_insert_of_ne", ["set"]], ["del", "theorem", "mem_of_mem_inter_left", ["set"]], ["del", "theorem", "mem_of_mem_inter_right", ["set"]], ["del", "theorem", "mem_or_mem_of_mem_union", ["set"]], ["del", "theorem", "mem_powerset", ["set"]], ["del", "theorem", "mem_powerset_iff", ["set"]], ["del", "theorem", "mem_sep", ["set"]], ["del", "theorem", "mem_sep_eq", ["set"]], ["del", "theorem", "mem_sep_iff", ["set"]], ["del", "theorem", "mem_set_of", ["set"]], ["del", "theorem", "mem_singleton", ["set"]], ["del", "theorem", "mem_singleton_iff", ["set"]], ["del", "theorem", "mem_singleton_of_eq", ["set"]], ["del", "theorem", "elim", ["set", "mem_union"]], ["del", "theorem", "mem_union_eq", ["set"]], ["del", "theorem", "mem_union_iff", ["set"]], ["del", "theorem", "mem_union_left", ["set"]], ["del", "theorem", "mem_union_right", ["set"]], ["del", "theorem", "mem_unionl", ["set"]], ["del", "theorem", "mem_unionr", ["set"]], ["del", "theorem", "mem_univ", ["set"]], ["del", "theorem", "mem_univ_eq", ["set"]], ["del", "theorem", "mem_univ_iff", ["set"]], ["del", "theorem", "nonempty_of_inter_nonempty_left", ["set"]], ["del", "theorem", "nonempty_of_inter_nonempty_right", ["set"]], ["del", "theorem", "not_mem_of_mem_compl", ["set"]], ["del", "theorem", "not_mem_of_mem_diff", ["set"]], ["del", "theorem", "pair_eq_singleton", ["set"]], ["del", "theorem", "sep_subset", ["set"]], ["del", "theorem", "set_eq_def", ["set"]], ["del", "theorem", "singleton_def", ["set"]], ["del", "theorem", "singleton_ne_empty", ["set"]], ["del", "def", "strict_subset", ["set"]], ["del", "theorem", "subset_def", ["set"]], ["del", "theorem", "subset_empty_iff", ["set"]], ["del", "theorem", "subset_insert", ["set"]], ["del", "theorem", "subset_inter", ["set"]], ["del", "theorem", "subset_of_mem_powerset", ["set"]], ["del", "theorem", "subset_univ", ["set"]], ["del", "theorem", "union_compl_self", ["set"]], ["del", "theorem", "union_def", ["set"]], ["del", "theorem", "union_diff_cancel", ["set"]], ["del", "theorem", "union_distrib_left", ["set"]], ["del", "theorem", "union_distrib_right", ["set"]], ["del", "theorem", "union_eq_compl_compl_inter_compl", ["set"]], ["del", "theorem", "union_eq_self_of_subset_left", ["set"]], ["del", "theorem", "union_eq_self_of_subset_right", ["set"]], ["del", "theorem", "union_left_comm", ["set"]], ["del", "theorem", "union_right_comm", ["set"]], ["del", "theorem", "union_subset", ["set"]], ["del", "theorem", "univ_def", ["set"]], ["del", "theorem", "univ_inter", ["set"]]]}, {"oldPath": "theories/set_theory.lean", "newPath": "theories/set_theory.lean", "changes": []}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": []}, {"oldPath": "topology/topological_space.lean", "newPath": "topology/topological_space.lean", "changes": []}]}, {"timestamp": 1500824375, "sha": "32beb92a", "message": "refactor(*): tools -> tactic, remove experimental stuff", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/lattice/basic_experiment.lean", "newPath": "algebra/lattice/basic_experiment.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/set/lattice.lean", "newPath": "data/set/lattice.lean", "changes": []}, {"oldPath": "tools/converter/binders.lean", "newPath": "tactic/converter/binders.lean", "changes": []}, {"oldPath": "tools/converter/interactive.lean", "newPath": "tactic/converter/interactive.lean", "changes": []}, {"oldPath": "tools/converter/old_conv.lean", "newPath": "tactic/converter/old_conv.lean", "changes": []}, {"oldPath": "tools/auto/finish.lean", "newPath": "tactic/finish.lean", "changes": []}, {"oldPath": "tests/finish1.lean", "newPath": "tests/finish1.lean", "changes": []}, {"oldPath": "tests/finish2.lean", "newPath": "tests/finish2.lean", "changes": []}, {"oldPath": "tests/finish3.lean", "newPath": "tests/finish3.lean", "changes": []}, {"oldPath": "tests/finish_set_basic.lean", "newPath": "tests/finish_set_basic.lean", "changes": []}, {"oldPath": "tools/auto/mk_inhabitant.lean", "newPath": null, "changes": []}, {"oldPath": "tools/parser/modal.lean", "newPath": null, "changes": [["del", "def", "form_of_string", []]]}, {"oldPath": "tools/parser/parser.lean", "newPath": null, "changes": [["del", "def", "deterministic_or", ["list"]], ["del", "def", "apply", ["parser"]], ["del", "def", "chainl1", ["parser"]], ["del", "def", "chainl1_rest", ["parser"]], ["del", "def", "chainl", ["parser"]], ["del", "def", "chainr1", ["parser"]], ["del", "def", "chainr1_rest", ["parser"]], ["del", "def", "chainr", ["parser"]], ["del", "def", "item", ["parser"]], ["del", "def", "many1", ["parser"]], ["del", "def", "many", ["parser"]], ["del", "def", "many_aux", ["parser"]], ["del", "def", "parse", ["parser"]], ["del", "def", "parser_bignum", ["parser"]], ["del", "def", "sat", ["parser"]], ["del", "def", "sepby1", ["parser"]], ["del", "def", "sepby", ["parser"]], ["del", "def", "space", ["parser"]], ["del", "def", "symb", ["parser"]], ["del", "def", "take_char", ["parser"]], ["del", "def", "take_string", ["parser"]], ["del", "def", "take_string_aux", ["parser"]], ["del", "def", "token", ["parser"]], ["del", "def", "parser", []], ["del", "def", "parser_bind", []], ["del", "def", "parser_fmap", []], ["del", "def", "parser_pure", []], ["del", "theorem", "{u", []], ["del", "theorem", "{u}", []]]}, {"oldPath": "tools/tactic/tactic.lean", "newPath": null, "changes": []}]}, {"timestamp": 1500823916, "sha": "bb8b8f80", "message": "refactor(tests): consolidate tests", "changes": [{"oldPath": "tools/tactic/examples.lean", "newPath": "tests/examples.lean", "changes": []}, {"oldPath": "tools/auto/experiments/test1.lean", "newPath": "tests/finish1.lean", "changes": []}, {"oldPath": "tools/auto/experiments/test2.lean", "newPath": "tests/finish2.lean", "changes": []}, {"oldPath": "tools/auto/experiments/test3.lean", "newPath": "tests/finish3.lean", "changes": []}, {"oldPath": "tools/auto/experiments/set_basic.lean", "newPath": "tests/finish_set_basic.lean", "changes": []}, {"oldPath": "tools/parser/modal.lean", "newPath": "tools/parser/modal.lean", "changes": []}]}, {"timestamp": 1500823461, "sha": "ae656439", "message": "refactor(*): use absolute paths", "changes": [{"oldPath": "algebra/group_power.lean", "newPath": "algebra/group_power.lean", "changes": []}, {"oldPath": "algebra/lattice/basic.lean", "newPath": "algebra/lattice/basic.lean", "changes": []}, {"oldPath": "algebra/lattice/basic_experiment.lean", "newPath": "algebra/lattice/basic_experiment.lean", "changes": []}, {"oldPath": "algebra/lattice/boolean_algebra.lean", "newPath": "algebra/lattice/boolean_algebra.lean", "changes": []}, {"oldPath": "algebra/lattice/bounded_lattice.lean", "newPath": "algebra/lattice/bounded_lattice.lean", "changes": []}, {"oldPath": "algebra/lattice/bounded_lattice_experiment.lean", "newPath": "algebra/lattice/bounded_lattice_experiment.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_boolean_algebra.lean", "newPath": "algebra/lattice/complete_boolean_algebra.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_lattice.lean", "newPath": "algebra/lattice/complete_lattice.lean", "changes": []}, {"oldPath": "algebra/lattice/complete_lattice_experiment.lean", "newPath": "algebra/lattice/complete_lattice_experiment.lean", "changes": []}, {"oldPath": "algebra/lattice/default.lean", "newPath": "algebra/lattice/default.lean", "changes": []}, {"oldPath": "algebra/lattice/filter.lean", "newPath": "algebra/lattice/filter.lean", "changes": []}, {"oldPath": "algebra/lattice/fixed_points.lean", "newPath": "algebra/lattice/fixed_points.lean", "changes": []}, {"oldPath": "data/int/basic.lean", "newPath": "data/int/basic.lean", "changes": []}, {"oldPath": "data/int/order.lean", "newPath": "data/int/order.lean", "changes": []}, {"oldPath": "data/list/default.lean", "newPath": "data/list/default.lean", "changes": []}, {"oldPath": "data/list/perm.lean", "newPath": "data/list/perm.lean", "changes": []}, {"oldPath": "data/list/set.lean", "newPath": "data/list/set.lean", "changes": []}, {"oldPath": "data/list/sort.lean", "newPath": "data/list/sort.lean", "changes": []}, {"oldPath": "data/nat/bquant.lean", "newPath": "data/nat/bquant.lean", "changes": []}, {"oldPath": "data/num/bitwise.lean", "newPath": "data/num/bitwise.lean", "changes": []}, {"oldPath": "data/num/lemmas.lean", "newPath": "data/num/lemmas.lean", "changes": []}, {"oldPath": "data/pfun.lean", "newPath": "data/pfun.lean", "changes": []}, {"oldPath": "data/set/default.lean", "newPath": "data/set/default.lean", "changes": []}, {"oldPath": "data/set/finite.lean", "newPath": "data/set/finite.lean", "changes": []}, {"oldPath": "tools/parser/modal.lean", "newPath": "tools/parser/modal.lean", "changes": []}, {"oldPath": "topology/continuity.lean", "newPath": "topology/continuity.lean", "changes": []}, {"oldPath": "topology/uniform_space.lean", "newPath": "topology/uniform_space.lean", "changes": []}]}, {"timestamp": 1500823011, "sha": "deb16814", "message": "refactor(*): import content from lean/library/data and library_dev", "changes": [{"oldPath": null, "newPath": ".gitignore", "changes": []}, {"oldPath": null, "newPath": "algebra/group.lean", "changes": [["add", "theorem", "eq_iff_eq_of_sub_eq_sub", []], ["add", "theorem", "eq_iff_sub_eq_zero", []], ["add", "theorem", "eq_inv_iff_eq_inv", []], ["add", "theorem", "eq_of_mul_inv_eq_one", []], ["add", "theorem", "eq_one_of_inv_eq_one", []], ["add", "theorem", "eq_sub_iff_add_eq", []], ["add", "theorem", "inv_eq_inv_iff_eq", []], ["add", "theorem", "inv_eq_one_iff_eq_one", []], ["add", "theorem", "left_inverse_add_left_sub", []], ["add", "theorem", "left_inverse_add_right_neg_add", []], ["add", "theorem", "left_inverse_inv", []], ["add", "theorem", "left_inverse_neg_add_add_right", []], ["add", "theorem", "left_inverse_sub_add_left", []], ["add", "theorem", "mul_eq_iff_eq_inv_mul", []], ["add", "theorem", "mul_eq_iff_eq_mul_inv", []], ["add", "theorem", "sub_eq_iff_eq_add", []]]}, {"oldPath": null, "newPath": "algebra/group_power.lean", "changes": [["add", "def", "gpow", []], ["add", "theorem", "gpow_add", []], ["add", "theorem", "gpow_comm", []], ["add", "theorem", "inv_pow", []], ["add", "def", "pow", ["monoid"]], ["add", "theorem", "mul_pow", []], ["add", "theorem", "one_pow", []], ["add", "theorem", "pow_add", []], ["add", "theorem", "pow_comm", []], ["add", "theorem", "pow_ge_one_of_ge_one", []], ["add", "def", "pow_int", []], ["add", "theorem", "pow_inv_comm", []], ["add", "theorem", "pow_mul", []], ["add", "def", "pow_nat", []], ["add", "theorem", "pow_one", []], ["add", "theorem", "pow_pos", []], ["add", "theorem", "pow_sub", []], ["add", "theorem", "pow_succ'", []], ["add", "theorem", "pow_succ", []], ["add", "theorem", "pow_zero", []]]}, {"oldPath": null, "newPath": "algebra/lattice/README.md", "changes": []}, {"oldPath": null, "newPath": "algebra/lattice/basic.lean", "changes": [["add", "theorem", "bot_inf_eq", ["lattice"]], ["add", "theorem", "bot_le", ["lattice"]], ["add", "theorem", "bot_sup_eq", ["lattice"]], ["add", "theorem", "bot_unique", ["lattice"]], ["add", "theorem", "eq_bot_iff", ["lattice"]], ["add", "theorem", "eq_top_iff", ["lattice"]], ["add", "theorem", "inf_assoc", ["lattice"]], ["add", "theorem", "inf_bot_eq", ["lattice"]], ["add", "theorem", "inf_comm", ["lattice"]], ["add", "theorem", "inf_eq_top_iff", ["lattice"]], ["add", "theorem", "inf_idem", ["lattice"]], ["add", "theorem", "inf_le_inf", ["lattice"]], ["add", "theorem", "inf_le_left", ["lattice"]], ["add", "theorem", "inf_le_left_of_le", ["lattice"]], ["add", "theorem", "inf_le_right", ["lattice"]], ["add", "theorem", "inf_le_right_of_le", ["lattice"]], ["add", "theorem", "inf_of_le_left", ["lattice"]], ["add", "theorem", "inf_of_le_right", ["lattice"]], ["add", "theorem", "inf_sup_self", ["lattice"]], ["add", "theorem", "inf_top_eq", ["lattice"]], ["add", "theorem", "le_inf", ["lattice"]], ["add", "theorem", "le_inf_iff", ["lattice"]], ["add", "theorem", "le_inf_sup", ["lattice"]], ["add", "theorem", "le_of_inf_eq", ["lattice"]], ["add", "theorem", "le_of_sup_eq", ["lattice"]], ["add", "theorem", "le_sup_left", ["lattice"]], ["add", "theorem", "le_sup_left_of_le", ["lattice"]], ["add", "theorem", "le_sup_right", ["lattice"]], ["add", "theorem", "le_sup_right_of_le", ["lattice"]], ["add", "theorem", "le_top", ["lattice"]], ["add", "theorem", "neq_bot_of_le_neq_bot", ["lattice"]], ["add", "theorem", "sup_assoc", ["lattice"]], ["add", "theorem", "sup_bot_eq", ["lattice"]], ["add", "theorem", "sup_comm", ["lattice"]], ["add", "theorem", "sup_eq_bot_iff", ["lattice"]], ["add", "theorem", "sup_idem", ["lattice"]], ["add", "theorem", "sup_inf_le", ["lattice"]], ["add", "theorem", "sup_inf_self", ["lattice"]], ["add", "theorem", "sup_le", ["lattice"]], ["add", "theorem", "sup_le_iff", ["lattice"]], ["add", "theorem", "sup_le_sup", ["lattice"]], ["add", "theorem", "sup_of_le_left", ["lattice"]], ["add", "theorem", "sup_of_le_right", ["lattice"]], ["add", "theorem", "sup_top_eq", ["lattice"]], ["add", "theorem", "top_inf_eq", ["lattice"]], ["add", "theorem", "top_sup_eq", ["lattice"]], ["add", "theorem", "top_unique", ["lattice"]]]}, {"oldPath": null, "newPath": "algebra/lattice/basic_experiment.lean", "changes": [["add", "theorem", "bot_inf_eq", ["lattice"]], ["add", "theorem", "bot_le", ["lattice"]], ["add", "theorem", "bot_sup_eq", ["lattice"]], ["add", "theorem", "bot_unique", ["lattice"]], ["add", "theorem", "eq_bot_iff", ["lattice"]], ["add", "theorem", "eq_top_iff", ["lattice"]], ["add", "def", "imp", ["lattice"]], ["add", "theorem", "inf_assoc", ["lattice"]], ["add", "theorem", "inf_bot_eq", ["lattice"]], ["add", "theorem", "inf_comm", ["lattice"]], ["add", "theorem", "inf_eq_top_iff", ["lattice"]], ["add", "theorem", "inf_idem", ["lattice"]], ["add", "theorem", "inf_le_inf", ["lattice"]], ["add", "theorem", "inf_le_left'", ["lattice"]], ["add", "theorem", "inf_le_left", ["lattice"]], ["add", "theorem", "inf_le_left_of_le", ["lattice"]], ["add", "theorem", "inf_le_right'", ["lattice"]], ["add", "theorem", "inf_le_right", ["lattice"]], ["add", "theorem", "inf_le_right_of_le", ["lattice"]], ["add", "theorem", "inf_of_le_left", ["lattice"]], ["add", "theorem", "inf_of_le_right", ["lattice"]], ["add", "theorem", "inf_sup_self", ["lattice"]], ["add", "theorem", "inf_top_eq", ["lattice"]], ["add", "theorem", "le_bot_iff", ["lattice"]], ["add", "theorem", "le_inf", ["lattice"]], ["add", "theorem", "le_inf_iff", ["lattice"]], ["add", "theorem", "le_inf_sup", ["lattice"]], ["add", "theorem", "le_of_inf_eq", ["lattice"]], ["add", "theorem", "le_of_sup_eq", ["lattice"]], ["add", "theorem", "le_sup_left'", ["lattice"]], ["add", "theorem", "le_sup_left", ["lattice"]], ["add", "theorem", "le_sup_left_of_le", ["lattice"]], ["add", "theorem", "le_sup_right'", ["lattice"]], ["add", "theorem", "le_sup_right", ["lattice"]], ["add", "theorem", "le_sup_right_of_le", ["lattice"]], ["add", "theorem", "le_top", ["lattice"]], ["add", "theorem", "neq_bot_of_le_neq_bot", ["lattice"]], ["add", "theorem", "sup_assoc", ["lattice"]], ["add", "theorem", "sup_bot_eq", ["lattice"]], ["add", "theorem", "sup_comm", ["lattice"]], ["add", "theorem", "sup_eq_bot_iff", ["lattice"]], ["add", "theorem", "sup_idem", ["lattice"]], ["add", "theorem", "sup_inf_le", ["lattice"]], ["add", "theorem", "sup_inf_self", ["lattice"]], ["add", "theorem", "sup_le", ["lattice"]], ["add", "theorem", "sup_le_iff", ["lattice"]], ["add", "theorem", "sup_le_sup", ["lattice"]], ["add", "theorem", "sup_of_le_left", ["lattice"]], ["add", "theorem", "sup_of_le_right", ["lattice"]], ["add", "theorem", "sup_top_eq", ["lattice"]], ["add", "theorem", "top_inf_eq", ["lattice"]], ["add", "theorem", "top_le_iff", ["lattice"]], ["add", "theorem", "top_sup_eq", ["lattice"]], ["add", "theorem", "top_unique", ["lattice"]], ["add", "theorem", "le_antisymm'", []]]}, {"oldPath": null, "newPath": "algebra/lattice/boolean_algebra.lean", "changes": [["add", "theorem", "inf_neg_eq_bot", ["lattice"]], ["add", "theorem", "inf_sup_left", ["lattice"]], ["add", "theorem", "inf_sup_right", ["lattice"]], ["add", "theorem", "le_neg_of_le_neg", ["lattice"]], ["add", "theorem", "le_sup_inf", ["lattice"]], ["add", "theorem", "neg_bot", ["lattice"]], ["add", "theorem", "neg_eq_neg_iff", ["lattice"]], ["add", "theorem", "neg_eq_neg_of_eq", ["lattice"]], ["add", "theorem", "neg_inf", ["lattice"]], ["add", "theorem", "neg_inf_eq_bot", ["lattice"]], ["add", "theorem", "neg_le_iff_neg_le", ["lattice"]], ["add", "theorem", "neg_le_neg", ["lattice"]], ["add", "theorem", "neg_le_neg_iff_le", ["lattice"]], ["add", "theorem", "neg_le_of_neg_le", ["lattice"]], ["add", "theorem", "neg_neg", ["lattice"]], ["add", "theorem", "neg_sup", ["lattice"]], ["add", "theorem", "neg_sup_eq_top", ["lattice"]], ["add", "theorem", "neg_top", ["lattice"]], ["add", "theorem", "neg_unique", ["lattice"]], ["add", "theorem", "sub_eq", ["lattice"]], ["add", "theorem", "sub_eq_left", ["lattice"]], ["add", "theorem", "sup_inf_left", ["lattice"]], ["add", "theorem", "sup_inf_right", ["lattice"]], ["add", "theorem", "sup_neg_eq_top", ["lattice"]], ["add", "theorem", "sup_sub_same", ["lattice"]]]}, {"oldPath": null, "newPath": "algebra/lattice/bounded_lattice.lean", "changes": [["add", "theorem", "monotone_and", ["lattice"]], ["add", "theorem", "monotone_or", ["lattice"]]]}, {"oldPath": null, "newPath": "algebra/lattice/bounded_lattice_experiment.lean", "changes": [["add", "theorem", "monotone_and", ["lattice"]], ["add", "theorem", "monotone_or", ["lattice"]]]}, {"oldPath": null, "newPath": "algebra/lattice/complete_boolean_algebra.lean", "changes": [["add", "theorem", "inf_Sup_eq", ["lattice"]], ["add", "theorem", "neg_Inf", ["lattice"]], ["add", "theorem", "neg_Sup", ["lattice"]], ["add", "theorem", "neg_infi", ["lattice"]], ["add", "theorem", "neg_supr", ["lattice"]], ["add", "theorem", "sup_Inf_eq", ["lattice"]]]}, {"oldPath": null, "newPath": "algebra/lattice/complete_lattice.lean", "changes": [["add", "def", "Inf", ["lattice"]], ["add", "theorem", "Inf_empty", ["lattice"]], ["add", "theorem", "Inf_eq_infi", ["lattice"]], ["add", "theorem", "Inf_image", ["lattice"]], ["add", "theorem", "Inf_insert", ["lattice"]], ["add", "theorem", "Inf_le", ["lattice"]], ["add", "theorem", "Inf_le_Inf", ["lattice"]], ["add", "theorem", "Inf_le_Sup", ["lattice"]], ["add", "theorem", "Inf_le_iff", ["lattice"]], ["add", "theorem", "Inf_le_of_le", ["lattice"]], ["add", "theorem", "Inf_singleton", ["lattice"]], ["add", "theorem", "Inf_union", ["lattice"]], ["add", "theorem", "Inf_univ", ["lattice"]], ["add", "def", "Sup", ["lattice"]], ["add", "theorem", "Sup_empty", ["lattice"]], ["add", "theorem", "Sup_eq_supr", ["lattice"]], ["add", "theorem", "Sup_image", ["lattice"]], ["add", "theorem", "Sup_insert", ["lattice"]], ["add", "theorem", "Sup_inter_le", ["lattice"]], ["add", "theorem", "Sup_le", ["lattice"]], ["add", "theorem", "Sup_le_Sup", ["lattice"]], ["add", "theorem", "Sup_singleton", ["lattice"]], ["add", "theorem", "Sup_union", ["lattice"]], ["add", "theorem", "Sup_univ", ["lattice"]], ["add", "def", "infi", ["lattice"]], ["add", "theorem", "infi_and", ["lattice"]], ["add", "theorem", "infi_comm", ["lattice"]], ["add", "theorem", "infi_congr_Prop", ["lattice"]], ["add", "theorem", "infi_const", ["lattice"]], ["add", "theorem", "infi_empty", ["lattice"]], ["add", "theorem", "infi_emptyset", ["lattice"]], ["add", "theorem", "infi_exists", ["lattice"]], ["add", "theorem", "infi_false", ["lattice"]], ["add", "theorem", "infi_inf_eq", ["lattice"]], ["add", "theorem", "infi_infi_eq_left", ["lattice"]], ["add", "theorem", "infi_infi_eq_right", ["lattice"]], ["add", "theorem", "infi_insert", ["lattice"]], ["add", "theorem", "infi_le", ["lattice"]], ["add", "theorem", "infi_le_infi2", ["lattice"]], ["add", "theorem", "infi_le_infi", ["lattice"]], ["add", "theorem", "infi_le_infi_const", ["lattice"]], ["add", "theorem", "infi_le_of_le", ["lattice"]], ["add", "theorem", "infi_or", ["lattice"]], ["add", "theorem", "infi_prod", ["lattice"]], ["add", "theorem", "infi_sigma", ["lattice"]], ["add", "theorem", "infi_singleton", ["lattice"]], ["add", "theorem", "infi_subtype", ["lattice"]], ["add", "theorem", "infi_sum", ["lattice"]], ["add", "theorem", "infi_true", ["lattice"]], ["add", "theorem", "infi_union", ["lattice"]], ["add", "theorem", "infi_unit", ["lattice"]], ["add", "theorem", "infi_univ", ["lattice"]], ["add", "theorem", "insert_of_has_insert", ["lattice"]], ["add", "theorem", "le_Inf", ["lattice"]], ["add", "theorem", "le_Inf_inter", ["lattice"]], ["add", "theorem", "le_Sup", ["lattice"]], ["add", "theorem", "le_Sup_iff", ["lattice"]], ["add", "theorem", "le_Sup_of_le", ["lattice"]], ["add", "theorem", "le_infi", ["lattice"]], ["add", "theorem", "le_infi_iff", ["lattice"]], ["add", "theorem", "le_supr", ["lattice"]], ["add", "theorem", "le_supr_of_le", ["lattice"]], ["add", "theorem", "monotone_Inf_of_monotone", ["lattice"]], ["add", "theorem", "monotone_Sup_of_monotone", ["lattice"]], ["add", "def", "supr", ["lattice"]], ["add", "theorem", "supr_and", ["lattice"]], ["add", "theorem", "supr_comm", ["lattice"]], ["add", "theorem", "supr_congr_Prop", ["lattice"]], ["add", "theorem", "supr_const", ["lattice"]], ["add", "theorem", "supr_empty", ["lattice"]], ["add", "theorem", "supr_emptyset", ["lattice"]], ["add", "theorem", "supr_exists", ["lattice"]], ["add", "theorem", "supr_false", ["lattice"]], ["add", "theorem", "supr_insert", ["lattice"]], ["add", "theorem", "supr_le", ["lattice"]], ["add", "theorem", "supr_le_iff", ["lattice"]], ["add", "theorem", "supr_le_supr2", ["lattice"]], ["add", "theorem", "supr_le_supr", ["lattice"]], ["add", "theorem", "supr_le_supr_const", ["lattice"]], ["add", "theorem", "supr_or", ["lattice"]], ["add", "theorem", "supr_prod", ["lattice"]], ["add", "theorem", "supr_sigma", ["lattice"]], ["add", "theorem", "supr_singleton", ["lattice"]], ["add", "theorem", "supr_subtype", ["lattice"]], ["add", "theorem", "supr_sum", ["lattice"]], ["add", "theorem", "supr_sup_eq", ["lattice"]], ["add", "theorem", "supr_supr_eq_left", ["lattice"]], ["add", "theorem", "supr_supr_eq_right", ["lattice"]], ["add", "theorem", "supr_true", ["lattice"]], ["add", "theorem", "supr_union", ["lattice"]], ["add", "theorem", "supr_unit", ["lattice"]], ["add", "theorem", "supr_univ", ["lattice"]], ["add", "theorem", "subset_union_left", ["set"]], ["add", "theorem", "subset_union_right", ["set"]]]}, {"oldPath": null, "newPath": "algebra/lattice/complete_lattice_experiment.lean", "changes": [["add", "theorem", "insert_def", []], ["add", "theorem", "insert_eq_of_mem", []], ["add", "theorem", "insert_of_has_insert", []], ["add", "theorem", "inter_def", []], ["add", "theorem", "inter_left_comm", []], ["add", "def", "Inf", ["lattice"]], ["add", "theorem", "Inf_empty", ["lattice"]], ["add", "theorem", "Inf_eq_infi", ["lattice"]], ["add", "theorem", "Inf_image", ["lattice"]], ["add", "theorem", "Inf_insert", ["lattice"]], ["add", "theorem", "Inf_le", ["lattice"]], ["add", "theorem", "Inf_le_Inf", ["lattice"]], ["add", "theorem", "Inf_le_Sup", ["lattice"]], ["add", "theorem", "Inf_le_iff", ["lattice"]], ["add", "theorem", "Inf_le_of_le", ["lattice"]], ["add", "theorem", "Inf_singleton", ["lattice"]], ["add", "theorem", "Inf_union", ["lattice"]], ["add", "theorem", "Inf_univ", ["lattice"]], ["add", "def", "Sup", ["lattice"]], ["add", "theorem", "Sup_empty", ["lattice"]], ["add", "theorem", "Sup_eq_supr", ["lattice"]], ["add", "theorem", "Sup_image", ["lattice"]], ["add", "theorem", "Sup_insert", ["lattice"]], ["add", "theorem", "Sup_inter_le", ["lattice"]], ["add", "theorem", "Sup_le", ["lattice"]], ["add", "theorem", "Sup_le_Sup", ["lattice"]], ["add", "theorem", "Sup_singleton", ["lattice"]], ["add", "theorem", "Sup_union", ["lattice"]], ["add", "theorem", "Sup_univ", ["lattice"]], ["add", "theorem", "foo'", ["lattice"]], ["add", "theorem", "foo", ["lattice"]], ["add", "def", "infi", ["lattice"]], ["add", "theorem", "infi_and", ["lattice"]], ["add", "theorem", "infi_comm", ["lattice"]], ["add", "theorem", "infi_congr_Prop", ["lattice"]], ["add", "theorem", "infi_const", ["lattice"]], ["add", "theorem", "infi_empty", ["lattice"]], ["add", "theorem", "infi_emptyset", ["lattice"]], ["add", "theorem", "infi_exists", ["lattice"]], ["add", "theorem", "infi_false", ["lattice"]], ["add", "theorem", "infi_inf_eq", ["lattice"]], ["add", "theorem", "infi_infi_eq_left", ["lattice"]], ["add", "theorem", "infi_infi_eq_right", ["lattice"]], ["add", "theorem", "infi_insert", ["lattice"]], ["add", "theorem", "infi_le'", ["lattice"]], ["add", "theorem", "infi_le", ["lattice"]], ["add", "theorem", "infi_le_infi2", ["lattice"]], ["add", "theorem", "infi_le_infi", ["lattice"]], ["add", "theorem", "infi_le_infi_const", ["lattice"]], ["add", "theorem", "infi_le_of_le", ["lattice"]], ["add", "theorem", "infi_or", ["lattice"]], ["add", "theorem", "infi_prod", ["lattice"]], ["add", "theorem", "infi_sigma", ["lattice"]], ["add", "theorem", "infi_singleton", ["lattice"]], ["add", "theorem", "infi_subtype", ["lattice"]], ["add", "theorem", "infi_sum", ["lattice"]], ["add", "theorem", "infi_true", ["lattice"]], ["add", "theorem", "infi_union", ["lattice"]], ["add", "theorem", "infi_unit", ["lattice"]], ["add", "theorem", "infi_univ", ["lattice"]], ["add", "theorem", "insert_of_has_insert", ["lattice"]], ["add", "theorem", "le_Inf", ["lattice"]], ["add", "theorem", "le_Inf_inter", ["lattice"]], ["add", "theorem", "le_Sup", ["lattice"]], ["add", "theorem", "le_Sup_iff", ["lattice"]], ["add", "theorem", "le_Sup_of_le", ["lattice"]], ["add", "theorem", "le_infi", ["lattice"]], ["add", "theorem", "le_infi_iff", ["lattice"]], ["add", "theorem", "le_supr'", ["lattice"]], ["add", "theorem", "le_supr", ["lattice"]], ["add", "theorem", "le_supr_of_le", ["lattice"]], ["add", "theorem", "monotone_Inf_of_monotone", ["lattice"]], ["add", "theorem", "monotone_Sup_of_monotone", ["lattice"]], ["add", "def", "supr", ["lattice"]], ["add", "theorem", "supr_and", ["lattice"]], ["add", "theorem", "supr_comm", ["lattice"]], ["add", "theorem", "supr_congr_Prop", ["lattice"]], ["add", "theorem", "supr_const", ["lattice"]], ["add", "theorem", "supr_empty", ["lattice"]], ["add", "theorem", "supr_emptyset", ["lattice"]], ["add", "theorem", "supr_exists", ["lattice"]], ["add", "theorem", "supr_false", ["lattice"]], ["add", "theorem", "supr_insert", ["lattice"]], ["add", "theorem", "supr_le", ["lattice"]], ["add", "theorem", "supr_le_iff", ["lattice"]], ["add", "theorem", "supr_le_supr2", ["lattice"]], ["add", "theorem", "supr_le_supr", ["lattice"]], ["add", "theorem", "supr_le_supr_const", ["lattice"]], ["add", "theorem", "supr_or", ["lattice"]], ["add", "theorem", "supr_prod", ["lattice"]], ["add", "theorem", "supr_sigma", ["lattice"]], ["add", "theorem", "supr_singleton", ["lattice"]], ["add", "theorem", "supr_subtype", ["lattice"]], ["add", "theorem", "supr_sum", ["lattice"]], ["add", "theorem", "supr_sup_eq", ["lattice"]], ["add", "theorem", "supr_supr_eq_left", ["lattice"]], ["add", "theorem", "supr_supr_eq_right", ["lattice"]], ["add", "theorem", "supr_true", ["lattice"]], ["add", "theorem", "supr_union", ["lattice"]], ["add", "theorem", "supr_unit", ["lattice"]], ["add", "theorem", "supr_univ", ["lattice"]], ["add", "theorem", "mem_insert_iff", []], ["add", "theorem", "mem_inter_eq", []], ["add", "theorem", "mem_set_of", []], ["add", "theorem", "mem_set_of_eq", []], ["add", "theorem", "mem_singleton", []], ["add", "theorem", "mem_singleton_iff", []], ["add", "theorem", "mem_union_eq", []], ["add", "theorem", "mem_univ_eq", []], ["add", "theorem", "nmem_set_of_eq", []], ["add", "theorem", "set_eq_def", []], ["add", "theorem", "set_of_false", []], ["add", "theorem", "singleton_def", []], ["add", "theorem", "singleton_eq_singleton_iff", []], ["add", "theorem", "subset_def", []], ["add", "theorem", "subset_insert", []], ["add", "theorem", "subset_univ", []], ["add", "theorem", "union_def", []], ["add", "theorem", "union_left_comm", []]]}, {"oldPath": null, "newPath": "algebra/lattice/default.lean", "changes": []}, {"oldPath": null, "newPath": "algebra/lattice/filter.lean", "changes": [["add", "theorem", "Union_subset_Union2", []], ["add", "theorem", "Union_subset_Union", []], ["add", "theorem", "Union_subset_Union_const", []], ["add", "theorem", "bind_assoc", []], ["add", "theorem", "compl_image_set_of", []], ["add", "theorem", "diff_empty", []], ["add", "theorem", "diff_neq_empty", []], ["add", "def", "directed", []], ["add", "theorem", "directed_of_chain", []], ["add", "def", "directed_on", []], ["add", "theorem", "directed_on_Union", []], ["add", "theorem", "eq_of_sup_eq_inf_eq", []], ["add", "theorem", "Inf_sets_eq_finite", ["filter"]], ["add", "theorem", "Inter_mem_sets", ["filter"]], ["add", "def", "at_bot", ["filter"]], ["add", "def", "at_top", ["filter"]], ["add", "theorem", "bind_def", ["filter"]], ["add", "theorem", "bind_mono2", ["filter"]], ["add", "theorem", "bind_mono", ["filter"]], ["add", "theorem", "bind_sup", ["filter"]], ["add", "theorem", "binfi_sup_eq", ["filter"]], ["add", "def", "cofinite", ["filter"]], ["add", "theorem", "empty_in_sets_eq_bot", ["filter"]], ["add", "theorem", "exists_sets_subset_iff", ["filter"]], ["add", "theorem", "exists_ultrafilter", ["filter"]], ["add", "theorem", "filter_eq", ["filter"]], ["add", "theorem", "filter_eq_bot_of_not_nonempty", ["filter"]], ["add", "theorem", "fmap_principal", ["filter"]], ["add", "theorem", "forall_sets_neq_empty_iff_neq_bot", ["filter"]], ["add", "theorem", "image_mem_map", ["filter"]], ["add", "theorem", "inf_principal", ["filter"]], ["add", "theorem", "infi_neq_bot_iff_of_directed", ["filter"]], ["add", "theorem", "infi_neq_bot_of_directed", ["filter"]], ["add", "theorem", "infi_sets_eq'", ["filter"]], ["add", "theorem", "infi_sets_eq", ["filter"]], ["add", "theorem", "infi_sets_induct", ["filter"]], ["add", "theorem", "infi_sup_eq", ["filter"]], ["add", "theorem", "inhabited_of_mem_sets", ["filter"]], ["add", "theorem", "inter_mem_sets", ["filter"]], ["add", "def", "join", ["filter"]], ["add", "theorem", "join_principal_eq_Sup", ["filter"]], ["add", "theorem", "le_lift'", ["filter"]], ["add", "theorem", "le_map_vmap", ["filter"]], ["add", "theorem", "le_of_ultrafilter", ["filter"]], ["add", "theorem", "le_principal_iff", ["filter"]], ["add", "theorem", "le_vmap_iff_map_le", ["filter"]], ["add", "theorem", "le_vmap_map", ["filter"]], ["add", "theorem", "lift'_cong", ["filter"]], ["add", "theorem", "lift'_id", ["filter"]], ["add", "theorem", "lift'_inf_principal_eq", ["filter"]], ["add", "theorem", "lift'_infi", ["filter"]], ["add", "theorem", "lift'_lift'_assoc", ["filter"]], ["add", "theorem", "lift'_lift_assoc", ["filter"]], ["add", "theorem", "lift'_mono'", ["filter"]], ["add", "theorem", "lift'_mono", ["filter"]], ["add", "theorem", "lift'_neq_bot_iff", ["filter"]], ["add", "theorem", "lift'_principal", ["filter"]], ["add", "theorem", "lift_assoc", ["filter"]], ["add", "theorem", "lift_comm", ["filter"]], ["add", "theorem", "lift_infi'", ["filter"]], ["add", "theorem", "lift_infi", ["filter"]], ["add", "theorem", "lift_lift'_assoc", ["filter"]], ["add", "theorem", "lift_lift'_same_eq_lift'", ["filter"]], ["add", "theorem", "lift_lift'_same_le_lift'", ["filter"]], ["add", "theorem", "lift_lift_same_eq_lift", ["filter"]], ["add", "theorem", "lift_lift_same_le_lift", ["filter"]], ["add", "theorem", "lift_mono'", ["filter"]], ["add", "theorem", "lift_mono", ["filter"]], ["add", "theorem", "lift_neq_bot_iff", ["filter"]], ["add", "theorem", "lift_principal", ["filter"]], ["add", "theorem", "lift_sets_eq", ["filter"]], ["add", "def", "map", ["filter"]], ["add", "theorem", "map_binfi_eq", ["filter"]], ["add", "theorem", "map_bot", ["filter"]], ["add", "theorem", "map_compose", ["filter"]], ["add", "theorem", "map_eq_bot_iff", ["filter"]], ["add", "theorem", "map_eq_vmap_of_inverse", ["filter"]], ["add", "theorem", "map_id", ["filter"]], ["add", "theorem", "map_infi_eq", ["filter"]], ["add", "theorem", "map_infi_le", ["filter"]], ["add", "theorem", "map_lift'_eq2", ["filter"]], ["add", "theorem", "map_lift'_eq", ["filter"]], ["add", "theorem", "map_lift_eq2", ["filter"]], ["add", "theorem", "map_lift_eq", ["filter"]], ["add", "theorem", "map_mono", ["filter"]], ["add", "theorem", "map_principal", ["filter"]], ["add", "theorem", "map_sup", ["filter"]], ["add", "theorem", "map_swap_vmap_swap_eq", ["filter"]], ["add", "theorem", "map_vmap_le", ["filter"]], ["add", "theorem", "mem_bind_sets", ["filter"]], ["add", "theorem", "mem_bot_sets", ["filter"]], ["add", "theorem", "mem_inf_sets", ["filter"]], ["add", "theorem", "mem_inf_sets_of_left", ["filter"]], ["add", "theorem", "mem_inf_sets_of_right", ["filter"]], ["add", "theorem", "mem_infi_sets", ["filter"]], ["add", "theorem", "mem_join_sets", ["filter"]], ["add", "theorem", "mem_lift'", ["filter"]], ["add", "theorem", "mem_lift'_iff", ["filter"]], ["add", "theorem", "mem_lift", ["filter"]], ["add", "theorem", "mem_lift_iff", ["filter"]], ["add", "theorem", "mem_map", ["filter"]], ["add", "theorem", "mem_of_finite_Union_ultrafilter", ["filter"]], ["add", "theorem", "mem_of_finite_sUnion_ultrafilter", ["filter"]], ["add", "theorem", "mem_or_compl_mem_of_ultrafilter", ["filter"]], ["add", "theorem", "mem_or_mem_of_ultrafilter", ["filter"]], ["add", "theorem", "mem_principal_sets", ["filter"]], ["add", "theorem", "mem_prod_iff", ["filter"]], ["add", "theorem", "mem_prod_same_iff", ["filter"]], ["add", "theorem", "mem_pure", ["filter"]], ["add", "theorem", "mem_return_sets", ["filter"]], ["add", "theorem", "mem_sets_of_neq_bot", ["filter"]], ["add", "theorem", "mem_sup_sets", ["filter"]], ["add", "theorem", "mem_top_sets_iff", ["filter"]], ["add", "theorem", "mem_vmap_of_mem", ["filter"]], ["add", "theorem", "monotone_lift'", ["filter"]], ["add", "theorem", "monotone_lift", ["filter"]], ["add", "theorem", "monotone_map", ["filter"]], ["add", "theorem", "monotone_mem_sets", ["filter"]], ["add", "theorem", "monotone_principal", ["filter"]], ["add", "theorem", "monotone_vmap", ["filter"]], ["add", "def", "principal", ["filter"]], ["add", "theorem", "principal_bind", ["filter"]], ["add", "theorem", "principal_empty", ["filter"]], ["add", "theorem", "principal_eq_bot_iff", ["filter"]], ["add", "theorem", "principal_eq_iff_eq", ["filter"]], ["add", "theorem", "principal_le_lift'", ["filter"]], ["add", "theorem", "principal_mono", ["filter"]], ["add", "theorem", "principal_univ", ["filter"]], ["add", "theorem", "prod_comm", ["filter"]], ["add", "theorem", "prod_inf_prod", ["filter"]], ["add", "theorem", "prod_lift'_lift'", ["filter"]], ["add", "theorem", "prod_lift_lift", ["filter"]], ["add", "theorem", "prod_map_map_eq", ["filter"]], ["add", "theorem", "prod_mem_prod", ["filter"]], ["add", "theorem", "prod_mono", ["filter"]], ["add", "theorem", "prod_neq_bot", ["filter"]], ["add", "theorem", "prod_principal_principal", ["filter"]], ["add", "theorem", "prod_same_eq", ["filter"]], ["add", "theorem", "prod_vmap_vmap_eq", ["filter"]], ["add", "theorem", "pure_def", ["filter"]], ["add", "theorem", "return_neq_bot", ["filter"]], ["add", "theorem", "seq_mono", ["filter"]], ["add", "theorem", "sup_join", ["filter"]], ["add", "theorem", "sup_principal", ["filter"]], ["add", "theorem", "supr_join", ["filter"]], ["add", "theorem", "supr_map", ["filter"]], ["add", "theorem", "supr_principal", ["filter"]], ["add", "theorem", "supr_sets_eq", ["filter"]], ["add", "def", "towards", ["filter"]], ["add", "def", "ultrafilter", ["filter"]], ["add", "theorem", "ultrafilter_map", ["filter"]], ["add", "theorem", "ultrafilter_of_le", ["filter"]], ["add", "theorem", "ultrafilter_of_spec", ["filter"]], ["add", "theorem", "ultrafilter_of_split", ["filter"]], ["add", "theorem", "ultrafilter_of_ultrafilter", ["filter"]], ["add", "theorem", "ultrafilter_pure", ["filter"]], ["add", "theorem", "ultrafilter_ultrafilter_of", ["filter"]], ["add", "theorem", "ultrafilter_unique", ["filter"]], ["add", "theorem", "univ_mem_sets'", ["filter"]], ["add", "theorem", "univ_mem_sets", ["filter"]], ["add", "theorem", "vimage_mem_vmap", ["filter"]], ["add", "def", "vmap", ["filter"]], ["add", "theorem", "vmap_eq_lift'", ["filter"]], ["add", "theorem", "vmap_lift'_eq2", ["filter"]], ["add", "theorem", "vmap_lift'_eq", ["filter"]], ["add", "theorem", "vmap_lift_eq2", ["filter"]], ["add", "theorem", "vmap_lift_eq", ["filter"]], ["add", "theorem", "vmap_map", ["filter"]], ["add", "theorem", "vmap_mono", ["filter"]], ["add", "theorem", "vmap_neq_bot", ["filter"]], ["add", "theorem", "vmap_neq_bot_of_surj", ["filter"]], ["add", "theorem", "vmap_principal", ["filter"]], ["add", "theorem", "vmap_vmap_comp", ["filter"]], ["add", "structure", "filter", []], ["add", "theorem", "implies_implies_true_iff", []], ["add", "theorem", "inf_eq_bot_iff_le_compl", []], ["add", "theorem", "Inf_eq_finite_sets", ["lattice"]], ["add", "theorem", "Sup_le_iff", ["lattice"]], ["add", "theorem", "map_bind", []], ["add", "theorem", "neg_subset_neg_iff_subset", []], ["add", "theorem", "not_not_mem_iff", []], ["add", "theorem", "fst_swap", ["prod"]], ["add", "theorem", "eta", ["prod", "mk"]], ["add", "theorem", "snd_swap", ["prod"]], ["add", "def", "swap", ["prod"]], ["add", "theorem", "swap_prod_mk", ["prod"]], ["add", "theorem", "swap_swap", ["prod"]], ["add", "theorem", "swap_swap_eq", ["prod"]], ["add", "theorem", "pure_seq_eq_map", []], ["add", "theorem", "sUnion_eq_Union", []], ["add", "theorem", "sUnion_mono", []], ["add", "theorem", "seq_bind_eq", []], ["add", "theorem", "seq_eq_bind_map", []], ["add", "theorem", "bind_def", ["set"]], ["add", "theorem", "diff_right_antimono", ["set"]], ["add", "theorem", "fmap_eq_image", ["set"]], ["add", "theorem", "image_eq_vimage_of_inverse", ["set"]], ["add", "theorem", "image_swap_eq_vimage_swap", ["set"]], ["add", "theorem", "image_swap_prod", ["set"]], ["add", "theorem", "mem_image_iff_of_inverse", ["set"]], ["add", "theorem", "mem_prod_eq", ["set"]], ["add", "theorem", "mem_seq_iff", ["set"]], ["add", "theorem", "monotone_inter", ["set"]], ["add", "theorem", "monotone_prod", ["set"]], ["add", "theorem", "monotone_set_of", ["set"]], ["add", "theorem", "ne_empty_iff_exists_mem", ["set"]], ["add", "theorem", "prod_image_image_eq", ["set"]], ["add", "theorem", "prod_inter_prod", ["set"]], ["add", "theorem", "prod_mk_mem_set_prod_eq", ["set"]], ["add", "theorem", "prod_mono", ["set"]], ["add", "theorem", "prod_neq_empty_iff", ["set"]], ["add", "theorem", "prod_singleton_singleton", ["set"]], ["add", "theorem", "prod_vimage_eq", ["set"]], ["add", "theorem", "set_of_mem_eq", ["set"]], ["add", "theorem", "vimage_set_of_eq", ["set"]], ["add", "theorem", "singleton_neq_emptyset", []], ["add", "def", "upwards", []]]}, {"oldPath": null, "newPath": "algebra/lattice/fixed_points.lean", "changes": [["add", "theorem", "ge_of_eq", []], ["add", "def", "gfp", ["lattice"]], ["add", "theorem", "gfp_comp", ["lattice"]], ["add", "theorem", "gfp_eq", ["lattice"]], ["add", "theorem", "gfp_gfp", ["lattice"]], ["add", "theorem", "gfp_induct", ["lattice"]], ["add", "theorem", "gfp_le", ["lattice"]], ["add", "theorem", "le_gfp", ["lattice"]], ["add", "theorem", "le_lfp", ["lattice"]], ["add", "def", "lfp", ["lattice"]], ["add", "theorem", "lfp_comp", ["lattice"]], ["add", "theorem", "lfp_eq", ["lattice"]], ["add", "theorem", "lfp_induct", ["lattice"]], ["add", "theorem", "lfp_le", ["lattice"]], ["add", "theorem", "lfp_lfp", ["lattice"]], ["add", "theorem", "monotone_gfp", ["lattice"]], ["add", "theorem", "monotone_lfp", ["lattice"]]]}, {"oldPath": null, "newPath": "algebra/lattice/zorn.lean", "changes": [["add", "def", "chain", ["zorn"]], ["add", "theorem", "chain_chain_closure", ["zorn"]], ["add", "inductive", "chain_closure", ["zorn"]], ["add", "theorem", "chain_closure_closure", ["zorn"]], ["add", "theorem", "chain_closure_empty", ["zorn"]], ["add", "theorem", "chain_closure_succ_fixpoint", ["zorn"]], ["add", "theorem", "chain_closure_succ_fixpoint_iff", ["zorn"]], ["add", "theorem", "chain_closure_total", ["zorn"]], ["add", "theorem", "chain_insert", ["zorn"]], ["add", "theorem", "chain_succ", ["zorn"]], ["add", "def", "is_max_chain", ["zorn"]], ["add", "def", "max_chain", ["zorn"]], ["add", "theorem", "max_chain_spec", ["zorn"]], ["add", "def", "succ_chain", ["zorn"]], ["add", "theorem", "succ_increasing", ["zorn"]], ["add", "theorem", "succ_spec", ["zorn"]], ["add", "def", "super_chain", ["zorn"]], ["add", "theorem", "super_of_not_max", ["zorn"]], ["add", "theorem", "zorn", ["zorn"]], ["add", "theorem", "zorn_weak_order", ["zorn"]]]}, {"oldPath": null, "newPath": "algebra/order.lean", "changes": [["add", "theorem", "comp_le_comp_left_of_monotone", []], ["add", "theorem", "le_dual_eq_le", []], ["add", "theorem", "le_max_left_iff_true", []], ["add", "theorem", "le_max_right_iff_true", []], ["add", "theorem", "left_comm", ["max"]], ["add", "theorem", "right_comm", ["max"]], ["add", "theorem", "min_right_comm", []], ["add", "def", "monotone", []], ["add", "theorem", "monotone_app", []], ["add", "theorem", "monotone_comp", []], ["add", "theorem", "monotone_const", []], ["add", "theorem", "monotone_id", []], ["add", "theorem", "monotone_lam", []], ["add", "def", "weak_order_dual", []]]}, {"oldPath": null, "newPath": "algebra/ring.lean", "changes": [["add", "theorem", "eq_of_mul_eq_mul_left_of_ne_zero", []], ["add", "theorem", "eq_of_mul_eq_mul_right_of_ne_zero", []], ["add", "theorem", "mul_add_eq_mul_add_iff_sub_mul_add_eq", []], ["add", "theorem", "mul_neg_one_eq_neg", []], ["add", "theorem", "ne_zero_and_ne_zero_of_mul_ne_zero", []], ["add", "theorem", "sub_mul_add_eq_of_mul_add_eq_mul_add", []]]}, {"oldPath": null, "newPath": "data/bitvec.lean", "changes": [["add", "def", "adc", ["bitvec"]], ["add", "def", "add_lsb", ["bitvec"]], ["add", "def", "and", ["bitvec"]], ["add", "def", "append", ["bitvec"]], ["add", "def", "bits_to_nat", ["bitvec"]], ["add", "theorem", "bits_to_nat_to_bool", ["bitvec"]], ["add", "theorem", "bits_to_nat_to_list", ["bitvec"]], ["add", "def", "fill_shr", ["bitvec"]], ["add", "def", "not", ["bitvec"]], ["add", "theorem", "of_nat_succ", ["bitvec"]], ["add", "def", "or", ["bitvec"]], ["add", "def", "sbb", ["bitvec"]], ["add", "def", "sborrow", ["bitvec"]], ["add", "def", "sge", ["bitvec"]], ["add", "def", "sgt", ["bitvec"]], ["add", "def", "shl", ["bitvec"]], ["add", "def", "sle", ["bitvec"]], ["add", "def", "slt", ["bitvec"]], ["add", "def", "sshr", ["bitvec"]], ["add", "theorem", "to_nat_append", ["bitvec"]], ["add", "theorem", "to_nat_of_nat", ["bitvec"]], ["add", "def", "uborrow", ["bitvec"]], ["add", "def", "uge", ["bitvec"]], ["add", "def", "ugt", ["bitvec"]], ["add", "def", "ule", ["bitvec"]], ["add", "def", "ult", ["bitvec"]], ["add", "def", "ushr", ["bitvec"]], ["add", "def", "xor", ["bitvec"]], ["add", "def", "bitvec", []]]}, {"oldPath": null, "newPath": "data/bool.lean", "changes": [["add", "theorem", "absurd_of_eq_ff_of_eq_tt", ["bool"]], ["add", "theorem", "band_assoc", ["bool"]], ["add", "theorem", "band_comm", ["bool"]], ["add", "theorem", "band_elim_left", ["bool"]], ["add", "theorem", "band_elim_right", ["bool"]], ["add", "theorem", "band_eq_ff", ["bool"]], ["add", "theorem", "band_eq_tt", ["bool"]], ["add", "theorem", "band_ff", ["bool"]], ["add", "theorem", "band_intro", ["bool"]], ["add", "theorem", "band_left_comm", ["bool"]], ["add", "theorem", "band_self", ["bool"]], ["add", "theorem", "band_tt", ["bool"]], ["add", "theorem", "bnot_bnot", ["bool"]], ["add", "theorem", "bnot_false", ["bool"]], ["add", "theorem", "bnot_true", ["bool"]], ["add", "theorem", "bor_assoc", ["bool"]], ["add", "theorem", "bor_comm", ["bool"]], ["add", "theorem", "bor_eq_ff", ["bool"]], ["add", "theorem", "bor_eq_tt", ["bool"]], ["add", "theorem", "bor_ff", ["bool"]], ["add", "theorem", "bor_inl", ["bool"]], ["add", "theorem", "bor_inr", ["bool"]], ["add", "theorem", "bor_left_comm", ["bool"]], ["add", "theorem", "bor_tt", ["bool"]], ["add", "def", "bxor", ["bool"]], ["add", "theorem", "bxor_assoc", ["bool"]], ["add", "theorem", "bxor_comm", ["bool"]], ["add", "theorem", "bxor_ff", ["bool"]], ["add", "theorem", "bxor_left_comm", ["bool"]], ["add", "theorem", "bxor_self", ["bool"]], ["add", "theorem", "bxor_tt", ["bool"]], ["add", "theorem", "coe_tt", ["bool"]], ["add", "theorem", "cond_ff", ["bool"]], ["add", "theorem", "cond_tt", ["bool"]], ["add", "theorem", "dichotomy", ["bool"]], ["add", "theorem", "eq_ff_of_bnot_eq_tt", ["bool"]], ["add", "theorem", "eq_ff_of_ne_tt", ["bool"]], ["add", "theorem", "eq_tt_of_bnot_eq_ff", ["bool"]], ["add", "theorem", "eq_tt_of_ne_ff", ["bool"]], ["add", "theorem", "ff_band", ["bool"]], ["add", "theorem", "ff_bor", ["bool"]], ["add", "theorem", "ff_bxor", ["bool"]], ["add", "theorem", "ff_bxor_ff", ["bool"]], ["add", "theorem", "ff_bxor_tt", ["bool"]], ["add", "theorem", "or_of_bor_eq", ["bool"]], ["add", "theorem", "tt_band", ["bool"]], ["add", "theorem", "tt_bor", ["bool"]], ["add", "theorem", "tt_bxor", ["bool"]], ["add", "theorem", "tt_bxor_ff", ["bool"]], ["add", "theorem", "tt_bxor_tt", ["bool"]]]}, {"oldPath": null, "newPath": "data/fin.lean", "changes": [["add", "theorem", "eq_of_lt_succ_of_not_lt", []], ["add", "theorem", "lt_succ_of_lt", []], ["add", "def", "raise_fin", []]]}, {"oldPath": null, "newPath": "data/hash_map.lean", "changes": [["add", "def", "as_list", ["bucket_array"]], ["add", "def", "foldl", ["bucket_array"]], ["add", "theorem", "foldl_eq", ["bucket_array"]], ["add", "theorem", "foldl_eq_lem", ["bucket_array"]], ["add", "theorem", "mem_as_list", ["bucket_array"]], ["add", "def", "modify", ["bucket_array"]], ["add", "def", "read", ["bucket_array"]], ["add", "def", "write", ["bucket_array"]], ["add", "def", "bucket_array", []], ["add", "theorem", "append_of_modify", ["hash_map"]], ["add", "theorem", "append_of_modify_aux", ["hash_map"]], ["add", "def", "contains", ["hash_map"]], ["add", "def", "contains_aux", ["hash_map"]], ["add", "theorem", "contains_aux_iff", ["hash_map"]], ["add", "theorem", "contains_iff", ["hash_map"]], ["add", "def", "entries", ["hash_map"]], ["add", "theorem", "entries_empty", ["hash_map"]], ["add", "def", "erase", ["hash_map"]], ["add", "def", "erase_aux", ["hash_map"]], ["add", "def", "find", ["hash_map"]], ["add", "def", "find_aux", ["hash_map"]], ["add", "theorem", "find_aux_iff", ["hash_map"]], ["add", "theorem", "find_empty", ["hash_map"]], ["add", "theorem", "find_erase", ["hash_map"]], ["add", "theorem", "find_erase_eq", ["hash_map"]], ["add", "theorem", "find_erase_ne", ["hash_map"]], ["add", "theorem", "find_iff", ["hash_map"]], ["add", "theorem", "find_insert", ["hash_map"]], ["add", "theorem", "find_insert_eq", ["hash_map"]], ["add", "theorem", "find_insert_ne", ["hash_map"]], ["add", "def", "fold", ["hash_map"]], ["add", "def", "insert", ["hash_map"]], ["add", "def", "insert_all", ["hash_map"]], ["add", "theorem", "insert_lemma", ["hash_map"]], ["add", "def", "keys", ["hash_map"]], ["add", "theorem", "keys_empty", ["hash_map"]], ["add", "theorem", "mem_erase", ["hash_map"]], ["add", "theorem", "mem_insert", ["hash_map"]], ["add", "theorem", "mk_as_list", ["hash_map"]], ["add", "def", "mk_idx", ["hash_map"]], ["add", "theorem", "not_contains_empty", ["hash_map"]], ["add", "def", "of_list", ["hash_map"]], ["add", "def", "reinsert_aux", ["hash_map"]], ["add", "def", "replace_aux", ["hash_map"]], ["add", "theorem", "as_list_length", ["hash_map", "valid"]], ["add", "theorem", "as_list_nodup", ["hash_map", "valid"]], ["add", "theorem", "contains_aux_iff", ["hash_map", "valid"]], ["add", "theorem", "eq'", ["hash_map", "valid"]], ["add", "theorem", "eq", ["hash_map", "valid"]], ["add", "theorem", "erase", ["hash_map", "valid"]], ["add", "theorem", "erase_aux", ["hash_map", "valid"]], ["add", "theorem", "find_aux_iff", ["hash_map", "valid"]], ["add", "theorem", "insert", ["hash_map", "valid"]], ["add", "theorem", "mk", ["hash_map", "valid"]], ["add", "theorem", "modify", ["hash_map", "valid"]], ["add", "theorem", "modify_aux1", ["hash_map", "valid"]], ["add", "theorem", "modify_aux2", ["hash_map", "valid"]], ["add", "theorem", "nodup", ["hash_map", "valid"]], ["add", "theorem", "replace", ["hash_map", "valid"]], ["add", "theorem", "replace_aux", ["hash_map", "valid"]], ["add", "def", "valid", ["hash_map"]], ["add", "theorem", "eq", ["hash_map", "valid_aux"]], ["add", "theorem", "insert_lemma1", ["hash_map", "valid_aux"]], ["add", "theorem", "nodup", ["hash_map", "valid_aux"]], ["add", "theorem", "unfold_cons", ["hash_map", "valid_aux"]], ["add", "inductive", "valid_aux", ["hash_map"]], ["add", "structure", "hash_map", []], ["add", "def", "mk_hash_map", []]]}, {"oldPath": null, "newPath": "data/int/basic.lean", "changes": [["add", "theorem", "neg_add_neg", ["int"]], ["add", "theorem", "of_nat_add_neg_succ_of_nat_of_ge", ["int"]], ["add", "theorem", "of_nat_add_neg_succ_of_nat_of_lt", ["int"]], ["add", "def", "nat_succ_eq_int_succ", []], ["add", "theorem", "neg_nat_succ", []], ["add", "theorem", "neg_pred", []], ["add", "theorem", "neg_succ", []], ["add", "theorem", "neg_succ_of_nat_eq'", []], ["add", "theorem", "of_nat_sub", []], ["add", "def", "pred", []], ["add", "theorem", "pred_nat_succ", []], ["add", "theorem", "pred_neg_pred", []], ["add", "theorem", "pred_succ", []], ["add", "def", "rec_nat_on", []], ["add", "theorem", "rec_nat_on_neg", []], ["add", "def", "succ", []], ["add", "theorem", "succ_neg_nat_succ", []], ["add", "theorem", "succ_neg_succ", []], ["add", "theorem", "succ_pred", []]]}, {"oldPath": null, "newPath": "data/int/order.lean", "changes": []}, {"oldPath": null, "newPath": "data/lazy_list.lean", "changes": [["add", "def", "append", ["lazy_list"]], ["add", "def", "approx", ["lazy_list"]], ["add", "def", "filter", ["lazy_list"]], ["add", "def", "for", ["lazy_list"]], ["add", "def", "head", ["lazy_list"]], ["add", "def", "join", ["lazy_list"]], ["add", "def", "map", ["lazy_list"]], ["add", "def", "map₂", ["lazy_list"]], ["add", "def", "nth", ["lazy_list"]], ["add", "def", "of_list", ["lazy_list"]], ["add", "def", "singleton", ["lazy_list"]], ["add", "def", "tail", ["lazy_list"]], ["add", "def", "to_list", ["lazy_list"]], ["add", "def", "zip", ["lazy_list"]], ["add", "inductive", "lazy_list", []]]}, {"oldPath": null, "newPath": "data/list/basic.lean", "changes": [["add", "theorem", "assoc", ["list", "append"]], ["add", "theorem", "append_concat", ["list"]], ["add", "theorem", "concat_append", ["list"]], ["add", "theorem", "concat_cons", ["list"]], ["add", "theorem", "concat_ne_nil", ["list"]], ["add", "theorem", "concat_nil", ["list"]], ["add", "theorem", "cons_inj", ["list"]], ["add", "theorem", "cons_ne_nil", ["list"]], ["add", "def", "count", ["list"]], ["add", "theorem", "count_append", ["list"]], ["add", "theorem", "count_concat", ["list"]], ["add", "theorem", "count_cons'", ["list"]], ["add", "theorem", "count_cons", ["list"]], ["add", "theorem", "count_cons_ge_count", ["list"]], ["add", "theorem", "count_cons_of_ne", ["list"]], ["add", "theorem", "count_cons_self", ["list"]], ["add", "theorem", "count_eq_zero_of_not_mem", ["list"]], ["add", "theorem", "count_nil", ["list"]], ["add", "theorem", "count_pos_of_mem", ["list"]], ["add", "theorem", "count_singleton", ["list"]], ["add", "theorem", "head_cons", ["list"]], ["add", "theorem", "head_eq_of_cons_eq", ["list"]], ["add", "theorem", "index_of_cons", ["list"]], ["add", "theorem", "index_of_cons_of_eq", ["list"]], ["add", "theorem", "index_of_cons_of_ne", ["list"]], ["add", "theorem", "index_of_le_length", ["list"]], ["add", "theorem", "index_of_lt_length", ["list"]], ["add", "theorem", "index_of_nil", ["list"]], ["add", "theorem", "index_of_nth", ["list"]], ["add", "theorem", "index_of_of_not_mem", ["list"]], ["add", "def", "inth", ["list"]], ["add", "theorem", "inth_succ", ["list"]], ["add", "theorem", "inth_zero", ["list"]], ["add", "def", "ith", ["list"]], ["add", "theorem", "ith_succ", ["list"]], ["add", "theorem", "ith_zero", ["list"]], ["add", "theorem", "last_congr", ["list"]], ["add", "theorem", "last_cons_cons", ["list"]], ["add", "theorem", "last_singleton", ["list"]], ["add", "theorem", "length_taken_le", ["list"]], ["add", "theorem", "mem_iff_count_pos", ["list"]], ["add", "theorem", "mem_of_count_pos", ["list"]], ["add", "theorem", "not_mem_of_count_eq_zero", ["list"]], ["add", "theorem", "not_mem_of_index_of_eq_length", ["list"]], ["add", "theorem", "nth_eq_some", ["list"]], ["add", "def", "permutations", ["list"]], ["add", "def", "F", ["list", "permutations_aux"]], ["add", "def", "eqn_1", ["list", "permutations_aux"]], ["add", "def", "eqn_2", ["list", "permutations_aux"]], ["add", "def", "permutations_aux2", ["list"]], ["add", "def", "permutations_aux", ["list"]], ["add", "theorem", "tail_cons", ["list"]], ["add", "theorem", "tail_eq_of_cons_eq", ["list"]], ["add", "theorem", "tail_nil", ["list"]], ["add", "theorem", "taken_all", ["list"]], ["add", "theorem", "taken_all_of_ge", ["list"]], ["add", "theorem", "taken_cons", ["list"]], ["add", "theorem", "taken_nil", ["list"]], ["add", "theorem", "taken_zero", ["list"]]]}, {"oldPath": null, "newPath": "data/list/comb.lean", "changes": [["add", "theorem", "all_cons", ["list"]], ["add", "theorem", "all_eq_tt_iff", ["list"]], ["add", "theorem", "all_eq_tt_of_forall", ["list"]], ["add", "theorem", "all_nil", ["list"]], ["add", "theorem", "any_cons", ["list"]], ["add", "theorem", "any_eq_tt_iff", ["list"]], ["add", "theorem", "any_nil", ["list"]], ["add", "theorem", "any_of_mem", ["list"]], ["add", "def", "decidable_exists_mem", ["list"]], ["add", "def", "decidable_forall_mem", ["list"]], ["add", "def", "dinj", ["list"]], ["add", "def", "dinj₁", ["list"]], ["add", "def", "dmap", ["list"]], ["add", "theorem", "dmap_cons_of_neg", ["list"]], ["add", "theorem", "dmap_cons_of_pos", ["list"]], ["add", "theorem", "dmap_nil", ["list"]], ["add", "theorem", "eq_of_mem_map_pair₁", ["list"]], ["add", "theorem", "exists_mem_cons_iff", ["list"]], ["add", "theorem", "exists_mem_cons_of", ["list"]], ["add", "theorem", "exists_mem_cons_of_exists", ["list"]], ["add", "theorem", "exists_of_any_eq_tt", ["list"]], ["add", "theorem", "exists_of_mem_dmap", ["list"]], ["add", "def", "flat", ["list"]], ["add", "theorem", "foldl_append", ["list"]], ["add", "theorem", "foldl_cons", ["list"]], ["add", "theorem", "foldl_eq_foldr", ["list"]], ["add", "theorem", "foldl_eq_of_comm_of_assoc", ["list"]], ["add", "theorem", "foldl_nil", ["list"]], ["add", "theorem", "foldl_reverse", ["list"]], ["add", "theorem", "foldr_append", ["list"]], ["add", "theorem", "foldr_cons", ["list"]], ["add", "theorem", "foldr_nil", ["list"]], ["add", "theorem", "foldr_reverse", ["list"]], ["add", "theorem", "forall_mem_cons", ["list"]], ["add", "theorem", "forall_mem_cons_iff", ["list"]], ["add", "theorem", "forall_mem_eq_tt_of_all_eq_tt", ["list"]], ["add", "theorem", "forall_mem_nil", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_cons", ["list"]], ["add", "theorem", "length_mapAccumR", ["list"]], ["add", "theorem", "length_mapAccumR₂", ["list"]], ["add", "theorem", "length_map_accumr", ["list"]], ["add", "theorem", "length_map_accumr₂", ["list"]], ["add", "theorem", "length_product", ["list"]], ["add", "theorem", "length_replicate", ["list"]], ["add", "def", "mapAccumR", ["list"]], ["add", "def", "mapAccumR₂", ["list"]], ["add", "def", "map_accumr", ["list"]], ["add", "def", "map_accumr₂", ["list"]], ["add", "theorem", "map_dmap_of_inv_of_pos", ["list"]], ["add", "theorem", "map₂_nil1", ["list"]], ["add", "theorem", "map₂_nil2", ["list"]], ["add", "theorem", "mem_dmap", ["list"]], ["add", "theorem", "mem_of_dinj_of_mem_dmap", ["list"]], ["add", "theorem", "mem_of_mem_map_pair₁", ["list"]], ["add", "theorem", "mem_of_mem_product_left", ["list"]], ["add", "theorem", "mem_of_mem_product_right", ["list"]], ["add", "theorem", "mem_product", ["list"]], ["add", "theorem", "nil_product", ["list"]], ["add", "theorem", "not_exists_mem_nil", ["list"]], ["add", "theorem", "not_mem_dmap_of_dinj_of_not_mem", ["list"]], ["add", "theorem", "of_forall_mem_cons", ["list"]], ["add", "theorem", "or_exists_of_exists_mem_cons", ["list"]], ["add", "def", "product", ["list"]], ["add", "theorem", "product_cons", ["list"]], ["add", "theorem", "product_nil", ["list"]], ["add", "def", "replicate", ["list"]], ["add", "theorem", "unzip_cons'", ["list"]], ["add", "theorem", "unzip_cons", ["list"]], ["add", "theorem", "unzip_nil", ["list"]], ["add", "theorem", "zip_cons_cons", ["list"]], ["add", "theorem", "zip_nil_left", ["list"]], ["add", "theorem", "zip_nil_right", ["list"]], ["add", "theorem", "zip_unzip", ["list"]]]}, {"oldPath": null, "newPath": "data/list/default.lean", "changes": []}, {"oldPath": null, "newPath": "data/list/perm.lean", "changes": [["add", "theorem", "count_eq_count_of_perm", ["list", "perm"]], ["add", "theorem", "eq_nil_of_perm_nil", ["list", "perm"]], ["add", "theorem", "eq_singleton_of_perm", ["list", "perm"]], ["add", "theorem", "eq_singleton_of_perm_inv", ["list", "perm"]], ["add", "theorem", "eqv", ["list", "perm"]], ["add", "theorem", "erase_perm_erase_of_perm", ["list", "perm"]], ["add", "theorem", "foldl_eq_of_perm", ["list", "perm"]], ["add", "theorem", "foldr_eq_of_perm", ["list", "perm"]], ["add", "theorem", "length_eq_length_of_perm", ["list", "perm"]], ["add", "theorem", "length_eq_of_qeq", ["list", "perm"]], ["add", "theorem", "mem_cons_of_qeq", ["list", "perm"]], ["add", "theorem", "mem_head_of_qeq", ["list", "perm"]], ["add", "theorem", "mem_iff_mem_of_perm", ["list", "perm"]], ["add", "theorem", "mem_of_perm", ["list", "perm"]], ["add", "theorem", "mem_tail_of_qeq", ["list", "perm"]], ["add", "theorem", "nodup_of_perm_of_nodup", ["list", "perm"]], ["add", "theorem", "not_mem_of_perm", ["list", "perm"]], ["add", "theorem", "not_perm_nil_cons", ["list", "perm"]], ["add", "theorem", "perm_app", ["list", "perm"]], ["add", "theorem", "perm_app_comm", ["list", "perm"]], ["add", "theorem", "perm_app_inv", ["list", "perm"]], ["add", "theorem", "perm_app_inv_left", ["list", "perm"]], ["add", "theorem", "perm_app_inv_right", ["list", "perm"]], ["add", "theorem", "perm_app_left", ["list", "perm"]], ["add", "theorem", "perm_app_right", ["list", "perm"]], ["add", "theorem", "perm_cons_app", ["list", "perm"]], ["add", "theorem", "perm_cons_app_cons", ["list", "perm"]], ["add", "theorem", "perm_cons_app_simp", ["list", "perm"]], ["add", "theorem", "perm_cons_inv", ["list", "perm"]], ["add", "theorem", "perm_erase", ["list", "perm"]], ["add", "theorem", "perm_erase_dup_of_perm", ["list", "perm"]], ["add", "theorem", "perm_ext", ["list", "perm"]], ["add", "theorem", "perm_filter", ["list", "perm"]], ["add", "theorem", "perm_iff_forall_count_eq_count", ["list", "perm"]], ["add", "theorem", "perm_iff_forall_mem_count_eq_count", ["list", "perm"]], ["add", "theorem", "perm_induction_on", ["list", "perm"]], ["add", "theorem", "perm_insert", ["list", "perm"]], ["add", "theorem", "perm_insert_insert", ["list", "perm"]], ["add", "theorem", "perm_inter", ["list", "perm"]], ["add", "theorem", "perm_inter_left", ["list", "perm"]], ["add", "theorem", "perm_inter_right", ["list", "perm"]], ["add", "theorem", "perm_inv_core", ["list", "perm"]], ["add", "theorem", "perm_map", ["list", "perm"]], ["add", "theorem", "perm_middle", ["list", "perm"]], ["add", "theorem", "perm_middle_simp", ["list", "perm"]], ["add", "theorem", "perm_of_forall_count_eq", ["list", "perm"]], ["add", "theorem", "perm_of_qeq", ["list", "perm"]], ["add", "theorem", "perm_product", ["list", "perm"]], ["add", "theorem", "perm_product_left", ["list", "perm"]], ["add", "theorem", "perm_product_right", ["list", "perm"]], ["add", "theorem", "perm_rev", ["list", "perm"]], ["add", "theorem", "perm_rev_simp", ["list", "perm"]], ["add", "theorem", "perm_union", ["list", "perm"]], ["add", "theorem", "perm_union_left", ["list", "perm"]], ["add", "theorem", "perm_union_right", ["list", "perm"]], ["add", "inductive", "qeq", ["list", "perm"]], ["add", "theorem", "qeq_app", ["list", "perm"]], ["add", "theorem", "qeq_of_mem", ["list", "perm"]], ["add", "theorem", "qeq_split", ["list", "perm"]], ["add", "theorem", "xswap", ["list", "perm"]], ["add", "inductive", "perm", ["list"]]]}, {"oldPath": null, "newPath": "data/list/set.lean", "changes": [["add", "theorem", "comm", ["list", "disjoint"]], ["add", "def", "disjoint", ["list"]], ["add", "theorem", "disjoint_append_of_disjoint_left", ["list"]], ["add", "theorem", "disjoint_cons_of_not_mem_of_disjoint", ["list"]], ["add", "theorem", "disjoint_left", ["list"]], ["add", "theorem", "disjoint_nil_left", ["list"]], ["add", "theorem", "disjoint_nil_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_left_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_left_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_right_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_append_right_right", ["list"]], ["add", "theorem", "disjoint_of_disjoint_cons_left", ["list"]], ["add", "theorem", "disjoint_of_disjoint_cons_right", ["list"]], ["add", "theorem", "disjoint_of_nodup_append", ["list"]], ["add", "theorem", "disjoint_of_subset_left", ["list"]], ["add", "theorem", "disjoint_of_subset_right", ["list"]], ["add", "theorem", "disjoint_right", ["list"]], ["add", "theorem", "dmap_nodup_of_dinj", ["list"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["list"]], ["add", "theorem", "erase_append_left", ["list"]], ["add", "theorem", "erase_append_right", ["list"]], ["add", "theorem", "erase_cons", ["list"]], ["add", "theorem", "erase_cons_head", ["list"]], ["add", "theorem", "erase_cons_tail", ["list"]], ["add", "def", "erase_dup", ["list"]], ["add", "theorem", "erase_dup_cons_of_mem", ["list"]], ["add", "theorem", "erase_dup_cons_of_not_mem", ["list"]], ["add", "theorem", "erase_dup_eq_of_nodup", ["list"]], ["add", "theorem", "erase_dup_nil", ["list"]], ["add", "theorem", "erase_dup_sublist", ["list"]], ["add", "theorem", "erase_dup_subset", ["list"]], ["add", "theorem", "erase_nil", ["list"]], ["add", "theorem", "erase_of_not_mem", ["list"]], ["add", "theorem", "erase_sublist", ["list"]], ["add", "theorem", "erase_subset", ["list"]], ["add", "theorem", "forall_mem_insert_of_forall_mem", ["list"]], ["add", "theorem", "forall_mem_inter_of_forall_left", ["list"]], ["add", "theorem", "forall_mem_inter_of_forall_right", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_union_left", ["list"]], ["add", "theorem", "forall_mem_of_forall_mem_union_right", ["list"]], ["add", "theorem", "forall_mem_union", ["list"]], ["add", "theorem", "def", ["list", "insert"]], ["add", "theorem", "insert_nil", ["list"]], ["add", "theorem", "insert_of_mem", ["list"]], ["add", "theorem", "insert_of_not_mem", ["list"]], ["add", "theorem", "inter_cons_of_mem", ["list"]], ["add", "theorem", "inter_cons_of_not_mem", ["list"]], ["add", "theorem", "inter_eq_nil_of_disjoint", ["list"]], ["add", "theorem", "inter_nil", ["list"]], ["add", "theorem", "length_erase_of_mem", ["list"]], ["add", "theorem", "length_insert_of_mem", ["list"]], ["add", "theorem", "length_insert_of_not_mem", ["list"]], ["add", "theorem", "length_upto", ["list"]], ["add", "theorem", "lt_of_mem_upto", ["list"]], ["add", "theorem", "mem_erase_dup", ["list"]], ["add", "theorem", "mem_erase_dup_iff", ["list"]], ["add", "theorem", "mem_erase_of_ne_of_mem", ["list"]], ["add", "theorem", "mem_erase_of_nodup", ["list"]], ["add", "theorem", "mem_insert_iff", ["list"]], ["add", "theorem", "mem_insert_of_mem", ["list"]], ["add", "theorem", "mem_insert_self", ["list"]], ["add", "theorem", "mem_inter_iff", ["list"]], ["add", "theorem", "mem_inter_of_mem_of_mem", ["list"]], ["add", "theorem", "mem_of_mem_erase", ["list"]], ["add", "theorem", "mem_of_mem_erase_dup", ["list"]], ["add", "theorem", "mem_of_mem_inter_left", ["list"]], ["add", "theorem", "mem_of_mem_inter_right", ["list"]], ["add", "theorem", "mem_or_mem_of_mem_union", ["list"]], ["add", "theorem", "mem_union_iff", ["list"]], ["add", "theorem", "mem_union_left", ["list"]], ["add", "theorem", "mem_union_right", ["list"]], ["add", "theorem", "mem_upto_of_lt", ["list"]], ["add", "theorem", "mem_upto_succ_of_mem_upto", ["list"]], ["add", "inductive", "nodup", ["list"]], ["add", "theorem", "nodup_app_comm", ["list"]], ["add", "theorem", "nodup_append_of_nodup_of_nodup_of_disjoint", ["list"]], ["add", "theorem", "nodup_concat", ["list"]], ["add", "theorem", "nodup_cons", ["list"]], ["add", "theorem", "nodup_erase_dup", ["list"]], ["add", "theorem", "nodup_erase_of_nodup", ["list"]], ["add", "theorem", "nodup_filter", ["list"]], ["add", "theorem", "nodup_head", ["list"]], ["add", "theorem", "nodup_insert", ["list"]], ["add", "theorem", "nodup_inter_of_nodup", ["list"]], ["add", "theorem", "nodup_map", ["list"]], ["add", "theorem", "nodup_middle", ["list"]], ["add", "theorem", "nodup_nil", ["list"]], ["add", "theorem", "nodup_of_nodup_append_left", ["list"]], ["add", "theorem", "nodup_of_nodup_append_right", ["list"]], ["add", "theorem", "nodup_of_nodup_cons", ["list"]], ["add", "theorem", "nodup_of_nodup_map", ["list"]], ["add", "theorem", "nodup_of_sublist", ["list"]], ["add", "theorem", "nodup_product", ["list"]], ["add", "theorem", "nodup_singleton", ["list"]], ["add", "theorem", "nodup_union_of_nodup_of_nodup", ["list"]], ["add", "theorem", "nodup_upto", ["list"]], ["add", "theorem", "not_mem_of_nodup_cons", ["list"]], ["add", "theorem", "not_nodup_cons_of_mem", ["list"]], ["add", "theorem", "not_nodup_cons_of_not_nodup", ["list"]], ["add", "theorem", "subset_erase_dup", ["list"]], ["add", "theorem", "union_cons", ["list"]], ["add", "theorem", "union_nil", ["list"]], ["add", "def", "upto", ["list"]], ["add", "theorem", "upto_ne_nil_of_ne_zero", ["list"]], ["add", "theorem", "upto_nil", ["list"]], ["add", "theorem", "upto_step", ["list"]], ["add", "theorem", "upto_succ", ["list"]]]}, {"oldPath": null, "newPath": "data/list/sort.lean", "changes": [["add", "theorem", "forall_mem_rel_of_sorted_cons", ["list"]], ["add", "def", "insertion_sort", ["list"]], ["add", "theorem", "length_split_le", ["list"]], ["add", "theorem", "length_split_lt", ["list"]], ["add", "def", "merge", ["list"]], ["add", "def", "merge_sort", ["list"]], ["add", "theorem", "merge_sort_cons_cons", ["list"]], ["add", "def", "ordered_insert", ["list"]], ["add", "theorem", "perm_insertion_sort", ["list"]], ["add", "theorem", "perm_merge", ["list"]], ["add", "theorem", "perm_merge_sort", ["list"]], ["add", "theorem", "perm_ordered_insert", ["list"]], ["add", "theorem", "perm_split", ["list"]], ["add", "def", "sorted", ["list"]], ["add", "theorem", "sorted_cons", ["list"]], ["add", "theorem", "sorted_insert_sort", ["list"]], ["add", "theorem", "sorted_merge", ["list"]], ["add", "theorem", "sorted_merge_sort", ["list"]], ["add", "theorem", "sorted_nil", ["list"]], ["add", "theorem", "sorted_of_sorted_cons", ["list"]], ["add", "theorem", "sorted_ordered_insert", ["list"]], ["add", "theorem", "sorted_singleton", ["list"]], ["add", "def", "split", ["list"]], ["add", "theorem", "split_cons_of_eq", ["list"]], ["add", "theorem", "add_pos_iff_pos_or_pos", ["nat"]], ["add", "theorem", "add_pos_left", ["nat"]], ["add", "theorem", "add_pos_right", ["nat"]], ["add", "theorem", "lt_succ_iff_le", ["nat"]], ["add", "theorem", "succ_le_succ_iff", ["nat"]]]}, {"oldPath": null, "newPath": "data/nat/basic.lean", "changes": [["add", "def", "iterate", []], ["add", "theorem", "add_eq_addl", ["nat"]], ["add", "theorem", "add_one", ["nat"]], ["add", "theorem", "add_one_ne_zero", ["nat"]], ["add", "def", "addl", ["nat"]], ["add", "theorem", "addl_succ_left", ["nat"]], ["add", "theorem", "addl_succ_right", ["nat"]], ["add", "theorem", "addl_zero_left", ["nat"]], ["add", "theorem", "addl_zero_right", ["nat"]], ["add", "theorem", "discriminate", ["nat"]], ["add", "theorem", "eq_zero_of_add_eq_zero", ["nat"]], ["add", "theorem", "eq_zero_or_eq_succ_pred", ["nat"]], ["add", "theorem", "exists_eq_succ_of_ne_zero", ["nat"]], ["add", "theorem", "one_add", ["nat"]], ["add", "theorem", "one_succ_zero", ["nat"]], ["add", "theorem", "sub_induction", ["nat"]], ["add", "theorem", "succ_add_eq_succ_add", ["nat"]], ["add", "theorem", "succ_inj", ["nat"]], ["add", "theorem", "two_step_induction", ["nat"]], ["add", "theorem", "zero_has_zero", ["nat"]]]}, {"oldPath": null, "newPath": "data/nat/bquant.lean", "changes": [["add", "def", "ball'", []], ["add", "def", "ball", []], ["add", "theorem", "ball_of_ball_succ'", []], ["add", "theorem", "ball_of_ball_succ", []], ["add", "theorem", "ball_succ_of_ball", []], ["add", "theorem", "ball_zero'", []], ["add", "theorem", "ball_zero", []], ["add", "theorem", "not_ball_of_not", []], ["add", "theorem", "not_ball_succ_of_not_ball", []], ["add", "def", "step_p", []]]}, {"oldPath": null, "newPath": "data/nat/gcd.lean", "changes": [["add", "theorem", "comprime_one_left", ["nat"]], ["add", "theorem", "comprime_one_right", ["nat"]], ["add", "theorem", "coprime_div_gcd_div_gcd", ["nat"]], ["add", "theorem", "coprime_mul", ["nat"]], ["add", "theorem", "coprime_mul_right", ["nat"]], ["add", "theorem", "coprime_of_coprime_dvd_left", ["nat"]], ["add", "theorem", "coprime_of_coprime_dvd_right", ["nat"]], ["add", "theorem", "coprime_of_coprime_mul_left", ["nat"]], ["add", "theorem", "coprime_of_coprime_mul_left_right", ["nat"]], ["add", "theorem", "coprime_of_coprime_mul_right", ["nat"]], ["add", "theorem", "coprime_of_coprime_mul_right_right", ["nat"]], ["add", "theorem", "coprime_of_dvd'", ["nat"]], ["add", "theorem", "coprime_of_dvd", ["nat"]], ["add", "theorem", "coprime_pow", ["nat"]], ["add", "theorem", "coprime_pow_left", ["nat"]], ["add", "theorem", "coprime_pow_right", ["nat"]], ["add", "theorem", "coprime_swap", ["nat"]], ["add", "theorem", "dvd_gcd", ["nat"]], ["add", "theorem", "dvd_lcm_left", ["nat"]], ["add", "theorem", "dvd_lcm_right", ["nat"]], ["add", "theorem", "dvd_of_coprime_of_dvd_mul_left", ["nat"]], ["add", "theorem", "dvd_of_coprime_of_dvd_mul_right", ["nat"]], ["add", "theorem", "eq_zero_of_gcd_eq_zero_left", ["nat"]], ["add", "theorem", "eq_zero_of_gcd_eq_zero_right", ["nat"]], ["add", "theorem", "exists_coprime", ["nat"]], ["add", "theorem", "exists_eq_prod_and_dvd_and_dvd", ["nat"]], ["add", "theorem", "gcd_assoc", ["nat"]], ["add", "theorem", "gcd_comm", ["nat"]], ["add", "theorem", "gcd_div", ["nat"]], ["add", "theorem", "gcd_dvd", ["nat"]], ["add", "theorem", "gcd_dvd_gcd_mul_left", ["nat"]], ["add", "theorem", "gcd_dvd_gcd_mul_left_right", ["nat"]], ["add", "theorem", "gcd_dvd_gcd_mul_right", ["nat"]], ["add", "theorem", "gcd_dvd_gcd_mul_right_right", ["nat"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_left", ["nat"]], ["add", "theorem", "gcd_dvd_gcd_of_dvd_right", ["nat"]], ["add", "theorem", "gcd_dvd_left", ["nat"]], ["add", "theorem", "gcd_dvd_right", ["nat"]], ["add", "theorem", "gcd_eq_one_of_coprime", ["nat"]], ["add", "theorem", "gcd_mul_lcm", ["nat"]], ["add", "theorem", "gcd_mul_left", ["nat"]], ["add", "theorem", "gcd_mul_left_cancel_of_coprime", ["nat"]], ["add", "theorem", "gcd_mul_left_cancel_of_coprime_right", ["nat"]], ["add", "theorem", "gcd_mul_right", ["nat"]], ["add", "theorem", "gcd_mul_right_cancel_of_coprime", ["nat"]], ["add", "theorem", "gcd_mul_right_cancel_of_coprime_right", ["nat"]], ["add", "theorem", "gcd_one_right", ["nat"]], ["add", "theorem", "gcd_pos_of_pos_left", ["nat"]], ["add", "theorem", "gcd_pos_of_pos_right", ["nat"]], ["add", "theorem", "lcm_assoc", ["nat"]], ["add", "theorem", "lcm_comm", ["nat"]], ["add", "theorem", "lcm_dvd", ["nat"]], ["add", "theorem", "lcm_one_left", ["nat"]], ["add", "theorem", "lcm_one_right", ["nat"]], ["add", "theorem", "lcm_self", ["nat"]], ["add", "theorem", "lcm_zero_left", ["nat"]], ["add", "theorem", "lcm_zero_right", ["nat"]], ["add", "theorem", "not_coprime_of_dvd_of_dvd", ["nat"]]]}, {"oldPath": null, "newPath": "data/nat/sub.lean", "changes": [["add", "theorem", "def", ["nat", "dist"]], ["add", "theorem", "triangle_inequality", ["nat", "dist"]], ["add", "def", "dist", ["nat"]], ["add", "theorem", "dist_add_add_left", ["nat"]], ["add", "theorem", "dist_add_add_right", ["nat"]], ["add", "theorem", "dist_comm", ["nat"]], ["add", "theorem", "dist_eq_intro", ["nat"]], ["add", "theorem", "dist_eq_sub_of_ge", ["nat"]], ["add", "theorem", "dist_eq_sub_of_le", ["nat"]], ["add", "theorem", "dist_eq_zero", ["nat"]], ["add", "theorem", "dist_mul_left", ["nat"]], ["add", "theorem", "dist_mul_right", ["nat"]], ["add", "theorem", "dist_pos_of_ne", ["nat"]], ["add", "theorem", "dist_self", ["nat"]], ["add", "theorem", "dist_succ_succ", ["nat"]], ["add", "theorem", "dist_zero_left", ["nat"]], ["add", "theorem", "dist_zero_right", ["nat"]], ["add", "theorem", "eq_of_dist_eq_zero", ["nat"]]]}, {"oldPath": null, "newPath": "data/num/basic.lean", "changes": [["add", "def", "cast_num", []], ["add", "def", "cast_pos_num", []], ["add", "def", "of_snum", ["int"]], ["add", "def", "of_znum", ["int"]], ["add", "def", "of_num", ["nat"]], ["add", "def", "of_pos_num", ["nat"]], ["add", "def", "bit", ["num"]], ["add", "def", "cmp", ["num"]], ["add", "def", "of_nat", ["num"]], ["add", "def", "pred", ["num"]], ["add", "def", "size", ["num"]], ["add", "def", "succ'", ["num"]], ["add", "def", "succ", ["num"]], ["add", "def", "to_znum", ["num"]], ["add", "inductive", "num", []], ["add", "def", "bit0", ["nzsnum"]], ["add", "def", "bit1", ["nzsnum"]], ["add", "def", "drec'", ["nzsnum"]], ["add", "def", "head", ["nzsnum"]], ["add", "def", "not", ["nzsnum"]], ["add", "def", "sign", ["nzsnum"]], ["add", "def", "tail", ["nzsnum"]], ["add", "inductive", "nzsnum", []], ["add", "def", "bit", ["pos_num"]], ["add", "def", "cmp", ["pos_num"]], ["add", "def", "is_one", ["pos_num"]], ["add", "def", "of_nat", ["pos_num"]], ["add", "def", "of_nat_succ", ["pos_num"]], ["add", "def", "pred'", ["pos_num"]], ["add", "def", "pred", ["pos_num"]], ["add", "def", "psub", ["pos_num"]], ["add", "def", "size", ["pos_num"]], ["add", "def", "succ", ["pos_num"]], ["add", "inductive", "pos_num", []], ["add", "def", "bit0", ["snum"]], ["add", "def", "bit1", ["snum"]], ["add", "def", "bit", ["snum"]], ["add", "theorem", "bit_one", ["snum"]], ["add", "theorem", "bit_zero", ["snum"]], ["add", "def", "bits", ["snum"]], ["add", "def", "cadd", ["snum"]], ["add", "def", "czadd", ["snum"]], ["add", "def", "drec'", ["snum"]], ["add", "def", "head", ["snum"]], ["add", "def", "not", ["snum"]], ["add", "def", "pred", ["snum"]], ["add", "def", "rec'", ["snum"]], ["add", "def", "sign", ["snum"]], ["add", "def", "succ", ["snum"]], ["add", "def", "tail", ["snum"]], ["add", "def", "test_bit", ["snum"]], ["add", "inductive", "snum", []], ["add", "def", "pred", ["znum"]], ["add", "def", "succ", ["znum"]], ["add", "def", "zneg", ["znum"]], ["add", "inductive", "znum", []]]}, {"oldPath": null, "newPath": "data/num/bitwise.lean", "changes": [["add", "def", "land", ["num"]], ["add", "def", "ldiff", ["num"]], ["add", "def", "lor", ["num"]], ["add", "def", "lxor", ["num"]], ["add", "def", "one_bits", ["num"]], ["add", "def", "shiftl", ["num"]], ["add", "def", "shiftr", ["num"]], ["add", "def", "test_bit", ["num"]], ["add", "def", "land", ["pos_num"]], ["add", "def", "ldiff", ["pos_num"]], ["add", "def", "lor", ["pos_num"]], ["add", "def", "lxor", ["pos_num"]], ["add", "def", "one_bits", ["pos_num"]], ["add", "def", "shiftl", ["pos_num"]], ["add", "def", "shiftr", ["pos_num"]], ["add", "def", "test_bit", ["pos_num"]]]}, {"oldPath": null, "newPath": "data/num/lemmas.lean", "changes": [["add", "theorem", "add_of_nat", ["num"]], ["add", "theorem", "add_succ", ["num"]], ["add", "theorem", "add_to_nat", ["num"]], ["add", "theorem", "add_zero", ["num"]], ["add", "theorem", "bit_to_nat", ["num"]], ["add", "theorem", "bitwise_to_nat", ["num"]], ["add", "theorem", "cmp_dec", ["num"]], ["add", "theorem", "cmp_swap", ["num"]], ["add", "theorem", "land_to_nat", ["num"]], ["add", "theorem", "ldiff_to_nat", ["num"]], ["add", "theorem", "le_iff_cmp", ["num"]], ["add", "theorem", "lor_to_nat", ["num"]], ["add", "theorem", "lt_iff_cmp", ["num"]], ["add", "theorem", "lxor_to_nat", ["num"]], ["add", "theorem", "mul_to_nat", ["num"]], ["add", "theorem", "of_nat_inj", ["num"]], ["add", "theorem", "of_to_nat", ["num"]], ["add", "theorem", "one_to_nat", ["num"]], ["add", "theorem", "pred_to_nat", ["num"]], ["add", "theorem", "shiftl_to_nat", ["num"]], ["add", "theorem", "shiftr_to_nat", ["num"]], ["add", "theorem", "succ'_to_nat", ["num"]], ["add", "theorem", "succ_to_nat", ["num"]], ["add", "theorem", "test_bit_to_nat", ["num"]], ["add", "theorem", "to_nat_inj", ["num"]], ["add", "theorem", "to_of_nat", ["num"]], ["add", "theorem", "zero_add", ["num"]], ["add", "theorem", "zero_to_nat", ["num"]], ["add", "theorem", "add_one", ["pos_num"]], ["add", "theorem", "add_succ", ["pos_num"]], ["add", "theorem", "add_to_nat", ["pos_num"]], ["add", "theorem", "bit0_of_bit0", ["pos_num"]], ["add", "theorem", "bit1_of_bit1", ["pos_num"]], ["add", "theorem", "bit_to_nat", ["pos_num"]], ["add", "theorem", "cmp_dec", ["pos_num"]], ["add", "theorem", "cmp_dec_lemma", ["pos_num"]], ["add", "theorem", "cmp_swap", ["pos_num"]], ["add", "theorem", "le_iff_cmp", ["pos_num"]], ["add", "theorem", "lt_iff_cmp", ["pos_num"]], ["add", "theorem", "mul_to_nat", ["pos_num"]], ["add", "theorem", "of_to_nat", ["pos_num"]], ["add", "theorem", "one_add", ["pos_num"]], ["add", "theorem", "one_to_nat", ["pos_num"]], ["add", "theorem", "pred'_to_nat", ["pos_num"]], ["add", "theorem", "pred_to_nat", ["pos_num"]], ["add", "theorem", "succ_to_nat", ["pos_num"]], ["add", "theorem", "to_nat_inj", ["pos_num"]], ["add", "theorem", "to_nat_pos", ["pos_num"]]]}, {"oldPath": null, "newPath": "data/pfun.lean", "changes": [["add", "def", "as_subtype", ["pfun"]], ["add", "theorem", "bind_defined", ["pfun"]], ["add", "def", "dom", ["pfun"]], ["add", "theorem", "dom_iff_graph", ["pfun"]], ["add", "def", "eval_opt", ["pfun"]], ["add", "def", "fn", ["pfun"]], ["add", "def", "graph", ["pfun"]], ["add", "theorem", "pure_defined", ["pfun"]], ["add", "def", "ran", ["pfun"]], ["add", "def", "restrict", ["pfun"]], ["add", "def", "pfun", []], ["add", "def", "assert", ["roption"]], ["add", "theorem", "assert_defined", ["roption"]], ["add", "theorem", "bind_assoc", ["roption"]], ["add", "theorem", "bind_defined", ["roption"]], ["add", "theorem", "bind_some_eq_map", ["roption"]], ["add", "theorem", "dom_iff_mem", ["roption"]], ["add", "theorem", "eq_ret_of_mem", ["roption"]], ["add", "theorem", "exists_of_mem_bind", ["roption"]], ["add", "theorem", "mem_bind", ["roption"]], ["add", "theorem", "mem_ret", ["roption"]], ["add", "theorem", "mem_ret_iff", ["roption"]], ["add", "theorem", "mem_some", ["roption"]], ["add", "theorem", "mem_unique", ["roption"]], ["add", "def", "of_option", ["roption"]], ["add", "theorem", "of_to_option", ["roption"]], ["add", "def", "restrict", ["roption"]], ["add", "theorem", "some_bind", ["roption"]], ["add", "theorem", "to_of_option", ["roption"]], ["add", "def", "to_option", ["roption"]], ["add", "structure", "roption", []]]}, {"oldPath": null, "newPath": "data/pnat.lean", "changes": [["add", "def", "succ_pnat", ["nat"]], ["add", "def", "to_pnat'", ["nat"]], ["add", "def", "to_pnat", ["nat"]], ["add", "theorem", "nat_coe_val", ["pnat"]], ["add", "theorem", "to_pnat'_coe", ["pnat"]], ["add", "theorem", "to_pnat'_val", ["pnat"]], ["add", "def", "pnat", []]]}, {"oldPath": null, "newPath": "data/rat.lean", "changes": [["add", "def", "linear_order_cases_on", []], ["add", "theorem", "linear_order_cases_on_eq", []], ["add", "theorem", "linear_order_cases_on_gt", []], ["add", "theorem", "linear_order_cases_on_lt", []], ["add", "theorem", "mul_nonneg_iff_right_nonneg_of_pos", []], ["add", "theorem", "not_antimono", []], ["add", "def", "decidable_nonneg", ["rat"]], ["add", "def", "rat", []]]}, {"oldPath": null, "newPath": "data/seq/computation.lean", "changes": [["add", "def", "F", ["computation", "bind"]], ["add", "def", "G", ["computation", "bind"]], ["add", "def", "bind", ["computation"]], ["add", "theorem", "bind_assoc", ["computation"]], ["add", "theorem", "bind_congr", ["computation"]], ["add", "theorem", "bind_promises", ["computation"]], ["add", "theorem", "bind_ret'", ["computation"]], ["add", "theorem", "bind_ret", ["computation"]], ["add", "def", "bisim_o", ["computation"]], ["add", "def", "cases_on", ["computation"]], ["add", "def", "F", ["computation", "corec"]], ["add", "def", "corec", ["computation"]], ["add", "def", "corec_eq", ["computation"]], ["add", "def", "destruct", ["computation"]], ["add", "theorem", "destruct_empty", ["computation"]], ["add", "theorem", "destruct_eq_ret", ["computation"]], ["add", "theorem", "destruct_eq_think", ["computation"]], ["add", "theorem", "destruct_map", ["computation"]], ["add", "theorem", "destruct_ret", ["computation"]], ["add", "theorem", "destruct_think", ["computation"]], ["add", "def", "empty", ["computation"]], ["add", "theorem", "empty_orelse", ["computation"]], ["add", "theorem", "empty_promises", ["computation"]], ["add", "theorem", "eq_empty_of_not_terminates", ["computation"]], ["add", "theorem", "eq_of_bisim", ["computation"]], ["add", "theorem", "eq_of_ret_mem", ["computation"]], ["add", "def", "eq_thinkN'", ["computation"]], ["add", "def", "eq_thinkN", ["computation"]], ["add", "theorem", "equivalence", ["computation", "equiv"]], ["add", "theorem", "refl", ["computation", "equiv"]], ["add", "theorem", "symm", ["computation", "equiv"]], ["add", "theorem", "trans", ["computation", "equiv"]], ["add", "def", "equiv", ["computation"]], ["add", "theorem", "equiv_of_mem", ["computation"]], ["add", "theorem", "equiv_ret_of_mem", ["computation"]], ["add", "theorem", "exists_of_lift_rel_left", ["computation"]], ["add", "theorem", "exists_of_lift_rel_right", ["computation"]], ["add", "theorem", "exists_of_mem_bind", ["computation"]], ["add", "theorem", "exists_of_mem_map", ["computation"]], ["add", "def", "exists_results_of_mem", ["computation"]], ["add", "def", "get", ["computation"]], ["add", "theorem", "get_bind", ["computation"]], ["add", "def", "get_eq_of_mem", ["computation"]], ["add", "def", "get_eq_of_promises", ["computation"]], ["add", "theorem", "get_equiv", ["computation"]], ["add", "def", "get_mem", ["computation"]], ["add", "def", "get_promises", ["computation"]], ["add", "theorem", "get_ret", ["computation"]], ["add", "theorem", "get_think", ["computation"]], ["add", "theorem", "get_thinkN", ["computation"]], ["add", "theorem", "has_bind_eq_bind", ["computation"]], ["add", "theorem", "has_map_eq_map", ["computation"]], ["add", "def", "head", ["computation"]], ["add", "theorem", "head_empty", ["computation"]], ["add", "theorem", "head_ret", ["computation"]], ["add", "theorem", "head_think", ["computation"]], ["add", "def", "is_bisimulation", ["computation"]], ["add", "def", "join", ["computation"]], ["add", "theorem", "le_stable", ["computation"]], ["add", "def", "length", ["computation"]], ["add", "theorem", "length_bind", ["computation"]], ["add", "theorem", "length_ret", ["computation"]], ["add", "theorem", "length_think", ["computation"]], ["add", "theorem", "length_thinkN", ["computation"]], ["add", "theorem", "lift_eq_iff_equiv", ["computation"]], ["add", "def", "equiv", ["computation", "lift_rel"]], ["add", "def", "imp", ["computation", "lift_rel"]], ["add", "def", "refl", ["computation", "lift_rel"]], ["add", "theorem", "swap", ["computation", "lift_rel"]], ["add", "def", "symm", ["computation", "lift_rel"]], ["add", "def", "trans", ["computation", "lift_rel"]], ["add", "def", "lift_rel", ["computation"]], ["add", "def", "ret_left", ["computation", "lift_rel_aux"]], ["add", "def", "ret_right", ["computation", "lift_rel_aux"]], ["add", "theorem", "swap", ["computation", "lift_rel_aux"]], ["add", "def", "lift_rel_aux", ["computation"]], ["add", "theorem", "lift_rel_bind", ["computation"]], ["add", "theorem", "lift_rel_congr", ["computation"]], ["add", "theorem", "lift_rel_def", ["computation"]], ["add", "theorem", "lift_rel_map", ["computation"]], ["add", "theorem", "lift_rel_mem_cases", ["computation"]], ["add", "theorem", "lift_rel_of_mem", ["computation"]], ["add", "theorem", "lem", ["computation", "lift_rel_rec"]], ["add", "theorem", "lift_rel_rec", ["computation"]], ["add", "theorem", "lift_rel_return", ["computation"]], ["add", "theorem", "lift_rel_return_left", ["computation"]], ["add", "theorem", "lift_rel_return_right", ["computation"]], ["add", "theorem", "lift_rel_think_left", ["computation"]], ["add", "theorem", "lift_rel_think_right", ["computation"]], ["add", "def", "lmap", ["computation"]], ["add", "def", "map", ["computation"]], ["add", "theorem", "map_comp", ["computation"]], ["add", "theorem", "map_congr", ["computation"]], ["add", "theorem", "map_id", ["computation"]], ["add", "theorem", "map_ret'", ["computation"]], ["add", "theorem", "map_ret", ["computation"]], ["add", "theorem", "map_think'", ["computation"]], ["add", "theorem", "map_think", ["computation"]], ["add", "theorem", "mem_bind", ["computation"]], ["add", "theorem", "mem_map", ["computation"]], ["add", "def", "mem_of_get_eq", ["computation"]], ["add", "def", "mem_of_promises", ["computation"]], ["add", "theorem", "mem_promises", ["computation"]], ["add", "def", "mem_rec_on", ["computation"]], ["add", "theorem", "mem_unique", ["computation"]], ["add", "theorem", "not_mem_empty", ["computation"]], ["add", "theorem", "not_terminates_empty", ["computation"]], ["add", "theorem", "of_results_bind", ["computation"]], ["add", "theorem", "of_results_think", ["computation"]], ["add", "theorem", "of_thinkN_terminates", ["computation"]], ["add", "theorem", "of_think_mem", ["computation"]], ["add", "theorem", "of_think_terminates", ["computation"]], ["add", "def", "orelse", ["computation"]], ["add", "theorem", "orelse_empty", ["computation"]], ["add", "theorem", "orelse_ret", ["computation"]], ["add", "theorem", "orelse_think", ["computation"]], ["add", "def", "promises", ["computation"]], ["add", "theorem", "promises_congr", ["computation"]], ["add", "def", "rel_of_lift_rel", ["computation"]], ["add", "def", "len_unique", ["computation", "results"]], ["add", "def", "length", ["computation", "results"]], ["add", "def", "mem", ["computation", "results"]], ["add", "def", "terminates", ["computation", "results"]], ["add", "def", "val_unique", ["computation", "results"]], ["add", "def", "results", ["computation"]], ["add", "theorem", "results_bind", ["computation"]], ["add", "def", "results_of_terminates'", ["computation"]], ["add", "def", "results_of_terminates", ["computation"]], ["add", "theorem", "results_ret", ["computation"]], ["add", "theorem", "results_think", ["computation"]], ["add", "theorem", "results_thinkN", ["computation"]], ["add", "theorem", "results_thinkN_ret", ["computation"]], ["add", "theorem", "results_think_iff", ["computation"]], ["add", "theorem", "ret_bind", ["computation"]], ["add", "theorem", "ret_mem", ["computation"]], ["add", "theorem", "ret_orelse", ["computation"]], ["add", "def", "return", ["computation"]], ["add", "theorem", "return_def", ["computation"]], ["add", "def", "rmap", ["computation"]], ["add", "def", "run_for", ["computation"]], ["add", "def", "tail", ["computation"]], ["add", "theorem", "tail_empty", ["computation"]], ["add", "theorem", "tail_ret", ["computation"]], ["add", "theorem", "tail_think", ["computation"]], ["add", "def", "terminates", ["computation"]], ["add", "theorem", "terminates_congr", ["computation"]], ["add", "theorem", "terminates_def", ["computation"]], ["add", "theorem", "terminates_map_iff", ["computation"]], ["add", "def", "terminates_of_lift_rel", ["computation"]], ["add", "theorem", "terminates_of_mem", ["computation"]], ["add", "def", "terminates_rec_on", ["computation"]], ["add", "def", "think", ["computation"]], ["add", "def", "thinkN", ["computation"]], ["add", "theorem", "thinkN_equiv", ["computation"]], ["add", "theorem", "thinkN_mem", ["computation"]], ["add", "theorem", "think_bind", ["computation"]], ["add", "theorem", "think_empty", ["computation"]], ["add", "theorem", "think_equiv", ["computation"]], ["add", "theorem", "think_mem", ["computation"]], ["add", "def", "computation", []]]}, {"oldPath": null, "newPath": "data/seq/parallel.lean", "changes": [["add", "theorem", "exists_of_mem_parallel", ["computation"]], ["add", "theorem", "map_parallel", ["computation"]], ["add", "theorem", "mem_parallel", ["computation"]], ["add", "def", "aux1", ["computation", "parallel"]], ["add", "def", "aux2", ["computation", "parallel"]], ["add", "def", "parallel", ["computation"]], ["add", "theorem", "parallel_congr_left", ["computation"]], ["add", "theorem", "parallel_congr_lem", ["computation"]], ["add", "theorem", "parallel_congr_right", ["computation"]], ["add", "theorem", "parallel_empty", ["computation"]], ["add", "theorem", "parallel_promises", ["computation"]], ["add", "def", "parallel_rec", ["computation"]], ["add", "theorem", "aux", ["computation", "terminates_parallel"]], ["add", "theorem", "terminates_parallel", ["computation"]]]}, {"oldPath": null, "newPath": "data/seq/seq.lean", "changes": [["add", "def", "append", ["seq"]], ["add", "theorem", "append_assoc", ["seq"]], ["add", "theorem", "append_nil", ["seq"]], ["add", "def", "bisim_o", ["seq"]], ["add", "def", "cases_on", ["seq"]], ["add", "theorem", "coinduction2", ["seq"]], ["add", "theorem", "coinduction", ["seq"]], ["add", "def", "cons", ["seq"]], ["add", "theorem", "cons_append", ["seq"]], ["add", "def", "F", ["seq", "corec"]], ["add", "def", "corec", ["seq"]], ["add", "def", "corec_eq", ["seq"]], ["add", "def", "destruct", ["seq"]], ["add", "theorem", "destruct_cons", ["seq"]], ["add", "theorem", "destruct_eq_cons", ["seq"]], ["add", "theorem", "destruct_eq_nil", ["seq"]], ["add", "theorem", "destruct_nil", ["seq"]], ["add", "def", "drop", ["seq"]], ["add", "theorem", "dropn_add", ["seq"]], ["add", "theorem", "dropn_tail", ["seq"]], ["add", "theorem", "eq_of_bisim", ["seq"]], ["add", "theorem", "eq_or_mem_of_mem_cons", ["seq"]], ["add", "theorem", "exists_of_mem_map", ["seq"]], ["add", "def", "head", ["seq"]], ["add", "theorem", "head_cons", ["seq"]], ["add", "theorem", "head_dropn", ["seq"]], ["add", "theorem", "head_eq_destruct", ["seq"]], ["add", "theorem", "head_nil", ["seq"]], ["add", "def", "is_bisimulation", ["seq"]], ["add", "def", "join", ["seq"]], ["add", "theorem", "join_append", ["seq"]], ["add", "theorem", "join_cons", ["seq"]], ["add", "theorem", "join_cons_cons", ["seq"]], ["add", "theorem", "join_cons_nil", ["seq"]], ["add", "theorem", "join_nil", ["seq"]], ["add", "theorem", "le_stable", ["seq"]], ["add", "def", "map", ["seq"]], ["add", "theorem", "map_append", ["seq"]], ["add", "theorem", "map_comp", ["seq"]], ["add", "theorem", "map_cons", ["seq"]], ["add", "theorem", "map_id", ["seq"]], ["add", "theorem", "map_nil", ["seq"]], ["add", "theorem", "map_nth", ["seq"]], ["add", "theorem", "map_tail", ["seq"]], ["add", "def", "mem_append_left", ["seq"]], ["add", "theorem", "mem_cons", ["seq"]], ["add", "theorem", "mem_cons_iff", ["seq"]], ["add", "theorem", "mem_cons_of_mem", ["seq"]], ["add", "theorem", "mem_map", ["seq"]], ["add", "theorem", "mem_rec_on", ["seq"]], ["add", "def", "nil", ["seq"]], ["add", "theorem", "nil_append", ["seq"]], ["add", "theorem", "not_mem_nil", ["seq"]], ["add", "def", "nth", ["seq"]], ["add", "theorem", "nth_tail", ["seq"]], ["add", "def", "of_lazy_list", ["seq"]], ["add", "def", "of_list", ["seq"]], ["add", "def", "of_list_append", ["seq"]], ["add", "def", "of_list_cons", ["seq"]], ["add", "def", "of_list_nil", ["seq"]], ["add", "def", "of_mem_append", ["seq"]], ["add", "def", "of_stream", ["seq"]], ["add", "def", "of_stream_append", ["seq"]], ["add", "def", "of_stream_cons", ["seq"]], ["add", "def", "omap", ["seq"]], ["add", "def", "split_at", ["seq"]], ["add", "def", "tail", ["seq"]], ["add", "theorem", "tail_cons", ["seq"]], ["add", "theorem", "tail_nil", ["seq"]], ["add", "def", "take", ["seq"]], ["add", "def", "to_list'", ["seq"]], ["add", "def", "to_list", ["seq"]], ["add", "def", "to_list_or_stream", ["seq"]], ["add", "def", "to_stream", ["seq"]], ["add", "def", "unzip", ["seq"]], ["add", "def", "zip", ["seq"]], ["add", "def", "zip_with", ["seq"]], ["add", "def", "bind", ["seq1"]], ["add", "theorem", "bind_assoc", ["seq1"]], ["add", "theorem", "bind_ret", ["seq1"]], ["add", "def", "join", ["seq1"]], ["add", "theorem", "join_cons", ["seq1"]], ["add", "theorem", "join_join", ["seq1"]], ["add", "theorem", "join_map_ret", ["seq1"]], ["add", "theorem", "join_nil", ["seq1"]], ["add", "def", "map", ["seq1"]], ["add", "theorem", "map_id", ["seq1"]], ["add", "theorem", "map_join'", ["seq1"]], ["add", "theorem", "map_join", ["seq1"]], ["add", "def", "ret", ["seq1"]], ["add", "theorem", "ret_bind", ["seq1"]], ["add", "def", "to_seq", ["seq1"]], ["add", "def", "seq1", []], ["add", "def", "seq", []]]}, {"oldPath": null, "newPath": "data/seq/wseq.lean", "changes": [["add", "def", "all", ["wseq"]], ["add", "def", "any", ["wseq"]], ["add", "def", "append", ["wseq"]], ["add", "theorem", "append_assoc", ["wseq"]], ["add", "theorem", "append_nil", ["wseq"]], ["add", "def", "bind", ["wseq"]], ["add", "theorem", "bind_assoc", ["wseq"]], ["add", "theorem", "bind_congr", ["wseq"]], ["add", "theorem", "bind_ret", ["wseq"]], ["add", "theorem", "imp", ["wseq", "bisim_o"]], ["add", "def", "bisim_o", ["wseq"]], ["add", "def", "cases_on", ["wseq"]], ["add", "def", "collect", ["wseq"]], ["add", "def", "compute", ["wseq"]], ["add", "def", "cons", ["wseq"]], ["add", "theorem", "cons_append", ["wseq"]], ["add", "theorem", "cons_congr", ["wseq"]], ["add", "def", "destruct", ["wseq"]], ["add", "def", "aux", ["wseq", "destruct_append"]], ["add", "theorem", "destruct_append", ["wseq"]], ["add", "theorem", "destruct_congr", ["wseq"]], ["add", "theorem", "destruct_congr_iff", ["wseq"]], ["add", "theorem", "destruct_cons", ["wseq"]], ["add", "theorem", "destruct_dropn", ["wseq"]], ["add", "theorem", "destruct_flatten", ["wseq"]], ["add", "def", "aux", ["wseq", "destruct_join"]], ["add", "theorem", "destruct_join", ["wseq"]], ["add", "theorem", "destruct_map", ["wseq"]], ["add", "theorem", "destruct_nil", ["wseq"]], ["add", "theorem", "destruct_of_seq", ["wseq"]], ["add", "theorem", "destruct_some_of_destruct_tail_some", ["wseq"]], ["add", "theorem", "destruct_tail", ["wseq"]], ["add", "theorem", "destruct_terminates_of_nth_terminates", ["wseq"]], ["add", "theorem", "destruct_think", ["wseq"]], ["add", "def", "aux", ["wseq", "drop"]], ["add", "def", "aux_none", ["wseq", "drop"]], ["add", "def", "drop", ["wseq"]], ["add", "theorem", "dropn_add", ["wseq"]], ["add", "theorem", "dropn_congr", ["wseq"]], ["add", "theorem", "dropn_cons", ["wseq"]], ["add", "theorem", "dropn_nil", ["wseq"]], ["add", "theorem", "dropn_of_seq", ["wseq"]], ["add", "theorem", "dropn_tail", ["wseq"]], ["add", "theorem", "dropn_think", ["wseq"]], ["add", "theorem", "eq_or_mem_iff_mem", ["wseq"]], ["add", "theorem", "equivalence", ["wseq", "equiv"]], ["add", "theorem", "ext", ["wseq", "equiv"]], ["add", "theorem", "refl", ["wseq", "equiv"]], ["add", "theorem", "symm", ["wseq", "equiv"]], ["add", "theorem", "trans", ["wseq", "equiv"]], ["add", "def", "equiv", ["wseq"]], ["add", "theorem", "exists_dropn_of_mem", ["wseq"]], ["add", "theorem", "exists_nth_of_mem", ["wseq"]], ["add", "theorem", "exists_of_lift_rel_left", ["wseq"]], ["add", "theorem", "exists_of_lift_rel_right", ["wseq"]], ["add", "theorem", "exists_of_mem_bind", ["wseq"]], ["add", "theorem", "exists_of_mem_join", ["wseq"]], ["add", "theorem", "exists_of_mem_map", ["wseq"]], ["add", "def", "filter", ["wseq"]], ["add", "def", "filter_map", ["wseq"]], ["add", "def", "find", ["wseq"]], ["add", "def", "find_index", ["wseq"]], ["add", "def", "find_indexes", ["wseq"]], ["add", "def", "flatten", ["wseq"]], ["add", "theorem", "flatten_congr", ["wseq"]], ["add", "theorem", "flatten_equiv", ["wseq"]], ["add", "theorem", "flatten_ret", ["wseq"]], ["add", "theorem", "flatten_think", ["wseq"]], ["add", "def", "get", ["wseq"]], ["add", "def", "head", ["wseq"]], ["add", "theorem", "head_congr", ["wseq"]], ["add", "theorem", "head_cons", ["wseq"]], ["add", "theorem", "head_nil", ["wseq"]], ["add", "theorem", "head_of_seq", ["wseq"]], ["add", "theorem", "head_some_of_head_tail_some", ["wseq"]], ["add", "theorem", "head_some_of_nth_some", ["wseq"]], ["add", "theorem", "head_terminates_iff", ["wseq"]], ["add", "theorem", "head_terminates_of_head_tail_terminates", ["wseq"]], ["add", "theorem", "head_terminates_of_mem", ["wseq"]], ["add", "theorem", "head_terminates_of_nth_terminates", ["wseq"]], ["add", "theorem", "head_think", ["wseq"]], ["add", "def", "index_of", ["wseq"]], ["add", "def", "indexes_of", ["wseq"]], ["add", "def", "inits", ["wseq"]], ["add", "def", "is_empty", ["wseq"]], ["add", "def", "is_finite", ["wseq"]], ["add", "def", "join", ["wseq"]], ["add", "theorem", "join_append", ["wseq"]], ["add", "theorem", "join_congr", ["wseq"]], ["add", "def", "join_cons", ["wseq"]], ["add", "theorem", "join_join", ["wseq"]], ["add", "theorem", "join_map_ret", ["wseq"]], ["add", "def", "join_nil", ["wseq"]], ["add", "theorem", "join_ret", ["wseq"]], ["add", "def", "join_think", ["wseq"]], ["add", "def", "length", ["wseq"]], ["add", "theorem", "length_eq_map", ["wseq"]], ["add", "def", "equiv", ["wseq", "lift_rel"]], ["add", "def", "refl", ["wseq", "lift_rel"]], ["add", "def", "swap", ["wseq", "lift_rel"]], ["add", "def", "swap_lem", ["wseq", "lift_rel"]], ["add", "def", "symm", ["wseq", "lift_rel"]], ["add", "def", "trans", ["wseq", "lift_rel"]], ["add", "def", "lift_rel", ["wseq"]], ["add", "theorem", "lift_rel_append", ["wseq"]], ["add", "theorem", "lift_rel_bind", ["wseq"]], ["add", "def", "lift_rel_cons", ["wseq"]], ["add", "theorem", "lift_rel_destruct", ["wseq"]], ["add", "theorem", "lift_rel_destruct_iff", ["wseq"]], ["add", "theorem", "lift_rel_dropn_destruct", ["wseq"]], ["add", "theorem", "lift_rel_flatten", ["wseq"]], ["add", "theorem", "lem", ["wseq", "lift_rel_join"]], ["add", "theorem", "lift_rel_join", ["wseq"]], ["add", "theorem", "lift_rel_map", ["wseq"]], ["add", "def", "lift_rel_nil", ["wseq"]], ["add", "theorem", "imp", ["wseq", "lift_rel_o"]], ["add", "theorem", "imp_right", ["wseq", "lift_rel_o"]], ["add", "def", "swap", ["wseq", "lift_rel_o"]], ["add", "def", "lift_rel_o", ["wseq"]], ["add", "def", "lift_rel_think_left", ["wseq"]], ["add", "def", "lift_rel_think_right", ["wseq"]], ["add", "def", "map", ["wseq"]], ["add", "theorem", "map_append", ["wseq"]], ["add", "theorem", "map_comp", ["wseq"]], ["add", "theorem", "map_congr", ["wseq"]], ["add", "theorem", "map_cons", ["wseq"]], ["add", "theorem", "map_id", ["wseq"]], ["add", "theorem", "map_join", ["wseq"]], ["add", "theorem", "map_nil", ["wseq"]], ["add", "theorem", "map_ret", ["wseq"]], ["add", "theorem", "map_think", ["wseq"]], ["add", "def", "mem_append_left", ["wseq"]], ["add", "theorem", "mem_congr", ["wseq"]], ["add", "theorem", "mem_cons", ["wseq"]], ["add", "theorem", "mem_cons_iff", ["wseq"]], ["add", "theorem", "mem_cons_of_mem", ["wseq"]], ["add", "theorem", "mem_map", ["wseq"]], ["add", "theorem", "mem_of_mem_dropn", ["wseq"]], ["add", "theorem", "mem_of_mem_tail", ["wseq"]], ["add", "theorem", "mem_rec_on", ["wseq"]], ["add", "theorem", "mem_think", ["wseq"]], ["add", "def", "nil", ["wseq"]], ["add", "theorem", "nil_append", ["wseq"]], ["add", "theorem", "not_mem_nil", ["wseq"]], ["add", "def", "nth", ["wseq"]], ["add", "theorem", "nth_add", ["wseq"]], ["add", "theorem", "nth_congr", ["wseq"]], ["add", "theorem", "nth_mem", ["wseq"]], ["add", "theorem", "nth_of_seq", ["wseq"]], ["add", "theorem", "nth_tail", ["wseq"]], ["add", "theorem", "nth_terminates_le", ["wseq"]], ["add", "def", "of_list", ["wseq"]], ["add", "def", "of_list_cons", ["wseq"]], ["add", "def", "of_list_nil", ["wseq"]], ["add", "def", "of_mem_append", ["wseq"]], ["add", "def", "of_seq", ["wseq"]], ["add", "def", "of_stream", ["wseq"]], ["add", "def", "productive", ["wseq"]], ["add", "theorem", "productive_congr", ["wseq"]], ["add", "def", "remove_nth", ["wseq"]], ["add", "def", "ret", ["wseq"]], ["add", "theorem", "ret_bind", ["wseq"]], ["add", "def", "scanl", ["wseq"]], ["add", "theorem", "seq_destruct_cons", ["wseq"]], ["add", "theorem", "seq_destruct_nil", ["wseq"]], ["add", "theorem", "seq_destruct_think", ["wseq"]], ["add", "def", "split_at", ["wseq"]], ["add", "def", "aux", ["wseq", "tail"]], ["add", "def", "tail", ["wseq"]], ["add", "theorem", "tail_congr", ["wseq"]], ["add", "theorem", "tail_cons", ["wseq"]], ["add", "theorem", "tail_nil", ["wseq"]], ["add", "theorem", "tail_of_seq", ["wseq"]], ["add", "theorem", "tail_think", ["wseq"]], ["add", "def", "take", ["wseq"]], ["add", "def", "think", ["wseq"]], ["add", "theorem", "think_append", ["wseq"]], ["add", "theorem", "think_congr", ["wseq"]], ["add", "theorem", "think_equiv", ["wseq"]], ["add", "def", "to_list'_cons", ["wseq"]], ["add", "def", "to_list'_map", ["wseq"]], ["add", "def", "to_list'_nil", ["wseq"]], ["add", "def", "to_list'_think", ["wseq"]], ["add", "def", "to_list", ["wseq"]], ["add", "def", "to_list_cons", ["wseq"]], ["add", "def", "to_list_nil", ["wseq"]], ["add", "theorem", "to_list_of_list", ["wseq"]], ["add", "def", "to_seq", ["wseq"]], ["add", "theorem", "to_seq_of_seq", ["wseq"]], ["add", "def", "union", ["wseq"]], ["add", "def", "update_nth", ["wseq"]], ["add", "def", "zip", ["wseq"]], ["add", "def", "zip_with", ["wseq"]], ["add", "def", "wseq", []]]}, {"oldPath": null, "newPath": "data/set/basic.lean", "changes": [["add", "theorem", "empty_inter", ["set"]], ["add", "theorem", "empty_subset", ["set"]], ["add", "theorem", "empty_union", ["set"]], ["add", "theorem", "eq_empty_of_forall_not_mem", ["set"]], ["add", "theorem", "eq_empty_of_subset_empty", ["set"]], ["add", "theorem", "eq_of_subset_of_subset", ["set"]], ["add", "theorem", "ext", ["set"]], ["add", "theorem", "inter_assoc", ["set"]], ["add", "theorem", "inter_comm", ["set"]], ["add", "theorem", "inter_empty", ["set"]], ["add", "theorem", "inter_self", ["set"]], ["add", "theorem", "mem_empty_eq", ["set"]], ["add", "theorem", "mem_of_subset_of_mem", ["set"]], ["add", "theorem", "ne_empty_of_mem", ["set"]], ["add", "theorem", "not_mem_empty", ["set"]], ["add", "theorem", "antisymm", ["set", "subset"]], ["add", "theorem", "refl", ["set", "subset"]], ["add", "theorem", "trans", ["set", "subset"]], ["add", "theorem", "union_assoc", ["set"]], ["add", "theorem", "union_comm", ["set"]], ["add", "theorem", "union_empty", ["set"]], ["add", "theorem", "union_self", ["set"]]]}, {"oldPath": null, "newPath": "data/set/default.lean", "changes": []}, {"oldPath": null, "newPath": "data/set/finite.lean", "changes": [["add", "inductive", "finite", ["set"]], ["add", "theorem", "finite_image", ["set"]], ["add", "theorem", "finite_insert", ["set"]], ["add", "theorem", "finite_sUnion", ["set"]], ["add", "theorem", "finite_singleton", ["set"]], ["add", "theorem", "finite_subset", ["set"]], ["add", "theorem", "finite_union", ["set"]]]}, {"oldPath": null, "newPath": "data/set/lattice.lean", "changes": [["add", "def", "Inter", ["set"]], ["add", "theorem", "Inter_eq_comp_Union_comp", ["set"]], ["add", "theorem", "Inter_eq_sInter_image", ["set"]], ["add", "def", "Union", ["set"]], ["add", "theorem", "Union_eq_comp_Inter_comp", ["set"]], ["add", "theorem", "Union_eq_sUnion_image", ["set"]], ["add", "theorem", "Union_subset", ["set"]], ["add", "theorem", "Union_subset_iff", ["set"]], ["add", "theorem", "bInter_empty", ["set"]], ["add", "theorem", "bInter_insert", ["set"]], ["add", "theorem", "bInter_pair", ["set"]], ["add", "theorem", "bInter_singleton", ["set"]], ["add", "theorem", "bInter_subset_of_mem", ["set"]], ["add", "theorem", "bInter_union", ["set"]], ["add", "theorem", "bInter_univ", ["set"]], ["add", "theorem", "bUnion_empty", ["set"]], ["add", "theorem", "bUnion_insert", ["set"]], ["add", "theorem", "bUnion_pair", ["set"]], ["add", "theorem", "bUnion_singleton", ["set"]], ["add", "theorem", "bUnion_subset", ["set"]], ["add", "theorem", "bUnion_union", ["set"]], ["add", "theorem", "bUnion_univ", ["set"]], ["add", "theorem", "bounded_forall_empty_iff", ["set"]], ["add", "theorem", "bounded_forall_image_iff", ["set"]], ["add", "theorem", "bounded_forall_image_of_bounded_forall", ["set"]], ["add", "theorem", "bounded_forall_insert_iff", ["set"]], ["add", "theorem", "compl_Inter", ["set"]], ["add", "theorem", "compl_Union", ["set"]], ["add", "theorem", "compl_comp_compl", ["set"]], ["add", "theorem", "compl_compl", ["set"]], ["add", "theorem", "compl_compl_image", ["set"]], ["add", "theorem", "compl_empty", ["set"]], ["add", "theorem", "compl_eq_univ_diff", ["set"]], ["add", "theorem", "compl_inter", ["set"]], ["add", "theorem", "compl_inter_self", ["set"]], ["add", "theorem", "compl_sInter", ["set"]], ["add", "theorem", "compl_sUnion", ["set"]], ["add", "theorem", "compl_union", ["set"]], ["add", "theorem", "compl_union_self", ["set"]], ["add", "theorem", "compl_univ", ["set"]], ["add", "theorem", "diff_eq", ["set"]], ["add", "theorem", "diff_subset", ["set"]], ["add", "def", "disjoint", ["set"]], ["add", "theorem", "disjoint_bot_left", ["set"]], ["add", "theorem", "disjoint_bot_right", ["set"]], ["add", "theorem", "disjoint_symm", ["set"]], ["add", "theorem", "empty_ne_univ", ["set"]], ["add", "theorem", "eq_of_mem_singleton", ["set"]], ["add", "def", "eq_on", ["set"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["set"]], ["add", "theorem", "eq_sep_of_subset", ["set"]], ["add", "theorem", "eq_univ_of_forall", ["set"]], ["add", "theorem", "eq_univ_of_univ_subset", ["set"]], ["add", "theorem", "eq_vimage_subtype_val_iff", ["set"]], ["add", "theorem", "exists_mem_of_ne_empty", ["set"]], ["add", "theorem", "fix_set_compl", ["set"]], ["add", "theorem", "forall_insert_of_forall", ["set"]], ["add", "theorem", "forall_not_of_sep_empty", ["set"]], ["add", "theorem", "forall_of_forall_insert", ["set"]], ["add", "theorem", "image_comp", ["set"]], ["add", "theorem", "image_empty", ["set"]], ["add", "theorem", "image_eq_image_of_eq_on", ["set"]], ["add", "theorem", "image_id", ["set"]], ["add", "theorem", "image_insert_eq", ["set"]], ["add", "theorem", "image_subset", ["set"]], ["add", "theorem", "image_subset_iff_subset_vimage", ["set"]], ["add", "theorem", "image_union", ["set"]], ["add", "theorem", "insert_comm", ["set"]], ["add", "theorem", "insert_def", ["set"]], ["add", "theorem", "insert_eq", ["set"]], ["add", "theorem", "insert_eq_of_mem", ["set"]], ["add", "theorem", "insert_ne_empty", ["set"]], ["add", "theorem", "insert_of_has_insert", ["set"]], ["add", "theorem", "insert_sdiff_singleton", ["set"]], ["add", "theorem", "inter_compl_self", ["set"]], ["add", "theorem", "inter_def", ["set"]], ["add", "theorem", "inter_distrib_Union_left", ["set"]], ["add", "theorem", "inter_distrib_left", ["set"]], ["add", "theorem", "inter_distrib_right", ["set"]], ["add", "theorem", "inter_empty_of_inter_sUnion_empty", ["set"]], ["add", "theorem", "inter_eq_compl_compl_union_compl", ["set"]], ["add", "theorem", "inter_eq_self_of_subset_left", ["set"]], ["add", "theorem", "inter_eq_self_of_subset_right", ["set"]], ["add", "theorem", "inter_left_comm", ["set"]], ["add", "theorem", "inter_right_comm", ["set"]], ["add", "theorem", "inter_subset_inter", ["set"]], ["add", "theorem", "inter_subset_inter_left", ["set"]], ["add", "theorem", "inter_subset_inter_right", ["set"]], ["add", "theorem", "inter_subset_left", ["set"]], ["add", "theorem", "inter_subset_right", ["set"]], ["add", "theorem", "inter_univ", ["set"]], ["add", "theorem", "mem_Inter", ["set"]], ["add", "theorem", "mem_Inter_eq", ["set"]], ["add", "theorem", "mem_Union_eq", ["set"]], ["add", "theorem", "mem_bInter", ["set"]], ["add", "theorem", "mem_bUnion", ["set"]], ["add", "theorem", "mem_compl", ["set"]], ["add", "theorem", "mem_compl_eq", ["set"]], ["add", "theorem", "mem_compl_iff", ["set"]], ["add", "theorem", "mem_diff", ["set"]], ["add", "theorem", "mem_diff_eq", ["set"]], ["add", "theorem", "mem_diff_iff", ["set"]], ["add", "theorem", "mem_image", ["set"]], ["add", "theorem", "mem_image_compl", ["set"]], ["add", "def", "mem_image_elim", ["set"]], ["add", "def", "mem_image_elim_on", ["set"]], ["add", "theorem", "mem_image_eq", ["set"]], ["add", "theorem", "mem_image_of_mem", ["set"]], ["add", "theorem", "mem_insert", ["set"]], ["add", "theorem", "mem_insert_iff", ["set"]], ["add", "theorem", "mem_insert_of_mem", ["set"]], ["add", "theorem", "mem_inter", ["set"]], ["add", "theorem", "mem_inter_eq", ["set"]], ["add", "theorem", "mem_inter_iff", ["set"]], ["add", "theorem", "mem_of_mem_diff", ["set"]], ["add", "theorem", "mem_of_mem_insert_of_ne", ["set"]], ["add", "theorem", "mem_of_mem_inter_left", ["set"]], ["add", "theorem", "mem_of_mem_inter_right", ["set"]], ["add", "theorem", "mem_or_mem_of_mem_union", ["set"]], ["add", "theorem", "mem_powerset", ["set"]], ["add", "theorem", "mem_powerset_iff", ["set"]], ["add", "theorem", "mem_sInter", ["set"]], ["add", "theorem", "mem_sInter_eq", ["set"]], ["add", "theorem", "mem_sUnion", ["set"]], ["add", "theorem", "mem_sUnion_eq", ["set"]], ["add", "theorem", "mem_sep", ["set"]], ["add", "theorem", "mem_sep_eq", ["set"]], ["add", "theorem", "mem_sep_iff", ["set"]], ["add", "theorem", "mem_set_of", ["set"]], ["add", "theorem", "mem_set_of_eq", ["set"]], ["add", "theorem", "mem_singleton", ["set"]], ["add", "theorem", "mem_singleton_iff", ["set"]], ["add", "theorem", "mem_singleton_of_eq", ["set"]], ["add", "theorem", "elim", ["set", "mem_union"]], ["add", "theorem", "mem_union_eq", ["set"]], ["add", "theorem", "mem_union_iff", ["set"]], ["add", "theorem", "mem_union_left", ["set"]], ["add", "theorem", "mem_union_right", ["set"]], ["add", "theorem", "mem_unionl", ["set"]], ["add", "theorem", "mem_unionr", ["set"]], ["add", "theorem", "mem_univ", ["set"]], ["add", "theorem", "mem_univ_eq", ["set"]], ["add", "theorem", "mem_univ_iff", ["set"]], ["add", "theorem", "mem_vimage_eq", ["set"]], ["add", "theorem", "mono_image", ["set"]], ["add", "theorem", "monotone_vimage", ["set"]], ["add", "theorem", "nmem_set_of_eq", ["set"]], ["add", "theorem", "nonempty_of_inter_nonempty_left", ["set"]], ["add", "theorem", "nonempty_of_inter_nonempty_right", ["set"]], ["add", "theorem", "not_mem_of_mem_compl", ["set"]], ["add", "theorem", "not_mem_of_mem_diff", ["set"]], ["add", "theorem", "not_mem_of_not_mem_sUnion", ["set"]], ["add", "theorem", "pair_eq_singleton", ["set"]], ["add", "def", "pairwise_on", ["set"]], ["add", "def", "sInter", ["set"]], ["add", "theorem", "sInter_empty", ["set"]], ["add", "theorem", "sInter_eq_comp_sUnion_compl", ["set"]], ["add", "theorem", "sInter_image", ["set"]], ["add", "theorem", "sInter_insert", ["set"]], ["add", "theorem", "sInter_singleton", ["set"]], ["add", "theorem", "sInter_subset_of_mem", ["set"]], ["add", "theorem", "sInter_union", ["set"]], ["add", "theorem", "sUnion_empty", ["set"]], ["add", "theorem", "sUnion_eq_compl_sInter_compl", ["set"]], ["add", "theorem", "sUnion_image", ["set"]], ["add", "theorem", "sUnion_insert", ["set"]], ["add", "theorem", "sUnion_singleton", ["set"]], ["add", "theorem", "sUnion_subset", ["set"]], ["add", "theorem", "sUnion_subset_iff", ["set"]], ["add", "theorem", "sUnion_union", ["set"]], ["add", "theorem", "sdiff_singleton_eq_same", ["set"]], ["add", "theorem", "sep_subset", ["set"]], ["add", "theorem", "set_eq_def", ["set"]], ["add", "theorem", "set_of_false", ["set"]], ["add", "theorem", "singleton_def", ["set"]], ["add", "theorem", "singleton_eq_singleton_iff", ["set"]], ["add", "theorem", "singleton_ne_empty", ["set"]], ["add", "theorem", "singleton_subset_iff", ["set"]], ["add", "theorem", "ssubset_def", ["set"]], ["add", "theorem", "ssubset_insert", ["set"]], ["add", "def", "strict_subset", ["set"]], ["add", "theorem", "subset_Inter", ["set"]], ["add", "theorem", "subset_bInter", ["set"]], ["add", "theorem", "subset_bUnion_of_mem", ["set"]], ["add", "theorem", "subset_def", ["set"]], ["add", "theorem", "subset_empty_iff", ["set"]], ["add", "theorem", "subset_insert", ["set"]], ["add", "theorem", "subset_inter", ["set"]], ["add", "theorem", "subset_of_mem_powerset", ["set"]], ["add", "theorem", "subset_sInter", ["set"]], ["add", "theorem", "subset_sUnion_of_mem", ["set"]], ["add", "theorem", "subset_univ", ["set"]], ["add", "theorem", "union_compl_self", ["set"]], ["add", "theorem", "union_def", ["set"]], ["add", "theorem", "union_diff_cancel", ["set"]], ["add", "theorem", "union_distrib_Inter_left", ["set"]], ["add", "theorem", "union_distrib_left", ["set"]], ["add", "theorem", "union_distrib_right", ["set"]], ["add", "theorem", "union_eq_compl_compl_inter_compl", ["set"]], ["add", "theorem", "union_eq_self_of_subset_left", ["set"]], ["add", "theorem", "union_eq_self_of_subset_right", ["set"]], ["add", "theorem", "union_insert_eq", ["set"]], ["add", "theorem", "union_left_comm", ["set"]], ["add", "theorem", "union_right_comm", ["set"]], ["add", "theorem", "union_same_compl", ["set"]], ["add", "theorem", "union_sdiff_same", ["set"]], ["add", "theorem", "union_subset", ["set"]], ["add", "theorem", "union_subset_iff", ["set"]], ["add", "theorem", "union_subset_union", ["set"]], ["add", "theorem", "univ_def", ["set"]], ["add", "theorem", "univ_inter", ["set"]], ["add", "def", "vimage", ["set"]], ["add", "theorem", "vimage_Union", ["set"]], ["add", "theorem", "vimage_comp", ["set"]], ["add", "theorem", "vimage_compl", ["set"]], ["add", "theorem", "vimage_empty", ["set"]], ["add", "theorem", "vimage_id", ["set"]], ["add", "theorem", "vimage_image_eq", ["set"]], ["add", "theorem", "vimage_inter", ["set"]], ["add", "theorem", "vimage_mono", ["set"]], ["add", "theorem", "vimage_sUnion", ["set"]], ["add", "theorem", "vimage_union", ["set"]], ["add", "theorem", "vimage_univ", ["set"]]]}, {"oldPath": null, "newPath": "data/stream.lean", "changes": [["add", "def", "all", ["stream"]], ["add", "theorem", "all_def", ["stream"]], ["add", "def", "any", ["stream"]], ["add", "theorem", "any_def", ["stream"]], ["add", "theorem", "append_append_stream", ["stream"]], ["add", "theorem", "append_approx_drop", ["stream"]], ["add", "def", "append_stream", ["stream"]], ["add", "theorem", "append_stream_head_tail", ["stream"]], ["add", "def", "apply", ["stream"]], ["add", "def", "approx", ["stream"]], ["add", "theorem", "approx_succ", ["stream"]], ["add", "theorem", "approx_zero", ["stream"]], ["add", "theorem", "bisim_simple", ["stream"]], ["add", "theorem", "coinduction", ["stream"]], ["add", "theorem", "composition", ["stream"]], ["add", "def", "cons", ["stream"]], ["add", "theorem", "cons_append_stream", ["stream"]], ["add", "theorem", "cons_nth_inits_core", ["stream"]], ["add", "def", "const", ["stream"]], ["add", "theorem", "const_eq", ["stream"]], ["add", "def", "corec'", ["stream"]], ["add", "theorem", "corec'_eq", ["stream"]], ["add", "def", "corec", ["stream"]], ["add", "theorem", "corec_def", ["stream"]], ["add", "theorem", "corec_eq", ["stream"]], ["add", "theorem", "corec_id_f_eq_iterate", ["stream"]], ["add", "theorem", "corec_id_id_eq_const", ["stream"]], ["add", "def", "corec_on", ["stream"]], ["add", "def", "cycle", ["stream"]], ["add", "theorem", "cycle_eq", ["stream"]], ["add", "theorem", "cycle_singleton", ["stream"]], ["add", "def", "drop", ["stream"]], ["add", "theorem", "drop_append_stream", ["stream"]], ["add", "theorem", "drop_const", ["stream"]], ["add", "theorem", "drop_drop", ["stream"]], ["add", "theorem", "drop_map", ["stream"]], ["add", "theorem", "drop_succ", ["stream"]], ["add", "theorem", "drop_zip", ["stream"]], ["add", "theorem", "eq_of_bisim", ["stream"]], ["add", "theorem", "eq_or_mem_of_mem_cons", ["stream"]], ["add", "def", "even", ["stream"]], ["add", "theorem", "even_cons_cons", ["stream"]], ["add", "theorem", "even_interleave", ["stream"]], ["add", "theorem", "even_tail", ["stream"]], ["add", "theorem", "exists_of_mem_map", ["stream"]], ["add", "def", "head", ["stream"]], ["add", "theorem", "head_cons", ["stream"]], ["add", "theorem", "head_even", ["stream"]], ["add", "theorem", "head_iterate", ["stream"]], ["add", "theorem", "head_map", ["stream"]], ["add", "theorem", "head_zip", ["stream"]], ["add", "theorem", "homomorphism", ["stream"]], ["add", "theorem", "identity", ["stream"]], ["add", "def", "inits", ["stream"]], ["add", "def", "inits_core", ["stream"]], ["add", "theorem", "inits_core_eq", ["stream"]], ["add", "theorem", "inits_eq", ["stream"]], ["add", "theorem", "inits_tail", ["stream"]], ["add", "theorem", "interchange", ["stream"]], ["add", "def", "interleave", ["stream"]], ["add", "theorem", "interleave_eq", ["stream"]], ["add", "theorem", "interleave_even_odd", ["stream"]], ["add", "theorem", "interleave_tail_tail", ["stream"]], ["add", "def", "is_bisimulation", ["stream"]], ["add", "def", "iterate", ["stream"]], ["add", "theorem", "iterate_eq", ["stream"]], ["add", "theorem", "iterate_id", ["stream"]], ["add", "def", "map", ["stream"]], ["add", "theorem", "map_append_stream", ["stream"]], ["add", "theorem", "map_cons", ["stream"]], ["add", "theorem", "map_const", ["stream"]], ["add", "theorem", "map_eq", ["stream"]], ["add", "theorem", "map_eq_apply", ["stream"]], ["add", "theorem", "map_id", ["stream"]], ["add", "theorem", "map_iterate", ["stream"]], ["add", "theorem", "map_map", ["stream"]], ["add", "theorem", "map_tail", ["stream"]], ["add", "theorem", "mem_append_stream_left", ["stream"]], ["add", "theorem", "mem_append_stream_right", ["stream"]], ["add", "theorem", "mem_cons", ["stream"]], ["add", "theorem", "mem_cons_of_mem", ["stream"]], ["add", "theorem", "mem_const", ["stream"]], ["add", "theorem", "mem_cycle", ["stream"]], ["add", "theorem", "mem_interleave_left", ["stream"]], ["add", "theorem", "mem_interleave_right", ["stream"]], ["add", "theorem", "mem_map", ["stream"]], ["add", "theorem", "mem_of_mem_even", ["stream"]], ["add", "theorem", "mem_of_mem_odd", ["stream"]], ["add", "theorem", "mem_of_nth_eq", ["stream"]], ["add", "def", "nats", ["stream"]], ["add", "theorem", "nats_eq", ["stream"]], ["add", "theorem", "nil_append_stream", ["stream"]], ["add", "def", "nth", ["stream"]], ["add", "theorem", "nth_approx", ["stream"]], ["add", "theorem", "nth_const", ["stream"]], ["add", "theorem", "nth_drop", ["stream"]], ["add", "theorem", "nth_even", ["stream"]], ["add", "theorem", "nth_inits", ["stream"]], ["add", "theorem", "nth_interleave_left", ["stream"]], ["add", "theorem", "nth_interleave_right", ["stream"]], ["add", "theorem", "nth_map", ["stream"]], ["add", "theorem", "nth_nats", ["stream"]], ["add", "theorem", "nth_odd", ["stream"]], ["add", "theorem", "nth_of_bisim", ["stream"]], ["add", "theorem", "nth_succ", ["stream"]], ["add", "theorem", "nth_succ_iterate", ["stream"]], ["add", "theorem", "nth_tails", ["stream"]], ["add", "theorem", "nth_unfolds_head_tail", ["stream"]], ["add", "theorem", "nth_zero_cons", ["stream"]], ["add", "theorem", "nth_zero_iterate", ["stream"]], ["add", "theorem", "nth_zip", ["stream"]], ["add", "def", "odd", ["stream"]], ["add", "theorem", "odd_eq", ["stream"]], ["add", "def", "pure", ["stream"]], ["add", "def", "tail", ["stream"]], ["add", "theorem", "tail_cons", ["stream"]], ["add", "theorem", "tail_const", ["stream"]], ["add", "theorem", "tail_drop", ["stream"]], ["add", "theorem", "tail_eq_drop", ["stream"]], ["add", "theorem", "tail_even", ["stream"]], ["add", "theorem", "tail_inits", ["stream"]], ["add", "theorem", "tail_interleave", ["stream"]], ["add", "theorem", "tail_iterate", ["stream"]], ["add", "theorem", "tail_map", ["stream"]], ["add", "theorem", "tail_zip", ["stream"]], ["add", "def", "tails", ["stream"]], ["add", "theorem", "tails_eq", ["stream"]], ["add", "theorem", "tails_eq_iterate", ["stream"]], ["add", "theorem", "take_lemma", ["stream"]], ["add", "def", "unfolds", ["stream"]], ["add", "theorem", "unfolds_eq", ["stream"]], ["add", "theorem", "unfolds_head_eq", ["stream"]], ["add", "def", "zip", ["stream"]], ["add", "theorem", "zip_eq", ["stream"]], ["add", "theorem", "zip_inits_tails", ["stream"]], ["add", "def", "stream", []]]}, {"oldPath": null, "newPath": "data/vector.lean", "changes": [["add", "def", "append", ["vector"]], ["add", "def", "cons", ["vector"]], ["add", "theorem", "cons_head_tail", ["vector"]], ["add", "def", "drop", ["vector"]], ["add", "def", "elim", ["vector"]], ["add", "def", "head", ["vector"]], ["add", "theorem", "head_cons", ["vector"]], ["add", "def", "length", ["vector"]], ["add", "def", "map", ["vector"]], ["add", "def", "map_accumr", ["vector"]], ["add", "def", "map_accumr₂", ["vector"]], ["add", "theorem", "map_cons", ["vector"]], ["add", "theorem", "map_nil", ["vector"]], ["add", "def", "map₂", ["vector"]], ["add", "def", "nil", ["vector"]], ["add", "def", "nth", ["vector"]], ["add", "def", "of_fn", ["vector"]], ["add", "def", "remove_nth", ["vector"]], ["add", "def", "repeat", ["vector"]], ["add", "def", "tail", ["vector"]], ["add", "theorem", "tail_cons", ["vector"]], ["add", "def", "take", ["vector"]], ["add", "def", "to_list", ["vector"]], ["add", "theorem", "to_list_append", ["vector"]], ["add", "theorem", "to_list_cons", ["vector"]], ["add", "theorem", "to_list_drop", ["vector"]], ["add", "theorem", "to_list_length", ["vector"]], ["add", "theorem", "to_list_mk", ["vector"]], ["add", "theorem", "to_list_nil", ["vector"]], ["add", "theorem", "to_list_take", ["vector"]], ["add", "def", "vector", []]]}, {"oldPath": null, "newPath": "leanpkg.toml", "changes": []}, {"oldPath": null, "newPath": "logic/basic.lean", "changes": [["add", "theorem", "and_distrib", []], ["add", "theorem", "and_distrib_right", []], ["add", "theorem", "and_iff_not_or_not", []], ["add", "theorem", "and_imp_iff", []], ["add", "theorem", "and_implies_left", []], ["add", "theorem", "and_implies_right", []], ["add", "theorem", "and_not_of_not_implies", []], ["add", "theorem", "and_not_self_iff", []], ["add", "theorem", "and_of_and_of_imp_left", []], ["add", "theorem", "and_of_and_of_imp_right", []], ["add", "theorem", "and_of_and_of_implies_of_implies", []], ["add", "theorem", "elim", ["bexists"]], ["add", "theorem", "intro", ["bexists"]], ["add", "theorem", "bexists_congr", []], ["add", "theorem", "bexists_implies_distrib", []], ["add", "theorem", "bexists_implies_of_bforall_implies", []], ["add", "theorem", "bexists_not_of_not_bforall", []], ["add", "theorem", "bexists_of_bexists", []], ["add", "theorem", "bexists_of_exists", []], ["add", "theorem", "bexists_or_distrib", []], ["add", "theorem", "bforall_and_distrib", []], ["add", "theorem", "bforall_congr", []], ["add", "theorem", "bforall_implies_of_bexists_implies", []], ["add", "theorem", "bforall_not_of_not_bexists", []], ["add", "theorem", "bforall_of_bforall", []], ["add", "theorem", "bforall_of_forall", []], ["add", "theorem", "bforall_true_iff", []], ["add", "theorem", "by_contradiction", []], ["add", "theorem", "bexists_not_of_not_bforall", ["classical"]], ["add", "theorem", "exists_not_of_not_forall", ["classical"]], ["add", "theorem", "forall_or_distrib_left", ["classical"]], ["add", "theorem", "not_bforall_iff_bexists_not", ["classical"]], ["add", "theorem", "not_forall_iff", ["classical"]], ["add", "theorem", "dec_em", []], ["add", "theorem", "eq_iff_le_and_le", []], ["add", "theorem", "exists_and_distrib_left", []], ["add", "theorem", "exists_implies_distrib", []], ["add", "theorem", "exists_implies_of_forall_implies", []], ["add", "theorem", "exists_not_of_not_forall", []], ["add", "theorem", "exists_of_bexists", []], ["add", "theorem", "exists_of_exists", []], ["add", "theorem", "exists_or_distrib", []], ["add", "theorem", "exists_p_iff_p", []], ["add", "theorem", "exists_prop_iff", []], ["add", "theorem", "forall_and_distrib", []], ["add", "theorem", "forall_eq", []], ["add", "theorem", "forall_implies_of_exists_implies", []], ["add", "theorem", "forall_of_bforall", []], ["add", "theorem", "forall_of_forall", []], ["add", "theorem", "forall_or_distrib_left", []], ["add", "theorem", "forall_p_iff_p", []], ["add", "theorem", "forall_true_iff", []], ["add", "theorem", "implies_false_iff", []], ["add", "theorem", "implies_iff", []], ["add", "theorem", "implies_iff_not_or", []], ["add", "theorem", "implies_intro", []], ["add", "theorem", "implies_of_not_or", []], ["add", "theorem", "implies_self", []], ["add", "theorem", "not_and_iff", []], ["add", "theorem", "not_and_not_of_not_or", []], ["add", "theorem", "not_and_of_not_left", []], ["add", "theorem", "not_and_of_not_or_not", []], ["add", "theorem", "not_and_of_not_right", []], ["add", "theorem", "not_and_self_iff", []], ["add", "theorem", "not_bexists_iff_bforall_not", []], ["add", "theorem", "not_bexists_of_bforall_not", []], ["add", "theorem", "not_bforall_iff_bexists_not", []], ["add", "theorem", "not_bforall_of_bexists_not", []], ["add", "theorem", "not_exists_iff", []], ["add", "theorem", "not_exists_of_forall_not", []], ["add", "theorem", "not_forall_iff", []], ["add", "theorem", "not_forall_of_exists_not", []], ["add", "theorem", "not_imp_iff_not_imp", []], ["add", "theorem", "not_implies_iff", []], ["add", "theorem", "not_implies_of_and_not", []], ["add", "theorem", "not_not_elim", []], ["add", "theorem", "not_not_iff", []], ["add", "theorem", "not_not_of_not_implies", []], ["add", "theorem", "not_of_not_implies", []], ["add", "theorem", "not_or_iff", []], ["add", "theorem", "not_or_not_of_not_and'", []], ["add", "theorem", "not_or_not_of_not_and", []], ["add", "theorem", "not_or_of_implies", []], ["add", "theorem", "not_or_of_not_and_not", []], ["add", "theorem", "of_not_implies", []], ["add", "theorem", "elim3", ["or"]], ["add", "theorem", "or_distrib", []], ["add", "theorem", "or_distrib_right", []], ["add", "theorem", "or_iff_not_and_not", []], ["add", "theorem", "or_iff_or", []], ["add", "theorem", "or_imp_iff_and_imp", []], ["add", "theorem", "or_implies_distrib", []], ["add", "theorem", "or_of_not_implies'", []], ["add", "theorem", "or_of_not_implies", []], ["add", "theorem", "or_of_or_of_implies_left", []], ["add", "theorem", "or_of_or_of_implies_of_implies", []], ["add", "theorem", "or_of_or_of_implies_right", []], ["add", "theorem", "or_resolve_left", []], ["add", "theorem", "or_resolve_right", []], ["add", "theorem", "peirce'", []], ["add", "theorem", "peirce", []], ["add", "theorem", "exists", ["prod"]], ["add", "theorem", "forall", ["prod"]], ["add", "theorem", "inj_iff", ["prod", "mk"]], ["add", "theorem", "set_of_subset_set_of", []], ["add", "theorem", "{u}", []]]}, {"oldPath": null, "newPath": "pending/default.lean", "changes": [["add", "theorem", "shiftl_succ", ["nat"]], ["add", "theorem", "shiftl_zero", ["nat"]]]}, {"oldPath": null, "newPath": "theories/set_theory.lean", "changes": [["add", "def", "Class_to_Cong", ["Class"]], ["add", "def", "Cong_to_Class", ["Class"]], ["add", "def", "Union", ["Class"]], ["add", "theorem", "Union_hom", ["Class"]], ["add", "theorem", "diff_hom", ["Class"]], ["add", "theorem", "empty_hom", ["Class"]], ["add", "def", "fval", ["Class"]], ["add", "theorem", "fval_ex", ["Class"]], ["add", "theorem", "insert_hom", ["Class"]], ["add", "theorem", "inter_hom", ["Class"]], ["add", "def", "iota", ["Class"]], ["add", "theorem", "iota_ex", ["Class"]], ["add", "theorem", "iota_val", ["Class"]], ["add", "theorem", "mem_hom_left", ["Class"]], ["add", "theorem", "mem_hom_right", ["Class"]], ["add", "theorem", "mem_univ", ["Class"]], ["add", "theorem", "inj", ["Class", "of_Set"]], ["add", "def", "of_Set", ["Class"]], ["add", "def", "powerset", ["Class"]], ["add", "theorem", "powerset_hom", ["Class"]], ["add", "theorem", "sep_hom", ["Class"]], ["add", "theorem", "subset_hom", ["Class"]], ["add", "def", "to_Set", ["Class"]], ["add", "theorem", "to_Set_of_Set", ["Class"]], ["add", "theorem", "union_hom", ["Class"]], ["add", "def", "univ", ["Class"]], ["add", "def", "Class", []], ["add", "def", "Union", ["Set"]], ["add", "theorem", "Union_lem", ["Set"]], ["add", "theorem", "Union_singleton", ["Set"]], ["add", "def", "choice_is_func", ["Set"]], ["add", "def", "choice_mem", ["Set"]], ["add", "def", "choice_mem_aux", ["Set"]], ["add", "def", "empty", ["Set"]], ["add", "def", "eq_empty", ["Set"]], ["add", "def", "ext", ["Set"]], ["add", "def", "ext_iff", ["Set"]], ["add", "def", "funs", ["Set"]], ["add", "def", "mk", ["Set", "image"]], ["add", "def", "image", ["Set"]], ["add", "theorem", "induction_on", ["Set"]], ["add", "def", "is_func", ["Set"]], ["add", "def", "map_fval", ["Set"]], ["add", "theorem", "map_is_func", ["Set"]], ["add", "theorem", "map_unique", ["Set"]], ["add", "def", "mem", ["Set"]], ["add", "theorem", "mem_Union", ["Set"]], ["add", "theorem", "mem_diff", ["Set"]], ["add", "def", "mem_empty", ["Set"]], ["add", "def", "mem_funs", ["Set"]], ["add", "def", "mem_image", ["Set"]], ["add", "def", "mem_insert", ["Set"]], ["add", "theorem", "mem_inter", ["Set"]], ["add", "theorem", "mem_map", ["Set"]], ["add", "theorem", "mem_pair", ["Set"]], ["add", "theorem", "mem_pair_sep", ["Set"]], ["add", "theorem", "mem_powerset", ["Set"]], ["add", "def", "mem_prod", ["Set"]], ["add", "theorem", "mem_sep", ["Set"]], ["add", "theorem", "mem_singleton'", ["Set"]], ["add", "theorem", "mem_singleton", ["Set"]], ["add", "theorem", "mem_union", ["Set"]], ["add", "def", "omega", ["Set"]], ["add", "theorem", "omega_succ", ["Set"]], ["add", "theorem", "omega_zero", ["Set"]], ["add", "def", "pair", ["Set"]], ["add", "def", "pair_inj", ["Set"]], ["add", "def", "pair_mem_prod", ["Set"]], ["add", "def", "pair_sep", ["Set"]], ["add", "def", "powerset", ["Set"]], ["add", "def", "prod", ["Set"]], ["add", "theorem", "regularity", ["Set"]], ["add", "theorem", "singleton_inj", ["Set"]], ["add", "theorem", "subset_iff", ["Set"]], ["add", "def", "to_set", ["Set"]], ["add", "def", "Set", []], ["add", "def", "arity", []], ["add", "def", "Union", ["pSet"]], ["add", "def", "equiv", ["pSet", "arity"]], ["add", "def", "eq", ["pSet", "definable"]], ["add", "def", "eq_mk", ["pSet", "definable"]], ["add", "def", "resp", ["pSet", "definable"]], ["add", "inductive", "definable", ["pSet"]], ["add", "def", "embed", ["pSet"]], ["add", "def", "eq", ["pSet", "equiv"]], ["add", "def", "euc", ["pSet", "equiv"]], ["add", "def", "ext", ["pSet", "equiv"]], ["add", "def", "refl", ["pSet", "equiv"]], ["add", "def", "symm", ["pSet", "equiv"]], ["add", "def", "trans", ["pSet", "equiv"]], ["add", "def", "equiv", ["pSet"]], ["add", "def", "func", ["pSet"]], ["add", "def", "image", ["pSet"]], ["add", "def", "lift_mem_embed", ["pSet"]], ["add", "def", "congr_left", ["pSet", "mem"]], ["add", "def", "congr_right", ["pSet", "mem"]], ["add", "def", "ext", ["pSet", "mem"]], ["add", "def", "mk", ["pSet", "mem"]], ["add", "def", "mem", ["pSet"]], ["add", "theorem", "mem_Union", ["pSet"]], ["add", "def", "mem_empty", ["pSet"]], ["add", "def", "mem_image", ["pSet"]], ["add", "theorem", "mem_powerset", ["pSet"]], ["add", "def", "mk_type_func", ["pSet"]], ["add", "def", "of_nat", ["pSet"]], ["add", "def", "omega", ["pSet"]], ["add", "def", "powerset", ["pSet"]], ["add", "def", "equiv", ["pSet", "resp"]], ["add", "def", "euc", ["pSet", "resp"]], ["add", "def", "eval", ["pSet", "resp"]], ["add", "def", "eval_aux", ["pSet", "resp"]], ["add", "def", "eval_val", ["pSet", "resp"]], ["add", "def", "f", ["pSet", "resp"]], ["add", "def", "refl", ["pSet", "resp"]], ["add", "def", "resp", ["pSet"]], ["add", "def", "congr_left", ["pSet", "subset"]], ["add", "def", "congr_right", ["pSet", "subset"]], ["add", "def", "to_set", ["pSet"]], ["add", "def", "type", ["pSet"]], ["add", "inductive", "pSet", []]]}, {"oldPath": null, "newPath": "tools/auto/experiments/set_basic.lean", "changes": [["add", "theorem", "bounded_forall_empty_iff", ["set"]], ["add", "theorem", "bounded_forall_image_iff", ["set"]], ["add", "theorem", "bounded_forall_image_of_bounded_forall", ["set"]], ["add", "theorem", "bounded_forall_insert_iff", ["set"]], ["add", "theorem", "compl_comp_compl", ["set"]], ["add", "theorem", "compl_compl", ["set"]], ["add", "theorem", "compl_compl_image", ["set"]], ["add", "theorem", "compl_empty", ["set"]], ["add", "theorem", "compl_eq_univ_diff", ["set"]], ["add", "theorem", "compl_inter", ["set"]], ["add", "theorem", "compl_inter_self", ["set"]], ["add", "theorem", "compl_union", ["set"]], ["add", "theorem", "compl_union_self", ["set"]], ["add", "theorem", "compl_univ", ["set"]], ["add", "theorem", "diff_eq", ["set"]], ["add", "theorem", "diff_subset", ["set"]], ["add", "theorem", "empty_def", ["set"]], ["add", "theorem", "empty_ne_univ", ["set"]], ["add", "theorem", "eq_of_mem_singleton", ["set"]], ["add", "def", "eq_on", ["set"]], ["add", "theorem", "eq_or_mem_of_mem_insert", ["set"]], ["add", "theorem", "eq_sep_of_subset", ["set"]], ["add", "theorem", "eq_univ_of_forall", ["set"]], ["add", "theorem", "eq_univ_of_univ_subset", ["set"]], ["add", "theorem", "exists_mem_of_ne_empty", ["set"]], ["add", "theorem", "fix_set_compl", ["set"]], ["add", "theorem", "forall_insert_of_forall", ["set"]], ["add", "theorem", "forall_not_of_sep_empty", ["set"]], ["add", "theorem", "forall_of_forall_insert", ["set"]], ["add", "theorem", "image_comp", ["set"]], ["add", "theorem", "image_empty", ["set"]], ["add", "theorem", "image_eq_image_of_eq_on", ["set"]], ["add", "theorem", "image_id", ["set"]], ["add", "theorem", "image_insert_eq", ["set"]], ["add", "theorem", "image_subset", ["set"]], ["add", "theorem", "image_union", ["set"]], ["add", "theorem", "insert_comm", ["set"]], ["add", "theorem", "insert_def", ["set"]], ["add", "theorem", "insert_eq", ["set"]], ["add", "theorem", "insert_eq_of_mem", ["set"]], ["add", "theorem", "insert_ne_empty", ["set"]], ["add", "theorem", "insert_of_has_insert", ["set"]], ["add", "theorem", "inter_compl_self", ["set"]], ["add", "theorem", "inter_def", ["set"]], ["add", "theorem", "inter_distrib_left", ["set"]], ["add", "theorem", "inter_distrib_right", ["set"]], ["add", "theorem", "inter_eq_compl_compl_union_compl", ["set"]], ["add", "theorem", "inter_eq_self_of_subset_left", ["set"]], ["add", "theorem", "inter_eq_self_of_subset_right", ["set"]], ["add", "theorem", "inter_left_comm", ["set"]], ["add", "theorem", "inter_right_comm", ["set"]], ["add", "theorem", "inter_subset_inter_left", ["set"]], ["add", "theorem", "inter_subset_inter_right", ["set"]], ["add", "theorem", "inter_subset_left", ["set"]], ["add", "theorem", "inter_subset_right", ["set"]], ["add", "theorem", "inter_univ", ["set"]], ["add", "theorem", "mem_compl", ["set"]], ["add", "theorem", "mem_compl_eq", ["set"]], ["add", "theorem", "mem_compl_iff", ["set"]], ["add", "theorem", "mem_diff", ["set"]], ["add", "theorem", "mem_diff_eq", ["set"]], ["add", "theorem", "mem_diff_iff", ["set"]], ["add", "theorem", "mem_image", ["set"]], ["add", "theorem", "mem_image_compl", ["set"]], ["add", "def", "mem_image_elim", ["set"]], ["add", "def", "mem_image_elim_on", ["set"]], ["add", "theorem", "mem_image_eq", ["set"]], ["add", "theorem", "mem_image_of_mem", ["set"]], ["add", "theorem", "mem_insert", ["set"]], ["add", "theorem", "mem_insert_iff", ["set"]], ["add", "theorem", "mem_insert_of_mem", ["set"]], ["add", "theorem", "mem_inter", ["set"]], ["add", "theorem", "mem_inter_eq", ["set"]], ["add", "theorem", "mem_inter_iff", ["set"]], ["add", "theorem", "mem_of_mem_diff", ["set"]], ["add", "theorem", "mem_of_mem_insert_of_ne", ["set"]], ["add", "theorem", "mem_of_mem_inter_left", ["set"]], ["add", "theorem", "mem_of_mem_inter_right", ["set"]], ["add", "theorem", "mem_or_mem_of_mem_union", ["set"]], ["add", "theorem", "mem_powerset", ["set"]], ["add", "theorem", "mem_powerset_iff", ["set"]], ["add", "theorem", "mem_sep", ["set"]], ["add", "theorem", "mem_sep_eq", ["set"]], ["add", "theorem", "mem_sep_iff", ["set"]], ["add", "theorem", "mem_set_of", ["set"]], ["add", "theorem", "mem_singleton", ["set"]], ["add", "theorem", "mem_singleton_iff", ["set"]], ["add", "theorem", "mem_singleton_of_eq", ["set"]], ["add", "theorem", "elim", ["set", "mem_union"]], ["add", "theorem", "mem_union_eq", ["set"]], ["add", "theorem", "mem_union_iff", ["set"]], ["add", "theorem", "mem_union_left", ["set"]], ["add", "theorem", "mem_union_right", ["set"]], ["add", "theorem", "mem_unionl", ["set"]], ["add", "theorem", "mem_unionr", ["set"]], ["add", "theorem", "mem_univ", ["set"]], ["add", "theorem", "mem_univ_eq", ["set"]], ["add", "theorem", "mem_univ_iff", ["set"]], ["add", "theorem", "nonempty_of_inter_nonempty_left", ["set"]], ["add", "theorem", "nonempty_of_inter_nonempty_right", ["set"]], ["add", "theorem", "not_mem_of_mem_compl", ["set"]], ["add", "theorem", "not_mem_of_mem_diff", ["set"]], ["add", "theorem", "pair_eq_singleton", ["set"]], ["add", "theorem", "sep_subset", ["set"]], ["add", "theorem", "set_eq_def", ["set"]], ["add", "theorem", "singleton_def", ["set"]], ["add", "theorem", "singleton_ne_empty", ["set"]], ["add", "def", "strict_subset", ["set"]], ["add", "theorem", "subset_def", ["set"]], ["add", "theorem", "subset_empty_iff", ["set"]], ["add", "theorem", "subset_insert", ["set"]], ["add", "theorem", "subset_inter", ["set"]], ["add", "theorem", "subset_of_mem_powerset", ["set"]], ["add", "theorem", "subset_univ", ["set"]], ["add", "theorem", "union_compl_self", ["set"]], ["add", "theorem", "union_def", ["set"]], ["add", "theorem", "union_diff_cancel", ["set"]], ["add", "theorem", "union_distrib_left", ["set"]], ["add", "theorem", "union_distrib_right", ["set"]], ["add", "theorem", "union_eq_compl_compl_inter_compl", ["set"]], ["add", "theorem", "union_eq_self_of_subset_left", ["set"]], ["add", "theorem", "union_eq_self_of_subset_right", ["set"]], ["add", "theorem", "union_left_comm", ["set"]], ["add", "theorem", "union_right_comm", ["set"]], ["add", "theorem", "union_subset", ["set"]], ["add", "theorem", "univ_def", ["set"]], ["add", "theorem", "univ_inter", ["set"]]]}, {"oldPath": null, "newPath": "tools/auto/experiments/test1.lean", "changes": []}, {"oldPath": null, "newPath": "tools/auto/experiments/test2.lean", "changes": [["add", "theorem", "NoMember", []], ["add", "inductive", "and3", []], ["add", "inductive", "or3", []]]}, {"oldPath": null, "newPath": "tools/auto/experiments/test3.lean", "changes": [["add", "theorem", "foo:", []]]}, {"oldPath": null, "newPath": "tools/auto/finish.lean", "changes": [["add", "structure", "auto_config", ["auto"]], ["add", "theorem", "by_contradiction_trick", ["auto"]], ["add", "inductive", "case_option", ["auto"]], ["add", "theorem", "implies_iff_not_or", ["auto", "classical"]], ["add", "def", "classical_normalize_lemma_names", ["auto"]], ["add", "def", "common_normalize_lemma_names", ["auto"]], ["add", "theorem", "not_and_eq", ["auto"]], ["add", "theorem", "not_exists_eq", ["auto"]], ["add", "theorem", "not_forall_eq", ["auto"]], ["add", "theorem", "not_implies_eq", ["auto"]], ["add", "theorem", "not_not_eq", ["auto"]], ["add", "theorem", "not_or_eq", ["auto"]], ["add", "theorem", "curry_iff", []], ["add", "theorem", "iff_def", []], ["add", "theorem", "implies_and_iff", []], ["add", "theorem", "{u}", []]]}, {"oldPath": null, "newPath": "tools/auto/mk_inhabitant.lean", "changes": []}, {"oldPath": null, "newPath": "tools/converter/binders.lean", "changes": [["add", "theorem", "Inf_image", []], ["add", "theorem", "Sup_image", []], ["add", "theorem", "mem_image", []], ["add", "theorem", "{u", []]]}, {"oldPath": null, "newPath": "tools/converter/interactive.lean", "changes": []}, {"oldPath": null, "newPath": "tools/converter/old_conv.lean", "changes": []}, {"oldPath": null, "newPath": "tools/parser/modal.lean", "changes": [["add", "def", "form_of_string", []]]}, {"oldPath": null, "newPath": "tools/parser/parser.lean", "changes": [["add", "def", "deterministic_or", ["list"]], ["add", "def", "apply", ["parser"]], ["add", "def", "chainl1", ["parser"]], ["add", "def", "chainl1_rest", ["parser"]], ["add", "def", "chainl", ["parser"]], ["add", "def", "chainr1", ["parser"]], ["add", "def", "chainr1_rest", ["parser"]], ["add", "def", "chainr", ["parser"]], ["add", "def", "item", ["parser"]], ["add", "def", "many1", ["parser"]], ["add", "def", "many", ["parser"]], ["add", "def", "many_aux", ["parser"]], ["add", "def", "parse", ["parser"]], ["add", "def", "parser_bignum", ["parser"]], ["add", "def", "sat", ["parser"]], ["add", "def", "sepby1", ["parser"]], ["add", "def", "sepby", ["parser"]], ["add", "def", "space", ["parser"]], ["add", "def", "symb", ["parser"]], ["add", "def", "take_char", ["parser"]], ["add", "def", "take_string", ["parser"]], ["add", "def", "take_string_aux", ["parser"]], ["add", "def", "token", ["parser"]], ["add", "def", "parser", []], ["add", "def", "parser_bind", []], ["add", "def", "parser_fmap", []], ["add", "def", "parser_pure", []], ["add", "theorem", "{u", []], ["add", "theorem", "{u}", []]]}, {"oldPath": null, "newPath": "tools/tactic/examples.lean", "changes": [["add", "theorem", "inter_def", []], ["add", "theorem", "mem_set_of", []], ["add", "def", "my_id", []], ["add", "def", "my_id_def", []], ["add", "theorem", "subset_def", []], ["add", "theorem", "subset_inter", []], ["add", "theorem", "union_def", []], ["add", "theorem", "union_subset", []]]}, {"oldPath": null, "newPath": "tools/tactic/tactic.lean", "changes": []}, {"oldPath": null, "newPath": "topology/continuity.lean", "changes": [["add", "theorem", "cases", ["classical"]], ["add", "theorem", "closure_prod_eq", []], ["add", "theorem", "compact_pi_infinite", []], ["add", "def", "continuous", []], ["add", "theorem", "continuous_Inf_dom", []], ["add", "theorem", "continuous_Inf_rng", []], ["add", "theorem", "continuous_Prop", []], ["add", "theorem", "continuous_bot", []], ["add", "theorem", "continuous_coinduced_dom", []], ["add", "theorem", "continuous_coinduced_rng", []], ["add", "theorem", "continuous_compose", []], ["add", "theorem", "continuous_eq_le_coinduced", []], ["add", "theorem", "continuous_fst", []], ["add", "theorem", "continuous_generated_from", []], ["add", "theorem", "continuous_id", []], ["add", "theorem", "continuous_iff_induced_le", []], ["add", "theorem", "continuous_iff_towards", []], ["add", "theorem", "continuous_induced_dom", []], ["add", "theorem", "continuous_induced_rng", []], ["add", "theorem", "continuous_inf_dom", []], ["add", "theorem", "continuous_inf_rng_left", []], ["add", "theorem", "continuous_inf_rng_right", []], ["add", "theorem", "continuous_infi_dom", []], ["add", "theorem", "continuous_infi_rng", []], ["add", "theorem", "continuous_inl", []], ["add", "theorem", "continuous_inr", []], ["add", "theorem", "continuous_prod_mk", []], ["add", "theorem", "continuous_snd", []], ["add", "theorem", "continuous_subtype_mk", []], ["add", "theorem", "continuous_subtype_nhds_cover", []], ["add", "theorem", "continuous_subtype_val", []], ["add", "theorem", "continuous_sum_rec", []], ["add", "theorem", "continuous_sup_dom_left", []], ["add", "theorem", "continuous_sup_dom_right", []], ["add", "theorem", "continuous_sup_rng", []], ["add", "theorem", "continuous_top", []], ["add", "theorem", "false_neq_true", []], ["add", "theorem", "map_nhds_induced_eq", []], ["add", "theorem", "map_nhds_subtype_val_eq", []], ["add", "theorem", "nhds_induced_eq_vmap", []], ["add", "theorem", "nhds_pi", []], ["add", "theorem", "nhds_prod_eq", []], ["add", "theorem", "open_induced", []], ["add", "theorem", "open_set_prod", []], ["add", "theorem", "open_singleton_true", []], ["add", "theorem", "prod_eq_generate_from", []], ["add", "theorem", "val_image", ["subtype"]], ["add", "theorem", "univ_eq_true_false", []]]}, {"oldPath": null, "newPath": "topology/topological_space.lean", "changes": [["add", "def", "closed", []], ["add", "theorem", "closed_Inter", []], ["add", "theorem", "closed_Union_of_locally_finite", []], ["add", "theorem", "closed_closure", []], ["add", "theorem", "closed_compl_iff_open", []], ["add", "theorem", "closed_empty", []], ["add", "theorem", "closed_iff_nhds", []], ["add", "theorem", "closed_sInter", []], ["add", "theorem", "closed_union", []], ["add", "theorem", "closed_univ", []], ["add", "def", "closure", []], ["add", "theorem", "closure_closure", []], ["add", "theorem", "closure_compl_eq", []], ["add", "theorem", "closure_empty", []], ["add", "theorem", "closure_eq_compl_interior_compl", []], ["add", "theorem", "closure_eq_iff_closed", []], ["add", "theorem", "closure_eq_nhds", []], ["add", "theorem", "closure_eq_of_closed", []], ["add", "theorem", "closure_minimal", []], ["add", "theorem", "closure_mono", []], ["add", "theorem", "closure_subset_iff_subset_of_closed", []], ["add", "theorem", "closure_union", []], ["add", "theorem", "closure_univ", []], ["add", "def", "compact", []], ["add", "theorem", "compact_adherence_nhdset", []], ["add", "theorem", "compact_iff_ultrafilter_le_nhds", []], ["add", "theorem", "eq_of_nhds_eq_nhds", []], ["add", "theorem", "eq_of_nhds_neq_bot", []], ["add", "theorem", "finite_subcover_of_compact", []], ["add", "theorem", "generate_from_le", []], ["add", "def", "interior", []], ["add", "theorem", "interior_compl_eq", []], ["add", "theorem", "interior_empty", []], ["add", "theorem", "interior_eq_iff_open", []], ["add", "theorem", "interior_eq_nhds", []], ["add", "theorem", "interior_eq_of_open", []], ["add", "theorem", "interior_inter", []], ["add", "theorem", "interior_interior", []], ["add", "theorem", "interior_maximal", []], ["add", "theorem", "interior_mono", []], ["add", "theorem", "interior_subset", []], ["add", "theorem", "interior_subset_closure", []], ["add", "theorem", "interior_union_closed_of_interior_empty", []], ["add", "theorem", "interior_univ", []], ["add", "theorem", "le_of_nhds_le_nhds", []], ["add", "def", "locally_finite", []], ["add", "theorem", "map_nhds", []], ["add", "theorem", "mem_nhds_sets", []], ["add", "theorem", "mem_nhds_sets_iff", []], ["add", "def", "nhds", []], ["add", "theorem", "nhds_mono", []], ["add", "theorem", "nhds_neq_bot", []], ["add", "theorem", "nhds_sets", []], ["add", "theorem", "nhds_supr", []], ["add", "theorem", "not_eq_empty_iff_exists", []], ["add", "def", "open'", []], ["add", "theorem", "open_Union", []], ["add", "theorem", "open_compl_iff_closed", []], ["add", "theorem", "open_diff", []], ["add", "theorem", "open_empty", []], ["add", "theorem", "open_iff_nhds", []], ["add", "theorem", "open_inter", []], ["add", "theorem", "open_interior", []], ["add", "theorem", "open_sUnion", []], ["add", "theorem", "open_univ", []], ["add", "theorem", "return_le_nhds", []], ["add", "theorem", "subset_closure", []], ["add", "theorem", "subset_interior_iff_subset_of_open", []], ["add", "theorem", "sup_eq_generate_from", []], ["add", "theorem", "supr_eq_generate_from", []], ["add", "theorem", "t2_space_top", []], ["add", "def", "coinduced", ["topological_space"]], ["add", "def", "generate_from", ["topological_space"]], ["add", "inductive", "generate_open", ["topological_space"]], ["add", "def", "induced", ["topological_space"]], ["add", "theorem", "nhds_generate_from", ["topological_space"]], ["add", "structure", "topological_space", []], ["add", "theorem", "topological_space_eq", []]]}, {"oldPath": null, "newPath": "topology/uniform_space.lean", "changes": [["add", "def", "gen", ["Cauchy"]], ["add", "theorem", "monotone_gen", ["Cauchy"]], ["add", "def", "pure_cauchy", ["Cauchy"]], ["add", "theorem", "pure_cauchy_dense", ["Cauchy"]], ["add", "theorem", "uniform_embedding_pure_cauchy", ["Cauchy"]], ["add", "def", "Cauchy", []], ["add", "def", "cauchy", []], ["add", "theorem", "cauchy_downwards", []], ["add", "theorem", "cauchy_map", []], ["add", "theorem", "cauchy_nhds", []], ["add", "theorem", "cauchy_of_totally_bounded_of_ultrafilter", []], ["add", "theorem", "cauchy_pure", []], ["add", "theorem", "cauchy_vmap", []], ["add", "theorem", "closure_eq_inter_uniformity", []], ["add", "theorem", "comp_le_uniformity3", []], ["add", "theorem", "comp_le_uniformity", []], ["add", "theorem", "comp_mem_uniformity_sets", []], ["add", "def", "comp_rel", []], ["add", "theorem", "comp_symm_of_uniformity", []], ["add", "theorem", "compact_of_totally_bounded_closed", []], ["add", "theorem", "compact_of_totally_bounded_complete", []], ["add", "theorem", "complete_of_closed", []], ["add", "theorem", "complete_space_extension", []], ["add", "theorem", "complete_space_separation", []], ["add", "theorem", "continuous_of_uniform", []], ["add", "theorem", "id_comp_rel", []], ["add", "def", "id_rel", []], ["add", "theorem", "interior_mem_uniformity", []], ["add", "theorem", "le_nhds_iff_adhp_of_cauchy", []], ["add", "theorem", "le_nhds_of_cauchy_adhp", []], ["add", "theorem", "lift_nhds_left", []], ["add", "theorem", "lift_nhds_right", []], ["add", "theorem", "mem_nhds_left", []], ["add", "theorem", "mem_nhds_right", []], ["add", "theorem", "mem_nhds_uniformity_iff", []], ["add", "theorem", "monotone_comp_rel", []], ["add", "theorem", "nhds_eq_uniformity", []], ["add", "theorem", "nhds_eq_uniformity_prod", []], ["add", "theorem", "nhds_nhds_eq_uniformity_uniformity_prod", []], ["add", "theorem", "nhdset_of_mem_uniformity", []], ["add", "theorem", "prod_mk_mem_comp_rel", []], ["add", "theorem", "refl_le_uniformity", []], ["add", "theorem", "refl_mem_uniformity", []], ["add", "def", "separated", []], ["add", "theorem", "separated_equiv", []], ["add", "theorem", "supr_uniformity", []], ["add", "theorem", "swap_id_rel", []], ["add", "theorem", "symm_le_uniformity", []], ["add", "theorem", "symm_of_uniformity", []], ["add", "theorem", "to_topological_space_bot", []], ["add", "theorem", "to_topological_space_mono", []], ["add", "theorem", "to_topological_space_supr", []], ["add", "theorem", "to_topological_space_top", []], ["add", "theorem", "to_topological_space_vmap", []], ["add", "def", "totally_bounded", []], ["add", "theorem", "totally_bounded_iff_filter", []], ["add", "theorem", "totally_bounded_iff_ultrafilter", []], ["add", "def", "uniform_continuous", []], ["add", "theorem", "uniform_continuous_of_embedding", []], ["add", "theorem", "uniform_continuous_quotient_mk", []], ["add", "theorem", "uniform_continuous_uniformly_extend", []], ["add", "theorem", "uniform_continuous_vmap", []], ["add", "def", "uniform_embedding", []], ["add", "def", "vmap", ["uniform_space"]], ["add", "theorem", "uniform_space_eq", []], ["add", "def", "uniformity", []], ["add", "theorem", "uniformity_eq_symm", []], ["add", "theorem", "uniformity_eq_uniformity_closure", []], ["add", "theorem", "uniformity_eq_uniformity_interior", []], ["add", "theorem", "uniformity_le_symm", []], ["add", "theorem", "uniformity_lift_le_comp", []], ["add", "theorem", "uniformity_lift_le_swap", []], ["add", "theorem", "uniformly_extend_of_emb", []], ["add", "theorem", "uniformly_extend_spec", []], ["add", "theorem", "uniformly_extend_unique", []], ["add", "theorem", "vmap_quotient_le_uniformity", []]]}]}, {"timestamp": 1500598930, "sha": "21aca921", "message": "Initial commit", "changes": []}]}